ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDk0NmM3ZWMuLmZiMjE5MGMgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjIsNiArMjIsNyBAQAogKi5sc3QKICouc3ltdHlwZXMKICoub3JkZXIKK21vZHVsZXMuYnVpbHRpbgogKi5lbGYKICouYmluCiAqLmd6CkBAIC00NSwxNCArNDYsOCBAQAogIwogIyBHZW5lcmF0ZWQgaW5jbHVkZSBmaWxlcwogIwotaW5jbHVkZS9hc20KLWluY2x1ZGUvYXNtLSovYXNtLW9mZnNldHMuaAogaW5jbHVkZS9jb25maWcKLWluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAotaW5jbHVkZS9saW51eC9jb21waWxlLmgKIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oCi1pbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaAotaW5jbHVkZS9saW51eC9ib3VuZHMuaAogaW5jbHVkZS9nZW5lcmF0ZWQKIAogIyBzdGdpdCBnZW5lcmF0ZWQgZGlycwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCmluZGV4IGRlYjZiNDguLmEwN2MwZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKQEAgLTIxLDI1ICsyMSwyNyBAQAogRGVzY3JpcHRpb246CiAJCUVhY2ggVVNCIGRldmljZSBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmlsZSBuYW1lZAogCQlwb3dlci9sZXZlbC4gIFRoaXMgZmlsZSBob2xkcyBhIHBvd2VyLWxldmVsIHNldHRpbmcgZm9yCi0JCXRoZSBkZXZpY2UsIG9uZSBvZiAib24iLCAiYXV0byIsIG9yICJzdXNwZW5kIi4KKwkJdGhlIGRldmljZSwgZWl0aGVyICJvbiIgb3IgImF1dG8iLgogCiAJCSJvbiIgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBhbGxvd2VkIHRvIGF1dG9zdXNwZW5kLAogCQlhbHRob3VnaCBub3JtYWwgc3VzcGVuZHMgZm9yIHN5c3RlbSBzbGVlcCB3aWxsIHN0aWxsCiAJCWJlIGhvbm9yZWQuICAiYXV0byIgbWVhbnMgdGhlIGRldmljZSB3aWxsIGF1dG9zdXNwZW5kCiAJCWFuZCBhdXRvcmVzdW1lIGluIHRoZSB1c3VhbCBtYW5uZXIsIGFjY29yZGluZyB0byB0aGUKLQkJY2FwYWJpbGl0aWVzIG9mIGl0cyBkcml2ZXIuICAic3VzcGVuZCIgbWVhbnMgdGhlIGRldmljZQotCQlpcyBmb3JjZWQgaW50byBhIHN1c3BlbmRlZCBzdGF0ZSBhbmQgaXQgd2lsbCBub3QgYXV0b3Jlc3VtZQotCQlpbiByZXNwb25zZSB0byBJL08gcmVxdWVzdHMuICBIb3dldmVyIHJlbW90ZS13YWtldXAgcmVxdWVzdHMKLQkJZnJvbSB0aGUgZGV2aWNlIG1heSBzdGlsbCBiZSBlbmFibGVkICh0aGUgcmVtb3RlLXdha2V1cAotCQlzZXR0aW5nIGlzIGNvbnRyb2xsZWQgc2VwYXJhdGVseSBieSB0aGUgcG93ZXIvd2FrZXVwCi0JCWF0dHJpYnV0ZSkuCisJCWNhcGFiaWxpdGllcyBvZiBpdHMgZHJpdmVyLgogCiAJCUR1cmluZyBub3JtYWwgdXNlLCBkZXZpY2VzIHNob3VsZCBiZSBsZWZ0IGluIHRoZSAiYXV0byIKLQkJbGV2ZWwuICBUaGUgb3RoZXIgbGV2ZWxzIGFyZSBtZWFudCBmb3IgYWRtaW5pc3RyYXRpdmUgdXNlcy4KKwkJbGV2ZWwuICBUaGUgIm9uIiBsZXZlbCBpcyBtZWFudCBmb3IgYWRtaW5pc3RyYXRpdmUgdXNlcy4KIAkJSWYgeW91IHdhbnQgdG8gc3VzcGVuZCBhIGRldmljZSBpbW1lZGlhdGVseSBidXQgbGVhdmUgaXQKIAkJZnJlZSB0byB3YWtlIHVwIGluIHJlc3BvbnNlIHRvIEkvTyByZXF1ZXN0cywgeW91IHNob3VsZAogCQl3cml0ZSAiMCIgdG8gcG93ZXIvYXV0b3N1c3BlbmQuCiAKKwkJRGV2aWNlIG5vdCBjYXBhYmxlIG9mIHByb3BlciBzdXNwZW5kIGFuZCByZXN1bWUgc2hvdWxkIGJlCisJCWxlZnQgaW4gdGhlICJvbiIgbGV2ZWwuICBBbHRob3VnaCB0aGUgVVNCIHNwZWMgcmVxdWlyZXMKKwkJZGV2aWNlcyB0byBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lLCBtYW55IG9mIHRoZW0gZG8gbm90LgorCQlJbiBmYWN0IHNvIG1hbnkgZG9uJ3QgdGhhdCBieSBkZWZhdWx0LCB0aGUgVVNCIGNvcmUKKwkJaW5pdGlhbGl6ZXMgYWxsIG5vbi1odWIgZGV2aWNlcyBpbiB0aGUgIm9uIiBsZXZlbC4gIFNvbWUKKwkJZHJpdmVycyBtYXkgY2hhbmdlIHRoaXMgc2V0dGluZyB3aGVuIHRoZXkgYXJlIGJvdW5kLgorCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvLi4uL3Bvd2VyL3BlcnNpc3QKIERhdGU6CQlNYXkgMjAwNwogS2VybmVsVmVyc2lvbjoJMi42LjIzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtbWVtb3J5IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLW1lbW9yeQppbmRleCA5ZmU5MWMwLi5iZjE2MjdiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtbWVtb3J5CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1tZW1vcnkKQEAgLTYwLDYgKzYwLDE5IEBACiBVc2VyczoJCWhvdHBsdWcgbWVtb3J5IHJlbW92ZSB0b29scwogCQlodHRwczovL3czLm9wZW5zb3VyY2UuaWJtLmNvbS9wcm9qZWN0cy9wb3dlcnBjLXV0aWxzLwogCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeVgvbm9kZVkKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IE1lbW9yeSBNYW5hZ2VtZW50IGxpc3QgPGxpbnV4LW1tQGt2YWNrLm9yZz4KK0Rlc2NyaXB0aW9uOgorCQlXaGVuIENPTkZJR19OVU1BIGlzIGVuYWJsZWQsIGEgc3ltYm9saWMgbGluayB0aGF0CisJCXBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBOVU1BIG5vZGUgZGlyZWN0b3J5LgorCisJCUZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHN5bWJvbGljIGxpbmsgaXMgY3JlYXRlZCBmb3IKKwkJbWVtb3J5IHNlY3Rpb24gOSBvbiBub2RlMDoKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5OS9ub2RlMCAtPiAuLi8uLi9ub2RlL25vZGUwCisKKwogV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWC9tZW1vcnlZCiBEYXRlOgkJU2VwdGVtYmVyIDIwMDgKIENvbnRhY3Q6CUdhcnkgSGFkZSA8Z2FyeWhhZGVAdXMuaWJtLmNvbT4KQEAgLTcwLDQgKzgzLDMgQEAKIAkJbWVtb3J5IHNlY3Rpb24gZGlyZWN0b3J5LiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc3ltYm9saWMKIAkJbGluayBpcyBjcmVhdGVkIGZvciBtZW1vcnkgc2VjdGlvbiA5IG9uIG5vZGUwLgogCQkvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZTAvbWVtb3J5OSAtPiAuLi8uLi9tZW1vcnkvbWVtb3J5OQotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtc3lzdGVtLWNwdSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CmluZGV4IDk3NGUyOWYuLjg0YTcxMGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC02Miw2ICs2MiwzNSBAQAogCQlTZWUgRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAorV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Byb2JlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3JlbGVhc2UKK0RhdGU6CQlOb3ZlbWJlciAyMDA5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUR5bmFtaWMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgQ1BVJ3MuICBUaGlzIGlzIG5vdCBob3RwbHVnCisJCXJlbW92YWwsIHRoaXMgaXMgbWVhbnQgY29tcGxldGUgcmVtb3ZhbC9hZGRpdGlvbiBvZiB0aGUgQ1BVCisJCWZyb20gdGhlIHN5c3RlbS4KKworCQlwcm9iZTogd3JpdGVzIHRvIHRoaXMgZmlsZSB3aWxsIGR5bmFtaWNhbGx5IGFkZCBhIENQVSB0byB0aGUKKwkJc3lzdGVtLiAgSW5mb3JtYXRpb24gd3JpdHRlbiB0byB0aGUgZmlsZSB0byBhZGQgQ1BVJ3MgaXMKKwkJYXJjaGl0ZWN0dXJlIHNwZWNpZmljLgorCisJCXJlbGVhc2U6IHdyaXRlcyB0byB0aGlzIGZpbGUgZHluYW1pY2FsbHkgcmVtb3ZlIGEgQ1BVIGZyb20KKwkJdGhlIHN5c3RlbS4gIEluZm9ybWF0aW9uIHdyaXR0ZW50byB0aGUgZmlsZSB0byByZW1vdmUgQ1BVJ3MKKwkJaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy9ub2RlCitEYXRlOgkJT2N0b2JlciAyMDA5CitDb250YWN0OglMaW51eCBtZW1vcnkgbWFuYWdlbWVudCBtYWlsaW5nIGxpc3QgPGxpbnV4LW1tQGt2YWNrLm9yZz4KK0Rlc2NyaXB0aW9uOglEaXNjb3ZlciBOVU1BIG5vZGUgYSBDUFUgYmVsb25ncyB0bworCisJCVdoZW4gQ09ORklHX05VTUEgaXMgZW5hYmxlZCwgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzCisJCXRvIHRoZSBjb3JyZXNwb25kaW5nIE5VTUEgbm9kZSBkaXJlY3RvcnkuCisKKwkJRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc3ltbGluayBpcyBjcmVhdGVkIGZvciBjcHU0MgorCQlpbiBOVU1BIG5vZGUgMjoKKworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHU0Mi9ub2RlMiAtPiAuLi8uLi9ub2RlL25vZGUyCisKIAogV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvbm9kZQogRGF0ZToJCU9jdG9iZXIgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtc2xhYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLXNsYWIKaW5kZXggNmRjZjc1ZS4uOGIwOTNmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtc2xhYgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1zbGFiCkBAIC00NSw4ICs0NSw5IEBACiBDb250YWN0OglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+LAogCQlDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CiBEZXNjcmlwdGlvbjoKLQkJVGhlIGFsbG9jX2Zhc3RwYXRoIGZpbGUgaXMgcmVhZC1vbmx5IGFuZCBzcGVjaWZpZXMgaG93IG1hbnkKLQkJb2JqZWN0cyBoYXZlIGJlZW4gYWxsb2NhdGVkIHVzaW5nIHRoZSBmYXN0IHBhdGguCisJCVRoZSBhbGxvY19mYXN0cGF0aCBmaWxlIHNob3dzIGhvdyBtYW55IG9iamVjdHMgaGF2ZSBiZWVuCisJCWFsbG9jYXRlZCB1c2luZyB0aGUgZmFzdCBwYXRoLiAgSXQgY2FuIGJlIHdyaXR0ZW4gdG8gY2xlYXIgdGhlCisJCWN1cnJlbnQgY291bnQuCiAJCUF2YWlsYWJsZSB3aGVuIENPTkZJR19TTFVCX1NUQVRTIGlzIGVuYWJsZWQuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9zbGFiL2NhY2hlL2FsbG9jX2Zyb21fcGFydGlhbApAQCAtNTUsOSArNTYsMTAgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgYWxsb2NfZnJvbV9wYXJ0aWFsIGZpbGUgaXMgcmVhZC1vbmx5IGFuZCBzcGVjaWZpZXMgaG93Ci0JCW1hbnkgdGltZXMgYSBjcHUgc2xhYiBoYXMgYmVlbiBmdWxsIGFuZCBpdCBoYXMgYmVlbiByZWZpbGxlZAotCQlieSB1c2luZyBhIHNsYWIgZnJvbSB0aGUgbGlzdCBvZiBwYXJ0aWFsbHkgdXNlZCBzbGFicy4KKwkJVGhlIGFsbG9jX2Zyb21fcGFydGlhbCBmaWxlIHNob3dzIGhvdyBtYW55IHRpbWVzIGEgY3B1IHNsYWIgaGFzCisJCWJlZW4gZnVsbCBhbmQgaXQgaGFzIGJlZW4gcmVmaWxsZWQgYnkgdXNpbmcgYSBzbGFiIGZyb20gdGhlIGxpc3QKKwkJb2YgcGFydGlhbGx5IHVzZWQgc2xhYnMuICBJdCBjYW4gYmUgd3JpdHRlbiB0byBjbGVhciB0aGUgY3VycmVudAorCQljb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvYWxsb2NfcmVmaWxsCkBAIC02Niw5ICs2OCw5IEBACiBDb250YWN0OglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+LAogCQlDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CiBEZXNjcmlwdGlvbjoKLQkJVGhlIGFsbG9jX3JlZmlsbCBmaWxlIGlzIHJlYWQtb25seSBhbmQgc3BlY2lmaWVzIGhvdyBtYW55Ci0JCXRpbWVzIHRoZSBwZXItY3B1IGZyZWVsaXN0IHdhcyBlbXB0eSBidXQgdGhlcmUgd2VyZSBvYmplY3RzCi0JCWF2YWlsYWJsZSBhcyB0aGUgcmVzdWx0IG9mIHJlbW90ZSBjcHUgZnJlZXMuCisJCVRoZSBhbGxvY19yZWZpbGwgZmlsZSBzaG93cyBob3cgbWFueSB0aW1lcyB0aGUgcGVyLWNwdSBmcmVlbGlzdAorCQl3YXMgZW1wdHkgYnV0IHRoZXJlIHdlcmUgb2JqZWN0cyBhdmFpbGFibGUgYXMgdGhlIHJlc3VsdCBvZgorCQlyZW1vdGUgY3B1IGZyZWVzLiAgSXQgY2FuIGJlIHdyaXR0ZW4gdG8gY2xlYXIgdGhlIGN1cnJlbnQgY291bnQuCiAJCUF2YWlsYWJsZSB3aGVuIENPTkZJR19TTFVCX1NUQVRTIGlzIGVuYWJsZWQuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9zbGFiL2NhY2hlL2FsbG9jX3NsYWIKQEAgLTc3LDggKzc5LDkgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgYWxsb2Nfc2xhYiBmaWxlIGlzIHJlYWQtb25seSBhbmQgc3BlY2lmaWVzIGhvdyBtYW55IHRpbWVzCi0JCWEgbmV3IHNsYWIgaGFkIHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvci4KKwkJVGhlIGFsbG9jX3NsYWIgZmlsZSBpcyBzaG93cyBob3cgbWFueSB0aW1lcyBhIG5ldyBzbGFiIGhhZCB0bworCQliZSBhbGxvY2F0ZWQgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IuICBJdCBjYW4gYmUgd3JpdHRlbiB0bworCQljbGVhciB0aGUgY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvYWxsb2Nfc2xvd3BhdGgKQEAgLTg3LDkgKzkwLDEwIEBACiBDb250YWN0OglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+LAogCQlDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CiBEZXNjcmlwdGlvbjoKLQkJVGhlIGFsbG9jX3Nsb3dwYXRoIGZpbGUgaXMgcmVhZC1vbmx5IGFuZCBzcGVjaWZpZXMgaG93IG1hbnkKLQkJb2JqZWN0cyBoYXZlIGJlZW4gYWxsb2NhdGVkIHVzaW5nIHRoZSBzbG93IHBhdGggYmVjYXVzZSBvZiBhCi0JCXJlZmlsbCBvciBhbGxvY2F0aW9uIGZyb20gYSBwYXJ0aWFsIG9yIG5ldyBzbGFiLgorCQlUaGUgYWxsb2Nfc2xvd3BhdGggZmlsZSBzaG93cyBob3cgbWFueSBvYmplY3RzIGhhdmUgYmVlbgorCQlhbGxvY2F0ZWQgdXNpbmcgdGhlIHNsb3cgcGF0aCBiZWNhdXNlIG9mIGEgcmVmaWxsIG9yCisJCWFsbG9jYXRpb24gZnJvbSBhIHBhcnRpYWwgb3IgbmV3IHNsYWIuICBJdCBjYW4gYmUgd3JpdHRlbiB0bworCQljbGVhciB0aGUgY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvY2FjaGVfZG1hCkBAIC0xMTcsMTAgKzEyMSwxMSBAQAogQ29udGFjdDoJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPiwKIAkJQ2hyaXN0b3BoIExhbWV0ZXIgPGNsQGxpbnV4LWZvdW5kYXRpb24ub3JnPgogRGVzY3JpcHRpb246Ci0JCVRoZSBmaWxlIGNwdXNsYWJfZmx1c2ggaXMgcmVhZC1vbmx5IGFuZCBzcGVjaWZpZXMgaG93IG1hbnkKLQkJdGltZXMgYSBjYWNoZSdzIGNwdSBzbGFicyBoYXZlIGJlZW4gZmx1c2hlZCBhcyB0aGUgcmVzdWx0IG9mCi0JCWRlc3Ryb3lpbmcgb3Igc2hyaW5raW5nIGEgY2FjaGUsIGEgY3B1IGdvaW5nIG9mZmxpbmUsIG9yIGFzCi0JCXRoZSByZXN1bHQgb2YgZm9yY2luZyBhbiBhbGxvY2F0aW9uIGZyb20gYSBjZXJ0YWluIG5vZGUuCisJCVRoZSBmaWxlIGNwdXNsYWJfZmx1c2ggc2hvd3MgaG93IG1hbnkgdGltZXMgYSBjYWNoZSdzIGNwdSBzbGFicworCQloYXZlIGJlZW4gZmx1c2hlZCBhcyB0aGUgcmVzdWx0IG9mIGRlc3Ryb3lpbmcgb3Igc2hyaW5raW5nIGEKKwkJY2FjaGUsIGEgY3B1IGdvaW5nIG9mZmxpbmUsIG9yIGFzIHRoZSByZXN1bHQgb2YgZm9yY2luZyBhbgorCQlhbGxvY2F0aW9uIGZyb20gYSBjZXJ0YWluIG5vZGUuICBJdCBjYW4gYmUgd3JpdHRlbiB0byBjbGVhciB0aGUKKwkJY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvY3RvcgpAQCAtMTM5LDggKzE0NCw4IEBACiBDb250YWN0OglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+LAogCQlDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CiBEZXNjcmlwdGlvbjoKLQkJVGhlIGZpbGUgZGVhY3RpdmF0ZV9lbXB0eSBpcyByZWFkLW9ubHkgYW5kIHNwZWNpZmllcyBob3cgbWFueQotCQl0aW1lcyBhbiBlbXB0eSBjcHUgc2xhYiB3YXMgZGVhY3RpdmF0ZWQuCisJCVRoZSBkZWFjdGl2YXRlX2VtcHR5IGZpbGUgc2hvd3MgaG93IG1hbnkgdGltZXMgYW4gZW1wdHkgY3B1IHNsYWIKKwkJd2FzIGRlYWN0aXZhdGVkLiAgSXQgY2FuIGJlIHdyaXR0ZW4gdG8gY2xlYXIgdGhlIGN1cnJlbnQgY291bnQuCiAJCUF2YWlsYWJsZSB3aGVuIENPTkZJR19TTFVCX1NUQVRTIGlzIGVuYWJsZWQuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9zbGFiL2NhY2hlL2RlYWN0aXZhdGVfZnVsbApAQCAtMTQ5LDggKzE1NCw4IEBACiBDb250YWN0OglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+LAogCQlDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CiBEZXNjcmlwdGlvbjoKLQkJVGhlIGZpbGUgZGVhY3RpdmF0ZV9mdWxsIGlzIHJlYWQtb25seSBhbmQgc3BlY2lmaWVzIGhvdyBtYW55Ci0JCXRpbWVzIGEgZnVsbCBjcHUgc2xhYiB3YXMgZGVhY3RpdmF0ZWQuCisJCVRoZSBkZWFjdGl2YXRlX2Z1bGwgZmlsZSBzaG93cyBob3cgbWFueSB0aW1lcyBhIGZ1bGwgY3B1IHNsYWIKKwkJd2FzIGRlYWN0aXZhdGVkLiAgSXQgY2FuIGJlIHdyaXR0ZW4gdG8gY2xlYXIgdGhlIGN1cnJlbnQgY291bnQuCiAJCUF2YWlsYWJsZSB3aGVuIENPTkZJR19TTFVCX1NUQVRTIGlzIGVuYWJsZWQuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9zbGFiL2NhY2hlL2RlYWN0aXZhdGVfcmVtb3RlX2ZyZWVzCkBAIC0xNTksOSArMTY0LDkgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgZmlsZSBkZWFjdGl2YXRlX3JlbW90ZV9mcmVlcyBpcyByZWFkLW9ubHkgYW5kIHNwZWNpZmllcyBob3cKLQkJbWFueSB0aW1lcyBhIGNwdSBzbGFiIGhhcyBiZWVuIGRlYWN0aXZhdGVkIGFuZCBjb250YWluZWQgZnJlZQotCQlvYmplY3RzIHRoYXQgd2VyZSBmcmVlZCByZW1vdGVseS4KKwkJVGhlIGRlYWN0aXZhdGVfcmVtb3RlX2ZyZWVzIGZpbGUgc2hvd3MgaG93IG1hbnkgdGltZXMgYSBjcHUgc2xhYgorCQloYXMgYmVlbiBkZWFjdGl2YXRlZCBhbmQgY29udGFpbmVkIGZyZWUgb2JqZWN0cyB0aGF0IHdlcmUgZnJlZWQKKwkJcmVtb3RlbHkuICBJdCBjYW4gYmUgd3JpdHRlbiB0byBjbGVhciB0aGUgY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvZGVhY3RpdmF0ZV90b19oZWFkCkBAIC0xNzAsOSArMTc1LDkgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgZmlsZSBkZWFjdGl2YXRlX3RvX2hlYWQgaXMgcmVhZC1vbmx5IGFuZCBzcGVjaWZpZXMgaG93Ci0JCW1hbnkgdGltZXMgYSBwYXJ0aWFsIGNwdSBzbGFiIHdhcyBkZWFjdGl2YXRlZCBhbmQgYWRkZWQgdG8gdGhlCi0JCWhlYWQgb2YgaXRzIG5vZGUncyBwYXJ0aWFsIGxpc3QuCisJCVRoZSBkZWFjdGl2YXRlX3RvX2hlYWQgZmlsZSBzaG93cyBob3cgbWFueSB0aW1lcyBhIHBhcnRpYWwgY3B1CisJCXNsYWIgd2FzIGRlYWN0aXZhdGVkIGFuZCBhZGRlZCB0byB0aGUgaGVhZCBvZiBpdHMgbm9kZSdzIHBhcnRpYWwKKwkJbGlzdC4gIEl0IGNhbiBiZSB3cml0dGVuIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvdW50LgogCQlBdmFpbGFibGUgd2hlbiBDT05GSUdfU0xVQl9TVEFUUyBpcyBlbmFibGVkLgogCiBXaGF0OgkJL3N5cy9rZXJuZWwvc2xhYi9jYWNoZS9kZWFjdGl2YXRlX3RvX3RhaWwKQEAgLTE4MSw5ICsxODYsOSBAQAogQ29udGFjdDoJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPiwKIAkJQ2hyaXN0b3BoIExhbWV0ZXIgPGNsQGxpbnV4LWZvdW5kYXRpb24ub3JnPgogRGVzY3JpcHRpb246Ci0JCVRoZSBmaWxlIGRlYWN0aXZhdGVfdG9fdGFpbCBpcyByZWFkLW9ubHkgYW5kIHNwZWNpZmllcyBob3cKLQkJbWFueSB0aW1lcyBhIHBhcnRpYWwgY3B1IHNsYWIgd2FzIGRlYWN0aXZhdGVkIGFuZCBhZGRlZCB0byB0aGUKLQkJdGFpbCBvZiBpdHMgbm9kZSdzIHBhcnRpYWwgbGlzdC4KKwkJVGhlIGRlYWN0aXZhdGVfdG9fdGFpbCBmaWxlIHNob3dzIGhvdyBtYW55IHRpbWVzIGEgcGFydGlhbCBjcHUKKwkJc2xhYiB3YXMgZGVhY3RpdmF0ZWQgYW5kIGFkZGVkIHRvIHRoZSB0YWlsIG9mIGl0cyBub2RlJ3MgcGFydGlhbAorCQlsaXN0LiAgSXQgY2FuIGJlIHdyaXR0ZW4gdG8gY2xlYXIgdGhlIGN1cnJlbnQgY291bnQuCiAJCUF2YWlsYWJsZSB3aGVuIENPTkZJR19TTFVCX1NUQVRTIGlzIGVuYWJsZWQuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9zbGFiL2NhY2hlL2Rlc3Ryb3lfYnlfcmN1CkBAIC0yMDEsOSArMjA2LDkgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgZmlsZSBmcmVlX2FkZF9wYXJ0aWFsIGlzIHJlYWQtb25seSBhbmQgc3BlY2lmaWVzIGhvdyBtYW55Ci0JCXRpbWVzIGFuIG9iamVjdCBoYXMgYmVlbiBmcmVlZCBpbiBhIGZ1bGwgc2xhYiBzbyB0aGF0IGl0IGhhZCB0bwotCQlhZGRlZCB0byBpdHMgbm9kZSdzIHBhcnRpYWwgbGlzdC4KKwkJVGhlIGZyZWVfYWRkX3BhcnRpYWwgZmlsZSBzaG93cyBob3cgbWFueSB0aW1lcyBhbiBvYmplY3QgaGFzCisJCWJlZW4gZnJlZWQgaW4gYSBmdWxsIHNsYWIgc28gdGhhdCBpdCBoYWQgdG8gYWRkZWQgdG8gaXRzIG5vZGUncworCQlwYXJ0aWFsIGxpc3QuICBJdCBjYW4gYmUgd3JpdHRlbiB0byBjbGVhciB0aGUgY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvZnJlZV9jYWxscwpAQCAtMjIyLDkgKzIyNyw5IEBACiBDb250YWN0OglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+LAogCQlDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CiBEZXNjcmlwdGlvbjoKLQkJVGhlIGZyZWVfZmFzdHBhdGggZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNwZWNpZmllcyBob3cgbWFueQotCQlvYmplY3RzIGhhdmUgYmVlbiBmcmVlZCB1c2luZyB0aGUgZmFzdCBwYXRoIGJlY2F1c2UgaXQgd2FzIGFuCi0JCW9iamVjdCBmcm9tIHRoZSBjcHUgc2xhYi4KKwkJVGhlIGZyZWVfZmFzdHBhdGggZmlsZSBzaG93cyBob3cgbWFueSBvYmplY3RzIGhhdmUgYmVlbiBmcmVlZAorCQl1c2luZyB0aGUgZmFzdCBwYXRoIGJlY2F1c2UgaXQgd2FzIGFuIG9iamVjdCBmcm9tIHRoZSBjcHUgc2xhYi4KKwkJSXQgY2FuIGJlIHdyaXR0ZW4gdG8gY2xlYXIgdGhlIGN1cnJlbnQgY291bnQuCiAJCUF2YWlsYWJsZSB3aGVuIENPTkZJR19TTFVCX1NUQVRTIGlzIGVuYWJsZWQuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9zbGFiL2NhY2hlL2ZyZWVfZnJvemVuCkBAIC0yMzMsOSArMjM4LDkgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgZnJlZV9mcm96ZW4gZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNwZWNpZmllcyBob3cgbWFueQotCQlvYmplY3RzIGhhdmUgYmVlbiBmcmVlZCB0byBhIGZyb3plbiBzbGFiIChpLmUuIGEgcmVtb3RlIGNwdQotCQlzbGFiKS4KKwkJVGhlIGZyZWVfZnJvemVuIGZpbGUgc2hvd3MgaG93IG1hbnkgb2JqZWN0cyBoYXZlIGJlZW4gZnJlZWQgdG8KKwkJYSBmcm96ZW4gc2xhYiAoaS5lLiBhIHJlbW90ZSBjcHUgc2xhYikuICBJdCBjYW4gYmUgd3JpdHRlbiB0bworCQljbGVhciB0aGUgY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvZnJlZV9yZW1vdmVfcGFydGlhbApAQCAtMjQ0LDkgKzI0OSwxMCBAQAogQ29udGFjdDoJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPiwKIAkJQ2hyaXN0b3BoIExhbWV0ZXIgPGNsQGxpbnV4LWZvdW5kYXRpb24ub3JnPgogRGVzY3JpcHRpb246Ci0JCVRoZSBmaWxlIGZyZWVfcmVtb3ZlX3BhcnRpYWwgaXMgcmVhZC1vbmx5IGFuZCBzcGVjaWZpZXMgaG93Ci0JCW1hbnkgdGltZXMgYW4gb2JqZWN0IGhhcyBiZWVuIGZyZWVkIHRvIGEgbm93LWVtcHR5IHNsYWIgc28KLQkJdGhhdCBpdCBoYWQgdG8gYmUgcmVtb3ZlZCBmcm9tIGl0cyBub2RlJ3MgcGFydGlhbCBsaXN0LgorCQlUaGUgZnJlZV9yZW1vdmVfcGFydGlhbCBmaWxlIHNob3dzIGhvdyBtYW55IHRpbWVzIGFuIG9iamVjdCBoYXMKKwkJYmVlbiBmcmVlZCB0byBhIG5vdy1lbXB0eSBzbGFiIHNvIHRoYXQgaXQgaGFkIHRvIGJlIHJlbW92ZWQgZnJvbQorCQlpdHMgbm9kZSdzIHBhcnRpYWwgbGlzdC4gIEl0IGNhbiBiZSB3cml0dGVuIHRvIGNsZWFyIHRoZSBjdXJyZW50CisJCWNvdW50LgogCQlBdmFpbGFibGUgd2hlbiBDT05GSUdfU0xVQl9TVEFUUyBpcyBlbmFibGVkLgogCiBXaGF0OgkJL3N5cy9rZXJuZWwvc2xhYi9jYWNoZS9mcmVlX3NsYWIKQEAgLTI1NSw4ICsyNjEsOSBAQAogQ29udGFjdDoJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPiwKIAkJQ2hyaXN0b3BoIExhbWV0ZXIgPGNsQGxpbnV4LWZvdW5kYXRpb24ub3JnPgogRGVzY3JpcHRpb246Ci0JCVRoZSBmcmVlX3NsYWIgZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNwZWNpZmllcyBob3cgbWFueSB0aW1lcyBhbgotCQllbXB0eSBzbGFiIGhhcyBiZWVuIGZyZWVkIGJhY2sgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yLgorCQlUaGUgZnJlZV9zbGFiIGZpbGUgc2hvd3MgaG93IG1hbnkgdGltZXMgYW4gZW1wdHkgc2xhYiBoYXMgYmVlbgorCQlmcmVlZCBiYWNrIHRvIHRoZSBwYWdlIGFsbG9jYXRvci4gIEl0IGNhbiBiZSB3cml0dGVuIHRvIGNsZWFyCisJCXRoZSBjdXJyZW50IGNvdW50LgogCQlBdmFpbGFibGUgd2hlbiBDT05GSUdfU0xVQl9TVEFUUyBpcyBlbmFibGVkLgogCiBXaGF0OgkJL3N5cy9rZXJuZWwvc2xhYi9jYWNoZS9mcmVlX3Nsb3dwYXRoCkBAIC0yNjUsOSArMjcyLDkgQEAKIENvbnRhY3Q6CVBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4sCiAJCUNocmlzdG9waCBMYW1ldGVyIDxjbEBsaW51eC1mb3VuZGF0aW9uLm9yZz4KIERlc2NyaXB0aW9uOgotCQlUaGUgZnJlZV9zbG93cGF0aCBmaWxlIGlzIHJlYWQtb25seSBhbmQgc3BlY2lmaWVzIGhvdyBtYW55Ci0JCW9iamVjdHMgaGF2ZSBiZWVuIGZyZWVkIHVzaW5nIHRoZSBzbG93IHBhdGggKGkuZS4gdG8gYSBmdWxsIG9yCi0JCXBhcnRpYWwgc2xhYikuCisJCVRoZSBmcmVlX3Nsb3dwYXRoIGZpbGUgc2hvd3MgaG93IG1hbnkgb2JqZWN0cyBoYXZlIGJlZW4gZnJlZWQKKwkJdXNpbmcgdGhlIHNsb3cgcGF0aCAoaS5lLiB0byBhIGZ1bGwgb3IgcGFydGlhbCBzbGFiKS4gIEl0IGNhbgorCQliZSB3cml0dGVuIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvdW50LgogCQlBdmFpbGFibGUgd2hlbiBDT05GSUdfU0xVQl9TVEFUUyBpcyBlbmFibGVkLgogCiBXaGF0OgkJL3N5cy9rZXJuZWwvc2xhYi9jYWNoZS9od2NhY2hlX2FsaWduCkBAIC0zNDYsMTAgKzM1MywxMCBAQAogQ29udGFjdDoJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPiwKIAkJQ2hyaXN0b3BoIExhbWV0ZXIgPGNsQGxpbnV4LWZvdW5kYXRpb24ub3JnPgogRGVzY3JpcHRpb246Ci0JCVRoZSBmaWxlIG9yZGVyX2ZhbGxiYWNrIGlzIHJlYWQtb25seSBhbmQgc3BlY2lmaWVzIGhvdyBtYW55Ci0JCXRpbWVzIGFuIGFsbG9jYXRpb24gb2YgYSBuZXcgc2xhYiBoYXMgbm90IGJlZW4gcG9zc2libGUgYXQgdGhlCi0JCWNhY2hlJ3Mgb3JkZXIgYW5kIGluc3RlYWQgZmFsbGVuIGJhY2sgdG8gaXRzIG1pbmltdW0gcG9zc2libGUKLQkJb3JkZXIuCisJCVRoZSBvcmRlcl9mYWxsYmFjayBmaWxlIHNob3dzIGhvdyBtYW55IHRpbWVzIGFuIGFsbG9jYXRpb24gb2YgYQorCQluZXcgc2xhYiBoYXMgbm90IGJlZW4gcG9zc2libGUgYXQgdGhlIGNhY2hlJ3Mgb3JkZXIgYW5kIGluc3RlYWQKKwkJZmFsbGVuIGJhY2sgdG8gaXRzIG1pbmltdW0gcG9zc2libGUgb3JkZXIuICBJdCBjYW4gYmUgd3JpdHRlbiB0bworCQljbGVhciB0aGUgY3VycmVudCBjb3VudC4KIAkJQXZhaWxhYmxlIHdoZW4gQ09ORklHX1NMVUJfU1RBVFMgaXMgZW5hYmxlZC4KIAogV2hhdDoJCS9zeXMva2VybmVsL3NsYWIvY2FjaGUvcGFydGlhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1tZW1vcnktcGFnZS1vZmZsaW5lIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1tZW1vcnktcGFnZS1vZmZsaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDcwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLW1lbW9yeS1wYWdlLW9mZmxpbmUKQEAgLTAsMCArMSw0NCBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L3NvZnRfb2ZmbGluZV9wYWdlCitEYXRlOgkJU2VwIDIwMDkKK0tlcm5lbFZlcnNpb246CTIuNi4zMworQ29udGFjdDoJYW5kaUBmaXJzdGZsb29yLm9yZworRGVzY3JpcHRpb246CisJCVNvZnQtb2ZmbGluZSB0aGUgbWVtb3J5IHBhZ2UgY29udGFpbmluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcworCQl3cml0dGVuIGludG8gdGhpcyBmaWxlLiBJbnB1dCBpcyBhIGhleCBudW1iZXIgc3BlY2lmeWluZyB0aGUKKwkJcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZS4gVGhlIGtlcm5lbCB3aWxsIHRoZW4gYXR0ZW1wdAorCQl0byBzb2Z0LW9mZmxpbmUgaXQsIGJ5IG1vdmluZyB0aGUgY29udGVudHMgZWxzZXdoZXJlIG9yCisJCWRyb3BwaW5nIGl0IGlmIHBvc3NpYmxlLiBUaGUga2VybmVsIHdpbGwgdGhlbiBiZSBwbGFjZWQKKwkJb24gdGhlIGJhZCBwYWdlIGxpc3QgYW5kIG5ldmVyIGJlIHJldXNlZC4KKworCQlUaGUgb2ZmbGluaW5nIGlzIGRvbmUgaW4ga2VybmVsIHNwZWNpZmljIGdyYW51YWxpdHkuCisJCU5vcm1hbGx5IGl0J3MgdGhlIGJhc2UgcGFnZSBzaXplIG9mIHRoZSBrZXJuZWwsIGJ1dAorCQl0aGlzIG1pZ2h0IGNoYW5nZS4KKworCQlUaGUgcGFnZSBtdXN0IGJlIHN0aWxsIGFjY2Vzc2libGUsIG5vdCBwb2lzb25lZC4gVGhlCisJCWtlcm5lbCB3aWxsIG5ldmVyIGtpbGwgYW55dGhpbmcgZm9yIHRoaXMsIGJ1dCByYXRoZXIKKwkJZmFpbCB0aGUgb2ZmbGluZS4gIFJldHVybiB2YWx1ZSBpcyB0aGUgc2l6ZSBvZiB0aGUKKwkJbnVtYmVyLCBvciBhIGVycm9yIHdoZW4gdGhlIG9mZmxpbmluZyBmYWlsZWQuICBSZWFkaW5nCisJCXRoZSBmaWxlIGlzIG5vdCBhbGxvd2VkLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2UKK0RhdGU6CQlTZXAgMjAwOQorS2VybmVsVmVyc2lvbjoJMi42LjMzCitDb250YWN0OglhbmRpQGZpcnN0Zmxvb3Iub3JnCitEZXNjcmlwdGlvbjoKKwkJSGFyZC1vZmZsaW5lIHRoZSBtZW1vcnkgcGFnZSBjb250YWluaW5nIHRoZSBwaHlzaWNhbAorCQlhZGRyZXNzIHdyaXR0ZW4gaW50byB0aGlzIGZpbGUuIElucHV0IGlzIGEgaGV4IG51bWJlcgorCQlzcGVjaWZ5aW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBwYWdlLiBUaGUKKwkJa2VybmVsIHdpbGwgdGhlbiBhdHRlbXB0IHRvIGhhcmQtb2ZmbGluZSB0aGUgcGFnZSwgYnkKKwkJdHJ5aW5nIHRvIGRyb3AgdGhlIHBhZ2Ugb3Iga2lsbGluZyBhbnkgb3duZXIgb3IKKwkJdHJpZ2dlcmluZyBJTyBlcnJvcnMgaWYgbmVlZGVkLiAgTm90ZSB0aGlzIG1heSBraWxsCisJCWFueSBwcm9jZXNzZXMgb3duaW5nIHRoZSBwYWdlLiBUaGUga2VybmVsIHdpbGwgYXZvaWQKKwkJdG8gYWNjZXNzIHRoaXMgcGFnZSBhc3N1bWluZyBpdCdzIHBvaXNvbmVkIGJ5IHRoZQorCQloYXJkd2FyZS4KKworCQlUaGUgb2ZmbGluaW5nIGlzIGRvbmUgaW4ga2VybmVsIHNwZWNpZmljIGdyYW51YWxpdHkuCisJCU5vcm1hbGx5IGl0J3MgdGhlIGJhc2UgcGFnZSBzaXplIG9mIHRoZSBrZXJuZWwsIGJ1dAorCQl0aGlzIG1pZ2h0IGNoYW5nZS4KKworCQlSZXR1cm4gdmFsdWUgaXMgdGhlIHNpemUgb2YgdGhlIG51bWJlciwgb3IgYSBlcnJvciB3aGVuCisJCXRoZSBvZmZsaW5pbmcgZmFpbGVkLgorCQlSZWFkaW5nIHRoZSBmaWxlIGlzIG5vdCBhbGxvd2VkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IGFiODMwMGYuLjMyNWNmZDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiAKIERPQ0JPT0tTIDo9IHo4NTMwYm9vay54bWwgbWNhYm9vay54bWwgZGV2aWNlLWRyaXZlcnMueG1sIFwKIAkgICAga2VybmVsLWhhY2tpbmcueG1sIGtlcm5lbC1sb2NraW5nLnhtbCBkZXZpY2Vpb2Jvb2sueG1sIFwKLQkgICAgcHJvY2ZzLWd1aWRlLnhtbCB3cml0aW5nX3VzYl9kcml2ZXIueG1sIG5ldHdvcmtpbmcueG1sIFwKKwkgICAgd3JpdGluZ191c2JfZHJpdmVyLnhtbCBuZXR3b3JraW5nLnhtbCBcCiAJICAgIGtlcm5lbC1hcGkueG1sIGZpbGVzeXN0ZW1zLnhtbCBsc20ueG1sIHVzYi54bWwga2dkYi54bWwgXAogCSAgICBnYWRnZXQueG1sIGxpYmF0YS54bWwgbXRkbmFuZC54bWwgbGlicnMueG1sIHJhcGlkaW8ueG1sIFwKIAkgICAgZ2VuZXJpY2lycS54bWwgczM5MC1kcml2ZXJzLnhtbCB1aW8taG93dG8ueG1sIHNjc2kueG1sIFwKQEAgLTMyLDEwICszMiwxMCBAQAogCiAjIyMKICMgVGhlIHRhcmdldHMgdGhhdCBtYXkgYmUgdXNlZC4KLVBIT05ZICs9IHhtbGRvY3Mgc2dtbGRvY3MgcHNkb2NzIHBkZmRvY3MgaHRtbGRvY3MgbWFuZG9jcyBpbnN0YWxsbWFuZG9jcyBjbGVhbmRvY3MgbWVkaWEKK1BIT05ZICs9IHhtbGRvY3Mgc2dtbGRvY3MgcHNkb2NzIHBkZmRvY3MgaHRtbGRvY3MgbWFuZG9jcyBpbnN0YWxsbWFuZG9jcyBjbGVhbmRvY3MgeG1sZG9jbGlua3MKIAogQk9PS1MgOj0gJChhZGRwcmVmaXggJChvYmopLywkKERPQ0JPT0tTKSkKLXhtbGRvY3M6ICQoQk9PS1MpCit4bWxkb2NzOiAkKEJPT0tTKSB4bWxkb2NsaW5rcwogc2dtbGRvY3M6IHhtbGRvY3MKIAogUFMgOj0gJChwYXRzdWJzdCAlLnhtbCwgJS5wcywgJChCT09LUykpCkBAIC00NSwxNSArNDUsMjQgQEAKIHBkZmRvY3M6ICQoUERGKQogCiBIVE1MIDo9ICQoc29ydCAkKHBhdHN1YnN0ICUueG1sLCAlLmh0bWwsICQoQk9PS1MpKSkKLWh0bWxkb2NzOiBtZWRpYSAkKEhUTUwpCitodG1sZG9jczogJChIVE1MKQogCSQoY2FsbCBidWlsZF9tYWluX2luZGV4KQorCSQoY2FsbCBidWlsZF9pbWFnZXMpCiAKIE1BTiA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLjksICQoQk9PS1MpKQogbWFuZG9jczogJChNQU4pCiAKLW1lZGlhOgotCW1rZGlyIC1wICQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLwotCWNwICQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi8qLnBuZyAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvKi5naWYgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvCitidWlsZF9pbWFnZXMgPSBta2RpciAtcCAkKG9ianRyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS8gJiYgXAorCSAgICAgICBjcCAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvKi5wbmcgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsLyouZ2lmICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLworCit4bWxkb2NsaW5rczoKK2lmbmVxICgkKG9ianRyZWUpLCQoc3JjdHJlZSkpCisJZm9yIGRlcCBpbiBkdmIgbWVkaWEtZW50aXRpZXMudG1wbCBtZWRpYS1pbmRpY2VzLnRtcGwgdjRsOyBkbyBcCisJCXJtIC1mICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLyQkZGVwIFwKKwkJJiYgbG4gLXMgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svJCRkZXAgJChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svIFwKKwkJfHwgZXhpdDsgXAorCWRvbmUKK2VuZGlmCiAKIGluc3RhbGxtYW5kb2NzOiBtYW5kb2NzCiAJbWtkaXIgLXAgL3Vzci9sb2NhbC9tYW4vbWFuOS8KQEAgLTY1LDcgKzc0LDcgQEAKIERPQ1BST0MgICA9ICQob2JqdHJlZSkvc2NyaXB0cy9iYXNpYy9kb2Nwcm9jCiAKIFhNTFRPRkxBR1MgPSAtbSAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbAotI1hNTFRPRkxBR1MgKz0gLS1za2lwLXZhbGlkYXRpb24KK1hNTFRPRkxBR1MgKz0gLS1za2lwLXZhbGlkYXRpb24KIAogIyMjCiAjIERPQ1BST0MgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgpAQCAtMTAxLDE3ICsxMTAsNiBAQAogIyBDaGFuZ2VzIGluIGtlcm5lbC1kb2MgZm9yY2UgYSByZWJ1aWxkIG9mIGFsbCBkb2N1bWVudGF0aW9uCiAkKEJPT0tTKTogJChLRVJORUxET0MpCiAKLSMjIwotIyBwcm9jZnMgZ3VpZGUgdXNlcyBhIC5jIGZpbGUgYXMgZXhhbXBsZSBjb2RlLgotIyBUaGlzIHJlcXVpcmVzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kKLUMtcHJvY2ZzLWV4YW1wbGUgPSBwcm9jZnNfZXhhbXBsZS54bWwKLUMtcHJvY2ZzLWV4YW1wbGUyID0gJChhZGRwcmVmaXggJChvYmopLywkKEMtcHJvY2ZzLWV4YW1wbGUpKQotJChvYmopL3Byb2Nmcy1ndWlkZS54bWw6ICQoQy1wcm9jZnMtZXhhbXBsZTIpCi0KLSMgTGlzdCBvZiBwcm9ncmFtcyB0byBidWlsZAotIyNvb3BzLCB0aGlzIGlzIGEga2VybmVsIG1vZHVsZTo6aG9zdHByb2dzLXkgOj0gcHJvY2ZzX2V4YW1wbGUKLW9iai1tICs9IHByb2Nmc19leGFtcGxlLm8KLQogIyBUZWxsIGtidWlsZCB0byBhbHdheXMgYnVpbGQgdGhlIHByb2dyYW1zCiBhbHdheXMgOj0gJChob3N0cHJvZ3MteSkKIApAQCAtMjM4LDcgKzIzNiw3IEBACiAJJChwYXRzdWJzdCAlLnhtbCwgJS5wZGYsICAkKERPQ0JPT0tTKSkgXAogCSQocGF0c3Vic3QgJS54bWwsICUuaHRtbCwgJChET0NCT09LUykpIFwKIAkkKHBhdHN1YnN0ICUueG1sLCAlLjksICAgICQoRE9DQk9PS1MpKSBcCi0JJChDLXByb2Nmcy1leGFtcGxlKSAkKGluZGV4KQorCSQoaW5kZXgpCiAKIGNsZWFuLWRpcnMgOj0gJChwYXRzdWJzdCAlLnhtbCwlLCQoRE9DQk9PS1MpKSBtYW4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbAppbmRleCBiYjVhYjc0Li5jNzI1Y2I4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbApAQCAtMjMsNiArMjMsNyBAQAogPCFFTlRJVFkgVklESU9DLUVOVU1JTlBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW1pbnB1dCc+PGNvbnN0YW50PlZJRElPQ19FTlVNSU5QVVQ8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLUVOVU1PVVRQVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtb3V0cHV0Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1PVVRQVVQ8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLUVOVU1TVEQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtc3RkJz48Y29uc3RhbnQ+VklESU9DX0VOVU1TVEQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLUVOVU0tRFYtUFJFU0VUUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZHYtcHJlc2V0cyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0RWX1BSRVNFVFM8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLUVOVU0tRk1UICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bS1mbXQnPjxjb25zdGFudD5WSURJT0NfRU5VTV9GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLUVOVU0tRlJBTUVJTlRFUlZBTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzJz48Y29uc3RhbnQ+VklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLUVOVU0tRlJBTUVTSVpFUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZnJhbWVzaXplcyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FU0laRVM8L2NvbnN0YW50PjwvbGluaz4iPgpAQCAtMzAsNiArMzEsOCBAQAogPCFFTlRJVFkgVklESU9DLUctQVVET1VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1hdWRpb291dCc+PGNvbnN0YW50PlZJRElPQ19HX0FVRE9VVDwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtRy1DUk9QICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jcm9wJz48Y29uc3RhbnQ+VklESU9DX0dfQ1JPUDwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtRy1DVFJMICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jdHJsJz48Y29uc3RhbnQ+VklESU9DX0dfQ1RSTDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1EVi1QUkVTRVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWR2LXByZXNldCc+PGNvbnN0YW50PlZJRElPQ19HX0RWX1BSRVNFVDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtRy1EVi1USU1JTkdTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1kdi10aW1pbmdzJz48Y29uc3RhbnQ+VklESU9DX0dfRFZfVElNSU5HUzwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtRy1FTkMtSU5ERVggIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWVuYy1pbmRleCc+PGNvbnN0YW50PlZJRElPQ19HX0VOQ19JTkRFWDwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtRy1FWFQtQ1RSTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWV4dC1jdHJscyc+PGNvbnN0YW50PlZJRElPQ19HX0VYVF9DVFJMUzwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtRy1GQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mYnVmJz48Y29uc3RhbnQ+VklESU9DX0dfRkJVRjwvY29uc3RhbnQ+PC9saW5rPiI+CkBAIC01Myw2ICs1Niw3IEBACiA8IUVOVElUWSBWSURJT0MtUVVFUllDVFJMICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnljdHJsJz48Y29uc3RhbnQ+VklESU9DX1FVRVJZQ1RSTDwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtUVVFUllNRU5VICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnljdHJsJz48Y29uc3RhbnQ+VklESU9DX1FVRVJZTUVOVTwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtUVVFUllTVEQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xdWVyeXN0ZCc+PGNvbnN0YW50PlZJRElPQ19RVUVSWVNURDwvY29uc3RhbnQ+PC9saW5rPiI+Cis8IUVOVElUWSBWSURJT0MtUVVFUlktRFYtUFJFU0VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcXVlcnktZHYtcHJlc2V0Jz48Y29uc3RhbnQ+VklESU9DX1FVRVJZX0RWX1BSRVNFVDwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtUkVRQlVGUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXJlcWJ1ZnMnPjxjb25zdGFudD5WSURJT0NfUkVRQlVGUzwvY29uc3RhbnQ+PC9saW5rPiI+CiA8IUVOVElUWSBWSURJT0MtU1RSRUFNT0ZGICI8bGluayBsaW5rZW5kPSd2aWRpb2Mtc3RyZWFtb24nPjxjb25zdGFudD5WSURJT0NfU1RSRUFNT0ZGPC9jb25zdGFudD48L2xpbms+Ij4KIDwhRU5USVRZIFZJRElPQy1TVFJFQU1PTiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN0cmVhbW9uJz48Y29uc3RhbnQ+VklESU9DX1NUUkVBTU9OPC9jb25zdGFudD48L2xpbms+Ij4KQEAgLTYwLDYgKzY0LDggQEAKIDwhRU5USVRZIFZJRElPQy1TLUFVRE9VVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctYXVkaW9vdXQnPjxjb25zdGFudD5WSURJT0NfU19BVURPVVQ8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLVMtQ1JPUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctY3JvcCc+PGNvbnN0YW50PlZJRElPQ19TX0NST1A8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLVMtQ1RSTCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctY3RybCc+PGNvbnN0YW50PlZJRElPQ19TX0NUUkw8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVMtRFYtUFJFU0VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1kdi1wcmVzZXQnPjxjb25zdGFudD5WSURJT0NfU19EVl9QUkVTRVQ8L2NvbnN0YW50PjwvbGluaz4iPgorPCFFTlRJVFkgVklESU9DLVMtRFYtVElNSU5HUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZHYtdGltaW5ncyc+PGNvbnN0YW50PlZJRElPQ19TX0RWX1RJTUlOR1M8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLVMtRVhULUNUUkxTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1leHQtY3RybHMnPjxjb25zdGFudD5WSURJT0NfU19FWFRfQ1RSTFM8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLVMtRkJVRiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZmJ1Zic+PGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PjwvbGluaz4iPgogPCFFTlRJVFkgVklESU9DLVMtRk1UICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mbXQnPjxjb25zdGFudD5WSURJT0NfU19GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgpAQCAtMTE4LDYgKzEyNCw3IEBACiA8IS0tIFN0cnVjdHVyZXMgLS0+CiA8IUVOVElUWSB2NGwyLWF1ZGlvICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWF1ZGlvJz52NGwyX2F1ZGlvPC9saW5rPiI+CiA8IUVOVElUWSB2NGwyLWF1ZGlvb3V0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWF1ZGlvb3V0Jz52NGwyX2F1ZGlvb3V0PC9saW5rPiI+Cis8IUVOVElUWSB2NGwyLWJ0LXRpbWluZ3MgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYnQtdGltaW5ncyc+djRsMl9idF90aW1pbmdzPC9saW5rPiI+CiA8IUVOVElUWSB2NGwyLWJ1ZmZlciAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1idWZmZXInPnY0bDJfYnVmZmVyPC9saW5rPiI+CiA8IUVOVElUWSB2NGwyLWNhcGFiaWxpdHkgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwYWJpbGl0eSc+djRsMl9jYXBhYmlsaXR5PC9saW5rPiI+CiA8IUVOVElUWSB2NGwyLWNhcHR1cmVwYXJtICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNhcHR1cmVwYXJtJz52NGwyX2NhcHR1cmVwYXJtPC9saW5rPiI+CkBAIC0xMjgsNiArMTM1LDkgQEAKIDwhRU5USVRZIHY0bDItZGJnLWNoaXAtaWRlbnQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLWNoaXAtaWRlbnQnPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+Ij4KIDwhRU5USVRZIHY0bDItZGJnLW1hdGNoICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1tYXRjaCc+djRsMl9kYmdfbWF0Y2g8L2xpbms+Ij4KIDwhRU5USVRZIHY0bDItZGJnLXJlZ2lzdGVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1yZWdpc3Rlcic+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZHYtZW51bS1wcmVzZXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZHYtZW51bS1wcmVzZXQnPnY0bDJfZHZfZW51bV9wcmVzZXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZHYtcHJlc2V0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWR2LXByZXNldCc+djRsMl9kdl9wcmVzZXQ8L2xpbms+Ij4KKzwhRU5USVRZIHY0bDItZHYtdGltaW5ncyAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kdi10aW1pbmdzJz52NGwyX2R2X3RpbWluZ3M8L2xpbms+Ij4KIDwhRU5USVRZIHY0bDItZW5jLWlkeCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4Jz52NGwyX2VuY19pZHg8L2xpbms+Ij4KIDwhRU5USVRZIHY0bDItZW5jLWlkeC1lbnRyeSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4LWVudHJ5Jz52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+Ij4KIDwhRU5USVRZIHY0bDItZW5jb2Rlci1jbWQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jb2Rlci1jbWQnPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+Ij4KQEAgLTI0Myw2ICsyNTMsMTAgQEAKIDwhRU5USVRZIHN1Yi1lbnVtYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwiPgogPCFFTlRJVFkgc3ViLWVudW1pbnB1dCBTWVNURU0gInY0bC92aWRpb2MtZW51bWlucHV0LnhtbCI+CiA8IUVOVElUWSBzdWItZW51bW91dHB1dCBTWVNURU0gInY0bC92aWRpb2MtZW51bW91dHB1dC54bWwiPgorPCFFTlRJVFkgc3ViLWVudW0tZHYtcHJlc2V0cyBTWVNURU0gInY0bC92aWRpb2MtZW51bS1kdi1wcmVzZXRzLnhtbCI+Cis8IUVOVElUWSBzdWItZy1kdi1wcmVzZXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbCI+Cis8IUVOVElUWSBzdWItcXVlcnktZHYtcHJlc2V0IFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeS1kdi1wcmVzZXQueG1sIj4KKzwhRU5USVRZIHN1Yi1nLWR2LXRpbWluZ3MgU1lTVEVNICJ2NGwvdmlkaW9jLWctZHYtdGltaW5ncy54bWwiPgogPCFFTlRJVFkgc3ViLWVudW1zdGQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1zdGQueG1sIj4KIDwhRU5USVRZIHN1Yi1nLWF1ZGlvIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWF1ZGlvLnhtbCI+CiA8IUVOVElUWSBzdWItZy1hdWRpb291dCBTWVNURU0gInY0bC92aWRpb2MtZy1hdWRpb291dC54bWwiPgpAQCAtMzMzLDYgKzM0NywxMCBAQAogPCFFTlRJVFkgZW51bWF1ZGlvb3V0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sIj4KIDwhRU5USVRZIGVudW1pbnB1dCBTWVNURU0gInY0bC92aWRpb2MtZW51bWlucHV0LnhtbCI+CiA8IUVOVElUWSBlbnVtb3V0cHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtb3V0cHV0LnhtbCI+Cis8IUVOVElUWSBlbnVtLWR2LXByZXNldHMgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW0tZHYtcHJlc2V0cy54bWwiPgorPCFFTlRJVFkgZy1kdi1wcmVzZXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbCI+Cis8IUVOVElUWSBxdWVyeS1kdi1wcmVzZXQgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwiPgorPCFFTlRJVFkgZy1kdi10aW1pbmdzIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWR2LXRpbWluZ3MueG1sIj4KIDwhRU5USVRZIGVudW1zdGQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1zdGQueG1sIj4KIDwhRU5USVRZIGctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KIDwhRU5USVRZIGctYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtaW5kaWNlcy50bXBsCmluZGV4IDllMzBhMjMuLjc4ZDYwMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWluZGljZXMudG1wbApAQCAtMzYsNiArMzYsNyBAQAogPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wcmVlbXBoYXNpcyc+djRsMl9wcmVlbXBoYXNpczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+CiA8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW8nPnY0bDJfYXVkaW88L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgogPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWF1ZGlvb3V0Jz52NGwyX2F1ZGlvb3V0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1idC10aW1pbmdzJz52NGwyX2J0X3RpbWluZ3M8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgogPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1ZmZlcic+djRsMl9idWZmZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgogPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNhcGFiaWxpdHknPnY0bDJfY2FwYWJpbGl0eTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+CiA8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwdHVyZXBhcm0nPnY0bDJfY2FwdHVyZXBhcm08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgpAQCAtNDYsNiArNDcsOSBAQAogPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1jaGlwLWlkZW50Jz52NGwyX2RiZ19jaGlwX2lkZW50PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KIDxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kYmctbWF0Y2gnPnY0bDJfZGJnX21hdGNoPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KIDxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kYmctcmVnaXN0ZXInPnY0bDJfZGJnX3JlZ2lzdGVyPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KKzxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kdi1lbnVtLXByZXNldCc+djRsMl9kdl9lbnVtX3ByZXNldDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZHYtcHJlc2V0Jz52NGwyX2R2X3ByZXNldDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Cis8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZHYtdGltaW5ncyc+djRsMl9kdl90aW1pbmdzPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KIDxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4Jz52NGwyX2VuY19pZHg8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgogPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWVuYy1pZHgtZW50cnknPnY0bDJfZW5jX2lkeF9lbnRyeTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+CiA8aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jb2Rlci1jbWQnPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWJhNGI3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDYyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0JImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbCi08IUVOVElUWSBwcm9jZnNleGFtcGxlIFNZU1RFTSAicHJvY2ZzX2V4YW1wbGUueG1sIj4KLV0+Ci0KLTxib29rIGlkPSJMS1Byb2Nmc0d1aWRlIj4KLSAgPGJvb2tpbmZvPgotICAgIDx0aXRsZT5MaW51eCBLZXJuZWwgUHJvY2ZzIEd1aWRlPC90aXRsZT4KLQotICAgIDxhdXRob3Jncm91cD4KLSAgICAgIDxhdXRob3I+Ci0JPGZpcnN0bmFtZT5FcmlrPC9maXJzdG5hbWU+Ci0JPG90aGVybmFtZT4oSi5BLksuKTwvb3RoZXJuYW1lPgotCTxzdXJuYW1lPk1vdXc8L3N1cm5hbWU+Ci0JPGFmZmlsaWF0aW9uPgotCSAgPGFkZHJlc3M+Ci0gICAgICAgICAgICA8ZW1haWw+bW91d0BubC5saW51eC5vcmc8L2VtYWlsPgotICAgICAgICAgIDwvYWRkcmVzcz4KLQk8L2FmZmlsaWF0aW9uPgotICAgICAgPC9hdXRob3I+Ci0gICAgICA8b3RoZXJjcmVkaXQ+Ci0JPGNvbnRyaWI+Ci0JVGhpcyBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiB3ZXJlIHdyaXR0ZW4gd2hpbGUgd29ya2luZyBvbiB0aGUKLQlMQVJUIGNvbXB1dGluZyBib2FyZAotCSg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxhcnRtYWtlci5ubC8iPmh0dHA6Ly93d3cubGFydG1ha2VyLm5sLzwvdWxpbms+KSwKLQl3aGljaCB3YXMgc3BvbnNvcmVkIGJ5IHRoZSBEZWx0IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSBwcm9qZWN0cwotCU1vYmlsZSBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucyBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucy4KLQk8L2NvbnRyaWI+Ci0gICAgICA8L290aGVyY3JlZGl0PgotICAgIDwvYXV0aG9yZ3JvdXA+Ci0KLSAgICA8cmV2aGlzdG9yeT4KLSAgICAgIDxyZXZpc2lvbj4KLQk8cmV2bnVtYmVyPjEuMDwvcmV2bnVtYmVyPgotCTxkYXRlPk1heSAzMCwgMjAwMTwvZGF0ZT4KLQk8cmV2cmVtYXJrPkluaXRpYWwgcmV2aXNpb24gcG9zdGVkIHRvIGxpbnV4LWtlcm5lbDwvcmV2cmVtYXJrPgotICAgICAgPC9yZXZpc2lvbj4KLSAgICAgIDxyZXZpc2lvbj4KLQk8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgotCTxkYXRlPkp1bmUgMywgMjAwMTwvZGF0ZT4KLQk8cmV2cmVtYXJrPlJldmlzZWQgYWZ0ZXIgY29tbWVudHMgZnJvbSBsaW51eC1rZXJuZWw8L3JldnJlbWFyaz4KLSAgICAgIDwvcmV2aXNpb24+Ci0gICAgPC9yZXZoaXN0b3J5PgotCi0gICAgPGNvcHlyaWdodD4KLSAgICAgIDx5ZWFyPjIwMDE8L3llYXI+Ci0gICAgICA8aG9sZGVyPkVyaWsgTW91dzwvaG9sZGVyPgotICAgIDwvY29weXJpZ2h0PgotCi0KLSAgICA8bGVnYWxub3RpY2U+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0Ci0gICAgICAgIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKLSAgICAgICAgdmVyc2lvbi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIAotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAgICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICAgICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gICAgICAgIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICAgICA8L3BhcmE+Ci0gICAgICAKLSAgICAgIDxwYXJhPgotICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICAgICAgICBNQSAwMjExMS0xMzA3IFVTQQotICAgICAgPC9wYXJhPgotICAgICAgCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCi0gICAgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2xlZ2Fsbm90aWNlPgotICA8L2Jvb2tpbmZvPgotCi0KLQotCi0gIDx0b2M+Ci0gIDwvdG9jPgotCi0KLQotCi0gIDxwcmVmYWNlIGlkPSJQcmVmYWNlIj4KLSAgICA8dGl0bGU+UHJlZmFjZTwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgZ3VpZGUgZGVzY3JpYmVzIHRoZSB1c2Ugb2YgdGhlIHByb2NmcyBmaWxlIHN5c3RlbSBmcm9tCi0gICAgICB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlIGlkZWEgdG8gd3JpdGUgdGhpcyBndWlkZSBjYW1lIHVwIG9uCi0gICAgICB0aGUgI2tlcm5lbG5ld2JpZXMgSVJDIGNoYW5uZWwgKHNlZSA8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL3d3dy5rZXJuZWxuZXdiaWVzLm9yZy8iPmh0dHA6Ly93d3cua2VybmVsbmV3Ymllcy5vcmcvPC91bGluaz4pLAotICAgICAgd2hlbiBKZWZmIEdhcnppayBleHBsYWluZWQgdGhlIHVzZSBvZiBwcm9jZnMgYW5kIGZvcndhcmRlZCBtZSBhCi0gICAgICBtZXNzYWdlIEFsZXhhbmRlciBWaXJvIHdyb3RlIHRvIHRoZSBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LiBJCi0gICAgICBhZ3JlZWQgdG8gd3JpdGUgaXQgdXAgbmljZWx5LCBzbyBoZXJlIGl0IGlzLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgSSdkIGxpa2UgdG8gdGhhbmsgSmVmZiBHYXJ6aWsKLSAgICAgIDxlbWFpbD5qZ2FyemlrQHBvYm94LmNvbTwvZW1haWw+IGFuZCBBbGV4YW5kZXIgVmlybwotICAgICAgPGVtYWlsPnZpcm9AcGFyY2VsZmFyY2UubGludXgudGhlcGxhbmV0LmNvLnVrPC9lbWFpbD4gZm9yIHRoZWlyIGlucHV0LAotICAgICAgVGltIFdhdWdoIDxlbWFpbD50d2F1Z2hAcmVkaGF0LmNvbTwvZW1haWw+IGZvciBoaXMgPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS90d2F1Z2gvZG9jYm9vay9zZWxmZG9jYm9vay8iPlNlbGZkb2Nib29rPC91bGluaz4sCi0gICAgICBhbmQgTWFyYyBKb29zZW4gPGVtYWlsPm1hcmNqQGhpc3RvcmlhLmV0LnR1ZGVsZnQubmw8L2VtYWlsPiBmb3IKLSAgICAgIHByb29mcmVhZGluZy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEVyaWsKLSAgICA8L3BhcmE+Ci0gIDwvcHJlZmFjZT4KLQotCi0KLQotICA8Y2hhcHRlciBpZD0iaW50cm8iPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICBUaGUgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPi9wcm9jPC9maWxlbmFtZT4gZmlsZSBzeXN0ZW0KLSAgICAgIChwcm9jZnMpIGlzIGEgc3BlY2lhbCBmaWxlIHN5c3RlbSBpbiB0aGUgbGludXgga2VybmVsLiBJdCdzIGEKLSAgICAgIHZpcnR1YWwgZmlsZSBzeXN0ZW06IGl0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBibG9jayBkZXZpY2UKLSAgICAgIGJ1dCBleGlzdHMgb25seSBpbiBtZW1vcnkuIFRoZSBmaWxlcyBpbiB0aGUgcHJvY2ZzIGFyZSB0aGVyZSB0bwotICAgICAgYWxsb3cgdXNlcmxhbmQgcHJvZ3JhbXMgYWNjZXNzIHRvIGNlcnRhaW4gaW5mb3JtYXRpb24gZnJvbSB0aGUKLSAgICAgIGtlcm5lbCAobGlrZSBwcm9jZXNzIGluZm9ybWF0aW9uIGluIDxmaWxlbmFtZQotICAgICAgY2xhc3M9ImRpcmVjdG9yeSI+L3Byb2MvWzAtOV0rLzwvZmlsZW5hbWU+KSwgYnV0IGFsc28gZm9yIGRlYnVnCi0gICAgICBwdXJwb3NlcyAobGlrZSA8ZmlsZW5hbWU+L3Byb2Mva3N5bXM8L2ZpbGVuYW1lPikuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBUaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgdXNlIG9mIHRoZSBwcm9jZnMgZmlsZSBzeXN0ZW0gZnJvbQotICAgICAgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEl0IHN0YXJ0cyBieSBpbnRyb2R1Y2luZyBhbGwgcmVsZXZhbnQKLSAgICAgIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZpbGVzIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0uIEFmdGVyIHRoYXQKLSAgICAgIGl0IHNob3dzIGhvdyB0byBjb21tdW5pY2F0ZSB3aXRoIHVzZXJsYW5kLCBhbmQgc29tZSB0aXBzIGFuZAotICAgICAgdHJpY2tzIHdpbGwgYmUgcG9pbnRlZCBvdXQuIEZpbmFsbHkgYSBjb21wbGV0ZSBleGFtcGxlIHdpbGwgYmUKLSAgICAgIHNob3duLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgTm90ZSB0aGF0IHRoZSBmaWxlcyBpbiA8ZmlsZW5hbWUKLSAgICAgIGNsYXNzPSJkaXJlY3RvcnkiPi9wcm9jL3N5czwvZmlsZW5hbWU+IGFyZSBzeXNjdGwgZmlsZXM6IHRoZXkKLSAgICAgIGRvbid0IGJlbG9uZyB0byBwcm9jZnMgYW5kIGFyZSBnb3Zlcm5lZCBieSBhIGNvbXBsZXRlbHkKLSAgICAgIGRpZmZlcmVudCBBUEkgZGVzY3JpYmVkIGluIHRoZSBLZXJuZWwgQVBJIGJvb2suCi0gICAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0KLQotCi0KLSAgPGNoYXB0ZXIgaWQ9Im1hbmFnaW5nIj4KLSAgICA8dGl0bGU+TWFuYWdpbmcgcHJvY2ZzIGVudHJpZXM8L3RpdGxlPgotICAgIAotICAgIDxwYXJhPgotICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgZnVuY3Rpb25zIHRoYXQgdmFyaW91cyBrZXJuZWwKLSAgICAgIGNvbXBvbmVudHMgdXNlIHRvIHBvcHVsYXRlIHRoZSBwcm9jZnMgd2l0aCBmaWxlcywgc3ltbGlua3MsCi0gICAgICBkZXZpY2Ugbm9kZXMsIGFuZCBkaXJlY3Rvcmllcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEEgbWlub3Igbm90ZSBiZWZvcmUgd2Ugc3RhcnQ6IGlmIHlvdSB3YW50IHRvIHVzZSBhbnkgb2YgdGhlCi0gICAgICBwcm9jZnMgZnVuY3Rpb25zLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGNvcnJlY3QgaGVhZGVyIGZpbGUhIAotICAgICAgVGhpcyBzaG91bGQgYmUgb25lIG9mIHRoZSBmaXJzdCBsaW5lcyBpbiB5b3VyIGNvZGU6Ci0gICAgPC9wYXJhPgotCi0gICAgPHByb2dyYW1saXN0aW5nPgotI2luY2x1ZGUgJmx0O2xpbnV4L3Byb2NfZnMuaCZndDsKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotCi0KLQotCi0gICAgPHNlY3QxIGlkPSJyZWd1bGFyZmlsZSI+Ci0gICAgICA8dGl0bGU+Q3JlYXRpbmcgYSByZWd1bGFyIGZpbGU8L3RpdGxlPgotICAgICAgCi0gICAgICA8ZnVuY3N5bm9wc2lzPgotCTxmdW5jcHJvdG90eXBlPgotCSAgPGZ1bmNkZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLQkgIDxwYXJhbWRlZj5jb25zdCBjaGFyKiA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCSAgPHBhcmFtZGVmPm1vZGVfdCA8cGFyYW1ldGVyPm1vZGU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCSAgPHBhcmFtZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTwvZnVuY3Byb3RvdHlwZT4KLSAgICAgIDwvZnVuY3N5bm9wc2lzPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgcmVndWxhciBmaWxlIHdpdGggdGhlIG5hbWUKLSAgICAgICAgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+LCBmaWxlIG1vZGUKLSAgICAgICAgPHBhcmFtZXRlcj5tb2RlPC9wYXJhbWV0ZXI+IGluIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj4uIFRvIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIHJvb3Qgb2YKLSAgICAgICAgdGhlIHByb2NmcywgdXNlIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gYXMKLSAgICAgICAgPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj4gcGFyYW1ldGVyLiBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQotICAgICAgICBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZyZXNobHkgY3JlYXRlZAotICAgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+OyBvdGhlcndpc2UgaXQKLSAgICAgICAgd2lsbCByZXR1cm4gPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi4gPHhyZWYKLSAgICAgICAgbGlua2VuZD0idXNlcmxhbmQiLz4gZGVzY3JpYmVzIGhvdyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGgKLSAgICAgICAgcmVndWxhciBmaWxlcy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE5vdGUgdGhhdCBpdCBpcyBzcGVjaWZpY2FsbHkgc3VwcG9ydGVkIHRoYXQgeW91IGNhbiBwYXNzIGEKLSAgICAgICAgcGF0aCB0aGF0IHNwYW5zIG11bHRpcGxlIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZQotICAgICAgICA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPig8cGFyYW1ldGVyPiJkcml2ZXJzL3ZpYTAvaW5mbyI8L3BhcmFtZXRlcj4pCi0gICAgICAgIHdpbGwgY3JlYXRlIHRoZSA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+dmlhMDwvZmlsZW5hbWU+Ci0gICAgICAgIGRpcmVjdG9yeSBpZiBuZWNlc3NhcnksIHdpdGggc3RhbmRhcmQKLSAgICAgICAgPGNvbnN0YW50PjA3NTU8L2NvbnN0YW50PiBwZXJtaXNzaW9ucy4KLSAgICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgSWYgeW91IG9ubHkgd2FudCB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIGZpbGUsIHRoZSBmdW5jdGlvbgotICAgICAgPGZ1bmN0aW9uPmNyZWF0ZV9wcm9jX3JlYWRfZW50cnk8L2Z1bmN0aW9uPiBkZXNjcmliZWQgaW4gPHhyZWYKLSAgICAgIGxpbmtlbmQ9ImNvbnZlbmllbmNlIi8+IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgaW5pdGlhbGlzZQotICAgICAgdGhlIHByb2NmcyBlbnRyeSBpbiBvbmUgc2luZ2xlIGNhbGwuCi0gICAgPC9wYXJhPgotICAgIDwvc2VjdDE+Ci0KLQotCi0KLSAgICA8c2VjdDEgaWQ9IkNyZWF0aW5nX2Ffc3ltbGluayI+Ci0gICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBzeW1saW5rPC90aXRsZT4KLQotICAgICAgPGZ1bmNzeW5vcHNpcz4KLQk8ZnVuY3Byb3RvdHlwZT4KLQkgIDxmdW5jZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSoKLQkgIDxmdW5jdGlvbj5wcm9jX3N5bWxpbms8L2Z1bmN0aW9uPjwvZnVuY2RlZj4gPHBhcmFtZGVmPmNvbnN0Ci0JICBjaGFyKiA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCSAgPHBhcmFtZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSoKLQkgIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4gPHBhcmFtZGVmPmNvbnN0Ci0JICBjaGFyKiA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTwvZnVuY3Byb3RvdHlwZT4KLSAgICAgIDwvZnVuY3N5bm9wc2lzPgotICAgICAgCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBjcmVhdGVzIGEgc3ltbGluayBpbiB0aGUgcHJvY2ZzIGRpcmVjdG9yeQotICAgICAgICA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPiB0aGF0IHBvaW50cyBmcm9tCi0gICAgICAgIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiB0bwotICAgICAgICA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj4uIFRoaXMgdHJhbnNsYXRlcyBpbiB1c2VybGFuZCB0bwotICAgICAgICA8bGl0ZXJhbD5sbiAtczwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5kZXN0PC9wYXJhbWV0ZXI+Ci0gICAgICAgIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QxPgotCi0gICAgPHNlY3QxIGlkPSJDcmVhdGluZ19hX2RpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgCi0gICAgICA8ZnVuY3N5bm9wc2lzPgotCTxmdW5jcHJvdG90eXBlPgotCSAgPGZ1bmNkZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8ZnVuY3Rpb24+cHJvY19ta2RpcjwvZnVuY3Rpb24+PC9mdW5jZGVmPgotCSAgPHBhcmFtZGVmPmNvbnN0IGNoYXIqIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JPC9mdW5jcHJvdG90eXBlPgotICAgICAgPC9mdW5jc3lub3BzaXM+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBDcmVhdGUgYSBkaXJlY3RvcnkgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IGluIHRoZSBwcm9jZnMKLSAgICAgICAgZGlyZWN0b3J5IDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDE+Ci0KLQotCi0KLSAgICA8c2VjdDEgaWQ9IlJlbW92aW5nX2FuX2VudHJ5Ij4KLSAgICAgIDx0aXRsZT5SZW1vdmluZyBhbiBlbnRyeTwvdGl0bGU+Ci0gICAgICAKLSAgICAgIDxmdW5jc3lub3BzaXM+Ci0JPGZ1bmNwcm90b3R5cGU+Ci0JICA8ZnVuY2RlZj52b2lkIDxmdW5jdGlvbj5yZW1vdmVfcHJvY19lbnRyeTwvZnVuY3Rpb24+PC9mdW5jZGVmPgotCSAgPHBhcmFtZGVmPmNvbnN0IGNoYXIqIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JPC9mdW5jcHJvdG90eXBlPgotICAgICAgPC9mdW5jc3lub3BzaXM+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBSZW1vdmVzIHRoZSBlbnRyeSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gaW4gdGhlIGRpcmVjdG9yeQotICAgICAgICA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPiBmcm9tIHRoZSBwcm9jZnMuIEVudHJpZXMgYXJlCi0gICAgICAgIHJlbW92ZWQgYnkgdGhlaXIgPGVtcGhhc2lzPm5hbWU8L2VtcGhhc2lzPiwgbm90IGJ5IHRoZQotICAgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+IHJldHVybmVkIGJ5IHRoZQotICAgICAgICB2YXJpb3VzIGNyZWF0ZSBmdW5jdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QKLSAgICAgICAgcmVjdXJzaXZlbHkgcmVtb3ZlIGVudHJpZXMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBCZSBzdXJlIHRvIGZyZWUgdGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZW50cnkgZnJvbQotICAgICAgICB0aGUgPHN0cnVjdG5hbWU+c3RydWN0IHByb2NfZGlyX2VudHJ5PC9zdHJ1Y3RuYW1lPiBiZWZvcmUKLSAgICAgICAgPGZ1bmN0aW9uPnJlbW92ZV9wcm9jX2VudHJ5PC9mdW5jdGlvbj4gaXMgY2FsbGVkICh0aGF0IGlzOiBpZgotICAgICAgICB0aGVyZSB3YXMgc29tZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGFsbG9jYXRlZCwgb2YKLSAgICAgICAgY291cnNlKS4gU2VlIDx4cmVmIGxpbmtlbmQ9InVzaW5nZGF0YSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICAgICAgICBvbiB1c2luZyB0aGUgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBlbnRyeS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0KLQotCi0KLSAgPGNoYXB0ZXIgaWQ9InVzZXJsYW5kIj4KLSAgICA8dGl0bGU+Q29tbXVuaWNhdGluZyB3aXRoIHVzZXJsYW5kPC90aXRsZT4KLSAgICAKLSAgICA8cGFyYT4KLSAgICAgICBJbnN0ZWFkIG9mIHJlYWRpbmcgKG9yIHdyaXRpbmcpIGluZm9ybWF0aW9uIGRpcmVjdGx5IGZyb20KLSAgICAgICBrZXJuZWwgbWVtb3J5LCBwcm9jZnMgd29ya3Mgd2l0aCA8ZW1waGFzaXM+Y2FsbCBiYWNrCi0gICAgICAgZnVuY3Rpb25zPC9lbXBoYXNpcz4gZm9yIGZpbGVzOiBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHdoZW4KLSAgICAgICBhIHNwZWNpZmljIGZpbGUgaXMgYmVpbmcgcmVhZCBvciB3cml0dGVuLiBTdWNoIGZ1bmN0aW9ucyBoYXZlCi0gICAgICAgdG8gYmUgaW5pdGlhbGlzZWQgYWZ0ZXIgdGhlIHByb2NmcyBmaWxlIGlzIGNyZWF0ZWQgYnkgc2V0dGluZwotICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cmVhZF9wcm9jPC9zdHJ1Y3RmaWVsZD4gYW5kL29yCi0gICAgICAgPHN0cnVjdGZpZWxkPndyaXRlX3Byb2M8L3N0cnVjdGZpZWxkPiBmaWVsZHMgaW4gdGhlCi0gICAgICAgPHN0cnVjdG5hbWU+c3RydWN0IHByb2NfZGlyX2VudHJ5Kjwvc3RydWN0bmFtZT4gdGhhdCB0aGUKLSAgICAgICBmdW5jdGlvbiA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPiByZXR1cm5lZDoKLSAgICA8L3BhcmE+Ci0KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIGVudHJ5OwotCi1lbnRyeS0+cmVhZF9wcm9jID0gcmVhZF9wcm9jX2ZvbzsKLWVudHJ5LT53cml0ZV9wcm9jID0gd3JpdGVfcHJvY19mb287Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLQotICAgIDxwYXJhPgotICAgICAgSWYgeW91IG9ubHkgd2FudCB0byB1c2UgYSB0aGUKLSAgICAgIDxzdHJ1Y3RmaWVsZD5yZWFkX3Byb2M8L3N0cnVjdGZpZWxkPiwgdGhlIGZ1bmN0aW9uCi0gICAgICA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfcmVhZF9lbnRyeTwvZnVuY3Rpb24+IGRlc2NyaWJlZCBpbiA8eHJlZgotICAgICAgbGlua2VuZD0iY29udmVuaWVuY2UiLz4gbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGFuZCBpbml0aWFsaXNlIHRoZQotICAgICAgcHJvY2ZzIGVudHJ5IGluIG9uZSBzaW5nbGUgY2FsbC4KLSAgICA8L3BhcmE+Ci0KLQotCi0gICAgPHNlY3QxIGlkPSJSZWFkaW5nX2RhdGEiPgotICAgICAgPHRpdGxlPlJlYWRpbmcgZGF0YTwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgcmVhZCBmdW5jdGlvbiBpcyBhIGNhbGwgYmFjayBmdW5jdGlvbiB0aGF0IGFsbG93cyB1c2VybGFuZAotICAgICAgICBwcm9jZXNzZXMgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGtlcm5lbC4gVGhlIHJlYWQgZnVuY3Rpb24KLSAgICAgICAgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxmdW5jc3lub3BzaXM+Ci0JPGZ1bmNwcm90b3R5cGU+Ci0JICA8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPnJlYWRfZnVuYzwvZnVuY3Rpb24+PC9mdW5jZGVmPgotCSAgPHBhcmFtZGVmPmNoYXIqIDxwYXJhbWV0ZXI+YnVmZmVyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQkgIDxwYXJhbWRlZj5jaGFyKiogPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+b2ZmX3QgPHBhcmFtZXRlcj5vZmY8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCSAgPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQkgIDxwYXJhbWRlZj5pbnQqIDxwYXJhbWV0ZXI+cGVvZjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+dm9pZCogPHBhcmFtZXRlcj5kYXRhPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQk8L2Z1bmNwcm90b3R5cGU+Ci0gICAgICA8L2Z1bmNzeW5vcHNpcz4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSByZWFkIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBpdHMgaW5mb3JtYXRpb24gaW50byB0aGUKLSAgICAgICAgPHBhcmFtZXRlcj5idWZmZXI8L3BhcmFtZXRlcj4sIHdoaWNoIHdpbGwgYmUgZXhhY3RseQotICAgICAgICA8bGl0ZXJhbD5QQUdFX1NJWkU8L2xpdGVyYWw+IGJ5dGVzIGxvbmcuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgcGFyYW1ldGVyCi0gICAgICAgIDxwYXJhbWV0ZXI+cGVvZjwvcGFyYW1ldGVyPiBzaG91bGQgYmUgdXNlZCB0byBzaWduYWwgdGhhdCB0aGUKLSAgICAgICAgZW5kIG9mIHRoZSBmaWxlIGhhcyBiZWVuIHJlYWNoZWQgYnkgd3JpdGluZwotICAgICAgICA8bGl0ZXJhbD4xPC9saXRlcmFsPiB0byB0aGUgbWVtb3J5IGxvY2F0aW9uCi0gICAgICAgIDxwYXJhbWV0ZXI+cGVvZjwvcGFyYW1ldGVyPiBwb2ludHMgdG8uCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHBhcmFtZXRlcj5kYXRhPC9wYXJhbWV0ZXI+Ci0gICAgICAgIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBzaW5nbGUgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvcgotICAgICAgICBzZXZlcmFsIGZpbGVzLCBzZWUgPHhyZWYgbGlua2VuZD0idXNpbmdkYXRhIi8+LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZSByZXR1cm4gdmFsdWUgYXJlIGRlc2NyaWJlZAotCWJ5IGEgY29tbWVudCBpbiA8ZmlsZW5hbWU+ZnMvcHJvYy9nZW5lcmljLmM8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgotICAgICAgPC9wYXJhPgotCi0gICAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgPHBhcmE+Ci0JWW91IGhhdmUgdGhyZWUgd2F5cyB0byByZXR1cm4gZGF0YToKLSAgICAgICAJPC9wYXJhPgotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+Ci0JICAgICAgTGVhdmUgPGxpdGVyYWw+KnN0YXJ0ID0gTlVMTDwvbGl0ZXJhbD4uICAoVGhpcyBpcyB0aGUgZGVmYXVsdC4pCi0JICAgICAgUHV0IHRoZSBkYXRhIG9mIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IGF0IHRoYXQKLQkgICAgICBvZmZzZXQgd2l0aGluIHRoZSBidWZmZXIuICBSZXR1cm4gdGhlIG51bWJlciAoPGxpdGVyYWw+bjwvbGl0ZXJhbD4pCi0JICAgICAgb2YgYnl0ZXMgdGhlcmUgYXJlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKLQkgICAgICBidWZmZXIgdXAgdG8gdGhlIGxhc3QgYnl0ZSBvZiBkYXRhLiAgSWYgdGhlCi0JICAgICAgbnVtYmVyIG9mIHN1cHBsaWVkIGJ5dGVzICg8bGl0ZXJhbD49IG4gLSBvZmZzZXQ8L2xpdGVyYWw+KSBpcwotCSAgICAgIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB5b3UgZGlkbid0IHNpZ25hbCBlb2YKLQkgICAgICBhbmQgdGhlIHJlYWRlciBpcyBwcmVwYXJlZCB0byB0YWtlIG1vcmUgZGF0YQotCSAgICAgIHlvdSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIHRoZSByZXF1ZXN0ZWQKLQkgICAgICBvZmZzZXQgYWR2YW5jZWQgYnkgdGhlIG51bWJlciBvZiBieXRlcwotCSAgICAgIGFic29yYmVkLiAgVGhpcyBpbnRlcmZhY2UgaXMgdXNlZnVsIGZvciBmaWxlcwotCSAgICAgIG5vIGxhcmdlciB0aGFuIHRoZSBidWZmZXIuCi0JICAgIDwvcGFyYT4KLQkgIDwvbGlzdGl0ZW0+Ci0JICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT4KLQkgICAgICBTZXQgPGxpdGVyYWw+KnN0YXJ0PC9saXRlcmFsPiB0byBhbiB1bnNpZ25lZCBsb25nIHZhbHVlIGxlc3MgdGhhbgotCSAgICAgIHRoZSBidWZmZXIgYWRkcmVzcyBidXQgZ3JlYXRlciB0aGFuIHplcm8uCi0JICAgICAgUHV0IHRoZSBkYXRhIG9mIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IGF0IHRoZQotCSAgICAgIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YKLQkgICAgICBieXRlcyBvZiBkYXRhIHBsYWNlZCB0aGVyZS4gIElmIHRoaXMgbnVtYmVyIGlzCi0JICAgICAgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHlvdSBkaWRuJ3Qgc2lnbmFsIGVvZgotCSAgICAgIGFuZCB0aGUgcmVhZGVyIGlzIHByZXBhcmVkIHRvIHRha2UgbW9yZSBkYXRhCi0JICAgICAgeW91IHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGggdGhlIHJlcXVlc3RlZAotCSAgICAgIG9mZnNldCBhZHZhbmNlZCBieSA8bGl0ZXJhbD4qc3RhcnQ8L2xpdGVyYWw+LiAgVGhpcyBpbnRlcmZhY2UgaXMKLQkgICAgICB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBhIGxhcmdlIGZpbGUgY29uc2lzdGluZwotCSAgICAgIG9mIGEgc2VyaWVzIG9mIGJsb2NrcyB3aGljaCB5b3Ugd2FudCB0byBjb3VudAotCSAgICAgIGFuZCByZXR1cm4gYXMgd2hvbGVzLgotCSAgICAgIChIYWNrIGJ5IFBhdWwuUnVzc2VsbEBydXN0Y29ycC5jb20uYXUpCi0JICAgIDwvcGFyYT4KLQkgIDwvbGlzdGl0ZW0+Ci0JICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT4KLQkgICAgICBTZXQgPGxpdGVyYWw+KnN0YXJ0PC9saXRlcmFsPiB0byBhbiBhZGRyZXNzIHdpdGhpbiB0aGUgYnVmZmVyLgotCSAgICAgIFB1dCB0aGUgZGF0YSBvZiB0aGUgcmVxdWVzdGVkIG9mZnNldCBhdCA8bGl0ZXJhbD4qc3RhcnQ8L2xpdGVyYWw+LgotCSAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgcGxhY2VkIHRoZXJlLgotCSAgICAgIElmIHRoaXMgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCB5b3UKLQkgICAgICBkaWRuJ3Qgc2lnbmFsIGVvZiBhbmQgdGhlIHJlYWRlciBpcyBwcmVwYXJlZCB0bwotCSAgICAgIHRha2UgbW9yZSBkYXRhIHlvdSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIHRoZQotCSAgICAgIHJlcXVlc3RlZCBvZmZzZXQgYWR2YW5jZWQgYnkgdGhlIG51bWJlciBvZiBieXRlcwotCSAgICAgIGFic29yYmVkLgotCSAgICA8L3BhcmE+Ci0JICA8L2xpc3RpdGVtPgotCTwvb3JkZXJlZGxpc3Q+Ci0gICAgICA8L2Jsb2NrcXVvdGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICA8eHJlZiBsaW5rZW5kPSJleGFtcGxlIi8+IHNob3dzIGhvdyB0byB1c2UgYSByZWFkIGNhbGwgYmFjawotICAgICAgICBmdW5jdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QxPgotCi0KLQotCi0gICAgPHNlY3QxIGlkPSJXcml0aW5nX2RhdGEiPgotICAgICAgPHRpdGxlPldyaXRpbmcgZGF0YTwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgd3JpdGUgY2FsbCBiYWNrIGZ1bmN0aW9uIGFsbG93cyBhIHVzZXJsYW5kIHByb2Nlc3MgdG8gd3JpdGUKLSAgICAgICAgZGF0YSB0byB0aGUga2VybmVsLCBzbyBpdCBoYXMgc29tZSBraW5kIG9mIGNvbnRyb2wgb3ZlciB0aGUKLSAgICAgICAga2VybmVsLiBUaGUgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxmdW5jc3lub3BzaXM+Ci0JPGZ1bmNwcm90b3R5cGU+Ci0JICA8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPndyaXRlX2Z1bmM8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLQkgIDxwYXJhbWRlZj5zdHJ1Y3QgZmlsZSogPHBhcmFtZXRlcj5maWxlPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQkgIDxwYXJhbWRlZj5jb25zdCBjaGFyKiA8cGFyYW1ldGVyPmJ1ZmZlcjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+dW5zaWduZWQgbG9uZyA8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQkgIDxwYXJhbWRlZj52b2lkKiA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTwvZnVuY3Byb3RvdHlwZT4KLSAgICAgIDwvZnVuY3N5bm9wc2lzPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHdyaXRlIGZ1bmN0aW9uIHNob3VsZCByZWFkIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4KLSAgICAgICAgYnl0ZXMgYXQgbWF4aW11bSBmcm9tIHRoZSA8cGFyYW1ldGVyPmJ1ZmZlcjwvcGFyYW1ldGVyPi4gTm90ZQotICAgICAgICB0aGF0IHRoZSA8cGFyYW1ldGVyPmJ1ZmZlcjwvcGFyYW1ldGVyPiBkb2Vzbid0IGxpdmUgaW4gdGhlCi0gICAgICAgIGtlcm5lbCdzIG1lbW9yeSBzcGFjZSwgc28gaXQgc2hvdWxkIGZpcnN0IGJlIGNvcGllZCB0byBrZXJuZWwKLSAgICAgICAgc3BhY2Ugd2l0aCA8ZnVuY3Rpb24+Y29weV9mcm9tX3VzZXI8L2Z1bmN0aW9uPi4gVGhlCi0gICAgICAgIDxwYXJhbWV0ZXI+ZmlsZTwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgaXMgdXN1YWxseQotICAgICAgICBpZ25vcmVkLiA8eHJlZiBsaW5rZW5kPSJ1c2luZ2RhdGEiLz4gc2hvd3MgaG93IHRvIHVzZSB0aGUKLSAgICAgICAgPHBhcmFtZXRlcj5kYXRhPC9wYXJhbWV0ZXI+IHBhcmFtZXRlci4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFnYWluLCA8eHJlZiBsaW5rZW5kPSJleGFtcGxlIi8+IHNob3dzIGhvdyB0byB1c2UgdGhpcyBjYWxsIGJhY2sKLSAgICAgICAgZnVuY3Rpb24uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0MT4KLQotCi0KLQotICAgIDxzZWN0MSBpZD0idXNpbmdkYXRhIj4KLSAgICAgIDx0aXRsZT5BIHNpbmdsZSBjYWxsIGJhY2sgZm9yIG1hbnkgZmlsZXM8L3RpdGxlPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgIFdoZW4gYSBsYXJnZSBudW1iZXIgb2YgYWxtb3N0IGlkZW50aWNhbCBmaWxlcyBpcyB1c2VkLCBpdCdzCi0gICAgICAgICBxdWl0ZSBpbmNvbnZlbmllbnQgdG8gdXNlIGEgc2VwYXJhdGUgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvcgotICAgICAgICAgZWFjaCBmaWxlLiBBIGJldHRlciBhcHByb2FjaCBpcyB0byBoYXZlIGEgc2luZ2xlIGNhbGwgYmFjawotICAgICAgICAgZnVuY3Rpb24gdGhhdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gdGhlIGZpbGVzIGJ5IHVzaW5nIHRoZQotICAgICAgICAgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiA8c3RydWN0bmFtZT5zdHJ1Y3QKLSAgICAgICAgIHByb2NfZGlyX2VudHJ5PC9zdHJ1Y3RuYW1lPi4gRmlyc3Qgb2YgYWxsLCB0aGUKLSAgICAgICAgIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaGFzIHRvIGJlIGluaXRpYWxpc2VkOgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIGVudHJ5Owotc3RydWN0IG15X2ZpbGVfZGF0YSAqZmlsZV9kYXRhOwotCi1maWxlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXlfZmlsZV9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci1lbnRyeS0+ZGF0YSA9IGZpbGVfZGF0YTsKLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgIAotICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgYSA8dHlwZT52b2lkCi0gICAgICAgICAgKjwvdHlwZT4sIHNvIGl0IGNhbiBiZSBpbml0aWFsaXNlZCB3aXRoIGFueXRoaW5nLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgTm93IHRoYXQgdGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgc2V0LCB0aGUKLSAgICAgICAgPGZ1bmN0aW9uPnJlYWRfcHJvYzwvZnVuY3Rpb24+IGFuZAotICAgICAgICA8ZnVuY3Rpb24+d3JpdGVfcHJvYzwvZnVuY3Rpb24+IGNhbiB1c2UgaXQgdG8gZGlzdGluZ3Vpc2gKLSAgICAgICAgYmV0d2VlbiBmaWxlcyBiZWNhdXNlIHRoZXkgZ2V0IGl0IHBhc3NlZCBpbnRvIHRoZWlyCi0gICAgICAgIDxwYXJhbWV0ZXI+ZGF0YTwvcGFyYW1ldGVyPiBwYXJhbWV0ZXI6Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLWludCBmb29fcmVhZF9mdW5jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLSAgICAgICAgaW50IGxlbjsKLQotICAgICAgICBpZihkYXRhID09IGZpbGVfZGF0YSkgewotICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgdGhpcyBmaWxlICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogbm9ybWFsIHByb2Nlc3NpbmcgKi8KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBsZW47Ci19Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgQmUgc3VyZSB0byBmcmVlIHRoZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGRhdGEgZmllbGQKLSAgICAgICAgd2hlbiByZW1vdmluZyB0aGUgcHJvY2ZzIGVudHJ5LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLQotCi0KLQotICA8Y2hhcHRlciBpZD0idGlwcyI+Ci0gICAgPHRpdGxlPlRpcHMgYW5kIHRyaWNrczwvdGl0bGU+Ci0KLQotCi0KLSAgICA8c2VjdDEgaWQ9ImNvbnZlbmllbmNlIj4KLSAgICAgIDx0aXRsZT5Db252ZW5pZW5jZSBmdW5jdGlvbnM8L3RpdGxlPgotCi0gICAgICA8ZnVuY3N5bm9wc2lzPgotCTxmdW5jcHJvdG90eXBlPgotCSAgPGZ1bmNkZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfcmVhZF9lbnRyeTwvZnVuY3Rpb24+PC9mdW5jZGVmPgotCSAgPHBhcmFtZGVmPmNvbnN0IGNoYXIqIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+bW9kZV90IDxwYXJhbWV0ZXI+bW9kZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0JICA8cGFyYW1kZWY+cmVhZF9wcm9jX3QqIDxwYXJhbWV0ZXI+cmVhZF9wcm9jPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQkgIDxwYXJhbWRlZj52b2lkKiA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTwvZnVuY3Byb3RvdHlwZT4KLSAgICAgIDwvZnVuY3N5bm9wc2lzPgotICAgICAgCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgcmVndWxhciBmaWxlIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5Ci0gICAgICAgIGFzIDxmdW5jdGlvbj5jcmVhdGVfcHJvY19lbnRyeTwvZnVuY3Rpb24+IGZyb20gPHhyZWYKLSAgICAgICAgbGlua2VuZD0icmVndWxhcmZpbGUiLz4gZG9lcywgYnV0IGFsc28gYWxsb3dzIHRvIHNldCB0aGUgcmVhZAotICAgICAgICBmdW5jdGlvbiA8cGFyYW1ldGVyPnJlYWRfcHJvYzwvcGFyYW1ldGVyPiBpbiBvbmUgY2FsbC4gVGhpcwotICAgICAgICBmdW5jdGlvbiBjYW4gc2V0IHRoZSA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj4gYXMgd2VsbCwgbGlrZQotICAgICAgICBleHBsYWluZWQgaW4gPHhyZWYgbGlua2VuZD0idXNpbmdkYXRhIi8+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDE+Ci0KLQotCi0gICAgPHNlY3QxIGlkPSJNb2R1bGVzIj4KLSAgICAgIDx0aXRsZT5Nb2R1bGVzPC90aXRsZT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHByb2NmcyBpcyBiZWluZyB1c2VkIGZyb20gd2l0aGluIGEgbW9kdWxlLCBiZSBzdXJlIHRvIHNldAotICAgICAgICB0aGUgPHN0cnVjdGZpZWxkPm93bmVyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gdGhlCi0gICAgICAgIDxzdHJ1Y3RuYW1lPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeTwvc3RydWN0bmFtZT4gdG8KLSAgICAgICAgPGNvbnN0YW50PlRISVNfTU9EVUxFPC9jb25zdGFudD4uCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogZW50cnk7Ci0KLWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8L3NlY3QxPgotCi0KLQotCi0gICAgPHNlY3QxIGlkPSJNb2RlX2FuZF9vd25lcnNoaXAiPgotICAgICAgPHRpdGxlPk1vZGUgYW5kIG93bmVyc2hpcDwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIGNoYW5nZSB0aGUgbW9kZSBhbmQvb3Igb3duZXJzaGlwIG9mCi0gICAgICAgIGEgcHJvY2ZzIGVudHJ5LiBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gYWNoaWV2ZQotICAgICAgICB0aGF0OgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIGVudHJ5OwotCi1lbnRyeS0+bW9kZSA9ICBTX0lXVVNSIHxTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEg7Ci1lbnRyeS0+dWlkID0gMDsKLWVudHJ5LT5naWQgPSAxMDA7Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotCi0gICAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotCi0KLQotCi0gIDxjaGFwdGVyIGlkPSJleGFtcGxlIj4KLSAgICA8dGl0bGU+RXhhbXBsZTwvdGl0bGU+Ci0KLSAgICA8IS0tIGJlIGNhcmVmdWwgd2l0aCB0aGUgZXhhbXBsZSBjb2RlOiBpdCBzaG91bGRuJ3QgYmUgd2lkZXIgdGhhbgotICAgIGFwcHJveC4gNjAgY29sdW1ucywgb3Igb3RoZXJ3aXNlIGl0IHdvbid0IGZpdCBwcm9wZXJseSBvbiBhIHBhZ2UKLSAgICAtLT4KLQotJnByb2Nmc2V4YW1wbGU7Ci0KLSAgPC9jaGFwdGVyPgotPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViMTE3OS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKgotICogcHJvY2ZzX2V4YW1wbGUuYzogYW4gZXhhbXBsZSBwcm9jIGludGVyZmFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgRXJpayBNb3V3IChtb3V3QG5sLmxpbnV4Lm9yZykKLSAqCi0gKiBUaGlzIGZpbGUgYWNjb21wYW5pZXMgdGhlIHByb2Nmcy1ndWlkZSBpbiB0aGUgTGludXgga2VybmVsCi0gKiBzb3VyY2UuIEl0cyBtYWluIHVzZSBpcyB0byBkZW1vbnN0cmF0ZSB0aGUgY29uY2VwdHMgYW5kCi0gKiBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBndWlkZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIGRldmVsb3BlZCB3aGlsZSB3b3JraW5nIG9uIHRoZSBMQVJUCi0gKiBjb21wdXRpbmcgYm9hcmQgKGh0dHA6Ly93d3cubGFydG1ha2VyLm5sKSwgd2hpY2ggd2FzIHNwb25zb3JlZAotICogYnkgdGhlIERlbHQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5IHByb2plY3RzIE1vYmlsZSBNdWx0aS1tZWRpYQotICogQ29tbXVuaWNhdGlvbnMgYW5kIFViaXF1aXRvdXMgQ29tbXVuaWNhdGlvbnMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCi0gKiBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLAotICogU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLQotI2RlZmluZSBNT0RVTEVfVkVSUyAiMS4wIgotI2RlZmluZSBNT0RVTEVfTkFNRSAicHJvY2ZzX2V4YW1wbGUiCi0KLSNkZWZpbmUgRk9PQkFSX0xFTiA4Ci0KLXN0cnVjdCBmYl9kYXRhX3QgewotCWNoYXIgbmFtZVtGT09CQVJfTEVOICsgMV07Ci0JY2hhciB2YWx1ZVtGT09CQVJfTEVOICsgMV07Ci19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmV4YW1wbGVfZGlyLCAqZm9vX2ZpbGUsCi0JKmJhcl9maWxlLCAqamlmZmllc19maWxlLCAqc3ltbGluazsKLQotCi1zdHJ1Y3QgZmJfZGF0YV90IGZvb19kYXRhLCBiYXJfZGF0YTsKLQotCi1zdGF0aWMgaW50IHByb2NfcmVhZF9qaWZmaWVzKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKLQkJCSAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCWludCBsZW47Ci0KLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICJqaWZmaWVzID0gJWxkXG4iLAotICAgICAgICAgICAgICAgICAgICAgIGppZmZpZXMpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotCi1zdGF0aWMgaW50IHByb2NfcmVhZF9mb29iYXIoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotCQkJICAgIG9mZl90IG9mZiwgaW50IGNvdW50LCAKLQkJCSAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgbGVuOwotCXN0cnVjdCBmYl9kYXRhX3QgKmZiX2RhdGEgPSAoc3RydWN0IGZiX2RhdGFfdCAqKWRhdGE7Ci0KLQkvKiBET04nVCBETyBUSEFUIC0gYnVmZmVyIG92ZXJydW5zIGFyZSBiYWQgKi8KLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlcyA9ICclcydcbiIsIAotCQkgICAgICBmYl9kYXRhLT5uYW1lLCBmYl9kYXRhLT52YWx1ZSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0KLXN0YXRpYyBpbnQgcHJvY193cml0ZV9mb29iYXIoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgCi0JCQkgICAgIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbjsKLQlzdHJ1Y3QgZmJfZGF0YV90ICpmYl9kYXRhID0gKHN0cnVjdCBmYl9kYXRhX3QgKilkYXRhOwotCi0JaWYoY291bnQgPiBGT09CQVJfTEVOKQotCQlsZW4gPSBGT09CQVJfTEVOOwotCWVsc2UKLQkJbGVuID0gY291bnQ7Ci0KLQlpZihjb3B5X2Zyb21fdXNlcihmYl9kYXRhLT52YWx1ZSwgYnVmZmVyLCBsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWZiX2RhdGEtPnZhbHVlW2xlbl0gPSAnXDAnOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Byb2Nmc19leGFtcGxlKHZvaWQpCi17Ci0JaW50IHJ2ID0gMDsKLQotCS8qIGNyZWF0ZSBkaXJlY3RvcnkgKi8KLQlleGFtcGxlX2RpciA9IHByb2NfbWtkaXIoTU9EVUxFX05BTUUsIE5VTEwpOwotCWlmKGV4YW1wbGVfZGlyID09IE5VTEwpIHsKLQkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JLyogY3JlYXRlIGppZmZpZXMgdXNpbmcgY29udmVuaWVuY2UgZnVuY3Rpb24gKi8KLQlqaWZmaWVzX2ZpbGUgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJqaWZmaWVzIiwgCi0JCQkJCSAgICAgIDA0NDQsIGV4YW1wbGVfZGlyLCAKLQkJCQkJICAgICAgcHJvY19yZWFkX2ppZmZpZXMsCi0JCQkJCSAgICAgIE5VTEwpOwotCWlmKGppZmZpZXNfZmlsZSA9PSBOVUxMKSB7Ci0JCXJ2ICA9IC1FTk9NRU07Ci0JCWdvdG8gbm9famlmZmllczsKLQl9Ci0KLQkvKiBjcmVhdGUgZm9vIGFuZCBiYXIgZmlsZXMgdXNpbmcgc2FtZSBjYWxsYmFjawotCSAqIGZ1bmN0aW9ucyAKLQkgKi8KLQlmb29fZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJmb28iLCAwNjQ0LCBleGFtcGxlX2Rpcik7Ci0JaWYoZm9vX2ZpbGUgPT0gTlVMTCkgewotCQlydiA9IC1FTk9NRU07Ci0JCWdvdG8gbm9fZm9vOwotCX0KLQotCXN0cmNweShmb29fZGF0YS5uYW1lLCAiZm9vIik7Ci0Jc3RyY3B5KGZvb19kYXRhLnZhbHVlLCAiZm9vIik7Ci0JZm9vX2ZpbGUtPmRhdGEgPSAmZm9vX2RhdGE7Ci0JZm9vX2ZpbGUtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9mb29iYXI7Ci0JZm9vX2ZpbGUtPndyaXRlX3Byb2MgPSBwcm9jX3dyaXRlX2Zvb2JhcjsKLQkJCi0JYmFyX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYmFyIiwgMDY0NCwgZXhhbXBsZV9kaXIpOwotCWlmKGJhcl9maWxlID09IE5VTEwpIHsKLQkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIG5vX2JhcjsKLQl9Ci0KLQlzdHJjcHkoYmFyX2RhdGEubmFtZSwgImJhciIpOwotCXN0cmNweShiYXJfZGF0YS52YWx1ZSwgImJhciIpOwotCWJhcl9maWxlLT5kYXRhID0gJmJhcl9kYXRhOwotCWJhcl9maWxlLT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfZm9vYmFyOwotCWJhcl9maWxlLT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9mb29iYXI7Ci0JCQotCS8qIGNyZWF0ZSBzeW1saW5rICovCi0Jc3ltbGluayA9IHByb2Nfc3ltbGluaygiamlmZmllc190b28iLCBleGFtcGxlX2RpciwgCi0JCQkgICAgICAgImppZmZpZXMiKTsKLQlpZihzeW1saW5rID09IE5VTEwpIHsKLQkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIG5vX3N5bWxpbms7Ci0JfQotCi0JLyogZXZlcnl0aGluZyBPSyAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzICVzIGluaXRpYWxpc2VkXG4iLAotCSAgICAgICBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOwotCXJldHVybiAwOwotCi1ub19zeW1saW5rOgotCXJlbW92ZV9wcm9jX2VudHJ5KCJiYXIiLCBleGFtcGxlX2Rpcik7Ci1ub19iYXI6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImZvbyIsIGV4YW1wbGVfZGlyKTsKLW5vX2ZvbzoKLQlyZW1vdmVfcHJvY19lbnRyeSgiamlmZmllcyIsIGV4YW1wbGVfZGlyKTsKLW5vX2ppZmZpZXM6CQkJICAgICAgCi0JcmVtb3ZlX3Byb2NfZW50cnkoTU9EVUxFX05BTUUsIE5VTEwpOwotb3V0OgotCXJldHVybiBydjsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9wcm9jZnNfZXhhbXBsZSh2b2lkKQotewotCXJlbW92ZV9wcm9jX2VudHJ5KCJqaWZmaWVzX3RvbyIsIGV4YW1wbGVfZGlyKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiYmFyIiwgZXhhbXBsZV9kaXIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJmb28iLCBleGFtcGxlX2Rpcik7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImppZmZpZXMiLCBleGFtcGxlX2Rpcik7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoTU9EVUxFX05BTUUsIE5VTEwpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgcmVtb3ZlZFxuIiwKLQkgICAgICAgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKLX0KLQotCi1tb2R1bGVfaW5pdChpbml0X3Byb2Nmc19leGFtcGxlKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfcHJvY2ZzX2V4YW1wbGUpOwotCi1NT0RVTEVfQVVUSE9SKCJFcmlrIE1vdXciKTsKLU1PRFVMRV9ERVNDUklQVElPTigicHJvY2ZzIGV4YW1wbGVzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKaW5kZXggYjFhODFkMi4uYzY1ZjBhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tbW9uLnhtbApAQCAtNzE2LDYgKzcxNiw0MSBAQAogfQogICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICA8L2V4YW1wbGU+CisgIDxzZWN0aW9uIGlkPSJkdi10aW1pbmdzIj4KKwk8dGl0bGU+RGlnaXRhbCBWaWRlbyAoRFYpIFRpbWluZ3M8L3RpdGxlPgorCTxwYXJhPgorCVRoZSB2aWRlbyBzdGFuZGFyZHMgZGlzY3Vzc2VkIHNvIGZhciBoYXMgYmVlbiBkZWFsaW5nIHdpdGggQW5hbG9nIFRWIGFuZCB0aGUKK2NvcnJlc3BvbmRpbmcgdmlkZW8gdGltaW5ncy4gVG9kYXkgdGhlcmUgYXJlIG1hbnkgbW9yZSBkaWZmZXJlbnQgaGFyZHdhcmUgaW50ZXJmYWNlcworc3VjaCBhcyBIaWdoIERlZmluaXRpb24gVFYgaW50ZXJmYWNlcyAoSERNSSksIFZHQSwgRFZJIGNvbm5lY3RvcnMgZXRjLiwgdGhhdCBjYXJyeQordmlkZW8gc2lnbmFscyBhbmQgdGhlcmUgaXMgYSBuZWVkIHRvIGV4dGVuZCB0aGUgQVBJIHRvIHNlbGVjdCB0aGUgdmlkZW8gdGltaW5ncworZm9yIHRoZXNlIGludGVyZmFjZXMuIFNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBleHRlbmQgdGhlICZ2NGwyLXN0ZC1pZDsgZHVlIHRvCit0aGUgbGltaXRlZCBiaXRzIGF2YWlsYWJsZSwgYSBuZXcgc2V0IG9mIElPQ1RMcyBpcyBhZGRlZCB0byBzZXQvZ2V0IHZpZGVvIHRpbWluZ3MgYXQKK3RoZSBpbnB1dCBhbmQgb3V0cHV0OiA8L3BhcmE+PGl0ZW1pemVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+RFYgUHJlc2V0czogRGlnaXRhbCBWaWRlbyAoRFYpIHByZXNldHMuIFRoZXNlIGFyZSBJRHMgcmVwcmVzZW50aW5nIGEKK3ZpZGVvIHRpbWluZyBhdCB0aGUgaW5wdXQvb3V0cHV0LiBQcmVzZXRzIGFyZSBwcmUtZGVmaW5lZCB0aW1pbmdzIGltcGxlbWVudGVkCitieSB0aGUgaGFyZHdhcmUgYWNjb3JkaW5nIHRvIHZpZGVvIHN0YW5kYXJkcy4gQSBfX3UzMiBkYXRhIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQKK2EgcHJlc2V0IHVubGlrZSB0aGUgYml0IG1hc2sgdGhhdCBpcyB1c2VkIGluICZ2NGwyLXN0ZC1pZDsgYWxsb3dpbmcgZnV0dXJlIGV4dGVuc2lvbnMKK3RvIHN1cHBvcnQgYXMgbWFueSBkaWZmZXJlbnQgcHJlc2V0cyBhcyBuZWVkZWQuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPgorCTxwYXJhPkN1c3RvbSBEViBUaW1pbmdzOiBUaGlzIHdpbGwgYWxsb3cgYXBwbGljYXRpb25zIHRvIGRlZmluZSBtb3JlIGRldGFpbGVkCitjdXN0b20gdmlkZW8gdGltaW5ncyBmb3IgdGhlIGludGVyZmFjZS4gVGhpcyBpbmNsdWRlcyBwYXJhbWV0ZXJzIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwKK3BvbGFyaXRpZXMsIGZyb250cG9yY2gsIGJhY2twb3JjaCBldGMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPC9pdGVtaXplZGxpc3Q+CisJPHBhcmE+VG8gZW51bWVyYXRlIGFuZCBxdWVyeSB0aGUgYXR0cmlidXRlcyBvZiBEViBwcmVzZXRzIHN1cHBvcnRlZCBieSBhIGRldmljZSwKK2FwcGxpY2F0aW9ucyB1c2UgdGhlICZWSURJT0MtRU5VTS1EVi1QUkVTRVRTOyBpb2N0bC4gVG8gZ2V0IHRoZSBjdXJyZW50IERWIHByZXNldCwKK2FwcGxpY2F0aW9ucyB1c2UgdGhlICZWSURJT0MtRy1EVi1QUkVTRVQ7IGlvY3RsIGFuZCB0byBzZXQgYSBwcmVzZXQgdGhleSB1c2UgdGhlCismVklESU9DLVMtRFYtUFJFU0VUOyBpb2N0bC48L3BhcmE+CisJPHBhcmE+VG8gc2V0IGN1c3RvbSBEViB0aW1pbmdzIGZvciB0aGUgZGV2aWNlLCBhcHBsaWNhdGlvbnMgdXNlIHRoZQorJlZJRElPQy1TLURWLVRJTUlOR1M7IGlvY3RsIGFuZCB0byBnZXQgY3VycmVudCBjdXN0b20gRFYgdGltaW5ncyB0aGV5IHVzZSB0aGUKKyZWSURJT0MtRy1EVi1USU1JTkdTOyBpb2N0bC48L3BhcmE+CisJPHBhcmE+QXBwbGljYXRpb25zIGNhbiBtYWtlIHVzZSBvZiB0aGUgPHhyZWYgbGlua2VuZD0iaW5wdXQtY2FwYWJpbGl0aWVzIiAvPiBhbmQKKzx4cmVmIGxpbmtlbmQ9Im91dHB1dC1jYXBhYmlsaXRpZXMiLz4gZmxhZ3MgdG8gZGVjaWRlIHdoYXQgaW9jdGxzIGFyZSBhdmFpbGFibGUgdG8gc2V0IHRoZQordmlkZW8gdGltaW5ncyBmb3IgdGhlIGRldmljZS48L3BhcmE+CisJPC9zZWN0aW9uPgogICA8L3NlY3Rpb24+CiAKICAgJnN1Yi1jb250cm9sczsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbAppbmRleCA0ZDE5MDJhLi5iOWRiZGY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbXBhdC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21wYXQueG1sCkBAIC0yMjkxLDggKzIyOTEsOCBAQAogCTxsaXN0aXRlbT4KIAkgIDxwYXJhPk5ldyBjb250cm9sIDxjb25zdGFudD5WNEwyX0NJRF9DT0xPUkZYPC9jb25zdGFudD4gd2FzIGFkZGVkLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgotICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgIDwvc2VjdGlvbj4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgogICAgIDxzZWN0aW9uPgogICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMi42LjMyPC90aXRsZT4KICAgICAgIDxvcmRlcmVkbGlzdD4KQEAgLTIzMjIsOCArMjMyMiwxNiBAQAogCTxsaXN0aXRlbT4KIAkgIDxwYXJhPkFkZGVkIFJlbW90ZSBDb250cm9sbGVyIGNoYXB0ZXIsIGRlc2NyaWJpbmcgdGhlIGRlZmF1bHQgUmVtb3RlIENvbnRyb2xsZXIgbWFwcGluZyBmb3IgbWVkaWEgZGV2aWNlcy48L3BhcmE+CiAJPC9saXN0aXRlbT4KLSAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICA8L3NlY3Rpb24+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5WNEwyIGluIExpbnV4IDIuNi4zMzwvdGl0bGU+CisgICAgICA8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+QWRkZWQgc3VwcG9ydCBmb3IgRGlnaXRhbCBWaWRlbyB0aW1pbmdzIGluIG9yZGVyIHRvIHN1cHBvcnQgSERUViByZWNlaXZlcnMgYW5kIHRyYW5zbWl0dGVycy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgogICAgPC9zZWN0aW9uPgogCiAgICA8c2VjdGlvbiBpZD0ib3RoZXIiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdjRsMi54bWwKaW5kZXggOTM3YjQxNS4uMDYwMTA1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3Y0bDIueG1sCkBAIC03NCw2ICs3NCwxNyBAQAogCSAgPC9hZGRyZXNzPgogCTwvYWZmaWxpYXRpb24+CiAgICAgICA8L2F1dGhvcj4KKworICAgICAgPGF1dGhvcj4KKwk8Zmlyc3RuYW1lPk11cmFsaWRoYXJhbjwvZmlyc3RuYW1lPgorCTxzdXJuYW1lPkthcmljaGVyaTwvc3VybmFtZT4KKwk8Y29udHJpYj5Eb2N1bWVudGVkIHRoZSBEaWdpdGFsIFZpZGVvIHRpbWluZ3MgQVBJLjwvY29udHJpYj4KKwk8YWZmaWxpYXRpb24+CisJICA8YWRkcmVzcz4KKwkgICAgPGVtYWlsPm0ta2FyaWNoZXJpMkB0aS5jb208L2VtYWlsPgorCSAgPC9hZGRyZXNzPgorCTwvYWZmaWxpYXRpb24+CisgICAgICA8L2F1dGhvcj4KICAgICA8L2F1dGhvcmdyb3VwPgogCiAgICAgPGNvcHlyaWdodD4KQEAgLTg5LDcgKzEwMCw3IEBACiAgICAgICA8eWVhcj4yMDA4PC95ZWFyPgogICAgICAgPHllYXI+MjAwOTwveWVhcj4KICAgICAgIDxob2xkZXI+QmlsbCBEaXJrcywgTWljaGFlbCBILiBTY2hpbWVrLCBIYW5zIFZlcmt1aWwsIE1hcnRpbgotUnVibGksIEFuZHkgV2FsbHMsIE1hdXJvIENhcnZhbGhvIENoZWhhYjwvaG9sZGVyPgorUnVibGksIEFuZHkgV2FsbHMsIE11cmFsaWRoYXJhbiBLYXJpY2hlcmksIE1hdXJvIENhcnZhbGhvIENoZWhhYjwvaG9sZGVyPgogICAgIDwvY29weXJpZ2h0PgogICAgIDxsZWdhbG5vdGljZT4KICAgICA8cGFyYT5FeGNlcHQgd2hlbiBleHBsaWNpdGx5IHN0YXRlZCBhcyBHUEwsIHByb2dyYW1taW5nIGV4YW1wbGVzIHdpdGhpbgpAQCAtMTAzLDYgKzExNCwxMyBAQAogYXBwbGljYXRpb25zLiAtLT4KIAogICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+Mi42LjMzPC9yZXZudW1iZXI+CisJPGRhdGU+MjAwOS0xMi0wMzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWs8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+QWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIERpZ2l0YWwgVmlkZW8gdGltaW5ncyBBUEkuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CiAJPHJldm51bWJlcj4yLjYuMzI8L3Jldm51bWJlcj4KIAk8ZGF0ZT4yMDA5LTA4LTMxPC9kYXRlPgogCTxhdXRob3Jpbml0aWFscz5tY2M8L2F1dGhvcmluaXRpYWxzPgpAQCAtMzU1LDcgKzM3Myw3IEBACiA8L3BhcnRpbmZvPgogCiA8dGl0bGU+VmlkZW8gZm9yIExpbnV4IFR3byBBUEkgU3BlY2lmaWNhdGlvbjwvdGl0bGU+Ci0gPHN1YnRpdGxlPlJldmlzaW9uIDIuNi4zMjwvc3VidGl0bGU+CisgPHN1YnRpdGxlPlJldmlzaW9uIDIuNi4zMzwvc3VidGl0bGU+CiAKICAgPGNoYXB0ZXIgaWQ9ImNvbW1vbiI+CiAgICAgJnN1Yi1jb21tb247CkBAIC00MTEsNiArNDI5LDcgQEAKICAgICAmc3ViLWVuY29kZXItY21kOwogICAgICZzdWItZW51bWF1ZGlvOwogICAgICZzdWItZW51bWF1ZGlvb3V0OworICAgICZzdWItZW51bS1kdi1wcmVzZXRzOwogICAgICZzdWItZW51bS1mbXQ7CiAgICAgJnN1Yi1lbnVtLWZyYW1lc2l6ZXM7CiAgICAgJnN1Yi1lbnVtLWZyYW1laW50ZXJ2YWxzOwpAQCAtNDIxLDYgKzQ0MCw4IEBACiAgICAgJnN1Yi1nLWF1ZGlvb3V0OwogICAgICZzdWItZy1jcm9wOwogICAgICZzdWItZy1jdHJsOworICAgICZzdWItZy1kdi1wcmVzZXQ7CisgICAgJnN1Yi1nLWR2LXRpbWluZ3M7CiAgICAgJnN1Yi1nLWVuYy1pbmRleDsKICAgICAmc3ViLWctZXh0LWN0cmxzOwogICAgICZzdWItZy1mYnVmOwpAQCAtNDQxLDYgKzQ2Miw3IEBACiAgICAgJnN1Yi1xdWVyeWJ1ZjsKICAgICAmc3ViLXF1ZXJ5Y2FwOwogICAgICZzdWItcXVlcnljdHJsOworICAgICZzdWItcXVlcnktZHYtcHJlc2V0OwogICAgICZzdWItcXVlcnlzdGQ7CiAgICAgJnN1Yi1yZXFidWZzOwogICAgICZzdWItcy1ody1mcmVxLXNlZWs7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGVvZGV2Mi5oLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sCmluZGV4IDNlMjgyZWQuLjA2ODMyNTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sCkBAIC03MzQsNiArNzM0LDk5IEBACiB9OwogCiAvKgorICogICAgICBWIEkgRCBFIE8gICAgICAgVCBJIE0gSSBOIEcgUyAgIEQgViAgICAgUCBSIEUgUyBFIFQKKyAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtcHJlc2V0Ij52NGwyX2R2X3ByZXNldDwvbGluaz4geworICAgICAgICBfX3UzMiAgIHByZXNldDsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFs0XTsKK307CisKKy8qCisgKiAgICAgIEQgViAgICAgUCBSIEUgUyBFIFQgUyAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi1lbnVtLXByZXNldCI+djRsMl9kdl9lbnVtX3ByZXNldDwvbGluaz4geworICAgICAgICBfX3UzMiAgIGluZGV4OworICAgICAgICBfX3UzMiAgIHByZXNldDsKKyAgICAgICAgX191OCAgICBuYW1lWzMyXTsgLyogTmFtZSBvZiB0aGUgcHJlc2V0IHRpbWluZyAqLworICAgICAgICBfX3UzMiAgIHdpZHRoOworICAgICAgICBfX3UzMiAgIGhlaWdodDsKKyAgICAgICAgX191MzIgICByZXNlcnZlZFs0XTsKK307CisKKy8qCisgKiAgICAgIEQgViAgICAgUCBSIEUgUyBFIFQgICAgIFYgQSBMIFUgRSBTCisgKi8KKyNkZWZpbmUgICAgICAgICBWNEwyX0RWX0lOVkFMSUQgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl80ODBQNTlfOTQgICAgICAgMSAvKiBCVC4xMzYyICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl81NzZQNTAgICAgICAgICAgMiAvKiBCVC4xMzYyICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl83MjBQMjQgICAgICAgICAgMyAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl83MjBQMjUgICAgICAgICAgNCAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl83MjBQMzAgICAgICAgICAgNSAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl83MjBQNTAgICAgICAgICAgNiAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl83MjBQNTlfOTQgICAgICAgNyAvKiBTTVBURSAyNzRNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl83MjBQNjAgICAgICAgICAgOCAvKiBTTVBURSAyNzRNLzI5Nk0gKi8KKyNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBJMjlfOTcgICAgICA5IC8qIEJULjExMjAvIFNNUFRFIDI3NE0gKi8KKyNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBJMzAgICAgICAgICAxMCAvKiBCVC4xMTIwLyBTTVBURSAyNzRNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwSTI1ICAgICAgICAgMTEgLyogQlQuMTEyMCAqLworI2RlZmluZSAgICAgICAgIFY0TDJfRFZfMTA4MEk1MCAgICAgICAgIDEyIC8qIFNNUFRFIDI5Nk0gKi8KKyNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBJNjAgICAgICAgICAxMyAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwUDI0ICAgICAgICAgMTQgLyogU01QVEUgMjk2TSAqLworI2RlZmluZSAgICAgICAgIFY0TDJfRFZfMTA4MFAyNSAgICAgICAgIDE1IC8qIFNNUFRFIDI5Nk0gKi8KKyNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBQMzAgICAgICAgICAxNiAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwUDUwICAgICAgICAgMTcgLyogQlQuMTEyMCAqLworI2RlZmluZSAgICAgICAgIFY0TDJfRFZfMTA4MFA2MCAgICAgICAgIDE4IC8qIEJULjExMjAgKi8KKworLyoKKyAqICAgICAgRCBWICAgICBCIFQgICAgIFQgSSBNIEkgTiBHIFMKKyAqLworCisvKiBCVC42NTYvQlQuMTEyMCB0aW1pbmcgZGF0YSAqLworc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnQtdGltaW5ncyI+djRsMl9idF90aW1pbmdzPC9saW5rPiB7CisgICAgICAgIF9fdTMyICAgd2lkdGg7ICAgICAgICAgIC8qIHdpZHRoIGluIHBpeGVscyAqLworICAgICAgICBfX3UzMiAgIGhlaWdodDsgICAgICAgICAvKiBoZWlnaHQgaW4gbGluZXMgKi8KKyAgICAgICAgX191MzIgICBpbnRlcmxhY2VkOyAgICAgLyogSW50ZXJsYWNlZCBvciBwcm9ncmVzc2l2ZSAqLworICAgICAgICBfX3UzMiAgIHBvbGFyaXRpZXM7ICAgICAvKiBQb3NpdGl2ZSBvciBuZWdhdGl2ZSBwb2xhcml0eSAqLworICAgICAgICBfX3U2NCAgIHBpeGVsY2xvY2s7ICAgICAvKiBQaXhlbCBjbG9jayBpbiBIWi4gRXguIDc0LjI1TUh6LSZndDs3NDI1MDAwMCAqLworICAgICAgICBfX3UzMiAgIGhmcm9udHBvcmNoOyAgICAvKiBIb3JpenBvbnRhbCBmcm9udCBwb3JjaCBpbiBwaXhlbHMgKi8KKyAgICAgICAgX191MzIgICBoc3luYzsgICAgICAgICAgLyogSG9yaXpvbnRhbCBTeW5jIGxlbmd0aCBpbiBwaXhlbHMgKi8KKyAgICAgICAgX191MzIgICBoYmFja3BvcmNoOyAgICAgLyogSG9yaXpvbnRhbCBiYWNrIHBvcmNoIGluIHBpeGVscyAqLworICAgICAgICBfX3UzMiAgIHZmcm9udHBvcmNoOyAgICAvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCBpbiBwaXhlbHMgKi8KKyAgICAgICAgX191MzIgICB2c3luYzsgICAgICAgICAgLyogVmVydGljYWwgU3luYyBsZW5ndGggaW4gbGluZXMgKi8KKyAgICAgICAgX191MzIgICB2YmFja3BvcmNoOyAgICAgLyogVmVydGljYWwgYmFjayBwb3JjaCBpbiBsaW5lcyAqLworICAgICAgICBfX3UzMiAgIGlsX3Zmcm9udHBvcmNoOyAvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCBmb3IgYm90dG9tIGZpZWxkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGludGVybGFjZWQgZmllbGQgZm9ybWF0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgX191MzIgICBpbF92c3luYzsgICAgICAgLyogVmVydGljYWwgc3luYyBsZW5ndGggZm9yIGJvdHRvbSBmaWVsZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIF9fdTMyICAgaWxfdmJhY2twb3JjaDsgIC8qIFZlcnRpY2FsIGJhY2sgcG9yY2ggZm9yIGJvdHRvbSBmaWVsZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEludGVybGFjZWQgb3IgcHJvZ3Jlc3NpdmUgZm9ybWF0ICovCisjZGVmaW5lIFY0TDJfRFZfUFJPR1JFU1NJVkUgICAgIDAKKyNkZWZpbmUgVjRMMl9EVl9JTlRFUkxBQ0VEICAgICAgMQorCisvKiBQb2xhcml0aWVzLiBJZiBiaXQgaXMgbm90IHNldCwgaXQgaXMgYXNzdW1lZCB0byBiZSBuZWdhdGl2ZSBwb2xhcml0eSAqLworI2RlZmluZSBWNEwyX0RWX1ZTWU5DX1BPU19QT0wgICAweDAwMDAwMDAxCisjZGVmaW5lIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCAgIDB4MDAwMDAwMDIKKworCisvKiBEViB0aW1pbmdzICovCitzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi10aW1pbmdzIj52NGwyX2R2X3RpbWluZ3M8L2xpbms+IHsKKyAgICAgICAgX191MzIgdHlwZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ0LXRpbWluZ3MiPnY0bDJfYnRfdGltaW5nczwvbGluaz4gIGJ0OworICAgICAgICAgICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMzJdOworICAgICAgICB9OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFZhbHVlcyBmb3IgdGhlIHR5cGUgZmllbGQgKi8KKyNkZWZpbmUgVjRMMl9EVl9CVF82NTZfMTEyMCAgICAgMCAgICAgICAvKiBCVC42NTYvMTEyMCB0aW1pbmcgdHlwZSAqLworCisvKgogICogICAgICBWIEkgRCBFIE8gICBJIE4gUCBVIFQgUwogICovCiBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1pbnB1dCI+djRsMl9pbnB1dDwvbGluaz4gewpAQCAtNzQ0LDcgKzgzNyw4IEBACiAgICAgICAgIF9fdTMyICAgICAgICB0dW5lcjsgICAgICAgICAgICAgLyogIEFzc29jaWF0ZWQgdHVuZXIgKi8KICAgICAgICAgdjRsMl9zdGRfaWQgIHN0ZDsKICAgICAgICAgX191MzIgICAgICAgIHN0YXR1czsKLSAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkWzRdOworICAgICAgICBfX3UzMiAgICAgICAgY2FwYWJpbGl0aWVzOworICAgICAgICBfX3UzMiAgICAgICAgcmVzZXJ2ZWRbM107CiB9OwogCiAvKiAgVmFsdWVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkICovCkBAIC03NzUsNiArODY5LDExIEBACiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQUNDRVNTICAgMHgwMjAwMDAwMCAgLyogQ29uZGl0aW9uYWwgYWNjZXNzIGRlbmllZCAqLwogI2RlZmluZSBWNEwyX0lOX1NUX1ZUUiAgICAgICAgIDB4MDQwMDAwMDAgIC8qIFZUUiB0aW1lIGNvbnN0YW50ICovCiAKKy8qIGNhcGFiaWxpdGllcyBmbGFncyAqLworI2RlZmluZSBWNEwyX0lOX0NBUF9QUkVTRVRTICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogU3VwcG9ydHMgU19EVl9QUkVTRVQgKi8KKyNkZWZpbmUgVjRMMl9JTl9DQVBfQ1VTVE9NX1RJTUlOR1MgICAgICAweDAwMDAwMDAyIC8qIFN1cHBvcnRzIFNfRFZfVElNSU5HUyAqLworI2RlZmluZSBWNEwyX0lOX0NBUF9TVEQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogU3VwcG9ydHMgU19TVEQgKi8KKwogLyoKICAqICAgICAgViBJIEQgRSBPICAgTyBVIFQgUCBVIFQgUwogICovCkBAIC03ODUsMTMgKzg4NCwxOSBAQAogICAgICAgICBfX3UzMiAgICAgICAgYXVkaW9zZXQ7ICAgICAgICAgIC8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCiAgICAgICAgIF9fdTMyICAgICAgICBtb2R1bGF0b3I7ICAgICAgICAgLyogIEFzc29jaWF0ZWQgbW9kdWxhdG9yICovCiAgICAgICAgIHY0bDJfc3RkX2lkICBzdGQ7Ci0gICAgICAgIF9fdTMyICAgICAgICByZXNlcnZlZFs0XTsKKyAgICAgICAgX191MzIgICAgICAgIGNhcGFiaWxpdGllczsKKyAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkWzNdOwogfTsKIC8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1IgICAgICAgICAgICAgIDEKICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cgICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZICAgICAgIDMKIAorLyogY2FwYWJpbGl0aWVzIGZsYWdzICovCisjZGVmaW5lIFY0TDJfT1VUX0NBUF9QUkVTRVRTICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBTdXBwb3J0cyBTX0RWX1BSRVNFVCAqLworI2RlZmluZSBWNEwyX09VVF9DQVBfQ1VTVE9NX1RJTUlOR1MgICAgIDB4MDAwMDAwMDIgLyogU3VwcG9ydHMgU19EVl9USU1JTkdTICovCisjZGVmaW5lIFY0TDJfT1VUX0NBUF9TVEQgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBTdXBwb3J0cyBTX1NURCAqLworCiAvKgogICogICAgICBDIE8gTiBUIFIgTyBMIFMKICAqLwpAQCAtMTYyNiw2ICsxNzMxLDEzIEBACiAjZW5kaWYKIAogI2RlZmluZSBWSURJT0NfU19IV19GUkVRX1NFRUsgICAgX0lPVygnVicsIDgyLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1ody1mcmVxLXNlZWsiPnY0bDJfaHdfZnJlcV9zZWVrPC9saW5rPikKKyNkZWZpbmUgVklESU9DX0VOVU1fRFZfUFJFU0VUUyAgX0lPV1IoJ1YnLCA4Mywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtZW51bS1wcmVzZXQiPnY0bDJfZHZfZW51bV9wcmVzZXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19EVl9QUkVTRVQgICAgICBfSU9XUignVicsIDg0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi1wcmVzZXQiPnY0bDJfZHZfcHJlc2V0PC9saW5rPikKKyNkZWZpbmUgVklESU9DX0dfRFZfUFJFU0VUICAgICAgX0lPV1IoJ1YnLCA4NSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtcHJlc2V0Ij52NGwyX2R2X3ByZXNldDwvbGluaz4pCisjZGVmaW5lIFZJRElPQ19RVUVSWV9EVl9QUkVTRVQgIF9JT1IoJ1YnLCAgODYsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWR2LXByZXNldCI+djRsMl9kdl9wcmVzZXQ8L2xpbms+KQorI2RlZmluZSBWSURJT0NfU19EVl9USU1JTkdTICAgICBfSU9XUignVicsIDg3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi10aW1pbmdzIj52NGwyX2R2X3RpbWluZ3M8L2xpbms+KQorI2RlZmluZSBWSURJT0NfR19EVl9USU1JTkdTICAgICBfSU9XUignVicsIDg4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi10aW1pbmdzIj52NGwyX2R2X3RpbWluZ3M8L2xpbms+KQorCiAvKiBSZW1pbmRlcjogd2hlbiBhZGRpbmcgbmV3IGlvY3RscyBwbGVhc2UgYWRkIHN1cHBvcnQgZm9yIHRoZW0gdG8KICAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGFzIHdlbGwhICovCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW0tZHYtcHJlc2V0cy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWR2LXByZXNldHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMzE0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWR2LXByZXNldHMueG1sCkBAIC0wLDAgKzEsMjM4IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1lbnVtLWR2LXByZXNldHMiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfRU5VTV9EVl9QUkVTRVRTPC9yZWZlbnRyeXRpdGxlPgorICAgICZtYW52b2w7CisgIDwvcmVmbWV0YT4KKworICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT5WSURJT0NfRU5VTV9EVl9QUkVTRVRTPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkVudW1lcmF0ZSBzdXBwb3J0ZWQgRGlnaXRhbCBWaWRlbyBwcmVzZXRzPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0ICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfRU5VTV9EVl9QUkVTRVRTPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UbyBxdWVyeSB0aGUgYXR0cmlidXRlcyBvZiBhIERWIHByZXNldCwgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhlCis8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBhbmQgemVybyB0aGUgcmVzZXJ2ZWQgYXJyYXkgb2YgJnY0bDItZHYtZW51bS1wcmVzZXQ7CithbmQgY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19FTlVNX0RWX1BSRVNFVFM8L2NvbnN0YW50PiBpb2N0bCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCitzdHJ1Y3R1cmUuIERyaXZlcnMgZmlsbCB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIG9yIHJldHVybiBhbgorJkVJTlZBTDsgd2hlbiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gVG8gZW51bWVyYXRlIGFsbCBEViBQcmVzZXRzIHN1cHBvcnRlZCwKK2FwcGxpY2F0aW9ucyBzaGFsbCBiZWdpbiBhdCBpbmRleCB6ZXJvLCBpbmNyZW1lbnRpbmcgYnkgb25lIHVudGlsIHRoZQorZHJpdmVyIHJldHVybnMgPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4uIERyaXZlcnMgbWF5IGVudW1lcmF0ZSBhCitkaWZmZXJlbnQgc2V0IG9mIERWIHByZXNldHMgYWZ0ZXIgc3dpdGNoaW5nIHRoZSB2aWRlbyBpbnB1dCBvcgorb3V0cHV0LjwvcGFyYT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0idjRsMi1kdi1lbnVtLXByZXNldCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZHZfZW51bV9wcmVzZXRzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5OdW1iZXIgb2YgdGhlIERWIHByZXNldCwgc2V0IGJ5IHRoZQorYXBwbGljYXRpb24uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5wcmVzZXQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGZpZWxkIGlkZW50aWZpZXMgb25lIG9mIHRoZSBEViBwcmVzZXQgdmFsdWVzIGxpc3RlZCBpbiA8eHJlZiBsaW5rZW5kPSJ2NGwyLWR2LXByZXNldHMtdmFscyIvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+WzI0XTwvZW50cnk+CisJICAgIDxlbnRyeT5OYW1lIG9mIHRoZSBwcmVzZXQsIGEgTlVMLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLCBmb3IgZXhhbXBsZTogIjcyMFAtNjAiLCAiMTA4MEktNjAiLiBUaGlzIGluZm9ybWF0aW9uIGlzCitpbnRlbmRlZCBmb3IgdGhlIHVzZXIuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD53aWR0aDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PldpZHRoIG9mIHRoZSBhY3RpdmUgdmlkZW8gaW4gcGl4ZWxzIGZvciB0aGUgRFYgcHJlc2V0LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVpZ2h0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SGVpZ2h0IG9mIHRoZSBhY3RpdmUgdmlkZW8gaW4gbGluZXMgZm9yIHRoZSBEViBwcmVzZXQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZHYtcHJlc2V0cy12YWxzIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+RFYgUHJlc2V0czwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+UHJlc2V0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlByZXNldCB2YWx1ZTwvZW50cnk+CisJICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWX0lOVkFMSUQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MDwvZW50cnk+CisJICAgIDxlbnRyeT5JbnZhbGlkIHByZXNldCB2YWx1ZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl80ODBQNTlfOTQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MTwvZW50cnk+CisJICAgIDxlbnRyeT43MjB4NDgwIHByb2dyZXNzaXZlIHZpZGVvIGF0IDU5Ljk0IGZwcyBhcyBwZXIgQlQuMTM2Mi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl81NzZQNTA8L2VudHJ5PgorCSAgICA8ZW50cnk+MjwvZW50cnk+CisJICAgIDxlbnRyeT43MjB4NTc2IHByb2dyZXNzaXZlIHZpZGVvIGF0IDUwIGZwcyBhcyBwZXIgQlQuMTM2Mi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl83MjBQMjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MzwvZW50cnk+CisJICAgIDxlbnRyeT4xMjgweDcyMCBwcm9ncmVzc2l2ZSB2aWRlbyBhdCAyNCBmcHMgYXMgcGVyIFNNUFRFIDI5Nk0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfRFZfNzIwUDI1PC9lbnRyeT4KKwkgICAgPGVudHJ5PjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MTI4MHg3MjAgcHJvZ3Jlc3NpdmUgdmlkZW8gYXQgMjUgZnBzIGFzIHBlciBTTVBURSAyOTZNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzcyMFAzMDwvZW50cnk+CisJICAgIDxlbnRyeT41PC9lbnRyeT4KKwkgICAgPGVudHJ5PjEyODB4NzIwIHByb2dyZXNzaXZlIHZpZGVvIGF0IDMwIGZwcyBhcyBwZXIgU01QVEUgMjk2TS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl83MjBQNTA8L2VudHJ5PgorCSAgICA8ZW50cnk+NjwvZW50cnk+CisJICAgIDxlbnRyeT4xMjgweDcyMCBwcm9ncmVzc2l2ZSB2aWRlbyBhdCA1MCBmcHMgYXMgcGVyIFNNUFRFIDI5Nk0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfRFZfNzIwUDU5Xzk0PC9lbnRyeT4KKwkgICAgPGVudHJ5Pjc8L2VudHJ5PgorCSAgICA8ZW50cnk+MTI4MHg3MjAgcHJvZ3Jlc3NpdmUgdmlkZW8gYXQgNTkuOTQgZnBzIGFzIHBlciBTTVBURSAyNzRNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzcyMFA2MDwvZW50cnk+CisJICAgIDxlbnRyeT44PC9lbnRyeT4KKwkgICAgPGVudHJ5PjEyODB4NzIwIHByb2dyZXNzaXZlIHZpZGVvIGF0IDYwIGZwcyBhcyBwZXIgU01QVEUgMjc0TS8yOTZNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzEwODBJMjlfOTc8L2VudHJ5PgorCSAgICA8ZW50cnk+OTwvZW50cnk+CisJICAgIDxlbnRyeT4xOTIweDEwODAgaW50ZXJsYWNlZCB2aWRlbyBhdCAyOS45NyBmcHMgYXMgcGVyIEJULjExMjAvU01QVEUgMjc0TS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl8xMDgwSTMwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjEwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE5MjB4MTA4MCBpbnRlcmxhY2VkIHZpZGVvIGF0IDMwIGZwcyBhcyBwZXIgQlQuMTEyMC9TTVBURSAyNzRNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzEwODBJMjU8L2VudHJ5PgorCSAgICA8ZW50cnk+MTE8L2VudHJ5PgorCSAgICA8ZW50cnk+MTkyMHgxMDgwIGludGVybGFjZWQgdmlkZW8gYXQgMjUgZnBzIGFzIHBlciBCVC4xMTIwLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzEwODBJNTA8L2VudHJ5PgorCSAgICA8ZW50cnk+MTI8L2VudHJ5PgorCSAgICA8ZW50cnk+MTkyMHgxMDgwIGludGVybGFjZWQgdmlkZW8gYXQgNTAgZnBzIGFzIHBlciBTTVBURSAyOTZNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzEwODBJNjA8L2VudHJ5PgorCSAgICA8ZW50cnk+MTM8L2VudHJ5PgorCSAgICA8ZW50cnk+MTkyMHgxMDgwIGludGVybGFjZWQgdmlkZW8gYXQgNjAgZnBzIGFzIHBlciBTTVBURSAyOTZNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzEwODBQMjQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MTQ8L2VudHJ5PgorCSAgICA8ZW50cnk+MTkyMHgxMDgwIHByb2dyZXNzaXZlIHZpZGVvIGF0IDI0IGZwcyBhcyBwZXIgU01QVEUgMjk2TS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl8xMDgwUDI1PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE1PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE5MjB4MTA4MCBwcm9ncmVzc2l2ZSB2aWRlbyBhdCAyNSBmcHMgYXMgcGVyIFNNUFRFIDI5Nk0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PlY0TDJfRFZfMTA4MFAzMDwvZW50cnk+CisJICAgIDxlbnRyeT4xNjwvZW50cnk+CisJICAgIDxlbnRyeT4xOTIweDEwODAgcHJvZ3Jlc3NpdmUgdmlkZW8gYXQgMzAgZnBzIGFzIHBlciBTTVBURSAyOTZNLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5WNEwyX0RWXzEwODBQNTA8L2VudHJ5PgorCSAgICA8ZW50cnk+MTc8L2VudHJ5PgorCSAgICA8ZW50cnk+MTkyMHgxMDgwIHByb2dyZXNzaXZlIHZpZGVvIGF0IDUwIGZwcyBhcyBwZXIgQlQuMTEyMC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl8xMDgwUDYwPC9lbnRyeT4KKwkgICAgPGVudHJ5PjE4PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE5MjB4MTA4MCBwcm9ncmVzc2l2ZSB2aWRlbyBhdCA2MCBmcHMgYXMgcGVyIEJULjExMjAuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlICZ2NGwyLWR2LWVudW0tcHJlc2V0OyA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPgoraXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1pbnB1dC54bWwKaW5kZXggNDE0ODU2Yi4uNzFiODY4ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sCkBAIC0xMjQsNyArMTI0LDEzIEBACiAJICA8L3Jvdz4KIAkgIDxyb3c+CiAJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+Ci0JICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls0XTwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y2FwYWJpbGl0aWVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBmaWVsZCBwcm92aWRlcyBjYXBhYmlsaXRpZXMgZm9yIHRoZQoraW5wdXQuIFNlZSA8eHJlZiBsaW5rZW5kPSJpbnB1dC1jYXBhYmlsaXRpZXMiIC8+IGZvciBmbGFncy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bM108L2VudHJ5PgogCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIG11c3Qgc2V0CiB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgogCSAgPC9yb3c+CkBAIC0yNjEsNiArMjY3LDM0IEBACiAJPC90Ym9keT4KICAgICAgIDwvdGdyb3VwPgogICAgIDwvdGFibGU+CisKKyAgICA8IS0tIENhcGFiaWxpdHkgZmxhZ3MgYmFzZWQgb24gdmlkZW8gdGltaW5ncyBSRkMgYnkgTXVyYWxpZGhhcmFuCitLYXJpY2hlcmksIHRpdGxlZCBSRkMgKHYxLjIpOiBWNEwgLSBTdXBwb3J0IGZvciB2aWRlbyB0aW1pbmdzIGF0IHRoZQoraW5wdXQvb3V0cHV0IGludGVyZmFjZSB0byBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcgb24gMTkgT2N0IDIwMDkuCisJLS0+CisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJpbnB1dC1jYXBhYmlsaXRpZXMiPgorICAgICAgPHRpdGxlPklucHV0IGNhcGFiaWxpdGllczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9JTl9DQVBfUFJFU0VUUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMDE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpbnB1dCBzdXBwb3J0cyBzZXR0aW5nIERWIHByZXNldHMgYnkgdXNpbmcgVklESU9DX1NfRFZfUFJFU0VULjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9PVVRfQ0FQX0NVU1RPTV9USU1JTkdTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAwMDAwMjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlucHV0IHN1cHBvcnRzIHNldHRpbmcgY3VzdG9tIHZpZGVvIHRpbWluZ3MgYnkgdXNpbmcgVklESU9DX1NfRFZfVElNSU5HUy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfSU5fQ0FQX1NURDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMDAwMDQ8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpbnB1dCBzdXBwb3J0cyBzZXR0aW5nIHRoZSBUViBzdGFuZGFyZCBieSB1c2luZyBWSURJT0NfU19TVEQuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgogICA8L3JlZnNlY3QxPgogCiAgIDxyZWZzZWN0MT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwKaW5kZXggZThkMTZkYy4uYTI4MWQyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwKQEAgLTExNCw3ICsxMTQsMTMgQEAKIAkgIDwvcm93PgogCSAgPHJvdz4KIAkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KLQkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzRdPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jYXBhYmlsaXRpZXM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGZpZWxkIHByb3ZpZGVzIGNhcGFiaWxpdGllcyBmb3IgdGhlCitvdXRwdXQuIFNlZSA8eHJlZiBsaW5rZW5kPSJvdXRwdXQtY2FwYWJpbGl0aWVzIiAvPiBmb3IgZmxhZ3MuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+WzNdPC9lbnRyeT4KIAkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldAogdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KIAkgIDwvcm93PgpAQCAtMTQ3LDYgKzE1MywzNCBAQAogICAgICAgPC90Z3JvdXA+CiAgICAgPC90YWJsZT4KIAorICAgIDwhLS0gQ2FwYWJpbGl0aWVzIGZsYWdzIGJhc2VkIG9uIHZpZGVvIHRpbWluZ3MgUkZDIGJ5IE11cmFsaWRoYXJhbgorS2FyaWNoZXJpLCB0aXRsZWQgUkZDICh2MS4yKTogVjRMIC0gU3VwcG9ydCBmb3IgdmlkZW8gdGltaW5ncyBhdCB0aGUKK2lucHV0L291dHB1dCBpbnRlcmZhY2UgdG8gbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnIG9uIDE5IE9jdCAyMDA5LgorCS0tPgorICAgIDx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0ib3V0cHV0LWNhcGFiaWxpdGllcyI+CisgICAgICA8dGl0bGU+T3V0cHV0IGNhcGFiaWxpdGllczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9PVVRfQ0FQX1BSRVNFVFM8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgb3V0cHV0IHN1cHBvcnRzIHNldHRpbmcgRFYgcHJlc2V0cyBieSB1c2luZyBWSURJT0NfU19EVl9QUkVTRVQuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX09VVF9DQVBfQ1VTVE9NX1RJTUlOR1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgb3V0cHV0IHN1cHBvcnRzIHNldHRpbmcgY3VzdG9tIHZpZGVvIHRpbWluZ3MgYnkgdXNpbmcgVklESU9DX1NfRFZfVElNSU5HUy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfT1VUX0NBUF9TVEQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDAwMDA0PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgb3V0cHV0IHN1cHBvcnRzIHNldHRpbmcgdGhlIFRWIHN0YW5kYXJkIGJ5IHVzaW5nIFZJRElPQ19TX1NURC48L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKICAgPC9yZWZzZWN0MT4KICAgPHJlZnNlY3QxPgogICAgICZyZXR1cm4tdmFsdWU7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWR2LXByZXNldC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWR2LXByZXNldC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2Nzg0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbApAQCAtMCwwICsxLDExMSBAQAorPHJlZmVudHJ5IGlkPSJ2aWRpb2MtZy1kdi1wcmVzZXQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfR19EVl9QUkVTRVQsIFZJRElPQ19TX0RWX1BSRVNFVDwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisKKyAgPHJlZm5hbWVkaXY+CisgICAgPHJlZm5hbWU+VklESU9DX0dfRFZfUFJFU0VUPC9yZWZuYW1lPgorICAgIDxyZWZuYW1lPlZJRElPQ19TX0RWX1BSRVNFVDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5RdWVyeSBvciBzZWxlY3QgdGhlIERWIHByZXNldCBvZiB0aGUgY3VycmVudCBpbnB1dCBvciBvdXRwdXQ8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+JnY0bDItZHYtcHJlc2V0OworKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19HX0RWX1BSRVNFVCwgVklESU9DX1NfRFZfUFJFU0VUPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+VG8gcXVlcnkgYW5kIHNlbGVjdCB0aGUgY3VycmVudCBEViBwcmVzZXQsIGFwcGxpY2F0aW9ucwordXNlIHRoZSA8Y29uc3RhbnQ+VklESU9DX0dfRFZfUFJFU0VUPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5WSURJT0NfU19EVl9QUkVTRVQ8L2NvbnN0YW50PgoraW9jdGxzIHdoaWNoIHRha2UgYSBwb2ludGVyIHRvIGEgJnY0bDItZHYtcHJlc2V0OyB0eXBlIGFzIGFyZ3VtZW50LgorQXBwbGljYXRpb25zIG11c3QgemVybyB0aGUgcmVzZXJ2ZWQgYXJyYXkgaW4gJnY0bDItZHYtcHJlc2V0Oy4KKzxjb25zdGFudD5WSURJT0NfR19EVl9QUkVTRVQ8L2NvbnN0YW50PiByZXR1cm5zIGEgZHYgcHJlc2V0IGluIHRoZSBmaWVsZAorPHN0cnVjdGZpZWxkPnByZXNldDwvc3RydWN0ZmllbGQ+IG9mICZ2NGwyLWR2LXByZXNldDsuPC9wYXJhPgorCisgICAgPHBhcmE+PGNvbnN0YW50PlZJRElPQ19TX0RWX1BSRVNFVDwvY29uc3RhbnQ+IGFjY2VwdHMgYSBwb2ludGVyIHRvIGEgJnY0bDItZHYtcHJlc2V0OwordGhhdCBoYXMgdGhlIHByZXNldCB2YWx1ZSB0byBiZSBzZXQuIEFwcGxpY2F0aW9ucyBtdXN0IHplcm8gdGhlIHJlc2VydmVkIGFycmF5IGluICZ2NGwyLWR2LXByZXNldDsuCitJZiB0aGUgcHJlc2V0IGlzIG5vdCBzdXBwb3J0ZWQsIGl0IHJldHVybnMgYW4gJkVJTlZBTDsgPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhpcyBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLCBvciB0aGUKKzxjb25zdGFudD5WSURJT0NfU19EVl9QUkVTRVQ8L2NvbnN0YW50Piw8Y29uc3RhbnQ+VklESU9DX1NfRFZfUFJFU0VUPC9jb25zdGFudD4gcGFyYW1ldGVyIHdhcyB1bnN1aXRhYmxlLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhlIGRldmljZSBpcyBidXN5IGFuZCB0aGVyZWZvcmUgY2FuIG5vdCBjaGFuZ2UgdGhlIHByZXNldC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLWR2LXByZXNldCI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZHZfcHJlc2V0PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cHJlc2V0PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+UHJlc2V0IHZhbHVlIHRvIHJlcHJlc2VudCB0aGUgZGlnaXRhbCB2aWRlbyB0aW1pbmdzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5yZXNlcnZlZFs0XTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlJlc2VydmVkIGZpZWxkcyBmb3IgZnV0dXJlIHVzZTwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1kdi10aW1pbmdzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZHYtdGltaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjMTk1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZHYtdGltaW5ncy54bWwKQEAgLTAsMCArMSwyMjQgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLWctZHYtdGltaW5ncyI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19HX0RWX1RJTUlOR1MsIFZJRElPQ19TX0RWX1RJTUlOR1M8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19HX0RWX1RJTUlOR1M8L3JlZm5hbWU+CisgICAgPHJlZm5hbWU+VklESU9DX1NfRFZfVElNSU5HUzwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5HZXQgb3Igc2V0IGN1c3RvbSBEViB0aW1pbmdzIGZvciBpbnB1dCBvciBvdXRwdXQ8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+JnY0bDItZHYtdGltaW5nczsKKyo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WSURJT0NfR19EVl9USU1JTkdTLCBWSURJT0NfU19EVl9USU1JTkdTPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+VG8gc2V0IGN1c3RvbSBEViB0aW1pbmdzIGZvciB0aGUgaW5wdXQgb3Igb3V0cHV0LCBhcHBsaWNhdGlvbnMgdXNlIHRoZQorPGNvbnN0YW50PlZJRElPQ19TX0RWX1RJTUlOR1M8L2NvbnN0YW50PiBpb2N0bCBhbmQgdG8gZ2V0IHRoZSBjdXJyZW50IGN1c3RvbSB0aW1pbmdzLAorYXBwbGljYXRpb25zIHVzZSB0aGUgPGNvbnN0YW50PlZJRElPQ19HX0RWX1RJTUlOR1M8L2NvbnN0YW50PiBpb2N0bC4gVGhlIGRldGFpbGVkIHRpbWluZworaW5mb3JtYXRpb24gaXMgZmlsbGVkIGluIHVzaW5nIHRoZSBzdHJ1Y3R1cmUgJnY0bDItZHYtdGltaW5nczsuIFRoZXNlIGlvY3RscyB0YWtlCithIHBvaW50ZXIgdG8gdGhlICZ2NGwyLWR2LXRpbWluZ3M7IHN0cnVjdHVyZSBhcyBhcmd1bWVudC4gSWYgdGhlIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQKK29yIHRoZSB0aW1pbmcgdmFsdWVzIGFyZSBub3QgY29ycmVjdCwgdGhlIGRyaXZlciByZXR1cm5zICZFSU5WQUw7LjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgJnJldHVybi12YWx1ZTsKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlCis8Y29uc3RhbnQ+VklESU9DX1NfRFZfVElNSU5HUzwvY29uc3RhbnQ+IHBhcmFtZXRlciB3YXMgdW5zdWl0YWJsZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkZXZpY2UgaXMgYnVzeSBhbmQgdGhlcmVmb3JlIGNhbiBub3QgY2hhbmdlIHRoZSB0aW1pbmdzLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItYnQtdGltaW5ncyI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfYnRfdGltaW5nczwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPndpZHRoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+V2lkdGggb2YgdGhlIGFjdGl2ZSB2aWRlbyBpbiBwaXhlbHM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhlaWdodDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkhlaWdodCBvZiB0aGUgYWN0aXZlIHZpZGVvIGluIGxpbmVzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5pbnRlcmxhY2VkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+UHJvZ3Jlc3NpdmUgKDApIG9yIGludGVybGFjZWQgKDEpPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5wb2xhcml0aWVzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBpcyBhIGJpdCBtYXNrIHRoYXQgZGVmaW5lcyBwb2xhcml0aWVzIG9mIHN5bmMgc2lnbmFscy4KK2JpdCAwIChWNEwyX0RWX1ZTWU5DX1BPU19QT0wpIGlzIGZvciB2ZXJ0aWNhbCBzeW5jIHBvbGFyaXR5IGFuZCBiaXQgMSAoVjRMMl9EVl9IU1lOQ19QT1NfUE9MKSBpcyBmb3IgaG9yaXpvbnRhbCBzeW5jIHBvbGFyaXR5LiBJZiB0aGUgYml0IGlzIHNldAorKDEpIGl0IGlzIHBvc2l0aXZlIHBvbGFyaXR5IGFuZCBpZiBpcyBjbGVhcmVkICgwKSwgaXQgaXMgbmVnYXRpdmUgcG9sYXJpdHkuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTY0PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5waXhlbGNsb2NrPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+UGl4ZWwgY2xvY2sgaW4gSHouIEV4LiA3NC4yNU1Iei0+NzQyNTAwMDA8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhmcm9udHBvcmNoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SG9yaXpvbnRhbCBmcm9udCBwb3JjaCBpbiBwaXhlbHM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhzeW5jPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+SG9yaXpvbnRhbCBzeW5jIGxlbmd0aCBpbiBwaXhlbHM8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmhiYWNrcG9yY2g8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5Ib3Jpem9udGFsIGJhY2sgcG9yY2ggaW4gcGl4ZWxzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52ZnJvbnRwb3JjaDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIGZyb250IHBvcmNoIGluIGxpbmVzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52c3luYzwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIHN5bmMgbGVuZ3RoIGluIGxpbmVzPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52YmFja3BvcmNoPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VmVydGljYWwgYmFjayBwb3JjaCBpbiBsaW5lczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aWxfdmZyb250cG9yY2g8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5WZXJ0aWNhbCBmcm9udCBwb3JjaCBpbiBsaW5lcyBmb3IgYm90dG9tIGZpZWxkIG9mIGludGVybGFjZWQgZmllbGQgZm9ybWF0czwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aWxfdnN5bmM8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5WZXJ0aWNhbCBzeW5jIGxlbmd0aCBpbiBsaW5lcyBmb3IgYm90dG9tIGZpZWxkIG9mIGludGVybGFjZWQgZmllbGQgZm9ybWF0czwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aWxfdmJhY2twb3JjaDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlZlcnRpY2FsIGJhY2sgcG9yY2ggaW4gbGluZXMgZm9yIGJvdHRvbSBmaWVsZCBvZiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHM8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItZHYtdGltaW5ncyI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZHZfdGltaW5nczwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VHlwZSBvZiBEViB0aW1pbmdzIGFzIGxpc3RlZCBpbiA8eHJlZiBsaW5rZW5kPSJkdi10aW1pbmctdHlwZXMiLz4uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PnVuaW9uPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD48L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PiZ2NGwyLWJ0LXRpbWluZ3M7PC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5idDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRpbWluZ3MgZGVmaW5lZCBieSBCVC42NTYvMTEyMCBzcGVjaWZpY2F0aW9uczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMzJdPC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iZHYtdGltaW5nLXR5cGVzIj4KKyAgICAgIDx0aXRsZT5EViBUaW1pbmcgdHlwZXM8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+VGltaW5nIHR5cGU8L2VudHJ5PgorCSAgICA8ZW50cnk+dmFsdWU8L2VudHJ5PgorCSAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+VjRMMl9EVl9CVF82NTZfMTEyMDwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJULjY1Ni8xMTIwIHRpbWluZ3M8L2VudHJ5PgorCSAgPC9yb3c+CisJPC90Ym9keT4KKyAgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXN0ZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXN0ZC54bWwKaW5kZXggYjZmNWQyNi4uOTEyZjg1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zdGQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbApAQCAtODYsNiArODYsMTIgQEAKIDxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PiBwYXJhbWV0ZXIgd2FzIHVuc3VpdGFibGUuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5UaGUgZGV2aWNlIGlzIGJ1c3kgYW5kIHRoZXJlZm9yZSBjYW4gbm90IGNoYW5nZSB0aGUgc3RhbmRhcmQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeS1kdi1wcmVzZXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTRmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeS1kdi1wcmVzZXQueG1sCkBAIC0wLDAgKzEsODUgQEAKKzxyZWZlbnRyeSBpZD0idmlkaW9jLXF1ZXJ5LWR2LXByZXNldCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPmlvY3RsIFZJRElPQ19RVUVSWV9EVl9QUkVTRVQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19RVUVSWV9EVl9QUkVTRVQ8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+U2Vuc2UgdGhlIERWIHByZXNldCByZWNlaXZlZCBieSB0aGUgY3VycmVudAoraW5wdXQ8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+JnY0bDItZHYtcHJlc2V0OyAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlZJRElPQ19RVUVSWV9EVl9QUkVTRVQ8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgPC9yZWZzZWN0MT4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoZSBoYXJkd2FyZSBtYXkgYmUgYWJsZSB0byBkZXRlY3QgdGhlIGN1cnJlbnQgRFYgcHJlc2V0CithdXRvbWF0aWNhbGx5LCBzaW1pbGFyIHRvIHNlbnNpbmcgdGhlIHZpZGVvIHN0YW5kYXJkLiBUbyBkbyBzbywgYXBwbGljYXRpb25zCitjYWxsIDxjb25zdGFudD4gVklESU9DX1FVRVJZX0RWX1BSRVNFVDwvY29uc3RhbnQ+IHdpdGggYSBwb2ludGVyIHRvIGEKKyZ2NGwyLWR2LXByZXNldDsgdHlwZS4gT25jZSB0aGUgaGFyZHdhcmUgZGV0ZWN0cyBhIHByZXNldCwgdGhhdCBwcmVzZXQgaXMKK3JldHVybmVkIGluIHRoZSBwcmVzZXQgZmllbGQgb2YgJnY0bDItZHYtcHJlc2V0Oy4gV2hlbiBkZXRlY3Rpb24gaXMgbm90Citwb3NzaWJsZSBvciBmYWlscywgdGhlIHZhbHVlIFY0TDJfRFZfSU5WQUxJRCBpcyByZXR1cm5lZC48L3BhcmE+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VGhpcyBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkZXZpY2UgaXMgYnVzeSBhbmQgdGhlcmVmb3JlIGNhbiBub3Qgc2Vuc2UgdGhlIHByZXNldDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgorCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeXN0ZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeXN0ZC54bWwKaW5kZXggYjVhN2ZmOS4uMWE5ZTYwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlzdGQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbApAQCAtNzAsNiArNzAsMTIgQEAKIAkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+CiAJPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlRoZSBkZXZpY2UgaXMgYnVzeSBhbmQgdGhlcmVmb3JlIGNhbiBub3QgZGV0ZWN0IHRoZSBzdGFuZGFyZDwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAppbmRleCA3OGE5MTY4Li4xMDUzYTU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAorKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdApAQCAtMTUsNyArMTUsNyBAQAogMjogUGFzc2VzIGFsbG5vY29uZmlnLCBhbGxtb2Rjb25maWcKIAogMzogQnVpbGRzIG9uIG11bHRpcGxlIENQVSBhcmNoaXRlY3R1cmVzIGJ5IHVzaW5nIGxvY2FsIGNyb3NzLWNvbXBpbGUgdG9vbHMKLSAgIG9yIHNvbWV0aGluZyBsaWtlIFBMTSBhdCBPU0RMLgorICAgb3Igc29tZSBvdGhlciBidWlsZCBmYXJtLgogCiA0OiBwcGM2NCBpcyBhIGdvb2QgYXJjaGl0ZWN0dXJlIGZvciBjcm9zcy1jb21waWxhdGlvbiBjaGVja2luZyBiZWNhdXNlIGl0CiAgICB0ZW5kcyB0byB1c2UgYHVuc2lnbmVkIGxvbmcnIGZvciA2NC1iaXQgcXVhbnRpdGllcy4KQEAgLTg4LDMgKzg4LDYgQEAKIAogMjQ6IEFsbCBtZW1vcnkgYmFycmllcnMge2UuZy4sIGJhcnJpZXIoKSwgcm1iKCksIHdtYigpfSBuZWVkIGEgY29tbWVudCBpbiB0aGUKICAgICBzb3VyY2UgY29kZSB0aGF0IGV4cGxhaW5zIHRoZSBsb2dpYyBvZiB3aGF0IHRoZXkgYXJlIGRvaW5nIGFuZCB3aHkuCisKKzI1OiBJZiBhbnkgaW9jdGwncyBhcmUgYWRkZWQgYnkgdGhlIHBhdGNoLCB0aGVuIGFsc28gdXBkYXRlCisgICAgRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hY3BpL21ldGhvZC1jdXN0b21pemluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2FjcGkvbWV0aG9kLWN1c3RvbWl6aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjI4Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hY3BpL21ldGhvZC1jdXN0b21pemluZy50eHQKQEAgLTAsMCArMSw2NiBAQAorTGludXggQUNQSSBDdXN0b20gQ29udHJvbCBNZXRob2QgSG93IFRvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV3JpdHRlbiBieSBaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+CisKKworTGludXggc3VwcG9ydHMgY3VzdG9taXppbmcgQUNQSSBjb250cm9sIG1ldGhvZHMgYXQgcnVudGltZS4KKworVXNlcnMgY2FuIHVzZSB0aGlzIHRvCisxLiBvdmVycmlkZSBhbiBleGlzdGluZyBtZXRob2Qgd2hpY2ggbWF5IG5vdCB3b3JrIGNvcnJlY3RseSwKKyAgIG9yIGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKzIuIGluc2VydCBhIGNvbXBsZXRlbHkgbmV3IG1ldGhvZCBpbiBvcmRlciB0byBjcmVhdGUgYSBtaXNzaW5nCisgICBtZXRob2Qgc3VjaCBhcyBfT0ZGLCBfT04sIF9TVEEsIF9JTkksIGV0Yy4KK0ZvciB0aGVzZSBjYXNlcywgaXQgaXMgZmFyIHNpbXBsZXIgdG8gZHluYW1pY2FsbHkgaW5zdGFsbCBhIHNpbmdsZQorY29udHJvbCBtZXRob2QgcmF0aGVyIHRoYW4gb3ZlcnJpZGUgdGhlIGVudGlyZSBEU0RULCBiZWNhdXNlIGtlcm5lbAorcmVidWlsZC9yZWJvb3QgaXMgbm90IG5lZWRlZCBhbmQgdGVzdCByZXN1bHQgY2FuIGJlIGdvdCBpbiBtaW51dGVzLgorCitOb3RlOiBPbmx5IEFDUEkgTUVUSE9EIGNhbiBiZSBvdmVycmlkZGVuLCBhbnkgb3RoZXIgb2JqZWN0IHR5cGVzIGxpa2UKKyAgICAgICJEZXZpY2UiLCAiT3BlcmF0aW9uUmVnaW9uIiwgYXJlIG5vdCByZWNvZ25pemVkLgorTm90ZTogVGhlIHNhbWUgQUNQSSBjb250cm9sIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgbWFueSB0aW1lcywKKyAgICAgIGFuZCBpdCdzIGFsd2F5cyB0aGUgbGF0ZXN0IG9uZSB0aGF0IHVzZWQgYnkgTGludXgva2VybmVsLgorCisxLiBvdmVycmlkZSBhbiBleGlzdGluZyBtZXRob2QKKyAgIGEpIGdldCB0aGUgQUNQSSB0YWJsZSB2aWEgQUNQSSBzeXNmcyBJL0YuIGUuZy4gdG8gZ2V0IHRoZSBEU0RULAorICAgICAganVzdCBydW4gImNhdCAvc3lzL2Zpcm13YXJlL2FjcGkvdGFibGVzL0RTRFQgPiAvdG1wL2RzZHQuZGF0IgorICAgYikgZGlzYXNzZW1ibGUgdGhlIHRhYmxlIGJ5IHJ1bm5pbmcgImlhc2wgLWQgZHNkdC5kYXQiLgorICAgYykgcmV3cml0ZSB0aGUgQVNMIGNvZGUgb2YgdGhlIG1ldGhvZCBhbmQgc2F2ZSBpdCBpbiBhIG5ldyBmaWxlLAorICAgZCkgcGFja2FnZSB0aGUgbmV3IGZpbGUgKHBzci5hc2wpIHRvIGFuIEFDUEkgdGFibGUgZm9ybWF0LgorICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgY3VzdG9taXplZCBcX1NCLl9BQy5fUFNSIG1ldGhvZCwKKworICAgICAgRGVmaW5pdGlvbkJsb2NrICgiIiwgIlNTRFQiLCAxLCAiIiwgIiIsIDB4MjAwODA3MTUpCisgICAgICB7CisJRXh0ZXJuYWwgKEFDT04pCisKKwlNZXRob2QgKFxfU0JfLkFDLl9QU1IsIDAsIE5vdFNlcmlhbGl6ZWQpCisJeworCQlTdG9yZSAoIkluIEFDIF9QU1IiLCBEZWJ1ZykKKwkJUmV0dXJuIChBQ09OKQorCX0KKyAgICAgIH0KKyAgICAgIE5vdGUgdGhhdCB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbWV0aG9kIGluIEFDUEkgbmFtZXNwYWNlCisgICAgICBzaG91bGQgYmUgdXNlZC4KKyAgICAgIEFuZCByZW1lbWJlciB0byB1c2UgIkV4dGVybmFsIiB0byBkZWNsYXJlIGV4dGVybmFsIG9iamVjdHMuCisgICBlKSBhc3NlbWJsZSB0aGUgZmlsZSB0byBnZW5lcmF0ZSB0aGUgQU1MIGNvZGUgb2YgdGhlIG1ldGhvZC4KKyAgICAgIGUuZy4gImlhc2wgcHNyLmFzbCIgKHBzci5hbWwgaXMgZ2VuZXJhdGVkIGFzIGEgcmVzdWx0KQorICAgZikgbW91bnQgZGVidWdmcyBieSAibW91bnQgLXQgZGVidWdmcyBub25lIC9zeXMva2VybmVsL2RlYnVnIgorICAgZykgb3ZlcnJpZGUgdGhlIG9sZCBtZXRob2QgdmlhIHRoZSBkZWJ1Z2ZzIGJ5IHJ1bm5pbmcKKyAgICAgICJjYXQgL3RtcC9wc3IuYW1sID4gL3N5cy9rZXJuZWwvZGVidWcvYWNwaS9jdXN0b21fbWV0aG9kIgorCisyLiBpbnNlcnQgYSBuZXcgbWV0aG9kCisgICBUaGlzIGlzIGVhc2llciB0aGFuIG92ZXJyaWRpbmcgYW4gZXhpc3RpbmcgbWV0aG9kLgorICAgV2UganVzdCBuZWVkIHRvIGNyZWF0ZSB0aGUgQVNMIGNvZGUgb2YgdGhlIG1ldGhvZCB3ZSB3YW50IHRvCisgICBpbnNlcnQgYW5kIHRoZW4gZm9sbG93IHRoZSBzdGVwIGMpIH4gZykgaW4gc2VjdGlvbiAxLgorCiszLiB1bmRvIHlvdXIgY2hhbmdlcworICAgVGhlICJ1bmRvIiBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgYSBuZXcgaW5zZXJ0ZWQgbWV0aG9kCisgICByaWdodCBub3csIGkuZS4gd2UgY2FuIG5vdCByZW1vdmUgYSBtZXRob2QgY3VycmVudGx5LgorICAgRm9yIGFuIG92ZXJyaWRlZCBtZXRob2QsIGluIG9yZGVyIHRvIHVuZG8geW91ciBjaGFuZ2VzLCBwbGVhc2UKKyAgIHNhdmUgYSBjb3B5IG9mIHRoZSBtZXRob2Qgb3JpZ2luYWwgQVNMIGNvZGUgaW4gc3RlcCBjKSBzZWN0aW9uIDEsCisgICBhbmQgcmVkbyBzdGVwIGMpIH4gZykgdG8gb3ZlcnJpZGUgdGhlIG1ldGhvZCB3aXRoIHRoZSBvcmlnaW5hbCBvbmUuCisKKworTm90ZTogV2UgY2FuIHVzZSBhIGtlcm5lbCB3aXRoIG11bHRpcGxlIGN1c3RvbSBBQ1BJIG1ldGhvZCBydW5uaW5nLAorICAgICAgQnV0IGVhY2ggaW5kaXZpZHVhbCB3cml0ZSB0byBkZWJ1Z2ZzIGNhbiBpbXBsZW1lbnQgYSBTSU5HTEUKKyAgICAgIG1ldGhvZCBvdmVycmlkZS4gaS5lLiBpZiB3ZSB3YW50IHRvIGluc2VydC9vdmVycmlkZSBtdWx0aXBsZQorICAgICAgQUNQSSBtZXRob2RzLCB3ZSBuZWVkIHRvIHJlZG8gc3RlcCBjKSB+IGcpIGZvciBtdWx0aXBsZSB0aW1lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluLzAwLUlOREVYCmluZGV4IGQ2ODQwYTkuLmMzNGUxMjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi8wMC1JTkRFWApAQCAtMSw5ICsxLDYgQEAKIDAwLUlOREVYCiAJLSBUaGlzIGZpbGUKIAotY2FjaGUtbG9jay50eHQKLQktIEhPV1RPIGZvciBibGFja2ZpbiBjYWNoZSBsb2NraW5nLgotCiBjYWNoZWZlYXR1cmVzLnR4dAogCS0gU3VwcG9ydGVkIGNhY2hlIGZlYXR1cmVzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzNkYmIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK29iai1tIDo9IGdwdGltZXJzLWV4YW1wbGUubworCithbGw6IG1vZHVsZXMKKworbW9kdWxlcyBjbGVhbjoKKwkkKE1BS0UpIC1DIC4uLy4uIFNVQkRJUlM9JChQV0QpICRACmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2NhY2hlLWxvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9jYWNoZS1sb2NrLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiYTFlNi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2NhY2hlLWxvY2sudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIEZpbGU6ICAgICAgICAgRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9jYWNoZS1sb2NrLnR4dAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6Ci0gKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgotICoKLSAqIFJldjogICAgICAgICAgJElkOiBjYWNoZS1sb2NrLnR4dCAyMzg0IDIwMDYtMTEtMDEgMDQ6MTI6NDNaIG1hZ2ljeWFuZyAkCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICovCi0KLUhvdyB0byBsb2NrIHlvdXIgY29kZSBpbiBjYWNoZSBpbiB1Q2xpbnV4L2JsYWNrZmluCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVyZSBhcmUgb25seSBhIGZldyBzdGVwcyByZXF1aXJlZCB0byBsb2NrIHlvdXIgY29kZSBpbnRvIHRoZSBjYWNoZS4KLUN1cnJlbnRseSB5b3UgY2FuIGxvY2sgdGhlIGNvZGUgYnkgV2F5LgotCi1CZWxvdyBhcmUgdGhlIGludGVyZmFjZSBwcm92aWRlZCBmb3IgbG9ja2luZyB0aGUgY2FjaGUuCi0KLQotMS4gY2FjaGVfZ3JhYl9sb2NrKGludCBXYXlzKTsKLQotVGhpcyBmdW5jdGlvbiBncmFiIHRoZSBsb2NrIGZvciBsb2NraW5nIHlvdXIgY29kZSBpbnRvIHRoZSBjYWNoZSBzcGVjaWZpZWQKLWJ5IFdheXMuCi0KLQotMi4gY2FjaGVfbG9jayhpbnQgV2F5cyk7Ci0KLVRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB5b3VyIGNyaXRpY2FsIGNvZGUgaGFzIGJlZW4gZXhlY3V0ZWQuCi1PbmNlIHRoZSBjcml0aWNhbCBjb2RlIGV4aXRzLCB0aGUgY29kZSBpcyBub3cgbG9hZGVkIGludG8gdGhlIGNhY2hlLiBUaGlzCi1mdW5jdGlvbiBsb2NrcyB0aGUgY29kZSBpbnRvIHRoZSBjYWNoZS4KLQotCi1TbywgdGhlIGV4YW1wbGUgc2VxdWVuY2Ugd2lsbCBiZToKLQotCWNhY2hlX2dyYWJfbG9jayhXQVkwX0wpOwkvKiBHcmFiIHRoZSBsb2NrICovCi0KLQljcml0aWNhbF9jb2RlKCk7CQkvKiBFeGVjdXRlIHRoZSBjb2RlIG9mIGludGVyZXN0ICovCi0KLQljYWNoZV9sb2NrKFdBWTBfTCk7CQkvKiBMb2NrIHRoZSBjYWNoZSAqLwotCi1XaGVyZSBXQVkwX0wgc2lnbmlmaWVzIFdBWTAgbG9ja2luZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vY2FjaGVmZWF0dXJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2NhY2hlZmVhdHVyZXMudHh0CmluZGV4IDBmYmVjMjMuLjc1ZGU1MWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vY2FjaGVmZWF0dXJlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9jYWNoZWZlYXR1cmVzLnR4dApAQCAtNDEsMTYgKzQxLDYgQEAKIAkJaWNwbGJfZmx1c2goKTsKIAkJZGNwbGJfZmx1c2goKTsKIAotCS0gTG9ja2luZyB0aGUgY2FjaGUuCi0KLQkJY2FjaGVfZ3JhYl9sb2NrKCk7Ci0JCWNhY2hlX2xvY2soKTsKLQotCVBsZWFzZSByZWZlciBsaW51eC0yLjYueC9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2NhY2hlLWxvY2sudHh0IGZvciBob3cgdG8KLQlsb2NrIHRoZSBjYWNoZS4KLQotCUxvY2tpbmcgdGhlIGNhY2hlIGlzIG9wdGlvbmFsIGZlYXR1cmUuCi0KIAktIE1pc2NlbGxhbmVvdXMgY2FjaGUgZnVuY3Rpb25zLgogCiAJCWZsdXNoX2NhY2hlX2FsbCgpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9ncHRpbWVycy1leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2dwdGltZXJzLWV4YW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWJkNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9ncHRpbWVycy1leGFtcGxlLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIFNpbXBsZSBncHRpbWVycyBleGFtcGxlCisgKglodHRwOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1saW51eC1rZXJuZWw6ZHJpdmVyczpncHRpbWVycworICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vZ3B0aW1lcnMuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorCisvKiAuLi4gcmFuZG9tIGRyaXZlciBpbmNsdWRlcyAuLi4gKi8KKworI2RlZmluZSBEUklWRVJfTkFNRSAiZ3B0aW1lcl9leGFtcGxlIgorCitzdHJ1Y3QgZ3B0aW1lcl9kYXRhIHsKKwl1aW50MzJfdCBwZXJpb2QsIHdpZHRoOworfTsKK3N0YXRpYyBzdHJ1Y3QgZ3B0aW1lcl9kYXRhIGRhdGE7CisKKy8qIC4uLiByYW5kb20gZHJpdmVyIHN0YXRlIC4uLiAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3B0aW1lcl9leGFtcGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGdwdGltZXJfZGF0YSAqZGF0YSA9IGRldl9pZDsKKworCS8qIG1ha2Ugc3VyZSBpdCB3YXMgb3VyIHRpbWVyIHdoaWNoIGNhdXNlZCB0aGUgaW50ZXJydXB0ICovCisJaWYgKCFnZXRfZ3B0aW1lcl9pbnRyKFRJTUVSNV9pZCkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIHJlYWQgdGhlIHdpZHRoL3BlcmlvZCB2YWx1ZXMgdGhhdCB3ZXJlIGNhcHR1cmVkIGZvciB0aGUgd2F2ZWZvcm0gKi8KKwlkYXRhLT53aWR0aCA9IGdldF9ncHRpbWVyX3B3aWR0aChUSU1FUjVfaWQpOworCWRhdGEtPnBlcmlvZCA9IGdldF9ncHRpbWVyX3BlcmlvZChUSU1FUjVfaWQpOworCisJLyogYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLworCWNsZWFyX2dwdGltZXJfaW50cihUSU1FUjVfaWQpOworCisJLyogdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHdlIHRvb2sgY2FyZSBvZiB0aGluZ3MgKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIC4uLiByYW5kb20gZHJpdmVyIGNvZGUgLi4uICovCisKK3N0YXRpYyBpbnQgX19pbml0IGdwdGltZXJfZXhhbXBsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCS8qIGdyYWIgdGhlIHBlcmlwaGVyYWwgcGlucyAqLworCXJldCA9IHBlcmlwaGVyYWxfcmVxdWVzdChQX1RNUjUsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX05PVElDRSBEUklWRVJfTkFNRSAiOiBwZXJpcGhlcmFsIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBncmFiIHRoZSBJUlEgZm9yIHRoZSB0aW1lciAqLworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9USU1FUjUsIGdwdGltZXJfZXhhbXBsZV9pcnEsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgJmRhdGEpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFIERSSVZFUl9OQU1FICI6IElSUSByZXF1ZXN0IGZhaWxlZFxuIik7CisJCXBlcmlwaGVyYWxfZnJlZShQX1RNUjUpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHNldHVwIHRoZSB0aW1lciBhbmQgZW5hYmxlIGl0ICovCisJc2V0X2dwdGltZXJfY29uZmlnKFRJTUVSNV9pZCwgV0RUSF9DQVAgfCBQVUxTRV9ISSB8IFBFUklPRF9DTlQgfCBJUlFfRU5BKTsKKwllbmFibGVfZ3B0aW1lcnMoVElNRVI1Yml0KTsKKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZ3B0aW1lcl9leGFtcGxlX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3B0aW1lcl9leGFtcGxlX2V4aXQodm9pZCkKK3sKKwlkaXNhYmxlX2dwdGltZXJzKFRJTUVSNWJpdCk7CisJZnJlZV9pcnEoSVJRX1RJTUVSNSwgJmRhdGEpOworCXBlcmlwaGVyYWxfZnJlZShQX1RNUjUpOworfQorbW9kdWxlX2V4aXQoZ3B0aW1lcl9leGFtcGxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiQlNEIik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CmluZGV4IDlkNjIwYzEuLmE5OWQ3MDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CkBAIC00OSw2ICs0OSwxMiBAQAogYWRkaXRpb25hbF9jcHVzPW4gKCopCVVzZSB0aGlzIHRvIGxpbWl0IGhvdHBsdWdnYWJsZSBjcHVzLiBUaGlzIG9wdGlvbiBzZXRzCiAgIAkJCWNwdV9wb3NzaWJsZV9tYXAgPSBjcHVfcHJlc2VudF9tYXAgKyBhZGRpdGlvbmFsX2NwdXMKIAorY2VkZV9vZmZsaW5lPXsib2ZmIiwib24ifSAgVXNlIHRoaXMgb3B0aW9uIHRvIGRpc2FibGUvZW5hYmxlIHB1dHRpbmcgb2ZmbGluZWQKKwkJICAgICAgICAgICAgcHJvY2Vzc29ycyB0byBhbiBleHRlbmRlZCBIX0NFREUgc3RhdGUgb24KKwkJCSAgICBzdXBwb3J0ZWQgcHNlcmllcyBwbGF0Zm9ybXMuCisJCQkgICAgSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsCisJCQkgICAgY2VkZV9vZmZsaW5lIGlzIHNldCB0byAib24iLgorCiAoKikgT3B0aW9uIHZhbGlkIG9ubHkgZm9yIGZvbGxvd2luZyBhcmNoaXRlY3R1cmVzCiAtIGlhNjQKIApAQCAtMzA5LDQxICszMTUsMjYgQEAKIAogUTogSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGEgcGFydGljdWxhciBjcHUgaXMgbm90IHJlbW92ZWQgd2hlbiB0aGVyZSBpcyBzb21lCiAgICB3b3JrIHNwZWNpZmljIHRvIHRoaXMgY3B1IGlzIGluIHByb2dyZXNzLgotQTogRmlyc3Qgc3dpdGNoIHRoZSBjdXJyZW50IHRocmVhZCBjb250ZXh0IHRvIHByZWZlcnJlZCBjcHUKK0E6IFRoZXJlIGFyZSB0d28gd2F5cy4gIElmIHlvdXIgY29kZSBjYW4gYmUgcnVuIGluIGludGVycnVwdCBjb250ZXh0LCB1c2UKKyAgIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpLCBvdGhlcndpc2UgdXNlIHdvcmtfb25fY3B1KCkuICBOb3RlIHRoYXQKKyAgIHdvcmtfb25fY3B1KCkgaXMgc2xvdywgYW5kIGNhbiBmYWlsIGR1ZSB0byBvdXQgb2YgbWVtb3J5OgogCiAJaW50IG15X2Z1bmNfb25fY3B1KGludCBjcHUpCiAJewotCQljcHVtYXNrX3Qgc2F2ZWRfbWFzaywgbmV3X21hc2sgPSBDUFVfTUFTS19OT05FOwotCQlpbnQgY3Vycl9jcHUsIGVyciA9IDA7Ci0KLQkJc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQkJY3B1X3NldChjcHUsIG5ld19tYXNrKTsKLQkJZXJyID0gc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBuZXdfbWFzayk7Ci0KLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJLyoKLQkJICogSWYgd2UgZ290IHNjaGVkdWxlZCBvdXQganVzdCBhZnRlciB0aGUgcmV0dXJuIGZyb20KLQkJICogc2V0X2NwdXNfYWxsb3dlZCgpIGJlZm9yZSBydW5uaW5nIHRoZSB3b3JrLCB0aGlzIGVuc3VyZXMKLQkJICogd2Ugc3RheSBsb2NrZWQuCi0JCSAqLwotCQljdXJyX2NwdSA9IGdldF9jcHUoKTsKLQotCQlpZiAoY3Vycl9jcHUgIT0gY3B1KSB7Ci0JCQllcnIgPSAtRUFHQUlOOwotCQkJZ290byByZXQ7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogRG8gd29yayA6IEJ1dCBjYW50IHNsZWVwLCBzaW5jZSBnZXRfY3B1KCkgZGlzYWJsZXMgcHJlZW1wdAotCQkJICovCi0JCX0KLQkJcmV0OgotCQkJcHV0X2NwdSgpOwotCQkJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBzYXZlZF9tYXNrKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQorCQlpbnQgZXJyOworCQlnZXRfb25saW5lX2NwdXMoKTsKKwkJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisjaWYgTkVFRFNfQkxPQ0tJTkcKKwkJCWVyciA9IHdvcmtfb25fY3B1KGNwdSwgX19teV9mdW5jX29uX2NwdSwgTlVMTCk7CisjZWxzZQorCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19teV9mdW5jX29uX2NwdSwgJmVyciwKKwkJCQkJCSB0cnVlKTsKKyNlbmRpZgorCQlwdXRfb25saW5lX2NwdXMoKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIFE6IEhvdyBkbyB3ZSBkZXRlcm1pbmUgaG93IG1hbnkgQ1BVcyBhcmUgYXZhaWxhYmxlIGZvciBob3RwbHVnLgogQTogVGhlcmUgaXMgbm8gY2xlYXIgc3BlYyBkZWZpbmVkIHdheSBmcm9tIEFDUEkgdGhhdCBjYW4gZ2l2ZSB1cyB0aGF0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc25hcHNob3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3NuYXBzaG90LnR4dAppbmRleCBhNTAwOWM4Li5lM2E3N2IyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc25hcHNob3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9zbmFwc2hvdC50eHQKQEAgLTgsMTMgKzgsMTkgQEAKIG9yaWdpbmFsIGNvbnRlbnQ7CiAqKSBUbyBjcmVhdGUgZGV2aWNlICJmb3JrcyIsIGkuZS4gbXVsdGlwbGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZQogc2FtZSBkYXRhIHN0cmVhbS4KKyopIFRvIG1lcmdlIGEgc25hcHNob3Qgb2YgYSBibG9jayBkZXZpY2UgYmFjayBpbnRvIHRoZSBzbmFwc2hvdCdzIG9yaWdpbgorZGV2aWNlLgorCitJbiB0aGUgZmlyc3QgdHdvIGNhc2VzLCBkbSBjb3BpZXMgb25seSB0aGUgY2h1bmtzIG9mIGRhdGEgdGhhdCBnZXQKK2NoYW5nZWQgYW5kIHVzZXMgYSBzZXBhcmF0ZSBjb3B5LW9uLXdyaXRlIChDT1cpIGJsb2NrIGRldmljZSBmb3IKK3N0b3JhZ2UuCisKK0ZvciBzbmFwc2hvdCBtZXJnZSB0aGUgY29udGVudHMgb2YgdGhlIENPVyBzdG9yYWdlIGFyZSBtZXJnZWQgYmFjayBpbnRvCit0aGUgb3JpZ2luIGRldmljZS4KIAogCi1JbiBib3RoIGNhc2VzLCBkbSBjb3BpZXMgb25seSB0aGUgY2h1bmtzIG9mIGRhdGEgdGhhdCBnZXQgY2hhbmdlZCBhbmQKLXVzZXMgYSBzZXBhcmF0ZSBjb3B5LW9uLXdyaXRlIChDT1cpIGJsb2NrIGRldmljZSBmb3Igc3RvcmFnZS4KLQotCi1UaGVyZSBhcmUgdHdvIGRtIHRhcmdldHMgYXZhaWxhYmxlOiBzbmFwc2hvdCBhbmQgc25hcHNob3Qtb3JpZ2luLgorVGhlcmUgYXJlIHRocmVlIGRtIHRhcmdldHMgYXZhaWxhYmxlOgorc25hcHNob3QsIHNuYXBzaG90LW9yaWdpbiwgYW5kIHNuYXBzaG90LW1lcmdlLgogCiAqKSBzbmFwc2hvdC1vcmlnaW4gPG9yaWdpbj4KIApAQCAtNDAsOCArNDYsMjUgQEAKIHNhdmVkIG9uIGRpc2sgLSB0aGV5IGNhbiBiZSBrZXB0IGluIG1lbW9yeSBieSB0aGUga2VybmVsLgogCiAKLUhvdyB0aGlzIGlzIHVzZWQgYnkgTFZNMgotPT09PT09PT09PT09PT09PT09PT09PT09CisqIHNuYXBzaG90LW1lcmdlIDxvcmlnaW4+IDxDT1cgZGV2aWNlPiA8cGVyc2lzdGVudD4gPGNodW5rc2l6ZT4KKwordGFrZXMgdGhlIHNhbWUgdGFibGUgYXJndW1lbnRzIGFzIHRoZSBzbmFwc2hvdCB0YXJnZXQgZXhjZXB0IGl0IG9ubHkKK3dvcmtzIHdpdGggcGVyc2lzdGVudCBzbmFwc2hvdHMuICBUaGlzIHRhcmdldCBhc3N1bWVzIHRoZSByb2xlIG9mIHRoZQorInNuYXBzaG90LW9yaWdpbiIgdGFyZ2V0IGFuZCBtdXN0IG5vdCBiZSBsb2FkZWQgaWYgdGhlICJzbmFwc2hvdC1vcmlnaW4iCitpcyBzdGlsbCBwcmVzZW50IGZvciA8b3JpZ2luPi4KKworQ3JlYXRlcyBhIG1lcmdpbmcgc25hcHNob3QgdGhhdCB0YWtlcyBjb250cm9sIG9mIHRoZSBjaGFuZ2VkIGNodW5rcworc3RvcmVkIGluIHRoZSA8Q09XIGRldmljZT4gb2YgYW4gZXhpc3Rpbmcgc25hcHNob3QsIHRocm91Z2ggYSBoYW5kb3ZlcgorcHJvY2VkdXJlLCBhbmQgbWVyZ2VzIHRoZXNlIGNodW5rcyBiYWNrIGludG8gdGhlIDxvcmlnaW4+LiAgT25jZSBtZXJnaW5nCitoYXMgc3RhcnRlZCAoaW4gdGhlIGJhY2tncm91bmQpIHRoZSA8b3JpZ2luPiBtYXkgYmUgb3BlbmVkIGFuZCB0aGUgbWVyZ2UKK3dpbGwgY29udGludWUgd2hpbGUgSS9PIGlzIGZsb3dpbmcgdG8gaXQuICBDaGFuZ2VzIHRvIHRoZSA8b3JpZ2luPiBhcmUKK2RlZmVycmVkIHVudGlsIHRoZSBtZXJnaW5nIHNuYXBzaG90J3MgY29ycmVzcG9uZGluZyBjaHVuayhzKSBoYXZlIGJlZW4KK21lcmdlZC4gIE9uY2UgbWVyZ2luZyBoYXMgc3RhcnRlZCB0aGUgc25hcHNob3QgZGV2aWNlLCBhc3NvY2lhdGVkIHdpdGgKK3RoZSAic25hcHNob3QiIHRhcmdldCwgd2lsbCByZXR1cm4gLUVJTyB3aGVuIGFjY2Vzc2VkLgorCisKK0hvdyBzbmFwc2hvdCBpcyB1c2VkIGJ5IExWTTIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFdoZW4geW91IGNyZWF0ZSB0aGUgZmlyc3QgTFZNMiBzbmFwc2hvdCBvZiBhIHZvbHVtZSwgZm91ciBkbSBkZXZpY2VzIGFyZSB1c2VkOgogCiAxKSBhIGRldmljZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBtYXBwaW5nIHRhYmxlIG9mIHRoZSBzb3VyY2Ugdm9sdW1lOwpAQCAtNzIsMyArOTUsMzAgQEAKIGJydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTMgMjkgYWdvIDE4OjE1IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLXNuYXAKIGJydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTAgMjkgYWdvIDE4OjE0IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLWJhc2UKIAorCitIb3cgc25hcHNob3QtbWVyZ2UgaXMgdXNlZCBieSBMVk0yCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBIG1lcmdpbmcgc25hcHNob3QgYXNzdW1lcyB0aGUgcm9sZSBvZiB0aGUgInNuYXBzaG90LW9yaWdpbiIgd2hpbGUKK21lcmdpbmcuICBBcyBzdWNoIHRoZSAic25hcHNob3Qtb3JpZ2luIiBpcyByZXBsYWNlZCB3aXRoCisic25hcHNob3QtbWVyZ2UiLiAgVGhlICItcmVhbCIgZGV2aWNlIGlzIG5vdCBjaGFuZ2VkIGFuZCB0aGUgIi1jb3ciCitkZXZpY2UgaXMgcmVuYW1lZCB0byA8b3JpZ2luIG5hbWU+LWNvdyB0byBhaWQgTFZNMidzIGNsZWFudXAgb2YgdGhlCittZXJnaW5nIHNuYXBzaG90IGFmdGVyIGl0IGNvbXBsZXRlcy4gIFRoZSAic25hcHNob3QiIHRoYXQgaGFuZHMgb3ZlciBpdHMKK0NPVyBkZXZpY2UgdG8gdGhlICJzbmFwc2hvdC1tZXJnZSIgaXMgZGVhY3RpdmF0ZWQgKHVubGVzcyB1c2luZyBsdmNoYW5nZQorLS1yZWZyZXNoKTsgYnV0IGlmIGl0IGlzIGxlZnQgYWN0aXZlIGl0IHdpbGwgc2ltcGx5IHJldHVybiBJL08gZXJyb3JzLgorCitBIHNuYXBzaG90IHdpbGwgbWVyZ2UgaW50byBpdHMgb3JpZ2luIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCitsdmNvbnZlcnQgLS1tZXJnZSB2b2x1bWVHcm91cC9zbmFwCisKK3dlJ2xsIG5vdyBoYXZlIHRoaXMgc2l0dWF0aW9uOgorCisjIGRtc2V0dXAgdGFibGV8Z3JlcCB2b2x1bWVHcm91cAorCit2b2x1bWVHcm91cC1iYXNlLXJlYWw6IDAgMjA5NzE1MiBsaW5lYXIgODoxOSAzODQKK3ZvbHVtZUdyb3VwLWJhc2UtY293OiAwIDIwNDgwMCBsaW5lYXIgODoxOSAyMDk3NTM2Cit2b2x1bWVHcm91cC1iYXNlOiAwIDIwOTcxNTIgc25hcHNob3QtbWVyZ2UgMjU0OjExIDI1NDoxMiBQIDE2CisKKyMgbHMgLWxMIC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLSoKK2Jydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTEgMjkgYWdvIDE4OjE1IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLWJhc2UtcmVhbAorYnJ3LS0tLS0tLSAgMSByb290IHJvb3QgMjU0LCAxMiAyOSBhZ28gMTg6MTYgL2Rldi9tYXBwZXIvdm9sdW1lR3JvdXAtYmFzZS1jb3cKK2Jydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTAgMjkgYWdvIDE4OjE2IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLWJhc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IGUxNTFiMmEuLjNhZDZhY2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtMTAzLDYgKzEwMyw3IEBACiBnZW4tZGV2bGlzdAogZ2VuX2NyYzMydGFibGUKIGdlbl9pbml0X2NwaW8KK2dlbmVyYXRlZAogZ2VuaGVhZGVycwogZ2Vua3N5bXMKICpfZ3JheTI1Ni5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dAppbmRleCA2MDEyMGZiLi5kMmNkNmZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKQEAgLTIyNiw1ICsyMjYsNSBAQAogVGhpcyBjYW4gdGhlbiBiZSB1c2VkIHRvIGFkZCBhbmQgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSB0aGUKIGRyaXZlcidzIGRpcmVjdG9yeSB1c2luZzoKIAotaW50IGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKLXZvaWQgZHJpdmVyX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOworaW50IGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK3ZvaWQgZHJpdmVyX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dAppbmRleCA2N2RiZjQ0Li5mM2UwNDZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dApAQCAtNyw3ICs3LDcgQEAKICAgICBWSUEgVW5pQ2hyb21lIEZhbWlseShDTEUyNjYsIFBNODAwIC8gQ040MDAgLyBDTjMwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIFA0TTgwMENFIC8gUDRNODAwUHJvIC8gQ043MDAgLyBWTjgwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIENYNzAwIC8gVlg3MDAsIEs4TTg5MCwgUDRNODkwLAotICAgICAgICAgICAgICAgICAgICAgICAgQ044OTYgLyBQNE05MDAsIFZYODAwKQorICAgICAgICAgICAgICAgICAgICAgICAgQ044OTYgLyBQNE05MDAsIFZYODAwLCBWWDg1NSkKIAogW0RyaXZlciBmZWF0dXJlc10KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTU0LDEzICsxNTQsNiBAQAogICAgICAgICAwIDogTm8gRHVhbCBFZGdlIFBhbmVsIChkZWZhdWx0KQogICAgICAgICAxIDogRHVhbCBFZGdlIFBhbmVsCiAKLSAgICB2aWFmYl92aWRlb19kZXY6Ci0gICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB2aWRlbyBvdXRwdXQgZGV2aWNlcyhDUlQsIERWSSwgTENEKSBmb3IKLSAgICAgICAgZHVvdmlldyBjYXNlLgotICAgICAgICBGb3IgZXhhbXBsZToKLSAgICAgICAgVG8gb3V0cHV0IHZpZGVvIG9uIERWSSwgd2Ugc2hvdWxkIHVzZToKLSAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX3ZpZGVvX2Rldj1EVkkuLi4KLQogICAgIHZpYWZiX2xjZF9wb3J0OgogICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgTENEIG91dHB1dCBwb3J0LAogICAgICAgICBhdmFpbGFibGUgdmFsdWVzIGFyZSAiRFZQMCIgIkRWUDEiICJERlBfSElHSExPVyIgIkRGUF9ISUdIIiAiREZQX0xPVyIuCkBAIC0xODEsOSArMTc0LDYgQEAKICAgICAgICBhbmQgYnBwLCBuZWVkIHRvIGNhbGwgVklBRkIgc3BlY2lmaWVkIGlvY3RsIGludGVyZmFjZSBWSUFGQl9TRVRfREVWSUNFCiAgICAgICAgaW5zdGVhZCBvZiBjYWxsaW5nIGNvbW1vbiBpb2N0bCBmdW5jdGlvbiBGQklPUFVUX1ZTQ1JFRU5JTkZPIHNpbmNlCiAgICAgICAgdmlhZmIgZG9lc24ndCBzdXBwb3J0IG11bHRpLWhlYWQgd2VsbCwgb3IgaXQgd2lsbCBjYXVzZSBzY3JlZW4gY3J1c2guCi0gICAgNC4gVlg4MDAgMkQgYWNjZWxlcmF0b3IgaGFzbid0IGJlZW4gc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyIHlldC4gV2hlbgotICAgICAgIHVzaW5nIGRyaXZlciBvbiBWWDgwMCwgdGhlIGRyaXZlciB3aWxsIGRpc2FibGUgdGhlIGFjY2VsZXJhdGlvbgotICAgICAgIGZ1bmN0aW9uIGFzIGRlZmF1bHQuCiAKIAogW0NvbmZpZ3VyZSB2aWFmYiB3aXRoICJmYnNldCIgdG9vbF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAyYTRkNzc5Li41YjVkYjA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC04OCwyNyArODgsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIC0gb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uCi1XaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCi0KLVdoeToJVGhlIG9sZCByZWd1bGF0b3J5IGluZnJhc3RydWN0dXJlIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgb25lCi0Jd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBzdGF0aWNhbGx5IGRlZmluZWQgcmVndWxhdG9yeSBkb21haW5zLiBXZSBkbwotCW5vdCB3YW50IHRvIGtlZXAgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiB0aGUga2VybmVsIGR1ZSB0byB0aGUKLQl0aGUgZHluYW1pYyBuYXR1cmUgb2YgcmVndWxhdG9yeSBsYXcgYW5kIGxvY2FsaXphdGlvbi4gV2Uga2VwdCBhcm91bmQKLQl0aGUgb2xkIHN0YXRpYyBkZWZpbml0aW9ucyBmb3IgdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBvZjoKLQotCQkqIFVTCi0JCSogSlAKLQkJKiBFVQotCi0JYW5kIHVzZWQgYnkgZGVmYXVsdCB0aGUgVVMgd2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgd2FzCi0Jc2V0LiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbiBvbmNlIHRoZSBzdGFuZGFyZCBMaW51eCBkZXNrdG9wIGNhdGNoZXMKLQl1cCB3aXRoIHRoZSBuZXcgdXNlcnNwYWNlIEFQSXMgd2UgaGF2ZSBpbXBsZW1lbnRlZC4KLQotV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CWRldi0+cG93ZXIucG93ZXJfc3RhdGUKIFdoZW46CUp1bHkgMjAwNwogV2h5OglCcm9rZW4gZGVzaWduIGZvciBydW50aW1lIGNvbnRyb2wgb3ZlciBkcml2ZXIgcG93ZXIgc3RhdGVzLCBjb25mdXNpbmcKQEAgLTI5MSwyMiArMjcwLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CXVzZWRhYyBpMzg2IGtlcm5lbCBwYXJhbWV0ZXIKLVdoZW46CTIuNi4yNwotV2h5OglyZXBsYWNlZCBieSBhbGxvd2RhYyBhbmQgbm8gZGFjIGNvbWJpbmF0aW9uCi1XaG86CUdsYXViZXIgQ29zdGEgPGdjb3N0YUByZWRoYXQuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hhdDogcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woKQotV2hlbjogT2N0b2JlciAyMDA5Ci1XaHk6ICBUaGUgJXBGIHZzcHJpbnRmIGZvcm1hdCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGluIGEKLSAgICAgIHNpbXBsZXIgd2F5LiAgcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woKSBpcyBkZXByZWNhdGVkIGJ1dAotICAgICAgc3RpbGwgcHJlc2VudCB0byBnaXZlIG91dC1vZi10cmVlIG1vZHVsZXMgdGltZSB0byBjaGFuZ2UuCi1XaG86ICBCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CS9zeXMvbzJjYiBzeW1saW5rCiBXaGVuOglKYW51YXJ5IDIwMTAKIFdoeToJL3N5cy9mcy9vMmNiIGlzIHRoZSBwcm9wZXIgbG9jYXRpb24gZm9yIHRoaXMgaW5mb3JtYXRpb24gLSAvc3lzL28yY2IKQEAgLTQ5MCwzICs0NTMsMjIgQEAKIFdobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hhdDoJU3VwcG9ydCBmb3IgbGNkX3N3aXRjaCBhbmQgZGlzcGxheV9nZXQgaW4gYXN1cy1sYXB0b3AgZHJpdmVyCitXaGVuOglNYXJjaCAyMDEwCitXaHk6CVRoZXNlIHR3byBmZWF0dXJlcyB1c2Ugbm9uLXN0YW5kYXJkIGludGVyZmFjZXMuIFRoZXJlIGFyZSB0aGUKKwlvbmx5IGZlYXR1cmVzIHRoYXQgcmVhbGx5IG5lZWQgbXVsdGlwbGUgcGF0aCB0byBndWVzcyB3aGF0J3MKKwl0aGUgcmlnaHQgbWV0aG9kIG5hbWUgb24gYSBzcGVjaWZpYyBsYXB0b3AuCisKKwlSZW1vdmluZyB0aGVtIHdpbGwgYWxsb3cgdG8gcmVtb3ZlIGEgbG90IG9mIGNvZGUgYW4gc2lnbmlmaWNhbnRseQorCWNsZWFuIHRoZSBkcml2ZXJzLgorCisJVGhpcyB3aWxsIGFmZmVjdCB0aGUgYmFja2xpZ2h0IGNvZGUgd2hpY2ggd29uJ3QgYmUgYWJsZSB0byBrbm93CisJaWYgdGhlIGJhY2tsaWdodCBpcyBvbiBvciBvZmYuIFRoZSBwbGF0Zm9ybSBkaXNwbGF5IGZpbGUgd2lsbCBhbHNvIGJlCisJd3JpdGUgb25seSAobGlrZSB0aGUgb25lIGluIGVlZXBjLWxhcHRvcCkuCisKKwlUaGlzIHNob3VsZCdudCBhZmZlY3QgYSBsb3Qgb2YgdXNlciBiZWNhdXNlIHRoZXkgdXN1YWxseSBrbm93CisJd2hlbiB0aGVpciBkaXNwbGF5IGlzIG9uIG9yIG9mZi4KKworV2hvOglDb3JlbnRpbiBDaGFyeSA8Y29yZW50aW4uY2hhcnlAZ21haWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWAppbmRleCA3MDAxNzgyLi44NzVkNDk2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKQEAgLTEsNyArMSw1IEBACiAwMC1JTkRFWAogCS0gdGhpcyBmaWxlIChpbmZvIG9uIHNvbWUgb2YgdGhlIGZpbGVzeXN0ZW1zIHN1cHBvcnRlZCBieSBsaW51eCkuCi1FeHBvcnRpbmcKLQktIGV4cGxhbmF0aW9uIG9mIGhvdyB0byBtYWtlIGZpbGVzeXN0ZW1zIGV4cG9ydGFibGUuCiBMb2NraW5nCiAJLSBpbmZvIG9uIGxvY2tpbmcgcnVsZXMgYXMgdGhleSBwZXJ0YWluIHRvIExpbnV4IFZGUy4KIDlwLnR4dApAQCAtNjgsMTIgKzY2LDggQEAKIAktIGluZm8gb24gdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIFN5cyBWIG1hbmRhdG9yeSBmaWxlIGxvY2tpbmcuCiBuY3Bmcy50eHQKIAktIGluZm8gb24gTm92ZWxsIE5ldHdhcmUodG0pIGZpbGVzeXN0ZW0gdXNpbmcgTkNQIHByb3RvY29sLgotbmZzNDEtc2VydmVyLnR4dAotCS0gaW5mbyBvbiB0aGUgTGludXggc2VydmVyIGltcGxlbWVudGF0aW9uIG9mIE5GU3Y0IG1pbm9yIHZlcnNpb24gMS4KLW5mcy1yZG1hLnR4dAotCS0gaG93IHRvIGluc3RhbGwgYW5kIHNldHVwIHRoZSBMaW51eCBORlMvUkRNQSBjbGllbnQgYW5kIHNlcnZlciBzb2Z0d2FyZS4KLW5mc3Jvb3QudHh0Ci0JLSBzaG9ydCBndWlkZSBvbiBzZXR0aW5nIHVwIGEgZGlza2xlc3MgYm94IHdpdGggTkZTIHJvb3QgZmlsZXN5c3RlbS4KK25mcy8KKwktIG5mcy1yZWxhdGVkIGRvY3VtZW50YXRpb24uCiBuaWxmczIudHh0CiAJLSBpbmZvIGFuZCBtb3VudCBvcHRpb25zIGZvciB0aGUgTklMRlMyIGZpbGVzeXN0ZW0uCiBudGZzLnR4dApAQCAtOTIsOCArODYsNiBAQAogCS0gaW5mbyBvbiByZWxheSwgZm9yIGVmZmljaWVudCBzdHJlYW1pbmcgZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZS4KIHJvbWZzLnR4dAogCS0gZGVzY3JpcHRpb24gb2YgdGhlIFJPTUZTIGZpbGVzeXN0ZW0uCi1ycGMtY2FjaGUudHh0Ci0JLSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGNhY2hpbmcgbWVjaGFuaXNtcyBpbiB0aGUgc3VucnBjIGxheWVyLgogc2VxX2ZpbGUudHh0CiAJLSBob3cgdG8gdXNlIHRoZSBzZXFfZmlsZSBBUEkKIHNoYXJlZHN1YnRyZWUudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjhjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy8wMC1JTkRFWApAQCAtMCwwICsxLDE2IEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlIChuZnMtcmVsYXRlZCBkb2N1bWVudGF0aW9uKS4KK0V4cG9ydGluZworCS0gZXhwbGFuYXRpb24gb2YgaG93IHRvIG1ha2UgZmlsZXN5c3RlbXMgZXhwb3J0YWJsZS4KK2tuZnNkLXN0YXRzLnR4dAorCS0gc3RhdGlzdGljcyB3aGljaCB0aGUgTkZTIHNlcnZlciBtYWtlcyBhdmFpbGFibGUgdG8gdXNlciBzcGFjZS4KK25mcy50eHQKKwktIG5mcyBjbGllbnQsIGFuZCBETlMgcmVzb2x1dGlvbiBmb3IgZnNfbG9jYXRpb25zLgorbmZzNDEtc2VydmVyLnR4dAorCS0gaW5mbyBvbiB0aGUgTGludXggc2VydmVyIGltcGxlbWVudGF0aW9uIG9mIE5GU3Y0IG1pbm9yIHZlcnNpb24gMS4KK25mcy1yZG1hLnR4dAorCS0gaG93IHRvIGluc3RhbGwgYW5kIHNldHVwIHRoZSBMaW51eCBORlMvUkRNQSBjbGllbnQgYW5kIHNlcnZlciBzb2Z0d2FyZQorbmZzcm9vdC50eHQKKwktIHNob3J0IGd1aWRlIG9uIHNldHRpbmcgdXAgYSBkaXNrbGVzcyBib3ggd2l0aCBORlMgcm9vdCBmaWxlc3lzdGVtLgorcnBjLWNhY2hlLnR4dAorCS0gaW50cm9kdWN0aW9uIHRvIHRoZSBjYWNoaW5nIG1lY2hhbmlzbXMgaW4gdGhlIHN1bnJwYyBsYXllci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvRXhwb3J0aW5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0V4cG9ydGluZwpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvRXhwb3J0aW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2tuZnNkLXN0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL2tuZnNkLXN0YXRzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9rbmZzZC1zdGF0cy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL2tuZnNkLXN0YXRzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMtcmRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnMtcmRtYS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzLXJkbWEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnMtcmRtYS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mcy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzNDEtc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mczQxLXNlcnZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkMGQwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mczQxLXNlcnZlci50eHQKQEAgLTAsMCArMSwyMjIgQEAKK05GU3Y0LjEgU2VydmVyIEltcGxlbWVudGF0aW9uCisKK1NlcnZlciBzdXBwb3J0IGZvciBtaW5vcnZlcnNpb24gMSBjYW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUKKy9wcm9jL2ZzL25mc2QvdmVyc2lvbnMgY29udHJvbCBmaWxlLiAgVGhlIHN0cmluZyBvdXRwdXQgcmV0dXJuZWQKK2J5IHJlYWRpbmcgdGhpcyBmaWxlIHdpbGwgY29udGFpbiBlaXRoZXIgIis0LjEiIG9yICItNC4xIgorY29ycmVzcG9uZGluZ2x5LgorCitDdXJyZW50bHksIHNlcnZlciBzdXBwb3J0IGZvciBtaW5vcnZlcnNpb24gMSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorSXQgY2FuIGJlIGVuYWJsZWQgYXQgcnVuIHRpbWUgYnkgd3JpdGluZyB0aGUgc3RyaW5nICIrNC4xIiB0bwordGhlIC9wcm9jL2ZzL25mc2QvdmVyc2lvbnMgY29udHJvbCBmaWxlLiAgTm90ZSB0aGF0IHRvIHdyaXRlIHRoaXMKK2NvbnRyb2wgZmlsZSwgdGhlIG5mc2Qgc2VydmljZSBtdXN0IGJlIHRha2VuIGRvd24uICBVc2UgeW91ciB1c2VyLW1vZGUKK25mcy11dGlscyB0byBzZXQgdGhpcyB1cDsgc2VlIHJwYy5uZnNkKDgpCisKKyhXYXJuaW5nOiBvbGRlciBzZXJ2ZXJzIHdpbGwgaW50ZXJwcmV0ICIrNC4xIiBhbmQgIi00LjEiIGFzICIrNCIgYW5kCisiLTQiLCByZXNwZWN0aXZlbHkuICBUaGVyZWZvcmUsIGNvZGUgbWVhbnQgdG8gd29yayBvbiBib3RoIG5ldyBhbmQgb2xkCitrZXJuZWxzIG11c3QgdHVybiA0LjEgb24gb3Igb2ZmICpiZWZvcmUqIHR1cm5pbmcgc3VwcG9ydCBmb3IgdmVyc2lvbiA0CitvbiBvciBvZmY7IHJwYy5uZnNkIGRvZXMgdGhpcyBjb3JyZWN0bHkuKQorCitUaGUgTkZTdjQgbWlub3J2ZXJzaW9uIDEgKE5GU3Y0LjEpIGltcGxlbWVudGF0aW9uIGluIG5mc2QgaXMgYmFzZWQKK29uIHRoZSBsYXRlc3QgTkZTdjQuMSBJbnRlcm5ldCBEcmFmdDoKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtbmZzdjQtbWlub3J2ZXJzaW9uMS0yOQorCitGcm9tIHRoZSBtYW55IG5ldyBmZWF0dXJlcyBpbiBORlN2NC4xIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCitmb2N1c2VzIG9uIHRoZSBtYW5kYXRvcnktdG8taW1wbGVtZW50IE5GU3Y0LjEgU2Vzc2lvbnMsIHByb3ZpZGluZworImV4YWN0bHkgb25jZSIgc2VtYW50aWNzIGFuZCBiZXR0ZXIgY29udHJvbCBhbmQgdGhyb3R0bGluZyBvZiB0aGUKK3Jlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGVhY2ggY2xpZW50LgorCitPdGhlciBORlN2NC4xIGZlYXR1cmVzLCBQYXJhbGxlbCBORlMgb3BlcmF0aW9ucyBpbiBwYXJ0aWN1bGFyLAorYXJlIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IG91dCBvZiB0cmVlLgorU2VlIGh0dHA6Ly93aWtpLmxpbnV4LW5mcy5vcmcvd2lraS9pbmRleC5waHAvUE5GU19wcm90b3R5cGVfZGVzaWduCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgaW50ZW5kZWQgZm9yIGRldmVsb3BlcnMgb25seTogd2hpbGUgaXQKK2RvZXMgc3VwcG9ydCBvcmRpbmFyeSBmaWxlIG9wZXJhdGlvbnMgb24gY2xpZW50cyB3ZSBoYXZlIHRlc3RlZCBhZ2FpbnN0CisoaW5jbHVkaW5nIHRoZSBsaW51eCBjbGllbnQpLCBpdCBpcyBpbmNvbXBsZXRlIGluIHdheXMgd2hpY2ggbWF5IGxpbWl0CitmZWF0dXJlcyB1bmV4cGVjdGVkbHksIGNhdXNlIGtub3duIGJ1Z3MgaW4gcmFyZSBjYXNlcywgb3IgY2F1c2UKK2ludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMgd2l0aCBmdXR1cmUgY2xpZW50cy4gIEtub3duIGlzc3VlczoKKworCS0gZ3NzIHN1cHBvcnQgaXMgcXVlc3Rpb25hYmxlOiBjdXJyZW50bHkgbW91bnRzIHdpdGgga2VyYmVyb3MKKwkgIGZyb20gYSBsaW51eCBjbGllbnQgYXJlIHBvc3NpYmxlLCBidXQgd2UgYXJlbid0IHJlYWxseQorCSAgY29uZm9ybWFudCB3aXRoIHRoZSBzcGVjIChmb3IgZXhhbXBsZSwgd2UgZG9uJ3QgdXNlIGtlcmJlcm9zCisJICBvbiB0aGUgYmFja2NoYW5uZWwgY29ycmVjdGx5KS4KKwktIG5vIHRydW5raW5nIHN1cHBvcnQ6IG5vIGNsaWVudHMgY3VycmVudGx5IHRha2UgYWR2YW50YWdlIG9mCisJICB0cnVua2luZywgYnV0IHRoaXMgaXMgYSBtYW5kYXRvcnkgZmVhdHVyZSwgYW5kIGl0cyB1c2UgaXMKKwkgIHJlY29tbWVuZGVkIHRvIGNsaWVudHMgaW4gYSBudW1iZXIgb2YgcGxhY2VzLiAgKEUuZy4gdG8gZW5zdXJlCisJICB0aW1lbHkgcmVuZXdhbCBpbiBjYXNlIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24ncyByZXRyeSB0aW1lb3V0cworCSAgaGF2ZSBnb3R0ZW4gdG9vIGxvbmc7IHNlZSBzZWN0aW9uIDguMyBvZiB0aGUgZHJhZnQuKQorCSAgVGhlcmVmb3JlLCBsYWNrIG9mIHRoaXMgZmVhdHVyZSBtYXkgY2F1c2UgZnV0dXJlIGNsaWVudHMgdG8KKwkgIGZhaWwuCisJLSBJbmNvbXBsZXRlIGJhY2tjaGFubmVsIHN1cHBvcnQ6IGluY29tcGxldGUgYmFja2NoYW5uZWwgZ3NzCisJICBzdXBwb3J0IGFuZCBubyBzdXBwb3J0IGZvciBCQUNLQ0hBTk5FTF9DVEwgbWVhbiB0aGF0CisJICBjYWxsYmFja3MgKGhlbmNlIGRlbGVnYXRpb25zIGFuZCBsYXlvdXRzKSBtYXkgbm90IGJlCisJICBhdmFpbGFibGUgYW5kIGNsaWVudHMgY29uZnVzZWQgYnkgdGhlIGluY29tcGxldGUKKwkgIGltcGxlbWVudGF0aW9uIG1heSBmYWlsLgorCS0gU2VydmVyIHJlYm9vdCByZWNvdmVyeSBpcyB1bnN1cHBvcnRlZDsgaWYgdGhlIHNlcnZlciByZWJvb3RzLAorCSAgY2xpZW50cyBtYXkgZmFpbC4KKwktIFdlIGRvIG5vdCBzdXBwb3J0IFNTViwgd2hpY2ggcHJvdmlkZXMgc2VjdXJpdHkgZm9yIHNoYXJlZAorCSAgY2xpZW50LXNlcnZlciBzdGF0ZSAodGh1cyBwcmV2ZW50aW5nIHVuYXV0aG9yaXplZCB0YW1wZXJpbmcKKwkgIHdpdGggbG9ja3MgYW5kIG9wZW5zLCBmb3IgZXhhbXBsZSkuICBJdCBpcyBtYW5kYXRvcnkgZm9yCisJICBzZXJ2ZXJzIHRvIHN1cHBvcnQgdGhpcywgdGhvdWdoIG5vIGNsaWVudHMgdXNlIGl0IHlldC4KKwktIE1hbmRhdG9yeSBvcGVyYXRpb25zIHdoaWNoIHdlIGRvIG5vdCBzdXBwb3J0LCBzdWNoIGFzCisJICBERVNUUk9ZX0NMSUVOVElELCBGUkVFX1NUQVRFSUQsIFNFQ0lORk9fTk9fTkFNRSwgYW5kCisJICBURVNUX1NUQVRFSUQsIGFyZSBub3QgY3VycmVudGx5IHVzZWQgYnkgY2xpZW50cywgYnV0IHdpbGwgYmUKKwkgIChhbmQgdGhlIHNwZWMgcmVjb21tZW5kcyB0aGVpciB1c2VzIGluIGNvbW1vbiBjYXNlcyksIGFuZAorCSAgY2xpZW50cyBzaG91bGQgbm90IGJlIGV4cGVjdGVkIHRvIGtub3cgaG93IHRvIHJlY292ZXIgZnJvbSB0aGUKKwkgIGNhc2Ugd2hlcmUgdGhleSBhcmUgbm90IHN1cHBvcnRlZC4gIFRoaXMgd2lsbCBldmVudHVhbGx5IGNhdXNlCisJICBpbnRlcm9wZXJhYmlsaXR5IGZhaWx1cmVzLgorCitJbiBhZGRpdGlvbiwgc29tZSBsaW1pdGF0aW9ucyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIGN1cnJlbnQgTkZTdjQKK2ltcGxlbWVudGF0aW9uOgorCisJLSBJbmNvbXBsZXRlIGRlbGVnYXRpb24gZW5mb3JjZW1lbnQ6IGlmIGEgZmlsZSBpcyByZW5hbWVkIG9yCisJICB1bmxpbmtlZCwgYSBjbGllbnQgaG9sZGluZyBhIGRlbGVnYXRpb24gbWF5IGNvbnRpbnVlIHRvCisJICBpbmRlZmluaXRlbHkgYWxsb3cgb3BlbnMgb2YgdGhlIGZpbGUgdW5kZXIgdGhlIG9sZCBuYW1lLgorCitUaGUgdGFibGUgYmVsb3csIHRha2VuIGZyb20gdGhlIE5GU3Y0LjEgZG9jdW1lbnQsIGxpc3RzCit0aGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBtYW5kYXRvcnkgdG8gaW1wbGVtZW50IChSRVEpLCBvcHRpb25hbAorKE9QVCksIGFuZCBORlN2NC4wIG9wZXJhdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgbm90IHRvIGltcGxlbWVudCAoTU5JKQoraW4gbWlub3IgdmVyc2lvbiAxLiAgVGhlIGZpcnN0IGNvbHVtbiBpbmRpY2F0ZXMgdGhlIG9wZXJhdGlvbnMgdGhhdAorYXJlIG5vdCBzdXBwb3J0ZWQgeWV0IGJ5IHRoZSBsaW51eCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24uCisKK1RoZSBPUFRJT05BTCBmZWF0dXJlcyBpZGVudGlmaWVkIGFuZCB0aGVpciBhYmJyZXZpYXRpb25zIGFyZSBhcyBmb2xsb3dzOgorCXBORlMJUGFyYWxsZWwgTkZTCisJRkRFTEcJRmlsZSBEZWxlZ2F0aW9ucworCURERUxHCURpcmVjdG9yeSBEZWxlZ2F0aW9ucworCitUaGUgZm9sbG93aW5nIGFiYnJldmlhdGlvbnMgaW5kaWNhdGUgdGhlIGxpbnV4IHNlcnZlciBpbXBsZW1lbnRhdGlvbiBzdGF0dXMuCisJSQlJbXBsZW1lbnRlZCBORlN2NC4xIG9wZXJhdGlvbnMuCisJTlMJTm90IFN1cHBvcnRlZC4KKwlOUyoJdW5pbXBsZW1lbnRlZCBvcHRpb25hbCBmZWF0dXJlLgorCVAJcE5GUyBmZWF0dXJlcyBpbXBsZW1lbnRlZCBvdXQgb2YgdHJlZS4KKwlQTlMJcE5GUyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIHlldCAob3V0IG9mIHRyZWUpLgorCitPcGVyYXRpb25zCisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgfCBPcGVyYXRpb24gICAgICAgICAgICB8IFJFUSwgUkVDLCAgfCBGZWF0dXJlICAgICAgfCBEZWZpbml0aW9uICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgT1BULCBvciAgICB8IChSRVEsIFJFQywgICB8ICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBNTkkgICAgICAgIHwgb3IgT1BUKSAgICAgIHwgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEFDQ0VTUyAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMSAgIHwKK05TIHwgQkFDS0NIQU5ORUxfQ1RMICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zMyAgfAorTlMgfCBCSU5EX0NPTk5fVE9fU0VTU0lPTiB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjM0ICB8CisgICB8IENMT1NFICAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMiAgIHwKKyAgIHwgQ09NTUlUICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zICAgfAorICAgfCBDUkVBVEUgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjQgICB8CitJICB8IENSRUFURV9TRVNTSU9OICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMzYgIHwKK05TKnwgREVMRUdQVVJHRSAgICAgICAgICAgfCBPUFQgICAgICAgIHwgRkRFTEcgKFJFUSkgIHwgU2VjdGlvbiAxOC41ICAgfAorICAgfCBERUxFR1JFVFVSTiAgICAgICAgICB8IE9QVCAgICAgICAgfCBGREVMRywgICAgICAgfCBTZWN0aW9uIDE4LjYgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8IERERUxHLCBwTkZTICB8ICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgKFJFUSkgICAgICAgIHwgICAgICAgICAgICAgICAgfAorTlMgfCBERVNUUk9ZX0NMSUVOVElEICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjUwICB8CitJICB8IERFU1RST1lfU0VTU0lPTiAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMzcgIHwKK0kgIHwgRVhDSEFOR0VfSUQgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zNSAgfAorTlMgfCBGUkVFX1NUQVRFSUQgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjM4ICB8CisgICB8IEdFVEFUVFIgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguNyAgIHwKK1AgIHwgR0VUREVWSUNFSU5GTyAgICAgICAgfCBPUFQgICAgICAgIHwgcE5GUyAoUkVRKSAgIHwgU2VjdGlvbiAxOC40MCAgfAorUCAgfCBHRVRERVZJQ0VMSVNUICAgICAgICB8IE9QVCAgICAgICAgfCBwTkZTIChPUFQpICAgfCBTZWN0aW9uIDE4LjQxICB8CisgICB8IEdFVEZIICAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguOCAgIHwKK05TKnwgR0VUX0RJUl9ERUxFR0FUSU9OICAgfCBPUFQgICAgICAgIHwgRERFTEcgKFJFUSkgIHwgU2VjdGlvbiAxOC4zOSAgfAorUCAgfCBMQVlPVVRDT01NSVQgICAgICAgICB8IE9QVCAgICAgICAgfCBwTkZTIChSRVEpICAgfCBTZWN0aW9uIDE4LjQyICB8CitQICB8IExBWU9VVEdFVCAgICAgICAgICAgIHwgT1BUICAgICAgICB8IHBORlMgKFJFUSkgICB8IFNlY3Rpb24gMTguNDMgIHwKK1AgIHwgTEFZT1VUUkVUVVJOICAgICAgICAgfCBPUFQgICAgICAgIHwgcE5GUyAoUkVRKSAgIHwgU2VjdGlvbiAxOC40NCAgfAorICAgfCBMSU5LICAgICAgICAgICAgICAgICB8IE9QVCAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjkgICB8CisgICB8IExPQ0sgICAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMTAgIHwKKyAgIHwgTE9DS1QgICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xMSAgfAorICAgfCBMT0NLVSAgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjEyICB8CisgICB8IExPT0tVUCAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMTMgIHwKKyAgIHwgTE9PS1VQUCAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xNCAgfAorICAgfCBOVkVSSUZZICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjE1ICB8CisgICB8IE9QRU4gICAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMTYgIHwKK05TKnwgT1BFTkFUVFIgICAgICAgICAgICAgfCBPUFQgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xNyAgfAorICAgfCBPUEVOX0NPTkZJUk0gICAgICAgICB8IE1OSSAgICAgICAgfCAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICB8CisgICB8IE9QRU5fRE9XTkdSQURFICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMTggIHwKKyAgIHwgUFVURkggICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xOSAgfAorICAgfCBQVVRQVUJGSCAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjIwICB8CisgICB8IFBVVFJPT1RGSCAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjEgIHwKKyAgIHwgUkVBRCAgICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yMiAgfAorICAgfCBSRUFERElSICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjIzICB8CisgICB8IFJFQURMSU5LICAgICAgICAgICAgIHwgT1BUICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjQgIHwKK05TIHwgUkVDTEFJTV9DT01QTEVURSAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC41MSAgfAorICAgfCBSRUxFQVNFX0xPQ0tPV05FUiAgICB8IE1OSSAgICAgICAgfCAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICB8CisgICB8IFJFTU9WRSAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjUgIHwKKyAgIHwgUkVOQU1FICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yNiAgfAorICAgfCBSRU5FVyAgICAgICAgICAgICAgICB8IE1OSSAgICAgICAgfCAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICB8CisgICB8IFJFU1RPUkVGSCAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjcgIHwKKyAgIHwgU0FWRUZIICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yOCAgfAorICAgfCBTRUNJTkZPICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjI5ICB8CitOUyB8IFNFQ0lORk9fTk9fTkFNRSAgICAgIHwgUkVDICAgICAgICB8IHBORlMgZmlsZXMgICB8IFNlY3Rpb24gMTguNDUsIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgbGF5b3V0IChSRVEpIHwgU2VjdGlvbiAxMy4xMiAgfAorSSAgfCBTRVFVRU5DRSAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjQ2ICB8CisgICB8IFNFVEFUVFIgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMzAgIHwKKyAgIHwgU0VUQ0xJRU5USUQgICAgICAgICAgfCBNTkkgICAgICAgIHwgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgfAorICAgfCBTRVRDTElFTlRJRF9DT05GSVJNICB8IE1OSSAgICAgICAgfCAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICB8CitOUyB8IFNFVF9TU1YgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguNDcgIHwKK05TIHwgVEVTVF9TVEFURUlEICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC40OCAgfAorICAgfCBWRVJJRlkgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjMxICB8CitOUyp8IFdBTlRfREVMRUdBVElPTiAgICAgIHwgT1BUICAgICAgICB8IEZERUxHIChPUFQpICB8IFNlY3Rpb24gMTguNDkgIHwKKyAgIHwgV1JJVEUgICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zMiAgfAorCitDYWxsYmFjayBPcGVyYXRpb25zCisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBPcGVyYXRpb24gICAgICAgICAgICAgICB8IFJFUSwgUkVDLCB8IEZlYXR1cmUgICAgIHwgRGVmaW5pdGlvbiAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgT1BULCBvciAgIHwgKFJFUSwgUkVDLCAgfCAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTkkgICAgICAgfCBvciBPUFQpICAgICB8ICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IENCX0dFVEFUVFIgICAgICAgICAgICAgIHwgT1BUICAgICAgIHwgRkRFTEcgKFJFUSkgfCBTZWN0aW9uIDIwLjEgIHwKK1AgIHwgQ0JfTEFZT1VUUkVDQUxMICAgICAgICAgfCBPUFQgICAgICAgfCBwTkZTIChSRVEpICB8IFNlY3Rpb24gMjAuMyAgfAorTlMqfCBDQl9OT1RJRlkgICAgICAgICAgICAgICB8IE9QVCAgICAgICB8IERERUxHIChSRVEpIHwgU2VjdGlvbiAyMC40ICB8CitQICB8IENCX05PVElGWV9ERVZJQ0VJRCAgICAgIHwgT1BUICAgICAgIHwgcE5GUyAoT1BUKSAgfCBTZWN0aW9uIDIwLjEyIHwKK05TKnwgQ0JfTk9USUZZX0xPQ0sgICAgICAgICAgfCBPUFQgICAgICAgfCAgICAgICAgICAgICB8IFNlY3Rpb24gMjAuMTEgfAorTlMqfCBDQl9QVVNIX0RFTEVHICAgICAgICAgICB8IE9QVCAgICAgICB8IEZERUxHIChPUFQpIHwgU2VjdGlvbiAyMC41ICB8CisgICB8IENCX1JFQ0FMTCAgICAgICAgICAgICAgIHwgT1BUICAgICAgIHwgRkRFTEcsICAgICAgfCBTZWN0aW9uIDIwLjIgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCBEREVMRywgcE5GUyB8ICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IChSRVEpICAgICAgIHwgICAgICAgICAgICAgICB8CitOUyp8IENCX1JFQ0FMTF9BTlkgICAgICAgICAgIHwgT1BUICAgICAgIHwgRkRFTEcsICAgICAgfCBTZWN0aW9uIDIwLjYgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCBEREVMRywgcE5GUyB8ICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IChSRVEpICAgICAgIHwgICAgICAgICAgICAgICB8CitOUyB8IENCX1JFQ0FMTF9TTE9UICAgICAgICAgIHwgUkVRICAgICAgIHwgICAgICAgICAgICAgfCBTZWN0aW9uIDIwLjggIHwKK05TKnwgQ0JfUkVDQUxMQUJMRV9PQkpfQVZBSUwgfCBPUFQgICAgICAgfCBEREVMRywgcE5GUyB8IFNlY3Rpb24gMjAuNyAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IChSRVEpICAgICAgIHwgICAgICAgICAgICAgICB8CitJICB8IENCX1NFUVVFTkNFICAgICAgICAgICAgIHwgT1BUICAgICAgIHwgRkRFTEcsICAgICAgfCBTZWN0aW9uIDIwLjkgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCBEREVMRywgcE5GUyB8ICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IChSRVEpICAgICAgIHwgICAgICAgICAgICAgICB8CitOUyp8IENCX1dBTlRTX0NBTkNFTExFRCAgICAgIHwgT1BUICAgICAgIHwgRkRFTEcsICAgICAgfCBTZWN0aW9uIDIwLjEwIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCBEREVMRywgcE5GUyB8ICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IChSRVEpICAgICAgIHwgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworSW1wbGVtZW50YXRpb24gbm90ZXM6CisKK0RFTEVHUFVSR0U6CisqIG1hbmRhdG9yeSBvbmx5IGZvciBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBDTEFJTV9ERUxFR0FURV9QUkVWIGFuZC9vcgorICBDTEFJTV9ERUxFR19QUkVWX0ZIICh3aGljaCBhbGxvd3MgY2xpZW50cyB0byBrZWVwIGRlbGVnYXRpb25zIHRoYXQKKyAgcGVyc2lzdCBhY3Jvc3MgY2xpZW50IHJlYm9vdHMpLiAgVGh1cyB3ZSBuZWVkIG5vdCBpbXBsZW1lbnQgdGhpcyBmb3IKKyAgbm93LgorCitFWENIQU5HRV9JRDoKKyogb25seSBTUDRfTk9ORSBzdGF0ZSBwcm90ZWN0aW9uIHN1cHBvcnRlZAorKiBpbXBsZW1lbnRhdGlvbiBpZHMgYXJlIGlnbm9yZWQKKworQ1JFQVRFX1NFU1NJT046CisqIGJhY2tjaGFubmVsIGF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQKKyogYmFja2NoYW5uZWwgc2VjdXJpdHkgcGFyYW1ldGVycyBhcmUgaWdub3JlZAorCitTRVFVRU5DRToKKyogbm8gc3VwcG9ydCBmb3IgZHluYW1pYyBzbG90IHRhYmxlIHJlbmVnb3RpYXRpb24gKG9wdGlvbmFsKQorCituZnN2NC4xIENPTVBPVU5EIHJ1bGVzOgorVGhlIGZvbGxvd2luZyBjYXNlcyBhcmVuJ3Qgc3VwcG9ydGVkIHlldDoKKyogRW5mb3JjaW5nIG9mIE5GUzRFUlJfTk9UX09OTFlfT1AgZm9yOiBCSU5EX0NPTk5fVE9fU0VTU0lPTiwgQ1JFQVRFX1NFU1NJT04sCisgIERFU1RST1lfQ0xJRU5USUQsIERFU1RST1lfU0VTU0lPTiwgRVhDSEFOR0VfSUQuCisqIERFU1RST1lfU0VTU0lPTiBNVVNUIGJlIHRoZSBmaW5hbCBvcGVyYXRpb24gaW4gdGhlIENPTVBPVU5EIHJlcXVlc3QuCisKK05vbnN0YW5kYXJkIGNvbXBvdW5kIGxpbWl0YXRpb25zOgorKiBObyBzdXBwb3J0IGZvciBhIHNlc3Npb25zIGZvcmUgY2hhbm5lbCBSUEMgY29tcG91bmQgdGhhdCByZXF1aXJlcyBib3RoIGEKKyAgY2FfbWF4cmVxdWVzdHNpemUgcmVxdWVzdCBhbmQgYSBjYV9tYXhyZXNwb25zZXNpemUgcmVwbHksIHNvIHdlIG1heQorICBmYWlsIHRvIGxpdmUgdXAgdG8gdGhlIHByb21pc2Ugd2UgbWFkZSBpbiBDUkVBVEVfU0VTU0lPTiBmb3JlIGNoYW5uZWwKKyAgbmVnb3RpYXRpb24uCisqIE5vIG1vcmUgdGhhbiBvbmUgSU8gb3BlcmF0aW9uIChyZWFkLCB3cml0ZSwgcmVhZGRpcikgYWxsb3dlZCBwZXIKKyAgY29tcG91bmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzcm9vdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc3Jvb3QudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JwYy1jYWNoZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9ycGMtY2FjaGUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JwYy1jYWNoZS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL3JwYy1jYWNoZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzNDEtc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzNDEtc2VydmVyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkyMGZlMi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mczQxLXNlcnZlci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotTkZTdjQuMSBTZXJ2ZXIgSW1wbGVtZW50YXRpb24KLQotU2VydmVyIHN1cHBvcnQgZm9yIG1pbm9ydmVyc2lvbiAxIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZQotL3Byb2MvZnMvbmZzZC92ZXJzaW9ucyBjb250cm9sIGZpbGUuICBUaGUgc3RyaW5nIG91dHB1dCByZXR1cm5lZAotYnkgcmVhZGluZyB0aGlzIGZpbGUgd2lsbCBjb250YWluIGVpdGhlciAiKzQuMSIgb3IgIi00LjEiCi1jb3JyZXNwb25kaW5nbHkuCi0KLUN1cnJlbnRseSwgc2VydmVyIHN1cHBvcnQgZm9yIG1pbm9ydmVyc2lvbiAxIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi1JdCBjYW4gYmUgZW5hYmxlZCBhdCBydW4gdGltZSBieSB3cml0aW5nIHRoZSBzdHJpbmcgIis0LjEiIHRvCi10aGUgL3Byb2MvZnMvbmZzZC92ZXJzaW9ucyBjb250cm9sIGZpbGUuICBOb3RlIHRoYXQgdG8gd3JpdGUgdGhpcwotY29udHJvbCBmaWxlLCB0aGUgbmZzZCBzZXJ2aWNlIG11c3QgYmUgdGFrZW4gZG93bi4gIFVzZSB5b3VyIHVzZXItbW9kZQotbmZzLXV0aWxzIHRvIHNldCB0aGlzIHVwOyBzZWUgcnBjLm5mc2QoOCkKLQotKFdhcm5pbmc6IG9sZGVyIHNlcnZlcnMgd2lsbCBpbnRlcnByZXQgIis0LjEiIGFuZCAiLTQuMSIgYXMgIis0IiBhbmQKLSItNCIsIHJlc3BlY3RpdmVseS4gIFRoZXJlZm9yZSwgY29kZSBtZWFudCB0byB3b3JrIG9uIGJvdGggbmV3IGFuZCBvbGQKLWtlcm5lbHMgbXVzdCB0dXJuIDQuMSBvbiBvciBvZmYgKmJlZm9yZSogdHVybmluZyBzdXBwb3J0IGZvciB2ZXJzaW9uIDQKLW9uIG9yIG9mZjsgcnBjLm5mc2QgZG9lcyB0aGlzIGNvcnJlY3RseS4pCi0KLVRoZSBORlN2NCBtaW5vcnZlcnNpb24gMSAoTkZTdjQuMSkgaW1wbGVtZW50YXRpb24gaW4gbmZzZCBpcyBiYXNlZAotb24gdGhlIGxhdGVzdCBORlN2NC4xIEludGVybmV0IERyYWZ0OgotaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1uZnN2NC1taW5vcnZlcnNpb24xLTI5Ci0KLUZyb20gdGhlIG1hbnkgbmV3IGZlYXR1cmVzIGluIE5GU3Y0LjEgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KLWZvY3VzZXMgb24gdGhlIG1hbmRhdG9yeS10by1pbXBsZW1lbnQgTkZTdjQuMSBTZXNzaW9ucywgcHJvdmlkaW5nCi0iZXhhY3RseSBvbmNlIiBzZW1hbnRpY3MgYW5kIGJldHRlciBjb250cm9sIGFuZCB0aHJvdHRsaW5nIG9mIHRoZQotcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgZWFjaCBjbGllbnQuCi0KLU90aGVyIE5GU3Y0LjEgZmVhdHVyZXMsIFBhcmFsbGVsIE5GUyBvcGVyYXRpb25zIGluIHBhcnRpY3VsYXIsCi1hcmUgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgb3V0IG9mIHRyZWUuCi1TZWUgaHR0cDovL3dpa2kubGludXgtbmZzLm9yZy93aWtpL2luZGV4LnBocC9QTkZTX3Byb3RvdHlwZV9kZXNpZ24KLWZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBpbnRlbmRlZCBmb3IgZGV2ZWxvcGVycyBvbmx5OiB3aGlsZSBpdAotZG9lcyBzdXBwb3J0IG9yZGluYXJ5IGZpbGUgb3BlcmF0aW9ucyBvbiBjbGllbnRzIHdlIGhhdmUgdGVzdGVkIGFnYWluc3QKLShpbmNsdWRpbmcgdGhlIGxpbnV4IGNsaWVudCksIGl0IGlzIGluY29tcGxldGUgaW4gd2F5cyB3aGljaCBtYXkgbGltaXQKLWZlYXR1cmVzIHVuZXhwZWN0ZWRseSwgY2F1c2Uga25vd24gYnVncyBpbiByYXJlIGNhc2VzLCBvciBjYXVzZQotaW50ZXJvcGVyYWJpbGl0eSBwcm9ibGVtcyB3aXRoIGZ1dHVyZSBjbGllbnRzLiAgS25vd24gaXNzdWVzOgotCi0JLSBnc3Mgc3VwcG9ydCBpcyBxdWVzdGlvbmFibGU6IGN1cnJlbnRseSBtb3VudHMgd2l0aCBrZXJiZXJvcwotCSAgZnJvbSBhIGxpbnV4IGNsaWVudCBhcmUgcG9zc2libGUsIGJ1dCB3ZSBhcmVuJ3QgcmVhbGx5Ci0JICBjb25mb3JtYW50IHdpdGggdGhlIHNwZWMgKGZvciBleGFtcGxlLCB3ZSBkb24ndCB1c2Uga2VyYmVyb3MKLQkgIG9uIHRoZSBiYWNrY2hhbm5lbCBjb3JyZWN0bHkpLgotCS0gbm8gdHJ1bmtpbmcgc3VwcG9ydDogbm8gY2xpZW50cyBjdXJyZW50bHkgdGFrZSBhZHZhbnRhZ2Ugb2YKLQkgIHRydW5raW5nLCBidXQgdGhpcyBpcyBhIG1hbmRhdG9yeSBmYWlsdXJlLCBhbmQgaXRzIHVzZSBpcwotCSAgcmVjb21tZW5kZWQgdG8gY2xpZW50cyBpbiBhIG51bWJlciBvZiBwbGFjZXMuICAoRS5nLiB0byBlbnN1cmUKLQkgIHRpbWVseSByZW5ld2FsIGluIGNhc2UgYW4gZXhpc3RpbmcgY29ubmVjdGlvbidzIHJldHJ5IHRpbWVvdXRzCi0JICBoYXZlIGdvdHRlbiB0b28gbG9uZzsgc2VlIHNlY3Rpb24gOC4zIG9mIHRoZSBkcmFmdC4pCi0JICBUaGVyZWZvcmUsIGxhY2sgb2YgdGhpcyBmZWF0dXJlIG1heSBjYXVzZSBmdXR1cmUgY2xpZW50cyB0bwotCSAgZmFpbC4KLQktIEluY29tcGxldGUgYmFja2NoYW5uZWwgc3VwcG9ydDogaW5jb21wbGV0ZSBiYWNrY2hhbm5lbCBnc3MKLQkgIHN1cHBvcnQgYW5kIG5vIHN1cHBvcnQgZm9yIEJBQ0tDSEFOTkVMX0NUTCBtZWFuIHRoYXQKLQkgIGNhbGxiYWNrcyAoaGVuY2UgZGVsZWdhdGlvbnMgYW5kIGxheW91dHMpIG1heSBub3QgYmUKLQkgIGF2YWlsYWJsZSBhbmQgY2xpZW50cyBjb25mdXNlZCBieSB0aGUgaW5jb21wbGV0ZQotCSAgaW1wbGVtZW50YXRpb24gbWF5IGZhaWwuCi0JLSBTZXJ2ZXIgcmVib290IHJlY292ZXJ5IGlzIHVuc3VwcG9ydGVkOyBpZiB0aGUgc2VydmVyIHJlYm9vdHMsCi0JICBjbGllbnRzIG1heSBmYWlsLgotCS0gV2UgZG8gbm90IHN1cHBvcnQgU1NWLCB3aGljaCBwcm92aWRlcyBzZWN1cml0eSBmb3Igc2hhcmVkCi0JICBjbGllbnQtc2VydmVyIHN0YXRlICh0aHVzIHByZXZlbnRpbmcgdW5hdXRob3JpemVkIHRhbXBlcmluZwotCSAgd2l0aCBsb2NrcyBhbmQgb3BlbnMsIGZvciBleGFtcGxlKS4gIEl0IGlzIG1hbmRhdG9yeSBmb3IKLQkgIHNlcnZlcnMgdG8gc3VwcG9ydCB0aGlzLCB0aG91Z2ggbm8gY2xpZW50cyB1c2UgaXQgeWV0LgotCS0gTWFuZGF0b3J5IG9wZXJhdGlvbnMgd2hpY2ggd2UgZG8gbm90IHN1cHBvcnQsIHN1Y2ggYXMKLQkgIERFU1RST1lfQ0xJRU5USUQsIEZSRUVfU1RBVEVJRCwgU0VDSU5GT19OT19OQU1FLCBhbmQKLQkgIFRFU1RfU1RBVEVJRCwgYXJlIG5vdCBjdXJyZW50bHkgdXNlZCBieSBjbGllbnRzLCBidXQgd2lsbCBiZQotCSAgKGFuZCB0aGUgc3BlYyByZWNvbW1lbmRzIHRoZWlyIHVzZXMgaW4gY29tbW9uIGNhc2VzKSwgYW5kCi0JICBjbGllbnRzIHNob3VsZCBub3QgYmUgZXhwZWN0ZWQgdG8ga25vdyBob3cgdG8gcmVjb3ZlciBmcm9tIHRoZQotCSAgY2FzZSB3aGVyZSB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkLiAgVGhpcyB3aWxsIGV2ZW50dWFsbHkgY2F1c2UKLQkgIGludGVyb3BlcmFiaWxpdHkgZmFpbHVyZXMuCi0KLUluIGFkZGl0aW9uLCBzb21lIGxpbWl0YXRpb25zIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgY3VycmVudCBORlN2NAotaW1wbGVtZW50YXRpb246Ci0KLQktIEluY29tcGxldGUgZGVsZWdhdGlvbiBlbmZvcmNlbWVudDogaWYgYSBmaWxlIGlzIHJlbmFtZWQgb3IKLQkgIHVubGlua2VkLCBhIGNsaWVudCBob2xkaW5nIGEgZGVsZWdhdGlvbiBtYXkgY29udGludWUgdG8KLQkgIGluZGVmaW5pdGVseSBhbGxvdyBvcGVucyBvZiB0aGUgZmlsZSB1bmRlciB0aGUgb2xkIG5hbWUuCi0KLVRoZSB0YWJsZSBiZWxvdywgdGFrZW4gZnJvbSB0aGUgTkZTdjQuMSBkb2N1bWVudCwgbGlzdHMKLXRoZSBvcGVyYXRpb25zIHRoYXQgYXJlIG1hbmRhdG9yeSB0byBpbXBsZW1lbnQgKFJFUSksIG9wdGlvbmFsCi0oT1BUKSwgYW5kIE5GU3Y0LjAgb3BlcmF0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBub3QgdG8gaW1wbGVtZW50IChNTkkpCi1pbiBtaW5vciB2ZXJzaW9uIDEuICBUaGUgZmlyc3QgY29sdW1uIGluZGljYXRlcyB0aGUgb3BlcmF0aW9ucyB0aGF0Ci1hcmUgbm90IHN1cHBvcnRlZCB5ZXQgYnkgdGhlIGxpbnV4IHNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLQotVGhlIE9QVElPTkFMIGZlYXR1cmVzIGlkZW50aWZpZWQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMgYXJlIGFzIGZvbGxvd3M6Ci0JcE5GUwlQYXJhbGxlbCBORlMKLQlGREVMRwlGaWxlIERlbGVnYXRpb25zCi0JRERFTEcJRGlyZWN0b3J5IERlbGVnYXRpb25zCi0KLVRoZSBmb2xsb3dpbmcgYWJicmV2aWF0aW9ucyBpbmRpY2F0ZSB0aGUgbGludXggc2VydmVyIGltcGxlbWVudGF0aW9uIHN0YXR1cy4KLQlJCUltcGxlbWVudGVkIE5GU3Y0LjEgb3BlcmF0aW9ucy4KLQlOUwlOb3QgU3VwcG9ydGVkLgotCU5TKgl1bmltcGxlbWVudGVkIG9wdGlvbmFsIGZlYXR1cmUuCi0JUAlwTkZTIGZlYXR1cmVzIGltcGxlbWVudGVkIG91dCBvZiB0cmVlLgotCVBOUwlwTkZTIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0IChvdXQgb2YgdHJlZSkuCi0KLU9wZXJhdGlvbnMKLQotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IE9wZXJhdGlvbiAgICAgICAgICAgIHwgUkVRLCBSRUMsICB8IEZlYXR1cmUgICAgICB8IERlZmluaXRpb24gICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBPUFQsIG9yICAgIHwgKFJFUSwgUkVDLCAgIHwgICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICB8IE1OSSAgICAgICAgfCBvciBPUFQpICAgICAgfCAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgQUNDRVNTICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xICAgfAotTlMgfCBCQUNLQ0hBTk5FTF9DVEwgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjMzICB8Ci1OUyB8IEJJTkRfQ09OTl9UT19TRVNTSU9OIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMzQgIHwKLSAgIHwgQ0xPU0UgICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yICAgfAotICAgfCBDT01NSVQgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjMgICB8Ci0gICB8IENSRUFURSAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguNCAgIHwKLUkgIHwgQ1JFQVRFX1NFU1NJT04gICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zNiAgfAotTlMqfCBERUxFR1BVUkdFICAgICAgICAgICB8IE9QVCAgICAgICAgfCBGREVMRyAoUkVRKSAgfCBTZWN0aW9uIDE4LjUgICB8Ci0gICB8IERFTEVHUkVUVVJOICAgICAgICAgIHwgT1BUICAgICAgICB8IEZERUxHLCAgICAgICB8IFNlY3Rpb24gMTguNiAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgRERFTEcsIHBORlMgIHwgICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAoUkVRKSAgICAgICAgfCAgICAgICAgICAgICAgICB8Ci1OUyB8IERFU1RST1lfQ0xJRU5USUQgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguNTAgIHwKLUkgIHwgREVTVFJPWV9TRVNTSU9OICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zNyAgfAotSSAgfCBFWENIQU5HRV9JRCAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjM1ICB8Ci1OUyB8IEZSRUVfU1RBVEVJRCAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMzggIHwKLSAgIHwgR0VUQVRUUiAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC43ICAgfAotUCAgfCBHRVRERVZJQ0VJTkZPICAgICAgICB8IE9QVCAgICAgICAgfCBwTkZTIChSRVEpICAgfCBTZWN0aW9uIDE4LjQwICB8Ci1QICB8IEdFVERFVklDRUxJU1QgICAgICAgIHwgT1BUICAgICAgICB8IHBORlMgKE9QVCkgICB8IFNlY3Rpb24gMTguNDEgIHwKLSAgIHwgR0VURkggICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC44ICAgfAotTlMqfCBHRVRfRElSX0RFTEVHQVRJT04gICB8IE9QVCAgICAgICAgfCBEREVMRyAoUkVRKSAgfCBTZWN0aW9uIDE4LjM5ICB8Ci1QICB8IExBWU9VVENPTU1JVCAgICAgICAgIHwgT1BUICAgICAgICB8IHBORlMgKFJFUSkgICB8IFNlY3Rpb24gMTguNDIgIHwKLVAgIHwgTEFZT1VUR0VUICAgICAgICAgICAgfCBPUFQgICAgICAgIHwgcE5GUyAoUkVRKSAgIHwgU2VjdGlvbiAxOC40MyAgfAotUCAgfCBMQVlPVVRSRVRVUk4gICAgICAgICB8IE9QVCAgICAgICAgfCBwTkZTIChSRVEpICAgfCBTZWN0aW9uIDE4LjQ0ICB8Ci0gICB8IExJTksgICAgICAgICAgICAgICAgIHwgT1BUICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguOSAgIHwKLSAgIHwgTE9DSyAgICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xMCAgfAotICAgfCBMT0NLVCAgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjExICB8Ci0gICB8IExPQ0tVICAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMTIgIHwKLSAgIHwgTE9PS1VQICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xMyAgfAotICAgfCBMT09LVVBQICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjE0ICB8Ci0gICB8IE5WRVJJRlkgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMTUgIHwKLSAgIHwgT1BFTiAgICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xNiAgfAotTlMqfCBPUEVOQVRUUiAgICAgICAgICAgICB8IE9QVCAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjE3ICB8Ci0gICB8IE9QRU5fQ09ORklSTSAgICAgICAgIHwgTU5JICAgICAgICB8ICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgIHwKLSAgIHwgT1BFTl9ET1dOR1JBREUgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4xOCAgfAotICAgfCBQVVRGSCAgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjE5ICB8Ci0gICB8IFBVVFBVQkZIICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjAgIHwKLSAgIHwgUFVUUk9PVEZIICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yMSAgfAotICAgfCBSRUFEICAgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjIyICB8Ci0gICB8IFJFQURESVIgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjMgIHwKLSAgIHwgUkVBRExJTksgICAgICAgICAgICAgfCBPUFQgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yNCAgfAotTlMgfCBSRUNMQUlNX0NPTVBMRVRFICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjUxICB8Ci0gICB8IFJFTEVBU0VfTE9DS09XTkVSICAgIHwgTU5JICAgICAgICB8ICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgIHwKLSAgIHwgUkVNT1ZFICAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yNSAgfAotICAgfCBSRU5BTUUgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjI2ICB8Ci0gICB8IFJFTkVXICAgICAgICAgICAgICAgIHwgTU5JICAgICAgICB8ICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgIHwKLSAgIHwgUkVTVE9SRUZIICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4yNyAgfAotICAgfCBTQVZFRkggICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjI4ICB8Ci0gICB8IFNFQ0lORk8gICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMjkgIHwKLU5TIHwgU0VDSU5GT19OT19OQU1FICAgICAgfCBSRUMgICAgICAgIHwgcE5GUyBmaWxlcyAgIHwgU2VjdGlvbiAxOC40NSwgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCBsYXlvdXQgKFJFUSkgfCBTZWN0aW9uIDEzLjEyICB8Ci1JICB8IFNFUVVFTkNFICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguNDYgIHwKLSAgIHwgU0VUQVRUUiAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC4zMCAgfAotICAgfCBTRVRDTElFTlRJRCAgICAgICAgICB8IE1OSSAgICAgICAgfCAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICB8Ci0gICB8IFNFVENMSUVOVElEX0NPTkZJUk0gIHwgTU5JICAgICAgICB8ICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgIHwKLU5TIHwgU0VUX1NTViAgICAgICAgICAgICAgfCBSRVEgICAgICAgIHwgICAgICAgICAgICAgIHwgU2VjdGlvbiAxOC40NyAgfAotTlMgfCBURVNUX1NUQVRFSUQgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjQ4ICB8Ci0gICB8IFZFUklGWSAgICAgICAgICAgICAgIHwgUkVRICAgICAgICB8ICAgICAgICAgICAgICB8IFNlY3Rpb24gMTguMzEgIHwKLU5TKnwgV0FOVF9ERUxFR0FUSU9OICAgICAgfCBPUFQgICAgICAgIHwgRkRFTEcgKE9QVCkgIHwgU2VjdGlvbiAxOC40OSAgfAotICAgfCBXUklURSAgICAgICAgICAgICAgICB8IFJFUSAgICAgICAgfCAgICAgICAgICAgICAgfCBTZWN0aW9uIDE4LjMyICB8Ci0KLUNhbGxiYWNrIE9wZXJhdGlvbnMKLQotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IE9wZXJhdGlvbiAgICAgICAgICAgICAgIHwgUkVRLCBSRUMsIHwgRmVhdHVyZSAgICAgfCBEZWZpbml0aW9uICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBPUFQsIG9yICAgfCAoUkVRLCBSRUMsICB8ICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IE1OSSAgICAgICB8IG9yIE9QVCkgICAgIHwgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgQ0JfR0VUQVRUUiAgICAgICAgICAgICAgfCBPUFQgICAgICAgfCBGREVMRyAoUkVRKSB8IFNlY3Rpb24gMjAuMSAgfAotUCAgfCBDQl9MQVlPVVRSRUNBTEwgICAgICAgICB8IE9QVCAgICAgICB8IHBORlMgKFJFUSkgIHwgU2VjdGlvbiAyMC4zICB8Ci1OUyp8IENCX05PVElGWSAgICAgICAgICAgICAgIHwgT1BUICAgICAgIHwgRERFTEcgKFJFUSkgfCBTZWN0aW9uIDIwLjQgIHwKLVAgIHwgQ0JfTk9USUZZX0RFVklDRUlEICAgICAgfCBPUFQgICAgICAgfCBwTkZTIChPUFQpICB8IFNlY3Rpb24gMjAuMTIgfAotTlMqfCBDQl9OT1RJRllfTE9DSyAgICAgICAgICB8IE9QVCAgICAgICB8ICAgICAgICAgICAgIHwgU2VjdGlvbiAyMC4xMSB8Ci1OUyp8IENCX1BVU0hfREVMRUcgICAgICAgICAgIHwgT1BUICAgICAgIHwgRkRFTEcgKE9QVCkgfCBTZWN0aW9uIDIwLjUgIHwKLSAgIHwgQ0JfUkVDQUxMICAgICAgICAgICAgICAgfCBPUFQgICAgICAgfCBGREVMRywgICAgICB8IFNlY3Rpb24gMjAuMiAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IERERUxHLCBwTkZTIHwgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgKFJFUSkgICAgICAgfCAgICAgICAgICAgICAgIHwKLU5TKnwgQ0JfUkVDQUxMX0FOWSAgICAgICAgICAgfCBPUFQgICAgICAgfCBGREVMRywgICAgICB8IFNlY3Rpb24gMjAuNiAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IERERUxHLCBwTkZTIHwgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgKFJFUSkgICAgICAgfCAgICAgICAgICAgICAgIHwKLU5TIHwgQ0JfUkVDQUxMX1NMT1QgICAgICAgICAgfCBSRVEgICAgICAgfCAgICAgICAgICAgICB8IFNlY3Rpb24gMjAuOCAgfAotTlMqfCBDQl9SRUNBTExBQkxFX09CSl9BVkFJTCB8IE9QVCAgICAgICB8IERERUxHLCBwTkZTIHwgU2VjdGlvbiAyMC43ICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgKFJFUSkgICAgICAgfCAgICAgICAgICAgICAgIHwKLUkgIHwgQ0JfU0VRVUVOQ0UgICAgICAgICAgICAgfCBPUFQgICAgICAgfCBGREVMRywgICAgICB8IFNlY3Rpb24gMjAuOSAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IERERUxHLCBwTkZTIHwgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgKFJFUSkgICAgICAgfCAgICAgICAgICAgICAgIHwKLU5TKnwgQ0JfV0FOVFNfQ0FOQ0VMTEVEICAgICAgfCBPUFQgICAgICAgfCBGREVMRywgICAgICB8IFNlY3Rpb24gMjAuMTAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IERERUxHLCBwTkZTIHwgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgKFJFUSkgICAgICAgfCAgICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotCi1JbXBsZW1lbnRhdGlvbiBub3RlczoKLQotREVMRUdQVVJHRToKLSogbWFuZGF0b3J5IG9ubHkgZm9yIHNlcnZlcnMgdGhhdCBzdXBwb3J0IENMQUlNX0RFTEVHQVRFX1BSRVYgYW5kL29yCi0gIENMQUlNX0RFTEVHX1BSRVZfRkggKHdoaWNoIGFsbG93cyBjbGllbnRzIHRvIGtlZXAgZGVsZWdhdGlvbnMgdGhhdAotICBwZXJzaXN0IGFjcm9zcyBjbGllbnQgcmVib290cykuICBUaHVzIHdlIG5lZWQgbm90IGltcGxlbWVudCB0aGlzIGZvcgotICBub3cuCi0KLUVYQ0hBTkdFX0lEOgotKiBvbmx5IFNQNF9OT05FIHN0YXRlIHByb3RlY3Rpb24gc3VwcG9ydGVkCi0qIGltcGxlbWVudGF0aW9uIGlkcyBhcmUgaWdub3JlZAotCi1DUkVBVEVfU0VTU0lPTjoKLSogYmFja2NoYW5uZWwgYXR0cmlidXRlcyBhcmUgaWdub3JlZAotKiBiYWNrY2hhbm5lbCBzZWN1cml0eSBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkCi0KLVNFUVVFTkNFOgotKiBubyBzdXBwb3J0IGZvciBkeW5hbWljIHNsb3QgdGFibGUgcmVuZWdvdGlhdGlvbiAob3B0aW9uYWwpCi0KLW5mc3Y0LjEgQ09NUE9VTkQgcnVsZXM6Ci1UaGUgZm9sbG93aW5nIGNhc2VzIGFyZW4ndCBzdXBwb3J0ZWQgeWV0OgotKiBFbmZvcmNpbmcgb2YgTkZTNEVSUl9OT1RfT05MWV9PUCBmb3I6IEJJTkRfQ09OTl9UT19TRVNTSU9OLCBDUkVBVEVfU0VTU0lPTiwKLSAgREVTVFJPWV9DTElFTlRJRCwgREVTVFJPWV9TRVNTSU9OLCBFWENIQU5HRV9JRC4KLSogREVTVFJPWV9TRVNTSU9OIE1VU1QgYmUgdGhlIGZpbmFsIG9wZXJhdGlvbiBpbiB0aGUgQ09NUE9VTkQgcmVxdWVzdC4KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCmluZGV4IDkyYjg4OGQuLmE3ZTk3NDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZworKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKQEAgLTE0MCw3ICsxNDAsNyBAQAogTmV3IHN1cGVyX2Jsb2NrIGZpZWxkICJzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgKnNfZXhwb3J0X29wIiBmb3IKIGV4cGxpY2l0IHN1cHBvcnQgZm9yIGV4cG9ydGluZywgZS5nLiB2aWEgTkZTLiAgVGhlIHN0cnVjdHVyZSBpcyBmdWxseQogZG9jdW1lbnRlZCBhdCBpdHMgZGVjbGFyYXRpb24gaW4gaW5jbHVkZS9saW51eC9mcy5oLCBhbmQgaW4KLURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nLgorRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvRXhwb3J0aW5nLgogCiBCcmllZmx5IGl0IGFsbG93cyBmb3IgdGhlIGRlZmluaXRpb24gb2YgZGVjb2RlX2ZoIGFuZCBlbmNvZGVfZmggb3BlcmF0aW9ucwogdG8gZW5jb2RlIGFuZCBkZWNvZGUgZmlsZWhhbmRsZXMsIGFuZCBhbGxvd3MgdGhlIGZpbGVzeXN0ZW0gdG8gdXNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCA5NGI5ZjIwLi4yMjBjYzYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTM4LDYgKzM4LDcgQEAKICAgMy4zCS9wcm9jLzxwaWQ+L2lvIC0gRGlzcGxheSB0aGUgSU8gYWNjb3VudGluZyBmaWVsZHMKICAgMy40CS9wcm9jLzxwaWQ+L2NvcmVkdW1wX2ZpbHRlciAtIENvcmUgZHVtcCBmaWx0ZXJpbmcgc2V0dGluZ3MKICAgMy41CS9wcm9jLzxwaWQ+L21vdW50aW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IG1vdW50cworICAzLjYJL3Byb2MvPHBpZD4vY29tbSAgJiAvcHJvYy88cGlkPi90YXNrLzx0aWQ+L2NvbW0KIAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MDksMyArMTQxMCwxMSBAQAogCiAgIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2hhcmVkc3VidHJlZS50eHQKIAorCiszLjYJL3Byb2MvPHBpZD4vY29tbSAgJiAvcHJvYy88cGlkPi90YXNrLzx0aWQ+L2NvbW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVzZSBmaWxlcyBwcm92aWRlIGEgbWV0aG9kIHRvIGFjY2VzcyBhIHRhc2tzIGNvbW0gdmFsdWUuIEl0IGFsc28gYWxsb3dzIGZvcgorYSB0YXNrIHRvIHNldCBpdHMgb3duIG9yIG9uZSBvZiBpdHMgdGhyZWFkIHNpYmxpbmdzIGNvbW0gdmFsdWUuIFRoZSBjb21tIHZhbHVlCitpcyBsaW1pdGVkIGluIHNpemUgY29tcGFyZWQgdG8gdGhlIGNtZGxpbmUgdmFsdWUsIHNvIHdyaXRpbmcgYW55dGhpbmcgbG9uZ2VyCit0aGVuIHRoZSBrZXJuZWwncyBUQVNLX0NPTU1fTEVOIChjdXJyZW50bHkgMTYgY2hhcnMpIHdpbGwgcmVzdWx0IGluIGEgdHJ1bmNhdGVkCitjb21tIHZhbHVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zZXFfZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dAppbmRleCAwZDE1ZWJjLi5hMWUyZTBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dApAQCAtMjQ4LDkgKzI0OCw3IEBACiAJewogCSAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAotCSAgICAgICAgZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic2VxdWVuY2UiLCAwLCBOVUxMKTsKLQkgICAgICAgIGlmIChlbnRyeSkKLQkgICAgICAgICAgICAgICAgZW50cnktPnByb2NfZm9wcyA9ICZjdF9maWxlX29wczsKKwkgICAgICAgIHByb2NfY3JlYXRlKCJzZXF1ZW5jZSIsIDAsIE5VTEwsICZjdF9maWxlX29wcyk7CiAJICAgICAgICByZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKaW5kZXggYjI0NWQ1Mi4uOTMxYzgwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTkxLDggKzkxLDggQEAKIAkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7Ci12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOworaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOwordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKIAogSXQgYWxzbyBkZWZpbmVzIHRoaXMgaGVscGVyIGZvciBkZWZpbmluZyBkZXZpY2UgYXR0cmlidXRlczogCiAKQEAgLTMxNiw4ICszMTYsOCBAQAogCiBDcmVhdGlvbi9SZW1vdmFsOgogCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKLXZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKIAogCiAtIGJ1cyBkcml2ZXJzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQpAQCAtMzU4LDcgKzM1OCw3IEBACiAKIENyZWF0aW9uL1JlbW92YWw6CiAKLWludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Ci12b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKK2ludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7Cit2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqKTsKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAppbmRleCBlNGU3ZGFlZDIuLjE4NjZjMjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtNTMxLDYgKzUzMSwxMyBAQAogCQlUaGlzIGZpbGUgZXhpc3RzIG9ubHkgaWYgdGhlIHBpbiBjYW4gYmUgY29uZmlndXJlZCBhcyBhbgogCQlpbnRlcnJ1cHQgZ2VuZXJhdGluZyBpbnB1dCBwaW4uCiAKKwkiYWN0aXZlX2xvdyIgLi4uIHJlYWRzIGFzIGVpdGhlciAwIChmYWxzZSkgb3IgMSAodHJ1ZSkuICBXcml0ZQorCQlhbnkgbm9uemVybyB2YWx1ZSB0byBpbnZlcnQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBib3RoCisJCWZvciByZWFkaW5nIGFuZCB3cml0aW5nLiAgRXhpc3RpbmcgYW5kIHN1YnNlcXVlbnQKKwkJcG9sbCgyKSBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gdmlhIHRoZSBlZGdlIGF0dHJpYnV0ZQorCQlmb3IgInJpc2luZyIgYW5kICJmYWxsaW5nIiBlZGdlcyB3aWxsIGZvbGxvdyB0aGlzCisJCXNldHRpbmcuCisKIEdQSU8gY29udHJvbGxlcnMgaGF2ZSBwYXRocyBsaWtlIC9zeXMvY2xhc3MvZ3Bpby9ncGlvY2hpcDQyLyAoZm9yIHRoZQogY29udHJvbGxlciBpbXBsZW1lbnRpbmcgR1BJT3Mgc3RhcnRpbmcgYXQgIzQyKSBhbmQgaGF2ZSB0aGUgZm9sbG93aW5nCiByZWFkLW9ubHkgYXR0cmlidXRlczoKQEAgLTU2Niw2ICs1NzMsOCBAQAogCWludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKIAkJdW5zaWduZWQgZ3BpbykKIAorCS8qIGNoYW5nZSB0aGUgcG9sYXJpdHkgb2YgYSBHUElPIG5vZGUgaW4gc3lzZnMgKi8KKwlpbnQgZ3Bpb19zeXNmc19zZXRfYWN0aXZlX2xvdyh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwogCiBBZnRlciBhIGtlcm5lbCBkcml2ZXIgcmVxdWVzdHMgYSBHUElPLCBpdCBtYXkgb25seSBiZSBtYWRlIGF2YWlsYWJsZSBpbgogdGhlIHN5c2ZzIGludGVyZmFjZSBieSBncGlvX2V4cG9ydCgpLiAgVGhlIGRyaXZlciBjYW4gY29udHJvbCB3aGV0aGVyIHRoZQpAQCAtNTgwLDMgKzU4OSw5IEBACiBzeW1saW5rcyBmcm9tIGVsc2V3aGVyZSBpbiBzeXNmcyB0byB0aGUgR1BJTyBzeXNmcyBub2RlLiAgRHJpdmVycyBjYW4KIHVzZSB0aGlzIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZSB1bmRlciB0aGVpciBvd24gZGV2aWNlIGluIHN5c2ZzIHdpdGgKIGEgZGVzY3JpcHRpdmUgbmFtZS4KKworRHJpdmVycyBjYW4gdXNlIGdwaW9fc3lzZnNfc2V0X2FjdGl2ZV9sb3coKSB0byBoaWRlIEdQSU8gbGluZSBwb2xhcml0eQorZGlmZmVyZW5jZXMgYmV0d2VlbiBib2FyZHMgZnJvbSB1c2VyIHNwYWNlLiAgVGhpcyBvbmx5IGFmZmVjdHMgdGhlCitzeXNmcyBpbnRlcmZhY2UuICBQb2xhcml0eSBjaGFuZ2UgY2FuIGJlIGRvbmUgYm90aCBiZWZvcmUgYW5kIGFmdGVyCitncGlvX2V4cG9ydCgpLCBhbmQgcHJldmlvdXNseSBlbmFibGVkIHBvbGwoMikgc3VwcG9ydCBmb3IgZWl0aGVyCityaXNpbmcgb3IgZmFsbGluZyBlZGdlIHdpbGwgYmUgcmVjb25maWd1cmVkIHRvIGZvbGxvdyB0aGlzIHNldHRpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhMThkNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vazEwdGVtcApAQCAtMCwwICsxLDYwIEBACitLZXJuZWwgZHJpdmVyIGsxMHRlbXAKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisqIEFNRCBGYW1pbHkgMTBoIHByb2Nlc3NvcnM6CisgIFNvY2tldCBGOiBRdWFkLUNvcmUvU2l4LUNvcmUvRW1iZWRkZWQgT3B0ZXJvbgorICBTb2NrZXQgQU0yKzogT3B0ZXJvbiwgUGhlbm9tIChJSSkgWDMvWDQKKyAgU29ja2V0IEFNMzogUXVhZC1Db3JlIE9wdGVyb24sIEF0aGxvbi9QaGVub20gSUkgWDIvWDMvWDQsIFNlbXByb24gSUkKKyAgU29ja2V0IFMxRzM6IEF0aGxvbiBJSSwgU2VtcHJvbiwgVHVyaW9uIElJCisqIEFNRCBGYW1pbHkgMTFoIHByb2Nlc3NvcnM6CisgIFNvY2tldCBTMUcyOiBBdGhsb24gKFgyKSwgU2VtcHJvbiAoWDIpLCBUdXJpb24gWDIgKFVsdHJhKQorCisgIFByZWZpeDogJ2sxMHRlbXAnCisgIEFkZHJlc3NlcyBzY2FubmVkOiBQQ0kgc3BhY2UKKyAgRGF0YXNoZWV0czoKKyAgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIChCS0RHKSBGb3IgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29yczoKKyAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy8zMTExNi5wZGYKKyAgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIChCS0RHKSBmb3IgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29yczoKKyAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MTI1Ni5wZGYKKyAgUmV2aXNpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnM6CisgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDEzMjIucGRmCisgIFJldmlzaW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3JzOgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQxNzg4LnBkZgorICBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3IgUG93ZXIgYW5kIFRoZXJtYWwgRGF0YSBTaGVldCBmb3IgTm90ZWJvb2tzOgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzczLnBkZgorICBBTUQgRmFtaWx5IDEwaCBTZXJ2ZXIgYW5kIFdvcmtzdGF0aW9uIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0OgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzc0LnBkZgorICBBTUQgRmFtaWx5IDEwaCBEZXNrdG9wIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0OgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzc1LnBkZgorCitBdXRob3I6IENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgcGVybWl0cyByZWFkaW5nIG9mIHRoZSBpbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3Igb2YgQU1ECitGYW1pbHkgMTBoIGFuZCAxMWggcHJvY2Vzc29ycy4KKworQWxsIHRoZXNlIHByb2Nlc3NvcnMgaGF2ZSBhIHNlbnNvciwgYnV0IG9uIG9sZGVyIHJldmlzaW9ucyBvZiBGYW1pbHkgMTBoCitwcm9jZXNzb3JzLCB0aGUgc2Vuc29yIG1heSByZXR1cm4gaW5jb25zaXN0ZW50IHZhbHVlcyAoZXJyYXR1bSAzMTkpLiBUaGUKK2RyaXZlciB3aWxsIHJlZnVzZSB0byBsb2FkIG9uIHRoZXNlIHJldmlzaW9ucyB1bmxlc3MgeW91IHNwZWNpZnkgdGhlCisiZm9yY2U9MSIgbW9kdWxlIHBhcmFtZXRlci4KKworVGhlcmUgaXMgb25lIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHZhbHVlLCBhdmFpbGFibGUgYXMgdGVtcDFfaW5wdXQgaW4KK3N5c2ZzLiBJdCBpcyBtZWFzdXJlZCBpbiBkZWdyZWVzIENlbHNpdXMgd2l0aCBhIHJlc29sdXRpb24gb2YgMS84dGggZGVncmVlLgorUGxlYXNlIG5vdGUgdGhhdCBpdCBpcyBkZWZpbmVkIGFzIGEgcmVsYXRpdmUgdmFsdWU7IHRvIHF1b3RlIHRoZSBBTUQgbWFudWFsOgorCisgIFRjdGwgaXMgdGhlIHByb2Nlc3NvciB0ZW1wZXJhdHVyZSBjb250cm9sIHZhbHVlLCB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSB0bworICBjb250cm9sIGNvb2xpbmcgc3lzdGVtcy4gVGN0bCBpcyBhIG5vbi1waHlzaWNhbCB0ZW1wZXJhdHVyZSBvbiBhbgorICBhcmJpdHJhcnkgc2NhbGUgbWVhc3VyZWQgaW4gZGVncmVlcy4gSXQgZG9lcyBfbm90XyByZXByZXNlbnQgYW4gYWN0dWFsCisgIHBoeXNpY2FsIHRlbXBlcmF0dXJlIGxpa2UgZGllIG9yIGNhc2UgdGVtcGVyYXR1cmUuIEluc3RlYWQsIGl0IHNwZWNpZmllcworICB0aGUgcHJvY2Vzc29yIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgc3lzdGVtIG11c3QKKyAgc3VwcGx5IHRoZSBtYXhpbXVtIGNvb2xpbmcgZm9yIHRoZSBwcm9jZXNzb3IncyBzcGVjaWZpZWQgbWF4aW11bSBjYXNlCisgIHRlbXBlcmF0dXJlIGFuZCBtYXhpbXVtIHRoZXJtYWwgcG93ZXIgZGlzc2lwYXRpb24uCisKK1RoZSBtYXhpbXVtIHZhbHVlIGZvciBUY3RsIGlzIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSB0ZW1wMV9tYXguCisKK0lmIHRoZSBCSU9TIGhhcyBlbmFibGVkIGhhcmR3YXJlIHRlbXBlcmF0dXJlIGNvbnRyb2wsIHRoZSB0aHJlc2hvbGQgYXQKK3doaWNoIHRoZSBwcm9jZXNzb3Igd2lsbCB0aHJvdHRsZSBpdHNlbGYgdG8gYXZvaWQgZGFtYWdlIGlzIGF2YWlsYWJsZSBpbgordGVtcDFfY3JpdCBhbmQgdGVtcDFfY3JpdF9oeXN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xpczNsdjAyZAppbmRleCBlZmZlOTQ5Li4wNjUzNGYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xpczNsdjAyZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xpczNsdjAyZApAQCAtMyw3ICszLDggQEAKIAogU3VwcG9ydGVkIGNoaXBzOgogCi0gICogU1RNaWNyb2VsZWN0cm9uaWNzIExJUzNMVjAyREwgYW5kIExJUzNMVjAyRFEKKyAgKiBTVE1pY3JvZWxlY3Ryb25pY3MgTElTM0xWMDJETCwgTElTM0xWMDJEUSAoMTIgYml0cyBwcmVjaXNpb24pCisgICogU1RNaWNyb2VsZWN0cm9uaWNzIExJUzMwMkRMLCBMSVMzTDAyRFEsIExJUzMzMURMICg4IGJpdHMpCiAKIEF1dGhvcnM6CiAgICAgICAgIFlhbiBCdXJtYW4gPGJ1cm1hbi55YW5AZ21haWwuY29tPgpAQCAtMTMsMzIgKzE0LDUyIEBACiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIAotVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGFjY2VsZXJvbWV0ZXIgZm91bmQgaW4gdmFyaW91cyBIUAotbGFwdG9wcyBzcG9ydGluZyB0aGUgZmVhdHVyZSBvZmZpY2lhbGx5IGNhbGxlZCAiSFAgTW9iaWxlIERhdGEKLVByb3RlY3Rpb24gU3lzdGVtIDNEIiBvciAiSFAgM0QgRHJpdmVHdWFyZCIuIEl0IGRldGVjdHMgYXV0b21hdGljYWxseQotbGFwdG9wcyB3aXRoIHRoaXMgc2Vuc29yLiBLbm93biBtb2RlbHMgKGZvciBub3cgdGhlIEhQIDIxMzMsIG5jNjQyMCwKLW5jMjUxMCwgbmM4NTEwLCBuYzg0eDAsIG53OTQ0MCBhbmQgbng5NDIwKSB3aWxsIGhhdmUgdGhlaXIgYXhpcwotYXV0b21hdGljYWxseSBvcmllbnRlZCBvbiBzdGFuZGFyZCB3YXkgKGVnOiB5b3UgY2FuIGRpcmVjdGx5IHBsYXkKLW5ldmVyYmFsbCkuICBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQotL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KK1RoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBhY2NlbGVyb21ldGVyIGZvdW5kIGluIHZhcmlvdXMgSFAgbGFwdG9wcworc3BvcnRpbmcgdGhlIGZlYXR1cmUgb2ZmaWNpYWxseSBjYWxsZWQgIkhQIE1vYmlsZSBEYXRhIFByb3RlY3Rpb24gU3lzdGVtIDNEIiBvcgorIkhQIDNEIERyaXZlR3VhcmQiLiBJdCBkZXRlY3RzIGF1dG9tYXRpY2FsbHkgbGFwdG9wcyB3aXRoIHRoaXMgc2Vuc29yLiBLbm93bgorbW9kZWxzIChmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIGRyaXZlcnMvaHdtb24vaHBfYWNjZWwuYykgd2lsbCBoYXZlIHRoZWlyCitheGlzIGF1dG9tYXRpY2FsbHkgb3JpZW50ZWQgb24gc3RhbmRhcmQgd2F5IChlZzogeW91IGNhbiBkaXJlY3RseSBwbGF5CituZXZlcmJhbGwpLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQorL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4gUmVwb3J0ZWQgdmFsdWVzIGFyZSBzY2FsZWQKK3RvIG1nIHZhbHVlcyAoMS8xMDAwdGggb2YgZWFydGggZ3Jhdml0eSkuCiAKIFN5c2ZzIGF0dHJpYnV0ZXMgdW5kZXIgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC86CiBwb3NpdGlvbiAtIDNEIHBvc2l0aW9uIHRoYXQgdGhlIGFjY2VsZXJvbWV0ZXIgcmVwb3J0cy4gRm9ybWF0OiAiKHgseSx6KSIKLWNhbGlicmF0ZSAtIHJlYWQ6IHZhbHVlcyAoeCwgeSwgeikgdGhhdCBhcmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgaW5wdXQKLQkJICBjbGFzcyBkZXZpY2Ugb3BlcmF0aW9uLgotICAgICAgICAgICAgd3JpdGU6IGZvcmNlcyB0aGUgYmFzZSB0byBiZSByZWNhbGlicmF0ZWQgd2l0aCB0aGUgY3VycmVudAotCQkgICBwb3NpdGlvbi4KLXJhdGUgLSByZXBvcnRzIHRoZSBzYW1wbGluZyByYXRlIG9mIHRoZSBhY2NlbGVyb21ldGVyIGRldmljZSBpbiBIWgorcmF0ZSAtIHJlYWQgcmVwb3J0cyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgYWNjZWxlcm9tZXRlciBkZXZpY2UgaW4gSFouCisJd3JpdGUgY2hhbmdlcyBzYW1wbGluZyByYXRlIG9mIHRoZSBhY2NlbGVyb21ldGVyIGRldmljZS4KKwlPbmx5IHZhbHVlcyB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IEhXIGFyZSBhY2NlcHRlZC4KK3NlbGZ0ZXN0IC0gcGVyZm9ybXMgc2VsZnRlc3QgZm9yIHRoZSBjaGlwIGFzIHNwZWNpZmllZCBieSBjaGlwIG1hbnVmYWN0dXJlci4KIAogVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCi10aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KK3RoZSBsYXB0b3AgdG8gYWN0IGFzIGEgcGluYmFsbCBtYWNoaW5lLWVzcXVlIGpveXN0aWNrLiBKb3lzdGljayBkZXZpY2UgY2FuIGJlCitjYWxpYnJhdGVkLiBKb3lzdGljayBkZXZpY2UgY2FuIGJlIGluIHR3byBkaWZmZXJlbnQgbW9kZXMuCitCeSBkZWZhdWx0IG91dHB1dCB2YWx1ZXMgYXJlIHNjYWxlZCBiZXR3ZWVuIC0zMjc2OCAuLiAzMjc2Ny4gSW4gam95c3RpY2sgcmF3Cittb2RlLCBqb3lzdGljayBhbmQgc3lzZnMgcG9zaXRpb24gZW50cnkgaGF2ZSB0aGUgc2FtZSBzY2FsZS4gVGhlcmUgY2FuIGJlCitzbWFsbCBkaWZmZXJlbmNlIGR1ZSB0byBpbnB1dCBzeXN0ZW0gZnV6emluZXNzIGZlYXR1cmUuCitFdmVudHMgYXJlIGFsc28gYXZhaWxhYmxlIGFzIGlucHV0IGV2ZW50IGRldmljZS4KKworU2VsZnRlc3QgaXMgbWVhbnQgb25seSBmb3IgaGFyZHdhcmUgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gSXQgaXMgbm90IG1lYW50IHRvIGJlCit1c2VkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9ucy4gUG9zaXRpb24gZGF0YSBpcyBub3QgY29ycnVwdGVkIGR1cmluZyBzZWxmdGVzdAorYnV0IGludGVycnVwdCBiZWhhdmlvdXIgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayByZWxpYWJseS4gSW4gdGVzdCBtb2RlLCB0aGUKK3NlbnNpbmcgZWxlbWVudCBpcyBpbnRlcm5hbGx5IG1vdmVkIGxpdHRsZSBiaXQuIFNlbGZ0ZXN0IG1lYXN1cmVzIGRpZmZlcmVuY2UKK2JldHdlZW4gbm9ybWFsIG1vZGUgYW5kIHRlc3QgbW9kZS4gQ2hpcCBzcGVjaWZpY2F0aW9ucyB0ZWxsIHRoZSBhY2NlcHRhbmNlCitsaW1pdCBmb3IgZWFjaCB0eXBlIG9mIHRoZSBjaGlwLiBMaW1pdHMgYXJlIHByb3ZpZGVkIHZpYSBwbGF0Zm9ybSBkYXRhCit0byBhbGxvdyBhZGp1c3RtZW50IG9mIHRoZSBsaW1pdHMgd2l0aG91dCBhIGNoYW5nZSB0byB0aGUgYWN0dWFsIGRyaXZlci4KK1NlbHRlc3QgcmV0dXJucyBlaXRoZXIgIk9LIHggeSB6IiBvciAiRkFJTCB4IHkgeiIgd2hlcmUgeCwgeSBhbmQgeiBhcmUKK21lYXN1cmVkIGRpZmZlcmVuY2UgYmV0d2VlbiBtb2Rlcy4gQXhlcyBhcmUgbm90IHJlbWFwcGVkIGluIHNlbGZ0ZXN0IG1vZGUuCitNZWFzdXJlbWVudCB2YWx1ZXMgYXJlIHByb3ZpZGVkIHRvIGhlbHAgSFcgZGlhZ25vc3RpYyBhcHBsaWNhdGlvbnMgdG8gbWFrZQorZmluYWwgZGVjaXNpb24uCisKK09uIEhQIGxhcHRvcHMsIGlmIHRoZSBsZWQgaW5mcmFzdHJ1Y3R1cmUgaXMgYWN0aXZhdGVkLCBzdXBwb3J0IGZvciBhIGxlZAoraW5kaWNhdGluZyBkaXNrIHByb3RlY3Rpb24gd2lsbCBiZSBwcm92aWRlZCBhcyAvc3lzL2NsYXNzL2xlZHMvaHA6OmhkZHByb3RlY3QuCiAKIEFub3RoZXIgZmVhdHVyZSBvZiB0aGUgZHJpdmVyIGlzIG1pc2MgZGV2aWNlIGNhbGxlZCAiZnJlZWZhbGwiIHRoYXQKIGFjdHMgc2ltaWxhciB0byAvZGV2L3J0YyBhbmQgcmVhY3RzIG9uIGZyZWUtZmFsbCBpbnRlcnJ1cHRzIHJlY2VpdmVkCiBmcm9tIHRoZSBkZXZpY2UuIEl0IHN1cHBvcnRzIGJsb2NraW5nIG9wZXJhdGlvbnMsIHBvbGwvc2VsZWN0IGFuZAogZmFzeW5jIG9wZXJhdGlvbiBtb2Rlcy4gWW91IG11c3QgcmVhZCAxIGJ5dGVzIGZyb20gdGhlIGRldmljZS4gIFRoZQogcmVzdWx0IGlzIG51bWJlciBvZiBmcmVlLWZhbGwgaW50ZXJydXB0cyBzaW5jZSB0aGUgbGFzdCBzdWNjZXNzZnVsCi1yZWFkIChvciAyNTUgaWYgbnVtYmVyIG9mIGludGVycnVwdHMgd291bGQgbm90IGZpdCkuCityZWFkIChvciAyNTUgaWYgbnVtYmVyIG9mIGludGVycnVwdHMgd291bGQgbm90IGZpdCkuIFNlZSB0aGUgaHBmYWxsLmMKK2ZpbGUgZm9yIGFuIGV4YW1wbGUgb24gdXNpbmcgdGhlIGRldmljZS4KIAogCiBBeGVzIG9yaWVudGF0aW9uCkBAIC01NSw3ICs3Niw3IEBACiAgKiBJZiB0aGUgbGFwdG9wIGlzIHB1dCB1cHNpZGUtZG93biwgWiBiZWNvbWVzIG5lZ2F0aXZlCiAKIElmIHlvdXIgbGFwdG9wIG1vZGVsIGlzIG5vdCByZWNvZ25pemVkIChjZiAiZG1lc2ciKSwgeW91IGNhbiBzZW5kIGFuCi1lbWFpbCB0byB0aGUgYXV0aG9ycyB0byBhZGQgaXQgdG8gdGhlIGRhdGFiYXNlLiAgV2hlbiByZXBvcnRpbmcgYSBuZXcKK2VtYWlsIHRvIHRoZSBtYWludGFpbmVyIHRvIGFkZCBpdCB0byB0aGUgZGF0YWJhc2UuICBXaGVuIHJlcG9ydGluZyBhIG5ldwogbGFwdG9wLCBwbGVhc2UgaW5jbHVkZSB0aGUgb3V0cHV0IG9mICJkbWlkZWNvZGUiIHBsdXMgdGhlIHZhbHVlIG9mCiAvc3lzL2RldmljZXMvcGxhdGZvcm0vbGlzM2x2MDJkL3Bvc2l0aW9uIGluIHRoZXNlIGZvdXIgY2FzZXMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3ZWhmIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKaW5kZXggMDJiNzQ4OS4uYjdlNDJlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKQEAgLTgxLDggKzgxLDE0IEBACiAJICAgMCAoc3RvcCkgdG8gMjU1IChmdWxsKQogCiBwd21bMS00XV9lbmFibGUgLSB0aGlzIGZpbGUgY29udHJvbHMgbW9kZSBvZiBmYW4vdGVtcGVyYXR1cmUgY29udHJvbDoKLQkqIDEgTWFudWFsIE1vZGUsIHdyaXRlIHRvIHB3bSBmaWxlIGFueSB2YWx1ZSAwLTI1NSAoZnVsbCBzcGVlZCkKLQkqIDIgVGhlcm1hbCBDcnVpc2UKKwkqIDEgTWFudWFsIG1vZGUsIHdyaXRlIHRvIHB3bSBmaWxlIGFueSB2YWx1ZSAwLTI1NSAoZnVsbCBzcGVlZCkKKwkqIDIgIlRoZXJtYWwgQ3J1aXNlIiBtb2RlCisJKiAzICJGYW4gU3BlZWQgQ3J1aXNlIiBtb2RlCisJKiA0ICJTbWFydCBGYW4gSUlJIiBtb2RlCisKK3B3bVsxLTRdX21vZGUgLSBjb250cm9scyBpZiBvdXRwdXQgaXMgUFdNIG9yIERDIGxldmVsCisgICAgICAgICogMCBEQyBvdXRwdXQgKDAgLSAxMnYpCisgICAgICAgICogMSBQV00gb3V0cHV0CiAKIFRoZXJtYWwgQ3J1aXNlIG1vZGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwppbmRleCA3ODYwYWFmLi4wYTc0NjAzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCkBAIC00NCw3ICs0NCw3IEBACiAJLyogaWYgZGV2aWNlIGF1dG9kZXRlY3Rpb24gaXMgbmVlZGVkOiAqLwogCS5jbGFzcwkJPSBJMkNfQ0xBU1NfU09NRVRISU5HLAogCS5kZXRlY3QJCT0gZm9vX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIAogCS5zaHV0ZG93bgk9IGZvb19zaHV0ZG93biwJLyogb3B0aW9uYWwgKi8KIAkuc3VzcGVuZAk9IGZvb19zdXNwZW5kLAkvKiBvcHRpb25hbCAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dCBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQKaW5kZXggNmQ0MGYwMC4uNjRlZWI1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvaXBvaWIudHh0CkBAIC0zNiwxMSArMzYsMTEgQEAKICAgZmFicmljIHdpdGggYSAySyBNVFUsIHRoZSBJUG9JQiBNVFUgd2lsbCBiZSAyMDQ4IC0gNCA9IDIwNDQgYnl0ZXMuCiAKICAgSW4gY29ubmVjdGVkIG1vZGUsIHRoZSBJQiBSQyAoUmVsaWFibGUgQ29ubmVjdGVkKSB0cmFuc3BvcnQgaXMgdXNlZC4KLSAgQ29ubmVjdGVkIG1vZGUgaXMgdG8gdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBjb25uZWN0ZWQgbmF0dXJlIG9mIHRoZQotICBJQiB0cmFuc3BvcnQgYW5kIGFsbG93cyBhbiBNVFUgdXAgdG8gdGhlIG1heGltYWwgSVAgcGFja2V0IHNpemUgb2YKLSAgNjRLLCB3aGljaCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgSVAgcGFja2V0cyBuZWVkZWQgZm9yIGhhbmRsaW5nCi0gIGxhcmdlIFVEUCBkYXRhZ3JhbXMsIFRDUCBzZWdtZW50cywgZXRjIGFuZCBpbmNyZWFzZXMgdGhlIHBlcmZvcm1hbmNlCi0gIGZvciBsYXJnZSBtZXNzYWdlcy4KKyAgQ29ubmVjdGVkIG1vZGUgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBjb25uZWN0ZWQgbmF0dXJlIG9mIHRoZSBJQgorICB0cmFuc3BvcnQgYW5kIGFsbG93cyBhbiBNVFUgdXAgdG8gdGhlIG1heGltYWwgSVAgcGFja2V0IHNpemUgb2YgNjRLLAorICB3aGljaCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgSVAgcGFja2V0cyBuZWVkZWQgZm9yIGhhbmRsaW5nIGxhcmdlIFVEUAorICBkYXRhZ3JhbXMsIFRDUCBzZWdtZW50cywgZXRjIGFuZCBpbmNyZWFzZXMgdGhlIHBlcmZvcm1hbmNlIGZvciBsYXJnZQorICBtZXNzYWdlcy4KIAogICBJbiBjb25uZWN0ZWQgbW9kZSwgdGhlIGludGVyZmFjZSdzIFVEIFFQIGlzIHN0aWxsIHVzZWQgZm9yIG11bHRpY2FzdAogICBhbmQgY29tbXVuaWNhdGlvbiB3aXRoIHBlZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBjb25uZWN0ZWQgbW9kZS4gSW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0CmluZGV4IGJiM2JmMzguLjZmOGMxY2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dApAQCAtMSwzICsxLDE3IEBACitPdXRwdXQgZmlsZXMKKworbW9kdWxlcy5vcmRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZmlsZSByZWNvcmRzIHRoZSBvcmRlciBpbiB3aGljaCBtb2R1bGVzIGFwcGVhciBpbiBNYWtlZmlsZXMuIFRoaXMKK2lzIHVzZWQgYnkgbW9kcHJvYmUgdG8gZGV0ZXJtaW5pc3RpY2FsbHkgcmVzb2x2ZSBhbGlhc2VzIHRoYXQgbWF0Y2gKK211bHRpcGxlIG1vZHVsZXMuCisKK21vZHVsZXMuYnVpbHRpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZmlsZSBsaXN0cyBhbGwgbW9kdWxlcyB0aGF0IGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgaXMgdXNlZAorYnkgbW9kcHJvYmUgdG8gbm90IGZhaWwgd2hlbiB0cnlpbmcgdG8gbG9hZCBzb21ldGhpbmcgYnVpbHRpbi4KKworCiBFbnZpcm9ubWVudCB2YXJpYWJsZXMKIAogS0NQUEZMQUdTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWcudHh0CmluZGV4IDg0OWI1ZTUuLjQ5ZWZhZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWcudHh0CkBAIC0xMDMsMTAgKzEwMywxNiBAQAogVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIHNwZWNpZnkgdGhlIHBhdGggJiBuYW1lIG9mIHRoZQogImF1dG8uY29uZiIgZmlsZS4gIEl0cyBkZWZhdWx0IHZhbHVlIGlzICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYiLgogCitLQ09ORklHX1RSSVNUQVRFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIHNwZWNpZnkgdGhlIHBhdGggJiBuYW1lIG9mIHRoZQorInRyaXN0YXRlLmNvbmYiIGZpbGUuICBJdHMgZGVmYXVsdCB2YWx1ZSBpcyAiaW5jbHVkZS9jb25maWcvdHJpc3RhdGUuY29uZiIuCisKIEtDT05GSUdfQVVUT0hFQURFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0byBzcGVjaWZ5IHRoZSBwYXRoICYgbmFtZSBvZiB0aGUKLSJhdXRvY29uZi5oIiAoaGVhZGVyKSBmaWxlLiAgSXRzIGRlZmF1bHQgdmFsdWUgaXMgImluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCIuCisiYXV0b2NvbmYuaCIgKGhlYWRlcikgZmlsZS4KK0l0cyBkZWZhdWx0IHZhbHVlIGlzICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIi4KIAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDNmODg2ZTIuLjViYTRkOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogCQkJTm8gZGVsYXkKIAogCWlwPQkJW0lQX1BOUF0KLQkJCVNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0LgorCQkJU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc3Jvb3QudHh0LgogCiAJaXAyPQkJW0hXXSBTZXQgSU8vSVJRIHBhaXJzIGZvciB1cCB0byA0IEludGVsbGlQb3J0IGJvYXJkcwogCQkJU2VlIGNvbW1lbnQgYmVmb3JlIGlwMl9zZXR1cCgpIGluCkBAIC0xNTUzLDEwICsxNTUzLDEwIEBACiAJCQlnb2luZyB0byBiZSByZW1vdmVkIGluIDIuNi4yOS4KIAogCW5mc2FkZHJzPQlbTkZTXQotCQkJU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQuCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzcm9vdC50eHQuCiAKIAluZnNyb290PQlbTkZTXSBuZnMgcm9vdCBmaWxlc3lzdGVtIGZvciBkaXNrLWxlc3MgYm94ZXMuCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dC4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNyb290LnR4dC4KIAogCW5mcy5jYWxsYmFja190Y3Bwb3J0PQogCQkJW05GU10gc2V0IHRoZSBUQ1AgcG9ydCBvbiB3aGljaCB0aGUgTkZTdjQgY2FsbGJhY2sKQEAgLTE3ODcsNiArMTc4NywxMSBAQAogCQkJd2FpdGluZyBmb3IgdGhlIEFDSywgc28gaWYgdGhpcyBpcyBzZXQgdG9vIGhpZ2gKIAkJCWludGVycnVwdHMgKm1heSogYmUgbG9zdCEKIAorCW9tYXBfbXV4PQlbT01BUF0gT3ZlcnJpZGUgYm9vdGxvYWRlciBwaW4gbXVsdGlwbGV4aW5nLgorCQkJRm9ybWF0OiA8bXV4X21vZGUwLm1vZGVfbmFtZT12YWx1ZT4uLi4KKwkJCUZvciBleGFtcGxlLCB0byBvdmVycmlkZSBJMkMgYnVzMjoKKwkJCW9tYXBfbXV4PWkyYzJfc2NsLmkyYzJfc2NsPTB4MTAwLGkyYzJfc2RhLmkyYzJfc2RhPTB4MTAwCisKIAlvcGwzPQkJW0hXLE9TU10KIAkJCUZvcm1hdDogPGlvPgogCkBAIC0yNzI0LDYgKzI3MjksMTEgQEAKIAl2bXBvZmY9CQlbS05MLFMzOTBdIFBlcmZvcm0gei9WTSBDUCBjb21tYW5kIGFmdGVyIHBvd2VyIG9mZi4KIAkJCUZvcm1hdDogPGNvbW1hbmQ+CiAKKwl2dC5jdXJfZGVmYXVsdD0JW1ZUXSBEZWZhdWx0IGN1cnNvciBzaGFwZS4KKwkJCUZvcm1hdDogMHhDQ0JCQUEsIHdoZXJlIEFBLCBCQiwgYW5kIENDIGFyZSB0aGUgc2FtZSBhcworCQkJdGhlIHBhcmFtZXRlcnMgb2YgdGhlIDxFc2M+Wz9BO0I7Q2MgZXNjYXBlIHNlcXVlbmNlOworCQkJc2VlIFZHQS1zb2Z0Y3Vyc29yLnR4dC4gRGVmYXVsdDogMiA9IHVuZGVybGluZS4KKwogCXZ0LmRlZmF1bHRfYmx1PQlbVlRdCiAJCQlGb3JtYXQ6IDxibHVlMD4sPGJsdWUxPiw8Ymx1ZTI+LC4uLiw8Ymx1ZTE1PgogCQkJQ2hhbmdlIHRoZSBkZWZhdWx0IGJsdWUgcGFsZXR0ZSBvZiB0aGUgY29uc29sZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAppbmRleCBhYWZjYWE2Li4xNjkwOTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CkBAIC0xLDcgKzEsNyBAQAogCQkgICAgIFRoaW5rUGFkIEFDUEkgRXh0cmFzIERyaXZlcgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAwLjIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFwcmlsIDEwdGgsIDIwMDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDAuMjQKKyAgICAgICAgICAgICAgICAgICAgICAgIERlY2VtYmVyIDExdGgsICAyMDA5CiAKICAgICAgICAgICAgICAgIEJvcmlzbGF2IERlaWFub3YgPGJvcmlzbGF2QHVzZXJzLnNmLm5ldD4KICAgICAgICAgICAgICBIZW5yaXF1ZSBkZSBNb3JhZXMgSG9sc2NodWggPGhtaEBobWguZW5nLmJyPgpAQCAtNDYwLDYgKzQ2MCw4IEBACiAJCQkJRm9yIExlbm92byBUaGlua1BhZHMgd2l0aCBhIG5ldwogCQkJCUJJT1MsIGl0IGhhcyB0byBiZSBoYW5kbGVkIGVpdGhlcgogCQkJCWJ5IHRoZSBBQ1BJIE9TSSwgb3IgYnkgdXNlcnNwYWNlLgorCQkJCVRoZSBkcml2ZXIgZG9lcyB0aGUgcmlnaHQgdGhpbmcsCisJCQkJbmV2ZXIgbWVzcyB3aXRoIHRoaXMuCiAweDEwMTEJMHgxMAlGTitFTkQJCUJyaWdodG5lc3MgZG93bi4gIFNlZSBicmlnaHRuZXNzCiAJCQkJdXAgZm9yIGRldGFpbHMuCiAKQEAgLTU4Miw0NiArNTg0LDE1IEBACiAKIEJyaWdodG5lc3MgaG90a2V5IG5vdGVzOgogCi1UaGVzZSBhcmUgdGhlIGN1cnJlbnQgc2FuZSBjaG9pY2VzIGZvciBicmlnaHRuZXNzIGtleSBtYXBwaW5nIGluCi10aGlua3BhZC1hY3BpOgorRG9uJ3QgbWVzcyB3aXRoIHRoZSBicmlnaHRuZXNzIGhvdGtleXMgaW4gYSBUaGlua3BhZC4gIElmIHlvdSB3YW50Citub3RpZmljYXRpb25zIGZvciBPU0QsIHVzZSB0aGUgc3lzZnMgYmFja2xpZ2h0IGNsYXNzIGV2ZW50IHN1cHBvcnQuCiAKLUZvciBJQk0gYW5kIExlbm92byBtb2RlbHMgKndpdGhvdXQqIEFDUEkgYmFja2xpZ2h0IGNvbnRyb2wgKHRoZSBvbmVzIG9uCi13aGljaCB0aGlua3BhZC1hY3BpIHdpbGwgYXV0b2xvYWQgaXRzIGJhY2tsaWdodCBpbnRlcmZhY2UgYnkgZGVmYXVsdCwKLWFuZCBvbiB3aGljaCBBQ1BJIHZpZGVvIGRvZXMgbm90IGV4cG9ydCBhIGJhY2tsaWdodCBpbnRlcmZhY2UpOgotCi0xLiBEb24ndCBlbmFibGUgb3IgbWFwIHRoZSBicmlnaHRuZXNzIGhvdGtleXMgaW4gdGhpbmtwYWQtYWNwaSwgYXMKLSAgIHRoZXNlIG9sZGVyIGZpcm13YXJlIHZlcnNpb25zIHVuZm9ydHVuYXRlbHkgd29uJ3QgcmVzcGVjdCB0aGUgaG90a2V5Ci0gICBtYXNrIGZvciBicmlnaHRuZXNzIGtleXMgYW55d2F5LCBhbmQgYWx3YXlzIHJlYWN0cyB0byB0aGVtLiAgVGhpcwotICAgdXN1YWxseSB3b3JrIGZpbmUsIHVubGVzcyBYLm9yZyBkcml2ZXJzIGFyZSBkb2luZyBzb21ldGhpbmcgdG8gYmxvY2sKLSAgIHRoZSBCSU9TLiAgSW4gdGhhdCBjYXNlLCB1c2UgKDMpIGJlbG93LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIG9mCi0gICBvcGVyYXRpb24uCi0KLTIuIEVuYWJsZSB0aGUgaG90a2V5cywgYnV0IG1hcCB0aGVtIHRvIHNvbWV0aGluZyBlbHNlIHRoYXQgaXMgTk9UCi0gICBLRVlfQlJJR0hUTkVTU19VUC9ET1dOIG9yIGFueSBvdGhlciBrZXljb2RlIHRoYXQgd291bGQgY2F1c2UKLSAgIHVzZXJzcGFjZSB0byB0cnkgdG8gY2hhbmdlIHRoZSBiYWNrbGlnaHQgbGV2ZWwsIGFuZCB1c2UgdGhhdCBhcyBhbgotICAgb24tc2NyZWVuLWRpc3BsYXkgaGludC4KLQotMy4gSUYgQU5EIE9OTFkgSUYgWC5vcmcgZHJpdmVycyBmaW5kIGEgd2F5IHRvIGJsb2NrIHRoZSBmaXJtd2FyZSBmcm9tCi0gICBhdXRvbWF0aWNhbGx5IGNoYW5naW5nIHRoZSBicmlnaHRuZXNzLCBlbmFibGUgdGhlIGhvdGtleXMgYW5kIG1hcAotICAgdGhlbSB0byBLRVlfQlJJR0hUTkVTU19VUCBhbmQgS0VZX0JSSUdIVE5FU1NfRE9XTiwgYW5kIGZlZWQgdGhhdCB0bwotICAgc29tZXRoaW5nIHRoYXQgY2FsbHMgeGJhY2tsaWdodC4gIHRoaW5rcGFkLWFjcGkgd2lsbCBub3QgYmUgYWJsZSB0bwotICAgY2hhbmdlIGJyaWdodG5lc3MgaW4gdGhhdCBjYXNlIGVpdGhlciwgc28geW91IHNob3VsZCBkaXNhYmxlIGl0cwotICAgYmFja2xpZ2h0IGludGVyZmFjZS4KLQotRm9yIExlbm92byBtb2RlbHMgKndpdGgqIEFDUEkgYmFja2xpZ2h0IGNvbnRyb2w6Ci0KLTEuIExvYWQgdXAgQUNQSSB2aWRlbyBhbmQgdXNlIHRoYXQuICBBQ1BJIHZpZGVvIHdpbGwgcmVwb3J0IEFDUEkKLSAgIGV2ZW50cyBmb3IgYnJpZ2h0bmVzcyBjaGFuZ2Uga2V5cy4gIERvIG5vdCBtZXNzIHdpdGggdGhpbmtwYWQtYWNwaQotICAgZGVmYXVsdHMgaW4gdGhpcyBjYXNlLiAgdGhpbmtwYWQtYWNwaSBzaG91bGQgbm90IGhhdmUgYW55dGhpbmcgdG8gZG8KLSAgIHdpdGggYmFja2xpZ2h0IGV2ZW50cyBpbiBhIHNjZW5hcmlvIHdoZXJlIEFDUEkgdmlkZW8gaXMgbG9hZGVkOgotICAgYnJpZ2h0bmVzcyBob3RrZXlzIG11c3QgYmUgZGlzYWJsZWQsIGFuZCB0aGUgYmFja2xpZ2h0IGludGVyZmFjZSBpcwotICAgdG8gYmUga2VwdCBkaXNhYmxlZCBhcyB3ZWxsLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIG9mIG9wZXJhdGlvbi4KLQotMi4gRG8gKk5PVCogbG9hZCB1cCBBQ1BJIHZpZGVvLCBlbmFibGUgdGhlIGhvdGtleXMgaW4gdGhpbmtwYWQtYWNwaSwKLSAgIGFuZCBtYXAgdGhlbSB0byBLRVlfQlJJR0hUTkVTU19VUCBhbmQgS0VZX0JSSUdIVE5FU1NfRE9XTi4gIFByb2Nlc3MKLSAgIHRoZXNlIGtleXMgb24gdXNlcnNwYWNlIHNvbWVob3cgKGUuZy4gYnkgY2FsbGluZyB4YmFja2xpZ2h0KS4KLSAgIFRoZSBkcml2ZXIgd2lsbCBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgaWYgaXQgZGV0ZWN0cyB0aGF0IEFDUEkgdmlkZW8KLSAgIGhhcyBiZWVuIGRpc2FibGVkLgorVGhlIGRyaXZlciB3aWxsIGlzc3VlIEtFWV9CUklHSFRORVNTX1VQIGFuZCBLRVlfQlJJR0hUTkVTU19ET1dOIGV2ZW50cworYXV0b21hdGljYWxseSBmb3IgdGhlIGNhc2VzIHdlcmUgdXNlcnNwYWNlIGhhcyB0byBkbyBzb21ldGhpbmcgdG8KK2ltcGxlbWVudCBicmlnaHRuZXNzIGNoYW5nZXMuICBXaGVuIHlvdSBvdmVycmlkZSB0aGVzZSBldmVudHMsIHlvdSB3aWxsCitlaXRoZXIgZmFpbCB0byBoYW5kbGUgcHJvcGVybHkgdGhlIFRoaW5rUGFkcyB0aGF0IHJlcXVpcmUgZXhwbGljaXQKK2FjdGlvbiB0byBjaGFuZ2UgYmFja2xpZ2h0IGJyaWdodG5lc3MsIG9yIHRoZSBUaGlua1BhZHMgdGhhdCByZXF1aXJlCit0aGF0IG5vIGFjdGlvbiBiZSB0YWtlbiB0byB3b3JrIHByb3Blcmx5LgogCiAKIEJsdWV0b290aApAQCAtMTEyMSwyNSArMTA5Miw2MSBAQAogICAgIGl0cyBsZXZlbCB1cCBhbmQgZG93biBhdCBldmVyeSBjaGFuZ2UuCiAKIAotVm9sdW1lIGNvbnRyb2wgLS0gL3Byb2MvYWNwaS9pYm0vdm9sdW1lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZvbHVtZSBjb250cm9sCistLS0tLS0tLS0tLS0tLQogCi1UaGlzIGZlYXR1cmUgYWxsb3dzIHZvbHVtZSBjb250cm9sIG9uIFRoaW5rUGFkIG1vZGVscyB3aGljaCBkb24ndCBoYXZlCi1hIGhhcmR3YXJlIHZvbHVtZSBrbm9iLiBUaGUgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZToKK3Byb2NmczogL3Byb2MvYWNwaS9pYm0vdm9sdW1lCitBTFNBOiAiVGhpbmtQYWQgQ29uc29sZSBBdWRpbyBDb250cm9sIiwgZGVmYXVsdCBJRDogIlRoaW5rUGFkRUMiCisKK05PVEU6IGJ5IGRlZmF1bHQsIHRoZSB2b2x1bWUgY29udHJvbCBpbnRlcmZhY2Ugb3BlcmF0ZXMgaW4gcmVhZC1vbmx5Cittb2RlLCBhcyBpdCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGZvciBvbi1zY3JlZW4tZGlzcGxheSBwdXJwb3Nlcy4KK1RoZSByZWFkL3dyaXRlIG1vZGUgY2FuIGJlIGVuYWJsZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZQorInZvbHVtZV9jb250cm9sPTEiIG1vZHVsZSBwYXJhbWV0ZXIuCisKK05PVEU6IGRpc3Ryb3MgYXJlIHVyZ2VkIHRvIG5vdCBlbmFibGUgdm9sdW1lX2NvbnRyb2wgYnkgZGVmYXVsdCwgdGhpcworc2hvdWxkIGJlIGRvbmUgYnkgdGhlIGxvY2FsIGFkbWluIG9ubHkuICBUaGUgVGhpbmtQYWQgVUkgaXMgZm9yIHRoZQorY29uc29sZSBhdWRpbyBjb250cm9sIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgdm9sdW1lIGtleXMgb25seSwgYW5kIGZvcgordGhlIGRlc2t0b3AgZW52aXJvbm1lbnQgdG8ganVzdCBwcm92aWRlIG9uLXNjcmVlbi1kaXNwbGF5IGZlZWRiYWNrLgorU29mdHdhcmUgdm9sdW1lIGNvbnRyb2wgc2hvdWxkIGJlIGRvbmUgb25seSBpbiB0aGUgbWFpbiBBQzk3L0hEQQorbWl4ZXIuCisKK1RoaXMgZmVhdHVyZSBhbGxvd3Mgdm9sdW1lIGNvbnRyb2wgb24gVGhpbmtQYWQgbW9kZWxzIHdpdGggYSBkaWdpdGFsCit2b2x1bWUga25vYiAod2hlbiBhdmFpbGFibGUsIG5vdCBhbGwgbW9kZWxzIGhhdmUgaXQpLCBhcyB3ZWxsIGFzCittdXRlL3VubXV0ZSBjb250cm9sLiAgVGhlIGF2YWlsYWJsZSBjb21tYW5kcyBhcmU6CiAKIAllY2hvIHVwICAgPi9wcm9jL2FjcGkvaWJtL3ZvbHVtZQogCWVjaG8gZG93biA+L3Byb2MvYWNwaS9pYm0vdm9sdW1lCiAJZWNobyBtdXRlID4vcHJvYy9hY3BpL2libS92b2x1bWUKKwllY2hvIHVubXV0ZSA+L3Byb2MvYWNwaS9pYm0vdm9sdW1lCiAJZWNobyAnbGV2ZWwgPGxldmVsPicgPi9wcm9jL2FjcGkvaWJtL3ZvbHVtZQogCi1UaGUgPGxldmVsPiBudW1iZXIgcmFuZ2UgaXMgMCB0byAxNSBhbHRob3VnaCBub3QgYWxsIG9mIHRoZW0gbWF5IGJlCitUaGUgPGxldmVsPiBudW1iZXIgcmFuZ2UgaXMgMCB0byAxNCBhbHRob3VnaCBub3QgYWxsIG9mIHRoZW0gbWF5IGJlCiBkaXN0aW5jdC4gVGhlIHVubXV0ZSB0aGUgdm9sdW1lIGFmdGVyIHRoZSBtdXRlIGNvbW1hbmQsIHVzZSBlaXRoZXIgdGhlCi11cCBvciBkb3duIGNvbW1hbmQgKHRoZSBsZXZlbCBjb21tYW5kIHdpbGwgbm90IHVubXV0ZSB0aGUgdm9sdW1lKS4KK3VwIG9yIGRvd24gY29tbWFuZCAodGhlIGxldmVsIGNvbW1hbmQgd2lsbCBub3QgdW5tdXRlIHRoZSB2b2x1bWUpLCBvcgordGhlIHVubXV0ZSBjb21tYW5kLgorCiBUaGUgY3VycmVudCB2b2x1bWUgbGV2ZWwgYW5kIG11dGUgc3RhdGUgaXMgc2hvd24gaW4gdGhlIGZpbGUuCiAKLVRoZSBBTFNBIG1peGVyIGludGVyZmFjZSB0byB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgbWlzc2luZywgYnV0IHBhdGNoZXMKLXRvIGFkZCBpdCBleGlzdC4gIFRoYXQgcHJvYmxlbSBzaG91bGQgYmUgYWRkcmVzc2VkIGluIHRoZSBub3Qgc28KLWRpc3RhbnQgZnV0dXJlLgorWW91IGNhbiB1c2UgdGhlIHZvbHVtZV9jYXBhYmlsaXRpZXMgcGFyYW1ldGVyIHRvIHRlbGwgdGhlIGRyaXZlcgord2hldGhlciB5b3VyIHRoaW5rcGFkIGhhcyB2b2x1bWUgY29udHJvbCBvciBtdXRlLW9ubHkgY29udHJvbDoKK3ZvbHVtZV9jYXBhYmlsaXRpZXM9MSBmb3IgbWl4ZXJzIHdpdGggbXV0ZSBhbmQgdm9sdW1lIGNvbnRyb2wsCit2b2x1bWVfY2FwYWJpbGl0aWVzPTIgZm9yIG1peGVycyB3aXRoIG9ubHkgbXV0ZSBjb250cm9sLgorCitJZiB0aGUgZHJpdmVyIG1pc2RldGVjdHMgdGhlIGNhcGFiaWxpdGllcyBmb3IgeW91ciBUaGlua1BhZCBtb2RlbCwKK3BsZWFzZSByZXBvcnQgdGhpcyB0byBpYm0tYWNwaS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQsIHNvIHRoYXQgd2UKK2NhbiB1cGRhdGUgdGhlIGRyaXZlci4KKworVGhlcmUgYXJlIHR3byBzdHJhdGVnaWVzIGZvciB2b2x1bWUgY29udHJvbC4gIFRvIHNlbGVjdCB3aGljaCBvbmUKK3Nob3VsZCBiZSB1c2VkLCB1c2UgdGhlIHZvbHVtZV9tb2RlIG1vZHVsZSBwYXJhbWV0ZXI6IHZvbHVtZV9tb2RlPTEKK3NlbGVjdHMgRUMgbW9kZSwgYW5kIHZvbHVtZV9tb2RlPTMgc2VsZWN0cyBFQyBtb2RlIHdpdGggTlZSQU0gYmFja2luZworKHNvIHRoYXQgdm9sdW1lL211dGUgY2hhbmdlcyBhcmUgcmVtZW1iZXJlZCBhY3Jvc3Mgc2h1dGRvd24vcmVib290KS4KKworVGhlIGRyaXZlciB3aWxsIG9wZXJhdGUgaW4gdm9sdW1lX21vZGU9MyBieSBkZWZhdWx0LiBJZiB0aGF0IGRvZXMgbm90Cit3b3JrIHdlbGwgb24geW91ciBUaGlua1BhZCBtb2RlbCwgcGxlYXNlIHJlcG9ydCB0aGlzIHRvCitpYm0tYWNwaS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQuCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIEFMU0EgbW9kdWxlIHBhcmFtZXRlcnMuICBJZiB0aGUgQUxTQQorbWl4ZXIgaXMgZGlzYWJsZWQsIHRoZSBkcml2ZXIgd2lsbCBkaXNhYmxlIGFsbCB2b2x1bWUgZnVuY3Rpb25hbGl0eS4KIAogCiBGYW4gY29udHJvbCBhbmQgbW9uaXRvcmluZzogZmFuIHNwZWVkLCBmYW4gZW5hYmxlL2Rpc2FibGUKQEAgLTE0MDUsNiArMTQxMiw3IEBACiAJMHgwMDA4CQkJSEtFWSBldmVudCBpbnRlcmZhY2UsIGhvdGtleXMKIAkweDAwMTAJCQlGYW4gY29udHJvbAogCTB4MDAyMAkJCUJhY2tsaWdodCBicmlnaHRuZXNzCisJMHgwMDQwCQkJQXVkaW8gbWl4ZXIvdm9sdW1lIGNvbnRyb2wKIAogVGhlcmUgaXMgYWxzbyBhIGtlcm5lbCBidWlsZCBvcHRpb24gdG8gZW5hYmxlIG1vcmUgZGVidWdnaW5nCiBpbmZvcm1hdGlvbiwgd2hpY2ggbWF5IGJlIG5lY2Vzc2FyeSB0byBkZWJ1ZyBkcml2ZXIgcHJvYmxlbXMuCkBAIC0xNDY1LDMgKzE0NzMsOSBAQAogCQlhbmQgaXQgaXMgYWx3YXlzIGFibGUgdG8gZGlzYWJsZSBob3Qga2V5cy4gIFZlcnkgb2xkCiAJCXRoaW5rcGFkcyBhcmUgcHJvcGVybHkgc3VwcG9ydGVkLiAgaG90a2V5X2Jpb3NfbWFzawogCQlpcyBkZXByZWNhdGVkIGFuZCBtYXJrZWQgZm9yIHJlbW92YWwuCisKKzB4MDIwNjAwOglNYXJrZXIgZm9yIGJhY2tsaWdodCBjaGFuZ2UgZXZlbnQgc3VwcG9ydC4KKworMHgwMjA3MDA6CVN1cHBvcnQgZm9yIG11dGUtb25seSBtaXhlcnMuCisJCVZvbHVtZSBjb250cm9sIGluIHJlYWQtb25seSBtb2RlIGJ5IGRlZmF1bHQuCisJCU1hcmtlciBmb3IgQUxTQSBtaXhlciBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sb2Nrc3RhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2xvY2tzdGF0LnR4dAppbmRleCA5Y2I5MTM4Li42NWY0Yzc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xvY2tzdGF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tzdGF0LnR4dApAQCAtNjIsOCArNjIsMjAgQEAKIEl0IGFsc28gdHJhY2tzIDQgY29udGVudGlvbiBwb2ludHMgcGVyIGNsYXNzLiBBIGNvbnRlbnRpb24gcG9pbnQgaXMgYSBjYWxsIHNpdGUKIHRoYXQgaGFkIHRvIHdhaXQgb24gbG9jayBhY3F1aXNpdGlvbi4KIAorIC0gQ09ORklHVVJBVElPTgorCitMb2NrIHN0YXRpc3RpY3MgYXJlIGVuYWJsZWQgdmlhIENPTkZJR19MT0NLX1NUQVRTLgorCiAgLSBVU0FHRQogCitFbmFibGUgY29sbGVjdGlvbiBvZiBzdGF0aXN0aWNzOgorCisjIGVjaG8gMSA+L3Byb2Mvc3lzL2tlcm5lbC9sb2NrX3N0YXQKKworRGlzYWJsZSBjb2xsZWN0aW9uIG9mIHN0YXRpc3RpY3M6CisKKyMgZWNobyAwID4vcHJvYy9zeXMva2VybmVsL2xvY2tfc3RhdAorCiBMb29rIGF0IHRoZSBjdXJyZW50IGxvY2sgc3RhdGlzdGljczoKIAogKCBsaW5lIG51bWJlcnMgbm90IHBhcnQgb2YgYWN0dWFsIG91dHB1dCwgZG9uZSBmb3IgY2xhcml0eSBpbiB0aGUgZXhwbGFuYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggNGVkZDM5ZS4uMTg4ZjQ3NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTIzMyw5ICsyMzMsOSBAQAogCiAgIHJlc3luY19zdGFydAogICAgICBUaGUgcG9pbnQgYXQgd2hpY2ggcmVzeW5jIHNob3VsZCBzdGFydC4gIElmIG5vIHJlc3luYyBpcyBuZWVkZWQsCi0gICAgIHRoaXMgd2lsbCBiZSBhIHZlcnkgbGFyZ2UgbnVtYmVyLiAgQXQgYXJyYXkgY3JlYXRpb24gaXQgd2lsbAotICAgICBkZWZhdWx0IHRvIDAsIHRob3VnaCBzdGFydGluZyB0aGUgYXJyYXkgYXMgJ2NsZWFuJyB3aWxsCi0gICAgIHNldCBpdCBtdWNoIGxhcmdlci4KKyAgICAgdGhpcyB3aWxsIGJlIGEgdmVyeSBsYXJnZSBudW1iZXIgKG9yICdub25lJyBzaW5jZSAyLjYuMzAtcmMxKS4gIEF0CisgICAgIGFycmF5IGNyZWF0aW9uIGl0IHdpbGwgZGVmYXVsdCB0byAwLCB0aG91Z2ggc3RhcnRpbmcgdGhlIGFycmF5IGFzCisgICAgICdjbGVhbicgd2lsbCBzZXQgaXQgbXVjaCBsYXJnZXIuCiAKICAgIG5ld19kZXYKICAgICAgVGhpcyBmaWxlIGNhbiBiZSB3cml0dGVuIGJ1dCBub3QgcmVhZC4gIFRoZSB2YWx1ZSB3cml0dGVuIHNob3VsZApAQCAtMjk2LDYgKzI5Niw1MSBAQAogICAgICBhY3RpdmUtaWRsZQogICAgICAgICAgbGlrZSBhY3RpdmUsIGJ1dCBubyB3cml0ZXMgaGF2ZSBiZWVuIHNlZW4gZm9yIGEgd2hpbGUgKHNhZmVfbW9kZV9kZWxheSkuCiAKKyAgYml0bWFwL2xvY2F0aW9uCisgICAgIFRoaXMgaW5kaWNhdGVzIHdoZXJlIHRoZSB3cml0ZS1pbnRlbnQgYml0bWFwIGZvciB0aGUgYXJyYXkgaXMKKyAgICAgc3RvcmVkLgorICAgICBJdCBjYW4gYmUgb25lIG9mICJub25lIiwgImZpbGUiIG9yICJbKy1dTiIuCisgICAgICJmaWxlIiBtYXkgbGF0ZXIgYmUgZXh0ZW5kZWQgdG8gImZpbGU6L2ZpbGUvbmFtZSIKKyAgICAgIlsrLV1OIiBtZWFucyB0aGF0IG1hbnkgc2VjdG9ycyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbWV0YWRhdGEuCisgICAgICAgVGhpcyBpcyByZXBsaWNhdGVkIG9uIGFsbCBkZXZpY2VzLiAgRm9yIGFycmF5cyB3aXRoIGV4dGVybmFsbHkKKyAgICAgICBtYW5hZ2VkIG1ldGFkYXRhLCB0aGUgb2Zmc2V0IGlzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAgICBkZXZpY2UuCisgIGJpdG1hcC9jaHVua3NpemUKKyAgICAgVGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgY2h1bmsgd2hpY2ggd2lsbCBiZSByZXByZXNlbnRlZCBieSBhCisgICAgIHNpbmdsZSBiaXQuICBGb3IgUkFJRDQ1NiwgaXQgaXMgYSBwb3J0aW9uIG9mIGFuIGluZGl2aWR1YWwKKyAgICAgZGV2aWNlLiBGb3IgUkFJRDEwLCBpdCBpcyBhIHBvcnRpb24gb2YgdGhlIGFycmF5LiAgRm9yIFJBSUQxLCBpdAorICAgICBpcyBib3RoICh0aGV5IGNvbWUgdG8gdGhlIHNhbWUgdGhpbmcpLgorICBiaXRtYXAvdGltZV9iYXNlCisgICAgIFRoZSB0aW1lLCBpbiBzZWNvbmRzLCBiZXR3ZWVuIGxvb2tpbmcgZm9yIGJpdHMgaW4gdGhlIGJpdG1hcCB0bworICAgICBiZSBjbGVhcmVkLiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYSBiaXQgd2lsbCBiZSBjbGVhcmVkCisgICAgIGJldHdlZW4gMiBhbmQgMyB0aW1lcyAidGltZV9iYXNlIiBhZnRlciBhbGwgdGhlIGNvdmVyZWQgYmxvY2tzCisgICAgIGFyZSBrbm93biB0byBiZSBpbi1zeW5jLgorICBiaXRtYXAvYmFja2xvZworICAgICBXaGVuIHdyaXRlLW1vc3RseSBkZXZpY2VzIGFyZSBhY3RpdmUgaW4gYSBSQUlEMSwgd3JpdGUgcmVxdWVzdHMKKyAgICAgdG8gdGhvc2UgZGV2aWNlcyBwcm9jZWVkIGluIHRoZSBiYWNrZ3JvdW5kIC0gdGhlIGZpbGVzeXN0ZW0gKG9yCisgICAgIG90aGVyIHVzZXIgb2YgdGhlIGRldmljZSkgZG9lcyBub3QgaGF2ZSB0byB3YWl0IGZvciB0aGVtLgorICAgICAnYmFja2xvZycgc2V0cyBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY29uY3VycmVudCBiYWNrZ3JvdW5kCisgICAgIHdyaXRlcy4gIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdGhpcywgbmV3IHdyaXRlcyB3aWxsIGJ5CisgICAgIHN5bmNocm9ub3VzLgorICBiaXRtYXAvbWV0YWRhdGEKKyAgICAgVGhpcyBjYW4gYmUgZWl0aGVyICdpbnRlcm5hbCcgb3IgJ2V4dGVybmFsJy4KKyAgICAgJ2ludGVybmFsJyBpcyB0aGUgZGVmYXVsdCBhbmQgbWVhbnMgdGhlIG1ldGFkYXRhIGZvciB0aGUgYml0bWFwCisgICAgIGlzIHN0b3JlZCBpbiB0aGUgZmlyc3QgMjU2IGJ5dGVzIG9mIHRoZSBhbGxvY2F0ZWQgc3BhY2UgYW5kIGlzCisgICAgIG1hbmFnZWQgYnkgdGhlIG1kIG1vZHVsZS4KKyAgICAgJ2V4dGVybmFsJyBtZWFucyB0aGF0IGJpdG1hcCBtZXRhZGF0YSBpcyBtYW5hZ2VkIGV4dGVybmFsbHkgdG8KKyAgICAgdGhlIGtlcm5lbCAoaS5lLiBieSBzb21lIHVzZXJzcGFjZSBwcm9ncmFtKQorICBiaXRtYXAvY2FuX2NsZWFyCisgICAgIFRoaXMgaXMgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnLiAgSWYgJ3RydWUnLCB0aGVuIGJpdHMgaW4gdGhlCisgICAgIGJpdG1hcCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBibG9ja3MgYXJlIHRob3VnaHQKKyAgICAgdG8gYmUgaW4tc3luYy4gIElmICdmYWxzZScsIGJpdHMgd2lsbCBuZXZlciBiZSBjbGVhcmVkLgorICAgICBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICdmYWxzZScgaWYgYSB3cml0ZSBoYXBwZW5zIG9uIGEKKyAgICAgZGVncmFkZWQgYXJyYXksIG9yIGlmIHRoZSBhcnJheSBiZWNvbWVzIGRlZ3JhZGVkIGR1cmluZyBhIHdyaXRlLgorICAgICBXaGVuIG1ldGFkYXRhIGlzIG1hbmFnZWQgZXh0ZXJuYWxseSwgaXQgc2hvdWxkIGJlIHNldCB0byB0cnVlCisgICAgIG9uY2UgdGhlIGFycmF5IGJlY29tZXMgbm9uLWRlZ3JhZGVkLCBhbmQgdGhpcyBmYWN0IGhhcyBiZWVuCisgICAgIHJlY29yZGVkIGluIHRoZSBtZXRhZGF0YS4KKyAgICAgCisgICAgIAorICAgICAKIAogQXMgY29tcG9uZW50IGRldmljZXMgYXJlIGFkZGVkIHRvIGFuIG1kIGFycmF5LCB0aGV5IGFwcGVhciBpbiB0aGUgJ21kJwogZGlyZWN0b3J5IGFzIG5ldyBkaXJlY3RvcmllcyBuYW1lZApAQCAtMzM0LDggKzM3OSw5IEBACiAJV3JpdGluZyAid3JpdGVtb3N0bHkiIHNldHMgdGhlIHdyaXRlbW9zdGx5IGZsYWcuCiAJV3JpdGluZyAiLXdyaXRlbW9zdGx5IiBjbGVhcnMgdGhlIHdyaXRlbW9zdGx5IGZsYWcuCiAJV3JpdGluZyAiYmxvY2tlZCIgc2V0cyB0aGUgImJsb2NrZWQiIGZsYWcuCi0JV3JpdGluZyAiLWJsb2NrZWQiIGNsZWFyIHRoZSAiYmxvY2tlZCIgZmxhZyBhbmQgYWxsb3dzIHdyaXRlcworCVdyaXRpbmcgIi1ibG9ja2VkIiBjbGVhcnMgdGhlICJibG9ja2VkIiBmbGFnIGFuZCBhbGxvd3Mgd3JpdGVzCiAJCXRvIGNvbXBsZXRlLgorCVdyaXRpbmcgImluX3N5bmMiIHNldHMgdGhlIGluX3N5bmMgZmxhZy4KIAogCVRoaXMgZmlsZSByZXNwb25kcyB0byBzZWxlY3QvcG9sbC4gQW55IGNoYW5nZSB0byAnZmF1bHR5JwogCW9yICdibG9ja2VkJyBjYXVzZXMgYW4gZXZlbnQuCkBAIC0zNzIsNiArNDE4LDI0IEBACiAgICAgICAgIGFycmF5LiAgSWYgYSB2YWx1ZSBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgY29tcG9uZW50X3NpemUgaXMKICAgICAgICAgd3JpdHRlbiwgaXQgd2lsbCBiZSByZWplY3RlZC4KIAorICAgICAgcmVjb3Zlcnlfc3RhcnQKKworICAgICAgICBXaGVuIHRoZSBkZXZpY2UgaXMgbm90ICdpbl9zeW5jJywgdGhpcyByZWNvcmRzIHRoZSBudW1iZXIgb2YKKwlzZWN0b3JzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkZXZpY2Ugd2hpY2ggYXJlIGtub3duIHRvIGJlCisJY29ycmVjdC4gIFRoaXMgaXMgbm9ybWFsbHkgemVybywgYnV0IGR1cmluZyBhIHJlY292ZXJ5CisJb3BlcmF0aW9uIGlzIHdpbGwgc3RlYWRpbHkgaW5jcmVhc2UsIGFuZCBpZiB0aGUgcmVjb3ZlcnkgaXMKKwlpbnRlcnJ1cHRlZCwgcmVzdG9yaW5nIHRoaXMgdmFsdWUgY2FuIGNhdXNlIHJlY292ZXJ5IHRvCisJYXZvaWQgcmVwZWF0aW5nIHRoZSBlYXJsaWVyIGJsb2Nrcy4gIFdpdGggdjEueCBtZXRhZGF0YSwgdGhpcworCXZhbHVlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBhdXRvbWF0aWNhbGx5LgorCisJVGhpcyBjYW4gYmUgc2V0IHdoZW5ldmVyIHRoZSBkZXZpY2UgaXMgbm90IGFuIGFjdGl2ZSBtZW1iZXIgb2YKKwl0aGUgYXJyYXksIGVpdGhlciBiZWZvcmUgdGhlIGFycmF5IGlzIGFjdGl2YXRlZCwgb3IgYmVmb3JlCisJdGhlICdzbG90JyBpcyBzZXQuCisKKwlTZXR0aW5nIHRoaXMgdG8gJ25vbmUnIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyAnaW5fc3luYycuCisJU2V0dGluZyB0byBhbnkgb3RoZXIgdmFsdWUgYWxzbyBjbGVhcnMgdGhlICdpbl9zeW5jJyBmbGFnLgorCQorCiAKIEFuIGFjdGl2ZSBtZCBkZXZpY2Ugd2lsbCBhbHNvIGNvbnRhaW4gYW5kIGVudHJ5IGZvciBlYWNoIGFjdGl2ZSBkZXZpY2UKIGluIHRoZSBhcnJheS4gIFRoZXNlIGFyZSBuYW1lZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktaG90cGx1Zy50eHQgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1ob3RwbHVnLnR4dAppbmRleCBiYmM4YTZhLi41N2U3ZTljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1ob3RwbHVnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1ob3RwbHVnLnR4dApAQCAtMTYwLDEyICsxNjAsMTUgQEAKIE5PVEU6CiAgIFRoZXNlIGRpcmVjdG9yaWVzL2ZpbGVzIGFwcGVhciBhZnRlciBwaHlzaWNhbCBtZW1vcnkgaG90cGx1ZyBwaGFzZS4KIAotSWYgQ09ORklHX05VTUEgaXMgZW5hYmxlZCB0aGUKLS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVhYWCBtZW1vcnkgc2VjdGlvbgotZGlyZWN0b3JpZXMgY2FuIGFsc28gYmUgYWNjZXNzZWQgdmlhIHN5bWJvbGljIGxpbmtzIGxvY2F0ZWQgaW4KLXRoZSAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSogZGlyZWN0b3JpZXMuICBGb3IgZXhhbXBsZToKK0lmIENPTkZJR19OVU1BIGlzIGVuYWJsZWQgdGhlIG1lbW9yeVhYWC8gZGlyZWN0b3JpZXMgY2FuIGFsc28gYmUgYWNjZXNzZWQKK3ZpYSBzeW1ib2xpYyBsaW5rcyBsb2NhdGVkIGluIHRoZSAvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSogZGlyZWN0b3JpZXMuCisKK0ZvciBleGFtcGxlOgogL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUwL21lbW9yeTkgLT4gLi4vLi4vbWVtb3J5L21lbW9yeTkKIAorQSBiYWNrbGluayB3aWxsIGFsc28gYmUgY3JlYXRlZDoKKy9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeTkvbm9kZTAgLT4gLi4vLi4vbm9kZS9ub2RlMAorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNC4gUGh5c2ljYWwgbWVtb3J5IGhvdC1hZGQgcGhhc2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9hZDUyNXhfZHBvdC50eHQgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9hZDUyNXhfZHBvdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5NDEzYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2FkNTI1eF9kcG90LnR4dApAQCAtMCwwICsxLDU3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQUQ1MjV4IERpZ2l0YWwgUG90ZW50aW9tZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYWQ1MjV4X2Rwb3QgZHJpdmVyIGV4cG9ydHMgYSBzaW1wbGUgc3lzZnMgaW50ZXJmYWNlLiAgVGhpcyBhbGxvd3MgeW91IHRvCit3b3JrIHdpdGggdGhlIGltbWVkaWF0ZSByZXNpc3RhbmNlIHNldHRpbmdzIGFzIHdlbGwgYXMgdXBkYXRlIHRoZSBzYXZlZCBzdGFydHVwCitzZXR0aW5ncy4gIEFjY2VzcyB0byB0aGUgZmFjdG9yeSBwcm9ncmFtbWVkIHRvbGVyYW5jZSBpcyBhbHNvIHByb3ZpZGVkLCBidXQKK2ludGVycHJldGF0aW9uIG9mIHRoaXMgc2V0dGluZ3MgaXMgcmVxdWlyZWQgYnkgdGhlIGVuZCBhcHBsaWNhdGlvbiBhY2NvcmRpbmcgdG8KK3RoZSBzcGVjaWZpYyBwYXJ0IGluIHVzZS4KKworLS0tLS0tLS0tCisgIEZpbGVzCistLS0tLS0tLS0KKworRWFjaCBkcG90IGRldmljZSB3aWxsIGhhdmUgYSBzZXQgb2YgZWVwcm9tLCByZGFjLCBhbmQgdG9sZXJhbmNlIGZpbGVzLiAgSG93CittYW55IGRlcGVuZHMgb24gdGhlIGFjdHVhbCBwYXJ0IHlvdSBoYXZlLCBhcyB3aWxsIHRoZSByYW5nZSBvZiBhbGxvd2VkIHZhbHVlcy4KKworVGhlIGVlcHJvbSBmaWxlcyBhcmUgdXNlZCB0byBwcm9ncmFtIHRoZSBzdGFydHVwIHZhbHVlIG9mIHRoZSBkZXZpY2UuCisKK1RoZSByZGFjIGZpbGVzIGFyZSB1c2VkIHRvIHByb2dyYW0gdGhlIGltbWVkaWF0ZSB2YWx1ZSBvZiB0aGUgZGV2aWNlLgorCitUaGUgdG9sZXJhbmNlIGZpbGVzIGFyZSB0aGUgcmVhZC1vbmx5IGZhY3RvcnkgcHJvZ3JhbW1lZCB0b2xlcmFuY2Ugc2V0dGluZ3MKK2FuZCBtYXkgdmFyeSBncmVhdGx5IG9uIGEgcGFydC1ieS1wYXJ0IGJhc2lzLiAgRm9yIGV4YWN0IGludGVycHJldGF0aW9uIG9mCit0aGlzIGZpZWxkLCBwbGVhc2UgY29uc3VsdCB0aGUgZGF0YXNoZWV0IGZvciB5b3VyIHBhcnQuICBUaGlzIGlzIHByZXNlbnRlZAorYXMgYSBoZXggZmlsZSBmb3IgZWFzaWVyIHBhcnNpbmcuCisKKy0tLS0tLS0tLS0tCisgIEV4YW1wbGUKKy0tLS0tLS0tLS0tCisKK0xvY2F0ZSB0aGUgZGV2aWNlIGluIHlvdXIgc3lzZnMgdHJlZS4gIFRoaXMgaXMgcHJvYmFibHkgZWFzaWVzdCBieSBnb2luZyBpbnRvCit0aGUgY29tbW9uIGkyYyBkaXJlY3RvcnkgYW5kIGxvY2F0aW5nIHRoZSBkZXZpY2UgYnkgdGhlIGkyYyBzbGF2ZSBhZGRyZXNzLgorCisJIyBscyAvc3lzL2J1cy9pMmMvZGV2aWNlcy8KKwkwLTAwMjIgIDAtMDAyNyAgMC0wMDJmCisKK1NvIGFzc3VtaW5nIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gaXMgb24gdGhlIGZpcnN0IGkyYyBidXMgYW5kIGhhcyB0aGUgc2xhdmUKK2FkZHJlc3Mgb2YgMHgyZiwgd2UgZGVzY2VuZCAodW5yZWxhdGVkIHN5c2ZzIGVudHJpZXMgaGF2ZSBiZWVuIHRyaW1tZWQpLgorCisJIyBscyAvc3lzL2J1cy9pMmMvZGV2aWNlcy8wLTAwMmYvCisJZWVwcm9tMCByZGFjMCB0b2xlcmFuY2UwCisKK1lvdSBjYW4gdXNlIHNpbXBsZSByZWFkcy93cml0ZXMgdG8gYWNjZXNzIHRoZXNlIGZpbGVzOgorCisJIyBjZCAvc3lzL2J1cy9pMmMvZGV2aWNlcy8wLTAwMmYvCisKKwkjIGNhdCBlZXByb20wCisJMAorCSMgZWNobyAxMCA+IGVlcHJvbTAKKwkjIGNhdCBlZXByb20wCisJMTAKKworCSMgY2F0IHJkYWMwCisJNQorCSMgZWNobyAzID4gcmRhYzAKKwkjIGNhdCByZGFjMAorCTMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggMDA2YjM5ZC4uYzUzMjg4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTY5Miw2ICs2OTIsMjUgQEAKIAljb25mL3thbGwsaW50ZXJmYWNlfS9wcm94eV9hcnAgaXMgc2V0IHRvIFRSVUUsCiAJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKIAorcHJveHlfYXJwX3B2bGFuIC0gQk9PTEVBTgorCVByaXZhdGUgVkxBTiBwcm94eSBhcnAuCisJQmFzaWNhbGx5IGFsbG93IHByb3h5IGFycCByZXBsaWVzIGJhY2sgdG8gdGhlIHNhbWUgaW50ZXJmYWNlCisJKGZyb20gd2hpY2ggdGhlIEFSUCByZXF1ZXN0L3NvbGljaXRhdGlvbiB3YXMgcmVjZWl2ZWQpLgorCisJVGhpcyBpcyBkb25lIHRvIHN1cHBvcnQgKGV0aGVybmV0KSBzd2l0Y2ggZmVhdHVyZXMsIGxpa2UgUkZDCisJMzA2OSwgd2hlcmUgdGhlIGluZGl2aWR1YWwgcG9ydHMgYXJlIE5PVCBhbGxvd2VkIHRvCisJY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyLCBidXQgdGhleSBhcmUgYWxsb3dlZCB0byB0YWxrIHRvCisJdGhlIHVwc3RyZWFtIHJvdXRlci4gIEFzIGRlc2NyaWJlZCBpbiBSRkMgMzA2OSwgaXQgaXMgcG9zc2libGUKKwl0byBhbGxvdyB0aGVzZSBob3N0cyB0byBjb21tdW5pY2F0ZSB0aHJvdWdoIHRoZSB1cHN0cmVhbQorCXJvdXRlciBieSBwcm94eV9hcnAnaW5nLiBEb24ndCBuZWVkIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAorCXByb3h5X2FycC4KKworCVRoaXMgdGVjaG5vbG9neSBpcyBrbm93biBieSBkaWZmZXJlbnQgbmFtZXM6CisJICBJbiBSRkMgMzA2OSBpdCBpcyBjYWxsZWQgVkxBTiBBZ2dyZWdhdGlvbi4KKwkgIENpc2NvIGFuZCBBbGxpZWQgVGVsZXN5biBjYWxsIGl0IFByaXZhdGUgVkxBTi4KKwkgIEhld2xldHQtUGFja2FyZCBjYWxsIGl0IFNvdXJjZS1Qb3J0IGZpbHRlcmluZyBvciBwb3J0LWlzb2xhdGlvbi4KKwkgIEVyaWNzc29uIGNhbGwgaXQgTUFDLUZvcmNlZCBGb3J3YXJkaW5nIChSRkMgRHJhZnQpLgorCiBzaGFyZWRfbWVkaWEgLSBCT09MRUFOCiAJU2VuZChyb3V0ZXIpIG9yIGFjY2VwdChob3N0KSBSRkMxNjIwIHNoYXJlZCBtZWRpYSByZWRpcmVjdHMuCiAJT3ZlcnJpZGVzIGlwX3NlY3VyZV9yZWRpcmVjdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmV2Zi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmV2Zi50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTkwMTVkZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZXZmLnR4dApAQCAtMCwwICsxLDkwIEBACitMaW51eCogQmFzZSBEcml2ZXIgZm9yIEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm92ZW1iZXIgMjQsIDIwMDkKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBLbm93biBJc3N1ZXMvVHJvdWJsZXNob290aW5nCistIFN1cHBvcnQKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaXhnYmV2ZiBMaW51eCogQmFzZSBEcml2ZXIgZm9yIEludGVsIE5ldHdvcmsKK0Nvbm5lY3Rpb24uCisKK1RoZSBpeGdiZXZmIGRyaXZlciBzdXBwb3J0cyA4MjU5OS1iYXNlZCB2aXJ0dWFsIGZ1bmN0aW9uIGRldmljZXMgdGhhdCBjYW4gb25seQorYmUgYWN0aXZhdGVkIG9uIGtlcm5lbHMgd2l0aCBDT05GSUdfUENJX0lPViBlbmFibGVkLgorCitUaGUgaXhnYmV2ZiBkcml2ZXIgc3VwcG9ydHMgdmlydHVhbCBmdW5jdGlvbnMgZ2VuZXJhdGVkIGJ5IHRoZSBpeGdiZSBkcml2ZXIKK3dpdGggYSBtYXhfdmZzIHZhbHVlIG9mIDEgb3IgZ3JlYXRlci4KKworVGhlIGd1ZXN0IE9TIGxvYWRpbmcgdGhlIGl4Z2JldmYgZHJpdmVyIG11c3Qgc3VwcG9ydCBNU0ktWCBpbnRlcnJ1cHRzLgorCitWTEFOczogVGhlcmUgaXMgYSBsaW1pdCBvZiBhIHRvdGFsIG9mIDMyIHNoYXJlZCBWTEFOcyB0byAxIG9yIG1vcmUgVkZzLgorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmCitEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL3NiL0NTLTAwODQ0MS5odG0KKworS25vd24gSXNzdWVzL1Ryb3VibGVzaG9vdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFVubG9hZGluZyBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIERyaXZlciBDYXVzZXMgU3lzdGVtIFJlYm9vdHMgV2hlbiBWTSBpcworICBSdW5uaW5nIGFuZCBWRiBpcyBMb2FkZWQgb24gdGhlIFZNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEbyBub3QgdW5sb2FkIHRoZSBQRiBkcml2ZXIgKGl4Z2JlKSB3aGlsZSBWRnMgYXJlIGFzc2lnbmVkIHRvIGd1ZXN0cy4KKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKKworICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAKKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZAordG8gdGhlIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNmLm5ldAorCitMaWNlbnNlCis9PT09PT09CisKK0ludGVsIDEwIEdpZ2FiaXQgTGludXggZHJpdmVyLgorQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3ZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCit0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK1RoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCit0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCitUcmFkZW1hcmtzCis9PT09PT09PT09CisKK0ludGVsLCBJdGFuaXVtLCBhbmQgUGVudGl1bSBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YKK0ludGVsIENvcnBvcmF0aW9uIG9yIGl0cyBzdWJzaWRpYXJpZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyCitjb3VudHJpZXMuCisKKyogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0CmluZGV4IGVlMzEzNjkuLjk1NTE2MjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmVndWxhdG9yeS50eHQKQEAgLTE4OCwzICsxODgsMjcgQEAKIAkJICAgICAgICZteWRyaXZlcl9qcF9yZWdkb20ucmVnX3J1bGVzW2ldLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKIAlyZWd1bGF0b3J5X3N0cnVjdF9oaW50KHJkKTsKKworU3RhdGljYWxseSBjb21waWxlZCByZWd1bGF0b3J5IGRhdGFiYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gbW9zdCBzaXR1YXRpb25zIHRoZSB1c2VybGFuZCBzb2x1dGlvbiB1c2luZyBDUkRBIGFzIGRlc2NyaWJlZAorYWJvdmUgaXMgdGhlIHByZWZlcnJlZCBzb2x1dGlvbi4gIEhvd2V2ZXIgaW4gc29tZSBjYXNlcyBhIHNldCBvZgorcnVsZXMgYnVpbHQgaW50byB0aGUga2VybmVsIGl0c2VsZiBtYXkgYmUgZGVzaXJhYmxlLiAgVG8gYWNjb3VudAorZm9yIHRoaXMgc2l0dWF0aW9uLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhhcyBiZWVuIHByb3ZpZGVkCisoaS5lLiBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIpLiAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLAordGhlIHdpcmVsZXNzIGRhdGFiYXNlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBuZXQvd2lyZWxlc3MvZGIudHh0IGlzCit1c2VkIHRvIGdlbmVyYXRlIGEgZGF0YSBzdHJ1Y3R1cmUgZW5jb2RlZCBpbiBuZXQvd2lyZWxlc3MvcmVnZGIuYy4KK1RoYXQgb3B0aW9uIGFsc28gZW5hYmxlcyBjb2RlIGluIG5ldC93aXJlbGVzcy9yZWcuYyB3aGljaCBxdWVyaWVzCit0aGUgZGF0YSBpbiByZWdkYi5jIGFzIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIENSREEuCisKK1RoZSBmaWxlIG5ldC93aXJlbGVzcy9kYi50eHQgc2hvdWxkIGJlIGtlcHQgdXAtdG8tZGF0ZSB3aXRoIHRoZSBkYi50eHQKK2ZpbGUgYXZhaWxhYmxlIGluIHRoZSBnaXQgcmVwb3NpdG9yeSBoZXJlOgorCisgICAgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXJlZ2RiLmdpdAorCitBZ2FpbiwgbW9zdCB1c2VycyBpbiBtb3N0IHNpdHVhdGlvbnMgc2hvdWxkIGJlIHVzaW5nIHRoZSBDUkRBIHBhY2thZ2UKK3Byb3ZpZGVkIHdpdGggdGhlaXIgZGlzdHJpYnV0aW9uLCBhbmQgaW4gbW9zdCBvdGhlciBzaXR1YXRpb25zIHVzZXJzCitzaG91bGQgYmUgYnVpbGRpbmcgYW5kIHVzaW5nIENSREEgb24gdGhlaXIgb3duIHJhdGhlciB0aGFuIHVzaW5nCit0aGlzIG9wdGlvbi4gIElmIHlvdSBhcmUgbm90IGFic29sdXRlbHkgc3VyZSB0aGF0IHlvdSBzaG91bGQgYmUgdXNpbmcKK0NPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQiB0aGVuIF9ET19OT1RfVVNFX0lUXy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0CmluZGV4IGI1NjVlODIuLjhlMWRkZWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ub21tdS1tbWFwLnR4dApAQCAtMTE5LDYgKzExOSwzMiBAQAogICAgICBncmFudWxlIGJ1dCB3aWxsIG9ubHkgZGlzY2FyZCB0aGUgZXhjZXNzIGlmIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCBhcwogICAgICB0aGlzIGhhcyBhbiBlZmZlY3Qgb24gZnJhZ21lbnRhdGlvbi4KIAorICgqKSBUaGUgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHJlcXVlc3QgZm9yIGFuIGFub255bW91cyBtYXBwaW5nIHdpbGwgbm9ybWFsbHkKKyAgICAgYmUgY2xlYXJlZCBieSB0aGUga2VybmVsIGJlZm9yZSBiZWluZyByZXR1cm5lZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICAgIExpbnV4IG1hbiBwYWdlcyAodmVyIDIuMjIgb3IgbGF0ZXIpLgorCisgICAgIEluIHRoZSBNTVUgY2FzZSB0aGlzIGNhbiBiZSBhY2hpZXZlZCB3aXRoIHJlYXNvbmFibGUgcGVyZm9ybWFuY2UgYXMKKyAgICAgcmVnaW9ucyBhcmUgYmFja2VkIGJ5IHZpcnR1YWwgcGFnZXMsIHdpdGggdGhlIGNvbnRlbnRzIG9ubHkgYmVpbmcgbWFwcGVkCisgICAgIHRvIGNsZWFyZWQgcGh5c2ljYWwgcGFnZXMgd2hlbiBhIHdyaXRlIGhhcHBlbnMgb24gdGhhdCBzcGVjaWZpYyBwYWdlCisgICAgIChwcmlvciB0byB3aGljaCwgdGhlIHBhZ2VzIGFyZSBlZmZlY3RpdmVseSBtYXBwZWQgdG8gdGhlIGdsb2JhbCB6ZXJvIHBhZ2UKKyAgICAgZnJvbSB3aGljaCByZWFkcyBjYW4gdGFrZSBwbGFjZSkuICBUaGlzIHNwcmVhZHMgb3V0IHRoZSB0aW1lIGl0IHRha2VzIHRvCisgICAgIGluaXRpYWxpemUgdGhlIGNvbnRlbnRzIG9mIGEgcGFnZSAtIGRlcGVuZGluZyBvbiB0aGUgd3JpdGUtdXNhZ2Ugb2YgdGhlCisgICAgIG1hcHBpbmcuCisKKyAgICAgSW4gdGhlIG5vLU1NVSBjYXNlLCBob3dldmVyLCBhbm9ueW1vdXMgbWFwcGluZ3MgYXJlIGJhY2tlZCBieSBwaHlzaWNhbAorICAgICBwYWdlcywgYW5kIHRoZSBlbnRpcmUgbWFwIGlzIGNsZWFyZWQgYXQgYWxsb2NhdGlvbiB0aW1lLiAgVGhpcyBjYW4gY2F1c2UKKyAgICAgc2lnbmlmaWNhbnQgZGVsYXlzIGR1cmluZyBhIHVzZXJzcGFjZSBtYWxsb2MoKSBhcyB0aGUgQyBsaWJyYXJ5IGRvZXMgYW4KKyAgICAgYW5vbnltb3VzIG1hcHBpbmcgYW5kIHRoZSBrZXJuZWwgdGhlbiBkb2VzIGEgbWVtc2V0IGZvciB0aGUgZW50aXJlIG1hcC4KKworICAgICBIb3dldmVyLCBmb3IgbWVtb3J5IHRoYXQgaXNuJ3QgcmVxdWlyZWQgdG8gYmUgcHJlY2xlYXJlZCAtIHN1Y2ggYXMgdGhhdAorICAgICByZXR1cm5lZCBieSBtYWxsb2MoKSAtIG1tYXAoKSBjYW4gdGFrZSBhIE1BUF9VTklOSVRJQUxJWkVEIGZsYWcgdG8KKyAgICAgaW5kaWNhdGUgdG8gdGhlIGtlcm5lbCB0aGF0IGl0IHNob3VsZG4ndCBib3RoZXIgY2xlYXJpbmcgdGhlIG1lbW9yeSBiZWZvcmUKKyAgICAgcmV0dXJuaW5nIGl0LiAgTm90ZSB0aGF0IENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQgbXVzdCBiZSBlbmFibGVkCisgICAgIHRvIHBlcm1pdCB0aGlzLCBvdGhlcndpc2UgdGhlIGZsYWcgd2lsbCBiZSBpZ25vcmVkLgorCisgICAgIHVDbGliYyB1c2VzIHRoaXMgdG8gc3BlZWQgdXAgbWFsbG9jKCksIGFuZCB0aGUgRUxGLUZEUElDIGJpbmZtdCB1c2VzIHRoaXMKKyAgICAgdG8gYWxsb2NhdGUgdGhlIGJyayBhbmQgc3RhY2sgcmVnaW9uLgorCiAgKCopIEEgbGlzdCBvZiBhbGwgdGhlIHByaXZhdGUgY29weSBhbmQgYW5vbnltb3VzIG1hcHBpbmdzIG9uIHRoZSBzeXN0ZW0gaXMKICAgICAgdmlzaWJsZSB0aHJvdWdoIC9wcm9jL21hcHMgaW4gbm8tTU1VIG1vZGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CmluZGV4IDRhMzEwOWIuLjM1NmZkODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dApAQCAtNDIsODAgKzQyLDgxIEBACiAJLi4uCiB9OwogCi1UaGUgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi10aGUgZGV2aWNlIGJlaW5nIHN1c3BlbmRlZC4gIFRoZSBidXMgdHlwZSdzIGNhbGxiYWNrIGlzIHRoZW4gX2VudGlyZWx5XwotX3Jlc3BvbnNpYmxlXyBmb3IgaGFuZGxpbmcgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QKLWluY2x1ZGUgZXhlY3V0aW5nIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgKGZyb20gdGhlCi1QTSBjb3JlJ3MgcG9pbnQgb2YgdmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9zdXNwZW5kKCkKLWNhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkga25vd3MKLXdoYXQgdG8gZG8gdG8gaGFuZGxlIHRoZSBkZXZpY2UpLgorVGhlIC0+cnVudGltZV9zdXNwZW5kKCksIC0+cnVudGltZV9yZXN1bWUoKSBhbmQgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFja3MgYXJlCitleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgZWl0aGVyIHRoZSBidXMgdHlwZSwgb3IgZGV2aWNlIHR5cGUgKGlmIHRoZSBidXMKK3R5cGUncyBjYWxsYmFjayBpcyBub3QgZGVmaW5lZCksIG9yIGRldmljZSBjbGFzcyAoaWYgdGhlIGJ1cyB0eXBlJ3MgYW5kIGRldmljZQordHlwZSdzIGNhbGxiYWNrcyBhcmUgbm90IGRlZmluZWQpIG9mIGdpdmVuIGRldmljZS4gIFRoZSBidXMgdHlwZSwgZGV2aWNlIHR5cGUKK2FuZCBkZXZpY2UgY2xhc3MgY2FsbGJhY2tzIGFyZSByZWZlcnJlZCB0byBhcyBzdWJzeXN0ZW0tbGV2ZWwgY2FsbGJhY2tzIGluIHdoYXQKK2ZvbGxvd3MuCiAKLSAgKiBPbmNlIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKK1RoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBpcyBfZW50aXJlbHlfIF9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nCit0aGUgc3VzcGVuZCBvZiB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdCBpbmNsdWRlCitleGVjdXRpbmcgdGhlIGRldmljZSBkcml2ZXIncyBvd24gLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayAoZnJvbSB0aGUKK1BNIGNvcmUncyBwb2ludCBvZiB2aWV3IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IGEgLT5ydW50aW1lX3N1c3BlbmQoKQorY2FsbGJhY2sgaW4gYSBkZXZpY2UgZHJpdmVyIGFzIGxvbmcgYXMgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrCitrbm93cyB3aGF0IHRvIGRvIHRvIGhhbmRsZSB0aGUgZGV2aWNlKS4KKworICAqIE9uY2UgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CiAgICAgZm9yIGdpdmVuIGRldmljZSwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIHN1c3BlbmRlZCwgd2hpY2ggbmVlZAogICAgIG5vdCBtZWFuIHRoYXQgdGhlIGRldmljZSBoYXMgYmVlbiBwdXQgaW50byBhIGxvdyBwb3dlciBzdGF0ZS4gIEl0IGlzCiAgICAgc3VwcG9zZWQgdG8gbWVhbiwgaG93ZXZlciwgdGhhdCB0aGUgZGV2aWNlIHdpbGwgbm90IHByb2Nlc3MgZGF0YSBhbmQgd2lsbAotICAgIG5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBDUFUocykgYW5kIFJBTSB1bnRpbCBpdHMgYnVzIHR5cGUncwotICAgIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBmb3IgaXQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzIG9mCi0gICAgYSBkZXZpY2UgYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgaXRzIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKQotICAgIGNhbGxiYWNrIGlzICdzdXNwZW5kZWQnLgorICAgIG5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBDUFUocykgYW5kIFJBTSB1bnRpbCB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZQorICAgIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGZvciBpdC4gIFRoZSBydW4tdGltZSBQTSBzdGF0dXMgb2YgYSBkZXZpY2UgYWZ0ZXIKKyAgICBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgaXMgJ3N1c3BlbmRlZCcuCiAKLSAgKiBJZiB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIHJldHVybnMgLUVCVVNZIG9yIC1FQUdBSU4sCi0gICAgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyBpcyBzdXBwb3NlZCB0byBiZSAnYWN0aXZlJywgd2hpY2ggbWVhbnMgdGhhdAotICAgIHRoZSBkZXZpY2UgX211c3RfIGJlIGZ1bGx5IG9wZXJhdGlvbmFsIGFmdGVyd2FyZHMuCisgICogSWYgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrIHJldHVybnMgLUVCVVNZIG9yIC1FQUdBSU4sCisgICAgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyBpcyAnYWN0aXZlJywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGV2aWNlCisgICAgX211c3RfIGJlIGZ1bGx5IG9wZXJhdGlvbmFsIGFmdGVyd2FyZHMuCiAKLSAgKiBJZiB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZQotICAgIGRpZmZlcmVudCBmcm9tIC1FQlVTWSBvciAtRUFHQUlOLCB0aGUgUE0gY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbAotICAgIGVycm9yIGFuZCB3aWxsIHJlZnVzZSB0byBydW4gdGhlIGhlbHBlciBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNAotICAgIGZvciB0aGUgZGV2aWNlLCB1bnRpbCB0aGUgc3RhdHVzIG9mIGl0IGlzIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScKLSAgICBvciB0byAnc3VzcGVuZGVkJyAodGhlIFBNIGNvcmUgcHJvdmlkZXMgc3BlY2lhbCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGlzCi0gICAgcHVycG9zZSkuCisgICogSWYgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSBkaWZmZXJlbnQKKyAgICBmcm9tIC1FQlVTWSBvciAtRUFHQUlOLCB0aGUgUE0gY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbAorICAgIHJlZnVzZSB0byBydW4gdGhlIGhlbHBlciBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwKKyAgICB1bnRpbCB0aGUgc3RhdHVzIG9mIGl0IGlzIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScsIG9yIHRvICdzdXNwZW5kZWQnCisgICAgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhpcyBwdXJwb3NlKS4KIAotSW4gcGFydGljdWxhciwgaWYgdGhlIGRyaXZlciByZXF1aXJlcyByZW1vdGUgd2FrZXVwIGNhcGFiaWxpdHkgZm9yIHByb3BlcgotZnVuY3Rpb25pbmcgYW5kIGRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ2ZhbHNlJyBmb3IgdGhlIGRldmljZSwgdGhlbgotLT5ydW50aW1lX3N1c3BlbmQoKSBzaG91bGQgcmV0dXJuIC1FQlVTWS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgotZGV2aWNlX3J1bl93YWtlKCkgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaXMgcHV0Ci1pbnRvIGEgbG93IHBvd2VyIHN0YXRlIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGl0cyBidXMgdHlwZSdzCi0tPnJ1bnRpbWVfc3VzcGVuZCgpLCBpdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSB3YWtlLXVwIChpLmUuIGhhcmR3YXJlIG1lY2hhbmlzbQotYWxsb3dpbmcgdGhlIGRldmljZSB0byByZXF1ZXN0IGEgY2hhbmdlIG9mIGl0cyBwb3dlciBzdGF0ZSwgc3VjaCBhcyBQQ0kgUE1FKQotd2lsbCBiZSBlbmFibGVkIGZvciB0aGUgZGV2aWNlLiAgR2VuZXJhbGx5LCByZW1vdGUgd2FrZS11cCBzaG91bGQgYmUgZW5hYmxlZAotZm9yIGFsbCBpbnB1dCBkZXZpY2VzIHB1dCBpbnRvIGEgbG93IHBvd2VyIHN0YXRlIGF0IHJ1biB0aW1lLgorSW4gcGFydGljdWxhciwgaWYgdGhlIGRyaXZlciByZXF1aXJlcyByZW1vdGUgd2FrZS11cCBjYXBhYmlsaXR5IChpLmUuIGhhcmR3YXJlCittZWNoYW5pc20gYWxsb3dpbmcgdGhlIGRldmljZSB0byByZXF1ZXN0IGEgY2hhbmdlIG9mIGl0cyBwb3dlciBzdGF0ZSwgc3VjaCBhcworUENJIFBNRSkgZm9yIHByb3BlciBmdW5jdGlvbmluZyBhbmQgZGV2aWNlX3J1bl93YWtlKCkgcmV0dXJucyAnZmFsc2UnIGZvciB0aGUKK2RldmljZSwgdGhlbiAtPnJ1bnRpbWVfc3VzcGVuZCgpIHNob3VsZCByZXR1cm4gLUVCVVNZLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmCitkZXZpY2VfcnVuX3dha2UoKSByZXR1cm5zICd0cnVlJyBmb3IgdGhlIGRldmljZSBhbmQgdGhlIGRldmljZSBpcyBwdXQgaW50byBhIGxvdworcG93ZXIgc3RhdGUgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrLCBpdCBpcworZXhwZWN0ZWQgdGhhdCByZW1vdGUgd2FrZS11cCB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UuICBHZW5lcmFsbHksIHJlbW90ZQord2FrZS11cCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgYWxsIGlucHV0IGRldmljZXMgcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUgYXQKK3J1biB0aW1lLgogCi1UaGUgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGJ5IHRoZSBQTSBjb3JlIGZvciB0aGUgYnVzIHR5cGUgb2YKLXRoZSBkZXZpY2UgYmVpbmcgd29rZW4gdXAuICBUaGUgYnVzIHR5cGUncyBjYWxsYmFjayBpcyB0aGVuIF9lbnRpcmVseV8KLV9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90Ci1pbmNsdWRlIGV4ZWN1dGluZyB0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgKGZyb20gdGhlCi1QTSBjb3JlJ3MgcG9pbnQgb2YgdmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9yZXN1bWUoKQotY2FsbGJhY2sgaW4gYSBkZXZpY2UgZHJpdmVyIGFzIGxvbmcgYXMgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGtub3dzCi13aGF0IHRvIGRvIHRvIGhhbmRsZSB0aGUgZGV2aWNlKS4KK1RoZSBzdWJzeXN0ZW0tbGV2ZWwgcmVzdW1lIGNhbGxiYWNrIGlzIF9lbnRpcmVseV8gX3Jlc3BvbnNpYmxlXyBmb3IgaGFuZGxpbmcgdGhlCityZXN1bWUgb2YgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QgaW5jbHVkZSBleGVjdXRpbmcKK3RoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayAoZnJvbSB0aGUgUE0gY29yZSdzIHBvaW50IG9mCit2aWV3IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IGEgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIGluIGEgZGV2aWNlCitkcml2ZXIgYXMgbG9uZyBhcyB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBrbm93cyB3aGF0IHRvIGRvIHRvIGhhbmRsZQordGhlIGRldmljZSkuCiAKLSAgKiBPbmNlIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKLSAgICB0aGUgUE0gY29yZSByZWdhcmRzIHRoZSBkZXZpY2UgYXMgZnVsbHkgb3BlcmF0aW9uYWwsIHdoaWNoIG1lYW5zIHRoYXQgdGhlCi0gICAgZGV2aWNlIF9tdXN0XyBiZSBhYmxlIHRvIGNvbXBsZXRlIEkvTyBvcGVyYXRpb25zIGFzIG5lZWRlZC4gIFRoZSBydW4tdGltZQotICAgIFBNIHN0YXR1cyBvZiB0aGUgZGV2aWNlIGlzIHRoZW4gJ2FjdGl2ZScuCisgICogT25jZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdGhlIFBNCisgICAgY29yZSByZWdhcmRzIHRoZSBkZXZpY2UgYXMgZnVsbHkgb3BlcmF0aW9uYWwsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRldmljZQorICAgIF9tdXN0XyBiZSBhYmxlIHRvIGNvbXBsZXRlIEkvTyBvcGVyYXRpb25zIGFzIG5lZWRlZC4gIFRoZSBydW4tdGltZSBQTSBzdGF0dXMKKyAgICBvZiB0aGUgZGV2aWNlIGlzIHRoZW4gJ2FjdGl2ZScuCiAKLSAgKiBJZiB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGUgUE0KLSAgICBjb3JlIHJlZ2FyZHMgdGhpcyBhcyBhIGZhdGFsIGVycm9yIGFuZCB3aWxsIHJlZnVzZSB0byBydW4gdGhlIGhlbHBlcgotICAgIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0IGZvciB0aGUgZGV2aWNlLCB1bnRpbCBpdHMgc3RhdHVzIGlzCi0gICAgZGlyZWN0bHkgc2V0IGVpdGhlciB0byAnYWN0aXZlJyBvciB0byAnc3VzcGVuZGVkJyAodGhlIFBNIGNvcmUgcHJvdmlkZXMKLSAgICBzcGVjaWFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoaXMgcHVycG9zZSkuCisgICogSWYgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGUgUE0gY29yZQorICAgIHJlZ2FyZHMgdGhpcyBhcyBhIGZhdGFsIGVycm9yIGFuZCB3aWxsIHJlZnVzZSB0byBydW4gdGhlIGhlbHBlciBmdW5jdGlvbnMKKyAgICBkZXNjcmliZWQgaW4gU2VjdGlvbiA0IGZvciB0aGUgZGV2aWNlLCB1bnRpbCBpdHMgc3RhdHVzIGlzIGRpcmVjdGx5IHNldAorICAgIGVpdGhlciB0byAnYWN0aXZlJyBvciB0byAnc3VzcGVuZGVkJyAodGhlIFBNIGNvcmUgcHJvdmlkZXMgc3BlY2lhbCBoZWxwZXIKKyAgICBmdW5jdGlvbnMgZm9yIHRoaXMgcHVycG9zZSkuCiAKLVRoZSAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGJ5IHRoZSBQTSBjb3JlIGZvciB0aGUgYnVzIHR5cGUgb2YKLWdpdmVuIGRldmljZSB3aGVuZXZlciB0aGUgZGV2aWNlIGFwcGVhcnMgdG8gYmUgaWRsZSwgd2hpY2ggaXMgaW5kaWNhdGVkIHRvIHRoZQotUE0gY29yZSBieSB0d28gY291bnRlcnMsIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyIGFuZCB0aGUgY291bnRlciBvZiAnYWN0aXZlJwotY2hpbGRyZW4gb2YgdGhlIGRldmljZS4KK1RoZSBzdWJzeXN0ZW0tbGV2ZWwgaWRsZSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSB3aGVuZXZlciB0aGUgZGV2aWNlCithcHBlYXJzIHRvIGJlIGlkbGUsIHdoaWNoIGlzIGluZGljYXRlZCB0byB0aGUgUE0gY29yZSBieSB0d28gY291bnRlcnMsIHRoZQorZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgdGhlIGNvdW50ZXIgb2YgJ2FjdGl2ZScgY2hpbGRyZW4gb2YgdGhlIGRldmljZS4KIAogICAqIElmIGFueSBvZiB0aGVzZSBjb3VudGVycyBpcyBkZWNyZWFzZWQgdXNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gcHJvdmlkZWQgYnkKICAgICB0aGUgUE0gY29yZSBhbmQgaXQgdHVybnMgb3V0IHRvIGJlIGVxdWFsIHRvIHplcm8sIHRoZSBvdGhlciBjb3VudGVyIGlzCiAgICAgY2hlY2tlZC4gIElmIHRoYXQgY291bnRlciBhbHNvIGlzIGVxdWFsIHRvIHplcm8sIHRoZSBQTSBjb3JlIGV4ZWN1dGVzIHRoZQotICAgIGRldmljZSBidXMgdHlwZSdzIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2sgKHdpdGggdGhlIGRldmljZSBhcyBhbgotICAgIGFyZ3VtZW50KS4KKyAgICBzdWJzeXN0ZW0tbGV2ZWwgaWRsZSBjYWxsYmFjayB3aXRoIHRoZSBkZXZpY2UgYXMgYW4gYXJndW1lbnQuCiAKLVRoZSBhY3Rpb24gcGVyZm9ybWVkIGJ5IGEgYnVzIHR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGlzIHRvdGFsbHkKLWRlcGVuZGVudCBvbiB0aGUgYnVzIHR5cGUgaW4gcXVlc3Rpb24sIGJ1dCB0aGUgZXhwZWN0ZWQgYW5kIHJlY29tbWVuZGVkIGFjdGlvbgotaXMgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIChpLmUuIGlmIGFsbCBvZiB0aGUgY29uZGl0aW9ucwotbmVjZXNzYXJ5IGZvciBzdXNwZW5kaW5nIHRoZSBkZXZpY2UgYXJlIHNhdGlzZmllZCkgYW5kIHRvIHF1ZXVlIHVwIGEgc3VzcGVuZAotcmVxdWVzdCBmb3IgdGhlIGRldmljZSBpbiB0aGF0IGNhc2UuICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBjYWxsYmFjayBpcwotaWdub3JlZCBieSB0aGUgUE0gY29yZS4KK1RoZSBhY3Rpb24gcGVyZm9ybWVkIGJ5IGEgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgaXMgdG90YWxseSBkZXBlbmRlbnQgb24KK3RoZSBzdWJzeXN0ZW0gaW4gcXVlc3Rpb24sIGJ1dCB0aGUgZXhwZWN0ZWQgYW5kIHJlY29tbWVuZGVkIGFjdGlvbiBpcyB0byBjaGVjaworaWYgdGhlIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIChpLmUuIGlmIGFsbCBvZiB0aGUgY29uZGl0aW9ucyBuZWNlc3NhcnkgZm9yCitzdXNwZW5kaW5nIHRoZSBkZXZpY2UgYXJlIHNhdGlzZmllZCkgYW5kIHRvIHF1ZXVlIHVwIGEgc3VzcGVuZCByZXF1ZXN0IGZvciB0aGUKK2RldmljZSBpbiB0aGF0IGNhc2UuICBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBjYWxsYmFjayBpcyBpZ25vcmVkIGJ5IHRoZSBQTQorY29yZS4KIAogVGhlIGhlbHBlciBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIFBNIGNvcmUsIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQsIGd1YXJhbnRlZQogdGhhdCB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzIGFyZSBtZXQgd2l0aCByZXNwZWN0IHRvIHRoZSBidXMgdHlwZSdzIHJ1bi10aW1lCkBAIC0yMzgsNDEgKzIzOSw0MSBAQAogICAgICAgcmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIGRldmljZSBoaWVyYXJjaHkKIAogICBpbnQgcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLSAgICAgIG9yIGVycm9yIGNvZGUgb24gZmFpbHVyZSwgd2hlcmUgLUVJTlBST0dSRVNTIG1lYW5zIHRoYXQgLT5ydW50aW1lX2lkbGUoKQotICAgICAgaXMgYWxyZWFkeSBiZWluZyBleGVjdXRlZAorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2U7IHJldHVybnMgMCBvbgorICAgICAgc3VjY2VzcyBvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FSU5QUk9HUkVTUyBtZWFucyB0aGF0CisgICAgICAtPnJ1bnRpbWVfaWRsZSgpIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQKIAogICBpbnQgcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBleGVjdXRlIC0+cnVudGltZV9zdXNwZW5kKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZTsgcmV0dXJucyAwIG9uCisgICAgLSBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBmb3IgdGhlIGRldmljZTsgcmV0dXJucyAwIG9uCiAgICAgICBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgd2FzIGFscmVhZHkgJ3N1c3BlbmRlZCcsIG9yCiAgICAgICBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FQUdBSU4gb3IgLUVCVVNZIG1lYW5zIGl0IGlzIHNhZmUgdG8gYXR0ZW1wdAogICAgICAgdG8gc3VzcGVuZCB0aGUgZGV2aWNlIGFnYWluIGluIGZ1dHVyZQogCiAgIGludCBwbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfcmVzdW1lKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZTsgcmV0dXJucyAwIG9uCisgICAgLSBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZSByZXN1bWUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2U7IHJldHVybnMgMCBvbgogICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdhY3RpdmUnIG9yCiAgICAgICBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FQUdBSU4gbWVhbnMgaXQgbWF5IGJlIHNhZmUgdG8gYXR0ZW1wdCB0bwogICAgICAgcmVzdW1lIHRoZSBkZXZpY2UgYWdhaW4gaW4gZnV0dXJlLCBidXQgJ3Bvd2VyLnJ1bnRpbWVfZXJyb3InIHNob3VsZCBiZQogICAgICAgY2hlY2tlZCBhZGRpdGlvbmFsbHkKIAogICBpbnQgcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBzdWJtaXQgYSByZXF1ZXN0IHRvIGV4ZWN1dGUgLT5ydW50aW1lX2lkbGUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24gc3VjY2VzcwotICAgICAgb3IgZXJyb3IgY29kZSBpZiB0aGUgcmVxdWVzdCBoYXMgbm90IGJlZW4gcXVldWVkIHVwCisgICAgLSBzdWJtaXQgYSByZXF1ZXN0IHRvIGV4ZWN1dGUgdGhlIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGZvciB0aGUKKyAgICAgIGRldmljZSAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBpZiB0aGUgcmVxdWVzdCBoYXMgbm90IGJlZW4gcXVldWVkIHVwCiAKICAgaW50IHBtX3NjaGVkdWxlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpOwotICAgIC0gc2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGUKLSAgICAgIGluIGZ1dHVyZSwgd2hlcmUgJ2RlbGF5JyBpcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSBxdWV1aW5nIHVwIGEgc3VzcGVuZAotICAgICAgd29yayBpdGVtIGluIHBtX3dxLCBpbiBtaWxsaXNlY29uZHMgKGlmICdkZWxheScgaXMgemVybywgdGhlIHdvcmsgaXRlbSBpcwotICAgICAgcXVldWVkIHVwIGltbWVkaWF0ZWx5KTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIFBNCisgICAgLSBzY2hlZHVsZSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgaW4gZnV0dXJlLCB3aGVyZSAnZGVsYXknIGlzIHRoZSB0aW1lIHRvIHdhaXQgYmVmb3JlIHF1ZXVpbmcgdXAgYQorICAgICAgc3VzcGVuZCB3b3JrIGl0ZW0gaW4gcG1fd3EsIGluIG1pbGxpc2Vjb25kcyAoaWYgJ2RlbGF5JyBpcyB6ZXJvLCB0aGUgd29yaworICAgICAgaXRlbSBpcyBxdWV1ZWQgdXAgaW1tZWRpYXRlbHkpOyByZXR1cm5zIDAgb24gc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgUE0KICAgICAgIHJ1bi10aW1lIHN0YXR1cyB3YXMgYWxyZWFkeSAnc3VzcGVuZGVkJywgb3IgZXJyb3IgY29kZSBpZiB0aGUgcmVxdWVzdAogICAgICAgaGFzbid0IGJlZW4gc2NoZWR1bGVkIChvciBxdWV1ZWQgdXAgaWYgJ2RlbGF5JyBpcyAwKTsgaWYgdGhlIGV4ZWN1dGlvbiBvZgogICAgICAgLT5ydW50aW1lX3N1c3BlbmQoKSBpcyBhbHJlYWR5IHNjaGVkdWxlZCBhbmQgbm90IHlldCBleHBpcmVkLCB0aGUgbmV3CiAgICAgICB2YWx1ZSBvZiAnZGVsYXknIHdpbGwgYmUgdXNlZCBhcyB0aGUgdGltZSB0byB3YWl0CiAKICAgaW50IHBtX3JlcXVlc3RfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBzdWJtaXQgYSByZXF1ZXN0IHRvIGV4ZWN1dGUgLT5ydW50aW1lX3Jlc3VtZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGUKLSAgICAgICh0aGUgcmVxdWVzdCBpcyByZXByZXNlbnRlZCBieSBhIHdvcmsgaXRlbSBpbiBwbV93cSk7IHJldHVybnMgMCBvbgorICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgcmVzdW1lIGNhbGxiYWNrIGZvciB0aGUKKyAgICAgIGRldmljZSAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24KICAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnYWN0aXZlJywgb3IKICAgICAgIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzbid0IGJlZW4gcXVldWVkIHVwCiAKQEAgLTMwMywxMiArMzA0LDEyIEBACiAgICAgICBydW4tdGltZSBQTSBjYWxsYmFja3MgZGVzY3JpYmVkIGluIFNlY3Rpb24gMgogCiAgIGludCBwbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KTsKLSAgICAtIHByZXZlbnQgdGhlIHJ1bi10aW1lIFBNIGhlbHBlciBmdW5jdGlvbnMgZnJvbSBydW5uaW5nIHRoZSBkZXZpY2UgYnVzCi0gICAgICB0eXBlJ3MgcnVuLXRpbWUgUE0gY2FsbGJhY2tzLCBtYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIHBlbmRpbmcgcnVuLXRpbWUKLSAgICAgIFBNIG9wZXJhdGlvbnMgb24gdGhlIGRldmljZSBhcmUgZWl0aGVyIGNvbXBsZXRlZCBvciBjYW5jZWxlZDsgcmV0dXJucwotICAgICAgMSBpZiB0aGVyZSB3YXMgYSByZXN1bWUgcmVxdWVzdCBwZW5kaW5nIGFuZCBpdCB3YXMgbmVjZXNzYXJ5IHRvIGV4ZWN1dGUKLSAgICAgIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlIHRvIHNhdGlzZnkgdGhhdCByZXF1ZXN0LAotICAgICAgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQKKyAgICAtIHByZXZlbnQgdGhlIHJ1bi10aW1lIFBNIGhlbHBlciBmdW5jdGlvbnMgZnJvbSBydW5uaW5nIHN1YnN5c3RlbS1sZXZlbAorICAgICAgcnVuLXRpbWUgUE0gY2FsbGJhY2tzIGZvciB0aGUgZGV2aWNlLCBtYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIHBlbmRpbmcKKyAgICAgIHJ1bi10aW1lIFBNIG9wZXJhdGlvbnMgb24gdGhlIGRldmljZSBhcmUgZWl0aGVyIGNvbXBsZXRlZCBvciBjYW5jZWxlZDsKKyAgICAgIHJldHVybnMgMSBpZiB0aGVyZSB3YXMgYSByZXN1bWUgcmVxdWVzdCBwZW5kaW5nIGFuZCBpdCB3YXMgbmVjZXNzYXJ5IHRvCisgICAgICBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgcmVzdW1lIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlIHRvIHNhdGlzZnkgdGhhdAorICAgICAgcmVxdWVzdCwgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQKIAogICB2b2lkIHBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOwogICAgIC0gc2V0L3Vuc2V0IHRoZSBwb3dlci5pZ25vcmVfY2hpbGRyZW4gZmxhZyBvZiB0aGUgZGV2aWNlCkBAIC0zNzgsNSArMzc5LDU1IEBACiB0aGV5IHdpbGwgZmFpbCByZXR1cm5pbmcgLUVBR0FJTiwgYmVjYXVzZSB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBpcwogaW5jcmVtZW50ZWQgYnkgdGhlIGNvcmUgYmVmb3JlIGV4ZWN1dGluZyAtPnByb2JlKCkgYW5kIC0+cmVtb3ZlKCkuICBTdGlsbCwgaXQKIG1heSBiZSBkZXNpcmFibGUgdG8gc3VzcGVuZCB0aGUgZGV2aWNlIGFzIHNvb24gYXMgLT5wcm9iZSgpIG9yIC0+cmVtb3ZlKCkgaGFzCi1maW5pc2hlZCwgc28gdGhlIFBNIGNvcmUgdXNlcyBwbV9ydW50aW1lX2lkbGVfc3luYygpIHRvIGludm9rZSB0aGUgZGV2aWNlIGJ1cwotdHlwZSdzIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2sgYXQgdGhhdCB0aW1lLgorZmluaXNoZWQsIHNvIHRoZSBQTSBjb3JlIHVzZXMgcG1fcnVudGltZV9pZGxlX3N5bmMoKSB0byBpbnZva2UgdGhlCitzdWJzeXN0ZW0tbGV2ZWwgaWRsZSBjYWxsYmFjayBmb3IgdGhlIGRldmljZSBhdCB0aGF0IHRpbWUuCisKKzYuIFJ1bi10aW1lIFBNIGFuZCBTeXN0ZW0gU2xlZXAKKworUnVuLXRpbWUgUE0gYW5kIHN5c3RlbSBzbGVlcCAoaS5lLiwgc3lzdGVtIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uLCBhbHNvIGtub3duCithcyBzdXNwZW5kLXRvLVJBTSBhbmQgc3VzcGVuZC10by1kaXNrKSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIgaW4gYSBjb3VwbGUgb2YKK3dheXMuICBJZiBhIGRldmljZSBpcyBhY3RpdmUgd2hlbiBhIHN5c3RlbSBzbGVlcCBzdGFydHMsIGV2ZXJ5dGhpbmcgaXMKK3N0cmFpZ2h0Zm9yd2FyZC4gIEJ1dCB3aGF0IHNob3VsZCBoYXBwZW4gaWYgdGhlIGRldmljZSBpcyBhbHJlYWR5IHN1c3BlbmRlZD8KKworVGhlIGRldmljZSBtYXkgaGF2ZSBkaWZmZXJlbnQgd2FrZS11cCBzZXR0aW5ncyBmb3IgcnVuLXRpbWUgUE0gYW5kIHN5c3RlbSBzbGVlcC4KK0ZvciBleGFtcGxlLCByZW1vdGUgd2FrZS11cCBtYXkgYmUgZW5hYmxlZCBmb3IgcnVuLXRpbWUgc3VzcGVuZCBidXQgZGlzYWxsb3dlZAorZm9yIHN5c3RlbSBzbGVlcCAoZGV2aWNlX21heV93YWtldXAoZGV2KSByZXR1cm5zICdmYWxzZScpLiAgV2hlbiB0aGlzIGhhcHBlbnMsCit0aGUgc3Vic3lzdGVtLWxldmVsIHN5c3RlbSBzdXNwZW5kIGNhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIGZvciBjaGFuZ2luZyB0aGUKK2RldmljZSdzIHdha2UtdXAgc2V0dGluZyAoaXQgbWF5IGxlYXZlIHRoYXQgdG8gdGhlIGRldmljZSBkcml2ZXIncyBzeXN0ZW0KK3N1c3BlbmQgcm91dGluZSkuICBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHJlc3VtZSB0aGUgZGV2aWNlIGFuZCBzdXNwZW5kIGl0IGFnYWluCitpbiBvcmRlciB0byBkbyBzby4gIFRoZSBzYW1lIGlzIHRydWUgaWYgdGhlIGRyaXZlciB1c2VzIGRpZmZlcmVudCBwb3dlciBsZXZlbHMKK29yIG90aGVyIHNldHRpbmdzIGZvciBydW4tdGltZSBzdXNwZW5kIGFuZCBzeXN0ZW0gc2xlZXAuCisKK0R1cmluZyBzeXN0ZW0gcmVzdW1lLCBkZXZpY2VzIGdlbmVyYWxseSBzaG91bGQgYmUgYnJvdWdodCBiYWNrIHRvIGZ1bGwgcG93ZXIsCitldmVuIGlmIHRoZXkgd2VyZSBzdXNwZW5kZWQgYmVmb3JlIHRoZSBzeXN0ZW0gc2xlZXAgYmVnYW4uICBUaGVyZSBhcmUgc2V2ZXJhbAorcmVhc29ucyBmb3IgdGhpcywgaW5jbHVkaW5nOgorCisgICogVGhlIGRldmljZSBtaWdodCBuZWVkIHRvIHN3aXRjaCBwb3dlciBsZXZlbHMsIHdha2UtdXAgc2V0dGluZ3MsIGV0Yy4KKworICAqIFJlbW90ZSB3YWtlLXVwIGV2ZW50cyBtaWdodCBoYXZlIGJlZW4gbG9zdCBieSB0aGUgZmlybXdhcmUuCisKKyAgKiBUaGUgZGV2aWNlJ3MgY2hpbGRyZW4gbWF5IG5lZWQgdGhlIGRldmljZSB0byBiZSBhdCBmdWxsIHBvd2VyIGluIG9yZGVyCisgICAgdG8gcmVzdW1lIHRoZW1zZWx2ZXMuCisKKyAgKiBUaGUgZHJpdmVyJ3MgaWRlYSBvZiB0aGUgZGV2aWNlIHN0YXRlIG1heSBub3QgYWdyZWUgd2l0aCB0aGUgZGV2aWNlJ3MKKyAgICBwaHlzaWNhbCBzdGF0ZS4gIFRoaXMgY2FuIGhhcHBlbiBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24uCisKKyAgKiBUaGUgZGV2aWNlIG1pZ2h0IG5lZWQgdG8gYmUgcmVzZXQuCisKKyAgKiBFdmVuIHRob3VnaCB0aGUgZGV2aWNlIHdhcyBzdXNwZW5kZWQsIGlmIGl0cyB1c2FnZSBjb3VudGVyIHdhcyA+IDAgdGhlbiBtb3N0CisgICAgbGlrZWx5IGl0IHdvdWxkIG5lZWQgYSBydW4tdGltZSByZXN1bWUgaW4gdGhlIG5lYXIgZnV0dXJlIGFueXdheS4KKworICAqIEFsd2F5cyBnb2luZyBiYWNrIHRvIGZ1bGwgcG93ZXIgaXMgc2ltcGxlc3QuCisKK0lmIHRoZSBkZXZpY2Ugd2FzIHN1c3BlbmRlZCBiZWZvcmUgdGhlIHNsZWVwIGJlZ2FuLCB0aGVuIGl0cyBydW4tdGltZSBQTSBzdGF0dXMKK3dpbGwgaGF2ZSB0byBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGFjdHVhbCBwb3N0LXN5c3RlbSBzbGVlcCBzdGF0dXMuICBUaGUgd2F5Cit0byBkbyB0aGlzIGlzOgorCisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworVGhlIFBNIGNvcmUgYWx3YXlzIGluY3JlbWVudHMgdGhlIHJ1bi10aW1lIHVzYWdlIGNvdW50ZXIgYmVmb3JlIGNhbGxpbmcgdGhlCistPnByZXBhcmUoKSBjYWxsYmFjayBhbmQgZGVjcmVtZW50cyBpdCBhZnRlciBjYWxsaW5nIHRoZSAtPmNvbXBsZXRlKCkgY2FsbGJhY2suCitIZW5jZSBkaXNhYmxpbmcgcnVuLXRpbWUgUE0gdGVtcG9yYXJpbHkgbGlrZSB0aGlzIHdpbGwgbm90IGNhdXNlIGFueSBydW4tdGltZQorc3VzcGVuZCBjYWxsYmFja3MgdG8gYmUgbG9zdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3BwYzQ0MHNwZS1hZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3BwYzQ0MHNwZS1hZG1hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTVlYmNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvcHBjNDQwc3BlLWFkbWEudHh0CkBAIC0wLDAgKzEsOTMgQEAKK1BQQzQ0MFNQZSBETUEvWE9SIChETUEgQ29udHJvbGxlciBhbmQgWE9SIEFjY2VsZXJhdG9yKQorCitEZXZpY2Ugbm9kZXMgbmVlZGVkIGZvciBvcGVyYXRpb24gb2YgdGhlIHBwYzQ0MHNwZS1hZG1hIGRyaXZlcgorYXJlIHNwZWNpZmllZCBoZXJlYnkuIFRoZXNlIGFyZSBJMk8vRE1BLCBETUEgYW5kIFhPUiBub2RlcworZm9yIERNQSBlbmdpbmVzIGFuZCBNZW1vcnkgUXVldWUgTW9kdWxlIG5vZGUuIFRoZSBsYXR0ZXIgaXMgdXNlZAorYnkgQURNQSBkcml2ZXIgZm9yIGNvbmZpZ3VyYXRpb24gb2YgUkFJRC02IEgvVyBjYXBhYmlsaXRpZXMgb2YKK3RoZSBQUEM0NDBTUGUuIEluIGFkZGl0aW9uIHRvIHRoZSBub2RlcyBhbmQgcHJvcGVydGllcyBkZXNjcmliZWQKK2JlbG93LCB0aGUgcmFuZ2VzIHByb3BlcnR5IG9mIFBMQiBub2RlIG11c3Qgc3BlY2lmeSByYW5nZXMgZm9yCitETUEgZGV2aWNlcy4KKworIGkpIFRoZSBJMk8gbm9kZQorCisgUmVxdWlyZWQgcHJvcGVydGllczoKKworIC0gY29tcGF0aWJsZQkJOiAiaWJtLGkyby00NDBzcGUiOworIC0gcmVnCQkJOiA8cmVnaXN0ZXJzIG1hcHBpbmc+CisgLSBkY3ItcmVnCQk6IDxEQ1IgcmVnaXN0ZXJzIHJhbmdlPgorCisgRXhhbXBsZToKKworCUkyTzogaTJvQDQwMDEwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGkyby00NDBzcGUiOworCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMTAwMDAwIDB4MTAwPjsKKwkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJfTsKKworCisgaWkpIFRoZSBETUEgbm9kZQorCisgUmVxdWlyZWQgcHJvcGVydGllczoKKworIC0gY29tcGF0aWJsZQkJOiAiaWJtLGRtYS00NDBzcGUiOworIC0gY2VsbC1pbmRleAkJOiAxIGNlbGwsIGhhcmR3YXJlIGluZGV4IG9mIHRoZSBETUEgZW5naW5lCisJCQkgICh0eXBpY2FsbHkgMHgwIGFuZCAweDEgZm9yIERNQTAgYW5kIERNQTEpCisgLSByZWcJCQk6IDxyZWdpc3RlcnMgbWFwcGluZz4KKyAtIGRjci1yZWcJCTogPERDUiByZWdpc3RlcnMgcmFuZ2U+CisgLSBpbnRlcnJ1cHRzCQk6IDxpbnRlcnJ1cHQgbWFwcGluZyBmb3IgRE1BMC8xIGludGVycnVwdHMgc291cmNlczoKKwkJCSAgIDIgc291cmNlczogRE1BeCBDUyBGSUZPIE5lZWRzIFNlcnZpY2UgSVJRIChvbiBVSUMwKQorCQkJICAgYW5kIERNQSBFcnJvciBJUlEgKG9uIFVJQzEpLiBUaGUgbGF0dGVyIGlzIGNvbW1vbgorCQkJICAgZm9yIGJvdGggRE1BIGVuZ2luZXM+LgorIC0gaW50ZXJydXB0LXBhcmVudAk6IG5lZWRlZCBmb3IgaW50ZXJydXB0IG1hcHBpbmcKKworIEV4YW1wbGU6CisKKwlETUEwOiBkbWEwQDQwMDEwMDEwMCB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGRtYS00NDBzcGUiOworCQljZWxsLWluZGV4ID0gPDA+OworCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMTAwMTAwIDB4MTAwPjsKKwkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JkRNQTA+OworCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCTAgJlVJQzAgMHgxNCA0CisJCQkxICZVSUMxIDB4MTYgND47CisJfTsKKworCisgaWlpKSBYT1IgQWNjZWxlcmF0b3Igbm9kZQorCisgUmVxdWlyZWQgcHJvcGVydGllczoKKworIC0gY29tcGF0aWJsZQkJOiAiYW1jYyx4b3ItYWNjZWxlcmF0b3IiOworIC0gcmVnCQkJOiA8cmVnaXN0ZXJzIG1hcHBpbmc+CisgLSBpbnRlcnJ1cHRzCQk6IDxpbnRlcnJ1cHQgbWFwcGluZyBmb3IgWE9SIGludGVycnVwdCBzb3VyY2U+CisgLSBpbnRlcnJ1cHQtcGFyZW50CTogZm9yIGludGVycnVwdCBtYXBwaW5nCisKKyBFeGFtcGxlOgorCisJeG9yLWFjY2VsQDQwMDIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYW1jYyx4b3ItYWNjZWxlcmF0b3IiOworCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMjAwMDAwIDB4NDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCWludGVycnVwdHMgPSA8MHgxZiA0PjsKKwl9OworCisKKyBpdikgTWVtb3J5IFF1ZXVlIE1vZHVsZSBub2RlCisKKyBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgLSBjb21wYXRpYmxlCQk6ICJpYm0sbXEtNDQwc3BlIjsKKyAtIGRjci1yZWcJCTogPERDUiByZWdpc3RlcnMgcmFuZ2U+CisKKyBFeGFtcGxlOgorCisJTVEwOiBtcSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLG1xLTQ0MHNwZSI7CisJCWRjci1yZWcgPSA8MHgwNDAgMHgwMjA+OworCX07CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dAppbmRleCBlOGI1YmMyLi4zOWU5NDE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ib2FyZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvYm9hcmQudHh0CkBAIC0yMCwxMiArMjAsMTYgQEAKIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAiZnNsLGZwZ2EtcGl4aXMiLgogLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgYWRkcmVzcyBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgRlBQR0EgcmVnaXN0ZXIKICAgc2V0LgorLSBpbnRlcnJ1cHQtcGFyZW50OiBzaG91bGQgc3BlY2lmeSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuCistIGludGVycnVwdHMgOiBzaG91bGQgc3BlY2lmeSBldmVudCAod2FrZXVwKSBJUlEuCiAKIEV4YW1wbGUgKE1QQzg2MTBIUENEKToKIAogCWJvYXJkLWNvbnRyb2xAZTgwMDAwMDAgewogCQljb21wYXRpYmxlID0gImZzbCxmcGdhLXBpeGlzIjsKIAkJcmVnID0gPDB4ZTgwMDAwMDAgMzI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDw4IDg+OwogCX07CiAKICogRnJlZXNjYWxlIEJDU1IgR1BJTyBiYW5rcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY2FuLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2Nhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNGZjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2Nhbi50eHQKQEAgLTAsMCArMSw1MyBAQAorQ0FOIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGMpIDIwMDYtMjAwOSBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQKK0dyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KKworZnNsLG1wYzUyMDAtbXNjYW4gbm9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgY29tcGF0aWJsZS0sIHJlZy0gYW5kIGludGVycnVwdC1wcm9wZXJ0aWVzLCB5b3UgY2FuCithbHNvIHNwZWNpZnkgd2hpY2ggY2xvY2sgc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBjb250cm9sbGVyOgorCistIGZzbCxtc2Nhbi1jbG9jay1zb3VyY2UgOiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjbG9jayBzb3VyY2UuIFZhbGlkIHZhbHVlcworCQkJICAgYXJlOgkiaXAiIGZvciBpcCBidXMgY2xvY2sKKwkJCQkgInJlZiIgZm9yIHJlZmVyZW5jZSBjbG9jayAoWFRBTCkKKwkJCSAgICJyZWYiIGlzIGRlZmF1bHQgaW4gY2FzZSB0aGlzIHByb3BlcnR5IGlzIG5vdAorCQkJICAgcHJlc2VudC4KKworZnNsLG1wYzUxMjEtbXNjYW4gbm9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgY29tcGF0aWJsZS0sIHJlZy0gYW5kIGludGVycnVwdC1wcm9wZXJ0aWVzLCB5b3UgY2FuCithbHNvIHNwZWNpZnkgd2hpY2ggY2xvY2sgc291cmNlIGFuZCBkaXZpZGVyIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBjb250cm9sbGVyOgorCistIGZzbCxtc2Nhbi1jbG9jay1zb3VyY2UgOiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjbG9jayBzb3VyY2UuIFZhbGlkIHZhbHVlcworCQkJICAgYXJlOgkiaXAiIGZvciBpcCBidXMgY2xvY2sKKwkJCQkicmVmIiBmb3IgcmVmZXJlbmNlIGNsb2NrCisJCQkJInN5cyIgZm9yIHN5c3RlbSBjbG9jaworCQkJICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCwgYW4gb3B0aW1hbCBDQU4KKwkJCSAgIGNsb2NrIHNvdXJjZSBhbmQgZnJlcXVlbmN5IGJhc2VkIG9uIHRoZSBzeXN0ZW0KKwkJCSAgIGNsb2NrIHdpbGwgYmUgc2VsZWN0ZWQuIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLAorCQkJICAgdGhlIHJlZmVyZW5jZSBjbG9jayB3aWxsIGJlIHVzZWQuCisKKy0gZnNsLG1zY2FuLWNsb2NrLWRpdmlkZXI6IGZvciB0aGUgcmVmZXJlbmNlIGFuZCBzeXN0ZW0gY2xvY2ssIGFuIGFkZGl0aW9uYWwKKwkJCSAgIGNsb2NrIGRpdmlkZXIgY2FuIGJlIHNwZWNpZmllZC4gQnkgZGVmYXVsdCwgYQorCQkJICAgdmFsdWUgb2YgMSBpcyB1c2VkLgorCitOb3RlIHRoYXQgdGhlIE1QQzUxMjEgUmV2LiAxIHByb2Nlc3NvciBpcyBub3Qgc3VwcG9ydGVkLgorCitFeGFtcGxlczoKKwljYW5AMTMwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iOworCQlpbnRlcnJ1cHRzID0gPDEyIDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQlyZWcgPSA8MHgxMzAwIDB4ODA+OworCX07CisKKwljYW5AMTM4MCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iOworCQlpbnRlcnJ1cHRzID0gPDEzIDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQlyZWcgPSA8MHgxMzgwIDB4ODA+OworCQlmc2wsbXNjYW4tY2xvY2stc291cmNlID0gInJlZiI7CisJCWZzbCxtc2Nhbi1jbG9jay1kaXZpZGVyID0gPDM+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MjAwLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CmluZGV4IGNhYmM3ODAuLjRjY2IyY2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0CkBAIC0xMDMsNyArMTAzLDIyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE9uIHRoZSBtcGM1MjAwIGFuZCA1MjAwYiwgR1BUMCBoYXMgYSB3YXRjaGRvZyB0aW1lciBmdW5jdGlvbi4gIElmIHRoZSBib2FyZAogZGVzaWduIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCB3ZHQsIHRoZW4gdGhlIGRldmljZSBub2RlIGZvciBHUFQwIHNob3VsZAotaW5jbHVkZSB0aGUgZW1wdHkgcHJvcGVydHkgJ2ZzbCxoYXMtd2R0Jy4KK2luY2x1ZGUgdGhlIGVtcHR5IHByb3BlcnR5ICdmc2wsaGFzLXdkdCcuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3RpdmF0ZQordGhlIHdhdGNoZG9nLiAgVGhlIHRpbWVyIHdpbGwgZnVuY3Rpb24gYXMgYSBHUFQgaWYgdGhlIHRpbWVyIGFwaSBpcyB1c2VkLCBhbmQKK2l0IHdpbGwgZnVuY3Rpb24gYXMgd2F0Y2hkb2cgaWYgdGhlIHdhdGNoZG9nIGRldmljZSBpcyB1c2VkLiAgVGhlIHdhdGNoZG9nCittb2RlIGhhcyBwcmlvcml0eSBvdmVyIHRoZSBncHQgbW9kZSwgaS5lLiBpZiB0aGUgd2F0Y2hkb2cgaXMgYWN0aXZhdGVkLCBhbnkKK2dwdCBhcGkgY2FsbCB0byB0aGlzIHRpbWVyIHdpbGwgZmFpbCB3aXRoIC1FQlVTWS4KKworSWYgeW91IGFkZCB0aGUgcHJvcGVydHkKKwlmc2wsd2R0LW9uLWJvb3QgPSA8bj47CitHUFQwIHdpbGwgYmUgbWFya2VkIGFzIGluLXVzZSB3YXRjaGRvZywgaS5lLiBibG9ja2luZyBldmVyeSBncHQgYWNjZXNzIHRvIGl0LgorSWYgbj4wLCB0aGUgd2F0Y2hkb2cgaXMgc3RhcnRlZCB3aXRoIGEgdGltZW91dCBvZiBuIHNlY29uZHMuICBJZiBuPTAsIHRoZQorY29uZmlndXJhdGlvbiBvZiB0aGUgd2F0Y2hkb2cgaXMgbm90IHRvdWNoZWQuICBUaGlzIGlzIHVzZWZ1bCBpbiB0d28gY2FzZXM6CistIGp1c3QgbWFyayBHUFQwIGFzIHdhdGNoZG9nLCBibG9ja2luZyBncHQgYWNjZXNzZXMsIGFuZCBjb25maWd1cmUgaXQgbGF0ZXI7CistIGRvIG5vdCB0b3VjaCBhIGNvbmZpZ3VyYXRpb24gYXNzaWduZWQgYnkgdGhlIGJvb3QgbG9hZGVyIHdoaWNoIHN1cGVydmlzZXMKKyAgdGhlIGJvb3QgcHJvY2VzcyBpdHNlbGYuCisKK1RoZSB3YXRjaGRvZyB3aWxsIHJlc3BlY3QgdGhlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBvcHRpb24uCiAKIEFuIG1wYzUyMDAtZ3B0IGNhbiBiZSB1c2VkIGFzIGEgc2luZ2xlIGxpbmUgR1BJTyBjb250cm9sbGVyLiAgVG8gZG8gc28sCiBhZGQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRvIHRoZSBncHQgbm9kZToKQEAgLTE4MCwxMSArMTk1LDQgQEAKIAogZnNsLG1wYzUyMDAtbXNjYW4gbm9kZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgY29tcGF0aWJsZS0sIHJlZy0gYW5kIGludGVycnVwdC1wcm9wZXJpdGVzLCB5b3UgY2FuCi1hbHNvIHNwZWNpZnkgd2hpY2ggY2xvY2sgc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBjb250cm9sbGVyOgotCi0tIGZzbCxtc2Nhbi1jbG9jay1zb3VyY2UtIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNsb2NrIHNvdXJjZS4gVmFsaWQgdmFsdWVzCi0JCQkgIGFyZToJImlwIiBmb3IgaXAgYnVzIGNsb2NrCi0JCQkJInJlZiIgZm9yIHJlZmVyZW5jZSBjbG9jayAoWFRBTCkKLQkJCSAgInJlZiIgaXMgZGVmYXVsdCBpbiBjYXNlIHRoaXMgcHJvcGVydHkgaXMgbm90Ci0JCQkgIHByZXNlbnQuCitTZWUgZmlsZSBjYW4udHh0IGluIHRoaXMgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWUzOWNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBpYy50eHQKQEAgLTAsMCArMSw0MiBAQAorKiBPcGVuUElDIGFuZCBpdHMgaW50ZXJydXB0IG51bWJlcnMgb24gRnJlZXNjYWxlJ3MgZTUwMC9lNjAwIGNvcmVzCisKK1RoZSBPcGVuUElDIHNwZWNpZmljYXRpb24gZG9lcyBub3Qgc3BlY2lmeSB3aGljaCBpbnRlcnJ1cHQgc291cmNlIGhhcyB0bworYmVjb21lIHdoaWNoIGludGVycnVwdCBudW1iZXIuIFRoaXMgaXMgdXAgdG8gdGhlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uCitvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgZXZlcnkKK2ludGVycnVwdCBzb3VyY2UgaGFzIHRvIGhhdmUgYW4gdW5pcXVlIGludGVycnVwdCBudW1iZXIgLyB2ZWN0b3IgbnVtYmVyLgorVG8gYWNjb21wbGlzaCB0aGlzIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFzc2lnbnMgdGhlIG51bWJlciB6ZXJvIHRvCit0aGUgZmlyc3Qgc291cmNlLCB0aGUgbnVtYmVyIG9uZSB0byB0aGUgc2Vjb25kIHNvdXJjZSBhbmQgc28gb24gdW50aWwKK2FsbCBpbnRlcnJ1cHQgc291cmNlcyBoYXZlIHRoZWlyIHVuaXF1ZSBudW1iZXIuCitVc3VhbGx5IHRoZSBhc3NpZ25lZCB2ZWN0b3IgbnVtYmVyIGVxdWFscyB0aGUgaW50ZXJydXB0IG51bWJlciBtZW50aW9uZWQKK2luIHRoZSBkb2N1bWVudGF0aW9uIGZvciBhIGdpdmVuIGNvcmUgLyBDUFUuIFRoaXMgaXMgaG93ZXZlciBub3QgdHJ1ZQorZm9yIHRoZSBlNTAwIGNvcmVzIChNUEM4NVhYIENQVXMpIHdoZXJlIHRoZSBkb2N1bWVudGF0aW9uIGRpc3Rpbmd1aXNoZXMKK2JldHdlZW4gaW50ZXJuYWwgYW5kIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIGFuZCBzdGFydHMgY291bnRpbmcgYXQKK3plcm8gZm9yIGJvdGggb2YgdGhlbS4KKworU28gd2hhdCB0byB3cml0ZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZSBYIG9yIGludGVybmFsIGludGVycnVwdAorc291cmNlIFkgaW50byB0aGUgZGV2aWNlIHRyZWU/IEhlcmUgaXMgYW4gZXhhbXBsZToKKworVGhlIG1lbW9yeSBtYXAgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbiB0aGUgTVBDODU0NFswXSBzaG93cywKK3RoYXQgdGhlIGZpcnN0IGludGVycnVwdCBzb3VyY2Ugc3RhcnRzIGF0IDB4NV8wMDAwIChQSUMgUmVnaXN0ZXIgQWRkcmVzcworTWFwLUludGVycnVwdCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMpLiBUaGlzIHNvdXJjZSBiZWNvbWVzIHRoZQorbnVtYmVyIHplcm8gdGhlcmVmb3JlOgorIEV4dGVybmFsIGludGVycnVwdCAwID0gaW50ZXJydXB0IG51bWJlciAwCisgRXh0ZXJuYWwgaW50ZXJydXB0IDEgPSBpbnRlcnJ1cHQgbnVtYmVyIDEKKyBFeHRlcm5hbCBpbnRlcnJ1cHQgMiA9IGludGVycnVwdCBudW1iZXIgMgorIC4uLgorRXZlcnkgaW50ZXJydXB0IG51bWJlciBhbGxvY2F0ZXMgMHgyMCBieXRlcyByZWdpc3RlciBzcGFjZS4gU28gdG8gZ2V0CitpdHMgbnVtYmVyIGl0IGlzIHN1ZmZpY2llbnQgdG8gc2hpZnQgdGhlIGxvd2VyIDE2Yml0cyB0byByaWdodCBieSBmaXZlLgorU28gZm9yIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgMTAgd2UgaGF2ZToKKyAgMHgwMTQwID4+IDUgPSAxMAorCitBZnRlciB0aGUgZXh0ZXJuYWwgc291cmNlcywgdGhlIGludGVybmFsIHNvdXJjZXMgZm9sbG93LiBUaGUgaW4gY29yZSBJMkMKK2NvbnRyb2xsZXIgb24gdGhlIE1QQzg1NDQgZm9yIGluc3RhbmNlIGhhcyB0aGUgaW50ZXJuYWwgc291cmNlIG51bWJlcgorMjcuIE9vIG9idGFpbiBpdHMgaW50ZXJydXB0IG51bWJlciB3ZSB0YWtlIHRoZSBsb3dlciAxNmJpdHMgb2YgaXRzIG1lbW9yeQorYWRkcmVzcyAoMHg1XzA1NjApIGFuZCBzaGlmdCBpdCByaWdodDoKKyAweDA1NjAgPj4gNSA9IDQzCisKK1RoZXJlZm9yZSB0aGUgSTJDIGRldmljZSBub2RlIGZvciB0aGUgTVBDODU0NCBDUFUgaGFzIHRvIGhhdmUgdGhlCitpbnRlcnJ1cHQgbnVtYmVyIDQzIHNwZWNpZmllZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisKK1swXSBNUEM4NTQ0RSBQb3dlclFVSUNDVE0gSUlJLCBJbnRlZ3JhdGVkIEhvc3QgUHJvY2Vzc29yIEZhbWlseSBSZWZlcmVuY2UgTWFudWFsCisgICAgTVBDODU0NEVSTSBSZXYuIDEgMTAvMjAwNwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby9nYW1lY3ViZS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL2dhbWVjdWJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU4NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby9nYW1lY3ViZS50eHQKQEAgLTAsMCArMSwxMDkgQEAKKworTmludGVuZG8gR2FtZUN1YmUgZGV2aWNlIHRyZWUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEpIFRoZSAiZmxpcHBlciIgbm9kZQorCisgIFRoaXMgbm9kZSByZXByZXNlbnRzIHRoZSBtdWx0aS1mdW5jdGlvbiAiRmxpcHBlciIgY2hpcCwgd2hpY2ggcGFja2FnZXMKKyAgbWFueSBvZiB0aGUgZGV2aWNlcyBmb3VuZCBpbiB0aGUgTmludGVuZG8gR2FtZUN1YmUuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJuaW50ZW5kbyxmbGlwcGVyIgorCisxLmEpIFRoZSBWaWRlbyBJbnRlcmZhY2UgKFZJKSBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGdyYXBoaWNzIHByb2Nlc3NvciBhbmQgYSBleHRlcm5hbAorICB2aWRlbyBlbmNvZGVyLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci12aSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIFZJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgVkkgaW50ZXJydXB0CisKKzEuYikgVGhlIFByb2Nlc3NvciBJbnRlcmZhY2UgKFBJKSBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgZGF0YSBhbmQgY29udHJvbCBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbWFpbiBwcm9jZXNzb3IKKyAgYW5kIGdyYXBoaWNzIGFuZCBhdWRpbyBwcm9jZXNzb3IuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGZsaXBwZXItcGkiCisgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIFBJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisKKzEuYi5pKSBUaGUgIkZsaXBwZXIiIGludGVycnVwdCBjb250cm9sbGVyIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB3aXRoaW4gdGhlICJGbGlwcGVyIiBjaGlwLgorICBUaGUgbm9kZSBmb3IgdGhlICJGbGlwcGVyIiBpbnRlcnJ1cHQgY29udHJvbGxlciBtdXN0IGJlIHBsYWNlZCB1bmRlcgorICB0aGUgUEkgbm9kZS4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci1waWMiCisKKzEuYykgVGhlIERpZ2l0YWwgU2lnbmFsIFByb2Nlc29yIChEU1ApIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IgaW50ZXJmYWNlLCBkZXNpZ25lZCB0byBvZmZsb2FkCisgIGF1ZGlvIHJlbGF0ZWQgdGFza3MuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxmbGlwcGVyLWRzcCIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIERTUCByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorICAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gdGhlIERTUCBpbnRlcnJ1cHQKKworMS5jLmkpIFRoZSBBdXhpbGlhcnkgUkFNIChBUkFNKSBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgbm9uIGNwdS1hZGRyZXNzYWJsZSByYW0gZGVzaWduZWQgbWFpbmx5IHRvIHN0b3JlIGF1ZGlvCisgIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgIFRoZSBBUkFNIG5vZGUgbXVzdCBiZSBwbGFjZWQgdW5kZXIgdGhlIERTUCBub2RlLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci1hcmFtIgorICAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgQVJBTSBzdGFydCAoemVyby1iYXNlZCkgYW5kIGxlbmd0aAorCisxLmQpIFRoZSBEaXNrIEludGVyZmFjZSAoREkpIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIG1hc3Mgc3RvcmFnZSBkZXZpY2VzLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci1kaSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIERJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgREkgaW50ZXJydXB0CisKKzEuZSkgVGhlIEF1ZGlvIEludGVyZmFjZSAoQUkpIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGV4dGVybmFsIDE2LWJpdCBzdGVyZW8gZGlnaXRhbC10by1hbmFsb2cKKyAgY29udmVydGVyLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci1haSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIEFJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgQUkgaW50ZXJydXB0CisKKzEuZikgVGhlIFNlcmlhbCBJbnRlcmZhY2UgKFNJKSBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIHRvIHRoZSBmb3VyIHNpbmdsZSBiaXQgc2VyaWFsIGludGVyZmFjZXMuCisgIFRoZSBTSSBpcyBhIHByb3ByaWV0YXJ5IHNlcmlhbCBpbnRlcmZhY2UgdXNlZCBub3JtYWxseSB0byBjb250cm9sIGdhbWVwYWRzLgorICBJdCdzIE5PVCBhIFJTMjMyLXR5cGUgaW50ZXJmYWNlLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci1zaSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIFNJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgU0kgaW50ZXJydXB0CisKKzEuZykgVGhlIEV4dGVybmFsIEludGVyZmFjZSAoRVhJKSBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgbXVsdGktY2hhbm5lbCBTUEktbGlrZSBpbnRlcmZhY2UuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxmbGlwcGVyLWV4aSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIEVYSSByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorICAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gdGhlIEVYSSBpbnRlcnJ1cHQKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby93aWkudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby93aWkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTE1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL3dpaS50eHQKQEAgLTAsMCArMSwxODQgQEAKKworTmludGVuZG8gV2lpIGRldmljZSB0cmVlCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworMCkgVGhlIHJvb3Qgbm9kZQorCisgIFRoaXMgbm9kZSByZXByZXNlbnRzIHRoZSBOaW50ZW5kbyBXaWkgdmlkZW8gZ2FtZSBjb25zb2xlLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gbW9kZWwgOiBTaG91bGQgYmUgIm5pbnRlbmRvLHdpaSIKKyAgIC0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAibmludGVuZG8sd2lpIgorCisxKSBUaGUgImhvbGx5d29vZCIgbm9kZQorCisgIFRoaXMgbm9kZSByZXByZXNlbnRzIHRoZSBtdWx0aS1mdW5jdGlvbiAiSG9sbHl3b29kIiBjaGlwLCB3aGljaCBwYWNrYWdlcworICBtYW55IG9mIHRoZSBkZXZpY2VzIGZvdW5kIGluIHRoZSBOaW50ZW5kbyBXaWkuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJuaW50ZW5kbyxob2xseXdvb2QiCisKKzEuYSkgVGhlIFZpZGVvIEludGVyZmFjZSAoVkkpIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgZ3JhcGhpY3MgcHJvY2Vzc29yIGFuZCBhIGV4dGVybmFsCisgIHZpZGVvIGVuY29kZXIuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxob2xseXdvb2QtdmkiLCJuaW50ZW5kbyxmbGlwcGVyLXZpIgorICAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgVkkgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKyAgIC0gaW50ZXJydXB0cyA6IHNob3VsZCBjb250YWluIHRoZSBWSSBpbnRlcnJ1cHQKKworMS5iKSBUaGUgUHJvY2Vzc29yIEludGVyZmFjZSAoUEkpIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBkYXRhIGFuZCBjb250cm9sIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBtYWluIHByb2Nlc3NvcgorICBhbmQgZ3JhcGhpY3MgYW5kIGF1ZGlvIHByb2Nlc3Nvci4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8saG9sbHl3b29kLXBpIiwibmludGVuZG8sZmxpcHBlci1waSIKKyAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgUEkgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKworMS5iLmkpIFRoZSAiRmxpcHBlciIgaW50ZXJydXB0IGNvbnRyb2xsZXIgbm9kZQorCisgIFJlcHJlc2VudHMgdGhlICJGbGlwcGVyIiBpbnRlcnJ1cHQgY29udHJvbGxlciB3aXRoaW4gdGhlICJIb2xseXdvb2QiIGNoaXAuCisgIFRoZSBub2RlIGZvciB0aGUgIkZsaXBwZXIiIGludGVycnVwdCBjb250cm9sbGVyIG11c3QgYmUgcGxhY2VkIHVuZGVyCisgIHRoZSBQSSBub2RlLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgLSAjaW50ZXJydXB0LWNlbGxzIDogPDE+CisgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8sZmxpcHBlci1waWMiCisgIC0gaW50ZXJydXB0LWNvbnRyb2xsZXIKKworMS5jKSBUaGUgRGlnaXRhbCBTaWduYWwgUHJvY2Vzb3IgKERTUCkgbm9kZQorCisgIFJlcHJlc2VudHMgdGhlIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciBpbnRlcmZhY2UsIGRlc2lnbmVkIHRvIG9mZmxvYWQKKyAgYXVkaW8gcmVsYXRlZCB0YXNrcy4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGhvbGx5d29vZC1kc3AiLCJuaW50ZW5kbyxmbGlwcGVyLWRzcCIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIERTUCByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorICAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gdGhlIERTUCBpbnRlcnJ1cHQKKworMS5kKSBUaGUgU2VyaWFsIEludGVyZmFjZSAoU0kpIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGZvdXIgc2luZ2xlIGJpdCBzZXJpYWwgaW50ZXJmYWNlcy4KKyAgVGhlIFNJIGlzIGEgcHJvcHJpZXRhcnkgc2VyaWFsIGludGVyZmFjZSB1c2VkIG5vcm1hbGx5IHRvIGNvbnRyb2wgZ2FtZXBhZHMuCisgIEl0J3MgTk9UIGEgUlMyMzItdHlwZSBpbnRlcmZhY2UuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxob2xseXdvb2Qtc2kiLCJuaW50ZW5kbyxmbGlwcGVyLXNpIgorICAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgU0kgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKyAgIC0gaW50ZXJydXB0cyA6IHNob3VsZCBjb250YWluIHRoZSBTSSBpbnRlcnJ1cHQKKworMS5lKSBUaGUgQXVkaW8gSW50ZXJmYWNlIChBSSkgbm9kZQorCisgIFJlcHJlc2VudHMgdGhlIGludGVyZmFjZSB0byB0aGUgZXh0ZXJuYWwgMTYtYml0IHN0ZXJlbyBkaWdpdGFsLXRvLWFuYWxvZworICBjb252ZXJ0ZXIuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxob2xseXdvb2QtYWkiLCJuaW50ZW5kbyxmbGlwcGVyLWFpIgorICAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgQUkgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKyAgIC0gaW50ZXJydXB0cyA6IHNob3VsZCBjb250YWluIHRoZSBBSSBpbnRlcnJ1cHQKKworMS5mKSBUaGUgRXh0ZXJuYWwgSW50ZXJmYWNlIChFWEkpIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBtdWx0aS1jaGFubmVsIFNQSS1saWtlIGludGVyZmFjZS4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGhvbGx5d29vZC1leGkiLCJuaW50ZW5kbyxmbGlwcGVyLWV4aSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIEVYSSByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorICAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gdGhlIEVYSSBpbnRlcnJ1cHQKKworMS5nKSBUaGUgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKSBub2RlcworCisgIFJlcHJlc2VudCB0aGUgVVNCIDEueCBPcGVuIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2VzLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8saG9sbHl3b29kLXVzYi1vaGNpIiwidXNiLW9oY2kiCisgICAtIHJlZyA6IHNob3VsZCBjb250YWluIHRoZSBPSENJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgT0hDSSBpbnRlcnJ1cHQKKworMS5oKSBUaGUgRW5oYW5jZWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoRUhDSSkgbm9kZQorCisgIFJlcHJlc2VudHMgdGhlIFVTQiAyLjAgRW5oYW5jZWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGhvbGx5d29vZC11c2ItZWhjaSIsInVzYi1laGNpIgorICAgLSByZWcgOiBzaG91bGQgY29udGFpbiB0aGUgRUhDSSByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorICAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gdGhlIEVIQ0kgaW50ZXJydXB0CisKKzEuaSkgVGhlIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKFNESENJKSBub2RlcworCisgIFJlcHJlc2VudCB0aGUgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZXMuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxob2xseXdvb2Qtc2RoY2kiLCJzZGhjaSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIFNESENJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgU0RIQ0kgaW50ZXJydXB0CisKKzEuaikgVGhlIEludGVyLVByb2Nlc3Nzb3IgQ29tbXVuaWNhdGlvbiAoSVBDKSBub2RlCisKKyAgUmVwcmVzZW50IHRoZSBJbnRlci1Qcm9jZXNzb3IgQ29tbXVuaWNhdGlvbiBpbnRlcmZhY2UuIFRoaXMgaW50ZXJmYWNlCisgIGVuYWJsZXMgY29tbXVuaWNhdGlvbnMgYmV0d2VlbiB0aGUgQnJvYWR3YXkgYW5kIHRoZSBTdGFybGV0IHByb2Nlc3NvcnMuCisKKyAgIC0gY29tcGF0aWJsZSA6IHNob3VsZCBiZSAibmludGVuZG8saG9sbHl3b29kLWlwYyIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIElQQyByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorICAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gdGhlIElQQyBpbnRlcnJ1cHQKKworMS5rKSBUaGUgIkhvbGx5d29vZCIgaW50ZXJydXB0IGNvbnRyb2xsZXIgbm9kZQorCisgIFJlcHJlc2VudHMgdGhlICJIb2xseXdvb2QiIGludGVycnVwdCBjb250cm9sbGVyIHdpdGhpbiB0aGUKKyAgIkhvbGx5d29vZCIgY2hpcC4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgIC0gI2ludGVycnVwdC1jZWxscyA6IDwxPgorICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGhvbGx5d29vZC1waWMiCisgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKyAgLSBpbnRlcnJ1cHQtY29udHJvbGxlcgorICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgY2FzY2FkZSBpbnRlcnJ1cHQgb2YgdGhlICJmbGlwcGVyIiBwaWMKKyAgLSBpbnRlcnJ1cHQtcGFyZW50OiBzaG91bGQgY29udGFpbiB0aGUgcGhhbmRsZSBvZiB0aGUgImZsaXBwZXIiIHBpYworCisxLmwpIFRoZSBHZW5lcmFsIFB1cnBvc2UgSS9PIChHUElPKSBjb250cm9sbGVyIG5vZGUKKworICBSZXByZXNlbnRzIHRoZSBkdWFsIGFjY2VzcyAzMiBHUElPIGNvbnRyb2xsZXIgaW50ZXJmYWNlLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgLSAjZ3Bpby1jZWxscyA6IDwyPgorICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGhvbGx5d29vZC1ncGlvIgorICAtIHJlZyA6IHNob3VsZCBjb250YWluIHRoZSBJUEMgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKyAgLSBncGlvLWNvbnRyb2xsZXIKKworMS5tKSBUaGUgY29udHJvbCBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgY29udHJvbCBpbnRlcmZhY2UgdXNlZCB0byBzZXR1cCBzZXZlcmFsIG1pc2NlbGxhbmVvdXMKKyAgc2V0dGluZ3Mgb2YgdGhlICJIb2xseXdvb2QiIGNoaXAgbGlrZSBib290IG1lbW9yeSBtYXBwaW5ncywgcmVzZXRzLAorICBkaXNrIGludGVyZmFjZSBtb2RlLCBldGMuCisKKyAgUmVxdWlyZWQgcHJvcGVydGllczoKKworICAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJuaW50ZW5kbyxob2xseXdvb2QtY29udHJvbCIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGgKKworMS5uKSBUaGUgRGlzayBJbnRlcmZhY2UgKERJKSBub2RlCisKKyAgUmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBtYXNzIHN0b3JhZ2UgZGV2aWNlcy4KKworICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCisgICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm5pbnRlbmRvLGhvbGx5d29vZC1kaSIKKyAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIERJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgREkgaW50ZXJydXB0CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKaW5kZXggZTkzYWZmZi4uZTcyY2VlOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKQEAgLTQwMyw0ICs0MDMsNSBAQAogQ2lycnVzIExvZ2ljIENTNDIwNi80MjA3CiA9PT09PT09PT09PT09PT09PT09PT09PT0KICAgbWJwNTUJCU1hY0Jvb2sgUHJvIDUsNQorICBpbWFjMjcJSU1hYyAyNyBJbmNoCiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQKaW5kZXggNjE5Njk5ZC4uMTc4YzgzMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGlubG9ja3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3BpbmxvY2tzLnR4dApAQCAtMSw3MyArMSw4IEBACi1TUElOX0xPQ0tfVU5MT0NLRUQgYW5kIFJXX0xPQ0tfVU5MT0NLRUQgZGVmZWF0IGxvY2tkZXAgc3RhdGUgdHJhY2tpbmcgYW5kCi1hcmUgaGVuY2UgZGVwcmVjYXRlZC4KK0xlc3NvbiAxOiBTcGluIGxvY2tzCiAKLVBsZWFzZSB1c2UgREVGSU5FX1NQSU5MT0NLKCkvREVGSU5FX1JXTE9DSygpIG9yCi1fX1NQSU5fTE9DS19VTkxPQ0tFRCgpL19fUldfTE9DS19VTkxPQ0tFRCgpIGFzIGFwcHJvcHJpYXRlIGZvciBzdGF0aWMKLWluaXRpYWxpemF0aW9uLgorVGhlIG1vc3QgYmFzaWMgcHJpbWl0aXZlIGZvciBsb2NraW5nIGlzIHNwaW5sb2NrLgogCi1Nb3N0IG9mIHRoZSB0aW1lLCB5b3UgY2FuIHNpbXBseSB0dXJuOgotCi0Jc3RhdGljIHNwaW5sb2NrX3QgeHh4X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7Ci0KLWludG86Ci0KLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHh4eF9sb2NrKTsKLQotU3RhdGljIHN0cnVjdHVyZSBtZW1iZXIgdmFyaWFibGVzIGdvIGZyb206Ci0KLQlzdHJ1Y3QgZm9vIGJhciB7Ci0JCS5sb2NrCT0JU1BJTl9MT0NLX1VOTE9DS0VEOwotCX07Ci0KLXRvOgotCi0Jc3RydWN0IGZvbyBiYXIgewotCQkubG9jawk9CV9fU1BJTl9MT0NLX1VOTE9DS0VEKGJhci5sb2NrKTsKLQl9OwotCi1EZWNsYXJhdGlvbiBvZiBzdGF0aWMgcndfbG9ja3MgdW5kZXJnbyBhIHNpbWlsYXIgdHJhbnNmb3JtYXRpb24uCi0KLUR5bmFtaWMgaW5pdGlhbGl6YXRpb24sIHdoZW4gbmVjZXNzYXJ5LCBtYXkgYmUgcGVyZm9ybWVkIGFzCi1kZW1vbnN0cmF0ZWQgYmVsb3cuCi0KLSAgIHNwaW5sb2NrX3QgeHh4X2xvY2s7Ci0gICByd2xvY2tfdCB4eHhfcndfbG9jazsKLQotICAgc3RhdGljIGludCBfX2luaXQgeHh4X2luaXQodm9pZCkKLSAgIHsKLSAgIAlzcGluX2xvY2tfaW5pdCgmeHh4X2xvY2spOwotCXJ3bG9ja19pbml0KCZ4eHhfcndfbG9jayk7Ci0JLi4uCi0gICB9Ci0KLSAgIG1vZHVsZV9pbml0KHh4eF9pbml0KTsKLQotVGhlIGZvbGxvd2luZyBkaXNjdXNzaW9uIGlzIHN0aWxsIHZhbGlkLCBob3dldmVyLCB3aXRoIHRoZSBkeW5hbWljCi1pbml0aWFsaXphdGlvbiBvZiBzcGlubG9ja3Mgb3Igd2l0aCBERUZJTkVfU1BJTkxPQ0ssIGV0Yy4sIHVzZWQKLWluc3RlYWQgb2YgU1BJTl9MT0NLX1VOTE9DS0VELgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1PbiBGcmksIDIgSmFuIDE5OTgsIERvdWcgTGVkZm9yZCB3cm90ZToKLT4gCi0+IEknbSB3b3JraW5nIG9uIG1ha2luZyB0aGUgYWljN3h4eCBkcml2ZXIgbW9yZSBTTVAgZnJpZW5kbHkgKGFzIHdlbGwgYXMKLT4gaW1wb3J0aW5nIHRoZSBsYXRlc3QgRnJlZUJTRCBzZXF1ZW5jZXIgY29kZSB0byBoYXZlIDc4OTUgc3VwcG9ydCkgYW5kIHdhbnRlZAotPiB0byBnZXQgc29tZSBpbmZvIGZyb20geW91LiAgVGhlIGdvYWwgaGVyZSBpcyB0byBtYWtlIHRoZSB2YXJpb3VzIHJvdXRpbmVzCi0+IFNNUCBzYWZlIGFzIHdlbGwgYXMgVVAgc2FmZSBkdXJpbmcgaW50ZXJydXB0cyBhbmQgb3RoZXIgbWFuaXB1bGF0aW5nCi0+IHJvdXRpbmVzLiAgU28gZmFyLCBJJ3ZlIGFkZGVkIGEgc3Bpbl9sb2NrIHZhcmlhYmxlIHRvIHRoaW5ncyBsaWtlIG15IHF1ZXVlCi0+IHN0cnVjdHMuICBOb3csIGZyb20gd2hhdCBJIHJlY2FsbCwgdGhlcmUgYXJlIHNvbWUgc3BpbiBsb2NrIGZ1bmN0aW9ucyBJIGNhbgotPiB1c2UgdG8gbG9jayB0aGVzZSBzcGluIGxvY2tzIGZyb20gb3RoZXIgdXNlIGFzIG9wcG9zZWQgdG8gYSAobmFzdHkpCi0+IHNhdmVfZmxhZ3MoKTsgY2xpKCk7IHN0dWZmOyByZXN0b3JlX2ZsYWdzKCk7IGNvbnN0cnVjdC4gIFdoZXJlIGRvIEkgZmluZAotPiB0aGVzZSByb3V0aW5lcyBhbmQgZ28gYWJvdXQgbWFraW5nIHVzZSBvZiB0aGVtPyAgRG8gdGhleSBvbmx5IGxvY2sgb24gYQotPiBwZXItcHJvY2Vzc29yIGJhc2lzIG9yIGNhbiB0aGV5IGFsc28gbG9jayBzYXkgYW4gaW50ZXJydXB0IHJvdXRpbmUgZnJvbQotPiBtdWNraW5nIHdpdGggYSBxdWV1ZSBpZiB0aGUgcXVldWUgcm91dGluZSB3YXMgbWFuaXB1bGF0aW5nIGl0IHdoZW4gdGhlCi0+IGludGVycnVwdCBvY2N1cnJlZCwgb3Igc2hvdWxkIEkgc3RpbGwgdXNlIGEgY2xpKCk7IGJhc2VkIGNvbnN0cnVjdCBvbiB0aGF0Ci0+IG9uZT8KLQotU2VlIDxhc20vc3BpbmxvY2suaD4uIFRoZSBiYXNpYyB2ZXJzaW9uIGlzOgotCi0gICBzcGlubG9ja190IHh4eF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwotCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHh4eF9sb2NrKTsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc1LDEzICsxMCwxMSBAQAogCS4uLiBjcml0aWNhbCBzZWN0aW9uIGhlcmUgLi4KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4eHhfbG9jaywgZmxhZ3MpOwogCi1hbmQgdGhlIGFib3ZlIGlzIGFsd2F5cyBzYWZlLiBJdCB3aWxsIGRpc2FibGUgaW50ZXJydXB0cyBfbG9jYWxseV8sIGJ1dCB0aGUKK1RoZSBhYm92ZSBpcyBhbHdheXMgc2FmZS4gSXQgd2lsbCBkaXNhYmxlIGludGVycnVwdHMgX2xvY2FsbHlfLCBidXQgdGhlCiBzcGlubG9jayBpdHNlbGYgd2lsbCBndWFyYW50ZWUgdGhlIGdsb2JhbCBsb2NrLCBzbyBpdCB3aWxsIGd1YXJhbnRlZSB0aGF0CiB0aGVyZSBpcyBvbmx5IG9uZSB0aHJlYWQtb2YtY29udHJvbCB3aXRoaW4gdGhlIHJlZ2lvbihzKSBwcm90ZWN0ZWQgYnkgdGhhdAotbG9jay4gCi0KLU5vdGUgdGhhdCBpdCB3b3JrcyB3ZWxsIGV2ZW4gdW5kZXIgVVAgLSB0aGUgYWJvdmUgc2VxdWVuY2UgdW5kZXIgVVAKLWVzc2VudGlhbGx5IGlzIGp1c3QgdGhlIHNhbWUgYXMgZG9pbmcgYQorbG9jay4gVGhpcyB3b3JrcyB3ZWxsIGV2ZW4gdW5kZXIgVVAuIFRoZSBhYm92ZSBzZXF1ZW5jZSB1bmRlciBVUAorZXNzZW50aWFsbHkgaXMganVzdCB0aGUgc2FtZSBhcyBkb2luZwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtOTEsMTUgKzI0LDEzIEBACiAKIHNvIHRoZSBjb2RlIGRvZXMgX25vdF8gbmVlZCB0byB3b3JyeSBhYm91dCBVUCB2cyBTTVAgaXNzdWVzOiB0aGUgc3BpbmxvY2tzCiB3b3JrIGNvcnJlY3RseSB1bmRlciBib3RoIChhbmQgc3BpbmxvY2tzIGFyZSBhY3R1YWxseSBtb3JlIGVmZmljaWVudCBvbgotYXJjaGl0ZWN0dXJlcyB0aGF0IGFsbG93IGRvaW5nIHRoZSAic2F2ZV9mbGFncyArIGNsaSIgaW4gb25lIGdvIGJlY2F1c2UgSQotZG9uJ3QgZXhwb3J0IHRoYXQgaW50ZXJmYWNlIG5vcm1hbGx5KS4KK2FyY2hpdGVjdHVyZXMgdGhhdCBhbGxvdyBkb2luZyB0aGUgInNhdmVfZmxhZ3MgKyBjbGkiIGluIG9uZSBvcGVyYXRpb24pLgogCi1OT1RFIE5PVEUgTk9URSEgVGhlIHJlYXNvbiB0aGUgc3BpbmxvY2sgaXMgc28gbXVjaCBmYXN0ZXIgdGhhbiBhIGdsb2JhbAotaW50ZXJydXB0IGxvY2sgdW5kZXIgU01QIGlzIGV4YWN0bHkgYmVjYXVzZSBpdCBkaXNhYmxlcyBpbnRlcnJ1cHRzIG9ubHkgb24KLXRoZSBsb2NhbCBDUFUuIFRoZSBzcGluLWxvY2sgaXMgc2FmZSBvbmx5IHdoZW4geW91IF9hbHNvXyB1c2UgdGhlIGxvY2sKLWl0c2VsZiB0byBkbyBsb2NraW5nIGFjcm9zcyBDUFUncywgd2hpY2ggaW1wbGllcyB0aGF0IEVWRVJZVEhJTkcgdGhhdAotdG91Y2hlcyBhIHNoYXJlZCB2YXJpYWJsZSBoYXMgdG8gYWdyZWUgYWJvdXQgdGhlIHNwaW5sb2NrIHRoZXkgd2FudCB0bwotdXNlLgorICAgTk9URSEgSW1wbGljYXRpb25zIG9mIHNwaW5fbG9ja3MgZm9yIG1lbW9yeSBhcmUgZnVydGhlciBkZXNjcmliZWQgaW46CisKKyAgICAgRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CisgICAgICAgKDUpIExPQ0sgb3BlcmF0aW9ucy4KKyAgICAgICAoNikgVU5MT0NLIG9wZXJhdGlvbnMuCiAKIFRoZSBhYm92ZSBpcyB1c3VhbGx5IHByZXR0eSBzaW1wbGUgKHlvdSB1c3VhbGx5IG5lZWQgYW5kIHdhbnQgb25seSBvbmUKIHNwaW5sb2NrIGZvciBtb3N0IHRoaW5ncyAtIHVzaW5nIG1vcmUgdGhhbiBvbmUgc3BpbmxvY2sgY2FuIG1ha2UgdGhpbmdzIGEKQEAgLTEyMCwyMCArNTEsMjQgQEAKIHRoZW4gdGhleSBhcmUgTk9UIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIHRoZSBjcml0aWNhbCByZWdpb25zIGNhbiBoYXBwZW4KIGF0IHRoZSBzYW1lIHRpbWUgb24gdHdvIGRpZmZlcmVudCBDUFUncy4gVGhhdCdzIGZpbmUgcGVyIHNlLCBidXQgdGhlCiBjcml0aWNhbCByZWdpb25zIGhhZCBiZXR0ZXIgYmUgY3JpdGljYWwgZm9yIGRpZmZlcmVudCB0aGluZ3MgKGllIHRoZXkKLWNhbid0IHN0b21wIG9uIGVhY2ggb3RoZXIpLiAKK2Nhbid0IHN0b21wIG9uIGVhY2ggb3RoZXIpLgogCiBUaGUgYWJvdmUgaXMgYSBwcm9ibGVtIG1haW5seSBpZiB5b3UgZW5kIHVwIG1peGluZyBjb2RlIC0gZm9yIGV4YW1wbGUgdGhlCiByb3V0aW5lcyBpbiBsbF9yd19ibG9jaygpIHRlbmQgdG8gdXNlIGNsaS9zdGkgdG8gcHJvdGVjdCB0aGUgYXRvbWljaXR5IG9mCiB0aGVpciBhY3Rpb25zLCBhbmQgaWYgYSBkcml2ZXIgdXNlcyBzcGlubG9ja3MgaW5zdGVhZCB0aGVuIHlvdSBzaG91bGQKLXRoaW5rIGFib3V0IGlzc3VlcyBsaWtlIHRoZSBhYm92ZS4uCit0aGluayBhYm91dCBpc3N1ZXMgbGlrZSB0aGUgYWJvdmUuCiAKIFRoaXMgaXMgcmVhbGx5IHRoZSBvbmx5IHJlYWxseSBoYXJkIHBhcnQgYWJvdXQgc3BpbmxvY2tzOiBvbmNlIHlvdSBzdGFydAogdXNpbmcgc3BpbmxvY2tzIHRoZXkgdGVuZCB0byBleHBhbmQgdG8gYXJlYXMgeW91IG1pZ2h0IG5vdCBoYXZlIG5vdGljZWQKIGJlZm9yZSwgYmVjYXVzZSB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHNwaW5sb2NrcyBjb3JyZWN0bHkgcHJvdGVjdCB0aGUKIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgX2V2ZXJ5d2hlcmVfIHRoZXkgYXJlIHVzZWQuIFRoZSBzcGlubG9ja3MgYXJlIG1vc3QKLWVhc2lseSBhZGRlZCB0byBwbGFjZXMgdGhhdCBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBvdGhlciBjb2RlIChpZQotaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5vYm9keSBlbHNlIGV2ZXIgdG91Y2hlcywgZm9yCi1leGFtcGxlKS4gCitlYXNpbHkgYWRkZWQgdG8gcGxhY2VzIHRoYXQgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2Ygb3RoZXIgY29kZSAoZm9yCitleGFtcGxlLCBpbnRlcm5hbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbm9ib2R5IGVsc2UgZXZlciB0b3VjaGVzKS4KKworICAgTk9URSEgVGhlIHNwaW4tbG9jayBpcyBzYWZlIG9ubHkgd2hlbiB5b3UgX2Fsc29fIHVzZSB0aGUgbG9jayBpdHNlbGYKKyAgIHRvIGRvIGxvY2tpbmcgYWNyb3NzIENQVSdzLCB3aGljaCBpbXBsaWVzIHRoYXQgRVZFUllUSElORyB0aGF0CisgICB0b3VjaGVzIGEgc2hhcmVkIHZhcmlhYmxlIGhhcyB0byBhZ3JlZSBhYm91dCB0aGUgc3BpbmxvY2sgdGhleSB3YW50CisgICB0byB1c2UuCiAKIC0tLS0KIApAQCAtMTQxLDE0ICs3NiwxOCBAQAogCiBJZiB5b3VyIGRhdGEgYWNjZXNzZXMgaGF2ZSBhIHZlcnkgbmF0dXJhbCBwYXR0ZXJuIHdoZXJlIHlvdSB1c3VhbGx5IHRlbmQKIHRvIG1vc3RseSByZWFkIGZyb20gdGhlIHNoYXJlZCB2YXJpYWJsZXMsIHRoZSByZWFkZXItd3JpdGVyIGxvY2tzCi0ocndfbG9jaykgdmVyc2lvbnMgb2YgdGhlIHNwaW5sb2NrcyBhcmUgb2Z0ZW4gbmljZXIuIFRoZXkgYWxsb3cgbXVsdGlwbGUKKyhyd19sb2NrKSB2ZXJzaW9ucyBvZiB0aGUgc3BpbmxvY2tzIGFyZSBzb21ldGltZXMgdXNlZnVsLiBUaGV5IGFsbG93IG11bHRpcGxlCiByZWFkZXJzIHRvIGJlIGluIHRoZSBzYW1lIGNyaXRpY2FsIHJlZ2lvbiBhdCBvbmNlLCBidXQgaWYgc29tZWJvZHkgd2FudHMKLXRvIGNoYW5nZSB0aGUgdmFyaWFibGVzIGl0IGhhcyB0byBnZXQgYW4gZXhjbHVzaXZlIHdyaXRlIGxvY2suIFRoZQotcm91dGluZXMgbG9vayB0aGUgc2FtZSBhcyBhYm92ZToKK3RvIGNoYW5nZSB0aGUgdmFyaWFibGVzIGl0IGhhcyB0byBnZXQgYW4gZXhjbHVzaXZlIHdyaXRlIGxvY2suCisKKyAgIE5PVEUhIHJlYWRlci13cml0ZXIgbG9ja3MgcmVxdWlyZSBtb3JlIGF0b21pYyBtZW1vcnkgb3BlcmF0aW9ucyB0aGFuCisgICBzaW1wbGUgc3BpbmxvY2tzLiAgVW5sZXNzIHRoZSByZWFkZXIgY3JpdGljYWwgc2VjdGlvbiBpcyBsb25nLCB5b3UKKyAgIGFyZSBiZXR0ZXIgb2ZmIGp1c3QgdXNpbmcgc3BpbmxvY2tzLgorCitUaGUgcm91dGluZXMgbG9vayB0aGUgc2FtZSBhcyBhYm92ZToKIAogICAgcndsb2NrX3QgeHh4X2xvY2sgPSBSV19MT0NLX1VOTE9DS0VEOwogCi0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmVhZF9sb2NrX2lycXNhdmUoJnh4eF9sb2NrLCBmbGFncyk7CkBAIC0xNTksMTggKzk4LDIxIEBACiAJLi4gcmVhZCBhbmQgd3JpdGUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgaW5mbyAuLi4KIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmeHh4X2xvY2ssIGZsYWdzKTsKIAotVGhlIGFib3ZlIGtpbmQgb2YgbG9jayBpcyB1c2VmdWwgZm9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgbGlua2VkCi1saXN0cyBldGMsIGVzcGVjaWFsbHkgd2hlbiB5b3Uga25vdyB0aGF0IG1vc3Qgb2YgdGhlIHdvcmsgaXMgdG8ganVzdAotdHJhdmVyc2UgdGhlIGxpc3Qgc2VhcmNoaW5nIGZvciBlbnRyaWVzIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxpc3QgaXRzZWxmLAotZm9yIGV4YW1wbGUuIFRoZW4geW91IGNhbiB1c2UgdGhlIHJlYWQgbG9jayBmb3IgdGhhdCBraW5kIG9mIGxpc3QKLXRyYXZlcnNhbCwgd2hpY2ggYWxsb3dzIG1hbnkgY29uY3VycmVudCByZWFkZXJzLiBBbnl0aGluZyB0aGF0IF9jaGFuZ2VzXwotdGhlIGxpc3Qgd2lsbCBoYXZlIHRvIGdldCB0aGUgd3JpdGUgbG9jay4gCitUaGUgYWJvdmUga2luZCBvZiBsb2NrIG1heSBiZSB1c2VmdWwgZm9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxpa2UKK2xpbmtlZCBsaXN0cywgZXNwZWNpYWxseSBzZWFyY2hpbmcgZm9yIGVudHJpZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgbGlzdAoraXRzZWxmLiAgVGhlIHJlYWQgbG9jayBhbGxvd3MgbWFueSBjb25jdXJyZW50IHJlYWRlcnMuICBBbnl0aGluZyB0aGF0CitfY2hhbmdlc18gdGhlIGxpc3Qgd2lsbCBoYXZlIHRvIGdldCB0aGUgd3JpdGUgbG9jay4KIAotTm90ZTogeW91IGNhbm5vdCAidXBncmFkZSIgYSByZWFkLWxvY2sgdG8gYSB3cml0ZS1sb2NrLCBzbyBpZiB5b3UgYXQgX2FueV8KKyAgIE5PVEUhIFJDVSBpcyBiZXR0ZXIgZm9yIGxpc3QgdHJhdmVyc2FsLCBidXQgcmVxdWlyZXMgY2FyZWZ1bAorICAgYXR0ZW50aW9uIHRvIGRlc2lnbiBkZXRhaWwgKHNlZSBEb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dCkuCisKK0Fsc28sIHlvdSBjYW5ub3QgInVwZ3JhZGUiIGEgcmVhZC1sb2NrIHRvIGEgd3JpdGUtbG9jaywgc28gaWYgeW91IGF0IF9hbnlfCiB0aW1lIG5lZWQgdG8gZG8gYW55IGNoYW5nZXMgKGV2ZW4gaWYgeW91IGRvbid0IGRvIGl0IGV2ZXJ5IHRpbWUpLCB5b3UgaGF2ZQotdG8gZ2V0IHRoZSB3cml0ZS1sb2NrIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZy4gSSBjb3VsZCBmYWlybHkgZWFzaWx5IGFkZCBhCi1wcmltaXRpdmUgdG8gY3JlYXRlIGEgInVwZ3JhZGVhYmxlIiByZWFkLWxvY2ssIGJ1dCBpdCBoYXNuJ3QgYmVlbiBhbiBpc3N1ZQoteWV0LiBUZWxsIG1lIGlmIHlvdSdkIHdhbnQgb25lLiAKK3RvIGdldCB0aGUgd3JpdGUtbG9jayBhdCB0aGUgdmVyeSBiZWdpbm5pbmcuCisKKyAgIE5PVEUhIFdlIGFyZSB3b3JraW5nIGhhcmQgdG8gcmVtb3ZlIHJlYWRlci13cml0ZXIgc3BpbmxvY2tzIGluIG1vc3QKKyAgIGNhc2VzLCBzbyBwbGVhc2UgZG9uJ3QgYWRkIGEgbmV3IG9uZSB3aXRob3V0IGNvbnNlbnN1cy4gIChJbnN0ZWFkLCBzZWUKKyAgIERvY3VtZW50YXRpb24vUkNVL3JjdS50eHQgZm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uLikKIAogLS0tLQogCkBAIC0yMzMsNCArMTc1LDQ2IEBACiAKIAkJTGludXMKIAorLS0tLQogCitSZWZlcmVuY2UgaW5mb3JtYXRpb246CisKK0ZvciBkeW5hbWljIGluaXRpYWxpemF0aW9uLCB1c2Ugc3Bpbl9sb2NrX2luaXQoKSBvciByd2xvY2tfaW5pdCgpIGFzCithcHByb3ByaWF0ZToKKworICAgc3BpbmxvY2tfdCB4eHhfbG9jazsKKyAgIHJ3bG9ja190IHh4eF9yd19sb2NrOworCisgICBzdGF0aWMgaW50IF9faW5pdCB4eHhfaW5pdCh2b2lkKQorICAgeworCXNwaW5fbG9ja19pbml0KCZ4eHhfbG9jayk7CisJcndsb2NrX2luaXQoJnh4eF9yd19sb2NrKTsKKwkuLi4KKyAgIH0KKworICAgbW9kdWxlX2luaXQoeHh4X2luaXQpOworCitGb3Igc3RhdGljIGluaXRpYWxpemF0aW9uLCB1c2UgREVGSU5FX1NQSU5MT0NLKCkgLyBERUZJTkVfUldMT0NLKCkgb3IKK19fU1BJTl9MT0NLX1VOTE9DS0VEKCkgLyBfX1JXX0xPQ0tfVU5MT0NLRUQoKSBhcyBhcHByb3ByaWF0ZS4KKworU1BJTl9MT0NLX1VOTE9DS0VEIGFuZCBSV19MT0NLX1VOTE9DS0VEIGFyZSBkZXByZWNhdGVkLiAgVGhlc2UgaW50ZXJmZXJlCit3aXRoIGxvY2tkZXAgc3RhdGUgdHJhY2tpbmcuCisKK01vc3Qgb2YgdGhlIHRpbWUsIHlvdSBjYW4gc2ltcGx5IHR1cm46CisJc3RhdGljIHNwaW5sb2NrX3QgeHh4X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitpbnRvOgorCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeHh4X2xvY2spOworCitTdGF0aWMgc3RydWN0dXJlIG1lbWJlciB2YXJpYWJsZXMgZ28gZnJvbToKKworCXN0cnVjdCBmb28gYmFyIHsKKwkJLmxvY2sJPQlTUElOX0xPQ0tfVU5MT0NLRUQ7CisJfTsKKwordG86CisKKwlzdHJ1Y3QgZm9vIGJhciB7CisJCS5sb2NrCT0JX19TUElOX0xPQ0tfVU5MT0NLRUQoYmFyLmxvY2spOworCX07CisKK0RlY2xhcmF0aW9uIG9mIHN0YXRpYyByd19sb2NrcyB1bmRlcmdvIGEgc2ltaWxhciB0cmFuc2Zvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CmluZGV4IGE0NTIyMjcuLjVlZmZhNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dApAQCAtMjYsMTMgKzI2LDMzIEBACiAKICAtIFNlbmQgdGhlIHBhdGNoLCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBmb2xsb3dzIHRoZSBhYm92ZSBydWxlcywgdG8KICAgIHN0YWJsZUBrZXJuZWwub3JnLgorIC0gVG8gaGF2ZSB0aGUgcGF0Y2ggYXV0b21hdGljYWxseSBpbmNsdWRlZCBpbiB0aGUgc3RhYmxlIHRyZWUsIGFkZCB0aGUKKyAgIHRoZSB0YWcKKyAgICAgQ2M6IHN0YWJsZUBrZXJuZWwub3JnCisgICBpbiB0aGUgc2lnbi1vZmYgYXJlYS4gT25jZSB0aGUgcGF0Y2ggaXMgbWVyZ2VkIGl0IHdpbGwgYmUgYXBwbGllZCB0bworICAgdGhlIHN0YWJsZSB0cmVlIHdpdGhvdXQgYW55dGhpbmcgZWxzZSBuZWVkaW5nIHRvIGJlIGRvbmUgYnkgdGhlIGF1dGhvcgorICAgb3Igc3Vic3lzdGVtIG1haW50YWluZXIuCisgLSBJZiB0aGUgcGF0Y2ggcmVxdWlyZXMgb3RoZXIgcGF0Y2hlcyBhcyBwcmVyZXF1aXNpdGVzIHdoaWNoIGNhbiBiZQorICAgY2hlcnJ5LXBpY2tlZCB0aGFuIHRoaXMgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdCBpbgorICAgdGhlIHNpZ24tb2ZmIGFyZWE6CisKKyAgICAgQ2M6IDxzdGFibGVAa2VybmVsLm9yZz4gIyAuMzIueDogYTFmODRhMzogc2NoZWQ6IENoZWNrIGZvciBpZGxlCisgICAgIENjOiA8c3RhYmxlQGtlcm5lbC5vcmc+ICMgLjMyLng6IDFiOTUwOGY6IHNjaGVkOiBSYXRlLWxpbWl0IG5ld2lkbGUKKyAgICAgQ2M6IDxzdGFibGVAa2VybmVsLm9yZz4gIyAuMzIueDogZmQyMTA3Mzogc2NoZWQ6IEZpeCBhZmZpbml0eSBsb2dpYworICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54CisgICAgU2lnbmVkLW9mZi1ieTogSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+CisKKyAgIFRoZSB0YWcgc2VxdWVuY2UgaGFzIHRoZSBtZWFuaW5nIG9mOgorICAgICBnaXQgY2hlcnJ5LXBpY2sgYTFmODRhMworICAgICBnaXQgY2hlcnJ5LXBpY2sgMWI5NTA4ZgorICAgICBnaXQgY2hlcnJ5LXBpY2sgZmQyMTA3MworICAgICBnaXQgY2hlcnJ5LXBpY2sgPHRoaXMgY29tbWl0PgorCiAgLSBUaGUgc2VuZGVyIHdpbGwgcmVjZWl2ZSBhbiBBQ0sgd2hlbiB0aGUgcGF0Y2ggaGFzIGJlZW4gYWNjZXB0ZWQgaW50byB0aGUKICAgIHF1ZXVlLCBvciBhIE5BSyBpZiB0aGUgcGF0Y2ggaXMgcmVqZWN0ZWQuICBUaGlzIHJlc3BvbnNlIG1pZ2h0IHRha2UgYSBmZXcKICAgIGRheXMsIGFjY29yZGluZyB0byB0aGUgZGV2ZWxvcGVyJ3Mgc2NoZWR1bGVzLgogIC0gSWYgYWNjZXB0ZWQsIHRoZSBwYXRjaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSAtc3RhYmxlIHF1ZXVlLCBmb3IgcmV2aWV3IGJ5CiAgICBvdGhlciBkZXZlbG9wZXJzIGFuZCBieSB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtIG1haW50YWluZXIuCi0gLSBJZiB0aGUgc3RhYmxlQGtlcm5lbC5vcmcgYWRkcmVzcyBpcyBhZGRlZCB0byBhIHBhdGNoLCB3aGVuIGl0IGdvZXMgaW50bwotICAgTGludXMncyB0cmVlIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBlbWFpbGVkIHRvIHRoZSBzdGFibGUgdGVhbS4KICAtIFNlY3VyaXR5IHBhdGNoZXMgc2hvdWxkIG5vdCBiZSBzZW50IHRvIHRoaXMgYWxpYXMsIGJ1dCBpbnN0ZWFkIHRvIHRoZQogICAgZG9jdW1lbnRlZCBzZWN1cml0eUBrZXJuZWwub3JnIGFkZHJlc3MuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IDhmN2EwZTcuLjM4OTRlYWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMTksNiArMTksOCBAQAogc2hvdyB1cCBpbiAvcHJvYy9zeXMva2VybmVsOgogLSBhY3BpX3ZpZGVvX2ZsYWdzCiAtIGFjY3QKKy0gYm9vdGxvYWRlcl90eXBlCSAgICAgWyBYODYgb25seSBdCistIGJvb3Rsb2FkZXJfdmVyc2lvbgkgICAgIFsgWDg2IG9ubHkgXQogLSBjYWxsaG9tZQkJICAgICBbIFMzOTAgb25seSBdCiAtIGF1dG9fbXNnbW5pCiAtIGNvcmVfcGF0dGVybgpAQCAtOTMsNiArOTUsMzUgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorYm9vdGxvYWRlcl90eXBlOgorCit4ODYgYm9vdGxvYWRlciBpZGVudGlmaWNhdGlvbgorCitUaGlzIGdpdmVzIHRoZSBib290bG9hZGVyIHR5cGUgbnVtYmVyIGFzIGluZGljYXRlZCBieSB0aGUgYm9vdGxvYWRlciwKK3NoaWZ0ZWQgbGVmdCBieSA0LCBhbmQgT1InZCB3aXRoIHRoZSBsb3cgZm91ciBiaXRzIG9mIHRoZSBib290bG9hZGVyCit2ZXJzaW9uLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBlbmNvZGluZyBpcyB0aGF0IHRoaXMgdXNlZCB0byBtYXRjaCB0aGUKK3R5cGVfb2ZfbG9hZGVyIGZpZWxkIGluIHRoZSBrZXJuZWwgaGVhZGVyOyB0aGUgZW5jb2RpbmcgaXMga2VwdCBmb3IKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgVGhhdCBpcywgaWYgdGhlIGZ1bGwgYm9vdGxvYWRlciB0eXBlIG51bWJlcgoraXMgMHgxNSBhbmQgdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgaXMgMHgyMzQsIHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4KK3RoZSB2YWx1ZSAzNDAgPSAweDE1NC4KKworU2VlIHRoZSB0eXBlX29mX2xvYWRlciBhbmQgZXh0X2xvYWRlcl90eXBlIGZpZWxkcyBpbgorRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Jvb3Rsb2FkZXJfdmVyc2lvbjoKKworeDg2IGJvb3Rsb2FkZXIgdmVyc2lvbgorCitUaGUgY29tcGxldGUgYm9vdGxvYWRlciB2ZXJzaW9uIG51bWJlci4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGlzCitmaWxlIHdpbGwgY29udGFpbiB0aGUgdmFsdWUgNTY0ID0gMHgyMzQuCisKK1NlZSB0aGUgdHlwZV9vZl9sb2FkZXIgYW5kIGV4dF9sb2FkZXJfdmVyIGZpZWxkcyBpbgorRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIGNhbGxob21lOgogCiBDb250cm9scyB0aGUga2VybmVsJ3MgY2FsbGhvbWUgYmVoYXZpb3IgaW4gY2FzZSBvZiBhIGtlcm5lbCBwYW5pYy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQKaW5kZXggYTg3ZGMyNy4uY2IzZDE1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQKQEAgLTIwNiw2ICsyMDYsNyBAQAogCXBhc3NpdmUgdHJpcCBwb2ludCBmb3IgdGhlIHpvbmUuIEFjdGl2YXRpb24gaXMgZG9uZSBieSBwb2xsaW5nIHdpdGgKIAlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KIAlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cworCVZhbGlkIHZhbHVlczogMCAoZGlzYWJsZWQpIG9yIGdyZWF0ZXIgdGhhbiAxMDAwCiAJUlcsIE9wdGlvbmFsCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLWttZW0udHh0CmluZGV4IDZlZjJhODYuLmFhODJlZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLWttZW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLWttZW0udHh0CkBAIC0xLDcgKzEsNyBAQAogCQkJU3Vic3lzdGVtIFRyYWNlIFBvaW50czoga21lbQogCi1UaGUgdHJhY2luZyBzeXN0ZW0ga21lbSBjYXB0dXJlcyBldmVudHMgcmVsYXRlZCB0byBvYmplY3QgYW5kIHBhZ2UgYWxsb2NhdGlvbgotd2l0aGluIHRoZSBrZXJuZWwuIEJyb2FkbHkgc3BlYWtpbmcgdGhlcmUgYXJlIGZvdXIgbWFqb3Igc3ViaGVhZGluZ3MuCitUaGUga21lbSB0cmFjaW5nIHN5c3RlbSBjYXB0dXJlcyBldmVudHMgcmVsYXRlZCB0byBvYmplY3QgYW5kIHBhZ2UgYWxsb2NhdGlvbgord2l0aGluIHRoZSBrZXJuZWwuIEJyb2FkbHkgc3BlYWtpbmcgdGhlcmUgYXJlIGZpdmUgbWFqb3Igc3ViaGVhZGluZ3MuCiAKICAgbyBTbGFiIGFsbG9jYXRpb24gb2Ygc21hbGwgb2JqZWN0cyBvZiB1bmtub3duIHR5cGUgKGttYWxsb2MpCiAgIG8gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2Yga25vd24gdHlwZQpAQCAtOSw3ICs5LDcgQEAKICAgbyBQZXItQ1BVIEFsbG9jYXRvciBBY3Rpdml0eQogICBvIEV4dGVybmFsIEZyYWdtZW50YXRpb24KIAotVGhpcyBkb2N1bWVudCB3aWxsIGRlc2NyaWJlIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgYXJlIGFuZCB3aHkgdGhleQorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgd2hhdCBlYWNoIG9mIHRoZSB0cmFjZXBvaW50cyBpcyBhbmQgd2h5IHRoZXkKIG1pZ2h0IGJlIHVzZWZ1bC4KIAogMS4gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2YgdW5rbm93biB0eXBlCkBAIC0zNCw3ICszNCw3IEBACiBUaGVzZSBldmVudHMgYXJlIHNpbWlsYXIgaW4gdXNhZ2UgdG8gdGhlIGttYWxsb2MtcmVsYXRlZCBldmVudHMgZXhjZXB0IHRoYXQKIGl0IGlzIGxpa2VseSBlYXNpZXIgdG8gcGluIHRoZSBldmVudCBkb3duIHRvIGEgc3BlY2lmaWMgY2FjaGUuIEF0IHRoZSB0aW1lCiBvZiB3cml0aW5nLCBubyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb24gd2hhdCBzbGFiIGlzIGJlaW5nIGFsbG9jYXRlZCBmcm9tLAotYnV0IHRoZSBjYWxsX3NpdGUgY2FuIHVzdWFsbHkgYmUgdXNlZCB0byBleHRyYXBvbGF0ZSB0aGF0IGluZm9ybWF0aW9uCitidXQgdGhlIGNhbGxfc2l0ZSBjYW4gdXN1YWxseSBiZSB1c2VkIHRvIGV4dHJhcG9sYXRlIHRoYXQgaW5mb3JtYXRpb24uCiAKIDMuIFBhZ2UgYWxsb2NhdGlvbgogPT09PT09PT09PT09PT09PT09CkBAIC04MCw5ICs4MCw5IEBACiBXaGVuIHRoZSBwZXItQ1BVIGxpc3QgaXMgdG9vIGZ1bGwsIGEgbnVtYmVyIG9mIHBhZ2VzIGFyZSBmcmVlZCwgZWFjaCBvbmUKIHdoaWNoIHRyaWdnZXJzIGEgbW1fcGFnZV9wY3B1X2RyYWluIGV2ZW50LgogCi1UaGUgaW5kaXZpZHVhbCBuYXR1cmUgb2YgdGhlIGV2ZW50cyBhcmUgc28gdGhhdCBwYWdlcyBjYW4gYmUgdHJhY2tlZAorVGhlIGluZGl2aWR1YWwgbmF0dXJlIG9mIHRoZSBldmVudHMgaXMgc28gdGhhdCBwYWdlcyBjYW4gYmUgdHJhY2tlZAogYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLiBBIG51bWJlciBvZiBkcmFpbiBvciByZWZpbGwgcGFnZXMgdGhhdCBvY2N1cgotY29uc2VjdXRpdmVseSBpbXBseSB0aGUgem9uZS0+bG9jayBiZWluZyB0YWtlbiBvbmNlLiBMYXJnZSBhbW91bnRzIG9mIFBDUAorY29uc2VjdXRpdmVseSBpbXBseSB0aGUgem9uZS0+bG9jayBiZWluZyB0YWtlbiBvbmNlLiBMYXJnZSBhbW91bnRzIG9mIHBlci1DUFUKIHJlZmlsbHMgYW5kIGRyYWlucyBjb3VsZCBpbXBseSBhbiBpbWJhbGFuY2UgYmV0d2VlbiBDUFVzIHdoZXJlIHRvbyBtdWNoIHdvcmsKIGlzIGJlaW5nIGNvbmNlbnRyYXRlZCBpbiBvbmUgcGxhY2UuIEl0IGNvdWxkIGFsc28gaW5kaWNhdGUgdGhhdCB0aGUgcGVyLUNQVQogbGlzdHMgc2hvdWxkIGJlIGEgbGFyZ2VyIHNpemUuIEZpbmFsbHksIGxhcmdlIGFtb3VudHMgb2YgcmVmaWxscyBvbiBvbmUgQ1BVCkBAIC0xMDIsNiArMTAyLDYgQEAKIAogTGFyZ2UgbnVtYmVycyBvZiB0aGlzIGV2ZW50IGltcGxpZXMgdGhhdCBtZW1vcnkgaXMgZnJhZ21lbnRpbmcgYW5kCiBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHdpbGwgc3RhcnQgZmFpbGluZyBhdCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4gT25lCi1tZWFucyBvZiByZWR1Y2luZyB0aGUgb2NjdXJhbmdlIG9mIHRoaXMgZXZlbnQgaXMgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YKK21lYW5zIG9mIHJlZHVjaW5nIHRoZSBvY2N1cnJlbmNlIG9mIHRoaXMgZXZlbnQgaXMgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YKIG1pbl9mcmVlX2tieXRlcyBpbiBpbmNyZW1lbnRzIG9mIDMqcGFnZWJsb2NrX3NpemUqbnJfb25saW5lX25vZGVzIHdoZXJlCiBwYWdlYmxvY2tfc2l6ZSBpcyB1c3VhbGx5IHRoZSBzaXplIG9mIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CmluZGV4IGM3YzFkYzIuLjNiZjY4MTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CkBAIC03MSwxMiArNzEsMTAgQEAKIAlGb3JtcyBvZiBkeW5hbWljIFBNCiAJLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1EeW5hbWljIHN1c3BlbmRzIGNhbiBvY2N1ciBpbiB0d28gd2F5czogbWFudWFsIGFuZCBhdXRvbWF0aWMuCi0iTWFudWFsIiBtZWFucyB0aGF0IHRoZSB1c2VyIGhhcyB0b2xkIHRoZSBrZXJuZWwgdG8gc3VzcGVuZCBhIGRldmljZSwKLXdoZXJlYXMgImF1dG9tYXRpYyIgbWVhbnMgdGhhdCB0aGUga2VybmVsIGhhcyBkZWNpZGVkIGFsbCBieSBpdHNlbGYgdG8KLXN1c3BlbmQgYSBkZXZpY2UuICBBdXRvbWF0aWMgc3VzcGVuZCBpcyBjYWxsZWQgImF1dG9zdXNwZW5kIiBmb3IKLXNob3J0LiAgSW4gZ2VuZXJhbCwgYSBkZXZpY2Ugd29uJ3QgYmUgYXV0b3N1c3BlbmRlZCB1bmxlc3MgaXQgaGFzIGJlZW4KLWlkbGUgZm9yIHNvbWUgbWluaW11bSBwZXJpb2Qgb2YgdGltZSwgdGhlIHNvLWNhbGxlZCBpZGxlLWRlbGF5IHRpbWUuCitEeW5hbWljIHN1c3BlbmRzIG9jY3VyIHdoZW4gdGhlIGtlcm5lbCBkZWNpZGVzIHRvIHN1c3BlbmQgYW4gaWRsZQorZGV2aWNlLiAgVGhpcyBpcyBjYWxsZWQgImF1dG9zdXNwZW5kIiBmb3Igc2hvcnQuICBJbiBnZW5lcmFsLCBhIGRldmljZQord29uJ3QgYmUgYXV0b3N1c3BlbmRlZCB1bmxlc3MgaXQgaGFzIGJlZW4gaWRsZSBmb3Igc29tZSBtaW5pbXVtIHBlcmlvZAorb2YgdGltZSwgdGhlIHNvLWNhbGxlZCBpZGxlLWRlbGF5IHRpbWUuCiAKIE9mIGNvdXJzZSwgbm90aGluZyB0aGUga2VybmVsIGRvZXMgb24gaXRzIG93biBpbml0aWF0aXZlIHNob3VsZAogcHJldmVudCB0aGUgY29tcHV0ZXIgb3IgaXRzIGRldmljZXMgZnJvbSB3b3JraW5nIHByb3Blcmx5LiAgSWYgYQpAQCAtOTYsMTAgKzk0LDExIEBACiBXZSBjYW4gY2F0ZWdvcml6ZSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyBpbiB0d28gYnJvYWQgY2xhc3NlczoKIGV4dGVybmFsIGFuZCBpbnRlcm5hbC4gIEV4dGVybmFsIGV2ZW50cyBhcmUgdGhvc2UgdHJpZ2dlcmVkIGJ5IHNvbWUKIGFnZW50IG91dHNpZGUgdGhlIFVTQiBzdGFjazogc3lzdGVtIHN1c3BlbmQvcmVzdW1lICh0cmlnZ2VyZWQgYnkKLXVzZXJzcGFjZSksIG1hbnVhbCBkeW5hbWljIHN1c3BlbmQvcmVzdW1lIChhbHNvIHRyaWdnZXJlZCBieQotdXNlcnNwYWNlKSwgYW5kIHJlbW90ZSB3YWtldXAgKHRyaWdnZXJlZCBieSB0aGUgZGV2aWNlKS4gIEludGVybmFsCi1ldmVudHMgYXJlIHRob3NlIHRyaWdnZXJlZCB3aXRoaW4gdGhlIFVTQiBzdGFjazogYXV0b3N1c3BlbmQgYW5kCi1hdXRvcmVzdW1lLgordXNlcnNwYWNlKSwgbWFudWFsIGR5bmFtaWMgcmVzdW1lIChhbHNvIHRyaWdnZXJlZCBieSB1c2Vyc3BhY2UpLCBhbmQKK3JlbW90ZSB3YWtldXAgKHRyaWdnZXJlZCBieSB0aGUgZGV2aWNlKS4gIEludGVybmFsIGV2ZW50cyBhcmUgdGhvc2UKK3RyaWdnZXJlZCB3aXRoaW4gdGhlIFVTQiBzdGFjazogYXV0b3N1c3BlbmQgYW5kIGF1dG9yZXN1bWUuICBOb3RlIHRoYXQKK2FsbCBkeW5hbWljIHN1c3BlbmQgZXZlbnRzIGFyZSBpbnRlcm5hbDsgZXh0ZXJuYWwgYWdlbnRzIGFyZSBub3QKK2FsbG93ZWQgdG8gaXNzdWUgZHluYW1pYyBzdXNwZW5kcy4KIAogCiAJVGhlIHVzZXIgaW50ZXJmYWNlIGZvciBkeW5hbWljIFBNCkBAIC0xNDUsOSArMTQ0LDkgQEAKIAkJbnVtYmVyIG9mIHNlY29uZHMgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIGlkbGUgYmVmb3JlCiAJCXRoZSBrZXJuZWwgd2lsbCBhdXRvc3VzcGVuZCBpdCAodGhlIGlkbGUtZGVsYXkgdGltZSkuCiAJCVRoZSBkZWZhdWx0IGlzIDIuICAwIG1lYW5zIHRvIGF1dG9zdXNwZW5kIGFzIHNvb24gYXMKLQkJdGhlIGRldmljZSBiZWNvbWVzIGlkbGUsIGFuZCAtMSBtZWFucyBuZXZlciB0bwotCQlhdXRvc3VzcGVuZC4gIFlvdSBjYW4gd3JpdGUgYSBudW1iZXIgdG8gdGhlIGZpbGUgdG8KLQkJY2hhbmdlIHRoZSBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IHRpbWUuCisJCXRoZSBkZXZpY2UgYmVjb21lcyBpZGxlLCBhbmQgbmVnYXRpdmUgdmFsdWVzIG1lYW4KKwkJbmV2ZXIgdG8gYXV0b3N1c3BlbmQuICBZb3UgY2FuIHdyaXRlIGEgbnVtYmVyIHRvIHRoZQorCQlmaWxlIHRvIGNoYW5nZSB0aGUgYXV0b3N1c3BlbmQgaWRsZS1kZWxheSB0aW1lLgogCiBXcml0aW5nICItMSIgdG8gcG93ZXIvYXV0b3N1c3BlbmQgYW5kIHdyaXRpbmcgIm9uIiB0byBwb3dlci9sZXZlbCBkbwogZXNzZW50aWFsbHkgdGhlIHNhbWUgdGhpbmcgLS0gdGhleSBib3RoIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nCkBAIC0zNzcsOSArMzc2LDkgQEAKIHJvdXRpbmUgaXMgYXV0b21hdGljYWxseSBzZXQgdXAgdG8gY2Fycnkgb3V0IHRoZSBvcGVyYXRpb24gd2hlbiB0aGUKIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkgaGFzIGV4cGlyZWQuCiAKLUF1dG9yZXN1bWUgYXR0ZW1wdHMgYWxzbyBjYW4gZmFpbC4gIFRoaXMgd2lsbCBoYXBwZW4gaWYgcG93ZXIvbGV2ZWwgaXMKLXNldCB0byAic3VzcGVuZCIgb3IgaWYgdGhlIGRldmljZSBkb2Vzbid0IG1hbmFnZSB0byByZXN1bWUgcHJvcGVybHkuCi1Vbmxpa2UgYXV0b3N1c3BlbmQsIHRoZXJlJ3Mgbm8gZGVsYXkgZm9yIGFuIGF1dG9yZXN1bWUuCitBdXRvcmVzdW1lIGF0dGVtcHRzIGFsc28gY2FuIGZhaWwsIGFsdGhvdWdoIGZhaWx1cmUgd291bGQgbWVhbiB0aGF0Cit0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50IG9yIG9wZXJhdGluZyBwcm9wZXJseS4gIFVubGlrZQorYXV0b3N1c3BlbmQsIHRoZXJlJ3Mgbm8gZGVsYXkgZm9yIGFuIGF1dG9yZXN1bWUuCiAKIAogCU90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIgaW50ZXJmYWNlCkBAIC01MjcsMTMgKzUyNiwzIEBACiByZXN1bWUgYXMgc29vbiBhcyB0aGUgc3lzdGVtIHN1c3BlbmQgaXMgY29tcGxldGUuICBPciB0aGUgcmVtb3RlCiB3YWtldXAgbWF5IGZhaWwgYW5kIGdldCBsb3N0LiAgV2hpY2ggb3V0Y29tZSBvY2N1cnMgZGVwZW5kcyBvbiB0aW1pbmcKIGFuZCBvbiB0aGUgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGRlc2lnbi4KLQotTW9yZSBpbnRlcmVzdGluZ2x5LCBhIGRldmljZSBtaWdodCB1bmRlcmdvIGEgbWFudWFsIHJlc3VtZSBvcgotYXV0b3Jlc3VtZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQuICBXaXRoIGN1cnJlbnQga2VybmVscyB0aGlzIHNob3VsZG4ndAotaGFwcGVuLCBiZWNhdXNlIG1hbnVhbCByZXN1bWVzIG11c3QgYmUgaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSBhbmQKLWF1dG9yZXN1bWVzIGhhcHBlbiBpbiByZXNwb25zZSB0byBJL08gcmVxdWVzdHMsIGJ1dCBhbGwgdXNlciBwcm9jZXNzZXMKLWFuZCBJL08gc2hvdWxkIGJlIHF1aWVzY2VudCBkdXJpbmcgYSBzeXN0ZW0gc3VzcGVuZCAtLSB0aGFua3MgdG8gdGhlCi1mcmVlemVyLiAgSG93ZXZlciB0aGVyZSBhcmUgcGxhbnMgdG8gZG8gYXdheSB3aXRoIHRoZSBmcmVlemVyLCB3aGljaAotd291bGQgbWVhbiB0aGVzZSB0aGluZ3Mgd291bGQgYmVjb21lIHBvc3NpYmxlLiAgSWYgYW5kIHdoZW4gdGhpcyBjb21lcwotYWJvdXQsIHRoZSBVU0IgY29yZSB3aWxsIGNhcmVmdWxseSBhcnJhbmdlIG1hdHRlcnMgc28gdGhhdCBlaXRoZXIgdHlwZQotb2YgcmVzdW1lIHdpbGwgYmxvY2sgdW50aWwgdGhlIGVudGlyZSBzeXN0ZW0gaGFzIHJlc3VtZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDMxOWQ5ODMuLjE4MDBhNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC0xMiw2ICsxMiw3IEBACiBzcGNhNTAxCQkwNDBhOjAwMDIJS29kYWsgRFZDLTMyNQogc3BjYTUwMAkJMDQwYTowMzAwCUtvZGFrIEVaMjAwCiB6YzN4eAkJMDQxZTowNDFlCUNyZWF0aXZlIFdlYkNhbSBMaXZlIQorb3Y1MTkJCTA0MWU6NDAwMwlWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyBQbHVzCiBzcGNhNTAwCQkwNDFlOjQwMGEJQ3JlYXRpdmUgUEMtQ0FNIDMwMAogc3VucGx1cwkJMDQxZTo0MDBiCUNyZWF0aXZlIFBDLUNBTSA2MDAKIHN1bnBsdXMJCTA0MWU6NDAxMglQQy1DYW0zNTAKQEAgLTE2OCwxMCArMTY5LDE0IEBACiB6YzN4eAkJMDU1ZjpkMDAzCU11c3RlayBXQ2FtMzAwQQogemMzeHgJCTA1NWY6ZDAwNAlNdXN0ZWsgV0NhbTMwMCBBTgogY29uZXgJCTA1NzI6MDA0MQlDcmVhdGl2ZSBOb3RlYm9vayBjeDExNjQ2CitvdjUxOQkJMDVhOTowNTExCVZpZGVvIEJsYXN0ZXIgV2ViQ2FtIDMvV2ViQ2FtIFBsdXMsIEQtTGluayBVU0IgRGlnaXRhbCBWaWRlbyBDYW1lcmEKK292NTE5CQkwNWE5OjA1MTgJQ3JlYXRpdmUgV2ViQ2FtCiBvdjUxOQkJMDVhOTowNTE5CU9WNTE5IE1pY3JvcGhvbmUKIG92NTE5CQkwNWE5OjA1MzAJT21uaVZpc2lvbgorb3Y1MTkJCTA1YTk6MjgwMAlPbW5pVmlzaW9uIFN1cGVyQ0FNCiBvdjUxOQkJMDVhOTo0NTE5CVdlYmNhbSBDbGFzc2ljCiBvdjUxOQkJMDVhOTo4NTE5CU9tbmlWaXNpb24KK292NTE5CQkwNWE5OmE1MTEJRC1MaW5rIFVTQiBEaWdpdGFsIFZpZGVvIENhbWVyYQogb3Y1MTkJCTA1YTk6YTUxOAlELUxpbmsgRFNCLUMzMTAgV2ViY2FtCiBzdW5wbHVzCQkwNWRhOjEwMTgJRGlnaXRhbCBEcmVhbSBFbmlnbWEgMS4zCiBzdGswMTQJCTA1ZTE6MDg5MwlTeW50ZWsgRFY0MDAwCkBAIC0xODcsNyArMTkyLDcgQEAKIG92NTM0CQkwNmY4OjMwMDMJSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cKIHNvbml4agkJMDZmODozMDA0CUhlcmN1bGVzIENsYXNzaWMgU2lsdmVyCiBzb25peGoJCTA2Zjg6MzAwOAlIZXJjdWxlcyBEZWx1eGUgT3B0aWNhbCBHbGFzcwotcGFjNzMxMQkJMDZmODozMDA5CUhlcmN1bGVzIENsYXNzaWMgTGluaworcGFjNzMwMgkJMDZmODozMDA5CUhlcmN1bGVzIENsYXNzaWMgTGluawogc3BjYTUwOAkJMDczMzowMTEwCVZpZXdRdWVzdCBWUTExMAogc3BjYTUwMQkJMDczMzowNDAxCUludGVsIENyZWF0ZSBhbmQgU2hhcmUKIHNwY2E1MDEJCTA3MzM6MDQwMglWaWV3UXVlc3QgTTMxOEIKQEAgLTE5OSw2ICsyMDQsNyBAQAogc3VucGx1cwkJMDczMzozMjYxCUNvbmNvcmQgMzA0NSBzcGNhNTM2YQogc3VucGx1cwkJMDczMzozMjgxCUN5YmVycGl4IFM1NTBWCiBzcGNhNTA2CQkwNzM0OjA0M2IJM0RlTW9uIFVTQiBDYXB0dXJlIGFrYQorb3Y1MTkJCTA4MTM6MDAwMglEdWFsIE1vZGUgVVNCIENhbWVyYSBQbHVzCiBzcGNhNTAwCQkwODRkOjAwMDMJRC1MaW5rIERTQy0zNTAKIHNwY2E1MDAJCTA4Y2E6MDEwMwlBaXB0ZWsgUG9ja2V0RFYKIHN1bnBsdXMJCTA4Y2E6MDEwNAlBaXB0ZWsgUG9ja2V0RFZJSSAxLjMKQEAgLTIzNiwxNSArMjQyLDE1IEBACiBwYWM3MzExCQkwOTNhOjI2MDgJVHJ1c3QgV0ItMzMwMHAKIHBhYzczMTEJCTA5M2E6MjYwZQlHaWdhd2FyZSBWR0EgUEMgQ2FtZXJhLCBUcnVzdCBXQi0zMzUwcCwgU0lHTUEgY2FtIDIzNTAKIHBhYzczMTEJCTA5M2E6MjYwZglTbmFrZUNhbQotcGFjNzMxMQkJMDkzYToyNjIwCUFwb2xsbyBBQy05MDUKLXBhYzczMTEJCTA5M2E6MjYyMQlQQUM3MzF4Ci1wYWM3MzExCQkwOTNhOjI2MjIJR2VuaXVzIEV5ZSAzMTIKLXBhYzczMTEJCTA5M2E6MjYyNAlQQUM3MzAyCi1wYWM3MzExCQkwOTNhOjI2MjYJTGFidGVjIDIyMDAKLXBhYzczMTEJCTA5M2E6MjYyOAlHZW5pdXMgaUxvb2sgMzAwCi1wYWM3MzExCQkwOTNhOjI2MjkJR2VuaW91cyBpU2xpbSAzMDAKLXBhYzczMTEJCTA5M2E6MjYyYQlXZWJjYW0gMzAwawotcGFjNzMxMQkJMDkzYToyNjJjCVBoaWxpcHMgU1BDIDIzMCBOQworcGFjNzMwMgkJMDkzYToyNjIwCUFwb2xsbyBBQy05MDUKK3BhYzczMDIJCTA5M2E6MjYyMQlQQUM3MzF4CitwYWM3MzAyCQkwOTNhOjI2MjIJR2VuaXVzIEV5ZSAzMTIKK3BhYzczMDIJCTA5M2E6MjYyNAlQQUM3MzAyCitwYWM3MzAyCQkwOTNhOjI2MjYJTGFidGVjIDIyMDAKK3BhYzczMDIJCTA5M2E6MjYyOAlHZW5pdXMgaUxvb2sgMzAwCitwYWM3MzAyCQkwOTNhOjI2MjkJR2VuaW91cyBpU2xpbSAzMDAKK3BhYzczMDIJCTA5M2E6MjYyYQlXZWJjYW0gMzAwaworcGFjNzMwMgkJMDkzYToyNjJjCVBoaWxpcHMgU1BDIDIzMCBOQwogamVpbGluagkJMDk3OTowMjgwCVNha2FyIDU3Mzc5CiB6YzN4eAkJMGFjODowMzAyCVotc3RhciBWaW1pY3JvIHpjMDMwMgogdmMwMzJ4CQkwYWM4OjAzMjEJVmltaWNybyBnZW5lcmljIHZjMDMyMQpAQCAtMjU5LDYgKzI2NSw3IEBACiB2YzAzMngJCTBhYzg6YzMwMQlTYW1zdW5nIFExIFVsdHJhIFByZW1pdW0KIHNwY2E1MDgJCTBhZjk6MDAxMAlIYW1hIFVTQiBTaWdodGNhbSAxMDAKIHNwY2E1MDgJCTBhZjk6MDAxMQlIYW1hIFVTQiBTaWdodGNhbSAxMDAKK292NTE5CQkwYjYyOjAwNTkJaUJPVDIgV2ViY2FtCiBzb25peGIJCTBjNDU6NjAwMQlHZW5pdXMgVmlkZW9DQU0gTkIKIHNvbml4YgkJMGM0NTo2MDA1CU1pY3JvZGlhIFN3ZWV4IE1pbmkgV2ViY2FtCiBzb25peGIJCTBjNDU6NjAwNwlTb25peCBzbjljMTAxICsgVGFzNTExMEQKQEAgLTMxOCw4ICszMjUsMTAgQEAKIHNuOWMyMHgJCTBjNDU6NjJiYglQQyBDYW1lcmEgKFNOOUMyMDIgKyBPVjc2NjApCiBzbjljMjB4CQkwYzQ1OjYyYmMJUEMgQ2FtZXJhIChTTjlDMjAyICsgSFY3MTMxUikKIHN1bnBsdXMJCTBkNjQ6MDMwMwlTdW5wbHVzIEZhc2hpb25DYW0gRFhHCitvdjUxOQkJMGU5NjpjMDAxCVRSVVNUIDM4MCBVU0IyIFNQQUNFQ0BNCiBldG9tcwkJMTAyYzo2MTUxCVFjYW0gU2FuZ2hhIENJRgogZXRvbXMJCTEwMmM6NjI1MQlRY2FtIHh4eHh4eCBWR0EKK292NTE5CQkxMDQ2Ojk5NjcJVzk5NjdDRi9XOTk2OENGIFdlYkNhbSBJQywgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28KIHpjM3h4CQkxMGZkOjAxMjgJVHlwaG9vbiBXZWJzaG90IElJIFVTQiAzMDBrIDB4MDEyOAogc3BjYTU2MQkJMTBmZDo3ZTUwCUZseUNhbSBVc2IgMTAwCiB6YzN4eAkJMTBmZDo4MDUwCVR5cGhvb24gV2Vic2hvdCBJSSBVU0IgMzAwawpAQCAtMzMyLDcgKzM0MSwxMiBAQAogdDYxMwkJMTdhMTowMTI4CVRBU0NPUlAgSlBFRyBXZWJjYW0sIE5HUyBDeWNsb3BzCiB2YzAzMngJCTE3ZWY6NDgwMglMZW5vdm8gVmMwMzIzK01JMTMxMF9TT0MKIHBhYzIwNwkJMjAwMTpmMTE1CUQtTGluayBEU0ItQzEyMAorc3E5MDVjCQkyNzcwOjkwNTAJc3E5MDVjCitzcTkwNWMJCTI3NzA6OTA1YwlEdWFsQ2FtZXJhCitzcTkwNQkJMjc3MDo5MTIwCUFyZ3VzIERpZ2l0YWwgQ2FtZXJhIERDMTUxMgorc3E5MDVjCQkyNzcwOjkxM2QJc3E5MDVjCiBzcGNhNTAwCQkyODk5OjAxMmMJVG9wdHJvIEluZHVzdHJpYWwKK292NTE5CQk4MDIwOmVmMDQJb3Y1MTkKIHNwY2E1MDgJCTgwODY6MDExMAlJbnRlbCBFYXN5IFBDIENhbWVyYQogc3BjYTUwMAkJODA4NjowNjMwCUludGVsIFBvY2tldCBQQyBDYW1lcmEKIHNwY2E1MDYJCTk5ZmE6ODk4OAlHcmFuZHRlYyBWLmNhcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2V1X2NhbWVyYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NoX21vYmlsZV9jZXVfY2FtZXJhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWUxNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2V1X2NhbWVyYS50eHQKQEAgLTAsMCArMSwxNTcgQEAKKwlDcm9wcGluZyBhbmQgU2NhbGluZyBhbGdvcml0aG0sIHVzZWQgaW4gdGhlIHNoX21vYmlsZV9jZXVfY2FtZXJhIGRyaXZlcgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1Rlcm1pbm9sb2d5CistLS0tLS0tLS0tLQorCitzZW5zb3Igc2NhbGVzOiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsZXMsIGNvbmZpZ3VyZWQgYnkgdGhlIHNlbnNvciBkcml2ZXIKK2hvc3Qgc2NhbGVzOiAtIi0gaG9zdCBkcml2ZXIKK2NvbWJpbmVkIHNjYWxlczogc2Vuc29yX3NjYWxlICogaG9zdF9zY2FsZQorCisKK0dlbmVyaWMgc2NhbGluZyAvIGNyb3BwaW5nIHNjaGVtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0xLS0KK3wKKy0yLS0gLVwKK3wgICAgICAtLVwKK3wgICAgICAgICAtLVwKKystNS0tIC1cICAgICAtLSAtMy0tCit8ICAgICAgIC0tLVwKK3wgICAgICAgICAgIC0tLSAtNC0tIC1cCit8ICAgICAgICAgICAgICAgICAgICAgIC1cCit8ICAgICAgICAgICAgICAgICAgICAgICAgLSAtNi0tCit8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgLSAtNictCit8ICAgICAgICAgICAgICAgICAgICAgIC0vCit8ICAgICAgICAgICAtLS0gLTQnLSAtLworfCAgICAgICAtLS0vCisrLTUnLSAtLworfCAgICAgICAgICAgIC0tIC0zJy0KK3wgICAgICAgICAtLS8KK3wgICAgICAtLS8KKy0yJy0gLS8KK3wKK3wKKy0xJy0KKworUHJvZHVjZWQgYnkgdXNlciByZXF1ZXN0czoKKworU19DUk9QKGxlZnQgLyB0b3AgPSAoNSkgLSAoMSksIHdpZHRoIC8gaGVpZ2h0ID0gKDUnKSAtICg1KSkKK1NfRk1UKHdpZHRoIC8gaGVpZ2h0ID0gKDYnKSAtICg2KSkKKworSGVyZToKKworKDEpIHRvICgxJykgLSB3aG9sZSBtYXggd2lkdGggb3IgaGVpZ2h0CisoMSkgdG8gKDIpICAtIHNlbnNvciBjcm9wcGVkIGxlZnQgb3IgdG9wCisoMikgdG8gKDInKSAtIHNlbnNvciBjcm9wcGVkIHdpZHRoIG9yIGhlaWdodAorKDMpIHRvICgzJykgLSBzZW5zb3Igc2NhbGUKKygzKSB0byAoNCkgIC0gQ0VVIGNyb3BwZWQgbGVmdCBvciB0b3AKKyg0KSB0byAoNCcpIC0gQ0VVIGNyb3BwZWQgd2lkdGggb3IgaGVpZ2h0CisoNSkgdG8gKDUnKSAtIHJldmVyc2Ugc2Vuc29yIHNjYWxlIGFwcGxpZWQgdG8gQ0VVIGNyb3BwZWQgd2lkdGggb3IgaGVpZ2h0CisoMikgdG8gKDUpICAtIHJldmVyc2Ugc2Vuc29yIHNjYWxlIGFwcGxpZWQgdG8gQ0VVIGNyb3BwZWQgbGVmdCBvciB0b3AKKyg2KSB0byAoNicpIC0gQ0VVIHNjYWxlIC0gdXNlciB3aW5kb3cKKworCitTX0ZNVAorLS0tLS0KKworRG8gbm90IHRvdWNoIGlucHV0IHJlY3RhbmdsZSAtIGl0IGlzIGFscmVhZHkgb3B0aW1hbC4KKworMS4gQ2FsY3VsYXRlIGN1cnJlbnQgc2Vuc29yIHNjYWxlczoKKworCXNjYWxlX3MgPSAoKDMnKSAtICgzKSkgLyAoKDInKSAtICgyKSkKKworMi4gQ2FsY3VsYXRlICJlZmZlY3RpdmUiIGlucHV0IGNyb3AgKHNlbnNvciBzdWJ3aW5kb3cpIC0gQ0VVIGNyb3Agc2NhbGVkIGJhY2sgYXQKK2N1cnJlbnQgc2Vuc29yIHNjYWxlcyBvbnRvIGlucHV0IHdpbmRvdyAtIHRoaXMgaXMgdXNlciBTX0NST1A6CisKKwl3aWR0aF91ID0gKDUnKSAtICg1KSA9ICgoNCcpIC0gKDQpKSAqIHNjYWxlX3MKKworMy4gQ2FsY3VsYXRlIG5ldyBjb21iaW5lZCBzY2FsZXMgZnJvbSAiZWZmZWN0aXZlIiBpbnB1dCB3aW5kb3cgdG8gcmVxdWVzdGVkIHVzZXIKK3dpbmRvdzoKKworCXNjYWxlX2NvbWIgPSB3aWR0aF91IC8gKCg2JykgLSAoNikpCisKKzQuIENhbGN1bGF0ZSBzZW5zb3Igb3V0cHV0IHdpbmRvdyBieSBhcHBseWluZyBjb21iaW5lZCBzY2FsZXMgdG8gcmVhbCBpbnB1dAord2luZG93OgorCisJd2lkdGhfc19vdXQgPSAoKDInKSAtICgyKSkgLyBzY2FsZV9jb21iCisKKzUuIEFwcGx5IGl0ZXJhdGl2ZSBzZW5zb3IgU19GTVQgZm9yIHNlbnNvciBvdXRwdXQgd2luZG93LgorCisJc3ViZGV2LT52aWRlb19vcHMtPnNfZm10KC53aWR0aCA9IHdpZHRoX3Nfb3V0KQorCis2LiBSZXRyaWV2ZSBzZW5zb3Igb3V0cHV0IHdpbmRvdyAoZ19mbXQpCisKKzcuIENhbGN1bGF0ZSBuZXcgc2Vuc29yIHNjYWxlczoKKworCXNjYWxlX3NfbmV3ID0gKCgzJylfbmV3IC0gKDMpX25ldykgLyAoKDInKSAtICgyKSkKKworOC4gQ2FsY3VsYXRlIG5ldyBDRVUgY3JvcCAtIGFwcGx5IHNlbnNvciBzY2FsZXMgdG8gcHJldmlvdXNseSBjYWxjdWxhdGVkCisiZWZmZWN0aXZlIiBjcm9wOgorCisJd2lkdGhfY2V1ID0gKDQnKV9uZXcgLSAoNClfbmV3ID0gd2lkdGhfdSAvIHNjYWxlX3NfbmV3CisJbGVmdF9jZXUgPSAoNClfbmV3IC0gKDMpX25ldyA9ICgoNSkgLSAoMikpIC8gc2NhbGVfc19uZXcKKworOS4gVXNlIENFVSBjcm9wcGluZyB0byBjcm9wIHRvIHRoZSBuZXcgd2luZG93OgorCisJY2V1X2Nyb3AoLndpZHRoID0gd2lkdGhfY2V1LCAubGVmdCA9IGxlZnRfY2V1KQorCisxMC4gVXNlIENFVSBzY2FsaW5nIHRvIHNjYWxlIHRvIHRoZSByZXF1ZXN0ZWQgdXNlciB3aW5kb3c6CisKKwlzY2FsZV9jZXUgPSB3aWR0aF9jZXUgLyB3aWR0aAorCisKK1NfQ1JPUAorLS0tLS0tCisKK0lmIG9sZCBzY2FsZSBhcHBsaWVkIHRvIG5ldyBjcm9wIGlzIGludmFsaWQgcHJvZHVjZSBuZWFyZXN0IG5ldyBzY2FsZSBwb3NzaWJsZQorCisxLiBDYWxjdWxhdGUgY3VycmVudCBjb21iaW5lZCBzY2FsZXMuCisKKwlzY2FsZV9jb21iID0gKCgoNCcpIC0gKDQpKSAvICgoNicpIC0gKDYpKSkgKiAoKCgyJykgLSAoMikpIC8gKCgzJykgLSAoMykpKQorCisyLiBBcHBseSBpdGVyYXRpdmUgc2Vuc29yIFNfQ1JPUCBmb3IgbmV3IGlucHV0IHdpbmRvdy4KKworMy4gSWYgb2xkIGNvbWJpbmVkIHNjYWxlcyBhcHBsaWVkIHRvIG5ldyBjcm9wIHByb2R1Y2UgYW4gaW1wb3NzaWJsZSB1c2VyIHdpbmRvdywKK2FkanVzdCBzY2FsZXMgdG8gcHJvZHVjZSBuZWFyZXN0IHBvc3NpYmxlIHdpbmRvdy4KKworCXdpZHRoX3Vfb3V0ID0gKCg1JykgLSAoNSkpIC8gc2NhbGVfY29tYgorCisJaWYgKHdpZHRoX3Vfb3V0ID4gbWF4KQorCQlzY2FsZV9jb21iID0gKCg1JykgLSAoNSkpIC8gbWF4OworCWVsc2UgaWYgKHdpZHRoX3Vfb3V0IDwgbWluKQorCQlzY2FsZV9jb21iID0gKCg1JykgLSAoNSkpIC8gbWluOworCis0LiBJc3N1ZSBHX0NST1AgdG8gcmV0cmlldmUgYWN0dWFsIGlucHV0IHdpbmRvdy4KKworNS4gVXNpbmcgYWN0dWFsIGlucHV0IHdpbmRvdyBhbmQgY2FsY3VsYXRlZCBjb21iaW5lZCBzY2FsZXMgY2FsY3VsYXRlIHNlbnNvcgordGFyZ2V0IG91dHB1dCB3aW5kb3cuCisKKwl3aWR0aF9zX291dCA9ICgoMycpIC0gKDMpKSA9ICgoMicpIC0gKDIpKSAvIHNjYWxlX2NvbWIKKworNi4gQXBwbHkgaXRlcmF0aXZlIFNfRk1UIGZvciBuZXcgc2Vuc29yIHRhcmdldCBvdXRwdXQgd2luZG93LgorCis3LiBJc3N1ZSBHX0ZNVCB0byByZXRyaWV2ZSB0aGUgYWN0dWFsIHNlbnNvciBvdXRwdXQgd2luZG93LgorCis4LiBDYWxjdWxhdGUgc2Vuc29yIHNjYWxlcy4KKworCXNjYWxlX3MgPSAoKDMnKSAtICgzKSkgLyAoKDInKSAtICgyKSkKKworOS4gQ2FsY3VsYXRlIHNlbnNvciBvdXRwdXQgc3Vid2luZG93IHRvIGJlIGNyb3BwZWQgb24gQ0VVIGJ5IGFwcGx5aW5nIHNlbnNvcgorc2NhbGVzIHRvIHRoZSByZXF1ZXN0ZWQgd2luZG93LgorCisJd2lkdGhfY2V1ID0gKCg1JykgLSAoNSkpIC8gc2NhbGVfcworCisxMC4gVXNlIENFVSBjcm9wcGluZyBmb3IgYWJvdmUgY2FsY3VsYXRlZCB3aW5kb3cuCisKKzExLiBDYWxjdWxhdGUgQ0VVIHNjYWxlcyBmcm9tIHNlbnNvciBzY2FsZXMgZnJvbSByZXN1bHRzIG9mICgxMCkgYW5kIHVzZXIgd2luZG93Citmcm9tICgzKQorCisJc2NhbGVfY2V1ID0gY2FsY19zY2FsZSgoKDUnKSAtICg1KSksICZ3aWR0aF91X291dCkKKworMTIuIEFwcGx5IENFVSBzY2FsZXMuCisKKy0tCitBdXRob3I6IEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCBiODA2ZWRhLi43NGQ2NzdjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtNTYxLDYgKzU2MSw4IEBACiAKIFRoZXJlIGFyZSBhIGZldyB1c2VmdWwgaGVscGVyIGZ1bmN0aW9uczoKIAorLSBmaWxlL3ZpZGVvX2RldmljZSBwcml2YXRlIGRhdGEKKwogWW91IGNhbiBzZXQvZ2V0IGRyaXZlciBwcml2YXRlIGRhdGEgaW4gdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgdXNpbmc6CiAKIHZvaWQgKnZpZGVvX2dldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpOwpAQCAtNTc1LDggKzU3Nyw3IEBACiAKIHJldHVybnMgdGhlIHZpZGVvX2RldmljZSBiZWxvbmdpbmcgdG8gdGhlIGZpbGUgc3RydWN0LgogCi1UaGUgZmluYWwgaGVscGVyIGZ1bmN0aW9uIGNvbWJpbmVzIHZpZGVvX2dldF9kcnZkYXRhIHdpdGgKLXZpZGVvX2RldmRhdGE6CitUaGUgdmlkZW9fZHJ2ZGF0YSBmdW5jdGlvbiBjb21iaW5lcyB2aWRlb19nZXRfZHJ2ZGF0YSB3aXRoIHZpZGVvX2RldmRhdGE6CiAKIHZvaWQgKnZpZGVvX2RydmRhdGEoc3RydWN0IGZpbGUgKmZpbGUpOwogCkBAIC01ODQsNiArNTg1LDE3IEBACiAKIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSB2ZGV2LT52NGwyX2RldjsKIAorLSBEZXZpY2Ugbm9kZSBuYW1lCisKK1RoZSB2aWRlb19kZXZpY2Ugbm9kZSBrZXJuZWwgbmFtZSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCisKK2NvbnN0IGNoYXIgKnZpZGVvX2RldmljZV9ub2RlX25hbWUoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7CisKK1RoZSBuYW1lIGlzIHVzZWQgYXMgYSBoaW50IGJ5IHVzZXJzcGFjZSB0b29scyBzdWNoIGFzIHVkZXYuIFRoZSBmdW5jdGlvbgorc2hvdWxkIGJlIHVzZWQgd2hlcmUgcG9zc2libGUgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgdGhlIHZpZGVvX2RldmljZTo6bnVtIGFuZAordmlkZW9fZGV2aWNlOjptaW5vciBmaWVsZHMuCisKKwogdmlkZW8gYnVmZmVyIGhlbHBlciBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKaW5kZXggODJhN2JkMS4uYmMzMTYzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQKQEAgLTExLDIzICsxMSwyMSBAQAogKHNldmVyYWwgR0JzKSBhcmUgbW9yZSByZWFkaWx5IGF2YWlsYWJsZS4KIAogVXNlcnMgY2FuIHVzZSB0aGUgaHVnZSBwYWdlIHN1cHBvcnQgaW4gTGludXgga2VybmVsIGJ5IGVpdGhlciB1c2luZyB0aGUgbW1hcAotc3lzdGVtIGNhbGwgb3Igc3RhbmRhcmQgU1lTdiBzaGFyZWQgbWVtb3J5IHN5c3RlbSBjYWxscyAoc2htZ2V0LCBzaG1hdCkuCitzeXN0ZW0gY2FsbCBvciBzdGFuZGFyZCBTWVNWIHNoYXJlZCBtZW1vcnkgc3lzdGVtIGNhbGxzIChzaG1nZXQsIHNobWF0KS4KIAogRmlyc3QgdGhlIExpbnV4IGtlcm5lbCBuZWVkcyB0byBiZSBidWlsdCB3aXRoIHRoZSBDT05GSUdfSFVHRVRMQkZTCiAocHJlc2VudCB1bmRlciAiRmlsZSBzeXN0ZW1zIikgYW5kIENPTkZJR19IVUdFVExCX1BBR0UgKHNlbGVjdGVkCiBhdXRvbWF0aWNhbGx5IHdoZW4gQ09ORklHX0hVR0VUTEJGUyBpcyBzZWxlY3RlZCkgY29uZmlndXJhdGlvbgogb3B0aW9ucy4KIAotVGhlIGtlcm5lbCBidWlsdCB3aXRoIGh1Z2UgcGFnZSBzdXBwb3J0IHNob3VsZCBzaG93IHRoZSBudW1iZXIgb2YgY29uZmlndXJlZAotaHVnZSBwYWdlcyBpbiB0aGUgc3lzdGVtIGJ5IHJ1bm5pbmcgdGhlICJjYXQgL3Byb2MvbWVtaW5mbyIgY29tbWFuZC4KK1RoZSAvcHJvYy9tZW1pbmZvIGZpbGUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvdGFsIG51bWJlciBvZgorcGVyc2lzdGVudCBodWdldGxiIHBhZ2VzIGluIHRoZSBrZXJuZWwncyBodWdlIHBhZ2UgcG9vbC4gIEl0IGFsc28gZGlzcGxheXMKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBudW1iZXIgb2YgZnJlZSwgcmVzZXJ2ZWQgYW5kIHN1cnBsdXMgaHVnZSBwYWdlcyBhbmQgdGhlCitkZWZhdWx0IGh1Z2UgcGFnZSBzaXplLiAgVGhlIGh1Z2UgcGFnZSBzaXplIGlzIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUKK3Byb3BlciBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIGFyZ3VtZW50cyB0byBzeXN0ZW0gY2FsbHMgdGhhdCBtYXAgaHVnZSBwYWdlCityZWdpb25zLgogCi0vcHJvYy9tZW1pbmZvIGFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvdGFsIG51bWJlciBvZiBodWdldGxiCi1wYWdlcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuICBJdCBhbHNvIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZQotbnVtYmVyIG9mIGZyZWUgaHVnZXRsYiBwYWdlcyBhdCBhbnkgdGltZS4gIEl0IGFsc28gZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBjb25maWd1cmVkIGh1Z2UgcGFnZSBzaXplIC0gdGhpcyBpcyBuZWVkZWQgZm9yIGdlbmVyYXRpbmcgdGhlIHByb3BlcgotYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGFib3ZlIHN5c3RlbSBjYWxscy4KLQotVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaGF2ZSBsaW5lcyBsaWtlOgorVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaW5jbHVkZSBsaW5lcyBsaWtlOgogCiAuLi4uLgogSHVnZVBhZ2VzX1RvdGFsOiB2dnYKQEAgLTUzLDU5ICs1MSw2MyBAQAogL3Byb2MvZmlsZXN5c3RlbXMgc2hvdWxkIGFsc28gc2hvdyBhIGZpbGVzeXN0ZW0gb2YgdHlwZSAiaHVnZXRsYmZzIiBjb25maWd1cmVkCiBpbiB0aGUga2VybmVsLgogCi0vcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGluZGljYXRlcyB0aGUgY3VycmVudCBudW1iZXIgb2YgY29uZmlndXJlZCBodWdldGxiCi1wYWdlcyBpbiB0aGUga2VybmVsLiAgU3VwZXIgdXNlciBjYW4gZHluYW1pY2FsbHkgcmVxdWVzdCBtb3JlIChvciBmcmVlIHNvbWUKLXByZS1jb25maWd1cmVkKSBodWdlIHBhZ2VzLgotVGhlIGFsbG9jYXRpb24gKG9yIGRlYWxsb2NhdGlvbikgb2YgaHVnZXRsYiBwYWdlcyBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZQotZW5vdWdoIHBoeXNpY2FsbHkgY29udGlndW91cyBmcmVlIHBhZ2VzIGluIHN5c3RlbSAoZnJlZWluZyBvZiBodWdlIHBhZ2VzIGlzCi1wb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGFyZSBlbm91Z2ggaHVnZXRsYiBwYWdlcyBmcmVlIHRoYXQgY2FuIGJlIHRyYW5zZmVycmVkCi1iYWNrIHRvIHJlZ3VsYXIgbWVtb3J5IHBvb2wpLgorL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mICJwZXJzaXN0ZW50IiBodWdlCitwYWdlcyBpbiB0aGUga2VybmVsJ3MgaHVnZSBwYWdlIHBvb2wuICAiUGVyc2lzdGVudCIgaHVnZSBwYWdlcyB3aWxsIGJlCityZXR1cm5lZCB0byB0aGUgaHVnZSBwYWdlIHBvb2wgd2hlbiBmcmVlZCBieSBhIHRhc2suICBBIHVzZXIgd2l0aCByb290Citwcml2aWxlZ2VzIGNhbiBkeW5hbWljYWxseSBhbGxvY2F0ZSBtb3JlIG9yIGZyZWUgc29tZSBwZXJzaXN0ZW50IGh1Z2UgcGFnZXMKK2J5IGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZyB0aGUgdmFsdWUgb2YgJ25yX2h1Z2VwYWdlcycuCiAKLVBhZ2VzIHRoYXQgYXJlIHVzZWQgYXMgaHVnZXRsYiBwYWdlcyBhcmUgcmVzZXJ2ZWQgaW5zaWRlIHRoZSBrZXJuZWwgYW5kIGNhbm5vdAotYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCitQYWdlcyB0aGF0IGFyZSB1c2VkIGFzIGh1Z2UgcGFnZXMgYXJlIHJlc2VydmVkIGluc2lkZSB0aGUga2VybmVsIGFuZCBjYW5ub3QKK2JlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLiAgSHVnZSBwYWdlcyBjYW5ub3QgYmUgc3dhcHBlZCBvdXQgdW5kZXIKK21lbW9yeSBwcmVzc3VyZS4KIAotT25jZSB0aGUga2VybmVsIHdpdGggSHVnZXRsYiBwYWdlIHN1cHBvcnQgaXMgYnVpbHQgYW5kIHJ1bm5pbmcsIGEgdXNlciBjYW4KLXVzZSBlaXRoZXIgdGhlIG1tYXAgc3lzdGVtIGNhbGwgb3Igc2hhcmVkIG1lbW9yeSBzeXN0ZW0gY2FsbHMgdG8gc3RhcnQgdXNpbmcKLXRoZSBodWdlIHBhZ2VzLiAgSXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgcHJlYWxsb2NhdGUKLWVub3VnaCBtZW1vcnkgZm9yIGh1Z2UgcGFnZSBwdXJwb3Nlcy4KK09uY2UgYSBudW1iZXIgb2YgaHVnZSBwYWdlcyBoYXZlIGJlZW4gcHJlLWFsbG9jYXRlZCB0byB0aGUga2VybmVsIGh1Z2UgcGFnZQorcG9vbCwgYSB1c2VyIHdpdGggYXBwcm9wcmlhdGUgcHJpdmlsZWdlIGNhbiB1c2UgZWl0aGVyIHRoZSBtbWFwIHN5c3RlbSBjYWxsCitvciBzaGFyZWQgbWVtb3J5IHN5c3RlbSBjYWxscyB0byB1c2UgdGhlIGh1Z2UgcGFnZXMuICBTZWUgdGhlIGRpc2N1c3Npb24gb2YKK1VzaW5nIEh1Z2UgUGFnZXMsIGJlbG93LgogCi1UaGUgYWRtaW5pc3RyYXRvciBjYW4gcHJlYWxsb2NhdGUgaHVnZSBwYWdlcyBvbiB0aGUga2VybmVsIGJvb3QgY29tbWFuZCBsaW5lIGJ5Ci1zcGVjaWZ5aW5nIHRoZSAiaHVnZXBhZ2VzPU4iIHBhcmFtZXRlciwgd2hlcmUgJ04nID0gdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzCi1yZXF1ZXN0ZWQuICBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIG1ldGhvZCBmb3IgcHJlYWxsb2NhdGluZyBodWdlIHBhZ2VzIGFzCi1tZW1vcnkgaGFzIG5vdCB5ZXQgYmVjb21lIGZyYWdtZW50ZWQuCitUaGUgYWRtaW5pc3RyYXRvciBjYW4gYWxsb2NhdGUgcGVyc2lzdGVudCBodWdlIHBhZ2VzIG9uIHRoZSBrZXJuZWwgYm9vdAorY29tbWFuZCBsaW5lIGJ5IHNwZWNpZnlpbmcgdGhlICJodWdlcGFnZXM9TiIgcGFyYW1ldGVyLCB3aGVyZSAnTicgPSB0aGUKK251bWJlciBvZiBodWdlIHBhZ2VzIHJlcXVlc3RlZC4gIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgbWV0aG9kIG9mCithbGxvY2F0aW5nIGh1Z2UgcGFnZXMgYXMgbWVtb3J5IGhhcyBub3QgeWV0IGJlY29tZSBmcmFnbWVudGVkLgogCi1Tb21lIHBsYXRmb3JtcyBzdXBwb3J0IG11bHRpcGxlIGh1Z2UgcGFnZSBzaXplcy4gIFRvIHByZWFsbG9jYXRlIGh1Z2UgcGFnZXMKK1NvbWUgcGxhdGZvcm1zIHN1cHBvcnQgbXVsdGlwbGUgaHVnZSBwYWdlIHNpemVzLiAgVG8gYWxsb2NhdGUgaHVnZSBwYWdlcwogb2YgYSBzcGVjaWZpYyBzaXplLCBvbmUgbXVzdCBwcmVjZWVkIHRoZSBodWdlIHBhZ2VzIGJvb3QgY29tbWFuZCBwYXJhbWV0ZXJzCiB3aXRoIGEgaHVnZSBwYWdlIHNpemUgc2VsZWN0aW9uIHBhcmFtZXRlciAiaHVnZXBhZ2Vzej08c2l6ZT4iLiAgPHNpemU+IG11c3QKIGJlIHNwZWNpZmllZCBpbiBieXRlcyB3aXRoIG9wdGlvbmFsIHNjYWxlIHN1ZmZpeCBba0ttTWdHXS4gIFRoZSBkZWZhdWx0IGh1Z2UKIHBhZ2Ugc2l6ZSBtYXkgYmUgc2VsZWN0ZWQgd2l0aCB0aGUgImRlZmF1bHRfaHVnZXBhZ2Vzej08c2l6ZT4iIGJvb3QgcGFyYW1ldGVyLgogCi0vcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGluZGljYXRlcyB0aGUgY3VycmVudCBudW1iZXIgb2YgY29uZmlndXJlZCBbZGVmYXVsdAotc2l6ZV0gaHVnZXRsYiBwYWdlcyBpbiB0aGUga2VybmVsLiAgU3VwZXIgdXNlciBjYW4gZHluYW1pY2FsbHkgcmVxdWVzdCBtb3JlCi0ob3IgZnJlZSBzb21lIHByZS1jb25maWd1cmVkKSBodWdlIHBhZ2VzLgotCi1Vc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlL2RlYWxsb2NhdGUgZGVmYXVsdCBzaXplZAotaHVnZSBwYWdlczoKK1doZW4gbXVsdGlwbGUgaHVnZSBwYWdlIHNpemVzIGFyZSBzdXBwb3J0ZWQsIC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMKK2luZGljYXRlcyB0aGUgY3VycmVudCBudW1iZXIgb2YgcHJlLWFsbG9jYXRlZCBodWdlIHBhZ2VzIG9mIHRoZSBkZWZhdWx0IHNpemUuCitUaHVzLCBvbmUgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUvZGVhbGxvY2F0ZQorZGVmYXVsdCBzaXplZCBwZXJzaXN0ZW50IGh1Z2UgcGFnZXM6CiAKIAllY2hvIDIwID4gL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcwogCi1UaGlzIGNvbW1hbmQgd2lsbCB0cnkgdG8gY29uZmlndXJlIDIwIGRlZmF1bHQgc2l6ZWQgaHVnZSBwYWdlcyBpbiB0aGUgc3lzdGVtLgorVGhpcyBjb21tYW5kIHdpbGwgdHJ5IHRvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGRlZmF1bHQgc2l6ZWQgaHVnZSBwYWdlcyBpbiB0aGUKK2h1Z2UgcGFnZSBwb29sIHRvIDIwLCBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgaHVnZSBwYWdlcywgYXMgcmVxdWlyZWQuCisKIE9uIGEgTlVNQSBwbGF0Zm9ybSwgdGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8gZGlzdHJpYnV0ZSB0aGUgaHVnZSBwYWdlIHBvb2wKLW92ZXIgdGhlIGFsbCBvbi1saW5lIG5vZGVzLiAgVGhlc2UgaHVnZSBwYWdlcywgYWxsb2NhdGVkIHdoZW4gbnJfaHVnZXBhZ2VzCi1pcyBpbmNyZWFzZWQsIGFyZSBjYWxsZWQgInBlcnNpc3RlbnQgaHVnZSBwYWdlcyIuCitvdmVyIGFsbCB0aGUgc2V0IG9mIGFsbG93ZWQgbm9kZXMgc3BlY2lmaWVkIGJ5IHRoZSBOVU1BIG1lbW9yeSBwb2xpY3kgb2YgdGhlCit0YXNrIHRoYXQgbW9kaWZpZXMgbnJfaHVnZXBhZ2VzLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBhbGxvd2VkIG5vZGVzLS13aGVuIHRoZQordGFzayBoYXMgZGVmYXVsdCBtZW1vcnkgcG9saWN5LS1pcyBhbGwgb24tbGluZSBub2RlcyB3aXRoIG1lbW9yeS4gIEFsbG93ZWQKK25vZGVzIHdpdGggaW5zdWZmaWNpZW50IGF2YWlsYWJsZSwgY29udGlndW91cyBtZW1vcnkgZm9yIGEgaHVnZSBwYWdlIHdpbGwgYmUKK3NpbGVudGx5IHNraXBwZWQgd2hlbiBhbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSBwYWdlcy4gIFNlZSB0aGUgZGlzY3Vzc2lvbgorYmVsb3cgb2YgdGhlIGludGVyYWN0aW9uIG9mIHRhc2sgbWVtb3J5IHBvbGljeSwgY3B1c2V0cyBhbmQgcGVyIG5vZGUgYXR0cmlidXRlcword2l0aCB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBwZXJzaXN0ZW50IGh1Z2UgcGFnZXMuCiAKIFRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24gZGVwZW5kcyBvbiB0aGUgYW1vdW50IG9mCi1waHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHRoYXQgaXMgcHJlc2V0IGluIHN5c3RlbSBhdCB0aGUgdGltZSBvZiB0aGUKK3BoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgdGhhdCBpcyBwcmVzZW50IGluIHN5c3RlbSBhdCB0aGUgdGltZSBvZiB0aGUKIGFsbG9jYXRpb24gYXR0ZW1wdC4gIElmIHRoZSBrZXJuZWwgaXMgdW5hYmxlIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZXMgZnJvbQogc29tZSBub2RlcyBpbiBhIE5VTUEgc3lzdGVtLCBpdCB3aWxsIGF0dGVtcHQgdG8gbWFrZSB1cCB0aGUgZGlmZmVyZW5jZSBieQogYWxsb2NhdGluZyBleHRyYSBwYWdlcyBvbiBvdGhlciBub2RlcyB3aXRoIHN1ZmZpY2llbnQgYXZhaWxhYmxlIGNvbnRpZ3VvdXMKIG1lbW9yeSwgaWYgYW55LgogCi1TeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQgdG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQKLWZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUga2VybmVsIHRvIHJlcXVlc3QgaHVnZSBwYWdlcyBlYXJseSBpbiB0aGUgYm9vdAotcHJvY2VzcyB3aGVuIHRoZSBwb3NzaWJpbGl0eSBvZiBnZXR0aW5nIHBoeXNpY2FsIGNvbnRpZ3VvdXMgcGFnZXMgaXMgc3RpbGwKLXZlcnkgaGlnaC4gIEFkbWluaXN0cmF0b3JzIGNhbiB2ZXJpZnkgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGFjdHVhbGx5Ci1hbGxvY2F0ZWQgYnkgY2hlY2tpbmcgdGhlIHN5c2N0bCBvciBtZW1pbmZvLiAgVG8gY2hlY2sgdGhlIHBlciBub2RlCitTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWF5IHdhbnQgdG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjCitpbml0IGZpbGVzLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUga2VybmVsIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZXMgZWFybHkgaW4KK3RoZSBib290IHByb2Nlc3Mgd2hlbiB0aGUgcG9zc2liaWxpdHkgb2YgZ2V0dGluZyBwaHlzaWNhbCBjb250aWd1b3VzIHBhZ2VzCitpcyBzdGlsbCB2ZXJ5IGhpZ2guICBBZG1pbmlzdHJhdG9ycyBjYW4gdmVyaWZ5IHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcworYWN0dWFsbHkgYWxsb2NhdGVkIGJ5IGNoZWNraW5nIHRoZSBzeXNjdGwgb3IgbWVtaW5mby4gIFRvIGNoZWNrIHRoZSBwZXIgbm9kZQogZGlzdHJpYnV0aW9uIG9mIGh1Z2UgcGFnZXMgaW4gYSBOVU1BIHN5c3RlbSwgdXNlOgogCiAJY2F0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlKi9tZW1pbmZvIHwgZmdyZXAgSHVnZQpAQCAtMTEzLDQ1ICsxMTUsNDcgQEAKIC9wcm9jL3N5cy92bS9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBzcGVjaWZpZXMgaG93IGxhcmdlIHRoZSBwb29sIG9mCiBodWdlIHBhZ2VzIGNhbiBncm93LCBpZiBtb3JlIGh1Z2UgcGFnZXMgdGhhbiAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGFyZQogcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9ucy4gIFdyaXRpbmcgYW55IG5vbi16ZXJvIHZhbHVlIGludG8gdGhpcyBmaWxlCi1pbmRpY2F0ZXMgdGhhdCB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gaXMgYWxsb3dlZCB0byB0cnkgdG8gb2J0YWluICJzdXJwbHVzIgotaHVnZSBwYWdlcyBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoZW4gdGhlIG5vcm1hbCBwb29sIGlzIGV4aGF1c3RlZC4gQXMKLXRoZXNlIHN1cnBsdXMgaHVnZSBwYWdlcyBnbyBvdXQgb2YgdXNlLCB0aGV5IGFyZSBmcmVlZCBiYWNrIHRvIHRoZSBidWRkeQotYWxsb2NhdG9yLgoraW5kaWNhdGVzIHRoYXQgdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIGlzIGFsbG93ZWQgdG8gdHJ5IHRvIG9idGFpbiB0aGF0CitudW1iZXIgb2YgInN1cnBsdXMiIGh1Z2UgcGFnZXMgZnJvbSB0aGUga2VybmVsJ3Mgbm9ybWFsIHBhZ2UgcG9vbCwgd2hlbiB0aGUKK3BlcnNpc3RlbnQgaHVnZSBwYWdlIHBvb2wgaXMgZXhoYXVzdGVkLiBBcyB0aGVzZSBzdXJwbHVzIGh1Z2UgcGFnZXMgYmVjb21lCit1bnVzZWQsIHRoZXkgYXJlIGZyZWVkIGJhY2sgdG8gdGhlIGtlcm5lbCdzIG5vcm1hbCBwYWdlIHBvb2wuCiAKLVdoZW4gaW5jcmVhc2luZyB0aGUgaHVnZSBwYWdlIHBvb2wgc2l6ZSB2aWEgbnJfaHVnZXBhZ2VzLCBhbnkgc3VycGx1cworV2hlbiBpbmNyZWFzaW5nIHRoZSBodWdlIHBhZ2UgcG9vbCBzaXplIHZpYSBucl9odWdlcGFnZXMsIGFueSBleGlzdGluZyBzdXJwbHVzCiBwYWdlcyB3aWxsIGZpcnN0IGJlIHByb21vdGVkIHRvIHBlcnNpc3RlbnQgaHVnZSBwYWdlcy4gIFRoZW4sIGFkZGl0aW9uYWwKIGh1Z2UgcGFnZXMgd2lsbCBiZSBhbGxvY2F0ZWQsIGlmIG5lY2Vzc2FyeSBhbmQgaWYgcG9zc2libGUsIHRvIGZ1bGZpbGwKLXRoZSBuZXcgaHVnZSBwYWdlIHBvb2wgc2l6ZS4KK3RoZSBuZXcgcGVyc2lzdGVudCBodWdlIHBhZ2UgcG9vbCBzaXplLgogCi1UaGUgYWRtaW5pc3RyYXRvciBtYXkgc2hyaW5rIHRoZSBwb29sIG9mIHByZWFsbG9jYXRlZCBodWdlIHBhZ2VzIGZvcgorVGhlIGFkbWluaXN0cmF0b3IgbWF5IHNocmluayB0aGUgcG9vbCBvZiBwZXJzaXN0ZW50IGh1Z2UgcGFnZXMgZm9yCiB0aGUgZGVmYXVsdCBodWdlIHBhZ2Ugc2l6ZSBieSBzZXR0aW5nIHRoZSBucl9odWdlcGFnZXMgc3lzY3RsIHRvIGEKIHNtYWxsZXIgdmFsdWUuICBUaGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBiYWxhbmNlIHRoZSBmcmVlaW5nIG9mIGh1Z2UgcGFnZXMKLWFjcm9zcyBhbGwgb24tbGluZSBub2Rlcy4gIEFueSBmcmVlIGh1Z2UgcGFnZXMgb24gdGhlIHNlbGVjdGVkIG5vZGVzIHdpbGwKLWJlIGZyZWVkIGJhY2sgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4KK2Fjcm9zcyBhbGwgbm9kZXMgaW4gdGhlIG1lbW9yeSBwb2xpY3kgb2YgdGhlIHRhc2sgbW9kaWZ5aW5nIG5yX2h1Z2VwYWdlcy4KK0FueSBmcmVlIGh1Z2UgcGFnZXMgb24gdGhlIHNlbGVjdGVkIG5vZGVzIHdpbGwgYmUgZnJlZWQgYmFjayB0byB0aGUga2VybmVsJ3MKK25vcm1hbCBwYWdlIHBvb2wuCiAKLUNhdmVhdDogU2hyaW5raW5nIHRoZSBwb29sIHZpYSBucl9odWdlcGFnZXMgc3VjaCB0aGF0IGl0IGJlY29tZXMgbGVzcwotdGhhbiB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgaW4gdXNlIHdpbGwgY29udmVydCB0aGUgYmFsYW5jZSB0byBzdXJwbHVzCi1odWdlIHBhZ2VzIGV2ZW4gaWYgaXQgd291bGQgZXhjZWVkIHRoZSBvdmVyY29tbWl0IHZhbHVlLiAgQXMgbG9uZyBhcwotdGhpcyBjb25kaXRpb24gaG9sZHMsIGhvd2V2ZXIsIG5vIG1vcmUgc3VycGx1cyBodWdlIHBhZ2VzIHdpbGwgYmUKLWFsbG93ZWQgb24gdGhlIHN5c3RlbSB1bnRpbCBvbmUgb2YgdGhlIHR3byBzeXNjdGxzIGFyZSBpbmNyZWFzZWQKLXN1ZmZpY2llbnRseSwgb3IgdGhlIHN1cnBsdXMgaHVnZSBwYWdlcyBnbyBvdXQgb2YgdXNlIGFuZCBhcmUgZnJlZWQuCitDYXZlYXQ6IFNocmlua2luZyB0aGUgcGVyc2lzdGVudCBodWdlIHBhZ2UgcG9vbCB2aWEgbnJfaHVnZXBhZ2VzIHN1Y2ggdGhhdAoraXQgYmVjb21lcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGluIHVzZSB3aWxsIGNvbnZlcnQgdGhlIGJhbGFuY2UKK29mIHRoZSBpbi11c2UgaHVnZSBwYWdlcyB0byBzdXJwbHVzIGh1Z2UgcGFnZXMuICBUaGlzIHdpbGwgb2NjdXIgZXZlbiBpZgordGhlIG51bWJlciBvZiBzdXJwbHVzIHBhZ2VzIGl0IHdvdWxkIGV4Y2VlZCB0aGUgb3ZlcmNvbW1pdCB2YWx1ZS4gIEFzIGxvbmcgYXMKK3RoaXMgY29uZGl0aW9uIGhvbGRzLS10aGF0IGlzLCB1bnRpbCBucl9odWdlcGFnZXMrbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgaXMKK2luY3JlYXNlZCBzdWZmaWNpZW50bHksIG9yIHRoZSBzdXJwbHVzIGh1Z2UgcGFnZXMgZ28gb3V0IG9mIHVzZSBhbmQgYXJlIGZyZWVkLS0KK25vIG1vcmUgc3VycGx1cyBodWdlIHBhZ2VzIHdpbGwgYmUgYWxsb3dlZCB0byBiZSBhbGxvY2F0ZWQuCiAKIFdpdGggc3VwcG9ydCBmb3IgbXVsdGlwbGUgaHVnZSBwYWdlIHBvb2xzIGF0IHJ1bi10aW1lIGF2YWlsYWJsZSwgbXVjaCBvZgotdGhlIGh1Z2UgcGFnZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGhhcyBiZWVuIGR1cGxpY2F0ZWQgaW4gc3lzZnMuIFRoZSBhYm92ZQotaW5mb3JtYXRpb24gYXBwbGllcyB0byB0aGUgZGVmYXVsdCBodWdlIHBhZ2Ugc2l6ZSB3aGljaCB3aWxsIGJlCi1jb250cm9sbGVkIGJ5IHRoZSAvcHJvYyBpbnRlcmZhY2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlIHJvb3QKLWh1Z2UgcGFnZSBjb250cm9sIGRpcmVjdG9yeSBpbiBzeXNmcyBpczoKK3RoZSBodWdlIHBhZ2UgdXNlcnNwYWNlIGludGVyZmFjZSBpbiAvcHJvYy9zeXMvdm0gaGFzIGJlZW4gZHVwbGljYXRlZCBpbiBzeXNmcy4KK1RoZSAvcHJvYyBpbnRlcmZhY2VzIGRpc2N1c3NlZCBhYm92ZSBoYXZlIGJlZW4gcmV0YWluZWQgZm9yIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4gVGhlIHJvb3QgaHVnZSBwYWdlIGNvbnRyb2wgZGlyZWN0b3J5IGluIHN5c2ZzIGlzOgogCiAJL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzCiAKIEZvciBlYWNoIGh1Z2UgcGFnZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwsIGEgc3ViZGlyZWN0b3J5Ci13aWxsIGV4aXN0LCBvZiB0aGUgZm9ybQord2lsbCBleGlzdCwgb2YgdGhlIGZvcm06CiAKIAlodWdlcGFnZXMtJHtzaXplfWtCCiAKIEluc2lkZSBlYWNoIG9mIHRoZXNlIGRpcmVjdG9yaWVzLCB0aGUgc2FtZSBzZXQgb2YgZmlsZXMgd2lsbCBleGlzdDoKIAogCW5yX2h1Z2VwYWdlcworCW5yX2h1Z2VwYWdlc19tZW1wb2xpY3kKIAlucl9vdmVyY29tbWl0X2h1Z2VwYWdlcwogCWZyZWVfaHVnZXBhZ2VzCiAJcmVzdl9odWdlcGFnZXMKQEAgLTE1OSw2ICsxNjMsMTAyIEBACiAKIHdoaWNoIGZ1bmN0aW9uIGFzIGRlc2NyaWJlZCBhYm92ZSBmb3IgdGhlIGRlZmF1bHQgaHVnZSBwYWdlLXNpemVkIGNhc2UuCiAKKworSW50ZXJhY3Rpb24gb2YgVGFzayBNZW1vcnkgUG9saWN5IHdpdGggSHVnZSBQYWdlIEFsbG9jYXRpb24vRnJlZWluZworCitXaGV0aGVyIGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgdmlhIHRoZSAvcHJvYyBpbnRlcmZhY2Ugb3IKK3RoZSAvc3lzZnMgaW50ZXJmYWNlIHVzaW5nIHRoZSBucl9odWdlcGFnZXNfbWVtcG9saWN5IGF0dHJpYnV0ZSwgdGhlIE5VTUEKK25vZGVzIGZyb20gd2hpY2ggaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIG9yIGZyZWVkIGFyZSBjb250cm9sbGVkIGJ5IHRoZQorTlVNQSBtZW1vcnkgcG9saWN5IG9mIHRoZSB0YXNrIHRoYXQgbW9kaWZpZXMgdGhlIG5yX2h1Z2VwYWdlc19tZW1wb2xpY3kKK3N5c2N0bCBvciBhdHRyaWJ1dGUuICBXaGVuIHRoZSBucl9odWdlcGFnZXMgYXR0cmlidXRlIGlzIHVzZWQsIG1lbXBvbGljeQoraXMgaWdub3JlZC4KKworVGhlIHJlY29tbWVuZGVkIG1ldGhvZCB0byBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMgdG8vZnJvbSB0aGUga2VybmVsCitodWdlIHBhZ2UgcG9vbCwgdXNpbmcgdGhlIG5yX2h1Z2VwYWdlcyBleGFtcGxlIGFib3ZlLCBpczoKKworICAgIG51bWFjdGwgLS1pbnRlcmxlYXZlIDxub2RlLWxpc3Q+IGVjaG8gMjAgXAorCQkJCT4vcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzX21lbXBvbGljeQorCitvciwgbW9yZSBzdWNjaW5jdGx5OgorCisgICAgbnVtYWN0bCAtbSA8bm9kZS1saXN0PiBlY2hvIDIwID4vcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzX21lbXBvbGljeQorCitUaGlzIHdpbGwgYWxsb2NhdGUgb3IgZnJlZSBhYnMoMjAgLSBucl9odWdlcGFnZXMpIHRvIG9yIGZyb20gdGhlIG5vZGVzCitzcGVjaWZpZWQgaW4gPG5vZGUtbGlzdD4sIGRlcGVuZGluZyBvbiB3aGV0aGVyIG51bWJlciBvZiBwZXJzaXN0ZW50IGh1Z2UgcGFnZXMKK2lzIGluaXRpYWxseSBsZXNzIHRoYW4gb3IgZ3JlYXRlciB0aGFuIDIwLCByZXNwZWN0aXZlbHkuICBObyBodWdlIHBhZ2VzIHdpbGwgYmUKK2FsbG9jYXRlZCBub3IgZnJlZWQgb24gYW55IG5vZGUgbm90IGluY2x1ZGVkIGluIHRoZSBzcGVjaWZpZWQgPG5vZGUtbGlzdD4uCisKK1doZW4gYWRqdXN0aW5nIHRoZSBwZXJzaXN0ZW50IGh1Z2VwYWdlIGNvdW50IHZpYSBucl9odWdlcGFnZXNfbWVtcG9saWN5LCBhbnkKK21lbW9yeSBwb2xpY3kgbW9kZS0tYmluZCwgcHJlZmVycmVkLCBsb2NhbCBvciBpbnRlcmxlYXZlLS1tYXkgYmUgdXNlZC4gIFRoZQorcmVzdWx0aW5nIGVmZmVjdCBvbiBwZXJzaXN0ZW50IGh1Z2UgcGFnZSBhbGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6CisKKzEpIFJlZ2FyZGxlc3Mgb2YgbWVtcG9saWN5IG1vZGUgW3NlZSBEb2N1bWVudGF0aW9uL3ZtL251bWFfbWVtb3J5X3BvbGljeS50eHRdLAorICAgcGVyc2lzdGVudCBodWdlIHBhZ2VzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBub2RlIG9yIG5vZGVzCisgICBzcGVjaWZpZWQgaW4gdGhlIG1lbXBvbGljeSBhcyBpZiAiaW50ZXJsZWF2ZSIgaGFkIGJlZW4gc3BlY2lmaWVkLgorICAgSG93ZXZlciwgaWYgYSBub2RlIGluIHRoZSBwb2xpY3kgZG9lcyBub3QgY29udGFpbiBzdWZmaWNpZW50IGNvbnRpZ3VvdXMKKyAgIG1lbW9yeSBmb3IgYSBodWdlIHBhZ2UsIHRoZSBhbGxvY2F0aW9uIHdpbGwgbm90ICJmYWxsYmFjayIgdG8gdGhlIG5lYXJlc3QKKyAgIG5laWdoYm9yIG5vZGUgd2l0aCBzdWZmaWNpZW50IGNvbnRpZ3VvdXMgbWVtb3J5LiAgVG8gZG8gdGhpcyB3b3VsZCBjYXVzZQorICAgdW5kZXNpcmFibGUgaW1iYWxhbmNlIGluIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGh1Z2UgcGFnZSBwb29sLCBvcgorICAgcG9zc2libHksIGFsbG9jYXRpb24gb2YgcGVyc2lzdGVudCBodWdlIHBhZ2VzIG9uIG5vZGVzIG5vdCBhbGxvd2VkIGJ5CisgICB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kuCisKKzIpIE9uZSBvciBtb3JlIG5vZGVzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgYmluZCBvciBpbnRlcmxlYXZlIHBvbGljeS4KKyAgIElmIG1vcmUgdGhhbiBvbmUgbm9kZSBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgcHJlZmVycmVkIHBvbGljeSwgb25seSB0aGUKKyAgIGxvd2VzdCBudW1lcmljIGlkIHdpbGwgYmUgdXNlZC4gIExvY2FsIHBvbGljeSB3aWxsIHNlbGVjdCB0aGUgbm9kZSB3aGVyZQorICAgdGhlIHRhc2sgaXMgcnVubmluZyBhdCB0aGUgdGltZSB0aGUgbm9kZXNfYWxsb3dlZCBtYXNrIGlzIGNvbnN0cnVjdGVkLgorICAgRm9yIGxvY2FsIHBvbGljeSB0byBiZSBkZXRlcm1pbmlzdGljLCB0aGUgdGFzayBtdXN0IGJlIGJvdW5kIHRvIGEgY3B1IG9yCisgICBjcHVzIGluIGEgc2luZ2xlIG5vZGUuICBPdGhlcndpc2UsIHRoZSB0YXNrIGNvdWxkIGJlIG1pZ3JhdGVkIHRvIHNvbWUKKyAgIG90aGVyIG5vZGUgYXQgYW55IHRpbWUgYWZ0ZXIgbGF1bmNoIGFuZCB0aGUgcmVzdWx0aW5nIG5vZGUgd2lsbCBiZQorICAgaW5kZXRlcm1pbmF0ZS4gIFRodXMsIGxvY2FsIHBvbGljeSBpcyBub3QgdmVyeSB1c2VmdWwgZm9yIHRoaXMgcHVycG9zZS4KKyAgIEFueSBvZiB0aGUgb3RoZXIgbWVtcG9saWN5IG1vZGVzIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgYSBzaW5nbGUgbm9kZS4KKworMykgVGhlIG5vZGVzIGFsbG93ZWQgbWFzayB3aWxsIGJlIGRlcml2ZWQgZnJvbSBhbnkgbm9uLWRlZmF1bHQgdGFzayBtZW1wb2xpY3ksCisgICB3aGV0aGVyIHRoaXMgcG9saWN5IHdhcyBzZXQgZXhwbGljaXRseSBieSB0aGUgdGFzayBpdHNlbGYgb3Igb25lIG9mIGl0cworICAgYW5jZXN0b3JzLCBzdWNoIGFzIG51bWFjdGwuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHRhc2sgaXMgaW52b2tlZCBmcm9tIGEKKyAgIHNoZWxsIHdpdGggbm9uLWRlZmF1bHQgcG9saWN5LCB0aGF0IHBvbGljeSB3aWxsIGJlIHVzZWQuICBPbmUgY2FuIHNwZWNpZnkgYQorICAgbm9kZSBsaXN0IG9mICJhbGwiIHdpdGggbnVtYWN0bCAtLWludGVybGVhdmUgb3IgLS1tZW1iaW5kIFstbV0gdG8gYWNoaWV2ZQorICAgaW50ZXJsZWF2aW5nIG92ZXIgYWxsIG5vZGVzIGluIHRoZSBzeXN0ZW0gb3IgY3B1c2V0LgorCis0KSBBbnkgdGFzayBtZW1wb2xpY3kgc3BlY2lmZWQtLWUuZy4sIHVzaW5nIG51bWFjdGwtLXdpbGwgYmUgY29uc3RyYWluZWQgYnkKKyAgIHRoZSByZXNvdXJjZSBsaW1pdHMgb2YgYW55IGNwdXNldCBpbiB3aGljaCB0aGUgdGFzayBydW5zLiAgVGh1cywgdGhlcmUgd2lsbAorICAgYmUgbm8gd2F5IGZvciBhIHRhc2sgd2l0aCBub24tZGVmYXVsdCBwb2xpY3kgcnVubmluZyBpbiBhIGNwdXNldCB3aXRoIGEKKyAgIHN1YnNldCBvZiB0aGUgc3lzdGVtIG5vZGVzIHRvIGFsbG9jYXRlIGh1Z2UgcGFnZXMgb3V0c2lkZSB0aGUgY3B1c2V0CisgICB3aXRob3V0IGZpcnN0IG1vdmluZyB0byBhIGNwdXNldCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgZGVzaXJlZCBub2Rlcy4KKworNSkgQm9vdC10aW1lIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIGF0dGVtcHRzIHRvIGRpc3RyaWJ1dGUgdGhlIHJlcXVlc3RlZCBudW1iZXIKKyAgIG9mIGh1Z2UgcGFnZXMgb3ZlciBhbGwgb24tbGluZXMgbm9kZXMgd2l0aCBtZW1vcnkuCisKK1BlciBOb2RlIEh1Z2VwYWdlcyBBdHRyaWJ1dGVzCisKK0Egc3Vic2V0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBodWdlIHBhZ2UgY29udHJvbCBkaXJlY3RvcnkgaW4gc3lzZnMsCitkZXNjcmliZWQgYWJvdmUsIHdpbGwgYmUgcmVwbGljYXRlZCB1bmRlciBlYWNoIHRoZSBzeXN0ZW0gZGV2aWNlIG9mIGVhY2gKK05VTUEgbm9kZSB3aXRoIG1lbW9yeSBpbjoKKworCS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWzAtOV0qL2h1Z2VwYWdlcy8KKworVW5kZXIgdGhpcyBkaXJlY3RvcnksIHRoZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggc3VwcG9ydGVkIGh1Z2UgcGFnZSBzaXplCitjb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBmaWxlczoKKworCW5yX2h1Z2VwYWdlcworCWZyZWVfaHVnZXBhZ2VzCisJc3VycGx1c19odWdlcGFnZXMKKworVGhlIGZyZWVfJyBhbmQgc3VycGx1c18nIGF0dHJpYnV0ZSBmaWxlcyBhcmUgcmVhZC1vbmx5LiAgVGhleSByZXR1cm4gdGhlIG51bWJlcgorb2YgZnJlZSBhbmQgc3VycGx1cyBbb3ZlcmNvbW1pdHRlZF0gaHVnZSBwYWdlcywgcmVzcGVjdGl2ZWx5LCBvbiB0aGUgcGFyZW50Citub2RlLgorCitUaGUgbnJfaHVnZXBhZ2VzIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgaHVnZSBwYWdlcyBvbiB0aGUKK3NwZWNpZmllZCBub2RlLiAgV2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyB3cml0dGVuLCB0aGUgbnVtYmVyIG9mIHBlcnNpc3RlbnQgaHVnZQorcGFnZXMgb24gdGhlIHBhcmVudCBub2RlIHdpbGwgYmUgYWRqdXN0ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwgaWYgc3VmZmljaWVudAorcmVzb3VyY2VzIGV4aXN0LCByZWdhcmRsZXNzIG9mIHRoZSB0YXNrJ3MgbWVtcG9saWN5IG9yIGNwdXNldCBjb25zdHJhaW50cy4KKworTm90ZSB0aGF0IHRoZSBudW1iZXIgb2Ygb3ZlcmNvbW1pdCBhbmQgcmVzZXJ2ZSBwYWdlcyByZW1haW4gZ2xvYmFsIHF1YW50aXRpZXMsCithcyB3ZSBkb24ndCBrbm93IHVudGlsIGZhdWx0IHRpbWUsIHdoZW4gdGhlIGZhdWx0aW5nIHRhc2sncyBtZW1wb2xpY3kgaXMKK2FwcGxpZWQsIGZyb20gd2hpY2ggbm9kZSB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gd2lsbCBiZSBhdHRlbXB0ZWQuCisKKworVXNpbmcgSHVnZSBQYWdlcworCiBJZiB0aGUgdXNlciBhcHBsaWNhdGlvbnMgYXJlIGdvaW5nIHRvIHJlcXVlc3QgaHVnZSBwYWdlcyB1c2luZyBtbWFwIHN5c3RlbQogY2FsbCwgdGhlbiBpdCBpcyByZXF1aXJlZCB0aGF0IHN5c3RlbSBhZG1pbmlzdHJhdG9yIG1vdW50IGEgZmlsZSBzeXN0ZW0gb2YKIHR5cGUgaHVnZXRsYmZzOgpAQCAtMjA2LDkgKzMwNiwxMSBAQAogICogcmVxdWVzdGluZyBodWdlIHBhZ2VzLgogICoKICAqIEZvciB0aGUgaWE2NCBhcmNoaXRlY3R1cmUsIHRoZSBMaW51eCBrZXJuZWwgcmVzZXJ2ZXMgUmVnaW9uIG51bWJlciA0IGZvcgotICogaHVnZSBwYWdlcy4gIFRoYXQgbWVhbnMgdGhlIGFkZHJlc3NlcyBzdGFydGluZyB3aXRoIDB4ODAwMDAwLi4uIHdpbGwgbmVlZAotICogdG8gYmUgc3BlY2lmaWVkLiAgU3BlY2lmeWluZyBhIGZpeGVkIGFkZHJlc3MgaXMgbm90IHJlcXVpcmVkIG9uIHBwYzY0LAotICogaTM4NiBvciB4ODZfNjQuCisgKiBodWdlIHBhZ2VzLiAgVGhhdCBtZWFucyB0aGF0IGlmIG9uZSByZXF1aXJlcyBhIGZpeGVkIGFkZHJlc3MsIGEgaHVnZSBwYWdlCisgKiBhbGlnbmVkIGFkZHJlc3Mgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIGJlIHJlcXVpcmVkLiAgSWYgYSBmaXhlZAorICogYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQsIHRoZSBrZXJuZWwgd2lsbCBzZWxlY3QgYW4gYWRkcmVzcyBpbiB0aGUgcHJvcGVyCisgKiByYW5nZS4KKyAqIE90aGVyIGFyY2hpdGVjdHVyZXMsIHN1Y2ggYXMgcHBjNjQsIGkzODYgb3IgeDg2XzY0IGFyZSBub3Qgc28gY29uc3RyYWluZWQuCiAgKgogICogTm90ZTogVGhlIGRlZmF1bHQgc2hhcmVkIG1lbW9yeSBsaW1pdCBpcyBxdWl0ZSBsb3cgb24gbWFueSBrZXJuZWxzLAogICogeW91IG1heSBuZWVkIHRvIGluY3JlYXNlIGl0IHZpYToKQEAgLTIzNywxNCArMzM5LDggQEAKIAogI2RlZmluZSBkcHJpbnRmKHgpICBwcmludGYoeCkKIAotLyogT25seSBpYTY0IHJlcXVpcmVzIHRoaXMgKi8KLSNpZmRlZiBfX2lhNjRfXwotI2RlZmluZSBBRERSICh2b2lkICopKDB4ODAwMDAwMDAwMDAwMDAwMFVMKQotI2RlZmluZSBTSE1BVF9GTEFHUyAoU0hNX1JORCkKLSNlbHNlCi0jZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCS8qIGxldCBrZXJuZWwgY2hvb3NlIGFkZHJlc3MgKi8KICNkZWZpbmUgU0hNQVRfRkxBR1MgKDApCi0jZW5kaWYKIAogaW50IG1haW4odm9pZCkKIHsKQEAgLTMwMiwxMCArMzk4LDEyIEBACiAgKiBleGFtcGxlLCB0aGUgYXBwIGlzIHJlcXVlc3RpbmcgbWVtb3J5IG9mIHNpemUgMjU2TUIgdGhhdCBpcyBiYWNrZWQgYnkKICAqIGh1Z2UgcGFnZXMuCiAgKgotICogRm9yIGlhNjQgYXJjaGl0ZWN0dXJlLCBMaW51eCBrZXJuZWwgcmVzZXJ2ZXMgUmVnaW9uIG51bWJlciA0IGZvciBodWdlIHBhZ2VzLgotICogVGhhdCBtZWFucyB0aGUgYWRkcmVzc2VzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBuZWVkIHRvIGJlCi0gKiBzcGVjaWZpZWQuICBTcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQgb24gcHBjNjQsIGkzODYKLSAqIG9yIHg4Nl82NC4KKyAqIEZvciB0aGUgaWE2NCBhcmNoaXRlY3R1cmUsIHRoZSBMaW51eCBrZXJuZWwgcmVzZXJ2ZXMgUmVnaW9uIG51bWJlciA0IGZvcgorICogaHVnZSBwYWdlcy4gIFRoYXQgbWVhbnMgdGhhdCBpZiBvbmUgcmVxdWlyZXMgYSBmaXhlZCBhZGRyZXNzLCBhIGh1Z2UgcGFnZQorICogYWxpZ25lZCBhZGRyZXNzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBiZSByZXF1aXJlZC4gIElmIGEgZml4ZWQKKyAqIGFkZHJlc3MgaXMgbm90IHJlcXVpcmVkLCB0aGUga2VybmVsIHdpbGwgc2VsZWN0IGFuIGFkZHJlc3MgaW4gdGhlIHByb3BlcgorICogcmFuZ2UuCisgKiBPdGhlciBhcmNoaXRlY3R1cmVzLCBzdWNoIGFzIHBwYzY0LCBpMzg2IG9yIHg4Nl82NCBhcmUgbm90IHNvIGNvbnN0cmFpbmVkLgogICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTMxNywxNCArNDE1LDggQEAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCiAKLS8qIE9ubHkgaWE2NCByZXF1aXJlcyB0aGlzICovCi0jaWZkZWYgX19pYTY0X18KLSNkZWZpbmUgQUREUiAodm9pZCAqKSgweDgwMDAwMDAwMDAwMDAwMDBVTCkKLSNkZWZpbmUgRkxBR1MgKE1BUF9TSEFSRUQgfCBNQVBfRklYRUQpCi0jZWxzZQotI2RlZmluZSBBRERSICh2b2lkICopKDB4MFVMKQorI2RlZmluZSBBRERSICh2b2lkICopKDB4MFVMKQkvKiBsZXQga2VybmVsIGNob29zZSBhZGRyZXNzICovCiAjZGVmaW5lIEZMQUdTIChNQVBfU0hBUkVEKQotI2VuZGlmCiAKIHZvaWQgY2hlY2tfYnl0ZXMoY2hhciAqYWRkcikKIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKaW5kZXggM2ZmYWRmOC4uMTJmOWJhMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKQEAgLTkyLDE2ICs5Miw2MiBAQAogCiBUZXN0aW5nOgogCi1tYWR2aXNlKE1BRFZfUE9JU09OLCAuLi4uKQorbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKQogCShhcyByb290KQogCVBvaXNvbiBhIHBhZ2UgaW4gdGhlIHByb2Nlc3MgZm9yIHRlc3RpbmcKIAogCiBod3BvaXNvbi1pbmplY3QgbW9kdWxlIHRocm91Z2ggZGVidWdmcwotCS9zeXMvZGVidWcvaHdwb2lzb24vY29ycnVwdC1wZm4KIAotSW5qZWN0IGh3cG9pc29uIGZhdWx0IGF0IFBGTiBlY2hvZWQgaW50byB0aGlzIGZpbGUKKy9zeXMvZGVidWcvaHdwb2lzb24vCiAKK2NvcnJ1cHQtcGZuCisKK0luamVjdCBod3BvaXNvbiBmYXVsdCBhdCBQRk4gZWNob2VkIGludG8gdGhpcyBmaWxlLiBUaGlzIGRvZXMKK3NvbWUgZWFybHkgZmlsdGVyaW5nIHRvIGF2b2lkIGNvcnJ1cHRlZCB1bmludGVuZGVkIHBhZ2VzIGluIHRlc3Qgc3VpdGVzLgorCit1bnBvaXNvbi1wZm4KKworU29mdHdhcmUtdW5wb2lzb24gcGFnZSBhdCBQRk4gZWNob2VkIGludG8gdGhpcyBmaWxlLiBUaGlzCit3YXkgYSBwYWdlIGNhbiBiZSByZXVzZWQgYWdhaW4uCitUaGlzIG9ubHkgd29ya3MgZm9yIExpbnV4IGluamVjdGVkIGZhaWx1cmVzLCBub3QgZm9yIHJlYWwKK21lbW9yeSBmYWlsdXJlcy4KKworTm90ZSB0aGVzZSBpbmplY3Rpb24gaW50ZXJmYWNlcyBhcmUgbm90IHN0YWJsZSBhbmQgbWlnaHQgY2hhbmdlIGJldHdlZW4KK2tlcm5lbCB2ZXJzaW9ucworCitjb3JydXB0LWZpbHRlci1kZXYtbWFqb3IKK2NvcnJ1cHQtZmlsdGVyLWRldi1taW5vcgorCitPbmx5IGhhbmRsZSBtZW1vcnkgZmFpbHVyZXMgdG8gcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIHN5c3RlbSBkZWZpbmVkCitieSBibG9jayBkZXZpY2UgbWFqb3IvbWlub3IuICAtMVUgaXMgdGhlIHdpbGRjYXJkIHZhbHVlLgorVGhpcyBzaG91bGQgYmUgb25seSB1c2VkIGZvciB0ZXN0aW5nIHdpdGggYXJ0aWZpY2lhbCBpbmplY3Rpb24uCisKK2NvcnJ1cHQtZmlsdGVyLW1lbWNnCisKK0xpbWl0IGluamVjdGlvbiB0byBwYWdlcyBvd25lZCBieSBtZW1ncm91cC4gU3BlY2lmaWVkIGJ5IGlub2RlIG51bWJlcgorb2YgdGhlIG1lbWNnLgorCitFeGFtcGxlOgorICAgICAgICBta2RpciAvY2dyb3VwL2h3cG9pc29uCisKKyAgICAgICAgdXNlbWVtIC1tIDEwMCAtcyAxMDAwICYKKyAgICAgICAgZWNobyBgam9icyAtcGAgPiAvY2dyb3VwL2h3cG9pc29uL3Rhc2tzCisKKyAgICAgICAgbWVtY2dfaW5vPSQobHMgLWlkIC9jZ3JvdXAvaHdwb2lzb24gfCBjdXQgLWYxIC1kJyAnKQorICAgICAgICBlY2hvICRtZW1jZ19pbm8gPiAvZGVidWcvaHdwb2lzb24vY29ycnVwdC1maWx0ZXItbWVtY2cKKworICAgICAgICBwYWdlLXR5cGVzIC1wIGBwaWRvZiBpbml0YCAgIC0taHdwb2lzb24gICMgc2hhbGwgZG8gbm90aGluZworICAgICAgICBwYWdlLXR5cGVzIC1wIGBwaWRvZiB1c2VtZW1gIC0taHdwb2lzb24gICMgcG9pc29uIGl0cyBwYWdlcworCitjb3JydXB0LWZpbHRlci1mbGFncy1tYXNrCitjb3JydXB0LWZpbHRlci1mbGFncy12YWx1ZQorCitXaGVuIHNwZWNpZmllZCwgb25seSBwb2lzb24gcGFnZXMgaWYgKChwYWdlX2ZsYWdzICYgbWFzaykgPT0gdmFsdWUpLgorVGhpcyBhbGxvd3Mgc3RyZXNzIHRlc3Rpbmcgb2YgbWFueSBraW5kcyBvZiBwYWdlcy4gVGhlIHBhZ2VfZmxhZ3MKK2FyZSB0aGUgc2FtZSBhcyBpbiAvcHJvYy9rcGFnZWZsYWdzLiBUaGUgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGluCitpbmNsdWRlL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmggYW5kIGRvY3VtZW50ZWQgaW4KK0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQKIAogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIE1DRSBpbmplY3RvcgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKaW5kZXggMjYyZDhlNi4uYjM5MmU0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dApAQCAtMTYsOSArMTYsOSBAQAogYXBwbGljYXRpb24gd2hpY2ggZ2VuZXJhdGVzIG1hbnkgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGRhdGEuCiAKIEtTTSBvbmx5IG1lcmdlcyBhbm9ueW1vdXMgKHByaXZhdGUpIHBhZ2VzLCBuZXZlciBwYWdlY2FjaGUgKGZpbGUpIHBhZ2VzLgotS1NNJ3MgbWVyZ2VkIHBhZ2VzIGFyZSBhdCBwcmVzZW50IGxvY2tlZCBpbnRvIGtlcm5lbCBtZW1vcnkgZm9yIGFzIGxvbmcKLWFzIHRoZXkgYXJlIHNoYXJlZDogc28gY2Fubm90IGJlIHN3YXBwZWQgb3V0IGxpa2UgdGhlIHVzZXIgcGFnZXMgdGhleQotcmVwbGFjZSAoYnV0IHN3YXBwaW5nIEtTTSBwYWdlcyBzaG91bGQgZm9sbG93IHNvb24gaW4gYSBsYXRlciByZWxlYXNlKS4KK0tTTSdzIG1lcmdlZCBwYWdlcyB3ZXJlIG9yaWdpbmFsbHkgbG9ja2VkIGludG8ga2VybmVsIG1lbW9yeSwgYnV0IGNhbiBub3cKK2JlIHN3YXBwZWQgb3V0IGp1c3QgbGlrZSBvdGhlciB1c2VyIHBhZ2VzIChidXQgc2hhcmluZyBpcyBicm9rZW4gd2hlbiB0aGV5CithcmUgc3dhcHBlZCBiYWNrIGluOiBrc21kIG11c3QgcmVkaXNjb3ZlciB0aGVpciBpZGVudGl0eSBhbmQgbWVyZ2UgYWdhaW4pLgogCiBLU00gb25seSBvcGVyYXRlcyBvbiB0aG9zZSBhcmVhcyBvZiBhZGRyZXNzIHNwYWNlIHdoaWNoIGFuIGFwcGxpY2F0aW9uCiBoYXMgYWR2aXNlZCB0byBiZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgbWVyZ2luZywgYnkgdXNpbmcgdGhlIG1hZHZpc2UoMikKQEAgLTQ0LDIwICs0NCwxMiBAQAogYW5kIG1pZ2h0IGZhaWwgd2l0aCBFQUdBSU4gaWYgbm90IGVub3VnaCBtZW1vcnkgZm9yIGludGVybmFsIHN0cnVjdHVyZXMuCiAKIEFwcGxpY2F0aW9ucyBzaG91bGQgYmUgY29uc2lkZXJhdGUgaW4gdGhlaXIgdXNlIG9mIE1BRFZfTUVSR0VBQkxFLAotcmVzdHJpY3RpbmcgaXRzIHVzZSB0byBhcmVhcyBsaWtlbHkgdG8gYmVuZWZpdC4gIEtTTSdzIHNjYW5zIG1heSB1c2UKLWEgbG90IG9mIHByb2Nlc3NpbmcgcG93ZXIsIGFuZCBpdHMga2VybmVsLXJlc2lkZW50IHBhZ2VzIGFyZSBhIGxpbWl0ZWQKLXJlc291cmNlLiAgU29tZSBpbnN0YWxsYXRpb25zIHdpbGwgZGlzYWJsZSBLU00gZm9yIHRoZXNlIHJlYXNvbnMuCityZXN0cmljdGluZyBpdHMgdXNlIHRvIGFyZWFzIGxpa2VseSB0byBiZW5lZml0LiAgS1NNJ3Mgc2NhbnMgbWF5IHVzZSBhIGxvdAorb2YgcHJvY2Vzc2luZyBwb3dlcjogc29tZSBpbnN0YWxsYXRpb25zIHdpbGwgZGlzYWJsZSBLU00gZm9yIHRoYXQgcmVhc29uLgogCiBUaGUgS1NNIGRhZW1vbiBpcyBjb250cm9sbGVkIGJ5IHN5c2ZzIGZpbGVzIGluIC9zeXMva2VybmVsL21tL2tzbS8sCiByZWFkYWJsZSBieSBhbGwgYnV0IHdyaXRhYmxlIG9ubHkgYnkgcm9vdDoKIAotbWF4X2tlcm5lbF9wYWdlcyAtIHNldCB0byBtYXhpbXVtIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdGhhdCBLU00gbWF5IHVzZQotICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMTAwMDAwID4gL3N5cy9rZXJuZWwvbW0va3NtL21heF9rZXJuZWxfcGFnZXMiCi0gICAgICAgICAgICAgICAgICAgVmFsdWUgMCBpbXBvc2VzIG5vIGxpbWl0IG9uIHRoZSBrZXJuZWwgcGFnZXMgS1NNIG1heSB1c2U7Ci0gICAgICAgICAgICAgICAgICAgYnV0IG5vdGUgdGhhdCBhbnkgcHJvY2VzcyB1c2luZyBNQURWX01FUkdFQUJMRSBjYW4gY2F1c2UKLSAgICAgICAgICAgICAgICAgICBLU00gdG8gYWxsb2NhdGUgdGhlc2UgcGFnZXMsIHVuc3dhcHBhYmxlIHVudGlsIGl0IGV4aXRzLgotICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IHF1YXJ0ZXIgb2YgbWVtb3J5IChjaG9zZW4gdG8gbm90IHBpbiB0b28gbXVjaCkKLQogcGFnZXNfdG9fc2NhbiAgICAtIGhvdyBtYW55IHByZXNlbnQgcGFnZXMgdG8gc2NhbiBiZWZvcmUga3NtZCBnb2VzIHRvIHNsZWVwCiAgICAgICAgICAgICAgICAgICAgZS5nLiAiZWNobyAxMDAgPiAvc3lzL2tlcm5lbC9tbS9rc20vcGFnZXNfdG9fc2NhbiIKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAxMDAgKGNob3NlbiBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcykKQEAgLTc1LDcgKzY3LDcgQEAKIAogVGhlIGVmZmVjdGl2ZW5lc3Mgb2YgS1NNIGFuZCBNQURWX01FUkdFQUJMRSBpcyBzaG93biBpbiAvc3lzL2tlcm5lbC9tbS9rc20vOgogCi1wYWdlc19zaGFyZWQgICAgIC0gaG93IG1hbnkgc2hhcmVkIHVuc3dhcHBhYmxlIGtlcm5lbCBwYWdlcyBLU00gaXMgdXNpbmcKK3BhZ2VzX3NoYXJlZCAgICAgLSBob3cgbWFueSBzaGFyZWQgcGFnZXMgYXJlIGJlaW5nIHVzZWQKIHBhZ2VzX3NoYXJpbmcgICAgLSBob3cgbWFueSBtb3JlIHNpdGVzIGFyZSBzaGFyaW5nIHRoZW0gaS5lLiBob3cgbXVjaCBzYXZlZAogcGFnZXNfdW5zaGFyZWQgICAtIGhvdyBtYW55IHBhZ2VzIHVuaXF1ZSBidXQgcmVwZWF0ZWRseSBjaGVja2VkIGZvciBtZXJnaW5nCiBwYWdlc192b2xhdGlsZSAgIC0gaG93IG1hbnkgcGFnZXMgY2hhbmdpbmcgdG9vIGZhc3QgdG8gYmUgcGxhY2VkIGluIGEgdHJlZQpAQCAtODcsNCArNzksNCBAQAogcHJvcG9ydGlvbiB0aGVyZSB3b3VsZCBhbHNvIGluZGljYXRlIHBvb3IgdXNlIG9mIG1hZHZpc2UgTUFEVl9NRVJHRUFCTEUuCiAKIEl6aWsgRWlkdXMsCi1IdWdoIERpY2tpbnMsIDI0IFNlcHQgMjAwOQorSHVnaCBEaWNraW5zLCAxNyBOb3YgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBlYTQ0ZWE1Li42NmU5MzU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtMSwxMSArMSwyMiBAQAogLyoKICAqIHBhZ2UtdHlwZXM6IFRvb2wgZm9yIHF1ZXJ5aW5nIHBhZ2UgZmxhZ3MKICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgZmluZCBhIGNvcHkgb2YgdjIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNvbWV3aGVyZSBvbgorICogeW91ciBMaW51eCBzeXN0ZW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBjb3Jwb3JhdGlvbgogICoKICAqIEF1dGhvcnM6IFd1IEZlbmdndWFuZyA8ZmVuZ2d1YW5nLnd1QGludGVsLmNvbT4KLSAqCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KICAqLwogCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKQEAgLTEwMCw3ICsxMTEsNyBAQAogI2RlZmluZSBCSVQobmFtZSkJCSgxVUxMIDw8IEtQRl8jI25hbWUpCiAjZGVmaW5lIEJJVFNfQ09NUE9VTkQJCShCSVQoQ09NUE9VTkRfSEVBRCkgfCBCSVQoQ09NUE9VTkRfVEFJTCkpCiAKLXN0YXRpYyBjaGFyICpwYWdlX2ZsYWdfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlX2ZsYWdfbmFtZXNbXSA9IHsKIAlbS1BGX0xPQ0tFRF0JCT0gIkw6bG9ja2VkIiwKIAlbS1BGX0VSUk9SXQkJPSAiRTplcnJvciIsCiAJW0tQRl9SRUZFUkVOQ0VEXQk9ICJSOnJlZmVyZW5jZWQiLApAQCAtMTczLDcgKzE4NCw3IEBACiBzdGF0aWMgaW50CQlvcHRfaHdwb2lzb247CiBzdGF0aWMgaW50CQlvcHRfdW5wb2lzb247CiAKLXN0YXRpYyBjaGFyCQkqaHdwb2lzb25fZGVidWdfZnMgPSAiL2RlYnVnL2h3cG9pc29uIjsKK3N0YXRpYyBjb25zdCBjaGFyCWh3cG9pc29uX2RlYnVnX2ZzW10gPSAiL2RlYnVnL2h3cG9pc29uIjsKIHN0YXRpYyBpbnQJCWh3cG9pc29uX2luamVjdF9mZDsKIHN0YXRpYyBpbnQJCWh3cG9pc29uX2ZvcmdldF9mZDsKIApAQCAtNTYwLDcgKzU3MSw3IEBACiB7CiAJdWludDY0X3QgYnVmW0tQQUdFRkxBR1NfQkFUQ0hdOwogCXVuc2lnbmVkIGxvbmcgYmF0Y2g7Ci0JdW5zaWduZWQgbG9uZyBwYWdlczsKKwlsb25nIHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgaTsKIAogCXdoaWxlIChjb3VudCkgewpAQCAtNjczLDMwICs2ODQsMzUgQEAKIAogCXByaW50ZigKICJwYWdlLXR5cGVzIFtvcHRpb25zXVxuIgotIiAgICAgICAgICAgIC1yfC0tcmF3ICAgICAgICAgICAgICAgICAgUmF3IG1vZGUsIGZvciBrZXJuZWwgZGV2ZWxvcGVyc1xuIgotIiAgICAgICAgICAgIC1hfC0tYWRkciAgICBhZGRyLXNwZWMgICAgV2FsayBhIHJhbmdlIG9mIHBhZ2VzXG4iCi0iICAgICAgICAgICAgLWJ8LS1iaXRzICAgIGJpdHMtc3BlYyAgICBXYWxrIHBhZ2VzIHdpdGggc3BlY2lmaWVkIGJpdHNcbiIKLSIgICAgICAgICAgICAtcHwtLXBpZCAgICAgcGlkICAgICAgICAgIFdhbGsgcHJvY2VzcyBhZGRyZXNzIHNwYWNlXG4iCisiICAgICAgICAgICAgLXJ8LS1yYXcgICAgICAgICAgICAgICAgICAgUmF3IG1vZGUsIGZvciBrZXJuZWwgZGV2ZWxvcGVyc1xuIgorIiAgICAgICAgICAgIC1kfC0tZGVzY3JpYmUgZmxhZ3MgICAgICAgIERlc2NyaWJlIGZsYWdzXG4iCisiICAgICAgICAgICAgLWF8LS1hZGRyICAgIGFkZHItc3BlYyAgICAgV2FsayBhIHJhbmdlIG9mIHBhZ2VzXG4iCisiICAgICAgICAgICAgLWJ8LS1iaXRzICAgIGJpdHMtc3BlYyAgICAgV2FsayBwYWdlcyB3aXRoIHNwZWNpZmllZCBiaXRzXG4iCisiICAgICAgICAgICAgLXB8LS1waWQgICAgIHBpZCAgICAgICAgICAgV2FsayBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VcbiIKICNpZiAwIC8qIHBsYW5uZWQgZmVhdHVyZXMgKi8KLSIgICAgICAgICAgICAtZnwtLWZpbGUgICAgZmlsZW5hbWUgICAgIFdhbGsgZmlsZSBhZGRyZXNzIHNwYWNlXG4iCisiICAgICAgICAgICAgLWZ8LS1maWxlICAgIGZpbGVuYW1lICAgICAgV2FsayBmaWxlIGFkZHJlc3Mgc3BhY2VcbiIKICNlbmRpZgotIiAgICAgICAgICAgIC1sfC0tbGlzdCAgICAgICAgICAgICAgICAgU2hvdyBwYWdlIGRldGFpbHMgaW4gcmFuZ2VzXG4iCi0iICAgICAgICAgICAgLUx8LS1saXN0LWVhY2ggICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBvbmUgYnkgb25lXG4iCi0iICAgICAgICAgICAgLU58LS1uby1zdW1tYXJ5ICAgICAgICAgICBEb24ndCBzaG93IHN1bW1heSBpbmZvXG4iCi0iICAgICAgICAgICAgLVh8LS1od3BvaXNvbiAgICAgICAgICAgICBod3BvaXNvbiBwYWdlc1xuIgotIiAgICAgICAgICAgIC14fC0tdW5wb2lzb24gICAgICAgICAgICAgdW5wb2lzb24gcGFnZXNcbiIKLSIgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICAgICAgICAgIFNob3cgdGhpcyB1c2FnZSBtZXNzYWdlXG4iCisiICAgICAgICAgICAgLWx8LS1saXN0ICAgICAgICAgICAgICAgICAgU2hvdyBwYWdlIGRldGFpbHMgaW4gcmFuZ2VzXG4iCisiICAgICAgICAgICAgLUx8LS1saXN0LWVhY2ggICAgICAgICAgICAgU2hvdyBwYWdlIGRldGFpbHMgb25lIGJ5IG9uZVxuIgorIiAgICAgICAgICAgIC1OfC0tbm8tc3VtbWFyeSAgICAgICAgICAgIERvbid0IHNob3cgc3VtbWF5IGluZm9cbiIKKyIgICAgICAgICAgICAtWHwtLWh3cG9pc29uICAgICAgICAgICAgICBod3BvaXNvbiBwYWdlc1xuIgorIiAgICAgICAgICAgIC14fC0tdW5wb2lzb24gICAgICAgICAgICAgIHVucG9pc29uIHBhZ2VzXG4iCisiICAgICAgICAgICAgLWh8LS1oZWxwICAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIKKyJmbGFnczpcbiIKKyIgICAgICAgICAgICAweDEwICAgICAgICAgICAgICAgICAgICAgICBiaXRmaWVsZCBmb3JtYXQsIGUuZy5cbiIKKyIgICAgICAgICAgICBhbm9uICAgICAgICAgICAgICAgICAgICAgICBiaXQtbmFtZSwgZS5nLlxuIgorIiAgICAgICAgICAgIDB4MTAsYW5vbiAgICAgICAgICAgICAgICAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBlLmcuXG4iCiAiYWRkci1zcGVjOlxuIgotIiAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgICAgICAgICAgb25lIHBhZ2UgYXQgb2Zmc2V0IE4gKHVuaXQ6IHBhZ2VzKVxuIgotIiAgICAgICAgICAgIE4rTSAgICAgICAgICAgICAgICAgICAgICAgcGFnZXMgcmFuZ2UgZnJvbSBOIHRvIE4rTS0xXG4iCi0iICAgICAgICAgICAgTixNICAgICAgICAgICAgICAgICAgICAgICBwYWdlcyByYW5nZSBmcm9tIE4gdG8gTS0xXG4iCi0iICAgICAgICAgICAgTiwgICAgICAgICAgICAgICAgICAgICAgICBwYWdlcyByYW5nZSBmcm9tIE4gdG8gZW5kXG4iCi0iICAgICAgICAgICAgLE0gICAgICAgICAgICAgICAgICAgICAgICBwYWdlcyByYW5nZSBmcm9tIDAgdG8gTS0xXG4iCisiICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHBhZ2UgYXQgb2Zmc2V0IE4gKHVuaXQ6IHBhZ2VzKVxuIgorIiAgICAgICAgICAgIE4rTSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzIHJhbmdlIGZyb20gTiB0byBOK00tMVxuIgorIiAgICAgICAgICAgIE4sTSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzIHJhbmdlIGZyb20gTiB0byBNLTFcbiIKKyIgICAgICAgICAgICBOLCAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlcyByYW5nZSBmcm9tIE4gdG8gZW5kXG4iCisiICAgICAgICAgICAgLE0gICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXMgcmFuZ2UgZnJvbSAwIHRvIE0tMVxuIgogImJpdHMtc3BlYzpcbiIKLSIgICAgICAgICAgICBiaXQxLGJpdDIgICAgICAgICAgICAgICAgIChmbGFncyAmIChiaXQxfGJpdDIpKSAhPSAwXG4iCi0iICAgICAgICAgICAgYml0MSxiaXQyPWJpdDEgICAgICAgICAgICAoZmxhZ3MgJiAoYml0MXxiaXQyKSkgPT0gYml0MVxuIgotIiAgICAgICAgICAgIGJpdDEsfmJpdDIgICAgICAgICAgICAgICAgKGZsYWdzICYgKGJpdDF8Yml0MikpID09IGJpdDFcbiIKLSIgICAgICAgICAgICA9Yml0MSxiaXQyICAgICAgICAgICAgICAgIGZsYWdzID09IChiaXQxfGJpdDIpXG4iCisiICAgICAgICAgICAgYml0MSxiaXQyICAgICAgICAgICAgICAgICAgKGZsYWdzICYgKGJpdDF8Yml0MikpICE9IDBcbiIKKyIgICAgICAgICAgICBiaXQxLGJpdDI9Yml0MSAgICAgICAgICAgICAoZmxhZ3MgJiAoYml0MXxiaXQyKSkgPT0gYml0MVxuIgorIiAgICAgICAgICAgIGJpdDEsfmJpdDIgICAgICAgICAgICAgICAgIChmbGFncyAmIChiaXQxfGJpdDIpKSA9PSBiaXQxXG4iCisiICAgICAgICAgICAgPWJpdDEsYml0MiAgICAgICAgICAgICAgICAgZmxhZ3MgPT0gKGJpdDF8Yml0MilcbiIKICJiaXQtbmFtZXM6XG4iCiAJKTsKIApAQCAtODg0LDEzICs5MDAsMjMgQEAKIAlhZGRfYml0c19maWx0ZXIobWFzaywgYml0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX2ZsYWdzKGNvbnN0IGNoYXIgKm9wdGFyZykKK3sKKwl1aW50NjRfdCBmbGFncyA9IHBhcnNlX2ZsYWdfbmFtZXMob3B0YXJnLCAwKTsKIAotc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCXByaW50ZigiMHglMDE2bGx4XHQlc1x0JXNcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpZmxhZ3MsCisJCXBhZ2VfZmxhZ19uYW1lKGZsYWdzKSwKKwkJcGFnZV9mbGFnX2xvbmduYW1lKGZsYWdzKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKIAl7ICJyYXciICAgICAgICwgMCwgTlVMTCwgJ3InIH0sCiAJeyAicGlkIiAgICAgICAsIDEsIE5VTEwsICdwJyB9LAogCXsgImZpbGUiICAgICAgLCAxLCBOVUxMLCAnZicgfSwKIAl7ICJhZGRyIiAgICAgICwgMSwgTlVMTCwgJ2EnIH0sCiAJeyAiYml0cyIgICAgICAsIDEsIE5VTEwsICdiJyB9LAorCXsgImRlc2NyaWJlIiAgLCAxLCBOVUxMLCAnZCcgfSwKIAl7ICJsaXN0IiAgICAgICwgMCwgTlVMTCwgJ2wnIH0sCiAJeyAibGlzdC1lYWNoIiAsIDAsIE5VTEwsICdMJyB9LAogCXsgIm5vLXN1bW1hcnkiLCAwLCBOVUxMLCAnTicgfSwKQEAgLTkwNyw3ICs5MzMsNyBAQAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAotCQkJCSJycDpmOmE6YjpsTE5YeGgiLCBvcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJCQkicnA6ZjphOmI6ZDpsTE5YeGgiLCBvcHRzLCBOVUxMKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjKSB7CiAJCWNhc2UgJ3InOgogCQkJb3B0X3JhdyA9IDE7CkBAIC05MjQsNiArOTUwLDkgQEAKIAkJY2FzZSAnYic6CiAJCQlwYXJzZV9iaXRzX21hc2sob3B0YXJnKTsKIAkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWRlc2NyaWJlX2ZsYWdzKG9wdGFyZyk7CisJCQlleGl0KDApOwogCQljYXNlICdsJzoKIAkJCW9wdF9saXN0ID0gMTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvS2J1aWxkIGIvS2J1aWxkCmluZGV4IGYwNTZiNGYuLmUzNzM3YWQgMTAwNjQ0Ci0tLSBhL0tidWlsZAorKysgYi9LYnVpbGQKQEAgLTgsNyArOCw3IEBACiAjIyMjIwogIyAxKSBHZW5lcmF0ZSBib3VuZHMuaAogCi1ib3VuZHMtZmlsZSA6PSBpbmNsdWRlL2xpbnV4L2JvdW5kcy5oCitib3VuZHMtZmlsZSA6PSBpbmNsdWRlL2dlbmVyYXRlZC9ib3VuZHMuaAogCiBhbHdheXMgIDo9ICQoYm91bmRzLWZpbGUpCiB0YXJnZXRzIDo9ICQoYm91bmRzLWZpbGUpIGtlcm5lbC9ib3VuZHMucwpAQCAtNDMsNyArNDMsNyBAQAogIyAyKSBHZW5lcmF0ZSBhc20tb2Zmc2V0cy5oCiAjCiAKLW9mZnNldHMtZmlsZSA6PSBpbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCitvZmZzZXRzLWZpbGUgOj0gaW5jbHVkZS9nZW5lcmF0ZWQvYXNtLW9mZnNldHMuaAogCiBhbHdheXMgICs9ICQob2Zmc2V0cy1maWxlKQogdGFyZ2V0cyArPSAkKG9mZnNldHMtZmlsZSkKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjU2MTM5ZS4uNzQ1NjQzYiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTgwMSw2ICs4MDEsMTkgQEAKIFc6CWh0dHA6Ly93aWtpLm9wZW5tb2tvLm9yZy93aWtpL05lb19GcmVlUnVubmVyCiBTOglTdXBwb3J0ZWQKIAorQVJNL1FVQUxDT01NIE1TTSBNQUNISU5FIFNVUFBPUlQKK006CURhdmlkIEJyb3duIDxkYXZpZGJAY29kZWF1cm9yYS5vcmc+CitNOglEYW5pZWwgV2Fsa2VyIDxkd2Fsa2VyQGNvZGVhdXJvcmEub3JnPgorTToJQnJ5YW4gSHVudHNtYW4gPGJyeWFuaEBjb2RlYXVyb3JhLm9yZz4KK0Y6CWFyY2gvYXJtL21hY2gtbXNtLworRjoJZHJpdmVycy92aWRlby9tc20vCitGOglkcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKK0Y6CWRyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaAorRjoJZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5oCitGOglkcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMKK1Q6CWdpdCBnaXQ6Ly9jb2RlYXVyb3JhLm9yZy9xdWljL2tlcm5lbC9kd2Fsa2VyL2xpbnV4LW1zbS5naXQKK1M6CU1haW50YWluZWQKKwogQVJNL1RPU0EgTUFDSElORSBTVVBQT1JUCiBNOglEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CiBNOglEaXJrIE9wZmVyIDxkaXJrQG9wZmVyLW9ubGluZS5kZT4KQEAgLTgyMiwxMyArODM1LDEzIEBACiBGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmgKIEY6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCiAKLUFSTS9QQUxNIFRSRU8gNjgwIFNVUFBPUlQKK0FSTS9QQUxNIFRSRU8gU1VQUE9SVAogTToJVG9tYXMgQ2VjaCA8c2xlZXBfd2Fsa2VyQHN1c2UuY3o+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KIFM6CU1haW50YWluZWQKLUY6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90cmVvNjgwLmgKLUY6CWFyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYworRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10cmVvLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKIAogQVJNL1BBTE1aNzIgU1VQUE9SVAogTToJU2VyZ2V5IExhcGluIDxzbGFwaW5Ab3NzZmFucy5vcmc+CkBAIC0xMzg5LDYgKzE0MDIsOCBAQAogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL3VzYi9XVVNCLURlc2lnbi1vdmVydmlldy50eHQKIEY6CURvY3VtZW50YXRpb24vdXNiL3d1c2ItY2JhZgorRjoJZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYworRjoJZHJpdmVycy91c2IvaG9zdC93aGNpLwogRjoJZHJpdmVycy91c2Ivd3VzYmNvcmUvCiBGOglpbmNsdWRlL2xpbnV4L3VzYi93dXNiKgogCkBAIC0xNDY5LDggKzE0ODQsOCBAQAogCiBDT01NT04gSU5URVJORVQgRklMRSBTWVNURU0gKENJRlMpCiBNOglTdGV2ZSBGcmVuY2ggPHNmcmVuY2hAc2FtYmEub3JnPgotTDoJbGludXgtY2lmcy1jbGllbnRAbGlzdHMuc2FtYmEub3JnCi1MOglzYW1iYS10ZWNobmljYWxAbGlzdHMuc2FtYmEub3JnCitMOglsaW51eC1jaWZzLWNsaWVudEBsaXN0cy5zYW1iYS5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJc2FtYmEtdGVjaG5pY2FsQGxpc3RzLnNhbWJhLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vbGludXgtY2lmcy5zYW1iYS5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NmcmVuY2gvY2lmcy0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKQEAgLTIzNjQsNiArMjM3OSwxNSBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9od21vbi9oZGFwcy5jCiAKK0hXUE9JU09OIE1FTU9SWSBGQUlMVVJFIEhBTkRMSU5HCitNOglBbmRpIEtsZWVuIDxhbmRpQGZpcnN0Zmxvb3Iub3JnPgorTDoJbGludXgtbW1Aa3ZhY2sub3JnCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrL2xpbnV4LW1jZS0yLjYuZ2l0IGh3cG9pc29uCitTOglNYWludGFpbmVkCitGOgltbS9tZW1vcnktZmFpbHVyZS5jCitGOgltbS9od3BvaXNvbi1pbmplY3QuYworCiBIWVBFUlZJU09SIFZJUlRVQUwgQ09OU09MRSBEUklWRVIKIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCiBTOglPZGQgRml4ZXMKQEAgLTMwNjgsOCArMzA5MiwxMSBAQAogRjoJZnMvYXV0b2ZzNC8KIAogS0VSTkVMIEJVSUxECitNOglNaWNoYWwgTWFyZWsgPG1tYXJla0BzdXNlLmN6PgorVDoJZ2l0IGdpdDovL3JlcG8ub3IuY3ovbGludXgta2J1aWxkLmdpdCBmb3ItbmV4dAorVDoJZ2l0IGdpdDovL3JlcG8ub3IuY3ovbGludXgta2J1aWxkLmdpdCBmb3ItbGludXMKIEw6CWxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9ycGhhbgorUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9rYnVpbGQvCiBGOglNYWtlZmlsZQogRjoJc2NyaXB0cy9NYWtlZmlsZS4qCkBAIC0zMTExLDcgKzMxMzgsNiBAQAogVzoJaHR0cDovL2t2bS5xdW1yYW5ldC5jb20KIFM6CVN1cHBvcnRlZAogRjoJYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKLUY6CWFyY2gveDg2L2t2bS9rdm1fc3ZtLmgKIEY6CWFyY2gveDg2L2t2bS9zdm0uYwogCiBLRVJORUwgVklSVFVBTCBNQUNISU5FIChLVk0pIEZPUiBQT1dFUlBDCkBAIC0zMjQ3LDYgKzMyNzMsNyBAQAogTToJUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BhdS5pYm0uY29tPgogVzoJaHR0cDovL3d3dy5pYm0uY29tL2xpbnV4L2x0Yy9wcm9qZWN0cy9wcGMKIFM6CVN1cHBvcnRlZAorRjoJYXJjaC9wb3dlcnBjL2Jvb3QvcnM2MDAwLmgKIAogTElOVVggRk9SIFBPV0VSUEMgKDMyLUJJVCBBTkQgNjQtQklUKQogTToJQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgpAQCAtMzI1NSwxOCArMzI4MiwyNCBAQAogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYmVuaC9wb3dlcnBjLmdpdAogUzoJU3VwcG9ydGVkCitGOglEb2N1bWVudGF0aW9uL3Bvd2VycGMvCitGOglhcmNoL3Bvd2VycGMvCiAKIExJTlVYIEZPUiBQT1dFUiBNQUNJTlRPU0gKIE06CUJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KIFc6CWh0dHA6Ly93d3cucGVuZ3VpbnBwYy5vcmcvCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy8KK0Y6CWRyaXZlcnMvbWFjaW50b3NoLwogCiBMSU5VWCBGT1IgUE9XRVJQQyBFTUJFRERFRCBNUEM1WFhYCiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5zZWNyZXRsYWIuY2EvZ2l0L2xpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC8KK0Y6CWFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC8KIAogTElOVVggRk9SIFBPV0VSUEMgRU1CRURERUQgUFBDNFhYCiBNOglKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KQEAgLTMyNzUsNiArMzMwOCw4IEBACiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qd2JveWVyL3Bvd2VycGMtNHh4LmdpdAogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvCitGOglhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC8KIAogTElOVVggRk9SIFBPV0VSUEMgRU1CRURERUQgWElMSU5YIFZJUlRFWAogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgpAQCAtMzI4Miw2ICszMzE3LDggQEAKIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9wb3dlcnBjLyovKnZpcnRleCoKK0Y6CWFyY2gvcG93ZXJwYy8qLyovKnZpcnRleCoKIAogTElOVVggRk9SIFBPV0VSUEMgRU1CRURERUQgUFBDOFhYCiBNOglWaXRhbHkgQm9yZHVnIDx2aXRiQGtlcm5lbC5jcmFzaGluZy5vcmc+CkBAIC0zMjk1LDEyICszMzMyLDE2IEBACiBXOglodHRwOi8vd3d3LnBlbmd1aW5wcGMub3JnLwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC8KIAogTElOVVggRk9SIFBPV0VSUEMgUEEgU0VNSSBQV1JGSUNJRU5UCiBNOglPbG9mIEpvaGFuc3NvbiA8b2xvZkBsaXhvbS5uZXQ+CiBXOglodHRwOi8vd3d3LnBhc2VtaS5jb20vCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwogUzoJU3VwcG9ydGVkCitGOglhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS8KK0Y6CWRyaXZlcnMvKi8qcGFzZW1pKgorRjoJZHJpdmVycy8qLyovKnBhc2VtaSoKIAogTElOVVggU0VDVVJJVFkgTU9EVUxFIChMU00pIEZSQU1FV09SSwogTToJQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPgpAQCAtMzYzOCw3ICszNjc5LDcgQEAKIE1VU0IgTVVMVElQT0lOVCBISUdIIFNQRUVEIERVQUwtUk9MRSBDT05UUk9MTEVSCiBNOglGZWxpcGUgQmFsYmkgPGZlbGlwZS5iYWxiaUBub2tpYS5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9tdXNiL21haW5saW5lLmdpdAorVDoJZ2l0IGdpdDovL2dpdG9yaW91cy5vcmcvdXNiL3VzYi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdXNiL211c2IvCiAKQEAgLTUwNTIsNiArNTA5Myw3IEBACiAKIFNQSSBTVUJTWVNURU0KIE06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgogTDoJc3BpLWRldmVsLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL3NwaS8KQEAgLTUzOTAsMTAgKzU0MzIsMTkgQEAKIE06CURhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKLUY6CWRyaXZlcnMvdXdiLyoKK0Y6CWRyaXZlcnMvdXdiLworWDoJZHJpdmVycy91d2Ivd2xwLworWDoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC8KK1g6CWRyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLXdscC5oCiBGOglpbmNsdWRlL2xpbnV4L3V3Yi5oCiBGOglpbmNsdWRlL2xpbnV4L3V3Yi8KIAorVU5JRkRFRgorTToJVG9ueSBGaW5jaCA8ZG90QGRvdGF0LmF0PgorVzoJaHR0cDovL2RvdGF0LmF0L3Byb2cvdW5pZmRlZgorUzoJTWFpbnRhaW5lZAorRjoJc2NyaXB0cy91bmlmZGVmLmMKKwogVU5JRk9STSBDRFJPTSBEUklWRVIKIE06CUplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KIFc6CWh0dHA6Ly93d3cua2VybmVsLmRrCkBAIC01ODk3LDkgKzU5NDgsMTIgQEAKIAogV0lNRURJQSBMTEMgUFJPVE9DT0wgKFdMUCkgU1VCU1lTVEVNCiBNOglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJaW5jbHVkZS9saW51eC93bHAuaAogRjoJZHJpdmVycy91d2Ivd2xwLworRjoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC8KK0Y6CWRyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLXdscC5oCiAKIFdJU1RST04gTEFQVE9QIEJVVFRPTiBEUklWRVIKIE06CU1pbG9zbGF2IFRybWFjIDxtaXRyQHZvbG55LmN6PgpAQCAtNTk0NSw2ICs1OTk5LDcgQEAKIFQ6CWdpdCBnaXQ6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbGludXgtMi42LWF1ZGlvcGx1cwogVzoJaHR0cDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9ub2RlLzgKIFM6CVN1cHBvcnRlZAorRjoJRG9jdW1lbnRhdGlvbi9od21vbi93bTgzPz8KIEY6CWRyaXZlcnMvbGVkcy9sZWRzLXdtODMqLmMKIEY6CWRyaXZlcnMvbWZkL3dtOCouYwogRjoJZHJpdmVycy9wb3dlci93bTgzKi5jCkBAIC01OTU0LDkgKzYwMDksOSBAQAogRjoJZHJpdmVycy93YXRjaGRvZy93bTgzKl93ZHQuYwogRjoJaW5jbHVkZS9saW51eC9tZmQvd204MzF4LwogRjoJaW5jbHVkZS9saW51eC9tZmQvd204MzUwLwotRjoJaW5jbHVkZS9saW51eC9tZmQvd204NDAwLwotRjoJc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwotRjoJc291bmQvc29jL2NvZGVjcy93bTg0MDAuYworRjoJaW5jbHVkZS9saW51eC9tZmQvd204NDAwKgorRjoJc291bmQvc29jL2NvZGVjcy93bTgzNTAuKgorRjoJc291bmQvc29jL2NvZGVjcy93bTg0MDAuKgogCiBYLjI1IE5FVFdPUksgTEFZRVIKIE06CUFuZHJldyBIZW5kcnkgPGFuZHJldy5oZW5kcnlAZ21haWwuY29tPgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAzM2Q0NzMyLi5lNmIwNmNiIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgotU1VCTEVWRUwgPSAzMgotRVhUUkFWRVJTSU9OID0KK1NVQkxFVkVMID0gMzMKK0VYVFJBVkVSU0lPTiA9IC1yYzEKIE5BTUUgPSBNYW4tRWF0aW5nIFNlYWxzIG9mIEFudGlxdWl0eQogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtMTYsNiArMTYsMTMgQEAKICMgbyAgcHJpbnQgIkVudGVyaW5nIGRpcmVjdG9yeSAuLi4iOwogTUFLRUZMQUdTICs9IC1yUiAtLW5vLXByaW50LWRpcmVjdG9yeQogCisjIEF2b2lkIGZ1bm55IGNoYXJhY3RlciBzZXQgZGVwZW5kZW5jaWVzCit1bmV4cG9ydCBMQ19BTEwKK0xDX0NUWVBFPUMKK0xDX0NPTExBVEU9QworTENfTlVNRVJJQz1DCitleHBvcnQgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19OVU1FUklDCisKICMgV2UgYXJlIHVzaW5nIGEgcmVjdXJzaXZlIGJ1aWxkLCBzbyB3ZSBuZWVkIHRvIGRvIGEgbGl0dGxlIHRoaW5raW5nCiAjIHRvIGdldCB0aGUgb3JkZXJpbmcgcmlnaHQuCiAjCkBAIC0zMzQsMTAgKzM0MSw5IEBACiAKICMgVXNlIExJTlVYSU5DTFVERSB3aGVuIHlvdSBtdXN0IHJlZmVyZW5jZSB0aGUgaW5jbHVkZS8gZGlyZWN0b3J5LgogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KLUxJTlVYSU5DTFVERSAgICA6PSAtSWluY2x1ZGUgXAotICAgICAgICAgICAgICAgICAgICQoaWYgJChLQlVJTERfU1JDKSwtSWluY2x1ZGUyIC1JJChzcmN0cmVlKS9pbmNsdWRlKSBcCi0gICAgICAgICAgICAgICAgICAgLUkkKHNyY3RyZWUpL2FyY2gvJChoZHItYXJjaCkvaW5jbHVkZSAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAtaW5jbHVkZSBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKK0xJTlVYSU5DTFVERSAgICA6PSAtSSQoc3JjdHJlZSkvYXJjaC8kKGhkci1hcmNoKS9pbmNsdWRlIC1JaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgJChpZiAkKEtCVUlMRF9TUkMpLCAtSSQoc3JjdHJlZSkvaW5jbHVkZSkgXAorICAgICAgICAgICAgICAgICAgIC1pbmNsdWRlIGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgKIAogS0JVSUxEX0NQUEZMQUdTIDo9IC1EX19LRVJORUxfXwogCkBAIC00NjUsNyArNDcxLDcgQEAKICMgQ2FyZWZ1bGx5IGxpc3QgZGVwZW5kZW5jaWVzIHNvIHdlIGRvIG5vdCB0cnkgdG8gYnVpbGQgc2NyaXB0cyB0d2ljZQogIyBpbiBwYXJhbGxlbAogUEhPTlkgKz0gc2NyaXB0cwotc2NyaXB0czogc2NyaXB0c19iYXNpYyBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKK3NjcmlwdHM6IHNjcmlwdHNfYmFzaWMgaW5jbHVkZS9jb25maWcvYXV0by5jb25mIGluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNvbmYKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKEApCiAKICMgT2JqZWN0cyB3ZSB3aWxsIGxpbmsgaW50byB2bWxpbnV4IC8gc3ViZGlycyB3ZSBuZWVkIHRvIHZpc2l0CkBAIC00OTIsMTggKzQ5OCwxOCBAQAogIyB3aXRoIGl0IGFuZCBmb3Jnb3QgdG8gcnVuIG1ha2Ugb2xkY29uZmlnLgogIyBpZiBhdXRvLmNvbmYuY21kIGlzIG1pc3NpbmcgdGhlbiB3ZSBhcmUgcHJvYmFibHkgaW4gYSBjbGVhbmVkIHRyZWUgc28KICMgd2UgZXhlY3V0ZSB0aGUgY29uZmlnIHN0ZXAgdG8gYmUgc3VyZSB0byBjYXRjaCB1cGRhdGVkIEtjb25maWcgZmlsZXMKLWluY2x1ZGUvY29uZmlnL2F1dG8uY29uZjogJChLQ09ORklHX0NPTkZJRykgaW5jbHVkZS9jb25maWcvYXV0by5jb25mLmNtZAoraW5jbHVkZS9jb25maWcvJS5jb25mOiAkKEtDT05GSUdfQ09ORklHKSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYuY21kCiAJJChRKSQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtlZmlsZSBzaWxlbnRvbGRjb25maWcKIGVsc2UKLSMgZXh0ZXJuYWwgbW9kdWxlcyBuZWVkcyBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmggYW5kIGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZgorIyBleHRlcm5hbCBtb2R1bGVzIG5lZWRzIGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmggYW5kIGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZgogIyBidXQgZG8gbm90IGNhcmUgaWYgdGhleSBhcmUgdXAtdG8tZGF0ZS4gVXNlIGF1dG8uY29uZiB0byB0cmlnZ2VyIHRoZSB0ZXN0CiBQSE9OWSArPSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKIAogaW5jbHVkZS9jb25maWcvYXV0by5jb25mOgotCSQoUSl0ZXN0IC1lIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCAtYSAtZSAkQCB8fCAoCQlcCisJJChRKXRlc3QgLWUgaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCAtYSAtZSAkQCB8fCAoCQlcCiAJZWNobzsJCQkJCQkJCVwKIAllY2hvICIgIEVSUk9SOiBLZXJuZWwgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiI7CQlcCi0JZWNobyAiICAgICAgICAgaW5jbHVkZS9saW51eC9hdXRvY29uZi5oIG9yICRAIGFyZSBtaXNzaW5nLiI7CVwKKwllY2hvICIgICAgICAgICBpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIG9yICRAIGFyZSBtaXNzaW5nLiI7XAogCWVjaG8gIiAgICAgICAgIFJ1biAnbWFrZSBvbGRjb25maWcgJiYgbWFrZSBwcmVwYXJlJyBvbiBrZXJuZWwgc3JjIHRvIGZpeCBpdC4iOwlcCiAJZWNobzsJCQkJCQkJCVwKIAkvYmluL2ZhbHNlKQpAQCAtODc3LDYgKzg4Myw5IEBACiBQSE9OWSArPSAkKHZtbGludXgtZGlycykKICQodm1saW51eC1kaXJzKTogcHJlcGFyZSBzY3JpcHRzCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JEAKK2lmZGVmIENPTkZJR19NT0RVTEVTCisJJChRKSQoTUFLRSkgJChtb2RidWlsdGluKT0kQAorZW5kaWYKIAogIyBCdWlsZCB0aGUga2VybmVsIHJlbGVhc2Ugc3RyaW5nCiAjCkBAIC05NTUsNyArOTY0LDYgQEAKICMgcHJlcGFyZTMgaXMgdXNlZCB0byBjaGVjayBpZiB3ZSBhcmUgYnVpbGRpbmcgaW4gYSBzZXBhcmF0ZSBvdXRwdXQgZGlyZWN0b3J5LAogIyBhbmQgaWYgc28gZG86CiAjIDEpIENoZWNrIHRoYXQgbWFrZSBoYXMgbm90IGJlZW4gZXhlY3V0ZWQgaW4gdGhlIGtlcm5lbCBzcmMgJChzcmN0cmVlKQotIyAyKSBDcmVhdGUgdGhlIGluY2x1ZGUyIGRpcmVjdG9yeSwgdXNlZCBmb3IgdGhlIHNlY29uZCBhc20gc3ltbGluawogcHJlcGFyZTM6IGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlCiBpZm5lcSAoJChLQlVJTERfU1JDKSwpCiAJQCQoa2VjaG8pICcgIFVzaW5nICQoc3JjdHJlZSkgYXMgc291cmNlIGZvciBrZXJuZWwnCkBAIC05NjQsMTcgKzk3MiwxMyBAQAogCQllY2hvICIgIGluIHRoZSAnJChzcmN0cmVlKScgZGlyZWN0b3J5LiI7XAogCQkvYmluL2ZhbHNlOyBcCiAJZmk7Ci0JJChRKWlmIFsgISAtZCBpbmNsdWRlMiBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgbWtkaXIgLXAgaW5jbHVkZTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICBsbiAtZnNuICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tJChTUkNBUkNIKSBpbmNsdWRlMi9hc207ICAgICBcCi0JZmkKIGVuZGlmCiAKICMgcHJlcGFyZTIgY3JlYXRlcyBhIG1ha2VmaWxlIGlmIHVzaW5nIGEgc2VwYXJhdGUgb3V0cHV0IGRpcmVjdG9yeQogcHJlcGFyZTI6IHByZXBhcmUzIG91dHB1dG1ha2VmaWxlCiAKLXByZXBhcmUxOiBwcmVwYXJlMiBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBpbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCBcCi0gICAgICAgICAgICAgICAgICAgaW5jbHVkZS9hc20gaW5jbHVkZS9jb25maWcvYXV0by5jb25mCitwcmVwYXJlMTogcHJlcGFyZTIgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggaW5jbHVkZS9nZW5lcmF0ZWQvdXRzcmVsZWFzZS5oIFwKKyAgICAgICAgICAgICAgICAgICBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKIAkkKGNtZF9jcm1vZHZlcmRpcikKIAogYXJjaHByZXBhcmU6IHByZXBhcmUxIHNjcmlwdHNfYmFzaWMKQEAgLTk4Niw0MiArOTkwLDYgQEAKICMgQWxsIHRoZSBwcmVwYXJpbmcuLgogcHJlcGFyZTogcHJlcGFyZTAKIAotIyBUaGUgYXNtIHN5bWxpbmsgY2hhbmdlcyB3aGVuICQoQVJDSCkgY2hhbmdlcy4KLSMgRGV0ZWN0IHRoaXMgYW5kIGFzayB1c2VyIHRvIHJ1biBtYWtlIG1ycHJvcGVyCi0jIElmIGFzbSBpcyBhIHN0YWxlIHN5bWxpbmsgKHBvaW50IHRvIGRpciB0aGF0IGRvZXMgbm90IGV4aXN0KSByZW1vdmUgaXQKLWRlZmluZSBjaGVjay1zeW1saW5rCi0Jc2V0IC1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiBbIC1MIGluY2x1ZGUvYXNtIF07IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlhc21saW5rPWByZWFkbGluayBpbmNsdWRlL2FzbSB8IGN1dCAtZCAnLScgLWYgMmA7ICAgICAgICAgIFwKLQkJaWYgWyAiJCRhc21saW5rIiAhPSAiJChTUkNBUkNIKSIgXTsgdGhlbiAgICAgICAgICAgICAgICAgICBcCi0JCQllY2hvICJFUlJPUjogdGhlIHN5bWxpbmsgJEAgcG9pbnRzIHRvIGFzbS0kJGFzbWxpbmsgYnV0IGFzbS0kKFNSQ0FSQ0gpIHdhcyBleHBlY3RlZCI7IFwKLQkJCWVjaG8gIiAgICAgICBzZXQgQVJDSCBvciBzYXZlIC5jb25maWcgYW5kIHJ1biAnbWFrZSBtcnByb3BlcicgdG8gZml4IGl0IjsgICAgICAgICAgICAgXAotCQkJZXhpdCAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJdGVzdCAtZSAkJGFzbWxpbmsgfHwgcm0gaW5jbHVkZS9hc207ICAgICAgICAgICAgICAgICAgICAgICBcCi0JZWxpZiBbIC1kIGluY2x1ZGUvYXNtIF07IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJZWNobyAiRVJST1I6ICRAIGlzIGEgZGlyZWN0b3J5IGJ1dCBhIHN5bWxpbmsgd2FzIGV4cGVjdGVkIjtcCi0JCWV4aXQgMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZpCi1lbmRlZgotCi0jIFdlIGNyZWF0ZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBvZiB0aGUgc3ltbGluayBpZiBpdCBkb2VzCi0jIG5vdCBleGlzdCBzbyB0aGUgdGVzdCBpbiBjaGVjay1zeW1saW5rIHdvcmtzIGFuZCB3ZSBoYXZlIGEKLSMgZGlyZWN0b3J5IGZvciBnZW5lcmF0ZWQgZmlsZXNhcyB1c2VkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcy4KLWRlZmluZSBjcmVhdGUtc3ltbGluawotCWlmIFsgISAtTCBpbmNsdWRlL2FzbSBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkkKGtlY2hvKSAnICBTWU1MSU5LICRAIC0+IGluY2x1ZGUvYXNtLSQoU1JDQVJDSCknOyBcCi0JCQlpZiBbICEgLWQgaW5jbHVkZS9hc20tJChTUkNBUkNIKSBdOyB0aGVuICAgICAgICAgICBcCi0JCQkJbWtkaXIgLXAgaW5jbHVkZS9hc20tJChTUkNBUkNIKTsgICAgICAgICAgIFwKLQkJCWZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWxuIC1mc24gYXNtLSQoU1JDQVJDSCkgJEA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmaQotZW5kZWYKLQotaW5jbHVkZS9hc206IEZPUkNFCi0JJChRKSQoY2hlY2stc3ltbGluaykKLQkkKFEpJChjcmVhdGUtc3ltbGluaykKLQogIyBHZW5lcmF0ZSBzb21lIGZpbGVzCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMDQ2LDcgKzEwMTQsNyBAQAogaW5jbHVkZS9saW51eC92ZXJzaW9uLmg6ICQoc3JjdHJlZSkvTWFrZWZpbGUgRk9SQ0UKIAkkKGNhbGwgZmlsZWNoayx2ZXJzaW9uLmgpCiAKLWluY2x1ZGUvbGludXgvdXRzcmVsZWFzZS5oOiBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSBGT1JDRQoraW5jbHVkZS9nZW5lcmF0ZWQvdXRzcmVsZWFzZS5oOiBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSBGT1JDRQogCSQoY2FsbCBmaWxlY2hrLHV0c3JlbGVhc2UuaCkKIAogUEhPTlkgKz0gaGVhZGVyZGVwCkBAIC0xMDc2LDExICsxMDQ0LDYgQEAKIGV4cG9ydCBJTlNUQUxMX0hEUl9QQVRIID0gJChvYmp0cmVlKS91c3IKIAogaGRyLWluc3QgOj0gLXJSIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5oZWFkZXJzaW5zdCBvYmoKLSMgRmluZCBvdXQgd2hlcmUgdGhlIEtidWlsZCBmaWxlIGlzIGxvY2F0ZWQgdG8gc3VwcG9ydAotIyBhcmNoLyQoQVJDSCkvaW5jbHVkZS9hc20KLWhkci1kaXIgPSAkKHN0cmlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICQoaWYgJCh3aWxkY2FyZCAkKHNyY3RyZWUpL2FyY2gvJChoZHItYXJjaCkvaW5jbHVkZS9hc20vS2J1aWxkKSwgXAotICAgICAgICAgICAgICAgYXJjaC8kKGhkci1hcmNoKS9pbmNsdWRlL2FzbSwgaW5jbHVkZS9hc20tJChoZHItYXJjaCkpKQogCiAjIElmIHdlIGRvIGFuIGFsbCBhcmNoIHByb2Nlc3Mgc2V0IGRzdCB0byBhc20tJChoZHItYXJjaCkKIGhkci1kc3QgPSAkKGlmICQoS0JVSUxEX0hFQURFUlMpLCBkc3Q9aW5jbHVkZS9hc20tJChoZHItYXJjaCksIGRzdD1pbmNsdWRlL2FzbSkKQEAgLTEwOTUsMTAgKzEwNTgsMTAgQEAKIAogUEhPTlkgKz0gaGVhZGVyc19pbnN0YWxsCiBoZWFkZXJzX2luc3RhbGw6IF9faGVhZGVycwotCSQoaWYgJCh3aWxkY2FyZCAkKHNyY3RyZWUpLyQoaGRyLWRpcikvS2J1aWxkKSwsIFwKKwkkKGlmICQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoaGRyLWFyY2gpL2luY2x1ZGUvYXNtL0tidWlsZCksLCBcCiAJJChlcnJvciBIZWFkZXJzIG5vdCBleHBvcnRhYmxlIGZvciB0aGUgJChTUkNBUkNIKSBhcmNoaXRlY3R1cmUpKQogCSQoUSkkKE1BS0UpICQoaGRyLWluc3QpPWluY2x1ZGUKLQkkKFEpJChNQUtFKSAkKGhkci1pbnN0KT0kKGhkci1kaXIpICQoaGRyLWRzdCkKKwkkKFEpJChNQUtFKSAkKGhkci1pbnN0KT1hcmNoLyQoaGRyLWFyY2gpL2luY2x1ZGUvYXNtICQoaGRyLWRzdCkKIAogUEhPTlkgKz0gaGVhZGVyc19jaGVja19hbGwKIGhlYWRlcnNfY2hlY2tfYWxsOiBoZWFkZXJzX2luc3RhbGxfYWxsCkBAIC0xMTA3LDcgKzEwNzAsNyBAQAogUEhPTlkgKz0gaGVhZGVyc19jaGVjawogaGVhZGVyc19jaGVjazogaGVhZGVyc19pbnN0YWxsCiAJJChRKSQoTUFLRSkgJChoZHItaW5zdCk9aW5jbHVkZSBIRFJDSEVDSz0xCi0JJChRKSQoTUFLRSkgJChoZHItaW5zdCk9JChoZHItZGlyKSAkKGhkci1kc3QpIEhEUkNIRUNLPTEKKwkkKFEpJChNQUtFKSAkKGhkci1pbnN0KT1hcmNoLyQoaGRyLWFyY2gpL2luY2x1ZGUvYXNtICQoaGRyLWRzdCkgSERSQ0hFQ0s9MQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBNb2R1bGVzCkBAIC0xMTI3LDYgKzEwOTAsNyBAQAogUEhPTlkgKz0gbW9kdWxlcwogbW9kdWxlczogJCh2bWxpbnV4LWRpcnMpICQoaWYgJChLQlVJTERfQlVJTFRJTiksdm1saW51eCkKIAkkKFEpJChBV0spICcheFskJDBdKysnICQodm1saW51eC1kaXJzOiU9JChvYmp0cmVlKS8lL21vZHVsZXMub3JkZXIpID4gJChvYmp0cmVlKS9tb2R1bGVzLm9yZGVyCisJJChRKSQoQVdLKSAnIXhbJCQwXSsrJyAkKHZtbGludXgtZGlyczolPSQob2JqdHJlZSkvJS9tb2R1bGVzLmJ1aWx0aW4pID4gJChvYmp0cmVlKS9tb2R1bGVzLmJ1aWx0aW4KIAlAJChrZWNobykgJyAgQnVpbGRpbmcgbW9kdWxlcywgc3RhZ2UgMi4nOwogCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CiAJJChRKSQoTUFLRSkgLWYgJChzcmN0cmVlKS9zY3JpcHRzL01ha2VmaWxlLmZ3aW5zdCBvYmo9ZmlybXdhcmUgX19md19tb2RidWlsZApAQCAtMTE1Niw2ICsxMTIwLDcgQEAKIAkJbG4gLXMgJChvYmp0cmVlKSAkKE1PRExJQikvYnVpbGQgOyBcCiAJZmkKIAlAY3AgLWYgJChvYmp0cmVlKS9tb2R1bGVzLm9yZGVyICQoTU9ETElCKS8KKwlAY3AgLWYgJChvYmp0cmVlKS9tb2R1bGVzLmJ1aWx0aW4gJChNT0RMSUIpLwogCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2RpbnN0CiAKICMgVGhpcyBkZXBtb2QgaXMgb25seSBmb3IgY29udmVuaWVuY2UgdG8gZ2l2ZSB0aGUgaW5pdGlhbApAQCAtMTE5NCwxMiArMTE1OSwxMCBAQAogICAgICAgICAgICAgICAgIC50bXBfa2FsbHN5bXMqIC50bXBfdmVyc2lvbiAudG1wX3ZtbGludXgqIC50bXBfU3lzdGVtLm1hcAogCiAjIERpcmVjdG9yaWVzICYgZmlsZXMgcmVtb3ZlZCB3aXRoICdtYWtlIG1ycHJvcGVyJwotTVJQUk9QRVJfRElSUyAgKz0gaW5jbHVkZS9jb25maWcgaW5jbHVkZTIgdXNyL2luY2x1ZGUgaW5jbHVkZS9nZW5lcmF0ZWQKLU1SUFJPUEVSX0ZJTEVTICs9IC5jb25maWcgLmNvbmZpZy5vbGQgaW5jbHVkZS9hc20gLnZlcnNpb24gLm9sZF92ZXJzaW9uIFwKLSAgICAgICAgICAgICAgICAgIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCAgICAgIFwKLSAgICAgICAgICAgICAgICAgIGluY2x1ZGUvbGludXgvdXRzcmVsZWFzZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIGluY2x1ZGUvbGludXgvYm91bmRzLmggaW5jbHVkZS9hc20qL2FzbS1vZmZzZXRzLmggICAgIFwKLQkJICBNb2R1bGUuc3ltdmVycyBNb2R1bGUubWFya2VycyB0YWdzIFRBR1MgY3Njb3BlKgorTVJQUk9QRVJfRElSUyAgKz0gaW5jbHVkZS9jb25maWcgdXNyL2luY2x1ZGUgaW5jbHVkZS9nZW5lcmF0ZWQKK01SUFJPUEVSX0ZJTEVTICs9IC5jb25maWcgLmNvbmZpZy5vbGQgLnZlcnNpb24gLm9sZF92ZXJzaW9uICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBNb2R1bGUuc3ltdmVycyB0YWdzIFRBR1MgY3Njb3BlKgogCiAjIGNsZWFuIC0gRGVsZXRlIG1vc3QsIGJ1dCBsZWF2ZSBlbm91Z2ggdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcwogIwpAQCAtMTIxOCw3ICsxMTgxLDcgQEAKIAkJXCggLW5hbWUgJyouW29hc10nIC1vIC1uYW1lICcqLmtvJyAtbyAtbmFtZSAnLiouY21kJyBcCiAJCS1vIC1uYW1lICcuKi5kJyAtbyAtbmFtZSAnLioudG1wJyAtbyAtbmFtZSAnKi5tb2QuYycgXAogCQktbyAtbmFtZSAnKi5zeW10eXBlcycgLW8gLW5hbWUgJ21vZHVsZXMub3JkZXInIFwKLQkJLW8gLW5hbWUgJ01vZHVsZS5tYXJrZXJzJyAtbyAtbmFtZSAnLnRtcF8qLm8uKicgXAorCQktbyAtbmFtZSBtb2R1bGVzLmJ1aWx0aW4gLW8gLW5hbWUgJy50bXBfKi5vLionIFwKIAkJLW8gLW5hbWUgJyouZ2NubycgXCkgLXR5cGUgZiAtcHJpbnQgfCB4YXJncyBybSAtZgogCiAjIG1ycHJvcGVyIC0gRGVsZXRlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGluY2x1ZGluZyAuY29uZmlnCkBAIC0xNDE2LDggKzEzNzksOCBAQAogCiBjbGVhbjoJcm0tZGlycyA6PSAkKE1PRFZFUkRJUikKIGNsZWFuOiBybS1maWxlcyA6PSAkKEtCVUlMRF9FWFRNT0QpL01vZHVsZS5zeW12ZXJzIFwKLSAgICAgICAgICAgICAgICAgICAkKEtCVUlMRF9FWFRNT0QpL01vZHVsZS5tYXJrZXJzIFwKLSAgICAgICAgICAgICAgICAgICAkKEtCVUlMRF9FWFRNT0QpL21vZHVsZXMub3JkZXIKKyAgICAgICAgICAgICAgICAgICAkKEtCVUlMRF9FWFRNT0QpL21vZHVsZXMub3JkZXIgXAorICAgICAgICAgICAgICAgICAgICQoS0JVSUxEX0VYVE1PRCkvbW9kdWxlcy5idWlsdGluCiBjbGVhbjogJChjbGVhbi1kaXJzKQogCSQoY2FsbCBjbWQscm1kaXJzKQogCSQoY2FsbCBjbWQscm1maWxlcykKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCBkODI4NzU4Li45ZDA1NWI0IDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xMzUsOSArMTM1LDcgQEAKIAogY29uZmlnIEhBVkVfSFdfQlJFQUtQT0lOVAogCWJvb2wKLQlkZXBlbmRzIG9uIEhBVkVfUEVSRl9FVkVOVFMKLQlzZWxlY3QgQU5PTl9JTk9ERVMKLQlzZWxlY3QgUEVSRl9FVkVOVFMKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTCiAKIGNvbmZpZyBIQVZFX1VTRVJfUkVUVVJOX05PVElGSUVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDQ0MzQ0ODEuLmJkNzI2MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTksNiArOSw3IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1dSQVBQRVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAloZWxwCiAJICBUaGUgQWxwaGEgaXMgYSA2NC1iaXQgZ2VuZXJhbC1wdXJwb3NlIHByb2Nlc3NvciBkZXNpZ25lZCBhbmQKIAkgIG1hcmtldGVkIGJ5IHRoZSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBvZiBibGVzc2VkIG1lbW9yeSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvYm9vdC9ib290cC5jIGIvYXJjaC9hbHBoYS9ib290L2Jvb3RwLmMKaW5kZXggM2FmMjFjNy4uM2M4ZDFiMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9ib290L2Jvb3RwLmMKKysrIGIvYXJjaC9hbHBoYS9ib290L2Jvb3RwLmMKQEAgLTksNyArOSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9ib290L2Jvb3Rwei5jIGIvYXJjaC9hbHBoYS9ib290L2Jvb3Rwei5jCmluZGV4IDEwMzZiNTEuLmFkZTNmMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvYm9vdC9ib290cHouYworKysgYi9hcmNoL2FscGhhL2Jvb3QvYm9vdHB6LmMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2Jvb3QvbWFpbi5jIGIvYXJjaC9hbHBoYS9ib290L21haW4uYwppbmRleCA4OWYzYmUwLi42NDRiN2RiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2Jvb3QvbWFpbi5jCisrKyBiL2FyY2gvYWxwaGEvYm9vdC9tYWluLmMKQEAgLTcsNyArNyw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGdlbmVyYXRlZC9hc20tb2Zmc2V0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggMTcyMGM4YS4uZjA5MTY4MiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC0xMyw3ICsxMyw4IEBACiAJCSJjYWxsX3BhbCAlMCAgIyBidWdjaGtcblx0IgkJCQlcCiAJCSIubG9uZyAlMVxuXHQuOGJ5dGUgJTIiCQkJCQlcCiAJCTogOiAiaSIoUEFMX2J1Z2NoayksICJpIihfX0xJTkVfXyksICJpIihfX0ZJTEVfXykpOwlcCi0JZm9yICggOyA7ICk7IH0gd2hpbGUgKDApCisJdW5yZWFjaGFibGUoKTsJCQkJCQkJXAorICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9jb3JlX3QyLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2NvcmVfdDIuaAppbmRleCA0NmJmZmY1Li40NzFjMDcyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2NvcmVfdDIuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2NvcmVfdDIuaApAQCAtNDM1LDcgKzQzNSw3IEBACiAJc2V0X2hhZShtc2IpOyBcCiB9CiAKLWV4dGVybiBzcGlubG9ja190IHQyX2hhZV9sb2NrOworZXh0ZXJuIHJhd19zcGlubG9ja190IHQyX2hhZV9sb2NrOwogCiAvKgogICogTk9URTogdGFrZSBUMl9ERU5TRV9NRU0gb2ZmIGluIGVhY2ggcmVhZFgvd3JpdGVYIHJvdXRpbmUsIHNpbmNlCkBAIC00NDgsMTIgKzQ0OCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkciAtIFQyX0RFTlNFX01FTTsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdCwgbXNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwogCiAJdDJfc2V0X2hhZTsKIAogCXJlc3VsdCA9ICoodmlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gX19rZXJuZWxfZXh0YmwocmVzdWx0LCBhZGRyICYgMyk7CiB9CiAKQEAgLTQ2MiwxMiArNDYyLDEyIEBACiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCBtc2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CiAKIAl0Ml9zZXRfaGFlOwogCiAJcmVzdWx0ID0gKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgwOCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gX19rZXJuZWxfZXh0d2wocmVzdWx0LCBhZGRyICYgMyk7CiB9CiAKQEAgLTQ4MCwxMiArNDgwLDEyIEBACiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCBtc2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CiAKIAl0Ml9zZXRfaGFlOwogCiAJcmVzdWx0ID0gKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgxOCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmVzdWx0ICYgMHhmZmZmZmZmZlVMOwogfQogCkBAIC00OTQsMTQgKzQ5NCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkciAtIFQyX0RFTlNFX01FTTsKIAl1bnNpZ25lZCBsb25nIHIwLCByMSwgd29yaywgbXNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwogCiAJdDJfc2V0X2hhZTsKIAogCXdvcmsgPSAoYWRkciA8PCA1KSArIFQyX1NQQVJTRV9NRU0gKyAweDE4OwogCXIwID0gKih2dWlwKSh3b3JrKTsKIAlyMSA9ICoodnVpcCkod29yayArICg0IDw8IDUpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwogCXJldHVybiByMSA8PCAzMiB8IHIwOwogfQogCkBAIC01MTAsMTMgKzUxMCwxMyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkciAtIFQyX0RFTlNFX01FTTsKIAl1bnNpZ25lZCBsb25nIG1zYiwgdzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKIAogCXQyX3NldF9oYWU7CiAKIAl3ID0gX19rZXJuZWxfaW5zYmwoYiwgYWRkciAmIDMpOwogCSoodnVpcCkgKChhZGRyIDw8IDUpICsgVDJfU1BBUlNFX01FTSArIDB4MDApID0gdzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwogfQogCiBfX0VYVEVSTl9JTkxJTkUgdm9pZCB0Ml93cml0ZXcodTE2IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCkBAIC01MjQsMTMgKzUyNCwxMyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkciAtIFQyX0RFTlNFX01FTTsKIAl1bnNpZ25lZCBsb25nIG1zYiwgdzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKIAogCXQyX3NldF9oYWU7CiAKIAl3ID0gX19rZXJuZWxfaW5zd2woYiwgYWRkciAmIDMpOwogCSoodnVpcCkgKChhZGRyIDw8IDUpICsgVDJfU1BBUlNFX01FTSArIDB4MDgpID0gdzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNTQyLDEyICs1NDIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHIgLSBUMl9ERU5TRV9NRU07CiAJdW5zaWduZWQgbG9uZyBtc2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CiAKIAl0Ml9zZXRfaGFlOwogCiAJKih2dWlwKSAoKGFkZHIgPDwgNSkgKyBUMl9TUEFSU0VfTUVNICsgMHgxOCkgPSBiOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CiB9CiAKIF9fRVhURVJOX0lOTElORSB2b2lkIHQyX3dyaXRlcSh1NjQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKQEAgLTU1NSwxNCArNTU1LDE0IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgbXNiLCB3b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwogCiAJdDJfc2V0X2hhZTsKIAogCXdvcmsgPSAoYWRkciA8PCA1KSArIFQyX1NQQVJTRV9NRU0gKyAweDE4OwogCSoodnVpcCl3b3JrID0gYjsKIAkqKHZ1aXApKHdvcmsgKyAoNCA8PCA1KSkgPSBiID4+IDMyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CiB9CiAKIF9fRVhURVJOX0lOTElORSB2b2lkIF9faW9tZW0gKnQyX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA1Yzc1YzFiLi45YmFhZThhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTgxLDcgKzgxLDYgQEAKICNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKICNkZWZpbmUgRUxGX0FSQ0gJRU1fQUxQSEEKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk4MTkyCiAKIC8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKaW5kZXggMjFiMTExNy4uNzAxNDVjYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBPX05PQVRJTUUJMDQwMDAwMDAKICNkZWZpbmUgT19DTE9FWEVDCTAxMDAwMDAwMCAvKiBzZXQgY2xvc2Vfb25fZXhlYyAqLwogLyoKLSAqIEJlZm9yZSBMaW51eCAyLjYuMzIgb25seSBPX0RTWU5DIHNlbWFudGljcyB3ZXJlIGltcGxlbWVudGVkLCBidXQgdXNpbmcKKyAqIEJlZm9yZSBMaW51eCAyLjYuMzMgb25seSBPX0RTWU5DIHNlbWFudGljcyB3ZXJlIGltcGxlbWVudGVkLCBidXQgdXNpbmcKICAqIHRoZSBPX1NZTkMgZmxhZy4gIFdlIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgbnVtZXJpY2FsIHZhbHVlCiAgKiBmb3IgT19EU1lOQyBzZW1hbnRpY3Mgbm93LCBidXQgdXNpbmcgdGhlIGNvcnJlY3Qgc3ltYm9saWMgbmFtZSBmb3IgaXQuCiAgKiBUaGlzIG5ldyB2YWx1ZSBpcyB1c2VkIHRvIHJlcXVlc3QgdHJ1ZSBQb3NpeCBPX1NZTkMgc2VtYW50aWNzLiAgSXQgaXMKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlZjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX19BU01fQUxQSEFfUEVSRl9FVkVOVF9ICisKKy8qIEFscGhhIG9ubHkgc3VwcG9ydHMgc29mdHdhcmUgZXZlbnRzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKSB7IH0KKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAwCisKKyNlbmRpZiAvKiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBlMzhmYjk1Li5kMGZhY2ExIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xMiwxOCArMTIsMTggQEAKICAqIFdlIG1ha2Ugbm8gZmFpcm5lc3MgYXNzdW1wdGlvbnMuIFRoZXkgaGF2ZSBhIGNvc3QuCiAgKi8KIAotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkoKHgpLT5sb2NrICE9IDApCi0jZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoeCkgXAorI2RlZmluZSBhcmNoX3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9zcGluX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KQkoKHgpLT5sb2NrICE9IDApCisjZGVmaW5lIGFyY2hfc3Bpbl91bmxvY2tfd2FpdCh4KSBcCiAJCWRvIHsgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKCh4KS0+bG9jaykKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICogbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqIGxvY2spCiB7CiAJbWIoKTsKIAlsb2NrLT5sb2NrID0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqIGxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICogbG9jaykKIHsKIAlsb25nIHRtcDsKIApAQCAtNDMsMjQgKzQzLDI0IEBACiAJOiAibSIobG9jay0+bG9jaykgOiAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlyZXR1cm4gIXRlc3RfYW5kX3NldF9iaXQoMCwgJmxvY2stPmxvY2spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfY2FuX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX2Nhbl9sb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJcmV0dXJuIChsb2NrLT5sb2NrICYgMSkgPT0gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfY2FuX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV9jYW5fbG9jayhhcmNoX3J3bG9ja190ICpsb2NrKQogewogCXJldHVybiBsb2NrLT5sb2NrID09IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJbG9uZyByZWd4OwogCkBAIC04MCw3ICs4MCw3IEBACiAJOiAibSIgKCpsb2NrKSA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpsb2NrKQogewogCWxvbmcgcmVneDsKIApAQCAtMTAwLDcgKzEwMCw3IEBACiAJOiAibSIgKCpsb2NrKSA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqIGxvY2spCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICogbG9jaykKIHsKIAlsb25nIHJlZ3g7CiAJaW50IHN1Y2Nlc3M7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAlyZXR1cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKiBsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKiBsb2NrKQogewogCWxvbmcgcmVneDsKIAlpbnQgc3VjY2VzczsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCXJldHVybiBzdWNjZXNzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICogbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfdW5sb2NrKGFyY2hfcndsb2NrX3QgKiBsb2NrKQogewogCWxvbmcgcmVneDsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTE2MCwxNyArMTYwLDE3IEBACiAJOiAibSIgKCpsb2NrKSA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKiBsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfdW5sb2NrKGFyY2hfcndsb2NrX3QgKiBsb2NrKQogewogCW1iKCk7CiAJbG9jay0+bG9jayA9IDA7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3dyaXRlX2xvY2sobG9jaykKIAotI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAKICNlbmRpZiAvKiBfQUxQSEFfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IDgxNDFlYjUuLjU0YzJhZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTcsMTQgKzcsMTQgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKK30gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQJCXsgMCB9CisjZGVmaW5lIF9fQVJDSF9SV19MT0NLX1VOTE9DS0VECQl7IDAgfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDdmMjM2NjUuLjgwNGU1MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMjQ3LDYgKzI0Nyw3IEBACiAjZGVmaW5lIF9fSUdOT1JFX3BhdXNlCiAjZGVmaW5lIF9fSUdOT1JFX3RpbWUKICNkZWZpbmUgX19JR05PUkVfdXRpbWUKKyNkZWZpbmUgX19JR05PUkVfdW1vdW50MgogCiAvKgogICogTGludXgtc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGJlZ2luIGF0IDMwMApAQCAtNDM0LDEwICs0MzUsMjQgQEAKICNkZWZpbmUgX19OUl90aW1lcmZkCQkJNDc3CiAjZGVmaW5lIF9fTlJfZXZlbnRmZAkJCTQ3OAogI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkJNDc5CisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkJNDgwCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJCTQ4MQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkJNDgyCisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCQk0ODMKKyNkZWZpbmUgX19OUl9zaWduYWxmZDQJCQk0ODQKKyNkZWZpbmUgX19OUl9ldmVudGZkMgkJCTQ4NQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJCTQ4NgorI2RlZmluZSBfX05SX2R1cDMJCQk0ODcKKyNkZWZpbmUgX19OUl9waXBlMgkJCTQ4OAorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCTQ4OQorI2RlZmluZSBfX05SX3ByZWFkdgkJCTQ5MAorI2RlZmluZSBfX05SX3B3cml0ZXYJCQk0OTEKKyNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkJNDkyCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCQk0OTMKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ4MAorI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ5NAogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3QyLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3QyLmMKaW5kZXggZDk5ODBkNC4uZTZkOTA1NiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90Mi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfdDIuYwpAQCAtNzQsNyArNzQsNyBAQAogIyBkZWZpbmUgREJHKGFyZ3MpCiAjZW5kaWYKIAotREVGSU5FX1NQSU5MT0NLKHQyX2hhZV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0sodDJfaGFlX2xvY2spOwogCiBzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IHQyX21jaGVja19hbnlfZXhwZWN0ZWQ7CiBzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IHQyX21jaGVja19sYXN0X3Rha2VuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwppbmRleCBjMGRlMDcyLi41ZjJjZjIzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwpAQCAtODEsNyArODEsNyBAQAogI2VuZGlmCiAKIAlpZiAoaXJxIDwgQUNUVUFMX05SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2lycV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2lycV0ubG9jaywgZmxhZ3MpOwogCQlhY3Rpb24gPSBpcnFfZGVzY1tpcnFdLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pIAogCQkJZ290byB1bmxvY2s7CkBAIC0xMDUsNyArMTA1LDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHVubG9jazoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaXJxXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpcnFdLmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKGlycSA9PSBBQ1RVQUxfTlJfSVJRUykgewogI2lmZGVmIENPTkZJR19TTVAKIAkJc2VxX3B1dHMocCwgIklQSTogIik7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMKaW5kZXggZDEyYWY0Ny4uZGJiZjA0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vY29uc29sZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KQEAgLTc5LDQyICs4MCw0MSBAQAogc3RhdGljIHNybV9lbnZfdAlzcm1fbnVtYmVyZWRfZW50cmllc1syNTZdOwogCiAKLXN0YXRpYyBpbnQKLXNybV9lbnZfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkJdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgc3JtX2Vudl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludAkJbmJ5dGVzOwogCXVuc2lnbmVkIGxvbmcJcmV0OwogCXNybV9lbnZfdAkqZW50cnk7CisJY2hhcgkJKnBhZ2U7CiAKLQlpZiAob2ZmICE9IDApIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KKwllbnRyeSA9IChzcm1fZW52X3QgKiltLT5wcml2YXRlOworCXBhZ2UgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfVVNFUik7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWVudHJ5CT0gKHNybV9lbnZfdCAqKSBkYXRhOwotCXJldAk9IGNhbGxiYWNrX2dldGVudihlbnRyeS0+aWQsIHBhZ2UsIGNvdW50KTsKKwlyZXQgPSBjYWxsYmFja19nZXRlbnYoZW50cnktPmlkLCBwYWdlLCBQQUdFX1NJWkUpOwogCiAJaWYgKChyZXQgPj4gNjEpID09IDApIHsKLQkJbmJ5dGVzID0gKGludCkgcmV0OwotCQkqZW9mID0gMTsKKwkJc2VxX3dyaXRlKG0sIHBhZ2UsIHJldCk7CisJCXJldCA9IDA7CiAJfSBlbHNlCi0JCW5ieXRlcyA9IC1FRkFVTFQ7Ci0KLQlyZXR1cm4gbmJ5dGVzOworCQlyZXQgPSAtRUZBVUxUOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYWdlKTsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1zcm1fZW52X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCQl2b2lkICpkYXRhKQorc3RhdGljIGludCBzcm1fZW52X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3JtX2Vudl9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgc3NpemVfdCBzcm1fZW52X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCByZXM7Ci0Jc3JtX2Vudl90CSplbnRyeTsKKwlzcm1fZW52X3QJKmVudHJ5ID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCWNoYXIJCSpidWYgPSAoY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX1VTRVIpOwogCXVuc2lnbmVkIGxvbmcJcmV0MSwgcmV0MjsKIAotCWVudHJ5ID0gKHNybV9lbnZfdCAqKSBkYXRhOwotCiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNDAsNiArMTQwLDE1IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3JtX2Vudl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHNybV9lbnZfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHNybV9lbnZfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyB2b2lkCiBzcm1fZW52X2NsZWFudXAodm9pZCkKIHsKQEAgLTI0NSwxNSArMjU0LDEwIEBACiAJICovCiAJZW50cnkgPSBzcm1fbmFtZWRfZW50cmllczsKIAl3aGlsZSAoZW50cnktPm5hbWUgJiYgZW50cnktPmlkKSB7Ci0JCWVudHJ5LT5wcm9jX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoZW50cnktPm5hbWUsCi0JCQkJMDY0NCwgbmFtZWRfZGlyKTsKKwkJZW50cnktPnByb2NfZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKGVudHJ5LT5uYW1lLCAwNjQ0LCBuYW1lZF9kaXIsCisJCQkJCQkgICAgICZzcm1fZW52X3Byb2NfZm9wcywgZW50cnkpOwogCQlpZiAoIWVudHJ5LT5wcm9jX2VudHJ5KQogCQkJZ290byBjbGVhbnVwOwotCi0JCWVudHJ5LT5wcm9jX2VudHJ5LT5kYXRhCQk9ICh2b2lkICopIGVudHJ5OwotCQllbnRyeS0+cHJvY19lbnRyeS0+cmVhZF9wcm9jCT0gc3JtX2Vudl9yZWFkOwotCQllbnRyeS0+cHJvY19lbnRyeS0+d3JpdGVfcHJvYwk9IHNybV9lbnZfd3JpdGU7Ci0KIAkJZW50cnkrKzsKIAl9CiAKQEAgLTI2NCwxNSArMjY4LDEyIEBACiAJCWVudHJ5ID0gJnNybV9udW1iZXJlZF9lbnRyaWVzW3Zhcl9udW1dOwogCQllbnRyeS0+bmFtZSA9IG51bWJlclt2YXJfbnVtXTsKIAotCQllbnRyeS0+cHJvY19lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGVudHJ5LT5uYW1lLAotCQkJCTA2NDQsIG51bWJlcmVkX2Rpcik7CisJCWVudHJ5LT5wcm9jX2VudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShlbnRyeS0+bmFtZSwgMDY0NCwgbnVtYmVyZWRfZGlyLAorCQkJCQkJICAgICAmc3JtX2Vudl9wcm9jX2ZvcHMsIGVudHJ5KTsKIAkJaWYgKCFlbnRyeS0+cHJvY19lbnRyeSkKIAkJCWdvdG8gY2xlYW51cDsKIAogCQllbnRyeS0+aWQJCQk9IHZhcl9udW07Ci0JCWVudHJ5LT5wcm9jX2VudHJ5LT5kYXRhCQk9ICh2b2lkICopIGVudHJ5OwotCQllbnRyeS0+cHJvY19lbnRyeS0+cmVhZF9wcm9jCT0gc3JtX2Vudl9yZWFkOwotCQllbnRyeS0+cHJvY19lbnRyeS0+d3JpdGVfcHJvYwk9IHNybV9lbnZfd3JpdGU7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXMgbG9hZGVkIHN1Y2Nlc3NmdWxseVxuIiwgTkFNRSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwppbmRleCBjZGE2YjhiLi4wOWFjYjc4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCkBAIC00OTUsOSArNDk1LDIzIEBACiAJLnF1YWQgc3lzX2Vwb2xsX3B3YWl0CiAJLnF1YWQgc3lzX3V0aW1lbnNhdAkJCS8qIDQ3NSAqLwogCS5xdWFkIHN5c19zaWduYWxmZAotCS5xdWFkIHN5c19uaV9zeXNjYWxsCisJLnF1YWQgc3lzX25pX3N5c2NhbGwJCQkvKiBzeXNfdGltZXJmZCAqLwogCS5xdWFkIHN5c19ldmVudGZkCiAJLnF1YWQgc3lzX3JlY3ZtbXNnCisJLnF1YWQgc3lzX2ZhbGxvY2F0ZQkJCQkvKiA0ODAgKi8KKwkucXVhZCBzeXNfdGltZXJmZF9jcmVhdGUKKwkucXVhZCBzeXNfdGltZXJmZF9zZXR0aW1lCisJLnF1YWQgc3lzX3RpbWVyZmRfZ2V0dGltZQorCS5xdWFkIHN5c19zaWduYWxmZDQKKwkucXVhZCBzeXNfZXZlbnRmZDIJCQkJLyogNDg1ICovCisJLnF1YWQgc3lzX2Vwb2xsX2NyZWF0ZTEKKwkucXVhZCBzeXNfZHVwMworCS5xdWFkIHN5c19waXBlMgorCS5xdWFkIHN5c19pbm90aWZ5X2luaXQxCisJLnF1YWQgc3lzX3ByZWFkdgkJCQkvKiA0OTAgKi8KKwkucXVhZCBzeXNfcHdyaXRldgorCS5xdWFkIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbworCS5xdWFkIHN5c19wZXJmX2V2ZW50X29wZW4KIAogCS5zaXplIHN5c19jYWxsX3RhYmxlLCAuIC0gc3lzX2NhbGxfdGFibGUKIAkudHlwZSBzeXNfY2FsbF90YWJsZSwgQG9iamVjdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggY2Y4YTk5Zi4uMjMzYTIyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC02MDMsNiArNjAzLDcgQEAKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IEFSQ0hfTVREX1hJUAogCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCisJc2VsZWN0IENQVV9GUkVRCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwpAQCAtMTM1OSwxMyArMTM2MCw5IEBACiAKIGNvbmZpZyBDUFVfRlJFUV9TQTExMDAKIAlib29sCi0JZGVwZW5kcyBvbiBDUFVfRlJFUSAmJiAoU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMCB8fCBTQTExMDBfTEFSVCB8fCBTQTExMDBfUExFQiB8fCBTQTExMDBfQkFER0U0IHx8IFNBMTEwMF9IQUNLS0lUKQotCWRlZmF1bHQgeQogCiBjb25maWcgQ1BVX0ZSRVFfU0ExMTEwCiAJYm9vbAotCWRlcGVuZHMgb24gQ1BVX0ZSRVEgJiYgKFNBMTEwMF9BU1NBQkVUIHx8IFNBMTEwMF9DRVJGIHx8IFNBMTEwMF9QVF9TWVNURU0zKQotCWRlZmF1bHQgeQogCiBjb25maWcgQ1BVX0ZSRVFfSU5URUdSQVRPUgogCXRyaXN0YXRlICJDUFVmcmVxIGRyaXZlciBmb3IgQVJNIEludGVncmF0b3IgQ1BVcyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IGZmNTRjMjMuLjVjYjkzMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtNzEsNiArNzEsMTQgQEAKIAkgIGluIHRoZSBrZXJuZWwuICBUaGlzIGlzIGhlbHBmdWwgaWYgeW91IGFyZSBkZWJ1Z2dpbmcgY29kZSB0aGF0CiAJICBleGVjdXRlcyBiZWZvcmUgdGhlIGNvbnNvbGUgaXMgaW5pdGlhbGl6ZWQuCiAKK2NvbmZpZyBFQVJMWV9QUklOVEsKKwlib29sICJFYXJseSBwcmludGsiCisJZGVwZW5kcyBvbiBERUJVR19MTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSBhbiBlYXJseSBjb25zb2xlIHVzaW5nIHRoZQorCSAga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgZnVuY3Rpb25zLiBBZGQgZWFybHlwcmludGsgdG8geW91cgorCSAga2VybmVsIHBhcmFtZXRlcnMgdG8gZW5hYmxlIHRoaXMgY29uc29sZS4KKwogY29uZmlnIERFQlVHX0lDRURDQwogCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBFbWJlZGRlZElDRSBEQ0MgY2hhbm5lbCIKIAlkZXBlbmRzIG9uIERFQlVHX0xMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IGZhMGNkYWIuLmU5ZGEwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0yNDIsMTUgKzI0Miw4IEBACiAKIGJvb3QgOj0gYXJjaC9hcm0vYm9vdAogCi0jCVVwZGF0ZSBtYWNoaW5lIGFyY2ggYW5kIHByb2Mgc3ltbGlua3MgaWYgc29tZXRoaW5nIHdoaWNoIGFmZmVjdHMKLSMJdGhlbSBjaGFuZ2VkLiAgV2UgdXNlIC5hcmNoIHRvIGluZGljYXRlIHdoZW4gdGhleSB3ZXJlIHVwZGF0ZWQKLSMJbGFzdCwgb3RoZXJ3aXNlIG1ha2UgdXNlcyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBtdGltZS4KLQotYXJjaHByZXBhcmU6IG1ha2V0b29scwotCi1QSE9OWSArPSBtYWtldG9vbHMgRk9SQ0UKLW1ha2V0b29sczogaW5jbHVkZS9saW51eC92ZXJzaW9uLmggRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2FybS90b29scyBpbmNsdWRlL2FzbS1hcm0vbWFjaC10eXBlcy5oCithcmNocHJlcGFyZToKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2FybS90b29scyBpbmNsdWRlL2dlbmVyYXRlZC9tYWNoLXR5cGVzLmgKIAogIyBDb252ZXJ0IGJ6SW1hZ2UgdG8gekltYWdlCiBiekltYWdlOiB6SW1hZ2UKQEAgLTI2MSw5ICsyNTQsNiBAQAogemluc3RhbGwgaW5zdGFsbDogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgTUFDSElORT0kKE1BQ0hJTkUpICRACiAKLUNMRUFOX0ZJTEVTICs9IGluY2x1ZGUvYXNtLWFybS9tYWNoLXR5cGVzLmggXAotCSAgICAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaCBpbmNsdWRlL2FzbS1hcm0vLmFyY2gKLQogIyBXZSB1c2UgTVJQUk9QRVJfRklMRVMgYW5kIENMRUFOX0ZJTEVTIG5vdwogYXJjaGNsZWFuOgogCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwppbmRleCA1YTM3NWU1Li5iYzkwMzY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCkBAIC0zMDgsMTUgKzMwOCwxMSBAQAogCQkJbWVtY3B5KHB0ciwgYnVmLT5zYWZlLCBzaXplKTsKIAogCQkJLyoKLQkJCSAqIERNQSBidWZmZXJzIG11c3QgaGF2ZSB0aGUgc2FtZSBjYWNoZSBwcm9wZXJ0aWVzCi0JCQkgKiBhcyBpZiB0aGV5IHdlcmUgcmVhbGx5IHVzZWQgZm9yIERNQSAtIHdoaWNoIG1lYW5zCi0JCQkgKiBkYXRhIG11c3QgYmUgd3JpdHRlbiBiYWNrIHRvIFJBTS4gIE5vdGUgdGhhdAotCQkJICogd2UgZG9uJ3QgdXNlIGRtYWNfZmx1c2hfcmFuZ2UoKSBoZXJlIGZvciB0aGUKLQkJCSAqIGJpZGlyZWN0aW9uYWwgY2FzZSBiZWNhdXNlIHdlIGtub3cgdGhlIGNhY2hlCi0JCQkgKiBsaW5lcyB3aWxsIGJlIGNvaGVyZW50IHdpdGggdGhlIGRhdGEgd3JpdHRlbi4KKwkJCSAqIFNpbmNlIHdlIG1heSBoYXZlIHdyaXR0ZW4gdG8gYSBwYWdlIGNhY2hlIHBhZ2UsCisJCQkgKiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHdpbGwgYmUgY29oZXJlbnQKKwkJCSAqIHdpdGggdXNlciBtYXBwaW5ncy4KIAkJCSAqLwotCQkJZG1hY19jbGVhbl9yYW5nZShwdHIsIHB0ciArIHNpemUpOwotCQkJb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYShwdHIpLCBfX3BhKHB0cikgKyBzaXplKTsKKwkJCV9fY3B1Y19mbHVzaF9rZXJuZWxfZGNhY2hlX2FyZWEocHRyLCBzaXplKTsKIAkJfQogCQlmcmVlX3NhZmVfYnVmZmVyKGRldi0+YXJjaGRhdGEuZG1hYm91bmNlLCBidWYpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZwppbmRleCAzMzgyNjc2Li4xYjM5NjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9odGNoZXJhbGRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNgotIyBTYXQgTm92IDE0IDEwOjU2OjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzgKKyMgU2F0IERlYyAgNSAxMjoxNjoyNCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CkBAIC0xOTgsNyArMTk4LDkgQEAKICMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKICMKICMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWD15CisjIENPTkZJR19PTUFQX01VWF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQogQ09ORklHX09NQVBfTUNCU1A9eQogIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9NUFVfVElNRVI9eQpAQCAtMjA3LDYgKzIwOSw3IEBACiAjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9MTF9ERUJVR19OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKICMgQ09ORklHX09NQVBfUE1fTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF9QTV9OT09QPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODUxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcKQEAgLTAsMCArMSwyNDMxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM4CisjIEZyaSBEZWMgIDQgMTY6MDI6MTcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfT1BST0ZJTEVfQVJNVjc9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CitDT05GSUdfVEFTS19YQUNDVD15CitDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE1CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKyMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKKyMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAorQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1BNX05PT1A9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAorQ09ORklHX01BQ0hfT01BUDNfVE9VQ0hCT09LPXkKKyMgQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTk9LSUFfUlg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfWk9PTTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX1pPT00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fVDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSUdFUDAwMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX0FSTV9USFVNQkVFPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NgorIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTI4CisjIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19MRURTPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiBkZWJ1ZyAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CitDT05GSUdfQVRBR1NfUFJPQz15CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19WRlA9eQorQ09ORklHX1ZGUHYzPXkKK0NPTkZJR19ORU9OPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19IQVZFX0FPVVQ9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0RFQlVHPXkKKyMgQ09ORklHX1BNX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0NBTl9QTV9UUkFDRT15CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorIyBDT05GSUdfUE1fVEVTVF9TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz1tCitDT05GSUdfSU5FVF9UQ1BfRElBRz1tCitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorQ09ORklHX1RDUF9DT05HX0JJQz1tCitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KK0NPTkZJR19UQ1BfQ09OR19IVENQPW0KK0NPTkZJR19UQ1BfQ09OR19IU1RDUD1tCitDT05GSUdfVENQX0NPTkdfSFlCTEE9bQorQ09ORklHX1RDUF9DT05HX1ZFR0FTPW0KK0NPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRT1tCitDT05GSUdfVENQX0NPTkdfTFA9bQorQ09ORklHX1RDUF9DT05HX1ZFTk89bQorQ09ORklHX1RDUF9DT05HX1lFQUg9bQorQ09ORklHX1RDUF9DT05HX0lMTElOT0lTPW0KKyMgQ09ORklHX0RFRkFVTFRfQklDIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NVQklDPXkKKyMgQ09ORklHX0RFRkFVTFRfSFRDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1ZFR0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfV0VTVFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JUFY2X01JUDY9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT049bQorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQorQ09ORklHX0lQVjZfTVJPVVRFPXkKKyMgQ09ORklHX0lQVjZfUElNU01fVjIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fRENDUD1tCitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9WUz1tCitDT05GSUdfSVBfVlNfSVBWNj15CitDT05GSUdfSVBfVlNfREVCVUc9eQorQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCisKKyMKKyMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAorIworQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CitDT05GSUdfSVBfVlNfUFJPVE9fVURQPXkKK0NPTkZJR19JUF9WU19QUk9UT19BSF9FU1A9eQorQ09ORklHX0lQX1ZTX1BST1RPX0VTUD15CitDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQorCisjCisjIElQVlMgc2NoZWR1bGVyCisjCitDT05GSUdfSVBfVlNfUlI9bQorQ09ORklHX0lQX1ZTX1dSUj1tCitDT05GSUdfSVBfVlNfTEM9bQorQ09ORklHX0lQX1ZTX1dMQz1tCitDT05GSUdfSVBfVlNfTEJMQz1tCitDT05GSUdfSVBfVlNfTEJMQ1I9bQorQ09ORklHX0lQX1ZTX0RIPW0KK0NPTkZJR19JUF9WU19TSD1tCitDT05GSUdfSVBfVlNfU0VEPW0KK0NPTkZJR19JUF9WU19OUT1tCisKKyMKKyMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKKyMKK0NPTkZJR19JUF9WU19GVFA9bQorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURT1tCitDT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCisKKyMKKyMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzPXkKKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAorQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9eQorCisjCisjIERDQ1AgS2VybmVsIEhhY2tpbmcKKyMKKyMgQ09ORklHX0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorQ09ORklHX1RJUEM9bQorIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09bQorQ09ORklHX0FUTV9DTElQPW0KKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0dBUlA9bQorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KK0NPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XQU5fUk9VVEVSPW0KKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIRUQ9eQorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9NVUxUSVE9bQorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCitDT05GSUdfTkVUX1NDSF9EUlI9bQorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CitDT05GSUdfTkVUX0NMU19CQVNJQz1tCitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorQ09ORklHX0NMU19VMzJfUEVSRj15CitDT05GSUdfQ0xTX1UzMl9NQVJLPXkKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorQ09ORklHX05FVF9DTFNfRkxPVz1tCisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX0lORD15CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKK0NPTkZJR19CVF9SRkNPTU09eQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9eQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD15CisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJQlRVU0I9eQorQ09ORklHX0JUX0hDSUJUU0RJTz15CitDT05GSUdfQlRfSENJVUFSVD15CitDT05GSUdfQlRfSENJVUFSVF9IND15CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0xMPXkKK0NPTkZJR19CVF9IQ0lCQ00yMDNYPXkKK0NPTkZJR19CVF9IQ0lCUEExMFg9eQorQ09ORklHX0JUX0hDSUJGVVNCPXkKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CitDT05GSUdfQUZfUlhSUEM9bQorIyBDT05GSUdfQUZfUlhSUENfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUlhLQUQgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CitDT05GSUdfV0lSRUxFU1M9eQorQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CitDT05GSUdfTElCODAyMTE9eQorIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExPW0KK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUwgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAorQ09ORklHX1dJTUFYPW0KK0NPTkZJR19XSU1BWF9ERUJVR19MRVZFTD04CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX09NQVAyPXkKK0NPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIPXkKKyMgQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0hfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QTEFURk9STT15CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PXkKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfQ0hSX0RFVl9TQ0g9bQorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ2X1BRPW0KKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CitDT05GSUdfRE1fREVMQVk9bQorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfRVFVQUxJWkVSPW0KK0NPTkZJR19UVU49bQorQ09ORklHX1ZFVEg9bQorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisKKyMKKyMgV2lNQVggV2lyZWxlc3MgQnJvYWRiYW5kIGRldmljZXMKKyMKKyMgQ09ORklHX1dJTUFYX0kyNDAwTV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVhfSTI0MDBNX1NESU8gaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPQVRNIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPTDJUUD1tCisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPXkKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1RXTDQwMzAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9TUElERVY9eQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorQ09ORklHX0dQSU9fVFdMNDAzMD15CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKK0NPTkZJR19QT1dFUl9TVVBQTFk9eQorIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0CitDT05GSUdfQkFUVEVSWV9CUTI3eDAwPXkKKyMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIworIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CitDT05GSUdfVEhFUk1BTF9IV01PTj15CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9XQVRDSERPRz15CisjIENPTkZJR19UV0w0MDMwX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CisjIENPTkZJR19UV0w0MDMwX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09ERUMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfUkFXTUlEST15CitDT05GSUdfU05EX0pBQ0s9eQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9bQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPXkKK0NPTkZJR19TTkRfVVNCX0NBSUFRPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVNQRU5EPXkKK0NPTkZJR19VU0JfT1RHPXkKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT1hVMjEwSFBfSENEPXkKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX1NPQz15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfT1RHPXkKK0NPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CisjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworQ09ORklHX1VTQl9BQ009bQorQ09ORklHX1VTQl9QUklOVEVSPW0KK0NPTkZJR19VU0JfV0RNPW0KK0NPTkZJR19VU0JfVE1DPW0KKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworQ09ORklHX1VTQl9TRVJJQUw9bQorQ09ORklHX1VTQl9FWlVTQj15CitDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKK0NPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFPW0KK0NPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9bQorQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KK0NPTkZJR19VU0JfU0VSSUFMX0NIMzQxPW0KK0NPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCitDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCitDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCitDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCitDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUPW0KK0NPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQorQ09ORklHX1VTQl9TRVJJQUxfSVI9bQorQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQorQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEk9bQorQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lQVz1tCitDT05GSUdfVVNCX1NFUklBTF9JVVU9bQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUj15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4PXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYPXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQT15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEI9eQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOT15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WD15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5Vz15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVc9eQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJPXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXPXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXTEM9eQorQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCitDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQorQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQorQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMD1tCitDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwPW0KK0NPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBPW0KK0NPTkZJR19VU0JfU0VSSUFMX05BVk1BTj1tCitDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OD1tCisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDU9bQorQ09ORklHX1VTQl9TRVJJQUxfSFA0WD1tCitDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEk9bQorQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1M9bQorIyBDT05GSUdfVVNCX1NFUklBTF9TWU1CT0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfVEk9bQorQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KK0NPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCitDT05GSUdfVVNCX1NFUklBTF9PUFRJT049bQorQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCitDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KK0NPTkZJR19VU0JfU0VSSUFMX0RFQlVHPW0KKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0VNSTYyPW0KK0NPTkZJR19VU0JfRU1JMjY9bQorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0lTVVNCVkdBPW0KK0NPTkZJR19VU0JfU0lTVVNCVkdBX0NPTj15CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVE0gaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTPXkKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfWkVST19ITlBURVNUPXkKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KK0NPTkZJR19VU0JfTUlESV9HQURHRVQ9bQorQ09ORklHX1VTQl9HX1BSSU5URVI9bQorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKK0NPTkZJR19VU0JfR1BJT19WQlVTPXkKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9VU0I9eQorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfT01BUF9IUz15CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorQ09ORklHX1VJTz1tCitDT05GSUdfVUlPX1BEUlY9bQorQ09ORklHX1VJT19QRFJWX0dFTklSUT1tCisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworQ09ORklHX1NUQUdJTkc9eQorIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfVzM1VU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19PVFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKKworIworIyBBbmRyb2lkCisjCisKKyMKKyMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KKyMKKworIworIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgorIworIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19EU1QgaXMgbm90IHNldAorIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJTkU2X1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0gyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUNjY1NiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9VREwgaXMgbm90IHNldAorCisjCisjIFJBUiBSZWdpc3RlciBEcml2ZXIKKyMKKyMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9GUz1tCitDT05GSUdfRVhUNF9GU19YQVRUUj15CisjIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0pCRDI9bQorIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT1tCitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorIyBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9eQorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz15CisjIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPPXkKK0NPTkZJR19VQklGU19GUz15CitDT05GSUdfVUJJRlNfRlNfWEFUVFI9eQorQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKK0NPTkZJR19VQklGU19GU19MWk89eQorQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQorIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjJfQUNMPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1YzX0FDTD15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCitDT05GSUdfQ0lGU19TVEFUUz15CitDT05GSUdfQ0lGU19TVEFUUzI9eQorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RGU19VUENBTEwgaXMgbm90IHNldAorQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMPXkKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19CU0RfRElTS0xBQkVMPXkKK0NPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CitDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19USU1FUl9TVEFUUz15CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorIyBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0FTWU5DX1BRPW0KK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj1tCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fRklQUz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fQ1RTPW0KK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPXkKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKK0NPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCitDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PXkKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCmluZGV4IGE0NjRjYTMuLjIzMTkxMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKQEAgLTEsMjYgKzEsMjkgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzcKLSMgVHVlIEp1biAgOSAxMjozNjoyMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzIKKyMgU3VuIERlYyAgNiAyMzozNzo0NSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1Q9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDExICs0MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtNTIsOCArNTYsNyBAQAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eSBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKQEAgLTcwLDcgKzczLDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtODMsNiArODUsMTAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTkwLDEzICs5NiwxNiBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEwLDcgKzExOSw3IEBACiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzEsNiArMTQwLDcgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CkBAIC0xNDIsOCArMTUyLDEwIEBACiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKQEAgLTE2NiwxMCArMTc4LDEzIEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwpAQCAtMTkwLDkgKzIwNSwxMiBAQAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKIENPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1BNX05PTkUgaXMgbm90IHNldAorQ09ORklHX09NQVBfUE1fTk9PUD15CiAKICMKICMgT01BUCBCb2FyZCBUeXBlCkBAIC0yMDcsNyArMjI1LDcgQEAKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKIENPTkZJR19DUFVfQUJSVF9FVjc9eQotQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQogQ09ORklHX0NQVV9DQUNIRV9WNz15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQogQ09ORklHX0NQVV9DT1BZX1Y2PXkKQEAgLTIyMiw5ICsyNDAsMTAgQEAKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRT15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAogQ09ORklHX0hBU19UTFNfUkVHPXkKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAogIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldApAQCAtMjQ1LDE4ICsyNjQsMjAgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19TTVA9eQogQ09ORklHX0hBVkVfQVJNX1NDVT15Ci1DT05GSUdfSEFWRV9BUk1fVFdEPXkKIENPTkZJR19WTVNQTElUXzNHPXkKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX05SX0NQVVM9MgogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAotQ09ORklHX0xPQ0FMX1RJTUVSUz15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0FMX1RJTUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEyOAorIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQUVBQkk9eQotIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX09BQklfQ09NUEFUPXkKICMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtMjcxLDEwICsyOTIsMTMgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTI5OCw5ICszMjIsMTEgQEAKICMKICMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCiAjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogQ09ORklHX1ZGUD15CiBDT05GSUdfVkZQdjM9eQotIyBDT05GSUdfTkVPTiBpcyBub3Qgc2V0CitDT05GSUdfTkVPTj15CiAKICMKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCkBAIC0zMjUsNiArMzUxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zNDIsNiArMzY5LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CiAjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtMzU1LDYgKzM4Myw3IEBACiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtNDI3LDYgKzQ1NiwxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTQ0NywxMSArNDgxLDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDcyLDIxICs1MDksOCBAQAogIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC01MTEsMTQgKzUzNSwxNyBAQAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM1LDkgKzU2MiwxMiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTYwMSw3ICs2MzEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTY3MywyMyArNzAyLDI0IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTcwOCwzMSArNzM4LDIyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTc1NCw3ICs3NzUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTc5NiwxMSArODE2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcKaW5kZXggZWVmOTM2Mi4uNGIwMGE0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTJfZGVmY29uZmlnCkBAIC02MTAsNyArNjEwLDggQEAKICMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKaW5kZXggZjBlN2QwZi4uMGQ3ZTM3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCkBAIC02MjksNyArNjI5LDggQEAKICMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzYjExZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKQEAgLTAsMCArMSwyMDMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzIKKyMgVHVlIERlYyAgOCAyMDoyNzowNSAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTMKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworCisjCisjIEludGVsL01hcnZlbGwgRGV2IFBsYXRmb3JtcyAoc29ydGVkIGJ5IGhhcmR3YXJlIHJlbGVhc2UgdGltZSkKKyMKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorCisjCisjIFRoaXJkIFBhcnR5IERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSB2ZW5kb3IgbmFtZSkKKyMKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0FSQ09NX1pFVVM9eQorIyBDT05GSUdfTUFDSF9CQUxMT09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NTQjcyNiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRVhFREEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TVEFSR0FURTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9YQ0VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNPTV9QQ01DSUE9eQorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CisKKyMKKyMgRW5kLXVzZXIgUHJvZHVjdHMgKHNvcnRlZCBieSB2ZW5kb3IgbmFtZSkKKyMKKyMgQ09ORklHX01BQ0hfSDQ3MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hJTUFMQVlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19QWEEyN3g9eQorQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVM9eQorQ09ORklHX1BYQV9IQVZFX0lTQV9JUlFTPXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSVNBPXkKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9bQorQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfSTgyMzY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDSUMgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9TT0NfQ09NTU9OPW0KK0NPTkZJR19QQ01DSUFfUFhBMlhYPW0KKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX1BST0JFPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PTMxOjAyIHJvb3Rmc3R5cGU9amZmczIgcm8gY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfQVBNX0VNVUxBVElPTj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KKyMgQ09ORklHX0JUX1NDTyBpcyBub3Qgc2V0CitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KKyMgQ09ORklHX0JUX0JORVBfTUNfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hJRFAgaXMgbm90IHNldAorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lVQVJUPW0KK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0VYVF9DT1JFPXkKK0NPTkZJR19XRVhUX1BST0M9eQorQ09ORklHX1dFWFRfU1BZPXkKK0NPTkZJR19XRVhUX1BSSVY9eQorQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfV0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKK0NPTkZJR19MSUI4MDIxMT1tCisjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTE9bQorQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorQ09ORklHX01URF9SQU09eQorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUFhBMlhYPXkKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCitDT05GSUdfRUVQUk9NX0FUMjQ9bQorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPW0KKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPW0KKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9QQ01DSUE9bQorIyBDT05GSUdfUEFUQV9RREkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EX1ZMQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKK0NPTkZJR19ETTkwMDBfREVCVUdMRVZFTD00CisjIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CitDT05GSUdfSEVSTUVTPW0KK0NPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CitDT05GSUdfUENNQ0lBX0hFUk1FUz1tCisjIENPTkZJR19QQ01DSUFfU1BFQ1RSVU0gaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUlQyWDAwPW0KKyMgQ09ORklHX1JUMjUwMFVTQiBpcyBub3Qgc2V0CitDT05GSUdfUlQ3M1VTQj1tCisjIENPTkZJR19SVDI4MDBVU0IgaXMgbm90IHNldAorQ09ORklHX1JUMlgwMF9MSUJfVVNCPW0KK0NPTkZJR19SVDJYMDBfTElCPW0KK0NPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFPXkKK0NPTkZJR19SVDJYMDBfTElCX0NSWVBUTz15CitDT05GSUdfUlQyWDAwX0xJQl9MRURTPXkKKyMgQ09ORklHX1JUMlgwMF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENNQ0lBPXkKKyMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1BDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9OTUNMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9YSVJDMlBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVT1tCisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPPW0KKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSD1tCitDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPPW0KKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9IVENQRU49bQorQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UPW0KK0NPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUPW0KK0NPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTj1tCisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMz1tCisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKyMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NworQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NworIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9QWEEgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAorQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1BDQTk1M1g9eQorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PW0KKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQTExMDBfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIElTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVhDT01XRCBpcyBub3Qgc2V0CisjIENPTkZJR19XRFQgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT1tCisjIENPTkZJR19GQl9QWEFfT1ZFUkxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlM9eQorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldAorIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9bQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPW0KKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9bQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1BYQTJYWF9QQ009bQorQ09ORklHX1NORF9QWEEyWFhfTElCPW0KK0NPTkZJR19TTkRfUFhBMlhYX0xJQl9BQzk3PXkKK0NPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX1BYQTJYWF9TT0M9bQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9bQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz1tCisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9bQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQUNNPW0KKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TWU1CT0wgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD1tCisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYPXkKK0NPTkZJR19VU0JfUFhBMjdYPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRGUz1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1BSSU5URVI9bQorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1BYQT15CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPW0KKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89bQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj1tCisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPW0KKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0lTTDEyMDg9bQorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUFhBPW0KKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19IQVNIMj1tCitDT05GSUdfQ1JZUFRPX1JORzI9bQorQ09ORklHX0NSWVBUT19QQ09NUD1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9bQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj1tCitDT05GSUdfQ1JDX1QxMERJRj1tCitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA3M2VjZWI4Li43MzBhZWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0yMTEsNyArMjExLDcgQEAKIAogCXZvaWQgKCpjb2hlcmVudF9rZXJuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAl2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0Jdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpKHZvaWQgKik7CisJdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpKHZvaWQgKiwgc2l6ZV90KTsKIAogCXZvaWQgKCpkbWFfaW52X3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiAJdm9pZCAoKmRtYV9jbGVhbl9yYW5nZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwpAQCAtMjM2LDcgKzIzNiw3IEBACiAjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlCQljcHVfY2FjaGUuZmx1c2hfdXNlcl9yYW5nZQogI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZQljcHVfY2FjaGUuY29oZXJlbnRfa2Vybl9yYW5nZQogI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZQljcHVfY2FjaGUuY29oZXJlbnRfdXNlcl9yYW5nZQotI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UJY3B1X2NhY2hlLmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhCWNwdV9jYWNoZS5mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAKIC8qCiAgKiBUaGVzZSBhcmUgcHJpdmF0ZSB0byB0aGUgZG1hLW1hcHBpbmcgQVBJLiAgRG8gbm90IHVzZSBkaXJlY3RseS4KQEAgLTI1NSwxNCArMjU1LDE0IEBACiAjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQogI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZQlfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF9rZXJuX3JhbmdlKQogI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZQlfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF91c2VyX3JhbmdlKQotI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UJX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCiAKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKHZvaWQgKik7CitleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEodm9pZCAqLCBzaXplX3QpOwogCiAvKgogICogVGhlc2UgYXJlIHByaXZhdGUgdG8gdGhlIGRtYS1tYXBwaW5nIEFQSS4gIERvIG5vdCB1c2UgZGlyZWN0bHkuCkBAIC00NDgsNyArNDQ4LDcgQEAKIHsKIAkvKiBoaWdobWVtIHBhZ2VzIGFyZSBhbHdheXMgZmx1c2hlZCB1cG9uIGt1bm1hcCBhbHJlYWR5ICovCiAJaWYgKChjYWNoZV9pc192aXZ0KCkgfHwgY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSAmJiAhUGFnZUhpZ2hNZW0ocGFnZSkpCi0JCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX2FkZHJlc3MocGFnZSkpOworCQlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEocGFnZV9hZGRyZXNzKHBhZ2UpLCBQQUdFX1NJWkUpOwogfQogCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykgXApAQCAtNDY1LDEzICs0NjUsNiBAQAogICovCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwYWdlKQlkbyB7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pb3JlbWFwX3JlZ2lvbih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgX19pb21lbSAqdmlydCwKLQl1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBzaXplKQotewotCWNvbnN0IHZvaWQgKnN0YXJ0ID0gKHZvaWQgX19mb3JjZSAqKXZpcnQgKyBvZmZzZXQ7Ci0JZG1hY19pbnZfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7Ci19Ci0KIC8qCiAgKiBmbHVzaF9jYWNoZV92bWFwKCkgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIG1hcHBpbmdzIChlZywgdmlhIHZtYXAsCiAgKiB2bWFsbG9jLCBpb3JlbWFwIGV0YykgaW4ga2VybmVsIHNwYWNlIGZvciBwYWdlcy4gIE9uIG5vbi1WSVBUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDZhYWMzZjUuLmEzOTliYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMDEsNyArMTAxLDYgQEAKIGludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MpOwogI2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyBkdW1wX3Rhc2tfcmVncwogCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKIAogLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDgxNzhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC10eXBlcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvbWFjaC10eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9pcnEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJxLmgKaW5kZXggYWNhYzUzMC4uODkyMGIyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJxLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9pcnEuaApAQCAtMjYsOSArMjYsOSBAQAogICovCiAjZGVmaW5lIGRvX2JhZF9JUlEoaXJxLGRlc2MpCQkJCVwKIGRvIHsJCQkJCQkJXAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CQkJCVwKKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsJCQlcCiAJaGFuZGxlX2JhZF9pcnEoaXJxLCBkZXNjKTsJCQlcCi0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwkJCVwKKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwkJCVwKIH0gd2hpbGUoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBjMTM2ODFhLi5jOTFjNjRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE3LDEzICsxNywxMyBAQAogICogTG9ja2VkIHZhbHVlOiAxCiAgKi8KIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+bG9jayAhPSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQoeCkJCSgoeCktPmxvY2sgIT0gMCkKKyNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KGxvY2spIFwKKwlkbyB7IHdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKSBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9zcGluX2xvY2sobG9jaykKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTQzLDcgKzQzLDcgQEAKIAlzbXBfbWIoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC02Myw3ICs2Myw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJc21wX21iKCk7CiAKQEAgLTg2LDcgKzg2LDcgQEAKICAqIGp1c3Qgd3JpdGUgemVybyBzaW5jZSB0aGUgbG9jayBpcyBleGNsdXNpdmVseSBoZWxkLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlzbXBfbWIoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMjYsNyArMTI2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlzbXBfbWIoKTsKIApAQCAtMTQyLDcgKzE0Miw3IEBACiB9CiAKIC8qIHdyaXRlX2Nhbl9sb2NrIC0gd291bGQgd3JpdGVfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrID09IDApCisjZGVmaW5lIGFyY2hfd3JpdGVfY2FuX2xvY2soeCkJCSgoeCktPmxvY2sgPT0gMCkKIAogLyoKICAqIFJlYWQgbG9ja3MgYXJlIGEgYml0IG1vcmUgaGFpcnk6CkBAIC0xNTYsNyArMTU2LDcgQEAKICAqIGN1cnJlbnRseSBhY3RpdmUuICBIb3dldmVyLCB3ZSBrbm93IHdlIHdvbid0IGhhdmUgYW55IHdyaXRlCiAgKiBsb2Nrcy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGxvbmcgdG1wLCB0bXAyOwogCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlzbXBfbWIoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMjsKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAJOiAiY2MiKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMiA9IDE7CiAKQEAgLTIxNSwxMyArMjE1LDEzIEBACiB9CiAKIC8qIHJlYWRfY2FuX2xvY2sgLSB3b3VsZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPyAqLwotI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrIDwgMHg4MDAwMDAwMCkKKyNkZWZpbmUgYXJjaF9yZWFkX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrIDwgMHg4MDAwMDAwMCkKIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfd3JpdGVfbG9jayhsb2NrKQogCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IDQzZTgzZjYuLmQxNGQxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNywxNCArNywxNCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Ci19IHJhd19zcGlubG9ja190OworfSBhcmNoX3NwaW5sb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CisjZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwotfSByYXdfcndsb2NrX3Q7Cit9IGFyY2hfcndsb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgMCB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IGU3Y2NmN2UuLmRkMDBmNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTU0LDUgKzU0LDYgQEAKIAogaGVhZC15CQkJOj0gaGVhZCQoTU1VRVhUKS5vCiBvYmotJChDT05GSUdfREVCVUdfTEwpCSs9IGRlYnVnLm8KK29iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiAKIGV4dHJhLXkgOj0gJChoZWFkLXkpIGluaXRfdGFzay5vIHZtbGludXgubGRzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCmluZGV4IDBlNjI3NzAuLjgyMTRiZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCkBAIC00OCwyNyArNDgsNyBAQAogZXh0ZXJuIHZvaWQgX19hZWFiaV91bGNtcCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgZnB1bmRlZmluc3RyKHZvaWQpOwotZXh0ZXJuIHZvaWQgZnBfZW50ZXIodm9pZCk7CiAKLS8qCi0gKiBUaGlzIGhhcyBhIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9uOyBpdCBkb2Vzbid0Ci0gKiBtb2RpZnkgYW55IG9mIHRoZSB1c3VhbCByZWdpc3RlcnMsIGV4Y2VwdCBmb3IgTFIuCi0gKi8KLSNkZWZpbmUgRVhQT1JUX0NSQ19BTElBUyhzeW0pIF9fQ1JDX1NZTUJPTChzeW0sICIiKQotCi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfQUxJQVMoc3ltLG9yaWcpCQlcCi0gRVhQT1JUX0NSQ19BTElBUyhzeW0pCQkJCVwKLSBzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19rc3ltdGFiXyMjc3ltCVwKLSAgX191c2VkIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fa3N5bXRhYiIpKSkgPQlcCi0gICAgeyAodW5zaWduZWQgbG9uZykmb3JpZywgI3N5bSB9OwotCi0vKgotICogZmxvYXRpbmcgcG9pbnQgbWF0aCBlbXVsYXRvciBzdXBwb3J0LgotICogVGhlc2Ugc3ltYm9scyB3aWxsIG5ldmVyIGNoYW5nZSB0aGVpciBjYWxsaW5nIGNvbnZlbnRpb24uLi4KLSAqLwotRVhQT1JUX1NZTUJPTF9BTElBUyhrZXJuX2ZwX2VudGVyLGZwX2VudGVyKTsKLUVYUE9SVF9TWU1CT0xfQUxJQVMoZnBfcHJpbnRrLHByaW50ayk7Ci1FWFBPUlRfU1lNQk9MX0FMSUFTKGZwX3NlbmRfc2lnLHNlbmRfc2lnKTsKIAogRVhQT1JUX1NZTUJPTChfX2JhY2t0cmFjZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gvYXJtL2tlcm5lbC9lYXJseV9wcmludGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWFhMmIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL2Vhcmx5X3ByaW50ay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworZXh0ZXJuIHZvaWQgcHJpbnRjaChpbnQpOworCitzdGF0aWMgdm9pZCBlYXJseV93cml0ZShjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQoreworCXdoaWxlIChuLS0gPiAwKSB7CisJCWlmICgqcyA9PSAnXG4nKQorCQkJcHJpbnRjaCgnXHInKTsKKwkJcHJpbnRjaCgqcyk7CisJCXMrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgbikKK3sKKwllYXJseV93cml0ZShzLCBuKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X2NvbnNvbGUgPSB7CisJLm5hbWUgPQkJImVhcmx5Y29uIiwKKwkud3JpdGUgPQllYXJseV9jb25zb2xlX3dyaXRlLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiB8IENPTl9CT09ULAorCS5pbmRleCA9CS0xLAorfTsKKworYXNtbGlua2FnZSB2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwljaGFyIGJ1Zls1MTJdOworCWludCBuOworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwluID0gdnNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKKwllYXJseV93cml0ZShidWYsIG4pOworCXZhX2VuZChhcCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpidWYpCit7CisJcmVnaXN0ZXJfY29uc29sZSgmZWFybHlfY29uc29sZSk7CisJcmV0dXJuIDA7Cit9CisKK2Vhcmx5X3BhcmFtKCJlYXJseXByaW50ayIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggYzlhODYxOWYuLmI3Y2I0NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl9CiAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHVubG9jazsKQEAgLTg0LDcgKzg0LDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHVubG9jazoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CiAjaWZkZWYgQ09ORklHX0ZJUQogCQlzaG93X2ZpcV9saXN0KHAsIHYpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJfQogCiAJZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1QgfCBJUlFfTk9QUk9CRSB8IElSUV9OT0FVVE9FTjsKIAlpZiAoaWZsYWdzICYgSVJRRl9WQUxJRCkKIAkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTk9SRVFVRVNUOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PUFJPQkU7CiAJaWYgKCEoaWZsYWdzICYgSVJRRl9OT0FVVE9FTikpCiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PQVVUT0VOOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQpAQCAtMTY2LDkgKzE2Niw5IEBACiB7CiAJcHJfZGVidWcoIklSUSV1OiBtb3ZpbmcgZnJvbSBjcHUldSB0byBjcHUldVxuIiwgaXJxLCBkZXNjLT5ub2RlLCBjcHUpOwogCi0Jc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IGE3M2EzNGQuLmVhMDJhN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiAKIAkvKiBNYWtlIHN1cmUgb3VyIGxvY2FsIGludGVycnVwdCBjb250cm9sbGVyIGhhcyB0aGlzIGVuYWJsZWQgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaXJxX3RvX2Rlc2MoY2xrLT5pcnEpLT5zdGF0dXMgfD0gSVJRX05PUFJPQkU7CiAJZ2V0X2lycV9jaGlwKGNsay0+aXJxKS0+dW5tYXNrKGNsay0+aXJxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNzExNTFiZC4uNDk1N2UxM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02NSwxMSArNjUsMTEgQEAKIAlfX2luaXRfZW5kID0gLjsKICNlbmRpZgogCi0JL0RJU0NBUkQvIDogewkJCS8qIEV4aXQgY29kZSBhbmQgZGF0YQkJKi8KLQkJRVhJVF9URVhUCi0JCUVYSVRfREFUQQotCQkqKC5leGl0Y2FsbC5leGl0KQotCQkqKC5kaXNjYXJkKQorCS8qCisJICogdW53aW5kIGV4aXQgc2VjdGlvbnMgbXVzdCBiZSBkaXNjYXJkZWQgYmVmb3JlIHRoZSByZXN0IG9mIHRoZQorCSAqIHVud2luZCBzZWN0aW9ucyBnZXQgaW5jbHVkZWQuCisJICovCisJL0RJU0NBUkQvIDogewogCQkqKC5BUk0uZXhpZHguZXhpdC50ZXh0KQogCQkqKC5BUk0uZXh0YWIuZXhpdC50ZXh0KQogI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTIzOCw2ICsyMzgsOSBAQAogCiAJU1RBQlNfREVCVUcKIAkuY29tbWVudCAwIDogeyAqKC5jb21tZW50KSB9CisKKwkvKiBEZWZhdWx0IGRpc2NhcmRzICovCisJRElTQ0FSRFMKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXRtZWwtbWNpLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0bWVsLW1jaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0bWVsLW1jaS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX19NQUNIX0FUTUVMX01DSV9ICisjZGVmaW5lIF9fTUFDSF9BVE1FTF9NQ0lfSAorCisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgorCisvKioKKyAqIHN0cnVjdCBtY2lfZG1hX2RhdGEgLSBETUEgZGF0YSBmb3IgTUNJIGludGVyZmFjZQorICovCitzdHJ1Y3QgbWNpX2RtYV9kYXRhIHsKKwlzdHJ1Y3QgYXRfZG1hX3NsYXZlCXNkYXRhOworfTsKKworLyogYWNjZXNzb3IgbWFjcm9zICovCisjZGVmaW5lCXNsYXZlX2RhdGFfcHRyKHMpCSgmKHMpLT5zZGF0YSkKKyNkZWZpbmUgZmluZF9zbGF2ZV9kZXYocykJKChzKS0+c2RhdGEuZG1hX2RldikKKworI2RlZmluZQlzZXR1cF9kbWFfYWRkcihzLCB0LCByKQlkbyB7CQlcCisJaWYgKHMpIHsJCQkJXAorCQkocyktPnNkYXRhLnR4X3JlZyA9ICh0KTsJXAorCQkocyktPnNkYXRhLnJ4X3JlZyA9IChyKTsJXAorCX0JCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX01BQ0hfQVRNRUxfTUNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9hcmNoLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvYXJjaC5jCmluZGV4IGZiZTZmYTAuLjUzZGQyYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9hcmNoLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2FyY2guYwpAQCAtNzAsOSArNzAsMTkgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBNTV9BRERSX0lPX05BTkQsCisJCS5lbmQgPSBNTV9BRERSX0lPX05BTkQgKyAweDEwMDAgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9kZXZpY2UgPSB7CiAJLm5hbWUgPSAiYmNtLW5hbmQiLAogCS5pZCA9IC0xLAorCS5yZXNvdXJjZSA9IG5hbmRfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2UpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfbmFuZC5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzM3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3JlZ19uYW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAxIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBSRUdfTkFORC5oCisqCisqICBQVVJQT1NFOgorKgorKiAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgbmFuZCByZWdpc3RlcnM6CisqCisqICBOT1RFUzoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX19BU01fQVJDSF9SRUdfTkFORF9IKQorI2RlZmluZSBfX0FTTV9BUkNIX1JFR19OQU5EX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdfdW1pLmg+CisKKy8qIC0tLS0gQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgSFdfTkFORF9CQVNFICAgICAgIE1NX0lPX0JBU0VfTkFORAkvKiBOQU5EIEZsYXNoICovCisKKy8qIERNQSBhY2Nlc3NlcyBieSB0aGUgYm9vdHN0cmFwIG5lZWQgaGFyZCBub252aXJ0dWFsIGFkZHJlc3NlcyAqLworI2RlZmluZSBSRUdfTkFORF9DTUQgICAgICAgICAgICBfX1JFRzE2KEhXX05BTkRfQkFTRSArIDApCisjZGVmaW5lIFJFR19OQU5EX0FERFIgICAgICAgICAgIF9fUkVHMTYoSFdfTkFORF9CQVNFICsgNCkKKworI2RlZmluZSBSRUdfTkFORF9QSFlTX0RBVEExNiAgIChIV19OQU5EX0JBU0UgKyA4KQorI2RlZmluZSBSRUdfTkFORF9QSFlTX0RBVEE4ICAgIChIV19OQU5EX0JBU0UgKyA4KQorI2RlZmluZSBSRUdfTkFORF9EQVRBMTYgICAgICAgICBfX1JFRzE2KFJFR19OQU5EX1BIWVNfREFUQTE2KQorI2RlZmluZSBSRUdfTkFORF9EQVRBOCAgICAgICAgICBfX1JFRzgoUkVHX05BTkRfUEhZU19EQVRBOCkKKworLyogdXNlIGFwcHJvcHJpYXRlIG9mZnNldCB0byBtYWtlIHN1cmUgaXQgc3RhcnQgYXQgdGhlIDFLIGJvdW5kYXJ5ICovCisjZGVmaW5lIFJFR19OQU5EX1BIWVNfREFUQV9ETUEgICAoSFdfTkFORF9CQVNFICsgMHg0MDApCisjZGVmaW5lIFJFR19OQU5EX0RBVEFfRE1BICAgICAgICAgX19SRUczMihSRUdfTkFORF9QSFlTX0RBVEFfRE1BKQorCisvKiBMaW51eCBETUEgcmVxdWlyZXMgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBSRUdfTkFORF9EQVRBMTZfUEFERFIgICAgSFdfSU9fVklSVF9UT19QSFlTKFJFR19OQU5EX1BIWVNfREFUQTE2KQorI2RlZmluZSBSRUdfTkFORF9EQVRBOF9QQUREUiAgICAgSFdfSU9fVklSVF9UT19QSFlTKFJFR19OQU5EX1BIWVNfREFUQTgpCisjZGVmaW5lIFJFR19OQU5EX0RBVEFfUEFERFIgICAgICBIV19JT19WSVJUX1RPX1BIWVMoUkVHX05BTkRfUEhZU19EQVRBX0RNQSkKKworI2RlZmluZSBOQU5EX0JVU18xNkJJVCgpICAgICAgICAoMCkKKyNkZWZpbmUgTkFORF9CVVNfOEJJVCgpICAgICAgICAgKCFOQU5EX0JVU18xNkJJVCgpKQorCisvKiBSZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFJFR19OQU5EX0NNRF9PRkZTRVQgICAgICgwKQorI2RlZmluZSBSRUdfTkFORF9BRERSX09GRlNFVCAgICAoNCkKKyNkZWZpbmUgUkVHX05BTkRfREFUQThfT0ZGU0VUICAgKDgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfdW1pLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3JlZ191bWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmEzNTU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9yZWdfdW1pLmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNSAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgUkVHX1VNSS5oCisqCisqICBQVVJQT1NFOgorKgorKiAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgbmFuZCByZWdpc3RlcnM6CisqCisqICBOT1RFUzoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX19BU01fQVJDSF9SRUdfVU1JX0gpCisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHX1VNSV9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaW5jbHVkZSA8Y3NwL3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKKy8qIC0tLS0gQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVuaWZpZWQgTWVtb3J5IEludGVyZmFjZSBDdHJsIFJlZ2lzdGVyICovCisjZGVmaW5lIEhXX1VNSV9CQVNFICAgICAgIE1NX0lPX0JBU0VfVU1JCisKKy8qIEZsYXNoIGJhbmsgMCB0aW1pbmcgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1VNSV9GTEFTSDBfVENSICAgICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDAwKQorLyogRmxhc2ggYmFuayAxIHRpbWluZyBhbmQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfVU1JX0ZMQVNIMV9UQ1IgICAgICAgICBfX1JFRzMyKEhXX1VNSV9CQVNFICArIDB4MDQpCisvKiBGbGFzaCBiYW5rIDIgdGltaW5nIGFuZCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19VTUlfRkxBU0gyX1RDUiAgICAgICAgIF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHgwOCkKKy8qIE1NRCBpbnRlcmZhY2UgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSICAgICAgICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDBjKQorLyogTkFORCB0aW1pbmcgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX1RDUiAgICAgICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDE4KQorLyogTkFORCByZWFkeS9jaGlwIHNlbGVjdCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfUkNTUiAgICAgICAgICBfX1JFRzMyKEhXX1VNSV9CQVNFICArIDB4MWMpCisvKiBOQU5EIEVDQyBjb250cm9sICYgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19VTUlfTkFORF9FQ0NfQ1NSICAgICAgIF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHgyMCkKKy8qIE5BTkQgRUNDIGRhdGEgcmVnaXN0ZXIgWFhCMkIxQjAgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX0VDQ19EQVRBICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDI0KQorLyogQkNIIEVDQyBQYXJhbWV0ZXIgTiAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9OICAgICAgICAgICAgICBfX1JFRzMyKEhXX1VNSV9CQVNFICArIDB4NDApCisvKiBCQ0ggRUNDIFBhcmFtZXRlciBUICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0sgICAgICAgICAgICAgIF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHg0NCkKKy8qIEJDSCBFQ0MgUGFyYW1ldGVyIEsgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfVCAgICAgICAgICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDQ4KQorLyogQkNIIEVDQyBDb250cm8gU3RhdHVzICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTICAgIF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHg0QykKKy8qIEJDSCBXUiBFQ0MgMzE6MCAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9XUl9FQ0NfMCAgICAgICBfX1JFRzMyKEhXX1VNSV9CQVNFICArIDB4NTApCisvKiBCQ0ggV1IgRUNDIDYzOjMyICovCisjZGVmaW5lIFJFR19VTUlfQkNIX1dSX0VDQ18xICAgICAgIF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHg1NCkKKy8qIEJDSCBXUiBFQ0MgOTU6NjQgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfV1JfRUNDXzIgICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDU4KQorLyogQkNIIFdSIEVDQyAxMjc6OTYgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfV1JfRUNDXzMgICAgICAgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDVjKQorLyogQkNIIFdSIEVDQyAxNTU6MTI4ICovCisjZGVmaW5lIFJFR19VTUlfQkNIX1dSX0VDQ180ICAgICAgIF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHg2MCkKKy8qIEJDSCBSZWFkIEVycm9yIExvY2F0aW9uIDEsMCAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9SRF9FUlJfTE9DXzFfMCBfX1JFRzMyKEhXX1VNSV9CQVNFICArIDB4NjQpCisvKiBCQ0ggUmVhZCBFcnJvciBMb2NhdGlvbiAzLDIgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfUkRfRVJSX0xPQ18zXzIgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDY4KQorLyogQkNIIFJlYWQgRXJyb3IgTG9jYXRpb24gNSw0ICovCisjZGVmaW5lIFJFR19VTUlfQkNIX1JEX0VSUl9MT0NfNV80IF9fUkVHMzIoSFdfVU1JX0JBU0UgICsgMHg2YykKKy8qIEJDSCBSZWFkIEVycm9yIExvY2F0aW9uIDcsNiAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9SRF9FUlJfTE9DXzdfNiBfX1JFRzMyKEhXX1VNSV9CQVNFICArIDB4NzApCisvKiBCQ0ggUmVhZCBFcnJvciBMb2NhdGlvbiA5LDggKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfUkRfRVJSX0xPQ185XzggX19SRUczMihIV19VTUlfQkFTRSAgKyAweDc0KQorLyogQkNIIFJlYWQgRXJyb3IgTG9jYXRpb24gMTEsMTAgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfUkRfRVJSX0xPQ19CX0EgX19SRUczMihIV19VTUlfQkFTRSAgKyAweDc4KQorCisvKiBSRUdfVU1JX0ZMQVNIMC8xLzJfVENSLCBSRUdfVU1JX1NSQU0wLzFfVENSIGJpdHMgKi8KKy8qIEVuYWJsZSB3YWl0IHBpbiBkdXJpbmcgYnVyc3Qgd3JpdGUgb3IgcmVhZCAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9XQUlURU4gICAgICAgICAgICAgIDB4ODAwMDAwMDAKKy8qIEVuYWJsZSBtZW0gY3RybHIgdG8gd29yayBpd3RoIGV4dCBtZW0gb2YgbG93ZXIgZnJlcSB0aGFuIEFIQiBjbGsgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfTE9XRlJFUSAgICAgICAgICAgICAweDQwMDAwMDAwCisvKiAxPXN5bmNoIHdyaXRlLCAwPWFzeW5jIHdyaXRlICovCisjZGVmaW5lIFJFR19VTUlfVENSX01FTVRZUEVfU1lOQ1dSSVRFICAgMHgyMDAwMDAwMAorLyogMT1zeW5jaCByZWFkLCAwPWFzeW5jIHJlYWQgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfTUVNVFlQRV9TWU5DUkVBRCAgICAweDEwMDAwMDAwCisvKiAxPXBhZ2UgbW9kZSByZWFkLCAwPW5vcm1hbCBtb2RlIHJlYWQgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfTUVNVFlQRV9QQUdFUkVBRCAgICAweDA4MDAwMDAwCisvKiBwYWdlIHNpemUvYnVyc3Qgc2l6ZSAod3JhcCBvbmx5KSAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9NRU1UWVBFX1BHU1pfTUFTSyAgIDB4MDcwMDAwMDAKKy8qIDQgd29yZCAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9NRU1UWVBFX1BHU1pfNCAgICAgIDB4MDAwMDAwMDAKKy8qIDggd29yZCAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9NRU1UWVBFX1BHU1pfOCAgICAgIDB4MDEwMDAwMDAKKy8qIDE2IHdvcmQgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfTUVNVFlQRV9QR1NaXzE2ICAgICAweDAyMDAwMDAwCisvKiAzMiB3b3JkICovCisjZGVmaW5lIFJFR19VTUlfVENSX01FTVRZUEVfUEdTWl8zMiAgICAgMHgwMzAwMDAwMAorLyogNjQgd29yZCAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9NRU1UWVBFX1BHU1pfNjQgICAgIDB4MDQwMDAwMDAKKy8qIDEyOCB3b3JkICovCisjZGVmaW5lIFJFR19VTUlfVENSX01FTVRZUEVfUEdTWl8xMjggICAgMHgwNTAwMDAwMAorLyogMjU2IHdvcmQgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfTUVNVFlQRV9QR1NaXzI1NiAgICAweDA2MDAwMDAwCisvKiA1MTIgd29yZCAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9NRU1UWVBFX1BHU1pfNTEyICAgIDB4MDcwMDAwMDAKKy8qIFBhZ2UgcmVhZCBhY2Nlc3MgY3ljbGUgLyBCdXJzdCB3cml0ZSBsYXRlbmN5IChuKzIgLyBuKzEpICovCisjZGVmaW5lIFJFR19VTUlfVENSX1RQUkNfVFdMQ19NQVNLICAgICAgMHgwMGY4MDAwMAorLyogQnVzIHR1cm5hcm91bmQgY3ljbGUgKG4pICovCisjZGVmaW5lIFJFR19VTUlfVENSX1RCVEFfTUFTSyAgICAgICAgICAgMHgwMDA3MDAwMAorLyogV3JpdGUgcHVsc2Ugd2lkdGggY3ljbGUgKG4rMSkgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfVFdQX01BU0sgICAgICAgICAgICAweDAwMDBmODAwCisvKiBXcml0ZSByZWNvdmVyeSBjeWNsZSAobisxKSAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9UV1JfTUFTSyAgICAgICAgICAgIDB4MDAwMDA2MDAKKy8qIFdyaXRlIGFkZHJlc3Mgc2V0dXAgY3ljbGUgKG4rMSkgKi8KKyNkZWZpbmUgUkVHX1VNSV9UQ1JfVEFTX01BU0sgICAgICAgICAgICAweDAwMDAwMTgwCisvKiBPdXRwdXQgZW5hYmxlIGRlbGF5IGN5Y2xlIChuKSAqLworI2RlZmluZSBSRUdfVU1JX1RDUl9UT0VfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwNjAKKy8qIFJlYWQgYWNjZXNzIGN5Y2xlIC8gQnVyc3QgcmVhZCBsYXRlbmN5IChuKzIgLyBuKzEpICovCisjZGVmaW5lIFJFR19VTUlfVENSX1RSQ19UTENfTUFTSyAgICAgICAgMHgwMDAwMDAxZgorCisvKiBSRUdfVU1JX01NRF9JQ1IgYml0cyAqLworLyogRmxhc2ggd3JpdGUgcHJvdGVjdGlvbiBwaW4gY29udHJvbCAqLworI2RlZmluZSBSRUdfVU1JX01NRF9JQ1JfRkxBU0hfV1AgICAgICAgICAgICAweDgwMDAKKy8qIEV4dGVuZCBob2xkIHRpbWUgZm9yIHNyYW0wLCBzcmFtMSBjc24gKDM5IE1IeiBvcGVyYXRpb24pICovCisjZGVmaW5lIFJFR19VTUlfTU1EX0lDUl9YSENTICAgICAgICAgICAgICAgIDB4NDAwMAorLyogRW5hYmxlIFNEUkFNIDIgaW50ZXJmYWNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX1NEUkFNMkVOICAgICAgICAgICAgMHgyMDAwCisvKiBFbmFibGUgbWVyZ2Ugb2YgZmxhc2ggYmFua3MgMC8xIHRvIDUxMiBNQml0IGJhbmsgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX0lOU1Q1MTIgICAgICAgICAgICAgMHgxMDAwCisvKiBFbmFibGUgbWVyZ2Ugb2YgZmxhc2ggYmFua3MgMS8yIHRvIDUxMiBNQml0IGJhbmsgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX0RBVEE1MTIgICAgICAgICAgICAgMHgwODAwCisvKiBFbmFibGUgU0RSQU0gaW50ZXJmYWNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX1NEUkFNRU4gICAgICAgICAgICAgMHgwNDAwCisvKiBQb2xhcml0eSBvZiBidXN5IHN0YXRlIG9mIEJ1cnN0IFdhaXQgU2lnbmFsICovCisjZGVmaW5lIFJFR19VTUlfTU1EX0lDUl9XQUlUUE9MICAgICAgICAgICAgIDB4MDIwMAorLyogRW5hYmxlIGJ1cnN0IGNsb2NrIHN0b3BwZWQgd2hlbiBub3QgYWNjZXNzaW5nIGV4dGVybmFsIGJ1cnN0IGZsYXNoL3NyYW0gKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX0JDTEtTVE9QICAgICAgICAgICAgMHgwMTAwCisvKiBFbmFibGUgdGhlIHBlcmkxX2NzbiB0byByZXBsYWNlIGZsYXNoMV9jc24gaW4gNTEyIE1iIGZsYXNoIG1vZGUgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX1BFUkkxRU4gICAgICAgICAgICAgMHgwMDgwCisvKiBFbmFibGUgdGhlIHBlcmkyX2NzbiB0byByZXBsYWNlIHNkcmFtX2NzbiAqLworI2RlZmluZSBSRUdfVU1JX01NRF9JQ1JfUEVSSTJFTiAgICAgICAgICAgICAweDAwNDAKKy8qIEVuYWJsZSB0aGUgcGVyaTNfY3NuIHRvIHJlcGxhY2Ugc2RyYW0yX2NzbiAqLworI2RlZmluZSBSRUdfVU1JX01NRF9JQ1JfUEVSSTNFTiAgICAgICAgICAgICAweDAwMjAKKy8qIEVuYWJsZSBzcmFtIGJhbmsxIGZvciBIL1cgY29udHJvbGxlZCBNUlMgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX01SU0IxICAgICAgICAgICAgICAgMHgwMDEwCisvKiBFbmFibGUgc3JhbSBiYW5rMCBmb3IgSC9XIGNvbnRyb2xsZWQgTVJTICovCisjZGVmaW5lIFJFR19VTUlfTU1EX0lDUl9NUlNCMCAgICAgICAgICAgICAgIDB4MDAwOAorLyogUG9sYXJpdHkgZm9yIGFzc2VydDNlZCBzdGF0ZSBvZiBIL1cgY29udHJvbGxlZCBNUlMgKi8KKyNkZWZpbmUgUkVHX1VNSV9NTURfSUNSX01SU1BPTCAgICAgICAgICAgICAgMHgwMDA0CisvKiAwOiBTL1cgY29udHJvbGxhYmxlIFpaL01SUy9DUkUvUC1Nb2RlIHBpbiAqLworLyogMTogSC9XIGNvbnRyb2xsZWQgWlovTVJTL0NSRS9QLU1vZGUsIHNhbWUgdGltaW5nIGFzIENTICovCisjZGVmaW5lIFJFR19VTUlfTU1EX0lDUl9NUlNNT0RFICAgICAgICAgICAgIDB4MDAwMgorLyogTVJTIHN0YXRlIGZvciBTL1cgY29udHJvbGxlZCBtb2RlICovCisjZGVmaW5lIFJFR19VTUlfTU1EX0lDUl9NUlNTVEFURSAgICAgICAgICAgIDB4MDAwMQorCisvKiBSRUdfVU1JX05BTkRfVENSIGJpdHMgKi8KKy8qIEVuYWJsZSBzb2Z0d2FyZSB0byBjb250cm9sIENTICovCisjZGVmaW5lIFJFR19VTUlfTkFORF9UQ1JfQ1NfU1dDVFJMICAgICAgICAgIDB4ODAwMDAwMDAKKy8qIDE2LWJpdCBuYW5kIHdvcmRzaXplIGlmIHNldCAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfVENSX1dPUkQxNiAgICAgICAgICAgICAweDQwMDAwMDAwCisvKiBCdXMgdHVybmFyb3VuZCBjeWNsZSAobikgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX1RDUl9UQlRBX01BU0sgICAgICAgICAgMHgwMDA3MDAwMAorLyogV3JpdGUgcHVsc2Ugd2lkdGggY3ljbGUgKG4rMSkgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX1RDUl9UV1BfTUFTSyAgICAgICAgICAgMHgwMDAwZjgwMAorLyogV3JpdGUgcmVjb3ZlcnkgY3ljbGUgKG4rMSkgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX1RDUl9UV1JfTUFTSyAgICAgICAgICAgMHgwMDAwMDYwMAorLyogV3JpdGUgYWRkcmVzcyBzZXR1cCBjeWNsZSAobisxKSAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfVENSX1RBU19NQVNLICAgICAgICAgICAweDAwMDAwMTgwCisvKiBPdXRwdXQgZW5hYmxlIGRlbGF5IGN5Y2xlIChuKSAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfVENSX1RPRV9NQVNLICAgICAgICAgICAweDAwMDAwMDYwCisvKiBSZWFkIGFjY2VzcyBjeWNsZSAobisyKSAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfVENSX1RSQ19UTENfTUFTSyAgICAgICAweDAwMDAwMDFmCisKKy8qIFJFR19VTUlfTkFORF9SQ1NSIGJpdHMgKi8KKy8qIFN0YXR1czogUmVhZHk9MSwgQnVzeT0wICovCisjZGVmaW5lIFJFR19VTUlfTkFORF9SQ1NSX1JEWSAgICAgICAgICAgICAgIDB4MDIKKy8qIEtlZXAgQ1MgYXNzZXJ0ZWQgZHVyaW5nIG9wZXJhdGlvbiAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfUkNTUl9DU19BU1NFUlRFRCAgICAgICAweDAxCisKKy8qIFJFR19VTUlfTkFORF9FQ0NfQ1NSIGJpdHMgKi8KKy8qIEludGVycnVwdCBzdGF0dXMgLSByZWFkLW9ubHkgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX0VDQ19DU1JfTkFORElOVCAgICAgICAgMHg4MDAwMDAwMAorLyogUmVhZDogU3RhdHVzIG9mIEVDQyBkb25lLCBXcml0ZTogY2xlYXIgRUNDIGludGVycnVwdCAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfRUNDX0NTUl9FQ0NJTlRfUkFXICAgICAweDAwODAwMDAwCisvKiBSZWFkOiBTdGF0dXMgb2YgUi9CLCBXcml0ZTogY2xlYXIgUi9CIGludGVycnVwdCAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfRUNDX0NTUl9SQklOVF9SQVcgICAgICAweDAwNDAwMDAwCisvKiAxID0gRW5hYmxlIEVDQyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUkVHX1VNSV9OQU5EX0VDQ19DU1JfRUNDSU5UX0VOQUJMRSAgMHgwMDAwODAwMAorLyogMSA9IEFzc2VydCBpbnRlcnJ1cHQgYXQgcmlzaW5nIGVkZ2Ugb2YgUi9CXyAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfRUNDX0NTUl9SQklOVF9FTkFCTEUgICAweDAwMDA0MDAwCisvKiBDYWxjdWxhdGUgRUNDIGJ5IDA9NTEyIGJ5dGVzLCAxPTI1NiBieXRlcyAqLworI2RlZmluZSBSRUdfVU1JX05BTkRfRUNDX0NTUl8yNTZCWVRFICAgICAgICAweDAwMDAwMDgwCisvKiBFbmFibGUgRUNDIGluIGhhcmR3YXJlICovCisjZGVmaW5lIFJFR19VTUlfTkFORF9FQ0NfQ1NSX0VDQ19FTkFCTEUgICAgIDB4MDAwMDAwMDEKKworLyogUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVMgYml0cyAqLworLyogU2hpZnQgdG8gSW5kaWNhdGUgTnVtYmVyIG9mIGNvcnJlY3RhYmxlIGVycm9ycyBkZXRlY3RlZCAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19OQl9DT1JSX0VSUk9SX1NISUZUIDIwCisvKiBJbmRpY2F0ZSBOdW1iZXIgb2YgY29ycmVjdGFibGUgZXJyb3JzIGRldGVjdGVkICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX05CX0NPUlJfRVJST1IgMHgwMEYwMDAwMAorLyogSW5kaWNhdGUgRXJyb3JzIGRldGVjdGVkIGR1cmluZyByZWFkIGJ1dCB1bmNvcnJlY3RhYmxlICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX1VOQ09SUl9FUlIgICAgMHgwMDA4MDAwMAorLyogSW5kaWNhdGUgRXJyb3JzIGRldGVjdGVkIGR1cmluZyByZWFkIGFuZCBhcmUgY29ycmVjdGFibGUgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfQ09SUl9FUlIgICAgICAweDAwMDQwMDAwCisvKiBGbGFnIGluZGljYXRlcyBCQ0gncyBFQ0Mgc3RhdHVzIG9mIHJlYWQgcHJvY2VzcyBhcmUgdmFsaWQgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfUkRfRUNDX1ZBTElEICAweDAwMDIwMDAwCisvKiBGbGFnIGluZGljYXRlcyBCQ0gncyBFQ0Mgc3RhdHVzIG9mIHdyaXRlIHByb2Nlc3MgYXJlIHZhbGlkICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX1dSX0VDQ19WQUxJRCAgMHgwMDAxMDAwMAorLyogUGF1c2UgRUNDIGNhbGN1bGF0aW9uICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX1BBVVNFX0VDQ19ERUMgMHgwMDAwMDAxMAorLyogRW5hYmxlIEludGVycnVwdCAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19JTlRfRU4gICAgICAgIDB4MDAwMDAwMDQKKy8qIEVuYWJsZSBFQ0MgZHVyaW5nIHJlYWQgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfRUNDX1JEX0VOICAgICAweDAwMDAwMDAyCisvKiBFbmFibGUgRUNDIGR1cmluZyB3cml0ZSAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19FQ0NfV1JfRU4gICAgIDB4MDAwMDAwMDEKKy8qIE1hc2sgZm9yIGxvY2F0aW9uICovCisjZGVmaW5lIFJFR19VTUlfQkNIX0VSUl9MT0NfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMUZGRgorLyogbG9jYXRpb24gd2l0aGluIGEgYnl0ZSAqLworI2RlZmluZSBSRUdfVU1JX0JDSF9FUlJfTE9DX0JZVEUgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKy8qIGxvY2F0aW9uIHdpdGhpbiBhIHdvcmQgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfRVJSX0xPQ19XT1JEICAgICAgICAgICAgICAweDAwMDAwMDE4CisvKiBsb2NhdGlvbiB3aXRoaW4gYSBwYWdlICg1MTIgYnl0ZSkgKi8KKyNkZWZpbmUgUkVHX1VNSV9CQ0hfRVJSX0xPQ19QQUdFICAgICAgICAgICAgICAweDAwMDAxRkUwCisjZGVmaW5lIFJFR19VTUlfQkNIX0VSUl9MT0NfQUREUihpbmRleCkgICAgIChfX1JFRzMyKEhXX1VNSV9CQVNFICsgMHg2NCArIChpbmRleCAvIDIpKjQpID4+ICgoaW5kZXggJSAyKSAqIDE2KSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBlNTIyYjIwLi5mNzBkNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMzAsNiArMzAsOCBAQAogCiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUKQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgKyBQQUdFX09GRlNFVCkKKyNkZWZpbmUgX19wZm5fdG9fYnVzKHgpCQkoX19wZm5fdG9fcGh5cyh4KSAtIFBIWVNfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b19wZm4oeCkJCV9fcGh5c190b19wZm4oKHgpICsgUEhZU19PRkZTRVQpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKaW5kZXggNjJiOThiZi4uMDdkZThkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYwpAQCAtMzM5LDYgKzMzOSwxNSBAQAogCS52ZXJzaW9uCT0gTU1DX0NUTFJfVkVSU0lPTl8yLAogfTsKIAorc3RhdGljIHZvaWQgZGE4NTBfcGFuZWxfcG93ZXJfY3RybChpbnQgdmFsKQoreworCS8qIGxjZCBiYWNrbGlnaHQgKi8KKwlncGlvX3NldF92YWx1ZShEQTg1MF9MQ0RfQkxfUElOLCB2YWwpOworCisJLyogbGNkIHBvd2VyICovCisJZ3Bpb19zZXRfdmFsdWUoREE4NTBfTENEX1BXUl9QSU4sIHZhbCk7Cit9CisKIHN0YXRpYyBpbnQgZGE4NTBfbGNkX2h3X2luaXQodm9pZCkKIHsKIAlpbnQgc3RhdHVzOwpAQCAtMzU2LDE3ICszNjUsMTEgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoREE4NTBfTENEX0JMX1BJTiwgMCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KERBODUwX0xDRF9QV1JfUElOLCAwKTsKIAotCS8qIGRpc2FibGUgbGNkIGJhY2tsaWdodCAqLwotCWdwaW9fc2V0X3ZhbHVlKERBODUwX0xDRF9CTF9QSU4sIDApOworCS8qIFN3aXRjaCBvZmYgcGFuZWwgcG93ZXIgYW5kIGJhY2tsaWdodCAqLworCWRhODUwX3BhbmVsX3Bvd2VyX2N0cmwoMCk7CiAKLQkvKiBkaXNhYmxlIGxjZCBwb3dlciAqLwotCWdwaW9fc2V0X3ZhbHVlKERBODUwX0xDRF9QV1JfUElOLCAwKTsKLQotCS8qIGVuYWJsZSBsY2QgcG93ZXIgKi8KLQlncGlvX3NldF92YWx1ZShEQTg1MF9MQ0RfUFdSX1BJTiwgMSk7Ci0KLQkvKiBlbmFibGUgbGNkIGJhY2tsaWdodCAqLwotCWdwaW9fc2V0X3ZhbHVlKERBODUwX0xDRF9CTF9QSU4sIDEpOworCS8qIFN3aXRjaCBvbiBwYW5lbCBwb3dlciBhbmQgYmFja2xpZ2h0ICovCisJZGE4NTBfcGFuZWxfcG93ZXJfY3RybCgxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjc0LDYgKzY3Nyw3IEBACiAJCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBsY2QgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwogCisJc2hhcnBfbGswNDN0MWRnMDFfcGRhdGEucGFuZWxfcG93ZXJfY3RybCA9IGRhODUwX3BhbmVsX3Bvd2VyX2N0cmwsCiAJcmV0ID0gZGE4eHhfcmVnaXN0ZXJfbGNkYygmc2hhcnBfbGswNDN0MWRnMDFfcGRhdGEpOwogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoImRhODUwX2V2bV9pbml0OiBsY2RjIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9uYW5kLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL25hbmQuaAppbmRleCBiNTIwYzRiLi5iMmFkODA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL25hbmQuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL25hbmQuaApAQCAtNzksNiArNzksMTAgQEAKIAogCS8qIGUuZy4gTkFORF9CVVNXSURUSF8xNiBvciBOQU5EX1VTRV9GTEFTSF9CQlQgKi8KIAl1bnNpZ25lZAkJb3B0aW9uczsKKworCS8qIE1haW4gYW5kIG1pcnJvciBiYnQgZGVzY3JpcHRvciBvdmVycmlkZXMgKi8KKwlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJidF90ZDsKKwlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJidF9tZDsKIH07CiAKICNlbmRpZgkvKiBfX0FSQ0hfQVJNX0RBVklOQ0lfTkFORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4X2tleXBhZC5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eF9rZXlwYWQuaAppbmRleCA4M2YzMWNkLi42MmQxNzQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4X2tleXBhZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHhfa2V5cGFkLmgKQEAgLTUsOSArNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRVA5M1hYX0tFWVBBRF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRVA5M1hYX0tFWVBBRF9ICiAKLSNkZWZpbmUgTUFYX01BVFJJWF9LRVlfUk9XUwkJKDgpCi0jZGVmaW5lIE1BWF9NQVRSSVhfS0VZX0NPTFMJCSg4KQotCiAvKiBmbGFncyBmb3IgdGhlIGVwOTN4eF9rZXlwYWQgZHJpdmVyICovCiAjZGVmaW5lIEVQOTNYWF9LRVlQQURfRElTQUJMRV8zX0tFWQkoMTw8MCkJLyogZGlzYWJsZSAzLWtleSByZXNldCAqLwogI2RlZmluZSBFUDkzWFhfS0VZUEFEX0RJQUdfTU9ERQkJKDE8PDEpCS8qIGRpYWdub3N0aWMgbW9kZSAqLwpAQCAtMTgsOCArMTUsNiBAQAogCiAvKioKICAqIHN0cnVjdCBlcDkzeHhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAbWF0cml4X2tleV9yb3dzOgkJbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGtleXBhZCBtYXRyaXgKLSAqIEBtYXRyaXhfa2V5X2NvbHM6CQludW1iZXIgb2YgY29sdW1ucyBpbiB0aGUga2V5cGFkIG1hdHJpeAogICogQG1hdHJpeF9rZXlfbWFwOgkJYXJyYXkgb2Yga2V5Y29kZXMgZGVmaW5pbmcgdGhlIGtleXBhZCBtYXRyaXgKICAqIEBtYXRyaXhfa2V5X21hcF9zaXplOglBUlJBWV9TSVpFKG1hdHJpeF9rZXlfbWFwKQogICogQGRlYm91bmNlOgkJCWRlYm91bmNlIHN0YXJ0IGNvdW50OyB0ZXJtaW5hbCBjb3VudCBpcyAweGZmCkBAIC0yNyw4ICsyMiw2IEBACiAgKiBAZmxhZ3M6CQkJc2VlIGFib3ZlCiAgKi8KIHN0cnVjdCBlcDkzeHhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgewotCXVuc2lnbmVkIGludAltYXRyaXhfa2V5X3Jvd3M7Ci0JdW5zaWduZWQgaW50CW1hdHJpeF9rZXlfY29sczsKIAl1bnNpZ25lZCBpbnQJKm1hdHJpeF9rZXlfbWFwOwogCWludAkJbWF0cml4X2tleV9tYXBfc2l6ZTsKIAl1bnNpZ25lZCBpbnQJZGVib3VuY2U7CkBAIC0zNiw3ICsyOSw3IEBACiAJdW5zaWduZWQgaW50CWZsYWdzOwogfTsKIAotLyogbWFjcm8gZm9yIGNyZWF0aW5nIHRoZSBtYXRyaXhfa2V5X21hcCB0YWJsZSAqLwotI2RlZmluZSBLRVkocm93LCBjb2wsIHZhbCkJKCgocm93KSA8PCAyOCkgfCAoKGNvbCkgPDwgMjQpIHwgKHZhbCkpCisjZGVmaW5lIEVQOTNYWF9NQVRSSVhfUk9XUwkJKDgpCisjZGVmaW5lIEVQOTNYWF9NQVRSSVhfQ09MUwkJKDgpCiAKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0VQOTNYWF9LRVlQQURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCmluZGV4IGI5N2Y1MjkuLjQxZmViYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKQEAgLTIwMSw2ICsyMDEsMTEgQEAKIAogI2lmZGVmIENPTkZJR19GT09UQlJJREdFX0FERElOCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmYl9idXNfc2RyYW1fb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuICpDU1JfUENJU0RSQU1CQVNFICYgMHhmZmZmZmZmMDsKK30KKwogLyoKICAqIFRoZXNlIHR3byBmdW5jdGlvbnMgY29udmVydCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBQQ0kgYWRkcmVzc2VzIGFuZCBQQ0kKICAqIGFkZHJlc3NlcyB0byB2aXJ0dWFsIGFkZHJlc3Nlcy4gIE5vdGUgdGhhdCBpdCBpcyBvbmx5IGxlZ2FsIHRvIHVzZSB0aGVzZQpAQCAtMjEwLDE0ICsyMTUsMTMgQEAKIHsKIAlXQVJOX09OKHJlcyA8IFBBR0VfT0ZGU0VUIHx8IHJlcyA+PSAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSk7CiAKLQlyZXR1cm4gKHJlcyAtIFBBR0VfT0ZGU0VUKSArICgqQ1NSX1BDSVNEUkFNQkFTRSAmIDB4ZmZmZmZmZjApOworCXJldHVybiByZXMgKyAoZmJfYnVzX3NkcmFtX29mZnNldCgpIC0gUEFHRV9PRkZTRVQpOwogfQogRVhQT1JUX1NZTUJPTChfX3ZpcnRfdG9fYnVzKTsKIAogdW5zaWduZWQgbG9uZyBfX2J1c190b192aXJ0KHVuc2lnbmVkIGxvbmcgcmVzKQogewotCXJlcyAtPSAoKkNTUl9QQ0lTRFJBTUJBU0UgJiAweGZmZmZmZmYwKTsKLQlyZXMgKz0gUEFHRV9PRkZTRVQ7CisJcmVzID0gcmVzIC0gKGZiX2J1c19zZHJhbV9vZmZzZXQoKSAtIFBBR0VfT0ZGU0VUKTsKIAogCVdBUk5fT04ocmVzIDwgUEFHRV9PRkZTRVQgfHwgcmVzID49ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KTsKIApAQCAtMjI1LDQgKzIyOSwxNiBAQAogfQogRVhQT1JUX1NZTUJPTChfX2J1c190b192aXJ0KTsKIAordW5zaWduZWQgbG9uZyBfX3Bmbl90b19idXModW5zaWduZWQgbG9uZyBwZm4pCit7CisJcmV0dXJuIF9fcGZuX3RvX3BoeXMocGZuKSArIChmYl9idXNfc2RyYW1fb2Zmc2V0KCkgLSBQSFlTX09GRlNFVCkpOworfQorRVhQT1JUX1NZTUJPTChfX3Bmbl90b19idXMpOworCit1bnNpZ25lZCBsb25nIF9fYnVzX3RvX3Bmbih1bnNpZ25lZCBsb25nIGJ1cykKK3sKKwlyZXR1cm4gX19waHlzX3RvX3BmbihidXMgLSAoZmJfYnVzX3NkcmFtX29mZnNldCgpIC0gUEhZU19PRkZTRVQpKTsKK30KK0VYUE9SVF9TWU1CT0woX19idXNfdG9fcGZuKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBjYjE2ZTU5Li44ZDY0ZjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3ZpcnRfdG9fYnVzKHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19idXNfdG9fdmlydCh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGZuX3RvX2J1cyh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fYnVzX3RvX3Bmbih1bnNpZ25lZCBsb25nKTsKICNlbmRpZgogI2RlZmluZSBfX3ZpcnRfdG9fYnVzCV9fdmlydF90b19idXMKICNkZWZpbmUgX19idXNfdG9fdmlydAlfX2J1c190b192aXJ0CkBAIC0zNiwxNCArMzgsMTUgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0VfSE9TVCkKIAogLyoKLSAqIFRoZSBmb290YnJpZGdlIGlzIHByb2dyYW1tZWQgdG8gZXhwb3NlIHRoZSBzeXN0ZW0gUkFNIGF0IHRoZSBjb3JyZXNwb25kaW5nCi0gKiBhZGRyZXNzLiAgU28sIGlmIFBBR0VfT0ZGU0VUIGlzIDB4YzAwMDAwMDAsIFJBTSBhcHBlYXJzIGF0IDB4ZTAwMDAwMDAuCi0gKiBJZiAweDgwMDAwMDAwLCB0aGVuIGl0cyBleHBvc2VkIGF0IDB4YTAwMDAwMDAgb24gdGhlIGJ1cy4gZXRjLgotICogVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgUkFNIGlzbid0IHBsYWNlZCBhdCBidXMgYWRkcmVzcyAwIHdoaWNoCisgKiBUaGUgZm9vdGJyaWRnZSBpcyBwcm9ncmFtbWVkIHRvIGV4cG9zZSB0aGUgc3lzdGVtIFJBTSBhdCAweGUwMDAwMDAwLgorICogVGhlIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIFJBTSBpc24ndCBwbGFjZWQgYXQgYnVzIGFkZHJlc3MgMCwgd2hpY2gKICAqIHdvdWxkIGNsYXNoIHdpdGggVkdBIGNhcmRzLgogICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIDB4ZTAwMDAwMDApCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKCh4KSArIDB4ZTAwMDAwMDApCisjZGVmaW5lIEJVU19PRkZTRVQJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpICsgKEJVU19PRkZTRVQgLSBQQUdFX09GRlNFVCkpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKCh4KSAtIChCVVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpKQorI2RlZmluZSBfX3Bmbl90b19idXMoeCkJCShfX3Bmbl90b19waHlzKHgpICsgKEJVU19PRkZTRVQgLSBQSFlTX09GRlNFVCkpCisjZGVmaW5lIF9fYnVzX3RvX3Bmbih4KQkJX19waHlzX3RvX3BmbigoeCkgLSAoQlVTX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNDg5MTgyOC4uOTkxZjI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIEJVU19PRkZTRVQJVUwoMHg4MDAwMDAwMCkKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBCVVNfT0ZGU0VUKQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgLSBCVVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCi0jZGVmaW5lIF9fcGZuX3RvX2J1cyh4KQkJKCgoeCkgPDwgUEFHRV9TSElGVCkgKyBCVVNfT0ZGU0VUKQorI2RlZmluZSBfX3Bmbl90b19idXMoeCkJCShfX3Bmbl90b19waHlzKHgpICsgKEJVU19PRkZTRVQgLSBQSFlTX09GRlNFVCkpCisjZGVmaW5lIF9fYnVzX3RvX3Bmbih4KQkJX19waHlzX3RvX3BmbigoeCkgLSAoQlVTX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBhZWU3ZWI4Li45OGUzNDcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE3LDExICsxNywxNSBAQAogCiAjaW5jbHVkZSA8bWFjaC9peHAyMDAwLXJlZ3MuaD4KIAotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHYpIFwKLQkoKChfX3ZpcnRfdG9fcGh5cyh2KSAtIDB4MCkgKyAoKklYUDIwMDBfUENJX1NEUkFNX0JBUiAmIDB4ZmZmZmZmZjApKSkKKyNkZWZpbmUgSVhQMjAwMF9QQ0lfU0RSQU1fT0ZGU0VUCSgqSVhQMjAwMF9QQ0lfU0RSQU1fQkFSICYgMHhmZmZmZmZmMCkKIAotI2RlZmluZSBfX2J1c190b192aXJ0KGIpIFwKLQlfX3BoeXNfdG9fdmlydCgoKChiIC0gKCpJWFAyMDAwX1BDSV9TRFJBTV9CQVIgJiAweGZmZmZmZmYwKSkgKyAweDApKSkKKyNkZWZpbmUgX19waHlzX3RvX2J1cyh4KQkoKHgpICsgKElYUDIwMDBfUENJX1NEUkFNX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKKyNkZWZpbmUgX19idXNfdG9fcGh5cyh4KQkoKHgpIC0gKElYUDIwMDBfUENJX1NEUkFNX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHYpCV9fcGh5c190b19idXMoX192aXJ0X3RvX3BoeXModikpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoYikJX19waHlzX3RvX3ZpcnQoX19idXNfdG9fcGh5cyhiKSkKKyNkZWZpbmUgX19wZm5fdG9fYnVzKHApCQlfX3BoeXNfdG9fYnVzKF9fcGZuX3RvX3BoeXMocCkpCisjZGVmaW5lIF9fYnVzX3RvX3BmbihiKQkJX19waHlzX3RvX3BmbihfX2J1c190b19waHlzKGIpKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggZmRkMTM4Ny4uOTRhM2E4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xOSwxNiArMTksMTUgQEAKICAqLwogI2RlZmluZSBQSFlTX09GRlNFVAkJKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh2KQkJCQkJCVwKLQkoeyB1bnNpZ25lZCBpbnQgcmV0OwkJCQkJCVwKLQlyZXQgPSAoKF9fdmlydF90b19waHlzKHYpIC0gMHgwMDAwMDAwMCkgKwkJCVwKLQkgKCooKHZvbGF0aWxlIGludCAqKUlYUDIzWFhfUENJX1NEUkFNX0JBUikgJiAweGZmZmZmZmYwKSk7IAlcCi0JcmV0OyB9KQorI2RlZmluZSBJWFAyM1hYX1BDSV9TRFJBTV9PRkZTRVQgKCooKHZvbGF0aWxlIGludCAqKUlYUDIzWFhfUENJX1NEUkFNX0JBUikgJiAweGZmZmZmZmYwKSkKIAotI2RlZmluZSBfX2J1c190b192aXJ0KGIpCQkJCQkJXAotCSh7IHVuc2lnbmVkIGludCBkYXRhOwkJCQkJCVwKLQlkYXRhID0gKigodm9sYXRpbGUgaW50ICopSVhQMjNYWF9QQ0lfU0RSQU1fQkFSKTsJCVwKLQkgX19waHlzX3RvX3ZpcnQoKCgoYiAtIChkYXRhICYgMHhmZmZmZmZmMCkpICsgMHgwMDAwMDAwMCkpKTsgfSkKKyNkZWZpbmUgX19waHlzX3RvX2J1cyh4KQkoKHgpICsgKElYUDIzWFhfUENJX1NEUkFNX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKKyNkZWZpbmUgX19idXNfdG9fcGh5cyh4KQkoKHgpIC0gKElYUDIzWFhfUENJX1NEUkFNX09GRlNFVCAtIFBIWVNfT0ZGU0VUKSkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHYpCV9fcGh5c190b19idXMoX192aXJ0X3RvX3BoeXModikpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoYikJX19waHlzX3RvX3ZpcnQoX19idXNfdG9fcGh5cyhiKSkKKyNkZWZpbmUgX19wZm5fdG9fYnVzKHApCQlfX3BoeXNfdG9fYnVzKF9fcGZuX3RvX3BoeXMocCkpCisjZGVmaW5lIF9fYnVzX3RvX3BmbihiKQkJX19waHlzX3RvX3BmbihfX2J1c190b19waHlzKGIpKQogCiAjZGVmaW5lIGFyY2hfaXNfY29oZXJlbnQoKQkxCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IDI2NGY0ZDUuLjllNTA3MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtMTc5LDIxICsxNzksMjEgQEAKIAloZWxwCiAgICAgICAgICAgSVhQNHh4IHByb3ZpZGVzIHR3byBtZXRob2RzIG9mIGFjY2Vzc2luZyBQQ0kgbWVtb3J5IHNwYWNlOgogCi0gICAgICAgICAgMSkgQSBkaXJlY3QgbWFwcGVkIHdpbmRvdyBmcm9tIDB4NDgwMDAwMDAgdG8gMHg0YmZmZmZmZiAoNjRNQikuCisgICAgICAgICAgMSkgQSBkaXJlY3QgbWFwcGVkIHdpbmRvdyBmcm9tIDB4NDgwMDAwMDAgdG8gMHg0QkZGRkZGRiAoNjRNQikuCiAgICAgICAgICAgICAgVG8gYWNjZXNzIFBDSSB2aWEgdGhpcyBzcGFjZSwgd2Ugc2ltcGx5IGlvcmVtYXAoKSB0aGUgQkFSCiAgICAgICAgICAgICAgaW50byB0aGUga2VybmVsIGFuZCB3ZSBjYW4gdXNlIHRoZSBzdGFuZGFyZCByZWFkW2J3bF0vd3JpdGVbYndsXQogICAgICAgICAgICAgIG1hY3Jvcy4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBkdWUgdG8gc3BlZWQgYnV0IGl0Ci0gICAgICAgICAgICAgbGltaXRzIHRoZSBzeXN0ZW0gdG8ganVzdCA2NE1CIG9mIFBDSSBtZW1vcnkuIFRoaXMgY2FuIGJlIAorICAgICAgICAgICAgIGxpbWl0cyB0aGUgc3lzdGVtIHRvIGp1c3QgNjRNQiBvZiBQQ0kgbWVtb3J5LiBUaGlzIGNhbiBiZQogICAgICAgICAgICAgIHByb2JsZW1hdGljIGlmIHVzaW5nIHZpZGVvIGNhcmRzIGFuZCBvdGhlciBtZW1vcnktaGVhdnkgZGV2aWNlcy4KLSAgICAgICAgICAKLSAgICAgICAgICAyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZSAKLQkgICAgIGNvbmZpZ3VyZWQgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVycyB0byBhY2Nlc3MgUENJIFRoaXMgYWxsb3dzIAotCSAgICAgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpIG9mIG1lbW9yeSBvbiB0aGUgYnVzLiAKLQkgICAgIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IGV2ZXJ5IFBDSSBhY2Nlc3MgcmVxdWlyZXMgCi0JICAgICB0aHJlZSBsb2NhbCByZWdpc3RlciBhY2Nlc3NlcyBwbHVzIGEgc3BpbmxvY2ssIGJ1dCBpbiBzb21lIAotCSAgICAgY2FzZXMgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBhY2NlcHRhYmxlLiBJbiBhZGRpdGlvbiwgeW91IGNhbm5vdCAKLQkgICAgIG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzIGNhc2UgZHVlIHRvIHRoZSBpbmRpcmVjdCBuYXR1cmUKLQkgICAgIG9mIHRoZSBQQ0kgd2luZG93LgorCisJICAyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZQorCSAgICAgY29uZmlndXJlZCB0byB1c2UgaW5kaXJlY3QgcmVnaXN0ZXJzIHRvIGFjY2VzcyB0aGUgd2hvbGUgUENJCisJICAgICBtZW1vcnkgc3BhY2UuIFRoaXMgY3VycmVudGx5IGFsbG93cyBmb3IgdXAgdG8gMSBHQiAoMHgxMDAwMDAwMAorCSAgICAgdG8gMHg0RkZGRkZGRikgb2YgbWVtb3J5IG9uIHRoZSBidXMuIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcworCSAgICAgaXMgdGhhdCBldmVyeSBQQ0kgYWNjZXNzIHJlcXVpcmVzIHRocmVlIGxvY2FsIHJlZ2lzdGVyIGFjY2Vzc2VzCisJICAgICBwbHVzIGEgc3BpbmxvY2ssIGJ1dCBpbiBzb21lIGNhc2VzIHRoZSBwZXJmb3JtYW5jZSBoaXQgaXMKKwkgICAgIGFjY2VwdGFibGUuIEluIGFkZGl0aW9uLCB5b3UgY2Fubm90IG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzCisJICAgICBjYXNlIGR1ZSB0byB0aGUgaW5kaXJlY3QgbmF0dXJlIG9mIHRoZSBQQ0kgd2luZG93LgogCiAJICBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0IG1ldGhvZCBpcyB1c2VkLiBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91CiAJICBuZWVkIHRvIHVzZSB0aGUgaW5kaXJlY3QgbWV0aG9kIGluc3RlYWQuIElmIHlvdSBkb24ndCBrbm93CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9hdmlsYS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXBjaS5jCmluZGV4IDA4ZDY1ZGMuLjg0NWUxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXBjaS5jCkBAIC0yMiw0MCArMjIsNDUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAorI2RlZmluZSBBVklMQV9NQVhfREVWCTQKKyNkZWZpbmUgTE9GVF9NQVhfREVWCTYKKyNkZWZpbmUgSVJRX0xJTkVTCTQKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIElOVEEJCTExCisjZGVmaW5lIElOVEIJCTEwCisjZGVmaW5lIElOVEMJCTkKKyNkZWZpbmUgSU5URAkJOAorCiB2b2lkIF9faW5pdCBhdmlsYV9wY2lfcHJlaW5pdCh2b2lkKQogewotCXNldF9pcnFfdHlwZShJUlFfQVZJTEFfUENJX0lOVEEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9BVklMQV9QQ0lfSU5UQiwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0FWSUxBX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCXNldF9pcnFfdHlwZShJUlFfQVZJTEFfUENJX0lOVEQsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0KKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEEpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQiksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRDKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEQpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCWl4cDR4eF9wY2lfcHJlaW5pdCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhdmlsYV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKLQlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbQVZJTEFfUENJX0lSUV9MSU5FU10gPSB7Ci0JCUlSUV9BVklMQV9QQ0lfSU5UQSwKLQkJSVJRX0FWSUxBX1BDSV9JTlRCLAotCQlJUlFfQVZJTEFfUENJX0lOVEMsCi0JCUlSUV9BVklMQV9QQ0lfSU5URAorCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtJUlFfTElORVNdID0geworCQlJWFA0WFhfR1BJT19JUlEoSU5UQSksCisJCUlYUDRYWF9HUElPX0lSUShJTlRCKSwKKwkJSVhQNFhYX0dQSU9fSVJRKElOVEMpLAorCQlJWFA0WFhfR1BJT19JUlEoSU5URCkKIAl9OwogCi0JaW50IGlycSA9IC0xOwotCiAJaWYgKHNsb3QgPj0gMSAmJgotCXNsb3QgPD0gKG1hY2hpbmVfaXNfbG9mdCgpID8gTE9GVF9QQ0lfTUFYX0RFViA6IEFWSUxBX1BDSV9NQVhfREVWKSAmJgotCQlwaW4gPj0gMSAmJiBwaW4gPD0gQVZJTEFfUENJX0lSUV9MSU5FUykgewotCQlpcnEgPSBwY2lfaXJxX3RhYmxlWyhzbG90ICsgcGluIC0gMikgJSA0XTsKLQl9CisJICAgIHNsb3QgPD0gKG1hY2hpbmVfaXNfbG9mdCgpID8gTE9GVF9NQVhfREVWIDogQVZJTEFfTUFYX0RFVikgJiYKKwkgICAgcGluID49IDEgJiYgcGluIDw9IElSUV9MSU5FUykKKwkJcmV0dXJuIHBjaV9pcnFfdGFibGVbKHNsb3QgKyBwaW4gLSAyKSAlIDRdOwogCi0JcmV0dXJuIGlycTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0cnVjdCBod19wY2kgYXZpbGFfcGNpIF9faW5pdGRhdGEgPSB7CkBAIC03NSw0ICs4MCwzIEBACiB9CiAKIHN1YnN5c19pbml0Y2FsbChhdmlsYV9wY2lfaW5pdCk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9hdmlsYS1zZXR1cC5jCmluZGV4IDc5Nzk5NWMuLjZlNTU4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvYXZpbGEtc2V0dXAuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+Ci0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0yOSw2ICsyOCw5IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNkZWZpbmUgQVZJTEFfU0RBX1BJTgk3CisjZGVmaW5lIEFWSUxBX1NDTF9QSU4JNgorCiBzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgYXZpbGFfZmxhc2hfZGF0YSA9IHsKIAkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKIAkud2lkdGgJCT0gMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwppbmRleCA3MGFmY2ZlLi5jNGEwMTU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCkBAIC00ODEsMTEgKzQ4MSw3IEBACiAKIAlyZXNbMV0ubmFtZSA9ICJQQ0kgTWVtb3J5IFNwYWNlIjsKIAlyZXNbMV0uc3RhcnQgPSBQQ0lCSU9TX01JTl9NRU07Ci0jaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCi0JcmVzWzFdLmVuZCA9IDB4NGJmZmZmZmY7Ci0jZWxzZQotCXJlc1sxXS5lbmQgPSAweDRmZmZmZmZmOwotI2VuZGlmCisJcmVzWzFdLmVuZCA9IFBDSUJJT1NfTUFYX01FTTsKIAlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKIAogCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IGNmZDUyZmIuLjNiYmY0MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZ3Bpb190b19pcnEpOwogCi1pbnQgaXJxX3RvX2dwaW8oaW50IGlycSkKK2ludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBncGlvID0gKGlycSA8IDMyKSA/IGlycTJncGlvW2lycV0gOiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMKaW5kZXggZWZkZGYwMS4uYjk3OGVhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1wY2kuYwpAQCAtMTgsMjcgKzE4LDMxIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAKKyNkZWZpbmUgU0xPVDBfREVWSUQJMTQKKyNkZWZpbmUgU0xPVDFfREVWSUQJMTUKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIFNMT1QwX0lOVEEJNgorI2RlZmluZSBTTE9UMV9JTlRBCTExCisKIHZvaWQgX19pbml0IGNveW90ZV9wY2lfcHJlaW5pdCh2b2lkKQogewotCXNldF9pcnFfdHlwZShJUlFfQ09ZT1RFX1BDSV9TTE9UMCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0NPWU9URV9QQ0lfU0xPVDEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0KKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKFNMT1QwX0lOVEEpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoU0xPVDFfSU5UQSksIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGNveW90ZV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKLQlpZiAoc2xvdCA9PSBDT1lPVEVfUENJX1NMT1QwX0RFVklEKQotCQlyZXR1cm4gSVJRX0NPWU9URV9QQ0lfU0xPVDA7Ci0JZWxzZSBpZiAoc2xvdCA9PSBDT1lPVEVfUENJX1NMT1QxX0RFVklEKQotCQlyZXR1cm4gSVJRX0NPWU9URV9QQ0lfU0xPVDE7CisJaWYgKHNsb3QgPT0gU0xPVDBfREVWSUQpCisJCXJldHVybiBJWFA0WFhfR1BJT19JUlEoU0xPVDBfSU5UQSk7CisJZWxzZSBpZiAoc2xvdCA9PSBTTE9UMV9ERVZJRCkKKwkJcmV0dXJuIElYUDRYWF9HUElPX0lSUShTTE9UMV9JTlRBKTsKIAllbHNlIHJldHVybiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtc2V0dXAuYwppbmRleCBhYWIxOTU0Li4yNWJmNWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtc2V0dXAuYwpAQCAtMjUsNiArMjUsMTUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAorI2RlZmluZSBDT1lPVEVfSURFX0JBU0VfUEhZUwlJWFA0WFhfRVhQX0JVU19CQVNFKDMpCisjZGVmaW5lIENPWU9URV9JREVfQkFTRV9WSVJUCTB4RkZGRTEwMDAKKyNkZWZpbmUgQ09ZT1RFX0lERV9SRUdJT05fU0laRQkweDEwMDAKKworI2RlZmluZSBDT1lPVEVfSURFX0RBVEFfUE9SVAkweEZGRkUxMEUwCisjZGVmaW5lIENPWU9URV9JREVfQ1RSTF9QT1JUCTB4RkZGRTEwRkMKKyNkZWZpbmUgQ09ZT1RFX0lERV9FUlJPUl9QT1JUCTB4RkZGRTEwRTIKKyNkZWZpbmUgSVJRX0NPWU9URV9JREUJCUlSUV9JWFA0WFhfR1BJTzUKKwogc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGNveW90ZV9mbGFzaF9kYXRhID0gewogCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAogCS53aWR0aAkJPSAyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZHNtZzYwMC1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2RzbWc2MDAtcGNpLmMKaW5kZXggOTI2ZDE1Zi4uZmE3MGZlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZHNtZzYwMC1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9kc21nNjAwLXBjaS5jCkBAIC0xOSwzOSArMTksNDUgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjZGVmaW5lIE1BWF9ERVYJCTQKKyNkZWZpbmUgSVJRX0xJTkVTCTMKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIElOVEEJCTExCisjZGVmaW5lIElOVEIJCTEwCisjZGVmaW5lIElOVEMJCTkKKyNkZWZpbmUgSU5URAkJOAorI2RlZmluZSBJTlRFCQk3CisjZGVmaW5lIElOVEYJCTYKKwogdm9pZCBfX2luaXQgZHNtZzYwMF9wY2lfcHJlaW5pdCh2b2lkKQogewotCXNldF9pcnFfdHlwZShJUlFfRFNNRzYwMF9QQ0lfSU5UQSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0RTTUc2MDBfUENJX0lOVEIsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9EU01HNjAwX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCXNldF9pcnFfdHlwZShJUlFfRFNNRzYwMF9QQ0lfSU5URCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0RTTUc2MDBfUENJX0lOVEUsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9EU01HNjAwX1BDSV9JTlRGLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRBKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEIpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQyksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlREKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEUpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5URiksIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGRzbWc2MDBfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7Ci0Jc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW0RTTUc2MDBfUENJX01BWF9ERVZdW0RTTUc2MDBfUENJX0lSUV9MSU5FU10gPQotCXsKLQkJeyBJUlFfRFNNRzYwMF9QQ0lfSU5URSwgLTEsIC0xIH0sCi0JCXsgSVJRX0RTTUc2MDBfUENJX0lOVEEsIC0xLCAtMSB9LAotCQl7IElSUV9EU01HNjAwX1BDSV9JTlRCLCBJUlFfRFNNRzYwMF9QQ0lfSU5UQywgSVJRX0RTTUc2MDBfUENJX0lOVEQgfSwKLQkJeyBJUlFfRFNNRzYwMF9QQ0lfSU5URiwgLTEsIC0xIH0sCisJc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW01BWF9ERVZdW0lSUV9MSU5FU10gPSB7CisJCXsgSVhQNFhYX0dQSU9fSVJRKElOVEUpLCAtMSwgLTEgfSwKKwkJeyBJWFA0WFhfR1BJT19JUlEoSU5UQSksIC0xLCAtMSB9LAorCQl7IElYUDRYWF9HUElPX0lSUShJTlRCKSwgSVhQNFhYX0dQSU9fSVJRKElOVEMpLAorCQkgIElYUDRYWF9HUElPX0lSUShJTlREKSB9LAorCQl7IElYUDRYWF9HUElPX0lSUShJTlRGKSwgLTEsIC0xIH0sCiAJfTsKIAotCWludCBpcnEgPSAtMTsKKwlpZiAoc2xvdCA+PSAxICYmIHNsb3QgPD0gTUFYX0RFViAmJiBwaW4gPj0gMSAmJiBwaW4gPD0gSVJRX0xJTkVTKQorCQlyZXR1cm4gcGNpX2lycV90YWJsZVtzbG90IC0gMV1bcGluIC0gMV07CiAKLQlpZiAoc2xvdCA+PSAxICYmIHNsb3QgPD0gRFNNRzYwMF9QQ0lfTUFYX0RFViAmJgotCQlwaW4gPj0gMSAmJiBwaW4gPD0gRFNNRzYwMF9QQ0lfSVJRX0xJTkVTKQotCQlpcnEgPSBwY2lfaXJxX3RhYmxlW3Nsb3QtMV1bcGluLTFdOwotCi0JcmV0dXJuIGlycTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0cnVjdCBod19wY2kgX19pbml0ZGF0YSBkc21nNjAwX3BjaSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2RzbWc2MDAtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2RzbWc2MDAtc2V0dXAuYwppbmRleCBhNTFiZmE2Li43YzFmYTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9kc21nNjAwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZHNtZzYwMC1zZXR1cC5jCkBAIC0zMyw2ICszMywyMyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCisjZGVmaW5lIERTTUc2MDBfU0RBX1BJTgkJNQorI2RlZmluZSBEU01HNjAwX1NDTF9QSU4JCTQKKworLyogRFNNLUc2MDAgVGltZXIgU2V0dGluZyAqLworI2RlZmluZSBEU01HNjAwX0ZSRVEJCTY2MDAwMDAwCisKKy8qIEJ1dHRvbnMgKi8KKyNkZWZpbmUgRFNNRzYwMF9QQl9HUElPCQkxNQkvKiBwb3dlciBidXR0b24gKi8KKyNkZWZpbmUgRFNNRzYwMF9SQl9HUElPCQkzCS8qIHJlc2V0IGJ1dHRvbiAqLworCisvKiBQb3dlciBjb250cm9sICovCisjZGVmaW5lIERTTUc2MDBfUE9fR1BJTwkJMgkvKiBwb3dlciBvZmYgKi8KKworLyogTEVEcyAqLworI2RlZmluZSBEU01HNjAwX0xFRF9QV1JfR1BJTwkwCisjZGVmaW5lIERTTUc2MDBfTEVEX1dMQU5fR1BJTwkxNAorCiBzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgZHNtZzYwMF9mbGFzaF9kYXRhID0gewogCS5tYXBfbmFtZQkJPSAiY2ZpX3Byb2JlIiwKIAkud2lkdGgJCQk9IDIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9mc2ctcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9mc2ctcGNpLmMKaW5kZXggY2ExMmE5Yy4uNWE4MTBjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZnNnLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2ZzZy1wY2kuYwpAQCAtMTksMzMgKzE5LDM4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAorI2RlZmluZSBNQVhfREVWCQkzCisjZGVmaW5lIElSUV9MSU5FUwkzCisKKy8qIFBDSSBjb250cm9sbGVyIEdQSU8gdG8gSVJRIHBpbiBtYXBwaW5ncyAqLworI2RlZmluZSBJTlRBCTYKKyNkZWZpbmUgSU5UQgk3CisjZGVmaW5lIElOVEMJNQorCiB2b2lkIF9faW5pdCBmc2dfcGNpX3ByZWluaXQodm9pZCkKIHsKLQlzZXRfaXJxX3R5cGUoSVJRX0ZTR19QQ0lfSU5UQSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0ZTR19QQ0lfSU5UQiwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0ZTR19QQ0lfSU5UQywgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQorCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQSksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRCKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEMpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCWl4cDR4eF9wY2lfcHJlaW5pdCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBmc2dfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7Ci0Jc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW0ZTR19QQ0lfSVJRX0xJTkVTXSA9IHsKLQkJSVJRX0ZTR19QQ0lfSU5UQywKLQkJSVJRX0ZTR19QQ0lfSU5UQiwKLQkJSVJRX0ZTR19QQ0lfSU5UQSwKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbSVJRX0xJTkVTXSA9IHsKKwkJSVhQNFhYX0dQSU9fSVJRKElOVEMpLAorCQlJWFA0WFhfR1BJT19JUlEoSU5UQiksCisJCUlYUDRYWF9HUElPX0lSUShJTlRBKSwKIAl9OwogCiAJaW50IGlycSA9IC0xOwotCXNsb3QgPSBzbG90IC0gMTE7CisJc2xvdCAtPSAxMTsKIAotCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBGU0dfUENJX01BWF9ERVYgJiYKLQkgICAgcGluID49IDEgJiYgcGluIDw9IEZTR19QQ0lfSVJRX0xJTkVTKQotCQlpcnEgPSBwY2lfaXJxX3RhYmxlWyhzbG90IC0gMSldOworCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBNQVhfREVWICYmIHBpbiA+PSAxICYmIHBpbiA8PSBJUlFfTElORVMpCisJCWlycSA9IHBjaV9pcnFfdGFibGVbc2xvdCAtIDFdOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBNYXBwZWQgc2xvdCAlZCBwaW4gJWQgdG8gSVJRICVkXG4iLAogCSAgICAgICBfX2Z1bmNfXywgc2xvdCwgcGluLCBpcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9mc2ctc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2ZzZy1zZXR1cC5jCmluZGV4IDVhZGQyMmYuLmU3ZjRiZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2ZzZy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2ZzZy1zZXR1cC5jCkBAIC0yNCwxMiArMjQsMTggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKKyNkZWZpbmUgRlNHX1NEQV9QSU4JCTEyCisjZGVmaW5lIEZTR19TQ0xfUElOCQkxMworCisjZGVmaW5lIEZTR19TQl9HUElPCQk0CS8qIHN5bmMgYnV0dG9uICovCisjZGVmaW5lIEZTR19SQl9HUElPCQk5CS8qIHJlc2V0IGJ1dHRvbiAqLworI2RlZmluZSBGU0dfVUJfR1BJTwkJMTAJLyogdXNiIGJ1dHRvbiAqLworCiBzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgZnNnX2ZsYXNoX2RhdGEgPSB7CiAJLm1hcF9uYW1lCQk9ICJjZmlfcHJvYmUiLAogCS53aWR0aAkJCT0gMiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2dvcmFtb19tbHIuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2dvcmFtb19tbHIuYwppbmRleCBhNzMzYjhmLi4xYzI4MDQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9nb3JhbW9fbWxyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ29yYW1vX21sci5jCkBAIC0xNywyOSArMTcsMjggQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogCi0jZGVmaW5lIHhncGlvX2lycShuKQkJKElSUV9JWFA0WFhfR1BJTyAjIyBuKQotI2RlZmluZSBncGlvX2lycShuKQkJeGdwaW9faXJxKG4pCi0KICNkZWZpbmUgU0xPVF9FVEhBCQkweDBCCS8qIElEU0VMID0gQUQyMSAqLwogI2RlZmluZSBTTE9UX0VUSEIJCTB4MEMJLyogSURTRUwgPSBBRDIwICovCiAjZGVmaW5lIFNMT1RfTVBDSQkJMHgwRAkvKiBJRFNFTCA9IEFEMTkgKi8KICNkZWZpbmUgU0xPVF9ORUMJCTB4MEUJLyogSURTRUwgPSBBRDE4ICovCiAKLSNkZWZpbmUgSVJRX0VUSEEJCUlSUV9JWFA0WFhfR1BJTzQKLSNkZWZpbmUgSVJRX0VUSEIJCUlSUV9JWFA0WFhfR1BJTzUKLSNkZWZpbmUgSVJRX05FQwkJCUlSUV9JWFA0WFhfR1BJTzMKLSNkZWZpbmUgSVJRX01QQ0kJCUlSUV9JWFA0WFhfR1BJTzEyCi0KIC8qIEdQSU8gbGluZXMgKi8KICNkZWZpbmUgR1BJT19TQ0wJCTAKICNkZWZpbmUgR1BJT19TREEJCTEKICNkZWZpbmUgR1BJT19TVFIJCTIKKyNkZWZpbmUgR1BJT19JUlFfTkVDCQkzCisjZGVmaW5lIEdQSU9fSVJRX0VUSEEJCTQKKyNkZWZpbmUgR1BJT19JUlFfRVRIQgkJNQogI2RlZmluZSBHUElPX0hTUzBfRENEX04JCTYKICNkZWZpbmUgR1BJT19IU1MxX0RDRF9OCQk3CisjZGVmaW5lIEdQSU9fVUFSVDBfRENECQk4CisjZGVmaW5lIEdQSU9fVUFSVDFfRENECQk5CiAjZGVmaW5lIEdQSU9fSFNTMF9DVFNfTgkJMTAKICNkZWZpbmUgR1BJT19IU1MxX0NUU19OCQkxMQorI2RlZmluZSBHUElPX0lSUV9NUENJCQkxMgogI2RlZmluZSBHUElPX0hTUzFfUlRTX04JCTEzCiAjZGVmaW5lIEdQSU9fSFNTMF9SVFNfTgkJMTQKKy8qIEdQSU8xNSBpcyBub3QgY29ubmVjdGVkICovCiAKIC8qIENvbnRyb2wgb3V0cHV0cyBmcm9tIDc0SEM0MDk0ICovCiAjZGVmaW5lIENPTlRST0xfSFNTMF9DTEtfSU5UCTAKQEAgLTE1Miw3ICsxNTEsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaHNzX2RjZF9pcnEoaW50IGlycSwgdm9pZCAqcGRldikKIHsKLQlpbnQgaSwgcG9ydCA9IChpcnEgPT0gZ3Bpb19pcnEoR1BJT19IU1MxX0RDRF9OKSk7CisJaW50IGksIHBvcnQgPSAoaXJxID09IElYUDRYWF9HUElPX0lSUShHUElPX0hTUzFfRENEX04pKTsKIAlncGlvX2xpbmVfZ2V0KHBvcnQgPyBHUElPX0hTUzFfRENEX04gOiBHUElPX0hTUzBfRENEX04sICZpKTsKIAlzZXRfY2Fycmllcl9jYl90YWJbcG9ydF0ocGRldiwgIWkpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE2NSw5ICsxNjQsOSBAQAogCWludCBpLCBpcnE7CiAKIAlpZiAoIXBvcnQpCi0JCWlycSA9IGdwaW9faXJxKEdQSU9fSFNTMF9EQ0RfTik7CisJCWlycSA9IElYUDRYWF9HUElPX0lSUShHUElPX0hTUzBfRENEX04pOwogCWVsc2UKLQkJaXJxID0gZ3Bpb19pcnEoR1BJT19IU1MxX0RDRF9OKTsKKwkJaXJxID0gSVhQNFhYX0dQSU9fSVJRKEdQSU9fSFNTMV9EQ0RfTik7CiAKIAlncGlvX2xpbmVfZ2V0KHBvcnQgPyBHUElPX0hTUzFfRENEX04gOiBHUElPX0hTUzBfRENEX04sICZpKTsKIAlzZXRfY2Fycmllcl9jYihwZGV2LCAhaSk7CkBAIC0xODgsOCArMTg3LDggQEAKIAogc3RhdGljIHZvaWQgaHNzX2Nsb3NlKGludCBwb3J0LCB2b2lkICpwZGV2KQogewotCWZyZWVfaXJxKHBvcnQgPyBncGlvX2lycShHUElPX0hTUzFfRENEX04pIDogZ3Bpb19pcnEoR1BJT19IU1MwX0RDRF9OKSwKLQkJIHBkZXYpOworCWZyZWVfaXJxKHBvcnQgPyBJWFA0WFhfR1BJT19JUlEoR1BJT19IU1MxX0RDRF9OKSA6CisJCSBJWFA0WFhfR1BJT19JUlEoR1BJT19IU1MwX0RDRF9OKSwgcGRldik7CiAJc2V0X2NhcnJpZXJfY2JfdGFiWyEhcG9ydF0gPSBOVUxMOyAvKiBjYXRjaCBidWdzICovCiAKIAlzZXRfY29udHJvbChwb3J0ID8gQ09OVFJPTF9IU1MxX0RUUl9OIDogQ09OVFJPTF9IU1MwX0RUUl9OLCAxKTsKQEAgLTQyMSw4ICs0MjAsOCBAQAogCWdwaW9fbGluZV9jb25maWcoR1BJT19IU1MxX1JUU19OLCBJWFA0WFhfR1BJT19PVVQpOwogCWdwaW9fbGluZV9jb25maWcoR1BJT19IU1MwX0RDRF9OLCBJWFA0WFhfR1BJT19JTik7CiAJZ3Bpb19saW5lX2NvbmZpZyhHUElPX0hTUzFfRENEX04sIElYUDRYWF9HUElPX0lOKTsKLQlzZXRfaXJxX3R5cGUoZ3Bpb19pcnEoR1BJT19IU1MwX0RDRF9OKSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKLQlzZXRfaXJxX3R5cGUoZ3Bpb19pcnEoR1BJT19IU1MxX0RDRF9OKSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKEdQSU9fSFNTMF9EQ0RfTiksIElSUV9UWVBFX0VER0VfQk9USCk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShHUElPX0hTUzFfRENEX04pLCBJUlFfVFlQRV9FREdFX0JPVEgpOwogCiAJc2V0X2NvbnRyb2woQ09OVFJPTF9IU1MwX0RUUl9OLCAxKTsKIAlzZXRfY29udHJvbChDT05UUk9MX0hTUzFfRFRSX04sIDEpOwpAQCAtNDQyLDEwICs0NDEsMTAgQEAKICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgdm9pZCBfX2luaXQgZ21scl9wY2lfcHJlaW5pdCh2b2lkKQogewotCXNldF9pcnFfdHlwZShJUlFfRVRIQSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0VUSEIsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9ORUMsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9NUENJLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoR1BJT19JUlFfRVRIQSksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShHUElPX0lSUV9FVEhCKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKEdQSU9fSVJRX05FQyksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShHUElPX0lSUV9NUENJKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIApAQCAtNDY2LDEwICs0NjUsMTAgQEAKIHN0YXRpYyBpbnQgX19pbml0IGdtbHJfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3dpdGNoKHNsb3QpIHsKLQljYXNlIFNMT1RfRVRIQToJcmV0dXJuIElSUV9FVEhBOwotCWNhc2UgU0xPVF9FVEhCOglyZXR1cm4gSVJRX0VUSEI7Ci0JY2FzZSBTTE9UX05FQzoJcmV0dXJuIElSUV9ORUM7Ci0JZGVmYXVsdDoJcmV0dXJuIElSUV9NUENJOworCWNhc2UgU0xPVF9FVEhBOglyZXR1cm4gSVhQNFhYX0dQSU9fSVJRKEdQSU9fSVJRX0VUSEEpOworCWNhc2UgU0xPVF9FVEhCOglyZXR1cm4gSVhQNFhYX0dQSU9fSVJRKEdQSU9fSVJRX0VUSEIpOworCWNhc2UgU0xPVF9ORUM6CXJldHVybiBJWFA0WFhfR1BJT19JUlEoR1BJT19JUlFfTkVDKTsKKwlkZWZhdWx0OglyZXR1cm4gSVhQNFhYX0dQSU9fSVJRKEdQSU9fSVJRX01QQ0kpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1wY2kuYwppbmRleCA3YjhhMmMzLi4yNWQyYzMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1wY2kuYwpAQCAtMjYsMTQgKzI2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2d0d3g1NzE1Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAKKyNkZWZpbmUgU0xPVDBfREVWSUQJMAorI2RlZmluZSBTTE9UMV9ERVZJRAkxCisjZGVmaW5lIElOVEEJCTEwIC8qIHNsb3QgMSBoYXMgSU5UQSBhbmQgSU5UQiBjcm9zc2VkICovCisjZGVmaW5lIElOVEIJCTExCisKIC8qCi0gKiBUaGUgZXhhY3QgR1BJTyBwaW5zIGFuZCBJUlFzIGFyZSBkZWZpbmVkIGluIGFyY2gtaXhwNHh4L2d0d3g1NzE1LmgKICAqIFNsb3QgMCBpc24ndCBhY3R1YWxseSBwb3B1bGF0ZWQgd2l0aCBhIGNhcmQgY29ubmVjdG9yIGJ1dAogICogd2UgaW5pdGlhbGl6ZSBpdCBhbnl3YXkgaW4gY2FzZSBhIGZ1dHVyZSB2ZXJzaW9uIGhhcyB0aGUKICAqIHNsb3QgcG9wdWxhdGVkIG9yIHNvbWVvbmUgd2l0aCBnb29kIHNvbGRlcmluZyBza2lsbHMgaGFzCkBAIC00MSwzMiArNDMsMjYgQEAKICAqLwogdm9pZCBfX2luaXQgZ3R3eDU3MTVfcGNpX3ByZWluaXQodm9pZCkKIHsKLQlzZXRfaXJxX3R5cGUoR1RXWDU3MTVfUENJX1NMT1QwX0lOVEFfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCXNldF9pcnFfdHlwZShHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQl9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKEdUV1g1NzE1X1BDSV9TTE9UMV9JTlRBX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoR1RXWDU3MTVfUENJX1NMT1QxX0lOVEJfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRBKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEIpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCWl4cDR4eF9wY2lfcHJlaW5pdCgpOwogfQogCiAKIHN0YXRpYyBpbnQgX19pbml0IGd0d3g1NzE1X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewotCWludCByYzsKLQlzdGF0aWMgaW50IGd0d3g1NzE1X2lycW1hcAotCQkJW0dUV1g1NzE1X1BDSV9TTE9UX0NPVU5UXQotCQkJW0dUV1g1NzE1X1BDSV9JTlRfUElOX0NPVU5UXSA9IHsKLQl7R1RXWDU3MTVfUENJX1NMT1QwX0lOVEFfSVJRLCBHVFdYNTcxNV9QQ0lfU0xPVDBfSU5UQl9JUlF9LAotCXtHVFdYNTcxNV9QQ0lfU0xPVDFfSU5UQV9JUlEsIEdUV1g1NzE1X1BDSV9TTE9UMV9JTlRCX0lSUX0sCi19OworCWludCByYyA9IC0xOwogCi0JaWYgKHNsb3QgPj0gR1RXWDU3MTVfUENJX1NMT1RfQ09VTlQgfHwKLQkJCXBpbiA+PSBHVFdYNTcxNV9QQ0lfSU5UX1BJTl9DT1VOVCkgcmMgPSAtMTsKLQllbHNlCi0JCXJjID0gZ3R3eDU3MTVfaXJxbWFwW3Nsb3RdW3Bpbi0xXTsKKwlpZiAoKHNsb3QgPT0gU0xPVDBfREVWSUQgJiYgcGluID09IDEpIHx8CisJICAgIChzbG90ID09IFNMT1QxX0RFVklEICYmIHBpbiA9PSAyKSkKKwkJcmMgPSBJWFA0WFhfR1BJT19JUlEoSU5UQSk7CisJZWxzZSBpZiAoKHNsb3QgPT0gU0xPVDBfREVWSUQgJiYgcGluID09IDIpIHx8CisJCSAoc2xvdCA9PSBTTE9UMV9ERVZJRCAmJiBwaW4gPT0gMSkpCisJCXJjID0gSVhQNFhYX0dQSU9fSVJRKElOVEIpOwogCi0JcHJpbnRrKCIlczogTWFwcGVkIHNsb3QgJWQgcGluICVkIHRvIElSUSAlZFxuIiwgX19mdW5jX18sIHNsb3QsIHBpbiwgcmMpOwotCXJldHVybihyYyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1hcHBlZCBzbG90ICVkIHBpbiAlZCB0byBJUlEgJWRcbiIsCisJICAgICAgIF9fZnVuY19fLCBzbG90LCBwaW4sIHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0cnVjdCBod19wY2kgZ3R3eDU3MTVfcGNpIF9faW5pdGRhdGEgPSB7CkBAIC04MSw5ICs3Nyw3IEBACiBpbnQgX19pbml0IGd0d3g1NzE1X3BjaV9pbml0KHZvaWQpCiB7CiAJaWYgKG1hY2hpbmVfaXNfZ3R3eDU3MTUoKSkKLQl7CiAJCXBjaV9jb21tb25faW5pdCgmZ3R3eDU3MTVfcGNpKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1zZXR1cC5jCmluZGV4IDI1YzIxZDYuLjBiYzcxODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgpAQCAtMzcsNyArMzYsMzQgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPG1hY2gvZ3R3eDU3MTUuaD4KKworLyogR1BJTyA1LDYsNyBhbmQgMTIgYXJlIGhhcmQgd2lyZWQgdG8gdGhlIEtlbmRpbiBLUzg5OTVNIFN3aXRjaAorICAgYW5kIG9wZXJhdGUgYXMgYW4gU1BJIHR5cGUgaW50ZXJmYWNlLiAgVGhlIGRldGFpbHMgb2YgdGhlIGludGVyZmFjZQorICAgYXJlIGF2YWlsYWJsZSBvbiBLZW5kaW4vTWljcmVsJ3Mgd2ViIHNpdGUuICovCisKKyNkZWZpbmUgR1RXWDU3MTVfS1NTUElfU0VMRUNUCTUKKyNkZWZpbmUgR1RXWDU3MTVfS1NTUElfVFhECTYKKyNkZWZpbmUgR1RXWDU3MTVfS1NTUElfQ0xPQ0sJNworI2RlZmluZSBHVFdYNTcxNV9LU1NQSV9SWEQJMTIKKworLyogVGhlICJyZXNldCIgYnV0dG9uIGlzIHdpcmVkIHRvIEdQSU8gMy4KKyAgIFRoZSBHUElPIGlzIGJyb3VnaHQgImxvdyIgd2hlbiB0aGUgYnV0dG9uIGlzIHB1c2hlZC4gKi8KKworI2RlZmluZSBHVFdYNTcxNV9CVVRUT05fR1BJTwkzCisKKy8qIEJvYXJkIExhYmVsICAgICAgRnJvbnQgTGFiZWwKKyAgIExFRDEgICAgICAgICAgICAgUG93ZXIKKyAgIExFRDIgICAgICAgICAgICAgV2lyZWxlc3MtRworICAgTEVEMyAgICAgICAgICAgICBub3QgcG9wdWxhdGVkIGJ1dCBjb3VsZCBiZQorICAgTEVENCAgICAgICAgICAgICBJbnRlcm5ldAorICAgTEVENSAtIExFRDggICAgICBDb250cm9sbGVkIGJ5IEtTODk5NU0gU3dpdGNoCisgICBMRUQ5ICAgICAgICAgICAgIERNWiAqLworCisjZGVmaW5lIEdUV1g1NzE1X0xFRDFfR1BJTwkyCisjZGVmaW5lIEdUV1g1NzE1X0xFRDJfR1BJTwk5CisjZGVmaW5lIEdUV1g1NzE1X0xFRDNfR1BJTwk4CisjZGVmaW5lIEdUV1g1NzE1X0xFRDRfR1BJTwkxCisjZGVmaW5lIEdUV1g1NzE1X0xFRDlfR1BJTwk0CiAKIC8qCiAgKiBYc2NhbGUgVUFSVCByZWdpc3RlcnMgYXJlIDMyIGJpdHMgd2lkZSB3aXRoIG9ubHkgdGhlIGxlYXN0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvYXZpbGEuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9hdmlsYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjQwY2I2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9hdmlsYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9hdmlsYS5oCi0gKgotICogR2F0ZXdvcmtzIEF2aWxhIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCi0gKgotICogQXV0aG9yOiBNaWNoYWVsLUx1a2UgSm9uZXMgPG1sajI4QGNhbS5hYy51az4KLSAqCi0gKiBCYXNlZCBvbiBpeGRwNDI1LmgKLSAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4iCi0jZW5kaWYKLQotI2RlZmluZQlBVklMQV9TREFfUElOCQk3Ci0jZGVmaW5lCUFWSUxBX1NDTF9QSU4JCTYKLQotLyoKLSAqIEFWSUxBIFBDSSBJUlFzCi0gKi8KLSNkZWZpbmUgQVZJTEFfUENJX01BWF9ERVYJNAotI2RlZmluZSBMT0ZUX1BDSV9NQVhfREVWICAgIDYKLSNkZWZpbmUgQVZJTEFfUENJX0lSUV9MSU5FUwk0Ci0KLQotLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCi0jZGVmaW5lIEFWSUxBX1BDSV9JTlRBX1BJTgkxMQotI2RlZmluZSBBVklMQV9QQ0lfSU5UQl9QSU4JMTAKLSNkZWZpbmUgQVZJTEFfUENJX0lOVENfUElOCTkKLSNkZWZpbmUgQVZJTEFfUENJX0lOVERfUElOCTgKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvY295b3RlLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvY295b3RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxN2FjNmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2NveW90ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9jb3lvdGUuaAotICoKLSAqIEFESSBFbmdpbmVlcmluZyBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucwotICoKLSAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gCi0gKiAKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgCi0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+IgotI2VuZGlmCi0KLS8qIFBDSSBjb250cm9sbGVyIEdQSU8gdG8gSVJRIHBpbiBtYXBwaW5ncyAqLwotI2RlZmluZQlDT1lPVEVfUENJX1NMT1QwX1BJTgk2Ci0jZGVmaW5lCUNPWU9URV9QQ0lfU0xPVDFfUElOCTExCi0KLSNkZWZpbmUJQ09ZT1RFX1BDSV9TTE9UMF9ERVZJRAkxNAotI2RlZmluZQlDT1lPVEVfUENJX1NMT1QxX0RFVklECTE1Ci0KLSNkZWZpbmUJQ09ZT1RFX0lERV9CQVNFX1BIWVMJSVhQNFhYX0VYUF9CVVNfQkFTRSgzKQotI2RlZmluZQlDT1lPVEVfSURFX0JBU0VfVklSVAkweEZGRkUxMDAwCi0jZGVmaW5lCUNPWU9URV9JREVfUkVHSU9OX1NJWkUJMHgxMDAwCi0KLSNkZWZpbmUJQ09ZT1RFX0lERV9EQVRBX1BPUlQJMHhGRkZFMTBFMAotI2RlZmluZQlDT1lPVEVfSURFX0NUUkxfUE9SVAkweEZGRkUxMEZDCi0jZGVmaW5lCUNPWU9URV9JREVfRVJST1JfUE9SVAkweEZGRkUxMEUyCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kc21nNjAwLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZHNtZzYwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzA4N2EzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kc21nNjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogRFNNLUc2MDAgcGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVG93ZXIgVGVjaG5vbG9naWVzCi0gKiBBdXRob3I6IEFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PgotICoKLSAqIGJhc2VkIG9uIGl4ZHA0MjUuaDoKLSAqCUNvcHlyaWdodCAyMDA0IChDKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9IX18KLSNlcnJvciAiRG8gbm90IGluY2x1ZGUgdGhpcyBkaXJlY3RseSwgaW5zdGVhZCAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPiIKLSNlbmRpZgotCi0jZGVmaW5lIERTTUc2MDBfU0RBX1BJTgkJNQotI2RlZmluZSBEU01HNjAwX1NDTF9QSU4JCTQKLQotLyoKLSAqIERTTUc2MDAgUENJIElSUXMKLSAqLwotI2RlZmluZSBEU01HNjAwX1BDSV9NQVhfREVWCTQKLSNkZWZpbmUgRFNNRzYwMF9QQ0lfSVJRX0xJTkVTCTMKLQotCi0vKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KLSNkZWZpbmUgRFNNRzYwMF9QQ0lfSU5UQV9QSU4JMTEKLSNkZWZpbmUgRFNNRzYwMF9QQ0lfSU5UQl9QSU4JMTAKLSNkZWZpbmUgRFNNRzYwMF9QQ0lfSU5UQ19QSU4JOQotI2RlZmluZSBEU01HNjAwX1BDSV9JTlREX1BJTgk4Ci0jZGVmaW5lIERTTUc2MDBfUENJX0lOVEVfUElOCTcKLSNkZWZpbmUgRFNNRzYwMF9QQ0lfSU5URl9QSU4JNgotCi0vKiBEU00tRzYwMCBUaW1lciBTZXR0aW5nICovCi0jZGVmaW5lIERTTUc2MDBfRlJFUSA2NjAwMDAwMAotCi0vKiBCdXR0b25zICovCi0KLSNkZWZpbmUgRFNNRzYwMF9QQl9HUElPCQkxNQkvKiBwb3dlciBidXR0b24gKi8KLSNkZWZpbmUgRFNNRzYwMF9SQl9HUElPCQkzCS8qIHJlc2V0IGJ1dHRvbiAqLwotCi0vKiBQb3dlciBjb250cm9sICovCi0KLSNkZWZpbmUgRFNNRzYwMF9QT19HUElPCQkyCS8qIHBvd2VyIG9mZiAqLwotCi0vKiBMRURzICovCi0KLSNkZWZpbmUgRFNNRzYwMF9MRURfUFdSX0dQSU8JMAotI2RlZmluZSBEU01HNjAwX0xFRF9XTEFOX0dQSU8JMTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9mc2cuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9mc2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwMmI3ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZnNnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2ZzZy5oCi0gKgotICogRnJlZWNvbSBGU0ctMyBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucwotICoKLSAqIEF1dGhvcjogUm9kIFdoaXRieSA8cm9kQHdoaXRieS5pZC5hdT4KLSAqIEF1dGhvcjogVG9tYXN6IENobWllbGV3c2tpIDxtYW5nb29Ad3BrZy5vcmc+Ci0gKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcKLSAqCi0gKiBCYXNlZCBvbiBjb3lvdGUuaCBieQotICogQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+IgotI2VuZGlmCi0KLSNkZWZpbmUgRlNHX1NEQV9QSU4JCTEyCi0jZGVmaW5lIEZTR19TQ0xfUElOCQkxMwotCi0vKgotICogRlNHIFBDSSBJUlFzCi0gKi8KLSNkZWZpbmUgRlNHX1BDSV9NQVhfREVWCQkzCi0jZGVmaW5lIEZTR19QQ0lfSVJRX0xJTkVTCTMKLQotCi0vKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KLSNkZWZpbmUgRlNHX1BDSV9JTlRBX1BJTgk2Ci0jZGVmaW5lIEZTR19QQ0lfSU5UQl9QSU4JNwotI2RlZmluZSBGU0dfUENJX0lOVENfUElOCTUKLQotLyogQnV0dG9ucyAqLwotCi0jZGVmaW5lIEZTR19TQl9HUElPCQk0CS8qIHN5bmMgYnV0dG9uICovCi0jZGVmaW5lIEZTR19SQl9HUElPCQk5CS8qIHJlc2V0IGJ1dHRvbiAqLwotI2RlZmluZSBGU0dfVUJfR1BJTwkJMTAJLyogdXNiIGJ1dHRvbiAqLwotCi0vKiBMRURzICovCi0KLSNkZWZpbmUgRlNHX0xFRF9XTEFOX0JJVAkwCi0jZGVmaW5lIEZTR19MRURfV0FOX0JJVAkJMQotI2RlZmluZSBGU0dfTEVEX1NBVEFfQklUCTIKLSNkZWZpbmUgRlNHX0xFRF9VU0JfQklUCQk0Ci0jZGVmaW5lIEZTR19MRURfUklOR19CSVQJNQotI2RlZmluZSBGU0dfTEVEX1NZTkNfQklUCTcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGNkNWFlYzIuLmE1Zjg3ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtNzAsNyArNzAsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4JCQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwogCiBleHRlcm4gaW50IGdwaW9fdG9faXJxKGludCBncGlvKTsKLWV4dGVybiBpbnQgaXJxX3RvX2dwaW8oaW50IGdwaW8pOworZXh0ZXJuIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9ndHd4NTcxNS5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2d0d3g1NzE1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNWUyMDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2d0d3g1NzE1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9ndHd4NTcxNS5oCi0gKgotICogR2VtdGVrIEdUV1g1NzE1IEdhdGV3YXkgKExpbmtzeXMgV1JWNTRHKQotICoKLSAqIENvcHlyaWdodCAyMDA0IChjKSBHZW9yZ2UgVC4gSm9zZXBoCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+IgotI2VuZGlmCi0jaW5jbHVkZSAiaXJxcy5oIgotCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8wCTAKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzEJMQotI2RlZmluZSBHVFdYNTcxNV9HUElPMgkyCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8zCTMKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzQJNAotI2RlZmluZSBHVFdYNTcxNV9HUElPNQk1Ci0jZGVmaW5lIEdUV1g1NzE1X0dQSU82CTYKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzcJNwotI2RlZmluZSBHVFdYNTcxNV9HUElPOAk4Ci0jZGVmaW5lIEdUV1g1NzE1X0dQSU85CTkKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzEwCTEwCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8xMQkxMQotI2RlZmluZSBHVFdYNTcxNV9HUElPMTIJMTIKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzEzCTEzCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8xNAkxNAotCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8wX0lSUQkJCUlSUV9JWFA0WFhfR1BJTzAKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzFfSVJRCQkJSVJRX0lYUDRYWF9HUElPMQotI2RlZmluZSBHVFdYNTcxNV9HUElPMl9JUlEJCQlJUlFfSVhQNFhYX0dQSU8yCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8zX0lSUQkJCUlSUV9JWFA0WFhfR1BJTzMKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzRfSVJRCQkJSVJRX0lYUDRYWF9HUElPNAotI2RlZmluZSBHVFdYNTcxNV9HUElPNV9JUlEJCQlJUlFfSVhQNFhYX0dQSU81Ci0jZGVmaW5lIEdUV1g1NzE1X0dQSU82X0lSUQkJCUlSUV9JWFA0WFhfR1BJTzYKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzdfSVJRCQkJSVJRX0lYUDRYWF9HUElPNwotI2RlZmluZSBHVFdYNTcxNV9HUElPOF9JUlEJCQlJUlFfSVhQNFhYX0dQSU84Ci0jZGVmaW5lIEdUV1g1NzE1X0dQSU85X0lSUQkJCUlSUV9JWFA0WFhfR1BJTzkKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzEwX0lSUQkJSVJRX0lYUDRYWF9HUElPMTAKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzExX0lSUQkJSVJRX0lYUDRYWF9HUElPMTEKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzEyX0lSUQkJSVJRX0lYUDRYWF9HUElPMTIKLSNkZWZpbmUgR1RXWDU3MTVfR1BJTzEzX0lSUQkJSVJRX0lYUDRYWF9TV19JTlQxCi0jZGVmaW5lIEdUV1g1NzE1X0dQSU8xNF9JUlEJCUlSUV9JWFA0WFhfU1dfSU5UMgotCi0vKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MKLQotCQkJSU5UQQlJTlRCCi1TTE9UIDAJMTAJCTExCi1TTE9UIDEJMTEJCTEwCi0KLSovCi0KLSNkZWZpbmUJR1RXWDU3MTVfUENJX1NMT1QwX0RFVklECTAKLSNkZWZpbmUJR1RXWDU3MTVfUENJX1NMT1QwX0lOVEFfR1BJTwlHVFdYNTcxNV9HUElPMTAKLSNkZWZpbmUJR1RXWDU3MTVfUENJX1NMT1QwX0lOVEJfR1BJTwlHVFdYNTcxNV9HUElPMTEKLSNkZWZpbmUJR1RXWDU3MTVfUENJX1NMT1QwX0lOVEFfSVJRCUdUV1g1NzE1X0dQSU8xMF9JUlEKLSNkZWZpbmUJR1RXWDU3MTVfUENJX1NMT1QwX0lOVEJfSVJRCUdUV1g1NzE1X0dQSU8xMV9JUlEKLQotI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDFfREVWSUQJMQotI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDFfSU5UQV9HUElPCUdUV1g1NzE1X0dQSU8xMQotI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDFfSU5UQl9HUElPCUdUV1g1NzE1X0dQSU8xMAotI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDFfSU5UQV9JUlEJR1RXWDU3MTVfR1BJTzExX0lSUQotI2RlZmluZQlHVFdYNTcxNV9QQ0lfU0xPVDFfSU5UQl9JUlEJR1RXWDU3MTVfR1BJTzEwX0lSUQotCi0jZGVmaW5lIEdUV1g1NzE1X1BDSV9TTE9UX0NPVU5UCQkJMgotI2RlZmluZSBHVFdYNTcxNV9QQ0lfSU5UX1BJTl9DT1VOVAkJMgotCi0vKgotICogR1BJTyA1LDYsNyBhbmQxMiBhcmUgaGFyZCB3aXJlZCB0byB0aGUgS2VuZGluIEtTODk5NU0gU3dpdGNoCi0gKiBhbmQgb3BlcmF0ZSBhcyBhbiBTUEkgdHlwZSBpbnRlcmZhY2UuICBUaGUgZGV0YWlscyBvZiB0aGUgaW50ZXJmYWNlCi0gKiBhcmUgYXZhaWxhYmxlIG9uIEtlbmRpbi9NaWNyZWwncyB3ZWIgc2l0ZS4KLSAqLwotCi0jZGVmaW5lIEdUV1g1NzE1X0tTU1BJX1NFTEVDVAlHVFdYNTcxNV9HUElPNQotI2RlZmluZSBHVFdYNTcxNV9LU1NQSV9UWEQJCUdUV1g1NzE1X0dQSU82Ci0jZGVmaW5lIEdUV1g1NzE1X0tTU1BJX0NMT0NLCUdUV1g1NzE1X0dQSU83Ci0jZGVmaW5lIEdUV1g1NzE1X0tTU1BJX1JYRAkJR1RXWDU3MTVfR1BJTzEyCi0KLS8qCi0gKiBUaGUgInJlc2V0IiBidXR0b24gaXMgd2lyZWQgdG8gR1BJTyAzLgotICogVGhlIEdQSU8gaXMgYnJvdWdodCAibG93IiB3aGVuIHRoZSBidXR0b24gaXMgcHVzaGVkLgotICovCi0KLSNkZWZpbmUgR1RXWDU3MTVfQlVUVE9OX0dQSU8JR1RXWDU3MTVfR1BJTzMKLSNkZWZpbmUgR1RXWDU3MTVfQlVUVE9OX0lSUQlHVFdYNTcxNV9HUElPM19JUlEKLQotLyoKLSAqICBCb2FyZCBMYWJlbCAgICAgIEZyb250IExhYmVsCi0gKiAgTEVEMSAgICAgICAgICAgICBQb3dlcgotICogIExFRDIgICAgICAgICAgICAgV2lyZWxlc3MtRwotICogIExFRDMgICAgICAgICAgICAgbm90IHBvcHVsYXRlZCBidXQgY291bGQgYmUKLSAqICBMRUQ0ICAgICAgICAgICAgIEludGVybmV0Ci0gKiAgTEVENSAtIExFRDggICAgICBDb250cm9sbGVkIGJ5IEtTODk5NU0gU3dpdGNoCi0gKiAgTEVEOSAgICAgICAgICAgICBETVoKLSAqLwotCi0jZGVmaW5lIEdUV1g1NzE1X0xFRDFfR1BJTwkJR1RXWDU3MTVfR1BJTzIKLSNkZWZpbmUgR1RXWDU3MTVfTEVEMl9HUElPCQlHVFdYNTcxNV9HUElPOQotI2RlZmluZSBHVFdYNTcxNV9MRUQzX0dQSU8JCUdUV1g1NzE1X0dQSU84Ci0jZGVmaW5lIEdUV1g1NzE1X0xFRDRfR1BJTwkJR1RXWDU3MTVfR1BJTzEKLSNkZWZpbmUgR1RXWDU3MTVfTEVEOV9HUElPCQlHVFdYNTcxNV9HUElPNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBmNThhNDNhLi5mOWQxYzQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTgsNyArMTgsMTMgQEAKICNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9IX18KIAogI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgwMDAwMTAwMAotI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCShjcHVfaXNfaXhwNDN4KCkgPyAweDQwMDAwMDAwIDogMHg0ODAwMDAwMCkKKyNpZmRlZiBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQorI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCTB4MTAwMDAwMDAgLyogMSBHQiBvZiBpbmRpcmVjdCBQQ0kgTU1JTyBzcGFjZSAqLworI2RlZmluZSBQQ0lCSU9TX01BWF9NRU0JCTB4NEZGRkZGRkYKKyNlbHNlCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHg0ODAwMDAwMCAvKiA2NCBNQiBvZiBQQ0kgTU1JTyBzcGFjZSAqLworI2RlZmluZSBQQ0lCSU9TX01BWF9NRU0JCTB4NEJGRkZGRkYKKyNlbmRpZgogCiAvKgogICogV2Ugb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGRtYS1tYXNrIHJvdXRpbmVzIGZvciBib3VuY2luZy4KQEAgLTM3LDE0ICs0Myw0IEBACiAvKiBQbGF0Zm9ybSBoZWxwZXIgZnVuY3Rpb25zIGFuZCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgInBsYXRmb3JtLmgiCiAKLS8qIFBsYXRmb3JtIHNwZWNpZmljIGRldGFpbHMgKi8KLSNpbmNsdWRlICJpeGRwNDI1LmgiCi0jaW5jbHVkZSAiYXZpbGEuaCIKLSNpbmNsdWRlICJjb3lvdGUuaCIKLSNpbmNsdWRlICJwcnBtYzExMDAuaCIKLSNpbmNsdWRlICJuc2x1Mi5oIgotI2luY2x1ZGUgIm5hczEwMGQuaCIKLSNpbmNsdWRlICJkc21nNjAwLmgiCi0jaW5jbHVkZSAiZnNnLmgiCi0KICNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggOGE5NDdkNC4uNmVhN2UyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTI2LDIyICsyNiwyMCBAQAogLyoKICAqIElYUDR4eCBwcm92aWRlcyB0d28gbWV0aG9kcyBvZiBhY2Nlc3NpbmcgUENJIG1lbW9yeSBzcGFjZToKICAqCi0gKiAxKSBBIGRpcmVjdCBtYXBwZWQgd2luZG93IGZyb20gMHg0ODAwMDAwMCB0byAweDRiZmZmZmZmICg2NE1CKS4KKyAqIDEpIEEgZGlyZWN0IG1hcHBlZCB3aW5kb3cgZnJvbSAweDQ4MDAwMDAwIHRvIDB4NEJGRkZGRkYgKDY0TUIpLgogICogICAgVG8gYWNjZXNzIFBDSSB2aWEgdGhpcyBzcGFjZSwgd2Ugc2ltcGx5IGlvcmVtYXAoKSB0aGUgQkFSCiAgKiAgICBpbnRvIHRoZSBrZXJuZWwgYW5kIHdlIGNhbiB1c2UgdGhlIHN0YW5kYXJkIHJlYWRbYndsXS93cml0ZVtid2xdCiAgKiAgICBtYWNyb3MuIFRoaXMgaXMgdGhlIHByZWZmZXJlZCBtZXRob2QgZHVlIHRvIHNwZWVkIGJ1dCBpdAotICogICAgbGltaXRzIHRoZSBzeXN0ZW0gdG8ganVzdCA2NE1CIG9mIFBDSSBtZW1vcnkuIFRoaXMgY2FuIGJlIAotICogICAgcHJvYmxhbWF0aWMgaWYgdXNpbmcgdmlkZW8gY2FyZHMgYW5kIG90aGVyIG1lbW9yeS1oZWF2eQotICogICAgdGFyZ2V0cy4KKyAqICAgIGxpbWl0cyB0aGUgc3lzdGVtIHRvIGp1c3QgNjRNQiBvZiBQQ0kgbWVtb3J5LiBUaGlzIGNhbiBiZQorICogICAgcHJvYmxlbWF0aWMgaWYgdXNpbmcgdmlkZW8gY2FyZHMgYW5kIG90aGVyIG1lbW9yeS1oZWF2eSB0YXJnZXRzLgogICoKLSAqIDIpIElmID4gNjRNQiBvZiBtZW1vcnkgc3BhY2UgaXMgcmVxdWlyZWQsIHRoZSBJWFA0eHggY2FuIGJlIGNvbmZpZ3VyZWQKLSAqICAgIHRvIHVzZSBpbmRpcmVjdCByZWdpc3RlcnMgdG8gYWNjZXNzIFBDSSAoYXMgd2UgZG8gYmVsb3cgZm9yIEkvTwotICogICAgdHJhbnNhY3Rpb25zKS4gVGhpcyBhbGxvd3MgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpCi0gKiAgICBvZiBtZW1vcnkgb24gdGhlIGJ1cy4gVGhlIGRpc2FkdmFudGFnZSBvZiB0aGlzIGlzIHRoYXQgZXZlcnkgCi0gKiAgICBQQ0kgYWNjZXNzIHJlcXVpcmVzIHRocmVlIGxvY2FsIHJlZ2lzdGVyIGFjY2Vzc2VzIHBsdXMgYSBzcGlubG9jaywKLSAqICAgIGJ1dCBpbiBzb21lIGNhc2VzIHRoZSBwZXJmb3JtYW5jZSBoaXQgaXMgYWNjZXB0YWJsZS4gSW4gYWRkaXRpb24sCi0gKiAgICB5b3UgY2Fubm90IG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzIGNhc2UuCi0gKgorICogMikgSWYgPiA2NE1CIG9mIG1lbW9yeSBzcGFjZSBpcyByZXF1aXJlZCwgdGhlIElYUDR4eCBjYW4gdXNlIGluZGlyZWN0CisgKiAgICByZWdpc3RlcnMgdG8gYWNjZXNzIHRoZSB3aG9sZSA0IEdCIG9mIFBDSSBtZW1vcnkgc3BhY2UgKGFzIHdlIGRvIGJlbG93CisgKiAgICBmb3IgSS9PIHRyYW5zYWN0aW9ucykuIFRoaXMgYWxsb3dzIGN1cnJlbnRseSBmb3IgdXAgdG8gMSBHQiAoMHgxMDAwMDAwMAorICogICAgdG8gMHg0RkZGRkZGRikgb2YgbWVtb3J5IG9uIHRoZSBidXMuIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0CisgKiAgICBldmVyeSBQQ0kgYWNjZXNzIHJlcXVpcmVzIHRocmVlIGxvY2FsIHJlZ2lzdGVyIGFjY2Vzc2VzIHBsdXMgYSBzcGlubG9jaywKKyAqICAgIGJ1dCBpbiBzb21lIGNhc2VzIHRoZSBwZXJmb3JtYW5jZSBoaXQgaXMgYWNjZXB0YWJsZS4gSW4gYWRkaXRpb24sIHlvdQorICogICAgY2Fubm90IG1tYXAoKSBQQ0kgZGV2aWNlcyBpbiB0aGlzIGNhc2UuCiAgKi8KICNpZm5kZWYJQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKIApAQCAtNTUsNDggKzUzLDUyIEBACiAgKiBhY2Nlc3MgcmVnaXN0ZXJzLiBJZiBzb21ldGhpbmcgb3V0c2lkZSBvZiBQQ0kgaXMgaW9yZW1hcCdkLCB3ZQogICogZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLV9faXhwNHh4X2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IG10eXBlKQorCitzdGF0aWMgaW5saW5lIGludCBpc19wY2lfbWVtb3J5KHUzMiBhZGRyKQogewotCWlmKChhZGRyIDwgUENJQklPU19NSU5fTUVNKSB8fCAoYWRkciA+IDB4NGZmZmZmZmYpKQorCXJldHVybiAoYWRkciA+PSBQQ0lCSU9TX01JTl9NRU0pICYmIChhZGRyIDw9IDB4NEZGRkZGRkYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqIF9faW5kaXJlY3RfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplLAorCQkJCQkJdW5zaWduZWQgaW50IG10eXBlKQoreworCWlmICghaXNfcGNpX21lbW9yeShhZGRyKSkKIAkJcmV0dXJuIF9fYXJtX2lvcmVtYXAoYWRkciwgc2l6ZSwgbXR5cGUpOwogCiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9faXhwNHh4X2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSB2b2lkIF9faW5kaXJlY3RfaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JaWYgKChfX2ZvcmNlIHUzMilhZGRyID49IFZNQUxMT0NfU1RBUlQpCisJaWYgKCFpc19wY2lfbWVtb3J5KChfX2ZvcmNlIHUzMilhZGRyKSkKIAkJX19pb3VubWFwKGFkZHIpOwogfQogCi0jZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGEsIHMsIGYpCQlfX2l4cDR4eF9pb3JlbWFwKGEsIHMsIGYpCi0jZGVmaW5lCV9fYXJjaF9pb3VubWFwKGEpCQlfX2l4cDR4eF9pb3VubWFwKGEpCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGEsIHMsIGYpCQlfX2luZGlyZWN0X2lvcmVtYXAoYSwgcywgZikKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAoYSkJCV9faW5kaXJlY3RfaW91bm1hcChhKQogCi0jZGVmaW5lCXdyaXRlYih2LCBwKQkJCV9faXhwNHh4X3dyaXRlYih2LCBwKQotI2RlZmluZQl3cml0ZXcodiwgcCkJCQlfX2l4cDR4eF93cml0ZXcodiwgcCkKLSNkZWZpbmUJd3JpdGVsKHYsIHApCQkJX19peHA0eHhfd3JpdGVsKHYsIHApCisjZGVmaW5lIHdyaXRlYih2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGViKHYsIHApCisjZGVmaW5lIHdyaXRldyh2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGV3KHYsIHApCisjZGVmaW5lIHdyaXRlbCh2LCBwKQkJCV9faW5kaXJlY3Rfd3JpdGVsKHYsIHApCiAKLSNkZWZpbmUJd3JpdGVzYihwLCB2LCBsKQkJX19peHA0eHhfd3JpdGVzYihwLCB2LCBsKQotI2RlZmluZQl3cml0ZXN3KHAsIHYsIGwpCQlfX2l4cDR4eF93cml0ZXN3KHAsIHYsIGwpCi0jZGVmaW5lCXdyaXRlc2wocCwgdiwgbCkJCV9faXhwNHh4X3dyaXRlc2wocCwgdiwgbCkKLQkKLSNkZWZpbmUJcmVhZGIocCkJCQlfX2l4cDR4eF9yZWFkYihwKQotI2RlZmluZQlyZWFkdyhwKQkJCV9faXhwNHh4X3JlYWR3KHApCi0jZGVmaW5lCXJlYWRsKHApCQkJX19peHA0eHhfcmVhZGwocCkKLQkKLSNkZWZpbmUJcmVhZHNiKHAsIHYsIGwpCQkJX19peHA0eHhfcmVhZHNiKHAsIHYsIGwpCi0jZGVmaW5lCXJlYWRzdyhwLCB2LCBsKQkJCV9faXhwNHh4X3JlYWRzdyhwLCB2LCBsKQotI2RlZmluZQlyZWFkc2wocCwgdiwgbCkJCQlfX2l4cDR4eF9yZWFkc2wocCwgdiwgbCkKKyNkZWZpbmUgd3JpdGVzYihwLCB2LCBsKQkJX19pbmRpcmVjdF93cml0ZXNiKHAsIHYsIGwpCisjZGVmaW5lIHdyaXRlc3cocCwgdiwgbCkJCV9faW5kaXJlY3Rfd3JpdGVzdyhwLCB2LCBsKQorI2RlZmluZSB3cml0ZXNsKHAsIHYsIGwpCQlfX2luZGlyZWN0X3dyaXRlc2wocCwgdiwgbCkKIAotc3RhdGljIGlubGluZSB2b2lkIAotX19peHA0eHhfd3JpdGViKHU4IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCisjZGVmaW5lIHJlYWRiKHApCQkJX19pbmRpcmVjdF9yZWFkYihwKQorI2RlZmluZSByZWFkdyhwKQkJCV9faW5kaXJlY3RfcmVhZHcocCkKKyNkZWZpbmUgcmVhZGwocCkJCQlfX2luZGlyZWN0X3JlYWRsKHApCisKKyNkZWZpbmUgcmVhZHNiKHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc2IocCwgdiwgbCkKKyNkZWZpbmUgcmVhZHN3KHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc3cocCwgdiwgbCkKKyNkZWZpbmUgcmVhZHNsKHAsIHYsIGwpCQkJX19pbmRpcmVjdF9yZWFkc2wocCwgdiwgbCkKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5kaXJlY3Rfd3JpdGViKHU4IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCiB7CiAJdTMyIGFkZHIgPSAodTMyKXA7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKIAotCWlmIChhZGRyID49IFZNQUxMT0NfU1RBUlQpIHsKKwlpZiAoIWlzX3BjaV9tZW1vcnkoYWRkcikpIHsKIAkJX19yYXdfd3JpdGViKHZhbHVlLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEwNywyMCArMTA5LDE5IEBACiAJaXhwNHh4X3BjaV93cml0ZShhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfTUVNV1JJVEUsIGRhdGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9faXhwNHh4X3dyaXRlc2Iodm9sYXRpbGUgdm9pZCBfX2lvbWVtICpidXNfYWRkciwgY29uc3QgdTggKnZhZGRyLCBpbnQgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbmRpcmVjdF93cml0ZXNiKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYnVzX2FkZHIsCisJCQkJICAgICAgY29uc3QgdTggKnZhZGRyLCBpbnQgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCXdyaXRlYigqdmFkZHIrKywgYnVzX2FkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgCi1fX2l4cDR4eF93cml0ZXcodTE2IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbmRpcmVjdF93cml0ZXcodTE2IHZhbHVlLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCiB7CiAJdTMyIGFkZHIgPSAodTMyKXA7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKIAotCWlmIChhZGRyID49IFZNQUxMT0NfU1RBUlQpIHsKKwlpZiAoIWlzX3BjaV9tZW1vcnkoYWRkcikpIHsKIAkJX19yYXdfd3JpdGV3KHZhbHVlLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzMSwxOCArMTMyLDE4IEBACiAJaXhwNHh4X3BjaV93cml0ZShhZGRyLCBieXRlX2VuYWJsZXMgfCBOUF9DTURfTUVNV1JJVEUsIGRhdGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9faXhwNHh4X3dyaXRlc3codm9sYXRpbGUgdm9pZCBfX2lvbWVtICpidXNfYWRkciwgY29uc3QgdTE2ICp2YWRkciwgaW50IGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIF9faW5kaXJlY3Rfd3JpdGVzdyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmJ1c19hZGRyLAorCQkJCSAgICAgIGNvbnN0IHUxNiAqdmFkZHIsIGludCBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJd3JpdGV3KCp2YWRkcisrLCBidXNfYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAKLV9faXhwNHh4X3dyaXRlbCh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luZGlyZWN0X3dyaXRlbCh1MzIgdmFsdWUsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKIHsKIAl1MzIgYWRkciA9IChfX2ZvcmNlIHUzMilwOwotCWlmIChhZGRyID49IFZNQUxMT0NfU1RBUlQpIHsKKworCWlmICghaXNfcGNpX21lbW9yeShhZGRyKSkgewogCQlfX3Jhd193cml0ZWwodmFsdWUsIHApOwogCQlyZXR1cm47CiAJfQpAQCAtMTUwLDIwICsxNTEsMTkgQEAKIAlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIE5QX0NNRF9NRU1XUklURSwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9faXhwNHh4X3dyaXRlc2wodm9sYXRpbGUgdm9pZCBfX2lvbWVtICpidXNfYWRkciwgY29uc3QgdTMyICp2YWRkciwgaW50IGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIF9faW5kaXJlY3Rfd3JpdGVzbCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmJ1c19hZGRyLAorCQkJCSAgICAgIGNvbnN0IHUzMiAqdmFkZHIsIGludCBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJd3JpdGVsKCp2YWRkcisrLCBidXNfYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAKLV9faXhwNHh4X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBfX2luZGlyZWN0X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKIHsKIAl1MzIgYWRkciA9ICh1MzIpcDsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwogCi0JaWYgKGFkZHIgPj0gVk1BTExPQ19TVEFSVCkKKwlpZiAoIWlzX3BjaV9tZW1vcnkoYWRkcikpCiAJCXJldHVybiBfX3Jhd19yZWFkYihhZGRyKTsKIAogCW4gPSBhZGRyICUgNDsKQEAgLTE3NCwyMCArMTc0LDE5IEBACiAJcmV0dXJuIGRhdGEgPj4gKDgqbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19peHA0eHhfcmVhZHNiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYnVzX2FkZHIsIHU4ICp2YWRkciwgdTMyIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIF9faW5kaXJlY3RfcmVhZHNiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYnVzX2FkZHIsCisJCQkJICAgICB1OCAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJKnZhZGRyKysgPSByZWFkYihidXNfYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgCi1fX2l4cDR4eF9yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IF9faW5kaXJlY3RfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpwKQogewogCXUzMiBhZGRyID0gKHUzMilwOwogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CiAKLQlpZiAoYWRkciA+PSBWTUFMTE9DX1NUQVJUKQorCWlmICghaXNfcGNpX21lbW9yeShhZGRyKSkKIAkJcmV0dXJuIF9fcmF3X3JlYWR3KGFkZHIpOwogCiAJbiA9IGFkZHIgJSA0OwpAQCAtMTk4LDIwICsxOTcsMTkgQEAKIAlyZXR1cm4gZGF0YT4+KDgqbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAKLV9faXhwNHh4X3JlYWRzdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmJ1c19hZGRyLCB1MTYgKnZhZGRyLCB1MzIgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbmRpcmVjdF9yZWFkc3coY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpidXNfYWRkciwKKwkJCQkgICAgIHUxNiAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJKnZhZGRyKysgPSByZWFkdyhidXNfYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAKLV9faXhwNHh4X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2luZGlyZWN0X3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKIHsKIAl1MzIgYWRkciA9IChfX2ZvcmNlIHUzMilwOwogCXUzMiBkYXRhOwogCi0JaWYgKGFkZHIgPj0gVk1BTExPQ19TVEFSVCkKKwlpZiAoIWlzX3BjaV9tZW1vcnkoYWRkcikpCiAJCXJldHVybiBfX3Jhd19yZWFkbChwKTsKIAogCWlmIChpeHA0eHhfcGNpX3JlYWQoYWRkciwgTlBfQ01EX01FTVJFQUQsICZkYXRhKSkKQEAgLTIyMCw4ICsyMTgsOCBAQAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgCi1fX2l4cDR4eF9yZWFkc2woY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpidXNfYWRkciwgdTMyICp2YWRkciwgdTMyIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIF9faW5kaXJlY3RfcmVhZHNsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYnVzX2FkZHIsCisJCQkJICAgICB1MzIgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSp2YWRkcisrID0gcmVhZGwoYnVzX2FkZHIpOwpAQCAtMjM1LDcgKzIzMyw3IEBACiAjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxjLGwpCQlfbWVtY3B5X2Zyb21pbygoYSksKGMpLChsKSkKICNkZWZpbmUgbWVtY3B5X3RvaW8oYyxhLGwpCQlfbWVtY3B5X3RvaW8oKGMpLChhKSwobCkpCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJICovCiAKICNpZm5kZWYgQ09ORklHX1BDSQogCkBAIC0yNTAsMjUgKzI0OCw4IEBACiAgKiB0cmFuc2FjdGlvbi4gIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CiAgKiBJL08gZnVuY3Rpb25zLgogICovCi0jZGVmaW5lCW91dGIocCwgdikJCQlfX2l4cDR4eF9vdXRiKHAsIHYpCi0jZGVmaW5lCW91dHcocCwgdikJCQlfX2l4cDR4eF9vdXR3KHAsIHYpCi0jZGVmaW5lCW91dGwocCwgdikJCQlfX2l4cDR4eF9vdXRsKHAsIHYpCi0JCi0jZGVmaW5lCW91dHNiKHAsIHYsIGwpCQkJX19peHA0eHhfb3V0c2IocCwgdiwgbCkKLSNkZWZpbmUJb3V0c3cocCwgdiwgbCkJCQlfX2l4cDR4eF9vdXRzdyhwLCB2LCBsKQotI2RlZmluZQlvdXRzbChwLCB2LCBsKQkJCV9faXhwNHh4X291dHNsKHAsIHYsIGwpCiAKLSNkZWZpbmUJaW5iKHApCQkJCV9faXhwNHh4X2luYihwKQotI2RlZmluZQlpbncocCkJCQkJX19peHA0eHhfaW53KHApCi0jZGVmaW5lCWlubChwKQkJCQlfX2l4cDR4eF9pbmwocCkKLQotI2RlZmluZQlpbnNiKHAsIHYsIGwpCQkJX19peHA0eHhfaW5zYihwLCB2LCBsKQotI2RlZmluZQlpbnN3KHAsIHYsIGwpCQkJX19peHA0eHhfaW5zdyhwLCB2LCBsKQotI2RlZmluZQlpbnNsKHAsIHYsIGwpCQkJX19peHA0eHhfaW5zbChwLCB2LCBsKQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAKLV9faXhwNHh4X291dGIodTggdmFsdWUsIHUzMiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggdmFsdWUsIHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CiAJbiA9IGFkZHIgJSA0OwpAQCAtMjc3LDE1ICsyNTgsMTMgQEAKIAlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIGJ5dGVfZW5hYmxlcyB8IE5QX0NNRF9JT1dSSVRFLCBkYXRhKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIAotX19peHA0eHhfb3V0c2IodTMyIGlvX2FkZHIsIGNvbnN0IHU4ICp2YWRkciwgdTMyIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIG91dHNiKHUzMiBpb19hZGRyLCBjb25zdCB1OCAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKIAkJb3V0YigqdmFkZHIrKywgaW9fYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAKLV9faXhwNHh4X291dHcodTE2IHZhbHVlLCB1MzIgYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXR3KHUxNiB2YWx1ZSwgdTMyIGFkZHIpCiB7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKIAluID0gYWRkciAlIDQ7CkBAIC0yOTQsMjggKzI3MywyNCBAQAogCWl4cDR4eF9wY2lfd3JpdGUoYWRkciwgYnl0ZV9lbmFibGVzIHwgTlBfQ01EX0lPV1JJVEUsIGRhdGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgCi1fX2l4cDR4eF9vdXRzdyh1MzIgaW9fYWRkciwgY29uc3QgdTE2ICp2YWRkciwgdTMyIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIG91dHN3KHUzMiBpb19hZGRyLCBjb25zdCB1MTYgKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCW91dHcoY3B1X3RvX2xlMTYoKnZhZGRyKyspLCBpb19hZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIAotX19peHA0eHhfb3V0bCh1MzIgdmFsdWUsIHUzMiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIG91dGwodTMyIHZhbHVlLCB1MzIgYWRkcikKIHsKIAlpeHA0eHhfcGNpX3dyaXRlKGFkZHIsIE5QX0NNRF9JT1dSSVRFLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAKLV9faXhwNHh4X291dHNsKHUzMiBpb19hZGRyLCBjb25zdCB1MzIgKnZhZGRyLCB1MzIgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c2wodTMyIGlvX2FkZHIsIGNvbnN0IHUzMiAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKLQkJb3V0bCgqdmFkZHIrKywgaW9fYWRkcik7CisJCW91dGwoY3B1X3RvX2xlMzIoKnZhZGRyKyspLCBpb19hZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB1OCAKLV9faXhwNHh4X2luYih1MzIgYWRkcikKK3N0YXRpYyBpbmxpbmUgdTggaW5iKHUzMiBhZGRyKQogewogCXUzMiBuLCBieXRlX2VuYWJsZXMsIGRhdGE7CiAJbiA9IGFkZHIgJSA0OwpAQCAtMzI2LDE1ICszMDEsMTMgQEAKIAlyZXR1cm4gZGF0YSA+PiAoOCpuKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIAotX19peHA0eHhfaW5zYih1MzIgaW9fYWRkciwgdTggKnZhZGRyLCB1MzIgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1MzIgaW9fYWRkciwgdTggKnZhZGRyLCB1MzIgY291bnQpCiB7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSp2YWRkcisrID0gaW5iKGlvX2FkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiAKLV9faXhwNHh4X2ludyh1MzIgYWRkcikKK3N0YXRpYyBpbmxpbmUgdTE2IGludyh1MzIgYWRkcikKIHsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwogCW4gPSBhZGRyICUgNDsKQEAgLTM0NSwxNSArMzE4LDEzIEBACiAJcmV0dXJuIGRhdGE+Pig4Km4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgCi1fX2l4cDR4eF9pbnN3KHUzMiBpb19hZGRyLCB1MTYgKnZhZGRyLCB1MzIgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zdyh1MzIgaW9fYWRkciwgdTE2ICp2YWRkciwgdTMyIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tKQogCQkqdmFkZHIrKyA9IGxlMTZfdG9fY3B1KGludyhpb19hZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIAotX19peHA0eHhfaW5sKHUzMiBhZGRyKQorc3RhdGljIGlubGluZSB1MzIgaW5sKHUzMiBhZGRyKQogewogCXUzMiBkYXRhOwogCWlmIChpeHA0eHhfcGNpX3JlYWQoYWRkciwgTlBfQ01EX0lPUkVBRCwgJmRhdGEpKQpAQCAtMzYyLDExICszMzMsMTAgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIAotX19peHA0eHhfaW5zbCh1MzIgaW9fYWRkciwgdTMyICp2YWRkciwgdTMyIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGluc2wodTMyIGlvX2FkZHIsIHUzMiAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl3aGlsZSAoY291bnQtLSkKLQkJKnZhZGRyKysgPSBpbmwoaW9fYWRkcik7CisJCSp2YWRkcisrID0gbGUzMl90b19jcHUoaW5sKGlvX2FkZHIpKTsKIH0KIAogI2RlZmluZSBQSU9fT0ZGU0VUICAgICAgMHgxMDAwMFVMCkBAIC0zNzQsMTk0ICszNDQsMTgzIEBACiAKICNkZWZpbmUJX19pc19pb19hZGRyZXNzKHApCSgoKHVuc2lnbmVkIGxvbmcpcCA+PSBQSU9fT0ZGU0VUKSAmJiBcCiAJCQkJCSgodW5zaWduZWQgbG9uZylwIDw9IChQSU9fTUFTSyArIFBJT19PRkZTRVQpKSkKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1fX2l4cDR4eF9pb3JlYWQ4KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKKworI2RlZmluZQlpb3JlYWQ4KHApCQkJaW9yZWFkOChwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9yZWFkOChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCi0JCXJldHVybgkodW5zaWduZWQgaW50KV9faXhwNHh4X2luYihwb3J0ICYgUElPX01BU0spOworCQlyZXR1cm4gKHVuc2lnbmVkIGludClpbmIocG9ydCAmIFBJT19NQVNLKTsKIAllbHNlCiAjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCiAJCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRiKHBvcnQpOwogI2Vsc2UKLQkJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19peHA0eHhfcmVhZGIoYWRkcik7CisJCXJldHVybiAodW5zaWduZWQgaW50KV9faW5kaXJlY3RfcmVhZGIoYWRkcik7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1fX2l4cDR4eF9pb3JlYWQ4X3JlcChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKnZhZGRyLCB1MzIgY291bnQpCisjZGVmaW5lCWlvcmVhZDhfcmVwKHAsIHYsIGMpCQlpb3JlYWQ4X3JlcChwLCB2LCBjKQorc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDhfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqdmFkZHIsIHUzMiBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKLQkJX19peHA0eHhfaW5zYihwb3J0ICYgUElPX01BU0ssIHZhZGRyLCBjb3VudCk7CisJCWluc2IocG9ydCAmIFBJT19NQVNLLCB2YWRkciwgY291bnQpOwogCWVsc2UKICNpZm5kZWYJQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKIAkJX19yYXdfcmVhZHNiKGFkZHIsIHZhZGRyLCBjb3VudCk7CiAjZWxzZQotCQlfX2l4cDR4eF9yZWFkc2IoYWRkciwgdmFkZHIsIGNvdW50KTsKKwkJX19pbmRpcmVjdF9yZWFkc2IoYWRkciwgdmFkZHIsIGNvdW50KTsKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotX19peHA0eHhfaW9yZWFkMTYoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQorI2RlZmluZQlpb3JlYWQxNihwKQkJCWlvcmVhZDE2KHApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb3JlYWQxNihjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCi0JCXJldHVybgkodW5zaWduZWQgaW50KV9faXhwNHh4X2ludyhwb3J0ICYgUElPX01BU0spOworCQlyZXR1cm4JKHVuc2lnbmVkIGludClpbncocG9ydCAmIFBJT19NQVNLKTsKIAllbHNlCiAjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCiAJCXJldHVybiBsZTE2X3RvX2NwdShfX3Jhd19yZWFkdygodTMyKXBvcnQpKTsKICNlbHNlCi0JCXJldHVybiAodW5zaWduZWQgaW50KV9faXhwNHh4X3JlYWR3KGFkZHIpOworCQlyZXR1cm4gKHVuc2lnbmVkIGludClfX2luZGlyZWN0X3JlYWR3KGFkZHIpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19peHA0eHhfaW9yZWFkMTZfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqdmFkZHIsIHUzMiBjb3VudCkKKyNkZWZpbmUJaW9yZWFkMTZfcmVwKHAsIHYsIGMpCQlpb3JlYWQxNl9yZXAocCwgdiwgYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQxNl9yZXAoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICp2YWRkciwKKwkJCQl1MzIgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCi0JCV9faXhwNHh4X2luc3cocG9ydCAmIFBJT19NQVNLLCB2YWRkciwgY291bnQpOworCQlpbnN3KHBvcnQgJiBQSU9fTUFTSywgdmFkZHIsIGNvdW50KTsKIAllbHNlCiAjaWZuZGVmCUNPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCiAJCV9fcmF3X3JlYWRzdyhhZGRyLCB2YWRkciwgY291bnQpOwogI2Vsc2UKLQkJX19peHA0eHhfcmVhZHN3KGFkZHIsIHZhZGRyLCBjb3VudCk7CisJCV9faW5kaXJlY3RfcmVhZHN3KGFkZHIsIHZhZGRyLCBjb3VudCk7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLV9faXhwNHh4X2lvcmVhZDMyKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKKyNkZWZpbmUJaW9yZWFkMzIocCkJCQlpb3JlYWQzMihwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9yZWFkMzIoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcjsKIAlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQotCQlyZXR1cm4JKHVuc2lnbmVkIGludClfX2l4cDR4eF9pbmwocG9ydCAmIFBJT19NQVNLKTsKKwkJcmV0dXJuCSh1bnNpZ25lZCBpbnQpaW5sKHBvcnQgJiBQSU9fTUFTSyk7CiAJZWxzZSB7CiAjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCiAJCXJldHVybiBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpX19yYXdfcmVhZGwoYWRkcikpOwogI2Vsc2UKLQkJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19peHA0eHhfcmVhZGwoYWRkcik7CisJCXJldHVybiAodW5zaWduZWQgaW50KV9faW5kaXJlY3RfcmVhZGwoYWRkcik7CiAjZW5kaWYKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19peHA0eHhfaW9yZWFkMzJfcmVwKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqdmFkZHIsIHUzMiBjb3VudCkKKyNkZWZpbmUJaW9yZWFkMzJfcmVwKHAsIHYsIGMpCQlpb3JlYWQzMl9yZXAocCwgdiwgYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlYWQzMl9yZXAoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICp2YWRkciwKKwkJCQl1MzIgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCi0JCV9faXhwNHh4X2luc2wocG9ydCAmIFBJT19NQVNLLCB2YWRkciwgY291bnQpOworCQlpbnNsKHBvcnQgJiBQSU9fTUFTSywgdmFkZHIsIGNvdW50KTsKIAllbHNlCiAjaWZuZGVmCUNPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCiAJCV9fcmF3X3JlYWRzbChhZGRyLCB2YWRkciwgY291bnQpOwogI2Vsc2UKLQkJX19peHA0eHhfcmVhZHNsKGFkZHIsIHZhZGRyLCBjb3VudCk7CisJCV9faW5kaXJlY3RfcmVhZHNsKGFkZHIsIHZhZGRyLCBjb3VudCk7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1fX2l4cDR4eF9pb3dyaXRlOCh1OCB2YWx1ZSwgdm9pZCBfX2lvbWVtICphZGRyKQorI2RlZmluZQlpb3dyaXRlOCh2LCBwKQkJCWlvd3JpdGU4KHYsIHApCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTgodTggdmFsdWUsIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKLQkJX19peHA0eHhfb3V0Yih2YWx1ZSwgcG9ydCAmIFBJT19NQVNLKTsKKwkJb3V0Yih2YWx1ZSwgcG9ydCAmIFBJT19NQVNLKTsKIAllbHNlCiAjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCiAJCV9fcmF3X3dyaXRlYih2YWx1ZSwgcG9ydCk7CiAjZWxzZQotCQlfX2l4cDR4eF93cml0ZWIodmFsdWUsIGFkZHIpOworCQlfX2luZGlyZWN0X3dyaXRlYih2YWx1ZSwgYWRkcik7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1fX2l4cDR4eF9pb3dyaXRlOF9yZXAodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICp2YWRkciwgdTMyIGNvdW50KQorI2RlZmluZQlpb3dyaXRlOF9yZXAocCwgdiwgYykJCWlvd3JpdGU4X3JlcChwLCB2LCBjKQorc3RhdGljIGlubGluZSB2b2lkIGlvd3JpdGU4X3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKnZhZGRyLAorCQkJCXUzMiBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKLQkJX19peHA0eHhfb3V0c2IocG9ydCAmIFBJT19NQVNLLCB2YWRkciwgY291bnQpOworCQlvdXRzYihwb3J0ICYgUElPX01BU0ssIHZhZGRyLCBjb3VudCk7CiAJZWxzZQogI2lmbmRlZiBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQogCQlfX3Jhd193cml0ZXNiKGFkZHIsIHZhZGRyLCBjb3VudCk7CiAjZWxzZQotCQlfX2l4cDR4eF93cml0ZXNiKGFkZHIsIHZhZGRyLCBjb3VudCk7CisJCV9faW5kaXJlY3Rfd3JpdGVzYihhZGRyLCB2YWRkciwgY291bnQpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19peHA0eHhfaW93cml0ZTE2KHUxNiB2YWx1ZSwgdm9pZCBfX2lvbWVtICphZGRyKQorI2RlZmluZQlpb3dyaXRlMTYodiwgcCkJCQlpb3dyaXRlMTYodiwgcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMTYodTE2IHZhbHVlLCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCi0JCV9faXhwNHh4X291dHcodmFsdWUsIHBvcnQgJiBQSU9fTUFTSyk7CisJCW91dHcodmFsdWUsIHBvcnQgJiBQSU9fTUFTSyk7CiAJZWxzZQogI2lmbmRlZiBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQogCQlfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYodmFsdWUpLCBhZGRyKTsKICNlbHNlCi0JCV9faXhwNHh4X3dyaXRldyh2YWx1ZSwgYWRkcik7CisJCV9faW5kaXJlY3Rfd3JpdGV3KHZhbHVlLCBhZGRyKTsKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9faXhwNHh4X2lvd3JpdGUxNl9yZXAodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICp2YWRkciwgdTMyIGNvdW50KQorI2RlZmluZQlpb3dyaXRlMTZfcmVwKHAsIHYsIGMpCQlpb3dyaXRlMTZfcmVwKHAsIHYsIGMpCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTE2X3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKnZhZGRyLAorCQkJCSB1MzIgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCWlmIChfX2lzX2lvX2FkZHJlc3MocG9ydCkpCi0JCV9faXhwNHh4X291dHN3KHBvcnQgJiBQSU9fTUFTSywgdmFkZHIsIGNvdW50KTsKKwkJb3V0c3cocG9ydCAmIFBJT19NQVNLLCB2YWRkciwgY291bnQpOwogCWVsc2UKICNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKIAkJX19yYXdfd3JpdGVzdyhhZGRyLCB2YWRkciwgY291bnQpOwogI2Vsc2UKLQkJX19peHA0eHhfd3JpdGVzdyhhZGRyLCB2YWRkciwgY291bnQpOworCQlfX2luZGlyZWN0X3dyaXRlc3coYWRkciwgdmFkZHIsIGNvdW50KTsKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9faXhwNHh4X2lvd3JpdGUzMih1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqYWRkcikKKyNkZWZpbmUJaW93cml0ZTMyKHYsIHApCQkJaW93cml0ZTMyKHYsIHApCitzdGF0aWMgaW5saW5lIHZvaWQgaW93cml0ZTMyKHUzMiB2YWx1ZSwgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcjsKIAlpZiAoX19pc19pb19hZGRyZXNzKHBvcnQpKQotCQlfX2l4cDR4eF9vdXRsKHZhbHVlLCBwb3J0ICYgUElPX01BU0spOworCQlvdXRsKHZhbHVlLCBwb3J0ICYgUElPX01BU0spOwogCWVsc2UKICNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKIAkJX19yYXdfd3JpdGVsKCh1MzIgX19mb3JjZSljcHVfdG9fbGUzMih2YWx1ZSksIGFkZHIpOwogI2Vsc2UKLQkJX19peHA0eHhfd3JpdGVsKHZhbHVlLCBhZGRyKTsKKwkJX19pbmRpcmVjdF93cml0ZWwodmFsdWUsIGFkZHIpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19peHA0eHhfaW93cml0ZTMyX3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKnZhZGRyLCB1MzIgY291bnQpCisjZGVmaW5lCWlvd3JpdGUzMl9yZXAocCwgdiwgYykJCWlvd3JpdGUzMl9yZXAocCwgdiwgYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3dyaXRlMzJfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqdmFkZHIsCisJCQkJIHUzMiBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKLQkJX19peHA0eHhfb3V0c2wocG9ydCAmIFBJT19NQVNLLCB2YWRkciwgY291bnQpOworCQlvdXRzbChwb3J0ICYgUElPX01BU0ssIHZhZGRyLCBjb3VudCk7CiAJZWxzZQogI2lmbmRlZiBDT05GSUdfSVhQNFhYX0lORElSRUNUX1BDSQogCQlfX3Jhd193cml0ZXNsKGFkZHIsIHZhZGRyLCBjb3VudCk7CiAjZWxzZQotCQlfX2l4cDR4eF93cml0ZXNsKGFkZHIsIHZhZGRyLCBjb3VudCk7CisJCV9faW5kaXJlY3Rfd3JpdGVzbChhZGRyLCB2YWRkciwgY291bnQpOwogI2VuZGlmCiB9CiAKLSNkZWZpbmUJaW9yZWFkOChwKQkJCV9faXhwNHh4X2lvcmVhZDgocCkKLSNkZWZpbmUJaW9yZWFkMTYocCkJCQlfX2l4cDR4eF9pb3JlYWQxNihwKQotI2RlZmluZQlpb3JlYWQzMihwKQkJCV9faXhwNHh4X2lvcmVhZDMyKHApCi0KLSNkZWZpbmUJaW9yZWFkOF9yZXAocCwgdiwgYykJCV9faXhwNHh4X2lvcmVhZDhfcmVwKHAsIHYsIGMpCi0jZGVmaW5lCWlvcmVhZDE2X3JlcChwLCB2LCBjKQkJX19peHA0eHhfaW9yZWFkMTZfcmVwKHAsIHYsIGMpCi0jZGVmaW5lCWlvcmVhZDMyX3JlcChwLCB2LCBjKQkJX19peHA0eHhfaW9yZWFkMzJfcmVwKHAsIHYsIGMpCi0KLSNkZWZpbmUJaW93cml0ZTgodixwKQkJCV9faXhwNHh4X2lvd3JpdGU4KHYscCkKLSNkZWZpbmUJaW93cml0ZTE2KHYscCkJCQlfX2l4cDR4eF9pb3dyaXRlMTYodixwKQotI2RlZmluZQlpb3dyaXRlMzIodixwKQkJCV9faXhwNHh4X2lvd3JpdGUzMih2LHApCi0KLSNkZWZpbmUJaW93cml0ZThfcmVwKHAsIHYsIGMpCQlfX2l4cDR4eF9pb3dyaXRlOF9yZXAocCwgdiwgYykKLSNkZWZpbmUJaW93cml0ZTE2X3JlcChwLCB2LCBjKQkJX19peHA0eHhfaW93cml0ZTE2X3JlcChwLCB2LCBjKQotI2RlZmluZQlpb3dyaXRlMzJfcmVwKHAsIHYsIGMpCQlfX2l4cDR4eF9pb3dyaXRlMzJfcmVwKHAsIHYsIGMpCi0KICNkZWZpbmUJaW9wb3J0X21hcChwb3J0LCBucikJCSgodm9pZCBfX2lvbWVtKikocG9ydCArIFBJT19PRkZTRVQpKQogI2RlZmluZQlpb3BvcnRfdW5tYXAoYWRkcikKLSNlbmRpZgkvLyAhQ09ORklHX1BDSQorI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAotI2VuZGlmCS8vICBfX0FTTV9BUk1fQVJDSF9JT19ICi0KKyNlbmRpZiAvKiBfX0FTTV9BUk1fQVJDSF9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBmNGQ3NGRlLi43ZTZkNGNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX0FSQ0hfSVhQNFhYX0lSUVNfSF8KICNkZWZpbmUgX0FSQ0hfSVhQNFhYX0lSUVNfSF8KIAotCiAjZGVmaW5lIElSUV9JWFA0WFhfTlBFQQkJMAogI2RlZmluZSBJUlFfSVhQNFhYX05QRUIJCTEKICNkZWZpbmUgSVJRX0lYUDRYWF9OUEVDCQkyCkBAIC01OSw2ICs1OCw5IEBACiAjZGVmaW5lIElSUV9JWFA0WFhfTUNVX0VDQwk2MQogI2RlZmluZSBJUlFfSVhQNFhYX0VYUF9QRQk2MgogCisjZGVmaW5lIF9JWFA0WFhfR1BJT19JUlEobikJKElSUV9JWFA0WFhfR1BJTyAjIyBuKQorI2RlZmluZSBJWFA0WFhfR1BJT19JUlEobikJX0lYUDRYWF9HUElPX0lSUShuKQorCiAvKgogICogT25seSBmaXJzdCAzMiBzb3VyY2VzIGFyZSB2YWxpZCBpZiBydW5uaW5nIG9uIElYUDQyeCBzeXN0ZW1zCiAgKi8KQEAgLTcwLDY5ICs3Miw0IEBACiAKICNkZWZpbmUJWFNDQUxFX1BNVV9JUlEJCShJUlFfSVhQNFhYX1hTQ0FMRV9QTVUpCiAKLS8qCi0gKiBJWERQNDI1IGJvYXJkIElSUXMKLSAqLwotI2RlZmluZQlJUlFfSVhEUDQyNV9QQ0lfSU5UQQlJUlFfSVhQNFhYX0dQSU8xMQotI2RlZmluZQlJUlFfSVhEUDQyNV9QQ0lfSU5UQglJUlFfSVhQNFhYX0dQSU8xMAotI2RlZmluZQlJUlFfSVhEUDQyNV9QQ0lfSU5UQwlJUlFfSVhQNFhYX0dQSU85Ci0jZGVmaW5lCUlSUV9JWERQNDI1X1BDSV9JTlRECUlSUV9JWFA0WFhfR1BJTzgKLQotLyoKLSAqIEdhdGV3b3JrcyBBdmlsYSBib2FyZCBJUlFzCi0gKi8KLSNkZWZpbmUJSVJRX0FWSUxBX1BDSV9JTlRBCUlSUV9JWFA0WFhfR1BJTzExCi0jZGVmaW5lCUlSUV9BVklMQV9QQ0lfSU5UQglJUlFfSVhQNFhYX0dQSU8xMAotI2RlZmluZQlJUlFfQVZJTEFfUENJX0lOVEMJSVJRX0lYUDRYWF9HUElPOQotI2RlZmluZQlJUlFfQVZJTEFfUENJX0lOVEQJSVJRX0lYUDRYWF9HUElPOAotCi0KLS8qCi0gKiBQclBNQzExMDAgQm9hcmQgSVJRcwotICovCi0jZGVmaW5lCUlSUV9QUlBNQzExMDBfUENJX0lOVEEJSVJRX0lYUDRYWF9HUElPMTEKLSNkZWZpbmUJSVJRX1BSUE1DMTEwMF9QQ0lfSU5UQglJUlFfSVhQNFhYX0dQSU8xMAotI2RlZmluZQlJUlFfUFJQTUMxMTAwX1BDSV9JTlRDCUlSUV9JWFA0WFhfR1BJTzkKLSNkZWZpbmUJSVJRX1BSUE1DMTEwMF9QQ0lfSU5URAlJUlFfSVhQNFhYX0dQSU84Ci0KLS8qCi0gKiBBREkgQ295b3RlIEJvYXJkIElSUXMKLSAqLwotI2RlZmluZQlJUlFfQ09ZT1RFX1BDSV9TTE9UMAlJUlFfSVhQNFhYX0dQSU82Ci0jZGVmaW5lCUlSUV9DT1lPVEVfUENJX1NMT1QxCUlSUV9JWFA0WFhfR1BJTzExCi0jZGVmaW5lCUlSUV9DT1lPVEVfSURFCQlJUlFfSVhQNFhYX0dQSU81Ci0KLS8qCi0gKiBOU0xVMiBib2FyZCBJUlFzCi0gKi8KLSNkZWZpbmUgICAgICAgIElSUV9OU0xVMl9QQ0lfSU5UQSAgICAgIElSUV9JWFA0WFhfR1BJTzExCi0jZGVmaW5lICAgICAgICBJUlFfTlNMVTJfUENJX0lOVEIgICAgICBJUlFfSVhQNFhYX0dQSU8xMAotI2RlZmluZSAgICAgICAgSVJRX05TTFUyX1BDSV9JTlRDICAgICAgSVJRX0lYUDRYWF9HUElPOQotCi0vKgotICogTkFTMTAwRCBib2FyZCBJUlFzCi0gKi8KLSNkZWZpbmUgICAgICAgIElSUV9OQVMxMDBEX1BDSV9JTlRBICAgIElSUV9JWFA0WFhfR1BJTzExCi0jZGVmaW5lICAgICAgICBJUlFfTkFTMTAwRF9QQ0lfSU5UQiAgICBJUlFfSVhQNFhYX0dQSU8xMAotI2RlZmluZSAgICAgICAgSVJRX05BUzEwMERfUENJX0lOVEMgICAgSVJRX0lYUDRYWF9HUElPOQotI2RlZmluZSAgICAgICAgSVJRX05BUzEwMERfUENJX0lOVEQgICAgSVJRX0lYUDRYWF9HUElPOAotI2RlZmluZSAgICAgICAgSVJRX05BUzEwMERfUENJX0lOVEUgICAgSVJRX0lYUDRYWF9HUElPNwotCi0vKgotICogRC1MaW5rIERTTS1HNjAwIFJldkEgYm9hcmQgSVJRcwotICovCi0jZGVmaW5lICAgICAgICBJUlFfRFNNRzYwMF9QQ0lfSU5UQSAgICBJUlFfSVhQNFhYX0dQSU8xMQotI2RlZmluZSAgICAgICAgSVJRX0RTTUc2MDBfUENJX0lOVEIgICAgSVJRX0lYUDRYWF9HUElPMTAKLSNkZWZpbmUgICAgICAgIElSUV9EU01HNjAwX1BDSV9JTlRDICAgIElSUV9JWFA0WFhfR1BJTzkKLSNkZWZpbmUgICAgICAgIElSUV9EU01HNjAwX1BDSV9JTlREICAgIElSUV9JWFA0WFhfR1BJTzgKLSNkZWZpbmUgICAgICAgIElSUV9EU01HNjAwX1BDSV9JTlRFICAgIElSUV9JWFA0WFhfR1BJTzcKLSNkZWZpbmUgICAgICAgIElSUV9EU01HNjAwX1BDSV9JTlRGICAgIElSUV9JWFA0WFhfR1BJTzYKLQotLyoKLSAqIEZyZWVjb20gRlNHLTMgQm9hcmQgSVJRcwotICovCi0jZGVmaW5lICAgICAgICBJUlFfRlNHX1BDSV9JTlRBICAgICAgICBJUlFfSVhQNFhYX0dQSU82Ci0jZGVmaW5lICAgICAgICBJUlFfRlNHX1BDSV9JTlRCICAgICAgICBJUlFfSVhQNFhYX0dQSU83Ci0jZGVmaW5lICAgICAgICBJUlFfRlNHX1BDSV9JTlRDICAgICAgICBJUlFfSVhQNFhYX0dQSU81Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2l4ZHA0MjUuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9peGRwNDI1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYWZlNjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2l4ZHA0MjUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaXhkcDQyNS5oCi0gKgotICogSVhEUDQyNSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucwotICoKLSAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gCi0gKiAKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgCi0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+IgotI2VuZGlmCi0KLSNkZWZpbmUJSVhEUDQyNV9TREFfUElOCQk3Ci0jZGVmaW5lCUlYRFA0MjVfU0NMX1BJTgkJNgotCi0vKgotICogSVhEUDQyNSBQQ0kgSVJRcwotICovCi0jZGVmaW5lIElYRFA0MjVfUENJX01BWF9ERVYJNAotI2RlZmluZSBJWERQNDI1X1BDSV9JUlFfTElORVMJNAotCi0KLS8qIFBDSSBjb250cm9sbGVyIEdQSU8gdG8gSVJRIHBpbiBtYXBwaW5ncyAqLwotI2RlZmluZSBJWERQNDI1X1BDSV9JTlRBX1BJTgkxMQotI2RlZmluZSBJWERQNDI1X1BDSV9JTlRCX1BJTgkxMAotI2RlZmluZQlJWERQNDI1X1BDSV9JTlRDX1BJTgk5Ci0jZGVmaW5lCUlYRFA0MjVfUENJX0lOVERfUElOCTgKLQotLyogTkFORCBGbGFzaCBwaW5zICovCi0jZGVmaW5lCUlYRFA0MjVfTkFORF9OQ0VfUElOCTEyCi0KLSNkZWZpbmUJSVhEUDQyNV9OQU5EX0NNRF9CWVRFCTB4MDEKLSNkZWZpbmUJSVhEUDQyNV9OQU5EX0FERFJfQllURQkweDAyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbmFzMTAwZC5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL25hczEwMGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc3MWQ2Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbmFzMTAwZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9uYXMxMDBkLmgKLSAqCi0gKiBOQVMxMDBEIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IFRvd2VyIFRlY2hub2xvZ2llcwotICoKLSAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+Ci0gKgotICogYmFzZWQgb24gaXhkcDQyNS5oOgotICoJQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4iCi0jZW5kaWYKLQotI2RlZmluZSBOQVMxMDBEX1NEQV9QSU4JCTUKLSNkZWZpbmUgTkFTMTAwRF9TQ0xfUElOCQk2Ci0KLS8qCi0gKiBOQVMxMDBEIFBDSSBJUlFzCi0gKi8KLSNkZWZpbmUgTkFTMTAwRF9QQ0lfTUFYX0RFVgkzCi0jZGVmaW5lIE5BUzEwMERfUENJX0lSUV9MSU5FUwkzCi0KLQotLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCi0jZGVmaW5lIE5BUzEwMERfUENJX0lOVEFfUElOCTExCi0jZGVmaW5lIE5BUzEwMERfUENJX0lOVEJfUElOCTEwCi0jZGVmaW5lIE5BUzEwMERfUENJX0lOVENfUElOCTkKLSNkZWZpbmUgTkFTMTAwRF9QQ0lfSU5URF9QSU4JOAotI2RlZmluZSBOQVMxMDBEX1BDSV9JTlRFX1BJTgk3Ci0KLS8qIEJ1dHRvbnMgKi8KLQotI2RlZmluZSBOQVMxMDBEX1BCX0dQSU8gICAgICAgICAxNCAgIC8qIHBvd2VyIGJ1dHRvbiAqLwotI2RlZmluZSBOQVMxMDBEX1JCX0dQSU8gICAgICAgICA0ICAgIC8qIHJlc2V0IGJ1dHRvbiAqLwotCi0vKiBQb3dlciBjb250cm9sICovCi0KLSNkZWZpbmUgTkFTMTAwRF9QT19HUElPICAgICAgICAgMTIgICAvKiBwb3dlciBvZmYgKi8KLQotLyogTEVEcyAqLwotCi0jZGVmaW5lIE5BUzEwMERfTEVEX1dMQU5fR1BJTwkwCi0jZGVmaW5lIE5BUzEwMERfTEVEX0RJU0tfR1BJTwkzCi0jZGVmaW5lIE5BUzEwMERfTEVEX1BXUl9HUElPCTE1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbnBlLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbnBlLmgKaW5kZXggMzdkMDUxMS4uZTMyMGRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL25wZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9ucGUuaApAQCAtMzMsNyArMzMsNyBAQAogaW50IG5wZV9yZWN2X21lc3NhZ2Uoc3RydWN0IG5wZSAqbnBlLCB2b2lkICptc2csIGNvbnN0IGNoYXIgKndoYXQpOwogaW50IG5wZV9zZW5kX3JlY3ZfbWVzc2FnZShzdHJ1Y3QgbnBlICpucGUsIHZvaWQgKm1zZywgY29uc3QgY2hhciAqd2hhdCk7CiBpbnQgbnBlX2xvYWRfZmlybXdhcmUoc3RydWN0IG5wZSAqbnBlLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotc3RydWN0IG5wZSAqbnBlX3JlcXVlc3QoaW50IGlkKTsKK3N0cnVjdCBucGUgKm5wZV9yZXF1ZXN0KHVuc2lnbmVkIGlkKTsKIHZvaWQgbnBlX3JlbGVhc2Uoc3RydWN0IG5wZSAqbnBlKTsKIAogI2VuZGlmIC8qIF9fSVhQNFhYX05QRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbnNsdTIuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9uc2x1Mi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWQwMGFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9uc2x1Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9uc2x1Mi5oCi0gKgotICogTlNMVTIgcGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqCi0gKiBBdXRob3I6IE1hcmsgUmFrZXMgPG1yYWtlcyBBVCBtYWMuY29tPgotICogTWFpbnRhaW5lcnM6IGh0dHA6Ly93d3cubnNsdTItbGludXgub3JnCi0gKgotICogYmFzZWQgb24gaXhkcDQyNS5oOgotICoJQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4iCi0jZW5kaWYKLQotI2RlZmluZSBOU0xVMl9TREFfUElOCQk3Ci0jZGVmaW5lIE5TTFUyX1NDTF9QSU4JCTYKLQotLyoKLSAqIE5TTFUyIFBDSSBJUlFzCi0gKi8KLSNkZWZpbmUgTlNMVTJfUENJX01BWF9ERVYJMwotI2RlZmluZSBOU0xVMl9QQ0lfSVJRX0xJTkVTCTMKLQotCi0vKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KLSNkZWZpbmUgTlNMVTJfUENJX0lOVEFfUElOCTExCi0jZGVmaW5lIE5TTFUyX1BDSV9JTlRCX1BJTgkxMAotI2RlZmluZSBOU0xVMl9QQ0lfSU5UQ19QSU4JOQotI2RlZmluZSBOU0xVMl9QQ0lfSU5URF9QSU4JOAotCi0vKiBOU0xVMiBUaW1lciAqLwotI2RlZmluZSBOU0xVMl9GUkVRIDY2MDAwMDAwCi0KLS8qIEJ1dHRvbnMgKi8KLQotI2RlZmluZSBOU0xVMl9QQl9HUElPCQk1CS8qIHBvd2VyIGJ1dHRvbiAqLwotI2RlZmluZSBOU0xVMl9QT19HUElPCQk4CS8qIHBvd2VyIG9mZiAqLwotI2RlZmluZSBOU0xVMl9SQl9HUElPCQkxMgkvKiByZXNldCBidXR0b24gKi8KLQotLyogQnV6emVyICovCi0KLSNkZWZpbmUgTlNMVTJfR1BJT19CVVpaCQk0Ci0KLS8qIExFRHMgKi8KLQotI2RlZmluZSBOU0xVMl9MRURfUkVEX0dQSU8JMAotI2RlZmluZSBOU0xVMl9MRURfR1JOX0dQSU8JMQotI2RlZmluZSBOU0xVMl9MRURfRElTSzFfR1BJTwkzCi0jZGVmaW5lIE5TTFUyX0xFRF9ESVNLMl9HUElPCTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9wcnBtYzExMDAuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9wcnBtYzExMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyNzRhMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvcHJwbWMxMTAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3BycG1jMTEwMC5oCi0gKgotICogTW90b3JvbGxhIFByUE1DMTEwMCBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucwotICoKLSAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gCi0gKiAKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgCi0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+IgotI2VuZGlmCi0KLSNkZWZpbmUJUFJQTUMxMTAwX0ZMQVNIX0JBU0UJSVhQNFhYX0VYUF9CVVNfQ1MwX0JBU0VfUEhZUwotI2RlZmluZQlQUlBNQzExMDBfRkxBU0hfU0laRQlJWFA0WFhfRVhQX0JVU19DU1hfUkVHSU9OX1NJWkUKLQotI2RlZmluZQlQUlBNQzExMDBfUENJX01JTl9ERVZJRAkxMAotI2RlZmluZQlQUlBNQzExMDBfUENJX01BWF9ERVZJRAkxNgotI2RlZmluZQlQUlBNQzExMDBfUENJX0lSUV9MSU5FUwk0Ci0KLQotLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCi0jZGVmaW5lIFBSUE1DMTEwMF9QQ0lfSU5UQV9QSU4JMTEKLSNkZWZpbmUgUFJQTUMxMTAwX1BDSV9JTlRCX1BJTgkxMAotI2RlZmluZQlQUlBNQzExMDBfUENJX0lOVENfUElOCTkKLSNkZWZpbmUJUFJQTUMxMTAwX1BDSV9JTlREX1BJTgk4Ci0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCA4OWNlM2VlLi4yYzNmOTNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMTAsNiArMTAsNiBAQAogICogNjYuNjYuLi4gTUh6LiBXZSBkbyBhIGNvbnZ1bHRlZCBjYWxjdWxhdGlvbiBvZiBDTE9DS19USUNLX1JBVEUgYi9jIHRoZQogICogdGltZXIgcmVnaXN0ZXIgaWdub3JlcyB0aGUgYm90dG9tIDIgYml0cyBvZiB0aGUgTEFUQ0ggdmFsdWUuCiAgKi8KLSNkZWZpbmUgRlJFUSA2NjY2NjY2NgorI2RlZmluZSBGUkVRIDY2NjY2MDAwCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoKChGUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYwppbmRleCA2NGMyOWFhLi4xYmExNjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYyAKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtcGNpLmMKICAqCiAgKiBJWERQNDI1IGJvYXJkLWxldmVsIFBDSSBpbml0aWFsaXphdGlvbgogICoKQEAgLTE5LDM5ICsxOSw0MyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjZGVmaW5lIE1BWF9ERVYJCTQKKyNkZWZpbmUgSVJRX0xJTkVTCTQKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIElOVEEJCTExCisjZGVmaW5lIElOVEIJCTEwCisjZGVmaW5lIElOVEMJCTkKKyNkZWZpbmUgSU5URAkJOAorCisKIHZvaWQgX19pbml0IGl4ZHA0MjVfcGNpX3ByZWluaXQodm9pZCkKIHsKLQlzZXRfaXJxX3R5cGUoSVJRX0lYRFA0MjVfUENJX0lOVEEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9JWERQNDI1X1BDSV9JTlRCLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCXNldF9pcnFfdHlwZShJUlFfSVhEUDQyNV9QQ0lfSU5UQywgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX0lYRFA0MjVfUENJX0lOVEQsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0KKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEEpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQiksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRDKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEQpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCWl4cDR4eF9wY2lfcHJlaW5pdCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBpeGRwNDI1X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewotCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtJWERQNDI1X1BDSV9JUlFfTElORVNdID0gewotCQlJUlFfSVhEUDQyNV9QQ0lfSU5UQSwKLQkJSVJRX0lYRFA0MjVfUENJX0lOVEIsCi0JCUlSUV9JWERQNDI1X1BDSV9JTlRDLAotCQlJUlFfSVhEUDQyNV9QQ0lfSU5URAorCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtJUlFfTElORVNdID0geworCQlJWFA0WFhfR1BJT19JUlEoSU5UQSksCisJCUlYUDRYWF9HUElPX0lSUShJTlRCKSwKKwkJSVhQNFhYX0dQSU9fSVJRKElOVEMpLAorCQlJWFA0WFhfR1BJT19JUlEoSU5URCkKIAl9OwogCi0JaW50IGlycSA9IC0xOworCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBNQVhfREVWICYmIHBpbiA+PSAxICYmIHBpbiA8PSBJUlFfTElORVMpCisJCXJldHVybiBwY2lfaXJxX3RhYmxlWyhzbG90ICsgcGluIC0gMikgJSA0XTsKIAotCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBJWERQNDI1X1BDSV9NQVhfREVWICYmIAotCQlwaW4gPj0gMSAmJiBwaW4gPD0gSVhEUDQyNV9QQ0lfSVJRX0xJTkVTKSB7Ci0JCWlycSA9IHBjaV9pcnFfdGFibGVbKHNsb3QgKyBwaW4gLSAyKSAlIDRdOwotCX0KLQotCXJldHVybiBpcnE7CisJcmV0dXJuIC0xOwogfQogCiBzdHJ1Y3QgaHdfcGNpIGl4ZHA0MjVfcGNpIF9faW5pdGRhdGEgPSB7CkBAIC03Miw0ICs3NiwzIEBACiB9CiAKIHN1YnN5c19pbml0Y2FsbChpeGRwNDI1X3BjaV9pbml0KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jCmluZGV4IGY0YTBjMWIuLmJiYjc2ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jCiAgKgotICogSVhEUDQyNS9JWENEUDExMDAgYm9hcmQtc2V0dXAgCisgKiBJWERQNDI1L0lYQ0RQMTEwMCBib2FyZC1zZXR1cAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0zMSw2ICszMCwxNSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCisjZGVmaW5lIElYRFA0MjVfU0RBX1BJTgkJNworI2RlZmluZSBJWERQNDI1X1NDTF9QSU4JCTYKKworLyogTkFORCBGbGFzaCBwaW5zICovCisjZGVmaW5lIElYRFA0MjVfTkFORF9OQ0VfUElOCTEyCisKKyNkZWZpbmUgSVhEUDQyNV9OQU5EX0NNRF9CWVRFCTB4MDEKKyNkZWZpbmUgSVhEUDQyNV9OQU5EX0FERFJfQllURQkweDAyCisKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBpeGRwNDI1X2ZsYXNoX2RhdGEgPSB7CiAJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCiAJLndpZHRoCQk9IDIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfbnBlLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfbnBlLmMKaW5kZXggNDdhYzY5Yy4uZThiYjI1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X25wZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9ucGUuYwpAQCAtNjY1LDcgKzY2NSw3IEBACiB9CiAKIAotc3RydWN0IG5wZSAqbnBlX3JlcXVlc3QoaW50IGlkKQorc3RydWN0IG5wZSAqbnBlX3JlcXVlc3QodW5zaWduZWQgaWQpCiB7CiAJaWYgKGlkIDwgTlBFX0NPVU5UKQogCQlpZiAobnBlX3RhYltpZF0udmFsaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1wY2kuYwppbmRleCAxMDg4NDI2Li5kMGNlYTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtcGNpLmMKQEAgLTE4LDM3ICsxOCw0MiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKKyNkZWZpbmUgTUFYX0RFVgkJMworI2RlZmluZSBJUlFfTElORVMJMworCisvKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KKyNkZWZpbmUgSU5UQQkJMTEKKyNkZWZpbmUgSU5UQgkJMTAKKyNkZWZpbmUgSU5UQwkJOQorI2RlZmluZSBJTlRECQk4CisjZGVmaW5lIElOVEUJCTcKKwogdm9pZCBfX2luaXQgbmFzMTAwZF9wY2lfcHJlaW5pdCh2b2lkKQogewotCXNldF9pcnFfdHlwZShJUlFfTkFTMTAwRF9QQ0lfSU5UQSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX05BUzEwMERfUENJX0lOVEIsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9OQVMxMDBEX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCXNldF9pcnFfdHlwZShJUlFfTkFTMTAwRF9QQ0lfSU5URCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX05BUzEwMERfUENJX0lOVEUsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0KKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEEpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQiksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRDKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEQpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5URSksIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5hczEwMGRfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7Ci0Jc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW05BUzEwMERfUENJX01BWF9ERVZdW05BUzEwMERfUENJX0lSUV9MSU5FU10gPQotCXsKLQkJeyBJUlFfTkFTMTAwRF9QQ0lfSU5UQSwgLTEsIC0xIH0sCi0JCXsgSVJRX05BUzEwMERfUENJX0lOVEIsIC0xLCAtMSB9LAotCQl7IElSUV9OQVMxMDBEX1BDSV9JTlRDLCBJUlFfTkFTMTAwRF9QQ0lfSU5URCwgSVJRX05BUzEwMERfUENJX0lOVEUgfSwKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbTUFYX0RFVl1bSVJRX0xJTkVTXSA9IHsKKwkJeyBJWFA0WFhfR1BJT19JUlEoSU5UQSksIC0xLCAtMSB9LAorCQl7IElYUDRYWF9HUElPX0lSUShJTlRCKSwgLTEsIC0xIH0sCisJCXsgSVhQNFhYX0dQSU9fSVJRKElOVEMpLCBJWFA0WFhfR1BJT19JUlEoSU5URCksCisJCSAgSVhQNFhYX0dQSU9fSVJRKElOVEUpIH0sCiAJfTsKIAotCWludCBpcnEgPSAtMTsKKwlpZiAoc2xvdCA+PSAxICYmIHNsb3QgPD0gTUFYX0RFViAmJiBwaW4gPj0gMSAmJiBwaW4gPD0gSVJRX0xJTkVTKQorCQlyZXR1cm4gcGNpX2lycV90YWJsZVtzbG90IC0gMV1bcGluIC0gMV07CiAKLQlpZiAoc2xvdCA+PSAxICYmIHNsb3QgPD0gTkFTMTAwRF9QQ0lfTUFYX0RFViAmJgotCQlwaW4gPj0gMSAmJiBwaW4gPD0gTkFTMTAwRF9QQ0lfSVJRX0xJTkVTKQotCQlpcnEgPSBwY2lfaXJxX3RhYmxlW3Nsb3QtMV1bcGluLTFdOwotCi0JcmV0dXJuIGlycTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0cnVjdCBod19wY2kgX19pbml0ZGF0YSBuYXMxMDBkX3BjaSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtc2V0dXAuYwppbmRleCA5MjFjOTQ3Li5lM2VlODgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1zZXR1cC5jCkBAIC0yOSwxMiArMjksMjYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKKyNkZWZpbmUgTkFTMTAwRF9TREFfUElOCQk1CisjZGVmaW5lIE5BUzEwMERfU0NMX1BJTgkJNgorCisvKiBCdXR0b25zICovCisjZGVmaW5lIE5BUzEwMERfUEJfR1BJTyAgICAgICAgIDE0ICAgLyogcG93ZXIgYnV0dG9uICovCisjZGVmaW5lIE5BUzEwMERfUkJfR1BJTyAgICAgICAgIDQgICAgLyogcmVzZXQgYnV0dG9uICovCisKKy8qIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgTkFTMTAwRF9QT19HUElPICAgICAgICAgMTIgICAvKiBwb3dlciBvZmYgKi8KKworLyogTEVEcyAqLworI2RlZmluZSBOQVMxMDBEX0xFRF9XTEFOX0dQSU8JMAorI2RlZmluZSBOQVMxMDBEX0xFRF9ESVNLX0dQSU8JMworI2RlZmluZSBOQVMxMDBEX0xFRF9QV1JfR1BJTwkxNQorCiBzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgbmFzMTAwZF9mbGFzaF9kYXRhID0gewogCS5tYXBfbmFtZQkJPSAiY2ZpX3Byb2JlIiwKIAkud2lkdGgJCQk9IDIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jCmluZGV4IDQ0MjliODQuLjFlYjVhOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jCkBAIC0xOCwzNSArMTgsMzggQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjZGVmaW5lIE1BWF9ERVYJCTMKKyNkZWZpbmUgSVJRX0xJTkVTCTMKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIElOVEEJCTExCisjZGVmaW5lIElOVEIJCTEwCisjZGVmaW5lIElOVEMJCTkKKyNkZWZpbmUgSU5URAkJOAorCiB2b2lkIF9faW5pdCBuc2x1Ml9wY2lfcHJlaW5pdCh2b2lkKQogewotCXNldF9pcnFfdHlwZShJUlFfTlNMVTJfUENJX0lOVEEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0Jc2V0X2lycV90eXBlKElSUV9OU0xVMl9QQ0lfSU5UQiwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKLQlzZXRfaXJxX3R5cGUoSVJRX05TTFUyX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCisJc2V0X2lycV90eXBlKElYUDRYWF9HUElPX0lSUShJTlRBKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEIpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQyksIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5zbHUyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewotCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtOU0xVMl9QQ0lfSVJRX0xJTkVTXSA9IHsKLQkJSVJRX05TTFUyX1BDSV9JTlRBLAotCQlJUlFfTlNMVTJfUENJX0lOVEIsCi0JCUlSUV9OU0xVMl9QQ0lfSU5UQywKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbSVJRX0xJTkVTXSA9IHsKKwkJSVhQNFhYX0dQSU9fSVJRKElOVEEpLAorCQlJWFA0WFhfR1BJT19JUlEoSU5UQiksCisJCUlYUDRYWF9HUElPX0lSUShJTlRDKSwKIAl9OwogCi0JaW50IGlycSA9IC0xOworCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBNQVhfREVWICYmIHBpbiA+PSAxICYmIHBpbiA8PSBJUlFfTElORVMpCisJCXJldHVybiBwY2lfaXJxX3RhYmxlWyhzbG90ICsgcGluIC0gMikgJSBJUlFfTElORVNdOwogCi0JaWYgKHNsb3QgPj0gMSAmJiBzbG90IDw9IE5TTFUyX1BDSV9NQVhfREVWICYmCi0JCXBpbiA+PSAxICYmIHBpbiA8PSBOU0xVMl9QQ0lfSVJRX0xJTkVTKSB7Ci0JCQlpcnEgPSBwY2lfaXJxX3RhYmxlWyhzbG90ICsgcGluIC0gMikgJSBOU0xVMl9QQ0lfSVJRX0xJTkVTXTsKLQl9Ci0KLQlyZXR1cm4gaXJxOworCXJldHVybiAtMTsKIH0KIAogc3RydWN0IGh3X3BjaSBfX2luaXRkYXRhIG5zbHUyX3BjaSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jCmluZGV4IGZmNmEwOGQuLmMxNGUwMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpAQCAtMjYsMTMgKzI2LDMyIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIAorI2RlZmluZSBOU0xVMl9TREFfUElOCQk3CisjZGVmaW5lIE5TTFUyX1NDTF9QSU4JCTYKKworLyogTlNMVTIgVGltZXIgKi8KKyNkZWZpbmUgTlNMVTJfRlJFUSA2NjAwMDAwMAorCisvKiBCdXR0b25zICovCisjZGVmaW5lIE5TTFUyX1BCX0dQSU8JCTUJLyogcG93ZXIgYnV0dG9uICovCisjZGVmaW5lIE5TTFUyX1BPX0dQSU8JCTgJLyogcG93ZXIgb2ZmICovCisjZGVmaW5lIE5TTFUyX1JCX0dQSU8JCTEyCS8qIHJlc2V0IGJ1dHRvbiAqLworCisvKiBCdXp6ZXIgKi8KKyNkZWZpbmUgTlNMVTJfR1BJT19CVVpaCQk0CisKKy8qIExFRHMgKi8KKyNkZWZpbmUgTlNMVTJfTEVEX1JFRF9HUElPCTAKKyNkZWZpbmUgTlNMVTJfTEVEX0dSTl9HUElPCTEKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxX0dQSU8JMworI2RlZmluZSBOU0xVMl9MRURfRElTSzJfR1BJTwkyCisKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBuc2x1Ml9mbGFzaF9kYXRhID0gewogCS5tYXBfbmFtZQkJPSAiY2ZpX3Byb2JlIiwKIAkud2lkdGgJCQk9IDIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKaW5kZXggOGJmMDlhZS4uZjZjNjE5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZwpAQCAtNTIsNiArNTIsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZC4KIAorY29uZmlnIE1BQ0hfTkVUU1BBQ0VfVjIKKwlib29sICJMYUNpZSBOZXR3b3JrIFNwYWNlIHYyIE5BUyBCb2FyZCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIExhQ2llIE5ldHdvcmsgU3BhY2UgdjIgTkFTLgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQppbmRleCA5ZjJmNjdiLi5kNGQ3ZjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKQEAgLTgsNSArOCw2IEBACiBvYmotJChDT05GSUdfTUFDSF9UUzIxOSkJCSs9IHRzMjE5LXNldHVwLm8gdHN4MXgtY29tbW9uLm8KIG9iai0kKENPTkZJR19NQUNIX1RTNDFYKQkJKz0gdHM0MXgtc2V0dXAubyB0c3gxeC1jb21tb24ubwogb2JqLSQoQ09ORklHX01BQ0hfT1BFTlJEX0JBU0UpCQkrPSBvcGVucmRfYmFzZS1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9ORVRTUEFDRV9WMikJCSs9IG5ldHNwYWNlX3YyLXNldHVwLm8KIAogb2JqLSQoQ09ORklHX0NQVV9JRExFKQkJCSs9IGNwdWlkbGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDY0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMKKyAqCisgKiBMYUNpZSBOZXR3b3JrIFNwYWNlIHYyIGJvYXJkIHNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNpbW9uIEd1aW5vdCA8c2d1aW5vdEBsYWNpZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQmVub8ODwq50IENhbmV0IDxiZW5vaXQuY2FuZXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KKyNpbmNsdWRlIDxwbGF0L3RpbWUuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiA1MTJLQiBTUEkgRmxhc2ggb24gQm9vdCBEZXZpY2UgKE1BQ1JPTklYIE1YMjVMNDAwNSkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbmV0c3BhY2VfdjJfZmxhc2hfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lID0gInUtYm9vdCIsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCA9IDAsCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBuZXRzcGFjZV92Ml9mbGFzaCA9IHsKKwkudHlwZQkJPSAibXgyNWw0MDA1YSIsCisJLm5hbWUJCT0gInNwaV9mbGFzaCIsCisJLnBhcnRzCQk9IG5ldHNwYWNlX3YyX2ZsYXNoX3BhcnRzLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobmV0c3BhY2VfdjJfZmxhc2hfcGFydHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG5ldHNwYWNlX3YyX3NwaV9zbGF2ZV9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMJPSAibTI1cDgwIiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0c3BhY2VfdjJfZmxhc2gsCisJCS5pcnEJCT0gLTEsCisJCS5tYXhfc3BlZWRfaHoJPSAyMDAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIG5ldHNwYWNlX3YyX2dlMDBfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGRldmljZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBhdDI0YzA0ID0geworCS5ieXRlX2xlbgk9IFNaXzRLIC8gOCwKKwkucGFnZV9zaXplCT0gMTYsCit9OworCisvKgorICogaTJjIGFkZHIgfCBjaGlwICAgICAgICAgfCBkZXNjcmlwdGlvbgorICogMHg1MCAgICAgfCBIVDI0TEMwNCAgICAgfCBlZXByb20gKDUxMkIpCisgKi8KKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG5ldHNwYWNlX3YyX2kyY19pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiMjRjMDQiLCAweDUwKSwKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmF0MjRjMDQsCisJfQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTQVRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgbmV0c3BhY2VfdjJfc2F0YV9kYXRhID0geworCS5uX3BvcnRzCT0gMiwKK307CisKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19TQVRBMF9QT1dFUgkxNgorI2RlZmluZSBORVRTUEFDRV9WMl9HUElPX1NBVEExX1BPV0VSCTE3CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRzcGFjZV92Ml9zYXRhX3Bvd2VyX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVFNQQUNFX1YyX0dQSU9fU0FUQTBfUE9XRVIsICJTQVRBMCBwb3dlciIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUU1BBQ0VfVjJfR1BJT19TQVRBMF9QT1dFUiwgMSk7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoTkVUU1BBQ0VfVjJfR1BJT19TQVRBMF9QT1dFUik7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0c3BhY2VfdjI6IGZhaWxlZCB0byBzZXR1cCBTQVRBMCBwb3dlclxuIik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBORVRTUEFDRV9WMl9QVVNIX0JVVFRPTgkJMzIKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIG5ldHNwYWNlX3YyX2J1dHRvbnNbXSA9IHsKKwlbMF0gPSB7CisJCS5jb2RlCQk9IEtFWV9QT1dFUiwKKwkJLmdwaW8JCT0gTkVUU1BBQ0VfVjJfUFVTSF9CVVRUT04sCisJCS5kZXNjCQk9ICJQb3dlciBwdXNoIGJ1dHRvbiIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBuZXRzcGFjZV92Ml9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IG5ldHNwYWNlX3YyX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShuZXRzcGFjZV92Ml9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5ldHNwYWNlX3YyX2dwaW9fYnV0dG9ucyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhIAk9ICZuZXRzcGFjZV92Ml9idXR0b25fZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIExFRHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhlIGJsdWUgZnJvbnQgTEVEIGlzIHdpcmVkIHRvIGEgQ1BMRCBhbmQgY2FuIGJsaW5rIGluIHJlbGF0aW9uIHdpdGggdGhlCisgKiBTQVRBIGFjdGl2aXR5LgorICoKKyAqIFRoZSBmb2xsb3dpbmcgYXJyYXkgZGV0YWlsIHRoZSBkaWZmZXJlbnQgTEVEIHJlZ2lzdGVycyBhbmQgdGhlIGNvbWJpbmF0aW9uCisgKiBvZiB0aGVpciBwb3NzaWJsZSB2YWx1ZXM6CisgKgorICogIGNtZF9sZWQgICB8ICBzbG93X2xlZCAgfCAvU0FUQSBhY3RpdmUgfCBMRUQgc3RhdGUKKyAqICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAqICAgICAxICAgICAgfCAgICAgMCAgICAgIHwgICAgICB4ICAgICAgIHwgIG9mZgorICogICAgIC0gICAgICB8ICAgICAxICAgICAgfCAgICAgIHggICAgICAgfCAgb24KKyAqICAgICAwICAgICAgfCAgICAgMCAgICAgIHwgICAgICAxICAgICAgIHwgIG9uCisgKiAgICAgMCAgICAgIHwgICAgIDAgICAgICB8ICAgICAgMCAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKKyAqLworCisjZGVmaW5lIE5FVFNQQUNFX1YyX0dQSU9fUkVEX0xFRAkxMgorI2RlZmluZSBORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX1NMT1cJMjkKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9DTUQJMzAKKworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIG5ldHNwYWNlX3YyX2dwaW9fbGVkX3BpbnNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIm5zX3YyOnJlZDpmYWlsIiwKKwkJLmdwaW8JPSBORVRTUEFDRV9WMl9HUElPX1JFRF9MRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBuZXRzcGFjZV92Ml9ncGlvX2xlZHNfZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKG5ldHNwYWNlX3YyX2dwaW9fbGVkX3BpbnMpLAorCS5sZWRzCQk9IG5ldHNwYWNlX3YyX2dwaW9fbGVkX3BpbnMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuZXRzcGFjZV92Ml9ncGlvX2xlZHMgPSB7CisJLm5hbWUJCT0gImxlZHMtZ3BpbyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZuZXRzcGFjZV92Ml9ncGlvX2xlZHNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG5ldHNwYWNlX3YyX2dwaW9fbGVkc19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXRzcGFjZV92Ml9ncGlvX2xlZHMpOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIGZyb250IGJsdWUgTEVEIHRvIGJsaW5rIGluIHJlbGF0aW9uIHdpdGggdGhlIFNBVEEKKwkgKiBhY3Rpdml0eS4KKwkgKi8KKwlpZiAoZ3Bpb19yZXF1ZXN0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVywKKwkJCSAiU0FUQSBibHVlIExFRCBzbG93IikgIT0gMCkKKwkJcmV0dXJuOworCWlmIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9TTE9XLCAwKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlXzE7CisJaWYgKGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX0NNRCwKKwkJCSAiU0FUQSBibHVlIExFRCBjb21tYW5kIikgIT0gMCkKKwkJZ290byBlcnJfZnJlZV8xOworCWlmIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9DTUQsIDApICE9IDApCisJCWdvdG8gZXJyX2ZyZWVfMjsKKworCXJldHVybjsKKworZXJyX2ZyZWVfMjoKKwlncGlvX2ZyZWUoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9DTUQpOworZXJyX2ZyZWVfMToKKwlncGlvX2ZyZWUoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9TTE9XKTsKKwlwcl9lcnIoIm5ldHNwYWNlX3YyOiBmYWlsZWQgdG8gY29uZmlndXJlIFNBVEEgYmx1ZSBMRURcbiIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRpbWVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgbmV0c3BhY2VfdjJfdGltZXJfaW5pdCh2b2lkKQoreworCWtpcmt3b29kX3RjbGsgPSAxNjY2NjY2Njc7CisJb3Jpb25fdGltZV9pbml0KElSUV9LSVJLV09PRF9CUklER0UsIGtpcmt3b29kX3RjbGspOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG5ldHNwYWNlX3YyX3RpbWVyID0geworCS5pbml0ID0gbmV0c3BhY2VfdjJfdGltZXJfaW5pdCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBTZXR1cAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmV0c3BhY2VfdjJfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMF9TUElfU0NuLAorCU1QUDFfU1BJX01PU0ksCisJTVBQMl9TUElfU0NLLAorCU1QUDNfU1BJX01JU08sCisJTVBQNF9ORl9JTzYsCisJTVBQNV9ORl9JTzcsCisJTVBQNl9TWVNSU1RfT1VUbiwKKwlNUFA4X1RXX1NEQSwKKwlNUFA5X1RXX1NDSywKKwlNUFAxMF9VQVJUMF9UWEQsCisJTVBQMTFfVUFSVDBfUlhELAorCU1QUDEyX0dQTywJCS8qIFJlZCBsZWQgKi8KKwlNUFAxNF9HUElPLAkJLyogVVNCIGZ1c2UgKi8KKwlNUFAxNl9HUElPLAkJLyogU0FUQSAwIHBvd2VyICovCisJTVBQMThfTkZfSU8wLAorCU1QUDE5X05GX0lPMSwKKwlNUFAyMF9TQVRBMV9BQ1RuLAorCU1QUDIxX1NBVEEwX0FDVG4sCisJTVBQMjRfR1BJTywJCS8qIFVTQiBtb2RlIHNlbGVjdCAqLworCU1QUDI1X0dQSU8sCQkvKiBGYW4gcm90YXRpb24gZmFpbCAqLworCU1QUDI2X0dQSU8sCQkvKiBVU0IgZGV2aWNlIHZidXMgKi8KKwlNUFAyOF9HUElPLAkJLyogVVNCIGVuYWJsZSBob3N0IHZidXMgKi8KKwlNUFAyOV9HUElPLAkJLyogQmx1ZSBsZWQgKHNsb3cgcmVnaXN0ZXIpICovCisJTVBQMzBfR1BJTywJCS8qIEJsdWUgbGVkIChjb21tYW5kIHJlZ2lzdGVyKSAqLworCU1QUDMxX0dQSU8sCQkvKiBCb2FyZCBwb3dlciBvZmYgKi8KKwlNUFAzMl9HUElPLCAJCS8qIFBvd2VyIGJ1dHRvbiAoMCA9IFJlbGVhc2VkLCAxID0gUHVzaGVkKSAqLworCTAKK307CisKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19QT1dFUl9PRkYJMzEKKworc3RhdGljIHZvaWQgbmV0c3BhY2VfdjJfcG93ZXJfb2ZmKHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoTkVUU1BBQ0VfVjJfR1BJT19QT1dFUl9PRkYsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbmV0c3BhY2VfdjJfaW5pdCh2b2lkKQoreworCS8qCisJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYobmV0c3BhY2VfdjJfbXBwX2NvbmZpZyk7CisKKwluZXRzcGFjZV92Ml9zYXRhX3Bvd2VyX2luaXQoKTsKKworCWtpcmt3b29kX2VoY2lfaW5pdCgpOworCWtpcmt3b29kX2dlMDBfaW5pdCgmbmV0c3BhY2VfdjJfZ2UwMF9kYXRhKTsKKwlraXJrd29vZF9zYXRhX2luaXQoJm5ldHNwYWNlX3YyX3NhdGFfZGF0YSk7CisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG5ldHNwYWNlX3YyX3NwaV9zbGF2ZV9pbmZvLAorCQkJCUFSUkFZX1NJWkUobmV0c3BhY2VfdjJfc3BpX3NsYXZlX2luZm8pKTsKKwlraXJrd29vZF9zcGlfaW5pdCgpOworCWtpcmt3b29kX2kyY19pbml0KCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbmV0c3BhY2VfdjJfaTJjX2luZm8sCisJCQkJQVJSQVlfU0laRShuZXRzcGFjZV92Ml9pMmNfaW5mbykpOworCisJbmV0c3BhY2VfdjJfZ3Bpb19sZWRzX2luaXQoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5ldHNwYWNlX3YyX2dwaW9fYnV0dG9ucyk7CisKKwlpZiAoZ3Bpb19yZXF1ZXN0KE5FVFNQQUNFX1YyX0dQSU9fUE9XRVJfT0ZGLCAicG93ZXItb2ZmIikgPT0gMCAmJgorCSAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUU1BBQ0VfVjJfR1BJT19QT1dFUl9PRkYsIDApID09IDApCisJCXBtX3Bvd2VyX29mZiA9IG5ldHNwYWNlX3YyX3Bvd2VyX29mZjsKKwllbHNlCisJCXByX2VycigibmV0c3BhY2VfdjI6IGZhaWxlZCB0byBjb25maWd1cmUgcG93ZXItb2ZmIEdQSU9cbiIpOworfQorCitNQUNISU5FX1NUQVJUKE5FVFNQQUNFX1YyLCAiTGFDaWUgTmV0d29yayBTcGFjZSB2MiIpCisJLnBoeXNfaW8JPSBLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEtJUktXT09EX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gbmV0c3BhY2VfdjJfaW5pdCwKKwkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKKwkudGltZXIJCT0gJm5ldHNwYWNlX3YyX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYwppbmRleCA2MTgyZjU0Li5mY2FmODc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2Nsb2Nrcy5jCkBAIC03LDggKzcsNiBAQAogICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTMxLDEyICsyOSw2IEBACiAjZGVmaW5lIEhDTEtESVYoYykJKCgoYykgPj4gIDApICYgMHgwMikKICNkZWZpbmUgUENMS0RJVihjKQkoKChjKSA+PiAxNikgJiAweDAzKQogCi11bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQgKHVuc2lnbmVkIGludCBjcHUpIC8qIGluIGtIeiAqLwotewotCXJldHVybiBmY2xrZnJlcV9nZXQgKCkvMTAwMDsKLX0KLUVYUE9SVF9TWU1CT0woY3B1ZnJlcV9nZXQpOwotCiB1bnNpZ25lZCBpbnQgZmNsa2ZyZXFfZ2V0ICh2b2lkKQogewogCXVuc2lnbmVkIGludCBjbGtzZXQgPSBDU0NfQ0xLU0VUOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXNtL0tjb25maWcKaW5kZXggZDE0MGFiYy4uZjc4MDA4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnCkBAIC0zLDYgKzMsMzAgQEAKIGNvbW1lbnQgIk1TTSBCb2FyZCBUeXBlIgogCWRlcGVuZHMgb24gQVJDSF9NU00KIAorY29uZmlnIE1TTV9ERUJVR19VQVJUCisJaW50CisJZGVmYXVsdCAxIGlmIE1TTV9ERUJVR19VQVJUMQorCWRlZmF1bHQgMiBpZiBNU01fREVCVUdfVUFSVDIKKwlkZWZhdWx0IDMgaWYgTVNNX0RFQlVHX1VBUlQzCisKK2Nob2ljZQorCXByb21wdCAiRGVidWcgVUFSVCIKKworCWRlZmF1bHQgTVNNX0RFQlVHX1VBUlRfTk9ORQorCisJY29uZmlnIE1TTV9ERUJVR19VQVJUX05PTkUKKwkJYm9vbCAiTm9uZSIKKworCWNvbmZpZyBNU01fREVCVUdfVUFSVDEKKwkJYm9vbCAiVUFSVDEiCisKKwljb25maWcgTVNNX0RFQlVHX1VBUlQyCisJCWJvb2wgIlVBUlQyIgorCisJY29uZmlnIE1TTV9ERUJVR19VQVJUMworCQlib29sICJVQVJUMyIKK2VuZGNob2ljZQorCiBjb25maWcgTUFDSF9IQUxJQlVUCiAJZGVwZW5kcyBvbiBBUkNIX01TTQogCWRlZmF1bHQgeQpAQCAtMTAsNCArMzQsMTAgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgUXVhbGNvbW0gU1VSRjcyMDFBIGV2YWwgYm9hcmQuCiAKK2NvbmZpZyBNQUNIX1RST1VUCisJZGVmYXVsdCB5CisJYm9vbCAiSFRDIERyZWFtIChha2EgdHJvdXQpIgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBIVEMgRHJlYW0sIFQtTW9iaWxlIEcxLCBBbmRyb2lkIEFEUDEgZGV2aWNlcy4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUKaW5kZXggMWFhNDcwMC4uOTFlNmY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUKQEAgLTYsMyArNiw0IEBACiAKIG9iai0kKENPTkZJR19NQUNIX0hBTElCVVQpICs9IGJvYXJkLWhhbGlidXQubwogCitvYmotJChDT05GSUdfTUFDSF9UUk9VVCkgKz0gYm9hcmQtZHJlYW0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtZHJlYW0uYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWRyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhZmE4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWRyZWFtLmMKQEAgLTAsMCArMSw5MyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtZHJlYW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgImJvYXJkLWRyZWFtLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXNtX2RldmljZV91YXJ0MywKKwkmbXNtX2RldmljZV9zbWQsCisJJm1zbV9kZXZpY2VfbmFuZCwKKwkmbXNtX2RldmljZV9oc3VzYiwKKwkmbXNtX2RldmljZV9pMmMsCit9OworCitleHRlcm4gc3RydWN0IHN5c190aW1lciBtc21fdGltZXI7CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0cm91dF9pbml0X2lycSh2b2lkKQoreworCW1zbV9pbml0X2lycSgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdHJvdXRfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywgc3RydWN0IHRhZyAqdGFncywKKwkJCQljaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQoreworCW1pLT5ucl9iYW5rcyA9IDE7CisJbWktPmJhbmtbMF0uc3RhcnQgPSBQSFlTX09GRlNFVDsKKwltaS0+YmFua1swXS5ub2RlID0gUEhZU19UT19OSUQoUEhZU19PRkZTRVQpOworCW1pLT5iYW5rWzBdLnNpemUgPSAoMTAxKjEwMjQqMTAyNCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0cm91dF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdHJvdXRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCA9IFRST1VUX0NQTERfQkFTRSwKKwkJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKFRST1VUX0NQTERfU1RBUlQpLAorCQkubGVuZ3RoICA9IFRST1VUX0NQTERfU0laRSwKKwkJLnR5cGUgICAgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRyb3V0X21hcF9pbyh2b2lkKQoreworCW1zbV9tYXBfY29tbW9uX2lvKCk7CisJaW90YWJsZV9pbml0KHRyb3V0X2lvX2Rlc2MsIEFSUkFZX1NJWkUodHJvdXRfaW9fZGVzYykpOworCisjaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUMworCS8qIHJvdXRlIFVBUlQzIHRvIHRoZSAiSDJXIiBleHRlbmRlZCB1c2IgY29ubmVjdG9yICovCisJd3JpdGViKDB4ODAsIFRST1VUX0NQTERfQkFTRSArIDB4MDApOworI2VuZGlmCisKKwltc21fY2xvY2tfaW5pdCgpOworfQorCitNQUNISU5FX1NUQVJUKFRST1VULCAiSFRDIERyZWFtIikKKwkucGh5c19pbwk9IE1TTV9ERUJVR19VQVJUX1BIWVMsCisJLmlvX3BnX29mZnN0CT0gKChNU01fREVCVUdfVUFSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAwMDEwMCwKKwkuZml4dXAJCT0gdHJvdXRfZml4dXAsCisJLm1hcF9pbwkJPSB0cm91dF9tYXBfaW8sCisJLmluaXRfaXJxCT0gdHJvdXRfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IHRyb3V0X2luaXQsCisJLnRpbWVyCQk9ICZtc21fdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtZHJlYW0uaCBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWRyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNDVhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLWRyZWFtLmgKQEAgLTAsMCArMSw1IEBACisKKyNkZWZpbmUgVFJPVVRfQ1BMRF9CQVNFICAgMHhFODEwMDAwMAorI2RlZmluZSBUUk9VVF9DUExEX1NUQVJUICAweDk4MDAwMDAwCisjZGVmaW5lIFRST1VUX0NQTERfU0laRSAgIFNaXzRLCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMWRiM2M5Ny4uZDQ4NzQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDE1ICsxNCwxOCBAQAogICoKICAqLwogCisKKwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgogCisjaWZkZWYgQ09ORklHX01TTV9ERUJVR19VQVJUCiAJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJQCBzZWUgaWYgdGhlIE1NVSBpcyBlbmFibGVkIGFuZCBzZWxlY3QgYXBwcm9wcmlhdGUgYmFzZSBhZGRyZXNzCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQotCWxkcmVxCVxyeCwgPU1TTV9VQVJUMV9QSFlTCi0JbW92bmUJXHJ4LCAjMAorCWxkcmVxCVxyeCwgPU1TTV9ERUJVR19VQVJUX1BIWVMKKwlsZHJuZQlccngsID1NU01fREVCVUdfVUFSVF9CQVNFCiAJLmVuZG0KIAogCS5tYWNybwlzZW5kdWFydCxyZCxyeApAQCAtMzIsMTMgKzM1LDIwIEBACiAKIAkubWFjcm8Jd2FpdHVhcnQscmQscngKIAlAIHdhaXQgZm9yIFRYX1JFQURZCi0JdGVxCVxyeCwgIzAKLQlibmUJMmYKLTE6CWxkcglccmQsIFtccngsICMweDA4XQorMTAwMToJbGRyCVxyZCwgW1xyeCwgIzB4MDhdCiAJdHN0CVxyZCwgIzB4MDQKLQliZXEJMWIKLTI6CisJYmVxCTEwMDFiCiAJLmVuZG0KKyNlbHNlCisJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLmVuZG0KKworCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCS5lbmRtCisKKwkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkuZW5kbQorI2VuZGlmCiAKIAkubWFjcm8JYnVzeXVhcnQscmQscngKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlY2YyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oCisgKi8KKyNpZm5kZWYgQVNNQVJNX01BQ0hfTU1DX0gKKyNkZWZpbmUgQVNNQVJNX01BQ0hfTU1DX0gKKworI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisKK3N0cnVjdCBlbWJlZGRlZF9zZGlvX2RhdGEgeworCXN0cnVjdCBzZGlvX2NpcyBjaXM7CisJc3RydWN0IHNkaW9fY2NjciBjY2NyOworCXN0cnVjdCBzZGlvX2VtYmVkZGVkX2Z1bmMgKmZ1bmNzOworCWludCBudW1fZnVuY3M7Cit9OworCitzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBvY3JfbWFzazsJCQkvKiBhdmFpbGFibGUgdm9sdGFnZXMgKi8KKwl1MzIgKCp0cmFuc2xhdGVfdmRkKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCk7CisJdW5zaWduZWQgaW50ICgqc3RhdHVzKShzdHJ1Y3QgZGV2aWNlICopOworCXN0cnVjdCBlbWJlZGRlZF9zZGlvX2RhdGEgKmVtYmVkZGVkX3NkaW87CisJaW50ICgqcmVnaXN0ZXJfc3RhdHVzX25vdGlmeSkodm9pZCAoKmNhbGxiYWNrKShpbnQgY2FyZF9wcmVzZW50LCB2b2lkICpkZXZfaWQpLCB2b2lkICpkZXZfaWQpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLmgKaW5kZXggMmY3YjRjOC4uOWRhZTFhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaApAQCAtODQsNiArODQsMTggQEAKICNkZWZpbmUgTVNNX1VBUlQzX1BIWVMgICAgICAgIDB4QTlDMDAwMDAKICNkZWZpbmUgTVNNX1VBUlQzX1NJWkUgICAgICAgIFNaXzRLCiAKKyNpZmRlZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQKKyNkZWZpbmUgTVNNX0RFQlVHX1VBUlRfQkFTRSAgIDB4RTEwMDAwMDAKKyNpZiBDT05GSUdfTVNNX0RFQlVHX1VBUlQgPT0gMQorI2RlZmluZSBNU01fREVCVUdfVUFSVF9QSFlTICAgTVNNX1VBUlQxX1BIWVMKKyNlbGlmIENPTkZJR19NU01fREVCVUdfVUFSVCA9PSAyCisjZGVmaW5lIE1TTV9ERUJVR19VQVJUX1BIWVMgICBNU01fVUFSVDJfUEhZUworI2VsaWYgQ09ORklHX01TTV9ERUJVR19VQVJUID09IDMKKyNkZWZpbmUgTVNNX0RFQlVHX1VBUlRfUEhZUyAgIE1TTV9VQVJUM19QSFlTCisjZW5kaWYKKyNkZWZpbmUgTVNNX0RFQlVHX1VBUlRfU0laRSAgIFNaXzRLCisjZW5kaWYKKwogI2RlZmluZSBNU01fU0RDMV9QSFlTICAgICAgICAgMHhBMDQwMDAwMAogI2RlZmluZSBNU01fU0RDMV9TSVpFICAgICAgICAgU1pfNEsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggMDI2ZTg5NS4uZDk0MjkyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0xNiw5ICsxNiwxNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01TTV9VTkNPTVBSRVNTX0gKIAogI2luY2x1ZGUgImhhcmR3YXJlLmgiCisjaW5jbHVkZSAibGludXgvaW8uaCIKKyNpbmNsdWRlICJtYWNoL21zbV9pb21hcC5oIgogCiBzdGF0aWMgdm9pZCBwdXRjKGludCBjKQogeworI2lmIGRlZmluZWQoTVNNX0RFQlVHX1VBUlRfUEhZUykKKwl1bnNpZ25lZCBiYXNlID0gTVNNX0RFQlVHX1VBUlRfUEhZUzsKKwl3aGlsZSAoIShyZWFkbChiYXNlICsgMHgwOCkgJiAweDA0KSkgOworCXdyaXRlbChjLCBiYXNlICsgMHgwYyk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwppbmRleCA2ZTc2OTJmLi4xYzVlN2RhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKQEAgLTQyLDYgKzQyLDkgQEAKIAlNU01fREVWSUNFKEdQSU8xKSwKIAlNU01fREVWSUNFKEdQSU8yKSwKIAlNU01fREVWSUNFKENMS19DVEwpLAorI2lmZGVmIENPTkZJR19NU01fREVCVUdfVUFSVAorCU1TTV9ERVZJQ0UoREVCVUdfVUFSVCksCisjZW5kaWYKIAl7CiAJCS52aXJ0dWFsID0gICh1bnNpZ25lZCBsb25nKSBNU01fU0hBUkVEX1JBTV9CQVNFLAogCQkucGZuID0gICAgICBfX3BoeXNfdG9fcGZuKE1TTV9TSEFSRURfUkFNX1BIWVMpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2JvYXJkLW5oazg4MTUuYyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMKaW5kZXggMTE2Mzk0NC4uOTQzOGJmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2JvYXJkLW5oazg4MTUuYworKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvYm9hcmQtbmhrODgxNS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5oazg4MTVfb25lbmFuZF9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgbmhrODgxNV9vbmVuYW5kX2RhdGEgPSB7CiAJLnBhcnRzCQk9IG5oazg4MTVfb25lbmFuZF9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobmhrODgxNV9vbmVuYW5kX3BhcnRpdGlvbnMpLAogfTsKQEAgLTE2Myw3ICsxNjQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmhrODgxNV9vbmVuYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAib25lbmFuZCIsCisJLm5hbWUJCT0gIm9uZW5hbmQtZmxhc2giLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbmhrODgxNV9vbmVuYW5kX2RhdGEsCkBAIC0xNzQsMTAgKzE3NSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbmhrODgxNV9vbmVuYW5kX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfT05FTkFORAorI2lmZGVmIENPTkZJR19NVERfT05FTkFORAogICAgICAgIC8qIFNldCB1cCBTTUNTMCBmb3IgT25lTmFuZCAqLwotICAgICAgIHdyaXRlbCgweDAwMDAzMGRiLCBGU01DX0JDUjApOwotICAgICAgIHdyaXRlbCgweDAyMTAwNTUxLCBGU01DX0JUUjApOworCXdyaXRlbCgweDAwMDAzMGRiLCBGU01DX0JDUigwKSk7CisJd3JpdGVsKDB4MDIxMDA1NTEsIEZTTUNfQlRSKDApKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCmluZGV4IGZlYjBlNTQuLjAzOGYyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCkBAIC02Niw3ICs2Niw3IEBACiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJQlVHX09OKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKTsKIApAQCAtNzgsNyArNzgsNyBAQAogCQlnb3RvIG91dF9tYXNrOwogCiAJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOwotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCiAJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCBhY3Rpb24pOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAJICogTWF5YmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgZ28gdG8ga2VybmVsL2lycS9jaGlwLmM/ICovCiAJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKIAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKIAogCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpCkBAIC05Nyw3ICs5Nyw3IEBACiAJLyogYWNrIHVuY29uZGl0aW9uYWxseSB0byB1bm1hc2sgbG93ZXIgcHJpbyBpcnFzICovCiAJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KICNkZWZpbmUgaGFuZGxlX2lycSBoYW5kbGVfcHJpb19pcnEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggODdlNTM5YS4uOWNlMTdmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0zLDcgKzMsOCBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIGNsb2NrLm8gaXJxLm8gbXV4Lm8gc2VyaWFsLm8gZGV2aWNlcy5vCitvYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIGlycS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubworb2JqLXkgKz0gY2xvY2subyBjbG9ja19kYXRhLm8gb3BwX2RhdGEubwogCiBvYmotJChDT05GSUdfT01BUF9NQ0JTUCkgKz0gbWNic3AubwogCkBAIC0xNyw2ICsxOCw5IEBACiBvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykJKz0gbWFpbGJveF9tYWNoLm8KIG1haWxib3hfbWFjaC1vYmpzCQk6PSBtYWlsYm94Lm8KIAoraTJjLW9tYXAtJChDT05GSUdfSTJDX09NQVApCQk6PSBpMmMubworb2JqLXkJCQkJCSs9ICQoaTJjLW9tYXAtbSkgJChpMmMtb21hcC15KQorCiBsZWQteSA6PSBsZWRzLm8KIAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CkBAIC00OCwzICs1Miw3IEBACiBsZWQtJChDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyKQkrPSBsZWRzLWgycDItZGVidWcubwogbGVkLSQoQ09ORklHX01BQ0hfT01BUF9PU0spCQkrPSBsZWRzLW9zay5vCiBvYmotJChDT05GSUdfTEVEUykJCQkrPSAkKGxlZC15KQorCitpZm5lcSAoJChDT05GSUdfRkJfT01BUCksKQorb2JqLXkgKz0gbGNkX2RtYS5vCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwppbmRleCBmNGI3MmMxLi43ZTcwYzNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zMCw3ICszMSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2ZwZ2EuaD4KLSNpbmNsdWRlIDxwbGF0L25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpAQCAtMTAwLDYgKzEwMCwxMiBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQsCS8qIFBoeXNpY2FsICovCkBAIC0xNjcsOCArMTczLDQwIEBACiAJLnJlc291cmNlCT0gJm5vcl9yZXNvdXJjZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9kYXRhID0gewotCS5vcHRpb25zCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCitzdGF0aWMgdm9pZCBuYW5kX2NtZF9jdGwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCXVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwltYXNrID0gKGN0cmwgJiBOQU5EX0NMRSkgPyAweDAyIDogMDsKKwlpZiAoY3RybCAmIE5BTkRfQUxFKQorCQltYXNrIHw9IDB4MDQ7CisJd3JpdGViKGNtZCwgKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgbWFzayk7Cit9CisKKyNkZWZpbmUgRlNBTVBMRV9OQU5EX1JCX0dQSU9fUElOCTYyCisKK3N0YXRpYyBpbnQgbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEZTQU1QTEVfTkFORF9SQl9HUElPX1BJTik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIG5hbmRfZGF0YSA9IHsKKwkuY2hpcAk9IHsKKwkJLm5yX2NoaXBzCQk9IDEsCisJCS5jaGlwX29mZnNldAkJPSAwLAorCQkub3B0aW9ucwkJPSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUywKKwkJLnBhcnRfcHJvYmVfdHlwZXMJPSBwYXJ0X3Byb2JlcywKKwl9LAorCS5jdHJsCT0geworCQkuY21kX2N0cmwJPSBuYW5kX2NtZF9jdGwsCisJCS5kZXZfcmVhZHkJPSBuYW5kX2Rldl9yZWFkeSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlID0gewpAQCAtMTc4LDcgKzIxNiw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcG5hbmQiLAorCS5uYW1lCQk9ICJnZW5fbmFuZCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKQEAgLTE5MCw2ICsyMjgsOSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzbWM5MXhfaW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAogfTsKQEAgLTIzMywxMyArMjc0LDYgQEAKIAkmbGNkX2RldmljZSwKIH07CiAKLSNkZWZpbmUgUDJfTkFORF9SQl9HUElPX1BJTgk2MgotCi1zdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZGF0YSkKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoUDJfTkFORF9SQl9HUElPX1BJTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGZzYW1wbGVfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKQEAgLTI1MCw5ICsyODQsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9mc2FtcGxlX2luaXQodm9pZCkKIHsKLQlpZiAoZ3Bpb19yZXF1ZXN0KFAyX05BTkRfUkJfR1BJT19QSU4sICJOQU5EIHJlYWR5IikgPCAwKQorCWlmIChncGlvX3JlcXVlc3QoRlNBTVBMRV9OQU5EX1JCX0dQSU9fUElOLCAiTkFORCByZWFkeSIpIDwgMCkKIAkJQlVHKCk7Ci0JbmFuZF9kYXRhLmRldl9yZWFkeSA9IG5hbmRfZGV2X3JlYWR5OworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEZTQU1QTEVfTkFORF9SQl9HUElPX1BJTik7CiAKIAlvbWFwX2NmZ19yZWcoTDNfMTYxMF9GTEFTSF9DUzJCX09FKTsKIAlvbWFwX2NmZ19yZWcoTThfMTYxMF9GTEFTSF9DUzJCX1dFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCA4OWJhOGVjLi5mYTdjZWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90cHM2NTAxMC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CkBAIC00MCw3ICs0MSw2IEBACiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KLSNpbmNsdWRlIDxwbGF0L25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L2lyZGEuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CkBAIC0xNzksMTEgKzE3OSw0MyBAQAogCX0sCiB9OwogCi0vKiBkaXAgc3dpdGNoZXMgY29udHJvbCBOQU5EIGNoaXAgYWNjZXNzOiAgOCBiaXQsIDE2IGJpdCwgb3IgbmVpdGhlciAqLwotc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSBoMl9uYW5kX2RhdGEgPSB7Ci0JLm9wdGlvbnMJPSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUywKLQkucGFydHMJCT0gaDJfbmFuZF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDJfbmFuZF9wYXJ0aXRpb25zKSwKK3N0YXRpYyB2b2lkIGgyX25hbmRfY21kX2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCW1hc2sgPSAoY3RybCAmIE5BTkRfQ0xFKSA/IDB4MDIgOiAwOworCWlmIChjdHJsICYgTkFORF9BTEUpCisJCW1hc2sgfD0gMHgwNDsKKwl3cml0ZWIoY21kLCAodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgfCBtYXNrKTsKK30KKworI2RlZmluZSBIMl9OQU5EX1JCX0dQSU9fUElOCTYyCisKK3N0YXRpYyBpbnQgaDJfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEgyX05BTkRfUkJfR1BJT19QSU4pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqaDJfcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIGgyX25hbmRfcGxhdGRhdGEgPSB7CisJLmNoaXAJPSB7CisJCS5ucl9jaGlwcwkJPSAxLAorCQkuY2hpcF9vZmZzZXQJCT0gMCwKKwkJLm5yX3BhcnRpdGlvbnMJCT0gQVJSQVlfU0laRShoMl9uYW5kX3BhcnRpdGlvbnMpLAorCQkucGFydGl0aW9ucwkJPSBoMl9uYW5kX3BhcnRpdGlvbnMsCisJCS5vcHRpb25zCQk9IE5BTkRfU0FNU1VOR19MUF9PUFRJT05TLAorCQkucGFydF9wcm9iZV90eXBlcwk9IGgyX3BhcnRfcHJvYmVzLAorCX0sCisJLmN0cmwJPSB7CisJCS5jbWRfY3RybAk9IGgyX25hbmRfY21kX2N0bCwKKwkJLmRldl9yZWFkeQk9IGgyX25hbmRfZGV2X3JlYWR5LAorCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDJfbmFuZF9yZXNvdXJjZSA9IHsKQEAgLTE5MSwxNSArMjIzLDIxIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoMl9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcG5hbmQiLAorCS5uYW1lCQk9ICJnZW5fbmFuZCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmgyX25hbmRfZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaDJfbmFuZF9wbGF0ZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gMSwKIAkucmVzb3VyY2UJPSAmaDJfbmFuZF9yZXNvdXJjZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIGgyX3NtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoMl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBPTUFQMTYxMF9FVEhSX1NUQVJULAkJLyogUGh5c2ljYWwgKi8KQEAgLTIxNiw2ICsyNTQsOSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDJfc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoMl9zbWM5MXhfaW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoMl9zbWM5MXhfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBoMl9zbWM5MXhfcmVzb3VyY2VzLAogfTsKQEAgLTM2OCw4ICs0MDksNiBAQAogCXsgT01BUF9UQUdfTENELAkJJmgyX2xjZF9jb25maWcgfSwKIH07CiAKLSNkZWZpbmUgSDJfTkFORF9SQl9HUElPX1BJTgk2MgotCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfaW5pdCh2b2lkKQogewogCS8qIEhlcmUgd2UgYXNzdW1lIHRoZSBOT1IgYm9vdCBjb25maWc6ICBOT1Igb24gQ1MzIChwb3NzaWJseSBzd2FwcGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggZjVjYzBhNy4uNmE3ZjljMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90cHM2NTAxMC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KLSNpbmNsdWRlIDxwbGF0L25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KQEAgLTE4MSwxMSArMTgxLDQzIEBACiAJfSwKIH07CiAKLS8qIGRpcCBzd2l0Y2hlcyBjb250cm9sIE5BTkQgY2hpcCBhY2Nlc3M6ICA4IGJpdCwgMTYgYml0LCBvciBuZWl0aGVyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIG5hbmRfZGF0YSA9IHsKLQkub3B0aW9ucwk9IE5BTkRfU0FNU1VOR19MUF9PUFRJT05TLAotCS5wYXJ0cwkJPSBuYW5kX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShuYW5kX3BhcnRpdGlvbnMpLAorc3RhdGljIHZvaWQgbmFuZF9jbWRfY3RsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJbWFzayA9IChjdHJsICYgTkFORF9DTEUpID8gMHgwMiA6IDA7CisJaWYgKGN0cmwgJiBOQU5EX0FMRSkKKwkJbWFzayB8PSAweDA0OworCXdyaXRlYihjbWQsICh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyB8IG1hc2spOworfQorCisjZGVmaW5lIEgzX05BTkRfUkJfR1BJT19QSU4JMTAKKworc3RhdGljIGludCBuYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoSDNfTkFORF9SQl9HUElPX1BJTik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgbmFuZF9wbGF0ZGF0YSA9IHsKKwkuY2hpcAk9IHsKKwkJLm5yX2NoaXBzCQk9IDEsCisJCS5jaGlwX29mZnNldAkJPSAwLAorCQkubnJfcGFydGl0aW9ucwkJPSBBUlJBWV9TSVpFKG5hbmRfcGFydGl0aW9ucyksCisJCS5wYXJ0aXRpb25zCQk9IG5hbmRfcGFydGl0aW9ucywKKwkJLm9wdGlvbnMJCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCisJCS5wYXJ0X3Byb2JlX3R5cGVzCT0gcGFydF9wcm9iZXMsCisJfSwKKwkuY3RybAk9IHsKKwkJLmNtZF9jdHJsCT0gbmFuZF9jbWRfY3RsLAorCQkuZGV2X3JlYWR5CT0gbmFuZF9kZXZfcmVhZHksCisKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlID0gewpAQCAtMTkzLDE1ICsyMjUsMjEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwbmFuZCIsCisJLm5hbWUJCT0gImdlbl9uYW5kIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZuYW5kX3BsYXRkYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAogCS5yZXNvdXJjZQk9ICZuYW5kX3Jlc291cmNlLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCisJLmxlZGEJPSBSUENfTEVEXzEwMF8xMCwKKwkubGVkYgk9IFJQQ19MRURfVFhfUlgsCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IE9NQVAxNzEwX0VUSFJfU1RBUlQsCQkvKiBQaHlzaWNhbCAqLwpAQCAtMjE4LDYgKzI1Niw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtYzkxeF9pbmZvLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OwpAQCAtMzMyLDEzICszNzMsNiBAQAogCX0sCiB9OwogCi0jZGVmaW5lIEgzX05BTkRfUkJfR1BJT19QSU4JMTAKLQotc3RhdGljIGludCBuYW5kX2Rldl9yZWFkeShzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEgzX05BTkRfUkJfR1BJT19QSU4pOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfaW5pdCh2b2lkKQogewogCS8qIEhlcmUgd2UgYXNzdW1lIHRoZSBOT1IgYm9vdCBjb25maWc6ICBOT1Igb24gQ1MzIChwb3NzaWJseSBzd2FwcGVkCkBAIC0zNTYsNyArMzkwLDcgQEAKIAluYW5kX3Jlc291cmNlLmVuZCArPSBTWl80SyAtIDE7CiAJaWYgKGdwaW9fcmVxdWVzdChIM19OQU5EX1JCX0dQSU9fUElOLCAiTkFORCByZWFkeSIpIDwgMCkKIAkJQlVHKCk7Ci0JbmFuZF9kYXRhLmRldl9yZWFkeSA9IG5hbmRfZGV2X3JlYWR5OworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEgzX05BTkRfUkJfR1BJT19QSU4pOwogCiAJLyogR1BJTzEwIEZ1bmNfTVVYX0NUUkwgcmVnIGJpdCAyOToyNywgQ29uZmlndXJlIFYyIHRvIG1vZGUxIGFzIEdQSU8gKi8KIAkvKiBHUElPMTAgcHVsbHVwL2Rvd24gcmVnaXN0ZXIsIEVuYWJsZSBwdWxsdXAgb24gR1BJTzEwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1odGNoZXJhbGQuYwppbmRleCA1ZjI4YTVjLi5lMzY2MzlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaHRjaGVyYWxkLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIApAQCAtMTQwLDYgKzE0MSwxNSBAQAogCS5yZXNvdXJjZQk9IGtwX3Jlc291cmNlcywKIH07CiAKKy8qIFVTQiBEZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIGh0Y2hlcmFsZF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLm90ZyA9IDAsCisJLnJlZ2lzdGVyX2hvc3QgPSAwLAorCS5yZWdpc3Rlcl9kZXYgID0gMSwKKwkuaG1jX21vZGUgPSA0LAorCS5waW5zWzBdID0gMiwKK307CisKIC8qIExDRCBEZXZpY2UgcmVzb3VyY2VzICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsY2RfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJsY2RfaHRjaGVyYWxkIiwKQEAgLTIxNCw2ICsyMjQsNTcgQEAKIAl9CiB9CiAKKyNkZWZpbmUgSFRDSEVSQUxEX0dQSU9fVVNCX0VOMSAzMworI2RlZmluZSBIVENIRVJBTERfR1BJT19VU0JfRU4yIDczCisjZGVmaW5lIEhUQ0hFUkFMRF9HUElPX1VTQl9ETSAgMzUKKyNkZWZpbmUgSFRDSEVSQUxEX0dQSU9fVVNCX0RQICAzNgorCitzdGF0aWMgdm9pZCBfX2luaXQgaHRjaGVyYWxkX3VzYl9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdHJpZXMgPSAyMDsKKwl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworCisJLyogUmVxdWVzdCB0aGUgR1BJT3Mgd2UgbmVlZCB0byBjb250cm9sIGhlcmUgKi8KKwlpZiAoZ3Bpb19yZXF1ZXN0KEhUQ0hFUkFMRF9HUElPX1VTQl9FTjEsICJoZXJhbGRfdXNiIikgPCAwKQorCQlnb3RvIGVycjE7CisKKwlpZiAoZ3Bpb19yZXF1ZXN0KEhUQ0hFUkFMRF9HUElPX1VTQl9FTjIsICJoZXJhbGRfdXNiIikgPCAwKQorCQlnb3RvIGVycjI7CisKKwlpZiAoZ3Bpb19yZXF1ZXN0KEhUQ0hFUkFMRF9HUElPX1VTQl9ETSwgImhlcmFsZF91c2IiKSA8IDApCisJCWdvdG8gZXJyMzsKKworCWlmIChncGlvX3JlcXVlc3QoSFRDSEVSQUxEX0dQSU9fVVNCX0RQLCAiaGVyYWxkX3VzYiIpIDwgMCkKKwkJZ290byBlcnI0OworCisJLyogZm9yY2UgVVNCX0VOIEdQSU8gdG8gMCAqLworCWRvIHsKKwkJLyogb3V0cHV0IGxvdyAqLworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSFRDSEVSQUxEX0dQSU9fVVNCX0VOMSwgMCk7CisJfSB3aGlsZSAoKHZhbHVlID0gZ3Bpb19nZXRfdmFsdWUoSFRDSEVSQUxEX0dQSU9fVVNCX0VOMSkpID09IDEgJiYKKwkJCS0tdHJpZXMpOworCisJaWYgKHZhbHVlID09IDEpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byByZXNldCBVU0IsIHRyeWluZyB0byBjb250aW51ZVxuIik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSFRDSEVSQUxEX0dQSU9fVVNCX0VOMiwgMCk7IC8qIG91dHB1dCBsb3cgKi8KKwlncGlvX2RpcmVjdGlvbl9pbnB1dChIVENIRVJBTERfR1BJT19VU0JfRE0pOyAvKiBpbnB1dCAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEhUQ0hFUkFMRF9HUElPX1VTQl9EUCk7IC8qIGlucHV0ICovCisKKwlnb3RvIGRvbmU7CisKK2VycjQ6CisJZ3Bpb19mcmVlKEhUQ0hFUkFMRF9HUElPX1VTQl9ETSk7CitlcnIzOgorCWdwaW9fZnJlZShIVENIRVJBTERfR1BJT19VU0JfRU4yKTsKK2VycjI6CisJZ3Bpb19mcmVlKEhUQ0hFUkFMRF9HUElPX1VTQl9FTjEpOworZXJyMToKKwlwcmludGsoS0VSTl9FUlIgIlVuYWJsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBVU0JcbiIpOworZG9uZToKKwlwcmludGsoS0VSTl9JTkZPICJVU0Igc2V0dXAgY29tcGxldGUuXG4iKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGh0Y2hlcmFsZF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSFRDIEhlcmFsZCBpbml0LlxuIik7CkBAIC0yMjUsNiArMjg2LDkgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAogCWh0Y2hlcmFsZF9kaXNhYmxlX3dhdGNoZG9nKCk7CisKKwlodGNoZXJhbGRfdXNiX2VuYWJsZSgpOworCW9tYXBfdXNiX2luaXQoJmh0Y2hlcmFsZF91c2JfY29uZmlnKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGh0Y2hlcmFsZF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggY2YwZmRiOS4uMjEzM2IwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMTQyLDYgKzE0MywxMSBAQAogCS5yZXNvdXJjZQk9IGlubm92YXRvcl9rcF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBpbm5vdmF0b3Jfc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCisJLmxlZGEJPSBSUENfTEVEXzEwMF8xMCwKKwkubGVkYgk9IFJQQ19MRURfVFhfUlgsCit9OwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIApAQCAtMTc1LDYgKzE4MSw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3IxNTEwX3NtYzkxeF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNtYzkxeCIsCiAJLmlkCQk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaW5ub3ZhdG9yX3NtYzkxeF9pbmZvLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlubm92YXRvcjE1MTBfc21jOTF4X3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gaW5ub3ZhdG9yMTUxMF9zbWM5MXhfcmVzb3VyY2VzLAogfTsKQEAgLTI0MSw2ICsyNTAsOSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW5ub3ZhdG9yMTYxMF9zbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmlubm92YXRvcl9zbWM5MXhfaW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbm5vdmF0b3IxNjEwX3NtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IGlubm92YXRvcjE2MTBfc21jOTF4X3Jlc291cmNlcywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCA1MGM5MmMxLi5jY2VhNGY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KQEAgLTExNSw2ICsxMTYsMTIgQEAKIAkucmVzb3VyY2UJPSAmb3NrX2ZsYXNoX3Jlc291cmNlLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgb3NrNTkxMl9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKKwkubGVkYQk9IFJQQ19MRURfMTAwXzEwLAorCS5sZWRiCT0gUlBDX0xFRF9UWF9SWCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3NrNTkxMl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBPTUFQX09TS19FVEhSX1NUQVJULAkJLyogUGh5c2ljYWwgKi8KQEAgLTEzMSw2ICsxMzgsOSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9zbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZvc2s1OTEyX3NtYzkxeF9pbmZvLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9zazU5MTJfc21jOTF4X3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gb3NrNTkxMl9zbWM5MXhfcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCBjYTdkZjFlLi4xMzg3YTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTMwLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvZnBnYS5oPgotI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CkBAIC02Nyw2ICs2NywxMiBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQsCS8qIFBoeXNpY2FsICovCkBAIC0xMzQsOCArMTQwLDQwIEBACiAJLnJlc291cmNlCT0gJm5vcl9yZXNvdXJjZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9kYXRhID0gewotCS5vcHRpb25zCT0gTkFORF9TQU1TVU5HX0xQX09QVElPTlMsCitzdGF0aWMgdm9pZCBuYW5kX2NtZF9jdGwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCXVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwltYXNrID0gKGN0cmwgJiBOQU5EX0NMRSkgPyAweDAyIDogMDsKKwlpZiAoY3RybCAmIE5BTkRfQUxFKQorCQltYXNrIHw9IDB4MDQ7CisJd3JpdGViKGNtZCwgKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgbWFzayk7Cit9CisKKyNkZWZpbmUgUDJfTkFORF9SQl9HUElPX1BJTgk2MgorCitzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShQMl9OQU5EX1JCX0dQSU9fUElOKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgbmFuZF9kYXRhID0geworCS5jaGlwCT0geworCQkubnJfY2hpcHMJCT0gMSwKKwkJLmNoaXBfb2Zmc2V0CQk9IDAsCisJCS5vcHRpb25zCQk9IE5BTkRfU0FNU1VOR19MUF9PUFRJT05TLAorCQkucGFydF9wcm9iZV90eXBlcwk9IHBhcnRfcHJvYmVzLAorCX0sCisJLmN0cmwJPSB7CisJCS5jbWRfY3RybAk9IG5hbmRfY21kX2N0bCwKKwkJLmRldl9yZWFkeQk9IG5hbmRfZGV2X3JlYWR5LAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2UgPSB7CkBAIC0xNDUsNyArMTgzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwbmFuZCIsCisJLm5hbWUJCT0gImdlbl9uYW5kIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLApAQCAtMTU3LDYgKzE5NSw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtYzkxeF9pbmZvLAorCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OwpAQCAtMjAxLDEzICsyNDIsNiBAQAogCSZsY2RfZGV2aWNlLAogfTsKIAotI2RlZmluZSBQMl9OQU5EX1JCX0dQSU9fUElOCTYyCi0KLXN0YXRpYyBpbnQgbmFuZF9kZXZfcmVhZHkoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICpkYXRhKQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShQMl9OQU5EX1JCX0dQSU9fUElOKTsKLX0KLQogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGVyc2V1czJfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKQEAgLTIyMCw3ICsyNTQsNyBAQAogewogCWlmIChncGlvX3JlcXVlc3QoUDJfTkFORF9SQl9HUElPX1BJTiwgIk5BTkQgcmVhZHkiKSA8IDApCiAJCUJVRygpOwotCW5hbmRfZGF0YS5kZXZfcmVhZHkgPSBuYW5kX2Rldl9yZWFkeTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChQMl9OQU5EX1JCX0dQSU9fUElOKTsKIAogCW9tYXBfY2ZnX3JlZyhMM18xNjEwX0ZMQVNIX0NTMkJfT0UpOwogCW9tYXBfY2ZnX3JlZyhNOF8xNjEwX0ZMQVNIX0NTMkJfV0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggMzVjNzVjMS4uMTY5MTgzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTEwNiw2ICsxMDcsMTIgQEAKIAkucmVzb3VyY2UJPSAmdm9pY2VibHVlX2ZsYXNoX3Jlc291cmNlLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgdm9pY2VibHVlX3NtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2b2ljZWJsdWVfc21jOTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gT01BUF9DUzJfUEhZUyArIDB4MzAwLApAQCAtMTIyLDYgKzEyOSw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2b2ljZWJsdWVfc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ2b2ljZWJsdWVfc21jOTF4X2luZm8sCisJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodm9pY2VibHVlX3NtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHZvaWNlYmx1ZV9zbWM5MXhfcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwppbmRleCA0MmNiZTIwLi4yYmE5YWI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUsIDIwMDkgTm9raWEgY29ycG9yYXRpb24KICAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgogICoKICAqICBNb2RpZmllZCB0byB1c2Ugb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5CkBAIC0yNiwxMiArMjYsMTcgQEAKICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2dlbmVyaWM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydDsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kc3BjazsKKyNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgIm9wcC5oIgorCitfX3UzMiBhcm1faWRsZWN0MV9tYXNrOworc3RydWN0IGNsayAqYXBpX2NrX3AsICpja19kcGxsMV9wLCAqY2tfcmVmX3A7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDEgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGNsa19vbWFwMV9kdW1teV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtNDIsMTM0ICs0NywyNCBAQAogewogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHVtbXkgPSB7Ci0JLmVuYWJsZSA9IGNsa19vbWFwMV9kdW1teV9lbmFibGUsCi0JLmRpc2FibGUgPSBjbGtfb21hcDFfZHVtbXlfZGlzYWJsZSwKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2R1bW15ID0geworCS5lbmFibGUJCT0gY2xrX29tYXAxX2R1bW15X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGNsa19vbWFwMV9kdW1teV9kaXNhYmxlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfY2sgPSB7Ci0JLm5hbWUJPSAiZHVtbXkiLAotCS5vcHMJPSAmY2xrb3BzX2R1bW15LAotCS5mbGFncwk9IFJBVEVfRklYRUQsCi19OwotCi1zdHJ1Y3Qgb21hcF9jbGsgewotCXUzMgkJY3B1OwotCXN0cnVjdCBjbGtfbG9va3VwIGxrOwotfTsKLQotI2RlZmluZSBDTEsoZGV2LCBjb24sIGNrLCBjcCkgCQlcCi0JewkJCQlcCi0JCSAuY3B1ID0gY3AsCQlcCi0JCS5sayA9IHsJCQlcCi0JCQkuZGV2X2lkID0gZGV2LAlcCi0JCQkuY29uX2lkID0gY29uLAlcCi0JCQkuY2xrID0gY2ssCVwKLQkJfSwJCQlcCi0JfQotCi0jZGVmaW5lIENLXzMxMAkoMSA8PCAwKQotI2RlZmluZSBDS183WFgJKDEgPDwgMSkKLSNkZWZpbmUgQ0tfMTUxMAkoMSA8PCAyKQotI2RlZmluZSBDS18xNlhYCSgxIDw8IDMpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcF9jbGtzW10gPSB7Ci0JLyogbm9uLVVMUEQgY2xvY2tzICovCi0JQ0xLKE5VTEwsCSJja19yZWYiLAkmY2tfcmVmLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCi0JQ0xLKE5VTEwsCSJja19kcGxsMSIsCSZja19kcGxsMSwJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCS8qIENLX0dFTjEgY2xvY2tzICovCi0JQ0xLKE5VTEwsCSJja19kcGxsMW91dCIsCSZja19kcGxsMW91dC5jbGssIENLXzE2WFgpLAotCUNMSyhOVUxMLAkiY2tfc29zc2kiLAkmc29zc2lfY2ssCUNLXzE2WFgpLAotCUNMSyhOVUxMLAkiYXJtX2NrIiwJJmFybV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCUNMSyhOVUxMLAkiYXJtcGVyX2NrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJImFybV9ncGlvX2NrIiwJJmFybV9ncGlvX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJImFybXhvcl9jayIsCSZhcm14b3JfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCi0JQ0xLKE5VTEwsCSJhcm10aW1fY2siLAkmYXJtdGltX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZhcm13ZHRfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJmFybXBlcl9jay5jbGssCUNLXzE2WFgpLAotCUNMSygib21hcF93ZHQiLCAiaWNrIiwJCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJhcm1pbnRoX2NrIiwJJmFybWludGhfY2sxNTEwLCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJImFybWludGhfY2siLAkmYXJtaW50aF9jazE2eHgsIENLXzE2WFgpLAotCS8qIENLX0dFTjIgY2xvY2tzICovCi0JQ0xLKE5VTEwsCSJkc3BfY2siLAkmZHNwX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJkc3BtbXVfY2siLAkmZHNwbW11X2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJkc3BwZXJfY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJkc3B4b3JfY2siLAkmZHNweG9yX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJkc3B0aW1fY2siLAkmZHNwdGltX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JLyogQ0tfR0VOMyBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJInRjX2NrIiwJJnRjX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAotCUNMSyhOVUxMLAkidGlwYl9jayIsCSZ0aXBiX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJImwzX29jcGlfY2siLAkmbDNfb2NwaV9jaywJQ0tfMTZYWCB8IENLXzdYWCksCi0JQ0xLKE5VTEwsCSJ0YzFfY2siLAkmdGMxX2NrLAlDS18xNlhYKSwKLQlDTEsoTlVMTCwJInRjMl9jayIsCSZ0YzJfY2ssCUNLXzE2WFgpLAotCUNMSyhOVUxMLAkiZG1hX2NrIiwJJmRtYV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCUNMSyhOVUxMLAkiZG1hX2xjZGZyZWVfY2siLCAmZG1hX2xjZGZyZWVfY2ssIENLXzE2WFgpLAotCUNMSyhOVUxMLAkiYXBpX2NrIiwJJmFwaV9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJImxiX2NrIiwJJmxiX2NrLmNsaywJQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJyaGVhMV9jayIsCSZyaGVhMV9jaywJQ0tfMTZYWCksCi0JQ0xLKE5VTEwsCSJyaGVhMl9jayIsCSZyaGVhMl9jaywJQ0tfMTZYWCksCi0JQ0xLKE5VTEwsCSJsY2RfY2siLAkmbGNkX2NrXzE2eHgsCUNLXzE2WFggfCBDS183WFgpLAotCUNMSyhOVUxMLAkibGNkX2NrIiwJJmxjZF9ja18xNTEwLmNsaywgQ0tfMTUxMCB8IENLXzMxMCksCi0JLyogVUxQRCBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJInVhcnQxX2NrIiwJJnVhcnQxXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAotCUNMSyhOVUxMLAkidWFydDFfY2siLAkmdWFydDFfMTZ4eC5jbGssIENLXzE2WFgpLAotCUNMSyhOVUxMLAkidWFydDJfY2siLAkmdWFydDJfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJInVhcnQzX2NrIiwJJnVhcnQzXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAotCUNMSyhOVUxMLAkidWFydDNfY2siLAkmdWFydDNfMTZ4eC5jbGssIENLXzE2WFgpLAotCUNMSyhOVUxMLAkidXNiX2Nsa28iLAkmdXNiX2Nsa28sCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJInVzYl9oaGNfY2siLAkmdXNiX2hoY19jazE1MTAsIENLXzE1MTAgfCBDS18zMTApLAotCUNMSyhOVUxMLAkidXNiX2hoY19jayIsCSZ1c2JfaGhjX2NrMTZ4eCwgQ0tfMTZYWCksCi0JQ0xLKE5VTEwsCSJ1c2JfZGNfY2siLAkmdXNiX2RjX2NrLAlDS18xNlhYKSwKLQlDTEsoTlVMTCwJInVzYl9kY19jayIsCSZ1c2JfZGNfY2s3eHgsCUNLXzdYWCksCi0JQ0xLKE5VTEwsCSJtY2xrIiwJCSZtY2xrXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAotCUNMSyhOVUxMLAkibWNsayIsCQkmbWNsa18xNnh4LAlDS18xNlhYKSwKLQlDTEsoTlVMTCwJImJjbGsiLAkJJmJjbGtfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKE5VTEwsCSJiY2xrIiwJCSZiY2xrXzE2eHgsCUNLXzE2WFgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tYzFfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoIm1tY2ktb21hcC4wIiwgImZjayIsCSZtbWMzX2NrLAlDS183WFgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwIHwgQ0tfN1hYKSwKLQlDTEsoIm1tY2ktb21hcC4xIiwgImZjayIsCSZtbWMyX2NrLAlDS18xNlhYKSwKLQlDTEsoIm1tY2ktb21hcC4xIiwgImljayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYKSwKLQkvKiBWaXJ0dWFsIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkibXB1IiwJCSZ2aXJ0dWFsX2NrX21wdSwgQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjX2ZjaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjX2ljaywJQ0tfMTZYWCksCi0JQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKCJvbWFwX3V3aXJlIiwgImZjayIsCSZhcm14b3JfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCi0JQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJmRzcHBlcl9jaywJQ0tfMTZYWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAotCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAotCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLX07Ci0KLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKLQotX191MzIgYXJtX2lkbGVjdDFfbWFzazsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBPbWFwMSBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCisvKiBYWFggY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBmaXhlZF9kaXZpc29yX3JlY2FsYyAqLwordW5zaWduZWQgbG9uZyBvbWFwMV93YXRjaGRvZ19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIDE0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit1bnNpZ25lZCBsb25nIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlyZXR1cm4gdmFsICYgY2xrLT5lbmFibGVfYml0ID8gNDgwMDAwMDAgOiAxMjAwMDAwMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfc29zc2lfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3Vuc2lnbmVkIGxvbmcgb21hcDFfc29zc2lfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgZGl2ID0gb21hcF9yZWFkbChNT0RfQ09ORl9DVFJMXzEpOwogCkBAIC0xNzksNjQgKzc0LDYgQEAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gb21hcDFfY2xrX2VuYWJsZSgmYXBpX2NrLmNsayk7Ci0JaWYgKCFyZXR2YWwpIHsKLQkJcmV0dmFsID0gb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljKGNsayk7Ci0JCW9tYXAxX2Nsa19kaXNhYmxlKCZhcGlfY2suY2xrKTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAob21hcDFfY2xrX2VuYWJsZSgmYXBpX2NrLmNsaykgPT0gMCkgewotCQlvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljKGNsayk7Ci0JCW9tYXAxX2Nsa19kaXNhYmxlKCZhcGlfY2suY2xrKTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kc3BjayA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKLX07Ci0KLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqY2xrKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHVhcnRfY2xrICp1Y2xrOwotCi0JcmV0ID0gb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljKGNsayk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCS8qIFNldCBzbWFydCBpZGxlIGFja25vd2xlZGdlbWVudCBtb2RlICovCi0JCXVjbGsgPSAoc3RydWN0IHVhcnRfY2xrICopY2xrOwotCQlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTApIHwgOCwKLQkJCSAgICB1Y2xrLT5zeXNjX2FkZHIpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCi17Ci0Jc3RydWN0IHVhcnRfY2xrICp1Y2xrOwotCi0JLyogU2V0IGZvcmNlIGlkbGUgYWNrbm93bGVkZ2VtZW50IG1vZGUgKi8KLQl1Y2xrID0gKHN0cnVjdCB1YXJ0X2NsayAqKWNsazsKLQlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTgpLCB1Y2xrLT5zeXNjX2FkZHIpOwotCi0Jb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYyhjbGspOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydCA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbCwKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCi19OwotCiBzdGF0aWMgdm9pZCBvbWFwMV9jbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IGFybV9pZGxlY3QxX2NsayAqIGljbGsgPSAoc3RydWN0IGFybV9pZGxlY3QxX2NsayAqKWNsazsKQEAgLTM0NCw3ICsxODEsNyBAQAogCXJldHVybiBkc29yX2V4cDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3Vuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAkvKiBDYWxjdWxhdGUgZGl2aXNvciBlbmNvZGVkIGFzIDItYml0IGV4cG9uZW50ICovCiAJaW50IGRzb3IgPSAxIDw8ICgzICYgKG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CkBAIC0zNTIsNyArMTg5LDcgQEAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCit1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpbnQgZHNvcjsKIApAQCAtMzYzLDI4ICsyMDAsMjkgQEAKIAkgKiBOb3RlIHRoYXQgRFNQX0NLQ1RMIHZpcnQgYWRkciA9IHBoeXMgYWRkciwgc28KIAkgKiB3ZSBtdXN0IHVzZSBfX3Jhd19yZWFkdygpIGluc3RlYWQgb2Ygb21hcF9yZWFkdygpLgogCSAqLwotCW9tYXAxX2Nsa19lbmFibGUoJmFwaV9jay5jbGspOworCW9tYXAxX2Nsa19lbmFibGUoYXBpX2NrX3ApOwogCWRzb3IgPSAxIDw8ICgzICYgKF9fcmF3X3JlYWR3KERTUF9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOwotCW9tYXAxX2Nsa19kaXNhYmxlKCZhcGlfY2suY2xrKTsKKwlvbWFwMV9jbGtfZGlzYWJsZShhcGlfY2tfcCk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwogfQogCiAvKiBNUFUgdmlydHVhbCBjbG9jayBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgb21hcDFfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoraW50IG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSA8PSByYXRlIGFuZCBzd2l0Y2ggdG8gaXQgKi8KIAlzdHJ1Y3QgbXB1X3JhdGUgKiBwdHI7CisJdW5zaWduZWQgbG9uZyBkcGxsMV9yYXRlLCByZWZfcmF0ZTsKIAotCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlkcGxsMV9yYXRlID0gY2xrX2dldF9yYXRlKGNrX2RwbGwxX3ApOworCXJlZl9yYXRlID0gY2xrX2dldF9yYXRlKGNrX3JlZl9wKTsKIAotCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgewotCQlpZiAocHRyLT54dGFsICE9IGNrX3JlZi5yYXRlKQorCWZvciAocHRyID0gb21hcDFfcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsICE9IHJlZl9yYXRlKQogCQkJY29udGludWU7CiAKIAkJLyogRFBMTDEgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZCB3aXRob3V0IHJpc2tpbmcgc3lzdGVtIGNyYXNoICovCi0JCWlmIChsaWtlbHkoY2tfZHBsbDEucmF0ZSE9MCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBja19kcGxsMS5yYXRlKQorCQlpZiAobGlrZWx5KGRwbGwxX3JhdGUgIT0gMCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBkcGxsMV9yYXRlKQogCQkJY29udGludWU7CiAKIAkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KQEAgLTQwNSwxMSArMjQzLDEzIEBACiAJZWxzZQogCQlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKIAotCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOworCS8qIFhYWCBEbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSB0cmVlIGJlbG93IERQTEwxIGF0IHRoaXMgcG9pbnQ/ICovCisJY2tfZHBsbDFfcC0+cmF0ZSA9IHB0ci0+cGxsX3JhdGU7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK2ludCBvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpbnQgZHNvcl9leHA7CiAJdTE2IHJlZ3ZhbDsKQEAgLTQyOSw3ICsyNjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpbnQgZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7CiAJaWYgKGRzb3JfZXhwIDwgMCkKQEAgLTQzOSw3ICsyNzksNyBAQAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKIH0KIAotc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoraW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaW50IGRzb3JfZXhwOwogCXUxNiByZWd2YWw7CkBAIC00NTksMTkgKzI5OSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK2xvbmcgb21hcDFfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgPD0gcmF0ZSAqLwogCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKLQlsb25nICBoaWdoZXN0X3JhdGU7CisJbG9uZyBoaWdoZXN0X3JhdGU7CisJdW5zaWduZWQgbG9uZyByZWZfcmF0ZTsKIAotCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZWZfcmF0ZSA9IGNsa19nZXRfcmF0ZShja19yZWZfcCk7CiAKIAloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOwogCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7Ci0JCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCisJZm9yIChwdHIgPSBvbWFwMV9yYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7CisJCWlmIChwdHItPnh0YWwgIT0gcmVmX3JhdGUpCiAJCQljb250aW51ZTsKIAogCQloaWdoZXN0X3JhdGUgPSBwdHItPnJhdGU7CkBAIC01MDYsOCArMzQ2LDggQEAKIAlyZXR1cm4gZHNvcjsKIH0KIAotLyogT25seSBuZWVkZWQgb24gMTUxMCAqLwotc3RhdGljIGludCBvbWFwMV9zZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKKy8qIFhYWCBPbmx5IG5lZWRlZCBvbiAxNTEwICovCitpbnQgb21hcDFfc2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCkBAIC01MjUsNyArMzY1LDcgQEAKIH0KIAogLyogRXh0ZXJuYWwgY2xvY2sgKE1DTEsgJiBCQ0xLKSBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1bnNpZ25lZCBkc29yOwogCV9fdTE2IHJhdGlvX2JpdHM7CkBAIC01NDMsNyArMzgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwMV9zZXRfc29zc2lfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK2ludCBvbWFwMV9zZXRfc29zc2lfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgbDsKIAlpbnQgZGl2OwpAQCAtNTY2LDEyICs0MDYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK2xvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXJldHVybiA5NjAwMDAwMCAvIGNhbGNfZXh0X2Rzb3IocmF0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAxX2luaXRfZXh0X2NsayhzdHJ1Y3QgY2xrICogY2xrKQordm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGRzb3I7CiAJX191MTYgcmF0aW9fYml0czsKQEAgLTU4OSw3ICs0MjksNyBAQAogCWNsay0+IHJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTYxNyw3ICs0NTcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3ZvaWQgb21hcDFfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKIAkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKQEAgLTY3MiwxMiArNTEyLDcwIEBACiAJfQogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZ2VuZXJpYyA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2dlbmVyaWMgPSB7CisJLmVuYWJsZQkJPSBvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCisJLmRpc2FibGUJPSBvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAotc3RhdGljIGxvbmcgb21hcDFfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG9tYXAxX2Nsa19lbmFibGUoYXBpX2NrX3ApOworCWlmICghcmV0dmFsKSB7CisJCXJldHZhbCA9IG9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYyhjbGspOworCQlvbWFwMV9jbGtfZGlzYWJsZShhcGlfY2tfcCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKG9tYXAxX2Nsa19lbmFibGUoYXBpX2NrX3ApID09IDApIHsKKwkJb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYyhjbGspOworCQlvbWFwMV9jbGtfZGlzYWJsZShhcGlfY2tfcCk7CisJfQorfQorCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19kc3BjayA9IHsKKwkuZW5hYmxlCQk9IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKKwkuZGlzYWJsZQk9IG9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4sCit9OworCitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1YXJ0X2NsayAqdWNsazsKKworCXJldCA9IG9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYyhjbGspOworCWlmIChyZXQgPT0gMCkgeworCQkvKiBTZXQgc21hcnQgaWRsZSBhY2tub3dsZWRnZW1lbnQgbW9kZSAqLworCQl1Y2xrID0gKHN0cnVjdCB1YXJ0X2NsayAqKWNsazsKKwkJb21hcF93cml0ZWIoKG9tYXBfcmVhZGIodWNsay0+c3lzY19hZGRyKSAmIH4weDEwKSB8IDgsCisJCQkgICAgdWNsay0+c3lzY19hZGRyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCB1YXJ0X2NsayAqdWNsazsKKworCS8qIFNldCBmb3JjZSBpZGxlIGFja25vd2xlZGdlbWVudCBtb2RlICovCisJdWNsayA9IChzdHJ1Y3QgdWFydF9jbGsgKiljbGs7CisJb21hcF93cml0ZWIoKG9tYXBfcmVhZGIodWNsay0+c3lzY19hZGRyKSAmIH4weDE4KSwgdWNsay0+c3lzY19hZGRyKTsKKworCW9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMoY2xrKTsKK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsLAorCS5kaXNhYmxlCT0gb21hcDFfY2xrX2Rpc2FibGVfdWFydF9mdW5jdGlvbmFsLAorfTsKKworbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpZiAoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpCiAJCXJldHVybiBjbGstPnJhdGU7CkBAIC02ODgsNyArNTg2LDcgQEAKIAlyZXR1cm4gY2xrLT5yYXRlOwogfQogCi1zdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK2ludCBvbWFwMV9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaW50ICByZXQgPSAtRUlOVkFMOwogCkBAIC03MDMsNyArNjAxLDcgQEAKIAogI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDFfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsaykKK3ZvaWQgX19pbml0IG9tYXAxX2Nsa19kaXNhYmxlX3VudXNlZChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJX191MzIgcmVndmFsMzI7CiAKQEAgLTcyNCwxODQgKzYyMiw5IEBACiAJaWYgKChyZWd2YWwzMiAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09IDApCiAJCXJldHVybjsKIAotCS8qIEZJWE1FOiBUaGlzIGNsb2NrIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBidXQgbm8tb25lCi0JICogaGFzIGFza2VkIGZvciBpdHMgYWN0aXZhdGlvbi4gKi8KLQlpZiAoY2xrID09ICZ0YzJfY2sJCS8qIEZJWDogcG0uYyAoU1JBTSksIENDUCwgQ2FtZXJhICovCi0JICAgIHx8IGNsayA9PSAmY2tfZHBsbDFvdXQuY2xrCS8qIEZJWDogU29TU0ksIFNTUiAqLwotCSAgICB8fCBjbGsgPT0gJmFybV9ncGlvX2NrCS8qIEZJWDogR1BJTyBjb2RlIGZvciAxNTEwICovCi0JCSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGSVhNRTogQ2xvY2sgXCIlc1wiIHNlZW1zIHVudXNlZFxuIiwKLQkJICAgICAgIGNsay0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KIAlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIi4uLiAiLCBjbGstPm5hbWUpOwogCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CiAJcHJpbnRrKCIgZG9uZVxuIik7CiB9CiAKLSNlbHNlCi0jZGVmaW5lIG9tYXAxX2Nsa19kaXNhYmxlX3VudXNlZAlOVUxMCiAjZW5kaWYKLQotc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAxX2Nsa19mdW5jdGlvbnMgPSB7Ci0JLmNsa19lbmFibGUJCT0gb21hcDFfY2xrX2VuYWJsZSwKLQkuY2xrX2Rpc2FibGUJCT0gb21hcDFfY2xrX2Rpc2FibGUsCi0JLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlLAotCS5jbGtfc2V0X3JhdGUJCT0gb21hcDFfY2xrX3NldF9yYXRlLAotCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMV9jbGtfZGlzYWJsZV91bnVzZWQsCi19OwotCi1pbnQgX19pbml0IG9tYXAxX2Nsa19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IG9tYXBfY2xrICpjOwotCWNvbnN0IHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyAqaW5mbzsKLQlpbnQgY3J5c3RhbF90eXBlID0gMDsgLyogRGVmYXVsdCAxMiBNSHogKi8KLQl1MzIgcmVnLCBjcHVfbWFzazsKLQotI2lmZGVmIENPTkZJR19ERUJVR19MTAotCS8qIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKLQkgKiBidXQgbGVhdmVzIHNlcmlhbCBjbG9ja3Mgb24uCi0gCSAqLwotCW9tYXBfd3JpdGVsKDB4MyA8PCAyOSwgTU9EX0NPTkZfQ1RSTF8wKTsKLSNlbmRpZgotCi0JLyogVVNCX1JFUV9FTiB3aWxsIGJlIGRpc2FibGVkIGxhdGVyIGlmIG5lY2Vzc2FyeSAodXNiX2RjX2NrKSAqLwotCXJlZyA9IG9tYXBfcmVhZHcoU09GVF9SRVFfUkVHKSAmICgxIDw8IDQpOwotCW9tYXBfd3JpdGV3KHJlZywgU09GVF9SRVFfUkVHKTsKLQlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQotCQlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcyKTsKLQotCWNsa19pbml0KCZvbWFwMV9jbGtfZnVuY3Rpb25zKTsKLQotCS8qIEJ5IGRlZmF1bHQgYWxsIGlkbGVjdDEgY2xvY2tzIGFyZSBhbGxvd2VkIHRvIGlkbGUgKi8KLQlhcm1faWRsZWN0MV9tYXNrID0gfjA7Ci0KLQlmb3IgKGMgPSBvbWFwX2Nsa3M7IGMgPCBvbWFwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXBfY2xrcyk7IGMrKykKLQkJY2xrX3ByZWluaXQoYy0+bGsuY2xrKTsKLQotCWNwdV9tYXNrID0gMDsKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCWNwdV9tYXNrIHw9IENLXzE2WFg7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKQotCQljcHVfbWFzayB8PSBDS18xNTEwOwotCWlmIChjcHVfaXNfb21hcDd4eCgpKQotCQljcHVfbWFzayB8PSBDS183WFg7Ci0JaWYgKGNwdV9pc19vbWFwMzEwKCkpCi0JCWNwdV9tYXNrIHw9IENLXzMxMDsKLQotCWZvciAoYyA9IG9tYXBfY2xrczsgYyA8IG9tYXBfY2xrcyArIEFSUkFZX1NJWkUob21hcF9jbGtzKTsgYysrKQotCQlpZiAoYy0+Y3B1ICYgY3B1X21hc2spIHsKLQkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKLQkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOwotCQl9Ci0KLQlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0NMT0NLLCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcpOwotCWlmIChpbmZvICE9IE5VTEwpIHsKLQkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKLQkJCWNyeXN0YWxfdHlwZSA9IGluZm8tPnN5c3RlbV9jbG9ja190eXBlOwotCX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotCWNrX3JlZi5yYXRlID0gMTMwMDAwMDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotCWlmIChjcnlzdGFsX3R5cGUgPT0gMikKLQkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKLSNlbmRpZgotCi0JcHJpbnRrKCJDbG9ja3M6IEFSTV9TWVNTVDogMHglMDR4IERQTExfQ1RMOiAweCUwNHggQVJNX0NLQ1RMOiAweCUwNHhcbiIsCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX1NZU1NUKSwgb21hcF9yZWFkdyhEUExMX0NUTCksCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSk7Ci0KLQkvKiBXZSB3YW50IHRvIGJlIGluIHN5bmNyb25vdXMgc2NhbGFibGUgbW9kZSAqLwotCW9tYXBfd3JpdGV3KDB4MTAwMCwgQVJNX1NZU1NUKTsKLQotI2lmZGVmIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUgotCS8qIFVzZSB2YWx1ZXMgc2V0IGJ5IGJvb3Rsb2FkZXIuIERldGVybWluZSBQTEwgcmF0ZSBhbmQgcmVjYWxjdWxhdGUKLQkgKiBkZXBlbmRlbnQgY2xvY2tzIGFzIGlmIGtlcm5lbCBoYWQgY2hhbmdlZCBQTEwgb3IgZGl2aXNvcnMuCi0JICovCi0JewotCQl1bnNpZ25lZCBwbGxfY3RsX3ZhbCA9IG9tYXBfcmVhZHcoRFBMTF9DVEwpOwotCi0JCWNrX2RwbGwxLnJhdGUgPSBja19yZWYucmF0ZTsgLyogQmFzZSB4dGFsIHJhdGUgKi8KLQkJaWYgKHBsbF9jdGxfdmFsICYgMHgxMCkgewotCQkJLyogUExMIGVuYWJsZWQsIGFwcGx5IG11bHRpcGxpZXIgYW5kIGRpdmlzb3IgKi8KLQkJCWlmIChwbGxfY3RsX3ZhbCAmIDB4ZjgwKQotCQkJCWNrX2RwbGwxLnJhdGUgKj0gKHBsbF9jdGxfdmFsICYgMHhmODApID4+IDc7Ci0JCQlja19kcGxsMS5yYXRlIC89ICgocGxsX2N0bF92YWwgJiAweDYwKSA+PiA1KSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBQTEwgZGlzYWJsZWQsIGFwcGx5IGJ5cGFzcyBkaXZpc29yICovCi0JCQlzd2l0Y2ggKHBsbF9jdGxfdmFsICYgMHhjKSB7Ci0JCQljYXNlIDA6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDoKLQkJCQlja19kcGxsMS5yYXRlIC89IDI7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWNrX2RwbGwxLnJhdGUgLz0gNDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLSNlbHNlCi0JLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IGFuZCBlbmFibGUgaXQgKi8KLQlpZiAob21hcDFfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnR1YWxfY2tfbXB1LCB+MCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTeXN0ZW0gZnJlcXVlbmNpZXMgbm90IHNldC4gQ2hlY2sgeW91ciBjb25maWcuXG4iKTsKLQkJLyogR3Vlc3Mgc2FuZSB2YWx1ZXMgKDYwTUh6KSAqLwotCQlvbWFwX3dyaXRldygweDIyOTAsIERQTExfQ1RMKTsKLQkJb21hcF93cml0ZXcoY3B1X2lzX29tYXA3eHgoKSA/IDB4MzAwNSA6IDB4MTAwNSwgQVJNX0NLQ1RMKTsKLQkJY2tfZHBsbDEucmF0ZSA9IDYwMDAwMDAwOwotCX0KLSNlbmRpZgotCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7Ci0JLyogQ2FjaGUgcmF0ZXMgZm9yIGNsb2NrcyBjb25uZWN0ZWQgdG8gY2tfcmVmIChub3QgZHBsbDEpICovCi0JcHJvcGFnYXRlX3JhdGUoJmNrX3JlZik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoeHRhbC9EUExMMS9NUFUpOiAiCi0JCSIlbGQuJTAxbGQvJWxkLiUwMWxkLyVsZC4lMDFsZCBNSHpcbiIsCi0JICAgICAgIGNrX3JlZi5yYXRlIC8gMTAwMDAwMCwgKGNrX3JlZi5yYXRlIC8gMTAwMDAwKSAlIDEwLAotCSAgICAgICBja19kcGxsMS5yYXRlIC8gMTAwMDAwMCwgKGNrX2RwbGwxLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIGFybV9jay5yYXRlIC8gMTAwMDAwMCwgKGFybV9jay5yYXRlIC8gMTAwMDAwKSAlIDEwKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMikgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX0ZTQU1QTEUpCi0JLyogU2VsZWN0IHNsaWNlciBvdXRwdXQgYXMgT01BUCBpbnB1dCBjbG9jayAqLwotCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDdYWF9QQ0NfVVBMRF9DVFJMKSAmIH4weDEsIE9NQVA3WFhfUENDX1VQTERfQ1RSTCk7Ci0jZW5kaWYKLQotCS8qIEFtc3RyYWQgRGVsdGEgd2FudHMgQkNMSyBoaWdoIHdoZW4gaW5hY3RpdmUgKi8KLQlpZiAobWFjaGluZV9pc19hbXNfZGVsdGEoKSkKLQkJb21hcF93cml0ZWwob21hcF9yZWFkbChVTFBEX0NMT0NLX0NUUkwpIHwKLQkJCQkoMSA8PCBTRFdfTUNMS19JTlZfQklUKSwKLQkJCQlVTFBEX0NMT0NLX0NUUkwpOwotCi0JLyogVHVybiBvZmYgRFNQIGFuZCBBUk1fVElNWE8uIE1ha2Ugc3VyZSBBUk1fSU5USENLIGlzIG5vdCBkaXZpZGVkICovCi0JLyogKG9uIDczMCwgYml0IDEzIG11c3Qgbm90IGJlIGNsZWFyZWQpICovCi0JaWYgKGNwdV9pc19vbWFwN3h4KCkpCi0JCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIDB4MmZmZiwgQVJNX0NLQ1RMKTsKLQllbHNlCi0JCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIDB4MGZmZiwgQVJNX0NLQ1RMKTsKLQotCS8qIFB1dCBEU1AvTVBVSSBpbnRvIHJlc2V0IHVudGlsIG5lZWRlZCAqLwotCW9tYXBfd3JpdGV3KDAsIEFSTV9SU1RDVDEpOwotCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDIpOwotCW9tYXBfd3JpdGV3KDB4NDAwLCBBUk1fSURMRUNUMSk7Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byBPTUFQNTkxMCBFcnJhdHVtIFNZU19ETUFfMSwgYml0IERNQUNLX1JFUSAoYml0IDgpCi0JICogb2YgdGhlIEFSTV9JRExFQ1QyIHJlZ2lzdGVyIG11c3QgYmUgc2V0IHRvIHplcm8uIFRoZSBwb3dlci1vbgotCSAqIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBiaXQgaXMgb25lLgotCSAqLwotCW9tYXBfd3JpdGV3KDB4MDAwMCwgQVJNX0lETEVDVDIpOwkvKiBUdXJuIExDRCBjbG9jayBvZmYgYWxzbyAqLwotCi0JLyoKLQkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKLQkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQotCSAqLwotCWNsa19lbmFibGUoJmFybXBlcl9jay5jbGspOwotCWNsa19lbmFibGUoJmFybXhvcl9jay5jbGspOwotCWNsa19lbmFibGUoJmFybXRpbV9jay5jbGspOyAvKiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IHRpbWVyIGNvZGUgKi8KLQotCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKLQkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKaW5kZXggMjlmZmE5Ny4uYTQxOTBhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1LCAyMDA5IE5va2lhIGNvcnBvcmF0aW9uCiAgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KICAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCiAgKgpAQCAtMTMsMzAgKzEzLDM2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgaW50IG9tYXAxX3NldF9zb3NzaV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3Nvc3NpX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyBpbnQgb21hcDFfc2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfdWFydF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgaW50IG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKLXN0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KIAotc3RydWN0IG1wdV9yYXRlIHsKLQl1bnNpZ25lZCBsb25nCQlyYXRlOwotCXVuc2lnbmVkIGxvbmcJCXh0YWw7Ci0JdW5zaWduZWQgbG9uZwkJcGxsX3JhdGU7Ci0JX191MTYJCQlja2N0bF92YWw7Ci0JX191MTYJCQlkcGxsY3RsX3ZhbDsKLX07CitleHRlcm4gaW50IF9faW5pdCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgb21hcDFfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2V4dGVybiBpbnQgb21hcDFfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIGludCBvbWFwMV9zZXRfc29zc2lfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwMV9zb3NzaV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gaW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2V4dGVybiBpbnQgb21hcDFfc2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIGludCBvbWFwMV9zZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2V4dGVybiBsb25nIG9tYXAxX3JvdW5kX2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitleHRlcm4gdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiBpbnQgb21hcDFfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworZXh0ZXJuIGxvbmcgb21hcDFfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitleHRlcm4gaW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworZXh0ZXJuIGxvbmcgb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCitleHRlcm4gdm9pZCBfX2luaXQgb21hcDFfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsayk7CisjZWxzZQorI2RlZmluZSBvbWFwMV9jbGtfZGlzYWJsZV91bnVzZWQJTlVMTAorI2VuZGlmCiAKIHN0cnVjdCB1YXJ0X2NsayB7CiAJc3RydWN0IGNsawljbGs7CkBAIC05Niw1OTYgKzEwMiwxMiBAQAogI2RlZmluZSBTT0ZUX1JFUV9SRUcJCTB4ZmZmZTA4MzQKICNkZWZpbmUgU09GVF9SRVFfUkVHMgkJMHhmZmZlMDg4MAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE9tYXAxIE1QVSByYXRlIHRhYmxlCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHN0cnVjdCBtcHVfcmF0ZSByYXRlX3RhYmxlW10gPSB7Ci0JLyogTVBVIE1IeiwgeHRhbCBNSHosIGRwbGwxIE1IeiwgQ0tDVEwsIERQTExfQ1RMCi0JICogTk9URTogQ29tbWVudCBvcmRlciBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIGJpdHMgaW4gQ0tDVEwgdmFsdWU6Ci0JICogYXJtZGl2LCBkc3BkaXYsIGRzcG1tdSwgdGNkaXYsIHBlcmRpdiwgbGNkZGl2Ci0JICovCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMjE2TUhaKQotCXsgMjE2MDAwMDAwLCAxMjAwMDAwMCwgMjE2MDAwMDAwLCAweDA1MGQsIDB4MjkxMCB9LCAvKiAxLzEvMi8yLzIvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTk1TUhaKQotCXsgMTk1MDAwMDAwLCAxMzAwMDAwMCwgMTk1MDAwMDAwLCAweDA1MGUsIDB4Mjc5MCB9LCAvKiAxLzEvMi8yLzQvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTkyTUhaKQotCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLwotCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLwotCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLwotCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzQvNC84LzgvOCAqLwotCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQotCXsgMTgyMDAwMDAwLCAxMzAwMDAwMCwgMTgyMDAwMDAwLCAweDA1MGUsIDB4MjcxMCB9LCAvKiAxLzEvMi8yLzQvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTY4TUhaKQotCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQotCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQotCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fOTZNSFopCi0JeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAgOTYwMDAwMDAsIDB4MDAwNSwgMHgyNDEwIH0sIC8qIDEvMS8xLzEvMi8yICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV82ME1IWikKLQl7ICA2MDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwMDA1LCAweDIyOTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzMwTUhaKQotCXsgIDMwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDA1NTUsIDB4MjI5MCB9LCAvKiAyLzIvMi8yLzIvMiAqLwotI2VuZGlmCi0JeyAwLCAwLCAwLCAwLCAwIH0sCi19OworZXh0ZXJuIF9fdTMyIGFybV9pZGxlY3QxX21hc2s7CitleHRlcm4gc3RydWN0IGNsayAqYXBpX2NrX3AsICpja19kcGxsMV9wLCAqY2tfcmVmX3A7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT21hcDEgY2xvY2tzCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgc3RydWN0IGNsayBja19yZWYgPSB7Ci0JLm5hbWUJCT0gImNrX3JlZiIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKLQkubmFtZQkJPSAiY2tfZHBsbDEiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGNrX2RwbGwxb3V0ID0gewotCS5jbGsgPSB7Ci0JCS5uYW1lCQk9ICJja19kcGxsMW91dCIsCi0JCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAotCQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCi0JCS5lbmFibGVfYml0CT0gRU5fQ0tPVVRfQVJNLAotCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCX0sCi0JLmlkbGVjdF9zaGlmdAk9IDEyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc29zc2lfY2sgPSB7Ci0JLm5hbWUJCT0gImNrX3Nvc3NpIiwKLQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkucGFyZW50CQk9ICZja19kcGxsMW91dC5jbGssCi0JLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5UIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8xKSwKLQkuZW5hYmxlX2JpdAk9IDE2LAotCS5yZWNhbGMJCT0gJm9tYXAxX3Nvc3NpX3JlY2FsYywKLQkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3Nvc3NpX3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1fY2sgPSB7Ci0JLm5hbWUJCT0gImFybV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfQVJNRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCi0JLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXBlcl9jayA9IHsKLQkuY2xrID0gewotCQkubmFtZQkJPSAiYXJtcGVyX2NrIiwKLQkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAotCQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAotCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULAotCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAotCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAotCX0sCi0JLmlkbGVjdF9zaGlmdAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKLQkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAotCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCi0JLmVuYWJsZV9iaXQJPSBFTl9HUElPQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXhvcl9jayA9IHsKLQkuY2xrID0gewotCQkubmFtZQkJPSAiYXJteG9yX2NrIiwKLQkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKLQkJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCi0JCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JfSwKLQkuaWRsZWN0X3NoaWZ0CT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXRpbV9jayA9IHsKLQkuY2xrID0gewotCQkubmFtZQkJPSAiYXJtdGltX2NrIiwKLQkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKLQkJLmVuYWJsZV9iaXQJPSBFTl9USU1DSywKLQkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQl9LAotCS5pZGxlY3Rfc2hpZnQJPSA5LAotfTsKLQotc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtd2R0X2NrID0gewotCS5jbGsgPSB7Ci0JCS5uYW1lCQk9ICJhcm13ZHRfY2siLAotCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkJLnBhcmVudAkJPSAmY2tfcmVmLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAotCQkuZW5hYmxlX2JpdAk9IEVOX1dEVENLLAotCQkucmVjYWxjCQk9ICZvbWFwMV93YXRjaGRvZ19yZWNhbGMsCi0JfSwKLQkuaWRsZWN0X3NoaWZ0CT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNnh4ID0gewotCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZhcm1fY2ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkvKiBOb3RlOiBPbiAxNnh4IHRoZSBmcmVxdWVuY3kgY2FuIGJlIGRpdmlkZWQgYnkgMiBieSBwcm9ncmFtbWluZwotCSAqIEFSTV9DS0NUTDpBUk1fSU5USENLX1NFTCgxNCkgdG8gMQotCSAqCi0JICogMTUxMCB2ZXJzaW9uIGlzIGluIFRDIGNsb2Nrcy4KLQkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9jayA9IHsKLQkubmFtZQkJPSAiZHNwX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0NLQ1RMKSwKLQkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAotCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcG1tdV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCi0JLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcHBlcl9jayA9IHsKLQkubmFtZQkJPSAiZHNwcGVyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfZHNwY2ssCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4sCi0JLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCi0JLnNldF9yYXRlCT0gJm9tYXAxX2Nsa19zZXRfcmF0ZV9kc3BfZG9tYWluLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNweG9yX2NrID0gewotCS5uYW1lCQk9ICJkc3B4b3JfY2siLAotCS5vcHMJCT0gJmNsa29wc19kc3BjaywKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwdGltX2NrID0gewotCS5uYW1lCQk9ICJkc3B0aW1fY2siLAotCS5vcHMJCT0gJmNsa29wc19kc3BjaywKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBUaWUgQVJNX0lETEVDVDE6SURMSUZfQVJNIHRvIHRoaXMgbG9naWNhbCBjbG9jayBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIHRjX2NrID0gewotCS5jbGsgPSB7Ci0JCS5uYW1lCQk9ICJ0Y19jayIsCi0JCS5vcHMJCT0gJmNsa29wc19udWxsLAotCQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfVENESVZfT0ZGU0VULAotCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAotCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAotCX0sCi0JLmlkbGVjdF9zaGlmdAk9IDYsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTUxMCA9IHsKLQkubmFtZQkJPSAiYXJtaW50aF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKLQkgKgotCSAqIDE2eHggdmVyc2lvbiBpcyBpbiBNUFUgY2xvY2tzLgotCSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGlwYl9jayA9IHsKLQkvKiBOby1pZGxlIGNvbnRyb2xsZWQgYnkgInRjX2NrIiAqLwotCS5uYW1lCQk9ICJ0aXBiX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7Ci0JLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KLQkubmFtZQkJPSAibDNfb2NwaV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMyksCi0JLmVuYWJsZV9iaXQJPSBFTl9PQ1BJX0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0YzFfY2sgPSB7Ci0JLm5hbWUJCT0gInRjMV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMyksCi0JLmVuYWJsZV9iaXQJPSBFTl9UQzFfQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMl9jayA9IHsKLQkubmFtZQkJPSAidGMyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QzKSwKLQkuZW5hYmxlX2JpdAk9IEVOX1RDMl9DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NrID0gewotCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCi0JLm5hbWUJCT0gImRtYV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfbGNkZnJlZV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2xjZGZyZWVfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXBpX2NrID0gewotCS5jbGsgPSB7Ci0JCS5uYW1lCQk9ICJhcGlfY2siLAotCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAotCQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAotCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCX0sCi0JLmlkbGVjdF9zaGlmdAk9IDgsCi19OwotCi1zdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsYl9jayA9IHsKLQkuY2xrID0gewotCQkubmFtZQkJPSAibGJfY2siLAotCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAotCQkuZW5hYmxlX2JpdAk9IEVOX0xCQ0ssCi0JCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JfSwKLQkuaWRsZWN0X3NoaWZ0CT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJoZWExX2NrID0gewotCS5uYW1lCQk9ICJyaGVhMV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayByaGVhMl9jayA9IHsKLQkubmFtZQkJPSAicmhlYTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbGNkX2NrXzE2eHggPSB7Ci0JLm5hbWUJCT0gImxjZF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKLQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAotCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCi19OwotCi1zdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsY2RfY2tfMTUxMCA9IHsKLQkuY2xrID0gewotCQkubmFtZQkJPSAibGNkX2NrIiwKLQkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAotCQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAotCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAotCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAotCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAotCX0sCi0JLmlkbGVjdF9zaGlmdAk9IDMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KLQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCi0JLmVuYWJsZV9iaXQJPSAyOSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCB1YXJ0X2NsayB1YXJ0MV8xNnh4ID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCi0JCS5vcHMJCT0gJmNsa29wc191YXJ0LAotCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwotCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAotCQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKLQkJLmVuYWJsZV9iaXQJPSAyOSwKLQl9LAotCS5zeXNjX2FkZHIJPSAweGZmZmIwMDU0LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwotCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKLQkuZW5hYmxlX2JpdAk9IDMwLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNTEwID0gewotCS5uYW1lCQk9ICJ1YXJ0M19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KLQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCi0JLmVuYWJsZV9iaXQJPSAzMSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCB1YXJ0X2NsayB1YXJ0M18xNnh4ID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJ1YXJ0M19jayIsCi0JCS5vcHMJCT0gJmNsa29wc191YXJ0LAotCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwotCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAotCQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAotCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKLQkJLmVuYWJsZV9iaXQJPSAzMSwKLQl9LAotCS5zeXNjX2FkZHIJPSAweGZmZmI5ODU0LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa28gPSB7CS8qIDYgTUh6IG91dHB1dCBvbiBXNF9VU0JfQ0xLTyAqLwotCS5uYW1lCQk9ICJ1c2JfY2xrbyIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNjAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFVMUERfQ0xPQ0tfQ1RSTCksCi0JLmVuYWJsZV9iaXQJPSBVU0JfTUNMS19FTl9CSVQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTUxMCA9IHsKLQkubmFtZQkJPSAidXNiX2hoY19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsIC8qIEFjdHVhbGx5IDIgY2xvY2tzLCAxMk1IeiBhbmQgNDhNSHogKi8KLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCi0JLmVuYWJsZV9iaXQJPSBVU0JfSE9TVF9ISENfVUhPU1RfRU4sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTZ4eCA9IHsKLQkubmFtZQkJPSAidXNiX2hoY19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLyogT1RHX1NZU0NPTl8yLk9UR19QQURFTiA9PSAwIChub3QgMTUxMC1jb21wYXRpYmxlKSAqLwotCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoT1RHX0JBU0UgKyAweDA4KSwgLyogT1RHX1NZU0NPTl8yICovCi0JLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrID0gewotCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAotCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAotCS5lbmFibGVfYml0CT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9kY19jazd4eCA9IHsKLQkubmFtZQkJPSAidXNiX2RjX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKLQkuZW5hYmxlX2JpdAk9IDgsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2xrXzE1MTAgPSB7Ci0JLm5hbWUJCT0gIm1jbGsiLAotCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAotCS5lbmFibGVfYml0CT0gNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKLQkubmFtZQkJPSAibWNsayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKENPTV9DTEtfRElWX0NUUkxfU0VMKSwKLQkuZW5hYmxlX2JpdAk9IENPTV9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmb21hcDFfaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNTEwID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTZ4eCA9IHsKLQkubmFtZQkJPSAiYmNsayIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNXRF9DTEtfRElWX0NUUkxfU0VMKSwKLQkuZW5hYmxlX2JpdAk9IFNXRF9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmb21hcDFfaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKLQkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KLQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAotCS5lbmFibGVfYml0CT0gMjMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewotCS5uYW1lCQk9ICJtbWNfY2siLAotCS5pZAkJPSAxLAotCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAotCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwotCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCi0JLmVuYWJsZV9iaXQJPSAyMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzNfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19jayIsCi0JLmlkCQk9IDIsCi0JLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCi0JLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCi0JLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKLQkuZW5hYmxlX2JpdAk9IDEyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7Ci0JLm5hbWUJCT0gIm1wdSIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0vKiB2aXJ0dWFsIGZ1bmN0aW9uYWwgY2xvY2sgZG9tYWluIGZvciBJMkMuIEp1c3QgZm9yIG1ha2luZyBzdXJlIHRoYXQgQVJNWE9SX0NLCi1yZW1haW5zIGFjdGl2ZSBkdXJpbmcgTVBVIGlkbGUgd2hlbmV2ZXIgdGhpcyBpcyBlbmFibGVkICovCi1zdGF0aWMgc3RydWN0IGNsayBpMmNfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkuaWQJCT0gMSwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLnBhcmVudAkJPSAmYXJteG9yX2NrLmNsaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjX2ljayA9IHsKLQkubmFtZQkJPSAiaTJjX2ljayIsCi0JLmlkCQk9IDEsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHNwY2s7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHVtbXk7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19nZW5lcmljOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5OTVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jCkBAIC0wLDAgKzEsODQzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUsIDIwMDkgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4gIC8qIGZvciBtYWNoaW5lX2lzXyogKi8KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xrZGV2X29tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi5oPiAgIC8qIGZvciBPVEdfQkFTRSAqLworCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIGNsb2NrcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogWFhYIGlzIHRoaXMgbmVjZXNzYXJ5PyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfY2sgPSB7CisJLm5hbWUJPSAiZHVtbXkiLAorCS5vcHMJPSAmY2xrb3BzX2R1bW15LAorCS5mbGFncwk9IFJBVEVfRklYRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBja19yZWYgPSB7CisJLm5hbWUJCT0gImNrX3JlZiIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMTIwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKKwkubmFtZQkJPSAiY2tfZHBsbDEiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNrX3JlZiwKK307CisKKy8qCisgKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZSBoYXMgYXNrZWQgZm9yIGl0cworICogYWN0aXZhdGlvbi4gIFsgRklYOiBTb1NTSSwgU1NSIF0KKyAqLworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgY2tfZHBsbDFvdXQgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImNrX2RwbGwxb3V0IiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MIHwgRU5BQkxFX1JFR18zMkJJVCB8CisJCQkJICBFTkFCTEVfT05fSU5JVCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKKwkJLmVuYWJsZV9iaXQJPSBFTl9DS09VVF9BUk0sCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gMTIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzb3NzaV9jayA9IHsKKwkubmFtZQkJPSAiY2tfc29zc2kiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxb3V0LmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzEpLAorCS5lbmFibGVfYml0CT0gMTYsCisJLnJlY2FsYwkJPSAmb21hcDFfc29zc2lfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfc29zc2lfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybV9jayA9IHsKKwkubmFtZQkJPSAiYXJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkucmF0ZV9vZmZzZXQJPSBDS0NUTF9BUk1ESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtcGVyX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm1wZXJfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCisJCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCisJCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCisJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gMiwKK307CisKKy8qCisgKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZSBoYXMgYXNrZWQgZm9yIGl0cworICogYWN0aXZhdGlvbi4gIFsgR1BJTyBjb2RlIGZvciAxNTEwIF0KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2dwaW9fY2sgPSB7CisJLm5hbWUJCT0gImFybV9ncGlvX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKKwkuZW5hYmxlX2JpdAk9IEVOX0dQSU9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJteG9yX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm14b3JfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkJLnBhcmVudAkJPSAmY2tfcmVmLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAorCQkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKKwkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtdGltX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm10aW1fY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkJLnBhcmVudAkJPSAmY2tfcmVmLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAorCQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAorCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDksCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm13ZHRfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXdkdF9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCisJCS5lbmFibGVfYml0CT0gRU5fV0RUQ0ssCisJCS5yZWNhbGMJCT0gJm9tYXAxX3dhdGNoZG9nX3JlY2FsYywKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7CisJLm5hbWUJCT0gImFybWludGhfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFybV9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCisJICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCisJICoKKwkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgorCSAqLworfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2NrID0geworCS5uYW1lCQk9ICJkc3BfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fQ0tDVEwpLAorCS5lbmFibGVfYml0CT0gRU5fRFNQQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcG1tdV9jayA9IHsKKwkubmFtZQkJPSAiZHNwbW11X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkucmF0ZV9vZmZzZXQJPSBDS0NUTF9EU1BNTVVESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwcGVyX2NrID0geworCS5uYW1lCQk9ICJkc3BwZXJfY2siLAorCS5vcHMJCT0gJmNsa29wc19kc3BjaywKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbiwKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSAmb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3B4b3JfY2sgPSB7CisJLm5hbWUJCT0gImRzcHhvcl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2RzcGNrLAorCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3B0aW1fY2sgPSB7CisJLm5hbWUJCT0gImRzcHRpbV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2RzcGNrLAorCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fRFNQVElNQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFRpZSBBUk1fSURMRUNUMTpJRExJRl9BUk0gdG8gdGhpcyBsb2dpY2FsIGNsb2NrIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgdGNfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gInRjX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCisJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0geworCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkvKiBOb3RlOiBPbiAxNTEwIHRoZSBmcmVxdWVuY3kgZm9sbG93cyBUQ19DSworCSAqCisJICogMTZ4eCB2ZXJzaW9uIGlzIGluIE1QVSBjbG9ja3MuCisJICovCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0aXBiX2NrID0geworCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCisJLm5hbWUJCT0gInRpcGJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDNfb2NwaV9jayA9IHsKKwkvKiBOby1pZGxlIGNvbnRyb2xsZWQgYnkgInRjX2NrIiAqLworCS5uYW1lCQk9ICJsM19vY3BpX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QzKSwKKwkuZW5hYmxlX2JpdAk9IEVOX09DUElfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jayA9IHsKKwkubmFtZQkJPSAidGMxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QzKSwKKwkuZW5hYmxlX2JpdAk9IEVOX1RDMV9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIEZJWE1FOiBUaGlzIGNsb2NrIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBidXQgbm8tb25lIGhhcyBhc2tlZCBmb3IgaXRzCisgKiBhY3RpdmF0aW9uLiAgWyBwbS5jIChTUkFNKSwgQ0NQLCBDYW1lcmEgXQorICovCitzdGF0aWMgc3RydWN0IGNsayB0YzJfY2sgPSB7CisJLm5hbWUJCT0gInRjMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDMpLAorCS5lbmFibGVfYml0CT0gRU5fVEMyX0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkbWFfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAiZG1hX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9sY2RmcmVlX2NrID0geworCS5uYW1lCQk9ICJkbWFfbGNkZnJlZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcGlfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFwaV9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCisJCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxiX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJsYl9jayIsCisJCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCisJCS5lbmFibGVfYml0CT0gRU5fTEJDSywKKwkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcmhlYTFfY2sgPSB7CisJLm5hbWUJCT0gInJoZWExX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWEyX2NrID0geworCS5uYW1lCQk9ICJyaGVhMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsY2RfY2tfMTZ4eCA9IHsKKwkubmFtZQkJPSAibGNkX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAorCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxjZF9ja18xNTEwID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJsY2RfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCisJCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCisJCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCisJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxXzE1MTAgPSB7CisJLm5hbWUJCT0gInVhcnQxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKKwkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IHVhcnRfY2xrIHVhcnQxXzE2eHggPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gInVhcnQxX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX3VhcnQsCisJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCisJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJCS5yYXRlCQk9IDQ4MDAwMDAwLAorCQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAorCQkuZW5hYmxlX2JpdAk9IDI5LAorCX0sCisJLnN5c2NfYWRkcgk9IDB4ZmZmYjAwNTQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jayA9IHsKKwkubmFtZQkJPSAidWFydDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCisJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKKwkucmF0ZQkJPSAxMjAwMDAwMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAorCS5lbmFibGVfYml0CT0gMzAsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KKwkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKKwkucmVjYWxjCQk9ICZvbWFwMV91YXJ0X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzXzE1MTAgPSB7CisJLm5hbWUJCT0gInVhcnQzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKKwkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IHVhcnRfY2xrIHVhcnQzXzE2eHggPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gInVhcnQzX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX3VhcnQsCisJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCisJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJCS5yYXRlCQk9IDQ4MDAwMDAwLAorCQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAorCQkuZW5hYmxlX2JpdAk9IDMxLAorCX0sCisJLnN5c2NfYWRkcgk9IDB4ZmZmYjk4NTQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrbyA9IHsJLyogNiBNSHogb3V0cHV0IG9uIFc0X1VTQl9DTEtPICovCisJLm5hbWUJCT0gInVzYl9jbGtvIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA2MDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoVUxQRF9DTE9DS19DVFJMKSwKKwkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNTEwID0geworCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwgLyogQWN0dWFsbHkgMiBjbG9ja3MsIDEyTUh6IGFuZCA0OE1IeiAqLworCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKKwkuZW5hYmxlX2JpdAk9IFVTQl9IT1NUX0hIQ19VSE9TVF9FTiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNnh4ID0geworCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkvKiBPVEdfU1lTQ09OXzIuT1RHX1BBREVOID09IDAgKG5vdCAxNTEwLWNvbXBhdGlibGUpICovCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhPVEdfQkFTRSArIDB4MDgpLCAvKiBPVEdfU1lTQ09OXzIgKi8KKwkuZW5hYmxlX2JpdAk9IDggLyogVUhPU1RfRU4gKi8sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZGNfY2sgPSB7CisJLm5hbWUJCT0gInVzYl9kY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCisJLmVuYWJsZV9iaXQJPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrN3h4ID0geworCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLworCS5yYXRlCQk9IDQ4MDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAorCS5lbmFibGVfYml0CT0gOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTUxMCA9IHsKKwkubmFtZQkJPSAibWNsayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCisJLmVuYWJsZV9iaXQJPSA2LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNnh4ID0geworCS5uYW1lCQk9ICJtY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQ09NX0NMS19ESVZfQ1RSTF9TRUwpLAorCS5lbmFibGVfYml0CT0gQ09NX1VMUERfUExMX0NMS19SRVEsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAorCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBiY2xrXzE1MTAgPSB7CisJLm5hbWUJCT0gImJjbGsiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLworCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0geworCS5uYW1lCQk9ICJiY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU1dEX0NMS19ESVZfQ1RSTF9TRUwpLAorCS5lbmFibGVfYml0CT0gU1dEX1VMUERfUExMX0NMS19SRVEsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAorCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWMxX2NrID0geworCS5uYW1lCQk9ICJtbWNfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAorCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCisJLmVuYWJsZV9iaXQJPSAyMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7CisJLm5hbWUJCT0gIm1tY19jayIsCisJLmlkCQk9IDEsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCisJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKKwkuZW5hYmxlX2JpdAk9IDIwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jM19jayA9IHsKKwkubmFtZQkJPSAibW1jX2NrIiwKKwkuaWQJCT0gMiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKKwkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDQ4MDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAorCS5lbmFibGVfYml0CT0gMTIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0dWFsX2NrX21wdSA9IHsKKwkubmFtZQkJPSAibXB1IiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZhcm1fY2ssIC8qIElzIHNtYXJ0ZXIgYWxpYXMgZm9yICovCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDFfc2VsZWN0X3RhYmxlX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfdG9fdGFibGVfcmF0ZSwKK307CisKKy8qIHZpcnR1YWwgZnVuY3Rpb25hbCBjbG9jayBkb21haW4gZm9yIEkyQy4gSnVzdCBmb3IgbWFraW5nIHN1cmUgdGhhdCBBUk1YT1JfQ0sKK3JlbWFpbnMgYWN0aXZlIGR1cmluZyBNUFUgaWRsZSB3aGVuZXZlciB0aGlzIGlzIGVuYWJsZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY19mY2sgPSB7CisJLm5hbWUJCT0gImkyY19mY2siLAorCS5pZAkJPSAxLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkucGFyZW50CQk9ICZhcm14b3JfY2suY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmNfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkuaWQJCT0gMSwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIGNsa2RldiBpbnRlZ3JhdGlvbgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcF9jbGtzW10gPSB7CisJLyogbm9uLVVMUEQgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJja19yZWYiLAkmY2tfcmVmLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCisJQ0xLKE5VTEwsCSJja19kcGxsMSIsCSZja19kcGxsMSwJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCS8qIENLX0dFTjEgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJja19kcGxsMW91dCIsCSZja19kcGxsMW91dC5jbGssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkiY2tfc29zc2kiLAkmc29zc2lfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkiYXJtX2NrIiwJJmFybV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJtcGVyX2NrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybV9ncGlvX2NrIiwJJmFybV9ncGlvX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybXhvcl9jayIsCSZhcm14b3JfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCisJQ0xLKE5VTEwsCSJhcm10aW1fY2siLAkmYXJtdGltX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZhcm13ZHRfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJmFybXBlcl9jay5jbGssCUNLXzE2WFgpLAorCUNMSygib21hcF93ZHQiLCAiaWNrIiwJCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm1pbnRoX2NrIiwJJmFybWludGhfY2sxNTEwLCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybWludGhfY2siLAkmYXJtaW50aF9jazE2eHgsIENLXzE2WFgpLAorCS8qIENLX0dFTjIgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJkc3BfY2siLAkmZHNwX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3BtbXVfY2siLAkmZHNwbW11X2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3BwZXJfY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3B4b3JfY2siLAkmZHNweG9yX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJkc3B0aW1fY2siLAkmZHNwdGltX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJLyogQ0tfR0VOMyBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJInRjX2NrIiwJJnRjX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAorCUNMSyhOVUxMLAkidGlwYl9jayIsCSZ0aXBiX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImwzX29jcGlfY2siLAkmbDNfb2NwaV9jaywJQ0tfMTZYWCB8IENLXzdYWCksCisJQ0xLKE5VTEwsCSJ0YzFfY2siLAkmdGMxX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJInRjMl9jayIsCSZ0YzJfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkiZG1hX2NrIiwJJmRtYV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiZG1hX2xjZGZyZWVfY2siLCAmZG1hX2xjZGZyZWVfY2ssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkiYXBpX2NrIiwJJmFwaV9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImxiX2NrIiwJJmxiX2NrLmNsaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJyaGVhMV9jayIsCSZyaGVhMV9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJyaGVhMl9jayIsCSZyaGVhMl9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJsY2RfY2siLAkmbGNkX2NrXzE2eHgsCUNLXzE2WFggfCBDS183WFgpLAorCUNMSyhOVUxMLAkibGNkX2NrIiwJJmxjZF9ja18xNTEwLmNsaywgQ0tfMTUxMCB8IENLXzMxMCksCisJLyogVUxQRCBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJInVhcnQxX2NrIiwJJnVhcnQxXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidWFydDFfY2siLAkmdWFydDFfMTZ4eC5jbGssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkidWFydDJfY2siLAkmdWFydDJfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVhcnQzX2NrIiwJJnVhcnQzXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidWFydDNfY2siLAkmdWFydDNfMTZ4eC5jbGssIENLXzE2WFgpLAorCUNMSyhOVUxMLAkidXNiX2Nsa28iLAkmdXNiX2Nsa28sCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVzYl9oaGNfY2siLAkmdXNiX2hoY19jazE1MTAsIENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidXNiX2hoY19jayIsCSZ1c2JfaGhjX2NrMTZ4eCwgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ1c2JfZGNfY2siLAkmdXNiX2RjX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJInVzYl9kY19jayIsCSZ1c2JfZGNfY2s3eHgsCUNLXzdYWCksCisJQ0xLKE5VTEwsCSJtY2xrIiwJCSZtY2xrXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkibWNsayIsCQkmbWNsa18xNnh4LAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJImJjbGsiLAkJJmJjbGtfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJiY2xrIiwJCSZiY2xrXzE2eHgsCUNLXzE2WFgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tYzFfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm1tY2ktb21hcC4wIiwgImZjayIsCSZtbWMzX2NrLAlDS183WFgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwIHwgQ0tfN1hYKSwKKwlDTEsoIm1tY2ktb21hcC4xIiwgImZjayIsCSZtbWMyX2NrLAlDS18xNlhYKSwKKwlDTEsoIm1tY2ktb21hcC4xIiwgImljayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYKSwKKwkvKiBWaXJ0dWFsIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibXB1IiwJCSZ2aXJ0dWFsX2NrX21wdSwgQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjX2ZjaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjX2ljaywJQ0tfMTZYWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCisJQ0xLKCJvbWFwX3V3aXJlIiwgImZjayIsCSZhcm14b3JfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJmRzcHBlcl9jaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmZHNwcGVyX2NrLAlDS18xNlhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZkc3B4b3JfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKK307CisKKy8qCisgKiBpbml0CisgKi8KKworc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAxX2Nsa19mdW5jdGlvbnMgX19pbml0ZGF0YSA9IHsKKwkuY2xrX2VuYWJsZQkJPSBvbWFwMV9jbGtfZW5hYmxlLAorCS5jbGtfZGlzYWJsZQkJPSBvbWFwMV9jbGtfZGlzYWJsZSwKKwkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDFfY2xrX3JvdW5kX3JhdGUsCisJLmNsa19zZXRfcmF0ZQkJPSBvbWFwMV9jbGtfc2V0X3JhdGUsCisJLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAxX2Nsa19kaXNhYmxlX3VudXNlZCwKK307CisKK2ludCBfX2luaXQgb21hcDFfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CisJY29uc3Qgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnICppbmZvOworCWludCBjcnlzdGFsX3R5cGUgPSAwOyAvKiBEZWZhdWx0IDEyIE1IeiAqLworCXUzMiByZWcsIGNwdV9tYXNrOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJLyoKKwkgKiBSZXNldHMgc29tZSBjbG9ja3MgdGhhdCBtYXkgYmUgbGVmdCBvbiBmcm9tIGJvb3Rsb2FkZXIsCisJICogYnV0IGxlYXZlcyBzZXJpYWwgY2xvY2tzIG9uLgorCSAqLworCW9tYXBfd3JpdGVsKDB4MyA8PCAyOSwgTU9EX0NPTkZfQ1RSTF8wKTsKKyNlbmRpZgorCisJLyogVVNCX1JFUV9FTiB3aWxsIGJlIGRpc2FibGVkIGxhdGVyIGlmIG5lY2Vzc2FyeSAodXNiX2RjX2NrKSAqLworCXJlZyA9IG9tYXBfcmVhZHcoU09GVF9SRVFfUkVHKSAmICgxIDw8IDQpOworCW9tYXBfd3JpdGV3KHJlZywgU09GVF9SRVFfUkVHKTsKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcyKTsKKworCWNsa19pbml0KCZvbWFwMV9jbGtfZnVuY3Rpb25zKTsKKworCS8qIEJ5IGRlZmF1bHQgYWxsIGlkbGVjdDEgY2xvY2tzIGFyZSBhbGxvd2VkIHRvIGlkbGUgKi8KKwlhcm1faWRsZWN0MV9tYXNrID0gfjA7CisKKwlmb3IgKGMgPSBvbWFwX2Nsa3M7IGMgPCBvbWFwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXBfY2xrcyk7IGMrKykKKwkJY2xrX3ByZWluaXQoYy0+bGsuY2xrKTsKKworCWNwdV9tYXNrID0gMDsKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCWNwdV9tYXNrIHw9IENLXzE2WFg7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQljcHVfbWFzayB8PSBDS18xNTEwOworCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCQljcHVfbWFzayB8PSBDS183WFg7CisJaWYgKGNwdV9pc19vbWFwMzEwKCkpCisJCWNwdV9tYXNrIHw9IENLXzMxMDsKKworCWZvciAoYyA9IG9tYXBfY2xrczsgYyA8IG9tYXBfY2xrcyArIEFSUkFZX1NJWkUob21hcF9jbGtzKTsgYysrKQorCQlpZiAoYy0+Y3B1ICYgY3B1X21hc2spIHsKKwkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKKwkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOworCQl9CisKKwkvKiBQb2ludGVycyB0byB0aGVzZSBjbG9ja3MgYXJlIG5lZWRlZCBieSBjb2RlIGluIGNsb2NrLmMgKi8KKwlhcGlfY2tfcCA9IGNsa19nZXQoTlVMTCwgImFwaV9jayIpOworCWNrX2RwbGwxX3AgPSBjbGtfZ2V0KE5VTEwsICJja19kcGxsMSIpOworCWNrX3JlZl9wID0gY2xrX2dldChOVUxMLCAiY2tfcmVmIik7CisKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0NMT0NLLCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcpOworCWlmIChpbmZvICE9IE5VTEwpIHsKKwkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJCWNyeXN0YWxfdHlwZSA9IGluZm8tPnN5c3RlbV9jbG9ja190eXBlOworCX0KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQorCWNrX3JlZi5yYXRlID0gMTMwMDAwMDA7CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCWlmIChjcnlzdGFsX3R5cGUgPT0gMikKKwkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKKyNlbmRpZgorCisJcHJfaW5mbygiQ2xvY2tzOiBBUk1fU1lTU1Q6IDB4JTA0eCBEUExMX0NUTDogMHglMDR4IEFSTV9DS0NUTDogIgorCQkiMHglMDR4XG4iLCBvbWFwX3JlYWR3KEFSTV9TWVNTVCksIG9tYXBfcmVhZHcoRFBMTF9DVEwpLAorCQlvbWFwX3JlYWR3KEFSTV9DS0NUTCkpOworCisJLyogV2Ugd2FudCB0byBiZSBpbiBzeW5jcm9ub3VzIHNjYWxhYmxlIG1vZGUgKi8KKwlvbWFwX3dyaXRldygweDEwMDAsIEFSTV9TWVNTVCk7CisKKyNpZmRlZiBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVIKKwkvKiBVc2UgdmFsdWVzIHNldCBieSBib290bG9hZGVyLiBEZXRlcm1pbmUgUExMIHJhdGUgYW5kIHJlY2FsY3VsYXRlCisJICogZGVwZW5kZW50IGNsb2NrcyBhcyBpZiBrZXJuZWwgaGFkIGNoYW5nZWQgUExMIG9yIGRpdmlzb3JzLgorCSAqLworCXsKKwkJdW5zaWduZWQgcGxsX2N0bF92YWwgPSBvbWFwX3JlYWR3KERQTExfQ1RMKTsKKworCQlja19kcGxsMS5yYXRlID0gY2tfcmVmLnJhdGU7IC8qIEJhc2UgeHRhbCByYXRlICovCisJCWlmIChwbGxfY3RsX3ZhbCAmIDB4MTApIHsKKwkJCS8qIFBMTCBlbmFibGVkLCBhcHBseSBtdWx0aXBsaWVyIGFuZCBkaXZpc29yICovCisJCQlpZiAocGxsX2N0bF92YWwgJiAweGY4MCkKKwkJCQlja19kcGxsMS5yYXRlICo9IChwbGxfY3RsX3ZhbCAmIDB4ZjgwKSA+PiA3OworCQkJY2tfZHBsbDEucmF0ZSAvPSAoKHBsbF9jdGxfdmFsICYgMHg2MCkgPj4gNSkgKyAxOworCQl9IGVsc2UgeworCQkJLyogUExMIGRpc2FibGVkLCBhcHBseSBieXBhc3MgZGl2aXNvciAqLworCQkJc3dpdGNoIChwbGxfY3RsX3ZhbCAmIDB4YykgeworCQkJY2FzZSAwOgorCQkJCWJyZWFrOworCQkJY2FzZSAweDQ6CisJCQkJY2tfZHBsbDEucmF0ZSAvPSAyOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlja19kcGxsMS5yYXRlIC89IDQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjZWxzZQorCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSBhbmQgZW5hYmxlIGl0ICovCisJaWYgKG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0dWFsX2NrX21wdSwgfjApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3lzdGVtIGZyZXF1ZW5jaWVzIG5vdCBzZXQuIENoZWNrIHlvdXIgY29uZmlnLlxuIik7CisJCS8qIEd1ZXNzIHNhbmUgdmFsdWVzICg2ME1IeikgKi8KKwkJb21hcF93cml0ZXcoMHgyMjkwLCBEUExMX0NUTCk7CisJCW9tYXBfd3JpdGV3KGNwdV9pc19vbWFwN3h4KCkgPyAweDMwMDUgOiAweDEwMDUsIEFSTV9DS0NUTCk7CisJCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKKwl9CisjZW5kaWYKKwlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOworCS8qIENhY2hlIHJhdGVzIGZvciBjbG9ja3MgY29ubmVjdGVkIHRvIGNrX3JlZiAobm90IGRwbGwxKSAqLworCXByb3BhZ2F0ZV9yYXRlKCZja19yZWYpOworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC4lMDFsZC8lbGQuJTAxbGQgTUh6XG4iLAorCSAgICAgICBja19yZWYucmF0ZSAvIDEwMDAwMDAsIChja19yZWYucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgY2tfZHBsbDEucmF0ZSAvIDEwMDAwMDAsIChja19kcGxsMS5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICBhcm1fY2sucmF0ZSAvIDEwMDAwMDAsIChhcm1fY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9GU0FNUExFKQorCS8qIFNlbGVjdCBzbGljZXIgb3V0cHV0IGFzIE9NQVAgaW5wdXQgY2xvY2sgKi8KKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVA3WFhfUENDX1VQTERfQ1RSTCkgJiB+MHgxLCBPTUFQN1hYX1BDQ19VUExEX0NUUkwpOworI2VuZGlmCisKKwkvKiBBbXN0cmFkIERlbHRhIHdhbnRzIEJDTEsgaGlnaCB3aGVuIGluYWN0aXZlICovCisJaWYgKG1hY2hpbmVfaXNfYW1zX2RlbHRhKCkpCisJCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoVUxQRF9DTE9DS19DVFJMKSB8CisJCQkJKDEgPDwgU0RXX01DTEtfSU5WX0JJVCksCisJCQkJVUxQRF9DTE9DS19DVFJMKTsKKworCS8qIFR1cm4gb2ZmIERTUCBhbmQgQVJNX1RJTVhPLiBNYWtlIHN1cmUgQVJNX0lOVEhDSyBpcyBub3QgZGl2aWRlZCAqLworCS8qIChvbiA3MzAsIGJpdCAxMyBtdXN0IG5vdCBiZSBjbGVhcmVkKSAqLworCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDJmZmYsIEFSTV9DS0NUTCk7CisJZWxzZQorCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDBmZmYsIEFSTV9DS0NUTCk7CisKKwkvKiBQdXQgRFNQL01QVUkgaW50byByZXNldCB1bnRpbCBuZWVkZWQgKi8KKwlvbWFwX3dyaXRldygwLCBBUk1fUlNUQ1QxKTsKKwlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QyKTsKKwlvbWFwX3dyaXRldygweDQwMCwgQVJNX0lETEVDVDEpOworCisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gT01BUDU5MTAgRXJyYXR1bSBTWVNfRE1BXzEsIGJpdCBETUFDS19SRVEgKGJpdCA4KQorCSAqIG9mIHRoZSBBUk1fSURMRUNUMiByZWdpc3RlciBtdXN0IGJlIHNldCB0byB6ZXJvLiBUaGUgcG93ZXItb24KKwkgKiBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYml0IGlzIG9uZS4KKwkgKi8KKwlvbWFwX3dyaXRldygweDAwMDAsIEFSTV9JRExFQ1QyKTsJLyogVHVybiBMQ0QgY2xvY2sgb2ZmIGFsc28gKi8KKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfZW5hYmxlKCZhcm1wZXJfY2suY2xrKTsKKwljbGtfZW5hYmxlKCZhcm14b3JfY2suY2xrKTsKKwljbGtfZW5hYmxlKCZhcm10aW1fY2suY2xrKTsgLyogVGhpcyBzaG91bGQgYmUgZG9uZSBieSB0aW1lciBjb2RlICovCisKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCisJCWNsa19lbmFibGUoJmFybV9ncGlvX2NrKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pMmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmNDczNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaTJjLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIEhlbHBlciBtb2R1bGUgZm9yIGJvYXJkIHNwZWNpZmljIEkyQyBidXMgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisjaW5jbHVkZSA8cGxhdC9tdXguaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCitpbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKKwkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAorCQkJICB1bnNpZ25lZCBsZW4pCit7CisJaWYgKGNwdV9pc19vbWFwN3h4KCkpIHsKKwkJb21hcF9jZmdfcmVnKEkyQ183WFhfU0RBKTsKKwkJb21hcF9jZmdfcmVnKEkyQ183WFhfU0NMKTsKKwl9IGVsc2UgeworCQlvbWFwX2NmZ19yZWcoSTJDX1NEQSk7CisJCW9tYXBfY2ZnX3JlZyhJMkNfU0NMKTsKKwl9CisKKwlyZXR1cm4gb21hcF9wbGF0X3JlZ2lzdGVyX2kyY19idXMoYnVzX2lkLCBjbGtyYXRlLCBpbmZvLCBsZW4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvbGNkX2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvbGNkX2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTQ1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9sY2RfZG1hLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9sY2RfZG1hLmgKKyAqCisgKiBFeHRyYWN0ZWQgZnJvbSBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yOiBKdWhhIFlyasO2bMOkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9fTUFDSF9PTUFQMV9MQ0RfRE1BX0hfXworI2RlZmluZSBfX01BQ0hfT01BUDFfTENEX0RNQV9IX18KKworLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBMQ0QgRE1BICovCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWRiMDApCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQ1RSTAkJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDIpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDYpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCisKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZTMwMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DQ1IJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMyKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM0KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM4KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNhKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNjKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNlKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMl9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQwKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMl9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQyKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMl9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQ0KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMl9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQ2KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FSV9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkOCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkYSkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRU5fQjEJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZTApCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZOX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGU0KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGVhKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGY0KQorCisvKiBMQ0QgRE1BIGJsb2NrIG51bWJlcnMgKi8KK2VudW0geworCU9NQVBfTENEX0RNQV9CMV9UT1AsCisJT01BUF9MQ0RfRE1BX0IxX0JPVFRPTSwKKwlPTUFQX0xDRF9ETUFfQjJfVE9QLAorCU9NQVBfTENEX0RNQV9CMl9CT1RUT00KK307CisKKy8qIExDRCBETUEgZnVuY3Rpb25zICovCitleHRlcm4gaW50IG9tYXBfcmVxdWVzdF9sY2RfZG1hKHZvaWQgKCpjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCisJCQkJdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBvbWFwX2ZyZWVfbGNkX2RtYSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfZW5hYmxlX2xjZF9kbWEodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwX3N0b3BfbGNkX2RtYSh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIoaW50IGV4dGVybmFsKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKGludCBzaW5nbGUpOworZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBmYl94cmVzLCB1MTYgZmJfeXJlcywKKwkJCQlpbnQgZGF0YV90eXBlKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKHVuc2lnbmVkIGxvbmcgdnhyZXMpOworZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IoaW50IG1pcnJvcik7CitleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpOworCitleHRlcm4gaW50IG9tYXBfbGNkX2RtYV9ydW5uaW5nKHZvaWQpOworCisjZW5kaWYgLyogX19NQUNIX09NQVAxX0xDRF9ETUFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9sY2RjLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9sY2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliZDcwMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2xjZGMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvbGNkYy5oCisgKgorICogRXh0cmFjdGVkIGZyb20gZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYworICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX01BQ0hfTENEQ19IX18KKyNkZWZpbmUgX19NQUNIX0xDRENfSF9fCisKKyNkZWZpbmUgT01BUF9MQ0RDX0JBU0UJCQkweGZmZmVjMDAwCisjZGVmaW5lIE9NQVBfTENEQ19TSVpFCQkJMjU2CisjZGVmaW5lIE9NQVBfTENEQ19JUlEJCQlJTlRfTENEX0NUUkwKKworI2RlZmluZSBPTUFQX0xDRENfQ09OVFJPTAkJKE9NQVBfTENEQ19CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9MQ0RDX1RJTUlORzAJCShPTUFQX0xDRENfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVBfTENEQ19USU1JTkcxCQkoT01BUF9MQ0RDX0JBU0UgKyAweDA4KQorI2RlZmluZSBPTUFQX0xDRENfVElNSU5HMgkJKE9NQVBfTENEQ19CQVNFICsgMHgwYykKKyNkZWZpbmUgT01BUF9MQ0RDX1NUQVRVUwkJKE9NQVBfTENEQ19CQVNFICsgMHgxMCkKKyNkZWZpbmUgT01BUF9MQ0RDX1NVQlBBTkVMCQkoT01BUF9MQ0RDX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQX0xDRENfTElORV9JTlQJCShPTUFQX0xDRENfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVBfTENEQ19ESVNQTEFZX1NUQVRVUwkoT01BUF9MQ0RDX0JBU0UgKyAweDFjKQorCisjZGVmaW5lIE9NQVBfTENEQ19TVEFUX0RPTkUJCSgxIDw8IDApCisjZGVmaW5lIE9NQVBfTENEQ19TVEFUX1ZTWU5DCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQX0xDRENfU1RBVF9TWU5DX0xPU1QJKDEgPDwgMikKKyNkZWZpbmUgT01BUF9MQ0RDX1NUQVRfQUJDCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQX0xDRENfU1RBVF9MSU5FX0lOVAkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUF9MQ0RDX1NUQVRfRlVGCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQX0xDRENfU1RBVF9MT0FERURfUEFMRVRURQkoMSA8PCA2KQorCisjZGVmaW5lIE9NQVBfTENEQ19DVFJMX0xDRF9FTgkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUF9MQ0RDX0NUUkxfTENEX1RGVAkJKDEgPDwgNykKKyNkZWZpbmUgT01BUF9MQ0RDX0NUUkxfTElORV9JUlFfQ0xSX1NFTAkoMSA8PCAxMCkKKworI2RlZmluZSBPTUFQX0xDRENfSVJRX1ZTWU5DCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQX0xDRENfSVJRX0RPTkUJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVBfTENEQ19JUlFfTE9BREVEX1BBTEVUVEUJKDEgPDwgNCkKKyNkZWZpbmUgT01BUF9MQ0RDX0lSUV9MSU5FX05JUlEJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVBfTENEQ19JUlFfTElORQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUF9MQ0RDX0lSUV9NQVNLCQkoKCgxIDw8IDUpIC0gMSkgPDwgMikKKworI2VuZGlmIC8qIF9fTUFDSF9MQ0RDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IDJhNmQ2OGEuLmQ5YjhkODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTE4LDcgKzE4LDggQEAKICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KIAotZXh0ZXJuIGludCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKKyNpbmNsdWRlICJjbG9jay5oIgorCiBleHRlcm4gdm9pZCBvbWFwX2NoZWNrX3JldmlzaW9uKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9zcmFtX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlMTFhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKKyAqCisgKiBFeHRyYWN0ZWQgZnJvbSBhcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSnVoYSBZcmrDtmzDpCA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICogRE1BIGNoYW5uZWwgbGlua2luZyBmb3IgMTYxMCBieSBTYW11ZWwgT3J0aXogPHNhbXVlbC5vcnRpekBub2tpYS5jb20+CisgKiBHcmFwaGljcyBETUEgYW5kIExDRCBETUEgZ3JhcGhpY3MgdHJhbmZvcm1hdGlvbnMKKyAqIGJ5IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqIE9NQVAyLzMgc3VwcG9ydCBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogTWVyZ2VkIHRvIHN1cHBvcnQgYm90aCBPTUFQMSBhbmQgT01BUDIgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqIFNvbWUgZnVuY3Rpb25zIGJhc2VkIG9uIGVhcmxpZXIgZG1hLW9tYXAuYyBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIEFkZGVkIE9NQVA0IHN1cHBvcnQgLSBTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoKKyAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgT01BUCBpbnRlcm5hbCBETUEgY2hhbm5lbHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2xjZGMuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorCitpbnQgb21hcF9sY2RfZG1hX3J1bm5pbmcodm9pZCkKK3sKKwkvKgorCSAqIE9uIE9NQVAxNTEwLCBpbnRlcm5hbCBMQ0QgY29udHJvbGxlciB3aWxsIHN0YXJ0IHRoZSB0cmFuc2ZlcgorCSAqIHdoZW4gaXQgZ2V0cyBlbmFibGVkLCBzbyBhc3N1bWUgRE1BIHJ1bm5pbmcgaWYgTENEIGVuYWJsZWQuCisJICovCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQlpZiAob21hcF9yZWFkdyhPTUFQX0xDRENfQ09OVFJPTCkgJiBPTUFQX0xDRENfQ1RSTF9MQ0RfRU4pCisJCQlyZXR1cm4gMTsKKworCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQorCQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2RfZG1hX2luZm8geworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgcmVzZXJ2ZWQ7CisJdm9pZCAoKmNhbGxiYWNrKSh1MTYgc3RhdHVzLCB2b2lkICpkYXRhKTsKKwl2b2lkICpjYl9kYXRhOworCisJaW50IGFjdGl2ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7CisJaW50IHJvdGF0ZSwgZGF0YV90eXBlLCB4cmVzLCB5cmVzOworCWludCB2eHJlczsKKwlpbnQgbWlycm9yOworCWludCB4c2NhbGUsIHlzY2FsZTsKKwlpbnQgZXh0X2N0cmw7CisJaW50IHNyY19wb3J0OworCWludCBzaW5nbGVfdHJhbnNmZXI7Cit9IGxjZF9kbWE7CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBmYl94cmVzLCB1MTYgZmJfeXJlcywKKwkJCSBpbnQgZGF0YV90eXBlKQoreworCWxjZF9kbWEuYWRkciA9IGFkZHI7CisJbGNkX2RtYS5kYXRhX3R5cGUgPSBkYXRhX3R5cGU7CisJbGNkX2RtYS54cmVzID0gZmJfeHJlczsKKwlsY2RfZG1hLnlyZXMgPSBmYl95cmVzOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxKTsKKwordm9pZCBvbWFwX3NldF9sY2RfZG1hX3NyY19wb3J0KGludCBwb3J0KQoreworCWxjZF9kbWEuc3JjX3BvcnQgPSBwb3J0OworfQorCit2b2lkIG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIoaW50IGV4dGVybmFsKQoreworCWxjZF9kbWEuZXh0X2N0cmwgPSBleHRlcm5hbDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9leHRfY29udHJvbGxlcik7CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9zaW5nbGVfdHJhbnNmZXIoaW50IHNpbmdsZSkKK3sKKwlsY2RfZG1hLnNpbmdsZV90cmFuc2ZlciA9IHNpbmdsZTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9zaW5nbGVfdHJhbnNmZXIpOworCit2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSkKK3sKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEgcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlsY2RfZG1hLnJvdGF0ZSA9IHJvdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9iMV9yb3RhdGlvbik7CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IoaW50IG1pcnJvcikKK3sKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEgbWlycm9yIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKKwkJQlVHKCk7CisJfQorCWxjZF9kbWEubWlycm9yID0gbWlycm9yOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcik7CisKK3ZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV92eHJlcyh1bnNpZ25lZCBsb25nIHZ4cmVzKQoreworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQSB2aXJ0dWFsIHJlc3Vsb3Rpb24gaXMgbm90IHN1cHBvcnRlZCAiCisJCQkJImluIDE1MTAgbW9kZVxuIik7CisJCUJVRygpOworCX0KKwlsY2RfZG1hLnZ4cmVzID0gdnhyZXM7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfYjFfdnhyZXMpOworCit2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfc2NhbGUodW5zaWduZWQgaW50IHhzY2FsZSwgdW5zaWduZWQgaW50IHlzY2FsZSkKK3sKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEgc2NhbGUgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOworCQlCVUcoKTsKKwl9CisJbGNkX2RtYS54c2NhbGUgPSB4c2NhbGU7CisJbGNkX2RtYS55c2NhbGUgPSB5c2NhbGU7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfYjFfc2NhbGUpOworCitzdGF0aWMgdm9pZCBzZXRfYjFfcmVncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG9wLCBib3R0b207CisJaW50IGVzOworCXUxNiB3OworCXVuc2lnbmVkIGxvbmcgZW4sIGZuOworCWxvbmcgZWksIGZpOworCXVuc2lnbmVkIGxvbmcgdnhyZXM7CisJdW5zaWduZWQgaW50IHhzY2FsZSwgeXNjYWxlOworCisJc3dpdGNoIChsY2RfZG1hLmRhdGFfdHlwZSkgeworCWNhc2UgT01BUF9ETUFfREFUQV9UWVBFX1M4OgorCQllcyA9IDE7CisJCWJyZWFrOworCWNhc2UgT01BUF9ETUFfREFUQV9UWVBFX1MxNjoKKwkJZXMgPSAyOworCQlicmVhazsKKwljYXNlIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzI6CisJCWVzID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwl2eHJlcyA9IGxjZF9kbWEudnhyZXMgPyBsY2RfZG1hLnZ4cmVzIDogbGNkX2RtYS54cmVzOworCXhzY2FsZSA9IGxjZF9kbWEueHNjYWxlID8gbGNkX2RtYS54c2NhbGUgOiAxOworCXlzY2FsZSA9IGxjZF9kbWEueXNjYWxlID8gbGNkX2RtYS55c2NhbGUgOiAxOworCUJVR19PTih2eHJlcyA8IGxjZF9kbWEueHJlcyk7CisKKyNkZWZpbmUgUElYQUREUih4LCB5KSAobGNkX2RtYS5hZGRyICsJCQkJCVwKKwkJKCh5KSAqIHZ4cmVzICogeXNjYWxlICsgKHgpICogeHNjYWxlKSAqIGVzKQorI2RlZmluZSBQSVhTVEVQKHN4LCBzeSwgZHgsIGR5KSAoUElYQUREUihkeCwgZHkpIC0gUElYQUREUihzeCwgc3kpIC0gZXMgKyAxKQorCisJc3dpdGNoIChsY2RfZG1hLnJvdGF0ZSkgeworCWNhc2UgMDoKKwkJaWYgKCFsY2RfZG1hLm1pcnJvcikgeworCQkJdG9wID0gUElYQUREUigwLCAwKTsKKwkJCWJvdHRvbSA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgbGNkX2RtYS55cmVzIC0gMSk7CisJCQkvKiAxNTEwIERNQSByZXF1aXJlcyB0aGUgYm90dG9tIGFkZHJlc3MgdG8gYmUgMiBtb3JlCisJCQkgKiB0aGFuIHRoZSBhY3R1YWwgbGFzdCBtZW1vcnkgYWNjZXNzIGxvY2F0aW9uLiAqLworCQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmCisJCQkJbGNkX2RtYS5kYXRhX3R5cGUgPT0gT01BUF9ETUFfREFUQV9UWVBFX1MzMikKKwkJCQkJYm90dG9tICs9IDI7CisJCQllaSA9IFBJWFNURVAoMCwgMCwgMSwgMCk7CisJCQlmaSA9IFBJWFNURVAobGNkX2RtYS54cmVzIC0gMSwgMCwgMCwgMSk7CisJCX0gZWxzZSB7CisJCQl0b3AgPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIDApOworCQkJYm90dG9tID0gUElYQUREUigwLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCWVpID0gUElYU1RFUCgxLCAwLCAwLCAwKTsKKwkJCWZpID0gUElYU1RFUCgwLCAwLCBsY2RfZG1hLnhyZXMgLSAxLCAxKTsKKwkJfQorCQllbiA9IGxjZF9kbWEueHJlczsKKwkJZm4gPSBsY2RfZG1hLnlyZXM7CisJCWJyZWFrOworCWNhc2UgOTA6CisJCWlmICghbGNkX2RtYS5taXJyb3IpIHsKKwkJCXRvcCA9IFBJWEFERFIoMCwgbGNkX2RtYS55cmVzIC0gMSk7CisJCQlib3R0b20gPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIDApOworCQkJZWkgPSBQSVhTVEVQKDAsIDEsIDAsIDApOworCQkJZmkgPSBQSVhTVEVQKDAsIDAsIDEsIGxjZF9kbWEueXJlcyAtIDEpOworCQl9IGVsc2UgeworCQkJdG9wID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCWJvdHRvbSA9IFBJWEFERFIoMCwgMCk7CisJCQllaSA9IFBJWFNURVAoMCwgMSwgMCwgMCk7CisJCQlmaSA9IFBJWFNURVAoMSwgMCwgMCwgbGNkX2RtYS55cmVzIC0gMSk7CisJCX0KKwkJZW4gPSBsY2RfZG1hLnlyZXM7CisJCWZuID0gbGNkX2RtYS54cmVzOworCQlicmVhazsKKwljYXNlIDE4MDoKKwkJaWYgKCFsY2RfZG1hLm1pcnJvcikgeworCQkJdG9wID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCWJvdHRvbSA9IFBJWEFERFIoMCwgMCk7CisJCQllaSA9IFBJWFNURVAoMSwgMCwgMCwgMCk7CisJCQlmaSA9IFBJWFNURVAoMCwgMSwgbGNkX2RtYS54cmVzIC0gMSwgMCk7CisJCX0gZWxzZSB7CisJCQl0b3AgPSBQSVhBRERSKDAsIGxjZF9kbWEueXJlcyAtIDEpOworCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKKwkJCWVpID0gUElYU1RFUCgwLCAwLCAxLCAwKTsKKwkJCWZpID0gUElYU1RFUChsY2RfZG1hLnhyZXMgLSAxLCAxLCAwLCAwKTsKKwkJfQorCQllbiA9IGxjZF9kbWEueHJlczsKKwkJZm4gPSBsY2RfZG1hLnlyZXM7CisJCWJyZWFrOworCWNhc2UgMjcwOgorCQlpZiAoIWxjZF9kbWEubWlycm9yKSB7CisJCQl0b3AgPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIDApOworCQkJYm90dG9tID0gUElYQUREUigwLCBsY2RfZG1hLnlyZXMgLSAxKTsKKwkJCWVpID0gUElYU1RFUCgwLCAwLCAwLCAxKTsKKwkJCWZpID0gUElYU1RFUCgxLCBsY2RfZG1hLnlyZXMgLSAxLCAwLCAwKTsKKwkJfSBlbHNlIHsKKwkJCXRvcCA9IFBJWEFERFIoMCwgMCk7CisJCQlib3R0b20gPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIGxjZF9kbWEueXJlcyAtIDEpOworCQkJZWkgPSBQSVhTVEVQKDAsIDAsIDAsIDEpOworCQkJZmkgPSBQSVhTVEVQKDAsIGxjZF9kbWEueXJlcyAtIDEsIDEsIDApOworCQl9CisJCWVuID0gbGNkX2RtYS55cmVzOworCQlmbiA9IGxjZF9kbWEueHJlczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybjsJLyogU3VwcHJlc3Mgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIHZhcnMgKi8KKwl9CisKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJb21hcF93cml0ZXcodG9wID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9VKTsKKwkJb21hcF93cml0ZXcodG9wLCBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MKTsKKwkJb21hcF93cml0ZXcoYm90dG9tID4+IDE2LCBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VKTsKKwkJb21hcF93cml0ZXcoYm90dG9tLCBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9MKTsKKworCQlyZXR1cm47CisJfQorCisJLyogMTYxMCByZWdzICovCisJb21hcF93cml0ZXcodG9wID4+IDE2LCBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9VKTsKKwlvbWFwX3dyaXRldyh0b3AsIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wpOworCW9tYXBfd3JpdGV3KGJvdHRvbSA+PiAxNiwgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfVSk7CisJb21hcF93cml0ZXcoYm90dG9tLCBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9MKTsKKworCW9tYXBfd3JpdGV3KGVuLCBPTUFQMTYxMF9ETUFfTENEX1NSQ19FTl9CMSk7CisJb21hcF93cml0ZXcoZm4sIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZOX0IxKTsKKworCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCk7CisJdyAmPSB+MHgwMzsKKwl3IHw9IGxjZF9kbWEuZGF0YV90eXBlOworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCk7CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOworCS8qIEFsd2F5cyBzZXQgdGhlIHNvdXJjZSBwb3J0IGFzIFNEUkFNIGZvciBub3cqLworCXcgJj0gfigweDAzIDw8IDYpOworCWlmIChsY2RfZG1hLmNhbGxiYWNrICE9IE5VTEwpCisJCXcgfD0gMSA8PCAxOwkJLyogQmxvY2sgaW50ZXJydXB0IGVuYWJsZSAqLworCWVsc2UKKwkJdyAmPSB+KDEgPDwgMSk7CisJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKworCWlmICghKGxjZF9kbWEucm90YXRlIHx8IGxjZF9kbWEubWlycm9yIHx8CisJICAgICAgbGNkX2RtYS52eHJlcyB8fCBsY2RfZG1hLnhzY2FsZSB8fCBsY2RfZG1hLnlzY2FsZSkpCisJCXJldHVybjsKKworCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKwkvKiBTZXQgdGhlIGRvdWJsZS1pbmRleGVkIGFkZHJlc3NpbmcgbW9kZSAqLworCXcgfD0gKDB4MDMgPDwgMTIpOworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKworCW9tYXBfd3JpdGV3KGVpLCBPTUFQMTYxMF9ETUFfTENEX1NSQ19FSV9CMSk7CisJb21hcF93cml0ZXcoZmkgPj4gMTYsIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX1UpOworCW9tYXBfd3JpdGV3KGZpLCBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9MKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGxjZF9kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXUxNiB3OworCisJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwlpZiAodW5saWtlbHkoISh3ICYgKDEgPDwgMykpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBMQ0QgRE1BIElSUVxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJLyogQWNrIHRoZSBJUlEgKi8KKwl3IHw9ICgxIDw8IDMpOworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CisJbGNkX2RtYS5hY3RpdmUgPSAwOworCWlmIChsY2RfZG1hLmNhbGxiYWNrICE9IE5VTEwpCisJCWxjZF9kbWEuY2FsbGJhY2sodywgbGNkX2RtYS5jYl9kYXRhKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IG9tYXBfcmVxdWVzdF9sY2RfZG1hKHZvaWQgKCpjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlzcGluX2xvY2tfaXJxKCZsY2RfZG1hLmxvY2spOworCWlmIChsY2RfZG1hLnJlc2VydmVkKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmbGNkX2RtYS5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMQ0QgRE1BIGNoYW5uZWwgYWxyZWFkeSByZXNlcnZlZFxuIik7CisJCUJVRygpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlsY2RfZG1hLnJlc2VydmVkID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmxjZF9kbWEubG9jayk7CisJbGNkX2RtYS5jYWxsYmFjayA9IGNhbGxiYWNrOworCWxjZF9kbWEuY2JfZGF0YSA9IGRhdGE7CisJbGNkX2RtYS5hY3RpdmUgPSAwOworCWxjZF9kbWEuc2luZ2xlX3RyYW5zZmVyID0gMDsKKwlsY2RfZG1hLnJvdGF0ZSA9IDA7CisJbGNkX2RtYS52eHJlcyA9IDA7CisJbGNkX2RtYS5taXJyb3IgPSAwOworCWxjZF9kbWEueHNjYWxlID0gMDsKKwlsY2RfZG1hLnlzY2FsZSA9IDA7CisJbGNkX2RtYS5leHRfY3RybCA9IDA7CisJbGNkX2RtYS5zcmNfcG9ydCA9IDA7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9yZXF1ZXN0X2xjZF9kbWEpOworCit2b2lkIG9tYXBfZnJlZV9sY2RfZG1hKHZvaWQpCit7CisJc3Bpbl9sb2NrKCZsY2RfZG1hLmxvY2spOworCWlmICghbGNkX2RtYS5yZXNlcnZlZCkgeworCQlzcGluX3VubG9jaygmbGNkX2RtYS5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMQ0QgRE1BIGlzIG5vdCByZXNlcnZlZFxuIik7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCisJCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOworCXNwaW5fdW5sb2NrKCZsY2RfZG1hLmxvY2spOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2ZyZWVfbGNkX2RtYSk7CisKK3ZvaWQgb21hcF9lbmFibGVfbGNkX2RtYSh2b2lkKQoreworCXUxNiB3OworCisJLyoKKwkgKiBTZXQgdGhlIEVuYWJsZSBiaXQgb25seSBpZiBhbiBleHRlcm5hbCBjb250cm9sbGVyIGlzCisJICogY29ubmVjdGVkLiBPdGhlcndpc2UgdGhlIE9NQVAgaW50ZXJuYWwgY29udHJvbGxlciB3aWxsCisJICogc3RhcnQgdGhlIHRyYW5zZmVyIHdoZW4gaXQgZ2V0cyBlbmFibGVkLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKKwkJcmV0dXJuOworCisJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwl3IHw9IDEgPDwgODsKKwlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NUUkwpOworCisJbGNkX2RtYS5hY3RpdmUgPSAxOworCisJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCXcgfD0gMSA8PCA3OworCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9lbmFibGVfbGNkX2RtYSk7CisKK3ZvaWQgb21hcF9zZXR1cF9sY2RfZG1hKHZvaWQpCit7CisJQlVHX09OKGxjZF9kbWEuYWN0aXZlKTsKKwlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJCS8qIFNldCBzb21lIHJlYXNvbmFibGUgZGVmYXVsdHMgKi8KKwkJb21hcF93cml0ZXcoMHg1NDQwLCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJCW9tYXBfd3JpdGV3KDB4OTEwMiwgT01BUDE2MTBfRE1BX0xDRF9DU0RQKTsKKwkJb21hcF93cml0ZXcoMHgwMDA0LCBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMKTsKKwl9CisJc2V0X2IxX3JlZ3MoKTsKKwlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXUxNiB3OworCisJCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKKwkJLyoKKwkJICogSWYgRE1BIHdhcyBhbHJlYWR5IGFjdGl2ZSBzZXQgdGhlIGVuZF9wcm9nIGJpdCB0byBoYXZlCisJCSAqIHRoZSBwcm9ncmFtbWVkIHJlZ2lzdGVyIHNldCBsb2FkZWQgaW50byB0aGUgYWN0aXZlCisJCSAqIHJlZ2lzdGVyIHNldC4KKwkJICovCisJCXcgfD0gMSA8PCAxMTsJCS8qIEVuZF9wcm9nICovCisJCWlmICghbGNkX2RtYS5zaW5nbGVfdHJhbnNmZXIpCisJCQl3IHw9ICgzIDw8IDgpOwkvKiBBdXRvX2luaXQsIHJlcGVhdCAqLworCQlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJfQorfQorRVhQT1JUX1NZTUJPTChvbWFwX3NldHVwX2xjZF9kbWEpOworCit2b2lkIG9tYXBfc3RvcF9sY2RfZG1hKHZvaWQpCit7CisJdTE2IHc7CisKKwlsY2RfZG1hLmFjdGl2ZSA9IDA7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCQlyZXR1cm47CisKKwl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJdyAmPSB+KDEgPDwgNyk7CisJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCisJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwl3ICY9IH4oMSA8PCA4KTsKKwlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NUUkwpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3N0b3BfbGNkX2RtYSk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9sY2RfZG1hKHZvaWQpCit7CisJaW50IHI7CisKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJdTE2IHc7CisKKwkJLyogdGhpcyB3b3VsZCBwcmV2ZW50IE9NQVAgc2xlZXAgKi8KKwkJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKKwkJdyAmPSB+KDEgPDwgOCk7CisJCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmxjZF9kbWEubG9jayk7CisKKwlyID0gcmVxdWVzdF9pcnEoSU5UX0RNQV9MQ0QsIGxjZF9kbWFfaXJxX2hhbmRsZXIsIDAsCisJCQkiTENEIERNQSIsIE5VTEwpOworCWlmIChyICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlcXVlc3QgSVJRIGZvciBMQ0QgRE1BICIKKwkJCSAgICAgICAiKGVycm9yICVkKVxuIiwgcik7CisKKwlyZXR1cm4gcjsKK30KKworYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfbGNkX2RtYSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IDc4NTM3MWUuLjA3MjEyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtNTAsMTIgKzUwLDE4IEBACiAKIE1VWF9DRkdfN1hYKCJBQTE3XzdYWF9VU0JfRE0iLCAgICAgMiwgICAyMSwgICAgMCwgICAyMCwgICAwLCAwKQogTVVYX0NGR183WFgoIlcxNl83WFhfVVNCX1BVX0VOIiwgICAyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCi1NVVhfQ0ZHXzdYWCgiVzE3XzdYWF9VU0JfVkJVU0kiLCAgIDIsICAgMjksICAgIDAsICAgMjgsICAgMCwgMCkKK01VWF9DRkdfN1hYKCJXMTdfN1hYX1VTQl9WQlVTSSIsICAgMiwgICAyOSwgICAgNiwgICAyOCwgICAxLCAwKQorTVVYX0NGR183WFgoIlcxOF83WFhfVVNCX0RNQ0tfT1VUIiwzLCAgICAzLCAgICAxLCAgICAyLCAgIDAsIDApCitNVVhfQ0ZHXzdYWCgiVzE5XzdYWF9VU0JfRENSU1QiLCAgIDMsICAgIDcsICAgIDEsICAgIDYsICAgMCwgMCkKIAogLyogTU1DIFBpbnMgKi8KIE1VWF9DRkdfN1hYKCJNTUNfN1hYX0NNRCIsICAgICAgICAgMiwgICAgOSwgICAgMCwgICAgOCwgICAxLCAwKQogTVVYX0NGR183WFgoIk1NQ183WFhfQ0xLIiwgICAgICAgICAyLCAgIDEzLCAgICAwLCAgIDEyLCAgIDEsIDApCiBNVVhfQ0ZHXzdYWCgiTU1DXzdYWF9EQVQwIiwgICAgICAgIDIsICAgMTcsICAgIDAsICAgMTYsICAgMSwgMCkKKworLyogSTJDIGludGVyZmFjZSAqLworTVVYX0NGR183WFgoIkkyQ183WFhfU0NMIiwgICAgICAgICA1LCAgICAxLCAgICAwLCAgICAwLCAgIDEsIDApCitNVVhfQ0ZHXzdYWCgiSTJDXzdYWF9TREEiLCAgICAgICAgIDUsICAgIDUsICAgIDAsICAgIDAsICAgMSwgMCkKIH07CiAjZGVmaW5lIE9NQVA3WFhfUElOU19TWgkJQVJSQVlfU0laRShvbWFwN3h4X3BpbnMpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9vcHAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvb3BwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwNzRkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvb3BwLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL29wcC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAxX09QUF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9PUFBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IG1wdV9yYXRlIHsKKwl1bnNpZ25lZCBsb25nCQlyYXRlOworCXVuc2lnbmVkIGxvbmcJCXh0YWw7CisJdW5zaWduZWQgbG9uZwkJcGxsX3JhdGU7CisJX191MTYJCQlja2N0bF92YWw7CisJX191MTYJCQlkcGxsY3RsX3ZhbDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbXB1X3JhdGUgb21hcDFfcmF0ZV90YWJsZVtdOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvb3BwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvb3BwX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE1NDY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9vcHBfZGF0YS5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9vcHBfZGF0YS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvcHAuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMSBNUFUgcmF0ZSB0YWJsZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBtcHVfcmF0ZSBvbWFwMV9yYXRlX3RhYmxlW10gPSB7CisJLyogTVBVIE1IeiwgeHRhbCBNSHosIGRwbGwxIE1IeiwgQ0tDVEwsIERQTExfQ1RMCisJICogTk9URTogQ29tbWVudCBvcmRlciBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIGJpdHMgaW4gQ0tDVEwgdmFsdWU6CisJICogYXJtZGl2LCBkc3BkaXYsIGRzcG1tdSwgdGNkaXYsIHBlcmRpdiwgbGNkZGl2CisJICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMjE2TUhaKQorCXsgMjE2MDAwMDAwLCAxMjAwMDAwMCwgMjE2MDAwMDAwLCAweDA1MGQsIDB4MjkxMCB9LCAvKiAxLzEvMi8yLzIvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTk1TUhaKQorCXsgMTk1MDAwMDAwLCAxMzAwMDAwMCwgMTk1MDAwMDAwLCAweDA1MGUsIDB4Mjc5MCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTkyTUhaKQorCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLworCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzQvNC84LzgvOCAqLworCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQorCXsgMTgyMDAwMDAwLCAxMzAwMDAwMCwgMTgyMDAwMDAwLCAweDA1MGUsIDB4MjcxMCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTY4TUhaKQorCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQorCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQorCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fOTZNSFopCisJeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAgOTYwMDAwMDAsIDB4MDAwNSwgMHgyNDEwIH0sIC8qIDEvMS8xLzEvMi8yICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV82ME1IWikKKwl7ICA2MDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwMDA1LCAweDIyOTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzMwTUhaKQorCXsgIDMwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDA1NTUsIDB4MjI5MCB9LCAvKiAyLzIvMi8yLzIvMiAqLworI2VuZGlmCisJeyAwLCAwLCAwLCAwLCAwIH0sCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzMwOWFhYi4uMTBlYWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtMTgsMTIgKzE4LDI1IEBACiBjb25maWcgQVJDSF9PTUFQMzRYWAogCWJvb2wgIk9NQVAzNHh4IEJhc2VkIFN5c3RlbSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKIAogY29uZmlnIEFSQ0hfT01BUDM0MzAKIAlib29sICJPTUFQMzQzMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAorY29uZmlnIE9NQVBfUEFDS0FHRV9DQkMKKyAgICAgICBib29sCisKK2NvbmZpZyBPTUFQX1BBQ0tBR0VfQ0JCCisgICAgICAgYm9vbAorCitjb25maWcgT01BUF9QQUNLQUdFX0NVUworICAgICAgIGJvb2wKKworY29uZmlnIE9NQVBfUEFDS0FHRV9DQlAKKyAgICAgICBib29sCisKIGNvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMyB8fCBBUkNIX09NQVA0CiAKQEAgLTUyLDE0ICs2NSwxNyBAQAogY29uZmlnIE1BQ0hfT01BUDNfQkVBR0xFCiAJYm9vbCAiT01BUDMgQkVBR0xFIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUF9MRFAKIAlib29sICJPTUFQMyBMRFAgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PVkVSTwogCWJvb2wgIkd1bXN0aXggT3Zlcm8gYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQM0VWTQogCWJvb2wgIk9NQVAgMzUzMCBFVk0gYm9hcmQiCkBAIC02OCwxNCArODQsMjIgQEAKIGNvbmZpZyBNQUNIX09NQVAzNTE3RVZNCiAJYm9vbCAiT01BUDM1MTcvIEFNMzUxNyBFVk0gYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQM19QQU5ET1JBCiAJYm9vbCAiT01BUDMgUGFuZG9yYSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCisKK2NvbmZpZyBNQUNIX09NQVAzX1RPVUNIQk9PSworCWJvb2wgIk9NQVAzIFRvdWNoIEJvb2siCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCiBjb25maWcgTUFDSF9PTUFQXzM0MzBTRFAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfTk9LSUFfTjgwMAogICAgICAgIGJvb2wKQEAgLTk2LDI2ICsxMjAsMzMgQEAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVBfWk9PTTIKIAlib29sICJPTUFQMyBab29tMiBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVBfWk9PTTMKIAlib29sICJPTUFQMzYzMCBab29tMyBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JQCiAKIGNvbmZpZyBNQUNIX0NNX1QzNQogCWJvb2wgIkNvbXB1TGFiIENNLVQzNSBtb2R1bGUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NVUworCXNlbGVjdCBPTUFQX01VWAogCiBjb25maWcgTUFDSF9JR0VQMDAyMAogCWJvb2wgIklHRVAwMDIwIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUF8zNjMwU0RQCiAJYm9vbCAiT01BUDM2MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQlAKIAogY29uZmlnIE1BQ0hfT01BUF80NDMwU0RQCiAJYm9vbCAiT01BUCA0NDMwIFNEUCBib2FyZCIKQEAgLTEyOCwzICsxNTksMTUgQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgaGFyZHdhcmUgb2Ygb21hcDMKIAorY29uZmlnIE9NQVAzX1NEUkNfQUNfVElNSU5HCisJYm9vbCAiRW5hYmxlIFNEUkMgQUMgdGltaW5nIHJlZ2lzdGVyIGNoYW5nZXMiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Uga25vdyB0aGF0IG5vbmUgb2YgeW91ciBzeXN0ZW0gaW5pdGlhdG9ycyB3aWxsIGF0dGVtcHQgdG8KKwkgIGFjY2VzcyBTRFJBTSBkdXJpbmcgQ09SRSBEVkZTLCBzZWxlY3QgWSBoZXJlLiAgVGhpcyBzaG91bGQgYm9vc3QKKwkgIFNEUkFNIHBlcmZvcm1hbmNlIGF0IGxvd2VyIENPUkUgT1BQcy4gIFRoZXJlIGFyZSByZWxhdGl2ZWx5IGZldworCSAgdXNlcnMgd2hvIHdpbGwgd2lzaCB0byBzYXkgeWVzIGF0IHRoaXMgcG9pbnQgLSBhbG1vc3QgZXZlcnlvbmUgd2lsbAorCSAgd2lzaCB0byBzYXkgbm8uICBTZWxlY3RpbmcgeWVzIHdpdGhvdXQgdW5kZXJzdGFuZGluZyB3aGF0IGlzCisJICBnb2luZyBvbiBjb3VsZCByZXN1bHQgaW4gc3lzdGVtIGNyYXNoZXM7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IDMyNTQ4YTQuLmIzMjY3OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtNiwxMSArNiwxNCBAQAogb2JqLXkgOj0gaWQubyBpby5vIGNvbnRyb2wubyBtdXgubyBkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8KIAogb21hcC0yLTMtY29tbW9uCQkJCT0gaXJxLm8gc2RyYy5vIG9tYXBfaHdtb2Qubworb21hcC0zLTQtY29tbW9uCQkJCT0gZHBsbC5vCiBwcmNtLWNvbW1vbgkJCQk9IHByY20ubyBwb3dlcmRvbWFpbi5vCi1jbG9jay1jb21tb24JCQkJPSBjbG9jay5vIGNsb2NrZG9tYWluLm8KK2Nsb2NrLWNvbW1vbgkJCQk9IGNsb2NrLm8gY2xvY2tfY29tbW9uX2RhdGEubyBjbG9ja2RvbWFpbi5vCiAKIG9iai0kKENPTkZJR19BUkNIX09NQVAyKSArPSAkKG9tYXAtMi0zLWNvbW1vbikgJChwcmNtLWNvbW1vbikgJChjbG9jay1jb21tb24pCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMykgKz0gJChvbWFwLTItMy1jb21tb24pICQocHJjbS1jb21tb24pICQoY2xvY2stY29tbW9uKQorb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKHByY20tY29tbW9uKSAkKGNsb2NrLWNvbW1vbikgXAorCQkJICAgICQob21hcC0zLTQtY29tbW9uKQorb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpICs9ICQob21hcC0zLTQtY29tbW9uKSBwcmNtLm8gY2xvY2subwogCiBvYmotJChDT05GSUdfT01BUF9NQ0JTUCkgKz0gbWNic3AubwogCkBAIC0yMyw2ICsyNiw5IEBACiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IHNyYW0yNDN4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gc3JhbTM0eHgubwogCisjIFBpbiBtdWx0aXBsZXhpbmcKK29iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gbXV4MzR4eC5vCisKICMgU01TL1NEUkMKIG9iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gc2RyYzJ4eHgubwogIyBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHNkcmMzeHh4Lm8KQEAgLTQxLDggKzQ3LDExIEBACiBvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IGNtNHh4eC5vCiAKICMgQ2xvY2sgZnJhbWV3b3JrCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsb2NrMjR4eC5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IGNsb2NrMzR4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsb2NrMnh4eC5vIGNsb2NrMnh4eF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyNDIwKQkJKz0gb3BwMjQyMF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gY2xvY2szNHh4Lm8gY2xvY2szNHh4X2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBvcHAyNDMwX2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBjbG9jazQ0eHgubyBjbG9jazQ0eHhfZGF0YS5vCiAKICMgRU1VIHBlcmlwaGVyYWxzCiBvYmotJChDT05GSUdfT01BUDNfRU1VKQkJKz0gZW11Lm8KQEAgLTU1LDYgKzY0LDkgQEAKIAogb2JqLSQoQ09ORklHX09NQVBfSU9NTVUpCQkrPSAkKGlvbW11LXkpCiAKK2kyYy1vbWFwLSQoQ09ORklHX0kyQ19PTUFQKQkJOj0gaTJjLm8KK29iai15CQkJCQkrPSAkKGkyYy1vbWFwLW0pICQoaTJjLW9tYXAteSkKKwogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCkBAIC05Myw3ICsxMDUsOCBAQAogCQkJCQkgICBtbWMtdHdsNDAzMC5vCiBvYmotJChDT05GSUdfTUFDSF9JR0VQMDAyMCkJCSs9IGJvYXJkLWlnZXAwMDIwLm8gXAogCQkJCQkgICBtbWMtdHdsNDAzMC5vCi0KK29iai0kKENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSykJKz0gYm9hcmQtb21hcDN0b3VjaGJvb2subyBcCisJCQkJCSAgIG1tYy10d2w0MDMwLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfNDQzMFNEUCkJCSs9IGJvYXJkLTQ0MzBzZHAubwogCiBvYmotJChDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSkgICAgICs9IGJvYXJkLWFtMzUxN2V2bS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGRiOTM3NGIuLmU1MDg5MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCA1YmRhOWZkLi5jOTBiMGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tY3NwaS5oPgotI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KQEAgLTQyLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMtc21jOTF4Lmg+CiAKKyNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1xaW1vbmRhLWh5YjE4bTUxMjE2MGFmLTYuaCIKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC02MjUsNyArNjI1LDkgQEAKIAogc3RhdGljIHZvaWQgZW5hYmxlX2JvYXJkX3dha2V1cF9zb3VyY2Uodm9pZCkKIHsKLQlvbWFwX2NmZ19yZWcoQUYyNl8zNFhYX1NZU19OSVJRKTsgLyogVDIgaW50ZXJydXB0IGxpbmUgKGtleXBhZCkgKi8KKwkvKiBUMiBpbnRlcnJ1cHQgbGluZSAoa2V5cGFkKSAqLworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfbmlycSIsCisJCU9NQVBfV0FLRVVQX0VOIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBlaGNpX2hjZF9vbWFwX3BsYXRmb3JtX2RhdGEgZWhjaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTY0MCw4ICs2NDIsMTcgQEAKIAkucmVzZXRfZ3Bpb19wb3J0WzJdICA9IC1FSU5WQUwKIH07CiAKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX211eAlOVUxMCisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9pbml0KHZvaWQpCiB7CisJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlvbWFwMzQzMF9pMmNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDM0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHAzNDMwX2RldmljZXMpKTsKIAlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKaW5kZXggMzQ4YjcwYi4uNzM5MDU5NiAxMDA3NTUKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvYm9hcmQtem9vbS5oPgogCisjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAic2RyYW0taHluaXgtaDhtYngwMHUwbWVyLTBlbS5oIgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQpAQCAtNDgsNyArNDksOSBAQAogCiBzdGF0aWMgdm9pZCBlbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSh2b2lkKQogewotCW9tYXBfY2ZnX3JlZyhBRjI2XzM0WFhfU1lTX05JUlEpOyAvKiBUMiBpbnRlcnJ1cHQgbGluZSAoa2V5cGFkKSAqLworCS8qIFQyIGludGVycnVwdCBsaW5lIChrZXlwYWQpICovCisJb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uaXJxIiwKKwkJT01BUF9XQUtFVVBfRU4gfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogfQogCiBzdGF0aWMgc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSBlaGNpX3BkYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtODIsOCArODUsMTcgQEAKIAlvbWFwX2dwaW9faW5pdCgpOwogfQogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3NkcF9pbml0KHZvaWQpCiB7CisJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JQKTsKIAl6b29tX3BlcmlwaGVyYWxzX2luaXQoKTsKIAlib2FyZF9zbWM5MXhfaW5pdCgpOwogCWVuYWJsZV9ib2FyZF93YWtldXBfc291cmNlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwppbmRleCA0MTVhMTNkLi5iNGU2ZWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKKyNpbmNsdWRlICJtdXguaCIKKwogLyoKICAqIEJvYXJkIGluaXRpYWxpemF0aW9uCiAgKi8KQEAgLTYwLDggKzYyLDE3IEBACiAJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMCiB9OwogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX2luaXQodm9pZCkKIHsKKwlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtMzUxN19ldm1fZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGFtMzUxN19ldm1fZGV2aWNlcykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IDhhMmNlNzcuLmZiYmQ2OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xMjAsNiArMTIxLDEyIEBACiAJYXBvbGxvbl9mbGFzaF9yZXNvdXJjZVswXS5lbmQgICA9IGJhc2UgKyBTWl8xMjhLIC0gMTsKIH0KIAorc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgYXBwb2xvbl9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKKwkubGVkYQk9IFJQQ19MRURfMTAwXzEwLAorCS5sZWRiCT0gUlBDX0xFRF9UWF9SWCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXBvbGxvbl9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCkBAIC0xMzQsNiArMTQxLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFwb2xsb25fc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYXBwb2xvbl9zbWM5MXhfaW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhcG9sbG9uX3NtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IGFwb2xsb25fc21jOTF4X3Jlc291cmNlcywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCAyMmM0NTI5Li4yNjI2YTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzgsMTMgKzM4LDEzIEBACiAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC00ODIsOCArNDgyLDEwMiBAQAogCW9tYXAyX21hcF9jb21tb25faW8oKTsKIH0KIAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCS8qIG5DUyBhbmQgSVJRIGZvciBDTS1UMzUgZXRoZXJuZXQgKi8KKwlPTUFQM19NVVgoR1BNQ19OQ1M1LCBPTUFQX01VWF9NT0RFMCksCisJT01BUDNfTVVYKFVBUlQzX0NUU19SQ1RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisKKwkvKiBuQ1MgYW5kIElSUSBmb3IgU0ItVDM1IGV0aGVybmV0ICovCisJT01BUDNfTVVYKEdQTUNfTkNTNCwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChHUE1DX1dBSVQzLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisKKwkvKiBQRU5ET1dOIEdQSU8gKi8KKwlPTUFQM19NVVgoR1BNQ19OQ1M2LCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKworCS8qIG1VU0IgKi8KKwlPTUFQM19NVVgoSFNVU0IwX0NMSywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKEhTVVNCMF9TVFAsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoSFNVU0IwX0RJUiwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKEhTVVNCMF9OWFQsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTAsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTEsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTIsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTQsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTUsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTYsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChIU1VTQjBfREFUQTcsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCisJLyogTU1DIDIgKi8KKwlPTUFQM19NVVgoU0RNTUMyX0RBVDQsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDUsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDYsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDcsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fSU5QVVQpLAorCisJLyogTWNTUEkgMSAqLworCU9NQVAzX01VWChNQ1NQSTFfQ0xLLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUKSwKKwlPTUFQM19NVVgoTUNTUEkxX1NJTU8sIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVQpLAorCU9NQVAzX01VWChNQ1NQSTFfU09NSSwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKE1DU1BJMV9DUzAsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pLAorCisJLyogTWNTUEkgNCAqLworCU9NQVAzX01VWChNQ0JTUDFfQ0xLUiwgT01BUF9NVVhfTU9ERTEgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKE1DQlNQMV9EWCwgT01BUF9NVVhfTU9ERTEgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKE1DQlNQMV9EUiwgT01BUF9NVVhfTU9ERTEgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKE1DQlNQMV9GU1gsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKworCS8qIE1jQlNQIDIgKi8KKwlPTUFQM19NVVgoTUNCU1AyX0ZTWCwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKE1DQlNQMl9DTEtYLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUKSwKKwlPTUFQM19NVVgoTUNCU1AyX0RSLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUKSwKKwlPTUFQM19NVVgoTUNCU1AyX0RYLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisKKwkvKiBzZXJpYWwgcG9ydHMgKi8KKwlPTUFQM19NVVgoTUNCU1AzX0NMS1gsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoTUNCU1AzX0ZTWCwgT01BUF9NVVhfTU9ERTEgfCBPTUFQX1BJTl9JTlBVVCksCisJT01BUDNfTVVYKFVBUlQxX1RYLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKFVBUlQxX1JYLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUKSwKKworCS8qIERTUyAqLworCU9NQVAzX01VWChEU1NfUENMSywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfSFNZTkMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX1ZTWU5DLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19BQ0JJQVMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEEwLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBMSwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTIsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEEzLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBNCwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTUsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEE2LCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBNywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTgsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEE5LCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBMTAsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEExMSwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTEyLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBMTMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEExNCwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTE1LCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBMTYsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEExNywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTE4LCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBMTksIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEEyMCwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChEU1NfREFUQTIxLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCisJT01BUDNfTVVYKERTU19EQVRBMjIsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoRFNTX0RBVEEyMywgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1BJTl9PVVRQVVQpLAorCisJLyogVFBTIElSUSAqLworCU9NQVAzX01VWChTWVNfTklSUSwgT01BUF9NVVhfTU9ERTAgfCBPTUFQX1dBS0VVUF9FTiB8IFwKKwkJICBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdCh2b2lkKQogeworCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NVUyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCWNtX3QzNV9pbml0X2kyYygpOwogCWNtX3QzNV9pbml0X25hbmQoKTsKQEAgLTQ5Miw4ICs1ODYsNiBAQAogCWNtX3QzNV9pbml0X2xlZCgpOwogCiAJdXNiX211c2JfaW5pdCgpOwotCi0Jb21hcF9jZmdfcmVnKEFGMjZfMzRYWF9TWVNfTklSUSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQ01fVDM1LCAiQ29tcHVsYWIgQ00tVDM1IikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwppbmRleCBmYTYyZTgwLi4xMTdiOGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogCisjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAogI2RlZmluZSBJR0VQMl9TTVNDOTExWF9DUyAgICAgICA1CkBAIC0yMDMsOCArMjAzLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX211eAlOVUxMCisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2luaXQodm9pZCkKIHsKKwlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwogCWlnZXAyX2kyY19pbml0KCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCmluZGV4IGMwNjIyMzguLjk5NWQ0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAorI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKICNkZWZpbmUgTERQX1NNU0M5MTFYX0NTCQkxCkBAIC0zNzQsOCArMzc1LDE3IEBACiAJJmxkcF9ncGlvX2tleXNfZGV2aWNlLAogfTsKIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdCh2b2lkKQogeworCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJb21hcF9pMmNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGxkcF9kZXZpY2VzLCBBUlJBWV9TSVpFKGxkcF9kZXZpY2VzKSk7CiAJdHNfZ3BpbyA9IDU0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IDQxNDgwYmQuLjIzMWNiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogCiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDEsMTAgKzQxLDEwIEBACiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC90aW1lci1ncC5oPgogCisjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAogI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKIAlpZiAoc3lzdGVtX3JldiA+PSAweDIwICYmIHN5c3RlbV9yZXYgPD0gMHgzNDMwMTAwMCkgewotCQlvbWFwX2NmZ19yZWcoQUc5XzM0WFhfR1BJTzIzKTsKKwkJb21hcF9tdXhfaW5pdF9ncGlvKDIzLCBPTUFQX1BJTl9JTlBVVCk7CiAJCW1tY1swXS5ncGlvX3dwID0gMjM7CiAJfSBlbHNlIHsKLQkJb21hcF9jZmdfcmVnKEFIOF8zNFhYX0dQSU8yOSk7CisJCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOwogCX0KIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwpAQCAtNDIyLDE0ICs0MjIsMjMgQEAKIAkucmVzZXRfZ3Bpb19wb3J0WzJdICA9IC1FSU5WQUwKIH07CiAKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX211eAlOVUxMCisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9pbml0KHZvaWQpCiB7CisJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlvbWFwM19iZWFnbGVfaTJjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvbWFwM19iZWFnbGVfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAKLQlvbWFwX2NmZ19yZWcoSjI1XzM0WFhfR1BJTzE3MCk7CisJb21hcF9tdXhfaW5pdF9ncGlvKDE3MCwgT01BUF9QSU5fSU5QVVQpOwogCWdwaW9fcmVxdWVzdCgxNzAsICJEVklfblBEIik7CiAJLyogUkVWSVNJVCBsZWF2ZSBEVkkgcG93ZXJlZCBkb3duIHVudGlsIGl0J3MgbmVlZGVkIC4uLiAqLwogCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNzAsIHRydWUpOwpAQCAtNDM5LDggKzQ0OCw4IEBACiAJb21hcDNiZWFnbGVfZmxhc2hfaW5pdCgpOwogCiAJLyogRW5zdXJlIFNEUkMgcGlucyBhcmUgbXV4J2QgZm9yIHNlbGYtcmVmcmVzaCAqLwotCW9tYXBfY2ZnX3JlZyhIMTZfMzRYWF9TRFJDX0NLRTApOwotCW9tYXBfY2ZnX3JlZyhIMTdfMzRYWF9TRFJDX0NLRTEpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTEiLCBPTUFQX1BJTl9PVVRQVVQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IDVlZmMyZTkuLjM0ZGUxNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogCkBAIC0zOCwxMSArMzgsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CiAKKyNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC0yMjMsNyArMjIzLDcgQEAKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCi0Jb21hcF9jZmdfcmVnKEw4XzM0WFhfR1BJTzYzKTsKKwlvbWFwX211eF9pbml0X2dwaW8oNjMsIE9NQVBfUElOX0lOUFVUKTsKIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwogCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKIApAQCAtNDIyLDkgKzQyMiwxOCBAQAogCS5yZXNldF9ncGlvX3BvcnRbMl0gID0gLUVJTlZBTAogfTsKIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfZXZtX2luaXQodm9pZCkKIHsKIAlvbWFwM19ldm1fZ2V0X3JldmlzaW9uKCk7CisJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAogCW9tYXAzX2V2bV9pMmNfaW5pdCgpOwogCkBAIC00NDAsMjQgKzQ0OSwyNCBAQAogI2VuZGlmCiAJaWYgKGdldF9vbWFwM19ldm1fcmV2KCkgPj0gT01BUDNFVk1fQk9BUkRfR0VOXzIpIHsKIAkJLyogZW5hYmxlIEVIQ0kgVkJVUyB1c2luZyBHUElPMjIgKi8KLQkJb21hcF9jZmdfcmVnKEFGOV8zNFhYX0dQSU8yMik7CisJCW9tYXBfbXV4X2luaXRfZ3BpbygyMiwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJZ3Bpb19yZXF1ZXN0KE9NQVAzX0VWTV9FSENJX1ZCVVMsICJlbmFibGUgRUhDSSBWQlVTIik7CiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM19FVk1fRUhDSV9WQlVTLCAwKTsKIAkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfRVZNX0VIQ0lfVkJVUywgMSk7CiAKIAkJLyogU2VsZWN0IEVIQ0kgcG9ydCBvbiBtYWluIGJvYXJkICovCi0JCW9tYXBfY2ZnX3JlZyhVM18zNFhYX0dQSU82MSk7CisJCW9tYXBfbXV4X2luaXRfZ3Bpbyg2MSwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJZ3Bpb19yZXF1ZXN0KE9NQVAzX0VWTV9FSENJX1NFTEVDVCwgInNlbGVjdCBFSENJIHBvcnQiKTsKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVAzX0VWTV9FSENJX1NFTEVDVCwgMCk7CiAJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX0VWTV9FSENJX1NFTEVDVCwgMCk7CiAKIAkJLyogc2V0dXAgRUhDSSBwaHkgcmVzZXQgY29uZmlnICovCi0JCW9tYXBfY2ZnX3JlZyhBSDE0XzM0WFhfR1BJTzIxKTsKKwkJb21hcF9tdXhfaW5pdF9ncGlvKDIxLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCQllaGNpX3BkYXRhLnJlc2V0X2dwaW9fcG9ydFsxXSA9IDIxOwogCiAJfSBlbHNlIHsKIAkJLyogc2V0dXAgRUhDSSBwaHkgcmVzZXQgb24gTURDICovCi0JCW9tYXBfY2ZnX3JlZyhBRjRfMzRYWF9HUElPMTM1X09VVCk7CisJCW9tYXBfbXV4X2luaXRfZ3BpbygxMzUsIE9NQVBfUElOX09VVFBVVCk7CiAJCWVoY2lfcGRhdGEucmVzZXRfZ3Bpb19wb3J0WzFdID0gMTM1OwogCX0KIAl1c2JfbXVzYl9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwppbmRleCAyZGI1YmE1Li5lZjE3Y2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KQEAgLTQwLDggKzQwLDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9tY3NwaS5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KIAorI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKQEAgLTk4LDEwICs5OCwxMCBAQAogCUdQSU9fQlVUVE9OX0xPVygxMDMsCUtFWV9ET1dOLAkiZG93biIpLAogCUdQSU9fQlVUVE9OX0xPVyg5NiwJS0VZX0xFRlQsCSJsZWZ0IiksCiAJR1BJT19CVVRUT05fTE9XKDk4LAlLRVlfUklHSFQsCSJyaWdodCIpLAotCUdQSU9fQlVUVE9OX0xPVygxMTEsCUJUTl9BLAkJImEiKSwKLQlHUElPX0JVVFRPTl9MT1coMTA2LAlCVE5fQiwJCSJiIiksCi0JR1BJT19CVVRUT05fTE9XKDEwOSwJQlROX1gsCQkieCIpLAotCUdQSU9fQlVUVE9OX0xPVygxMDEsCUJUTl9ZLAkJInkiKSwKKwlHUElPX0JVVFRPTl9MT1coMTA5LAlLRVlfS1AxLAkiZ2FtZSAxIiksCisJR1BJT19CVVRUT05fTE9XKDExMSwJS0VZX0tQMiwJImdhbWUgMiIpLAorCUdQSU9fQlVUVE9OX0xPVygxMDYsCUtFWV9LUDMsCSJnYW1lIDMiKSwKKwlHUElPX0JVVFRPTl9MT1coMTAxLAlLRVlfS1A0LAkiZ2FtZSA0IiksCiAJR1BJT19CVVRUT05fTE9XKDEwMiwJQlROX1RMLAkJImwiKSwKIAlHUElPX0JVVFRPTl9MT1coOTcsCUJUTl9UTDIsCSJsMiIpLAogCUdQSU9fQlVUVE9OX0xPVygxMDUsCUJUTl9UUiwJCSJyIiksCkBAIC0zMTUsNyArMzE1LDcgQEAKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgb21hcDNwYW5kb3JhX2kyY19ib2FyZGluZm8sCiAJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9pMmNfYm9hcmRpbmZvKSk7CiAJLyogaTJjMiBwaW5zIGFyZSBub3QgY29ubmVjdGVkICovCi0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDEwMCwgTlVMTCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2OCwyMyArMzY4LDggQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM3BhbmRvcmFfbGNkX2RldmljZSA9IHsKLQkubmFtZQkJPSAicGFuZG9yYV9sY2QiLAotCS5pZAkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG9tYXAzcGFuZG9yYV9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvbWFwM3BhbmRvcmFfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX0xDRCwJCSZvbWFwM3BhbmRvcmFfbGNkX2NvbmZpZyB9LAotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9pbml0X2lycSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gb21hcDNwYW5kb3JhX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfY29uZmlnKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAogCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CkBAIC0zOTIsNyArMzc3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9tYXAzcGFuZG9yYV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmb21hcDNwYW5kb3JhX2xjZF9kZXZpY2UsCiAJJnBhbmRvcmFfbGVkc19ncGlvLAogCSZwYW5kb3JhX2tleXNfZ3BpbywKIH07CkBAIC00MDksOCArMzkzLDE3IEBACiAJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMCiB9OwogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfaW5pdCh2b2lkKQogeworCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJb21hcDNwYW5kb3JhX2kyY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMob21hcDNwYW5kb3JhX2RldmljZXMsCiAJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9kZXZpY2VzKSk7CkBAIC00MjMsOCArNDE2LDggQEAKIAl1c2JfbXVzYl9pbml0KCk7CiAKIAkvKiBFbnN1cmUgU0RSQyBwaW5zIGFyZSBtdXgnZCBmb3Igc2VsZi1yZWZyZXNoICovCi0Jb21hcF9jZmdfcmVnKEgxNl8zNFhYX1NEUkNfQ0tFMCk7Ci0Jb21hcF9jZmdfcmVnKEgxN18zNFhYX1NEUkNfQ0tFMSk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkcmNfY2tlMCIsIE9NQVBfUElOX09VVFBVVCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkcmNfY2tlMSIsIE9NQVBfUElOX09VVFBVVCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzZDIyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwpAQCAtMCwwICsxLDU3MiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbHdheXMgSW5ub3ZhdGluZworICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZWJvYXJkLmMKKyAqCisgKiBJbml0aWFsIGNvZGU6IEdyw6lnb2lyZSBHZW50aWwsIFRpbSBZYW1pbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKworI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisjaW5jbHVkZSA8cGxhdC90aW1lci1ncC5oPgorCisjaW5jbHVkZSAibXV4LmgiCisjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCisjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKKyNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMAorCisjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJU1pfMTI4SworCisjZGVmaW5lIE9NQVAzX0FDX0dQSU8JCTEzNgorI2RlZmluZSBPTUFQM19UU19HUElPCQkxNjIKKyNkZWZpbmUgVEJfQkxfUFdNX1RJTUVSCQk5CisjZGVmaW5lIFRCX0tJTExfUE9XRVJfR1BJTwkxNjgKKwordW5zaWduZWQgbG9uZyB0b3VjaGJvb2tfcmV2aXNpb247CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvbWFwM3RvdWNoYm9va19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTUgKiBOQU5EX0JMT0NLX1NJWkUsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QgRW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjYwMDAwICovCisJCS5zaXplCQk9IDEgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUJCT0gMzIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJGaWxlIFN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIG9tYXAzdG91Y2hib29rX25hbmRfZGF0YSA9IHsKKwkub3B0aW9ucwk9IE5BTkRfQlVTV0lEVEhfMTYsCisJLnBhcnRzCQk9IG9tYXAzdG91Y2hib29rX25hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG9tYXAzdG91Y2hib29rX25hbmRfcGFydGl0aW9ucyksCisJLmRtYV9jaGFubmVsCT0gLTEsCQkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE5BTkQgZHJpdmVyICovCisJLm5hbmRfc2V0dXAJPSBOVUxMLAorCS5kZXZfcmVhZHkJPSBOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM3RvdWNoYm9va19uYW5kX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzdG91Y2hib29rX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm9tYXAzdG91Y2hib29rX25hbmRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmb21hcDN0b3VjaGJvb2tfbmFuZF9yZXNvdXJjZSwKK307CisKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gPSB7CisJeworCQkubW1jCQk9IDEsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb193cAk9IDI5LAorCX0sCisJe30JLyogVGVybWluYXRvciAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDNfdG91Y2hib29rX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAzdG91Y2hib29rX2xjZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcDNfdG91Y2hib29rX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB0b3VjaGJvb2tfdm1tYzFfc3VwcGx5ID0geworCS5zdXBwbHkJCQk9ICJ2bW1jIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB0b3VjaGJvb2tfdnNpbV9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW107CisKK3N0YXRpYyBpbnQgdG91Y2hib29rX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCit7CisJaWYgKHN5c3RlbV9yZXYgPj0gMHgyMCAmJiBzeXN0ZW1fcmV2IDw9IDB4MzQzMDEwMDApIHsKKwkJb21hcF9tdXhfaW5pdF9ncGlvKDIzLCBPTUFQX1BJTl9JTlBVVCk7CisJCW1tY1swXS5ncGlvX3dwID0gMjM7CisJfSBlbHNlIHsKKwkJb21hcF9tdXhfaW5pdF9ncGlvKDI5LCBPTUFQX1BJTl9JTlBVVCk7CisJfQorCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLworCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CisJdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCisJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAqLworCXRvdWNoYm9va192bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKKwl0b3VjaGJvb2tfdnNpbV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKKworCS8qIFJFVklTSVQ6IG5lZWQgZWhjaS1vbWFwIGhvb2tzIGZvciBleHRlcm5hbCBWQlVTCisJICogcG93ZXIgc3dpdGNoIGFuZCBvdmVyY3VycmVudCBkZXRlY3QKKwkgKi8KKworCWdwaW9fcmVxdWVzdChncGlvICsgMSwgIkVIQ0lfbk9DIik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3BpbyArIDEpOworCisJLyogVFdMNDAzMF9HUElPX01BWCArIDAgPT0gbGVkQSwgRUhDSSBuRU5fVVNCX1BXUiAob3V0LCBhY3RpdmUgbG93KSAqLworCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIm5FTl9VU0JfUFdSIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAwKTsKKworCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLworCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgdG91Y2hib29rX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKKwkudXNlX2xlZHMJPSB0cnVlLAorCS5wdWxsdXBzCT0gQklUKDEpLAorCS5wdWxsZG93bnMJPSBCSVQoMikgfCBCSVQoNikgfCBCSVQoNykgfCBCSVQoOCkgfCBCSVQoMTMpCisJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCisJLnNldHVwCQk9IHRvdWNoYm9va190d2xfZ3Bpb19zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB0b3VjaGJvb2tfdmRhY19zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmRhYyIsCisJLmRldgkJPSAmb21hcDNfdG91Y2hib29rX2xjZF9kZXZpY2UuZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHRvdWNoYm9va192ZHZpX3N1cHBseSA9IHsKKwkuc3VwcGx5CQk9ICJ2ZHZpIiwKKwkuZGV2CQk9ICZvbWFwM190b3VjaGJvb2tfbGNkX2RldmljZS5kZXYsCit9OworCisvKiBWTU1DMSBmb3IgTU1DMSBwaW5zIENNRCwgQ0xLLCBEQVQwLi5EQVQzICgyMCBtQSwgcGx1cyBjYXJkID09IG1heCAyMjAgbUEpICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdG91Y2hib29rX3ZtbWMxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmdG91Y2hib29rX3ZtbWMxX3N1cHBseSwKK307CisKKy8qIFZTSU0gZm9yIE1NQzEgcGlucyBEQVQ0Li5EQVQ3ICgyIG1BLCBwbHVzIGNhcmQgPT0gbWF4IDUwIG1BKSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHRvdWNoYm9va192c2ltID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMzAwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmdG91Y2hib29rX3ZzaW1fc3VwcGx5LAorfTsKKworLyogVkRBQyBmb3IgRFNTIGRyaXZpbmcgUy1WaWRlbyAoOCBtQSB1bmxvYWRlZCwgbWF4IDY1IG1BKSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHRvdWNoYm9va192ZGFjID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmdG91Y2hib29rX3ZkYWNfc3VwcGx5LAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHRvdWNoYm9va192cGxsMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVkRWSSIsCisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnRvdWNoYm9va192ZHZpX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSB0b3VjaGJvb2tfdXNiX2RhdGEgPSB7CisJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIHRvdWNoYm9va19hdWRpb19kYXRhID0geworCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfZGF0YSB0b3VjaGJvb2tfY29kZWNfZGF0YSA9IHsKKwkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAorCS5hdWRpbyA9ICZ0b3VjaGJvb2tfYXVkaW9fZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHRvdWNoYm9va190d2xkYXRhID0geworCS5pcnFfYmFzZQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0lSUV9FTkQsCisKKwkvKiBwbGF0Zm9ybV9kYXRhIGZvciBjaGlsZHJlbiBnb2VzIGhlcmUgKi8KKwkudXNiCQk9ICZ0b3VjaGJvb2tfdXNiX2RhdGEsCisJLmdwaW8JCT0gJnRvdWNoYm9va19ncGlvX2RhdGEsCisJLmNvZGVjCQk9ICZ0b3VjaGJvb2tfY29kZWNfZGF0YSwKKwkudm1tYzEJCT0gJnRvdWNoYm9va192bW1jMSwKKwkudnNpbQkJPSAmdG91Y2hib29rX3ZzaW0sCisJLnZkYWMJCT0gJnRvdWNoYm9va192ZGFjLAorCS52cGxsMgkJPSAmdG91Y2hib29rX3ZwbGwyLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHRvdWNoYm9va19pMmNfYm9hcmRpbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHdsNDAzMCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdG91Y2hib29rX3R3bGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSB0b3VjaEJvb2tfaTJjX2JvYXJkaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImJxMjcyMDAiLCAweDU1KSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDNfdG91Y2hib29rX2kyY19pbml0KHZvaWQpCit7CisJLyogU3RhbmRhcmQgVG91Y2hCb29rIGJ1cyAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCB0b3VjaGJvb2tfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUodG91Y2hib29rX2kyY19ib2FyZGluZm8pKTsKKworCS8qIEFkZGl0aW9uYWwgVG91Y2hCb29rIGJ1cyAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCAxMDAsIHRvdWNoQm9va19pMmNfYm9hcmRpbmZvLAorCQkJQVJSQVlfU0laRSh0b3VjaEJvb2tfaTJjX2JvYXJkaW5mbykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19hZHM3ODQ2X2luaXQodm9pZCkKK3sKKwlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVAzX1RTX0dQSU8sICJhZHM3ODQ2X3Blbl9kb3duIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPICVkIGZvciAiCisJCQkJImFkczc4NDYgcGVuIGRvd24gSVJRXG4iLCBPTUFQM19UU19HUElPKTsKKwkJcmV0dXJuOworCX0KKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KE9NQVAzX1RTX0dQSU8pOworCW9tYXBfc2V0X2dwaW9fZGVib3VuY2UoT01BUDNfVFNfR1BJTywgMSk7CisJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKE9NQVAzX1RTX0dQSU8sIDB4YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIGFkczc4NDZfY29uZmlnID0geworCS54X21pbgkJCT0gMTAwLAorCS55X21pbgkJCT0gMjY1LAorCS54X21heAkJCT0gMzk1MCwKKwkueV9tYXgJCQk9IDM3NTAsCisJLnhfcGxhdGVfb2htcwkJPSA0MCwKKwkucHJlc3N1cmVfbWF4CQk9IDI1NSwKKwkuZGVib3VuY2VfbWF4CQk9IDEwLAorCS5kZWJvdW5jZV90b2wJCT0gNSwKKwkuZGVib3VuY2VfcmVwCQk9IDEsCisJLmdwaW9fcGVuZG93bgkJPSBPTUFQM19UU19HUElPLAorCS5rZWVwX3ZyZWZfb24JCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2aWNlX2NvbmZpZyBhZHM3ODQ2X21jc3BpX2NvbmZpZyA9IHsKKwkudHVyYm9fbW9kZQk9IDAsCisJLnNpbmdsZV9jaGFubmVsCT0gMSwJLyogMDogc2xhdmUsIDE6IG1hc3RlciAqLworfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBvbWFwM19hZHM3ODQ2X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwkJPSAiYWRzNzg0NiIsCisJCS5idXNfbnVtCQk9IDQsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkubWF4X3NwZWVkX2h6CQk9IDE1MDAwMDAsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmYWRzNzg0Nl9tY3NwaV9jb25maWcsCisJCS5pcnEJCQk9IE9NQVBfR1BJT19JUlEoT01BUDNfVFNfR1BJTyksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhZHM3ODQ2X2NvbmZpZywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJ0b3VjaGJvb2s6OnVzcjAiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSAxNTAsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAidG91Y2hib29rOjp1c3IxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJtbWMwIiwKKwkJLmdwaW8JCQk9IDE0OSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJ0b3VjaGJvb2s6OnBtdV9zdGF0IiwKKwkJLmdwaW8JCQk9IC1FSU5WQUwsCS8qIGdldHMgcmVwbGFjZWQgKi8KKwkJLmFjdGl2ZV9sb3cJCT0gdHJ1ZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxlZHNfZ3BpbyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fbGVkX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5jb2RlCQkJPSBCVE5fRVhUUkEsCisJCS5ncGlvCQkJPSA3LAorCQkuZGVzYwkJCT0gInVzZXIiLAorCQkud2FrZXVwCQkJPSAxLAorCX0sCisJeworCQkuY29kZQkJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJCT0gMTgzLAorCQkuZGVzYwkJCT0gInBvd2VyIiwKKwkJLndha2V1cAkJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBncGlvX2tleV9pbmZvID0geworCS5idXR0b25zCT0gZ3Bpb19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZ3Bpb19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtleXNfZ3BpbyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fa2V5X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9tYXAzX3RvdWNoYm9va19jb25maWdbXSBfX2luaXRkYXRhID0geworCXsgT01BUF9UQUdfTENELAkJJm9tYXAzX3RvdWNoYm9va19sY2RfY29uZmlnIH0sCit9OworCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOworCW9tYXBfYm9hcmRfY29uZmlnID0gb21hcDNfdG91Y2hib29rX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM190b3VjaGJvb2tfY29uZmlnKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKKwlvbWFwX2luaXRfaXJxKCk7CisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxMik7CisjZW5kaWYKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNfdG91Y2hib29rX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZvbWFwM190b3VjaGJvb2tfbGNkX2RldmljZSwKKwkmbGVkc19ncGlvLAorCSZrZXlzX2dwaW8sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDN0b3VjaGJvb2tfZmxhc2hfaW5pdCh2b2lkKQoreworCXU4IGNzID0gMDsKKwl1OCBuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CisKKwl1MzIgZ3BtY19iYXNlX2FkZCA9IE9NQVAzNFhYX0dQTUNfVklSVDsKKworCS8qIGZpbmQgb3V0IHRoZSBjaGlwLXNlbGVjdCBvbiB3aGljaCBOQU5EIGV4aXN0cyAqLworCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCXUzMiByZXQgPSAwOworCQlyZXQgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCisJCWlmICgocmV0ICYgMHhDMDApID09IDB4ODAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBOQU5EIG9uIENTJWRcbiIsIGNzKTsKKwkJCWlmIChuYW5kY3MgPiBHUE1DX0NTX05VTSkKKwkJCQluYW5kY3MgPSBjczsKKwkJfQorCQljcysrOworCX0KKworCWlmIChuYW5kY3MgPiBHUE1DX0NTX05VTSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKKwkJCQkgImluIEdQTUNcbiAiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChuYW5kY3MgPCBHUE1DX0NTX05VTSkgeworCQlvbWFwM3RvdWNoYm9va19uYW5kX2RhdGEuY3MgPSBuYW5kY3M7CisJCW9tYXAzdG91Y2hib29rX25hbmRfZGF0YS5ncG1jX2NzX2Jhc2VhZGRyID0gKHZvaWQgKikKKwkJCShncG1jX2Jhc2VfYWRkICsgR1BNQ19DUzBfQkFTRSArIG5hbmRjcyAqIEdQTUNfQ1NfU0laRSk7CisJCW9tYXAzdG91Y2hib29rX25hbmRfZGF0YS5ncG1jX2Jhc2VhZGRyID0KKwkJCQkJCSh2b2lkICopIChncG1jX2Jhc2VfYWRkKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBOQU5EIG9uIENTJWRcbiIsIG5hbmRjcyk7CisJCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzdG91Y2hib29rX25hbmRfZGV2aWNlKSA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSBlaGNpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCisJLnBvcnRfbW9kZVswXSA9IEVIQ0lfSENEX09NQVBfTU9ERV9QSFksCisJLnBvcnRfbW9kZVsxXSA9IEVIQ0lfSENEX09NQVBfTU9ERV9QSFksCisJLnBvcnRfbW9kZVsyXSA9IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOLAorCisJLnBoeV9yZXNldCAgPSB0cnVlLAorCS5yZXNldF9ncGlvX3BvcnRbMF0gID0gLUVJTlZBTCwKKwkucmVzZXRfZ3Bpb19wb3J0WzFdICA9IDE0NywKKwkucmVzZXRfZ3Bpb19wb3J0WzJdICA9IC1FSU5WQUwKK307CisKK3N0YXRpYyB2b2lkIG9tYXAzX3RvdWNoYm9va19wb3dlcm9mZih2b2lkKQoreworCWludCByOworCisJciA9IGdwaW9fcmVxdWVzdChUQl9LSUxMX1BPV0VSX0dQSU8sICJEVkkgcmVzZXQiKTsKKwlpZiAociA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IGtpbGwgcG93ZXIgR1BJT1xuIik7CisJCXJldHVybjsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVEJfS0lMTF9QT1dFUl9HUElPLCAwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3RvdWNoYm9va19yZXZpc2lvbihjaGFyICoqcCkKK3sKKwlpZiAoISpwKQorCQlyZXR1cm47CisKKwlzdHJpY3Rfc3RydG91bCgqcCwgMTAsICZ0b3VjaGJvb2tfcmV2aXNpb24pOworfQorX19lYXJseV9wYXJhbSgidGJyPSIsIGVhcmx5X3RvdWNoYm9va19yZXZpc2lvbik7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdCh2b2lkKQoreworCXBtX3Bvd2VyX29mZiA9IG9tYXAzX3RvdWNoYm9va19wb3dlcm9mZjsKKworCW9tYXAzX3RvdWNoYm9va19pMmNfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG9tYXAzX3RvdWNoYm9va19kZXZpY2VzLAorCQkJQVJSQVlfU0laRShvbWFwM190b3VjaGJvb2tfZGV2aWNlcykpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCW9tYXBfbXV4X2luaXRfZ3BpbygxNzAsIE9NQVBfUElOX0lOUFVUKTsKKwlncGlvX3JlcXVlc3QoMTc2LCAiRFZJX25QRCIpOworCS8qIFJFVklTSVQgbGVhdmUgRFZJIHBvd2VyZWQgZG93biB1bnRpbCBpdCdzIG5lZWRlZCAuLi4gKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTc2LCB0cnVlKTsKKworCS8qIFRvdWNoc2NyZWVuIGFuZCBhY2NlbGVyb21ldGVyICovCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ob21hcDNfYWRzNzg0Nl9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKG9tYXAzX2Fkczc4NDZfc3BpX2JvYXJkX2luZm8pKTsKKwlvbWFwM19hZHM3ODQ2X2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCk7CisJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CisJb21hcDN0b3VjaGJvb2tfZmxhc2hfaW5pdCgpOworCisJLyogRW5zdXJlIFNEUkMgcGlucyBhcmUgbXV4J2QgZm9yIHNlbGYtcmVmcmVzaCAqLworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTEiLCBPTUFQX1BJTl9PVVRQVVQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfdG91Y2hib29rX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKKwlvbWFwMl9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoVE9VQ0hCT09LLCAiT01BUDMgdG91Y2hib29rIEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBHcmVnb2lyZSBHZW50aWwgLSBodHRwOi8vd3d3LmFsd2F5c2lubm92YXRpbmcuY29tICovCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwM190b3VjaGJvb2tfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXAzX3RvdWNoYm9va19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcDNfdG91Y2hib29rX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwppbmRleCA1MmRmZDUxLi5kMTkyZGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgpAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKKyNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC00MDUsOSArNDA1LDE3IEBACiAJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMCiB9OwogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19pbml0KHZvaWQpCiB7CisJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlvdmVyb19pMmNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG92ZXJvX2RldmljZXMsIEFSUkFZX1NJWkUob3Zlcm9fZGV2aWNlcykpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKQEAgLTQxOCw4ICs0MjYsOCBAQAogCW92ZXJvX2luaXRfc21zYzkxMXgoKTsKIAogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KLQlvbWFwX2NmZ19yZWcoSDE2XzM0WFhfU0RSQ19DS0UwKTsKLQlvbWFwX2NmZ19yZWcoSDE3XzM0WFhfU0RSQ19DS0UxKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKIAogCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwKIAkJCSAgIk9WRVJPX0dQSU9fVzJXX05SRVNFVCIpID09IDApICYmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IDE1Y2U2NTEuLmFjYWZkYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS93bDEyeHguaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8cGxhdC9vbmVuYW5kLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLXNtYzkxeC5oPgogCisjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAogI2RlZmluZSBTWVNURU1fUkVWX0JfVVNFU19WQVVYMwkweDE2OTkKQEAgLTU5LDcgKzYwLDcgQEAKIAkJLmJ1c19udW0JCT0gNCwKIAkJLmNoaXBfc2VsZWN0CQk9IDAsCiAJCS5tYXhfc3BlZWRfaHogICAJPSA0ODAwMDAwMCwKLQkJLm1vZGUgICAgICAgICAgICAgICAgICAgPSBTUElfTU9ERV8yLAorCQkubW9kZSAgICAgICAgICAgICAgICAgICA9IFNQSV9NT0RFXzMsCiAJCS5jb250cm9sbGVyX2RhdGEJPSAmd2wxMjUxX21jc3BpX2NvbmZpZywKIAkJLnBsYXRmb3JtX2RhdGEJCT0gJndsMTI1MV9wZGF0YSwKIAl9LApAQCAtNDAxLDE1ICs0MDIsOSBAQAogCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfaW5zIHNsZWVwX29uX3NlcVtdIF9faW5pdGRhdGEgPSB7CiAvKgotICogVHVybiBvZmYgVkREMSBhbmQgVkREMi4KKyAqIFR1cm4gb2ZmIGV2ZXJ5dGhpbmcKICAqLwotCXtNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgMHhmLCBSRVNfU1RBVEVfT0ZGKSwgNH0sCi0Je01TR19TSU5HVUxBUihERVZfR1JQX1AxLCAweDEwLCBSRVNfU1RBVEVfT0ZGKSwgMn0sCi0vKgotICogQW5kIGFsc28gdHVybiBvZmYgdGhlIE9NQVAzIFBMTHMgYW5kIHRoZSBzeXNjbGsgb3V0cHV0LgotICovCi0Je01TR19TSU5HVUxBUihERVZfR1JQX1AxLCAweDcsIFJFU19TVEFURV9PRkYpLCAzfSwKLQl7TVNHX1NJTkdVTEFSKERFVl9HUlBfUDEsIDB4MTcsIFJFU19TVEFURV9PRkYpLCAzfSwKKwl7TVNHX0JST0FEQ0FTVChERVZfR1JQX05VTEwsIFJFU19HUlBfQUxMLCAxLCAwLCBSRVNfU1RBVEVfU0xFRVApLCAyfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9zY3JpcHQgc2xlZXBfb25fc2NyaXB0IF9faW5pdGRhdGEgPSB7CkBAIC00MjAsMTQgKzQxNSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9pbnMgd2FrZXVwX3NlcVtdIF9faW5pdGRhdGEgPSB7CiAvKgotICogUmVlbmFibGUgdGhlIE9NQVAzIFBMTHMuCi0gKiBXYWtldXAgVkREMSBhbmQgVkREMi4KLSAqIFJlZW5hYmxlIHN5c2NsayBvdXRwdXQuCisgKiBSZWVuYWJsZSBldmVyeXRoaW5nCiAgKi8KLQl7TVNHX1NJTkdVTEFSKERFVl9HUlBfUDEsIDB4NywgUkVTX1NUQVRFX0FDVElWRSksIDB4MzB9LAotCXtNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgMHhmLCBSRVNfU1RBVEVfQUNUSVZFKSwgMHgzMH0sCi0Je01TR19TSU5HVUxBUihERVZfR1JQX1AxLCAweDEwLCBSRVNfU1RBVEVfQUNUSVZFKSwgMHgzN30sCi0Je01TR19TSU5HVUxBUihERVZfR1JQX1AxLCAweDE5LCBSRVNfU1RBVEVfQUNUSVZFKSwgM30sCisJe01TR19CUk9BRENBU1QoREVWX0dSUF9OVUxMLCBSRVNfR1JQX0FMTCwgMSwgMCwgUkVTX1NUQVRFX0FDVElWRSksIDJ9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3NjcmlwdCB3YWtldXBfc2NyaXB0IF9faW5pdGRhdGEgPSB7CkBAIC00MzgsMTAgKzQyOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9pbnMgd2FrZXVwX3AzX3NlcVtdIF9faW5pdGRhdGEgPSB7CiAvKgotICogV2FrZXVwIFZERDEgKGR1bW15IHRvIGJlIGFibGUgdG8gaW5zZXJ0IGEgZGVsYXkpCi0gKiBFbmFibGUgQ0xLRU4KKyAqIFJlZW5hYmxlIGV2ZXJ5dGhpbmcKICAqLwotCXtNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgMHgxNywgUkVTX1NUQVRFX0FDVElWRSksIDN9LAorCXtNU0dfQlJPQURDQVNUKERFVl9HUlBfTlVMTCwgUkVTX0dSUF9BTEwsIDEsIDAsIFJFU19TVEFURV9BQ1RJVkUpLCAyfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9zY3JpcHQgd2FrZXVwX3AzX3NjcmlwdCBfX2luaXRkYXRhID0gewpAQCAtNDYyLDEyICs0NTEsMTEgQEAKIAl7TVNHX1NJTkdVTEFSKERFVl9HUlBfTlVMTCwgUkVTX1JFU0VULCBSRVNfU1RBVEVfT0ZGKSwgMn0sCiAJe01TR19CUk9BRENBU1QoREVWX0dSUF9OVUxMLCBSRVNfR1JQX0FMTCwgMCwgMSwgUkVTX1NUQVRFX0FDVElWRSksCiAJCTB4MTN9LAotCXtNU0dfQlJPQURDQVNUKERFVl9HUlBfTlVMTCwgUkVTX0dSUF9QUCwgMCwgMiwgUkVTX1NUQVRFX1dSU1QpLCAweDEzfSwKIAl7TVNHX0JST0FEQ0FTVChERVZfR1JQX05VTEwsIFJFU19HUlBfUFAsIDAsIDMsIFJFU19TVEFURV9PRkYpLCAweDEzfSwKIAl7TVNHX1NJTkdVTEFSKERFVl9HUlBfTlVMTCwgUkVTX1ZERDEsIFJFU19TVEFURV9XUlNUKSwgMHgxM30sCiAJe01TR19TSU5HVUxBUihERVZfR1JQX05VTEwsIFJFU19WREQyLCBSRVNfU1RBVEVfV1JTVCksIDB4MTN9LAogCXtNU0dfU0lOR1VMQVIoREVWX0dSUF9OVUxMLCBSRVNfVlBMTDEsIFJFU19TVEFURV9XUlNUKSwgMHgzNX0sCi0Je01TR19TSU5HVUxBUihERVZfR1JQX1AxLCBSRVNfSEZDTEtPVVQsIFJFU19TVEFURV9BQ1RJVkUpLCAyfSwKKwl7TVNHX1NJTkdVTEFSKERFVl9HUlBfUDMsIFJFU19IRkNMS09VVCwgUkVTX1NUQVRFX0FDVElWRSksIDJ9LAogCXtNU0dfU0lOR1VMQVIoREVWX0dSUF9OVUxMLCBSRVNfUkVTRVQsIFJFU19TVEFURV9BQ1RJVkUpLCAyfSwKIH07CiAKQEAgLTQ4OSwyMiArNDc3LDgxIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfcmVzY29uZmlnIHR3bDQwMzBfcmNvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyAucmVzb3VyY2UgPSBSRVNfVklOVEFOQTEsIC5kZXZncm91cCA9IC0xLCAudHlwZSA9IC0xLCAudHlwZTIgPSAxIH0sCi0JeyAucmVzb3VyY2UgPSBSRVNfVklOVEFOQTIsIC5kZXZncm91cCA9IC0xLCAudHlwZSA9IC0xLCAudHlwZTIgPSAxIH0sCi0JeyAucmVzb3VyY2UgPSBSRVNfVklOVERJRywgLmRldmdyb3VwID0gLTEsIC50eXBlID0gLTEsIC50eXBlMiA9IDEgfSwKLQl7IC5yZXNvdXJjZSA9IFJFU19WTU1DMSwgLmRldmdyb3VwID0gLTEsIC50eXBlID0gLTEsIC50eXBlMiA9IDN9LAotCXsgLnJlc291cmNlID0gUkVTX1ZNTUMyLCAuZGV2Z3JvdXAgPSBERVZfR1JQX05VTEwsIC50eXBlID0gLTEsCi0JICAudHlwZTIgPSAzfSwKLQl7IC5yZXNvdXJjZSA9IFJFU19WQVVYMSwgLmRldmdyb3VwID0gLTEsIC50eXBlID0gLTEsIC50eXBlMiA9IDN9LAotCXsgLnJlc291cmNlID0gUkVTX1ZBVVgyLCAuZGV2Z3JvdXAgPSAtMSwgLnR5cGUgPSAtMSwgLnR5cGUyID0gM30sCi0JeyAucmVzb3VyY2UgPSBSRVNfVkFVWDMsIC5kZXZncm91cCA9IC0xLCAudHlwZSA9IC0xLCAudHlwZTIgPSAzfSwKLQl7IC5yZXNvdXJjZSA9IFJFU19WQVVYNCwgLmRldmdyb3VwID0gLTEsIC50eXBlID0gLTEsIC50eXBlMiA9IDN9LAotCXsgLnJlc291cmNlID0gUkVTX1ZQTEwyLCAuZGV2Z3JvdXAgPSAtMSwgLnR5cGUgPSAtMSwgLnR5cGUyID0gM30sCi0JeyAucmVzb3VyY2UgPSBSRVNfVkRBQywgLmRldmdyb3VwID0gLTEsIC50eXBlID0gLTEsIC50eXBlMiA9IDN9LAotCXsgLnJlc291cmNlID0gUkVTX1ZTSU0sIC5kZXZncm91cCA9IERFVl9HUlBfTlVMTCwgLnR5cGUgPSAtMSwKLQkgIC50eXBlMiA9IDN9LAotCXsgLnJlc291cmNlID0gUkVTX0NMS0VOLCAuZGV2Z3JvdXAgPSBERVZfR1JQX1AzLCAudHlwZSA9IC0xLAotCQkudHlwZTIgPSAxIH0sCisJeyAucmVzb3VyY2UgPSBSRVNfVkREMSwgLmRldmdyb3VwID0gLTEsCisJICAudHlwZSA9IDEsIC50eXBlMiA9IC0xLCAucmVtYXBfb2ZmID0gUkVTX1NUQVRFX09GRiwKKwkgIC5yZW1hcF9zbGVlcCA9IFJFU19TVEFURV9PRkYKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZERDIsIC5kZXZncm91cCA9IC0xLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IFJFU19TVEFURV9PRkYsCisJICAucmVtYXBfc2xlZXAgPSBSRVNfU1RBVEVfT0ZGCisJfSwKKwl7IC5yZXNvdXJjZSA9IFJFU19WUExMMSwgLmRldmdyb3VwID0gLTEsCisJICAudHlwZSA9IDEsIC50eXBlMiA9IC0xLCAucmVtYXBfb2ZmID0gUkVTX1NUQVRFX09GRiwKKwkgIC5yZW1hcF9zbGVlcCA9IFJFU19TVEFURV9PRkYKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZQTEwyLCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZBVVgxLCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZBVVgyLCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZBVVgzLCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZBVVg0LCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZNTUMxLCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZNTUMyLCAuZGV2Z3JvdXAgPSAtMSwKKwkgIC50eXBlID0gLTEsIC50eXBlMiA9IDMsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1ZEQUMsIC5kZXZncm91cCA9IC0xLAorCSAgLnR5cGUgPSAtMSwgLnR5cGUyID0gMywgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfVlNJTSwgLmRldmdyb3VwID0gLTEsCisJICAudHlwZSA9IC0xLCAudHlwZTIgPSAzLCAucmVtYXBfb2ZmID0gLTEsIC5yZW1hcF9zbGVlcCA9IC0xCisJfSwKKwl7IC5yZXNvdXJjZSA9IFJFU19WSU5UQU5BMSwgLmRldmdyb3VwID0gREVWX0dSUF9QMSB8IERFVl9HUlBfUDMsCisJICAudHlwZSA9IC0xLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfVklOVEFOQTIsIC5kZXZncm91cCA9IERFVl9HUlBfUDEgfCBERVZfR1JQX1AzLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfVklOVERJRywgLmRldmdyb3VwID0gREVWX0dSUF9QMSB8IERFVl9HUlBfUDMsCisJICAudHlwZSA9IC0xLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfVklPLCAuZGV2Z3JvdXAgPSBERVZfR1JQX1AzLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfQ0xLRU4sIC5kZXZncm91cCA9IERFVl9HUlBfUDEgfCBERVZfR1JQX1AzLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSAsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX1JFR0VOLCAuZGV2Z3JvdXAgPSBERVZfR1JQX1AxIHwgREVWX0dSUF9QMywKKwkgIC50eXBlID0gMSwgLnR5cGUyID0gLTEsIC5yZW1hcF9vZmYgPSAtMSwgLnJlbWFwX3NsZWVwID0gLTEKKwl9LAorCXsgLnJlc291cmNlID0gUkVTX05SRVNfUFdST04sIC5kZXZncm91cCA9IERFVl9HUlBfUDEgfCBERVZfR1JQX1AzLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfU1lTRU4sIC5kZXZncm91cCA9IERFVl9HUlBfUDEgfCBERVZfR1JQX1AzLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfSEZDTEtPVVQsIC5kZXZncm91cCA9IERFVl9HUlBfUDMsCisJICAudHlwZSA9IDEsIC50eXBlMiA9IC0xLCAucmVtYXBfb2ZmID0gLTEsIC5yZW1hcF9zbGVlcCA9IC0xCisJfSwKKwl7IC5yZXNvdXJjZSA9IFJFU18zMktDTEtPVVQsIC5kZXZncm91cCA9IC0xLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfUkVTRVQsIC5kZXZncm91cCA9IC0xLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCisJeyAucmVzb3VyY2UgPSBSRVNfTWFpbl9SZWYsIC5kZXZncm91cCA9IC0xLAorCSAgLnR5cGUgPSAxLCAudHlwZTIgPSAtMSwgLnJlbWFwX29mZiA9IC0xLCAucmVtYXBfc2xlZXAgPSAtMQorCX0sCiAJeyAwLCAwfSwKIH07CiAKQEAgLTYzMCw5ICs2NzcsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYm9hcmRfc21jOTF4X2luaXQodm9pZCkKIHsKLQlvbWFwX2NmZ19yZWcoVThfMzRYWF9HUElPNTRfRE9XTik7Ci0Jb21hcF9jZmdfcmVnKEcyNV8zNFhYX0dQSU84Nl9PVVQpOwotCW9tYXBfY2ZnX3JlZyhIMTlfMzRYWF9HUElPMTY0X09VVCk7CisJb21hcF9tdXhfaW5pdF9ncGlvKDU0LCBPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJb21hcF9tdXhfaW5pdF9ncGlvKDg2LCBPTUFQX1BJTl9PVVRQVVQpOworCW9tYXBfbXV4X2luaXRfZ3BpbygxNjQsIE9NQVBfUElOX09VVFBVVCk7CiAKIAlncG1jX3NtYzkxeF9pbml0KCZib2FyZF9zbWM5MXhfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IDFiYjFkZTIuLjY3YmIzNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0yMywxMyArMjMsMTQgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAorI2luY2x1ZGUgIm11eC5oIgorCiBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqcng1MV9nZXRfc2RyYW1fdGltaW5ncyh2b2lkKTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcng1MV9sY2RfY29uZmlnID0gewpAQCAtNjksMTUgKzcwLDI0IEBACiAKIGV4dGVybiB2b2lkIF9faW5pdCByeDUxX3BlcmlwaGVyYWxzX2luaXQodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX211eAlOVUxMCisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfaW5pdCh2b2lkKQogeworCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoKTsKIAlyeDUxX3BlcmlwaGVyYWxzX2luaXQoKTsKIAogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KLQlvbWFwX2NmZ19yZWcoSDE2XzM0WFhfU0RSQ19DS0UwKTsKLQlvbWFwX2NmZ19yZWcoSDE3XzM0WFhfU0RSQ19DS0UxKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jCmluZGV4IGYxNGJhYTMuLjhkZDI3N2MgMTAwNzU1Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMTUyLDE0ICsxNTIsMjAgQEAKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKIAl7CisJCS5uYW1lCQk9ICJleHRlcm5hbCIsCiAJCS5tbWMJCT0gMSwKIAkJLndpcmVzCQk9IDQsCiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwkJLnBvd2VyX3NhdmluZwk9IHRydWUsCiAJfSwKIAl7CisJCS5uYW1lCQk9ICJpbnRlcm5hbCIsCiAJCS5tbWMJCT0gMiwKLQkJLndpcmVzCQk9IDQsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwkJLm5vbnJlbW92YWJsZQk9IHRydWUsCisJCS5wb3dlcl9zYXZpbmcJPSB0cnVlLAogCX0sCiAJe30gICAgICAvKiBUZXJtaW5hdG9yICovCiB9OwpAQCAtMTY3LDExICsxNzMsOCBAQAogc3RhdGljIGludCB6b29tX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7Ci0JLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpLAotCSAqIGdwaW8gKyAxIGlzICJtbWMxX2NkIiAoaW5wdXQvSVJRKQotCSAqLworCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7Ci0JbW1jWzFdLmdwaW9fY2QgPSBncGlvICsgMTsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzIC4uLiB3ZSAia25vdyIgdGhlCkBAIC0yMzYsNiArMjM5LDcgQEAKIAkuZ3BpbwkJPSAmem9vbV9ncGlvX2RhdGEsCiAJLmtleXBhZAkJPSAmem9vbV9rcF90d2w0MDMwX2RhdGEsCiAJLmNvZGVjCQk9ICZ6b29tX2NvZGVjX2RhdGEsCisJLnZtbWMxICAgICAgICAgID0gJnpvb21fdm1tYzEsCiAJLnZtbWMyICAgICAgICAgID0gJnpvb21fdm1tYzIsCiAJLnZzaW0gICAgICAgICAgID0gJnpvb21fdnNpbSwKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCmluZGV4IGQ5NGQwNDcuLmJiODdjZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvYm9hcmQtem9vbS5oPgogCisjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3pvb20yX2luaXRfaXJxKHZvaWQpCkBAIC02OCw4ICs2OSwxNyBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF96b29tMl9pbml0KHZvaWQpCiB7CisJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAl6b29tX3BlcmlwaGVyYWxzX2luaXQoKTsKIAl6b29tX2RlYnVnYm9hcmRfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jCmluZGV4IDhkOTY1YTYuLmE5ZmU5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KIAorI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgInNkcmFtLWh5bml4LWg4bWJ4MDB1MG1lci0wZW0uaCIKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbV9tYXBfaW8odm9pZCkKQEAgLTQyLDggKzQzLDE3IEBACiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF96b29tX2luaXQodm9pZCkKIHsKKwlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQlApOwogCXpvb21fcGVyaXBoZXJhbHNfaW5pdCgpOwogCXpvb21fZGVidWdib2FyZF9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggNDcxNjIwNi4uNzU5YzcyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtNzAsOSArNzAsNDEgQEAKIHU4IGNwdV9tYXNrOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE9NQVAyLzMgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCisgKiBPTUFQMi8zLzQgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCit2b2lkIG9tYXAyX2luaXRfZHBsbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2OworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gYnlwYXNzIHJhdGUgaWYgRFBMTCBpcyBieXBhc3NlZCAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOworCXYgJj0gZGQtPmVuYWJsZV9tYXNrOworCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisKKwkvKiBSZXBhcmVudCBpbiBjYXNlIHRoZSBkcGxsIGlzIGluIGJ5cGFzcyAqLworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQljbGtfcmVwYXJlbnQoY2xrLCBkZC0+Y2xrX2J5cGFzcyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQljbGtfcmVwYXJlbnQoY2xrLCBkZC0+Y2xrX2J5cGFzcyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQNFhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9NTkJZUEFTUykKKwkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKKwl9CisJcmV0dXJuOworfQorCiAvKioKICAqIF9vbWFwMnh4eF9jbGtfY29tbWl0IC0gY29tbWl0IGNsb2NrIHBhcmVudC9yYXRlIGNoYW5nZXMgaW4gaGFyZHdhcmUKICAqIEBjbGs6IHN0cnVjdCBjbGsgKgpAQCAtMTQ5LDYgKzE4MSw3IEBACiAgKiBjbG9ja2RvbWFpbiBwb2ludGVyLCBhbmQgc2F2ZSBpdCBpbnRvIHRoZSBzdHJ1Y3QgY2xrLiAgSW50ZW5kZWQgdG8gYmUKICAqIGNhbGxlZCBkdXJpbmcgY2xrX3JlZ2lzdGVyKCkuICBObyByZXR1cm4gdmFsdWUuCiAgKi8KKyNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgY2xrZG0gZi93IGlzIGluIHBsYWNlICovCiB2b2lkIG9tYXAyX2luaXRfY2xrX2Nsa2RtKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtOwpAQCAtMTY2LDYgKzE5OSw3IEBACiAJCQkgImNsa2RtICVzXG4iLCBjbGstPm5hbWUsIGNsay0+Y2xrZG1fbmFtZSk7CiAJfQogfQorI2VuZGlmCiAKIC8qKgogICogb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50IC0gc2V0IGEgY2xrc2VsIGNsaydzIHBhcmVudCBmaWVsZCBmcm9tIHRoZSBoYXJkd2FyZQpAQCAtMjQ3LDYgKzI4MSwxMSBAQAogCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8CiAJCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCiAJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQNFhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9NTkJZUEFTUykKKwkJCXJldHVybiBkZC0+Y2xrX2J5cGFzcy0+cmF0ZTsKIAl9CiAKIAl2ID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwpAQCAtNDM3LDggKzQ3NiwxMCBAQAogCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKIAkJaWYgKGNsay0+cGFyZW50KQogCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNCAvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBjbGtkbSBmL3cgaXMgaW4gcGxhY2UgKi8KIAkJaWYgKGNsay0+Y2xrZG0pCiAJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworI2VuZGlmCiAKIAl9CiB9CkBAIC00NDgsOCArNDg5LDEwIEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKKyNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgY2xrZG0gZi93IGlzIGluIHBsYWNlICovCiAJCWlmIChjbGstPmNsa2RtKQogCQkJb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOworI2VuZGlmCiAKIAkJaWYgKGNsay0+cGFyZW50KSB7CiAJCQlyZXQgPSBvbWFwMl9jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKQEAgLTQ2OCw4ICs1MTEsMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBlcnI6CisjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGNsa2RtIGYvdyBpcyBpbiBwbGFjZSAqLwogCWlmIChjbGstPmNsa2RtKQogCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworI2VuZGlmCiAJY2xrLT51c2Vjb3VudC0tOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggNDNiNmJlZC4uOTNjNDhkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogIENvbnRhY3RzOgogICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KQEAgLTM2LDYgKzM2LDE3IEBACiAjZGVmaW5lIE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MJCTB4NgogI2RlZmluZSBPTUFQM1hYWF9FTl9EUExMX0xPQ0tFRAkJCTB4NwogCisvKiBPTUFQNHh4eCBDTV9DTEtNT0RFX0RQTEwqLkVOXypfRFBMTCBiaXRzIC0gZm9yIG9tYXAyX2dldF9kcGxsX3JhdGUoKSAqLworI2RlZmluZSBPTUFQNFhYWF9FTl9EUExMX01OQllQQVNTCQkweDQKKyNkZWZpbmUgT01BUDRYWFhfRU5fRFBMTF9MUEJZUEFTUwkJMHg1CisjZGVmaW5lIE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MJCTB4NgorI2RlZmluZSBPTUFQNFhYWF9FTl9EUExMX0xPQ0tFRAkJCTB4NworCisvKiBDTV9DTEtFTl9QTEwqLkVOKiBiaXQgdmFsdWVzIC0gbm90IGFsbCBhcmUgYXZhaWxhYmxlIGZvciBldmVyeSBEUExMICovCisjZGVmaW5lIERQTExfTE9XX1BPV0VSX1NUT1AJMHgxCisjZGVmaW5lIERQTExfTE9XX1BPV0VSX0JZUEFTUwkweDUKKyNkZWZpbmUgRFBMTF9MT0NLRUQJCTB4NworCiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7CiBpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBvbWFwMl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOwpAQCAtNDQsNiArNTUsMTQgQEAKIGludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpOwogaW50IG9tYXAyX2RwbGxfc2V0X3JhdGVfdG9sZXJhbmNlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IHRvbGVyYW5jZSk7CiBsb25nIG9tYXAyX2RwbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpOwordW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwordW5zaWduZWQgbG9uZyBvbWFwM19jbGtvdXR4Ml9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7Cit1MzIgb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2ludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CiAKICNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsayk7CkBAIC02Myw2ICs4Miw3IEBACiBsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CiBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIG9tYXAyX2luaXRfZHBsbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKIGludCBvbWFwMl93YWl0X2Nsb2NrX3JlYWR5KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgY3ZhbCwgY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCk7CiBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CkBAIC03MiwyOSArOTIsMTcgQEAKIHZvaWQgb21hcDJfY2xrX2RmbHRfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLCB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAogCQkJCXU4ICppZGxlc3RfYml0KTsKIAorZXh0ZXJuIHU4IGNwdV9tYXNrOworCiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdF93YWl0OwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2RmbHQ7CiAKLWV4dGVybiB1OCBjcHVfbWFzazsKK2V4dGVybiBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zOworZXh0ZXJuIHN0cnVjdCBjbGsgKnZjbGssICpzY2xrOwogCi0vKiBjbGtzZWxfcmF0ZSBkYXRhIGNvbW1vbiB0byAyNHh4LzM0M3ggKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ3B0XzMya19yYXRlc1tdID0gewotCSB7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JIHsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfc3lzX3JhdGVzW10gPSB7Ci0JIHsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQkgeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdmeF9sM19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF8zMmtfcmF0ZXNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ3B0X3N5c19yYXRlc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBnZnhfbDNfcmF0ZXNbXTsKIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDViNDc4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDUgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqICBDb250YWN0czoKLSAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKiAgUGF1bCBXYWxtc2xleQotICoKLSAqICBCYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgVHV1a2thIFRpa2thbmVuLCBUb255IExpbmRncmVuLAotICogIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI3VuZGVmIERFQlVHCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgotI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KLQotI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgotI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjazsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19maXhlZDsKLQotc3RhdGljIHZvaWQgb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQkJICAgdTggKmlkbGVzdF9iaXQpOwotCi0vKiAyNDMwIEkyQ0hTIGhhcyBub24tc3RhbmRhcmQgSURMRVNUIHJlZ2lzdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCA9IHsKLQkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCi0JLmZpbmRfaWRsZXN0CT0gb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0LAotCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAotfTsKLQotI2luY2x1ZGUgImNsb2NrMjR4eC5oIgotCi1zdHJ1Y3Qgb21hcF9jbGsgewotCXUzMgkJY3B1OwotCXN0cnVjdCBjbGtfbG9va3VwIGxrOwotfTsKLQotI2RlZmluZSBDTEsoZGV2LCBjb24sIGNrLCBjcCkgCQlcCi0JewkJCQlcCi0JCSAuY3B1ID0gY3AsCQlcCi0JCS5sayA9IHsJCQlcCi0JCQkuZGV2X2lkID0gZGV2LAlcCi0JCQkuY29uX2lkID0gY29uLAlcCi0JCQkuY2xrID0gY2ssCVwKLQkJfSwJCQlcCi0JfQotCi0jZGVmaW5lIENLXzI0M1gJCQlSQVRFX0lOXzI0M1gKLSNkZWZpbmUgQ0tfMjQyWAkJCVJBVEVfSU5fMjQyWAotCi1zdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXAyNHh4X2Nsa3NbXSA9IHsKLQkvKiBleHRlcm5hbCByb290IHNvdXJjZXMgKi8KLQlDTEsoTlVMTCwJImZ1bmNfMzJrX2NrIiwJJmZ1bmNfMzJrX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2NrIiwgJnNlY3VyZV8zMmtfY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5c19jayIsCSZzeXNfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLwotCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJhcGxsOTZfY2siLAkmYXBsbDk2X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KLQlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZnVuY18xMm1fY2siLAkmZnVuY18xMm1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkic3lzX2Nsa291dCIsCSZzeXNfY2xrb3V0LAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0Ml9zcmMiLCAmc3lzX2Nsa291dDJfc3JjLCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18yNDJYKSwKLQlDTEsoTlVMTCwJImVtdWxfY2siLAkmZW11bF9jaywJQ0tfMjQyWCksCi0JLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJkc3BfaXJhdGVfaWNrIiwgJmRzcF9pcmF0ZV9pY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImRzcF9pY2siLAkmZHNwX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCi0JLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJnZnhfaWNrIiwJJmdmeF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCi0JQ0xLKE5VTEwsCSJtZG1faWNrIiwJJm1kbV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkibWRtX29zY19jayIsCSZtZG1fb3NjX2NrLAlDS18yNDNYKSwKLQkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLwotCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMl9mY2siLAkmZHNzMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogTDMgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzc2lfZmNrIiwJJnNzaV9zc3Jfc3N0X2ZjaywgQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogTDQgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KLQlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQzWCB8IENLXzI0MlgpLAotCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KLQlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzI0M1gpLAotCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNSIsICJpY2siLAkmbWNic3A1X2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzI0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJpY2siLAkmbWNzcGkxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJmY2siLAkmbWNzcGkyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ljayIsCSZ1YXJ0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ZjayIsCSZ1YXJ0Ml9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwaW9zX2ljayIsCSZncGlvc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmbXB1X3dkdF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJvbWFwY3RybF9pY2siLAkmb21hcGN0cmxfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAotCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAyNHh4Y2FtIiwgImljayIsCSZjYW1faWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ3ZHQ0X2ZjayIsCSZ3ZHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJm1tY19pY2ssCUNLXzI0MlgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tY19mY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkiZmFjX2ljayIsCSZmYWNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJmYWNfZmNrIiwJJmZhY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAotCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY2hzMV9mY2ssCUNLXzI0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzZG1hX2ljayIsCSZzZG1hX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkidmx5bnFfaWNrIiwJJnZseW5xX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ2bHlucV9mY2siLAkmdmx5bnFfZmNrLAlDS18yNDJYKSwKLQlDTEsoTlVMTCwJInNkcmNfaWNrIiwJJnNkcmNfaWNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImRlc19pY2siLAkmZGVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImFlc19pY2siLAkmYWVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmdXNiaHNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImljayIsCSZtbWNoczFfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImZjayIsCSZtbWNoczFfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImljayIsCSZtbWNoczJfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImZjayIsCSZtbWNoczJfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzVfZmNrIiwJJmdwaW81X2ZjaywJQ0tfMjQzWCksCi0JQ0xLKE5VTEwsCSJtZG1faW50Y19pY2siLAkmbWRtX2ludGNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgIm1tY2hzZGJfZmNrIiwJJm1tY2hzZGIxX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsICJtbWNoc2RiX2ZjayIsIAkmbW1jaHNkYjJfZmNrLAlDS18yNDNYKSwKLX07Ci0KLS8qIENNX0NMS0VOX1BMTC5FTl97NTQsOTZ9TV9QTEwgb3B0aW9ucyAoMjRYWCkgKi8KLSNkZWZpbmUgRU5fQVBMTF9TVE9QUEVECQkJMAotI2RlZmluZSBFTl9BUExMX0xPQ0tFRAkJCTMKLQotLyogQ01fQ0xLU0VMMV9QTEwuQVBMTFNfQ0xLSU4gb3B0aW9ucyAoMjRYWCkgKi8KLSNkZWZpbmUgQVBMTFNfQ0xLSU5fMTlfMk1IWgkJMAotI2RlZmluZSBBUExMU19DTEtJTl8xM01IWgkJMgotI2RlZmluZSBBUExMU19DTEtJTl8xMk1IWgkJMwotCi0vKiAjZGVmaW5lIERPV05fVkFSSUFCTEVfRFBMTCAxICovCQkvKiBFeHBlcmltZW50YWwgKi8KLQotc3RhdGljIHN0cnVjdCBwcmNtX2NvbmZpZyAqY3Vycl9wcmNtX3NldDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICp2Y2xrOwotc3RhdGljIHN0cnVjdCBjbGsgKnNjbGs7Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmw7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT21hcDI0eHggc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKioKLSAqIG9tYXAyNDMwX2Nsa19pMmNoc19maW5kX2lkbGVzdCAtIHJldHVybiBDTV9JRExFU1QgaW5mbyBmb3IgMjQzMCBJMkNIUwotICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKLSAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KLSAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bwotICoKLSAqIE9NQVAyNDMwIEkyQ0hTIENNX0lETEVTVCBiaXRzIGFyZSBpbiBDTV9JRExFU1QxX0NPUkUsIGJ1dCB0aGUKLSAqIENNXypDTEtFTiBiaXRzIGFyZSBpbiBDTV97SSxGfUNMS0VOMl9DT1JFLiAgVGhpcyBjdXN0b20gZnVuY3Rpb24KLSAqIHBhc3NlcyBiYWNrIHRoZSBjb3JyZWN0IENNX0lETEVTVCByZWdpc3RlciBhZGRyZXNzIGZvciBJMkNIUwotICogbW9kdWxlcy4gIE5vIHJldHVybiB2YWx1ZS4KLSAqLwotc3RhdGljIHZvaWQgb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQkJICAgdTggKmlkbGVzdF9iaXQpCi17Ci0JKmlkbGVzdF9yZWcgPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lETEVTVCk7Ci0JKmlkbGVzdF9iaXQgPSBjbGstPmVuYWJsZV9iaXQ7Ci19Ci0KLQotLyoqCi0gKiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSAtIHJldHVybiB0aGUgQ09SRV9DTEsgcmF0ZQotICogQGNsazogcG9pbnRlciB0byB0aGUgY29tYmluZWQgZHBsbF9jayArIGNvcmVfY2sgKGN1cnJlbnRseSAiZHBsbF9jayIpCi0gKgotICogUmV0dXJucyB0aGUgQ09SRV9DTEsgcmF0ZS4gIENPUkVfQ0xLIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSByYXRlCi0gKiBzb3VyY2VzIG9uIE9NQVAyeHh4OiB0aGUgRFBMTCBDTEtPVVQgcmF0ZSwgRFBMTCBDTEtPVVRYMiwgb3IgMzJLSHoKLSAqICh0aGUgbGF0dGVyIGlzIHVudXN1YWwpLiAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoCi0gKiBzdHJ1Y3QgY2xrICpkcGxsX2NrLCB3aGljaCBpcyBhIGNvbXBvc2l0ZSBjbG9jayBvZiBkcGxsX2NrIGFuZAotICogY29yZV9jay4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCWxvbmcgbG9uZyBjb3JlX2NsazsKLQl1MzIgdjsKLQotCWNvcmVfY2xrID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwotCi0JdiA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQl2ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwotCi0JaWYgKHYgPT0gQ09SRV9DTEtfU1JDXzMySykKLQkJY29yZV9jbGsgPSAzMjc2ODsKLQllbHNlCi0JCWNvcmVfY2xrICo9IHY7Ci0KLQlyZXR1cm4gY29yZV9jbGs7Ci19Ci0KLXN0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHBjYzsKLQotCXBjYyA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOwotCi0JX19yYXdfd3JpdGVsKHBjYyAmIH5PTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssIHByY21fY2xrc3JjX2N0cmwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9tYXAyX2Rpc2FibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcGNjOwotCi0JcGNjID0gX19yYXdfcmVhZGwocHJjbV9jbGtzcmNfY3RybCk7Ci0KLQlfX3Jhd193cml0ZWwocGNjIHwgT01BUF9BVVRPRVhUQ0xLTU9ERV9NQVNLLCBwcmNtX2Nsa3NyY19jdHJsKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29zY2NrID0gewotCS5lbmFibGUJCT0gJm9tYXAyX2VuYWJsZV9vc2NfY2ssCi0JLmRpc2FibGUJPSAmb21hcDJfZGlzYWJsZV9vc2NfY2ssCi19OwotCi0jaWZkZWYgT0xEX0NLCi0vKiBSZWNhbGN1bGF0ZSBTWVNUX0NMSyAqLwotc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKLXsKLQl1MzIgZGl2ID0gUFJDTV9DTEtTUkNfQ1RSTDsKLQlkaXYgJj0gKDEgPDwgNykgfCAoMSA8PCA2KTsJLyogVGVzdCBpZiBleHQgY2xrIGRpdmlkZWQgYnkgMSBvciAyICovCi0JZGl2ID4+PSBjbGstPnJhdGVfb2Zmc2V0OwotCWNsay0+cmF0ZSA9IChjbGstPnBhcmVudC0+cmF0ZSAvIGRpdik7Ci0JcHJvcGFnYXRlX3JhdGUoY2xrKTsKLX0KLSNlbmRpZgkvKiBPTERfQ0sgKi8KLQotLyogRW5hYmxlIGFuIEFQTEwgaWYgb2ZmICovCi1zdGF0aWMgaW50IG9tYXAyX2Nsa19maXhlZF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBjdmFsLCBhcGxsX21hc2s7Ci0KLQlhcGxsX21hc2sgPSBFTl9BUExMX0xPQ0tFRCA8PCBjbGstPmVuYWJsZV9iaXQ7Ci0KLQljdmFsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKLQotCWlmICgoY3ZhbCAmIGFwbGxfbWFzaykgPT0gYXBsbF9tYXNrKQotCQlyZXR1cm4gMDsgICAvKiBhcGxsIGFscmVhZHkgZW5hYmxlZCAqLwotCi0JY3ZhbCAmPSB+YXBsbF9tYXNrOwotCWN2YWwgfD0gYXBsbF9tYXNrOwotCWNtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOwotCi0JaWYgKGNsayA9PSAmYXBsbDk2X2NrKQotCQljdmFsID0gT01BUDI0WFhfU1RfOTZNX0FQTEw7Ci0JZWxzZSBpZiAoY2xrID09ICZhcGxsNTRfY2spCi0JCWN2YWwgPSBPTUFQMjRYWF9TVF81NE1fQVBMTDsKLQotCW9tYXAyX2NtX3dhaXRfaWRsZXN0KE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLCBjdmFsLAotCQkJICAgICBjbGstPm5hbWUpOwotCi0JLyoKLQkgKiBSRVZJU0lUOiBTaG91bGQgd2UgcmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgb21hcDJfd2FpdF9jbG9ja19yZWFkeSgpCi0JICogZmFpbHM/Ci0JICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFN0b3AgQVBMTCAqLwotc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBjdmFsOwotCi0JY3ZhbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7Ci0JY3ZhbCAmPSB+KEVOX0FQTExfTE9DS0VEIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JY21fd3JpdGVfbW9kX3JlZyhjdmFsLCBQTExfTU9ELCBDTV9DTEtFTik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19maXhlZCA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwMl9jbGtfZml4ZWRfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAyX2Nsa19maXhlZF9kaXNhYmxlLAotfTsKLQotLyoKLSAqIFVzZXMgdGhlIGN1cnJlbnQgcHJjbSBzZXQgdG8gdGVsbCBpZiBhIHJhdGUgaXMgdmFsaWQuCi0gKiBZb3UgY2FuIGdvIHNsb3dlciwgYnV0IG5vdCBmYXN0ZXIgd2l0aGluIGEgZ2l2ZW4gcmF0ZSBzZXQuCi0gKi8KLXN0YXRpYyBsb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKLXsKLQl1MzIgaGlnaCwgbG93LCBjb3JlX2Nsa19zcmM7Ci0KLQljb3JlX2Nsa19zcmMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7Ci0JY29yZV9jbGtfc3JjICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwotCi0JaWYgKGNvcmVfY2xrX3NyYyA9PSBDT1JFX0NMS19TUkNfRFBMTCkgewkvKiBEUExMIGNsb2Nrb3V0ICovCi0JCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkICogMjsKLQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKLQl9IGVsc2UgewkJCQkvKiBEUExMIGNsb2Nrb3V0IHggMiAqLwotCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKLQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAvIDI7Ci0JfQotCi0jaWZkZWYgRE9XTl9WQVJJQUJMRV9EUExMCi0JaWYgKHRhcmdldF9yYXRlID4gaGlnaCkKLQkJcmV0dXJuIGhpZ2g7Ci0JZWxzZQotCQlyZXR1cm4gdGFyZ2V0X3JhdGU7Ci0jZWxzZQotCWlmICh0YXJnZXRfcmF0ZSA+IGxvdykKLQkJcmV0dXJuIGhpZ2g7Ci0JZWxzZQotCQlyZXR1cm4gbG93OwotI2VuZGlmCi0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoY2xrKTsKLX0KLQotc3RhdGljIGludCBvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIGN1cl9yYXRlLCBsb3csIG11bHQsIGRpdiwgdmFsaWRfcmF0ZSwgZG9uZV9yYXRlOwotCXUzMiBieXBhc3MgPSAwOwotCXN0cnVjdCBwcmNtX2NvbmZpZyB0bXBzZXQ7Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0KLQljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKLQltdWx0ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCW11bHQgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7Ci0KLQlpZiAoKHJhdGUgPT0gKGN1cl9yYXRlIC8gMikpICYmIChtdWx0ID09IDIpKSB7Ci0JCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKLQl9IGVsc2UgaWYgKChyYXRlID09IChjdXJfcmF0ZSAqIDIpKSAmJiAobXVsdCA9PSAxKSkgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0JfSBlbHNlIGlmIChyYXRlICE9IGN1cl9yYXRlKSB7Ci0JCXZhbGlkX3JhdGUgPSBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHJhdGUpOwotCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKG11bHQgPT0gMSkKLQkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7Ci0JCWVsc2UKLQkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOwotCi0JCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JCWlmICghZGQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7Ci0JCXRtcHNldC5jbV9jbGtzZWwxX3BsbCAmPSB+KGRkLT5tdWx0X21hc2sgfAotCQkJCQkgICBkZC0+ZGl2MV9tYXNrKTsKLQkJZGl2ID0gKChjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkIC8gMTAwMDAwMCkgLSAxKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgJj0gfk9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwotCQlpZiAocmF0ZSA+IGxvdykgewotCQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsIHw9IENPUkVfQ0xLX1NSQ19EUExMX1gyOwotCQkJbXVsdCA9ICgocmF0ZSAvIDIpIC8gMTAwMDAwMCk7Ci0JCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQkJfSBlbHNlIHsKLQkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTDsKLQkJCW11bHQgPSAocmF0ZSAvIDEwMDAwMDApOwotCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTEw7Ci0JCX0KLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChkaXYgPDwgX19mZnMoZGQtPm11bHRfbWFzaykpOwotCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgfD0gKG11bHQgPDwgX19mZnMoZGQtPmRpdjFfbWFzaykpOwotCi0JCS8qIFdvcnN0IGNhc2UgKi8KLQkJdG1wc2V0LmJhc2Vfc2RyY19yZnIgPSBTRFJDX1JGUl9DVFJMX0JZUEFTUzsKLQotCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLwotCQkJYnlwYXNzID0gMTsKLQotCQkvKiBGb3Igb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcygpICovCi0JCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKLQotCQkvKiBGb3JjZSBkbGwgbG9jayBtb2RlICovCi0JCW9tYXAyX3NldF9wcmNtKHRtcHNldC5jbV9jbGtzZWwxX3BsbCwgdG1wc2V0LmJhc2Vfc2RyY19yZnIsCi0JCQkgICAgICAgYnlwYXNzKTsKLQotCQkvKiBFcnJhdGE6IHJldCBkbGwgZW50cnkgc3RhdGUgKi8KLQkJb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBvbWFwMl90YWJsZV9tcHVfcmVjYWxjIC0ganVzdCByZXR1cm4gdGhlIE1QVSBzcGVlZAotICogQGNsazogdmlydF9wcmNtX3NldCBzdHJ1Y3QgY2xrCi0gKgotICogU2V0IHZpcnRfcHJjbV9zZXQncyByYXRlIHRvIHRoZSBtcHVfc3BlZWQgZmllbGQgb2YgdGhlIGN1cnJlbnQgUFJDTSBzZXQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7Ci19Ci0KLS8qCi0gKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVzcyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgotICoKLSAqIFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRoZSBrZXkgZmllbGQuCi0gKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3RoZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKLSAqIGp1c3QgdXNlcyB0aGUgQVJNIHJhdGVzLgotICovCi1zdGF0aWMgbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBwcmNtX2NvbmZpZyAqcHRyOwotCWxvbmcgaGlnaGVzdF9yYXRlOwotCi0JaWYgKGNsayAhPSAmdmlydF9wcmNtX3NldCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPm1wdV9zcGVlZDsgcHRyKyspIHsKLQkJaWYgKCEocHRyLT5mbGFncyAmIGNwdV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocHRyLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQotCQkJY29udGludWU7Ci0KLQkJaGlnaGVzdF9yYXRlID0gcHRyLT5tcHVfc3BlZWQ7Ci0KLQkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KLQkJaWYgKHB0ci0+bXB1X3NwZWVkIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKLX0KLQotLyogU2V0cyBiYXNpYyBjbG9ja3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByYXRlICovCi1zdGF0aWMgaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBjdXJfcmF0ZSwgZG9uZV9yYXRlLCBieXBhc3MgPSAwLCB0bXA7Ci0Jc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2xrICE9ICZ2aXJ0X3ByY21fc2V0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQlpZiAocHJjbS0+bXB1X3NwZWVkIDw9IHJhdGUpIHsKLQkJCWZvdW5kX3NwZWVkID0gcHJjbS0+bXB1X3NwZWVkOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kX3NwZWVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBzZXQgTVBVIHJhdGUgdG8gJWx1TUh6XG4iLAotCQkgICAgICAgcmF0ZSAvIDEwMDAwMDApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljdXJyX3ByY21fc2V0ID0gcHJjbTsKLQljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKLQotCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlIC8gMikgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7Ci0JfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlICogMikgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0JfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQotCQkJYnlwYXNzID0gMTsKLQotCQlpZiAoKHByY20tPmNtX2Nsa3NlbDJfcGxsICYgT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0spID09Ci0JCSAgICBDT1JFX0NMS19TUkNfRFBMTF9YMikKLQkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMX1gyOwotCQllbHNlCi0JCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTDsKLQotCQkvKiBNUFUgZGl2aWRlciAqLwotCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9tcHUsIE1QVV9NT0QsIENNX0NMS1NFTCk7Ci0KLQkJLyogZHNwICsgaXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLwotCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9kc3AsCi0JCQkJIE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCk7Ci0KLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZ2Z4LCBHRlhfTU9ELCBDTV9DTEtTRUwpOwotCi0JCS8qIE1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLwotCQl0bXAgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0NMS1NFTDEpICYgT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSzsKLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWwxX2NvcmUgfCB0bXAsIENPUkVfTU9ELAotCQkJCSBDTV9DTEtTRUwxKTsKLQotCQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCi0JCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9tZG0sCi0JCQkJCSBPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpOwotCi0JCS8qIHgyIHRvIGVudGVyIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLwotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0KLQkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCi0JCQkgICAgICAgYnlwYXNzKTsKLQotCQlvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKCkpOwotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShkb25lX3JhdGUsIDApOwotCi0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19DUFVfRlJFUQotLyoKLSAqIFdhbGsgUFJDTSByYXRlIHRhYmxlIGFuZCBmaWxsb3V0IGNwdWZyZXEgZnJlcV90YWJsZQotICovCi1zdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIGZyZXFfdGFibGVbQVJSQVlfU0laRShyYXRlX3RhYmxlKV07Ci0KLXZvaWQgb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKLXsKLQlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207Ci0JaW50IGkgPSAwOwotCi0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBkb24ndCBwdXQgYnlwYXNzIHJhdGVzIGluIHRhYmxlICovCi0JCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCi0JCQljb250aW51ZTsKLQotCQlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKLQkJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBwcmNtLT5tcHVfc3BlZWQgLyAxMDAwOwotCQlpKys7Ci0JfQotCi0JaWYgKGkgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZnJlcXVlbmN5ICIKLQkJICAgICAgICJ0YWJsZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7Ci0JZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKLQotCSp0YWJsZSA9ICZmcmVxX3RhYmxlWzBdOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0gewotCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCi0JLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAotCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKLQkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKLQkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCi0JLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKLSNpZmRlZglDT05GSUdfQ1BVX0ZSRVEKLQkuY2xrX2luaXRfY3B1ZnJlcV90YWJsZQk9IG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyB1MzIgb21hcDJfZ2V0X2FwbGxfY2xraW4odm9pZCkKLXsKLQl1MzIgYXBsbHMsIHNyYXRlID0gMDsKLQotCWFwbGxzID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDEpOwotCWFwbGxzICY9IE9NQVAyNFhYX0FQTExTX0NMS0lOX01BU0s7Ci0JYXBsbHMgPj49IE9NQVAyNFhYX0FQTExTX0NMS0lOX1NISUZUOwotCi0JaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzE5XzJNSFopCi0JCXNyYXRlID0gMTkyMDAwMDA7Ci0JZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTNNSFopCi0JCXNyYXRlID0gMTMwMDAwMDA7Ci0JZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTJNSFopCi0JCXNyYXRlID0gMTIwMDAwMDA7Ci0KLQlyZXR1cm4gc3JhdGU7Ci19Ci0KLXN0YXRpYyB1MzIgb21hcDJfZ2V0X3N5c2Nsa2Rpdih2b2lkKQotewotCXUzMiBkaXY7Ci0KLQlkaXYgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKLQlkaXYgJj0gT01BUF9TWVNDTEtESVZfTUFTSzsKLQlkaXYgPj49IE9NQVBfU1lTQ0xLRElWX1NISUZUOwotCi0JcmV0dXJuIGRpdjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBvbWFwMl9nZXRfYXBsbF9jbGtpbigpICogb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwotfQotCi0vKgotICogU2V0IGNsb2NrcyBmb3IgYnlwYXNzIG1vZGUgZm9yIHJlYm9vdCB0byB3b3JrLgotICovCi12b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKLXsKLQl1MzIgcmF0ZTsKLQotCWlmICh2Y2xrID09IE5VTEwgfHwgc2NsayA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCWNsa19zZXRfcmF0ZSh2Y2xrLCByYXRlKTsKLX0KLQotLyoKLSAqIFN3aXRjaCB0aGUgTVBVIHJhdGUgaWYgc3BlY2lmaWVkIG9uIGNtZGxpbmUuCi0gKiBXZSBjYW5ub3QgZG8gdGhpcyBlYXJseSB1bnRpbCBjbWRsaW5lIGlzIHBhcnNlZC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgb21hcDJfY2xrX2FyY2hfaW5pdCh2b2lkKQotewotCWlmICghbXB1cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2xrX3NldF9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBtYXRjaGluZyBNUFUgcmF0ZVxuIik7Ci0KLQlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCi0JICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKLQotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChvbWFwMl9jbGtfYXJjaF9pbml0KTsKLQotaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKLQlzdHJ1Y3Qgb21hcF9jbGsgKmM7Ci0JdTMyIGNsa3JhdGU7Ci0KLQlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKLQkJcHJjbV9jbGtzcmNfY3RybCA9IE9NQVAyNDIwX1BSQ01fQ0xLU1JDX0NUUkw7Ci0JCWNwdV9tYXNrID0gUkFURV9JTl8yNDJYOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJcHJjbV9jbGtzcmNfY3RybCA9IE9NQVAyNDMwX1BSQ01fQ0xLU1JDX0NUUkw7Ci0JCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOwotCX0KLQotCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKLQotCWZvciAoYyA9IG9tYXAyNHh4X2Nsa3M7IGMgPCBvbWFwMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMjR4eF9jbGtzKTsgYysrKQotCQljbGtfcHJlaW5pdChjLT5say5jbGspOwotCi0Jb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKLQlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKLQlzeXNfY2sucmF0ZSA9IG9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOwotCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOwotCi0JZm9yIChjID0gb21hcDI0eHhfY2xrczsgYyA8IG9tYXAyNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNHh4X2Nsa3MpOyBjKyspCi0JCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgewotCQkJY2xrZGV2X2FkZCgmYy0+bGspOwotCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7Ci0JCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwotCQl9Ci0KLQkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KLQljbGtyYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOwotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCi0JCQkgYnJlYWs7Ci0JfQotCWN1cnJfcHJjbV9zZXQgPSBwcmNtOwotCi0JcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCi0JICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7Ci0KLQkvKiBBdm9pZCBzbGVlcGluZyBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCi0JdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKLQlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTljZjdhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjU3ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogIENvbnRhY3RzOgotICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqICBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzI0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0syNFhYX0gKLQotI2luY2x1ZGUgImNsb2NrLmgiCi0KLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKLSNpbmNsdWRlICJzZHJjLmgiCi0KLS8qIFJFVklTSVQ6IFRoZXNlIHNob3VsZCBiZSBzZXQgZHluYW1pY2FsbHkgZm9yIENPTkZJR19NVUxUSV9PTUFQMiAqLwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCi0jZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJCU9NQVAyNDIwX0NNX1JFR0FERFIKLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTAlPTUFQMjQyMF9QUkNNX0NMS09VVF9DVFJMCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMCU9NQVAyNDIwX1BSQ01fQ0xLRU1VTF9DVFJMCi0jZWxzZQotI2RlZmluZSBPTUFQX0NNX1JFR0FERFIJCQlPTUFQMjQzMF9DTV9SRUdBRERSCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwJT01BUDI0MzBfUFJDTV9DTEtPVVRfQ1RSTAotI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS0VNVUxfQ1RSTAlPTUFQMjQzMF9QUkNNX0NMS0VNVUxfQ1RSTAotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLQotLyogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KLSAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSxDTV9DTEtTRUxfRFNQCi0gKiBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCi0gKi8KLXN0cnVjdCBwcmNtX2NvbmZpZyB7Ci0JdW5zaWduZWQgbG9uZyB4dGFsX3NwZWVkOwkvKiBjcnlzdGFsIHJhdGUgKi8KLQl1bnNpZ25lZCBsb25nIGRwbGxfc3BlZWQ7CS8qIGRwbGw6IG91dCp4dGFsKk0vKE4tMSl0YWJsZV9yZWNhbGMgKi8KLQl1bnNpZ25lZCBsb25nIG1wdV9zcGVlZDsJLyogc3BlZWQgb2YgTVBVICovCi0JdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfbXB1OwkvKiBtcHUgZGl2aWRlciAqLwotCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX2RzcDsJLyogZHNwK2l2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KLQl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9nZng7CS8qIGdmeCBkaXZpZGVycyAqLwotCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMV9jb3JlOwkvKiBtYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KLQl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbDFfcGxsOwkvKiBtLG4gKi8KLQl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbDJfcGxsOwkvKiBkcGxseDEgb3IgeDIgb3V0ICovCi0JdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfbWRtOwkvKiBtb2RlbSBkaXZpZGVycyAyNDMwIG9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIGJhc2Vfc2RyY19yZnI7CS8qIGJhc2UgcmVmcmVzaCB0aW1pbmcgZm9yIGEgc2V0ICovCi0JdW5zaWduZWQgY2hhciBmbGFnczsKLX07Ci0KLS8qCi0gKiBUaGUgT01BUDIgcHJvY2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9ucycuCi0gKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdlIGFuZCBzcGVlZCBmb3IgY2xvY2tzLgotICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBmb3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcwotICogdGhlc2UgY29tYmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvJ3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCi0gKiByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFRoZXNlIHJhdGlvIHNldHMgYXJlIGZvciBhIGdpdmVuIHZvbHRhZ2UvRFBMTAotICogc2V0dGluZy4gQWxsIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBkZXNjcmliZWQgYnkgYSBEUExMIHNldHRpbmcgYW5kIGEgcmF0aW8KLSAqIFRoZXJlIGFyZSAzIHJhdGlvIHNldHMgZm9yIHRoZSAyNDMwIGFuZCBYIHJhdGlvIHNldHMgZm9yIDI0MjAuCi0gKgotICogMjQzMCBkaWZmZXJzIGZyb20gMjQyMCBpbiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHBoYXNlIHN5bmNocm9uaXplcnMgdXNlZC4KLSAqIFRoZXkgYm90aCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNsb2NrIGRvbWFpbiBzZXR1cC4gMjQyMChpdmExLGRzcCkgdnMKLSAqIDI0MzAgKGl2YTIuMSwgTk9kc3AsIG1kbSkKLSAqLwotCi0vKiBDb3JlIGZpZWxkcyBmb3IgY21fY2xrc2VsLCBub3QgcmF0aW8gZ292ZXJuZWQgKi8KLSNkZWZpbmUgUlhfQ0xLU0VMX0RTUzEJCQkoMHgxMCA8PCA4KQotI2RlZmluZSBSWF9DTEtTRUxfRFNTMgkJCSgweDAgPDwgMTMpCi0jZGVmaW5lIFJYX0NMS1NFTF9TU0kJCQkoMHg1IDw8IDIwKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFZvbHRhZ2UvRFBMTCByYXRpb3MKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIDI0MzAgUmF0aW8ncywgMjQzMC1SYXRpbyBDb25maWcgMSAqLwotI2RlZmluZSBSMV9DTEtTRUxfTDMJCQkoNCA8PCAwKQotI2RlZmluZSBSMV9DTEtTRUxfTDQJCQkoMiA8PCA1KQotI2RlZmluZSBSMV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCi0jZGVmaW5lIFIxX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVIxX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAotCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAotCQkJCQlSMV9DTEtTRUxfTDQgfCBSMV9DTEtTRUxfTDMKLSNkZWZpbmUgUjFfQ0xLU0VMX01QVQkJCSgyIDw8IDApCi0jZGVmaW5lIFIxX0NNX0NMS1NFTF9NUFVfVkFMCQlSMV9DTEtTRUxfTVBVCi0jZGVmaW5lIFIxX0NMS1NFTF9EU1AJCQkoMiA8PCAwKQotI2RlZmluZSBSMV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQotI2RlZmluZSBSMV9DTV9DTEtTRUxfRFNQX1ZBTAkJUjFfQ0xLU0VMX0RTUCB8IFIxX0NMS1NFTF9EU1BfSUYKLSNkZWZpbmUgUjFfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCi0jZGVmaW5lIFIxX0NNX0NMS1NFTF9HRlhfVkFMCQlSMV9DTEtTRUxfR0ZYCi0jZGVmaW5lIFIxX0NMS1NFTF9NRE0JCQkoNCA8PCAwKQotI2RlZmluZSBSMV9DTV9DTEtTRUxfTURNX1ZBTAkJUjFfQ0xLU0VMX01ETQotCi0vKiAyNDMwLVJhdGlvIENvbmZpZyAyICovCi0jZGVmaW5lIFIyX0NMS1NFTF9MMwkJCSg2IDw8IDApCi0jZGVmaW5lIFIyX0NMS1NFTF9MNAkJCSgyIDw8IDUpCi0jZGVmaW5lIFIyX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUjJfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCi0JCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCi0JCQkJCVIyX0NMS1NFTF9MNCB8IFIyX0NMS1NFTF9MMwotI2RlZmluZSBSMl9DTEtTRUxfTVBVCQkJKDIgPDwgMCkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMX01QVV9WQUwJCVIyX0NMS1NFTF9NUFUKLSNkZWZpbmUgUjJfQ0xLU0VMX0RTUAkJCSgyIDw8IDApCi0jZGVmaW5lIFIyX0NMS1NFTF9EU1BfSUYJCSgzIDw8IDUpCi0jZGVmaW5lIFIyX0NNX0NMS1NFTF9EU1BfVkFMCQlSMl9DTEtTRUxfRFNQIHwgUjJfQ0xLU0VMX0RTUF9JRgotI2RlZmluZSBSMl9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMX0dGWF9WQUwJCVIyX0NMS1NFTF9HRlgKLSNkZWZpbmUgUjJfQ0xLU0VMX01ETQkJCSg2IDw8IDApCi0jZGVmaW5lIFIyX0NNX0NMS1NFTF9NRE1fVkFMCQlSMl9DTEtTRUxfTURNCi0KLS8qIDI0MzAtUmF0aW8gQm9vdG0gKEJZUEFTUykgKi8KLSNkZWZpbmUgUkJfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKLSNkZWZpbmUgUkJfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQotI2RlZmluZSBSQl9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSQl9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKLQkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJUkJfQ0xLU0VMX0w0IHwgUkJfQ0xLU0VMX0wzCi0jZGVmaW5lIFJCX0NMS1NFTF9NUFUJCQkoMSA8PCAwKQotI2RlZmluZSBSQl9DTV9DTEtTRUxfTVBVX1ZBTAkJUkJfQ0xLU0VMX01QVQotI2RlZmluZSBSQl9DTEtTRUxfRFNQCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKLSNkZWZpbmUgUkJfQ01fQ0xLU0VMX0RTUF9WQUwJCVJCX0NMS1NFTF9EU1AgfCBSQl9DTEtTRUxfRFNQX0lGCi0jZGVmaW5lIFJCX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQotI2RlZmluZSBSQl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUkJfQ0xLU0VMX0dGWAotI2RlZmluZSBSQl9DTEtTRUxfTURNCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ01fQ0xLU0VMX01ETV9WQUwJCVJCX0NMS1NFTF9NRE0KLQotLyogMjQyMCBSYXRpbyBFcXVpdmFsZW50cyAqLwotI2RlZmluZSBSWFhfQ0xLU0VMX1ZMWU5RCQkoMHgxMiA8PCAxNSkKLSNkZWZpbmUgUlhYX0NMS1NFTF9TU0kJCQkoMHg4IDw8IDIwKQotCi0vKiAyNDIwLVBSQ00gSUlJIDUzMk1IeiBjb3JlICovCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0wzCQkJKDQgPDwgMCkJLyogMTMzTUh6ICovCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogNjYuNU1IeiAqLwotI2RlZmluZSBSSUlJX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkJLyogMzMuMjVNSHogKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCVJJSUlfQ0xLU0VMX1VTQiB8IFJYWF9DTEtTRUxfU1NJIHwgXAotCQkJCQlSWFhfQ0xLU0VMX1ZMWU5RIHwgUlhfQ0xLU0VMX0RTUzIgfCBcCi0JCQkJCVJYX0NMS1NFTF9EU1MxIHwgUklJSV9DTEtTRUxfTDQgfCBcCi0JCQkJCVJJSUlfQ0xLU0VMX0wzCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDI2Nk1IeiAqLwotI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMCQlSSUlJX0NMS1NFTF9NUFUKLSNkZWZpbmUgUklJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMTc3LjNNSHogKi8KLSNkZWZpbmUgUklJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSA4OC42N01IeiAqLwotI2RlZmluZSBSSUlJX1NZTkNfRFNQCQkJKDEgPDwgNykJLyogRW5hYmxlIHN5bmMgKi8KLSNkZWZpbmUgUklJSV9DTEtTRUxfSVZBCQkJKDYgPDwgOCkJLyogaXZhMSAtIDg4LjY3TUh6ICovCi0jZGVmaW5lIFJJSUlfU1lOQ19JVkEJCQkoMSA8PCAxMykJLyogRW5hYmxlIHN5bmMgKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUklJSV9TWU5DX0lWQSB8IFJJSUlfQ0xLU0VMX0lWQSB8IFwKLQkJCQkJUklJSV9TWU5DX0RTUCB8IFJJSUlfQ0xLU0VMX0RTUF9JRiB8IFwKLQkJCQkJUklJSV9DTEtTRUxfRFNQCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCS8qIDY2LjVNSHogKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklJSV9DTEtTRUxfR0ZYCi0KLS8qIDI0MjAtUFJDTSBJSSA2MDBNSHogY29yZSAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX0wzCQkJKDYgPDwgMCkJLyogMTAwTUh6ICovCi0jZGVmaW5lIFJJSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA1ME1IeiAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX1VTQgkJCSgyIDw8IDI1KQkvKiA1ME1IeiAqLwotI2RlZmluZSBSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUklJX0NMS1NFTF9VU0IgfCBcCi0JCQkJCVJYWF9DTEtTRUxfU1NJIHwgUlhYX0NMS1NFTF9WTFlOUSB8IFwKLQkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJUklJX0NMS1NFTF9MNCB8IFJJSV9DTEtTRUxfTDMKLSNkZWZpbmUgUklJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAzMDBNSHogKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9NUFVfVkFMCQlSSUlfQ0xLU0VMX01QVQotI2RlZmluZSBSSUlfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDIwME1IeiAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkJLyogYzV4IC0gMTAwTUh6ICovCi0jZGVmaW5lIFJJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCS8qIEJ5cGFzcyBzeW5jICovCi0jZGVmaW5lIFJJSV9DTEtTRUxfSVZBCQkJKDMgPDwgOCkJLyogaXZhMSAtIDIwME1IeiAqLwotI2RlZmluZSBSSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykJLyogQnlwYXNzIHN5bmMgKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9EU1BfVkFMCQlSSUlfU1lOQ19JVkEgfCBSSUlfQ0xLU0VMX0lWQSB8IFwKLQkJCQkJUklJX1NZTkNfRFNQIHwgUklJX0NMS1NFTF9EU1BfSUYgfCBcCi0JCQkJCVJJSV9DTEtTRUxfRFNQCi0jZGVmaW5lIFJJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNTBNSHogKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlfQ0xLU0VMX0dGWAotCi0vKiAyNDIwLVBSQ00gSSA2NjBNSHogY29yZSAqLwotI2RlZmluZSBSSV9DTEtTRUxfTDMJCQkoNCA8PCAwKQkvKiAxNjVNSHogKi8KLSNkZWZpbmUgUklfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogODIuNU1IeiAqLwotI2RlZmluZSBSSV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCS8qIDQxLjI1TUh6ICovCi0jZGVmaW5lIFJJX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVJJX0NMS1NFTF9VU0IgfCBcCi0JCQkJCVJYWF9DTEtTRUxfU1NJIHwgUlhYX0NMS1NFTF9WTFlOUSB8IFwKLQkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJUklfQ0xLU0VMX0w0IHwgUklfQ0xLU0VMX0wzCi0jZGVmaW5lIFJJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAzMzBNSHogKi8KLSNkZWZpbmUgUklfQ01fQ0xLU0VMX01QVV9WQUwJCVJJX0NMS1NFTF9NUFUKLSNkZWZpbmUgUklfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDIyME1IeiAqLwotI2RlZmluZSBSSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAxMTBNSHogKi8KLSNkZWZpbmUgUklfU1lOQ19EU1AJCQkoMSA8PCA3KQkvKiBBY3RpdmF0ZSBzeW5jICovCi0jZGVmaW5lIFJJX0NMS1NFTF9JVkEJCQkoNCA8PCA4KQkvKiBpdmExIC0gMTY1TUh6ICovCi0jZGVmaW5lIFJJX1NZTkNfSVZBCQkJKDAgPDwgMTMpCS8qIEJ5cGFzcyBzeW5jICovCi0jZGVmaW5lIFJJX0NNX0NMS1NFTF9EU1BfVkFMCQlSSV9TWU5DX0lWQSB8IFJJX0NMS1NFTF9JVkEgfCBcCi0JCQkJCVJJX1NZTkNfRFNQIHwgUklfQ0xLU0VMX0RTUF9JRiB8IFwKLQkJCQkJUklfQ0xLU0VMX0RTUAotI2RlZmluZSBSSV9DTEtTRUxfR0ZYCQkJKDEgPDwgMCkJLyogMTY1TUh6ICovCi0jZGVmaW5lIFJJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSV9DTEtTRUxfR0ZYCi0KLS8qIDI0MjAtUFJDTSBWSUkgKGJvb3QpICovCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKLSNkZWZpbmUgUlZJSV9DTEtTRUxfTDQJCQkoMSA8PCA1KQotI2RlZmluZSBSVklJX0NMS1NFTF9EU1MxCQkoMSA8PCA4KQotI2RlZmluZSBSVklJX0NMS1NFTF9EU1MyCQkoMCA8PCAxMykKLSNkZWZpbmUgUlZJSV9DTEtTRUxfVkxZTlEJCSgxIDw8IDE1KQotI2RlZmluZSBSVklJX0NMS1NFTF9TU0kJCQkoMSA8PCAyMCkKLSNkZWZpbmUgUlZJSV9DTEtTRUxfVVNCCQkJKDEgPDwgMjUpCi0KLSNkZWZpbmUgUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCVJWSUlfQ0xLU0VMX1VTQiB8IFJWSUlfQ0xLU0VMX1NTSSB8IFwKLQkJCQkJUlZJSV9DTEtTRUxfVkxZTlEgfCBSVklJX0NMS1NFTF9EU1MyIHwgXAotCQkJCQlSVklJX0NMS1NFTF9EU1MxIHwgUlZJSV9DTEtTRUxfTDQgfCBSVklJX0NMS1NFTF9MMwotCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX01QVQkJCSgxIDw8IDApIC8qIGFsbCBkaXZpZGUgYnkgMSAqLwotI2RlZmluZSBSVklJX0NNX0NMS1NFTF9NUFVfVkFMCQlSVklJX0NMS1NFTF9NUFUKLQotI2RlZmluZSBSVklJX0NMS1NFTF9EU1AJCQkoMSA8PCAwKQotI2RlZmluZSBSVklJX0NMS1NFTF9EU1BfSUYJCSgxIDw8IDUpCi0jZGVmaW5lIFJWSUlfU1lOQ19EU1AJCQkoMCA8PCA3KQotI2RlZmluZSBSVklJX0NMS1NFTF9JVkEJCQkoMSA8PCA4KQotI2RlZmluZSBSVklJX1NZTkNfSVZBCQkJKDAgPDwgMTMpCi0jZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCVJWSUlfU1lOQ19JVkEgfCBSVklJX0NMS1NFTF9JVkEgfCBSVklJX1NZTkNfRFNQIHwgXAotCQkJCQlSVklJX0NMS1NFTF9EU1BfSUYgfCBSVklJX0NMS1NFTF9EU1AKLQotI2RlZmluZSBSVklJX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQotI2RlZmluZSBSVklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSVklJX0NMS1NFTF9HRlgKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAyNDMwIFRhcmdldCBtb2RlczogQWxvbmcgd2l0aCBlYWNoIGNvbmZpZ3VyYXRpb24gdGhlIENQVSBoYXMgc2V2ZXJhbAotICogbW9kZXMgd2hpY2ggZ29lcyBhbG9uZyB3aXRoIHRoZW0uIE1vZGVzIG1haW5seSBhcmUgdGhlIGFkZGl0aW9uIG9mCi0gKiBkZXNjcmliZSBEUExMIGNvbWJpbmF0aW9ucyB0byBnbyBhbG9uZyB3aXRoIGEgcmF0aW8uCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBIYXJkd2FyZSBnb3Zlcm5lZCAqLwotI2RlZmluZSBNWF80OE1fU1JDCQkJKDAgPDwgMykKLSNkZWZpbmUgTVhfNTRNX1NSQwkJCSgwIDw8IDUpCi0jZGVmaW5lIE1YX0FQTExTX0NMSUtJTl8xMgkJKDMgPDwgMjMpCi0jZGVmaW5lIE1YX0FQTExTX0NMSUtJTl8xMwkJKDIgPDwgMjMpCi0jZGVmaW5lIE1YX0FQTExTX0NMSUtJTl8xOV8yCQkoMCA8PCAyMykKLQotLyoKLSAqIDI0MzAgLSBzdGFuZGFsb25lLCAyKnJlZipNLyhuKzEpLCBNL04gaXMgZm9yIGV4YWN0bmVzcyBub3QgcmVsb2NrIHNwZWVkCi0gKiAjNWEJKHJhdGlvMSkgYmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDI2NioyID0gNTMyTUh6Ci0gKi8KLSNkZWZpbmUgTTVBX0RQTExfTVVMVF8xMgkJKDEzMyA8PCAxMikKLSNkZWZpbmUgTTVBX0RQTExfRElWXzEyCQkJKDUgPDwgOCkKLSNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTVBX0RQTExfRElWXzEyIHwgTTVBX0RQTExfTVVMVF8xMiB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCi0jZGVmaW5lIE01QV9EUExMX01VTFRfMTMJCSg2MSA8PCAxMikKLSNkZWZpbmUgTTVBX0RQTExfRElWXzEzCQkJKDIgPDwgOCkKLSNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTVBX0RQTExfRElWXzEzIHwgTTVBX0RQTExfTVVMVF8xMyB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCi0jZGVmaW5lIE01QV9EUExMX01VTFRfMTkJCSg1NSA8PCAxMikKLSNkZWZpbmUgTTVBX0RQTExfRElWXzE5CQkJKDMgPDwgOCkKLSNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTVBX0RQTExfRElWXzE5IHwgTTVBX0RQTExfTVVMVF8xOSB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKLS8qICM1YgkocmF0aW8xKSB0YXJnZXQgRFBMTCA9IDIwMCoyID0gNDAwTUh6ICovCi0jZGVmaW5lIE01Ql9EUExMX01VTFRfMTIJCSg1MCA8PCAxMikKLSNkZWZpbmUgTTVCX0RQTExfRElWXzEyCQkJKDIgPDwgOCkKLSNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTVCX0RQTExfRElWXzEyIHwgTTVCX0RQTExfTVVMVF8xMiB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCi0jZGVmaW5lIE01Ql9EUExMX01VTFRfMTMJCSgyMDAgPDwgMTIpCi0jZGVmaW5lIE01Ql9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQotCi0jZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU01Ql9EUExMX0RJVl8xMyB8IE01Ql9EUExMX01VTFRfMTMgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xMwotI2RlZmluZSBNNUJfRFBMTF9NVUxUXzE5CQkoMTI1IDw8IDEyKQotI2RlZmluZSBNNUJfRFBMTF9ESVZfMTkJCQkoMzEgPDwgOCkKLSNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTVCX0RQTExfRElWXzE5IHwgTTVCX0RQTExfTVVMVF8xOSB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKLS8qCi0gKiAjNAkocmF0aW8yKSwgRFBMTCA9IDM5OSoyID0gNzk4TUh6LCBMMz0xMzNNSHoKLSAqLwotI2RlZmluZSBNNF9EUExMX01VTFRfMTIJCQkoMTMzIDw8IDEyKQotI2RlZmluZSBNNF9EUExMX0RJVl8xMgkJCSgzIDw8IDgpCi0jZGVmaW5lIE00X0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTRfRFBMTF9ESVZfMTIgfCBNNF9EUExMX01VTFRfMTIgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xMgotCi0jZGVmaW5lIE00X0RQTExfTVVMVF8xMwkJCSgzOTkgPDwgMTIpCi0jZGVmaW5lIE00X0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCi0jZGVmaW5lIE00X0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTRfRFBMTF9ESVZfMTMgfCBNNF9EUExMX01VTFRfMTMgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xMwotCi0jZGVmaW5lIE00X0RQTExfTVVMVF8xOQkJCSgxNDUgPDwgMTIpCi0jZGVmaW5lIE00X0RQTExfRElWXzE5CQkJKDYgPDwgOCkKLSNkZWZpbmUgTTRfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQlNNF9EUExMX0RJVl8xOSB8IE00X0RQTExfTVVMVF8xOSB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKLQotLyoKLSAqICMzCShyYXRpbzIpIGJhc2Vwb3J0LXRhcmdldCwgdGFyZ2V0IERQTEwgPSAzMzAqMiA9IDY2ME1IegotICovCi0jZGVmaW5lIE0zX0RQTExfTVVMVF8xMgkJCSg1NSA8PCAxMikKLSNkZWZpbmUgTTNfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQotI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU0zX0RQTExfRElWXzEyIHwgTTNfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTIKLSNkZWZpbmUgTTNfRFBMTF9NVUxUXzEzCQkJKDc2IDw8IDEyKQotI2RlZmluZSBNM19EUExMX0RJVl8xMwkJCSgyIDw8IDgpCi0jZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTNfRFBMTF9ESVZfMTMgfCBNM19EUExMX01VTFRfMTMgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xMwotI2RlZmluZSBNM19EUExMX01VTFRfMTkJCQkoMTcgPDwgMTIpCi0jZGVmaW5lIE0zX0RQTExfRElWXzE5CQkJKDAgPDwgOCkKLSNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQlNM19EUExMX0RJVl8xOSB8IE0zX0RQTExfTVVMVF8xOSB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKLQotLyoKLSAqICMyICAgKHJhdGlvMSkgRFBMTCA9IDMzMCoyID0gNjYwTUh6LCBMMz0xNjVNSHoKLSAqLwotI2RlZmluZSBNMl9EUExMX01VTFRfMTIJCSAgICAgICAgKDU1IDw8IDEyKQotI2RlZmluZSBNMl9EUExMX0RJVl8xMgkJICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBNMl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU0yX0RQTExfRElWXzEyIHwgTTJfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTIKLQotLyogU3BlZWQgY2hhbmdlcyAtIFVzZWQgNjU4LjdNSHogaW5zdGVhZCBvZiA2NjBNSHogZm9yIExQLVJlZnJlc2ggTT03NiBOPTIsCi0gKiByZWxvY2sgdGltZSBpc3N1ZSAqLwotLyogQ29yZSBmcmVxdWVuY3kgY2hhbmdlZCBmcm9tIDMzMC8xNjUgdG8gMzI5LzE2NCBNSHoqLwotI2RlZmluZSBNMl9EUExMX01VTFRfMTMJCSAgICAgICAgKDc2IDw8IDEyKQotI2RlZmluZSBNMl9EUExMX0RJVl8xMwkJICAgICAgICAoMiA8PCA4KQotI2RlZmluZSBNMl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU0yX0RQTExfRElWXzEzIHwgTTJfRFBMTF9NVUxUXzEzIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTMKLQotI2RlZmluZSBNMl9EUExMX01VTFRfMTkJCSAgICAgICAgKDE3IDw8IDEyKQotI2RlZmluZSBNMl9EUExMX0RJVl8xOQkJICAgICAgICAoMCA8PCA4KQotI2RlZmluZSBNMl9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU0yX0RQTExfRElWXzE5IHwgTTJfRFBMTF9NVUxUXzE5IHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgotCi0vKiBib290IChib290KSAqLwotI2RlZmluZSBNQl9EUExMX01VTFQJCQkoMSA8PCAxMikKLSNkZWZpbmUgTUJfRFBMTF9ESVYJCQkoMCA8PCA4KQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAotCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTIKLQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAotCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTMKLQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAotCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTkKLQotLyoKLSAqIDI0MzAgLSBjaGFzc2lzIChzZWRuYSkKLSAqIDE2NSAocmF0aW8xKSBzYW1lIGFzIGFib3ZlICMyCi0gKiAxNTAgKHJhdGlvMSkKLSAqIDEzMyAocmF0aW8yKSBzYW1lIGFzIGFib3ZlICM0Ci0gKiAxMTAgKHJhdGlvMikgc2FtZSBhcyBhYm92ZSAjMwotICogMTA0IChyYXRpbzIpCi0gKiBib290IChib290KQotICovCi0KLS8qIFBSQ00gSSB0YXJnZXQgRFBMTCA9IDIqMzMwTUh6ID0gNjYwTUh6ICovCi0jZGVmaW5lIE1JX0RQTExfTVVMVF8xMgkJCSg1NSA8PCAxMikKLSNkZWZpbmUgTUlfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQotI2RlZmluZSBNSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU1JX0RQTExfRElWXzEyIHwgTUlfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTIKLQotLyoKLSAqIDI0MjAgRXF1aXZhbGVudCAtIG1vZGUgcmVnaXN0ZXJzCi0gKiBQUkNNIElJICwgdGFyZ2V0IERQTEwgPSAyKjMwME1IeiA9IDYwME1IegotICovCi0jZGVmaW5lIE1JSV9EUExMX01VTFRfMTIJCSg1MCA8PCAxMikKLSNkZWZpbmUgTUlJX0RQTExfRElWXzEyCQkJKDEgPDwgOCkKLSNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTUlJX0RQTExfRElWXzEyIHwgTUlJX0RQTExfTVVMVF8xMiB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCi0jZGVmaW5lIE1JSV9EUExMX01VTFRfMTMJCSgzMDAgPDwgMTIpCi0jZGVmaW5lIE1JSV9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQotI2RlZmluZSBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQlNSUlfRFBMTF9ESVZfMTMgfCBNSUlfRFBMTF9NVUxUXzEzIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTMKLQotLyogUFJDTSBJSUkgdGFyZ2V0IERQTEwgPSAyKjI2NiA9IDUzMk1IeiovCi0jZGVmaW5lIE1JSUlfRFBMTF9NVUxUXzEyCQkoMTMzIDw8IDEyKQotI2RlZmluZSBNSUlJX0RQTExfRElWXzEyCQkoNSA8PCA4KQotI2RlZmluZSBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTUlJSV9EUExMX0RJVl8xMiB8IE1JSUlfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTIKLSNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTMJCSgyNjYgPDwgMTIpCi0jZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTMJCSgxMiA8PCA4KQotI2RlZmluZSBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTUlJSV9EUExMX0RJVl8xMyB8IE1JSUlfRFBMTF9NVUxUXzEzIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTMKLQotLyogUFJDTSBWSUkgKGJvb3QgYnlwYXNzKSAqLwotI2RlZmluZSBNVklJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwKLSNkZWZpbmUgTVZJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCi0KLS8qIEhpZ2ggYW5kIGxvdyBvcGVyYXRpb24gdmFsdWUgKi8KLSNkZWZpbmUgTVhfQ0xLU0VMMl9QTExfMnhfVkFMCQkoMiA8PCAwKQotI2RlZmluZSBNWF9DTEtTRUwyX1BMTF8xeF9WQUwJCSgxIDw8IDApCi0KLS8qIE1QVSBzcGVlZCBkZWZpbmVzICovCi0jZGVmaW5lIFMxMk0JMTIwMDAwMDAKLSNkZWZpbmUgUzEzTQkxMzAwMDAwMAotI2RlZmluZSBTMTlNCTE5MjAwMDAwCi0jZGVmaW5lIFMyNk0JMjYwMDAwMDAKLSNkZWZpbmUgUzEwME0JMTAwMDAwMDAwCi0jZGVmaW5lIFMxMzNNCTEzMzAwMDAwMAotI2RlZmluZSBTMTUwTQkxNTAwMDAwMDAKLSNkZWZpbmUgUzE2NE0JMTY0MDAwMDAwCi0jZGVmaW5lIFMxNjVNCTE2NTAwMDAwMAotI2RlZmluZSBTMTk5TQkxOTkwMDAwMDAKLSNkZWZpbmUgUzIwME0JMjAwMDAwMDAwCi0jZGVmaW5lIFMyNjZNCTI2NjAwMDAwMAotI2RlZmluZSBTMzAwTQkzMDAwMDAwMDAKLSNkZWZpbmUgUzMyOU0JMzI5MDAwMDAwCi0jZGVmaW5lIFMzMzBNCTMzMDAwMDAwMAotI2RlZmluZSBTMzk5TQkzOTkwMDAwMDAKLSNkZWZpbmUgUzQwME0JNDAwMDAwMDAwCi0jZGVmaW5lIFM1MzJNCTUzMjAwMDAwMAotI2RlZmluZSBTNjAwTQk2MDAwMDAwMDAKLSNkZWZpbmUgUzY1OE0JNjU4MDAwMDAwCi0jZGVmaW5lIFM2NjBNCTY2MDAwMDAwMAotI2RlZmluZSBTNzk4TQk3OTgwMDAwMDAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgotICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBVLAotICogQ01fQ0xLU0VMX0RTUCwgQ01fQ0xLU0VMX0dGWCwgQ01fQ0xLU0VMMV9DT1JFLCBDTV9DTEtTRUwxX1BMTCwKLSAqIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCi0gKgotICogRmlsbGluZyBpbiB0YWJsZSBiYXNlZCBvbiBINCBib2FyZHMgYW5kIDI0MzAtU0RQcyB2YXJpYW50cyBhdmFpbGFibGUuCi0gKiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgbW9yZSByYXRlcyBjb21iaW5hdGlvbnMgd2hpY2ggY291bGQgYmUgZGVmaW5lZC4KLSAqCi0gKiBXaGVuIG11bHRpcGxlIHZhbHVlcyBhcmUgZGVmaW5lZCB0aGUgc3RhcnQgdXAgd2lsbCB0cnkgYW5kIGNob29zZSB0aGUKLSAqIGZhc3Rlc3Qgb25lLiBJZiBhICdmYXN0JyB2YWx1ZSBpcyBkZWZpbmVkLCB0aGVuIGF1dG9tYXRpY2FsbHksIHRoZSAvMgotICogb25lIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBpdCBjYW4gYmUgdXNlZC4JR2VuZXJhbGx5IGhhdmluZyBtb3JlIHRoYXQKLSAqIG9uZSBmYXN0IHNldCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMgdGltaW5ncyBuZWVkIHRvIGJlIGNoYW5nZWQKLSAqIHRvIGNoYW5nZSB0aGUgc2V0LgkgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgYnlwYXNzIHNldHRpbmcgd2hpY2ggaXMKLSAqIGF2YWlsYmxlIGZvciBsb3cgcG93ZXIgYnlwYXNzLgotICoKLSAqIE5vdGU6IFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc29ydGVkLCBmYXN0ZXN0IHRvIHNsb3dlc3QuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHN0cnVjdCBwcmNtX2NvbmZpZyByYXRlX3RhYmxlW10gPSB7Ci0JLyogUFJDTSBJIC0gRkFTVCAqLwotCXtTMTJNLCBTNjYwTSwgUzMzME0sIFJJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzMwTUh6IEFSTSAqLwotCQlSSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzE2NU1IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCS8qIFBSQ00gSUkgLSBGQVNUICovCi0Je1MxMk0sIFM2MDBNLCBTMzAwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzAwTUh6IEFSTSAqLwotCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMDBNSHosCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQl7UzEzTSwgUzYwME0sIFMzMDBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMDBNSHogQVJNICovCi0JCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCS8qIFBSQ00gSUlJIC0gRkFTVCAqLwotCXtTMTJNLCBTNTMyTSwgUzI2Nk0sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCi0JCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQl7UzEzTSwgUzUzMk0sIFMyNjZNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLwotCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTSBJSSAtIFNMT1cgKi8KLQl7UzEyTSwgUzMwME0sIFMxNTBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNTBNSHogQVJNICovCi0JCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCXtTMTNNLCBTMzAwTSwgUzE1ME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE1ME1IeiBBUk0gKi8KLQkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTAwTUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTSBJSUkgLSBTTE9XICovCi0Je1MxMk0sIFMyNjZNLCBTMTMzTSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KLQkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCXtTMTNNLCBTMjY2TSwgUzEzM00sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCi0JCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQkvKiBQUkNNLVZJSSAoYm9vdC1ieXBhc3MpICovCi0Je1MxMk0sIFMxMk0sIFMxMk0sIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1IeiBBUk0qLwotCQlSVklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSVklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfQllQQVNTLAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTS1WSUkgKGJvb3QtYnlwYXNzKSAqLwotCXtTMTNNLCBTMTNNLCBTMTNNLCBSVklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTNNSHogQVJNICovCi0JCVJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTVZJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQkvKiBQUkNNICM0IC0gcmF0aW8yIChFUzIuMSkgLSBGQVNUICovCi0Je1MxM00sIFM3OThNLCBTMzk5TSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzOTlNSHogQVJNICovCi0JCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTRfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00gIzIgLSByYXRpbzEgKEVTMikgLSBGQVNUICovCi0Je1MxM00sIFM2NThNLCBTMzI5TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMzBNSHogQVJNICovCi0JCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMXzE2NU1IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gRkFTVCAqLwotCXtTMTNNLCBTNTMyTSwgUzI2Nk0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLwotCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAjNWIgLSByYXRpbzEgLSBGQVNUICovCi0Je1MxM00sIFM0MDBNLCBTMjAwTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyMDBNSHogQVJNICovCi0JCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKLQkJU0RSQ19SRlJfQ1RSTF8xMDBNSHosCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQkvKiBQUkNNICM0IC0gcmF0aW8xIChFUzIuMSkgLSBTTE9XICovCi0Je1MxM00sIFMzOTlNLCBTMTk5TSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyMDBNSHogQVJNICovCi0JCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTRfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00gIzIgLSByYXRpbzEgKEVTMikgLSBTTE9XICovCi0Je1MxM00sIFMzMjlNLCBTMTY0TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNjVNSHogQVJNICovCi0JCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMXzE2NU1IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gU0xPVyAqLwotCXtTMTNNLCBTMjY2TSwgUzEzM00sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLwotCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAjNWIgLSByYXRpbzEgLSBTTE9XKi8KLQl7UzEzTSwgUzIwME0sIFMxMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEwME1IeiBBUk0gKi8KLQkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KLQl7UzEzTSwgUzEzTSwgUzEzTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxM01oeiAqLwotCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKLQkJU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQkvKiBQUkNNLWJvb3QvYnlwYXNzICovCi0Je1MxMk0sIFMxMk0sIFMxMk0sIFJCX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNaHogKi8KLQkJUkJfQ01fQ0xLU0VMX0RTUF9WQUwsIFJCX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSQl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUkJfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNfUkZSX0NUUkxfQllQQVNTLAotCQlSQVRFX0lOXzI0M1h9LAotCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjR4eCBjbG9jayB0cmVlLgotICoKLSAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55Ci0gKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KLSAqCXN3aXRjaCBzb3VyY2VzLgotICoKLSAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKLSAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KLSAqCi0gKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKLSAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCi0gKgotICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcwotICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jawotICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKLSAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCi0gKgljbG9ja3MuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7Ci0JLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfY2sgPSB7Ci0JLm5hbWUJCT0gInNlY3VyZV8zMmtfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yYXRlCQk9IDMyNzY4LAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotfTsKLQotLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KLQkubmFtZQkJPSAib3NjX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb3NjY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCi19OwotCi0vKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCi0JLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLwotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9zY19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9zeXNfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLwotCS5uYW1lCQk9ICJhbHRfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yYXRlCQk9IDU0MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotfTsKLQotLyoKLSAqIEFuYWxvZyBkb21haW4gcm9vdCBzb3VyY2UgY2xvY2tzCi0gKi8KLQotLyogZHBsbF9jaywgaXMgYnJva2VuIG91dCBpbiB0byBzcGVjaWFsIGNhc2VzIHRocm91Z2ggY2xrc2VsICovCi0vKiBSRVZJU0lUOiBSYXRlIGNoYW5nZXMgb24gZHBsbF9jayB0cmlnZ2VyIGEgZnVsbCBzZXQgY2hhbmdlLgkuLi4KLSAqIGRlYWwgd2l0aCB0aGlzCi0gKi8KLQotc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbF9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKLQkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJCT0gJnN5c19jaywKLQkuY2xrX3JlZgkJPSAmc3lzX2NrLAotCS5jb250cm9sX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAotCS5lbmFibGVfbWFzawkJPSBPTUFQMjRYWF9FTl9EUExMX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyCQk9IDEwMjQsCi0JLm1pbl9kaXZpZGVyCQk9IDEsCi0JLm1heF9kaXZpZGVyCQk9IDE2LAotCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLS8qCi0gKiBYWFggQ2Fubm90IGFkZCByb3VuZF9yYXRlIGhlcmUgeWV0LCBhcyB0aGlzIGlzIHN0aWxsIGEgY29tcG9zaXRlIGNsb2NrLAotICogbm90IGp1c3QgYSBEUExMCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGxfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCi0JLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2RwbGxjb3JlX3JlY2FsYywKLQkuc2V0X3JhdGUJPSAmb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0gewotCS5uYW1lCQk9ICJhcGxsOTZfY2siLAotCS5vcHMJCT0gJmNsa29wc19maXhlZCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLnJhdGUJCT0gOTYwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXBsbDU0X2NrID0gewotCS5uYW1lCQk9ICJhcGxsNTRfY2siLAotCS5vcHMJCT0gJmNsa29wc19maXhlZCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLnJhdGUJCT0gNTQwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl81NE1fUExMX1NISUZULAotfTsKLQotLyoKLSAqIFBSQ00gZGlnaXRhbCBiYXNlIHNvdXJjZXMKLSAqLwotCi0vKiBmdW5jXzU0bV9jayAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FwbGw1NF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzU0bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmYXBsbDU0X2NrLCAucmF0ZXMgPSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXMsIH0sCi0JeyAucGFyZW50ID0gJmFsdF9jaywJLnJhdGVzID0gZnVuY181NG1fYWx0X3JhdGVzLCB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNTRtX2NrID0gewotCS5uYW1lCQk9ICJmdW5jXzU0bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLAotCS5jbGtzZWwJCT0gZnVuY181NG1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewotCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIGZ1bmNfOTZtX2NrICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FwbGw5Nl9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzk2bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmYXBsbDk2X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hcGxsOTZfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hbHRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoZSBwYXJlbnQgb2YgdGhpcyBjbG9jayBpcyBub3Qgc2VsZWN0YWJsZSBvbiAyNDIwLiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZnVuY185Nm1fY2sgPSB7Ci0JLm5hbWUJCT0gImZ1bmNfOTZtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZhcGxsOTZfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF85Nk1fU09VUkNFLAotCS5jbGtzZWwJCT0gZnVuY185Nm1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotLyogZnVuY180OG1fY2sgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY180OG1fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCi0JLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY18xMm1fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5maXhlZF9kaXYJPSA0LAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotLyogU2VjdXJlIHRpbWVyLCBvbmx5IGF2YWlsYWJsZSBpbiBzZWN1cmUgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9vc2NfY2sgPSB7Ci0JLm5hbWUJCT0gImNrX3dkdDFfb3NjIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJm9zY19jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoZSBjb21tb25fY2xrb3V0KiBjbGtzZWxfcmF0ZSBzdHJ1Y3RzIGFyZSBjb21tb24gdG8KLSAqIHN5c19jbGtvdXQsIHN5c19jbGtvdXRfc3JjLCBzeXNfY2xrb3V0MiwgYW5kIHN5c19jbGtvdXQyX3NyYy4KLSAqIHN5c19jbGtvdXQyXyogYXJlIDI0MjAtb25seSwgc28gdGhlCi0gKiBjbGtzZWxfcmF0ZSBmbGFncyBmaWVsZHMgYXJlIGluYWNjdXJhdGUgZm9yIHRob3NlIGNsb2Nrcy4gVGhpcyBpcwotICogaGFybWxlc3Mgc2luY2UgYWNjZXNzIHRvIHRob3NlIGNsb2NrcyBhcmUgZ2F0ZWQgYnkgdGhlIHN0cnVjdCBjbGsKLSAqIGZsYWdzIGZpZWxkcywgd2hpY2ggbWFyayB0aGVtIGFzIDI0MjAtb25seS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZnVuY181NG1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzU0bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dF9zcmMgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXRfc3JjIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTEtPVVRfRU5fU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLT1VUX1NPVVJDRV9NQVNLLAotCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2Nsa291dF9zcmMsIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jbGtvdXRfc3JjLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDJfc3JjID0gewotCS5uYW1lCQk9ICJzeXNfY2xrb3V0Ml9zcmMiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0NMS09VVDJfRU5fU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9TT1VSQ0VfTUFTSywKLQkuY2xrc2VsCQk9IGNvbW1vbl9jbGtvdXRfc3JjX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtvdXQyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0Ml9zcmMsIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzeXNfY2xrb3V0Ml9zcmMsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS09VVDJfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVsX2NrID0gewotCS5uYW1lCQk9ICJlbXVsX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU1VTEFUSU9OX0VOX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0KLX07Ci0KLS8qCi0gKiBNUFUgY2xvY2sgZG9tYWluCi0gKglDbG9ja3M6Ci0gKgkJTVBVX0ZDTEssIE1QVV9JQ0xLCi0gKgkJSU5UX01fRkNMSywgSU5UX01fSV9DTEsKLSAqCi0gKiAtIEluZGl2aWR1YWwgY2xvY2tzIGFyZSBoYXJkd2FyZSBtYW5hZ2VkLgotICogLSBCYXNlIGRpdmlkZXIgY29tZXMgZnJvbTogQ01fQ0xLU0VMX01QVQotICoKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBtcHVfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbXB1X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBtcHVfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXB1X2NrID0gewkvKiBDb250cm9sIGNwdSAqLwotCS5uYW1lCQk9ICJtcHVfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9NUFVfTUFTSywKLQkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogRFNQICgyNDMwLUlWQTIuMSkgKDI0MjAtVU1BK0lWQTEpIGNsb2NrIGRvbWFpbgotICogQ2xvY2tzOgotICoJMjQzMDogSVZBMi4xX0ZDTEsgKHJlYWxseSBqdXN0IERTUF9GQ0xLKSwgSVZBMi4xX0lDTEsKLSAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAotICoKLSAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKLSAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCi0gKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKLSAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa2RtX25hbWUJPSAiZHNwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIERTUCBpbnRlcmZhY2UgY2xvY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNwX2lyYXRlX2lja19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9pcmF0ZV9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRzcF9mY2ssIC5yYXRlcyA9IGRzcF9pcmF0ZV9pY2tfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2lyYXRlX2ljayA9IHsKLQkubmFtZQkJPSAiZHNwX2lyYXRlX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHNwX2ZjaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfaXJhdGVfaWNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQkgICAgICA9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIDI0MjAgb25seSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKLQkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLwotfTsKLQotLyogMjQzMCBvbmx5IC0gRU5fRFNQIGNvbnRyb2xzIGJvdGggZHNwIGZjbGsgYW5kIGljbGsgb24gMjQzMCAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKLQkubmFtZQkJPSAiaXZhMl8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCi19OwotCi0vKgotICogVGhlIElWQTEgaXMgYW4gQVJNNyBjb3JlIG9uIHRoZSAyNDIwIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aAotICogdGhlIEM1NHgsIGJ1dCB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlIERTUCBwb3dlcmRvbWFpbi4gIERvZXMgbm90Ci0gKiBleGlzdCBvbiBsYXRlciBPTUFQcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9pZmNrID0gewotCS5uYW1lCQk9ICJpdmExX2lmY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ09ORklHX1BBUlRJQ0lQQU5UIHwgREVMQVlFRF9BUFAsCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0gewotCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZpdmExX2lmY2ssCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9NUFVfU0hJRlQsCi0JLmZpeGVkX2Rpdgk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCi19OwotCi0vKgotICogTDMgY2xvY2sgZG9tYWluCi0gKiBMMyBjbG9ja3MgYXJlIHVzZWQgZm9yIGJvdGggaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsIGNsb2NrcyB0bwotICogbXVsdGlwbGUgZW50aXRpZXMuIFNvbWUgb2YgdGhlc2UgY2xvY2tzIGFyZSBjb21wbGV0ZWx5IG1hbmFnZWQKLSAqIGJ5IGhhcmR3YXJlLCBhbmQgc29tZSBvdGhlcnMgYWxsb3cgc29mdHdhcmUgY29udHJvbC4gSGFyZHdhcmUKLSAqIG1hbmFnZWQgb25lcyBnZW5lcmFsIGFyZSBiYXNlZCBvbiBkaXJlY3RseSBDTEtfUkVRIHNpZ25hbHMgYW5kCi0gKiB2YXJpb3VzIGF1dG8gaWRsZSBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uYWwgc3BlYyBzZXRzIG1hbnkgb2YgdGhlc2UKLSAqIGFzICd0aWUtaGlnaCcgZm9yIHRoZWlyIGVuYWJsZXMuCi0gKgotICogSS1DTE9DS1M6Ci0gKglMMy1JbnRlcmNvbm5lY3QsIFNNUywgR1BNQywgU0RSQywgT0NNX1JBTSwgT0NNX1JPTSwgU0RNQQotICoJQ0FNLCBIUy1VU0IuCi0gKiBGLUNMT0NLCi0gKglTU0kuCi0gKgotICogR1BNQyBtZW1vcmllcyBhbmQgU0RSQyBoYXZlIHRpbWluZyBhbmQgY2xvY2sgc2Vuc2l0aXZlIHJlZ2lzdGVycyB3aGljaAotICogbWF5IHZlcnkgd2VsbCBuZWVkIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBjbG9jayBjaGFuZ2VzLiBDdXJyZW50bHkgZm9yIGxvdwotICogb3BlcmF0aW5nIHBvaW50cywgdGhlc2UgYXJlIHRha2VuIGNhcmUgb2YgaW4gc2xlZXAuUy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb3JlX2wzX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29yZV9sM19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gY29yZV9sM19jb3JlX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCi0JLm5hbWUJCT0gImNvcmVfbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKLQkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotLyogdXNiX2w0X2ljayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2JfbDRfaWNrX2NvcmVfbDNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IHVzYl9sNF9pY2tfY29yZV9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLS8qIEl0IGlzIHVuY2xlYXIgZnJvbSBUUk0gd2hldGhlciB1c2JfbDRfaWNrIGlzIHJlYWxseSBpbiBMMyBvciBMNCBjbGtkbSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLwotCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1VTQl9NQVNLLAotCS5jbGtzZWwJCT0gdXNiX2w0X2lja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KLSAqCi0gKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCi0gKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KLSAqIHRoaXMgZG9tYWluLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGw0X2NvcmVfbDNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGw0X2NvcmVfbDNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCi0JLm5hbWUJCT0gImw0X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCi0JLmNsa3NlbAkJPSBsNF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKLSAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKLSAqIGRvbWFpbi4KLSAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSwotICoKLSAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0gewotCS5uYW1lCQk9ICJzc2lfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qCi0gKiBQcmVzdW1hYmx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgU1NJX0lDTEsuCi0gKiBUUk0gY29udHJhZGljdHMgaXRzZWxmIG9uIHdoYXQgY2xvY2tkb21haW4gU1NJX0lDTEsgaXMgaW4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLQotLyoKLSAqIEdGWCBjbG9jayBkb21haW4KLSAqCUNsb2NrczoKLSAqIEdGWF9GQ0xLLCBHRlhfSUNMSwotICogR0ZYX0NHMSgyZCksIEdGWF9DRzIoM2QpCi0gKgotICogR0ZYX0ZDTEsgcnVucyBmcm9tIEwzLCBhbmQgaXMgZGl2aWRlZCBieSAoMSwyLDMsNCkKLSAqIFRoZSAyZCBhbmQgM2QgY2xvY2tzIHJ1biBhdCBhIGhhcmR3YXJlIGRldGVybWluZWQKLSAqIGRpdmlkZWQgdmFsdWUgb2YgZmNsay4KLSAqCi0gKi8KLS8qIFhYWCBSRVZJU0lUOiBHRlggY2xvY2sgaXMgcGFydCBvZiBDT05GSUdfUEFSVElDSVBBTlQsIG5vPyBkb3VibGVjaGVjay4gKi8KLQotLyogVGhpcyBjbGtzZWwgc3RydWN0IGlzIHNoYXJlZCBiZXR3ZWVuIGdmeF8zZF9mY2sgYW5kIGdmeF8yZF9mY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGdmeF9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGdmeF9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8zZF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF8zZF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAotCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfMmRfZmNrID0gewotCS5uYW1lCQk9ICJnZnhfMmRfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMkRfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQX0NMS1NFTF9HRlhfTUFTSywKLQkuY2xrc2VsCQk9IGdmeF9mY2tfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKLQkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogTW9kZW0gY2xvY2sgZG9tYWluICgyNDMwKQotICoJQ0xPQ0tTOgotICoJCU1ETV9PU0NfQ0xLCi0gKgkJTURNX0lDTEsKLSAqIFRoZXNlIGNsb2NrcyBhcmUgdXNhYmxlIGluIGNoYXNzaXMgbW9kZSBvbmx5LgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG1kbV9pY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1kbV9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IG1kbV9pY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ljayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhIGljayBhbmQgZmNrICovCi0JLm5hbWUJCT0gIm1kbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF9DTEtTRUxfTURNX01BU0ssCi0JLmNsa3NlbAkJPSBtZG1faWNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9vc2NfY2sgPSB7Ci0JLm5hbWUJCT0gIm1kbV9vc2NfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmb3NjX2NrLAotCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX09TQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIERTUyBjbG9jayBkb21haW4KLSAqIENMT0NLczoKLSAqIERTU19MNF9JQ0xLLCBEU1NfTDNfSUNMSywKLSAqIERTU19DTEsxLCBEU1NfQ0xLMiwgRFNTXzU0TUh6X0NMSwotICoKLSAqIERTUyBpcyBib3RoIGluaXRpYXRvciBhbmQgdGFyZ2V0LgotICovCi0vKiBYWFggQWRkIFJBVEVfTk9UX1ZBTElEQVRFRCAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzczFfZmNrX3N5c19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgLnJhdGVzID0gZHNzMV9mY2tfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRzczFfZmNrX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKLQkubmFtZQkJPSAiZHNzMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLwotCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKLQkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzFfTUFTSywKLQkuY2xrc2VsCQk9IGRzczFfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCi0JLm5hbWUJCT0gImRzczJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MyX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0ssCi0JLmNsa3NlbAkJPSBkc3MyX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwotCS5uYW1lCQk9ICJkc3NfNTRtX2ZjayIsCS8qIDU0bSB0diBjbGsgKi8KLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVFZfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qCi0gKiBDT1JFIHBvd2VyIGRvbWFpbiBJQ0xLICYgRkNMSyBkZWZpbmVzLgotICogTWFueSBvZiB0aGUgdGhlc2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBwYXJlbnQuIEVudHJpZXMKLSAqIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhbiBMNCBpbnRlcmZhY2UgcGFyZW50LCBhbmQgbWF5IGhhdmUgbXVsdGlwbGUKLSAqIGZ1bmN0aW9uYWwgY2xvY2sgcGFyZW50cy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfYWx0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcDI0eHhfZ3B0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZmdW5jXzMya19jaywgLnJhdGVzID0gZ3B0XzMya19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZhbHRfY2ssCSAgLnJhdGVzID0gZ3B0X2FsdF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDFfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDJfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0gewotCS5uYW1lCQk9ICJncHQzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0M19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUM19NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0gewotCS5uYW1lCQk9ICJncHQ0X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ0X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0NV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDVfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDVfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0gewotCS5uYW1lCQk9ICJncHQ2X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0Nl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNl9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0gewotCS5uYW1lCQk9ICJncHQ3X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ3X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0OF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDhfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0gewotCS5uYW1lCQk9ICJncHQ5X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0OV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTBfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEwX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMF9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEyX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKLQkubmFtZQkJPSAibXB1X3dkdF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKLQkubmFtZQkJPSAibXB1X3dkdF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7Ci0JLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zMktTWU5DX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKLQkubmFtZQkJPSAid2R0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKLQkubmFtZQkJPSAiaWNyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKLQkubmFtZQkJPSAiY2FtX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQotICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50Ci0gKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7Ci0JLm5hbWUJCT0gImNhbV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKLQkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0gewotCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAid2R0NF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NU1BST19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0gewotCS5uYW1lCQk9ICJtc3Byb19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0gewotCS5uYW1lCQk9ICJtbWNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX01NQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKLQkubmFtZQkJPSAiZmFjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7Ci0JLm5hbWUJCT0gImZhY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlYWNfaWNrID0gewotCS5uYW1lCQk9ICJlYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKLQkubmFtZQkJPSAiZWFjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9FQUNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7Ci0JLm5hbWUJCT0gImhkcV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewotCS5uYW1lCQk9ICJoZHFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyNDMwX2kyY2hzX3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKLQkubmFtZQkJPSAiaTJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewotCS5uYW1lCQk9ICJncG1jX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7Ci0JLm5hbWUJCT0gInNkbWFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewotCS5uYW1lCQk9ICJzZG1hX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB2bHlucV9mY2tfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB2bHlucV9mY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAxOCwgLnZhbCA9IDE4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHZseW5xX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IHZseW5xX2Zja185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSB2bHlucV9mY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfZmNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS1NFTF9WTFlOUV9NQVNLLAotCS5jbGtzZWwJCT0gdmx5bnFfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewotCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fU0RSQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9ERVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1JOR19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9BRVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInBrYV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0gewotCS5uYW1lCQk9ICJ1c2JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0gewotCS5uYW1lCQk9ICJ1c2Joc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjJfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgotICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKLSAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KLSAqCi0gKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAotICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAotICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycwotICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAotICogdGhlIGJ1cy4KLSAqCi0gKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAotICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKLQkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5wYXJlbnQJCT0gJm1wdV9jaywJLyogSW5kZXhlZCBieSBtcHUgc3BlZWQsIG5vIHBhcmVudCAqLwotCS5yZWNhbGMJCT0gJm9tYXAyX3RhYmxlX21wdV9yZWNhbGMsCS8qIHNldHMgYXJlIGtleWVkIG9uIG1wdSByYXRlICovCi0JLnNldF9yYXRlCT0gJm9tYXAyX3NlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlM2ZiNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmMKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiAgQ29udGFjdHM6CisgKiAgUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogIFBhdWwgV2FsbXNsZXkKKyAqCisgKiAgQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqICBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KKyNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8cGxhdC9zZHJjLmg+CisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJvcHAyeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisKKworLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLworI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCisjZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMworCisvKiBDTV9DTEtTRUwxX1BMTC5BUExMU19DTEtJTiBvcHRpb25zICgyNFhYKSAqLworI2RlZmluZSBBUExMU19DTEtJTl8xOV8yTUhaCQkwCisjZGVmaW5lIEFQTExTX0NMS0lOXzEzTUhaCQkyCisjZGVmaW5lIEFQTExTX0NMS0lOXzEyTUhaCQkzCisKKy8qICNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEgKi8JCS8qIEV4cGVyaW1lbnRhbCAqLworCitjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7Citjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnJhdGVfdGFibGU7CisKK3N0cnVjdCBjbGsgKnZjbGssICpzY2xrLCAqZGNsazsKKwordm9pZCBfX2lvbWVtICpwcmNtX2Nsa3NyY19jdHJsOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAyNHh4IHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBvbWFwMjQzMF9jbGtfaTJjaHNfZmluZF9pZGxlc3QgLSByZXR1cm4gQ01fSURMRVNUIGluZm8gZm9yIDI0MzAgSTJDSFMKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCisgKiBAaWRsZXN0X3JlZzogdm9pZCBfX2lvbWVtICoqIHRvIHN0b3JlIENNX0lETEVTVCByZWcgYWRkcmVzcyBpbnRvCisgKiBAaWRsZXN0X2JpdDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgYml0IHNoaWZ0IGludG8KKyAqCisgKiBPTUFQMjQzMCBJMkNIUyBDTV9JRExFU1QgYml0cyBhcmUgaW4gQ01fSURMRVNUMV9DT1JFLCBidXQgdGhlCisgKiBDTV8qQ0xLRU4gYml0cyBhcmUgaW4gQ01fe0ksRn1DTEtFTjJfQ09SRS4gIFRoaXMgY3VzdG9tIGZ1bmN0aW9uCisgKiBwYXNzZXMgYmFjayB0aGUgY29ycmVjdCBDTV9JRExFU1QgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgSTJDSFMKKyAqIG1vZHVsZXMuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXAyNDMwX2Nsa19pMmNoc19maW5kX2lkbGVzdChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgIHZvaWQgX19pb21lbSAqKmlkbGVzdF9yZWcsCisJCQkJCSAgIHU4ICppZGxlc3RfYml0KQoreworCSppZGxlc3RfcmVnID0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JRExFU1QpOworCSppZGxlc3RfYml0ID0gY2xrLT5lbmFibGVfYml0OworfQorCisvKiAyNDMwIEkyQ0hTIGhhcyBub24tc3RhbmRhcmQgSURMRVNUIHJlZ2lzdGVyICovCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMjQzMF9pMmNoc193YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBvbWFwMjQzMF9jbGtfaTJjaHNfZmluZF9pZGxlc3QsCisJLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCit9OworCisvKioKKyAqIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlIC0gcmV0dXJuIHRoZSBDT1JFX0NMSyByYXRlCisgKiBAY2xrOiBwb2ludGVyIHRvIHRoZSBjb21iaW5lZCBkcGxsX2NrICsgY29yZV9jayAoY3VycmVudGx5ICJkcGxsX2NrIikKKyAqCisgKiBSZXR1cm5zIHRoZSBDT1JFX0NMSyByYXRlLiAgQ09SRV9DTEsgY2FuIGhhdmUgb25lIG9mIHRocmVlIHJhdGUKKyAqIHNvdXJjZXMgb24gT01BUDJ4eHg6IHRoZSBEUExMIENMS09VVCByYXRlLCBEUExMIENMS09VVFgyLCBvciAzMktIegorICogKHRoZSBsYXR0ZXIgaXMgdW51c3VhbCkuICBUaGlzIGN1cnJlbnRseSBzaG91bGQgYmUgY2FsbGVkIHdpdGgKKyAqIHN0cnVjdCBjbGsgKmRwbGxfY2ssIHdoaWNoIGlzIGEgY29tcG9zaXRlIGNsb2NrIG9mIGRwbGxfY2sgYW5kCisgKiBjb3JlX2NrLgorICovCit1bnNpZ25lZCBsb25nIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlsb25nIGxvbmcgY29yZV9jbGs7CisJdTMyIHY7CisKKwljb3JlX2NsayA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKworCXYgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJdiAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKKworCWlmICh2ID09IENPUkVfQ0xLX1NSQ18zMkspCisJCWNvcmVfY2xrID0gMzI3Njg7CisJZWxzZQorCQljb3JlX2NsayAqPSB2OworCisJcmV0dXJuIGNvcmVfY2xrOworfQorCitzdGF0aWMgaW50IG9tYXAyX2VuYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBwY2M7CisKKwlwY2MgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKKworCV9fcmF3X3dyaXRlbChwY2MgJiB+T01BUF9BVVRPRVhUQ0xLTU9ERV9NQVNLLCBwcmNtX2Nsa3NyY19jdHJsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9kaXNhYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHBjYzsKKworCXBjYyA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOworCisJX19yYXdfd3JpdGVsKHBjYyB8IE9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29zY2NrID0geworCS5lbmFibGUJCT0gb21hcDJfZW5hYmxlX29zY19jaywKKwkuZGlzYWJsZQk9IG9tYXAyX2Rpc2FibGVfb3NjX2NrLAorfTsKKworI2lmZGVmIE9MRF9DSworLyogUmVjYWxjdWxhdGUgU1lTVF9DTEsgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgZGl2ID0gUFJDTV9DTEtTUkNfQ1RSTDsKKwlkaXYgJj0gKDEgPDwgNykgfCAoMSA8PCA2KTsJLyogVGVzdCBpZiBleHQgY2xrIGRpdmlkZWQgYnkgMSBvciAyICovCisJZGl2ID4+PSBjbGstPnJhdGVfb2Zmc2V0OworCWNsay0+cmF0ZSA9IChjbGstPnBhcmVudC0+cmF0ZSAvIGRpdik7CisJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKyNlbmRpZgkvKiBPTERfQ0sgKi8KKworLyogRW5hYmxlIGFuIEFQTEwgaWYgb2ZmICovCitzdGF0aWMgaW50IG9tYXAyX2Nsa19hcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIHUzMiBzdGF0dXNfbWFzaykKK3sKKwl1MzIgY3ZhbCwgYXBsbF9tYXNrOworCisJYXBsbF9tYXNrID0gRU5fQVBMTF9MT0NLRUQgPDwgY2xrLT5lbmFibGVfYml0OworCisJY3ZhbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisKKwlpZiAoKGN2YWwgJiBhcGxsX21hc2spID09IGFwbGxfbWFzaykKKwkJcmV0dXJuIDA7ICAgLyogYXBsbCBhbHJlYWR5IGVuYWJsZWQgKi8KKworCWN2YWwgJj0gfmFwbGxfbWFzazsKKwljdmFsIHw9IGFwbGxfbWFzazsKKwljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKKworCW9tYXAyX2NtX3dhaXRfaWRsZXN0KE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLCBzdGF0dXNfbWFzaywKKwkJCSAgICAgY2xrLT5uYW1lKTsKKworCS8qCisJICogUkVWSVNJVDogU2hvdWxkIHdlIHJldHVybiBhbiBlcnJvciBjb2RlIGlmIG9tYXAyX3dhaXRfY2xvY2tfcmVhZHkoKQorCSAqIGZhaWxzPworCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa19hcGxsOTZfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb21hcDJfY2xrX2FwbGxfZW5hYmxlKGNsaywgT01BUDI0WFhfU1RfOTZNX0FQTEwpOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa19hcGxsNTRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb21hcDJfY2xrX2FwbGxfZW5hYmxlKGNsaywgT01BUDI0WFhfU1RfNTRNX0FQTEwpOworfQorCisvKiBTdG9wIEFQTEwgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBjdmFsOworCisJY3ZhbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisJY3ZhbCAmPSB+KEVOX0FQTExfTE9DS0VEIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJY21fd3JpdGVfbW9kX3JlZyhjdmFsLCBQTExfTU9ELCBDTV9DTEtFTik7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FwbGw5NiA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2Nsa19hcGxsOTZfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfY2xrX2FwbGxfZGlzYWJsZSwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FwbGw1NCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2Nsa19hcGxsNTRfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfY2xrX2FwbGxfZGlzYWJsZSwKK307CisKKy8qCisgKiBVc2VzIHRoZSBjdXJyZW50IHByY20gc2V0IHRvIHRlbGwgaWYgYSByYXRlIGlzIHZhbGlkLgorICogWW91IGNhbiBnbyBzbG93ZXIsIGJ1dCBub3QgZmFzdGVyIHdpdGhpbiBhIGdpdmVuIHJhdGUgc2V0LgorICovCitsb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKK3sKKwl1MzIgaGlnaCwgbG93LCBjb3JlX2Nsa19zcmM7CisKKwljb3JlX2Nsa19zcmMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJY29yZV9jbGtfc3JjICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOworCisJaWYgKGNvcmVfY2xrX3NyYyA9PSBDT1JFX0NMS19TUkNfRFBMTCkgewkvKiBEUExMIGNsb2Nrb3V0ICovCisJCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkICogMjsKKwkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKKwl9IGVsc2UgewkJCQkvKiBEUExMIGNsb2Nrb3V0IHggMiAqLworCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKKwkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAvIDI7CisJfQorCisjaWZkZWYgRE9XTl9WQVJJQUJMRV9EUExMCisJaWYgKHRhcmdldF9yYXRlID4gaGlnaCkKKwkJcmV0dXJuIGhpZ2g7CisJZWxzZQorCQlyZXR1cm4gdGFyZ2V0X3JhdGU7CisjZWxzZQorCWlmICh0YXJnZXRfcmF0ZSA+IGxvdykKKwkJcmV0dXJuIGhpZ2g7CisJZWxzZQorCQlyZXR1cm4gbG93OworI2VuZGlmCisKK30KKwordW5zaWduZWQgbG9uZyBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShjbGspOworfQorCitpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBjdXJfcmF0ZSwgbG93LCBtdWx0LCBkaXYsIHZhbGlkX3JhdGUsIGRvbmVfcmF0ZTsKKwl1MzIgYnlwYXNzID0gMDsKKwlzdHJ1Y3QgcHJjbV9jb25maWcgdG1wc2V0OworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCisJY3VyX3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShkY2xrKTsKKwltdWx0ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCW11bHQgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CisKKwlpZiAoKHJhdGUgPT0gKGN1cl9yYXRlIC8gMikpICYmIChtdWx0ID09IDIpKSB7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKKwl9IGVsc2UgaWYgKChyYXRlID09IChjdXJfcmF0ZSAqIDIpKSAmJiAobXVsdCA9PSAxKSkgeworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisJfSBlbHNlIGlmIChyYXRlICE9IGN1cl9yYXRlKSB7CisJCXZhbGlkX3JhdGUgPSBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHJhdGUpOworCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKG11bHQgPT0gMSkKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWVsc2UKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCisJCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJCWlmICghZGQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7CisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCAmPSB+KGRkLT5tdWx0X21hc2sgfAorCQkJCQkgICBkZC0+ZGl2MV9tYXNrKTsKKwkJZGl2ID0gKChjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkIC8gMTAwMDAwMCkgLSAxKTsKKwkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgJj0gfk9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOworCQlpZiAocmF0ZSA+IGxvdykgeworCQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsIHw9IENPUkVfQ0xLX1NSQ19EUExMX1gyOworCQkJbXVsdCA9ICgocmF0ZSAvIDIpIC8gMTAwMDAwMCk7CisJCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKKwkJfSBlbHNlIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTDsKKwkJCW11bHQgPSAocmF0ZSAvIDEwMDAwMDApOworCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTEw7CisJCX0KKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChkaXYgPDwgX19mZnMoZGQtPm11bHRfbWFzaykpOworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgfD0gKG11bHQgPDwgX19mZnMoZGQtPmRpdjFfbWFzaykpOworCisJCS8qIFdvcnN0IGNhc2UgKi8KKwkJdG1wc2V0LmJhc2Vfc2RyY19yZnIgPSBTRFJDX1JGUl9DVFJMX0JZUEFTUzsKKworCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLworCQkJYnlwYXNzID0gMTsKKworCQkvKiBGb3Igb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcygpICovCisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKKworCQkvKiBGb3JjZSBkbGwgbG9jayBtb2RlICovCisJCW9tYXAyX3NldF9wcmNtKHRtcHNldC5jbV9jbGtzZWwxX3BsbCwgdG1wc2V0LmJhc2Vfc2RyY19yZnIsCisJCQkgICAgICAgYnlwYXNzKTsKKworCQkvKiBFcnJhdGE6IHJldCBkbGwgZW50cnkgc3RhdGUgKi8KKwkJb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwMl90YWJsZV9tcHVfcmVjYWxjIC0ganVzdCByZXR1cm4gdGhlIE1QVSBzcGVlZAorICogQGNsazogdmlydF9wcmNtX3NldCBzdHJ1Y3QgY2xrCisgKgorICogU2V0IHZpcnRfcHJjbV9zZXQncyByYXRlIHRvIHRoZSBtcHVfc3BlZWQgZmllbGQgb2YgdGhlIGN1cnJlbnQgUFJDTSBzZXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGN1cnJfcHJjbV9zZXQtPm1wdV9zcGVlZDsKK30KKworLyoKKyAqIExvb2sgZm9yIGEgcmF0ZSBlcXVhbCBvciBsZXNzIHRoYW4gdGhlIHRhcmdldCByYXRlIGdpdmVuIGEgY29uZmlndXJhdGlvbiBzZXQuCisgKgorICogV2hhdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpcyAid2hpY2giIGZpZWxkIHJlcHJlc2VudHMgdGhlIGtleSBmaWVsZC4KKyAqIFNvbWUgbWlnaHQgYXJndWUgTDMtRERSLCBvdGhlcnMgQVJNLCBvdGhlcnMgSVZBLiBUaGlzIGNvZGUgaXMgc2ltcGxlIGFuZAorICoganVzdCB1c2VzIHRoZSBBUk0gcmF0ZXMuCisgKi8KK2xvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnB0cjsKKwlsb25nIGhpZ2hlc3RfcmF0ZTsKKwlsb25nIHN5c19ja19yYXRlOworCisJc3lzX2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPm1wdV9zcGVlZDsgcHRyKyspIHsKKwkJaWYgKCEocHRyLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQorCQkJY29udGludWU7CisKKwkJaGlnaGVzdF9yYXRlID0gcHRyLT5tcHVfc3BlZWQ7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+bXB1X3NwZWVkIDw9IHJhdGUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworLyogU2V0cyBiYXNpYyBjbG9ja3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByYXRlICovCitpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGN1cl9yYXRlLCBkb25lX3JhdGUsIGJ5cGFzcyA9IDAsIHRtcDsKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJdW5zaWduZWQgbG9uZyBmb3VuZF9zcGVlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIHN5c19ja19yYXRlOworCisJc3lzX2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPm1wdV9zcGVlZCA8PSByYXRlKSB7CisJCQlmb3VuZF9zcGVlZCA9IHByY20tPm1wdV9zcGVlZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZF9zcGVlZCkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZCBub3Qgc2V0IE1QVSByYXRlIHRvICVsdU1IelxuIiwKKwkJICAgICAgIHJhdGUgLyAxMDAwMDAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY3Vycl9wcmNtX3NldCA9IHByY207CisJY3VyX3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShkY2xrKTsKKworCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlIC8gMikgeworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlICogMikgeworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQorCQkJYnlwYXNzID0gMTsKKworCQlpZiAoKHByY20tPmNtX2Nsa3NlbDJfcGxsICYgT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0spID09CisJCSAgICBDT1JFX0NMS19TUkNfRFBMTF9YMikKKwkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMX1gyOworCQllbHNlCisJCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTDsKKworCQkvKiBNUFUgZGl2aWRlciAqLworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9tcHUsIE1QVV9NT0QsIENNX0NMS1NFTCk7CisKKwkJLyogZHNwICsgaXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9kc3AsCisJCQkJIE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCk7CisKKwkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZ2Z4LCBHRlhfTU9ELCBDTV9DTEtTRUwpOworCisJCS8qIE1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCQl0bXAgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0NMS1NFTDEpICYgT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSzsKKwkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWwxX2NvcmUgfCB0bXAsIENPUkVfTU9ELAorCQkJCSBDTV9DTEtTRUwxKTsKKworCQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9tZG0sCisJCQkJCSBPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpOworCisJCS8qIHgyIHRvIGVudGVyIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisKKwkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCisJCQkgICAgICAgYnlwYXNzKTsKKworCQlvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKCkpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShkb25lX3JhdGUsIDApOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19DUFVfRlJFUQorLyoKKyAqIFdhbGsgUFJDTSByYXRlIHRhYmxlIGFuZCBmaWxsb3V0IGNwdWZyZXEgZnJlcV90YWJsZQorICovCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIGZyZXFfdGFibGVbQVJSQVlfU0laRShyYXRlX3RhYmxlKV07CisKK3ZvaWQgb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJaW50IGkgPSAwOworCisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKworCQkvKiBkb24ndCBwdXQgYnlwYXNzIHJhdGVzIGluIHRhYmxlICovCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQljb250aW51ZTsKKworCQlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKwkJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBwcmNtLT5tcHVfc3BlZWQgLyAxMDAwOworCQlpKys7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZnJlcXVlbmN5ICIKKwkJICAgICAgICJ0YWJsZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CisJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKworCSp0YWJsZSA9ICZmcmVxX3RhYmxlWzBdOworfQorI2VuZGlmCisKK3N0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7CisJLmNsa19lbmFibGUJCT0gb21hcDJfY2xrX2VuYWJsZSwKKwkuY2xrX2Rpc2FibGUJCT0gb21hcDJfY2xrX2Rpc2FibGUsCisJLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAorCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAorCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKKwkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkLAorI2lmZGVmCUNPTkZJR19DUFVfRlJFUQorCS5jbGtfaW5pdF9jcHVmcmVxX3RhYmxlCT0gb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZSwKKyNlbmRpZgorfTsKKworc3RhdGljIHUzMiBvbWFwMl9nZXRfYXBsbF9jbGtpbih2b2lkKQoreworCXUzMiBhcGxscywgc3JhdGUgPSAwOworCisJYXBsbHMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7CisJYXBsbHMgJj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSzsKKwlhcGxscyA+Pj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fU0hJRlQ7CisKKwlpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTlfMk1IWikKKwkJc3JhdGUgPSAxOTIwMDAwMDsKKwllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xM01IWikKKwkJc3JhdGUgPSAxMzAwMDAwMDsKKwllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xMk1IWikKKwkJc3JhdGUgPSAxMjAwMDAwMDsKKworCXJldHVybiBzcmF0ZTsKK30KKworc3RhdGljIHUzMiBvbWFwMl9nZXRfc3lzY2xrZGl2KHZvaWQpCit7CisJdTMyIGRpdjsKKworCWRpdiA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOworCWRpdiAmPSBPTUFQX1NZU0NMS0RJVl9NQVNLOworCWRpdiA+Pj0gT01BUF9TWVNDTEtESVZfU0hJRlQ7CisKKwlyZXR1cm4gZGl2OworfQorCit1bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb21hcDJfZ2V0X2FwbGxfY2xraW4oKSAqIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKK30KKwordW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gb21hcDJfZ2V0X3N5c2Nsa2RpdigpOworfQorCisvKgorICogU2V0IGNsb2NrcyBmb3IgYnlwYXNzIG1vZGUgZm9yIHJlYm9vdCB0byB3b3JrLgorICovCit2b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKK3sKKwl1MzIgcmF0ZTsKKworCWlmICh2Y2xrID09IE5VTEwgfHwgc2NsayA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOworCWNsa19zZXRfcmF0ZSh2Y2xrLCByYXRlKTsKK30KKworLyoKKyAqIFN3aXRjaCB0aGUgTVBVIHJhdGUgaWYgc3BlY2lmaWVkIG9uIGNtZGxpbmUuCisgKiBXZSBjYW5ub3QgZG8gdGhpcyBlYXJseSB1bnRpbCBjbWRsaW5lIGlzIHBhcnNlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcDJfY2xrX2FyY2hfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKnZpcnRfcHJjbV9zZXQsICpzeXNfY2ssICpkcGxsX2NrLCAqbXB1X2NrOworCXVuc2lnbmVkIGxvbmcgc3lzX2NrX3JhdGU7CisKKwlpZiAoIW1wdXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmlydF9wcmNtX3NldCA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwlkcGxsX2NrID0gY2xrX2dldChOVUxMLCAiZHBsbF9jayIpOworCW1wdV9jayA9IGNsa19nZXQoTlVMTCwgIm1wdV9jayIpOworCisJaWYgKGNsa19zZXRfcmF0ZSh2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBtYXRjaGluZyBNUFUgcmF0ZVxuIik7CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJc3lzX2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc3lzX2NrKTsKKworCXByX2luZm8oIlN3aXRjaGVkIHRvIG5ldyBjbG9ja2luZyByYXRlIChDcnlzdGFsL0RQTEwvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCQkoc3lzX2NrX3JhdGUgLyAxMDAwMDAwKSwgKHN5c19ja19yYXRlIC8gMTAwMDAwKSAlIDEwLAorCQkoY2xrX2dldF9yYXRlKGRwbGxfY2spIC8gMTAwMDAwMCksCisJCShjbGtfZ2V0X3JhdGUobXB1X2NrKSAvIDEwMDAwMDApKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvbWFwMl9jbGtfYXJjaF9pbml0KTsKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzVlZmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaApAQCAtMCwwICsxLDQxIEBACisvKgorICogT01BUDIgY2xvY2sgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfMjRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS18yNFhYX0gKKwordW5zaWduZWQgbG9uZyBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3Vuc2lnbmVkIGxvbmcgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3Vuc2lnbmVkIGxvbmcgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3Vuc2lnbmVkIGxvbmcgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3Vuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3Vuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKKworLyogUkVWSVNJVDogVGhlc2Ugc2hvdWxkIGJlIHNldCBkeW5hbWljYWxseSBmb3IgQ09ORklHX01VTFRJX09NQVAyICovCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKyNkZWZpbmUgT01BUF9DTV9SRUdBRERSCQkJT01BUDI0MjBfQ01fUkVHQUREUgorI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMCU9NQVAyNDIwX1BSQ01fQ0xLT1VUX0NUUkwKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtFTVVMX0NUUkwJT01BUDI0MjBfUFJDTV9DTEtFTVVMX0NUUkwKKyNlbHNlCisjZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJCU9NQVAyNDMwX0NNX1JFR0FERFIKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTAlPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMCU9NQVAyNDMwX1BSQ01fQ0xLRU1VTF9DVFJMCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgX19pb21lbSAqcHJjbV9jbGtzcmNfY3RybDsKKworZXh0ZXJuIHN0cnVjdCBjbGsgKmRjbGs7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMjQzMF9pMmNoc193YWl0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29zY2NrOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FwbGw5NjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hcGxsNTQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZGM3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eF9kYXRhLmMKQEAgLTAsMCArMSwyMzA5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4X2RhdGEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIENvbnRhY3RzOgorICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMnh4eC5oIgorI2luY2x1ZGUgIm9wcDJ4eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJzZHJjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMjR4eCBjbG9jayB0cmVlLgorICoKKyAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55CisgKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KKyAqCXN3aXRjaCBzb3VyY2VzLgorICoKKyAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKKyAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KKyAqCisgKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKKyAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCisgKgorICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcworICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jaworICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKKyAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCisgKgljbG9ja3MuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjAwMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyZV8zMmtfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDMyNzY4LAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorfTsKKworLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAib3NjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb3NjY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCit9OworCisvKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9zeXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLworCS5uYW1lCQk9ICJhbHRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorfTsKKworLyoKKyAqIEFuYWxvZyBkb21haW4gcm9vdCBzb3VyY2UgY2xvY2tzCisgKi8KKworLyogZHBsbF9jaywgaXMgYnJva2VuIG91dCBpbiB0byBzcGVjaWFsIGNhc2VzIHRocm91Z2ggY2xrc2VsICovCisvKiBSRVZJU0lUOiBSYXRlIGNoYW5nZXMgb24gZHBsbF9jayB0cmlnZ2VyIGEgZnVsbCBzZXQgY2hhbmdlLgkuLi4KKyAqIGRlYWwgd2l0aCB0aGlzCisgKi8KKworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbF9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJCT0gJnN5c19jaywKKwkuY2xrX3JlZgkJPSAmc3lzX2NrLAorCS5jb250cm9sX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawkJPSBPTUFQMjRYWF9FTl9EUExMX01BU0ssCisJLm1heF9tdWx0aXBsaWVyCQk9IDEwMjQsCisJLm1pbl9kaXZpZGVyCQk9IDEsCisJLm1heF9kaXZpZGVyCQk9IDE2LAorCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKKy8qCisgKiBYWFggQ2Fubm90IGFkZCByb3VuZF9yYXRlIGhlcmUgeWV0LCBhcyB0aGlzIGlzIHN0aWxsIGEgY29tcG9zaXRlIGNsb2NrLAorICogbm90IGp1c3QgYSBEUExMCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCisJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2RwbGxjb3JlX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0geworCS5uYW1lCQk9ICJhcGxsOTZfY2siLAorCS5vcHMJCT0gJmNsa29wc19hcGxsOTYsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDk2MDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fOTZNX1BMTF9TSElGVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw1NF9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDU0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYXBsbDU0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzU0TV9QTExfU0hJRlQsCit9OworCisvKgorICogUFJDTSBkaWdpdGFsIGJhc2Ugc291cmNlcworICovCisKKy8qIGZ1bmNfNTRtX2NrICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY181NG1fYXBsbDU0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY181NG1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfNTRtX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZhcGxsNTRfY2ssIC5yYXRlcyA9IGZ1bmNfNTRtX2FwbGw1NF9yYXRlcywgfSwKKwl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzU0bV9hbHRfcmF0ZXMsIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY181NG1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfNTRtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZhcGxsNTRfY2ssCS8qIGNhbiBhbHNvIGJlIGFsdF9jbGsgKi8KKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzU0TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzU0bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGxfY2ssCQkvKiBjYW4gYWxzbyBiZSAzMmsgKi8KKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogZnVuY185Nm1fY2sgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY185Nm1fYXBsbDk2X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY185Nm1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfOTZtX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZhcGxsOTZfY2ssCS5yYXRlcyA9IGZ1bmNfOTZtX2FwbGw5Nl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZhbHRfY2ssCS5yYXRlcyA9IGZ1bmNfOTZtX2FsdF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhlIHBhcmVudCBvZiB0aGlzIGNsb2NrIGlzIG5vdCBzZWxlY3RhYmxlIG9uIDI0MjAuICovCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY185Nm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDMwXzk2TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzk2bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCisvKiBmdW5jXzQ4bV9jayAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNDhtX2FwbGw5Nl9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNDhtX2FsdF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzQ4bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYXBsbDk2X2NrLAkucmF0ZXMgPSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmYWx0X2NrLCAucmF0ZXMgPSBmdW5jXzQ4bV9hbHRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNDhtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzQ4bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAkgLyogOTZNIG9yIEFsdCAqLworCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfNDhNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfNDhtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzEybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZpeGVkX2Rpdgk9IDQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIGNvbW1vbl9jbGtvdXQqIGNsa3NlbF9yYXRlIHN0cnVjdHMgYXJlIGNvbW1vbiB0bworICogc3lzX2Nsa291dCwgc3lzX2Nsa291dF9zcmMsIHN5c19jbGtvdXQyLCBhbmQgc3lzX2Nsa291dDJfc3JjLgorICogc3lzX2Nsa291dDJfKiBhcmUgMjQyMC1vbmx5LCBzbyB0aGUKKyAqIGNsa3NlbF9yYXRlIGZsYWdzIGZpZWxkcyBhcmUgaW5hY2N1cmF0ZSBmb3IgdGhvc2UgY2xvY2tzLiBUaGlzIGlzCisgKiBoYXJtbGVzcyBzaW5jZSBhY2Nlc3MgdG8gdGhvc2UgY2xvY2tzIGFyZSBnYXRlZCBieSB0aGUgc3RydWN0IGNsaworICogZmxhZ3MgZmllbGRzLCB3aGljaCBtYXJrIHRoZW0gYXMgMjQyMC1vbmx5LgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY181NG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb21tb25fY2xrb3V0X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzU0bV9jaywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjb21tb25fY2xrb3V0X3NyY19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0X3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2Nsa291dF9zcmMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0Ml9zcmMgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyX3NyYyIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfQ0xLT1VUMl9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtPVVQyX1NPVVJDRV9NQVNLLAorCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jbGtvdXQyX3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jbGtvdXQyX3NyYywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CisJLm5hbWUJCT0gImVtdWxfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtFTVVMX0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTVVMQVRJT05fRU5fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKworfTsKKworLyoKKyAqIE1QVSBjbG9jayBkb21haW4KKyAqCUNsb2NrczoKKyAqCQlNUFVfRkNMSywgTVBVX0lDTEsKKyAqCQlJTlRfTV9GQ0xLLCBJTlRfTV9JX0NMSworICoKKyAqIC0gSW5kaXZpZHVhbCBjbG9ja3MgYXJlIGhhcmR3YXJlIG1hbmFnZWQuCisgKiAtIEJhc2UgZGl2aWRlciBjb21lcyBmcm9tOiBDTV9DTEtTRUxfTVBVCisgKgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG1wdV9jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IG1wdV9jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CS8qIENvbnRyb2wgY3B1ICovCisJLm5hbWUJCT0gIm1wdV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX01QVV9NQVNLLAorCS5jbGtzZWwJCT0gbXB1X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qCisgKiBEU1AgKDI0MzAtSVZBMi4xKSAoMjQyMC1VTUErSVZBMSkgY2xvY2sgZG9tYWluCisgKiBDbG9ja3M6CisgKgkyNDMwOiBJVkEyLjFfRkNMSyAocmVhbGx5IGp1c3QgRFNQX0ZDTEspLCBJVkEyLjFfSUNMSworICoJMjQyMDogVU1BX0ZDTEssIFVNQV9JQ0xLLCBJVkFfTVBVLCBJVkFfQ09QCisgKgorICogV29uJ3QgYmUgdG9vIHNwZWNpZmljIGhlcmUuIFRoZSBjb3JlIGNsb2NrIGNvbWVzIGludG8gdGhpcyBibG9jaworICogaXQgaXMgZGl2aWRlZCB0aGVuIHRlZSdlZC4gT25lIGJyYW5jaCBnb2VzIGRpcmVjdGx5IHRvIHh5eiBlbmFibGUKKyAqIGNvbnRyb2xzLiBUaGUgb3RoZXIgYnJhbmNoIGdldHMgZnVydGhlciBkaXZpZGVkIGJ5IDIgdGhlbiBwb3NzaWJseQorICogcm91dGVkIGludG8gYSBzeW5jaHJvbml6ZXIgYW5kIG91dCBvZiBjbG9ja3MgYWJjLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9mY2tfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRzcF9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogRFNQIGludGVyZmFjZSBjbG9jayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfaXJhdGVfaWNrX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNwX2lyYXRlX2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHNwX2ZjaywgLnJhdGVzID0gZHNwX2lyYXRlX2lja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhpcyBjbG9jayBkb2VzIG5vdCBleGlzdCBhcyBzdWNoIGluIHRoZSBUUk0uICovCitzdGF0aWMgc3RydWN0IGNsayBkc3BfaXJhdGVfaWNrID0geworCS5uYW1lCQk9ICJkc3BfaXJhdGVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkc3BfZmNrLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9pcmF0ZV9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCSAgICAgID0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogMjQyMCBvbmx5ICovCitzdGF0aWMgc3RydWN0IGNsayBkc3BfaWNrID0geworCS5uYW1lCQk9ICJkc3BfaWNrIiwJIC8qIGFwcGFyZW50bHkgaXBpIGFuZCBpc3AgKi8KKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRzcF9pcmF0ZV9pY2ssCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9EU1BfSVBJX1NISUZULAkgICAgICAvKiBmb3IgaXBpICovCit9OworCisvKiAyNDMwIG9ubHkgLSBFTl9EU1AgY29udHJvbHMgYm90aCBkc3AgZmNsayBhbmQgaWNsayBvbiAyNDMwICovCitzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfaWNrID0geworCS5uYW1lCQk9ICJpdmEyXzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRzcF9pcmF0ZV9pY2ssCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKK307CisKKy8qCisgKiBUaGUgSVZBMSBpcyBhbiBBUk03IGNvcmUgb24gdGhlIDI0MjAgdGhhdCBoYXMgbm90aGluZyB0byBkbyB3aXRoCisgKiB0aGUgQzU0eCwgYnV0IHdoaWNoIGlzIGNvbnRhaW5lZCBpbiB0aGUgRFNQIHBvd2VyZG9tYWluLiAgRG9lcyBub3QKKyAqIGV4aXN0IG9uIGxhdGVyIE9NQVBzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBpdmExX2lmY2sgPSB7CisJLm5hbWUJCT0gIml2YTFfaWZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDT05GSUdfUEFSVElDSVBBTlQgfCBERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX0NPUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS1NFTF9JVkFfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogSVZBMSBtcHUvaW50L2kvZiBjbG9ja3MgYXJlIC8yIG9mIHBhcmVudCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9tcHVfaW50X2lmY2sgPSB7CisJLm5hbWUJCT0gIml2YTFfbXB1X2ludF9pZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJml2YTFfaWZjaywKKwkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKKy8qCisgKiBMMyBjbG9jayBkb21haW4KKyAqIEwzIGNsb2NrcyBhcmUgdXNlZCBmb3IgYm90aCBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWwgY2xvY2tzIHRvCisgKiBtdWx0aXBsZSBlbnRpdGllcy4gU29tZSBvZiB0aGVzZSBjbG9ja3MgYXJlIGNvbXBsZXRlbHkgbWFuYWdlZAorICogYnkgaGFyZHdhcmUsIGFuZCBzb21lIG90aGVycyBhbGxvdyBzb2Z0d2FyZSBjb250cm9sLiBIYXJkd2FyZQorICogbWFuYWdlZCBvbmVzIGdlbmVyYWwgYXJlIGJhc2VkIG9uIGRpcmVjdGx5IENMS19SRVEgc2lnbmFscyBhbmQKKyAqIHZhcmlvdXMgYXV0byBpZGxlIHNldHRpbmdzLiBUaGUgZnVuY3Rpb25hbCBzcGVjIHNldHMgbWFueSBvZiB0aGVzZQorICogYXMgJ3RpZS1oaWdoJyBmb3IgdGhlaXIgZW5hYmxlcy4KKyAqCisgKiBJLUNMT0NLUzoKKyAqCUwzLUludGVyY29ubmVjdCwgU01TLCBHUE1DLCBTRFJDLCBPQ01fUkFNLCBPQ01fUk9NLCBTRE1BCisgKglDQU0sIEhTLVVTQi4KKyAqIEYtQ0xPQ0sKKyAqCVNTSS4KKyAqCisgKiBHUE1DIG1lbW9yaWVzIGFuZCBTRFJDIGhhdmUgdGltaW5nIGFuZCBjbG9jayBzZW5zaXRpdmUgcmVnaXN0ZXJzIHdoaWNoCisgKiBtYXkgdmVyeSB3ZWxsIG5lZWQgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGNsb2NrIGNoYW5nZXMuIEN1cnJlbnRseSBmb3IgbG93CisgKiBvcGVyYXRpbmcgcG9pbnRzLCB0aGVzZSBhcmUgdGFrZW4gY2FyZSBvZiBpbiBzbGVlcC5TLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvcmVfbDNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb3JlX2wzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBjb3JlX2wzX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfY2sgPSB7CS8qIFVzZWQgZm9yIGljayBhbmQgZmNrLCBpbnRlcmNvbm5lY3QgKi8KKwkubmFtZQkJPSAiY29yZV9sM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MM19NQVNLLAorCS5jbGtzZWwJCT0gY29yZV9sM19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCisvKiB1c2JfbDRfaWNrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHVzYl9sNF9pY2tfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNiX2w0X2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gdXNiX2w0X2lja19jb3JlX2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyogSXQgaXMgdW5jbGVhciBmcm9tIFRSTSB3aGV0aGVyIHVzYl9sNF9pY2sgaXMgcmVhbGx5IGluIEwzIG9yIEw0IGNsa2RtICovCitzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewkvKiBGUy1VU0IgaW50ZXJmYWNlIGNsb2NrICovCisJLm5hbWUJCT0gInVzYl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfVVNCX01BU0ssCisJLmNsa3NlbAkJPSB1c2JfbDRfaWNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibDRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IERFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDRfTUFTSywKKwkuY2xrc2VsCQk9IGw0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qCisgKiBTU0kgaXMgaW4gTDMgbWFuYWdlbWVudCBkb21haW4sIGl0cyBkaXJlY3QgcGFyZW50IGlzIGNvcmUgbm90IGwzLAorICogbWFueSBjb3JlIHBvd2VyIGRvbWFpbiBlbnRpdGllcyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBMMyBjbG9jaworICogZG9tYWluLgorICogU1NJX1NTUl9GQ0xLLCBTU0lfU1NUX0ZDTEssIFNTSV9MNF9JQ0xLCisgKgorICogc3NyID0gY29yZS8xLzIvMy80LzUsIHNzdCA9IDEvMiBzc3IuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3NpX3Nzcl9zc3RfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzc2lfc3NyX3NzdF9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX3NzdF9mY2sgPSB7CisJLm5hbWUJCT0gInNzaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfU1NJX01BU0ssCisJLmNsa3NlbAkJPSBzc2lfc3NyX3NzdF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyoKKyAqIFByZXN1bWFibHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBTU0lfSUNMSy4KKyAqIFRSTSBjb250cmFkaWN0cyBpdHNlbGYgb24gd2hhdCBjbG9ja2RvbWFpbiBTU0lfSUNMSyBpcyBpbgorICovCitzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0geworCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworCisvKgorICogR0ZYIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICogR0ZYX0ZDTEssIEdGWF9JQ0xLCisgKiBHRlhfQ0cxKDJkKSwgR0ZYX0NHMigzZCkKKyAqCisgKiBHRlhfRkNMSyBydW5zIGZyb20gTDMsIGFuZCBpcyBkaXZpZGVkIGJ5ICgxLDIsMyw0KQorICogVGhlIDJkIGFuZCAzZCBjbG9ja3MgcnVuIGF0IGEgaGFyZHdhcmUgZGV0ZXJtaW5lZAorICogZGl2aWRlZCB2YWx1ZSBvZiBmY2xrLgorICoKKyAqLworLyogWFhYIFJFVklTSVQ6IEdGWCBjbG9jayBpcyBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwgbm8/IGRvdWJsZWNoZWNrLiAqLworCisvKiBUaGlzIGNsa3NlbCBzdHJ1Y3QgaXMgc2hhcmVkIGJldHdlZW4gZ2Z4XzNkX2ZjayBhbmQgZ2Z4XzJkX2ZjayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZ2Z4X2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gZ2Z4X2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzNkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzNkX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzNEX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7CisJLm5hbWUJCT0gImdmeF8yZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAorCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfaWNrID0geworCS5uYW1lCQk9ICJnZnhfaWNrIiwJCS8qIEZyb20gbDMgKi8KKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBNb2RlbSBjbG9jayBkb21haW4gKDI0MzApCisgKglDTE9DS1M6CisgKgkJTURNX09TQ19DTEsKKyAqCQlNRE1fSUNMSworICogVGhlc2UgY2xvY2tzIGFyZSB1c2FibGUgaW4gY2hhc3NpcyBtb2RlIG9ubHkuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbWRtX2lja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWRtX2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gbWRtX2lja19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1faWNrID0gewkJLyogdXNlZCBib3RoIGFzIGEgaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibWRtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9DTV9JQ0xLRU5fTURNX0VOX01ETV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDMwX0NMS1NFTF9NRE1fTUFTSywKKwkuY2xrc2VsCQk9IG1kbV9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKKwkubmFtZQkJPSAibWRtX29zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fT1NDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogRFNTIGNsb2NrIGRvbWFpbgorICogQ0xPQ0tzOgorICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLAorICogRFNTX0NMSzEsIERTU19DTEsyLCBEU1NfNTRNSHpfQ0xLCisgKgorICogRFNTIGlzIGJvdGggaW5pdGlhdG9yIGFuZCB0YXJnZXQuCisgKi8KKy8qIFhYWCBBZGQgUkFURV9OT1RfVkFMSURBVEVEICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MxX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczFfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssICAucmF0ZXMgPSBkc3MxX2Zja19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZHNzMV9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfZmNrID0geworCS5uYW1lCQk9ICJkc3MxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmY29yZV9jaywJCS8qIENvcmUgb3Igc3lzICovCisJLmZsYWdzCQk9IERFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNTMV9NQVNLLAorCS5jbGtzZWwJCT0gZHNzMV9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja19zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzczJfZmNrXzQ4bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczJfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHNzMl9mY2tfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmZ1bmNfNDhtX2NrLCAucmF0ZXMgPSBkc3MyX2Zja180OG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfZmNrID0gewkJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkubmFtZQkJPSAiZHNzMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLworCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSywKKwkuY2xrc2VsCQk9IGRzczJfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMjR4eF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfMzJrX2NrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBncHRfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJICAucmF0ZXMgPSBncHRfYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0geworCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0geworCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDExX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMTJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gNCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gNCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gNSwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gNSwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ljayA9IHsKKwkubmFtZQkJPSAiZ3Bpb3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3Bpb3NfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfaWNrID0geworCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01QVV9XRFRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfZmNrID0geworCS5uYW1lCQk9ICJtcHVfd2R0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01QVV9XRFRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5bmNfMzJrX2ljayA9IHsKKwkubmFtZQkJPSAic3luY18zMmtfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzMyS1NZTkNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKKwkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX09NQVBDVFJMX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0geworCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSUNSX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0geworCS5uYW1lCQk9ICJjYW1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBjYW1fZmNrIGNvbnRyb2xzIGJvdGggQ0FNX01DTEsgYW5kIENBTV9GQ0xLLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlCisgKiBzcGxpdCBpbnRvIHR3byBzZXBhcmF0ZSBjbG9ja3MsIHNpbmNlIHRoZSBwYXJlbnQgY2xvY2tzIGFyZSBkaWZmZXJlbnQKKyAqIGFuZCB0aGUgY2xvY2tkb21haW5zIGFyZSBhbHNvIGRpZmZlcmVudC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ZjayA9IHsKKwkubmFtZQkJPSAiY2FtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0geworCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01BSUxCT1hFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQ0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKKwkubmFtZQkJPSAid2R0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0M19mY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKKwkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NU1BST19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ljayA9IHsKKwkubmFtZQkJPSAibW1jX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19mY2sgPSB7CisJLm5hbWUJCT0gIm1tY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZmFjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19pY2sgPSB7CisJLm5hbWUJCT0gImVhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlYWNfZmNrID0geworCS5uYW1lCQk9ICJlYWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKKwkubmFtZQkJPSAiaGRxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9mY2sgPSB7CisJLm5hbWUJCT0gImhkcV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmNoczJfZmNrID0geworCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0geworCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMjQzMF9pMmNoc193YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CisJLm5hbWUJCT0gImdwbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLworCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZG1hX2ZjayA9IHsKKwkubmFtZQkJPSAic2RtYV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9pY2sgPSB7CisJLm5hbWUJCT0gInNkbWFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLworCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2bHlucV9pY2sgPSB7CisJLm5hbWUJCT0gInZseW5xX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHZseW5xX2Zja185Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHZseW5xX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdmx5bnFfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZmdW5jXzk2bV9jaywgLnJhdGVzID0gdmx5bnFfZmNrXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkgIC5yYXRlcyA9IHZseW5xX2Zja19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayB2bHlucV9mY2sgPSB7CisJLm5hbWUJCT0gInZseW5xX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLU0VMX1ZMWU5RX01BU0ssCisJLmNsa3NlbAkJPSB2bHlucV9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9TRFJDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0geworCS5uYW1lCQk9ICJkZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhX2ljayA9IHsKKwkubmFtZQkJPSAic2hhX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TSEFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUk5HX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0geworCS5uYW1lCQk9ICJhZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKKwkubmFtZQkJPSAicGthX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9QS0FfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9mY2sgPSB7CisJLm5hbWUJCT0gInVzYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2Joc19pY2sgPSB7CisJLm5hbWUJCT0gInVzYmhzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1VTQkhTX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0geworCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfaWNrID0geworCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDEsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDEsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9HUElPNV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZmNrID0geworCS5uYW1lCQk9ICJncGlvNV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pbnRjX2ljayA9IHsKKwkubmFtZQkJPSAibWRtX2ludGNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01ETV9JTlRDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzZGJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzZGJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyBjbG9jayBpcyBhIGNvbXBvc2l0ZSBjbG9jayB3aGljaCBkb2VzIGVudGlyZSBzZXQgY2hhbmdlcyB0aGVuCisgKiBmb3JjZXMgYSByZWJhbGFuY2UuIEl0IGtleXMgb24gdGhlIE1QVSBzcGVlZCwgYnV0IGl0IHJlYWxseSBjb3VsZAorICogYmUgYW55IGtleSBzcGVlZCBwYXJ0IG9mIGEgc2V0IGluIHRoZSByYXRlIHRhYmxlLgorICoKKyAqIHRvIHJlYWxseSBjaGFuZ2UgYSBzZXQsIHlvdSBuZWVkIG1lbW9yeSB0YWJsZSBzZXRzIHdoaWNoIGdldCBjaGFuZ2VkCisgKiBpbiBzcmFtLCBwcmUtbm90aWZpZXJzICYgcG9zdCBub3RpZmllcnMsIGNoYW5naW5nIHRoZSB0b3Agc2V0LCB3aXRob3V0CisgKiBoYXZpbmcgbG93IGxldmVsIGRpc3BsYXkgcmVjYWxjJ3Mgd29uJ3Qgd29yay4uLiB0aGlzIGlzIHdoeSBkcG0gbm90aWZpZXJzCisgKiB3b3JrLCBpc3IncyBvZmYsIHdhbGsgYSBsaXN0IG9mIGNsb2NrcyBhbHJlYWR5IF9vZmZfIGFuZCBub3QgbWVzc2luZyB3aXRoCisgKiB0aGUgYnVzLgorICoKKyAqIFRoaXMgY2xvY2sgc2hvdWxkIGhhdmUgbm8gcGFyZW50LiBJdCBlbWJvZGllcyB0aGUgZW50aXJlIHVwcGVyIGxldmVsCisgKiBhY3RpdmUgc2V0LiBBIHBhcmVudCB3aWxsIG1lc3MgdXAgc29tZSBvZiB0aGUgaW5pdCBhbHNvLgorICovCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0X3ByY21fc2V0ID0geworCS5uYW1lCQk9ICJ2aXJ0X3ByY21fc2V0IiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCisJLnBhcmVudAkJPSAmbXB1X2NrLAkvKiBJbmRleGVkIGJ5IG1wdSBzcGVlZCwgbm8gcGFyZW50ICovCisJLnJlY2FsYwkJPSAmb21hcDJfdGFibGVfbXB1X3JlY2FsYywJLyogc2V0cyBhcmUga2V5ZWQgb24gbXB1IHJhdGUgKi8KKwkuc2V0X3JhdGUJPSAmb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZSwKK307CisKKworLyoKKyAqIGNsa2RldiBpbnRlZ3JhdGlvbgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDI0eHhfY2xrc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY18zMmtfY2siLAkmZnVuY18zMmtfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNlY3VyZV8zMmtfY2siLCAmc2VjdXJlXzMya19jaywgQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkib3NjX2NrIiwJJm9zY19jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiYWx0X2NrIiwJJmFsdF9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIGludGVybmFsIGFuYWxvZyBzb3VyY2VzICovCisJQ0xLKE5VTEwsCSJkcGxsX2NrIiwJJmRwbGxfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFwbGw5Nl9jayIsCSZhcGxsOTZfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFwbGw1NF9jayIsCSZhcGxsNTRfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY181NG1fY2siLAkmZnVuY181NG1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImNvcmVfY2siLAkmY29yZV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZnVuY185Nm1fY2siLAkmZnVuY185Nm1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImZ1bmNfNDhtX2NrIiwJJmZ1bmNfNDhtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzEybV9jayIsCSZmdW5jXzEybV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiY2tfd2R0MV9vc2MiLAkmd2R0MV9vc2NfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXRfc3JjIiwgJnN5c19jbGtvdXRfc3JjLCBDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0IiwJJnN5c19jbGtvdXQsCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyX3NyYyIsICZzeXNfY2xrb3V0Ml9zcmMsIENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dDIiLAkmc3lzX2Nsa291dDIsCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZW11bF9jayIsCSZlbXVsX2NrLAlDS18yNDJYKSwKKwkvKiBtcHUgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibXB1X2NrIiwJJm1wdV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIGRzcCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJkc3BfZmNrIiwJJmRzcF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzcF9pcmF0ZV9pY2siLCAmZHNwX2lyYXRlX2ljaywgQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZHNwX2ljayIsCSZkc3BfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIml2YTJfMV9pY2siLAkmaXZhMl8xX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJpdmExX2lmY2siLAkmaXZhMV9pZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIml2YTFfbXB1X2ludF9pZmNrIiwgJml2YTFfbXB1X2ludF9pZmNrLCBDS18yNDJYKSwKKwkvKiBHRlggZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZ2Z4XzNkX2ZjayIsCSZnZnhfM2RfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJnZnhfMmRfZmNrIiwJJmdmeF8yZF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdmeF9pY2siLAkmZ2Z4X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIE1vZGVtIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJIm1kbV9pY2siLAkmbWRtX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJtZG1fb3NjX2NrIiwJJm1kbV9vc2NfY2ssCUNLXzI0M1gpLAorCS8qIERTUyBkb21haW4gY2xvY2tzICovCisJQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcGRzcyIsCSJkc3MyX2ZjayIsCSZkc3MyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcGRzcyIsCSJ0dl9mY2siLAkmZHNzXzU0bV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBMMyBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJjb3JlX2wzX2NrIiwJJmNvcmVfbDNfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNzaV9mY2siLAkmc3NpX3Nzcl9zc3RfZmNrLCBDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1c2JfbDRfaWNrIiwJJnVzYl9sNF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBMNCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJsNF9jayIsCSZsNF9jaywJCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNzaV9sNF9pY2siLAkmc3NpX2w0X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLworCUNMSyhOVUxMLAkidmlydF9wcmNtX3NldCIsICZ2aXJ0X3ByY21fc2V0LCBDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLworCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQyX2ljayIsCSZncHQyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9mY2siLAkmZ3B0Ml9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDNfaWNrIiwJJmdwdDNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQzX2ZjayIsCSZncHQzX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NF9pY2siLAkmZ3B0NF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDRfZmNrIiwJJmdwdDRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ1X2ljayIsCSZncHQ1X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9mY2siLAkmZ3B0NV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDZfaWNrIiwJJmdwdDZfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ZjayIsCSZncHQ2X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0N19pY2siLAkmZ3B0N19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDdfZmNrIiwJJmdwdDdfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ4X2ljayIsCSZncHQ4X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9mY2siLAkmZ3B0OF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDlfaWNrIiwJJmdwdDlfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ZjayIsCSZncHQ5X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTFfaWNrIiwJJmdwdDExX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTJfaWNrIiwJJmdwdDEyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiZmNrIiwJJm1jYnNwMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJpY2siLAkmbWNic3AyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZtY2JzcDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJm1jYnNwM19pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiZmNrIiwJJm1jYnNwNF9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNSIsICJmY2siLAkmbWNic3A1X2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImZjayIsCSZtY3NwaTFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImljayIsCSZtY3NwaTNfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiZmNrIiwJJm1jc3BpM19mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDFfZmNrIiwJJnVhcnQxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJJnVhcnQzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3Bpb3NfaWNrIiwJJmdwaW9zX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3Bpb3NfZmNrIiwJJmdwaW9zX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZtcHVfd2R0X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZtcHVfd2R0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3luY18zMmtfaWNrIiwJJnN5bmNfMzJrX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0MV9pY2siLAkmd2R0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImljcl9pY2siLAkmaWNyX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMjR4eGNhbSIsICJmY2siLAkmY2FtX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcDI0eHhjYW0iLCAiaWNrIiwJJmNhbV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm1haWxib3hlc19pY2siLCAmbWFpbGJveGVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0NF9pY2siLAkmd2R0NF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfZmNrIiwJJndkdDRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2ljayIsCSZ3ZHQzX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2ZjayIsCSZ3ZHQzX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJtc3Byb19pY2siLAkmbXNwcm9faWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJtc3Byb19mY2siLAkmbXNwcm9fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJpY2siLAkmbW1jX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJmY2siLAkmbW1jX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImZhY19mY2siLAkmZmFjX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZWFjX2ljayIsCSZlYWNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVhY19mY2siLAkmZWFjX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2hkcS4xIiwgImZjayIsCSZoZHFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZpMmMxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzI0MlgpLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjaHMxX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJpMmNfb21hcC4yIiwgImljayIsCSZpMmMyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzI0MlgpLAorCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjaHMyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic2RtYV9mY2siLAkmc2RtYV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfaWNrIiwJJnNkbWFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ2bHlucV9pY2siLAkmdmx5bnFfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInZseW5xX2ZjayIsCSZ2bHlucV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZGVzX2ljayIsCSZkZXNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzaGFfaWNrIiwJJnNoYV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkmcm5nX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiYWVzX2ljayIsCSZhZXNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVzYl9mY2siLAkmdXNiX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZ1c2Joc19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9mY2siLAkmZ3BpbzVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9pbnRjX2ljayIsCSZtZG1faW50Y19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgIm1tY2hzZGJfZmNrIiwgCSZtbWNoc2RiMl9mY2ssCUNLXzI0M1gpLAorfTsKKworLyoKKyAqIGluaXQgY29kZQorICovCisKK2ludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJc3RydWN0IG9tYXBfY2xrICpjOworCXUzMiBjbGtyYXRlOworCXUxNiBjcHVfY2xrZmxnOworCisJaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7CisJCXByY21fY2xrc3JjX2N0cmwgPSBPTUFQMjQyMF9QUkNNX0NMS1NSQ19DVFJMOworCQljcHVfbWFzayA9IFJBVEVfSU5fMjQyWDsKKwkJY3B1X2Nsa2ZsZyA9IENLXzI0Mlg7CisJCXJhdGVfdGFibGUgPSBvbWFwMjQyMF9yYXRlX3RhYmxlOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJcHJjbV9jbGtzcmNfY3RybCA9IE9NQVAyNDMwX1BSQ01fQ0xLU1JDX0NUUkw7CisJCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOworCQljcHVfY2xrZmxnID0gQ0tfMjQzWDsKKwkJcmF0ZV90YWJsZSA9IG9tYXAyNDMwX3JhdGVfdGFibGU7CisJfQorCisJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOworCisJZm9yIChjID0gb21hcDI0eHhfY2xrczsgYyA8IG9tYXAyNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNHh4X2Nsa3MpOyBjKyspCisJCWNsa19wcmVpbml0KGMtPmxrLmNsayk7CisKKwlvc2NfY2sucmF0ZSA9IG9tYXAyX29zY19jbGtfcmVjYWxjKCZvc2NfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZvc2NfY2spOworCXN5c19jay5yYXRlID0gb21hcDJfc3lzX2Nsa19yZWNhbGMoJnN5c19jayk7CisJcHJvcGFnYXRlX3JhdGUoJnN5c19jayk7CisKKwlmb3IgKGMgPSBvbWFwMjR4eF9jbGtzOyBjIDwgb21hcDI0eHhfY2xrcyArIEFSUkFZX1NJWkUob21hcDI0eHhfY2xrcyk7IGMrKykKKwkJaWYgKGMtPmNwdSAmIGNwdV9jbGtmbGcpIHsKKwkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKKwkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOworCQkJb21hcDJfaW5pdF9jbGtfY2xrZG0oYy0+bGsuY2xrKTsKKwkJfQorCisJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCisJY2xrcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA8PSBjbGtyYXRlKQorCQkJYnJlYWs7CisJfQorCWN1cnJfcHJjbV9zZXQgPSBwcmNtOworCisJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKKworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCisJICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CisKKwkvKiBBdm9pZCBzbGVlcGluZyBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJZGNsayA9IGNsa19nZXQoTlVMTCwgImRwbGxfY2siKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwppbmRleCBlY2JiNWNkLi5kZWQzMjM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKQEAgLTMwLDMxNCArMzAsMjEgQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KKyNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KICNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMzR4eC5oIgorI2luY2x1ZGUgInNkcmMuaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHM7Ci0KLXN0YXRpYyB2b2lkIG9tYXAzNDMwZXMyX2Nsa19zc2lfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQkJICAgIHU4ICppZGxlc3RfYml0KTsKLXN0YXRpYyB2b2lkIG9tYXAzNDMwZXMyX2Nsa19oc290Z3VzYl9maW5kX2lkbGVzdChzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCSAgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkgICAgdTggKmlkbGVzdF9iaXQpOwotc3RhdGljIHZvaWQgb21hcDM0MzBlczJfY2xrX2Rzc191c2Job3N0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJCSAgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkJICAgIHU4ICppZGxlc3RfYml0KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0ID0gewotCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAotCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKLQkuZmluZF9pZGxlc3QJPSBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0LAotCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwMl9kZmx0X2Nsa19lbmFibGUsCi0JLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAotCS5maW5kX2lkbGVzdAk9IG9tYXAzNDMwZXMyX2Nsa19oc290Z3VzYl9maW5kX2lkbGVzdCwKLQkuZmluZF9jb21wYW5pb24gPSBvbWFwMl9jbGtfZGZsdF9maW5kX2NvbXBhbmlvbiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0ID0gewotCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAotCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKLQkuZmluZF9pZGxlc3QJPSBvbWFwMzQzMGVzMl9jbGtfZHNzX3VzYmhvc3RfZmluZF9pZGxlc3QsCi0JLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCi19OwotCi0jaW5jbHVkZSAiY2xvY2szNHh4LmgiCi0KLXN0cnVjdCBvbWFwX2NsayB7Ci0JdTMyCQljcHU7Ci0Jc3RydWN0IGNsa19sb29rdXAgbGs7Ci19OwotCi0jZGVmaW5lIENMSyhkZXYsIGNvbiwgY2ssIGNwKSAJCVwKLQl7CQkJCVwKLQkJIC5jcHUgPSBjcCwJCVwKLQkJLmxrID0gewkJCVwKLQkJCS5kZXZfaWQgPSBkZXYsCVwKLQkJCS5jb25faWQgPSBjb24sCVwKLQkJCS5jbGsgPSBjaywJXAotCQl9LAkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfMzQzWAkJKDEgPDwgMCkKLSNkZWZpbmUgQ0tfMzQzMEVTMQkoMSA8PCAxKQotI2RlZmluZSBDS18zNDMwRVMyCSgxIDw8IDIpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDM0eHhfY2xrc1tdID0gewotCUNMSyhOVUxMLAkib21hcF8zMmtfZmNrIiwJJm9tYXBfMzJrX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ2aXJ0XzEybV9jayIsCSZ2aXJ0XzEybV9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ2aXJ0XzEzbV9jayIsCSZ2aXJ0XzEzbV9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ2aXJ0XzE2XzhtX2NrIiwgJnZpcnRfMTZfOG1fY2ssIENLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidmlydF8xOV8ybV9jayIsICZ2aXJ0XzE5XzJtX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMjZtX2NrIiwJJnZpcnRfMjZtX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMzhfNG1fY2siLCAmdmlydF8zOF80bV9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvc2Nfc3lzX2NrIiwJJm9zY19zeXNfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzeXNfYWx0Y2xrIiwJJnN5c19hbHRjbGssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibWNic3BfY2xrcyIsCSZtY2JzcF9jbGtzLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInN5c19jbGtvdXQxIiwJJnN5c19jbGtvdXQxLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwxX2NrIiwJJmRwbGwxX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwxX3gyX2NrIiwJJmRwbGwxX3gyX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwxX3gybTJfY2siLCAmZHBsbDFfeDJtMl9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsMl9jayIsCSZkcGxsMl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsMl9tMl9jayIsCSZkcGxsMl9tMl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM19jayIsCSZkcGxsM19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfeDJfY2siLAkmZHBsbDNfeDJfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfbTJfY2siLAkmZHBsbDNfbTJfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfbTJ4Ml9jayIsICZkcGxsM19tMngyX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwzX20zX2NrIiwJJmRwbGwzX20zX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwzX20zeDJfY2siLCAmZHBsbDNfbTN4Ml9jaywgQ0tfMzQzWCksCi0JQ0xLKCJldGIiLAkiZW11X2NvcmVfYWx3b25fY2siLCAmZW11X2NvcmVfYWx3b25fY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfY2siLAkmZHBsbDRfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfeDJfY2siLAkmZHBsbDRfeDJfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcF85Nm1fYWx3b25fZmNrIiwgJm9tYXBfOTZtX2Fsd29uX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvbWFwXzk2bV9mY2siLAkmb21hcF85Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNtXzk2bV9mY2siLAkmY21fOTZtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvbWFwXzU0bV9mY2siLAkmb21hcF81NG1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBfNDhtX2ZjayIsCSZvbWFwXzQ4bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcF8xMm1fZmNrIiwJJm9tYXBfMTJtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tMl9jayIsCSZkcGxsNF9tMl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tMngyX2NrIiwgJmRwbGw0X20yeDJfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTNfY2siLAkmZHBsbDRfbTNfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTN4Ml9jayIsICZkcGxsNF9tM3gyX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X200X2NrIiwJJmRwbGw0X200X2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X200eDJfY2siLCAmZHBsbDRfbTR4Ml9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tNV9jayIsCSZkcGxsNF9tNV9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tNXgyX2NrIiwgJmRwbGw0X201eDJfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTZfY2siLAkmZHBsbDRfbTZfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTZ4Ml9jayIsICZkcGxsNF9tNngyX2NrLCBDS18zNDNYKSwKLQlDTEsoImV0YiIsCSJlbXVfcGVyX2Fsd29uX2NrIiwgJmVtdV9wZXJfYWx3b25fY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDVfY2siLAkmZHBsbDVfY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiZHBsbDVfbTJfY2siLAkmZHBsbDVfbTJfY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiY2xrb3V0Ml9zcmNfY2siLCAmY2xrb3V0Ml9zcmNfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkic3lzX2Nsa291dDIiLAkmc3lzX2Nsa291dDIsCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY29yZXgyX2ZjayIsCSZjb3JleDJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwxX2ZjayIsCSZkcGxsMV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibXB1X2NrIiwJJm1wdV9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJhcm1fZmNrIiwJJmFybV9mY2ssCUNLXzM0M1gpLAotCUNMSygiZXRiIiwJImVtdV9tcHVfYWx3b25fY2siLCAmZW11X21wdV9hbHdvbl9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsMl9mY2siLAkmZHBsbDJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIml2YTJfY2siLAkmaXZhMl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJsM19pY2siLAkmbDNfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImw0X2ljayIsCSZsNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkicm1faWNrIiwJJnJtX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJnZnhfbDNfY2siLAkmZ2Z4X2wzX2NrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJImdmeF9sM19mY2siLAkmZ2Z4X2wzX2ZjaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJnZnhfbDNfaWNrIiwJJmdmeF9sM19pY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkiZ2Z4X2NnMV9jayIsCSZnZnhfY2cxX2NrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJImdmeF9jZzJfY2siLAkmZ2Z4X2NnMl9jaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJzZ3hfZmNrIiwJJnNneF9mY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkic2d4X2ljayIsCSZzZ3hfaWNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImQyZF8yNm1fZmNrIiwJJmQyZF8yNm1fZmNrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJIm1vZGVtX2ZjayIsCSZtb2RlbV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic2FkMmRfaWNrIiwJJnNhZDJkX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJtYWQyZF9pY2siLAkmbWFkMmRfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjcGVmdXNlX2ZjayIsCSZjcGVmdXNlX2ZjaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJ0c19mY2siLAkmdHNfZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJjb3JlXzk2bV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCSZtbWNoczNfZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjb3JlXzQ4bV9mY2siLAkmY29yZV80OG1fZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjQiLCAiZmNrIiwJJm1jc3BpNF9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImZzaG9zdHVzYl9mY2siLCAmZnNob3N0dXNiX2ZjaywgQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJjb3JlXzEybV9mY2siLAkmY29yZV8xMm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXBfaGRxLjAiLCAiZmNrIiwJJmhkcV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3NpX3Nzcl9mY2siLAkmc3NpX3Nzcl9mY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInNzaV9zc3RfZmNrIiwJJnNzaV9zc3RfZmNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJjb3JlX2wzX2ljayIsCSZjb3JlX2wzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJJmhzb3RndXNiX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmaHNvdGd1c2JfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic2VjdXJpdHlfbDNfaWNrIiwgJnNlY3VyaXR5X2wzX2ljaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY29yZV9sNF9pY2siLAkmY29yZV9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidXNidGxsX2ljayIsCSZ1c2J0bGxfaWNrLAlDS18zNDMwRVMyKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImljayIsCSZtbWNoczNfaWNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImljcl9pY2siLAkmaWNyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJhZXMyX2ljayIsCSZhZXMyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzaGExMl9pY2siLAkmc2hhMTJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRlczJfaWNrIiwJJmRlczJfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImljayIsCSZtbWNoczJfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImljayIsCSZtbWNoczFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS40IiwgImljayIsCSZtY3NwaTRfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18zNDNYKSwKLQlDTEsoImkyY19vbWFwLjMiLCAiaWNrIiwJJmkyYzNfaWNrLAlDS18zNDNYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18zNDNYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2lja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJzZWN1cml0eV9sNF9pY2syIiwgJnNlY3VyaXR5X2w0X2ljazIsIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiYWVzMV9pY2siLAkmYWVzMV9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcF9ybmciLAkiaWNrIiwJCSZybmdfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNoYTExX2ljayIsCSZzaGExMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZGVzMV9pY2siLAkmZGVzMV9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMxLCBDS18zNDMwRVMxKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9hbHdvbl9mY2tfMzQzMGVzMiwgQ0tfMzQzMEVTMiksCi0JQ0xLKCJvbWFwZHNzIiwJInR2X2ZjayIsCSZkc3NfdHZfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXBkc3MiLAkidmlkZW9fZmNrIiwJJmRzc185Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMl9mY2siLAkmZHNzMl9hbHdvbl9mY2ssIENLXzM0M1gpLAotCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCi0JQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImNhbV9tY2xrIiwJJmNhbV9tY2xrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNhbV9pY2siLAkmY2FtX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjc2kyXzk2bV9mY2siLAkmY3NpMl85Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInVzYmhvc3RfMTIwbV9mY2siLCAmdXNiaG9zdF8xMjBtX2ZjaywgQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJ1c2Job3N0XzQ4bV9mY2siLCAmdXNiaG9zdF80OG1fZmNrLCBDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInVzYmhvc3RfaWNrIiwJJnVzYmhvc3RfaWNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInVzaW1fZmNrIiwJJnVzaW1fZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndrdXBfMzJrX2ZjayIsCSZ3a3VwXzMya19mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzFfZGJjayIsCSZncGlvMV9kYmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmd2R0Ml9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkid2t1cF9sNF9pY2siLAkmd2t1cF9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidXNpbV9pY2siLAkmdXNpbV9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZ3ZHQyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ3ZHQxX2ljayIsCSZ3ZHQxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvMV9pY2siLAkmZ3BpbzFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBfMzJrc3luY19pY2siLCAmb21hcF8zMmtzeW5jX2ljaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQxMl9pY2siLAkmZ3B0MTJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBlcl85Nm1fZmNrIiwJJnBlcl85Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBlcl80OG1fZmNrIiwJJnBlcl80OG1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0Ml9mY2siLAkmZ3B0Ml9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0NF9mY2siLAkmZ3B0NF9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0NV9mY2siLAkmZ3B0NV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0N19mY2siLAkmZ3B0N19mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0OF9mY2siLAkmZ3B0OF9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkicGVyXzMya19hbHdvbl9mY2siLCAmcGVyXzMya19hbHdvbl9mY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzZfZGJjayIsCSZncGlvNl9kYmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2RiY2siLAkmZ3BpbzVfZGJjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNF9kYmNrIiwJJmdwaW80X2RiY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzNfZGJjayIsCSZncGlvM19kYmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW8yX2RiY2siLAkmZ3BpbzJfZGJjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ3ZHQzX2ZjayIsCSZ3ZHQzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwZXJfbDRfaWNrIiwJJnBlcl9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzZfaWNrIiwJJmdwaW82X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNV9pY2siLAkmZ3BpbzVfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW80X2ljayIsCSZncGlvNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzNfaWNrIiwJJmdwaW8zX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvMl9pY2siLAkmZ3BpbzJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDNfaWNrIiwJJndkdDNfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkmZ3B0OV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0N19pY2siLAkmZ3B0N19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkmZ3B0Nl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0NF9pY2siLAkmZ3B0NF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkmZ3B0M19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZtY2JzcDJfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmbWNic3AzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZtY2JzcDJfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjQiLCAiZmNrIiwJJm1jYnNwNF9mY2ssCUNLXzM0M1gpLAotCUNMSygiZXRiIiwJImVtdV9zcmNfY2siLAkmZW11X3NyY19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwY2xrX2ZjayIsCSZwY2xrX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwY2xreDJfZmNrIiwJJnBjbGt4Ml9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiYXRjbGtfZmNrIiwJJmF0Y2xrX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ0cmFjZWNsa19zcmNfZmNrIiwgJnRyYWNlY2xrX3NyY19mY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkidHJhY2VjbGtfZmNrIiwJJnRyYWNlY2xrX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzcjFfZmNrIiwJJnNyMV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3IyX2ZjayIsCSZzcjJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNyX2w0X2ljayIsCSZzcl9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic2VjdXJlXzMya19mY2siLCAmc2VjdXJlXzMya19mY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ3ZHQxX2ZjayIsCSZ3ZHQxX2ZjaywJQ0tfMzQzWCksCi19OwotCi0vKiBDTV9BVVRPSURMRV9QTEwqLkFVVE9fKiBiaXQgdmFsdWVzICovCi0jZGVmaW5lIERQTExfQVVUT0lETEVfRElTQUJMRQkJCTB4MAotI2RlZmluZSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QCQkweDEKLQotI2RlZmluZSBNQVhfRFBMTF9XQUlUX1RSSUVTCQkxMDAwMDAwCi0KLSNkZWZpbmUgTUlOX1NEUkNfRExMX0xPQ0tfRlJFUQkJODMwMDAwMDAKLQogI2RlZmluZSBDWUNMRVNfUEVSX01IWgkJCTEwMDAwMDAKIAotLyogU2NhbGUgZmFjdG9yIGZvciBmaXhlZC1wb2ludCBhcml0aCBpbiBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoKSAqLwotI2RlZmluZSBTRFJDX01QVVJBVEVfU0NBTEUJCTgKLQotLyogMl5TRFJDX01QVVJBVEVfQkFTRV9TSElGVDogTVBVIE1IeiB0aGF0IFNEUkNfTVBVUkFURV9MT09QUyBpcyBkZWZpbmVkIGZvciAqLwotI2RlZmluZSBTRFJDX01QVVJBVEVfQkFTRV9TSElGVAkJOQotCi0vKgotICogU0RSQ19NUFVSQVRFX0xPT1BTOiBOdW1iZXIgb2YgTVBVIGxvb3BzIHRvIGV4ZWN1dGUgYXQKLSAqIDJeTVBVUkFURV9CQVNFX1NISUZUIE1IeiBmb3IgU0RSQyB0byBzdGFiaWxpemUKLSAqLwotI2RlZmluZSBTRFJDX01QVVJBVEVfTE9PUFMJCTk2Ci0KIC8qCiAgKiBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUOiBVU0JIT1NUIGFuZCBVU0JUTEwgYXJlIHRoZSBvbmx5IGNsb2NrcwogICogdGhhdCBhcmUgc291cmNlZCBieSBEUExMNSwgYW5kIGJvdGggb2YgdGhlc2UgcmVxdWlyZSB0aGlzIGNsb2NrCkBAIC0zNDUsNiArNTIsOSBAQAogICovCiAjZGVmaW5lIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QJCTEyMDAwMDAwMAogCisvKiBuZWVkZWQgYnkgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KK3N0cnVjdCBjbGsgKnNkcmNfaWNrX3AsICphcm1fZmNrX3A7CisKIC8qKgogICogb21hcDM0MzBlczJfY2xrX3NzaV9maW5kX2lkbGVzdCAtIHJldHVybiBDTV9JRExFU1QgaW5mbyBmb3IgU1NJCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZApAQCAtMzY2LDYgKzc2LDEzIEBACiAJKmlkbGVzdF9iaXQgPSBPTUFQMzQzMEVTMl9TVF9TU0lfSURMRV9TSElGVDsKIH0KIAorY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfc3NpX3dhaXQgPSB7CisJLmVuYWJsZQkJPSBvbWFwMl9kZmx0X2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAorCS5maW5kX2lkbGVzdAk9IG9tYXAzNDMwZXMyX2Nsa19zc2lfZmluZF9pZGxlc3QsCisJLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCit9OworCiAvKioKICAqIG9tYXAzNDMwZXMyX2Nsa19kc3NfdXNiaG9zdF9maW5kX2lkbGVzdCAtIENNX0lETEVTVCBpbmZvIGZvciBEU1MsIFVTQkhPU1QKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCkBAIC0zOTEsNiArMTA4LDEzIEBACiAJKmlkbGVzdF9iaXQgPSBPTUFQMzQzMEVTMl9TVF9EU1NfSURMRV9TSElGVDsKIH0KIAorY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfaWRsZXN0CT0gb21hcDM0MzBlczJfY2xrX2Rzc191c2Job3N0X2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorfTsKKwogLyoqCiAgKiBvbWFwMzQzMGVzMl9jbGtfaHNvdGd1c2JfZmluZF9pZGxlc3QgLSByZXR1cm4gQ01fSURMRVNUIGluZm8gZm9yIEhTT1RHVVNCCiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZApAQCAtNDEyLDM5NSArMTM2LDE5IEBACiAJKmlkbGVzdF9iaXQgPSBPTUFQMzQzMEVTMl9TVF9IU09UR1VTQl9JRExFX1NISUZUOwogfQogCi0vKioKLSAqIG9tYXAzX2RwbGxfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCByYXRlCi0gKiBAY2xrOiBEUExMIHN0cnVjdCBjbGsKLSAqCi0gKiBSZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIHRoZSBEUExMIHJhdGUuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAzX2RwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwotfQorY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfaHNvdGd1c2Jfd2FpdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfaWRsZXN0CT0gb21hcDM0MzBlczJfY2xrX2hzb3RndXNiX2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorfTsKIAotLyogX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4gLSB3cml0ZSBjbGtlbl9iaXRzIGFyZyB0byBhIERQTEwncyBlbmFibGUgYml0cyAqLwotc3RhdGljIHZvaWQgX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oc3RydWN0IGNsayAqY2xrLCB1OCBjbGtlbl9iaXRzKQotewotCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXUzMiB2OworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wcyA9IHsKKwkuZW5hYmxlCQk9IG9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSwKK307CiAKLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7Ci0JdiAmPSB+ZGQtPmVuYWJsZV9tYXNrOwotCXYgfD0gY2xrZW5fYml0cyA8PCBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+Y29udHJvbF9yZWcpOwotfQotCi0vKiBfb21hcDNfd2FpdF9kcGxsX3N0YXR1czogd2FpdCBmb3IgYSBEUExMIHRvIGVudGVyIGEgc3BlY2lmaWMgc3RhdGUgKi8KLXN0YXRpYyBpbnQgX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoc3RydWN0IGNsayAqY2xrLCB1OCBzdGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQlpbnQgaSA9IDA7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0Jc3RhdGUgPDw9IF9fZmZzKGRkLT5pZGxlc3RfbWFzayk7Ci0KLQl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBkZC0+aWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgotCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgewotCQlpKys7Ci0JCXVkZWxheSgxKTsKLQl9Ci0KLQlpZiAoaSA9PSBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6ICVzIGZhaWxlZCB0cmFuc2l0aW9uIHRvICclcydcbiIsCi0JCSAgICAgICBjbGstPm5hbWUsIChzdGF0ZSkgPyAibG9ja2VkIiA6ICJieXBhc3NlZCIpOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJjbG9jazogJXMgdHJhbnNpdGlvbiB0byAnJXMnIGluICVkIGxvb3BzXG4iLAotCQkJIGNsay0+bmFtZSwgKHN0YXRlKSA/ICJsb2NrZWQiIDogImJ5cGFzc2VkIiwgaSk7Ci0KLQkJcmV0ID0gMDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBGcm9tIDM0MzAgVFJNIEVTMiA0LjcuNi4yICovCi1zdGF0aWMgdTE2IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCi17Ci0JdW5zaWduZWQgbG9uZyBmaW50OwotCXUxNiBmID0gMDsKLQotCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIG47Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IGZpbnQgaXMgJWx1XG4iLCBmaW50KTsKLQotCWlmIChmaW50ID49IDc1MDAwMCAmJiBmaW50IDw9IDEwMDAwMDApCi0JCWYgPSAweDM7Ci0JZWxzZSBpZiAoZmludCA+IDEwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwKQotCQlmID0gMHg0OwotCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwICYmIGZpbnQgPD0gMTUwMDAwMCkKLQkJZiA9IDB4NTsKLQllbHNlIGlmIChmaW50ID4gMTUwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDApCi0JCWYgPSAweDY7Ci0JZWxzZSBpZiAoZmludCA+IDE3NTAwMDAgJiYgZmludCA8PSAyMTAwMDAwKQotCQlmID0gMHg3OwotCWVsc2UgaWYgKGZpbnQgPiA3NTAwMDAwICYmIGZpbnQgPD0gMTAwMDAwMDApCi0JCWYgPSAweEI7Ci0JZWxzZSBpZiAoZmludCA+IDEwMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMDApCi0JCWYgPSAweEM7Ci0JZWxzZSBpZiAoZmludCA+IDEyNTAwMDAwICYmIGZpbnQgPD0gMTUwMDAwMDApCi0JCWYgPSAweEQ7Ci0JZWxzZSBpZiAoZmludCA+IDE1MDAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMDApCi0JCWYgPSAweEU7Ci0JZWxzZSBpZiAoZmludCA+IDE3NTAwMDAwICYmIGZpbnQgPD0gMjEwMDAwMDApCi0JCWYgPSAweEY7Ci0JZWxzZQotCQlwcl9kZWJ1ZygiY2xvY2s6IHVua25vd24gZnJlcXNlbCBzZXR0aW5nIGZvciAlZFxuIiwgbik7Ci0KLQlyZXR1cm4gZjsKLX0KLQotLyogTm9uLUNPUkUgRFBMTCAoZS5nLiwgRFBMTHMgdGhhdCBkbyBub3QgY29udHJvbCBTRFJDKSBjbG9jayBmdW5jdGlvbnMgKi8KLQotLyoKLSAqIF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayAtIGluc3RydWN0IGEgRFBMTCB0byBsb2NrIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKLSAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKLSAqCi0gKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGxvY2suICBXYWl0cyBmb3IgdGhlIERQTEwgdG8gcmVwb3J0Ci0gKiByZWFkaW5lc3MgYmVmb3JlIHJldHVybmluZy4gIFdpbGwgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgRFBMTCdzCi0gKiBhdXRvaWRsZSBzdGF0ZSBhY3Jvc3MgdGhlIGVuYWJsZSwgcGVyIHRoZSBDRFAgY29kZS4gIElmIHRoZSBEUExMCi0gKiBsb2NrZWQgc3VjY2Vzc2Z1bGx5LCByZXR1cm4gMDsgaWYgdGhlIERQTEwgZGlkIG5vdCBsb2NrIGluIHRoZSB0aW1lCi0gKiBhbGxvdHRlZCwgb3IgRFBMTDMgd2FzIHBhc3NlZCBpbiwgcmV0dXJuIC1FSU5WQUwuCi0gKi8KLXN0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1OCBhaTsKLQlpbnQgcjsKLQotCWlmIChjbGsgPT0gJmRwbGwzX2NrKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCJjbG9jazogbG9ja2luZyBEUExMICVzXG4iLCBjbGstPm5hbWUpOwotCi0JYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKLQotCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7Ci0KLQlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9DS0VEKTsKLQotCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDEpOwotCi0JaWYgKGFpKQotCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKLQotCXJldHVybiByOwotfQotCi0vKgotICogX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MgLSBpbnN0cnVjdCBhIERQTEwgdG8gYnlwYXNzIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKLSAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKLSAqCi0gKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBieXBhc3MgbW9kZS4gIEluCi0gKiBieXBhc3MgbW9kZSwgdGhlIERQTEwncyByYXRlIGlzIHNldCBlcXVhbCB0byBpdHMgcGFyZW50IGNsb2NrJ3MKLSAqIHJhdGUuICBXYWl0cyBmb3IgdGhlIERQTEwgdG8gcmVwb3J0IHJlYWRpbmVzcyBiZWZvcmUgcmV0dXJuaW5nLgotICogV2lsbCBzYXZlIGFuZCByZXN0b3JlIHRoZSBEUExMJ3MgYXV0b2lkbGUgc3RhdGUgYWNyb3NzIHRoZSBlbmFibGUsCi0gKiBwZXIgdGhlIENEUCBjb2RlLiAgSWYgdGhlIERQTEwgZW50ZXJlZCBieXBhc3MgbW9kZSBzdWNjZXNzZnVsbHksCi0gKiByZXR1cm4gMDsgaWYgdGhlIERQTEwgZGlkIG5vdCBlbnRlciBieXBhc3MgaW4gdGhlIHRpbWUgYWxsb3R0ZWQsIG9yCi0gKiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdCBzdXBwb3J0IGxvdy1wb3dlciBieXBhc3MsCi0gKiByZXR1cm4gLUVJTlZBTC4KLSAqLwotc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IHI7Ci0JdTggYWk7Ci0KLQlpZiAoY2xrID09ICZkcGxsM19jaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIShjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IGNvbmZpZ3VyaW5nIERQTEwgJXMgZm9yIGxvdy1wb3dlciBieXBhc3NcbiIsCi0JCSBjbGstPm5hbWUpOwotCi0JYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKLQotCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT1dfUE9XRVJfQllQQVNTKTsKLQotCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDApOwotCi0JaWYgKGFpKQotCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKLQllbHNlCi0JCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotLyoKLSAqIF9vbWFwM19ub25jb3JlX2RwbGxfc3RvcCAtIGluc3RydWN0IGEgRFBMTCB0byBzdG9wCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcC4gV2lsbCBzYXZlIGFuZAotICogcmVzdG9yZSB0aGUgRFBMTCdzIGF1dG9pZGxlIHN0YXRlIGFjcm9zcyB0aGUgc3RvcCwgcGVyIHRoZSBDRFAKLSAqIGNvZGUuICBJZiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdCBzdXBwb3J0Ci0gKiBsb3ctcG93ZXIgc3RvcCwgcmV0dXJuIC1FSU5WQUw7IG90aGVyd2lzZSwgcmV0dXJuIDAuCi0gKi8KLXN0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1OCBhaTsKLQotCWlmIChjbGsgPT0gJmRwbGwzX2NrKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IHN0b3BwaW5nIERQTEwgJXNcbiIsIGNsay0+bmFtZSk7Ci0KLQlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOwotCi0JX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oY2xrLCBEUExMX0xPV19QT1dFUl9TVE9QKTsKLQotCWlmIChhaSkKLQkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7Ci0JZWxzZQotCQlvbWFwM19kcGxsX2RlbnlfaWRsZShjbGspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSAtIGluc3RydWN0IGEgRFBMTCB0byBlbnRlciBieXBhc3Mgb3IgbG9jayBtb2RlCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbmFibGUsIGUuZy4sIHRvIGVudGVyIGJ5cGFzcyBvciBsb2NrLgotICogVGhlIGNob2ljZSBvZiBtb2RlcyBkZXBlbmRzIG9uIHRoZSBEUExMJ3MgcHJvZ3JhbW1lZCByYXRlOiBpZiBpdCBpcwotICogdGhlIHNhbWUgYXMgdGhlIERQTEwncyBwYXJlbnQgY2xvY2ssIGl0IHdpbGwgZW50ZXIgYnlwYXNzOwotICogb3RoZXJ3aXNlLCBpdCB3aWxsIGVudGVyIGxvY2suICBUaGlzIGNvZGUgd2lsbCB3YWl0IGZvciB0aGUgRFBMTCB0bwotICogaW5kaWNhdGUgcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcsIHVubGVzcyB0aGUgRFBMTCB0YWtlcyB0b28gbG9uZwotICogdG8gZW50ZXIgdGhlIHRhcmdldCBzdGF0ZS4gIEludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIHN0cnVjdCBjbGsncwotICogZW5hYmxlIGZ1bmN0aW9uLiAgSWYgRFBMTDMgd2FzIHBhc3NlZCBpbiwgb3IgdGhlIERQTEwgZG9lcyBub3QKLSAqIHN1cHBvcnQgbG93LXBvd2VyIHN0b3AsIG9yIGlmIHRoZSBEUExMIHRvb2sgdG9vIGxvbmcgdG8gZW50ZXIKLSAqIGJ5cGFzcyBvciBsb2NrLCByZXR1cm4gLUVJTlZBTDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KLSAqLwotc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcjsKLQlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQotCWlmIChjbGsgPT0gJmRwbGwzX2NrKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JaWYgKCFkZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2xrLT5yYXRlID09IGRkLT5jbGtfYnlwYXNzLT5yYXRlKSB7Ci0JCVdBUk5fT04oY2xrLT5wYXJlbnQgIT0gZGQtPmNsa19ieXBhc3MpOwotCQlyID0gX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKLQl9IGVsc2UgewotCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfcmVmKTsKLQkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayhjbGspOwotCX0KLQkvKiBGSVhNRTogdGhpcyBpcyBkdWJpb3VzIC0gaWYgY2xrLT5yYXRlIGhhcyBjaGFuZ2VkLCB3aGF0IGFib3V0IHByb3BhZ2F0aW5nPyAqLwotCWlmICghcikKLQkJY2xrLT5yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwotCi0JcmV0dXJuIHI7Ci19Ci0KLS8qKgotICogb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSAtIGluc3RydWN0IGEgRFBMTCB0byBlbnRlciBieXBhc3Mgb3IgbG9jayBtb2RlCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbmFibGUsIGUuZy4sIHRvIGVudGVyIGJ5cGFzcyBvciBsb2NrLgotICogVGhlIGNob2ljZSBvZiBtb2RlcyBkZXBlbmRzIG9uIHRoZSBEUExMJ3MgcHJvZ3JhbW1lZCByYXRlOiBpZiBpdCBpcwotICogdGhlIHNhbWUgYXMgdGhlIERQTEwncyBwYXJlbnQgY2xvY2ssIGl0IHdpbGwgZW50ZXIgYnlwYXNzOwotICogb3RoZXJ3aXNlLCBpdCB3aWxsIGVudGVyIGxvY2suICBUaGlzIGNvZGUgd2lsbCB3YWl0IGZvciB0aGUgRFBMTCB0bwotICogaW5kaWNhdGUgcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcsIHVubGVzcyB0aGUgRFBMTCB0YWtlcyB0b28gbG9uZwotICogdG8gZW50ZXIgdGhlIHRhcmdldCBzdGF0ZS4gIEludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIHN0cnVjdCBjbGsncwotICogZW5hYmxlIGZ1bmN0aW9uLiAgSWYgRFBMTDMgd2FzIHBhc3NlZCBpbiwgb3IgdGhlIERQTEwgZG9lcyBub3QKLSAqIHN1cHBvcnQgbG93LXBvd2VyIHN0b3AsIG9yIGlmIHRoZSBEUExMIHRvb2sgdG9vIGxvbmcgdG8gZW50ZXIKLSAqIGJ5cGFzcyBvciBsb2NrLCByZXR1cm4gLUVJTlZBTDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KLSAqLwotc3RhdGljIHZvaWQgb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGsgPT0gJmRwbGwzX2NrKQotCQlyZXR1cm47Ci0KLQlfb21hcDNfbm9uY29yZV9kcGxsX3N0b3AoY2xrKTsKLX0KLQotCi0vKiBOb24tQ09SRSBEUExMIHJhdGUgc2V0IGNvZGUgKi8KLQotLyoKLSAqIG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtIC0gc2V0IG5vbi1jb3JlIERQTEwgTSxOIHZhbHVlcyBkaXJlY3RseQotICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0Ci0gKiBAbTogRFBMTCBtdWx0aXBsaWVyIHRvIHNldAotICogQG46IERQTEwgZGl2aWRlciB0byBzZXQKLSAqIEBmcmVxc2VsOiBGUkVRU0VMIHZhbHVlIHRvIHNldAotICoKLSAqIFByb2dyYW0gdGhlIERQTEwgd2l0aCB0aGUgc3VwcGxpZWQgTSwgTiB2YWx1ZXMsIGFuZCB3YWl0IGZvciB0aGUgRFBMTCB0bwotICogbG9jay4uICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oc3RydWN0IGNsayAqY2xrLCB1MTYgbSwgdTggbiwgdTE2IGZyZXFzZWwpCi17Ci0Jc3RydWN0IGRwbGxfZGF0YSAqZGQgPSBjbGstPmRwbGxfZGF0YTsKLQl1MzIgdjsKLQotCS8qIDM0MzAgRVMyIFRSTTogNC43LjYuOSBEUExMIFByb2dyYW1taW5nIFNlcXVlbmNlICovCi0JX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKLQotCS8qIFNldCBqaXR0ZXIgY29ycmVjdGlvbiAqLwotCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOwotCXYgJj0gfmRkLT5mcmVxc2VsX21hc2s7Ci0JdiB8PSBmcmVxc2VsIDw8IF9fZmZzKGRkLT5mcmVxc2VsX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+Y29udHJvbF9yZWcpOwotCi0JLyogU2V0IERQTEwgbXVsdGlwbGllciwgZGl2aWRlciAqLwotCXYgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7Ci0JdiAmPSB+KGRkLT5tdWx0X21hc2sgfCBkZC0+ZGl2MV9tYXNrKTsKLQl2IHw9IG0gPDwgX19mZnMoZGQtPm11bHRfbWFzayk7Ci0JdiB8PSAobiAtIDEpIDw8IF9fZmZzKGRkLT5kaXYxX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+bXVsdF9kaXYxX3JlZyk7Ci0KLQkvKiBXZSBsZXQgdGhlIGNsb2NrIGZyYW1ld29yayBzZXQgdGhlIG90aGVyIG91dHB1dCBkaXZpZGVycyBsYXRlciAqLwotCi0JLyogUkVWSVNJVDogU2V0IHJhbXAtdXAgZGVsYXk/ICovCi0KLQlfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSAtIHNldCBub24tY29yZSBEUExMIHJhdGUKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAotICogQHJhdGU6IHJvdW5kZWQgdGFyZ2V0IHJhdGUKLSAqCi0gKiBTZXQgdGhlIERQTEwgQ0xLT1VUIHRvIHRoZSB0YXJnZXQgcmF0ZS4gIElmIHRoZSBEUExMIGNhbiBlbnRlcgotICogbG93LXBvd2VyIGJ5cGFzcywgYW5kIHRoZSB0YXJnZXQgcmF0ZSBpcyB0aGUgYnlwYXNzIHNvdXJjZSBjbG9jawotICogcmF0ZSwgdGhlbiBjb25maWd1cmUgdGhlIERQTEwgZm9yIGJ5cGFzcy4gIE90aGVyd2lzZSwgcm91bmQgdGhlCi0gKiB0YXJnZXQgcmF0ZSBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIHRoZW4gcHJvZ3JhbSBhbmQgbG9jawotICogdGhlIERQTEwuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBjbGsgKm5ld19wYXJlbnQgPSBOVUxMOwotCXUxNiBmcmVxc2VsOwotCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCWludCByZXQ7Ci0KLQlpZiAoIWNsayB8fCAhcmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCWlmICghZGQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHJhdGUgPT0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogRW5zdXJlIGJvdGggdGhlIGJ5cGFzcyBhbmQgcmVmIGNsb2NrcyBhcmUgZW5hYmxlZCBwcmlvciB0bwotCSAqIGRvaW5nIGFueXRoaW5nOyB3ZSBuZWVkIHRoZSBieXBhc3MgY2xvY2sgcnVubmluZyB0byByZXByb2dyYW0KLQkgKiB0aGUgRFBMTC4KLQkgKi8KLQlvbWFwMl9jbGtfZW5hYmxlKGRkLT5jbGtfYnlwYXNzKTsKLQlvbWFwMl9jbGtfZW5hYmxlKGRkLT5jbGtfcmVmKTsKLQotCWlmIChkZC0+Y2xrX2J5cGFzcy0+cmF0ZSA9PSByYXRlICYmCi0JICAgIChjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpKSkgewotCQlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBzZXQgcmF0ZTogZW50ZXJpbmcgYnlwYXNzLlxuIiwgY2xrLT5uYW1lKTsKLQotCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOwotCQlpZiAoIXJldCkKLQkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX2J5cGFzczsKLQl9IGVsc2UgewotCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlICE9IHJhdGUpCi0JCQlvbWFwMl9kcGxsX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKLQotCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywgZGQtPmxhc3Rfcm91bmRlZF9uKTsKLQkJaWYgKCFmcmVxc2VsKQotCQkJV0FSTl9PTigxKTsKLQotCQlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBzZXQgcmF0ZTogbG9ja2luZyByYXRlIHRvICVsdS5cbiIsCi0JCQkgY2xrLT5uYW1lLCByYXRlKTsKLQotCQlyZXQgPSBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShjbGssIGRkLT5sYXN0X3JvdW5kZWRfbSwKLQkJCQkJCSBkZC0+bGFzdF9yb3VuZGVkX24sIGZyZXFzZWwpOwotCQlpZiAoIXJldCkKLQkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX3JlZjsKLQl9Ci0JaWYgKCFyZXQpIHsKLQkJLyoKLQkJICogU3dpdGNoIHRoZSBwYXJlbnQgY2xvY2sgaW4gdGhlIGhlaXJhcmNoeSwgYW5kIG1ha2Ugc3VyZQotCQkgKiB0aGF0IHRoZSBuZXcgcGFyZW50J3MgdXNlY291bnQgaXMgY29ycmVjdC4gIE5vdGU6IHdlCi0JCSAqIGVuYWJsZSB0aGUgbmV3IHBhcmVudCBiZWZvcmUgZGlzYWJsaW5nIHRoZSBvbGQgdG8gYXZvaWQKLQkJICogYW55IHVubmVjZXNzYXJ5IGhhcmR3YXJlIGRpc2FibGUtPmVuYWJsZSB0cmFuc2l0aW9ucy4KLQkJICovCi0JCWlmIChjbGstPnVzZWNvdW50KSB7Ci0JCQlvbWFwMl9jbGtfZW5hYmxlKG5ld19wYXJlbnQpOwotCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwotCQl9Ci0JCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOwotCQljbGstPnJhdGUgPSByYXRlOwotCX0KLQlvbWFwMl9jbGtfZGlzYWJsZShkZC0+Y2xrX3JlZik7Ci0Jb21hcDJfY2xrX2Rpc2FibGUoZGQtPmNsa19ieXBhc3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJLyoKIAkgKiBBY2NvcmRpbmcgdG8gdGhlIDEyLTUgQ0RQIGNvZGUgZnJvbSBUSSwgIkxpbWl0YXRpb24gMi41IgpAQCAtODMxLDEyICsxNzksMTIgQEAKICAqIFByb2dyYW0gdGhlIERQTEwgTTIgZGl2aWRlciB3aXRoIHRoZSByb3VuZGVkIHRhcmdldCByYXRlLiAgUmV0dXJucwogICogLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KICAqLwotc3RhdGljIGludCBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitpbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXUzMiBuZXdfZGl2ID0gMDsKIAl1MzIgdW5sb2NrX2RsbCA9IDA7CiAJdTMyIGM7Ci0JdW5zaWduZWQgbG9uZyB2YWxpZHJhdGUsIHNkcmNyYXRlLCBtcHVyYXRlOworCXVuc2lnbmVkIGxvbmcgdmFsaWRyYXRlLCBzZHJjcmF0ZSwgX21wdXJhdGU7CiAJc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MwOwogCXN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMTsKIAlpbnQgcmV0OwpAQCAtODQ0LDE0ICsxOTIsMTEgQEAKIAlpZiAoIWNsayB8fCAhcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2xrICE9ICZkcGxsM19tMl9jaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7CiAJaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNkcmNyYXRlID0gc2RyY19pY2sucmF0ZTsKKwlzZHJjcmF0ZSA9IHNkcmNfaWNrX3AtPnJhdGU7CiAJaWYgKHJhdGUgPiBjbGstPnJhdGUpCiAJCXNkcmNyYXRlIDw8PSAoKHJhdGUgLyBjbGstPnJhdGUpID4+IDEpOwogCWVsc2UKQEAgLTg2OSw4ICsyMTQsOCBAQAogCS8qCiAJICogWFhYIFRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIHdoZW4gdGhlIENQVSBmcmVxdWVuY3kgY2hhbmdlcwogCSAqLwotCW1wdXJhdGUgPSBhcm1fZmNrLnJhdGUgLyBDWUNMRVNfUEVSX01IWjsKLQljID0gKG1wdXJhdGUgPDwgU0RSQ19NUFVSQVRFX1NDQUxFKSA+PiBTRFJDX01QVVJBVEVfQkFTRV9TSElGVDsKKwlfbXB1cmF0ZSA9IGFybV9mY2tfcC0+cmF0ZSAvIENZQ0xFU19QRVJfTUhaOworCWMgPSAoX21wdXJhdGUgPDwgU0RSQ19NUFVSQVRFX1NDQUxFKSA+PiBTRFJDX01QVVJBVEVfQkFTRV9TSElGVDsKIAljICs9IDE7ICAvKiBmb3Igc2FmZXR5ICovCiAJYyAqPSBTRFJDX01QVVJBVEVfTE9PUFM7CiAJYyA+Pj0gU0RSQ19NUFVSQVRFX1NDQUxFOwpAQCAtOTA2LDEyOSArMjUxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wcyA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAotfTsKLQotLyogRFBMTCBhdXRvaWRsZSByZWFkL3NldCBjb2RlICovCi0KLQotLyoqCi0gKiBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQgLSByZWFkIGEgRFBMTCdzIGF1dG9pZGxlIGJpdHMKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byByZWFkCi0gKgotICogUmV0dXJuIHRoZSBEUExMJ3MgYXV0b2lkbGUgYml0cywgc2hpZnRlZCBkb3duIHRvIGJpdCAwLiAgUmV0dXJucwotICogLUVJTlZBTCBpZiBwYXNzZWQgYSBudWxsIHBvaW50ZXIgb3IgaWYgdGhlIHN0cnVjdCBjbGsgZG9lcyBub3QKLSAqIGFwcGVhciB0byByZWZlciB0byBhIERQTEwuCi0gKi8KLXN0YXRpYyB1MzIgb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1MzIgdjsKLQotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOwotCXYgJj0gZGQtPmF1dG9pZGxlX21hc2s7Ci0JdiA+Pj0gX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOwotCi0JcmV0dXJuIHY7Ci19Ci0KLS8qKgotICogb21hcDNfZHBsbF9hbGxvd19pZGxlIC0gZW5hYmxlIERQTEwgYXV0b2lkbGUgYml0cwotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KLSAqCi0gKiBFbmFibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgVGhpcyBhdXRvbWF0aWMgaWRsZSBtb2RlCi0gKiBzd2l0Y2hpbmcgdGFrZXMgZWZmZWN0IG9ubHkgd2hlbiB0aGUgRFBMTCBpcyBsb2NrZWQsIGF0IGxlYXN0IG9uCi0gKiBPTUFQMzQzMC4gIFRoZSBEUExMIHdpbGwgZW50ZXIgbG93LXBvd2VyIHN0b3Agd2hlbiBpdHMgZG93bnN0cmVhbQotICogY2xvY2tzIGFyZSBnYXRlZC4gIE5vIHJldHVybiB2YWx1ZS4KLSAqLwotc3RhdGljIHZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1MzIgdjsKLQotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKLQkJcmV0dXJuOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQotCS8qCi0JICogUkVWSVNJVDogQ09SRSBEUExMIGNhbiBvcHRpb25hbGx5IGVudGVyIGxvdy1wb3dlciBieXBhc3MKLQkgKiBieSB3cml0aW5nIDB4NSBpbnN0ZWFkIG9mIDB4MS4gIEFkZCBzb21lIG1lY2hhbmlzbSB0bwotCSAqIG9wdGlvbmFsbHkgZW50ZXIgdGhpcyBtb2RlLgotCSAqLwotCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKLQl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKLQl2IHw9IERQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKLX0KLQotLyoqCi0gKiBvbWFwM19kcGxsX2RlbnlfaWRsZSAtIHByZXZlbnQgRFBMTCBmcm9tIGF1dG9tYXRpY2FsbHkgaWRsaW5nCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgotICoKLSAqIERpc2FibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgTm8gcmV0dXJuIHZhbHVlLgotICovCi1zdGF0aWMgdm9pZCBvbWFwM19kcGxsX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JdTMyIHY7Ci0KLQlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCi0JCXJldHVybjsKLQotCWRkID0gY2xrLT5kcGxsX2RhdGE7Ci0KLQl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7Ci0JdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7Ci0JdiB8PSBEUExMX0FVVE9JRExFX0RJU0FCTEUgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKLX0KLQotLyogQ2xvY2sgY29udHJvbCBmb3IgRFBMTCBvdXRwdXRzICovCi0KLS8qKgotICogb21hcDNfY2xrb3V0eDJfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCBYMiBvdXRwdXQgdmlydHVhbCBjbG9jayByYXRlCi0gKiBAY2xrOiBEUExMIG91dHB1dCBzdHJ1Y3QgY2xrCi0gKgotICogVXNpbmcgcGFyZW50IGNsb2NrIERQTEwgZGF0YSwgbG9vayB1cCBEUExMIHN0YXRlLiAgSWYgbG9ja2VkLCBzZXQgb3VyCi0gKiByYXRlIHRvIHRoZSBkcGxsX2NsayAqIDI7IG90aGVyd2lzZSwganVzdCB1c2UgZHBsbF9jbGsuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCXUzMiB2OwotCXN0cnVjdCBjbGsgKnBjbGs7Ci0KLQkvKiBXYWxrIHVwIHRoZSBwYXJlbnRzIG9mIGNsaywgbG9va2luZyBmb3IgYSBEUExMICovCi0JcGNsayA9IGNsay0+cGFyZW50OwotCXdoaWxlIChwY2xrICYmICFwY2xrLT5kcGxsX2RhdGEpCi0JCXBjbGsgPSBwY2xrLT5wYXJlbnQ7Ci0KLQkvKiBjbGsgZG9lcyBub3QgaGF2ZSBhIERQTEwgYXMgYSBwYXJlbnQ/ICovCi0JV0FSTl9PTighcGNsayk7Ci0KLQlkZCA9IHBjbGstPmRwbGxfZGF0YTsKLQotCVdBUk5fT04oIWRkLT5lbmFibGVfbWFzayk7Ci0KLQl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKSAmIGRkLT5lbmFibGVfbWFzazsKLQl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwotCWlmICh2ICE9IE9NQVAzWFhYX0VOX0RQTExfTE9DS0VEKQotCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Ci0JZWxzZQotCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiAyOwotCXJldHVybiByYXRlOwotfQotCiAvKiBDb21tb24gY2xvY2sgY29kZSAqLwogCiAvKgpAQCAtMTAzNyw3ICsyNTksNyBAQAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAotc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7CitzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0gewogCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCiAJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAogCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKQEAgLTEwNjMsNyArMjg1LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBvbWFwM19jbGtfbG9ja19kcGxsNSh2b2lkKQordm9pZCBvbWFwM19jbGtfbG9ja19kcGxsNSh2b2lkKQogewogCXN0cnVjdCBjbGsgKmRwbGw1X2NsazsKIAlzdHJ1Y3QgY2xrICpkcGxsNV9tMl9jbGs7CkBAIC0xMDkzLDE5ICszMTUsMzIgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgb21hcDJfY2xrX2FyY2hfaW5pdCh2b2lkKQogeworCXN0cnVjdCBjbGsgKm9zY19zeXNfY2ssICpkcGxsMV9jaywgKmFybV9mY2ssICpjb3JlX2NrOworCXVuc2lnbmVkIGxvbmcgb3NjX3N5c19yYXRlOworCiAJaWYgKCFtcHVyYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIFhYWCB0ZXN0IHRoZXNlIGZvciBzdWNjZXNzICovCisJZHBsbDFfY2sgPSBjbGtfZ2V0KE5VTEwsICJkcGxsMV9jayIpOworCWFybV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZmNrIik7CisJY29yZV9jayA9IGNsa19nZXQoTlVMTCwgImNvcmVfY2siKTsKKwlvc2Nfc3lzX2NrID0gY2xrX2dldChOVUxMLCAib3NjX3N5c19jayIpOworCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwotCWlmIChjbGtfc2V0X3JhdGUoJmRwbGwxX2NrLCBtcHVyYXRlKSkKKwlpZiAoY2xrX3NldF9yYXRlKGRwbGwxX2NrLCBtcHVyYXRlKSkKIAkJcHJpbnRrKEtFUk5fRVJSICIqKiogVW5hYmxlIHRvIHNldCBNUFUgcmF0ZVxuIik7CiAKIAlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvQ29yZS9NUFUpOiAiCi0JICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JICAgICAgIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTApLAotCSAgICAgICAoY29yZV9jay5yYXRlIC8gMTAwMDAwMCksIChhcm1fZmNrLnJhdGUgLyAxMDAwMDAwKSkgOworCW9zY19zeXNfcmF0ZSA9IGNsa19nZXRfcmF0ZShvc2Nfc3lzX2NrKTsKKworCXByX2luZm8oIlN3aXRjaGVkIHRvIG5ldyBjbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCQkob3NjX3N5c19yYXRlIC8gMTAwMDAwMCksCisJCSgob3NjX3N5c19yYXRlIC8gMTAwMDAwKSAlIDEwKSwKKwkJKGNsa19nZXRfcmF0ZShjb3JlX2NrKSAvIDEwMDAwMDApLAorCQkoY2xrX2dldF9yYXRlKGFybV9mY2spIC8gMTAwMDAwMCkpOwogCiAJY2FsaWJyYXRlX2RlbGF5KCk7CiAKQEAgLTExMTMsODMgKzM0OCw3IEBACiB9CiBhcmNoX2luaXRjYWxsKG9tYXAyX2Nsa19hcmNoX2luaXQpOwogCi1pbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCi17Ci0JLyogc3RydWN0IHByY21fY29uZmlnICpwcmNtOyAqLwotCXN0cnVjdCBvbWFwX2NsayAqYzsKLQkvKiB1MzIgY2xrcmF0ZTsgKi8KLQl1MzIgY3B1X2Nsa2ZsZzsKLQotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQljcHVfbWFzayA9IFJBVEVfSU5fMzQzWDsKLQkJY3B1X2Nsa2ZsZyA9IENLXzM0M1g7Ci0KLQkJLyoKLQkJICogVXBkYXRlIHRoaXMgaWYgdGhlcmUgYXJlIGZ1cnRoZXIgY2xvY2sgY2hhbmdlcyBiZXR3ZWVuIEVTMgotCQkgKiBhbmQgcHJvZHVjdGlvbiBwYXJ0cwotCQkgKi8KLQkJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTMV8wKSB7Ci0JCQkvKiBObyAzNDMwRVMxLW9ubHkgcmF0ZXMgZXhpc3QsIHNvIG5vIFJBVEVfSU5fMzQzMEVTMSAqLwotCQkJY3B1X2Nsa2ZsZyB8PSBDS18zNDMwRVMxOwotCQl9IGVsc2UgewotCQkJY3B1X21hc2sgfD0gUkFURV9JTl8zNDMwRVMyOwotCQkJY3B1X2Nsa2ZsZyB8PSBDS18zNDMwRVMyOwotCQl9Ci0JfQotCi0JY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOwotCi0JZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCi0JCWNsa19wcmVpbml0KGMtPmxrLmNsayk7Ci0KLQlmb3IgKGMgPSBvbWFwMzR4eF9jbGtzOyBjIDwgb21hcDM0eHhfY2xrcyArIEFSUkFZX1NJWkUob21hcDM0eHhfY2xrcyk7IGMrKykKLQkJaWYgKGMtPmNwdSAmIGNwdV9jbGtmbGcpIHsKLQkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKLQkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOwotCQkJb21hcDJfaW5pdF9jbGtfY2xrZG0oYy0+bGsuY2xrKTsKLQkJfQotCi0JLyogUkVWSVNJVDogTm90IHlldCByZWFkeSBmb3IgT01BUDMgKi8KLSNpZiAwCi0JLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCi0JY2xrcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eCgmZHBsbF9jayk7Ci0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKLQkJCSBicmVhazsKLQl9Ci0JY3Vycl9wcmNtX3NldCA9IHByY207Ci0jZW5kaWYKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogIgotCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAotCSAgICAgICAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwMCksIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIChjb3JlX2NrLnJhdGUgLyAxMDAwMDAwKSwgKGFybV9mY2sucmF0ZSAvIDEwMDAwMDApKTsKLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7Ci0KLQkvKgotCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KLQkgKi8KLQlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCi0JCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7Ci0KLQkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCi0JLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwotI2lmIDAKLQl2Y2xrID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOwotCXNjbGsgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQogCiAjZW5kaWYKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCA4ZmUxYmNiLi45YTJjMDdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTEsMjk5MyArMSwyNCBAQAogLyoKLSAqIE9NQVAzIGNsb2NrIGZyYW1ld29yaworICogT01BUDMgY2xvY2sgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5Ci0gKiBXaXRoIG1hbnkgZGV2aWNlIGNsb2NrIGZpeGVzIGJ5IEtldmluIEhpbG1hbiBhbmQgSm91bmkgSMO2Z2FuZGVyCi0gKiBEUExMIGJ5cGFzcyBjbG9jayBzdXBwb3J0IGFkZGVkIGJ5IFJvbWFuIFRlcmVzaG9ua292Ci0gKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKi8KIAotLyoKLSAqIFZpcnR1YWwgY2xvY2tzIGFyZSBpbnRyb2R1Y2VkIGFzIGNvbnZlbmllbnQgdG9vbHMuCi0gKiBUaGV5IGFyZSBzb3VyY2VzIGZvciBvdGhlciBjbG9ja3MgYW5kIG5vdCBzdXBwb3NlZAotICogdG8gYmUgcmVxdWVzdGVkIGZyb20gZHJpdmVycyBkaXJlY3RseS4KLSAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfMzRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS18zNFhYX0gKIAotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szNFhYX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzRYWF9ICitpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Cit2b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpOwogCi0jaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CitleHRlcm4gc3RydWN0IGNsayAqc2RyY19pY2tfcDsKK2V4dGVybiBzdHJ1Y3QgY2xrICphcm1fZmNrX3A7CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgotCi0jZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJT01BUDM0WFhfQ01fUkVHQUREUgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwM19kcGxsX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdTMyIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci0KLS8qIE1heGltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyBmb3IgT01BUDMgKi8KLSNkZWZpbmUgT01BUDNfTUFYX0RQTExfTVVMVAkJMjA0OAotI2RlZmluZSBPTUFQM19NQVhfRFBMTF9ESVYJCTEyOAotCi0vKgotICogRFBMTDEgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIE1QVS4KLSAqIERQTEwyIHN1cHBsaWVzIGNsb2NrIHRvIHRoZSBJVkEyLgotICogRFBMTDMgc3VwcGxpZXMgQ09SRSBkb21haW4gY2xvY2tzLgotICogRFBMTDQgc3VwcGxpZXMgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKiBEUExMNSBzdXBwbGllcyBvdGhlciBwZXJpcGhlcmFsIGNsb2NrcyAoVVNCSE9TVCwgVVNJTSkuCi0gKi8KLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIERQTEwgYnlwYXNzIGNsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrOwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrOwotCi0vKiBDTV9DTEtFTl9QTEwqLkVOKiBiaXQgdmFsdWVzIC0gbm90IGFsbCBhcmUgYXZhaWxhYmxlIGZvciBldmVyeSBEUExMICovCi0jZGVmaW5lIERQTExfTE9XX1BPV0VSX1NUT1AJCTB4MQotI2RlZmluZSBEUExMX0xPV19QT1dFUl9CWVBBU1MJCTB4NQotI2RlZmluZSBEUExMX0xPQ0tFRAkJCTB4NwotCi0vKiBQUk0gQ0xPQ0tTICovCi0KLS8qIEFjY29yZGluZyB0byB0aW1lcjMyay5jLCB0aGlzIGlzIGEgMzI3NjhIeiBjbG9jaywgbm90IGEgMzIwMDBIeiBjbG9jay4gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF8zMmtfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfZmNrID0gewotCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMzI3NjgsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi0vKiBWaXJ0dWFsIHNvdXJjZSBjbG9ja3MgZm9yIG9zY19zeXNfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTJtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzEybV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEzbV9jayA9IHsKLQkubmFtZQkJPSAidmlydF8xM21fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNl84bV9jayA9IHsKLQkubmFtZQkJPSAidmlydF8xNl84bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTY4MDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5XzJtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzE5XzJtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAxOTIwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjZtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzI2bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMjYwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4XzRtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzM4XzRtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzODQwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xMm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTNtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE2XzhtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE5XzJtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzI2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18zOF80bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9zY19zeXNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnZpcnRfMTJtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTJtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnZpcnRfMTNtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTNtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnZpcnRfMTZfOG1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMTZfOG1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmdmlydF8xOV8ybV9jaywgLnJhdGVzID0gb3NjX3N5c18xOV8ybV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZ2aXJ0XzI2bV9jaywgICAucmF0ZXMgPSBvc2Nfc3lzXzI2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZ2aXJ0XzM4XzRtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzM4XzRtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotLyogT3NjaWxsYXRvciBjbG9jayAqLwotLyogMTIsIDEzLCAxNi44LCAxOS4yLCAyNiwgb3IgMzguNCBNSHogKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19zeXNfY2sgPSB7Ci0JLm5hbWUJCT0gIm9zY19zeXNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLU0VMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NZU19DTEtJTl9TRUxfTUFTSywKLQkuY2xrc2VsCQk9IG9zY19zeXNfY2xrc2VsLAotCS8qIFJFVklTSVQ6IGRlYWwgd2l0aCBhdXRvZXh0Y2xrbW9kZT8gKi8KLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb3NjX3N5c19jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyogTGF0ZW5jeTogdGhpcyBjbG9jayBpcyBvbmx5IGVuYWJsZWQgYWZ0ZXIgUFJNX0NMS1NFVFVQLlNFVFVQX1RJTUUgKi8KLS8qIEZlZWRzIERQTExzIC0gZGl2aWRlZCBmaXJzdCBieSBQUk1fQ0xLU1JDX0NUUkwuU1lTQ0xLRElWPyAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewotCS5uYW1lCQk9ICJzeXNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTUkNfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQX1NZU0NMS0RJVl9NQVNLLAotCS5jbGtzZWwJCT0gc3lzX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2FsdGNsayA9IHsKLQkubmFtZQkJPSAic3lzX2FsdGNsayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi19OwotCi0vKiBPcHRpb25hbCBleHRlcm5hbCBjbG9jayBpbnB1dCBmb3Igc29tZSBNY0JTUHMgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwX2Nsa3MgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2Nsa3MiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotfTsKLQotLyogUFJNIEVYVEVSTkFMIENMT0NLIE9VVFBVVCAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MSA9IHsKLQkubmFtZQkJPSAic3lzX2Nsa291dDEiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVRfRU5fU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIERQTExTICovCi0KLS8qIENNIENMT0NLUyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjE2X2RwbGxfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA3LCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMywgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNSwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLS8qIERQTEwxICovCi0vKiBNUFUgY2xvY2sgc291cmNlICovCi0vKiBUeXBlOiBEUExMICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMV9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCi0JLm11bHRfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX01VTFRfTUFTSywKLQkuZGl2MV9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmZHBsbDFfZmNrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9NQVNLLAotCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCi0JLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fTVBVX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKLQkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1NUX1NISUZULAotCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKLQkubWluX2RpdmlkZXIJPSAxLAotCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKLQkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5kcGxsX2RhdGEJPSAmZHBsbDFfZGQsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCi0gKiBEUExMIGlzbid0IGJ5cGFzc2VkLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDFfeDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwxX2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi0vKiBPbiBEUExMMSwgdW5saWtlIG90aGVyIERQTExzLCB0aGUgZGl2aWRlciBpcyBkb3duc3RyZWFtIGZyb20gQ0xLT1VUWDIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwxX3gyX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKgotICogRG9lcyBub3QgZXhpc3QgaW4gdGhlIFRSTSAtIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgTTIgZGl2aWRlciBmcm9tCi0gKiBieXBhc3Mgc2VsZWN0aW9uIGluIG1wdV9jawotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Mm0yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMV94Mm0yX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsMV94Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIERQTEwyICovCi0vKiBJVkEyIGNsb2NrIHNvdXJjZSAqLwotLyogVHlwZTogRFBMTCAqLwotCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMl9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmZHBsbDJfZmNrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfTUFTSywKLQkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCi0JLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpIHwKLQkJCQkoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX01QVV9JVkEyX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVX0lWQTJfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAotCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19JVkEyX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKLQkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAotCS5taW5fZGl2aWRlcgk9IDEsCi0JLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmRwbGxfZGF0YQk9ICZkcGxsMl9kZCwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsMl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsMl9tMngyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsMl9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyoKLSAqIFRoZSBUUk0gaXMgY29uZmxpY3RlZCBvbiB3aGV0aGVyIElWQTIgY2xvY2sgY29tZXMgZnJvbSBEUExMMiBDTEtPVVQKLSAqIG9yIENMS09VVFgyLiBDTEtPVVQgc2VlbXMgbW9zdCBwbGF1c2libGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX20yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMl9tMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJICBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGwyX20yeDJfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyoKLSAqIERQTEwzCi0gKiBTb3VyY2UgY2xvY2sgZm9yIGFsbCBpbnRlcmZhY2VzIGFuZCBmb3Igc29tZSBkZXZpY2UgZmNsa3MKLSAqIFJFVklTSVQ6IEFsc28gc3VwcG9ydHMgZmFzdCByZWxvY2sgYnlwYXNzIC0gbm90IGluY2x1ZGVkIGJlbG93Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGwzX2RkID0gewotCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmc3lzX2NrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0ZSRVFTRUxfTUFTSywKLQkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9NQVNLLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAotCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCi0JLm1pbl9kaXZpZGVyCT0gMSwKLQkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi0vKgotICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKLSAqIERQTEwgaXNuJ3QgYnlwYXNzZWQKLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfeDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwzX3gyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV9kcGxsM19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCi0JeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE3LCAudmFsID0gMTcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIwLCAudmFsID0gMjAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIxLCAudmFsID0gMjEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIzLCAudmFsID0gMjMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI0LCAudmFsID0gMjQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI2LCAudmFsID0gMjYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI3LCAudmFsID0gMjcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI5LCAudmFsID0gMjksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDMwLCAudmFsID0gMzAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMxX2RwbGwzbTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYzMV9kcGxsM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyogRFBMTDMgb3V0cHV0IE0yIC0gcHJpbWFyeSBjb250cm9sIHBvaW50IGZvciBDT1JFIHNwZWVkICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMl9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfbTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjMxX2RwbGwzbTJfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewotCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDNfbTN4Ml9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTNfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwzX20zX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMM19NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19tM3gyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsM19tM3gyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGwzX20zX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9DT1JFX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVfY29yZV9hbHdvbl9jayA9IHsKLQkubmFtZQkJPSAiZW11X2NvcmVfYWx3b25fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwzX20zeDJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMNCAqLwotLyogU3VwcGxpZXMgOTZNSHosIDU0TWh6IFRWIERBQywgRFNTIGZjbGssIENBTSBzZW5zb3IgY2xvY2ssIGVtdWwgdHJhY2UgY2xrICovCi0vKiBUeXBlOiBEUExMICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwyKSwKLQkubXVsdF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSywKLQkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCi0JLmNsa19yZWYJPSAmc3lzX2NrLAotCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9GUkVRU0VMX01BU0ssCi0JLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9NQVNLLAotCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKLQkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9SRUNBTF9FTl9TSElGVCwKLQkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfU1RfU0hJRlQsCi0JLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCi0JLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKLQkubWluX2RpdmlkZXIJPSAxLAotCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKLQkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi0vKgotICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKLSAqIERQTEwgaXNuJ3QgYnlwYXNzZWQgLS0KLSAqIFhYWCBkb2VzIHRoaXMgc2VydmUgYW55IGRvd25zdHJlYW0gY2xvY2tzPwotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF94Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfeDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tMngyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMyksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWXzk2TV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMngyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tMngyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X20yX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROXzk2TV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyoKLSAqIERQTEw0IGdlbmVyYXRlcyBEUExMNF9NMlgyX0NMSyB3aGljaCBpcyB0aGVuIHJvdXRlZCBpbnRvIHRoZSBQUk0gYXMKLSAqIFBSTV85Nk1fQUxXT05fKEYpQ0xLLiAgVHdvIGNsb2NrcyB0aGVuIGVtZXJnZSBmcm9tIHRoZSBQUk06Ci0gKiA5Nk1fQUxXT05fRkNMSyAoY2FsbGVkICJvbWFwXzk2bV9hbHdvbl9mY2siIGJlbG93KSBhbmQKLSAqIENNXzk2S18oRilDTEsuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2Fsd29uX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF85Nm1fYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0gewotCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fZHBsbF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzk2bV9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJIC5yYXRlcyA9IG9tYXBfOTZtX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzk2bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV85Nk1fTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfOTZtX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tM3gyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTN4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTN4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tM19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX1RWX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNTRtX2Q0bTN4Ml9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF81NG1fYWx0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF81NG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGw0X20zeDJfY2ssIC5yYXRlcyA9IG9tYXBfNTRtX2Q0bTN4Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfYWx0Y2xrLCAgICAucmF0ZXMgPSBvbWFwXzU0bV9hbHRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfNTRtX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF81NG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV81NE1fTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfNTRtX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV9jbTk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDIsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fYWx0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF80OG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfNDhtX2NtOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19hbHRjbGssIC5yYXRlcyA9IG9tYXBfNDhtX2FsdF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF80OG1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzQ4bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzQ4TV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcF80OG1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzEybV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBfMTJtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAotCS5maXhlZF9kaXYJPSA0LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotLyogVGhpcyB2aXJzdHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tNHgyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNF9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTRfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfRFNTMV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi19OwotCi0vKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X200eDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw0X200eDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZHBsbDRfbTRfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fQ0FNX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi0vKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTV4Ml9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTVfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw0X201X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X201X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X202eDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDRfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDRfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZ4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTZ4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNl9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9QRVJJUEhfU0hJRlQsCi0JLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCi0JLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9wZXJfYWx3b25fY2sgPSB7Ci0JLm5hbWUJCT0gImVtdV9wZXJfYWx3b25fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X202eDJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMNSAqLwotLyogU3VwcGxpZXMgMTIwTUh6IGNsb2NrLCBVU0lNIHNvdXJjZSBjbG9jayAqLwotLyogVHlwZTogRFBMTCAqLwotLyogMzQzMEVTMiBvbmx5ICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNV9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw0KSwKLQkubXVsdF9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfTUFTSywKLQkuZGl2MV9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX0RJVl9NQVNLLAotCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKLQkuY2xrX3JlZgk9ICZzeXNfY2ssCi0JLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9GUkVRU0VMX01BU0ssCi0JLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS0VOMiksCi0JLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwRVMyX1NORF9QRVJJUEhfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0FVVE9JRExFMl9QTEwpLAotCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBFUzJfQVVUT19QRVJJUEgyX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QyKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAotCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCi0JLm1pbl9kaXZpZGVyCT0gMSwKLQkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDVfY2siLAotCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZHBsbF9kYXRhCT0gJmRwbGw1X2RkLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAotCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGw1X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsNV9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfbTJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw1X20yX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNV9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0RJVl8xMjBNX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYxNl9kcGxsNV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZHBsbDVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBDTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVRTICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY185Nm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjXzU0bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNsa291dDJfc3JjX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKLQkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCi0JLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3lzX2Nsa291dDJfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0Ml9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY2xrb3V0Ml9zcmNfY2ssIC5yYXRlcyA9IHN5c19jbGtvdXQyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMl9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogQ00gT1VUUFVUIENMT0NLUyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JleDJfZmNrID0gewotCS5uYW1lCQk9ICJjb3JleDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19tMngyX2NrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMIHBvd2VyIGRvbWFpbiBjbG9jayBjb250cm9scyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjRfY29yZV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2NF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyoKLSAqIFJFVklTSVQ6IEFyZSB0aGVzZSBpbiBEUExMIHBvd2VyIGRvbWFpbiBvciBDTSBwb3dlciBkb21haW4/IGRvY3MKLSAqIG1heSBiZSBpbmNvbnNpc3RlbnQgaGVyZT8KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrID0gewotCS5uYW1lCQk9ICJkcGxsMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0NMS19TUkNfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsKLQkubmFtZQkJPSAibXB1X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsMV94Mm0yX2NrLAotCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGFybV9mY2tfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGFybV9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJm1wdV9jaywgLnJhdGVzID0gYXJtX2Zja19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtX2ZjayA9IHsKLQkubmFtZQkJPSAiYXJtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbXB1X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gYXJtX2Zja19jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogWFhYIFdoYXQgYWJvdXQgbmVvbl9jbGtkbSA/ICovCi0KLS8qCi0gKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKLSAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZW11X21wdV9hbHdvbl9jayA9IHsKLQkubmFtZQkJPSAiZW11X21wdV9hbHdvbl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbXB1X2NrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9DTEtfU1JDX01BU0ssCi0JLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpdmEyX2NrID0gewotCS5uYW1lCQk9ICJpdmEyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGwyX20yX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIml2YTJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBDb21tb24gaW50ZXJmYWNlIGNsb2NrcyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2NvcmVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGwzX2ljayA9IHsKLQkubmFtZQkJPSAibDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0wzX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2wzX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZsM19pY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGw0X2ljayA9IHsKLQkubmFtZQkJPSAibDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfTDRfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjJfbDNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfbDRfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmw0X2ljaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcm1faWNrID0gewotCS5uYW1lCQk9ICJybV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9STV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2Ml9sNF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIEdGWCBwb3dlciBkb21haW4gKi8KLQotLyogR0ZYIGNsb2NrcyBhcmUgaW4gMzQzMEVTMSBvbmx5LiAzNDMwRVMyIGFuZCBsYXRlciB1c2VzIHRoZSBTR1ggaW5zdGVhZCAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBnZnhfbDNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmwzX2ljaywgLnJhdGVzID0gZ2Z4X2wzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKiBWaXJ0dWFsIHBhcmVudCBjbG9jayBmb3IgZ2Z4X2wzX2ljayBhbmQgZ2Z4X2wzX2ZjayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2NrID0gewotCS5uYW1lCQk9ICJnZnhfbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0gewotCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZnZnhfbDNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAotCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzFfY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9jZzFfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fMkRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfY2cyX2NrID0gewotCS5uYW1lCQk9ICJnZnhfY2cyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0dYIHBvd2VyIGRvbWFpbiAtIDM0MzBFUzIgb25seSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNneF9jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMywgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzZ3hfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCSAucmF0ZXMgPSBzZ3hfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBzZ3hfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ZjayA9IHsKLQkubmFtZQkJPSAic2d4X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKLQkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKLQkubmFtZQkJPSAic2d4X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInNneF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkUgcG93ZXIgZG9tYWluICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0gewotCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRDJEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1vZGVtX2ZjayA9IHsKLQkubmFtZQkJPSAibW9kZW1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NT0RFTV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzYWQyZF9pY2sgPSB7Ci0JLm5hbWUJCT0gInNhZDJkX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0FEMkRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFkMmRfaWNrID0gewotCS5uYW1lCQk9ICJtYWQyZF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BRDJEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXAzNDN4X2dwdF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb21hcF8zMmtfZmNrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJICAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEx9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDEwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTBfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3BlZnVzZV9mY2sgPSB7Ci0JLm5hbWUJCT0gImNwZWZ1c2VfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fQ1BFRlVTRV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdHNfZmNrID0gewotCS5uYW1lCQk9ICJ0c19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9UU19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKLQkubmFtZQkJPSAidXNidGxsX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBDT1JFIDk2TSBGQ0xLLWRlcml2ZWQgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjM19mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIE1DQlNQIDEgJiA1IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIGNvcmVfOTZtX2ZjazsKLSAqIE1DQlNQIDIsIDMsIDQgZ2V0IHRoZWlyIDk2TUh6IGNsb2NrIGZyb20gcGVyXzk2bV9mY2suCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwXzk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwX21jYnNwX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMTVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3BfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSA1LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNV9DTEtTX01BU0ssCi0JLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAotCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0gewotCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSA0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmc2hvc3R1c2JfZmNrID0gewotCS5uYW1lCQk9ICJmc2hvc3R1c2JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkVfMTJNX0ZDSyBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV8xMm1fZmNrID0gewotCS5uYW1lCQk9ICJjb3JlXzEybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKLQkubmFtZQkJPSAiaGRxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzEybV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMMy1kZXJpdmVkIGNsb2NrICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3NpX3Nzcl9jb3JleDJfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNzaV9zc3JfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmV4Ml9mY2ssIC5yYXRlcyA9IHNzaV9zc3JfY29yZXgyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2Zja18zNDMwZXMxID0gewotCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3JfZmNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gInNzaV9zc3JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfc3NpX3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3RfZmNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gInNzaV9zc3RfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzc2lfc3NyX2Zja18zNDMwZXMxLAotCS5maXhlZF9kaXYJPSAyLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2tfMzQzMGVzMiA9IHsKLQkubmFtZQkJPSAic3NpX3NzdF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrXzM0MzBlczIsCi0JLmZpeGVkX2Rpdgk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCi19OwotCi0KLQotLyogQ09SRV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCi0KLS8qCi0gKiBYWFggbXVzdCBhZGQgY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSBmb3IgdGhlc2UgaWYgc3RhbmRhcmQgY29kZSB3b24ndAotICogaGFuZGxlIGl0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0gewotCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMSA9IHsKLQkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2JfaWNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewotCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwbWNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsIC8qIGh1aD8gKi8KLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0VDVVJJVFlfTDNfSUNLIGJhc2VkIGNsb2NrcyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gInNlY3VyaXR5X2wzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewotCS5uYW1lCQk9ICJwa2FfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkVfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljayA9IHsKLQkubmFtZQkJPSAiY29yZV9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKLQkubmFtZQkJPSAidXNidGxsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCi1zdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewotCS5uYW1lCQk9ICJpY3JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImFlczJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEyX2ljayA9IHsKLQkubmFtZQkJPSAic2hhMTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKLQkubmFtZQkJPSAiaGRxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gNCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAzLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewotCS5uYW1lCQk9ICJmYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKLQkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKLQkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX09NQVBDVFJMX1NISUZULAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU1NJX0w0X0lDSyBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9zc2lfd2FpdCwKLQkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogUkVWSVNJVDogVGVjaG5pY2FsbHkgdGhlIFRSTSBjbGFpbXMgdGhhdCB0aGlzIGlzIENPUkVfQ0xLIGJhc2VkLAotICogYnV0IGw0X2ljayBtYWtlcyBtb3JlIHNlbnNlIHRvIG1lICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsKLQkubmFtZQkJPSAidXNiX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzFfQ0xLU0VMX0ZTSE9TVFVTQl9NQVNLLAotCS5jbGtzZWwJCT0gdXNiX2w0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogU0VDVVJJVFlfTDRfSUNLMiBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKLQkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fUk5HX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzaGExMV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYTExX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTExX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEU1MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc190dl9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzc190dl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9tYXBfNTRtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfYWx3b25fZmNrID0gewotCS5uYW1lCQk9ICJkc3MyX2Fsd29uX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMSA9IHsKLQkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMiA9IHsKLQkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENBTSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKLQkubmFtZQkJPSAiY2FtX21jbGsiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmRwbGw0X201eDJfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0gewotCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCi0JLm5hbWUJCT0gImNhbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzaTJfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAiY3NpMl85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NTSTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogVVNCSE9TVCAtIDM0MzBFUzIgb25seSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0gewotCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzQ4bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInVzYmhvc3RfNDhtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2Rzc191c2Job3N0X3dhaXQsCi0JLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfaWNrID0gewotCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCi0JLm5hbWUJCT0gInVzYmhvc3RfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBXS1VQICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV85Nm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMCwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV8xMjBtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gNCwgIC52YWwgPSA3LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSA4LCAgLnZhbCA9IDgsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gOSwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMjAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb21hcF85Nm1fZmNrLAkucmF0ZXMgPSB1c2ltXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywJLnJhdGVzID0gdXNpbV8xMjBtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi0vKiAzNDMwRVMyIG9ubHkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1fZmNrID0gewotCS5uYW1lCQk9ICJ1c2ltX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfVVNJTU9DUF9NQVNLLAotCS5jbGtzZWwJCT0gdXNpbV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFhYWCBzaG91bGQgZ3B0MSdzIGNsa3NlbCBoYXZlIHdrdXBfMzJrX2ZjayBhcyB0aGUgMzJrIG9wdD8gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0gewotCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzFfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3a3VwX2w0X2ljayA9IHsKLQkubmFtZQkJPSAid2t1cF9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogMzQzMEVTMiBvbmx5ICovCi0vKiBOZXZlciBzcGVjaWZpY2FsbHkgbmFtZWQgaW4gdGhlIFRSTSwgc28gd2UgaGF2ZSB0byBpbmZlciBhIGxpa2VseSBuYW1lICovCi1zdGF0aWMgc3RydWN0IGNsayB1c2ltX2ljayA9IHsKLQkubmFtZQkJPSAidXNpbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ljayA9IHsKLQkubmFtZQkJPSAid2R0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKLQkubmFtZQkJPSAid2R0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya3N5bmNfaWNrID0gewotCS5uYW1lCQk9ICJvbWFwXzMya3N5bmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotCi0KLS8qIFBFUiBjbG9jayBkb21haW4gKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzQ4bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInBlcl80OG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyXzQ4bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewotCS5uYW1lCQk9ICJncHQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0NF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ0X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0gewotCS5uYW1lCQk9ICJncHQ1X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDZfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0N19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ3X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0gewotCS5uYW1lCQk9ICJncHQ4X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfMzJrX2Fsd29uX2ZjayA9IHsKLQkubmFtZQkJPSAicGVyXzMya19hbHdvbl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNl9kYmNrID0gewotCS5uYW1lCQk9ICJncGlvNl9kYmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2RiY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW80X2RiY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvM19kYmNrID0gewotCS5uYW1lCQk9ICJncGlvM19kYmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzJfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfbDRfaWNrID0gewotCS5uYW1lCQk9ICJwZXJfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNrID0gewotCS5uYW1lCQk9ICJncGlvM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0gewotCS5uYW1lCQk9ICJncGlvMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDZfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKLQkubmFtZQkJPSAibWNic3BfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gNCwKLQkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMjM0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlXzk2bV9mY2ssIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKLQkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3BfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAzLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLLAotCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNF9DTEtTX01BU0ssCi0JLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIEVNVSBjbG9ja3MgKi8KLQotLyogTW9yZSBpbmZvcm1hdGlvbjogQVJNIENvcnRleC1BOCBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbCwgc2VjdCAxMC4xICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19zeXNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX3Blcl9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfbXB1X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGVtdV9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGVtdV9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmVtdV9jb3JlX2Fsd29uX2NrLCAucmF0ZXMgPSBlbXVfc3JjX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZW11X3Blcl9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19wZXJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZW11X21wdV9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19tcHVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi0vKgotICogTGlrZSB0aGUgY2xrb3V0X3NyYyBjbG9ja3MsIGVtdV9zcmNfY2xrIGlzIGEgdmlydHVhbCBjbG9jaywgZXhpc3Rpbmcgb25seQotICogdG8gc3dpdGNoIHRoZSBzb3VyY2Ugb2Ygc29tZSBvZiB0aGUgRU1VIGNsb2Nrcy4KLSAqIFhYWCBBcmUgdGhlcmUgQ0xLRU4gYml0cyBmb3IgdGhlc2UgRU1VIGNsa3M/Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9zcmNfY2sgPSB7Ci0JLm5hbWUJCT0gImVtdV9zcmNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgcGNsa19lbXVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa19lbXVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmVtdV9zcmNfY2ssIC5yYXRlcyA9IHBjbGtfZW11X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGNsa19mY2sgPSB7Ci0JLm5hbWUJCT0gInBjbGtfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBwY2xrX2VtdV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xreDJfZW11X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa3gyX2VtdV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa3gyX2VtdV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjbGt4Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gInBjbGt4Ml9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAotCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYXRjbGtfZW11X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZlbXVfc3JjX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRjbGtfZmNrID0gewotCS5uYW1lCQk9ICJhdGNsa19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX3NyY19mY2sgPSB7Ci0JLm5hbWUJCT0gInRyYWNlY2xrX3NyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdHJhY2VjbGtfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZWNsa19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmdHJhY2VjbGtfc3JjX2ZjaywgLnJhdGVzID0gdHJhY2VjbGtfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0cmFjZWNsa19mY2sgPSB7Ci0JLm5hbWUJCT0gInRyYWNlY2xrX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfTUFTSywKLQkuY2xrc2VsCQk9IHRyYWNlY2xrX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBTUiBjbG9ja3MgKi8KLQotLyogU21hcnRSZWZsZXggZmNsayAoVkREMSkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyMV9mY2sgPSB7Ci0JLm5hbWUJCT0gInNyMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1IxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBTbWFydFJlZmxleCBmY2xrIChWREQyKSAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjayA9IHsKLQkubmFtZQkJPSAic3IyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjJfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0VDVVJFXzMyS19GQ0sgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9mY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKKy8qIE9NQVAzNHh4LXNwZWNpZmljIGNsa29wcyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmRjYzljYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYwpAQCAtMCwwICsxLDMyODkgQEAKKy8qCisgKiBPTUFQMyBjbG9jayBkYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKiBXaXRoIG1hbnkgZGV2aWNlIGNsb2NrIGZpeGVzIGJ5IEtldmluIEhpbG1hbiBhbmQgSm91bmkgSMO2Z2FuZGVyCisgKiBEUExMIGJ5cGFzcyBjbG9jayBzdXBwb3J0IGFkZGVkIGJ5IFJvbWFuIFRlcmVzaG9ua292CisgKgorICovCisKKy8qCisgKiBWaXJ0dWFsIGNsb2NrcyBhcmUgaW50cm9kdWNlZCBhcyBjb252ZW5pZW50IHRvb2xzLgorICogVGhleSBhcmUgc291cmNlcyBmb3Igb3RoZXIgY2xvY2tzIGFuZCBub3Qgc3VwcG9zZWQKKyAqIHRvIGJlIHJlcXVlc3RlZCBmcm9tIGRyaXZlcnMgZGlyZWN0bHkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CisjaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazM0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKworLyoKKyAqIGNsb2NrcworICovCisKKyNkZWZpbmUgT01BUF9DTV9SRUdBRERSCQlPTUFQMzRYWF9DTV9SRUdBRERSCisKKy8qIE1heGltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyBmb3IgT01BUDMgKi8KKyNkZWZpbmUgT01BUDNfTUFYX0RQTExfTVVMVAkJMjA0OAorI2RlZmluZSBPTUFQM19NQVhfRFBMTF9ESVYJCTEyOAorCisvKgorICogRFBMTDEgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIE1QVS4KKyAqIERQTEwyIHN1cHBsaWVzIGNsb2NrIHRvIHRoZSBJVkEyLgorICogRFBMTDMgc3VwcGxpZXMgQ09SRSBkb21haW4gY2xvY2tzLgorICogRFBMTDQgc3VwcGxpZXMgcGVyaXBoZXJhbCBjbG9ja3MuCisgKiBEUExMNSBzdXBwbGllcyBvdGhlciBwZXJpcGhlcmFsIGNsb2NrcyAoVVNCSE9TVCwgVVNJTSkuCisgKi8KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIERQTEwgYnlwYXNzIGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrOworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrOworCisvKiBQUk0gQ0xPQ0tTICovCisKKy8qIEFjY29yZGluZyB0byB0aW1lcjMyay5jLCB0aGlzIGlzIGEgMzI3NjhIeiBjbG9jaywgbm90IGEgMzIwMDBIeiBjbG9jay4gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF8zMmtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjc2OCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfZmNrID0geworCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMzI3NjgsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCit9OworCisvKiBWaXJ0dWFsIHNvdXJjZSBjbG9ja3MgZm9yIG9zY19zeXNfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTJtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzEybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEzbV9jayA9IHsKKwkubmFtZQkJPSAidmlydF8xM21fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDEzMDAwMDAwLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNl84bV9jayA9IHsKKwkubmFtZQkJPSAidmlydF8xNl84bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMTY4MDAwMDAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5XzJtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzE5XzJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxOTIwMDAwMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjZtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzI2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMjYwMDAwMDAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4XzRtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzM4XzRtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzODQwMDAwMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xMm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTNtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE2XzhtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE5XzJtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzI2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18zOF80bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9zY19zeXNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnZpcnRfMTJtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTJtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMTNtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTNtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMTZfOG1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMTZfOG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8xOV8ybV9jaywgLnJhdGVzID0gb3NjX3N5c18xOV8ybV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzI2bV9jaywgICAucmF0ZXMgPSBvc2Nfc3lzXzI2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzM4XzRtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzM4XzRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyogT3NjaWxsYXRvciBjbG9jayAqLworLyogMTIsIDEzLCAxNi44LCAxOS4yLCAyNiwgb3IgMzguNCBNSHogKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9zY19zeXNfY2sgPSB7CisJLm5hbWUJCT0gIm9zY19zeXNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLU0VMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NZU19DTEtJTl9TRUxfTUFTSywKKwkuY2xrc2VsCQk9IG9zY19zeXNfY2xrc2VsLAorCS8qIFJFVklTSVQ6IGRlYWwgd2l0aCBhdXRvZXh0Y2xrbW9kZT8gKi8KKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmb3NjX3N5c19jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogTGF0ZW5jeTogdGhpcyBjbG9jayBpcyBvbmx5IGVuYWJsZWQgYWZ0ZXIgUFJNX0NMS1NFVFVQLlNFVFVQX1RJTUUgKi8KKy8qIEZlZWRzIERQTExzIC0gZGl2aWRlZCBmaXJzdCBieSBQUk1fQ0xLU1JDX0NUUkwuU1lTQ0xLRElWPyAqLworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0geworCS5uYW1lCQk9ICJzeXNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTUkNfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQX1NZU0NMS0RJVl9NQVNLLAorCS5jbGtzZWwJCT0gc3lzX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2FsdGNsayA9IHsKKwkubmFtZQkJPSAic3lzX2FsdGNsayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCit9OworCisvKiBPcHRpb25hbCBleHRlcm5hbCBjbG9jayBpbnB1dCBmb3Igc29tZSBNY0JTUHMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwX2Nsa3MgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2Nsa3MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorfTsKKworLyogUFJNIEVYVEVSTkFMIENMT0NLIE9VVFBVVCAqLworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MSA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDEiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLT1VUX0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVRfRU5fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIERQTExTICovCisKKy8qIENNIENMT0NLUyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjE2X2RwbGxfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA3LCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxMywgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxNSwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKKy8qIERQTEwxICovCisvKiBNUFUgY2xvY2sgc291cmNlICovCisvKiBUeXBlOiBEUExMICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMV9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLm11bHRfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmZHBsbDFfZmNrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9NQVNLLAorCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCisJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fTVBVX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1NUX1NISUZULAorCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAorCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKKwkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2NrID0geworCS5uYW1lCQk9ICJkcGxsMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbDFfZGQsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCisgKiBEUExMIGlzbid0IGJ5cGFzc2VkLgorICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDFfeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwxX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBPbiBEUExMMSwgdW5saWtlIG90aGVyIERQTExzLCB0aGUgZGl2aWRlciBpcyBkb3duc3RyZWFtIGZyb20gQ0xLT1VUWDIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwxX3gyX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKgorICogRG9lcyBub3QgZXhpc3QgaW4gdGhlIFRSTSAtIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgTTIgZGl2aWRlciBmcm9tCisgKiBieXBhc3Mgc2VsZWN0aW9uIGluIG1wdV9jaworICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Mm0yX2NrID0geworCS5uYW1lCQk9ICJkcGxsMV94Mm0yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsMV94Ml9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIERQTEwyICovCisvKiBJVkEyIGNsb2NrIHNvdXJjZSAqLworLyogVHlwZTogRFBMTCAqLworCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMl9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmZHBsbDJfZmNrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfTUFTSywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpIHwKKwkJCQkoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX01QVV9JVkEyX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVX0lWQTJfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19JVkEyX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCisJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAorCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmRwbGxfZGF0YQk9ICZkcGxsMl9kZCwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsMl9tMngyX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsMl9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIFRoZSBUUk0gaXMgY29uZmxpY3RlZCBvbiB3aGV0aGVyIElWQTIgY2xvY2sgY29tZXMgZnJvbSBEUExMMiBDTEtPVVQKKyAqIG9yIENMS09VVFgyLiBDTEtPVVQgc2VlbXMgbW9zdCBwbGF1c2libGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX20yX2NrID0geworCS5uYW1lCQk9ICJkcGxsMl9tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDJfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwKKwkJCQkJICBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGwyX20yeDJfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGwyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIERQTEwzCisgKiBTb3VyY2UgY2xvY2sgZm9yIGFsbCBpbnRlcmZhY2VzIGFuZCBmb3Igc29tZSBkZXZpY2UgZmNsa3MKKyAqIFJFVklTSVQ6IEFsc28gc3VwcG9ydHMgZmFzdCByZWxvY2sgYnlwYXNzIC0gbm90IGluY2x1ZGVkIGJlbG93CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGwzX2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmc3lzX2NrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0ZSRVFTRUxfTUFTSywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9NQVNLLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKKyAqIERQTEwgaXNuJ3QgYnlwYXNzZWQKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19jaywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV9kcGxsM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE3LCAudmFsID0gMTcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIwLCAudmFsID0gMjAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIxLCAudmFsID0gMjEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIzLCAudmFsID0gMjMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI0LCAudmFsID0gMjQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI2LCAudmFsID0gMjYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI3LCAudmFsID0gMjcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI5LCAudmFsID0gMjksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDMwLCAudmFsID0gMzAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMxX2RwbGwzbTJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYzMV9kcGxsM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogRFBMTDMgb3V0cHV0IE0yIC0gcHJpbWFyeSBjb250cm9sIHBvaW50IGZvciBDT1JFIHNwZWVkICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjMxX2RwbGwzbTJfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0geworCS5uYW1lCQk9ICJjb3JlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDNfbTN4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTNfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMM19NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDNfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tM3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsM19tM3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGwzX20zX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9DT1JFX1NISUZULAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlbXVfY29yZV9hbHdvbl9jayA9IHsKKwkubmFtZQkJPSAiZW11X2NvcmVfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwzX20zeDJfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMNCAqLworLyogU3VwcGxpZXMgOTZNSHosIDU0TWh6IFRWIERBQywgRFNTIGZjbGssIENBTSBzZW5zb3IgY2xvY2ssIGVtdWwgdHJhY2UgY2xrICovCisvKiBUeXBlOiBEUExMICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwyKSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9NQVNLLAorCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9SRUNBTF9FTl9TSElGVCwKKwkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfU1RfU0hJRlQsCisJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAorCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKKwkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKKyAqIERQTEwgaXNuJ3QgYnlwYXNzZWQgLS0KKyAqIFhYWCBkb2VzIHRoaXMgc2VydmUgYW55IGRvd25zdHJlYW0gY2xvY2tzPworICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF94Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tMngyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMyksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMngyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tMngyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROXzk2TV9TSElGVCwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyoKKyAqIERQTEw0IGdlbmVyYXRlcyBEUExMNF9NMlgyX0NMSyB3aGljaCBpcyB0aGVuIHJvdXRlZCBpbnRvIHRoZSBQUk0gYXMKKyAqIFBSTV85Nk1fQUxXT05fKEYpQ0xLLiAgVHdvIGNsb2NrcyB0aGVuIGVtZXJnZSBmcm9tIHRoZSBQUk06CisgKiA5Nk1fQUxXT05fRkNMSyAoY2FsbGVkICJvbWFwXzk2bV9hbHdvbl9mY2siIGJlbG93KSBhbmQKKyAqIENNXzk2S18oRilDTEsuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2Fsd29uX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF85Nm1fYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0geworCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fZHBsbF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzk2bV9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJIC5yYXRlcyA9IG9tYXBfOTZtX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV85Nk1fTUFTSywKKwkuY2xrc2VsCQk9IG9tYXBfOTZtX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tM3gyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTN4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTN4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsNF9tM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX1RWX1NISUZULAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNTRtX2Q0bTN4Ml9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF81NG1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF81NG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGw0X20zeDJfY2ssIC5yYXRlcyA9IG9tYXBfNTRtX2Q0bTN4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfYWx0Y2xrLCAgICAucmF0ZXMgPSBvbWFwXzU0bV9hbHRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfNTRtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF81NG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV81NE1fTUFTSywKKwkuY2xrc2VsCQk9IG9tYXBfNTRtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV9jbTk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF80OG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfNDhtX2NtOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19hbHRjbGssIC5yYXRlcyA9IG9tYXBfNDhtX2FsdF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF80OG1fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzQ4TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF80OG1fY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzEybV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfMTJtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAorCS5maXhlZF9kaXYJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJzdHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tNHgyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNF9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfRFNTMV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X200eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X200eDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fQ0FNX1NISUZULAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTV4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTVfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X201X2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X202eDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDRfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDRfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTZ4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsNF9tNl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9QRVJJUEhfU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9wZXJfYWx3b25fY2sgPSB7CisJLm5hbWUJCT0gImVtdV9wZXJfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X202eDJfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMNSAqLworLyogU3VwcGxpZXMgMTIwTUh6IGNsb2NrLCBVU0lNIHNvdXJjZSBjbG9jayAqLworLyogVHlwZTogRFBMTCAqLworLyogMzQzMEVTMiBvbmx5ICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNV9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw0KSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS0VOMiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwRVMyX1NORF9QRVJJUEhfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0FVVE9JRExFMl9QTEwpLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBFUzJfQVVUT19QRVJJUEgyX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QyKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDVfY2siLAorCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGw1X2RkLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGw1X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsNV9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw1X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0RJVl8xMjBNX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVRTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY185Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjXzU0bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNsa291dDJfc3JjX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKKwkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3lzX2Nsa291dDJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0Ml9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY2xrb3V0Ml9zcmNfY2ssIC5yYXRlcyA9IHN5c19jbGtvdXQyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMl9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogQ00gT1VUUFVUIENMT0NLUyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JleDJfZmNrID0geworCS5uYW1lCQk9ICJjb3JleDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tMngyX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMIHBvd2VyIGRvbWFpbiBjbG9jayBjb250cm9scyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjRfY29yZV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2NF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIFJFVklTSVQ6IEFyZSB0aGVzZSBpbiBEUExMIHBvd2VyIGRvbWFpbiBvciBDTSBwb3dlciBkb21haW4/IGRvY3MKKyAqIG1heSBiZSBpbmNvbnNpc3RlbnQgaGVyZT8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrID0geworCS5uYW1lCQk9ICJkcGxsMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0NMS19TUkNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsKKwkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsMV94Mm0yX2NrLAorCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGFybV9mY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGFybV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1wdV9jaywgLnJhdGVzID0gYXJtX2Zja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2ZjayA9IHsKKwkubmFtZQkJPSAiYXJtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAorCS5jbGtzZWwJCT0gYXJtX2Zja19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogWFhYIFdoYXQgYWJvdXQgbmVvbl9jbGtkbSA/ICovCisKKy8qCisgKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKKyAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZW11X21wdV9hbHdvbl9jayA9IHsKKwkubmFtZQkJPSAiZW11X21wdV9hbHdvbl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9DTEtfU1JDX01BU0ssCisJLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmEyX2NrID0geworCS5uYW1lCQk9ICJpdmEyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGwyX20yX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIml2YTJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDb21tb24gaW50ZXJmYWNlIGNsb2NrcyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2NvcmVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX2ljayA9IHsKKwkubmFtZQkJPSAibDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0wzX01BU0ssCisJLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2wzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsM19pY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X2ljayA9IHsKKwkubmFtZQkJPSAibDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfTDRfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjJfbDNfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfbDRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmw0X2ljaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcm1faWNrID0geworCS5uYW1lCQk9ICJybV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9STV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2Ml9sNF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIEdGWCBwb3dlciBkb21haW4gKi8KKworLyogR0ZYIGNsb2NrcyBhcmUgaW4gMzQzMEVTMSBvbmx5LiAzNDMwRVMyIGFuZCBsYXRlciB1c2VzIHRoZSBTR1ggaW5zdGVhZCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBnZnhfbDNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmwzX2ljaywgLnJhdGVzID0gZ2Z4X2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKiBWaXJ0dWFsIHBhcmVudCBjbG9jayBmb3IgZ2Z4X2wzX2ljayBhbmQgZ2Z4X2wzX2ZjayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2NrID0geworCS5uYW1lCQk9ICJnZnhfbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0geworCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZnZnhfbDNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAorCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2sgPSB7CisJLm5hbWUJCT0gImdmeF9sM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzFfY2sgPSB7CisJLm5hbWUJCT0gImdmeF9jZzFfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fMkRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfY2cyX2NrID0geworCS5uYW1lCQk9ICJnZnhfY2cyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogU0dYIHBvd2VyIGRvbWFpbiAtIDM0MzBFUzIgb25seSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNneF9jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMywgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzZ3hfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssCSAucmF0ZXMgPSBzZ3hfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBzZ3hfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ZjayA9IHsKKwkubmFtZQkJPSAic2d4X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKKwkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKKwkubmFtZQkJPSAic2d4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInNneF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIENPUkUgcG93ZXIgZG9tYWluICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0geworCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRDJEX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1vZGVtX2ZjayA9IHsKKwkubmFtZQkJPSAibW9kZW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NT0RFTV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzYWQyZF9pY2sgPSB7CisJLm5hbWUJCT0gInNhZDJkX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0FEMkRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWFkMmRfaWNrID0geworCS5uYW1lCQk9ICJtYWQyZF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BRDJEX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXAzNDN4X2dwdF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmb21hcF8zMmtfZmNrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTBfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3BlZnVzZV9mY2sgPSB7CisJLm5hbWUJCT0gImNwZWZ1c2VfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fQ1BFRlVTRV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdHNfZmNrID0geworCS5uYW1lCQk9ICJ0c19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9UU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKKwkubmFtZQkJPSAidXNidGxsX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDT1JFIDk2TSBGQ0xLLWRlcml2ZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjM19mY2sgPSB7CisJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDMsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfZmNrID0geworCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAyLAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIE1DQlNQIDEgJiA1IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIGNvcmVfOTZtX2ZjazsKKyAqIE1DQlNQIDIsIDMsIDQgZ2V0IHRoZWlyIDk2TUh6IGNsb2NrIGZyb20gcGVyXzk2bV9mY2suCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwX21jYnNwX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMTVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSA1LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNV9DTEtTX01BU0ssCisJLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAorCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0geworCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSA0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDIsCisJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmc2hvc3R1c2JfZmNrID0geworCS5uYW1lCQk9ICJmc2hvc3R1c2JfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIENPUkVfMTJNX0ZDSyBiYXNlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV8xMm1fZmNrID0geworCS5uYW1lCQk9ICJjb3JlXzEybV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKKwkubmFtZQkJPSAiaGRxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzEybV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMMy1kZXJpdmVkIGNsb2NrICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3NpX3Nzcl9jb3JleDJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNzaV9zc3JfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmV4Ml9mY2ssIC5yYXRlcyA9IHNzaV9zc3JfY29yZXgyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2Zja18zNDMwZXMxID0geworCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAorCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3JfZmNrXzM0MzBlczIgPSB7CisJLm5hbWUJCT0gInNzaV9zc3JfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfc3NpX3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAorCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3RfZmNrXzM0MzBlczEgPSB7CisJLm5hbWUJCT0gInNzaV9zc3RfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzc2lfc3NyX2Zja18zNDMwZXMxLAorCS5maXhlZF9kaXYJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAic3NpX3NzdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrXzM0MzBlczIsCisJLmZpeGVkX2Rpdgk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisKKworLyogQ09SRV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCisKKy8qCisgKiBYWFggbXVzdCBhZGQgY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSBmb3IgdGhlc2UgaWYgc3RhbmRhcmQgY29kZSB3b24ndAorICogaGFuZGxlIGl0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2JfaWNrXzM0MzBlczIgPSB7CisJLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0geworCS5uYW1lCQk9ICJzZHJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CisJLm5hbWUJCT0gImdwbWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsIC8qIGh1aD8gKi8KKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogU0VDVVJJVFlfTDNfSUNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sM19pY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyaXR5X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0geworCS5uYW1lCQk9ICJwa2FfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2wzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIENPUkVfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljayA9IHsKKwkubmFtZQkJPSAiY29yZV9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKKwkubmFtZQkJPSAidXNidGxsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCitzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0geworCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CisJLm5hbWUJCT0gImFlczJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEyX2ljayA9IHsKKwkubmFtZQkJPSAic2hhMTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKKwkubmFtZQkJPSAiaGRxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gNCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAzLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAyLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0geworCS5uYW1lCQk9ICJncHQxMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDUsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDEsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKKwkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKKwkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX09NQVBDVFJMX1NISUZULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogU1NJX0w0X0lDSyBiYXNlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKKwkubmFtZQkJPSAic3NpX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczEgPSB7CisJLm5hbWUJCT0gInNzaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczIgPSB7CisJLm5hbWUJCT0gInNzaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9zc2lfd2FpdCwKKwkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogUkVWSVNJVDogVGVjaG5pY2FsbHkgdGhlIFRSTSBjbGFpbXMgdGhhdCB0aGlzIGlzIENPUkVfQ0xLIGJhc2VkLAorICogYnV0IGw0X2ljayBtYWtlcyBtb3JlIHNlbnNlIHRvIG1lICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsKKwkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzFfQ0xLU0VMX0ZTSE9TVFVTQl9NQVNLLAorCS5jbGtzZWwJCT0gdXNiX2w0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogU0VDVVJJVFlfTDRfSUNLMiBiYXNlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKKwkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKKwkubmFtZQkJPSAiYWVzMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0geworCS5uYW1lCQk9ICJybmdfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fUk5HX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaGExMV9pY2sgPSB7CisJLm5hbWUJCT0gInNoYTExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTExX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEU1MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczEgPSB7CisJLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczIgPSB7CisJLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc190dl9mY2sgPSB7CisJLm5hbWUJCT0gImRzc190dl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJm9tYXBfNTRtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfYWx3b25fZmNrID0geworCS5uYW1lCQk9ICJkc3MyX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMSA9IHsKKwkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLworCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMiA9IHsKKwkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLworCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIENBTSAqLworCitzdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKKwkubmFtZQkJPSAiY2FtX21jbGsiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw0X201eDJfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImNhbV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzaTJfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiY3NpMl85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NTSTJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogVVNCSE9TVCAtIDM0MzBFUzIgb25seSAqLworCitzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0geworCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzQ4bV9mY2sgPSB7CisJLm5hbWUJCT0gInVzYmhvc3RfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2Rzc191c2Job3N0X3dhaXQsCisJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfaWNrID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gInVzYmhvc3RfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBXS1VQICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV85Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDQsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gOCwgIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxMCwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV8xMjBtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gNCwgIC52YWwgPSA3LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSA4LCAgLnZhbCA9IDgsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gOSwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMjAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmb21hcF85Nm1fZmNrLAkucmF0ZXMgPSB1c2ltXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywJLnJhdGVzID0gdXNpbV8xMjBtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiAzNDMwRVMyIG9ubHkgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1fZmNrID0geworCS5uYW1lCQk9ICJ1c2ltX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfVVNJTU9DUF9NQVNLLAorCS5jbGtzZWwJCT0gdXNpbV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFhYWCBzaG91bGQgZ3B0MSdzIGNsa3NlbCBoYXZlIHdrdXBfMzJrX2ZjayBhcyB0aGUgMzJrIG9wdD8gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0geworCS5uYW1lCQk9ICJncHQxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0geworCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfZGJjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzFfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3a3VwX2w0X2ljayA9IHsKKwkubmFtZQkJPSAid2t1cF9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogMzQzMEVTMiBvbmx5ICovCisvKiBOZXZlciBzcGVjaWZpY2FsbHkgbmFtZWQgaW4gdGhlIFRSTSwgc28gd2UgaGF2ZSB0byBpbmZlciBhIGxpa2VseSBuYW1lICovCitzdGF0aWMgc3RydWN0IGNsayB1c2ltX2ljayA9IHsKKwkubmFtZQkJPSAidXNpbV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ljayA9IHsKKwkubmFtZQkJPSAid2R0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKKwkubmFtZQkJPSAid2R0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8xX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya3N5bmNfaWNrID0geworCS5uYW1lCQk9ICJvbWFwXzMya3N5bmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0geworCS5uYW1lCQk9ICJncHQxMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworCisKKy8qIFBFUiBjbG9jayBkb21haW4gKi8KKworc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGVyXzQ4bV9mY2sgPSB7CisJLm5hbWUJCT0gInBlcl80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0geworCS5uYW1lCQk9ICJncHQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ0X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0geworCS5uYW1lCQk9ICJncHQ1X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0N19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ3X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0geworCS5uYW1lCQk9ICJncHQ4X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfMzJrX2Fsd29uX2ZjayA9IHsKKwkubmFtZQkJPSAicGVyXzMya19hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9kYmNrID0geworCS5uYW1lCQk9ICJncGlvNl9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZGJjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW80X2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19kYmNrID0geworCS5uYW1lCQk9ICJncGlvM19kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfZGJjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzJfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfbDRfaWNrID0geworCS5uYW1lCQk9ICJwZXJfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrID0geworCS5uYW1lCQk9ICJncGlvNl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0geworCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0geworCS5uYW1lCQk9ICJncGlvNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNrID0geworCS5uYW1lCQk9ICJncGlvM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0geworCS5uYW1lCQk9ICJncGlvMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAyLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDMsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gNCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMjM0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlXzk2bV9mY2ssIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaWQJCT0gMiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pZAkJPSAzLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLLAorCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmlkCQk9IDQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNF9DTEtTX01BU0ssCisJLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIEVNVSBjbG9ja3MgKi8KKworLyogTW9yZSBpbmZvcm1hdGlvbjogQVJNIENvcnRleC1BOCBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbCwgc2VjdCAxMC4xICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX3Blcl9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfbXB1X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGVtdV9zcmNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGVtdV9zcmNfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmVtdV9jb3JlX2Fsd29uX2NrLCAucmF0ZXMgPSBlbXVfc3JjX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZW11X3Blcl9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19wZXJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZW11X21wdV9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19tcHVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKgorICogTGlrZSB0aGUgY2xrb3V0X3NyYyBjbG9ja3MsIGVtdV9zcmNfY2xrIGlzIGEgdmlydHVhbCBjbG9jaywgZXhpc3Rpbmcgb25seQorICogdG8gc3dpdGNoIHRoZSBzb3VyY2Ugb2Ygc29tZSBvZiB0aGUgRU1VIGNsb2Nrcy4KKyAqIFhYWCBBcmUgdGhlcmUgQ0xLRU4gYml0cyBmb3IgdGhlc2UgRU1VIGNsa3M/CisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9zcmNfY2sgPSB7CisJLm5hbWUJCT0gImVtdV9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKKwkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgcGNsa19lbXVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa19lbXVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmVtdV9zcmNfY2ssIC5yYXRlcyA9IHBjbGtfZW11X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGNsa19mY2sgPSB7CisJLm5hbWUJCT0gInBjbGtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLX01BU0ssCisJLmNsa3NlbAkJPSBwY2xrX2VtdV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xreDJfZW11X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa3gyX2VtdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa3gyX2VtdV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjbGt4Ml9mY2sgPSB7CisJLm5hbWUJCT0gInBjbGt4Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAorCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYXRjbGtfZW11X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZlbXVfc3JjX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXRjbGtfZmNrID0geworCS5uYW1lCQk9ICJhdGNsa19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCisJLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX3NyY19mY2sgPSB7CisJLm5hbWUJCT0gInRyYWNlY2xrX3NyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKKwkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdHJhY2VjbGtfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZWNsa19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmdHJhY2VjbGtfc3JjX2ZjaywgLnJhdGVzID0gdHJhY2VjbGtfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0cmFjZWNsa19mY2sgPSB7CisJLm5hbWUJCT0gInRyYWNlY2xrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfTUFTSywKKwkuY2xrc2VsCQk9IHRyYWNlY2xrX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBTUiBjbG9ja3MgKi8KKworLyogU21hcnRSZWZsZXggZmNsayAoVkREMSkgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyMV9mY2sgPSB7CisJLm5hbWUJCT0gInNyMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1IxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTbWFydFJlZmxleCBmY2xrIChWREQyKSAqLworc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjayA9IHsKKwkubmFtZQkJPSAic3IyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX2w0X2ljayA9IHsKKwkubmFtZQkJPSAic3JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLworCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogU0VDVVJFXzMyS19GQ0sgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworCisvKgorICogY2xrZGV2CisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2NsayBvbWFwMzR4eF9jbGtzW10gPSB7CisJQ0xLKE5VTEwsCSJvbWFwXzMya19mY2siLAkmb21hcF8zMmtfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMTJtX2NrIiwJJnZpcnRfMTJtX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMTNtX2NrIiwJJnZpcnRfMTNtX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMTZfOG1fY2siLCAmdmlydF8xNl84bV9jaywgQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ2aXJ0XzE5XzJtX2NrIiwgJnZpcnRfMTlfMm1fY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkidmlydF8yNm1fY2siLAkmdmlydF8yNm1fY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidmlydF8zOF80bV9jayIsICZ2aXJ0XzM4XzRtX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9zY19zeXNfY2siLAkmb3NjX3N5c19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2siLAkmc3lzX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInN5c19hbHRjbGsiLAkmc3lzX2FsdGNsaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtY2JzcF9jbGtzIiwJJm1jYnNwX2Nsa3MsCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dDEiLAkmc3lzX2Nsa291dDEsCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDFfY2siLAkmZHBsbDFfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDFfeDJfY2siLAkmZHBsbDFfeDJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDFfeDJtMl9jayIsICZkcGxsMV94Mm0yX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwyX2NrIiwJJmRwbGwyX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwyX20yX2NrIiwJJmRwbGwyX20yX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX2NrIiwJJmRwbGwzX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNvcmVfY2siLAkmY29yZV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM194Ml9jayIsCSZkcGxsM194Ml9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19tMl9jayIsCSZkcGxsM19tMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19tMngyX2NrIiwgJmRwbGwzX20yeDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTNfY2siLAkmZHBsbDNfbTNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTN4Ml9jayIsICZkcGxsM19tM3gyX2NrLCBDS18zNDNYKSwKKwlDTEsoImV0YiIsCSJlbXVfY29yZV9hbHdvbl9jayIsICZlbXVfY29yZV9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9jayIsCSZkcGxsNF9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF94Ml9jayIsCSZkcGxsNF94Ml9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzk2bV9hbHdvbl9mY2siLCAmb21hcF85Nm1fYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfOTZtX2ZjayIsCSZvbWFwXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY21fOTZtX2ZjayIsCSZjbV85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfNTRtX2ZjayIsCSZvbWFwXzU0bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF80OG1fZmNrIiwJJm9tYXBfNDhtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzEybV9mY2siLAkmb21hcF8xMm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20yX2NrIiwJJmRwbGw0X20yX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20yeDJfY2siLCAmZHBsbDRfbTJ4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tM19jayIsCSZkcGxsNF9tM19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tM3gyX2NrIiwgJmRwbGw0X20zeDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTRfY2siLAkmZHBsbDRfbTRfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTR4Ml9jayIsICZkcGxsNF9tNHgyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X201X2NrIiwJJmRwbGw0X201X2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X201eDJfY2siLCAmZHBsbDRfbTV4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNl9jayIsCSZkcGxsNF9tNl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNngyX2NrIiwgJmRwbGw0X202eDJfY2ssIENLXzM0M1gpLAorCUNMSygiZXRiIiwJImVtdV9wZXJfYWx3b25fY2siLCAmZW11X3Blcl9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNV9jayIsCSZkcGxsNV9jaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJkcGxsNV9tMl9jayIsCSZkcGxsNV9tMl9jaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJjbGtvdXQyX3NyY19jayIsICZjbGtvdXQyX3NyY19jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JleDJfZmNrIiwJJmNvcmV4Ml9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDFfZmNrIiwJJmRwbGwxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImFybV9mY2siLAkmYXJtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJldGIiLAkiZW11X21wdV9hbHdvbl9jayIsICZlbXVfbXB1X2Fsd29uX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwyX2ZjayIsCSZkcGxsMl9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiaXZhMl9jayIsCSZpdmEyX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImwzX2ljayIsCSZsM19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibDRfaWNrIiwJJmw0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJybV9pY2siLAkmcm1faWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdmeF9sM19jayIsCSZnZnhfbDNfY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2ZjayIsCSZnZnhfbDNfZmNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9sM19pY2siLAkmZ2Z4X2wzX2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfY2cxX2NrIiwJJmdmeF9jZzFfY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2NnMl9jayIsCSZnZnhfY2cyX2NrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJInNneF9mY2siLAkmc2d4X2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiZDJkXzI2bV9mY2siLAkmZDJkXzI2bV9mY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkibW9kZW1fZmNrIiwJJm1vZGVtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzYWQyZF9pY2siLAkmc2FkMmRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1hZDJkX2ljayIsCSZtYWQyZF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQxMV9mY2siLAkmZ3B0MTFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNwZWZ1c2VfZmNrIiwJJmNwZWZ1c2VfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInRzX2ZjayIsCSZ0c19mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNidGxsX2ZjayIsCSZ1c2J0bGxfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImNvcmVfOTZtX2ZjayIsCSZjb3JlXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiZmNrIiwJJm1tY2hzM19mY2ssCUNLXzM0MzBFUzIpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkmbW1jaHMxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJpMmNfb21hcC4zIiwgImZjayIsCSZpMmMzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJpMmNfb21hcC4yIiwgImZjayIsCSZpMmMyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmMxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNvcmVfNDhtX2ZjayIsCSZjb3JlXzQ4bV9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuNCIsICJmY2siLAkmbWNzcGk0X2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjIiLCAiZmNrIiwJJm1jc3BpMl9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkmdWFydDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZnNob3N0dXNiX2ZjayIsICZmc2hvc3R1c2JfZmNrLCBDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImNvcmVfMTJtX2ZjayIsCSZjb3JlXzEybV9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9oZHEuMCIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJInNzaV9zc3JfZmNrIiwJJnNzaV9zc3JfZmNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzc2lfc3N0X2ZjayIsCSZzc2lfc3N0X2Zja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImNvcmVfbDNfaWNrIiwJJmNvcmVfbDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmaHNvdGd1c2JfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAorCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZoc290Z3VzYl9pY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJzZHJjX2ljayIsCSZzZHJjX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sM19pY2siLCAmc2VjdXJpdHlfbDNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JlX2w0X2ljayIsCSZjb3JlX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJJm1tY2hzM19pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImFlczJfaWNrIiwJJmFlczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTEyX2ljayIsCSZzaGExMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMl9pY2siLAkmZGVzMl9pY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiaWNrIiwJJm1jc3BpNF9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMyIsICJpY2siLAkmaTJjM19pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzM0M1gpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiaWNrIiwJJm1jYnNwNV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImZhY19pY2siLAkmZmFjX2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJInNlY3VyaXR5X2w0X2ljazIiLCAmc2VjdXJpdHlfbDRfaWNrMiwgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJhZXMxX2ljayIsCSZhZXMxX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2hhMTFfaWNrIiwJJnNoYTExX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkZXMxX2ljayIsCSZkZXMxX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwZHNzIiwJImRzczFfZmNrIiwJJmRzczFfYWx3b25fZmNrXzM0MzBlczEsIENLXzM0MzBFUzEpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMyLCBDS18zNDMwRVMyKSwKKwlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc190dl9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcGRzcyIsCSJ2aWRlb19mY2siLAkmZHNzXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcGRzcyIsCSJkc3MyX2ZjayIsCSZkc3MyX2Fsd29uX2ZjaywgQ0tfMzQzWCksCisJQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoIm9tYXBkc3MiLAkiaWNrIiwJCSZkc3NfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiY2FtX21jbGsiLAkmY2FtX21jbGssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY2FtX2ljayIsCSZjYW1faWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNzaTJfOTZtX2ZjayIsCSZjc2kyXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidXNiaG9zdF8xMjBtX2ZjayIsICZ1c2Job3N0XzEyMG1fZmNrLCBDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfNDhtX2ZjayIsICZ1c2Job3N0XzQ4bV9mY2ssIENLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNiaG9zdF9pY2siLAkmdXNiaG9zdF9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNpbV9mY2siLAkmdXNpbV9mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2t1cF8zMmtfZmNrIiwJJndrdXBfMzJrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvMV9kYmNrIiwJJmdwaW8xX2RiY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZ3ZHQyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3a3VwX2w0X2ljayIsCSZ3a3VwX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2ltX2ljayIsCSZ1c2ltX2ljaywJQ0tfMzQzMEVTMiksCisJQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJndkdDJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2ljayIsCSZncGlvMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF8zMmtzeW5jX2ljayIsICZvbWFwXzMya3N5bmNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGVyXzk2bV9mY2siLAkmcGVyXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGVyXzQ4bV9mY2siLAkmcGVyXzQ4bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQyX2ZjayIsCSZncHQyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQzX2ZjayIsCSZncHQzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ1X2ZjayIsCSZncHQ1X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ZjayIsCSZncHQ2X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ4X2ZjayIsCSZncHQ4X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ZjayIsCSZncHQ5X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwZXJfMzJrX2Fsd29uX2ZjayIsICZwZXJfMzJrX2Fsd29uX2ZjaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNl9kYmNrIiwJJmdwaW82X2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfZGJjayIsCSZncGlvNV9kYmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2RiY2siLAkmZ3BpbzRfZGJjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvM19kYmNrIiwJJmdwaW8zX2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzJfZGJjayIsCSZncGlvMl9kYmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBlcl9sNF9pY2siLAkmcGVyX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNl9pY2siLAkmZ3BpbzZfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzRfaWNrIiwJJmdwaW80X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvM19pY2siLAkmZ3BpbzNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8yX2ljayIsCSZncGlvMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJJnVhcnQzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ4X2ljayIsCSZncHQ4X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ljayIsCSZncHQ3X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ1X2ljayIsCSZncHQ1X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ljayIsCSZncHQ0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQyX2ljayIsCSZncHQyX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiZmNrIiwJJm1jYnNwMl9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJmY2siLAkmbWNic3A0X2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJldGIiLAkiZW11X3NyY19jayIsCSZlbXVfc3JjX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBjbGtfZmNrIiwJJnBjbGtfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBjbGt4Ml9mY2siLAkmcGNsa3gyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJhdGNsa19mY2siLAkmYXRjbGtfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInRyYWNlY2xrX3NyY19mY2siLCAmdHJhY2VjbGtfc3JjX2ZjaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ0cmFjZWNsa19mY2siLAkmdHJhY2VjbGtfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNyMV9mY2siLAkmc3IxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzcjJfZmNrIiwJJnNyMl9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3JfbDRfaWNrIiwJJnNyX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2ZjayIsICZzZWN1cmVfMzJrX2ZjaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQxMl9mY2siLAkmZ3B0MTJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndkdDFfZmNrIiwJJndkdDFfZmNrLAlDS18zNDNYKSwKK307CisKKworaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQoreworCS8qIHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsgKi8KKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CisJLyogdTMyIGNsa3JhdGU7ICovCisJdTMyIGNwdV9jbGtmbGc7CisKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzM0M1g7CisJCWNwdV9jbGtmbGcgPSBDS18zNDNYOworCisJCS8qCisJCSAqIFVwZGF0ZSB0aGlzIGlmIHRoZXJlIGFyZSBmdXJ0aGVyIGNsb2NrIGNoYW5nZXMgYmV0d2VlbiBFUzIKKwkJICogYW5kIHByb2R1Y3Rpb24gcGFydHMKKwkJICovCisJCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKKwkJfSBlbHNlIHsKKwkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMjsKKwkJfQorCX0KKworCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKKworCWZvciAoYyA9IG9tYXAzNHh4X2Nsa3M7IGMgPCBvbWFwMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMzR4eF9jbGtzKTsgYysrKQorCQljbGtfcHJlaW5pdChjLT5say5jbGspOworCisJZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7CisJCQljbGtkZXZfYWRkKCZjLT5sayk7CisJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CisJCX0KKworCS8qIFJFVklTSVQ6IE5vdCB5ZXQgcmVhZHkgZm9yIE9NQVAzICovCisjaWYgMAorCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLworCWNsa3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCisJCQlicmVhazsKKwl9CisJY3Vycl9wcmNtX3NldCA9IHByY207CisjZW5kaWYKKworCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogIgorCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCSAgICAgICAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwMCksIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIChjb3JlX2NrLnJhdGUgLyAxMDAwMDAwKSwgKGFybV9mY2sucmF0ZSAvIDEwMDAwMDApKTsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CisKKwkvKgorCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCisJCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7CisKKwkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KKwlzZHJjX2lja19wID0gY2xrX2dldChOVUxMLCAic2RyY19pY2siKTsKKwlhcm1fZmNrX3AgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZmNrIik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzA4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBPTUFQNC1zcGVjaWZpYyBjbG9jayBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlICJjbG9jay5oIgorCitzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0geworCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCisJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAorCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKKwkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKKwkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCisJLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMgPSB7CisJLmVuYWJsZQkJPSAmb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSwKK307CisKK3ZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQoreworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjljZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBPTUFQNCBjbG9jayBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS180NFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLXzQ0WFhfSAorCisjZGVmaW5lIE9NQVA0NDMwX01BWF9EUExMX01VTFQJMjA0OAorI2RlZmluZSBPTUFQNDQzMF9NQVhfRFBMTF9ESVYJMTI4CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjEwZTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCkBAIC0wLDAgKzEsMjc2NiBAQAorLyoKKyAqIE9NQVA0IENsb2NrIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQorICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgorI2luY2x1ZGUgPHBsYXQvY2xrZGV2X29tYXAuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2s0NHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisKKy8qIFJvb3QgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGV4dGFsdF9jbGtpbl9jayA9IHsKKwkubmFtZQkJPSAiZXh0YWx0X2Nsa2luX2NrIiwKKwkucmF0ZQkJPSA1OTAwMDAwMCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBhZF9jbGtzX2NrID0geworCS5uYW1lCQk9ICJwYWRfY2xrc19jayIsCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwYWRfc2xpbWJ1c19jb3JlX2Nsa3NfY2sgPSB7CisJLm5hbWUJCT0gInBhZF9zbGltYnVzX2NvcmVfY2xrc19jayIsCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2Nsa19zcmNfY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyZV8zMmtfY2xrX3NyY19jayIsCisJLnJhdGUJCT0gMzI3NjgsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzbGltYnVzX2NsayA9IHsKKwkubmFtZQkJPSAic2xpbWJ1c19jbGsiLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzXzMya19jayA9IHsKKwkubmFtZQkJPSAic3lzXzMya19jayIsCisJLnJhdGUJCT0gMzI3NjgsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEyMDAwMDAwX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzEyMDAwMDAwX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxMjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTMwMDAwMDBfY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTMwMDAwMDBfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDEzMDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNjgwMDAwMF9jayA9IHsKKwkubmFtZQkJPSAidmlydF8xNjgwMDAwMF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMTY4MDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5MjAwMDAwX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzE5MjAwMDAwX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxOTIwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjYwMDAwMDBfY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMjYwMDAwMDBfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDI2MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8yNzAwMDAwMF9jayA9IHsKKwkubmFtZQkJPSAidmlydF8yNzAwMDAwMF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMjcwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4NDAwMDAwX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzM4NDAwMDAwX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzODQwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2XzFfMF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdl8xXzFfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXZfMV8yX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2XzFfM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdl8xXzRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXZfMV81X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2XzFfNl9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdl8xXzdfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa2luX3NlbFtdID0geworCXsgLnBhcmVudCA9ICZ2aXJ0XzEyMDAwMDAwX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMTMwMDAwMDBfY2ssIC5yYXRlcyA9IGRpdl8xXzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8xNjgwMDAwMF9jaywgLnJhdGVzID0gZGl2XzFfM19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzE5MjAwMDAwX2NrLCAucmF0ZXMgPSBkaXZfMV80X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMjYwMDAwMDBfY2ssIC5yYXRlcyA9IGRpdl8xXzVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8yNzAwMDAwMF9jaywgLnJhdGVzID0gZGl2XzFfNl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzM4NDAwMDAwX2NrLCAucmF0ZXMgPSBkaXZfMV83X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa2luX2NrID0geworCS5uYW1lCQk9ICJzeXNfY2xraW5fY2siLAorCS5yYXRlCQk9IDM4NDAwMDAwLAorCS5jbGtzZWwJCT0gc3lzX2Nsa2luX3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fU1lTX0NMS1NFTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9TWVNfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHV0bWlfcGh5X2Nsa291dF9jayA9IHsKKwkubmFtZQkJPSAidXRtaV9waHlfY2xrb3V0X2NrIiwKKwkucmF0ZQkJPSAxMjAwMDAwMCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHhjbGs2MG1oc3AxX2NrID0geworCS5uYW1lCQk9ICJ4Y2xrNjBtaHNwMV9jayIsCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB4Y2xrNjBtaHNwMl9jayA9IHsKKwkubmFtZQkJPSAieGNsazYwbWhzcDJfY2siLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgeGNsazYwbW90Z19jayA9IHsKKwkubmFtZQkJPSAieGNsazYwbW90Z19jayIsCisJLnJhdGUJCT0gNjAwMDAwMDAsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCisvKiBNb2R1bGUgY2xvY2tzIGFuZCBEUExMIG91dHB1dHMgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyXzF0bzJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfc3lzX3JlZl9jbGtfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jbGtpbl9jaywgLnJhdGVzID0gZGl2Ml8xdG8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9zeXNfcmVmX2NsayA9IHsKKwkubmFtZQkJPSAiZHBsbF9zeXNfcmVmX2NsayIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9zeXNfcmVmX2Nsa19kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9EUExMX1NZU19SRUZfQ0xLU0VMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYWJlX2RwbGxfcmVmY2xrX211eF9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9zeXNfcmVmX2NsaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfMzJrX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWJlX2RwbGxfcmVmY2xrX211eF9jayA9IHsKKwkubmFtZQkJPSAiYWJlX2RwbGxfcmVmY2xrX211eF9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9zeXNfcmVmX2NsaywKKwkuY2xrc2VsCQk9IGFiZV9kcGxsX3JlZmNsa19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9BQkVfUExMX1JFRl9DTEtTRUwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzBfMF9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworLyogRFBMTF9BQkUgKi8KK3N0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfYWJlX2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfQUJFLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jbGtpbl9jaywKKwkuY2xrX3JlZgk9ICZhYmVfZHBsbF9yZWZjbGtfbXV4X2NrLAorCS5jb250cm9sX3JlZwk9IE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9BQkUsCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCisJLmF1dG9pZGxlX3JlZwk9IE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfQUJFLAorCS5pZGxlc3RfcmVnCT0gT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfQUJFLAorCS5tdWx0X21hc2sJPSBPTUFQNDQzMF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDQ0MzBfRFBMTF9ESVZfTUFTSywKKwkuZW5hYmxlX21hc2sJPSBPTUFQNDQzMF9EUExMX0VOX01BU0ssCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9NQVNLLAorCS5pZGxlc3RfbWFzawk9IE9NQVA0NDMwX1NUX0RQTExfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyCT0gT01BUDQ0MzBfTUFYX0RQTExfTVVMVCwKKwkubWF4X2RpdmlkZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9ESVYsCisJLm1pbl9kaXZpZGVyCT0gMSwKK307CisKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9hYmVfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfYWJlX2NrIiwKKwkucGFyZW50CQk9ICZhYmVfZHBsbF9yZWZjbGtfbXV4X2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbF9hYmVfZGQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9hYmVfbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9hYmVfbTJ4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfY2ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhYmVfMjRtX2ZjbGsgPSB7CisJLm5hbWUJCT0gImFiZV8yNG1fZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTJ4Ml9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2M18xdG80X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYWJlX2Nsa19kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9hYmVfbTJ4Ml9jaywgLnJhdGVzID0gZGl2M18xdG80X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWJlX2NsayA9IHsKKwkubmFtZQkJPSAiYWJlX2NsayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTJ4Ml9jaywKKwkuY2xrc2VsCQk9IGFiZV9jbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLU0VMX0FCRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfT1BQX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGFlc3NfZmNsa19kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYWJlX2NsaywgLnJhdGVzID0gZGl2Ml8xdG8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzc19mY2xrID0geworCS5uYW1lCQk9ICJhZXNzX2ZjbGsiLAorCS5wYXJlbnQJCT0gJmFiZV9jbGssCisJLmNsa3NlbAkJPSBhZXNzX2ZjbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9BRVNTX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0FFU1NfRkNMS19NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjMxXzF0bzMxX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gNywgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTAsIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxMSwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxMywgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxNCwgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxNSwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxNywgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxOCwgLnZhbCA9IDE3LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAxOSwgLnZhbCA9IDE4LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyMCwgLnZhbCA9IDE5LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyMSwgLnZhbCA9IDIwLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyMiwgLnZhbCA9IDIxLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyMywgLnZhbCA9IDIyLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyNCwgLnZhbCA9IDIzLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyNSwgLnZhbCA9IDI0LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyNiwgLnZhbCA9IDI1LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyNywgLnZhbCA9IDI2LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyOCwgLnZhbCA9IDI3LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyOSwgLnZhbCA9IDI4LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAzMCwgLnZhbCA9IDI5LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAzMSwgLnZhbCA9IDMwLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX2FiZV9tM19kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9hYmVfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9hYmVfbTNfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfYWJlX20zX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2FiZV9jaywKKwkuY2xrc2VsCQk9IGRwbGxfYWJlX20zX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0FCRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29yZV9oc2RfYnlwX2Nsa19tdXhfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGxfc3lzX3JlZl9jbGssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9hYmVfbTNfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2hzZF9ieXBfY2xrX211eF9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9oc2RfYnlwX2Nsa19tdXhfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmNsa3NlbAkJPSBjb3JlX2hzZF9ieXBfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0NPUkUsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCisvKiBEUExMX0NPUkUgKi8KK3N0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfY29yZV9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0NPUkUsCisJLmNsa19ieXBhc3MJPSAmY29yZV9oc2RfYnlwX2Nsa19tdXhfY2ssCisJLmNsa19yZWYJPSAmZHBsbF9zeXNfcmVmX2NsaywKKwkuY29udHJvbF9yZWcJPSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfQ09SRSwKKwkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9DT1JFLAorCS5pZGxlc3RfcmVnCT0gT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfQ09SRSwKKwkubXVsdF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawk9IE9NQVA0NDMwX0RQTExfRElWX01BU0ssCisJLmVuYWJsZV9tYXNrCT0gT01BUDQ0MzBfRFBMTF9FTl9NQVNLLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDQ0MzBfQVVUT19EUExMX01PREVfTUFTSywKKwkuaWRsZXN0X21hc2sJPSBPTUFQNDQzMF9TVF9EUExMX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllcgk9IE9NQVA0NDMwX01BWF9EUExMX01VTFQsCisJLm1heF9kaXZpZGVyCT0gT01BUDQ0MzBfTUFYX0RQTExfRElWLAorCS5taW5fZGl2aWRlcgk9IDEsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAorCS5kcGxsX2RhdGEJPSAmZHBsbF9jb3JlX2RkLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfY29yZV9tNl9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX2NrLCAucmF0ZXMgPSBkaXYzMV8xdG8zMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX202X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX002X0RQTExfQ09SRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGJnY2xrX211eF9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2Nsa2luX2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGxfY29yZV9tNl9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRiZ2Nsa19tdXhfY2sgPSB7CisJLm5hbWUJCT0gImRiZ2Nsa19tdXhfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX20yX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQ09SRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGRycGh5X2NrID0geworCS5uYW1lCQk9ICJkZHJwaHlfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tMl9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX201X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX001X0RQTExfQ09SRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2X2NvcmVfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJmRwbGxfY29yZV9tNV9jaywgLnJhdGVzID0gZGl2Ml8xdG8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGl2X2NvcmVfY2sgPSB7CisJLm5hbWUJCT0gImRpdl9jb3JlX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfbTVfY2ssCisJLmNsa3NlbAkJPSBkaXZfY29yZV9kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9DTEtTRUxfQ09SRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfQ09SRV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfMXRvOF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXZfaXZhX2hzX2Nsa19kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX201X2NrLCAucmF0ZXMgPSBkaXY0XzF0bzhfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkaXZfaXZhX2hzX2NsayA9IHsKKwkubmFtZQkJPSAiZGl2X2l2YV9oc19jbGsiLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNV9jaywKKwkuY2xrc2VsCQk9IGRpdl9pdmFfaHNfY2xrX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0JZUENMS19EUExMX0lWQSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfMF8xX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRpdl9tcHVfaHNfY2xrID0geworCS5uYW1lCQk9ICJkaXZfbXB1X2hzX2NsayIsCisJLnBhcmVudAkJPSAmZHBsbF9jb3JlX201X2NrLAorCS5jbGtzZWwJCT0gZGl2X2l2YV9oc19jbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fQllQQ0xLX0RQTExfTVBVLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzFfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX200X2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NvcmVfbTRfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9jaywKKwkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNl9kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9DT1JFLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkbGxfY2xrX2Rpdl9jayA9IHsKKwkubmFtZQkJPSAiZGxsX2Nsa19kaXZfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNF9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfYWJlX20yX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2FiZV9tMl9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2FiZV9tM19kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9BQkUsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX20zX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00zX0RQTExfQ09SRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX203X2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NvcmVfbTdfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9jaywKKwkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNl9kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9DT1JFLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBpdmFfaHNkX2J5cF9jbGtfbXV4X3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsX3N5c19yZWZfY2xrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRpdl9pdmFfaHNfY2xrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXZhX2hzZF9ieXBfY2xrX211eF9jayA9IHsKKwkubmFtZQkJPSAiaXZhX2hzZF9ieXBfY2xrX211eF9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9zeXNfcmVmX2NsaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKKy8qIERQTExfSVZBICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsX2l2YV9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0lWQSwKKwkuY2xrX2J5cGFzcwk9ICZpdmFfaHNkX2J5cF9jbGtfbXV4X2NrLAorCS5jbGtfcmVmCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmNvbnRyb2xfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0lWQSwKKwkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9JVkEsCisJLmlkbGVzdF9yZWcJPSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9JVkEsCisJLm11bHRfbWFzawk9IE9NQVA0NDMwX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQNDQzMF9EUExMX0RJVl9NQVNLLAorCS5lbmFibGVfbWFzawk9IE9NQVA0NDMwX0RQTExfRU5fTUFTSywKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVA0NDMwX0FVVE9fRFBMTF9NT0RFX01BU0ssCisJLmlkbGVzdF9tYXNrCT0gT01BUDQ0MzBfU1RfRFBMTF9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxULAorCS5tYXhfZGl2aWRlcgk9IE9NQVA0NDMwX01BWF9EUExMX0RJViwKKwkubWluX2RpdmlkZXIJPSAxLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2l2YV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9pdmFfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmRwbGxfZGF0YQk9ICZkcGxsX2l2YV9kZCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX2l2YV9tNF9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9pdmFfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9pdmFfbTRfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfaXZhX200X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2l2YV9jaywKKwkuY2xrc2VsCQk9IGRwbGxfaXZhX200X2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX0lWQSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9pdmFfbTVfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfaXZhX201X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2l2YV9jaywKKwkuY2xrc2VsCQk9IGRwbGxfaXZhX200X2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNV9EUExMX0lWQSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworLyogRFBMTF9NUFUgKi8KK3N0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfbXB1X2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfTVBVLAorCS5jbGtfYnlwYXNzCT0gJmRpdl9tcHVfaHNfY2xrLAorCS5jbGtfcmVmCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmNvbnRyb2xfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX01QVSwKKwkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9NUFUsCisJLmlkbGVzdF9yZWcJPSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9NUFUsCisJLm11bHRfbWFzawk9IE9NQVA0NDMwX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQNDQzMF9EUExMX0RJVl9NQVNLLAorCS5lbmFibGVfbWFzawk9IE9NQVA0NDMwX0RQTExfRU5fTUFTSywKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVA0NDMwX0FVVE9fRFBMTF9NT0RFX01BU0ssCisJLmlkbGVzdF9tYXNrCT0gT01BUDQ0MzBfU1RfRFBMTF9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxULAorCS5tYXhfZGl2aWRlcgk9IE9NQVA0NDMwX01BWF9EUExMX0RJViwKKwkubWluX2RpdmlkZXIJPSAxLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX21wdV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9tcHVfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmRwbGxfZGF0YQk9ICZkcGxsX21wdV9kZCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX21wdV9tMl9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9tcHVfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9tcHVfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfbXB1X20yX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX21wdV9jaywKKwkuY2xrc2VsCQk9IGRwbGxfbXB1X20yX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX01QVSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGVyX2hzX2Nsa19kaXZfY2sgPSB7CisJLm5hbWUJCT0gInBlcl9oc19jbGtfZGl2X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2FiZV9tM19jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHBlcl9oc2RfYnlwX2Nsa19tdXhfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGxfc3lzX3JlZl9jbGssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmcGVyX2hzX2Nsa19kaXZfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfaHNkX2J5cF9jbGtfbXV4X2NrID0geworCS5uYW1lCQk9ICJwZXJfaHNkX2J5cF9jbGtfbXV4X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAorCS5jbGtzZWwJCT0gcGVyX2hzZF9ieXBfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX1BFUiwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0JZUF9DTEtTRUxfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKKy8qIERQTExfUEVSICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsX3Blcl9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX1BFUiwKKwkuY2xrX2J5cGFzcwk9ICZwZXJfaHNkX2J5cF9jbGtfbXV4X2NrLAorCS5jbGtfcmVmCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmNvbnRyb2xfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX1BFUiwKKwkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9QRVIsCisJLmlkbGVzdF9yZWcJPSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9QRVIsCisJLm11bHRfbWFzawk9IE9NQVA0NDMwX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQNDQzMF9EUExMX0RJVl9NQVNLLAorCS5lbmFibGVfbWFzawk9IE9NQVA0NDMwX0RQTExfRU5fTUFTSywKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVA0NDMwX0FVVE9fRFBMTF9NT0RFX01BU0ssCisJLmlkbGVzdF9tYXNrCT0gT01BUDQ0MzBfU1RfRFBMTF9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxULAorCS5tYXhfZGl2aWRlcgk9IE9NQVA0NDMwX01BWF9EUExMX0RJViwKKwkubWluX2RpdmlkZXIJPSAxLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCisJLmRwbGxfZGF0YQk9ICZkcGxsX3Blcl9kZCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX3Blcl9tMl9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfcGVyX20yX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3Blcl9jaywKKwkuY2xrc2VsCQk9IGRwbGxfcGVyX20yX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX1BFUiwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTJ4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfY2ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTNfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00zX0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tNF9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTRfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX000X0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tNV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTVfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX001X0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tNl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTZfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX002X0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tN19jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTdfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX003X0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCisvKiBEUExMX1VOSVBSTyAqLworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbF91bmlwcm9fZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9VTklQUk8sCisJLmNsa19ieXBhc3MJPSAmZHBsbF9zeXNfcmVmX2NsaywKKwkuY2xrX3JlZgk9ICZkcGxsX3N5c19yZWZfY2xrLAorCS5jb250cm9sX3JlZwk9IE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9VTklQUk8sCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCisJLmF1dG9pZGxlX3JlZwk9IE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfVU5JUFJPLAorCS5pZGxlc3RfcmVnCT0gT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfVU5JUFJPLAorCS5tdWx0X21hc2sJPSBPTUFQNDQzMF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDQ0MzBfRFBMTF9ESVZfTUFTSywKKwkuZW5hYmxlX21hc2sJPSBPTUFQNDQzMF9EUExMX0VOX01BU0ssCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9NQVNLLAorCS5pZGxlc3RfbWFzawk9IE9NQVA0NDMwX1NUX0RQTExfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyCT0gT01BUDQ0MzBfTUFYX0RQTExfTVVMVCwKKwkubWF4X2RpdmlkZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9ESVYsCisJLm1pbl9kaXZpZGVyCT0gMSwKK307CisKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF91bmlwcm9fY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfdW5pcHJvX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAorCS5kcGxsX2RhdGEJPSAmZHBsbF91bmlwcm9fZGQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF91bmlwcm9fbTJ4Ml9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF91bmlwcm9fY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF91bmlwcm9fbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF91bmlwcm9fbTJ4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF91bmlwcm9fY2ssCisJLmNsa3NlbAkJPSBkcGxsX3VuaXByb19tMngyX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX1VOSVBSTywKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hzX2Nsa19kaXZfY2sgPSB7CisJLm5hbWUJCT0gInVzYl9oc19jbGtfZGl2X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2FiZV9tM19jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKKy8qIERQTExfVVNCICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsX3VzYl9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX1VTQiwKKwkuY2xrX2J5cGFzcwk9ICZ1c2JfaHNfY2xrX2Rpdl9jaywKKwkuY2xrX3JlZgk9ICZkcGxsX3N5c19yZWZfY2xrLAorCS5jb250cm9sX3JlZwk9IE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9VU0IsCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCisJLmF1dG9pZGxlX3JlZwk9IE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfVVNCLAorCS5pZGxlc3RfcmVnCT0gT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfVVNCLAorCS5tdWx0X21hc2sJPSBPTUFQNDQzMF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDQ0MzBfRFBMTF9ESVZfTUFTSywKKwkuZW5hYmxlX21hc2sJPSBPTUFQNDQzMF9EUExMX0VOX01BU0ssCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9NQVNLLAorCS5pZGxlc3RfbWFzawk9IE9NQVA0NDMwX1NUX0RQTExfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyCT0gT01BUDQ0MzBfTUFYX0RQTExfTVVMVCwKKwkubWF4X2RpdmlkZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9ESVYsCisJLm1pbl9kaXZpZGVyCT0gMSwKK307CisKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF91c2JfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfdXNiX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAorCS5kcGxsX2RhdGEJPSAmZHBsbF91c2JfZGQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF91c2JfY2xrZGNvbGRvX2NrID0geworCS5uYW1lCQk9ICJkcGxsX3VzYl9jbGtkY29sZG9fY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfdXNiX2NrLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF91c2JfbTJfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJmRwbGxfdXNiX2NrLCAucmF0ZXMgPSBkaXYzMV8xdG8zMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfdXNiX20yX2NrID0geworCS5uYW1lCQk9ICJkcGxsX3VzYl9tMl9jayIsCisJLnBhcmVudAkJPSAmZHBsbF91c2JfY2ssCisJLmNsa3NlbAkJPSBkcGxsX3VzYl9tMl9kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9VU0IsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWXzBfNl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkdWNhdGlfY2xrX211eF9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZGl2X2NvcmVfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTZfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkdWNhdGlfY2xrX211eF9jayA9IHsKKwkubmFtZQkJPSAiZHVjYXRpX2Nsa19tdXhfY2siLAorCS5wYXJlbnQJCT0gJmRpdl9jb3JlX2NrLAorCS5jbGtzZWwJCT0gZHVjYXRpX2Nsa19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9DTEtTRUxfRFVDQVRJX0lTU19ST09ULAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2ZjbGsgPSB7CisJLm5hbWUJCT0gImZ1bmNfMTJtX2ZjbGsiLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzI0bV9jbGsgPSB7CisJLm5hbWUJCT0gImZ1bmNfMjRtX2NsayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTJfY2ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzI0bWNfZmNsayA9IHsKKwkubmFtZQkJPSAiZnVuY18yNG1jX2ZjbGsiLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfNHRvOF9yYXRlc1tdID0geworCXsgLmRpdiA9IDQsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fZmNsa19kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTJ4Ml9jaywgLnJhdGVzID0gZGl2Ml80dG84X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY180OG1fZmNsayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTJ4Ml9jaywKKwkuY2xrc2VsCQk9IGZ1bmNfNDhtX2ZjbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fU0NBTEVfRkNMSywKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9TQ0FMRV9GQ0xLX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNDhtY19mY2xrID0geworCS5uYW1lCQk9ICJmdW5jXzQ4bWNfZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTJ4Ml9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2Ml8ydG80X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMiwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzY0bV9mY2xrX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX3Blcl9tNF9jaywgLnJhdGVzID0gZGl2Ml8ydG80X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY182NG1fZmNsayA9IHsKKwkubmFtZQkJPSAiZnVuY182NG1fZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTRfY2ssCisJLmNsa3NlbAkJPSBmdW5jXzY0bV9mY2xrX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX1NDQUxFX0ZDTEssCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfU0NBTEVfRkNMS19NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzk2bV9mY2xrX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX3Blcl9tMngyX2NrLCAucmF0ZXMgPSBkaXYyXzJ0bzRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9mY2xrID0geworCS5uYW1lCQk9ICJmdW5jXzk2bV9mY2xrIiwKKwkucGFyZW50CQk9ICZkcGxsX3Blcl9tMngyX2NrLAorCS5jbGtzZWwJCT0gZnVuY185Nm1fZmNsa19kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9TQ0FMRV9GQ0xLLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX1NDQUxFX0ZDTEtfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgaHNtbWM2X2ZjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfNjRtX2ZjbGssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY185Nm1fZmNsaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzbW1jNl9mY2xrID0geworCS5uYW1lCQk9ICJoc21tYzZfZmNsayIsCisJLnBhcmVudAkJPSAmZnVuY182NG1fZmNsaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2Ml8xdG84X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBpbml0XzYwbV9mY2xrX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX3VzYl9tMl9jaywgLnJhdGVzID0gZGl2Ml8xdG84X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF82MG1fZmNsayA9IHsKKwkubmFtZQkJPSAiaW5pdF82MG1fZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF91c2JfbTJfY2ssCisJLmNsa3NlbAkJPSBpbml0XzYwbV9mY2xrX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9VU0JfNjBNSFosCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzBfMF9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsM19kaXZfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJmRpdl9jb3JlX2NrLCAucmF0ZXMgPSBkaXYyXzF0bzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsM19kaXZfY2sgPSB7CisJLm5hbWUJCT0gImwzX2Rpdl9jayIsCisJLnBhcmVudAkJPSAmZGl2X2NvcmVfY2ssCisJLmNsa3NlbAkJPSBsM19kaXZfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLU0VMX0NPUkUsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0wzX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGw0X2Rpdl9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbDNfZGl2X2NrLCAucmF0ZXMgPSBkaXYyXzF0bzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsNF9kaXZfY2sgPSB7CisJLm5hbWUJCT0gImw0X2Rpdl9jayIsCisJLnBhcmVudAkJPSAmbDNfZGl2X2NrLAorCS5jbGtzZWwJCT0gbDRfZGl2X2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9DT1JFLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9MNF9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBscF9jbGtfZGl2X2NrID0geworCS5uYW1lCQk9ICJscF9jbGtfZGl2X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2FiZV9tMngyX2NrLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfd2t1cF9jbGtfbXV4X3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xraW5fY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmbHBfY2xrX2Rpdl9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X3drdXBfY2xrX211eF9jayA9IHsKKwkubmFtZQkJPSAibDRfd2t1cF9jbGtfbXV4X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCisJLmNsa3NlbAkJPSBsNF93a3VwX2Nsa19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9MNF9XS1VQX0NMS1NFTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfMF8wX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwZXJfYWJlX25jX2ZjbGtfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJmRwbGxfYWJlX20yX2NrLCAucmF0ZXMgPSBkaXYyXzF0bzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfYWJlX25jX2ZjbGsgPSB7CisJLm5hbWUJCT0gInBlcl9hYmVfbmNfZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTJfY2ssCisJLmNsa3NlbAkJPSBwZXJfYWJlX25jX2ZjbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fU0NBTEVfRkNMSywKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9TQ0FMRV9GQ0xLX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYXNwMl9mY2xrX3NlbFtdID0geworCXsgLnBhcmVudCA9ICZmdW5jXzk2bV9mY2xrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnBlcl9hYmVfbmNfZmNsaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYXNwMl9mY2xrID0geworCS5uYW1lCQk9ICJtY2FzcDJfZmNsayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fZmNsaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYXNwM19mY2xrID0geworCS5uYW1lCQk9ICJtY2FzcDNfZmNsayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fZmNsaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9jcF9hYmVfaWNsayA9IHsKKwkubmFtZQkJPSAib2NwX2FiZV9pY2xrIiwKKwkucGFyZW50CQk9ICZhZXNzX2ZjbGssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfYWJlXzI0bV9mY2xrID0geworCS5uYW1lCQk9ICJwZXJfYWJlXzI0bV9mY2xrIiwKKwkucGFyZW50CQk9ICZkcGxsX2FiZV9tMl9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHBtZF9zdG1fY2xvY2tfbXV4X3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xraW5fY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX202X2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGxfcGVyX203X2NrLCAucmF0ZXMgPSBkaXZfMV8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcG1kX3N0bV9jbG9ja19tdXhfY2sgPSB7CisJLm5hbWUJCT0gInBtZF9zdG1fY2xvY2tfbXV4X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwbWRfdHJhY2VfY2xrX211eF9jayA9IHsKKwkubmFtZQkJPSAicG1kX3RyYWNlX2Nsa19tdXhfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5Y19jbGtfZGl2X2NrID0geworCS5uYW1lCQk9ICJzeWNfY2xrX2Rpdl9jayIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9zeXNfcmVmX2Nsa19kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9BQkVfRFNTX1NZU19DTEtTRUwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzBfMF9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCisvKiBMZWFmIGNsb2NrcyBjb250cm9sbGVkIGJ5IG1vZHVsZXMgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgYWVzMV9jayA9IHsKKwkubmFtZQkJPSAiYWVzMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFNFQ19BRVMxX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9zZWN1cmVfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmwzX2Rpdl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9jayA9IHsKKwkubmFtZQkJPSAiYWVzMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFNFQ19BRVMyX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9zZWN1cmVfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmwzX2Rpdl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzc19jayA9IHsKKwkubmFtZQkJPSAiYWVzc19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX0FFU1NfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCisJLnBhcmVudAkJPSAmYWVzc19mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjdXN0X2VmdXNlX2NrID0geworCS5uYW1lCQk9ICJjdXN0X2VmdXNlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0NFRlVTRV9DRUZVU0VfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X2NlZnVzZV9jbGtkbSIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXMzZGVzX2NrID0geworCS5uYW1lCQk9ICJkZXMzZGVzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX0RFUzNERVNfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3NlY3VyZV9jbGtkbSIsCisJLnBhcmVudAkJPSAmbDRfZGl2X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkbWljX3N5bmNfbXV4X3NlbFtdID0geworCXsgLnBhcmVudCA9ICZhYmVfMjRtX2ZjbGssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3ljX2Nsa19kaXZfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY18yNG1fY2xrLCAucmF0ZXMgPSBkaXZfMV8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1pY19zeW5jX211eF9jayA9IHsKKwkubmFtZQkJPSAiZG1pY19zeW5jX211eF9jayIsCisJLnBhcmVudAkJPSAmYWJlXzI0bV9mY2xrLAorCS5jbGtzZWwJCT0gZG1pY19zeW5jX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfRE1JQ19DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfZG1pY19hYmVfZ2ZjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRtaWNfc3luY19tdXhfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmcGFkX2Nsa3NfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc2xpbWJ1c19jbGssIC5yYXRlcyA9IGRpdl8xXzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBNZXJnZWQgZnVuY19kbWljX2FiZV9nZmNsayBpbnRvIGRtaWNfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRtaWNfY2sgPSB7CisJLm5hbWUJCT0gImRtaWNfY2siLAorCS5wYXJlbnQJCT0gJmRtaWNfc3luY19tdXhfY2ssCisJLmNsa3NlbAkJPSBmdW5jX2RtaWNfYWJlX2dmY2xrX3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9ETUlDX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9ETUlDX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX2NrID0geworCS5uYW1lCQk9ICJkc3NfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fRFNTX0RTU19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDNfZHNzX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsM19kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1Y2F0aV9jayA9IHsKKwkubmFtZQkJPSAiZHVjYXRpX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0RVQ0FUSV9EVUNBVElfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAorCS5jbGtkbV9uYW1lCT0gImR1Y2F0aV9jbGtkbSIsCisJLnBhcmVudAkJPSAmZHVjYXRpX2Nsa19tdXhfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtaWYxX2NrID0geworCS5uYW1lCQk9ICJlbWlmMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGXzFfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAorCS5jbGtkbV9uYW1lCT0gImwzX2VtaWZfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmRkcnBoeV9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW1pZjJfY2sgPSB7CisJLm5hbWUJCT0gImVtaWYyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfMl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDNfZW1pZl9jbGtkbSIsCisJLnBhcmVudAkJPSAmZGRycGh5X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmZGlmX2ZjbGtfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJmRwbGxfcGVyX200X2NrLCAucmF0ZXMgPSBkaXYzXzF0bzRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBNZXJnZWQgZmRpZl9mY2xrIGludG8gZmRpZl9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZmRpZl9jayA9IHsKKwkubmFtZQkJPSAiZmRpZl9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTRfY2ssCisJLmNsa3NlbAkJPSBmZGlmX2ZjbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fQ0FNX0ZESUZfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfRkNMS19NQVNLLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9DQU1fRkRJRl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiaXNzX2Nsa2RtIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHBlcl9zZ3hfZmNsa19kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTJ4Ml9jaywgLnJhdGVzID0gZGl2M18xdG80X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGVyX3NneF9mY2xrID0geworCS5uYW1lCQk9ICJwZXJfc2d4X2ZjbGsiLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCisJLmNsa3NlbAkJPSBwZXJfc2d4X2ZjbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fR0ZYX0dGWF9DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9QRVJfMTkyTV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzZ3hfY2xrX211eF9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX203X2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnBlcl9zZ3hfZmNsaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIE1lcmdlZCBzZ3hfY2xrX211eCBpbnRvIGdmeF9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NrID0geworCS5uYW1lCQk9ICJnZnhfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tN19jaywKKwkuY2xrc2VsCQk9IHNneF9jbGtfbXV4X3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fR0ZYX0dGWF9DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TR1hfRkNMS19NQVNLLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fR0ZYX0dGWF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDNfZ2Z4X2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2NrID0geworCS5uYW1lCQk9ICJncGlvMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9XS1VQX0dQSU8xX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF93a3VwX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF93a3VwX2Nsa19tdXhfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2NrID0geworCS5uYW1lCQk9ICJncGlvMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPMl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF9kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2NrID0geworCS5uYW1lCQk9ICJncGlvM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPM19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF9kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2NrID0geworCS5uYW1lCQk9ICJncGlvNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF9kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2NrID0geworCS5uYW1lCQk9ICJncGlvNV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF9kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2NrID0geworCS5uYW1lCQk9ICJncGlvNl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF9kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfY2sgPSB7CisJLm5hbWUJCT0gImdwbWNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNfMl9HUE1DX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsM18yX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsM19kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRtdDFfY2xrX211eF9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2Nsa2luX2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c18zMmtfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBNZXJnZWQgZG10MV9jbGtfbXV4IGludG8gZ3B0aW1lcjFfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxX2NrID0geworCS5uYW1lCQk9ICJncHRpbWVyMV9jayIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5jbGtzZWwJCT0gZG10MV9jbGtfbXV4X3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fV0tVUF9USU1FUjFfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfVElNRVIxX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF93a3VwX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCBjbTJfZG0xMF9tdXggaW50byBncHRpbWVyMTBfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxMF9jayA9IHsKKwkubmFtZQkJPSAiZ3B0aW1lcjEwX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCisJLmNsa3NlbAkJPSBkbXQxX2Nsa19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMTBfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCBjbTJfZG0xMV9tdXggaW50byBncHRpbWVyMTFfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxMV9jayA9IHsKKwkubmFtZQkJPSAiZ3B0aW1lcjExX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCisJLmNsa3NlbAkJPSBkbXQxX2Nsa19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMTFfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCBjbTJfZG0yX211eCBpbnRvIGdwdGltZXIyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHRpbWVyMl9jayA9IHsKKwkubmFtZQkJPSAiZ3B0aW1lcjJfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIyX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCBjbTJfZG0zX211eCBpbnRvIGdwdGltZXIzX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHRpbWVyM19jayA9IHsKKwkubmFtZQkJPSAiZ3B0aW1lcjNfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIzX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSM19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCBjbTJfZG00X211eCBpbnRvIGdwdGltZXI0X2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHRpbWVyNF9jayA9IHsKKwkubmFtZQkJPSAiZ3B0aW1lcjRfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVI0X0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSNF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHRpbWVyNV9zeW5jX211eF9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3ljX2Nsa19kaXZfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzXzMya19jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIE1lcmdlZCB0aW1lcjVfc3luY19tdXggaW50byBncHRpbWVyNV9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjVfY2sgPSB7CisJLm5hbWUJCT0gImdwdGltZXI1X2NrIiwKKwkucGFyZW50CQk9ICZzeWNfY2xrX2Rpdl9jaywKKwkuY2xrc2VsCQk9IHRpbWVyNV9zeW5jX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfVElNRVI1X0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSNV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCB0aW1lcjZfc3luY19tdXggaW50byBncHRpbWVyNl9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjZfY2sgPSB7CisJLm5hbWUJCT0gImdwdGltZXI2X2NrIiwKKwkucGFyZW50CQk9ICZzeWNfY2xrX2Rpdl9jaywKKwkuY2xrc2VsCQk9IHRpbWVyNV9zeW5jX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfVElNRVI2X0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSNl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCB0aW1lcjdfc3luY19tdXggaW50byBncHRpbWVyN19jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjdfY2sgPSB7CisJLm5hbWUJCT0gImdwdGltZXI3X2NrIiwKKwkucGFyZW50CQk9ICZzeWNfY2xrX2Rpdl9jaywKKwkuY2xrc2VsCQk9IHRpbWVyNV9zeW5jX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfVElNRVI3X0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSN19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCB0aW1lcjhfc3luY19tdXggaW50byBncHRpbWVyOF9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjhfY2sgPSB7CisJLm5hbWUJCT0gImdwdGltZXI4X2NrIiwKKwkucGFyZW50CQk9ICZzeWNfY2xrX2Rpdl9jaywKKwkuY2xrc2VsCQk9IHRpbWVyNV9zeW5jX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfVElNRVI4X0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSOF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKK307CisKKy8qIE1lcmdlZCBjbTJfZG05X211eCBpbnRvIGdwdGltZXI5X2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHRpbWVyOV9jayA9IHsKKwkubmFtZQkJPSAiZ3B0aW1lcjlfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVI5X0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSOV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcTF3X2NrID0geworCS5uYW1lCQk9ICJoZHExd19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9IRFExV19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBNZXJnZWQgaHNpX2ZjbGsgaW50byBoc2lfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzaV9jayA9IHsKKwkubmFtZQkJPSAiaHNpX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3Blcl9tMngyX2NrLAorCS5jbGtzZWwJCT0gcGVyX3NneF9mY2xrX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9IU0lfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfMjRfMjVfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX0hTSV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDNfaW5pdF9jbGtkbSIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2NrID0geworCS5uYW1lCQk9ICJpMmMxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzFfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fZmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9jayA9IHsKKwkubmFtZQkJPSAiaTJjMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9JMkMyX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfY2sgPSB7CisJLm5hbWUJCT0gImkyYzNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfSTJDM19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmM0X2NrID0geworCS5uYW1lCQk9ICJpMmM0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fZmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXNzX2NrID0geworCS5uYW1lCQk9ICJpc3NfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQ0FNX0lTU19DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiaXNzX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZkdWNhdGlfY2xrX211eF9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXZhaGRfY2sgPSB7CisJLm5hbWUJCT0gIml2YWhkX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0lWQUhEX0lWQUhEX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJpdmFoZF9jbGtkbSIsCisJLnBhcmVudAkJPSAmZHBsbF9pdmFfbTVfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGtleWJvYXJkX2NrID0geworCS5uYW1lCQk9ICJrZXlib2FyZF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9XS1VQX0tFWUJPQVJEX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF93a3VwX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZzeXNfMzJrX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsM19pbnN0cl9pbnRlcmNvbm5lY3RfY2sgPSB7CisJLm5hbWUJCT0gImwzX2luc3RyX2ludGVyY29ubmVjdF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOU1RSX0wzX0lOU1RSX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsM19pbnN0cl9jbGtkbSIsCisJLnBhcmVudAkJPSAmbDNfZGl2X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsM19pbnRlcmNvbm5lY3RfM19jayA9IHsKKwkubmFtZQkJPSAibDNfaW50ZXJjb25uZWN0XzNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTlNUUl9MM18zX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsM19pbnN0cl9jbGtkbSIsCisJLnBhcmVudAkJPSAmbDNfZGl2X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2FzcF9zeW5jX211eF9jayA9IHsKKwkubmFtZQkJPSAibWNhc3Bfc3luY19tdXhfY2siLAorCS5wYXJlbnQJCT0gJmFiZV8yNG1fZmNsaywKKwkuY2xrc2VsCQk9IGRtaWNfc3luY19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQVNQX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY19tY2FzcF9hYmVfZ2ZjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1jYXNwX3N5bmNfbXV4X2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnBhZF9jbGtzX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnNsaW1idXNfY2xrLCAucmF0ZXMgPSBkaXZfMV8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyogTWVyZ2VkIGZ1bmNfbWNhc3BfYWJlX2dmY2xrIGludG8gbWNhc3BfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYXNwX2NrID0geworCS5uYW1lCQk9ICJtY2FzcF9jayIsCisJLnBhcmVudAkJPSAmbWNhc3Bfc3luY19tdXhfY2ssCisJLmNsa3NlbAkJPSBmdW5jX21jYXNwX2FiZV9nZmNsa19zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfTUNBU1BfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQVNQX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX3N5bmNfbXV4X2NrID0geworCS5uYW1lCQk9ICJtY2JzcDFfc3luY19tdXhfY2siLAorCS5wYXJlbnQJCT0gJmFiZV8yNG1fZmNsaywKKwkuY2xrc2VsCQk9IGRtaWNfc3luY19tdXhfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQMV9DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfbWNic3AxX2dmY2xrX3NlbFtdID0geworCXsgLnBhcmVudCA9ICZtY2JzcDFfc3luY19tdXhfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmcGFkX2Nsa3NfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc2xpbWJ1c19jbGssIC5yYXRlcyA9IGRpdl8xXzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBNZXJnZWQgZnVuY19tY2JzcDFfZ2ZjbGsgaW50byBtY2JzcDFfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9jayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2NrIiwKKwkucGFyZW50CQk9ICZtY2JzcDFfc3luY19tdXhfY2ssCisJLmNsa3NlbAkJPSBmdW5jX21jYnNwMV9nZmNsa19zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AxX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfc3luY19tdXhfY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9zeW5jX211eF9jayIsCisJLnBhcmVudAkJPSAmYWJlXzI0bV9mY2xrLAorCS5jbGtzZWwJCT0gZG1pY19zeW5jX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AyX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY19tY2JzcDJfZ2ZjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1jYnNwMl9zeW5jX211eF9jaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZwYWRfY2xrc19jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzbGltYnVzX2NsaywgLnJhdGVzID0gZGl2XzFfMl9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIE1lcmdlZCBmdW5jX21jYnNwMl9nZmNsayBpbnRvIG1jYnNwMl9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2NrID0geworCS5uYW1lCQk9ICJtY2JzcDJfY2siLAorCS5wYXJlbnQJCT0gJm1jYnNwMl9zeW5jX211eF9jaywKKwkuY2xrc2VsCQk9IGZ1bmNfbWNic3AyX2dmY2xrX3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQMl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19zeW5jX211eF9jayA9IHsKKwkubmFtZQkJPSAibWNic3AzX3N5bmNfbXV4X2NrIiwKKwkucGFyZW50CQk9ICZhYmVfMjRtX2ZjbGssCisJLmNsa3NlbAkJPSBkbWljX3N5bmNfbXV4X3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfSU5URVJOQUxfU09VUkNFX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jX21jYnNwM19nZmNsa19zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbWNic3AzX3N5bmNfbXV4X2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnBhZF9jbGtzX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnNsaW1idXNfY2xrLCAucmF0ZXMgPSBkaXZfMV8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyogTWVyZ2VkIGZ1bmNfbWNic3AzX2dmY2xrIGludG8gbWNic3AzX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19jayIsCisJLnBhcmVudAkJPSAmbWNic3AzX3N5bmNfbXV4X2NrLAorCS5jbGtzZWwJCT0gZnVuY19tY2JzcDNfZ2ZjbGtfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQM19DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AzX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X3N5bmNfbXV4X2NrID0geworCS5uYW1lCQk9ICJtY2JzcDRfc3luY19tdXhfY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2ZjbGssCisJLmNsa3NlbAkJPSBtY2FzcDJfZmNsa19zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHBlcl9tY2JzcDRfZ2ZjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1jYnNwNF9zeW5jX211eF9jaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZwYWRfY2xrc19jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIE1lcmdlZCBwZXJfbWNic3A0X2dmY2xrIGludG8gbWNic3A0X2NrICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9jayIsCisJLnBhcmVudAkJPSAmbWNic3A0X3N5bmNfbXV4X2NrLAorCS5jbGtzZWwJCT0gcGVyX21jYnNwNF9nZmNsa19zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfMjRfMjRfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9jayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJMV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9NQ1NQSTJfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fZmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2NrID0geworCS5uYW1lCQk9ICJtY3NwaTNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkzX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9jayA9IHsKKwkubmFtZQkJPSAibWNzcGk0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJNF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBNZXJnZWQgaHNtbWMxX2ZjbGsgaW50byBtbWMxX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBtbWMxX2NrID0geworCS5uYW1lCQk9ICJtbWMxX2NrIiwKKwkucGFyZW50CQk9ICZmdW5jXzY0bV9mY2xrLAorCS5jbGtzZWwJCT0gaHNtbWM2X2ZjbGtfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfTU1DMV9DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX01NQzFfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorfTsKKworLyogTWVyZ2VkIGhzbW1jMl9mY2xrIGludG8gbW1jMl9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgbW1jMl9jayA9IHsKKwkubmFtZQkJPSAibW1jMl9jayIsCisJLnBhcmVudAkJPSAmZnVuY182NG1fZmNsaywKKwkuY2xrc2VsCQk9IGhzbW1jNl9mY2xrX3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX01NQzJfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9NTUMyX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsM19pbml0X2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzNfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0QzX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzRfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzRfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0Q0X0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzVfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzVfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0Q1X0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9jcF93cDFfY2sgPSB7CisJLm5hbWUJCT0gIm9jcF93cDFfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsM19pbnN0cl9jbGtkbSIsCisJLnBhcmVudAkJPSAmbDNfZGl2X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZG1fY2sgPSB7CisJLm5hbWUJCT0gInBkbV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1BETV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZwYWRfY2xrc19jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthZWlwMjlfY2sgPSB7CisJLm5hbWUJCT0gInBrYWVpcDI5X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX1BLQUVJUDI5X0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9zZWN1cmVfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmw0X2Rpdl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcm5nX2NrID0geworCS5uYW1lCQk9ICJybmdfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRTRUNfUk5HX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9zZWN1cmVfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmw0X2Rpdl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhMm1kNTFfY2sgPSB7CisJLm5hbWUJCT0gInNoYTJtZDUxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX1NIQTJNRDUxX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9zZWN1cmVfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmwzX2Rpdl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2wyX2NrID0geworCS5uYW1lCQk9ICJzbDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fSVZBSERfU0wyX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJpdmFoZF9jbGtkbSIsCisJLnBhcmVudAkJPSAmZHBsbF9pdmFfbTVfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNsaW1idXMxX2NrID0geworCS5uYW1lCQk9ICJzbGltYnVzMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCisJLnBhcmVudAkJPSAmb2NwX2FiZV9pY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzbGltYnVzMl9jayA9IHsKKwkubmFtZQkJPSAic2xpbWJ1czJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfU0xJTUJVUzJfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCisJLnBhcmVudAkJPSAmbDRfZGl2X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzcl9jb3JlX2NrID0geworCS5uYW1lCQk9ICJzcl9jb3JlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0FMV09OX1NSX0NPUkVfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X2FvX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsNF93a3VwX2Nsa19tdXhfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX2l2YV9jayA9IHsKKwkubmFtZQkJPSAic3JfaXZhX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0FMV09OX1NSX0lWQV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfYW9fY2xrZG0iLAorCS5wYXJlbnQJCT0gJmw0X3drdXBfY2xrX211eF9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3JfbXB1X2NrID0geworCS5uYW1lCQk9ICJzcl9tcHVfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQUxXT05fU1JfTVBVX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9hb19jbGtkbSIsCisJLnBhcmVudAkJPSAmbDRfd2t1cF9jbGtfbXV4X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZXNsYV9jayA9IHsKKwkubmFtZQkJPSAidGVzbGFfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fVEVTTEFfVEVTTEFfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAorCS5jbGtkbV9uYW1lCT0gInRlc2xhX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZkcGxsX2l2YV9tNF9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX1VBUlQxX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2NrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9VQVJUMl9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19jayA9IHsKKwkubmFtZQkJPSAidWFydDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDNfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fZmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDRfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQ0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX1VBUlQ0X0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVuaXBybzFfY2sgPSB7CisJLm5hbWUJCT0gInVuaXBybzFfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VOSVBSTzFfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2NrID0geworCS5uYW1lCQk9ICJ1c2JfaG9zdF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmluaXRfNjBtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2ZzX2NrID0geworCS5uYW1lCQk9ICJ1c2JfaG9zdF9mc19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfRlNfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtY19mY2xrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2Jfb3RnX2NrID0geworCS5uYW1lCQk9ICJ1c2Jfb3RnX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJsM19pbml0X2Nsa2RtIiwKKwkucGFyZW50CQk9ICZsM19kaXZfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl90bGxfY2sgPSB7CisJLm5hbWUJCT0gInVzYl90bGxfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmw0X2Rpdl9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNicGh5b2NwMnNjcF9jayA9IHsKKwkubmFtZQkJPSAidXNicGh5b2NwMnNjcF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCUEhZT0NQMlNDUF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDNfaW5pdF9jbGtkbSIsCisJLnBhcmVudAkJPSAmbDRfZGl2X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2ltX2NrID0geworCS5uYW1lCQk9ICJ1c2ltX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfVVNJTV9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCisJLmNsa2RtX25hbWUJPSAibDRfd2t1cF9jbGtkbSIsCisJLnBhcmVudAkJPSAmc3lzXzMya19jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0Ml9jayA9IHsKKwkubmFtZQkJPSAid2R0Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9XS1VQX1dEVDJfQ0xLQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAorCS5jbGtkbV9uYW1lCT0gImw0X3drdXBfY2xrZG0iLAorCS5wYXJlbnQJCT0gJnN5c18zMmtfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9XRFQzX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKKwkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLAorCS5wYXJlbnQJCT0gJnN5c18zMmtfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFJlbWFpbmluZyBvcHRpb25hbCBjbG9ja3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG90Z182MG1fZ2ZjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnV0bWlfcGh5X2Nsa291dF9jaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ4Y2xrNjBtb3RnX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb3RnXzYwbV9nZmNsa19jayA9IHsKKwkubmFtZQkJPSAib3RnXzYwbV9nZmNsa19jayIsCisJLnBhcmVudAkJPSAmdXRtaV9waHlfY2xrb3V0X2NrLAorCS5jbGtzZWwJCT0gb3RnXzYwbV9nZmNsa19zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzYwTV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3RtX2Nsa19kaXZfZGl2W10gPSB7CisJeyAucGFyZW50ID0gJnBtZF9zdG1fY2xvY2tfbXV4X2NrLCAucmF0ZXMgPSBkaXYzXzF0bzRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzdG1fY2xrX2Rpdl9jayA9IHsKKwkubmFtZQkJPSAic3RtX2Nsa19kaXZfY2siLAorCS5wYXJlbnQJCT0gJnBtZF9zdG1fY2xvY2tfbXV4X2NrLAorCS5jbGtzZWwJCT0gc3RtX2Nsa19kaXZfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfUE1EX1NUTV9DTEtfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdHJhY2VfY2xrX2Rpdl9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmcG1kX3RyYWNlX2Nsa19tdXhfY2ssIC5yYXRlcyA9IGRpdjNfMXRvNF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlX2Nsa19kaXZfY2sgPSB7CisJLm5hbWUJCT0gInRyYWNlX2Nsa19kaXZfY2siLAorCS5wYXJlbnQJCT0gJnBtZF90cmFjZV9jbGtfbXV4X2NrLAorCS5jbGtzZWwJCT0gdHJhY2VfY2xrX2Rpdl9kaXYsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9FTVVfREVCVUdTU19DTEtDVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9QTURfVFJBQ0VfQ0xLX01BU0ssCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2Ml8xNHRvMThfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxNCwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDE4LCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9mY2xrX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX3Blcl9tNF9jaywgLnJhdGVzID0gZGl2Ml8xNHRvMThfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2ltX2ZjbGsgPSB7CisJLm5hbWUJCT0gInVzaW1fZmNsayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTRfY2ssCisJLmNsa3NlbAkJPSB1c2ltX2ZjbGtfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fV0tVUF9VU0lNX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1dG1pX3AxX2dmY2xrX3NlbFtdID0geworCXsgLnBhcmVudCA9ICZpbml0XzYwbV9mY2xrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnhjbGs2MG1oc3AxX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXRtaV9wMV9nZmNsa19jayA9IHsKKwkubmFtZQkJPSAidXRtaV9wMV9nZmNsa19jayIsCisJLnBhcmVudAkJPSAmaW5pdF82MG1fZmNsaywKKwkuY2xrc2VsCQk9IHV0bWlfcDFfZ2ZjbGtfc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfVVRNSV9QMV9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXRtaV9wMl9nZmNsa19zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmaW5pdF82MG1fZmNsaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ4Y2xrNjBtaHNwMl9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHV0bWlfcDJfZ2ZjbGtfY2sgPSB7CisJLm5hbWUJCT0gInV0bWlfcDJfZ2ZjbGtfY2siLAorCS5wYXJlbnQJCT0gJmluaXRfNjBtX2ZjbGssCisJLmNsa3NlbAkJPSB1dG1pX3AyX2dmY2xrX3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDJfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKK307CisKKy8qCisgKiBjbGtkZXYKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXA0NHh4X2Nsa3NbXSA9IHsKKwlDTEsoTlVMTCwJImV4dGFsdF9jbGtpbl9jayIsCQkmZXh0YWx0X2Nsa2luX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInBhZF9jbGtzX2NrIiwJCQkmcGFkX2Nsa3NfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGFkX3NsaW1idXNfY29yZV9jbGtzX2NrIiwJJnBhZF9zbGltYnVzX2NvcmVfY2xrc19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2Nsa19zcmNfY2siLAkmc2VjdXJlXzMya19jbGtfc3JjX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNsaW1idXNfY2xrIiwJCQkmc2xpbWJ1c19jbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic3lzXzMya19jayIsCQkJJnN5c18zMmtfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidmlydF8xMjAwMDAwMF9jayIsCQkmdmlydF8xMjAwMDAwMF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEzMDAwMDAwX2NrIiwJCSZ2aXJ0XzEzMDAwMDAwX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMTY4MDAwMDBfY2siLAkJJnZpcnRfMTY4MDAwMDBfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidmlydF8xOTIwMDAwMF9jayIsCQkmdmlydF8xOTIwMDAwMF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzI2MDAwMDAwX2NrIiwJCSZ2aXJ0XzI2MDAwMDAwX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInZpcnRfMjcwMDAwMDBfY2siLAkJJnZpcnRfMjcwMDAwMDBfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidmlydF8zODQwMDAwMF9jayIsCQkmdmlydF8zODQwMDAwMF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xraW5fY2siLAkJCSZzeXNfY2xraW5fY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidXRtaV9waHlfY2xrb3V0X2NrIiwJCSZ1dG1pX3BoeV9jbGtvdXRfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkieGNsazYwbWhzcDFfY2siLAkJJnhjbGs2MG1oc3AxX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInhjbGs2MG1oc3AyX2NrIiwJCSZ4Y2xrNjBtaHNwMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ4Y2xrNjBtb3RnX2NrIiwJCSZ4Y2xrNjBtb3RnX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfc3lzX3JlZl9jbGsiLAkJJmRwbGxfc3lzX3JlZl9jbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYWJlX2RwbGxfcmVmY2xrX211eF9jayIsCSZhYmVfZHBsbF9yZWZjbGtfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfYWJlX2NrIiwJCQkmZHBsbF9hYmVfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9hYmVfbTJ4Ml9jayIsCQkmZHBsbF9hYmVfbTJ4Ml9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhYmVfMjRtX2ZjbGsiLAkJCSZhYmVfMjRtX2ZjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYWJlX2NsayIsCQkJJmFiZV9jbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYWVzc19mY2xrIiwJCQkmYWVzc19mY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfYWJlX20zX2NrIiwJCSZkcGxsX2FiZV9tM19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJjb3JlX2hzZF9ieXBfY2xrX211eF9jayIsCSZjb3JlX2hzZF9ieXBfY2xrX211eF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2NvcmVfY2siLAkJCSZkcGxsX2NvcmVfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9jb3JlX202X2NrIiwJCSZkcGxsX2NvcmVfbTZfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZGJnY2xrX211eF9jayIsCQkmZGJnY2xrX211eF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2NvcmVfbTJfY2siLAkJJmRwbGxfY29yZV9tMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkZHJwaHlfY2siLAkJCSZkZHJwaHlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9jb3JlX201X2NrIiwJCSZkcGxsX2NvcmVfbTVfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZGl2X2NvcmVfY2siLAkJCSZkaXZfY29yZV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkaXZfaXZhX2hzX2NsayIsCQkmZGl2X2l2YV9oc19jbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZGl2X21wdV9oc19jbGsiLAkJJmRpdl9tcHVfaHNfY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfY29yZV9tNF9jayIsCQkmZHBsbF9jb3JlX200X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRsbF9jbGtfZGl2X2NrIiwJCSZkbGxfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2FiZV9tMl9jayIsCQkmZHBsbF9hYmVfbTJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9jb3JlX20zX2NrIiwJCSZkcGxsX2NvcmVfbTNfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9jb3JlX203X2NrIiwJCSZkcGxsX2NvcmVfbTdfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiaXZhX2hzZF9ieXBfY2xrX211eF9jayIsCSZpdmFfaHNkX2J5cF9jbGtfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfaXZhX2NrIiwJCQkmZHBsbF9pdmFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9pdmFfbTRfY2siLAkJJmRwbGxfaXZhX200X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfaXZhX201X2NrIiwJCSZkcGxsX2l2YV9tNV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX21wdV9jayIsCQkJJmRwbGxfbXB1X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfbXB1X20yX2NrIiwJCSZkcGxsX21wdV9tMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJwZXJfaHNfY2xrX2Rpdl9jayIsCQkmcGVyX2hzX2Nsa19kaXZfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGVyX2hzZF9ieXBfY2xrX211eF9jayIsCSZwZXJfaHNkX2J5cF9jbGtfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfcGVyX2NrIiwJCQkmZHBsbF9wZXJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9wZXJfbTJfY2siLAkJJmRwbGxfcGVyX20yX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfcGVyX20yeDJfY2siLAkJJmRwbGxfcGVyX20yeDJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9wZXJfbTNfY2siLAkJJmRwbGxfcGVyX20zX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfcGVyX200X2NrIiwJCSZkcGxsX3Blcl9tNF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX3Blcl9tNV9jayIsCQkmZHBsbF9wZXJfbTVfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9wZXJfbTZfY2siLAkJJmRwbGxfcGVyX202X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfcGVyX203X2NrIiwJCSZkcGxsX3Blcl9tN19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX3VuaXByb19jayIsCQkmZHBsbF91bmlwcm9fY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF91bmlwcm9fbTJ4Ml9jayIsCQkmZHBsbF91bmlwcm9fbTJ4Ml9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfaHNfY2xrX2Rpdl9jayIsCQkmdXNiX2hzX2Nsa19kaXZfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF91c2JfY2siLAkJCSZkcGxsX3VzYl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX3VzYl9jbGtkY29sZG9fY2siLAkmZHBsbF91c2JfY2xrZGNvbGRvX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfdXNiX20yX2NrIiwJCSZkcGxsX3VzYl9tMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkdWNhdGlfY2xrX211eF9jayIsCQkmZHVjYXRpX2Nsa19tdXhfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZnVuY18xMm1fZmNsayIsCQkmZnVuY18xMm1fZmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJmdW5jXzI0bV9jbGsiLAkJCSZmdW5jXzI0bV9jbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZnVuY18yNG1jX2ZjbGsiLAkJJmZ1bmNfMjRtY19mY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfNDhtX2ZjbGsiLAkJJmZ1bmNfNDhtX2ZjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZnVuY180OG1jX2ZjbGsiLAkJJmZ1bmNfNDhtY19mY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfNjRtX2ZjbGsiLAkJJmZ1bmNfNjRtX2ZjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZnVuY185Nm1fZmNsayIsCQkmZnVuY185Nm1fZmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJoc21tYzZfZmNsayIsCQkJJmhzbW1jNl9mY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImluaXRfNjBtX2ZjbGsiLAkJJmluaXRfNjBtX2ZjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibDNfZGl2X2NrIiwJCQkmbDNfZGl2X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImw0X2Rpdl9jayIsCQkJJmw0X2Rpdl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJscF9jbGtfZGl2X2NrIiwJCSZscF9jbGtfZGl2X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImw0X3drdXBfY2xrX211eF9jayIsCQkmbDRfd2t1cF9jbGtfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInBlcl9hYmVfbmNfZmNsayIsCQkmcGVyX2FiZV9uY19mY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1jYXNwMl9mY2xrIiwJCQkmbWNhc3AyX2ZjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibWNhc3AzX2ZjbGsiLAkJCSZtY2FzcDNfZmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJvY3BfYWJlX2ljbGsiLAkJCSZvY3BfYWJlX2ljbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGVyX2FiZV8yNG1fZmNsayIsCQkmcGVyX2FiZV8yNG1fZmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJwbWRfc3RtX2Nsb2NrX211eF9jayIsCQkmcG1kX3N0bV9jbG9ja19tdXhfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicG1kX3RyYWNlX2Nsa19tdXhfY2siLAkJJnBtZF90cmFjZV9jbGtfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInN5Y19jbGtfZGl2X2NrIiwJCSZzeWNfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhZXMxX2NrIiwJCQkmYWVzMV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhZXMyX2NrIiwJCQkmYWVzMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhZXNzX2NrIiwJCQkmYWVzc19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJjdXN0X2VmdXNlX2NrIiwJCSZjdXN0X2VmdXNlX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRlczNkZXNfY2siLAkJCSZkZXMzZGVzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRtaWNfc3luY19tdXhfY2siLAkJJmRtaWNfc3luY19tdXhfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZG1pY19jayIsCQkJJmRtaWNfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHNzX2NrIiwJCQkmZHNzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImR1Y2F0aV9jayIsCQkJJmR1Y2F0aV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJlbWlmMV9jayIsCQkJJmVtaWYxX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImVtaWYyX2NrIiwJCQkmZW1pZjJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZmRpZl9jayIsCQkJJmZkaWZfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGVyX3NneF9mY2xrIiwJCQkmcGVyX3NneF9mY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdmeF9jayIsCQkJJmdmeF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvMV9jayIsCQkJJmdwaW8xX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW8yX2NrIiwJCQkmZ3BpbzJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzNfY2siLAkJCSZncGlvM19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvNF9jayIsCQkJJmdwaW80X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW81X2NrIiwJCQkmZ3BpbzVfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzZfY2siLAkJCSZncGlvNl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncG1jX2NrIiwJCQkmZ3BtY19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHRpbWVyMV9jayIsCQkJJmdwdGltZXIxX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdGltZXIxMF9jayIsCQkJJmdwdGltZXIxMF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHRpbWVyMTFfY2siLAkJCSZncHRpbWVyMTFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0aW1lcjJfY2siLAkJCSZncHRpbWVyMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHRpbWVyM19jayIsCQkJJmdwdGltZXIzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdGltZXI0X2NrIiwJCQkmZ3B0aW1lcjRfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0aW1lcjVfY2siLAkJCSZncHRpbWVyNV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHRpbWVyNl9jayIsCQkJJmdwdGltZXI2X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdGltZXI3X2NrIiwJCQkmZ3B0aW1lcjdfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0aW1lcjhfY2siLAkJCSZncHRpbWVyOF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHRpbWVyOV9jayIsCQkJJmdwdGltZXI5X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAyX2hkcS4wIiwJImljayIsCQkJCSZoZHExd19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJoc2lfY2siLAkJCSZoc2lfY2ssCUNLXzQ0M1gpLAorCUNMSygiaTJjX29tYXAuMSIsCSJpY2siLAkJCQkmaTJjMV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4yIiwJImljayIsCQkJCSZpMmMyX2NrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjMiLAkiaWNrIiwJCQkJJmkyYzNfY2ssCUNLXzQ0M1gpLAorCUNMSygiaTJjX29tYXAuNCIsCSJpY2siLAkJCQkmaTJjNF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJpc3NfY2siLAkJCSZpc3NfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiaXZhaGRfY2siLAkJCSZpdmFoZF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJrZXlib2FyZF9jayIsCQkJJmtleWJvYXJkX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImwzX2luc3RyX2ludGVyY29ubmVjdF9jayIsCSZsM19pbnN0cl9pbnRlcmNvbm5lY3RfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibDNfaW50ZXJjb25uZWN0XzNfY2siLAkJJmwzX2ludGVyY29ubmVjdF8zX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1jYXNwX3N5bmNfbXV4X2NrIiwJCSZtY2FzcF9zeW5jX211eF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJtY2FzcF9jayIsCQkJJm1jYXNwX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1jYnNwMV9zeW5jX211eF9jayIsCQkmbWNic3AxX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsCSJmY2siLAkJCQkmbWNic3AxX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1jYnNwMl9zeW5jX211eF9jayIsCQkmbWNic3AyX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsCSJmY2siLAkJCQkmbWNic3AyX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1jYnNwM19zeW5jX211eF9jayIsCQkmbWNic3AzX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsCSJmY2siLAkJCQkmbWNic3AzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1jYnNwNF9zeW5jX211eF9jayIsCQkmbWNic3A0X3N5bmNfbXV4X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsCSJmY2siLAkJCQkmbWNic3A0X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLAkiZmNrIiwJCQkJJm1jc3BpMV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwJImZjayIsCQkJCSZtY3NwaTJfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsCSJmY2siLAkJCQkmbWNzcGkzX2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLAkiZmNrIiwJCQkJJm1jc3BpNF9jaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkJCQkmbW1jMV9jaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMSIsCSJmY2siLAkJCQkmbW1jMl9jaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkJCQkmbW1jM19jaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMyIsCSJmY2siLAkJCQkmbW1jNF9jaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuNCIsCSJmY2siLAkJCQkmbW1jNV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJvY3Bfd3AxX2NrIiwJCQkmb2NwX3dwMV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJwZG1fY2siLAkJCSZwZG1fY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGthZWlwMjlfY2siLAkJCSZwa2FlaXAyOV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJCQkmcm5nX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNoYTJtZDUxX2NrIiwJCQkmc2hhMm1kNTFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic2wyX2NrIiwJCQkmc2wyX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNsaW1idXMxX2NrIiwJCQkmc2xpbWJ1czFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic2xpbWJ1czJfY2siLAkJCSZzbGltYnVzMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzcl9jb3JlX2NrIiwJCQkmc3JfY29yZV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzcl9pdmFfY2siLAkJCSZzcl9pdmFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic3JfbXB1X2NrIiwJCQkmc3JfbXB1X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInRlc2xhX2NrIiwJCQkmdGVzbGFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDFfY2siLAkJCSZ1YXJ0MV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9jayIsCQkJJnVhcnQyX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2NrIiwJCQkmdWFydDNfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDRfY2siLAkJCSZ1YXJ0NF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1bmlwcm8xX2NrIiwJCQkmdW5pcHJvMV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9jayIsCQkJJnVzYl9ob3N0X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzYl9ob3N0X2ZzX2NrIiwJCSZ1c2JfaG9zdF9mc19jaywJQ0tfNDQzWCksCisJQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJCQkJJnVzYl9vdGdfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidXNiX3RsbF9jayIsCQkJJnVzYl90bGxfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidXNicGh5b2NwMnNjcF9jayIsCQkmdXNicGh5b2NwMnNjcF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2ltX2NrIiwJCQkmdXNpbV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJCQkmd2R0Ml9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2NrIiwJCQkmd2R0M19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJvdGdfNjBtX2dmY2xrX2NrIiwJCSZvdGdfNjBtX2dmY2xrX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInN0bV9jbGtfZGl2X2NrIiwJCSZzdG1fY2xrX2Rpdl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ0cmFjZV9jbGtfZGl2X2NrIiwJCSZ0cmFjZV9jbGtfZGl2X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzaW1fZmNsayIsCQkJJnVzaW1fZmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1dG1pX3AxX2dmY2xrX2NrIiwJCSZ1dG1pX3AxX2dmY2xrX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInV0bWlfcDJfZ2ZjbGtfY2siLAkJJnV0bWlfcDJfZ2ZjbGtfY2ssCUNLXzQ0M1gpLAorfTsKKworaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQoreworCS8qIHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsgKi8KKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CisJLyogdTMyIGNsa3JhdGU7ICovCisJdTMyIGNwdV9jbGtmbGc7CisKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzQ0MzA7CisJCWNwdV9jbGtmbGcgPSBDS180NDNYOworCX0KKworCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKKworCWZvciAoYyA9IG9tYXA0NHh4X2Nsa3M7IGMgPCBvbWFwNDR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwNDR4eF9jbGtzKTsKKwkJCQkJCQkJCSAgYysrKQorCQljbGtfcHJlaW5pdChjLT5say5jbGspOworCisJZm9yIChjID0gb21hcDQ0eHhfY2xrczsgYyA8IG9tYXA0NHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXA0NHh4X2Nsa3MpOworCQkJCQkJCQkJICBjKyspCisJCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7CisJCQljbGtkZXZfYWRkKCZjLT5sayk7CisJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCS8qIFRPRE8KKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CisJCQkqLworCQl9CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa19lbmFibGVfaW5pdF9jbG9ja3MoKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja19jb21tb25fZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja19jb21tb25fZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTA5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrX2NvbW1vbl9kYXRhLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrX2NvbW1vbl9kYXRhLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqICBDb250YWN0czoKKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGNsb2NrIGRhdGEgdGhhdCBpcyBjb21tb24gdG8gYm90aCB0aGUgT01BUDJ4eHggYW5kCisgKiBPTUFQM3h4eCBjbG9jayBkZWZpbml0aW9uIGZpbGVzLgorICovCisKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiBjbGtzZWxfcmF0ZSBkYXRhIGNvbW1vbiB0byAyNHh4LzM0M3ggKi8KK2NvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfMzJrX3JhdGVzW10gPSB7CisJIHsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwkgeyAuZGl2ID0gMCB9Cit9OworCitjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ3B0X3N5c19yYXRlc1tdID0geworCSB7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJIHsgLmRpdiA9IDAgfQorfTsKKworY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdmeF9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCBmY2Q4MjMyLi4xYTQ1ZWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0yLDcgKzIsNyBAQAogICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5IGFuZCBKb3VuaSBIw7ZnYW5kZXIKICAqCkBAIC0xMCw5ICsxMCw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpZmRlZiBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTgotIyAgZGVmaW5lIERFQlVHCi0jZW5kaWYKKyN1bmRlZiBERUJVRwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY3Zjc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaApAQCAtMCwwICsxLDE0NzQgQEAKKy8qCisgKiBPTUFQNDR4eCBDbG9jayBNYW5hZ2VtZW50IHJlZ2lzdGVyIGJpdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQorICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNX1JFR0JJVFNfNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV9SRUdCSVRTXzQ0WFhfSAorCisjaW5jbHVkZSAiY20uaCIKKworCisvKiBVc2VkIGJ5IENNX0wzXzFfRFlOQU1JQ0RFUCwgQ01fTVBVX0RZTkFNSUNERVAsIENNX1RFU0xBX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUJFX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9BQkVfRFlOREVQX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyoKKyAqIFVzZWQgYnkgQ01fRDJEX1NUQVRJQ0RFUCwgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsCisgKiBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQLAorICogQ01fVEVTTEFfU1RBVElDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUJFX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfQUJFX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNikKKworLyogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX1NUQVRERVBfU0hJRlQJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNiwgMTYpCisKKy8qCisgKiBVc2VkIGJ5IENNX0FVVE9JRExFX0RQTExfUEVSLCBDTV9BVVRPSURMRV9EUExMX1VOSVBSTywgQ01fQVVUT0lETEVfRFBMTF9VU0IsCisgKiBDTV9BVVRPSURMRV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQVVUT0lETEVfRFBMTF9BQkUsIENNX0FVVE9JRExFX0RQTExfQ09SRSwKKyAqIENNX0FVVE9JRExFX0RQTExfRERSUEhZLCBDTV9BVVRPSURMRV9EUExMX0lWQSwgQ01fQVVUT0lETEVfRFBMTF9NUFUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9NQVNLCQkJCUJJVEZJRUxEKDAsIDIpCisKKy8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTcsIDE3KQorCisvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDQ0MzBfQ0VGVVNFX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNywgMTcpCisKKy8qIFVzZWQgYnkgQ00xX0FCRV9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFXzI0TV9HRkNMS19TSElGVAkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV8yNE1fR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEzLCAxMykKKworLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfQUxXT05fMzJLX0NMS19TSElGVAkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9BTFdPTl8zMktfQ0xLX01BU0sJCUJJVEZJRUxEKDEyLCAxMikKKworLyogVXNlZCBieSBDTV9XS1VQX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfTFBfQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX0xQX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfU1lTQ0xLX1NISUZUCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9TWVNDTEtfTUFTSwkJCUJJVEZJRUxEKDExLCAxMSkKKworLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfWDJfQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX1gyX0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX0RMTF9DTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BU1lOQ19ETExfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fTUVNSUZfQ0xLU1RDVFJMLCBDTV9NRU1JRl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BU1lOQ19QSFkxX0NMS19TSElGVAkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX1BIWTFfQ0xLX01BU0sJCUJJVEZJRUxEKDEyLCAxMikKKworLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FTWU5DX1BIWTJfQ0xLX1NISUZUCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMl9DTEtfTUFTSwkJQklURklFTEQoMTMsIDEzKQorCisvKiBVc2VkIGJ5IENNX0NBTV9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ0FNX1BIWV9DVFJMX0dDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NBTV9QSFlfQ1RSTF9HQ0xLX01BU0sJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fRU1VX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9DT1JFX0RQTExfRU1VX0NMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ09SRV9EUExMX0VNVV9DTEtfTUFTSwkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTV9DRUZVU0VfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NVU1RfRUZVU0VfU1lTX0NMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ1VTVF9FRlVTRV9TWVNfQ0xLX01BU0sJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTUVNSUZfQ0xLU1RDVFJMLCBDTV9NRU1JRl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETExfQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRExMX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDEwX0dGQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UMTBfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMV9HRkNMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMV9HRkNMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UMl9HRkNMS19TSElGVAkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQyX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQzX0dGQ0xLX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDNfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKKworLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDRfR0ZDTEtfU0hJRlQJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UNF9HRkNMS19NQVNLCQkJQklURklFTEQoMTMsIDEzKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UOV9HRkNMS19TSElGVAkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQ5X0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qIFVzZWQgYnkgQ01fRFNTX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EU1NfQUxXT05fU1lTX0NMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19BTFdPTl9TWVNfQ0xLX01BU0sJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9EU1NfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19GQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRFNTX0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fRFVDQVRJX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EVUNBVElfR0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RVQ0FUSV9HQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9FTUFDXzUwTUhaX0NMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNQUNfNTBNSFpfQ0xLX01BU0sJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9FTVVfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNVV9TWVNfQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRU1VX1NZU19DTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fQ0FNX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9GRElGX0dGQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZESUZfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMTJNX0dGQ0xLX1NISUZUCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRlVOQ18xMk1fR0ZDTEtfTUFTSwkJQklURklFTEQoMTUsIDE1KQorCisvKiBVc2VkIGJ5IENNMV9BQkVfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMjRNX0dGQ0xLX1NISUZUCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRlVOQ18yNE1fR0ZDTEtfTUFTSwkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0RTU19DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSERNSV9QSFlfNDhNSFpfR0ZDTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IRE1JX1BIWV80OE1IWl9HRkNMS19NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfNDgwTV9HRkNMS19TSElGVAkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfNDgwTV9HRkNMS19NQVNLCQlCSVRGSUVMRCgyMCwgMjApCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDFfR0ZDTEtfU0hJRlQJCSgxIDw8IDI2KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AxX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyNiwgMjYpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDJfNDgwTV9HRkNMS19TSElGVAkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDJfNDgwTV9HRkNMS19NQVNLCQlCSVRGSUVMRCgyMSwgMjEpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDJfR0ZDTEtfU0hJRlQJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyNywgMjcpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzMyS19HRkNMS19TSElGVAkJKDEgPDwgMzEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfMzJLX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDMxLCAzMSkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1DX0dGQ0xLX1NISUZUCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1DX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDEzLCAxMykKKworLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1fR0ZDTEtfU0hJRlQJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzQ4TV9HRkNMS19NQVNLCQlCSVRGSUVMRCgxMiwgMTIpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNjBNX1AxX0dGQ0xLX1NISUZUCQkoMSA8PCAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF82ME1fUDFfR0ZDTEtfTUFTSwkJQklURklFTEQoMjgsIDI4KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzYwTV9QMl9HRkNMS19TSElGVAkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNjBNX1AyX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDI5LCAyOSkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF85Nk1fR0ZDTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzk2TV9HRkNMS19NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNJX0dGQ0xLX1NISUZUCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU0lfR0ZDTEtfTUFTSwkJQklURklFTEQoMTYsIDE2KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DMV9HRkNMS19TSElGVAkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUMxX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDE3LCAxNykKKworLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzJfR0ZDTEtfU0hJRlQJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DMl9HRkNMS19NQVNLCQlCSVRGSUVMRCgxOCwgMTgpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUM2X0dGQ0xLX1NISUZUCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzZfR0ZDTEtfTUFTSwkJQklURklFTEQoMTksIDE5KQorCisvKiBVc2VkIGJ5IENNX0NBTV9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSVNTX0dDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JU1NfR0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9JVkFIRF9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSVZBSERfUk9PVF9DTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lWQUhEX1JPT1RfQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzSU5JVF9EUExMX0FMV09OX0NMS19TSElGVAkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNJTklUX0RQTExfQUxXT05fQ0xLX01BU0sJCUJJVEZJRUxEKDE0LCAxNCkKKworLyogVXNlZCBieSBDTV9MM18xX0NMS1NUQ1RSTCwgQ01fTDNfMV9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM18xX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfMV9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9MM18yX0NMS1NUQ1RSTCwgQ01fTDNfMl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM18yX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfMl9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9EMkRfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0QyRF9HSUNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0QyRF9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9TRE1BX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19ETUFfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19ETUFfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fRFNTX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EU1NfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EU1NfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fTUVNSUZfQ0xLU1RDVFJMLCBDTV9NRU1JRl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19FTUlGX0dJQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19FTUlGX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0dGWF9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfR0ZYX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfR0ZYX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19JTklUX0dJQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19JTklUX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0wzSU5TVFJfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0lOU1RSX0dJQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19JTlNUUl9HSUNMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0w0U0VDX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19TRUNVUkVfR0lDTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX1NFQ1VSRV9HSUNMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0FMV09OX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9BT19JQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQU9fSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9DRUZVU0VfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0NFRlVTRV9HSUNMS19TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQ0VGVVNFX0dJQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fTDRDRkdfQ0xLU1RDVFJMLCBDTV9MNENGR19DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9DRkdfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9DRkdfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fRDJEX0NMS1NUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9EMkRfR0lDTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9EMkRfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0lOSVRfR0lDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0lOSVRfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9QRVJfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9QRVJfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fTDRTRUNfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1NFQ1VSRV9HSUNMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfU0VDVVJFX0dJQ0xLX01BU0sJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfV0tVUF9HSUNMS19TSElGVAkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1dLVVBfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKKworLyogVXNlZCBieSBDTV9NUFVfQ0xLU1RDVFJMLCBDTV9NUFVfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTVBVX0RQTExfQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTVBVX0RQTExfQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNMV9BQkVfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX09DUF9BQkVfR0lDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX09DUF9BQkVfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfMjRNQ19HRkNMS19TSElGVAkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8yNE1DX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDE2LCAxNikKKworLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8zMktfR0ZDTEtfU0hJRlQJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfMzJLX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxNywgMTcpCisKKy8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfNDhNX0dGQ0xLX1NISUZUCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzQ4TV9HRkNMS19NQVNLCQkJQklURklFTEQoMTgsIDE4KQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzk2TV9HRkNMS19TSElGVAkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl85Nk1fR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDE5LCAxOSkKKworLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9BQkVfMjRNX0dGQ0xLX1NISUZUCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX0FCRV8yNE1fR0ZDTEtfTUFTSwkJQklURklFTEQoMjUsIDI1KQorCisvKiBVc2VkIGJ5IENNX0VNVV9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX0RQTExfRU1VX0NMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9EUExMX0VNVV9DTEtfTUFTSwkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX01DQVNQMl9HRkNMS19TSElGVAkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDJfR0ZDTEtfTUFTSwkJQklURklFTEQoMjAsIDIwKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX01DQVNQM19HRkNMS19TSElGVAkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDNfR0ZDTEtfTUFTSwkJQklURklFTEQoMjEsIDIxKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX01DQlNQNF9HRkNMS19TSElGVAkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0JTUDRfR0ZDTEtfTUFTSwkJQklURklFTEQoMjIsIDIyKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX1NZU19HRkNMS19TSElGVAkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9TWVNfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDI0LCAyNCkKKworLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BIWV9ST09UX0NMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QSFlfUk9PVF9DTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9HRlhfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NHWF9HRkNMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NHWF9HRkNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTV9BTFdPTl9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1JfQ09SRV9TWVNDTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9DT1JFX1NZU0NMS19NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fQUxXT05fQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX0lWQV9TWVNDTEtfU0hJRlQJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9JVkFfU1lTQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qIFVzZWQgYnkgQ01fQUxXT05fQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX01QVV9TWVNDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX01QVV9TWVNDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1lTX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NZU19DTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fVEVTTEFfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RFU0xBX1JPT1RfQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9URVNMQV9ST09UX0NMS19NQVNLCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gwX0dGQ0xLX1NISUZUCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMF9HRkNMS19NQVNLCQkJQklURklFTEQoMjIsIDIyKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gxX0dGQ0xLX1NISUZUCQkoMSA8PCAyMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMV9HRkNMS19NQVNLCQkJQklURklFTEQoMjMsIDIzKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gyX0dGQ0xLX1NISUZUCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVExMX0NIMl9HRkNMS19NQVNLCQkJQklURklFTEQoMjQsIDI0KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0JfRFBMTF9IU19DTEtfU0hJRlQJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0JfRFBMTF9IU19DTEtfTUFTSwkJQklURklFTEQoMTUsIDE1KQorCisvKiBVc2VkIGJ5IENNX1dLVVBfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VTSU1fR0ZDTEtfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVNJTV9HRkNMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1AzX0dGQ0xLX1NISUZUCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVRNSV9QM19HRkNMS19NQVNLCQkJQklURklFTEQoMzAsIDMwKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1JPT1RfR0ZDTEtfU0hJRlQJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1JPT1RfR0ZDTEtfTUFTSwkJQklURklFTEQoMjUsIDI1KQorCisvKiBVc2VkIGJ5IENNX1dLVVBfQ0xLU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1dLVVBfMzJLX0dGQ0xLX1NISUZUCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfV0tVUF8zMktfR0ZDTEtfTUFTSwkJQklURklFTEQoMTEsIDExKQorCisvKgorICogVXNlZCBieSBDTV9XS1VQX1RJTUVSMV9DTEtDVFJMLCBDTV9MNFBFUl9ETVRJTUVSMTBfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0RNVElNRVIxMV9DTEtDVFJMLCBDTV9MNFBFUl9ETVRJTUVSMl9DTEtDVFJMLAorICogQ01fTDRQRVJfRE1USU1FUjNfQ0xLQ1RSTCwgQ01fTDRQRVJfRE1USU1FUjRfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0RNVElNRVI5X0NMS0NUUkwsIENNX0w0UEVSX01DQVNQMl9DTEtDVFJMLCBDTV9MNFBFUl9NQ0FTUDNfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9NTUMxX0NMS0NUUkwsIENNX0wzSU5JVF9NTUMyX0NMS0NUUkwsIENNX0wzSU5JVF9NTUM2X0NMS0NUUkwsCisgKiBDTTFfQUJFX1RJTUVSNV9DTEtDVFJMLCBDTTFfQUJFX1RJTUVSNl9DTEtDVFJMLCBDTTFfQUJFX1RJTUVSN19DTEtDVFJMLAorICogQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTAorICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TSElGVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9NQVNLCQkJCQlCSVRGSUVMRCgyNCwgMjQpCisKKy8qCisgKiBSZW5hbWVkIGZyb20gQ0xLU0VMIFVzZWQgYnkgQ01fQUJFX0RTU19TWVNfQ0xLU0VMLCBDTV9BQkVfUExMX1JFRl9DTEtTRUwsCisgKiBDTV9EUExMX1NZU19SRUZfQ0xLU0VMLCBDTV9MNF9XS1VQX0NMS1NFTCwgQ01fQ0xLU0VMX0RVQ0FUSV9JU1NfUk9PVCwKKyAqIENNX0NMS1NFTF9VU0JfNjBNSFoKKyAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMF8wX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBSZW5hbWVkIGZyb20gQ0xLU0VMIFVzZWQgYnkgQ01fQllQQ0xLX0RQTExfSVZBLCBDTV9CWVBDTEtfRFBMTF9NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzBfMV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMF8xX01BU0sJCQkJQklURklFTEQoMCwgMSkKKworLyogUmVuYW1lZCBmcm9tIENMS1NFTCBVc2VkIGJ5IENNX0wzSU5JVF9IU0lfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMjRfMjVfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8yNF8yNV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX09UR19DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF82ME1fU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF82ME1fTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCisKKy8qIFVzZWQgYnkgQ00xX0FCRV9BRVNTX0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0FFU1NfRkNMS19TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0FFU1NfRkNMS19NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNCkKKworLyogVXNlZCBieSBDTV9DTEtTRUxfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfQ09SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQ09SRV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQ09SRV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFJlbmFtZWQgZnJvbSBDTEtTRUxfQ09SRSBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzIgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0NPUkVfMV8xX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9DT1JFXzFfMV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgQ01fV0tVUF9VU0lNX0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0RJVl9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0RJVl9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNCkKKworLyogVXNlZCBieSBDTV9DQU1fRkRJRl9DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9GQ0xLX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfRkNMS19NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKKworLyogVXNlZCBieSBDTV9MNFBFUl9NQ0JTUDRfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfSU5URVJOQUxfU09VUkNFX1NISUZUCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSwkJCUJJVEZJRUxEKDI1LCAyNSkKKworLyoKKyAqIFJlbmFtZWQgZnJvbSBDTEtTRUxfSU5URVJOQUxfU09VUkNFIFVzZWQgYnkgQ00xX0FCRV9ETUlDX0NMS0NUUkwsCisgKiBDTTFfQUJFX01DQVNQX0NMS0NUUkwsIENNMV9BQkVfTUNCU1AxX0NMS0NUUkwsIENNMV9BQkVfTUNCU1AyX0NMS0NUUkwsCisgKiBDTTFfQUJFX01DQlNQM19DTEtDVFJMCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9DTTFfQUJFX0RNSUNfU0hJRlQJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfQ00xX0FCRV9ETUlDX01BU0sJQklURklFTEQoMjYsIDI3KQorCisvKiBVc2VkIGJ5IENNX0NMS1NFTF9DT1JFX1JFU1RPUkUsIENNX0NMS1NFTF9DT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MM19TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKKworLyogUmVuYW1lZCBmcm9tIENMS1NFTF9MMyBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzIgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0wzX1NIQURPV19TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfU0hBRE9XX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBDTV9DTEtTRUxfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfQ09SRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDRfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0w0X01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fQ0xLU0VMX0FCRSAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfT1BQX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9PUFBfTUFTSwkJCQlCSVRGSUVMRCgwLCAxKQorCisvKiBVc2VkIGJ5IENNX0dGWF9HRlhfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfUEVSXzE5Mk1fU0hJRlQJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QRVJfMTkyTV9NQVNLCQkJCUJJVEZJRUxEKDI1LCAyNikKKworLyogVXNlZCBieSBDTV9FTVVfREVCVUdTU19DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfU1RNX0NMS19TSElGVAkJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfUE1EX1NUTV9DTEtfTUFTSwkJCUJJVEZJRUxEKDI3LCAyOSkKKworLyogVXNlZCBieSBDTV9FTVVfREVCVUdTU19DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfVFJBQ0VfQ0xLX1NISUZUCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfVFJBQ0VfQ0xLX01BU0sJCQlCSVRGSUVMRCgyNCwgMjYpCisKKy8qIFVzZWQgYnkgQ01fR0ZYX0dGWF9DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TR1hfRkNMS19TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NHWF9GQ0xLX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQorCisvKgorICogVXNlZCBieSBDTTFfQUJFX0RNSUNfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0FTUF9DTEtDVFJMLCBDTTFfQUJFX01DQlNQMV9DTEtDVFJMLAorICogQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTAorICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjUpCisKKy8qIFJlbmFtZWQgZnJvbSBDTEtTRUxfU09VUkNFIFVzZWQgYnkgQ01fTDRQRVJfTUNCU1A0X0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV8yNF8yNF9TSElGVAkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFXzI0XzI0X01BU0sJCQlCSVRGSUVMRCgyNCwgMjQpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDFfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AxX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AyX1NISUZUCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfVVRNSV9QMl9NQVNLCQkJCUJJVEZJRUxEKDI1LCAyNSkKKworLyoKKyAqIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwsIENNX0VNVV9DTEtTVENUUkwsIENNX0QyRF9DTEtTVENUUkwsCisgKiBDTV9EVUNBVElfQ0xLU1RDVFJMLCBDTV9MM0lOU1RSX0NMS1NUQ1RSTCwgQ01fTDNfMV9DTEtTVENUUkwsCisgKiBDTV9MM18yX0NMS1NUQ1RSTCwgQ01fTDRDRkdfQ0xLU1RDVFJMLCBDTV9NRU1JRl9DTEtTVENUUkwsCisgKiBDTV9TRE1BX0NMS1NUQ1RSTCwgQ01fR0ZYX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFNFQ19DTEtTVENUUkwsCisgKiBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9DQU1fQ0xLU1RDVFJMLCBDTV9DRUZVU0VfQ0xLU1RDVFJMLAorICogQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFLCBDTV9MM18xX0NMS1NUQ1RSTF9SRVNUT1JFLAorICogQ01fTDNfMl9DTEtTVENUUkxfUkVTVE9SRSwgQ01fTDRDRkdfQ0xLU1RDVFJMX1JFU1RPUkUsCisgKiBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSwgQ01fTUVNSUZfQ0xLU1RDVFJMX1JFU1RPUkUsIENNX0FMV09OX0NMS1NUQ1RSTCwKKyAqIENNX0lWQUhEX0NMS1NUQ1RSTCwgQ01fRFNTX0NMS1NUQ1RSTCwgQ01fTVBVX0NMS1NUQ1RSTCwgQ01fVEVTTEFfQ0xLU1RDVFJMLAorICogQ00xX0FCRV9DTEtTVENUUkwsIENNX01QVV9DTEtTVENUUkxfUkVTVE9SRQorICovCisjZGVmaW5lIE9NQVA0NDMwX0NMS1RSQ1RSTF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSwkJCQkJQklURklFTEQoMCwgMSkKKworLyogVXNlZCBieSBDTV9FTVVfT1ZFUlJJREVfRFBMTF9DT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfRElWX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9EUExMX0VNVV9ESVZfTUFTSwkJCQlCSVRGSUVMRCgwLCA2KQorCisvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX0NPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9EUExMX0VNVV9NVUxUX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9EUExMX0VNVV9NVUxUX01BU0sJCQlCSVRGSUVMRCg4LCAxOCkKKworLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRDJEX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfRDJEX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDE4LCAxOCkKKworLyogVXNlZCBieSBDTV9NUFVfU1RBVElDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX0QyRF9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9EMkRfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDE4LCAxOCkKKworLyoKKyAqIFVzZWQgYnkgQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9QRVIsIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfVU5JUFJPLAorICogQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9VU0IsIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9BQkUsIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfQ09SRSwKKyAqIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfRERSUEhZLCBDTV9TU0NfREVMVEFNU1RFUF9EUExMX0lWQSwKKyAqIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfREVMVEFNU1RFUF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9ERUxUQU1TVEVQX01BU0sJCQkJQklURklFTEQoMCwgMTkpCisKKy8qIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFLCBDTV9TSEFET1dfRlJFUV9DT05GSUcxICovCisjZGVmaW5lIE9NQVA0NDMwX0RMTF9PVkVSUklERV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9ETExfT1ZFUlJJREVfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBSZW5hbWVkIGZyb20gRExMX09WRVJSSURFIFVzZWQgYnkgQ01fRExMX0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRExMX09WRVJSSURFXzBfMF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9ETExfT1ZFUlJJREVfMF8wX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRExMX1JFU0VUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RMTF9SRVNFVF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKgorICogVXNlZCBieSBDTV9DTEtTRUxfRFBMTF9QRVIsIENNX0NMS1NFTF9EUExMX1VOSVBSTywgQ01fQ0xLU0VMX0RQTExfVVNCLAorICogQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9BQkUsIENNX0NMS1NFTF9EUExMX0NPUkUsCisgKiBDTV9DTEtTRUxfRFBMTF9ERFJQSFksIENNX0NMS1NFTF9EUExMX0lWQSwgQ01fQ0xLU0VMX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX1NISUZUCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0JZUF9DTEtTRUxfTUFTSwkJCQlCSVRGSUVMRCgyMywgMjMpCisKKy8qIFVzZWQgYnkgQ01fQ0xLRENPTERPX0RQTExfVVNCICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLRENPTERPX0dBVEVfQ1RSTF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLRENPTERPX0dBVEVfQ1RSTF9NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9DTEtTRUxfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS1NFTF9EUExMX0NPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfQ0xLU0VMX1NISUZUCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0NMS1NFTF9NQVNLCQkJQklURklFTEQoMjAsIDIwKQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTNfRFBMTF9QRVIsIENNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00zX0RQTExfQUJFLAorICogQ01fRElWX00zX0RQTExfQ09SRQorICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX00zX0RQTExfUEVSLCBDTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NM19EUExMX0FCRSwKKyAqIENNX0RJVl9NM19EUExMX0NPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZDSEFDS19TSElGVAkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVkNIQUNLX01BU0sJCQlCSVRGSUVMRCg1LCA1KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTNfRFBMTF9QRVIsIENNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00zX0RQTExfQUJFLAorICogQ01fRElWX00zX0RQTExfQ09SRQorICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0dBVEVfQ1RSTF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0dBVEVfQ1RSTF9NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9QRVIsIENNX0RJVl9NMl9EUExMX1VOSVBSTywgQ01fRElWX00yX0RQTExfQUJFICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUWDJfR0FURV9DVFJMX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUWDJfR0FURV9DVFJMX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NMl9EUExMX1BFUiwgQ01fRElWX00yX0RQTExfVU5JUFJPLAorICogQ01fRElWX00yX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9ESVZfTTJfRFBMTF9BQkUsIENNX0RJVl9NMl9EUExMX0NPUkUsCisgKiBDTV9ESVZfTTJfRFBMTF9ERFJQSFksIENNX0RJVl9NMl9EUExMX01QVQorICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSwkJCQlCSVRGSUVMRCgwLCA0KQorCisvKiBSZW5hbWVkIGZyb20gRFBMTF9DTEtPVVRfRElWIFVzZWQgYnkgQ01fRElWX00yX0RQTExfVVNCICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl8wXzZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfMF82X01BU0sJCQlCSVRGSUVMRCgwLCA2KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9QRVIsIENNX0RJVl9NMl9EUExMX1VOSVBSTywKKyAqIENNX0RJVl9NMl9EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00yX0RQTExfQUJFLCBDTV9ESVZfTTJfRFBMTF9DT1JFLAorICogQ01fRElWX00yX0RQTExfRERSUEhZLCBDTV9ESVZfTTJfRFBMTF9NUFUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZDSEFDS19TSElGVAkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVkNIQUNLX01BU0sJCQlCSVRGSUVMRCg1LCA1KQorCisvKiBSZW5hbWVkIGZyb20gRFBMTF9DTEtPVVRfRElWQ0hBQ0sgVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9VU0IgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWQ0hBQ0tfTTJfVVNCX1NISUZUCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZDSEFDS19NMl9VU0JfTUFTSwkJQklURklFTEQoNywgNykKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX00yX0RQTExfUEVSLCBDTV9ESVZfTTJfRFBMTF9VU0IsIENNX0RJVl9NMl9EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NMl9EUExMX0FCRSwgQ01fRElWX00yX0RQTExfQ09SRSwgQ01fRElWX00yX0RQTExfRERSUEhZLAorICogQ01fRElWX00yX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfR0FURV9DVFJMX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfR0FURV9DVFJMX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfRFBMTF9FTl9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9EUExMX0VOX01BU0sJCQkJQklURklFTEQoOCwgMTApCisKKy8qIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFLCBDTV9TSEFET1dfRlJFUV9DT05GSUcxICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9NMl9ESVZfU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9NMl9ESVZfTUFTSwkJCQlCSVRGSUVMRCgxMSwgMTUpCisKKy8qIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMiAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTVfRElWX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9NNV9ESVZfTUFTSwkJCQlCSVRGSUVMRCgzLCA3KQorCisvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfU1lTX1JFRl9DTEtTRUxfU0hJRlQJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfU1lTX1JFRl9DTEtTRUxfTUFTSwkJCUJJVEZJRUxEKDEsIDEpCisKKy8qCisgKiBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1BFUiwgQ01fQ0xLU0VMX0RQTExfVU5JUFJPLAorICogQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9BQkUsIENNX0NMS1NFTF9EUExMX0NPUkUsCisgKiBDTV9DTEtTRUxfRFBMTF9ERFJQSFksIENNX0NMS1NFTF9EUExMX0lWQSwgQ01fQ0xLU0VMX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ESVZfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRElWX01BU0sJCQkJCUJJVEZJRUxEKDAsIDYpCisKKy8qIFJlbmFtZWQgZnJvbSBEUExMX0RJViBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1VTQiAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0RJVl8wXzdfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ESVZfMF83X01BU0sJCQkJQklURklFTEQoMCwgNykKKworLyoKKyAqIFVzZWQgYnkgQ01fQ0xLTU9ERV9EUExMX1BFUiwgQ01fQ0xLTU9ERV9EUExMX1VTQiwKKyAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAorICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQorICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl9NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogUmVuYW1lZCBmcm9tIERQTExfRFJJRlRHVUFSRF9FTiBVc2VkIGJ5IENNX0NMS01PREVfRFBMTF9VTklQUk8gKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9EUklGVEdVQVJEX0VOXzNfM19TSElGVAkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl8zXzNfTUFTSwkJCUJJVEZJRUxEKDMsIDMpCisKKy8qCisgKiBVc2VkIGJ5IENNX0NMS01PREVfRFBMTF9QRVIsIENNX0NMS01PREVfRFBMTF9VTklQUk8sIENNX0NMS01PREVfRFBMTF9VU0IsCisgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKKyAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0VOX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDAsIDIpCisKKy8qCisgKiBVc2VkIGJ5IENNX0NMS01PREVfRFBMTF9QRVIsIENNX0NMS01PREVfRFBMTF9VTklQUk8sCisgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKKyAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0xQTU9ERV9FTl9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9MUE1PREVfRU5fTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qCisgKiBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1BFUiwgQ01fQ0xLU0VMX0RQTExfVU5JUFJPLAorICogQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9BQkUsIENNX0NMS1NFTF9EUExMX0NPUkUsCisgKiBDTV9DTEtTRUxfRFBMTF9ERFJQSFksIENNX0NMS1NFTF9EUExMX0lWQSwgQ01fQ0xLU0VMX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NVUxUX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVVMVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxOCkKKworLyogUmVuYW1lZCBmcm9tIERQTExfTVVMVCBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1VTQiAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX01VTFRfVVNCX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVVMVF9VU0JfTUFTSwkJCQlCSVRGSUVMRCg4LCAxOSkKKworLyoKKyAqIFVzZWQgYnkgQ01fQ0xLTU9ERV9EUExMX1BFUiwgQ01fQ0xLTU9ERV9EUExMX1VOSVBSTywKKyAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAorICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQorICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfUkVHTTRYRU5fU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfUkVHTTRYRU5fTUFTSwkJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fQ0xLU0VMX0RQTExfVVNCICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfU0RfRElWX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1NEX0RJVl9NQVNLCQkJCUJJVEZJRUxEKDI0LCAzMSkKKworLyoKKyAqIFVzZWQgYnkgQ01fQ0xLTU9ERV9EUExMX1BFUiwgQ01fQ0xLTU9ERV9EUExMX1VOSVBSTywgQ01fQ0xLTU9ERV9EUExMX1VTQiwKKyAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAorICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQorICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0FDS19TSElGVAkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfQUNLX01BU0sJCQkJQklURklFTEQoMTMsIDEzKQorCisvKgorICogVXNlZCBieSBDTV9DTEtNT0RFX0RQTExfUEVSLCBDTV9DTEtNT0RFX0RQTExfVU5JUFJPLCBDTV9DTEtNT0RFX0RQTExfVVNCLAorICogQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLTU9ERV9EUExMX0FCRSwgQ01fQ0xLTU9ERV9EUExMX0NPUkUsCisgKiBDTV9DTEtNT0RFX0RQTExfRERSUEhZLCBDTV9DTEtNT0RFX0RQTExfSVZBLCBDTV9DTEtNT0RFX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfRE9XTlNQUkVBRF9TSElGVAkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19ET1dOU1BSRUFEX01BU0sJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qCisgKiBVc2VkIGJ5IENNX0NMS01PREVfRFBMTF9QRVIsIENNX0NMS01PREVfRFBMTF9VTklQUk8sIENNX0NMS01PREVfRFBMTF9VU0IsCisgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKKyAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19FTl9TSElGVAkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfRU5fTUFTSwkJCQlCSVRGSUVMRCgxMiwgMTIpCisKKy8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9MNENGR19EWU5BTUlDREVQLCBDTV9MNFBFUl9EWU5BTUlDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX0RTU19EWU5ERVBfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfRFNTX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLAorICogQ01fTVBVX1NUQVRJQ0RFUAorICovCisjZGVmaW5lIE9NQVA0NDMwX0RTU19TVEFUREVQX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RTU19TVEFUREVQX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfRFlOREVQX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBDTV9TRE1BX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFLCBDTV9TSEFET1dfRlJFUV9DT05GSUcxICovCisjZGVmaW5lIE9NQVA0NDMwX0ZSRVFfVVBEQVRFX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0ZSRVFfVVBEQVRFX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfR0ZYX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfR0ZYX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9NUFVfU1RBVElDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9HRlhfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcyICovCisjZGVmaW5lIE9NQVA0NDMwX0dQTUNfRlJFUV9VUERBVEVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfR1BNQ19GUkVRX1VQREFURV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfTUFTSwkJCUJJVEZJRUxEKDAsIDQpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZDSEFDS19TSElGVAkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfRElWQ0hBQ0tfTUFTSwkJQklURklFTEQoNSwgNSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX000X0RQTExfUEVSLCBDTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTRfRFBMTF9DT1JFLCBDTV9ESVZfTTRfRFBMTF9ERFJQSFksIENNX0RJVl9NNF9EUExMX0lWQQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0dBVEVfQ1RSTF9TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfR0FURV9DVFJMX01BU0sJCUJJVEZJRUxEKDgsIDgpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9QV0ROX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX1BXRE5fTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX001X0RQTExfUEVSLCBDTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTVfRFBMTF9DT1JFLCBDTV9ESVZfTTVfRFBMTF9ERFJQSFksIENNX0RJVl9NNV9EUExMX0lWQQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX001X0RQTExfUEVSLCBDTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTVfRFBMTF9DT1JFLCBDTV9ESVZfTTVfRFBMTF9ERFJQSFksIENNX0RJVl9NNV9EUExMX0lWQQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVkNIQUNLX1NISUZUCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZDSEFDS19NQVNLCQlCSVRGSUVMRCg1LCA1KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTVfRFBMTF9QRVIsIENNX0RJVl9NNV9EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NNV9EUExMX0NPUkUsIENNX0RJVl9NNV9EUExMX0REUlBIWSwgQ01fRElWX001X0RQTExfSVZBCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfR0FURV9DVFJMX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9HQVRFX0NUUkxfTUFTSwkJQklURklFTEQoOCwgOCkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX001X0RQTExfUEVSLCBDTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTVfRFBMTF9DT1JFLCBDTV9ESVZfTTVfRFBMTF9ERFJQSFksIENNX0RJVl9NNV9EUExMX0lWQQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX1BXRE5fU0hJRlQJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfUFdETl9NQVNLCQkJQklURklFTEQoMTIsIDEyKQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTZfRFBMTF9QRVIsIENNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NNl9EUExMX0NPUkUsIENNX0RJVl9NNl9EUExMX0REUlBIWQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX002X0RQTExfUEVSLCBDTV9ESVZfTTZfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTZfRFBMTF9DT1JFLCBDTV9ESVZfTTZfRFBMTF9ERFJQSFkKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19ESVZDSEFDS19TSElGVAkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWQ0hBQ0tfTUFTSwkJQklURklFTEQoNSwgNSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX002X0RQTExfUEVSLCBDTV9ESVZfTTZfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTZfRFBMTF9DT1JFLCBDTV9ESVZfTTZfRFBMTF9ERFJQSFkKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19HQVRFX0NUUkxfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0dBVEVfQ1RSTF9NQVNLCQlCSVRGSUVMRCg4LCA4KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTZfRFBMTF9QRVIsIENNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NNl9EUExMX0NPUkUsIENNX0RJVl9NNl9EUExMX0REUlBIWQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX1BXRE5fU0hJRlQJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfUFdETl9NQVNLCQkJQklURklFTEQoMTIsIDEyKQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NN19EUExMX0NPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfTUFTSwkJCUJJVEZJRUxEKDAsIDQpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NN19EUExMX1BFUiwgQ01fRElWX003X0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fRElWX003X0RQTExfQ09SRQorICovCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVkNIQUNLX1NISUZUCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZDSEFDS19NQVNLCQlCSVRGSUVMRCg1LCA1KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NN19EUExMX0NPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9HQVRFX0NUUkxfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0dBVEVfQ1RSTF9NQVNLCQlCSVRGSUVMRCg4LCA4KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NN19EUExMX0NPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9QV0ROX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X1BXRE5fTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKKworLyoKKyAqIFVzZWQgYnkgUFJNX1BSTV9QUk9GSUxJTkdfQ0xLQ1RSTCwgQ01fV0tVUF9HUElPMV9DTEtDVFJMLAorICogQ01fV0tVUF9LRVlCT0FSRF9DTEtDVFJMLCBDTV9XS1VQX0w0V0tVUF9DTEtDVFJMLCBDTV9XS1VQX1JUQ19DTEtDVFJMLAorICogQ01fV0tVUF9TQVJSQU1fQ0xLQ1RSTCwgQ01fV0tVUF9TWU5DVElNRVJfQ0xLQ1RSTCwgQ01fV0tVUF9USU1FUjEyX0NMS0NUUkwsCisgKiBDTV9XS1VQX1RJTUVSMV9DTEtDVFJMLCBDTV9XS1VQX1VTSU1fQ0xLQ1RSTCwgQ01fV0tVUF9XRFQxX0NMS0NUUkwsCisgKiBDTV9XS1VQX1dEVDJfQ0xLQ1RSTCwgQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCwgQ01fRDJEX01PREVNX0lDUl9DTEtDVFJMLAorICogQ01fRDJEX1NBRDJEX0NMS0NUUkwsIENNX0QyRF9TQUQyRF9GV19DTEtDVFJMLCBDTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwsCisgKiBDTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTCwgQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMLAorICogQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkwsIENNX0wzXzFfTDNfMV9DTEtDVFJMLCBDTV9MM18yX0dQTUNfQ0xLQ1RSTCwKKyAqIENNX0wzXzJfTDNfMl9DTEtDVFJMLCBDTV9MM18yX09DTUNfUkFNX0NMS0NUUkwsIENNX0w0Q0ZHX0hXX1NFTV9DTEtDVFJMLAorICogQ01fTDRDRkdfTDRfQ0ZHX0NMS0NUUkwsIENNX0w0Q0ZHX01BSUxCT1hfQ0xLQ1RSTCwgQ01fTDRDRkdfU0FSX1JPTV9DTEtDVFJMLAorICogQ01fTUVNSUZfRE1NX0NMS0NUUkwsIENNX01FTUlGX0VNSUZfMV9DTEtDVFJMLCBDTV9NRU1JRl9FTUlGXzJfQ0xLQ1RSTCwKKyAqIENNX01FTUlGX0VNSUZfRldfQ0xLQ1RSTCwgQ01fTUVNSUZfRU1JRl9IMV9DTEtDVFJMLAorICogQ01fTUVNSUZfRU1JRl9IMl9DTEtDVFJMLCBDTV9TRE1BX1NETUFfQ0xLQ1RSTCwgQ01fR0ZYX0dGWF9DTEtDVFJMLAorICogQ01fTDRQRVJfQURDX0NMS0NUUkwsIENNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMLAorICogQ01fTDRQRVJfRE1USU1FUjExX0NMS0NUUkwsIENNX0w0UEVSX0RNVElNRVIyX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9ETVRJTUVSM19DTEtDVFJMLCBDTV9MNFBFUl9ETVRJTUVSNF9DTEtDVFJMLAorICogQ01fTDRQRVJfRE1USU1FUjlfQ0xLQ1RSTCwgQ01fTDRQRVJfRUxNX0NMS0NUUkwsIENNX0w0UEVSX0dQSU8yX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9HUElPM19DTEtDVFJMLCBDTV9MNFBFUl9HUElPNF9DTEtDVFJMLCBDTV9MNFBFUl9HUElPNV9DTEtDVFJMLAorICogQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTCwgQ01fTDRQRVJfSERRMVdfQ0xLQ1RSTCwgQ01fTDRQRVJfSEVDQzFfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0hFQ0MyX0NMS0NUUkwsIENNX0w0UEVSX0kyQzFfQ0xLQ1RSTCwgQ01fTDRQRVJfSTJDMl9DTEtDVFJMLAorICogQ01fTDRQRVJfSTJDM19DTEtDVFJMLCBDTV9MNFBFUl9JMkM0X0NMS0NUUkwsIENNX0w0UEVSX0kyQzVfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0w0UEVSX0NMS0NUUkwsIENNX0w0UEVSX01DQVNQMl9DTEtDVFJMLCBDTV9MNFBFUl9NQ0FTUDNfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX01DQlNQNF9DTEtDVFJMLCBDTV9MNFBFUl9NQ1NQSTFfQ0xLQ1RSTCwgQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9NQ1NQSTNfQ0xLQ1RSTCwgQ01fTDRQRVJfTUNTUEk0X0NMS0NUUkwsIENNX0w0UEVSX01HQVRFX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9NTUNTRDNfQ0xLQ1RSTCwgQ01fTDRQRVJfTU1DU0Q0X0NMS0NUUkwsIENNX0w0UEVSX01NQ1NENV9DTEtDVFJMLAorICogQ01fTDRQRVJfTVNQUk9IR19DTEtDVFJMLCBDTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMLCBDTV9MNFBFUl9VQVJUMV9DTEtDVFJMLAorICogQ01fTDRQRVJfVUFSVDJfQ0xLQ1RSTCwgQ01fTDRQRVJfVUFSVDNfQ0xLQ1RSTCwgQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTCwKKyAqIENNX0w0U0VDX0FFUzFfQ0xLQ1RSTCwgQ01fTDRTRUNfQUVTMl9DTEtDVFJMLCBDTV9MNFNFQ19DUllQVE9ETUFfQ0xLQ1RSTCwKKyAqIENNX0w0U0VDX0RFUzNERVNfQ0xLQ1RSTCwgQ01fTDRTRUNfUEtBRUlQMjlfQ0xLQ1RSTCwgQ01fTDRTRUNfUk5HX0NMS0NUUkwsCisgKiBDTV9MNFNFQ19TSEEyTUQ1MV9DTEtDVFJMLCBDTV9MM0lOSVRfQ0NQVFhfQ0xLQ1RSTCwgQ01fTDNJTklUX0VNQUNfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9IU0lfQ0xLQ1RSTCwgQ01fTDNJTklUX01NQzFfQ0xLQ1RSTCwgQ01fTDNJTklUX01NQzJfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9NTUM2X0NMS0NUUkwsIENNX0wzSU5JVF9QMTUwMF9DTEtDVFJMLCBDTV9MM0lOSVRfUENJRVNTX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfU0FUQV9DTEtDVFJMLCBDTV9MM0lOSVRfVFBQU1NfQ0xLQ1RSTCwgQ01fTDNJTklUX1VOSVBSTzFfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAorICogQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMLCBDTV9MM0lOSVRfWEhQSV9DTEtDVFJMLCBDTV9DQU1fRkRJRl9DTEtDVFJMLAorICogQ01fQ0FNX0lTU19DTEtDVFJMLCBDTV9DRUZVU0VfQ0VGVVNFX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUsCisgKiBDTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MM0lOU1RSX0wzX0lOU1RSX0NMS0NUUkxfUkVTVE9SRSwKKyAqIENNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMX1JFU1RPUkUsIENNX0w0UEVSX0dQSU8yX0NMS0NUUkxfUkVTVE9SRSwKKyAqIENNX0w0UEVSX0dQSU8zX0NMS0NUUkxfUkVTVE9SRSwgQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFLAorICogQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MNFBFUl9HUElPNl9DTEtDVFJMX1JFU1RPUkUsCisgKiBDTV9BTFdPTl9NRE1JTlRDX0NMS0NUUkwsIENNX0FMV09OX1NSX0NPUkVfQ0xLQ1RSTCwgQ01fQUxXT05fU1JfSVZBX0NMS0NUUkwsCisgKiBDTV9BTFdPTl9TUl9NUFVfQ0xLQ1RSTCwgQ01fSVZBSERfSVZBSERfQ0xLQ1RSTCwgQ01fSVZBSERfU0wyX0NMS0NUUkwsCisgKiBDTV9EU1NfREVJU1NfQ0xLQ1RSTCwgQ01fRFNTX0RTU19DTEtDVFJMLCBDTV9DTTJfUFJPRklMSU5HX0NMS0NUUkwsCisgKiBDTV9NUFVfTVBVX0NMS0NUUkwsIENNX1RFU0xBX1RFU0xBX0NMS0NUUkwsIENNMV9BQkVfQUVTU19DTEtDVFJMLAorICogQ00xX0FCRV9ETUlDX0NMS0NUUkwsIENNMV9BQkVfTDRBQkVfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0FTUF9DTEtDVFJMLAorICogQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTCwKKyAqIENNMV9BQkVfUERNX0NMS0NUUkwsIENNMV9BQkVfU0xJTUJVU19DTEtDVFJMLCBDTTFfQUJFX1RJTUVSNV9DTEtDVFJMLAorICogQ00xX0FCRV9USU1FUjZfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTCwKKyAqIENNMV9BQkVfV0RUM19DTEtDVFJMLCBDTV9DTTFfUFJPRklMSU5HX0NMS0NUUkwKKyAqLworI2RlZmluZSBPTUFQNDQzMF9JRExFU1RfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9JRExFU1RfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQorCisvKiBVc2VkIGJ5IENNX0RVQ0FUSV9EWU5BTUlDREVQLCBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSVNTX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JU1NfRFlOREVQX01BU0sJCQkJQklURklFTEQoOSwgOSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsCisgKiBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9JU1NfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JU1NfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9URVNMQV9EWU5BTUlDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX0lWQUhEX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9JVkFIRF9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKgorICogVXNlZCBieSBDTV9EMkRfU1RBVElDREVQLCBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUCwKKyAqIENNX0dGWF9TVEFUSUNERVAsIENNX0wzSU5JVF9TVEFUSUNERVAsIENNX0NBTV9TVEFUSUNERVAsCisgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9EU1NfU1RBVElDREVQLCBDTV9NUFVfU1RBVElDREVQLAorICogQ01fVEVTTEFfU1RBVElDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSVZBSERfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9JVkFIRF9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAsIENNX0w0UEVSX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfRFlOREVQX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyoKKyAqIFVzZWQgYnkgQ01fRDJEX1NUQVRJQ0RFUCwgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsCisgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qCisgKiBVc2VkIGJ5IENNX0wzXzJfRFlOQU1JQ0RFUCwgQ01fTDRDRkdfRFlOQU1JQ0RFUCwgQ01fTDNJTklUX0RZTkFNSUNERVAsCisgKiBDTV9EU1NfRFlOQU1JQ0RFUCwgQ01fTVBVX0RZTkFNSUNERVAsIENNX1RFU0xBX0RZTkFNSUNERVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9MM18xX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9MM18xX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCisKKy8qCisgKiBVc2VkIGJ5IENNX0QyRF9TVEFUSUNERVAsIENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLAorICogQ01fR0ZYX1NUQVRJQ0RFUCwgQ01fTDRTRUNfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9DQU1fU1RBVElDREVQLAorICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fSVZBSERfU1RBVElDREVQLCBDTV9EU1NfU1RBVElDREVQLAorICogQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDNfMV9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0wzXzFfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCisKKy8qCisgKiBVc2VkIGJ5IENNX0VNVV9EWU5BTUlDREVQLCBDTV9EMkRfRFlOQU1JQ0RFUCwgQ01fRFVDQVRJX0RZTkFNSUNERVAsCisgKiBDTV9MM18xX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAsIENNX1NETUFfRFlOQU1JQ0RFUCwKKyAqIENNX0dGWF9EWU5BTUlDREVQLCBDTV9MNFNFQ19EWU5BTUlDREVQLCBDTV9MM0lOSVRfRFlOQU1JQ0RFUCwKKyAqIENNX0NBTV9EWU5BTUlDREVQLCBDTV9JVkFIRF9EWU5BTUlDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDNfMl9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfTDNfMl9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQorCisvKgorICogVXNlZCBieSBDTV9EMkRfU1RBVElDREVQLCBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUCwKKyAqIENNX0dGWF9TVEFUSUNERVAsIENNX0w0U0VDX1NUQVRJQ0RFUCwgQ01fTDNJTklUX1NUQVRJQ0RFUCwgQ01fQ0FNX1NUQVRJQ0RFUCwKKyAqIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX0lWQUhEX1NUQVRJQ0RFUCwgQ01fRFNTX1NUQVRJQ0RFUCwKKyAqIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUAorICovCisjZGVmaW5lIE9NQVA0NDMwX0wzXzJfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9MM18yX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IENNX0wzXzFfRFlOQU1JQ0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9MNENGR19EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0w0Q0ZHX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKKworLyoKKyAqIFVzZWQgYnkgQ01fRDJEX1NUQVRJQ0RFUCwgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsCisgKiBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQLAorICogQ01fVEVTTEFfU1RBVElDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDRDRkdfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfTDRDRkdfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKKworLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfRFlOREVQX1NISUZUCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9MNFBFUl9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxMywgMTMpCisKKy8qCisgKiBVc2VkIGJ5IENNX0QyRF9TVEFUSUNERVAsIENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLAorICogQ01fTDRTRUNfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLAorICogQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKKworLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0UEVSX0RZTkFNSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDRTRUNfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9MNFNFQ19EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLAorICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUAorICovCisjZGVmaW5lIE9NQVA0NDMwX0w0U0VDX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX0w0U0VDX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9MNFdLVVBfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9MNFdLVVBfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTUsIDE1KQorCisvKgorICogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUCwgQ01fTDNJTklUX1NUQVRJQ0RFUCwKKyAqIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUAorICovCisjZGVmaW5lIE9NQVA0NDMwX0w0V0tVUF9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9MNFdLVVBfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDE1LCAxNSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRDJEX0RZTkFNSUNERVAsIENNX0wzXzFfRFlOQU1JQ0RFUCwgQ01fTDRDRkdfRFlOQU1JQ0RFUCwKKyAqIENNX01QVV9EWU5BTUlDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTUVNSUZfRFlOREVQX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX01FTUlGX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qCisgKiBVc2VkIGJ5IENNX0QyRF9TVEFUSUNERVAsIENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLAorICogQ01fR0ZYX1NUQVRJQ0RFUCwgQ01fTDRTRUNfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9DQU1fU1RBVElDREVQLAorICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fSVZBSERfU1RBVElDREVQLCBDTV9EU1NfU1RBVElDREVQLAorICogQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTUVNSUZfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9NRU1JRl9TVEFUREVQX01BU0sJCQkJQklURklFTEQoNCwgNCkKKworLyoKKyAqIFVzZWQgYnkgQ01fU1NDX01PREZSRVFESVZfRFBMTF9QRVIsIENNX1NTQ19NT0RGUkVRRElWX0RQTExfVU5JUFJPLAorICogQ01fU1NDX01PREZSRVFESVZfRFBMTF9VU0IsIENNX1NTQ19NT0RGUkVRRElWX0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fU1NDX01PREZSRVFESVZfRFBMTF9BQkUsIENNX1NTQ19NT0RGUkVRRElWX0RQTExfQ09SRSwKKyAqIENNX1NTQ19NT0RGUkVRRElWX0RQTExfRERSUEhZLCBDTV9TU0NfTU9ERlJFUURJVl9EUExMX0lWQSwKKyAqIENNX1NTQ19NT0RGUkVRRElWX0RQTExfTVBVCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTU9ERlJFUURJVl9FWFBPTkVOVF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfRVhQT05FTlRfTUFTSwkJCUJJVEZJRUxEKDgsIDEwKQorCisvKgorICogVXNlZCBieSBDTV9TU0NfTU9ERlJFUURJVl9EUExMX1BFUiwgQ01fU1NDX01PREZSRVFESVZfRFBMTF9VTklQUk8sCisgKiBDTV9TU0NfTU9ERlJFUURJVl9EUExMX1VTQiwgQ01fU1NDX01PREZSRVFESVZfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9TU0NfTU9ERlJFUURJVl9EUExMX0FCRSwgQ01fU1NDX01PREZSRVFESVZfRFBMTF9DT1JFLAorICogQ01fU1NDX01PREZSRVFESVZfRFBMTF9ERFJQSFksIENNX1NTQ19NT0RGUkVRRElWX0RQTExfSVZBLAorICogQ01fU1NDX01PREZSRVFESVZfRFBMTF9NUFUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9NT0RGUkVRRElWX01BTlRJU1NBX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfTU9ERlJFUURJVl9NQU5USVNTQV9NQVNLCQkJQklURklFTEQoMCwgNikKKworLyoKKyAqIFVzZWQgYnkgUFJNX1BSTV9QUk9GSUxJTkdfQ0xLQ1RSTCwgQ01fV0tVUF9HUElPMV9DTEtDVFJMLAorICogQ01fV0tVUF9LRVlCT0FSRF9DTEtDVFJMLCBDTV9XS1VQX0w0V0tVUF9DTEtDVFJMLCBDTV9XS1VQX1JUQ19DTEtDVFJMLAorICogQ01fV0tVUF9TQVJSQU1fQ0xLQ1RSTCwgQ01fV0tVUF9TWU5DVElNRVJfQ0xLQ1RSTCwgQ01fV0tVUF9USU1FUjEyX0NMS0NUUkwsCisgKiBDTV9XS1VQX1RJTUVSMV9DTEtDVFJMLCBDTV9XS1VQX1VTSU1fQ0xLQ1RSTCwgQ01fV0tVUF9XRFQxX0NMS0NUUkwsCisgKiBDTV9XS1VQX1dEVDJfQ0xLQ1RSTCwgQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCwgQ01fRDJEX01PREVNX0lDUl9DTEtDVFJMLAorICogQ01fRDJEX1NBRDJEX0NMS0NUUkwsIENNX0QyRF9TQUQyRF9GV19DTEtDVFJMLCBDTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwsCisgKiBDTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTCwgQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMLAorICogQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkwsIENNX0wzXzFfTDNfMV9DTEtDVFJMLCBDTV9MM18yX0dQTUNfQ0xLQ1RSTCwKKyAqIENNX0wzXzJfTDNfMl9DTEtDVFJMLCBDTV9MM18yX09DTUNfUkFNX0NMS0NUUkwsIENNX0w0Q0ZHX0hXX1NFTV9DTEtDVFJMLAorICogQ01fTDRDRkdfTDRfQ0ZHX0NMS0NUUkwsIENNX0w0Q0ZHX01BSUxCT1hfQ0xLQ1RSTCwgQ01fTDRDRkdfU0FSX1JPTV9DTEtDVFJMLAorICogQ01fTUVNSUZfRE1NX0NMS0NUUkwsIENNX01FTUlGX0VNSUZfMV9DTEtDVFJMLCBDTV9NRU1JRl9FTUlGXzJfQ0xLQ1RSTCwKKyAqIENNX01FTUlGX0VNSUZfRldfQ0xLQ1RSTCwgQ01fTUVNSUZfRU1JRl9IMV9DTEtDVFJMLAorICogQ01fTUVNSUZfRU1JRl9IMl9DTEtDVFJMLCBDTV9TRE1BX1NETUFfQ0xLQ1RSTCwgQ01fR0ZYX0dGWF9DTEtDVFJMLAorICogQ01fTDRQRVJfQURDX0NMS0NUUkwsIENNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMLAorICogQ01fTDRQRVJfRE1USU1FUjExX0NMS0NUUkwsIENNX0w0UEVSX0RNVElNRVIyX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9ETVRJTUVSM19DTEtDVFJMLCBDTV9MNFBFUl9ETVRJTUVSNF9DTEtDVFJMLAorICogQ01fTDRQRVJfRE1USU1FUjlfQ0xLQ1RSTCwgQ01fTDRQRVJfRUxNX0NMS0NUUkwsIENNX0w0UEVSX0dQSU8yX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9HUElPM19DTEtDVFJMLCBDTV9MNFBFUl9HUElPNF9DTEtDVFJMLCBDTV9MNFBFUl9HUElPNV9DTEtDVFJMLAorICogQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTCwgQ01fTDRQRVJfSERRMVdfQ0xLQ1RSTCwgQ01fTDRQRVJfSEVDQzFfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0hFQ0MyX0NMS0NUUkwsIENNX0w0UEVSX0kyQzFfQ0xLQ1RSTCwgQ01fTDRQRVJfSTJDMl9DTEtDVFJMLAorICogQ01fTDRQRVJfSTJDM19DTEtDVFJMLCBDTV9MNFBFUl9JMkM0X0NMS0NUUkwsIENNX0w0UEVSX0kyQzVfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0w0UEVSX0NMS0NUUkwsIENNX0w0UEVSX01DQVNQMl9DTEtDVFJMLCBDTV9MNFBFUl9NQ0FTUDNfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX01DQlNQNF9DTEtDVFJMLCBDTV9MNFBFUl9NQ1NQSTFfQ0xLQ1RSTCwgQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9NQ1NQSTNfQ0xLQ1RSTCwgQ01fTDRQRVJfTUNTUEk0X0NMS0NUUkwsIENNX0w0UEVSX01HQVRFX0NMS0NUUkwsCisgKiBDTV9MNFBFUl9NTUNTRDNfQ0xLQ1RSTCwgQ01fTDRQRVJfTU1DU0Q0X0NMS0NUUkwsIENNX0w0UEVSX01NQ1NENV9DTEtDVFJMLAorICogQ01fTDRQRVJfTVNQUk9IR19DTEtDVFJMLCBDTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMLCBDTV9MNFBFUl9VQVJUMV9DTEtDVFJMLAorICogQ01fTDRQRVJfVUFSVDJfQ0xLQ1RSTCwgQ01fTDRQRVJfVUFSVDNfQ0xLQ1RSTCwgQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTCwKKyAqIENNX0w0U0VDX0FFUzFfQ0xLQ1RSTCwgQ01fTDRTRUNfQUVTMl9DTEtDVFJMLCBDTV9MNFNFQ19DUllQVE9ETUFfQ0xLQ1RSTCwKKyAqIENNX0w0U0VDX0RFUzNERVNfQ0xLQ1RSTCwgQ01fTDRTRUNfUEtBRUlQMjlfQ0xLQ1RSTCwgQ01fTDRTRUNfUk5HX0NMS0NUUkwsCisgKiBDTV9MNFNFQ19TSEEyTUQ1MV9DTEtDVFJMLCBDTV9MM0lOSVRfQ0NQVFhfQ0xLQ1RSTCwgQ01fTDNJTklUX0VNQUNfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9IU0lfQ0xLQ1RSTCwgQ01fTDNJTklUX01NQzFfQ0xLQ1RSTCwgQ01fTDNJTklUX01NQzJfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9NTUM2X0NMS0NUUkwsIENNX0wzSU5JVF9QMTUwMF9DTEtDVFJMLCBDTV9MM0lOSVRfUENJRVNTX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfU0FUQV9DTEtDVFJMLCBDTV9MM0lOSVRfVFBQU1NfQ0xLQ1RSTCwgQ01fTDNJTklUX1VOSVBSTzFfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAorICogQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMLCBDTV9MM0lOSVRfWEhQSV9DTEtDVFJMLCBDTV9DQU1fRkRJRl9DTEtDVFJMLAorICogQ01fQ0FNX0lTU19DTEtDVFJMLCBDTV9DRUZVU0VfQ0VGVVNFX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUsCisgKiBDTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MM0lOU1RSX0wzX0lOU1RSX0NMS0NUUkxfUkVTVE9SRSwKKyAqIENNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMX1JFU1RPUkUsIENNX0w0UEVSX0dQSU8yX0NMS0NUUkxfUkVTVE9SRSwKKyAqIENNX0w0UEVSX0dQSU8zX0NMS0NUUkxfUkVTVE9SRSwgQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFLAorICogQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MNFBFUl9HUElPNl9DTEtDVFJMX1JFU1RPUkUsCisgKiBDTV9BTFdPTl9NRE1JTlRDX0NMS0NUUkwsIENNX0FMV09OX1NSX0NPUkVfQ0xLQ1RSTCwgQ01fQUxXT05fU1JfSVZBX0NMS0NUUkwsCisgKiBDTV9BTFdPTl9TUl9NUFVfQ0xLQ1RSTCwgQ01fSVZBSERfSVZBSERfQ0xLQ1RSTCwgQ01fSVZBSERfU0wyX0NMS0NUUkwsCisgKiBDTV9EU1NfREVJU1NfQ0xLQ1RSTCwgQ01fRFNTX0RTU19DTEtDVFJMLCBDTV9DTTJfUFJPRklMSU5HX0NMS0NUUkwsCisgKiBDTV9NUFVfTVBVX0NMS0NUUkwsIENNX1RFU0xBX1RFU0xBX0NMS0NUUkwsIENNMV9BQkVfQUVTU19DTEtDVFJMLAorICogQ00xX0FCRV9ETUlDX0NMS0NUUkwsIENNMV9BQkVfTDRBQkVfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0FTUF9DTEtDVFJMLAorICogQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTCwKKyAqIENNMV9BQkVfUERNX0NMS0NUUkwsIENNMV9BQkVfU0xJTUJVU19DTEtDVFJMLCBDTTFfQUJFX1RJTUVSNV9DTEtDVFJMLAorICogQ00xX0FCRV9USU1FUjZfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTCwKKyAqIENNMV9BQkVfV0RUM19DTEtDVFJMLCBDTV9DTTFfUFJPRklMSU5HX0NMS0NUUkwKKyAqLworI2RlZmluZSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfTUFTSwkJCQlCSVRGSUVMRCgwLCAxKQorCisvKiBVc2VkIGJ5IENNX0RTU19EU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fNDhNSFpfQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOXzQ4TUhaX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTV9XS1VQX0JBTkRHQVBfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQkdBUF8zMktfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQkdBUF8zMktfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQlBIWU9DUDJTQ1BfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ0xLMzJLX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9DTEszMktfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IENNX0NBTV9JU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ1RSTENMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9DVFJMQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyoKKyAqIFVzZWQgYnkgQ01fV0tVUF9HUElPMV9DTEtDVFJMLCBDTV9MNFBFUl9HUElPMl9DTEtDVFJMLAorICogQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTCwgQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTCwgQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTCwKKyAqIENNX0w0UEVSX0dQSU82X0NMS0NUUkwsIENNX0w0UEVSX0dQSU8yX0NMS0NUUkxfUkVTVE9SRSwKKyAqIENNX0w0UEVSX0dQSU8zX0NMS0NUUkxfUkVTVE9SRSwgQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFLAorICogQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MNFBFUl9HUElPNl9DTEtDVFJMX1JFU1RPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fREJDTEtfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RCQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9NRU1JRl9ETExfQ0xLQ1RSTCwgQ01fTUVNSUZfRExMX0hfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRExMX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9ETExfQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9EU1NfRFNTX0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RTU0NMS19TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRFNTQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzBfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEswX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzFfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEsxX01BU0sJCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTTFfQUJFX1NMSU1CVVNfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzJfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GQ0xLMl9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRlVOQzQ4TUNMS19TSElGVAkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRlVOQzQ4TUNMS19NQVNLCQkJQklURklFTEQoMTUsIDE1KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMV9DTEtfU0hJRlQJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzQ4ME1fUDFfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMywgMTMpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM0ODBNX1AyX0NMS19TSElGVAkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMl9DTEtfTUFTSwkJCUJJVEZJRUxEKDE0LCAxNCkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzYwTV9QMV9DTEtfU0hJRlQJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDFfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDJfQ0xLX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNjBNX1AyX0NMS19NQVNLCQkJQklURklFTEQoMTIsIDEyKQorCisvKiBVc2VkIGJ5IENNX0w0UEVSX1NMSU1CVVMyX0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1BFUjI0TUNfR0ZDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEVSMjRNQ19HRkNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QRVJBQkUyNE1fR0ZDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QRVJBQkUyNE1fR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQlBIWU9DUDJTQ1BfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEhZXzQ4TV9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QSFlfNDhNX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU0xJTUJVU19DTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogUmVuYW1lZCBmcm9tIE9QVEZDTEtFTl9TTElNQlVTX0NMSyBVc2VkIGJ5IENNMV9BQkVfU0xJTUJVU19DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS18xMV8xMV9TSElGVAkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS18xMV8xMV9NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgQ01fRFNTX0RTU19DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TWVNfQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TWVNfQ0xLX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0RTU19EU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVFZfQ0xLX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVFZfQ0xLX01BU0sJCQkJQklURklFTEQoMTEsIDExKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9VTklQUk8xX0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RYUEhZQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RYUEhZQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMF9DTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMF9DTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gxX0NMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gxX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VTQl9DSDJfQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gyX0NMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AxX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AxX0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLworI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QMl9DTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QMl9DTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VUTUlfUDNfQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AzX0NMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1hDTEtfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1hDTEtfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX1BFUiwgQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRSAqLworI2RlZmluZSBPTUFQNDQzMF9PVkVSUklERV9FTkFCTEVfU0hJRlQJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX09WRVJSSURFX0VOQUJMRV9NQVNLCQkJCUJJVEZJRUxEKDE5LCAxOSkKKworLyogVXNlZCBieSBDTV9DTEtTRUxfQUJFICovCisjZGVmaW5lIE9NQVA0NDMwX1BBRF9DTEtTX0dBVEVfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfUEFEX0NMS1NfR0FURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgQ01fQ09SRV9EVkZTX0NVUlJFTlQsIENNX0lWQV9EVkZTX0NVUlJFTlQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUEVSRl9DVVJSRU5UX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BFUkZfQ1VSUkVOVF9NQVNLCQkJCUJJVEZJRUxEKDAsIDcpCisKKy8qCisgKiBVc2VkIGJ5IENNX0NPUkVfRFZGU19QRVJGMSwgQ01fQ09SRV9EVkZTX1BFUkYyLCBDTV9DT1JFX0RWRlNfUEVSRjMsCisgKiBDTV9DT1JFX0RWRlNfUEVSRjQsIENNX0lWQV9EVkZTX1BFUkZfQUJFLCBDTV9JVkFfRFZGU19QRVJGX0lWQUhELAorICogQ01fSVZBX0RWRlNfUEVSRl9URVNMQQorICovCisjZGVmaW5lIE9NQVA0NDMwX1BFUkZfUkVRX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QRVJGX1JFUV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQorCisvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX1BFUiAqLworI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfRElWX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BFUl9EUExMX0VNVV9ESVZfTUFTSwkJCQlCSVRGSUVMRCgwLCA2KQorCisvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX1BFUiAqLworI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfTVVMVF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1BFUl9EUExMX0VNVV9NVUxUX01BU0sJCQkJQklURklFTEQoOCwgMTgpCisKKy8qIFVzZWQgYnkgQ01fUkVTVE9SRV9TVCAqLworI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ09NUExFVEVEX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMV9DT01QTEVURURfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IENNX1JFU1RPUkVfU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQV9DT01QTEVURURfU0hJRlQJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJBX0NPTVBMRVRFRF9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgQ01fUkVTVE9SRV9TVCAqLworI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJCX0NPTVBMRVRFRF9TSElGVAkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkJfQ09NUExFVEVEX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBDTV9FTVVfREVCVUdTU19DTEtDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1BNRF9TVE1fTVVYX0NUUkxfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1BNRF9TVE1fTVVYX0NUUkxfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjEpCisKKy8qIFVzZWQgYnkgQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9QTURfVFJBQ0VfTVVYX0NUUkxfU0hJRlQJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfUE1EX1RSQUNFX01VWF9DVFJMX01BU0sJCQlCSVRGSUVMRCgyMiwgMjMpCisKKy8qIFVzZWQgYnkgQ01fRFlOX0RFUF9QUkVTQ0FMICovCisjZGVmaW5lIE9NQVA0NDMwX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BSRVNDQUxfTUFTSwkJCQkJQklURklFTEQoMCwgNSkKKworLyogVXNlZCBieSBSRVZJU0lPTl9DTTIsIFJFVklTSU9OX0NNMSAqLworI2RlZmluZSBPTUFQNDQzMF9SRVZfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVl9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQorCisvKgorICogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTCwKKyAqIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUsIENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRQorICovCisjZGVmaW5lIE9NQVA0NDMwX1NBUl9NT0RFX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9TQVJfTU9ERV9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQorCisvKiBVc2VkIGJ5IENNX1NDQUxFX0ZDTEsgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0NBTEVfRkNMS19TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQ0FMRV9GQ0xLX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBDTV9MNENGR19EWU5BTUlDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1NETUFfRFlOREVQX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9TRE1BX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDExLCAxMSkKKworLyogVXNlZCBieSBDTV9EVUNBVElfU1RBVElDREVQLCBDTV9NUFVfU1RBVElDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1NETUFfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfU0RNQV9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTEsIDExKQorCisvKiBVc2VkIGJ5IENNX0NMS1NFTF9BQkUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0xJTUJVU19DTEtfR0FURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfU0xJTUJVU19DTEtfR0FURV9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyoKKyAqIFVzZWQgYnkgQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCwgQ01fRDJEX1NBRDJEX0NMS0NUUkwsCisgKiBDTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwsIENNX1NETUFfU0RNQV9DTEtDVFJMLCBDTV9HRlhfR0ZYX0NMS0NUUkwsCisgKiBDTV9MNFNFQ19DUllQVE9ETUFfQ0xLQ1RSTCwgQ01fTDNJTklUX0NDUFRYX0NMS0NUUkwsIENNX0wzSU5JVF9FTUFDX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfSFNJX0NMS0NUUkwsIENNX0wzSU5JVF9NTUMxX0NMS0NUUkwsIENNX0wzSU5JVF9NTUMyX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfTU1DNl9DTEtDVFJMLCBDTV9MM0lOSVRfUDE1MDBfQ0xLQ1RSTCwgQ01fTDNJTklUX1BDSUVTU19DTEtDVFJMLAorICogQ01fTDNJTklUX1NBVEFfQ0xLQ1RSTCwgQ01fTDNJTklUX1RQUFNTX0NMS0NUUkwsIENNX0wzSU5JVF9VTklQUk8xX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwsCisgKiBDTV9MM0lOSVRfVVNCX09UR19DTEtDVFJMLCBDTV9MM0lOSVRfWEhQSV9DTEtDVFJMLCBDTV9DQU1fRkRJRl9DTEtDVFJMLAorICogQ01fQ0FNX0lTU19DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFLAorICogQ01fSVZBSERfSVZBSERfQ0xLQ1RSTCwgQ01fRFNTX0RFSVNTX0NMS0NUUkwsIENNX0RTU19EU1NfQ0xLQ1RSTCwKKyAqIENNX01QVV9NUFVfQ0xLQ1RSTCwgQ01fVEVTTEFfVEVTTEFfQ0xLQ1RSTCwgQ00xX0FCRV9BRVNTX0NMS0NUUkwKKyAqLworI2RlZmluZSBPTUFQNDQzMF9TVEJZU1RfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9TVEJZU1RfTUFTSwkJCQkJQklURklFTEQoMTgsIDE4KQorCisvKgorICogVXNlZCBieSBDTV9JRExFU1RfRFBMTF9QRVIsIENNX0lETEVTVF9EUExMX1VOSVBSTywgQ01fSURMRVNUX0RQTExfVVNCLAorICogQ01fSURMRVNUX0RQTExfQUJFLCBDTV9JRExFU1RfRFBMTF9DT1JFLCBDTV9JRExFU1RfRFBMTF9ERFJQSFksCisgKiBDTV9JRExFU1RfRFBMTF9JVkEsIENNX0lETEVTVF9EUExMX01QVQorICovCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBDTV9DTEtEQ09MRE9fRFBMTF9VU0IgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtEQ09MRE9fU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS0RDT0xET19NQVNLCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NMl9EUExMX1BFUiwgQ01fRElWX00yX0RQTExfVVNCLCBDTV9ESVZfTTJfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTJfRFBMTF9BQkUsIENNX0RJVl9NMl9EUExMX0NPUkUsIENNX0RJVl9NMl9EUExMX0REUlBIWSwKKyAqIENNX0RJVl9NMl9EUExMX01QVQorICovCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUX01BU0sJCQkJQklURklFTEQoOSwgOSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX00zX0RQTExfUEVSLCBDTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NM19EUExMX0FCRSwKKyAqIENNX0RJVl9NM19EUExMX0NPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS09VVEhJRl9TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUSElGX01BU0sJCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBDTV9ESVZfTTJfRFBMTF9QRVIsIENNX0RJVl9NMl9EUExMX1VOSVBSTywgQ01fRElWX00yX0RQTExfQUJFICovCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUWDJfU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLT1VUWDJfTUFTSwkJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qCisgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAorICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKKyAqLworI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUMV9TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQxX01BU0sJCQlCSVRGSUVMRCg5LCA5KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTVfRFBMTF9QRVIsIENNX0RJVl9NNV9EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NNV9EUExMX0NPUkUsIENNX0RJVl9NNV9EUExMX0REUlBIWSwgQ01fRElWX001X0RQTExfSVZBCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDJfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUMl9NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRElWX002X0RQTExfUEVSLCBDTV9ESVZfTTZfRFBMTF9DT1JFX1JFU1RPUkUsCisgKiBDTV9ESVZfTTZfRFBMTF9DT1JFLCBDTV9ESVZfTTZfRFBMTF9ERFJQSFkKKyAqLworI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUM19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQzX01BU0sJCQlCSVRGSUVMRCg5LCA5KQorCisvKgorICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKKyAqIENNX0RJVl9NN19EUExMX0NPUkUKKyAqLworI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUNF9TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQ0X01BU0sJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IENNX1NZU19DTEtTRUwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1lTX0NMS1NFTF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TWVNfQ0xLU0VMX01BU0sJCQkJQklURklFTEQoMCwgMikKKworLyogVXNlZCBieSBDTV9MNENGR19EWU5BTUlDREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyoKKyAqIFVzZWQgYnkgQ01fRU1VX0RZTkFNSUNERVAsIENNX0QyRF9EWU5BTUlDREVQLCBDTV9EVUNBVElfRFlOQU1JQ0RFUCwKKyAqIENNX0wzXzFfRFlOQU1JQ0RFUCwgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9MNENGR19EWU5BTUlDREVQLAorICogQ01fTDRQRVJfRFlOQU1JQ0RFUCwgQ01fTVBVX0RZTkFNSUNERVAsIENNX1RFU0xBX0RZTkFNSUNERVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9XSU5ET1dTSVpFX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9XSU5ET1dTSVpFX01BU0sJCQkJQklURklFTEQoMjQsIDI3KQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmMKaW5kZXggOGViMmRhYi4uNThlNGExYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uYwpAQCAtMjEsNiArMjEsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKwogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCkBAIC02MSw5ICs2Myw4IEBACiAJbWFzayA9IDEgPDwgaWRsZXN0X3NoaWZ0OwogCiAJLyogWFhYIHNob3VsZCBiZSBPTUFQMiBDTSAqLwotCXdoaWxlICgoKGNtX3JlYWRfbW9kX3JlZyhwcmNtX21vZCwgY21faWRsZXN0X3JlZykgJiBtYXNrKSAhPSBlbmEpICYmCi0JICAgICAgIChpKysgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpKQotCQl1ZGVsYXkoMSk7CisJb21hcF90ZXN0X3RpbWVvdXQoKChjbV9yZWFkX21vZF9yZWcocHJjbV9tb2QsIGNtX2lkbGVzdF9yZWcpICYgbWFzaykgPT0gZW5hKSwKKwkJCSAgTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKIAogCXJldHVybiAoaSA8IE1BWF9NT0RVTEVfUkVBRFlfVElNRSkgPyAwIDogLUVCVVNZOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCmluZGV4IGEyZmNmY2MyLi45MGE0MDg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCkBAIC00LDggKzQsOCBAQAogLyoKICAqIE9NQVAyLzMgQ2xvY2sgTWFuYWdlbWVudCAoQ00pIHJlZ2lzdGVyIGRlZmluaXRpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKICAqCkBAIC0yMiw2ICsyMiwxMiBAQAogCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQzMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKICNkZWZpbmUgT01BUDM0WFhfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAogCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzQzMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNkZWZpbmUgT01BUDQ0WFhfQ00xX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfQ00xX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQorI2RlZmluZSBPTUFQNDRYWF9DTTJfUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAorCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9DTTJfQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisKKyNpbmNsdWRlICJjbTQ0eHguaCIKIAogLyoKICAqIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBnbG9iYWwgQ00gcmVnaXN0ZXJzCkBAIC04OSw2ICs5NSwxMSBAQAogI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwyX0VNVQkJCQkweDAwNTAKICNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMM19FTVUJCQkJMHgwMDU0CiAKKy8qIENNMi5DRUZVU0VfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKworLyogT01BUDQgbW9kdWxlbW9kZSBjb250cm9sICovCisjZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMCQkJMAorI2RlZmluZSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTAkJCTEKIAogLyogQ2xvY2sgbWFuYWdlbWVudCBkb21haW4gcmVnaXN0ZXIgZ2V0L3NldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc1YjliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIE9NQVA0NHh4IENNMSAmIENNMiBpbnN0YW5jZSBvZmZzZXQgbWFjcm9zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5IChwYXVsQHB3c2FuLmNvbSkKKyAqIFJhamVuZHJhIE5heWFrIChybmF5YWtAdGkuY29tKQorICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCisgKgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgorICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAorICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCisgKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0CisgKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ000NFhYX0gKKworCisvKiBDTTEgKi8KKworCisvKiBDTTEuT0NQX1NPQ0tFVF9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9SRVZJU0lPTl9DTTEJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX09DUF9TT0NLRVRfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NNMV9QUk9GSUxJTkdfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX09DUF9TT0NLRVRfTU9ELCAweDAwNDApCisKKy8qIENNMS5DS0dFTl9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfQ09SRQkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9BQkUJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9ETExfQ1RSTAkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDIwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMmMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMzQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNV9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwM2MpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNl9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NN19EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfQ09SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfTU9ERlJFUURJVl9EUExMX0NPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA0YykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDUwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfTVBVCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9NUFUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfTVBVCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9NUFUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNmMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX01QVQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9NUFUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA4OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9NUFUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA4YykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQllQQ0xLX0RQTExfTVBVCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDljKQorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGEwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwYTQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGE4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwYWMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX0lWQQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBiOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX001X0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGJjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0lWQQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGM4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfTU9ERlJFUURJVl9EUExMX0lWQQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGNjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9CWVBDTEtfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwZGMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwZTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX0FCRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBlNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwZTgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0FCRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBlYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQUJFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGYwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTNfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwZjQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfQUJFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19NT0RGUkVRRElWX0RQTExfQUJFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxMGMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9ERFJQSFkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX0REUlBIWQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDEyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9ERFJQSFkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDEyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTJjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9ERFJQSFkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX0REUlBIWQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDEzOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX001X0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTNjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTZfRFBMTF9ERFJQSFkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfRERSUEhZCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19NT0RGUkVRRElWX0RQTExfRERSUEhZCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNGMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NIQURPV19GUkVRX0NPTkZJRzEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NIQURPV19GUkVRX0NPTkZJRzIJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNjQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RZTl9ERVBfUFJFU0NBTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDE3MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fUkVTVE9SRV9TVAkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxODApCisKKy8qIENNMS5NUFVfQ00xIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01fTVBVX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9NUFVfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX01QVV9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfTVBVX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9NUFVfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9NUFVfTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX01QVV9NUFVfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9NUFVfTU9ELCAweDAwMjApCisKKy8qIENNMS5URVNMQV9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9URVNMQV9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfVEVTTEFfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1RFU0xBX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9URVNMQV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fVEVTTEFfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9URVNMQV9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fVEVTTEFfVEVTTEFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9URVNMQV9NT0QsIDB4MDAyMCkKKworLyogQ00xLkFCRV9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfTDRBQkVfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfQUVTU19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9QRE1fQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfRE1JQ19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0FTUF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDUwKQorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQM19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9TTElNQlVTX0NMS0NUUkwJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI1X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSNl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI4X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX1dEVDNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwODgpCisKKy8qIENNMS5SRVNUT1JFX0NNMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9DT1JFX1JFU1RPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00zX0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX002X0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX003X0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAxYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9DT1JFX1JFU1RPUkUJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19NT0RGUkVRRElWX0RQTExfQ09SRV9SRVNUT1JFCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9NUFVfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDM0KQorCisvKiBDTTIgKi8KKworCisvKiBDTTIuT0NQX1NPQ0tFVF9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9SRVZJU0lPTl9DTTIJCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX09DUF9TT0NLRVRfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NNMl9QUk9GSUxJTkdfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX09DUF9TT0NLRVRfTU9ELCAweDAwNDApCisKKy8qIENNMi5DS0dFTl9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFVDQVRJX0lTU19ST09UCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9VU0JfNjBNSFoJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NDQUxFX0ZDTEsJCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9DT1JFX0RWRlNfUEVSRjEJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NPUkVfRFZGU19QRVJGMgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ09SRV9EVkZTX1BFUkYzCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDE4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9DT1JFX0RWRlNfUEVSRjQJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMWMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NPUkVfRFZGU19DVVJSRU5UCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFfRFZGU19QRVJGX1RFU0xBCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFfRFZGU19QRVJGX0lWQUhECQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFfRFZGU19QRVJGX0FCRQkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSVZBX0RWRlNfQ1VSUkVOVAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDQ0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA0OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDRjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwNTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA1NCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX000X0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDU4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwNWMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNl9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA2MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX003X0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDY0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX1BFUgkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfTU9ERlJFUURJVl9EUExMX1BFUgkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDZjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9FTVVfT1ZFUlJJREVfRFBMTF9QRVIJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA4MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfVVNCCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDg0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA4OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfVVNCCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9VU0IJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwOTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfVVNCCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwYTgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19NT0RGUkVRRElWX0RQTExfVVNCCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwYWMpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS0RDT0xET19EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBiNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX1VOSVBSTwkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGM0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX1VOSVBSTwkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGM4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9VTklQUk8JCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwY2MpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX1VOSVBSTwkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9VTklQUk8JCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBlOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9VTklQUk8JCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBlYykKKworLyogQ00yLkFMV0FZU19PTl9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQUxXQVlTX09OX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9NRE1JTlRDX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0FMV09OX1NSX01QVV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQUxXQVlTX09OX01PRCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9JVkFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0FMV0FZU19PTl9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQUxXT05fU1JfQ09SRV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQUxXQVlTX09OX01PRCwgMHgwMDM4KQorCisvKiBDTTIuQ09SRV9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMV9MM18xX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDEwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDAxMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfTDNfMl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDAxMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfR1BNQ19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDAxMjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfT0NNQ19SQU1fQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDAxMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RVQ0FUSV9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDIwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRFVDQVRJX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMjA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9EVUNBVElfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMjA4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMjIwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMzAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMzA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDMwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU0RNQV9TRE1BX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDMyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA0MDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0RNTV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA0MjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfRldfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA0MjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDQzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRU1JRl8yX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDM4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9ETExfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDQwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGX0gxX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDUwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGX0gyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDU4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9ETExfSF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA0NjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0QyRF9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDUwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRDJEX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNTA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNTA4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfU0FEMkRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNTIwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfTU9ERU1fSUNSX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNTI4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfU0FEMkRfRldfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA1MzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNjAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA2MDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0w0X0NGR19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDYyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRDRkdfSFdfU0VNX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNjI4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19NQUlMQk9YX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNjMwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19TQVJfUk9NX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNjM4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNzAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA3MjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5TVFJfTDNfSU5TVFJfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA3MjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDc0MCkKKworLyogQ00yLklWQUhEX0NNMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX0NNX0lWQUhEX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9JVkFIRF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSVZBSERfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFIRF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX01PRCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFIRF9JVkFIRF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX01PRCwgMHgwMDIwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFIRF9TTDJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9JVkFIRF9NT0QsIDB4MDAyOCkKKworLyogQ00yLkNBTV9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9DQU1fQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NBTV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0FNX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DQU1fTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NBTV9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NBTV9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0FNX0lTU19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NBTV9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0FNX0ZESUZfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DQU1fTU9ELCAweDAwMjgpCisKKy8qIENNMi5EU1NfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01fRFNTX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RTU19TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfRFNTX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RTU19EU1NfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RTU19ERUlTU19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0RTU19NT0QsIDB4MDAyOCkKKworLyogQ00yLkdGWF9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9HRlhfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0dGWF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fR0ZYX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9HRlhfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0dGWF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0dGWF9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fR0ZYX0dGWF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0dGWF9NT0QsIDB4MDAyMCkKKworLyogQ00yLkwzSU5JVF9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX01NQzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwMjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9NTUMyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfSFNJX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVU5JUFJPMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9PVEdfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA2MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA2OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1AxNTAwX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwNzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9FTUFDX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfU0FUQV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA4OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1RQUFNTX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwOTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9QQ0lFU1NfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA5OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX0NDUFRYX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwYTgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9YSFBJX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMGMwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfTU1DNl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDBjOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwZDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkwJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDBlMCkKKworLyogQ00yLkw0UEVSX0NNMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfQURDX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwMjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSNF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVI5X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRUxNX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNTgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8yX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8zX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU80X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU81X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU82X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwODApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0hEUTFXX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwODgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0hFQ0MxX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwOTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0hFQ0MyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwOTgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBhMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSTJDMl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMGE4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9JMkMzX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwYjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBiOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTDRQRVJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNBU1AyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNBU1AzX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBkOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNCU1A0X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBlMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUdBVEVfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBlOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkxX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBmMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBmOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkzX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDEwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEk0X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDEwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0QzX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDEyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0Q0X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDEyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTVNQUk9IR19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX1NMSU1CVVMyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDEzOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE0MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE0OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE1MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE1OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0Q1X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE2MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSTJDNV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMTY4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxODApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE4NCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE4OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfQUVTMV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMWEwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19BRVMyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxYTgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX0RFUzNERVNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMWIwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19QS0FFSVAyOV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxYjgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX1JOR19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMWMwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19TSEEyTUQ1MV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxYzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX0NSWVBUT0RNQV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxZDgpCisKKy8qIENNMi5DRUZVU0VfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0VGVVNFX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DRUZVU0VfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NFRlVTRV9DRUZVU0VfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NFRlVTRV9NT0QsIDB4MDAyMCkKKworLyogQ00yLlJFU1RPUkVfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMV9DTEtTVENUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19DTEtTVENUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTF9SRVNUT1JFCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDE4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0wzX0lOU1RSX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAxYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzJfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTF9SRVNUT1JFCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDNjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA0MCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCA3MzNkM2RjLi4xOGFkOTMxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L21tYy5oPgogCisjaW5jbHVkZSAibXV4LmgiCisKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDJfTU9EVUxFKQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNhbV9yZXNvdXJjZXNbXSA9IHsKQEAgLTU5NSwyNyArNTk3LDQwIEBACiAKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJaWYgKGNvbnRyb2xsZXJfbnIgPT0gMCkgewotCQkJb21hcF9jZmdfcmVnKE4yOF8zNDMwX01NQzFfQ0xLKTsKLQkJCW9tYXBfY2ZnX3JlZyhNMjdfMzQzMF9NTUMxX0NNRCk7Ci0JCQlvbWFwX2NmZ19yZWcoTjI3XzM0MzBfTU1DMV9EQVQwKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfY2xrIiwKKwkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9jbWQiLAorCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDAiLAorCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CiAJCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLndpcmVzID09IDQgfHwKIAkJCQltbWNfY29udHJvbGxlci0+c2xvdHNbMF0ud2lyZXMgPT0gOCkgewotCQkJCW9tYXBfY2ZnX3JlZyhOMjZfMzQzMF9NTUMxX0RBVDEpOwotCQkJCW9tYXBfY2ZnX3JlZyhOMjVfMzQzMF9NTUMxX0RBVDIpOwotCQkJCW9tYXBfY2ZnX3JlZyhQMjhfMzQzMF9NTUMxX0RBVDMpOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0MSIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQyIiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDMiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwogCQkJfQogCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS53aXJlcyA9PSA4KSB7Ci0JCQkJb21hcF9jZmdfcmVnKFAyN18zNDMwX01NQzFfREFUNCk7Ci0JCQkJb21hcF9jZmdfcmVnKFAyNl8zNDMwX01NQzFfREFUNSk7Ci0JCQkJb21hcF9jZmdfcmVnKFIyN18zNDMwX01NQzFfREFUNik7Ci0JCQkJb21hcF9jZmdfcmVnKFIyNV8zNDMwX01NQzFfREFUNyk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ0IiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMxX2RhdDUiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzFfZGF0NiIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMV9kYXQ3IiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJCX0KIAkJfQogCQlpZiAoY29udHJvbGxlcl9uciA9PSAxKSB7CiAJCQkvKiBNTUMyICovCi0JCQlvbWFwX2NmZ19yZWcoQUUyXzM0MzBfTU1DMl9DTEspOwotCQkJb21hcF9jZmdfcmVnKEFHNV8zNDMwX01NQzJfQ01EKTsKLQkJCW9tYXBfY2ZnX3JlZyhBSDVfMzQzMF9NTUMyX0RBVDApOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9jbGsiLAorCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2NtZCIsCisJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MCIsCisJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAogCQkJLyoKIAkJCSAqIEZvciA4IHdpcmUgY29uZmlndXJhdGlvbnMsIExpbmVzIERBVDQsIDUsIDYgYW5kIDcgbmVlZCB0byBiZSBtdXhlZApAQCAtNjIzLDE1ICs2MzgsMjIgQEAKIAkJCSAqLwogCQkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS53aXJlcyA9PSA0IHx8CiAJCQkJbW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLndpcmVzID09IDgpIHsKLQkJCQlvbWFwX2NmZ19yZWcoQUg0XzM0MzBfTU1DMl9EQVQxKTsKLQkJCQlvbWFwX2NmZ19yZWcoQUc0XzM0MzBfTU1DMl9EQVQyKTsKLQkJCQlvbWFwX2NmZ19yZWcoQUY0XzM0MzBfTU1DMl9EQVQzKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDEiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0MiIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQzIiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAkJCX0KIAkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMF0ud2lyZXMgPT0gOCkgewotCQkJCW9tYXBfY2ZnX3JlZyhBRTRfMzQzMF9NTUMyX0RBVDQpOwotCQkJCW9tYXBfY2ZnX3JlZyhBSDNfMzQzMF9NTUMyX0RBVDUpOwotCQkJCW9tYXBfY2ZnX3JlZyhBRjNfMzQzMF9NTUMyX0RBVDYpOwotCQkJCW9tYXBfY2ZnX3JlZyhBRTNfMzQzMF9NTUMyX0RBVDcpOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0NC5zZG1tYzJfZGF0NCIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jMl9kYXQ1LnNkbW1jMl9kYXQ1IiwKKwkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWMyX2RhdDYuc2RtbWMyX2RhdDYiLAorCQkJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tYzJfZGF0Ny5zZG1tYzJfZGF0NyIsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjA1NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsLmMKQEAgLTAsMCArMSw1MzggQEAKKy8qCisgKiBPTUFQMy80IC0gc3BlY2lmaWMgRFBMTCBjb250cm9sIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKiBUZXN0aW5nIGFuZCBpbnRlZ3JhdGlvbiBmaXhlcyBieSBKb3VuaSBIw4PCtmdhbmRlcgorICoKKyAqIFBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5CisgKiBSaWNoYXJkIFdvb2RydWZmLCBUb255IExpbmRncmVuLCBUdXVra2EgVGlra2FuZW4sIEthcnRoaWsgRGFzdQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisKKy8qIENNX0FVVE9JRExFX1BMTCouQVVUT18qIGJpdCB2YWx1ZXMgKi8KKyNkZWZpbmUgRFBMTF9BVVRPSURMRV9ESVNBQkxFCQkJMHgwCisjZGVmaW5lIERQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AJCTB4MQorCisjZGVmaW5lIE1BWF9EUExMX1dBSVRfVFJJRVMJCTEwMDAwMDAKKworCisvKioKKyAqIG9tYXAzX2RwbGxfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCByYXRlCisgKiBAY2xrOiBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBSZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIHRoZSBEUExMIHJhdGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7Cit9CisKKy8qIF9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuIC0gd3JpdGUgY2xrZW5fYml0cyBhcmcgdG8gYSBEUExMJ3MgZW5hYmxlIGJpdHMgKi8KK3N0YXRpYyB2b2lkIF9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKHN0cnVjdCBjbGsgKmNsaywgdTggY2xrZW5fYml0cykKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwl2ICY9IH5kZC0+ZW5hYmxlX21hc2s7CisJdiB8PSBjbGtlbl9iaXRzIDw8IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7Cit9CisKKy8qIF9vbWFwM193YWl0X2RwbGxfc3RhdHVzOiB3YWl0IGZvciBhIERQTEwgdG8gZW50ZXIgYSBzcGVjaWZpYyBzdGF0ZSAqLworc3RhdGljIGludCBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhzdHJ1Y3QgY2xrICpjbGssIHU4IHN0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCWludCBpID0gMDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwlzdGF0ZSA8PD0gX19mZnMoZGQtPmlkbGVzdF9tYXNrKTsKKworCXdoaWxlICgoKF9fcmF3X3JlYWRsKGRkLT5pZGxlc3RfcmVnKSAmIGRkLT5pZGxlc3RfbWFzaykgIT0gc3RhdGUpICYmCisJICAgICAgIGkgPCBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CisJCWkrKzsKKwkJdWRlbGF5KDEpOworCX0KKworCWlmIChpID09IE1BWF9EUExMX1dBSVRfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogJXMgZmFpbGVkIHRyYW5zaXRpb24gdG8gJyVzJ1xuIiwKKwkJICAgICAgIGNsay0+bmFtZSwgKHN0YXRlKSA/ICJsb2NrZWQiIDogImJ5cGFzc2VkIik7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImNsb2NrOiAlcyB0cmFuc2l0aW9uIHRvICclcycgaW4gJWQgbG9vcHNcbiIsCisJCQkgY2xrLT5uYW1lLCAoc3RhdGUpID8gImxvY2tlZCIgOiAiYnlwYXNzZWQiLCBpKTsKKworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIEZyb20gMzQzMCBUUk0gRVMyIDQuNy42LjIgKi8KK3N0YXRpYyB1MTYgX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKHN0cnVjdCBjbGsgKmNsaywgdTggbikKK3sKKwl1bnNpZ25lZCBsb25nIGZpbnQ7CisJdTE2IGYgPSAwOworCisJZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gbjsKKworCXByX2RlYnVnKCJjbG9jazogZmludCBpcyAlbHVcbiIsIGZpbnQpOworCisJaWYgKGZpbnQgPj0gNzUwMDAwICYmIGZpbnQgPD0gMTAwMDAwMCkKKwkJZiA9IDB4MzsKKwllbHNlIGlmIChmaW50ID4gMTAwMDAwMCAmJiBmaW50IDw9IDEyNTAwMDApCisJCWYgPSAweDQ7CisJZWxzZSBpZiAoZmludCA+IDEyNTAwMDAgJiYgZmludCA8PSAxNTAwMDAwKQorCQlmID0gMHg1OworCWVsc2UgaWYgKGZpbnQgPiAxNTAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMCkKKwkJZiA9IDB4NjsKKwllbHNlIGlmIChmaW50ID4gMTc1MDAwMCAmJiBmaW50IDw9IDIxMDAwMDApCisJCWYgPSAweDc7CisJZWxzZSBpZiAoZmludCA+IDc1MDAwMDAgJiYgZmludCA8PSAxMDAwMDAwMCkKKwkJZiA9IDB4QjsKKwllbHNlIGlmIChmaW50ID4gMTAwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwMCkKKwkJZiA9IDB4QzsKKwllbHNlIGlmIChmaW50ID4gMTI1MDAwMDAgJiYgZmludCA8PSAxNTAwMDAwMCkKKwkJZiA9IDB4RDsKKwllbHNlIGlmIChmaW50ID4gMTUwMDAwMDAgJiYgZmludCA8PSAxNzUwMDAwMCkKKwkJZiA9IDB4RTsKKwllbHNlIGlmIChmaW50ID4gMTc1MDAwMDAgJiYgZmludCA8PSAyMTAwMDAwMCkKKwkJZiA9IDB4RjsKKwllbHNlCisJCXByX2RlYnVnKCJjbG9jazogdW5rbm93biBmcmVxc2VsIHNldHRpbmcgZm9yICVkXG4iLCBuKTsKKworCXJldHVybiBmOworfQorCisvKiBOb24tQ09SRSBEUExMIChlLmcuLCBEUExMcyB0aGF0IGRvIG5vdCBjb250cm9sIFNEUkMpIGNsb2NrIGZ1bmN0aW9ucyAqLworCisvKgorICogX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGxvY2sgYW5kIHdhaXQgZm9yIHJlYWRpbmVzcworICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsaworICoKKyAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gbG9jay4gIFdhaXRzIGZvciB0aGUgRFBMTCB0byByZXBvcnQKKyAqIHJlYWRpbmVzcyBiZWZvcmUgcmV0dXJuaW5nLiAgV2lsbCBzYXZlIGFuZCByZXN0b3JlIHRoZSBEUExMJ3MKKyAqIGF1dG9pZGxlIHN0YXRlIGFjcm9zcyB0aGUgZW5hYmxlLCBwZXIgdGhlIENEUCBjb2RlLiAgSWYgdGhlIERQTEwKKyAqIGxvY2tlZCBzdWNjZXNzZnVsbHksIHJldHVybiAwOyBpZiB0aGUgRFBMTCBkaWQgbm90IGxvY2sgaW4gdGhlIHRpbWUKKyAqIGFsbG90dGVkLCBvciBEUExMMyB3YXMgcGFzc2VkIGluLCByZXR1cm4gLUVJTlZBTC4KKyAqLworc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soc3RydWN0IGNsayAqY2xrKQoreworCXU4IGFpOworCWludCByOworCisJcHJfZGVidWcoImNsb2NrOiBsb2NraW5nIERQTEwgJXNcbiIsIGNsay0+bmFtZSk7CisKKwlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOworCisJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKKworCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT0NLRUQpOworCisJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMSk7CisKKwlpZiAoYWkpCisJCW9tYXAzX2RwbGxfYWxsb3dfaWRsZShjbGspOworCisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyAtIGluc3RydWN0IGEgRFBMTCB0byBieXBhc3MgYW5kIHdhaXQgZm9yIHJlYWRpbmVzcworICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsaworICoKKyAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gZW50ZXIgbG93LXBvd2VyIGJ5cGFzcyBtb2RlLiAgSW4KKyAqIGJ5cGFzcyBtb2RlLCB0aGUgRFBMTCdzIHJhdGUgaXMgc2V0IGVxdWFsIHRvIGl0cyBwYXJlbnQgY2xvY2sncworICogcmF0ZS4gIFdhaXRzIGZvciB0aGUgRFBMTCB0byByZXBvcnQgcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcuCisgKiBXaWxsIHNhdmUgYW5kIHJlc3RvcmUgdGhlIERQTEwncyBhdXRvaWRsZSBzdGF0ZSBhY3Jvc3MgdGhlIGVuYWJsZSwKKyAqIHBlciB0aGUgQ0RQIGNvZGUuICBJZiB0aGUgRFBMTCBlbnRlcmVkIGJ5cGFzcyBtb2RlIHN1Y2Nlc3NmdWxseSwKKyAqIHJldHVybiAwOyBpZiB0aGUgRFBMTCBkaWQgbm90IGVudGVyIGJ5cGFzcyBpbiB0aGUgdGltZSBhbGxvdHRlZCwgb3IKKyAqIERQTEwzIHdhcyBwYXNzZWQgaW4sIG9yIHRoZSBEUExMIGRvZXMgbm90IHN1cHBvcnQgbG93LXBvd2VyIGJ5cGFzcywKKyAqIHJldHVybiAtRUlOVkFMLgorICovCitzdGF0aWMgaW50IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcjsKKwl1OCBhaTsKKworCWlmICghKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJjbG9jazogY29uZmlndXJpbmcgRFBMTCAlcyBmb3IgbG93LXBvd2VyIGJ5cGFzc1xuIiwKKwkJIGNsay0+bmFtZSk7CisKKwlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOworCisJX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oY2xrLCBEUExMX0xPV19QT1dFUl9CWVBBU1MpOworCisJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMCk7CisKKwlpZiAoYWkpCisJCW9tYXAzX2RwbGxfYWxsb3dfaWRsZShjbGspOworCWVsc2UKKwkJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKKworCXJldHVybiByOworfQorCisvKgorICogX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIHN0b3AKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBzdG9wLiBXaWxsIHNhdmUgYW5kCisgKiByZXN0b3JlIHRoZSBEUExMJ3MgYXV0b2lkbGUgc3RhdGUgYWNyb3NzIHRoZSBzdG9wLCBwZXIgdGhlIENEUAorICogY29kZS4gIElmIERQTEwzIHdhcyBwYXNzZWQgaW4sIG9yIHRoZSBEUExMIGRvZXMgbm90IHN1cHBvcnQKKyAqIGxvdy1wb3dlciBzdG9wLCByZXR1cm4gLUVJTlZBTDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KKyAqLworc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX3N0b3Aoc3RydWN0IGNsayAqY2xrKQoreworCXU4IGFpOworCisJaWYgKCEoY2xrLT5kcGxsX2RhdGEtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfU1RPUCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJjbG9jazogc3RvcHBpbmcgRFBMTCAlc1xuIiwgY2xrLT5uYW1lKTsKKworCWFpID0gb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKGNsayk7CisKKwlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9XX1BPV0VSX1NUT1ApOworCisJaWYgKGFpKQorCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKKwllbHNlCisJCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGVudGVyIGJ5cGFzcyBvciBsb2NrIG1vZGUKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVuYWJsZSwgZS5nLiwgdG8gZW50ZXIgYnlwYXNzIG9yIGxvY2suCisgKiBUaGUgY2hvaWNlIG9mIG1vZGVzIGRlcGVuZHMgb24gdGhlIERQTEwncyBwcm9ncmFtbWVkIHJhdGU6IGlmIGl0IGlzCisgKiB0aGUgc2FtZSBhcyB0aGUgRFBMTCdzIHBhcmVudCBjbG9jaywgaXQgd2lsbCBlbnRlciBieXBhc3M7CisgKiBvdGhlcndpc2UsIGl0IHdpbGwgZW50ZXIgbG9jay4gIFRoaXMgY29kZSB3aWxsIHdhaXQgZm9yIHRoZSBEUExMIHRvCisgKiBpbmRpY2F0ZSByZWFkaW5lc3MgYmVmb3JlIHJldHVybmluZywgdW5sZXNzIHRoZSBEUExMIHRha2VzIHRvbyBsb25nCisgKiB0byBlbnRlciB0aGUgdGFyZ2V0IHN0YXRlLiAgSW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0aGUgc3RydWN0IGNsaydzCisgKiBlbmFibGUgZnVuY3Rpb24uICBJZiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdAorICogc3VwcG9ydCBsb3ctcG93ZXIgc3RvcCwgb3IgaWYgdGhlIERQTEwgdG9vayB0b28gbG9uZyB0byBlbnRlcgorICogYnlwYXNzIG9yIGxvY2ssIHJldHVybiAtRUlOVkFMOyBvdGhlcndpc2UsIHJldHVybiAwLgorICovCitpbnQgb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHI7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+cmF0ZSA9PSBkZC0+Y2xrX2J5cGFzcy0+cmF0ZSkgeworCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfYnlwYXNzKTsKKwkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisJfSBlbHNlIHsKKwkJV0FSTl9PTihjbGstPnBhcmVudCAhPSBkZC0+Y2xrX3JlZik7CisJCXIgPSBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKKwl9CisJLyoKKwkgKkZJWE1FOiB0aGlzIGlzIGR1YmlvdXMgLSBpZiBjbGstPnJhdGUgaGFzIGNoYW5nZWQsIHdoYXQgYWJvdXQKKwkgKiBwcm9wYWdhdGluZz8KKwkgKi8KKwlpZiAoIXIpCisJCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBzdG9wCisgKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCisgKgorICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcC4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGludGVuZGVkIGZvciB1c2UgaW4gc3RydWN0IGNsa29wcy4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKGNsayk7Cit9CisKKworLyogTm9uLUNPUkUgRFBMTCByYXRlIHNldCBjb2RlICovCisKKy8qCisgKiBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbSAtIHNldCBub24tY29yZSBEUExMIE0sTiB2YWx1ZXMgZGlyZWN0bHkKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQG06IERQTEwgbXVsdGlwbGllciB0byBzZXQKKyAqIEBuOiBEUExMIGRpdmlkZXIgdG8gc2V0CisgKiBAZnJlcXNlbDogRlJFUVNFTCB2YWx1ZSB0byBzZXQKKyAqCisgKiBQcm9ncmFtIHRoZSBEUExMIHdpdGggdGhlIHN1cHBsaWVkIE0sIE4gdmFsdWVzLCBhbmQgd2FpdCBmb3IgdGhlIERQTEwgdG8KKyAqIGxvY2suLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oc3RydWN0IGNsayAqY2xrLCB1MTYgbSwgdTggbiwgdTE2IGZyZXFzZWwpCit7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQgPSBjbGstPmRwbGxfZGF0YTsKKwl1MzIgdjsKKworCS8qIDM0MzAgRVMyIFRSTTogNC43LjYuOSBEUExMIFByb2dyYW1taW5nIFNlcXVlbmNlICovCisJX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKKworCS8qIFNldCBqaXR0ZXIgY29ycmVjdGlvbiAqLworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJCXYgJj0gfmRkLT5mcmVxc2VsX21hc2s7CisJCXYgfD0gZnJlcXNlbCA8PCBfX2ZmcyhkZC0+ZnJlcXNlbF9tYXNrKTsKKwkJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7CisJfQorCisJLyogU2V0IERQTEwgbXVsdGlwbGllciwgZGl2aWRlciAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7CisJdiAmPSB+KGRkLT5tdWx0X21hc2sgfCBkZC0+ZGl2MV9tYXNrKTsKKwl2IHw9IG0gPDwgX19mZnMoZGQtPm11bHRfbWFzayk7CisJdiB8PSAobiAtIDEpIDw8IF9fZmZzKGRkLT5kaXYxX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+bXVsdF9kaXYxX3JlZyk7CisKKwkvKiBXZSBsZXQgdGhlIGNsb2NrIGZyYW1ld29yayBzZXQgdGhlIG90aGVyIG91dHB1dCBkaXZpZGVycyBsYXRlciAqLworCisJLyogUkVWSVNJVDogU2V0IHJhbXAtdXAgZGVsYXk/ICovCisKKwlfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSAtIHNldCBub24tY29yZSBEUExMIHJhdGUKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBEUExMIHRvIHNldAorICogQHJhdGU6IHJvdW5kZWQgdGFyZ2V0IHJhdGUKKyAqCisgKiBTZXQgdGhlIERQTEwgQ0xLT1VUIHRvIHRoZSB0YXJnZXQgcmF0ZS4gIElmIHRoZSBEUExMIGNhbiBlbnRlcgorICogbG93LXBvd2VyIGJ5cGFzcywgYW5kIHRoZSB0YXJnZXQgcmF0ZSBpcyB0aGUgYnlwYXNzIHNvdXJjZSBjbG9jaworICogcmF0ZSwgdGhlbiBjb25maWd1cmUgdGhlIERQTEwgZm9yIGJ5cGFzcy4gIE90aGVyd2lzZSwgcm91bmQgdGhlCisgKiB0YXJnZXQgcmF0ZSBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGFscmVhZHksIHRoZW4gcHJvZ3JhbSBhbmQgbG9jaworICogdGhlIERQTEwuICBSZXR1cm5zIC1FSU5WQUwgdXBvbiBlcnJvciwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGNsayAqbmV3X3BhcmVudCA9IE5VTEw7CisJdTE2IGZyZXFzZWwgPSAwOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCWludCByZXQ7CisKKwlpZiAoIWNsayB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJhdGUgPT0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRW5zdXJlIGJvdGggdGhlIGJ5cGFzcyBhbmQgcmVmIGNsb2NrcyBhcmUgZW5hYmxlZCBwcmlvciB0bworCSAqIGRvaW5nIGFueXRoaW5nOyB3ZSBuZWVkIHRoZSBieXBhc3MgY2xvY2sgcnVubmluZyB0byByZXByb2dyYW0KKwkgKiB0aGUgRFBMTC4KKwkgKi8KKwlvbWFwMl9jbGtfZW5hYmxlKGRkLT5jbGtfYnlwYXNzKTsKKwlvbWFwMl9jbGtfZW5hYmxlKGRkLT5jbGtfcmVmKTsKKworCWlmIChkZC0+Y2xrX2J5cGFzcy0+cmF0ZSA9PSByYXRlICYmCisJICAgIChjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpKSkgeworCQlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBzZXQgcmF0ZTogZW50ZXJpbmcgYnlwYXNzLlxuIiwgY2xrLT5uYW1lKTsKKworCQlyZXQgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOworCQlpZiAoIXJldCkKKwkJCW5ld19wYXJlbnQgPSBkZC0+Y2xrX2J5cGFzczsKKwl9IGVsc2UgeworCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlICE9IHJhdGUpCisJCQlvbWFwMl9kcGxsX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKKworCQlpZiAoZGQtPmxhc3Rfcm91bmRlZF9yYXRlID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBObyBmcmVxc2VsIG9uIE9NQVA0ICovCisJCWlmICghY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCWZyZXFzZWwgPSBfb21hcDNfZHBsbF9jb21wdXRlX2ZyZXFzZWwoY2xrLAorCQkJCQkJZGQtPmxhc3Rfcm91bmRlZF9uKTsKKwkJCWlmICghZnJlcXNlbCkKKwkJCQlXQVJOX09OKDEpOworCQl9CisKKwkJcHJfZGVidWcoImNsb2NrOiAlczogc2V0IHJhdGU6IGxvY2tpbmcgcmF0ZSB0byAlbHUuXG4iLAorCQkJIGNsay0+bmFtZSwgcmF0ZSk7CisKKwkJcmV0ID0gb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oY2xrLCBkZC0+bGFzdF9yb3VuZGVkX20sCisJCQkJCQkgZGQtPmxhc3Rfcm91bmRlZF9uLCBmcmVxc2VsKTsKKwkJaWYgKCFyZXQpCisJCQluZXdfcGFyZW50ID0gZGQtPmNsa19yZWY7CisJfQorCWlmICghcmV0KSB7CisJCS8qCisJCSAqIFN3aXRjaCB0aGUgcGFyZW50IGNsb2NrIGluIHRoZSBoZWlyYXJjaHksIGFuZCBtYWtlIHN1cmUKKwkJICogdGhhdCB0aGUgbmV3IHBhcmVudCdzIHVzZWNvdW50IGlzIGNvcnJlY3QuICBOb3RlOiB3ZQorCQkgKiBlbmFibGUgdGhlIG5ldyBwYXJlbnQgYmVmb3JlIGRpc2FibGluZyB0aGUgb2xkIHRvIGF2b2lkCisJCSAqIGFueSB1bm5lY2Vzc2FyeSBoYXJkd2FyZSBkaXNhYmxlLT5lbmFibGUgdHJhbnNpdGlvbnMuCisJCSAqLworCQlpZiAoY2xrLT51c2Vjb3VudCkgeworCQkJb21hcDJfY2xrX2VuYWJsZShuZXdfcGFyZW50KTsKKwkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwkJfQorCQljbGtfcmVwYXJlbnQoY2xrLCBuZXdfcGFyZW50KTsKKwkJY2xrLT5yYXRlID0gcmF0ZTsKKwl9CisJb21hcDJfY2xrX2Rpc2FibGUoZGQtPmNsa19yZWYpOworCW9tYXAyX2Nsa19kaXNhYmxlKGRkLT5jbGtfYnlwYXNzKTsKKworCXJldHVybiAwOworfQorCisvKiBEUExMIGF1dG9pZGxlIHJlYWQvc2V0IGNvZGUgKi8KKworLyoqCisgKiBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQgLSByZWFkIGEgRFBMTCdzIGF1dG9pZGxlIGJpdHMKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byByZWFkCisgKgorICogUmV0dXJuIHRoZSBEUExMJ3MgYXV0b2lkbGUgYml0cywgc2hpZnRlZCBkb3duIHRvIGJpdCAwLiAgUmV0dXJucworICogLUVJTlZBTCBpZiBwYXNzZWQgYSBudWxsIHBvaW50ZXIgb3IgaWYgdGhlIHN0cnVjdCBjbGsgZG9lcyBub3QKKyAqIGFwcGVhciB0byByZWZlciB0byBhIERQTEwuCisgKi8KK3UzMiBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoc3RydWN0IGNsayAqY2xrKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUzMiB2OworCisJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSBkZC0+YXV0b2lkbGVfbWFzazsKKwl2ID4+PSBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7CisKKwlyZXR1cm4gdjsKK30KKworLyoqCisgKiBvbWFwM19kcGxsX2FsbG93X2lkbGUgLSBlbmFibGUgRFBMTCBhdXRvaWRsZSBiaXRzCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgorICoKKyAqIEVuYWJsZSBEUExMIGF1dG9tYXRpYyBpZGxlIGNvbnRyb2wuICBUaGlzIGF1dG9tYXRpYyBpZGxlIG1vZGUKKyAqIHN3aXRjaGluZyB0YWtlcyBlZmZlY3Qgb25seSB3aGVuIHRoZSBEUExMIGlzIGxvY2tlZCwgYXQgbGVhc3Qgb24KKyAqIE9NQVAzNDMwLiAgVGhlIERQTEwgd2lsbCBlbnRlciBsb3ctcG93ZXIgc3RvcCB3aGVuIGl0cyBkb3duc3RyZWFtCisgKiBjbG9ja3MgYXJlIGdhdGVkLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIG9tYXAzX2RwbGxfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CisKKwlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCisJCXJldHVybjsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwkvKgorCSAqIFJFVklTSVQ6IENPUkUgRFBMTCBjYW4gb3B0aW9uYWxseSBlbnRlciBsb3ctcG93ZXIgYnlwYXNzCisJICogYnkgd3JpdGluZyAweDUgaW5zdGVhZCBvZiAweDEuICBBZGQgc29tZSBtZWNoYW5pc20gdG8KKwkgKiBvcHRpb25hbGx5IGVudGVyIHRoaXMgbW9kZS4KKwkgKi8KKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7CisJdiB8PSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmF1dG9pZGxlX3JlZyk7Cit9CisKKy8qKgorICogb21hcDNfZHBsbF9kZW55X2lkbGUgLSBwcmV2ZW50IERQTEwgZnJvbSBhdXRvbWF0aWNhbGx5IGlkbGluZworICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KKyAqCisgKiBEaXNhYmxlIERQTEwgYXV0b21hdGljIGlkbGUgY29udHJvbC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwM19kcGxsX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CisKKwlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCisJCXJldHVybjsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7CisJdiB8PSBEUExMX0FVVE9JRExFX0RJU0FCTEUgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKKworfQorCisvKiBDbG9jayBjb250cm9sIGZvciBEUExMIG91dHB1dHMgKi8KKworLyoqCisgKiBvbWFwM19jbGtvdXR4Ml9yZWNhbGMgLSByZWNhbGN1bGF0ZSBEUExMIFgyIG91dHB1dCB2aXJ0dWFsIGNsb2NrIHJhdGUKKyAqIEBjbGs6IERQTEwgb3V0cHV0IHN0cnVjdCBjbGsKKyAqCisgKiBVc2luZyBwYXJlbnQgY2xvY2sgRFBMTCBkYXRhLCBsb29rIHVwIERQTEwgc3RhdGUuICBJZiBsb2NrZWQsIHNldCBvdXIKKyAqIHJhdGUgdG8gdGhlIGRwbGxfY2xrICogMjsgb3RoZXJ3aXNlLCBqdXN0IHVzZSBkcGxsX2Nsay4KKyAqLwordW5zaWduZWQgbG9uZyBvbWFwM19jbGtvdXR4Ml9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwl1MzIgdjsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCisJLyogV2FsayB1cCB0aGUgcGFyZW50cyBvZiBjbGssIGxvb2tpbmcgZm9yIGEgRFBMTCAqLworCXBjbGsgPSBjbGstPnBhcmVudDsKKwl3aGlsZSAocGNsayAmJiAhcGNsay0+ZHBsbF9kYXRhKQorCQlwY2xrID0gcGNsay0+cGFyZW50OworCisJLyogY2xrIGRvZXMgbm90IGhhdmUgYSBEUExMIGFzIGEgcGFyZW50PyAqLworCVdBUk5fT04oIXBjbGspOworCisJZGQgPSBwY2xrLT5kcGxsX2RhdGE7CisKKwlXQVJOX09OKCFkZC0+ZW5hYmxlX21hc2spOworCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZykgJiBkZC0+ZW5hYmxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKwlpZiAodiAhPSBPTUFQM1hYWF9FTl9EUExMX0xPQ0tFRCkKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCWVsc2UKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlICogMjsKKwlyZXR1cm4gcmF0ZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1zbWM5MXguYwppbmRleCA2MDgzZTIxLi44NzdjNmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtc21jOTF4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLXNtYzkxeC5jCkBAIC0zMywxNyArMzMsMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIGdwbWNfc21jOTF4X2luZm8gPSB7Ci0JLmZsYWdzICA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX0lPX1NISUZUXzAsCisJLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfSU9fU0hJRlRfMCwKKwkubGVkYQk9IFJQQ19MRURfMTAwXzEwLAorCS5sZWRiCT0gUlBDX0xFRF9UWF9SWCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGdwbWNfc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGdwbWNfc21jOTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gZ3BtY19zbWM5MXhfcmVzb3VyY2VzLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YSA9ICZncG1jX3NtYzkxeF9pbmZvLAogCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGdwbWNfc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZ3BtY19zbWM5MXhfcmVzb3VyY2VzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggZTg2ZjVjYS4uYmQ4Y2I1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTUxNyw3ICs1MTcsNyBAQAogCQljayA9ICJncG1jX2ZjayI7CiAJCWwgPSBPTUFQMzRYWF9HUE1DX0JBU0U7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQljayA9ICJncG1jX2ZjayI7CisJCWNrID0gImdwbWNfY2siOwogCQlsID0gT01BUDQ0WFhfR1BNQ19CQVNFOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pMmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5Y2E4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIEhlbHBlciBtb2R1bGUgZm9yIGJvYXJkIHNwZWNpZmljIEkyQyBidXMgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKyNpbmNsdWRlIDxwbGF0L211eC5oPgorCisjaW5jbHVkZSAibXV4LmgiCisKK2ludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCisJCQkgIHVuc2lnbmVkIGxlbikKK3sKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJY29uc3QgaW50IG9tYXAyNHh4X3BpbnNbXVsyXSA9IHsKKwkJCXsgTTE5XzI0WFhfSTJDMV9TQ0wsIEwxNV8yNFhYX0kyQzFfU0RBIH0sCisJCQl7IEoxNV8yNFhYX0kyQzJfU0NMLCBIMTlfMjRYWF9JMkMyX1NEQSB9LAorCQl9OworCQlpbnQgc2NsLCBzZGE7CisKKwkJc2NsID0gb21hcDI0eHhfcGluc1tidXNfaWQgLSAxXVswXTsKKwkJc2RhID0gb21hcDI0eHhfcGluc1tidXNfaWQgLSAxXVsxXTsKKwkJb21hcF9jZmdfcmVnKHNkYSk7CisJCW9tYXBfY2ZnX3JlZyhzY2wpOworCX0KKworCS8qIEZpcnN0IEkyQyBidXMgaXMgbm90IG11eGFibGUgKi8KKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYgYnVzX2lkID4gMSkgeworCQljaGFyIG11eF9uYW1lW3NpemVvZigiaTJjMl9zY2wuaTJjMl9zY2wiKV07CisKKwkJc3ByaW50ZihtdXhfbmFtZSwgImkyYyVpX3NjbC5pMmMlaV9zY2wiLCBidXNfaWQsIGJ1c19pZCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKG11eF9uYW1lLCBPTUFQX1BJTl9JTlBVVCk7CisJCXNwcmludGYobXV4X25hbWUsICJpMmMlaV9zZGEuaTJjJWlfc2RhIiwgYnVzX2lkLCBidXNfaWQpOworCQlvbWFwX211eF9pbml0X3NpZ25hbChtdXhfbmFtZSwgT01BUF9QSU5fSU5QVVQpOworCX0KKworCXJldHVybiBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyhidXNfaWQsIGNsa3JhdGUsIGluZm8sIGxlbik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggZjQ4YTRiMi4uYTA5MWI1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtMjQ2LDYgKzI0NiwzMSBAQAogCX0KIH0KIAordm9pZCBfX2luaXQgb21hcDRfY2hlY2tfcmV2aXNpb24odm9pZCkKK3sKKwl1MzIgaWRjb2RlOworCXUxNiBoYXdrZXllOworCXU4IHJldjsKKwljaGFyICpyZXZfbmFtZSA9ICJFUzEuMCI7CisKKwkvKgorCSAqIFRoZSBJQyByZXYgZGV0ZWN0aW9uIGlzIGRvbmUgd2l0aCBoYXdrZXllIGFuZCByZXYuCisJICogTm90ZSB0aGF0IHJldiBkb2VzIG5vdCBtYXAgZGlyZWN0bHkgdG8gZGVmaW5lZCBwcm9jZXNzb3IKKwkgKiByZXZpc2lvbiBudW1iZXJzIGFzIEVTMS4wIHVzZXMgdmFsdWUgMC4KKwkgKi8KKwlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKKwloYXdrZXllID0gKGlkY29kZSA+PiAxMikgJiAweGZmZmY7CisJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweGZmOworCisJaWYgKChoYXdrZXllID09IDB4Yjg1MikgJiYgKHJldiA9PSAweDApKSB7CisJCW9tYXBfcmV2aXNpb24gPSBPTUFQNDQzMF9SRVZfRVMxXzA7CisJCXByX2luZm8oIk9NQVAlMDR4ICVzXG4iLCBvbWFwX3JldigpID4+IDE2LCByZXZfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9lcnIoIlVua25vd24gT01BUDQgQ1BVIGlkXG4iKTsKK30KKwogI2RlZmluZSBPTUFQM19TSE9XX0ZFQVRVUkUoZmVhdCkJCVwKIAlpZiAob21hcDNfaGFzXyAjI2ZlYXQoKSkJCVwKIAkJcHJpbnRrKCNmZWF0IiAiKTsKQEAgLTI3NywxMCArMzAyLDEwIEBACiAJfSBlbHNlIGlmIChvbWFwM19oYXNfaXZhKCkgJiYgb21hcDNfaGFzX3NneCgpKSB7CiAJCS8qIE9NQVAzNDMwLCBPTUFQMzUyNSwgT01BUDM1MTUsIE9NQVAzNTAzIGRldmljZXMgKi8KIAkJc3RyY3B5KGNwdV9uYW1lLCAiT01BUDM0MzAvMzUzMCIpOwotCX0gZWxzZSBpZiAob21hcDNfaGFzX3NneCgpKSB7CisJfSBlbHNlIGlmIChvbWFwM19oYXNfaXZhKCkpIHsKIAkJb21hcF9yZXZpc2lvbiA9IE9NQVAzNTI1X1JFVihyZXYpOwogCQlzdHJjcHkoY3B1X25hbWUsICJPTUFQMzUyNSIpOwotCX0gZWxzZSBpZiAob21hcDNfaGFzX2l2YSgpKSB7CisJfSBlbHNlIGlmIChvbWFwM19oYXNfc2d4KCkpIHsKIAkJb21hcF9yZXZpc2lvbiA9IE9NQVAzNTE1X1JFVihyZXYpOwogCQlzdHJjcHkoY3B1X25hbWUsICJPTUFQMzUxNSIpOwogCX0gZWxzZSB7CkBAIC0zMzYsNyArMzYxLDcgQEAKIAkJb21hcDNfY2hlY2tfZmVhdHVyZXMoKTsKIAkJb21hcDNfY3B1aW5mbygpOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRklYTUU6IENQVSByZXZpc2lvbiA9IE9NQVA0NDMwXG4iKTsKKwkJb21hcDRfY2hlY2tfcmV2aXNpb24oKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCXByX2VycigiT01BUCByZXZpc2lvbiB1bmtub3duLCBwbGVhc2UgZml4IVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggNmE0ZDhlNC4uYTg3NDllOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMzMsOSArMzMsOSBAQAogI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L3ZyYW0uaD4KIAotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAkvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBjbGtkZXYgaXMgcmVhZHkgKi8KICNpbmNsdWRlICJjbG9jay5oIgogCiAjaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+CkBAIC00NCw3ICs0NCw2IEBACiAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CiAjaW5jbHVkZSAiY2xvY2tkb21haW5zLmgiCi0jZW5kaWYKICNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KICNpbmNsdWRlICJvbWFwX2h3bW9kXzI0MjAuaCIKICNpbmNsdWRlICJvbWFwX2h3bW9kXzI0MzAuaCIKQEAgLTMyMSw4ICszMjAsOCBAQAogCW9tYXBfcG1faWZfZWFybHlfaW5pdChtcHVfb3BwcywgZHNwX29wcHMsIGwzX29wcHMpOwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKLQlvbWFwMl9jbGtfaW5pdCgpOwogI2VuZGlmCisJb21hcDJfY2xrX2luaXQoKTsKIAlvbWFwX3NlcmlhbF9lYXJseV9pbml0KCk7CiAjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0CiAJb21hcF9od21vZF9sYXRlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IGMxOGE5NGUuLmUwNzFiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMjcsMTkgKzI3LDUyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogCi0jaWZkZWYgQ09ORklHX09NQVBfTVVYCisjaW5jbHVkZSAibXV4LmgiCisKKyNkZWZpbmUgT01BUF9NVVhfQkFTRV9PRkZTRVQJCTB4MzAJLyogT2Zmc2V0IGZyb20gQ1RSTF9CQVNFICovCisjZGVmaW5lIE9NQVBfTVVYX0JBU0VfU1oJCTB4NWNhCisKK3N0cnVjdCBvbWFwX211eF9lbnRyeSB7CisJc3RydWN0IG9tYXBfbXV4CQltdXg7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXV4X3BoeXM7CitzdGF0aWMgdm9pZCBfX2lvbWVtICptdXhfYmFzZTsKKworc3RhdGljIGlubGluZSB1MTYgb21hcF9tdXhfcmVhZCh1MTYgcmVnKQoreworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuIF9fcmF3X3JlYWRiKG11eF9iYXNlICsgcmVnKTsKKwllbHNlCisJCXJldHVybiBfX3Jhd19yZWFkdyhtdXhfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX211eF93cml0ZSh1MTYgdmFsLCB1MTYgcmVnKQoreworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJX19yYXdfd3JpdGViKHZhbCwgbXV4X2Jhc2UgKyByZWcpOworCWVsc2UKKwkJX19yYXdfd3JpdGV3KHZhbCwgbXV4X2Jhc2UgKyByZWcpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIGFyY2hfbXV4X2NmZzsKIAogLyogTk9URTogU2VlIG11eC5oIGZvciB0aGUgZW51bWVyYXRpb24gKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCiBzdGF0aWMgc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDI0eHhfcGluc1tdID0gewogLyoKICAqCWRlc2NyaXB0aW9uCQkJbXV4CW11eAlwdWxsCXB1bGwJZGVidWcKQEAgLTI0OSwzNDIgKzI4MiwxNCBAQAogCiAjZGVmaW5lIE9NQVAyNFhYX1BJTlNfU1oJQVJSQVlfU0laRShvbWFwMjR4eF9waW5zKQogCi0jZWxzZQotI2RlZmluZSBvbWFwMjR4eF9waW5zCQlOVUxMCi0jZGVmaW5lIE9NQVAyNFhYX1BJTlNfU1oJMAotI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAyNFhYICovCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAotc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAzNHh4X3BpbnNbXSA9IHsKLS8qCi0gKgkJTmFtZSwgcmVnLW9mZnNldCwKLSAqCQltdXgtbW9kZSB8IFthY3RpdmUtbW9kZSB8IG9mZi1tb2RlXQotICovCi0KLS8qIDM0eHggSTJDICovCi1NVVhfQ0ZHXzM0WFgoIksyMV8zNFhYX0kyQzFfU0NMIiwgMHgxYmEsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkoyMV8zNFhYX0kyQzFfU0RBIiwgMHgxYmMsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFGMTVfMzRYWF9JMkMyX1NDTCIsIDB4MWJlLAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBRTE1XzM0WFhfSTJDMl9TREEiLCAweDFjMCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUYxNF8zNFhYX0kyQzNfU0NMIiwgMHgxYzIsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFHMTRfMzRYWF9JMkMzX1NEQSIsIDB4MWM0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBRDI2XzM0WFhfSTJDNF9TQ0wiLCAweGEwMCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUUyNl8zNFhYX0kyQzRfU0RBIiwgMHhhMDIsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi0KLS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCi1NVVhfQ0ZHXzM0WFgoIlk4XzM0MzBfVVNCMUhTX1BIWV9DTEsiLCAweDVkYSwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKLU1VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfUEhZX1NUUCIsIDB4NWQ4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1BIWV9ESVIiLCAweDVlYywKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQiLCAweDVlZSwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfUEhZX0QwIiwgMHg1ZGMsCi0JCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1BIWV9EMSIsIDB4NWRlLAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19QSFlfRDIiLCAweDVlMCwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfUEhZX0QzIiwgMHg1ZWEsCi0JCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfUEhZX0Q0IiwgMHg1ZTQsCi0JCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1BIWV9ENSIsIDB4NWU2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1BIWV9ENiIsIDB4NWU4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19QSFlfRDciLCAweDVlMiwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotCi0vKiBQSFkgLSBIU1VTQjogMTItcGluIFVMUEkgUEhZOiBQb3J0IDIqLwotTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfUEhZX0NMSyIsIDB4NWYwLAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJBQTEwXzM0MzBfVVNCMkhTX1BIWV9TVFAiLCAweDVmMiwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKLU1VWF9DRkdfMzRYWCgiQUE5XzM0MzBfVVNCMkhTX1BIWV9ESVIiLCAweDVmNCwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBQjExXzM0MzBfVVNCMkhTX1BIWV9OWFQiLCAweDVmNiwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBQjEwXzM0MzBfVVNCMkhTX1BIWV9EMCIsIDB4NWY4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFCOV8zNDMwX1VTQjJIU19QSFlfRDEiLCAweDVmYSwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJIU19QSFlfRDIiLCAweDFkNCwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJUNF8zNDMwX1VTQjJIU19QSFlfRDMiLCAweDFkZSwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJUM18zNDMwX1VTQjJIU19QSFlfRDQiLCAweDFkOCwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJSM18zNDMwX1VTQjJIU19QSFlfRDUiLCAweDFkYSwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJSNF8zNDMwX1VTQjJIU19QSFlfRDYiLCAweDFkYywKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJUMl8zNDMwX1VTQjJIU19QSFlfRDciLCAweDFkNiwKLQkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotCi0vKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLwotTVVYX0NGR18zNFhYKCJZOF8zNDMwX1VTQjFIU19UTExfQ0xLIiwgMHg1ZGEsCi0JCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfVExMX1NUUCIsIDB4NWQ4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIiLCAweDVlYywKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1RMTF9OWFQiLCAweDVlZSwKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfVExMX0QwIiwgMHg1ZGMsCi0JCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1RMTF9EMSIsIDB4NWRlLAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19UTExfRDIiLCAweDVlMCwKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfVExMX0QzIiwgMHg1ZWEsCi0JCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfVExMX0Q0IiwgMHg1ZTQsCi0JCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1RMTF9ENSIsIDB4NWU2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1RMTF9ENiIsIDB4NWU4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19UTExfRDciLCAweDVlMiwKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotCi0vKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLwotTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfVExMX0NMSyIsIDB4NWYwLAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCIsIDB4NWYyLAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBQTlfMzQzMF9VU0IySFNfVExMX0RJUiIsIDB4NWY0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFCMTFfMzQzMF9VU0IySFNfVExMX05YVCIsIDB4NWY2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFCMTBfMzQzMF9VU0IySFNfVExMX0QwIiwgMHg1ZjgsCi0JCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkhTX1RMTF9EMSIsIDB4NWZhLAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlczXzM0MzBfVVNCMkhTX1RMTF9EMiIsIDB4MWQ0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlQ0XzM0MzBfVVNCMkhTX1RMTF9EMyIsIDB4MWRlLAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlQzXzM0MzBfVVNCMkhTX1RMTF9ENCIsIDB4MWQ4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlIzXzM0MzBfVVNCMkhTX1RMTF9ENSIsIDB4MWRhLAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlI0XzM0MzBfVVNCMkhTX1RMTF9ENiIsIDB4MWRjLAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlQyXzM0MzBfVVNCMkhTX1RMTF9ENyIsIDB4MWQ2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi0KLS8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCi1NVVhfQ0ZHXzM0WFgoIkFBNl8zNDMwX1VTQjNIU19UTExfQ0xLIiwgMHgxODAsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAiLCAweDE2NiwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIiLCAweDE2OCwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJZM18zNDMwX1VTQjNIU19UTExfTlhUIiwgMHgxNmEsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUE1XzM0MzBfVVNCM0hTX1RMTF9EMCIsIDB4MTg2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlk0XzM0MzBfVVNCM0hTX1RMTF9EMSIsIDB4MTg0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlk1XzM0MzBfVVNCM0hTX1RMTF9EMiIsIDB4MTg4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlc1XzM0MzBfVVNCM0hTX1RMTF9EMyIsIDB4MThhLAotCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFCMTJfMzQzMF9VU0IzSFNfVExMX0Q0IiwgMHgxNmMsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUIxM18zNDMwX1VTQjNIU19UTExfRDUiLCAweDE2ZSwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBQTEzXzM0MzBfVVNCM0hTX1RMTF9ENiIsIDB4MTcwLAotCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFBMTJfMzQzMF9VU0IzSFNfVExMX0Q3IiwgMHgxNzIsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLQotLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KLU1VWF9DRkdfMzRYWCgiQUYxMF8zNDMwX1VTQjFGU19QSFlfTU0xX1JYRFAiLCAweDVkOCwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNIiwgMHg1ZWUsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiVzEzXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhSQ1YiLCAweDVkYywKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJXMTJfMzQzMF9VU0IxRlNfUEhZX01NMV9UWFNFMCIsIDB4NWRlLAotCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFUIiwgMHg1ZTAsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiWTExXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhFTl9OIiwgMHg1ZWEsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCi0KLS8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCi1NVVhfQ0ZHXzM0WFgoIkFGN18zNDMwX1VTQjJGU19QSFlfTU0yX1JYRFAiLCAweDVmMiwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNIiwgMHg1ZjYsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUIxMF8zNDMwX1VTQjJGU19QSFlfTU0yX1JYUkNWIiwgMHg1ZjgsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhTRTAiLCAweDVmYSwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFUIiwgMHgxZDQsCi0JCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiVDRfMzQzMF9VU0IyRlNfUEhZX01NMl9UWEVOX04iLCAweDFkZSwKLQkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX09VVFBVVCkKLQotLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KLU1VWF9DRkdfMzRYWCgiQUgzXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhEUCIsIDB4MTY2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0iLCAweDE2YSwKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBRDFfMzQzMF9VU0IzRlNfUEhZX01NM19SWFJDViIsIDB4MTg2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkFFMV8zNDMwX1VTQjNGU19QSFlfTU0zX1RYU0UwIiwgMHgxODQsCi0JCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKLU1VWF9DRkdfMzRYWCgiQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQiLCAweDE4OCwKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQotTVVYX0NGR18zNFhYKCJBQzFfMzQzMF9VU0IzRlNfUEhZX01NM19UWEVOX04iLCAweDE4YSwKLQkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX09VVFBVVCkKLQotCi0vKiAzNFhYIEdQSU8gLSBiaWRpcmVjdGlvbmFsLCB1bmxlc3MgdGhlIG5hbWUgaGFzIGFuICJfT1VUIiBzdWZmaXguCi0gKiAoQWx3YXlzIHNwZWNpZnkgUElOX0lOUFVULCBleGNlcHQgZm9yIG5hbWVzIHN1ZmZpeGVkIGJ5ICJfT1VUIi4pCi0gKiBObyBpbnRlcm5hbCBwdWxsdXAvcHVsbGRvd24gd2l0aG91dCAiX1VQIiBvciAiX0RPV04iIHN1ZmZpeC4KLSAqLwotTVVYX0NGR18zNFhYKCJBRjI2XzM0WFhfR1BJTzAiLCAweDFlMCwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQotTVVYX0NGR18zNFhYKCJBRjIyXzM0WFhfR1BJTzkiLCAweGExOCwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQotTVVYX0NGR18zNFhYKCJBRzlfMzRYWF9HUElPMjMiLCAweDVlZSwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQotTVVYX0NGR18zNFhYKCJBSDhfMzRYWF9HUElPMjkiLCAweDVmYSwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQotTVVYX0NGR18zNFhYKCJVOF8zNFhYX0dQSU81NF9PVVQiLCAweDBiNCwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX09VVFBVVCkKLU1VWF9DRkdfMzRYWCgiVThfMzRYWF9HUElPNTRfRE9XTiIsIDB4MGI0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCi1NVVhfQ0ZHXzM0WFgoIkw4XzM0WFhfR1BJTzYzIiwgMHgwY2UsCi0JCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVCkKLU1VWF9DRkdfMzRYWCgiRzI1XzM0WFhfR1BJTzg2X09VVCIsIDB4MGZjLAotCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJBRzRfMzRYWF9HUElPMTM0X09VVCIsIDB4MTYwLAotCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJBRjRfMzRYWF9HUElPMTM1X09VVCIsIDB4MTYyLAotCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJBRTRfMzRYWF9HUElPMTM2X09VVCIsIDB4MTY0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJBRjZfMzRYWF9HUElPMTQwX1VQIiwgMHgxNmMsCi0JCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFFNl8zNFhYX0dQSU8xNDEiLCAweDE2ZSwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQotTVVYX0NGR18zNFhYKCJBRjVfMzRYWF9HUElPMTQyIiwgMHgxNzAsCi0JCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVCkKLU1VWF9DRkdfMzRYWCgiQUU1XzM0WFhfR1BJTzE0MyIsIDB4MTcyLAotCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCi1NVVhfQ0ZHXzM0WFgoIkgxOV8zNFhYX0dQSU8xNjRfT1VUIiwgMHgxOWMsCi0JCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCi1NVVhfQ0ZHXzM0WFgoIkoyNV8zNFhYX0dQSU8xNzAiLCAweDFjNiwKLQkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQotCi0vKiBPTUFQMyBTRFJDIENLRSBzaWduYWxzIHRvIFNEUi9ERFIgcmFtIGNoaXBzICovCi1NVVhfQ0ZHXzM0WFgoIkgxNl8zNFhYX1NEUkNfQ0tFMCIsIDB4MjYyLAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQotTVVYX0NGR18zNFhYKCJIMTdfMzRYWF9TRFJDX0NLRTEiLCAweDI2NCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX09VVFBVVCkKLQotLyogTU1DMSAqLwotTVVYX0NGR18zNFhYKCJOMjhfMzQzMF9NTUMxX0NMSyIsIDB4MTQ0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJNMjdfMzQzMF9NTUMxX0NNRCIsIDB4MTQ2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJOMjdfMzQzMF9NTUMxX0RBVDAiLCAweDE0OCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiTjI2XzM0MzBfTU1DMV9EQVQxIiwgMHgxNGEsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIk4yNV8zNDMwX01NQzFfREFUMiIsIDB4MTRjLAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJQMjhfMzQzMF9NTUMxX0RBVDMiLCAweDE0ZSwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiUDI3XzM0MzBfTU1DMV9EQVQ0IiwgMHgxNTAsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIlAyNl8zNDMwX01NQzFfREFUNSIsIDB4MTUyLAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJSMjdfMzQzMF9NTUMxX0RBVDYiLCAweDE1NCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiUjI1XzM0MzBfTU1DMV9EQVQ3IiwgMHgxNTYsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi0KLS8qIE1NQzIgKi8KLU1VWF9DRkdfMzRYWCgiQUUyXzM0MzBfTU1DMl9DTEsiLCAweDE1OCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUc1XzM0MzBfTU1DMl9DTUQiLCAweDE1QSwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUg1XzM0MzBfTU1DMl9EQVQwIiwgMHgxNWMsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFINF8zNDMwX01NQzJfREFUMSIsIDB4MTVlLAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBRzRfMzQzMF9NTUMyX0RBVDIiLCAweDE2MCwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUY0XzM0MzBfTU1DMl9EQVQzIiwgMHgxNjIsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFFNF8zNDMwX01NQzJfREFUNCIsIDB4MTY0LAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBSDNfMzQzMF9NTUMyX0RBVDUiLCAweDE2NiwKLQkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLU1VWF9DRkdfMzRYWCgiQUYzXzM0MzBfTU1DMl9EQVQ2IiwgMHgxNjgsCi0JCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFFM18zNDMwX01NQzJfREFUNyIsIDB4MTZBLAotCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotCi0vKiBNTUMzICovCi1NVVhfQ0ZHXzM0WFgoIkFGMTBfMzQzMF9NTUMzX0NMSyIsIDB4NWQ4LAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBQzNfMzQzMF9NTUMzX0NNRCIsIDB4MWQwLAotCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBRTExXzM0MzBfTU1DM19EQVQwIiwgMHg1ZTQsCi0JCU9NQVAzNFhYX01VWF9NT0RFMiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFIOV8zNDMwX01NQzNfREFUMSIsIDB4NWU2LAotCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQotTVVYX0NGR18zNFhYKCJBRjEzXzM0MzBfTU1DM19EQVQyIiwgMHg1ZTgsCi0JCU9NQVAzNFhYX01VWF9NT0RFMiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFGMTNfMzQzMF9NTUMzX0RBVDMiLCAweDVlMiwKLQkJT01BUDM0WFhfTVVYX01PREUyIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLQotLyogU1lTX05JUlEgVDIgSU5UMSAqLwotTVVYX0NGR18zNFhYKCJBRjI2XzM0WFhfU1lTX05JUlEiLCAweDFFMCwKLQkJT01BUDNfV0FLRVVQX0VOIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCB8Ci0JCU9NQVAzNFhYX01VWF9NT0RFMCkKLS8qIEVIQ0kgR1BJTydzIG9uIE9NQVAzRVZNIChSZXYgPj0gRSkgKi8KLU1VWF9DRkdfMzRYWCgiQUgxNF8zNFhYX0dQSU8yMSIsIDB4NWVhLAotCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIkFGOV8zNFhYX0dQSU8yMiIsIDB4NWVjLAotCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCi1NVVhfQ0ZHXzM0WFgoIlUzXzM0WFhfR1BJTzYxIiwgMHgwYzgsCi0JT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKLX07Ci0KLSNkZWZpbmUgT01BUDM0WFhfUElOU19TWglBUlJBWV9TSVpFKG9tYXAzNHh4X3BpbnMpCi0KLSNlbHNlCi0jZGVmaW5lIG9tYXAzNHh4X3BpbnMJCU5VTEwKLSNkZWZpbmUgT01BUDM0WFhfUElOU19TWgkwCi0jZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDM0WFggKi8KLQogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYX0RFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX01VWF9XQVJOSU5HUykKKwogc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBvbWFwMl9jZmdfZGVidWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZywgdTE2IHJlZykKIHsKIAl1MTYgb3JpZzsKIAl1OCB3YXJuID0gMCwgZGVidWcgPSAwOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7Ci0JZWxzZQotCQlvcmlnID0gb21hcF9jdHJsX3JlYWR3KGNmZy0+bXV4X3JlZyk7CisJb3JpZyA9IG9tYXBfbXV4X3JlYWQoY2ZnLT5tdXhfcmVnIC0gT01BUF9NVVhfQkFTRV9PRkZTRVQpOwogCiAjaWZkZWYJQ09ORklHX09NQVBfTVVYX0RFQlVHCiAJZGVidWcgPSBjZmctPmRlYnVnOwpAQCAtNjAwLDcgKzMwNSw2IEBACiAjZGVmaW5lIG9tYXAyX2NmZ19kZWJ1Zyh4LCB5KQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKIHN0YXRpYyBpbnQgX19pbml0X29yX21vZHVsZSBvbWFwMjR4eF9jZmdfcmVnKGNvbnN0IHN0cnVjdCBwaW5fY29uZmlnICpjZmcpCiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhtdXhfc3Bpbl9sb2NrKTsKQEAgLTYxNCw0NyArMzE4LDY5MiBAQAogCWlmIChjZmctPnB1X3BkX3ZhbCkKIAkJcmVnIHw9IE9NQVAyX1BVTExfVVA7CiAJb21hcDJfY2ZnX2RlYnVnKGNmZywgcmVnKTsKLQlvbWFwX2N0cmxfd3JpdGViKHJlZywgY2ZnLT5tdXhfcmVnKTsKKwlvbWFwX211eF93cml0ZShyZWcsIGNmZy0+bXV4X3JlZyAtIE9NQVBfTVVYX0JBU0VfT0ZGU0VUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIG9tYXAyNHh4X2NmZ19yZWcJTlVMTAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAotc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIG9tYXAzNHh4X2NmZ19yZWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZykKLXsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTE2IHJlZyA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwotCXJlZyB8PSBjZmctPm11eF92YWw7Ci0Jb21hcDJfY2ZnX2RlYnVnKGNmZywgcmVnKTsKLQlvbWFwX2N0cmxfd3JpdGV3KHJlZywgY2ZnLT5tdXhfcmVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIG9tYXAzNHh4X2NmZ19yZWcJTlVMTAotI2VuZGlmCiAKIGludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKIHsKKwl1MzIgbXV4X3BiYXNlOworCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQltdXhfcGJhc2UgPSBPTUFQMjQyMF9DVFJMX0JBU0UgKyBPTUFQX01VWF9CQVNFX09GRlNFVDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJbXV4X3BiYXNlID0gT01BUDI0M1hfQ1RSTF9CQVNFICsgT01BUF9NVVhfQkFTRV9PRkZTRVQ7CisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11eF9iYXNlID0gaW9yZW1hcChtdXhfcGJhc2UsIE9NQVBfTVVYX0JBU0VfU1opOworCWlmICghbXV4X2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBpb3JlbWFwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWFyY2hfbXV4X2NmZy5waW5zCT0gb21hcDI0eHhfcGluczsKIAkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQMjRYWF9QSU5TX1NaOwogCQlhcmNoX211eF9jZmcuY2ZnX3JlZwk9IG9tYXAyNHh4X2NmZ19yZWc7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlhcmNoX211eF9jZmcucGlucwk9IG9tYXAzNHh4X3BpbnM7Ci0JCWFyY2hfbXV4X2NmZy5zaXplCT0gT01BUDM0WFhfUElOU19TWjsKLQkJYXJjaF9tdXhfY2ZnLmNmZ19yZWcJPSBvbWFwMzR4eF9jZmdfcmVnOworCisJCXJldHVybiBvbWFwX211eF9yZWdpc3RlcigmYXJjaF9tdXhfY2ZnKTsKIAl9CiAKLQlyZXR1cm4gb21hcF9tdXhfcmVnaXN0ZXIoJmFyY2hfbXV4X2NmZyk7CisJcmV0dXJuIDA7CiB9CiAKKyNlbHNlCitpbnQgX19pbml0IG9tYXAyX211eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogQ09ORklHX09NQVBfTVVYICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIExJU1RfSEVBRChtdXhtb2Rlcyk7CitzdGF0aWMgREVGSU5FX01VVEVYKG11eG1vZGVfbXV0ZXgpOworCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCisKK3N0YXRpYyBjaGFyICpvbWFwX211eF9vcHRpb25zOworCitpbnQgX19pbml0IG9tYXBfbXV4X2luaXRfZ3BpbyhpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgKmU7CisJaW50IGZvdW5kID0gMDsKKworCWlmICghZ3BpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZtdXhtb2Rlcywgbm9kZSkgeworCQlzdHJ1Y3Qgb21hcF9tdXggKm0gPSAmZS0+bXV4OworCQlpZiAoZ3BpbyA9PSBtLT5ncGlvKSB7CisJCQl1MTYgb2xkX21vZGU7CisJCQl1MTYgbXV4X21vZGU7CisKKwkJCW9sZF9tb2RlID0gb21hcF9tdXhfcmVhZChtLT5yZWdfb2Zmc2V0KTsKKwkJCW11eF9tb2RlID0gdmFsICYgfihPTUFQX01VWF9OUl9NT0RFUyAtIDEpOworCQkJbXV4X21vZGUgfD0gT01BUF9NVVhfTU9ERTQ7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibXV4OiBTZXR0aW5nIHNpZ25hbCAiCisJCQkJIiVzLmdwaW8laSAweCUwNHggLT4gMHglMDR4XG4iLAorCQkJCW0tPm11eG5hbWVzWzBdLCBncGlvLCBvbGRfbW9kZSwgbXV4X21vZGUpOworCQkJb21hcF9tdXhfd3JpdGUobXV4X21vZGUsIG0tPnJlZ19vZmZzZXQpOworCQkJZm91bmQrKzsKKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSAxKQorCQlyZXR1cm4gMDsKKworCWlmIChmb3VuZCA+IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IE11bHRpcGxlIGdwaW8gcGF0aHMgZm9yIGdwaW8laVxuIiwgZ3Bpbyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaW50ayhLRVJOX0VSUiAibXV4OiBDb3VsZCBub3Qgc2V0IGdwaW8laVxuIiwgZ3Bpbyk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworaW50IF9faW5pdCBvbWFwX211eF9pbml0X3NpZ25hbChjaGFyICptdXhuYW1lLCBpbnQgdmFsKQoreworCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZTsKKwljaGFyICptMF9uYW1lID0gTlVMTCwgKm1vZGVfbmFtZSA9IE5VTEw7CisJaW50IGZvdW5kID0gMDsKKworCW1vZGVfbmFtZSA9IHN0cmNocihtdXhuYW1lLCAnLicpOworCWlmIChtb2RlX25hbWUpIHsKKwkJKm1vZGVfbmFtZSA9ICdcMCc7CisJCW1vZGVfbmFtZSsrOworCQltMF9uYW1lID0gbXV4bmFtZTsKKwl9IGVsc2UgeworCQltb2RlX25hbWUgPSBtdXhuYW1lOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm11eG1vZGVzLCBub2RlKSB7CisJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CisJCWNoYXIgKm0wX2VudHJ5ID0gbS0+bXV4bmFtZXNbMF07CisJCWludCBpOworCisJCWlmIChtMF9uYW1lICYmIHN0cmNtcChtMF9uYW1lLCBtMF9lbnRyeSkpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgT01BUF9NVVhfTlJfTU9ERVM7IGkrKykgeworCQkJY2hhciAqbW9kZV9jdXIgPSBtLT5tdXhuYW1lc1tpXTsKKworCQkJaWYgKCFtb2RlX2N1cikKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFzdHJjbXAobW9kZV9uYW1lLCBtb2RlX2N1cikpIHsKKwkJCQl1MTYgb2xkX21vZGU7CisJCQkJdTE2IG11eF9tb2RlOworCisJCQkJb2xkX21vZGUgPSBvbWFwX211eF9yZWFkKG0tPnJlZ19vZmZzZXQpOworCQkJCW11eF9tb2RlID0gdmFsIHwgaTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAibXV4OiBTZXR0aW5nIHNpZ25hbCAiCisJCQkJCSIlcy4lcyAweCUwNHggLT4gMHglMDR4XG4iLAorCQkJCQltMF9lbnRyeSwgbXV4bmFtZSwgb2xkX21vZGUsIG11eF9tb2RlKTsKKwkJCQlvbWFwX211eF93cml0ZShtdXhfbW9kZSwgbS0+cmVnX29mZnNldCk7CisJCQkJZm91bmQrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSAxKQorCQlyZXR1cm4gMDsKKworCWlmIChmb3VuZCA+IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IE11bHRpcGxlIHNpZ25hbCBwYXRocyAoJWkpIGZvciAlc1xuIiwKKwkJCQlmb3VuZCwgbXV4bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaW50ayhLRVJOX0VSUiAibXV4OiBDb3VsZCBub3Qgc2V0IHNpZ25hbCAlc1xuIiwgbXV4bmFtZSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCisjZGVmaW5lIE9NQVBfTVVYX01BWF9OUl9GTEFHUwkxMAorI2RlZmluZSBPTUFQX01VWF9URVNUX0ZMQUcodmFsLCBtYXNrKQkJCQlcCisJaWYgKCgodmFsKSAmIChtYXNrKSkgPT0gKG1hc2spKSB7CQkJXAorCQlpKys7CQkJCQkJXAorCQlmbGFnc1tpXSA9ICAjbWFzazsJCQkJXAorCX0KKworLyogUkVWSVNJVDogQWRkIGNoZWNraW5nIGZvciBub24tb3B0aW1hbCBtdXggc2V0dGluZ3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX211eF9kZWNvZGUoc3RydWN0IHNlcV9maWxlICpzLCB1MTYgdmFsKQoreworCWNoYXIgKmZsYWdzW09NQVBfTVVYX01BWF9OUl9GTEFHU107CisJY2hhciBtb2RlWzE0XTsKKwlpbnQgaSA9IC0xOworCisJc3ByaW50Zihtb2RlLCAiT01BUF9NVVhfTU9ERSVkIiwgdmFsICYgMHg3KTsKKwlpKys7CisJZmxhZ3NbaV0gPSBtb2RlOworCisJT01BUF9NVVhfVEVTVF9GTEFHKHZhbCwgT01BUF9QSU5fT0ZGX1dBS0VVUEVOQUJMRSk7CisJaWYgKHZhbCAmIE9NQVBfT0ZGX0VOKSB7CisJCWlmICghKHZhbCAmIE9NQVBfT0ZGT1VUX0VOKSkgeworCQkJaWYgKCEodmFsICYgT01BUF9PRkZfUFVMTF9VUCkpIHsKKwkJCQlPTUFQX01VWF9URVNUX0ZMQUcodmFsLAorCQkJCQlPTUFQX1BJTl9PRkZfSU5QVVRfUFVMTERPV04pOworCQkJfSBlbHNlIHsKKwkJCQlPTUFQX01VWF9URVNUX0ZMQUcodmFsLAorCQkJCQlPTUFQX1BJTl9PRkZfSU5QVVRfUFVMTFVQKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKHZhbCAmIE9NQVBfT0ZGT1VUX1ZBTCkpIHsKKwkJCQlPTUFQX01VWF9URVNUX0ZMQUcodmFsLAorCQkJCQlPTUFQX1BJTl9PRkZfT1VUUFVUX0xPVyk7CisJCQl9IGVsc2UgeworCQkJCU9NQVBfTVVYX1RFU1RfRkxBRyh2YWwsCisJCQkJCU9NQVBfUElOX09GRl9PVVRQVVRfSElHSCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAodmFsICYgT01BUF9JTlBVVF9FTikgeworCQlpZiAodmFsICYgT01BUF9QVUxMX0VOQSkgeworCQkJaWYgKCEodmFsICYgT01BUF9QVUxMX1VQKSkgeworCQkJCU9NQVBfTVVYX1RFU1RfRkxBRyh2YWwsCisJCQkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJCX0gZWxzZSB7CisJCQkJT01BUF9NVVhfVEVTVF9GTEFHKHZhbCwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCU9NQVBfTVVYX1RFU1RfRkxBRyh2YWwsIE9NQVBfUElOX0lOUFVUKTsKKwkJfQorCX0gZWxzZSB7CisJCWkrKzsKKwkJZmxhZ3NbaV0gPSAiT01BUF9QSU5fT1VUUFVUIjsKKwl9CisKKwlkbyB7CisJCXNlcV9wcmludGYocywgIiVzIiwgZmxhZ3NbaV0pOworCQlpZiAoaSA+IDApCisJCQlzZXFfcHJpbnRmKHMsICIgfCAiKTsKKwl9IHdoaWxlIChpLS0gPiAwKTsKK30KKworI2RlZmluZSBPTUFQX01VWF9ERUZOQU1FX0xFTgkxNgorCitzdGF0aWMgaW50IG9tYXBfbXV4X2RiZ19ib2FyZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm11eG1vZGVzLCBub2RlKSB7CisJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CisJCWNoYXIgbTBfZGVmW09NQVBfTVVYX0RFRk5BTUVfTEVOXTsKKwkJY2hhciAqbTBfbmFtZSA9IG0tPm11eG5hbWVzWzBdOworCQl1MTYgdmFsOworCQlpbnQgaSwgbW9kZTsKKworCQlpZiAoIW0wX25hbWUpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgT01BUF9NVVhfREVGTkFNRV9MRU47IGkrKykgeworCQkJaWYgKG0wX25hbWVbaV0gPT0gJ1wwJykgeworCQkJCW0wX2RlZltpXSA9IG0wX25hbWVbaV07CisJCQkJYnJlYWs7CisJCQl9CisJCQltMF9kZWZbaV0gPSB0b3VwcGVyKG0wX25hbWVbaV0pOworCQl9CisJCXZhbCA9IG9tYXBfbXV4X3JlYWQobS0+cmVnX29mZnNldCk7CisJCW1vZGUgPSB2YWwgJiBPTUFQX01VWF9NT0RFNzsKKworCQlzZXFfcHJpbnRmKHMsICJPTUFQJWlfTVVYKCVzLCAiLAorCQkJCQljcHVfaXNfb21hcDM0eHgoKSA/IDMgOiAwLCBtMF9kZWYpOworCQlvbWFwX211eF9kZWNvZGUocywgdmFsKTsKKwkJc2VxX3ByaW50ZihzLCAiKSxcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfbXV4X2RiZ19ib2FyZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBvbWFwX211eF9kYmdfYm9hcmRfc2hvdywgJmlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWFwX211eF9kYmdfYm9hcmRfZm9wcyA9IHsKKwkub3BlbgkJPSBvbWFwX211eF9kYmdfYm9hcmRfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBvbWFwX211eF9kYmdfc2lnbmFsX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IG9tYXBfbXV4ICptID0gcy0+cHJpdmF0ZTsKKwljb25zdCBjaGFyICpub25lID0gIk5BIjsKKwl1MTYgdmFsOworCWludCBtb2RlOworCisJdmFsID0gb21hcF9tdXhfcmVhZChtLT5yZWdfb2Zmc2V0KTsKKwltb2RlID0gdmFsICYgT01BUF9NVVhfTU9ERTc7CisKKwlzZXFfcHJpbnRmKHMsICJuYW1lOiAlcy4lcyAoMHglMDhseC8weCUwM3ggPSAweCUwNHgpLCBiICVzLCB0ICVzXG4iLAorCQkJbS0+bXV4bmFtZXNbMF0sIG0tPm11eG5hbWVzW21vZGVdLAorCQkJbXV4X3BoeXMgKyBtLT5yZWdfb2Zmc2V0LCBtLT5yZWdfb2Zmc2V0LCB2YWwsCisJCQltLT5iYWxsc1swXSA/IG0tPmJhbGxzWzBdIDogbm9uZSwKKwkJCW0tPmJhbGxzWzFdID8gbS0+YmFsbHNbMV0gOiBub25lKTsKKwlzZXFfcHJpbnRmKHMsICJtb2RlOiAiKTsKKwlvbWFwX211eF9kZWNvZGUocywgdmFsKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNlcV9wcmludGYocywgInNpZ25hbHM6ICVzIHwgJXMgfCAlcyB8ICVzIHwgJXMgfCAlcyB8ICVzIHwgJXNcbiIsCisJCQltLT5tdXhuYW1lc1swXSA/IG0tPm11eG5hbWVzWzBdIDogbm9uZSwKKwkJCW0tPm11eG5hbWVzWzFdID8gbS0+bXV4bmFtZXNbMV0gOiBub25lLAorCQkJbS0+bXV4bmFtZXNbMl0gPyBtLT5tdXhuYW1lc1syXSA6IG5vbmUsCisJCQltLT5tdXhuYW1lc1szXSA/IG0tPm11eG5hbWVzWzNdIDogbm9uZSwKKwkJCW0tPm11eG5hbWVzWzRdID8gbS0+bXV4bmFtZXNbNF0gOiBub25lLAorCQkJbS0+bXV4bmFtZXNbNV0gPyBtLT5tdXhuYW1lc1s1XSA6IG5vbmUsCisJCQltLT5tdXhuYW1lc1s2XSA/IG0tPm11eG5hbWVzWzZdIDogbm9uZSwKKwkJCW0tPm11eG5hbWVzWzddID8gbS0+bXV4bmFtZXNbN10gOiBub25lKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIE9NQVBfTVVYX01BWF9BUkdfQ0hBUiAgNworCitzdGF0aWMgc3NpemVfdCBvbWFwX211eF9kYmdfc2lnbmFsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciBidWZbT01BUF9NVVhfTUFYX0FSR19DSEFSXTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWY7CisJc3RydWN0IG9tYXBfbXV4ICptOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBidWZfc2l6ZSwgcmV0OworCisJaWYgKGNvdW50ID4gT01BUF9NVVhfTUFYX0FSR19DSEFSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAweDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh2YWwgPiAweGZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJc2VxZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwltID0gc2VxZi0+cHJpdmF0ZTsKKworCW9tYXBfbXV4X3dyaXRlKCh1MTYpdmFsLCBtLT5yZWdfb2Zmc2V0KTsKKwkqcHBvcyArPSBjb3VudDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBvbWFwX211eF9kYmdfc2lnbmFsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG9tYXBfbXV4X2RiZ19zaWduYWxfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tYXBfbXV4X2RiZ19zaWduYWxfZm9wcyA9IHsKKwkub3BlbgkJPSBvbWFwX211eF9kYmdfc2lnbmFsX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLndyaXRlCQk9IG9tYXBfbXV4X2RiZ19zaWduYWxfd3JpdGUsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptdXhfZGJnX2RpcjsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbXV4X2RiZ19pbml0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOworCisJbXV4X2RiZ19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm9tYXBfbXV4IiwgTlVMTCk7CisJaWYgKCFtdXhfZGJnX2RpcikKKwkJcmV0dXJuOworCisJKHZvaWQpZGVidWdmc19jcmVhdGVfZmlsZSgiYm9hcmQiLCBTX0lSVUdPLCBtdXhfZGJnX2RpciwKKwkJCQkJTlVMTCwgJm9tYXBfbXV4X2RiZ19ib2FyZF9mb3BzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm11eG1vZGVzLCBub2RlKSB7CisJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CisKKwkJKHZvaWQpZGVidWdmc19jcmVhdGVfZmlsZShtLT5tdXhuYW1lc1swXSwgU19JV1VHTywgbXV4X2RiZ19kaXIsCisJCQkJCW0sICZvbWFwX211eF9kYmdfc2lnbmFsX2ZvcHMpOworCX0KK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX211eF9kYmdfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tdXhfZnJlZV9uYW1lcyhzdHJ1Y3Qgb21hcF9tdXggKm0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NVVhfTlJfTU9ERVM7IGkrKykKKwkJa2ZyZWUobS0+bXV4bmFtZXNbaV0pOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX05SX1NJREVTOyBpKyspCisJCWtmcmVlKG0tPmJhbGxzW2ldKTsKICNlbmRpZgorCit9CisKKy8qIEZyZWUgYWxsIGRhdGEgZXhjZXB0IGZvciBHUElPIHBpbnMgdW5sZXNzIENPTkZJR19ERUJVR19GUyBpcyBzZXQgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbXV4X2xhdGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZSwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCB0bXAsICZtdXhtb2Rlcywgbm9kZSkgeworCQlzdHJ1Y3Qgb21hcF9tdXggKm0gPSAmZS0+bXV4OworCQl1MTYgbW9kZSA9IG9tYXBfbXV4X3JlYWQobS0+cmVnX29mZnNldCk7CisKKwkJaWYgKE9NQVBfTU9ERV9HUElPKG1vZGUpKQorCQkJY29udGludWU7CisKKyNpZm5kZWYgQ09ORklHX0RFQlVHX0ZTCisJCW11dGV4X2xvY2soJm11eG1vZGVfbXV0ZXgpOworCQlsaXN0X2RlbCgmZS0+bm9kZSk7CisJCW11dGV4X3VubG9jaygmbXV4bW9kZV9tdXRleCk7CisJCW9tYXBfbXV4X2ZyZWVfbmFtZXMobSk7CisJCWtmcmVlKG0pOworI2VuZGlmCisKKwl9CisKKwlvbWFwX211eF9kYmdfaW5pdCgpOworCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKG9tYXBfbXV4X2xhdGVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX211eF9wYWNrYWdlX2ZpeHVwKHN0cnVjdCBvbWFwX211eCAqcCwKKwkJCQkJc3RydWN0IG9tYXBfbXV4ICpzdXBlcnNldCkKK3sKKwl3aGlsZSAocC0+cmVnX29mZnNldCAhPSAgT01BUF9NVVhfVEVSTUlOQVRPUikgeworCQlzdHJ1Y3Qgb21hcF9tdXggKnMgPSBzdXBlcnNldDsKKwkJaW50IGZvdW5kID0gMDsKKworCQl3aGlsZSAocy0+cmVnX29mZnNldCAhPSBPTUFQX01VWF9URVJNSU5BVE9SKSB7CisJCQlpZiAocy0+cmVnX29mZnNldCA9PSBwLT5yZWdfb2Zmc2V0KSB7CisJCQkJKnMgPSAqcDsKKwkJCQlmb3VuZCsrOworCQkJCWJyZWFrOworCQkJfQorCQkJcysrOworCQl9CisJCWlmICghZm91bmQpCisJCQlwcmludGsoS0VSTl9FUlIgIm11eDogVW5rbm93biBlbnRyeSBvZmZzZXQgMHgleFxuIiwKKwkJCQkJcC0+cmVnX29mZnNldCk7CisJCXArKzsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbXV4X3BhY2thZ2VfaW5pdF9iYWxscyhzdHJ1Y3Qgb21hcF9iYWxsICpiLAorCQkJCXN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQpCit7CisJd2hpbGUgKGItPnJlZ19vZmZzZXQgIT0gT01BUF9NVVhfVEVSTUlOQVRPUikgeworCQlzdHJ1Y3Qgb21hcF9tdXggKnMgPSBzdXBlcnNldDsKKwkJaW50IGZvdW5kID0gMDsKKworCQl3aGlsZSAocy0+cmVnX29mZnNldCAhPSBPTUFQX01VWF9URVJNSU5BVE9SKSB7CisJCQlpZiAocy0+cmVnX29mZnNldCA9PSBiLT5yZWdfb2Zmc2V0KSB7CisJCQkJcy0+YmFsbHNbMF0gPSBiLT5iYWxsc1swXTsKKwkJCQlzLT5iYWxsc1sxXSA9IGItPmJhbGxzWzFdOworCQkJCWZvdW5kKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzKys7CisJCX0KKwkJaWYgKCFmb3VuZCkKKwkJCXByaW50ayhLRVJOX0VSUiAibXV4OiBVbmtub3duIGJhbGwgb2Zmc2V0IDB4JXhcbiIsCisJCQkJCWItPnJlZ19vZmZzZXQpOworCQliKys7CisJfQorfQorCisjZWxzZQkvKiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbXV4X3BhY2thZ2VfaW5pdF9iYWxscyhzdHJ1Y3Qgb21hcF9iYWxsICpiLAorCQkJCQlzdHJ1Y3Qgb21hcF9tdXggKnN1cGVyc2V0KQoreworfQorCisjZW5kaWYJLyogQ09ORklHX0RFQlVHX0ZTICovCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbXV4X3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJaWYgKCFvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCW9tYXBfbXV4X29wdGlvbnMgPSBvcHRpb25zOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJvbWFwX211eD0iLCBvbWFwX211eF9zZXR1cCk7CisKKy8qCisgKiBOb3RlIHRoYXQgdGhlIG9tYXBfbXV4PXNvbWUuc2lnbmFsMT0weDEyMzQsc29tZS5zaWduYWwyPTB4MTIzNAorICogY21kbGluZSBvcHRpb25zIG9ubHkgb3ZlcnJpZGUgdGhlIGJvb3Rsb2FkZXIgdmFsdWVzLgorICogRHVyaW5nIGRldmVsb3BtZW50LCBwbGVhc2UgZW5hYmxlIENPTkZJR19ERUJVR19GUywgYW5kIHVzZSB0aGUKKyAqIHNpZ25hbCBzcGVjaWZpYyBlbnRyaWVzIHVuZGVyIGRlYnVnZnMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX211eF9zZXRfY21kbGluZV9zaWduYWxzKHZvaWQpCit7CisJY2hhciAqb3B0aW9ucywgKm5leHRfb3B0LCAqdG9rZW47CisKKwlpZiAoIW9tYXBfbXV4X29wdGlvbnMpCisJCXJldHVybjsKKworCW9wdGlvbnMgPSBrbWFsbG9jKHN0cmxlbihvbWFwX211eF9vcHRpb25zKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghb3B0aW9ucykKKwkJcmV0dXJuOworCisJc3RyY3B5KG9wdGlvbnMsIG9tYXBfbXV4X29wdGlvbnMpOworCW5leHRfb3B0ID0gb3B0aW9uczsKKworCXdoaWxlICgodG9rZW4gPSBzdHJzZXAoJm5leHRfb3B0LCAiLCIpKSAhPSBOVUxMKSB7CisJCWNoYXIgKmtleXZhbCwgKm5hbWU7CisJCXVuc2lnbmVkIGxvbmcgdmFsOworCisJCWtleXZhbCA9IHRva2VuOworCQluYW1lID0gc3Ryc2VwKCZrZXl2YWwsICI9Iik7CisJCWlmIChuYW1lKSB7CisJCQlpbnQgcmVzOworCisJCQlyZXMgPSBzdHJpY3Rfc3RydG91bChrZXl2YWwsIDB4MTAsICZ2YWwpOworCQkJaWYgKHJlcyA8IDApCisJCQkJY29udGludWU7CisKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKG5hbWUsICh1MTYpdmFsKTsKKwkJfQorCX0KKworCWtmcmVlKG9wdGlvbnMpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tdXhfc2V0X2JvYXJkX3NpZ25hbHMoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCit7CisJd2hpbGUgKGJvYXJkX211eC0+cmVnX29mZnNldCAhPSAgT01BUF9NVVhfVEVSTUlOQVRPUikgeworCQlvbWFwX211eF93cml0ZShib2FyZF9tdXgtPnZhbHVlLCBib2FyZF9tdXgtPnJlZ19vZmZzZXQpOworCQlib2FyZF9tdXgrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbXV4X2NvcHlfbmFtZXMoc3RydWN0IG9tYXBfbXV4ICpzcmMsCisJCQkJCXN0cnVjdCBvbWFwX211eCAqZHN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX05SX01PREVTOyBpKyspIHsKKwkJaWYgKHNyYy0+bXV4bmFtZXNbaV0pIHsKKwkJCWRzdC0+bXV4bmFtZXNbaV0gPQorCQkJCWttYWxsb2Moc3RybGVuKHNyYy0+bXV4bmFtZXNbaV0pICsgMSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRzdC0+bXV4bmFtZXNbaV0pCisJCQkJZ290byBmcmVlOworCQkJc3RyY3B5KGRzdC0+bXV4bmFtZXNbaV0sIHNyYy0+bXV4bmFtZXNbaV0pOworCQl9CisJfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX05SX1NJREVTOyBpKyspIHsKKwkJaWYgKHNyYy0+YmFsbHNbaV0pIHsKKwkJCWRzdC0+YmFsbHNbaV0gPQorCQkJCWttYWxsb2Moc3RybGVuKHNyYy0+YmFsbHNbaV0pICsgMSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRzdC0+YmFsbHNbaV0pCisJCQkJZ290byBmcmVlOworCQkJc3RyY3B5KGRzdC0+YmFsbHNbaV0sIHNyYy0+YmFsbHNbaV0pOworCQl9CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworZnJlZToKKwlvbWFwX211eF9mcmVlX25hbWVzKGRzdCk7CisJcmV0dXJuIC1FTk9NRU07CisKK30KKworI2VuZGlmCS8qIENPTkZJR19PTUFQX01VWCAqLworCitzdGF0aWMgdTE2IG9tYXBfbXV4X2dldF9ieV9ncGlvKGludCBncGlvKQoreworCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZTsKKwl1MTYgb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm11eG1vZGVzLCBub2RlKSB7CisJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CisJCWlmIChtLT5ncGlvID09IGdwaW8pIHsKKwkJCW9mZnNldCA9IG0tPnJlZ19vZmZzZXQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qIE5lZWRlZCBmb3IgZHluYW1pYyBtdXhpbmcgb2YgR1BJTyBwaW5zIGZvciBvZmYtaWRsZSAqLwordTE2IG9tYXBfbXV4X2dldF9ncGlvKGludCBncGlvKQoreworCXUxNiBvZmZzZXQ7CisKKwlvZmZzZXQgPSBvbWFwX211eF9nZXRfYnlfZ3BpbyhncGlvKTsKKwlpZiAob2Zmc2V0ID09IE9NQVBfTVVYX1RFUk1JTkFUT1IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBnZXQgZ3BpbyVpXG4iLCBncGlvKTsKKwkJcmV0dXJuIG9mZnNldDsKKwl9CisKKwlyZXR1cm4gb21hcF9tdXhfcmVhZChvZmZzZXQpOworfQorCisvKiBOZWVkZWQgZm9yIGR5bmFtaWMgbXV4aW5nIG9mIEdQSU8gcGlucyBmb3Igb2ZmLWlkbGUgKi8KK3ZvaWQgb21hcF9tdXhfc2V0X2dwaW8odTE2IHZhbCwgaW50IGdwaW8pCit7CisJdTE2IG9mZnNldDsKKworCW9mZnNldCA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKGdwaW8pOworCWlmIChvZmZzZXQgPT0gT01BUF9NVVhfVEVSTUlOQVRPUikgeworCQlwcmludGsoS0VSTl9FUlIgIm11eDogQ291bGQgbm90IHNldCBncGlvJWlcbiIsIGdwaW8pOworCQlyZXR1cm47CisJfQorCisJb21hcF9tdXhfd3JpdGUodmFsLCBvZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfbXV4ICogX19pbml0IG9tYXBfbXV4X2xpc3RfYWRkKHN0cnVjdCBvbWFwX211eCAqc3JjKQoreworCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZW50cnk7CisJc3RydWN0IG9tYXBfbXV4ICptOworCisJZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tdXhfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gTlVMTDsKKworCW0gPSAmZW50cnktPm11eDsKKwltZW1jcHkobSwgc3JjLCBzaXplb2Yoc3RydWN0IG9tYXBfbXV4X2VudHJ5KSk7CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKwlpZiAob21hcF9tdXhfY29weV9uYW1lcyhzcmMsIG0pKSB7CisJCWtmcmVlKGVudHJ5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmCisKKwltdXRleF9sb2NrKCZtdXhtb2RlX211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bm9kZSwgJm11eG1vZGVzKTsKKwltdXRleF91bmxvY2soJm11eG1vZGVfbXV0ZXgpOworCisJcmV0dXJuIG07Cit9CisKKy8qCisgKiBOb3RlIGlmIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2VsZWN0ZWQsIHdlIHdpbGwgb25seSBpbml0aWFsaXplCisgKiB0aGUgR1BJTyB0byBtdXggb2Zmc2V0IG1hcHBpbmcgdGhhdCBpcyBuZWVkZWQgZm9yIGR5bmFtaWMgbXV4aW5nCisgKiBvZiBHUElPIHBpbnMgZm9yIG9mZi1pZGxlLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tdXhfaW5pdF9saXN0KHN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQpCit7CisJd2hpbGUgKHN1cGVyc2V0LT5yZWdfb2Zmc2V0ICE9ICBPTUFQX01VWF9URVJNSU5BVE9SKSB7CisJCXN0cnVjdCBvbWFwX211eCAqZW50cnk7CisKKyNpZm5kZWYgQ09ORklHX09NQVBfTVVYCisJCS8qIFNraXAgcGlucyB0aGF0IGFyZSBub3QgbXV4ZWQgYXMgR1BJTyBieSBib290bG9hZGVyICovCisJCWlmICghT01BUF9NT0RFX0dQSU8ob21hcF9tdXhfcmVhZChzdXBlcnNldC0+cmVnX29mZnNldCkpKSB7CisJCQlzdXBlcnNldCsrOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCisJCWVudHJ5ID0gb21hcF9tdXhfbGlzdF9hZGQoc3VwZXJzZXQpOworCQlpZiAoIWVudHJ5KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm11eDogQ291bGQgbm90IGFkZCBlbnRyeVxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXJzZXQrKzsKKwl9Cit9CisKK2ludCBfX2luaXQgb21hcF9tdXhfaW5pdCh1MzIgbXV4X3BiYXNlLCB1MzIgbXV4X3NpemUsCisJCQkJc3RydWN0IG9tYXBfbXV4ICpzdXBlcnNldCwKKwkJCQlzdHJ1Y3Qgb21hcF9tdXggKnBhY2thZ2Vfc3Vic2V0LAorCQkJCXN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LAorCQkJCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHMpCit7CisJaWYgKG11eF9iYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJbXV4X3BoeXMgPSBtdXhfcGJhc2U7CisJbXV4X2Jhc2UgPSBpb3JlbWFwKG11eF9wYmFzZSwgbXV4X3NpemUpOworCWlmICghbXV4X2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBpb3JlbWFwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCisJb21hcF9tdXhfcGFja2FnZV9maXh1cChwYWNrYWdlX3N1YnNldCwgc3VwZXJzZXQpOworCW9tYXBfbXV4X3BhY2thZ2VfaW5pdF9iYWxscyhwYWNrYWdlX2JhbGxzLCBzdXBlcnNldCk7CisJb21hcF9tdXhfc2V0X2NtZGxpbmVfc2lnbmFscygpOworCW9tYXBfbXV4X3NldF9ib2FyZF9zaWduYWxzKGJvYXJkX211eCk7CisjZW5kaWYKKworCW9tYXBfbXV4X2luaXRfbGlzdChzdXBlcnNldCk7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjRkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJtdXgzNHh4LmgiCisKKyNkZWZpbmUgT01BUF9NVVhfVEVSTUlOQVRPUgkweGZmZmYKKworLyogMzR4eCBtdXggbW9kZSBvcHRpb25zIGZvciBlYWNoIHBpbi4gU2VlIFRSTSBmb3Igb3B0aW9ucyAqLworI2RlZmluZSBPTUFQX01VWF9NT0RFMCAgICAgIDAKKyNkZWZpbmUgT01BUF9NVVhfTU9ERTEgICAgICAxCisjZGVmaW5lIE9NQVBfTVVYX01PREUyICAgICAgMgorI2RlZmluZSBPTUFQX01VWF9NT0RFMyAgICAgIDMKKyNkZWZpbmUgT01BUF9NVVhfTU9ERTQgICAgICA0CisjZGVmaW5lIE9NQVBfTVVYX01PREU1ICAgICAgNQorI2RlZmluZSBPTUFQX01VWF9NT0RFNiAgICAgIDYKKyNkZWZpbmUgT01BUF9NVVhfTU9ERTcgICAgICA3CisKKy8qIDI0eHgvMzR4eCBtdXggYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUF9QVUxMX0VOQQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVBfUFVMTF9VUAkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVBfQUxURUxFQ1RSSUNBTFNFTAkJKDEgPDwgNSkKKworLyogMzR4eCBzcGVjaWZpYyBtdXggYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUF9JTlBVVF9FTgkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVBfT0ZGX0VOCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUF9PRkZPVVRfRU4JCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUF9PRkZPVVRfVkFMCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVBfT0ZGX1BVTExfRU4JCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQX09GRl9QVUxMX1VQCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUF9XQUtFVVBfRU4JCQkoMSA8PCAxNCkKKworLyogQWN0aXZlIHBpbiBzdGF0ZXMgKi8KKyNkZWZpbmUgT01BUF9QSU5fT1VUUFVUCQkJMAorI2RlZmluZSBPTUFQX1BJTl9JTlBVVAkJCU9NQVBfSU5QVVRfRU4KKyNkZWZpbmUgT01BUF9QSU5fSU5QVVRfUFVMTFVQCQkoT01BUF9QVUxMX0VOQSB8IE9NQVBfSU5QVVRfRU4gXAorCQkJCQkJfCBPTUFQX1BVTExfVVApCisjZGVmaW5lIE9NQVBfUElOX0lOUFVUX1BVTExET1dOCQkoT01BUF9QVUxMX0VOQSB8IE9NQVBfSU5QVVRfRU4pCisKKy8qIE9mZiBtb2RlIHN0YXRlcyAqLworI2RlZmluZSBPTUFQX1BJTl9PRkZfTk9ORQkJMAorI2RlZmluZSBPTUFQX1BJTl9PRkZfT1VUUFVUX0hJR0gJKE9NQVBfT0ZGX0VOIHwgT01BUF9PRkZPVVRfRU4gXAorCQkJCQkJfCBPTUFQX09GRk9VVF9WQUwpCisjZGVmaW5lIE9NQVBfUElOX09GRl9PVVRQVVRfTE9XCQkoT01BUF9PRkZfRU4gfCBPTUFQX09GRk9VVF9FTikKKyNkZWZpbmUgT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUAkoT01BUF9PRkZfRU4gfCBPTUFQX09GRl9QVUxMX0VOIFwKKwkJCQkJCXwgT01BUF9PRkZfUFVMTF9VUCkKKyNkZWZpbmUgT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExET1dOCShPTUFQX09GRl9FTiB8IE9NQVBfT0ZGX1BVTExfRU4pCisjZGVmaW5lIE9NQVBfUElOX09GRl9XQUtFVVBFTkFCTEUJT01BUF9XQUtFVVBfRU4KKworI2RlZmluZSBPTUFQX01PREVfR1BJTyh4KQkoKCh4KSAmIE9NQVBfTVVYX01PREU3KSA9PSBPTUFQX01VWF9NT0RFNCkKKworLyogRmxhZ3MgZm9yIG9tYXBfbXV4X2luaXQgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX01BU0sJCTB4ZmZmZgorI2RlZmluZSBPTUFQX1BBQ0tBR0VfQ0JQCQk0CQkvKiA1MTUtcGluIDAuNDAgMC41MCAqLworI2RlZmluZSBPTUFQX1BBQ0tBR0VfQ1VTCQkzCQkvKiA0MjMtcGluIDAuNjUgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX0NCQgkJMgkJLyogNTE1LXBpbiAwLjQwIDAuNTAgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX0NCQwkJMQkJLyogNTE1LXBpbiAwLjUwIDAuNjUgKi8KKworCisjZGVmaW5lIE9NQVBfTVVYX05SX01PREVTCTgJCQkvKiBBdmFpbGFibGUgbW9kZXMgKi8KKyNkZWZpbmUgT01BUF9NVVhfTlJfU0lERVMJMgkJCS8qIEJvdHRvbSAmIHRvcCAqLworCisvKioKKyAqIHN0cnVjdCBvbWFwX211eCAtIGRhdGEgZm9yIG9tYXAgbXV4IHJlZ2lzdGVyIG9mZnNldCBhbmQgaXQncyB2YWx1ZQorICogQHJlZ19vZmZzZXQ6CW11eCByZWdpc3RlciBvZmZzZXQgZnJvbSB0aGUgbXV4IGJhc2UKKyAqIEBncGlvOglHUElPIG51bWJlcgorICogQG11eG5hbWVzOglhdmFpbGFibGUgc2lnbmFsIG1vZGVzIGZvciBhIGJhbGwKKyAqLworc3RydWN0IG9tYXBfbXV4IHsKKwl1MTYJcmVnX29mZnNldDsKKwl1MTYJZ3BpbzsKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKwljaGFyCSptdXhuYW1lc1tPTUFQX01VWF9OUl9NT0RFU107CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJY2hhcgkqYmFsbHNbT01BUF9NVVhfTlJfU0lERVNdOworI2VuZGlmCisjZW5kaWYKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfYmFsbCAtIGRhdGEgZm9yIGJhbGxzIG9uIG9tYXAgcGFja2FnZQorICogQHJlZ19vZmZzZXQ6CW11eCByZWdpc3RlciBvZmZzZXQgZnJvbSB0aGUgbXV4IGJhc2UKKyAqIEBiYWxsczoJYXZhaWxhYmxlIGJhbGxzIG9uIHRoZSBwYWNrYWdlCisgKi8KK3N0cnVjdCBvbWFwX2JhbGwgeworCXUxNglyZWdfb2Zmc2V0OworCWNoYXIJKmJhbGxzW09NQVBfTVVYX05SX1NJREVTXTsKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfYm9hcmRfbXV4IC0gZGF0YSBmb3IgaW5pdGlhbGl6aW5nIG11eCByZWdpc3RlcnMKKyAqIEByZWdfb2Zmc2V0OgltdXggcmVnaXN0ZXIgb2Zmc2V0IGZyb20gdGhlIG11eCBiYXNlCisgKiBAbXV4X3ZhbHVlOglkZXNpcmVkIG11eCB2YWx1ZSB0byBzZXQKKyAqLworc3RydWN0IG9tYXBfYm9hcmRfbXV4IHsKKwl1MTYJcmVnX29mZnNldDsKKwl1MTYJdmFsdWU7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisKKy8qKgorICogb21hcF9tdXhfaW5pdF9ncGlvIC0gaW5pdGlhbGl6ZSBhIHNpZ25hbCBiYXNlZCBvbiB0aGUgR1BJTyBudW1iZXIKKyAqIEBncGlvOgkJR1BJTyBudW1iZXIKKyAqIEB2YWw6CQlPcHRpb25zIGZvciB0aGUgbXV4IHJlZ2lzdGVyIHZhbHVlCisgKi8KK2ludCBvbWFwX211eF9pbml0X2dwaW8oaW50IGdwaW8sIGludCB2YWwpOworCisvKioKKyAqIG9tYXBfbXV4X2luaXRfc2lnbmFsIC0gaW5pdGlhbGl6ZSBhIHNpZ25hbCBiYXNlZCBvbiB0aGUgc2lnbmFsIG5hbWUKKyAqIEBtdXhuYW1lOgkJTXV4IG5hbWUgaW4gbW9kZTBfbmFtZS5zaWduYWxfbmFtZSBmb3JtYXQKKyAqIEB2YWw6CQlPcHRpb25zIGZvciB0aGUgbXV4IHJlZ2lzdGVyIHZhbHVlCisgKi8KK2ludCBvbWFwX211eF9pbml0X3NpZ25hbChjaGFyICptdXhuYW1lLCBpbnQgdmFsKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgb21hcF9tdXhfaW5pdF9ncGlvKGludCBncGlvLCBpbnQgdmFsKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgb21hcF9tdXhfaW5pdF9zaWduYWwoY2hhciAqbXV4bmFtZSwgaW50IHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKy8qKgorICogb21hcF9tdXhfZ2V0X2dwaW8oKSAtIGdldCBtdXggcmVnaXN0ZXIgdmFsdWUgYmFzZWQgb24gR1BJTyBudW1iZXIKKyAqIEBncGlvOgkJR1BJTyBudW1iZXIKKyAqCisgKi8KK3UxNiBvbWFwX211eF9nZXRfZ3BpbyhpbnQgZ3Bpbyk7CisKKy8qKgorICogb21hcF9tdXhfc2V0X2dwaW8oKSAtIHNldCBtdXggcmVnaXN0ZXIgdmFsdWUgYmFzZWQgb24gR1BJTyBudW1iZXIKKyAqIEB2YWw6CQlOZXcgbXV4IHJlZ2lzdGVyIHZhbHVlCisgKiBAZ3BpbzoJCUdQSU8gbnVtYmVyCisgKgorICovCit2b2lkIG9tYXBfbXV4X3NldF9ncGlvKHUxNiB2YWwsIGludCBncGlvKTsKKworLyoqCisgKiBvbWFwM19tdXhfaW5pdCgpIC0gaW5pdGlhbGl6ZSBtdXggc3lzdGVtIHdpdGggYm9hcmQgc3BlY2lmaWMgc2V0CisgKiBAYm9hcmRfbXV4OgkJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAZmxhZ3M6CQlPTUFQIHBhY2thZ2UgdHlwZSB1c2VkIGZvciB0aGUgYm9hcmQKKyAqLworaW50IG9tYXAzX211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOworCisvKioKKyAqIG9tYXBfbXV4X2luaXQgLSBwcml2YXRlIG11eCBpbml0IGZ1bmN0aW9uLCBkbyBub3QgY2FsbAorICovCitpbnQgb21hcF9tdXhfaW5pdCh1MzIgbXV4X3BiYXNlLCB1MzIgbXV4X3NpemUsCisJCQkJc3RydWN0IG9tYXBfbXV4ICpzdXBlcnNldCwKKwkJCQlzdHJ1Y3Qgb21hcF9tdXggKnBhY2thZ2Vfc3Vic2V0LAorCQkJCXN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LAorCQkJCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGUwYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMKQEAgLTAsMCArMSwyMDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJtdXguaCIKKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorCisjZGVmaW5lIF9PTUFQM19NVVhFTlRSWShNMCwgZywgbTAsIG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03KQkJXAorewkJCQkJCQkJCVwKKwkucmVnX29mZnNldAk9IChPTUFQM19DT05UUk9MX1BBRENPTkZfIyNNMCMjX09GRlNFVCksCVwKKwkuZ3BpbwkJPSAoZyksCQkJCQkJXAorCS5tdXhuYW1lcwk9IHsgbTAsIG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03IH0sCQlcCit9CisKKyNlbHNlCisKKyNkZWZpbmUgX09NQVAzX01VWEVOVFJZKE0wLCBnLCBtMCwgbTEsIG0yLCBtMywgbTQsIG01LCBtNiwgbTcpCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVAzX0NPTlRST0xfUEFEQ09ORl8jI00wIyNfT0ZGU0VUKSwJXAorCS5ncGlvCQk9IChnKSwJCQkJCQlcCit9CisKKyNlbmRpZgorCisjZGVmaW5lIF9PTUFQM19CQUxMRU5UUlkoTTAsIGJiLCBidCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJLnJlZ19vZmZzZXQJPSAoT01BUDNfQ09OVFJPTF9QQURDT05GXyMjTTAjI19PRkZTRVQpLAlcCisJLmJhbGxzCQk9IHsgYmIsIGJ0IH0sCQkJCQlcCit9CisKKy8qCisgKiBTdXBlcnNldCBvZiBhbGwgbXV4IG1vZGVzIGZvciBvbWFwMworICovCitzdGF0aWMgc3RydWN0IG9tYXBfbXV4IF9faW5pdGRhdGEgb21hcDNfbXV4bW9kZXNbXSA9IHsKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QwLCA5OSwKKwkJImNhbV9kMCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzk5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDEsIDEwMCwKKwkJImNhbV9kMSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QxMCwgMTA5LAorCQkiY2FtX2QxMCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwOSIsICJod19kYmc4IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDExLCAxMTAsCisJCSJjYW1fZDExIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTEwIiwgImh3X2RiZzkiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9EMiwgMTAxLAorCQkiY2FtX2QyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTAxIiwgImh3X2RiZzQiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9EMywgMTAyLAorCQkiY2FtX2QzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTAyIiwgImh3X2RiZzUiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9ENCwgMTAzLAorCQkiY2FtX2Q0IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTAzIiwgImh3X2RiZzYiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9ENSwgMTA0LAorCQkiY2FtX2Q1IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTA0IiwgImh3X2RiZzciLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9ENiwgMTA1LAorCQkiY2FtX2Q2IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTA1IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDcsIDEwNiwKKwkJImNhbV9kNyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwNiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0Q4LCAxMDcsCisJCSJjYW1fZDgiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDciLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9EOSwgMTA4LAorCQkiY2FtX2Q5IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTA4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRkxELCA5OCwKKwkJImNhbV9mbGQiLCBOVUxMLCAiY2FtX2dsb2JhbF9yZXNldCIsIE5VTEwsCisJCSJncGlvXzk4IiwgImh3X2RiZzMiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9IUywgOTQsCisJCSJjYW1faHMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb185NCIsICJod19kYmcwIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fUENMSywgOTcsCisJCSJjYW1fcGNsayIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzk3IiwgImh3X2RiZzIiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9TVFJPQkUsIDEyNiwKKwkJImNhbV9zdHJvYmUiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjYiLCAiaHdfZGJnMTEiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9WUywgOTUsCisJCSJjYW1fdnMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb185NSIsICJod19kYmcxIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fV0VOLCAxNjcsCisJCSJjYW1fd2VuIiwgTlVMTCwgImNhbV9zaHV0dGVyIiwgTlVMTCwKKwkJImdwaW9fMTY3IiwgImh3X2RiZzEwIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fWENMS0EsIDk2LAorCQkiY2FtX3hjbGthIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fOTYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9YQ0xLQiwgMTExLAorCQkiY2FtX3hjbGtiIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTExIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDU0kyX0RYMCwgMTEyLAorCQkiY3NpMl9keDAiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMTIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENTSTJfRFgxLCAxMTQsCisJCSJjc2kyX2R4MSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzExNCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ1NJMl9EWTAsIDExMywKKwkJImNzaTJfZHkwIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTEzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDU0kyX0RZMSwgMTE1LAorCQkiY3NpMl9keTEiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMTUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19BQ0JJQVMsIDY5LAorCQkiZHNzX2FjYmlhcyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzY5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTAsIDcwLAorCQkiZHNzX2RhdGEwIiwgTlVMTCwgInVhcnQxX2N0cyIsIE5VTEwsCisJCSJncGlvXzcwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTEsIDcxLAorCQkiZHNzX2RhdGExIiwgTlVMTCwgInVhcnQxX3J0cyIsIE5VTEwsCisJCSJncGlvXzcxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTEwLCA4MCwKKwkJImRzc19kYXRhMTAiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb184MCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEExMSwgODEsCisJCSJkc3NfZGF0YTExIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fODEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMTIsIDgyLAorCQkiZHNzX2RhdGExMiIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzgyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTEzLCA4MywKKwkJImRzc19kYXRhMTMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb184MyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEExNCwgODQsCisJCSJkc3NfZGF0YTE0IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fODQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMTUsIDg1LAorCQkiZHNzX2RhdGExNSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzg1IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTE2LCA4NiwKKwkJImRzc19kYXRhMTYiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb184NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEExNywgODcsCisJCSJkc3NfZGF0YTE3IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fODciLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMTgsIDg4LAorCQkiZHNzX2RhdGExOCIsIE5VTEwsICJtY3NwaTNfY2xrIiwgImRzc19kYXRhMCIsCisJCSJncGlvXzg4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTE5LCA4OSwKKwkJImRzc19kYXRhMTkiLCBOVUxMLCAibWNzcGkzX3NpbW8iLCAiZHNzX2RhdGExIiwKKwkJImdwaW9fODkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMjAsIDkwLAorCQkiZHNzX2RhdGEyMCIsIE5VTEwsICJtY3NwaTNfc29taSIsICJkc3NfZGF0YTIiLAorCQkiZ3Bpb185MCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEEyMSwgOTEsCisJCSJkc3NfZGF0YTIxIiwgTlVMTCwgIm1jc3BpM19jczAiLCAiZHNzX2RhdGEzIiwKKwkJImdwaW9fOTEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMjIsIDkyLAorCQkiZHNzX2RhdGEyMiIsIE5VTEwsICJtY3NwaTNfY3MxIiwgImRzc19kYXRhNCIsCisJCSJncGlvXzkyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTIzLCA5MywKKwkJImRzc19kYXRhMjMiLCBOVUxMLCBOVUxMLCAiZHNzX2RhdGE1IiwKKwkJImdwaW9fOTMiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMiwgNzIsCisJCSJkc3NfZGF0YTIiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb183MiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEEzLCA3MywKKwkJImRzc19kYXRhMyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzczIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTQsIDc0LAorCQkiZHNzX2RhdGE0IiwgTlVMTCwgInVhcnQzX3J4X2lycngiLCBOVUxMLAorCQkiZ3Bpb183NCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE1LCA3NSwKKwkJImRzc19kYXRhNSIsIE5VTEwsICJ1YXJ0M190eF9pcnR4IiwgTlVMTCwKKwkJImdwaW9fNzUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBNiwgNzYsCisJCSJkc3NfZGF0YTYiLCBOVUxMLCAidWFydDFfdHgiLCBOVUxMLAorCQkiZ3Bpb183NiIsICJod19kYmcxNCIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE3LCA3NywKKwkJImRzc19kYXRhNyIsIE5VTEwsICJ1YXJ0MV9yeCIsIE5VTEwsCisJCSJncGlvXzc3IiwgImh3X2RiZzE1IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTgsIDc4LAorCQkiZHNzX2RhdGE4IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNzgiLCAiaHdfZGJnMTYiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBOSwgNzksCisJCSJkc3NfZGF0YTkiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb183OSIsICJod19kYmcxNyIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0hTWU5DLCA2NywKKwkJImRzc19oc3luYyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzY3IiwgImh3X2RiZzEzIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfUENMSywgNjYsCisJCSJkc3NfcGNsayIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzY2IiwgImh3X2RiZzEyIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfVlNZTkMsIDY4LAorCQkiZHNzX3ZzeW5jIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNjgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEVUS19DTEssIDEyLAorCQkiZXRrX2NsayIsICJtY2JzcDVfY2xreCIsICJzZG1tYzNfY2xrIiwgImhzdXNiMV9zdHAiLAorCQkiZ3Bpb18xMiIsICJtbTFfcnhkcCIsICJoc3VzYjFfdGxsX3N0cCIsICJod19kYmcwIiksCisJX09NQVAzX01VWEVOVFJZKEVUS19DVEwsIDEzLAorCQkiZXRrX2N0bCIsIE5VTEwsICJzZG1tYzNfY21kIiwgImhzdXNiMV9jbGsiLAorCQkiZ3Bpb18xMyIsIE5VTEwsICJoc3VzYjFfdGxsX2NsayIsICJod19kYmcxIiksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMCwgMTQsCisJCSJldGtfZDAiLCAibWNzcGkzX3NpbW8iLCAic2RtbWMzX2RhdDQiLCAiaHN1c2IxX2RhdGEwIiwKKwkJImdwaW9fMTQiLCAibW0xX3J4cmN2IiwgImhzdXNiMV90bGxfZGF0YTAiLCAiaHdfZGJnMiIpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDEsIDE1LAorCQkiZXRrX2QxIiwgIm1jc3BpM19zb21pIiwgTlVMTCwgImhzdXNiMV9kYXRhMSIsCisJCSJncGlvXzE1IiwgIm1tMV90eHNlMCIsICJoc3VzYjFfdGxsX2RhdGExIiwgImh3X2RiZzMiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxMCwgMjQsCisJCSJldGtfZDEwIiwgTlVMTCwgInVhcnQxX3J4IiwgImhzdXNiMl9jbGsiLAorCQkiZ3Bpb18yNCIsIE5VTEwsICJoc3VzYjJfdGxsX2NsayIsICJod19kYmcxMiIpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDExLCAyNSwKKwkJImV0a19kMTEiLCBOVUxMLCBOVUxMLCAiaHN1c2IyX3N0cCIsCisJCSJncGlvXzI1IiwgIm1tMl9yeGRwIiwgImhzdXNiMl90bGxfc3RwIiwgImh3X2RiZzEzIiksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMTIsIDI2LAorCQkiZXRrX2QxMiIsIE5VTEwsIE5VTEwsICJoc3VzYjJfZGlyIiwKKwkJImdwaW9fMjYiLCBOVUxMLCAiaHN1c2IyX3RsbF9kaXIiLCAiaHdfZGJnMTQiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxMywgMjcsCisJCSJldGtfZDEzIiwgTlVMTCwgTlVMTCwgImhzdXNiMl9ueHQiLAorCQkiZ3Bpb18yNyIsICJtbTJfcnhkbSIsICJoc3VzYjJfdGxsX254dCIsICJod19kYmcxNSIpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDE0LCAyOCwKKwkJImV0a19kMTQiLCBOVUxMLCBOVUxMLCAiaHN1c2IyX2RhdGEwIiwKKwkJImdwaW9fMjgiLCAibW0yX3J4cmN2IiwgImhzdXNiMl90bGxfZGF0YTAiLCAiaHdfZGJnMTYiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxNSwgMjksCisJCSJldGtfZDE1IiwgTlVMTCwgTlVMTCwgImhzdXNiMl9kYXRhMSIsCisJCSJncGlvXzI5IiwgIm1tMl90eHNlMCIsICJoc3VzYjJfdGxsX2RhdGExIiwgImh3X2RiZzE3IiksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMiwgMTYsCisJCSJldGtfZDIiLCAibWNzcGkzX2NzMCIsIE5VTEwsICJoc3VzYjFfZGF0YTIiLAorCQkiZ3Bpb18xNiIsICJtbTFfdHhkYXQiLCAiaHN1c2IxX3RsbF9kYXRhMiIsICJod19kYmc0IiksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMywgMTcsCisJCSJldGtfZDMiLCAibWNzcGkzX2NsayIsICJzZG1tYzNfZGF0MyIsICJoc3VzYjFfZGF0YTciLAorCQkiZ3Bpb18xNyIsIE5VTEwsICJoc3VzYjFfdGxsX2RhdGE3IiwgImh3X2RiZzUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q0LCAxOCwKKwkJImV0a19kNCIsICJtY2JzcDVfZHIiLCAic2RtbWMzX2RhdDAiLCAiaHN1c2IxX2RhdGE0IiwKKwkJImdwaW9fMTgiLCBOVUxMLCAiaHN1c2IxX3RsbF9kYXRhNCIsICJod19kYmc2IiksCisJX09NQVAzX01VWEVOVFJZKEVUS19ENSwgMTksCisJCSJldGtfZDUiLCAibWNic3A1X2ZzeCIsICJzZG1tYzNfZGF0MSIsICJoc3VzYjFfZGF0YTUiLAorCQkiZ3Bpb18xOSIsIE5VTEwsICJoc3VzYjFfdGxsX2RhdGE1IiwgImh3X2RiZzciKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q2LCAyMCwKKwkJImV0a19kNiIsICJtY2JzcDVfZHgiLCAic2RtbWMzX2RhdDIiLCAiaHN1c2IxX2RhdGE2IiwKKwkJImdwaW9fMjAiLCBOVUxMLCAiaHN1c2IxX3RsbF9kYXRhNiIsICJod19kYmc4IiksCisJX09NQVAzX01VWEVOVFJZKEVUS19ENywgMjEsCisJCSJldGtfZDciLCAibWNzcGkzX2NzMSIsICJzZG1tYzNfZGF0NyIsICJoc3VzYjFfZGF0YTMiLAorCQkiZ3Bpb18yMSIsICJtbTFfdHhlbl9uIiwgImhzdXNiMV90bGxfZGF0YTMiLCAiaHdfZGJnOSIpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDgsIDIyLAorCQkiZXRrX2Q4IiwgInN5c19kcm1fbXNlY3VyZSIsICJzZG1tYzNfZGF0NiIsICJoc3VzYjFfZGlyIiwKKwkJImdwaW9fMjIiLCBOVUxMLCAiaHN1c2IxX3RsbF9kaXIiLCAiaHdfZGJnMTAiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q5LCAyMywKKwkJImV0a19kOSIsICJzeXNfc2VjdXJlX2luZGljYXRvciIsICJzZG1tYzNfZGF0NSIsICJoc3VzYjFfbnh0IiwKKwkJImdwaW9fMjMiLCAibW0xX3J4ZG0iLCAiaHN1c2IxX3RsbF9ueHQiLCAiaHdfZGJnMTEiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19BMSwgMzQsCisJCSJncG1jX2ExIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMzQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfQTEwLCA0MywKKwkJImdwbWNfYTEwIiwgInN5c19uZG1hcmVxMyIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0EyLCAzNSwKKwkJImdwbWNfYTIiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18zNSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19BMywgMzYsCisJCSJncG1jX2EzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMzYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfQTQsIDM3LAorCQkiZ3BtY19hNCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzM3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0E1LCAzOCwKKwkJImdwbWNfYTUiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18zOCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19BNiwgMzksCisJCSJncG1jX2E2IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMzkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfQTcsIDQwLAorCQkiZ3BtY19hNyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0E4LCA0MSwKKwkJImdwbWNfYTgiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb180MSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19BOSwgNDIsCisJCSJncG1jX2E5IiwgInN5c19uZG1hcmVxMiIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0NMSywgNTksCisJCSJncG1jX2NsayIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzU5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0QxMCwgNDYsCisJCSJncG1jX2QxMCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQ2IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0QxMSwgNDcsCisJCSJncG1jX2QxMSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQ3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0QxMiwgNDgsCisJCSJncG1jX2QxMiIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQ4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0QxMywgNDksCisJCSJncG1jX2QxMyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzQ5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0QxNCwgNTAsCisJCSJncG1jX2QxNCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzUwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0QxNSwgNTEsCisJCSJncG1jX2QxNSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzUxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX0Q4LCA0NCwKKwkJImdwbWNfZDgiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb180NCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19EOSwgNDUsCisJCSJncG1jX2Q5IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNDUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfTkJFMF9DTEUsIDYwLAorCQkiZ3BtY19uYmUwX2NsZSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzYwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX05CRTEsIDYxLAorCQkiZ3BtY19uYmUxIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNjEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfTkNTMSwgNTIsCisJCSJncG1jX25jczEiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb181MiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19OQ1MyLCA1MywKKwkJImdwbWNfbmNzMiIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzUzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX05DUzMsIDU0LAorCQkiZ3BtY19uY3MzIiwgInN5c19uZG1hcmVxMCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzU0IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX05DUzQsIDU1LAorCQkiZ3BtY19uY3M0IiwgInN5c19uZG1hcmVxMSIsICJtY2JzcDRfY2xreCIsICJncHQ5X3B3bV9ldnQiLAorCQkiZ3Bpb181NSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19OQ1M1LCA1NiwKKwkJImdwbWNfbmNzNSIsICJzeXNfbmRtYXJlcTIiLCAibWNic3A0X2RyIiwgImdwdDEwX3B3bV9ldnQiLAorCQkiZ3Bpb181NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19OQ1M2LCA1NywKKwkJImdwbWNfbmNzNiIsICJzeXNfbmRtYXJlcTMiLCAibWNic3A0X2R4IiwgImdwdDExX3B3bV9ldnQiLAorCQkiZ3Bpb181NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19OQ1M3LCA1OCwKKwkJImdwbWNfbmNzNyIsICJncG1jX2lvX2RpciIsICJtY2JzcDRfZnN4IiwgImdwdDhfcHdtX2V2dCIsCisJCSJncGlvXzU4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX05XUCwgNjIsCisJCSJncG1jX253cCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzYyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX1dBSVQxLCA2MywKKwkJImdwbWNfd2FpdDEiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb182MyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoR1BNQ19XQUlUMiwgNjQsCisJCSJncG1jX3dhaXQyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNjQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfV0FJVDMsIDY1LAorCQkiZ3BtY193YWl0MyIsICJzeXNfbmRtYXJlcTEiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb182NSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSERRX1NJTywgMTcwLAorCQkiaGRxX3NpbyIsICJzeXNfYWx0Y2xrIiwgImkyYzJfc2NjYmUiLCAiaTJjM19zY2NiZSIsCisJCSJncGlvXzE3MCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSFNVU0IwX0NMSywgMTIwLAorCQkiaHN1c2IwX2NsayIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSFNVU0IwX0RBVEEwLCAxMjUsCisJCSJoc3VzYjBfZGF0YTAiLCBOVUxMLCAidWFydDNfdHhfaXJ0eCIsIE5VTEwsCisJCSJncGlvXzEyNSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSFNVU0IwX0RBVEExLCAxMzAsCisJCSJoc3VzYjBfZGF0YTEiLCBOVUxMLCAidWFydDNfcnhfaXJyeCIsIE5VTEwsCisJCSJncGlvXzEzMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSFNVU0IwX0RBVEEyLCAxMzEsCisJCSJoc3VzYjBfZGF0YTIiLCBOVUxMLCAidWFydDNfcnRzX3NkIiwgTlVMTCwKKwkJImdwaW9fMTMxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShIU1VTQjBfREFUQTMsIDE2OSwKKwkJImhzdXNiMF9kYXRhMyIsIE5VTEwsICJ1YXJ0M19jdHNfcmN0eCIsIE5VTEwsCisJCSJncGlvXzE2OSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSFNVU0IwX0RBVEE0LCAxODgsCisJCSJoc3VzYjBfZGF0YTQiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xODgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9EQVRBNSwgMTg5LAorCQkiaHN1c2IwX2RhdGE1IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTg5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShIU1VTQjBfREFUQTYsIDE5MCwKKwkJImhzdXNiMF9kYXRhNiIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE5MCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSFNVU0IwX0RBVEE3LCAxOTEsCisJCSJoc3VzYjBfZGF0YTciLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xOTEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9ESVIsIDEyMiwKKwkJImhzdXNiMF9kaXIiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9OWFQsIDEyNCwKKwkJImhzdXNiMF9ueHQiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9TVFAsIDEyMSwKKwkJImhzdXNiMF9zdHAiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEkyQzJfU0NMLCAxNjgsCisJCSJpMmMyX3NjbCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE2OCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSTJDMl9TREEsIDE4MywKKwkJImkyYzJfc2RhIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTgzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShJMkMzX1NDTCwgMTg0LAorCQkiaTJjM19zY2wiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xODQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEkyQzNfU0RBLCAxODUsCisJCSJpMmMzX3NkYSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE4NSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSTJDNF9TQ0wsIDAsCisJCSJpMmM0X3NjbCIsICJzeXNfbnZtb2RlMSIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSTJDNF9TREEsIDAsCisJCSJpMmM0X3NkYSIsICJzeXNfbnZtb2RlMiIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoSlRBR19FTVUwLCAxMSwKKwkJImp0YWdfZW11MCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzExIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShKVEFHX0VNVTEsIDMxLAorCQkianRhZ19lbXUxIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMzEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQMV9DTEtSLCAxNTYsCisJCSJtY2JzcDFfY2xrciIsICJtY3NwaTRfY2xrIiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTU2IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDFfQ0xLWCwgMTYyLAorCQkibWNic3AxX2Nsa3giLCBOVUxMLCAibWNic3AzX2Nsa3giLCBOVUxMLAorCQkiZ3Bpb18xNjIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQMV9EUiwgMTU5LAorCQkibWNic3AxX2RyIiwgIm1jc3BpNF9zb21pIiwgIm1jYnNwM19kciIsIE5VTEwsCisJCSJncGlvXzE1OSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AxX0RYLCAxNTgsCisJCSJtY2JzcDFfZHgiLCAibWNzcGk0X3NpbW8iLCAibWNic3AzX2R4IiwgTlVMTCwKKwkJImdwaW9fMTU4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDFfRlNSLCAxNTcsCisJCSJtY2JzcDFfZnNyIiwgTlVMTCwgImNhbV9nbG9iYWxfcmVzZXQiLCBOVUxMLAorCQkiZ3Bpb18xNTciLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQMV9GU1gsIDE2MSwKKwkJIm1jYnNwMV9mc3giLCAibWNzcGk0X2NzMCIsICJtY2JzcDNfZnN4IiwgTlVMTCwKKwkJImdwaW9fMTYxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDJfQ0xLWCwgMTE3LAorCQkibWNic3AyX2Nsa3giLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMTciLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQMl9EUiwgMTE4LAorCQkibWNic3AyX2RyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTE4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDJfRFgsIDExOSwKKwkJIm1jYnNwMl9keCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzExOSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AyX0ZTWCwgMTE2LAorCQkibWNic3AyX2ZzeCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzExNiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AzX0NMS1gsIDE0MiwKKwkJIm1jYnNwM19jbGt4IiwgInVhcnQyX3R4IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTQyIiwgImhzdXNiM190bGxfZGF0YTYiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQM19EUiwgMTQxLAorCQkibWNic3AzX2RyIiwgInVhcnQyX3J0cyIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE0MSIsICJoc3VzYjNfdGxsX2RhdGE1IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDNfRFgsIDE0MCwKKwkJIm1jYnNwM19keCIsICJ1YXJ0Ml9jdHMiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xNDAiLCAiaHN1c2IzX3RsbF9kYXRhNCIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AzX0ZTWCwgMTQzLAorCQkibWNic3AzX2ZzeCIsICJ1YXJ0Ml9yeCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE0MyIsICJoc3VzYjNfdGxsX2RhdGE3IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDRfQ0xLWCwgMTUyLAorCQkibWNic3A0X2Nsa3giLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xNTIiLCAiaHN1c2IzX3RsbF9kYXRhMSIsICJtbTNfdHhzZTAiLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQNF9EUiwgMTUzLAorCQkibWNic3A0X2RyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTUzIiwgImhzdXNiM190bGxfZGF0YTAiLCAibW0zX3J4cmN2IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDRfRFgsIDE1NCwKKwkJIm1jYnNwNF9keCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE1NCIsICJoc3VzYjNfdGxsX2RhdGEyIiwgIm1tM190eGRhdCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1A0X0ZTWCwgMTU1LAorCQkibWNic3A0X2ZzeCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE1NSIsICJoc3VzYjNfdGxsX2RhdGEzIiwgIm1tM190eGVuX24iLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQX0NMS1MsIDE2MCwKKwkJIm1jYnNwX2Nsa3MiLCBOVUxMLCAiY2FtX3NodXR0ZXIiLCBOVUxMLAorCQkiZ3Bpb18xNjAiLCAidWFydDFfY3RzIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ1NQSTFfQ0xLLCAxNzEsCisJCSJtY3NwaTFfY2xrIiwgInNkbW1jMl9kYXQ0IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTcxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ1NQSTFfQ1MwLCAxNzQsCisJCSJtY3NwaTFfY3MwIiwgInNkbW1jMl9kYXQ3IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTc0IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ1NQSTFfQ1MxLCAxNzUsCisJCSJtY3NwaTFfY3MxIiwgTlVMTCwgTlVMTCwgInNkbW1jM19jbWQiLAorCQkiZ3Bpb18xNzUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DU1BJMV9DUzIsIDE3NiwKKwkJIm1jc3BpMV9jczIiLCBOVUxMLCBOVUxMLCAic2RtbWMzX2NsayIsCisJCSJncGlvXzE3NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNTUEkxX0NTMywgMTc3LAorCQkibWNzcGkxX2NzMyIsIE5VTEwsICJoc3VzYjJfdGxsX2RhdGEyIiwgImhzdXNiMl9kYXRhMiIsCisJCSJncGlvXzE3NyIsICJtbTJfdHhkYXQiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DU1BJMV9TSU1PLCAxNzIsCisJCSJtY3NwaTFfc2ltbyIsICJzZG1tYzJfZGF0NSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE3MiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNTUEkxX1NPTUksIDE3MywKKwkJIm1jc3BpMV9zb21pIiwgInNkbW1jMl9kYXQ2IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTczIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ1NQSTJfQ0xLLCAxNzgsCisJCSJtY3NwaTJfY2xrIiwgTlVMTCwgImhzdXNiMl90bGxfZGF0YTciLCAiaHN1c2IyX2RhdGE3IiwKKwkJImdwaW9fMTc4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ1NQSTJfQ1MwLCAxODEsCisJCSJtY3NwaTJfY3MwIiwgImdwdDExX3B3bV9ldnQiLAorCQkiaHN1c2IyX3RsbF9kYXRhNiIsICJoc3VzYjJfZGF0YTYiLAorCQkiZ3Bpb18xODEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DU1BJMl9DUzEsIDE4MiwKKwkJIm1jc3BpMl9jczEiLCAiZ3B0OF9wd21fZXZ0IiwKKwkJImhzdXNiMl90bGxfZGF0YTMiLCAiaHN1c2IyX2RhdGEzIiwKKwkJImdwaW9fMTgyIiwgIm1tMl90eGVuX24iLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DU1BJMl9TSU1PLCAxNzksCisJCSJtY3NwaTJfc2ltbyIsICJncHQ5X3B3bV9ldnQiLAorCQkiaHN1c2IyX3RsbF9kYXRhNCIsICJoc3VzYjJfZGF0YTQiLAorCQkiZ3Bpb18xNzkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DU1BJMl9TT01JLCAxODAsCisJCSJtY3NwaTJfc29taSIsICJncHQxMF9wd21fZXZ0IiwKKwkJImhzdXNiMl90bGxfZGF0YTUiLCAiaHN1c2IyX2RhdGE1IiwKKwkJImdwaW9fMTgwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfQ0xLLCAxMjAsCisJCSJzZG1tYzFfY2xrIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTIwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfQ01ELCAxMjEsCisJCSJzZG1tYzFfY21kIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTIxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfREFUMCwgMTIyLAorCQkic2RtbWMxX2RhdDAiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMV9EQVQxLCAxMjMsCisJCSJzZG1tYzFfZGF0MSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyMyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RNTUMxX0RBVDIsIDEyNCwKKwkJInNkbW1jMV9kYXQyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTI0IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfREFUMywgMTI1LAorCQkic2RtbWMxX2RhdDMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMV9EQVQ0LCAxMjYsCisJCSJzZG1tYzFfZGF0NCIsIE5VTEwsICJzaW1faW8iLCBOVUxMLAorCQkiZ3Bpb18xMjYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMV9EQVQ1LCAxMjcsCisJCSJzZG1tYzFfZGF0NSIsIE5VTEwsICJzaW1fY2xrIiwgTlVMTCwKKwkJImdwaW9fMTI3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfREFUNiwgMTI4LAorCQkic2RtbWMxX2RhdDYiLCBOVUxMLCAic2ltX3B3cmN0cmwiLCBOVUxMLAorCQkiZ3Bpb18xMjgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMV9EQVQ3LCAxMjksCisJCSJzZG1tYzFfZGF0NyIsIE5VTEwsICJzaW1fcnN0IiwgTlVMTCwKKwkJImdwaW9fMTI5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzJfQ0xLLCAxMzAsCisJCSJzZG1tYzJfY2xrIiwgIm1jc3BpM19jbGsiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMzAiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMl9DTUQsIDEzMSwKKwkJInNkbW1jMl9jbWQiLCAibWNzcGkzX3NpbW8iLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMzEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMl9EQVQwLCAxMzIsCisJCSJzZG1tYzJfZGF0MCIsICJtY3NwaTNfc29taSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEzMiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RNTUMyX0RBVDEsIDEzMywKKwkJInNkbW1jMl9kYXQxIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTMzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzJfREFUMiwgMTM0LAorCQkic2RtbWMyX2RhdDIiLCAibWNzcGkzX2NzMSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEzNCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RNTUMyX0RBVDMsIDEzNSwKKwkJInNkbW1jMl9kYXQzIiwgIm1jc3BpM19jczAiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMzUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMl9EQVQ0LCAxMzYsCisJCSJzZG1tYzJfZGF0NCIsICJzZG1tYzJfZGlyX2RhdDAiLCBOVUxMLCAic2RtbWMzX2RhdDAiLAorCQkiZ3Bpb18xMzYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMl9EQVQ1LCAxMzcsCisJCSJzZG1tYzJfZGF0NSIsICJzZG1tYzJfZGlyX2RhdDEiLAorCQkiY2FtX2dsb2JhbF9yZXNldCIsICJzZG1tYzNfZGF0MSIsCisJCSJncGlvXzEzNyIsICJoc3VzYjNfdGxsX3N0cCIsICJtbTNfcnhkcCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RNTUMyX0RBVDYsIDEzOCwKKwkJInNkbW1jMl9kYXQ2IiwgInNkbW1jMl9kaXJfY21kIiwgImNhbV9zaHV0dGVyIiwgInNkbW1jM19kYXQyIiwKKwkJImdwaW9fMTM4IiwgImhzdXNiM190bGxfZGlyIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzJfREFUNywgMTM5LAorCQkic2RtbWMyX2RhdDciLCAic2RtbWMyX2Nsa2luIiwgTlVMTCwgInNkbW1jM19kYXQzIiwKKwkJImdwaW9fMTM5IiwgImhzdXNiM190bGxfbnh0IiwgIm1tM19yeGRtIiwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRFJDX0NLRTAsIDAsCisJCSJzZHJjX2NrZTAiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNEUkNfQ0tFMSwgMCwKKwkJInNkcmNfY2tlMSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX0JPT1QwLCAyLAorCQkic3lzX2Jvb3QwIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX0JPT1QxLCAzLAorCQkic3lzX2Jvb3QxIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX0JPT1QyLCA0LAorCQkic3lzX2Jvb3QyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX0JPT1QzLCA1LAorCQkic3lzX2Jvb3QzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX0JPT1Q0LCA2LAorCQkic3lzX2Jvb3Q0IiwgInNkbW1jMl9kaXJfZGF0MiIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNZU19CT09UNSwgNywKKwkJInN5c19ib290NSIsICJzZG1tYzJfZGlyX2RhdDMiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb183IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQk9PVDYsIDgsCisJCSJzeXNfYm9vdDYiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb184IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQ0xLT1VUMSwgMTAsCisJCSJzeXNfY2xrb3V0MSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQ0xLT1VUMiwgMTg2LAorCQkic3lzX2Nsa291dDIiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xODYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNZU19DTEtSRVEsIDEsCisJCSJzeXNfY2xrcmVxIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX05JUlEsIDAsCisJCSJzeXNfbmlycSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzAiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNZU19OUkVTV0FSTSwgMzAsCisJCSJzeXNfbnJlc3dhcm0iLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18zMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX09GRl9NT0RFLCA5LAorCQkic3lzX29mZl9tb2RlIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fOSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoVUFSVDFfQ1RTLCAxNTAsCisJCSJ1YXJ0MV9jdHMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xNTAiLCAiaHN1c2IzX3RsbF9jbGsiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFVBUlQxX1JUUywgMTQ5LAorCQkidWFydDFfcnRzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTQ5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShVQVJUMV9SWCwgMTUxLAorCQkidWFydDFfcngiLCBOVUxMLCAibWNic3AxX2Nsa3IiLCAibWNzcGk0X2NsayIsCisJCSJncGlvXzE1MSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoVUFSVDFfVFgsIDE0OCwKKwkJInVhcnQxX3R4IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTQ4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShVQVJUMl9DVFMsIDE0NCwKKwkJInVhcnQyX2N0cyIsICJtY2JzcDNfZHgiLCAiZ3B0OV9wd21fZXZ0IiwgTlVMTCwKKwkJImdwaW9fMTQ0IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShVQVJUMl9SVFMsIDE0NSwKKwkJInVhcnQyX3J0cyIsICJtY2JzcDNfZHIiLCAiZ3B0MTBfcHdtX2V2dCIsIE5VTEwsCisJCSJncGlvXzE0NSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoVUFSVDJfUlgsIDE0NywKKwkJInVhcnQyX3J4IiwgIm1jYnNwM19mc3giLCAiZ3B0OF9wd21fZXZ0IiwgTlVMTCwKKwkJImdwaW9fMTQ3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShVQVJUMl9UWCwgMTQ2LAorCQkidWFydDJfdHgiLCAibWNic3AzX2Nsa3giLCAiZ3B0MTFfcHdtX2V2dCIsIE5VTEwsCisJCSJncGlvXzE0NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoVUFSVDNfQ1RTX1JDVFgsIDE2MywKKwkJInVhcnQzX2N0c19yY3R4IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTYzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShVQVJUM19SVFNfU0QsIDE2NCwKKwkJInVhcnQzX3J0c19zZCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE2NCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoVUFSVDNfUlhfSVJSWCwgMTY1LAorCQkidWFydDNfcnhfaXJyeCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE2NSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoVUFSVDNfVFhfSVJUWCwgMTY2LAorCQkidWFydDNfdHhfaXJ0eCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE2NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKworLyoKKyAqIFNpZ25hbHMgZGlmZmVyZW50IG9uIENCQyBwYWNrYWdlIGNvbXBhcmVkIHRvIHRoZSBzdXBlcnNldAorICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX09NQVBfUEFDS0FHRV9DQkMpCitzdHJ1Y3Qgb21hcF9tdXggX19pbml0ZGF0YSBvbWFwM19jYmNfc3Vic2V0W10gPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBvbWFwM19jYmNfc3Vic2V0CU5VTEwKKyNlbmRpZgorCisvKgorICogQmFsbHMgZm9yIENCQyBwYWNrYWdlCisgKiA1MTUtcGluIHMtUEJHQSBQYWNrYWdlLCAwLjY1bW0gQmFsbCBQaXRjaCAoVG9wKSwgMC41MG1tIEJhbGwgUGl0Y2ggKEJvdHRvbSkKKyAqCisgKiBGSVhNRTogV2hhdCdzIHVwIHdpdGggdGhlIG91dGRhdGVkIFRJIGRvY3VtZW50YXRpb24/IFNlZToKKyAqCisgKiBodHRwOi8vd2lraS5kYXZpbmNpZHNwLmNvbS9pbmRleC5waHAvRGF0YXNoZWV0X0VycmF0YV9mb3JfT01BUDM1eF9DQkNfUGFja2FnZQorICogaHR0cDovL2NvbW11bml0eS50aS5jb20vZm9ydW1zL3QvMTA5ODIuYXNweAorICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQlcCisJCSYmIGRlZmluZWQoQ09ORklHX09NQVBfUEFDS0FHRV9DQkMpCitzdHJ1Y3Qgb21hcF9iYWxsIF9faW5pdGRhdGEgb21hcDNfY2JjX2JhbGxbXSA9IHsKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMCwgImFlMTYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMSwgImFlMTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMTAsICJkMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMTEsICJlMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMiwgImEyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0QzLCAiYjI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDQsICJkMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9ENSwgImMyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q2LCAicDI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDcsICJwMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EOCwgIm4yNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q5LCAibjI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRkxELCAiYjIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fSFMsICJjMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9QQ0xLLCAiYzI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fU1RST0JFLCAiZDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fVlMsICJkMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9XRU4sICJhMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9YQ0xLQSwgImMyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1hDTEtCLCAiZTI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDU0kyX0RYMCwgImFkMTciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENTSTJfRFgxLCAiYWUxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ1NJMl9EWTAsICJhZDE2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDU0kyX0RZMSwgImFlMTciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19BQ0JJQVMsICJmMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMCwgImFlMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMSwgImFlMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTAsICJhYzI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTExLCAiYWQyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExMiwgImFhMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTMsICJ5MjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTQsICJhYTI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE1LCAiYWIyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExNiwgImwyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExNywgImwyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExOCwgIm0yNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExOSwgIm0yNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEEyLCAiYWUyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEEyMCwgImYyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEEyMSwgIm4yNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEEyMiwgImFjMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMjMsICJhYjI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTMsICJhZTI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTQsICJhZDIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTUsICJhZDI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTYsICJnMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNywgImgyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEE4LCAiaDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTksICJqMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19IU1lOQywgImsyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX1BDTEssICJnMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19WU1lOQywgIm0yNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0NMSywgImFiMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0NUTCwgImFiMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QwLCAiYWMzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDEsICJhZDQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTAsICJhZTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTEsICJhZjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTIsICJhZTYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTMsICJhZjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTQsICJhZjkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTUsICJhZTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMiwgImFkMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QzLCAiYWEzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDQsICJ5MyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q1LCAiYWIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDYsICJhZTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19ENywgImFkMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q4LCAiYWE0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDksICJ2MiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BMSwgImoyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0ExMCwgImQyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0EyLCAiaDEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTMsICJoMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BNCwgImcyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E1LCAiZjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTYsICJmMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BNywgImUxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E4LCAiZTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTksICJkMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19DTEssICJuMSIsICJsMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTAsICJ0MSIsICJuMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTEsICJ1MiIsICJwMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTIsICJ1MSIsICJwMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTMsICJwMSIsICJtMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTQsICJsMiIsICJqMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTUsICJtMiIsICJrMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EOCwgInYxIiwgInIxIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0Q5LCAieTEiLCAidDEiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkJFMF9DTEUsICJrMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQkUxLCAiajEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTMSwgImFkMSIsICJ3MSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1MyLCAiYTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTMywgImI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzQsICJiNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1M1LCAiYzQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTNiwgImI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzcsICJjNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OV1AsICJhYzYiLCAieTUiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfV0FJVDEsICJhYzgiLCAieTgiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfV0FJVDIsICJiMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19XQUlUMywgImM2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIRFFfU0lPLCAiajIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfQ0xLLCAidzE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTAsICJ2MjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBMSwgInkyMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEEyLCAidjE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTMsICJ3MjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBNCwgIncxNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEE1LCAieTE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTYsICJ5MTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBNywgInkxNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RJUiwgInYxOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX05YVCwgIncxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX1NUUCwgInUyMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDMl9TQ0wsICJjMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDMl9TREEsICJjMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDM19TQ0wsICJhYjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzNfU0RBLCAiYWM0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkM0X1NDTCwgImFkMTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzRfU0RBLCAidzE2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX0VNVTAsICJ5MTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEpUQUdfRU1VMSwgInkxNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0NMS1IsICJ1MTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9DTEtYLCAidDE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDFfRFIsICJ0MjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9EWCwgInUxNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0ZTUiwgInYxNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0ZTWCwgInAyMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AyX0NMS1gsICJyMTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMl9EUiwgInQxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AyX0RYLCAicjE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDJfRlNYLCAidTE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDNfQ0xLWCwgInUzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDNfRFIsICJuMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AzX0RYLCAicDMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQM19GU1gsICJ3MyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1A0X0NMS1gsICJ2MyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1A0X0RSLCAidTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQNF9EWCwgInIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDRfRlNYLCAidDMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQX0NMS1MsICJ0MTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DTEssICJwOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NTMCwgInI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTFfQ1MxLCAicjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DUzIsICJyOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NTMywgInQ4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTFfU0lNTywgInA4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTFfU09NSSwgInA3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfQ0xLLCAidzciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMl9DUzAsICJ2OCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX0NTMSwgInY5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfU0lNTywgInc4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfU09NSSwgInU4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfQ0xLLCAibjE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfQ01ELCAibDE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUMCwgIm0xOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDEsICJtMTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQyLCAiazE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUMywgIm4yMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDQsICJtMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQ1LCAicDE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUNiwgInAxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDcsICJwMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9DTEssICJ3MTAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9DTUQsICJyMTAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQwLCAidDEwIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMSwgInQ5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMiwgInUxMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDMsICJ1OSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDQsICJ2MTAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ1LCAibTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ2LCAibDMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ3LCAiazMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMCwgImYzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDEsICJkMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX0JPT1QyLCAiYzMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMywgImUzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDQsICJlNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX0JPT1Q1LCAiZzMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNiwgImQ0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQ0xLT1VUMSwgImFlMTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19DTEtPVVQyLCAidzExIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQ0xLUkVRLCAidzE1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfTklSUSwgInYxNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX05SRVNXQVJNLCAiYWQ3IiwgImFhNSIpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX09GRl9NT0RFLCAidjEyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9DVFMsICJ3MiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDFfUlRTLCAicjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQxX1JYLCAiaDMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQxX1RYLCAibDQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQyX0NUUywgInkyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfUlRTLCAiYWEyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfUlgsICJhZDIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMl9UWCwgImFkMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX0NUU19SQ1RYLCAiZjIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUM19SVFNfU0QsICJmMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1JYX0lSUlgsICJoMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1RYX0lSVFgsICJnMjQiLCBOVUxMKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIG9tYXAzX2NiY19iYWxsCSBOVUxMCisjZW5kaWYKKworLyoKKyAqIFNpZ25hbHMgZGlmZmVyZW50IG9uIENVUyBwYWNrYWdlIGNvbXBhcmVkIHRvIHN1cGVyc2V0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWCkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9QQUNLQUdFX0NVUykKK3N0cnVjdCBvbWFwX211eCBfX2luaXRkYXRhIG9tYXAzX2N1c19zdWJzZXRbXSA9IHsKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QxMCwgMTA5LAorCQkiY2FtX2QxMCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwOSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QxMSwgMTEwLAorCQkiY2FtX2QxMSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzExMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QyLCAxMDEsCisJCSJjYW1fZDIiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9EMywgMTAyLAorCQkiY2FtX2QzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTAyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDQsIDEwMywKKwkJImNhbV9kNCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwMyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0Q1LCAxMDQsCisJCSJjYW1fZDUiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9GTEQsIDk4LAorCQkiY2FtX2ZsZCIsIE5VTEwsICJjYW1fZ2xvYmFsX3Jlc2V0IiwgTlVMTCwKKwkJImdwaW9fOTgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9IUywgOTQsCisJCSJjYW1faHMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb185NCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX1BDTEssIDk3LAorCQkiY2FtX3BjbGsiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb185NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX1NUUk9CRSwgMTI2LAorCQkiY2FtX3N0cm9iZSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyNiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX1ZTLCA5NSwKKwkJImNhbV92cyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzk1IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fV0VOLCAxNjcsCisJCSJjYW1fd2VuIiwgTlVMTCwgImNhbV9zaHV0dGVyIiwgTlVMTCwKKwkJImdwaW9fMTY3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTYsIDc2LAorCQkiZHNzX2RhdGE2IiwgTlVMTCwgInVhcnQxX3R4IiwgTlVMTCwKKwkJImdwaW9fNzYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBNywgNzcsCisJCSJkc3NfZGF0YTciLCBOVUxMLCAidWFydDFfcngiLCBOVUxMLAorCQkiZ3Bpb183NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE4LCA3OCwKKwkJImRzc19kYXRhOCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzc4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTksIDc5LAorCQkiZHNzX2RhdGE5IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNzkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19IU1lOQywgNjcsCisJCSJkc3NfaHN5bmMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb182NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX1BDTEssIDY2LAorCQkiZHNzX3BjbGsiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb182NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0NMSywgMTIsCisJCSJldGtfY2xrIiwgIm1jYnNwNV9jbGt4IiwgInNkbW1jM19jbGsiLCAiaHN1c2IxX3N0cCIsCisJCSJncGlvXzEyIiwgIm1tMV9yeGRwIiwgImhzdXNiMV90bGxfc3RwIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19DVEwsIDEzLAorCQkiZXRrX2N0bCIsIE5VTEwsICJzZG1tYzNfY21kIiwgImhzdXNiMV9jbGsiLAorCQkiZ3Bpb18xMyIsIE5VTEwsICJoc3VzYjFfdGxsX2NsayIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDAsIDE0LAorCQkiZXRrX2QwIiwgIm1jc3BpM19zaW1vIiwgInNkbW1jM19kYXQ0IiwgImhzdXNiMV9kYXRhMCIsCisJCSJncGlvXzE0IiwgIm1tMV9yeHJjdiIsICJoc3VzYjFfdGxsX2RhdGEwIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMSwgMTUsCisJCSJldGtfZDEiLCAibWNzcGkzX3NvbWkiLCBOVUxMLCAiaHN1c2IxX2RhdGExIiwKKwkJImdwaW9fMTUiLCAibW0xX3R4c2UwIiwgImhzdXNiMV90bGxfZGF0YTEiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxMCwgMjQsCisJCSJldGtfZDEwIiwgTlVMTCwgInVhcnQxX3J4IiwgImhzdXNiMl9jbGsiLAorCQkiZ3Bpb18yNCIsIE5VTEwsICJoc3VzYjJfdGxsX2NsayIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDExLCAyNSwKKwkJImV0a19kMTEiLCBOVUxMLCBOVUxMLCAiaHN1c2IyX3N0cCIsCisJCSJncGlvXzI1IiwgIm1tMl9yeGRwIiwgImhzdXNiMl90bGxfc3RwIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMTIsIDI2LAorCQkiZXRrX2QxMiIsIE5VTEwsIE5VTEwsICJoc3VzYjJfZGlyIiwKKwkJImdwaW9fMjYiLCBOVUxMLCAiaHN1c2IyX3RsbF9kaXIiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxMywgMjcsCisJCSJldGtfZDEzIiwgTlVMTCwgTlVMTCwgImhzdXNiMl9ueHQiLAorCQkiZ3Bpb18yNyIsICJtbTJfcnhkbSIsICJoc3VzYjJfdGxsX254dCIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDE0LCAyOCwKKwkJImV0a19kMTQiLCBOVUxMLCBOVUxMLCAiaHN1c2IyX2RhdGEwIiwKKwkJImdwaW9fMjgiLCAibW0yX3J4cmN2IiwgImhzdXNiMl90bGxfZGF0YTAiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxNSwgMjksCisJCSJldGtfZDE1IiwgTlVMTCwgTlVMTCwgImhzdXNiMl9kYXRhMSIsCisJCSJncGlvXzI5IiwgIm1tMl90eHNlMCIsICJoc3VzYjJfdGxsX2RhdGExIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMiwgMTYsCisJCSJldGtfZDIiLCAibWNzcGkzX2NzMCIsIE5VTEwsICJoc3VzYjFfZGF0YTIiLAorCQkiZ3Bpb18xNiIsICJtbTFfdHhkYXQiLCAiaHN1c2IxX3RsbF9kYXRhMiIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDMsIDE3LAorCQkiZXRrX2QzIiwgIm1jc3BpM19jbGsiLCAic2RtbWMzX2RhdDMiLCAiaHN1c2IxX2RhdGE3IiwKKwkJImdwaW9fMTciLCBOVUxMLCAiaHN1c2IxX3RsbF9kYXRhNyIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDQsIDE4LAorCQkiZXRrX2Q0IiwgIm1jYnNwNV9kciIsICJzZG1tYzNfZGF0MCIsICJoc3VzYjFfZGF0YTQiLAorCQkiZ3Bpb18xOCIsIE5VTEwsICJoc3VzYjFfdGxsX2RhdGE0IiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19ENSwgMTksCisJCSJldGtfZDUiLCAibWNic3A1X2ZzeCIsICJzZG1tYzNfZGF0MSIsICJoc3VzYjFfZGF0YTUiLAorCQkiZ3Bpb18xOSIsIE5VTEwsICJoc3VzYjFfdGxsX2RhdGE1IiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19ENiwgMjAsCisJCSJldGtfZDYiLCAibWNic3A1X2R4IiwgInNkbW1jM19kYXQyIiwgImhzdXNiMV9kYXRhNiIsCisJCSJncGlvXzIwIiwgTlVMTCwgImhzdXNiMV90bGxfZGF0YTYiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q3LCAyMSwKKwkJImV0a19kNyIsICJtY3NwaTNfY3MxIiwgInNkbW1jM19kYXQ3IiwgImhzdXNiMV9kYXRhMyIsCisJCSJncGlvXzIxIiwgIm1tMV90eGVuX24iLCAiaHN1c2IxX3RsbF9kYXRhMyIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDgsIDIyLAorCQkiZXRrX2Q4IiwgInN5c19kcm1fbXNlY3VyZSIsICJzZG1tYzNfZGF0NiIsICJoc3VzYjFfZGlyIiwKKwkJImdwaW9fMjIiLCBOVUxMLCAiaHN1c2IxX3RsbF9kaXIiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q5LCAyMywKKwkJImV0a19kOSIsICJzeXNfc2VjdXJlX2luZGljYXRvciIsICJzZG1tYzNfZGF0NSIsICJoc3VzYjFfbnh0IiwKKwkJImdwaW9fMjMiLCAibW0xX3J4ZG0iLCAiaHN1c2IxX3RsbF9ueHQiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AzX0NMS1gsIDE0MiwKKwkJIm1jYnNwM19jbGt4IiwgInVhcnQyX3R4IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTQyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDNfRFIsIDE0MSwKKwkJIm1jYnNwM19kciIsICJ1YXJ0Ml9ydHMiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xNDEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQM19EWCwgMTQwLAorCQkibWNic3AzX2R4IiwgInVhcnQyX2N0cyIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE0MCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AzX0ZTWCwgMTQzLAorCQkibWNic3AzX2ZzeCIsICJ1YXJ0Ml9yeCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE0MyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RNTUMyX0RBVDUsIDEzNywKKwkJInNkbW1jMl9kYXQ1IiwgInNkbW1jMl9kaXJfZGF0MSIsCisJCSJjYW1fZ2xvYmFsX3Jlc2V0IiwgInNkbW1jM19kYXQxIiwKKwkJImdwaW9fMTM3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzJfREFUNiwgMTM4LAorCQkic2RtbWMyX2RhdDYiLCAic2RtbWMyX2Rpcl9jbWQiLCAiY2FtX3NodXR0ZXIiLCAic2RtbWMzX2RhdDIiLAorCQkiZ3Bpb18xMzgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMl9EQVQ3LCAxMzksCisJCSJzZG1tYzJfZGF0NyIsICJzZG1tYzJfY2xraW4iLCBOVUxMLCAic2RtbWMzX2RhdDMiLAorCQkiZ3Bpb18xMzkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFVBUlQxX0NUUywgMTUwLAorCQkidWFydDFfY3RzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTUwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgb21hcDNfY3VzX3N1YnNldAlOVUxMCisjZW5kaWYKKworLyoKKyAqIEJhbGxzIGZvciBDVVMgcGFja2FnZQorICogNDIzLXBpbiBzLVBCR0EgUGFja2FnZSwgMC42NW1tIEJhbGwgUGl0Y2ggKEJvdHRvbSkKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykJCVwKKwkJJiYgZGVmaW5lZChDT05GSUdfT01BUF9QQUNLQUdFX0NVUykKK3N0cnVjdCBvbWFwX2JhbGwgX19pbml0ZGF0YSBvbWFwM19jdXNfYmFsbFtdID0geworCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0QwLCAiYWIxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0QxLCAiYWMxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0QxMCwgImYyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0QxMSwgImcyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0QyLCAiZzE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDMsICJmMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9ENCwgImcyMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q1LCAiYjIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDYsICJsMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9ENywgImsyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q4LCAiajIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDksICJrMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9GTEQsICJoMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9IUywgImEyMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1BDTEssICJqMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9TVFJPQkUsICJqMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9WUywgImUxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1dFTiwgImYxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1hDTEtBLCAiYjIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fWENMS0IsICJjMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19BQ0JJQVMsICJqMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMCwgImFjMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMSwgImFiMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTAsICJhYzIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTExLCAiYWMyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExMiwgImFiMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTMsICJ5MjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTQsICJ3MjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTUsICJ2MjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTYsICJqMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTcsICJnMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTgsICJnMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTksICJoMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMiwgImFkMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMjAsICJkMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMjEsICJrMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMjIsICJ2MjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMjMsICJ3MjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMywgImFjMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNCwgImFkMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNSwgImFjMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNiwgImQyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEE3LCAiZTIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTgsICJlMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBOSwgImYyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0hTWU5DLCAiZTIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfUENMSywgImcyMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX1ZTWU5DLCAiZjIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfQ0xLLCAiYWMxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfQ1RMLCAiYWQzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDAsICJhZDYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMSwgImFjNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QxMCwgImFjMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QxMSwgImFjOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QxMiwgImFjMTAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTMsICJhZDExIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDE0LCAiYWMxMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QxNSwgImFkMTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMiwgImFjNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0QzLCAiYWQ4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDQsICJhYzUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19ENSwgImFkMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q2LCAiYWM4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDcsICJhZDkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EOCwgImFjNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q5LCAiYWQ1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0ExLCAiazQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTEwLCAiZzIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTIsICJrMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BMywgImsyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E0LCAiajQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTUsICJqMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BNiwgImoyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E3LCAiajEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTgsICJoMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BOSwgImgyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0NMSywgIncyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxMCwgInUxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxMSwgInIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxMiwgInQzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxMywgInUyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxNCwgInYxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxNSwgInYyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0Q4LCAicjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDksICJ0MiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQkUwX0NMRSwgIms1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05CRTEsICJsMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1MzLCAiZDIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTNCwgImY0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzUsICJnNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1M2LCAiZjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTNywgImc0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05XUCwgImUxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX1dBSVQzLCAiYzIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhEUV9TSU8sICJhMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9DTEssICJyMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBMCwgInQyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEExLCAidDIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTIsICJ1MjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBMywgInUyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEE0LCAidzI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTUsICJ2MjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBNiwgIncyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEE3LCAidDIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfRElSLCAicDIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfTlhULCAicjIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfU1RQLCAicjIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkMyX1NDTCwgImFjMTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzJfU0RBLCAiYWMxNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDM19TQ0wsICJhYzEzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkMzX1NEQSwgImFjMTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzRfU0NMLCAieTE2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkM0X1NEQSwgInkxNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSlRBR19FTVUwLCAiYWMyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSlRBR19FTVUxLCAiYWQyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0NMS1IsICJ3MTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9DTEtYLCAidjE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDFfRFIsICJ5MTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9EWCwgIncxOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0ZTUiwgImFiMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9GU1gsICJhYTE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDJfQ0xLWCwgInQyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AyX0RSLCAidjE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDJfRFgsICJyMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMl9GU1gsICJ2MjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQM19DTEtYLCAidzQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQM19EUiwgInY1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDNfRFgsICJ2NiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AzX0ZTWCwgInY0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUF9DTEtTLCAiYWExOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NMSywgInQ1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTFfQ1MwLCAidDYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DUzMsICJyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX1NJTU8sICJyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX1NPTUksICJ0NCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX0NMSywgIm41IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfQ1MwLCAibTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMl9DUzEsICJtNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX1NJTU8sICJuNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX1NPTUksICJuMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0NMSywgIm0yMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0NNRCwgImwyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDAsICJtMjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQxLCAibTIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUMiwgIm0yMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDMsICJuMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQ0LCAibjIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUNSwgIm4yMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDYsICJuMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQ3LCAicDI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfQ0xLLCAieTEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9DTUQsICJhYjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQwLCAiYWIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMSwgInkzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMiwgInczIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMywgInYzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUNCwgImFiMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDUsICJhYTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ2LCAieTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ3LCAiYWExIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDAsICJhYjEyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDEsICJhYzE2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDIsICJhZDE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDMsICJhZDE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDQsICJhYzE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDUsICJhYjE2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQk9PVDYsICJhYTE1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQ0xLT1VUMSwgInk3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQ0xLT1VUMiwgImFhNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX0NMS1JFUSwgInkxMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX05JUlEsICJ3MTYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19OUkVTV0FSTSwgInkxMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX09GRl9NT0RFLCAiYWQyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDFfQ1RTLCAiYWMyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9SVFMsICJ3NiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDFfUlgsICJ2NyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDFfVFgsICJ3NyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDNfQ1RTX1JDVFgsICJhMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1JUU19TRCwgImIyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDNfUlhfSVJSWCwgImIyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDNfVFhfSVJUWCwgImMyMyIsIE5VTEwpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgb21hcDNfY3VzX2JhbGwJIE5VTEwKKyNlbmRpZgorCisvKgorICogU2lnbmFscyBkaWZmZXJlbnQgb24gQ0JCIHBhY2thZ2UgY29tYXBhcmVkIHRvIHN1cGVyc2V0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWCkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9QQUNLQUdFX0NCQikKK3N0cnVjdCBvbWFwX211eCBfX2luaXRkYXRhIG9tYXAzX2NiYl9zdWJzZXRbXSA9IHsKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QxMCwgMTA5LAorCQkiY2FtX2QxMCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwOSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QxMSwgMTEwLAorCQkiY2FtX2QxMSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzExMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0QyLCAxMDEsCisJCSJjYW1fZDIiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9EMywgMTAyLAorCQkiY2FtX2QzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTAyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDQsIDEwMywKKwkJImNhbV9kNCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwMyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0Q1LCAxMDQsCisJCSJjYW1fZDUiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9GTEQsIDk4LAorCQkiY2FtX2ZsZCIsIE5VTEwsICJjYW1fZ2xvYmFsX3Jlc2V0IiwgTlVMTCwKKwkJImdwaW9fOTgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9IUywgOTQsCisJCSJjYW1faHMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb185NCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX1BDTEssIDk3LAorCQkiY2FtX3BjbGsiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb185NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX1NUUk9CRSwgMTI2LAorCQkiY2FtX3N0cm9iZSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyNiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX1ZTLCA5NSwKKwkJImNhbV92cyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzk1IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fV0VOLCAxNjcsCisJCSJjYW1fd2VuIiwgTlVMTCwgImNhbV9zaHV0dGVyIiwgTlVMTCwKKwkJImdwaW9fMTY3IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTYsIDc2LAorCQkiZHNzX2RhdGE2IiwgTlVMTCwgInVhcnQxX3R4IiwgTlVMTCwKKwkJImdwaW9fNzYiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBNywgNzcsCisJCSJkc3NfZGF0YTciLCBOVUxMLCAidWFydDFfcngiLCBOVUxMLAorCQkiZ3Bpb183NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE4LCA3OCwKKwkJImRzc19kYXRhOCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzc4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTksIDc5LAorCQkiZHNzX2RhdGE5IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fNzkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19IU1lOQywgNjcsCisJCSJkc3NfaHN5bmMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb182NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX1BDTEssIDY2LAorCQkiZHNzX3BjbGsiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb182NiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0NMSywgMTIsCisJCSJldGtfY2xrIiwgIm1jYnNwNV9jbGt4IiwgInNkbW1jM19jbGsiLCAiaHN1c2IxX3N0cCIsCisJCSJncGlvXzEyIiwgIm1tMV9yeGRwIiwgImhzdXNiMV90bGxfc3RwIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19DVEwsIDEzLAorCQkiZXRrX2N0bCIsIE5VTEwsICJzZG1tYzNfY21kIiwgImhzdXNiMV9jbGsiLAorCQkiZ3Bpb18xMyIsIE5VTEwsICJoc3VzYjFfdGxsX2NsayIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDAsIDE0LAorCQkiZXRrX2QwIiwgIm1jc3BpM19zaW1vIiwgInNkbW1jM19kYXQ0IiwgImhzdXNiMV9kYXRhMCIsCisJCSJncGlvXzE0IiwgIm1tMV9yeHJjdiIsICJoc3VzYjFfdGxsX2RhdGEwIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMSwgMTUsCisJCSJldGtfZDEiLCAibWNzcGkzX3NvbWkiLCBOVUxMLCAiaHN1c2IxX2RhdGExIiwKKwkJImdwaW9fMTUiLCAibW0xX3R4c2UwIiwgImhzdXNiMV90bGxfZGF0YTEiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxMCwgMjQsCisJCSJldGtfZDEwIiwgTlVMTCwgInVhcnQxX3J4IiwgImhzdXNiMl9jbGsiLAorCQkiZ3Bpb18yNCIsIE5VTEwsICJoc3VzYjJfdGxsX2NsayIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDExLCAyNSwKKwkJImV0a19kMTEiLCBOVUxMLCBOVUxMLCAiaHN1c2IyX3N0cCIsCisJCSJncGlvXzI1IiwgIm1tMl9yeGRwIiwgImhzdXNiMl90bGxfc3RwIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMTIsIDI2LAorCQkiZXRrX2QxMiIsIE5VTEwsIE5VTEwsICJoc3VzYjJfZGlyIiwKKwkJImdwaW9fMjYiLCBOVUxMLCAiaHN1c2IyX3RsbF9kaXIiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxMywgMjcsCisJCSJldGtfZDEzIiwgTlVMTCwgTlVMTCwgImhzdXNiMl9ueHQiLAorCQkiZ3Bpb18yNyIsICJtbTJfcnhkbSIsICJoc3VzYjJfdGxsX254dCIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDE0LCAyOCwKKwkJImV0a19kMTQiLCBOVUxMLCBOVUxMLCAiaHN1c2IyX2RhdGEwIiwKKwkJImdwaW9fMjgiLCAibW0yX3J4cmN2IiwgImhzdXNiMl90bGxfZGF0YTAiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0QxNSwgMjksCisJCSJldGtfZDE1IiwgTlVMTCwgTlVMTCwgImhzdXNiMl9kYXRhMSIsCisJCSJncGlvXzI5IiwgIm1tMl90eHNlMCIsICJoc3VzYjJfdGxsX2RhdGExIiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMiwgMTYsCisJCSJldGtfZDIiLCAibWNzcGkzX2NzMCIsIE5VTEwsICJoc3VzYjFfZGF0YTIiLAorCQkiZ3Bpb18xNiIsICJtbTFfdHhkYXQiLCAiaHN1c2IxX3RsbF9kYXRhMiIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDMsIDE3LAorCQkiZXRrX2QzIiwgIm1jc3BpM19jbGsiLCAic2RtbWMzX2RhdDMiLCAiaHN1c2IxX2RhdGE3IiwKKwkJImdwaW9fMTciLCBOVUxMLCAiaHN1c2IxX3RsbF9kYXRhNyIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDQsIDE4LAorCQkiZXRrX2Q0IiwgIm1jYnNwNV9kciIsICJzZG1tYzNfZGF0MCIsICJoc3VzYjFfZGF0YTQiLAorCQkiZ3Bpb18xOCIsIE5VTEwsICJoc3VzYjFfdGxsX2RhdGE0IiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19ENSwgMTksCisJCSJldGtfZDUiLCAibWNic3A1X2ZzeCIsICJzZG1tYzNfZGF0MSIsICJoc3VzYjFfZGF0YTUiLAorCQkiZ3Bpb18xOSIsIE5VTEwsICJoc3VzYjFfdGxsX2RhdGE1IiwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKEVUS19ENiwgMjAsCisJCSJldGtfZDYiLCAibWNic3A1X2R4IiwgInNkbW1jM19kYXQyIiwgImhzdXNiMV9kYXRhNiIsCisJCSJncGlvXzIwIiwgTlVMTCwgImhzdXNiMV90bGxfZGF0YTYiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q3LCAyMSwKKwkJImV0a19kNyIsICJtY3NwaTNfY3MxIiwgInNkbW1jM19kYXQ3IiwgImhzdXNiMV9kYXRhMyIsCisJCSJncGlvXzIxIiwgIm1tMV90eGVuX24iLCAiaHN1c2IxX3RsbF9kYXRhMyIsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShFVEtfRDgsIDIyLAorCQkiZXRrX2Q4IiwgInN5c19kcm1fbXNlY3VyZSIsICJzZG1tYzNfZGF0NiIsICJoc3VzYjFfZGlyIiwKKwkJImdwaW9fMjIiLCBOVUxMLCAiaHN1c2IxX3RsbF9kaXIiLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoRVRLX0Q5LCAyMywKKwkJImV0a19kOSIsICJzeXNfc2VjdXJlX2luZGljYXRvciIsICJzZG1tYzNfZGF0NSIsICJoc3VzYjFfbnh0IiwKKwkJImdwaW9fMjMiLCAibW0xX3J4ZG0iLCAiaHN1c2IxX3RsbF9ueHQiLCBOVUxMKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIG9tYXAzX2NiYl9zdWJzZXQJTlVMTAorI2VuZGlmCisKKy8qCisgKiBCYWxscyBmb3IgQ0JCIHBhY2thZ2UKKyAqIDUxNS1waW4gcy1QQkdBIFBhY2thZ2UsIDAuNTBtbSBCYWxsIFBpdGNoIChUb3ApLCAwLjQwbW0gQmFsbCBQaXRjaCAoQm90dG9tKQorICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQkJXAorCQkmJiBkZWZpbmVkKENPTkZJR19PTUFQX1BBQ0tBR0VfQ0JCKQorc3RydWN0IG9tYXBfYmFsbCBfX2luaXRkYXRhIG9tYXAzX2NiYl9iYWxsW10gPSB7CisJX09NQVAzX0JBTExFTlRSWShDQU1fRDAsICJhZzE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDEsICJhaDE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDEwLCAiYjI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDExLCAiYzI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDIsICJiMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMywgImMyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q0LCAiZDI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDUsICJhMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9ENiwgImsyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q3LCAibDI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDgsICJrMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EOSwgImwyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0ZMRCwgImMyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0hTLCAiYTI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fUENMSywgImMyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1NUUk9CRSwgImQyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1ZTLCAiYTIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fV0VOLCAiYjIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fWENMS0EsICJjMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9YQ0xLQiwgImIyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ1NJMl9EWDAsICJhZzE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDU0kyX0RYMSwgImFnMTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENTSTJfRFkwLCAiYWgxOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ1NJMl9EWTEsICJhaDE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfQUNCSUFTLCAiZTI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTAsICJhZzIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTEsICJhaDIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTEwLCAiYWQyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExMSwgImFkMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTIsICJhYjI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTEzLCAiYWIyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExNCwgImFhMjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTUsICJhYTI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE2LCAiZzI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE3LCAiaDI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE4LCAiaDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE5LCAiaDI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIsICJhZzIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIwLCAiZTI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIxLCAiajI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIyLCAiYWMyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEEyMywgImFjMjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMywgImFoMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNCwgImFnMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNSwgImFoMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNiwgImUyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEE3LCAiZjI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTgsICJmMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBOSwgImcyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0hTWU5DLCAiZDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfUENMSywgImQyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX1ZTWU5DLCAiZDI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfQ0xLLCAiYWYxMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0NUTCwgImFlMTAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMCwgImFmMTEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMSwgImFnMTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTAsICJhZTciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTEsICJhZjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTIsICJhZzciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTMsICJhaDciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTQsICJhZzgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTUsICJhaDgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMiwgImFoMTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMywgImFlMTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19ENCwgImFlMTEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19ENSwgImFoOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q2LCAiYWYxMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q3LCAiYWgxNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q4LCAiYWY5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDksICJhZzkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTEsICJuNCIsICJhYzE1IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0ExMCwgImszIiwgImFiMTkiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTIsICJtNCIsICJhYjE1IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0EzLCAibDQiLCAiYWMxNiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BNCwgIms0IiwgImFiMTYiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTUsICJ0MyIsICJhYzE3IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E2LCAicjMiLCAiYWIxNyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BNywgIm4zIiwgImFjMTgiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTgsICJtMyIsICJhYjE4IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E5LCAibDMiLCAiYWMxOSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19DTEssICJ0NCIsICJ3MiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTAsICJwMSIsICJhYjQiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDExLCAicjEiLCAiYWM0IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxMiwgInIyIiwgImFiNiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTMsICJ0MiIsICJhYzYiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDE0LCAidzEiLCAiYWI3IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxNSwgInkxIiwgImFjNyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EOCwgImgyIiwgImFiMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EOSwgImsyIiwgImFjMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQkUwX0NMRSwgImczIiwgImFjMTIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkJFMSwgInUzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzEsICJoMyIsICJ5MSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1MyLCAidjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTMywgInU4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzQsICJ0OCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1M1LCAicjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTNiwgInA4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzcsICJuOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OV1AsICJoMSIsICJhYjEwIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX1dBSVQxLCAibDgiLCAiYWMxMCIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19XQUlUMiwgIms4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX1dBSVQzLCAiajgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhEUV9TSU8sICJqMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9DTEssICJ0MjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBMCwgInQyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEExLCAidTI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTIsICJ1MjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBMywgInUyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEE0LCAidTI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTUsICJ2MjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBNiwgInYyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEE3LCAidjI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfRElSLCAicjI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfTlhULCAidDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfU1RQLCAidDI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkMyX1NDTCwgImFmMTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzJfU0RBLCAiYWUxNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDM19TQ0wsICJhZjE0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkMzX1NEQSwgImFnMTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzRfU0NMLCAiYWQyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDNF9TREEsICJhZTI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX0VNVTAsICJhYTExIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX0VNVTEsICJhYTEwIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDFfQ0xLUiwgInkyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0NMS1gsICJ3MjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9EUiwgInUyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0RYLCAidjIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDFfRlNSLCAiYWEyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0ZTWCwgImsyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AyX0NMS1gsICJuMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMl9EUiwgInIyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AyX0RYLCAibTIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDJfRlNYLCAicDIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDNfQ0xLWCwgImFmNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AzX0RSLCAiYWU2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDNfRFgsICJhZjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQM19GU1gsICJhZTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQNF9DTEtYLCAiYWUxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDRfRFIsICJhZDEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQNF9EWCwgImFkMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1A0X0ZTWCwgImFjMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1BfQ0xLUywgInQyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NMSywgImFiMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NTMCwgImFjMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NTMSwgImFjMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NTMiwgImFiMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX0NTMywgImFiMiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkxX1NJTU8sICJhYjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9TT01JLCAiYWE0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfQ0xLLCAiYWEzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfQ1MwLCAieTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMl9DUzEsICJ2MyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX1NJTU8sICJ5MiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX1NPTUksICJ5MyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0NMSywgIm4yOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0NNRCwgIm0yNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDAsICJuMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQxLCAibjI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUMiwgIm4yNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDMsICJwMjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQ0LCAicDI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUNSwgInAyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDYsICJyMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQ3LCAicjI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfQ0xLLCAiYWUyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfQ01ELCAiYWc1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMCwgImFoNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDEsICJhaDQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQyLCAiYWc0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMywgImFmNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDQsICJhZTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ1LCAiYWgzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUNiwgImFmMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDcsICJhZTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMCwgImFoMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMSwgImFnMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMiwgImFlMTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMywgImFmMTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNCwgImFmMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNSwgImFlMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNiwgImFmMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19DTEtPVVQxLCAiYWcyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX0NMS09VVDIsICJhZTIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQ0xLUkVRLCAiYWYyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX05JUlEsICJhZjI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfTlJFU1dBUk0sICJhZjI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfT0ZGX01PREUsICJhZjIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9DVFMsICJ3OCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDFfUlRTLCAiYWE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9SWCwgInk4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9UWCwgImFhOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfQ1RTLCAiYWIyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfUlRTLCAiYWIyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfUlgsICJhZDI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMl9UWCwgImFhMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX0NUU19SQ1RYLCAiaDE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUM19SVFNfU0QsICJoMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1JYX0lSUlgsICJoMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1RYX0lSVFgsICJoMjEiLCBOVUxMKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIG9tYXAzX2NiYl9iYWxsCSBOVUxMCisjZW5kaWYKKworLyoKKyAqIFNpZ25hbHMgZGlmZmVyZW50IG9uIDM2WFggQ0JQIHBhY2thZ2UgY29tYXBhcmVkIHRvIDM0WFggQ0JDIHBhY2thZ2UKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKSAmJiBkZWZpbmVkKENPTkZJR19PTUFQX1BBQ0tBR0VfQ0JQKQorc3RydWN0IG9tYXBfbXV4IF9faW5pdGRhdGEgb21hcDM2eHhfY2JwX3N1YnNldFtdID0geworCV9PTUFQM19NVVhFTlRSWShDQU1fRDAsIDk5LAorCQkiY2FtX2QwIiwgTlVMTCwgImNzaTJfZHgyIiwgTlVMTCwKKwkJImdwaW9fOTkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9EMSwgMTAwLAorCQkiY2FtX2QxIiwgTlVMTCwgImNzaTJfZHkyIiwgTlVMTCwKKwkJImdwaW9fMTAwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDEwLCAxMDksCisJCSJjYW1fZDEwIiwgInNzaTJfd2FrZSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwOSIsICJod19kYmc4IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDIsIDEwMSwKKwkJImNhbV9kMiIsICJzc2kyX3JkeV90eCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwMSIsICJod19kYmc0IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDMsIDEwMiwKKwkJImNhbV9kMyIsICJzc2kyX2RhdF9yeCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEwMiIsICJod19kYmc1IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShDQU1fRDQsIDEwMywKKwkJImNhbV9kNCIsICJzc2kyX2ZsYWdfcngiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDMiLCAiaHdfZGJnNiIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0Q1LCAxMDQsCisJCSJjYW1fZDUiLCAic3NpMl9yZHlfcngiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMDQiLCAiaHdfZGJnNyIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoQ0FNX0hTLCA5NCwKKwkJImNhbV9ocyIsICJzc2kyX2RhdF90eCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzk0IiwgImh3X2RiZzAiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKENBTV9WUywgOTUsCisJCSJjYW1fdnMiLCAic3NpMl9mbGFnX3R4IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fOTUiLCAiaHdfZGJnMSIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEEwLCA3MCwKKwkJImRzc19kYXRhMCIsICJkc2lfZHgwIiwgInVhcnQxX2N0cyIsIE5VTEwsCisJCSJncGlvXzcwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTEsIDcxLAorCQkiZHNzX2RhdGExIiwgImRzaV9keTAiLCAidWFydDFfcnRzIiwgTlVMTCwKKwkJImdwaW9fNzEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBMiwgNzIsCisJCSJkc3NfZGF0YTIiLCAiZHNpX2R4MSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzcyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTMsIDczLAorCQkiZHNzX2RhdGEzIiwgImRzaV9keTEiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb183MyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE0LCA3NCwKKwkJImRzc19kYXRhNCIsICJkc2lfZHgyIiwgInVhcnQzX3J4X2lycngiLCBOVUxMLAorCQkiZ3Bpb183NCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE1LCA3NSwKKwkJImRzc19kYXRhNSIsICJkc2lfZHkyIiwgInVhcnQzX3R4X2lydHgiLCBOVUxMLAorCQkiZ3Bpb183NSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE2LCA3NiwKKwkJImRzc19kYXRhNiIsIE5VTEwsICJ1YXJ0MV90eCIsICJkc3N2ZW5jNjU2X2RhdGE2IiwKKwkJImdwaW9fNzYiLCAiaHdfZGJnMTQiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKERTU19EQVRBNywgNzcsCisJCSJkc3NfZGF0YTciLCBOVUxMLCAidWFydDFfcngiLCAiZHNzdmVuYzY1Nl9kYXRhNyIsCisJCSJncGlvXzc3IiwgImh3X2RiZzE1IiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShEU1NfREFUQTgsIDc4LAorCQkiZHNzX2RhdGE4IiwgTlVMTCwgInVhcnQzX3J4X2lycngiLCBOVUxMLAorCQkiZ3Bpb183OCIsICJod19kYmcxNiIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoRFNTX0RBVEE5LCA3OSwKKwkJImRzc19kYXRhOSIsIE5VTEwsICJ1YXJ0M190eF9pcnR4IiwgTlVMTCwKKwkJImdwaW9fNzkiLCAiaHdfZGJnMTciLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEVUS19EMTIsIDI2LAorCQkiZXRrX2QxMiIsICJzeXNfZHJtX21zZWN1cmUiLCBOVUxMLCAiaHN1c2IyX2RpciIsCisJCSJncGlvXzI2IiwgTlVMTCwgImhzdXNiMl90bGxfZGlyIiwgImh3X2RiZzE0IiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfQTExLCAwLAorCQkiZ3BtY19hMTEiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEdQTUNfV0FJVDIsIDY0LAorCQkiZ3BtY193YWl0MiIsIE5VTEwsICJ1YXJ0NF90eCIsIE5VTEwsCisJCSJncGlvXzY0IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShHUE1DX1dBSVQzLCA2NSwKKwkJImdwbWNfd2FpdDMiLCAic3lzX25kbWFyZXExIiwgInVhcnQ0X3J4IiwgTlVMTCwKKwkJImdwaW9fNjUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9EQVRBMCwgMTI1LAorCQkiaHN1c2IwX2RhdGEwIiwgTlVMTCwgInVhcnQzX3R4X2lydHgiLCBOVUxMLAorCQkiZ3Bpb18xMjUiLCAidWFydDJfdHgiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9EQVRBMSwgMTMwLAorCQkiaHN1c2IwX2RhdGExIiwgTlVMTCwgInVhcnQzX3J4X2lycngiLCBOVUxMLAorCQkiZ3Bpb18xMzAiLCAidWFydDJfcngiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9EQVRBMiwgMTMxLAorCQkiaHN1c2IwX2RhdGEyIiwgTlVMTCwgInVhcnQzX3J0c19zZCIsIE5VTEwsCisJCSJncGlvXzEzMSIsICJ1YXJ0Ml9ydHMiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKEhTVVNCMF9EQVRBMywgMTY5LAorCQkiaHN1c2IwX2RhdGEzIiwgTlVMTCwgInVhcnQzX2N0c19yY3R4IiwgTlVMTCwKKwkJImdwaW9fMTY5IiwgInVhcnQyX2N0cyIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1AxX0NMS1IsIDE1NiwKKwkJIm1jYnNwMV9jbGtyIiwgIm1jc3BpNF9jbGsiLCAic2ltX2NkIiwgTlVMTCwKKwkJImdwaW9fMTU2IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDFfRlNSLCAxNTcsCisJCSJtY2JzcDFfZnNyIiwgImFkcGxsdjJkX2RpdGhlcmluZ19lbjEiLAorCQkiY2FtX2dsb2JhbF9yZXNldCIsIE5VTEwsCisJCSJncGlvXzE1NyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoTUNCU1A0X0NMS1gsIDE1MiwKKwkJIm1jYnNwNF9jbGt4IiwgInNzaTFfZGF0X3J4IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTUyIiwgImhzdXNiM190bGxfZGF0YTEiLCAibW0zX3R4c2UwIiwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDRfRFIsIDE1MywKKwkJIm1jYnNwNF9kciIsICJzc2kxX2ZsYWdfcngiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xNTMiLCAiaHN1c2IzX3RsbF9kYXRhMCIsICJtbTNfcnhyY3YiLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DQlNQNF9EWCwgMTU0LAorCQkibWNic3A0X2R4IiwgInNzaTFfcmR5X3J4IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTU0IiwgImhzdXNiM190bGxfZGF0YTIiLCAibW0zX3R4ZGF0IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShNQ0JTUDRfRlNYLCAxNTUsCisJCSJtY2JzcDRfZnN4IiwgInNzaTFfd2FrZSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE1NSIsICJoc3VzYjNfdGxsX2RhdGEzIiwgIm1tM190eGVuX24iLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKE1DU1BJMV9DUzEsIDE3NSwKKwkJIm1jc3BpMV9jczEiLCAiYWRwbGx2MmRfZGl0aGVyaW5nX2VuMiIsIE5VTEwsICJzZG1tYzNfY21kIiwKKwkJImdwaW9fMTc1IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9NQlVTRkxBRywgMCwKKwkJInNhZDJkX21idXNmbGFnIiwgIm1hZDJkX3NidXNmbGFnIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQyOCwgMCwKKwkJInNhZDJkX21jYWQyOCIsICJtYWQyZF9tY2FkMjgiLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDI5LCAwLAorCQkic2FkMmRfbWNhZDI5IiwgIm1hZDJkX21jYWQyOSIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9NQ0FEMzIsIDAsCisJCSJzYWQyZF9tY2FkMzIiLCAibWFkMmRfbWNhZDMyIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzMywgMCwKKwkJInNhZDJkX21jYWQzMyIsICJtYWQyZF9tY2FkMzMiLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTUNBRDM0LCAwLAorCQkic2FkMmRfbWNhZDM0IiwgIm1hZDJkX21jYWQzNCIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9NQ0FEMzUsIDAsCisJCSJzYWQyZF9tY2FkMzUiLCAibWFkMmRfbWNhZDM1IiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX01DQUQzNiwgMCwKKwkJInNhZDJkX21jYWQzNiIsICJtYWQyZF9tY2FkMzYiLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfTVJFQUQsIDAsCisJCSJzYWQyZF9tcmVhZCIsICJtYWQyZF9zcmVhZCIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9NV1JJVEUsIDAsCisJCSJzYWQyZF9td3JpdGUiLCAibWFkMmRfc3dyaXRlIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNBRDJEX1NCVVNGTEFHLCAwLAorCQkic2FkMmRfc2J1c2ZsYWciLCAibWFkMmRfbWJ1c2ZsYWciLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDNfTVVYRU5UUlkoU0FEMkRfU1JFQUQsIDAsCisJCSJzYWQyZF9zcmVhZCIsICJtYWQyZF9tcmVhZCIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQM19NVVhFTlRSWShTQUQyRF9TV1JJVEUsIDAsCisJCSJzYWQyZF9zd3JpdGUiLCAibWFkMmRfbXdyaXRlIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMV9DTEssIDEyMCwKKwkJInNkbW1jMV9jbGsiLCAibXNfY2xrIiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTIwIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfQ01ELCAxMjEsCisJCSJzZG1tYzFfY21kIiwgIm1zX2JzIiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTIxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfREFUMCwgMTIyLAorCQkic2RtbWMxX2RhdDAiLCAibXNfZGF0MCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyMiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RNTUMxX0RBVDEsIDEyMywKKwkJInNkbW1jMV9kYXQxIiwgIm1zX2RhdDEiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xMjMiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNETU1DMV9EQVQyLCAxMjQsCisJCSJzZG1tYzFfZGF0MiIsICJtc19kYXQyIiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTI0IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTRE1NQzFfREFUMywgMTI1LAorCQkic2RtbWMxX2RhdDMiLCAibXNfZGF0MyIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyNSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0RSQ19DS0UwLCAwLAorCQkic2RyY19ja2UwIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZV9vdXQxIiksCisJX09NQVAzX01VWEVOVFJZKFNEUkNfQ0tFMSwgMCwKKwkJInNkcmNfY2tlMSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGVfb3V0MSIpLAorCV9PTUFQM19NVVhFTlRSWShTSU1fSU8sIDEyNiwKKwkJInNpbV9pbyIsICJzaW1faW9fbG93X2ltcGVkYW5jZSIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyNiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0lNX0NMSywgMTI3LAorCQkic2ltX2NsayIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJncGlvXzEyNyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU0lNX1BXUkNUUkwsIDEyOCwKKwkJInNpbV9wd3JjdHJsIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTI4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTSU1fUlNULCAxMjksCisJCSJzaW1fcnN0IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTI5IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQk9PVDAsIDIsCisJCSJzeXNfYm9vdDAiLCBOVUxMLCBOVUxMLCAiZHNzX2RhdGExOCIsCisJCSJncGlvXzIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFNZU19CT09UMSwgMywKKwkJInN5c19ib290MSIsIE5VTEwsIE5VTEwsICJkc3NfZGF0YTE5IiwKKwkJImdwaW9fMyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDNfTVVYRU5UUlkoU1lTX0JPT1QzLCA1LAorCQkic3lzX2Jvb3QzIiwgTlVMTCwgTlVMTCwgImRzc19kYXRhMjAiLAorCQkiZ3Bpb181IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQk9PVDQsIDYsCisJCSJzeXNfYm9vdDQiLCAic2RtbWMyX2Rpcl9kYXQyIiwgTlVMTCwgImRzc19kYXRhMjEiLAorCQkiZ3Bpb182IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQk9PVDUsIDcsCisJCSJzeXNfYm9vdDUiLCAic2RtbWMyX2Rpcl9kYXQzIiwgTlVMTCwgImRzc19kYXRhMjIiLAorCQkiZ3Bpb183IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShTWVNfQk9PVDYsIDgsCisJCSJzeXNfYm9vdDYiLCBOVUxMLCBOVUxMLCAiZHNzX2RhdGEyMyIsCisJCSJncGlvXzgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFVBUlQxX0NUUywgMTUwLAorCQkidWFydDFfY3RzIiwgInNzaTFfcmR5X3R4IiwgTlVMTCwgTlVMTCwKKwkJImdwaW9fMTUwIiwgImhzdXNiM190bGxfY2xrIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQM19NVVhFTlRSWShVQVJUMV9SVFMsIDE0OSwKKwkJInVhcnQxX3J0cyIsICJzc2kxX2ZsYWdfdHgiLCBOVUxMLCBOVUxMLAorCQkiZ3Bpb18xNDkiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAzX01VWEVOVFJZKFVBUlQxX1RYLCAxNDgsCisJCSJ1YXJ0MV90eCIsICJzc2kxX2RhdF90eCIsIE5VTEwsIE5VTEwsCisJCSJncGlvXzE0OCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIG9tYXAzNnh4X2NicF9zdWJzZXQJTlVMTAorI2VuZGlmCisKKy8qCisgKiBCYWxscyBmb3IgMzZYWCBDQlAgcGFja2FnZQorICogNTE1LXBpbiBzLVBCR0EgUGFja2FnZSwgMC41MG1tIEJhbGwgUGl0Y2ggKFRvcCksIDAuNDBtbSBCYWxsIFBpdGNoIChCb3R0b20pCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWCkgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCQlcCisJCSYmIGRlZmluZWQgKENPTkZJR19PTUFQX1BBQ0tBR0VfQ0JQKQorc3RydWN0IG9tYXBfYmFsbCBfX2luaXRkYXRhIG9tYXAzNnh4X2NicF9iYWxsW10gPSB7CisJX09NQVAzX0JBTExFTlRSWShDQU1fRDAsICJhZzE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDEsICJhaDE3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDEwLCAiYjI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDExLCAiYzI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDIsICJiMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EMywgImMyNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q0LCAiZDI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDUsICJhMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9ENiwgImsyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0Q3LCAibDI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fRDgsICJrMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9EOSwgImwyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0ZMRCwgImMyMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX0hTLCAiYTI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fUENMSywgImMyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1NUUk9CRSwgImQyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ0FNX1ZTLCAiYTIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fV0VOLCAiYjIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDQU1fWENMS0EsICJjMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENBTV9YQ0xLQiwgImIyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ1NJMl9EWDAsICJhZzE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShDU0kyX0RYMSwgImFnMTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKENTSTJfRFkwLCAiYWgxOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoQ1NJMl9EWTEsICJhaDE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfQUNCSUFTLCAiZTI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTAsICJhZzIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTEsICJhaDIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTEwLCAiYWQyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExMSwgImFkMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTIsICJhYjI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTEzLCAiYWIyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEExNCwgImFhMjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMTUsICJhYTI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE2LCAiZzI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE3LCAiaDI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE4LCAiaDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTE5LCAiaDI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIsICJhZzIzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIwLCAiZTI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIxLCAiajI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTIyLCAiYWMyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEEyMywgImFjMjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBMywgImFoMjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNCwgImFnMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNSwgImFoMjQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBNiwgImUyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0RBVEE3LCAiZjI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfREFUQTgsICJmMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKERTU19EQVRBOSwgImcyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX0hTWU5DLCAiZDI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShEU1NfUENMSywgImQyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRFNTX1ZTWU5DLCAiZDI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfQ0xLLCAiYWYxMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0NUTCwgImFlMTAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMCwgImFmMTEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMSwgImFnMTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTAsICJhZTciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTEsICJhZjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTIsICJhZzciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTMsICJhaDciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTQsICJhZzgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMTUsICJhaDgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMiwgImFoMTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19EMywgImFlMTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19ENCwgImFlMTEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEVUS19ENSwgImFoOSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q2LCAiYWYxMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q3LCAiYWgxNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoRVRLX0Q4LCAiYWY5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShFVEtfRDksICJhZzkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTEsICJuNCIsICJhYzE1IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0ExMCwgImszIiwgImFiMTkiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTExLCBOVUxMLCAiYWMyMCIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BMiwgIm00IiwgImFiMTUiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTMsICJsNCIsICJhYzE2IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E0LCAiazQiLCAiYWIxNiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BNSwgInQzIiwgImFjMTciKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTYsICJyMyIsICJhYjE3IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0E3LCAibjMiLCAiYWMxOCIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19BOCwgIm0zIiwgImFiMTgiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfQTksICJsMyIsICJhYzE5IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0NMSywgInQ0IiwgIncyIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QwLCAiazEiLCAibTIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDEsICJsMSIsICJtMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTAsICJwMSIsICJhYjQiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDExLCAicjEiLCAiYWM0IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxMiwgInIyIiwgImFiNiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMTMsICJ0MiIsICJhYzYiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDE0LCAidzEiLCAiYWI3IiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QxNSwgInkxIiwgImFjNyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EMiwgImwyIiwgIm4yIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0QzLCAicDIiLCAibjEiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDQsICJ0MSIsICJyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19ENSwgInYxIiwgInIxIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX0Q2LCAidjIiLCAidDIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfRDcsICJ3MiIsICJ0MSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EOCwgImgyIiwgImFiMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19EOSwgImsyIiwgImFjMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQURWX0FMRSwgImYzIiwgIncxIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05CRTBfQ0xFLCAiZzMiLCAiYWMxMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQkUxLCAidTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTMCwgImc0IiwgInkyIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzEsICJoMyIsICJ5MSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1MyLCAidjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTMywgInU4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzQsICJ0OCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OQ1M1LCAicjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfTkNTNiwgInA4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX05DUzcsICJuOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OT0UsICJnMiIsICJ2MiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OV0UsICJmNCIsICJ2MSIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19OV1AsICJoMSIsICJhYjEwIiksCisJX09NQVAzX0JBTExFTlRSWShHUE1DX1dBSVQwLCAibTgiLCAiYWIxMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19XQUlUMSwgImw4IiwgImFjMTAiKSwKKwlfT01BUDNfQkFMTEVOVFJZKEdQTUNfV0FJVDIsICJrOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoR1BNQ19XQUlUMywgImo4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIRFFfU0lPLCAiajI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfQ0xLLCAidDI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTAsICJ0MjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBMSwgInUyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEEyLCAidTI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTMsICJ1MjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBNCwgInUyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RBVEE1LCAidjI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShIU1VTQjBfREFUQTYsICJ2MjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEhTVVNCMF9EQVRBNywgInYyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX0RJUiwgInIyOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX05YVCwgInQyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSFNVU0IwX1NUUCwgInQyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDMV9TQ0wsICJrMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzFfU0RBLCAiajIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkMyX1NDTCwgImFmMTUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzJfU0RBLCAiYWUxNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDM19TQ0wsICJhZjE0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShJMkMzX1NEQSwgImFnMTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEkyQzRfU0NMLCAiYWQyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSTJDNF9TREEsICJhZTI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX0VNVTAsICJhYTExIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX0VNVTEsICJhYTEwIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX1JUQ0ssICJhYTEyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX1RDSywgImFhMTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKEpUQUdfVERJLCAiYWEyMCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoSlRBR19URE8sICJhYTE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShKVEFHX1RNU19UTVNDLCAiYWExOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0NMS1IsICJ5MjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9DTEtYLCAidzIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDFfRFIsICJ1MjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9EWCwgInYyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AxX0ZTUiwgImFhMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMV9GU1gsICJrMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMl9DTEtYLCAibjIxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDJfRFIsICJyMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQMl9EWCwgIm0yMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AyX0ZTWCwgInAyMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AzX0NMS1gsICJhZjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQM19EUiwgImFlNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1AzX0RYLCAiYWY2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDNfRlNYLCAiYWU1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDRfQ0xLWCwgImFlMSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNCU1A0X0RSLCAiYWQxIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ0JTUDRfRFgsICJhZDIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQNF9GU1gsICJhYzEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DQlNQX0NMS1MsICJ0MjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DTEssICJhYjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DUzAsICJhYzIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DUzEsICJhYzMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DUzIsICJhYjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9DUzMsICJhYjIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMV9TSU1PLCAiYWI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTFfU09NSSwgImFhNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX0NMSywgImFhMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoTUNTUEkyX0NTMCwgInk0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShNQ1NQSTJfQ1MxLCAidjMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMl9TSU1PLCAieTIiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKE1DU1BJMl9TT01JLCAieTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9DTEssICJuMjgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9DTUQsICJtMjciLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQwLCAibjI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzFfREFUMSwgIm4yNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMxX0RBVDIsICJuMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMV9EQVQzLCAicDI4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfQ0xLLCAiYWUyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfQ01ELCAiYWc1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMCwgImFoNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDEsICJhaDQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQyLCAiYWc0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUMywgImFmNCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDQsICJhZTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNETU1DMl9EQVQ1LCAiYWgzIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTRE1NQzJfREFUNiwgImFmMyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RNTUMyX0RBVDcsICJhZTMiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfQTAsIE5VTEwsICJuMjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfQTEsIE5VTEwsICJuMjMiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfQTEwLCBOVUxMLCAidjIyIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0ExMSwgTlVMTCwgInYyMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BMTIsIE5VTEwsICJ3MjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfQTEzLCBOVUxMLCAidzIzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0ExNCwgTlVMTCwgInkyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BMiwgTlVMTCwgInAyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BMywgTlVMTCwgInAyMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BNCwgTlVMTCwgInIyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BNSwgTlVMTCwgInIyMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BNiwgTlVMTCwgInQyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BNywgTlVMTCwgInQyMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BOCwgTlVMTCwgInUyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19BOSwgTlVMTCwgInUyMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19CQTAsICJoOSIsICJhYjIxIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0JBMSwgImgxMCIsICJhYzIxIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0NLRTAsICJoMTYiLCAiajIyIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0NLRTEsICJoMTciLCAiajIzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0NMSywgImExMyIsICJhMTEiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDAsIE5VTEwsICJqMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EMSwgTlVMTCwgImoxIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QxMCwgImMxNSIsICJiMTQiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDExLCAiYjE2IiwgImExNCIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EMTIsICJkMTciLCAiYjE2IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QxMywgImMxNyIsICJhMTYiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDE0LCAiYjE3IiwgImIxOSIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EMTUsICJkMTgiLCAiYTE5IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QxNiwgTlVMTCwgImIzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QxNywgTlVMTCwgImEzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QxOCwgTlVMTCwgImI1IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QxOSwgTlVMTCwgImE1IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QyLCBOVUxMLCAiZzIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDIwLCBOVUxMLCAiYjgiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDIxLCBOVUxMLCAiYTgiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDIyLCBOVUxMLCAiYjkiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDIzLCBOVUxMLCAiYTkiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDI0LCBOVUxMLCAiYjIxIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QyNSwgTlVMTCwgImEyMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EMjYsIE5VTEwsICJkMjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDI3LCBOVUxMLCAiZDIzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0QyOCwgTlVMTCwgImUyMiIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EMjksIE5VTEwsICJlMjMiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDMsIE5VTEwsICJnMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EMzAsIE5VTEwsICJnMjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDMxLCBOVUxMLCAiZzIzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0Q0LCBOVUxMLCAiZjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDUsIE5VTEwsICJmMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19ENiwgTlVMTCwgImQyIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0Q3LCBOVUxMLCAiZDEiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRDgsICJjMTQiLCAiYjEzIiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0Q5LCAiYjE0IiwgImExMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19ETTAsIE5VTEwsICJjMSIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19ETTEsICJhMTYiLCAiYTE3IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0RNMiwgTlVMTCwgImE2IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0RNMywgTlVMTCwgImEyMCIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0RSQ19EUVMwLCBOVUxMLCAiYzIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRFFTMSwgImExNyIsICJiMTciKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfRFFTMiwgTlVMTCwgImI2IiksCisJX09NQVAzX0JBTExFTlRSWShTRFJDX0RRUzMsIE5VTEwsICJiMjAiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfTkNBUywgImgxMyIsICJsMjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfTkNMSywgImExNCIsICJiMTEiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfTkNTMCwgImgxMSIsICJtMjIiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfTkNTMSwgImgxMiIsICJtMjMiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfTlJBUywgImgxNCIsICJsMjMiKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNEUkNfTldFLCAiaDE1IiwgImsyMyIpLAorCV9PTUFQM19CQUxMRU5UUlkoU0lNX0NMSywgInAyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0lNX0lPLCAicDI3IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTSU1fUFdSQ1RSTCwgInIyNyIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU0lNX1JTVCwgInIyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTXzMySywgImFlMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMCwgImFoMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMSwgImFnMjYiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMiwgImFlMTQiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UMywgImFmMTgiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNCwgImFmMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNSwgImFlMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19CT09UNiwgImFmMjEiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFNZU19DTEtPVVQxLCAiYWcyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX0NMS09VVDIsICJhZTIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfQ0xLUkVRLCAiYWYyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoU1lTX05JUlEsICJhZjI2IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfTlJFU1dBUk0sICJhZjI0IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShTWVNfT0ZGX01PREUsICJhZjIyIiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9DVFMsICJ3OCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDFfUlRTLCAiYWE5IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9SWCwgInk4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMV9UWCwgImFhOCIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfQ1RTLCAiYWIyNiIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfUlRTLCAiYWIyNSIsIE5VTEwpLAorCV9PTUFQM19CQUxMRU5UUlkoVUFSVDJfUlgsICJhZDI1IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUMl9UWCwgImFhMjUiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX0NUU19SQ1RYLCAiaDE4IiwgTlVMTCksCisJX09NQVAzX0JBTExFTlRSWShVQVJUM19SVFNfU0QsICJoMTkiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1JYX0lSUlgsICJoMjAiLCBOVUxMKSwKKwlfT01BUDNfQkFMTEVOVFJZKFVBUlQzX1RYX0lSVFgsICJoMjEiLCBOVUxMKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIG9tYXAzNnh4X2NicF9iYWxsCSBOVUxMCisjZW5kaWYKKworaW50IF9faW5pdCBvbWFwM19tdXhfaW5pdChzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX3N1YnNldCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBvbWFwX211eCAqcGFja2FnZV9zdWJzZXQ7CisJc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxsczsKKworCXN3aXRjaCAoZmxhZ3MgJiBPTUFQX1BBQ0tBR0VfTUFTSykgeworCWNhc2UgKE9NQVBfUEFDS0FHRV9DQkMpOgorCQlwYWNrYWdlX3N1YnNldCA9IG9tYXAzX2NiY19zdWJzZXQ7CisJCXBhY2thZ2VfYmFsbHMgPSBvbWFwM19jYmNfYmFsbDsKKwkJYnJlYWs7CisJY2FzZSAoT01BUF9QQUNLQUdFX0NCQik6CisJCXBhY2thZ2Vfc3Vic2V0ID0gb21hcDNfY2JiX3N1YnNldDsKKwkJcGFja2FnZV9iYWxscyA9IG9tYXAzX2NiYl9iYWxsOworCQlicmVhazsKKwljYXNlIChPTUFQX1BBQ0tBR0VfQ1VTKToKKwkJcGFja2FnZV9zdWJzZXQgPSBvbWFwM19jdXNfc3Vic2V0OworCQlwYWNrYWdlX2JhbGxzID0gb21hcDNfY3VzX2JhbGw7CisJCWJyZWFrOworCWNhc2UgKE9NQVBfUEFDS0FHRV9DQlApOgorCQlwYWNrYWdlX3N1YnNldCA9IG9tYXAzNnh4X2NicF9zdWJzZXQ7CisJCXBhY2thZ2VfYmFsbHMgPSBvbWFwMzZ4eF9jYnBfYmFsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IFVua25vd24gb21hcCBwYWNrYWdlLCBtdXggZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gb21hcF9tdXhfaW5pdChPTUFQM19DT05UUk9MX1BBRENPTkZfTVVYX1BCQVNFLAorCQkJICAgICBPTUFQM19DT05UUk9MX1BBRENPTkZfTVVYX1NJWkUsCisJCQkJb21hcDNfbXV4bW9kZXMsIHBhY2thZ2Vfc3Vic2V0LCBib2FyZF9zdWJzZXQsCisJCQkJcGFja2FnZV9iYWxscyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MzR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NDNlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguaApAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYQorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NVVhfUEJBU0UJCQkJMHg0ODAwMjAzMExVCisKKyNkZWZpbmUgT01BUDNfTVVYKG1vZGUwLCBtdXhfdmFsdWUpCQkJCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVAzX0NPTlRST0xfUEFEQ09ORl8jI21vZGUwIyNfT0ZGU0VUKSwJXAorCS52YWx1ZQkJPSAobXV4X3ZhbHVlKSwJCQkJCVwKK30KKworLyoKKyAqIE9NQVAzIENPTlRST0xfUEFEQ09ORiogcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgcGluLW11eGluZworICoKKyAqIEV4dHJhY3RlZCBmcm9tIHRoZSBUUk0uICBBZGQgMHg0ODAwMjAzMCB0byB0aGVzZSB2YWx1ZXMgdG8gZ2V0IHRoZQorICogYWJzb2x1dGUgYWRkcmVzc2VzLiAgVGhlIG5hbWUgaW4gdGhlIG1hY3JvIGlzIHRoZSBtb2RlLTAgbmFtZSBvZgorICogdGhlIHBpbi4gIE5PVEU6IFRoZXNlIHJlZ2lzdGVycyBhcmUgMTYtYml0cyB3aWRlLgorICoKKyAqIE5vdGUgdGhhdCAzNFhYIFRSTSB1c2VzIE1NQyBpbnN0ZWFkIG9mIFNETU1DIGFuZCBTQUQyRCBpbnN0ZWFkCisgKiBvZiBDSEFTU0lTIGZvciBzb21lIHJlZ2lzdGVycy4gRm9yIHRoZSBkZWZpbmVzLCB3ZSBmb2xsb3cgdGhlCisgKiAzNlhYIG5hbWluZywgYW5kIHVzZSBTRE1NQyBhbmQgQ0hBU1NJUy4KKyAqLworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMF9PRkZTRVQJCQkweDAwMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMV9PRkZTRVQJCQkweDAwMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMl9PRkZTRVQJCQkweDAwNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EM19PRkZTRVQJCQkweDAwNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19ENF9PRkZTRVQJCQkweDAwOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19ENV9PRkZTRVQJCQkweDAwYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19ENl9PRkZTRVQJCQkweDAwYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EN19PRkZTRVQJCQkweDAwZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EOF9PRkZTRVQJCQkweDAxMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EOV9PRkZTRVQJCQkweDAxMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMTBfT0ZGU0VUCQkJMHgwMTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDExX09GRlNFVAkJCTB4MDE2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxMl9PRkZTRVQJCQkweDAxOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMTNfT0ZGU0VUCQkJMHgwMWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDE0X09GRlNFVAkJCTB4MDFjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxNV9PRkZTRVQJCQkweDAxZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMTZfT0ZGU0VUCQkJMHgwMjAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDE3X09GRlNFVAkJCTB4MDIyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxOF9PRkZTRVQJCQkweDAyNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMTlfT0ZGU0VUCQkJMHgwMjYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDIwX09GRlNFVAkJCTB4MDI4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyMV9PRkZTRVQJCQkweDAyYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMjJfT0ZGU0VUCQkJMHgwMmMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDIzX09GRlNFVAkJCTB4MDJlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyNF9PRkZTRVQJCQkweDAzMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMjVfT0ZGU0VUCQkJMHgwMzIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDI2X09GRlNFVAkJCTB4MDM0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyN19PRkZTRVQJCQkweDAzNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMjhfT0ZGU0VUCQkJMHgwMzgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRDI5X09GRlNFVAkJCTB4MDNhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QzMF9PRkZTRVQJCQkweDAzYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EMzFfT0ZGU0VUCQkJMHgwM2UKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQ0xLX09GRlNFVAkJCTB4MDQwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RRUzBfT0ZGU0VUCQkJMHgwNDIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMV9PRkZTRVQJCQkweDA0NAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19EUVMyX09GRlNFVAkJCTB4MDQ2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RRUzNfT0ZGU0VUCQkJMHgwNDgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTFfT0ZGU0VUCQkJMHgwNGEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTJfT0ZGU0VUCQkJMHgwNGMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTNfT0ZGU0VUCQkJMHgwNGUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTRfT0ZGU0VUCQkJMHgwNTAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTVfT0ZGU0VUCQkJMHgwNTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTZfT0ZGU0VUCQkJMHgwNTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTdfT0ZGU0VUCQkJMHgwNTYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQThfT0ZGU0VUCQkJMHgwNTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTlfT0ZGU0VUCQkJMHgwNWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTEwX09GRlNFVAkJCTB4MDVjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QwX09GRlNFVAkJCTB4MDVlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxX09GRlNFVAkJCTB4MDYwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QyX09GRlNFVAkJCTB4MDYyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QzX09GRlNFVAkJCTB4MDY0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q0X09GRlNFVAkJCTB4MDY2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q1X09GRlNFVAkJCTB4MDY4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q2X09GRlNFVAkJCTB4MDZhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q3X09GRlNFVAkJCTB4MDZjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q4X09GRlNFVAkJCTB4MDZlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q5X09GRlNFVAkJCTB4MDcwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxMF9PRkZTRVQJCQkweDA3MgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19EMTFfT0ZGU0VUCQkJMHgwNzQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfRDEyX09GRlNFVAkJCTB4MDc2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxM19PRkZTRVQJCQkweDA3OAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19EMTRfT0ZGU0VUCQkJMHgwN2EKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfRDE1X09GRlNFVAkJCTB4MDdjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzBfT0ZGU0VUCQkJMHgwN2UKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTMV9PRkZTRVQJCQkweDA4MAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MyX09GRlNFVAkJCTB4MDgyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzNfT0ZGU0VUCQkJMHgwODQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNF9PRkZTRVQJCQkweDA4NgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M1X09GRlNFVAkJCTB4MDg4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzZfT0ZGU0VUCQkJMHgwOGEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTN19PRkZTRVQJCQkweDA4YworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19DTEtfT0ZGU0VUCQkJMHgwOGUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfTkFEVl9BTEVfT0ZGU0VUCQkweDA5MAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19OT0VfT0ZGU0VUCQkJMHgwOTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfTldFX09GRlNFVAkJCTB4MDk0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9HUE1DX05CRTBfQ0xFX09GRlNFVAkJMHgwOTYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfTkJFMV9PRkZTRVQJCQkweDA5OAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfR1BNQ19OV1BfT0ZGU0VUCQkJMHgwOWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDBfT0ZGU0VUCQkJMHgwOWMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDFfT0ZGU0VUCQkJMHgwOWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDJfT0ZGU0VUCQkJMHgwYTAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDNfT0ZGU0VUCQkJMHgwYTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0RTU19QQ0xLX09GRlNFVAkJCTB4MGE0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfSFNZTkNfT0ZGU0VUCQkJMHgwYTYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0RTU19WU1lOQ19PRkZTRVQJCQkweDBhOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRFNTX0FDQklBU19PRkZTRVQJCQkweDBhYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRFNTX0RBVEEwX09GRlNFVAkJCTB4MGFjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTFfT0ZGU0VUCQkJMHgwYWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMl9PRkZTRVQJCQkweDBiMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRFNTX0RBVEEzX09GRlNFVAkJCTB4MGIyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTRfT0ZGU0VUCQkJMHgwYjQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBNV9PRkZTRVQJCQkweDBiNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRFNTX0RBVEE2X09GRlNFVAkJCTB4MGI4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTdfT0ZGU0VUCQkJMHgwYmEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBOF9PRkZTRVQJCQkweDBiYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRFNTX0RBVEE5X09GRlNFVAkJCTB4MGJlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEwX09GRlNFVAkJCTB4MGMwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTExX09GRlNFVAkJCTB4MGMyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEyX09GRlNFVAkJCTB4MGM0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEzX09GRlNFVAkJCTB4MGM2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE0X09GRlNFVAkJCTB4MGM4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE1X09GRlNFVAkJCTB4MGNhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE2X09GRlNFVAkJCTB4MGNjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE3X09GRlNFVAkJCTB4MGNlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE4X09GRlNFVAkJCTB4MGQwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE5X09GRlNFVAkJCTB4MGQyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTIwX09GRlNFVAkJCTB4MGQ0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTIxX09GRlNFVAkJCTB4MGQ2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTIyX09GRlNFVAkJCTB4MGQ4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTIzX09GRlNFVAkJCTB4MGRhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fSFNfT0ZGU0VUCQkJMHgwZGMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NBTV9WU19PRkZTRVQJCQkweDBkZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0FNX1hDTEtBX09GRlNFVAkJCTB4MGUwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fUENMS19PRkZTRVQJCQkweDBlMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0FNX0ZMRF9PRkZTRVQJCQkweDBlNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0FNX0QwX09GRlNFVAkJCTB4MGU2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fRDFfT0ZGU0VUCQkJMHgwZTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NBTV9EMl9PRkZTRVQJCQkweDBlYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0FNX0QzX09GRlNFVAkJCTB4MGVjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fRDRfT0ZGU0VUCQkJMHgwZWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NBTV9ENV9PRkZTRVQJCQkweDBmMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0FNX0Q2X09GRlNFVAkJCTB4MGYyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fRDdfT0ZGU0VUCQkJMHgwZjQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NBTV9EOF9PRkZTRVQJCQkweDBmNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0FNX0Q5X09GRlNFVAkJCTB4MGY4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fRDEwX09GRlNFVAkJCTB4MGZhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fRDExX09GRlNFVAkJCTB4MGZjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DQU1fWENMS0JfT0ZGU0VUCQkJMHgwZmUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NBTV9XRU5fT0ZGU0VUCQkJMHgxMDAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NBTV9TVFJPQkVfT0ZGU0VUCQkJMHgxMDIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NTSTJfRFgwX09GRlNFVAkJCTB4MTA0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DU0kyX0RZMF9PRkZTRVQJCQkweDEwNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ1NJMl9EWDFfT0ZGU0VUCQkJMHgxMDgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NTSTJfRFkxX09GRlNFVAkJCTB4MTBhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDJfRlNYX09GRlNFVAkJCTB4MTBjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDJfQ0xLWF9PRkZTRVQJCTB4MTBlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDJfRFJfT0ZGU0VUCQkJMHgxMTAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DQlNQMl9EWF9PRkZTRVQJCQkweDExMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMxX0NMS19PRkZTRVQJCQkweDExNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMxX0NNRF9PRkZTRVQJCQkweDExNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDBfT0ZGU0VUCQkweDExOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDFfT0ZGU0VUCQkweDExYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDJfT0ZGU0VUCQkweDExYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDNfT0ZGU0VUCQkweDExZQorCisvKiBTRE1NQzFfREFUNCAtIERBVDcgYXJlIFNJTV9JTyBTSU1fQ0xLIFNJTV9QV1JDVFJMIGFuZCBTSU1fUlNUIG9uIDM2eHggKi8KKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NETU1DMV9EQVQ0X09GRlNFVAkJMHgxMjAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NETU1DMV9EQVQ1X09GRlNFVAkJMHgxMjIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NETU1DMV9EQVQ2X09GRlNFVAkJMHgxMjQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NETU1DMV9EQVQ3X09GRlNFVAkJMHgxMjYKKworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0NMS19PRkZTRVQJCQkweDEyOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0NNRF9PRkZTRVQJCQkweDEyYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDBfT0ZGU0VUCQkweDEyYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDFfT0ZGU0VUCQkweDEyZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDJfT0ZGU0VUCQkweDEzMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDNfT0ZGU0VUCQkweDEzMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDRfT0ZGU0VUCQkweDEzNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDVfT0ZGU0VUCQkweDEzNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDZfT0ZGU0VUCQkweDEzOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDdfT0ZGU0VUCQkweDEzYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfTUNCU1AzX0RYX09GRlNFVAkJCTB4MTNjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDNfRFJfT0ZGU0VUCQkJMHgxM2UKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DQlNQM19DTEtYX09GRlNFVAkJMHgxNDAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DQlNQM19GU1hfT0ZGU0VUCQkJMHgxNDIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1VBUlQyX0NUU19PRkZTRVQJCQkweDE0NAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfVUFSVDJfUlRTX09GRlNFVAkJCTB4MTQ2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9VQVJUMl9UWF9PRkZTRVQJCQkweDE0OAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfVUFSVDJfUlhfT0ZGU0VUCQkJMHgxNGEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1VBUlQxX1RYX09GRlNFVAkJCTB4MTRjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9VQVJUMV9SVFNfT0ZGU0VUCQkJMHgxNGUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1VBUlQxX0NUU19PRkZTRVQJCQkweDE1MAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfVUFSVDFfUlhfT0ZGU0VUCQkJMHgxNTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DQlNQNF9DTEtYX09GRlNFVAkJMHgxNTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DQlNQNF9EUl9PRkZTRVQJCQkweDE1NgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfTUNCU1A0X0RYX09GRlNFVAkJCTB4MTU4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDRfRlNYX09GRlNFVAkJCTB4MTVhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfQ0xLUl9PRkZTRVQJCTB4MTVjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRlNSX09GRlNFVAkJCTB4MTVlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFhfT0ZGU0VUCQkJMHgxNjAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DQlNQMV9EUl9PRkZTRVQJCQkweDE2MgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfTUNCU1BfQ0xLU19PRkZTRVQJCQkweDE2NAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfTUNCU1AxX0ZTWF9PRkZTRVQJCQkweDE2NgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfTUNCU1AxX0NMS1hfT0ZGU0VUCQkweDE2OAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfVUFSVDNfQ1RTX1JDVFhfT0ZGU0VUCQkweDE2YQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfVUFSVDNfUlRTX1NEX09GRlNFVAkJMHgxNmMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1VBUlQzX1JYX0lSUlhfT0ZGU0VUCQkweDE2ZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfVUFSVDNfVFhfSVJUWF9PRkZTRVQJCTB4MTcwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfQ0xLX09GRlNFVAkJCTB4MTcyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfU1RQX09GRlNFVAkJCTB4MTc0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfRElSX09GRlNFVAkJCTB4MTc2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfTlhUX09GRlNFVAkJCTB4MTc4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfREFUQTBfT0ZGU0VUCQkweDE3YQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSFNVU0IwX0RBVEExX09GRlNFVAkJMHgxN2MKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBMl9PRkZTRVQJCTB4MTdlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfREFUQTNfT0ZGU0VUCQkweDE4MAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSFNVU0IwX0RBVEE0X09GRlNFVAkJMHgxODIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0hTVVNCMF9EQVRBNV9PRkZTRVQJCTB4MTg0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9IU1VTQjBfREFUQTZfT0ZGU0VUCQkweDE4NgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSFNVU0IwX0RBVEE3X09GRlNFVAkJMHgxODgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0kyQzFfU0NMX09GRlNFVAkJCTB4MThhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9JMkMxX1NEQV9PRkZTRVQJCQkweDE4YworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSTJDMl9TQ0xfT0ZGU0VUCQkJMHgxOGUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0kyQzJfU0RBX09GRlNFVAkJCTB4MTkwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9JMkMzX1NDTF9PRkZTRVQJCQkweDE5MgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSTJDM19TREFfT0ZGU0VUCQkJMHgxOTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0hEUV9TSU9fT0ZGU0VUCQkJMHgxOTYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9DTEtfT0ZGU0VUCQkJMHgxOTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9TSU1PX09GRlNFVAkJMHgxOWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9TT01JX09GRlNFVAkJMHgxOWMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9DUzBfT0ZGU0VUCQkJMHgxOWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9DUzFfT0ZGU0VUCQkJMHgxYTAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9DUzJfT0ZGU0VUCQkJMHgxYTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMV9DUzNfT0ZGU0VUCQkJMHgxYTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMl9DTEtfT0ZGU0VUCQkJMHgxYTYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMl9TSU1PX09GRlNFVAkJMHgxYTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMl9TT01JX09GRlNFVAkJMHgxYWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMl9DUzBfT0ZGU0VUCQkJMHgxYWMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX01DU1BJMl9DUzFfT0ZGU0VUCQkJMHgxYWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NZU19OSVJRX09GRlNFVAkJCTB4MWIwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfQ0xLT1VUMl9PRkZTRVQJCTB4MWIyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMF9PRkZTRVQJCTB4MWI0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMV9PRkZTRVQJCTB4MWI2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMl9PRkZTRVQJCTB4MWI4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEM19PRkZTRVQJCTB4MWJhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FENF9PRkZTRVQJCTB4MWJjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FENV9PRkZTRVQJCTB4MWJlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FENl9PRkZTRVQJCTB4MWMwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEN19PRkZTRVQJCTB4MWMyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEOF9PRkZTRVQJCTB4MWM0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEOV9PRkZTRVQJCTB4MWM2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMTBfT0ZGU0VUCQkweDFjOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDExX09GRlNFVAkJMHgxY2EKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQxMl9PRkZTRVQJCTB4MWNjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMTNfT0ZGU0VUCQkweDFjZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDE0X09GRlNFVAkJMHgxZDAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQxNV9PRkZTRVQJCTB4MWQyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMTZfT0ZGU0VUCQkweDFkNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDE3X09GRlNFVAkJMHgxZDYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQxOF9PRkZTRVQJCTB4MWQ4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMTlfT0ZGU0VUCQkweDFkYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDIwX09GRlNFVAkJMHgxZGMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQyMV9PRkZTRVQJCTB4MWRlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMjJfT0ZGU0VUCQkweDFlMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDIzX09GRlNFVAkJMHgxZTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQyNF9PRkZTRVQJCTB4MWU0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMjVfT0ZGU0VUCQkweDFlNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDI2X09GRlNFVAkJMHgxZTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQyN19PRkZTRVQJCTB4MWVhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMjhfT0ZGU0VUCQkweDFlYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDI5X09GRlNFVAkJMHgxZWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQzMF9PRkZTRVQJCTB4MWYwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMzFfT0ZGU0VUCQkweDFmMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDMyX09GRlNFVAkJMHgxZjQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQzM19PRkZTRVQJCTB4MWY2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQ0FEMzRfT0ZGU0VUCQkweDFmOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTUNBRDM1X09GRlNFVAkJMHgxZmEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX01DQUQzNl9PRkZTRVQJCTB4MWZjCisKKy8qIE5vdGUgdGhhdCAzNHh4IFRSTSBoYXMgU0FEMkQgaW5zdGVhZCBvZiBDSEFTU0lTIGZvciB0aGVzZSAqLworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0hBU1NJU19DTEsyNk1JX09GRlNFVAkJMHgxZmUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfTlJFU1BXUk9OX09GRlNFVAkJMHgyMDAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfTlJFU1dBUldfT0ZGU0VUCQkweDIwMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0hBU1NJU19OSVJRX09GRlNFVAkJMHgyMDQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfRklRX09GRlNFVAkJMHgyMDYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfQVJNSVJRX09GRlNFVAkJMHgyMDgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfSVZBSVJRX09GRlNFVAkJMHgyMGEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfRE1BUkVRMF9PRkZTRVQJCTB4MjBjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DSEFTU0lTX0RNQVJFUTFfT0ZGU0VUCQkweDIwZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0hBU1NJU19ETUFSRVEyX09GRlNFVAkJMHgyMTAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfRE1BUkVRM19PRkZTRVQJCTB4MjEyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DSEFTU0lTX05UUlNUX09GRlNFVAkJMHgyMTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfVERJX09GRlNFVAkJMHgyMTYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfVERPX09GRlNFVAkJMHgyMTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfVE1TX09GRlNFVAkJMHgyMWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfVENLX09GRlNFVAkJMHgyMWMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0NIQVNTSVNfUlRDS19PRkZTRVQJCTB4MjFlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DSEFTU0lTX01TVERCWV9PRkZTRVQJCTB4MjIwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9DSEFTU0lTX0lETEVSRVFfT0ZGU0VUCQkweDIyMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfQ0hBU1NJU19JRExFQUNLX09GRlNFVAkJMHgyMjQKKworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0FEMkRfTVdSSVRFX09GRlNFVAkJMHgyMjYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NBRDJEX1NXUklURV9PRkZTRVQJCTB4MjI4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NUkVBRF9PRkZTRVQJCTB4MjJhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9TUkVBRF9PRkZTRVQJCTB4MjJjCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9NQlVTRkxBR19PRkZTRVQJCTB4MjJlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9TQlVTRkxBR19PRkZTRVQJCTB4MjMwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0NLRTBfT0ZGU0VUCQkJMHgyMzIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQ0tFMV9PRkZTRVQJCQkweDIzNAorCisvKiAzNnh4IG9ubHkgKi8KKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0dQTUNfQTExX09GRlNFVAkJCTB4MjM2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0JBMF9PRkZTRVQJCQkweDU3MAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19CQTFfT0ZGU0VUCQkJMHg1NzIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTBfT0ZGU0VUCQkJMHg1NzQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTFfT0ZGU0VUCQkJMHg1NzYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTJfT0ZGU0VUCQkJMHg1NzgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTNfT0ZGU0VUCQkJMHg1N2EKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTRfT0ZGU0VUCQkJMHg1N2MKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTVfT0ZGU0VUCQkJMHg1N2UKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTZfT0ZGU0VUCQkJMHg1ODAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTdfT0ZGU0VUCQkJMHg1ODIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQThfT0ZGU0VUCQkJMHg1ODQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTlfT0ZGU0VUCQkJMHg1ODYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTEwX09GRlNFVAkJCTB4NTg4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExMV9PRkZTRVQJCQkweDU4YQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19BMTJfT0ZGU0VUCQkJMHg1OGMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfQTEzX09GRlNFVAkJCTB4NThlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExNF9PRkZTRVQJCQkweDU5MAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19OQ1MwX09GRlNFVAkJCTB4NTkyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX05DUzFfT0ZGU0VUCQkJMHg1OTQKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfTkNMS19PRkZTRVQJCQkweDU5NgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19OUkFTX09GRlNFVAkJCTB4NTk4CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX05DQVNfT0ZGU0VUCQkJMHg1OWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfTldFX09GRlNFVAkJCTB4NTljCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RNMF9PRkZTRVQJCQkweDU5ZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0RSQ19ETTFfT0ZGU0VUCQkJMHg1YTAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NEUkNfRE0yX09GRlNFVAkJCTB4NWEyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RNM19PRkZTRVQJCQkweDVhNAorCisvKiAzNnh4IG9ubHksIHRoZXNlIGFyZSBTRE1NQzFfREFUNCAtIERBVDcgb24gMzR4eCAqLworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU0lNX0lPX09GRlNFVAkJCTB4MTIwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TSU1fQ0xLX09GRlNFVAkJCTB4MTIyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TSU1fUFdSQ1RSTF9PRkZTRVQJCTB4MTI0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TSU1fUlNUX09GRlNFVAkJCTB4MTI2CisKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0VUS19DTEtfT0ZGU0VUCQkJMHg1YTgKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0VUS19DVExfT0ZGU0VUCQkJMHg1YWEKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0VUS19EMF9PRkZTRVQJCQkweDVhYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxX09GRlNFVAkJCTB4NWFlCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9FVEtfRDJfT0ZGU0VUCQkJMHg1YjAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0VUS19EM19PRkZTRVQJCQkweDViMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0Q0X09GRlNFVAkJCTB4NWI0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9FVEtfRDVfT0ZGU0VUCQkJMHg1YjYKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0VUS19ENl9PRkZTRVQJCQkweDViOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0Q3X09GRlNFVAkJCTB4NWJhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9FVEtfRDhfT0ZGU0VUCQkJMHg1YmMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0VUS19EOV9PRkZTRVQJCQkweDViZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxMF9PRkZTRVQJCQkweDVjMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxMV9PRkZTRVQJCQkweDVjMgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxMl9PRkZTRVQJCQkweDVjNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxM19PRkZTRVQJCQkweDVjNgorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxNF9PRkZTRVQJCQkweDVjOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfRVRLX0QxNV9PRkZTRVQJCQkweDVjYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSTJDNF9TQ0xfT0ZGU0VUCQkJMHg5ZDAKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0kyQzRfU0RBX09GRlNFVAkJCTB4OWQyCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfMzJLX09GRlNFVAkJCTB4OWQ0CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfQ0xLUkVRX09GRlNFVAkJCTB4OWQ2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfTlJFU1dBUk1fT0ZGU0VUCQkweDlkOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU1lTX0JPT1QwX09GRlNFVAkJCTB4OWRhCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfQk9PVDFfT0ZGU0VUCQkJMHg5ZGMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NZU19CT09UMl9PRkZTRVQJCQkweDlkZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU1lTX0JPT1QzX09GRlNFVAkJCTB4OWUwCisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfQk9PVDRfT0ZGU0VUCQkJMHg5ZTIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX1NZU19CT09UNV9PRkZTRVQJCQkweDllNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU1lTX0JPT1Q2X09GRlNFVAkJCTB4OWU2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TWVNfT0ZGX01PREVfT0ZGU0VUCQkweDllOAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfU1lTX0NMS09VVDFfT0ZGU0VUCQkweDllYQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSlRBR19OVFJTVF9PRkZTRVQJCQkweDllYworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSlRBR19UQ0tfT0ZGU0VUCQkJMHg5ZWUKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0pUQUdfVE1TX1RNU0NfT0ZGU0VUCQkweDlmMAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSlRBR19URElfT0ZGU0VUCQkJMHg5ZjIKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0pUQUdfRU1VMF9PRkZTRVQJCQkweDlmNAorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSlRBR19FTVUxX09GRlNFVAkJCTB4OWY2CisjZGVmaW5lIE9NQVAzX0NPTlRST0xfUEFEQ09ORl9TQUQyRF9TV0FLRVVQX09GRlNFVAkJMHhhMWMKKyNkZWZpbmUgT01BUDNfQ09OVFJPTF9QQURDT05GX0pUQUdfUlRDS19PRkZTRVQJCQkweGExZQorI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfSlRBR19URE9fT0ZGU0VUCQkJMHhhMjAKKworI2RlZmluZSBPTUFQM19DT05UUk9MX1BBRENPTkZfTVVYX1NJWkUJCQkJXAorCQkoT01BUDNfQ09OVFJPTF9QQURDT05GX0pUQUdfVERPX09GRlNFVCArIDB4MikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaGVhZHNtcC5TCmluZGV4IDRhZmFkYmEuLmFhM2Y2NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUwpAQCAtMjcsMjAgKzI3LDM5IEBACiAgKiBPTUFQNCBzcGVjaWZpYyBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVSB0byBqdW1wIGZyb20gUk9NCiAgKiBjb2RlLiAgVGhpcyByb3V0aW5lIGFsc28gcHJvdmlkZXMgYSBob2xkaW5nIGZsYWcgaW50byB3aGljaAogICogc2Vjb25kYXJ5IGNvcmUgaXMgaGVsZCB1bnRpbCB3ZSdyZSByZWFkeSBmb3IgaXQgdG8gaW5pdGlhbGlzZS4KLSAqIFRoZSBwcmltYXJ5IGNvcmUgd2lsbCB1cGRhdGUgdGhlIHRoaXMgZmxhZyB1c2luZyBhIGhhcmR3YXJlCi0gKiByZWdpc3RlciBBdXhDb3JlQm9vdDEuCisgKiBUaGUgcHJpbWFyeSBjb3JlIHdpbGwgdXBkYXRlIHRoaXMgZmxhZyB1c2luZyBhIGhhcmR3YXJlCisgKiByZWdpc3RlciBBdXhDb3JlQm9vdDAuCiAgKi8KIEVOVFJZKG9tYXBfc2Vjb25kYXJ5X3N0YXJ0dXApCi0JbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgNQotCWFuZAlyMCwgcjAsICMweDBmCi1ob2xkOglsZHIJcjEsID1PTUFQNF9BVVhfQ09SRV9CT09UMV9QQQlAIHJlYWQgZnJvbSBBdXhDb3JlQm9vdDEKLQlsZHIJcjIsIFtyMV0KLQljbXAJcjIsIHIwCitob2xkOglsZHIJcjEyLD0weDEwMworCWRzYgorCXNtYwkJCQlAIHJlYWQgZnJvbSBBdXhDb3JlQm9vdDAKKwltb3YJcjAsIHIwLCBsc3IgIzkKKwltcmMJcDE1LCAwLCByNCwgYzAsIGMwLCA1CisJYW5kCXI0LCByNCwgIzB4MGYKKwljbXAJcjAsIHI0CiAJYm5lCWhvbGQKIAogCS8qCi0JICogd2UndmUgYmVlbiByZWxlYXNlZCBmcm9tIHRoZSBjcHVfcmVsZWFzZSxzZWNvbmRhcnlfc3RhY2sKKwkgKiB3ZSd2ZSBiZWVuIHJlbGVhc2VkIGZyb20gdGhlIHdhaXQgbG9vcCxzZWNvbmRhcnlfc3RhY2sKIAkgKiBzaG91bGQgbm93IGNvbnRhaW4gdGhlIFNWQyBzdGFjayBmb3IgdGhpcyBjb3JlCiAJICovCiAJYglzZWNvbmRhcnlfc3RhcnR1cAorRU5EKG9tYXBfc2Vjb25kYXJ5X3N0YXJ0dXApCiAKKworRU5UUlkob21hcF9tb2RpZnlfYXV4Y29yZWJvb3QwKQorCXN0bWZkICAgc3AhLCB7cjEtcjEyLCBscn0KKwlsZHIJcjEyLCA9MHgxMDQKKwlkc2IKKwlzbWMKKwlsZG1mZCAgIHNwISwge3IxLXIxMiwgcGN9CitFTkQob21hcF9tb2RpZnlfYXV4Y29yZWJvb3QwKQorCitFTlRSWShvbWFwX2F1eGNvcmVib290X2FkZHIpCisJc3RtZmQgICBzcCEsIHtyMi1yMTIsIGxyfQorCWxkcglyMTIsID0weDEwNQorCWRzYgorCXNtYworCWxkbWZkICAgc3AhLCB7cjItcjEyLCBwY30KK0VORChvbWFwX2F1eGNvcmVib290X2FkZHIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKaW5kZXggNDg5MGJjZi4uMzgxNTNlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYwpAQCAtMTcsMTkgKzE3LDE1IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbHRpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KIAotLyogUmVnaXN0ZXJzIHVzZWQgZm9yIGNvbW11bmljYXRpbmcgc3RhcnR1cCBpbmZvcm1hdGlvbiAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqb21hcDRfYXV4Y29yZWJvb3RfcmVnMDsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKm9tYXA0X2F1eGNvcmVib290X3JlZzE7Ci0KIC8qIFNDVSBiYXNlIGFkZHJlc3MgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKnNjdV9iYXNlOwogCkBAIC02NSw4ICs2MSw2IEBACiAKIGludCBfX2NwdWluaXQgYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQogCS8qCiAJICogU2V0IHN5bmNocm9uaXNhdGlvbiBzdGF0ZSBiZXR3ZWVuIHRoaXMgYm9vdCBwcm9jZXNzb3IKIAkgKiBhbmQgdGhlIHNlY29uZGFyeSBvbmUKQEAgLTc0LDE4ICs2OCwxNSBAQAogCXNwaW5fbG9jaygmYm9vdF9sb2NrKTsKIAogCS8qCi0JICogVXBkYXRlIHRoZSBBdXhDb3JlQm9vdDEgd2l0aCBib290IHN0YXRlIGZvciBzZWNvbmRhcnkgY29yZS4KKwkgKiBVcGRhdGUgdGhlIEF1eENvcmVCb290MCB3aXRoIGJvb3Qgc3RhdGUgZm9yIHNlY29uZGFyeSBjb3JlLgogCSAqIG9tYXBfc2Vjb25kYXJ5X3N0YXJ0dXAoKSByb3V0aW5lIHdpbGwgaG9sZCB0aGUgc2Vjb25kYXJ5IGNvcmUgdGlsbAogCSAqIHRoZSBBdXhDb3JlQm9vdDEgcmVnaXN0ZXIgaXMgdXBkYXRlZCB3aXRoIGNwdSBzdGF0ZQogCSAqIEEgYmFycmllciBpcyBhZGRlZCB0byBlbnN1cmUgdGhhdCB3cml0ZSBidWZmZXIgaXMgZHJhaW5lZAogCSAqLwotCV9fcmF3X3dyaXRlbChjcHUsIG9tYXA0X2F1eGNvcmVib290X3JlZzEpOworCW9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCgweDIwMCwgMHgwKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKIAlzbXBfd21iKCk7CiAKLQl0aW1lb3V0ID0gamlmZmllcyArICgxICogSFopOwotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKLQkJOwotCiAJLyoKIAkgKiBOb3cgdGhlIHNlY29uZGFyeSBjb3JlIGlzIHN0YXJ0aW5nIHVwIGxldCBpdCBydW4gaXRzCiAJICogY2FsaWJyYXRpb25zLCB0aGVuIHdhaXQgZm9yIGl0IHRvIGZpbmlzaApAQCAtOTksMTcgKzkwLDE4IEBACiB7CiAJLyoKIAkgKiBXcml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCByb3V0aW5lIGludG8gdGhlCi0JICogQXV4Q29yZUJvb3QwIHdoZXJlIFJPTSBjb2RlIHdpbGwganVtcCBhbmQgc3RhcnQgZXhlY3V0aW5nCisJICogQXV4Q29yZUJvb3QxIHdoZXJlIFJPTSBjb2RlIHdpbGwganVtcCBhbmQgc3RhcnQgZXhlY3V0aW5nCiAJICogb24gc2Vjb25kYXJ5IGNvcmUgb25jZSBvdXQgb2YgV0ZFCiAJICogQSBiYXJyaWVyIGlzIGFkZGVkIHRvIGVuc3VyZSB0aGF0IHdyaXRlIGJ1ZmZlciBpcyBkcmFpbmVkCiAJICovCi0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhvbWFwX3NlY29uZGFyeV9zdGFydHVwKSwJICAgXAotCQkJCQlvbWFwNF9hdXhjb3JlYm9vdF9yZWcwKTsKKwlvbWFwX2F1eGNvcmVib290X2FkZHIodmlydF90b19waHlzKG9tYXBfc2Vjb25kYXJ5X3N0YXJ0dXApKTsKIAlzbXBfd21iKCk7CiAKIAkvKgogCSAqIFNlbmQgYSAnc2V2JyB0byB3YWtlIHRoZSBzZWNvbmRhcnkgY29yZSBmcm9tIFdGRS4KKwkgKiBEcmFpbiB0aGUgb3V0c3RhbmRpbmcgd3JpdGVzIHRvIG1lbW9yeQogCSAqLworCWRzYigpOwogCXNldF9ldmVudCgpOwogCW1iKCk7CiB9CkBAIC0xMzYsNyArMTI4LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbmNvcmVzID0gZ2V0X2NvcmVfY291bnQoKTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZvaWQgX19pb21lbSAqb21hcDRfd2t1cGdlbl9iYXNlOwogCWludCBpOwogCiAJLyogc2FuaXR5IGNoZWNrICovCkBAIC0xNjgsMTIgKzE1OSw2IEBACiAJZm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspCiAJCXNldF9jcHVfcHJlc2VudChpLCB0cnVlKTsKIAotCS8qIE5ldmVyIHJlbGVhc2VkICovCi0Jb21hcDRfd2t1cGdlbl9iYXNlID0gaW9yZW1hcChPTUFQNDRYWF9XS1VQR0VOX0JBU0UsIFNaXzRLKTsKLQlCVUdfT04oIW9tYXA0X3drdXBnZW5fYmFzZSk7Ci0Jb21hcDRfYXV4Y29yZWJvb3RfcmVnMCA9IG9tYXA0X3drdXBnZW5fYmFzZSArIDB4ODAwOwotCW9tYXA0X2F1eGNvcmVib290X3JlZzEgPSBvbWFwNF93a3VwZ2VuX2Jhc2UgKyAweDgwNDsKLQogCWlmIChtYXhfY3B1cyA+IDEpIHsKIAkJLyoKIAkJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBvciBicm9hZGNhc3QgZGV2aWNlIGZvciB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKaW5kZXggNjMzYjIxNi4uZDhjODU0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KIAorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CiAjaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgpAQCAtMjEwLDYgKzIxMSwzMiBAQAogfQogCiAvKioKKyAqIF9zZXRfbW9kdWxlX2F1dG9pZGxlOiBzZXQgdGhlIE9DUF9TWVNDT05GSUcgQVVUT0lETEUgZmllbGQgaW4gQHYKKyAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgorICogQGF1dG9pZGxlOiBkZXNpcmVkIEFVVE9JRExFIGJpdGZpZWxkIHZhbHVlICgwIG9yIDEpCisgKiBAdjogcG9pbnRlciB0byByZWdpc3RlciBjb250ZW50cyB0byBtb2RpZnkKKyAqCisgKiBVcGRhdGUgdGhlIG1vZHVsZSBhdXRvaWRsZSBiaXQgaW4gQHYgdG8gYmUgQGF1dG9pZGxlIGZvciB0aGUgQG9oCisgKiBod21vZC4gIFRoZSBhdXRvaWRsZSBiaXQgY29udHJvbHMgd2hldGhlciB0aGUgbW9kdWxlIGNhbiBnYXRlCisgKiBpbnRlcm5hbCBjbG9ja3MgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzbid0IGRvaW5nIGFueXRoaW5nOyB0aGUKKyAqIGV4YWN0IGZ1bmN0aW9uIG9mIHRoaXMgYml0IHZhcmllcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMuICBUaGlzCisgKiBmdW5jdGlvbiBkb2VzIG5vdCB3cml0ZSB0byB0aGUgaGFyZHdhcmUuICBSZXR1cm5zIC1FSU5WQUwgdXBvbgorICogZXJyb3Igb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgX3NldF9tb2R1bGVfYXV0b2lkbGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBhdXRvaWRsZSwKKwkJCQl1MzIgKnYpCit7CisJaWYgKCFvaC0+c3lzY29uZmlnIHx8CisJICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0FVVE9JRExFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdiAmPSB+U1lTQ19BVVRPSURMRV9NQVNLOworCSp2IHw9IGF1dG9pZGxlIDw8IFNZU0NfQVVUT0lETEVfU0hJRlQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBfZW5hYmxlX3dha2V1cDogc2V0IE9DUF9TWVNDT05GSUcuRU5BV0FLRVVQIGJpdCBpbiB0aGUgaGFyZHdhcmUKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICoKQEAgLTMyNiw2ICszNTMsOSBAQAogCQlyZXQgPSAtRUlOVkFMOwogCW9oLT5fY2xrID0gYzsKIAorCVdBUk4oIWMtPmNsa2RtLCAib21hcF9od21vZDogJXM6IG1pc3NpbmcgY2xvY2tkb21haW4gZm9yICVzLlxuIiwKKwkgICAgIG9oLT5jbGtkZXZfY29uX2lkLCBjLT5uYW1lKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU1Nyw4ICs1ODcsMTkgQEAKIAkJX3NldF9tYXN0ZXJfc3RhbmRieW1vZGUob2gsIGlkbGVtb2RlLCAmdik7CiAJfQogCi0JLyogWFhYIE9DUCBBVVRPSURMRSBiaXQ/ICovCisJaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19BVVRPSURMRSkgeworCQlpZGxlbW9kZSA9IChvaC0+ZmxhZ3MgJiBIV01PRF9OT19PQ1BfQVVUT0lETEUpID8KKwkJCTAgOiAxOworCQlfc2V0X21vZHVsZV9hdXRvaWRsZShvaCwgaWRsZW1vZGUsICZ2KTsKKwl9CiAKKwkvKiBYWFggT0NQIEVOQVdBS0VVUCBiaXQ/ICovCisKKwkvKgorCSAqIFhYWCBUaGUgY2xvY2sgZnJhbWV3b3JrIHNob3VsZCBoYW5kbGUgdGhpcywgYnkKKwkgKiBjYWxsaW5nIGludG8gdGhpcyBjb2RlLiAgQnV0IHRoaXMgbXVzdCB3YWl0IHVudGlsIHRoZQorCSAqIGNsb2NrIHN0cnVjdHVyZXMgYXJlIHRhZ2dlZCB3aXRoIG9tYXBfaHdtb2QgZW50cmllcworCSAqLwogCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCAmJgogCSAgICBvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSkKIAkJX3NldF9jbG9ja2FjdGl2aXR5KG9oLCBvaC0+c3lzY29uZmlnLT5jbG9ja2FjdCwgJnYpOwpAQCAtNjIyLDcgKzY2Myw4IEBACiAJaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19NSURMRU1PREUpCiAJCV9zZXRfbWFzdGVyX3N0YW5kYnltb2RlKG9oLCBIV01PRF9JRExFTU9ERV9GT1JDRSwgJnYpOwogCi0JLyogWFhYIGNsZWFyIE9DUCBBVVRPSURMRSBiaXQ/ICovCisJaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19BVVRPSURMRSkKKwkJX3NldF9tb2R1bGVfYXV0b2lkbGUob2gsIDEsICZ2KTsKIAogCV93cml0ZV9zeXNjb25maWcodiwgb2gpOwogfQpAQCAtNzM2LDcgKzc3OCw3IEBACiBzdGF0aWMgaW50IF9yZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJdTMyIHIsIHY7Ci0JaW50IGM7CisJaW50IGMgPSAwOwogCiAJaWYgKCFvaC0+c3lzY29uZmlnIHx8CiAJICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX1NPRlRSRVNFVCkgfHwKQEAgLTc1OCwxMyArODAwLDkgQEAKIAkJcmV0dXJuIHI7CiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiAKLQljID0gMDsKLQl3aGlsZSAoYyA8IE1BWF9NT0RVTEVfUkVTRVRfV0FJVCAmJgotCSAgICAgICAhKG9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5zeXNjb25maWctPnN5c3Nfb2ZmcykgJgotCQkgU1lTU19SRVNFVERPTkVfTUFTSykpIHsKLQkJdWRlbGF5KDEpOwotCQljKys7Ci0JfQorCW9tYXBfdGVzdF90aW1lb3V0KChvbWFwX2h3bW9kX3JlYWRsKG9oLCBvaC0+c3lzY29uZmlnLT5zeXNzX29mZnMpICYKKwkJCSAgIFNZU1NfUkVTRVRET05FX01BU0spLAorCQkJICBNQVhfTU9EVUxFX1JFU0VUX1dBSVQsIGMpOwogCiAJaWYgKGMgPT0gTUFYX01PRFVMRV9SRVNFVF9XQUlUKQogCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogZmFpbGVkIHRvIHJlc2V0IGluICVkIHVzZWNcbiIsCkBAIC04ODQsMzMgKzkyMiw2IEBACiB9CiAKIC8qKgotICogX3dyaXRlX2Nsb2NrYWN0X2xvY2sgLSBzZXQgdGhlIG1vZHVsZSdzIGNsb2NrYWN0aXZpdHkgYml0cwotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKiBAY2xvY2thY3Q6IENMT0NLQUNUSVZJVFkgZmllbGQgYml0cwotICoKLSAqIFdyaXRlcyB0aGUgQ0xPQ0tBQ1RJVklUWSBiaXRzIEBjbG9ja2FjdCB0byB0aGUgaHdtb2QgQG9oCi0gKiBPQ1BfU1lTQ09ORklHIHJlZ2lzdGVyLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBod21vZCBpcyBpbiB0aGUKLSAqIHdyb25nIHN0YXRlIG9yIHJldHVybnMgMC4KLSAqLwotc3RhdGljIGludCBfd3JpdGVfY2xvY2thY3RfbG9jayhzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHU4IGNsb2NrYWN0KQotewotCXUzMiB2OwotCi0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJm9tYXBfaHdtb2RfbXV0ZXgpOwotCXYgPSBvaC0+X3N5c2NfY2FjaGU7Ci0JX3NldF9jbG9ja2FjdGl2aXR5KG9oLCBjbG9ja2FjdCwgJnYpOwotCV93cml0ZV9zeXNjb25maWcodiwgb2gpOwotCW11dGV4X3VubG9jaygmb21hcF9od21vZF9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKICAqIF9zZXR1cCAtIGRvIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBvbWFwX2h3bW9kCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqCkBAIC05NDgsMTEgKzk1OSwxOSBAQAogCiAJX2VuYWJsZShvaCk7CiAKLQlpZiAoIShvaC0+ZmxhZ3MgJiBIV01PRF9JTklUX05PX1JFU0VUKSkKLQkJX3Jlc2V0KG9oKTsKLQotCS8qIFhYWCBPQ1AgQVVUT0lETEUgYml0PyAqLwotCS8qIFhYWCBPQ1AgRU5BV0FLRVVQIGJpdD8gKi8KKwlpZiAoIShvaC0+ZmxhZ3MgJiBIV01PRF9JTklUX05PX1JFU0VUKSkgeworCQkvKgorCQkgKiBYWFggRG8gdGhlIE9DUF9TWVNDT05GSUcgYml0cyBuZWVkIHRvIGJlCisJCSAqIHJlcHJvZ3JhbW1lZCBhZnRlciBhIHJlc2V0PyAgSWYgbm90LCB0aGVuIHRoaXMgY2FuCisJCSAqIGJlIHJlbW92ZWQuICBJZiB0aGV5IGRvLCB0aGVuIHByb2JhYmx5IHRoZQorCQkgKiBfZW5hYmxlKCkgZnVuY3Rpb24gc2hvdWxkIGJlIHNwbGl0IHRvIGF2b2lkIHRoZQorCQkgKiByZXdyaXRlIG9mIHRoZSBPQ1BfU1lTQ09ORklHIHJlZ2lzdGVyLgorCQkgKi8KKwkJaWYgKG9oLT5zeXNjb25maWcpIHsKKwkJCV91cGRhdGVfc3lzY19jYWNoZShvaCk7CisJCQlfc3lzY19lbmFibGUob2gpOworCQl9CisJfQogCiAJaWYgKCEob2gtPmZsYWdzICYgSFdNT0RfSU5JVF9OT19JRExFKSkKIAkJX2lkbGUob2gpOwpAQCAtMTM0OCw4ICsxMzY3LDkgQEAKIAkvKiBGb3IgZWFjaCBJUlEsIERNQSwgbWVtb3J5IGFyZWEsIGZpbGwgaW4gYXJyYXkuKi8KIAogCWZvciAoaSA9IDA7IGkgPCBvaC0+bXB1X2lycXNfY250OyBpKyspIHsKLQkJKHJlcyArIHIpLT5zdGFydCA9ICoob2gtPm1wdV9pcnFzICsgaSk7Ci0JCShyZXMgKyByKS0+ZW5kID0gKihvaC0+bXB1X2lycXMgKyBpKTsKKwkJKHJlcyArIHIpLT5uYW1lID0gKG9oLT5tcHVfaXJxcyArIGkpLT5uYW1lOworCQkocmVzICsgciktPnN0YXJ0ID0gKG9oLT5tcHVfaXJxcyArIGkpLT5pcnE7CisJCShyZXMgKyByKS0+ZW5kID0gKG9oLT5tcHVfaXJxcyArIGkpLT5pcnE7CiAJCShyZXMgKyByKS0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAkJcisrOwogCX0KQEAgLTE0NTQsNjIgKzE0NzQsNiBAQAogfQogCiAvKioKLSAqIG9tYXBfaHdtb2Rfc2V0X2Nsb2NrYWN0X25vbmUgLSBzZXQgY2xvY2thY3Rpdml0eSB0ZXN0IHRvIEJPVEgKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIE9uIHNvbWUgbW9kdWxlcywgdGhpcyBmdW5jdGlvbiBjYW4gYWZmZWN0IHRoZSB3YWtldXAgbGF0ZW5jeSB2cy4KLSAqIHBvd2VyIGNvbnN1bXB0aW9uIGJhbGFuY2UuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgdGhlCi0gKiBvbWFwX2RldmljZSBsYXllci4gIFBhc3NlcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20KLSAqIF93cml0ZV9jbG9ja2FjdF9sb2NrKCkuCi0gKi8KLWludCBvbWFwX2h3bW9kX3NldF9jbG9ja2FjdF9ib3RoKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlyZXR1cm4gX3dyaXRlX2Nsb2NrYWN0X2xvY2sob2gsIENMT0NLQUNUX1RFU1RfQk9USCk7Ci19Ci0KLS8qKgotICogb21hcF9od21vZF9zZXRfY2xvY2thY3Rfbm9uZSAtIHNldCBjbG9ja2FjdGl2aXR5IHRlc3QgdG8gTUFJTgotICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCi0gKgotICogT24gc29tZSBtb2R1bGVzLCB0aGlzIGZ1bmN0aW9uIGNhbiBhZmZlY3QgdGhlIHdha2V1cCBsYXRlbmN5IHZzLgotICogcG93ZXIgY29uc3VtcHRpb24gYmFsYW5jZS4gIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSB0aGUKLSAqIG9tYXBfZGV2aWNlIGxheWVyLiAgUGFzc2VzIGFsb25nIHRoZSByZXR1cm4gdmFsdWUgZnJvbQotICogX3dyaXRlX2Nsb2NrYWN0X2xvY2soKS4KLSAqLwotaW50IG9tYXBfaHdtb2Rfc2V0X2Nsb2NrYWN0X21haW4oc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCXJldHVybiBfd3JpdGVfY2xvY2thY3RfbG9jayhvaCwgQ0xPQ0tBQ1RfVEVTVF9NQUlOKTsKLX0KLQotLyoqCi0gKiBvbWFwX2h3bW9kX3NldF9jbG9ja2FjdF9ub25lIC0gc2V0IGNsb2NrYWN0aXZpdHkgdGVzdCB0byBJQ0xLCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBPbiBzb21lIG1vZHVsZXMsIHRoaXMgZnVuY3Rpb24gY2FuIGFmZmVjdCB0aGUgd2FrZXVwIGxhdGVuY3kgdnMuCi0gKiBwb3dlciBjb25zdW1wdGlvbiBiYWxhbmNlLiAgSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IHRoZQotICogb21hcF9kZXZpY2UgbGF5ZXIuICBQYXNzZXMgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBmcm9tCi0gKiBfd3JpdGVfY2xvY2thY3RfbG9jaygpLgotICovCi1pbnQgb21hcF9od21vZF9zZXRfY2xvY2thY3RfaWNsayhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JcmV0dXJuIF93cml0ZV9jbG9ja2FjdF9sb2NrKG9oLCBDTE9DS0FDVF9URVNUX0lDTEspOwotfQotCi0vKioKLSAqIG9tYXBfaHdtb2Rfc2V0X2Nsb2NrYWN0X25vbmUgLSBzZXQgY2xvY2thY3Rpdml0eSB0ZXN0IHRvIE5PTkUKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIE9uIHNvbWUgbW9kdWxlcywgdGhpcyBmdW5jdGlvbiBjYW4gYWZmZWN0IHRoZSB3YWtldXAgbGF0ZW5jeSB2cy4KLSAqIHBvd2VyIGNvbnN1bXB0aW9uIGJhbGFuY2UuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgdGhlCi0gKiBvbWFwX2RldmljZSBsYXllci4gIFBhc3NlcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20KLSAqIF93cml0ZV9jbG9ja2FjdF9sb2NrKCkuCi0gKi8KLWludCBvbWFwX2h3bW9kX3NldF9jbG9ja2FjdF9ub25lKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQlyZXR1cm4gX3dyaXRlX2Nsb2NrYWN0X2xvY2sob2gsIENMT0NLQUNUX1RFU1RfTk9ORSk7Ci19Ci0KLS8qKgogICogb21hcF9od21vZF9lbmFibGVfd2FrZXVwIC0gYWxsb3cgZGV2aWNlIHRvIHdha2UgdXAgdGhlIHN5c3RlbQogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDIwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMjQyMF9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2YTkzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDI0MjBfZGF0YS5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogb3BwMjQyMF9kYXRhLmMgLSBvbGQtc3R5bGUgIk9QUCIgdGFibGUgZm9yIE9NQVAyNDIwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoZSBPTUFQMiBwcm9jZXNzb3IgY2FuIGJlIHJ1biBhdCBzZXZlcmFsIGRpc2NyZXRlICdQUkNNIGNvbmZpZ3VyYXRpb25zJy4KKyAqIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBjaGFyYWN0ZXJpemVkIGJ5IHZvbHRhZ2UgYW5kIHNwZWVkIGZvciBjbG9ja3MuCisgKiBUaGUgZGV2aWNlIGlzIG9ubHkgdmFsaWRhdGVkIGZvciBjZXJ0YWluIGNvbWJpbmF0aW9ucy4gT25lIHdheSB0byBleHByZXNzCisgKiB0aGVzZSBjb21iaW5hdGlvbnMgaXMgdmlhIHRoZSAncmF0aW8ncycgd2hpY2ggdGhlIGNsb2NrcyBvcGVyYXRlIHdpdGgKKyAqIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gVGhlc2UgcmF0aW8gc2V0cyBhcmUgZm9yIGEgZ2l2ZW4gdm9sdGFnZS9EUExMCisgKiBzZXR0aW5nLiBBbGwgY29uZmlndXJhdGlvbnMgY2FuIGJlIGRlc2NyaWJlZCBieSBhIERQTEwgc2V0dGluZyBhbmQgYSByYXRpbworICogVGhlcmUgYXJlIDMgcmF0aW8gc2V0cyBmb3IgdGhlIDI0MzAgYW5kIFggcmF0aW8gc2V0cyBmb3IgMjQyMC4KKyAqCisgKiAyNDMwIGRpZmZlcnMgZnJvbSAyNDIwIGluIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgcGhhc2Ugc3luY2hyb25pemVycyB1c2VkLgorICogVGhleSBib3RoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgY2xvY2sgZG9tYWluIHNldHVwLiAyNDIwKGl2YTEsZHNwKSB2cworICogMjQzMCAoaXZhMi4xLCBOT2RzcCwgbWRtKQorICoKKyAqIFhYWCBNaXNzaW5nIHZvbHRhZ2UgZGF0YS4KKyAqCisgKiBUSGUgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGlzIGZpbGUgaXMgZGVwcmVjYXRlZC4gIE9uY2UgYSByZWFzb25hYmxlCisgKiBPUFAgQVBJIGV4aXN0cywgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdXNlIGl0LgorICoKKyAqIFRoaXMgaXMgdGVjaG5pY2FsbHkgcGFydCBvZiB0aGUgT01BUDJ4eHggY2xvY2sgY29kZS4KKyAqLworCisjaW5jbHVkZSAib3BwMnh4eC5oIgorI2luY2x1ZGUgInNkcmMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvJ3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCisgKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsCisgKiBDTV9DTEtTRUxfRFNQLCBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMLAorICogQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqCisgKiBGaWxsaW5nIGluIHRhYmxlIGJhc2VkIG9uIEg0IGJvYXJkcyBhbmQgMjQzMC1TRFBzIHZhcmlhbnRzIGF2YWlsYWJsZS4KKyAqIFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBtb3JlIHJhdGVzIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBiZSBkZWZpbmVkLgorICoKKyAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpbmVkIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlIHRoZQorICogZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwgdGhlIC8yCisgKiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLglHZW5lcmFsbHkgaGF2aW5nIG1vcmUgdGhhdAorICogb25lIGZhc3Qgc2V0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFzIHN0YXRpYyB0aW1pbmdzIG5lZWQgdG8gYmUgY2hhbmdlZAorICogdG8gY2hhbmdlIHRoZSBzZXQuCSBUaGUgZXhjZXB0aW9uIGlzIHRoZSBieXBhc3Mgc2V0dGluZyB3aGljaCBpcworICogYXZhaWxibGUgZm9yIGxvdyBwb3dlciBieXBhc3MuCisgKgorICogTm90ZTogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzb3J0ZWQsIGZhc3Rlc3QgdG8gc2xvd2VzdC4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgb21hcDI0MjBfcmF0ZV90YWJsZVtdID0geworCS8qIFBSQ00gSSAtIEZBU1QgKi8KKwl7UzEyTSwgUzY2ME0sIFMzMzBNLCBSSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMzME1IeiBBUk0gKi8KKwkJUklfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xNjVNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJIC0gRkFTVCAqLworCXtTMTJNLCBTNjAwTSwgUzMwME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMwME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFM2MDBNLCBTMzAwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzAwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJSSAtIEZBU1QgKi8KKwl7UzEyTSwgUzUzMk0sIFMyNjZNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFM1MzJNLCBTMjY2TSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUkgLSBTTE9XICovCisJe1MxMk0sIFMzMDBNLCBTMTUwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTUwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzMwME0sIFMxNTBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNTBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUlJIC0gU0xPVyAqLworCXtTMTJNLCBTMjY2TSwgUzEzM00sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzI2Nk0sIFMxMzNNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTS1WSUkgKGJvb3QtYnlwYXNzKSAqLworCXtTMTJNLCBTMTJNLCBTMTJNLCBSVklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNSHogQVJNKi8KKwkJUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNVklJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00tVklJIChib290LWJ5cGFzcykgKi8KKwl7UzEzTSwgUzEzTSwgUzEzTSwgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTUh6IEFSTSAqLworCQlSVklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSVklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0Mlh9LAorCisJeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDI0MzBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDMwX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGI4MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDMwX2RhdGEuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIG9wcDI0MjBfZGF0YS5jIC0gb2xkLXN0eWxlICJPUFAiIHRhYmxlIGZvciBPTUFQMjQyMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGUgT01BUDIgcHJvY2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9ucycuCisgKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdlIGFuZCBzcGVlZCBmb3IgY2xvY2tzLgorICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBmb3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcworICogdGhlc2UgY29tYmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvJ3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCisgKiByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFRoZXNlIHJhdGlvIHNldHMgYXJlIGZvciBhIGdpdmVuIHZvbHRhZ2UvRFBMTAorICogc2V0dGluZy4gQWxsIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBkZXNjcmliZWQgYnkgYSBEUExMIHNldHRpbmcgYW5kIGEgcmF0aW8KKyAqIFRoZXJlIGFyZSAzIHJhdGlvIHNldHMgZm9yIHRoZSAyNDMwIGFuZCBYIHJhdGlvIHNldHMgZm9yIDI0MjAuCisgKgorICogMjQzMCBkaWZmZXJzIGZyb20gMjQyMCBpbiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHBoYXNlIHN5bmNocm9uaXplcnMgdXNlZC4KKyAqIFRoZXkgYm90aCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNsb2NrIGRvbWFpbiBzZXR1cC4gMjQyMChpdmExLGRzcCkgdnMKKyAqIDI0MzAgKGl2YTIuMSwgTk9kc3AsIG1kbSkKKyAqCisgKiBYWFggTWlzc2luZyB2b2x0YWdlIGRhdGEuCisgKgorICogVEhlIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhpcyBmaWxlIGlzIGRlcHJlY2F0ZWQuICBPbmNlIGEgcmVhc29uYWJsZQorICogT1BQIEFQSSBleGlzdHMsIHRoZSBkYXRhIGluIHRoaXMgZmlsZSBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzZSBpdC4KKyAqCisgKiBUaGlzIGlzIHRlY2huaWNhbGx5IHBhcnQgb2YgdGhlIE9NQVAyeHh4IGNsb2NrIGNvZGUuCisgKi8KKworI2luY2x1ZGUgIm9wcDJ4eHguaCIKKyNpbmNsdWRlICJzZHJjLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgorICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBVLAorICogQ01fQ0xLU0VMX0RTUCwgQ01fQ0xLU0VMX0dGWCwgQ01fQ0xLU0VMMV9DT1JFLCBDTV9DTEtTRUwxX1BMTCwKKyAqIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCisgKgorICogRmlsbGluZyBpbiB0YWJsZSBiYXNlZCBvbiBINCBib2FyZHMgYW5kIDI0MzAtU0RQcyB2YXJpYW50cyBhdmFpbGFibGUuCisgKiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgbW9yZSByYXRlcyBjb21iaW5hdGlvbnMgd2hpY2ggY291bGQgYmUgZGVmaW5lZC4KKyAqCisgKiBXaGVuIG11bHRpcGxlIHZhbHVlcyBhcmUgZGVmaW5lZCB0aGUgc3RhcnQgdXAgd2lsbCB0cnkgYW5kIGNob29zZSB0aGUKKyAqIGZhc3Rlc3Qgb25lLiBJZiBhICdmYXN0JyB2YWx1ZSBpcyBkZWZpbmVkLCB0aGVuIGF1dG9tYXRpY2FsbHksIHRoZSAvMgorICogb25lIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBpdCBjYW4gYmUgdXNlZC4JR2VuZXJhbGx5IGhhdmluZyBtb3JlIHRoYXQKKyAqIG9uZSBmYXN0IHNldCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMgdGltaW5ncyBuZWVkIHRvIGJlIGNoYW5nZWQKKyAqIHRvIGNoYW5nZSB0aGUgc2V0LgkgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgYnlwYXNzIHNldHRpbmcgd2hpY2ggaXMKKyAqIGF2YWlsYmxlIGZvciBsb3cgcG93ZXIgYnlwYXNzLgorICoKKyAqIE5vdGU6IFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc29ydGVkLCBmYXN0ZXN0IHRvIHNsb3dlc3QuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY29uc3Qgc3RydWN0IHByY21fY29uZmlnIG9tYXAyNDMwX3JhdGVfdGFibGVbXSA9IHsKKwkvKiBQUkNNICM0IC0gcmF0aW8yIChFUzIuMSkgLSBGQVNUICovCisJe1MxM00sIFM3OThNLCBTMzk5TSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzOTlNSHogQVJNICovCisJCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTRfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzIgLSByYXRpbzEgKEVTMikgLSBGQVNUICovCisJe1MxM00sIFM2NThNLCBTMzI5TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMzBNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMXzE2NU1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gRkFTVCAqLworCXtTMTNNLCBTNTMyTSwgUzI2Nk0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWIgLSByYXRpbzEgLSBGQVNUICovCisJe1MxM00sIFM0MDBNLCBTMjAwTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyMDBNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM0IC0gcmF0aW8xIChFUzIuMSkgLSBTTE9XICovCisJe1MxM00sIFMzOTlNLCBTMTk5TSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyMDBNSHogQVJNICovCisJCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTRfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzIgLSByYXRpbzEgKEVTMikgLSBTTE9XICovCisJe1MxM00sIFMzMjlNLCBTMTY0TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNjVNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMXzE2NU1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gU0xPVyAqLworCXtTMTNNLCBTMjY2TSwgUzEzM00sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWIgLSByYXRpbzEgLSBTTE9XKi8KKwl7UzEzTSwgUzIwME0sIFMxMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEwME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KKwl7UzEzTSwgUzEzTSwgUzEzTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxM01oeiAqLworCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNLWJvb3QvYnlwYXNzICovCisJe1MxMk0sIFMxMk0sIFMxMk0sIFJCX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNaHogKi8KKwkJUkJfQ01fQ0xLU0VMX0RTUF9WQUwsIFJCX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSQl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUkJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0M1h9LAorCisJeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMnh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNmRmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaApAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqIG9wcDJ4eHguaCAtIG1hY3JvcyBmb3Igb2xkLXN0eWxlIE9NQVAyeHh4ICJPUFAiIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoZSBPTUFQMiBwcm9jZXNzb3IgY2FuIGJlIHJ1biBhdCBzZXZlcmFsIGRpc2NyZXRlICdQUkNNIGNvbmZpZ3VyYXRpb25zJy4KKyAqIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBjaGFyYWN0ZXJpemVkIGJ5IHZvbHRhZ2UgYW5kIHNwZWVkIGZvciBjbG9ja3MuCisgKiBUaGUgZGV2aWNlIGlzIG9ubHkgdmFsaWRhdGVkIGZvciBjZXJ0YWluIGNvbWJpbmF0aW9ucy4gT25lIHdheSB0byBleHByZXNzCisgKiB0aGVzZSBjb21iaW5hdGlvbnMgaXMgdmlhIHRoZSAncmF0aW8ncycgd2hpY2ggdGhlIGNsb2NrcyBvcGVyYXRlIHdpdGgKKyAqIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gVGhlc2UgcmF0aW8gc2V0cyBhcmUgZm9yIGEgZ2l2ZW4gdm9sdGFnZS9EUExMCisgKiBzZXR0aW5nLiBBbGwgY29uZmlndXJhdGlvbnMgY2FuIGJlIGRlc2NyaWJlZCBieSBhIERQTEwgc2V0dGluZyBhbmQgYSByYXRpbworICogVGhlcmUgYXJlIDMgcmF0aW8gc2V0cyBmb3IgdGhlIDI0MzAgYW5kIFggcmF0aW8gc2V0cyBmb3IgMjQyMC4KKyAqCisgKiAyNDMwIGRpZmZlcnMgZnJvbSAyNDIwIGluIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgcGhhc2Ugc3luY2hyb25pemVycyB1c2VkLgorICogVGhleSBib3RoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgY2xvY2sgZG9tYWluIHNldHVwLiAyNDIwKGl2YTEsZHNwKSB2cworICogMjQzMCAoaXZhMi4xLCBOT2RzcCwgbWRtKQorICoKKyAqIFhYWCBNaXNzaW5nIHZvbHRhZ2UgZGF0YS4KKyAqCisgKiBUSGUgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGlzIGZpbGUgaXMgZGVwcmVjYXRlZC4gIE9uY2UgYSByZWFzb25hYmxlCisgKiBPUFAgQVBJIGV4aXN0cywgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdXNlIGl0LgorICoKKyAqIFRoaXMgaXMgdGVjaG5pY2FsbHkgcGFydCBvZiB0aGUgT01BUDJ4eHggY2xvY2sgY29kZS4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9PUFAyWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX09QUDJYWFhfSAorCisvKioKKyAqIHN0cnVjdCBwcmNtX2NvbmZpZyAtIGRlZmluZSBjbG9jayByYXRlcyBvbiBhIHBlci1PUFAgYmFzaXMgKDI0eHgpCisgKgorICogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KKyAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSxDTV9DTEtTRUxfRFNQCisgKiBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCisgKgorICogVGhpcyBpcyBkZXByZWNhdGVkLiAgQXMgc29vbiBhcyB3ZSBoYXZlIGEgZGVjZW50IE9QUCBBUEksIHdlIHNob3VsZAorICogbW92ZSBhbGwgdGhpcyBzdHVmZiB0byBpdC4KKyAqLworc3RydWN0IHByY21fY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nIHh0YWxfc3BlZWQ7CS8qIGNyeXN0YWwgcmF0ZSAqLworCXVuc2lnbmVkIGxvbmcgZHBsbF9zcGVlZDsJLyogZHBsbDogb3V0Knh0YWwqTS8oTi0xKXRhYmxlX3JlY2FsYyAqLworCXVuc2lnbmVkIGxvbmcgbXB1X3NwZWVkOwkvKiBzcGVlZCBvZiBNUFUgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tcHU7CS8qIG1wdSBkaXZpZGVyICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZHNwOwkvKiBkc3AraXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX2dmeDsJLyogZ2Z4IGRpdmlkZXJzICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX2NvcmU7CS8qIG1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMV9wbGw7CS8qIG0sbiAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMl9wbGw7CS8qIGRwbGx4MSBvciB4MiBvdXQgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tZG07CS8qIG1vZGVtIGRpdmlkZXJzIDI0MzAgb25seSAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9zZHJjX3JmcjsJLyogYmFzZSByZWZyZXNoIHRpbWluZyBmb3IgYSBzZXQgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworfTsKKworCisvKiBDb3JlIGZpZWxkcyBmb3IgY21fY2xrc2VsLCBub3QgcmF0aW8gZ292ZXJuZWQgKi8KKyNkZWZpbmUgUlhfQ0xLU0VMX0RTUzEJCQkoMHgxMCA8PCA4KQorI2RlZmluZSBSWF9DTEtTRUxfRFNTMgkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJYX0NMS1NFTF9TU0kJCQkoMHg1IDw8IDIwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFZvbHRhZ2UvRFBMTCByYXRpb3MKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIDI0MzAgUmF0aW8ncywgMjQzMC1SYXRpbyBDb25maWcgMSAqLworI2RlZmluZSBSMV9DTEtTRUxfTDMJCQkoNCA8PCAwKQorI2RlZmluZSBSMV9DTEtTRUxfTDQJCQkoMiA8PCA1KQorI2RlZmluZSBSMV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCisjZGVmaW5lIFIxX0NNX0NMS1NFTDFfQ09SRV9WQUwJCShSMV9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJIFJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCSBSMV9DTEtTRUxfTDQgfCBSMV9DTEtTRUxfTDMpCisjZGVmaW5lIFIxX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfTVBVX1ZBTAkJUjFfQ0xLU0VMX01QVQorI2RlZmluZSBSMV9DTEtTRUxfRFNQCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX0RTUF9WQUwJCShSMV9DTEtTRUxfRFNQIHwgUjFfQ0xLU0VMX0RTUF9JRikKKyNkZWZpbmUgUjFfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9HRlhfVkFMCQlSMV9DTEtTRUxfR0ZYCisjZGVmaW5lIFIxX0NMS1NFTF9NRE0JCQkoNCA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfTURNX1ZBTAkJUjFfQ0xLU0VMX01ETQorCisvKiAyNDMwLVJhdGlvIENvbmZpZyAyICovCisjZGVmaW5lIFIyX0NMS1NFTF9MMwkJCSg2IDw8IDApCisjZGVmaW5lIFIyX0NMS1NFTF9MNAkJCSgyIDw8IDUpCisjZGVmaW5lIFIyX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJKFIyX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAorCQkJCQkgUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJIFIyX0NMS1NFTF9MNCB8IFIyX0NMS1NFTF9MMykKKyNkZWZpbmUgUjJfQ0xLU0VMX01QVQkJCSgyIDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9NUFVfVkFMCQlSMl9DTEtTRUxfTVBVCisjZGVmaW5lIFIyX0NMS1NFTF9EU1AJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTEtTRUxfRFNQX0lGCQkoMyA8PCA1KQorI2RlZmluZSBSMl9DTV9DTEtTRUxfRFNQX1ZBTAkJKFIyX0NMS1NFTF9EU1AgfCBSMl9DTEtTRUxfRFNQX0lGKQorI2RlZmluZSBSMl9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX0dGWF9WQUwJCVIyX0NMS1NFTF9HRlgKKyNkZWZpbmUgUjJfQ0xLU0VMX01ETQkJCSg2IDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9NRE1fVkFMCQlSMl9DTEtTRUxfTURNCisKKy8qIDI0MzAtUmF0aW8gQm9vdG0gKEJZUEFTUykgKi8KKyNkZWZpbmUgUkJfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKKyNkZWZpbmUgUkJfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQorI2RlZmluZSBSQl9DTV9DTEtTRUwxX0NPUkVfVkFMCQkoUkJfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCisJCQkJCSBSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQkgUkJfQ0xLU0VMX0w0IHwgUkJfQ0xLU0VMX0wzKQorI2RlZmluZSBSQl9DTEtTRUxfTVBVCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX01QVV9WQUwJCVJCX0NMS1NFTF9NUFUKKyNkZWZpbmUgUkJfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NMS1NFTF9EU1BfSUYJCSgxIDw8IDUpCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9EU1BfVkFMCQkoUkJfQ0xLU0VMX0RTUCB8IFJCX0NMS1NFTF9EU1BfSUYpCisjZGVmaW5lIFJCX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUkJfQ0xLU0VMX0dGWAorI2RlZmluZSBSQl9DTEtTRUxfTURNCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX01ETV9WQUwJCVJCX0NMS1NFTF9NRE0KKworLyogMjQyMCBSYXRpbyBFcXVpdmFsZW50cyAqLworI2RlZmluZSBSWFhfQ0xLU0VMX1ZMWU5RCQkoMHgxMiA8PCAxNSkKKyNkZWZpbmUgUlhYX0NMS1NFTF9TU0kJCQkoMHg4IDw8IDIwKQorCisvKiAyNDIwLVBSQ00gSUlJIDUzMk1IeiBjb3JlICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0wzCQkJKDQgPDwgMCkJLyogMTMzTUh6ICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogNjYuNU1IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkJLyogMzMuMjVNSHogKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCShSSUlJX0NMS1NFTF9VU0IgfCBSWFhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJIFJYWF9DTEtTRUxfVkxZTlEgfCBSWF9DTEtTRUxfRFNTMiB8IFwKKwkJCQkJIFJYX0NMS1NFTF9EU1MxIHwgUklJSV9DTEtTRUxfTDQgfCBcCisJCQkJCSBSSUlJX0NMS1NFTF9MMykKKyNkZWZpbmUgUklJSV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkJLyogMjY2TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJSUlfQ0xLU0VMX01QVQorI2RlZmluZSBSSUlJX0NMS1NFTF9EU1AJCQkoMyA8PCAwKQkvKiBjNXggLSAxNzcuM01IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1eCAtIDg4LjY3TUh6ICovCisjZGVmaW5lIFJJSUlfU1lOQ19EU1AJCQkoMSA8PCA3KQkvKiBFbmFibGUgc3luYyAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9JVkEJCQkoNiA8PCA4KQkvKiBpdmExIC0gODguNjdNSHogKi8KKyNkZWZpbmUgUklJSV9TWU5DX0lWQQkJCSgxIDw8IDEzKQkvKiBFbmFibGUgc3luYyAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9EU1BfVkFMCQkoUklJSV9TWU5DX0lWQSB8IFJJSUlfQ0xLU0VMX0lWQSB8IFwKKwkJCQkJIFJJSUlfU1lOQ19EU1AgfCBSSUlJX0NMS1NFTF9EU1BfSUYgfCBcCisJCQkJCSBSSUlJX0NMS1NFTF9EU1ApCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCS8qIDY2LjVNSHogKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklJSV9DTEtTRUxfR0ZYCisKKy8qIDI0MjAtUFJDTSBJSSA2MDBNSHogY29yZSAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0wzCQkJKDYgPDwgMCkJLyogMTAwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA1ME1IeiAqLworI2RlZmluZSBSSUlfQ0xLU0VMX1VTQgkJCSgyIDw8IDI1KQkvKiA1ME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJKFJJSV9DTEtTRUxfVVNCIHwgUlhYX0NMS1NFTF9TU0kgfCBcCisJCQkJCSBSWFhfQ0xLU0VMX1ZMWU5RIHwgUlhfQ0xLU0VMX0RTUzIgfCBcCisJCQkJCSBSWF9DTEtTRUxfRFNTMSB8IFJJSV9DTEtTRUxfTDQgfCBcCisJCQkJCSBSSUlfQ0xLU0VMX0wzKQorI2RlZmluZSBSSUlfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDMwME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJSV9DTEtTRUxfTVBVCisjZGVmaW5lIFJJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMjAwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAxMDBNSHogKi8KKyNkZWZpbmUgUklJX1NZTkNfRFNQCQkJKDAgPDwgNykJLyogQnlwYXNzIHN5bmMgKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9JVkEJCQkoMyA8PCA4KQkvKiBpdmExIC0gMjAwTUh6ICovCisjZGVmaW5lIFJJSV9TWU5DX0lWQQkJCSgwIDw8IDEzKQkvKiBCeXBhc3Mgc3luYyAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCShSSUlfU1lOQ19JVkEgfCBSSUlfQ0xLU0VMX0lWQSB8IFwKKwkJCQkJIFJJSV9TWU5DX0RTUCB8IFJJSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQkgUklJX0NMS1NFTF9EU1ApCisjZGVmaW5lIFJJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNTBNSHogKi8KKyNkZWZpbmUgUklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlfQ0xLU0VMX0dGWAorCisvKiAyNDIwLVBSQ00gSSA2NjBNSHogY29yZSAqLworI2RlZmluZSBSSV9DTEtTRUxfTDMJCQkoNCA8PCAwKQkvKiAxNjVNSHogKi8KKyNkZWZpbmUgUklfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogODIuNU1IeiAqLworI2RlZmluZSBSSV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCS8qIDQxLjI1TUh6ICovCisjZGVmaW5lIFJJX0NNX0NMS1NFTDFfQ09SRV9WQUwJCShSSV9DTEtTRUxfVVNCIHwJCVwKKwkJCQkJIFJYWF9DTEtTRUxfU1NJIHwgUlhYX0NMS1NFTF9WTFlOUSB8IFwKKwkJCQkJIFJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCSBSSV9DTEtTRUxfTDQgfCBSSV9DTEtTRUxfTDMpCisjZGVmaW5lIFJJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAzMzBNSHogKi8KKyNkZWZpbmUgUklfQ01fQ0xLU0VMX01QVV9WQUwJCVJJX0NMS1NFTF9NUFUKKyNkZWZpbmUgUklfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDIyME1IeiAqLworI2RlZmluZSBSSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAxMTBNSHogKi8KKyNkZWZpbmUgUklfU1lOQ19EU1AJCQkoMSA8PCA3KQkvKiBBY3RpdmF0ZSBzeW5jICovCisjZGVmaW5lIFJJX0NMS1NFTF9JVkEJCQkoNCA8PCA4KQkvKiBpdmExIC0gMTY1TUh6ICovCisjZGVmaW5lIFJJX1NZTkNfSVZBCQkJKDAgPDwgMTMpCS8qIEJ5cGFzcyBzeW5jICovCisjZGVmaW5lIFJJX0NNX0NMS1NFTF9EU1BfVkFMCQkoUklfU1lOQ19JVkEgfCBSSV9DTEtTRUxfSVZBIHwJXAorCQkJCQkgUklfU1lOQ19EU1AgfCBSSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQkgUklfQ0xLU0VMX0RTUCkKKyNkZWZpbmUgUklfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCS8qIDE2NU1IeiAqLworI2RlZmluZSBSSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklfQ0xLU0VMX0dGWAorCisvKiAyNDIwLVBSQ00gVklJIChib290KSAqLworI2RlZmluZSBSVklJX0NMS1NFTF9MMwkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMQkJKDEgPDwgOCkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMgkJKDAgPDwgMTMpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1ZMWU5RCQkoMSA8PCAxNSkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfU1NJCQkJKDEgPDwgMjApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQorCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkoUlZJSV9DTEtTRUxfVVNCIHwgUlZJSV9DTEtTRUxfU1NJIHwgXAorCQkJCQkgUlZJSV9DTEtTRUxfVkxZTlEgfCBcCisJCQkJCSBSVklJX0NMS1NFTF9EU1MyIHwgUlZJSV9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJIFJWSUlfQ0xLU0VMX0w0IHwgUlZJSV9DTEtTRUxfTDMpCisKKyNkZWZpbmUgUlZJSV9DTEtTRUxfTVBVCQkJKDEgPDwgMCkgLyogYWxsIGRpdmlkZSBieSAxICovCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJWSUlfQ0xLU0VMX01QVQorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKKyNkZWZpbmUgUlZJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0lWQQkJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykKKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJKFJWSUlfU1lOQ19JVkEgfCBSVklJX0NMS1NFTF9JVkEgfCBcCisJCQkJCSBSVklJX1NZTkNfRFNQIHwgUlZJSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQkgUlZJSV9DTEtTRUxfRFNQKQorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJWSUlfQ0xLU0VMX0dGWAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDI0MzAgVGFyZ2V0IG1vZGVzOiBBbG9uZyB3aXRoIGVhY2ggY29uZmlndXJhdGlvbiB0aGUgQ1BVIGhhcyBzZXZlcmFsCisgKiBtb2RlcyB3aGljaCBnb2VzIGFsb25nIHdpdGggdGhlbS4gTW9kZXMgbWFpbmx5IGFyZSB0aGUgYWRkaXRpb24gb2YKKyAqIGRlc2NyaWJlIERQTEwgY29tYmluYXRpb25zIHRvIGdvIGFsb25nIHdpdGggYSByYXRpby4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhhcmR3YXJlIGdvdmVybmVkICovCisjZGVmaW5lIE1YXzQ4TV9TUkMJCQkoMCA8PCAzKQorI2RlZmluZSBNWF81NE1fU1JDCQkJKDAgPDwgNSkKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEyCQkoMyA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEzCQkoMiA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzE5XzIJCSgwIDw8IDIzKQorCisvKgorICogMjQzMCAtIHN0YW5kYWxvbmUsIDIqcmVmKk0vKG4rMSksIE0vTiBpcyBmb3IgZXhhY3RuZXNzIG5vdCByZWxvY2sgc3BlZWQKKyAqICM1YQkocmF0aW8xKSBiYXNlcG9ydC10YXJnZXQsIHRhcmdldCBEUExMID0gMjY2KjIgPSA1MzJNSHoKKyAqLworI2RlZmluZSBNNUFfRFBMTF9NVUxUXzEyCQkoMTMzIDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTIJCQkoNSA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJIE01QV9EUExMX0RJVl8xMiB8IE01QV9EUExMX01VTFRfMTIgfCBcCisJCQkJCSBNWF9BUExMU19DTElLSU5fMTIpCisjZGVmaW5lIE01QV9EUExMX01VTFRfMTMJCSg2MSA8PCAxMikKKyNkZWZpbmUgTTVBX0RQTExfRElWXzEzCQkJKDIgPDwgOCkKKyNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNNUFfRFBMTF9ESVZfMTMgfCBNNUFfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEzKQorI2RlZmluZSBNNUFfRFBMTF9NVUxUXzE5CQkoNTUgPDwgMTIpCisjZGVmaW5lIE01QV9EUExMX0RJVl8xOQkJCSgzIDw8IDgpCisjZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJKE1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQkgTTVBX0RQTExfRElWXzE5IHwgTTVBX0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQorLyogIzViCShyYXRpbzEpIHRhcmdldCBEUExMID0gMjAwKjIgPSA0MDBNSHogKi8KKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNNUJfRFBMTF9ESVZfMTIJCQkoMiA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJIE01Ql9EUExMX0RJVl8xMiB8IE01Ql9EUExMX01VTFRfMTIgfCBcCisJCQkJCSBNWF9BUExMU19DTElLSU5fMTIpCisjZGVmaW5lIE01Ql9EUExMX01VTFRfMTMJCSgyMDAgPDwgMTIpCisjZGVmaW5lIE01Ql9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQorCisjZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwJKE1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQkgTTVCX0RQTExfRElWXzEzIHwgTTVCX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMykKKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xOQkJKDEyNSA8PCAxMikKKyNkZWZpbmUgTTVCX0RQTExfRElWXzE5CQkJKDMxIDw8IDgpCisjZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJKE1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQkgTTVCX0RQTExfRElWXzE5IHwgTTVCX0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQorLyoKKyAqICM0CShyYXRpbzIpLCBEUExMID0gMzk5KjIgPSA3OThNSHosIEwzPTEzM01IegorICovCisjZGVmaW5lIE00X0RQTExfTVVMVF8xMgkJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE00X0RQTExfRElWXzEyCQkJKDMgPDwgOCkKKyNkZWZpbmUgTTRfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJIE00X0RQTExfRElWXzEyIHwgTTRfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEyKQorCisjZGVmaW5lIE00X0RQTExfTVVMVF8xMwkJCSgzOTkgPDwgMTIpCisjZGVmaW5lIE00X0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE00X0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNNF9EUExMX0RJVl8xMyB8IE00X0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMykKKworI2RlZmluZSBNNF9EUExMX01VTFRfMTkJCQkoMTQ1IDw8IDEyKQorI2RlZmluZSBNNF9EUExMX0RJVl8xOQkJCSg2IDw8IDgpCisjZGVmaW5lIE00X0NNX0NMS1NFTDFfUExMXzE5X1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNNF9EUExMX0RJVl8xOSB8IE00X0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQorCisvKgorICogIzMJKHJhdGlvMikgYmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDMzMCoyID0gNjYwTUh6CisgKi8KKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xMgkJCSgxIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNM19EUExMX0RJVl8xMiB8IE0zX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzEzCQkJKDc2IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xMwkJCSgyIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNM19EUExMX0RJVl8xMyB8IE0zX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMykKKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzE5CQkJKDE3IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xOQkJCSgwIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNM19EUExMX0RJVl8xOSB8IE0zX0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQorCisvKgorICogIzIgICAocmF0aW8xKSBEUExMID0gMzMwKjIgPSA2NjBNSHosIEwzPTE2NU1IegorICovCisjZGVmaW5lIE0yX0RQTExfTVVMVF8xMgkJICAgICAgICAoNTUgPDwgMTIpCisjZGVmaW5lIE0yX0RQTExfRElWXzEyCQkgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIE0yX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNMl9EUExMX0RJVl8xMiB8IE0yX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKKworLyogU3BlZWQgY2hhbmdlcyAtIFVzZWQgNjU4LjdNSHogaW5zdGVhZCBvZiA2NjBNSHogZm9yIExQLVJlZnJlc2ggTT03NiBOPTIsCisgKiByZWxvY2sgdGltZSBpc3N1ZSAqLworLyogQ29yZSBmcmVxdWVuY3kgY2hhbmdlZCBmcm9tIDMzMC8xNjUgdG8gMzI5LzE2NCBNSHoqLworI2RlZmluZSBNMl9EUExMX01VTFRfMTMJCSAgICAgICAgKDc2IDw8IDEyKQorI2RlZmluZSBNMl9EUExMX0RJVl8xMwkJICAgICAgICAoMiA8PCA4KQorI2RlZmluZSBNMl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJKE1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQkgTTJfRFBMTF9ESVZfMTMgfCBNMl9EUExMX01VTFRfMTMgfCBcCisJCQkJCSBNWF9BUExMU19DTElLSU5fMTMpCisKKyNkZWZpbmUgTTJfRFBMTF9NVUxUXzE5CQkgICAgICAgICgxNyA8PCAxMikKKyNkZWZpbmUgTTJfRFBMTF9ESVZfMTkJCSAgICAgICAgKDAgPDwgOCkKKyNkZWZpbmUgTTJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJIE0yX0RQTExfRElWXzE5IHwgTTJfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzE5XzIpCisKKy8qIGJvb3QgKGJvb3QpICovCisjZGVmaW5lIE1CX0RQTExfTVVMVAkJCSgxIDw8IDEyKQorI2RlZmluZSBNQl9EUExMX0RJVgkJCSgwIDw8IDgpCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNQl9EUExMX0RJViB8IE1CX0RQTExfTVVMVCB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKKworI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJKE1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQkgTUJfRFBMTF9ESVYgfCBNQl9EUExMX01VTFQgfCBcCisJCQkJCSBNWF9BUExMU19DTElLSU5fMTMpCisKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJIE1CX0RQTExfRElWIHwgTUJfRFBMTF9NVUxUIHwgXAorCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzE5KQorCisvKgorICogMjQzMCAtIGNoYXNzaXMgKHNlZG5hKQorICogMTY1IChyYXRpbzEpIHNhbWUgYXMgYWJvdmUgIzIKKyAqIDE1MCAocmF0aW8xKQorICogMTMzIChyYXRpbzIpIHNhbWUgYXMgYWJvdmUgIzQKKyAqIDExMCAocmF0aW8yKSBzYW1lIGFzIGFib3ZlICMzCisgKiAxMDQgKHJhdGlvMikKKyAqIGJvb3QgKGJvb3QpCisgKi8KKworLyogUFJDTSBJIHRhcmdldCBEUExMID0gMiozMzBNSHogPSA2NjBNSHogKi8KKyNkZWZpbmUgTUlfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQorI2RlZmluZSBNSV9EUExMX0RJVl8xMgkJCSgxIDw8IDgpCisjZGVmaW5lIE1JX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCSBNSV9EUExMX0RJVl8xMiB8IE1JX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKKworLyoKKyAqIDI0MjAgRXF1aXZhbGVudCAtIG1vZGUgcmVnaXN0ZXJzCisgKiBQUkNNIElJICwgdGFyZ2V0IERQTEwgPSAyKjMwME1IeiA9IDYwME1IegorICovCisjZGVmaW5lIE1JSV9EUExMX01VTFRfMTIJCSg1MCA8PCAxMikKKyNkZWZpbmUgTUlJX0RQTExfRElWXzEyCQkJKDEgPDwgOCkKKyNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfAlcCisJCQkJCSBNSUlfRFBMTF9ESVZfMTIgfCBNSUlfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEyKQorI2RlZmluZSBNSUlfRFBMTF9NVUxUXzEzCQkoMzAwIDw8IDEyKQorI2RlZmluZSBNSUlfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfAlcCisJCQkJCSBNSUlfRFBMTF9ESVZfMTMgfCBNSUlfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEzKQorCisvKiBQUkNNIElJSSB0YXJnZXQgRFBMTCA9IDIqMjY2ID0gNTMyTUh6Ki8KKyNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTIJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTIJCSg1IDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8CVwKKwkJCQkJIE1JSUlfRFBMTF9ESVZfMTIgfCBcCisJCQkJCSBNSUlJX0RQTExfTVVMVF8xMiB8IE1YX0FQTExTX0NMSUtJTl8xMikKKyNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTMJCSgyNjYgPDwgMTIpCisjZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTMJCSgxMiA8PCA4KQorI2RlZmluZSBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfAlcCisJCQkJCSBNSUlJX0RQTExfRElWXzEzIHwgXAorCQkJCQkgTUlJSV9EUExMX01VTFRfMTMgfCBNWF9BUExMU19DTElLSU5fMTMpCisKKy8qIFBSQ00gVklJIChib290IGJ5cGFzcykgKi8KKyNkZWZpbmUgTVZJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCisjZGVmaW5lIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAorCisvKiBIaWdoIGFuZCBsb3cgb3BlcmF0aW9uIHZhbHVlICovCisjZGVmaW5lIE1YX0NMS1NFTDJfUExMXzJ4X1ZBTAkJKDIgPDwgMCkKKyNkZWZpbmUgTVhfQ0xLU0VMMl9QTExfMXhfVkFMCQkoMSA8PCAwKQorCisvKiBNUFUgc3BlZWQgZGVmaW5lcyAqLworI2RlZmluZSBTMTJNCTEyMDAwMDAwCisjZGVmaW5lIFMxM00JMTMwMDAwMDAKKyNkZWZpbmUgUzE5TQkxOTIwMDAwMAorI2RlZmluZSBTMjZNCTI2MDAwMDAwCisjZGVmaW5lIFMxMDBNCTEwMDAwMDAwMAorI2RlZmluZSBTMTMzTQkxMzMwMDAwMDAKKyNkZWZpbmUgUzE1ME0JMTUwMDAwMDAwCisjZGVmaW5lIFMxNjRNCTE2NDAwMDAwMAorI2RlZmluZSBTMTY1TQkxNjUwMDAwMDAKKyNkZWZpbmUgUzE5OU0JMTk5MDAwMDAwCisjZGVmaW5lIFMyMDBNCTIwMDAwMDAwMAorI2RlZmluZSBTMjY2TQkyNjYwMDAwMDAKKyNkZWZpbmUgUzMwME0JMzAwMDAwMDAwCisjZGVmaW5lIFMzMjlNCTMyOTAwMDAwMAorI2RlZmluZSBTMzMwTQkzMzAwMDAwMDAKKyNkZWZpbmUgUzM5OU0JMzk5MDAwMDAwCisjZGVmaW5lIFM0MDBNCTQwMDAwMDAwMAorI2RlZmluZSBTNTMyTQk1MzIwMDAwMDAKKyNkZWZpbmUgUzYwME0JNjAwMDAwMDAwCisjZGVmaW5lIFM2NThNCTY1ODAwMDAwMAorI2RlZmluZSBTNjYwTQk2NjAwMDAwMDAKKyNkZWZpbmUgUzc5OE0JNzk4MDAwMDAwCisKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyBvbWFwMjQyMF9yYXRlX3RhYmxlW107CitleHRlcm4gY29uc3Qgc3RydWN0IHByY21fY29uZmlnIG9tYXAyNDMwX3JhdGVfdGFibGVbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnJhdGVfdGFibGU7CitleHRlcm4gY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCA4YmFhMzBkLi44NjBiNzU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgcHdyZG1fc3RhdGVfbmFtZXNbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIHB3cmRtX3N0YXRlX25hbWVzW11bUFdSRE1fTUFYX1BXUlNUU10gPSB7CiAJIk9GRiIsCiAJIlJFVCIsCiAJIklOQSIsCkBAIC0zODEsNyArMzgxLDcgQEAKIAogCXNlcV9wcmludGYocywgIiVzICglcykiLCBwd3JkbS0+bmFtZSwKIAkJCXB3cmRtX3N0YXRlX25hbWVzW3B3cmRtLT5zdGF0ZV0pOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJZm9yIChpID0gMDsgaSA8IFBXUkRNX01BWF9QV1JTVFM7IGkrKykKIAkJc2VxX3ByaW50ZihzLCAiLCVzOiVkIiwgcHdyZG1fc3RhdGVfbmFtZXNbaV0sCiAJCQlwd3JkbS0+c3RhdGVfY291bnRlcltpXSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCBiNjk5MGUzLi4yNmIzZjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0xMCw5ICsxMCw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpZmRlZiBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTgotIyBkZWZpbmUgREVCVUcKLSNlbmRpZgorI3VuZGVmIERFQlVHCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2MCw3ICsxNTgsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgUFdSRE1fTUFYX1BXUlNUUzsgaSsrKQogCQlwd3JkbS0+c3RhdGVfY291bnRlcltpXSA9IDA7CiAKIAlwd3JkbV93YWl0X3RyYW5zaXRpb24ocHdyZG0pOwpAQCAtNDgwLDcgKzQ3OCw3IEBACiAJaWYgKElTX0VSUihwKSkgewogCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCiAJCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIElTX0VSUihwKTsKKwkJcmV0dXJuIFBUUl9FUlIocCk7CiAJfQogCiAJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIHdha2UgdXAgJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwKQEAgLTUxMyw3ICs1MTEsNyBAQAogCWlmIChJU19FUlIocCkpIHsKIAkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgogCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7Ci0JCXJldHVybiBJU19FUlIocCk7CisJCXJldHVybiBQVFJfRVJSKHApOwogCX0KIAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgd2lsbCBubyBsb25nZXIgd2FrZSB1cCAlcyBhZnRlciAlcyAiCkBAIC01NTAsNyArNTQ4LDcgQEAKIAlpZiAoSVNfRVJSKHApKSB7CiAJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKIAkJCSAiJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOwotCQlyZXR1cm4gSVNfRVJSKHApOworCQlyZXR1cm4gUFRSX0VSUihwKTsKIAl9CiAKIAlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIFBNX1dLREVQLApAQCAtNTczLDEwICs1NzEsMTAgQEAKIHsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CiAKLQlpZiAoIXB3cmRtMSkKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKCFwd3JkbTEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7CkBAIC01ODQsNyArNTgyLDcgQEAKIAkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKIAkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAogCQkJIHB3cmRtMi0+bmFtZSk7Ci0JCXJldHVybiBJU19FUlIocCk7CisJCXJldHVybiBQVFJfRVJSKHApOwogCX0KIAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogd2lsbCBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgJXMgaXMgYWN0aXZlXG4iLApAQCAtNjEyLDEwICs2MTAsMTAgQEAKIHsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CiAKLQlpZiAoIXB3cmRtMSkKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKCFwd3JkbTEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7CkBAIC02MjMsNyArNjIxLDcgQEAKIAkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKIAkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAogCQkJIHB3cmRtMi0+bmFtZSk7Ci0JCXJldHVybiBJU19FUlIocCk7CisJCXJldHVybiBQVFJfRVJSKHApOwogCX0KIAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogd2lsbCBubyBsb25nZXIgcHJldmVudCAlcyBmcm9tIHNsZWVwaW5nIGlmICIKQEAgLTY1NSwxMCArNjUzLDEwIEBACiB7CiAJc3RydWN0IHBvd2VyZG9tYWluICpwOwogCi0JaWYgKCFwd3JkbTEpCisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCWlmICghcHdyZG0xKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOwpAQCAtNjY2LDcgKzY2NCw3IEBACiAJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCiAJCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIHB3cmRtMS0+bmFtZSwKIAkJCSBwd3JkbTItPm5hbWUpOwotCQlyZXR1cm4gSVNfRVJSKHApOworCQlyZXR1cm4gUFRSX0VSUihwKTsKIAl9CiAKIAlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQLApAQCAtOTg1LDYgKzk4Myw5IEBACiAJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCiAJCXJldHVybiAtRUVYSVNUOwogCisJaWYgKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19NUFVfUVVJUkspCisJCWJhbmsgPSAxOworCiAJLyoKIAkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKIAkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLApAQCAtMTAzMiw2ICsxMDMzLDkgQEAKIAlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKKwlpZiAocHdyZG0tPmZsYWdzICYgUFdSRE1fSEFTX01QVV9RVUlSSykKKwkJYmFuayA9IDE7CisKIAkvKgogCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQogCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oCmluZGV4IGZkMDliMDguLjU4OGY3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oCkBAIC0xOTAsNiArMTkwLDcgQEAKIAkud2tkZXBfc3JjcwkgID0gbXB1XzM0eHhfd2tkZXBzLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5mbGFncwkJICA9IFBXUkRNX0hBU19NUFVfUVVJUkssCiAJLmJhbmtzCQkgID0gMSwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKIAkJWzBdID0gUFdSU1RTX09GRl9SRVQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKaW5kZXggY2IxYWU4NC4uNjFhYzJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaApAQCAtNCwxMCArNCwxMiBAQAogLyoKICAqIE9NQVAyLzMgUFJDTSBiYXNlIGFuZCBtb2R1bGUgZGVmaW5pdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogT01BUDQgZGVmaW5lcyBpbiB0aGlzIGZpbGUgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUKKyAqIGRhdGFiYXNlcy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTQ5LDYgKzUxLDczIEBACiAjZGVmaW5lIE9NQVAzNDMwX05FT05fTU9ECQkJCTB4YjAwCiAjZGVmaW5lIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ECQkJCTB4YzAwCiAKKyNkZWZpbmUgQklUUyhuX2JpdCkJXAorCSgoKDEgPDwgbl9iaXQpIC0gMSkgfCAoMSA8PCBuX2JpdCkpCisKKyNkZWZpbmUgQklURklFTEQobF9iaXQsIHVfYml0KQlcCisJKEJJVFModV9iaXQpICYgfigoQklUUyhsX2JpdCkpID4+IDEpKQorCisvKiBPTUFQNDRYWCBzcGVjaWZpYyBtb2R1bGUgb2Zmc2V0cyAqLworCisvKiBDTTEgaW5zdGFuY2VzICovCisKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX09DUF9TT0NLRVRfTU9ECTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ECQkweDAxMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX01QVV9NT0QJCTB4MDMwMAorI2RlZmluZSBPTUFQNDQzMF9DTTFfVEVTTEFfTU9ECQkweDA0MDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NT0QJCTB4MDUwMAorI2RlZmluZSBPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QJMHgwZTAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9JTlNUUl9NT0QJCTB4MGYwMAorCisvKiBDTTIgaW5zdGFuY2VzICovCisKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX09DUF9TT0NLRVRfTU9ECTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ECQkweDAxMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0FMV0FZU19PTl9NT0QJMHgwNjAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9DT1JFX01PRAkJMHgwNzAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9JVkFIRF9NT0QJCTB4MGYwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ0FNX01PRAkJMHgxMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9EU1NfTU9ECQkweDExMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0dGWF9NT0QJCTB4MTIwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfTDNJTklUX01PRAkJMHgxMzAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QJCTB4MTQwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ0VGVVNFX01PRAkJMHgxNjAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRAkweDFlMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0lOU1RSX01PRAkJMHgxZjAwCisKKy8qIFBSTSBpbnN0YW5jZXMgKi8KKworI2RlZmluZSBPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9NT0QJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9DS0dFTl9NT0QJCTB4MDEwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fTVBVX01PRAkJMHgwMzAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9URVNMQV9NT0QJCTB4MDQwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fQUJFX01PRAkJMHgwNTAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ECTB4MDYwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fQ09SRV9NT0QJCTB4MDcwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVZBSERfTU9ECQkweDBmMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0NBTV9NT0QJCTB4MTAwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fRFNTX01PRAkJMHgxMTAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9HRlhfTU9ECQkweDEyMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QJCTB4MTMwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fTDRQRVJfTU9ECQkweDE0MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0NFRlVTRV9NT0QJCTB4MTYwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fV0tVUF9NT0QJCTB4MTcwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QJMHgxODAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9FTVVfTU9ECQkweDE5MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0VNVV9DTV9NT0QJCTB4MWEwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fREVWSUNFX01PRAkJMHgxYjAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JTlNUUl9NT0QJCTB4MWYwMAorCisvKiBTQ1JNIGluc3RhbmNlcyAqLworCisjZGVmaW5lIE9NQVA0NDMwX1NDUk1fU0NSTV9NT0QJMHgwMDAwCisKKy8qIENISVJPTlNTIGluc3RhbmNlcyAqLworCisjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX09DUF9TT0NLRVRfUFJDTV9NT0QJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0RFVklDRV9QUk1fTU9ECTB4MDIwMAorI2RlZmluZSBPTUFQNDQzMF9DSElST05TU19DSElST05TU19DUFUwX01PRAkJMHgwNDAwCisjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTFfTU9ECQkweDA4MDAKIAogLyogMjRYWCByZWdpc3RlciBiaXRzIHNoYXJlZCBiZXR3ZWVuIENNICYgUFJNIHJlZ2lzdGVycyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCmluZGV4IDAyOWQzNzYuLjNlYTgxNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCkBAIC0zNCw2ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnBybV9iYXNlOwogc3RhdGljIHZvaWQgX19pb21lbSAqY21fYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNtMl9iYXNlOwogCiAjZGVmaW5lIE1BWF9NT0RVTEVfRU5BQkxFX1dBSVQJCTEwMDAwMAogCkBAIC0xNzAsMTQgKzE3MSwxMiBAQAogewogCXJldHVybiBfX29tYXBfcHJjbV9yZWFkKHBybV9iYXNlLCBtb2R1bGUsIGlkeCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHBybV9yZWFkX21vZF9yZWcpOwogCiAvKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlICovCiB2b2lkIHBybV93cml0ZV9tb2RfcmVnKHUzMiB2YWwsIHMxNiBtb2R1bGUsIHUxNiBpZHgpCiB7CiAJX19vbWFwX3ByY21fd3JpdGUodmFsLCBwcm1fYmFzZSwgbW9kdWxlLCBpZHgpOwogfQotRVhQT1JUX1NZTUJPTChwcm1fd3JpdGVfbW9kX3JlZyk7CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlLiBDYWxsZXIgbXVzdCBsb2NrICovCiB1MzIgcHJtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KQpAQCAtMTkxLDIxICsxOTAsMTggQEAKIAogCXJldHVybiB2OwogfQotRVhQT1JUX1NZTUJPTChwcm1fcm13X21vZF9yZWdfYml0cyk7CiAKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNIG1vZHVsZSAqLwogdTMyIGNtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KQogewogCXJldHVybiBfX29tYXBfcHJjbV9yZWFkKGNtX2Jhc2UsIG1vZHVsZSwgaWR4KTsKIH0KLUVYUE9SVF9TWU1CT0woY21fcmVhZF9tb2RfcmVnKTsKIAogLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00gbW9kdWxlICovCiB2b2lkIGNtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCkKIHsKIAlfX29tYXBfcHJjbV93cml0ZSh2YWwsIGNtX2Jhc2UsIG1vZHVsZSwgaWR4KTsKIH0KLUVYUE9SVF9TWU1CT0woY21fd3JpdGVfbW9kX3JlZyk7CiAKIC8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBDTSBtb2R1bGUuIENhbGxlciBtdXN0IGxvY2sgKi8KIHUzMiBjbV9ybXdfbW9kX3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKQEAgLTIxOSw3ICsyMTUsNiBAQAogCiAJcmV0dXJuIHY7CiB9Ci1FWFBPUlRfU1lNQk9MKGNtX3Jtd19tb2RfcmVnX2JpdHMpOwogCiAvKioKICAqIG9tYXAyX2NtX3dhaXRfaWRsZXN0IC0gd2FpdCBmb3IgSURMRVNUIGJpdCB0byBpbmRpY2F0ZSBtb2R1bGUgcmVhZGluZXNzCkBAIC0yNDcsOSArMjQyLDggQEAKIAkJQlVHKCk7CiAKIAkvKiBXYWl0IGZvciBsb2NrICovCi0Jd2hpbGUgKCgoX19yYXdfcmVhZGwocmVnKSAmIG1hc2spICE9IGVuYSkgJiYKLQkgICAgICAgKGkrKyA8IE1BWF9NT0RVTEVfRU5BQkxFX1dBSVQpKQotCQl1ZGVsYXkoMSk7CisJb21hcF90ZXN0X3RpbWVvdXQoKChfX3Jhd19yZWFkbChyZWcpICYgbWFzaykgPT0gZW5hKSwKKwkJCSAgTUFYX01PRFVMRV9FTkFCTEVfV0FJVCwgaSk7CiAKIAlpZiAoaSA8IE1BWF9NT0RVTEVfRU5BQkxFX1dBSVQpCiAJCXByX2RlYnVnKCJjbTogTW9kdWxlIGFzc29jaWF0ZWQgd2l0aCBjbG9jayAlcyByZWFkeSBhZnRlciAlZCAiCkBAIC0yNjUsNiArMjU5LDcgQEAKIHsKIAlwcm1fYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnBybTsKIAljbV9iYXNlID0gb21hcDJfZ2xvYmFscy0+Y207CisJY20yX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5jbTI7CiB9CiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy00NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDFjODEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy00NHh4LmgKQEAgLTAsMCArMSwyMjA1IEBACisvKgorICogT01BUDQ0eHggUG93ZXIgTWFuYWdlbWVudCByZWdpc3RlciBiaXRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5IChwYXVsQHB3c2FuLmNvbSkKKyAqIFJhamVuZHJhIE5heWFrIChybmF5YWtAdGkuY29tKQorICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCisgKgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgorICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAorICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCisgKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0CisgKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk1fUkVHQklUU180NFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9SRUdCSVRTXzQ0WFhfSAorCisjaW5jbHVkZSAicHJtLmgiCisKKworLyoKKyAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCisgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUJCT0ZGX0FDVF9FWFBPUlRfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfQUJCT0ZGX0FDVF9FWFBPUlRfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKKworLyoKKyAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCisgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUJCT0ZGX1NMRUVQX0VYUE9SVF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9BQkJPRkZfU0xFRVBfRVhQT1JUX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUJCX0lWQV9ET05FX0VOX1NISUZUCQkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgT01BUDQ0MzBfQUJCX0lWQV9ET05FX0VOX01BU0sJCQkJCUJJVEZJRUxEKDMxLCAzMSkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUJCX0lWQV9ET05FX1NUX1NISUZUCQkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgT01BUDQ0MzBfQUJCX0lWQV9ET05FX1NUX01BU0sJCQkJCUJJVEZJRUxEKDMxLCAzMSkKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCisjZGVmaW5lIE9NQVA0NDMwX0FCQl9NUFVfRE9ORV9FTl9TSElGVAkJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX0VOX01BU0sJCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9BQkJfTVBVX0RPTkVfU1RfU0hJRlQJCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0FCQl9NUFVfRE9ORV9TVF9NQVNLCQkJCQlCSVRGSUVMRCg3LCA3KQorCisvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCisjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9GQkJfU0VMX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9BQ1RJVkVfRkJCX1NFTF9NQVNLCQkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCisjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9SQkJfU0VMX1NISUZUCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9BQ1RJVkVfUkJCX1NFTF9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQUVTU01FTV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQUVTU01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAxNykKKworLyogVXNlZCBieSBQTV9BQkVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBQTV9BQkVfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA1KQorCisvKgorICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKKyAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9BSVBPRkZfU0hJRlQJCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9BSVBPRkZfTUFTSwkJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUFJNX1ZPTFRDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfQ09SRV9MX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfQ09SRV9MX01BU0sJCQkJQklURklFTEQoMCwgMSkKKworLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9JVkFfTF9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX0lWQV9MX01BU0sJCQkJQklURklFTEQoNCwgNSkKKworLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9NUFVfTF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX01QVV9MX01BU0sJCQkJQklURklFTEQoMiwgMykKKworLyogVXNlZCBieSBQTV9DQU1fUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NBTV9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NBTV9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCisKKy8qIFVzZWQgYnkgUE1fQ0FNX1BXUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0FNX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKKworLyogVXNlZCBieSBQUk1fQ0xLUkVRQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DTEtSRVFfQ09ORF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLUkVRX0NPTkRfTUFTSwkJCQkJQklURklFTEQoMCwgMikKKworLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfQ01EICovCisjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMCwgNykKKworLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfQ01EICovCisjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDgsIDE1KQorCisvKiBVc2VkIGJ5IFBSTV9WQ19WQUxfU01QU19SQV9DTUQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX01QVV9MX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAyMykKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01EX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTURfVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDEyLCAxMikKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01EX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfTVBVX0xfTUFTSwkJCQkJQklURklFTEQoMTcsIDE3KQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgxOCwgMTkpCisKKy8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fUkVUU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9TVEFURVNUX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA3KQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19PTlNUQVRFX1NISUZUCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNykKKworLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PVEhFUl9CQU5LX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PVEhFUl9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PVEhFUl9CQU5LX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg0LCA1KQorCisvKiBVc2VkIGJ5IFBSTV9WQ19WQUxfQllQQVNTICovCisjZGVmaW5lIE9NQVA0NDMwX0RBVEFfU0hJRlQJCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfREFUQV9NQVNLCQkJCQkJQklURklFTEQoMTYsIDIzKQorCisvKiBVc2VkIGJ5IFBSTV9ERVZJQ0VfT0ZGX0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfREVWSUNFX09GRl9FTkFCTEVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfREVWSUNFX09GRl9FTkFCTEVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0kyQ19NT0RFICovCisjZGVmaW5lIE9NQVA0NDMwX0RGSUxURVJFTl9TSElGVAkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfREZJTFRFUkVOX01BU0sJCQkJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVLCBQUk1fSVJRRU5BQkxFX1RFU0xBICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQUJFX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQUJFX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFUsIFBSTV9JUlFTVEFUVVNfVEVTTEEgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX0VOX01BU0sJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX0REUlBIWV9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0REUlBIWV9SRUNBTF9TVF9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVLCBQUk1fSVJRRU5BQkxFX1RFU0xBICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX1NUX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NUFVfUkVDQUxfRU5fU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NUFVfUkVDQUxfRU5fTUFTSwkJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX1VOSVBST19SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1VOSVBST19SRUNBTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVU5JUFJPX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVU5JUFJPX1JFQ0FMX1NUX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9EUExMX1VTQl9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1VTQl9SRUNBTF9FTl9NQVNLCQkJCQlCSVRGSUVMRCg1LCA1KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX1NUX01BU0sJCQkJCUJJVEZJRUxEKDUsIDUpCisKKy8qIFVzZWQgYnkgUE1fRFNTX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX09OU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQorCisvKiBVc2VkIGJ5IFBNX0RTU19QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFNTX01FTV9SRVRTVEFURV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfRFNTX01FTV9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBNX0RTU19QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRFNTX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCisKKy8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9MMlJBTV9PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMjAsIDIxKQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9MMlJBTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDgsIDkpCisKKy8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9VTklDQUNIRV9PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMjIsIDIzKQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9VTklDQUNIRV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTEsIDExKQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTEpCisKKy8qIFVzZWQgYnkgUk1fTVBVX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1RfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1RfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVDFTVF9TSElGVAkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVDFTVF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMlNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMlNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qIFVzZWQgYnkgUk1fSVZBSERfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1NFUTFfUlNUMVNUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVExX1JTVDFTVF9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUk1fSVZBSERfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1NFUTJfUlNUMlNUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVEyX1JTVDJTVF9NQVNLCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qIFVzZWQgYnkgUE1fRU1VX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9FTVVfQkFOS19PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCisKKy8qIFVzZWQgYnkgUE1fRU1VX1BXUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA1KQorCisvKgorICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKKyAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAsIFBSTV9TUkFNX1dLVVBfU0VUVVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9FTkFCTEVfUlRBX0VYUE9SVF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9FTkFCTEVfUlRBX0VYUE9SVF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKgorICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKKyAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9FTkZVTkMxX1NISUZUCQkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DMV9NQVNLCQkJCQkJQklURklFTEQoMywgMykKKworLyoKKyAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCisgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DM19TSElGVAkJCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzNfTUFTSwkJCQkJCUJJVEZJRUxEKDUsIDUpCisKKy8qCisgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAorICogUFJNX0xET19TUkFNX01QVV9TRVRVUAorICovCisjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzRfU0hJRlQJCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9FTkZVTkM0X01BU0sJCQkJCQlCSVRGSUVMRCg2LCA2KQorCisvKgorICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKKyAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9FTkZVTkM1X1NISUZUCQkJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNV9NQVNLCQkJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLworI2RlZmluZSBPTUFQNDQzMF9FUlJPUkdBSU5fU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9FUlJPUkdBSU5fTUFTSwkJCQkJCUJJVEZJRUxEKDE2LCAyMykKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLworI2RlZmluZSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9TSElGVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0VSUk9ST0ZGU0VUX01BU0sJCQkJCUJJVEZJRUxEKDI0LCAzMSkKKworLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfRVhURVJOQUxfV0FSTV9SU1RfU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfRVhURVJOQUxfV0FSTV9SU1RfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLworI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURV9TSElGVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VVUERBVEVfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WT0xUQUdFLCBQUk1fVlBfSVZBX1ZPTFRBR0UsIFBSTV9WUF9NUFVfVk9MVEFHRSAqLworI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURVdBSVRfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFVVBEQVRFV0FJVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCAzMSkKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9URVNMQSAqLworI2RlZmluZSBPTUFQNDQzMF9GT1JDRVdLVVBfRU5fU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9GT1JDRVdLVVBfRU5fTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFV0tVUF9TVF9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFV0tVUF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qIFVzZWQgYnkgUE1fR0ZYX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9HRlhfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9HRlhfTUVNX09OU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQorCisvKiBVc2VkIGJ5IFBNX0dGWF9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfR0ZYX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCisKKy8qIFVzZWQgYnkgUFJNX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0dMT0JBTF9DT0xEX1JTVF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX0NPTERfUlNUX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUFJNX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0dMT0JBTF9XQVJNX1NXX1JTVF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV0FSTV9TV19SU1RfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX1dVRU5fU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV1VFTl9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTYpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfTU9ERSAqLworI2RlZmluZSBPTUFQNDQzMF9IU01DT0RFX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNNQ09ERV9NQVNLCQkJCQkJQklURklFTEQoMCwgMikKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0kyQ19NT0RFICovCisjZGVmaW5lIE9NQVA0NDMwX0hTTU9ERUVOX1NISUZUCQkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfSFNNT0RFRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfQ0xLICovCisjZGVmaW5lIE9NQVA0NDMwX0hTU0NMSF9TSElGVAkJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9IU1NDTEhfTUFTSwkJCQkJCUJJVEZJRUxEKDE2LCAyMykKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0kyQ19DTEsgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xMX1NISUZUCQkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0hTU0NMTF9NQVNLCQkJCQkJQklURklFTEQoMjQsIDMxKQorCisvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX09OU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQorCisvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA1KQorCisvKiBVc2VkIGJ5IFJNX01QVV9SU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9JQ0VDUlVTSEVSX01QVV9SU1RfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9NUFVfUlNUX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QxU1RfU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QxU1RfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKKworLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QyU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QyU1RfTUFTSwkJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBSTV9JVkFIRF9SU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9JQ0VDUlVTSEVSX1NFUTFfUlNUMVNUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMV9SU1QxU1RfTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQorCisvKiBVc2VkIGJ5IFJNX0lWQUhEX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMl9SU1QyU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9TRVEyX1JTVDJTVF9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUFJNX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX0lDRVBJQ0tfUlNUX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JQ0VQSUNLX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX0NPTkZJRywgUFJNX1ZQX0lWQV9DT05GSUcsIFBSTV9WUF9NUFVfQ09ORklHICovCisjZGVmaW5lIE9NQVA0NDMwX0lOSVRWRERfU0hJRlQJCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9JTklUVkREX01BU0sJCQkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX0NPTkZJRywgUFJNX1ZQX0lWQV9DT05GSUcsIFBSTV9WUF9NUFVfQ09ORklHICovCisjZGVmaW5lIE9NQVA0NDMwX0lOSVRWT0xUQUdFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9JTklUVk9MVEFHRV9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxNSkKKworLyoKKyAqIFVzZWQgYnkgUE1fRU1VX1BXUlNUU1QsIFBNX0NPUkVfUFdSU1RTVCwgUE1fQ0FNX1BXUlNUU1QsIFBNX0wzSU5JVF9QV1JTVFNULAorICogUE1fQUJFX1BXUlNUU1QsIFBNX0dGWF9QV1JTVFNULCBQTV9NUFVfUFdSU1RTVCwgUE1fQ0VGVVNFX1BXUlNUU1QsCisgKiBQTV9EU1NfUFdSU1RTVCwgUE1fTDRQRVJfUFdSU1RTVCwgUE1fVEVTTEFfUFdSU1RTVCwgUE1fSVZBSERfUFdSU1RTVAorICovCisjZGVmaW5lIE9NQVA0NDMwX0lOVFJBTlNJVElPTl9TSElGVAkJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0lOVFJBTlNJVElPTl9NQVNLCQkJCQlCSVRGSUVMRCgyMCwgMjApCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX0lPX0VOX1NISUZUCQkJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfSU9fRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9JT19PTl9TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0lPX09OX1NUQVRVU19NQVNLCQkJCQlCSVRGSUVMRCg1LCA1KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9JT19TVF9TSElGVAkJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0lPX1NUX01BU0sJCQkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSVNPQ0xLX09WRVJSSURFX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9JU09DTEtfT1ZFUlJJREVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQUk1fSU9fUE1DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19TVEFUVVNfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQUk1fSU9fUE1DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX0lTT09WUl9FWFRFTkRfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0lTT09WUl9FWFRFTkRfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKKworLyogVXNlZCBieSBQUk1fSU9fQ09VTlQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfSVNPXzJfT05fVElNRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfSVNPXzJfT05fVElNRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTYsIDE3KQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1BXUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg0LCA1KQorCisvKgorICogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCwgUE1fTDNJTklUX1BXUlNUQ1RSTCwgUE1fQUJFX1BXUlNUQ1RSTCwKKyAqIFBNX01QVV9QV1JTVENUUkwsIFBNX0RTU19QV1JTVENUUkwsIFBNX0w0UEVSX1BXUlNUQ1RSTCwgUE1fVEVTTEFfUFdSU1RDVFJMLAorICogUE1fSVZBSERfUFdSU1RDVFJMCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgyLCAyKQorCisvKgorICogVXNlZCBieSBQTV9FTVVfUFdSU1RTVCwgUE1fQ09SRV9QV1JTVFNULCBQTV9DQU1fUFdSU1RTVCwgUE1fTDNJTklUX1BXUlNUU1QsCisgKiBQTV9BQkVfUFdSU1RTVCwgUE1fR0ZYX1BXUlNUU1QsIFBNX01QVV9QV1JTVFNULCBQTV9DRUZVU0VfUFdSU1RTVCwKKyAqIFBNX0RTU19QV1JTVFNULCBQTV9MNFBFUl9QV1JTVFNULCBQTV9URVNMQV9QV1JTVFNULCBQTV9JVkFIRF9QV1JTVFNUCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9HSUNTVEFURVNUX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKKworLyoKKyAqIFVzZWQgYnkgUk1fV0tVUF9HUElPMV9DT05URVhULCBSTV9XS1VQX0tFWUJPQVJEX0NPTlRFWFQsCisgKiBSTV9XS1VQX0w0V0tVUF9DT05URVhULCBSTV9XS1VQX1JUQ19DT05URVhULCBSTV9XS1VQX1NBUlJBTV9DT05URVhULAorICogUk1fV0tVUF9TWU5DVElNRVJfQ09OVEVYVCwgUk1fV0tVUF9USU1FUjEyX0NPTlRFWFQsIFJNX1dLVVBfVElNRVIxX0NPTlRFWFQsCisgKiBSTV9XS1VQX1VTSU1fQ09OVEVYVCwgUk1fV0tVUF9XRFQxX0NPTlRFWFQsIFJNX1dLVVBfV0RUMl9DT05URVhULAorICogUk1fRU1VX0RFQlVHU1NfQ09OVEVYVCwgUk1fRDJEX1NBRDJEX0NPTlRFWFQsIFJNX0QyRF9TQUQyRF9GV19DT05URVhULAorICogUk1fRFVDQVRJX0RVQ0FUSV9DT05URVhULCBSTV9MM0lOU1RSX0wzXzNfQ09OVEVYVCwKKyAqIFJNX0wzSU5TVFJfTDNfSU5TVFJfQ09OVEVYVCwgUk1fTDNJTlNUUl9PQ1BfV1AxX0NPTlRFWFQsCisgKiBSTV9MM18xX0wzXzFfQ09OVEVYVCwgUk1fTDNfMl9MM18yX0NPTlRFWFQsIFJNX0wzXzJfT0NNQ19SQU1fQ09OVEVYVCwKKyAqIFJNX0w0Q0ZHX0w0X0NGR19DT05URVhULCBSTV9MNENGR19TQVJfUk9NX0NPTlRFWFQsIFJNX01FTUlGX0RMTF9DT05URVhULAorICogUk1fTUVNSUZfRExMX0hfQ09OVEVYVCwgUk1fTUVNSUZfRE1NX0NPTlRFWFQsIFJNX01FTUlGX0VNSUZfRldfQ09OVEVYVCwKKyAqIFJNX0NBTV9GRElGX0NPTlRFWFQsIFJNX0NBTV9JU1NfQ09OVEVYVCwgUk1fTDNJTklUX0NDUFRYX0NPTlRFWFQsCisgKiBSTV9MM0lOSVRfRU1BQ19DT05URVhULCBSTV9MM0lOSVRfUDE1MDBfQ09OVEVYVCwgUk1fTDNJTklUX1BDSUVTU19DT05URVhULAorICogUk1fTDNJTklUX1NBVEFfQ09OVEVYVCwgUk1fTDNJTklUX1RQUFNTX0NPTlRFWFQsIFJNX0wzSU5JVF9VTklQUk8xX0NPTlRFWFQsCisgKiBSTV9MM0lOSVRfVVNCUEhZT0NQMlNDUF9DT05URVhULCBSTV9MM0lOSVRfWEhQSV9DT05URVhULAorICogUk1fQUJFX0FFU1NfQ09OVEVYVCwgUk1fQUJFX0RNSUNfQ09OVEVYVCwgUk1fQUJFX01DQVNQX0NPTlRFWFQsCisgKiBSTV9BQkVfTUNCU1AxX0NPTlRFWFQsIFJNX0FCRV9NQ0JTUDJfQ09OVEVYVCwgUk1fQUJFX01DQlNQM19DT05URVhULAorICogUk1fQUJFX1BETV9DT05URVhULCBSTV9BQkVfU0xJTUJVU19DT05URVhULCBSTV9BQkVfVElNRVI1X0NPTlRFWFQsCisgKiBSTV9BQkVfVElNRVI2X0NPTlRFWFQsIFJNX0FCRV9USU1FUjdfQ09OVEVYVCwgUk1fQUJFX1RJTUVSOF9DT05URVhULAorICogUk1fQUJFX1dEVDNfQ09OVEVYVCwgUk1fR0ZYX0dGWF9DT05URVhULCBSTV9NUFVfTVBVX0NPTlRFWFQsCisgKiBSTV9DRUZVU0VfQ0VGVVNFX0NPTlRFWFQsIFJNX0FMV09OX01ETUlOVENfQ09OVEVYVCwKKyAqIFJNX0FMV09OX1NSX0NPUkVfQ09OVEVYVCwgUk1fQUxXT05fU1JfSVZBX0NPTlRFWFQsIFJNX0FMV09OX1NSX01QVV9DT05URVhULAorICogUk1fRFNTX0RFSVNTX0NPTlRFWFQsIFJNX0RTU19EU1NfQ09OVEVYVCwgUk1fTDRQRVJfQURDX0NPTlRFWFQsCisgKiBSTV9MNFBFUl9ETVRJTUVSMTBfQ09OVEVYVCwgUk1fTDRQRVJfRE1USU1FUjExX0NPTlRFWFQsCisgKiBSTV9MNFBFUl9ETVRJTUVSMl9DT05URVhULCBSTV9MNFBFUl9ETVRJTUVSM19DT05URVhULAorICogUk1fTDRQRVJfRE1USU1FUjRfQ09OVEVYVCwgUk1fTDRQRVJfRE1USU1FUjlfQ09OVEVYVCwgUk1fTDRQRVJfRUxNX0NPTlRFWFQsCisgKiBSTV9MNFBFUl9IRFExV19DT05URVhULCBSTV9MNFBFUl9IRUNDMV9DT05URVhULCBSTV9MNFBFUl9IRUNDMl9DT05URVhULAorICogUk1fTDRQRVJfSTJDMl9DT05URVhULCBSTV9MNFBFUl9JMkMzX0NPTlRFWFQsIFJNX0w0UEVSX0kyQzRfQ09OVEVYVCwKKyAqIFJNX0w0UEVSX0kyQzVfQ09OVEVYVCwgUk1fTDRQRVJfTDRfUEVSX0NPTlRFWFQsIFJNX0w0UEVSX01DQVNQMl9DT05URVhULAorICogUk1fTDRQRVJfTUNBU1AzX0NPTlRFWFQsIFJNX0w0UEVSX01DQlNQNF9DT05URVhULCBSTV9MNFBFUl9NQ1NQSTFfQ09OVEVYVCwKKyAqIFJNX0w0UEVSX01DU1BJMl9DT05URVhULCBSTV9MNFBFUl9NQ1NQSTNfQ09OVEVYVCwgUk1fTDRQRVJfTUNTUEk0X0NPTlRFWFQsCisgKiBSTV9MNFBFUl9NR0FURV9DT05URVhULCBSTV9MNFBFUl9NTUNTRDNfQ09OVEVYVCwgUk1fTDRQRVJfTU1DU0Q0X0NPTlRFWFQsCisgKiBSTV9MNFBFUl9NTUNTRDVfQ09OVEVYVCwgUk1fTDRQRVJfTVNQUk9IR19DT05URVhULAorICogUk1fTDRQRVJfU0xJTUJVUzJfQ09OVEVYVCwgUk1fTDRTRUNfUEtBRUlQMjlfQ09OVEVYVCwKKyAqIFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQsIFJNX0lWQUhEX0lWQUhEX0NPTlRFWFQsIFJNX0lWQUhEX1NMMl9DT05URVhUCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVENPTlRFWFRfREZGX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9ERkZfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyoKKyAqIFVzZWQgYnkgUk1fRDJEX01PREVNX0lDUl9DT05URVhULCBSTV9EMkRfU0FEMkRfQ09OVEVYVCwKKyAqIFJNX0QyRF9TQUQyRF9GV19DT05URVhULCBSTV9EVUNBVElfRFVDQVRJX0NPTlRFWFQsIFJNX0wzSU5TVFJfTDNfM19DT05URVhULAorICogUk1fTDNJTlNUUl9PQ1BfV1AxX0NPTlRFWFQsIFJNX0wzXzFfTDNfMV9DT05URVhULCBSTV9MM18yX0dQTUNfQ09OVEVYVCwKKyAqIFJNX0wzXzJfTDNfMl9DT05URVhULCBSTV9MNENGR19IV19TRU1fQ09OVEVYVCwgUk1fTDRDRkdfTDRfQ0ZHX0NPTlRFWFQsCisgKiBSTV9MNENGR19NQUlMQk9YX0NPTlRFWFQsIFJNX01FTUlGX0RNTV9DT05URVhULCBSTV9NRU1JRl9FTUlGXzFfQ09OVEVYVCwKKyAqIFJNX01FTUlGX0VNSUZfMl9DT05URVhULCBSTV9NRU1JRl9FTUlGX0ZXX0NPTlRFWFQsIFJNX01FTUlGX0VNSUZfSDFfQ09OVEVYVCwKKyAqIFJNX01FTUlGX0VNSUZfSDJfQ09OVEVYVCwgUk1fU0RNQV9TRE1BX0NPTlRFWFQsIFJNX0wzSU5JVF9IU0lfQ09OVEVYVCwKKyAqIFJNX0wzSU5JVF9NTUMxX0NPTlRFWFQsIFJNX0wzSU5JVF9NTUMyX0NPTlRFWFQsIFJNX0wzSU5JVF9NTUM2X0NPTlRFWFQsCisgKiBSTV9MM0lOSVRfVVNCX0hPU1RfQ09OVEVYVCwgUk1fTDNJTklUX1VTQl9IT1NUX0ZTX0NPTlRFWFQsCisgKiBSTV9MM0lOSVRfVVNCX09UR19DT05URVhULCBSTV9MM0lOSVRfVVNCX1RMTF9DT05URVhULCBSTV9EU1NfRFNTX0NPTlRFWFQsCisgKiBSTV9MNFBFUl9HUElPMl9DT05URVhULCBSTV9MNFBFUl9HUElPM19DT05URVhULCBSTV9MNFBFUl9HUElPNF9DT05URVhULAorICogUk1fTDRQRVJfR1BJTzVfQ09OVEVYVCwgUk1fTDRQRVJfR1BJTzZfQ09OVEVYVCwgUk1fTDRQRVJfSTJDMV9DT05URVhULAorICogUk1fTDRQRVJfTDRfUEVSX0NPTlRFWFQsIFJNX0w0UEVSX1VBUlQxX0NPTlRFWFQsIFJNX0w0UEVSX1VBUlQyX0NPTlRFWFQsCisgKiBSTV9MNFBFUl9VQVJUM19DT05URVhULCBSTV9MNFBFUl9VQVJUNF9DT05URVhULCBSTV9MNFNFQ19BRVMxX0NPTlRFWFQsCisgKiBSTV9MNFNFQ19BRVMyX0NPTlRFWFQsIFJNX0w0U0VDX0NSWVBUT0RNQV9DT05URVhULCBSTV9MNFNFQ19ERVMzREVTX0NPTlRFWFQsCisgKiBSTV9MNFNFQ19STkdfQ09OVEVYVCwgUk1fTDRTRUNfU0hBMk1ENTFfQ09OVEVYVCwgUk1fVEVTTEFfVEVTTEFfQ09OVEVYVAorICovCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RDT05URVhUX1JGRl9TSElGVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVENPTlRFWFRfUkZGX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUk1fQUJFX0FFU1NfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0FFU1NNRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQUVTU01FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFJNX0NBTV9GRElGX0NPTlRFWFQsIFJNX0NBTV9JU1NfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NBTV9NRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ0FNX01FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFJNX0wzSU5TVFJfT0NQX1dQMV9DT05URVhUICovCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9OUkVUX0JBTktfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX05SRVRfQkFOS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFJlbmFtZWQgZnJvbSBMT1NUTUVNX0NPUkVfTlJFVF9CQU5LIFVzZWQgYnkgUk1fTUVNSUZfRE1NX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX05SRVRfQkFOS185XzlfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LXzlfOV9NQVNLCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBSTV9MM18yX09DTUNfUkFNX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09DTVJBTV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfT0NNUkFNX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyoKKyAqIFVzZWQgYnkgUk1fRDJEX01PREVNX0lDUl9DT05URVhULCBSTV9NRU1JRl9ETU1fQ09OVEVYVCwKKyAqIFJNX1NETUFfU0RNQV9DT05URVhUCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09USEVSX0JBTktfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09USEVSX0JBTktfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFJNX0RTU19ERUlTU19DT05URVhULCBSTV9EU1NfRFNTX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EU1NfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RTU19NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBSTV9EVUNBVElfRFVDQVRJX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EVUNBVElfTDJSQU1fU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EVUNBVElfTDJSQU1fTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9EVUNBVElfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RVQ0FUSV9VTklDQUNIRV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RVQ0FUSV9VTklDQUNIRV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUk1fRU1VX0RFQlVHU1NfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0VNVV9CQU5LX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0VNVV9CQU5LX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUk1fR0ZYX0dGWF9DT05URVhUICovCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fR0ZYX01FTV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9HRlhfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUk1fSVZBSERfSVZBSERfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0hXQV9NRU1fU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0hXQV9NRU1fTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQorCisvKgorICogVXNlZCBieSBSTV9MM0lOSVRfQ0NQVFhfQ09OVEVYVCwgUk1fTDNJTklUX0VNQUNfQ09OVEVYVCwKKyAqIFJNX0wzSU5JVF9IU0lfQ09OVEVYVCwgUk1fTDNJTklUX01NQzFfQ09OVEVYVCwgUk1fTDNJTklUX01NQzJfQ09OVEVYVCwKKyAqIFJNX0wzSU5JVF9NTUM2X0NPTlRFWFQsIFJNX0wzSU5JVF9QQ0lFU1NfQ09OVEVYVCwgUk1fTDNJTklUX1NBVEFfQ09OVEVYVCwKKyAqIFJNX0wzSU5JVF9UUFBTU19DT05URVhULCBSTV9MM0lOSVRfVU5JUFJPMV9DT05URVhULAorICogUk1fTDNJTklUX1VTQl9PVEdfQ09OVEVYVCwgUk1fTDNJTklUX1hIUElfQ09OVEVYVAorICovCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTDNJTklUX0JBTksxX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTDNJTklUX0JBTksxX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBSTV9NUFVfTVBVX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9NUFVfTDFfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wxX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUk1fTVBVX01QVV9DT05URVhUICovCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wyX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9MMl9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFJNX01QVV9NUFVfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9SQU1fU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9SQU1fTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQorCisvKgorICogVXNlZCBieSBSTV9MNFBFUl9IRUNDMV9DT05URVhULCBSTV9MNFBFUl9IRUNDMl9DT05URVhULAorICogUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFQsIFJNX0w0UEVSX01NQ1NEM19DT05URVhULCBSTV9MNFBFUl9NTUNTRDRfQ09OVEVYVCwKKyAqIFJNX0w0UEVSX01NQ1NENV9DT05URVhULCBSTV9MNFBFUl9TTElNQlVTMl9DT05URVhULCBSTV9MNFNFQ19QS0FFSVAyOV9DT05URVhUCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9OT05SRVRBSU5FRF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTk9OUkVUQUlORURfQkFOS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qCisgKiBVc2VkIGJ5IFJNX0FCRV9ETUlDX0NPTlRFWFQsIFJNX0FCRV9NQ0JTUDFfQ09OVEVYVCwgUk1fQUJFX01DQlNQMl9DT05URVhULAorICogUk1fQUJFX01DQlNQM19DT05URVhULCBSTV9BQkVfUERNX0NPTlRFWFQsIFJNX0FCRV9TTElNQlVTX0NPTlRFWFQKKyAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1BFUklIUE1FTV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1BFUklIUE1FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKgorICogVXNlZCBieSBSTV9MNFBFUl9NU1BST0hHX0NPTlRFWFQsIFJNX0w0UEVSX1VBUlQxX0NPTlRFWFQsCisgKiBSTV9MNFBFUl9VQVJUMl9DT05URVhULCBSTV9MNFBFUl9VQVJUM19DT05URVhULCBSTV9MNFBFUl9VQVJUNF9DT05URVhULAorICogUk1fTDRTRUNfQ1JZUFRPRE1BX0NPTlRFWFQKKyAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1JFVEFJTkVEX0JBTktfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9SRVRBSU5FRF9CQU5LX01BU0sJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBSTV9JVkFIRF9TTDJfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1NMMl9NRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fU0wyX01FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFJNX0lWQUhEX0lWQUhEX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9UQ00xX01FTV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9UQ00xX01FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFJNX0lWQUhEX0lWQUhEX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9UQ00yX01FTV9TSElGVAkJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9UQ00yX01FTV9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9FRE1BX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0VETUFfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qIFVzZWQgYnkgUk1fVEVTTEFfVEVTTEFfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wxX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wxX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUk1fVEVTTEFfVEVTTEFfQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wyX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wyX01BU0sJCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUk1fV0tVUF9TQVJSQU1fQ09OVEVYVCAqLworI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1dLVVBfQkFOS19TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1dLVVBfQkFOS19NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKgorICogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCwgUE1fQ0FNX1BXUlNUQ1RSTCwgUE1fTDNJTklUX1BXUlNUQ1RSTCwKKyAqIFBNX0FCRV9QV1JTVENUUkwsIFBNX0dGWF9QV1JTVENUUkwsIFBNX01QVV9QV1JTVENUUkwsIFBNX0NFRlVTRV9QV1JTVENUUkwsCisgKiBQTV9EU1NfUFdSU1RDVFJMLCBQTV9MNFBFUl9QV1JTVENUUkwsIFBNX1RFU0xBX1BXUlNUQ1RSTCwgUE1fSVZBSERfUFdSU1RDVFJMCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9MT1dQT1dFUlNUQVRFQ0hBTkdFX01BU0sJCQkJQklURklFTEQoNCwgNCkKKworLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9NRU1PUllDSEFOR0VfU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX01FTU9SWUNIQU5HRV9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1JFQURZX1NISUZUCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9SRUFEWV9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1NIVVRET1dOX0lSUV9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9TSFVURE9XTl9JUlFfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1NMRUVQX1NUX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0xFRVBfU1RfTUFTSwkJCQkJQklURklFTEQoMTYsIDE2KQorCisvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1dBS0VfSVJRX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9XQUtFX0lSUV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCisKKy8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMV9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA1KQorCisvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTVBVX0wyX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCisKKy8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMl9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQorCisvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMl9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg2LCA3KQorCisvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTVBVX1JBTV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfTVBVX1JBTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKKworLyogVXNlZCBieSBQTV9NUFVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBQTV9NUFVfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA5KQorCisvKiBVc2VkIGJ5IFBSTV9SU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9NUFVfU0VDVVJJVFlfVklPTF9SU1RfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfTVBVX1NFQ1VSSVRZX1ZJT0xfUlNUX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfTVBVX1dEVF9SU1RfU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9XRFRfUlNUX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfT05TVEFURV9TSElGVAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfTk9OUkVUQUlORURfQkFOS19PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTgsIDE5KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfTk9OUkVUQUlORURfQkFOS19SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfTk9OUkVUQUlORURfQkFOS19TVEFURVNUX01BU0sJCQkJQklURklFTEQoNiwgNykKKworLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKKworLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTIsIDEyKQorCisvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMykKKworLyoKKyAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAorICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT0ZGX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfT0ZGX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQorCisvKiBVc2VkIGJ5IFBSTV9MRE9fQkFOREdBUF9DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX09GRl9FTkFCTEVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX09GRl9FTkFCTEVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyoKKyAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAorICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT05fU0hJRlQJCQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfT05fTUFTSwkJCQkJCUJJVEZJRUxEKDI0LCAzMSkKKworLyoKKyAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAorICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT05MUF9TSElGVAkJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9PTkxQX01BU0sJCQkJCQlCSVRGSUVMRCgxNiwgMjMpCisKKy8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX0NUUkwsIFBSTV9MRE9fQUJCX01QVV9DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX09QUF9DSEFOR0VfU0hJRlQJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX09QUF9DSEFOR0VfTUFTSwkJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQUk1fTERPX0FCQl9JVkFfQ1RSTCwgUFJNX0xET19BQkJfTVBVX0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfT1BQX1NFTF9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX09QUF9TRUxfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDEpCisKKy8qIFVzZWQgYnkgUFJNX1NSQU1fQ09VTlQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRUNOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRUNOVF9WQUxVRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA1KQorCisvKiBVc2VkIGJ5IFBSTV9QU0NPTl9DT1VOVCAqLworI2RlZmluZSBPTUFQNDQzMF9QQ0hBUkdFX1RJTUVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BDSEFSR0VfVElNRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQorCisvKiBVc2VkIGJ5IFBNX0FCRV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUEVSSVBITUVNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKKworLyogVXNlZCBieSBQTV9BQkVfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEVSSVBITUVNX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9TVEFURVNUX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCisKKy8qIFVzZWQgYnkgUFJNX1BIQVNFMV9DTkRQICovCisjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMV9DTkRQX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKKworLyogVXNlZCBieSBQUk1fUEhBU0UyQV9DTkRQICovCisjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkFfQ05EUF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQV9DTkRQX01BU0sJCQkJCUJJVEZJRUxEKDAsIDMxKQorCisvKiBVc2VkIGJ5IFBSTV9QSEFTRTJCX0NORFAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQl9DTkRQX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJCX0NORFBfTUFTSwkJCQkJQklURklFTEQoMCwgMzEpCisKKy8qIFVzZWQgYnkgUFJNX1BTQ09OX0NPVU5UICovCisjZGVmaW5lIE9NQVA0NDMwX1BPTk9VVF8yX1BHT09ESU5fVElNRV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9QT05PVVRfMl9QR09PRElOX1RJTUVfTUFTSwkJCQlCSVRGSUVMRCg4LCAxNSkKKworLyoKKyAqIFVzZWQgYnkgUE1fRU1VX1BXUlNUQ1RSTCwgUE1fQ09SRV9QV1JTVENUUkwsIFBNX0NBTV9QV1JTVENUUkwsCisgKiBQTV9MM0lOSVRfUFdSU1RDVFJMLCBQTV9BQkVfUFdSU1RDVFJMLCBQTV9HRlhfUFdSU1RDVFJMLCBQTV9NUFVfUFdSU1RDVFJMLAorICogUE1fQ0VGVVNFX1BXUlNUQ1RSTCwgUE1fRFNTX1BXUlNUQ1RSTCwgUE1fTDRQRVJfUFdSU1RDVFJMLAorICogUE1fVEVTTEFfUFdSU1RDVFJMLCBQTV9JVkFIRF9QV1JTVENUUkwKKyAqLworI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDEpCisKKy8qCisgKiBVc2VkIGJ5IFBNX0VNVV9QV1JTVFNULCBQTV9DT1JFX1BXUlNUU1QsIFBNX0NBTV9QV1JTVFNULCBQTV9MM0lOSVRfUFdSU1RTVCwKKyAqIFBNX0FCRV9QV1JTVFNULCBQTV9HRlhfUFdSU1RTVCwgUE1fTVBVX1BXUlNUU1QsIFBNX0NFRlVTRV9QV1JTVFNULAorICogUE1fRFNTX1BXUlNUU1QsIFBNX0w0UEVSX1BXUlNUU1QsIFBNX1RFU0xBX1BXUlNUU1QsIFBNX0lWQUhEX1BXUlNUU1QKKyAqLworI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAxKQorCisvKiBVc2VkIGJ5IFBSTV9QV1JSRVFDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1BXUlJFUV9DT05EX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QV1JSRVFfQ09ORF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAxKQorCisvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLworI2RlZmluZSBPTUFQNDQzMF9SQUNFTl9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9SQUNFTl9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgyMCwgMjApCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1JBQ19WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX0NPUkVfTF9NQVNLCQkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLworI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX0lWQV9MX1NISUZUCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1JBQ19WRERfTVBVX0xfU0hJRlQJCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX01QVV9MX01BU0sJCQkJCUJJVEZJRUxEKDE5LCAxOSkKKworLyoKKyAqIFVzZWQgYnkgUFJNX1ZPTFRTRVRVUF9DT1JFX09GRiwgUFJNX1ZPTFRTRVRVUF9DT1JFX1JFVF9TTEVFUCwKKyAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCisgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKKyAqLworI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fQ09VTlRfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fQ09VTlRfTUFTSwkJCQkJQklURklFTEQoMTYsIDIxKQorCisvKgorICogVXNlZCBieSBQUk1fVk9MVFNFVFVQX0NPUkVfT0ZGLCBQUk1fVk9MVFNFVFVQX0NPUkVfUkVUX1NMRUVQLAorICogUFJNX1ZPTFRTRVRVUF9JVkFfT0ZGLCBQUk1fVk9MVFNFVFVQX0lWQV9SRVRfU0xFRVAsIFBSTV9WT0xUU0VUVVBfTVBVX09GRiwKKyAqIFBSTV9WT0xUU0VUVVBfTVBVX1JFVF9TTEVFUAorICovCisjZGVmaW5lIE9NQVA0NDMwX1JBTVBfRE9XTl9QUkVTQ0FMX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fUFJFU0NBTF9NQVNLCQkJCQlCSVRGSUVMRCgyNCwgMjUpCisKKy8qCisgKiBVc2VkIGJ5IFBSTV9WT0xUU0VUVVBfQ09SRV9PRkYsIFBSTV9WT0xUU0VUVVBfQ09SRV9SRVRfU0xFRVAsCisgKiBQUk1fVk9MVFNFVFVQX0lWQV9PRkYsIFBSTV9WT0xUU0VUVVBfSVZBX1JFVF9TTEVFUCwgUFJNX1ZPTFRTRVRVUF9NUFVfT0ZGLAorICogUFJNX1ZPTFRTRVRVUF9NUFVfUkVUX1NMRUVQCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9DT1VOVF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9DT1VOVF9NQVNLCQkJCQlCSVRGSUVMRCgwLCA1KQorCisvKgorICogVXNlZCBieSBQUk1fVk9MVFNFVFVQX0NPUkVfT0ZGLCBQUk1fVk9MVFNFVFVQX0NPUkVfUkVUX1NMRUVQLAorICogUFJNX1ZPTFRTRVRVUF9JVkFfT0ZGLCBQUk1fVk9MVFNFVFVQX0lWQV9SRVRfU0xFRVAsIFBSTV9WT0xUU0VUVVBfTVBVX09GRiwKKyAqIFBSTV9WT0xUU0VUVVBfTVBVX1JFVF9TTEVFUAorICovCisjZGVmaW5lIE9NQVA0NDMwX1JBTVBfVVBfUFJFU0NBTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9QUkVTQ0FMX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9SQVZfVkREX0NPUkVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLworI2RlZmluZSBPTUFQNDQzMF9SQVZfVkREX0lWQV9MX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9SQVZfVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfTVBVX0xfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9SQVZfVkREX01QVV9MX01BU0sJCQkJCUJJVEZJRUxEKDE4LCAxOCkKKworLyogVXNlZCBieSBQUk1fVkNfVkFMX0JZUEFTUyAqLworI2RlZmluZSBPTUFQNDQzMF9SRUdBRERSX1NISUZUCQkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfUkVHQUREUl9NQVNLCQkJCQkJQklURklFTEQoOCwgMTUpCisKKy8qCisgKiBVc2VkIGJ5IFBSTV9WQ19WQUxfQ01EX1ZERF9DT1JFX0wsIFBSTV9WQ19WQUxfQ01EX1ZERF9JVkFfTCwKKyAqIFBSTV9WQ19WQUxfQ01EX1ZERF9NUFVfTAorICovCisjZGVmaW5lIE9NQVA0NDMwX1JFVF9TSElGVAkJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1JFVF9NQVNLCQkJCQkJQklURklFTEQoOCwgMTUpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfT05TVEFURV9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTYsIDE3KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfUkVUU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1BXUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19TVEFURVNUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDQsIDUpCisKKy8qCisgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX0NUUkwsIFBSTV9MRE9fU1JBTV9JVkFfQ1RSTCwKKyAqIFBSTV9MRE9fU1JBTV9NUFVfQ1RSTAorICovCisjZGVmaW5lIE9NQVA0NDMwX1JFVE1PREVfRU5BQkxFX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SRVRNT0RFX0VOQUJMRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFJFVklTSU9OX1BSTSAqLworI2RlZmluZSBPTUFQNDQzMF9SRVZfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SRVZfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDcpCisKKy8qIFVzZWQgYnkgUk1fRFVDQVRJX1JTVENUUkwsIFJNX1RFU0xBX1JTVENUUkwsIFJNX0lWQUhEX1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUlNUMV9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JTVDFfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUk1fRFVDQVRJX1JTVFNULCBSTV9URVNMQV9SU1RTVCwgUk1fSVZBSERfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUlNUMVNUX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUlNUMVNUX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9URVNMQV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1JTVDJfU0hJRlQJCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9SU1QyX01BU0sJCQkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fVEVTTEFfUlNUU1QsIFJNX0lWQUhEX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1JTVDJTVF9TSElGVAkJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1JTVDJTVF9NQVNLCQkJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBSTV9EVUNBVElfUlNUQ1RSTCwgUk1fSVZBSERfUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9SU1QzX1NISUZUCQkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfUlNUM19NQVNLCQkJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QsIFJNX0lWQUhEX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1JTVDNTVF9TSElGVAkJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1JTVDNTVF9NQVNLCQkJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQUk1fUlNUVElNRSAqLworI2RlZmluZSBPTUFQNDQzMF9SU1RUSU1FMV9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JTVFRJTUUxX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA5KQorCisvKiBVc2VkIGJ5IFBSTV9SU1RUSU1FICovCisjZGVmaW5lIE9NQVA0NDMwX1JTVFRJTUUyX1NISUZUCQkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1JTVFRJTUUyX01BU0sJCQkJCQlCSVRGSUVMRCgxMCwgMTQpCisKKy8qIFVzZWQgYnkgUFJNX1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUlNUX0dMT0JBTF9DT0xEX1NXX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1JTVF9HTE9CQUxfQ09MRF9TV19NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUFJNX1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUlNUX0dMT0JBTF9XQVJNX1NXX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCisjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogUmVuYW1lZCBmcm9tIFNBX1ZERF9DT1JFX0wgVXNlZCBieSBQUk1fVkNfU01QU19TQSAqLworI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9NQVNLCQkJCQlCSVRGSUVMRCgwLCA2KQorCisvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLworI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBSZW5hbWVkIGZyb20gU0FfVkREX0lWQV9MIFVzZWQgYnkgUFJNX1ZDX1NNUFNfU0EgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX01BU0sJCQlCSVRGSUVMRCg4LCAxNCkKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX01QVV9MX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAxNikKKworLyogUmVuYW1lZCBmcm9tIFNBX1ZERF9NUFVfTCBVc2VkIGJ5IFBSTV9WQ19TTVBTX1NBICovCisjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9NUFVfTF9QUk1fVkNfU01QU19TQV9TSElGVAkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfUFJNX1ZDX1NNUFNfU0FfTUFTSwkJCUJJVEZJRUxEKDE2LCAyMikKKworLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0kyQ19DTEsgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0NMSF9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1NDTEhfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDcpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfQ0xLICovCisjZGVmaW5lIE9NQVA0NDMwX1NDTExfU0hJRlQJCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9TQ0xMX01BU0sJCQkJCQlCSVRGSUVMRCg4LCAxNSkKKworLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0VDVVJFX1dEVF9SU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1NFQ1VSRV9XRFRfUlNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCisKKy8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDYsIDcpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9CWVBBU1MgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0xBVkVBRERSX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TTEFWRUFERFJfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDYpCisKKy8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX1NFVFVQLCBQUk1fTERPX0FCQl9NUFVfU0VUVVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU0xFRVBfUkJCX1NFTF9TSElGVAkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfU0xFRVBfUkJCX1NFTF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBSTV9TUkFNX0NPVU5UICovCisjZGVmaW5lIE9NQVA0NDMwX1NMUENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX1NMUENOVF9WQUxVRV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMjMpCisKKy8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVlNURVBNQVgsIFBSTV9WUF9JVkFfVlNURVBNQVgsIFBSTV9WUF9NUFVfVlNURVBNQVggKi8KKyNkZWZpbmUgT01BUDQ0MzBfU01QU1dBSVRUSU1FTUFYX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNQVhfTUFTSwkJCQkJQklURklFTEQoOCwgMjMpCisKKy8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVlNURVBNSU4sIFBSTV9WUF9JVkFfVlNURVBNSU4sIFBSTV9WUF9NUFVfVlNURVBNSU4gKi8KKyNkZWZpbmUgT01BUDQ0MzBfU01QU1dBSVRUSU1FTUlOX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNSU5fTUFTSwkJCQkJQklURklFTEQoOCwgMjMpCisKKy8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX1NFVFVQLCBQUk1fTERPX0FCQl9NUFVfU0VUVVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1IyRU5fU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TUjJFTl9NQVNLCQkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQUk1fTERPX0FCQl9JVkFfQ1RSTCwgUFJNX0xET19BQkJfTVBVX0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1IyX0lOX1RSQU5TSVRJT05fU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfU1IyX0lOX1RSQU5TSVRJT05fTUFTSwkJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQUk1fTERPX0FCQl9JVkFfQ1RSTCwgUFJNX0xET19BQkJfTVBVX0NUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1IyX1NUQVRVU19TSElGVAkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfU1IyX1NUQVRVU19NQVNLCQkJCQlCSVRGSUVMRCgzLCA0KQorCisvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCisjZGVmaW5lIE9NQVA0NDMwX1NSMl9XVENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU1IyX1dUQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDE1KQorCisvKgorICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9DVFJMLCBQUk1fTERPX1NSQU1fSVZBX0NUUkwsCisgKiBQUk1fTERPX1NSQU1fTVBVX0NUUkwKKyAqLworI2RlZmluZSBPTUFQNDQzMF9TUkFNTERPX1NUQVRVU19TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU1JBTUxET19TVEFUVVNfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKKworLyoKKyAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfQ1RSTCwgUFJNX0xET19TUkFNX0lWQV9DVFJMLAorICogUFJNX0xET19TUkFNX01QVV9DVFJMCisgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1JBTV9JTl9UUkFOU0lUSU9OX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NSQU1fSU5fVFJBTlNJVElPTl9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfTU9ERSAqLworI2RlZmluZSBPTUFQNDQzMF9TUk1PREVFTl9TSElGVAkJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1NSTU9ERUVOX01BU0sJCQkJCQlCSVRGSUVMRCg0LCA0KQorCisvKiBVc2VkIGJ5IFBSTV9WT0xUU0VUVVBfV0FSTVJFU0VUICovCisjZGVmaW5lIE9NQVA0NDMwX1NUQUJMRV9DT1VOVF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX0NPVU5UX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCisKKy8qIFVzZWQgYnkgUFJNX1ZPTFRTRVRVUF9XQVJNUkVTRVQgKi8KKyNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NUQUJMRV9QUkVTQ0FMX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCisKKy8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9UQ00xX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKKworLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVENNMV9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoOCwgOSkKKworLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVA0NDMwX1RDTTJfTUVNX09OU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMjIsIDIzKQorCisvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMTEsIDExKQorCisvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1RDTTJfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoMTAsIDExKQorCisvKiBVc2VkIGJ5IFJNX1RFU0xBX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBU1NfRU1VX1JTVFNUX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBU1NfRU1VX1JTVFNUX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUk1fVEVTTEFfUlNUU1QgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRFNQX0VNVV9SRVFfUlNUU1RfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRFNQX0VNVV9SRVFfUlNUU1RfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDIwLCAyMSkKKworLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRURNQV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRURNQV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKKworLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg4LCA5KQorCisvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCisKKy8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCisKKy8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMl9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDE4LCAxOSkKKworLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKKworLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNiwgNykKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WTElNSVRUTywgUFJNX1ZQX0lWQV9WTElNSVRUTywgUFJNX1ZQX01QVV9WTElNSVRUTyAqLworI2RlZmluZSBPTUFQNDQzMF9USU1FT1VUX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVElNRU9VVF9NQVNLCQkJCQkJQklURklFTEQoMCwgMTUpCisKKy8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfQ09ORklHLCBQUk1fVlBfSVZBX0NPTkZJRywgUFJNX1ZQX01QVV9DT05GSUcgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVElNRU9VVEVOX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9USU1FT1VURU5fTUFTSwkJCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fRU5fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fRU5fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVFJBTlNJVElPTl9TVF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVFJBTlNJVElPTl9TVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBSTV9WQ19WQUxfQllQQVNTICovCisjZGVmaW5lIE9NQVA0NDMwX1ZBTElEX1NISUZUCQkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1ZBTElEX01BU0sJCQkJCQlCSVRGSUVMRCgyNCwgMjQpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19FTl9TSElGVAkJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19TVF9TSElGVAkJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19TVF9NQVNLCQkJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19FTl9TSElGVAkJCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCgzMCwgMzApCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19TVF9TSElGVAkJCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19TVF9NQVNLCQkJCQlCSVRGSUVMRCgzMCwgMzApCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WQ19NUFVfVlBBQ0tfRU5fU0hJRlQJCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX01QVV9WUEFDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX1NUX1NISUZUCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9WQ19NUFVfVlBBQ0tfU1RfTUFTSwkJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfRU5fU0hJRlQJCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9WQ19SQUVSUl9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxMiwgMTIpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1JBRVJSX1NUX1NISUZUCQkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfU1RfTUFTSwkJCQkJQklURklFTEQoMTIsIDEyKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WQ19TQUVSUl9FTl9TSElGVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX0VOX01BU0sJCQkJCUJJVEZJRUxEKDExLCAxMSkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVkNfU0FFUlJfU1RfU0hJRlQJCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9WQ19TQUVSUl9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1RPRVJSX0VOX1NISUZUCQkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfVkNfVE9FUlJfRU5fTUFTSwkJCQkJQklURklFTEQoMTMsIDEzKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9TVF9TSElGVAkJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1RPRVJSX1NUX01BU0sJCQkJCUJJVEZJRUxEKDEzLCAxMykKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WTElNSVRUTywgUFJNX1ZQX0lWQV9WTElNSVRUTywgUFJNX1ZQX01QVV9WTElNSVRUTyAqLworI2RlZmluZSBPTUFQNDQzMF9WRERNQVhfU0hJRlQJCQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfVkRETUFYX01BU0sJCQkJCQlCSVRGSUVMRCgyNCwgMzEpCisKKy8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVkxJTUlUVE8sIFBSTV9WUF9JVkFfVkxJTUlUVE8sIFBSTV9WUF9NUFVfVkxJTUlUVE8gKi8KKyNkZWZpbmUgT01BUDQ0MzBfVkRETUlOX1NISUZUCQkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX1ZERE1JTl9NQVNLCQkJCQkJQklURklFTEQoMTYsIDIzKQorCisvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9WRERfQ09SRV9JMkNfRElTQUJMRV9TSElGVAkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfSTJDX0RJU0FCTEVfTUFTSwkJCQlCSVRGSUVMRCgxMiwgMTIpCisKKy8qIFVzZWQgYnkgUFJNX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX1ZPTFRfTUdSX1JTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9WRERfQ09SRV9WT0xUX01HUl9SU1RfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX0kyQ19ESVNBQkxFX1NISUZUCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX0kyQ19ESVNBQkxFX01BU0sJCQkJQklURklFTEQoMTQsIDE0KQorCisvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1BSRVNFTkNFX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1BSRVNFTkNFX01BU0sJCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUFJNX1JTVFNUICovCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9JVkFfVk9MVF9NR1JfUlNUX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9JVkFfVk9MVF9NR1JfUlNUX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9JMkNfRElTQUJMRV9TSElGVAkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9JMkNfRElTQUJMRV9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKKworLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9QUkVTRU5DRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9QUkVTRU5DRV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQorCisvKiBVc2VkIGJ5IFBSTV9SU1RTVCAqLworI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX1ZPTFRfTUdSX1JTVF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX1ZPTFRfTUdSX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTCAqLworI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDAsIDcpCisKKy8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTCAqLworI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxNSkKKworLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfVk9MICovCisjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMjMpCisKKy8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfQ09ORklHLCBQUk1fVlBfSVZBX0NPTkZJRywgUFJNX1ZQX01QVV9DT05GSUcgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBFTkFCTEVfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUEVOQUJMRV9NQVNLCQkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQUk1fVlBfQ09SRV9TVEFUVVMsIFBSTV9WUF9JVkFfU1RBVFVTLCBQUk1fVlBfTVBVX1NUQVRVUyAqLworI2RlZmluZSBPTUFQNDQzMF9WUElOSURMRV9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1ZQSU5JRExFX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZPTFRBR0UsIFBSTV9WUF9JVkFfVk9MVEFHRSwgUFJNX1ZQX01QVV9WT0xUQUdFICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQVk9MVEFHRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBWT0xUQUdFX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9FTl9NQVNLCQkJCUJJVEZJRUxEKDIwLCAyMCkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9FUVZBTFVFX1NUX1NISUZUCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX0VRVkFMVUVfU1RfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjApCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX0VOX1NISUZUCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX01BWFZERF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTgpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX1NUX1NISUZUCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX01BWFZERF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTgpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX0VOX1NISUZUCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX01JTlZERF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxNywgMTcpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX1NUX1NISUZUCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX01JTlZERF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxNywgMTcpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTk9TTVBTQUNLX0VOX1NISUZUCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX05PU01QU0FDS19FTl9NQVNLCQkJCUJJVEZJRUxEKDE5LCAxOSkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTk9TTVBTQUNLX1NUX01BU0sJCQkJQklURklFTEQoMTksIDE5KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfT1BQQ0hBTkdFRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNikKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX1NUX1NISUZUCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX09QUENIQU5HRURPTkVfU1RfTUFTSwkJCQlCSVRGSUVMRCgxNiwgMTYpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfVFJBTlhET05FX0VOX1NISUZUCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDIxLCAyMSkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfU1RfU0hJRlQJCQkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfVFJBTlhET05FX1NUX01BU0sJCQkJQklURklFTEQoMjEsIDIxKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfRVFWQUxVRV9FTl9TSElGVAkJCQkoMSA8PCAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX0VRVkFMVUVfRU5fTUFTSwkJCQkJQklURklFTEQoMjgsIDI4KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfRVFWQUxVRV9TVF9TSElGVAkJCQkoMSA8PCAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX0VRVkFMVUVfU1RfTUFTSwkJCQkJQklURklFTEQoMjgsIDI4KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUFYVkREX0VOX1NISUZUCQkJCQkoMSA8PCAyNikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgyNiwgMjYpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NQVhWRERfU1RfU0hJRlQJCQkJCSgxIDw8IDI2KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUFYVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDI2LCAyNikKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01JTlZERF9FTl9TSElGVAkJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfRU5fTUFTSwkJCQkJQklURklFTEQoMjUsIDI1KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUlOVkREX1NUX1NISUZUCQkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01JTlZERF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgyNSwgMjUpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfRU5fU0hJRlQJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfRU5fTUFTSwkJCQlCSVRGSUVMRCgyNywgMjcpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfU1RfTUFTSwkJCQlCSVRGSUVMRCgyNywgMjcpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9PUFBDSEFOR0VET05FX0VOX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfT1BQQ0hBTkdFRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNCkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfU1RfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9PUFBDSEFOR0VET05FX1NUX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfVFJBTlhET05FX0VOX1NISUZUCQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfVFJBTlhET05FX0VOX01BU0sJCQkJQklURklFTEQoMjksIDI5KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfVFJBTlhET05FX1NUX1NISUZUCQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfVFJBTlhET05FX1NUX01BU0sJCQkJQklURklFTEQoMjksIDI5KQorCisvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfRU5fTUFTSwkJCQkJQklURklFTEQoNCwgNCkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVV8yICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9FUVZBTFVFX1NUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9FUVZBTFVFX1NUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX0VOX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX1NUX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUlOVkREX0VOX1NISUZUCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUlOVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUlOVkREX1NUX1NISUZUCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUlOVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTk9TTVBTQUNLX0VOX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfRU5fTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX05PU01QU0FDS19TVF9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTk9TTVBTQUNLX1NUX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9PUFBDSEFOR0VET05FX0VOX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9PUFBDSEFOR0VET05FX0VOX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVV8yICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9PUFBDSEFOR0VET05FX1NUX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9PUFBDSEFOR0VET05FX1NUX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCisKKy8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLworI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfVFJBTlhET05FX1NUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfU1RfTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQorCisvKiBVc2VkIGJ5IFBSTV9TUkFNX0NPVU5UICovCisjZGVmaW5lIE9NQVA0NDMwX1ZTRVRVUENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVlNFVFVQQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDE1KQorCisvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZTVEVQTUFYLCBQUk1fVlBfSVZBX1ZTVEVQTUFYLCBQUk1fVlBfTVBVX1ZTVEVQTUFYICovCisjZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUFYX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlNURVBNQVhfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDcpCisKKy8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVlNURVBNSU4sIFBSTV9WUF9JVkFfVlNURVBNSU4sIFBSTV9WUF9NUFVfVlNURVBNSU4gKi8KKyNkZWZpbmUgT01BUDQ0MzBfVlNURVBNSU5fU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WU1RFUE1JTl9NQVNLCQkJCQkJQklURklFTEQoMCwgNykKKworLyogVXNlZCBieSBQUk1fTU9ERU1fSUZfQ1RSTCAqLworI2RlZmluZSBPTUFQNDQzMF9XQUtFX01PREVNX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XQUtFX01PREVNX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNSUNfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQorCisvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0RNQV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fQUJFX0RNSUNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfRE1USU1FUjEwX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjEwX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIxMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MNFBFUl9ETVRJTUVSMTFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfRE1USU1FUjJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMl9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMl9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MNFBFUl9ETVRJTUVSM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIzX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIzX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfRE1USU1FUjRfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSNF9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSNF9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI0X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9ETVRJTUVSOV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVI5X0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVI5X0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfRE1USU1FUjlfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSOV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSOV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoNSwgNSkKKworLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9NUFVfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9NUFVfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKKworLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9TRE1BX01BU0sJCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfTVBVX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfU0RNQV9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX1NETUFfTUFTSwkJCQkJQklURklFTEQoMTEsIDExKQorCisvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCisKKy8qIFVzZWQgYnkgUE1fV0tVUF9HUElPMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfRFVDQVRJX1NISUZUCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMV9JUlExX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fV0tVUF9HUElPMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzFfSVJRMV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfR1BJTzFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMV9JUlEyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzFfSVJRMl9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfR1BJTzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlExX0RVQ0FUSV9TSElGVAkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0dQSU8yX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlExX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfR1BJTzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlEyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMl9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfR1BJTzNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPM19JUlExX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9HUElPM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPM19JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzRfSVJRMV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0dQSU80X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzRfSVJRMl9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0dQSU81X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzVfSVJRMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNV9JUlExX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfR1BJTzVfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNV9JUlEyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzVfSVJRMl9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfR1BJTzZfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNl9JUlExX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNl9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSURNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDE5LCAxOSkKKworLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxMywgMTMpCisKKy8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlJUlFfTVBVX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlJUlFfTVBVX01BU0sJCQkJQklURklFTEQoMTIsIDEyKQorCisvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX1RFU0xBX1NISUZUCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlJUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgxNCwgMTQpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfSEVDQzFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRUNDMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRUNDMV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9IRUNDMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9IU0lfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IU0lfRFNQX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX0RTUF9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX0hTSV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hTSV9NQ1VfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9IU0lfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IU0lfTUNVX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hTSV9NQ1VfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9JMkMxX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzFfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0lSUV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0lSUV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0lSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMyX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzNfRE1BX1NETUFfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMzX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQTV9MNFBFUl9JMkMzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MNFBFUl9JMkMzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9JMkM0X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzRfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzRfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0lSUV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0lSUV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzRfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0lSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzVfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM1X0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDNV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzVfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzVfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fV0tVUF9LRVlCT0FSRF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0tFWUJPQVJEX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0tFWUJPQVJEX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQVNQX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQTV9BQkVfTUNBU1BfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfRE1BX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQVNQX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0lSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQVNQX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0lSUV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9JUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0RNQV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfSVJRX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1NETUFfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19ETUFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfSVJRX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0lSUV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9BQkVfTUNCU1AxX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDJfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9BQkVfTUNCU1AyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDJfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQlNQM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDNfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9BQkVfTUNCU1AzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDNfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fQUJFX01DQlNQM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTUNCU1A0X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1A0X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQlNQNF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1A0X1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQlNQNF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkxX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTJfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTJfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTJfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJM19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJM19TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJNF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJNF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTRfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJNF9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMxX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMV9NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfU0RNQV9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMxX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9TRE1BX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzZfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUM2X0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzZfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUM2X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DNl9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0QzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NEM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDNfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDNfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDRfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDRfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0Q0X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NENF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NENV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDVfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDVfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDVfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0Q1X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDVfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1BDSUVTU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QQ0lFU1NfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MM0lOSVRfUENJRVNTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUENJRVNTX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUENJRVNTX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQTV9BQkVfUERNX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQTV9BQkVfUERNX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IFBNX0FCRV9QRE1fV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9BQkVfUERNX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0lSUV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9JUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfUlRDX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUlRDX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9SVENfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1NBVEFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TQVRBX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TQVRBX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9TQVRBX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0FUQV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9TTElNQlVTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfRE1BX1NETUFfU0hJRlQJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKKworLyogVXNlZCBieSBQTV9BQkVfU0xJTUJVU19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0RNQV9URVNMQV9TSElGVAkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfRE1BX1RFU0xBX01BU0sJCQlCSVRGSUVMRCg2LCA2KQorCisvKiBVc2VkIGJ5IFBNX0FCRV9TTElNQlVTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9TTElNQlVTX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfSVJRX1RFU0xBX1NISUZUCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfVEVTTEFfTUFTSwkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfU0xJTUJVUzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9ETUFfU0RNQV9TSElGVAkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1RFU0xBX1NISUZUCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9ETUFfVEVTTEFfTUFTSwkJCUJJVEZJRUxEKDYsIDYpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfU0xJTUJVUzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfU0xJTUJVUzJfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9JUlFfVEVTTEFfU0hJRlQJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMyX0lSUV9URVNMQV9NQVNLCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQTV9BTFdPTl9TUl9DT1JFX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfQ09SRV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9DT1JFX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fQUxXT05fU1JfQ09SRV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfQ09SRV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0FMV09OX1NSX0lWQV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0lWQV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9JVkFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9BTFdPTl9TUl9JVkFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9JVkFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fQUxXT05fU1JfTVBVX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfTVBVX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX01QVV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfVElNRVIxMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSMTJfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVIxMl9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfVElNRVIxX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVIxX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSMV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjVfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI1X01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSNV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSNl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNl9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjZfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9BQkVfVElNRVI2X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKKworLyogVXNlZCBieSBQTV9BQkVfVElNRVI3X1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI3X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjdfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjdfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjdfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQorCisvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjhfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI4X01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSOF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSOF9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSOF9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDFfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQyX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUM19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCisKKy8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDRfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUNF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQ0X1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKKworLyogVXNlZCBieSBQTV9MM0lOSVRfVU5JUFJPMV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVU5JUFJPMV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9VTklQUk8xX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVU5JUFJPMV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VTklQUk8xX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9IT1NUX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX0hPU1RfRlNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9GU19EVUNBVElfU0hJRlQJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0ZTX0RVQ0FUSV9NQVNLCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX0hPU1RfRlNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9GU19NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9GU19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9VU0JfSE9TVF9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9PVEdfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9PVEdfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX09UR19XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9PVEdfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX09UR19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9VU0JfVExMX1dLREVQICovCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX1RMTF9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9UTExfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9UTExfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKKworLyogVXNlZCBieSBQTV9XS1VQX1VTSU1fV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0lNX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0lNX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfVVNJTV9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTSU1fU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTSU1fU0RNQV9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfV0RUMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQorCisvKiBVc2VkIGJ5IFBNX1dLVVBfV0RUMl9XS0RFUCAqLworI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCisKKy8qIFVzZWQgYnkgUE1fQUJFX1dEVDNfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9XRFQzX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9XRFQzX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQorCisvKiBVc2VkIGJ5IFBNX0wzSU5JVF9IU0lfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9XR01fSFNJX1dBS0VfTVBVX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0dNX0hTSV9XQUtFX01QVV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCisKKy8qIFVzZWQgYnkgUE1fTDNJTklUX1hIUElfV0tERVAgKi8KKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9YSFBJX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1hIUElfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKKworLyogVXNlZCBieSBQUk1fSU9fUE1DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1dVQ0xLX0NUUkxfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1dVQ0xLX0NUUkxfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKKworLyogVXNlZCBieSBQUk1fSU9fUE1DVFJMICovCisjZGVmaW5lIE9NQVA0NDMwX1dVQ0xLX1NUQVRVU19TSElGVAkJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfV1VDTEtfU1RBVFVTX01BU0sJCQkJCUJJVEZJRUxEKDksIDkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCmluZGV4IGExMTdmODUuLmVhMDUwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaApAQCAtNCw4ICs0LDggQEAKIC8qCiAgKiBPTUFQMi8zIFBvd2VyL1Jlc2V0IE1hbmFnZW1lbnQgKFBSTSkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICoKQEAgLTIyLDYgKzIyLDEwIEBACiAJCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MzBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQogI2RlZmluZSBPTUFQMzRYWF9QUk1fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAogCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDMwX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNkZWZpbmUgT01BUDQ0WFhfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9QUk1fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisKKyNpbmNsdWRlICJwcm00NHh4LmgiCiAKIC8qCiAgKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgZ2xvYmFsIFBSTSByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliZTk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5oCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogT01BUDQ0eHggUFJNIGluc3RhbmNlIG9mZnNldCBtYWNyb3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQorICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTTQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNNDRYWF9ICisKKworLyogUFJNICovCisKKworLyogUFJNLk9DUF9TT0NLRVRfUFJNIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUkVWSVNJT05fUFJNCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRU1RBVFVTX01QVQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRU1RBVFVTX01QVV8yCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFFTkFCTEVfTVBVCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMTgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFFTkFCTEVfTVBVXzIJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9NT0QsIDB4MDAxYykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0lSUVNUQVRVU19EVUNBVEkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0lSUUVOQUJMRV9EVUNBVEkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0lSUVNUQVRVU19URVNMQQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX1RFU0xBCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QUk1fUFJPRklMSU5HX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDQwKQorCisvKiBQUk0uQ0tHRU5fUFJNIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ01fQUJFX0RTU19TWVNfQ0xLU0VMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9EUExMX1NZU19SRUZfQ0xLU0VMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9DTV9MNF9XS1VQX0NMS1NFTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DS0dFTl9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQUJFX1BMTF9SRUZfQ0xLU0VMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX01PRCwgMHgwMDBjKQorI2RlZmluZSBPTUFQNDQzMF9DTV9TWVNfQ0xLU0VMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DS0dFTl9NT0QsIDB4MDAxMCkKKworLyogUFJNLk1QVV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9NUFVfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX01QVV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTVBVX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX01QVV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTVBVX1JTVFNUCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9NUFVfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01QVV9NUFVfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9NUFVfTU9ELCAweDAwMjQpCisKKy8qIFBSTS5URVNMQV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9URVNMQV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fVEVTTEFfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX1BNX1RFU0xBX1BXUlNUU1QJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fVEVTTEFfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1RFU0xBX1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fVEVTTEFfTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX1JNX1RFU0xBX1JTVFNUCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsIDB4MDAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fVEVTTEFfVEVTTEFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsIDB4MDAyNCkKKworLyogUFJNLkFCRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX0FFU1NfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwMmMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9QRE1fV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfUERNX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDM0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfRE1JQ19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9ETUlDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDNjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfTUNBU1BfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfTUNBU1BfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9NQ0JTUDFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfTUNCU1AxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDRjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfTUNCU1AyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX01DQlNQMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX01DQlNQM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNTgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9NQ0JTUDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNWMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9TTElNQlVTX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA2MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1NMSU1CVVNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9USU1FUjVfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfVElNRVI1X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDZjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfVElNRVI2X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1RJTUVSNl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA3NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX1RJTUVSN19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNzgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9USU1FUjdfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwN2MpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9USU1FUjhfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfVElNRVI4X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDg0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfV0RUM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwODgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9XRFQzX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDhjKQorCisvKiBQUk0uQUxXQVlTX09OX1BSTSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FMV09OX01ETUlOVENfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9NT0QsIDB4MDAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUxXT05fU1JfTVBVX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUxXT05fU1JfTVBVX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ELCAweDAwMmMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FMV09OX1NSX0lWQV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FMV09OX1NSX0lWQV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRCwgMHgwMDM0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9BTFdPTl9TUl9DT1JFX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUxXT05fU1JfQ09SRV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRCwgMHgwMDNjKQorCisvKiBQUk0uQ09SRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9DT1JFX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9DT1JFX1BXUlNUU1QJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNfMV9MM18xX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNfMl9MM18yX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDEyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNfMl9HUE1DX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDEyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNfMl9PQ01DX1JBTV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDEzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fRFVDQVRJX1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDIxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fRFVDQVRJX1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAyMTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0RVQ0FUSV9EVUNBVElfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAyMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1NETUFfU0RNQV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAzMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0RNTV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA0MjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0VNSUZfRldfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA0MmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0VNSUZfMV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDQzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTUVNSUZfRU1JRl8yX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDNjKQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9ETExfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDQ0KQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGX0gxX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDU0KQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGX0gyX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDVjKQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9ETExfSF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA0NjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0QyRF9TQUQyRF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA1MjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0QyRF9NT0RFTV9JQ1JfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA1MmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0QyRF9TQUQyRF9GV19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDUzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRDRkdfTDRfQ0ZHX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNjI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNENGR19IV19TRU1fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA2MmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0Q0ZHX01BSUxCT1hfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA2MzQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0Q0ZHX1NBUl9ST01fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA2M2MpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5TVFJfTDNfM19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDcyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTlNUUl9MM19JTlNUUl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDcyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTlNUUl9PQ1BfV1AxX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNzQ0KQorCisvKiBQUk0uSVZBSERfUFJNIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUE1fSVZBSERfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0lWQUhEX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9JVkFIRF9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0lWQUhEX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9STV9JVkFIRF9SU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0lWQUhEX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQNDQzMF9STV9JVkFIRF9SU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0lWQUhEX0lWQUhEX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0lWQUhEX1NMMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0lWQUhEX01PRCwgMHgwMDJjKQorCisvKiBQUk0uQ0FNX1BSTSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1BNX0NBTV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9DQU1fUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9STV9DQU1fSVNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9DQU1fRkRJRl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NBTV9NT0QsIDB4MDAyYykKKworLyogUFJNLkRTU19QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9EU1NfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RTU19NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fRFNTX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RTU19NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fRFNTX0RTU19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9EU1NfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0RTU19EU1NfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9EU1NfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0RTU19ERUlTU19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RTU19NT0QsIDB4MDAyYykKKworLyogUFJNLkdGWF9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9HRlhfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0dGWF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fR0ZYX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0dGWF9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fR0ZYX0dGWF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0dGWF9NT0QsIDB4MDAyNCkKKworLyogUFJNLkwzSU5JVF9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX1BXUlNUU1QJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfTU1DMV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwMjgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9NTUMxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfTU1DMl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9NTUMyX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDM0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfSFNJX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX0hTSV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAzYykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX1VOSVBSTzFfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwNDApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9VTklQUk8xX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwNDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfSE9TVF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9IT1NUX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwNWMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfT1RHX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfVVNCX09UR19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDY0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfVVNCX1RMTF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA2OCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9UTExfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA2YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1AxNTAwX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwN2MpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9FTUFDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDg0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfU0FUQV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwODgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9TQVRBX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfVFBQU1NfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA5NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX1BDSUVTU19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwOTgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9QQ0lFU1NfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA5YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX0NDUFRYX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwYWMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9YSFBJX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1hIUElfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwYzQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9NTUM2X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBjOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX01NQzZfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwY2MpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfSE9TVF9GU19XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9IT1NUX0ZTX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwZDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NPTlRFWFQJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBlNCkKKworLyogUFJNLkw0UEVSX1BSTSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfUFdSU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfQURDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVIxMF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9ETVRJTUVSMTBfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9ETVRJTUVSMTFfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjExX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfRE1USU1FUjJfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDNjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9ETVRJTUVSM19XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9ETVRJTUVSM19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVI0X1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNDgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0RNVElNRVI0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA0YykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfRE1USU1FUjlfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjlfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDU0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9FTE1fQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA1YykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0dQSU8yX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU8zX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPM19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDZjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9HUElPNF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfR1BJTzRfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA3NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzVfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNzgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0dQSU81X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwN2MpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU82X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDg0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRFExV19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9IRUNDMV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA5MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSEVDQzFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA5NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfSEVDQzJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwOTgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0hFQ0MyX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwOWMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0kyQzFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwYTApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0kyQzFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBhNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfSTJDMl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBhOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGFjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGIwKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9JMkMzX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwYjQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0kyQzRfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwYjgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0kyQzRfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBiYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTDRfUEVSX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNBU1AyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGQwKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ0FTUDJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGQ0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ0FTUDNfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZDgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DQVNQM19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZGMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DQlNQNF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBlMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBlNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUdBVEVfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBlYykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNTUEkxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGYwKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ1NQSTFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGY0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ1NQSTJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZjgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DU1BJMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZmMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DU1BJM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUNTUEkzX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNTUEk0X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTA4KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ1NQSTRfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTBjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NTUNTRDNfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxMjApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01NQ1NEM19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxMjQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01NQ1NENF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTU1DU0Q0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTVNQUk9IR19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxMzQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1NMSU1CVVMyX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxMzgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX1NMSU1CVVMyX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEzYykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfVUFSVDFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNDApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX1VBUlQxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1VBUlQyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTQ4KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9VQVJUMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTRjKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9VQVJUM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE1MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfVUFSVDRfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNTgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX1VBUlQ0X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNWMpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01NQ1NENV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE2MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTU1DU0Q1X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE2NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfSTJDNV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE2OCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDNV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTZjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19BRVMxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxYTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0U0VDX0FFUzJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDFhYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfREVTM0RFU19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxYjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0U0VDX1BLQUVJUDI5X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDFiYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfUk5HX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxYzQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0U0VDX1NIQTJNRDUxX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDFjYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfQ1JZUFRPRE1BX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDFkYykKKworLyogUFJNLkNFRlVTRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9DRUZVU0VfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NFRlVTRV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQ0VGVVNFX1BXUlNUU1QJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0VGVVNFX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9STV9DRUZVU0VfQ0VGVVNFX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DRUZVU0VfTU9ELCAweDAwMjQpCisKKy8qIFBSTS5XS1VQX1BSTSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfTDRXS1VQX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9XRFQxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9XRFQyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfV0RUMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwMzQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX1dLVVBfR1BJTzFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9HUElPMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwM2MpCisjZGVmaW5lIE9NQVA0NDMwX1BNX1dLVVBfVElNRVIxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNDApCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfVElNRVIxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA0NCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9USU1FUjEyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNDgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfVElNRVIxMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA0YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9TWU5DVElNRVJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNTQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX1dLVVBfVVNJTV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDU4KQorI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1VTSU1fQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDVjKQorI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1NBUlJBTV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX1dLVVBfS0VZQk9BUkRfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA3OCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9LRVlCT0FSRF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA3YykKKyNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9SVENfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA4MCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9SVENfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDg0KQorCisvKiBQUk0uV0tVUF9DTSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfTDRXS1VQX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9XRFQxX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9XRFQyX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9HUElPMV9DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfVElNRVIxX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9USU1FUjEyX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX01PRCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1NZTkNUSU1FUl9DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9VU0lNX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9TQVJSQU1fQ0xLQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX0tFWUJPQVJEX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1JUQ19DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwODApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfQkFOREdBUF9DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA4OCkKKworLyogUFJNLkVNVV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QTV9FTVVfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fRU1VX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fRU1VX0RFQlVHU1NfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9FTVVfTU9ELCAweDAwMjQpCisKKy8qIFBSTS5FTVVfQ00gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9DTV9FTVVfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9DTV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRU1VX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRU1VX0NNX01PRCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9FTVVfREVCVUdTU19DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9DTV9NT0QsIDB4MDAyMCkKKworLyogUFJNLkRFVklDRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNDQzMF9QUk1fUlNUQ1RSTAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1JTVFRJTUUJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0NMS1JFUUNUUkwJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRDVFJMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QV1JSRVFDVFJMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QU0NPTl9DT1VOVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMTgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JT19DT1VOVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDFjKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSU9fUE1DVFJMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUU0VUVVBfV0FSTVJFU0VUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX0NPUkVfT0ZGCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9NUFVfT0ZGCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9JVkFfT0ZGCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9DT1JFX1JFVF9TTEVFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9NUFVfUkVUX1NMRUVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX0lWQV9SRVRfU0xFRVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwM2MpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX0NPTkZJRwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNDApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX1NUQVRVUwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNDQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX1ZMSU1JVFRPCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA0OCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNGMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX1ZTVEVQTUFYCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfVlNURVBNSU4JCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDU0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfTVBVX0NPTkZJRwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNTgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfU1RBVFVTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA1YykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX01QVV9WTElNSVRUTwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfVlNURVBNQVgJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfTVBVX1ZTVEVQTUlOCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA2YykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0lWQV9DT05GSUcJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDcwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfSVZBX1NUQVRVUwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNzQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfVkxJTUlUVE8JCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfSVZBX1ZPTFRBR0UJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDdjKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfSVZBX1ZTVEVQTUFYCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA4MCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0lWQV9WU1RFUE1JTgkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwODQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19TTVBTX1NBCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwODgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfU01QU19SQV9WT0wJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfVkFMX1NNUFNfUkFfQ01ECQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA5MCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA5NCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDk4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfVkFMX0NNRF9WRERfSVZBX0wJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwOWMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfQllQQVNTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBhMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX0NGR19DSEFOTkVMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBhNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX0NGR19JMkNfTU9ERQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYTgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19DRkdfSTJDX0NMSwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYWMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9TUkFNX0NPVU5UCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYjApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9TUkFNX1dLVVBfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGI0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX1NSQU1fQ09SRV9TRVRVUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBiOCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX0NPUkVfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYmMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fU1JBTV9NUFVfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGMwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX1NSQU1fTVBVX0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGM0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX1NSQU1fSVZBX1NFVFVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBjOCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX0lWQV9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBjYykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19BQkJfTVBVX1NFVFVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19BQkJfTVBVX0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGQ0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX0FCQl9JVkFfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGQ4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX0FCQl9JVkFfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwZGMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fQkFOREdBUF9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBlMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0RFVklDRV9PRkZfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwZTQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QSEFTRTFfQ05EUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwZTgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QSEFTRTJBX0NORFAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGVjKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fUEhBU0UyQl9DTkRQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBmMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX01PREVNX0lGX0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGY0KQorCisvKiBDSElST05fUFJDTSAqLworCisKKy8qIENISVJPTl9QUkNNLkNISVJPTlNTX09DUF9TT0NLRVRfUFJDTSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1JFVklTSU9OX1BSQ00JCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfT0NQX1NPQ0tFVF9QUkNNX01PRCwgMHgwMDAwKQorCisvKiBDSElST05fUFJDTS5DSElST05TU19ERVZJQ0VfUFJNIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ0hJUk9OX1BSQ01fUFJNX1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfREVWSUNFX1BSTV9NT0QsIDB4MDAwMCkKKworLyogQ0hJUk9OX1BSQ00uQ0hJUk9OU1NfQ1BVMCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1BNX1BEQV9DUFUwX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX1BNX1BEQV9DUFUwX1BXUlNUU1QJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9DSElST05TU19DSElST05TU19DUFUwX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9STV9QREFfQ1BVMF9DUFUwX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1BEQV9DUFUwX0NQVTBfUlNUQ1RSTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMF9NT0QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fUERBX0NQVTBfQ1BVMF9SU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1BEQV9DUFUwX0NQVTBfQ0xLQ1RSTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMF9NT0QsIDB4MDAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fUERBX0NQVTBfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMF9NT0QsIDB4MDAxOCkKKworLyogQ0hJUk9OX1BSQ00uQ0hJUk9OU1NfQ1BVMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0NDMwX1BNX1BEQV9DUFUxX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTFfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX1BNX1BEQV9DUFUxX1BXUlNUU1QJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9DSElST05TU19DSElST05TU19DUFUxX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9STV9QREFfQ1BVMV9DUFUxX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTFfTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1BEQV9DUFUxX0NQVTFfUlNUQ1RSTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMV9NT0QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fUERBX0NQVTFfQ1BVMV9SU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTFfTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1BEQV9DUFUxX0NQVTFfQ0xLQ1RSTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMV9NT0QsIDB4MDAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fUERBX0NQVTFfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMV9NT0QsIDB4MDAxOCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuaAppbmRleCA0ODIwN2IwLi42OGY1N2JiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuaApAQCAtMTgsNiArMTgsOSBAQAogI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKIGV4dGVybiB2b2lkIF9faW9tZW0gKm9tYXAyX3NkcmNfYmFzZTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKm9tYXAyX3Ntc19iYXNlOwogCkBAIC01Niw0ICs1OSwyMCBAQAogCQkJT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMzQzWF9TRFJDX0JBU0UgKyAocmVnKSkKICNlbmRpZgkvKiBfX0FTU0VNQkxFUl9fICovCiAKKy8qIE1pbmltdW0gZnJlcXVlbmN5IHRoYXQgdGhlIFNEUkMgRExMIGNhbiBsb2NrIGF0ICovCisjZGVmaW5lIE1JTl9TRFJDX0RMTF9MT0NLX0ZSRVEJCTgzMDAwMDAwCisKKy8qIFNjYWxlIGZhY3RvciBmb3IgZml4ZWQtcG9pbnQgYXJpdGggaW4gb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KKyNkZWZpbmUgU0RSQ19NUFVSQVRFX1NDQUxFCQk4CisKKy8qIDJeU0RSQ19NUFVSQVRFX0JBU0VfU0hJRlQ6IE1QVSBNSHogdGhhdCBTRFJDX01QVVJBVEVfTE9PUFMgaXMgZGVmaW5lZCBmb3IgKi8KKyNkZWZpbmUgU0RSQ19NUFVSQVRFX0JBU0VfU0hJRlQJCTkKKworLyoKKyAqIFNEUkNfTVBVUkFURV9MT09QUzogTnVtYmVyIG9mIE1QVSBsb29wcyB0byBleGVjdXRlIGF0CisgKiAyXk1QVVJBVEVfQkFTRV9TSElGVCBNSHogZm9yIFNEUkMgdG8gc3RhYmlsaXplCisgKi8KKyNkZWZpbmUgU0RSQ19NUFVSQVRFX0xPT1BTCQk5NgorCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggMmUxN2I1Ny4uMTk4MDVhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAicG0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAKKyNkZWZpbmUgVUFSVF9PTUFQX05PX0VNUFRZX0ZJRk9fUkVBRF9JUF9SRVYJMHg1MgogI2RlZmluZSBVQVJUX09NQVBfV0VSCQkweDE3CS8qIFdha2UtdXAgZW5hYmxlIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgREVGQVVMVF9USU1FT1VUICg1ICogSFopCkBAIC01NzIsNiArNTczLDIzIEBACiAjZW5kaWYKIH07CiAKKy8qCisgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCA4MjUwIHJlYWQgaGFuZGxlcjogbWVtX3NlcmlhbF9pbigpCisgKiBFbXB0eSBSWCBmaWZvIHJlYWQgY2F1c2VzIGFuIGFib3J0IG9uIG9tYXAzNjMwIGFuZCBvbWFwNAorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYW4gZW1wdHkgcnggZmlmbyBpcyBub3QgcmVhZCBvbiB0aGVzZSBzaWxpY29ucworICogKE9NQVAxLzIvMzQzMCBhcmUgbm90IGFmZmVjdGVkKQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF9pbl9vdmVycmlkZShzdHJ1Y3QgdWFydF9wb3J0ICp1cCwgaW50IG9mZnNldCkKK3sKKwlpZiAoVUFSVF9SWCA9PSBvZmZzZXQpIHsKKwkJdW5zaWduZWQgaW50IGxzcjsKKwkJbHNyID0gc2VyaWFsX3JlYWRfcmVnKG9tYXBfdWFydFt1cC0+bGluZV0ucCwgVUFSVF9MU1IpOworCQlpZiAoIShsc3IgJiBVQVJUX0xTUl9EUikpCisJCQlyZXR1cm4gLUVQRVJNOworCX0KKwlyZXR1cm4gc2VyaWFsX3JlYWRfcmVnKG9tYXBfdWFydFt1cC0+bGluZV0ucCwgb2Zmc2V0KTsKK30KKwogdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfZWFybHlfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtNjIyLDMzICs2NDAsNzQgQEAKIAkJdWFydC0+bnVtID0gaTsKIAkJcC0+cHJpdmF0ZV9kYXRhID0gdWFydDsKIAkJdWFydC0+cCA9IHA7Ci0JCWxpc3RfYWRkX3RhaWwoJnVhcnQtPm5vZGUsICZ1YXJ0X2xpc3QpOwogCiAJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKIAkJCXAtPmlycSArPSAzMjsKLQotCQlvbWFwX3VhcnRfZW5hYmxlX2Nsb2Nrcyh1YXJ0KTsKIAl9CiB9CiAKKy8qKgorICogb21hcF9zZXJpYWxfaW5pdF9wb3J0KCkgLSBpbml0aWFsaXplIHNpbmdsZSBzZXJpYWwgcG9ydAorICogQHBvcnQ6IHNlcmlhbCBwb3J0IG51bWJlciAoMC0zKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGllcyBzZXJpYWwgZHJpdmVyIGZvciBnaXZlbiBAcG9ydCBvbmx5LgorICogUGxhdGZvcm1zIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBvbWFwX3NlcmlhbF9pbml0KCkKKyAqIGlmIHRoZXkgZG9uJ3QgcGxhbiB0byB1c2UgYWxsIGF2YWlsYWJsZSBVQVJUcyBhcyBzZXJpYWwgcG9ydHMuCisgKgorICogRG9uJ3QgbWl4IGNhbGxzIHRvIG9tYXBfc2VyaWFsX2luaXRfcG9ydCgpIGFuZCBvbWFwX3NlcmlhbF9pbml0KCksCisgKiB1c2Ugb25seSBvbmUgb2YgdGhlIHR3by4KKyAqLwordm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdF9wb3J0KGludCBwb3J0KQoreworCXN0cnVjdCBvbWFwX3VhcnRfc3RhdGUgKnVhcnQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlCVUdfT04ocG9ydCA8IDApOworCUJVR19PTihwb3J0ID49IEFSUkFZX1NJWkUob21hcF91YXJ0KSk7CisKKwl1YXJ0ID0gJm9tYXBfdWFydFtwb3J0XTsKKwlwZGV2ID0gJnVhcnQtPnBkZXY7CisJZGV2ID0gJnBkZXYtPmRldjsKKworCW9tYXBfdWFydF9lbmFibGVfY2xvY2tzKHVhcnQpOworCisJb21hcF91YXJ0X3Jlc2V0KHVhcnQpOworCW9tYXBfdWFydF9pZGxlX2luaXQodWFydCk7CisKKwlsaXN0X2FkZF90YWlsKCZ1YXJ0LT5ub2RlLCAmdWFydF9saXN0KTsKKworCWlmIChXQVJOX09OKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KSkpCisJCXJldHVybjsKKworCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdWFydC0+cGFkY29uZikgfHwKKwkgICAgKHVhcnQtPndrX2VuICYmIHVhcnQtPndrX21hc2spKSB7CisJCWRldmljZV9pbml0X3dha2V1cChkZXYsIHRydWUpOworCQlERVZfQ1JFQVRFX0ZJTEUoZGV2LCAmZGV2X2F0dHJfc2xlZXBfdGltZW91dCk7CisJfQorCisJCS8qIG9tYXA0NHh4OiBOZXZlciByZWFkIGVtcHR5IFVBUlQgZmlmbworCQkgKiBvbWFwM3h4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8gb24gVUFSVHMKKwkJICogd2l0aCBJUCByZXYgPj0weDUyCisJCSAqLworCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCQl1YXJ0LT5wLT5zZXJpYWxfaW4gPSBzZXJpYWxfaW5fb3ZlcnJpZGU7CisJCWVsc2UgaWYgKChzZXJpYWxfcmVhZF9yZWcodWFydC0+cCwgVUFSVF9PTUFQX01WRVIpICYgMHhGRikKKwkJCQk+PSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVikKKwkJCXVhcnQtPnAtPnNlcmlhbF9pbiA9IHNlcmlhbF9pbl9vdmVycmlkZTsKK30KKworLyoqCisgKiBvbWFwX3NlcmlhbF9pbml0KCkgLSBpbnRpYWxpemUgYWxsIHN1cHBvcnRlZCBzZXJpYWwgcG9ydHMKKyAqCisgKiBJbml0aWFsaXplcyBhbGwgYXZhaWxhYmxlIFVBUlRzIGFzIHNlcmlhbCBwb3J0cy4gUGxhdGZvcm1zCisgKiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhleSB3YW50IHRvIGhhdmUgZGVmYXVsdCBiZWhhdmlvdXIKKyAqIGZvciBzZXJpYWwgcG9ydHMgKGUuZyBpbml0aWFsaXplIHRoZW0gYWxsIGFzIHNlcmlhbCBwb3J0cykuCisgKi8KIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXBfdWFydCk7IGkrKykgewotCQlzdHJ1Y3Qgb21hcF91YXJ0X3N0YXRlICp1YXJ0ID0gJm9tYXBfdWFydFtpXTsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9ICZ1YXJ0LT5wZGV2OwotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCi0JCW9tYXBfdWFydF9yZXNldCh1YXJ0KTsKLQkJb21hcF91YXJ0X2lkbGVfaW5pdCh1YXJ0KTsKLQotCQlpZiAoV0FSTl9PTihwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldikpKQotCQkJY29udGludWU7Ci0JCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdWFydC0+cGFkY29uZikgfHwKLQkJICAgICh1YXJ0LT53a19lbiAmJiB1YXJ0LT53a19tYXNrKSkgewotCQkJZGV2aWNlX2luaXRfd2FrZXVwKGRldiwgdHJ1ZSk7Ci0JCQlERVZfQ1JFQVRFX0ZJTEUoZGV2LCAmZGV2X2F0dHJfc2xlZXBfdGltZW91dCk7Ci0JCX0KLQl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF91YXJ0KTsgaSsrKQorCQlvbWFwX3NlcmlhbF9pbml0X3BvcnQoaSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKaW5kZXggODJhYTRhMy4uZGU5OWJhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUwpAQCAtOTEsOCArOTEsMTkgQEAKICAqICBuZXcgU0RSQ19BQ1RJTV9DVFJMX0JfMSByZWdpc3RlciBjb250ZW50cwogICogIG5ldyBTRFJDX01SXzEgcmVnaXN0ZXIgdmFsdWUKICAqCi0gKiBJZiB0aGUgcGFyYW0gU0RSQ19SRlJfQ1RSTF8xIGlzIDAsIHRoZSBwYXJhbWV0ZXJzCi0gKiAgYXJlIG5vdCBwcm9ncmFtbWVkIGludG8gdGhlIFNEUkMgQ1MxIHJlZ2lzdGVycworICogSWYgdGhlIHBhcmFtIFNEUkNfUkZSX0NUUkxfMSBpcyAwLCB0aGUgcGFyYW1ldGVycyBhcmUgbm90IHByb2dyYW1tZWQgaW50bworICogdGhlIFNEUkMgQ1MxIHJlZ2lzdGVycworICoKKyAqIE5PVEU6IFRoaXMgY29kZSBubyBsb25nZXIgYXR0ZW1wdHMgdG8gcHJvZ3JhbSB0aGUgU0RSQyBBQyB0aW1pbmcgYW5kIE1SCisgKiByZWdpc3RlcnMuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvZGUgY3VycmVudGx5IGNhbm5vdCBlbnN1cmUgdGhhdCBhbGwKKyAqIEwzIGluaXRpYXRvcnMgKGUuZy4sIHNETUEsIElWQSwgRFNTIERJU1BDLCBldGMuKSBhcmUgbm90IGFjY2Vzc2luZyB0aGUKKyAqIFNEUkFNIHdoZW4gdGhlIHJlZ2lzdGVycyBhcmUgd3JpdHRlbi4gIElmIHRoZSByZWdpc3RlcnMgYXJlIGNoYW5nZWQgd2hpbGUKKyAqIGFuIGluaXRpYXRvciBpcyBhY2Nlc3NpbmcgU0RSQU0sIG1lbW9yeSBjYW4gYmUgY29ycnVwdGVkIGFuZC9vciB0aGUgU0RSQworICogbWF5IGVudGVyIGFuIHVucHJlZGljdGFibGUgc3RhdGUuICBJbiB0aGUgZnV0dXJlLCB0aGUgaW50ZW50IGlzIHRvCisgKiByZS1lbmFibGUgdGhpcyBjb2RlIGluIGNhc2VzIHdoZXJlIHdlIGNhbiBlbnN1cmUgdGhhdCBubyBpbml0aWF0b3JzIGFyZQorICogdG91Y2hpbmcgdGhlIFNEUkFNLiAgVW50aWwgdGhhdCB0aW1lLCB1c2VycyB3aG8ga25vdyB0aGF0IHRoZWlyIHVzZSBjYXNlCisgKiBjYW4gc2F0aXNmeSB0aGUgYWJvdmUgcmVxdWlyZW1lbnQgY2FuIGVuYWJsZSB0aGUgQ09ORklHX09NQVAzX1NEUkNfQUNfVElNSU5HCisgKiBvcHRpb24uCiAgKi8KIEVOVFJZKG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkKIAlzdG1mZAlzcCEsIHtyMS1yMTIsIGxyfQlAIHN0b3JlIHJlZ3MgdG8gc3RhY2sKQEAgLTIxOSw2ICsyMzAsNyBAQAogCWxkcglyMTIsIG9tYXBfc2RyY19yZnJfY3RybF8wX3ZhbAlAIGZldGNoIHZhbHVlIGZyb20gU1JBTQogCWxkcglyMTEsIG9tYXAzX3NkcmNfcmZyX2N0cmxfMAlAIGZldGNoIGFkZHIgZnJvbSBTUkFNCiAJc3RyCXIxMiwgW3IxMV0JCQlAIHN0b3JlCisjaWZkZWYgQ09ORklHX09NQVAzX1NEUkNfQUNfVElNSU5HCiAJbGRyCXIxMiwgb21hcF9zZHJjX2FjdGltX2N0cmxfYV8wX3ZhbAogCWxkcglyMTEsIG9tYXAzX3NkcmNfYWN0aW1fY3RybF9hXzAKIAlzdHIJcjEyLCBbcjExXQpAQCAtMjI4LDExICsyNDAsMTMgQEAKIAlsZHIJcjEyLCBvbWFwX3NkcmNfbXJfMF92YWwKIAlsZHIJcjExLCBvbWFwM19zZHJjX21yXzAKIAlzdHIJcjEyLCBbcjExXQorI2VuZGlmCiAJbGRyCXIxMiwgb21hcF9zZHJjX3Jmcl9jdHJsXzFfdmFsCiAJY21wCXIxMiwgIzAJCQlAIGlmIFNEUkNfUkZSX0NUUkxfMSBpcyAwLAogCWJlcQlza2lwX2NzMV9wcm9nCQlAICBkbyBub3QgcHJvZ3JhbSBjczEgcGFyYW1zCiAJbGRyCXIxMSwgb21hcDNfc2RyY19yZnJfY3RybF8xCiAJc3RyCXIxMiwgW3IxMV0KKyNpZmRlZiBDT05GSUdfT01BUDNfU0RSQ19BQ19USU1JTkcKIAlsZHIJcjEyLCBvbWFwX3NkcmNfYWN0aW1fY3RybF9hXzFfdmFsCiAJbGRyCXIxMSwgb21hcDNfc2RyY19hY3RpbV9jdHJsX2FfMQogCXN0cglyMTIsIFtyMTFdCkBAIC0yNDIsNiArMjU2LDcgQEAKIAlsZHIJcjEyLCBvbWFwX3NkcmNfbXJfMV92YWwKIAlsZHIJcjExLCBvbWFwM19zZHJjX21yXzEKIAlzdHIJcjEyLCBbcjExXQorI2VuZGlmCiBza2lwX2NzMV9wcm9nOgogCWxkcglyMTIsIFtyMTFdCQlAIHBvc3RlZC13cml0ZSBiYXJyaWVyIGZvciBTRFJDCiAJYngJbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLWVoY2kuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLWVoY2kuYwppbmRleCBlNDQ4YWJkLi5mMWRmODczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1laGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItZWhjaS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAorI2luY2x1ZGUgIm11eC5oIgorCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0VIQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRUhDSV9IQ0RfTU9EVUxFKQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVoY2lfcmVzb3VyY2VzW10gPSB7CkBAIC03MiwzMiArNzQsNDQgQEAKIHsKIAlzd2l0Y2ggKHBvcnRfbW9kZVswXSkgewogCWNhc2UgRUhDSV9IQ0RfT01BUF9NT0RFX1BIWToKLQkJb21hcF9jZmdfcmVnKFk5XzM0MzBfVVNCMUhTX1BIWV9TVFApOwotCQlvbWFwX2NmZ19yZWcoWThfMzQzMF9VU0IxSFNfUEhZX0NMSyk7Ci0JCW9tYXBfY2ZnX3JlZyhBQTE0XzM0MzBfVVNCMUhTX1BIWV9ESVIpOwotCQlvbWFwX2NmZ19yZWcoQUExMV8zNDMwX1VTQjFIU19QSFlfTlhUKTsKLQkJb21hcF9jZmdfcmVnKFcxM18zNDMwX1VTQjFIU19QSFlfREFUQTApOwotCQlvbWFwX2NmZ19yZWcoVzEyXzM0MzBfVVNCMUhTX1BIWV9EQVRBMSk7Ci0JCW9tYXBfY2ZnX3JlZyhXMTFfMzQzMF9VU0IxSFNfUEhZX0RBVEEyKTsKLQkJb21hcF9jZmdfcmVnKFkxMV8zNDMwX1VTQjFIU19QSFlfREFUQTMpOwotCQlvbWFwX2NmZ19yZWcoVzlfMzQzMF9VU0IxSFNfUEhZX0RBVEE0KTsKLQkJb21hcF9jZmdfcmVnKFkxMl8zNDMwX1VTQjFIU19QSFlfREFUQTUpOwotCQlvbWFwX2NmZ19yZWcoVzhfMzQzMF9VU0IxSFNfUEhZX0RBVEE2KTsKLQkJb21hcF9jZmdfcmVnKFkxM18zNDMwX1VTQjFIU19QSFlfREFUQTcpOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX3N0cCIsIE9NQVBfUElOX09VVFBVVCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfY2xrIiwgT01BUF9QSU5fT1VUUFVUKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMV9kaXIiLCBPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfbnh0IiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGEwIiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGExIiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGEyIiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGEzIiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGE0IiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGE1IiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGE2IiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX2RhdGE3IiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOwogCQlicmVhazsKIAljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9UTEw6Ci0JCW9tYXBfY2ZnX3JlZyhZOV8zNDMwX1VTQjFIU19UTExfU1RQKTsKLQkJb21hcF9jZmdfcmVnKFk4XzM0MzBfVVNCMUhTX1RMTF9DTEspOwotCQlvbWFwX2NmZ19yZWcoQUExNF8zNDMwX1VTQjFIU19UTExfRElSKTsKLQkJb21hcF9jZmdfcmVnKEFBMTFfMzQzMF9VU0IxSFNfVExMX05YVCk7Ci0JCW9tYXBfY2ZnX3JlZyhXMTNfMzQzMF9VU0IxSFNfVExMX0RBVEEwKTsKLQkJb21hcF9jZmdfcmVnKFcxMl8zNDMwX1VTQjFIU19UTExfREFUQTEpOwotCQlvbWFwX2NmZ19yZWcoVzExXzM0MzBfVVNCMUhTX1RMTF9EQVRBMik7Ci0JCW9tYXBfY2ZnX3JlZyhZMTFfMzQzMF9VU0IxSFNfVExMX0RBVEEzKTsKLQkJb21hcF9jZmdfcmVnKFc5XzM0MzBfVVNCMUhTX1RMTF9EQVRBNCk7Ci0JCW9tYXBfY2ZnX3JlZyhZMTJfMzQzMF9VU0IxSFNfVExMX0RBVEE1KTsKLQkJb21hcF9jZmdfcmVnKFc4XzM0MzBfVVNCMUhTX1RMTF9EQVRBNik7Ci0JCW9tYXBfY2ZnX3JlZyhZMTNfMzQzMF9VU0IxSFNfVExMX0RBVEE3KTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMV90bGxfc3RwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfdGxsX2NsayIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfdGxsX2RpciIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfdGxsX254dCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfdGxsX2RhdGEwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMV90bGxfZGF0YTEiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX3RsbF9kYXRhMiIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfdGxsX2RhdGEzIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMV90bGxfZGF0YTQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IxX3RsbF9kYXRhNSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjFfdGxsX2RhdGE2IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMV90bGxfZGF0YTciLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOwogCQlicmVhazsKIAljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOOgogCQkvKiBGQUxMVEhST1VHSCAqLwpAQCAtMTA3LDMyICsxMjEsNTIgQEAKIAogCXN3aXRjaCAocG9ydF9tb2RlWzFdKSB7CiAJY2FzZSBFSENJX0hDRF9PTUFQX01PREVfUEhZOgotCQlvbWFwX2NmZ19yZWcoQUExMF8zNDMwX1VTQjJIU19QSFlfU1RQKTsKLQkJb21hcF9jZmdfcmVnKEFBOF8zNDMwX1VTQjJIU19QSFlfQ0xLKTsKLQkJb21hcF9jZmdfcmVnKEFBOV8zNDMwX1VTQjJIU19QSFlfRElSKTsKLQkJb21hcF9jZmdfcmVnKEFCMTFfMzQzMF9VU0IySFNfUEhZX05YVCk7Ci0JCW9tYXBfY2ZnX3JlZyhBQjEwXzM0MzBfVVNCMkhTX1BIWV9EQVRBMCk7Ci0JCW9tYXBfY2ZnX3JlZyhBQjlfMzQzMF9VU0IySFNfUEhZX0RBVEExKTsKLQkJb21hcF9jZmdfcmVnKFczXzM0MzBfVVNCMkhTX1BIWV9EQVRBMik7Ci0JCW9tYXBfY2ZnX3JlZyhUNF8zNDMwX1VTQjJIU19QSFlfREFUQTMpOwotCQlvbWFwX2NmZ19yZWcoVDNfMzQzMF9VU0IySFNfUEhZX0RBVEE0KTsKLQkJb21hcF9jZmdfcmVnKFIzXzM0MzBfVVNCMkhTX1BIWV9EQVRBNSk7Ci0JCW9tYXBfY2ZnX3JlZyhSNF8zNDMwX1VTQjJIU19QSFlfREFUQTYpOwotCQlvbWFwX2NmZ19yZWcoVDJfMzQzMF9VU0IySFNfUEhZX0RBVEE3KTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl9zdHAiLCBPTUFQX1BJTl9PVVRQVVQpOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX2NsayIsIE9NQVBfUElOX09VVFBVVCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjJfZGlyIiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX254dCIsIE9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl9kYXRhMCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjJfZGF0YTEiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX2RhdGEyIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl9kYXRhMyIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjJfZGF0YTQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX2RhdGE1IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl9kYXRhNiIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjJfZGF0YTciLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOwogCQlicmVhazsKIAljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9UTEw6Ci0JCW9tYXBfY2ZnX3JlZyhBQTEwXzM0MzBfVVNCMkhTX1RMTF9TVFApOwotCQlvbWFwX2NmZ19yZWcoQUE4XzM0MzBfVVNCMkhTX1RMTF9DTEspOwotCQlvbWFwX2NmZ19yZWcoQUE5XzM0MzBfVVNCMkhTX1RMTF9ESVIpOwotCQlvbWFwX2NmZ19yZWcoQUIxMV8zNDMwX1VTQjJIU19UTExfTlhUKTsKLQkJb21hcF9jZmdfcmVnKEFCMTBfMzQzMF9VU0IySFNfVExMX0RBVEEwKTsKLQkJb21hcF9jZmdfcmVnKEFCOV8zNDMwX1VTQjJIU19UTExfREFUQTEpOwotCQlvbWFwX2NmZ19yZWcoVzNfMzQzMF9VU0IySFNfVExMX0RBVEEyKTsKLQkJb21hcF9jZmdfcmVnKFQ0XzM0MzBfVVNCMkhTX1RMTF9EQVRBMyk7Ci0JCW9tYXBfY2ZnX3JlZyhUM18zNDMwX1VTQjJIU19UTExfREFUQTQpOwotCQlvbWFwX2NmZ19yZWcoUjNfMzQzMF9VU0IySFNfVExMX0RBVEE1KTsKLQkJb21hcF9jZmdfcmVnKFI0XzM0MzBfVVNCMkhTX1RMTF9EQVRBNik7Ci0JCW9tYXBfY2ZnX3JlZyhUMl8zNDMwX1VTQjJIU19UTExfREFUQTcpOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX3RsbF9zdHAiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl90bGxfY2xrIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl90bGxfZGlyIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl90bGxfbnh0IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl90bGxfZGF0YTAiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX3RsbF9kYXRhMSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjJfdGxsX2RhdGEyIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl90bGxfZGF0YTMiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX3RsbF9kYXRhNCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjJfdGxsX2RhdGE1IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiMl90bGxfZGF0YTYiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IyX3RsbF9kYXRhNyIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CiAJCWJyZWFrOwogCWNhc2UgRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV046CiAJCS8qIEZBTExUSFJPVUdIICovCkBAIC0xNDUsMTggKzE3OSwzMCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJQb3J0MyBjYW4ndCBiZSB1c2VkIGluIFBIWSBtb2RlXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBFSENJX0hDRF9PTUFQX01PREVfVExMOgotCQlvbWFwX2NmZ19yZWcoQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFApOwotCQlvbWFwX2NmZ19yZWcoQUE2XzM0MzBfVVNCM0hTX1RMTF9DTEspOwotCQlvbWFwX2NmZ19yZWcoQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIpOwotCQlvbWFwX2NmZ19yZWcoWTNfMzQzMF9VU0IzSFNfVExMX05YVCk7Ci0JCW9tYXBfY2ZnX3JlZyhBQTVfMzQzMF9VU0IzSFNfVExMX0RBVEEwKTsKLQkJb21hcF9jZmdfcmVnKFk0XzM0MzBfVVNCM0hTX1RMTF9EQVRBMSk7Ci0JCW9tYXBfY2ZnX3JlZyhZNV8zNDMwX1VTQjNIU19UTExfREFUQTIpOwotCQlvbWFwX2NmZ19yZWcoVzVfMzQzMF9VU0IzSFNfVExMX0RBVEEzKTsKLQkJb21hcF9jZmdfcmVnKEFCMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE0KTsKLQkJb21hcF9jZmdfcmVnKEFCMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE1KTsKLQkJb21hcF9jZmdfcmVnKEFBMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE2KTsKLQkJb21hcF9jZmdfcmVnKEFBMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE3KTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiM190bGxfc3RwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjNfdGxsX2NsayIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjNfdGxsX2RpciIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjNfdGxsX254dCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjNfdGxsX2RhdGEwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiM190bGxfZGF0YTEiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IzX3RsbF9kYXRhMiIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjNfdGxsX2RhdGEzIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiM190bGxfZGF0YTQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiaHN1c2IzX3RsbF9kYXRhNSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJoc3VzYjNfdGxsX2RhdGE2IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImhzdXNiM190bGxfZGF0YTciLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOwogCQlicmVhazsKIAljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOOgogCQkvKiBGQUxMVEhST1VHSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggZDg5YzZhZC4uOGEwODM3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC02Myw2ICs2MywxNSBAQAogCXNlbGVjdCBIQVZFX1BXTQogCXNlbGVjdCBQWEFfSEFWRV9CT0FSRF9JUlFTCiAJc2VsZWN0IFBYQV9IQVZFX0lTQV9JUlFTCisJc2VsZWN0IEFSQ09NX1BDTUNJQQorCitjb25maWcgTUFDSF9BUkNPTV9aRVVTCisJYm9vbCAiQXJjb20vRXVyb3RlY2ggWkVVUyBTQkMiCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBJU0EKKwlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUworCXNlbGVjdCBQWEFfSEFWRV9JU0FfSVJRUworCXNlbGVjdCBBUkNPTV9QQ01DSUEKIAogY29uZmlnIE1BQ0hfQkFMTE9PTjMKIAlib29sICJCYWxsb29uIDMgYm9hcmQiCkBAIC0xMDEsNiArMTEwLDggQEAKIAlib29sICJDb21wdUxhYiBDTS1YMzAwIG1vZHVsZXMiCiAJc2VsZWN0IFBYQTN4eAogCXNlbGVjdCBDUFVfUFhBMzAwCisJc2VsZWN0IENQVV9QWEEzMTAKKwlzZWxlY3QgSEFWRV9QV00KIAogY29uZmlnIEFSQ0hfR1VNU1RJWAogCWJvb2wgIkd1bXN0aXggWFNjYWxlIDI1NSBib2FyZHMiCkBAIC0xNzksNiArMTkwLDExIEBACiAKIGVuZGNob2ljZQogCitjb25maWcgQVJDT01fUENNQ0lBCisJYm9vbAorCWhlbHAKKwkgIEdlbmVyaWMgb3B0aW9uIGZvciBBcmNvbSBWaXBlci9aZXVzIFBDTUNJQQorCiBjb25maWcgVFJJWkVQU19QQ01DSUEKIAlib29sCiAJaGVscApAQCAtMjI2LDcgKzI0Miw2IEBACiAJc2VsZWN0IFBYQTN4eAogCXNlbGVjdCBDUFVfUFhBMzAwCiAJc2VsZWN0IENQVV9QWEEzMTAKLQlzZWxlY3QgSEFWRV9QV00KIAogY29uZmlnIE1BQ0hfQ09MSUJSSTMyMAogCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWEEzMjAiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGI1ZDI5ZTYuLmY2NGFmZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zOCw2ICszOCw3IEBACiAjIDNyZCBQYXJ0eSBEZXYgUGxhdGZvcm1zCiBvYmotJChDT05GSUdfQVJDSF9QWEFfSURQKQkrPSBpZHAubwogb2JqLSQoQ09ORklHX0FSQ0hfVklQRVIpCSs9IHZpcGVyLm8KK29iai0kKENPTkZJR19NQUNIX0FSQ09NX1pFVVMpCSs9IHpldXMubwogb2JqLSQoQ09ORklHX01BQ0hfQkFMTE9PTjMpCSs9IGJhbGxvb24zLm8KIG9iai0kKENPTkZJR19NQUNIX0NTQjcyNikJKz0gY3NiNzI2Lm8KIG9iai0kKENPTkZJR19DU0I3MjZfQ1NCNzAxKQkrPSBjc2I3MDEubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IDMzOTU0NjMuLjhlMTBkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgpAQCAtMTQsNiArMTMsNyBAQAogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvY2FtZXJhLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPHBsYXQvcHhhM3h4X25hbmQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCmluZGV4IDFjMGRlODAuLmM4YTAxYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKQEAgLTQ5NywxNiArNDk3LDE1IEBACiAJCWdvdG8gZXJyX2ZyZWVfdmJ1c19ncGlvOwogCiAJLyogVVNCIEh1YiBwb3dlci1vbiBhbmQgcmVzZXQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQodXNiX2h1Yl9yZXNldCwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVzYl9odWJfcmVzZXQsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPOV9VU0JfVkJVU19FTiwgMCk7CiAJcmVndWxhdG9yX2VuYWJsZShlbV94MjcwX3VzYl9sZG8pOwotCWdwaW9fc2V0X3ZhbHVlKHVzYl9odWJfcmVzZXQsIDEpOwogCWdwaW9fc2V0X3ZhbHVlKHVzYl9odWJfcmVzZXQsIDApOworCWdwaW9fc2V0X3ZhbHVlKHVzYl9odWJfcmVzZXQsIDEpOwogCXJlZ3VsYXRvcl9kaXNhYmxlKGVtX3gyNzBfdXNiX2xkbyk7CiAJcmVndWxhdG9yX2VuYWJsZShlbV94MjcwX3VzYl9sZG8pOwotCWdwaW9fc2V0X3ZhbHVlKHVzYl9odWJfcmVzZXQsIDEpOwotCi0JLyogZW5hYmxlIFZCVVMgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzlfVVNCX1ZCVVNfRU4sIDEpOworCWdwaW9fc2V0X3ZhbHVlKHVzYl9odWJfcmVzZXQsIDApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU85X1VTQl9WQlVTX0VOLCAxKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYXJjb20tcGNtY2lhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYXJjb20tcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyOGJlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9hcmNvbS1wY21jaWEuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fQVJDT01fUENNQ0lBX0gKKyNkZWZpbmUgX19BUkNPTV9QQ01DSUFfSAorCitzdHJ1Y3QgYXJjb21fcGNtY2lhX3BkYXRhIHsKKwlpbnQJY2RfZ3BpbzsKKwlpbnQJcmR5X2dwaW87CisJaW50CXB3cl9ncGlvOworCXZvaWQJKCpyZXNldCkoaW50IHN0YXRlKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3ZpcGVyLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdmlwZXIuaAppbmRleCAxMDk4OGMyLi41ZjVmYmYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdmlwZXIuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdmlwZXIuaApAQCAtODUsOCArODUsNiBAQAogLyogSW50ZXJydXB0IGFuZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChWSVBFUl9JQ1IpICovCiAvKiBUaGlzIGlzIGEgd3JpdGUgb25seSByZWdpc3Rlci4gT25seSBDRl9SU1QgaXMgdXNlZCB1bmRlciBMaW51eCAqLwogCi1leHRlcm4gdm9pZCB2aXBlcl9jZl9yc3QoaW50IHN0YXRlKTsKLQogI2RlZmluZSBWSVBFUl9JQ1JfUkVUUklHCSgxIDw8IDApCiAjZGVmaW5lIFZJUEVSX0lDUl9BVVRPX0NMUgkoMSA8PCAxKQogI2RlZmluZSBWSVBFUl9JQ1JfUl9ESVMJCSgxIDw8IDIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvemV1cy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3pldXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzg3MDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3pldXMuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96ZXVzLmgKKyAqCisgKiAgQXV0aG9yOglEYXZpZCBWcmFiZWwKKyAqICBDcmVhdGVkOglTZXB0IDI4LCAyMDA1CisgKiAgQ29weXJpZ2h0OglBcmNvbSBDb250cm9sIFN5c3RlbXMgTHRkLgorICoKKyAqICBNYWludGFpbmVkIGJ5OiBNYXJjIFp5bmdpZXIgPG1hekBtaXN0ZXJqb25lcy5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9NQUNIX1pFVVNfSAorI2RlZmluZSBfTUFDSF9aRVVTX0gKKworLyogUGh5c2ljYWwgYWRkcmVzc2VzICovCisjZGVmaW5lIFpFVVNfRkxBU0hfUEhZUwkJUFhBX0NTMF9QSFlTCisjZGVmaW5lIFpFVVNfRVRIMF9QSFlTCQlQWEFfQ1MxX1BIWVMKKyNkZWZpbmUgWkVVU19FVEgxX1BIWVMJCVBYQV9DUzJfUEhZUworI2RlZmluZSBaRVVTX0NQTERfUEhZUwkJKFBYQV9DUzRfUEhZUysweDIwMDAwMDApCisjZGVmaW5lIFpFVVNfU1JBTV9QSFlTCQlQWEFfQ1M1X1BIWVMKKyNkZWZpbmUgWkVVU19QQzEwNElPX1BIWVMJKDB4MzAwMDAwMDApCisKKyNkZWZpbmUgWkVVU19DUExEX1ZFUlNJT05fUEhZUwkoWkVVU19DUExEX1BIWVMgKyAweDAwMDAwMDAwKQorI2RlZmluZSBaRVVTX0NQTERfSVNBX0lSUV9QSFlTCShaRVVTX0NQTERfUEhZUyArIDB4MDA4MDAwMDApCisjZGVmaW5lIFpFVVNfQ1BMRF9DT05UUk9MX1BIWVMJKFpFVVNfQ1BMRF9QSFlTICsgMHgwMTAwMDAwMCkKKyNkZWZpbmUgWkVVU19DUExEX0VYVFdET0dfUEhZUwkoWkVVU19DUExEX1BIWVMgKyAweDAxODAwMDAwKQorCisvKiBHUElPcyAqLworI2RlZmluZSBaRVVTX0FDOTdfR1BJTwkJMAorI2RlZmluZSBaRVVTX1dBS0VVUF9HUElPCTEKKyNkZWZpbmUgWkVVU19VQVJUQV9HUElPCQk5CisjZGVmaW5lIFpFVVNfVUFSVEJfR1BJTwkJMTAKKyNkZWZpbmUgWkVVU19VQVJUQ19HUElPCQkxMgorI2RlZmluZSBaRVVTX1VBUlREX0dQSU8JCTExCisjZGVmaW5lIFpFVVNfRVRIMF9HUElPCQkxNAorI2RlZmluZSBaRVVTX0lTQV9HUElPCQkxNworI2RlZmluZSBaRVVTX0JLTEVOX0dQSU8JCTE5CisjZGVmaW5lIFpFVVNfVVNCMl9QV1JFTl9HUElPCTIyCisjZGVmaW5lIFpFVVNfUFRUX0dQSU8JCTI3CisjZGVmaW5lIFpFVVNfQ0ZfQ0RfR1BJTyAgICAgICAgIDM1CisjZGVmaW5lIFpFVVNfTU1DX1dQX0dQSU8gICAgICAgIDUyCisjZGVmaW5lIFpFVVNfTU1DX0NEX0dQSU8gICAgICAgIDUzCisjZGVmaW5lIFpFVVNfRVhUR1BJT19HUElPCTkxCisjZGVmaW5lIFpFVVNfQ0ZfUFdFTl9HUElPICAgICAgIDk3CisjZGVmaW5lIFpFVVNfQ0ZfUkRZX0dQSU8gICAgICAgIDk5CisjZGVmaW5lIFpFVVNfTENEX0VOX0dQSU8JMTAxCisjZGVmaW5lIFpFVVNfRVRIMV9HUElPCQkxMTMKKyNkZWZpbmUgWkVVU19DQU5fR1BJTwkJMTE2CisKKyNkZWZpbmUgWkVVU19FWFQwX0dQSU9fQkFTRQkxMjgKKyNkZWZpbmUgWkVVU19FWFQxX0dQSU9fQkFTRQkxNjAKKyNkZWZpbmUgWkVVU19VU0VSX0dQSU9fQkFTRQkxOTIKKworI2RlZmluZSBaRVVTX0VYVDBfR1BJTyh4KQkoWkVVU19FWFQwX0dQSU9fQkFTRSArICh4KSkKKyNkZWZpbmUgWkVVU19FWFQxX0dQSU8oeCkJKFpFVVNfRVhUMV9HUElPX0JBU0UgKyAoeCkpCisjZGVmaW5lIFpFVVNfVVNFUl9HUElPKHgpCShaRVVTX1VTRVJfR1BJT19CQVNFICsgKHgpKQorCisvKgorICogQ1BMRCByZWdpc3RlcnM6CisgKiBPbmx5IDQgcmVnaXN0ZXJzLCBidXQgc3ByZWFkZWQgb3ZlciBhIDMyTUIgYWRkcmVzcyBzcGFjZS4KKyAqIEJlIGdlbnRsZSwgYW5kIHJlbWFwIHRoYXQgb3ZlciAzMmtCLi4uCisgKi8KKworI2RlZmluZSBaRVVTX0NQTEQJCSgweGYwMDAwMDAwKQorI2RlZmluZSBaRVVTX0NQTERfVkVSU0lPTgkoWkVVU19DUExEICsgMHgwMDAwKQorI2RlZmluZSBaRVVTX0NQTERfSVNBX0lSUQkoWkVVU19DUExEICsgMHgxMDAwKQorI2RlZmluZSBaRVVTX0NQTERfQ09OVFJPTAkoWkVVU19DUExEICsgMHgyMDAwKQorI2RlZmluZSBaRVVTX0NQTERfRVhUV0RPRwkoWkVVU19DUExEICsgMHgzMDAwKQorCisvKiBDUExEIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgWkVVU19DUExEX0NPTlRST0xfQ0ZfUlNUICAgICAgICAweDAxCisKKyNkZWZpbmUgWkVVU19QQzEwNElPCQkoMHhmMTAwMDAwMCkKKworI2RlZmluZSBaRVVTX1NSQU1fU0laRQkJKDI1NiAqIDEwMjQpCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IGNmMGQ3MWIuLjUzNTJiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9hcmNvbS1wY21jaWEuaD4KICNpbmNsdWRlIDxtYWNoL3ZpcGVyLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTc2LDE0ICs3NywyOCBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZnJvbSB0aGUgcGNtY2lhIG1vZHVsZSB0byByZXNldCB0aGUgQ0YgKi8KLXZvaWQgdmlwZXJfY2ZfcnN0KGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHZpcGVyX2NmX3Jlc2V0KGludCBzdGF0ZSkKIHsKIAlpZiAoc3RhdGUpCiAJCXZpcGVyX2ljcl9zZXRfYml0KFZJUEVSX0lDUl9DRl9SU1QpOwogCWVsc2UKIAkJdmlwZXJfaWNyX2NsZWFyX2JpdChWSVBFUl9JQ1JfQ0ZfUlNUKTsKIH0KLUVYUE9SVF9TWU1CT0wodmlwZXJfY2ZfcnN0KTsKKworc3RhdGljIHN0cnVjdCBhcmNvbV9wY21jaWFfcGRhdGEgdmlwZXJfcGNtY2lhX2luZm8gPSB7CisJLmNkX2dwaW8JPSBWSVBFUl9DRl9DRF9HUElPLAorCS5yZHlfZ3Bpbwk9IFZJUEVSX0NGX1JEWV9HUElPLAorCS5wd3JfZ3Bpbwk9IFZJUEVSX0NGX1BPV0VSX0dQSU8sCisJLnJlc2V0CQk9IHZpcGVyX2NmX3Jlc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdmlwZXJfcGNtY2lhX2RldmljZSA9IHsKKwkubmFtZQkJPSAidmlwZXItcGNtY2lhIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZpcGVyX3BjbWNpYV9pbmZvLAorCX0sCit9OwogCiAvKgogICogVGhlIENQTEQgdmVyc2lvbiByZWdpc3RlciB3YXMgbm90IHByZXNlbnQgb24gVklQRVIgYm9hcmRzIHByaW9yIHRvCkBAIC02ODUsNiArNzAwLDcgQEAKIAkmdmlwZXJfbXRkX2RldmljZXNbMF0sCiAJJnZpcGVyX210ZF9kZXZpY2VzWzFdLAogCSZ2aXBlcl9iYWNrbGlnaHRfZGV2aWNlLAorCSZ2aXBlcl9wY21jaWFfZGV2aWNlLAogfTsKIAogc3RhdGljIG1mcF9jZmdfdCB2aXBlcl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk4NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCkBAIC0wLDAgKzEsODIwIEBACisvKgorICogIFN1cHBvcnQgZm9yIHRoZSBBcmNvbSBaRVVTLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXJjb20gQ29udHJvbCBTeXN0ZW1zIEx0ZC4KKyAqCisgKiAgTG9vc2VseSBiYXNlZCBvbiBBcmNvbSdzIDIuNi4xNi4yOC4KKyAqICBNYWludGFpbmVkIGJ5IE1hcmMgWnluZ2llciA8bWF6QG1pc3RlcmpvbmVzLm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL29oY2kuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvdWRjLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvcG0uaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9hcmNvbS1wY21jaWEuaD4KKyNpbmNsdWRlIDxtYWNoL3pldXMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyoKKyAqIEludGVycnVwdCBoYW5kbGluZworICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHpldXNfaXJxX2VuYWJsZWRfbWFzazsKK3N0YXRpYyBjb25zdCBpbnQgemV1c19pc2FfaXJxc1tdID0geyAzLCA0LCA1LCA2LCA3LCAxMCwgMTEsIDEyLCB9Oworc3RhdGljIGNvbnN0IGludCB6ZXVzX2lzYV9pcnFfbWFwW10gPSB7CisJMCwJCS8qIElTQSBpcnEgIzAsIGludmFsaWQgKi8KKwkwLAkJLyogSVNBIGlycSAjMSwgaW52YWxpZCAqLworCTAsCQkvKiBJU0EgaXJxICMyLCBpbnZhbGlkICovCisJMSA8PCAwLAkJLyogSVNBIGlycSAjMyAqLworCTEgPDwgMSwJCS8qIElTQSBpcnEgIzQgKi8KKwkxIDw8IDIsCQkvKiBJU0EgaXJxICM1ICovCisJMSA8PCAzLAkJLyogSVNBIGlycSAjNiAqLworCTEgPDwgNCwJCS8qIElTQSBpcnEgIzcgKi8KKwkwLAkJLyogSVNBIGlycSAjOCwgaW52YWxpZCAqLworCTAsCQkvKiBJU0EgaXJxICM5LCBpbnZhbGlkICovCisJMSA8PCA1LAkJLyogSVNBIGlycSAjMTAgKi8KKwkxIDw8IDYsCQkvKiBJU0EgaXJxICMxMSAqLworCTEgPDwgNywJCS8qIElTQSBpcnEgIzEyICovCit9OworCitzdGF0aWMgaW5saW5lIGludCB6ZXVzX2lycV90b19iaXRtYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIHpldXNfaXNhX2lycV9tYXBbaXJxIC0gUFhBX0lTQV9JUlEoMCldOworfQorCitzdGF0aWMgaW5saW5lIGludCB6ZXVzX2JpdF90b19pcnEoaW50IGJpdCkKK3sKKwlyZXR1cm4gemV1c19pc2FfaXJxc1tiaXRdICsgUFhBX0lTQV9JUlEoMCk7Cit9CisKK3N0YXRpYyB2b2lkIHpldXNfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRldyh6ZXVzX2lycV90b19iaXRtYXNrKGlycSksIFpFVVNfQ1BMRF9JU0FfSVJRKTsKK30KKworc3RhdGljIHZvaWQgemV1c19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXpldXNfaXJxX2VuYWJsZWRfbWFzayAmPSB+KHpldXNfaXJxX3RvX2JpdG1hc2soaXJxKSk7Cit9CisKK3N0YXRpYyB2b2lkIHpldXNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXpldXNfaXJxX2VuYWJsZWRfbWFzayB8PSB6ZXVzX2lycV90b19iaXRtYXNrKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6ZXVzX2lycV9wZW5kaW5nKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KFpFVVNfQ1BMRF9JU0FfSVJRKSAmIHpldXNfaXJxX2VuYWJsZWRfbWFzazsKK30KKworc3RhdGljIHZvaWQgemV1c19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgbG9uZyBwZW5kaW5nOworCisJcGVuZGluZyA9IHpldXNfaXJxX3BlbmRpbmcoKTsKKwlkbyB7CisJCS8qIHdlJ3JlIGluIGEgY2hhaW5lZCBpcnEgaGFuZGxlciwKKwkJICogc28gYWNrIHRoZSBpbnRlcnJ1cHQgYnkgaGFuZCAqLworCQlkZXNjLT5jaGlwLT5hY2soZ3Bpb190b19pcnEoWkVVU19JU0FfR1BJTykpOworCisJCWlmIChsaWtlbHkocGVuZGluZykpIHsKKwkJCWlycSA9IHpldXNfYml0X3RvX2lycShfX2ZmcyhwZW5kaW5nKSk7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwkJfQorCQlwZW5kaW5nID0gemV1c19pcnFfcGVuZGluZygpOworCX0gd2hpbGUgKHBlbmRpbmcpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHpldXNfaXJxX2NoaXAgPSB7CisJLm5hbWUJPSAiSVNBIiwKKwkuYWNrCT0gemV1c19hY2tfaXJxLAorCS5tYXNrCT0gemV1c19tYXNrX2lycSwKKwkudW5tYXNrCT0gemV1c191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHpldXNfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgbGV2ZWw7CisJaW50IGlzYV9pcnE7CisKKwlweGEyN3hfaW5pdF9pcnEoKTsKKworCS8qIFBlcmlwaGVyYWwgSVJRcy4gSXQgd291bGQgYmUgbmljZSB0byBtb3ZlIHRob3NlIGluc2lkZSBkcml2ZXIKKwkgICBjb25maWd1cmF0aW9uLCBidXQgaXQgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LiAqLworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShaRVVTX0FDOTdfR1BJTyksCUlSUV9UWVBFX0VER0VfUklTSU5HKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoWkVVU19XQUtFVVBfR1BJTyksCUlSUV9UWVBFX0VER0VfUklTSU5HKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoWkVVU19QVFRfR1BJTyksCUlSUV9UWVBFX0VER0VfUklTSU5HKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoWkVVU19FWFRHUElPX0dQSU8pLAlJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShaRVVTX0NBTl9HUElPKSwJSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKKworCS8qIFNldHVwIElTQSBJUlFzICovCisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgQVJSQVlfU0laRSh6ZXVzX2lzYV9pcnFzKTsgbGV2ZWwrKykgeworCQlpc2FfaXJxID0gemV1c19iaXRfdG9faXJxKGxldmVsKTsKKwkJc2V0X2lycV9jaGlwKGlzYV9pcnEsICZ6ZXVzX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlzYV9pcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXNhX2lycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KKworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShaRVVTX0lTQV9HUElPKSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGdwaW9fdG9faXJxKFpFVVNfSVNBX0dQSU8pLCB6ZXVzX2lycV9oYW5kbGVyKTsKK30KKworCisvKgorICogUGxhdGZvcm0gZGV2aWNlcworICovCisKKy8qIEZsYXNoICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHpldXNfbXRkX3Jlc291cmNlc1tdID0geworCVswXSA9IHsgLyogTk9SIEZsYXNoICh1cCB0byA2NE1CKSAqLworCQkuc3RhcnQJPSBaRVVTX0ZMQVNIX1BIWVMsCisJCS5lbmQJPSBaRVVTX0ZMQVNIX1BIWVMgKyBTWl82NE0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsgLyogU1JBTSAqLworCQkuc3RhcnQJPSBaRVVTX1NSQU1fUEhZUywKKwkJLmVuZAk9IFpFVVNfU1JBTV9QSFlTICsgU1pfNTEySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB6ZXVzX2ZsYXNoX2RhdGFbXSA9IHsKKwlbMF0gPSB7CisJCS53aWR0aAkJPSAyLAorCQkucGFydHMJCT0gTlVMTCwKKwkJLm5yX3BhcnRzCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgemV1c19tdGRfZGV2aWNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCQkuaWQJCT0gMCwKKwkJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZ6ZXVzX2ZsYXNoX2RhdGFbMF0sCisJCX0sCisJCS5yZXNvdXJjZQk9ICZ6ZXVzX210ZF9yZXNvdXJjZXNbMF0sCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwl9LAorfTsKKworLyogU2VyaWFsICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHpldXNfc2VyaWFsX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDAwMGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDEwODAwMDAwLAorCQkuZW5kCT0gMHgxMDgwMDAwZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MTEwMDAwMDAsCisJCS5lbmQJPSAweDExMDAwMDBmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHg0MDEwMDAwMCwKKwkJLmVuZAk9IDB4NDAxMDAwMWYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDQwMjAwMDAwLAorCQkuZW5kCT0gMHg0MDIwMDAxZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4NDA3MDAwMDAsCisJCS5lbmQJPSAweDQwNzAwMDFmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCS8qIEV4dGVybmFsIFVBUlRzICovCisJLyogRklYTUU6IFNoYXJlZCBJUlFzIG9uIENPTTEtQ09NNCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IG9uIHYxaTEgaGFyZHdhcmUuICovCisJeyAvKiBDT00xICovCisJCS5tYXBiYXNlCT0gMHgxMDAwMDAwMCwKKwkJLmlycQkJPSBncGlvX3RvX2lycShaRVVTX1VBUlRBX0dQSU8pLAorCQkuaXJxZmxhZ3MJPSBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkudWFydGNsawk9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQJPSAxLAorCQkuZmxhZ3MJCT0gVVBGX0lPUkVNQVAgfCBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJfSwKKwl7IC8qIENPTTIgKi8KKwkJLm1hcGJhc2UJPSAweDEwODAwMDAwLAorCQkuaXJxCQk9IGdwaW9fdG9faXJxKFpFVVNfVUFSVEJfR1BJTyksCisJCS5pcnFmbGFncwk9IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCS51YXJ0Y2xrCT0gMTQ3NDU2MDAsCisJCS5yZWdzaGlmdAk9IDEsCisJCS5mbGFncwkJPSBVUEZfSU9SRU1BUCB8IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwl9LAorCXsgLyogQ09NMyAqLworCQkubWFwYmFzZQk9IDB4MTEwMDAwMDAsCisJCS5pcnEJCT0gZ3Bpb190b19pcnEoWkVVU19VQVJUQ19HUElPKSwKKwkJLmlycWZsYWdzCT0gSVJRRl9UUklHR0VSX1JJU0lORywKKwkJLnVhcnRjbGsJPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0CT0gMSwKKwkJLmZsYWdzCQk9IFVQRl9JT1JFTUFQIHwgVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCX0sCisJeyAvKiBDT000ICovCisJCS5tYXBiYXNlCT0gMHgxMTgwMDAwMCwKKwkJLmlycQkJPSBncGlvX3RvX2lycShaRVVTX1VBUlREX0dQSU8pLAorCQkuaXJxZmxhZ3MJPSBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkudWFydGNsawk9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQJPSAxLAorCQkuZmxhZ3MJCT0gVVBGX0lPUkVNQVAgfCBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJfSwKKwkvKiBJbnRlcm5hbCBVQVJUcyAqLworCXsgLyogRkZVQVJUICovCisJCS5tZW1iYXNlCT0gKHZvaWQgKikmRkZVQVJULAorCQkubWFwYmFzZQk9IF9fUFJFRyhGRlVBUlQpLAorCQkuaXJxCQk9IElSUV9GRlVBUlQsCisJCS51YXJ0Y2xrCT0gOTIxNjAwICogMTYsCisJCS5yZWdzaGlmdAk9IDIsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJfSwKKwl7IC8qIEJUVUFSVCAqLworCQkubWVtYmFzZQk9ICh2b2lkICopJkJUVUFSVCwKKwkJLm1hcGJhc2UJPSBfX1BSRUcoQlRVQVJUKSwKKwkJLmlycQkJPSBJUlFfQlRVQVJULAorCQkudWFydGNsawk9IDkyMTYwMCAqIDE2LAorCQkucmVnc2hpZnQJPSAyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCX0sCisJeyAvKiBTVFVBUlQgKi8KKwkJLm1lbWJhc2UJPSAodm9pZCAqKSZTVFVBUlQsCisJCS5tYXBiYXNlCT0gX19QUkVHKFNUVUFSVCksCisJCS5pcnEJCT0gSVJRX1NUVUFSVCwKKwkJLnVhcnRjbGsJPSA5MjE2MDAgKiAxNiwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHpldXNfc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkuaWQgICA9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh6ZXVzX3NlcmlhbF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHpldXNfc2VyaWFsX3Jlc291cmNlcywKK307CisKKy8qIEV0aGVybmV0ICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHpldXNfZG05azBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFpFVVNfRVRIMF9QSFlTLAorCQkuZW5kICAgPSBaRVVTX0VUSDBfUEhZUyArIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IFpFVVNfRVRIMF9QSFlTICsgMiwKKwkJLmVuZCAgID0gWkVVU19FVEgwX1BIWVMgKyAzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBncGlvX3RvX2lycShaRVVTX0VUSDBfR1BJTyksCisJCS5lbmQgICA9IGdwaW9fdG9faXJxKFpFVVNfRVRIMF9HUElPKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHpldXNfZG05azFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFpFVVNfRVRIMV9QSFlTLAorCQkuZW5kICAgPSBaRVVTX0VUSDFfUEhZUyArIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IFpFVVNfRVRIMV9QSFlTICsgMiwKKwkJLmVuZCAgID0gWkVVU19FVEgxX1BIWVMgKyAzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gZ3Bpb190b19pcnEoWkVVU19FVEgxX0dQSU8pLAorCQkuZW5kICAgPSBncGlvX3RvX2lycShaRVVTX0VUSDFfR1BJTyksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIHpldXNfZG05a19wbGF0ZGF0YSA9IHsKKwkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzE2QklUT05MWSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHpldXNfZG05azBfZGV2aWNlID0geworCS5uYW1lCQk9ICJkbTkwMDAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh6ZXVzX2RtOWswX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSB6ZXVzX2RtOWswX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ6ZXVzX2RtOWtfcGxhdGRhdGEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgemV1c19kbTlrMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImRtOTAwMCIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHpldXNfZG05azFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHpldXNfZG05azFfcmVzb3VyY2UsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnpldXNfZG05a19wbGF0ZGF0YSwKKwl9Cit9OworCisvKiBFeHRlcm5hbCBTUkFNICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHpldXNfc3JhbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gWkVVU19TUkFNX1BIWVMsCisJLmVuZAkJPSBaRVVTX1NSQU1fUEhZUyArIFpFVVNfU1JBTV9TSVpFICogMiAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgemV1c19zcmFtX2RldmljZSA9IHsKKwkubmFtZQkJPSAicHhhMnh4LThiaXQtc3JhbSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZ6ZXVzX3NyYW1fcmVzb3VyY2UsCit9OworCisvKiBTUEkgaW50ZXJmYWNlIG9uIFNTUDMgKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhMnh4X3NwaV9zc3AzX21hc3Rlcl9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsCisJLmVuYWJsZV9kbWEgICAgID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTJ4eF9zcGlfc3NwM19kZXZpY2UgPSB7CisJLm5hbWUgPSAicHhhMnh4LXNwaSIsCisJLmlkID0gMywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZweGEyeHhfc3BpX3NzcDNfbWFzdGVyX2luZm8sCisJfSwKK307CisKKy8qIExlZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgemV1c19sZWRzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJID0gInpldXM6eWVsbG93OjEiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkgPSBaRVVTX0VYVDBfR1BJTygzKSwKKwkJLmFjdGl2ZV9sb3cJID0gMSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCSA9ICJ6ZXVzOnllbGxvdzoyIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKKwkJLmdwaW8JCSA9IFpFVVNfRVhUMF9HUElPKDQpLAorCQkuYWN0aXZlX2xvdwkgPSAxLAorCX0sCisJWzJdID0geworCQkubmFtZQkJID0gInpldXM6eWVsbG93OjMiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImRlZmF1bHQtb24iLAorCQkuZ3BpbwkJID0gWkVVU19FWFQwX0dQSU8oNSksCisJCS5hY3RpdmVfbG93CSA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSB6ZXVzX2xlZHNfaW5mbyA9IHsKKwkubGVkcwkJPSB6ZXVzX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRSh6ZXVzX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgemV1c19sZWRzX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGVkcy1ncGlvIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnpldXNfbGVkc19pbmZvLAorCX0sCit9OworCitzdGF0aWMgdm9pZCB6ZXVzX2NmX3Jlc2V0KGludCBzdGF0ZSkKK3sKKwl1MTYgY3BsZF9zdGF0ZSA9IF9fcmF3X3JlYWR3KFpFVVNfQ1BMRF9DT05UUk9MKTsKKworCWlmIChzdGF0ZSkKKwkJY3BsZF9zdGF0ZSB8PSBaRVVTX0NQTERfQ09OVFJPTF9DRl9SU1Q7CisJZWxzZQorCQljcGxkX3N0YXRlICY9IH5aRVVTX0NQTERfQ09OVFJPTF9DRl9SU1Q7CisKKwlfX3Jhd193cml0ZXcoY3BsZF9zdGF0ZSwgWkVVU19DUExEX0NPTlRST0wpOworfQorCitzdGF0aWMgc3RydWN0IGFyY29tX3BjbWNpYV9wZGF0YSB6ZXVzX3BjbWNpYV9pbmZvID0geworCS5jZF9ncGlvCT0gWkVVU19DRl9DRF9HUElPLAorCS5yZHlfZ3Bpbwk9IFpFVVNfQ0ZfUkRZX0dQSU8sCisJLnB3cl9ncGlvCT0gWkVVU19DRl9QV0VOX0dQSU8sCisJLnJlc2V0CQk9IHpldXNfY2ZfcmVzZXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB6ZXVzX3BjbWNpYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInpldXMtcGNtY2lhIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnpldXNfcGNtY2lhX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp6ZXVzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZ6ZXVzX3NlcmlhbF9kZXZpY2UsCisJJnpldXNfbXRkX2RldmljZXNbMF0sCisJJnpldXNfZG05azBfZGV2aWNlLAorCSZ6ZXVzX2RtOWsxX2RldmljZSwKKwkmemV1c19zcmFtX2RldmljZSwKKwkmcHhhMnh4X3NwaV9zc3AzX2RldmljZSwKKwkmemV1c19sZWRzX2RldmljZSwKKwkmemV1c19wY21jaWFfZGV2aWNlLAorfTsKKworLyogQUMnOTcgKi8KK3N0YXRpYyBweGEyeHhfYXVkaW9fb3BzX3QgemV1c19hYzk3X2luZm8gPSB7CisJLnJlc2V0X2dwaW8gPSA5NSwKK307CisKKworLyoKKyAqIFVTQiBob3N0CisgKi8KKworc3RhdGljIGludCB6ZXVzX29oY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKworCS8qIFN3aXRjaCBvbiBwb3J0IDIuICovCisJaWYgKChlcnIgPSBncGlvX3JlcXVlc3QoWkVVU19VU0IyX1BXUkVOX0dQSU8sICJVU0IyX1BXUkVOIikpKSB7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVxdWVzdCBVU0IyX1BXUkVOXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoKGVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChaRVVTX1VTQjJfUFdSRU5fR1BJTywgMSkpKSB7CisJCWdwaW9fZnJlZShaRVVTX1VTQjJfUFdSRU5fR1BJTyk7CisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgZW5hYmxlIFVTQjJfUFdSRU5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFBvcnQgMiBpcyBzaGFyZWQgYmV0d2VlbiBob3N0IGFuZCBjbGllbnQgaW50ZXJmYWNlLiAqLworCVVQMk9DUiA9IFVQMk9DUl9IWE9FIHwgVVAyT0NSX0hYUyB8IFVQMk9DUl9ETVBERSB8IFVQMk9DUl9EUFBERTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB6ZXVzX29oY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyogUG93ZXItb2ZmIHBvcnQgMiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChaRVVTX1VTQjJfUFdSRU5fR1BJTywgMCk7CisJZ3Bpb19mcmVlKFpFVVNfVVNCMl9QV1JFTl9HUElPKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgemV1c19vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9OUFNfTU9ERSwKKwkuZmxhZ3MJCT0gRU5BQkxFX1BPUlRfQUxMIHwgUE9XRVJfQ09OVFJPTF9MT1cgfCBQT1dFUl9TRU5TRV9MT1csCisJLmluaXQJCT0gemV1c19vaGNpX2luaXQsCisJLmV4aXQJCT0gemV1c19vaGNpX2V4aXQsCit9OworCisvKgorICogRmxhdCBQYW5lbAorICovCisKK3N0YXRpYyB2b2lkIHpldXNfbGNkX3Bvd2VyKGludCBvbiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpzaSkKK3sKKwlncGlvX3NldF92YWx1ZShaRVVTX0xDRF9FTl9HUElPLCBvbik7Cit9CisKK3N0YXRpYyB2b2lkIHpldXNfYmFja2xpZ2h0X3Bvd2VyKGludCBvbikKK3sKKwlncGlvX3NldF92YWx1ZShaRVVTX0JLTEVOX0dQSU8sIG9uKTsKK30KKworc3RhdGljIGludCB6ZXVzX3NldHVwX2ZiX2dwaW9zKHZvaWQpCit7CisJaW50IGVycjsKKworCWlmICgoZXJyID0gZ3Bpb19yZXF1ZXN0KFpFVVNfTENEX0VOX0dQSU8sICJMQ0RfRU4iKSkpCisJCWdvdG8gb3V0X2VycjsKKworCWlmICgoZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFpFVVNfTENEX0VOX0dQSU8sIDApKSkKKwkJZ290byBvdXRfZXJyX2xjZDsKKworCWlmICgoZXJyID0gZ3Bpb19yZXF1ZXN0KFpFVVNfQktMRU5fR1BJTywgIkJLTEVOIikpKQorCQlnb3RvIG91dF9lcnJfbGNkOworCisJaWYgKChlcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoWkVVU19CS0xFTl9HUElPLCAwKSkpCisJCWdvdG8gb3V0X2Vycl9ia2w7CisKKwlyZXR1cm4gMDsKKworb3V0X2Vycl9ia2w6CisJZ3Bpb19mcmVlKFpFVVNfQktMRU5fR1BJTyk7CitvdXRfZXJyX2xjZDoKKwlncGlvX2ZyZWUoWkVVU19MQ0RfRU5fR1BJTyk7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHpldXNfZmJfbW9kZV9pbmZvW10gPSB7CisJeworCQkucGl4Y2xvY2sgICAgICAgPSAzOTcyMiwKKworCQkueHJlcyAgICAgICAgICAgPSA2NDAsCisJCS55cmVzICAgICAgICAgICA9IDQ4MCwKKworCQkuYnBwICAgICAgICAgICAgPSAxNiwKKworCQkuaHN5bmNfbGVuICAgICAgPSA2MywKKwkJLmxlZnRfbWFyZ2luICAgID0gMTYsCisJCS5yaWdodF9tYXJnaW4gICA9IDgxLAorCisJCS52c3luY19sZW4gICAgICA9IDIsCisJCS51cHBlcl9tYXJnaW4gICA9IDEyLAorCQkubG93ZXJfbWFyZ2luICAgPSAzMSwKKworCQkuc3luYwkJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyB6ZXVzX2ZiX2luZm8gPSB7CisJLm1vZGVzCQkJPSB6ZXVzX2ZiX21vZGVfaW5mbywKKwkubnVtX21vZGVzCQk9IDEsCisJLmxjZF9jb25uCQk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCisJLnB4YWZiX2xjZF9wb3dlcgk9IHpldXNfbGNkX3Bvd2VyLAorCS5weGFmYl9iYWNrbGlnaHRfcG93ZXIJPSB6ZXVzX2JhY2tsaWdodF9wb3dlciwKK307CisKKy8qCisgKiBNTUMvU0QgRGV2aWNlCisgKgorICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKKyAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgemV1c19tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5kZXRlY3RfZGVsYXkJCT0gSFovNCwKKwkuZ3Bpb19jYXJkX2RldGVjdCAgICAgICA9IFpFVVNfTU1DX0NEX0dQSU8sCisJLmdwaW9fY2FyZF9ybyAgICAgICAgICAgPSBaRVVTX01NQ19XUF9HUElPLAorCS5ncGlvX2NhcmRfcm9faW52ZXJ0CT0gMSwKKwkuZ3Bpb19wb3dlciAgICAgICAgICAgICA9IC0xCit9OworCisvKgorICogVVNCIERldmljZSBDb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHpldXNfdWRjX2NvbW1hbmQoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVDoKKwkJcHJfaW5mbygiemV1czogZGlzY29ubmVjdGluZyBVU0IgY2xpZW50XG4iKTsKKwkJVVAyT0NSID0gVVAyT0NSX0hYT0UgfCBVUDJPQ1JfSFhTIHwgVVAyT0NSX0RNUERFIHwgVVAyT0NSX0RQUERFOworCQlicmVhazsKKworCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKKwkJcHJfaW5mbygiemV1czogY29ubmVjdGluZyBVU0IgY2xpZW50XG4iKTsKKwkJVVAyT0NSID0gVVAyT0NSX0hYT0UgfCBVUDJPQ1JfRFBQVUU7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyB6ZXVzX3VkY19pbmZvID0geworCS51ZGNfY29tbWFuZCA9IHpldXNfdWRjX2NvbW1hbmQsCit9OworCitzdGF0aWMgdm9pZCB6ZXVzX3Bvd2VyX29mZih2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKK30KKworaW50IHpldXNfZ2V0X3BjYl9pbmZvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGdwaW8sCisJCSAgICAgIHVuc2lnbmVkIG5ncGlvLCB2b2lkICpjb250ZXh0KQoreworCWludCBpOworCXU4IHBjYl9pbmZvID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaW50IHBjYl9iaXQgPSBncGlvICsgaSArIDg7CisKKwkJaWYgKGdwaW9fcmVxdWVzdChwY2JfYml0LCAicGNiIGluZm8iKSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJDYW4ndCByZXF1ZXN0IHBjYiBpbmZvICVkXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBjYl9iaXQpKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNhbid0IHJlYWQgcGNiIGluZm8gJWRcbiIsIGkpOworCQkJZ3Bpb19mcmVlKHBjYl9iaXQpOworCQkJY29udGludWU7CisJCX0KKworCQlwY2JfaW5mbyB8PSAhIWdwaW9fZ2V0X3ZhbHVlKHBjYl9iaXQpIDw8IGk7CisKKwkJZ3Bpb19mcmVlKHBjYl9iaXQpOworCX0KKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlpldXMgUENCIHZlcnNpb24gJWQgaXNzdWUgJWRcbiIsCisJCSBwY2JfaW5mbyA+PiA0LCBwY2JfaW5mbyAmIDB4Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgemV1c19wY2E5NTN4X3BkYXRhW10gPSB7CisJWzBdID0geyAuZ3Bpb19iYXNlCT0gWkVVU19FWFQwX0dQSU9fQkFTRSwgfSwKKwlbMV0gPSB7CisJCS5ncGlvX2Jhc2UJPSBaRVVTX0VYVDFfR1BJT19CQVNFLAorCQkuc2V0dXAJCT0gemV1c19nZXRfcGNiX2luZm8sCisJfSwKKwlbMl0gPSB7IC5ncGlvX2Jhc2UgPSBaRVVTX1VTRVJfR1BJT19CQVNFLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHpldXNfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTM1IiwJMHgyMSksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnpldXNfcGNhOTUzeF9wZGF0YVswXSwKKwl9LAorCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjYTk1MzUiLAkweDIyKSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmemV1c19wY2E5NTN4X3BkYXRhWzFdLAorCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygicGNhOTUzNSIsCTB4MjApLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ6ZXVzX3BjYTk1M3hfcGRhdGFbMl0sCisJCS5pcnEJCT0gZ3Bpb190b19pcnEoWkVVU19FWFRHUElPX0dQSU8pLAorCX0sCisJeyBJMkNfQk9BUkRfSU5GTygibG03NWEiLAkweDQ4KSB9LAorCXsgSTJDX0JPQVJEX0lORk8oIjI0YzAxIiwJMHg1MCkgfSwKKwl7IEkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwJMHg2ZikgfSwKK307CisKK3N0YXRpYyBtZnBfY2ZnX3QgemV1c19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMTVfbkNTXzEsCisJR1BJTzc4X25DU18yLAorCUdQSU84MF9uQ1NfNCwKKwlHUElPMzNfbkNTXzUsCisKKwlHUElPMjJfR1BJTywKKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKKworCUdQSU84OF9VU0JIMV9QV1IsCisJR1BJTzg5X1VTQkgxX1BFTiwKKwlHUElPMTE5X1VTQkgyX1BXUiwKKwlHUElPMTIwX1VTQkgyX1BFTiwKKworCUdQSU84Nl9MQ0RfTEREXzE2LAorCUdQSU84N19MQ0RfTEREXzE3LAorCisJR1BJTzEwMl9HUElPLAorCUdQSU8xMDRfQ0lGX0REXzIsCisJR1BJTzEwNV9DSUZfRERfMSwKKworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPNTRfblBDRV8yLAorCUdQSU83OV9QU0tUU0VMLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTZfblBXQUlULAorCUdQSU81N19uSU9JUzE2LAorCUdQSU8zNl9HUElPLAkJLyogQ0YgQ0QgKi8KKwlHUElPOTdfR1BJTywJCS8qIENGIFBXUkVOICovCisJR1BJTzk5X0dQSU8sCQkvKiBDRiBSRFkgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB6ZXVzX2luaXQodm9pZCkKK3sKKwl1MTYgZG05MDAwX21zYyA9IDB4ZTI3OTsKKworCXN5c3RlbV9yZXYgPSBfX3Jhd19yZWFkdyhaRVVTX0NQTERfVkVSU0lPTik7CisJcHJfaW5mbygiWmV1cyBDUExEIFYlZEklZFxuIiwgKHN5c3RlbV9yZXYgJiAweGYwKSA+PiA0LCAoc3lzdGVtX3JldiAmIDB4MGYpKTsKKworCS8qIEZpeCB0aW1pbmdzIGZvciBkbTkwMDBzIChDUzEvQ1MyKSovCisJTVNDMCA9IChNU0MwICYgMHhmZmZmKSB8IChkbTkwMDBfbXNjIDw8IDE2KTsKKwlNU0MxID0gKE1TQzEgJiAweGZmZmYwMDAwKSB8IGRtOTAwMF9tc2M7CisKKwlwbV9wb3dlcl9vZmYgPSB6ZXVzX3Bvd2VyX29mZjsKKworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHpldXNfcGluX2NvbmZpZykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoemV1c19kZXZpY2VzLCBBUlJBWV9TSVpFKHpldXNfZGV2aWNlcykpOworCisJcHhhX3NldF9vaGNpX2luZm8oJnpldXNfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKworCWlmICh6ZXVzX3NldHVwX2ZiX2dwaW9zKCkpCisJCXByX2VycigiRmFpbGVkIHRvIHNldHVwIGZiIGdwaW9zXG4iKTsKKwllbHNlCisJCXNldF9weGFfZmJfaW5mbygmemV1c19mYl9pbmZvKTsKKworCXB4YV9zZXRfbWNpX2luZm8oJnpldXNfbWNpX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfdWRjX2luZm8oJnpldXNfdWRjX2luZm8pOworCXB4YV9zZXRfYWM5N19pbmZvKCZ6ZXVzX2FjOTdfaW5mbyk7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRSh6ZXVzX2kyY19kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgemV1c19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsID0gWkVVU19DUExEX1ZFUlNJT04sCisJCS5wZm4gICAgID0gX19waHlzX3RvX3BmbihaRVVTX0NQTERfVkVSU0lPTl9QSFlTKSwKKwkJLmxlbmd0aCAgPSAweDEwMDAsCisJCS50eXBlICAgID0gTVRfREVWSUNFLAorCX0sCisJeworCQkudmlydHVhbCA9IFpFVVNfQ1BMRF9JU0FfSVJRLAorCQkucGZuICAgICA9IF9fcGh5c190b19wZm4oWkVVU19DUExEX0lTQV9JUlFfUEhZUyksCisJCS5sZW5ndGggID0gMHgxMDAwLAorCQkudHlwZSAgICA9IE1UX0RFVklDRSwKKwl9LAorCXsKKwkJLnZpcnR1YWwgPSBaRVVTX0NQTERfQ09OVFJPTCwKKwkJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKFpFVVNfQ1BMRF9DT05UUk9MX1BIWVMpLAorCQkubGVuZ3RoICA9IDB4MTAwMCwKKwkJLnR5cGUgICAgPSBNVF9ERVZJQ0UsCisJfSwKKwl7CisJCS52aXJ0dWFsID0gWkVVU19DUExEX0VYVFdET0csCisJCS5wZm4gICAgID0gX19waHlzX3RvX3BmbihaRVVTX0NQTERfRVhUV0RPR19QSFlTKSwKKwkJLmxlbmd0aCAgPSAweDEwMDAsCisJCS50eXBlICAgID0gTVRfREVWSUNFLAorCX0sCisJeworCQkudmlydHVhbCA9IFpFVVNfUEMxMDRJTywKKwkJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKFpFVVNfUEMxMDRJT19QSFlTKSwKKwkJLmxlbmd0aCAgPSAweDAwODAwMDAwLAorCQkudHlwZSAgICA9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHpldXNfbWFwX2lvKHZvaWQpCit7CisJcHhhX21hcF9pbygpOworCisJaW90YWJsZV9pbml0KHpldXNfaW9fZGVzYywgQVJSQVlfU0laRSh6ZXVzX2lvX2Rlc2MpKTsKKworCS8qIENsZWFyIFBTUFIgdG8gZW5zdXJlIGEgZnVsbCByZXN0YXJ0IG9uIHdha2UtdXAuICovCisJUE1DUiA9IFBTUFIgPSAwOworCisJLyogZW5hYmxlIGludGVybmFsIDMyLjc2OEtoeiBvc2NpbGxhdG9yIChpZ25vcmUgT1NDQ19PT0spICovCisJT1NDQyB8PSBPU0NDX09PTjsKKworCS8qIFNvbWUgY2xvY2sgY3ljbGVzIGxhdGVyIChmcm9tIE9TQ0NfT04pLCBwcm9ncmFtbWUgUENGUiAoT1BERS4uLikuCisJICogZmxvYXQgY2hpcCBzZWxlY3RzIGFuZCBQQ01DSUEgKi8KKwlQQ0ZSID0gUENGUl9PUERFIHwgUENGUl9EQ19FTiB8IFBDRlJfRlMgfCBQQ0ZSX0ZQOworfQorCitNQUNISU5FX1NUQVJUKEFSQ09NX1pFVVMsICJBcmNvbSBaRVVTIikKKwkvKiBNYWludGFpbmVyOiBNYXJjIFp5bmdpZXIgPG1hekBtaXN0ZXJqb25lcy5vcmc+ICovCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYyksCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKKwkubWFwX2lvCQk9IHpldXNfbWFwX2lvLAorCS5pbml0X2lycQk9IHpldXNfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHpldXNfaW5pdCwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBjNDhlMWYyLi5lZTVlMzkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC03MCw3ICs3MCw3IEBACiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQlggcGxhdGZvcm0iCiAJc2VsZWN0IEFSTV9HSUMKIAlzZWxlY3QgSEFWRV9QQVRBX1BMQVRGT1JNCi0Jc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpZiBDUFVfVjcgJiYgIUhJR0hfUEhZU19PRkZTRVQKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlmIENQVV9WNyAmJiAhUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCXNlbGVjdCBaT05FX0RNQSBpZiBTUEFSU0VNRU0KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgUEJYIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKaW5kZXggMTkzYjM5ZC4uNGQ5NTg4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCkBAIC0xOCw2ICsxOCw4IEBACiAJdW5zaWduZWQgaW50CQkgbnVtX2NzOwkvKiB0b3RhbCBjaGlwc2VsZWN0cyAqLwogCWludAkJCSBidXNfbnVtOyAgICAgICAvKiBidXMgbnVtYmVyIHRvIHVzZS4gKi8KIAorCXVuc2lnbmVkIGludAkJIHVzZV9maXE6MTsJLyogdXNlIGZpcSAqLworCiAJdm9pZCAoKmdwaW9fc2V0dXApKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBlbmFibGUpOwogCXZvaWQgKCpzZXRfY3MpKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbCk7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL21hY2gtZ3RhMDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9tYWNoLWd0YTAyLmMKaW5kZXggZjc2ZDZmZi4uMGI0YTNhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL21hY2gtZ3RhMDIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvbWFjaC1ndGEwMi5jCkBAIC0yNjgsNiArMjY4LDkgQEAKIAogCS5iYXR0ZXJpZXMgPSBndGEwMl9iYXR0ZXJpZXMsCiAJLm51bV9iYXR0ZXJpZXMgPSBBUlJBWV9TSVpFKGd0YTAyX2JhdHRlcmllcyksCisKKwkuY2hhcmdlcl9yZWZlcmVuY2VfY3VycmVudF9tYSA9IDEwMDAsCisKIAkucmVnX2luaXRfZGF0YSA9IHsKIAkJW1BDRjUwNjMzX1JFR1VMQVRPUl9BVVRPXSA9IHsKIAkJCS5jb25zdHJhaW50cyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDU4NTIxMWMuLjdkNzRmZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTUsNSArMTUsNyBAQAogCiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQorI2RlZmluZSBfX3Bmbl90b19idXMoeCkgX19wZm5fdG9fcGh5cyh4KQorI2RlZmluZSBfX2J1c190b19wZm4oeCkJX19waHlzX3RvX3Bmbih4KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCmluZGV4IDAzYTdmMzguLmIxN2Q1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogY29uZmlnIFNBMTEwMF9BU1NBQkVUCiAJYm9vbCAiQXNzYWJldCIKKwlzZWxlY3QgQ1BVX0ZSRVFfU0ExMTEwCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBJbnRlbChSKSBTdHJvbmdBUk0oUikgU0EtMTExMAogCSAgTWljcm9wcm9jZXNzb3IgRGV2ZWxvcG1lbnQgQm9hcmQgKGFsc28ga25vd24gYXMgdGhlIEFzc2FiZXQpLgpAQCAtMTksNiArMjAsNyBAQAogCiBjb25maWcgU0ExMTAwX0NFUkYKIAlib29sICJDZXJmQm9hcmQiCisJc2VsZWN0IENQVV9GUkVRX1NBMTExMAogCWhlbHAKIAkgIFRoZSBJbnRyaW5zeWMgQ2VyZkJvYXJkIGlzIGJhc2VkIG9uIHRoZSBTdHJvbmdBUk0gMTExMCAoRGlzY29udGludWVkKS4KIAkgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0OgpAQCAtNDUsNiArNDcsNyBAQAogCiBjb25maWcgU0ExMTAwX0NPTExJRQogCWJvb2wgIlNoYXJwIFphdXJ1cyBTTDU1MDAiCisJIyBGSVhNRTogc2VsZWN0IENQVV9GUkVRX1NBMTF4MAogCXNlbGVjdCBTSEFSUF9MT0NPTU8KIAlzZWxlY3QgU0hBUlBfU0NPT1AKIAlzZWxlY3QgU0hBUlBfUEFSQU0KQEAgLTU0LDYgKzU3LDcgQEAKIGNvbmZpZyBTQTExMDBfSDMxMDAKIAlib29sICJDb21wYXEgaVBBUSBIMzEwMCIKIAlzZWxlY3QgSFRDX0VHUElPCisJc2VsZWN0IENQVV9GUkVRX1NBMTEwMAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gdGhlIENvbXBhcSBpUEFRCiAJICBIMzEwMCBoYW5kaGVsZCBjb21wdXRlci4gIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgbWFjaGluZSBhbmQgdGhlCkBAIC02NCw2ICs2OCw3IEBACiBjb25maWcgU0ExMTAwX0gzNjAwCiAJYm9vbCAiQ29tcGFxIGlQQVEgSDM2MDAvSDM3MDAiCiAJc2VsZWN0IEhUQ19FR1BJTworCXNlbGVjdCBDUFVfRlJFUV9TQTExMDAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIHRoZSBDb21wYXEgaVBBUQogCSAgSDM2MDAgaGFuZGhlbGQgY29tcHV0ZXIuICBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIG1hY2hpbmUgYW5kIHRoZQpAQCAtNzQsNiArNzksNyBAQAogY29uZmlnIFNBMTEwMF9CQURHRTQKIAlib29sICJIUCBMYWJzIEJhZGdlUEFEIDQiCiAJc2VsZWN0IFNBMTExMQorCXNlbGVjdCBDUFVfRlJFUV9TQTExMDAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEga2VybmVsIGZvciB0aGUgSFAgTGFib3JhdG9yaWVzCiAJICBCYWRnZVBBRCA0LgpAQCAtODEsNiArODcsNyBAQAogY29uZmlnIFNBMTEwMF9KT1JOQURBNzIwCiAJYm9vbCAiSFAgSm9ybmFkYSA3MjAiCiAJc2VsZWN0IFNBMTExMQorCSMgRklYTUU6IHNlbGVjdCBDUFVfRlJFUV9TQTExeDAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEga2VybmVsIGZvciB0aGUgSFAgSm9ybmFkYSA3MjAKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLiAgU2VlIDxodHRwOi8vd3d3LmhwLmNvbS9qb3JuYWRhL3Byb2R1Y3RzLzcyMD4KQEAgLTk4LDEyICsxMDUsMTQgQEAKIAogY29uZmlnIFNBMTEwMF9IQUNLS0lUCiAJYm9vbCAiSGFja0tpdCBDb3JlIENQVSBCb2FyZCIKKwlzZWxlY3QgQ1BVX0ZSRVFfU0ExMTAwCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBIYWNrS2l0IENvcmUgQ1BVIEJvYXJkCiAJICA8aHR0cDovL2hhY2traXQuZWxldHp0cmljay5kZT47CiAKIGNvbmZpZyBTQTExMDBfTEFSVAogCWJvb2wgIkxBUlQiCisJc2VsZWN0IENQVV9GUkVRX1NBMTEwMAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTGludXggQWR2YW5jZWQgUmFkaW8gVGVybWluYWwKIAkgIChhbHNvIGtub3duIGFzIHRoZSBMQVJUKS4gIFNlZSA8aHR0cDovL3d3dy5sYXJ0bWFrZXIubmwvPiBmb3IKQEAgLTExMSw2ICsxMjAsNyBAQAogCiBjb25maWcgU0ExMTAwX1BMRUIKIAlib29sICJQTEVCIgorCXNlbGVjdCBDUFVfRlJFUV9TQTExMDAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdmVyc2lvbiAxIG9mIHRoZSBQb3J0YWJsZSBMaW51eAogCSAgRW1iZWRkZWQgQm9hcmQgKGFsc28ga25vd24gYXMgUExFQikuCkBAIC0xMTksNiArMTI5LDcgQEAKIAogY29uZmlnIFNBMTEwMF9TSEFOTk9OCiAJYm9vbCAiU2hhbm5vbiIKKwlzZWxlY3QgQ1BVX0ZSRVFfU0ExMTAwCiAJaGVscAogCSAgVGhlIFNoYW5ub24gKGFsc28ga25vd24gYXMgYSBUdXhzY3JlZW4sIGFuZCBhbHNvIGFzIGEgSVMyNjMwKSB3YXMgYQogCSAgbGltaXRlZCBlZGl0aW9uIHdlYnBob25lIHByb2R1Y2VkIGJ5IFBoaWxpcHMuIFRoZSBTaGFubm9uIGlzIGEgU0ExMTAwCkBAIC0xMjcsNiArMTM4LDcgQEAKIAogY29uZmlnIFNBMTEwMF9TSU1QQUQKIAlib29sICJTaW1wYWQiCisJc2VsZWN0IENQVV9GUkVRX1NBMTExMAogCWhlbHAKIAkgIFRoZSBTSUVNRU5TIHdlYnBhZCBTSU1wYWQgaXMgYmFzZWQgb24gdGhlIFN0cm9uZ0FSTSAxMTEwLiBUaGVyZQogCSAgYXJlIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgQ0w0IGFuZCBTTDQuIENMNCBoYXMgMzJNQiBSQU0gYW5kIDE2TUIKQEAgLTE0NSwzICsxNTcsNCBAQAogZW5kbWVudQogCiBlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMKaW5kZXggOWZhZWExNS4uM2MxZmNkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYwpAQCAtNTgsNyArNTgsNiBAQAogCTI4MDIJLyogMjgwLjIgTUh6ICovCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVFfU0ExMTAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfRlJFUV9TQTExMTApCiAvKiByb3VuZHMgdXAoISkgICovCiB1bnNpZ25lZCBpbnQgc2ExMXgwX2ZyZXFfdG9fcHBjcih1bnNpZ25lZCBpbnQga2h6KQogewpAQCAtMTEwLDE3ICsxMDksNiBAQAogCXJldHVybiBjY2xrX2ZyZXF1ZW5jeV8xMDBraHpbUFBDUiAmIDB4Zl0gKiAxMDA7CiB9CiAKLSNlbHNlCi0vKgotICogV2Ugc3RpbGwgbmVlZCB0byBwcm92aWRlIHRoaXMgc28gYnVpbGRpbmcgd2l0aG91dCBjcHVmcmVxIHdvcmtzLgotICovCi11bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKLXsKLQlyZXR1cm4gY2Nsa19mcmVxdWVuY3lfMTAwa2h6W1BQQ1IgJiAweGZdICogMTAwOwotfQotRVhQT1JUX1NZTUJPTChjcHVmcmVxX2dldCk7Ci0jZW5kaWYKLQogLyoKICAqIFRoaXMgaXMgdGhlIFNBMTF4MCBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaGFzCiAgKiBhIHJlc29sdXRpb24gb2YgMjcxbnMsIGFuZCBhIG1heGltdW0gdmFsdWUgb2YgMzIwMjU1OTdzICgzNzAgZGF5cykuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2NvaDkwMTMxOC5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9jb2g5MDEzMTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGNmZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9jb2g5MDEzMTguaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqCisgKiBpbmNsdWRlL2xpbnV4L2NvaDkwMTMxOC5oCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIERNQSBkcml2ZXIgZm9yIENPSCA5MDEgMzE4CisgKiBBdXRob3I6IFBlciBGcmlkZW4gPHBlci5mcmlkZW5Ac3Rlcmljc3Nvbi5jb20+CisgKi8KKworI2lmbmRlZiBDT0g5MDEzMThfSAorI2RlZmluZSBDT0g5MDEzMThfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisKKyNkZWZpbmUgTUFYX0RNQV9QQUNLRVRfU0laRV9TSElGVCAxMQorI2RlZmluZSBNQVhfRE1BX1BBQ0tFVF9TSVpFICgxIDw8IE1BWF9ETUFfUEFDS0VUX1NJWkVfU0hJRlQpCisKKy8qKgorICogc3RydWN0IGNvaDkwMTMxOF9sbGkgLSBsaW5rZWQgbGlzdCBpdGVtIGZvciBETUFDCisgKiBAY29udHJvbDogY29udHJvbCBzZXR0aW5ncyBmb3IgRE1BQworICogQHNyY19hZGRyOiB0cmFuc2ZlciBzb3VyY2UgYWRkcmVzcworICogQGRzdF9hZGRyOiB0cmFuc2ZlciBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAbGlua19hZGRyOiAgcGh5c2ljYWwgYWRkcmVzcyB0byBuZXh0IGxsaQorICogQHZpcnRfbGlua19hZGRyOiB2aXJ0dWFsIGFkZHJlcyBvZiBuZXh0IGxsaSAob25seSB1c2VkIGJ5IHBvb2xfZnJlZSkKKyAqIEBwaHlfdGhpczogcGh5c2ljYWwgYWRkcmVzcyBvZiBjdXJyZW50IGxsaSAob25seSB1c2VkIGJ5IHBvb2xfZnJlZSkKKyAqLworc3RydWN0IGNvaDkwMTMxOF9sbGkgeworCXUzMiBjb250cm9sOworCWRtYV9hZGRyX3Qgc3JjX2FkZHI7CisJZG1hX2FkZHJfdCBkc3RfYWRkcjsKKwlkbWFfYWRkcl90IGxpbmtfYWRkcjsKKworCXZvaWQgKnZpcnRfbGlua19hZGRyOworCWRtYV9hZGRyX3QgcGh5X3RoaXM7Cit9OworLyoqCisgKiBzdHJ1Y3QgY29oOTAxMzE4X3BhcmFtcyAtIHBhcmFtZXRlcnMgZm9yIERNQUMgY29uZmlndXJhdGlvbgorICogQGNvbmZpZzogRE1BIGNvbmZpZyByZWdpc3RlcgorICogQGN0cmxfbGxpX2xhc3Q6IERNQSBjb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgbGFzdCBsbGkgaW4gdGhlIGxpc3QKKyAqIEBjdHJsX2xsaTogRE1BIGNvbnRyb2wgcmVnaXN0ZXIgZm9yIGFuIGxsaQorICogQGN0cmxfbGxpX2NoYWluZWQ6IERNQSBjb250cm9sIHJlZ2lzdGVyIGZvciBhIGNoYWluZWQgbGxpCisgKi8KK3N0cnVjdCBjb2g5MDEzMThfcGFyYW1zIHsKKwl1MzIgY29uZmlnOworCXUzMiBjdHJsX2xsaV9sYXN0OworCXUzMiBjdHJsX2xsaTsKKwl1MzIgY3RybF9sbGlfY2hhaW5lZDsKK307CisvKioKKyAqIHN0cnVjdCBjb2hfZG1hX2NoYW5uZWwgLSBkbWEgY2hhbm5lbCBiYXNlCisgKiBAbmFtZTogYXNjaWkgbmFtZSBvZiBkbWEgY2hhbm5lbAorICogQG51bWJlcjogY2hhbm5lbCBpZCBudW1iZXIKKyAqIEBkZXNjX25icl9tYXg6IG51bWJlciBvZiBwcmVhbGxvY2F0ZWQgZGVzY3JpcHRvcnRvcnMKKyAqIEBwcmlvcml0eV9oaWdoOiBwcmlvIG9mIGNoYW5uZWwsIDAgbG93IG90aGVyd2lzZSBoaWdoLgorICogQHBhcmFtOiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKyAqIEBkZXZfYWRkcjogcGh5c2ljYWwgYWRkcmVzcyBvZiBwZXJpcGhhbCBjb25uZWN0ZWQgdG8gY2hhbm5lbAorICovCitzdHJ1Y3QgY29oX2RtYV9jaGFubmVsIHsKKwljb25zdCBjaGFyIG5hbWVbMzJdOworCWNvbnN0IGludCBudW1iZXI7CisJY29uc3QgaW50IGRlc2NfbmJyX21heDsKKwljb25zdCBpbnQgcHJpb3JpdHlfaGlnaDsKKwljb25zdCBzdHJ1Y3QgY29oOTAxMzE4X3BhcmFtcyBwYXJhbTsKKwljb25zdCBkbWFfYWRkcl90IGRldl9hZGRyOworfTsKKworLyoqCisgKiBkbWFfYWNjZXNzX21lbW9yeV9zdGF0ZV90IC0gcmVnaXN0ZXIgZG1hIGZvciBtZW1vcnkgYWNjZXNzCisgKgorICogQGRldjogVGhlIGRtYSBkZXZpY2UKKyAqIEBhY3RpdmU6ICAxIG1lYW5zIGRtYSBpbnRlbmRzIHRvIGFjY2VzcyBtZW1vcnkKKyAqICAgICAgICAgICAwIG1lYW5zIGRtYSB3b250IGFjY2VzcyBtZW1vcnkKKyAqLwordHlwZWRlZiB2b2lkICgqZG1hX2FjY2Vzc19tZW1vcnlfc3RhdGVfdCkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIGJvb2wgYWN0aXZlKTsKKworLyoqCisgKiBzdHJ1Y3QgcG93ZXJzYXZlIC0gRE1BIHBvd2VyIHNhdmUgc3RydWN0dXJlCisgKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIGRhdGEgaW4gdGhpcyBzdHJ1Y3QKKyAqIEBzdGFydGVkX2NoYW5uZWxzOiBiaXQgbWFzayBpbmRpY2F0aW5nIGFjdGl2ZSBkbWEgY2hhbm5lbHMKKyAqLworc3RydWN0IHBvd2Vyc2F2ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXU2NCBzdGFydGVkX2NoYW5uZWxzOworfTsKKy8qKgorICogc3RydWN0IGNvaDkwMTMxOF9wbGF0Zm9ybSAtIHBsYXRmb3JtIGFyY2ggc3RydWN0dXJlCisgKiBAY2hhbnNfc2xhdmU6IHNwZWNpZnlpbmcgZG1hIHNsYXZlIGNoYW5uZWxzCisgKiBAY2hhbnNfbWVtY3B5OiBzcGVjaWZ5aW5nIGRtYSBtZW1jcHkgY2hhbm5lbHMKKyAqIEBhY2Nlc3NfbWVtb3J5X3N0YXRlOiByZXF1ZXN0aW5nIERNQSBtZW1lb3J5IGFjY2VzcyAob24gLyBvZmYpCisgKiBAY2hhbl9jb25mOiBkbWEgY2hhbm5lbCBjb25maWd1cmF0aW9ucworICogQG1heF9jaGFubmVsczogbWF4IG51bWJlciBvZiBkbWEgY2hhbmVubHMKKyAqLworc3RydWN0IGNvaDkwMTMxOF9wbGF0Zm9ybSB7CisJY29uc3QgaW50ICpjaGFuc19zbGF2ZTsKKwljb25zdCBpbnQgKmNoYW5zX21lbWNweTsKKwljb25zdCBkbWFfYWNjZXNzX21lbW9yeV9zdGF0ZV90IGFjY2Vzc19tZW1vcnlfc3RhdGU7CisJY29uc3Qgc3RydWN0IGNvaF9kbWFfY2hhbm5lbCAqY2hhbl9jb25mOworCWNvbnN0IGludCBtYXhfY2hhbm5lbHM7Cit9OworCisvKioKKyAqIGNvaDkwMTMxOF9nZXRfYnl0ZXNfbGVmdCgpIC0gR2V0IG51bWJlciBvZiBieXRlcyBsZWZ0IG9uIGEgY3VycmVudCB0cmFuc2ZlcgorICogQGNoYW46IGRtYSBjaGFubmVsIGhhbmRsZQorICogcmV0dXJuIG51bWJlciBvZiBieXRlcyBsZWZ0LCBvciBuZWdhdGl2ZSBvbiBlcnJvcgorICovCit1MzIgY29oOTAxMzE4X2dldF9ieXRlc19sZWZ0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKKy8qKgorICogY29oOTAxMzE4X3N0b3AoKSAtIFN0b3BzIGRtYSB0cmFuc2ZlcgorICogQGNoYW46IGRtYSBjaGFubmVsIGhhbmRsZQorICogcmV0dXJuIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUKKyAqLwordm9pZCBjb2g5MDEzMThfc3RvcChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCisvKioKKyAqIGNvaDkwMTMxOF9jb250aW51ZSgpIC0gUmVzdW1lcyBhIHN0b3BwZWQgZG1hIHRyYW5zZmVyCisgKiBAY2hhbjogZG1hIGNoYW5uZWwgaGFuZGxlCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZQorICovCit2b2lkIGNvaDkwMTMxOF9jb250aW51ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCisvKioKKyAqIGNvaDkwMTMxOF9maWx0ZXJfaWQoKSAtIERNQSBjaGFubmVsIGZpbHRlciBmdW5jdGlvbgorICogQGNoYW46IGRtYSBjaGFubmVsIGhhbmRsZQorICogQGNoYW5faWQ6IGlkIG9mIGRtYSBjaGFubmVsIHRvIGJlIGZpbHRlciBvdXQKKyAqCisgKiBJbiBkbWFfcmVxdWVzdF9jaGFubmVsKCkgaXQgc3BlY2lmaWVzIHdoYXQgY2hhbm5lbCBpZCB0byBiZSByZXF1ZXN0ZWQKKyAqLworYm9vbCBjb2g5MDEzMThfZmlsdGVyX2lkKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqY2hhbl9pZCk7CisKKy8qCisgKiBETUEgQ29udHJvbGxlciAtIHRoaXMgYWNjZXNzIHRoZSBzdGF0aWMgbWFwcGluZ3Mgb2YgdGhlIGNvaDkwMTMxOCBkbWEuCisgKgorICovCisKKyNkZWZpbmUgQ09IOTAxMzE4X01PRDMyX01BU0sJCQkJCSgweDFGKQorI2RlZmluZSBDT0g5MDEzMThfV09SRF9NQVNLCQkJCQkoMHhGRkZGRkZGRikKKy8qIElOVF9TVEFUVVMgLSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVycyAzMmJpdCAoUi8tKSAqLworI2RlZmluZSBDT0g5MDEzMThfSU5UX1NUQVRVUzEJCQkJCSgweDAwMDApCisjZGVmaW5lIENPSDkwMTMxOF9JTlRfU1RBVFVTMgkJCQkJKDB4MDAwNCkKKy8qIFRDX0lOVF9TVEFUVVMgLSBUZXJtaW5hbCBDb3VudCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVycyAzMmJpdCAoUi8tKSAqLworI2RlZmluZSBDT0g5MDEzMThfVENfSU5UX1NUQVRVUzEJCQkJKDB4MDAwOCkKKyNkZWZpbmUgQ09IOTAxMzE4X1RDX0lOVF9TVEFUVVMyCQkJCSgweDAwMEMpCisvKiBUQ19JTlRfQ0xFQVIgLSBUZXJtaW5hbCBDb3VudCBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXJzIDMyYml0ICgtL1cpICovCisjZGVmaW5lIENPSDkwMTMxOF9UQ19JTlRfQ0xFQVIxCQkJCQkoMHgwMDEwKQorI2RlZmluZSBDT0g5MDEzMThfVENfSU5UX0NMRUFSMgkJCQkJKDB4MDAxNCkKKy8qIFJBV19UQ19JTlRfU1RBVFVTIC0gUmF3IFRlcm0gQ291bnQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcnMgMzJiaXQgKFIvLSkgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X1JBV19UQ19JTlRfU1RBVFVTMQkJCQkoMHgwMDE4KQorI2RlZmluZSBDT0g5MDEzMThfUkFXX1RDX0lOVF9TVEFUVVMyCQkJCSgweDAwMUMpCisvKiBCRV9JTlRfU1RBVFVTIC0gQnVzIEVycm9yIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXJzIDMyYml0IChSLy0pICovCisjZGVmaW5lIENPSDkwMTMxOF9CRV9JTlRfU1RBVFVTMQkJCQkoMHgwMDIwKQorI2RlZmluZSBDT0g5MDEzMThfQkVfSU5UX1NUQVRVUzIJCQkJKDB4MDAyNCkKKy8qIEJFX0lOVF9DTEVBUiAtIEJ1cyBFcnJvciBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXJzIDMyYml0ICgtL1cpICovCisjZGVmaW5lIENPSDkwMTMxOF9CRV9JTlRfQ0xFQVIxCQkJCQkoMHgwMDI4KQorI2RlZmluZSBDT0g5MDEzMThfQkVfSU5UX0NMRUFSMgkJCQkJKDB4MDAyQykKKy8qIFJBV19CRV9JTlRfU1RBVFVTIC0gUmF3IFRlcm0gQ291bnQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcnMgMzJiaXQgKFIvLSkgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X1JBV19CRV9JTlRfU1RBVFVTMQkJCQkoMHgwMDMwKQorI2RlZmluZSBDT0g5MDEzMThfUkFXX0JFX0lOVF9TVEFUVVMyCQkJCSgweDAwMzQpCisKKy8qCisgKiBDWF9DRkcgLSBDaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIDMyYml0IChSL1cpCisgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NGRwkJCQkJKDB4MDEwMCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NGR19TUEFDSU5HCQkJCSgweDA0KQorLyogQ2hhbm5lbCBlbmFibGUgYWN0aXZhdGVzIHRoYSBkbWEgam9iICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DRkdfQ0hfRU5BQkxFCQkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUJCQkJKDB4MDAwMDAwMDApCisvKiBSZXF1ZXN0IE1vZGUgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NGR19STV9NQVNLCQkJCSgweDAwMDAwMDA2KQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ0ZHX1JNX01FTU9SWV9UT19NRU1PUlkJCQkoMHgwIDw8IDEpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DRkdfUk1fUFJJTUFSWV9UT19NRU1PUlkJCQkoMHgxIDw8IDEpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DRkdfUk1fTUVNT1JZX1RPX1BSSU1BUlkJCQkoMHgxIDw8IDEpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DRkdfUk1fUFJJTUFSWV9UT19TRUNPTkRBUlkJCSgweDMgPDwgMSkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NGR19STV9TRUNPTkRBUllfVE9fUFJJTUFSWQkJKDB4MyA8PCAxKQorLyogTGlua2VkIGNoYW5uZWwgcmVxdWVzdCBmaWVsZC4gUk0gbXVzdCA9PSAxMSAqLworI2RlZmluZSBDT0g5MDEzMThfQ1hfQ0ZHX0xDUkZfU0hJRlQJCQkJMworI2RlZmluZSBDT0g5MDEzMThfQ1hfQ0ZHX0xDUkZfTUFTSwkJCQkoMHgwMDAwMDFGOCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRQkJCQkoMHgwMDAwMDAwMCkKKy8qIFRlcm1pbmFsIENvdW50ZXIgSW50ZXJydXB0IFJlcXVlc3QgTWFzayAqLworI2RlZmluZSBDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUJCQkJKDB4MDAwMDAyMDApCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0RJU0FCTEUJCQkJKDB4MDAwMDAwMDApCisvKiBCdXMgRXJyb3IgaW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFCQkJCSgweDAwMDAwNDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9ESVNBQkxFCQkJCSgweDAwMDAwMDAwKQorCisvKgorICogQ1hfU1RBVCAtIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVycyAzMmJpdCAoUi8tKQorICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9TVEFUCQkJCQkoMHgwMjAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfU1RBVF9TUEFDSU5HCQkJCSgweDA0KQorI2RlZmluZSBDT0g5MDEzMThfQ1hfU1RBVF9SQkVfSVJRX0lORAkJCQkoMHgwMDAwMDAwOCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX1NUQVRfUlRDX0lSUV9JTkQJCQkJKDB4MDAwMDAwMDQpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9TVEFUX0FDVElWRQkJCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX1NUQVRfRU5BQkxFRAkJCQkoMHgwMDAwMDAwMSkKKworLyoKKyAqIENYX0NUUkwgLSBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXJzIDMyYml0IChSL1cpCisgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkwJCQkJCSgweDA0MDApCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX1NQQUNJTkcJCQkJKDB4MTApCisvKiBUcmFuc2ZlciBDb3VudCBFbmFibGUgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFCQkJCSgweDAwMDAxMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9UQ19ESVNBQkxFCQkJCSgweDAwMDAwMDAwKQorLyogVHJhbnNmZXIgQ291bnQgVmFsdWUgMCAtIDQwOTUgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfVENfVkFMVUVfTUFTSwkJCQkoMHgwMDAwMEZGRikKKy8qIEJ1cnN0IGNvdW50ICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UX01BU0sJCQkoMHgwMDAwRTAwMCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfNjRfQllURVMJCQkoMHg3IDw8IDEzKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF80OF9CWVRFUwkJCSgweDYgPDwgMTMpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTCQkJKDB4NSA8PCAxMykKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMJCQkoMHg0IDw8IDEzKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF84X0JZVEVTCQkJKDB4MyA8PCAxMykKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfNF9CWVRFUwkJCSgweDIgPDwgMTMpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzJfQllURVMJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xX0JZVEUJCQkoMHgwIDw8IDEzKQorLyogU291cmNlIGJ1cyBzaXplICAqLworI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfTUFTSwkJCSgweDAwMDMwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUwkJCSgweDIgPDwgMTYpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8xNl9CSVRTCQkJKDB4MSA8PCAxNikKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzhfQklUUwkJCSgweDAgPDwgMTYpCisvKiBTb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRQkJCSgweDAwMDQwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRQkJCSgweDAwMDAwMDAwKQorLyogRGVzdGluYXRpb24gQnVzIFNpemUgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFX01BU0sJCQkoMHgwMDE4MDAwMCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMJCQkoMHgyIDw8IDE5KQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMTZfQklUUwkJCSgweDEgPDwgMTkpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV84X0JJVFMJCQkoMHgwIDw8IDE5KQorLyogRGVzdGluYXRpb24gYWRkcmVzcyBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRQkJCSgweDAwMjAwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRQkJCSgweDAwMDAwMDAwKQorLyogTWFzdGVyIE1vZGUgKE1hc3RlcjIgaXMgb25seSBjb25uZWN0ZWQgdG8gTVNMKSAqLworI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NQVNLCQkJKDB4MDBDMDAwMDApCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcJCQkoMHgzIDw8IDIyKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXCQkJKDB4MiA8PCAyMikKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSVwkJCSgweDEgPDwgMjIpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcJCQkoMHgwIDw8IDIyKQorLyogVGVybWluYWwgQ291bnQgZmxhZyB0byBQRVIgZW5hYmxlICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUJCQkJKDB4MDEwMDAwMDApCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFCQkJCSgweDAwMDAwMDAwKQorLyogVGVybWluYWwgQ291bnQgZmxhZ3MgdG8gQ1BVIGVuYWJsZSAqLworI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFCQkJCSgweDAyMDAwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRQkJCSgweDAwMDAwMDAwKQorLyogSGFuZCBzaGFrZSB0byBwZXJpcGhlcmFsICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUJCQkJKDB4MDQwMDAwMDApCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0hTUF9ESVNBQkxFCQkJCSgweDAwMDAwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRU5BQkxFCQkJCSgweDA4MDAwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRQkJCQkoMHgwMDAwMDAwMCkKKy8qIERNQSBtb2RlICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0RETUFfTUFTSwkJCQkoMHgzMDAwMDAwMCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kJCQkJKDB4MCA8PCAyOCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMQkJCSgweDEgPDwgMjgpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTIJCQkoMHgyIDw8IDI4KQorLyogUHJpbWFyeSBSZXF1ZXN0IERhdGEgRGVzdGluYXRpb24gKi8KKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9NQVNLCQkJCSgweDQwMDAwMDAwKQorI2RlZmluZSBDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QJCQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UJCQkJKDB4MCA8PCAzMCkKKworLyoKKyAqIENYX1NSQ19BRERSIC0gQ2hhbm5lbCBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlcnMgMzJiaXQgKFIvVykKKyAqLworI2RlZmluZSBDT0g5MDEzMThfQ1hfU1JDX0FERFIJCQkJCSgweDA0MDQpCisjZGVmaW5lIENPSDkwMTMxOF9DWF9TUkNfQUREUl9TUEFDSU5HCQkJCSgweDEwKQorCisvKgorICogQ1hfRFNUX0FERFIgLSBDaGFubmVsIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXJzIDMyYml0IFIvVworICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9EU1RfQUREUgkJCQkJKDB4MDQwOCkKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0RTVF9BRERSX1NQQUNJTkcJCQkJKDB4MTApCisKKy8qCisgKiBDWF9MTktfQUREUiAtIENoYW5uZWwgTGluayBBZGRyZXNzIFJlZ2lzdGVycyAzMmJpdCAoUi9XKQorICovCisjZGVmaW5lIENPSDkwMTMxOF9DWF9MTktfQUREUgkJCQkJKDB4MDQwQykKKyNkZWZpbmUgQ09IOTAxMzE4X0NYX0xOS19BRERSX1NQQUNJTkcJCQkJKDB4MTApCisjZGVmaW5lIENPSDkwMTMxOF9DWF9MTktfTElOS19JTU1FRElBVEUJCQkJKDB4MDAwMDAwMDEpCisjZW5kaWYgLyogQ09IOTAxMzE4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbnVjOTAwX3NwaS5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9udWM5MDBfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ5NDgxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbnVjOTAwX3NwaS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL251YzkwMF9zcGkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9TUElfSAorI2RlZmluZSBfX0FTTV9BUkNIX1NQSV9ICisKK2V4dGVybiB2b2lkIG1mcF9zZXRfZ3JvdXBnKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK3N0cnVjdCBudWM5MDBfc3BpX2luZm8geworCXVuc2lnbmVkIGludCBudW1fY3M7CisJdW5zaWduZWQgaW50IGxzYjsKKwl1bnNpZ25lZCBpbnQgdHhuZWc7CisJdW5zaWduZWQgaW50IHJ4bmVnOworCXVuc2lnbmVkIGludCBkaXZpZGVyOworCXVuc2lnbmVkIGludCBzbGVlcDsKKwl1bnNpZ25lZCBpbnQgdHhudW07CisJdW5zaWduZWQgaW50IHR4Yml0bGVuOworCWludCBidXNfbnVtOworfTsKKworc3RydWN0IG51YzkwMF9zcGlfY2hpcCB7CisJdW5zaWduZWQgY2hhciBiaXRzX3Blcl93b3JkOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMgYi9hcmNoL2FybS9tbS9jYWNoZS1mYS5TCmluZGV4IGI2M2E4ZjcuLmE4OTQ0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwpAQCAtMTI3LDE1ICsxMjcsMTYgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjawogICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCiAgKgotICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCiAgKi8KLUVOVFJZKGZhX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKGZhX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGxpbmUKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMjEzLDcgKzIxNCw3IEBACiAJLmxvbmcJZmFfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWZhX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlmYV9kbWFfaW52X3JhbmdlCiAJLmxvbmcJZmFfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJZmFfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKaW5kZXggNzQ3ZjlhOS4uY2I4ZmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwpAQCAtMjgsNjkgKzI4LDEyMCBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqbDJ4MF9iYXNlOwogc3RhdGljIERFRklORV9TUElOTE9DSyhsMngwX2xvY2spOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY193cml0ZWwodW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIGxvbmcgcmVnLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY29tcGxldGVfbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV93YWl0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQl3cml0ZWwodmFsLCBsMngwX2Jhc2UgKyByZWcpOwogCS8qIHdhaXQgZm9yIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KLQl3aGlsZSAocmVhZGwobDJ4MF9iYXNlICsgcmVnKSAmIGNvbXBsZXRlX21hc2spCisJd2hpbGUgKHJlYWRsKHJlZykgJiBtYXNrKQogCQk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCiB7Ci0Jc3luY193cml0ZWwoMCwgTDJYMF9DQUNIRV9TWU5DLCAxKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJd3JpdGVsKDAsIGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMpOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0FDSEVfU1lOQywgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsMngwX2ludl9hbGwodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJLyogaW52YWxpZGF0ZSBhbGwgd2F5cyAqLwotCXN5bmNfd3JpdGVsKDB4ZmYsIEwyWDBfSU5WX1dBWSwgMHhmZik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmwyeDBfbG9jaywgZmxhZ3MpOworCXdyaXRlbCgweGZmLCBsMngwX2Jhc2UgKyBMMlgwX0lOVl9XQVkpOworCWNhY2hlX3dhaXQobDJ4MF9iYXNlICsgTDJYMF9JTlZfV0FZLCAweGZmKTsKIAljYWNoZV9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGwyeDBfaW52X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKIAlpZiAoc3RhcnQgJiAoQ0FDSEVfTElORV9TSVpFIC0gMSkpIHsKIAkJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKLQkJc3luY193cml0ZWwoc3RhcnQsIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOworCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKKwkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSk7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKIAlpZiAoZW5kICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCQlzeW5jX3dyaXRlbChlbmQsIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOworCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKKwkJd3JpdGVsKGVuZCwgYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEpOwogCX0KIAotCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IENBQ0hFX0xJTkVfU0laRSkKLQkJc3luY193cml0ZWwoYWRkciwgTDJYMF9JTlZfTElORV9QQSwgMSk7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOworCisJCXdoaWxlIChzdGFydCA8IGJsa19lbmQpIHsKKwkJCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOworCQkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7CisJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CisJCX0KKworCQlpZiAoYmxrX2VuZCA8IGVuZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9JTlZfTElORV9QQSwgMSk7CiAJY2FjaGVfc3luYygpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyeDBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBsMngwX2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKIAlzdGFydCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IENBQ0hFX0xJTkVfU0laRSkKLQkJc3luY193cml0ZWwoYWRkciwgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CisKKwkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgeworCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKKwkJCXdyaXRlbChzdGFydCwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CisJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CisJCX0KKworCQlpZiAoYmxrX2VuZCA8IGVuZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKIAljYWNoZV9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGwyeDBfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwyeDBfbG9jaywgZmxhZ3MpOwogCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gQ0FDSEVfTElORV9TSVpFKQotCQlzeW5jX3dyaXRlbChhZGRyLCBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CisKKwkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgeworCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7CisJCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKKwkJfQorCisJCWlmIChibGtfZW5kIDwgZW5kKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKKwkJfQorCX0KKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKIAljYWNoZV9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgX19pbml0IGwyeDBfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIF9fdTMyIGF1eF92YWwsIF9fdTMyIGF1eF9tYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMKaW5kZXggOGE0YWJlYi4uMmE0ODI3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12My5TCkBAIC03MiwxNCArNzIsMTUgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKnBhZ2UsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkodjNfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKHYzX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKQEAgLTEyOSw3ICsxMzAsNyBAQAogCS5sb25nCXYzX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwl2M19jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjNfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXYzX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2M19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJdjNfZG1hX2ludl9yYW5nZQogCS5sb25nCXYzX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXYzX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKaW5kZXggMzY2ODYxMS4uNWM3ZGEzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NC5TCkBAIC04MiwxNCArODIsMTUgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkodjRfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKHY0X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKQEAgLTE0MSw3ICsxNDIsNyBAQAogCS5sb25nCXY0X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwl2NF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjRfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXY0X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2NF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJdjRfZG1hX2ludl9yYW5nZQogCS5sb25nCXY0X2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXY0X2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDJlYmMxYjMuLjNkYmVkZjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xMTQsMTUgKzExNCwxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWSh2NHdiX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKHY0d2JfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogCS8qIGZhbGwgdGhyb3VnaCAqLwogCiAvKgpAQCAtMjI0LDcgKzIyNSw3IEBACiAJLmxvbmcJdjR3Yl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJdjR3Yl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJdjR3Yl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwl2NHdiX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCmluZGV4IGM1NGZhMmMuLmIzYjc0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKQEAgLTExNywxNyArMTE3LDE4IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKHY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKHY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJcjIsICMwCiAJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCWFkZAlyMSwgcjAsIHIxCiAJLyogZmFsbHRocm91Z2ggKi8KIAogLyoKQEAgLTE4MCw3ICsxODEsNyBAQAogCS5sb25nCXY0d3RfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCXY0d3RfZG1hX2ludl9yYW5nZQogCS5sb25nCXY0d3RfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IDI5NWUyNWQuLjRiYTBhMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtMTU5LDE1ICsxNTksMTYgQEAKIEVORFBST0ModjZfY29oZXJlbnRfa2Vybl9yYW5nZSkKIAogLyoKLSAqCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uoa2FkZHIpCisgKgl2Nl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSB0aGF0IHRoZSBkYXRhIGhlbGQgaW4gdGhlIHBhZ2Uga2FkZHIgaXMgd3JpdHRlbiBiYWNrCiAgKgl0byB0aGUgcGFnZSBpbiBxdWVzdGlvbi4KICAqCi0gKgktIGthZGRyICAgLSBrZXJuZWwgYWRkcmVzcyAoZ3VhcmFudGVlZCB0byBiZSBwYWdlIGFsaWduZWQpCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkodjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkodjZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToKICNpZmRlZiBIQVJWQVJEX0NBQ0hFCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIEQgbGluZQpAQCAtMjcxLDcgKzI3Miw3IEBACiAJLmxvbmcJdjZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXY2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2Nl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJdjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl2Nl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJdjZfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJdjZfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCBlMWJkOTc1Li45MDczZGI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTE4NiwxNiArMTg2LDE3IEBACiBFTkRQUk9DKHY3X2NvaGVyZW50X3VzZXJfcmFuZ2UpCiAKIC8qCi0gKgl2N19mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQorICoJdjdfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjawogICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCiAgKgotICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKHY3X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCitFTlRSWSh2N19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKKwlhZGQJcjEsIHIwLCByMQogMToKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBsaW5lIC8gdW5pZmllZCBsaW5lCiAJYWRkCXIwLCByMCwgcjIKQEAgLTIwMyw3ICsyMDQsNyBAQAogCWJsbwkxYgogCWRzYgogCW1vdglwYywgbHIKLUVORFBST0ModjdfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VORFBST0ModjdfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAogLyoKICAqCXY3X2RtYV9pbnZfcmFuZ2Uoc3RhcnQsZW5kKQpAQCAtMjc5LDcgKzI4MCw3IEBACiAJLmxvbmcJdjdfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXY3X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2N19jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJdjdfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY3X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl2N19kbWFfaW52X3JhbmdlCiAJLmxvbmcJdjdfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJdjdfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCAzMjk1OTRlLi42ZjNhNGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCSAqLwogCWlmIChhZGRyKQogI2VuZGlmCi0JCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZShhZGRyKTsKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIFBBR0VfU0laRSk7CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgYSBwYWdlIGNhY2hlIHBhZ2UsIGFuZCB3ZSBoYXZlIGFuIGFsaWFzaW5nIFZJUFQgY2FjaGUsCkBAIC0yNTgsNSArMjU4LDUgQEAKIAkgKiBpbiB0aGlzIG1hcHBpbmcgb2YgdGhlIHBhZ2UuICBGSVhNRTogdGhpcyBpcyBvdmVya2lsbAogCSAqIHNpbmNlIHdlIGFjdHVhbGx5IGFzayBmb3IgYSB3cml0ZS1iYWNrIGFuZCBpbnZhbGlkYXRlLgogCSAqLwotCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX2FkZHJlc3MocGFnZSkpOworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShwYWdlX2FkZHJlc3MocGFnZSksIFBBR0VfU0laRSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9oaWdobWVtLmMgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKaW5kZXggMzBmODJmYi4uMmJlMWVjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwpAQCAtNzksNyArNzksNyBAQAogCXVuc2lnbmVkIGludCBpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChrdmFkZHIgPj0gKHZvaWQgKilGSVhBRERSX1NUQVJUKSB7Ci0JCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZSgodm9pZCAqKXZhZGRyKTsKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKCh2b2lkICopdmFkZHIsIFBBR0VfU0laRSk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KIAkJQlVHX09OKHZhZGRyICE9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpKTsKIAkJc2V0X3B0ZV9leHQoVE9QX1BURSh2YWRkciksIF9fcHRlKDApLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL25vbW11LmMgYi9hcmNoL2FybS9tbS9ub21tdS5jCmluZGV4IDkwMDgxMWMuLjM3NGE4MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL25vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwpAQCAtNjEsNyArNjEsNyBAQAogCiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX2FkZHJlc3MocGFnZSkpOworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShwYWdlX2FkZHJlc3MocGFnZSksIFBBR0VfU0laRSk7CiB9CiBFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9wYWdlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCBkOWZiNGI5Li44MDEyZTI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtMjMxLDE3ICsyMzEsMTggQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gcGFnZQktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkoYXJtMTAyMF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorRU5UUlkoYXJtMTAyMF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMzM1LDcgKzMzNiw3IEBACiAJLmxvbmcJYXJtMTAyMF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtMTAyMF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMF9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJYXJtMTAyMF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtMTAyMF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtMTAyMF9kbWFfaW52X3JhbmdlCiAJLmxvbmcJYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm0xMDIwX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IDc0NTNiNzUuLjQxZmUyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTIyNSwxNyArMjI1LDE4IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIHBhZ2UJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTEwMjBlX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCitFTlRSWShhcm0xMDIwZV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0zMjEsNyArMzIyLDcgQEAKIAkubG9uZwlhcm0xMDIwZV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtMTAyMGVfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTEwMjBlX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm0xMDIwZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtMTAyMGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCWFybTEwMjBlX2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm0xMDIwZV9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggOGViNzJkNy4uMjBhNWIxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTIxNCwxNyArMjE0LDE4IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIHBhZ2UJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTEwMjJfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKGFybTEwMjJfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMzEwLDcgKzMxMSw3IEBACiAJLmxvbmcJYXJtMTAyMl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJYXJtMTAyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtMTAyMl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtMTAyMl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm0xMDIyX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCAzYjU5ZjBkLi45NmFlZGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtMjA4LDE3ICsyMDgsMTggQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gcGFnZQktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkoYXJtMTAyNl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorRU5UUlkoYXJtMTAyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0zMDQsNyArMzA1LDcgQEAKIAkubG9uZwlhcm0xMDI2X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwlhcm0xMDI2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm0xMDI2X2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm0xMDI2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlhcm0xMDI2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm0xMDI2X2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCWFybTEwMjZfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCAyYjdjMTk3Li40NzE2NjllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTIwNywxNSArMjA3LDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTkyMF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShhcm05MjBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTI5Myw3ICsyOTQsNyBAQAogCS5sb25nCWFybTkyMF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtOTIwX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjBfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTkyMF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTIwX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm05MjBfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTkyMF9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm05MjBfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCAwNmExYWE0Li5lZTExMWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTIwOSwxNSArMjA5LDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShhcm05MjJfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTI5NSw3ICsyOTYsNyBAQAogCS5sb25nCWFybTkyMl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtOTIyX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjJfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTIyX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm05MjJfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTkyMl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm05MjJfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCBjYjUzNDM1Li44ZGViNWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTI1MSwxNSArMjUxLDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTkyNV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShhcm05MjVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTM0Niw3ICszNDcsNyBAQAogCS5sb25nCWFybTkyNV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtOTI1X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjVfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTkyNV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTI1X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm05MjVfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTkyNV9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm05MjVfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCAxYzQ4NDg3Li42NGRiNmUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTIxNCwxNSArMjE0LDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTkyNl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShhcm05MjZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTMwOSw3ICszMTAsNyBAQAogCS5sb25nCWFybTkyNl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtOTI2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjZfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTkyNl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTI2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm05MjZfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTkyNl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm05MjZfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwppbmRleCA1YjBmODQ2Li44MTk2YjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKQEAgLTE0MSwxNCArMTQxLDE1IEBACiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm05NDBfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKGFybTk0MF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCW1vdglpcCwgIzAKIAltb3YJcjEsICMoQ0FDSEVfRFNFR01FTlRTIC0gMSkgPDwgNAlAIDQgc2VnbWVudHMKIDE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKQEAgLTIzOCw3ICsyMzksNyBAQAogCS5sb25nCWFybTk0MF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtOTQwX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05NDBfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTk0MF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTQwX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm05NDBfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTk0MF9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm05NDBfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwppbmRleCA0MGMwNDQ5Li45YTk1MTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKQEAgLTE4MywxNiArMTgzLDE3IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKiAoc2FtZSBhcyBhcm05MjYpCiAgKi8KLUVOVFJZKGFybTk0Nl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShhcm05NDZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTI4MCw3ICsyODEsNyBAQAogCS5sb25nCWFybTk0Nl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtOTQ2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05NDZfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTk0Nl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtOTQ2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm05NDZfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTk0Nl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm05NDZfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKaW5kZXggZDBkNzc5NS4uZGJjMzkzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwpAQCAtMjI2LDE2ICsyMjYsMTcgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShmZXJvY2Vvbl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMjQ2LDcgKzI0Nyw3IEBACiAJbW92CXBjLCBscgogCiAJLmFsaWduCTUKLUVOVFJZKGZlcm9jZW9uX3JhbmdlX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCitFTlRSWShmZXJvY2Vvbl9yYW5nZV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCW1ycwlyMiwgY3BzcgogCWFkZAlyMSwgcjAsICNQQUdFX1NaIC0gQ0FDSEVfRExJTkVTSVpFCUAgdG9wIGFkZHIgaXMgaW5jbHVzaXZlCiAJb3JyCXIzLCByMiwgI1BTUl9JX0JJVApAQCAtMzcyLDcgKzM3Myw3IEBACiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJZmVyb2Nlb25fZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWZlcm9jZW9uX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlmZXJvY2Vvbl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fZG1hX2ZsdXNoX3JhbmdlCkBAIC0zODMsNyArMzg0LDcgQEAKIAkubG9uZwlmZXJvY2Vvbl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlmZXJvY2Vvbl9yYW5nZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCWZlcm9jZW9uX3JhbmdlX2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCmluZGV4IDUyYjVmZDcuLjk2NzRkMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwpAQCAtMTg2LDE1ICsxODYsMTYgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkobW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKG1vaGF3a19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMjczLDcgKzI3NCw3IEBACiAJLmxvbmcJbW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwltb2hhd2tfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCW1vaGF3a19jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJbW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwltb2hhd2tfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCW1vaGF3a19kbWFfaW52X3JhbmdlCiAJLmxvbmcJbW9oYXdrX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCW1vaGF3a19kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKaW5kZXggYWM1YzgwMC4uM2U2MjEwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKQEAgLTI3LDggKzI3LDcgQEAKIEVYUE9SVF9TWU1CT0woX19jcHVjX2ZsdXNoX3VzZXJfYWxsKTsKIEVYUE9SVF9TWU1CT0woX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UpOwogRVhQT1JUX1NZTUJPTChfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZSk7Ci1FWFBPUlRfU1lNQk9MKF9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGRtYWNfaW52X3JhbmdlKTsgIC8qIGJlY2F1c2Ugb2YgZmx1c2hfaW9yZW1hcF9yZWdpb24oKSAqLworRVhQT1JUX1NZTUJPTChfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEpOwogI2Vsc2UKIEVYUE9SVF9TWU1CT0woY3B1X2NhY2hlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDU0ODVjODIuLjM5NWNjOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTI1NCwxMCArMjU0LDkgQEAKIAkubG9uZwkweDU2MGY1ODEwCiAJLmxvbmcJMHhmZjBmZmZmMAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKLQkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKLQkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKLQkJUE1EX1NFQ1RfQVBfUkVBRAorCQlQTURfU0VDVF9BUF9SRUFEIHwgXAorCQlQTURfRkxBR1MKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCiAJCVBNRF9TRUNUX1hOIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggZmFiMTM0ZS4uOTY0NTZmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTIyNiwxNSArMjI2LDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUuCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWSh4c2MzX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKHhzYzNfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4vaW52YWxpZGF0ZSBMMSBEIGxpbmUKIAlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTMwOSw3ICszMTAsNyBAQAogCS5sb25nCXhzYzNfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXhzYzNfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXhzYzNfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXhzYzNfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXhzYzNfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCXhzYzNfZG1hX2ludl9yYW5nZQogCS5sb25nCXhzYzNfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJeHNjM19kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IGYwNTZjMjguLjkzZGY0NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMjg0LDE1ICsyODQsMTYgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkoeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKHhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQpAQCAtMzY4LDcgKzM2OSw3IEBACiAJLmxvbmcJeHNjYWxlX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwl4c2NhbGVfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXhzY2FsZV9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCXhzY2FsZV9kbWFfaW52X3JhbmdlCiAJLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKQEAgLTM5Miw3ICszOTMsNyBAQAogCS5sb25nCXhzY2FsZV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl4c2NhbGVfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmgKaW5kZXggMmI5NzJkZi4uNWQyZDIxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgewogCWludCB3aWR0aDsJLyogZGF0YSBidXMgd2lkdGggaW4gYnl0ZXMgKi8KLQlpbnQgaHdfZWNjOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCisJaW50IGh3X2VjYzoxOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCisJaW50IGZsYXNoX2JidDoxOyAvKiBzZXQgdG8gMSB0byB1c2UgYSBmbGFzaCBiYXNlZCBiYnQgKi8KIH07CiAjZW5kaWYgLyogX19BU01fQVJDSF9OQU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggZjM0OGRkZi4uZTJlYTA0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTI3LDYgKzI3LDcgQEAKIAlib29sICJUSSBPTUFQNCIKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCiBlbmRjaG9pY2UKIApAQCAtNDIsMjggKzQzLDYgQEAKIAlkZXBlbmRzIG9uIE9NQVBfREVCVUdfREVWSUNFUwogCWRlZmF1bHQgeSBpZiBMRURTIHx8IExFRFNfT01BUF9ERUJVRwogCi1jb25maWcgT01BUF9ERUJVR19QT1dFUkRPTUFJTgotCWJvb2wgIkVtaXQgZGVidWcgbWVzc2FnZXMgZnJvbSBwb3dlcmRvbWFpbiBsYXllciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBpbiBwb3dlcmRvbWFpbiBsYXllcgotCSAgZGVidWdnaW5nIG1lc3NhZ2VzIGZvciBPTUFQMi8zLiAgIFRoZXNlIG1lc3NhZ2VzIGNhbgotCSAgcHJvdmlkZSBtb3JlIGRldGFpbCBhcyB0byB3aHkgc29tZSBwb3dlcmRvbWFpbiBjYWxscwotCSAgbWF5IGJlIGZhaWxpbmcsIGFuZCB3aWxsIGFsc28gZW1pdCBhIGRlc2NyaXB0aXZlIG1lc3NhZ2UKLQkgIGZvciBldmVyeSBwb3dlcmRvbWFpbiByZWdpc3RlciB3cml0ZS4gIEhvd2V2ZXIsIHRoZQotCSAgZXh0cmEgZGV0YWlsIGNvc3RzIHNvbWUgbWVtb3J5LgotCi1jb25maWcgT01BUF9ERUJVR19DTE9DS0RPTUFJTgotCWJvb2wgIkVtaXQgZGVidWcgbWVzc2FnZXMgZnJvbSBjbG9ja2RvbWFpbiBsYXllciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBpbiBjbG9ja2RvbWFpbiBsYXllcgotCSAgZGVidWdnaW5nIG1lc3NhZ2VzIGZvciBPTUFQMi8zLiAgIFRoZXNlIG1lc3NhZ2VzIGNhbgotCSAgcHJvdmlkZSBtb3JlIGRldGFpbCBhcyB0byB3aHkgc29tZSBjbG9ja2RvbWFpbiBjYWxscwotCSAgbWF5IGJlIGZhaWxpbmcsIGFuZCB3aWxsIGFsc28gZW1pdCBhIGRlc2NyaXB0aXZlIG1lc3NhZ2UKLQkgIGZvciBldmVyeSBjbG9ja2RvbWFpbiByZWdpc3RlciB3cml0ZS4gIEhvd2V2ZXIsIHRoZQotCSAgZXh0cmEgZGV0YWlsIGNvc3RzIHNvbWUgbWVtb3J5LgotCiBjb25maWcgT01BUF9SRVNFVF9DTE9DS1MKIAlib29sICJSZXNldCB1bnVzZWQgY2xvY2tzIGR1cmluZyBib290IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQCkBAIC03OCwyOCArNTcsMjggQEAKIAogY29uZmlnIE9NQVBfTVVYCiAJYm9vbCAiT01BUCBtdWx0aXBsZXhpbmcgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUAogCWRlZmF1bHQgeQotICAgICAgICBoZWxwCi0gICAgICAgICAgUGluIG11bHRpcGxleGluZyBzdXBwb3J0IGZvciBPTUFQIGJvYXJkcy4gSWYgeW91ciBib290bG9hZGVyCi0gICAgICAgICAgc2V0cyB0aGUgbXVsdGlwbGV4aW5nIGNvcnJlY3RseSwgc2F5IE4uIE90aGVyd2lzZSwgb3IgaWYgdW5zdXJlLAotICAgICAgICAgIHNheSBZLgorCWhlbHAKKwkgIFBpbiBtdWx0aXBsZXhpbmcgc3VwcG9ydCBmb3IgT01BUCBib2FyZHMuIElmIHlvdXIgYm9vdGxvYWRlcgorCSAgc2V0cyB0aGUgbXVsdGlwbGV4aW5nIGNvcnJlY3RseSwgc2F5IE4uIE90aGVyd2lzZSwgb3IgaWYgdW5zdXJlLAorCSAgc2F5IFkuCiAKIGNvbmZpZyBPTUFQX01VWF9ERUJVRwogCWJvb2wgIk11bHRpcGxleGluZyBkZWJ1ZyBvdXRwdXQiCi0gICAgICAgIGRlcGVuZHMgb24gT01BUF9NVVgKLSAgICAgICAgaGVscAotICAgICAgICAgIE1ha2VzIHRoZSBtdWx0aXBsZXhpbmcgZnVuY3Rpb25zIHByaW50IG91dCBhIGxvdCBvZiBkZWJ1ZyBpbmZvLgotICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IHZhbHVlcyBvZiB0aGUKLSAgICAgICAgICBtdWx0aXBsZXhpbmcgcmVnaXN0ZXJzLgorCWRlcGVuZHMgb24gT01BUF9NVVgKKwloZWxwCisJICBNYWtlcyB0aGUgbXVsdGlwbGV4aW5nIGZ1bmN0aW9ucyBwcmludCBvdXQgYSBsb3Qgb2YgZGVidWcgaW5mby4KKwkgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IHZhbHVlcyBvZiB0aGUKKwkgIG11bHRpcGxleGluZyByZWdpc3RlcnMuCiAKIGNvbmZpZyBPTUFQX01VWF9XQVJOSU5HUwogCWJvb2wgIldhcm4gYWJvdXQgcGlucyB0aGUgYm9vdGxvYWRlciBkaWRuJ3Qgc2V0IHVwIgotICAgICAgICBkZXBlbmRzIG9uIE9NQVBfTVVYCi0gICAgICAgIGRlZmF1bHQgeQotICAgICAgICBoZWxwCisJZGVwZW5kcyBvbiBPTUFQX01VWAorCWRlZmF1bHQgeQorCWhlbHAKIAkgIENob29zZSBZIGhlcmUgdG8gd2FybiB3aGVuZXZlciBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMgbmVlZHMKLQkgIHRvIGNoYW5nZSB0aGUgcGluIG11bHRpcGxleGluZyBzZXR1cC4gIFdoZW4gdGhlcmUgYXJlIG5vIHdhcm5pbmdzCisJICB0byBjaGFuZ2UgdGhlIHBpbiBtdWx0aXBsZXhpbmcgc2V0dXAuCSBXaGVuIHRoZXJlIGFyZSBubyB3YXJuaW5ncwogCSAgcHJpbnRlZCwgaXQncyBzYWZlIHRvIGRlc2VsZWN0IE9NQVBfTVVYIGZvciB5b3VyIHByb2R1Y3QuCiAKIGNvbmZpZyBPTUFQX01DQlNQCkBAIC0xMjUsNyArMTA0LDcgQEAKIAl0cmlzdGF0ZQogCiBjaG9pY2UKLSAgICAgICAgcHJvbXB0ICJTeXN0ZW0gdGltZXIiCisJcHJvbXB0ICJTeXN0ZW0gdGltZXIiCiAJZGVmYXVsdCBPTUFQX01QVV9USU1FUgogCiBjb25maWcgT01BUF9NUFVfVElNRVIKQEAgLTE0OCwxMSArMTI3LDExIEBACiBlbmRjaG9pY2UKIAogY29uZmlnIE9NQVBfMzJLX1RJTUVSX0haCi0gICAgICAgaW50ICJLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IGZvciAzMktIeiB0aW1lciIKLSAgICAgICByYW5nZSAzMiAxMDI0Ci0gICAgICAgZGVwZW5kcyBvbiBPTUFQXzMyS19USU1FUgotICAgICAgIGRlZmF1bHQgIjEyOCIKLSAgICAgICBoZWxwCisJaW50ICJLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IGZvciAzMktIeiB0aW1lciIKKwlyYW5nZSAzMiAxMDI0CisJZGVwZW5kcyBvbiBPTUFQXzMyS19USU1FUgorCWRlZmF1bHQgIjEyOCIKKwloZWxwCiAJICBLZXJuZWwgaW50ZXJuYWwgdGltZXIgZnJlcXVlbmN5IHNob3VsZCBiZSBhIGRpdmlzb3Igb2YgMzI3NjgsCiAJICBzdWNoIGFzIDY0IG9yIDEyOC4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCA2ODFiZmMzLi44OWNhZmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtNDAsMzYgKzQwLDEwIEBACiAgKiBjbG9jayBmcmFtZXdvcmsgaXMgbm90IHVwICwgaXQgaXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIHJld29yayBpbgogICogZXZlcnkgZHJpdmVyLiBBbHNvIGR1bW15IHByY20gcmVzZXQgZnVuY3Rpb24gaXMgYWRkZWQgKi8KIAotLyogRHVtbXkgaG9va3Mgb25seSBmb3IgT01BUDQuRm9yIHJlc3QgT01BUHMsIGNvbW1vbiBjbGtkZXYgaXMgdXNlZCAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotCi12b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQotewotfQotRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKLQotdm9pZCBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpCi17Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QpOwotCi12b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLX0KLUVYUE9SVF9TWU1CT0wob21hcF9wcmNtX2FyY2hfcmVzZXQpOwotI2VuZGlmCiBpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCS8qIE9NQVA0IGNsayBmcmFtZXdvcmsgbm90IHN1cHBvcnRlZCB5ZXQgKi8KLQkJcmV0dXJuIDA7CiAKIAlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCmluZGV4IGNjMDUwYjMuLmJmMWVhZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKQEAgLTI4MCwxNiArMjgwLDE4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIG9tYXA0X2dsb2JhbHMgPSB7CiAJLmNsYXNzCT0gT01BUDQ0M1hfQ0xBU1MsCi0JLnRhcAk9IE9NQVAyX0w0X0lPX0FERFJFU1MoMHg0ODMwYTAwMCksCisJLnRhcAk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0M1hfU0NNX0JBU0UpLAogCS5jdHJsCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzWF9DVFJMX0JBU0UpLAogCS5wcm0JPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDMwX1BSTV9CQVNFKSwKIAkuY20JPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDMwX0NNX0JBU0UpLAorCS5jbTIJPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDMwX0NNMl9CQVNFKSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzQ0M3godm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc190YXAoJm9tYXA0X2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2woJm9tYXA0X2dsb2JhbHMpOworCW9tYXAyX3NldF9nbG9iYWxzX3ByY20oJm9tYXA0X2dsb2JhbHMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctZGV2aWNlcy5jCmluZGV4IDA5YzExMDcuLjkyM2M5NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWRldmljZXMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0yNCw2ICsyNSwxMiBAQAogICogcGxhdGZvcm1zIGluY2x1ZGUgSDIsIEgzLCBINCwgYW5kIFBlcnNldXMyLgogICovCiAKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCkBAIC0zNiw2ICs0Myw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21jOTF4X2luZm8sCisJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYwppbmRleCA2Yzc2OGI3Li41M2ZjZWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZnBnYV9kZXZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGZwZ2FfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZF9ub2lycSA9IGZwZ2Ffc3VzcGVuZF9ub2lycSwKIAkucmVzdW1lX25vaXJxID0gZnBnYV9yZXN1bWVfbm9pcnEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKaW5kZXggZjg2NjE3OC4uMzBiNWRiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0yNDIsNiArMjQyLDM5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19IV19SQU5ET01fT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSFdfUkFORE9NX09NQVBfTU9EVUxFKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNkZWZpbmUJT01BUF9STkdfQkFTRQkJMHg0ODBBMDAwMAorI2Vsc2UKKyNkZWZpbmUJT01BUF9STkdfQkFTRQkJMHhmZmZlNTAwMAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugcm5nX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVBfUk5HX0JBU0UsCisJCS5lbmQJCT0gT01BUF9STkdfQkFTRSArIDB4NGYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9ybmdfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwX3JuZyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShybmdfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBybmdfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgb21hcF9pbml0X3JuZyh2b2lkKQoreworCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfcm5nX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ybmcodm9pZCkge30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBOdW1iZXJpbmcgZm9yIHRoZSBTUEktY2FwYWJsZSBjb250cm9sbGVycyB3aGVuIHVzZWQgZm9yIFNQSToKICAqIHNwaQkJPSAxCiAgKiB1d2lyZQk9IDIKQEAgLTMyNCwzOSArMzU3LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9CiAjZW5kaWYKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0hXX1JBTkRPTV9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19IV19SQU5ET01fT01BUF9NT0RVTEUpCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAotI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweDQ4MEEwMDAwCi0jZWxzZQotI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweGZmZmU1MDAwCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybmdfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUF9STkdfQkFTRSwKLQkJLmVuZAkJPSBPTUFQX1JOR19CQVNFICsgMHg0ZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7Ci0JLm5hbWUJICAgPSAib21hcF9ybmciLAotCS5pZAkgICAgID0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgdm9pZCBvbWFwX2luaXRfcm5nKHZvaWQpCi17Ci0JKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9ybmdfZGV2aWNlKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3JuZyh2b2lkKSB7fQotI2VuZGlmCi0KIC8qCiAgKiBUaGlzIGdldHMgY2FsbGVkIGFmdGVyIGJvYXJkLXNwZWNpZmljIElOSVRfTUFDSElORSwgYW5kIGluaXRpYWxpemVzIG1vc3QKICAqIG9uLWNoaXAgcGVyaXBoZXJhbHMgYWNjZXNzaWJsZSBvbiB0aGlzIGJvYXJkIChleGNlcHQgZm9yIGZldyBsaWtlIFVTQik6CkBAIC0zODQsOSArMzg0LDkgQEAKIAkgKi8KIAlvbWFwX2luaXRfZHNwKCk7CiAJb21hcF9pbml0X2twKCk7CisJb21hcF9pbml0X3JuZygpOwogCW9tYXBfaW5pdF91d2lyZSgpOwogCW9tYXBfaW5pdF93ZHQoKTsKLQlvbWFwX2luaXRfcm5nKCk7CiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBkMTczNzVlLi4wOWQ4MmIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjZW5kaWYKIAogI2RlZmluZSBPTUFQX0RNQV9BQ1RJVkUJCQkweDAxCi0jZGVmaW5lIE9NQVBfRE1BX0NDUl9FTgkJCSgxIDw8IDcpCiAjZGVmaW5lIE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSwkweGZmZQogCiAjZGVmaW5lIE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UJCSgweGZmZmUxMDAwICsgMHhlYykKQEAgLTExMjAsMTcgKzExMTksOCBAQAogewogCWludCBsY2g7CiAKLQkvKgotCSAqIE9uIE9NQVAxNTEwLCBpbnRlcm5hbCBMQ0QgY29udHJvbGxlciB3aWxsIHN0YXJ0IHRoZSB0cmFuc2ZlcgotCSAqIHdoZW4gaXQgZ2V0cyBlbmFibGVkLCBzbyBhc3N1bWUgRE1BIHJ1bm5pbmcgaWYgTENEIGVuYWJsZWQuCi0JICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKQotCQlpZiAob21hcF9yZWFkdygweGZmZmVjMDAwICsgMHgwMCkgJiAoMSA8PCAwKSkKLQkJCXJldHVybiAxOwotCi0JLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlpZiAob21hcF9sY2RfZG1hX3J1bm5pbmcoKSkKIAkJCXJldHVybiAxOwogCiAJZm9yIChsY2ggPSAwOyBsY2ggPCBkbWFfY2hhbl9jb3VudDsgbGNoKyspCkBAIC0xOTkwLDM3NyArMTk4MCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBzdHJ1Y3QgbGNkX2RtYV9pbmZvIHsKLQlzcGlubG9ja190IGxvY2s7Ci0JaW50IHJlc2VydmVkOwotCXZvaWQgKCpjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSk7Ci0Jdm9pZCAqY2JfZGF0YTsKLQotCWludCBhY3RpdmU7Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplOwotCWludCByb3RhdGUsIGRhdGFfdHlwZSwgeHJlcywgeXJlczsKLQlpbnQgdnhyZXM7Ci0JaW50IG1pcnJvcjsKLQlpbnQgeHNjYWxlLCB5c2NhbGU7Ci0JaW50IGV4dF9jdHJsOwotCWludCBzcmNfcG9ydDsKLQlpbnQgc2luZ2xlX3RyYW5zZmVyOwotfSBsY2RfZG1hOwotCi12b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjEodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgZmJfeHJlcywgdTE2IGZiX3lyZXMsCi0JCQkgaW50IGRhdGFfdHlwZSkKLXsKLQlsY2RfZG1hLmFkZHIgPSBhZGRyOwotCWxjZF9kbWEuZGF0YV90eXBlID0gZGF0YV90eXBlOwotCWxjZF9kbWEueHJlcyA9IGZiX3hyZXM7Ci0JbGNkX2RtYS55cmVzID0gZmJfeXJlczsKLX0KLUVYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9iMSk7Ci0KLXZvaWQgb21hcF9zZXRfbGNkX2RtYV9zcmNfcG9ydChpbnQgcG9ydCkKLXsKLQlsY2RfZG1hLnNyY19wb3J0ID0gcG9ydDsKLX0KLQotdm9pZCBvbWFwX3NldF9sY2RfZG1hX2V4dF9jb250cm9sbGVyKGludCBleHRlcm5hbCkKLXsKLQlsY2RfZG1hLmV4dF9jdHJsID0gZXh0ZXJuYWw7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIpOwotCi12b2lkIG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKGludCBzaW5nbGUpCi17Ci0JbGNkX2RtYS5zaW5nbGVfdHJhbnNmZXIgPSBzaW5nbGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKTsKLQotdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3JvdGF0aW9uKGludCByb3RhdGUpCi17Ci0JaWYgKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRE1BIHJvdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0JbGNkX2RtYS5yb3RhdGUgPSByb3RhdGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24pOwotCi12b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfbWlycm9yKGludCBtaXJyb3IpCi17Ci0JaWYgKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRE1BIG1pcnJvciBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7Ci0JCUJVRygpOwotCX0KLQlsY2RfZG1hLm1pcnJvciA9IG1pcnJvcjsKLX0KLUVYUE9SVF9TWU1CT0wob21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IpOwotCi12b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfdnhyZXModW5zaWduZWQgbG9uZyB2eHJlcykKLXsKLQlpZiAob21hcF9kbWFfaW5fMTUxMF9tb2RlKCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJETUEgdmlydHVhbCByZXN1bG90aW9uIGlzIG5vdCBzdXBwb3J0ZWQgIgotCQkJCSJpbiAxNTEwIG1vZGVcbiIpOwotCQlCVUcoKTsKLQl9Ci0JbGNkX2RtYS52eHJlcyA9IHZ4cmVzOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKTsKLQotdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpCi17Ci0JaWYgKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRE1BIHNjYWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKLQkJQlVHKCk7Ci0JfQotCWxjZF9kbWEueHNjYWxlID0geHNjYWxlOwotCWxjZF9kbWEueXNjYWxlID0geXNjYWxlOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKTsKLQotc3RhdGljIHZvaWQgc2V0X2IxX3JlZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHRvcCwgYm90dG9tOwotCWludCBlczsKLQl1MTYgdzsKLQl1bnNpZ25lZCBsb25nIGVuLCBmbjsKLQlsb25nIGVpLCBmaTsKLQl1bnNpZ25lZCBsb25nIHZ4cmVzOwotCXVuc2lnbmVkIGludCB4c2NhbGUsIHlzY2FsZTsKLQotCXN3aXRjaCAobGNkX2RtYS5kYXRhX3R5cGUpIHsKLQljYXNlIE9NQVBfRE1BX0RBVEFfVFlQRV9TODoKLQkJZXMgPSAxOwotCQlicmVhazsKLQljYXNlIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTY6Ci0JCWVzID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyOgotCQllcyA9IDQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm47Ci0JfQotCi0JdnhyZXMgPSBsY2RfZG1hLnZ4cmVzID8gbGNkX2RtYS52eHJlcyA6IGxjZF9kbWEueHJlczsKLQl4c2NhbGUgPSBsY2RfZG1hLnhzY2FsZSA/IGxjZF9kbWEueHNjYWxlIDogMTsKLQl5c2NhbGUgPSBsY2RfZG1hLnlzY2FsZSA/IGxjZF9kbWEueXNjYWxlIDogMTsKLQlCVUdfT04odnhyZXMgPCBsY2RfZG1hLnhyZXMpOwotCi0jZGVmaW5lIFBJWEFERFIoeCwgeSkgKGxjZF9kbWEuYWRkciArCQkJCQlcCi0JCSgoeSkgKiB2eHJlcyAqIHlzY2FsZSArICh4KSAqIHhzY2FsZSkgKiBlcykKLSNkZWZpbmUgUElYU1RFUChzeCwgc3ksIGR4LCBkeSkgKFBJWEFERFIoZHgsIGR5KSAtIFBJWEFERFIoc3gsIHN5KSAtIGVzICsgMSkKLQotCXN3aXRjaCAobGNkX2RtYS5yb3RhdGUpIHsKLQljYXNlIDA6Ci0JCWlmICghbGNkX2RtYS5taXJyb3IpIHsKLQkJCXRvcCA9IFBJWEFERFIoMCwgMCk7Ci0JCQlib3R0b20gPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIGxjZF9kbWEueXJlcyAtIDEpOwotCQkJLyogMTUxMCBETUEgcmVxdWlyZXMgdGhlIGJvdHRvbSBhZGRyZXNzIHRvIGJlIDIgbW9yZQotCQkJICogdGhhbiB0aGUgYWN0dWFsIGxhc3QgbWVtb3J5IGFjY2VzcyBsb2NhdGlvbi4gKi8KLQkJCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSAmJgotCQkJCWxjZF9kbWEuZGF0YV90eXBlID09IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIpCi0JCQkJCWJvdHRvbSArPSAyOwotCQkJZWkgPSBQSVhTVEVQKDAsIDAsIDEsIDApOwotCQkJZmkgPSBQSVhTVEVQKGxjZF9kbWEueHJlcyAtIDEsIDAsIDAsIDEpOwotCQl9IGVsc2UgewotCQkJdG9wID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKLQkJCWJvdHRvbSA9IFBJWEFERFIoMCwgbGNkX2RtYS55cmVzIC0gMSk7Ci0JCQllaSA9IFBJWFNURVAoMSwgMCwgMCwgMCk7Ci0JCQlmaSA9IFBJWFNURVAoMCwgMCwgbGNkX2RtYS54cmVzIC0gMSwgMSk7Ci0JCX0KLQkJZW4gPSBsY2RfZG1hLnhyZXM7Ci0JCWZuID0gbGNkX2RtYS55cmVzOwotCQlicmVhazsKLQljYXNlIDkwOgotCQlpZiAoIWxjZF9kbWEubWlycm9yKSB7Ci0JCQl0b3AgPSBQSVhBRERSKDAsIGxjZF9kbWEueXJlcyAtIDEpOwotCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKLQkJCWVpID0gUElYU1RFUCgwLCAxLCAwLCAwKTsKLQkJCWZpID0gUElYU1RFUCgwLCAwLCAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKLQkJfSBlbHNlIHsKLQkJCXRvcCA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgbGNkX2RtYS55cmVzIC0gMSk7Ci0JCQlib3R0b20gPSBQSVhBRERSKDAsIDApOwotCQkJZWkgPSBQSVhTVEVQKDAsIDEsIDAsIDApOwotCQkJZmkgPSBQSVhTVEVQKDEsIDAsIDAsIGxjZF9kbWEueXJlcyAtIDEpOwotCQl9Ci0JCWVuID0gbGNkX2RtYS55cmVzOwotCQlmbiA9IGxjZF9kbWEueHJlczsKLQkJYnJlYWs7Ci0JY2FzZSAxODA6Ci0JCWlmICghbGNkX2RtYS5taXJyb3IpIHsKLQkJCXRvcCA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgbGNkX2RtYS55cmVzIC0gMSk7Ci0JCQlib3R0b20gPSBQSVhBRERSKDAsIDApOwotCQkJZWkgPSBQSVhTVEVQKDEsIDAsIDAsIDApOwotCQkJZmkgPSBQSVhTVEVQKDAsIDEsIGxjZF9kbWEueHJlcyAtIDEsIDApOwotCQl9IGVsc2UgewotCQkJdG9wID0gUElYQUREUigwLCBsY2RfZG1hLnlyZXMgLSAxKTsKLQkJCWJvdHRvbSA9IFBJWEFERFIobGNkX2RtYS54cmVzIC0gMSwgMCk7Ci0JCQllaSA9IFBJWFNURVAoMCwgMCwgMSwgMCk7Ci0JCQlmaSA9IFBJWFNURVAobGNkX2RtYS54cmVzIC0gMSwgMSwgMCwgMCk7Ci0JCX0KLQkJZW4gPSBsY2RfZG1hLnhyZXM7Ci0JCWZuID0gbGNkX2RtYS55cmVzOwotCQlicmVhazsKLQljYXNlIDI3MDoKLQkJaWYgKCFsY2RfZG1hLm1pcnJvcikgewotCQkJdG9wID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCAwKTsKLQkJCWJvdHRvbSA9IFBJWEFERFIoMCwgbGNkX2RtYS55cmVzIC0gMSk7Ci0JCQllaSA9IFBJWFNURVAoMCwgMCwgMCwgMSk7Ci0JCQlmaSA9IFBJWFNURVAoMSwgbGNkX2RtYS55cmVzIC0gMSwgMCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQl0b3AgPSBQSVhBRERSKDAsIDApOwotCQkJYm90dG9tID0gUElYQUREUihsY2RfZG1hLnhyZXMgLSAxLCBsY2RfZG1hLnlyZXMgLSAxKTsKLQkJCWVpID0gUElYU1RFUCgwLCAwLCAwLCAxKTsKLQkJCWZpID0gUElYU1RFUCgwLCBsY2RfZG1hLnlyZXMgLSAxLCAxLCAwKTsKLQkJfQotCQllbiA9IGxjZF9kbWEueXJlczsKLQkJZm4gPSBsY2RfZG1hLnhyZXM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm47CS8qIFN1cHByZXNzIHdhcm5pbmcgYWJvdXQgdW5pbml0aWFsaXplZCB2YXJzICovCi0JfQotCi0JaWYgKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKSB7Ci0JCW9tYXBfd3JpdGV3KHRvcCA+PiAxNiwgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfVSk7Ci0JCW9tYXBfd3JpdGV3KHRvcCwgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTCk7Ci0JCW9tYXBfd3JpdGV3KGJvdHRvbSA+PiAxNiwgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfVSk7Ci0JCW9tYXBfd3JpdGV3KGJvdHRvbSwgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfTCk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qIDE2MTAgcmVncyAqLwotCW9tYXBfd3JpdGV3KHRvcCA+PiAxNiwgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfVSk7Ci0Jb21hcF93cml0ZXcodG9wLCBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9MKTsKLQlvbWFwX3dyaXRldyhib3R0b20gPj4gMTYsIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX1UpOwotCW9tYXBfd3JpdGV3KGJvdHRvbSwgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfTCk7Ci0KLQlvbWFwX3dyaXRldyhlbiwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRU5fQjEpOwotCW9tYXBfd3JpdGV3KGZuLCBPTUFQMTYxMF9ETUFfTENEX1NSQ19GTl9CMSk7Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NTRFApOwotCXcgJj0gfjB4MDM7Ci0JdyB8PSBsY2RfZG1hLmRhdGFfdHlwZTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NTRFApOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKLQkvKiBBbHdheXMgc2V0IHRoZSBzb3VyY2UgcG9ydCBhcyBTRFJBTSBmb3Igbm93Ki8KLQl3ICY9IH4oMHgwMyA8PCA2KTsKLQlpZiAobGNkX2RtYS5jYWxsYmFjayAhPSBOVUxMKQotCQl3IHw9IDEgPDwgMTsJCS8qIEJsb2NrIGludGVycnVwdCBlbmFibGUgKi8KLQllbHNlCi0JCXcgJj0gfigxIDw8IDEpOwotCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7Ci0KLQlpZiAoIShsY2RfZG1hLnJvdGF0ZSB8fCBsY2RfZG1hLm1pcnJvciB8fAotCSAgICAgIGxjZF9kbWEudnhyZXMgfHwgbGNkX2RtYS54c2NhbGUgfHwgbGNkX2RtYS55c2NhbGUpKQotCQlyZXR1cm47Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7Ci0JLyogU2V0IHRoZSBkb3VibGUtaW5kZXhlZCBhZGRyZXNzaW5nIG1vZGUgKi8KLQl3IHw9ICgweDAzIDw8IDEyKTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NDUik7Ci0KLQlvbWFwX3dyaXRldyhlaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRUlfQjEpOwotCW9tYXBfd3JpdGV3KGZpID4+IDE2LCBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9VKTsKLQlvbWFwX3dyaXRldyhmaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTCk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBsY2RfZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7Ci0JaWYgKHVubGlrZWx5KCEodyAmICgxIDw8IDMpKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU3B1cmlvdXMgTENEIERNQSBJUlFcbiIpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCS8qIEFjayB0aGUgSVJRICovCi0JdyB8PSAoMSA8PCAzKTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NUUkwpOwotCWxjZF9kbWEuYWN0aXZlID0gMDsKLQlpZiAobGNkX2RtYS5jYWxsYmFjayAhPSBOVUxMKQotCQlsY2RfZG1hLmNhbGxiYWNrKHcsIGxjZF9kbWEuY2JfZGF0YSk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLWludCBvbWFwX3JlcXVlc3RfbGNkX2RtYSh2b2lkICgqY2FsbGJhY2spKHUxNiBzdGF0dXMsIHZvaWQgKmRhdGEpLAotCQkJIHZvaWQgKmRhdGEpCi17Ci0Jc3Bpbl9sb2NrX2lycSgmbGNkX2RtYS5sb2NrKTsKLQlpZiAobGNkX2RtYS5yZXNlcnZlZCkgewotCQlzcGluX3VubG9ja19pcnEoJmxjZF9kbWEubG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiAiTENEIERNQSBjaGFubmVsIGFscmVhZHkgcmVzZXJ2ZWRcbiIpOwotCQlCVUcoKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JbGNkX2RtYS5yZXNlcnZlZCA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZsY2RfZG1hLmxvY2spOwotCWxjZF9kbWEuY2FsbGJhY2sgPSBjYWxsYmFjazsKLQlsY2RfZG1hLmNiX2RhdGEgPSBkYXRhOwotCWxjZF9kbWEuYWN0aXZlID0gMDsKLQlsY2RfZG1hLnNpbmdsZV90cmFuc2ZlciA9IDA7Ci0JbGNkX2RtYS5yb3RhdGUgPSAwOwotCWxjZF9kbWEudnhyZXMgPSAwOwotCWxjZF9kbWEubWlycm9yID0gMDsKLQlsY2RfZG1hLnhzY2FsZSA9IDA7Ci0JbGNkX2RtYS55c2NhbGUgPSAwOwotCWxjZF9kbWEuZXh0X2N0cmwgPSAwOwotCWxjZF9kbWEuc3JjX3BvcnQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfcmVxdWVzdF9sY2RfZG1hKTsKLQotdm9pZCBvbWFwX2ZyZWVfbGNkX2RtYSh2b2lkKQotewotCXNwaW5fbG9jaygmbGNkX2RtYS5sb2NrKTsKLQlpZiAoIWxjZF9kbWEucmVzZXJ2ZWQpIHsKLQkJc3Bpbl91bmxvY2soJmxjZF9kbWEubG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiAiTENEIERNQSBpcyBub3QgcmVzZXJ2ZWRcbiIpOwotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoIWVuYWJsZV8xNTEwX21vZGUpCi0JCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCi0JCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwotCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOwotCXNwaW5fdW5sb2NrKCZsY2RfZG1hLmxvY2spOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX2ZyZWVfbGNkX2RtYSk7Ci0KLXZvaWQgb21hcF9lbmFibGVfbGNkX2RtYSh2b2lkKQotewotCXUxNiB3OwotCi0JLyoKLQkgKiBTZXQgdGhlIEVuYWJsZSBiaXQgb25seSBpZiBhbiBleHRlcm5hbCBjb250cm9sbGVyIGlzCi0JICogY29ubmVjdGVkLiBPdGhlcndpc2UgdGhlIE9NQVAgaW50ZXJuYWwgY29udHJvbGxlciB3aWxsCi0JICogc3RhcnQgdGhlIHRyYW5zZmVyIHdoZW4gaXQgZ2V0cyBlbmFibGVkLgotCSAqLwotCWlmIChlbmFibGVfMTUxMF9tb2RlIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQotCQlyZXR1cm47Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOwotCXcgfD0gMSA8PCA4OwotCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7Ci0KLQlsY2RfZG1hLmFjdGl2ZSA9IDE7Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUik7Ci0JdyB8PSAxIDw8IDc7Ci0Jb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX2VuYWJsZV9sY2RfZG1hKTsKLQotdm9pZCBvbWFwX3NldHVwX2xjZF9kbWEodm9pZCkKLXsKLQlCVUdfT04obGNkX2RtYS5hY3RpdmUpOwotCWlmICghZW5hYmxlXzE1MTBfbW9kZSkgewotCQkvKiBTZXQgc29tZSByZWFzb25hYmxlIGRlZmF1bHRzICovCi0JCW9tYXBfd3JpdGV3KDB4NTQ0MCwgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwotCQlvbWFwX3dyaXRldygweDkxMDIsIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCk7Ci0JCW9tYXBfd3JpdGV3KDB4MDAwNCwgT01BUDE2MTBfRE1BX0xDRF9MQ0hfQ1RSTCk7Ci0JfQotCXNldF9iMV9yZWdzKCk7Ci0JaWYgKCFlbmFibGVfMTUxMF9tb2RlKSB7Ci0JCXUxNiB3OwotCi0JCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKLQkJLyoKLQkJICogSWYgRE1BIHdhcyBhbHJlYWR5IGFjdGl2ZSBzZXQgdGhlIGVuZF9wcm9nIGJpdCB0byBoYXZlCi0JCSAqIHRoZSBwcm9ncmFtbWVkIHJlZ2lzdGVyIHNldCBsb2FkZWQgaW50byB0aGUgYWN0aXZlCi0JCSAqIHJlZ2lzdGVyIHNldC4KLQkJICovCi0JCXcgfD0gMSA8PCAxMTsJCS8qIEVuZF9wcm9nICovCi0JCWlmICghbGNkX2RtYS5zaW5nbGVfdHJhbnNmZXIpCi0JCQl3IHw9ICgzIDw8IDgpOwkvKiBBdXRvX2luaXQsIHJlcGVhdCAqLwotCQlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NDUik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChvbWFwX3NldHVwX2xjZF9kbWEpOwotCi12b2lkIG9tYXBfc3RvcF9sY2RfZG1hKHZvaWQpCi17Ci0JdTE2IHc7Ci0KLQlsY2RfZG1hLmFjdGl2ZSA9IDA7Ci0JaWYgKGVuYWJsZV8xNTEwX21vZGUgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCi0JCXJldHVybjsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKLQl3ICY9IH4oMSA8PCA3KTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQMTYxMF9ETUFfTENEX0NDUik7Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NUUkwpOwotCXcgJj0gfigxIDw8IDgpOwotCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfc3RvcF9sY2RfZG1hKTsKLQogdm9pZCBvbWFwX2RtYV9nbG9iYWxfY29udGV4dF9zYXZlKHZvaWQpCiB7CiAJb21hcF9kbWFfZ2xvYmFsX2NvbnRleHQuZG1hX2lycWVuYWJsZV9sMCA9CkBAIC0yNDY1LDE0ICsyMDg0LDYgQEAKIAkJCWRtYV9jaGFuX2NvdW50ID0gMTY7CiAJCX0gZWxzZQogCQkJZG1hX2NoYW5fY291bnQgPSA5OwotCQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJCXUxNiB3OwotCi0JCQkvKiB0aGlzIHdvdWxkIHByZXZlbnQgT01BUCBzbGVlcCAqLwotCQkJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKLQkJCXcgJj0gfigxIDw8IDgpOwotCQkJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKLQkJfQogCX0gZWxzZSBpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJdTggcmV2aXNpb24gPSBkbWFfcmVhZChSRVZJU0lPTikgJiAweGZmOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSByZXZpc2lvbiAlZC4lZFxuIiwKQEAgLTI0ODMsNyArMjA5NCw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZsY2RfZG1hLmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZkbWFfY2hhbl9sb2NrKTsKIAogCWZvciAoY2ggPSAwOyBjaCA8IGRtYV9jaGFuX2NvdW50OyBjaCsrKSB7CkBAIC0yNTQ4LDIyICsyMTU4LDYgQEAKIAkJfQogCX0KIAotCi0JLyogRklYTUU6IFVwZGF0ZSBMQ0QgRE1BIHRvIHdvcmsgb24gMjR4eCAqLwotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewotCQlyID0gcmVxdWVzdF9pcnEoSU5UX0RNQV9MQ0QsIGxjZF9kbWFfaXJxX2hhbmRsZXIsIDAsCi0JCQkJIkxDRCBETUEiLCBOVUxMKTsKLQkJaWYgKHIgIT0gMCkgewotCQkJaW50IGk7Ci0KLQkJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlcXVlc3QgSVJRIGZvciBMQ0QgRE1BICIKLQkJCSAgICAgICAiKGVycm9yICVkKVxuIiwgcik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZG1hX2NoYW5fY291bnQ7IGkrKykKLQkJCQlmcmVlX2lycShvbWFwMV9kbWFfaXJxW2ldLCAodm9pZCAqKSAoaSArIDEpKTsKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCAwNTUxNjBlLi4wNDg0NjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE0MzEsNyArMTQzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBvbWFwX21wdWlvX2Rldl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgb21hcF9tcHVpb19kZXZfcG1fb3BzID0gewogCS5zdXNwZW5kX25vaXJxID0gb21hcF9tcHVpb19zdXNwZW5kX25vaXJxLAogCS5yZXN1bWVfbm9pcnEgPSBvbWFwX21wdWlvX3Jlc3VtZV9ub2lycSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKaW5kZXggYzA4MzYyZC4uMzNmZmY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwpAQCAtODAsNDcgKzgwLDggQEAKICNlbmRpZgogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCi1zdGF0aWMgY29uc3QgaW50IG9tYXAyNHh4X3BpbnNbXVsyXSA9IHsKLQl7IE0xOV8yNFhYX0kyQzFfU0NMLCBMMTVfMjRYWF9JMkMxX1NEQSB9LAotCXsgSjE1XzI0WFhfSTJDMl9TQ0wsIEgxOV8yNFhYX0kyQzJfU0RBIH0sCi19OwotI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgb21hcDI0eHhfcGluc1tdWzJdID0ge307Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQotc3RhdGljIGNvbnN0IGludCBvbWFwMzR4eF9waW5zW11bMl0gPSB7Ci0JeyBLMjFfMzRYWF9JMkMxX1NDTCwgSjIxXzM0WFhfSTJDMV9TREF9LAotCXsgQUYxNV8zNFhYX0kyQzJfU0NMLCBBRTE1XzM0WFhfSTJDMl9TREF9LAotCXsgQUYxNF8zNFhYX0kyQzNfU0NMLCBBRzE0XzM0WFhfSTJDM19TREF9LAotfTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgaW50IG9tYXAzNHh4X3BpbnNbXVsyXSA9IHt9OwotI2VuZGlmCi0KICNkZWZpbmUgT01BUF9JMkNfQ01ETElORV9TRVRVUAkoQklUKDMxKSkKIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaTJjX211eF9waW5zKGludCBidXMpCi17Ci0JaW50IHNjbCwgc2RhOwotCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCXNjbCA9IEkyQ19TQ0w7Ci0JCXNkYSA9IEkyQ19TREE7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlzY2wgPSBvbWFwMjR4eF9waW5zW2J1c11bMF07Ci0JCXNkYSA9IG9tYXAyNHh4X3BpbnNbYnVzXVsxXTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXNjbCA9IG9tYXAzNHh4X3BpbnNbYnVzXVswXTsKLQkJc2RhID0gb21hcDM0eHhfcGluc1tidXNdWzFdOwotCX0gZWxzZSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlvbWFwX2NmZ19yZWcoc2RhKTsKLQlvbWFwX2NmZ19yZWcoc2NsKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgb21hcF9pMmNfbnJfcG9ydHModm9pZCkKIHsKIAlpbnQgcG9ydHMgPSAwOwpAQCAtMTU2LDcgKzExNyw2IEBACiAJCXJlc1sxXS5zdGFydCA9IGlycTsKIAl9CiAKLQlvbWFwX2kyY19tdXhfcGlucyhidXNfaWQgLSAxKTsKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogfQogCkBAIC0yMDksNyArMTY5LDcgQEAKIHN1YnN5c19pbml0Y2FsbChvbWFwX3JlZ2lzdGVyX2kyY19idXNfY21kbGluZSk7CiAKIC8qKgotICogb21hcF9yZWdpc3Rlcl9pMmNfYnVzIC0gcmVnaXN0ZXIgSTJDIGJ1cyB3aXRoIGRldmljZSBkZXNjcmlwdG9ycworICogb21hcF9wbGF0X3JlZ2lzdGVyX2kyY19idXMgLSByZWdpc3RlciBJMkMgYnVzIHdpdGggZGV2aWNlIGRlc2NyaXB0b3JzCiAgKiBAYnVzX2lkOiBidXMgaWQgY291bnRpbmcgZnJvbSBudW1iZXIgMQogICogQGNsa3JhdGU6IGNsb2NrIHJhdGUgb2YgdGhlIGJ1cyBpbiBrSHoKICAqIEBpbmZvOiBwb2ludGVyIGludG8gSTJDIGRldmljZSBkZXNjcmlwdG9yIHRhYmxlIG9yIE5VTEwKQEAgLTIxNyw3ICsxNzcsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCiAgKi8KLWludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAoraW50IF9faW5pdCBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAogCQkJICB1bnNpZ25lZCBsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2JvYXJkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2JvYXJkLmgKaW5kZXggYWJiMTdiNi4uMzc2Y2UxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ib2FyZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvYm9hcmQuaApAQCAtMTE0LDE1ICsxMTQsNiBAQAogCXZvaWQgKCpzZXRfcG93ZXIpKHN0cnVjdCBvbWFwX3B3bV9sZWRfcGxhdGZvcm1fZGF0YSAqc2VsZiwgaW50IG9uX29mZik7CiB9OwogCi0vKiBTZWUgYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLXN3aXRjaC5oIGZvciBkZWZpbml0aW9ucyAqLwotc3RydWN0IG9tYXBfZ3Bpb19zd2l0Y2hfY29uZmlnIHsKLQljaGFyIG5hbWVbMTJdOwotCXUxNiBncGlvOwotCWludCBmbGFnczo0OwotCWludCB0eXBlOjQ7Ci0JaW50IGtleV9jb2RlOjI0OyAvKiBMaW51eCBrZXkgY29kZSAqLwotfTsKLQogc3RydWN0IG9tYXBfdWFydF9jb25maWcgewogCS8qIEJpdCBmaWVsZCBvZiBVQVJUcyBwcmVzZW50OyBiaXQgMCAtLT4gVUFSVDEgKi8KIAl1bnNpZ25lZCBpbnQgZW5hYmxlZF91YXJ0czsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWIzNmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbGtkZXZfb21hcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBjbGtkZXYgPC0+IE9NQVAgaW50ZWdyYXRpb24KKyAqCisgKiBSdXNzZWxsIEtpbmcgPGxpbnV4QGFybS5saW51eC5vcmcudWs+CisgKgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9QTEFUX0NMS0RFVl9PTUFQX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9QTEFUX0NMS0RFVl9PTUFQX0gKKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworc3RydWN0IG9tYXBfY2xrIHsKKwl1MTYJCQkJY3B1OworCXN0cnVjdCBjbGtfbG9va3VwCQlsazsKK307CisKKyNkZWZpbmUgQ0xLKGRldiwgY29uLCBjaywgY3ApIAkJXAorCXsJCQkJXAorCQkgLmNwdSA9IGNwLAkJXAorCQkubGsgPSB7CQkJXAorCQkJLmRldl9pZCA9IGRldiwJXAorCQkJLmNvbl9pZCA9IGNvbiwJXAorCQkJLmNsayA9IGNrLAlcCisJCX0sCQkJXAorCX0KKworCisjZGVmaW5lIENLXzMxMAkJKDEgPDwgMCkKKyNkZWZpbmUgQ0tfN1hYCQkoMSA8PCAxKQorI2RlZmluZSBDS18xNTEwCQkoMSA8PCAyKQorI2RlZmluZSBDS18xNlhYCQkoMSA8PCAzKQorI2RlZmluZSBDS18yNDNYCQkoMSA8PCA0KQorI2RlZmluZSBDS18yNDJYCQkoMSA8PCA1KQorI2RlZmluZSBDS18zNDNYCQkoMSA8PCA2KQorI2RlZmluZSBDS18zNDMwRVMxCSgxIDw8IDcpCisjZGVmaW5lIENLXzM0MzBFUzIJKDEgPDwgOCkKKyNkZWZpbmUgQ0tfNDQzWAkJKDEgPDwgOSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaAppbmRleCA0YjhiMGQ2Li4zMDliNmQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICiAKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3QgY2xrOwogc3RydWN0IGNsb2NrZG9tYWluOwpAQCAtMTQ4LDYgKzE1MCw4IEBACiAjZGVmaW5lIENPTkZJR19QQVJUSUNJUEFOVAkoMSA8PCAxMCkJLyogRnVuZGFtZW50YWwgY2xvY2sgKi8KICNkZWZpbmUgRU5BQkxFX09OX0lOSVQJCSgxIDw8IDExKQkvKiBFbmFibGUgdXBvbiBmcmFtZXdvcmsgaW5pdCAqLwogI2RlZmluZSBJTlZFUlRfRU5BQkxFICAgICAgICAgICAoMSA8PCAxMikgICAgICAgLyogMCBlbmFibGVzLCAxIGRpc2FibGVzICovCisjZGVmaW5lIENMT0NLX0lOX09NQVA0NDMwCSgxIDw8IDEzKQorI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJKDEgPDwgMTQpCiAvKiBiaXRzIDEzLTMxIGFyZSBjdXJyZW50bHkgZnJlZSAqLwogCiAvKiBDbGtzZWxfcmF0ZSBmbGFncyAqLwpAQCAtMTU2LDYgKzE2MCw3IEBACiAjZGVmaW5lIFJBVEVfSU5fMjQzWAkJKDEgPDwgMikKICNkZWZpbmUgUkFURV9JTl8zNDNYCQkoMSA8PCAzKQkvKiByYXRlcyBjb21tb24gdG8gYWxsIDM0M1ggKi8KICNkZWZpbmUgUkFURV9JTl8zNDMwRVMyCQkoMSA8PCA0KQkvKiAzNDMwRVMyIHJhdGVzIG9ubHkgKi8KKyNkZWZpbmUgUkFURV9JTl80NDMwICAgICAgICAgICAgKDEgPDwgNSkKIAogI2RlZmluZSBSQVRFX0lOXzI0WFgJCShSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCmluZGV4IDA2NGYxNzMuLjMyYzIyMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUF9DT01NT05fSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUF9DT01NT05fSAogCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogc3RydWN0IHN5c190aW1lcjsKIApAQCAtMzYsMTggKzM2LDYgQEAKIAogZXh0ZXJuIHZvaWQgb21hcF9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQotZXh0ZXJuIGludCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCi0JCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKLQkJCQkgdW5zaWduZWQgbGVuKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCi0JCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKLQkJCQkgdW5zaWduZWQgbGVuKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCiAKIC8qIElPIGJhc2VzIGZvciB2YXJpb3VzIE9NQVAgcHJvY2Vzc29ycyAqLwogc3RydWN0IG9tYXBfZ2xvYmFscyB7CkBAIC01OCw2ICs0Niw3IEBACiAJdm9pZCBfX2lvbWVtCSpjdHJsOwkJLyogU3lzdGVtIENvbnRyb2wgTW9kdWxlICovCiAJdm9pZCBfX2lvbWVtCSpwcm07CQkvKiBQb3dlciBhbmQgUmVzZXQgTWFuYWdlbWVudCAqLwogCXZvaWQgX19pb21lbQkqY207CQkvKiBDbG9jayBNYW5hZ2VtZW50ICovCisJdm9pZCBfX2lvbWVtCSpjbTI7CiB9OwogCiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzXzI0Mngodm9pZCk7CkBAIC03MSw0ICs2MCwyNCBAQAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3ByY20oc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIAorLyoqCisgKiBvbWFwX3Rlc3RfdGltZW91dCAtIGJ1c3ktbG9vcCwgdGVzdGluZyBhIGNvbmRpdGlvbgorICogQGNvbmQ6IGNvbmRpdGlvbiB0byB0ZXN0IHVudGlsIGl0IGV2YWx1YXRlcyB0byB0cnVlCisgKiBAdGltZW91dDogbWF4aW11bSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIGluIHRoZSB0aW1lb3V0CisgKiBAaW5kZXg6IGxvb3AgaW5kZXggKGludGVnZXIpCisgKgorICogTG9vcCB3YWl0aW5nIGZvciBAY29uZCB0byBiZWNvbWUgdHJ1ZSBvciB1bnRpbCBhdCBsZWFzdCBAdGltZW91dAorICogbWljcm9zZWNvbmRzIGhhdmUgcGFzc2VkLiAgVG8gdXNlLCBkZWZpbmUgc29tZSBpbnRlZ2VyIEBpbmRleCBpbiB0aGUKKyAqIGNhbGxpbmcgY29kZS4gIEFmdGVyIHJ1bm5pbmcsIGlmIEBpbmRleCA9PSBAdGltZW91dCwgdGhlbiB0aGUgbG9vcCBoYXMKKyAqIHRpbWVkIG91dC4KKyAqLworI2RlZmluZSBvbWFwX3Rlc3RfdGltZW91dChjb25kLCB0aW1lb3V0LCBpbmRleCkJCQlcCisoewkJCQkJCQkJXAorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRpbWVvdXQ7IGluZGV4KyspIHsJCVwKKwkJaWYgKGNvbmQpCQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJdWRlbGF5KDEpOwkJCQkJXAorCX0JCQkJCQkJXAorfSkKKwogI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9PTUFQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jcHUuaAppbmRleCAyZTE3ODkwLi45YTAyOGJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY3B1LmgKQEAgLTE3NiwxMSArMTc2LDEzIEBACiBJU19PTUFQX0NMQVNTKDE2eHgsIDB4MTYpCiBJU19PTUFQX0NMQVNTKDI0eHgsIDB4MjQpCiBJU19PTUFQX0NMQVNTKDM0eHgsIDB4MzQpCitJU19PTUFQX0NMQVNTKDQ0eHgsIDB4NDQpCiAKIElTX09NQVBfU1VCQ0xBU1MoMjQyeCwgMHgyNDIpCiBJU19PTUFQX1NVQkNMQVNTKDI0M3gsIDB4MjQzKQogSVNfT01BUF9TVUJDTEFTUygzNDN4LCAweDM0MykKIElTX09NQVBfU1VCQ0xBU1MoMzYzeCwgMHgzNjMpCitJU19PTUFQX1NVQkNMQVNTKDQ0M3gsIDB4NDQzKQogCiAjZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTAKQEAgLTM5MywxMSArMzk1LDExIEBACiAJCQkJCQkoIW9tYXAzX2hhc19pdmEoKSkgJiYJXAogCQkJCQkJKCFvbWFwM19oYXNfc2d4KCkpKQogIyBkZWZpbmUgY3B1X2lzX29tYXAzNTE1KCkJCShjcHVfaXNfb21hcDM0MzAoKSAmJgkJXAotCQkJCQkJKG9tYXAzX2hhc19pdmEoKSkgJiYJXAotCQkJCQkJKCFvbWFwM19oYXNfc2d4KCkpKQorCQkJCQkJKCFvbWFwM19oYXNfaXZhKCkpICYmCVwKKwkJCQkJCShvbWFwM19oYXNfc2d4KCkpKQogIyBkZWZpbmUgY3B1X2lzX29tYXAzNTI1KCkJCShjcHVfaXNfb21hcDM0MzAoKSAmJgkJXAotCQkJCQkJKG9tYXAzX2hhc19zZ3goKSkgJiYJXAotCQkJCQkJKCFvbWFwM19oYXNfaXZhKCkpKQorCQkJCQkJKCFvbWFwM19oYXNfc2d4KCkpICYmCVwKKwkJCQkJCShvbWFwM19oYXNfaXZhKCkpKQogIyBkZWZpbmUgY3B1X2lzX29tYXAzNTMwKCkJCShjcHVfaXNfb21hcDM0MzAoKSkKICMgZGVmaW5lIGNwdV9pc19vbWFwMzUwNSgpCQlpc19vbWFwMzUwNSgpCiAjIGRlZmluZSBjcHVfaXNfb21hcDM1MTcoKQkJaXNfb21hcDM1MTcoKQpAQCAtNDA4LDggKzQxMCw4IEBACiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAjIHVuZGVmIGNwdV9pc19vbWFwNDR4eAogIyB1bmRlZiBjcHVfaXNfb21hcDQ0M3gKLSMgZGVmaW5lIGNwdV9pc19vbWFwNDR4eCgpCQkxCi0jIGRlZmluZSBjcHVfaXNfb21hcDQ0M3goKQkJMQorIyBkZWZpbmUgY3B1X2lzX29tYXA0NHh4KCkJCWlzX29tYXA0NHh4KCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwNDQzeCgpCQlpc19vbWFwNDQzeCgpCiAjIGVuZGlmCiAKIC8qIE1hY3JvcyB0byBkZXRlY3QgaWYgd2UgaGF2ZSBPTUFQMSBvciBPTUFQMiAqLwpAQCAtNDM2LDE0ICs0MzgsMTUgQEAKICNkZWZpbmUgT01BUDM2MzBfUkVWX0VTMV8wCTB4MzYzMDAwMzQKIAogI2RlZmluZSBPTUFQMzVYWF9DTEFTUwkJMHgzNTAwMDAzNAotI2RlZmluZSBPTUFQMzUwM19SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MDMgPDwgMTYpIHwgKHYgPDwgMTIpKQotI2RlZmluZSBPTUFQMzUxNV9SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MTUgPDwgMTYpIHwgKHYgPDwgMTIpKQotI2RlZmluZSBPTUFQMzUyNV9SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MjUgPDwgMTYpIHwgKHYgPDwgMTIpKQotI2RlZmluZSBPTUFQMzUzMF9SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MzAgPDwgMTYpIHwgKHYgPDwgMTIpKQotI2RlZmluZSBPTUFQMzUwNV9SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MDUgPDwgMTYpIHwgKHYgPDwgMTIpKQotI2RlZmluZSBPTUFQMzUxN19SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MTcgPDwgMTYpIHwgKHYgPDwgMTIpKQorI2RlZmluZSBPTUFQMzUwM19SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MDMgPDwgMTYpIHwgKHYgPDwgOCkpCisjZGVmaW5lIE9NQVAzNTE1X1JFVih2KQkJKE9NQVAzNVhYX0NMQVNTIHwgKDB4MzUxNSA8PCAxNikgfCAodiA8PCA4KSkKKyNkZWZpbmUgT01BUDM1MjVfUkVWKHYpCQkoT01BUDM1WFhfQ0xBU1MgfCAoMHgzNTI1IDw8IDE2KSB8ICh2IDw8IDgpKQorI2RlZmluZSBPTUFQMzUzMF9SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MzAgPDwgMTYpIHwgKHYgPDwgOCkpCisjZGVmaW5lIE9NQVAzNTA1X1JFVih2KQkJKE9NQVAzNVhYX0NMQVNTIHwgKDB4MzUwNSA8PCAxNikgfCAodiA8PCA4KSkKKyNkZWZpbmUgT01BUDM1MTdfUkVWKHYpCQkoT01BUDM1WFhfQ0xBU1MgfCAoMHgzNTE3IDw8IDE2KSB8ICh2IDw8IDgpKQogCi0jZGVmaW5lIE9NQVA0NDNYX0NMQVNTCQkweDQ0MzAwMDM0CisjZGVmaW5lIE9NQVA0NDNYX0NMQVNTCQkweDQ0MzAwMDQ0CisjZGVmaW5lIE9NQVA0NDMwX1JFVl9FUzFfMAkweDQ0MzAwMDQ0CiAKIC8qCiAgKiBvbWFwX2NoaXAgYml0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmgKaW5kZXggMWMwMTdiMi4uNGVkZTllMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCkBAIC00MDEsMzMgKzQwMSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEhhcmR3YXJlIHJlZ2lzdGVycyBmb3IgTENEIERNQSAqLwotI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JBU0UJCSgweGZmZmVkYjAwKQotI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0NUUkwJCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAwKQotI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAyKQotI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9VCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA0KQotI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9MCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA2KQotI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA4KQotCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWUzMDApCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUAkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzApCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMikKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DVFJMCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjNCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjOCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYSkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYykKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjZSkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMikKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNikKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRUlfQjEJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDgpCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZGEpCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VOX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGUwKQotI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GTl9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlNCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9MQ0hfQ1RSTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlYSkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhmNCkKLQogI2RlZmluZSBPTUFQMV9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCiAjZGVmaW5lIE9NQVBfRE1BX0RST1BfSVJRCQkoMSA8PCAxKQogI2RlZmluZSBPTUFQX0RNQV9IQUxGX0lSUQkJKDEgPDwgMikKQEAgLTQ0MSw2ICs0MTQsOCBAQAogI2RlZmluZSBPTUFQMl9ETUFfU1VQRVJWSVNPUl9FUlJfSVJRCSgxIDw8IDEwKQogI2RlZmluZSBPTUFQMl9ETUFfTUlTQUxJR05FRF9FUlJfSVJRCSgxIDw8IDExKQogCisjZGVmaW5lIE9NQVBfRE1BX0NDUl9FTgkJCSgxIDw8IDcpCisKICNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1M4CQkweDAwCiAjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYJCTB4MDEKICNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1MzMgkJMHgwMgpAQCAtNTAzLDE0ICs0NzgsNiBAQAogI2RlZmluZSBETUFfQ0hfUFJJT19ISUdICQkweDEKICNkZWZpbmUgRE1BX0NIX1BSSU9fTE9XCQkJMHgwIC8qIERlZiAqLwogCi0vKiBMQ0QgRE1BIGJsb2NrIG51bWJlcnMgKi8KLWVudW0gewotCU9NQVBfTENEX0RNQV9CMV9UT1AsCi0JT01BUF9MQ0RfRE1BX0IxX0JPVFRPTSwKLQlPTUFQX0xDRF9ETUFfQjJfVE9QLAotCU9NQVBfTENEX0RNQV9CMl9CT1RUT00KLX07Ci0KIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSB7CiAJT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAogCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCwKQEAgLTY2MSwyMCArNjI4LDEzIEBACiBleHRlcm4gaW50IG9tYXBfZG1hX2NoYWluX3N0YXR1cyhpbnQgY2hhaW5faWQpOwogI2VuZGlmCiAKLS8qIExDRCBETUEgZnVuY3Rpb25zICovCi1leHRlcm4gaW50IG9tYXBfcmVxdWVzdF9sY2RfZG1hKHZvaWQgKCpjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCi0JCQkJdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBvbWFwX2ZyZWVfbGNkX2RtYSh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXBfZW5hYmxlX2xjZF9kbWEodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwX3N0b3BfbGNkX2RtYSh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfZXh0X2NvbnRyb2xsZXIoaW50IGV4dGVybmFsKTsKLWV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfc2luZ2xlX3RyYW5zZmVyKGludCBzaW5nbGUpOwotZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBmYl94cmVzLCB1MTYgZmJfeXJlcywKLQkJCQlpbnQgZGF0YV90eXBlKTsKLWV4dGVybiB2b2lkIG9tYXBfc2V0X2xjZF9kbWFfYjFfcm90YXRpb24oaW50IHJvdGF0ZSk7Ci1leHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKHVuc2lnbmVkIGxvbmcgdnhyZXMpOwotZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9taXJyb3IoaW50IG1pcnJvcik7Ci1leHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpICYmIGRlZmluZWQoQ09ORklHX0ZCX09NQVApCisjaW5jbHVkZSA8bWFjaC9sY2RfZG1hLmg+CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgb21hcF9sY2RfZG1hX3J1bm5pbmcodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaAppbmRleCA2OTZlMGNhLi5lMDgxMzM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaApAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFU0laRV8xNiAgICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFKDEpCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKHZhbCkgICAgKCh2YWwgJiAzKSA8PCAxMCkKICNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEVfTk9SICAgICBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSgwKQotI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRV9OQU5EICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKDEpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFX05BTkQgICAgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUoMikKICNkZWZpbmUgR1BNQ19DT05GSUcxX01VWEFERERBVEEgICAgICAgICAoMSA8PCA5KQogI2RlZmluZSBHUE1DX0NPTkZJRzFfVElNRV9QQVJBX0dSQU4gICAgICgxIDw8IDQpCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVih2YWwpICAgICAgKHZhbCAmIDMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2kyYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODVkOWNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pMmMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogSGVscGVyIG1vZHVsZSBmb3IgYm9hcmQgc3BlY2lmaWMgSTJDIGJ1cyByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQorZXh0ZXJuIGludCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCisJCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKKwkJCQkgdW5zaWduZWQgbGVuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCisJCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKKwkJCQkgdW5zaWduZWQgbGVuKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKKwkJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAorCQkJCSB1bnNpZ25lZCBsZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaAppbmRleCBjZTVkZDJkLi45N2Q2YzUwYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC00NzIsOCArNDcyLDIyIEBACiAjZW5kaWYKICNkZWZpbmUgVFdMNDAzMF9HUElPX0lSUV9FTkQJKFRXTDQwMzBfR1BJT19JUlFfQkFTRSArIFRXTDQwMzBfR1BJT19OUl9JUlFTKQogCisjZGVmaW5lCVRXTDYwMzBfSVJRX0JBU0UJKE9NQVBfRlBHQV9JUlFfRU5EKQorI2lmZGVmIENPTkZJR19UV0w0MDMwX0NPUkUKKyNkZWZpbmUJVFdMNjAzMF9CQVNFX05SX0lSUVMJMjAKKyNlbHNlCisjZGVmaW5lCVRXTDYwMzBfQkFTRV9OUl9JUlFTCTAKKyNlbmRpZgorI2RlZmluZSBUV0w2MDMwX0lSUV9FTkQJCShUV0w2MDMwX0lSUV9CQVNFICsgVFdMNjAzMF9CQVNFX05SX0lSUVMpCisKIC8qIFRvdGFsIG51bWJlciBvZiBpbnRlcnJ1cHRzIGRlcGVuZHMgb24gdGhlIGVuYWJsZWQgYmxvY2tzIGFib3ZlICovCi0jZGVmaW5lIE5SX0lSUVMJCQlUV0w0MDMwX0dQSU9fSVJRX0VORAorI2lmIChUV0w0MDMwX0dQSU9fSVJRX0VORCA+IFRXTDYwMzBfSVJRX0VORCkKKyNkZWZpbmUgVFdMX0lSUV9FTkQgCQlUV0w0MDMwX0dQSU9fSVJRX0VORAorI2Vsc2UKKyNkZWZpbmUgVFdMX0lSUV9FTkQJCVRXTDYwMzBfSVJRX0VORAorI2VuZGlmCisKKyNkZWZpbmUgTlJfSVJRUwkJCVRXTF9JUlFfRU5ECiAKICNkZWZpbmUgT01BUF9JUlFfQklUKGlycSkJKDEgPDwgKChpcnEpICUgMzIpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaAppbmRleCBiYTc3ZGU2Li44ZjA2OWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXV4LmgKQEAgLTEzMCw1OCArMTMwLDExIEBACiAjZGVmaW5lIE9NQVAyX1BVTExfVVAJCSgxIDw8IDQpCiAjZGVmaW5lIE9NQVAyX0FMVEVMRUNUUklDQUxTRUwJKDEgPDwgNSkKIAotLyogMzR4eCBzcGVjaWZpYyBtdXggYml0IGRlZmluZXMgKi8KLSNkZWZpbmUgT01BUDNfSU5QVVRfRU4JCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAzX09GRl9FTgkJKDEgPDwgOSkKLSNkZWZpbmUgT01BUDNfT0ZGT1VUX0VOCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDNfT0ZGT1VUX1ZBTAkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDNfT0ZGX1BVTExfRU4JKDEgPDwgMTIpCi0jZGVmaW5lIE9NQVAzX09GRl9QVUxMX1VQCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQM19XQUtFVVBfRU4JCSgxIDw8IDE0KQotCi0vKiAzNHh4IG11eCBtb2RlIG9wdGlvbnMgZm9yIGVhY2ggcGluLiBTZWUgVFJNIGZvciBvcHRpb25zICovCi0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMAkwCi0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMQkxCi0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMgkyCi0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMwkzCi0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNAk0Ci0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNQk1Ci0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNgk2Ci0jZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNwk3Ci0KLS8qIDM0eHggYWN0aXZlIHBpbiBzdGF0ZXMgKi8KLSNkZWZpbmUgT01BUDM0WFhfUElOX09VVFBVVAkJMAotI2RlZmluZSBPTUFQMzRYWF9QSU5fSU5QVVQJCU9NQVAzX0lOUFVUX0VOCi0jZGVmaW5lIE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVAJKE9NQVAyX1BVTExfRU5BIHwgT01BUDNfSU5QVVRfRU4gXAotCQkJCQkJfCBPTUFQMl9QVUxMX1VQKQotI2RlZmluZSBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04JKE9NQVAyX1BVTExfRU5BIHwgT01BUDNfSU5QVVRfRU4pCi0KLS8qIDM0eHggb2ZmIG1vZGUgc3RhdGVzICovCi0jZGVmaW5lIE9NQVAzNFhYX1BJTl9PRkZfTk9ORSAgICAgICAgICAgMAotI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX09VVFBVVF9ISUdICShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZPVVRfRU4gXAotCQkJCQkJfCBPTUFQM19PRkZPVVRfVkFMKQotI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX09VVFBVVF9MT1cJKE9NQVAzX09GRl9FTiB8IE9NQVAzX09GRk9VVF9FTikKLSNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9JTlBVVF9QVUxMVVAJKE9NQVAzX09GRl9FTiB8IE9NQVAzX09GRl9QVUxMX0VOIFwKLQkJCQkJCXwgT01BUDNfT0ZGX1BVTExfVVApCi0jZGVmaW5lIE9NQVAzNFhYX1BJTl9PRkZfSU5QVVRfUFVMTERPV04JKE9NQVAzX09GRl9FTiB8IE9NQVAzX09GRl9QVUxMX0VOKQotI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX1dBS0VVUEVOQUJMRQlPTUFQM19XQUtFVVBfRU4KLQotI2RlZmluZSBNVVhfQ0ZHXzM0WFgoZGVzYywgcmVnX29mZnNldCwgbXV4X3ZhbHVlKSB7CQlcCi0JLm5hbWUJCT0gZGVzYywJCQkJCVwKLQkuZGVidWcJCT0gMCwJCQkJCVwKLQkubXV4X3JlZwk9IHJlZ19vZmZzZXQsCQkJCVwKLQkubXV4X3ZhbAk9IG11eF92YWx1ZQkJCQlcCi19LAotCiBzdHJ1Y3QgcGluX2NvbmZpZyB7CiAJY2hhciAJCQkqbmFtZTsKIAljb25zdCB1bnNpZ25lZCBpbnQgCW11eF9yZWc7CiAJdW5zaWduZWQgY2hhcgkJZGVidWc7CiAKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQotCXUxNgkJCW11eF92YWw7IC8qIFdha2UtdXAsIG9mZiBtb2RlLCBwdWxsLCBtdXggbW9kZSAqLwotI2VuZGlmCi0KICNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFza19vZmZzZXQ7CiAJY29uc3QgdW5zaWduZWQgY2hhciBtYXNrOwpAQCAtMjE5LDExICsxNzIsMTcgQEAKIAlBQTE3XzdYWF9VU0JfRE0sCiAJVzE2XzdYWF9VU0JfUFVfRU4sCiAJVzE3XzdYWF9VU0JfVkJVU0ksCisJVzE4XzdYWF9VU0JfRE1DS19PVVQsCisJVzE5XzdYWF9VU0JfRENSU1QsCiAKIAkvKiBNTUMgKi8KIAlNTUNfN1hYX0NNRCwKIAlNTUNfN1hYX0NMSywKIAlNTUNfN1hYX0RBVDAsCisKKwkvKiBJMkMgKi8KKwlJMkNfN1hYX1NDTCwKKwlJMkNfN1hYX1NEQSwKIH07CiAKIGVudW0gb21hcDF4eHhfaW5kZXggewpAQCAtNjgxLDE4MSArNjQwLDYgQEAKIAogfTsKIAotZW51bSBvbWFwMzR4eF9pbmRleCB7Ci0JLyogMzR4eCBJMkMgKi8KLQlLMjFfMzRYWF9JMkMxX1NDTCwKLQlKMjFfMzRYWF9JMkMxX1NEQSwKLQlBRjE1XzM0WFhfSTJDMl9TQ0wsCi0JQUUxNV8zNFhYX0kyQzJfU0RBLAotCUFGMTRfMzRYWF9JMkMzX1NDTCwKLQlBRzE0XzM0WFhfSTJDM19TREEsCi0JQUQyNl8zNFhYX0kyQzRfU0NMLAotCUFFMjZfMzRYWF9JMkM0X1NEQSwKLQotCS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCi0JWThfMzQzMF9VU0IxSFNfUEhZX0NMSywKLQlZOV8zNDMwX1VTQjFIU19QSFlfU1RQLAotCUFBMTRfMzQzMF9VU0IxSFNfUEhZX0RJUiwKLQlBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQsCi0JVzEzXzM0MzBfVVNCMUhTX1BIWV9EQVRBMCwKLQlXMTJfMzQzMF9VU0IxSFNfUEhZX0RBVEExLAotCVcxMV8zNDMwX1VTQjFIU19QSFlfREFUQTIsCi0JWTExXzM0MzBfVVNCMUhTX1BIWV9EQVRBMywKLQlXOV8zNDMwX1VTQjFIU19QSFlfREFUQTQsCi0JWTEyXzM0MzBfVVNCMUhTX1BIWV9EQVRBNSwKLQlXOF8zNDMwX1VTQjFIU19QSFlfREFUQTYsCi0JWTEzXzM0MzBfVVNCMUhTX1BIWV9EQVRBNywKLQotCS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMiovCi0JQUE4XzM0MzBfVVNCMkhTX1BIWV9DTEssCi0JQUExMF8zNDMwX1VTQjJIU19QSFlfU1RQLAotCUFBOV8zNDMwX1VTQjJIU19QSFlfRElSLAotCUFCMTFfMzQzMF9VU0IySFNfUEhZX05YVCwKLQlBQjEwXzM0MzBfVVNCMkhTX1BIWV9EQVRBMCwKLQlBQjlfMzQzMF9VU0IySFNfUEhZX0RBVEExLAotCVczXzM0MzBfVVNCMkhTX1BIWV9EQVRBMiwKLQlUNF8zNDMwX1VTQjJIU19QSFlfREFUQTMsCi0JVDNfMzQzMF9VU0IySFNfUEhZX0RBVEE0LAotCVIzXzM0MzBfVVNCMkhTX1BIWV9EQVRBNSwKLQlSNF8zNDMwX1VTQjJIU19QSFlfREFUQTYsCi0JVDJfMzQzMF9VU0IySFNfUEhZX0RBVEE3LAotCi0KLQkvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLwotCVk4XzM0MzBfVVNCMUhTX1RMTF9DTEssCi0JWTlfMzQzMF9VU0IxSFNfVExMX1NUUCwKLQlBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIsCi0JQUExMV8zNDMwX1VTQjFIU19UTExfTlhULAotCVcxM18zNDMwX1VTQjFIU19UTExfREFUQTAsCi0JVzEyXzM0MzBfVVNCMUhTX1RMTF9EQVRBMSwKLQlXMTFfMzQzMF9VU0IxSFNfVExMX0RBVEEyLAotCVkxMV8zNDMwX1VTQjFIU19UTExfREFUQTMsCi0JVzlfMzQzMF9VU0IxSFNfVExMX0RBVEE0LAotCVkxMl8zNDMwX1VTQjFIU19UTExfREFUQTUsCi0JVzhfMzQzMF9VU0IxSFNfVExMX0RBVEE2LAotCVkxM18zNDMwX1VTQjFIU19UTExfREFUQTcsCi0KLQkvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLwotCUFBOF8zNDMwX1VTQjJIU19UTExfQ0xLLAotCUFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCwKLQlBQTlfMzQzMF9VU0IySFNfVExMX0RJUiwKLQlBQjExXzM0MzBfVVNCMkhTX1RMTF9OWFQsCi0JQUIxMF8zNDMwX1VTQjJIU19UTExfREFUQTAsCi0JQUI5XzM0MzBfVVNCMkhTX1RMTF9EQVRBMSwKLQlXM18zNDMwX1VTQjJIU19UTExfREFUQTIsCi0JVDRfMzQzMF9VU0IySFNfVExMX0RBVEEzLAotCVQzXzM0MzBfVVNCMkhTX1RMTF9EQVRBNCwKLQlSM18zNDMwX1VTQjJIU19UTExfREFUQTUsCi0JUjRfMzQzMF9VU0IySFNfVExMX0RBVEE2LAotCVQyXzM0MzBfVVNCMkhTX1RMTF9EQVRBNywKLQotCS8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCi0JQUE2XzM0MzBfVVNCM0hTX1RMTF9DTEssCi0JQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAsCi0JQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIsCi0JWTNfMzQzMF9VU0IzSFNfVExMX05YVCwKLQlBQTVfMzQzMF9VU0IzSFNfVExMX0RBVEEwLAotCVk0XzM0MzBfVVNCM0hTX1RMTF9EQVRBMSwKLQlZNV8zNDMwX1VTQjNIU19UTExfREFUQTIsCi0JVzVfMzQzMF9VU0IzSFNfVExMX0RBVEEzLAotCUFCMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE0LAotCUFCMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE1LAotCUFBMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE2LAotCUFBMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE3LAotCi0JLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KLQlBRjEwXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhEUCwKLQlBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNLAotCVcxM18zNDMwX1VTQjFGU19QSFlfTU0xX1JYUkNWLAotCVcxMl8zNDMwX1VTQjFGU19QSFlfTU0xX1RYU0UwLAotCVcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFULAotCVkxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYRU5fTiwKLQotCS8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCi0JQUY3XzM0MzBfVVNCMkZTX1BIWV9NTTJfUlhEUCwKLQlBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNLAotCUFCMTBfMzQzMF9VU0IyRlNfUEhZX01NMl9SWFJDViwKLQlBQjlfMzQzMF9VU0IyRlNfUEhZX01NMl9UWFNFMCwKLQlXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFULAotCVQ0XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhFTl9OLAotCi0JLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KLQlBSDNfMzQzMF9VU0IzRlNfUEhZX01NM19SWERQLAotCUFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0sCi0JQUQxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhSQ1YsCi0JQUUxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhTRTAsCi0JQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQsCi0JQUMxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhFTl9OLAotCi0JLyogMzR4eCBHUElPCi0JICogIC0gbm9ybWFsbHkgdGhlc2UgYXJlIGJpZGlyZWN0aW9uYWwsIG5vIGludGVybmFsIHB1bGx1cC9wdWxsZG93bgotCSAqICAtICJfVVAiIHN1ZmZpeCAoR1BJTzNfVVApIGlmIGludGVybmFsIHB1bGx1cCBpcyBjb25maWd1cmVkCi0JICogIC0gIl9ET1dOIiBzdWZmaXggKEdQSU8zX0RPV04pIHdpdGggaW50ZXJuYWwgcHVsbGRvd24KLQkgKiAgLSAiX09VVCIgc3VmZml4IChHUElPM19PVVQpIGZvciBvdXRwdXQtb25seSBwaW5zICh1bmxpa2UgMjR4eCkKLQkgKi8KLQlBRjI2XzM0WFhfR1BJTzAsCi0JQUYyMl8zNFhYX0dQSU85LAotCUFHOV8zNFhYX0dQSU8yMywKLQlBSDhfMzRYWF9HUElPMjksCi0JVThfMzRYWF9HUElPNTRfT1VULAotCVU4XzM0WFhfR1BJTzU0X0RPV04sCi0JTDhfMzRYWF9HUElPNjMsCi0JRzI1XzM0WFhfR1BJTzg2X09VVCwKLQlBRzRfMzRYWF9HUElPMTM0X09VVCwKLQlBRjRfMzRYWF9HUElPMTM1X09VVCwKLQlBRTRfMzRYWF9HUElPMTM2X09VVCwKLQlBRjZfMzRYWF9HUElPMTQwX1VQLAotCUFFNl8zNFhYX0dQSU8xNDEsCi0JQUY1XzM0WFhfR1BJTzE0MiwKLQlBRTVfMzRYWF9HUElPMTQzLAotCUgxOV8zNFhYX0dQSU8xNjRfT1VULAotCUoyNV8zNFhYX0dQSU8xNzAsCi0KLQkvKiBPTUFQMyBTRFJDIENLRSBzaWduYWxzIHRvIFNEUi9ERFIgcmFtIGNoaXBzICovCi0JSDE2XzM0WFhfU0RSQ19DS0UwLAotCUgxN18zNFhYX1NEUkNfQ0tFMSwKLQotCS8qIE1NQzEgKi8KLQlOMjhfMzQzMF9NTUMxX0NMSywKLQlNMjdfMzQzMF9NTUMxX0NNRCwKLQlOMjdfMzQzMF9NTUMxX0RBVDAsCi0JTjI2XzM0MzBfTU1DMV9EQVQxLAotCU4yNV8zNDMwX01NQzFfREFUMiwKLQlQMjhfMzQzMF9NTUMxX0RBVDMsCi0JUDI3XzM0MzBfTU1DMV9EQVQ0LAotCVAyNl8zNDMwX01NQzFfREFUNSwKLQlSMjdfMzQzMF9NTUMxX0RBVDYsCi0JUjI1XzM0MzBfTU1DMV9EQVQ3LAotCi0JLyogTU1DMiAqLwotCUFFMl8zNDMwX01NQzJfQ0xLLAotCUFHNV8zNDMwX01NQzJfQ01ELAotCUFINV8zNDMwX01NQzJfREFUMCwKLQlBSDRfMzQzMF9NTUMyX0RBVDEsCi0JQUc0XzM0MzBfTU1DMl9EQVQyLAotCUFGNF8zNDMwX01NQzJfREFUMywKLQlBRTRfMzQzMF9NTUMyX0RBVDQsCi0JQUgzXzM0MzBfTU1DMl9EQVQ1LAotCUFGM18zNDMwX01NQzJfREFUNiwKLQlBRTNfMzQzMF9NTUMyX0RBVDcsCi0KLQkvKiBNTUMzICovCi0JQUYxMF8zNDMwX01NQzNfQ0xLLAotCUFDM18zNDMwX01NQzNfQ01ELAotCUFFMTFfMzQzMF9NTUMzX0RBVDAsCi0JQUg5XzM0MzBfTU1DM19EQVQxLAotCUFGMTNfMzQzMF9NTUMzX0RBVDIsCi0JQUYxM18zNDMwX01NQzNfREFUMywKLQotCS8qIFNZU19OSVJRIFQyIElOVDEgKi8KLQlBRjI2XzM0WFhfU1lTX05JUlEsCi0KLQkvKiBFSENJIEdQSU8ncyBmb3IgT01BUDNFVk0gKFJldiA+PSBFKSAqLwotCUFIMTRfMzRYWF9HUElPMjEsCi0JQUY5XzM0WFhfR1BJTzIyLAotCVUzXzM0WFhfR1BJTzYxLAotfTsKLQogc3RydWN0IG9tYXBfbXV4X2NmZyB7CiAJc3RydWN0IHBpbl9jb25maWcJKnBpbnM7CiAJdW5zaWduZWQgbG9uZwkJc2l6ZTsKQEAgLTg2NSwxNCArNjQ5LDE0IEBACiAjaWZkZWYJQ09ORklHX09NQVBfTVVYCiAvKiBzZXR1cCBwaW4gbXV4aW5nIGluIExpbnV4ICovCiBleHRlcm4gaW50IG9tYXAxX211eF9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBvbWFwMl9tdXhfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgb21hcF9tdXhfcmVnaXN0ZXIoc3RydWN0IG9tYXBfbXV4X2NmZyAqKTsKIGV4dGVybiBpbnQgb21hcF9jZmdfcmVnKHVuc2lnbmVkIGxvbmcgcmVnX2NmZyk7CiAjZWxzZQogLyogYm9vdCBsb2FkZXIgZG9lcyBpdCBhbGwgKG5vIHdhcm5pbmdzIGZyb20gQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKSAqLwogc3RhdGljIGlubGluZSBpbnQgb21hcDFfbXV4X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgb21hcDJfbXV4X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgb21hcF9jZmdfcmVnKHVuc2lnbmVkIGxvbmcgcmVnX2NmZykgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKK2V4dGVybiBpbnQgb21hcDJfbXV4X2luaXQodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oCmluZGV4IGU1MjkwMmEuLmVmODcwZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmgKQEAgLTI2LDggKzI2LDEwIEBACiAjZGVmaW5lIE9NQVA0NFhYX0VNSUYyX0JBU0UJCTB4NGQwMDAwMDAKICNkZWZpbmUgT01BUDQ0WFhfRE1NX0JBU0UJCTB4NGUwMDAwMDAKICNkZWZpbmUgT01BUDQ0MzBfMzJLU1lOQ1RfQkFTRQkJMHg0YTMwNDAwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9CQVNFCQkweDRhMDA0MDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9CQVNFCQkweDQ4MzA2MDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9CQVNFCQkweDRhMDA0MDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0JBU0UJCU9NQVA0NDMwX0NNMV9CQVNFCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9CQVNFCQkweDRhMDA4MDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9CQVNFCQkweDRhMzA2MDAwCiAjZGVmaW5lIE9NQVA0NFhYX0dQTUNfQkFTRQkJMHg1MDAwMDAwMAogI2RlZmluZSBPTUFQNDQzWF9TQ01fQkFTRQkJMHg0YTAwMjAwMAogI2RlZmluZSBPTUFQNDQzWF9DVFJMX0JBU0UJCU9NQVA0NDNYX1NDTV9CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmgKaW5kZXggMTFhOTc3My4uZGMxZmFjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9kZXZpY2UuaApAQCAtNTAsOCArNTAsOCBAQAogICogQHBtX2xhdHM6IHB0ciB0byBhbiBvbWFwX2RldmljZV9wbV9sYXRlbmN5IHRhYmxlCiAgKiBAcG1fbGF0c19jbnQ6IEFSUkFZX1NJWkUoKSBvZiB3aGF0IGlzIHBhc3NlZCB0byBAcG1fbGF0cwogICogQHBtX2xhdF9sZXZlbDogYXJyYXkgaW5kZXggb2YgdGhlIGxhc3Qgb2RwbCBlbnRyeSBleGVjdXRlZCAtIC0xIGlmIG5ldmVyCi0gKiBAZGV2X3dha2V1cF9sYXQ6IGRldiB3YWtldXAgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKLSAqIEBfZGV2X3dha2V1cF9sYXRfbGltaXQ6IGRldiB3YWtldXAgbGF0ZW5jeSBsaW1pdCBpbiB1c2VjIC0gc2V0IGJ5IE9NQVAgUE0KKyAqIEBkZXZfd2FrZXVwX2xhdDogZGV2IHdha2V1cCBsYXRlbmN5IGluIG5hbm9zZWNvbmRzCisgKiBAX2Rldl93YWtldXBfbGF0X2xpbWl0OiBkZXYgd2FrZXVwIGxhdGVuY3kgbGltaXQgaW4gbnNlYyAtIHNldCBieSBPTUFQIFBNCiAgKiBAX3N0YXRlOiBvbmUgb2YgT01BUF9ERVZJQ0VfU1RBVEVfKiAoc2VlIGFib3ZlKQogICogQGZsYWdzOiBkZXZpY2UgZmxhZ3MKICAqCkBAIC0xMzcsNSArMTM3LDcgQEAKIH07CiAKIAotI2VuZGlmCisvKiBHZXQgb21hcF9kZXZpY2UgcG9pbnRlciBmcm9tIHBsYXRmb3JtX2RldmljZSBwb2ludGVyICovCisjZGVmaW5lIHRvX29tYXBfZGV2aWNlKHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBvbWFwX2RldmljZSwgcGRldikKIAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCmluZGV4IGRiZGQxMjMuLjAwNzkzNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIFNZU0NfRU5BV0FLRVVQX01BU0sJCSgxIDw8IFNZU0NfRU5BV0FLRVVQX1NISUZUKQogI2RlZmluZSBTWVNDX1NPRlRSRVNFVF9TSElGVAkJMQogI2RlZmluZSBTWVNDX1NPRlRSRVNFVF9NQVNLCQkoMSA8PCBTWVNDX1NPRlRSRVNFVF9TSElGVCkKKyNkZWZpbmUgU1lTQ19BVVRPSURMRV9TSElGVAkJMAorI2RlZmluZSBTWVNDX0FVVE9JRExFX01BU0sJCSgxIDw8IFNZU0NfQVVUT0lETEVfU0hJRlQpCiAKIC8qIE9DUCBTWVNTVEFUVVMgYml0IHNoaWZ0cy9tYXNrcyAqLwogI2RlZmluZSBTWVNTX1JFU0VURE9ORV9TSElGVAkJMApAQCAtNjIsNyArNjQsMjEgQEAKIAogCiAvKioKLSAqIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIC0gTVBVIGFkZHJlc3Mgc3BhY2UgaGFuZGxlZCBieSB0aGUgaHdtb2QKKyAqIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIC0gTVBVIElSUXMgdXNlZCBieSB0aGUgaHdtb2QKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBJUlEgY2hhbm5lbCAobW9kdWxlIGxvY2FsIG5hbWUpCisgKiBAaXJxX2NoOiBJUlEgY2hhbm5lbCBJRAorICoKKyAqIEBuYW1lIHNob3VsZCBiZSBzb21ldGhpbmcgc2hvcnQsIGUuZy4sICJ0eCIgb3IgInJ4Ii4gIEl0IGlzIGZvciB1c2UKKyAqIGJ5IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoKS4gIEl0IGlzIGRlZmluZWQgbG9jYWxseSB0byB0aGUKKyAqIGh3bW9kLgorICovCitzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1MTYJCWlycTsKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gLSBETUEgY2hhbm5lbHMgdXNlZCBieSB0aGUgaHdtb2QKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBETUEgY2hhbm5lbCAobW9kdWxlIGxvY2FsIG5hbWUpCiAgKiBAZG1hX2NoOiBETUEgY2hhbm5lbCBJRAogICoKQEAgLTI5NCwxMyArMzEwLDE3IEBACiAgKiAgICAgU0RSQU0gY29udHJvbGxlciwgZXRjLgogICogSFdNT0RfSU5JVF9OT19JRExFOiBkb24ndCBpZGxlIHRoaXMgbW9kdWxlIGF0IGJvb3QgLSBpbXBvcnRhbnQgZm9yIFNEUkFNCiAgKiAgICAgY29udHJvbGxlciwgZXRjLgorICogSFdNT0RfTk9fQVVUT0lETEU6IGRpc2FibGUgbW9kdWxlIGF1dG9pZGxlIChPQ1BfU1lTQ09ORklHLkFVVE9JRExFKQorICogICAgIHdoZW4gbW9kdWxlIGlzIGVuYWJsZWQsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0LCB3aGljaCBpcyB0bworICogICAgIGVuYWJsZSBhdXRvaWRsZQogICogSFdNT0RfU0VUX0RFRkFVTFRfQ0xPQ0tBQ1Q6IHByb2dyYW0gQ0xPQ0tBQ1RJVklUWSBiaXRzIGF0IHN0YXJ0dXAKICAqLwogI2RlZmluZSBIV01PRF9TV1NVUF9TSURMRQkJCSgxIDw8IDApCiAjZGVmaW5lIEhXTU9EX1NXU1VQX01TVEFOREJZCQkJKDEgPDwgMSkKICNkZWZpbmUgSFdNT0RfSU5JVF9OT19SRVNFVAkJCSgxIDw8IDIpCiAjZGVmaW5lIEhXTU9EX0lOSVRfTk9fSURMRQkJCSgxIDw8IDMpCi0jZGVmaW5lIEhXTU9EX1NFVF9ERUZBVUxUX0NMT0NLQUNUCQkoMSA8PCA0KQorI2RlZmluZSBIV01PRF9OT19PQ1BfQVVUT0lETEUJCQkoMSA8PCA0KQorI2RlZmluZSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVAkJKDEgPDwgNSkKIAogLyoKICAqIG9tYXBfaHdtb2QuX2ludF9mbGFncyBkZWZpbml0aW9ucwpAQCAtMzczLDcgKzM5Myw3IEBACiBzdHJ1Y3Qgb21hcF9od21vZCB7CiAJY29uc3QgY2hhcgkJCSpuYW1lOwogCXN0cnVjdCBvbWFwX2RldmljZQkJKm9kOwotCXU4CQkJCSptcHVfaXJxczsKKwlzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbwkqbXB1X2lycXM7CiAJc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8JKnNkbWFfY2hzOwogCXVuaW9uIHsKIAkJc3RydWN0IG9tYXBfaHdtb2Rfb21hcDJfcHJjbSBvbWFwMjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcG93ZXJkb21haW4uaAppbmRleCAzZDQ1ZWUxLi4wYjk2MDA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wb3dlcmRvbWFpbi5oCkBAIC0yOCw2ICsyOCw4IEBACiAjZGVmaW5lIFBXUkRNX1BPV0VSX0lOQUNUSVZFCTB4MgogI2RlZmluZSBQV1JETV9QT1dFUl9PTgkJMHgzCiAKKyNkZWZpbmUgUFdSRE1fTUFYX1BXUlNUUwk0CisKIC8qIFBvd2VyZG9tYWluIGFsbG93YWJsZSBzdGF0ZSBiaXRmaWVsZHMgKi8KICNkZWZpbmUgUFdSU1RTX09GRl9PTgkJKCgxIDw8IFBXUkRNX1BPV0VSX09GRikgfCBcCiAJCQkJICgxIDw8IFBXUkRNX1BPV0VSX09OKSkKQEAgLTQwLDcgKzQyLDEwIEBACiAKIC8qIFBvd2VyZG9tYWluIGZsYWdzICovCiAjZGVmaW5lIFBXUkRNX0hBU19IRFdSX1NBUgkoMSA8PCAwKSAvKiBoYXJkd2FyZSBzYXZlLWFuZC1yZXN0b3JlIHN1cHBvcnQgKi8KLQorI2RlZmluZSBQV1JETV9IQVNfTVBVX1FVSVJLCSgxIDw8IDEpIC8qIE1QVSBwd3IgZG9tYWluIGhhcyBNRU0gYmFuayAwIGJpdHMKKwkJCQkJICAqIGluIE1FTSBiYW5rIDEgcG9zaXRpb24uIFRoaXMgaXMKKwkJCQkJICAqIHRydWUgZm9yIE9NQVAzNDMwCisJCQkJCSAgKi8KIAogLyoKICAqIE51bWJlciBvZiBtZW1vcnkgYmFua3MgdGhhdCBhcmUgcG93ZXItY29udHJvbGxhYmxlLglPbiBPTUFQMzQzMCwgdGhlCkBAIC04NSwxNSArOTAsMTUgQEAKIAkvKiBVc2VkIHRvIHJlcHJlc2VudCB0aGUgT01BUCBjaGlwIHR5cGVzIGNvbnRhaW5pbmcgdGhpcyBwd3JkbSAqLwogCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOwogCi0JLyogQml0IHNoaWZ0IG9mIHRoaXMgcG93ZXJkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQgKi8KLQljb25zdCB1OCBkZXBfYml0OwotCiAJLyogUG93ZXJkb21haW5zIHRoYXQgY2FuIGJlIHRvbGQgdG8gd2FrZSB0aGlzIHBvd2VyZG9tYWluIHVwICovCiAJc3RydWN0IHB3cmRtX2RlcCAqd2tkZXBfc3JjczsKIAogCS8qIFBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSB0b2xkIHRvIGtlZXAgdGhpcyBwd3JkbSBmcm9tIGluYWN0aXZpdHkgKi8KIAlzdHJ1Y3QgcHdyZG1fZGVwICpzbGVlcGRlcF9zcmNzOwogCisJLyogQml0IHNoaWZ0IG9mIHRoaXMgcG93ZXJkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQgKi8KKwljb25zdCB1OCBkZXBfYml0OworCiAJLyogUG9zc2libGUgcG93ZXJkb21haW4gcG93ZXIgc3RhdGVzICovCiAJY29uc3QgdTggcHdyc3RzOwogCkBAIC0xMTgsMTEgKzEyMywxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAogCWludCBzdGF0ZTsKLQl1bnNpZ25lZCBzdGF0ZV9jb3VudGVyWzRdOworCXVuc2lnbmVkIHN0YXRlX2NvdW50ZXJbUFdSRE1fTUFYX1BXUlNUU107CiAKICNpZmRlZiBDT05GSUdfUE1fREVCVUcKIAlzNjQgdGltZXI7Ci0JczY0IHN0YXRlX3RpbWVyWzRdOworCXM2NCBzdGF0ZV90aW1lcltQV1JETV9NQVhfUFdSU1RTXTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2VyaWFsLmgKaW5kZXggOTk1MTM0NS4uZjVhNGE5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oCkBAIC01Myw2ICs1Myw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIGV4dGVybiB2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9lYXJseV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2luaXRfcG9ydChpbnQgcG9ydCk7CiBleHRlcm4gaW50IG9tYXBfdWFydF9jYW5fc2xlZXAodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3VhcnRfY2hlY2tfd2FrZXVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF91YXJ0X3ByZXBhcmVfc3VzcGVuZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21wLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NtcC5oCmluZGV4IGRjYWE4ZmQuLjg5ODNkNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21wLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zbXAuaApAQCAtMjgsNiArMjgsOCBAQAogCiAvKiBOZWVkZWQgZm9yIHNlY29uZGFyeSBjb3JlIGJvb3QgKi8KIGV4dGVybiB2b2lkIG9tYXBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CitleHRlcm4gdTMyIG9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCh1MzIgc2V0X21hc2ssIHUzMiBjbGVhcl9tYXNrKTsKK2V4dGVybiB2b2lkIG9tYXBfYXV4Y29yZWJvb3RfYWRkcih1MzIgY3B1X2FkZHIpOwogCiAvKgogICogV2UgdXNlIFNvZnQgSVJRMSBhcyB0aGUgSVBJCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKaW5kZXggMDVhZWJjYS4uMDY3MDM2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwpAQCAtNTQsOCArNTQsMTIgQEAKIHsKIAlzdHJ1Y3QgcGluX2NvbmZpZyAqcmVnOwogCi0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlyZXR1cm4gMDsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IEJyb2tlbiBvbWFwX2NmZ19yZWcoJWx1KSBlbnRyeVxuIiwKKwkJCQlpbmRleCk7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmIChtdXhfY2ZnID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQaW4gbXV4IHRhYmxlIG5vdCBpbml0aWFsaXplZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IGJiMTZlNjIuLjFlNTY0OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC0xMzQsMTggKzEzNCwxOCBAQAogCQkgICAgKG9kLT5kZXZfd2FrZXVwX2xhdCA8PSBvZC0+X2Rldl93YWtldXBfbGF0X2xpbWl0KSkKIAkJCWJyZWFrOwogCi0JCWdldG5zdGltZW9mZGF5KCZhKTsKKwkJcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCZhKTsKIAogCQkvKiBYWFggY2hlY2sgcmV0dXJuIGNvZGUgKi8KIAkJb2RwbC0+YWN0aXZhdGVfZnVuYyhvZCk7CiAKLQkJZ2V0bnN0aW1lb2ZkYXkoJmIpOworCQlyZWFkX3BlcnNpc3RlbnRfY2xvY2soJmIpOwogCiAJCWMgPSB0aW1lc3BlY19zdWIoYiwgYSk7Ci0JCWFjdF9sYXQgPSB0aW1lc3BlY190b19ucygmYykgKiBOU0VDX1BFUl9VU0VDOworCQlhY3RfbGF0ID0gdGltZXNwZWNfdG9fbnMoJmMpOwogCiAJCXByX2RlYnVnKCJvbWFwX2RldmljZTogJXM6IHBtX2xhdCAlZDogYWN0aXZhdGU6IGVsYXBzZWQgdGltZSAiCi0JCQkgIiVsbHUgdXNlY1xuIiwgb2QtPnBkZXYubmFtZSwgb2QtPnBtX2xhdF9sZXZlbCwKKwkJCSAiJWxsdSBuc2VjXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cG1fbGF0X2xldmVsLAogCQkJIGFjdF9sYXQpOwogCiAJCVdBUk4oYWN0X2xhdCA+IG9kcGwtPmFjdGl2YXRlX2xhdCwgIm9tYXBfZGV2aWNlOiAlcy4lZDogIgpAQCAtMTkwLDE4ICsxOTAsMTggQEAKIAkJICAgICBvZC0+X2Rldl93YWtldXBfbGF0X2xpbWl0KSkKIAkJCWJyZWFrOwogCi0JCWdldG5zdGltZW9mZGF5KCZhKTsKKwkJcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCZhKTsKIAogCQkvKiBYWFggY2hlY2sgcmV0dXJuIGNvZGUgKi8KIAkJb2RwbC0+ZGVhY3RpdmF0ZV9mdW5jKG9kKTsKIAotCQlnZXRuc3RpbWVvZmRheSgmYik7CisJCXJlYWRfcGVyc2lzdGVudF9jbG9jaygmYik7CiAKIAkJYyA9IHRpbWVzcGVjX3N1YihiLCBhKTsKLQkJZGVhY3RfbGF0ID0gdGltZXNwZWNfdG9fbnMoJmMpICogTlNFQ19QRVJfVVNFQzsKKwkJZGVhY3RfbGF0ID0gdGltZXNwZWNfdG9fbnMoJmMpOwogCiAJCXByX2RlYnVnKCJvbWFwX2RldmljZTogJXM6IHBtX2xhdCAlZDogZGVhY3RpdmF0ZTogZWxhcHNlZCB0aW1lICIKLQkJCSAiJWxsdSB1c2VjXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cG1fbGF0X2xldmVsLAorCQkJICIlbGx1IG5zZWNcbiIsIG9kLT5wZGV2Lm5hbWUsIG9kLT5wbV9sYXRfbGV2ZWwsCiAJCQkgZGVhY3RfbGF0KTsKIAogCQlXQVJOKGRlYWN0X2xhdCA+IG9kcGwtPmRlYWN0aXZhdGVfbGF0LCAib21hcF9kZXZpY2U6ICVzLiVkOiAiCkBAIC00NTksNyArNDU5LDcgQEAKIAlyZXQgPSBfb21hcF9kZXZpY2VfYWN0aXZhdGUob2QsIElHTk9SRV9XQUtFVVBfTEFUKTsKIAogCW9kLT5kZXZfd2FrZXVwX2xhdCA9IDA7Ci0Jb2QtPl9kZXZfd2FrZXVwX2xhdF9saW1pdCA9IElOVF9NQVg7CisJb2QtPl9kZXZfd2FrZXVwX2xhdF9saW1pdCA9IFVJTlRfTUFYOwogCW9kLT5fc3RhdGUgPSBPTUFQX0RFVklDRV9TVEFURV9FTkFCTEVEOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IGFkMmJmMDcuLmQ4ZDUwOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtNDgsOCArNDgsMTAgQEAKICNkZWZpbmUgT01BUDNfU1JBTV9WQSAgICAgICAgICAgMHhmZTQwMDAwMAogI2RlZmluZSBPTUFQM19TUkFNX1BVQl9QQSAgICAgICAweDQwMjA4MDAwCiAjZGVmaW5lIE9NQVAzX1NSQU1fUFVCX1ZBICAgICAgIChPTUFQM19TUkFNX1ZBICsgMHg4MDAwKQotI2RlZmluZSBPTUFQNF9TUkFNX1BBCQkweDQwMjAwMDAwCQkvKjB4NDAyZjAwMDAqLwotI2RlZmluZSBPTUFQNF9TUkFNX1ZBCQkweGZlNDAwMDAwCQkvKjB4ZmU0ZjAwMDAqLworI2RlZmluZSBPTUFQNF9TUkFNX1BBCQkweDQwMzAwMDAwCisjZGVmaW5lIE9NQVA0X1NSQU1fVkEJCTB4ZmU0MDAwMDAKKyNkZWZpbmUgT01BUDRfU1JBTV9QVUJfUEEJKE9NQVA0X1NSQU1fUEEgKyAweDQwMDApCisjZGVmaW5lIE9NQVA0X1NSQU1fUFVCX1ZBCShPTUFQNF9TUkFNX1ZBICsgMHg0MDAwKQogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKICNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1NaCTB4MDAKQEAgLTE0MCw2ICsxNDIsMTAgQEAKIAkJCQl9IGVsc2UgewogCQkJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4ODAwMDsgLyogMzJLICovCiAJCQkJfQorCQkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQkJCW9tYXBfc3JhbV9iYXNlID0gT01BUDRfU1JBTV9QVUJfVkE7CisJCQkJb21hcF9zcmFtX3N0YXJ0ID0gT01BUDRfU1JBTV9QVUJfUEE7CisJCQkJb21hcF9zcmFtX3NpemUgPSAweGEwMDA7IC8qIDQwSyAqLwogCQkJfSBlbHNlIHsKIAkJCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAyX1NSQU1fUFVCX1ZBOwogCQkJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVAyX1NSQU1fUFVCX1BBOwpAQCAtMTUzLDcgKzE1OSw3IEBACiAJCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCQkJb21hcF9zcmFtX2Jhc2UgPSBPTUFQNF9TUkFNX1ZBOwogCQkJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVA0X1NSQU1fUEE7Ci0JCQkJb21hcF9zcmFtX3NpemUgPSAweDgwMDA7IC8qIDMySyAqLworCQkJCW9tYXBfc3JhbV9zaXplID0gMHhlMDAwOyAvKiA1NksgKi8KIAkJCX0gZWxzZSB7CiAJCQkJb21hcF9zcmFtX2Jhc2UgPSBPTUFQMl9TUkFNX1ZBOwogCQkJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVAyX1NSQU1fUEE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggNTEwMzNhNC4uZDNiZjE3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwpAQCAtMTM3LDcgKzEzNywxMyBAQAogCWlmIChpc19kZXZpY2UpIHsKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQogCQkJb21hcF9jZmdfcmVnKEoyMF8yNFhYX1VTQjBfUFVFTik7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoY3B1X2lzX29tYXA3eHgoKSkgeworCQkJb21hcF9jZmdfcmVnKEFBMTdfN1hYX1VTQl9ETSk7CisJCQlvbWFwX2NmZ19yZWcoVzE2XzdYWF9VU0JfUFVfRU4pOworCQkJb21hcF9jZmdfcmVnKFcxN183WFhfVVNCX1ZCVVNJKTsKKwkJCW9tYXBfY2ZnX3JlZyhXMThfN1hYX1VTQl9ETUNLX09VVCk7CisJCQlvbWFwX2NmZ19yZWcoVzE5XzdYWF9VU0JfRENSU1QpOworCQl9IGVsc2UKIAkJCW9tYXBfY2ZnX3JlZyhXNF9VU0JfUFVFTik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L25hbmQuaAppbmRleCAwNjU5ODU5Li4yMjYxNDdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbmFuZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9uYW5kLmgKQEAgLTE3LDYgKzE3LDcgQEAKICAqCQkJU2V0dGluZyB0aGlzIGZsYWcgd2lsbCBhbGxvdyB0aGUga2VybmVsIHRvCiAgKgkJCWxvb2sgZm9yIGl0IGF0IGJvb3QgdGltZSBhbmQgYWxzbyBza2lwIHRoZSBOQU5ECiAgKgkJCXNjYW4uCisgKiBAb3B0aW9uczoJCURlZmF1bHQgdmFsdWUgdG8gc2V0IGludG8gJ3N0cnVjdCBuYW5kX2NoaXAnIG9wdGlvbnMuCiAgKiBAbnJfY2hpcHM6CQlOdW1iZXIgb2YgY2hpcHMgaW4gdGhpcyBzZXQKICAqIEBucl9wYXJ0aXRpb25zOglOdW1iZXIgb2YgcGFydGl0aW9ucyBwb2ludGVkIHRvIGJ5IEBwYXJ0aXRpb25zCiAgKiBAbmFtZToJCU5hbWUgb2Ygc2V0IChvcHRpb25hbCkKQEAgLTMxLDYgKzMyLDcgQEAKIAl1bnNpZ25lZCBpbnQJCWRpc2FibGVfZWNjOjE7CiAJdW5zaWduZWQgaW50CQlmbGFzaF9iYnQ6MTsKIAorCXVuc2lnbmVkIGludAkJb3B0aW9uczsKIAlpbnQJCQlucl9jaGlwczsKIAlpbnQJCQlucl9wYXJ0aXRpb25zOwogCWNoYXIJCQkqbmFtZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL01ha2VmaWxlIGIvYXJjaC9hcm0vdG9vbHMvTWFrZWZpbGUKaW5kZXggMWRiYWEyOS4uNjM1Y2IxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vdG9vbHMvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwMSBSdXNzZWxsIEtpbmcKICMKIAotaW5jbHVkZS9hc20tYXJtL21hY2gtdHlwZXMuaDogJChzcmMpL2dlbi1tYWNoLXR5cGVzICQoc3JjKS9tYWNoLXR5cGVzCitpbmNsdWRlL2dlbmVyYXRlZC9tYWNoLXR5cGVzLmg6ICQoc3JjKS9nZW4tbWFjaC10eXBlcyAkKHNyYykvbWFjaC10eXBlcwogCUBlY2hvICcgIEdlbmVyYXRpbmcgJEAnCiAJQG1rZGlyIC1wICQoZGlyICRAKQogCSQoUSkkKEFXSykgLWYgJF4gPiAkQCB8fCB7IHJtIC1mICRAOyAvYmluL2ZhbHNlOyB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9nZW4tbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL2dlbi1tYWNoLXR5cGVzCmluZGV4IGNlMzE5ZWYuLjA0ZmVmNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL2dlbi1tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL2dlbi1tYWNoLXR5cGVzCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL2F3awogIwotIyBBd2sgc2NyaXB0IHRvIGdlbmVyYXRlIGluY2x1ZGUvYXNtLWFybS9tYWNoLXR5cGVzLmgKKyMgQXdrIHNjcmlwdCB0byBnZW5lcmF0ZSBpbmNsdWRlL2dlbmVyYXRlZC9tYWNoLXR5cGVzLmgKICMKIEJFR0lOCXsgbnIgPSAwIH0KIC9eIy8JeyBuZXh0IH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDA3Yjk3NmQuLmMzYTc0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFdlZCBOb3YgMjUgMjI6MTQ6NTggMjAwOQorIyBMYXN0IHVwZGF0ZTogV2VkIERlYyAxNiAyMDowNjozNCAyMDA5CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTE3NzYsNiArMTc3Niw3IEBACiB3ZGcwMDIJCQlNQUNIX1dERzAwMgkJV0RHMDAyCQkJMTc4NQogc2c1NjBhZHNsCQlNQUNIX1NHNTYwQURTTAkJU0c1NjBBRFNMCQkxNzg2CiBuZXh0aW9fbjI4MDBfaWNhCU1BQ0hfTkVYVElPX04yODAwX0lDQQlORVhUSU9fTjI4MDBfSUNBCTE3ODcKK2RvdmVfZGIJCQlNQUNIX0RPVkVfREIJCURPVkVfREIJCQkxNzg4CiBtYXJ2ZWxsX25ld2RiCQlNQUNIX01BUlZFTExfTkVXREIJTUFSVkVMTF9ORVdEQgkJMTc4OQogdmFuZGlodWQJCU1BQ0hfVkFORElIVUQJCVZBTkRJSFVECQkxNzkwCiBtYWd4X2U4CQkJTUFDSF9NQUdYX0U4CQlNQUdYX0U4CQkJMTc5MQpAQCAtMjUzNiwzICsyNTM3LDQ0IEBACiBteHRfdGQ2MAkJTUFDSF9NWFRfVEQ2MAkJTVhUX1RENjAJCTI1NTAKIGVzeXgJCQlNQUNIX0VTWVgJCUVTWVgJCQkyNTUxCiBidWxsZG9nCQkJTUFDSF9CVUxMRE9HCQlCVUxMRE9HCQkJMjU1MworZGVyZWxsX21lMjAwMAkJTUFDSF9ERVJFTExfTUUyMDAwCURFUkVMTF9NRTIwMDAJCTI1NTQKK2JjbXJpbmdfYmFzZQkJTUFDSF9CQ01SSU5HX0JBU0UJQkNNUklOR19CQVNFCQkyNTU1CitiY21yaW5nX2V2bQkJTUFDSF9CQ01SSU5HX0VWTQlCQ01SSU5HX0VWTQkJMjU1NgorYmNtcmluZ19ldm1famF6eglNQUNIX0JDTVJJTkdfRVZNX0pBWloJQkNNUklOR19FVk1fSkFaWgkyNTU3CitiY21yaW5nX3NwCQlNQUNIX0JDTVJJTkdfU1AJCUJDTVJJTkdfU1AJCTI1NTgKK2JjbXJpbmdfc3YJCU1BQ0hfQkNNUklOR19TVgkJQkNNUklOR19TVgkJMjU1OQorYmNtcmluZ19zdl9qYXp6CQlNQUNIX0JDTVJJTkdfU1ZfSkFaWglCQ01SSU5HX1NWX0pBWloJCTI1NjAKK2JjbXJpbmdfdGFibGV0CQlNQUNIX0JDTVJJTkdfVEFCTEVUCUJDTVJJTkdfVEFCTEVUCQkyNTYxCitiY21yaW5nX3ZwCQlNQUNIX0JDTVJJTkdfVlAJCUJDTVJJTkdfVlAJCTI1NjIKK2JjbXJpbmdfZXZtX3NlaWtvcglNQUNIX0JDTVJJTkdfRVZNX1NFSUtPUglCQ01SSU5HX0VWTV9TRUlLT1IJMjU2MworYmNtcmluZ19zcF93cXZnYQlNQUNIX0JDTVJJTkdfU1BfV1FWR0EJQkNNUklOR19TUF9XUVZHQQkyNTY0CitiY21yaW5nX2N1c3RvbQkJTUFDSF9CQ01SSU5HX0NVU1RPTQlCQ01SSU5HX0NVU1RPTQkJMjU2NQorYWNlcl9zMjAwCQlNQUNIX0FDRVJfUzIwMAkJQUNFUl9TMjAwCQkyNTY2CitidDI3MAkJCU1BQ0hfQlQyNzAJCUJUMjcwCQkJMjU2NworaXNlbwkJCU1BQ0hfSVNFTwkJSVNFTwkJCTI1NjgKK2NlemFubmUJCQlNQUNIX0NFWkFOTkUJCUNFWkFOTkUJCQkyNTY5CitsdWNjYQkJCU1BQ0hfTFVDQ0EJCUxVQ0NBCQkJMjU3MAorc3VwZXJzbWFydAkJTUFDSF9TVVBFUlNNQVJUCQlTVVBFUlNNQVJUCQkyNTcxCittYWdub2xpYTIJCU1BQ0hfTUFHTk9MSUEyCQlNQUdOT0xJQTIJCTI1NzMKK2VteHgJCQlNQUNIX0VNWFgJCUVNWFgJCQkyNTc0CitvdXRsYXcJCQlNQUNIX09VVExBVwkJT1VUTEFXCQkJMjU3NQorcmlvdF9iZWkyCQlNQUNIX1JJT1RfQkVJMgkJUklPVF9CRUkyCQkyNTc2CityaW90X3ZveAkJTUFDSF9SSU9UX1ZPWAkJUklPVF9WT1gJCTI1NzcKK3Jpb3RfeDM3CQlNQUNIX1JJT1RfWDM3CQlSSU9UX1gzNwkJMjU3OAorbWVnYTI1bXgJCU1BQ0hfTUVHQTI1TVgJCU1FR0EyNU1YCQkyNTc5CitiZW56aW5hMgkJTUFDSF9CRU5aSU5BMgkJQkVOWklOQTIJCTI1ODAKK2lnbml0ZQkJCU1BQ0hfSUdOSVRFCQlJR05JVEUJCQkyNTgxCitmb2dnaWEJCQlNQUNIX0ZPR0dJQQkJRk9HR0lBCQkJMjU4MgorYXJlenpvCQkJTUFDSF9BUkVaWk8JCUFSRVpaTwkJCTI1ODMKK2xlaWNhX3NreXdhbGtlcgkJTUFDSF9MRUlDQV9TS1lXQUxLRVIJTEVJQ0FfU0tZV0FMS0VSCQkyNTg0CitqYWNpbnRvMl9qYW1yCQlNQUNIX0pBQ0lOVE8yX0pBTVIJSkFDSU5UTzJfSkFNUgkJMjU4NQorZ3RzX25vdmEJCU1BQ0hfR1RTX05PVkEJCUdUU19OT1ZBCQkyNTg2CitwMzYwMAkJCU1BQ0hfUDM2MDAJCVAzNjAwCQkJMjU4NworZGx0MgkJCU1BQ0hfRExUMgkJRExUMgkJCTI1ODgKK2RmMzEyMAkJCU1BQ0hfREYzMTIwCQlERjMxMjAJCQkyNTg5CitlY3Vjb3JlXzlnMjAJCU1BQ0hfRUNVQ09SRV85RzIwCUVDVUNPUkVfOUcyMAkJMjU5MAorbmF1dGVsX2xwYzMyNDAJCU1BQ0hfTkFVVEVMX0xQQzMyNDAJTkFVVEVMX0xQQzMyNDAJCTI1OTEKK2dsYWNpZXIJCQlNQUNIX0dMQUNJRVIJCUdMQUNJRVIJCQkyNTkyCitwaHJhemVyX2J1bGxkb2cJCU1BQ0hfUEhSQVpFUl9CVUxMRE9HCVBIUkFaRVJfQlVMTERPRwkJMjU5Mworb21hcDNfYnVsbGRvZwkJTUFDSF9PTUFQM19CVUxMRE9HCU9NQVAzX0JVTExET0cJCTI1OTQKK3BjYTEwMQkJCU1BQ0hfUENBMTAxCQlQQ0ExMDEJCQkyNTk1CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggMmQ3NDIzYS4uYWVkMDViYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMzgsMTYgKzM4LDcyIEBACiAgKi8KIHVuc2lnbmVkIGludCBWRlBfYXJjaDsKIAorLyoKKyAqIFBlci10aHJlYWQgVkZQIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCB2ZnBfdGhyZWFkX2ZsdXNoKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCXVuaW9uIHZmcF9zdGF0ZSAqdmZwID0gJnRocmVhZC0+dmZwc3RhdGU7CisJdW5zaWduZWQgaW50IGNwdTsKKworCW1lbXNldCh2ZnAsIDAsIHNpemVvZih1bmlvbiB2ZnBfc3RhdGUpKTsKKworCXZmcC0+aGFyZC5mcGV4YyA9IEZQRVhDX0VOOworCXZmcC0+aGFyZC5mcHNjciA9IEZQU0NSX1JPVU5EX05FQVJFU1Q7CisKKwkvKgorCSAqIERpc2FibGUgVkZQIHRvIGVuc3VyZSB3ZSBpbml0aWFsaXplIGl0IGZpcnN0LiAgV2UgbXVzdCBlbnN1cmUKKwkgKiB0aGF0IHRoZSBtb2RpZmljYXRpb24gb2YgbGFzdF9WRlBfY29udGV4dFtdIGFuZCBoYXJkd2FyZSBkaXNhYmxlCisJICogYXJlIGRvbmUgZm9yIHRoZSBzYW1lIENQVSBhbmQgd2l0aG91dCBwcmVlbXB0aW9uLgorCSAqLworCWNwdSA9IGdldF9jcHUoKTsKKwlpZiAobGFzdF9WRlBfY29udGV4dFtjcHVdID09IHZmcCkKKwkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKwlmbXhyKEZQRVhDLCBmbXJ4KEZQRVhDKSAmIH5GUEVYQ19FTik7CisJcHV0X2NwdSgpOworfQorCitzdGF0aWMgdm9pZCB2ZnBfdGhyZWFkX3JlbGVhc2Uoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCit7CisJLyogcmVsZWFzZSBjYXNlOiBQZXItdGhyZWFkIFZGUCBjbGVhbnVwLiAqLworCXVuaW9uIHZmcF9zdGF0ZSAqdmZwID0gJnRocmVhZC0+dmZwc3RhdGU7CisJdW5zaWduZWQgaW50IGNwdSA9IHRocmVhZC0+Y3B1OworCisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSB2ZnApCisJCWxhc3RfVkZQX2NvbnRleHRbY3B1XSA9IE5VTEw7Cit9CisKKy8qCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyAnY21kJ3MsIHRoZSBmb2xsb3dpbmcKKyAqIGlzIHRydWUgd2hpbGUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBydW46CisgKiAgVEhSRUFEX05PRlRJRllfU1dUSUNIOgorICogICAtIHRoZSBwcmV2aW91c2x5IHJ1bm5pbmcgdGhyZWFkIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIGFub3RoZXIgQ1BVLgorICogICAtIHRoZSBuZXh0IHRocmVhZCB0byBiZSBydW4gKHYpIHdpbGwgbm90IGJlIHJ1bm5pbmcgb24gYW5vdGhlciBDUFUuCisgKiAgIC0gdGhyZWFkLT5jcHUgaXMgdGhlIGxvY2FsIENQVSBudW1iZXIKKyAqICAgLSBub3QgcHJlZW1wdGlibGUgYXMgd2UncmUgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgYSB0aHJlYWQgc3dpdGNoCisgKiAgVEhSRUFEX05PVElGWV9GTFVTSDoKKyAqICAgLSB0aGUgdGhyZWFkICh2KSB3aWxsIGJlIHJ1bm5pbmcgb24gdGhlIGxvY2FsIENQVSwgc28KKyAqCXYgPT09IGN1cnJlbnRfdGhyZWFkX2luZm8oKQorICogICAtIHRocmVhZC0+Y3B1IGlzIHRoZSBsb2NhbCBDUFUgbnVtYmVyIGF0IHRoZSB0aW1lIGl0IGlzIGFjY2Vzc2VkLAorICoJYnV0IG1heSBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAgIC0gd2UgY291bGQgYmUgcHJlZW1wdGVkIGlmIHRyZWUgcHJlZW1wdCByY3UgaXMgZW5hYmxlZCwgc28KKyAqCWl0IGlzIHVuc2FmZSB0byB1c2UgdGhyZWFkLT5jcHUuCisgKiAgVEhSRUFEX05PVElGWV9SRUxFQVNFOgorICogICAtIHRoZSB0aHJlYWQgKHYpIHdpbGwgbm90IGJlIHJ1bm5pbmcgb24gYW55IENQVTsgaXQgaXMgYSBkZWFkIHRocmVhZC4KKyAqICAgLSB0aHJlYWQtPmNwdSB3aWxsIGJlIHRoZSBsYXN0IENQVSB0aGUgdGhyZWFkIHJhbiBvbiwgd2hpY2ggbWF5IG5vdAorICoJYmUgdGhlIGN1cnJlbnQgQ1BVLgorICogICAtIHdlIGNvdWxkIGJlIHByZWVtcHRlZCBpZiB0cmVlIHByZWVtcHQgcmN1IGlzIGVuYWJsZWQuCisgKi8KIHN0YXRpYyBpbnQgdmZwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB2OwotCXVuaW9uIHZmcF9zdGF0ZSAqdmZwOwotCV9fdTMyIGNwdSA9IHRocmVhZC0+Y3B1OwogCiAJaWYgKGxpa2VseShjbWQgPT0gVEhSRUFEX05PVElGWV9TV0lUQ0gpKSB7CiAJCXUzMiBmcGV4YyA9IGZtcngoRlBFWEMpOwogCiAjaWZkZWYgQ09ORklHX1NNUAorCQl1bnNpZ25lZCBpbnQgY3B1ID0gdGhyZWFkLT5jcHU7CisKIAkJLyoKIAkJICogT24gU01QLCBpZiBWRlAgaXMgZW5hYmxlZCwgc2F2ZSB0aGUgb2xkIHN0YXRlIGluCiAJCSAqIGNhc2UgdGhlIHRocmVhZCBtaWdyYXRlcyB0byBhIGRpZmZlcmVudCBDUFUuIFRoZQpAQCAtNzQsMjUgKzEzMCwxMCBAQAogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJfQogCi0JdmZwID0gJnRocmVhZC0+dmZwc3RhdGU7Ci0JaWYgKGNtZCA9PSBUSFJFQURfTk9USUZZX0ZMVVNIKSB7Ci0JCS8qCi0JCSAqIFBlci10aHJlYWQgVkZQIGluaXRpYWxpc2F0aW9uLgotCQkgKi8KLQkJbWVtc2V0KHZmcCwgMCwgc2l6ZW9mKHVuaW9uIHZmcF9zdGF0ZSkpOwotCi0JCXZmcC0+aGFyZC5mcGV4YyA9IEZQRVhDX0VOOwotCQl2ZnAtPmhhcmQuZnBzY3IgPSBGUFNDUl9ST1VORF9ORUFSRVNUOwotCi0JCS8qCi0JCSAqIERpc2FibGUgVkZQIHRvIGVuc3VyZSB3ZSBpbml0aWFsaXNlIGl0IGZpcnN0LgotCQkgKi8KLQkJZm14cihGUEVYQywgZm1yeChGUEVYQykgJiB+RlBFWENfRU4pOwotCX0KLQotCS8qIGZsdXNoIGFuZCByZWxlYXNlIGNhc2U6IFBlci10aHJlYWQgVkZQIGNsZWFudXAuICovCi0JaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSB2ZnApCi0JCWxhc3RfVkZQX2NvbnRleHRbY3B1XSA9IE5VTEw7CisJaWYgKGNtZCA9PSBUSFJFQURfTk9USUZZX0ZMVVNIKQorCQl2ZnBfdGhyZWFkX2ZsdXNoKHRocmVhZCk7CisJZWxzZQorCQl2ZnBfdGhyZWFkX3JlbGVhc2UodGhyZWFkKTsKIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCBkODU2MzU0Li5mMmIzMTkzIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC0xMTIsNiArMTEyLDExIEBACiAJYm9vbAogCXNlbGVjdCBDUFVfQVQzMkFQNzAwWAogCisjIEFQNzAwWCBib2FyZHMKK2NvbmZpZyBCT0FSRF9BVE5HVzEwMF9DT01NT04KKwlib29sCisJc2VsZWN0IENQVV9BVDMyQVA3MDAwCisKIGNob2ljZQogCXByb21wdCAiQVZSMzIgYm9hcmQgdHlwZSIKIAlkZWZhdWx0IEJPQVJEX0FUU1RLMTAwMApAQCAtMTE5LDkgKzEyNCwxMyBAQAogY29uZmlnIEJPQVJEX0FUU1RLMTAwMAogCWJvb2wgIkFUU1RLMTAwMCBldmFsdWF0aW9uIGJvYXJkIgogCi1jb25maWcgQk9BUkRfQVROR1cxMDAKK2NvbmZpZyBCT0FSRF9BVE5HVzEwMF9NS0kKIAlib29sICJBVE5HVzEwMCBOZXR3b3JrIEdhdGV3YXkiCi0Jc2VsZWN0IENQVV9BVDMyQVA3MDAwCisJc2VsZWN0IEJPQVJEX0FUTkdXMTAwX0NPTU1PTgorCitjb25maWcgQk9BUkRfQVROR1cxMDBfTUtJSQorCWJvb2wgIkFUTkdXMTAwIG1rSUkgTmV0d29yayBHYXRld2F5IgorCXNlbGVjdCBCT0FSRF9BVE5HVzEwMF9DT01NT04KIAogY29uZmlnIEJPQVJEX0hBTU1FUkhFQUQKIAlib29sICJIYW1tZXJoZWFkIGJvYXJkIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvTWFrZWZpbGUKaW5kZXggYzIxYTMyOS4uZWFkOGE3NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9NYWtlZmlsZQorKysgYi9hcmNoL2F2cjMyL01ha2VmaWxlCkBAIC0zMiw3ICszMiw3IEBACiBoZWFkLXkJCQkJCSs9IGFyY2gvYXZyMzIva2VybmVsL2hlYWQubwogY29yZS15CQkJCQkrPSAkKG1hY2hkaXJzKQogY29yZS0kKENPTkZJR19CT0FSRF9BVFNUSzEwMDApCQkrPSBhcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvCi1jb3JlLSQoQ09ORklHX0JPQVJEX0FUTkdXMTAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvCitjb3JlLSQoQ09ORklHX0JPQVJEX0FUTkdXMTAwX0NPTU1PTikJKz0gYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvCiBjb3JlLSQoQ09ORklHX0JPQVJEX0hBTU1FUkhFQUQpCQkrPSBhcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkLwogY29yZS0kKENPTkZJR19CT0FSRF9GQVZSXzMyKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi8KIGNvcmUtJChDT05GSUdfQk9BUkRfTUVSSVNDKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvS2NvbmZpZyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL0tjb25maWcKaW5kZXggYmUyN2EwMi4uNGU1NTYxNyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9LY29uZmlnCkBAIC0xLDYgKzEsMTcgQEAKICMgTkdXMTAwIGN1c3RvbWl6YXRpb24KIAotaWYgQk9BUkRfQVROR1cxMDAKK2lmIEJPQVJEX0FUTkdXMTAwX0NPTU1PTgorCitjb25maWcgQk9BUkRfQVROR1cxMDBfTUtJSV9MQ0QKKwlib29sICJFbmFibGUgQVROR1cxMDAgbWtJSSBMQ0QgaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gQk9BUkRfQVROR1cxMDBfTUtJSQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgTENEIGNvbnRyb2xsZXIgKExDREMpIGluIHRoZSBBVDMyQVA3MDAwLiBTaW5jZSB0aGUKKwkgIExDREMgaXMgbXVsdGlwbGV4ZWQgd2l0aCBNQUNCMSAoTEFOKSBFdGhlcm5ldCBwb3J0LCBvbmx5IG9uZSBjYW4gYmUKKwkgIGVuYWJsZWQgYXQgYSB0aW1lLgorCisJICBUaGlzIGNob2ljZSBlbmFibGVzIHRoZSBMQ0RDIGFuZCBkaXNhYmxlcyB0aGUgTUFDQjEgaW50ZXJmYWNlIG1hcmtlZAorCSAgTEFOIG9uIHRoZSBQQ0IuCiAKIGNob2ljZQogCXByb21wdCAiU2VsZWN0IGFuIE5HVzEwMCBhZGQtb24gYm9hcmQgdG8gc3VwcG9ydCIKQEAgLTExLDE1ICsyMiwxMSBAQAogCiBjb25maWcgQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYCiAJYm9vbCAiRVZLTENEMTBYIGFkZG9uIGJvYXJkIgorCWRlcGVuZHMgb24gQk9BUkRfQVROR1cxMDBfTUtJIHx8IEJPQVJEX0FUTkdXMTAwX01LSUlfTENECiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBFVktMQ0QxMDAgKFFWR0EpIG9yIEVWS0xDRDEwMSAoVkdBKQotCSAgYWRkb24gYm9hcmQgZm9yIHRoZSBOR1cxMDAuIEJ5IGVuYWJsaW5nIHRoaXMgdGhlIExDRCBjb250cm9sbGVyIGFuZAotCSAgQUM5NyBjb250cm9sbGVyIGlzIGFkZGVkIGFzIHBsYXRmb3JtIGRldmljZXMuCi0KLQkgIFRoaXMgY2hvaWNlIGRpc2FibGVzIHRoZSBkZXRlY3QgcGluIGFuZCB0aGUgd3JpdGUtcHJvdGVjdCBwaW4gZm9yIHRoZQotCSAgTUNJIHBsYXRmb3JtIGRldmljZSwgc2luY2UgaXQgY29uZmxpY3RzIHdpdGggdGhlIExDRCBwbGF0Zm9ybSBkZXZpY2UuCi0JICBUaGUgTUNJIHBpbnMgY2FuIGJlIHJlZW5hYmxlZCBieSBlZGl0aW5nIHRoZSAiYWRkIGRldmljZSBmdW5jdGlvbiIgYnV0Ci0JICB0aGlzIG1heSBicmVhayB0aGUgc2V0dXAgZm9yIG90aGVyIGRpc3BsYXlzIHRoYXQgdXNlIHRoZXNlIHBpbnMuCisJICBhZGRvbiBib2FyZCBmb3IgdGhlIE5HVzEwMCBhbmQgTkdXMTAwIG1rSUkuIEJ5IGVuYWJsaW5nIHRoaXMgdGhlIExDRAorCSAgY29udHJvbGxlciBhbmQgQUM5NyBjb250cm9sbGVyIGlzIGFkZGVkIGFzIHBsYXRmb3JtIGRldmljZXMuCiAKIGNvbmZpZyBCT0FSRF9BVE5HVzEwMF9NUk1UCiAJYm9vbCAiTWVkaWFtYSBSTVQxLzIgYWRkLW9uIGJvYXJkIgpAQCAtNTUsNCArNjIsNCBAQAogc291cmNlCSJhcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9LY29uZmlnX21ybXQiCiBlbmRpZgogCi1lbmRpZgkjIEJPQVJEX0FUTkdXMTAwCitlbmRpZgkjIEJPQVJEX0FUTkdXMTAwX0NPTU1PTgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvZXZrbGNkMTB4LmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwppbmRleCAwMDMzNzExLi4yMDM4ODc1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwpAQCAtMTY0LDcgKzE2NCwxMiBAQAogCiAJYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJmF0ZXZrbGNkMTB4X2xjZGNfZGF0YSwKIAkJCWZibWVtX3N0YXJ0LCBmYm1lbV9zaXplLAotCQkJQVRNRUxfTENEQ19BTFRfMThCSVQgfCBBVE1FTF9MQ0RDX1BFX0RWQUwpOworI2lmZGVmIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJCisJCQlBVE1FTF9MQ0RDX1BSSV8xOEJJVCB8IEFUTUVMX0xDRENfUENfRFZBTAorI2Vsc2UKKwkJCUFUTUVMX0xDRENfQUxUXzE4QklUIHwgQVRNRUxfTENEQ19QRV9EVkFMCisjZW5kaWYKKwkJCSk7CiAKIAlhdDMyX2FkZF9kZXZpY2VfYWM5N2MoMCwgJmFjOTdjMF9kYXRhLCBBQzk3Q19CT1RIKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvbXJtdC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvbXJtdC5jCmluZGV4IGJmNzhlNTEuLjc5MTliZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL21ybXQuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9tcm10LmMKQEAgLTMwMiw2ICszMDIsNyBAQAogCWF0MzJfc2VsZWN0X3BlcmlwaCggR1BJT19QSU9CX0JBU0UsIDEgPDwgKFBCX0VYVElOVF9CQVNFK1RTX0lSUSksCiAJCQlHUElPX1BFUklQSF9BLCBBVDMyX0dQSU9GX0RFR0xJVENIKTsKIAlzZXRfaXJxX3R5cGUoIEFUMzJfRVhUSU5UKFRTX0lSUSksIElSUV9UWVBFX0VER0VfRkFMTElORyApOworCWF0MzJfc3BpX3NldHVwX3NsYXZlcygwLHNwaTAxX2JvYXJkX2luZm8sQVJSQVlfU0laRShzcGkwMV9ib2FyZF9pbmZvKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpMDFfYm9hcmRfaW5mbyxBUlJBWV9TSVpFKHNwaTAxX2JvYXJkX2luZm8pKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvc2V0dXAuYwppbmRleCBiYzI5OWZiLi44YzZhMjQ0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWVsLW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0zNiw2ICszNyw3NSBAQAogCVsyXSA9IDEyMDAwMDAwLAkvKiAxMiBNSHogb24gb3NjMSAqLwogfTsKIAorLyoKKyAqIFRoZSBBVE5HVzEwMCBta0lJIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgQVROR1cxMDAuIEJvdGggaGF2ZSB0aGUgQVQzMkFQNzAwMAorICogY2hpcCBvbiBib2FyZDsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgQVROR1cxMDAgbWtJSSBoYXMgMTI4IE1CIDMyLWJpdAorICogU0RSQU0gKHRoZSBBVE5HVzEwMCBoYXMgMzIgTUIgMTYtYml0IFNEUkFNKSBhbmQgMjU2IE1CIDE2LWJpdCBOQU5EIGZsYXNoCisgKiAodGhlIEFUTkdXMTAwIGhhcyBub25lLikKKyAqCisgKiBUaGUgUkFNIGRpZmZlcmVuY2UgaXMgaGFuZGxlZCBieSB0aGUgYm9vdCBsb2FkZXIsIHNvIHRoZSBvbmx5IGRpZmZlcmVuY2Ugd2UKKyAqIGVuZCB1cCBoYW5kbGluZyBoZXJlIGlzIHRoZSBOQU5EIGZsYXNoLCBFQkkgcGluIHJlc2VydmF0aW9uIGFuZCBpZiBMQ0RDIG9yCisgKiBNQUNCMSBzaG91bGQgYmUgZW5hYmxlZC4KKyAqLworI2lmZGVmIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJCisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxtYWNoL3NtYy5oPgorCitzdGF0aWMgc3RydWN0IHNtY190aW1pbmcgbmFuZF90aW1pbmcgX19pbml0ZGF0YSA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEwLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMTAsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gMzAsCisJLm5yZF9wdWxzZQkJPSAxNSwKKwkubmNzX3dyaXRlX3B1bHNlCT0gMzAsCisJLm53ZV9wdWxzZQkJPSAxNSwKKworCS5yZWFkX2N5Y2xlCQk9IDMwLAorCS53cml0ZV9jeWNsZQkJPSAzMCwKKworCS5uY3NfcmVhZF9yZWNvdmVyCT0gMCwKKwkubnJkX3JlY292ZXIJCT0gMTUsCisJLm5jc193cml0ZV9yZWNvdmVyCT0gMCwKKwkvKiBXRSMgaGlnaCAtPiBSRSMgbG93IG1pbiA2MCBucyAqLworCS5ud2VfcmVjb3ZlcgkJPSA1MCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21jX2NvbmZpZyBuYW5kX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5idXNfd2lkdGgJCT0gMiwKKwkubnJkX2NvbnRyb2xsZWQJCT0gMSwKKwkubndlX2NvbnRyb2xsZWQJCT0gMSwKKwkubndhaXRfbW9kZQkJPSAwLAorCS5ieXRlX3dyaXRlCQk9IDAsCisJLnRkZl9jeWNsZXMJCT0gMiwKKwkudGRmX21vZGUJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBuYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtYWluIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5hbmRfcGFydF9pbmZvKGludCBzaXplLCBpbnQgKm51bV9wYXJ0aXRpb25zKQoreworCSpudW1fcGFydGl0aW9ucyA9IEFSUkFZX1NJWkUobmFuZF9wYXJ0aXRpb25zKTsKKwlyZXR1cm4gbmFuZF9wYXJ0aXRpb25zOworfQorCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBhdG5ndzEwMG1raWlfbmFuZF9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmNsZQkJPSAyMSwKKwkuYWxlCQk9IDIyLAorCS5yZHlfcGluCT0gR1BJT19QSU5fUEIoMjgpLAorCS5lbmFibGVfcGluCT0gR1BJT19QSU5fUEUoMjMpLAorCS5idXNfd2lkdGhfMTYJPSB0cnVlLAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydF9pbmZvLAorfTsKKyNlbmRpZgorCiAvKiBJbml0aWFsaXplZCBieSBib290bG9hZGVyLXNwZWNpZmljIHN0YXJ0dXAgY29kZS4gKi8KIHN0cnVjdCB0YWcgKmJvb3Rsb2FkZXJfdGFncyBfX2luaXRkYXRhOwogCkBAIC01Niw5ICsxMjYsOSBAQAogc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1jaTBfZGF0YSA9IHsKIAkuc2xvdFswXSA9IHsKIAkJLmJ1c193aWR0aAk9IDQsCi0jaWYgZGVmaW5lZChDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYKSB8fCBkZWZpbmVkKENPTkZJR19CT0FSRF9BVE5HVzEwMF9NUk1UMSkKLQkJLmRldGVjdF9waW4gICAgID0gR1BJT19QSU5fTk9ORSwKLQkJLndwX3BpbiAgICAgICAgID0gR1BJT19QSU5fTk9ORSwKKyNpZiBkZWZpbmVkKENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJKQorCQkuZGV0ZWN0X3Bpbgk9IEdQSU9fUElOX1BDKDI1KSwKKwkJLndwX3BpbgkJPSBHUElPX1BJTl9QRSgyMiksCiAjZWxzZQogCQkuZGV0ZWN0X3Bpbgk9IEdQSU9fUElOX1BDKDI1KSwKIAkJLndwX3BpbgkJPSBHUElPX1BJTl9QRSgwKSwKQEAgLTY2LDYgKzEzNiwxNCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSBhdG5ndzEwMF91c2JhX2RhdGEgX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJKQorCS52YnVzX3Bpbgk9IEdQSU9fUElOX1BFKDI2KSwKKyNlbHNlCisJLnZidXNfcGluCT0gLUVOT0RFViwKKyNlbmRpZgorfTsKKwogLyoKICAqIFRoZSBuZXh0IHR3byBmdW5jdGlvbnMgc2hvdWxkIGdvIGF3YXkgYXMgdGhlIGJvb3QgbG9hZGVyIGlzCiAgKiBzdXBwb3NlZCB0byBpbml0aWFsaXplIHRoZSBtYWNiIGFkZHJlc3MgcmVnaXN0ZXJzIHdpdGggYSB2YWxpZApAQCAtMTczLDE4ICsyNTEsMjcgQEAKIAl1bnNpZ25lZAlpOwogCiAJLyoKLQkgKiBBVE5HVzEwMCB1c2VzIDE2LWJpdCBTRFJBTSBpbnRlcmZhY2UsIHNvIHdlIGRvbid0IG5lZWQgdG8KLQkgKiByZXNlcnZlIGFueSBwaW5zIGZvciBpdC4KKwkgKiBBVE5HVzEwMCBta0lJIHVzZXMgMzItYml0IFNEUkFNIGludGVyZmFjZS4gUmVzZXJ2ZSB0aGUKKwkgKiBTRFJBTS1zcGVjaWZpYyBwaW5zIHNvIHRoYXQgbm9ib2R5IG1lc3NlcyB3aXRoIHRoZW0uCiAJICovCisjaWZkZWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LSUkKKwlhdDMyX3Jlc2VydmVfcGluKEdQSU9fUElPRV9CQVNFLCBBVE1FTF9FQklfUEVfREFUQV9BTEwpOworCisJc21jX3NldF90aW1pbmcoJm5hbmRfY29uZmlnLCAmbmFuZF90aW1pbmcpOworCXNtY19zZXRfY29uZmlndXJhdGlvbigzLCAmbmFuZF9jb25maWcpOworCWF0MzJfYWRkX2RldmljZV9uYW5kKDAsICZhdG5ndzEwMG1raWlfbmFuZF9kYXRhKTsKKyNlbmRpZgogCiAJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDApOwogCiAJc2V0X2h3X2FkZHIoYXQzMl9hZGRfZGV2aWNlX2V0aCgwLCAmZXRoX2RhdGFbMF0pKTsKKyNpZm5kZWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LSUlfTENECiAJc2V0X2h3X2FkZHIoYXQzMl9hZGRfZGV2aWNlX2V0aCgxLCAmZXRoX2RhdGFbMV0pKTsKKyNlbmRpZgogCiAJYXQzMl9hZGRfZGV2aWNlX3NwaSgwLCBzcGkwX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpMF9ib2FyZF9pbmZvKSk7CiAJYXQzMl9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKLQlhdDMyX2FkZF9kZXZpY2VfdXNiYSgwLCBOVUxMKTsKKwlhdDMyX2FkZF9kZXZpY2VfdXNiYSgwLCAmYXRuZ3cxMDBfdXNiYV9kYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5nd19sZWRzKTsgaSsrKSB7CiAJCWF0MzJfc2VsZWN0X2dwaW8obmd3X2xlZHNbaV0uZ3BpbywKQEAgLTE5NCwxMCArMjgxLDE0IEBACiAKIAkvKiBhbGwgdGhlc2UgaTJjL3NtYnVzIHBpbnMgc2hvdWxkIGhhdmUgZXh0ZXJuYWwgcHVsbHVwcyBmb3IKIAkgKiBvcGVuLWRyYWluIHNoYXJpbmcgYW1vbmcgYWxsIEkyQyBkZXZpY2VzLiAgU0RBIGFuZCBTQ0wgZG87Ci0JICogUEIyOC9FWFRJTlQzIGRvZXNuJ3Q7IGl0IHNob3VsZCBiZSBTTUJBTEVSVCMgKGZvciBQTUJ1cyksCi0JICogYnV0IGl0J3Mgbm90IGF2YWlsYWJsZSBvZmYtYm9hcmQuCisJICogUEIyOC9FWFRJTlQzIChBVE5HVzEwMCkgYW5kIFBFMjEgKEFUTkdXMTAwIG1rSUkpIGRvZXNuJ3Q7IGl0IHNob3VsZAorCSAqIGJlIFNNQkFMRVJUIyAoZm9yIFBNQnVzKSwgYnV0IGl0J3Mgbm90IGF2YWlsYWJsZSBvZmYtYm9hcmQuCiAJICovCisjaWZkZWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LSUkKKwlhdDMyX3NlbGVjdF9wZXJpcGgoR1BJT19QSU9FX0JBU0UsIDEgPDwgMjEsIDAsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKyNlbHNlCiAJYXQzMl9zZWxlY3RfcGVyaXBoKEdQSU9fUElPQl9CQVNFLCAxIDw8IDI4LCAwLCBBVDMyX0dQSU9GX1BVTExVUCk7CisjZW5kaWYKIAlhdDMyX3NlbGVjdF9ncGlvKGkyY19ncGlvX2RhdGEuc2RhX3BpbiwKIAkJQVQzMl9HUElPRl9NVUxUSURSViB8IEFUMzJfR1BJT0ZfT1VUUFVUIHwgQVQzMl9HUElPRl9ISUdIKTsKIAlhdDMyX3NlbGVjdF9ncGlvKGkyY19ncGlvX2RhdGEuc2NsX3BpbiwKQEAgLTIxMSwxNCArMzAyLDIyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bmd3MTAwX2FyY2hfaW5pdCh2b2lkKQogewotCS8qIFBCMzAgaXMgdGhlIG90aGVyd2lzZSB1bnVzZWQganVtcGVyIG9uIHRoZSBtYWluYm9hcmQsIHdpdGggYW4KLQkgKiBleHRlcm5hbCBwdWxsdXA7IHRoZSBqdW1wZXIgZ3JvdW5kcyBpdC4gIFVzZSBpdCBob3dldmVyIHlvdQotCSAqIGxpa2UsIGluY2x1ZGluZyBsZXR0aW5nIFUtQm9vdCBvciBMaW51eCB0d2VhayBib290IHNlcXVlbmNlcy4KKwkvKiBQQjMwIChBVE5HVzEwMCkgYW5kIFBFMzAgKEFUTkdXMTAwIG1rSUkpIGlzIHRoZSBvdGhlcndpc2UgdW51c2VkCisJICoganVtcGVyIG9uIHRoZSBtYWluYm9hcmQsIHdpdGggYW4gZXh0ZXJuYWwgcHVsbHVwOyB0aGUganVtcGVyIGdyb3VuZHMKKwkgKiBpdC4gVXNlIGl0IGhvd2V2ZXIgeW91IGxpa2UsIGluY2x1ZGluZyBsZXR0aW5nIFUtQm9vdCBvciBMaW51eCB0d2VhaworCSAqIGJvb3Qgc2VxdWVuY2VzLgogCSAqLworI2lmZGVmIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJCisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QRSgzMCksIDApOworCWdwaW9fcmVxdWVzdChHUElPX1BJTl9QRSgzMCksICJqMTUiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BJTl9QRSgzMCkpOworCWdwaW9fZXhwb3J0KEdQSU9fUElOX1BFKDMwKSwgZmFsc2UpOworI2Vsc2UKIAlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BCKDMwKSwgMCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUElOX1BCKDMwKSwgImoxNSIpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUElOX1BCKDMwKSk7CiAJZ3Bpb19leHBvcnQoR1BJT19QSU5fUEIoMzApLCBmYWxzZSk7CisjZW5kaWYKIAogCS8qIHNldF9pcnFfdHlwZSgpIGFmdGVyIHRoZSBhcmNoX2luaXRjYWxsIGZvciBFSUMgaGFzIHJ1biwgYW5kCiAJICogYmVmb3JlIHRoZSBJMkMgc3Vic3lzdGVtIGNvdWxkIHRyeSB1c2luZyB0aGlzIElSUS4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZGVmY29uZmlnCmluZGV4IDU3NGFjYTkuLjMyMjA1YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzEKLSMgVHVlIEF1ZyAgNSAxNjowMDo0NyAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBPY3QgMjkgMDk6Mzk6MjIgMjAwOQogIwogQ09ORklHX0FWUjMyPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQpAQCAtMjEsNiArMjEsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzQsMjIgKzM1LDM3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKQEAgLTU5LDM4ICs3NSw0MCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTEKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTk4LDExICsxMTYsOCBAQAogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTE4LDcgKzEzMyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCkBAIC0xMzMsOCArMTQ4LDIzIEBACiBDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKIENPTkZJR19DUFVfQVQzMkFQNzAwWD15CiBDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0NPTU1PTj15CiAjIENPTkZJR19CT0FSRF9BVFNUSzEwMDAgaXMgbm90IHNldAotQ09ORklHX0JPQVJEX0FUTkdXMTAwPXkKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0k9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSSBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0ZBVlJfMzIgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUVSSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX01JTUMyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDQgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMF9KMl9MRUQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMF9KMl9SR0IgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0FERE9OX05PTkU9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01STVQgaXMgbm90IHNldAogQ09ORklHX0xPQURFUl9VX0JPT1Q9eQogCiAjCkBAIC0xNTAsNyArMTgwLDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX1FVSUNLTElTVD15Ci0jIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFWRV9NRU1PUllfUFJFU0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMTYyLDE0ICsxOTIsMTYgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19OTUlfREVCVUdHSU5HPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CkBAIC0xNzcsNyArMjA5LDcgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19DTURMSU5FPSIiCiAKICMKQEAgLTE4OCw2ICsyMjAsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIAogIwpAQCAtMjE5LDYgKzI1Miw4IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTI3MSw3ICszMDYsNiBAQAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldApAQCAtMzE0LDEwICszNDgsMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQpAQCAtMzQzLDE2ICszNzksMTggQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQogIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CkBAIC0zNjQsMjYgKzQwMiwzMyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM5NSw2ICs0NDAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDA0LDYgKzQ1MCw3IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ1MywxNiArNTAwLDE3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCiBDT05GSUdfTVREX0RBVEFGTEFTSD15CisjIENPTkZJR19NVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQ3OCw5ICs1MjYsMjIgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX01URF9VQkk9eQorQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKK0NPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKKyMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldApAQCAtNDk4LDEwICs1NTksMjAgQEAKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CiBDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKK0NPTkZJR19FRVBST01fQVQyND1tCisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydApAQCAtNTM0LDI2ICs2MDUsMzcgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19NQUNCPXkKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTYwMyw5ICs2ODUsMTEgQEAKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CiAjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldApAQCAtNjE0LDcgKzY5OCw5IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPW0KIAogIwpAQCAtNjI0LDYgKzcxMCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19HUElPPW0KICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NDQsMTQgKzczMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fQVQyND1tCi0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02NjYsMTkgKzc0NSwyOCBAQAogIwogQ09ORklHX1NQSV9BVE1FTD15CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKIAogIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CkBAIC02OTQsMTEgKzc4MiwxNSBAQAogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MDcsMTEgKzc5OSwxMSBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTcyMCwyMiArODEyLDE3IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzU2LDMyICs4NDMsNDMgQEAKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiBDT05GSUdfVVNCX0dBREdFVD15CiAjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBPXkKIENPTkZJR19VU0JfQVRNRUxfVVNCQT15CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKIENPTkZJR19VU0JfWkVSTz1tCisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9bQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldApAQCAtNzg5LDEyICs4ODcsMTggQEAKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT1tCisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiAjCiBDT05GSUdfTU1DX0JMT0NLPXkKIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKQEAgLTgwMiwxMCArOTA2LDEyIEBACiBDT05GSUdfTU1DX1RFU1Q9bQogCiAjCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfQVRNRUxNQ0k9eQorIyBDT05GSUdfTU1DX0FUTUVMTUNJX0RNQSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST1tCiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtODE1LDcgKzkyMSwxMSBAQAogIyBMRUQgZHJpdmVycwogIwogQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwpAQCAtODIzLDcgKzkzMywxMyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKQEAgLTg1NSwyNSArOTcxLDMzIEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTg5MiwyNCArMTAxNiwzOCBAQAogIyBETUEgQ2xpZW50cwogIwogIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9bQorQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz1tCitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTE3LDYgKzEwNTUsMTIgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KKyMgQ09ORklHX0NVU0UgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTQwLDE1ICsxMDg0LDEzIEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC05NjcsNyArMTEwOSw5IEBACiAjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtOTc1LDcgKzExMTksOSBAQAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VRlNfRlM9eQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTA2MCwxNCArMTIwNiwxOCBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CkBAIC0xMDgzLDYgKzEyMzMsNyBAQAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldApAQCAtMTA5MSwxMyArMTI0MiwzOSBAQAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCkBAIC0xMTA1LDE5ICsxMjgyLDMwIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMTQ1LDExICsxMzMzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTE2Niw3ICsxMzU2LDcgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVJDND1tCiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApAQCAtMTE4NiwxNSArMTM3NiwyMSBAQAogIyBDb21wcmVzc2lvbgogIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPW0KIENPTkZJR19DUllQVE9fSFc9eQorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKQEAgLTEyMDQsOCArMTQwMCw5IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZwppbmRleCA4NmE0NWI1Li5jNzMyY2MzIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS42Ci0jIFdlZCBKdW4gMTggMTY6MDY6MzIgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgT2N0IDI5IDA5OjM2OjM5IDIwMDkKICMKIENPTkZJR19BVlIzMj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKQEAgLTIxLDYgKzIxLDcgQEAKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM0LDIyICszNSwzNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CkBAIC01OSw0MyArNzUsNTEgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTEKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTA5LDcgKzEzMyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCkBAIC0xMjQsMTMgKzE0OCwyNiBAQAogQ09ORklHX1BMQVRGT1JNX0FUMzJBUD15CiBDT05GSUdfQ1BVX0FUMzJBUDcwMFg9eQogQ09ORklHX0NQVV9BVDMyQVA3MDAwPXkKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9DT01NT049eQogIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19CT0FSRF9BVE5HVzEwMD15CitDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJPXkKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LSUkgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfSEFNTUVSSEVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9GQVZSXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX01FUklTQyBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9NSU1DMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMiBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwNiBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDBfSjJfTEVEOCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDBfSjJfUkdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0FERE9OX05PTkUgaXMgbm90IHNldAogQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWD15CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NUk1UIGlzIG5vdCBzZXQKIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfUVZHQT15CiAjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9QT1dfUVZHQSBpcyBub3Qgc2V0Ci1DT05GSUdfQk9BUkRfQVROR1cxMDBfSTJDX0dQSU89eQogQ09ORklHX0xPQURFUl9VX0JPT1Q9eQogCiAjCkBAIC0xMzksMTQgKzE3NiwxNCBAQAogIyBDT05GSUdfQVA3MDBYXzMyX0JJVF9TTUMgaXMgbm90IHNldAogQ09ORklHX0FQNzAwWF8xNl9CSVRfU01DPXkKICMgQ09ORklHX0FQNzAwWF84X0JJVF9TTUMgaXMgbm90IHNldAotQ09ORklHX0dQSU9fREVWPXkKIENPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAogQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAogQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19RVUlDS0xJU1Q9eQorIyBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVZFX01FTU9SWV9QUkVTRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX05FRURfTk9ERV9NRU1NQVBfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0xNTgsMzMgKzE5NSwzNiBAQAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX05NSV9ERUJVR0dJTkc9eQotQ09ORklHX0RXX0RNQUM9eQogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0NNRExJTkU9IiIKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMTk0LDYgKzIzNCw3IEBACiAjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CkBAIC0yMTQsMTEgKzI1NSw5IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0yMzIsNiArMjcxLDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CiBDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMjY5LDcgKzMwOSw2IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15CiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CkBAIC0yODUsOCArMzI0LDEwIEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldApAQCAtMzEwLDEwICszNTEsMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQpAQCAtMzM5LDE2ICszODIsMjAgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzU4LDI2ICs0MDUsMzMgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zODksNiArNDQzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM5OCwxMCArNDUzLDEyIEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDQ2LDE2ICs1MDMsMTcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKIENPTkZJR19NVERfREFUQUZMQVNIPXkKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDcxLDYgKzUyOSwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogQ09ORklHX01URF9VQkk9eQpAQCAtNDk5LDEwICs1NjIsMjAgQEAKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CiBDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC01MTQsNyArNTg3LDYgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUzNiwyNSArNjA4LDM3IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDQj15CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTU5OCwxNSArNjgyLDMwIEBACiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQorQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNT15CitDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEyPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTM9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC02MTksOSArNzE4LDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC02MzYsOSArNzM3LDExIEBACiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQogIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKQEAgLTY0Nyw0NSArNzUwLDQ0IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIworQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9bQotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotQ09ORklHX0kyQ19BVE1FTFRXST1tCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0dQSU89bQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogQ09ORklHX1NQST15CiAjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NQSV9NQVNURVI9eQpAQCAtNjk1LDMwICs3OTcsNDggQEAKICMKIENPTkZJR19TUElfQVRNRUw9eQogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1NQSURFVj1tCiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HUElPX0xJQj15CiAKICMKLSMgR1BJTyBTdXBwb3J0CisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKIAogIwogIyBJMkMgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiAKICMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03MzEsMjQgKzg1MSwzMSBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzU4LDYgKzg4NSw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTc2NSw4ICs4OTMsOCBAQAogIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC03NzksNiArOTA3LDkgQEAKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BVE1FTD15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzkyLDExOSArOTIzLDEyNCBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009bQogIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfSFJUSU1FUj15CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIworQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAogQ09ORklHX1NORF9BQzk3X0NPREVDPW0KLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CiAKICMKLSMgQVZSMzIgZGV2aWNlcworIyBBdG1lbCBkZXZpY2VzIChBVlIzMiBhbmQgQVQ5MSkKICMKLUNPTkZJR19TTkRfQVRNRUxfQUM5Nz1tCi0KLSMKLSMgU1BJIGRldmljZXMKLSMKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCisjIENPTkZJR19TTkRfQVRNRUxfQUJEQUMgaXMgbm90IHNldAorQ09ORklHX1NORF9BVE1FTF9BQzk3Qz1tCisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKLSMKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0FDOTdfQlVTPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIwogQ09ORklHX1VTQl9TVVBQT1JUPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0zNTAKIENPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQT15CiBDT05GSUdfVVNCX0FUTUVMX1VTQkE9eQogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KIENPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VURlM9bQogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgRHJpdmVycworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKIENPTkZJR19NTUNfQkxPQ0s9eQogQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQogIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX0FUTUVMTUNJPXkKKyMgQ09ORklHX01NQ19BVE1FTE1DSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtOTEzLDcgKzEwNDksMTMgQEAKICMKICMgTEVEIGRyaXZlcnMKICMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCkBAIC05MjEsNiArMTA2MywxNCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTk1MCw1MSArMTEwMCw4NCBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKIENPTkZJR19SVENfRFJWX0FUMzJBUDcwMFg9eQorQ09ORklHX0RNQURFVklDRVM9eQogCiAjCi0jIFVzZXJzcGFjZSBJL08KKyMgRE1BIERldmljZXMKICMKK0NPTkZJR19EV19ETUFDPXkKK0NPTkZJR19ETUFfRU5HSU5FPXkKKworIworIyBETUEgQ2xpZW50cworIworIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEwMDIsNiArMTE4NSwxMiBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMDI1LDE1ICsxMjE0LDEzIEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDU5LDggKzEyNDYsMTAgQEAKIENPTkZJR19VQklGU19GU19aTElCPXkKICMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTA3MSwxOSArMTI2MCwxNiBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz1tCiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCkBAIC0xMTUxLDE2ICsxMzM3LDI0IEBACiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldApAQCAtMTE3MiwxOSArMTM2Niw0OCBAQAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAKICMKQEAgLTExOTIsNjMgKzE0MTUsMTE4IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0hBMT15CiAjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPW0KIENPTkZJR19DUllQVE9fSFc9eQorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldApAQCAtMTI1Nyw4ICsxNTM1LDkgQEAKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX0xaT19DT01QUkVTUz15CiBDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAxX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCmluZGV4IGE5NmI2OGUuLjVlZjY3ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LjYKLSMgV2VkIEp1biAxOCAxNjowOTozMiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBPY3QgMjkgMDk6Mzc6MTkgMjAwOQogIwogQ09ORklHX0FWUjMyPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQpAQCAtMjEsNiArMjEsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzQsMjIgKzM1LDM3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKQEAgLTU5LDQzICs3NSw1MSBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1BST0JFUz15Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MQogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDksNyArMTMzLDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMKQEAgLTEyNCwxMyArMTQ4LDIwIEBACiBDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKIENPTkZJR19DUFVfQVQzMkFQNzAwWD15CiBDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0NPTU1PTj15CiAjIENPTkZJR19CT0FSRF9BVFNUSzEwMDAgaXMgbm90IHNldAotQ09ORklHX0JPQVJEX0FUTkdXMTAwPXkKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0k9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSSBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0ZBVlJfMzIgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUVSSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX01JTUMyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfQURET05fTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYPXkKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01STVQgaXMgbm90IHNldAogIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1FWR0EgaXMgbm90IHNldAogQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9WR0E9eQogIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1BPV19RVkdBIGlzIG5vdCBzZXQKLUNPTkZJR19CT0FSRF9BVE5HVzEwMF9JMkNfR1BJTz15CiBDT05GSUdfTE9BREVSX1VfQk9PVD15CiAKICMKQEAgLTEzOSwxNCArMTcwLDE0IEBACiAjIENPTkZJR19BUDcwMFhfMzJfQklUX1NNQyBpcyBub3Qgc2V0CiBDT05GSUdfQVA3MDBYXzE2X0JJVF9TTUM9eQogIyBDT05GSUdfQVA3MDBYXzhfQklUX1NNQyBpcyBub3Qgc2V0Ci1DT05GSUdfR1BJT19ERVY9eQogQ09ORklHX0xPQURfQUREUkVTUz0weDEwMDAwMDAwCiBDT05GSUdfRU5UUllfQUREUkVTUz0weDkwMDAwMDAwCiBDT05GSUdfUEhZU19PRkZTRVQ9MHgxMDAwMDAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgaXMgbm90IHNldAorQ09ORklHX1FVSUNLTElTVD15CisjIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBVkVfTUVNT1JZX1BSRVNFTlQgaXMgbm90IHNldAogIyBDT05GSUdfTkVFRF9OT0RFX01FTU1BUF9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTE1OCwzMyArMTg5LDM2IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTk1JX0RFQlVHR0lORz15Ci1DT05GSUdfRFdfRE1BQz15CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfQ01ETElORT0iIgogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC0xOTQsNiArMjI4LDcgQEAKICMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQogIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKQEAgLTIxNCwxMSArMjQ5LDkgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTIzMiw2ICsyNjUsNyBAQAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPXkKIENPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0yNjksNyArMzAzLDYgQEAKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKICMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKQEAgLTI4NSw4ICszMTgsMTAgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zMTAsMTAgKzM0NSwxMiBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCkBAIC0zMzksMTYgKzM3NiwyMCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfU1RQPW0KIENPTkZJR19CUklER0U9bQorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiBDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNTgsMjYgKzM5OSwzMyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM4OSw2ICs0MzcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk4LDEwICs0NDcsMTIgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NDYsMTYgKzQ5NywxNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIwogQ09ORklHX01URF9EQVRBRkxBU0g9eQorIyBDT05GSUdfTVREX0RBVEFGTEFTSF9XUklURV9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RBVEFGTEFTSF9PVFAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC00NzEsNiArNTIzLDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiBDT05GSUdfTVREX1VCST15CkBAIC00OTksMTAgKzU1NiwyMCBAQAogQ09ORklHX0FUTUVMX1RDTElCPXkKIENPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKIENPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMX1NTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JREUgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTUxNCw3ICs1ODEsNiBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTM2LDI1ICs2MDIsMzcgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19NQUNCPXkKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNTk4LDE1ICs2NzYsMzAgQEAKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWD1tCitDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1PXkKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTI9eQorQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMz15CisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOSw5ICs3MTIsMTEgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYzNiw5ICs3MzEsMTEgQEAKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CiAjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldApAQCAtNjQ3LDQ1ICs3NDQsNDQgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9bQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD1tCi0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX0FUTUVMVFdJPW0KKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfR1BJTz1tCiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiBDT05GSUdfU1BJPXkKICMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX01BU1RFUj15CkBAIC02OTUsMzAgKzc5MSw0OCBAQAogIwogQ09ORklHX1NQSV9BVE1FTD15CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0dQSU9fTElCPXkKIAogIwotIyBHUElPIFN1cHBvcnQKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIwogCiAjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIAogIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKQEAgLTczMSwyNCArODQ1LDMxIEBACiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19BVDMyQVA3MDBYX1dEVD15CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03NTgsNiArODc5LDcgQEAKIENPTkZJR19GQj15CiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtNzY1LDggKzg4Nyw4IEBACiAjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTc3OSw2ICs5MDEsOSBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX0FUTUVMPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03OTIsMTE5ICs5MTcsMTI0IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT1tCiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9IUlRJTUVSPXkKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX1ZNQVNURVI9eQorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKIAogIwotIyBBVlIzMiBkZXZpY2VzCisjIEF0bWVsIGRldmljZXMgKEFWUjMyIGFuZCBBVDkxKQogIwotQ09ORklHX1NORF9BVE1FTF9BQzk3PW0KLQotIwotIyBTUEkgZGV2aWNlcwotIwotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKKyMgQ09ORklHX1NORF9BVE1FTF9BQkRBQyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FUTUVMX0FDOTdDPW0KKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAotIwotCi0jCi0jIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcwotIwotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfQUM5N19CVVM9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogQ09ORklHX1VTQl9HQURHRVQ9eQogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTM1MAogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBPXkKIENPTkZJR19VU0JfQVRNRUxfVVNCQT15CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKIENPTkZJR19VU0JfWkVSTz1tCisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9bQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9bQorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz15CiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiAjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfQVRNRUxNQ0k9eQorIyBDT05GSUdfTU1DX0FUTUVMTUNJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CkBAIC05MTMsNyArMTA0MywxMyBAQAogIwogIyBMRUQgZHJpdmVycwogIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTkyMSw2ICsxMDU3LDE0IEBACiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtOTUwLDUxICsxMDk0LDg0IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogQ09ORklHX1JUQ19EUlZfQVQzMkFQNzAwWD15CitDT05GSUdfRE1BREVWSUNFUz15CiAKICMKLSMgVXNlcnNwYWNlIEkvTworIyBETUEgRGV2aWNlcwogIworQ09ORklHX0RXX0RNQUM9eQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTAwMiw2ICsxMTc5LDEyIEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCisjIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEwMjUsMTUgKzEyMDgsMTMgQEAKIENPTkZJR19QUk9DX0ZTPXkKICMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNTksOCArMTI0MCwxMCBAQAogQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQogIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMDcxLDE5ICsxMjU0LDE2IEBACiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KQEAgLTExNTEsMTYgKzEzMzEsMjQgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CkBAIC0xMTcyLDE5ICsxMzYwLDQ4IEBACiAjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE5Miw2MyArMTQwOSwxMTggQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0xaTz15CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQogQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CkBAIC0xMjU3LDggKzE1MjksOSBAQAogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfTFpPX0NPTVBSRVNTPXkKIENPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4YjViMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQxNCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDE1OjMyOjI2IDIwMDkKKyMKK0NPTkZJR19BVlIzMj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlIGFuZCBmZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfU1VCQVJDSF9BVlIzMkI9eQorQ09ORklHX01NVT15CitDT05GSUdfUEVSRk9STUFOQ0VfQ09VTlRFUlM9eQorQ09ORklHX1BMQVRGT1JNX0FUMzJBUD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMFg9eQorQ09ORklHX0NQVV9BVDMyQVA3MDAwPXkKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9DT01NT049eQorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LSSBpcyBub3Qgc2V0CitDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJST15CisjIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0ZBVlJfMzIgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUVSSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX01JTUMyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSV9MQ0QgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0FERE9OX05PTkU9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01STVQgaXMgbm90IHNldAorQ09ORklHX0xPQURFUl9VX0JPT1Q9eQorCisjCisjIEF0bWVsIEFWUjMyIEFQIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FQNzAwWF8zMl9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19BUDcwMFhfMTZfQklUX1NNQz15CisjIENPTkZJR19BUDcwMFhfOF9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAorQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAorQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUVVJQ0tMSVNUPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFWRV9NRU1PUllfUFJFU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19OTUlfREVCVUdHSU5HPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0NNRExJTkU9IiIKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9BVDMyQVA9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKKyMgQ09ORklHX0lQX1BJTVNNX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPXkKK0NPTkZJR19JTkVUX0VTUD15CitDT05GSUdfSU5FVF9JUENPTVA9eQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPXkKK0NPTkZJR19JTkVUNl9FU1A9eQorQ09ORklHX0lORVQ2X0lQQ09NUD15CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KKyMgQ09ORklHX05GX05BVF9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9BTUFOREEgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX1NUUD1tCitDT05GSUdfQlJJREdFPW0KKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPXkKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVE1FTD15CitDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXPXkKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworQ09ORklHX01URF9VQkk9eQorQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKK0NPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKKyMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT1tCitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQVRNRUxfUFdNIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1FTF9UQ0xJQj15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMX1NTQyBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPW0KKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfR1BJTz1tCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVRNRUw9eQorIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCitDT05GSUdfU1BJX1NQSURFVj1tCisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0FUMzJBUDcwMFhfV0RUPXkKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQT15CitDT05GSUdfVVNCX0FUTUVMX1VTQkE9eQorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX1pFUk89bQorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1RFU1Q9bQorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorQ09ORklHX01NQ19BVE1FTE1DST15CisjIENPTkZJR19NTUNfQVRNRUxNQ0lfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfU1BJPW0KKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FUMzJBUDcwMFg9eQorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRFdfRE1BQz15CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAorQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfVUZTX0ZTPXkKKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQorQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQklOQVJZX1BSSU5URj15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9bQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDBfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTkxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMF9kZWZjb25maWcKQEAgLTAsMCArMSwxNTQ5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMTU6MzM6MDkgMjAwOQorIworQ09ORklHX0FWUjMyPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MQorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19TVUJBUkNIX0FWUjMyQj15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QRVJGT1JNQU5DRV9DT1VOVEVSUz15CitDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwWD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0NPTU1PTj15CisjIENPTkZJR19CT0FSRF9BVFNUSzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJPXkKKyMgQ09ORklHX0JPQVJEX0hBTU1FUkhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfRkFWUl8zMiBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9NRVJJU0MgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUlNQzIwMCBpcyBub3Qgc2V0CitDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSV9MQ0Q9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfQURET05fTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYPXkKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX01STVQgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9RVkdBPXkKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9WR0EgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1BPV19RVkdBIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FERVJfVV9CT09UPXkKKworIworIyBBdG1lbCBBVlIzMiBBUCBvcHRpb25zCisjCisjIENPTkZJR19BUDcwMFhfMzJfQklUX1NNQyBpcyBub3Qgc2V0CitDT05GSUdfQVA3MDBYXzE2X0JJVF9TTUM9eQorIyBDT05GSUdfQVA3MDBYXzhfQklUX1NNQyBpcyBub3Qgc2V0CitDT05GSUdfTE9BRF9BRERSRVNTPTB4MTAwMDAwMDAKK0NPTkZJR19FTlRSWV9BRERSRVNTPTB4OTAwMDAwMDAKK0NPTkZJR19QSFlTX09GRlNFVD0weDEwMDAwMDAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1FVSUNLTElTVD15CisjIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBVkVfTUVNT1JZX1BSRVNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9OT0RFX01FTU1BUF9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTk1JX0RFQlVHR0lORz15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfQVQzMkFQPXkKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9eQorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD15CitDT05GSUdfSU5FVF9FU1A9eQorQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD15CitDT05GSUdfSU5FVDZfRVNQPXkKK0NPTkZJR19JTkVUNl9JUENPTVA9eQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD15CitDT05GSUdfSU5FVDZfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCisjIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTVREX0RBVEFGTEFTSD15CisjIENPTkZJR19NVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQVRNRUw9eQorQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19IVz15CisjIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09bQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FUTUVMX1BXTSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfVENMSUI9eQorQ09ORklHX0FUTUVMX1RDQl9DTEtTUkM9eQorQ09ORklHX0FUTUVMX1RDQl9DTEtTUkNfQkxPQ0s9MAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQorQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNT15CitDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEyPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTM9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD1tCisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0dQSU89bQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9TUElERVY9bQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0FUMzJBUDcwMFhfV0RUPXkKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0FUTUVMPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX0hSVElNRVI9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisKKyMKKyMgQXRtZWwgZGV2aWNlcyAoQVZSMzIgYW5kIEFUOTEpCisjCisjIENPTkZJR19TTkRfQVRNRUxfQUJEQUMgaXMgbm90IHNldAorQ09ORklHX1NORF9BVE1FTF9BQzk3Qz1tCisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0zNTAKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBPXkKK0NPTkZJR19VU0JfQVRNRUxfVVNCQT15CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfWkVSTz1tCisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRGUz1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9bQorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVRNRUxNQ0k9eQorIyBDT05GSUdfTU1DX0FUTUVMTUNJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FUMzJBUDcwMFg9eQorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRFdfRE1BQz15CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAorQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GUz15CisjIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xaTz15CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQorQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQklOQVJZX1BSSU5URj15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmNmJjMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAxX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE1NDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAxNTozMzozMiAyMDA5CisjCitDT05GSUdfQVZSMzI9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0xCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1NVQkFSQ0hfQVZSMzJCPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BFUkZPUk1BTkNFX0NPVU5URVJTPXkKK0NPTkZJR19QTEFURk9STV9BVDMyQVA9eQorQ09ORklHX0NQVV9BVDMyQVA3MDBYPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwMD15CitDT05GSUdfQk9BUkRfQVROR1cxMDBfQ09NTU9OPXkKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0kgaXMgbm90IHNldAorQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LSUk9eQorIyBDT05GSUdfQk9BUkRfSEFNTUVSSEVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9GQVZSXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX01FUklTQyBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9NSU1DMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJX0xDRD15CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9BRERPTl9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFg9eQorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTVJNVCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfUVZHQSBpcyBub3Qgc2V0CitDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1ZHQT15CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfUE9XX1FWR0EgaXMgbm90IHNldAorQ09ORklHX0xPQURFUl9VX0JPT1Q9eQorCisjCisjIEF0bWVsIEFWUjMyIEFQIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FQNzAwWF8zMl9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19BUDcwMFhfMTZfQklUX1NNQz15CisjIENPTkZJR19BUDcwMFhfOF9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAorQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAorQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUVVJQ0tMSVNUPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFWRV9NRU1PUllfUFJFU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19OTUlfREVCVUdHSU5HPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX0NNRExJTkU9IiIKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9BVDMyQVA9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKKyMgQ09ORklHX0lQX1BJTVNNX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPXkKK0NPTkZJR19JTkVUX0VTUD15CitDT05GSUdfSU5FVF9JUENPTVA9eQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPXkKK0NPTkZJR19JTkVUNl9FU1A9eQorQ09ORklHX0lORVQ2X0lQQ09NUD15CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KKyMgQ09ORklHX05GX05BVF9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9BTUFOREEgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX1NUUD1tCitDT05GSUdfQlJJREdFPW0KKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPXkKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVE1FTD15CitDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXPXkKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworQ09ORklHX01URF9VQkk9eQorQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKK0NPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKKyMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT1tCitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQVRNRUxfUFdNIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1FTF9UQ0xJQj15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMX1NTQyBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUFDQj15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWD1tCitDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1PXkKK0NPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTI9eQorQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMz15CisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPW0KKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfR1BJTz1tCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVRNRUw9eQorIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCitDT05GSUdfU1BJX1NQSURFVj1tCisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVRNRUw9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009bQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfSFJUSU1FUj15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBkZXZpY2VzIChBVlIzMiBhbmQgQVQ5MSkKKyMKKyMgQ09ORklHX1NORF9BVE1FTF9BQkRBQyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FUTUVMX0FDOTdDPW0KKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU1VQUE9SVD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTM1MAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkE9eQorQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorQ09ORklHX1VTQl9aRVJPPW0KKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT1tCisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorQ09ORklHX01NQ19BVE1FTE1DST15CisjIENPTkZJR19NTUNfQVRNRUxNQ0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVQzMkFQNzAwWD15CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKK0NPTkZJR19EV19ETUFDPXkKK0NPTkZJR19ETUFfRU5HSU5FPXkKKworIworIyBETUEgQ2xpZW50cworIworIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisjIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODUwCitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTPXkKKyMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GU19MWk89eQorQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQorIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPXkKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKK0NPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCitDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDJfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKaW5kZXggMGFiZTkwYS4uNDJkYWZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmMxCi0jIE1vbiBBdWcgIDQgMTY6MDI6MjcgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgT2N0IDI5IDEzOjAwOjU1IDIwMDkKICMKIENPTkZJR19BVlIzMj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKQEAgLTIxLDYgKzIxLDcgQEAKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM0LDIxICszNSwzNiBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CkBAIC01OCwzOCArNzQsNDAgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15Ci0jIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTEKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTk3LDExICsxMTUsOCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMTcsNyArMTMyLDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMKQEAgLTEzMyw3ICsxNDgsMTIgQEAKIENPTkZJR19DUFVfQVQzMkFQNzAwWD15CiBDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQogQ09ORklHX0JPQVJEX0FUU1RLMTAwMD15Ci0jIENPTkZJR19CT0FSRF9BVE5HVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0kgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSSBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0ZBVlJfMzIgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUVSSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX01JTUMyMDAgaXMgbm90IHNldAogQ09ORklHX0JPQVJEX0FUU1RLMTAwMj15CiAjIENPTkZJR19CT0FSRF9BVFNUSzEwMDMgaXMgbm90IHNldAogIyBDT05GSUdfQk9BUkRfQVRTVEsxMDA0IGlzIG5vdCBzZXQKQEAgLTE1OSw3ICsxNzksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfUVVJQ0tMSVNUPXkKLSMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX0JPT1RNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVZFX01FTU9SWV9QUkVTRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX05FRURfTk9ERV9NRU1NQVBfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0xNzEsMTQgKzE5MSwxNiBAQAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX05NSV9ERUJVR0dJTkc9eQogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKQEAgLTE4Niw3ICsyMDgsNyBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0NNRExJTkU9IiIKIAogIwpAQCAtMTk3LDYgKzIxOSw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogCiAjCkBAIC0yMjgsNiArMjUxLDggQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMjk1LDEwICszMjAsMTIgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQogQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQpAQCAtMzA5LDI2ICszMzYsMzMgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zNDAsNiArMzc0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszODQsNyBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CkBAIC0zOTgsMTcgKzQzNCwxOCBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCiBDT05GSUdfTVREX0RBVEFGTEFTSD1tCisjIENPTkZJR19NVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX00yNVA4MD1tCiBDT05GSUdfTTI1UFhYX1VTRV9GQVNUX1JFQUQ9eQorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDI0LDkgKzQ2MSwyMiBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkBAIC00NDQsMTAgKzQ5NCwyMCBAQAogQ09ORklHX0FUTUVMX1RDTElCPXkKIENPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKIENPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKIENPTkZJR19BVE1FTF9TU0M9bQogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKK0NPTkZJR19FRVBST01fQVQyND1tCisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydApAQCAtNDY5LDEwICs1MjksNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNDg5LDggKzU0NSwxMCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPW0KICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC01MTksMjYgKzU3NywzNyBAQAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiAjIENPTkZJR19NSUkgaXMgbm90IHNldAogQ09ORklHX01BQ0I9eQogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNTgwLDE4ICs2NDksMjUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPW0KKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9HUElPPW0KKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQEAgLTYyMiw5ICs2OTgsMTEgQEAKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CiAjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldApAQCAtNjMzLDcgKzcxMSw5IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPW0KIAogIwpAQCAtNjQzLDYgKzcyMyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19HUElPPW0KICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NjMsMTQgKzc0NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fQVQyND1tCi0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02ODUsMTkgKzc1OCwyOCBAQAogIwogQ09ORklHX1NQSV9BVE1FTD15CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKIAogIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CkBAIC03MTMsMTEgKzc5NSwxNSBAQAogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MjYsMTEgKzgxMiwxMSBAQAogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTczOSwyMiArODI1LDE3IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzY0LDYgKzg0NSw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTc4NSwxMCArODY3LDE1IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRNRUw9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAogQ09ORklHX0xDRF9MVFYzNTBRVj15CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAogIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldApAQCAtNzk5LDYgKzg4Niw4IEBACiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtODA3LDEyICs4OTYsMjQgQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBkZXZpY2VzIChBVlIzMiBhbmQgQVQ5MSkKKyMKKyMgQ09ORklHX1NORF9BVE1FTF9BQkRBQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRNRUxfQUM5N0MgaXMgbm90IHNldAogQ09ORklHX1NORF9TUEk9eQogQ09ORklHX1NORF9BVDczQzIxMz1tCiBDT05GSUdfU05EX0FUNzNDMjEzX1RBUkdFVF9CSVRSQVRFPTQ4MDAwCkBAIC04MjUsMzMgKzkyNiw0MyBAQAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCiBDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkE9eQogQ09ORklHX1VTQl9BVE1FTF9VU0JBPXkKICMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogQ09ORklHX1VTQl9aRVJPPW0KKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CkBAIC04NTksMTIgKzk3MCwxOCBAQAogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgRHJpdmVycworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKIENPTkZJR19NTUNfQkxPQ0s9eQogQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQpAQCAtODcyLDEwICs5ODksMTIgQEAKICMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX0FUTUVMTUNJPXkKKyMgQ09ORklHX01NQ19BVE1FTE1DSV9ETUEgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9bQogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKQEAgLTg4Nyw3ICsxMDA2LDExIEBACiBDT05GSUdfTEVEU19BVE1FTF9QV009bQogIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89bQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTg5NSw3ICsxMDE4LDEzIEBACiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQpAQCAtOTI3LDI1ICsxMDU2LDMzIEBACiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTk2NCwyNSArMTEwMSw0NSBAQAogIyBETUEgQ2xpZW50cwogIwogIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05OTAsNiArMTE0NywxMiBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMDEzLDE1ICsxMTc2LDEzIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDM5LDcgKzEyMDAsMTQgQEAKICMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTPXkKKyMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GU19MWk89eQorQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQorIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPW0KICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTEyMiw2ICsxMjkwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEzMCw2ICsxMjk5LDkgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CkBAIC0xMTQ1LDYgKzEzMTcsNyBAQAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldApAQCAtMTE1MywxMyArMTMyNiwzOSBAQAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCkBAIC0xMTY3LDE5ICsxMzY2LDMwIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMjA3LDExICsxNDE3LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT1tCiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTIyOCw3ICsxNDQwLDcgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC0xMjQ3LDE4ICsxNDU5LDI0IEBACiAjCiAjIENvbXByZXNzaW9uCiAjCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPW0KICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj1tCiBDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15CkBAIC0xMjY2LDggKzE0ODQsMTEgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDZfZGVmY29uZmlnCmluZGV4IGMxNjAzYzQuLjM2M2UyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDZfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjOAotIyBUaHUgRGVjIDE4IDExOjIyOjIzIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE9jdCAyOSAxMzowMDoyNSAyMDA5CiAjCiBDT05GSUdfQVZSMzI9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CkBAIC0yMSw2ICsyMSw3IEBACiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNCwyMSArMzUsMzYgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUkVMQVk9eQogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtNTgsMzIgKzc0LDQwIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUE9JTlRTPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0xCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC05MSwxMSArMTE1LDggQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTExLDcgKzEzMiw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTEyOCw4ICsxNDgsMTEgQEAKIENPTkZJR19DUFVfQVQzMkFQNzAwWD15CiBDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQogQ09ORklHX0JPQVJEX0FUU1RLMTAwMD15Ci0jIENPTkZJR19CT0FSRF9BVE5HVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0kgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSSBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPQVJEX0ZBVlJfMzIgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUVSSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPQVJEX01JTUMyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMyBpcyBub3Qgc2V0CkBAIC0xNTYsNyArMTc5LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX1FVSUNLTElTVD15Ci0jIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFWRV9NRU1PUllfUFJFU0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMTcwLDEyICsxOTMsMTQgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19OTUlfREVCVUdHSU5HPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CkBAIC0xOTQsNiArMjE5LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAKICMKQEAgLTI5NCw2ICszMjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC0zMDksMjAgKzMzNiwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zMzQsNiArMzY1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM0Myw2ICszNzUsNyBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CkBAIC0zOTMsOSArNDI2LDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00MDYsNiArNDM3LDcgQEAKIENPTkZJR19NVERfREFUQUZMQVNIX09UUD15CiBDT05GSUdfTVREX00yNVA4MD1tCiBDT05GSUdfTTI1UFhYX1VTRV9GQVNUX1JFQUQ9eQorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDMyLDYgKzQ2NCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogQ09ORklHX01URF9VQkk9eQpAQCAtNDYwLDEzICs0OTcsMjIgQEAKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CiBDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiBDT05GSUdfQVRNRUxfU1NDPW0KICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisKKyMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CkBAIC00ODYsMTAgKzUzMiw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MDYsOCArNTQ4LDEwIEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9bQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzNiwxMiArNTgwLDE3IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDQj15CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU1MCwxNSArNTk5LDE4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNjAwLDE4ICs2NTIsMjUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPW0KKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9HUElPPW0KKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQEAgLTY0Miw5ICs3MDEsMTEgQEAKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CiAjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldApAQCAtNjUzLDYgKzcxNCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPW0KQEAgLTY2NCw2ICs3MjYsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfR1BJTz1tCiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjg0LDE0ICs3NDcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03MDYsMTMgKzc2MSwxOCBAQAogIwogQ09ORklHX1NQSV9BVE1FTD15CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTczOCwxMSArNzk4LDE1IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc2NCwyNiArODI4LDE3IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODE3LDggKzg3MiwxMCBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAogQ09ORklHX0xDRF9MVFYzNTBRVj15CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKQEAgLTgzMyw2ICs4OTAsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9bQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtODQxLDE2ICs4OTksMjggQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfRFJJVkVSUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIEF0bWVsIGRldmljZXMgKEFWUjMyIGFuZCBBVDkxKQorIworIyBDT05GSUdfU05EX0FUTUVMX0FCREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVE1FTF9BQzk3QyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NQST15CiBDT05GSUdfU05EX0FUNzNDMjEzPW0KIENPTkZJR19TTkRfQVQ3M0MyMTNfVEFSR0VUX0JJVFJBVEU9NDgwMDAKQEAgLTg2MywxMSArOTMzLDEwIEBACiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogQ09ORklHX1VTQl9HQURHRVQ9eQogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CkBAIC04ODIsMTggKzk1MSwyNSBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogQ09ORklHX1VTQl9aRVJPPW0KKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVEZTPW0KIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CkBAIC05MDEsNiArOTc3LDEyIEBACiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldApAQCAtOTE3LDYgKzk5OSw3IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAogQ09ORklHX01NQ19BVE1FTE1DST15CiAjIENPTkZJR19NTUNfQVRNRUxNQ0lfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPW0KQEAgLTkzMCw3ICsxMDEzLDExIEBACiBDT05GSUdfTEVEU19BVE1FTF9QV009bQogIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89bQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTkzOSw3ICsxMDI2LDEyIEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPW0KIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQpAQCAtOTcyLDYgKzEwNjQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTk4Myw2ICsxMDc2LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEwMTQsMzIgKzExMDgsNDIgQEAKICMgRE1BIENsaWVudHMKICMKICMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQ9eQogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9bQorQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz1tCitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GUz1tCi1DT05GSUdfRVhUNERFVl9DT01QQVQ9eQorQ09ORklHX0VYVDRfRlM9eQogIyBDT05GSUdfRVhUNF9GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPW0KKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9bQorQ09ORklHX0pCRDI9eQogIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMDQ3LDYgKzExNTEsMTIgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KKyMgQ09ORklHX0NVU0UgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTA3NiwxMCArMTE4Niw3IEBACiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwOTksMTIgKzEyMDYsMTMgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotQ09ORklHX1VCSUZTX0ZTX1hBVFRSPXkKKyMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKIENPTkZJR19VQklGU19GU19MWk89eQogQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQogIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPW0KICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTEyNCw3ICsxMjMyLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTE4OCw2ICsxMjk1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE5Niw2ICsxMzA0LDkgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CkBAIC0xMjExLDYgKzEzMjIsNyBAQAogIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldApAQCAtMTIxOSw2ICsxMzMxLDggQEAKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldApAQCAtMTIyNiwxNyArMTM0MCwzMCBAQAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotCi0jCi0jIFRyYWNlcnMKLSMKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI2MiwxMCArMTM4OSwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORz1tCiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTI5MywxMSArMTQyMiwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPW0KICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9bQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTQ2NSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89eQogCiAjCkBAIC0xMzQxLDExICsxNDczLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPW0KQEAgLTEzNTcsOCArMTQ5MSw5IEBACiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19MWk9fQ09NUFJFU1M9eQogQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGdlbmVyYXRlZC9hc20tb2Zmc2V0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggZDVkMWQ0MS4uM2IzMTU5YiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03Nyw3ICs3Nyw2IEBACiAjZW5kaWYKICNkZWZpbmUgRUxGX0FSQ0gJRU1fQVZSMzIKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKIC8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDAxNWJjNzUuLjllMzZlM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xLDIzICsxLDYgQEAKICNpZm5kZWYgX19BU01fQVZSMzJfSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0FWUjMyX0hBUkRJUlFfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0KLS8qIGVudHJ5LlMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBvZmZzZXRzIG9mIHRoZXNlIGZpZWxkcyAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4KLQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwppbmRleCA5ZjU3MjIyLi45NjA0Zjc3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwpAQCAtMTYsMTUgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCi0vKgotICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCi0gKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KLSAqLwotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50aygidW5leHBlY3RlZCBJUlEgJXVcbiIsIGlycSk7Ci19Ci0KIC8qIE1heSBiZSBvdmVycmlkZGVuIGJ5IHBsYXRmb3JtIGNvZGUgKi8KIGludCBfX3dlYWsgbm1pX2VuYWJsZSh2b2lkKQogewpAQCAtNTEsNyArNDIsNyBAQAogCX0KIAogCWlmIChpIDwgTlJfSVJRUykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwogCQlpZiAoIWFjdGlvbikKIAkJCWdvdG8gdW5sb2NrOwpAQCAtNjYsNyArNTcsNyBAQAogCiAJCXNlcV9wdXRjKHAsICdcbicpOwogCXVubG9jazoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXZyMzIva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYzRiNTY2NS4uOWNkMmJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zOSwzMCArMzksMTAgQEAKIAkJX190YWd0YWJsZV9iZWdpbiA9IC47CiAJCQkqKC50YWdsaXN0LmluaXQpCiAJCV9fdGFndGFibGVfZW5kID0gLjsKLQkJCUlOSVRfREFUQQotCQkuID0gQUxJR04oMTYpOwotCQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkJCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKLQkJLiA9IEFMSUdOKDQpOwotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCQlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCQlfX3NlY3VyaXR5X2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJCSooLnNlY3VyaXR5X2luaXRjYWxsLmluaXQpCi0JCV9fc2VjdXJpdHlfaW5pdGNhbGxfZW5kID0gLjsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkJLiA9IEFMSUdOKDMyKTsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLSNlbmRpZgotCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkJX19pbml0X2VuZCA9IC47CiAJfQorCUlOSVRfREFUQV9TRUNUSU9OKDE2KQorCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9faW5pdF9lbmQgPSAuOwogCiAJLnRleHQJCTogQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgewogCQlfZXZiYSA9IC47CkBAIC03OCwzNCArNTgsMTYgQEAKIAkJX2V0ZXh0ID0gLjsKIAl9ID0gMHhkNzAzZDcwMwogCi0JLiA9IEFMSUdOKDQpOwotCV9fZXhfdGFibGUJOiBBVChBRERSKF9fZXhfdGFibGUpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0JfQotCisJRVhDRVBUSU9OX1RBQkxFKDQpCiAJUk9EQVRBCiAKLQkuID0gQUxJR04oVEhSRUFEX1NJWkUpOwotCiAJLmRhdGEJCTogQVQoQUREUiguZGF0YSkgLSBMT0FEX09GRlNFVCkgewogCQlfZGF0YSA9IC47CiAJCV9zZGF0YSA9IC47Ci0JCS8qCi0JCSAqIEZpcnN0LCB0aGUgaW5pdCB0YXNrIHVuaW9uLCBhbGlnbmVkIHRvIGFuIDhLIGJvdW5kYXJ5LgotCQkgKi8KLQkJKiguZGF0YS5pbml0X3Rhc2spCiAKLQkJLyogVGhlbiwgdGhlIHBhZ2UtYWxpZ25lZCBkYXRhICovCi0JCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCQkqKC5kYXRhLnBhZ2VfYWxpZ25lZCkKLQotCQkvKiBUaGVuLCB0aGUgY2FjaGVsaW5lIGFsaWduZWQgZGF0YSAqLwotCQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQotCi0JCS8qIEFuZCB0aGUgcmVzdC4uLiAqLworCQlJTklUX1RBU0tfREFUQShUSFJFQURfU0laRSkKKwkJUEFHRV9BTElHTkVEX0RBVEEoUEFHRV9TSVpFKTsKKwkJQ0FDSEVMSU5FX0FMSUdORURfREFUQShMMV9DQUNIRV9CWVRFUykKIAkJKiguZGF0YS5yZWwqKQogCQlEQVRBX0RBVEEKIAkJQ09OU1RSVUNUT1JTCkBAIC0xMTMsMTYgKzc1LDggQEAKIAkJX2VkYXRhID0gLjsKIAl9CiAKLQotCS4gPSBBTElHTig4KTsKLQkuYnNzICAgIAk6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgewotCQlfX2Jzc19zdGFydCA9IC47Ci0JCSooLmJzcykKLQkJKihDT01NT04pCi0JCS4gPSBBTElHTig4KTsKLQkJX19ic3Nfc3RvcCA9IC47Ci0JCV9lbmQgPSAuOwotCX0KKwlCU1NfU0VDVElPTigwLCA4LCA4KQorCV9lbmQgPSAuOwogCiAJRFdBUkZfREVCVUcKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCBlYjlkNGRjLi4xYWExZWE1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2F0bWVsX3VzYmFfdWRjLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F0bWVsLW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWVsLW1jaS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0xMTgxLDE5ICsxMTgzLDMyIEBACiBERUZJTkVfREVWKGF0bWVsX3NwaSwgMSk7CiBERVZfQ0xLKHNwaV9jbGssIGF0bWVsX3NwaTEsIHBiYSwgMSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdAotYXQzMl9zcGlfc2V0dXBfc2xhdmVzKHVuc2lnbmVkIGludCBidXNfbnVtLCBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmIsCi0JCSAgICAgIHVuc2lnbmVkIGludCBuLCBjb25zdCB1OCAqcGlucykKK3ZvaWQgX19pbml0CithdDMyX3NwaV9zZXR1cF9zbGF2ZXModW5zaWduZWQgaW50IGJ1c19udW0sIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYiwgdW5zaWduZWQgaW50IG4pCiB7CisJLyoKKwkgKiBNYW5hZ2UgdGhlIGNoaXBzZWxlY3RzIGFzIEdQSU9zLCBub3JtYWxseSB1c2luZyB0aGUgc2FtZSBwaW5zCisJICogdGhlIFNQSSBjb250cm9sbGVyIGV4cGVjdHM7IGJ1dCBib2FyZHMgY2FuIHVzZSBvdGhlciBwaW5zLgorCSAqLworCXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaV9waW5zW11bNF0gPSB7CisJCXsgR1BJT19QSU5fUEEoMyksIEdQSU9fUElOX1BBKDQpLAorCQkgIEdQSU9fUElOX1BBKDUpLCBHUElPX1BJTl9QQSgyMCkgfSwKKwkJeyBHUElPX1BJTl9QQigyKSwgR1BJT19QSU5fUEIoMyksCisJCSAgR1BJT19QSU5fUEIoNCksIEdQSU9fUElOX1BBKDI3KSB9LAorCX07CiAJdW5zaWduZWQgaW50IHBpbiwgbW9kZTsKIAorCS8qIFRoZXJlIGFyZSBvbmx5IDIgU1BJIGNvbnRyb2xsZXJzICovCisJaWYgKGJ1c19udW0gPiAxKQorCQlyZXR1cm47CisKIAlmb3IgKDsgbjsgbi0tLCBiKyspIHsKIAkJYi0+YnVzX251bSA9IGJ1c19udW07CiAJCWlmIChiLT5jaGlwX3NlbGVjdCA+PSA0KQogCQkJY29udGludWU7CiAJCXBpbiA9ICh1bnNpZ25lZCliLT5jb250cm9sbGVyX2RhdGE7CiAJCWlmICghcGluKSB7Ci0JCQlwaW4gPSBwaW5zW2ItPmNoaXBfc2VsZWN0XTsKKwkJCXBpbiA9IHNwaV9waW5zW2J1c19udW1dW2ItPmNoaXBfc2VsZWN0XTsKIAkJCWItPmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopcGluOwogCQl9CiAJCW1vZGUgPSBBVDMyX0dQSU9GX09VVFBVVDsKQEAgLTEyMDYsMTYgKzEyMjEsNiBAQAogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0CiBhdDMyX2FkZF9kZXZpY2Vfc3BpKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IHNwaV9ib2FyZF9pbmZvICpiLCB1bnNpZ25lZCBpbnQgbikKIHsKLQkvKgotCSAqIE1hbmFnZSB0aGUgY2hpcHNlbGVjdHMgYXMgR1BJT3MsIG5vcm1hbGx5IHVzaW5nIHRoZSBzYW1lIHBpbnMKLQkgKiB0aGUgU1BJIGNvbnRyb2xsZXIgZXhwZWN0czsgYnV0IGJvYXJkcyBjYW4gdXNlIG90aGVyIHBpbnMuCi0JICovCi0Jc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpMF9waW5zW10gPQotCQl7IEdQSU9fUElOX1BBKDMpLCBHUElPX1BJTl9QQSg0KSwKLQkJICBHUElPX1BJTl9QQSg1KSwgR1BJT19QSU5fUEEoMjApLCB9OwotCXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTFfcGluc1tdID0KLQkJeyBHUElPX1BJTl9QQigyKSwgR1BJT19QSU5fUEIoMyksCi0JCSAgR1BJT19QSU5fUEIoNCksIEdQSU9fUElOX1BBKDI3KSwgfTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXUzMiBwaW5fbWFzazsKIApAQCAtMTIyOCw3ICsxMjMzLDcgQEAKIAkJc2VsZWN0X3BlcmlwaGVyYWwoUElPQSwgKDEgPDwgMCksIFBFUklQSF9BLCBBVDMyX0dQSU9GX1BVTExVUCk7CiAJCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0EsIHBpbl9tYXNrLCBQRVJJUEhfQSwgMCk7CiAKLQkJYXQzMl9zcGlfc2V0dXBfc2xhdmVzKDAsIGIsIG4sIHNwaTBfcGlucyk7CisJCWF0MzJfc3BpX3NldHVwX3NsYXZlcygwLCBiLCBuKTsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CkBAIC0xMjM5LDcgKzEyNDQsNyBAQAogCQlzZWxlY3RfcGVyaXBoZXJhbChQSU9CLCAoMSA8PCAwKSwgUEVSSVBIX0IsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKIAkJc2VsZWN0X3BlcmlwaGVyYWwoUElPQiwgcGluX21hc2ssIFBFUklQSF9CLCAwKTsKIAotCQlhdDMyX3NwaV9zZXR1cF9zbGF2ZXMoMSwgYiwgbiwgc3BpMV9waW5zKTsKKwkJYXQzMl9zcGlfc2V0dXBfc2xhdmVzKDEsIGIsIG4pOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMzIwLDcgKzEzMjUsNyBAQAogYXQzMl9hZGRfZGV2aWNlX21jaSh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKLQlzdHJ1Y3QgZHdfZG1hX3NsYXZlCQkqZHdzID0gJmRhdGEtPmRtYV9zbGF2ZTsKKwlzdHJ1Y3QgbWNpX2RtYV9zbGF2ZQkJKnNsYXZlOwogCXUzMgkJCQlwaW9hX21hc2s7CiAJdTMyCQkJCXBpb2JfbWFzazsKIApAQCAtMTMzOSwxMyArMTM0NCwxNyBAQAogCQkJCUFSUkFZX1NJWkUoYXRtZWxfbWNpMF9yZXNvdXJjZSkpKQogCQlnb3RvIGZhaWw7CiAKLQlkd3MtPmRtYV9kZXYgPSAmZHdfZG1hYzBfZGV2aWNlLmRldjsKLQlkd3MtPnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8zMkJJVDsKLQlkd3MtPmNmZ19oaSA9IChEV0NfQ0ZHSF9TUkNfUEVSKDApCisJc2xhdmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNpX2RtYV9zbGF2ZSksIEdGUF9LRVJORUwpOworCisJc2xhdmUtPnNkYXRhLmRtYV9kZXYgPSAmZHdfZG1hYzBfZGV2aWNlLmRldjsKKwlzbGF2ZS0+c2RhdGEucmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzMyQklUOworCXNsYXZlLT5zZGF0YS5jZmdfaGkgPSAoRFdDX0NGR0hfU1JDX1BFUigwKQogCQkJCXwgRFdDX0NGR0hfRFNUX1BFUigxKSk7Ci0JZHdzLT5jZmdfbG8gJj0gfihEV0NfQ0ZHTF9IU19EU1RfUE9MCisJc2xhdmUtPnNkYXRhLmNmZ19sbyAmPSB+KERXQ19DRkdMX0hTX0RTVF9QT0wKIAkJCQl8IERXQ19DRkdMX0hTX1NSQ19QT0wpOwogCisJZGF0YS0+ZG1hX3NsYXZlID0gc2xhdmU7CisKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCiAJCQkJc2l6ZW9mKHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSkpKQogCQlnb3RvIGZhaWw7CkBAIC0xNDExLDYgKzE0MjAsOCBAQAogCXJldHVybiBwZGV2OwogCiBmYWlsOgorCWRhdGEtPmRtYV9zbGF2ZSA9IE5VTEw7CisJa2ZyZWUoc2xhdmUpOwogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2F0bWVsLW1jaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjM4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdG1lbC1tY2kuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fTUFDSF9BVE1FTF9NQ0lfSAorI2RlZmluZSBfX01BQ0hfQVRNRUxfTUNJX0gKKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworLyoqCisgKiBzdHJ1Y3QgbWNpX2RtYV9kYXRhIC0gRE1BIGRhdGEgZm9yIE1DSSBpbnRlcmZhY2UKKyAqLworc3RydWN0IG1jaV9kbWFfZGF0YSB7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQlzZGF0YTsKK307CisKKy8qIGFjY2Vzc29yIG1hY3JvcyAqLworI2RlZmluZQlzbGF2ZV9kYXRhX3B0cihzKQkoJihzKS0+c2RhdGEpCisjZGVmaW5lIGZpbmRfc2xhdmVfZGV2KHMpCSgocyktPnNkYXRhLmRtYV9kZXYpCisKKyNkZWZpbmUJc2V0dXBfZG1hX2FkZHIocywgdCwgcikJZG8gewkJXAorCWlmIChzKSB7CQkJCVwKKwkJKHMpLT5zZGF0YS50eF9yZWcgPSAodCk7CVwKKwkJKHMpLT5zZGF0YS5yeF9yZWcgPSAocik7CVwKKwl9CQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19NQUNIX0FUTUVMX01DSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCBkZGVkYjQ3Li5jN2YyNWJiIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKIHN0cnVjdCBzcGlfYm9hcmRfaW5mbzsKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgogYXQzMl9hZGRfZGV2aWNlX3NwaSh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYiwgdW5zaWduZWQgaW50IG4pOwordm9pZCBhdDMyX3NwaV9zZXR1cF9zbGF2ZXModW5zaWduZWQgaW50IGJ1c19udW0sIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYiwgdW5zaWduZWQgaW50IG4pOwogCiBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbzsKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IGFlNmE2MGYuLjUzYzFlMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTUsNiArNSwxMCBAQAogCiBtYWlubWVudSAiQmxhY2tmaW4gS2VybmVsIENvbmZpZ3VyYXRpb24iCiAKK2NvbmZpZyBTWU1CT0xfUFJFRklYCisJc3RyaW5nCisJZGVmYXVsdCAiXyIKKwogY29uZmlnIE1NVQogCWRlZl9ib29sIG4KIApAQCAtMjgsNiArMzIsOSBAQAogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAKK2NvbmZpZyBHRU5FUklDX0NTVU0KKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBHRU5FUklDX0JVRwogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEJVRwpAQCAtMTczLDcgKzE4MCw3IEBACiAJaGVscAogCSAgQkY1MzkgUHJvY2Vzc29yIFN1cHBvcnQuCiAKLWNvbmZpZyBCRjU0MgorY29uZmlnIEJGNTQyX3N0ZAogCWJvb2wgIkJGNTQyIgogCWhlbHAKIAkgIEJGNTQyIFByb2Nlc3NvciBTdXBwb3J0LgpAQCAtMTgzLDcgKzE5MCw3IEBACiAJaGVscAogCSAgQkY1NDIgUHJvY2Vzc29yIFN1cHBvcnQuCiAKLWNvbmZpZyBCRjU0NAorY29uZmlnIEJGNTQ0X3N0ZAogCWJvb2wgIkJGNTQ0IgogCWhlbHAKIAkgIEJGNTQ0IFByb2Nlc3NvciBTdXBwb3J0LgpAQCAtMTkzLDcgKzIwMCw3IEBACiAJaGVscAogCSAgQkY1NDQgUHJvY2Vzc29yIFN1cHBvcnQuCiAKLWNvbmZpZyBCRjU0NworY29uZmlnIEJGNTQ3X3N0ZAogCWJvb2wgIkJGNTQ3IgogCWhlbHAKIAkgIEJGNTQ3IFByb2Nlc3NvciBTdXBwb3J0LgpAQCAtMjAzLDcgKzIxMCw3IEBACiAJaGVscAogCSAgQkY1NDcgUHJvY2Vzc29yIFN1cHBvcnQuCiAKLWNvbmZpZyBCRjU0OAorY29uZmlnIEJGNTQ4X3N0ZAogCWJvb2wgIkJGNTQ4IgogCWhlbHAKIAkgIEJGNTQ4IFByb2Nlc3NvciBTdXBwb3J0LgpAQCAtMjEzLDcgKzIyMCw3IEBACiAJaGVscAogCSAgQkY1NDggUHJvY2Vzc29yIFN1cHBvcnQuCiAKLWNvbmZpZyBCRjU0OQorY29uZmlnIEJGNTQ5X3N0ZAogCWJvb2wgIkJGNTQ5IgogCWhlbHAKIAkgIEJGNTQ5IFByb2Nlc3NvciBTdXBwb3J0LgpAQCAtMzA3LDMxICszMTQsMTEgQEAKIAogZW5kY2hvaWNlCiAKLWNvbmZpZyBCRjUxeAotCWJvb2wKLQlkZXBlbmRzIG9uIChCRjUxMiB8fCBCRjUxNCB8fCBCRjUxNiB8fCBCRjUxOCkKLQlkZWZhdWx0IHkKLQotY29uZmlnIEJGNTJ4Ci0JYm9vbAotCWRlcGVuZHMgb24gKEJGNTIyIHx8IEJGNTIzIHx8IEJGNTI0IHx8IEJGNTI1IHx8IEJGNTI2IHx8IEJGNTI3KQotCWRlZmF1bHQgeQotCiBjb25maWcgQkY1M3gKIAlib29sCiAJZGVwZW5kcyBvbiAoQkY1MzEgfHwgQkY1MzIgfHwgQkY1MzMgfHwgQkY1MzQgfHwgQkY1MzYgfHwgQkY1MzcpCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBCRjU0eE0KLQlib29sCi0JZGVwZW5kcyBvbiAoQkY1NDJNIHx8IEJGNTQ0TSB8fCBCRjU0N00gfHwgQkY1NDhNIHx8IEJGNTQ5TSkKLQlkZWZhdWx0IHkKLQotY29uZmlnIEJGNTR4Ci0JYm9vbAotCWRlcGVuZHMgb24gKEJGNTQyIHx8IEJGNTQ0IHx8IEJGNTQ3IHx8IEJGNTQ4IHx8IEJGNTQ5IHx8IEJGNTR4TSkKLQlkZWZhdWx0IHkKLQogY29uZmlnIE1FTV9HRU5FUklDX0JPQVJECiAJYm9vbAogCWRlcGVuZHMgb24gR0VORVJJQ19CT0FSRApAQCAtOTEzLDYgKzkwMCwxMiBAQAogCWJvb2wgIkVuYWJsZSAyTSBETUEgcmVnaW9uIgogY29uZmlnIERNQV9VTkNBQ0hFRF8xTQogCWJvb2wgIkVuYWJsZSAxTSBETUEgcmVnaW9uIgorY29uZmlnIERNQV9VTkNBQ0hFRF81MTJLCisJYm9vbCAiRW5hYmxlIDUxMksgRE1BIHJlZ2lvbiIKK2NvbmZpZyBETUFfVU5DQUNIRURfMjU2SworCWJvb2wgIkVuYWJsZSAyNTZLIERNQSByZWdpb24iCitjb25maWcgRE1BX1VOQ0FDSEVEXzEyOEsKKwlib29sICJFbmFibGUgMTI4SyBETUEgcmVnaW9uIgogY29uZmlnIERNQV9VTkNBQ0hFRF9OT05FCiAJYm9vbCAiRGlzYWJsZSBETUEgcmVnaW9uIgogZW5kY2hvaWNlCkBAIC0xMjc0LDYgKzEyNjcsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2Zpcm13YXJlL0tjb25maWciCisKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWciCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQppbmRleCBmMDYzYjc3Li5kNGM3MTc3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIEtCVUlMRF9DRkxBR1MgICAgICAgICAgICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1mZHBpYykKIEtCVUlMRF9BRkxBR1MgICAgICAgICAgICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1mZHBpYykKIENGTEFHU19NT0RVTEUgICAgKz0gLW1sb25nLWNhbGxzCitMREZMQUdTX01PRFVMRSAgICs9IC1tIGVsZjMyYmZpbgogS0FMTFNZTVMgICAgICAgICArPSAtLXN5bWJvbC1wcmVmaXg9XwogCiBLQlVJTERfREVGQ09ORklHIDo9IEJGNTM3LVNUQU1QX2RlZmNvbmZpZwpAQCAtMTM3LDcgKzEzOCw3IEBACiAKIElOU1RBTExfUEFUSCA/PSAvdGZ0cGJvb3QKIGJvb3QgOj0gYXJjaC8kKEFSQ0gpL2Jvb3QKLUJPT1RfVEFSR0VUUyA9IHZtSW1hZ2Ugdm1JbWFnZS5iejIgdm1JbWFnZS5neiB2bUltYWdlLmx6bWEKK0JPT1RfVEFSR0VUUyA9IHZtSW1hZ2Ugdm1JbWFnZS5iaW4gdm1JbWFnZS5iejIgdm1JbWFnZS5neiB2bUltYWdlLmx6bWEKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKSBpbnN0YWxsCiBLQlVJTERfSU1BR0UgOj0gJChib290KS92bUltYWdlCiAKQEAgLTE1MSw2ICsxNTIsNyBAQAogCiBkZWZpbmUgYXJjaGhlbHAKICAgZWNobyAgJyogdm1JbWFnZSAgICAgICAgIC0gQWxpYXMgdG8gc2VsZWN0ZWQga2VybmVsIGZvcm1hdCAodm1JbWFnZS5neiBieSBkZWZhdWx0KScKKyAgZWNobyAgJyAgdm1JbWFnZS5iaW4gICAgIC0gVW5jb21wcmVzc2VkIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGFyY2gvJChBUkNIKS9ib290L3ZtSW1hZ2UuYmluKScKICAgZWNobyAgJyAgdm1JbWFnZS5iejIgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYXJjaC8kKEFSQ0gpL2Jvb3Qvdm1JbWFnZS5iejIpJwogICBlY2hvICAnKiB2bUltYWdlLmd6ICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChhcmNoLyQoQVJDSCkvYm9vdC92bUltYWdlLmd6KScKICAgZWNobyAgJyAgdm1JbWFnZS5sem1hICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYXJjaC8kKEFSQ0gpL2Jvb3Qvdm1JbWFnZS5sem1hKScKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vYm9vdC9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vYm9vdC9NYWtlZmlsZQppbmRleCBmZDljY2M1Li5lOWM0OGM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9ibGFja2Zpbi9ib290L01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogCiBNS0lNQUdFIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9ta3Vib290LnNoCiAKLXRhcmdldHMgOj0gdm1JbWFnZSB2bUltYWdlLmJ6MiB2bUltYWdlLmd6IHZtSW1hZ2UubHptYQordGFyZ2V0cyA6PSB2bUltYWdlIHZtSW1hZ2UuYmluIHZtSW1hZ2UuYnoyIHZtSW1hZ2UuZ3ogdm1JbWFnZS5sem1hCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCiAKIHF1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRACkBAIC0yOSw2ICsyOSw5IEBACiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKIAorJChvYmopL3ZtSW1hZ2UuYmluOiAkKG9iaikvdm1saW51eC5iaW4KKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2Usbm9uZSkKKwogJChvYmopL3ZtSW1hZ2UuYnoyOiAkKG9iaikvdm1saW51eC5iaW4uYnoyCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGJ6aXAyKQogCkBAIC0zOCw2ICs0MSw3IEBACiAkKG9iaikvdm1JbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCitzdWZmaXgteSAgICAgICAgICAgICAgICAgICAgICA6PSBiaW4KIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKaW5kZXggOTkwNWIyNi4uZTMxNTU5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTE4Ri1FWkJSRF9kZWZjb25maWcKQEAgLTY3LDYgKzY3LDcgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKQEAgLTMxNiw2ICszMTcsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKIENPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldApAQCAtNDM4LDE3ICs0NDAsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRFNBPXkKLSMgQ09ORklHX05FVF9EU0FfVEFHX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBX1RBR19FRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0FfVEFHX1RSQUlMRVIgaXMgbm90IHNldAotQ09ORklHX05FVF9EU0FfVEFHX1NUUElEPXkKLSMgQ09ORklHX05FVF9EU0FfTVY4OEU2WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0FfTVY4OEU2MTMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0FfTVY4OEU2MTIzXzYxXzY1IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRFNBX0tTWjg4OTNNPXkKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwppbmRleCA5ZGM2ODIwLi4wNzVlMGZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKQEAgLTY3LDYgKzY3LDcgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKQEAgLTMyMSw2ICszMjIsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKIENPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKaW5kZXggNzdlMzVkNC4uNmQxYTYyMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCkBAIC02Nyw2ICs2Nyw3IEBACiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CkBAIC0zMjEsNiArMzIyLDcgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0wCiBDT05GSUdfQkZJTl9HUFRJTUVSUz15CiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCmluZGV4IDRjMDQ0ODAuLjUwZjlhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZwpAQCAtNjcsNiArNjcsNyBAQAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQpAQCAtMjgzLDYgKzI4NCw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBjOTliYmNkLi42YzYwYzgyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTY3LDYgKzY3LDcgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKQEAgLTI4Myw2ICsyODQsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKIENPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKaW5kZXggMDkyZmZkYS4uMjkwODU5NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCkBAIC02Nyw2ICs2Nyw3IEBACiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CkBAIC0yOTAsNiArMjkxLDcgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0wCiBDT05GSUdfQkZJTl9HUFRJTUVSUz1tCiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKQEAgLTcwNCwxMCArNzA2LDcgQEAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZwppbmRleCBmYTY5OGE4Li4wOWVhMjQ5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKQEAgLTY3LDYgKzY3LDcgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKQEAgLTMwMSw2ICszMDIsNyBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKIENPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggZjc3M2FkMS4uZWIzZTk4YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCkBAIC0xLDIyICsxLDI5IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjguMTAKLSMgVGh1IE1heSAyMSAwNTo1MDowMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEuNQorIyBNb24gTm92ICAyIDIyOjAyOjU2IDIwMDkKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAogQ09ORklHX0JMQUNLRklOPXkKK0NPTkZJR19HRU5FUklDX0NTVU09eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19aT05FX0RNQT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMjYsMjIgKzMzLDQwIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtNjIsMTcgKzg3LDI4IEBACiAjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfVElOWV9TSE1FTT15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC04MCwxMSArMTE2LDggQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC05NCwxMyArMTI3LDEyIEBACiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKIENPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMTM3LDcgKzE2OSw3IEBACiAjIENPTkZJR19CRjU0NE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDdNIGlzIG5vdCBzZXQKLUNPTkZJR19CRjU0OD15CitDT05GSUdfQkY1NDhfc3RkPXkKICMgQ09ORklHX0JGNTQ4TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OU0gaXMgbm90IHNldApAQCAtMTk1LDcgKzIyNyw3IEBACiAjCiAjIEJGNTQ4IFNwZWNpZmljIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0RFQl9ETUFfVVJHRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJfRE1BX1VSR0VOVD15CiAjIENPTkZJR19CRjU0OF9BVEFQSV9BTFRFUk5BVElWRV9QT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMzUyLDEwICszODQsMTEgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogQ09ORklHX0JGSU5fR1BUSU1FUlM9bQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMk09eQpAQCAtMzY2LDE0ICszOTksMTMgQEAKICMgQ2FjaGUgU3VwcG9ydAogIwogQ09ORklHX0JGSU5fSUNBQ0hFPXkKLSMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQorIyBDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRT15Ci1DT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLPXkKLSMgQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0VYVE1FTV9XUklURVRIUk9VR0g9eQogIyBDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFIGlzIG5vdCBzZXQKIAogIwpAQCAtMzgyLDcgKzQxNCw3IEBACiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCiAjCi0jIEFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCisjIEFzeW5jaHJvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgogIwogCiAjCkBAIC00NDEsMTEgKzQ3Myw2IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC00NjksMTMgKzQ5NiwxMSBAQAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldApAQCAtNDkzLDcgKzUxOCwxMCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTU0OCwxNCArNTc2LDEwIEBACiAjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX0xJQjgwMjExPW0KKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC01NzgsNiArNjAyLDcgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldApAQCAtNjUzLDcgKzY3OCw2IEBACiAjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0JGSU4gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiBDT05GSUdfTVREX05BTkRfQkY1WFg9eQogQ09ORklHX01URF9OQU5EX0JGNVhYX0hXRUNDPXkKQEAgLTY2NSw2ICs2ODksMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNjgyLDEwICs3MTEsMjAgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC03MDksMTAgKzc0OCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC03MjksNiArNzY0LDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTc0NCwxMyArNzgwLDM0IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci1DT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTc1OSw2ICs4MTYsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCkBAIC03NzEsMTMgKzgzMCwxNiBAQAogIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKIENPTkZJR19MSUJFUlRBU19TRElPPW0KIENPTkZJR19QT1dFUk9GMl9CTE9DS1NJWkVfT05MWT15CisjIENPTkZJR19MSUJFUlRBU19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCiAjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CkBAIC04MTMsMjggKzg3NSwzMSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfQkZJTj15Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQkZJTj15CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAogQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3Nz1tCiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKQEAgLTg0NCw2ICs5MDksOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CkBAIC04NTIsNyArOTE5LDExIEBACiAjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0JGSU5fUk9UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BRFhMMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BDRjg1NzQgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtODYzLDE2ICs5MzQsMTMgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KICMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9TUE9SVD1tCi0jIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9UV0lfTENEIGlzIG5vdCBzZXQKLUNPTkZJR19TSU1QTEVfR1BJTz1tCiBDT05GSUdfVlQ9eQogQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKQEAgLTg5MCw2ICs5NTgsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0JGSU49eQogQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9CRklOX0RNQT15CkBAIC05MDMsNiArOTcyLDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX09UUD15CiAjIENPTkZJR19CRklOX09UUF9XUklURV9FTkFCTEUgaXMgbm90IHNldApAQCAtOTUxLDE0ICsxMDIxLDkgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDUyNTIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTc1LDEzICsxMDQwLDE4IEBACiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkBAIC05OTcsNiArMTA2Nyw3IEBACiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAogCiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKQEAgLTEwMzgsMjggKzExMDksMTkgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtMTA5Niw2ICsxMTU4LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMTMyLDYgKzExOTUsNyBAQAogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CkBAIC0xMTQyLDYgKzEyMDYsMTEgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfRFJJVkVSUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKQEAgLTExNTIsNyArMTIyMSw2IEBACiAjCiAjIEFMU0EgQmxhY2tmaW4gZGV2aWNlcwogIwotIyBDT05GSUdfU05EX0JMQUNLRklOX0FEMTgzNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQkZJTl9BRDczMzIyIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVVNCPXkKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldApAQCAtMTE2MCwxNSArMTIyOCwxNyBAQAogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQogIyBDT05GSUdfU05EX0JGNVhYX0kyUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfVERNIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQkY1WFhfQUM5Nz15CiBDT05GSUdfU05EX0JGNVhYX01NQVBfU1VQUE9SVD15CiAjIENPTkZJR19TTkRfQkY1WFhfTVVMVElDSEFOX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1NORF9CRjVYWF9TT0NfU1BPUlQ9eQotQ09ORklHX1NORF9CRjVYWF9TT0NfQUM5Nz15Ci1DT05GSUdfU05EX0JGNVhYX1NPQ19BRDE5ODA9eQotQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU09MAogQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQ9eQogQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTT0xOQorQ09ORklHX1NORF9CRjVYWF9TT0NfQUQxOTgwPXkKK0NPTkZJR19TTkRfQkY1WFhfU09DX1NQT1JUPXkKK0NPTkZJR19TTkRfQkY1WFhfU09DX0FDOTc9eQorQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU09MAorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQogIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DX0FEMTk4MD15CiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CkBAIC0xMTg4LDMwICsxMjU4LDM0IEBACiAjCiAjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLUNPTkZJR19ISURfQ09NUEFUPXkKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQotQ09ORklHX0hJRF9CUklHSFQ9eQogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15Ci1DT05GSUdfSElEX0RFTEw9eQorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15CiBDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKICMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQotQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCi1DT05GSUdfWkVST1BMVVNfRkY9bQorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CkBAIC0xMjM3LDYgKzEzMTEsNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldApAQCAtMTI2NywxOCArMTM0MiwxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTMxNCw3ICsxMzg4LDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMzI2LDYgKzEzOTksMTMgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1VTQl9YQ0VJVj15CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CkBAIC0xMzgwLDYgKzE0NjAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE0MTEsMTAgKzE0OTIsMjEgQEAKICMKIENPTkZJR19SVENfRFJWX0JGSU49eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCisjIEZpcm13YXJlIERyaXZlcnMKKyMKKyMgQ09ORklHX0ZJUk1XQVJFX01FTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUdNQSBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xNDI3LDkgKzE1MTksMTEgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0MzksNiArMTUzMywxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfSVNPOTY2MF9GUz1tCkBAIC0xNDY3LDEwICsxNTY2LDcgQEAKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xNDg5LDE3ICsxNTg1LDggQEAKICMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX1lBRkZTX0ZTPW0KLUNPTkZJR19ZQUZGU19ZQUZGUzE9eQotIyBDT05GSUdfWUFGRlNfOUJZVEVfVEFHUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBub3Qgc2V0Ci1DT05GSUdfWUFGRlNfWUFGRlMyPXkKLUNPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15Ci0jIENPTkZJR19ZQUZGU19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1MDgsNiArMTU5NSw3IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MjIsNyArMTYxMCw2IEBACiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCkBAIC0xNTk2LDExICsxNjgzLDE1IEBACiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19TSElSUT15CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldApAQCAtMTYwOCwxNiArMTY5OSwyMSBAQAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9NTVVfUkVHSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CkBAIC0xNjI1LDE3ICsxNzIxLDE2IEBACiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVkVSQk9TRT15CkBAIC0xNjU3LDE3ICsxNzUyLDE1IEBACiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CisjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAogQ09ORklHX0NSWVBUTz15CiAKICMKQEAgLTE3NDYsNiArMTgzOSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTc1MywxMSArMTg0NywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CkBAIC0xNzY3LDYgKzE4NjMsOCBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtQUNWSUxPTl9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtQUNWSUxPTl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliMGY5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1BQ1ZJTE9OX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2NDMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS40CisjIFNhdCBPY3QgMjQgMTI6MTU6MzIgMjAwOQorIworIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0dFTkVSSUNfQ1NVTT15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE0CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX1NJR05BTEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRGRCBpcyBub3Qgc2V0CisjIENPTkZJR19BSU8gaXMgbm90IHNldAorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMKKyMKKworIworIyBQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzCisjCisjIENPTkZJR19CRjUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUxNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUxNiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUxOCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyMyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzMSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzMyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ3TSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKK0NPTkZJR19CRjU2MT15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl9NSU49MworQ09ORklHX0JGX1JFVl9NQVg9NQorIyBDT05GSUdfQkZfUkVWXzBfMCBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzIgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfMyBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKK0NPTkZJR19CRl9SRVZfMF81PXkKKyMgQ09ORklHX0JGX1JFVl8wXzYgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWX0FOWSBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BMTF9XQUtFVVA9NworQ09ORklHX0lSUV9TUE9SVDBfRVJST1I9NworQ09ORklHX0lSUV9TUE9SVDFfRVJST1I9NworQ09ORklHX0lSUV9USU1FUjA9MTAKK0NPTkZJR19JUlFfVElNRVIxPTEwCitDT05GSUdfSVJRX1RJTUVSMj0xMAorQ09ORklHX0lSUV9USU1FUjM9MTAKK0NPTkZJR19JUlFfVElNRVI0PTEwCitDT05GSUdfSVJRX1RJTUVSNT0xMAorQ09ORklHX0lSUV9USU1FUjY9MTAKK0NPTkZJR19JUlFfVElNRVI3PTEwCitDT05GSUdfSVJRX1NQSV9FUlJPUj03CisjIENPTkZJR19CRklONTYxX0VaS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41NjFfVEVQTEEgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTjU2MV9BQ1ZJTE9OPXkKKworIworIyBCRjU2MSBTcGVjaWZpYyBDb25maWd1cmF0aW9uCisjCisKKyMKKyMgQ29yZSBCIFN1cHBvcnQKKyMKKyMgQ09ORklHX0JGNTYxX0NPUkVCIGlzIG5vdCBzZXQKKworIworIyBJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudAorIworCisjCisjIFByaW9yaXR5CisjCitDT05GSUdfSVJRX0RNQTFfRVJST1I9NworQ09ORklHX0lSUV9ETUEyX0VSUk9SPTcKK0NPTkZJR19JUlFfSU1ETUFfRVJST1I9NworQ09ORklHX0lSUV9QUEkwX0VSUk9SPTcKK0NPTkZJR19JUlFfUFBJMV9FUlJPUj03CitDT05GSUdfSVJRX1VBUlRfRVJST1I9NworQ09ORklHX0lSUV9SRVNFUlZFRF9FUlJPUj03CitDT05GSUdfSVJRX0RNQTFfMD04CitDT05GSUdfSVJRX0RNQTFfMT04CitDT05GSUdfSVJRX0RNQTFfMj04CitDT05GSUdfSVJRX0RNQTFfMz04CitDT05GSUdfSVJRX0RNQTFfND04CitDT05GSUdfSVJRX0RNQTFfNT04CitDT05GSUdfSVJRX0RNQTFfNj04CitDT05GSUdfSVJRX0RNQTFfNz04CitDT05GSUdfSVJRX0RNQTFfOD04CitDT05GSUdfSVJRX0RNQTFfOT04CitDT05GSUdfSVJRX0RNQTFfMTA9OAorQ09ORklHX0lSUV9ETUExXzExPTgKK0NPTkZJR19JUlFfRE1BMl8wPTkKK0NPTkZJR19JUlFfRE1BMl8xPTkKK0NPTkZJR19JUlFfRE1BMl8yPTkKK0NPTkZJR19JUlFfRE1BMl8zPTkKK0NPTkZJR19JUlFfRE1BMl80PTkKK0NPTkZJR19JUlFfRE1BMl81PTkKK0NPTkZJR19JUlFfRE1BMl82PTkKK0NPTkZJR19JUlFfRE1BMl83PTkKK0NPTkZJR19JUlFfRE1BMl84PTkKK0NPTkZJR19JUlFfRE1BMl85PTkKK0NPTkZJR19JUlFfRE1BMl8xMD05CitDT05GSUdfSVJRX0RNQTJfMTE9OQorQ09ORklHX0lSUV9USU1FUjg9MTAKK0NPTkZJR19JUlFfVElNRVI5PTEwCitDT05GSUdfSVJRX1RJTUVSMTA9MTAKK0NPTkZJR19JUlFfVElNRVIxMT0xMAorQ09ORklHX0lSUV9QUk9HMF9JTlRBPTExCitDT05GSUdfSVJRX1BST0cwX0lOVEI9MTEKK0NPTkZJR19JUlFfUFJPRzFfSU5UQT0xMQorQ09ORklHX0lSUV9QUk9HMV9JTlRCPTExCitDT05GSUdfSVJRX1BST0cyX0lOVEE9MTEKK0NPTkZJR19JUlFfUFJPRzJfSU5UQj0xMQorQ09ORklHX0lSUV9ETUExX1dSUkQwPTgKK0NPTkZJR19JUlFfRE1BMV9XUlJEMT04CitDT05GSUdfSVJRX0RNQTJfV1JSRDA9OQorQ09ORklHX0lSUV9ETUEyX1dSUkQxPTkKK0NPTkZJR19JUlFfSU1ETUFfV1JSRDA9MTIKK0NPTkZJR19JUlFfSU1ETUFfV1JSRDE9MTIKK0NPTkZJR19JUlFfV0RUSU1FUj0xMworCisjCisjIEJvYXJkIGN1c3RvbWl6YXRpb25zCisjCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBDbG9jay9QTEwgU2V0dXAKKyMKK0NPTkZJR19DTEtJTl9IWj0xMjAwMDAwMAorIyBDT05GSUdfQkZJTl9LRVJORUxfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX01BWF9WQ09fSFo9NjAwMDAwMDAwCitDT05GSUdfTUlOX1ZDT19IWj01MDAwMDAwMAorQ09ORklHX01BWF9TQ0xLX0haPTEzMzMzMzMzMworQ09ORklHX01JTl9TQ0xLX0haPTI3MDAwMDAwCisKKyMKKyMgS2VybmVsIFRpbWVyL1NjaGVkdWxlcgorIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1RJQ0tTT1VSQ0VfR1BUTVIwIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLU09VUkNFX0NPUkVUTVI9eQorQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRT15CisjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBNaXNjCisjCitDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVROPXkKKyMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfUkVURSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX0NZQ0xFUyBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gS2VybmVsIE9wdGltaXphdGlvbnMKKyMKKworIworIyBNZW1vcnkgT3B0aW1pemF0aW9ucworIworQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKK0NPTkZJR19TQ0hFRFVMRV9MMT15CitDT05GSUdfQVJJVEhNRVRJQ19PUFNfTDE9eQorQ09ORklHX0FDQ0VTU19PS19MMT15CitDT05GSUdfTUVNU0VUX0wxPXkKK0NPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKKyMgQ09ORklHX0lQX0NIRUNLU1VNX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CisjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAorQ09ORklHX0FQUF9TVEFDS19MMT15CisKKyMKKyMgU3BlZWQgT3B0aW1pemF0aW9ucworIworQ09ORklHX0JGSU5fSU5TX0xPV09WRVJIRUFEPXkKK0NPTkZJR19SQU1LRVJORUw9eQorIyBDT05GSUdfUk9NS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKK0NPTkZJR19CRklOX0dQVElNRVJTPXkKK0NPTkZJR19ETUFfVU5DQUNIRURfNE09eQorIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF8xTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfVU5DQUNIRURfTk9ORSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGUgU3VwcG9ydAorIworQ09ORklHX0JGSU5fSUNBQ0hFPXkKK0NPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFPXkKKyMgQ09ORklHX0JGSU5fTDJfSUNBQ0hFQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9EQ0FDSEU9eQorIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0RDQUNIRUFCTEU9eQorQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFQkFDSz15CisjIENPTkZJR19CRklOX0VYVE1FTV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgUHJvdGVjdGlvbiBVbml0CisjCisjIENPTkZJR19NUFUgaXMgbm90IHNldAorCisjCisjIEFzeW5jaHJvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgorIworCisjCisjIEVCSVVfQU1HQ1RMIEdsb2JhbCBDb250cm9sCisjCitDT05GSUdfQ19BTUNLRU49eQorQ09ORklHX0NfQ0RQUklPPXkKK0NPTkZJR19DX0IwUEVOPXkKK0NPTkZJR19DX0IxUEVOPXkKK0NPTkZJR19DX0IyUEVOPXkKKyMgQ09ORklHX0NfQjNQRU4gaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTiBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjBfQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMV9CMiBpcyBub3Qgc2V0CitDT05GSUdfQ19BTUJFTl9BTEw9eQorCisjCisjIEVCSVVfQU1CQ1RMIENvbnRyb2wKKyMKK0NPTkZJR19CQU5LXzA9MHg5OWIyCitDT05GSUdfQkFOS18xPTB4MzM1MAorQ09ORklHX0JBTktfMj0weDdCQjAKK0NPTkZJR19CQU5LXzM9MHhBQUMyCisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSkKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGX0ZEUElDPXkKK0NPTkZJR19CSU5GTVRfRkxBVD15CitDT05GSUdfQklORk1UX1pGTEFUPXkKKyMgQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkFNPXkKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPXkKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorQ09ORklHX01URF9QSFJBTT15CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxPQ0syTVREPXkKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49eQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1NJTVBMRV9USU1FUj15CisjIENPTkZJR19CRklOX1NQSV9BREMgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1RXSV9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX0pUQUdfQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOPXkKK0NPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9CRklOX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0JGSU5fUElPPXkKK0NPTkZJR19TRVJJQUxfQkZJTl9VQVJUMD15CisjIENPTkZJR19CRklOX1VBUlQwX0NUU1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIENBTiwgdGhlIGNhciBidXMgYW5kIGluZHVzdHJpYWwgZmllbGRidXMKKyMKKyMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT1BDQT15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworQ09ORklHX0kyQ19QQ0FfUExBVEZPUk09eQorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQkZJTj15CisjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9TUElERVY9eQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19QQ0Y4NTdYPXkKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1dEVD15CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1BJPXkKKworIworIyBBTFNBIEJsYWNrZmluIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9CRklOX0FENzMzMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX0JGNVhYX0kyUz15CisjIENPTkZJR19TTkRfQkY1WFhfU09DX1NTTTI2MDIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BRDczMzExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTc2MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfVERNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9BQzk3IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQkY1WFhfU09DX1NQT1JUPXkKK0NPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNPTEKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NFUklBTD15CisjIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlybXdhcmUgRHJpdmVycworIworIyBDT05GSUdfRklSTVdBUkVfTUVNTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NjYKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImNwMTI1MSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKKyMgQ09ORklHX0pGRlMyX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0xaTz15CisjIENPTkZJR19KRkZTMl9SVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTz15CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJjcDEyNTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19LT0k4X1I9eQorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TRUNUSU9OX01JU01BVENIPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9NTVVfUkVHSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01NUlM9eQorIyBDT05GSUdfREVCVUdfSFdFUlIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk89eQorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9PTj15CitDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09GRj15CisjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9UV08gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTj0wCisjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CitDT05GSUdfQ1BMQl9JTkZPPXkKK0NPTkZJR19BQ0NFU1NfQ0hFQ0s9eQorIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwppbmRleCAwMzEzY2QxLi5lM2VjZGNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKQEAgLTEsMjIgKzEsMjkgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC4xMAotIyBUaHUgTWF5IDIxIDA1OjUwOjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS41CisjIE1vbiBOb3YgIDIgMjE6NTk6MzEgMjAwOQogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CiBDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0dFTkVSSUNfQ1NVTT15CitDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE0CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0yNiwyMiArMzMsNDAgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC02MiwxNyArODcsMjggQEAKICMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAogIyBDT05GSUdfRVZFTlRGRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTgwLDExICsxMTYsOCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTk0LDEzICsxMjcsMTIgQEAKIENPTkZJR19JT1NDSEVEX05PT1A9eQogQ09ORklHX0lPU0NIRURfQVM9eQogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0xNzAsNiArMjAyLDcgQEAKIENPTkZJR19CRklONTYxX0VaS0lUPXkKICMgQ09ORklHX0JGSU41NjFfVEVQTEEgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTYxX0FDVklMT04gaXMgbm90IHNldAogCiAjCiAjIEJGNTYxIFNwZWNpZmljIENvbmZpZ3VyYXRpb24KQEAgLTMxNywxMCArMzUwLDExIEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTAKIENPTkZJR19CRklOX0dQVElNRVJTPW0KICMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldApAQCAtMzMxLDE0ICszNjUsMTMgQEAKICMgQ2FjaGUgU3VwcG9ydAogIwogQ09ORklHX0JGSU5fSUNBQ0hFPXkKLSMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQorIyBDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLPXkKICMgQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFIGlzIG5vdCBzZXQKIAogIwpAQCAtMzQ3LDcgKzM4MCw3IEBACiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCiAjCi0jIEFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCisjIEFzeW5jaHJvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgogIwogCiAjCkBAIC00MDcsMTEgKzQ0MCw2IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC00MzUsMTMgKzQ2MywxMSBAQAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldApAQCAtNDU5LDcgKzQ4NSwxMCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTUwMywxMyArNTMyLDggQEAKICMKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTUzMCw2ICs1NTQsNyBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CkBAIC02MDMsNiArNjI4LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTYxOSw5ICs2NDksMTQgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTY0NSw5ICs2ODAsMTEgQEAKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTY1Niw2ICs2OTMsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCkBAIC02NjQsNyArNzAzLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNzA4LDE1ICs3NTAsMTIgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KICMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0Ci1DT05GSUdfU0lNUExFX0dQSU89bQogIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9KVEFHX0NPTU09bQpAQCAtNzMwLDYgKzc2OSw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQkZJTj15CiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BPXkKQEAgLTc0MCw2ICs3ODAsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogCiAjCkBAIC03NjMsMTMgKzgwNCwxOCBAQAogIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNzgyLDkgKzgyOCw2IEBACiAjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIAogIwogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CkBAIC04MjIsMjMgKzg2NSw5IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTg2Miw3ICs4OTEsNiBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi1DT05GSUdfSElEX0NPTVBBVD15CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtODcwLDEwICs4OTgsMjAgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIworIyBGaXJtd2FyZSBEcml2ZXJzCisjCisjIENPTkZJR19GSVJNV0FSRV9NRU1NQVAgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CkBAIC04ODIsOSArOTIwLDExIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC04OTQsNiArOTM0LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtOTE1LDEwICs5NjAsNyBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkzNywxNyArOTc5LDggQEAKICMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX1lBRkZTX0ZTPW0KLUNPTkZJR19ZQUZGU19ZQUZGUzE9eQotIyBDT05GSUdfWUFGRlNfOUJZVEVfVEFHUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBub3Qgc2V0Ci1DT05GSUdfWUFGRlNfWUFGRlMyPXkKLUNPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15Ci0jIENPTkZJR19ZQUZGU19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAotQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk1Niw2ICs5ODksNyBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CkBAIC05NjYsNyArMTAwMCw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCkBAIC0xMDM0LDExICsxMDY3LDE1IEBACiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19TSElSUT15CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldApAQCAtMTA0NiwxNiArMTA4MywyMSBAQAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9NTVVfUkVHSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CkBAIC0xMDYzLDE3ICsxMTA1LDE5IEBACiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19WRVJCT1NFPXkKQEAgLTEwOTUsMTYgKzExMzksMTUgQEAKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NQTEJfSU5GTz15CiBDT05GSUdfQUNDRVNTX0NIRUNLPXkKKyMgQ09ORklHX0JGSU5fSVNSQU1fU0VMRl9URVNUIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpAQCAtMTE4Myw2ICsxMjI2LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMTkwLDExICsxMjM0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKQEAgLTEyMDQsNiArMTI1MCw4IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CbGFja1N0YW1wX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CbGFja1N0YW1wX2RlZmNvbmZpZwppbmRleCA1ZDk0NGZmLi45ZTY1ZDg4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQmxhY2tTdGFtcF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JsYWNrU3RhbXBfZGVmY29uZmlnCkBAIC02Niw2ICs2Niw3IEBACiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CkBAIC0yNzUsNiArMjc2LDcgQEAKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogQ09ORklHX0JGSU5fR1BUSU1FUlM9eQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZwppbmRleCA2NDhhMzFkLi40NDMyMTUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKQEAgLTEsMTIgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLjUKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAogQ09ORklHX0JMQUNLRklOPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKQEAgLTE1LDYgKzE2LDkgQEAKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTQKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMjUsNTUgKzI5LDcyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTgxLDExICsxMDIsOCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEwMSw3ICsxMTksNiBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI2NSw3ICsyODIsMTAgQEAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1RJQ0tTT1VSQ0VfR1BUTVIwIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLU09VUkNFX0NPUkVUTVI9eQogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQpAQCAtMzE1LDEwICszMzUsMTIgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0wCiBDT05GSUdfQkZJTl9HUFRJTUVSUz15CiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKQEAgLTMyOSwxMCArMzUxLDkgQEAKICMgQ2FjaGUgU3VwcG9ydAogIwogQ09ORklHX0JGSU5fSUNBQ0hFPXkKLSMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQogQ09ORklHX0JGSU5fRENBQ0hFPXkKICMgQ09ORklHX0JGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0s9eQogIyBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKQEAgLTM0Myw3ICszNjQsNyBAQAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwotIyBBc3luY2hvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgorIyBBc3luY2hyb25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KICMKIAogIwpAQCAtMzYxLDcgKzM4Miw3IEBACiAjIEVCSVVfQU1CQ1RMIENvbnRyb2wKICMKIENPTkZJR19CQU5LXzA9MHg3QkIwCi1DT05GSUdfQkFOS18xPTB4NTU1NAorQ09ORklHX0JBTktfMT0weDdCQjAKIENPTkZJR19CQU5LXzI9MHg3QkIwCiBDT05GSUdfQkFOS18zPTB4RkZDMAogCkBAIC0zODYsNyArNDA3LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNDAwLDExICs0MjAsNiBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtNDI4LDcgKzQ0Myw2IEBACiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgpAQCAtNDUyLDcgKzQ2Niw5IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTQ2MywxMyArNDc5LDggQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDg0LDIyICs0OTUsMjEgQEAKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCi1DT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CkBAIC01MTIsOSArNTIyLDkgQEAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKICMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotQ09ORklHX01URF9KRURFQ1BST0JFPW0KLUNPTkZJR19NVERfR0VOX1BST0JFPW0KK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKICMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CkBAIC01MjYsOSArNTM2LDExIEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiAjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BTRDQyNTZHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQogQ09ORklHX01URF9SQU09eQogQ09ORklHX01URF9ST009bQogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CkBAIC01MzgsNyArNTUwLDcgQEAKICMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR1BJT19BRERSPXkKICMgQ09ORklHX01URF9VQ0xJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNTYyLDYgKzU3NCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01ODYsMTIgKzYwMyw0NiBAQAogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjEzLDYgKzY2NCw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTYyMyw5ICs2NzcsMTEgQEAKIENPTkZJR19CRklOX1JYX0RFU0NfTlVNPTIwCiBDT05GSUdfQkZJTl9NQUNfUk1JST15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNjMzLDYgKzY4OSw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKQEAgLTY0MSw3ICs2OTgsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNjc0LDE3ICs3MzQsMTMgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1NJTVBMRV9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfRVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0lfTENEIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX0RNQV9JTlRFUkZBQ0U9bQotQ09ORklHX1NJTVBMRV9HUElPPW0KKyMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fVFdJX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fSlRBR19DT01NIGlzIG5vdCBzZXQKQEAgLTY5OCw2ICs3NTQsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0JGSU49eQogQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9CRklOX0RNQT15CkBAIC03MTAsNiArNzY3LDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX09UUD15CiAjIENPTkZJR19CRklOX09UUF9XUklURV9FTkFCTEUgaXMgbm90IHNldApAQCAtNzU4LDEzICs4MTYsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ1MjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC03NzIsNyArODI2LDYgQEAKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NQSV9NQVNURVI9eQogCiAjCkBAIC03ODAsMTcgKzgzMywxNyBAQAogIwogQ09ORklHX1NQSV9CRklOPXkKICMgQ09ORklHX1NQSV9CRklOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi0jIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKIAogIwpAQCAtODAzLDYgKzg1Niw3IEBACiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAogCiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKQEAgLTgyOSwxMSArODgzLDEzIEBACiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC04NDksMTEgKzkwNSwxNiBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldApAQCAtODg1LDYgKzk0NiwxMiBAQAogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTg5MiwxMCArOTU5LDE0IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMSwyMCArMTAwMiwyMCBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotQ09ORklHX1VTQj15CitDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKLUNPTkZJR19VU0JfTU9OPXkKK0NPTkZJR19VU0JfTU9OPW0KICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC05NTIsMjQgKzEwMjMsMjQgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQz1tCiBDT05GSUdfVVNCX01VU0JfU09DPXkKIAogIwogIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBTdXBwb3J0CiAjCi1DT05GSUdfVVNCX01VU0JfSE9TVD15Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUw9eQogIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CitDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQogQ09ORklHX01VU0JfUElPX09OTFk9eQotQ09ORklHX01VU0JfRE1BX1BPTEw9eQogIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC05ODEsMTggKzEwNTIsMzEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC0xMDEzLDcgKzEwOTcsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTEwMjEsOSArMTEwNCw1MCBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyNzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1BSSU5URVI9bQorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMDkwLDYgKzEyMTQsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfQkZJTj15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMTAyLDkgKzEyMjcsMTAgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTExNCw2ICsxMjQwLDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtMTEyMiw4ICsxMjUzLDExIEBACiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMzUsMTAgKzEyNjksNyBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExNDYsOSArMTI3NywxOSBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTE1Nyw2ICsxMjk4LDcgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQpAQCAtMTE2Nyw3ICsxMzA5LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPW0KLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KQEAgLTExODIsOSArMTMyMyw5IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKQEAgLTEyMDgsNyArMTM0OSw3IEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMjM1LDU1ICsxMzc2LDM0IEBACiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NFQ1RJT05fTUlTTUFUQ0g9eQorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogCiAjCiAjIFRyYWNlcnMKICMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tHREJfVEVTVENBU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01NUlM9eQotIyBDT05GSUdfREVCVUdfSFdFUlIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTU1SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ET1VCTEVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSFVOVF9GT1JfWkVSTz15CiBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX09OPXkKQEAgLTEyOTMsOSArMTQxMywxMCBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTj0wCiAjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfRVhQQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NQTEJfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQUNDRVNTX0NIRUNLPXkKKyMgQ09ORklHX0JGSU5fSVNSQU1fU0VMRl9URVNUIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMzA0LDkgKzE0MjUsOSBAQAogQ09ORklHX1NFQ1VSSVRZPXkKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAorIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCkBAIC0xMzg1LDYgKzE1MDYsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzOTIsMjAgKzE1MTQsMjQgQEAKICMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0NSQzc9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKaW5kZXggYWU2NjViOS4uZGY1NjYzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCkBAIC0xLDk0ICsxLDExMCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIyLjE2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAuNQogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CiBDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE0CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfUkRfTFpNQT15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0JJR19PUkRFUl9BTExPQ19OT0ZBSUxfTUFHSUM9MwotIyBDT05GSUdfTlAyIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05Niw3ICsxMTIsNyBAQAogQ09ORklHX0lPU0NIRURfTk9PUD15CiAjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CkBAIC0xMDUsNiArMTIxLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBCbGFja2ZpbiBQcm9jZXNzb3IgT3B0aW9ucwpAQCAtMTEzLDYgKzEzMCwxMCBAQAogIwogIyBQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzCiAjCisjIENPTkZJR19CRjUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUxNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUxNiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUyNCBpcyBub3Qgc2V0CkBAIC0xMjUsMjggKzE0NiwzOCBAQAogIyBDT05GSUdfQkY1MzQgaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzYgaXMgbm90IHNldAogIyBDT05GSUdfQkY1MzcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWX01JTj0zCitDT05GSUdfQkZfUkVWX01BWD02CiAjIENPTkZJR19CRl9SRVZfMF8wIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzEgaXMgbm90IHNldAogIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWXzBfMz15CiAjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzUgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfQU5ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19CRjUzeD15Ci1DT05GSUdfQkZJTl9TSU5HTEVfQ09SRT15CiBDT05GSUdfTUVNX01UNDhMQzE2TTE2QTJUR183NT15CiAjIENPTkZJR19CRklONTMzX0VaS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU41MzNfU1RBTVAgaXMgbm90IHNldAorIyBDT05GSUdfQkxBQ0tTVEFNUCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTjUzM19CTFVFVEVDSE5JWF9DTT15CiAjIENPTkZJR19IODYwNl9IVlNJU1RFTUFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQkY1MzNfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzMl9JUDBYIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzMy8yLzEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgpAQCAtMTg4LDYgKzIxOSw3IEBACiAjIEJvYXJkIGN1c3RvbWl6YXRpb25zCiAjCiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKIAogIwogIyBDbG9jay9QTEwgU2V0dXAKQEAgLTIwNywxMyArMjM5LDIwIEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CitDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKyMgQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CisjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIAogIwotIyBNZW1vcnkgU2V0dXAKKyMgTWlzYwogIwotQ09ORklHX01BWF9NRU1fU0laRT0zMgotQ09ORklHX01FTV9BRERfV0lEVEg9OQotQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX1JFVE49eQogIyBDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfQ1lDTEVTIGlzIG5vdCBzZXQKQEAgLTI0MCw2ICsyNzksMTIgQEAKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiBDT05GSUdfU1lTQ0FMTF9UQUJfTDE9eQogQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMT15CitDT05GSUdfQVBQX1NUQUNLX0wxPXkKKworIworIyBTcGVlZCBPcHRpbWl6YXRpb25zCisjCitDT05GSUdfQkZJTl9JTlNfTE9XT1ZFUkhFQUQ9eQogQ09ORklHX1JBTUtFUk5FTD15CiAjIENPTkZJR19ST01LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ4LDEyICsyOTMsMTYgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19MQVJHRV9BTExPQ1M9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0wCiAjIENPTkZJR19CRklOX0dQVElNRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CiAjIENPTkZJR19ETUFfVU5DQUNIRURfTk9ORSBpcyBub3Qgc2V0CkBAIC0yNjIsMTAgKzMxMSw5IEBACiAjIENhY2hlIFN1cHBvcnQKICMKIENPTkZJR19CRklOX0lDQUNIRT15Ci0jIENPTkZJR19CRklOX0lDQUNIRV9MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLPXkKICMgQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CkBAIC0yNzYsNyArMzI0LDcgQEAKICMgQ09ORklHX01QVSBpcyBub3Qgc2V0CiAKICMKLSMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMgQXN5bmNocm9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCiAjCiAKICMKQEAgLTMwMSwxMiArMzQ5LDggQEAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSkKICMKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwpAQCAtMzE1LDIyICszNTksMTkgQEAKIENPTkZJR19CSU5GTVRfRkxBVD15CiBDT05GSUdfQklORk1UX1pGTEFUPXkKIENPTkZJR19CSU5GTVRfU0hBUkVEX0ZMQVQ9eQorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwogIwogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zMzksNDUgKzM4MCwxMyBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzg1LDMxICszOTQsMjMgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MTgsMjAgKzQxOSwyMiBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NDQsMTIgKzQ0NywxNSBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKICMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorQ09ORklHX01URF9DRkk9eQogIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CkBAIC00NjAsNiArNDY2LDExIEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QU0Q0MjU2RyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKIENPTkZJR19NVERfUkFNPXkKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CkBAIC00NjgsMTIgKzQ3OSwxNiBAQAogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1VDTElOVVg9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVUNMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQ4OSwzNiArNTA0LDI1IEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC01MjYsMzQgKzUzMCwxOSBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwpAQCAtNTYxLDIyICs1NTAsMTcgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTU5MywxNiArNTc3LDE1IEBACiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19BRDk5NjAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0FEQ19CRjUzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QRkxBR1MgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fRE1BX0lOVEVSRkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BQSUZDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NJTVBMRV9USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QUEkgaXMgbm90IHNldAotQ09ORklHX0JGSU5fU1BPUlQ9eQotIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9KVEFHX0NPTU0gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjEzLDYgKzU5Niw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQkZJTj15CiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BPXkKQEAgLTYyMywxNzYgKzYwNywxNDEgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIAogIwogIyBDQU4sIHRoZSBjYXIgYnVzIGFuZCBpbmR1c3RyaWFsIGZpZWxkYnVzCiAjCiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CiAKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQkZJTj15CisjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIworIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgUEJYIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BCWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODAxLDggKzc1MCwxMSBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTgxMywxMiArNzY1LDggQEAKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgyNiw2MCArNzc0LDEwNiBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi0jIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TRUNUSU9OX01JU01BVENIPXkKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19ERUJVR19WRVJCT1NFPXkKIENPTkZJR19ERUJVR19NTVJTPXkKKyMgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19IVU5UX0ZPUl9aRVJPPXkKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfT049eQogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PRkY9eQpAQCAtODg4LDM0ICs4ODIsMzkgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT049MAogIyBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0VYUEFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQorIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPXkKIENPTkZJR19DUkMzMj15CitDT05GSUdfQ1JDNz15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZwppbmRleCBkNzRiNmY0Li4yMmU1NjVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LjEwCi0jIFdlZCBKdW4gIDMgMDY6Mjc6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLjUKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAogQ09ORklHX0JMQUNLRklOPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKQEAgLTE2LDYgKzE2LDkgQEAKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTQKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMjYsMjEgKzI5LDQwIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtNDksNyArNzEsOCBAQAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldApAQCAtNjUsMTIgKzg4LDEzIEBACiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQotQ09ORklHX1RJTllfU0hNRU09eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtNzgsMTEgKzEwMiw4IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtOTgsNyArMTE5LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMTgxLDcgKzIwMSw4IEBACiBDT05GSUdfSVJRX1dBVENIPTEzCiBDT05GSUdfSVJRX1NQST0xMAogIyBDT05GSUdfQkZJTjUzN19TVEFNUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9DTT15CitDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9DTV9FPXkKKyMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ01fVSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTM3X0JMVUVURUNITklYX1RDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTkFWMTAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FNU0lHX01JTk9UQVVSIGlzIG5vdCBzZXQKQEAgLTI4MywxMCArMzA0LDEyIEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKQEAgLTI5NywxMCArMzIwLDkgQEAKICMgQ2FjaGUgU3VwcG9ydAogIwogQ09ORklHX0JGSU5fSUNBQ0hFPXkKLSMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQogQ09ORklHX0JGSU5fRENBQ0hFPXkKICMgQ09ORklHX0JGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0s9eQogIyBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKQEAgLTMxMSw3ICszMzMsNyBAQAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwotIyBBc3luY2hvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgorIyBBc3luY2hyb25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KICMKIAogIwpAQCAtMzM3LDYgKzM1OSw3IEBACiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpCiAjCiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCkBAIC0zNjYsMTEgKzM4OSw2IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0zOTQsNyArNDEyLDYgQEAKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCkBAIC00MTgsNyArNDM1LDkgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtNDI5LDggKzQ0OCw4IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDQxLDE2ICs0NjAsMjEgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC00ODYsMjIgKzUxMCwyNiBAQAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QU0Q0MjU2RyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9VVElMPXkKIENPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorQ09ORklHX01URF9ST009bQogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfR1BJT19BRERSPXkKLUNPTkZJR19NVERfVUNMSU5VWD15CisjIENPTkZJR19NVERfVUNMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUxNyw2ICs1NDUsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTMzLDkgKzU2NiwxNCBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTQ5LDYgKzU4Nyw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTcwLDYgKzYwOSw5IEBACiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTU4MCw4ICs2MjIsMTEgQEAKIENPTkZJR19CRklOX1JYX0RFU0NfTlVNPTIwCiAjIENPTkZJR19CRklOX01BQ19STUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01OTgsNyArNjQzLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNjIyLDE1ICs2NzAsMTIgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KICMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9TUE9SVD15Ci0jIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX0pUQUdfQ09NTSBpcyBub3Qgc2V0CkBAIC02NDQsNiArNjg5LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9CRklOPXkKIENPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQkZJTl9ETUE9eQpAQCAtNjU2LDYgKzcwMiw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAKICMKQEAgLTY2OCw3ICs3MTUsMjMgQEAKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JGSU49eQorIyBDT05GSUdfU1BJX0JGSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKIENPTkZJR19HUElPX1NZU0ZTPXkKQEAgLTY4OCwxNSArNzUxLDIxIEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKQEAgLTc1OCwyMSArODI3LDc0IEBACiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCitDT05GSUdfVVNCX0dBREdFVD1tCisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX05FVDIyNzI9eQorQ09ORklHX1VTQl9ORVQyMjcyPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzg5LDkgKzkxMSwxMCBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC04MDEsNiArOTI0LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODA5LDggKzkzNywxMSBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MjIsMTAgKzk1Myw3IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtODMzLDkgKzk2MSwxOSBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODQ0LDE0ICs5ODIsNzAgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKQEAgLTg2NywxNCArMTA2MSwyOCBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfREVCVUdfVkVSQk9TRT15CkBAIC04ODgsOSArMTA5NiwxMCBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTj0wCiAjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfRVhQQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CisjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODk5LDggKzExMDgsOSBAQAogQ09ORklHX1NFQ1VSSVRZPXkKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAorIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCkBAIC05NzksNiArMTE4OSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtOTg2LDE5ICsxMTk3LDI0IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPXkKIENPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19DUkM3PXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZwppbmRleCA3ZmM4ZGZhMS4uZWZjYzkwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcKQEAgLTEsOTQgKzEsMTExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjIuMTYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC41CiAjCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKIENPTkZJR19CTEFDS0ZJTj15CitDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19TRU1BUEhPUkVfU0xFRVBFUlM9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTQKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19CSUdfT1JERVJfQUxMT0NfTk9GQUlMX01BR0lDPTMKLSMgQ09ORklHX05QMiBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1RJTllfU0hNRU09eQorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwNSw2ICsxMjIsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zCkBAIC0xMTMsNiArMTMxLDEwIEBACiAjCiAjIFByb2Nlc3NvciBhbmQgQm9hcmQgU2V0dGluZ3MKICMKKyMgQ09ORklHX0JGNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTE4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTI0IGlzIG5vdCBzZXQKQEAgLTEyNSwyMiArMTQ3LDMxIEBACiAjIENPTkZJR19CRjUzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzNiBpcyBub3Qgc2V0CiBDT05GSUdfQkY1Mzc9eQorIyBDT05GSUdfQkY1MzggaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzkgaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ0TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDhNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ5TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWX01JTj0yCitDT05GSUdfQkZfUkVWX01BWD0zCiAjIENPTkZJR19CRl9SRVZfMF8wIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzEgaXMgbm90IHNldAogQ09ORklHX0JGX1JFVl8wXzI9eQogIyBDT05GSUdfQkZfUkVWXzBfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzUgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfQU5ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19CRjUzeD15Ci1DT05GSUdfQkZJTl9TSU5HTEVfQ09SRT15CiBDT05GSUdfTUVNX01UNDhMQzE2TTE2QTJUR183NT15CiBDT05GSUdfSVJRX1BMTF9XQUtFVVA9NwogQ09ORklHX0lSUV9SVEM9OApAQCAtMTUwLDcgKzE4MSw2IEBACiBDT05GSUdfSVJRX1NQT1JUMV9SWD05CiBDT05GSUdfSVJRX1NQT1JUMV9UWD05CiBDT05GSUdfSVJRX1RXST0xMAotQ09ORklHX0lSUV9TUEk9MTAKIENPTkZJR19JUlFfVUFSVDBfUlg9MTAKIENPTkZJR19JUlFfVUFSVDBfVFg9MTAKIENPTkZJR19JUlFfVUFSVDFfUlg9MTAKQEAgLTE2OSwxMSArMTk5LDEzIEBACiBDT05GSUdfSVJRX01FTV9ETUEwPTEzCiBDT05GSUdfSVJRX01FTV9ETUExPTEzCiBDT05GSUdfSVJRX1dBVENIPTEzCitDT05GSUdfSVJRX1NQST0xMAogIyBDT05GSUdfQkZJTjUzN19TVEFNUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9DTT15CisjIENPTkZJR19CRklONTM3X0JMVUVURUNITklYX0NNX0UgaXMgbm90IHNldAorQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ01fVT15CisjIENPTkZJR19CRklONTM3X0JMVUVURUNITklYX1RDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTkFWMTAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FNU0lHX01JTk9UQVVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQkY1MzdfQk9BUkQgaXMgbm90IHNldAogCiAjCiAjIEJGNTM3IFNwZWNpZmljIENvbmZpZ3VyYXRpb24KQEAgLTE5Niw2ICsyMjgsNyBAQAogIyBCb2FyZCBjdXN0b21pemF0aW9ucwogIwogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UX0xPQUQ9MHgxMDAwCiAKICMKICMgQ2xvY2svUExMIFNldHVwCkBAIC0yMTUsMTMgKzI0OCwyMCBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfVElDS1NPVVJDRV9HUFRNUjAgaXMgbm90IHNldAorQ09ORklHX1RJQ0tTT1VSQ0VfQ09SRVRNUj15CisjIENPTkZJR19DWUNMRVNfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR1BUTVIwX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKLSMgTWVtb3J5IFNldHVwCisjIE1pc2MKICMKLUNPTkZJR19NQVhfTUVNX1NJWkU9MzIKLUNPTkZJR19NRU1fQUREX1dJRFRIPTkKLUNPTkZJR19CT09UX0xPQUQ9MHgxMDAwCiBDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVROPXkKICMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfUkVURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX0NZQ0xFUyBpcyBub3Qgc2V0CkBAIC0yNDgsNiArMjg4LDEyIEBACiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogQ09ORklHX1NZU0NBTExfVEFCX0wxPXkKIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDE9eQorQ09ORklHX0FQUF9TVEFDS19MMT15CisKKyMKKyMgU3BlZWQgT3B0aW1pemF0aW9ucworIworQ09ORklHX0JGSU5fSU5TX0xPV09WRVJIRUFEPXkKIENPTkZJR19SQU1LRVJORUw9eQogIyBDT05GSUdfUk9NS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NiwxMiArMzAyLDE2IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfTEFSR0VfQUxMT0NTPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEX05PTkUgaXMgbm90IHNldApAQCAtMjcwLDEwICszMjAsOSBAQAogIyBDYWNoZSBTdXBwb3J0CiAjCiBDT05GSUdfQkZJTl9JQ0FDSEU9eQotIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9EQ0FDSEU9eQogIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAotQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQogQ09ORklHX0JGSU5fRVhUTUVNX0RDQUNIRUFCTEU9eQogQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFQkFDSz15CiAjIENPTkZJR19CRklOX0VYVE1FTV9XUklURVRIUk9VR0ggaXMgbm90IHNldApAQCAtMjg0LDcgKzMzMyw3IEBACiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCiAjCi0jIEFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCisjIEFzeW5jaHJvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgogIwogCiAjCkBAIC0zMDksMTIgKzM1OCw4IEBACiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpCiAjCi0jIENPTkZJR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKQEAgLTMyMywyMiArMzY4LDE5IEBACiBDT05GSUdfQklORk1UX0ZMQVQ9eQogQ09ORklHX0JJTkZNVF9aRkxBVD15CiBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKICMKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzQ3LDEwICszODksNiBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0zNjksMTUgKzQwNywxMyBAQAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC0zODYsNiArNDIyLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzk1LDI5ICs0MzIsMjMgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyNiwyMCArNDU3LDIyIEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ1MiwxMiArNDg1LDE1IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwogIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGST15CiAjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKQEAgLTQ2OCwyMCArNTA0LDI5IEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QU0Q0MjU2RyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKIENPTkZJR19NVERfUkFNPXkKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorQ09ORklHX01URF9ST009bQogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotQ09ORklHX01URF9VQ0xJTlVYPXkKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dQSU9fQUREUj15CisjIENPTkZJR19NVERfVUNMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQ5NywzNiArNTQyLDM2IEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKKyMgRUVQUk9NIHN1cHBvcnQKICMKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM0LDM1ICs1NzksMjAgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0JGSU5fTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BWDg4MTgwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKICMKQEAgLTU3MCwyMiArNjAwLDE3IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02MDIsMTYgKzYyNywxNSBAQAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUEZMQUdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KKyMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NQSV9BREMgaXMgbm90IHNldAogQ09ORklHX0JGSU5fU1BPUlQ9eQotIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9KVEFHX0NPTU0gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIyLDYgKzY0Niw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQkZJTj15CiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BPXkKQEAgLTYzNCwxNjUgKzY1OSwyMDEgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIAogIwogIyBDQU4sIHRoZSBjYXIgYnVzIGFuZCBpbmR1c3RyaWFsIGZpZWxkYnVzCiAjCiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CiAKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQkZJTj15CisjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBJMkMgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3Mj15CiBDT05GSUdfVVNCX05FVDIyNzI9eQogIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQogIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRldmljZXMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgUEJYIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BCWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtODAyLDI1ICs4NjMsMjkgQEAKICMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04MjksOCArODk0LDExIEBACiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTg0MSwxMiArOTA5LDggQEAKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg1NCwxOCArOTE4LDI5IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfWUFGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODczLDQxICs5NDgsOTQgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NFQ1RJT05fTUlTTUFUQ0g9eQogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0RFQlVHX1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX01NUlM9eQorIyBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk89eQogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9PTj15CiBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09GRj15CkBAIC05MTYsMzQgKzEwNDQsNDAgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT049MAogIyBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0VYUEFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQorIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggYWNjYTRlNS4uN2Y1NzljZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQuNAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLjUKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAogQ09ORklHX0JMQUNLRklOPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTYsNiArMTYsOSBAQAogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0yNiw3OSArMjksMTAwIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQklHX09SREVSX0FMTE9DX05PRkFJTF9NQUdJQz0zCi0jIENPTkZJR19OUDIgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zCkBAIC0xMDcsNiArMTMxLDEwIEBACiAjCiAjIFByb2Nlc3NvciBhbmQgQm9hcmQgU2V0dGluZ3MKICMKKyMgQ09ORklHX0JGNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTE4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTI0IGlzIG5vdCBzZXQKQEAgLTExOSwxOSArMTQ3LDI5IEBACiAjIENPTkZJR19CRjUzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzNiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzNyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzOCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0Mk0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ3IGlzIG5vdCBzZXQKLUNPTkZJR19CRjU0OD15CisjIENPTkZJR19CRjU0N00gaXMgbm90IHNldAorQ09ORklHX0JGNTQ4X3N0ZD15CisjIENPTkZJR19CRjU0OE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDlNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKK0NPTkZJR19CRl9SRVZfTUlOPTAKK0NPTkZJR19CRl9SRVZfTUFYPTIKICMgQ09ORklHX0JGX1JFVl8wXzAgaXMgbm90IHNldAogIyBDT05GSUdfQkZfUkVWXzBfMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZfUkVWXzBfMj15CisjIENPTkZJR19CRl9SRVZfMF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzMgaXMgbm90IHNldAogIyBDT05GSUdfQkZfUkVWXzBfNCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfMF81IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGX1JFVl9BTlkgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNiBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWX0FOWT15CiAjIENPTkZJR19CRl9SRVZfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfQkY1NHg9eQogQ09ORklHX0lSUV9QTExfV0FLRVVQPTcKQEAgLTE0MCwxNSArMTc4LDEyIEBACiBDT05GSUdfSVJRX1NQT1JUMF9UWD05CiBDT05GSUdfSVJRX1NQT1JUMV9SWD05CiBDT05GSUdfSVJRX1NQT1JUMV9UWD05CitDT05GSUdfSVJRX1NQSTA9MTAKIENPTkZJR19JUlFfVUFSVDBfUlg9MTAKIENPTkZJR19JUlFfVUFSVDBfVFg9MTAKIENPTkZJR19JUlFfVUFSVDFfUlg9MTAKIENPTkZJR19JUlFfVUFSVDFfVFg9MTAKIENPTkZJR19JUlFfQ05UPTgKLUNPTkZJR19JUlFfVVNCX0lOVDA9MTEKLUNPTkZJR19JUlFfVVNCX0lOVDE9MTEKLUNPTkZJR19JUlFfVVNCX0lOVDI9MTEKLUNPTkZJR19JUlFfVVNCX0RNQT0xMQogQ09ORklHX0lSUV9USU1FUjA9MTEKIENPTkZJR19JUlFfVElNRVIxPTExCiBDT05GSUdfSVJRX1RJTUVSMj0xMQpAQCAtMTU3LDkgKzE5MiwyMSBAQAogQ09ORklHX0lSUV9USU1FUjU9MTEKIENPTkZJR19JUlFfVElNRVI2PTExCiBDT05GSUdfSVJRX1RJTUVSNz0xMQorQ09ORklHX0lSUV9VU0JfSU5UMD0xMQorQ09ORklHX0lSUV9VU0JfSU5UMT0xMQorQ09ORklHX0lSUV9VU0JfSU5UMj0xMQorQ09ORklHX0lSUV9VU0JfRE1BPTExCiBDT05GSUdfSVJRX1RJTUVSOD0xMQogQ09ORklHX0lSUV9USU1FUjk9MTEKIENPTkZJR19JUlFfVElNRVIxMD0xMQorQ09ORklHX0lSUV9TUE9SVDJfUlg9OQorQ09ORklHX0lSUV9TUE9SVDJfVFg9OQorQ09ORklHX0lSUV9TUE9SVDNfUlg9OQorQ09ORklHX0lSUV9TUE9SVDNfVFg9OQorQ09ORklHX0lSUV9TUEkxPTEwCitDT05GSUdfSVJRX1NQSTI9MTAKK0NPTkZJR19JUlFfVFdJMD0xMQorQ09ORklHX0lSUV9UV0kxPTExCiAjIENPTkZJR19CRklONTQ4X0VaS0lUIGlzIG5vdCBzZXQKIENPTkZJR19CRklONTQ4X0JMVUVURUNITklYX0NNPXkKIApAQCAtMTY3LDYgKzIxNCw3IEBACiAjIEJGNTQ4IFNwZWNpZmljIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX0RFQl9ETUFfVVJHRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ4X0FUQVBJX0FMVEVSTkFUSVZFX1BPUlQgaXMgbm90IHNldAogCiAjCiAjIEludGVycnVwdCBQcmlvcml0eSBBc3NpZ25tZW50CkBAIC0xODIsNyArMjMwLDYgQEAKIENPTkZJR19JUlFfU1BJMF9FUlI9NwogQ09ORklHX0lSUV9VQVJUMF9FUlI9NwogQ09ORklHX0lSUV9FUFBJMD04Ci1DT05GSUdfSVJRX1NQSTA9MTAKIENPTkZJR19JUlFfUElOVDA9MTIKIENPTkZJR19JUlFfUElOVDE9MTIKIENPTkZJR19JUlFfTURNQVMwPTEzCkBAIC0xOTcsMTggKzI0NCwxMCBAQAogQ09ORklHX0lSUV9VQVJUMV9FUlI9NwogQ09ORklHX0lSUV9VQVJUMl9FUlI9NwogQ09ORklHX0lSUV9DQU4wX0VSUj03Ci1DT05GSUdfSVJRX1NQT1JUMl9SWD05Ci1DT05GSUdfSVJRX1NQT1JUMl9UWD05Ci1DT05GSUdfSVJRX1NQT1JUM19SWD05Ci1DT05GSUdfSVJRX1NQT1JUM19UWD05CiBDT05GSUdfSVJRX0VQUEkxPTkKIENPTkZJR19JUlFfRVBQSTI9OQotQ09ORklHX0lSUV9TUEkxPTEwCi1DT05GSUdfSVJRX1NQSTI9MTAKIENPTkZJR19JUlFfQVRBUElfUlg9MTAKIENPTkZJR19JUlFfQVRBUElfVFg9MTAKLUNPTkZJR19JUlFfVFdJMD0xMQotQ09ORklHX0lSUV9UV0kxPTExCiBDT05GSUdfSVJRX0NBTjBfUlg9MTEKIENPTkZJR19JUlFfQ0FOMF9UWD0xMQogQ09ORklHX0lSUV9NRE1BUzI9MTMKQEAgLTI1NSw2ICsyOTQsNyBAQAogIyBCb2FyZCBjdXN0b21pemF0aW9ucwogIwogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UX0xPQUQ9MHgxMDAwCiAKICMKICMgQ2xvY2svUExMIFNldHVwCkBAIC0yNzQsMTYgKzMxNCwxMiBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogCiAjCi0jIE1lbW9yeSBTZXR1cAorIyBNaXNjCiAjCi1DT05GSUdfTUFYX01FTV9TSVpFPTY0Ci0jIENPTkZJR19NRU1fTVQ0NlYzMk0xNl82VCBpcyBub3Qgc2V0Ci1DT05GSUdfTUVNX01UNDZWMzJNMTZfNUI9eQotQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX1JFVE49eQogIyBDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfQ1lDTEVTIGlzIG5vdCBzZXQKQEAgLTMxMCw2ICszNDYsMTIgQEAKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiAjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAorQ09ORklHX0FQUF9TVEFDS19MMT15CisKKyMKKyMgU3BlZWQgT3B0aW1pemF0aW9ucworIworQ09ORklHX0JGSU5fSU5TX0xPV09WRVJIRUFEPXkKIENPTkZJR19SQU1LRVJORUw9eQogIyBDT05GSUdfUk9NS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTMxOCwxMyArMzYwLDE2IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0wCiAjIENPTkZJR19CRklOX0dQVElNRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF80TSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CiAjIENPTkZJR19ETUFfVU5DQUNIRURfTk9ORSBpcyBub3Qgc2V0CkBAIC0zMzMsMTQgKzM3OCwxMyBAQAogIyBDYWNoZSBTdXBwb3J0CiAjCiBDT05GSUdfQkZJTl9JQ0FDSEU9eQotIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRT15CisjIENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUgaXMgbm90IHNldAogQ09ORklHX0JGSU5fRENBQ0hFPXkKICMgQ09ORklHX0JGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFPXkKLUNPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0s9eQotIyBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fTDJfSUNBQ0hFQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0sKK0NPTkZJR19CRklOX0VYVE1FTV9XUklURVRIUk9VR0g9eQogIyBDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFIGlzIG5vdCBzZXQKIAogIwpAQCAtMzQ5LDcgKzM5Myw3IEBACiAjIENPTkZJR19NUFUgaXMgbm90IHNldAogCiAjCi0jIEFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCisjIEFzeW5jaHJvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgogIwogCiAjCkBAIC0zNjksNyArNDEzLDcgQEAKIENPTkZJR19CQU5LXzA9MHg3QkIwCiBDT05GSUdfQkFOS18xPTB4NTU1NAogQ09ORklHX0JBTktfMj0weDdCQjAKLUNPTkZJR19CQU5LXzM9MHg5OUIyCitDT05GSUdfQkFOS18zPTB4OTlCMwogQ09ORklHX0VCSVVfTUJTQ1RMVkFMPTB4MAogQ09ORklHX0VCSVVfTU9ERVZBTD0weDEKIENPTkZJR19FQklVX0ZDVExWQUw9MHg2CkBAIC0zNzcsNyArNDIxLDYgQEAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSkKICMKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCkBAIC0zODgsMjMgKzQzMSwxOSBAQAogQ09ORklHX0JJTkZNVF9GTEFUPXkKIENPTkZJR19CSU5GTVRfWkZMQVQ9eQogIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKICMKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtNDE3LDYgKzQ1Niw3IEBACiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtNDM1LDE5ICs0NzUsMTYgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC00NTYsNiArNDkzLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDY1LDI0ICs1MDMsMjEgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTUwMSwxMCArNTM2LDEyIEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNTM5LDYgKzU3Niw3IEBACiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiAjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BTRDQyNTZHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogQ09ORklHX01URF9SQU09eQogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CkBAIC01NDksOSArNTg3LDggQEAKICMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MjAwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfVUNMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTU3NSw2ICs2MTIsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTg3LDMxICs2MjksMzEgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15CitDT05GSUdfU0NTST1tCiBDT05GSUdfU0NTSV9ETUE9eQogIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwogIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQogIwotQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0JMS19ERVZfU0Q9bQogIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIApAQCAtNjMyLDI5ICs2NzQsNTQgQEAKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci1DT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CkBAIC02NjYsNiArNzMzLDEwIEBACiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIAogIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTY3Niw3ICs3NDcsNiBAQAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC03MTEsNiArNzgxLDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQkZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNzI2LDE5ICs3OTcsMTYgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KKyMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9PVFA9eQotIyBDT05GSUdfQkZJTl9PVFBfV1JJVEVfRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0lfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fVFdJX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX0JGSU5fSlRBR19DT01NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc0OSwxMCArODE3LDExIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQkZJTj15CiBDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0JGSU5fRE1BPXkKLSMgQ09ORklHX1NFUklBTF9CRklOX1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQkZJTl9ETUEgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOX1BJTz15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDE9eQogIyBDT05GSUdfQkZJTl9VQVJUMV9DVFNSVFMgaXMgbm90IHNldApAQCAtNzYyLDcgKzgzMSwxMCBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorQ09ORklHX0JGSU5fT1RQPXkKKyMgQ09ORklHX0JGSU5fT1RQX1dSSVRFX0VOQUJMRSBpcyBub3Qgc2V0CiAKICMKICMgQ0FOLCB0aGUgY2FyIGJ1cyBhbmQgaW5kdXN0cmlhbCBmaWVsZGJ1cwpAQCAtNzcwLDYxICs4NDIsNTMgQEAKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCiBDT05GSUdfSTJDX0JMQUNLRklOX1RXST15Ci1DT05GSUdfSTJDX0JMQUNLRklOX1RXSV9DTEtfS0haPTEwMAorQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWj01MAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKIAogIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ1MjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1NDMgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKIENPTkZJR19TUEk9eQogQ09ORklHX1NQSV9NQVNURVI9eQogCkBAIC04MzIsNjQgKzg5NiwyMyBAQAogIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX1NQSV9CRklOPXkKKyMgQ09ORklHX1NQSV9CRklOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkwMywyNSArOTI2LDQzIEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtOTM1LDgwICs5NzYsNzUgQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9eQorQ09ORklHX1VTQj1tCiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj1tCisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01VU0JfSERSQz15CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz1tCiBDT05GSUdfVVNCX01VU0JfU09DPXkKIAogIwotIyBCbGFja2ZpbiBCRjU0eCwgQkY1MjUgYW5kIEJGNTI3IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMgQmxhY2tmaW4gaGlnaCBzcGVlZCBVU0IgU3VwcG9ydAogIwotQ09ORklHX1VTQl9NVVNCX0hPU1Q9eQotIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMPXkKICMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKICMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lOVkVOVFJBX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CiAjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAotQ09ORklHX1VTQl9NVVNCX0xPR0xFVkVMPTAKKyMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCi1DT05GSUdfVVNCX1NUT1JBR0U9eQorQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTEwMTYsNiArMTA1Miw3IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMDIzLDE1ICsxMDYwLDEwIEBACiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMDQwLDcgKzEwNzIsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMDQ4LDcgKzEwODAsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTEwNTYsMzggKzEwODcsNzUgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD1tCisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX1pFUk89bQorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KKyMgQ09ORklHX1VTQl9FVEhfUk5ESVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRGUz1tCitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1NFUklBTD1tCisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HX1BSSU5URVI9bQorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogCiAjCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotQ09ORklHX01NQz15CitDT05GSUdfVVNCX09UR19VVElMUz15CisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz1tCiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiAjCi1DT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0s9bQogQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQogIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKLUNPTkZJR19TREhfQkZJTj15CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX1NESF9CRklOPW0KKyMgQ09ORklHX1NESF9CRklOX01JU1NJTkdfQ01EX1BVTExVUF9XT1JLQVJPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESF9CRklOX0VOQUJMRV9TRElPX0lSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPW0KK0NPTkZJR19SVENfQ0xBU1M9bQogCiAjCiAjIFJUQyBpbnRlcmZhY2VzCkBAIC0xMTExLDY2ICsxMTc5LDc0IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwotQ09ORklHX1JUQ19EUlZfQkZJTj15Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIworQ09ORklHX1JUQ19EUlZfQkZJTj1tCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBQQlggc3VwcG9ydAotIwotIyBDT05GSUdfUEJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GUz1tCisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19JU085NjYwX0ZTPW0KLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX1pJU09GUz15CisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTExOTQsMTAgKzEyNzAsNyBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMDUsMTcgKzEyNzgsNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ZQUZGU19GUz1tCi1DT05GSUdfWUFGRlNfWUFGRlMxPXkKLSMgQ09ORklHX1lBRkZTX0RPRVNfRUNDIGlzIG5vdCBzZXQKLUNPTkZJR19ZQUZGU19ZQUZGUzI9eQotQ09ORklHX1lBRkZTX0FVVE9fWUFGRlMyPXkKLSMgQ09ORklHX1lBRkZTX0RJU0FCTEVfTEFaWV9MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19ZQUZGU19DSEVDS1BPSU5UX1JFU0VSVkVEX0JMT0NLUz0xMAotIyBDT05GSUdfWUFGRlNfRElTQUJMRV9XSURFX1ROT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19BTFdBWVNfQ0hFQ0tfQ0hVTktfRVJBU0VEIGlzIG5vdCBzZXQKLUNPTkZJR19ZQUZGU19TSE9SVF9OQU1FU19JTl9SQU09eQotQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKICMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKQEAgLTEyMjcsMzQgKzEyOTAsMzAgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX05GU0RfVENQPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotQ09ORklHX1NNQl9OTFNfREVGQVVMVD15Ci1DT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgotQ09ORklHX0NJRlM9eQorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KICMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CkBAIC0xMjY3LDI0ICsxMzI2LDggQEAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpAQCAtMTMyNiw5ICsxMzY5LDYgQEAKIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEzMzYsMTQgKzEzNzYsMzkgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NTVJTPXkKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CitDT05GSUdfREVCVUdfVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19NTVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19IVU5UX0ZPUl9aRVJPPXkKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfT049eQogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9PRkY9eQpAQCAtMTM1MiwzMyArMTQxNywxMjUgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT049MAogIyBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0VYUEFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQorIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfUExJU1Q9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZwppbmRleCBiYWU0ZWU2Li5hNmRmMDFkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKQEAgLTEsMTUgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC40Ci0jIFR1ZSBBcHIgIDEgMTA6NTA6MTEgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLjUKICMKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAogQ09ORklHX0JMQUNLRklOPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTcsNiArMTYsOSBAQAogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0yNyw2MiArMjksODMgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19SRF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15CisjIENPTkZJR19TSUdOQUxGRCBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQklHX09SREVSX0FMTE9DX05PRkFJTF9NQUdJQz0zCi0jIENPTkZJR19OUDIgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTk5LDYgKzEyMiw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMKQEAgLTEwNyw2ICsxMzEsMTAgQEAKICMKICMgUHJvY2Vzc29yIGFuZCBCb2FyZCBTZXR0aW5ncwogIworIyBDT05GSUdfQkY1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MTQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MTYgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MTggaXMgbm90IHNldAogIyBDT05GSUdfQkY1MjIgaXMgbm90IHNldAogIyBDT05GSUdfQkY1MjMgaXMgbm90IHNldAogIyBDT05GSUdfQkY1MjQgaXMgbm90IHNldApAQCAtMTE5LDMwICsxNDcsNDcgQEAKICMgQ09ORklHX0JGNTM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTM2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQyTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0NE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDdNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ4TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OU0gaXMgbm90IHNldAogQ09ORklHX0JGNTYxPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWX01JTj0zCitDT05GSUdfQkZfUkVWX01BWD01CiAjIENPTkZJR19CRl9SRVZfMF8wIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzEgaXMgbm90IHNldAogIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CiBDT05GSUdfQkZfUkVWXzBfMz15CiAjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzUgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRl9SRVZfQU5ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX0RVQUxfQ09SRT15CiBDT05GSUdfTUVNX01UNDhMQzhNMzJCMkI1Xzc9eQogQ09ORklHX0lSUV9QTExfV0FLRVVQPTcKIENPTkZJR19JUlFfU1BPUlQwX0VSUk9SPTcKIENPTkZJR19JUlFfU1BPUlQxX0VSUk9SPTcKK0NPTkZJR19JUlFfVElNRVIwPTEwCitDT05GSUdfSVJRX1RJTUVSMT0xMAorQ09ORklHX0lSUV9USU1FUjI9MTAKK0NPTkZJR19JUlFfVElNRVIzPTEwCitDT05GSUdfSVJRX1RJTUVSND0xMAorQ09ORklHX0lSUV9USU1FUjU9MTAKK0NPTkZJR19JUlFfVElNRVI2PTEwCitDT05GSUdfSVJRX1RJTUVSNz0xMAogQ09ORklHX0lSUV9TUElfRVJST1I9NwogIyBDT05GSUdfQkZJTjU2MV9FWktJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTYxX1RFUExBIGlzIG5vdCBzZXQKIENPTkZJR19CRklONTYxX0JMVUVURUNITklYX0NNPXkKLSMgQ09ORklHX0dFTkVSSUNfQkY1NjFfQk9BUkQgaXMgbm90IHNldAogCiAjCiAjIEJGNTYxIFNwZWNpZmljIENvbmZpZ3VyYXRpb24KQEAgLTE1MSwxMiArMTk2LDcgQEAKICMKICMgQ29yZSBCIFN1cHBvcnQKICMKLQotIwotIyBDb3JlIEIgU3VwcG9ydAotIwogQ09ORklHX0JGNTYxX0NPUkVCPXkKLSMgQ09ORklHX0JGNTYxX0NPUkVCX1JFU0VUIGlzIG5vdCBzZXQKIAogIwogIyBJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudApAQCAtMTk2LDE0ICsyMzYsNiBAQAogQ09ORklHX0lSUV9ETUEyXzk9OQogQ09ORklHX0lSUV9ETUEyXzEwPTkKIENPTkZJR19JUlFfRE1BMl8xMT05Ci1DT05GSUdfSVJRX1RJTUVSMD0xMAotQ09ORklHX0lSUV9USU1FUjE9MTAKLUNPTkZJR19JUlFfVElNRVIyPTEwCi1DT05GSUdfSVJRX1RJTUVSMz0xMAotQ09ORklHX0lSUV9USU1FUjQ9MTAKLUNPTkZJR19JUlFfVElNRVI1PTEwCi1DT05GSUdfSVJRX1RJTUVSNj0xMAotQ09ORklHX0lSUV9USU1FUjc9MTAKIENPTkZJR19JUlFfVElNRVI4PTEwCiBDT05GSUdfSVJRX1RJTUVSOT0xMAogQ09ORklHX0lSUV9USU1FUjEwPTEwCkBAIC0yMjYsNiArMjU4LDcgQEAKICMgQm9hcmQgY3VzdG9taXphdGlvbnMKICMKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfQk9PVF9MT0FEPTB4MTAwMAogCiAjCiAjIENsb2NrL1BMTCBTZXR1cApAQCAtMjQ1LDE5ICsyNzgsMjAgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1RJQ0tTT1VSQ0VfR1BUTVIwIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLU09VUkNFX0NPUkVUTVI9eQogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIAogIwotIyBNZW1vcnkgU2V0dXAKKyMgTWlzYwogIwotQ09ORklHX01BWF9NRU1fU0laRT0zMgotQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX1JFVE49eQogIyBDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfQ1lDTEVTIGlzIG5vdCBzZXQKQEAgLTI4NCw2ICszMTgsMTIgQEAKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiBDT05GSUdfU1lTQ0FMTF9UQUJfTDE9eQogQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMT15CitDT05GSUdfQVBQX1NUQUNLX0wxPXkKKworIworIyBTcGVlZCBPcHRpbWl6YXRpb25zCisjCitDT05GSUdfQkZJTl9JTlNfTE9XT1ZFUkhFQUQ9eQogQ09ORklHX1JBTUtFUk5FTD15CiAjIENPTkZJR19ST01LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjkyLDE0ICszMzIsMTYgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0xBUkdFX0FMTE9DUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEX05PTkUgaXMgbm90IHNldApAQCAtMzA4LDE1ICszNTAsMTYgQEAKICMgQ2FjaGUgU3VwcG9ydAogIwogQ09ORklHX0JGSU5fSUNBQ0hFPXkKLSMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQorIyBDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19CRklOX0RDQUNIRT15CiAjIENPTkZJR19CRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRT15CiBDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRT15Ci1DT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLPXkKLSMgQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0VYVE1FTV9XUklURVRIUk9VR0g9eQogIyBDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fTDJfV1JJVEVCQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgUHJvdGVjdGlvbiBVbml0CkBAIC0zMjQsNyArMzY3LDcgQEAKICMgQ09ORklHX01QVSBpcyBub3Qgc2V0CiAKICMKLSMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMgQXN5bmNocm9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCiAjCiAKICMKQEAgLTM1Myw4ICszOTYsOCBAQAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKQogIwotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKQEAgLTM2MywxOCArNDA2LDE5IEBACiBDT05GSUdfQklORk1UX0ZMQVQ9eQogQ09ORklHX0JJTkZNVF9aRkxBVD15CiBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIAogIwotIyBOZXR3b3JraW5nCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZwogIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKICMKQEAgLTM4MywxMCArNDI3LDYgQEAKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtNDA3LDE0ICs0NDcsMTEgQEAKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiAjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtNDIzLDYgKzQ2MCw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQzMiwyNCArNDcwLDIxIEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NjAsMTYgKzQ5NSwyMiBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ4Nyw4ICs1MjgsMTAgQEAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKICMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorQ09ORklHX01URF9DRkk9eQogIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CkBAIC00OTksMjAgKzU0MiwyOSBAQAogQ09ORklHX01URF9DRklfSTI9eQogIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUFNENDI1NkcgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CiBDT05GSUdfTVREX1JBTT15Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUk9NPW0KICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfVUNMSU5VWD15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9VQ0xJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTI4LDYgKzU4MCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01MzksMTQgKzU5NiwyMSBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fSURFX0FERFJFU1NfTUFQUElOR19NT0RFMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRklOX0lERV9BRERSRVNTX01BUFBJTkdfTU9ERTEgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTU1OCwyNiArNjIyLDUwIEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD1tCisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FYODgxODAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwpAQCAtNTg1LDEwICs2NzMsMTMgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC02MDksMTYgKzcwMCwxNSBAQAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX0RNQV9JTlRFUkZBQ0U9bQorIyBDT05GSUdfQkZJTl9QUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9QUElGQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fSlRBR19DT01NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYyOSw2ICs3MTksNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0JGSU49eQogQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9CRklOX0RNQT15CkBAIC02MzksNiArNzMwLDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQ3LDU0ICs3MzksMTAwIEBACiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CiAKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQkZJTj15CisjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC03MDksNDIgKzg0Nyw4NSBAQAogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIworQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9ORVQyMjcyPXkKK0NPTkZJR19VU0JfTkVUMjI3Mj1tCisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfUFJJTlRFUj1tCisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFBCWCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQlggaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC03NTQsMjUgKzkzNSwyOSBAQAogIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTc4MSw4ICs5NjYsMTEgQEAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk0LDEwICs5ODIsNyBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgwNSwxNCArOTkwLDI4IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfWUFGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODI3LDExICsxMDI2LDQ3IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC04MzksMTQgKzEwNzQsNDAgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CitDT05GSUdfREVCVUdfVkVSQk9TRT15CiBDT05GSUdfREVCVUdfTU1SUz15CisjIENPTkZJR19ERUJVR19ET1VCTEVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSFVOVF9GT1JfWkVSTz15CiBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX09OPXkKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT0ZGPXkKQEAgLTg1NSwzMyArMTExNiw0MCBAQAogQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTj0wCiAjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfRVhQQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVUFMX0NPUkVfVEVTVF9NT0RVTEUgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQorIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfQ1JDNz15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZwppbmRleCBhNmE3YzhlLi5iYzdmYWUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcKQEAgLTY3LDYgKzY3LDcgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTI0OSw2ICsyNTAsNyBAQAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19MQVJHRV9BTExPQ1M9eQorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogQ09ORklHX0JGSU5fR1BUSU1FUlM9eQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfVU5DQUNIRURfMU09eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0lQMFhfZGVmY29uZmlnCmluZGV4IDFlYzlhZTIuLmE3ZTQ5ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9JUDBYX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSVAwWF9kZWZjb25maWcKQEAgLTY4LDYgKzY4LDcgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTI2MSw2ICsyNjIsNyBAQAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19MQVJHRV9BTExPQ1M9eQorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAogQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcKaW5kZXggZmYzNzdmYS4uNjdkMTI3NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZwpAQCAtNjMsNiArNjMsNyBAQAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQpAQCAtMjg1LDYgKzI4Niw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogQ09ORklHX0JGSU5fR1BUSU1FUlM9eQogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvU1JWMV9kZWZjb25maWcKaW5kZXggODE0ZjljYS4uNTJiZmE2YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1NSVjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9TUlYxX2RlZmNvbmZpZwpAQCAtNzIsNiArNzIsNyBAQAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX1RJTllfU0hNRU09eQogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMjcxLDYgKzI3Miw3IEBACiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0xBUkdFX0FMTE9DUz15CitDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0wCiBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNPXkKICMgQ09ORklHX0RNQV9VTkNBQ0hFRF8xTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfTk9ORSBpcyBub3Qgc2V0CkBAIC03MDAsNyArNzAyLDcgQEAKICMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1VJTlBVVD15CiAjIENPTkZJR19CRjUzWF9QRkJVVFRPTlMgaXMgbm90IHNldAotIyBDT05GSUdfVFdJX0tFWVBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MzdfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcKaW5kZXggMzc1ZTc1YS4uNjBhZGZhZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcKQEAgLTEsMTMgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKLSMgVHVlIEphbiAgNiAwOToyMjoxNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAuNQogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CiBDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19aT05FX0RNQT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQpAQCAtMTYsNiArMTYsOSBAQAogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0yNiw0OSArMjksNzIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX1RJTllfU0hNRU09eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtNzYsMTEgKzEwMiw4IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtOTYsNyArMTE5LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMTI4LDEwICsxNTAsMTUgQEAKICMgQ09ORklHX0JGNTM4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQyTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0NCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0NE0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDdNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTQ4TSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjU0OSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjU0OU0gaXMgbm90IHNldAogIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldAogQ09ORklHX0JGX1JFVl9NSU49MgogQ09ORklHX0JGX1JFVl9NQVg9MwpAQCAtMTczLDExICsyMDAsMTEgQEAKIENPTkZJR19JUlFfV0FUQ0g9MTMKIENPTkZJR19JUlFfU1BJPTEwCiAjIENPTkZJR19CRklONTM3X1NUQU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9DTV9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ01fVSBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9UQ009eQogIyBDT05GSUdfUE5BVjEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTVNJR19NSU5PVEFVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0JGNTM3X0JPQVJEIGlzIG5vdCBzZXQKIAogIwogIyBCRjUzNyBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC0yMjMsNyArMjUwLDEwIEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CitDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKICMgQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CisjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKQEAgLTI3MywxMCArMzAzLDEyIEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX05PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1M9MAogIyBDT05GSUdfQkZJTl9HUFRJTUVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAogIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKQEAgLTI4NywxMCArMzE5LDkgQEAKICMgQ2FjaGUgU3VwcG9ydAogIwogQ09ORklHX0JGSU5fSUNBQ0hFPXkKLSMgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEU9eQogQ09ORklHX0JGSU5fRENBQ0hFPXkKICMgQ09ORklHX0JGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFPXkKIENPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0s9eQogIyBDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKQEAgLTMwMSw3ICszMzIsNyBAQAogIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwotIyBBc3luY2hvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgorIyBBc3luY2hyb25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KICMKIAogIwpAQCAtMzI3LDYgKzM1OCw3IEBACiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpCiAjCiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCkBAIC0zNDMsMTMgKzM3NSw4MyBAQAogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCiAjCiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVQgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNTgsMTUgKzQ2MCwyMSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKQEAgLTQwMiw5ICs1MTAsMTAgQEAKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKICMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUFNENDI1NkcgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfVVRJTD15CiBDT05GSUdfTVREX1JBTT15Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUk9NPW0KICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAogCiAjCkBAIC00MTMsNyArNTIyLDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0dQSU9fQUREUj15Ci1DT05GSUdfTVREX1VDTElOVVg9eQorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00MzYsNiArNTQ1LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ0MywxNSArNTU3LDIzIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKICMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDY0LDYgKzU4Niw3NCBAQAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0JGSU5fTUFDPXkKK0NPTkZJR19CRklOX01BQ19VU0VfTDE9eQorQ09ORklHX0JGSU5fVFhfREVTQ19OVU09MTAKK0NPTkZJR19CRklOX1JYX0RFU0NfTlVNPTIwCisjIENPTkZJR19CRklOX01BQ19STUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ4MCwxNSArNjcwLDEyIEBACiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19BRDk5NjAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0FEQ19CRjUzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19CRklOX1NQT1JUPXkKLSMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9ETUFfSU5URVJGQUNFPW0KLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFBJRkNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU1BJX0FEQyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9TUE9SVD15CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fSlRBR19DT01NIGlzIG5vdCBzZXQKQEAgLTUwMiw2ICs2ODksNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0JGSU49eQogQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9CRklOX0RNQT15CkBAIC01MTQsNiArNzAyLDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM0LDM5ICs3MjMsMTcgQEAKICMKIENPTkZJR19TUElfQkZJTj15CiAjIENPTkZJR19TUElfQkZJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKQEAgLTU4MCw2ICs3NDcsMTIgQEAKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0JGSU5fV0RUPXkKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCkBAIC01ODgsNyArNzYxLDcgQEAKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTU5OCw2ICs3NzEsNyBAQAogIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE4LDEzICs3OTIsODEgQEAKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTkVUMjI3Mj15CitDT05GSUdfVVNCX05FVDIyNzI9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPXkKK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNjQxLDggKzg4MywxMCBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC02NTIsNiArODk2LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtNjYwLDggKzkwOSwxMSBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC02NzMsMTAgKzkyNSw3IEBACiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtNjg0LDkgKzkzMywxOSBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lBRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNjk1LDEzICs5NTQsNjIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTcxNCwxMiArMTAyMiwzMCBAQAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NFQ1RJT05fTUlTTUFUQ0g9eQogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX0RFQlVHX1ZFUkJPU0U9eQpAQCAtNzMzLDkgKzEwNTksMTAgQEAKIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT049MAogIyBDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0VYUEFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQorIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTc0NCwyMCArMTA3MSwxMTAgQEAKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPXkKK0NPTkZJR19DUkMzMj15CitDT05GSUdfQ1JDNz15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MGVlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKaW5kZXggMTAwNjRmOS4uZTY0ODVjMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaApAQCAtMTEsOSArMTEsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKQEAgLTIzLDYgKzIwLDEyIEBACiAjIGRlZmluZSBETUFfVU5DQUNIRURfUkVHSU9OICgyICogMTAyNCAqIDEwMjQpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19ETUFfVU5DQUNIRURfMU0pCiAjIGRlZmluZSBETUFfVU5DQUNIRURfUkVHSU9OICgxMDI0ICogMTAyNCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RNQV9VTkNBQ0hFRF81MTJLKQorIyBkZWZpbmUgRE1BX1VOQ0FDSEVEX1JFR0lPTiAoNTEyICogMTAyNCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RNQV9VTkNBQ0hFRF8yNTZLKQorIyBkZWZpbmUgRE1BX1VOQ0FDSEVEX1JFR0lPTiAoMjU2ICogMTAyNCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RNQV9VTkNBQ0hFRF8xMjhLKQorIyBkZWZpbmUgRE1BX1VOQ0FDSEVEX1JFR0lPTiAoMTI4ICogMTAyNCkKICNlbHNlCiAjIGRlZmluZSBETUFfVU5DQUNIRURfUkVHSU9OICgwKQogI2VuZGlmCkBAIC0zNSw2ICszOCw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBzY2xrX3RvX3VzZWNzKHVuc2lnbmVkIGxvbmcgc2Nsayk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB1c2Vjc190b19zY2xrKHVuc2lnbmVkIGxvbmcgdXNlY3MpOwogCitzdHJ1Y3QgcHRfcmVnczsKIGV4dGVybiB2b2lkIGR1bXBfYmZpbl9wcm9jZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIGR1bXBfYmZpbl9tZW0oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgZHVtcF9iZmluX3RyYWNlX2J1ZmZlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1scTAzNXExLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tbHEwMzVxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmMyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tbHEwMzVxMS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBCbGFja2ZpbiBMQ0QgRnJhbWVidWZmZXIgZHJpdmVyIFNIQVJQIExRMDM1UTFESDAyCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBCRklOX0xRMDM1UTFfSAorI2RlZmluZSBCRklOX0xRMDM1UTFfSAorCisjZGVmaW5lIExRMDM1X1JMCSgwIDw8IDgpCS8qIFJpZ2h0IC0+IExlZnQgU2NhbiAqLworI2RlZmluZSBMUTAzNV9MUgkoMSA8PCA4KQkvKiBMZWZ0IC0+IFJpZ2h0IFNjYW4gKi8KKyNkZWZpbmUgTFEwMzVfVEIJKDEgPDwgOSkJLyogVG9wIC0+IEJvdHRvbiBTY2FuICovCisjZGVmaW5lIExRMDM1X0JUCSgwIDw8IDkpCS8qIEJvdHRvbiAtPiBUb3AgU2NhbiAqLworI2RlZmluZSBMUTAzNV9CR1IJKDEgPDwgMTEpCS8qIFVzZSBCR1IgZm9ybWF0ICovCisjZGVmaW5lIExRMDM1X1JHQgkoMCA8PCAxMSkJLyogVXNlIFJHQiBmb3JtYXQgKi8KKyNkZWZpbmUgTFEwMzVfTk9STQkoMSA8PCAxMykJLyogUmV2ZXJzYWwgKi8KKyNkZWZpbmUgTFEwMzVfUkVWCSgwIDw8IDEzKQkvKiBSZXZlcnNhbCAqLworCitzdHJ1Y3QgYmZpbl9scTAzNXExZmJfZGlzcF9pbmZvIHsKKworCXVuc2lnbmVkCW1vZGU7CisJLyogR1BJT3MgKi8KKwlpbnQJCXVzZV9ibDsKKwl1bnNpZ25lZCAJZ3Bpb19ibDsKK307CisKKyNlbmRpZiAvKiBCRklOX0xRMDM1UTFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggNmY0NTQ4YS4uNzVmNmRjMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEJVRygpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlfQlVHX09SX1dBUk4oMCk7CQkJCQlcCi0JCWZvciAoOzspOwkJCQkJCVwKKwkJdW5yZWFjaGFibGUoKTsJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA0MTdlYWFjLi4yNjY2ZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBfQkxBQ0tGSU5fQ0FDSEVGTFVTSF9ICiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4JLyogZm9yIFNTWU5DKCkgKi8KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4JLyogZm9yIF9yYW1lbmQgKi8KIAogZXh0ZXJuIHZvaWQgYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcyk7CiBleHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZF9hZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaAppbmRleCBhMjM0MTViLi42MjNjYzdmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCkBAIC05LDYzICs5LDEyIEBACiAjZGVmaW5lIF9CRklOX0NIRUNLU1VNX0gKIAogLyoKLSAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAotICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKLSAqCi0gKiByZXR1cm5zIGEgMzItYml0IG51bWJlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBpbnRvIGl0c2VsZgotICogb3IgY3N1bV90Y3B1ZHBfbWFnaWMKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLCBleGNlcHQKLSAqIGZvciB0aGUgbGFzdCBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIG9kZAotICoKLSAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQotICovCi1fX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwotCi0vKgotICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0Ci0gKiBjaGVja3N1bXMKLSAqCi0gKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KLSAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5Ci0gKi8KLQotX193c3VtIGNzdW1fcGFydGlhbF9jb3B5KGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAotCQkJICAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0pOwotCi0vKgotICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsX2NvcHksIGJ1dCBjb3BpZXMgZnJvbSB1c2VyIHNwYWNlLgotICoKLSAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgotICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKLSAqLwotCi1leHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCSAgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICpjc3VtX2Vycik7Ci0KLSNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhzcmMsIGRzdCwgbGVuLCBzdW0pCVwKLQljc3VtX3BhcnRpYWxfY29weSgoc3JjKSwgKGRzdCksIChsZW4pLCAoc3VtKSkKLQotX19zdW0xNiBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKLQotLyoKLSAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCi0gKi8KLQotc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQotewotCXdoaWxlIChzdW0gPj4gMTYpCi0JCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7Ci0JcmV0dXJuICgofihzdW0gPDwgMTYpKSA+PiAxNik7Ci19Ci0KLS8qCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwogCiBzdGF0aWMgaW5saW5lIF9fd3N1bQotY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCitfX2NzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgY2Fycnk7CkBAIC04OCwxOSArMzcsOCBAQAogCiAJcmV0dXJuIChzdW0pOwogfQorI2RlZmluZSBjc3VtX3RjcHVkcF9ub2ZvbGQgX19jc3VtX3RjcHVkcF9ub2ZvbGQKIAotc3RhdGljIGlubGluZSBfX3N1bTE2Ci1jc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQotewotCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7Ci19CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2hlY2tzdW0uaD4KIAotLyoKLSAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKLSAqIGluIGljbXAuYwotICovCi0KLWV4dGVybiBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKTsKLQotI2VuZGlmCQkJCS8qIF9CRklOX0NIRUNLU1VNX0ggKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmgKaW5kZXggZjgwZGFkNS4uNmYwYjYxOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oCkBAIC05LDYgKzksOCBAQAogI2lmbmRlZiBfQkZJTl9DTE9DS1NfSAogI2RlZmluZSBfQkZJTl9DTE9DS1NfSAogCisjaW5jbHVkZSA8YXNtL2RwbWMuaD4KKwogI2lmZGVmIENPTkZJR19DQ0xLX0RJVl8xCiAjIGRlZmluZSBDT05GSUdfQ0NMS19BQ1RfRElWICAgQ0NMS19ESVYxCiAjIGRlZmluZSBDT05GSUdfQ0NMS19ESVYgMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDdhMjNkODIuLmY5MTcyZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTcsOSArNyw5IEBACiAjaWZuZGVmIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorc3RydWN0IHNjYXR0ZXJsaXN0OwogCi12b2lkIGRtYV9hbGxvY19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7CiB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLApAQCAtMjAsMTMgKzIwLDUxIEBACiAgKi8KICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQogI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorI2RlZmluZSBkbWFfc3VwcG9ydGVkKGQsIG0pICAgICAgICAgKDEpCisjZGVmaW5lIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgICAoMzIpCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpICAgICAoMSkKIAotc3RhdGljIGlubGluZQotaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgZG1hX21hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gZG1hX21hc2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKIAlyZXR1cm4gMDsKIH0KIAorZXh0ZXJuIHZvaWQKK19fZG1hX3N5bmMoZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2RtYV9zeW5jKGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKGRpcikpIHsKKwkJX19kbWFfc3luYyhhZGRyLCBzaXplLCBkaXIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkaXIpIHsKKwljYXNlIERNQV9OT05FOgorCQlCVUcoKTsKKwljYXNlIERNQV9UT19ERVZJQ0U6CQkvKiB3cml0ZWJhY2sgb25seSAqLworCQlmbHVzaF9kY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArIHNpemUpOworCQlicmVhazsKKwljYXNlIERNQV9GUk9NX0RFVklDRTogLyogaW52YWxpZGF0ZSBvbmx5ICovCisJY2FzZSBETUFfQklESVJFQ1RJT05BTDogLyogZmx1c2ggYW5kIGludmFsaWRhdGUgKi8KKwkJLyogQmxhY2tmaW4gaGFzIG5vIGRlZGljYXRlZCBpbnZhbGlkYXRlIChpdCBpbmNsdWRlcyBhIGZsdXNoKSAqLworCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7CisJCWJyZWFrOworCX0KK30KKwogLyoKICAqIE1hcCBhIHNpbmdsZSBidWZmZXIgb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCiAgKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KQEAgLTM0LDggKzcyLDEzIEBACiAgKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkKICAqIHVudGlsIGVpdGhlciBwY2lfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGUgaXMgcGVyZm9ybWVkLgogICovCi1leHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKK2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCV9kbWFfc3luYygoZG1hX2FkZHJfdClwdHIsIHNpemUsIGRpcik7CisJcmV0dXJuIChkbWFfYWRkcl90KSBwdHI7Cit9CiAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAogZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCkBAIC01Myw4ICs5NiwxMiBAQAogICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJlbnRlZWQgdG8gc2VlCiAgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgogICovCi1leHRlcm4gdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCi0JCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKQEAgLTgwLDM4ICsxMjcsNjYgQEAKICAqIHRoZSBzYW1lIGhlcmUuCiAgKi8KIGV4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogLyoKICAqIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCiAgKiBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IKICAqIHBjaV91bm1hcF9zaW5nbGUoKSBhYm92ZS4KICAqLwotZXh0ZXJuIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJICAgICAgaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCWRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQorc3RhdGljIGlubGluZSB2b2lkCitkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCSAgICAgaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCWRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQorc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogeworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CisJX2RtYV9zeW5jKGhhbmRsZSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CisJZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoZGV2LCBoYW5kbGUsIDAsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoZGV2LCBoYW5kbGUsIDAsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7Cit9CisKK2V4dGVybiB2b2lkCitkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCV9kbWFfc3luYygoZG1hX2FkZHJfdCl2YWRkciwgc2l6ZSwgZGlyKTsKIH0KIAogI2VuZGlmCQkJCS8qIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCBjOWE1OTYyLi5iZDJlNjIyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLmgKQEAgLTEwLDQ2ICsxMCw3MCBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEuaD4KIAotI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgUEFHRV9PRkZTRVQKKy8qIERNQV9DT05GSUcgTWFza3MgKi8KKyNkZWZpbmUgRE1BRU4JCQkweDAwMDEJLyogRE1BIENoYW5uZWwgRW5hYmxlICovCisjZGVmaW5lIFdOUgkJCQkweDAwMDIJLyogQ2hhbm5lbCBEaXJlY3Rpb24gKFcvUiopICovCisjZGVmaW5lIFdEU0laRV84CQkweDAwMDAJLyogVHJhbnNmZXIgV29yZCBTaXplID0gOCAqLworI2RlZmluZSBXRFNJWkVfMTYJCTB4MDAwNAkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAxNiAqLworI2RlZmluZSBXRFNJWkVfMzIJCTB4MDAwOAkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAzMiAqLworI2RlZmluZSBETUEyRAkJCTB4MDAxMAkvKiBETUEgTW9kZSAoMkQvMUQqKSAqLworI2RlZmluZSBSRVNUQVJUCQkJMHgwMDIwCS8qIERNQSBCdWZmZXIgQ2xlYXIgKi8KKyNkZWZpbmUgRElfU0VMCQkJMHgwMDQwCS8qIERhdGEgSW50ZXJydXB0IFRpbWluZyBTZWxlY3QgKi8KKyNkZWZpbmUgRElfRU4JCQkweDAwODAJLyogRGF0YSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIE5EU0laRV8wCQkweDAwMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAwIChTdG9wL0F1dG9idWZmZXIpICovCisjZGVmaW5lIE5EU0laRV8xCQkweDAxMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAxICovCisjZGVmaW5lIE5EU0laRV8yCQkweDAyMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAyICovCisjZGVmaW5lIE5EU0laRV8zCQkweDAzMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAzICovCisjZGVmaW5lIE5EU0laRV80CQkweDA0MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA0ICovCisjZGVmaW5lIE5EU0laRV81CQkweDA1MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA1ICovCisjZGVmaW5lIE5EU0laRV82CQkweDA2MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA2ICovCisjZGVmaW5lIE5EU0laRV83CQkweDA3MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA3ICovCisjZGVmaW5lIE5EU0laRV84CQkweDA4MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA4ICovCisjZGVmaW5lIE5EU0laRV85CQkweDA5MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA5ICovCisjZGVmaW5lIE5EU0laRQkJCTB4MGYwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSAqLworI2RlZmluZSBETUFGTE9XCQkJMHg3MDAwCS8qIEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBETUFGTE9XX1NUT1AJMHgwMDAwCS8qIFN0b3AgTW9kZSAqLworI2RlZmluZSBETUFGTE9XX0FVVE8JMHgxMDAwCS8qIEF1dG9idWZmZXIgTW9kZSAqLworI2RlZmluZSBETUFGTE9XX0FSUkFZCTB4NDAwMAkvKiBEZXNjcmlwdG9yIEFycmF5IE1vZGUgKi8KKyNkZWZpbmUgRE1BRkxPV19TTUFMTAkweDYwMDAJLyogU21hbGwgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUgKi8KKyNkZWZpbmUgRE1BRkxPV19MQVJHRQkweDcwMDAJLyogTGFyZ2UgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICBHZW5lcmljIERNQSAgRGVjbGFyYXRpb25zCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZW51bSBkbWFfY2hhbl9zdGF0dXMgewotCURNQV9DSEFOTkVMX0ZSRUUsCi0JRE1BX0NIQU5ORUxfUkVRVUVTVEVELAotCURNQV9DSEFOTkVMX0VOQUJMRUQsCi19OworLyogRE1BX0lSUV9TVEFUVVMgTWFza3MgKi8KKyNkZWZpbmUgRE1BX0RPTkUJCTB4MDAwMQkvKiBETUEgQ29tcGxldGlvbiBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIERNQV9FUlIJCQkweDAwMDIJLyogRE1BIEVycm9yIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgREZFVENICQkJMHgwMDA0CS8qIERNQSBEZXNjcmlwdG9yIEZldGNoIEluZGljYXRvciAqLworI2RlZmluZSBETUFfUlVOCQkJMHgwMDA4CS8qIERNQSBDaGFubmVsIFJ1bm5pbmcgSW5kaWNhdG9yICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogY29uZmlnIHJlZyBiaXRzIHZhbHVlCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBEQVRBX1NJWkVfOCAJCTAKLSNkZWZpbmUgREFUQV9TSVpFXzE2IAkJMQotI2RlZmluZSBEQVRBX1NJWkVfMzIgCQkyCisjZGVmaW5lIERBVEFfU0laRV84CQkJMAorI2RlZmluZSBEQVRBX1NJWkVfMTYJCTEKKyNkZWZpbmUgREFUQV9TSVpFXzMyCQkyCiAKLSNkZWZpbmUgRE1BX0ZMT1dfU1RPUCAJCTAKLSNkZWZpbmUgRE1BX0ZMT1dfQVVUTyAJCTEKLSNkZWZpbmUgRE1BX0ZMT1dfQVJSQVkgCQk0Ci0jZGVmaW5lIERNQV9GTE9XX1NNQUxMIAkJNgotI2RlZmluZSBETUFfRkxPV19MQVJHRSAJCTcKKyNkZWZpbmUgRE1BX0ZMT1dfU1RPUAkJMAorI2RlZmluZSBETUFfRkxPV19BVVRPCQkxCisjZGVmaW5lIERNQV9GTE9XX0FSUkFZCQk0CisjZGVmaW5lIERNQV9GTE9XX1NNQUxMCQk2CisjZGVmaW5lIERNQV9GTE9XX0xBUkdFCQk3CiAKLSNkZWZpbmUgRElNRU5TSU9OX0xJTkVBUiAgICAwCi0jZGVmaW5lIERJTUVOU0lPTl8yRCAgICAgICAgICAgMQorI2RlZmluZSBESU1FTlNJT05fTElORUFSCTAKKyNkZWZpbmUgRElNRU5TSU9OXzJECQkxCiAKLSNkZWZpbmUgRElSX1JFQUQgICAgIDAKLSNkZWZpbmUgRElSX1dSSVRFICAgIDEKKyNkZWZpbmUgRElSX1JFQUQJCQkwCisjZGVmaW5lIERJUl9XUklURQkJCTEKIAotI2RlZmluZSBJTlRSX0RJU0FCTEUgICAwCi0jZGVmaW5lIElOVFJfT05fQlVGICAgIDIKLSNkZWZpbmUgSU5UUl9PTl9ST1cgICAgMworI2RlZmluZSBJTlRSX0RJU0FCTEUJCTAKKyNkZWZpbmUgSU5UUl9PTl9CVUYJCQkyCisjZGVmaW5lIElOVFJfT05fUk9XCQkJMwogCiAjZGVmaW5lIERNQV9OT1NZTkNfS0VFUF9ETUFfQlVGCTAKLSNkZWZpbmUgRE1BX1NZTkNfUkVTVEFSVAkxCisjZGVmaW5lIERNQV9TWU5DX1JFU1RBUlQJCTEKIAogc3RydWN0IGRtYXNnIHsKIAl2b2lkICpuZXh0X2Rlc2NfYWRkcjsKQEAgLTEwNCwxMSArMTI4LDkgQEAKIAogfTsKIAotc3RydWN0IG11dGV4Owogc3RydWN0IGRtYV9jaGFubmVsIHsKLQlzdHJ1Y3QgbXV0ZXggZG1hbG9jazsKIAljb25zdCBjaGFyICpkZXZpY2VfaWQ7Ci0JZW51bSBkbWFfY2hhbl9zdGF0dXMgY2hhbl9zdGF0dXM7CisJYXRvbWljX3QgY2hhbl9zdGF0dXM7CiAJdm9sYXRpbGUgc3RydWN0IGRtYV9yZWdpc3RlciAqcmVnczsKIAlzdHJ1Y3QgZG1hc2cgKnNnOwkJLyogbGFyZ2UgbW9kZSBkZXNjcmlwdG9yICovCiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTIyMCwyNyArMjQyLDIwIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9jaGFubmVsX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKIHsKLQlpZiAoZG1hX2NoW2NoYW5uZWxdLmNoYW5fc3RhdHVzID09IERNQV9DSEFOTkVMX0ZSRUUpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIDE7CisJcmV0dXJuIGF0b21pY19yZWFkKCZkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CiAJZG1hX2NoW2NoYW5uZWxdLnJlZ3MtPmNmZyAmPSB+RE1BRU47CiAJU1NZTkMoKTsKLQlkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMgPSBETUFfQ0hBTk5FTF9SRVFVRVNURUQ7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKIHsKIAlkbWFfY2hbY2hhbm5lbF0ucmVncy0+Y3Vycl94X2NvdW50ID0gMDsKIAlkbWFfY2hbY2hhbm5lbF0ucmVncy0+Y3Vycl95X2NvdW50ID0gMDsKIAlkbWFfY2hbY2hhbm5lbF0ucmVncy0+Y2ZnIHw9IERNQUVOOwotCWRtYV9jaFtjaGFubmVsXS5jaGFuX3N0YXR1cyA9IERNQV9DSEFOTkVMX0VOQUJMRUQ7CiB9Ci12b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBjaGFubmVsKTsKLWludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgY29uc3QgY2hhciAqZGV2aWNlX2lkKTsKIGludCBzZXRfZG1hX2NhbGxiYWNrKHVuc2lnbmVkIGludCBjaGFubmVsLCBpcnFfaGFuZGxlcl90IGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKaW5kZXggOTI1ZTY2Yy4uMTU5N2FlNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogTWlzY2VsbGFuZW91cyBJT0NUTCBjb21tYW5kcyBmb3IgRHluYW1pYyBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xsZXIgRHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQW5hbG9nIERldmljZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwpAQCAtOSw3ICs5LDEwOSBAQAogI2lmbmRlZiBfQkxBQ0tGSU5fRFBNQ19IXwogI2RlZmluZSBfQkxBQ0tGSU5fRFBNQ19IXwogCi0jaWZkZWYgX19LRVJORUxfXworLyogUExMX0NUTCBNYXNrcyAqLworI2RlZmluZSBERgkJCTB4MDAwMQkvKiAwOiBQTEwgPSBDTEtJTiwgMTogUExMID0gQ0xLSU4vMiAqLworI2RlZmluZSBQTExfT0ZGCQkJMHgwMDAyCS8qIFBMTCBOb3QgUG93ZXJlZCAqLworI2RlZmluZSBTVE9QQ0sJCQkweDAwMDgJLyogQ29yZSBDbG9jayBPZmYgKi8KKyNkZWZpbmUgUERXTgkJCTB4MDAyMAkvKiBFbnRlciBEZWVwIFNsZWVwIE1vZGUgKi8KKyNpZmRlZiBfX0FEU1BCRjUzOV9fCisjIGRlZmluZSBJTl9ERUxBWQkJMHgwMDE0CS8qIEFkZCAyMDBwcyBEZWxheSBUbyBFQklVIElucHV0IExhdGNoZXMgKi8KKyMgZGVmaW5lIE9VVF9ERUxBWQkJMHgwMEMwCS8qIEFkZCAyMDBwcyBEZWxheSBUbyBFQklVIE91dHB1dCBTaWduYWxzICovCisjZWxzZQorIyBkZWZpbmUgSU5fREVMQVkJCTB4MDA0MAkvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBJbnB1dCBMYXRjaGVzICovCisjIGRlZmluZSBPVVRfREVMQVkJCTB4MDA4MAkvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBPdXRwdXQgU2lnbmFscyAqLworI2VuZGlmCisjZGVmaW5lIEJZUEFTUwkJCTB4MDEwMAkvKiBCeXBhc3MgdGhlIFBMTCAqLworI2RlZmluZSBNU0VMCQkJMHg3RTAwCS8qIE11bHRpcGxpZXIgU2VsZWN0IEZvciBDQ0xLL1ZDTyBGYWN0b3JzICovCisjZGVmaW5lIFNQT1JUX0hZU1QJCTB4ODAwMAkvKiBFbmFibGUgQWRkaXRpb25hbCBIeXN0ZXJlc2lzIG9uIFNQT1JUIElucHV0IFBpbnMgKi8KKyNkZWZpbmUgU0VUX01TRUwoeCkJCSgoKHgpJjB4M0YpIDw8IDB4OSkJLyogU2V0IE1TRUwgPSAwLTYzIC0tPiBWQ08gPSBDTEtJTipNU0VMICovCisKKy8qIFBMTF9ESVYgTWFza3MgKi8KKyNkZWZpbmUgU1NFTAkJCTB4MDAwRgkvKiBTeXN0ZW0gU2VsZWN0ICovCisjZGVmaW5lIENTRUwJCQkweDAwMzAJLyogQ29yZSBTZWxlY3QgKi8KKyNkZWZpbmUgQ1NFTF9ESVYxCQkweDAwMDAJLyogQ0NMSyA9IFZDTyAvIDEgKi8KKyNkZWZpbmUgQ1NFTF9ESVYyCQkweDAwMTAJLyogQ0NMSyA9IFZDTyAvIDIgKi8KKyNkZWZpbmUgQ1NFTF9ESVY0CQkweDAwMjAJLyogQ0NMSyA9IFZDTyAvIDQgKi8KKyNkZWZpbmUgQ1NFTF9ESVY4CQkweDAwMzAJLyogQ0NMSyA9IFZDTyAvIDggKi8KKworI2RlZmluZSBDQ0xLX0RJVjEgQ1NFTF9ESVYxCisjZGVmaW5lIENDTEtfRElWMiBDU0VMX0RJVjIKKyNkZWZpbmUgQ0NMS19ESVY0IENTRUxfRElWNAorI2RlZmluZSBDQ0xLX0RJVjggQ1NFTF9ESVY4CisKKyNkZWZpbmUgU0VUX1NTRUwoeCkJKCh4KSAmIDB4RikJLyogU2V0IFNTRUwgPSAwLTE1IC0tPiBTQ0xLID0gVkNPL1NTRUwgKi8KKyNkZWZpbmUgU0NMS19ESVYoeCkJKHgpCQkvKiBTQ0xLID0gVkNPIC8geCAqLworCisvKiBQTExfU1RBVCBNYXNrcyAqLworI2RlZmluZSBBQ1RJVkVfUExMRU5BQkxFRAkweDAwMDEJLyogUHJvY2Vzc29yIEluIEFjdGl2ZSBNb2RlIFdpdGggUExMIEVuYWJsZWQgKi8KKyNkZWZpbmUgRlVMTF9PTgkJCTB4MDAwMgkvKiBQcm9jZXNzb3IgSW4gRnVsbCBPbiBNb2RlICovCisjZGVmaW5lIEFDVElWRV9QTExESVNBQkxFRAkweDAwMDQJLyogUHJvY2Vzc29yIEluIEFjdGl2ZSBNb2RlIFdpdGggUExMIERpc2FibGVkICovCisjZGVmaW5lIFBMTF9MT0NLRUQJCTB4MDAyMAkvKiBQTExfTE9DS0NOVCBIYXMgQmVlbiBSZWFjaGVkICovCisKKyNkZWZpbmUgUlRDV1MJCQkweDA0MDAJLyogUlRDL1Jlc2V0IFdha2UtVXAgU3RhdHVzICovCisjZGVmaW5lIENBTldTCQkJMHgwODAwCS8qIENBTiBXYWtlLVVwIFN0YXR1cyAqLworI2RlZmluZSBVU0JXUwkJCTB4MjAwMAkvKiBVU0IgV2FrZS1VcCBTdGF0dXMgKi8KKyNkZWZpbmUgS1BBRFdTCQkJMHg0MDAwCS8qIEtleXBhZCBXYWtlLVVwIFN0YXR1cyAqLworI2RlZmluZSBST1RXUwkJCTB4ODAwMAkvKiBSb3RhcnkgV2FrZS1VcCBTdGF0dXMgKi8KKyNkZWZpbmUgR1BXUwkJCTB4MTAwMAkvKiBHZW5lcmFsLVB1cnBvc2UgV2FrZS1VcCBTdGF0dXMgKi8KKworLyogVlJfQ1RMIE1hc2tzICovCisjaWYgZGVmaW5lZChfX0FEU1BCRjUyeF9fKSB8fCBkZWZpbmVkKF9fQURTUEJGNTF4X18pCisjZGVmaW5lIEZSRVEJCQkweDMwMDAJLyogU3dpdGNoaW5nIE9zY2lsbGF0b3IgRnJlcXVlbmN5IEZvciBSZWd1bGF0b3IgKi8KKyNkZWZpbmUgRlJFUV8xMDAwCQkweDMwMDAJLyogU3dpdGNoaW5nIEZyZXF1ZW5jeSBJcyAxIE1IeiAqLworI2Vsc2UKKyNkZWZpbmUgRlJFUQkJCTB4MDAwMwkvKiBTd2l0Y2hpbmcgT3NjaWxsYXRvciBGcmVxdWVuY3kgRm9yIFJlZ3VsYXRvciAqLworI2RlZmluZSBGUkVRXzMzMwkJMHgwMDAxCS8qIFN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMzMzIGtIeiAqLworI2RlZmluZSBGUkVRXzY2NwkJMHgwMDAyCS8qIFN3aXRjaGluZyBGcmVxdWVuY3kgSXMgNjY3IGtIeiAqLworI2RlZmluZSBGUkVRXzEwMDAJCTB4MDAwMwkvKiBTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDEgTUh6ICovCisjZW5kaWYKKyNkZWZpbmUgSElCRVJOQVRFCQkweDAwMDAJLyogUG93ZXJkb3duL0J5cGFzcyBPbi1Cb2FyZCBSZWd1bGF0aW9uICovCisKKyNkZWZpbmUgR0FJTgkJCTB4MDAwQwkvKiBWb2x0YWdlIExldmVsIEdhaW4gKi8KKyNkZWZpbmUgR0FJTl81CQkJMHgwMDAwCS8qIEdBSU4gPSA1ICovCisjZGVmaW5lIEdBSU5fMTAJCQkweDAwMDQJLyogR0FJTiA9IDEgKi8KKyNkZWZpbmUgR0FJTl8yMAkJCTB4MDAwOAkvKiBHQUlOID0gMiAqLworI2RlZmluZSBHQUlOXzUwCQkJMHgwMDBDCS8qIEdBSU4gPSA1ICovCisKKyNkZWZpbmUgVkxFVgkJCTB4MDBGMAkvKiBJbnRlcm5hbCBWb2x0YWdlIExldmVsICovCisjaWZkZWYgX19BRFNQQkY1MnhfXworI2RlZmluZSBWTEVWXzA4NSAJCTB4MDA0MAkvKiBWTEVWID0gMC44NSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2RlZmluZSBWTEVWXzA5MAkJMHgwMDUwCS8qIFZMRVYgPSAwLjkwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCisjZGVmaW5lIFZMRVZfMDk1CQkweDAwNjAJLyogVkxFViA9IDAuOTUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KKyNkZWZpbmUgVkxFVl8xMDAJCTB4MDA3MAkvKiBWTEVWID0gMS4wMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2RlZmluZSBWTEVWXzEwNQkJMHgwMDgwCS8qIFZMRVYgPSAxLjA1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCisjZGVmaW5lIFZMRVZfMTEwCQkweDAwOTAJLyogVkxFViA9IDEuMTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KKyNkZWZpbmUgVkxFVl8xMTUJCTB4MDBBMAkvKiBWTEVWID0gMS4xNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2RlZmluZSBWTEVWXzEyMAkJMHgwMEIwCS8qIFZMRVYgPSAxLjIwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCisjZWxzZQorI2RlZmluZSBWTEVWXzA4NSAJCTB4MDA2MAkvKiBWTEVWID0gMC44NSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2RlZmluZSBWTEVWXzA5MAkJMHgwMDcwCS8qIFZMRVYgPSAwLjkwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCisjZGVmaW5lIFZMRVZfMDk1CQkweDAwODAJLyogVkxFViA9IDAuOTUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KKyNkZWZpbmUgVkxFVl8xMDAJCTB4MDA5MAkvKiBWTEVWID0gMS4wMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2RlZmluZSBWTEVWXzEwNQkJMHgwMEEwCS8qIFZMRVYgPSAxLjA1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCisjZGVmaW5lIFZMRVZfMTEwCQkweDAwQjAJLyogVkxFViA9IDEuMTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KKyNkZWZpbmUgVkxFVl8xMTUJCTB4MDBDMAkvKiBWTEVWID0gMS4xNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2RlZmluZSBWTEVWXzEyMAkJMHgwMEQwCS8qIFZMRVYgPSAxLjIwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCisjZGVmaW5lIFZMRVZfMTI1CQkweDAwRTAJLyogVkxFViA9IDEuMjUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KKyNkZWZpbmUgVkxFVl8xMzAJCTB4MDBGMAkvKiBWTEVWID0gMS4zMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLworI2VuZGlmCisKKyNkZWZpbmUgV0FLRQkJCTB4MDEwMAkvKiBFbmFibGUgUlRDL1Jlc2V0IFdha2V1cCBGcm9tIEhpYmVybmF0ZSAqLworI2RlZmluZSBDQU5XRQkJCTB4MDIwMAkvKiBFbmFibGUgQ0FOIFdha2V1cCBGcm9tIEhpYmVybmF0ZSAqLworI2RlZmluZSBQSFlXRQkJCTB4MDQwMAkvKiBFbmFibGUgUEhZIFdha2V1cCBGcm9tIEhpYmVybmF0ZSAqLworI2RlZmluZSBHUFdFCQkJMHgwNDAwCS8qIEdlbmVyYWwtUHVycG9zZSBXYWtlLVVwIEVuYWJsZSAqLworI2RlZmluZSBNWFZSV0UJCQkweDA0MDAJLyogRW5hYmxlIE1YVlIgV2FrZXVwIEZyb20gSGliZXJuYXRlICovCisjZGVmaW5lIEtQQURXRQkJCTB4MTAwMAkvKiBLZXlwYWQgV2FrZS1VcCBFbmFibGUgKi8KKyNkZWZpbmUgUk9UV0UJCQkweDIwMDAJLyogUm90YXJ5IFdha2UtVXAgRW5hYmxlICovCisjZGVmaW5lIENMS0JVRk9FCQkweDQwMDAJLyogQ0xLSU4gQnVmZmVyIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgU0NLRUxPVwkJCTB4ODAwMAkvKiBEbyBOb3QgRHJpdmUgU0NLRSBIaWdoIER1cmluZyBSZXNldCBBZnRlciBIaWJlcm5hdGUgKi8KKworI2lmIGRlZmluZWQoX19BRFNQQkY1MnhfXykgfHwgZGVmaW5lZChfX0FEU1BCRjUxeF9fKQorI2RlZmluZSBVU0JXRQkJCTB4MDIwMAkvKiBFbmFibGUgVVNCIFdha2V1cCBGcm9tIEhpYmVybmF0ZSAqLworI2Vsc2UKKyNkZWZpbmUgVVNCV0UJCQkweDA4MDAJLyogRW5hYmxlIFVTQiBXYWtldXAgRnJvbSBIaWJlcm5hdGUgKi8KKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiB2b2lkIHNsZWVwX21vZGUodTMyIHNpY19pd3IwLCB1MzIgc2ljX2l3cjEsIHUzMiBzaWNfaXdyMik7CkBAIC01NCw2ICsxNTYsNSBAQAogCXdbUDAgKyAoeCAtIFBMTF9DVEwpXSA9IFIwO1wKIAogI2VuZGlmCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLypfQkxBQ0tGSU5fRFBNQ19IXyovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA4ZTA3NjRjLi41YjUwZjBlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTU1LDcgKzU1LDYgQEAKIAlfcmVncy0+cDIJPSBfZHluYW1pY19hZGRyOwkJCQlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0ZEUElDX0NPUkVfRUZMQUdTCUVGX0JGSU5fRkRQSUMKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IDViNDRkMDUuLjUzOTQ2OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0xNTksNiArMTU5LDExIEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBCRklOX1NQRUNJQUxfR1BJT19CQU5LUwordm9pZCBiZmluX3NwZWNpYWxfZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworaW50IGJmaW5fc3BlY2lhbF9ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUE0KIAogdW5zaWduZWQgaW50IGJmaW5fcG1fc3RhbmRieV9zZXR1cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3B0aW1lcnMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3B0aW1lcnMuaAppbmRleCA4OWYwOGRlLi5jNzIyYWNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwdGltZXJzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncHRpbWVycy5oCkBAIC0xNzIsMjUgKzE3MiwyNSBAQAogCiAvKiBUaGUgYWN0dWFsIGdwdGltZXIgQVBJICovCiAKLXZvaWQgICAgIHNldF9ncHRpbWVyX3B3aWR0aChpbnQgdGltZXJfaWQsIHVpbnQzMl90IHdpZHRoKTsKLXVpbnQzMl90IGdldF9ncHRpbWVyX3B3aWR0aChpbnQgdGltZXJfaWQpOwotdm9pZCAgICAgc2V0X2dwdGltZXJfcGVyaW9kKGludCB0aW1lcl9pZCwgdWludDMyX3QgcGVyaW9kKTsKLXVpbnQzMl90IGdldF9ncHRpbWVyX3BlcmlvZChpbnQgdGltZXJfaWQpOwotdWludDMyX3QgZ2V0X2dwdGltZXJfY291bnQoaW50IHRpbWVyX2lkKTsKLWludCAgICAgIGdldF9ncHRpbWVyX2ludHIoaW50IHRpbWVyX2lkKTsKLXZvaWQgICAgIGNsZWFyX2dwdGltZXJfaW50cihpbnQgdGltZXJfaWQpOwotaW50ICAgICAgZ2V0X2dwdGltZXJfb3ZlcihpbnQgdGltZXJfaWQpOwotdm9pZCAgICAgY2xlYXJfZ3B0aW1lcl9vdmVyKGludCB0aW1lcl9pZCk7Ci12b2lkICAgICBzZXRfZ3B0aW1lcl9jb25maWcoaW50IHRpbWVyX2lkLCB1aW50MTZfdCBjb25maWcpOwotdWludDE2X3QgZ2V0X2dwdGltZXJfY29uZmlnKGludCB0aW1lcl9pZCk7Ci1pbnQgICAgICBnZXRfZ3B0aW1lcl9ydW4oaW50IHRpbWVyX2lkKTsKLXZvaWQgICAgIHNldF9ncHRpbWVyX3B1bHNlX2hpKGludCB0aW1lcl9pZCk7Ci12b2lkICAgICBjbGVhcl9ncHRpbWVyX3B1bHNlX2hpKGludCB0aW1lcl9pZCk7Cit2b2lkICAgICBzZXRfZ3B0aW1lcl9wd2lkdGgodW5zaWduZWQgaW50IHRpbWVyX2lkLCB1aW50MzJfdCB3aWR0aCk7Cit1aW50MzJfdCBnZXRfZ3B0aW1lcl9wd2lkdGgodW5zaWduZWQgaW50IHRpbWVyX2lkKTsKK3ZvaWQgICAgIHNldF9ncHRpbWVyX3BlcmlvZCh1bnNpZ25lZCBpbnQgdGltZXJfaWQsIHVpbnQzMl90IHBlcmlvZCk7Cit1aW50MzJfdCBnZXRfZ3B0aW1lcl9wZXJpb2QodW5zaWduZWQgaW50IHRpbWVyX2lkKTsKK3VpbnQzMl90IGdldF9ncHRpbWVyX2NvdW50KHVuc2lnbmVkIGludCB0aW1lcl9pZCk7CitpbnQgICAgICBnZXRfZ3B0aW1lcl9pbnRyKHVuc2lnbmVkIGludCB0aW1lcl9pZCk7Cit2b2lkICAgICBjbGVhcl9ncHRpbWVyX2ludHIodW5zaWduZWQgaW50IHRpbWVyX2lkKTsKK2ludCAgICAgIGdldF9ncHRpbWVyX292ZXIodW5zaWduZWQgaW50IHRpbWVyX2lkKTsKK3ZvaWQgICAgIGNsZWFyX2dwdGltZXJfb3Zlcih1bnNpZ25lZCBpbnQgdGltZXJfaWQpOwordm9pZCAgICAgc2V0X2dwdGltZXJfY29uZmlnKHVuc2lnbmVkIGludCB0aW1lcl9pZCwgdWludDE2X3QgY29uZmlnKTsKK3VpbnQxNl90IGdldF9ncHRpbWVyX2NvbmZpZyh1bnNpZ25lZCBpbnQgdGltZXJfaWQpOworaW50ICAgICAgZ2V0X2dwdGltZXJfcnVuKHVuc2lnbmVkIGludCB0aW1lcl9pZCk7Cit2b2lkICAgICBzZXRfZ3B0aW1lcl9wdWxzZV9oaSh1bnNpZ25lZCBpbnQgdGltZXJfaWQpOwordm9pZCAgICAgY2xlYXJfZ3B0aW1lcl9wdWxzZV9oaSh1bnNpZ25lZCBpbnQgdGltZXJfaWQpOwogdm9pZCAgICAgZW5hYmxlX2dwdGltZXJzKHVpbnQxNl90IG1hc2spOwogdm9pZCAgICAgZGlzYWJsZV9ncHRpbWVycyh1aW50MTZfdCBtYXNrKTsKIHZvaWQgICAgIGRpc2FibGVfZ3B0aW1lcnNfc3luYyh1aW50MTZfdCBtYXNrKTsKIHVpbnQxNl90IGdldF9lbmFibGVkX2dwdGltZXJzKHZvaWQpOwotdWludDMyX3QgZ2V0X2dwdGltZXJfc3RhdHVzKGludCBncm91cCk7Ci12b2lkICAgICBzZXRfZ3B0aW1lcl9zdGF0dXMoaW50IGdyb3VwLCB1aW50MzJfdCB2YWx1ZSk7Cit1aW50MzJfdCBnZXRfZ3B0aW1lcl9zdGF0dXModW5zaWduZWQgaW50IGdyb3VwKTsKK3ZvaWQgICAgIHNldF9ncHRpbWVyX3N0YXR1cyh1bnNpZ25lZCBpbnQgZ3JvdXAsIHVpbnQzMl90IHZhbHVlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDFmNTAyOS4uMjllNTViOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaApAQCAtMzEsMTIgKzMxLDE0IEBACiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgdG1wOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjbGkgJTE7XG5cdCIKLQkJCSJOT1A7IE5PUDsgU1NZTkM7XG5cdCIKLQkJCSIlMCA9IGIgWyUyXSAoeik7XG5cdCIKLQkJCSJzdGkgJTE7XG5cdCIKLQkJCTogIj1kIih2YWwpLCAiPWQiKHRtcCk6ICJhIihhZGRyKQotCQkJKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJjbGkgJTE7IgorCQkiTk9QOyBOT1A7IFNTWU5DOyIKKwkJIiUwID0gYiBbJTJdICh6KTsiCisJCSJzdGkgJTE7IgorCQk6ICI9ZCIodmFsKSwgIj1kIih0bXApCisJCTogImEiKGFkZHIpCisJKTsKIAogCXJldHVybiAodW5zaWduZWQgY2hhcikgdmFsOwogfQpAQCAtNDYsMTIgKzQ4LDE0IEBACiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgdG1wOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjbGkgJTE7XG5cdCIKLQkJCSJOT1A7IE5PUDsgU1NZTkM7XG5cdCIKLQkJCSIlMCA9IHcgWyUyXSAoeik7XG5cdCIKLQkJCSJzdGkgJTE7XG5cdCIKLQkJICAgICAgCTogIj1kIih2YWwpLCAiPWQiKHRtcCk6ICJhIihhZGRyKQotCQkJKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJjbGkgJTE7IgorCQkiTk9QOyBOT1A7IFNTWU5DOyIKKwkJIiUwID0gdyBbJTJdICh6KTsiCisJCSJzdGkgJTE7IgorCQk6ICI9ZCIodmFsKSwgIj1kIih0bXApCisJCTogImEiKGFkZHIpCisJKTsKIAogCXJldHVybiAodW5zaWduZWQgc2hvcnQpIHZhbDsKIH0KQEAgLTYxLDIwICs2NSwyMyBAQAogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IHRtcDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fICgiY2xpICUxO1xuXHQiCi0JCQkiTk9QOyBOT1A7IFNTWU5DO1xuXHQiCi0JCQkiJTAgPSBbJTJdO1xuXHQiCi0JCQkic3RpICUxO1xuXHQiCi0JCSAgICAgIAk6ICI9ZCIodmFsKSwgIj1kIih0bXApOiAiYSIoYWRkcikKLQkJCSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiY2xpICUxOyIKKwkJIk5PUDsgTk9QOyBTU1lOQzsiCisJCSIlMCA9IFslMl07IgorCQkic3RpICUxOyIKKwkJOiAiPWQiKHZhbCksICI9ZCIodG1wKQorCQk6ICJhIihhZGRyKQorCSk7CisKIAlyZXR1cm4gdmFsOwogfQogCiAjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIHdyaXRlYihiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhZGRyKSkgPSAoYikpCi0jZGVmaW5lIHdyaXRldyhiLGFkZHIpICh2b2lkKSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoYWRkcikpID0gKGIpKQotI2RlZmluZSB3cml0ZWwoYixhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkgPSAoYikpCisjZGVmaW5lIHdyaXRlYihiLCBhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSB3cml0ZXcoYiwgYWRkcikgKHZvaWQpKCgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIChhZGRyKSkgPSAoYikpCisjZGVmaW5lIHdyaXRlbChiLCBhZGRyKSAodm9pZCkoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkgPSAoYikpCiAKICNkZWZpbmUgX19yYXdfcmVhZGIgcmVhZGIKICNkZWZpbmUgX19yYXdfcmVhZHcgcmVhZHcKQEAgLTgyLDkgKzg5LDkgQEAKICNkZWZpbmUgX19yYXdfd3JpdGViIHdyaXRlYgogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKLSNkZWZpbmUgbWVtc2V0X2lvKGEsYixjKQltZW1zZXQoKHZvaWQgKikoYSksKGIpLChjKSkKLSNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLGIsYykJbWVtY3B5KChhKSwodm9pZCAqKShiKSwoYykpCi0jZGVmaW5lIG1lbWNweV90b2lvKGEsYixjKQltZW1jcHkoKHZvaWQgKikoYSksKGIpLChjKSkKKyNkZWZpbmUgbWVtc2V0X2lvKGEsIGIsIGMpCW1lbXNldCgodm9pZCAqKShhKSwgKGIpLCAoYykpCisjZGVmaW5lIG1lbWNweV9mcm9taW8oYSwgYiwgYykJbWVtY3B5KChhKSwgKHZvaWQgKikoYiksIChjKSkKKyNkZWZpbmUgbWVtY3B5X3RvaW8oYSwgYiwgYykJbWVtY3B5KCh2b2lkICopKGEpLCAoYiksIChjKSkKIAogLyogQ29udmVydCAiSS9PIHBvcnQgYWRkcmVzc2VzIiB0byBhY3R1YWwgYWRkcmVzc2VzLiAgaS5lLiB1Z2x5IGNhc3RzLiAqLwogI2RlZmluZSBfX2lvKHBvcnQpICgodm9pZCAqKSh1bnNpZ25lZCBsb25nKShwb3J0KSkKQEAgLTkyLDMwICs5OSwzMCBAQAogI2RlZmluZSBpbmIocG9ydCkgICAgcmVhZGIoX19pbyhwb3J0KSkKICNkZWZpbmUgaW53KHBvcnQpICAgIHJlYWR3KF9faW8ocG9ydCkpCiAjZGVmaW5lIGlubChwb3J0KSAgICByZWFkbChfX2lvKHBvcnQpKQotI2RlZmluZSBvdXRiKHgscG9ydCkgd3JpdGViKHgsX19pbyhwb3J0KSkKLSNkZWZpbmUgb3V0dyh4LHBvcnQpIHdyaXRldyh4LF9faW8ocG9ydCkpCi0jZGVmaW5lIG91dGwoeCxwb3J0KSB3cml0ZWwoeCxfX2lvKHBvcnQpKQorI2RlZmluZSBvdXRiKHgsIHBvcnQpIHdyaXRlYih4LCBfX2lvKHBvcnQpKQorI2RlZmluZSBvdXR3KHgsIHBvcnQpIHdyaXRldyh4LCBfX2lvKHBvcnQpKQorI2RlZmluZSBvdXRsKHgsIHBvcnQpIHdyaXRlbCh4LCBfX2lvKHBvcnQpKQogCiAjZGVmaW5lIGluYl9wKHBvcnQpICAgIGluYihfX2lvKHBvcnQpKQogI2RlZmluZSBpbndfcChwb3J0KSAgICBpbncoX19pbyhwb3J0KSkKICNkZWZpbmUgaW5sX3AocG9ydCkgICAgaW5sKF9faW8ocG9ydCkpCi0jZGVmaW5lIG91dGJfcCh4LHBvcnQpIG91dGIoeCxfX2lvKHBvcnQpKQotI2RlZmluZSBvdXR3X3AoeCxwb3J0KSBvdXR3KHgsX19pbyhwb3J0KSkKLSNkZWZpbmUgb3V0bF9wKHgscG9ydCkgb3V0bCh4LF9faW8ocG9ydCkpCisjZGVmaW5lIG91dGJfcCh4LCBwb3J0KSBvdXRiKHgsIF9faW8ocG9ydCkpCisjZGVmaW5lIG91dHdfcCh4LCBwb3J0KSBvdXR3KHgsIF9faW8ocG9ydCkpCisjZGVmaW5lIG91dGxfcCh4LCBwb3J0KSBvdXRsKHgsIF9faW8ocG9ydCkpCiAKLSNkZWZpbmUgaW9yZWFkOF9yZXAoYSxkLGMpCXJlYWRzYihhLGQsYykKLSNkZWZpbmUgaW9yZWFkMTZfcmVwKGEsZCxjKQlyZWFkc3coYSxkLGMpCi0jZGVmaW5lIGlvcmVhZDMyX3JlcChhLGQsYykJcmVhZHNsKGEsZCxjKQotI2RlZmluZSBpb3dyaXRlOF9yZXAoYSxzLGMpCXdyaXRlc2IoYSxzLGMpCi0jZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSxzLGMpCXdyaXRlc3coYSxzLGMpCi0jZGVmaW5lIGlvd3JpdGUzMl9yZXAoYSxzLGMpCXdyaXRlc2woYSxzLGMpCisjZGVmaW5lIGlvcmVhZDhfcmVwKGEsIGQsIGMpCXJlYWRzYihhLCBkLCBjKQorI2RlZmluZSBpb3JlYWQxNl9yZXAoYSwgZCwgYykJcmVhZHN3KGEsIGQsIGMpCisjZGVmaW5lIGlvcmVhZDMyX3JlcChhLCBkLCBjKQlyZWFkc2woYSwgZCwgYykKKyNkZWZpbmUgaW93cml0ZThfcmVwKGEsIHMsIGMpCXdyaXRlc2IoYSwgcywgYykKKyNkZWZpbmUgaW93cml0ZTE2X3JlcChhLCBzLCBjKQl3cml0ZXN3KGEsIHMsIGMpCisjZGVmaW5lIGlvd3JpdGUzMl9yZXAoYSwgcywgYykJd3JpdGVzbChhLCBzLCBjKQogCi0jZGVmaW5lIGlvcmVhZDgoWCkJCQlyZWFkYihYKQotI2RlZmluZSBpb3JlYWQxNihYKQkJCXJlYWR3KFgpCi0jZGVmaW5lIGlvcmVhZDMyKFgpCQkJcmVhZGwoWCkKLSNkZWZpbmUgaW93cml0ZTgodmFsLFgpCQkJd3JpdGViKHZhbCxYKQotI2RlZmluZSBpb3dyaXRlMTYodmFsLFgpCQl3cml0ZXcodmFsLFgpCi0jZGVmaW5lIGlvd3JpdGUzMih2YWwsWCkJCXdyaXRlbCh2YWwsWCkKKyNkZWZpbmUgaW9yZWFkOCh4KQkJCXJlYWRiKHgpCisjZGVmaW5lIGlvcmVhZDE2KHgpCQkJcmVhZHcoeCkKKyNkZWZpbmUgaW9yZWFkMzIoeCkJCQlyZWFkbCh4KQorI2RlZmluZSBpb3dyaXRlOCh2YWwsIHgpCQl3cml0ZWIodmFsLCB4KQorI2RlZmluZSBpb3dyaXRlMTYodmFsLCB4KQkJd3JpdGV3KHZhbCwgeCkKKyNkZWZpbmUgaW93cml0ZTMyKHZhbCwgeCkJCXdyaXRlbCh2YWwsIHgpCiAKICNkZWZpbmUgbW1pb3diKCkgd21iKCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZS5oCmluZGV4IDQ2MTdiYTYuLmQzYjQwNDQ5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcGlwZS5oCkBAIC0zNSw5ICszNSw5IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCi0jZGVmaW5lIElQSVBFX0FSQ0hfU1RSSU5HICAgICAiMS4xMS0wMCIKKyNkZWZpbmUgSVBJUEVfQVJDSF9TVFJJTkcgICAgICIxLjEyLTAwIgogI2RlZmluZSBJUElQRV9NQUpPUl9OVU1CRVIgICAgMQotI2RlZmluZSBJUElQRV9NSU5PUl9OVU1CRVIgICAgMTEKKyNkZWZpbmUgSVBJUEVfTUlOT1JfTlVNQkVSICAgIDEyCiAjZGVmaW5lIElQSVBFX1BBVENIX05VTUJFUiAgICAwCiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMjQsMTYgKzEyNCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lwaXBlX2xvY2tfcm9vdCh2b2lkKQotewotCXNldF9iaXQoSVBJUEVfU1lOQ0RFRkVSX0ZMQUcsICZpcGlwZV9yb290X2NwdWRvbV92YXIoc3RhdHVzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lwaXBlX3VubG9ja19yb290KHZvaWQpCi17Ci0JY2xlYXJfYml0KElQSVBFX1NZTkNERUZFUl9GTEFHLCAmaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykpOwotfQotCiB2b2lkIF9faXBpcGVfZW5hYmxlX3BpcGVsaW5lKHZvaWQpOwogCiAjZGVmaW5lIF9faXBpcGVfaG9va19jcml0aWNhbF9pcGkoaXBkKSBkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lwaXBlX2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGVfYmFzZS5oCmluZGV4IDQ5MDA5OGYuLjAwNDA5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGVfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXBpcGVfYmFzZS5oCkBAIC01MSwyMyArNTEsMTUgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pcGlwZV9yb290X3N0YXR1czsgLyogQWxpYXMgdG8gaXBpcGVfcm9vdF9jcHVkb21fdmFyKHN0YXR1cykgKi8KIAotI2RlZmluZSBfX2lwaXBlX3N0YWxsX3Jvb3QoKQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnAgPSAmX19pcGlwZV9yb290X3N0YXR1czsJXAotCQlzZXRfYml0KDAsIHApOwkJCQkJCVwKLQl9IHdoaWxlICgwKQordm9pZCBfX2lwaXBlX3N0YWxsX3Jvb3Qodm9pZCk7CiAKLSNkZWZpbmUgX19pcGlwZV90ZXN0X2FuZF9zdGFsbF9yb290KCkJCQkJCVwKLQkoewkJCQkJCQkJXAotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwID0gJl9faXBpcGVfcm9vdF9zdGF0dXM7CVwKLQkJdGVzdF9hbmRfc2V0X2JpdCgwLCBwKTsJCQkJCVwKLQl9KQordW5zaWduZWQgbG9uZyBfX2lwaXBlX3Rlc3RfYW5kX3N0YWxsX3Jvb3Qodm9pZCk7CiAKLSNkZWZpbmUgX19pcGlwZV90ZXN0X3Jvb3QoKQkJCQkJXAotCSh7CQkJCQkJCVwKLQkJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9ICZfX2lwaXBlX3Jvb3Rfc3RhdHVzOwlcCi0JCXRlc3RfYml0KDAsIHApOwkJCQkJXAotCX0pCit1bnNpZ25lZCBsb25nIF9faXBpcGVfdGVzdF9yb290KHZvaWQpOworCit2b2lkIF9faXBpcGVfbG9ja19yb290KHZvaWQpOworCit2b2lkIF9faXBpcGVfdW5sb2NrX3Jvb3Qodm9pZCk7CiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAppbmRleCA5YjE5YTE5Li44MTNhMWFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBJUEUKIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaXBpcGVfYmFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwaXBlX3RyYWNlLmg+CiAKQEAgLTQ5LDEyICs1MCwxMiBAQAogCQliYXJyaWVyKCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKLXsKLQliYXJyaWVyKCk7Ci0JaXBpcGVfY2hlY2tfY29udGV4dChpcGlwZV9yb290X2RvbWFpbik7Ci0JX19pcGlwZV91bnN0YWxsX3Jvb3QoKTsKLX0KKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9lbmFibGUoKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJYmFycmllcigpOwkJCQlcCisJCWlwaXBlX2NoZWNrX2NvbnRleHQoaXBpcGVfcm9vdF9kb21haW4pOwlcCisJCV9faXBpcGVfdW5zdGFsbF9yb290KCk7CQkJXAorCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3NfcHRyKHgpCQkJCQlcCiAJZG8gewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9rZ2RiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaAppbmRleCBjOGIyNTZkLi44NjUxYWZlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaApAQCAtMTAsOSArMTAsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAKLS8qIGdkYiBsb2NrcyAqLwotI2RlZmluZSBLR0RCX01BWF9OT19DUFVTIDgKLQogLyoKICAqIEJVRk1BWCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGluYm91bmQvb3V0Ym91bmQgYnVmZmVycy4KICAqIEF0IGxlYXN0IE5VTVJFR0JZVEVTKjIgYXJlIG5lZWRlZCBmb3IgcmVnaXN0ZXIgcGFja2V0cy4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbWVtX2luaXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbWVtX2luaXQuaAppbmRleCA0MTc5ZTMyLi43YzhmZTgzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21lbV9pbml0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tZW1faW5pdC5oCkBAIC0yOTUsMTU2ICsyOTUsMyBAQAogI2Vsc2UKICNkZWZpbmUgUExMX0JZUEFTUyAgICAgICAwCiAjZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKkN1cnJlbnRseSBOb3QgQmVpbmcgVXNlZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19GTEFTSF9TUEVFRF9CV0FUKSAmJiBcCi1kZWZpbmVkKENPTkZJR19GTEFTSF9TUEVFRF9CUkFUKSAmJiBcCi1kZWZpbmVkKENPTkZJR19GTEFTSF9TUEVFRF9CSFQpICYmIFwKLWRlZmluZWQoQ09ORklHX0ZMQVNIX1NQRUVEX0JTVCkgJiYgXAotZGVmaW5lZChDT05GSUdfRkxBU0hfU1BFRURfQlRUKQotCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCAgKChDT05GSUdfRkxBU0hfU1BFRURfQldBVCAqIDQpIC8gKDQwMDAwMDAwMDAgLyBDT05GSUdfU0NMS19IWikpICsgMQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTF9SQVQgICgoQ09ORklHX0ZMQVNIX1NQRUVEX0JSQVQgKiA0KSAvICg0MDAwMDAwMDAwIC8gQ09ORklHX1NDTEtfSFopKSArIDEKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVExfSFQgICAoKENPTkZJR19GTEFTSF9TUEVFRF9CSFQgICogNCkgLyAoNDAwMDAwMDAwMCAvIENPTkZJR19TQ0xLX0haKSkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVExfU1QgICAoKENPTkZJR19GTEFTSF9TUEVFRF9CU1QgICogNCkgLyAoNDAwMDAwMDAwMCAvIENPTkZJR19TQ0xLX0haKSkgKyAxCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMX1RUICAgKChDT05GSUdfRkxBU0hfU1BFRURfQlRUICAqIDQpIC8gKDQwMDAwMDAwMDAgLyBDT05GSUdfU0NMS19IWikpICsgMQotCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1RUID4gMykKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1RUICAgQjBUVF80Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfVFQgPT0gMykKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1RUICAgQjBUVF8zCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfVFQgPT0gMikKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1RUICAgQjBUVF8yCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfVFQgPCAyKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfVFQgICBCMFRUXzEKLSNlbmRpZgotCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1NUID4gMykKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1NUICAgQjBTVF80Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfU1QgPT0gMykKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1NUICAgQjBTVF8zCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfU1QgPT0gMikKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1NUICAgQjBTVF8yCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfU1QgPCAyKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfU1QgICBCMFNUXzEKLSNlbmRpZgotCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX0hUID4gMikKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX0hUICAgQjBIVF8zCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfSFQgPT0gMikKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX0hUICAgQjBIVF8yCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfSFQgPT0gMSkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX0hUICAgQjBIVF8xCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfSFQgPT0gMCAmJiBDT05GSUdfRkxBU0hfU1BFRURfQkhUID09IDApCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9IVCAgIEIwSFRfMAotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX0hUID09IDAgJiYgQ09ORklHX0ZMQVNIX1NQRUVEX0JIVCAhPSAwKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfSFQgICBCMEhUXzEKLSNlbmRpZgotCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCA+IDE0KQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfV0FUICBCMFdBVF8xNQotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCA9PSAxNCkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1dBVCAgQjBXQVRfMTQKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9XQVQgPT0gMTMpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9XQVQgIEIwV0FUXzEzCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfV0FUID09IDEyKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfV0FUICBCMFdBVF8xMgotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCA9PSAxMSkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1dBVCAgQjBXQVRfMTEKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9XQVQgPT0gMTApCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9XQVQgIEIwV0FUXzEwCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfV0FUID09IDkpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9XQVQgIEIwV0FUXzkKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9XQVQgPT0gOCkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1dBVCAgQjBXQVRfOAotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCA9PSA3KQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfV0FUICBCMFdBVF83Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfV0FUID09IDYpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9XQVQgIEIwV0FUXzYKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9XQVQgPT0gNSkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1dBVCAgQjBXQVRfNQotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCA9PSA0KQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfV0FUICBCMFdBVF80Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfV0FUID09IDMpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9XQVQgIEIwV0FUXzMKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9XQVQgPT0gMikKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1dBVCAgQjBXQVRfMgotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1dBVCA9PSAxKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfV0FUICBCMFdBVF8xCi0jZW5kaWYKLQotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9SQVQgPiAxNCkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1JBVCAgQjBSQVRfMTUKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9SQVQgPT0gMTQpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9SQVQgIEIwUkFUXzE0Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfUkFUID09IDEzKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfUkFUICBCMFJBVF8xMwotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1JBVCA9PSAxMikKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1JBVCAgQjBSQVRfMTIKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9SQVQgPT0gMTEpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9SQVQgIEIwUkFUXzExCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfUkFUID09IDEwKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfUkFUICBCMFJBVF8xMAotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1JBVCA9PSA5KQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfUkFUICBCMFJBVF85Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfUkFUID09IDgpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9SQVQgIEIwUkFUXzgKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9SQVQgPT0gNykKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1JBVCAgQjBSQVRfNwotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1JBVCA9PSA2KQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfUkFUICBCMFJBVF82Ci0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfUkFUID09IDUpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9SQVQgIEIwUkFUXzUKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9SQVQgPT0gNCkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1JBVCAgQjBSQVRfNAotI2VuZGlmCi0jaWYgKGZsYXNoX0VCSVVfQU1CQ1RMX1JBVCA9PSAzKQotI2RlZmluZSBmbGFzaF9FQklVX0FNQkNUTDBfUkFUICBCMFJBVF8zCi0jZW5kaWYKLSNpZiAoZmxhc2hfRUJJVV9BTUJDVExfUkFUID09IDIpCi0jZGVmaW5lIGZsYXNoX0VCSVVfQU1CQ1RMMF9SQVQgIEIwUkFUXzIKLSNlbmRpZgotI2lmIChmbGFzaF9FQklVX0FNQkNUTF9SQVQgPT0gMSkKLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwX1JBVCAgQjBSQVRfMQotI2VuZGlmCi0KLSNkZWZpbmUgZmxhc2hfRUJJVV9BTUJDVEwwICBcCi0JKGZsYXNoX0VCSVVfQU1CQ1RMMF9XQVQgfCBmbGFzaF9FQklVX0FNQkNUTDBfUkFUIHwgZmxhc2hfRUJJVV9BTUJDVEwwX0hUIHwgXAotCSBmbGFzaF9FQklVX0FNQkNUTDBfU1QgfCBmbGFzaF9FQklVX0FNQkNUTDBfVFQgfCBDT05GSUdfRkxBU0hfU1BFRURfUkRZRU4pCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA0YTNiZTM3Li5hZThlZjRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC02Niw4ICs2Niw4IEBACiAKICNkZWZpbmUgYWN0aXZhdGVfbW0ocHJldiwgbmV4dCkgc3dpdGNoX21tKHByZXYsIG5leHQsIE5VTEwpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSwKLQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSwKKwkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKICNpZmRlZiBDT05GSUdfTVBVCiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTk1LDcgKzk1LDI0IEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19JUElQRQorI2RlZmluZSBsb2NrX21tX3N3aXRjaChmbGFncykJbG9jYWxfaXJxX3NhdmVfaHdfY29uZChmbGFncykKKyNkZWZpbmUgdW5sb2NrX21tX3N3aXRjaChmbGFncykJbG9jYWxfaXJxX3Jlc3RvcmVfaHdfY29uZChmbGFncykKKyNlbHNlCisjZGVmaW5lIGxvY2tfbW1fc3dpdGNoKGZsYWdzKQlkbyB7ICh2b2lkKShmbGFncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVubG9ja19tbV9zd2l0Y2goZmxhZ3MpCWRvIHsgKHZvaWQpKGZsYWdzKTsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfSVBJUEUgKi8KKwogI2lmZGVmIENPTkZJR19NUFUKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKKwkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NrX21tX3N3aXRjaChmbGFncyk7CisJX19zd2l0Y2hfbW0ocHJldiwgbmV4dCwgdHNrKTsKKwl1bmxvY2tfbW1fc3dpdGNoKGZsYWdzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHByb3RlY3RfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0xMjgsNiArMTQ1LDEyIEBACiAJCXNldF9tYXNrX2RjcGxicyhtbS0+Y29udGV4dC5wYWdlX3J3eF9tYXNrLCBjcHUpOwogCX0KIH0KKyNlbHNlIC8qICFDT05GSUdfTVBVICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCV9fc3dpdGNoX21tKHByZXYsIG5leHQsIHRzayk7Cit9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKQEAgLTE3Myw0ICsxOTYsMTAgQEAKICNlbmRpZgogfQogCisjZGVmaW5lIGlwaXBlX21tX3N3aXRjaF9wcm90ZWN0KGZsYWdzKQkJXAorCWxvY2FsX2lycV9zYXZlX2h3X2NvbmQoZmxhZ3MpCisKKyNkZWZpbmUgaXBpcGVfbW1fc3dpdGNoX3VucHJvdGVjdChmbGFncykJXAorCWxvY2FsX2lycV9yZXN0b3JlX2h3X2NvbmQoZmxhZ3MpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggOWMxY2ZmZi4uNDI4MmIxNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBfQVNNX0JGSU5fTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9CRklOX01PRFVMRV9ICiAKLSNkZWZpbmUgTU9EVUxFX1NZTUJPTF9QUkVGSVggIl8iCi0KICNkZWZpbmUgRWxmX1NoZHIgICAgICAgIEVsZjMyX1NoZHIKICNkZWZpbmUgRWxmX1N5bSAgICAgICAgIEVsZjMyX1N5bQogI2RlZmluZSBFbGZfRWhkciAgICAgICAgRWxmMzJfRWhkcgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjEyNzczNS4uOTljYWUyZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC00LDE0NSArNCwxOSBAQAogI2RlZmluZSBfQVNNX0JGSU5fUENJX0gKIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLmg+CiAKLS8qCi0gKgotICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KLSAqLwotCi0vKiBBZGRlZCBieSBDaGFuZyBKdW54aWFvICovCiAjZGVmaW5lIFBDSUJJT1NfTUlOX0lPIDB4MDAwMDEwMDAKICNkZWZpbmUgUENJQklPU19NSU5fTUVNIDB4MTAwMDAwMDAKIAotI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAgICAgICgxKQotc3RydWN0IHBjaV9vcHM7Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgd2l0aCBoYXJkd2FyZSBkZXBlbmRlbnQgaW5mb3JtYXRpb24gYW5kIGZ1bmN0aW9ucyBvZiB0aGUKLSAqIFBDSSBidXMuCi0gKi8KLXN0cnVjdCBwY2lfYnVzX2luZm8gewotCi0JLyoKLQkgKiBSZXNvdXJjZXMgb2YgdGhlIFBDSSBidXMuCi0JICovCi0Jc3RydWN0IHJlc291cmNlIG1lbV9zcGFjZTsKLQlzdHJ1Y3QgcmVzb3VyY2UgaW9fc3BhY2U7Ci0KLQkvKgotCSAqIFN5c3RlbSBkZXBlbmRlbnQgZnVuY3Rpb25zLgotCSAqLwotCXN0cnVjdCBwY2lfb3BzICpiZmluX3BjaV9vcHM7Ci0Jdm9pZCAoKmZpeHVwKSAoaW50IHBjaV9tb2RpZnkpOwotCXZvaWQgKCpjb25mX2RldmljZSkgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldmljZV9mbik7Ci19OwotCi0jZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0KIAkvKiBObyBzcGVjaWFsIGJ1cyBtYXN0ZXJpbmcgc2V0dXAgaGFuZGxpbmcgKi8KIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSkKIHsKLQogCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCiB9Ci1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB2b2lkICpwdHIsCi0JCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQotCQlCVUcoKTsKLQotCSAvKiByZXR1cm4gdmlydF90b19idXMocHRyKTsgKi8KLQlyZXR1cm4gKGRtYV9hZGRyX3QpIHB0cjsKLX0KLQotLyogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGRtYV9hZGRyIGFuZCBzaXplCi0gKiBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlIGNhbGwuICBBbGwKLSAqIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLgotICoKLSAqIEFmdGVyIHRoaXMgY2FsbCwgcmVhZHMgYnkgdGhlIGNwdSB0byB0aGUgYnVmZmVyIGFyZSBndWFyZW50ZWVkIHRvIHNlZQotICogd2hhdGV2ZXIgdGhlIGRldmljZSB3cm90ZSB0aGVyZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7Ci0KLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci0KLS8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKLSAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0Ci0gKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKLSAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgotICoKLSAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCi0gKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCi0gKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCi0gKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKLSAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCi0gKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKLSAqIHRoZSBzYW1lIGhlcmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCi17Ci0JaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCi0JCUJVRygpOwotCXJldHVybiBuZW50czsKLX0KLQotLyogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4KLSAqIEFnYWluLCBjcHUgcmVhZCBydWxlcyBjb25jZXJuaW5nIGNhbGxzIGhlcmUgYXJlIHRoZSBzYW1lIGFzIGZvcgotICogcGNpX3VubWFwX3NpbmdsZSgpIGFib3ZlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCi17Ci0JaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCi0JCUJVRygpOwotCi0JLyogTm90aGluZyB0byBkbyAqLwotfQotCi0vKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZQotICogc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIuCi0gKgotICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQotICogYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQotICogbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZQotICogbmV4dCBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHRoZQotICogZGV2aWNlIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICBpbnQgZGlyZWN0aW9uKQotewotCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQotCQlCVUcoKTsKLQotCS8qIE5vdGhpbmcgdG8gZG8gKi8KLX0KLQotLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzZXQgb2Ygc3RyZWFtaW5nCi0gKiBtb2RlIERNQSB0cmFuc2xhdGlvbnMgYWZ0ZXIgYSB0cmFuc2Zlci4KLSAqCi0gKiBUaGUgc2FtZSBhcyBwY2lfZG1hX3N5bmNfc2luZ2xlIGJ1dCBmb3IgYSBzY2F0dGVyLWdhdGhlciBsaXN0LAotICogc2FtZSBydWxlcyBhbmQgdXNhZ2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJICAgaW50IGRpcmVjdGlvbikKLXsKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7Ci0KLQkvKiBOb3RoaW5nIHRvIGRvICovCi19CiAKICNlbmRpZgkJCQkvKiBfQVNNX0JGSU5fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDI3MjkwYzkuLmIzM2E0NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtODksOSArODksOSBAQAogI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCiAjZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMJLyogcHRyYWNlIHNpZ25hbCAgKi8KIAotI2RlZmluZSBQVFJBQ0VfR0VURkRQSUMgICAgICAgICAgIDMxCi0jZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19FWEVDICAgICAgMAotI2RlZmluZSBQVFJBQ0VfR0VURkRQSUNfSU5URVJQICAgIDEKKyNkZWZpbmUgUFRSQUNFX0dFVEZEUElDICAgICAgICAgICAzMQkvKiBnZXQgdGhlIEVMRiBmZHBpYyBsb2FkbWFwIGFkZHJlc3MgKi8KKyNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0VYRUMgICAgICAgMAkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgZXhlY3V0YWJsZSBsb2FkbWFwICovCisjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19JTlRFUlAgICAgIDEJLyogW2FkZHJdIHJlcXVlc3QgdGhlIGludGVycHJldGVyIGxvYWRtYXAgKi8KIAogI2RlZmluZSBQU19TICAoMHgwMDAyKQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggMWY1MzgxZi4uNDJmNmM1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMTMsMTAgKzEzLDE4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBfcmFtc3RhcnQsIF9yYW1lbmQsIF9yYW1iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kLCBwaHlzaWNhbF9tZW1fZW5kOwogCi1leHRlcm4gY2hhciBfc3RleHRfbDFbXSwgX2V0ZXh0X2wxW10sIF9zZGF0YV9sMVtdLCBfZWRhdGFfbDFbXSwgX3Nic3NfbDFbXSwKLQlfZWJzc19sMVtdLCBfbDFfbG1hX3N0YXJ0W10sIF9zZGF0YV9iX2wxW10sIF9zYnNzX2JfbDFbXSwgX2Vic3NfYl9sMVtdLAotCV9zdGV4dF9sMltdLCBfZXRleHRfbDJbXSwgX3NkYXRhX2wyW10sIF9lZGF0YV9sMltdLCBfc2Jzc19sMltdLAotCV9lYnNzX2wyW10sIF9sMl9sbWFfc3RhcnRbXTsKKy8qCisgKiBUaGUgd2VhayBtYXJraW5ncyBvbiB0aGUgbGVuZ3RocyBtaWdodCBzZWVtIHdlaXJkLCBidXQgdGhpcyBpcyByZXF1aXJlZAorICogaW4gb3JkZXIgdG8gbWFrZSBnY2MgYWNjZXB0IHRoZSBmYWN0IHRoYXQgdGhlc2UgbWF5IGFjdHVhbGx5IGhhdmUgYSB2YWx1ZQorICogb2YgMCAoc2luY2UgdGhleSBhcmVuJ3QgYWN0dWFsbHkgYWRkcmVzc2VzLCBidXQgc2l6ZXMgb2Ygc2VjdGlvbnMpLgorICovCitleHRlcm4gY2hhciBfc3RleHRfbDFbXSwgX2V0ZXh0X2wxW10sIF90ZXh0X2wxX2xtYVtdLCBfX3dlYWsgX3RleHRfbDFfbGVuW107CitleHRlcm4gY2hhciBfc2RhdGFfbDFbXSwgX2VkYXRhX2wxW10sIF9zYnNzX2wxW10sIF9lYnNzX2wxW10sCisJX2RhdGFfbDFfbG1hW10sIF9fd2VhayBfZGF0YV9sMV9sZW5bXTsKK2V4dGVybiBjaGFyIF9zZGF0YV9iX2wxW10sIF9lZGF0YV9iX2wxW10sIF9zYnNzX2JfbDFbXSwgX2Vic3NfYl9sMVtdLAorCV9kYXRhX2JfbDFfbG1hW10sIF9fd2VhayBfZGF0YV9iX2wxX2xlbltdOworZXh0ZXJuIGNoYXIgX3N0ZXh0X2wyW10sIF9ldGV4dF9sMltdLCBfc2RhdGFfbDJbXSwgX2VkYXRhX2wyW10sCisJX3Nic3NfbDJbXSwgX2Vic3NfbDJbXSwgX2wyX2xtYVtdLCBfX3dlYWsgX2wyX2xlbltdOwogCiAjaW5jbHVkZSA8YXNtL21lbV9tYXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGIwYzdmMGUuLjE5NDJjY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE3LDg0ICsxNyw4NCBAQAogYXNtbGlua2FnZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOwogYXNtbGlua2FnZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7CiBhc21saW5rYWdlIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKLWFzbWxpbmthZ2Ugdm9pZCBfX3Jhd19yZWFkX2xvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKLWFzbWxpbmthZ2UgaW50IF9fcmF3X3JlYWRfdHJ5bG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOwotYXNtbGlua2FnZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Ci1hc21saW5rYWdlIHZvaWQgX19yYXdfd3JpdGVfbG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOwotYXNtbGlua2FnZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOwotYXNtbGlua2FnZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOworYXNtbGlua2FnZSB2b2lkIGFyY2hfcmVhZF9sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7Cithc21saW5rYWdlIGludCBhcmNoX3JlYWRfdHJ5bG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOworYXNtbGlua2FnZSB2b2lkIGFyY2hfcmVhZF91bmxvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKK2FzbWxpbmthZ2Ugdm9pZCBhcmNoX3dyaXRlX2xvY2tfYXNtKHZvbGF0aWxlIGludCAqcHRyKTsKK2FzbWxpbmthZ2UgaW50IGFyY2hfd3JpdGVfdHJ5bG9ja19hc20odm9sYXRpbGUgaW50ICpwdHIpOworYXNtbGlua2FnZSB2b2lkIGFyY2hfd3JpdGVfdW5sb2NrX2FzbSh2b2xhdGlsZSBpbnQgKnB0cik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJcmV0dXJuIF9fcmF3X3NwaW5faXNfbG9ja2VkX2FzbSgmbG9jay0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCV9fcmF3X3NwaW5fbG9ja19hc20oJmxvY2stPmxvY2spOwogfQogCi0jZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3NwaW5fbG9jayhsb2NrKQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJcmV0dXJuIF9fcmF3X3NwaW5fdHJ5bG9ja19hc20oJmxvY2stPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJX19yYXdfc3Bpbl91bmxvY2tfYXNtKCZsb2NrLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpCisJd2hpbGUgKGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykpCiAJCWNwdV9yZWxheCgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfY2FuX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJcmV0dXJuIF9fcmF3X3VuY2FjaGVkX2ZldGNoX2FzbSgmcnctPmxvY2spID4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfY2FuX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfd3JpdGVfY2FuX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJcmV0dXJuIF9fcmF3X3VuY2FjaGVkX2ZldGNoX2FzbSgmcnctPmxvY2spID09IFJXX0xPQ0tfQklBUzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCV9fcmF3X3JlYWRfbG9ja19hc20oJnJ3LT5sb2NrKTsKKwlhcmNoX3JlYWRfbG9ja19hc20oJnJ3LT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlyZXR1cm4gX19yYXdfcmVhZF90cnlsb2NrX2FzbSgmcnctPmxvY2spOworCXJldHVybiBhcmNoX3JlYWRfdHJ5bG9ja19hc20oJnJ3LT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlfX3Jhd19yZWFkX3VubG9ja19hc20oJnJ3LT5sb2NrKTsKKwlhcmNoX3JlYWRfdW5sb2NrX2FzbSgmcnctPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlfX3Jhd193cml0ZV9sb2NrX2FzbSgmcnctPmxvY2spOworCWFyY2hfd3JpdGVfbG9ja19hc20oJnJ3LT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCXJldHVybiBfX3Jhd193cml0ZV90cnlsb2NrX2FzbSgmcnctPmxvY2spOworCXJldHVybiBhcmNoX3dyaXRlX3RyeWxvY2tfYXNtKCZydy0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKLQlfX3Jhd193cml0ZV91bmxvY2tfYXNtKCZydy0+bG9jayk7CisJYXJjaF93cml0ZV91bmxvY2tfYXNtKCZydy0+bG9jayk7CiB9CiAKLSNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spICAJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9zcGluX3JlbGF4KGxvY2spICAJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBiZTc1NzYyLi4xYTMzNjA4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC0xNSwxNCArMTUsMTQgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKK30gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQJCXsgUldfTE9DS19CSUFTIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgUldfTE9DS19CSUFTIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYWZiM2E4Ni4uYTQwZDkzNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTAzLDExICsxMDMsMTMgQEAKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk1CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX0ZSRUVaRSAgICAgICAgICAgICAgNiAgICAgICAvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogI2RlZmluZSBUSUZfSVJRX1NZTkMgICAgICAgICAgICA3ICAgICAgIC8qIHN5bmMgcGlwZWxpbmUgc3RhZ2UgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUgICAgICAgOCAgICAgICAvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9GUkVFWkUgICAgICAgICAgICAgKDE8PFRJRl9GUkVFWkUpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmgKaW5kZXggNjA5YWQzYy4uZGMwYWE1NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9PTgogCisjZGVmaW5lIHRyYWNlX2J1ZmZlcl9pbml0KCkgYmZpbl93cml0ZV9UQlVGQ1RMKEJGSU5fVFJBQ0VfSU5JVCkKKwogI2RlZmluZSB0cmFjZV9idWZmZXJfc2F2ZSh4KSBcCiAJZG8geyBcCiAJCSh4KSA9IGJmaW5fcmVhZF9UQlVGQ1RMKCk7IFwKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggYzAzYjg1My4uMWMwZDE5MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTE3LDkgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaWZkZWYgQ09ORklHX0FDQ0VTU19DSEVDSwotIyBpbmNsdWRlIDxhc20vYmZpbi1nbG9iYWwuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjZGVmaW5lIGdldF9kcygpICAgICAgICAoS0VSTkVMX0RTKQogI2RlZmluZSBnZXRfZnMoKSAgICAgICAgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDc3OWJlMDIuLjIyODg2Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzg4LDggKzM4OCw5IEBACiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzY3CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzY4CiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTM2OQorI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkzNzAKIAotI2RlZmluZSBfX05SX3N5c2NhbGwJCTM3MAorI2RlZmluZSBfX05SX3N5c2NhbGwJCTM3MQogI2RlZmluZSBOUl9zeXNjYWxscwkJX19OUl9zeXNjYWxsCiAKIC8qIE9sZCBvcHRpb25hbCBzdHVmZiBubyBvbmUgYWN0dWFsbHkgdXNlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwppbmRleCAzOTQ2YWZmLi45MjRjMDAyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwpAQCAtMzcsOSArMzcsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIERNQSBDb250cm9sbGVyXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRE1BX0NIQU5ORUxTOyBpKyspIHsKLQkJZG1hX2NoW2ldLmNoYW5fc3RhdHVzID0gRE1BX0NIQU5ORUxfRlJFRTsKKwkJYXRvbWljX3NldCgmZG1hX2NoW2ldLmNoYW5fc3RhdHVzLCAwKTsKIAkJZG1hX2NoW2ldLnJlZ3MgPSBkbWFfaW9fYmFzZV9hZGRyW2ldOwotCQltdXRleF9pbml0KCYoZG1hX2NoW2ldLmRtYWxvY2spKTsKIAl9CiAJLyogTWFyayBNRU1ETUEgQ2hhbm5lbCAwIGFzIHJlcXVlc3RlZCBzaW5jZSB3ZSdyZSB1c2luZyBpdCBpbnRlcm5hbGx5ICovCiAJcmVxdWVzdF9kbWEoQ0hfTUVNX1NUUkVBTTBfREVTVCwgIkJsYWNrZmluIGRtYV9tZW1jcHkiKTsKQEAgLTYwLDcgKzU5LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRE1BX0NIQU5ORUxTOyArK2kpCi0JCWlmIChkbWFfY2hbaV0uY2hhbl9zdGF0dXMgIT0gRE1BX0NIQU5ORUxfRlJFRSkKKwkJaWYgKGRtYV9jaGFubmVsX2FjdGl2ZShpKSkKIAkJCXNlcV9wcmludGYobSwgIiUyZDogJXNcbiIsIGksIGRtYV9jaFtpXS5kZXZpY2VfaWQpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDcsMjAgKzEwNiwxMSBAQAogCX0KICNlbmRpZgogCi0JbXV0ZXhfbG9jaygmKGRtYV9jaFtjaGFubmVsXS5kbWFsb2NrKSk7Ci0KLQlpZiAoKGRtYV9jaFtjaGFubmVsXS5jaGFuX3N0YXR1cyA9PSBETUFfQ0hBTk5FTF9SRVFVRVNURUQpCi0JICAgIHx8IChkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMgPT0gRE1BX0NIQU5ORUxfRU5BQkxFRCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCYoZG1hX2NoW2NoYW5uZWxdLmRtYWxvY2spKTsKKwlpZiAoYXRvbWljX2NtcHhjaGcoJmRtYV9jaFtjaGFubmVsXS5jaGFuX3N0YXR1cywgMCwgMSkpIHsKIAkJcHJfZGVidWcoIkRNQSBDSEFOTkVMIElOIFVTRSAgXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKLQl9IGVsc2UgewotCQlkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMgPSBETUFfQ0hBTk5FTF9SRVFVRVNURUQ7Ci0JCXByX2RlYnVnKCJETUEgQ0hBTk5FTCBJUyBBTExPQ0FURUQgIFxuIik7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCYoZG1hX2NoW2NoYW5uZWxdLmRtYWxvY2spKTsKLQogI2lmZGVmIENPTkZJR19CRjU0eAogCWlmIChjaGFubmVsID49IENIX1VBUlQyX1JYICYmIGNoYW5uZWwgPD0gQ0hfVUFSVDNfVFgpIHsKIAkJdW5zaWduZWQgaW50IHBlcl9tYXA7CkBAIC0xNDgsMjEgKzEzOCwyMCBAQAogCiBpbnQgc2V0X2RtYV9jYWxsYmFjayh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgaXJxX2hhbmRsZXJfdCBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIHsKLQlCVUdfT04oY2hhbm5lbCA+PSBNQVhfRE1BX0NIQU5ORUxTIHx8Ci0JCQlkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMgPT0gRE1BX0NIQU5ORUxfRlJFRSk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaXJxOwogCi0JaWYgKGNhbGxiYWNrICE9IE5VTEwpIHsKLQkJaW50IHJldDsKLQkJdW5zaWduZWQgaW50IGlycSA9IGNoYW5uZWwyaXJxKGNoYW5uZWwpOworCUJVR19PTihjaGFubmVsID49IE1BWF9ETUFfQ0hBTk5FTFMgfHwgIWNhbGxiYWNrIHx8CisJCQkhYXRvbWljX3JlYWQoJmRtYV9jaFtjaGFubmVsXS5jaGFuX3N0YXR1cykpOwogCi0JCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgY2FsbGJhY2ssIElSUUZfRElTQUJMRUQsCi0JCQlkbWFfY2hbY2hhbm5lbF0uZGV2aWNlX2lkLCBkYXRhKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJaXJxID0gY2hhbm5lbDJpcnEoY2hhbm5lbCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBjYWxsYmFjaywgMCwgZG1hX2NoW2NoYW5uZWxdLmRldmljZV9pZCwgZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCQlkbWFfY2hbY2hhbm5lbF0uaXJxID0gaXJxOwotCQlkbWFfY2hbY2hhbm5lbF0uZGF0YSA9IGRhdGE7Ci0JfQorCWRtYV9jaFtjaGFubmVsXS5pcnEgPSBpcnE7CisJZG1hX2NoW2NoYW5uZWxdLmRhdGEgPSBkYXRhOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9kbWFfY2FsbGJhY2spOwpAQCAtMTg0LDcgKzE3Myw3IEBACiB7CiAJcHJfZGVidWcoImZyZWVkbWEoKSA6IEJFR0lOIFxuIik7CiAJQlVHX09OKGNoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMUyB8fAotCQkJZG1hX2NoW2NoYW5uZWxdLmNoYW5fc3RhdHVzID09IERNQV9DSEFOTkVMX0ZSRUUpOworCQkJIWF0b21pY19yZWFkKCZkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMpKTsKIAogCS8qIEhhbHQgdGhlIERNQSAqLwogCWRpc2FibGVfZG1hKGNoYW5uZWwpOwpAQCAtMTk0LDkgKzE4Myw3IEBACiAJCWZyZWVfaXJxKGRtYV9jaFtjaGFubmVsXS5pcnEsIGRtYV9jaFtjaGFubmVsXS5kYXRhKTsKIAogCS8qIENsZWFyIHRoZSBETUEgVmFyaWFibGUgaW4gdGhlIENoYW5uZWwgKi8KLQltdXRleF9sb2NrKCYoZG1hX2NoW2NoYW5uZWxdLmRtYWxvY2spKTsKLQlkbWFfY2hbY2hhbm5lbF0uY2hhbl9zdGF0dXMgPSBETUFfQ0hBTk5FTF9GUkVFOwotCW11dGV4X3VubG9jaygmKGRtYV9jaFtjaGFubmVsXS5kbWFsb2NrKSk7CisJYXRvbWljX3NldCgmZG1hX2NoW2NoYW5uZWxdLmNoYW5fc3RhdHVzLCAwKTsKIAogCXByX2RlYnVnKCJmcmVlZG1hKCkgOiBFTkQgXG4iKTsKIH0KQEAgLTIxMCwxMyArMTk3LDE0IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9TVVNQRU5EX0NIQU5ORUxTOyArK2kpIHsKLQkJaWYgKGRtYV9jaFtpXS5jaGFuX3N0YXR1cyA9PSBETUFfQ0hBTk5FTF9FTkFCTEVEKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTk5FTFM7ICsraSkgeworCQlpZiAoZG1hX2NoW2ldLnJlZ3MtPmNmZyAmIERNQUVOKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkRNQSBDaGFubmVsICVkIGZhaWxlZCB0byBzdXNwZW5kXG4iLCBpKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlkbWFfY2hbaV0uc2F2ZWRfcGVyaXBoZXJhbF9tYXAgPSBkbWFfY2hbaV0ucmVncy0+cGVyaXBoZXJhbF9tYXA7CisJCWlmIChpIDwgTUFYX0RNQV9TVVNQRU5EX0NIQU5ORUxTKQorCQkJZG1hX2NoW2ldLnNhdmVkX3BlcmlwaGVyYWxfbWFwID0gZG1hX2NoW2ldLnJlZ3MtPnBlcmlwaGVyYWxfbWFwOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwppbmRleCAyMjcwNWVlLi5hMTc0NTk2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwpAQCAtMTAwLDYgKzEwMCwxMiBAQAogfTsKICMgZW5kaWYKIAorI2VsaWYgZGVmaW5lZChCRjUzOF9GQU1JTFkpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgKiBjb25zdCBwb3J0X2ZlcltdID0geworCSh1bnNpZ25lZCBzaG9ydCAqKSBQT1JUQ0lPX0ZFUiwKKwkodW5zaWduZWQgc2hvcnQgKikgUE9SVERJT19GRVIsCisJKHVuc2lnbmVkIHNob3J0ICopIFBPUlRFSU9fRkVSLAorfTsKICNlbmRpZgogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRfZ3Bpb19tYXBbR1BJT19CQU5LX05VTV07CkBAIC0xNjMsNiArMTY5LDI3IEBACiAKIHN0YXRpYyB2b2lkIHBvcnRfc2V0dXAodW5zaWduZWQgZ3BpbywgdW5zaWduZWQgc2hvcnQgdXNhZ2UpCiB7CisjaWYgZGVmaW5lZChCRjUzOF9GQU1JTFkpCisJLyoKKwkgKiBCRjUzOC85IFBvcnQgQyxEIGFuZCBFIGFyZSBzcGVjaWFsLgorCSAqIEludmVydGVkIFBPUlRfRkVSIHBvbGFyaXR5IG9uIENERSBhbmQgbm8gUE9SRl9GRVIgb24gRgorCSAqIFJlZ3VsYXIgUE9SVCBGIEdQSU9zIGFyZSBoYW5kbGVkIGhlcmUsIENERSBhcmUgZXhjbHVzaXZlbHkKKwkgKiBtYW5hZ2VkIGJ5IEdQSU9MSUIKKwkgKi8KKworCWlmIChncGlvIDwgTUFYX0JMQUNLRklOX0dQSU9TIHx8IGdwaW8gPj0gTUFYX1JFU09VUkNFUykKKwkJcmV0dXJuOworCisJZ3BpbyAtPSBNQVhfQkxBQ0tGSU5fR1BJT1M7CisKKwlpZiAodXNhZ2UgPT0gR1BJT19VU0FHRSkKKwkJKnBvcnRfZmVyW2dwaW9fYmFuayhncGlvKV0gfD0gZ3Bpb19iaXQoZ3Bpbyk7CisJZWxzZQorCQkqcG9ydF9mZXJbZ3Bpb19iYW5rKGdwaW8pXSAmPSB+Z3Bpb19iaXQoZ3Bpbyk7CisJU1NZTkMoKTsKKwlyZXR1cm47CisjZW5kaWYKKwogCWlmIChjaGVja19ncGlvKGdwaW8pKQogCQlyZXR1cm47CiAKQEAgLTc2Miw2ICs3ODksOCBAQAogCWlmICghKHBlciAmIFBfREVGSU5FRCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJQlVHX09OKGlkZW50ID49IE1BWF9SRVNPVVJDRVMpOworCiAJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwogCiAJLyogSWYgYSBwaW4gY2FuIGJlIG11eGVkIGFzIGVpdGhlciBHUElPIG9yIHBlcmlwaGVyYWwsIG1ha2UKQEAgLTk3OSw2ICsxMDA4LDc2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJmaW5fZ3Bpb19mcmVlKTsKIAorI2lmZGVmIEJGSU5fU1BFQ0lBTF9HUElPX0JBTktTCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRfc3BlY2lhbF9ncGlvX21hcFtncGlvX2JhbmsoTUFYX1JFU09VUkNFUyldOworCitpbnQgYmZpbl9zcGVjaWFsX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOworCisJLyoKKwkgKiBBbGxvdyB0aGF0IHRoZSBpZGVudGljYWwgR1BJTyBjYW4KKwkgKiBiZSByZXF1ZXN0ZWQgZnJvbSB0aGUgc2FtZSBkcml2ZXIgdHdpY2UKKwkgKiBEbyBub3RoaW5nIGFuZCByZXR1cm4gLQorCSAqLworCisJaWYgKGNtcF9sYWJlbChncGlvLCBsYWJlbCkgPT0gMCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1bmxpa2VseShyZXNlcnZlZF9zcGVjaWFsX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgImJmaW4tZ3BpbzogR1BJTyAlZCBpcyBhbHJlYWR5IHJlc2VydmVkIGJ5ICVzICFcbiIsCisJCSAgICAgICBncGlvLCBnZXRfbGFiZWwoZ3BpbykpOworCisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICh1bmxpa2VseShyZXNlcnZlZF9wZXJpX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiYmZpbi1ncGlvOiBHUElPICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYXMgUGVyaXBoZXJhbCBieSAlcyAhXG4iLAorCQkgICAgICAgZ3BpbywgZ2V0X2xhYmVsKGdwaW8pKTsKKworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJlc2VydmVkX3NwZWNpYWxfZ3Bpb19tYXBbZ3Bpb19iYW5rKGdwaW8pXSB8PSBncGlvX2JpdChncGlvKTsKKwlyZXNlcnZlZF9wZXJpX21hcFtncGlvX2JhbmsoZ3BpbyldIHw9IGdwaW9fYml0KGdwaW8pOworCisJc2V0X2xhYmVsKGdwaW8sIGxhYmVsKTsKKwlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CisJcG9ydF9zZXR1cChncGlvLCBHUElPX1VTQUdFKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChiZmluX3NwZWNpYWxfZ3Bpb19yZXF1ZXN0KTsKKwordm9pZCBiZmluX3NwZWNpYWxfZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CisKKwlpZiAodW5saWtlbHkoIShyZXNlcnZlZF9zcGVjaWFsX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpKSB7CisJCWdwaW9fZXJyb3IoZ3Bpbyk7CisJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXJlc2VydmVkX3NwZWNpYWxfZ3Bpb19tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmPSB+Z3Bpb19iaXQoZ3Bpbyk7CisJcmVzZXJ2ZWRfcGVyaV9tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmPSB+Z3Bpb19iaXQoZ3Bpbyk7CisJc2V0X2xhYmVsKGdwaW8sICJmcmVlIik7CisJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChiZmluX3NwZWNpYWxfZ3Bpb19mcmVlKTsKKyNlbmRpZgorCisKIGludCBiZmluX2dwaW9faXJxX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCmluZGV4IGI1MmMxZjguLjhkNDJiOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwpAQCAtOTIsNiArOTIsNiBAQAogCQlpY3BsYl90YmxbY3B1XVtpX2krK10uZGF0YSA9IDA7CiB9CiAKLXZvaWQgZ2VuZXJhdGVfY3BsYl90YWJsZXNfYWxsKHZvaWQpCit2b2lkIF9faW5pdCBnZW5lcmF0ZV9jcGxiX3RhYmxlc19hbGwodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwppbmRleCA2OWUwZTUzLi45MzBjMDFjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCkBAIC0xMTMsMTEgKzExMywxMSBAQAogCQlhZGRyID0gTDJfU1RBUlQ7CiAJCWRfZGF0YSA9IEwyX0RNRU1PUlk7CiAJfSBlbHNlIGlmIChhZGRyID49IHBoeXNpY2FsX21lbV9lbmQpIHsKLQkJaWYgKGFkZHIgPj0gQVNZTkNfQkFOSzBfQkFTRSAmJiBhZGRyIDwgQVNZTkNfQkFOSzNfQkFTRSArIEFTWU5DX0JBTkszX1NJWkUKLQkJICAgICYmIChzdGF0dXMgJiBGQVVMVF9VU0VSU1VQVikpIHsKLQkJCWFkZHIgJj0gfjB4M2ZmZmZmOworCQlpZiAoYWRkciA+PSBBU1lOQ19CQU5LMF9CQVNFICYmIGFkZHIgPCBBU1lOQ19CQU5LM19CQVNFICsgQVNZTkNfQkFOSzNfU0laRSkgeworCQkJYWRkciAmPSB+KDQgKiAxMDI0ICogMTAyNCAtIDEpOwogCQkJZF9kYXRhICY9IH5QQUdFX1NJWkVfNEtCOwogCQkJZF9kYXRhIHw9IFBBR0VfU0laRV80TUI7CisJCQlkX2RhdGEgfD0gQ1BMQl9VU0VSX1JEIHwgQ1BMQl9VU0VSX1dSOwogCQl9IGVsc2UgaWYgKGFkZHIgPj0gQk9PVF9ST01fU1RBUlQgJiYgYWRkciA8IEJPT1RfUk9NX1NUQVJUICsgQk9PVF9ST01fTEVOR1RICiAJCSAgICAmJiAoc3RhdHVzICYgKEZBVUxUX1JXIHwgRkFVTFRfVVNFUlNVUFYpKSA9PSBGQVVMVF9VU0VSU1VQVikgewogCQkJYWRkciAmPSB+KDEgKiAxMDI0ICogMTAyNCAtIDEpOwpAQCAtMjAzLDcgKzIwMywxMiBAQAogCQlhZGRyID0gTDJfU1RBUlQ7CiAJCWlfZGF0YSA9IEwyX0lNRU1PUlk7CiAJfSBlbHNlIGlmIChhZGRyID49IHBoeXNpY2FsX21lbV9lbmQpIHsKLQkJaWYgKGFkZHIgPj0gQk9PVF9ST01fU1RBUlQgJiYgYWRkciA8IEJPT1RfUk9NX1NUQVJUICsgQk9PVF9ST01fTEVOR1RICisJCWlmIChhZGRyID49IEFTWU5DX0JBTkswX0JBU0UgJiYgYWRkciA8IEFTWU5DX0JBTkszX0JBU0UgKyBBU1lOQ19CQU5LM19TSVpFKSB7CisJCQlhZGRyICY9IH4oNCAqIDEwMjQgKiAxMDI0IC0gMSk7CisJCQlpX2RhdGEgJj0gflBBR0VfU0laRV80S0I7CisJCQlpX2RhdGEgfD0gUEFHRV9TSVpFXzRNQjsKKwkJCWlfZGF0YSB8PSBDUExCX1VTRVJfUkQ7CisJCX0gZWxzZSBpZiAoYWRkciA+PSBCT09UX1JPTV9TVEFSVCAmJiBhZGRyIDwgQk9PVF9ST01fU1RBUlQgKyBCT09UX1JPTV9MRU5HVEgKIAkJICAgICYmIChzdGF0dXMgJiBGQVVMVF9VU0VSU1VQVikpIHsKIAkJCWFkZHIgJj0gfigxICogMTAyNCAqIDEwMjQgLSAxKTsKIAkJCWlfZGF0YSAmPSB+UEFHRV9TSVpFXzRLQjsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCBmZDlhMmYzLi4yODJhNzkxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCkBAIC04OSwxNSArODksMjUgQEAKIAogdm9pZCBfX2luaXQgZ2VuZXJhdGVfY3BsYl90YWJsZXNfYWxsKHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyB1bmNhY2hlZF9lbmQ7CiAJaW50IGlfZCwgaV9pOwogCiAJaV9kID0gMDsKIAkvKiBOb3JtYWwgUkFNLCBpbmNsdWRpbmcgTVREIEZTLiAgKi8KICNpZmRlZiBDT05GSUdfTVREX1VDTElOVVgKLQlkY3BsYl9ib3VuZHNbaV9kXS5lYWRkciA9IG1lbW9yeV9tdGRfc3RhcnQgKyBtdGRfc2l6ZTsKKwl1bmNhY2hlZF9lbmQgPSBtZW1vcnlfbXRkX3N0YXJ0ICsgbXRkX3NpemU7CiAjZWxzZQotCWRjcGxiX2JvdW5kc1tpX2RdLmVhZGRyID0gbWVtb3J5X2VuZDsKKwl1bmNhY2hlZF9lbmQgPSBtZW1vcnlfZW5kOwogI2VuZGlmCisJLyoKKwkgKiBpZiBETUEgdW5jYWNoZWQgaXMgbGVzcyB0aGFuIDFNQiwgbWFyayB0aGUgMU1CIGNodW5rIGFzIHVuY2FjaGVkCisJICogc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHVzZSA0a0IgcGFnZXMgYW5kIGNhdXNlIENQTEIgdGhyYXNoaW5nCisJICovCisJaWYgKChETUFfVU5DQUNIRURfUkVHSU9OID49IDEgKiAxMDI0ICogMTAyNCkgfHwgIURNQV9VTkNBQ0hFRF9SRUdJT04gfHwKKwkgICAgKChfcmFtZW5kIC0gdW5jYWNoZWRfZW5kKSA+PSAxICogMTAyNCAqIDEwMjQpKQorCQlkY3BsYl9ib3VuZHNbaV9kXS5lYWRkciA9IHVuY2FjaGVkX2VuZDsKKwllbHNlCisJCWRjcGxiX2JvdW5kc1tpX2RdLmVhZGRyID0gdW5jYWNoZWRfZW5kICYgfigxICogMTAyNCAqIDEwMjQpOwogCWRjcGxiX2JvdW5kc1tpX2QrK10uZGF0YSA9IFNEUkFNX0RHRU5FUklDOwogCS8qIERNQSB1bmNhY2hlZCByZWdpb24uICAqLwogCWlmIChETUFfVU5DQUNIRURfUkVHSU9OKSB7CkBAIC0xMzUsMTggKzE0NSwxNSBAQAogCiAJaV9pID0gMDsKIAkvKiBOb3JtYWwgUkFNLCBpbmNsdWRpbmcgTVREIEZTLiAgKi8KLSNpZmRlZiBDT05GSUdfTVREX1VDTElOVVgKLQlpY3BsYl9ib3VuZHNbaV9pXS5lYWRkciA9IG1lbW9yeV9tdGRfc3RhcnQgKyBtdGRfc2l6ZTsKLSNlbHNlCi0JaWNwbGJfYm91bmRzW2lfaV0uZWFkZHIgPSBtZW1vcnlfZW5kOwotI2VuZGlmCisJaWNwbGJfYm91bmRzW2lfaV0uZWFkZHIgPSB1bmNhY2hlZF9lbmQ7CiAJaWNwbGJfYm91bmRzW2lfaSsrXS5kYXRhID0gU0RSQU1fSUdFTkVSSUM7Ci0JLyogRE1BIHVuY2FjaGVkIHJlZ2lvbi4gICovCi0JaWYgKERNQV9VTkNBQ0hFRF9SRUdJT04pIHsKLQkJaWNwbGJfYm91bmRzW2lfaV0uZWFkZHIgPSBfcmFtZW5kOwotCQlpY3BsYl9ib3VuZHNbaV9pKytdLmRhdGEgPSAwOwotCX0KIAlpZiAoX3JhbWVuZCAhPSBwaHlzaWNhbF9tZW1fZW5kKSB7CisJCS8qIERNQSB1bmNhY2hlZCByZWdpb24uICAqLworCQlpZiAoRE1BX1VOQ0FDSEVEX1JFR0lPTikgeworCQkJLyogTm9ybWFsbHkgdGhpcyBob2xlIGlzIGNhdWdodCBieSB0aGUgYXN5bmMgYmVsb3cuICAqLworCQkJaWNwbGJfYm91bmRzW2lfaV0uZWFkZHIgPSBfcmFtZW5kOworCQkJaWNwbGJfYm91bmRzW2lfaSsrXS5kYXRhID0gMDsKKwkJfQogCQkvKiBSZXNlcnZlZCBtZW1vcnkuICAqLwogCQlpY3BsYl9ib3VuZHNbaV9pXS5lYWRkciA9IHBoeXNpY2FsX21lbV9lbmQ7CiAJCWljcGxiX2JvdW5kc1tpX2krK10uZGF0YSA9IChyZXNlcnZlZF9tZW1faWNhY2hlX29uID8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCmluZGV4IGU3NGU3NGQuLmU5MzdmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwpAQCAtNywzMCArNywyNSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vYmZpbi1nbG9iYWwuaD4KIAogc3RhdGljIHNwaW5sb2NrX3QgZG1hX3BhZ2VfbG9jazsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKmRtYV9wYWdlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmRtYV9wYWdlOwogc3RhdGljIHVuc2lnbmVkIGludCBkbWFfcGFnZXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9zaXplOwogc3RhdGljIHVuc2lnbmVkIGludCBkbWFfaW5pdGlhbGl6ZWQ7CiAKLXZvaWQgZG1hX2FsbG9jX2luaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCBkbWFfYWxsb2NfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzcGluX2xvY2tfaW5pdCgmZG1hX3BhZ2VfbG9jayk7CiAJZG1hX2luaXRpYWxpemVkID0gMDsKIAotCWRtYV9wYWdlID0gKHVuc2lnbmVkIGludCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlkbWFfcGFnZSA9ICh1bnNpZ25lZCBsb25nICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCW1lbXNldChkbWFfcGFnZSwgMCwgUEFHRV9TSVpFKTsKIAlkbWFfYmFzZSA9IFBBR0VfQUxJR04oc3RhcnQpOwogCWRtYV9zaXplID0gUEFHRV9BTElHTihlbmQpIC0gUEFHRV9BTElHTihzdGFydCk7CkBAIC01OCwxMCArNTMsMTEgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3BhZ2VfbG9jaywgZmxhZ3MpOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYV9wYWdlczspIHsKLQkJaWYgKGRtYV9wYWdlW2krK10gPT0gMCkgeworCQlpZiAodGVzdF9iaXQoaSsrLCBkbWFfcGFnZSkgPT0gMCkgewogCQkJaWYgKCsrY291bnQgPT0gcGFnZXMpIHsKIAkJCQl3aGlsZSAoY291bnQtLSkKLQkJCQkJZG1hX3BhZ2VbLS1pXSA9IDE7CisJCQkJCV9fc2V0X2JpdCgtLWksIGRtYV9wYWdlKTsKKwogCQkJCXJldCA9IGRtYV9iYXNlICsgKGkgPDwgUEFHRV9TSElGVCk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04NCwxNCArODAsMTQgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX3BhZ2VfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IHBhZ2U7IGkgPCBwYWdlICsgcGFnZXM7IGkrKykgewotCQlkbWFfcGFnZVtpXSA9IDA7Ci0JfQorCWZvciAoaSA9IHBhZ2U7IGkgPCBwYWdlICsgcGFnZXM7IGkrKykKKwkJX19jbGVhcl9iaXQoaSwgZG1hX3BhZ2UpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3BhZ2VfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSBkbWFfYWRkcl90ICogZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQorCQkJIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKIHsKIAl2b2lkICpyZXQ7CiAKQEAgLTExNSwyMSArMTExLDE0IEBACiBFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2NvaGVyZW50KTsKIAogLyoKLSAqIER1bW15IGZ1bmN0aW9ucyBkZWZpbmVkIGZvciBzb21lIGV4aXN0aW5nIGRyaXZlcnMKKyAqIFN0cmVhbWluZyBETUEgbWFwcGluZ3MKICAqLwotCi1kbWFfYWRkcl90Ci1kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgX19kbWFfc3luYyhkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7Ci0KLQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylwdHIsCi0JCQkodW5zaWduZWQgbG9uZylwdHIgKyBzaXplKTsKLQotCXJldHVybiAoZG1hX2FkZHJfdCkgcHRyOworCV9kbWFfc3luYyhhZGRyLCBzaXplLCBkaXIpOwogfQotRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NpbmdsZSk7CitFWFBPUlRfU1lNQk9MKF9fZG1hX3N5bmMpOwogCiBpbnQKIGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCkBAIC0xMzcsMzAgKzEyNiwyMyBAQAogewogCWludCBpOwogCi0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2crKykgewogCQlzZy0+ZG1hX2FkZHJlc3MgPSAoZG1hX2FkZHJfdCkgc2dfdmlydChzZyk7Ci0KLQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Uoc2dfZG1hX2FkZHJlc3Moc2cpLAotCQkJCQlzZ19kbWFfYWRkcmVzcyhzZykgKwotCQkJCQlzZ19kbWFfbGVuKHNnKSk7CisJCV9fZG1hX3N5bmMoc2dfZG1hX2FkZHJlc3Moc2cpLCBzZ19kbWFfbGVuKHNnKSwgZGlyZWN0aW9uKTsKIAl9CiAKIAlyZXR1cm4gbmVudHM7CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOwogCi12b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9zaW5nbGUpOworCWludCBpOwogCi12b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCWludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrLCBzZysrKSB7CisJCXNnLT5kbWFfYWRkcmVzcyA9IChkbWFfYWRkcl90KSBzZ192aXJ0KHNnKTsKKwkJX19kbWFfc3luYyhzZ19kbWFfYWRkcmVzcyhzZyksIHNnX2RtYV9sZW4oc2cpLCBkaXJlY3Rpb24pOworCX0KIH0KLUVYUE9SVF9TWU1CT0woZG1hX3VubWFwX3NnKTsKK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9ncHRpbWVycy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZ3B0aW1lcnMuYwppbmRleCA3MjgxYTkxLi5jZGJlMDc1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9ncHRpbWVycy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2dwdGltZXJzLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogI2VuZGlmCiB9OwogCi12b2lkIHNldF9ncHRpbWVyX3B3aWR0aChpbnQgdGltZXJfaWQsIHVpbnQzMl90IHZhbHVlKQordm9pZCBzZXRfZ3B0aW1lcl9wd2lkdGgodW5zaWduZWQgaW50IHRpbWVyX2lkLCB1aW50MzJfdCB2YWx1ZSkKIHsKIAl0YXNzZXJ0KHRpbWVyX2lkIDwgTUFYX0JMQUNLRklOX0dQVElNRVJTKTsKIAl0aW1lcl9yZWdzW3RpbWVyX2lkXS0+d2lkdGggPSB2YWx1ZTsKQEAgLTE0NSwxNCArMTQ1LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9ncHRpbWVyX3B3aWR0aCk7CiAKLXVpbnQzMl90IGdldF9ncHRpbWVyX3B3aWR0aChpbnQgdGltZXJfaWQpCit1aW50MzJfdCBnZXRfZ3B0aW1lcl9wd2lkdGgodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCXJldHVybiB0aW1lcl9yZWdzW3RpbWVyX2lkXS0+d2lkdGg7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF9ncHRpbWVyX3B3aWR0aCk7CiAKLXZvaWQgc2V0X2dwdGltZXJfcGVyaW9kKGludCB0aW1lcl9pZCwgdWludDMyX3QgcGVyaW9kKQordm9pZCBzZXRfZ3B0aW1lcl9wZXJpb2QodW5zaWduZWQgaW50IHRpbWVyX2lkLCB1aW50MzJfdCBwZXJpb2QpCiB7CiAJdGFzc2VydCh0aW1lcl9pZCA8IE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyk7CiAJdGltZXJfcmVnc1t0aW1lcl9pZF0tPnBlcmlvZCA9IHBlcmlvZDsKQEAgLTE2MCwyOCArMTYwLDI4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9ncHRpbWVyX3BlcmlvZCk7CiAKLXVpbnQzMl90IGdldF9ncHRpbWVyX3BlcmlvZChpbnQgdGltZXJfaWQpCit1aW50MzJfdCBnZXRfZ3B0aW1lcl9wZXJpb2QodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCXJldHVybiB0aW1lcl9yZWdzW3RpbWVyX2lkXS0+cGVyaW9kOwogfQogRVhQT1JUX1NZTUJPTChnZXRfZ3B0aW1lcl9wZXJpb2QpOwogCi11aW50MzJfdCBnZXRfZ3B0aW1lcl9jb3VudChpbnQgdGltZXJfaWQpCit1aW50MzJfdCBnZXRfZ3B0aW1lcl9jb3VudCh1bnNpZ25lZCBpbnQgdGltZXJfaWQpCiB7CiAJdGFzc2VydCh0aW1lcl9pZCA8IE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyk7CiAJcmV0dXJuIHRpbWVyX3JlZ3NbdGltZXJfaWRdLT5jb3VudGVyOwogfQogRVhQT1JUX1NZTUJPTChnZXRfZ3B0aW1lcl9jb3VudCk7CiAKLXVpbnQzMl90IGdldF9ncHRpbWVyX3N0YXR1cyhpbnQgZ3JvdXApCit1aW50MzJfdCBnZXRfZ3B0aW1lcl9zdGF0dXModW5zaWduZWQgaW50IGdyb3VwKQogewogCXRhc3NlcnQoZ3JvdXAgPCBCRklOX1RJTUVSX05VTV9HUk9VUCk7CiAJcmV0dXJuIGdyb3VwX3JlZ3NbZ3JvdXBdLT5zdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF9ncHRpbWVyX3N0YXR1cyk7CiAKLXZvaWQgc2V0X2dwdGltZXJfc3RhdHVzKGludCBncm91cCwgdWludDMyX3QgdmFsdWUpCit2b2lkIHNldF9ncHRpbWVyX3N0YXR1cyh1bnNpZ25lZCBpbnQgZ3JvdXAsIHVpbnQzMl90IHZhbHVlKQogewogCXRhc3NlcnQoZ3JvdXAgPCBCRklOX1RJTUVSX05VTV9HUk9VUCk7CiAJZ3JvdXBfcmVnc1tncm91cF0tPnN0YXR1cyA9IHZhbHVlOwpAQCAtMTg5LDQyICsxODksNDIgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2V0X2dwdGltZXJfc3RhdHVzKTsKIAotaW50IGdldF9ncHRpbWVyX2ludHIoaW50IHRpbWVyX2lkKQoraW50IGdldF9ncHRpbWVyX2ludHIodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCXJldHVybiAhIShncm91cF9yZWdzW0JGSU5fVElNRVJfT0NURVQodGltZXJfaWQpXS0+c3RhdHVzICYgdGltaWxfbWFza1t0aW1lcl9pZF0pOwogfQogRVhQT1JUX1NZTUJPTChnZXRfZ3B0aW1lcl9pbnRyKTsKIAotdm9pZCBjbGVhcl9ncHRpbWVyX2ludHIoaW50IHRpbWVyX2lkKQordm9pZCBjbGVhcl9ncHRpbWVyX2ludHIodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCWdyb3VwX3JlZ3NbQkZJTl9USU1FUl9PQ1RFVCh0aW1lcl9pZCldLT5zdGF0dXMgPSB0aW1pbF9tYXNrW3RpbWVyX2lkXTsKIH0KIEVYUE9SVF9TWU1CT0woY2xlYXJfZ3B0aW1lcl9pbnRyKTsKIAotaW50IGdldF9ncHRpbWVyX292ZXIoaW50IHRpbWVyX2lkKQoraW50IGdldF9ncHRpbWVyX292ZXIodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCXJldHVybiAhIShncm91cF9yZWdzW0JGSU5fVElNRVJfT0NURVQodGltZXJfaWQpXS0+c3RhdHVzICYgdG92Zl9tYXNrW3RpbWVyX2lkXSk7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF9ncHRpbWVyX292ZXIpOwogCi12b2lkIGNsZWFyX2dwdGltZXJfb3ZlcihpbnQgdGltZXJfaWQpCit2b2lkIGNsZWFyX2dwdGltZXJfb3Zlcih1bnNpZ25lZCBpbnQgdGltZXJfaWQpCiB7CiAJdGFzc2VydCh0aW1lcl9pZCA8IE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyk7CiAJZ3JvdXBfcmVnc1tCRklOX1RJTUVSX09DVEVUKHRpbWVyX2lkKV0tPnN0YXR1cyA9IHRvdmZfbWFza1t0aW1lcl9pZF07CiB9CiBFWFBPUlRfU1lNQk9MKGNsZWFyX2dwdGltZXJfb3Zlcik7CiAKLWludCBnZXRfZ3B0aW1lcl9ydW4oaW50IHRpbWVyX2lkKQoraW50IGdldF9ncHRpbWVyX3J1bih1bnNpZ25lZCBpbnQgdGltZXJfaWQpCiB7CiAJdGFzc2VydCh0aW1lcl9pZCA8IE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyk7CiAJcmV0dXJuICEhKGdyb3VwX3JlZ3NbQkZJTl9USU1FUl9PQ1RFVCh0aW1lcl9pZCldLT5zdGF0dXMgJiB0cnVuX21hc2tbdGltZXJfaWRdKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X2dwdGltZXJfcnVuKTsKIAotdm9pZCBzZXRfZ3B0aW1lcl9jb25maWcoaW50IHRpbWVyX2lkLCB1aW50MTZfdCBjb25maWcpCit2b2lkIHNldF9ncHRpbWVyX2NvbmZpZyh1bnNpZ25lZCBpbnQgdGltZXJfaWQsIHVpbnQxNl90IGNvbmZpZykKIHsKIAl0YXNzZXJ0KHRpbWVyX2lkIDwgTUFYX0JMQUNLRklOX0dQVElNRVJTKTsKIAl0aW1lcl9yZWdzW3RpbWVyX2lkXS0+Y29uZmlnID0gY29uZmlnOwpAQCAtMjMyLDcgKzIzMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9ncHRpbWVyX2NvbmZpZyk7CiAKLXVpbnQxNl90IGdldF9ncHRpbWVyX2NvbmZpZyhpbnQgdGltZXJfaWQpCit1aW50MTZfdCBnZXRfZ3B0aW1lcl9jb25maWcodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCXJldHVybiB0aW1lcl9yZWdzW3RpbWVyX2lkXS0+Y29uZmlnOwpAQCAtMjgwLDcgKzI4MCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfZ3B0aW1lcnNfc3luYyk7CiAKLXZvaWQgc2V0X2dwdGltZXJfcHVsc2VfaGkoaW50IHRpbWVyX2lkKQordm9pZCBzZXRfZ3B0aW1lcl9wdWxzZV9oaSh1bnNpZ25lZCBpbnQgdGltZXJfaWQpCiB7CiAJdGFzc2VydCh0aW1lcl9pZCA8IE1BWF9CTEFDS0ZJTl9HUFRJTUVSUyk7CiAJdGltZXJfcmVnc1t0aW1lcl9pZF0tPmNvbmZpZyB8PSBUSU1FUl9QVUxTRV9ISTsKQEAgLTI4OCw3ICsyODgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChzZXRfZ3B0aW1lcl9wdWxzZV9oaSk7CiAKLXZvaWQgY2xlYXJfZ3B0aW1lcl9wdWxzZV9oaShpbnQgdGltZXJfaWQpCit2b2lkIGNsZWFyX2dwdGltZXJfcHVsc2VfaGkodW5zaWduZWQgaW50IHRpbWVyX2lkKQogewogCXRhc3NlcnQodGltZXJfaWQgPCBNQVhfQkxBQ0tGSU5fR1BUSU1FUlMpOwogCXRpbWVyX3JlZ3NbdGltZXJfaWRdLT5jb25maWcgJj0gflRJTUVSX1BVTFNFX0hJOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXBpcGUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lwaXBlLmMKaW5kZXggNWQ3MzgyMy4uYTc3MzA3YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXBpcGUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcGlwZS5jCkBAIC0zMzUsMyArMzM1LDcwIEBACiAJX19jbGVhcl9iaXQoSVBJUEVfU1RBTExfRkxBRywgJmlwaXBlX3Jvb3RfY3B1ZG9tX3ZhcihzdGF0dXMpKTsKIAliZmluX3N0aShiZmluX2lycV9mbGFncyk7CiB9CisKKy8qCisgKiBXZSBjb3VsZCB1c2Ugc3RhbmRhcmQgYXRvbWljIGJpdG9wcyBpbiB0aGUgZm9sbG93aW5nIHJvb3Qgc3RhdHVzCisgKiBtYW5pcHVsYXRpb24gcm91dGluZXMsIGJ1dCBsZXQncyBwcmVwYXJlIGZvciBTTVAgc3VwcG9ydCBpbiB0aGUKKyAqIHNhbWUgbW92ZSwgcHJldmVudGluZyBDUFUgbWlncmF0aW9uIGFzIHJlcXVpcmVkLgorICovCit2b2lkIF9faXBpcGVfc3RhbGxfcm9vdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgKnAsIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOworCXAgPSAmX19pcGlwZV9yb290X3N0YXR1czsKKwlfX3NldF9iaXQoSVBJUEVfU1RBTExfRkxBRywgcCk7CisJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfX2lwaXBlX3N0YWxsX3Jvb3QpOworCit1bnNpZ25lZCBsb25nIF9faXBpcGVfdGVzdF9hbmRfc3RhbGxfcm9vdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgKnAsIGZsYWdzOworCWludCB4OworCisJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOworCXAgPSAmX19pcGlwZV9yb290X3N0YXR1czsKKwl4ID0gX190ZXN0X2FuZF9zZXRfYml0KElQSVBFX1NUQUxMX0ZMQUcsIHApOworCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKKworCXJldHVybiB4OworfQorRVhQT1JUX1NZTUJPTChfX2lwaXBlX3Rlc3RfYW5kX3N0YWxsX3Jvb3QpOworCit1bnNpZ25lZCBsb25nIF9faXBpcGVfdGVzdF9yb290KHZvaWQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB4OworCisJbG9jYWxfaXJxX3NhdmVfaHdfc21wKGZsYWdzKTsKKwlwID0gJl9faXBpcGVfcm9vdF9zdGF0dXM7CisJeCA9IHRlc3RfYml0KElQSVBFX1NUQUxMX0ZMQUcsIHApOworCWxvY2FsX2lycV9yZXN0b3JlX2h3X3NtcChmbGFncyk7CisKKwlyZXR1cm4geDsKK30KK0VYUE9SVF9TWU1CT0woX19pcGlwZV90ZXN0X3Jvb3QpOworCit2b2lkIF9faXBpcGVfbG9ja19yb290KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyAqcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CisJcCA9ICZfX2lwaXBlX3Jvb3Rfc3RhdHVzOworCV9fc2V0X2JpdChJUElQRV9TWU5DREVGRVJfRkxBRywgcCk7CisJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfX2lwaXBlX2xvY2tfcm9vdCk7CisKK3ZvaWQgX19pcGlwZV91bmxvY2tfcm9vdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgKnAsIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOworCXAgPSAmX19pcGlwZV9yb290X3N0YXR1czsKKwlfX2NsZWFyX2JpdChJUElQRV9TWU5DREVGRVJfRkxBRywgcCk7CisJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfX2lwaXBlX3VubG9ja19yb290KTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCBkYjlmOWM5Li42NGNmZjU0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgYmFkX2lycV9kZXNjID0gewogCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCi0JLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzYy0+bG9jayksCisJLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoYmFkX2lycV9kZXNjLmxvY2spLAogfTsKIAogI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCkBAIC0zOSw3ICszOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChpIDwgTlJfSVJRUykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwogCQlpZiAoIWFjdGlvbikKIAkJCWdvdG8gc2tpcDsKQEAgLTUzLDcgKzUzLDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKICBza2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKIAkJc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCmluZGV4IGNjZTc5ZDAuLmYxMDM2YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKQEAgLTI0LDE2ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCi0vKiBQdXQgdGhlIGVycm9yIGNvZGUgaGVyZSBqdXN0IGluIGNhc2UgdGhlIHVzZXIgY2FyZXMuICAqLwotaW50IGdkYl9iZmluX2VycmNvZGU7Ci0vKiBMaWtld2lzZSwgdGhlIHZlY3RvciBudW1iZXIgaGVyZSAoc2luY2UgR0RCIG9ubHkgZ2V0cyB0aGUgc2lnbmFsCi0gICBudW1iZXIgdGhyb3VnaCB0aGUgdXN1YWwgbWVhbnMsIGFuZCB0aGF0J3Mgbm90IHZlcnkgc3BlY2lmaWMpLiAgKi8KLWludCBnZGJfYmZpbl92ZWN0b3IgPSAtMTsKLQotI2lmIEtHREJfTUFYX05PX0NQVVMgIT0gOAotI2Vycm9yIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBzbGF2ZWNwdWxvY2tzCi0jZW5kaWYKLQogdm9pZCBwdF9yZWdzX3RvX2dkYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlnZGJfcmVnc1tCRklOX1IwXSA9IHJlZ3MtPnIwOwpAQCAtMzY5LDEzICszNTksNiBAQAogfQogI2VuZGlmCiAKLXZvaWQga2dkYl9wb3N0X3ByaW1hcnlfY29kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVWZWN0b3IsIGludCBlcnJfY29kZSkKLXsKLQkvKiBNYXN0ZXIgcHJvY2Vzc29yIGlzIGNvbXBsZXRlbHkgaW4gdGhlIGRlYnVnZ2VyICovCi0JZ2RiX2JmaW5fdmVjdG9yID0gZVZlY3RvcjsKLQlnZGJfYmZpbl9lcnJjb2RlID0gZXJyX2NvZGU7Ci19Ci0KIGludCBrZ2RiX2FyY2hfaGFuZGxlX2V4Y2VwdGlvbihpbnQgdmVjdG9yLCBpbnQgc2lnbm8sCiAJCQkgICAgICAgaW50IGVycl9jb2RlLCBjaGFyICpyZW1jb21faW5fYnVmZmVyLAogCQkJICAgICAgIGNoYXIgKnJlbWNvbV9vdXRfYnVmZmVyLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYl90ZXN0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiX3Rlc3QuYwppbmRleCA1OWZjNDJkLi45YTRiMDc1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiX3Rlc3QuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiX3Rlc3QuYwpAQCAtMTcsOCArMTcsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAKKy8qIFN5bWJvbHMgYXJlIGhlcmUgZm9yIGtnZGIgdGVzdCB0byBwb2tlIGRpcmVjdGx5ICovCiBzdGF0aWMgY2hhciBjbWRsaW5lWzI1Nl07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsZW47CitzdGF0aWMgc2l6ZV90IGxlbjsKIAogI2lmbmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IG51bTEgX19hdHRyaWJ1dGVfXygobDFfZGF0YSkpOwpAQCAtMjcsMTEgKzI4LDEwIEBACiAKIHZvaWQga2dkYl9sMV90ZXN0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgIkwxKGJlZm9yZSBjaGFuZ2UpIDogZGF0YSB2YXJpYWJsZSBhZGRyID0gMHglcCwgZGF0YSB2YWx1ZSBpcyAlZFxuIiwgJm51bTEsIG51bTEpOwotCXByaW50ayhLRVJOX0FMRVJUICJMMSA6IGNvZGUgZnVuY3Rpb24gYWRkciA9IDB4JXBcbiIsIGtnZGJfbDFfdGVzdCk7Ci0JbnVtMSA9IG51bTEgKyAxMCA7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgIkwxKGFmdGVyIGNoYW5nZSkgOiBkYXRhIHZhcmlhYmxlIGFkZHIgPSAweCVwLCBkYXRhIHZhbHVlIGlzICVkXG4iLCAmbnVtMSwgbnVtMSk7Ci0JcmV0dXJuIDsKKwlwcl9hbGVydCgiTDEoYmVmb3JlIGNoYW5nZSkgOiBkYXRhIHZhcmlhYmxlIGFkZHIgPSAweCVwLCBkYXRhIHZhbHVlIGlzICVkXG4iLCAmbnVtMSwgbnVtMSk7CisJcHJfYWxlcnQoIkwxIDogY29kZSBmdW5jdGlvbiBhZGRyID0gMHglcFxuIiwga2dkYl9sMV90ZXN0KTsKKwludW0xID0gbnVtMSArIDEwOworCXByX2FsZXJ0KCJMMShhZnRlciBjaGFuZ2UpIDogZGF0YSB2YXJpYWJsZSBhZGRyID0gMHglcCwgZGF0YSB2YWx1ZSBpcyAlZFxuIiwgJm51bTEsIG51bTEpOwogfQogI2VuZGlmCiAKQEAgLTQyLDExICs0MiwxMCBAQAogCiB2b2lkIGtnZGJfbDJfdGVzdCh2b2lkKQogewotCXByaW50ayhLRVJOX0FMRVJUICJMMihiZWZvcmUgY2hhbmdlKSA6IGRhdGEgdmFyaWFibGUgYWRkciA9IDB4JXAsIGRhdGEgdmFsdWUgaXMgJWRcbiIsICZudW0yLCBudW0yKTsKLQlwcmludGsoS0VSTl9BTEVSVCAiTDIgOiBjb2RlIGZ1bmN0aW9uIGFkZHIgPSAweCVwXG4iLCBrZ2RiX2wyX3Rlc3QpOwotCW51bTIgPSBudW0yICsgMjAgOwotCXByaW50ayhLRVJOX0FMRVJUICJMMihhZnRlciBjaGFuZ2UpIDogZGF0YSB2YXJpYWJsZSBhZGRyID0gMHglcCwgZGF0YSB2YWx1ZSBpcyAlZFxuIiwgJm51bTIsIG51bTIpOwotCXJldHVybiA7CisJcHJfYWxlcnQoIkwyKGJlZm9yZSBjaGFuZ2UpIDogZGF0YSB2YXJpYWJsZSBhZGRyID0gMHglcCwgZGF0YSB2YWx1ZSBpcyAlZFxuIiwgJm51bTIsIG51bTIpOworCXByX2FsZXJ0KCJMMiA6IGNvZGUgZnVuY3Rpb24gYWRkciA9IDB4JXBcbiIsIGtnZGJfbDJfdGVzdCk7CisJbnVtMiA9IG51bTIgKyAyMDsKKwlwcl9hbGVydCgiTDIoYWZ0ZXIgY2hhbmdlKSA6IGRhdGEgdmFyaWFibGUgYWRkciA9IDB4JXAsIGRhdGEgdmFsdWUgaXMgJWRcbiIsICZudW0yLCBudW0yKTsKIH0KIAogI2VuZGlmCkBAIC01NCwxMiArNTMsMTQgQEAKIAogaW50IGtnZGJfdGVzdChjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgY291bnQsIGludCB6KQogewotCXByaW50ayhLRVJOX0FMRVJUICJrZ2RiIG5hbWUoJWQpOiAlcywgJWQsICVkXG4iLCBsZW4sIG5hbWUsIGNvdW50LCB6KTsKKwlwcl9hbGVydCgia2dkYiBuYW1lKCVkKTogJXMsICVkLCAlZFxuIiwgbGVuLCBuYW1lLCBjb3VudCwgeik7CiAJY291bnQgPSB6OwogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCB0ZXN0X3Byb2Nfb3V0cHV0KGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90CitrZ2RiX3Rlc3RfcHJvY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlrZ2RiX3Rlc3QoImhlbGxvIHdvcmxkISIsIDEyLCAweDU1LCAweDEwKTsKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNzIsNDkgKzczLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVzdF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdAora2dkYl90ZXN0X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewotCWludCBsZW47Ci0KLQlsZW4gPSB0ZXN0X3Byb2Nfb3V0cHV0KHBhZ2UpOwotCWlmIChsZW4gPD0gb2ZmK2NvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCWxlbiAtPSBvZmY7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IHRlc3Rfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQotewotCWlmIChjb3VudCA+PSAyNTYpCi0JCWxlbiA9IDI1NTsKLQllbHNlCi0JCWxlbiA9IGNvdW50OwotCisJbGVuID0gbWluX3Qoc2l6ZV90LCAyNTUsIGNvdW50KTsKIAltZW1jcHkoY21kbGluZSwgYnVmZmVyLCBjb3VudCk7CiAJY21kbGluZVtsZW5dID0gMDsKIAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtnZGJfdGVzdF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgID0ga2dkYl90ZXN0X3Byb2NfcmVhZCwKKwkud3JpdGUgPSBrZ2RiX3Rlc3RfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGtnZGJ0ZXN0X2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCi0JZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgia2dkYnRlc3QiLCAwLCBOVUxMKTsKKwllbnRyeSA9IHByb2NfY3JlYXRlKCJrZ2RidGVzdCIsIDAsIE5VTEwsICZrZ2RiX3Rlc3RfcHJvY19mb3BzKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllbnRyeS0+cmVhZF9wcm9jID0gdGVzdF9yZWFkX3Byb2M7Ci0JZW50cnktPndyaXRlX3Byb2MgPSB0ZXN0X3dyaXRlX3Byb2M7Ci0JZW50cnktPmRhdGEgPSBOVUxMOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwppbmRleCA0NTg3NjQyLi5iNTZiMGU0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNTgsOSArMjU4LDEyIEBACiAJaW50IF9fdXNlciAqdXAwID0gKGludCBfX3VzZXIgKilyZWdzLT5wMDsKIAogCXN3aXRjaCAocmVncy0+cGMpIHsKKwlkZWZhdWx0OgorCQkvKiBub3QgaW4gbWlkZGxlIG9mIGFuIGF0b21pYyBzdGVwLCBzbyByZXN1bWUgbGlrZSBub3JtYWwgKi8KKwkJcmV0dXJuOworCiAJY2FzZSBBVE9NSUNfWENIRzMyICsgMjoKIAkJcHV0X3VzZXIocmVncy0+cjEsIHVwMCk7Ci0JCXJlZ3MtPnBjID0gQVRPTUlDX1hDSEczMiArIDQ7CiAJCWJyZWFrOwogCiAJY2FzZSBBVE9NSUNfQ0FTMzIgKyAyOgpAQCAtMjY4LDcgKzI3MSw2IEBACiAJCWlmIChyZWdzLT5yMCA9PSByZWdzLT5yMSkKIAljYXNlIEFUT01JQ19DQVMzMiArIDY6CiAJCQlwdXRfdXNlcihyZWdzLT5yMiwgdXAwKTsKLQkJcmVncy0+cGMgPSBBVE9NSUNfQ0FTMzIgKyA4OwogCQlicmVhazsKIAogCWNhc2UgQVRPTUlDX0FERDMyICsgMjoKQEAgLTI3Niw3ICsyNzgsNiBAQAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFUT01JQ19BREQzMiArIDQ6CiAJCXB1dF91c2VyKHJlZ3MtPnIwLCB1cDApOwotCQlyZWdzLT5wYyA9IEFUT01JQ19BREQzMiArIDY7CiAJCWJyZWFrOwogCiAJY2FzZSBBVE9NSUNfU1VCMzIgKyAyOgpAQCAtMjg0LDcgKzI4NSw2IEBACiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVRPTUlDX1NVQjMyICsgNDoKIAkJcHV0X3VzZXIocmVncy0+cjAsIHVwMCk7Ci0JCXJlZ3MtPnBjID0gQVRPTUlDX1NVQjMyICsgNjsKIAkJYnJlYWs7CiAKIAljYXNlIEFUT01JQ19JT1IzMiArIDI6CkBAIC0yOTIsNyArMjkyLDYgQEAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBVE9NSUNfSU9SMzIgKyA0OgogCQlwdXRfdXNlcihyZWdzLT5yMCwgdXAwKTsKLQkJcmVncy0+cGMgPSBBVE9NSUNfSU9SMzIgKyA2OwogCQlicmVhazsKIAogCWNhc2UgQVRPTUlDX0FORDMyICsgMjoKQEAgLTMwMCw3ICsyOTksNiBAQAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFUT01JQ19BTkQzMiArIDQ6CiAJCXB1dF91c2VyKHJlZ3MtPnIwLCB1cDApOwotCQlyZWdzLT5wYyA9IEFUT01JQ19BTkQzMiArIDY7CiAJCWJyZWFrOwogCiAJY2FzZSBBVE9NSUNfWE9SMzIgKyAyOgpAQCAtMzA4LDkgKzMwNiwxNSBAQAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFUT01JQ19YT1IzMiArIDQ6CiAJCXB1dF91c2VyKHJlZ3MtPnIwLCB1cDApOwotCQlyZWdzLT5wYyA9IEFUT01JQ19YT1IzMiArIDY7CiAJCWJyZWFrOwogCX0KKworCS8qCisJICogV2UndmUgZmluaXNoZWQgdGhlIGF0b21pYyBzZWN0aW9uLCBhbmQgdGhlIG9ubHkgdGhpbmcgbGVmdCBmb3IKKwkgKiB1c2Vyc3BhY2UgaXMgdG8gZG8gYSBSVFMsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgaGFuZGxlIHRoYXQgdG9vCisJICogc2luY2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIFBDIGFueXdheXMuCisJICovCisJcmVncy0+cGMgPSByZWdzLT5yZXRzOwogfQogCiBzdGF0aWMgaW5saW5lCkBAIC0zMzIsMTIgKzMzNiw1OCBAQAogewogCXJldHVybiBpbl9tZW1fY29uc3Rfb2ZmKGFkZHIsIHNpemUsIDAsIGNvbnN0X2FkZHIsIGNvbnN0X3NpemUpOwogfQotI2RlZmluZSBJTl9BU1lOQyhibnVtLCBiY3RsbnVtKSBcCisjZGVmaW5lIEFTWU5DX0VOQUJMRUQoYm51bSwgYmN0bG51bSkgXAogKHsgXAotCShiZmluX3JlYWRfRUJJVV9BTUdDVEwoKSAmIDB4ZSkgPCAoKGJudW0gKyAxKSA8PCAxKSA/IC1FRkFVTFQgOiBcCi0JYmZpbl9yZWFkX0VCSVVfQU1CQ1RMIyNiY3RsbnVtKCkgJiBCIyNibnVtIyNSRFlFTiA/IC1FRkFVTFQgOiBcCi0JQkZJTl9NRU1fQUNDRVNTX0NPUkU7IFwKKwkoYmZpbl9yZWFkX0VCSVVfQU1HQ1RMKCkgJiAweGUpIDwgKChibnVtICsgMSkgPDwgMSkgPyAwIDogXAorCWJmaW5fcmVhZF9FQklVX0FNQkNUTCMjYmN0bG51bSgpICYgQiMjYm51bSMjUkRZRU4gPyAwIDogXAorCTE7IFwKIH0pCisvKgorICogV2UgY2FuJ3QgcmVhZCBFQklVIGJhbmtzIHRoYXQgYXJlbid0IGVuYWJsZWQgb3Igd2UgZW5kIHVwIGhhbmdpbmcKKyAqIG9uIHRoZSBhY2Nlc3MgdG8gdGhlIGFzeW5jIHNwYWNlLiAgTWFrZSBzdXJlIHdlIHZhbGlkYXRlIGFjY2Vzc2VzCisgKiB0aGF0IGNyb3NzIGFzeW5jIGJhbmtzIHRvby4KKyAqCTAgLSBmb3VuZCwgYnV0IHVudXNhYmxlCisgKgkxIC0gZm91bmQgJiB1c2FibGUKKyAqCTIgLSBub3QgZm91bmQKKyAqLworc3RhdGljCitpbnQgaW5fYXN5bmModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKGFkZHIgPj0gQVNZTkNfQkFOSzBfQkFTRSAmJiBhZGRyIDwgQVNZTkNfQkFOSzBfQkFTRSArIEFTWU5DX0JBTkswX1NJWkUpIHsKKwkJaWYgKCFBU1lOQ19FTkFCTEVEKDAsIDApKQorCQkJcmV0dXJuIDA7CisJCWlmIChhZGRyICsgc2l6ZSA8PSBBU1lOQ19CQU5LMF9CQVNFICsgQVNZTkNfQkFOSzBfU0laRSkKKwkJCXJldHVybiAxOworCQlzaXplIC09IEFTWU5DX0JBTkswX0JBU0UgKyBBU1lOQ19CQU5LMF9TSVpFIC0gYWRkcjsKKwkJYWRkciA9IEFTWU5DX0JBTkswX0JBU0UgKyBBU1lOQ19CQU5LMF9TSVpFOworCX0KKwlpZiAoYWRkciA+PSBBU1lOQ19CQU5LMV9CQVNFICYmIGFkZHIgPCBBU1lOQ19CQU5LMV9CQVNFICsgQVNZTkNfQkFOSzFfU0laRSkgeworCQlpZiAoIUFTWU5DX0VOQUJMRUQoMSwgMCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGFkZHIgKyBzaXplIDw9IEFTWU5DX0JBTksxX0JBU0UgKyBBU1lOQ19CQU5LMV9TSVpFKQorCQkJcmV0dXJuIDE7CisJCXNpemUgLT0gQVNZTkNfQkFOSzFfQkFTRSArIEFTWU5DX0JBTksxX1NJWkUgLSBhZGRyOworCQlhZGRyID0gQVNZTkNfQkFOSzFfQkFTRSArIEFTWU5DX0JBTksxX1NJWkU7CisJfQorCWlmIChhZGRyID49IEFTWU5DX0JBTksyX0JBU0UgJiYgYWRkciA8IEFTWU5DX0JBTksyX0JBU0UgKyBBU1lOQ19CQU5LMl9TSVpFKSB7CisJCWlmICghQVNZTkNfRU5BQkxFRCgyLCAxKSkKKwkJCXJldHVybiAwOworCQlpZiAoYWRkciArIHNpemUgPD0gQVNZTkNfQkFOSzJfQkFTRSArIEFTWU5DX0JBTksyX1NJWkUpCisJCQlyZXR1cm4gMTsKKwkJc2l6ZSAtPSBBU1lOQ19CQU5LMl9CQVNFICsgQVNZTkNfQkFOSzJfU0laRSAtIGFkZHI7CisJCWFkZHIgPSBBU1lOQ19CQU5LMl9CQVNFICsgQVNZTkNfQkFOSzJfU0laRTsKKwl9CisJaWYgKGFkZHIgPj0gQVNZTkNfQkFOSzNfQkFTRSAmJiBhZGRyIDwgQVNZTkNfQkFOSzNfQkFTRSArIEFTWU5DX0JBTkszX1NJWkUpIHsKKwkJaWYgKEFTWU5DX0VOQUJMRUQoMywgMSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGFkZHIgKyBzaXplIDw9IEFTWU5DX0JBTkszX0JBU0UgKyBBU1lOQ19CQU5LM19TSVpFKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCS8qIG5vdCB3aXRoaW4gYXN5bmMgYm91bmRzICovCisJcmV0dXJuIDI7Cit9CiAKIGludCBiZmluX21lbV9hY2Nlc3NfdHlwZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTM3NCwxNyArNDI0LDExIEBACiAJaWYgKGFkZHIgPj0gU1lTTU1SX0JBU0UpCiAJCXJldHVybiBCRklOX01FTV9BQ0NFU1NfQ09SRV9PTkxZOwogCi0JLyogV2UgY2FuJ3QgcmVhZCBFQklVIGJhbmtzIHRoYXQgYXJlbid0IGVuYWJsZWQgb3Igd2UgZW5kIHVwIGhhbmdpbmcKLQkgKiBvbiB0aGUgYWNjZXNzIHRvIHRoZSBhc3luYyBzcGFjZS4KLQkgKi8KLQlpZiAoaW5fbWVtX2NvbnN0KGFkZHIsIHNpemUsIEFTWU5DX0JBTkswX0JBU0UsIEFTWU5DX0JBTkswX1NJWkUpKQotCQlyZXR1cm4gSU5fQVNZTkMoMCwgMCk7Ci0JaWYgKGluX21lbV9jb25zdChhZGRyLCBzaXplLCBBU1lOQ19CQU5LMV9CQVNFLCBBU1lOQ19CQU5LMV9TSVpFKSkKLQkJcmV0dXJuIElOX0FTWU5DKDEsIDApOwotCWlmIChpbl9tZW1fY29uc3QoYWRkciwgc2l6ZSwgQVNZTkNfQkFOSzJfQkFTRSwgQVNZTkNfQkFOSzJfU0laRSkpCi0JCXJldHVybiBJTl9BU1lOQygyLCAxKTsKLQlpZiAoaW5fbWVtX2NvbnN0KGFkZHIsIHNpemUsIEFTWU5DX0JBTkszX0JBU0UsIEFTWU5DX0JBTkszX1NJWkUpKQotCQlyZXR1cm4gSU5fQVNZTkMoMywgMSk7CisJc3dpdGNoIChpbl9hc3luYyhhZGRyLCBzaXplKSkgeworCWNhc2UgMDogcmV0dXJuIC1FRkFVTFQ7CisJY2FzZSAxOiByZXR1cm4gQkZJTl9NRU1fQUNDRVNTX0NPUkU7CisJY2FzZSAyOiAvKiBmYWxsIHRocm91Z2ggKi87CisJfQogCiAJaWYgKGluX21lbV9jb25zdChhZGRyLCBzaXplLCBCT09UX1JPTV9TVEFSVCwgQk9PVF9ST01fTEVOR1RIKSkKIAkJcmV0dXJuIEJGSU5fTUVNX0FDQ0VTU19DT1JFOwpAQCAtNDAxLDYgKzQ0NSw4IEBACiAvKiBSZXR1cm4gMSBpZiBhY2Nlc3MgdG8gbWVtb3J5IHJhbmdlIGlzIE9LLCAwIG90aGVyd2lzZSAqLwogaW50IF9hY2Nlc3Nfb2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisJaW50IGFyZXQ7CisKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gMTsKIAkvKiBDaGVjayB0aGF0IHRoaW5ncyBkbyBub3Qgd3JhcCBhcm91bmQgKi8KQEAgLTQ1MCw2ICs0OTYsMTEgQEAKIAlpZiAoaW5fbWVtX2NvbnN0KGFkZHIsIHNpemUsIENPUkVCX0wxX0RBVEFfQl9TVEFSVCwgQ09SRUJfTDFfREFUQV9CX0xFTkdUSCkpCiAJCXJldHVybiAxOwogI2VuZGlmCisKKwlhcmV0ID0gaW5fYXN5bmMoYWRkciwgc2l6ZSk7CisJaWYgKGFyZXQgPCAyKQorCQlyZXR1cm4gYXJldDsKKwogCWlmIChpbl9tZW1fY29uc3Rfb2ZmKGFkZHIsIHNpemUsIF9lYnNzX2wyIC0gX3N0ZXh0X2wyLCBMMl9TVEFSVCwgTDJfTEVOR1RIKSkKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNTZiMGJhMS4uNjU1NjdkYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKQEAgLTMxNiwxOSArMzE2LDYgQEAKIAkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkVfT05MWToKIAkJCQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJmRhdGEsCiAJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fY29weSwgMSk7Ci0JCQkJaWYgKGNvcGllZCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKiBocm0sIHdoeSBkaWRuJ3QgdGhhdCB3b3JrIC4uLiBtYXliZSBubyBtYXBwaW5nICovCi0JCQkJaWYgKGFkZHIgPj0gRklYRURfQ09ERV9TVEFSVCAmJgotCQkJCSAgICBhZGRyICsgdG9fY29weSA8PSBGSVhFRF9DT0RFX0VORCkgewotCQkJCQljb3B5X3RvX3VzZXJfcGFnZSgwLCAwLCAwLCBwYWRkciwgJmRhdGEsIHRvX2NvcHkpOwotCQkJCQljb3BpZWQgPSB0b19jb3B5OwotCQkJCX0gZWxzZSBpZiAoYWRkciA+PSBCT09UX1JPTV9TVEFSVCkgewotCQkJCQltZW1jcHkocGFkZHIsICZkYXRhLCB0b19jb3B5KTsKLQkJCQkJY29waWVkID0gdG9fY29weTsKLQkJCQl9Ci0KIAkJCQlicmVhazsKIAkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0RNQToKIAkJCQlpZiAoc2FmZV9kbWFfbWVtY3B5KHBhZGRyLCAmZGF0YSwgdG9fY29weSkpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwppbmRleCBjMjAyYTQ0Li45NTQ0OGFlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKQEAgLTE3OCwxMCArMTc4LDEwIEBACiAKIHZvaWQgX19pbml0IGJmaW5fcmVsb2NhdGVfbDFfbWVtKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsMV9jb2RlX2xlbmd0aDsKLQl1bnNpZ25lZCBsb25nIGwxX2RhdGFfYV9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBsMV9kYXRhX2JfbGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgbDJfbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgdGV4dF9sMV9sZW4gPSAodW5zaWduZWQgbG9uZylfdGV4dF9sMV9sZW47CisJdW5zaWduZWQgbG9uZyBkYXRhX2wxX2xlbiA9ICh1bnNpZ25lZCBsb25nKV9kYXRhX2wxX2xlbjsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYl9sMV9sZW4gPSAodW5zaWduZWQgbG9uZylfZGF0YV9iX2wxX2xlbjsKKwl1bnNpZ25lZCBsb25nIGwyX2xlbiA9ICh1bnNpZ25lZCBsb25nKV9sMl9sZW47CiAKIAllYXJseV9zaGFkb3dfc3RhbXAoKTsKIApAQCAtMjAxLDMwICsyMDEsMjMgQEAKIAogCWJsYWNrZmluX2RtYV9lYXJseV9pbml0KCk7CiAKLQkvKiBpZiBuZWNlc3NhcnksIGNvcHkgX3N0ZXh0X2wxIHRvIF9ldGV4dF9sMSB0byBMMSBpbnN0cnVjdGlvbiBTUkFNICovCi0JbDFfY29kZV9sZW5ndGggPSBfZXRleHRfbDEgLSBfc3RleHRfbDE7Ci0JaWYgKGwxX2NvZGVfbGVuZ3RoKQotCQllYXJseV9kbWFfbWVtY3B5KF9zdGV4dF9sMSwgX2wxX2xtYV9zdGFydCwgbDFfY29kZV9sZW5ndGgpOworCS8qIGlmIG5lY2Vzc2FyeSwgY29weSBMMSB0ZXh0IHRvIEwxIGluc3RydWN0aW9uIFNSQU0gKi8KKwlpZiAoTDFfQ09ERV9MRU5HVEggJiYgdGV4dF9sMV9sZW4pCisJCWVhcmx5X2RtYV9tZW1jcHkoX3N0ZXh0X2wxLCBfdGV4dF9sMV9sbWEsIHRleHRfbDFfbGVuKTsKIAotCS8qIGlmIG5lY2Vzc2FyeSwgY29weSBfc2RhdGFfbDEgdG8gX3Nic3NfbDEgdG8gTDEgZGF0YSBiYW5rIEEgU1JBTSAqLwotCWwxX2RhdGFfYV9sZW5ndGggPSBfc2Jzc19sMSAtIF9zZGF0YV9sMTsKLQlpZiAobDFfZGF0YV9hX2xlbmd0aCkKLQkJZWFybHlfZG1hX21lbWNweShfc2RhdGFfbDEsIF9sMV9sbWFfc3RhcnQgKyBsMV9jb2RlX2xlbmd0aCwgbDFfZGF0YV9hX2xlbmd0aCk7CisJLyogaWYgbmVjZXNzYXJ5LCBjb3B5IEwxIGRhdGEgdG8gTDEgZGF0YSBiYW5rIEEgU1JBTSAqLworCWlmIChMMV9EQVRBX0FfTEVOR1RIICYmIGRhdGFfbDFfbGVuKQorCQllYXJseV9kbWFfbWVtY3B5KF9zZGF0YV9sMSwgX2RhdGFfbDFfbG1hLCBkYXRhX2wxX2xlbik7CiAKLQkvKiBpZiBuZWNlc3NhcnksIGNvcHkgX3NkYXRhX2JfbDEgdG8gX3Nic3NfYl9sMSB0byBMMSBkYXRhIGJhbmsgQiBTUkFNICovCi0JbDFfZGF0YV9iX2xlbmd0aCA9IF9zYnNzX2JfbDEgLSBfc2RhdGFfYl9sMTsKLQlpZiAobDFfZGF0YV9iX2xlbmd0aCkKLQkJZWFybHlfZG1hX21lbWNweShfc2RhdGFfYl9sMSwgX2wxX2xtYV9zdGFydCArIGwxX2NvZGVfbGVuZ3RoICsKLQkJCWwxX2RhdGFfYV9sZW5ndGgsIGwxX2RhdGFfYl9sZW5ndGgpOworCS8qIGlmIG5lY2Vzc2FyeSwgY29weSBMMSBkYXRhIEIgdG8gTDEgZGF0YSBiYW5rIEIgU1JBTSAqLworCWlmIChMMV9EQVRBX0JfTEVOR1RIICYmIGRhdGFfYl9sMV9sZW4pCisJCWVhcmx5X2RtYV9tZW1jcHkoX3NkYXRhX2JfbDEsIF9kYXRhX2JfbDFfbG1hLCBkYXRhX2JfbDFfbGVuKTsKIAogCWVhcmx5X2RtYV9tZW1jcHlfZG9uZSgpOwogCi0JLyogaWYgbmVjZXNzYXJ5LCBjb3B5IF9zdGV4dF9sMiB0byBfZWRhdGFfbDIgdG8gTDIgU1JBTSAqLwotCWlmIChMMl9MRU5HVEggIT0gMCkgewotCQlsMl9sZW5ndGggPSBfc2Jzc19sMiAtIF9zdGV4dF9sMjsKLQkJaWYgKGwyX2xlbmd0aCkKLQkJCW1lbWNweShfc3RleHRfbDIsIF9sMl9sbWFfc3RhcnQsIGwyX2xlbmd0aCk7Ci0JfQorCS8qIGlmIG5lY2Vzc2FyeSwgY29weSBMMiB0ZXh0L2RhdGEgdG8gTDIgU1JBTSAqLworCWlmIChMMl9MRU5HVEggJiYgbDJfbGVuKQorCQltZW1jcHkoX3N0ZXh0X2wyLCBfbDJfbG1hLCBsMl9sZW4pOwogfQogCiAvKiBhZGRfbWVtb3J5X3JlZ2lvbiB0byBtZW1tYXAgKi8KQEAgLTYwOCwxMSArNjAxLDYgQEAKIAlwYWdlX21hc2tfb3JkZXIgPSBnZXRfb3JkZXIoMyAqIHBhZ2VfbWFza19uZWx0cyAqIHNpemVvZihsb25nKSk7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKENPTkZJR19NVERfVUNMSU5VWCkKLQkvKkluIGNhc2UgdGhlcmUgaXMgbm8gdmFsaWQgQ1BMQiBiZWhpbmQgbWVtb3J5X2VuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHRvIGNsb3NlKi8KLQltZW1vcnlfZW5kIC09IFNJWkVfNEs7Ci0jZW5kaWYKLQogCWluaXRfbW0uc3RhcnRfY29kZSA9ICh1bnNpZ25lZCBsb25nKV9zdGV4dDsKIAlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0OwogCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZylfZWRhdGE7CkBAIC05MTcsNyArOTA1LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIHN1cHBvcnQgKEMpIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcywgSW5jLlxuIik7CiAJaWYgKGJmaW5fY29tcGlsZWRfcmV2aWQoKSA9PSAweGZmZmYpCi0JCXByaW50ayhLRVJOX0lORk8gIkNvbXBpbGVkIGZvciBBRFNQLSVzIFJldiBhbnlcbiIsIENQVSk7CisJCXByaW50ayhLRVJOX0lORk8gIkNvbXBpbGVkIGZvciBBRFNQLSVzIFJldiBhbnksIHJ1bm5pbmcgb24gMC4lZFxuIiwgQ1BVLCBiZmluX3JldmlkKCkpOwogCWVsc2UgaWYgKGJmaW5fY29tcGlsZWRfcmV2aWQoKSA9PSAtMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ29tcGlsZWQgZm9yIEFEU1AtJXMgUmV2IG5vbmVcbiIsIENQVSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwppbmRleCA5ZDkwYzE4Li5lMGZkNjNlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KQEAgLTMzMiwzICszMzMsMjAgQEAKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrLCBOVUxMKTsKIAl9CiB9CisKKy8qCisgKiBub3RpZmljYXRpb24gb2YgdXNlcnNwYWNlIGV4ZWN1dGlvbiByZXN1bXB0aW9uCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBkb19ub3RpZnlfcmVzdW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKSB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQlkb19zaWduYWwocmVncyk7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSkpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOworCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCmluZGV4IDM1OWNmYjEuLjE3YzM4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9ncHRpbWVycy5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFKQotCiAvKiBBY2NlbGVyYXRvcnMgZm9yIHNjaGVkX2Nsb2NrKCkKICAqIGNvbnZlcnQgZnJvbSBjeWNsZXMoNjRiaXRzKSA9PiBuYW5vc2Vjb25kcyAoNjRiaXRzKQogICogIGJhc2ljIGVxdWF0aW9uOgpAQCAtNDYsMjAgKzQ0LDExIEBACiAgKgkJCS1qb2huc3R1bEB1cy5pYm0uY29tICJtYXRoIGlzIGhhcmQsIGxldHMgZ28gc2hvcHBpbmchIgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN5YzJuc19zY2FsZTsKICNkZWZpbmUgQ1lDMk5TX1NDQUxFX0ZBQ1RPUiAxMCAvKiAyXjEwLCBjYXJlZnVsbHkgY2hvc2VuICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3ljMm5zX3NjYWxlKHVuc2lnbmVkIGxvbmcgY3B1X2toeikKLXsKLQljeWMybnNfc2NhbGUgPSAoMTAwMDAwMCA8PCBDWUMyTlNfU0NBTEVfRkFDVE9SKSAvIGNwdV9raHo7Ci19CisjaWYgZGVmaW5lZChDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFKQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfMl9ucyhjeWNsZV90IGN5YykKLXsKLQlyZXR1cm4gKGN5YyAqIGN5YzJuc19zY2FsZSkgPj4gQ1lDMk5TX1NDQUxFX0ZBQ1RPUjsKLX0KLQotc3RhdGljIGN5Y2xlX3QgYmZpbl9yZWFkX2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQorc3RhdGljIG5vdHJhY2UgY3ljbGVfdCBiZmluX3JlYWRfY3ljbGVzKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIF9fYmZpbl9jeWNsZXNfb2ZmICsgKGdldF9jeWNsZXMoKSA8PCBfX2JmaW5fY3ljbGVzX21vZCk7CiB9CkBAIC02OSwxOSArNTgsMTggQEAKIAkucmF0aW5nCQk9IDQwMCwKIAkucmVhZAkJPSBiZmluX3JlYWRfY3ljbGVzLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soNjQpLAotCS5zaGlmdAkJPSAyMiwKKwkuc2hpZnQJCT0gQ1lDMk5TX1NDQUxFX0ZBQ1RPUiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGJmaW5fY3NfY3ljbGVzX3NjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGN5Y2xlc18yX25zKGJmaW5fcmVhZF9jeWNsZXMoJmJmaW5fY3NfY3ljbGVzKSk7CisJcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhiZmluX3JlYWRfY3ljbGVzKCZiZmluX2NzX2N5Y2xlcyksCisJCWJmaW5fY3NfY3ljbGVzLm11bHQsIGJmaW5fY3NfY3ljbGVzLnNoaWZ0KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYmZpbl9jc19jeWNsZXNfaW5pdCh2b2lkKQogewotCXNldF9jeWMybnNfc2NhbGUoZ2V0X2NjbGsoKSAvIDEwMDApOwotCiAJYmZpbl9jc19jeWNsZXMubXVsdCA9IFwKIAkJY2xvY2tzb3VyY2VfaHoybXVsdChnZXRfY2NsaygpLCBiZmluX2NzX2N5Y2xlcy5zaGlmdCk7CiAKQEAgLTEwOCw3ICs5Niw3IEBACiAJZW5hYmxlX2dwdGltZXJzKFRJTUVSMGJpdCk7CiB9CiAKLXN0YXRpYyBjeWNsZV90IGJmaW5fcmVhZF9ncHRpbWVyMCh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmZpbl9yZWFkX2dwdGltZXIwKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIGJmaW5fcmVhZF9USU1FUjBfQ09VTlRFUigpOwogfQpAQCAtMTE4LDEwICsxMDYsMTYgQEAKIAkucmF0aW5nCQk9IDM1MCwKIAkucmVhZAkJPSBiZmluX3JlYWRfZ3B0aW1lcjAsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0CQk9IDIyLAorCS5zaGlmdAkJPSBDWUMyTlNfU0NBTEVfRkFDVE9SLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGJmaW5fY3NfZ3B0aW1lcjBfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGJmaW5fcmVhZF9USU1FUjBfQ09VTlRFUigpLAorCQliZmluX2NzX2dwdGltZXIwLm11bHQsIGJmaW5fY3NfZ3B0aW1lcjAuc2hpZnQpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBiZmluX2NzX2dwdGltZXIwX2luaXQodm9pZCkKIHsKIAlzZXR1cF9ncHRpbWVyMCgpOwpAQCAtMTM4LDYgKzEzMiwxOSBAQAogIyBkZWZpbmUgYmZpbl9jc19ncHRpbWVyMF9pbml0KCkKICNlbmRpZgogCisKKyNpZiBkZWZpbmVkKENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UpIHx8IGRlZmluZWQoQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSkKKy8qIHByZWZlciB0byB1c2UgY3ljbGVzIHNpbmNlIGl0IGhhcyBoaWdoZXIgcmF0aW5nICovCitub3RyYWNlIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSkKKwlyZXR1cm4gYmZpbl9jc19jeWNsZXNfc2NoZWRfY2xvY2soKTsKKyNlbHNlCisJcmV0dXJuIGJmaW5fY3NfZ3B0aW1lcjBfc2NoZWRfY2xvY2soKTsKKyNlbmRpZgorfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQ09SRV9USU1FUl9JUlFfTDEKIF9fYXR0cmlidXRlX18oKGwxX3RleHQpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKaW5kZXggYmQzYjUzZC4uMTNjMWVlMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYwpAQCAtMTg0LDExICsxODQsMyBAQAogCiAJdGltZV9zY2hlZF9pbml0KHRpbWVyX2ludGVycnVwdCk7CiB9Ci0KLS8qCi0gKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgotICovCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzICooTlNFQ19QRVJfU0VDIC8gSFopOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKaW5kZXggNzhjYjNkMy4uZDNjYmNkNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCkBAIC0xMTksNiArMTE5LDE1IEBACiAJCXJldHVybjsKIAl9CiAKKwkvKgorCSAqIERvbid0IHdhbGsgYW55IG9mIHRoZSB2bWFzIGlmIHdlIGFyZSBvb3BzaW5nLCBpdCBoYXMgYmVlbiBrbm93bgorCSAqIHRvIGNhdXNlIHByb2JsZW1zIC0gY29ycnVwdCB2bWFzIChrZXJuZWwgY3Jhc2hlcykgY2F1c2UgZG91YmxlIGZhdWx0cworCSAqLworCWlmIChvb3BzX2luX3Byb2dyZXNzKSB7CisJCXN0cmNhdChidWYsICIvKiBrZXJuZWwgZHluYW1pYyBtZW1vcnkgKG1heWJlIHVzZXItc3BhY2UpICovIik7CisJCXJldHVybjsKKwl9CisKIAkvKiBsb29rcyBsaWtlIHdlJ3JlIG9mZiBpbiB1c2VyLWxhbmQsIHNvIGxldCdzIHdhbGsgYWxsIHRoZQogCSAqIG1hcHBpbmdzIG9mIGFsbCBvdXIgcHJvY2Vzc2VzIGFuZCBzZWUgaWYgd2UgY2FuJ3QgYmUgYSB3aGVlCiAJICogYml0IG1vcmUgc3BlY2lmaWMKQEAgLTUxNSw2ICs1MjQsMzYgQEAKIAkJCWJyZWFrOwogCQkvKiBFeHRlcm5hbCBNZW1vcnkgQWRkcmVzc2luZyBFcnJvciAqLwogCQljYXNlIChTRVFTVEFUX0hXRVJSQ0FVU0VfRVhURVJOX0FERFIpOgorCQkJaWYgKEFOT01BTFlfMDUwMDAzMTApIHsKKwkJCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBhbm9tYWx5X3JldHM7CisKKwkJCQlpZiAoKGZwLT5wYyA+PSAoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIIC0gNTEyKSkgJiYKKwkJCQkgICAgKGZwLT5wYyA8IChMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKSkgeworCQkJCQkvKgorCQkJCQkgKiBBIGZhbHNlIGhhcmR3YXJlIGVycm9yIHdpbGwgaGFwcGVuIHdoaWxlIGZldGNoaW5nIGF0CisJCQkJCSAqIHRoZSBMMSBpbnN0cnVjdGlvbiBTUkFNIGJvdW5kYXJ5LiAgSWdub3JlIGl0LgorCQkJCQkgKi8KKwkJCQkJYW5vbWFseV9yZXRzID0gZnAtPnJldHM7CisJCQkJCWdvdG8gdHJhcHNfZG9uZTsKKwkJCQl9IGVsc2UgaWYgKGZwLT5yZXRzID09IGFub21hbHlfcmV0cykgeworCQkJCQkvKgorCQkJCQkgKiBXaGlsZSBib3VuZGFyeSBjb2RlIHJldHVybnMgdG8gYSBmdW5jdGlvbiwgYXQgdGhlIHJldAorCQkJCQkgKiBwb2ludCwgYSBuZXcgZmFsc2UgaGFyZHdhcmUgZXJyb3IgbWlnaHQgb2NjdXIgdG9vIGJhc2VkCisJCQkJCSAqIG9uIHRlc3RzLiAgSWdub3JlIGl0IHRvby4KKwkJCQkJICovCisJCQkJCWdvdG8gdHJhcHNfZG9uZTsKKwkJCQl9IGVsc2UgaWYgKChmcC0+cmV0cyA+PSAoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIIC0gNTEyKSkgJiYKKwkJCQkgICAgICAgICAgIChmcC0+cmV0cyA8IChMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKSkgeworCQkJCQkvKgorCQkJCQkgKiBJZiBib3VuZGFyeSBjb2RlIGNhbGxzIGEgZnVuY3Rpb24sIGF0IHRoZSBlbnRyeSBwb2ludCwKKwkJCQkJICogYSBuZXcgZmFsc2UgaGFyZHdhcmUgZXJyb3IgbWF5YmUgaGFwcGVuIGJhc2VkIG9uIHRlc3RzLgorCQkJCQkgKiBJZ25vcmUgaXQgdG9vLgorCQkJCQkgKi8KKwkJCQkJZ290byB0cmFwc19kb25lOworCQkJCX0gZWxzZQorCQkJCQlhbm9tYWx5X3JldHMgPSAwOworCQkJfQorCiAJCQlpbmZvLnNpX2NvZGUgPSBCVVNfQURSRVJSOwogCQkJc2lnID0gU0lHQlVTOwogCQkJc3RyZXJyb3IgPSBLRVJOX05PVElDRSBIV0NfeDMoS0VSTl9OT1RJQ0UpOwpAQCAtOTc2LDEyICsxMDE1LDEyIEBACiAJICAgICEoKHVuc2lnbmVkIGxvbmcpY3VycmVudCAmIDB4MykgJiYgY3VycmVudC0+cGlkKSB7CiAJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJDVVJSRU5UIFBST0NFU1M6XG4iKTsKIAkJaWYgKGN1cnJlbnQtPmNvbW0gPj0gKGNoYXIgKilGSVhFRF9DT0RFX1NUQVJUKQotCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkNPTU09JXMgUElEPSVkXG4iLAorCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkNPTU09JXMgUElEPSVkIiwKIAkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOwogCQllbHNlCi0JCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiQ09NTT0gaW52YWxpZFxuIik7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiQ09NTT0gaW52YWxpZCIpOwogCi0JCXByaW50ayhLRVJOX05PVElDRSAiQ1BVID0gJWRcbiIsIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIENQVT0lZFxuIiwgY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpOwogCQlpZiAoISgodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbSAmIDB4MykgJiYgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+bW0gPj0gRklYRURfQ09ERV9TVEFSVCkKIAkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkJIlRFWFQgPSAweCVwLTB4JXAgICAgICAgIERBVEEgPSAweCVwLTB4JXBcbiIKQEAgLTExNDAsNyArMTE3OSw3IEBACiAJaWYgKGZwLT5pcGVuZCAmIH4weDNGKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAoTlJfSVJRUyAtIDEpOyBpKyspIHsKIAkJCWlmICghaW5fYXRvbWljKQotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAKIAkJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJCWlmICghYWN0aW9uKQpAQCAtMTE1NSw3ICsxMTk0LDcgQEAKIAkJCXZlcmJvc2VfcHJpbnRrKCJcbiIpOwogdW5sb2NrOgogCQkJaWYgKCFpbl9hdG9taWMpCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDEwZTEyNTMuLjY2Nzk5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNCw4ICs0LDYgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKLSNkZWZpbmUgVk1MSU5VWF9TWU1CT0woX3N5bV8pIF8jI19zeW1fCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9tZW1fbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTEyMyw4ICsxMjEsNiBAQAogCQlFWElUX0RBVEEKIAl9CiAKLQlfX2wxX2xtYV9zdGFydCA9IC47Ci0KIAkudGV4dF9sMSBMMV9DT0RFX1NUQVJUIDogQVQoTE9BREFERFIoLmV4aXQuZGF0YSkgKyBTSVpFT0YoLmV4aXQuZGF0YSkpCiAJewogCQkuID0gQUxJR04oNCk7CkBAIC0xMzYsOSArMTMyLDExIEBACiAJCS4gPSBBTElHTig0KTsKIAkJX19ldGV4dF9sMSA9IC47CiAJfQotCUFTU0VSVCAoU0laRU9GKC50ZXh0X2wxKSA8PSBMMV9DT0RFX0xFTkdUSCwgIkwxIHRleHQgb3ZlcmZsb3chIikKKwlfX3RleHRfbDFfbG1hID0gTE9BREFERFIoLnRleHRfbDEpOworCV9fdGV4dF9sMV9sZW4gPSBTSVpFT0YoLnRleHRfbDEpOworCUFTU0VSVCAoX190ZXh0X2wxX2xlbiA8PSBMMV9DT0RFX0xFTkdUSCwgIkwxIHRleHQgb3ZlcmZsb3chIikKIAotCS5kYXRhX2wxIEwxX0RBVEFfQV9TVEFSVCA6IEFUKExPQURBRERSKC50ZXh0X2wxKSArIFNJWkVPRigudGV4dF9sMSkpCisJLmRhdGFfbDEgTDFfREFUQV9BX1NUQVJUIDogQVQoX190ZXh0X2wxX2xtYSArIF9fdGV4dF9sMV9sZW4pCiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc2RhdGFfbDEgPSAuOwpAQCAtMTU0LDkgKzE1MiwxMSBAQAogCQkuID0gQUxJR04oNCk7CiAJCV9fZWJzc19sMSA9IC47CiAJfQotCUFTU0VSVCAoU0laRU9GKC5kYXRhX2wxKSA8PSBMMV9EQVRBX0FfTEVOR1RILCAiTDEgZGF0YSBBIG92ZXJmbG93ISIpCisJX19kYXRhX2wxX2xtYSA9IExPQURBRERSKC5kYXRhX2wxKTsKKwlfX2RhdGFfbDFfbGVuID0gU0laRU9GKC5kYXRhX2wxKTsKKwlBU1NFUlQgKF9fZGF0YV9sMV9sZW4gPD0gTDFfREFUQV9BX0xFTkdUSCwgIkwxIGRhdGEgQSBvdmVyZmxvdyEiKQogCi0JLmRhdGFfYl9sMSBMMV9EQVRBX0JfU1RBUlQgOiBBVChMT0FEQUREUiguZGF0YV9sMSkgKyBTSVpFT0YoLmRhdGFfbDEpKQorCS5kYXRhX2JfbDEgTDFfREFUQV9CX1NUQVJUIDogQVQoX19kYXRhX2wxX2xtYSArIF9fZGF0YV9sMV9sZW4pCiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc2RhdGFfYl9sMSA9IC47CkBAIC0xNjksMTEgKzE2OSwxMSBAQAogCQkuID0gQUxJR04oNCk7CiAJCV9fZWJzc19iX2wxID0gLjsKIAl9Ci0JQVNTRVJUIChTSVpFT0YoLmRhdGFfYl9sMSkgPD0gTDFfREFUQV9CX0xFTkdUSCwgIkwxIGRhdGEgQiBvdmVyZmxvdyEiKQorCV9fZGF0YV9iX2wxX2xtYSA9IExPQURBRERSKC5kYXRhX2JfbDEpOworCV9fZGF0YV9iX2wxX2xlbiA9IFNJWkVPRiguZGF0YV9iX2wxKTsKKwlBU1NFUlQgKF9fZGF0YV9iX2wxX2xlbiA8PSBMMV9EQVRBX0JfTEVOR1RILCAiTDEgZGF0YSBCIG92ZXJmbG93ISIpCiAKLQlfX2wyX2xtYV9zdGFydCA9IExPQURBRERSKC5kYXRhX2JfbDEpICsgU0laRU9GKC5kYXRhX2JfbDEpOwotCi0JLnRleHRfZGF0YV9sMiBMMl9TVEFSVCA6IEFUKExPQURBRERSKC5kYXRhX2JfbDEpICsgU0laRU9GKC5kYXRhX2JfbDEpKQorCS50ZXh0X2RhdGFfbDIgTDJfU1RBUlQgOiBBVChfX2RhdGFfYl9sMV9sbWEgKyBfX2RhdGFfYl9sMV9sZW4pCiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc3RleHRfbDIgPSAuOwpAQCAtMTk1LDEyICsxOTUsMTQgQEAKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2Vic3NfbDIgPSAuOwogCX0KLQlBU1NFUlQgKFNJWkVPRigudGV4dF9kYXRhX2wyKSA8PSBMMl9MRU5HVEgsICJMMiBvdmVyZmxvdyEiKQorCV9fbDJfbG1hID0gTE9BREFERFIoLnRleHRfZGF0YV9sMik7CisJX19sMl9sZW4gPSBTSVpFT0YoLnRleHRfZGF0YV9sMik7CisJQVNTRVJUIChfX2wyX2xlbiA8PSBMMl9MRU5HVEgsICJMMiBvdmVyZmxvdyEiKQogCiAJLyogRm9yY2UgdHJhaWxpbmcgYWxpZ25tZW50IG9mIG91ciBpbml0IHNlY3Rpb24gc28gdGhhdCB3aGVuIHdlCiAJICogZnJlZSBvdXIgaW5pdCBtZW1vcnksIHdlIGRvbid0IGxlYXZlIGJlaGluZCBhIHBhcnRpYWwgcGFnZS4KIAkgKi8KLQkuID0gTE9BREFERFIoLnRleHRfZGF0YV9sMikgKyBTSVpFT0YoLnRleHRfZGF0YV9sMik7CisJLiA9IF9fbDJfbG1hICsgX19sMl9sZW47CiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX19faW5pdF9lbmQgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vbGliL01ha2VmaWxlCmluZGV4IDYzNTI4OGYuLjQyYzQ3ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogbGliLXkgOj0gXAogCWFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIFwKIAltdWxkaTMubyBkaXZzaTMubyB1ZGl2c2kzLm8gbW9kc2kzLm8gdW1vZHNpMy5vIFwKLQljaGVja3N1bS5vIG1lbWNweS5vIG1lbXNldC5vIG1lbWNtcC5vIG1lbWNoci5vIG1lbW1vdmUubyBcCisJbWVtY3B5Lm8gbWVtc2V0Lm8gbWVtY21wLm8gbWVtY2hyLm8gbWVtbW92ZS5vIFwKIAlzdHJjbXAubyBzdHJjcHkubyBzdHJuY21wLm8gc3RybmNweS5vIFwKIAl1bXVsc2kzX2hpZ2hwYXJ0Lm8gc211bHNpM19oaWdocGFydC5vIFwKIAlpbnMubyBvdXRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjI5NjlkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KLSAqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVggb3BlcmF0aW5nCi0gKiBzeXN0ZW0uIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIEJTRCBTb2NrZXQgaW50ZXJmYWNlIGFzIHRoZQotICogbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Ci0KLSNpZmRlZiBDT05GSUdfSVBfQ0hFQ0tTVU1fTDEKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkb19jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4pX19hdHRyaWJ1dGVfXygobDFfdGV4dCkpOwotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkb19jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4pCi17Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBzdW0gPSAwOwotCWludCBzd2FwcGVtID0gMDsKLQotCWlmICgxICYgKHVuc2lnbmVkIGxvbmcpYnVmZikgewotCQlzdW0gPSAqYnVmZiA8PCA4OwotCQlidWZmKys7Ci0JCWxlbi0tOwotCQkrK3N3YXBwZW07Ci0JfQotCi0Jd2hpbGUgKGxlbiA+IDEpIHsKLQkJc3VtICs9ICoodW5zaWduZWQgc2hvcnQgKilidWZmOwotCQlidWZmICs9IDI7Ci0JCWxlbiAtPSAyOwotCX0KLQotCWlmIChsZW4gPiAwKQotCQlzdW0gKz0gKmJ1ZmY7Ci0KLQkvKiAgRm9sZCAzMi1iaXQgc3VtIHRvIDE2IGJpdHMgKi8KLQl3aGlsZSAoc3VtID4+IDE2KQotCQlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOwotCi0JaWYgKHN3YXBwZW0pCi0JCXN1bSA9ICgoc3VtICYgMHhmZjAwKSA+PiA4KSArICgoc3VtICYgMHgwMGZmKSA8PCA4KTsKLQotCXJldHVybiBzdW07Ci0KLX0KLQotLyoKLSAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKLSAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCi0gKi8KLV9fc3VtMTYgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKLXsKLQlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+ZG9fY3N1bShpcGgsIGlobCAqIDQpOwotfQotRVhQT1JUX1NZTUJPTChpcF9mYXN0X2NzdW0pOwotCi0vKgotICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCi0gKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQotICoKLSAqIHJldHVybnMgYSAzMi1iaXQgbnVtYmVyIHN1aXRhYmxlIGZvciBmZWVkaW5nIGludG8gaXRzZWxmCi0gKiBvciBjc3VtX3RjcHVkcF9tYWdpYwotICoKLSAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBldmVuIGxlbmd0aHMsIGV4Y2VwdAotICogZm9yIHRoZSBsYXN0IGZyYWdtZW50LCB3aGljaCBtYXkgYmUgb2RkCi0gKgotICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5Ci0gKi8KLV9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSkKLXsKLQkvKgotCSAqIEp1c3QgaW4gY2FzZSB3ZSBnZXQgbmFzdHkgY2hlY2tzdW0gZGF0YS4uLgotCSAqIExpa2UgMHhmZmZmNmVjMyBpbiB0aGUgY2FzZSBvZiBvdXIgSVB2NiBtdWx0aWNhc3QgaGVhZGVyLgotCSAqIFdlIGZvbGQgdG8gYmVnaW4gd2l0aCwgYXMgd2VsbCBhcyBhdCB0aGUgZW5kLgotCSAqLwotCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7Ci0KLQlzdW0gKz0gZG9fY3N1bShidWZmLCBsZW4pOwotCi0Jc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsKLQotCXJldHVybiBzdW07Ci19Ci1FWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7Ci0KLS8qCi0gKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5Ci0gKiBpbiBpY21wLmMKLSAqLwotX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKLXsKLQlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+ZG9fY3N1bShidWZmLCBsZW4pOwotfQotRVhQT1JUX1NZTUJPTChpcF9jb21wdXRlX2NzdW0pOwotCi0vKgotICogY29weSBmcm9tIGZzIHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCi0gKi8KLQotX193c3VtCi1jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAotCQkJICAgIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqY3N1bV9lcnIpCi17Ci0JaWYgKGNzdW1fZXJyKQotCQkqY3N1bV9lcnIgPSAwOwotCW1lbWNweShkc3QsIChfX2ZvcmNlIHZvaWQgKilzcmMsIGxlbik7Ci0JcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKLX0KLUVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKTsKLQotLyoKLSAqIGNvcHkgZnJvbSBkcyB3aGlsZSBjaGVja3N1bW1pbmcsIG90aGVyd2lzZSBsaWtlIGNzdW1fcGFydGlhbAotICovCi0KLV9fd3N1bSBjc3VtX3BhcnRpYWxfY29weShjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKLXsKLQltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci0JcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKLX0KLUVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L0tjb25maWcgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvS2NvbmZpZwppbmRleCA0Yzc2ZmVmLi40YWIyZDE2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvS2NvbmZpZwpAQCAtMSwzICsxLDcgQEAKK2NvbmZpZyBCRjUxeAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIChCRjUxMiB8fCBCRjUxNCB8fCBCRjUxNiB8fCBCRjUxOCkKKwogaWYgKEJGNTF4KQogCiBzb3VyY2UgImFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA2Y2ZiMjQ2Li45MDUzNDYyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC01OCwxMCArNTgsNCBAQAogI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwogCi0vKiBQTExfRElWIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIENDTEtfRElWMSBDU0VMX0RJVjEJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0NMS19ESVYyIENTRUxfRElWMgkvKiAgICAgICAgICBDQ0xLID0gVkNPIC8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDQ0xLX0RJVjQgQ1NFTF9ESVY0CS8qICAgICAgICAgIENDTEsgPSBWQ08gLyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENDTEtfRElWOCBDU0VMX0RJVjgJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAppbmRleCBlMWQ5OTkxLi4xMDhmYTRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxNF9ICkBAIC0xMCwxNSArMTAsOCBAQAogLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgImRlZkJGNTE0LmgiCiAKLS8qIGluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUxNCAqLwotCi0vKiBpbmNsdWRlIGNkZWZCRjUxeF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTF4IHByb2Nlc3NvcnMgKi8KLSNpbmNsdWRlICJjZGVmQkY1MXhfYmFzZS5oIgotCi0vKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1MTQgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCisvKiBCRjUxNCBpcyBCRjUxMiArIFJTSSAqLworI2luY2x1ZGUgImNkZWZCRjUxMi5oIgogCiAvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCmluZGV4IDZiMzY0ZWQuLjI3NTE1OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTE2X0gKQEAgLTEwLDE1ICsxMCw4IEBACiAvKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiZGVmQkY1MTYuaCIKIAotLyogaW5jbHVkZSBjb3JlIHNwZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vY2RlZl9MUEJsYWNrZmluLmg+Ci0KLS8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTE2ICovCi0KLS8qIGluY2x1ZGUgY2RlZkJGNTF4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MXggcHJvY2Vzc29ycyAqLwotI2luY2x1ZGUgImNkZWZCRjUxeF9iYXNlLmgiCi0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjUxNiB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKy8qIEJGNTE2IGlzIEJGNTE0ICsgRU1BQyAqLworI2luY2x1ZGUgImNkZWZCRjUxNC5oIgogCiAvKiAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlcgkoMHhGRkMwMzAwMCAtIDB4RkZDMDMxRkYpICovCiAKQEAgLTE4NSw3MSArMTc4LDQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0FCT1JUKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0FCT1JUKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0FCT1JUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19BQk9SVCwgdmFsKQogCi0vKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QV1JfQ1RMKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QV1JfQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUFdSX0NUTCh2YWwpICAgIGJmaW5fd3JpdGUxNihSU0lfUFdSX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DTEtfQ1RMKCkJICAgICAgIGJmaW5fcmVhZDE2KFJTSV9DTEtfQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ0xLX0NUTCh2YWwpICAgIGJmaW5fd3JpdGUxNihSU0lfQ0xLX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9BUkdVTUVOVCgpICAgICAgIGJmaW5fcmVhZDMyKFJTSV9BUkdVTUVOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQVJHVU1FTlQodmFsKSAgIGJmaW5fd3JpdGUzMihSU0lfQVJHVU1FTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DT01NQU5EKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9DT01NQU5EKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DT01NQU5EKHZhbCkgICAgYmZpbl93cml0ZTE2KFJTSV9DT01NQU5ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUF9DTUQoKSAgICAgICBiZmluX3JlYWQxNihSU0lfUkVTUF9DTUQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BfQ01EKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX1JFU1BfQ01ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UwKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UwKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTAodmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTEoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMSh2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMigpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMikKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UyKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UzKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UzKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTModmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX1RJTUVSKCkgICAgIGJmaW5fcmVhZDMyKFJTSV9EQVRBX1RJTUVSKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX1RJTUVSKHZhbCkgYmZpbl93cml0ZTMyKFJTSV9EQVRBX1RJTUVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9MR1RIKCkgICAgICBiZmluX3JlYWQxNihSU0lfREFUQV9MR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX0xHVEgodmFsKSAgYmZpbl93cml0ZTE2KFJTSV9EQVRBX0xHVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX0NUTCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9EQVRBX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0RBVEFfQ1RMKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0RBVEFfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfQ05UKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0RBVEFfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX0NOVCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9EQVRBX0NOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1NUQVRVUygpICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfU1RBVFVTKHZhbCkgICAgIGJmaW5fd3JpdGUzMihSU0lfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfU1RBVFVTX0NMUigpICAgICBiZmluX3JlYWQxNihSU0lfU1RBVFVTQ0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1NUQVRVU19DTFIodmFsKSBiZmluX3dyaXRlMTYoUlNJX1NUQVRVU0NMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfTUFTSzAoKSAgICAgICAgICBiZmluX3JlYWQzMihSU0lfTUFTSzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX01BU0swKHZhbCkgICAgICBiZmluX3dyaXRlMzIoUlNJX01BU0swLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfTUFTSzEoKSAgICAgICAgICBiZmluX3JlYWQzMihSU0lfTUFTSzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX01BU0sxKHZhbCkgICAgICBiZmluX3dyaXRlMzIoUlNJX01BU0sxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfRklGT19DTlQoKSAgICAgICBiZmluX3JlYWQxNihSU0lfRklGT19DTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0ZJRk9fQ05UKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0ZJRk9fQ05ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ0VBVEFfQ1RMKCkgICAgICBiZmluX3JlYWQxNihSU0lfQ0VBVEFfQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ0VBVEFfQ1RMKHZhbCkgIGJmaW5fd3JpdGUxNihSU0lfQ0VBVEFfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX0ZJRk8oKSAgICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX0ZJRk8pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0ZJRk8odmFsKSAgICAgICBiZmluX3dyaXRlMzIoUlNJX0ZJRk8sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9FX1NUQVRVUygpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9FU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRV9TVEFUVVModmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfRVNUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9FX01BU0soKSAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9FTUFTSykKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfRV9NQVNLKHZhbCkgICAgIGJmaW5fd3JpdGUxNihSU0lfRU1BU0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9DRkcoKSAgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NGRyh2YWwpICAgICAgICBiZmluX3dyaXRlMTYoUlNJX0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1JEX1dBSVRfRU4oKSAgICAgYmZpbl9yZWFkMTYoUlNJX1JEX1dBSVRfRU4pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JEX1dBSVRfRU4odmFsKSBiZmluX3dyaXRlMTYoUlNJX1JEX1dBSVRfRU4sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQwKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQwKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMSgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMSh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDIoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDIodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQzKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQzKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQzKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENCgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENCh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDUoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDUodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ2KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ2KQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ2KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ2LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENygpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENykKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENyh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENywgdmFsKQotCiAjZW5kaWYgLyogX0NERUZfQkY1MTZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKaW5kZXggOTI5YjkwNi4uN2ZiN2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MThfSApAQCAtMTAsMTgxICsxMCwxMCBAQAogLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgImRlZkJGNTE4LmgiCiAKLS8qIGluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgorLyogQkY1MTggaXMgQkY1MTYgKyBJRUVFLTE1ODggKi8KKyNpbmNsdWRlICJjZGVmQkY1MTYuaCIKIAotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MTggKi8KLQotLyogaW5jbHVkZSBjZGVmQkY1MXhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjUxeCBwcm9jZXNzb3JzICovCi0jaW5jbHVkZSAiY2RlZkJGNTF4X2Jhc2UuaCIKLQotLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTE4IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLwotCi0KLS8qIDEwLzEwMCBFdGhlcm5ldCBDb250cm9sbGVyCSgweEZGQzAzMDAwIC0gMHhGRkMwMzFGRikgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19PUE1PREUoKQkJCWJmaW5fcmVhZDMyKEVNQUNfT1BNT0RFKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfT1BNT0RFKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX09QTU9ERSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19BRERSTE8oKQkJCWJmaW5fcmVhZDMyKEVNQUNfQUREUkxPKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfQUREUkxPKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX0FERFJMTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19BRERSSEkoKQkJCWJmaW5fcmVhZDMyKEVNQUNfQUREUkhJKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfQUREUkhJKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX0FERFJISSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19IQVNITE8oKQkJCWJmaW5fcmVhZDMyKEVNQUNfSEFTSExPKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfSEFTSExPKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX0hBU0hMTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19IQVNISEkoKQkJCWJmaW5fcmVhZDMyKEVNQUNfSEFTSEhJKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfSEFTSEhJKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX0hBU0hISSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19TVEFBREQoKQkJCWJmaW5fcmVhZDMyKEVNQUNfU1RBQUREKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfU1RBQUREKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1NUQUFERCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19TVEFEQVQoKQkJCWJmaW5fcmVhZDMyKEVNQUNfU1RBREFUKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfU1RBREFUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1NUQURBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19GTEMoKQkJCWJmaW5fcmVhZDMyKEVNQUNfRkxDKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfRkxDKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX0ZMQywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19WTEFOMSgpCQkJYmZpbl9yZWFkMzIoRU1BQ19WTEFOMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1ZMQU4xKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1ZMQU4xLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1ZMQU4yKCkJCQliZmluX3JlYWQzMihFTUFDX1ZMQU4yKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVkxBTjIodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVkxBTjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfV0tVUF9DVEwoKQkJYmZpbl9yZWFkMzIoRU1BQ19XS1VQX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1dLVVBfQ1RMKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZNU0swKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRk1TSzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0ZGTVNLMCh2YWwpCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZNU0swLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZNU0sxKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRk1TSzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0ZGTVNLMSh2YWwpCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZNU0sxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZNU0syKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRk1TSzIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0ZGTVNLMih2YWwpCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZNU0syLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZNU0szKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRk1TSzMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0ZGTVNLMyh2YWwpCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZNU0szLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZDTUQoKQkJYmZpbl9yZWFkMzIoRU1BQ19XS1VQX0ZGQ01EKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRkNNRCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGQ01ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZPRkYoKQkJYmZpbl9yZWFkMzIoRU1BQ19XS1VQX0ZGT0ZGKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRk9GRih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGT0ZGLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZDUkMwKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRkNSQzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0ZGQ1JDMCh2YWwpCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZDUkMwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfRkZDUkMxKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRkNSQzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0ZGQ1JDMSh2YWwpCWJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZDUkMxLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfU1lTQ1RMKCkJCQliZmluX3JlYWQzMihFTUFDX1NZU0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1NZU0NUTCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19TWVNDVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfU1lTVEFUKCkJCQliZmluX3JlYWQzMihFTUFDX1NZU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1NZU1RBVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19TWVNUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhfU1RBVCgpCQliZmluX3JlYWQzMihFTUFDX1JYX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYX1NUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhfU1RLWSgpCQliZmluX3JlYWQzMihFTUFDX1JYX1NUS1kpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWF9TVEtZKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYX1NUS1ksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhfSVJRRSgpCQliZmluX3JlYWQzMihFTUFDX1JYX0lSUUUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWF9JUlFFKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYX0lSUUUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhfU1RBVCgpCQliZmluX3JlYWQzMihFTUFDX1RYX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYX1NUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhfU1RLWSgpCQliZmluX3JlYWQzMihFTUFDX1RYX1NUS1kpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWF9TVEtZKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYX1NUS1ksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhfSVJRRSgpCQliZmluX3JlYWQzMihFTUFDX1RYX0lSUUUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWF9JUlFFKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYX0lSUUUsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19NTUNfQ1RMKCkJCWJmaW5fcmVhZDMyKEVNQUNfTU1DX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX01NQ19DVEwodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfTU1DX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19NTUNfUklSUVMoKQkJYmZpbl9yZWFkMzIoRU1BQ19NTUNfUklSUVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19NTUNfUklSUVModmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfTU1DX1JJUlFTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX01NQ19SSVJRRSgpCQliZmluX3JlYWQzMihFTUFDX01NQ19SSVJRRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX01NQ19SSVJRRSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19NTUNfUklSUUUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfTU1DX1RJUlFTKCkJCWJmaW5fcmVhZDMyKEVNQUNfTU1DX1RJUlFTKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfTU1DX1RJUlFTKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX01NQ19USVJRUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19NTUNfVElSUUUoKQkJYmZpbl9yZWFkMzIoRU1BQ19NTUNfVElSUUUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19NTUNfVElSUUUodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfTU1DX1RJUlFFLCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX09LKCkJCQliZmluX3JlYWQzMihFTUFDX1JYQ19PSykKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19PSyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfT0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0ZDUygpCQliZmluX3JlYWQzMihFTUFDX1JYQ19GQ1MpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfRkNTKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19GQ1MsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0FMSUdOKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0FMSUdOKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0FMSUdOKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19BTElHTiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfT0NURVQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfT0NURVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfT0NURVQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX09DVEVULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19ETUFPVkYoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfRE1BT1ZGKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0RNQU9WRih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfRE1BT1ZGLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19VTklDU1QoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfVU5JQ1NUKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX1VOSUNTVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfVU5JQ1NULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19NVUxUSSgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19NVUxUSSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19NVUxUSSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfTVVMVEksIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0JST0FEKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0JST0FEKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0JST0FEKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19CUk9BRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTE5FUlJJKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0xORVJSSSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MTkVSUkkodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0xORVJSSSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTE5FUlJPKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0xORVJSTykKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MTkVSUk8odmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0xORVJSTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTE9ORygpCQliZmluX3JlYWQzMihFTUFDX1JYQ19MT05HKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0xPTkcodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0xPTkcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX01BQ0NUTCgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19NQUNDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfTUFDQ1RMKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19NQUNDVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX09QQ09ERSgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19PUENPREUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfT1BDT0RFKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19PUENPREUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX1BBVVNFKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX1BBVVNFKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX1BBVVNFKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19QQVVTRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfQUxMRlJNKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0FMTEZSTSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19BTExGUk0odmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0FMTEZSTSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfQUxMT0NUKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0FMTE9DVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19BTExPQ1QodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0FMTE9DVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfVFlQRUQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfVFlQRUQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfVFlQRUQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX1RZUEVELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19TSE9SVCgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19TSE9SVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19TSE9SVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfU0hPUlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0VRNjQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfRVE2NCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19FUTY0KHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19FUTY0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19MVDEyOCgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19MVDEyOCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MVDEyOCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfTFQxMjgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0xUMjU2KCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0xUMjU2KQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0xUMjU2KHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19MVDI1NiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTFQ1MTIoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfTFQ1MTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfTFQ1MTIodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0xUNTEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19MVDEwMjQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfTFQxMDI0KQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0xUMTAyNCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfTFQxMDI0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19HRTEwMjQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfR0UxMDI0KQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0dFMTAyNCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfR0UxMDI0LCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX09LKCkJCQliZmluX3JlYWQzMihFTUFDX1RYQ19PSykKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19PSyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfT0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDXzFDT0woKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfMUNPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ18xQ09MKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ18xQ09MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19HVDFDT0woKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfR1QxQ09MKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0dUMUNPTCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfR1QxQ09MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19PQ1RFVCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19PQ1RFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19PQ1RFVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfT0NURVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0RFRkVSKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0RFRkVSKQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0RFRkVSKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19ERUZFUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfTEFURUNMKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0xBVEVDTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19MQVRFQ0wodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0xBVEVDTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfWFNfQ09MKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX1hTX0NPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19YU19DT0wodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX1hTX0NPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfRE1BVU5EKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0RNQVVORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19ETUFVTkQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0RNQVVORCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQ1JTRVJSKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0NSU0VSUikKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19DUlNFUlIodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0NSU0VSUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfVU5JQ1NUKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX1VOSUNTVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19VTklDU1QodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX1VOSUNTVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfTVVMVEkoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfTVVMVEkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfTVVMVEkodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX01VTFRJLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19CUk9BRCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19CUk9BRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19CUk9BRCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfQlJPQUQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX1hTX0RGUigpCQliZmluX3JlYWQzMihFTUFDX1RYQ19YU19ERlIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfWFNfREZSKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19YU19ERlIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX01BQ0NUTCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19NQUNDVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfTUFDQ1RMKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19NQUNDVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0FMTEZSTSgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19BTExGUk0pCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUxMRlJNKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19BTExGUk0sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0FMTE9DVCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19BTExPQ1QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUxMT0NUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19BTExPQ1QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0VRNjQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfRVE2NCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19FUTY0KHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19FUTY0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19MVDEyOCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19MVDEyOCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19MVDEyOCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfTFQxMjgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0xUMjU2KCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0xUMjU2KQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0xUMjU2KHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19MVDI1NiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfTFQ1MTIoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfTFQ1MTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfTFQ1MTIodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0xUNTEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19MVDEwMjQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfTFQxMDI0KQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0xUMTAyNCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfTFQxMDI0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19HRTEwMjQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfR0UxMDI0KQotI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0dFMTAyNCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfR0UxMDI0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19BQk9SVCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19BQk9SVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19BQk9SVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfQUJPUlQsIHZhbCkKKy8qIFBUUCBUU1lOQyBSZWdpc3RlcnMgKi8KIAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfQ1RMKCkgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRU1BQ19QVFBfQ1RMKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0NUTCh2YWwpICAgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0NUTCwgdmFsKQpAQCAtMjI3LDcyICs1Niw0IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9QUFNfUEVSSU9EKCkgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9QUFNfUEVSSU9EKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX1BQU19QRVJJT0QodmFsKSAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX1BQU19QRVJJT0QsIHZhbCkKIAotLyogUmVtb3ZhYmxlIFN0b3JhZ2UgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUFdSX0NUTCgpICAgICAgICBiZmluX3JlYWQxNihSU0lfUFdSX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BXUl9DVEwodmFsKSAgICBiZmluX3dyaXRlMTYoUlNJX1BXUl9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ0xLX0NUTCgpCSAgICAgICBiZmluX3JlYWQxNihSU0lfQ0xLX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NMS19DVEwodmFsKSAgICBiZmluX3dyaXRlMTYoUlNJX0NMS19DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfQVJHVU1FTlQoKSAgICAgICBiZmluX3JlYWQzMihSU0lfQVJHVU1FTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0FSR1VNRU5UKHZhbCkgICBiZmluX3dyaXRlMzIoUlNJX0FSR1VNRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ09NTUFORCgpICAgICAgICBiZmluX3JlYWQxNihSU0lfQ09NTUFORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfQ09NTUFORCh2YWwpICAgIGJmaW5fd3JpdGUxNihSU0lfQ09NTUFORCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BfQ01EKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX1JFU1BfQ01EKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQX0NNRCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9SRVNQX0NNRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMCgpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UwKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUkVTUE9OU0UxKCkgICAgICBiZmluX3JlYWQzMihSU0lfUkVTUE9OU0UxKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRVNQT05TRTEodmFsKSAgYmZpbl93cml0ZTMyKFJTSV9SRVNQT05TRTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRVNQT05TRTIoKSAgICAgIGJmaW5fcmVhZDMyKFJTSV9SRVNQT05TRTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1JFU1BPTlNFMih2YWwpICBiZmluX3dyaXRlMzIoUlNJX1JFU1BPTlNFMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1JFU1BPTlNFMygpICAgICAgYmZpbl9yZWFkMzIoUlNJX1JFU1BPTlNFMykKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUkVTUE9OU0UzKHZhbCkgIGJmaW5fd3JpdGUzMihSU0lfUkVTUE9OU0UzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9USU1FUigpICAgICBiZmluX3JlYWQzMihSU0lfREFUQV9USU1FUikKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9USU1FUih2YWwpIGJmaW5fd3JpdGUzMihSU0lfREFUQV9USU1FUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX0RBVEFfTEdUSCgpICAgICAgYmZpbl9yZWFkMTYoUlNJX0RBVEFfTEdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9MR1RIKHZhbCkgIGJmaW5fd3JpdGUxNihSU0lfREFUQV9MR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfREFUQV9DVEwoKSAgICAgICBiZmluX3JlYWQxNihSU0lfREFUQV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9EQVRBX0NUTCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9EQVRBX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9EQVRBX0NOVCgpICAgICAgIGJmaW5fcmVhZDE2KFJTSV9EQVRBX0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfREFUQV9DTlQodmFsKSAgIGJmaW5fd3JpdGUxNihSU0lfREFUQV9DTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9TVEFUVVMoKSAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1NUQVRVUyh2YWwpICAgICBiZmluX3dyaXRlMzIoUlNJX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1NUQVRVU19DTFIoKSAgICAgYmZpbl9yZWFkMTYoUlNJX1NUQVRVU0NMKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9TVEFUVVNfQ0xSKHZhbCkgYmZpbl93cml0ZTE2KFJTSV9TVEFUVVNDTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX01BU0swKCkgICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX01BU0swKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9NQVNLMCh2YWwpICAgICAgYmZpbl93cml0ZTMyKFJTSV9NQVNLMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX01BU0sxKCkgICAgICAgICAgYmZpbl9yZWFkMzIoUlNJX01BU0sxKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9NQVNLMSh2YWwpICAgICAgYmZpbl93cml0ZTMyKFJTSV9NQVNLMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX0ZJRk9fQ05UKCkgICAgICAgYmZpbl9yZWFkMTYoUlNJX0ZJRk9fQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9GSUZPX0NOVCh2YWwpICAgYmZpbl93cml0ZTE2KFJTSV9GSUZPX0NOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX0NFQVRBX0NUTCgpICAgICAgYmZpbl9yZWFkMTYoUlNJX0NFQVRBX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0NFQVRBX0NUTCh2YWwpICBiZmluX3dyaXRlMTYoUlNJX0NFQVRBX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9GSUZPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKFJTSV9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9GSUZPKHZhbCkgICAgICAgYmZpbl93cml0ZTMyKFJTSV9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfRV9TVEFUVVMoKSAgICAgICBiZmluX3JlYWQxNihSU0lfRVNUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0VfU1RBVFVTKHZhbCkgICBiZmluX3dyaXRlMTYoUlNJX0VTVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfRV9NQVNLKCkgICAgICAgICBiZmluX3JlYWQxNihSU0lfRU1BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX0VfTUFTSyh2YWwpICAgICBiZmluX3dyaXRlMTYoUlNJX0VNQVNLLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfQ0ZHKCkgICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfQ09ORklHKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9DRkcodmFsKSAgICAgICAgYmZpbl93cml0ZTE2KFJTSV9DT05GSUcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9SRF9XQUlUX0VOKCkgICAgIGJmaW5fcmVhZDE2KFJTSV9SRF9XQUlUX0VOKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9SRF9XQUlUX0VOKHZhbCkgYmZpbl93cml0ZTE2KFJTSV9SRF9XQUlUX0VOLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMCgpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMCh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDEoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDEodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQyKCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQyKQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQyKHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElEMygpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElEMykKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElEMyh2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElEMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDQoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDQodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QSUQ1KCkgICAgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QSUQ1KQotI2RlZmluZSBiZmluX3dyaXRlX1JTSV9QSUQ1KHZhbCkgICAgICAgYmZpbl93cml0ZTE2KFJTSV9QSUQ1LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9SU0lfUElENigpICAgICAgICAgICBiZmluX3JlYWQxNihSU0lfUElENikKLSNkZWZpbmUgYmZpbl93cml0ZV9SU0lfUElENih2YWwpICAgICAgIGJmaW5fd3JpdGUxNihSU0lfUElENiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUlNJX1BJRDcoKSAgICAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BJRDcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUlNJX1BJRDcodmFsKSAgICAgICBiZmluX3dyaXRlMTYoUlNJX1BJRDcsIHZhbCkKLQotCiAjZW5kaWYgLyogX0NERUZfQkY1MThfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCmluZGV4IDFkOTcwZGYuLmU1NDhlOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKQEAgLTEzMSwyMyArMTMxLDYgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9HQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9HQ1RMLCB2YWwpCiAKIAotLyogU1BJIENvbnRyb2xsZXIJCSgweEZGQzAwNTAwIC0gMHhGRkMwMDVGRikJCQkJCQkJCQkqLwotI2RlZmluZSBiZmluX3JlYWRfU1BJX0NUTCgpCQkJYmZpbl9yZWFkMTYoU1BJX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUElfQ1RMKHZhbCkJCQliZmluX3dyaXRlMTYoU1BJX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJX0ZMRygpCQkJYmZpbl9yZWFkMTYoU1BJX0ZMRykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUElfRkxHKHZhbCkJCQliZmluX3dyaXRlMTYoU1BJX0ZMRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFNQSV9TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUElfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJX1REQlIoKQkJCWJmaW5fcmVhZDE2KFNQSV9UREJSKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9UREJSKHZhbCkJCWJmaW5fd3JpdGUxNihTUElfVERCUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJX1JEQlIoKQkJCWJmaW5fcmVhZDE2KFNQSV9SREJSKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9SREJSKHZhbCkJCWJmaW5fd3JpdGUxNihTUElfUkRCUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJX0JBVUQoKQkJCWJmaW5fcmVhZDE2KFNQSV9CQVVEKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSV9CQVVEKHZhbCkJCWJmaW5fd3JpdGUxNihTUElfQkFVRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJX1NIQURPVygpCQkJYmZpbl9yZWFkMTYoU1BJX1NIQURPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUElfU0hBRE9XKHZhbCkJCWJmaW5fd3JpdGUxNihTUElfU0hBRE9XLCB2YWwpCi0KLQogLyogVElNRVIwLTcgUmVnaXN0ZXJzCQkoMHhGRkMwMDYwMCAtIDB4RkZDMDA2RkYpCQkJCQkJCQkqLwogI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX0NPTkZJRygpCQliZmluX3JlYWQxNihUSU1FUjBfQ09ORklHKQogI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSMF9DT05GSUcsIHZhbCkKQEAgLTg0NCw2ICs4MjcsNyBAQAogI2RlZmluZSBiZmluX3dyaXRlX1BQSV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfQ09OVFJPTCwgdmFsKQogI2RlZmluZSBiZmluX3JlYWRfUFBJX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoUFBJX1NUQVRVUykKICNkZWZpbmUgYmZpbl93cml0ZV9QUElfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fY2xlYXJfUFBJX1NUQVRVUygpCQkJYmZpbl93cml0ZV9QUElfU1RBVFVTKDB4RkZGRikKICNkZWZpbmUgYmZpbl9yZWFkX1BQSV9ERUxBWSgpCQkJYmZpbl9yZWFkMTYoUFBJX0RFTEFZKQogI2RlZmluZSBiZmluX3dyaXRlX1BQSV9ERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0RFTEFZLCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9QUElfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFBQSV9DT1VOVCkKQEAgLTEwNjIsMTcgKzEwNDYsNiBAQAogI2RlZmluZSBiZmluX3JlYWRfQ05UX01JTigpCQkJYmZpbl9yZWFkMzIoQ05UX01JTikKICNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUlOKHZhbCkJCQliZmluX3dyaXRlMzIoQ05UX01JTiwgdmFsKQogCi0vKiBPVFAvRlVTRSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfT1RQX0NPTlRST0woKQkJCWJmaW5fcmVhZDE2KE9UUF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihPVFBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX0JFTigpCQkJYmZpbl9yZWFkMTYoT1RQX0JFTikKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfQkVOKHZhbCkJCQliZmluX3dyaXRlMTYoT1RQX0JFTiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoT1RQX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihPVFBfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9PVFBfVElNSU5HKCkJCQliZmluX3JlYWQzMihPVFBfVElNSU5HKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9USU1JTkcodmFsKQkJYmZpbl93cml0ZTMyKE9UUF9USU1JTkcsIHZhbCkKLQogLyogU2VjdXJpdHkgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9TWVNTV1QoKQkJYmZpbl9yZWFkMzIoU0VDVVJFX1NZU1NXVCkKQEAgLTEwODIsNTIgKzEwNTUsNiBAQAogI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NUQVRVUygpCQliZmluX3JlYWQxNihTRUNVUkVfU1RBVFVTKQogI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KFNFQ1VSRV9TVEFUVVMsIHZhbCkKIAotLyogT1RQIFJlYWQvV3JpdGUgRGF0YSBCdWZmZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMCgpCQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMzIoT1RQX0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTEoKQkJCWJmaW5fcmVhZDMyKE9UUF9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfREFUQTEodmFsKQkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX0RBVEEyKCkJCQliZmluX3JlYWQzMihPVFBfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUzMihPVFBfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMygpCQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMzIoT1RQX0RBVEEzLCB2YWwpCi0KLS8qIE5GQyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0NUTCgpCQkJYmZpbl9yZWFkMTYoTkZDX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ1RMKHZhbCkJCQliZmluX3dyaXRlMTYoTkZDX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX1NUQVQoKQkJCWJmaW5fcmVhZDE2KE5GQ19TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUVNUQVQoKQkJCWJmaW5fcmVhZDE2KE5GQ19JUlFTVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfSVJRU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUU1BU0soKQkJCWJmaW5fcmVhZDE2KE5GQ19JUlFNQVNLKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFNQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfSVJRTUFTSywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzAoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MwKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MwKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzEoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MxKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MxKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzIoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MyKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MyKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzMoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MzKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MzKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfTkZDX0NPVU5UKCkJCQliZmluX3JlYWQxNihORkNfQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19SU1QoKQkJCWJmaW5fcmVhZDE2KE5GQ19SU1QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JTVCh2YWwpCQkJYmZpbl93cml0ZTE2KE5GQ19SU1QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX05GQ19QR0NUTCgpCQkJYmZpbl9yZWFkMTYoTkZDX1BHQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19QR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoTkZDX1BHQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfUkVBRCgpCQkJYmZpbl9yZWFkMTYoTkZDX1JFQUQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JFQUQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19SRUFELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfQUREUigpCQkJYmZpbl9yZWFkMTYoTkZDX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0FERFIodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19BRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfQ01EKCkJCQliZmluX3JlYWQxNihORkNfQ01EKQotI2RlZmluZSBiZmluX3dyaXRlX05GQ19DTUQodmFsKQkJCWJmaW5fd3JpdGUxNihORkNfQ01ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9XUigpCQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfV1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfV1IodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19EQVRBX1dSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9SRCgpCQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfUkQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfUkQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19EQVRBX1JELCB2YWwpCi0KIC8qIFRoZXNlIG5lZWQgdG8gYmUgbGFzdCBkdWUgdG8gdGhlIGNkZWYvbGludXggaW50ZXItZGVwZW5kZW5jaWVzICovCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKaW5kZXggYjVhZGNhMi4uOTJlOTUwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaApAQCAtNyw0OSArNyw4IEBACiAjaWZuZGVmIF9ERUZfQkY1MTRfSAogI2RlZmluZSBfREVGX0JGNTE0X0gKIAotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUxNCAqLwotCi0vKiBJbmNsdWRlIGRlZkJGNTF4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MXggcHJvY2Vzc29ycyAqLwotI2luY2x1ZGUgImRlZkJGNTF4X2Jhc2UuaCIKLQotLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTE0IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLwotCi0vKiBTREggUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgU0RIX1BXUl9DVEwgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MDAgLyogU0RIIFBvd2VyIENvbnRyb2wgKi8KLSNkZWZpbmUgU0RIX0NMS19DVEwgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MDQgLyogU0RIIENsb2NrIENvbnRyb2wgKi8KLSNkZWZpbmUgU0RIX0FSR1VNRU5UICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MDggLyogU0RIIEFyZ3VtZW50ICovCi0jZGVmaW5lIFNESF9DT01NQU5EICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTBDIC8qIFNESCBDb21tYW5kICovCi0jZGVmaW5lIFNESF9SRVNQX0NNRCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTEwIC8qIFNESCBSZXNwb25zZSBDb21tYW5kICovCi0jZGVmaW5lIFNESF9SRVNQT05TRTAgICAgICAgICAgICAgICAgICAweEZGQzAzOTE0IC8qIFNESCBSZXNwb25zZTAgKi8KLSNkZWZpbmUgU0RIX1JFU1BPTlNFMSAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MTggLyogU0RIIFJlc3BvbnNlMSAqLwotI2RlZmluZSBTREhfUkVTUE9OU0UyICAgICAgICAgICAgICAgICAgMHhGRkMwMzkxQyAvKiBTREggUmVzcG9uc2UyICovCi0jZGVmaW5lIFNESF9SRVNQT05TRTMgICAgICAgICAgICAgICAgICAweEZGQzAzOTIwIC8qIFNESCBSZXNwb25zZTMgKi8KLSNkZWZpbmUgU0RIX0RBVEFfVElNRVIgICAgICAgICAgICAgICAgIDB4RkZDMDM5MjQgLyogU0RIIERhdGEgVGltZXIgKi8KLSNkZWZpbmUgU0RIX0RBVEFfTEdUSCAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MjggLyogU0RIIERhdGEgTGVuZ3RoICovCi0jZGVmaW5lIFNESF9EQVRBX0NUTCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTJDIC8qIFNESCBEYXRhIENvbnRyb2wgKi8KLSNkZWZpbmUgU0RIX0RBVEFfQ05UICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MzAgLyogU0RIIERhdGEgQ291bnRlciAqLwotI2RlZmluZSBTREhfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkzNCAvKiBTREggU3RhdHVzICovCi0jZGVmaW5lIFNESF9TVEFUVVNfQ0xSICAgICAgICAgICAgICAgICAweEZGQzAzOTM4IC8qIFNESCBTdGF0dXMgQ2xlYXIgKi8KLSNkZWZpbmUgU0RIX01BU0swICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5M0MgLyogU0RIIEludGVycnVwdDAgTWFzayAqLwotI2RlZmluZSBTREhfTUFTSzEgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzk0MCAvKiBTREggSW50ZXJydXB0MSBNYXNrICovCi0jZGVmaW5lIFNESF9GSUZPX0NOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTQ4IC8qIFNESCBGSUZPIENvdW50ZXIgKi8KLSNkZWZpbmUgU0RIX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5ODAgLyogU0RIIERhdGEgRklGTyAqLwotI2RlZmluZSBTREhfRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlDMCAvKiBTREggRXhjZXB0aW9uIFN0YXR1cyAqLwotI2RlZmluZSBTREhfRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlDNCAvKiBTREggRXhjZXB0aW9uIE1hc2sgKi8KLSNkZWZpbmUgU0RIX0NGRyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5QzggLyogU0RIIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgU0RIX1JEX1dBSVRfRU4gICAgICAgICAgICAgICAgIDB4RkZDMDM5Q0MgLyogU0RIIFJlYWQgV2FpdCBFbmFibGUgKi8KLSNkZWZpbmUgU0RIX1BJRDAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5RDAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24wICovCi0jZGVmaW5lIFNESF9QSUQxICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUQ0IC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uMSAqLwotI2RlZmluZSBTREhfUElEMiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlEOCAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjIgKi8KLSNkZWZpbmUgU0RIX1BJRDMgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5REMgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24zICovCi0jZGVmaW5lIFNESF9QSUQ0ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUUwIC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uNCAqLwotI2RlZmluZSBTREhfUElENSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlFNCAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjUgKi8KLSNkZWZpbmUgU0RIX1BJRDYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5RTggLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb242ICovCi0jZGVmaW5lIFNESF9QSUQ3ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUVDIC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uNyAqLworLyogQkY1MTQgaXMgQkY1MTIgKyBSU0kgKi8KKyNpbmNsdWRlICJkZWZCRjUxMi5oIgogCiAvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAppbmRleCA3ZWIxODc3Li4yMmEzYWEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCkBAIC03LDEzICs3LDggQEAKICNpZm5kZWYgX0RFRl9CRjUxNl9ICiAjZGVmaW5lIF9ERUZfQkY1MTZfSAogCi0vKiBJbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+Ci0KLS8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTE2ICovCi0KLS8qIEluY2x1ZGUgZGVmQkY1MXhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjUxeCBwcm9jZXNzb3JzICovCi0jaW5jbHVkZSAiZGVmQkY1MXhfYmFzZS5oIgorLyogQkY1MTYgaXMgQkY1MTQgKyBFTUFDICovCisjaW5jbHVkZSAiZGVmQkY1MTQuaCIKIAogLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTE2IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLwogLyogMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIJKDB4RkZDMDMwMDAgLSAweEZGQzAzMUZGKSAqLwpAQCAtMzk0LDIwOCArMzg5LDQgQEAKICNkZWZpbmUJVFhfR0UxMDI0X0NOVCAgICAgMHgwMDIwMDAwMCAgICAvKiAxMDI0LU1heC1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUJVFhfQUJPUlRfQ05UICAgICAgMHgwMDQwMDAwMCAgICAvKiBUWCBGcmFtZXMgQWJvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotLyogU0RIIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIFNESF9QV1JfQ1RMICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTAwIC8qIFNESCBQb3dlciBDb250cm9sICovCi0jZGVmaW5lIFNESF9DTEtfQ1RMICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTA0IC8qIFNESCBDbG9jayBDb250cm9sICovCi0jZGVmaW5lIFNESF9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTA4IC8qIFNESCBBcmd1bWVudCAqLwotI2RlZmluZSBTREhfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkwQyAvKiBTREggQ29tbWFuZCAqLwotI2RlZmluZSBTREhfUkVTUF9DTUQgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkxMCAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLwotI2RlZmluZSBTREhfUkVTUE9OU0UwICAgICAgICAgICAgICAgICAgMHhGRkMwMzkxNCAvKiBTREggUmVzcG9uc2UwICovCi0jZGVmaW5lIFNESF9SRVNQT05TRTEgICAgICAgICAgICAgICAgICAweEZGQzAzOTE4IC8qIFNESCBSZXNwb25zZTEgKi8KLSNkZWZpbmUgU0RIX1JFU1BPTlNFMiAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MUMgLyogU0RIIFJlc3BvbnNlMiAqLwotI2RlZmluZSBTREhfUkVTUE9OU0UzICAgICAgICAgICAgICAgICAgMHhGRkMwMzkyMCAvKiBTREggUmVzcG9uc2UzICovCi0jZGVmaW5lIFNESF9EQVRBX1RJTUVSICAgICAgICAgICAgICAgICAweEZGQzAzOTI0IC8qIFNESCBEYXRhIFRpbWVyICovCi0jZGVmaW5lIFNESF9EQVRBX0xHVEggICAgICAgICAgICAgICAgICAweEZGQzAzOTI4IC8qIFNESCBEYXRhIExlbmd0aCAqLwotI2RlZmluZSBTREhfREFUQV9DVEwgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkyQyAvKiBTREggRGF0YSBDb250cm9sICovCi0jZGVmaW5lIFNESF9EQVRBX0NOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTMwIC8qIFNESCBEYXRhIENvdW50ZXIgKi8KLSNkZWZpbmUgU0RIX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MzQgLyogU0RIIFN0YXR1cyAqLwotI2RlZmluZSBTREhfU1RBVFVTX0NMUiAgICAgICAgICAgICAgICAgMHhGRkMwMzkzOCAvKiBTREggU3RhdHVzIENsZWFyICovCi0jZGVmaW5lIFNESF9NQVNLMCAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTNDIC8qIFNESCBJbnRlcnJ1cHQwIE1hc2sgKi8KLSNkZWZpbmUgU0RIX01BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5NDAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLwotI2RlZmluZSBTREhfRklGT19DTlQgICAgICAgICAgICAgICAgICAgMHhGRkMwMzk0OCAvKiBTREggRklGTyBDb3VudGVyICovCi0jZGVmaW5lIFNESF9GSUZPICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTgwIC8qIFNESCBEYXRhIEZJRk8gKi8KLSNkZWZpbmUgU0RIX0VfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5QzAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KLSNkZWZpbmUgU0RIX0VfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5QzQgLyogU0RIIEV4Y2VwdGlvbiBNYXNrICovCi0jZGVmaW5lIFNESF9DRkcgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUM4IC8qIFNESCBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFNESF9SRF9XQUlUX0VOICAgICAgICAgICAgICAgICAweEZGQzAzOUNDIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCi0jZGVmaW5lIFNESF9QSUQwICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUQwIC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uMCAqLwotI2RlZmluZSBTREhfUElEMSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlENCAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjEgKi8KLSNkZWZpbmUgU0RIX1BJRDIgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5RDggLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCi0jZGVmaW5lIFNESF9QSUQzICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOURDIC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uMyAqLwotI2RlZmluZSBTREhfUElENCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlFMCAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjQgKi8KLSNkZWZpbmUgU0RIX1BJRDUgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5RTQgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCi0jZGVmaW5lIFNESF9QSUQ2ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUU4IC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uNiAqLwotI2RlZmluZSBTREhfUElENyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlFQyAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjcgKi8KLQotLyogUmVtb3ZhYmxlIFN0b3JhZ2UgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIFJTSV9QV1JfQ09OVFJPTCAgICAgICAgICAgICAgICAweEZGQzAzODAwIC8qIFJTSSBQb3dlciBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9DTEtfQ09OVFJPTCAgICAgICAgICAgICAgICAweEZGQzAzODA0IC8qIFJTSSBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzODA4IC8qIFJTSSBBcmd1bWVudCBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzgwQyAvKiBSU0kgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfUkVTUF9DTUQgICAgICAgICAgICAgICAgICAgMHhGRkMwMzgxMCAvKiBSU0kgUmVzcG9uc2UgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfUkVTUE9OU0UwICAgICAgICAgICAgICAgICAgMHhGRkMwMzgxNCAvKiBSU0kgUmVzcG9uc2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX1JFU1BPTlNFMSAgICAgICAgICAgICAgICAgIDB4RkZDMDM4MTggLyogUlNJIFJlc3BvbnNlIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9SRVNQT05TRTIgICAgICAgICAgICAgICAgICAweEZGQzAzODFDIC8qIFJTSSBSZXNwb25zZSBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfUkVTUE9OU0UzICAgICAgICAgICAgICAgICAgMHhGRkMwMzgyMCAvKiBSU0kgUmVzcG9uc2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0RBVEFfVElNRVIgICAgICAgICAgICAgICAgIDB4RkZDMDM4MjQgLyogUlNJIERhdGEgVGltZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0RBVEFfTEdUSCAgICAgICAgICAgICAgICAgIDB4RkZDMDM4MjggLyogUlNJIERhdGEgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9EQVRBX0NPTlRST0wgICAgICAgICAgICAgICAweEZGQzAzODJDIC8qIFJTSSBEYXRhIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0RBVEFfQ05UICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4MzAgLyogUlNJIERhdGEgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzgzNCAvKiBSU0kgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9TVEFUVVNDTCAgICAgICAgICAgICAgICAgICAweEZGQzAzODM4IC8qIFJTSSBTdGF0dXMgQ2xlYXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX01BU0swICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4M0MgLyogUlNJIEludGVycnVwdCAwIE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX01BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4NDAgLyogUlNJIEludGVycnVwdCAxIE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0ZJRk9fQ05UICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4NDggLyogUlNJIEZJRk8gQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfQ0VBVEFfQ09OVFJPTCAgICAgICAgICAgICAgMHhGRkMwMzg0QyAvKiBSU0kgQ0VBVEEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4ODAgLyogUlNJIERhdGEgRklGTyBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfRVNUQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzhDMCAvKiBSU0kgRXhjZXB0aW9uIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfRU1BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzhDNCAvKiBSU0kgRXhjZXB0aW9uIE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4QzggLyogUlNJIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX1JEX1dBSVRfRU4gICAgICAgICAgICAgICAgIDB4RkZDMDM4Q0MgLyogUlNJIFJlYWQgV2FpdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX1BJRDAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRTAgLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBSU0lfUElEMSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZFNCAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAxICovCi0jZGVmaW5lIFJTSV9QSUQyICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkU4IC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgUlNJX1BJRDMgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRUMgLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgMyAqLwotI2RlZmluZSBSU0lfUElENCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGMCAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA0ICovCi0jZGVmaW5lIFJTSV9QSUQ1ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkY0IC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUgUlNJX1BJRDYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRjggLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgNiAqLwotI2RlZmluZSBSU0lfUElENyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGQyAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA3ICovCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgICBTSU5HTEUgQklUIE1BQ1JPIFBBSVJTIChiaXQgbWFzayBhbmQgbmVnYXRlZCBvbmUpICAgICAgKi8KLS8qICAgICBhbmQgTVVMVEkgQklUIFJFQUQgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfQ09NTUFORCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9JRFggIDB4M2YgICAgICAgLyogQ29tbWFuZCBJbmRleCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfUlNQICAweDQwICAgICAgIC8qIFJlc3BvbnNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDTURfTF9SU1AgIDB4ODAgICAgICAgLyogTG9uZyBSZXNwb25zZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0lOVF9FICAweDEwMCAgICAgIC8qIENvbW1hbmQgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIENNRF9QRU5EX0UgIDB4MjAwICAgICAgLyogQ29tbWFuZCBQZW5kaW5nICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01EX0UgIDB4NDAwICAgICAgLyogQ29tbWFuZCBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfUFdSX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBQV1JfT04gIDB4MyAgICAgICAgLyogUG93ZXIgT24gKi8KLSNpZiAwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUQkQgIDB4M2MgICAgICAgLyogVEJEICovCi0jZW5kaWYKLSNkZWZpbmUgICAgICAgICAgICAgICAgIFNEX0NNRF9PRCAgMHg0MCAgICAgICAvKiBPcGVuIERyYWluIE91dHB1dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBST0RfQ1RMICAweDgwICAgICAgIC8qIFJvZCBDb250cm9sICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NMS19DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0xLRElWICAweGZmICAgICAgIC8qIE1DX0NMSyBEaXZpc29yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0xLX0UgIDB4MTAwICAgICAgLyogTUNfQ0xLIEJ1cyBDbG9jayBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBQV1JfU1ZfRSAgMHgyMDAgICAgICAvKiBQb3dlciBTYXZlIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICBDTEtESVZfQllQQVNTICAweDQwMCAgICAgIC8qIEJ5cGFzcyBEaXZpc29yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgV0lERV9CVVMgIDB4ODAwICAgICAgLyogV2lkZSBCdXMgTW9kZSBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfUkVTUF9DTUQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFU1BfQ01EICAweDNmICAgICAgIC8qIFJlc3BvbnNlIENvbW1hbmQgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfREFUQV9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERUWF9FICAweDEgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERUWF9ESVIgIDB4MiAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBEaXJlY3Rpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBEVFhfTU9ERSAgMHg0ICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERUWF9ETUFfRSAgMHg4ICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIERNQSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERUWF9CTEtfTEdUSCAgMHhmMCAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEJsb2NrIExlbmd0aCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgQ01EX0NSQ19GQUlMICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0NSQ19GQUlMICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBDTURfVElNRV9PVVQgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgREFUX1RJTUVfT1VUICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBUWF9VTkRFUlJVTiAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBSWF9PVkVSUlVOICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ01EX1JFU1BfRU5EICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDTURfU0VOVCAgMHg4MCAgICAgICAvKiBDTUQgU2VudCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRfRU5EICAweDEwMCAgICAgIC8qIERhdGEgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgIFNUQVJUX0JJVF9FUlIgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgREFUX0JMS19FTkQgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX0FDVCAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9BQ1QgIDB4MTAwMCAgICAgLyogVHJhbnNtaXQgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBSWF9BQ1QgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fU1RBVCAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgUlhfRklGT19TVEFUICAweDgwMDAgICAgIC8qIFJlY2VpdmUgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fRlVMTCAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fRlVMTCAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19aRVJPICAweDQwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRW1wdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9EQVRfWkVSTyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVFhfREFUX1JEWSAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJYX0ZJRk9fUkRZICAweDIwMDAwMCAgIC8qIFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTX0NMUiAqLwotCi0jZGVmaW5lICAgICAgICAgQ01EX0NSQ19GQUlMX1NUQVQgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgIERBVF9DUkNfRkFJTF9TVEFUICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX1NUQVQgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBEQVRfVElNRU9VVF9TVEFUICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgIFRYX1VOREVSUlVOX1NUQVQgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX1NUQVQgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgIENNRF9SRVNQX0VORF9TVEFUICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgIENNRF9TRU5UX1NUQVQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX1NUQVQgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICBTVEFSVF9CSVRfRVJSX1NUQVQgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBEQVRfQkxLX0VORF9TVEFUICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kIFN0YXR1cyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9NQVNLMCAqLwotCi0jZGVmaW5lICAgICAgICAgQ01EX0NSQ19GQUlMX01BU0sgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfTUFTSyAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfTUFTSyAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICBEQVRfVElNRU9VVF9NQVNLICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9NQVNLICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fTUFTSyAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gTWFzayAqLwotI2RlZmluZSAgICAgICAgIENNRF9SRVNQX0VORF9NQVNLICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9NQVNLICAweDgwICAgICAgIC8qIENNRCBTZW50IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfTUFTSyAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBNYXNrICovCi0jZGVmaW5lICAgICAgICBTVEFSVF9CSVRfRVJSX01BU0sgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfTUFTSyAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICBDTURfQUNUX01BU0sgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVFhfQUNUX01BU0sgIDB4MTAwMCAgICAgLyogVHJhbnNtaXQgQWN0aXZlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9BQ1RfTUFTSyAgMHgyMDAwICAgICAvKiBSZWNlaXZlIEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgVFhfRklGT19TVEFUX01BU0sgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fU1RBVF9NQVNLICAweDgwMDAgICAgIC8qIFJlY2VpdmUgRklGTyBTdGF0dXMgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fRlVMTF9NQVNLICAweDEwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRnVsbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgUlhfRklGT19GVUxMX01BU0sgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fWkVST19NQVNLICAweDQwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRW1wdHkgTWFzayAqLwotI2RlZmluZSAgICAgICAgICBSWF9EQVRfWkVST19NQVNLICAweDgwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBFbXB0eSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICBUWF9EQVRfUkRZX01BU0sgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICBSWF9GSUZPX1JEWV9NQVNLICAweDIwMDAwMCAgIC8qIFJlY2VpdmUgRGF0YSBBdmFpbGFibGUgTWFzayAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9GSUZPX0NOVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIEZJRk9fQ09VTlQgIDB4N2ZmZiAgICAgLyogRklGTyBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9FX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBTRElPX0lOVF9ERVQgIDB4MiAgICAgICAgLyogU0RJTyBJbnQgRGV0ZWN0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBTRF9DQVJEX0RFVCAgMHgxMCAgICAgICAvKiBTRCBDYXJkIERldGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9FX01BU0sgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFNESU9fTVNLICAweDIgICAgICAgIC8qIE1hc2sgU0RJTyBJbnQgRGV0ZWN0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0NEX01TSyAgMHg0MCAgICAgICAvKiBNYXNrIENhcmQgRGV0ZWN0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NGRyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENMS1NfRU4gIDB4MSAgICAgICAgLyogQ2xvY2tzIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTRDRFICAweDQgICAgICAgIC8qIFNESU8gNC1CaXQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNV0UgIDB4OCAgICAgICAgLyogTW92aW5nIFdpbmRvdyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNEX1JTVCAgMHgxMCAgICAgICAvKiBTRE1NQyBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgUFVQX1NEREFUICAweDIwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFBVUF9TRERBVDMgIDB4NDAgICAgICAgLyogUHVsbC11cCBTRF9EQVQzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBQRF9TRERBVDMgIDB4ODAgICAgICAgLyogUHVsbC1kb3duIFNEX0RBVDMgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfUkRfV0FJVF9FTiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSV1IgIDB4MSAgICAgICAgLyogUmVhZCBXYWl0IFJlcXVlc3QgKi8KLQogI2VuZGlmIC8qIF9ERUZfQkY1MTZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCmluZGV4IDc5NGNmMDZlLi5jYjE4MjcwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCkBAIC03LDQ2MSArNyw4IEBACiAjaWZuZGVmIF9ERUZfQkY1MThfSAogI2RlZmluZSBfREVGX0JGNTE4X0gKIAotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUxOCAqLwotCi0vKiBJbmNsdWRlIGRlZkJGNTF4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MXggcHJvY2Vzc29ycyAqLwotI2luY2x1ZGUgImRlZkJGNTF4X2Jhc2UuaCIKLQotLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTE4IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLwotLyogMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIJKDB4RkZDMDMwMDAgLSAweEZGQzAzMUZGKSAqLwotCi0jZGVmaW5lIEVNQUNfT1BNT0RFICAgICAgICAgICAgIDB4RkZDMDMwMDAgICAgICAgLyogT3BlcmF0aW5nIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX0FERFJMTyAgICAgICAgICAgICAweEZGQzAzMDA0ICAgICAgIC8qIEFkZHJlc3MgTG93ICgzMiBMU0JzKSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19BRERSSEkgICAgICAgICAgICAgMHhGRkMwMzAwOCAgICAgICAvKiBBZGRyZXNzIEhpZ2ggKDE2IE1TQnMpIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfSEFTSExPICAgICAgICAgICAgIDB4RkZDMDMwMEMgICAgICAgLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93IChCaW5zIDMxLTApIFJlZ2lzdGVyICAgICAgICAqLwotI2RlZmluZSBFTUFDX0hBU0hISSAgICAgICAgICAgICAweEZGQzAzMDEwICAgICAgIC8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIEhpZ2ggKEJpbnMgNjMtMzIpIFJlZ2lzdGVyICAgICAgKi8KLSNkZWZpbmUgRU1BQ19TVEFBREQgICAgICAgICAgICAgMHhGRkMwMzAxNCAgICAgICAvKiBTdGF0aW9uIE1hbmFnZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfU1RBREFUICAgICAgICAgICAgIDB4RkZDMDMwMTggICAgICAgLyogU3RhdGlvbiBNYW5hZ2VtZW50IERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX0ZMQyAgICAgICAgICAgICAgICAweEZGQzAzMDFDICAgICAgIC8qIEZsb3cgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19WTEFOMSAgICAgICAgICAgICAgMHhGRkMwMzAyMCAgICAgICAvKiBWTEFOMSBUYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVkxBTjIgICAgICAgICAgICAgIDB4RkZDMDMwMjQgICAgICAgLyogVkxBTjIgVGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1dLVVBfQ1RMICAgICAgICAgICAweEZGQzAzMDJDICAgICAgIC8qIFdha2UtVXAgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19XS1VQX0ZGTVNLMCAgICAgICAgMHhGRkMwMzAzMCAgICAgICAvKiBXYWtlLVVwIEZyYW1lIEZpbHRlciAwIEJ5dGUgTWFzayBSZWdpc3RlciAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfV0tVUF9GRk1TSzEgICAgICAgIDB4RkZDMDMwMzQgICAgICAgLyogV2FrZS1VcCBGcmFtZSBGaWx0ZXIgMSBCeXRlIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1dLVVBfRkZNU0syICAgICAgICAweEZGQzAzMDM4ICAgICAgIC8qIFdha2UtVXAgRnJhbWUgRmlsdGVyIDIgQnl0ZSBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19XS1VQX0ZGTVNLMyAgICAgICAgMHhGRkMwMzAzQyAgICAgICAvKiBXYWtlLVVwIEZyYW1lIEZpbHRlciAzIEJ5dGUgTWFzayBSZWdpc3RlciAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfV0tVUF9GRkNNRCAgICAgICAgIDB4RkZDMDMwNDAgICAgICAgLyogV2FrZS1VcCBGcmFtZSBGaWx0ZXIgQ29tbWFuZHMgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1dLVVBfRkZPRkYgICAgICAgICAweEZGQzAzMDQ0ICAgICAgIC8qIFdha2UtVXAgRnJhbWUgRmlsdGVyIE9mZnNldHMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19XS1VQX0ZGQ1JDMCAgICAgICAgMHhGRkMwMzA0OCAgICAgICAvKiBXYWtlLVVwIEZyYW1lIEZpbHRlciAwLDEgQ1JDLTE2IFJlZ2lzdGVyICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfV0tVUF9GRkNSQzEgICAgICAgIDB4RkZDMDMwNEMgICAgICAgLyogV2FrZS1VcCBGcmFtZSBGaWx0ZXIgMiwzIENSQy0xNiBSZWdpc3RlciAgICAgICAgICAgICAqLwotCi0jZGVmaW5lIEVNQUNfU1lTQ1RMICAgICAgICAgICAgIDB4RkZDMDMwNjAgICAgICAgLyogRU1BQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1NZU1RBVCAgICAgICAgICAgICAweEZGQzAzMDY0ICAgICAgIC8qIEVNQUMgU3lzdGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWF9TVEFUICAgICAgICAgICAgMHhGRkMwMzA2OCAgICAgICAvKiBSWCBDdXJyZW50IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhfU1RLWSAgICAgICAgICAgIDB4RkZDMDMwNkMgICAgICAgLyogUlggU3RpY2t5IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYX0lSUUUgICAgICAgICAgICAweEZGQzAzMDcwICAgICAgIC8qIFJYIEZyYW1lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlcyBSZWdpc3RlciAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWF9TVEFUICAgICAgICAgICAgMHhGRkMwMzA3NCAgICAgICAvKiBUWCBDdXJyZW50IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhfU1RLWSAgICAgICAgICAgIDB4RkZDMDMwNzggICAgICAgLyogVFggU3RpY2t5IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1RYX0lSUUUgICAgICAgICAgICAweEZGQzAzMDdDICAgICAgIC8qIFRYIEZyYW1lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlcyBSZWdpc3RlciAgICAgICAgICAgKi8KLQotI2RlZmluZSBFTUFDX01NQ19DVEwgICAgICAgICAgICAweEZGQzAzMDgwICAgICAgIC8qIE1NQyBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19NTUNfUklSUVMgICAgICAgICAgMHhGRkMwMzA4NCAgICAgICAvKiBNTUMgUlggSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfTU1DX1JJUlFFICAgICAgICAgIDB4RkZDMDMwODggICAgICAgLyogTU1DIFJYIEludGVycnVwdCBFbmFibGVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX01NQ19USVJRUyAgICAgICAgICAweEZGQzAzMDhDICAgICAgIC8qIE1NQyBUWCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19NTUNfVElSUUUgICAgICAgICAgMHhGRkMwMzA5MCAgICAgICAvKiBNTUMgVFggSW50ZXJydXB0IEVuYWJsZXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgRU1BQ19SWENfT0sgICAgICAgICAgICAgMHhGRkMwMzEwMCAgICAgICAvKiBSWCBGcmFtZSBTdWNjZXNzZnVsIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX0ZDUyAgICAgICAgICAgIDB4RkZDMDMxMDQgICAgICAgLyogUlggRnJhbWUgRkNTIEZhaWx1cmUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19BTElHTiAgICAgICAgICAweEZGQzAzMTA4ICAgICAgIC8qIFJYIEFsaWdubWVudCBFcnJvciBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfT0NURVQgICAgICAgICAgMHhGRkMwMzEwQyAgICAgICAvKiBSWCBPY3RldHMgU3VjY2Vzc2Z1bGx5IFJlY2VpdmVkIENvdW50ICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX0RNQU9WRiAgICAgICAgIDB4RkZDMDMxMTAgICAgICAgLyogSW50ZXJuYWwgTUFDIFN1YmxheWVyIEVycm9yIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19VTklDU1QgICAgICAgICAweEZGQzAzMTE0ICAgICAgIC8qIFVuaWNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfTVVMVEkgICAgICAgICAgMHhGRkMwMzExOCAgICAgICAvKiBNdWx0aWNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX0JST0FEICAgICAgICAgIDB4RkZDMDMxMUMgICAgICAgLyogQnJvYWRjYXN0IFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19MTkVSUkkgICAgICAgICAweEZGQzAzMTIwICAgICAgIC8qIFJYIEZyYW1lIEluIFJhbmdlIEVycm9yIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfTE5FUlJPICAgICAgICAgMHhGRkMwMzEyNCAgICAgICAvKiBSWCBGcmFtZSBPdXQgT2YgUmFuZ2UgRXJyb3IgQ291bnQgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX0xPTkcgICAgICAgICAgIDB4RkZDMDMxMjggICAgICAgLyogUlggRnJhbWUgVG9vIExvbmcgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19NQUNDVEwgICAgICAgICAweEZGQzAzMTJDICAgICAgIC8qIE1BQyBDb250cm9sIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfT1BDT0RFICAgICAgICAgMHhGRkMwMzEzMCAgICAgICAvKiBVbnN1cHBvcnRlZCBPcC1Db2RlIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX1BBVVNFICAgICAgICAgIDB4RkZDMDMxMzQgICAgICAgLyogTUFDIENvbnRyb2wgUGF1c2UgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19BTExGUk0gICAgICAgICAweEZGQzAzMTM4ICAgICAgIC8qIE92ZXJhbGwgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfQUxMT0NUICAgICAgICAgMHhGRkMwMzEzQyAgICAgICAvKiBPdmVyYWxsIFJYIE9jdGV0IENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX1RZUEVEICAgICAgICAgIDB4RkZDMDMxNDAgICAgICAgLyogVHlwZS9MZW5ndGggQ29uc2lzdGVudCBSWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19TSE9SVCAgICAgICAgICAweEZGQzAzMTQ0ICAgICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50IENvdW50IC0gQnl0ZSBDb3VudCB4IDwgNjQgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfRVE2NCAgICAgICAgICAgMHhGRkMwMzE0OCAgICAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCB4ID0gNjQgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX0xUMTI4ICAgICAgICAgIDB4RkZDMDMxNEMgICAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgIDY0IDwgeCA8IDEyOCAgICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19MVDI1NiAgICAgICAgICAweEZGQzAzMTUwICAgICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDEyOCA8PSB4IDwgMjU2ICAgICAgKi8KLSNkZWZpbmUgRU1BQ19SWENfTFQ1MTIgICAgICAgICAgMHhGRkMwMzE1NCAgICAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAyNTYgPD0geCA8IDUxMiAgICAgICovCi0jZGVmaW5lIEVNQUNfUlhDX0xUMTAyNCAgICAgICAgIDB4RkZDMDMxNTggICAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgNTEyIDw9IHggPCAxMDI0ICAgICAqLwotI2RlZmluZSBFTUFDX1JYQ19HRTEwMjQgICAgICAgICAweEZGQzAzMTVDICAgICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPj0gMTAyNCAgICAgICAgICAgKi8KLQotI2RlZmluZSBFTUFDX1RYQ19PSyAgICAgICAgICAgICAweEZGQzAzMTgwICAgICAgIC8qIFRYIEZyYW1lIFN1Y2Nlc3NmdWwgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDXzFDT0wgICAgICAgICAgIDB4RkZDMDMxODQgICAgICAgLyogVFggRnJhbWVzIFN1Y2Nlc3NmdWwgQWZ0ZXIgU2luZ2xlIENvbGxpc2lvbiBDb3VudCAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfR1QxQ09MICAgICAgICAgMHhGRkMwMzE4OCAgICAgICAvKiBUWCBGcmFtZXMgU3VjY2Vzc2Z1bCBBZnRlciBNdWx0aXBsZSBDb2xsaXNpb25zIENvdW50ICAqLwotI2RlZmluZSBFTUFDX1RYQ19PQ1RFVCAgICAgICAgICAweEZGQzAzMThDICAgICAgIC8qIFRYIE9jdGV0cyBTdWNjZXNzZnVsbHkgUmVjZWl2ZWQgQ291bnQgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX0RFRkVSICAgICAgICAgIDB4RkZDMDMxOTAgICAgICAgLyogVFggRnJhbWUgRGVsYXllZCBEdWUgVG8gQnVzeSBDb3VudCAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfTEFURUNMICAgICAgICAgMHhGRkMwMzE5NCAgICAgICAvKiBMYXRlIFRYIENvbGxpc2lvbnMgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1RYQ19YU19DT0wgICAgICAgICAweEZGQzAzMTk4ICAgICAgIC8qIFRYIEZyYW1lIEZhaWxlZCBEdWUgVG8gRXhjZXNzaXZlIENvbGxpc2lvbnMgQ291bnQgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX0RNQVVORCAgICAgICAgIDB4RkZDMDMxOUMgICAgICAgLyogSW50ZXJuYWwgTUFDIFN1YmxheWVyIEVycm9yIFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfQ1JTRVJSICAgICAgICAgMHhGRkMwMzFBMCAgICAgICAvKiBDYXJyaWVyIFNlbnNlIERlYXNzZXJ0ZWQgRHVyaW5nIFRYIEZyYW1lIENvdW50ICAgICAgICAqLwotI2RlZmluZSBFTUFDX1RYQ19VTklDU1QgICAgICAgICAweEZGQzAzMUE0ICAgICAgIC8qIFVuaWNhc3QgVFggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX01VTFRJICAgICAgICAgIDB4RkZDMDMxQTggICAgICAgLyogTXVsdGljYXN0IFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfQlJPQUQgICAgICAgICAgMHhGRkMwMzFBQyAgICAgICAvKiBCcm9hZGNhc3QgVFggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1RYQ19YU19ERlIgICAgICAgICAweEZGQzAzMUIwICAgICAgIC8qIFRYIEZyYW1lcyBXaXRoIEV4Y2Vzc2l2ZSBEZWZlcnJhbCBDb3VudCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX01BQ0NUTCAgICAgICAgIDB4RkZDMDMxQjQgICAgICAgLyogTUFDIENvbnRyb2wgVFggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfQUxMRlJNICAgICAgICAgMHhGRkMwMzFCOCAgICAgICAvKiBPdmVyYWxsIFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBFTUFDX1RYQ19BTExPQ1QgICAgICAgICAweEZGQzAzMUJDICAgICAgIC8qIE92ZXJhbGwgVFggT2N0ZXQgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX0VRNjQgICAgICAgICAgIDB4RkZDMDMxQzAgICAgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgeCA9IDY0ICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfTFQxMjggICAgICAgICAgMHhGRkMwMzFDNCAgICAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAgNjQgPCB4IDwgMTI4ICAgICAgICAqLwotI2RlZmluZSBFTUFDX1RYQ19MVDI1NiAgICAgICAgICAweEZGQzAzMUM4ICAgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDEyOCA8PSB4IDwgMjU2ICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX0xUNTEyICAgICAgICAgIDB4RkZDMDMxQ0MgICAgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgMjU2IDw9IHggPCA1MTIgICAgICAgKi8KLSNkZWZpbmUgRU1BQ19UWENfTFQxMDI0ICAgICAgICAgMHhGRkMwMzFEMCAgICAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCA1MTIgPD0geCA8IDEwMjQgICAgICAqLwotI2RlZmluZSBFTUFDX1RYQ19HRTEwMjQgICAgICAgICAweEZGQzAzMUQ0ICAgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPj0gMTAyNCAgICAgICAgICAgICovCi0jZGVmaW5lIEVNQUNfVFhDX0FCT1JUICAgICAgICAgIDB4RkZDMDMxRDggICAgICAgLyogVG90YWwgVFggRnJhbWVzIEFib3J0ZWQgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogTGlzdGluZyBmb3IgSUVFRS1TdXBwb3J0ZWQgQ291bnQgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgRnJhbWVzUmVjZWl2ZWRPSyAgICAgICAgICAgICAgICBFTUFDX1JYQ19PSyAgICAgICAgLyogUlggRnJhbWUgU3VjY2Vzc2Z1bCBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgICAgICAgIEVNQUNfUlhDX0ZDUyAgICAgICAvKiBSWCBGcmFtZSBGQ1MgRmFpbHVyZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEFsaWdubWVudEVycm9ycyAgICAgICAgICAgICAgICAgRU1BQ19SWENfQUxJR04gICAgIC8qIFJYIEFsaWdubWVudCBFcnJvciBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT2N0ZXRzUmVjZWl2ZWRPSyAgICAgICAgICAgICAgICBFTUFDX1JYQ19PQ1RFVCAgICAgLyogUlggT2N0ZXRzIFN1Y2Nlc3NmdWxseSBSZWNlaXZlZCBDb3VudCAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAgIEVNQUNfUlhDX0RNQU9WRiAgICAvKiBJbnRlcm5hbCBNQUMgU3VibGF5ZXIgRXJyb3IgUlggRnJhbWUgQ291bnQgICAgICAgICAgICovCi0jZGVmaW5lIFVuaWNhc3RGcmFtZXNSZWNlaXZlZE9LICAgICAgICAgRU1BQ19SWENfVU5JQ1NUICAgIC8qIFVuaWNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyAgICAgICBFTUFDX1JYQ19NVUxUSSAgICAgLyogTXVsdGljYXN0IFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LICAgICAgIEVNQUNfUlhDX0JST0FEICAgICAvKiBCcm9hZGNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEluUmFuZ2VMZW5ndGhFcnJvcnMgICAgICAgICAgICAgRU1BQ19SWENfTE5FUlJJICAgIC8qIFJYIEZyYW1lIEluIFJhbmdlIEVycm9yIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT3V0T2ZSYW5nZUxlbmd0aEZpZWxkICAgICAgICAgICBFTUFDX1JYQ19MTkVSUk8gICAgLyogUlggRnJhbWUgT3V0IE9mIFJhbmdlIEVycm9yIENvdW50ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGcmFtZVRvb0xvbmdFcnJvcnMgICAgICAgICAgICAgIEVNQUNfUlhDX0xPTkcgICAgICAvKiBSWCBGcmFtZSBUb28gTG9uZyBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCAgICAgICAgRU1BQ19SWENfTUFDQ1RMICAgIC8qIE1BQyBDb250cm9sIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgICAgICBFTUFDX1JYQ19PUENPREUgICAgLyogVW5zdXBwb3J0ZWQgT3AtQ29kZSBSWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQQVVTRU1BQ0N0cmxGcmFtZXNSZWNlaXZlZCAgICAgIEVNQUNfUlhDX1BBVVNFICAgICAvKiBNQUMgQ29udHJvbCBQYXVzZSBSWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZyYW1lc1JlY2VpdmVkQWxsICAgICAgICAgICAgICAgRU1BQ19SWENfQUxMRlJNICAgIC8qIE92ZXJhbGwgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgT2N0ZXRzUmVjZWl2ZWRBbGwgICAgICAgICAgICAgICBFTUFDX1JYQ19BTExPQ1QgICAgLyogT3ZlcmFsbCBSWCBPY3RldCBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUeXBlZEZyYW1lc1JlY2VpdmVkICAgICAgICAgICAgIEVNQUNfUlhDX1RZUEVEICAgICAvKiBUeXBlL0xlbmd0aCBDb25zaXN0ZW50IFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZyYW1lc0xlbkx0NjRSZWNlaXZlZCAgICAgICAgICAgRU1BQ19SWENfU0hPUlQgICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50IENvdW50IC0gQnl0ZSBDb3VudCB4IDwgNjQgICAgICAgICAgKi8KLSNkZWZpbmUgRnJhbWVzTGVuRXE2NFJlY2VpdmVkICAgICAgICAgICBFTUFDX1JYQ19FUTY0ICAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgeCA9IDY0ICAgICAgICAgICAgICAqLwotI2RlZmluZSBGcmFtZXNMZW42NV8xMjdSZWNlaXZlZCAgICAgICAgIEVNQUNfUlhDX0xUMTI4ICAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAgNjQgPCB4IDwgMTI4ICAgICAgICovCi0jZGVmaW5lIEZyYW1lc0xlbjEyOF8yNTVSZWNlaXZlZCAgICAgICAgRU1BQ19SWENfTFQyNTYgICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDEyOCA8PSB4IDwgMjU2ICAgICAgKi8KLSNkZWZpbmUgRnJhbWVzTGVuMjU2XzUxMVJlY2VpdmVkICAgICAgICBFTUFDX1JYQ19MVDUxMiAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgMjU2IDw9IHggPCA1MTIgICAgICAqLwotI2RlZmluZSBGcmFtZXNMZW41MTJfMTAyM1JlY2VpdmVkICAgICAgIEVNQUNfUlhDX0xUMTAyNCAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCA1MTIgPD0geCA8IDEwMjQgICAgICovCi0jZGVmaW5lIEZyYW1lc0xlbjEwMjRfTWF4UmVjZWl2ZWQgICAgICAgRU1BQ19SWENfR0UxMDI0ICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPj0gMTAyNCAgICAgICAgICAgKi8KLQotI2RlZmluZSBGcmFtZXNUcmFuc21pdHRlZE9LICAgICAgICAgICAgIEVNQUNfVFhDX09LICAgICAgICAvKiBUWCBGcmFtZSBTdWNjZXNzZnVsIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNpbmdsZUNvbGxpc2lvbkZyYW1lcyAgICAgICAgICAgRU1BQ19UWENfMUNPTCAgICAgIC8qIFRYIEZyYW1lcyBTdWNjZXNzZnVsIEFmdGVyIFNpbmdsZSBDb2xsaXNpb24gQ291bnQgICAgKi8KLSNkZWZpbmUgTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMgICAgICAgICBFTUFDX1RYQ19HVDFDT0wgICAgLyogVFggRnJhbWVzIFN1Y2Nlc3NmdWwgQWZ0ZXIgTXVsdGlwbGUgQ29sbGlzaW9ucyBDb3VudCAqLwotI2RlZmluZSBPY3RldHNUcmFuc21pdHRlZE9LICAgICAgICAgICAgIEVNQUNfVFhDX09DVEVUICAgICAvKiBUWCBPY3RldHMgU3VjY2Vzc2Z1bGx5IFJlY2VpdmVkIENvdW50ICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyAgICAgRU1BQ19UWENfREVGRVIgICAgIC8qIFRYIEZyYW1lIERlbGF5ZWQgRHVlIFRvIEJ1c3kgQ291bnQgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTGF0ZUNvbGxpc2lvbnMgICAgICAgICAgICAgICAgICBFTUFDX1RYQ19MQVRFQ0wgICAgLyogTGF0ZSBUWCBDb2xsaXNpb25zIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzICAgICAgIEVNQUNfVFhDX1hTX0NPTCAgICAvKiBUWCBGcmFtZSBGYWlsZWQgRHVlIFRvIEV4Y2Vzc2l2ZSBDb2xsaXNpb25zIENvdW50ICAgICovCi0jZGVmaW5lIEZyYW1lc0xvc3REdWVUb0ludE1hY1htaXRFcnJvciAgRU1BQ19UWENfRE1BVU5EICAgIC8qIEludGVybmFsIE1BQyBTdWJsYXllciBFcnJvciBUWCBGcmFtZSBDb3VudCAgICAgICAgICAgKi8KLSNkZWZpbmUgQ2FycmllclNlbnNlRXJyb3JzICAgICAgICAgICAgICBFTUFDX1RYQ19DUlNFUlIgICAgLyogQ2FycmllciBTZW5zZSBEZWFzc2VydGVkIER1cmluZyBUWCBGcmFtZSBDb3VudCAgICAgICAqLwotI2RlZmluZSBVbmljYXN0RnJhbWVzWG1pdHRlZE9LICAgICAgICAgIEVNQUNfVFhDX1VOSUNTVCAgICAvKiBVbmljYXN0IFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyAgICAgICAgRU1BQ19UWENfTVVMVEkgICAgIC8qIE11bHRpY2FzdCBUWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LICAgICAgICBFTUFDX1RYQ19CUk9BRCAgICAgLyogQnJvYWRjYXN0IFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgICAgIEVNQUNfVFhDX1hTX0RGUiAgICAvKiBUWCBGcmFtZXMgV2l0aCBFeGNlc3NpdmUgRGVmZXJyYWwgQ291bnQgICAgICAgICAgICAgICovCi0jZGVmaW5lIE1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCAgICAgRU1BQ19UWENfTUFDQ1RMICAgIC8qIE1BQyBDb250cm9sIFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRnJhbWVzVHJhbnNtaXR0ZWRBbGwgICAgICAgICAgICBFTUFDX1RYQ19BTExGUk0gICAgLyogT3ZlcmFsbCBUWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBPY3RldHNUcmFuc21pdHRlZEFsbCAgICAgICAgICAgIEVNQUNfVFhDX0FMTE9DVCAgICAvKiBPdmVyYWxsIFRYIE9jdGV0IENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZyYW1lc0xlbkVxNjRUcmFuc21pdHRlZCAgICAgICAgRU1BQ19UWENfRVE2NCAgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPSA2NCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRnJhbWVzTGVuNjVfMTI3VHJhbnNtaXR0ZWQgICAgICBFTUFDX1RYQ19MVDEyOCAgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgIDY0IDwgeCA8IDEyOCAgICAgICAqLwotI2RlZmluZSBGcmFtZXNMZW4xMjhfMjU1VHJhbnNtaXR0ZWQgICAgIEVNQUNfVFhDX0xUMjU2ICAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAxMjggPD0geCA8IDI1NiAgICAgICovCi0jZGVmaW5lIEZyYW1lc0xlbjI1Nl81MTFUcmFuc21pdHRlZCAgICAgRU1BQ19UWENfTFQ1MTIgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDI1NiA8PSB4IDwgNTEyICAgICAgKi8KLSNkZWZpbmUgRnJhbWVzTGVuNTEyXzEwMjNUcmFuc21pdHRlZCAgICBFTUFDX1RYQ19MVDEwMjQgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgNTEyIDw9IHggPCAxMDI0ICAgICAqLwotI2RlZmluZSBGcmFtZXNMZW4xMDI0X01heFRyYW5zbWl0dGVkICAgIEVNQUNfVFhDX0dFMTAyNCAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCB4ID49IDEwMjQgICAgICAgICAgICovCi0jZGVmaW5lIFR4QWJvcnRlZEZyYW1lcyAgICAgICAgICAgICAgICAgRU1BQ19UWENfQUJPUlQgICAgIC8qIFRvdGFsIFRYIEZyYW1lcyBBYm9ydGVkIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiBTeXN0ZW0gTU1SIFJlZ2lzdGVyIEJpdHMgQW5kIE1hY3JvcwotKioKLSoqIERpc2NsYWltZXI6CUFsbCBtYWNyb3MgYXJlIGludGVuZGVkIHRvIG1ha2UgQyBhbmQgQXNzZW1ibHkgY29kZSBtb3JlIHJlYWRhYmxlLgotKioJCQkJVXNlIHRoZXNlIG1hY3JvcyBjYXJlZnVsbHksIGFzIGFueSB0aGF0IGRvIGxlZnQgc2hpZnRzIGZvciBmaWVsZAotKioJCQkJZGVwb3NpdGluZyB3aWxsIHJlc3VsdCBpbiB0aGUgbG93ZXIgb3JkZXIgYml0cyBiZWluZyBkZXN0cm95ZWQuICBBbnkKLSoqCQkJCW1hY3JvIHRoYXQgc2hpZnRzIGxlZnQgdG8gcHJvcGVybHkgcG9zaXRpb24gdGhlIGJpdC1maWVsZCBzaG91bGQgYmUKLSoqCQkJCXVzZWQgYXMgcGFydCBvZiBhbiBPUiB0byBpbml0aWFsaXplIGEgcmVnaXN0ZXIgYW5kIE5PVCBhcyBhIGR5bmFtaWMKLSoqCQkJCW1vZGlmaWVyIFVOTEVTUyB0aGUgbG93ZXIgb3JkZXIgYml0cyBhcmUgc2F2ZWQgYW5kIE9SZWQgYmFjayBpbiB3aGVuCi0qKgkJCQl0aGUgbWFjcm8gaXMgdXNlZC4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKiogIEVUSEVSTkVUIDEwLzEwMCBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEVNQUNfT1BNT0RFIE1hc2tzICovCi0KLSNkZWZpbmUJUkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUFTVFAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAgICAvKiBFbmFibGUgQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgT24gUlggRnJhbWVzICAgICAgICAqLwotI2RlZmluZQlIVSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAgICAgLyogSGFzaCBGaWx0ZXIgVW5pY2FzdCBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJSE0gICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgICAgIC8qIEhhc2ggRmlsdGVyIE11bHRpY2FzdCBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVBBTSAgICAgICAgICAgICAgICAweDAwMDAwMDQwICAgICAvKiBQYXNzLUFsbC1NdWx0aWNhc3QgTW9kZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlQUiAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MCAgICAgLyogUHJvbWlzY3VvdXMgTW9kZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJSUZFICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgICAgIC8qIEludmVyc2UgRmlsdGVyaW5nIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCURCRiAgICAgICAgICAgICAgICAweDAwMDAwMjAwICAgICAvKiBEaXNhYmxlIEJyb2FkY2FzdCBGcmFtZSBSZWNlcHRpb24gICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlQQkYgICAgICAgICAgICAgICAgMHgwMDAwMDQwMCAgICAgLyogUGFzcyBCYWQgRnJhbWVzIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUFNGICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAgICAgIC8qIFBhc3MgU2hvcnQgRnJhbWVzIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVJBRiAgICAgICAgICAgICAgICAweDAwMDAxMDAwICAgICAvKiBSZWNlaXZlLUFsbCBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlURSAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMCAgICAgLyogVHJhbnNtaXR0ZXIgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJRFRYUEFEICAgICAgICAgICAgIDB4MDAwMjAwMDAgICAgIC8qIERpc2FibGUgQXV0b21hdGljIFRYIFBhZGRpbmcgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCURUWENSQyAgICAgICAgICAgICAweDAwMDQwMDAwICAgICAvKiBEaXNhYmxlIEF1dG9tYXRpYyBUWCBDUkMgR2VuZXJhdGlvbiAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlEQyAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMCAgICAgLyogRGVmZXJyYWwgQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQk9MTVQgICAgICAgICAgICAgIDB4MDAzMDAwMDAgICAgIC8qIEJhY2stT2ZmIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUJPTE1UXzEwICAgICAgICAgICAweDAwMDAwMDAwICAgICAvKgkJMTAtYml0IHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUJPTE1UXzggICAgICAgICAgICAweDAwMTAwMDAwICAgICAvKgkJOC1iaXQgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUJPTE1UXzQgICAgICAgICAgICAweDAwMjAwMDAwICAgICAvKgkJNC1iaXQgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUJPTE1UXzEgICAgICAgICAgICAweDAwMzAwMDAwICAgICAvKgkJMS1iaXQgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCURSVFkgICAgICAgICAgICAgICAweDAwNDAwMDAwICAgICAvKiBEaXNhYmxlIFRYIFJldHJ5IE9uIENvbGxpc2lvbiAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlMQ1RSRSAgICAgICAgICAgICAgMHgwMDgwMDAwMCAgICAgLyogRW5hYmxlIFRYIFJldHJ5IE9uIExhdGUgQ29sbGlzaW9uICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUk1JSSAgICAgICAgICAgICAgIDB4MDEwMDAwMDAgICAgIC8qIFJNSUkvTUlJKiBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVJNSUlfMTAgICAgICAgICAgICAweDAyMDAwMDAwICAgICAvKiBTcGVlZCBTZWxlY3QgZm9yIFJNSUkgUG9ydCAoMTBNQml0LzEwME1CaXQqKSAgICAgICAqLwotI2RlZmluZQlGRE1PREUgICAgICAgICAgICAgMHgwNDAwMDAwMCAgICAgLyogRHVwbGV4IE1vZGUgRW5hYmxlIChGdWxsL0hhbGYqKSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJTEIgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAgICAgIC8qIEludGVybmFsIExvb3BiYWNrIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCURSTyAgICAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAvKiBEaXNhYmxlIFJlY2VpdmUgT3duIEZyYW1lcyAoSGFsZi1EdXBsZXggTW9kZSkgICAgICAqLwotCi0vKiBFTUFDX1NUQUFERCBNYXNrcyAqLwotCi0jZGVmaW5lCVNUQUJVU1kgICAgICAgICAgICAweDAwMDAwMDAxICAgICAvKiBJbml0aWF0ZSBTdGF0aW9uIE1ndCBSZWcgQWNjZXNzIC8gU1RBIEJ1c3kgU3RhdCAgICAqLwotI2RlZmluZQlTVEFPUCAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAgLyogU3RhdGlvbiBNYW5hZ2VtZW50IE9wZXJhdGlvbiBDb2RlIChXcml0ZS9SZWFkKikgICAgKi8KLSNkZWZpbmUJU1RBRElTUFJFICAgICAgICAgIDB4MDAwMDAwMDQgICAgIC8qIERpc2FibGUgUHJlYW1ibGUgR2VuZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNUQUlFICAgICAgICAgICAgICAweDAwMDAwMDA4ICAgICAvKiBTdGF0aW9uIE1ndC4gVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAqLwotI2RlZmluZQlSRUdBRCAgICAgICAgICAgICAgMHgwMDAwMDdDMCAgICAgLyogU1RBIFJlZ2lzdGVyIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUEhZQUQgICAgICAgICAgICAgIDB4MDAwMEY4MDAgICAgIC8qIFBIWSBEZXZpY2UgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUJU0VUX1JFR0FEKHgpICgoKHgpJjB4MUYpPDwgIDYgKSAgIC8qIFNldCBTVEEgUmVnaXN0ZXIgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNFVF9QSFlBRCh4KSAoKCh4KSYweDFGKTw8IDExICkgICAvKiBTZXQgUEhZIERldmljZSBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBFTUFDX1NUQURBVCBNYXNrICovCi0KLSNkZWZpbmUJU1RBREFUQSAgICAgICAgICAgIDB4MDAwMEZGRkYgICAgIC8qIFN0YXRpb24gTWFuYWdlbWVudCBEYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIEVNQUNfRkxDIE1hc2tzICovCi0KLSNkZWZpbmUJRkxDQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgIC8qIFNlbmQgRmxvdyBDdHJsIEZyYW1lIC8gRmxvdyBDdHJsIEJ1c3kgU3RhdHVzICAgICAgICovCi0jZGVmaW5lCUZMQ0UgICAgICAgICAgICAgICAweDAwMDAwMDAyICAgICAvKiBGbG93IENvbnRyb2wgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlQQ0YgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgICAgLyogUGFzcyBDb250cm9sIEZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQktQUlNFTiAgICAgICAgICAgIDB4MDAwMDAwMDggICAgIC8qIEVuYWJsZSBCYWNrcHJlc3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUZMQ1BBVVNFICAgICAgICAgICAweEZGRkYwMDAwICAgICAvKiBQYXVzZSBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jZGVmaW5lCVNFVF9GTENQQVVTRSh4KSAoKCh4KSYweEZGRkYpPDwgMTYpIC8qIFNldCBQYXVzZSBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBFTUFDX1dLVVBfQ1RMIE1hc2tzICovCi0KLSNkZWZpbmUJQ0FQV0tGUk0gICAgICAgICAgIDB4MDAwMDAwMDEgICAgLyogQ2FwdHVyZSBXYWtlLVVwIEZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCU1QS0UgICAgICAgICAgICAgICAweDAwMDAwMDAyICAgIC8qIE1hZ2ljIFBhY2tldCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSV0tFICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBSZW1vdGUgV2FrZS1VcCBGcmFtZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJR1VXS0UgICAgICAgICAgICAgIDB4MDAwMDAwMDggICAgLyogR2xvYmFsIFVuaWNhc3QgV2FrZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCU1QS1MgICAgICAgICAgICAgICAweDAwMDAwMDIwICAgIC8qIE1hZ2ljIFBhY2tldCBSZWNlaXZlZCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSV0tTICAgICAgICAgICAgICAgMHgwMDAwMEYwMCAgICAvKiBXYWtlLVVwIEZyYW1lIFJlY2VpdmVkIFN0YXR1cywgRmlsdGVycyAzOjAgICAgICAgICAgKi8KLQotLyogRU1BQ19XS1VQX0ZGQ01EIE1hc2tzICovCi0KLSNkZWZpbmUJV0YwX0UgICAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgLyogRW5hYmxlIFdha2UtVXAgRmlsdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlXRjBfVCAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiBXYWtlLVVwIEZpbHRlciAwIEFkZHIgVHlwZSAoTXVsdGljYXN0L1VuaWNhc3QqKSAgICAgICovCi0jZGVmaW5lCVdGMV9FICAgICAgICAgICAgICAweDAwMDAwMTAwICAgIC8qIEVuYWJsZSBXYWtlLVVwIEZpbHRlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJV0YxX1QgICAgICAgICAgICAgIDB4MDAwMDA4MDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMSBBZGRyIFR5cGUgKE11bHRpY2FzdC9VbmljYXN0KikgICAgICAqLwotI2RlZmluZQlXRjJfRSAgICAgICAgICAgICAgMHgwMDAxMDAwMCAgICAvKiBFbmFibGUgV2FrZS1VcCBGaWx0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVdGMl9UICAgICAgICAgICAgICAweDAwMDgwMDAwICAgIC8qIFdha2UtVXAgRmlsdGVyIDIgQWRkciBUeXBlIChNdWx0aWNhc3QvVW5pY2FzdCopICAgICAgKi8KLSNkZWZpbmUJV0YzX0UgICAgICAgICAgICAgIDB4MDEwMDAwMDAgICAgLyogRW5hYmxlIFdha2UtVXAgRmlsdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlXRjNfVCAgICAgICAgICAgICAgMHgwODAwMDAwMCAgICAvKiBXYWtlLVVwIEZpbHRlciAzIEFkZHIgVHlwZSAoTXVsdGljYXN0L1VuaWNhc3QqKSAgICAgICovCi0KLS8qIEVNQUNfV0tVUF9GRk9GRiBNYXNrcyAqLwotCi0jZGVmaW5lCVdGMF9PRkYgICAgICAgICAgICAweDAwMDAwMEZGICAgIC8qIFdha2UtVXAgRmlsdGVyIDAgUGF0dGVybiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJV0YxX09GRiAgICAgICAgICAgIDB4MDAwMEZGMDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMSBQYXR0ZXJuIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlXRjJfT0ZGICAgICAgICAgICAgMHgwMEZGMDAwMCAgICAvKiBXYWtlLVVwIEZpbHRlciAyIFBhdHRlcm4gT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVdGM19PRkYgICAgICAgICAgICAweEZGMDAwMDAwICAgIC8qIFdha2UtVXAgRmlsdGVyIDMgUGF0dGVybiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZQlTRVRfV0YwX09GRih4KSAoKCh4KSYweEZGKTw8ICAwICkgLyogU2V0IFdha2UtVXAgRmlsdGVyIDAgQnl0ZSBPZmZzZXQgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNFVF9XRjFfT0ZGKHgpICgoKHgpJjB4RkYpPDwgIDggKSAvKiBTZXQgV2FrZS1VcCBGaWx0ZXIgMSBCeXRlIE9mZnNldCAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU0VUX1dGMl9PRkYoeCkgKCgoeCkmMHhGRik8PCAxNiApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAyIEJ5dGUgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTRVRfV0YzX09GRih4KSAoKCh4KSYweEZGKTw8IDI0ICkgLyogU2V0IFdha2UtVXAgRmlsdGVyIDMgQnl0ZSBPZmZzZXQgICAgICAgICAgICAgICAgICAgICovCi0vKiBTZXQgQUxMIE9mZnNldHMgKi8KLSNkZWZpbmUJU0VUX1dGX09GRlMoeDAseDEseDIseDMpIChTRVRfV0YwX09GRigoeDApKXxTRVRfV0YxX09GRigoeDEpKXxTRVRfV0YyX09GRigoeDIpKXxTRVRfV0YzX09GRigoeDMpKSkKLQotLyogRU1BQ19XS1VQX0ZGQ1JDMCBNYXNrcyAqLwotCi0jZGVmaW5lCVdGMF9DUkMgICAgICAgICAgIDB4MDAwMEZGRkYgICAgLyogV2FrZS1VcCBGaWx0ZXIgMCBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVdGMV9DUkMgICAgICAgICAgIDB4RkZGRjAwMDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMSBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUJU0VUX1dGMF9DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAgMCApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAwIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU0VUX1dGMV9DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAxNiApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAxIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRU1BQ19XS1VQX0ZGQ1JDMSBNYXNrcyAqLwotCi0jZGVmaW5lCVdGMl9DUkMgICAgICAgICAgIDB4MDAwMEZGRkYgICAgLyogV2FrZS1VcCBGaWx0ZXIgMiBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVdGM19DUkMgICAgICAgICAgIDB4RkZGRjAwMDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMyBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUJU0VUX1dGMl9DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAgMCApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAyIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU0VUX1dGM19DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAxNiApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAzIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRU1BQ19TWVNDVEwgTWFza3MgKi8KLQotI2RlZmluZQlQSFlJRSAgICAgICAgICAgICAweDAwMDAwMDAxICAgIC8qIFBIWV9JTlQgSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWERXQSAgICAgICAgICAgICAweDAwMDAwMDAyICAgIC8qIFJlY2VpdmUgRnJhbWUgRE1BIFdvcmQgQWxpZ25tZW50IChPZGQvRXZlbiopICAgICAgICAgICAqLwotI2RlZmluZQlSWENLUyAgICAgICAgICAgICAweDAwMDAwMDA0ICAgIC8qIEVuYWJsZSBSWCBGcmFtZSBUQ1AvVURQIENoZWNrc3VtIENvbXB1dGF0aW9uICAgICAgICAgICAqLwotI2RlZmluZQlUWERXQSAgICAgICAgICAgICAweDAwMDAwMDEwICAgIC8qIFRyYW5zbWl0IEZyYW1lIERNQSBXb3JkIEFsaWdubWVudCAoT2RkL0V2ZW4qKSAgICAgICAgICAqLwotI2RlZmluZQlNRENESVYgICAgICAgICAgICAweDAwMDAzRjAwICAgIC8qIFNDTEs6TURDIENsb2NrIERpdmlzb3IgW01EQz1TQ0xLLygyKihOKzEpKV0gICAgICAgICAgICAqLwotCi0jZGVmaW5lCVNFVF9NRENESVYoeCkgKCgoeCkmMHgzRik8PCA4KSAgIC8qIFNldCBNREMgQ2xvY2sgRGl2aXNvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIEVNQUNfU1lTVEFUIE1hc2tzICovCi0KLSNkZWZpbmUJUEhZSU5UICAgICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBQSFlfSU5UIEludGVycnVwdCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJTU1DSU5UICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBNTUMgQ291bnRlciBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUlhGU0lOVCAgICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBSWCBGcmFtZS1TdGF0dXMgSW50ZXJydXB0IFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhGU0lOVCAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiBUWCBGcmFtZS1TdGF0dXMgSW50ZXJydXB0IFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJV0FLRURFVCAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBXYWtlLVVwIERldGVjdGVkIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUlhETUFFUlIgICAgICAgICAgMHgwMDAwMDAyMCAgICAvKiBSWCBETUEgRGlyZWN0aW9uIEVycm9yIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhETUFFUlIgICAgICAgICAgMHgwMDAwMDA0MCAgICAvKiBUWCBETUEgRGlyZWN0aW9uIEVycm9yIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU1RNRE9ORSAgICAgICAgICAgMHgwMDAwMDA4MCAgICAvKiBTdGF0aW9uIE1ndC4gVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICAgKi8KLQotLyogRU1BQ19SWF9TVEFULCBFTUFDX1JYX1NUS1ksIGFuZCBFTUFDX1JYX0lSUUUgTWFza3MgKi8KLQotI2RlZmluZQlSWF9GUkxFTiAgICAgICAgICAweDAwMDAwN0ZGICAgIC8qIEZyYW1lIExlbmd0aCBJbiBCeXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9DT01QICAgICAgICAgICAweDAwMDAxMDAwICAgIC8qIFJYIEZyYW1lIENvbXBsZXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9PSyAgICAgICAgICAgICAweDAwMDAyMDAwICAgIC8qIFJYIEZyYW1lIFJlY2VpdmVkIFdpdGggTm8gRXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MT05HICAgICAgICAgICAweDAwMDA0MDAwICAgIC8qIFJYIEZyYW1lIFRvbyBMb25nIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9BTElHTiAgICAgICAgICAweDAwMDA4MDAwICAgIC8qIFJYIEZyYW1lIEFsaWdubWVudCBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9DUkMgICAgICAgICAgICAweDAwMDEwMDAwICAgIC8qIFJYIEZyYW1lIENSQyBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MRU4gICAgICAgICAgICAweDAwMDIwMDAwICAgIC8qIFJYIEZyYW1lIExlbmd0aCBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9GUkFHICAgICAgICAgICAweDAwMDQwMDAwICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50IEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9BRERSICAgICAgICAgICAweDAwMDgwMDAwICAgIC8qIFJYIEZyYW1lIEFkZHJlc3MgRmlsdGVyIEZhaWxlZCBFcnJvciAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9ETUFPICAgICAgICAgICAweDAwMTAwMDAwICAgIC8qIFJYIEZyYW1lIERNQSBPdmVycnVuIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9QSFkgICAgICAgICAgICAweDAwMjAwMDAwICAgIC8qIFJYIEZyYW1lIFBIWSBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MQVRFICAgICAgICAgICAweDAwNDAwMDAwICAgIC8qIFJYIEZyYW1lIExhdGUgQ29sbGlzaW9uIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9SQU5HRSAgICAgICAgICAweDAwODAwMDAwICAgIC8qIFJYIEZyYW1lIExlbmd0aCBGaWVsZCBPdXQgb2YgUmFuZ2UgRXJyb3IgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9NVUxUSSAgICAgICAgICAweDAxMDAwMDAwICAgIC8qIFJYIE11bHRpY2FzdCBGcmFtZSBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9CUk9BRCAgICAgICAgICAweDAyMDAwMDAwICAgIC8qIFJYIEJyb2FkY2FzdCBGcmFtZSBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9DVEwgICAgICAgICAgICAweDA0MDAwMDAwICAgIC8qIFJYIENvbnRyb2wgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9VQ1RMICAgICAgICAgICAweDA4MDAwMDAwICAgIC8qIFVuc3VwcG9ydGVkIFJYIENvbnRyb2wgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9UWVBFICAgICAgICAgICAweDEwMDAwMDAwICAgIC8qIFJYIFR5cGVkIEZyYW1lIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9WTEFOMSAgICAgICAgICAweDIwMDAwMDAwICAgIC8qIFJYIFZMQU4xIEZyYW1lIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9WTEFOMiAgICAgICAgICAweDQwMDAwMDAwICAgIC8qIFJYIFZMQU4yIEZyYW1lIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9BQ0NFUFQgICAgICAgICAweDgwMDAwMDAwICAgIC8qIFJYIEZyYW1lIEFjY2VwdGVkIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiAgRU1BQ19UWF9TVEFULCBFTUFDX1RYX1NUS1ksIGFuZCBFTUFDX1RYX0lSUUUgTWFza3MgICovCi0KLSNkZWZpbmUJVFhfQ09NUCAgICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBUWCBGcmFtZSBDb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfT0sgICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBUWCBGcmFtZSBTZW50IFdpdGggTm8gRXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfRUNPTEwgICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBUWCBGcmFtZSBFeGNlc3NpdmUgQ29sbGlzaW9uIEVycm9yICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTEFURSAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiBUWCBGcmFtZSBMYXRlIENvbGxpc2lvbiBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfRE1BVSAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBUWCBGcmFtZSBETUEgVW5kZXJydW4gRXJyb3IgKFNUQVQpICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTUFDRSAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBJbnRlcm5hbCBNQUMgRXJyb3IgRGV0ZWN0ZWQgKFNUS1kgYW5kIElSUUUpICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfRURFRkVSICAgICAgICAgMHgwMDAwMDAyMCAgICAvKiBUWCBGcmFtZSBFeGNlc3NpdmUgRGVmZXJyYWwgRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQlJPQUQgICAgICAgICAgMHgwMDAwMDA0MCAgICAvKiBUWCBCcm9hZGNhc3QgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTVVMVEkgICAgICAgICAgMHgwMDAwMDA4MCAgICAvKiBUWCBNdWx0aWNhc3QgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQ0NOVCAgICAgICAgICAgMHgwMDAwMEYwMCAgICAvKiBUWCBGcmFtZSBDb2xsaXNpb24gQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfREVGRVIgICAgICAgICAgMHgwMDAwMTAwMCAgICAvKiBUWCBGcmFtZSBEZWZlcnJlZCBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQ1JTICAgICAgICAgICAgMHgwMDAwMjAwMCAgICAvKiBUWCBGcmFtZSBDYXJyaWVyIFNlbnNlIE5vdCBBc3NlcnRlZCBFcnJvciAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTE9TUyAgICAgICAgICAgMHgwMDAwNDAwMCAgICAvKiBUWCBGcmFtZSBDYXJyaWVyIExvc3QgRHVyaW5nIFRYIEVycm9yICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfUkVUUlkgICAgICAgICAgMHgwMDAwODAwMCAgICAvKiBUWCBGcmFtZSBTdWNjZXNzZnVsIEFmdGVyIFJldHJ5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfRlJMRU4gICAgICAgICAgMHgwN0ZGMDAwMCAgICAvKiBUWCBGcmFtZSBMZW5ndGggKEJ5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRU1BQ19NTUNfQ1RMIE1hc2tzICovCi0jZGVmaW5lCVJTVEMgICAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgLyogUmVzZXQgQWxsIENvdW50ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNST0xMICAgICAgICAgICAgIDB4MDAwMDAwMDIgICAgLyogQ291bnRlciBSb2xsLU92ZXIgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNDT1IgICAgICAgICAgICAgIDB4MDAwMDAwMDQgICAgLyogQ291bnRlciBDbGVhci1Pbi1SZWFkIE1vZGUgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCU1NQ0UgICAgICAgICAgICAgIDB4MDAwMDAwMDggICAgLyogRW5hYmxlIE1NQyBDb3VudGVyIE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIEVNQUNfTU1DX1JJUlFTIGFuZCBFTUFDX01NQ19SSVJRRSBNYXNrcyAqLwotI2RlZmluZQlSWF9PS19DTlQgICAgICAgICAweDAwMDAwMDAxICAgIC8qIFJYIEZyYW1lcyBSZWNlaXZlZCBXaXRoIE5vIEVycm9ycyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9GQ1NfQ05UICAgICAgICAweDAwMDAwMDAyICAgIC8qIFJYIEZyYW1lcyBXL0ZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9ycyAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9BTElHTl9DTlQgICAgICAweDAwMDAwMDA0ICAgIC8qIFJYIEZyYW1lcyBXaXRoIEFsaWdubWVudCBFcnJvcnMgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9PQ1RFVF9DTlQgICAgICAweDAwMDAwMDA4ICAgIC8qIFJYIE9jdGV0cyBSZWNlaXZlZCBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MT1NUX0NOVCAgICAgICAweDAwMDAwMDEwICAgIC8qIFJYIEZyYW1lcyBMb3N0IER1ZSBUbyBJbnRlcm5hbCBNQUMgUlggRXJyb3IgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9VTklfQ05UICAgICAgICAweDAwMDAwMDIwICAgIC8qIFVuaWNhc3QgUlggRnJhbWVzIFJlY2VpdmVkIE9LICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9NVUxUSV9DTlQgICAgICAweDAwMDAwMDQwICAgIC8qIE11bHRpY2FzdCBSWCBGcmFtZXMgUmVjZWl2ZWQgT0sgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9CUk9BRF9DTlQgICAgICAweDAwMDAwMDgwICAgIC8qIEJyb2FkY2FzdCBSWCBGcmFtZXMgUmVjZWl2ZWQgT0sgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9JUkxfQ05UICAgICAgICAweDAwMDAwMTAwICAgIC8qIFJYIEZyYW1lcyBXaXRoIEluLVJhbmdlIExlbmd0aCBFcnJvcnMgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9PUkxfQ05UICAgICAgICAweDAwMDAwMjAwICAgIC8qIFJYIEZyYW1lcyBXaXRoIE91dC1PZi1SYW5nZSBMZW5ndGggRXJyb3JzICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MT05HX0NOVCAgICAgICAweDAwMDAwNDAwICAgIC8qIFJYIEZyYW1lcyBXaXRoIEZyYW1lIFRvbyBMb25nIEVycm9ycyAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9NQUNDVExfQ05UICAgICAweDAwMDAwODAwICAgIC8qIE1BQyBDb250cm9sIFJYIEZyYW1lcyBSZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9PUENPREVfQ1RMICAgICAweDAwMDAxMDAwICAgIC8qIFVuc3VwcG9ydGVkIE9wLUNvZGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9QQVVTRV9DTlQgICAgICAweDAwMDAyMDAwICAgIC8qIFBBVVNFTUFDIENvbnRyb2wgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9BTExGX0NOVCAgICAgICAweDAwMDA0MDAwICAgIC8qIEFsbCBSWCBGcmFtZXMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9BTExPX0NOVCAgICAgICAweDAwMDA4MDAwICAgIC8qIEFsbCBSWCBPY3RldHMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9UWVBFRF9DTlQgICAgICAweDAwMDEwMDAwICAgIC8qIFR5cGVkIFJYIEZyYW1lcyBSZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9TSE9SVF9DTlQgICAgICAweDAwMDIwMDAwICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50cyAoPCA2NCBCeXRlcykgUmVjZWl2ZWQgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9FUTY0X0NOVCAgICAgICAweDAwMDQwMDAwICAgIC8qIDY0LUJ5dGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MVDEyOF9DTlQgICAgICAweDAwMDgwMDAwICAgIC8qIDY1LTEyNy1CeXRlIFJYIEZyYW1lcyBSZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MVDI1Nl9DTlQgICAgICAweDAwMTAwMDAwICAgIC8qIDEyOC0yNTUtQnl0ZSBSWCBGcmFtZXMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MVDUxMl9DTlQgICAgICAweDAwMjAwMDAwICAgIC8qIDI1Ni01MTEtQnl0ZSBSWCBGcmFtZXMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9MVDEwMjRfQ05UICAgICAweDAwNDAwMDAwICAgIC8qIDUxMi0xMDIzLUJ5dGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlSWF9HRTEwMjRfQ05UICAgICAweDAwODAwMDAwICAgIC8qIDEwMjQtTWF4LUJ5dGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBFTUFDX01NQ19USVJRUyBhbmQgRU1BQ19NTUNfVElSUUUgTWFza3MgICovCi0KLSNkZWZpbmUJVFhfT0tfQ05UICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBUWCBGcmFtZXMgU2VudCBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfU0NPTExfQ05UICAgICAgMHgwMDAwMDAwMiAgICAvKiBUWCBGcmFtZXMgV2l0aCBTaW5nbGUgQ29sbGlzaW9ucyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTUNPTExfQ05UICAgICAgMHgwMDAwMDAwNCAgICAvKiBUWCBGcmFtZXMgV2l0aCBNdWx0aXBsZSBDb2xsaXNpb25zICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfT0NURVRfQ05UICAgICAgMHgwMDAwMDAwOCAgICAvKiBUWCBPY3RldHMgU2VudCBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfREVGRVJfQ05UICAgICAgMHgwMDAwMDAxMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBEZWZlcnJlZCBUcmFuc21pc3Npb24gICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTEFURV9DTlQgICAgICAgMHgwMDAwMDAyMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBMYXRlIENvbGxpc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQUJPUlRDX0NOVCAgICAgMHgwMDAwMDA0MCAgICAvKiBUWCBGcmFtZXMgQWJvcnRlZCBEdWUgVG8gRXhjZXNzIENvbGxpc2lvbnMgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTE9TVF9DTlQgICAgICAgMHgwMDAwMDA4MCAgICAvKiBUWCBGcmFtZXMgTG9zdCBEdWUgVG8gSW50ZXJuYWwgTUFDIFRYIEVycm9yICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQ1JTX0NOVCAgICAgICAgMHgwMDAwMDEwMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBDYXJyaWVyIFNlbnNlIEVycm9ycyAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfVU5JX0NOVCAgICAgICAgMHgwMDAwMDIwMCAgICAvKiBVbmljYXN0IFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTVVMVElfQ05UICAgICAgMHgwMDAwMDQwMCAgICAvKiBNdWx0aWNhc3QgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQlJPQURfQ05UICAgICAgMHgwMDAwMDgwMCAgICAvKiBCcm9hZGNhc3QgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfRVhERUZfQ1RMICAgICAgMHgwMDAwMTAwMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBFeGNlc3NpdmUgRGVmZXJyYWwgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTUFDQ1RMX0NOVCAgICAgMHgwMDAwMjAwMCAgICAvKiBNQUMgQ29udHJvbCBUWCBGcmFtZXMgU2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQUxMRl9DTlQgICAgICAgMHgwMDAwNDAwMCAgICAvKiBBbGwgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQUxMT19DTlQgICAgICAgMHgwMDAwODAwMCAgICAvKiBBbGwgVFggT2N0ZXRzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfRVE2NF9DTlQgICAgICAgMHgwMDAxMDAwMCAgICAvKiA2NC1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTFQxMjhfQ05UICAgICAgMHgwMDAyMDAwMCAgICAvKiA2NS0xMjctQnl0ZSBUWCBGcmFtZXMgU2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTFQyNTZfQ05UICAgICAgMHgwMDA0MDAwMCAgICAvKiAxMjgtMjU1LUJ5dGUgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTFQ1MTJfQ05UICAgICAgMHgwMDA4MDAwMCAgICAvKiAyNTYtNTExLUJ5dGUgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfTFQxMDI0X0NOVCAgICAgMHgwMDEwMDAwMCAgICAvKiA1MTItMTAyMy1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfR0UxMDI0X0NOVCAgICAgMHgwMDIwMDAwMCAgICAvKiAxMDI0LU1heC1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVFhfQUJPUlRfQ05UICAgICAgMHgwMDQwMDAwMCAgICAvKiBUWCBGcmFtZXMgQWJvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogU0RIIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIFNESF9QV1JfQ1RMICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTAwIC8qIFNESCBQb3dlciBDb250cm9sICovCi0jZGVmaW5lIFNESF9DTEtfQ1RMICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTA0IC8qIFNESCBDbG9jayBDb250cm9sICovCi0jZGVmaW5lIFNESF9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTA4IC8qIFNESCBBcmd1bWVudCAqLwotI2RlZmluZSBTREhfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkwQyAvKiBTREggQ29tbWFuZCAqLwotI2RlZmluZSBTREhfUkVTUF9DTUQgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkxMCAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLwotI2RlZmluZSBTREhfUkVTUE9OU0UwICAgICAgICAgICAgICAgICAgMHhGRkMwMzkxNCAvKiBTREggUmVzcG9uc2UwICovCi0jZGVmaW5lIFNESF9SRVNQT05TRTEgICAgICAgICAgICAgICAgICAweEZGQzAzOTE4IC8qIFNESCBSZXNwb25zZTEgKi8KLSNkZWZpbmUgU0RIX1JFU1BPTlNFMiAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MUMgLyogU0RIIFJlc3BvbnNlMiAqLwotI2RlZmluZSBTREhfUkVTUE9OU0UzICAgICAgICAgICAgICAgICAgMHhGRkMwMzkyMCAvKiBTREggUmVzcG9uc2UzICovCi0jZGVmaW5lIFNESF9EQVRBX1RJTUVSICAgICAgICAgICAgICAgICAweEZGQzAzOTI0IC8qIFNESCBEYXRhIFRpbWVyICovCi0jZGVmaW5lIFNESF9EQVRBX0xHVEggICAgICAgICAgICAgICAgICAweEZGQzAzOTI4IC8qIFNESCBEYXRhIExlbmd0aCAqLwotI2RlZmluZSBTREhfREFUQV9DVEwgICAgICAgICAgICAgICAgICAgMHhGRkMwMzkyQyAvKiBTREggRGF0YSBDb250cm9sICovCi0jZGVmaW5lIFNESF9EQVRBX0NOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzOTMwIC8qIFNESCBEYXRhIENvdW50ZXIgKi8KLSNkZWZpbmUgU0RIX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5MzQgLyogU0RIIFN0YXR1cyAqLwotI2RlZmluZSBTREhfU1RBVFVTX0NMUiAgICAgICAgICAgICAgICAgMHhGRkMwMzkzOCAvKiBTREggU3RhdHVzIENsZWFyICovCi0jZGVmaW5lIFNESF9NQVNLMCAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTNDIC8qIFNESCBJbnRlcnJ1cHQwIE1hc2sgKi8KLSNkZWZpbmUgU0RIX01BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5NDAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLwotI2RlZmluZSBTREhfRklGT19DTlQgICAgICAgICAgICAgICAgICAgMHhGRkMwMzk0OCAvKiBTREggRklGTyBDb3VudGVyICovCi0jZGVmaW5lIFNESF9GSUZPICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOTgwIC8qIFNESCBEYXRhIEZJRk8gKi8KLSNkZWZpbmUgU0RIX0VfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5QzAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KLSNkZWZpbmUgU0RIX0VfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5QzQgLyogU0RIIEV4Y2VwdGlvbiBNYXNrICovCi0jZGVmaW5lIFNESF9DRkcgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUM4IC8qIFNESCBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFNESF9SRF9XQUlUX0VOICAgICAgICAgICAgICAgICAweEZGQzAzOUNDIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCi0jZGVmaW5lIFNESF9QSUQwICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUQwIC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uMCAqLwotI2RlZmluZSBTREhfUElEMSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlENCAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjEgKi8KLSNkZWZpbmUgU0RIX1BJRDIgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5RDggLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCi0jZGVmaW5lIFNESF9QSUQzICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOURDIC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uMyAqLwotI2RlZmluZSBTREhfUElENCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlFMCAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjQgKi8KLSNkZWZpbmUgU0RIX1BJRDUgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM5RTQgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCi0jZGVmaW5lIFNESF9QSUQ2ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzOUU4IC8qIFNESCBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uNiAqLwotI2RlZmluZSBTREhfUElENyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzlFQyAvKiBTREggUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbjcgKi8KLQotLyogUmVtb3ZhYmxlIFN0b3JhZ2UgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIFJTSV9QV1JfQ09OVFJPTCAgICAgICAgICAgICAgICAweEZGQzAzODAwIC8qIFJTSSBQb3dlciBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9DTEtfQ09OVFJPTCAgICAgICAgICAgICAgICAweEZGQzAzODA0IC8qIFJTSSBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAweEZGQzAzODA4IC8qIFJTSSBBcmd1bWVudCBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzgwQyAvKiBSU0kgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfUkVTUF9DTUQgICAgICAgICAgICAgICAgICAgMHhGRkMwMzgxMCAvKiBSU0kgUmVzcG9uc2UgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfUkVTUE9OU0UwICAgICAgICAgICAgICAgICAgMHhGRkMwMzgxNCAvKiBSU0kgUmVzcG9uc2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX1JFU1BPTlNFMSAgICAgICAgICAgICAgICAgIDB4RkZDMDM4MTggLyogUlNJIFJlc3BvbnNlIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9SRVNQT05TRTIgICAgICAgICAgICAgICAgICAweEZGQzAzODFDIC8qIFJTSSBSZXNwb25zZSBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfUkVTUE9OU0UzICAgICAgICAgICAgICAgICAgMHhGRkMwMzgyMCAvKiBSU0kgUmVzcG9uc2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0RBVEFfVElNRVIgICAgICAgICAgICAgICAgIDB4RkZDMDM4MjQgLyogUlNJIERhdGEgVGltZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0RBVEFfTEdUSCAgICAgICAgICAgICAgICAgIDB4RkZDMDM4MjggLyogUlNJIERhdGEgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9EQVRBX0NPTlRST0wgICAgICAgICAgICAgICAweEZGQzAzODJDIC8qIFJTSSBEYXRhIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0RBVEFfQ05UICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4MzAgLyogUlNJIERhdGEgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzgzNCAvKiBSU0kgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJTSV9TVEFUVVNDTCAgICAgICAgICAgICAgICAgICAweEZGQzAzODM4IC8qIFJTSSBTdGF0dXMgQ2xlYXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX01BU0swICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4M0MgLyogUlNJIEludGVycnVwdCAwIE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX01BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4NDAgLyogUlNJIEludGVycnVwdCAxIE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0ZJRk9fQ05UICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4NDggLyogUlNJIEZJRk8gQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfQ0VBVEFfQ09OVFJPTCAgICAgICAgICAgICAgMHhGRkMwMzg0QyAvKiBSU0kgQ0VBVEEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4ODAgLyogUlNJIERhdGEgRklGTyBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfRVNUQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzhDMCAvKiBSU0kgRXhjZXB0aW9uIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBSU0lfRU1BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMzhDNCAvKiBSU0kgRXhjZXB0aW9uIE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDM4QzggLyogUlNJIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX1JEX1dBSVRfRU4gICAgICAgICAgICAgICAgIDB4RkZDMDM4Q0MgLyogUlNJIFJlYWQgV2FpdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUlNJX1BJRDAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRTAgLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBSU0lfUElEMSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZFNCAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAxICovCi0jZGVmaW5lIFJTSV9QSUQyICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkU4IC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgUlNJX1BJRDMgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRUMgLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgMyAqLwotI2RlZmluZSBSU0lfUElENCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGMCAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA0ICovCi0jZGVmaW5lIFJTSV9QSUQ1ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkY0IC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUgUlNJX1BJRDYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDNGRjggLyogUlNJIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgNiAqLwotI2RlZmluZSBSU0lfUElENyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGQyAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA3ICovCisvKiBCRjUxOCBpcyBCRjUxNiArIElFRUUtMTU4OCAqLworI2luY2x1ZGUgImRlZkJGNTE2LmgiCiAKIC8qIFBUUCBUU1lOQyBSZWdpc3RlcnMgKi8KIApAQCAtNDg5LDE0MSArMzYsNiBAQAogI2RlZmluZSBFTUFDX1BUUF9QUFNfU1RBUlRISSAgICAgICAgICAgMHhGRkMwMzBGNCAvKiBQUFMgU3RhcnQgVGltZSBIaWdoICovCiAjZGVmaW5lIEVNQUNfUFRQX1BQU19QRVJJT0QgICAgICAgICAgICAweEZGQzAzMEY4IC8qIFBQUyBDb3VudCBSZWdpc3RlciAqLwogCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCi0vKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCi0jaWYgMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLwotI2VuZGlmCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgRU1BQ19QVFBfQ1RMICovCiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBUUF9FTiAgMHgxICAgICAgICAvKiBFbmFibGUgdGhlIFBUUF9UU1lOQyBtb2R1bGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmgKaW5kZXggZjlmZDJiMi4uOTI0MTIwNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmgKQEAgLTU4NSw1OCArNTg1LDYgQEAKICoqCQkJCW1vZGlmaWVyIFVOTEVTUyB0aGUgbG93ZXIgb3JkZXIgYml0cyBhcmUgc2F2ZWQgYW5kIE9SZWQgYmFjayBpbiB3aGVuCiAqKgkJCQl0aGUgbWFjcm8gaXMgdXNlZC4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotKiogKioqKioqKioqKioqKioqKioqKioqIFBMTCBBTkQgUkVTRVQgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFBMTF9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIERGCQkJCTB4MDAwMQkvKiAwOiBQTEwgPSBDTEtJTiwgMTogUExMID0gQ0xLSU4vMgkJCQkJKi8KLSNkZWZpbmUgUExMX09GRgkJCTB4MDAwMgkvKiBQTEwgTm90IFBvd2VyZWQJCQkJCQkJCQkqLwotI2RlZmluZSBTVE9QQ0sJCQkweDAwMDgJLyogQ29yZSBDbG9jayBPZmYJCQkJCQkJCQkqLwotI2RlZmluZSBQRFdOCQkJMHgwMDIwCS8qIEVudGVyIERlZXAgU2xlZXAgTW9kZQkJCQkJCQkqLwotI2RlZmluZQlJTl9ERUxBWQkJMHgwMDQwCS8qIEFkZCAyMDBwcyBEZWxheSBUbyBFQklVIElucHV0IExhdGNoZXMJCQkqLwotI2RlZmluZQlPVVRfREVMQVkJCTB4MDA4MAkvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBPdXRwdXQgU2lnbmFscwkJCSovCi0jZGVmaW5lIEJZUEFTUwkJCTB4MDEwMAkvKiBCeXBhc3MgdGhlIFBMTAkJCQkJCQkJCSovCi0jZGVmaW5lCU1TRUwJCQkweDdFMDAJLyogTXVsdGlwbGllciBTZWxlY3QgRm9yIENDTEsvVkNPIEZhY3RvcnMJCQkqLwotLyogUExMX0NUTCBNYWNyb3MgKE9ubHkgVXNlIFdpdGggTG9naWMgT1IgV2hpbGUgU2V0dGluZyBMb3dlciBPcmRlciBCaXRzKQkJCSovCi0jZGVmaW5lCVNFVF9NU0VMKHgpCQkoKCh4KSYweDNGKSA8PCAweDkpCS8qIFNldCBNU0VMID0gMC02MyAtLT4gVkNPID0gQ0xLSU4qTVNFTAkJKi8KLQotLyogUExMX0RJViBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU1NFTAkJCTB4MDAwRgkvKiBTeXN0ZW0gU2VsZWN0CQkJCQkJKi8KLSNkZWZpbmUJQ1NFTAkJCTB4MDAzMAkvKiBDb3JlIFNlbGVjdAkJCQkJCQkqLwotI2RlZmluZSBDU0VMX0RJVjEJCTB4MDAwMAkvKiAJCUNDTEsgPSBWQ08gLyAxCQkJCQkqLwotI2RlZmluZSBDU0VMX0RJVjIJCTB4MDAxMAkvKiAJCUNDTEsgPSBWQ08gLyAyCQkJCQkqLwotI2RlZmluZQlDU0VMX0RJVjQJCTB4MDAyMAkvKiAJCUNDTEsgPSBWQ08gLyA0CQkJCQkqLwotI2RlZmluZQlDU0VMX0RJVjgJCTB4MDAzMAkvKiAJCUNDTEsgPSBWQ08gLyA4CQkJCQkqLwotLyogUExMX0RJViBNYWNyb3MJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFNFVF9TU0VMKHgpCQkoKHgpJjB4RikJCS8qIFNldCBTU0VMID0gMC0xNSAtLT4gU0NMSyA9IFZDTy9TU0VMCSovCi0KLS8qIFZSX0NUTCBNYXNrcwkqLwotI2RlZmluZQlGUkVRCQkJMHgzMDAwCS8qIFN3aXRjaGluZyBPc2NpbGxhdG9yIEZyZXF1ZW5jeSBGb3IgUmVndWxhdG9yCSovCi0jZGVmaW5lCUhJQkVSTkFURQkJMHgwMDAwCS8qIAkJUG93ZXJkb3duL0J5cGFzcyBPbi1Cb2FyZCBSZWd1bGF0aW9uCSovCi0KLSNkZWZpbmUJVkxFVgkJCTB4MDBGMAkvKiBJbnRlcm5hbCBWb2x0YWdlIExldmVsCQkJCQkqLwotI2RlZmluZQlWTEVWXzA4NSAJCTB4MDA2MAkvKiAJCVZMRVYgPSAwLjg1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMDkwCQkweDAwNzAJLyogCQlWTEVWID0gMC45MCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzA5NQkJMHgwMDgwCS8qIAkJVkxFViA9IDAuOTUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMDAJCTB4MDA5MAkvKiAJCVZMRVYgPSAxLjAwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTA1CQkweDAwQTAJLyogCQlWTEVWID0gMS4wNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzExMAkJMHgwMEIwCS8qIAkJVkxFViA9IDEuMTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMTUJCTB4MDBDMAkvKiAJCVZMRVYgPSAxLjE1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTIwCQkweDAwRDAJLyogCQlWTEVWID0gMS4yMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzEyNQkJMHgwMEUwCS8qIAkJVkxFViA9IDEuMjUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMzAJCTB4MDBGMAkvKiAJCVZMRVYgPSAxLjMwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0KLSNkZWZpbmUJV0FLRQkJCTB4MDEwMAkvKiBFbmFibGUgUlRDL1Jlc2V0IFdha2V1cCBGcm9tIEhpYmVybmF0ZQkqLwotI2RlZmluZQlVU0JXRQkJCTB4MDIwMAkvKiBFbmFibGUgVVNCIFdha2V1cCBGcm9tIEhpYmVybmF0ZQkJCSovCi0jZGVmaW5lCVBIWVdFCQkJMHgwNDAwCS8qIEVuYWJsZSBQSFkgV2FrZXVwIEZyb20gSGliZXJuYXRlCQkJKi8KLSNkZWZpbmUJQ0xLQlVGT0UJCTB4NDAwMAkvKiBDTEtJTiBCdWZmZXIgT3V0cHV0IEVuYWJsZSAqLwotI2RlZmluZQlQSFlDTEtPRQkJQ0xLQlVGT0UJLyogQWx0ZXJuYXRpdmUgbGVnYWN5IG5hbWUgZm9yIHRoZSBhYm92ZSAqLwotI2RlZmluZQlTQ0tFTE9XCQkweDgwMDAJLyogRW5hYmxlIERyaXZlIENLRSBMb3cgRHVyaW5nIFJlc2V0CQkqLwotCi0vKiBQTExfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgQUNUSVZFX1BMTEVOQUJMRUQJMHgwMDAxCS8qIFByb2Nlc3NvciBJbiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBFbmFibGVkCSovCi0jZGVmaW5lCUZVTExfT04JCQkJMHgwMDAyCS8qIFByb2Nlc3NvciBJbiBGdWxsIE9uIE1vZGUJCQkJCSovCi0jZGVmaW5lIEFDVElWRV9QTExESVNBQkxFRAkweDAwMDQJLyogUHJvY2Vzc29yIEluIEFjdGl2ZSBNb2RlIFdpdGggUExMIERpc2FibGVkCSovCi0jZGVmaW5lCVBMTF9MT0NLRUQJCQkweDAwMjAJLyogUExMX0xPQ0tDTlQgSGFzIEJlZW4gUmVhY2hlZAkJCQkJKi8KIAogLyogQ0hJUElEIE1hc2tzICovCiAjZGVmaW5lIENISVBJRF9WRVJTSU9OICAgICAgICAgMHhGMDAwMDAwMApAQCAtNzU2LDY2ICs3MDQsNiBAQAogI2RlZmluZSBJV1JfRElTQUJMRSh4KQkoMHhGRkZGRkZGRiBeICgxIDw8ICgoeCkmMHgxRikpKSAJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeAkJKi8KIAogCi0vKiAqKioqKioqKiogV0FUQ0hET0cgVElNRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogV2F0Y2hkb2cgVGltZXIgV0RPR19DVEwgUmVnaXN0ZXIgTWFza3MgKi8KLQotI2RlZmluZSBXREVWKHgpICgoKHgpPDwxKSAmIDB4MDAwNikgLyogZXZlbnQgZ2VuZXJhdGVkIG9uIHJvbGwgb3ZlciAqLwotI2RlZmluZSBXREVWX1JFU0VUIDB4MDAwMCAvKiBnZW5lcmF0ZSByZXNldCBldmVudCBvbiByb2xsIG92ZXIgKi8KLSNkZWZpbmUgV0RFVl9OTUkgMHgwMDAyIC8qIGdlbmVyYXRlIE5NSSBldmVudCBvbiByb2xsIG92ZXIgKi8KLSNkZWZpbmUgV0RFVl9HUEkgMHgwMDA0IC8qIGdlbmVyYXRlIEdQIElSUSBvbiByb2xsIG92ZXIgKi8KLSNkZWZpbmUgV0RFVl9OT05FIDB4MDAwNiAvKiBubyBldmVudCBvbiByb2xsIG92ZXIgKi8KLSNkZWZpbmUgV0RFTiAweDBGRjAgLyogZW5hYmxlIHdhdGNoZG9nICovCi0jZGVmaW5lIFdERElTIDB4MEFEMCAvKiBkaXNhYmxlIHdhdGNoZG9nICovCi0jZGVmaW5lIFdEUk8gMHg4MDAwIC8qIHdhdGNoZG9nIHJvbGxlZCBvdmVyIGxhdGNoICovCi0KLS8qIGRlcHJlY2lhdGVkIFdET0dfQ1RMIFJlZ2lzdGVyIE1hc2tzIGZvciBsZWdhY3kgY29kZSAqLwotCi0KLSNkZWZpbmUgSUNUTCBXREVWCi0jZGVmaW5lIEVOQUJMRV9SRVNFVCBXREVWX1JFU0VUCi0jZGVmaW5lIFdET0dfUkVTRVQgV0RFVl9SRVNFVAotI2RlZmluZSBFTkFCTEVfTk1JIFdERVZfTk1JCi0jZGVmaW5lIFdET0dfTk1JIFdERVZfTk1JCi0jZGVmaW5lIEVOQUJMRV9HUEkgV0RFVl9HUEkKLSNkZWZpbmUgV0RPR19HUEkgV0RFVl9HUEkKLSNkZWZpbmUgRElTQUJMRV9FVlQgV0RFVl9OT05FCi0jZGVmaW5lIFdET0dfTk9ORSBXREVWX05PTkUKLQotI2RlZmluZSBUTVJfRU4gV0RFTgotI2RlZmluZSBUTVJfRElTIFdERElTCi0jZGVmaW5lIFRSTyBXRFJPCi0jZGVmaW5lIElDVExfUDAgMHgwMQotICNkZWZpbmUgSUNUTF9QMSAweDAyCi0jZGVmaW5lIFRST19QIDB4MEYKLQotCi0KLS8qICoqKioqKioqKioqKioqKiAgUkVBTCBUSU1FIENMT0NLIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJUQ19TVEFUIGFuZCBSVENfQUxBUk0gTWFza3MJCQkJCQkJCQkJKi8KLSNkZWZpbmUJUlRDX1NFQwkJCQkweDAwMDAwMDNGCS8qIFJlYWwtVGltZSBDbG9jayBTZWNvbmRzCSovCi0jZGVmaW5lCVJUQ19NSU4JCQkJMHgwMDAwMEZDMAkvKiBSZWFsLVRpbWUgQ2xvY2sgTWludXRlcwkqLwotI2RlZmluZQlSVENfSFIJCQkJMHgwMDAxRjAwMAkvKiBSZWFsLVRpbWUgQ2xvY2sgSG91cnMJKi8KLSNkZWZpbmUJUlRDX0RBWQkJCQkweEZGRkUwMDAwCS8qIFJlYWwtVGltZSBDbG9jayBEYXlzCQkqLwotCi0vKiBSVENfQUxBUk0gTWFjcm8JCQl6PWRheQkJeT1ocgl4PW1pbgl3PXNlYwkJKi8KLSNkZWZpbmUgU0VUX0FMQVJNKHoseSx4LHcpCSgoKCh6KSYweDdGRkYpPDwweDExKXwoKCh5KSYweDFGKTw8MHhDKXwoKCh4KSYweDNGKTw8MHg2KXwoKHcpJjB4M0YpKQotCi0vKiBSVENfSUNUTCBhbmQgUlRDX0lTVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUJU1RPUFdBVENICQkJMHgwMDAxCQkvKiBTdG9wd2F0Y2ggSW50ZXJydXB0IEVuYWJsZQkJCQkJCQkJKi8KLSNkZWZpbmUJQUxBUk0JCQkJMHgwMDAyCQkvKiBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlCQkJCQkJCQkJKi8KLSNkZWZpbmUJU0VDT05ECQkJCTB4MDAwNAkJLyogU2Vjb25kcyAoMSBIeikgSW50ZXJydXB0IEVuYWJsZQkJCQkJCQkqLwotI2RlZmluZQlNSU5VVEUJCQkJMHgwMDA4CQkvKiBNaW51dGVzIEludGVycnVwdCBFbmFibGUJCQkJCQkJCQkqLwotI2RlZmluZQlIT1VSCQkJCTB4MDAxMAkJLyogSG91cnMgSW50ZXJydXB0IEVuYWJsZQkJCQkJCQkJCSovCi0jZGVmaW5lCURBWQkJCQkJMHgwMDIwCQkvKiAyNCBIb3VycyAoRGF5cykgSW50ZXJydXB0IEVuYWJsZQkJCQkJCQkqLwotI2RlZmluZQlEQVlfQUxBUk0JCQkweDAwNDAJCS8qIERheSBBbGFybSAoRGF5LCBIb3VyLCBNaW51dGUsIFNlY29uZCkgSW50ZXJydXB0IEVuYWJsZQkqLwotI2RlZmluZQlXUklURV9QRU5ESU5HCQkweDQwMDAJCS8qIFdyaXRlIFBlbmRpbmcgU3RhdHVzCQkJCQkJCQkJCSovCi0jZGVmaW5lCVdSSVRFX0NPTVBMRVRFCQkweDgwMDAJCS8qIFdyaXRlIENvbXBsZXRlIEludGVycnVwdCBFbmFibGUJCQkJCQkJKi8KLQotLyogUlRDX0ZBU1QgLyBSVENfUFJFTiBNYXNrCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgUFJFTgkJCQkweDAwMDEJLyogRW5hYmxlIFByZXNjYWxlciwgUlRDIFJ1bnMgQDEgSHoJKi8KLQotCiAvKiAqKioqKioqKioqKioqKiBVQVJUIENPTlRST0xMRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFVBUlR4X0xDUiBNYXNrcwkJCQkJCQkJCQkJCSovCiAjZGVmaW5lIFdMUyh4KQkJKCgoeCktNSkgJiAweDAzKQkvKiBXb3JkIExlbmd0aCBTZWxlY3QgKi8KQEAgLTEzNzIsMzMgKzEyNjAsNiBAQAogCiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqICBETUEgQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBETUF4X0NPTkZJRywgTURNQV95eV9DT05GSUcgTWFza3MJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBETUFFTgkJCTB4MDAwMQkJLyogRE1BIENoYW5uZWwgRW5hYmxlCQkJCQkJCSovCi0jZGVmaW5lIFdOUgkJCQkweDAwMDIJCS8qIENoYW5uZWwgRGlyZWN0aW9uIChXL1IqKQkJCQkJCSovCi0jZGVmaW5lIFdEU0laRV84CQkweDAwMDAJCS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDgJCQkJCQkqLwotI2RlZmluZSBXRFNJWkVfMTYJCTB4MDAwNAkJLyogVHJhbnNmZXIgV29yZCBTaXplID0gMTYJCQkJCQkqLwotI2RlZmluZSBXRFNJWkVfMzIJCTB4MDAwOAkJLyogVHJhbnNmZXIgV29yZCBTaXplID0gMzIJCQkJCQkqLwotI2RlZmluZSBETUEyRAkJCTB4MDAxMAkJLyogRE1BIE1vZGUgKDJELzFEKikJCQkJCQkJKi8KLSNkZWZpbmUgUkVTVEFSVAkJCTB4MDAyMAkJLyogRE1BIEJ1ZmZlciBDbGVhcgkJCQkJCQkJKi8KLSNkZWZpbmUgRElfU0VMCQkJMHgwMDQwCQkvKiBEYXRhIEludGVycnVwdCBUaW1pbmcgU2VsZWN0CQkJCQkqLwotI2RlZmluZSBESV9FTgkJCTB4MDA4MAkJLyogRGF0YSBJbnRlcnJ1cHQgRW5hYmxlCQkJCQkJKi8KLSNkZWZpbmUgTkRTSVpFXzAJCTB4MDAwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAwIChTdG9wL0F1dG9idWZmZXIpCSovCi0jZGVmaW5lIE5EU0laRV8xCQkweDAxMDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMQkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV8yCQkweDAyMDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMgkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV8zCQkweDAzMDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMwkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV80CQkweDA0MDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNAkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV81CQkweDA1MDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNQkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV82CQkweDA2MDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNgkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV83CQkweDA3MDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNwkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV84CQkweDA4MDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gOAkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV85CQkweDA5MDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gOQkJCQkJCSovCi0jZGVmaW5lIE5EU0laRQkgICAgICAgIAkweDA5MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgKi8KLSNkZWZpbmUgRE1BRkxPVwkgICAgICAgIAkweDcwMDAJLyogRmxvdyBDb250cm9sICovCi0jZGVmaW5lIERNQUZMT1dfU1RPUAkJMHgwMDAwCQkvKiBTdG9wIE1vZGUJCQkJCQkJCQkqLwotI2RlZmluZSBETUFGTE9XX0FVVE8JCTB4MTAwMAkJLyogQXV0b2J1ZmZlciBNb2RlCQkJCQkJCQkqLwotI2RlZmluZSBETUFGTE9XX0FSUkFZCQkweDQwMDAJCS8qIERlc2NyaXB0b3IgQXJyYXkgTW9kZQkJCQkJCSovCi0jZGVmaW5lIERNQUZMT1dfU01BTEwJCTB4NjAwMAkJLyogU21hbGwgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUJCQkJKi8KLSNkZWZpbmUgRE1BRkxPV19MQVJHRQkJMHg3MDAwCQkvKiBMYXJnZSBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZQkJCQkqLwogCiAvKiBETUF4X1BFUklQSEVSQUxfTUFQLCBNRE1BX3l5X1BFUklQSEVSQUxfTUFQIE1hc2tzCQkJCQkJCQkqLwogI2RlZmluZSBDVFlQRQkJCTB4MDA0MAkvKiBETUEgQ2hhbm5lbCBUeXBlIEluZGljYXRvciAoTWVtb3J5L1BlcmlwaGVyYWwqKQkqLwpAQCAtMTQxNiwxMyArMTI3Nyw2IEBACiAjZGVmaW5lCVBNQVBfVUFSVDFSWAkweEEwMDAJLyogCQlVQVJUMSBQb3J0IFJlY2VpdmUgRE1BCQkJCQkJKi8KICNkZWZpbmUJUE1BUF9VQVJUMVRYCTB4QjAwMAkvKiAJCVVBUlQxIFBvcnQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KIAotLyogRE1BeF9JUlFfU1RBVFVTLCBNRE1BX3l5X0lSUV9TVEFUVVMgTWFza3MJCQkJCQkqLwotI2RlZmluZSBETUFfRE9ORQkJMHgwMDAxCS8qIERNQSBDb21wbGV0aW9uIEludGVycnVwdCBTdGF0dXMJKi8KLSNkZWZpbmUgRE1BX0VSUgkJCTB4MDAwMgkvKiBETUEgRXJyb3IgSW50ZXJydXB0IFN0YXR1cwkJKi8KLSNkZWZpbmUgREZFVENICQkJMHgwMDA0CS8qIERNQSBEZXNjcmlwdG9yIEZldGNoIEluZGljYXRvcgkqLwotI2RlZmluZSBETUFfUlVOCQkJMHgwMDA4CS8qIERNQSBDaGFubmVsIFJ1bm5pbmcgSW5kaWNhdG9yCSovCi0KLQogLyogICoqKioqKioqKioqKiAgUEFSQUxMRUwgUEVSSVBIRVJBTCBJTlRFUkZBQ0UgKFBQSSkgTUFTS1MgKioqKioqKioqKioqKi8KIC8qICBQUElfQ09OVFJPTCBNYXNrcwkJCQkJCQkJCQkJCQkqLwogI2RlZmluZSBQT1JUX0VOCQkJMHgwMDAxCQkvKiBQUEkgUG9ydCBFbmFibGUJCQkJCSovCkBAIC0xODMwLDQ2ICsxNjg0LDYgQEAKICNkZWZpbmUgQk5ETU9ERV9DQVBUICAgICAweDIwMDAgIC8qIGJvdW5kYXJ5IGNhcHR1cmUgbW9kZSAqLwogI2RlZmluZSBCTkRNT0RFX0FFWFQgICAgIDB4MzAwMCAgLyogYm91bmRhcnkgYXV0by1leHRlbmQgbW9kZSAqLwogCi0vKiBCaXQgbWFza3MgZm9yIE9UUF9DT05UUk9MICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgRlVTRV9GQUREUiAgMHgxZmYgICAgICAvKiBPVFAvRnVzZSBBZGRyZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZJRU4gIDB4ODAwICAgICAgLyogT1RQL0Z1c2UgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GSUVOICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBGVEVTVERFQyAgMHgxMDAwICAgICAvKiBPVFAvRnVzZSBUZXN0IERlY29kZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5GVEVTVERFQyAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEZXUlRFU1QgIDB4MjAwMCAgICAgLyogT1RQL0Z1c2UgV3JpdGUgVGVzdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5GV1JURVNUICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGUkRFTiAgMHg0MDAwICAgICAvKiBPVFAvRnVzZSBSZWFkIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZSREVOICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGV1JFTiAgMHg4MDAwICAgICAvKiBPVFAvRnVzZSBXcml0ZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5GV1JFTiAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgT1RQX0JFTiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZCRU4gIDB4ZmZmZiAgICAgLyogT1RQL0Z1c2UgQnl0ZSBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBPVFBfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGQ09NUCAgMHgxICAgICAgICAvKiBPVFAvRnVzZSBBY2Nlc3MgQ29tcGxldGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5GQ09NUCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBGRVJST1IgIDB4MiAgICAgICAgLyogT1RQL0Z1c2UgQWNjZXNzIEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5GRVJST1IgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1NUkdMT0FEICAweDEwICAgICAgIC8qIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIgR2Fza2V0IExvYWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5NTVJHTE9BRCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTU1SR0xPQ0sgIDB4MjAgICAgICAgLyogTWVtb3J5IE1hcHBlZCBSZWdpc3RlciBHYXNrZXQgTG9jayAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgbk1NUkdMT0NLICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZQR01FTiAgMHg0MCAgICAgICAvKiBPVFAvRnVzZSBQcm9ncmFtIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRlBHTUVOICAweDAKLQotLyogQml0IG1hc2tzIGZvciBPVFBfVElNSU5HICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNFQ0RJViAgMHhmZiAgICAgICAvKiBNaWNybyBTZWNvbmQgRGl2aWRlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBSRUFEQUNDICAweDdmMDAgICAgIC8qIFJlYWQgQWNjZXNzIFRpbWUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1BVTVBSTCAgMHgzODAwMCAgICAvKiBDaGFyZ2UgUHVtcCBSZWxlYXNlIFRpbWUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1BVTVBTVSAgMHhjMDAwMCAgICAvKiBDaGFyZ2UgUHVtcCBTZXR1cCBUaW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QSEQgIDB4ZjAwMDAwICAgLyogQ2hhcmdlIFB1bXAgSG9sZCBUaW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFBHTVRJTUUgIDB4ZmYwMDAwMDAgLyogUHJvZ3JhbSBUaW1lICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX1NZU1NXVCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVNVURBQkwgIDB4MSAgICAgICAgLyogRW11bGF0aW9uIERpc2FibGUuICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9LY29uZmlnCmluZGV4IDg0OGFjNmYuLjFmOGNiZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9LY29uZmlnCkBAIC0xLDMgKzEsNyBAQAorY29uZmlnIEJGNTJ4CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gKEJGNTIyIHx8IEJGNTIzIHx8IEJGNTI0IHx8IEJGNTI1IHx8IEJGNTI2IHx8IEJGNTI3KQorCiBpZiAoQkY1MngpCiAKIHNvdXJjZSAiYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCmluZGV4IGYxOTk2YjEuLjdhYjA4MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKQEAgLTE1LDkgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRF9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgvdXNiL2lzcDEzNjIuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNjUsNyArNjIsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9pc3AxNzYwX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiaXNwMTc2MC1oY2QiLAorCS5uYW1lICAgICAgICAgICA9ICJpc3AxNzYwIiwKIAkuaWQgICAgICAgICAgICAgPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJmlzcDE3NjBfcHJpdiwKQEAgLTMxNyw0NSArMzE0LDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXNwMTM2Ml9oY2RfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSAweDIwMzYwMDAwLAotCQkuZW5kID0gMHgyMDM2MDAwMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSAweDIwMzYwMDA0LAotCQkuZW5kID0gMHgyMDM2MDAwNCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBDT05GSUdfVVNCX0lTUDEzNjJfQkZJTl9HUElPX0lSUSwKLQkJLmVuZCA9IENPTkZJR19VU0JfSVNQMTM2Ml9CRklOX0dQSU9fSVJRLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpc3AxMzYyX3BsYXRmb3JtX2RhdGEgaXNwMTM2Ml9wcml2ID0gewotCS5zZWwxNUtyZXMgPSAxLAotCS5jbGtub3RzdG9wID0gMCwKLQkub2NfZW5hYmxlID0gMCwKLQkuaW50X2FjdF9oaWdoID0gMCwKLQkuaW50X2VkZ2VfdHJpZ2dlcmVkID0gMCwKLQkucmVtb3RlX3dha2V1cF9jb25uZWN0ZWQgPSAwLAotCS5ub19wb3dlcl9zd2l0Y2hpbmcgPSAxLAotCS5wb3dlcl9zd2l0Y2hpbmdfbW9kZSA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpc3AxMzYyX2hjZF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiaXNwMTM2Mi1oY2QiLAotCS5pZCA9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaXNwMTM2Ml9wcml2LAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlzcDEzNjJfaGNkX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gaXNwMTM2Ml9oY2RfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fbWlpX2J1cyA9IHsKIAkubmFtZSA9ICJiZmluX21paV9idXMiLApAQCAtODQxLDEwICs3OTksNiBAQAogCSZzbDgxMV9oY2RfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRF9NT0RVTEUpCi0JJmlzcDEzNjJfaGNkX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDE3NjBfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTc2MF9IQ0RfTU9EVUxFKQogCSZiZmluX2lzcDE3NjBfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKaW5kZXggZjA5NjY1Zi4uNTI5NGZkZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwpAQCAtMTMsOSArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEX01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTM2Mi5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC02Myw3ICs2MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2lzcDE3NjBfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJpc3AxNzYwLWhjZCIsCisJLm5hbWUgICAgICAgICAgID0gImlzcDE3NjAiLAogCS5pZCAgICAgICAgICAgICA9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmaXNwMTc2MF9wcml2LApAQCAtMzczLDQ1ICszNzAsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc3AxMzYyX2hjZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IDB4MjAzNjAwMDAsCi0JCS5lbmQgPSAweDIwMzYwMDAwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IDB4MjAzNjAwMDQsCi0JCS5lbmQgPSAweDIwMzYwMDA0LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IENPTkZJR19VU0JfSVNQMTM2Ml9CRklOX0dQSU9fSVJRLAotCQkuZW5kID0gQ09ORklHX1VTQl9JU1AxMzYyX0JGSU5fR1BJT19JUlEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlzcDEzNjJfcGxhdGZvcm1fZGF0YSBpc3AxMzYyX3ByaXYgPSB7Ci0JLnNlbDE1S3JlcyA9IDEsCi0JLmNsa25vdHN0b3AgPSAwLAotCS5vY19lbmFibGUgPSAwLAotCS5pbnRfYWN0X2hpZ2ggPSAwLAotCS5pbnRfZWRnZV90cmlnZ2VyZWQgPSAwLAotCS5yZW1vdGVfd2FrZXVwX2Nvbm5lY3RlZCA9IDAsCi0JLm5vX3Bvd2VyX3N3aXRjaGluZyA9IDEsCi0JLnBvd2VyX3N3aXRjaGluZ19tb2RlID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlzcDEzNjJfaGNkX2RldmljZSA9IHsKLQkubmFtZSA9ICJpc3AxMzYyLWhjZCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZpc3AxMzYyX3ByaXYsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaXNwMTM2Ml9oY2RfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpc3AxMzYyX2hjZF9yZXNvdXJjZXMsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9taWlfYnVzID0gewogCS5uYW1lID0gImJmaW5fbWlpX2J1cyIsCkBAIC02ODgsMTIgKzY0Niw2IEBACiB9OwogI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRjUzN19MUTAzNSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzVfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmY1MzctbHEwMzUiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMApAQCAtODUwLDcgKzgwMiw3IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWSkgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUllfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0JGSU5fUk9UQVJZKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9CRklOX1JPVEFSWV9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxhc20vYmZpbl9yb3RhcnkuaD4KIApAQCAtOTI0LDEwICs4NzYsNiBAQAogCSZzbDgxMV9oY2RfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRF9NT0RVTEUpCi0JJmlzcDEzNjJfaGNkX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDE3NjBfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTc2MF9IQ0RfTU9EVUxFKQogCSZiZmluX2lzcDE3NjBfZGV2aWNlLAogI2VuZGlmCkBAIC05NTcsMTAgKzkwNSw2IEBACiAJJmJmaW5fc3BpMF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1KSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRjUzN19MUTAzNV9NT0RVTEUpCi0JJmJmaW5fZmJfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX1QzNTBNQ1FCKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOX1QzNTBNQ1FCX01PRFVMRSkKIAkmYmY1MnhfdDM1MG1jcWJfZGV2aWNlLAogI2VuZGlmCkBAIC05OTEsNyArOTM1LDcgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWV9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfQkZJTl9ST1RBUlkpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0JGSU5fUk9UQVJZX01PRFVMRSkKIAkmYmZpbl9yb3RhcnlfZGV2aWNlLAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBlN2Q2MDM0Li5mNzE0YzVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC00NiwxMCArNDYsNCBAQAogI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwogCi0vKiBQTExfRElWIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIENDTEtfRElWMSBDU0VMX0RJVjEJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0NMS19ESVYyIENTRUxfRElWMgkvKiAgICAgICAgICBDQ0xLID0gVkNPIC8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDQ0xLX0RJVjQgQ1NFTF9ESVY0CS8qICAgICAgICAgIENDTEsgPSBWQ08gLyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENDTEtfRElWOCBDU0VMX0RJVjgJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaAppbmRleCBkYzMxMTllOS4uZDdlMjc1MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNS5oCkBAIC0xMCwxNSArMTAsOCBAQAogLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgImRlZkJGNTI1LmgiCiAKLS8qIGluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUyNSAqLwotCi0vKiBpbmNsdWRlIGNkZWZCRjUyeF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTJ4IHByb2Nlc3NvcnMgKi8KLSNpbmNsdWRlICJjZGVmQkY1MnhfYmFzZS5oIgotCi0vKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1MjUgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCisvKiBCRjUyNSBpcyBCRjUyMiArIFVTQiAqLworI2luY2x1ZGUgImNkZWZCRjUyMi5oIgogCiAvKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKaW5kZXggZDY1Nzk0NDkuLmM3YmE1NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaApAQCAtMTAsMTUgKzEwLDggQEAKIC8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KICNpbmNsdWRlICJkZWZCRjUyNy5oIgogCi0vKiBpbmNsdWRlIGNvcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcG9pbnRlciBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9jZGVmX0xQQmxhY2tmaW4uaD4KLQotLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MjcgKi8KLQotLyogaW5jbHVkZSBjZGVmQkY1MnhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjUyeCBwcm9jZXNzb3JzICovCi0jaW5jbHVkZSAiY2RlZkJGNTJ4X2Jhc2UuaCIKLQotLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTI3IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLworLyogQkY1MjcgaXMgQkY1MjUgKyBFTUFDICovCisjaW5jbHVkZSAiY2RlZkJGNTI1LmgiCiAKIC8qIDEwLzEwMCBFdGhlcm5ldCBDb250cm9sbGVyCSgweEZGQzAzMDAwIC0gMHhGRkMwMzFGRikgKi8KIApAQCAtMTg1LDQxNyArMTc4LDQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0FCT1JUKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0FCT1JUKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0FCT1JUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19BQk9SVCwgdmFsKQogCi0vKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZBRERSKCkJCQliZmluX3JlYWQxNihVU0JfRkFERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0ZBRERSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRkFERFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QT1dFUigpCQkJYmZpbl9yZWFkMTYoVVNCX1BPV0VSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QT1dFUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BPV0VSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlRYKCkJCQliZmluX3JlYWQxNihVU0JfSU5UUlRYKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFgodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlgoKQkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSUlgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJSWCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOVFJSWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJUWEUoKQkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVFhFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFhFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5UUlRYRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJSWEUoKQkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSUlhFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSUlhFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5UUlJYRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0IoKQkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVVNCKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVVNCKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5UUlVTQiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0JFKCkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVVNCRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQkUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVVNCRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZSQU1FKCkJCQliZmluX3JlYWQxNihVU0JfRlJBTUUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0ZSQU1FKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRlJBTUUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTkRFWCgpCQkJYmZpbl9yZWFkMTYoVVNCX0lOREVYKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTkRFWCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOREVYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVEVTVE1PREUoKQkJYmZpbl9yZWFkMTYoVVNCX1RFU1RNT0RFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9URVNUTU9ERSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RFU1RNT0RFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfR0xPQklOVFIoKQkJYmZpbl9yZWFkMTYoVVNCX0dMT0JJTlRSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9HTE9CSU5UUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0dMT0JJTlRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfR0xPQkFMX0NUTCgpCQliZmluX3JlYWQxNihVU0JfR0xPQkFMX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfR0xPQkFMX0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0dMT0JBTF9DVEwsIHZhbCkKLQotLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhfTUFYX1BBQ0tFVCgpCQliZmluX3JlYWQxNihVU0JfVFhfTUFYX1BBQ0tFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhfTUFYX1BBQ0tFVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfVFhfTUFYX1BBQ0tFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0NTUjAoKQkJCWJmaW5fcmVhZDE2KFVTQl9DU1IwKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9DU1IwKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQ1NSMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYQ1NSKCkJCQliZmluX3JlYWQxNihVU0JfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYQ1NSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWF9NQVhfUEFDS0VUKCkJCWJmaW5fcmVhZDE2KFVTQl9SWF9NQVhfUEFDS0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWF9NQVhfUEFDS0VUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9SWF9NQVhfUEFDS0VULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhDU1IoKQkJCWJmaW5fcmVhZDE2KFVTQl9SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhDU1IodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0NPVU5UMCgpCQkJYmZpbl9yZWFkMTYoVVNCX0NPVU5UMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQ09VTlQwKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQ09VTlQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhDT1VOVCgpCQkJYmZpbl9yZWFkMTYoVVNCX1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhUWVBFKCkJCQliZmluX3JlYWQxNihVU0JfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWFRZUEUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9OQUtMSU1JVDAoKQkJYmZpbl9yZWFkMTYoVVNCX05BS0xJTUlUMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTkFLTElNSVQwKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTkFLTElNSVQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhJTlRFUlZBTCgpCQliZmluX3JlYWQxNihVU0JfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhJTlRFUlZBTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWFRZUEUoKQkJCWJmaW5fcmVhZDE2KFVTQl9SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYVFlQRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYSU5URVJWQUwoKQkJYmZpbl9yZWFkMTYoVVNCX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYSU5URVJWQUwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhDT1VOVCgpCQkJYmZpbl9yZWFkMTYoVVNCX1RYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCBGSUZPIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAwX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQMF9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDBfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQMF9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAxX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQMV9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDFfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQMV9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAyX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQMl9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDJfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQMl9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAzX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQM19GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDNfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQM19GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA0X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQNF9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDRfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQNF9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA1X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQNV9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDVfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQNV9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA2X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQNl9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDZfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQNl9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA3X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQN19GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDdfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQN19GSUZPLCB2YWwpCi0KLS8qIFVTQiBPVEcgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19ERVZfQ1RMKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfREVWX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX0RFVl9DVEwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9PVEdfREVWX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19WQlVTX0lSUSgpCQliZmluX3JlYWQxNihVU0JfT1RHX1ZCVVNfSVJRKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfVkJVU19JUlEodmFsKQliZmluX3dyaXRlMTYoVVNCX09UR19WQlVTX0lSUSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19WQlVTX01BU0soKQkJYmZpbl9yZWFkMTYoVVNCX09UR19WQlVTX01BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19WQlVTX01BU0sodmFsKQliZmluX3dyaXRlMTYoVVNCX09UR19WQlVTX01BU0ssIHZhbCkKLQotLyogVVNCIFBoeSBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfTElOS0lORk8oKQkJYmZpbl9yZWFkMTYoVVNCX0xJTktJTkZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MSU5LSU5GTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0xJTktJTkZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVlBMRU4oKQkJCWJmaW5fcmVhZDE2KFVTQl9WUExFTikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVlBMRU4odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9WUExFTiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0hTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9IU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9IU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSFNfRU9GMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9GU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRlNfRU9GMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0xTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9MU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTFNfRU9GMSwgdmFsKQotCi0vKiAoQVBIWV9DTlRSTCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NOVFJMKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NOVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DTlRSTCwgdmFsKQotCi0vKiAoQVBIWV9DQUxJQiBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NBTElCKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NBTElCKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NBTElCKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DQUxJQiwgdmFsKQotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfQVBIWV9DTlRSTDIoKQkJYmZpbl9yZWFkMTYoVVNCX0FQSFlfQ05UUkwyKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NOVFJMMih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0FQSFlfQ05UUkwyLCB2YWwpCi0KLS8qIChQSFlfVEVTVCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QSFlfVEVTVCgpCQliZmluX3JlYWQxNihVU0JfUEhZX1RFU1QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BIWV9URVNUKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUEhZX1RFU1QsIHZhbCkKLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1BMTE9TQ19DVFJMKCkJCWJmaW5fcmVhZDE2KFVTQl9QTExPU0NfQ1RSTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUExMT1NDX0NUUkwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9QTExPU0NfQ1RSTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1NSUF9DTEtESVYoKQkJYmZpbl9yZWFkMTYoVVNCX1NSUF9DTEtESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1NSUF9DTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9TUlBfQ0xLRElWLCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCAwIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCAyIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCA0IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCA2IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWENPVU5ULCB2YWwpCi0KLS8qIFVTQiBFbmRwb2ludCA3IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWENPVU5ULCB2YWwpCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUFfSU5URVJSVVBUKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUFfSU5URVJSVVBUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUFfSU5URVJSVVBULCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDAgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMENPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMEFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTBBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMEFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMEFERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMENPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMENPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMENPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMENPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMENPVU5USElHSCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCAxIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUExQUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUFERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTFBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTFDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTFDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgMiBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMkFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMkFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQ09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQ09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDMgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0NPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0FERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTNBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0FERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BM0FERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0NPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BM0NPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0NPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BM0NPVU5USElHSCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCA0IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0QUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNEFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE0QUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNEFERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTRBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNENPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTRDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTRDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgNSBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNUFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNUFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE1QUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE1Q09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE1Q09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDYgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTZBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2QUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNkFERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPVU5USElHSCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCA3IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3QUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0FERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE3QUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0FERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTdBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT1VOVEhJR0gsIHZhbCkKLQogI2VuZGlmIC8qIF9DREVGX0JGNTI3X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAppbmRleCA3MDE0ZGRlLi4xMmYyYWQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCkBAIC04NDQsNiArODQ0LDcgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9QUElfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0NPTlRST0wsIHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1BQSV9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KFBQSV9TVEFUVVMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoUFBJX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX2NsZWFyX1BQSV9TVEFUVVMoKQkJCWJmaW5fd3JpdGVfUFBJX1NUQVRVUygweEZGRkYpCiAjZGVmaW5lIGJmaW5fcmVhZF9QUElfREVMQVkoKQkJCWJmaW5fcmVhZDE2KFBQSV9ERUxBWSkKICNkZWZpbmUgYmZpbl93cml0ZV9QUElfREVMQVkodmFsKQkJYmZpbl93cml0ZTE2KFBQSV9ERUxBWSwgdmFsKQogI2RlZmluZSBiZmluX3JlYWRfUFBJX0NPVU5UKCkJCQliZmluX3JlYWQxNihQUElfQ09VTlQpCkBAIC0xMDYyLDE3ICsxMDYzLDYgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0NOVF9NSU4oKQkJCWJmaW5fcmVhZDMyKENOVF9NSU4pCiAjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX01JTih2YWwpCQkJYmZpbl93cml0ZTMyKENOVF9NSU4sIHZhbCkKIAotLyogT1RQL0ZVU0UgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9DT05UUk9MKCkJCQliZmluX3JlYWQxNihPVFBfQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoT1RQX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9CRU4oKQkJCWJmaW5fcmVhZDE2KE9UUF9CRU4pCi0jZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0JFTih2YWwpCQkJYmZpbl93cml0ZTE2KE9UUF9CRU4sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KE9UUF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfT1RQX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoT1RQX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX1RJTUlORygpCQkJYmZpbl9yZWFkMzIoT1RQX1RJTUlORykKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfVElNSU5HKHZhbCkJCWJmaW5fd3JpdGUzMihPVFBfVElNSU5HLCB2YWwpCi0KIC8qIFNlY3VyaXR5IFJlZ2lzdGVycyAqLwogCiAjZGVmaW5lIGJmaW5fcmVhZF9TRUNVUkVfU1lTU1dUKCkJCWJmaW5fcmVhZDMyKFNFQ1VSRV9TWVNTV1QpCkBAIC0xMDgyLDE3ICsxMDcyLDYgQEAKICNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoU0VDVVJFX1NUQVRVUykKICNkZWZpbmUgYmZpbl93cml0ZV9TRUNVUkVfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihTRUNVUkVfU1RBVFVTLCB2YWwpCiAKLS8qIE9UUCBSZWFkL1dyaXRlIERhdGEgQnVmZmVyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTAoKQkJCWJmaW5fcmVhZDMyKE9UUF9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfREFUQTAodmFsKQkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX0RBVEExKCkJCQliZmluX3JlYWQzMihPVFBfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUzMihPVFBfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMigpCQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMih2YWwpCQliZmluX3dyaXRlMzIoT1RQX0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTMoKQkJCWJmaW5fcmVhZDMyKE9UUF9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfREFUQTModmFsKQkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMywgdmFsKQotCiAvKiBORkMgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX05GQ19DVEwoKQkJCWJmaW5fcmVhZDE2KE5GQ19DVEwpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKaW5kZXggODJhYmVmYy4uYzEzNmY3MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaApAQCAtNywxNSArNyw4IEBACiAjaWZuZGVmIF9ERUZfQkY1MjVfSAogI2RlZmluZSBfREVGX0JGNTI1X0gKIAotLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgotCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUyNSAqLwotCi0vKiBJbmNsdWRlIGRlZkJGNTJ4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MnggcHJvY2Vzc29ycyAqLwotI2luY2x1ZGUgImRlZkJGNTJ4X2Jhc2UuaCIKLQotLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTI1IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLworLyogQkY1MjUgaXMgQkY1MjIgKyBVU0IgKi8KKyNpbmNsdWRlICJkZWZCRjUyMi5oIgogCiAvKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCmluZGV4IDU3MGExMjUuLjRkZDU4ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKQEAgLTcsMTUgKzcsOSBAQAogI2lmbmRlZiBfREVGX0JGNTI3X0gKICNkZWZpbmUgX0RFRl9CRjUyN19ICiAKLS8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxhc20vZGVmX0xQQmxhY2tmaW4uaD4KKy8qIEJGNTI3IGlzIEJGNTI1ICsgRU1BQyAqLworI2luY2x1ZGUgImRlZkJGNTI1LmgiCiAKLS8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTI3ICovCi0KLS8qIEluY2x1ZGUgZGVmQkY1MnhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjUyeCBwcm9jZXNzb3JzICovCi0jaW5jbHVkZSAiZGVmQkY1MnhfYmFzZS5oIgotCi0vKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1MjcgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCiAvKiAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlcgkoMHhGRkMwMzAwMCAtIDB4RkZDMDMxRkYpICovCiAKICNkZWZpbmUgRU1BQ19PUE1PREUgICAgICAgICAgICAgMHhGRkMwMzAwMCAgICAgICAvKiBPcGVyYXRpbmcgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zOTQsNjczICszODgsNCBAQAogI2RlZmluZQlUWF9HRTEwMjRfQ05UICAgICAweDAwMjAwMDAwICAgIC8qIDEwMjQtTWF4LUJ5dGUgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlUWF9BQk9SVF9DTlQgICAgICAweDAwNDAwMDAwICAgIC8qIFRYIEZyYW1lcyBBYm9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0vKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9GQUREUiAgMHhmZmMwMzgwMCAgIC8qIEZ1bmN0aW9uIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUE9XRVIgIDB4ZmZjMDM4MDQgICAvKiBQb3dlciBtYW5hZ2VtZW50IHJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlRYICAweGZmYzAzODA4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBUeCBlbmRwb2ludCAxIHRvIDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlggIDB4ZmZjMDM4MGMgICAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgZm9yIFJ4IGVuZHBvaW50cyAxIHRvIDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWEUgIDB4ZmZjMDM4MTAgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVHggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJSWEUgIDB4ZmZjMDM4MTQgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyUnggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJVU0IgIDB4ZmZjMDM4MTggICAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgZm9yIGNvbW1vbiBVU0IgaW50ZXJydXB0cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCRSAgMHhmZmMwMzgxYyAgIC8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgZm9yIEludHJVU0IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRlJBTUUgIDB4ZmZjMDM4MjAgICAvKiBVU0IgZnJhbWUgbnVtYmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOREVYICAweGZmYzAzODI0ICAgLyogSW5kZXggcmVnaXN0ZXIgZm9yIHNlbGVjdGluZyB0aGUgaW5kZXhlZCBlbmRwb2ludCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfVEVTVE1PREUgIDB4ZmZjMDM4MjggICAvKiBFbmFibGVkIFVTQiAyMCB0ZXN0IG1vZGVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JJTlRSICAweGZmYzAzODJjICAgLyogR2xvYmFsIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyIGFuZCBXYWtldXAgRXhjZXB0aW9uIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfR0xPQkFMX0NUTCAgMHhmZmMwMzgzMCAgIC8qIEdsb2JhbCBDbG9jayBDb250cm9sIGZvciB0aGUgY29yZSAqLwotCi0vKiBVU0IgUGFja2V0IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX1RYX01BWF9QQUNLRVQgIDB4ZmZjMDM4NDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9DU1IwICAweGZmYzAzODQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50IDAgYW5kIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ1NSICAweGZmYzAzODQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50IDAgYW5kIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9SWF9NQVhfUEFDS0VUICAweGZmYzAzODQ4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENTUiAgMHhmZmMwMzg0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ09VTlQwICAweGZmYzAzODUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYQ09VTlQgIDB4ZmZjMDM4NTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQgMCBGSUZPIGFuZCBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYVFlQRSAgMHhmZmMwMzg1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFVTQl9OQUtMSU1JVDAgIDB4ZmZjMDM4NTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfVFhJTlRFUlZBTCAgMHhmZmMwMzg1OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50IDAgYW5kIG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhUWVBFICAweGZmYzAzODVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfUlhJTlRFUlZBTCAgMHhmZmMwMzg2MCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdCBhbmQgSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfVFhDT1VOVCAgMHhmZmMwMzg2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBzZWxlY3RlZCBlbmRwb2ludCBUeCBGSUZPICovCi0KLS8qIFVTQiBFbmRwb2ludCBGSUZPIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQMF9GSUZPICAweGZmYzAzODgwICAgLyogRW5kcG9pbnQgMCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQMV9GSUZPICAweGZmYzAzODg4ICAgLyogRW5kcG9pbnQgMSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQMl9GSUZPICAweGZmYzAzODkwICAgLyogRW5kcG9pbnQgMiBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQM19GSUZPICAweGZmYzAzODk4ICAgLyogRW5kcG9pbnQgMyBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQNF9GSUZPICAweGZmYzAzOGEwICAgLyogRW5kcG9pbnQgNCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQNV9GSUZPICAweGZmYzAzOGE4ICAgLyogRW5kcG9pbnQgNSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQNl9GSUZPICAweGZmYzAzOGIwICAgLyogRW5kcG9pbnQgNiBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0VQN19GSUZPICAweGZmYzAzOGI4ICAgLyogRW5kcG9pbnQgNyBGSUZPICovCi0KLS8qIFVTQiBPVEcgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9PVEdfREVWX0NUTCAgMHhmZmMwMzkwMCAgIC8qIE9URyBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX0lSUSAgMHhmZmMwMzkwNCAgIC8qIE9URyBWQlVTIENvbnRyb2wgSW50ZXJydXB0cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfT1RHX1ZCVVNfTUFTSyAgMHhmZmMwMzkwOCAgIC8qIFZCVVMgQ29udHJvbCBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLS8qIFVTQiBQaHkgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9MSU5LSU5GTyAgMHhmZmMwMzk0OCAgIC8qIEVuYWJsZXMgcHJvZ3JhbW1pbmcgb2Ygc29tZSBQSFktc2lkZSBkZWxheXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVlBMRU4gIDB4ZmZjMDM5NGMgICAvKiBEZXRlcm1pbmVzIGR1cmF0aW9uIG9mIFZCVVMgcHVsc2UgZm9yIFZCVVMgY2hhcmdpbmcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX0hTX0VPRjEgIDB4ZmZjMDM5NTAgICAvKiBUaW1lIGJ1ZmZlciBmb3IgSGlnaC1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZTX0VPRjEgIDB4ZmZjMDM5NTQgICAvKiBUaW1lIGJ1ZmZlciBmb3IgRnVsbC1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX0xTX0VPRjEgIDB4ZmZjMDM5NTggICAvKiBUaW1lIGJ1ZmZlciBmb3IgTG93LVNwZWVkIHRyYW5zYWN0aW9ucyAqLwotCi0vKiAoQVBIWV9DTlRSTCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0FQSFlfQ05UUkwgIDB4ZmZjMDM5ZTAgICAvKiBSZWdpc3RlciB0aGF0IGluY3JlYXNlcyB2aXNpYmlsaXR5IG9mIEFuYWxvZyBQSFkgKi8KLQotLyogKEFQSFlfQ0FMSUIgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NBTElCICAweGZmYzAzOWU0ICAgLyogUmVnaXN0ZXIgdXNlZCB0byBzZXQgc29tZSBjYWxpYnJhdGlvbiB2YWx1ZXMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMMiAgMHhmZmMwMzllOCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gcHJldmVudCByZS1lbnVtZXJhdGlvbiBvbmNlIE1vYWIgZ29lcyBpbnRvIGhpYmVybmF0ZSBtb2RlICovCi0KLS8qIChQSFlfVEVTVCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfUEhZX1RFU1QgIDB4ZmZjMDM5ZWMgICAvKiBVc2VkIGZvciByZWR1Y2luZyBzaW11bGF0aW9uIHRpbWUgYW5kIHNpbXBsaWZpZXMgRklGTyB0ZXN0YWJpbGl0eSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX1BMTE9TQ19DVFJMICAweGZmYzAzOWYwICAgLyogVXNlZCB0byBwcm9ncmFtIGRpZmZlcmVudCBwYXJhbWV0ZXJzIGZvciBVU0IgUExMIGFuZCBPc2NpbGxhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9TUlBfQ0xLRElWICAweGZmYzAzOWY0ICAgLyogVXNlZCB0byBwcm9ncmFtIGNsb2NrIGRpdmlkZSB2YWx1ZSBmb3IgdGhlIGNsb2NrIGZlZCB0byB0aGUgU1JQIGRldGVjdGlvbiBsb2dpYyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhNQVhQICAweGZmYzAzYTAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDU1IgIDB4ZmZjMDNhMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYTUFYUCAgMHhmZmMwM2EwOCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYQ1NSICAweGZmYzAzYTBjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENPVU5UICAweGZmYzAzYTEwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYVFlQRSAgMHhmZmMwM2ExNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9UWElOVEVSVkFMICAweGZmYzAzYTE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYVFlQRSAgMHhmZmMwM2ExYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9SWElOVEVSVkFMICAweGZmYzAzYTIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9UWENPVU5UICAweGZmYzAzYTI4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50MCBUeCBGSUZPICovCi0KLS8qIFVTQiBFbmRwb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWE1BWFAgIDB4ZmZjMDNhNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENTUiAgMHhmZmMwM2E0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWE1BWFAgIDB4ZmZjMDNhNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWENTUiAgMHhmZmMwM2E0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDT1VOVCAgMHhmZmMwM2E1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDEgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYVFlQRSAgMHhmZmMwM2E1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQxICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9UWElOVEVSVkFMICAweGZmYzAzYTU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhUWVBFICAweGZmYzAzYTVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkxX1JYSU5URVJWQUwgIDB4ZmZjMDNhNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYQ09VTlQgIDB4ZmZjMDNhNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUrSDEwMiBlbmRwb2ludDEgVHggRklGTyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgMiBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhNQVhQICAweGZmYzAzYTgwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDU1IgIDB4ZmZjMDNhODQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhNQVhQICAweGZmYzAzYTg4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhDU1IgIDB4ZmZjMDNhOGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ09VTlQgIDB4ZmZjMDNhOTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQyIEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWFRZUEUgIDB4ZmZjMDNhOTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MiAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhJTlRFUlZBTCAgMHhmZmMwM2E5OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYVFlQRSAgMHhmZmMwM2E5YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMl9SWElOVEVSVkFMICAweGZmYzAzYWEwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWENPVU5UICAweGZmYzAzYWE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50MiBUeCBGSUZPICovCi0KLS8qIFVTQiBFbmRwb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWE1BWFAgIDB4ZmZjMDNhYzAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENTUiAgMHhmZmMwM2FjNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWE1BWFAgIDB4ZmZjMDNhYzggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWENTUiAgMHhmZmMwM2FjYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDT1VOVCAgMHhmZmMwM2FkMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDMgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYVFlQRSAgMHhmZmMwM2FkNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQzICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19UWElOVEVSVkFMICAweGZmYzAzYWQ4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhUWVBFICAweGZmYzAzYWRjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkzX1JYSU5URVJWQUwgIDB4ZmZjMDNhZTAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYQ09VTlQgIDB4ZmZjMDNhZTggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgSDEyNGVuZHBvaW50MyBUeCBGSUZPICovCi0KLS8qIFVTQiBFbmRwb2ludCA0IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWE1BWFAgIDB4ZmZjMDNiMDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENTUiAgMHhmZmMwM2IwNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWE1BWFAgIDB4ZmZjMDNiMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWENTUiAgMHhmZmMwM2IwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDT1VOVCAgMHhmZmMwM2IxMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYVFlQRSAgMHhmZmMwM2IxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9UWElOVEVSVkFMICAweGZmYzAzYjE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhUWVBFICAweGZmYzAzYjFjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk0X1JYSU5URVJWQUwgIDB4ZmZjMDNiMjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYQ09VTlQgIDB4ZmZjMDNiMjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQ0IFR4IEZJRk8gKi8KLQotLyogVVNCIEVuZHBvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYTUFYUCAgMHhmZmMwM2I0MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ1NSICAweGZmYzAzYjQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYTUFYUCAgMHhmZmMwM2I0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYQ1NSICAweGZmYzAzYjRjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENPVU5UICAweGZmYzAzYjUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhUWVBFICAweGZmYzAzYjU0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDUgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1RYSU5URVJWQUwgIDB4ZmZjMDNiNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWFRZUEUgIDB4ZmZjMDNiNWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhJTlRFUlZBTCAgMHhmZmMwM2I2MCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhDT1VOVCAgMHhmZmMwM2I2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDUgVHggRklGTyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhNQVhQICAweGZmYzAzYjgwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhDU1IgIDB4ZmZjMDNiODQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhNQVhQICAweGZmYzAzYjg4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhDU1IgIDB4ZmZjMDNiOGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ09VTlQgIDB4ZmZjMDNiOTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ2IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWFRZUEUgIDB4ZmZjMDNiOTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NiAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhJTlRFUlZBTCAgMHhmZmMwM2I5OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYVFlQRSAgMHhmZmMwM2I5YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNl9SWElOVEVSVkFMICAweGZmYzAzYmEwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWENPVU5UICAweGZmYzAzYmE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NiBUeCBGSUZPICovCi0KLS8qIFVTQiBFbmRwb2ludCA3IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWE1BWFAgIDB4ZmZjMDNiYzAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENTUiAgMHhmZmMwM2JjNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19SWE1BWFAgIDB4ZmZjMDNiYzggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JN19SWENTUiAgMHhmZmMwM2JjYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDT1VOVCAgMHhmZmMwM2JkMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDcgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1RYVFlQRSAgMHhmZmMwM2JkNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19UWElOVEVSVkFMICAweGZmYzAzYmQ4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhUWVBFICAweGZmYzAzYmRjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk3X1JYSU5URVJWQUwgIDB4ZmZjMDNiZjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1RYQ09VTlQgIDB4ZmZjMDNiZjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQ3IFR4IEZJRk8gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BX0lOVEVSUlVQVCAgMHhmZmMwM2MwMCAgIC8qIEluZGljYXRlcyBwZW5kaW5nIGludGVycnVwdHMgZm9yIHRoZSBETUEgY2hhbm5lbHMgKi8KLQotLyogVVNCIENoYW5uZWwgMCBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMENPTlRST0wgIDB4ZmZjMDNjMDQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTBBRERSTE9XICAweGZmYzAzYzA4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMEFERFJISUdIICAweGZmYzAzYzBjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMENPVU5UTE9XICAweGZmYzAzYzEwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTBDT1VOVEhJR0ggIDB4ZmZjMDNjMTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLwotCi0vKiBVU0IgQ2hhbm5lbCAxIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUExQ09OVFJPTCAgMHhmZmMwM2MyNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAxIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMUFERFJMT1cgIDB4ZmZjMDNjMjggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUExQUREUkhJR0ggIDB4ZmZjMDNjMmMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUExQ09VTlRMT1cgIDB4ZmZjMDNjMzAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMUNPVU5USElHSCAgMHhmZmMwM2MzNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCi0KLS8qIFVTQiBDaGFubmVsIDIgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTJDT05UUk9MICAweGZmYzAzYzQ0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDIgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEyQUREUkxPVyAgMHhmZmMwM2M0OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTJBRERSSElHSCAgMHhmZmMwM2M0YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTJDT1VOVExPVyAgMHhmZmMwM2M1MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUEyQ09VTlRISUdIICAweGZmYzAzYzU0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KLQotLyogVVNCIENoYW5uZWwgMyBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BM0NPTlRST0wgIDB4ZmZjMDNjNjQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMyBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTNBRERSTE9XICAweGZmYzAzYzY4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BM0FERFJISUdIICAweGZmYzAzYzZjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BM0NPVU5UTE9XICAweGZmYzAzYzcwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTNDT1VOVEhJR0ggIDB4ZmZjMDNjNzQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLwotCi0vKiBVU0IgQ2hhbm5lbCA0IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09OVFJPTCAgMHhmZmMwM2M4NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA0IGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNEFERFJMT1cgIDB4ZmZjMDNjODggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE0QUREUkhJR0ggIDB4ZmZjMDNjOGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09VTlRMT1cgIDB4ZmZjMDNjOTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNENPVU5USElHSCAgMHhmZmMwM2M5NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCi0KLS8qIFVTQiBDaGFubmVsIDUgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTVDT05UUk9MICAweGZmYzAzY2E0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE1QUREUkxPVyAgMHhmZmMwM2NhOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTVBRERSSElHSCAgMHhmZmMwM2NhYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTVDT1VOVExPVyAgMHhmZmMwM2NiMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE1Q09VTlRISUdIICAweGZmYzAzY2I0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KLQotLyogVVNCIENoYW5uZWwgNiBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNkNPTlRST0wgIDB4ZmZjMDNjYzQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNiBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTZBRERSTE9XICAweGZmYzAzY2M4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNkFERFJISUdIICAweGZmYzAzY2NjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNkNPVU5UTE9XICAweGZmYzAzY2QwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTZDT1VOVEhJR0ggIDB4ZmZjMDNjZDQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLwotCi0vKiBVU0IgQ2hhbm5lbCA3IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09OVFJPTCAgMHhmZmMwM2NlNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA3IGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BN0FERFJMT1cgIDB4ZmZjMDNjZTggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE3QUREUkhJR0ggIDB4ZmZjMDNjZWMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09VTlRMT1cgIDB4ZmZjMDNjZjAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BN0NPVU5USElHSCAgMHhmZmMwM2NmNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0ZBRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgRlVOQ1RJT05fQUREUkVTUyAgMHg3ZiAgICAgICAvKiBGdW5jdGlvbiBhZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1BPV0VSICovCi0KLSNkZWZpbmUgICAgICAgICAgIEVOQUJMRV9TVVNQRU5ETSAgMHgxICAgICAgICAvKiBlbmFibGUgU3VzcGVuZE0gb3V0cHV0ICovCi0jZGVmaW5lICAgICAgICAgIG5FTkFCTEVfU1VTUEVORE0gIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgIFNVU1BFTkRfTU9ERSAgMHgyICAgICAgICAvKiBTdXNwZW5kIE1vZGUgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgIG5TVVNQRU5EX01PREUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICBSRVNVTUVfTU9ERSAgMHg0ICAgICAgICAvKiBETUEgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgblJFU1VNRV9NT0RFICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkVTRVQgIDB4OCAgICAgICAgLyogUmVzZXQgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkVTRVQgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSFNfTU9ERSAgMHgxMCAgICAgICAvKiBIaWdoIFNwZWVkIG1vZGUgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkhTX01PREUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhTX0VOQUJMRSAgMHgyMCAgICAgICAvKiBoaWdoIFNwZWVkIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBuSFNfRU5BQkxFICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTT0ZUX0NPTk4gIDB4NDAgICAgICAgLyogU29mdCBjb25uZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIG5TT0ZUX0NPTk4gIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgSVNPX1VQREFURSAgMHg4MCAgICAgICAvKiBJc29jaHJvbm91cyB1cGRhdGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuSVNPX1VQREFURSAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVFggKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAwX1RYICAweDEgICAgICAgIC8qIFR4IEVuZHBvaW50IDAgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDBfVFggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMV9UWCAgMHgyICAgICAgICAvKiBUeCBFbmRwb2ludCAxIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAxX1RYICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDJfVFggIDB4NCAgICAgICAgLyogVHggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMl9UWCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAzX1RYICAweDggICAgICAgIC8qIFR4IEVuZHBvaW50IDMgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDNfVFggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNF9UWCAgMHgxMCAgICAgICAvKiBUeCBFbmRwb2ludCA0IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA0X1RYICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDVfVFggIDB4MjAgICAgICAgLyogVHggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNV9UWCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA2X1RYICAweDQwICAgICAgIC8qIFR4IEVuZHBvaW50IDYgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDZfVFggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQN19UWCAgMHg4MCAgICAgICAvKiBUeCBFbmRwb2ludCA3IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA3X1RYICAweDAgICAgICAgCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJSWCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDFfUlggIDB4MiAgICAgICAgLyogUnggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMV9SWCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAyX1JYICAweDQgICAgICAgIC8qIFJ4IEVuZHBvaW50IDIgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDJfUlggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQM19SWCAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAzX1JYICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDRfUlggIDB4MTAgICAgICAgLyogUnggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNF9SWCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA1X1JYICAweDIwICAgICAgIC8qIFJ4IEVuZHBvaW50IDUgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDVfUlggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNl9SWCAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA2X1JYICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDdfUlggIDB4ODAgICAgICAgLyogUnggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQN19SWCAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVFhFICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDBfVFhfRSAgMHgxICAgICAgICAvKiBFbmRwb2ludCAwIGludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDBfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMV9UWF9FICAweDIgICAgICAgIC8qIFR4IEVuZHBvaW50IDEgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDFfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMl9UWF9FICAweDQgICAgICAgIC8qIFR4IEVuZHBvaW50IDIgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDJfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQM19UWF9FICAweDggICAgICAgIC8qIFR4IEVuZHBvaW50IDMgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDNfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNF9UWF9FICAweDEwICAgICAgIC8qIFR4IEVuZHBvaW50IDQgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDRfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNV9UWF9FICAweDIwICAgICAgIC8qIFR4IEVuZHBvaW50IDUgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDVfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNl9UWF9FICAweDQwICAgICAgIC8qIFR4IEVuZHBvaW50IDYgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDZfVFhfRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQN19UWF9FICAweDgwICAgICAgIC8qIFR4IEVuZHBvaW50IDcgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDdfVFhfRSAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSUlhFICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDFfUlhfRSAgMHgyICAgICAgICAvKiBSeCBFbmRwb2ludCAxIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVAxX1JYX0UgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDJfUlhfRSAgMHg0ICAgICAgICAvKiBSeCBFbmRwb2ludCAyIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVAyX1JYX0UgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDNfUlhfRSAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVAzX1JYX0UgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDRfUlhfRSAgMHgxMCAgICAgICAvKiBSeCBFbmRwb2ludCA0IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVA0X1JYX0UgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDVfUlhfRSAgMHgyMCAgICAgICAvKiBSeCBFbmRwb2ludCA1IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVA1X1JYX0UgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDZfUlhfRSAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVA2X1JYX0UgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDdfUlhfRSAgMHg4MCAgICAgICAvKiBSeCBFbmRwb2ludCA3IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVA3X1JYX0UgIDB4MCAgICAgICAKLQotLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlVTQiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTVVNQRU5EX0IgIDB4MSAgICAgICAgLyogU3VzcGVuZCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgblNVU1BFTkRfQiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFU1VNRV9CICAweDIgICAgICAgIC8qIFJlc3VtZSBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5SRVNVTUVfQiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICBSRVNFVF9PUl9CQUJMRV9CICAweDQgICAgICAgIC8qIFJlc2V0L2JhYmJsZSBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICBuUkVTRVRfT1JfQkFCTEVfQiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNPRl9CICAweDggICAgICAgIC8qIFN0YXJ0IG9mIGZyYW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBuU09GX0IgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENPTk5fQiAgMHgxMCAgICAgICAvKiBDb25uZWN0aW9uIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ09OTl9CICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRElTQ09OX0IgIDB4MjAgICAgICAgLyogRGlzY29ubmVjdCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ESVNDT05fQiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICBTRVNTSU9OX1JFUV9CICAweDQwICAgICAgIC8qIFNlc3Npb24gUmVxdWVzdCAqLwotI2RlZmluZSAgICAgICAgICAgIG5TRVNTSU9OX1JFUV9CICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICBWQlVTX0VSUk9SX0IgIDB4ODAgICAgICAgLyogVmJ1cyB0aHJlc2hvbGQgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgIG5WQlVTX0VSUk9SX0IgIDB4MCAgICAgICAKLQotLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlVTQkUgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBTVVNQRU5EX0JFICAweDEgICAgICAgIC8qIFN1c3BlbmQgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuU1VTUEVORF9CRSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgUkVTVU1FX0JFICAweDIgICAgICAgIC8qIFJlc3VtZSBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBuUkVTVU1FX0JFICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQkUgIDB4NCAgICAgICAgLyogUmVzZXQvYmFiYmxlIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICBuUkVTRVRfT1JfQkFCTEVfQkUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNPRl9CRSAgMHg4ICAgICAgICAvKiBTdGFydCBvZiBmcmFtZSBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5TT0ZfQkUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09OTl9CRSAgMHgxMCAgICAgICAvKiBDb25uZWN0aW9uIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkNPTk5fQkUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgIERJU0NPTl9CRSAgMHgyMCAgICAgICAvKiBEaXNjb25uZWN0IGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIG5ESVNDT05fQkUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICBTRVNTSU9OX1JFUV9CRSAgMHg0MCAgICAgICAvKiBTZXNzaW9uIFJlcXVlc3QgaW50IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgblNFU1NJT05fUkVRX0JFICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgIFZCVVNfRVJST1JfQkUgIDB4ODAgICAgICAgLyogVmJ1cyB0aHJlc2hvbGQgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICBuVkJVU19FUlJPUl9CRSAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9GUkFNRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBGUkFNRV9OVU1CRVIgIDB4N2ZmICAgICAgLyogRnJhbWUgbnVtYmVyICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOREVYICovCi0KLSNkZWZpbmUgICAgICAgICBTRUxFQ1RFRF9FTkRQT0lOVCAgMHhmICAgICAgICAvKiBzZWxlY3RlZCBlbmRwb2ludCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9HTE9CQUxfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgR0xPQkFMX0VOQSAgMHgxICAgICAgICAvKiBlbmFibGVzIFVTQiBtb2R1bGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuR0xPQkFMX0VOQSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICBFUDFfVFhfRU5BICAweDIgICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDEgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQMV9UWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAyX1RYX0VOQSAgMHg0ICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAyIGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIG5FUDJfVFhfRU5BICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQM19UWF9FTkEgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMyBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuRVAzX1RYX0VOQSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICBFUDRfVFhfRU5BICAweDEwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQNF9UWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA1X1RYX0VOQSAgMHgyMCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA1IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIG5FUDVfVFhfRU5BICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9UWF9FTkEgIDB4NDAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNiBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuRVA2X1RYX0VOQSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICBFUDdfVFhfRU5BICAweDgwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDcgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQN19UWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAxX1JYX0VOQSAgMHgxMDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDEgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQMV9SWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAyX1JYX0VOQSAgMHgyMDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDIgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQMl9SWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAzX1JYX0VOQSAgMHg0MDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDMgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQM19SWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA0X1JYX0VOQSAgMHg4MDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQNF9SWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA1X1JYX0VOQSAgMHgxMDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDUgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQNV9SWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA2X1JYX0VOQSAgMHgyMDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDYgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQNl9SWF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA3X1JYX0VOQSAgMHg0MDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDcgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbkVQN19SWF9FTkEgIDB4MCAgICAgICAKLQotLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX0RFVl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRVNTSU9OICAweDEgICAgICAgIC8qIHNlc3Npb24gaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgblNFU1NJT04gIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1JFUSAgMHgyICAgICAgICAvKiBIb3N0IG5lZ290aWF0aW9uIHJlcXVlc3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5IT1NUX1JFUSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9NT0RFICAweDQgICAgICAgIC8qIGluZGljYXRlcyBVU0JEUkMgaXMgYSBob3N0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIG5IT1NUX01PREUgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBWQlVTMCAgMHg4ICAgICAgICAvKiBWYnVzIGxldmVsIGluZGljYXRvclswXSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblZCVVMwICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVkJVUzEgIDB4MTAgICAgICAgLyogVmJ1cyBsZXZlbCBpbmRpY2F0b3JbMV0gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5WQlVTMSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIExTREVWICAweDIwICAgICAgIC8qIExvdy1zcGVlZCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5MU0RFViAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZTREVWICAweDQwICAgICAgIC8qIEZ1bGwgb3IgSGlnaC1zcGVlZCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5GU0RFViAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfREVWSUNFICAweDgwICAgICAgIC8qIEEnIG9yICdCJyBkZXZpY2UgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuQl9ERVZJQ0UgIDB4MCAgICAgICAKLQotLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX1ZCVVNfSVJRICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgRFJJVkVfVkJVU19PTiAgMHgxICAgICAgICAvKiBpbmRpY2F0b3IgdG8gZHJpdmUgVkJVUyBjb250cm9sIGNpcmN1aXQgKi8KLSNkZWZpbmUgICAgICAgICAgICBuRFJJVkVfVkJVU19PTiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgIERSSVZFX1ZCVVNfT0ZGICAweDIgICAgICAgIC8qIGluZGljYXRvciB0byBzaHV0IG9mZiBjaGFyZ2UgcHVtcCAqLwotI2RlZmluZSAgICAgICAgICAgbkRSSVZFX1ZCVVNfT0ZGICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICBDSFJHX1ZCVVNfU1RBUlQgIDB4NCAgICAgICAgLyogaW5kaWNhdG9yIGZvciBleHRlcm5hbCBjaXJjdWl0IHRvIHN0YXJ0IGNoYXJnaW5nIFZCVVMgKi8KLSNkZWZpbmUgICAgICAgICAgbkNIUkdfVkJVU19TVEFSVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICBDSFJHX1ZCVVNfRU5EICAweDggICAgICAgIC8qIGluZGljYXRvciBmb3IgZXh0ZXJuYWwgY2lyY3VpdCB0byBlbmQgY2hhcmdpbmcgVkJVUyAqLwotI2RlZmluZSAgICAgICAgICAgIG5DSFJHX1ZCVVNfRU5EICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICBESVNDSFJHX1ZCVVNfU1RBUlQgIDB4MTAgICAgICAgLyogaW5kaWNhdG9yIHRvIHN0YXJ0IGRpc2NoYXJnaW5nIFZCVVMgKi8KLSNkZWZpbmUgICAgICAgbkRJU0NIUkdfVkJVU19TVEFSVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICBESVNDSFJHX1ZCVVNfRU5EICAweDIwICAgICAgIC8qIGluZGljYXRvciB0byBzdG9wIGRpc2NoYXJnaW5nIFZCVVMgKi8KLSNkZWZpbmUgICAgICAgICBuRElTQ0hSR19WQlVTX0VORCAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfVkJVU19NQVNLICovCi0KLSNkZWZpbmUgICAgICAgICBEUklWRV9WQlVTX09OX0VOQSAgMHgxICAgICAgICAvKiBlbmFibGUgRFJJVkVfVkJVU19PTiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgIG5EUklWRV9WQlVTX09OX0VOQSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgRFJJVkVfVkJVU19PRkZfRU5BICAweDIgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09GRiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgbkRSSVZFX1ZCVVNfT0ZGX0VOQSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICBDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDQgICAgICAgIC8qIGVuYWJsZSBDSFJHX1ZCVVNfU1RBUlQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgbkNIUkdfVkJVU19TVEFSVF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICBDSFJHX1ZCVVNfRU5EX0VOQSAgMHg4ICAgICAgICAvKiBlbmFibGUgQ0hSR19WQlVTX0VORCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgIG5DSFJHX1ZCVVNfRU5EX0VOQSAgMHgwICAgICAgIAotI2RlZmluZSAgICBESVNDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDEwICAgICAgIC8qIGVuYWJsZSBESVNDSFJHX1ZCVVNfU1RBUlQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgbkRJU0NIUkdfVkJVU19TVEFSVF9FTkEgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICBESVNDSFJHX1ZCVVNfRU5EX0VOQSAgMHgyMCAgICAgICAvKiBlbmFibGUgRElTQ0hSR19WQlVTX0VORCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgIG5ESVNDSFJHX1ZCVVNfRU5EX0VOQSAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9DU1IwICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSWFBLVFJEWSAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCByZWNlaXZlIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgblJYUEtUUkRZICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVFhQS1RSRFkgIDB4MiAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5UWFBLVFJEWSAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICBTVEFMTF9TRU5UICAweDQgICAgICAgIC8qIFNUQUxMIGhhbmRzaGFrZSBzZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgblNUQUxMX1NFTlQgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUQUVORCAgMHg4ICAgICAgICAvKiBEYXRhIGVuZCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuREFUQUVORCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIFNFVFVQRU5EICAweDEwICAgICAgIC8qIFNldHVwIGVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgblNFVFVQRU5EICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTRU5EU1RBTEwgIDB4MjAgICAgICAgLyogU2VuZCBTVEFMTCBoYW5kc2hha2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgblNFTkRTVEFMTCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgIFNFUlZJQ0VEX1JYUEtUUkRZICAweDQwICAgICAgIC8qIHVzZWQgdG8gY2xlYXIgdGhlIFJ4UGt0UmR5IGJpdCAqLwotI2RlZmluZSAgICAgICAgblNFUlZJQ0VEX1JYUEtUUkRZICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgU0VSVklDRURfU0VUVVBFTkQgIDB4ODAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgU2V0dXBFbmQgYml0ICovCi0jZGVmaW5lICAgICAgICBuU0VSVklDRURfU0VUVVBFTkQgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgIEZMVVNIRklGTyAgMHgxMDAgICAgICAvKiBmbHVzaCBlbmRwb2ludCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIG5GTFVTSEZJRk8gIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgU1RBTExfUkVDRUlWRURfSCAgMHg0ICAgICAgICAvKiBTVEFMTCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgblNUQUxMX1JFQ0VJVkVEX0ggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgU0VUVVBQS1RfSCAgMHg4ICAgICAgICAvKiBzZW5kIFNldHVwIHRva2VuIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIG5TRVRVUFBLVF9IICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEVSUk9SX0ggIDB4MTAgICAgICAgLyogdGltZW91dCBlcnJvciBpbmRpY2F0b3IgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkVSUk9SX0ggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVFQS1RfSCAgMHgyMCAgICAgICAvKiBSZXF1ZXN0IGFuIElOIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgblJFUVBLVF9IICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgU1RBVFVTUEtUX0ggIDB4NDAgICAgICAgLyogU3RhdHVzIHN0YWdlIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgblNUQVRVU1BLVF9IICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgIE5BS19USU1FT1VUX0ggIDB4ODAgICAgICAgLyogRVAwIGhhbHRlZCBhZnRlciBhIE5BSyBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICBuTkFLX1RJTUVPVVRfSCAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9DT1VOVDAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgRVAwX1JYX0NPVU5UICAweDdmICAgICAgIC8qIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiBFUDAgRklGTyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9OQUtMSU1JVDAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBFUDBfTkFLX0xJTUlUICAweDFmICAgICAgIC8qIG51bWJlciBvZiBmcmFtZXMvbWljcm8gZnJhbWVzIGFmdGVyIHdoaWNoIEVQMCB0aW1lb3V0cyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWF9NQVhfUEFDS0VUICovCi0KLSNkZWZpbmUgICAgICAgICBNQVhfUEFDS0VUX1NJWkVfVCAgMHg3ZmYgICAgICAvKiBtYXhpbXVtIGRhdGEgcGF5IGxvYWQgaW4gYSBmcmFtZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWF9NQVhfUEFDS0VUICovCi0KLSNkZWZpbmUgICAgICAgICBNQVhfUEFDS0VUX1NJWkVfUiAgMHg3ZmYgICAgICAvKiBtYXhpbXVtIGRhdGEgcGF5IGxvYWQgaW4gYSBmcmFtZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWENTUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRYUEtUUkRZX1QgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuVFhQS1RSRFlfVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICBGSUZPX05PVF9FTVBUWV9UICAweDIgICAgICAgIC8qIEZJRk8gbm90IGVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgbkZJRk9fTk9UX0VNUFRZX1QgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgVU5ERVJSVU5fVCAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuVU5ERVJSVU5fVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgIEZMVVNIRklGT19UICAweDggICAgICAgIC8qIGZsdXNoIGVuZHBvaW50IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIG5GTFVTSEZJRk9fVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9UICAweDEwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5EX1QgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTlRfVCAgMHgyMCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgdHJhbnNtaXR0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTlRfVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgQ0xFQVJfREFUQVRPR0dMRV9UICAweDQwICAgICAgIC8qIGNsZWFyIGVuZHBvaW50IGRhdGEgdG9nZ2xlICovCi0jZGVmaW5lICAgICAgIG5DTEVBUl9EQVRBVE9HR0xFX1QgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QVFhfVCAgMHg4MCAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIG5JTkNPTVBUWF9UICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICBETUFSRVFNT0RFX1QgIDB4NDAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFNT0RFX1QgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgIEZPUkNFX0RBVEFUT0dHTEVfVCAgMHg4MDAgICAgICAvKiBGb3JjZSBkYXRhIHRvZ2dsZSAqLwotI2RlZmluZSAgICAgICBuRk9SQ0VfREFUQVRPR0dMRV9UICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1QgIDB4MTAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLwotI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRX0VOQV9UICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSVNPX1QgIDB4NDAwMCAgICAgLyogZW5hYmxlIElzb2Nocm9ub3VzIHRyYW5zZmVycyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbklTT19UICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICBBVVRPU0VUX1QgIDB4ODAwMCAgICAgLyogYWxsb3dzIFR4UGt0UmR5IHRvIGJlIHNldCBhdXRvbWF0aWNhbGx5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIG5BVVRPU0VUX1QgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9USCAgMHg0ICAgICAgICAvKiBlcnJvciBjb25kaXRpb24gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRVJST1JfVEggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICBTVEFMTF9SRUNFSVZFRF9USCAgMHgyMCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICBuU1RBTExfUkVDRUlWRURfVEggIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICBOQUtfVElNRU9VVF9USCAgMHg4MCAgICAgICAvKiBOQUsgdGltZW91dCBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgIG5OQUtfVElNRU9VVF9USCAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWENPVU5UICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUWF9DT1VOVCAgMHgxZmZmICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWENTUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFJYUEtUUkRZX1IgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuUlhQS1RSRFlfUiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgIEZJRk9fRlVMTF9SICAweDIgICAgICAgIC8qIEZJRk8gbm90IGVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICBuRklGT19GVUxMX1IgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICAgIE9WRVJSVU5fUiAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgbk9WRVJSVU5fUiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgIERBVEFFUlJPUl9SICAweDggICAgICAgIC8qIE91dCBwYWNrZXQgY2Fubm90IGJlIGxvYWRlZCBpbnRvIFJ4ICBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICBuREFUQUVSUk9SX1IgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgICBGTFVTSEZJRk9fUiAgMHgxMCAgICAgICAvKiBmbHVzaCBlbmRwb2ludCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICBuRkxVU0hGSUZPX1IgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTkRfUiAgMHgyMCAgICAgICAvKiBpc3N1ZSBhIFN0YWxsIGhhbmRzaGFrZSAqLwotI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VORF9SICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1IgIDB4NDAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCi0jZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5UX1IgIDB4MCAgICAgICAKLSNkZWZpbmUgICAgICAgIENMRUFSX0RBVEFUT0dHTEVfUiAgMHg4MCAgICAgICAvKiBjbGVhciBlbmRwb2ludCBkYXRhIHRvZ2dsZSAqLwotI2RlZmluZSAgICAgICBuQ0xFQVJfREFUQVRPR0dMRV9SICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgIElOQ09NUFJYX1IgIDB4MTAwICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuSU5DT01QUlhfUiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9SICAweDgwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRTU9ERV9SICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICBESVNOWUVUX1IgIDB4MTAwMCAgICAgLyogZGlzYWJsZSBOeWV0IGhhbmRzaGFrZXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgbkRJU05ZRVRfUiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRX0VOQV9SICAweDIwMDAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBmb3IgVHggRVAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUV9FTkFfUiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19SICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5JU09fUiAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgIEFVVE9DTEVBUl9SICAweDgwMDAgICAgIC8qIGFsbG93cyBUeFBrdFJkeSB0byBiZSBzZXQgYXV0b21hdGljYWxseSAqLwotI2RlZmluZSAgICAgICAgICAgICAgbkFVVE9DTEVBUl9SICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVJST1JfUkggIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgbkVSUk9SX1JIICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICBSRVFQS1RfUkggIDB4MjAgICAgICAgLyogcmVxdWVzdCBhbiBJTiB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgblJFUVBLVF9SSCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgIFNUQUxMX1JFQ0VJVkVEX1JIICAweDQwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgIG5TVEFMTF9SRUNFSVZFRF9SSCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgIElOQ09NUFJYX1JIICAweDEwMCAgICAgIC8qIGluZGljYXRlcyB0aGF0IGEgbGFyZ2UgcGFja2V0IGlzIHNwbGl0IGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgbklOQ09NUFJYX1JIICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgIERNQVJFUU1PREVfUkggIDB4ODAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgIG5ETUFSRVFNT0RFX1JIICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFVVE9SRVFfUkggIDB4NDAwMCAgICAgLyogc2V0cyBSZXFQa3QgYXV0b21hdGljYWxseSBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBuQVVUT1JFUV9SSCAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWENPVU5UICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSWF9DT1VOVCAgMHgxZmZmICAgICAvKiBOdW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgaW4gdGhlIHBhY2tldCBpbiB0aGUgUnggRklGTyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWFRZUEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgIFRBUkdFVF9FUF9OT19UICAweGYgICAgICAgIC8qIEVQIG51bWJlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQUk9UT0NPTF9UICAweGMgICAgICAgIC8qIHRyYW5zZmVyIHR5cGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfVFhJTlRFUlZBTCAqLwotCi0jZGVmaW5lICAgICAgICAgIFRYX1BPTExfSU5URVJWQUwgIDB4ZmYgICAgICAgLyogcG9sbGluZyBpbnRlcnZhbCBmb3Igc2VsZWN0ZWQgVHggRVAgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfUlhUWVBFICovCi0KLSNkZWZpbmUgICAgICAgICAgICBUQVJHRVRfRVBfTk9fUiAgMHhmICAgICAgICAvKiBFUCBudW1iZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUFJPVE9DT0xfUiAgMHhjICAgICAgICAvKiB0cmFuc2ZlciB0eXBlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYSU5URVJWQUwgKi8KLQotI2RlZmluZSAgICAgICAgICBSWF9QT0xMX0lOVEVSVkFMICAweGZmICAgICAgIC8qIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIHNlbGVjdGVkIFJ4IEVQICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQV9JTlRFUlJVUFQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTBfSU5UICAweDEgICAgICAgIC8qIERNQTAgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUEwX0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTFfSU5UICAweDIgICAgICAgIC8qIERNQTEgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUExX0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTJfSU5UICAweDQgICAgICAgIC8qIERNQTIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUEyX0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTNfSU5UICAweDggICAgICAgIC8qIERNQTMgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUEzX0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTRfSU5UICAweDEwICAgICAgIC8qIERNQTQgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE0X0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTVfSU5UICAweDIwICAgICAgIC8qIERNQTUgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE1X0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTZfSU5UICAweDQwICAgICAgIC8qIERNQTYgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE2X0lOVCAgMHgwICAgICAgIAotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTdfSU5UICAweDgwICAgICAgIC8qIERNQTcgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE3X0lOVCAgMHgwICAgICAgIAotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQV9FTkEgIDB4MSAgICAgICAgLyogRE1BIGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUFfRU5BICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICBESVJFQ1RJT04gIDB4MiAgICAgICAgLyogZGlyZWN0aW9uIG9mIERNQSB0cmFuc2ZlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBuRElSRUNUSU9OICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1PREUgIDB4NCAgICAgICAgLyogRE1BIEJ1cyBlcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NT0RFICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIElOVF9FTkEgIDB4OCAgICAgICAgLyogSW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5JTlRfRU5BICAweDAgICAgICAgCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBOVU0gIDB4ZjAgICAgICAgLyogRVAgbnVtYmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQlVTRVJST1IgIDB4MTAwICAgICAgLyogRE1BIEJ1cyBlcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgbkJVU0VSUk9SICAweDAgICAgICAgCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhBRERSSElHSCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIERNQV9BRERSX0hJR0ggIDB4ZmZmZiAgICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBETUEgbWFzdGVyIGNoYW5uZWwgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeEFERFJMT1cgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgRE1BX0FERFJfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgRE1BIG1hc3RlciBjaGFubmVsICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT1VOVEhJR0ggKi8KLQotI2RlZmluZSAgICAgICAgICAgIERNQV9DT1VOVF9ISUdIICAweGZmZmYgICAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09VTlRMT1cgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBETUFfQ09VTlRfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLwotCiAjZW5kaWYgLyogX0RFRl9CRjUyN19IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oCmluZGV4IGI5ZGJiNzMuLjhiMThiNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oCkBAIC01ODYsNTggKzU4Niw2IEBACiAqKgkJCQltb2RpZmllciBVTkxFU1MgdGhlIGxvd2VyIG9yZGVyIGJpdHMgYXJlIHNhdmVkIGFuZCBPUmVkIGJhY2sgaW4gd2hlbgogKioJCQkJdGhlIG1hY3JvIGlzIHVzZWQuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSoqICoqKioqKioqKioqKioqKioqKioqKiBQTEwgQU5EIFJFU0VUIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBQTExfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBERgkJCQkweDAwMDEJLyogMDogUExMID0gQ0xLSU4sIDE6IFBMTCA9IENMS0lOLzIJCQkJCSovCi0jZGVmaW5lIFBMTF9PRkYJCQkweDAwMDIJLyogUExMIE5vdCBQb3dlcmVkCQkJCQkJCQkJKi8KLSNkZWZpbmUgU1RPUENLCQkJMHgwMDA4CS8qIENvcmUgQ2xvY2sgT2ZmCQkJCQkJCQkJKi8KLSNkZWZpbmUgUERXTgkJCTB4MDAyMAkvKiBFbnRlciBEZWVwIFNsZWVwIE1vZGUJCQkJCQkJKi8KLSNkZWZpbmUJSU5fREVMQVkJCTB4MDA0MAkvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBJbnB1dCBMYXRjaGVzCQkJKi8KLSNkZWZpbmUJT1VUX0RFTEFZCQkweDAwODAJLyogQWRkIDIwMHBzIERlbGF5IFRvIEVCSVUgT3V0cHV0IFNpZ25hbHMJCQkqLwotI2RlZmluZSBCWVBBU1MJCQkweDAxMDAJLyogQnlwYXNzIHRoZSBQTEwJCQkJCQkJCQkqLwotI2RlZmluZQlNU0VMCQkJMHg3RTAwCS8qIE11bHRpcGxpZXIgU2VsZWN0IEZvciBDQ0xLL1ZDTyBGYWN0b3JzCQkJKi8KLS8qIFBMTF9DVEwgTWFjcm9zIChPbmx5IFVzZSBXaXRoIExvZ2ljIE9SIFdoaWxlIFNldHRpbmcgTG93ZXIgT3JkZXIgQml0cykJCQkqLwotI2RlZmluZQlTRVRfTVNFTCh4KQkJKCgoeCkmMHgzRikgPDwgMHg5KQkvKiBTZXQgTVNFTCA9IDAtNjMgLS0+IFZDTyA9IENMS0lOKk1TRUwJCSovCi0KLS8qIFBMTF9ESVYgTWFza3MJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFNTRUwJCQkweDAwMEYJLyogU3lzdGVtIFNlbGVjdAkJCQkJCSovCi0jZGVmaW5lCUNTRUwJCQkweDAwMzAJLyogQ29yZSBTZWxlY3QJCQkJCQkJKi8KLSNkZWZpbmUgQ1NFTF9ESVYxCQkweDAwMDAJLyogCQlDQ0xLID0gVkNPIC8gMQkJCQkJKi8KLSNkZWZpbmUgQ1NFTF9ESVYyCQkweDAwMTAJLyogCQlDQ0xLID0gVkNPIC8gMgkJCQkJKi8KLSNkZWZpbmUJQ1NFTF9ESVY0CQkweDAwMjAJLyogCQlDQ0xLID0gVkNPIC8gNAkJCQkJKi8KLSNkZWZpbmUJQ1NFTF9ESVY4CQkweDAwMzAJLyogCQlDQ0xLID0gVkNPIC8gOAkJCQkJKi8KLS8qIFBMTF9ESVYgTWFjcm9zCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBTRVRfU1NFTCh4KQkJKCh4KSYweEYpCQkvKiBTZXQgU1NFTCA9IDAtMTUgLS0+IFNDTEsgPSBWQ08vU1NFTAkqLwotCi0vKiBWUl9DVEwgTWFza3MJKi8KLSNkZWZpbmUJRlJFUQkJCTB4MzAwMAkvKiBTd2l0Y2hpbmcgT3NjaWxsYXRvciBGcmVxdWVuY3kgRm9yIFJlZ3VsYXRvcgkqLwotI2RlZmluZQlISUJFUk5BVEUJCTB4MDAwMAkvKiAJCVBvd2VyZG93bi9CeXBhc3MgT24tQm9hcmQgUmVndWxhdGlvbgkqLwotCi0jZGVmaW5lCVZMRVYJCQkweDAwRjAJLyogSW50ZXJuYWwgVm9sdGFnZSBMZXZlbAkJCQkJKi8KLSNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogCQlWTEVWID0gMC44NSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzA5MAkJMHgwMDcwCS8qIAkJVkxFViA9IDAuOTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8wOTUJCTB4MDA4MAkvKiAJCVZMRVYgPSAwLjk1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogCQlWTEVWID0gMS4wMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzEwNQkJMHgwMEEwCS8qIAkJVkxFViA9IDEuMDUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMTAJCTB4MDBCMAkvKiAJCVZMRVYgPSAxLjEwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogCQlWTEVWID0gMS4xNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzEyMAkJMHgwMEQwCS8qIAkJVkxFViA9IDEuMjAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMjUJCTB4MDBFMAkvKiAJCVZMRVYgPSAxLjI1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogCQlWTEVWID0gMS4zMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotCi0jZGVmaW5lCVdBS0UJCQkweDAxMDAJLyogRW5hYmxlIFJUQy9SZXNldCBXYWtldXAgRnJvbSBIaWJlcm5hdGUJKi8KLSNkZWZpbmUJVVNCV0UJCQkweDAyMDAJLyogRW5hYmxlIFVTQiBXYWtldXAgRnJvbSBIaWJlcm5hdGUJCQkqLwotI2RlZmluZQlQSFlXRQkJCTB4MDQwMAkvKiBFbmFibGUgUEhZIFdha2V1cCBGcm9tIEhpYmVybmF0ZQkJCSovCi0jZGVmaW5lCUNMS0JVRk9FCQkweDQwMDAJLyogQ0xLSU4gQnVmZmVyIE91dHB1dCBFbmFibGUgKi8KLSNkZWZpbmUJUEhZQ0xLT0UJCUNMS0JVRk9FCS8qIEFsdGVybmF0aXZlIGxlZ2FjeSBuYW1lIGZvciB0aGUgYWJvdmUgKi8KLSNkZWZpbmUJU0NLRUxPVwkJMHg4MDAwCS8qIEVuYWJsZSBEcml2ZSBDS0UgTG93IER1cmluZyBSZXNldAkJKi8KLQotLyogUExMX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEFDVElWRV9QTExFTkFCTEVECTB4MDAwMQkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRW5hYmxlZAkqLwotI2RlZmluZQlGVUxMX09OCQkJCTB4MDAwMgkvKiBQcm9jZXNzb3IgSW4gRnVsbCBPbiBNb2RlCQkJCQkqLwotI2RlZmluZSBBQ1RJVkVfUExMRElTQUJMRUQJMHgwMDA0CS8qIFByb2Nlc3NvciBJbiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBEaXNhYmxlZAkqLwotI2RlZmluZQlQTExfTE9DS0VECQkJMHgwMDIwCS8qIFBMTF9MT0NLQ05UIEhhcyBCZWVuIFJlYWNoZWQJCQkJCSovCiAKIC8qIENISVBJRCBNYXNrcyAqLwogI2RlZmluZSBDSElQSURfVkVSU0lPTiAgICAgICAgIDB4RjAwMDAwMDAKQEAgLTc1Nyw2NiArNzA1LDYgQEAKICNkZWZpbmUgSVdSX0RJU0FCTEUoeCkJKDB4RkZGRkZGRkYgXiAoMSA8PCAoKHgpJjB4MUYpKSkgCS8qIFdha2V1cCBEaXNhYmxlIFBlcmlwaGVyYWwgI3gJCSovCiAKIAotLyogKioqKioqKioqIFdBVENIRE9HIFRJTUVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIFdhdGNoZG9nIFRpbWVyIFdET0dfQ1RMIFJlZ2lzdGVyIE1hc2tzICovCi0KLSNkZWZpbmUgV0RFVih4KSAoKCh4KTw8MSkgJiAweDAwMDYpIC8qIGV2ZW50IGdlbmVyYXRlZCBvbiByb2xsIG92ZXIgKi8KLSNkZWZpbmUgV0RFVl9SRVNFVCAweDAwMDAgLyogZ2VuZXJhdGUgcmVzZXQgZXZlbnQgb24gcm9sbCBvdmVyICovCi0jZGVmaW5lIFdERVZfTk1JIDB4MDAwMiAvKiBnZW5lcmF0ZSBOTUkgZXZlbnQgb24gcm9sbCBvdmVyICovCi0jZGVmaW5lIFdERVZfR1BJIDB4MDAwNCAvKiBnZW5lcmF0ZSBHUCBJUlEgb24gcm9sbCBvdmVyICovCi0jZGVmaW5lIFdERVZfTk9ORSAweDAwMDYgLyogbm8gZXZlbnQgb24gcm9sbCBvdmVyICovCi0jZGVmaW5lIFdERU4gMHgwRkYwIC8qIGVuYWJsZSB3YXRjaGRvZyAqLwotI2RlZmluZSBXRERJUyAweDBBRDAgLyogZGlzYWJsZSB3YXRjaGRvZyAqLwotI2RlZmluZSBXRFJPIDB4ODAwMCAvKiB3YXRjaGRvZyByb2xsZWQgb3ZlciBsYXRjaCAqLwotCi0vKiBkZXByZWNpYXRlZCBXRE9HX0NUTCBSZWdpc3RlciBNYXNrcyBmb3IgbGVnYWN5IGNvZGUgKi8KLQotCi0jZGVmaW5lIElDVEwgV0RFVgotI2RlZmluZSBFTkFCTEVfUkVTRVQgV0RFVl9SRVNFVAotI2RlZmluZSBXRE9HX1JFU0VUIFdERVZfUkVTRVQKLSNkZWZpbmUgRU5BQkxFX05NSSBXREVWX05NSQotI2RlZmluZSBXRE9HX05NSSBXREVWX05NSQotI2RlZmluZSBFTkFCTEVfR1BJIFdERVZfR1BJCi0jZGVmaW5lIFdET0dfR1BJIFdERVZfR1BJCi0jZGVmaW5lIERJU0FCTEVfRVZUIFdERVZfTk9ORQotI2RlZmluZSBXRE9HX05PTkUgV0RFVl9OT05FCi0KLSNkZWZpbmUgVE1SX0VOIFdERU4KLSNkZWZpbmUgVE1SX0RJUyBXRERJUwotI2RlZmluZSBUUk8gV0RSTwotI2RlZmluZSBJQ1RMX1AwIDB4MDEKLSAjZGVmaW5lIElDVExfUDEgMHgwMgotI2RlZmluZSBUUk9fUCAweDBGCi0KLQotCi0vKiAqKioqKioqKioqKioqKiogIFJFQUwgVElNRSBDTE9DSyBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBSVENfU1RBVCBhbmQgUlRDX0FMQVJNIE1hc2tzCQkJCQkJCQkJCSovCi0jZGVmaW5lCVJUQ19TRUMJCQkJMHgwMDAwMDAzRgkvKiBSZWFsLVRpbWUgQ2xvY2sgU2Vjb25kcwkqLwotI2RlZmluZQlSVENfTUlOCQkJCTB4MDAwMDBGQzAJLyogUmVhbC1UaW1lIENsb2NrIE1pbnV0ZXMJKi8KLSNkZWZpbmUJUlRDX0hSCQkJCTB4MDAwMUYwMDAJLyogUmVhbC1UaW1lIENsb2NrIEhvdXJzCSovCi0jZGVmaW5lCVJUQ19EQVkJCQkJMHhGRkZFMDAwMAkvKiBSZWFsLVRpbWUgQ2xvY2sgRGF5cwkJKi8KLQotLyogUlRDX0FMQVJNIE1hY3JvCQkJej1kYXkJCXk9aHIJeD1taW4Jdz1zZWMJCSovCi0jZGVmaW5lIFNFVF9BTEFSTSh6LHkseCx3KQkoKCgoeikmMHg3RkZGKTw8MHgxMSl8KCgoeSkmMHgxRik8PDB4Qyl8KCgoeCkmMHgzRik8PDB4Nil8KCh3KSYweDNGKSkKLQotLyogUlRDX0lDVEwgYW5kIFJUQ19JU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lCVNUT1BXQVRDSAkJCTB4MDAwMQkJLyogU3RvcHdhdGNoIEludGVycnVwdCBFbmFibGUJCQkJCQkJCSovCi0jZGVmaW5lCUFMQVJNCQkJCTB4MDAwMgkJLyogQWxhcm0gSW50ZXJydXB0IEVuYWJsZQkJCQkJCQkJCSovCi0jZGVmaW5lCVNFQ09ORAkJCQkweDAwMDQJCS8qIFNlY29uZHMgKDEgSHopIEludGVycnVwdCBFbmFibGUJCQkJCQkJKi8KLSNkZWZpbmUJTUlOVVRFCQkJCTB4MDAwOAkJLyogTWludXRlcyBJbnRlcnJ1cHQgRW5hYmxlCQkJCQkJCQkJKi8KLSNkZWZpbmUJSE9VUgkJCQkweDAwMTAJCS8qIEhvdXJzIEludGVycnVwdCBFbmFibGUJCQkJCQkJCQkqLwotI2RlZmluZQlEQVkJCQkJCTB4MDAyMAkJLyogMjQgSG91cnMgKERheXMpIEludGVycnVwdCBFbmFibGUJCQkJCQkJKi8KLSNkZWZpbmUJREFZX0FMQVJNCQkJMHgwMDQwCQkvKiBEYXkgQWxhcm0gKERheSwgSG91ciwgTWludXRlLCBTZWNvbmQpIEludGVycnVwdCBFbmFibGUJKi8KLSNkZWZpbmUJV1JJVEVfUEVORElORwkJMHg0MDAwCQkvKiBXcml0ZSBQZW5kaW5nIFN0YXR1cwkJCQkJCQkJCQkqLwotI2RlZmluZQlXUklURV9DT01QTEVURQkJMHg4MDAwCQkvKiBXcml0ZSBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlCQkJCQkJCSovCi0KLS8qIFJUQ19GQVNUIC8gUlRDX1BSRU4gTWFzawkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIFBSRU4JCQkJMHgwMDAxCS8qIEVuYWJsZSBQcmVzY2FsZXIsIFJUQyBSdW5zIEAxIEh6CSovCi0KLQogLyogKioqKioqKioqKioqKiogVUFSVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBVQVJUeF9MQ1IgTWFza3MJCQkJCQkJCQkJCQkqLwogI2RlZmluZSBXTFMoeCkJCSgoKHgpLTUpICYgMHgwMykJLyogV29yZCBMZW5ndGggU2VsZWN0ICovCkBAIC0xMzgxLDMzICsxMjY5LDYgQEAKIAogCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRE1BeF9DT05GSUcsIE1ETUFfeXlfQ09ORklHIE1hc2tzCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRE1BRU4JCQkweDAwMDEJCS8qIERNQSBDaGFubmVsIEVuYWJsZQkJCQkJCQkqLwotI2RlZmluZSBXTlIJCQkJMHgwMDAyCQkvKiBDaGFubmVsIERpcmVjdGlvbiAoVy9SKikJCQkJCQkqLwotI2RlZmluZSBXRFNJWkVfOAkJMHgwMDAwCQkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSA4CQkJCQkJKi8KLSNkZWZpbmUgV0RTSVpFXzE2CQkweDAwMDQJCS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDE2CQkJCQkJKi8KLSNkZWZpbmUgV0RTSVpFXzMyCQkweDAwMDgJCS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDMyCQkJCQkJKi8KLSNkZWZpbmUgRE1BMkQJCQkweDAwMTAJCS8qIERNQSBNb2RlICgyRC8xRCopCQkJCQkJCSovCi0jZGVmaW5lIFJFU1RBUlQJCQkweDAwMjAJCS8qIERNQSBCdWZmZXIgQ2xlYXIJCQkJCQkJCSovCi0jZGVmaW5lIERJX1NFTAkJCTB4MDA0MAkJLyogRGF0YSBJbnRlcnJ1cHQgVGltaW5nIFNlbGVjdAkJCQkJKi8KLSNkZWZpbmUgRElfRU4JCQkweDAwODAJCS8qIERhdGEgSW50ZXJydXB0IEVuYWJsZQkJCQkJCSovCi0jZGVmaW5lIE5EU0laRV8wCQkweDAwMDAJCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMCAoU3RvcC9BdXRvYnVmZmVyKQkqLwotI2RlZmluZSBORFNJWkVfMQkJMHgwMTAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDEJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfMgkJMHgwMjAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDIJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfMwkJMHgwMzAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDMJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfNAkJMHgwNDAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDQJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfNQkJMHgwNTAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDUJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfNgkJMHgwNjAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDYJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfNwkJMHgwNzAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDcJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfOAkJMHgwODAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDgJCQkJCQkqLwotI2RlZmluZSBORFNJWkVfOQkJMHgwOTAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDkJCQkJCQkqLwotI2RlZmluZSBORFNJWkUJICAgICAgICAJMHgwOTAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplICovCi0jZGVmaW5lIERNQUZMT1cJICAgICAgICAJMHg3MDAwCS8qIEZsb3cgQ29udHJvbCAqLwotI2RlZmluZSBETUFGTE9XX1NUT1AJCTB4MDAwMAkJLyogU3RvcCBNb2RlCQkJCQkJCQkJKi8KLSNkZWZpbmUgRE1BRkxPV19BVVRPCQkweDEwMDAJCS8qIEF1dG9idWZmZXIgTW9kZQkJCQkJCQkJKi8KLSNkZWZpbmUgRE1BRkxPV19BUlJBWQkJMHg0MDAwCQkvKiBEZXNjcmlwdG9yIEFycmF5IE1vZGUJCQkJCQkqLwotI2RlZmluZSBETUFGTE9XX1NNQUxMCQkweDYwMDAJCS8qIFNtYWxsIE1vZGVsIERlc2NyaXB0b3IgTGlzdCBNb2RlCQkJCSovCi0jZGVmaW5lIERNQUZMT1dfTEFSR0UJCTB4NzAwMAkJLyogTGFyZ2UgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUJCQkJKi8KIAogLyogRE1BeF9QRVJJUEhFUkFMX01BUCwgTURNQV95eV9QRVJJUEhFUkFMX01BUCBNYXNrcwkJCQkJCQkJKi8KICNkZWZpbmUgQ1RZUEUJCQkweDAwNDAJLyogRE1BIENoYW5uZWwgVHlwZSBJbmRpY2F0b3IgKE1lbW9yeS9QZXJpcGhlcmFsKikJKi8KQEAgLTE0MjUsMTMgKzEyODYsNiBAQAogI2RlZmluZQlQTUFQX1VBUlQxUlgJMHhBMDAwCS8qIAkJVUFSVDEgUG9ydCBSZWNlaXZlIERNQQkJCQkJCSovCiAjZGVmaW5lCVBNQVBfVUFSVDFUWAkweEIwMDAJLyogCQlVQVJUMSBQb3J0IFRyYW5zbWl0IERNQQkJCQkJCSovCiAKLS8qIERNQXhfSVJRX1NUQVRVUywgTURNQV95eV9JUlFfU1RBVFVTIE1hc2tzCQkJCQkJKi8KLSNkZWZpbmUgRE1BX0RPTkUJCTB4MDAwMQkvKiBETUEgQ29tcGxldGlvbiBJbnRlcnJ1cHQgU3RhdHVzCSovCi0jZGVmaW5lIERNQV9FUlIJCQkweDAwMDIJLyogRE1BIEVycm9yIEludGVycnVwdCBTdGF0dXMJCSovCi0jZGVmaW5lIERGRVRDSAkJCTB4MDAwNAkvKiBETUEgRGVzY3JpcHRvciBGZXRjaCBJbmRpY2F0b3IJKi8KLSNkZWZpbmUgRE1BX1JVTgkJCTB4MDAwOAkvKiBETUEgQ2hhbm5lbCBSdW5uaW5nIEluZGljYXRvcgkqLwotCi0KIC8qICAqKioqKioqKioqKiogIFBBUkFMTEVMIFBFUklQSEVSQUwgSU5URVJGQUNFIChQUEkpIE1BU0tTICoqKioqKioqKioqKiovCiAvKiAgUFBJX0NPTlRST0wgTWFza3MJCQkJCQkJCQkJCQkJKi8KICNkZWZpbmUgUE9SVF9FTgkJCTB4MDAwMQkJLyogUFBJIFBvcnQgRW5hYmxlCQkJCQkqLwpAQCAtMTg0Myw0NiArMTY5Nyw2IEBACiAjZGVmaW5lIEJORE1PREVfQ0FQVCAgICAgMHgyMDAwICAvKiBib3VuZGFyeSBjYXB0dXJlIG1vZGUgKi8KICNkZWZpbmUgQk5ETU9ERV9BRVhUICAgICAweDMwMDAgIC8qIGJvdW5kYXJ5IGF1dG8tZXh0ZW5kIG1vZGUgKi8KIAotLyogQml0IG1hc2tzIGZvciBPVFBfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIEZVU0VfRkFERFIgIDB4MWZmICAgICAgLyogT1RQL0Z1c2UgQWRkcmVzcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGSUVOICAweDgwMCAgICAgIC8qIE9UUC9GdXNlIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRklFTiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRlRFU1RERUMgIDB4MTAwMCAgICAgLyogT1RQL0Z1c2UgVGVzdCBEZWNvZGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuRlRFU1RERUMgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBGV1JURVNUICAweDIwMDAgICAgIC8qIE9UUC9GdXNlIFdyaXRlIFRlc3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuRldSVEVTVCAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRlJERU4gIDB4NDAwMCAgICAgLyogT1RQL0Z1c2UgUmVhZCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5GUkRFTiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRldSRU4gIDB4ODAwMCAgICAgLyogT1RQL0Z1c2UgV3JpdGUgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRldSRU4gIDB4MAotCi0vKiBCaXQgbWFza3MgZm9yIE9UUF9CRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGQkVOICAweGZmZmYgICAgIC8qIE9UUC9GdXNlIEJ5dGUgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgT1RQX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRkNPTVAgIDB4MSAgICAgICAgLyogT1RQL0Z1c2UgQWNjZXNzIENvbXBsZXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRkNPTVAgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRkVSUk9SICAweDIgICAgICAgIC8qIE9UUC9GdXNlIEFjY2VzcyBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRkVSUk9SICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNTVJHTE9BRCAgMHgxMCAgICAgICAvKiBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyIEdhc2tldCBMb2FkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBuTU1SR0xPQUQgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1NUkdMT0NLICAweDIwICAgICAgIC8qIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIgR2Fza2V0IExvY2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5NTVJHTE9DSyAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBGUEdNRU4gIDB4NDAgICAgICAgLyogT1RQL0Z1c2UgUHJvZ3JhbSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkZQR01FTiAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgT1RQX1RJTUlORyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTRUNESVYgIDB4ZmYgICAgICAgLyogTWljcm8gU2Vjb25kIERpdmlkZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUkVBREFDQyAgMHg3ZjAwICAgICAvKiBSZWFkIEFjY2VzcyBUaW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QUkwgIDB4MzgwMDAgICAgLyogQ2hhcmdlIFB1bXAgUmVsZWFzZSBUaW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QU1UgIDB4YzAwMDAgICAgLyogQ2hhcmdlIFB1bXAgU2V0dXAgVGltZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDUFVNUEhEICAweGYwMDAwMCAgIC8qIENoYXJnZSBQdW1wIEhvbGQgVGltZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBQR01USU1FICAweGZmMDAwMDAwIC8qIFByb2dyYW0gVGltZSAqLwotCiAvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TWVNTV1QgKi8KIAogI2RlZmluZSAgICAgICAgICAgICAgICAgICBFTVVEQUJMICAweDEgICAgICAgIC8qIEVtdWxhdGlvbiBEaXNhYmxlLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCmluZGV4IDQzZjQzYTAuLjRhZGNlYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKQEAgLTE2Niw3ICsxNjYsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fU1BJX0FEQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9TUElfQURDX01PRFVMRSkKIC8qIFNQSSBBREMgY2hpcCAqLwogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZGNfY2hpcF9pbmZvID0gewotCS5jdGxfcmVnID0gMHgxMDAwLAogCS5lbmFibGVfZG1hID0gMSwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDE2LAogfTsKQEAgLTE3NCw3ICsxNzMsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX0JMQUNLRklOX0FEMTgzNikgfHwgZGVmaW5lZChDT05GSUdfU05EX0JMQUNLRklOX0FEMTgzNl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgYWQxODM2X3NwaV9jaGlwX2luZm8gPSB7Ci0JLmN0bF9yZWcgPSAweDEwMDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpAQCAtMjU4LDEyICsyNTYsNiBAQAogfTsKICNlbmRpZiAgLyogc3BpIG1hc3RlciBhbmQgZGV2aWNlcyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzUpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1X01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZmJfZGV2aWNlID0gewotCS5uYW1lID0gImJmNTM3LWZiIiwKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCmluZGV4IDY0NGJlNWUuLjhlYzQyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CisjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KIAogLyoKICAqIE5hbWUgdGhlIEJvYXJkIGZvciB0aGUgL3Byb2MvY3B1aW5mbwpAQCAtMTA3LDIwICsxMDgsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1NQSV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgbW1jX3NwaV9jaGlwX2luZm8gPSB7Ci0vKgotICogQ1BPTCAoQ2xvY2sgUG9sYXJpdHkpCi0gKiAgMCAtIEFjdGl2ZSBoaWdoIFNDSwotICogIDEgLSBBY3RpdmUgbG93IFNDSwotICogIENQSEEgKENsb2NrIFBoYXNlKSBTZWxlY3RzIHRyYW5zZmVyIGZvcm1hdCBhbmQgb3BlcmF0aW9uIG1vZGUKLSAqICAwIC0gU0NMSyB0b2dnbGVzIGZyb20gbWlkZGxlIG9mIHRoZSBmaXJzdCBkYXRhIGJpdCwgc2xhdmUgc2VsZWN0Ci0gKiAgICAgIHBpbnMgY29udHJvbGxlZCBieSBoYXJkd2FyZS4KLSAqICAxIC0gU0NMSyB0b2dnbGVzIGZyb20gYmVnaW5uaW5nIG9mIGZpcnN0IGRhdGEgYml0LCBzbGF2ZSBzZWxlY3QKLSAqICAgICAgcGlucyBjb250cm9sbGVyIGJ5IHVzZXIgc29mdHdhcmUuCi0gKiAJLmN0bF9yZWcgPSAweDFjMDAsCQkgKiAgQ1BPTD0xLENQSEE9MSxTYW5kaXNrIDFHIHdvcmsKLSAqIE5PIE5PCS5jdGxfcmVnID0gMHgxODAwLAkJICogIENQT0w9MSxDUEhBPTAKLSAqIE5PIE5PCS5jdGxfcmVnID0gMHgxNDAwLAkJICogIENQT0w9MCxDUEhBPTEKLSAqLwotCS5jdGxfcmVnID0gMHgxMDAwLAkJLyogQ1BPTD0wLENQSEE9MCxTYW5kaXNrIDFHIHdvcmsgKi8KIAkuZW5hYmxlX2RtYSA9IDAsCQkvKiBpZiAxIC0gYmxvY2shISEgKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCmluZGV4IDgyZjcwZWYuLjZkNjhkY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKQEAgLTMyMSwxMiArMzIxLDYgQEAKIH07CiAjZW5kaWYgIC8qIHNwaSBtYXN0ZXIgYW5kIGRldmljZXMgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1KSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRjUzN19MUTAzNV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZjUzNy1mYiIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3VhcnRfcmVzb3VyY2VzW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCmluZGV4IDAyYjMyOGUuLmU5ZmY0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKQEAgLTM3MCw3MiArMzcwLDYgQEAKIC8qIFN5c3RlbSBNTVIgUmVnaXN0ZXIgQml0cyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotLyogKioqKioqKioqKioqKioqKioqKioqIFBMTCBBTkQgUkVTRVQgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIFBMTF9DVEwgTWFza3MgKi8KLSNkZWZpbmUgUExMX0NMS0lOCQkJMHgwMDAwICAvKiBQYXNzIENMS0lOIHRvIFBMTCAqLwotI2RlZmluZSBQTExfQ0xLSU5fRElWMgkJCTB4MDAwMSAgLyogUGFzcyBDTEtJTi8yIHRvIFBMTCAqLwotI2RlZmluZSBERgkJCQkweDAwMDEJLyogMDogUExMID0gQ0xLSU4sIDE6IFBMTCA9IENMS0lOLzIJCQkJCSovCi0jZGVmaW5lIFBMTF9PRkYJCQkJMHgwMDAyICAvKiBTaHV0IG9mZiBQTEwgY2xvY2tzICovCi0jZGVmaW5lIFNUT1BDS19PRkYJCQkweDAwMDggIC8qIENvcmUgY2xvY2sgb2ZmICovCi0jZGVmaW5lIFNUT1BDSwkJCQkweDAwMDgJLyogQ29yZSBDbG9jayBPZmYJCQkJCQkJCQkqLwotI2RlZmluZSBQRFdOCQkJCTB4MDAyMCAgLyogUHV0IHRoZSBQTEwgaW4gYSBEZWVwIFNsZWVwIHN0YXRlICovCi0jaWYgIWRlZmluZWQoX19BRFNQQkY1MzhfXykKLS8qIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBpbiBkZWZCRjUzOC5oIGJ1dCBJTl9ERUxBWS9PVVRfREVMQVkgYXJlIGRpZmZlcmVudCAqLwotIyBkZWZpbmUgSU5fREVMQVkgICAgICAgIDB4MDA0MCAgLyogQWRkIDIwMHBzIERlbGF5IFRvIEVCSVUgSW5wdXQgTGF0Y2hlcyAqLwotIyBkZWZpbmUgT1VUX0RFTEFZICAgICAgIDB4MDA4MCAgLyogQWRkIDIwMHBzIERlbGF5IFRvIEVCSVUgT3V0cHV0IFNpZ25hbHMgKi8KLSNlbmRpZgotI2RlZmluZSBCWVBBU1MJCQkJMHgwMTAwICAvKiBCeXBhc3MgdGhlIFBMTCAqLwotLyogUExMX0NUTCBNYWNyb3MgKE9ubHkgVXNlIFdpdGggTG9naWMgT1IgV2hpbGUgU2V0dGluZyBMb3dlciBPcmRlciBCaXRzKQkJCSovCi0jZGVmaW5lCVNFVF9NU0VMKHgpCQkoKCh4KSYweDNGKSA8PCAweDkpCS8qIFNldCBNU0VMID0gMC02MyAtLT4gVkNPID0gQ0xLSU4qTVNFTAkJKi8KLQotLyogUExMX0RJViBNYXNrcyAqLwotI2RlZmluZSBTU0VMCQkJCTB4MDAwRgkvKiBTeXN0ZW0gU2VsZWN0CQkJCQkJKi8KLSNkZWZpbmUJQ1NFTAkJCQkweDAwMzAJLyogQ29yZSBTZWxlY3QJCQkJCQkJKi8KLQotI2RlZmluZSBTQ0xLX0RJVih4KSAgKHgpCS8qIFNDTEsgPSBWQ08gLyB4ICovCi0KLSNkZWZpbmUgQ0NMS19ESVYxICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIENDTEsgPSBWQ08gLyAxICovCi0jZGVmaW5lIENDTEtfRElWMiAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBDQ0xLID0gVkNPIC8gMiAqLwotI2RlZmluZSBDQ0xLX0RJVjQgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogQ0NMSyA9IFZDTyAvIDQgKi8KLSNkZWZpbmUgQ0NMS19ESVY4ICAgICAgICAgICAgICAweDAwMDAwMDMwCS8qIENDTEsgPSBWQ08gLyA4ICovCi0vKiBQTExfRElWIE1hY3JvcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU0VUX1NTRUwoeCkJCQkoKHgpJjB4RikJLyogU2V0IFNTRUwgPSAwLTE1IC0tPiBTQ0xLID0gVkNPL1NTRUwJKi8KLQotLyogUExMX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEFDVElWRV9QTExFTkFCTEVECTB4MDAwMQkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRW5hYmxlZCAgICAqLwotI2RlZmluZQlGVUxMX09OCQkJCTB4MDAwMgkvKiBQcm9jZXNzb3IgSW4gRnVsbCBPbiBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQUNUSVZFX1BMTERJU0FCTEVECTB4MDAwNAkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRGlzYWJsZWQgICAqLwotI2RlZmluZQlQTExfTE9DS0VECQkJMHgwMDIwCS8qIFBMTF9MT0NLQ05UIEhhcyBCZWVuIFJlYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBWUl9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lCUZSRVEJCQkweDAwMDMJLyogU3dpdGNoaW5nIE9zY2lsbGF0b3IgRnJlcXVlbmN5IEZvciBSZWd1bGF0b3IJKi8KLSNkZWZpbmUJSElCRVJOQVRFCQkweDAwMDAJLyogCQlQb3dlcmRvd24vQnlwYXNzIE9uLUJvYXJkIFJlZ3VsYXRpb24JKi8KLSNkZWZpbmUJRlJFUV8zMzMJCTB4MDAwMQkvKiAJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMzMzIGtIegkJCSovCi0jZGVmaW5lCUZSRVFfNjY3CQkweDAwMDIJLyogCQlTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDY2NyBrSHoJCQkqLwotI2RlZmluZQlGUkVRXzEwMDAJCTB4MDAwMwkvKiAJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMSBNSHoJCQkqLwotCi0jZGVmaW5lIEdBSU4JCQkweDAwMEMJLyogVm9sdGFnZSBMZXZlbCBHYWluCSovCi0jZGVmaW5lCUdBSU5fNQkJCTB4MDAwMAkvKiAJCUdBSU4gPSA1CQkqLwotI2RlZmluZQlHQUlOXzEwCQkJMHgwMDA0CS8qIAkJR0FJTiA9IDEwCQkqLwotI2RlZmluZQlHQUlOXzIwCQkJMHgwMDA4CS8qIAkJR0FJTiA9IDIwCQkqLwotI2RlZmluZQlHQUlOXzUwCQkJMHgwMDBDCS8qIAkJR0FJTiA9IDUwCQkqLwotCi0jZGVmaW5lCVZMRVYJCQkweDAwRjAJLyogSW50ZXJuYWwgVm9sdGFnZSBMZXZlbAkJCQkJKi8KLSNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogCQlWTEVWID0gMC44NSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzA5MAkJMHgwMDcwCS8qIAkJVkxFViA9IDAuOTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8wOTUJCTB4MDA4MAkvKiAJCVZMRVYgPSAwLjk1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogCQlWTEVWID0gMS4wMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzEwNQkJMHgwMEEwCS8qIAkJVkxFViA9IDEuMDUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMTAJCTB4MDBCMAkvKiAJCVZMRVYgPSAxLjEwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCi0jZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogCQlWTEVWID0gMS4xNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLwotI2RlZmluZQlWTEVWXzEyMAkJMHgwMEQwCS8qIAkJVkxFViA9IDEuMjAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KLSNkZWZpbmUJVkxFVl8xMjUJCTB4MDBFMAkvKiAgICAgICAgICAgICAgVkxFViA9IDEuMjUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgICAgICovCi0jZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogICAgICAgICAgICAgIFZMRVYgPSAxLjMwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICAgICAqLwotCi0jZGVmaW5lCVdBS0UJCQkweDAxMDAJLyogRW5hYmxlIFJUQy9SZXNldCBXYWtldXAgRnJvbSBIaWJlcm5hdGUJKi8KLSNkZWZpbmUJU0NLRUxPVwkJCTB4ODAwMAkvKiBEbyBOb3QgRHJpdmUgU0NLRSBIaWdoIER1cmluZyBSZXNldCBBZnRlciBIaWJlcm5hdGUgKi8KLQogLyogQ0hJUElEIE1hc2tzICovCiAjZGVmaW5lIENISVBJRF9WRVJTSU9OICAgICAgICAgMHhGMDAwMDAwMAogI2RlZmluZSBDSElQSURfRkFNSUxZICAgICAgICAgIDB4MEZGRkYwMDAKQEAgLTcwMyw1NCArNjM3LDcgQEAKIAogLyogKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKjggKi8KIAotLypETUF4X0NPTkZJRywgTURNQV95eV9DT05GSUcgTWFza3MgKi8KLSNkZWZpbmUgRE1BRU4JICAgICAgICAweDAwMDAwMDAxCS8qIENoYW5uZWwgRW5hYmxlICovCi0jZGVmaW5lIFdOUgkgICAJMHgwMDAwMDAwMgkvKiBDaGFubmVsIERpcmVjdGlvbiAoVy9SKikgKi8KLSNkZWZpbmUgV0RTSVpFXzgJMHgwMDAwMDAwMAkvKiBXb3JkIFNpemUgOCBiaXRzICovCi0jZGVmaW5lIFdEU0laRV8xNgkweDAwMDAwMDA0CS8qIFdvcmQgU2l6ZSAxNiBiaXRzICovCi0jZGVmaW5lIFdEU0laRV8zMgkweDAwMDAwMDA4CS8qIFdvcmQgU2l6ZSAzMiBiaXRzICovCi0jZGVmaW5lIERNQTJECSAgICAgICAgMHgwMDAwMDAxMAkvKiAyRC8xRCogTW9kZSAqLwotI2RlZmluZSBSRVNUQVJUICAgICAgICAgMHgwMDAwMDAyMAkvKiBSZXN0YXJ0ICovCi0jZGVmaW5lIERJX1NFTAkgICAgICAgIDB4MDAwMDAwNDAJLyogRGF0YSBJbnRlcnJ1cHQgU2VsZWN0ICovCi0jZGVmaW5lIERJX0VOCSAgICAgICAgMHgwMDAwMDA4MAkvKiBEYXRhIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgTkRTSVpFXzAJCTB4MDAwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDAgKFN0b3AvQXV0b2J1ZmZlcikgICAqLwotI2RlZmluZSBORFNJWkVfMQkJMHgwMTAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV8yCQkweDAyMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzMJCTB4MDMwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfNAkJMHgwNDAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV81CQkweDA1MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzYJCTB4MDYwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfNwkJMHgwNzAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV84CQkweDA4MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzkJCTB4MDkwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkUJICAgICAgICAweDAwMDAwOTAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplICovCi0jZGVmaW5lIERNQUZMT1cJICAgICAgICAweDAwMDA3MDAwCS8qIEZsb3cgQ29udHJvbCAqLwotI2RlZmluZSBETUFGTE9XX1NUT1AJCTB4MDAwMAkvKiBTdG9wIE1vZGUgKi8KLSNkZWZpbmUgRE1BRkxPV19BVVRPCQkweDEwMDAJLyogQXV0b2J1ZmZlciBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfQVJSQVkJCTB4NDAwMAkvKiBEZXNjcmlwdG9yIEFycmF5IE1vZGUgKi8KLSNkZWZpbmUgRE1BRkxPV19TTUFMTAkJMHg2MDAwCS8qIFNtYWxsIE1vZGVsIERlc2NyaXB0b3IgTGlzdCBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfTEFSR0UJCTB4NzAwMAkvKiBMYXJnZSBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZSAqLwotCi0jZGVmaW5lIERNQUVOX1AJICAgICAgICAgICAgCTAJLyogQ2hhbm5lbCBFbmFibGUgKi8KLSNkZWZpbmUgV05SX1AJICAgICAgICAgICAgCTEJLyogQ2hhbm5lbCBEaXJlY3Rpb24gKFcvUiopICovCi0jZGVmaW5lIERNQTJEX1AJICAgICAgICAJNAkvKiAyRC8xRCogTW9kZSAqLwotI2RlZmluZSBSRVNUQVJUX1AJICAgICAgCTUJLyogUmVzdGFydCAqLwotI2RlZmluZSBESV9TRUxfUAkgICAgIAk2CS8qIERhdGEgSW50ZXJydXB0IFNlbGVjdCAqLwotI2RlZmluZSBESV9FTl9QCSAgICAgICAgICAgIAk3CS8qIERhdGEgSW50ZXJydXB0IEVuYWJsZSAqLwotCi0vKkRNQXhfSVJRX1NUQVRVUywgTURNQV95eV9JUlFfU1RBVFVTIE1hc2tzICovCi0KLSNkZWZpbmUgRE1BX0RPTkUJCTB4MDAwMDAwMDEJLyogRE1BIERvbmUgSW5kaWNhdG9yICovCi0jZGVmaW5lIERNQV9FUlIJICAgICAgICAJMHgwMDAwMDAwMgkvKiBETUEgRXJyb3IgSW5kaWNhdG9yICovCi0jZGVmaW5lIERGRVRDSAkgICAgICAgICAgICAJMHgwMDAwMDAwNAkvKiBEZXNjcmlwdG9yIEZldGNoIEluZGljYXRvciAqLwotI2RlZmluZSBETUFfUlVOCSAgICAgICAgICAgIAkweDAwMDAwMDA4CS8qIERNQSBSdW5uaW5nIEluZGljYXRvciAqLwotCi0jZGVmaW5lIERNQV9ET05FX1AJICAgIAkwCS8qIERNQSBEb25lIEluZGljYXRvciAqLwotI2RlZmluZSBETUFfRVJSX1AgICAgIAkJMQkvKiBETUEgRXJyb3IgSW5kaWNhdG9yICovCi0jZGVmaW5lIERGRVRDSF9QICAgICAJCTIJLyogRGVzY3JpcHRvciBGZXRjaCBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgRE1BX1JVTl9QICAgICAJCTMJLyogRE1BIFJ1bm5pbmcgSW5kaWNhdG9yICovCi0KLS8qRE1BeF9QRVJJUEhFUkFMX01BUCwgTURNQV95eV9QRVJJUEhFUkFMX01BUCBNYXNrcyAqLworLyogRE1BeF9QRVJJUEhFUkFMX01BUCwgTURNQV95eV9QRVJJUEhFUkFMX01BUCBNYXNrcyAqLwogCiAjZGVmaW5lIENUWVBFCSAgICAgICAgICAgIDB4MDAwMDAwNDAJLyogRE1BIENoYW5uZWwgVHlwZSBJbmRpY2F0b3IgKi8KICNkZWZpbmUgQ1RZUEVfUCAgICAgICAgICAgICA2CS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yIEJJVCBQT1NJVElPTiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKaW5kZXggOWJhMjkwNC4uNGUwYWZkYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCkBAIC0xMyw5ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+Ci0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMzYyLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CkBAIC0xNDcsNDUgKzE0NCw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlzcDEzNjJfaGNkX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gMHgyMDM2MDAwMCwKLQkJLmVuZCA9IDB4MjAzNjAwMDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gMHgyMDM2MDAwNCwKLQkJLmVuZCA9IDB4MjAzNjAwMDQsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gQ09ORklHX1VTQl9JU1AxMzYyX0JGSU5fR1BJT19JUlEsCi0JCS5lbmQgPSBDT05GSUdfVVNCX0lTUDEzNjJfQkZJTl9HUElPX0lSUSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXNwMTM2Ml9wbGF0Zm9ybV9kYXRhIGlzcDEzNjJfcHJpdiA9IHsKLQkuc2VsMTVLcmVzID0gMSwKLQkuY2xrbm90c3RvcCA9IDAsCi0JLm9jX2VuYWJsZSA9IDAsCi0JLmludF9hY3RfaGlnaCA9IDAsCi0JLmludF9lZGdlX3RyaWdnZXJlZCA9IDAsCi0JLnJlbW90ZV93YWtldXBfY29ubmVjdGVkID0gMCwKLQkubm9fcG93ZXJfc3dpdGNoaW5nID0gMSwKLQkucG93ZXJfc3dpdGNoaW5nX21vZGUgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXNwMTM2Ml9oY2RfZGV2aWNlID0gewotCS5uYW1lID0gImlzcDEzNjItaGNkIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmlzcDEzNjJfcHJpdiwKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpc3AxMzYyX2hjZF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlzcDEzNjJfaGNkX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fTUFDKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX01BQ19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX21paV9idXMgPSB7CiAJLm5hbWUgPSAiYmZpbl9taWlfYnVzIiwKQEAgLTQ5MiwxMCArNDUwLDYgQEAKIAkmc2w4MTFfaGNkX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQotCSZpc3AxMzYyX2hjZF9kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKIAkmc21jOTF4X2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCmluZGV4IGM0NmJhYTUuLmFjOWI1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtMjUsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zbDgxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9tbWNfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9iZmluNXh4X3NwaS5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KQEAgLTY1LDcgKzY4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5faXNwMTc2MF9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImlzcDE3NjAtaGNkIiwKKwkubmFtZSAgICAgICAgICAgPSAiaXNwMTc2MCIsCiAJLmlkICAgICAgICAgICAgID0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YSA9ICZpc3AxNzYwX3ByaXYsCkBAIC03Niw3ICs3OSw2IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBiZmluX2dwaW9fa2V5c190YWJsZVtdID0gewpAQCAtMTk1LDI4ICsxOTcsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVg4ODE4MCkgfHwgZGVmaW5lZChDT05GSUdfQVg4ODE4MF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF4ODgxODBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweDIwMzAwMDAwLAotCQkuZW5kCT0gMHgyMDMwMDAwMCArIDB4ODAwMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9QRjcsCi0JCS5lbmQJPSBJUlFfUEY3LAotCQkuZmxhZ3MJPSAoSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCksCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF4ODgxODBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJheDg4MTgwIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF4ODgxODBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBheDg4MTgwX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9TTDgxMV9IQ0RfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbDgxMV9oY2RfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtMjcyLDggKzI1Miw4IEBACiAJCS5lbmQgPSAweDIwMzYwMDA0LAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCA9IENPTkZJR19VU0JfSVNQMTM2Ml9CRklOX0dQSU9fSVJRLAotCQkuZW5kID0gQ09ORklHX1VTQl9JU1AxMzYyX0JGSU5fR1BJT19JUlEsCisJCS5zdGFydCA9IElSUV9QRjMsCisJCS5lbmQgPSBJUlFfUEYzLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKIAl9LAogfTsKQEAgLTMwMCw2ICsyODAsNDQgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NBTl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19DQU5fQkZJTl9NT0RVTEUpCit1bnNpZ25lZCBzaG9ydCBiZmluX2Nhbl9wZXJpcGhlcmFsc1tdID0geworCVBfQ0FOMF9SWCwgUF9DQU4wX1RYLCAwCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fY2FuX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHhGRkMwMkEwMCwKKwkJLmVuZCA9IDB4RkZDMDJGRkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBJUlFfQ0FOX1JYLAorCQkuZW5kID0gSVJRX0NBTl9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9DQU5fVFgsCisJCS5lbmQgPSBJUlFfQ0FOX1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gSVJRX0NBTl9FUlJPUiwKKwkJLmVuZCA9IElSUV9DQU5fRVJST1IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2Nhbl9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmZpbl9jYW4iLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX2Nhbl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmaW5fY2FuX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2Nhbl9wZXJpcGhlcmFscywgLyogUGFzc2VkIHRvIGRyaXZlciAqLworCX0sCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9taWlfYnVzID0gewogCS5uYW1lID0gImJmaW5fbWlpX2J1cyIsCkBAIC01MTQsMTUgKzUzMiwxNCBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfRVZBTF9BRDcxNDdFQlopCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9BRDcxNFhfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9BRDcxNFhfU1BJX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pbnB1dC9hZDcxNHguaD4KIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBhZDcxNDdfc3BpX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSAxNiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWQ3MTR4X3NsaWRlcl9wbGF0IHNsaWRlcl9wbGF0W10gPSB7CitzdGF0aWMgc3RydWN0IGFkNzE0eF9zbGlkZXJfcGxhdCBhZDcxNDdfc3BpX3NsaWRlcl9wbGF0W10gPSB7CiAJewogCQkuc3RhcnRfc3RhZ2UgPSAwLAogCQkuZW5kX3N0YWdlID0gNywKQEAgLTUzMCw3ICs1NDcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGFkNzE0eF9idXR0b25fcGxhdCBidXR0b25fcGxhdFtdID0geworc3RhdGljIHN0cnVjdCBhZDcxNHhfYnV0dG9uX3BsYXQgYWQ3MTQ3X3NwaV9idXR0b25fcGxhdFtdID0gewogCXsKIAkJLmtleWNvZGUgPSBCVE5fRk9SV0FSRCwKIAkJLmxfbWFzayA9IDAsCkBAIC01NTcsMTEgKzU3NCwxMSBAQAogCQkuaF9tYXNrID0gMHg0MDAsCiAJfSwKIH07Ci1zdGF0aWMgc3RydWN0IGFkNzE0eF9wbGF0Zm9ybV9kYXRhIGFkNzE0N19wbGF0ZnJvbV9kYXRhID0geworc3RhdGljIHN0cnVjdCBhZDcxNHhfcGxhdGZvcm1fZGF0YSBhZDcxNDdfc3BpX3BsYXRmb3JtX2RhdGEgPSB7CiAJLnNsaWRlcl9udW0gPSAxLAogCS5idXR0b25fbnVtID0gNSwKLQkuc2xpZGVyID0gc2xpZGVyX3BsYXQsCi0JLmJ1dHRvbiA9IGJ1dHRvbl9wbGF0LAorCS5zbGlkZXIgPSBhZDcxNDdfc3BpX3NsaWRlcl9wbGF0LAorCS5idXR0b24gPSBhZDcxNDdfc3BpX2J1dHRvbl9wbGF0LAogCS5zdGFnZV9jZmdfcmVnID0gIHsKIAkJezB4RkJGRiwgMHgxRkZGLCAwLCAweDI2MjYsIDE2MDAsIDE2MDAsIDE2MDAsIDE2MDB9LAogCQl7MHhFRkZGLCAweDFGRkYsIDAsIDB4MjYyNiwgMTY1MCwgMTY1MCwgMTY1MCwgMTY1MH0sCkBAIC01ODAsMTAgKzU5Nyw5IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9FVkFMX0FENzE0MkVCKQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfQUQ3MTRYX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfQUQ3MTRYX0kyQ19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaW5wdXQvYWQ3MTR4Lmg+Ci1zdGF0aWMgc3RydWN0IGFkNzE0eF9idXR0b25fcGxhdCBidXR0b25fcGxhdFtdID0geworc3RhdGljIHN0cnVjdCBhZDcxNHhfYnV0dG9uX3BsYXQgYWQ3MTQyX2kyY19idXR0b25fcGxhdFtdID0gewogCXsKIAkJLmtleWNvZGUgPSBCVE5fMSwKIAkJLmxfbWFzayA9IDAsCkBAIC02MDUsOSArNjIxLDkgQEAKIAkJLmhfbWFzayA9IDB4OCwKIAl9LAogfTsKLXN0YXRpYyBzdHJ1Y3QgYWQ3MTR4X3BsYXRmb3JtX2RhdGEgYWQ3MTQyX3BsYXRmcm9tX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFkNzE0eF9wbGF0Zm9ybV9kYXRhIGFkNzE0Ml9pMmNfcGxhdGZvcm1fZGF0YSA9IHsKIAkuYnV0dG9uX251bSA9IDQsCi0JLmJ1dHRvbiA9IGJ1dHRvbl9wbGF0LAorCS5idXR0b24gPSBhZDcxNDJfaTJjX2J1dHRvbl9wbGF0LAogCS5zdGFnZV9jZmdfcmVnID0gIHsKIAkJLyogZml4bWU6IGZpZ3VyZSBvdXQgcmlnaHQgc2V0dGluZyBmb3IgYWxsIGNvbW9wb25lbnQgYWNjb3JkaW5nCiAJCSAqIHRvIGhhcmR3YXJlIGZlYXR1cmUgb2YgRVZBTC1BRDcxNDJFQiBib2FyZCAqLwpAQCAtNjk2LDggKzcxMiw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFgpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2FkeGwzNHguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9hZHhsMzR4Lmg+CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkeGwzNHhfcGxhdGZvcm1fZGF0YSBhZHhsMzR4X2luZm8gPSB7CiAJLnhfYXhpc19vZmZzZXQgPSAwLAogCS55X2F4aXNfb2Zmc2V0ID0gMCwKQEAgLTcyMSw5ICs3MzYsNyBAQAogCS5ldl9jb2RlX3kgPSBBQlNfWSwJCS8qIEVWX1JFTCAqLwogCS5ldl9jb2RlX3ogPSBBQlNfWiwJCS8qIEVWX1JFTCAqLwogCi0JLmV2X2NvZGVfdGFwX3ggPSBCVE5fVE9VQ0gsCQkvKiBFVl9LRVkgKi8KLQkuZXZfY29kZV90YXBfeSA9IEJUTl9UT1VDSCwJCS8qIEVWX0tFWSAqLwotCS5ldl9jb2RlX3RhcF96ID0gQlROX1RPVUNILAkJLyogRVZfS0VZICovCisJLmV2X2NvZGVfdGFwID0ge0JUTl9UT1VDSCwgQlROX1RPVUNILCBCVE5fVE9VQ0h9LCAvKiBFVl9LRVkgeCx5LHogKi8KIAogLyoJLmV2X2NvZGVfZmYgPSBLRVlfRiwqLwkJLyogRVZfS0VZICovCiAvKgkuZXZfY29kZV9hY3RfaW5hY3Rpdml0eSA9IEtFWV9BLCovCS8qIEVWX0tFWSAqLwpAQCAtNzYxLDYgKzc3NCw0NyBAQAogfTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQURGNzAyWCkgfHwgZGVmaW5lZChDT05GSUdfQURGNzAyWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgYWRmNzAyMV9zcGlfY2hpcF9pbmZvID0geworCS5iaXRzX3Blcl93b3JkID0gMTYsCisJLmNzX2dwaW8gPSBHUElPX1BGMTAsCit9OworCisjaW5jbHVkZSA8bGludXgvc3BpL2FkZjcwMnguaD4KKyNkZWZpbmUgVFhSRUcgMHgwMTYwQTQ3MAorc3RhdGljIGNvbnN0IHUzMiBhZGY3MDIxX3JlZ3NbXSA9IHsKKwkweDA5NjA4RkEwLAorCTB4MDA1NzUwMTEsCisJMHgwMEE3RjA5MiwKKwkweDJCMTQxNTYzLAorCTB4ODFGMjlFOTQsCisJMHgwMDAwMzE1NSwKKwkweDA1MEE0RjY2LAorCTB4MDAwMDAwMDcsCisJMHgwMDAwMDAwOCwKKwkweDAwMDIzMUU5LAorCTB4MzI5NjM1NEEsCisJMHg4OTFBMkIzQiwKKwkweDAwMDAwRDlDLAorCTB4MDAwMDAwMEQsCisJMHgwMDAwMDAwRSwKKwkweDAwMDAwMDBGLAorfTsKKworc3RhdGljIHN0cnVjdCBhZGY3MDJ4X3BsYXRmb3JtX2RhdGEgYWRmNzAyMV9wbGF0Zm9ybV9kYXRhID0geworCS5yZWdzX2Jhc2UgPSAodm9pZCAqKVNQT1JUMV9UQ1IxLAorCS5kbWFfY2hfcnggPSBDSF9TUE9SVDFfUlgsCisJLmRtYV9jaF90eCA9IENIX1NQT1JUMV9UWCwKKwkuaXJxX3Nwb3J0X2VyciA9IElSUV9TUE9SVDFfRVJST1IsCisJLmdwaW9faW50X3JmcyA9IEdQSU9fUEY4LAorCS5waW5fcmVxID0ge1BfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9SRlMsIFBfU1BPUlQxX0RSUFJJLAorCQkJUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX1RTQ0xLLCAwfSwKKwkuYWRmNzAyeF9tb2RlbCA9IE1PREVMX0FERjcwMjEsCisJLmFkZjcwMnhfcmVncyA9IGFkZjcwMjFfcmVncywKKwkudHhfcmVnID0gVFhSRUcsCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKSBcCiAJfHwgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSF9NT0RVTEUpCiAKQEAgLTc5NCw2ICs4NDgsMTMgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9BRFhMMzRYX1NQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkeGwzNHhfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KKwkuYml0c19wZXJfd29yZCA9IDgsCit9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gYmZpbl9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MCkgXAogCXx8IGRlZmluZWQoQ09ORklHX01URF9NMjVQODBfTU9EVUxFKQpAQCAtODU1LDcgKzkxNiw3IEBACiAJfSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfRVZBTF9BRDcxNDdFQlopCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfQUQ3MTRYX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfQUQ3MTRYX1NQSV9NT0RVTEUpCiAJewogCQkubW9kYWxpYXMgPSAiYWQ3MTR4X2NhcHRvdWNoIiwKIAkJLm1heF9zcGVlZF9oeiA9IDEwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCkBAIC04NjMsNyArOTI0LDcgQEAKIAkJLmJ1c19udW0gPSAwLAogCQkuY2hpcF9zZWxlY3QgPSA1LAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmFkNzE0N19wbGF0ZnJvbV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhZDcxNDdfc3BpX3BsYXRmb3JtX2RhdGEsCiAJCS5jb250cm9sbGVyX2RhdGEgPSAmYWQ3MTQ3X3NwaV9jaGlwX2luZm8sCiAJfSwKICNlbmRpZgpAQCAtOTMyLDYgKzk5MywzMCBAQAogCQkubW9kZSA9IFNQSV9NT0RFXzAsCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9BRFhMMzRYX1NQSV9NT0RVTEUpCisJeworCQkubW9kYWxpYXMJPSAiYWR4bDM0eCIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkeGwzNHhfaW5mbywKKwkJLmlycQkJPSBJUlFfUEY2LAorCQkubWF4X3NwZWVkX2h6CT0gNTAwMDAwMCwgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDIsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2FkeGwzNHhfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9NT0RFXzMsCisJfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FERjcwMlgpIHx8IGRlZmluZWQoQ09ORklHX0FERjcwMlhfTU9EVUxFKQorCXsKKwkJLm1vZGFsaWFzID0gImFkZjcwMngiLAorCQkubWF4X3NwZWVkX2h6ID0gMTYwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMCwJLyogR1BJTyBjb250cm9sbGVkIFNTRUwgKi8KKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZhZGY3MDIxX3NwaV9jaGlwX2luZm8sCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFkZjcwMjFfcGxhdGZvcm1fZGF0YSwKKwkJLm1vZGUgPSBTUElfTU9ERV8wLAorCX0sCisjZW5kaWYKKwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCkBAIC0xMTc1LDcgKzEyNjAsNiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9BRFA1NTg4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9BRFA1NTg4X01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9hZHA1NTg4Lmg+CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRwNTU4OF9rZXltYXBbQURQNTU4OF9LRVlNQVBTSVpFXSA9IHsKIAlbMF0JID0gS0VZX0dSQVZFLApAQCAtMTI2OCwzNSArMTM1MiwzMyBAQAogCSAqICBBRFA1NTIwLzU1MDEgQmFja2xpZ2h0IERhdGEKIAkgKi8KIAotc3RhdGljIHN0cnVjdCBhZHA1NTIwX2JhY2tsaWdodF9wbGF0ZnJvbV9kYXRhIGFkcDU1MjBfYmFja2xpZ2h0X2RhdGEgPSB7Ci0JLmZhZGVfaW4gCQk9IEZBREVfVF8xMjAwbXMsCi0JLmZhZGVfb3V0IAkJPSBGQURFX1RfMTIwMG1zLAotCS5mYWRlX2xlZF9sYXcgCQk9IEJMX0xBV19MSU5FQVIsCi0JLmVuX2FtYmxfc2VucyAJCT0gMSwKLQkuYWJtbF9maWx0IAkJPSBCTF9BTUJMX0ZJTFRfNjQwbXMsCi0JLmwxX2RheWxpZ2h0X21heCAJPSBCTF9DVVJfbUEoMTUpLAotCS5sMV9kYXlsaWdodF9kaW0gCT0gQkxfQ1VSX21BKDApLAotCS5sMl9vZmZpY2VfbWF4IAkJPSBCTF9DVVJfbUEoNyksCi0JLmwyX29mZmljZV9kaW0gCQk9IEJMX0NVUl9tQSgwKSwKLQkubDNfZGFya19tYXggCQk9IEJMX0NVUl9tQSgzKSwKLQkubDNfZGFya19kaW0gCQk9IEJMX0NVUl9tQSgwKSwKLQkubDJfdHJpcCAJCT0gTDJfQ09NUF9DVVJSX3VBKDcwMCksCi0JLmwyX2h5c3QgCQk9IEwyX0NPTVBfQ1VSUl91QSg1MCksCi0JLmwzX3RyaXAgCQk9IEwzX0NPTVBfQ1VSUl91QSg4MCksCi0JLmwzX2h5c3QgCQk9IEwzX0NPTVBfQ1VSUl91QSgyMCksCitzdGF0aWMgc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgYWRwNTUyMF9iYWNrbGlnaHRfZGF0YSA9IHsKKwkuZmFkZV9pbgkJPSBBRFA1NTIwX0ZBREVfVF8xMjAwbXMsCisJLmZhZGVfb3V0CQk9IEFEUDU1MjBfRkFERV9UXzEyMDBtcywKKwkuZmFkZV9sZWRfbGF3CQk9IEFEUDU1MjBfQkxfTEFXX0xJTkVBUiwKKwkuZW5fYW1ibF9zZW5zCQk9IDEsCisJLmFibWxfZmlsdAkJPSBBRFA1NTIwX0JMX0FNQkxfRklMVF82NDBtcywKKwkubDFfZGF5bGlnaHRfbWF4CT0gQURQNTUyMF9CTF9DVVJfbUEoMTUpLAorCS5sMV9kYXlsaWdodF9kaW0JPSBBRFA1NTIwX0JMX0NVUl9tQSgwKSwKKwkubDJfb2ZmaWNlX21heAkJPSBBRFA1NTIwX0JMX0NVUl9tQSg3KSwKKwkubDJfb2ZmaWNlX2RpbQkJPSBBRFA1NTIwX0JMX0NVUl9tQSgwKSwKKwkubDNfZGFya19tYXgJCT0gQURQNTUyMF9CTF9DVVJfbUEoMyksCisJLmwzX2RhcmtfZGltCQk9IEFEUDU1MjBfQkxfQ1VSX21BKDApLAorCS5sMl90cmlwCQk9IEFEUDU1MjBfTDJfQ09NUF9DVVJSX3VBKDcwMCksCisJLmwyX2h5c3QJCT0gQURQNTUyMF9MMl9DT01QX0NVUlJfdUEoNTApLAorCS5sM190cmlwCQk9IEFEUDU1MjBfTDNfQ09NUF9DVVJSX3VBKDgwKSwKKwkubDNfaHlzdAkJPSBBRFA1NTIwX0wzX0NPTVBfQ1VSUl91QSgyMCksCiB9OwogCiAJLyoKIAkgKiAgQURQNTUyMC81NTAxIExFRHMgRGF0YQogCSAqLwogCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotCiBzdGF0aWMgc3RydWN0IGxlZF9pbmZvIGFkcDU1MjBfbGVkc1tdID0gewogCXsKIAkJLm5hbWUgPSAiYWRwNTUyMC1sZWQxIiwKIAkJLmRlZmF1bHRfdHJpZ2dlciA9ICJub25lIiwKLQkJLmZsYWdzID0gRkxBR19JRF9BRFA1NTIwX0xFRDFfQURQNTUwMV9MRUQwIHwgTEVEX09GRlRfNjAwbXMsCisJCS5mbGFncyA9IEZMQUdfSURfQURQNTUyMF9MRUQxX0FEUDU1MDFfTEVEMCB8IEFEUDU1MjBfTEVEX09GRlRfNjAwbXMsCiAJfSwKICNpZmRlZiBBRFA1NTIwX0VOX0FMTF9MRURTCiAJewpAQCAtMTMxMiw1MSArMTM5NCw1MCBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IGFkcDU1MjBfbGVkc19wbGF0ZnJvbV9kYXRhIGFkcDU1MjBfbGVkc19kYXRhID0geworc3RhdGljIHN0cnVjdCBhZHA1NTIwX2xlZHNfcGxhdGZvcm1fZGF0YSBhZHA1NTIwX2xlZHNfZGF0YSA9IHsKIAkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKGFkcDU1MjBfbGVkcyksCiAJLmxlZHMgPSBhZHA1NTIwX2xlZHMsCi0JLmZhZGVfaW4gPSBGQURFX1RfNjAwbXMsCi0JLmZhZGVfb3V0ID0gRkFERV9UXzYwMG1zLAotCS5sZWRfb25fdGltZSA9IExFRF9PTlRfNjAwbXMsCisJLmZhZGVfaW4gPSBBRFA1NTIwX0ZBREVfVF82MDBtcywKKwkuZmFkZV9vdXQgPSBBRFA1NTIwX0ZBREVfVF82MDBtcywKKwkubGVkX29uX3RpbWUgPSBBRFA1NTIwX0xFRF9PTlRfNjAwbXMsCiB9OwogCiAJLyoKIAkgKiAgQURQNTUyMCBHUElPIERhdGEKIAkgKi8KIAotc3RhdGljIHN0cnVjdCBhZHA1NTIwX2dwaW9fcGxhdGZyb21fZGF0YSBhZHA1NTIwX2dwaW9fZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9ncGlvX3BsYXRmb3JtX2RhdGEgYWRwNTUyMF9ncGlvX2RhdGEgPSB7CiAJLmdwaW9fc3RhcnQgPSA1MCwKLQkuZ3Bpb19lbl9tYXNrID0gR1BJT19DMSB8IEdQSU9fQzIgfCBHUElPX1IyLAotCS5ncGlvX3B1bGx1cF9tYXNrID0gR1BJT19DMSB8IEdQSU9fQzIgfCBHUElPX1IyLAorCS5ncGlvX2VuX21hc2sgPSBBRFA1NTIwX0dQSU9fQzEgfCBBRFA1NTIwX0dQSU9fQzIgfCBBRFA1NTIwX0dQSU9fUjIsCisJLmdwaW9fcHVsbHVwX21hc2sgPSBBRFA1NTIwX0dQSU9fQzEgfCBBRFA1NTIwX0dQSU9fQzIgfCBBRFA1NTIwX0dQSU9fUjIsCiB9OwogCiAJLyoKIAkgKiAgQURQNTUyMCBLZXlwYWQgRGF0YQogCSAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZHA1NTIwX2tleW1hcFtBRFA1NTIwX0tFWU1BUFNJWkVdID0gewotCVtLRVkoMCwgMCldCT0gS0VZX0dSQVZFLAotCVtLRVkoMCwgMSldCT0gS0VZXzEsCi0JW0tFWSgwLCAyKV0JPSBLRVlfMiwKLQlbS0VZKDAsIDMpXQk9IEtFWV8zLAotCVtLRVkoMSwgMCldCT0gS0VZXzQsCi0JW0tFWSgxLCAxKV0JPSBLRVlfNSwKLQlbS0VZKDEsIDIpXQk9IEtFWV82LAotCVtLRVkoMSwgMyldCT0gS0VZXzcsCi0JW0tFWSgyLCAwKV0JPSBLRVlfOCwKLQlbS0VZKDIsIDEpXQk9IEtFWV85LAotCVtLRVkoMiwgMildCT0gS0VZXzAsCi0JW0tFWSgyLCAzKV0JPSBLRVlfTUlOVVMsCi0JW0tFWSgzLCAwKV0JPSBLRVlfRVFVQUwsCi0JW0tFWSgzLCAxKV0JPSBLRVlfQkFDS1NMQVNILAotCVtLRVkoMywgMildCT0gS0VZX0JBQ0tTUEFDRSwKLQlbS0VZKDMsIDMpXQk9IEtFWV9FTlRFUiwKKwlbQURQNTUyMF9LRVkoMCwgMCldCT0gS0VZX0dSQVZFLAorCVtBRFA1NTIwX0tFWSgwLCAxKV0JPSBLRVlfMSwKKwlbQURQNTUyMF9LRVkoMCwgMildCT0gS0VZXzIsCisJW0FEUDU1MjBfS0VZKDAsIDMpXQk9IEtFWV8zLAorCVtBRFA1NTIwX0tFWSgxLCAwKV0JPSBLRVlfNCwKKwlbQURQNTUyMF9LRVkoMSwgMSldCT0gS0VZXzUsCisJW0FEUDU1MjBfS0VZKDEsIDIpXQk9IEtFWV82LAorCVtBRFA1NTIwX0tFWSgxLCAzKV0JPSBLRVlfNywKKwlbQURQNTUyMF9LRVkoMiwgMCldCT0gS0VZXzgsCisJW0FEUDU1MjBfS0VZKDIsIDEpXQk9IEtFWV85LAorCVtBRFA1NTIwX0tFWSgyLCAyKV0JPSBLRVlfMCwKKwlbQURQNTUyMF9LRVkoMiwgMyldCT0gS0VZX01JTlVTLAorCVtBRFA1NTIwX0tFWSgzLCAwKV0JPSBLRVlfRVFVQUwsCisJW0FEUDU1MjBfS0VZKDMsIDEpXQk9IEtFWV9CQUNLU0xBU0gsCisJW0FEUDU1MjBfS0VZKDMsIDIpXQk9IEtFWV9CQUNLU1BBQ0UsCisJW0FEUDU1MjBfS0VZKDMsIDMpXQk9IEtFWV9FTlRFUiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWRwNTUyMF9rZXlzX3BsYXRmcm9tX2RhdGEgYWRwNTUyMF9rZXlzX2RhdGEgPSB7Ci0JLnJvd3NfZW5fbWFzawk9IFJPV19SMyB8IFJPV19SMiB8IFJPV19SMSB8IFJPV19SMCwKLQkuY29sc19lbl9tYXNrCT0gQ09MX0MzIHwgQ09MX0MyIHwgQ09MX0MxIHwgQ09MX0MwLAorc3RhdGljIHN0cnVjdCBhZHA1NTIwX2tleXNfcGxhdGZvcm1fZGF0YSBhZHA1NTIwX2tleXNfZGF0YSA9IHsKKwkucm93c19lbl9tYXNrCT0gQURQNTUyMF9ST1dfUjMgfCBBRFA1NTIwX1JPV19SMiB8IEFEUDU1MjBfUk9XX1IxIHwgQURQNTUyMF9ST1dfUjAsCisJLmNvbHNfZW5fbWFzawk9IEFEUDU1MjBfQ09MX0MzIHwgQURQNTUyMF9DT0xfQzIgfCBBRFA1NTIwX0NPTF9DMSB8IEFEUDU1MjBfQ09MX0MwLAogCS5rZXltYXAJCT0gYWRwNTUyMF9rZXltYXAsCiAJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGFkcDU1MjBfa2V5bWFwKSwKIAkucmVwZWF0CQk9IDAsCkBAIC0xMzY2LDUwICsxNDQ3LDgxIEBACiAJICogIEFEUDU1MjAvNTUwMSBNdWx0aWZ1Y3Rpb24gRGV2aWNlIEluaXQgRGF0YQogCSAqLwogCi1zdGF0aWMgc3RydWN0IGFkcDU1MjBfc3ViZGV2X2luZm8gYWRwNTUyMF9zdWJkZXZzW10gPSB7Ci0JewotCQkubmFtZSA9ICJhZHA1NTIwLWJhY2tsaWdodCIsCi0JCS5pZCA9IElEX0FEUDU1MjAsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmFkcDU1MjBfYmFja2xpZ2h0X2RhdGEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImFkcDU1MjAtbGVkIiwKLQkJLmlkID0gSURfQURQNTUyMCwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmYWRwNTUyMF9sZWRzX2RhdGEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImFkcDU1MjAtZ3BpbyIsCi0JCS5pZCA9IElEX0FEUDU1MjAsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmFkcDU1MjBfZ3Bpb19kYXRhLAotCX0sCi0JewotCQkubmFtZSA9ICJhZHA1NTIwLWtleXMiLAotCQkuaWQgPSBJRF9BRFA1NTIwLAotCQkucGxhdGZvcm1fZGF0YSA9ICZhZHA1NTIwX2tleXNfZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBhZHA1NTIwX3BsYXRmb3JtX2RhdGEgYWRwNTUyMF9wZGV2X2RhdGEgPSB7Ci0JLm51bV9zdWJkZXZzID0gQVJSQVlfU0laRShhZHA1NTIwX3N1YmRldnMpLAotCS5zdWJkZXZzID0gYWRwNTUyMF9zdWJkZXZzLAorCS5iYWNrbGlnaHQgPSAmYWRwNTUyMF9iYWNrbGlnaHRfZGF0YSwKKwkubGVkcyA9ICZhZHA1NTIwX2xlZHNfZGF0YSwKKwkuZ3BpbyA9ICZhZHA1NTIwX2dwaW9fZGF0YSwKKwkua2V5cyA9ICZhZHA1NTIwX2tleXNfZGF0YSwKIH07CiAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfR1BJT19BRFA1NTg4KSB8fCBkZWZpbmVkKENPTkZJR19HUElPX0FEUDU1ODhfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy9hZHA1NTg4Lmg+Ci1zdGF0aWMgc3RydWN0IGFkcDU1ODhfZ3Bpb19wbGF0ZnJvbV9kYXRhIGFkcDU1ODhfZ3Bpb19kYXRhID0geworc3RhdGljIHN0cnVjdCBhZHA1NTg4X2dwaW9fcGxhdGZvcm1fZGF0YSBhZHA1NTg4X2dwaW9fZGF0YSA9IHsKIAkuZ3Bpb19zdGFydCA9IDUwLAogCS5wdWxsdXBfZGlzX21hc2sgPSAwLAogfTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0FEUDg4NzApIHx8IGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwX01PRFVMRSkKKyNpbmNsdWRlIDxsaW51eC9pMmMvYWRwODg3MC5oPgorc3RhdGljIHN0cnVjdCBsZWRfaW5mbyBhZHA4ODcwX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImFkcDg4NzAtbGVkNyIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAibm9uZSIsCisJCS5mbGFncyA9IEFEUDg4NzBfTEVEX0Q3IHwgQURQODg3MF9MRURfT0ZGVF82MDBtcywKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IGFkcDg4NzBfYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgYWRwODg3MF9wZGF0YSA9IHsKKwkuYmxfbGVkX2Fzc2lnbiA9IEFEUDg4NzBfQkxfRDEgfCBBRFA4ODcwX0JMX0QyIHwgQURQODg3MF9CTF9EMyB8CisJCQkgQURQODg3MF9CTF9ENCB8IEFEUDg4NzBfQkxfRDUgfCBBRFA4ODcwX0JMX0Q2LAkvKiAxID0gQmFja2xpZ2h0IDAgPSBJbmRpdmlkdWFsIExFRCAqLworCS5wd21fYXNzaWduID0gMCwJCQkJLyogMSA9IEVuYWJsZXMgUFdNIG1vZGUgKi8KKworCS5ibF9mYWRlX2luID0gQURQODg3MF9GQURFX1RfMTIwMG1zLAkJLyogQmFja2xpZ2h0IEZhZGUtSW4gVGltZXIgKi8KKwkuYmxfZmFkZV9vdXQgPSBBRFA4ODcwX0ZBREVfVF8xMjAwbXMsCQkvKiBCYWNrbGlnaHQgRmFkZS1PdXQgVGltZXIgKi8KKwkuYmxfZmFkZV9sYXcgPSBBRFA4ODcwX0ZBREVfTEFXX0NVQklDMSwJCS8qIGZhZGUtb24vZmFkZS1vZmYgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWMgKi8KKworCS5lbl9hbWJsX3NlbnMgPSAxLAkJCQkvKiAxID0gZW5hYmxlIGFtYmllbnQgbGlnaHQgc2Vuc29yICovCisJLmFibWxfZmlsdCA9IEFEUDg4NzBfQkxfQU1CTF9GSUxUXzMyMG1zLAkvKiBMaWdodCBzZW5zb3IgZmlsdGVyIHRpbWUgKi8KKworCS5sMV9kYXlsaWdodF9tYXggPSBBRFA4ODcwX0JMX0NVUl9tQSgyMCksCS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJLmwxX2RheWxpZ2h0X2RpbSA9IEFEUDg4NzBfQkxfQ1VSX21BKDApLAkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCS5sMl9icmlnaHRfbWF4ID0gQURQODg3MF9CTF9DVVJfbUEoMTQpLAkJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwkubDJfYnJpZ2h0X2RpbSA9IEFEUDg4NzBfQkxfQ1VSX21BKDApLAkJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwkubDNfb2ZmaWNlX21heCA9IEFEUDg4NzBfQkxfQ1VSX21BKDYpLAkJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwkubDNfb2ZmaWNlX2RpbSA9IEFEUDg4NzBfQkxfQ1VSX21BKDApLAkJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwkubDRfaW5kb29yX21heCA9IEFEUDg4NzBfQkxfQ1VSX21BKDMpLAkJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwkubDRfaW5kb3JfZGltID0gQURQODg3MF9CTF9DVVJfbUEoMCksCQkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCS5sNV9kYXJrX21heCA9IEFEUDg4NzBfQkxfQ1VSX21BKDIpLAkJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwkubDVfZGFya19kaW0gPSBBRFA4ODcwX0JMX0NVUl9tQSgwKSwJCS8qIHR5cCA9IDAsIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisKKwkubDJfdHJpcCA9IEFEUDg4NzBfTDJfQ09NUF9DVVJSX3VBKDcxMCksCS8qIHVzZSBMMl9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDExMDYgdUEgKi8KKwkubDJfaHlzdCA9IEFEUDg4NzBfTDJfQ09NUF9DVVJSX3VBKDczKSwJCS8qIHVzZSBMMl9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDExMDYgdUEgKi8KKwkubDNfdHJpcCA9IEFEUDg4NzBfTDNfQ09NUF9DVVJSX3VBKDM4OSksCS8qIHVzZSBMM19DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDU1MSB1QSAqLworCS5sM19oeXN0ID0gQURQODg3MF9MM19DT01QX0NVUlJfdUEoNTQpLAkJLyogdXNlIEwzX0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gNTUxIHVBICovCisJLmw0X3RyaXAgPSBBRFA4ODcwX0w0X0NPTVBfQ1VSUl91QSgxNjcpLAkvKiB1c2UgTDRfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAyNzUgdUEgKi8KKwkubDRfaHlzdCA9IEFEUDg4NzBfTDRfQ09NUF9DVVJSX3VBKDE2KSwJCS8qIHVzZSBMNF9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDI3NSB1QSAqLworCS5sNV90cmlwID0gQURQODg3MF9MNV9DT01QX0NVUlJfdUEoNDMpLAkJLyogdXNlIEw1X0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gMTM4IHVBICovCisJLmw1X2h5c3QgPSBBRFA4ODcwX0w1X0NPTVBfQ1VSUl91QSgxMSksCQkvKiB1c2UgTDZfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAxMzggdUEgKi8KKworCS5sZWRzID0gYWRwODg3MF9sZWRzLAorCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoYWRwODg3MF9sZWRzKSwKKwkubGVkX2ZhZGVfbGF3ID0gQURQODg3MF9GQURFX0xBV19TUVVBUkUsCS8qIGZhZGUtb24vZmFkZS1vZmYgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWMgKi8KKwkubGVkX2ZhZGVfaW4gPSBBRFA4ODcwX0ZBREVfVF82MDBtcywKKwkubGVkX2ZhZGVfb3V0ID0gQURQODg3MF9GQURFX1RfNjAwbXMsCisJLmxlZF9vbl90aW1lID0gQURQODg3MF9MRURfT05UXzIwMG1zLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgYmZpbl9pMmNfYm9hcmRfaW5mb1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0VWQUxfQUQ3MTQyRUIpCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfQUQ3MTRYX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfQUQ3MTRYX0kyQ19NT0RVTEUpCiAJewogCQlJMkNfQk9BUkRfSU5GTygiYWQ3MTQyX2NhcHRvdWNoIiwgMHgyQyksCiAJCS5pcnEgPSBJUlFfUEc1LAotCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmFkNzE0Ml9wbGF0ZnJvbV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmFkNzE0Ml9pMmNfcGxhdGZvcm1fZGF0YSwKIAl9LAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9UV0lfTENEKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX1RXSV9MQ0RfTU9EVUxFKQpAQCAtMTQ2Miw2ICsxNTc0LDMyIEBACiAJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkY1MzdfTFEwMzUpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGNTM3X0xRMDM1X01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZjUzNy1scTAzNS1hZDUyODAiLCAweDJDKSwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0FEUDg4NzApIHx8IGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhZHA4ODcwIiwgMHgyQiksCisJCS5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikmYWRwODg3MF9wZGF0YSwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19BREFVMTM3MSkgfHwgZGVmaW5lZChDT05GSUdfU05EX1NPQ19BREFVMTM3MV9NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYWRhdTEzNzEiLCAweDFBKSwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19BREFVMTc2MSkgfHwgZGVmaW5lZChDT05GSUdfU05EX1NPQ19BREFVMTc2MV9NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYWRhdTE3NjEiLCAweDM4KSwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQUQ1MjVYX0RQT1QpIHx8IGRlZmluZWQoQ09ORklHX0FENTI1WF9EUE9UX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhZDUyNTgiLCAweDE4KSwKKwl9LAorI2VuZGlmCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKQEAgLTE2MDIsOCArMTc0MCw4IEBACiAJJmRtOTAwMF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FYODgxODApIHx8IGRlZmluZWQoQ09ORklHX0FYODgxODBfTU9EVUxFKQotCSZheDg4MTgwX2RldmljZSwKKyNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQorCSZiZmluX2Nhbl9kZXZpY2UsCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fTUFDKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX01BQ19NT0RVTEUpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKaW5kZXggMTdmYWI0NC4uOGIyOTE0MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaApAQCAtOSwxNiArOSw2IEBACiAjaWZuZGVmIF9fTUFDSF9CRjUzN19IX18KICNkZWZpbmUgX19NQUNIX0JGNTM3X0hfXwogCi0vKiBNYXNrcyBmb3IgZ2VuZXJpYyBFUlJPUiBJUlEgZGVtdWx0aXBsZXhpbmcgdXNlZCBpbiBpbnQtcHJpb3JpdHktc2MuYyAqLwotCi0jZGVmaW5lIFNQSV9FUlJfTUFTSyAoVFhDT0wgfCBSQlNZIHwgTU9ERiB8IFRYRSkJLyogU1BJX1NUQVQgKi8KLSNkZWZpbmUgU1BPUlRfRVJSX01BU0sgKFJPVkYgfCBSVVZGIHwgVE9WRiB8IFRVVkYpCS8qIFNQT1JUeF9TVEFUICovCi0jZGVmaW5lIFBQSV9FUlJfTUFTSyAoMHhGRkZGICYgfkZMRCkJLyogUFBJX1NUQVRVUyAqLwotI2RlZmluZSBFTUFDX0VSUl9NQVNLIChQSFlJTlQgfCBNTUNJTlQgfCBSWEZTSU5UIHwgVFhGU0lOVCB8IFdBS0VERVQgfCBSWERNQUVSUiB8IFRYRE1BRVJSIHwgU1RNRE9ORSkJLyogRU1BQ19TWVNUQVQgKi8KLSNkZWZpbmUgVUFSVF9FUlJfTUFTS19TVEFUMSAoMHg0KQkvKiBVQVJUeF9JSVIgKi8KLSNkZWZpbmUgVUFSVF9FUlJfTUFTS19TVEFUMCAoMHgyKQkvKiBVQVJUeF9JSVIgKi8KLSNkZWZpbmUgQ0FOX0VSUl9NQVNLICAoRVdUSUYgfCBFV1JJRiB8IEVQSUYgfCBCT0lGIHwgV1VJRiB8IFVJQUlGIHwgQUFJRiB8IFJNTElGIHwgVUNFSUYgfCBFWFRJRiB8IEFESUYpCS8qIENBTl9HSUYgKi8KLQogI2RlZmluZSBPRkZTRVRfKHgpICgoeCkgJiAweDAwMDBGRkZGKQogCiAvKnNvbWUgbWlzYyBkZWZpbmVzKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBlYWIwMDZkLi5hMTJkNGI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC00MCwxMCArNDAsNCBAQAogI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwogCi0vKiBQTExfRElWIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIENDTEtfRElWMSBDU0VMX0RJVjEJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0NMS19ESVYyIENTRUxfRElWMgkvKiAgICAgICAgICBDQ0xLID0gVkNPIC8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDQ0xLX0RJVjQgQ1NFTF9ESVY0CS8qICAgICAgICAgIENDTEsgPSBWQ08gLyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENDTEtfRElWOCBDU0VMX0RJVjgJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKaW5kZXggYTZkMjBjYS4uMDY2ZDVjMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaApAQCAtOTU4LDY3ICs5NTgsNiBAQAogKioJCQkJbW9kaWZpZXIgVU5MRVNTIHRoZSBsb3dlciBvcmRlciBiaXRzIGFyZSBzYXZlZCBhbmQgT1JlZCBiYWNrIGluIHdoZW4KICoqCQkJCXRoZSBtYWNybyBpcyB1c2VkLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0qKiAqKioqKioqKioqKioqKioqKioqKiogUExMIEFORCBSRVNFVCBNQVNLUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUExMX0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgREYJCQkJMHgwMDAxCS8qIDA6IFBMTCA9IENMS0lOLCAxOiBQTEwgPSBDTEtJTi8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBMTF9PRkYJCQkweDAwMDIJLyogUExMIE5vdCBQb3dlcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFNUT1BDSwkJCTB4MDAwOAkvKiBDb3JlIENsb2NrIE9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUERXTgkJCTB4MDAyMAkvKiBFbnRlciBEZWVwIFNsZWVwIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUlOX0RFTEFZCQkweDAwNDAJLyogQWRkIDIwMHBzIERlbGF5IFRvIEVCSVUgSW5wdXQgTGF0Y2hlcyAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCU9VVF9ERUxBWQkJMHgwMDgwCS8qIEFkZCAyMDBwcyBEZWxheSBUbyBFQklVIE91dHB1dCBTaWduYWxzICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCWVBBU1MJCQkweDAxMDAJLyogQnlwYXNzIHRoZSBQTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCU1TRUwJCQkweDdFMDAJLyogTXVsdGlwbGllciBTZWxlY3QgRm9yIENDTEsvVkNPIEZhY3RvcnMgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBQTExfQ1RMIE1hY3JvcyAoT25seSBVc2UgV2l0aCBMb2dpYyBPUiBXaGlsZSBTZXR0aW5nIExvd2VyIE9yZGVyIEJpdHMpCQkJKi8KLSNkZWZpbmUJU0VUX01TRUwoeCkJCSgoKHgpJjB4M0YpIDw8IDB4OSkJLyogU2V0IE1TRUwgPSAwLTYzIC0tPiBWQ08gPSBDTEtJTipNU0VMICAgICAgICAgKi8KLQotLyogUExMX0RJViBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU1NFTAkJCTB4MDAwRgkvKiBTeXN0ZW0gU2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ1NFTAkJCTB4MDAzMAkvKiBDb3JlIFNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ1NFTF9ESVYxCQkweDAwMDAJLyogICAgICAgICAgICAgIENDTEsgPSBWQ08gLyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENTRUxfRElWMgkJMHgwMDEwCS8qICAgICAgICAgICAgICBDQ0xLID0gVkNPIC8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlDU0VMX0RJVjQJCTB4MDAyMAkvKiAgICAgICAgICAgICAgQ0NMSyA9IFZDTyAvIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ1NFTF9ESVY4CQkweDAwMzAJLyogICAgICAgICAgICAgIENDTEsgPSBWQ08gLyA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBQTExfRElWIE1hY3JvcwkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgU0VUX1NTRUwoeCkJCSgoeCkmMHhGKQkvKiBTZXQgU1NFTCA9IDAtMTUgLS0+IFNDTEsgPSBWQ08vU1NFTCAgKi8KLQotLyogVlJfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlGUkVRCQkJMHgwMDAzCS8qIFN3aXRjaGluZyBPc2NpbGxhdG9yIEZyZXF1ZW5jeSBGb3IgUmVndWxhdG9yICovCi0jZGVmaW5lCUhJQkVSTkFURQkJMHgwMDAwCS8qICAgICAgICAgICAgICBQb3dlcmRvd24vQnlwYXNzIE9uLUJvYXJkIFJlZ3VsYXRpb24gICAgKi8KLSNkZWZpbmUJRlJFUV8zMzMJCTB4MDAwMQkvKiAgICAgICAgICAgICAgU3dpdGNoaW5nIEZyZXF1ZW5jeSBJcyAzMzMga0h6ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJRlJFUV82NjcJCTB4MDAwMgkvKiAgICAgICAgICAgICAgU3dpdGNoaW5nIEZyZXF1ZW5jeSBJcyA2Njcga0h6ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJRlJFUV8xMDAwCQkweDAwMDMJLyogICAgICAgICAgICAgIFN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMSBNSHogICAgICAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUgR0FJTgkJCTB4MDAwQwkvKiBWb2x0YWdlIExldmVsIEdhaW4gICAqLwotI2RlZmluZQlHQUlOXzUJCQkweDAwMDAJLyogICAgICAgICAgICAgIEdBSU4gPSA1ICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUdBSU5fMTAJCQkweDAwMDQJLyogICAgICAgICAgICAgIEdBSU4gPSAxMCAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUdBSU5fMjAJCQkweDAwMDgJLyogICAgICAgICAgICAgIEdBSU4gPSAyMCAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUdBSU5fNTAJCQkweDAwMEMJLyogICAgICAgICAgICAgIEdBSU4gPSA1MCAgICAgICAgICAgICAgICovCi0KLSNkZWZpbmUJVkxFVgkJCTB4MDBGMAkvKiBJbnRlcm5hbCBWb2x0YWdlIExldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogICAgICAgICAgICAgIFZMRVYgPSAwLjg1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICAgICAqLwotI2RlZmluZQlWTEVWXzA5MAkJMHgwMDcwCS8qICAgICAgICAgICAgICBWTEVWID0gMC45MCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAgICAgKi8KLSNkZWZpbmUJVkxFVl8wOTUJCTB4MDA4MAkvKiAgICAgICAgICAgICAgVkxFViA9IDAuOTUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgICAgICovCi0jZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogICAgICAgICAgICAgIFZMRVYgPSAxLjAwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICAgICAqLwotI2RlZmluZQlWTEVWXzEwNQkJMHgwMEEwCS8qICAgICAgICAgICAgICBWTEVWID0gMS4wNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAgICAgKi8KLSNkZWZpbmUJVkxFVl8xMTAJCTB4MDBCMAkvKiAgICAgICAgICAgICAgVkxFViA9IDEuMTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgICAgICovCi0jZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogICAgICAgICAgICAgIFZMRVYgPSAxLjE1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICAgICAqLwotI2RlZmluZQlWTEVWXzEyMAkJMHgwMEQwCS8qICAgICAgICAgICAgICBWTEVWID0gMS4yMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAgICAgKi8KLSNkZWZpbmUJVkxFVl8xMjUJCTB4MDBFMAkvKiAgICAgICAgICAgICAgVkxFViA9IDEuMjUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgICAgICovCi0jZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogICAgICAgICAgICAgIFZMRVYgPSAxLjMwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICAgICAqLwotCi0jZGVmaW5lCVdBS0UJCQkweDAxMDAJLyogRW5hYmxlIFJUQy9SZXNldCBXYWtldXAgRnJvbSBIaWJlcm5hdGUgICAgICAgKi8KLSNkZWZpbmUJQ0FOV0UJCQkweDAyMDAJLyogRW5hYmxlIENBTiBXYWtldXAgRnJvbSBIaWJlcm5hdGUJCQkqLwotI2RlZmluZQlQSFlXRQkJCTB4MDQwMAkvKiBFbmFibGUgUEhZIFdha2V1cCBGcm9tIEhpYmVybmF0ZQkJCSovCi0jZGVmaW5lCUNMS0JVRk9FCQkweDQwMDAJLyogQ0xLSU4gQnVmZmVyIE91dHB1dCBFbmFibGUgKi8KLSNkZWZpbmUJUEhZQ0xLT0UJCUNMS0JVRk9FCS8qIEFsdGVybmF0aXZlIGxlZ2FjeSBuYW1lIGZvciB0aGUgYWJvdmUgKi8KLSNkZWZpbmUJU0NLRUxPVwkJMHg4MDAwCS8qIEVuYWJsZSBEcml2ZSBDS0UgTG93IER1cmluZyBSZXNldAkJKi8KLQotLyogUExMX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIEFDVElWRV9QTExFTkFCTEVECTB4MDAwMQkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRW5hYmxlZCAgICAqLwotI2RlZmluZQlGVUxMX09OCQkJCTB4MDAwMgkvKiBQcm9jZXNzb3IgSW4gRnVsbCBPbiBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQUNUSVZFX1BMTERJU0FCTEVECTB4MDAwNAkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRGlzYWJsZWQgICAqLwotI2RlZmluZQlQTExfTE9DS0VECQkJMHgwMDIwCS8qIFBMTF9MT0NLQ05UIEhhcyBCZWVuIFJlYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAvKiBDSElQSUQgTWFza3MgKi8KICNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCkBAIC0xNjQ1LDM0ICsxNTg0LDYgQEAKICNkZWZpbmUgQkdTVEFUCQkJMHgwMDIwCS8qIEJ1cyBHcmFudCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRE1BeF9DT05GSUcsIE1ETUFfeXlfQ09ORklHIE1hc2tzCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRE1BRU4JCQkweDAwMDEJLyogRE1BIENoYW5uZWwgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgV05SCQkJCTB4MDAwMgkvKiBDaGFubmVsIERpcmVjdGlvbiAoVy9SKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBXRFNJWkVfOAkJMHgwMDAwCS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFdEU0laRV8xNgkJMHgwMDA0CS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFdEU0laRV8zMgkJMHgwMDA4CS8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIERNQTJECQkJMHgwMDEwCS8qIERNQSBNb2RlICgyRC8xRCopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJFU1RBUlQJCQkweDAwMjAJLyogRE1BIEJ1ZmZlciBDbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBESV9TRUwJCQkweDAwNDAJLyogRGF0YSBJbnRlcnJ1cHQgVGltaW5nIFNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIERJX0VOCQkJMHgwMDgwCS8qIERhdGEgSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV8wCQkweDAwMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAwIChTdG9wL0F1dG9idWZmZXIpICAgKi8KLSNkZWZpbmUgTkRTSVpFXzEJCTB4MDEwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfMgkJMHgwMjAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV8zCQkweDAzMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzQJCTB4MDQwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfNQkJMHgwNTAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV82CQkweDA2MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzcJCTB4MDcwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfOAkJMHgwODAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV85CQkweDA5MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFCSAgICAgICAgCTB4MDkwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSAqLwotCi0jZGVmaW5lIERNQUZMT1cJICAgICAgICAJMHg3MDAwCS8qIEZsb3cgQ29udHJvbCAqLwotI2RlZmluZSBETUFGTE9XX1NUT1AJCTB4MDAwMAkvKiBTdG9wIE1vZGUgKi8KLSNkZWZpbmUgRE1BRkxPV19BVVRPCQkweDEwMDAJLyogQXV0b2J1ZmZlciBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfQVJSQVkJCTB4NDAwMAkvKiBEZXNjcmlwdG9yIEFycmF5IE1vZGUgKi8KLSNkZWZpbmUgRE1BRkxPV19TTUFMTAkJMHg2MDAwCS8qIFNtYWxsIE1vZGVsIERlc2NyaXB0b3IgTGlzdCBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfTEFSR0UJCTB4NzAwMAkvKiBMYXJnZSBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZSAqLwogCiAvKiBETUF4X1BFUklQSEVSQUxfTUFQLCBNRE1BX3l5X1BFUklQSEVSQUxfTUFQIE1hc2tzCQkJCQkJCQkqLwogI2RlZmluZSBDVFlQRQkJCTB4MDA0MAkvKiBETUEgQ2hhbm5lbCBUeXBlIEluZGljYXRvciAoTWVtb3J5L1BlcmlwaGVyYWwqKSAgICAgICovCkBAIC0xNjkwLDEyICsxNjAxLDYgQEAKICNkZWZpbmUJUE1BUF9VQVJUMVJYCTB4QTAwMAkvKiAgICAgICAgICAgICAgVUFSVDEgUG9ydCBSZWNlaXZlIERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCVBNQVBfVUFSVDFUWAkweEIwMDAJLyogICAgICAgICAgICAgIFVBUlQxIFBvcnQgVHJhbnNtaXQgRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0vKiBETUF4X0lSUV9TVEFUVVMsIE1ETUFfeXlfSVJRX1NUQVRVUyBNYXNrcwkJCQkJCSovCi0jZGVmaW5lIERNQV9ET05FCQkweDAwMDEJLyogRE1BIENvbXBsZXRpb24gSW50ZXJydXB0IFN0YXR1cyAgICAgICovCi0jZGVmaW5lIERNQV9FUlIJCQkweDAwMDIJLyogRE1BIEVycm9yIEludGVycnVwdCBTdGF0dXMgICAgICAgICAgICovCi0jZGVmaW5lIERGRVRDSAkJCTB4MDAwNAkvKiBETUEgRGVzY3JpcHRvciBGZXRjaCBJbmRpY2F0b3IgICAgICAgKi8KLSNkZWZpbmUgRE1BX1JVTgkJCTB4MDAwOAkvKiBETUEgQ2hhbm5lbCBSdW5uaW5nIEluZGljYXRvciAgICAgICAgKi8KLQogLyogICoqKioqKioqKioqKiAgUEFSQUxMRUwgUEVSSVBIRVJBTCBJTlRFUkZBQ0UgKFBQSSkgTUFTS1MgKioqKioqKioqKioqKi8KIC8qICBQUElfQ09OVFJPTCBNYXNrcwkJCQkJCQkJCQkJCQkqLwogI2RlZmluZSBQT1JUX0VOCQkJMHgwMDAxCS8qIFBQSSBQb3J0IEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9NYWtlZmlsZQppbmRleCA4Y2QyNzE5Li5jMGJlNTRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvTWFrZWZpbGUKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L01ha2VmaWxlCkBAIC0zLDMgKzMsNCBAQAogIwogCiBvYmoteSA6PSBpbnRzLXByaW9yaXR5Lm8gZG1hLm8KK29iai0kKENPTkZJR19HUElPTElCKQkrPSBleHQtZ3Bpby5vCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKaW5kZXggMTRhZjVjMi4uYzI5NmJiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwpAQCAtMTUxLDYgKzE1MSw0NCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NBTl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19DQU5fQkZJTl9NT0RVTEUpCit1bnNpZ25lZCBzaG9ydCBiZmluX2Nhbl9wZXJpcGhlcmFsc1tdID0geworCVBfQ0FOMF9SWCwgUF9DQU4wX1RYLCAwCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fY2FuX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHhGRkMwMkEwMCwKKwkJLmVuZCA9IDB4RkZDMDJGRkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBJUlFfQ0FOX1JYLAorCQkuZW5kID0gSVJRX0NBTl9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9DQU5fVFgsCisJCS5lbmQgPSBJUlFfQ0FOX1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gSVJRX0NBTl9FUlJPUiwKKwkJLmVuZCA9IElSUV9DQU5fRVJST1IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2Nhbl9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmZpbl9jYW4iLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX2Nhbl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmaW5fY2FuX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2Nhbl9wZXJpcGhlcmFscywgLyogUGFzc2VkIHRvIGRyaXZlciAqLworCX0sCit9OworI2VuZGlmCisKIC8qCiAgKiAgVVNCLUxBTiBFekV4dGVuZGVyIGJvYXJkCiAgKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KQEAgLTYxMCw2ICs2NDgsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQorCSZiZmluX2Nhbl9kZXZpY2UsCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKIAkmc21jOTF4X2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2V4dC1ncGlvLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZXh0LWdwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBiMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2V4dC1ncGlvLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBHUElPTElCIGludGVyZmFjZSBmb3IgQkY1MzgvOSBQT1JUIEMsIEQsIGFuZCBFIEdQSU9zCisgKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorCisjZGVmaW5lIERFRklORV9SRUcocmVnLCBvZmYpIFwKK3N0YXRpYyBpbmxpbmUgdTE2IHJlYWRfIyNyZWcodm9pZCBfX2lvbWVtICpwb3J0KSBcCisJeyByZXR1cm4gYmZpbl9yZWFkMTYocG9ydCArIG9mZik7IH0gXAorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlXyMjcmVnKHZvaWQgX19pb21lbSAqcG9ydCwgdTE2IHYpIFwKKwl7IGJmaW5fd3JpdGUxNihwb3J0ICsgb2ZmLCB2KTsgfQorCitERUZJTkVfUkVHKFBPUlRJTywgMHgwMCkKK0RFRklORV9SRUcoUE9SVElPX0NMRUFSLCAweDEwKQorREVGSU5FX1JFRyhQT1JUSU9fU0VULCAweDIwKQorREVGSU5FX1JFRyhQT1JUSU9fRElSLCAweDQwKQorREVGSU5FX1JFRyhQT1JUSU9fSU5FTiwgMHg1MCkKKworc3RhdGljIHZvaWQgX19pb21lbSAqZ3Bpb19jaGlwX3RvX21tcihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQoreworCXN3aXRjaCAoY2hpcC0+YmFzZSkgeworCWRlZmF1bHQ6IC8qIG5vdCByZWFsbHkgbmVlZGVkLCBidXQga2VlcHMgZ2NjIGhhcHB5ICovCisJY2FzZSBHUElPX1BDMDogcmV0dXJuICh2b2lkIF9faW9tZW0gKilQT1JUQ0lPOworCWNhc2UgR1BJT19QRDA6IHJldHVybiAodm9pZCBfX2lvbWVtICopUE9SVERJTzsKKwljYXNlIEdQSU9fUEUwOiByZXR1cm4gKHZvaWQgX19pb21lbSAqKVBPUlRFSU87CisJfQorfQorCitzdGF0aWMgaW50IGJmNTM4X2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8pCit7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gZ3Bpb19jaGlwX3RvX21tcihjaGlwKTsKKwlyZXR1cm4gISEocmVhZF9QT1JUSU8ocG9ydCkgJiAoMXUgPDwgZ3BpbykpOworfQorCitzdGF0aWMgdm9pZCBiZjUzOF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gZ3Bpb19jaGlwX3RvX21tcihjaGlwKTsKKwlpZiAodmFsdWUpCisJCXdyaXRlX1BPUlRJT19TRVQocG9ydCwgKDF1IDw8IGdwaW8pKTsKKwllbHNlCisJCXdyaXRlX1BPUlRJT19DTEVBUihwb3J0LCAoMXUgPDwgZ3BpbykpOworfQorCitzdGF0aWMgaW50IGJmNTM4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8pCit7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gZ3Bpb19jaGlwX3RvX21tcihjaGlwKTsKKwl3cml0ZV9QT1JUSU9fRElSKHBvcnQsIHJlYWRfUE9SVElPX0RJUihwb3J0KSAmIH4oMXUgPDwgZ3BpbykpOworCXdyaXRlX1BPUlRJT19JTkVOKHBvcnQsIHJlYWRfUE9SVElPX0lORU4ocG9ydCkgfCAoMXUgPDwgZ3BpbykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmNTM4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gZ3Bpb19jaGlwX3RvX21tcihjaGlwKTsKKwl3cml0ZV9QT1JUSU9fSU5FTihwb3J0LCByZWFkX1BPUlRJT19JTkVOKHBvcnQpICYgfigxdSA8PCBncGlvKSk7CisJYmY1MzhfZ3Bpb19zZXRfdmFsdWUocG9ydCwgZ3BpbywgdmFsdWUpOworCXdyaXRlX1BPUlRJT19ESVIocG9ydCwgcmVhZF9QT1JUSU9fRElSKHBvcnQpIHwgKDF1IDw8IGdwaW8pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZjUzOF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gYmZpbl9zcGVjaWFsX2dwaW9fcmVxdWVzdChjaGlwLT5iYXNlICsgZ3BpbywgY2hpcC0+bGFiZWwpOworfQorCitzdGF0aWMgdm9pZCBiZjUzOF9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gYmZpbl9zcGVjaWFsX2dwaW9fZnJlZShjaGlwLT5iYXNlICsgZ3Bpbyk7Cit9CisKKy8qIFdlIGRvbid0IHNldCB0aGUgaXJxIGZpZWxkcyBhcyB0aGVzZSBiYW5rcyBjYW5ub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyAqLworCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBiZjUzOF9wb3J0Y19jaGlwID0geworCS5sYWJlbCA9ICJHUElPLVBDIiwKKwkuZGlyZWN0aW9uX2lucHV0ID0gYmY1MzhfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCisJLmdldCA9IGJmNTM4X2dwaW9fZ2V0X3ZhbHVlLAorCS5kaXJlY3Rpb25fb3V0cHV0ID0gYmY1MzhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCS5zZXQgPSBiZjUzOF9ncGlvX3NldF92YWx1ZSwKKwkucmVxdWVzdCA9IGJmNTM4X2dwaW9fcmVxdWVzdCwKKwkuZnJlZSA9IGJmNTM4X2dwaW9fZnJlZSwKKwkuYmFzZSA9IEdQSU9fUEMwLAorCS5uZ3BpbyA9IEdQSU9fUEM5IC0gR1BJT19QQzAgKyAxLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgYmY1MzhfcG9ydGRfY2hpcCA9IHsKKwkubGFiZWwgPSAiR1BJTy1QRCIsCisJLmRpcmVjdGlvbl9pbnB1dCA9IGJmNTM4X2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCS5nZXQgPSBiZjUzOF9ncGlvX2dldF92YWx1ZSwKKwkuZGlyZWN0aW9uX291dHB1dCA9IGJmNTM4X2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0ID0gYmY1MzhfZ3Bpb19zZXRfdmFsdWUsCisJLnJlcXVlc3QgPSBiZjUzOF9ncGlvX3JlcXVlc3QsCisJLmZyZWUgPSBiZjUzOF9ncGlvX2ZyZWUsCisJLmJhc2UgPSBHUElPX1BEMCwKKwkubmdwaW8gPSBHUElPX1BEMTMgLSBHUElPX1BEMCArIDEsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBiZjUzOF9wb3J0ZV9jaGlwID0geworCS5sYWJlbCA9ICJHUElPLVBFIiwKKwkuZGlyZWN0aW9uX2lucHV0ID0gYmY1MzhfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCisJLmdldCA9IGJmNTM4X2dwaW9fZ2V0X3ZhbHVlLAorCS5kaXJlY3Rpb25fb3V0cHV0ID0gYmY1MzhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCS5zZXQgPSBiZjUzOF9ncGlvX3NldF92YWx1ZSwKKwkucmVxdWVzdCA9IGJmNTM4X2dwaW9fcmVxdWVzdCwKKwkuZnJlZSA9IGJmNTM4X2dwaW9fZnJlZSwKKwkuYmFzZSA9IEdQSU9fUEUwLAorCS5uZ3BpbyA9IEdQSU9fUEUxNSAtIEdQSU9fUEUwICsgMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJmNTM4X2V4dGdwaW9fc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gZ3Bpb2NoaXBfYWRkKCZiZjUzOF9wb3J0Y19jaGlwKSB8CisJCWdwaW9jaGlwX2FkZCgmYmY1MzhfcG9ydGRfY2hpcCkgfAorCQlncGlvY2hpcF9hZGQoJmJmNTM4X3BvcnRlX2NoaXApOworfQorYXJjaF9pbml0Y2FsbChiZjUzOF9leHRncGlvX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCAyNzhlODk0Li4wOGI1ZWFiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0zNywxMCArMzcsNCBAQAogI2RlZmluZSBPRkZTRVRfU0NSICAgICAgICAgICAgICAweDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBPRkZTRVRfR0NUTCAgICAgICAgICAgICAweDI0CS8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwogCi0vKiBQTExfRElWIE1hc2tzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lIENDTEtfRElWMSBDU0VMX0RJVjEJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0NMS19ESVYyIENTRUxfRElWMgkvKiAgICAgICAgICBDQ0xLID0gVkNPIC8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDQ0xLX0RJVjQgQ1NFTF9ESVY0CS8qICAgICAgICAgIENDTEsgPSBWQ08gLyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENDTEtfRElWOCBDU0VMX0RJVjgJLyogICAgICAgICAgQ0NMSyA9IFZDTyAvIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggNWY2YzM0ZC4uZmFjNTYzZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtNDY4LDMxICs0NjgsMzEgQEAKIC8qIEdlbmVyYWwtUHVycG9zZSBQb3J0cyAgKDB4RkZDMDE1MDAgLQkweEZGQzAxNUZGKQkgKi8KIAogLyogR1BJTwlQb3J0IEMgUmVnaXN0ZXIJTmFtZXMgKi8KLSNkZWZpbmUJR1BJT19DX0NORkcJCQkweEZGQzAxNTAwCS8qIEdQSU8JUGluIFBvcnQgQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCUdQSU9fQ19ECQkJMHhGRkMwMTUxMAkvKiBHUElPCVBpbiBQb3J0IEMgRGF0YQlSZWdpc3RlciAqLwotI2RlZmluZQlHUElPX0NfQwkJCTB4RkZDMDE1MjAJLyogQ2xlYXIgR1BJTyBQaW4gUG9ydCBDIFJlZ2lzdGVyICovCi0jZGVmaW5lCUdQSU9fQ19TCQkJMHhGRkMwMTUzMAkvKiBTZXQgR1BJTyBQaW4JUG9ydCBDIFJlZ2lzdGVyICovCi0jZGVmaW5lCUdQSU9fQ19UCQkJMHhGRkMwMTU0MAkvKiBUb2dnbGUgR1BJTyBQaW4gUG9ydAlDIFJlZ2lzdGVyICovCi0jZGVmaW5lCUdQSU9fQ19ESVIJCQkweEZGQzAxNTUwCS8qIEdQSU8JUGluIFBvcnQgQyBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJR1BJT19DX0lORU4JCQkweEZGQzAxNTYwCS8qIEdQSU8JUGluIFBvcnQgQyBJbnB1dCBFbmFibGUJUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVENJT19GRVIJCQkweEZGQzAxNTAwCS8qIEdQSU8JUGluIFBvcnQgQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRDSU8JCQkJMHhGRkMwMTUxMAkvKiBHUElPCVBpbiBQb3J0IEMgRGF0YQlSZWdpc3RlciAqLworI2RlZmluZSBQT1JUQ0lPX0NMRUFSCQkJMHhGRkMwMTUyMAkvKiBDbGVhciBHUElPIFBpbiBQb3J0IEMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVENJT19TRVQJCQkweEZGQzAxNTMwCS8qIFNldCBHUElPIFBpbglQb3J0IEMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVENJT19UT0dHTEUJCQkweEZGQzAxNTQwCS8qIFRvZ2dsZSBHUElPIFBpbiBQb3J0CUMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVENJT19ESVIJCQkweEZGQzAxNTUwCS8qIEdQSU8JUGluIFBvcnQgQyBEaXJlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVENJT19JTkVOCQkJMHhGRkMwMTU2MAkvKiBHUElPCVBpbiBQb3J0IEMgSW5wdXQgRW5hYmxlCVJlZ2lzdGVyICovCiAKIC8qIEdQSU8JUG9ydCBEIFJlZ2lzdGVyCU5hbWVzICovCi0jZGVmaW5lCUdQSU9fRF9DTkZHCQkJMHhGRkMwMTUwNAkvKiBHUElPCVBpbiBQb3J0IEQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlHUElPX0RfRAkJCTB4RkZDMDE1MTQJLyogR1BJTwlQaW4gUG9ydCBEIERhdGEJUmVnaXN0ZXIgKi8KLSNkZWZpbmUJR1BJT19EX0MJCQkweEZGQzAxNTI0CS8qIENsZWFyIEdQSU8gUGluIFBvcnQgRCBSZWdpc3RlciAqLwotI2RlZmluZQlHUElPX0RfUwkJCTB4RkZDMDE1MzQJLyogU2V0IEdQSU8gUGluCVBvcnQgRCBSZWdpc3RlciAqLwotI2RlZmluZQlHUElPX0RfVAkJCTB4RkZDMDE1NDQJLyogVG9nZ2xlIEdQSU8gUGluIFBvcnQJRCBSZWdpc3RlciAqLwotI2RlZmluZQlHUElPX0RfRElSCQkJMHhGRkMwMTU1NAkvKiBHUElPCVBpbiBQb3J0IEQgRGlyZWN0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lCUdQSU9fRF9JTkVOCQkJMHhGRkMwMTU2NAkvKiBHUElPCVBpbiBQb3J0IEQgSW5wdXQgRW5hYmxlCVJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRESU9fRkVSCQkJMHhGRkMwMTUwNAkvKiBHUElPCVBpbiBQb3J0IEQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBQT1JURElPCQkJCTB4RkZDMDE1MTQJLyogR1BJTwlQaW4gUG9ydCBEIERhdGEJUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVERJT19DTEVBUgkJCTB4RkZDMDE1MjQJLyogQ2xlYXIgR1BJTyBQaW4gUG9ydCBEIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRESU9fU0VUCQkJMHhGRkMwMTUzNAkvKiBTZXQgR1BJTyBQaW4JUG9ydCBEIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRESU9fVE9HR0xFCQkJMHhGRkMwMTU0NAkvKiBUb2dnbGUgR1BJTyBQaW4gUG9ydAlEIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRESU9fRElSCQkJMHhGRkMwMTU1NAkvKiBHUElPCVBpbiBQb3J0IEQgRGlyZWN0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRESU9fSU5FTgkJCTB4RkZDMDE1NjQJLyogR1BJTwlQaW4gUG9ydCBEIElucHV0IEVuYWJsZQlSZWdpc3RlciAqLwogCiAvKiBHUElPCVBvcnQgRSBSZWdpc3RlcglOYW1lcyAqLwotI2RlZmluZQlHUElPX0VfQ05GRwkJCTB4RkZDMDE1MDgJLyogR1BJTwlQaW4gUG9ydCBFIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJR1BJT19FX0QJCQkweEZGQzAxNTE4CS8qIEdQSU8JUGluIFBvcnQgRSBEYXRhCVJlZ2lzdGVyICovCi0jZGVmaW5lCUdQSU9fRV9DCQkJMHhGRkMwMTUyOAkvKiBDbGVhciBHUElPIFBpbiBQb3J0IEUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJR1BJT19FX1MJCQkweEZGQzAxNTM4CS8qIFNldCBHUElPIFBpbglQb3J0IEUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJR1BJT19FX1QJCQkweEZGQzAxNTQ4CS8qIFRvZ2dsZSBHUElPIFBpbiBQb3J0CUUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJR1BJT19FX0RJUgkJCTB4RkZDMDE1NTgJLyogR1BJTwlQaW4gUG9ydCBFIERpcmVjdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZQlHUElPX0VfSU5FTgkJCTB4RkZDMDE1NjgJLyogR1BJTwlQaW4gUG9ydCBFIElucHV0IEVuYWJsZQlSZWdpc3RlciAqLworI2RlZmluZSBQT1JURUlPX0ZFUgkJCTB4RkZDMDE1MDgJLyogR1BJTwlQaW4gUG9ydCBFIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE9SVEVJTwkJCQkweEZGQzAxNTE4CS8qIEdQSU8JUGluIFBvcnQgRSBEYXRhCVJlZ2lzdGVyICovCisjZGVmaW5lIFBPUlRFSU9fQ0xFQVIJCQkweEZGQzAxNTI4CS8qIENsZWFyIEdQSU8gUGluIFBvcnQgRSBSZWdpc3RlciAqLworI2RlZmluZSBQT1JURUlPX1NFVAkJCTB4RkZDMDE1MzgJLyogU2V0IEdQSU8gUGluCVBvcnQgRSBSZWdpc3RlciAqLworI2RlZmluZSBQT1JURUlPX1RPR0dMRQkJCTB4RkZDMDE1NDgJLyogVG9nZ2xlIEdQSU8gUGluIFBvcnQJRSBSZWdpc3RlciAqLworI2RlZmluZSBQT1JURUlPX0RJUgkJCTB4RkZDMDE1NTgJLyogR1BJTwlQaW4gUG9ydCBFIERpcmVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBQT1JURUlPX0lORU4JCQkweEZGQzAxNTY4CS8qIEdQSU8JUGluIFBvcnQgRSBJbnB1dCBFbmFibGUJUmVnaXN0ZXIgKi8KIAogLyogRE1BIENvbnRyb2xsZXIgMSBUcmFmZmljIENvbnRyb2wgUmVnaXN0ZXJzICgweEZGQzAxQjAwIC0gMHhGRkMwMUJGRikgKi8KIApAQCAtMTQyMiw4MSArMTQyMiw2IEBACiAvKiBTeXN0ZW0gTU1SIFJlZ2lzdGVyIEJpdHMgYW5kCU1hY3JvcyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotLyogKioqKioqKioqKioqKioqKioqKioqIFBMTCBBTkQgUkVTRVQgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiBQTExfQ1RMIE1hc2tzICovCi0jZGVmaW5lCVBMTF9DTEtJTgkJCTB4MDAwMAkvKiBQYXNzCUNMS0lOIHRvIFBMTCAqLwotI2RlZmluZQlQTExfQ0xLSU5fRElWMgkJMHgwMDAxCS8qIFBhc3MJQ0xLSU4vMgl0byBQTEwgKi8KLSNkZWZpbmUJREYJCQkJCTB4MDAwMQkgLyogMDogUExMID0gQ0xLSU4sIDE6IFBMTCA9IENMS0lOLzIgKi8KLSNkZWZpbmUJUExMX09GRgkJCQkweDAwMDIJLyogU2h1dAlvZmYgUExMCWNsb2NrcyAqLwotCi0jZGVmaW5lCVNUT1BDSwkJCQkweDAwMDgJLyogQ29yZQlDbG9jayBPZmYJCSAqLwotI2RlZmluZQlQRFdOCQkJCTB4MDAyMAkvKiBQdXQgdGhlIFBMTCBpbiBhIERlZXAgU2xlZXAgc3RhdGUgKi8KLSNkZWZpbmUJSU5fREVMQVkJCQkweDAwMTQJLyogRUJJVQlJbnB1dCBEZWxheSBTZWxlY3QgKi8KLSNkZWZpbmUJT1VUX0RFTEFZCQkJMHgwMEMwCS8qIEVCSVUJT3V0cHV0IERlbGF5IFNlbGVjdCAqLwotI2RlZmluZQlCWVBBU1MJCQkJMHgwMTAwCS8qIEJ5cGFzcyB0aGUgUExMICovCi0jZGVmaW5lCU1TRUwJCQkweDdFMDAJLyogTXVsdGlwbGllciBTZWxlY3QgRm9yIENDTEsvVkNPIEZhY3RvcnMgKi8KLQotLyogUExMX0NUTCBNYWNyb3MJCQkJICovCi0jaWZkZWYgX01JU1JBX1JVTEVTCi0jZGVmaW5lCVNFVF9NU0VMKHgpCQkoKCh4KSYweDNGdSkgPDwJMHg5KQkvKiBTZXQgTVNFTCA9IDAtNjMgLS0+IFZDTyA9IENMS0lOKk1TRUwgKi8KLSNkZWZpbmUJU0VUX09VVF9ERUxBWSh4KQkoKCh4KSYweDAzdSkgPDwJMHg2KQotI2RlZmluZQlTRVRfSU5fREVMQVkoeCkJCSgoKCh4KSYweDAydSkgPDwgMHgzKSB8CSgoKHgpJjB4MDF1KSA8PAkweDIpKQotI2Vsc2UKLSNkZWZpbmUJU0VUX01TRUwoeCkJCSgoKHgpJjB4M0YpIDw8IDB4OSkJLyogU2V0IE1TRUwgPSAwLTYzIC0tPiBWQ08gPSBDTEtJTipNU0VMICovCi0jZGVmaW5lCVNFVF9PVVRfREVMQVkoeCkJKCgoeCkmMHgwMykgPDwgMHg2KQotI2RlZmluZQlTRVRfSU5fREVMQVkoeCkJCSgoKCh4KSYweDAyKSA8PAkweDMpIHwgKCgoeCkmMHgwMSkgPDwgMHgyKSkKLSNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KLQotLyogUExMX0RJViBNYXNrcyAqLwotI2RlZmluZQlTU0VMCQkJCTB4MDAwRgkvKiBTeXN0ZW0gU2VsZWN0ICovCi0jZGVmaW5lCUNTRUwJCQkJMHgwMDMwCS8qIENvcmUJU2VsZWN0ICovCi0jZGVmaW5lCUNTRUxfRElWMQkJMHgwMDAwCS8qCQlDQ0xLID0gVkNPIC8gMSAqLwotI2RlZmluZQlDU0VMX0RJVjIJCTB4MDAxMAkvKgkJQ0NMSyA9IFZDTyAvIDIgKi8KLSNkZWZpbmUJQ1NFTF9ESVY0CQkweDAwMjAJLyoJCUNDTEsgPSBWQ08gLyA0ICovCi0jZGVmaW5lCUNTRUxfRElWOAkJMHgwMDMwCS8qCQlDQ0xLID0gVkNPIC8gOCAqLwotCi0jZGVmaW5lCVNDTEtfRElWKHgpCQkJKHgpCQkvKiBTQ0xLCT0gVkNPIC8JeCAqLwotCi0vKiBQTExfRElWIE1hY3JvcwkJCQkJCQkgKi8KLSNpZmRlZiBfTUlTUkFfUlVMRVMKLSNkZWZpbmUJU0VUX1NTRUwoeCkJCQkoKHgpJjB4RnUpCS8qIFNldCBTU0VMID0gMC0xNSAtLT4gU0NMSyA9IFZDTy9TU0VMICovCi0jZWxzZQotI2RlZmluZQlTRVRfU1NFTCh4KQkJCSgoeCkmMHhGKQkvKiBTZXQgU1NFTCA9IDAtMTUgLS0+IFNDTEsgPSBWQ08vU1NFTCAqLwotI2VuZGlmIC8qIF9NSVNSQV9SVUxFUyAqLwotCi0vKiBQTExfU1RBVCBNYXNrcwkJCQkJCQkJCQkgKi8KLSNkZWZpbmUJQUNUSVZFX1BMTEVOQUJMRUQJMHgwMDAxCS8qIFByb2Nlc3NvciBJbglBY3RpdmUgTW9kZSBXaXRoIFBMTCBFbmFibGVkICovCi0jZGVmaW5lCUZVTExfT04JCQkJMHgwMDAyCS8qIFByb2Nlc3NvciBJbglGdWxsIE9uCU1vZGUgKi8KLSNkZWZpbmUJQUNUSVZFX1BMTERJU0FCTEVECTB4MDAwNAkvKiBQcm9jZXNzb3IgSW4JQWN0aXZlIE1vZGUgV2l0aCBQTEwgRGlzYWJsZWQgKi8KLSNkZWZpbmUJUExMX0xPQ0tFRAkJCTB4MDAyMAkvKiBQTExfTE9DS0NOVCBIYXMgQmVlbglSZWFjaGVkICovCi0KLS8qIFZSX0NUTCBNYXNrcwkJCQkJCQkJCQkgKi8KLSNkZWZpbmUJRlJFUQkJCTB4MDAwMwkvKiBTd2l0Y2hpbmcgT3NjaWxsYXRvcglGcmVxdWVuY3kgRm9yIFJlZ3VsYXRvciAqLwotI2RlZmluZQlISUJFUk5BVEUJCTB4MDAwMAkvKgkJUG93ZXJkb3duL0J5cGFzcyBPbi1Cb2FyZCBSZWd1bGF0aW9uICovCi0jZGVmaW5lCUZSRVFfMzMzCQkweDAwMDEJLyoJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMzMzIGtIeiAqLwotI2RlZmluZQlGUkVRXzY2NwkJMHgwMDAyCS8qCQlTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDY2NyBrSHogKi8KLSNkZWZpbmUJRlJFUV8xMDAwCQkweDAwMDMJLyoJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMSBNSHogKi8KLQotI2RlZmluZQlHQUlOCQkJMHgwMDBDCS8qIFZvbHRhZ2UgTGV2ZWwgR2FpbiAqLwotI2RlZmluZQlHQUlOXzUJCQkweDAwMDAJLyoJCUdBSU4gPSA1ICovCi0jZGVmaW5lCUdBSU5fMTAJCQkweDAwMDQJLyoJCUdBSU4gPSAxMCAqLwotI2RlZmluZQlHQUlOXzIwCQkJMHgwMDA4CS8qCQlHQUlOID0gMjAgKi8KLSNkZWZpbmUJR0FJTl81MAkJCTB4MDAwQwkvKgkJR0FJTiA9IDUwICovCi0KLSNkZWZpbmUJVkxFVgkJCTB4MDBGMAkvKiBJbnRlcm5hbCBWb2x0YWdlIExldmVsIC0gT25seSBQcm9ncmFtIFZhbHVlcwlXaXRoaW4gU3BlY2lmaWNhdGlvbnMgKi8KLSNkZWZpbmUJVkxFVl8xMDAJCTB4MDA5MAkvKglWTEVWID0gMS4wMCBWIChTZWUgRGF0YXNoZWV0IGZvciBSZWd1bGF0b3IgVG9sZXJhbmNlKSAqLwotI2RlZmluZQlWTEVWXzEwNQkJMHgwMEEwCS8qCVZMRVYgPSAxLjA1IFYgKFNlZSBEYXRhc2hlZXQgZm9yIFJlZ3VsYXRvciBUb2xlcmFuY2UpICovCi0jZGVmaW5lCVZMRVZfMTEwCQkweDAwQjAJLyoJVkxFViA9IDEuMTAgViAoU2VlIERhdGFzaGVldCBmb3IgUmVndWxhdG9yIFRvbGVyYW5jZSkgKi8KLSNkZWZpbmUJVkxFVl8xMTUJCTB4MDBDMAkvKglWTEVWID0gMS4xNSBWIChTZWUgRGF0YXNoZWV0IGZvciBSZWd1bGF0b3IgVG9sZXJhbmNlKSAqLwotI2RlZmluZQlWTEVWXzEyMAkJMHgwMEQwCS8qCVZMRVYgPSAxLjIwIFYgKFNlZSBEYXRhc2hlZXQgZm9yIFJlZ3VsYXRvciBUb2xlcmFuY2UpICovCi0jZGVmaW5lCVZMRVZfMTI1CQkweDAwRTAJLyoJVkxFViA9IDEuMjUgViAoU2VlIERhdGFzaGVldCBmb3IgUmVndWxhdG9yIFRvbGVyYW5jZSkgKi8KLSNkZWZpbmUJVkxFVl8xMzAJCTB4MDBGMAkvKglWTEVWID0gMS4zMCBWIChTZWUgRGF0YXNoZWV0IGZvciBSZWd1bGF0b3IgVG9sZXJhbmNlKSAqLwotCi0jZGVmaW5lCVdBS0UJCQkweDAxMDAJLyogRW5hYmxlIFJUQy9SZXNldCBXYWtldXAgRnJvbQlIaWJlcm5hdGUgKi8KLSNkZWZpbmUJQ0FOV0UJCQkweDAyMDAJLyogRW5hYmxlIENBTiBXYWtldXAgRnJvbSBIaWJlcm5hdGUgKi8KLSNkZWZpbmUJTVhWUldFCQkJMHgwNDAwCS8qIEVuYWJsZSBNWFZSIFdha2V1cCBGcm9tIEhpYmVybmF0ZSAqLwotI2RlZmluZQlTQ0tFTE9XCQkJMHg4MDAwCS8qIERvIE5vdCBEcml2ZQlTQ0tFIEhpZ2ggRHVyaW5nIFJlc2V0IEFmdGVyIEhpYmVybmF0ZSAqLwotCiAvKiBTV1JTVCBNYXNrICovCiAjZGVmaW5lCVNZU1RFTV9SRVNFVAkweDAwMDcJLyogSW5pdGlhdGVzIEEgU3lzdGVtIFNvZnR3YXJlIFJlc2V0ICovCiAjZGVmaW5lCURPVUJMRV9GQVVMVAkweDAwMDgJLyogQ29yZQlEb3VibGUgRmF1bHQgQ2F1c2VzIFJlc2V0ICovCkBAIC0xNjA5LDkxICsxNTM0LDYgQEAKICNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KIAogCi0vKiAqKioqKioqKiogV0FUQ0hET0cgVElNRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIFdhdGNoZG9nIFRpbWVyIFdET0dfQ1RMIFJlZ2lzdGVyIE1hc2tzICovCi0jaWZkZWYgX01JU1JBX1JVTEVTCi0jZGVmaW5lCVdERVYoeCkJCQkoKCh4KTw8MSkgJiAweDAwMDZ1KQkvKiBldmVudCBnZW5lcmF0ZWQgb24gcm9sbCBvdmVyICovCi0jZWxzZQotI2RlZmluZQlXREVWKHgpCQkJKCgoeCk8PDEpICYgMHgwMDA2KQkvKiBldmVudCBnZW5lcmF0ZWQgb24gcm9sbCBvdmVyICovCi0jZW5kaWYgLyogX01JU1JBX1JVTEVTICovCi0jZGVmaW5lCVdERVZfUkVTRVQJCTB4MDAwMAkJCQkvKiBnZW5lcmF0ZSByZXNldCBldmVudAlvbiByb2xsCW92ZXIgKi8KLSNkZWZpbmUJV0RFVl9OTUkJCTB4MDAwMgkJCQkvKiBnZW5lcmF0ZSBOTUkJZXZlbnQgb24gcm9sbCBvdmVyICovCi0jZGVmaW5lCVdERVZfR1BJCQkweDAwMDQJCQkJLyogZ2VuZXJhdGUgR1AgSVJRIG9uIHJvbGwgb3ZlciAqLwotI2RlZmluZQlXREVWX05PTkUJCTB4MDAwNgkJCQkvKiBubyBldmVudCBvbiByb2xsIG92ZXIgKi8KLSNkZWZpbmUJV0RFTgkJCTB4MEZGMAkJCQkvKiBlbmFibGUgd2F0Y2hkb2cgKi8KLSNkZWZpbmUJV0RESVMJCQkweDBBRDAJCQkJLyogZGlzYWJsZSB3YXRjaGRvZyAqLwotI2RlZmluZQlXRFJPCQkJMHg4MDAwCQkJCS8qIHdhdGNoZG9nIHJvbGxlZCBvdmVyCWxhdGNoICovCi0KLS8qIGRlcHJlY2F0ZWQgV0RPR19DVEwgUmVnaXN0ZXIJTWFza3MgZm9yIGxlZ2FjeSBjb2RlICovCi0jZGVmaW5lCUlDVEwgV0RFVgotI2RlZmluZQlFTkFCTEVfUkVTRVQJV0RFVl9SRVNFVAotI2RlZmluZQlXRE9HX1JFU0VUCQlXREVWX1JFU0VUCi0jZGVmaW5lCUVOQUJMRV9OTUkJCVdERVZfTk1JCi0jZGVmaW5lCVdET0dfTk1JCQlXREVWX05NSQotI2RlZmluZQlFTkFCTEVfR1BJCQlXREVWX0dQSQotI2RlZmluZQlXRE9HX0dQSQkJV0RFVl9HUEkKLSNkZWZpbmUJRElTQUJMRV9FVlQJV0RFVl9OT05FCi0jZGVmaW5lCVdET0dfTk9ORQkJV0RFVl9OT05FCi0KLSNkZWZpbmUJVE1SX0VOCQkJV0RFTgotI2RlZmluZQlXRE9HX0RJU0FCTEUJCVdERElTCi0jZGVmaW5lCVRSTwkJCVdEUk8KLQotI2RlZmluZQlJQ1RMX1AwCQkJMHgwMQotI2RlZmluZQlJQ1RMX1AxCQkJMHgwMgotI2RlZmluZQlUUk9fUAkJCTB4MEYKLQotCi0vKiAqKioqKioqKioqKioqKiogIFJFQUwgVElNRSBDTE9DSyBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBSVENfU1RBVCBhbmQJUlRDX0FMQVJNIHJlZ2lzdGVyICovCi0jZGVmaW5lCVJUU0VDCQkweDAwMDAwMDNGCS8qIFJlYWwtVGltZSBDbG9jayBTZWNvbmRzICovCi0jZGVmaW5lCVJUTUlOCQkweDAwMDAwRkMwCS8qIFJlYWwtVGltZSBDbG9jayBNaW51dGVzICovCi0jZGVmaW5lCVJUSFIJCTB4MDAwMUYwMDAJLyogUmVhbC1UaW1lIENsb2NrIEhvdXJzICovCi0jZGVmaW5lCVJUREFZCQkweEZGRkUwMDAwCS8qIFJlYWwtVGltZSBDbG9jayBEYXlzICovCi0KLS8qIFJUQ19JQ1RMIHJlZ2lzdGVyICovCi0jZGVmaW5lCVNXSUUJCTB4MDAwMQkJLyogU3RvcHdhdGNoIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUJQUlFCQkJMHgwMDAyCQkvKiBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lCVNJRQkJCTB4MDAwNAkJLyogU2Vjb25kcyAoMSBIeikgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlNSUUJCQkweDAwMDgJCS8qIE1pbnV0ZXMgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlISUUJCQkweDAwMTAJCS8qIEhvdXJzIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUJRElFCQkJMHgwMDIwCQkvKiAyNCBIb3VycyAoRGF5cykgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlEQUlFCQkweDAwNDAJCS8qIERheSBBbGFybSAoRGF5LCBIb3VyLCBNaW51dGUsIFNlY29uZCkgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlXQ0lFCQkweDgwMDAJCS8qIFdyaXRlIENvbXBsZXRlIEludGVycnVwdCBFbmFibGUgKi8KLQotLyogUlRDX0lTVEFUIHJlZ2lzdGVyICovCi0jZGVmaW5lCVNXRUYJCTB4MDAwMQkJLyogU3RvcHdhdGNoIEV2ZW50IEZsYWcgKi8KLSNkZWZpbmUJQUVGCQkJMHgwMDAyCQkvKiBBbGFybSBFdmVudCBGbGFnICovCi0jZGVmaW5lCVNFRgkJCTB4MDAwNAkJLyogU2Vjb25kcyAoMSBIeikgRXZlbnQJRmxhZyAqLwotI2RlZmluZQlNRUYJCQkweDAwMDgJCS8qIE1pbnV0ZXMgRXZlbnQgRmxhZyAqLwotI2RlZmluZQlIRUYJCQkweDAwMTAJCS8qIEhvdXJzIEV2ZW50IEZsYWcgKi8KLSNkZWZpbmUJREVGCQkJMHgwMDIwCQkvKiAyNCBIb3VycyAoRGF5cykgRXZlbnQgRmxhZyAqLwotI2RlZmluZQlEQUVGCQkweDAwNDAJCS8qIERheSBBbGFybSAoRGF5LCBIb3VyLCBNaW51dGUsIFNlY29uZCkgRXZlbnQgRmxhZyAqLwotI2RlZmluZQlXUFMJCQkweDQwMDAJCS8qIFdyaXRlIFBlbmRpbmcgU3RhdHVzCShSTykgKi8KLSNkZWZpbmUJV0NPTQkJMHg4MDAwCQkvKiBXcml0ZSBDb21wbGV0ZSAqLwotCi0vKiBSVENfRkFTVCBNYXNrIChSVENfUFJFTiBNYXNrKSAqLwotI2RlZmluZQlFTkFCTEVfUFJFU0NBTEUJICAgICAweDAwMDAwMDAxCSAvKiBFbmFibGUgcHJlc2NhbGVyIHNvCVJUQyBydW5zIGF0IDEgSHogKi8KLSNkZWZpbmUJUFJFTgkJICAgICAweDAwMDAwMDAxCi0JCS8qICoqIE11c3QgYmUgc2V0IGFmdGVyCXBvd2VyLXVwIGZvciBwcm9wZXIgb3BlcmF0aW9uIG9mIFJUQyAqLwotCi0vKiBEZXByZWNhdGVkIFJUQ19TVEFUIGFuZCBSVENfQUxBUk0gTWFza3MJCQkgKi8KLSNkZWZpbmUJUlRDX1NFQwkJCVJUU0VDCS8qIFJlYWwtVGltZSBDbG9jayBTZWNvbmRzICovCi0jZGVmaW5lCVJUQ19NSU4JCQlSVE1JTgkvKiBSZWFsLVRpbWUgQ2xvY2sgTWludXRlcyAqLwotI2RlZmluZQlSVENfSFIJCQlSVEhSCS8qIFJlYWwtVGltZSBDbG9jayBIb3VycyAqLwotI2RlZmluZQlSVENfREFZCQkJUlREQVkJLyogUmVhbC1UaW1lIENsb2NrIERheXMgKi8KLQotLyogRGVwcmVjYXRlZCBSVENfSUNUTC9SVENfSVNUQVQgTWFza3MJCQkJCQkJCQkJCSAqLwotI2RlZmluZQlTVE9QV0FUQ0gJCVNXSUUJCS8qIFN0b3B3YXRjaCBJbnRlcnJ1cHQgRW5hYmxlCSAqLwotI2RlZmluZQlBTEFSTQkJCUFJRQkJLyogQWxhcm0gSW50ZXJydXB0IEVuYWJsZQkJICovCi0jZGVmaW5lCVNFQ09ORAkJCVNJRQkJLyogU2Vjb25kcyAoMSBIeikgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlNSU5VVEUJCQlNSUUJCS8qIE1pbnV0ZXMgSW50ZXJydXB0IEVuYWJsZQkJICovCi0jZGVmaW5lCUhPVVIJCQlISUUJCS8qIEhvdXJzIEludGVycnVwdCBFbmFibGUJCSAqLwotI2RlZmluZQlEQVkJCQkJRElFCQkvKiAyNCBIb3VycyAoRGF5cykgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlEQVlfQUxBUk0JCURBSUUJCS8qIERheSBBbGFybSAoRGF5LCBIb3VyLCBNaW51dGUsIFNlY29uZCkgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZQlXUklURV9DT01QTEVURQlXQ0lFCQkvKiBXcml0ZSBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVUFSVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKiogKi8KIC8qIFVBUlR4X0xDUiBSZWdpc3RlciAqLwogI2lmZGVmIF9NSVNSQV9SVUxFUwpAQCAtMTkxNyw1MiArMTc1Nyw2IEBACiAKIAogLyogKioqKioqKioqKiAgRE1BIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqLwotLyogRE1BeF9DT05GSUcsCU1ETUFfeXlfQ09ORklHIE1hc2tzICovCi0jZGVmaW5lCURNQUVOCQkweDAwMDEJLyogQ2hhbm5lbCBFbmFibGUgKi8KLSNkZWZpbmUJV05SCQkJMHgwMDAyCS8qIENoYW5uZWwgRGlyZWN0aW9uIChXL1IqKSAqLwotI2RlZmluZQlXRFNJWkVfOAkweDAwMDAJLyogV29yZAlTaXplIDggYml0cyAqLwotI2RlZmluZQlXRFNJWkVfMTYJMHgwMDA0CS8qIFdvcmQJU2l6ZSAxNgliaXRzICovCi0jZGVmaW5lCVdEU0laRV8zMgkweDAwMDgJLyogV29yZAlTaXplIDMyCWJpdHMgKi8KLSNkZWZpbmUJRE1BMkQJCTB4MDAxMAkvKiAyRC8xRCogTW9kZSAqLwotI2RlZmluZQlSRVNUQVJUCQkweDAwMjAJLyogUmVzdGFydCAqLwotI2RlZmluZQlESV9TRUwJCTB4MDA0MAkvKiBEYXRhCUludGVycnVwdCBTZWxlY3QgKi8KLSNkZWZpbmUJRElfRU4JCTB4MDA4MAkvKiBEYXRhCUludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUJTkRTSVpFCQkweDA5MDAJLyogTmV4dAlEZXNjcmlwdG9yIFNpemUgKi8KLSNkZWZpbmUJTkRTSVpFXzAJMHgwMDAwCS8qIE5leHQJRGVzY3JpcHRvciBTaXplCT0gMCAoU3RvcC9BdXRvYnVmZmVyKSAqLwotI2RlZmluZQlORFNJWkVfMQkweDAxMDAJLyogTmV4dAlEZXNjcmlwdG9yIFNpemUJPSAxICovCi0jZGVmaW5lCU5EU0laRV8yCTB4MDIwMAkvKiBOZXh0CURlc2NyaXB0b3IgU2l6ZQk9IDIgKi8KLSNkZWZpbmUJTkRTSVpFXzMJMHgwMzAwCS8qIE5leHQJRGVzY3JpcHRvciBTaXplCT0gMyAqLwotI2RlZmluZQlORFNJWkVfNAkweDA0MDAJLyogTmV4dAlEZXNjcmlwdG9yIFNpemUJPSA0ICovCi0jZGVmaW5lCU5EU0laRV81CTB4MDUwMAkvKiBOZXh0CURlc2NyaXB0b3IgU2l6ZQk9IDUgKi8KLSNkZWZpbmUJTkRTSVpFXzYJMHgwNjAwCS8qIE5leHQJRGVzY3JpcHRvciBTaXplCT0gNiAqLwotI2RlZmluZQlORFNJWkVfNwkweDA3MDAJLyogTmV4dAlEZXNjcmlwdG9yIFNpemUJPSA3ICovCi0jZGVmaW5lCU5EU0laRV84CTB4MDgwMAkvKiBOZXh0CURlc2NyaXB0b3IgU2l6ZQk9IDggKi8KLSNkZWZpbmUJTkRTSVpFXzkJMHgwOTAwCS8qIE5leHQJRGVzY3JpcHRvciBTaXplCT0gOSAqLwotCi0jZGVmaW5lIERNQUZMT1cJCQkweDcwMDAJLyogRmxvdyBDb250cm9sICovCi0jZGVmaW5lIERNQUZMT1dfU1RPUAkJMHgwMDAwCS8qIFN0b3AgTW9kZSAqLwotI2RlZmluZSBETUFGTE9XX0FVVE8JCTB4MTAwMAkvKiBBdXRvYnVmZmVyIE1vZGUgKi8KLSNkZWZpbmUgRE1BRkxPV19BUlJBWQkJMHg0MDAwCS8qIERlc2NyaXB0b3IgQXJyYXkgTW9kZSAqLwotI2RlZmluZSBETUFGTE9XX1NNQUxMCQkweDYwMDAJLyogU21hbGwgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUgKi8KLSNkZWZpbmUgRE1BRkxPV19MQVJHRQkJMHg3MDAwCS8qIExhcmdlIE1vZGVsIERlc2NyaXB0b3IgTGlzdCBNb2RlICovCi0KLSNkZWZpbmUJRE1BRU5fUAkJMHgwCQkvKiBDaGFubmVsIEVuYWJsZSAqLwotI2RlZmluZQlXTlJfUAkJMHgxCQkvKiBDaGFubmVsIERpcmVjdGlvbiAoVy9SKikgKi8KLSNkZWZpbmUJRE1BMkRfUAkJMHg0CQkvKiAyRC8xRCogTW9kZSAqLwotI2RlZmluZQlSRVNUQVJUX1AJMHg1CQkvKiBSZXN0YXJ0ICovCi0jZGVmaW5lCURJX1NFTF9QCTB4NgkJLyogRGF0YQlJbnRlcnJ1cHQgU2VsZWN0ICovCi0jZGVmaW5lCURJX0VOX1AJCTB4NwkJLyogRGF0YQlJbnRlcnJ1cHQgRW5hYmxlICovCi0KLS8qIERNQXhfSVJRX1NUQVRVUywgTURNQV95eV9JUlFfU1RBVFVTIE1hc2tzICovCi0jZGVmaW5lCURNQV9ET05FCTB4MDAwMQkvKiBETUEgRG9uZSBJbmRpY2F0b3IgKi8KLSNkZWZpbmUJRE1BX0VSUgkJMHgwMDAyCS8qIERNQSBFcnJvciBJbmRpY2F0b3IgKi8KLSNkZWZpbmUJREZFVENICQkweDAwMDQJLyogRGVzY3JpcHRvciBGZXRjaCBJbmRpY2F0b3IgKi8KLSNkZWZpbmUJRE1BX1JVTgkJMHgwMDA4CS8qIERNQSBSdW5uaW5nIEluZGljYXRvciAqLwotCi0jZGVmaW5lCURNQV9ET05FX1AJMHgwCQkvKiBETUEgRG9uZSBJbmRpY2F0b3IgKi8KLSNkZWZpbmUJRE1BX0VSUl9QCTB4MQkJLyogRE1BIEVycm9yIEluZGljYXRvciAqLwotI2RlZmluZQlERkVUQ0hfUAkweDIJCS8qIERlc2NyaXB0b3IgRmV0Y2ggSW5kaWNhdG9yICovCi0jZGVmaW5lCURNQV9SVU5fUAkweDMJCS8qIERNQSBSdW5uaW5nIEluZGljYXRvciAqLwogCiAvKiBETUF4X1BFUklQSEVSQUxfTUFQLAlNRE1BX3l5X1BFUklQSEVSQUxfTUFQIE1hc2tzICovCiAKQEAgLTI2MjUsMTAxOSArMjQxOSw2IEBACiAjZGVmaW5lCVJDVl9GVUxMCTB4MDAwQwkJLyoJCVJlY2VpdmUJRklGTyBGdWxsICgyIEJ5dGVzIFRvIFJlYWQpICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBNWFZSCU1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1YVlJfQ09ORklHIE1hc2tzICovCi0KLSNkZWZpbmUJTVhWUkVOCSAgMHgwMDAwMDAwMWx1Ci0jZGVmaW5lCU1NU00JICAweDAwMDAwMDAybHUKLSNkZWZpbmUJQUNUSVZFCSAgMHgwMDAwMDAwNGx1Ci0jZGVmaW5lCVNERUxBWQkgIDB4MDAwMDAwMDhsdQotI2RlZmluZQlOQ01SWEVOCSAgMHgwMDAwMDAxMGx1Ci0jZGVmaW5lCVJXUlJYRU4JICAweDAwMDAwMDIwbHUKLSNkZWZpbmUJTVRYRU4JICAweDAwMDAwMDQwbHUKLSNkZWZpbmUJTVRYT04JICAweDAwMDAwMDgwbHUgLypsZWdhY3kqLwotI2RlZmluZQlNVFhPTkIJICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJRVBBUklUWQkgIDB4MDAwMDAxMDBsdQotI2RlZmluZQlNU0IJICAweDAwMDAxRTAwbHUKLSNkZWZpbmUJQVBSWEVOCSAgMHgwMDAwMjAwMGx1Ci0jZGVmaW5lCVdBS0VVUAkgIDB4MDAwMDQwMDBsdQotI2RlZmluZQlMTUVDSAkgIDB4MDAwMDgwMDBsdQotCi0jaWZkZWYgX01JU1JBX1JVTEVTCi0jZGVmaW5lCVNFVF9NU0IoeCkgICAgICgoKHgpJjB4RnUpIDw8IDB4OSkKLSNlbHNlCi0jZGVmaW5lCVNFVF9NU0IoeCkgICAgICgoKHgpJjB4RikgPDwgMHg5KQotI2VuZGlmIC8qIF9NSVNSQV9SVUxFUyAqLwotCi0KLS8qIE1YVlJfUExMX0NUTF8wIE1hc2tzICovCi0KLSNkZWZpbmUJTVhUQUxDRU4gIDB4MDAwMDAwMDFsdQotI2RlZmluZQlNWFRBTEZFTiAgMHgwMDAwMDAwMmx1Ci0jZGVmaW5lCU1QTExNUwkgIDB4MDAwMDAwMDhsdQotI2RlZmluZQlNWFRBTE1VTCAgMHgwMDAwMDAzMGx1Ci0jZGVmaW5lCU1QTExFTgkgIDB4MDAwMDAwNDBsdQotI2RlZmluZQlNUExMRU4wCSAgMHgwMDAwMDA0MGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNUExMRU4xCSAgMHgwMDAwMDA4MGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNTUNMS0VOCSAgMHgwMDAwMDEwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMICAweDAwMDAxRTAwbHUKLSNkZWZpbmUJTVBMTFJTVEIgIDB4MDAwMDIwMDBsdQotI2RlZmluZQlNUExMUlNUQjAgMHgwMDAwMjAwMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNUExMUlNUQjEgMHgwMDAwNDAwMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNQkNMS0VOCSAgMHgwMDAxMDAwMGx1Ci0jZGVmaW5lCU1CQ0xLRElWICAweDAwMUUwMDAwbHUKLSNkZWZpbmUJTVBMTENEUgkgIDB4MDAyMDAwMDBsdQotI2RlZmluZQlNUExMQ0RSMCAgMHgwMDIwMDAwMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNUExMQ0RSMSAgMHgwMDQwMDAwMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlJTlZSWAkgIDB4MDA4MDAwMDBsdQotI2RlZmluZQlNRlNFTgkgIDB4MDEwMDAwMDBsdQotI2RlZmluZQlNRlNESVYJICAweDFFMDAwMDAwbHUKLSNkZWZpbmUJTUZTU0VMCSAgMHg2MDAwMDAwMGx1Ci0jZGVmaW5lCU1GU1NZTkMJICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlNWFRBTE1VTF8yNTZGUwkgMHgwMDAwMDAwMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNWFRBTE1VTF8zODRGUwkgMHgwMDAwMDAxMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNWFRBTE1VTF81MTJGUwkgMHgwMDAwMDAyMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlNWFRBTE1VTF8xMDI0RlMJIDB4MDAwMDAwMzBsdQotCi0jZGVmaW5lCU1NQ0xLTVVMXzEwMjRGUwkgMHgwMDAwMDAwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzUxMkZTCSAweDAwMDAwMjAwbHUKLSNkZWZpbmUJTU1DTEtNVUxfMjU2RlMJIDB4MDAwMDA0MDBsdQotI2RlZmluZQlNTUNMS01VTF8xMjhGUwkgMHgwMDAwMDYwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzY0RlMJIDB4MDAwMDA4MDBsdQotI2RlZmluZQlNTUNMS01VTF8zMkZTCSAweDAwMDAwQTAwbHUKLSNkZWZpbmUJTU1DTEtNVUxfMTZGUwkgMHgwMDAwMEMwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzhGUwkgMHgwMDAwMEUwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzRGUwkgMHgwMDAwMTAwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzJGUwkgMHgwMDAwMTIwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzFGUwkgMHgwMDAwMTQwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzE1MzZGUwkgMHgwMDAwMUEwMGx1Ci0jZGVmaW5lCU1NQ0xLTVVMXzc2OEZTCSAweDAwMDAxQzAwbHUKLSNkZWZpbmUJTU1DTEtNVUxfMzg0RlMJIDB4MDAwMDFFMDBsdQotCi0jZGVmaW5lCU1CQ0xLRElWX0RJVjIJIDB4MDAwMjAwMDBsdQotI2RlZmluZQlNQkNMS0RJVl9ESVY0CSAweDAwMDQwMDAwbHUKLSNkZWZpbmUJTUJDTEtESVZfRElWOAkgMHgwMDA2MDAwMGx1Ci0jZGVmaW5lCU1CQ0xLRElWX0RJVjE2CSAweDAwMDgwMDAwbHUKLSNkZWZpbmUJTUJDTEtESVZfRElWMzIJIDB4MDAwQTAwMDBsdQotI2RlZmluZQlNQkNMS0RJVl9ESVY2NAkgMHgwMDBDMDAwMGx1Ci0jZGVmaW5lCU1CQ0xLRElWX0RJVjEyOAkgMHgwMDBFMDAwMGx1Ci0jZGVmaW5lCU1CQ0xLRElWX0RJVjI1NgkgMHgwMDEwMDAwMGx1Ci0jZGVmaW5lCU1CQ0xLRElWX0RJVjUxMgkgMHgwMDEyMDAwMGx1Ci0jZGVmaW5lCU1CQ0xLRElWX0RJVjEwMjQgMHgwMDE0MDAwMGx1Ci0KLSNkZWZpbmUJTUZTRElWX0RJVjIJIDB4MDIwMDAwMDBsdQotI2RlZmluZQlNRlNESVZfRElWNAkgMHgwNDAwMDAwMGx1Ci0jZGVmaW5lCU1GU0RJVl9ESVY4CSAweDA2MDAwMDAwbHUKLSNkZWZpbmUJTUZTRElWX0RJVjE2CSAweDA4MDAwMDAwbHUKLSNkZWZpbmUJTUZTRElWX0RJVjMyCSAweDBBMDAwMDAwbHUKLSNkZWZpbmUJTUZTRElWX0RJVjY0CSAweDBDMDAwMDAwbHUKLSNkZWZpbmUJTUZTRElWX0RJVjEyOAkgMHgwRTAwMDAwMGx1Ci0jZGVmaW5lCU1GU0RJVl9ESVYyNTYJIDB4MTAwMDAwMDBsdQotI2RlZmluZQlNRlNESVZfRElWNTEyCSAweDEyMDAwMDAwbHUKLSNkZWZpbmUJTUZTRElWX0RJVjEwMjQJIDB4MTQwMDAwMDBsdQotCi0jZGVmaW5lCU1GU1NFTF9DTE9DSwkgMHgwMDAwMDAwMGx1Ci0jZGVmaW5lCU1GU1NFTF9QVUxTRV9ISQkgMHgyMDAwMDAwMGx1Ci0jZGVmaW5lCU1GU1NFTF9QVUxTRV9MTwkgMHg0MDAwMDAwMGx1Ci0KLQotLyogTVhWUl9QTExfQ1RMXzEgTWFza3MgKi8KLQotI2RlZmluZQlNU1RPCSAgIDB4MDAwMDAwMDFsdQotI2RlZmluZQlNU1RPMAkgICAweDAwMDAwMDAxbHUJLyogbGVnYWN5ICovCi0jZGVmaW5lCU1IT0dHRAkgICAweDAwMDAwMDA0bHUKLSNkZWZpbmUJTUhPR0dEMAkgICAweDAwMDAwMDA0bHUJLyogbGVnYWN5ICovCi0jZGVmaW5lCU1IT0dHRDEJICAgMHgwMDAwMDAwOGx1CS8qIGxlZ2FjeSAqLwotI2RlZmluZQlNU0hBUEVSRU4gIDB4MDAwMDAwMTBsdQotI2RlZmluZQlNU0hBUEVSRU4wIDB4MDAwMDAwMTBsdQkvKiBsZWdhY3kgKi8KLSNkZWZpbmUJTVNIQVBFUkVOMSAweDAwMDAwMDIwbHUJLyogbGVnYWN5ICovCi0jZGVmaW5lCU1QTExDTlRFTiAgMHgwMDAwODAwMGx1Ci0jZGVmaW5lCU1QTExDTlQJICAgMHhGRkZGMDAwMGx1Ci0KLSNpZmRlZiBfTUlTUkFfUlVMRVMKLSNkZWZpbmUJU0VUX01QTExDTlQoeCkJICAgKCgoeCkmMHhGRkZGdSkgPDwgMHgxMCkKLSNlbHNlCi0jZGVmaW5lCVNFVF9NUExMQ05UKHgpCSAgICgoKHgpJjB4RkZGRikgPDwgMHgxMCkKLSNlbmRpZiAvKiBfTUlTUkFfUlVMRVMgKi8KLQotCi0vKiBNWFZSX1BMTF9DVExfMiBNYXNrcyAqLwotCi0jZGVmaW5lCU1TSEFQRVJTRUwgMHgwMDAwMDAwN2x1Ci0jZGVmaW5lCU1DUFNFTAkgICAweDAwMDAwMEUwbHUKLQotLyogTVhWUl9JTlRfU1RBVF8wIE1hc2tzICovCi0KLSNkZWZpbmUJTkkyQSAgMHgwMDAwMDAwMWx1Ci0jZGVmaW5lCU5BMkkgIDB4MDAwMDAwMDJsdQotI2RlZmluZQlTQlUyTCAweDAwMDAwMDA0bHUKLSNkZWZpbmUJU0JMMlUgMHgwMDAwMDAwOGx1Ci0jZGVmaW5lCVBSVSAgIDB4MDAwMDAwMTBsdQotI2RlZmluZQlNUFJVICAweDAwMDAwMDIwbHUKLSNkZWZpbmUJRFJVICAgMHgwMDAwMDA0MGx1Ci0jZGVmaW5lCU1EUlUgIDB4MDAwMDAwODBsdQotI2RlZmluZQlTQlUgICAweDAwMDAwMTAwbHUKLSNkZWZpbmUJQVRVICAgMHgwMDAwMDIwMGx1Ci0jZGVmaW5lCUZDWjAgIDB4MDAwMDA0MDBsdQotI2RlZmluZQlGQ1oxICAweDAwMDAwODAwbHUKLSNkZWZpbmUJUEVSUiAgMHgwMDAwMTAwMGx1Ci0jZGVmaW5lCU1IMkwgIDB4MDAwMDIwMDBsdQotI2RlZmluZQlNTDJIICAweDAwMDA0MDAwbHUKLSNkZWZpbmUJV1VQICAgMHgwMDAwODAwMGx1Ci0jZGVmaW5lCUZVMkwgIDB4MDAwMTAwMDBsdQotI2RlZmluZQlGTDJVICAweDAwMDIwMDAwbHUKLSNkZWZpbmUJQlUyTCAgMHgwMDA0MDAwMGx1Ci0jZGVmaW5lCUJMMlUgIDB4MDAwODAwMDBsdQotI2RlZmluZQlQQ1ogICAweDAwNDAwMDAwbHUKLSNkZWZpbmUJRkVSUiAgMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCUNNUiAgIDB4MDEwMDAwMDBsdQotI2RlZmluZQlDTVJPRiAweDAyMDAwMDAwbHUKLSNkZWZpbmUJQ01UUyAgMHgwNDAwMDAwMGx1Ci0jZGVmaW5lCUNNVEMgIDB4MDgwMDAwMDBsdQotI2RlZmluZQlSV1JDICAweDEwMDAwMDAwbHUKLSNkZWZpbmUJQkNaICAgMHgyMDAwMDAwMGx1Ci0jZGVmaW5lCUJNRVJSIDB4NDAwMDAwMDBsdQotI2RlZmluZQlERVJSICAweDgwMDAwMDAwbHUKLQotCi0vKiBNWFZSX0lOVF9FTl8wIE1hc2tzICovCi0KLSNkZWZpbmUJTkkyQUVOCU5JMkEKLSNkZWZpbmUJTkEySUVOCU5BMkkKLSNkZWZpbmUJU0JVMkxFTglTQlUyTAotI2RlZmluZQlTQkwyVUVOCVNCTDJVCi0jZGVmaW5lCVBSVUVOCVBSVQotI2RlZmluZQlNUFJVRU4JTVBSVQotI2RlZmluZQlEUlVFTglEUlUKLSNkZWZpbmUJTURSVUVOCU1EUlUKLSNkZWZpbmUJU0JVRU4JU0JVCi0jZGVmaW5lCUFUVUVOCUFUVQotI2RlZmluZQlGQ1owRU4JRkNaMAotI2RlZmluZQlGQ1oxRU4JRkNaMQotI2RlZmluZQlQRVJSRU4JUEVSUgotI2RlZmluZQlNSDJMRU4JTUgyTAotI2RlZmluZQlNTDJIRU4JTUwySAotI2RlZmluZQlXVVBFTglXVVAKLSNkZWZpbmUJRlUyTEVOCUZVMkwKLSNkZWZpbmUJRkwyVUVOCUZMMlUKLSNkZWZpbmUJQlUyTEVOCUJVMkwKLSNkZWZpbmUJQkwyVUVOCUJMMlUKLSNkZWZpbmUJUENaRU4JUENaCi0jZGVmaW5lCUZFUlJFTglGRVJSCi0jZGVmaW5lCUNNUkVOCUNNUgotI2RlZmluZQlDTVJPRkVOCUNNUk9GCi0jZGVmaW5lCUNNVFNFTglDTVRTCi0jZGVmaW5lCUNNVENFTglDTVRDCi0jZGVmaW5lCVJXUkNFTglSV1JDCi0jZGVmaW5lCUJDWkVOCUJDWgotI2RlZmluZQlCTUVSUkVOCUJNRVJSCi0jZGVmaW5lCURFUlJFTglERVJSCi0KLQotLyogTVhWUl9JTlRfU1RBVF8xIE1hc2tzICovCi0KLSNkZWZpbmUJQVBSICAgMHgwMDAwMDAwNGx1Ci0jZGVmaW5lCUFQUk9GIDB4MDAwMDAwMDhsdQotI2RlZmluZQlBUFRTICAweDAwMDAwMDQwbHUKLSNkZWZpbmUJQVBUQyAgMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCUFQUkNFIDB4MDAwMDA0MDBsdQotI2RlZmluZQlBUFJQRSAweDAwMDAwODAwbHUKLQotI2RlZmluZQlIRE9ORTAgMHgwMDAwMDAwMWx1Ci0jZGVmaW5lCURPTkUwICAweDAwMDAwMDAybHUKLSNkZWZpbmUJSERPTkUxIDB4MDAwMDAwMTBsdQotI2RlZmluZQlET05FMSAgMHgwMDAwMDAyMGx1Ci0jZGVmaW5lCUhET05FMiAweDAwMDAwMTAwbHUKLSNkZWZpbmUJRE9ORTIgIDB4MDAwMDAyMDBsdQotI2RlZmluZQlIRE9ORTMgMHgwMDAwMTAwMGx1Ci0jZGVmaW5lCURPTkUzICAweDAwMDAyMDAwbHUKLSNkZWZpbmUJSERPTkU0IDB4MDAwMTAwMDBsdQotI2RlZmluZQlET05FNCAgMHgwMDAyMDAwMGx1Ci0jZGVmaW5lCUhET05FNSAweDAwMTAwMDAwbHUKLSNkZWZpbmUJRE9ORTUgIDB4MDAyMDAwMDBsdQotI2RlZmluZQlIRE9ORTYgMHgwMTAwMDAwMGx1Ci0jZGVmaW5lCURPTkU2ICAweDAyMDAwMDAwbHUKLSNkZWZpbmUJSERPTkU3IDB4MTAwMDAwMDBsdQotI2RlZmluZQlET05FNyAgMHgyMDAwMDAwMGx1Ci0KLSNkZWZpbmUJRE9ORVgoeCkgKDB4MDAwMDAwMDIgPDwJKDQgKiAoeCkpKQotI2RlZmluZQlIRE9ORVgoeCkgKDB4MDAwMDAwMDEgPDwgKDQgKiAoeCkpKQotCi0KLS8qIE1YVlJfSU5UX0VOXzEgTWFza3MgKi8KLQotI2RlZmluZQlBUFJFTglBUFIKLSNkZWZpbmUJQVBST0ZFTglBUFJPRgotI2RlZmluZQlBUFRTRU4JQVBUUwotI2RlZmluZQlBUFRDRU4JQVBUQwotI2RlZmluZQlBUFJDRUVOCUFQUkNFCi0jZGVmaW5lCUFQUlBFRU4JQVBSUEUKLQotI2RlZmluZQlIRE9ORUVOMCBIRE9ORTAKLSNkZWZpbmUJRE9ORUVOMAkgRE9ORTAKLSNkZWZpbmUJSERPTkVFTjEgSERPTkUxCi0jZGVmaW5lCURPTkVFTjEJIERPTkUxCi0jZGVmaW5lCUhET05FRU4yIEhET05FMgotI2RlZmluZQlET05FRU4yCSBET05FMgotI2RlZmluZQlIRE9ORUVOMyBIRE9ORTMKLSNkZWZpbmUJRE9ORUVOMwkgRE9ORTMKLSNkZWZpbmUJSERPTkVFTjQgSERPTkU0Ci0jZGVmaW5lCURPTkVFTjQJIERPTkU0Ci0jZGVmaW5lCUhET05FRU41IEhET05FNQotI2RlZmluZQlET05FRU41CSBET05FNQotI2RlZmluZQlIRE9ORUVONiBIRE9ORTYKLSNkZWZpbmUJRE9ORUVONgkgRE9ORTYKLSNkZWZpbmUJSERPTkVFTjcgSERPTkU3Ci0jZGVmaW5lCURPTkVFTjcJIERPTkU3Ci0KLSNkZWZpbmUJRE9ORUVOWCh4KSAoMHgwMDAwMDAwMiA8PCAoNCAqICh4KSkpCi0jZGVmaW5lCUhET05FRU5YKHgpICgweDAwMDAwMDAxCTw8ICg0ICoJKHgpKSkKLQotCi0vKiBNWFZSX1NUQVRFXzAJTWFza3MgKi8KLQotI2RlZmluZQlOQUNUCSAweDAwMDAwMDAxbHUKLSNkZWZpbmUJU0JMT0NLCSAweDAwMDAwMDAybHUKLSNkZWZpbmUJUEZETE9DSwkgMHgwMDAwMDAwNGx1Ci0jZGVmaW5lCVBGRExPQ0swIDB4MDAwMDAwMDRsdSAvKiBsZWdhY3kgKi8KLSNkZWZpbmUJUERECSAweDAwMDAwMDA4bHUKLSNkZWZpbmUJUEREMAkgMHgwMDAwMDAwOGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlQVkNPCSAweDAwMDAwMDEwbHUKLSNkZWZpbmUJUFZDTzAJIDB4MDAwMDAwMTBsdSAvKiBsZWdhY3kgKi8KLSNkZWZpbmUJUEZETE9DSzEgMHgwMDAwMDAyMGx1IC8qIGxlZ2FjeSAqLwotI2RlZmluZQlQREQxCSAweDAwMDAwMDQwbHUgLyogbGVnYWN5ICovCi0jZGVmaW5lCVBWQ08xCSAweDAwMDAwMDgwbHUgLyogbGVnYWN5ICovCi0jZGVmaW5lCUFQQlNZCSAweDAwMDAwMTAwbHUKLSNkZWZpbmUJQVBBUkIJIDB4MDAwMDAyMDBsdQotI2RlZmluZQlBUFRYCSAweDAwMDAwNDAwbHUKLSNkZWZpbmUJQVBSWAkgMHgwMDAwMDgwMGx1Ci0jZGVmaW5lCUNNQlNZCSAweDAwMDAxMDAwbHUKLSNkZWZpbmUJQ01BUkIJIDB4MDAwMDIwMDBsdQotI2RlZmluZQlDTVRYCSAweDAwMDA0MDAwbHUKLSNkZWZpbmUJQ01SWAkgMHgwMDAwODAwMGx1Ci0jZGVmaW5lCU1SWE9OQgkgMHgwMDAxMDAwMGx1Ci0jZGVmaW5lCVJHU0lQCSAweDAwMDIwMDAwbHUKLSNkZWZpbmUJREFMSVAJIDB4MDAwNDAwMDBsdQotI2RlZmluZQlBTElQCSAweDAwMDgwMDAwbHUKLSNkZWZpbmUJUlJESVAJIDB4MDAxMDAwMDBsdQotI2RlZmluZQlSV1JJUAkgMHgwMDIwMDAwMGx1Ci0jZGVmaW5lCUZMT0NLCSAweDAwNDAwMDAwbHUKLSNkZWZpbmUJQkxPQ0sJIDB4MDA4MDAwMDBsdQotI2RlZmluZQlSU0IJIDB4MEYwMDAwMDBsdQotI2RlZmluZQlERVJSTlVNCSAweEYwMDAwMDAwbHUKLQotCi0vKiBNWFZSX1NUQVRFXzEJTWFza3MgKi8KLQotI2RlZmluZQlTVFhOVU1CCSAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUJU1JYTlVNQgkgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lCUFQQ09OVAkgICAgMHgwMDAwMDEwMGx1Ci0jZGVmaW5lCURNQUFDVElWRVggIDB4MDBGRjAwMDBsdQotI2RlZmluZQlETUFBQ1RJVkUwICAweDAwMDEwMDAwbHUKLSNkZWZpbmUJRE1BQUNUSVZFMSAgMHgwMDAyMDAwMGx1Ci0jZGVmaW5lCURNQUFDVElWRTIgIDB4MDAwNDAwMDBsdQotI2RlZmluZQlETUFBQ1RJVkUzICAweDAwMDgwMDAwbHUKLSNkZWZpbmUJRE1BQUNUSVZFNCAgMHgwMDEwMDAwMGx1Ci0jZGVmaW5lCURNQUFDVElWRTUgIDB4MDAyMDAwMDBsdQotI2RlZmluZQlETUFBQ1RJVkU2ICAweDAwNDAwMDAwbHUKLSNkZWZpbmUJRE1BQUNUSVZFNyAgMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCURNQVBNRU5YICAgIDB4RkYwMDAwMDBsdQotI2RlZmluZQlETUFQTUVOMCAgICAweDAxMDAwMDAwbHUKLSNkZWZpbmUJRE1BUE1FTjEgICAgMHgwMjAwMDAwMGx1Ci0jZGVmaW5lCURNQVBNRU4yICAgIDB4MDQwMDAwMDBsdQotI2RlZmluZQlETUFQTUVOMyAgICAweDA4MDAwMDAwbHUKLSNkZWZpbmUJRE1BUE1FTjQgICAgMHgxMDAwMDAwMGx1Ci0jZGVmaW5lCURNQVBNRU41ICAgIDB4MjAwMDAwMDBsdQotI2RlZmluZQlETUFQTUVONiAgICAweDQwMDAwMDAwbHUKLSNkZWZpbmUJRE1BUE1FTjcgICAgMHg4MDAwMDAwMGx1Ci0KLQotLyogTVhWUl9QT1NJVElPTiBNYXNrcyAqLwotCi0jZGVmaW5lCVBWQUxJRAkgICAgIDB4ODAwMAotI2RlZmluZQlQT1NJVElPTiAgICAgMHgwMDNGCi0KLQotLyogTVhWUl9NQVhfUE9TSVRJT04gTWFza3MgKi8KLQotI2RlZmluZQlNUFZBTElECSAgICAgMHg4MDAwCi0jZGVmaW5lCU1QT1NJVElPTiAgICAweDAwM0YKLQotCi0vKiBNWFZSX0RFTEFZIE1hc2tzICovCi0KLSNkZWZpbmUJRFZBTElECSAgICAgMHg4MDAwCi0jZGVmaW5lCURFTEFZCSAgICAgMHgwMDNGCi0KLQotLyogTVhWUl9NQVhfREVMQVkgTWFza3MgKi8KLQotI2RlZmluZQlNRFZBTElECSAgICAgMHg4MDAwCi0jZGVmaW5lCU1ERUxBWQkgICAgIDB4MDAzRgotCi0KLS8qIE1YVlJfTEFERFIgTWFza3MgKi8KLQotI2RlZmluZQlMVkFMSUQJICAgICAweDgwMDAwMDAwbHUKLSNkZWZpbmUJTEFERFIJICAgICAweDAwMDBGRkZGbHUKLQotCi0vKiBNWFZSX0dBRERSIE1hc2tzICovCi0KLSNkZWZpbmUJR1ZBTElECSAgICAgMHg4MDAwCi0jZGVmaW5lCUdBRERSTAkgICAgIDB4MDBGRgotCi0KLS8qIE1YVlJfQUFERFIgTWFza3MgKi8KLQotI2RlZmluZQlBVkFMSUQJICAgICAweDgwMDAwMDAwbHUKLSNkZWZpbmUJQUFERFIJICAgICAweDAwMDBGRkZGbHUKLQotCi0vKiBNWFZSX0FMTE9DXzAJTWFza3MgKi8KLQotI2RlZmluZQlDSVUwCSAgICAgMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCUNJVTEJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMgkgICAgIDB4MDA4MDAwMDBsdQotI2RlZmluZQlDSVUzCSAgICAgMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJQ0wwCSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMQkgICAgIDB4MDAwMDdGMDBsdQotI2RlZmluZQlDTDIJICAgICAweDAwN0YwMDAwbHUKLSNkZWZpbmUJQ0wzCSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ18xCU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVNAkgICAgIDB4MDAwMDAwODBsdQotI2RlZmluZQlDSVU1CSAgICAgMHgwMDAwODAwMGx1Ci0jZGVmaW5lCUNJVTYJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVNwkgICAgIDB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCUNMNAkgICAgIDB4MDAwMDAwN0ZsdQotI2RlZmluZQlDTDUJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0w2CSAgICAgMHgwMDdGMDAwMGx1Ci0jZGVmaW5lCUNMNwkgICAgIDB4N0YwMDAwMDBsdQotCi0KLS8qIE1YVlJfQUxMT0NfMglNYXNrcyAqLwotCi0jZGVmaW5lCUNJVTgJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVOQkgICAgIDB4MDAwMDgwMDBsdQotI2RlZmluZQlDSVUxMAkgICAgIDB4MDA4MDAwMDBsdQotI2RlZmluZQlDSVUxMQkgICAgIDB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCUNMOAkgICAgIDB4MDAwMDAwN0ZsdQotI2RlZmluZQlDTDkJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wxMAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDExCSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ18zCU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMTIJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMTMJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMTQJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMTUJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDEyCSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMTMJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wxNAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDE1CSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ180CU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMTYJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMTcJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMTgJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMTkJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDE2CSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMTcJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wxOAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDE5CSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ181CU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMjAJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMjEJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMjIJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMjMJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDIwCSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMjEJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wyMgkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDIzCSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ182CU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMjQJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMjUJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMjYJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMjcJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDI0CSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMjUJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wyNgkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDI3CSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ183CU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMjgJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMjkJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMzAJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMzEJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDI4CSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMjkJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wzMAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDMxCSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ184CU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMzIJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMzMJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMzQJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMzUJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDMyCSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMzMJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wzNAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDM1CSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ185CU1hc2tzICovCi0KLSNkZWZpbmUJQ0lVMzYJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVMzcJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVMzgJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVMzkJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDM2CSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMMzcJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0wzOAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDM5CSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ18xMCBNYXNrcyAqLwotCi0jZGVmaW5lCUNJVTQwCSAgICAgMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCUNJVTQxCSAgICAgMHgwMDAwODAwMGx1Ci0jZGVmaW5lCUNJVTQyCSAgICAgMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCUNJVTQzCSAgICAgMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJQ0w0MAkgICAgIDB4MDAwMDAwN0ZsdQotI2RlZmluZQlDTDQxCSAgICAgMHgwMDAwN0YwMGx1Ci0jZGVmaW5lCUNMNDIJICAgICAweDAwN0YwMDAwbHUKLSNkZWZpbmUJQ0w0MwkgICAgIDB4N0YwMDAwMDBsdQotCi0KLS8qIE1YVlJfQUxMT0NfMTEgTWFza3MgKi8KLQotI2RlZmluZQlDSVU0NAkgICAgIDB4MDAwMDAwODBsdQotI2RlZmluZQlDSVU0NQkgICAgIDB4MDAwMDgwMDBsdQotI2RlZmluZQlDSVU0NgkgICAgIDB4MDA4MDAwMDBsdQotI2RlZmluZQlDSVU0NwkgICAgIDB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCUNMNDQJICAgICAweDAwMDAwMDdGbHUKLSNkZWZpbmUJQ0w0NQkgICAgIDB4MDAwMDdGMDBsdQotI2RlZmluZQlDTDQ2CSAgICAgMHgwMDdGMDAwMGx1Ci0jZGVmaW5lCUNMNDcJICAgICAweDdGMDAwMDAwbHUKLQotCi0vKiBNWFZSX0FMTE9DXzEyIE1hc2tzICovCi0KLSNkZWZpbmUJQ0lVNDgJICAgICAweDAwMDAwMDgwbHUKLSNkZWZpbmUJQ0lVNDkJICAgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQ0lVNTAJICAgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ0lVNTEJICAgICAweDgwMDAwMDAwbHUKLQotI2RlZmluZQlDTDQ4CSAgICAgMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCUNMNDkJICAgICAweDAwMDA3RjAwbHUKLSNkZWZpbmUJQ0w1MAkgICAgIDB4MDA3RjAwMDBsdQotI2RlZmluZQlDTDUxCSAgICAgMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9BTExPQ18xMyBNYXNrcyAqLwotCi0jZGVmaW5lCUNJVTUyCSAgICAgMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCUNJVTUzCSAgICAgMHgwMDAwODAwMGx1Ci0jZGVmaW5lCUNJVTU0CSAgICAgMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCUNJVTU1CSAgICAgMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJQ0w1MgkgICAgIDB4MDAwMDAwN0ZsdQotI2RlZmluZQlDTDUzCSAgICAgMHgwMDAwN0YwMGx1Ci0jZGVmaW5lCUNMNTQJICAgICAweDAwN0YwMDAwbHUKLSNkZWZpbmUJQ0w1NQkgICAgIDB4N0YwMDAwMDBsdQotCi0KLS8qIE1YVlJfQUxMT0NfMTQgTWFza3MgKi8KLQotI2RlZmluZQlDSVU1NgkgICAgIDB4MDAwMDAwODBsdQotI2RlZmluZQlDSVU1NwkgICAgIDB4MDAwMDgwMDBsdQotI2RlZmluZQlDSVU1OAkgICAgIDB4MDA4MDAwMDBsdQotI2RlZmluZQlDSVU1OQkgICAgIDB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCUNMNTYJICAgICAweDAwMDAwMDdGbHUKLSNkZWZpbmUJQ0w1NwkgICAgIDB4MDAwMDdGMDBsdQotI2RlZmluZQlDTDU4CSAgICAgMHgwMDdGMDAwMGx1Ci0jZGVmaW5lCUNMNTkJICAgICAweDdGMDAwMDAwbHUKLQotCi0vKiBNWFZSX1NZTkNfTENIQU5fMCBNYXNrcyAqLwotCi0jZGVmaW5lCUxDSEFOUEMwICAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUJTENIQU5QQzEgICAgIDB4MDAwMDAwRjBsdQotI2RlZmluZQlMQ0hBTlBDMiAgICAgMHgwMDAwMEYwMGx1Ci0jZGVmaW5lCUxDSEFOUEMzICAgICAweDAwMDBGMDAwbHUKLSNkZWZpbmUJTENIQU5QQzQgICAgIDB4MDAwRjAwMDBsdQotI2RlZmluZQlMQ0hBTlBDNSAgICAgMHgwMEYwMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEM2ICAgICAweDBGMDAwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzcgICAgIDB4RjAwMDAwMDBsdQotCi0KLS8qIE1YVlJfU1lOQ19MQ0hBTl8xIE1hc2tzICovCi0KLSNkZWZpbmUJTENIQU5QQzggICAgIDB4MDAwMDAwMEZsdQotI2RlZmluZQlMQ0hBTlBDOSAgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lCUxDSEFOUEMxMCAgICAweDAwMDAwRjAwbHUKLSNkZWZpbmUJTENIQU5QQzExICAgIDB4MDAwMEYwMDBsdQotI2RlZmluZQlMQ0hBTlBDMTIgICAgMHgwMDBGMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEMxMyAgICAweDAwRjAwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzE0ICAgIDB4MEYwMDAwMDBsdQotI2RlZmluZQlMQ0hBTlBDMTUgICAgMHhGMDAwMDAwMGx1Ci0KLQotLyogTVhWUl9TWU5DX0xDSEFOXzIgTWFza3MgKi8KLQotI2RlZmluZQlMQ0hBTlBDMTYgICAgMHgwMDAwMDAwRmx1Ci0jZGVmaW5lCUxDSEFOUEMxNyAgICAweDAwMDAwMEYwbHUKLSNkZWZpbmUJTENIQU5QQzE4ICAgIDB4MDAwMDBGMDBsdQotI2RlZmluZQlMQ0hBTlBDMTkgICAgMHgwMDAwRjAwMGx1Ci0jZGVmaW5lCUxDSEFOUEMyMCAgICAweDAwMEYwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzIxICAgIDB4MDBGMDAwMDBsdQotI2RlZmluZQlMQ0hBTlBDMjIgICAgMHgwRjAwMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEMyMyAgICAweEYwMDAwMDAwbHUKLQotCi0vKiBNWFZSX1NZTkNfTENIQU5fMyBNYXNrcyAqLwotCi0jZGVmaW5lCUxDSEFOUEMyNCAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUJTENIQU5QQzI1ICAgIDB4MDAwMDAwRjBsdQotI2RlZmluZQlMQ0hBTlBDMjYgICAgMHgwMDAwMEYwMGx1Ci0jZGVmaW5lCUxDSEFOUEMyNyAgICAweDAwMDBGMDAwbHUKLSNkZWZpbmUJTENIQU5QQzI4ICAgIDB4MDAwRjAwMDBsdQotI2RlZmluZQlMQ0hBTlBDMjkgICAgMHgwMEYwMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEMzMCAgICAweDBGMDAwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzMxICAgIDB4RjAwMDAwMDBsdQotCi0KLS8qIE1YVlJfU1lOQ19MQ0hBTl80IE1hc2tzICovCi0KLSNkZWZpbmUJTENIQU5QQzMyICAgIDB4MDAwMDAwMEZsdQotI2RlZmluZQlMQ0hBTlBDMzMgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lCUxDSEFOUEMzNCAgICAweDAwMDAwRjAwbHUKLSNkZWZpbmUJTENIQU5QQzM1ICAgIDB4MDAwMEYwMDBsdQotI2RlZmluZQlMQ0hBTlBDMzYgICAgMHgwMDBGMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEMzNyAgICAweDAwRjAwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzM4ICAgIDB4MEYwMDAwMDBsdQotI2RlZmluZQlMQ0hBTlBDMzkgICAgMHhGMDAwMDAwMGx1Ci0KLQotLyogTVhWUl9TWU5DX0xDSEFOXzUgTWFza3MgKi8KLQotI2RlZmluZQlMQ0hBTlBDNDAgICAgMHgwMDAwMDAwRmx1Ci0jZGVmaW5lCUxDSEFOUEM0MSAgICAweDAwMDAwMEYwbHUKLSNkZWZpbmUJTENIQU5QQzQyICAgIDB4MDAwMDBGMDBsdQotI2RlZmluZQlMQ0hBTlBDNDMgICAgMHgwMDAwRjAwMGx1Ci0jZGVmaW5lCUxDSEFOUEM0NCAgICAweDAwMEYwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzQ1ICAgIDB4MDBGMDAwMDBsdQotI2RlZmluZQlMQ0hBTlBDNDYgICAgMHgwRjAwMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEM0NyAgICAweEYwMDAwMDAwbHUKLQotCi0vKiBNWFZSX1NZTkNfTENIQU5fNiBNYXNrcyAqLwotCi0jZGVmaW5lCUxDSEFOUEM0OCAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUJTENIQU5QQzQ5ICAgIDB4MDAwMDAwRjBsdQotI2RlZmluZQlMQ0hBTlBDNTAgICAgMHgwMDAwMEYwMGx1Ci0jZGVmaW5lCUxDSEFOUEM1MSAgICAweDAwMDBGMDAwbHUKLSNkZWZpbmUJTENIQU5QQzUyICAgIDB4MDAwRjAwMDBsdQotI2RlZmluZQlMQ0hBTlBDNTMgICAgMHgwMEYwMDAwMGx1Ci0jZGVmaW5lCUxDSEFOUEM1NCAgICAweDBGMDAwMDAwbHUKLSNkZWZpbmUJTENIQU5QQzU1ICAgIDB4RjAwMDAwMDBsdQotCi0KLS8qIE1YVlJfU1lOQ19MQ0hBTl83IE1hc2tzICovCi0KLSNkZWZpbmUJTENIQU5QQzU2ICAgIDB4MDAwMDAwMEZsdQotI2RlZmluZQlMQ0hBTlBDNTcgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lCUxDSEFOUEM1OCAgICAweDAwMDAwRjAwbHUKLSNkZWZpbmUJTENIQU5QQzU5ICAgIDB4MDAwMEYwMDBsdQotCi0KLS8qIE1YVlJfRE1BeF9DT05GSUcgTWFza3MgKi8KLQotI2RlZmluZQlNRE1BRU4JICAgIDB4MDAwMDAwMDFsdQotI2RlZmluZQlERAkgICAgMHgwMDAwMDAwMmx1Ci0jZGVmaW5lCUxDSEFOCSAgICAweDAwMDAwM0MwbHUKLSNkZWZpbmUJQklUU1dBUEVOICAgMHgwMDAwMDQwMGx1Ci0jZGVmaW5lCUJZU1dBUEVOICAgIDB4MDAwMDA4MDBsdQotI2RlZmluZQlNRkxPVwkgICAgMHgwMDAwNzAwMGx1Ci0jZGVmaW5lCUZJWEVEUE0JICAgIDB4MDAwODAwMDBsdQotI2RlZmluZQlTVEFSVFBBVCAgICAweDAwMzAwMDAwbHUKLSNkZWZpbmUJU1RPUFBBVAkgICAgMHgwMEMwMDAwMGx1Ci0jZGVmaW5lCUNPVU5UUE9TICAgIDB4MUMwMDAwMDBsdQotCi0jZGVmaW5lCUREX1RYCSAgICAweDAwMDAwMDAwbHUKLSNkZWZpbmUJRERfUlgJICAgIDB4MDAwMDAwMDJsdQotCi0jZGVmaW5lCUxDSEFOXzAJICAgIDB4MDAwMDAwMDBsdQotI2RlZmluZQlMQ0hBTl8xCSAgICAweDAwMDAwMDQwbHUKLSNkZWZpbmUJTENIQU5fMgkgICAgMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCUxDSEFOXzMJICAgIDB4MDAwMDAwQzBsdQotI2RlZmluZQlMQ0hBTl80CSAgICAweDAwMDAwMTAwbHUKLSNkZWZpbmUJTENIQU5fNQkgICAgMHgwMDAwMDE0MGx1Ci0jZGVmaW5lCUxDSEFOXzYJICAgIDB4MDAwMDAxODBsdQotI2RlZmluZQlMQ0hBTl83CSAgICAweDAwMDAwMUMwbHUKLQotI2RlZmluZQlNRkxPV19TVE9QICAweDAwMDAwMDAwbHUKLSNkZWZpbmUJTUZMT1dfQVVUTyAgMHgwMDAwMTAwMGx1Ci0jZGVmaW5lCU1GTE9XX1BWQyAgIDB4MDAwMDIwMDBsdQotI2RlZmluZQlNRkxPV19QU1MgICAweDAwMDAzMDAwbHUKLSNkZWZpbmUJTUZMT1dfUEZDICAgMHgwMDAwNDAwMGx1Ci0KLSNkZWZpbmUJU1RBUlRQQVRfMCAgMHgwMDAwMDAwMGx1Ci0jZGVmaW5lCVNUQVJUUEFUXzEgIDB4MDAxMDAwMDBsdQotCi0jZGVmaW5lCVNUT1BQQVRfMCAgIDB4MDAwMDAwMDBsdQotI2RlZmluZQlTVE9QUEFUXzEgICAweDAwNDAwMDAwbHUKLQotI2RlZmluZQlDT1VOVFBPU18wICAweDAwMDAwMDAwbHUKLSNkZWZpbmUJQ09VTlRQT1NfMSAgMHgwNDAwMDAwMGx1Ci0jZGVmaW5lCUNPVU5UUE9TXzIgIDB4MDgwMDAwMDBsdQotI2RlZmluZQlDT1VOVFBPU18zICAweDBDMDAwMDAwbHUKLSNkZWZpbmUJQ09VTlRQT1NfNCAgMHgxMDAwMDAwMGx1Ci0jZGVmaW5lCUNPVU5UUE9TXzUgIDB4MTQwMDAwMDBsdQotI2RlZmluZQlDT1VOVFBPU182ICAweDE4MDAwMDAwbHUKLSNkZWZpbmUJQ09VTlRQT1NfNyAgMHgxQzAwMDAwMGx1Ci0KLQotLyogTVhWUl9BUF9DVEwgTWFza3MgKi8KLQotI2RlZmluZQlTVEFSVEFQCSAgIDB4MDAwMDAwMDFsdQotI2RlZmluZQlDQU5DRUxBUCAgIDB4MDAwMDAwMDJsdQotI2RlZmluZQlSRVNFVEFQCSAgIDB4MDAwMDAwMDRsdQotI2RlZmluZQlBUFJCRTAJICAgMHgwMDAwNDAwMGx1Ci0jZGVmaW5lCUFQUkJFMQkgICAweDAwMDA4MDAwbHUKLSNkZWZpbmUJQVBSQkVYCSAgIDB4MDAwMEMwMDBsdQotCi0KLS8qIE1YVlJfQ01fQ1RMIE1hc2tzICovCi0KLSNkZWZpbmUJU1RBUlRDTQkgICAweDAwMDAwMDAxbHUKLSNkZWZpbmUJQ0FOQ0VMQ00gICAweDAwMDAwMDAybHUKLSNkZWZpbmUJQ01SQkVYCSAgIDB4RkZGRjAwMDBsdQotI2RlZmluZQlDTVJCRTAJICAgMHgwMDAxMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMQkgICAweDAwMDIwMDAwbHUKLSNkZWZpbmUJQ01SQkUyCSAgIDB4MDAwNDAwMDBsdQotI2RlZmluZQlDTVJCRTMJICAgMHgwMDA4MDAwMGx1Ci0jZGVmaW5lCUNNUkJFNAkgICAweDAwMTAwMDAwbHUKLSNkZWZpbmUJQ01SQkU1CSAgIDB4MDAyMDAwMDBsdQotI2RlZmluZQlDTVJCRTYJICAgMHgwMDQwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFNwkgICAweDAwODAwMDAwbHUKLSNkZWZpbmUJQ01SQkU4CSAgIDB4MDEwMDAwMDBsdQotI2RlZmluZQlDTVJCRTkJICAgMHgwMjAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMTAJICAgMHgwNDAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMTEJICAgMHgwODAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMTIJICAgMHgxMDAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMTMJICAgMHgyMDAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMTQJICAgMHg0MDAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJFMTUJICAgMHg4MDAwMDAwMGx1Ci0KLQotLyogTVhWUl9QQVRfREFUQV94IE1hc2tzICovCi0KLSNkZWZpbmUJTUFUQ0hfREFUQV8wIDB4MDAwMDAwRkZsdQotI2RlZmluZQlNQVRDSF9EQVRBXzEgMHgwMDAwRkYwMGx1Ci0jZGVmaW5lCU1BVENIX0RBVEFfMiAweDAwRkYwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfREFUQV8zIDB4RkYwMDAwMDBsdQotCi0KLQotLyogTVhWUl9QQVRfRU5feCBNYXNrcyAqLwotCi0jZGVmaW5lCU1BVENIX0VOXzBfMCAweDAwMDAwMDAxbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMF8xIDB4MDAwMDAwMDJsdQotI2RlZmluZQlNQVRDSF9FTl8wXzIgMHgwMDAwMDAwNGx1Ci0jZGVmaW5lCU1BVENIX0VOXzBfMyAweDAwMDAwMDA4bHUKLSNkZWZpbmUJTUFUQ0hfRU5fMF80IDB4MDAwMDAwMTBsdQotI2RlZmluZQlNQVRDSF9FTl8wXzUgMHgwMDAwMDAyMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzBfNiAweDAwMDAwMDQwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMF83IDB4MDAwMDAwODBsdQotCi0jZGVmaW5lCU1BVENIX0VOXzFfMCAweDAwMDAwMTAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMV8xIDB4MDAwMDAyMDBsdQotI2RlZmluZQlNQVRDSF9FTl8xXzIgMHgwMDAwMDQwMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzFfMyAweDAwMDAwODAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMV80IDB4MDAwMDEwMDBsdQotI2RlZmluZQlNQVRDSF9FTl8xXzUgMHgwMDAwMjAwMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzFfNiAweDAwMDA0MDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMV83IDB4MDAwMDgwMDBsdQotCi0jZGVmaW5lCU1BVENIX0VOXzJfMCAweDAwMDEwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMl8xIDB4MDAwMjAwMDBsdQotI2RlZmluZQlNQVRDSF9FTl8yXzIgMHgwMDA0MDAwMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzJfMyAweDAwMDgwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMl80IDB4MDAxMDAwMDBsdQotI2RlZmluZQlNQVRDSF9FTl8yXzUgMHgwMDIwMDAwMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzJfNiAweDAwNDAwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fMl83IDB4MDA4MDAwMDBsdQotCi0jZGVmaW5lCU1BVENIX0VOXzNfMCAweDAxMDAwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fM18xIDB4MDIwMDAwMDBsdQotI2RlZmluZQlNQVRDSF9FTl8zXzIgMHgwNDAwMDAwMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzNfMyAweDA4MDAwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fM180IDB4MTAwMDAwMDBsdQotI2RlZmluZQlNQVRDSF9FTl8zXzUgMHgyMDAwMDAwMGx1Ci0jZGVmaW5lCU1BVENIX0VOXzNfNiAweDQwMDAwMDAwbHUKLSNkZWZpbmUJTUFUQ0hfRU5fM183IDB4ODAwMDAwMDBsdQotCi0KLS8qIE1YVlJfUk9VVElOR18wIE1hc2tzICovCi0KLSNkZWZpbmUJTVVURV9DSDAJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gxCTB4MDAwMDgwMDBsdQotI2RlZmluZQlNVVRFX0NIMgkweDAwODAwMDAwbHUKLSNkZWZpbmUJTVVURV9DSDMJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gwCQkweDAwMDAwMDdGbHUKLSNkZWZpbmUJVFhfQ0gxCQkweDAwMDA3RjAwbHUKLSNkZWZpbmUJVFhfQ0gyCQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gzCQkweDdGMDAwMDAwbHUKLQotCi0vKiBNWFZSX1JPVVRJTkdfMSBNYXNrcyAqLwotCi0jZGVmaW5lCU1VVEVfQ0g0CTB4MDAwMDAwODBsdQotI2RlZmluZQlNVVRFX0NINQkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDYJMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCU1VVEVfQ0g3CTB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCVRYX0NINAkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NINQkJMHgwMDAwN0YwMGx1Ci0jZGVmaW5lCVRYX0NINgkJMHgwMDdGMDAwMGx1Ci0jZGVmaW5lCVRYX0NINwkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzIgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIOAkweDAwMDAwMDgwbHUKLSNkZWZpbmUJTVVURV9DSDkJMHgwMDAwODAwMGx1Ci0jZGVmaW5lCU1VVEVfQ0gxMAkweDAwODAwMDAwbHUKLSNkZWZpbmUJTVVURV9DSDExCTB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCVRYX0NIOAkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIOQkJMHgwMDAwN0YwMGx1Ci0jZGVmaW5lCVRYX0NIMTAJCTB4MDA3RjAwMDBsdQotI2RlZmluZQlUWF9DSDExCQkweDdGMDAwMDAwbHUKLQotLyogTVhWUl9ST1VUSU5HXzMgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMTIJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gxMwkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDE0CTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMTUJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gxMgkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMTMJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDE0CQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gxNQkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzQgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMTYJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gxNwkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDE4CTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMTkJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gxNgkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMTcJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDE4CQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gxOQkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzUgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMjAJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gyMQkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDIyCTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMjMJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gyMAkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMjEJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDIyCQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gyMwkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzYgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMjQJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gyNQkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDI2CTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMjcJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gyNAkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMjUJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDI2CQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gyNwkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzcgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMjgJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gyOQkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDMwCTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMzEJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gyOAkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMjkJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDMwCQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gzMQkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzggTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMzIJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gzMwkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDM0CTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMzUJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gzMgkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMzMJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDM0CQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gzNQkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzkgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NIMzYJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0gzNwkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDM4CTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NIMzkJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0gzNgkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NIMzcJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDM4CQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0gzOQkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzEwIE1hc2tzICovCi0KLSNkZWZpbmUJTVVURV9DSDQwCTB4MDAwMDAwODBsdQotI2RlZmluZQlNVVRFX0NINDEJMHgwMDAwODAwMGx1Ci0jZGVmaW5lCU1VVEVfQ0g0MgkweDAwODAwMDAwbHUKLSNkZWZpbmUJTVVURV9DSDQzCTB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCVRYX0NINDAJCTB4MDAwMDAwN0ZsdQotI2RlZmluZQlUWF9DSDQxCQkweDAwMDA3RjAwbHUKLSNkZWZpbmUJVFhfQ0g0MgkJMHgwMDdGMDAwMGx1Ci0jZGVmaW5lCVRYX0NINDMJCTB4N0YwMDAwMDBsdQotCi0KLS8qIE1YVlJfUk9VVElOR18xMSBNYXNrcyAqLwotCi0jZGVmaW5lCU1VVEVfQ0g0NAkweDAwMDAwMDgwbHUKLSNkZWZpbmUJTVVURV9DSDQ1CTB4MDAwMDgwMDBsdQotI2RlZmluZQlNVVRFX0NINDYJMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCU1VVEVfQ0g0NwkweDgwMDAwMDAwbHUKLQotI2RlZmluZQlUWF9DSDQ0CQkweDAwMDAwMDdGbHUKLSNkZWZpbmUJVFhfQ0g0NQkJMHgwMDAwN0YwMGx1Ci0jZGVmaW5lCVRYX0NINDYJCTB4MDA3RjAwMDBsdQotI2RlZmluZQlUWF9DSDQ3CQkweDdGMDAwMDAwbHUKLQotCi0vKiBNWFZSX1JPVVRJTkdfMTIgTWFza3MgKi8KLQotI2RlZmluZQlNVVRFX0NINDgJMHgwMDAwMDA4MGx1Ci0jZGVmaW5lCU1VVEVfQ0g0OQkweDAwMDA4MDAwbHUKLSNkZWZpbmUJTVVURV9DSDUwCTB4MDA4MDAwMDBsdQotI2RlZmluZQlNVVRFX0NINTEJMHg4MDAwMDAwMGx1Ci0KLSNkZWZpbmUJVFhfQ0g0OAkJMHgwMDAwMDA3Rmx1Ci0jZGVmaW5lCVRYX0NINDkJCTB4MDAwMDdGMDBsdQotI2RlZmluZQlUWF9DSDUwCQkweDAwN0YwMDAwbHUKLSNkZWZpbmUJVFhfQ0g1MQkJMHg3RjAwMDAwMGx1Ci0KLQotLyogTVhWUl9ST1VUSU5HXzEzIE1hc2tzICovCi0KLSNkZWZpbmUJTVVURV9DSDUyCTB4MDAwMDAwODBsdQotI2RlZmluZQlNVVRFX0NINTMJMHgwMDAwODAwMGx1Ci0jZGVmaW5lCU1VVEVfQ0g1NAkweDAwODAwMDAwbHUKLSNkZWZpbmUJTVVURV9DSDU1CTB4ODAwMDAwMDBsdQotCi0jZGVmaW5lCVRYX0NINTIJCTB4MDAwMDAwN0ZsdQotI2RlZmluZQlUWF9DSDUzCQkweDAwMDA3RjAwbHUKLSNkZWZpbmUJVFhfQ0g1NAkJMHgwMDdGMDAwMGx1Ci0jZGVmaW5lCVRYX0NINTUJCTB4N0YwMDAwMDBsdQotCi0KLS8qIE1YVlJfUk9VVElOR18xNCBNYXNrcyAqLwotCi0jZGVmaW5lCU1VVEVfQ0g1NgkweDAwMDAwMDgwbHUKLSNkZWZpbmUJTVVURV9DSDU3CTB4MDAwMDgwMDBsdQotI2RlZmluZQlNVVRFX0NINTgJMHgwMDgwMDAwMGx1Ci0jZGVmaW5lCU1VVEVfQ0g1OQkweDgwMDAwMDAwbHUKLQotI2RlZmluZQlUWF9DSDU2CQkweDAwMDAwMDdGbHUKLSNkZWZpbmUJVFhfQ0g1NwkJMHgwMDAwN0YwMGx1Ci0jZGVmaW5lCVRYX0NINTgJCTB4MDA3RjAwMDBsdQotI2RlZmluZQlUWF9DSDU5CQkweDdGMDAwMDAwbHUKLQotCi0vKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgKENNUkIpIEFkZHJlc3MgT2Zmc2V0cyAqLwotCi0jZGVmaW5lCUNNUkJfU1RSSURFCSAgMHgwMDAwMDAxNmx1Ci0KLSNkZWZpbmUJQ01SQl9EU1RfT0ZGU0VUCSAgMHgwMDAwMDAwMGx1Ci0jZGVmaW5lCUNNUkJfU1JDX09GRlNFVAkgIDB4MDAwMDAwMDJsdQotI2RlZmluZQlDTVJCX0RBVEFfT0ZGU0VUICAweDAwMDAwMDA1bHUKLQotCi0vKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIChDTVRCKSBBZGRyZXNzIE9mZnNldHMgKi8KLQotI2RlZmluZQlDTVRCX1BSSU9fT0ZGU0VUICAgIDB4MDAwMDAwMDBsdQotI2RlZmluZQlDTVRCX0RTVF9PRkZTRVQJICAgIDB4MDAwMDAwMDJsdQotI2RlZmluZQlDTVRCX1NSQ19PRkZTRVQJICAgIDB4MDAwMDAwMDRsdQotI2RlZmluZQlDTVRCX1RZUEVfT0ZGU0VUICAgIDB4MDAwMDAwMDZsdQotI2RlZmluZQlDTVRCX0RBVEFfT0ZGU0VUICAgIDB4MDAwMDAwMDdsdQotCi0jZGVmaW5lCUNNVEJfQU5TV0VSX09GRlNFVCAgMHgwMDAwMDAwQWx1Ci0KLSNkZWZpbmUJQ01UQl9TVEFUX05fT0ZGU0VUICAweDAwMDAwMDE4bHUKLSNkZWZpbmUJQ01UQl9TVEFUX0FfT0ZGU0VUICAweDAwMDAwMDE2bHUKLSNkZWZpbmUJQ01UQl9TVEFUX0RfT0ZGU0VUICAweDAwMDAwMDBFbHUKLSNkZWZpbmUJQ01UQl9TVEFUX1JfT0ZGU0VUICAweDAwMDAwMDE0bHUKLSNkZWZpbmUJQ01UQl9TVEFUX1dfT0ZGU0VUICAweDAwMDAwMDE0bHUKLSNkZWZpbmUJQ01UQl9TVEFUX0dfT0ZGU0VUICAweDAwMDAwMDE0bHUKLQotCi0vKiBBc3luY2hyb25vdXMJUGFja2V0IFJlY2VpdmUgQnVmZmVyIChBUFJCKSBBZGRyZXNzIE9mZnNldHMgKi8KLQotI2RlZmluZQlBUFJCX1NUUklERQkgIDB4MDAwMDA0MDBsdQotCi0jZGVmaW5lCUFQUkJfRFNUX09GRlNFVAkgIDB4MDAwMDAwMDBsdQotI2RlZmluZQlBUFJCX0xFTl9PRkZTRVQJICAweDAwMDAwMDAybHUKLSNkZWZpbmUJQVBSQl9TUkNfT0ZGU0VUCSAgMHgwMDAwMDAwNGx1Ci0jZGVmaW5lCUFQUkJfREFUQV9PRkZTRVQgIDB4MDAwMDAwMDZsdQotCi0KLS8qIEFzeW5jaHJvbm91cwlQYWNrZXQgVHJhbnNtaXQJQnVmZmVyIChBUFRCKSBBZGRyZXNzIE9mZnNldHMgKi8KLQotI2RlZmluZQlBUFRCX1BSSU9fT0ZGU0VUICAweDAwMDAwMDAwbHUKLSNkZWZpbmUJQVBUQl9EU1RfT0ZGU0VUCSAgMHgwMDAwMDAwMmx1Ci0jZGVmaW5lCUFQVEJfTEVOX09GRlNFVAkgIDB4MDAwMDAwMDRsdQotI2RlZmluZQlBUFRCX1NSQ19PRkZTRVQJICAweDAwMDAwMDA2bHUKLSNkZWZpbmUJQVBUQl9EQVRBX09GRlNFVCAgMHgwMDAwMDAwOGx1Ci0KLQotLyogUmVtb3RlIFJlYWQgQnVmZmVyIChSUkRCKSBBZGRyZXNzIE9mZnNldHMgKi8KLQotI2RlZmluZQlSUkRCX1dBRERSX09GRlNFVCAweDAwMDAwMTAwbHUKLSNkZWZpbmUJUlJEQl9XTEVOX09GRlNFVCAgMHgwMDAwMDEwMWx1Ci0KLQotCiAvKiAqKioqKioqKioqKioJIENPTlRST0xMRVIgQVJFQSBORVRXT1JLIChDQU4pIE1BU0tTICAqKioqKioqKioqKioqKiovCiAvKiBDQU5fQ09OVFJPTCBNYXNrcwkJCQkJICovCiAjZGVmaW5lCVNSUwkJCTB4MDAwMQkvKiBTb2Z0d2FyZSBSZXNldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAyOTVjNzhhLi4wYzM0NmZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKQEAgLTcsMTEgKzcsOCBAQAogI2lmbmRlZiBfTUFDSF9HUElPX0hfCiAjZGVmaW5lIF9NQUNIX0dQSU9fSF8KIAotCS8qIEZJWE1FOgotCSAqIEZvciBub3cgb25seSBzdXBwb3J0IFBPUlRGIEdQSU9zLgotCSAqIFBPUlQgQyxEIGFuZCBFIGFyZSBmb3IgcGVyaXBoZXJhbCB1c2FnZSBvbmx5Ci0JICovCiAjZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyAxNgorI2RlZmluZSBCRklOX1NQRUNJQUxfR1BJT19CQU5LUyAzCiAKICNkZWZpbmUJR1BJT19QRjAJMAkvKiBQRiAqLwogI2RlZmluZQlHUElPX1BGMQkxCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDYxMjFjZjguLjAwODNiYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIAotI2RlZmluZSBNQVhfUkVTT1VSQ0VTCU1BWF9CTEFDS0ZJTl9HUElPUworI2RlZmluZSBNQVhfUkVTT1VSQ0VTCTY0CiAKICNkZWZpbmUgUF9UTVIyCQkoUF9ET05UQ0FSRSkKICNkZWZpbmUgUF9UTVIxCQkoUF9ET05UQ0FSRSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L0tjb25maWcKaW5kZXggYTA5NjIzZC4uNzAxODlhMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L0tjb25maWcKQEAgLTEsMyArMSwyNyBAQAorY29uZmlnIEJGNTQyCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQkY1NDJfc3RkIHx8IEJGNTQyTQorY29uZmlnIEJGNTQ0CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQkY1NDRfc3RkIHx8IEJGNTQ0TQorY29uZmlnIEJGNTQ3CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQkY1NDdfc3RkIHx8IEJGNTQ3TQorY29uZmlnIEJGNTQ4CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQkY1NDhfc3RkIHx8IEJGNTQ4TQorY29uZmlnIEJGNTQ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQkY1NDlfc3RkIHx8IEJGNTQ5TQorCitjb25maWcgQkY1NHhNCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gKEJGNTQyTSB8fCBCRjU0NE0gfHwgQkY1NDdNIHx8IEJGNTQ4TSB8fCBCRjU0OU0pCisKK2NvbmZpZyBCRjU0eAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIChCRjU0MiB8fCBCRjU0NCB8fCBCRjU0NyB8fCBCRjU0OCB8fCBCRjU0OSkKKwogaWYgKEJGNTR4KQogCiBzb3VyY2UgImFyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCAxYTUyODZiLi42MDE5M2Y3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC02Miw3ICs2Miw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2lzcDE3NjBfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJpc3AxNzYwLWhjZCIsCisJLm5hbWUgICAgICAgICAgID0gImlzcDE3NjAiLAogCS5pZCAgICAgICAgICAgICA9IDAsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmaXNwMTc2MF9wcml2LApAQCAtMTU0LDcgKzE1NCw3IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWSkgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUllfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0JGSU5fUk9UQVJZKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9CRklOX1JPVEFSWV9NT0RVTEUpCiAjaW5jbHVkZSA8YXNtL2JmaW5fcm90YXJ5Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgYmZpbl9yb3RhcnlfcGxhdGZvcm1fZGF0YSBiZmluX3JvdGFyeV9kYXRhID0gewpAQCAtMTg2LDcgKzE4Niw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFgpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHhsMzR4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvYWR4bDM0eC5oPgogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHhsMzR4X3BsYXRmb3JtX2RhdGEgYWR4bDM0eF9pbmZvID0gewogCS54X2F4aXNfb2Zmc2V0ID0gMCwKIAkueV9heGlzX29mZnNldCA9IDAsCkBAIC0yMTAsMTQgKzIxMCwxNyBAQAogCS5ldl9jb2RlX3kgPSBBQlNfWSwJCS8qIEVWX1JFTCAqLwogCS5ldl9jb2RlX3ogPSBBQlNfWiwJCS8qIEVWX1JFTCAqLwogCi0JLmV2X2NvZGVfdGFwX3ggPSBCVE5fVE9VQ0gsCQkvKiBFVl9LRVkgKi8KLQkuZXZfY29kZV90YXBfeSA9IEJUTl9UT1VDSCwJCS8qIEVWX0tFWSAqLwotCS5ldl9jb2RlX3RhcF96ID0gQlROX1RPVUNILAkJLyogRVZfS0VZICovCisJLmV2X2NvZGVfdGFwID0ge0JUTl9UT1VDSCwgQlROX1RPVUNILCBCVE5fVE9VQ0h9LCAvKiBFVl9LRVkgeCx5LHogKi8KIAogLyoJLmV2X2NvZGVfZmYgPSBLRVlfRiwqLwkJLyogRVZfS0VZICovCiAvKgkuZXZfY29kZV9hY3RfaW5hY3Rpdml0eSA9IEtFWV9BLCovCS8qIEVWX0tFWSAqLwogCS5wb3dlcl9tb2RlID0gQURYTF9BVVRPX1NMRUVQIHwgQURYTF9MSU5LLAogCS5maWZvX21vZGUgPSBBRFhMX0ZJRk9fU1RSRUFNLAorCS5vcmllbnRhdGlvbl9lbmFibGUgPSBBRFhMX0VOX09SSUVOVEFUSU9OXzNELAorCS5kZWFkem9uZV9hbmdsZSA9IEFEWExfREVBRFpPTkVfQU5HTEVfMTBwOCwKKwkuZGl2aXNvcl9sZW5ndGggPSBBRFhMX0xQX0ZJTFRFUl9ESVZJU09SXzE2LAorCS8qIEVWX0tFWSB7K1osICtZLCArWCwgLVgsIC1ZLCAtWn0gKi8KKwkuZXZfY29kZXNfb3JpZW50XzNkID0ge0JUTl9aLCBCVE5fWSwgQlROX1gsIEJUTl9BLCBCVE5fQiwgQlROX0N9LAogfTsKICNlbmRpZgogCkBAIC00NjEsNiArNDY0LDQ0IEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQordW5zaWduZWQgc2hvcnQgYmZpbl9jYW5fcGVyaXBoZXJhbHNbXSA9IHsKKwlQX0NBTjBfUlgsIFBfQ0FOMF9UWCwgMAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2Nhbl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4RkZDMDJBMDAsCisJCS5lbmQgPSAweEZGQzAyRkZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gSVJRX0NBTjBfUlgsCisJCS5lbmQgPSBJUlFfQ0FOMF9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCA9IElSUV9DQU4wX1RYLAorCQkuZW5kID0gSVJRX0NBTjBfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgPSBJUlFfQ0FOMF9FUlJPUiwKKwkJLmVuZCA9IElSUV9DQU4wX0VSUk9SLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9jYW5fZGV2aWNlID0geworCS5uYW1lID0gImJmaW5fY2FuIiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9jYW5fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBiZmluX2Nhbl9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9jYW5fcGVyaXBoZXJhbHMsIC8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwl9LAorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WCkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fYXRhcGlfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtOTUzLDYgKzk5NCwxMCBAQAogCSZiZmluX2lzcDE3NjBfZGV2aWNlLAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DQU5fQkZJTikgfHwgZGVmaW5lZChDT05GSUdfQ0FOX0JGSU5fTU9EVUxFKQorCSZiZmluX2Nhbl9kZXZpY2UsCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfQkY1NFgpIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfQkY1NFhfTU9EVUxFKQogCSZiZmluX2F0YXBpX2RldmljZSwKICNlbmRpZgpAQCAtOTc0LDcgKzEwMTksNyBAQAogCSZiZjU0eF9rcGFkX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUlkpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9CRklOX1JPVEFSWSkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfQkZJTl9ST1RBUllfTU9EVUxFKQogCSZiZmluX3JvdGFyeV9kZXZpY2UsCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCmluZGV4IDdiZWFkNWMuLjc1MWU1ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKQEAgLTgxLDE4ICs4MSw2IEBACiAKICNkZWZpbmUgQU1HQ1RMVkFMCShWX0FNQkVOIHwgVl9BTUNLRU4pCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU0Mk0pCi0jIGRlZmluZSBDT05GSUdfQkY1NDIKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTQ0TSkKLSMgZGVmaW5lIENPTkZJR19CRjU0NAotI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NDdNKQotIyBkZWZpbmUgQ09ORklHX0JGNTQ3Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0OE0pCi0jIGRlZmluZSBDT05GSUdfQkY1NDgKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTQ5TSkKLSMgZGVmaW5lIENPTkZJR19CRjU0OQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19CRjU0MikKICMgZGVmaW5lIENQVSAgICJCRjU0MiIKICMgZGVmaW5lIENQVUlEIDB4MjdkZQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDEzMzAyYjYuLjU2ODQwMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTY0LDEwICs2NCw0IEBACiAjZGVmaW5lIE9GRlNFVF9USFIgICAgICAgICAgICAgIDB4MjgJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlciAgICAgICAgICAgICovCiAjZGVmaW5lIE9GRlNFVF9SQlIgICAgICAgICAgICAgIDB4MkMJLyogUmVjZWl2ZSBCdWZmZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICovCiAKLS8qIFBMTF9ESVYgTWFza3MgKi8KLSNkZWZpbmUgQ0NMS19ESVYxIENTRUxfRElWMQkvKiBDQ0xLID0gVkNPIC8gMSAqLwotI2RlZmluZSBDQ0xLX0RJVjIgQ1NFTF9ESVYyCS8qIENDTEsgPSBWQ08gLyAyICovCi0jZGVmaW5lIENDTEtfRElWNCBDU0VMX0RJVjQJLyogQ0NMSyA9IFZDTyAvIDQgKi8KLSNkZWZpbmUgQ0NMS19ESVY4IENTRUxfRElWOAkvKiBDQ0xLID0gVkNPIC8gOCAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCmluZGV4IDQyMzQyMTUuLmJjNjUwZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaApAQCAtNCwyMSArNCwyMSBAQAogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKLSNpZm5kZWYgX0NERUZfQkY1NDhfSAotI2RlZmluZSBfQ0RFRl9CRjU0OF9ICisjaWZuZGVmIF9DREVGX0JGNTQ3X0gKKyNkZWZpbmUgX0NERUZfQkY1NDdfSAogCiAvKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiZGVmQkY1NDguaCIKKyNpbmNsdWRlICJkZWZCRjU0Ny5oIgogCiAvKiBpbmNsdWRlIGNvcmUgc2JmaW5fcmVhZF8oKWVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSA8YXNtL2NkZWZfTFBCbGFja2Zpbi5oPgogCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0OCAqLworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDcgKi8KIAogLyogaW5jbHVkZSBjZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBiZmluX3JlYWRfKClyb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJjZGVmQkY1NHhfYmFzZS5oIgogCi0vKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1NDggdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCisvKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1NDcgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCiAKIC8qIFRpbWVyIFJlZ2lzdGVycyAqLwogCkBAIC04MDUsNCArODA1LDQgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDT1VOVCkKICNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNPVU5ULCB2YWwpCiAKLSNlbmRpZiAvKiBfQ0RFRl9CRjU0OF9IICovCisjZW5kaWYgLyogX0NERUZfQkY1NDdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKaW5kZXggZGY4NDE4MC4uMzUyM2UwOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCkBAIC0xOCwxNjUgKzE4LDggQEAKIC8qIGluY2x1ZGUgY2RlZkJGNTR4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1NHggYmZpbl9yZWFkXygpcm9jZXNzb3JzICovCiAjaW5jbHVkZSAiY2RlZkJGNTR4X2Jhc2UuaCIKIAotLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTQ4IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLwotCi0vKiBUaW1lciBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI4X0NPTkZJRygpCWJmaW5fcmVhZDE2KFRJTUVSOF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI4X0NPTkZJRyh2YWwpCWJmaW5fd3JpdGUxNihUSU1FUjhfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfQ09VTlRFUigpCWJmaW5fcmVhZDMyKFRJTUVSOF9DT1VOVEVSKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9DT1VOVEVSKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSOF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfUEVSSU9EKCkJYmZpbl9yZWFkMzIoVElNRVI4X1BFUklPRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfUEVSSU9EKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSOF9QRVJJT0QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9XSURUSCgpCWJmaW5fcmVhZDMyKFRJTUVSOF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfV0lEVEgodmFsKQliZmluX3dyaXRlMzIoVElNRVI4X1dJRFRILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfQ09ORklHKCkJYmZpbl9yZWFkMTYoVElNRVI5X0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfQ09ORklHKHZhbCkJYmZpbl93cml0ZTE2KFRJTUVSOV9DT05GSUcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOV9DT1VOVEVSKCkJYmZpbl9yZWFkMzIoVElNRVI5X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X0NPVU5URVIodmFsKQliZmluX3dyaXRlMzIoVElNRVI5X0NPVU5URVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOV9QRVJJT0QoKQliZmluX3JlYWQzMihUSU1FUjlfUEVSSU9EKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOV9QRVJJT0QodmFsKQliZmluX3dyaXRlMzIoVElNRVI5X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI5X1dJRFRIKCkJYmZpbl9yZWFkMzIoVElNRVI5X1dJRFRIKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOV9XSURUSCh2YWwpCWJmaW5fd3JpdGUzMihUSU1FUjlfV0lEVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfQ09ORklHKCkJYmZpbl9yZWFkMTYoVElNRVIxMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxMF9DT05GSUcodmFsKQliZmluX3dyaXRlMTYoVElNRVIxMF9DT05GSUcsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfQ09VTlRFUigpCWJmaW5fcmVhZDMyKFRJTUVSMTBfQ09VTlRFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX0NPVU5URVIodmFsKQliZmluX3dyaXRlMzIoVElNRVIxMF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX1BFUklPRCgpCWJmaW5fcmVhZDMyKFRJTUVSMTBfUEVSSU9EKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMTBfUEVSSU9EKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSMTBfUEVSSU9ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX1dJRFRIKCkJYmZpbl9yZWFkMzIoVElNRVIxMF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX1dJRFRIKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSMTBfV0lEVEgsIHZhbCkKLQotLyogVGltZXIgR3JvdWJmaW5fcmVhZF8oKSBvZiAzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0VOQUJMRTEoKQliZmluX3JlYWQxNihUSU1FUl9FTkFCTEUxKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0VOQUJMRTEodmFsKQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVJfRElTQUJMRTEoKQliZmluX3JlYWQxNihUSU1FUl9ESVNBQkxFMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFMSh2YWwpCWJmaW5fd3JpdGUxNihUSU1FUl9ESVNBQkxFMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVJfU1RBVFVTMSgpCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1RBVFVTMSh2YWwpCWJmaW5fd3JpdGUzMihUSU1FUl9TVEFUVVMxLCB2YWwpCi0KLS8qIFNQT1JUMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDUjEoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1RDUjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RDUjEodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ1IyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ1IyKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9UQ1IyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVENMS0RJVigpCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9UQ0xLRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVEZTRElWKCkJYmZpbl9yZWFkMTYoU1BPUlQwX1RGU0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVEZTRElWKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQliZmluX3JlYWQzMihTUE9SVDBfVFgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9UWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JYKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX1JYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMSgpCQliZmluX3JlYWQxNihTUE9SVDBfUkNSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNSMSh2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNSMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDUjIoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjIodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1JDUjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SQ0xLRElWKCkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDTEtESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDTEtESVYodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1JDTEtESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SRlNESVYoKQliZmluX3JlYWQxNihTUE9SVDBfUkZTRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SRlNESVYodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1JGU0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1NUQVQoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1NUQVQodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1NUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9DSE5MKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9DSE5MKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9DSE5MKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9DSE5MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzEoKQliZmluX3JlYWQxNihTUE9SVDBfTUNNQzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01DTUMxKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9NQ01DMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01DTUMyKCkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMih2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDBfTUNNQzIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMCgpCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzAodmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzEoKQliZmluX3JlYWQzMihTUE9SVDBfTVRDUzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01UQ1MxKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MyKCkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMih2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDBfTVRDUzIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMygpCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzModmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzAoKQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MwKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MxKCkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMSh2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDBfTVJDUzEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NUkNTMigpCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzIodmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzMoKQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MzKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMywgdmFsKQotCi0vKiBFUFBJMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfU1RBVFVTKCkJYmZpbl9yZWFkMTYoRVBQSTBfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0hDT1VOVCgpCWJmaW5fcmVhZDE2KEVQUEkwX0hDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9IQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRVBQSTBfSENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9IREVMQVkoKQliZmluX3JlYWQxNihFUFBJMF9IREVMQVkpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfSERFTEFZKHZhbCkJYmZpbl93cml0ZTE2KEVQUEkwX0hERUxBWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfVkNPVU5UKCkJYmZpbl9yZWFkMTYoRVBQSTBfVkNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1ZDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9WQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX1ZERUxBWSgpCWJmaW5fcmVhZDE2KEVQUEkwX1ZERUxBWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9WREVMQVkodmFsKQliZmluX3dyaXRlMTYoRVBQSTBfVkRFTEFZLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUkFNRSgpCQliZmluX3JlYWQxNihFUFBJMF9GUkFNRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUkFNRSh2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9GUkFNRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfTElORSgpCQliZmluX3JlYWQxNihFUFBJMF9MSU5FKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0xJTkUodmFsKQliZmluX3dyaXRlMTYoRVBQSTBfTElORSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfQ0xLRElWKCkJYmZpbl9yZWFkMTYoRVBQSTBfQ0xLRElWKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0NMS0RJVih2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9DTEtESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0NPTlRST0woKQliZmluX3JlYWQzMihFUFBJMF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0NPTlRST0wodmFsKQliZmluX3dyaXRlMzIoRVBQSTBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMxV19IQkwoKQliZmluX3JlYWQzMihFUFBJMF9GUzFXX0hCTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzFXX0hCTCh2YWwpCWJmaW5fd3JpdGUzMihFUFBJMF9GUzFXX0hCTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMxUF9BVlBMKCkJYmZpbl9yZWFkMzIoRVBQSTBfRlMxUF9BVlBMKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZTMVBfQVZQTCh2YWwpCWJmaW5fd3JpdGUzMihFUFBJMF9GUzFQX0FWUEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMldfTFZCKCkJYmZpbl9yZWFkMzIoRVBQSTBfRlMyV19MVkIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMyV19MVkIodmFsKQliZmluX3dyaXRlMzIoRVBQSTBfRlMyV19MVkIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMlBfTEFWRigpCWJmaW5fcmVhZDMyKEVQUEkwX0ZTMlBfTEFWRikKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzJQX0xBVkYodmFsKQliZmluX3dyaXRlMzIoRVBQSTBfRlMyUF9MQVZGLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9DTElQKCkJCWJmaW5fcmVhZDMyKEVQUEkwX0NMSVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ0xJUCh2YWwpCWJmaW5fd3JpdGUzMihFUFBJMF9DTElQLCB2YWwpCi0KLS8qIFVBUlQyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9ETEwoKQkJYmZpbl9yZWFkMTYoVUFSVDJfRExMKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0RMTCh2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9ETEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0RMSCgpCQliZmluX3JlYWQxNihVQVJUMl9ETEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfRExIKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQyX0RMSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfR0NUTCgpCQliZmluX3JlYWQxNihVQVJUMl9HQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0dDVEwodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfR0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfTENSKCkJCWJmaW5fcmVhZDE2KFVBUlQyX0xDUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9MQ1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfTENSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9NQ1IoKQkJYmZpbl9yZWFkMTYoVUFSVDJfTUNSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX01DUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9NQ1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0xTUigpCQliZmluX3JlYWQxNihVQVJUMl9MU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfTFNSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQyX0xTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfTVNSKCkJCWJmaW5fcmVhZDE2KFVBUlQyX01TUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9NU1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfTVNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9TQ1IoKQkJYmZpbl9yZWFkMTYoVUFSVDJfU0NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX1NDUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9TQ1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0lFUl9TRVQoKQliZmluX3JlYWQxNihVQVJUMl9JRVJfU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0lFUl9TRVQodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfSUVSX1NFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfSUVSX0NMRUFSKCkJYmZpbl9yZWFkMTYoVUFSVDJfSUVSX0NMRUFSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0lFUl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9JRVJfQ0xFQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX1JCUigpCQliZmluX3JlYWQxNihVQVJUMl9SQlIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfUkJSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQyX1JCUiwgdmFsKQotCi0vKiBUd28gV2lyZSBJbnRlcmZhY2UgUmVnaXN0ZXJzIChUV0kxKSAqLwotCi0vKiBTUEkyICBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfU1BJMl9DVEwoKQkJYmZpbl9yZWFkMTYoU1BJMl9DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJMl9DVEwodmFsKQliZmluX3dyaXRlMTYoU1BJMl9DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfRkxHKCkJCWJmaW5fcmVhZDE2KFNQSTJfRkxHKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfRkxHKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfRkxHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUEkyX1NUQVQoKQkJYmZpbl9yZWFkMTYoU1BJMl9TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX1NUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfVERCUigpCQliZmluX3JlYWQxNihTUEkyX1REQlIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJMl9UREJSKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfVERCUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJMl9SREJSKCkJCWJmaW5fcmVhZDE2KFNQSTJfUkRCUikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX1JEQlIodmFsKQliZmluX3dyaXRlMTYoU1BJMl9SREJSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUEkyX0JBVUQoKQkJYmZpbl9yZWFkMTYoU1BJMl9CQVVEKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfQkFVRCh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX0JBVUQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfU0hBRE9XKCkJCWJmaW5fcmVhZDE2KFNQSTJfU0hBRE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfU0hBRE9XKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfU0hBRE9XLCB2YWwpCisvKiBUaGUgQkY1NDggaXMgbGlrZSB0aGUgQkY1NDcsIGJ1dCBoYXMgYWRkaXRpb25hbCBDQU5zICovCisjaW5jbHVkZSAiY2RlZkJGNTQ3LmgiCiAKIC8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDEgUmVnaXN0ZXJzICovCiAKQEAgLTkyMyw2MzEgKzc2Niw0IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9JRDEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX0lEMSwgdmFsKQogCi0vKiBBVEFQSSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfQ09OVFJPTCgpCQliZmluX3JlYWQxNihBVEFQSV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1NUQVRVUygpCQliZmluX3JlYWQxNihBVEFQSV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0RFVl9BRERSKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RFVl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RFVl9BRERSKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9ERVZfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfREVWX1RYQlVGKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RFVl9UWEJVRikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ERVZfVFhCVUYodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0RFVl9UWEJVRiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfREVWX1JYQlVGKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RFVl9SWEJVRikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ERVZfUlhCVUYodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0RFVl9SWEJVRiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfSU5UX01BU0soKQkJYmZpbl9yZWFkMTYoQVRBUElfSU5UX01BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfSU5UX01BU0sodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0lOVF9NQVNLLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9JTlRfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0lOVF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfSU5UX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9JTlRfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9YRkVSX0xFTigpCQliZmluX3JlYWQxNihBVEFQSV9YRkVSX0xFTikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9YRkVSX0xFTih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfWEZFUl9MRU4sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0xJTkVfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0xJTkVfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0xJTkVfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX0xJTkVfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9TTV9TVEFURSgpCQliZmluX3JlYWQxNihBVEFQSV9TTV9TVEFURSkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9TTV9TVEFURSh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfU01fU1RBVEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1RFUk1JTkFURSgpCQliZmluX3JlYWQxNihBVEFQSV9URVJNSU5BVEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVEVSTUlOQVRFKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9URVJNSU5BVEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1BJT19URlJDTlQoKQkJYmZpbl9yZWFkMTYoQVRBUElfUElPX1RGUkNOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9QSU9fVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1BJT19URlJDTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0RNQV9URlJDTlQoKQkJYmZpbl9yZWFkMTYoQVRBUElfRE1BX1RGUkNOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ETUFfVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX0RNQV9URlJDTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VNQUlOX1RGUkNOVCgpCQliZmluX3JlYWQxNihBVEFQSV9VTUFJTl9URlJDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVU1BSU5fVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VNQUlOX1RGUkNOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVURNQU9VVF9URlJDTlQoKQliZmluX3JlYWQxNihBVEFQSV9VRE1BT1VUX1RGUkNOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VRE1BT1VUX1RGUkNOVCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VRE1BT1VUX1RGUkNOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUkVHX1RJTV8wKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1JFR19USU1fMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9SRUdfVElNXzAodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1JFR19USU1fMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUElPX1RJTV8wKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1BJT19USU1fMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9QSU9fVElNXzAodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1BJT19USU1fMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUElPX1RJTV8xKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1BJT19USU1fMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9QSU9fVElNXzEodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1BJT19USU1fMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTVVMVElfVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfTVVMVElfVElNXzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTVVMVElfVElNXzAodmFsKQliZmluX3dyaXRlMTYoQVRBUElfTVVMVElfVElNXzAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX01VTFRJX1RJTV8xKCkJCWJmaW5fcmVhZDE2KEFUQVBJX01VTFRJX1RJTV8xKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX01VTFRJX1RJTV8xKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX01VTFRJX1RJTV8xLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9NVUxUSV9USU1fMigpCQliZmluX3JlYWQxNihBVEFQSV9NVUxUSV9USU1fMikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9NVUxUSV9USU1fMih2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9NVUxUSV9USU1fMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzAodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VMVFJBX1RJTV8xKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VMVFJBX1RJTV8xKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VMVFJBX1RJTV8xKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VMVFJBX1RJTV8xLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMigpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMih2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzMoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzModmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzMsIHZhbCkKLQotLyogU0RIIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUFdSX0NUTCgpCQliZmluX3JlYWQxNihTREhfUFdSX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUFdSX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUFdSX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0NMS19DVEwoKQkJYmZpbl9yZWFkMTYoU0RIX0NMS19DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0NMS19DVEwodmFsKQliZmluX3dyaXRlMTYoU0RIX0NMS19DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9BUkdVTUVOVCgpCWJmaW5fcmVhZDMyKFNESF9BUkdVTUVOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfQVJHVU1FTlQodmFsKQliZmluX3dyaXRlMzIoU0RIX0FSR1VNRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfQ09NTUFORCgpCQliZmluX3JlYWQxNihTREhfQ09NTUFORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ09NTUFORCh2YWwpCWJmaW5fd3JpdGUxNihTREhfQ09NTUFORCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BfQ01EKCkJYmZpbl9yZWFkMTYoU0RIX1JFU1BfQ01EKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQX0NNRCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUkVTUF9DTUQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTAoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UwKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTAodmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMSgpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMSh2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UyKCkJYmZpbl9yZWFkMzIoU0RIX1JFU1BPTlNFMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUE9OU0UyKHZhbCkJYmZpbl93cml0ZTMyKFNESF9SRVNQT05TRTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTMoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UzKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTModmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfVElNRVIoKQliZmluX3JlYWQzMihTREhfREFUQV9USU1FUikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfREFUQV9USU1FUih2YWwpCWJmaW5fd3JpdGUzMihTREhfREFUQV9USU1FUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfTEdUSCgpCWJmaW5fcmVhZDE2KFNESF9EQVRBX0xHVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfTEdUSCh2YWwpCWJmaW5fd3JpdGUxNihTREhfREFUQV9MR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9DVEwoKQliZmluX3JlYWQxNihTREhfREFUQV9DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNESF9EQVRBX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfQ05UKCkJYmZpbl9yZWFkMTYoU0RIX0RBVEFfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX0NOVCh2YWwpCWJmaW5fd3JpdGUxNihTREhfREFUQV9DTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVMoKQkJYmZpbl9yZWFkMzIoU0RIX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTMyKFNESF9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVNfQ0xSKCkJYmZpbl9yZWFkMTYoU0RIX1NUQVRVU19DTFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1NUQVRVU19DTFIodmFsKQliZmluX3dyaXRlMTYoU0RIX1NUQVRVU19DTFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9NQVNLMCgpCQliZmluX3JlYWQzMihTREhfTUFTSzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX01BU0swKHZhbCkJYmZpbl93cml0ZTMyKFNESF9NQVNLMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX01BU0sxKCkJCWJmaW5fcmVhZDMyKFNESF9NQVNLMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfTUFTSzEodmFsKQliZmluX3dyaXRlMzIoU0RIX01BU0sxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfRklGT19DTlQoKQliZmluX3JlYWQxNihTREhfRklGT19DTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0ZJRk9fQ05UKHZhbCkJYmZpbl93cml0ZTE2KFNESF9GSUZPX0NOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0ZJRk8oKQkJYmZpbl9yZWFkMzIoU0RIX0ZJRk8pCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0ZJRk8odmFsKQliZmluX3dyaXRlMzIoU0RIX0ZJRk8sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9FX1NUQVRVUygpCWJmaW5fcmVhZDE2KFNESF9FX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfRV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoU0RIX0VfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfRV9NQVNLKCkJCWJmaW5fcmVhZDE2KFNESF9FX01BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0VfTUFTSyh2YWwpCWJmaW5fd3JpdGUxNihTREhfRV9NQVNLLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfQ0ZHKCkJCWJmaW5fcmVhZDE2KFNESF9DRkcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0NGRyh2YWwpCQliZmluX3dyaXRlMTYoU0RIX0NGRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1JEX1dBSVRfRU4oKQliZmluX3JlYWQxNihTREhfUkRfV0FJVF9FTikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkRfV0FJVF9FTih2YWwpCWJmaW5fd3JpdGUxNihTREhfUkRfV0FJVF9FTiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDAoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDAodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQxKCkJCWJmaW5fcmVhZDE2KFNESF9QSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQxKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMigpCQliZmluX3JlYWQxNihTREhfUElEMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMih2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDMoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDModmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ0KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ0KQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ0KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUElENSgpCQliZmluX3JlYWQxNihTREhfUElENSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElENSh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElENSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDYoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDYodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ3KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ3KQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ3KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ3LCB2YWwpCi0KLS8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfSE9TVF9DT05UUk9MKCkJYmZpbl9yZWFkMTYoSE9TVF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfQ09OVFJPTCh2YWwpCWJmaW5fd3JpdGUxNihIT1NUX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEhPU1RfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KEhPU1RfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1RJTUVPVVQoKQliZmluX3JlYWQxNihIT1NUX1RJTUVPVVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9USU1FT1VUKHZhbCkJYmZpbl93cml0ZTE2KEhPU1RfVElNRU9VVCwgdmFsKQotCi0vKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZBRERSKCkJCWJmaW5fcmVhZDE2KFVTQl9GQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRkFERFIodmFsKQliZmluX3dyaXRlMTYoVVNCX0ZBRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUE9XRVIoKQkJYmZpbl9yZWFkMTYoVVNCX1BPV0VSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QT1dFUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfUE9XRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFgoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlRYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlgoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJSWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFhFKCkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVFhFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFhFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFhFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlJYRSgpCQliZmluX3JlYWQxNihVU0JfSU5UUlJYRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlJYRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0IoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJVU0IodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVVNCRSgpCWJmaW5fcmVhZDE2KFVTQl9JTlRSVVNCRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQkUodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0JFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlJBTUUoKQkJYmZpbl9yZWFkMTYoVVNCX0ZSQU1FKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GUkFNRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRlJBTUUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTkRFWCgpCQliZmluX3JlYWQxNihVU0JfSU5ERVgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOREVYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTkRFWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RFU1RNT0RFKCkJYmZpbl9yZWFkMTYoVVNCX1RFU1RNT0RFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9URVNUTU9ERSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfVEVTVE1PREUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9HTE9CSU5UUigpCWJmaW5fcmVhZDE2KFVTQl9HTE9CSU5UUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfR0xPQklOVFIodmFsKQliZmluX3dyaXRlMTYoVVNCX0dMT0JJTlRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfR0xPQkFMX0NUTCgpCWJmaW5fcmVhZDE2KFVTQl9HTE9CQUxfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9HTE9CQUxfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfR0xPQkFMX0NUTCwgdmFsKQotCi0vKiBVU0IgUGFja2V0IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWF9NQVhfUEFDS0VUKCkJCWJmaW5fcmVhZDE2KFVTQl9UWF9NQVhfUEFDS0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWF9NQVhfUEFDS0VUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9UWF9NQVhfUEFDS0VULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfQ1NSMCgpCQliZmluX3JlYWQxNihVU0JfQ1NSMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQ1NSMCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfQ1NSMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9UWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhfTUFYX1BBQ0tFVCgpCQliZmluX3JlYWQxNihVU0JfUlhfTUFYX1BBQ0tFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhfTUFYX1BBQ0tFVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfUlhfTUFYX1BBQ0tFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX1JYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfQ09VTlQwKCkJCWJmaW5fcmVhZDE2KFVTQl9DT1VOVDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0NPVU5UMCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfQ09VTlQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX05BS0xJTUlUMCgpCWJmaW5fcmVhZDE2KFVTQl9OQUtMSU1JVDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX05BS0xJTUlUMCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfTkFLTElNSVQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9SWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfVFhDT1VOVCwgdmFsKQotCi0vKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCBGSUZPIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAwX0ZJRk8oKQliZmluX3JlYWQxNihVU0JfRVAwX0ZJRk8pCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMF9GSUZPKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUDBfRklGTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMV9GSUZPKCkJYmZpbl9yZWFkMTYoVVNCX0VQMV9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDFfRklGTyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVAxX0ZJRk8sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDJfRklGTygpCWJmaW5fcmVhZDE2KFVTQl9FUDJfRklGTykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAyX0ZJRk8odmFsKQliZmluX3dyaXRlMTYoVVNCX0VQMl9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAzX0ZJRk8oKQliZmluX3JlYWQxNihVU0JfRVAzX0ZJRk8pCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQM19GSUZPKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUDNfRklGTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNF9GSUZPKCkJYmZpbl9yZWFkMTYoVVNCX0VQNF9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDRfRklGTyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVA0X0ZJRk8sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDVfRklGTygpCWJmaW5fcmVhZDE2KFVTQl9FUDVfRklGTykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA1X0ZJRk8odmFsKQliZmluX3dyaXRlMTYoVVNCX0VQNV9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA2X0ZJRk8oKQliZmluX3JlYWQxNihVU0JfRVA2X0ZJRk8pCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNl9GSUZPKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUDZfRklGTywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQN19GSUZPKCkJYmZpbl9yZWFkMTYoVVNCX0VQN19GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDdfRklGTyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVA3X0ZJRk8sIHZhbCkKLQotLyogVVNCIE9URyBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX0RFVl9DVEwoKQkJYmZpbl9yZWFkMTYoVVNCX09UR19ERVZfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfREVWX0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX09UR19ERVZfQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX1ZCVVNfSVJRKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfVkJVU19JUlEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19WQlVTX0lSUSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfT1RHX1ZCVVNfSVJRLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX1ZCVVNfTUFTSygpCQliZmluX3JlYWQxNihVU0JfT1RHX1ZCVVNfTUFTSykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX1ZCVVNfTUFTSyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfT1RHX1ZCVVNfTUFTSywgdmFsKQotCi0vKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9MSU5LSU5GTygpCWJmaW5fcmVhZDE2KFVTQl9MSU5LSU5GTykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTElOS0lORk8odmFsKQliZmluX3dyaXRlMTYoVVNCX0xJTktJTkZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVlBMRU4oKQkJYmZpbl9yZWFkMTYoVVNCX1ZQTEVOKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9WUExFTih2YWwpCWJmaW5fd3JpdGUxNihVU0JfVlBMRU4sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9IU19FT0YxKCkJCWJmaW5fcmVhZDE2KFVTQl9IU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9IU19FT0YxKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9IU19FT0YxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlNfRU9GMSgpCQliZmluX3JlYWQxNihVU0JfRlNfRU9GMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRlNfRU9GMSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRlNfRU9GMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0xTX0VPRjEoKQkJYmZpbl9yZWFkMTYoVVNCX0xTX0VPRjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0xTX0VPRjEodmFsKQliZmluX3dyaXRlMTYoVVNCX0xTX0VPRjEsIHZhbCkKLQotLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfQVBIWV9DTlRSTCgpCQliZmluX3JlYWQxNihVU0JfQVBIWV9DTlRSTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DTlRSTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0FQSFlfQ05UUkwsIHZhbCkKLQotLyogKEFQSFlfQ0FMSUIgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfQVBIWV9DQUxJQigpCQliZmluX3JlYWQxNihVU0JfQVBIWV9DQUxJQikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DQUxJQih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0FQSFlfQ0FMSUIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NOVFJMMigpCQliZmluX3JlYWQxNihVU0JfQVBIWV9DTlRSTDIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0FQSFlfQ05UUkwyKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DTlRSTDIsIHZhbCkKLQotLyogKFBIWV9URVNUIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1BIWV9URVNUKCkJCWJmaW5fcmVhZDE2KFVTQl9QSFlfVEVTVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUEhZX1RFU1QodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9QSFlfVEVTVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1BMTE9TQ19DVFJMKCkJCWJmaW5fcmVhZDE2KFVTQl9QTExPU0NfQ1RSTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUExMT1NDX0NUUkwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9QTExPU0NfQ1RSTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1NSUF9DTEtESVYoKQkJYmZpbl9yZWFkMTYoVVNCX1NSUF9DTEtESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1NSUF9DTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9TUlBfQ0xLRElWLCB2YWwpCi0KLS8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDAgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWElOVEVSVkFMLCB2YWwpCi0KLS8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDEgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYSU5URVJWQUwsIHZhbCkKLQotLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMiBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhJTlRFUlZBTCwgdmFsKQotCi0vKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWElOVEVSVkFMLCB2YWwpCi0KLS8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDQgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYSU5URVJWQUwsIHZhbCkKLQotLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNSBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhJTlRFUlZBTCwgdmFsKQotCi0vKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCA2IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWElOVEVSVkFMLCB2YWwpCi0KLS8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDcgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQV9JTlRFUlJVUFQoKQkJYmZpbl9yZWFkMTYoVVNCX0RNQV9JTlRFUlJVUFQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQodmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQV9JTlRFUlJVUFQsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgMCBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMENPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMENPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMEFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMEFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMEFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDEgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTFDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTFBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMUFERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPVU5USElHSCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCAyIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkFERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTJBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgMyBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BM0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BM0FERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BM0FERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0FERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDQgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNENPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTRDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNEFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTRBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNEFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0QUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNEFERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNENPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNENPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNENPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPVU5USElHSCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCA1IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE1Q09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1QUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE1QUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUFERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgNiBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNkFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNkFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2QUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0FERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTdBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0FERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3QUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0FERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPVU5USElHSCwgdmFsKQotCi0vKiBLZXliZmluX3JlYWRfKClhZCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfS1BBRF9DVEwoKQkJYmZpbl9yZWFkMTYoS1BBRF9DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9DVEwodmFsKQliZmluX3dyaXRlMTYoS1BBRF9DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0tQQURfUFJFU0NBTEUoKQliZmluX3JlYWQxNihLUEFEX1BSRVNDQUxFKQotI2RlZmluZSBiZmluX3dyaXRlX0tQQURfUFJFU0NBTEUodmFsKQliZmluX3dyaXRlMTYoS1BBRF9QUkVTQ0FMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfS1BBRF9NU0VMKCkJCWJmaW5fcmVhZDE2KEtQQURfTVNFTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX01TRUwodmFsKQliZmluX3dyaXRlMTYoS1BBRF9NU0VMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1JPV0NPTCgpCQliZmluX3JlYWQxNihLUEFEX1JPV0NPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1JPV0NPTCh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX1JPV0NPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfS1BBRF9TVEFUKCkJCWJmaW5fcmVhZDE2KEtQQURfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1NUQVQodmFsKQliZmluX3dyaXRlMTYoS1BBRF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1NPRlRFVkFMKCkJYmZpbl9yZWFkMTYoS1BBRF9TT0ZURVZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1NPRlRFVkFMKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfU09GVEVWQUwsIHZhbCkKLQotLyogUGl4ZWwgQ29tYmZpbl9yZWFkXygpb3NpdG9yIChQSVhDKSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19DVEwoKQkJYmZpbl9yZWFkMTYoUElYQ19DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19DVEwodmFsKQliZmluX3dyaXRlMTYoUElYQ19DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfUFBMKCkJCWJmaW5fcmVhZDE2KFBJWENfUFBMKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfUFBMKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfUFBMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0xQRigpCQliZmluX3JlYWQxNihQSVhDX0xQRikKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0xQRih2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0xQRiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19BSFNUQVJUKCkJYmZpbl9yZWFkMTYoUElYQ19BSFNUQVJUKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQUhTVEFSVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FIU1RBUlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQUhFTkQoKQkJYmZpbl9yZWFkMTYoUElYQ19BSEVORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FIRU5EKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQUhFTkQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQVZTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQVZTVEFSVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FWU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BVlNUQVJULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FWRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQVZFTkQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BVkVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FWRU5ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FUUkFOU1AoKQliZmluX3JlYWQxNihQSVhDX0FUUkFOU1ApCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BVFJBTlNQKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQVRSQU5TUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19CSFNUQVJUKCkJYmZpbl9yZWFkMTYoUElYQ19CSFNUQVJUKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQkhTVEFSVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JIU1RBUlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQkhFTkQoKQkJYmZpbl9yZWFkMTYoUElYQ19CSEVORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JIRU5EKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQkhFTkQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQlZTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQlZTVEFSVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JWU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CVlNUQVJULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JWRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQlZFTkQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVkVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JWRU5ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JUUkFOU1AoKQliZmluX3JlYWQxNihQSVhDX0JUUkFOU1ApCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVFJBTlNQKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQlRSQU5TUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19JTlRSU1RBVCgpCWJmaW5fcmVhZDE2KFBJWENfSU5UUlNUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19JTlRSU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0lOVFJTVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX1JZQ09OKCkJCWJmaW5fcmVhZDMyKFBJWENfUllDT04pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19SWUNPTih2YWwpCWJmaW5fd3JpdGUzMihQSVhDX1JZQ09OLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0dVQ09OKCkJCWJmaW5fcmVhZDMyKFBJWENfR1VDT04pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19HVUNPTih2YWwpCWJmaW5fd3JpdGUzMihQSVhDX0dVQ09OLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JWQ09OKCkJCWJmaW5fcmVhZDMyKFBJWENfQlZDT04pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVkNPTih2YWwpCWJmaW5fd3JpdGUzMihQSVhDX0JWQ09OLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0NDQklBUygpCQliZmluX3JlYWQzMihQSVhDX0NDQklBUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0NDQklBUyh2YWwpCWJmaW5fd3JpdGUzMihQSVhDX0NDQklBUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19UQygpCQliZmluX3JlYWQzMihQSVhDX1RDKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfVEModmFsKQkJYmZpbl93cml0ZTMyKFBJWENfVEMsIHZhbCkKLQotLyogSGFuZHNoYWtlIE1ETUEgMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ0lOSVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDSU5JVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0JDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfQkNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9CQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9CQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ1VSR0VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNVUkdFTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDVVJHRU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNVUkdFTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ09WRVJGTE9XKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ09WRVJGTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09WRVJGTE9XKHZhbCkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09WRVJGTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0JDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfQkNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9CQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9CQ09VTlQsIHZhbCkKLQotLyogSGFuZHNoYWtlIE1ETUEgMSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE1ETUExX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ0lOSVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDSU5JVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0JDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfQkNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9CQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ1VSR0VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNVUkdFTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDVVJHRU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNVUkdFTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ09WRVJGTE9XKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ09WRVJGTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09WRVJGTE9XKHZhbCkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09WRVJGTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0JDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfQkNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9CQ09VTlQsIHZhbCkKLQogI2VuZGlmIC8qIF9DREVGX0JGNTQ4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oCmluZGV4IDM0Yzg0YzcuLjgwMjAxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaApAQCAtMTgsMTY1ICsxOCw4IEBACiAvKiBpbmNsdWRlIGNkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IGJmaW5fcmVhZF8oKXJvY2Vzc29ycyAqLwogI2luY2x1ZGUgImNkZWZCRjU0eF9iYXNlLmgiCiAKLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0OSB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KLQotLyogVGltZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI4X0NPTkZJRykKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjhfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjhfQ09VTlRFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI4X0NPVU5URVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI4X1BFUklPRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjhfUEVSSU9ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI4X1dJRFRIKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI4X1dJRFRILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSOV9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI5X0NPTkZJRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI5X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI5X0NPVU5URVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSOV9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSOV9QRVJJT0QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI5X1BFUklPRCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVI5X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSOV9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSOV9XSURUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVIxMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIxMF9DT05GSUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSMTBfQ09ORklHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIxMF9DT1VOVEVSKQotI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMTBfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxMF9DT1VOVEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX1BFUklPRCgpCQliZmluX3JlYWQzMihUSU1FUjEwX1BFUklPRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxMF9QRVJJT0QsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIxMF9XSURUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX1dJRFRIKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjEwX1dJRFRILCB2YWwpCi0KLS8qIFRpbWVyIEdyb3ViZmluX3JlYWRfKCkgb2YgMyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9FTkFCTEUxKCkJCWJmaW5fcmVhZDE2KFRJTUVSX0VOQUJMRTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRU5BQkxFMSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVElNRVJfRElTQUJMRTEoKQkJYmZpbl9yZWFkMTYoVElNRVJfRElTQUJMRTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRTEodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSX0RJU0FCTEUxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9TVEFUVVMxKCkJCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1RBVFVTMSh2YWwpCQliZmluX3dyaXRlMzIoVElNRVJfU1RBVFVTMSwgdmFsKQotCi0vKiBTUE9SVDAgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENMS0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfVEZTRElWKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9URlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SQ1IxKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNSMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SQ1IyKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNSMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDTEtESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ0xLRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SRlNESVYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JGU0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9TVEFUKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfU1RBVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX0NITkwoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9DSE5MKQotI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9DSE5MKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfQ0hOTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01DTUMxKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9NQ01DMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTUNNQzEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9NQ01DMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01DTUMyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9NQ01DMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTUNNQzIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9NQ01DMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMywgdmFsKQotCi0vKiBFUFBJMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEVQUEkwX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfSENPVU5UKCkJCWJmaW5fcmVhZDE2KEVQUEkwX0hDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9IQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX0hDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfSERFTEFZKCkJCWJmaW5fcmVhZDE2KEVQUEkwX0hERUxBWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9IREVMQVkodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX0hERUxBWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfVkNPVU5UKCkJCWJmaW5fcmVhZDE2KEVQUEkwX1ZDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9WQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX1ZDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfVkRFTEFZKCkJCWJmaW5fcmVhZDE2KEVQUEkwX1ZERUxBWSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9WREVMQVkodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX1ZERUxBWSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlJBTUUoKQkJCWJmaW5fcmVhZDE2KEVQUEkwX0ZSQU1FKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZSQU1FKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMF9GUkFNRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfTElORSgpCQkJYmZpbl9yZWFkMTYoRVBQSTBfTElORSkKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9MSU5FKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMF9MSU5FLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9DTEtESVYoKQkJYmZpbl9yZWFkMTYoRVBQSTBfQ0xLRElWKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfQ0xLRElWLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9DT05UUk9MKCkJCWJmaW5fcmVhZDMyKEVQUEkwX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMxV19IQkwoKQkJYmZpbl9yZWFkMzIoRVBQSTBfRlMxV19IQkwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMxV19IQkwodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkwX0ZTMVdfSEJMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUzFQX0FWUEwoKQkJYmZpbl9yZWFkMzIoRVBQSTBfRlMxUF9BVlBMKQotI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZTMVBfQVZQTCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfRlMxUF9BVlBMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUzJXX0xWQigpCQliZmluX3JlYWQzMihFUFBJMF9GUzJXX0xWQikKLSNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzJXX0xWQih2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfRlMyV19MVkIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMlBfTEFWRigpCQliZmluX3JlYWQzMihFUFBJMF9GUzJQX0xBVkYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMyUF9MQVZGKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMF9GUzJQX0xBVkYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0NMSVAoKQkJCWJmaW5fcmVhZDMyKEVQUEkwX0NMSVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ0xJUCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfQ0xJUCwgdmFsKQotCi0vKiBVQVJUMiBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfRExMKCkJCQliZmluX3JlYWQxNihVQVJUMl9ETEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfRExMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMl9ETEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0RMSCgpCQkJYmZpbl9yZWFkMTYoVUFSVDJfRExIKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0RMSCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfRExILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9HQ1RMKCkJCQliZmluX3JlYWQxNihVQVJUMl9HQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0dDVEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX0dDVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0xDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDJfTENSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0xDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfTENSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9NQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQyX01DUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9NQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX01DUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfTFNSKCkJCQliZmluX3JlYWQxNihVQVJUMl9MU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfTFNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMl9MU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX01TUigpCQkJYmZpbl9yZWFkMTYoVUFSVDJfTVNSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX01TUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfTVNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9TQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQyX1NDUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9TQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX1NDUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfSUVSX1NFVCgpCQliZmluX3JlYWQxNihVQVJUMl9JRVJfU0VUKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0lFUl9TRVQodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX0lFUl9TRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0lFUl9DTEVBUigpCQliZmluX3JlYWQxNihVQVJUMl9JRVJfQ0xFQVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfSUVSX0NMRUFSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMl9JRVJfQ0xFQVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX1JCUigpCQkJYmZpbl9yZWFkMTYoVUFSVDJfUkJSKQotI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX1JCUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfUkJSLCB2YWwpCi0KLS8qIFR3byBXaXJlIEludGVyZmFjZSBSZWdpc3RlcnMgKFRXSTEpICovCi0KLS8qIFNQSTIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfQ1RMKCkJCWJmaW5fcmVhZDE2KFNQSTJfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfQ1RMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUEkyX0ZMRygpCQliZmluX3JlYWQxNihTUEkyX0ZMRykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX0ZMRyh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX0ZMRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJMl9TVEFUKCkJCWJmaW5fcmVhZDE2KFNQSTJfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX1NUQVQodmFsKQliZmluX3dyaXRlMTYoU1BJMl9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUEkyX1REQlIoKQkJYmZpbl9yZWFkMTYoU1BJMl9UREJSKQotI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfVERCUih2YWwpCWJmaW5fd3JpdGUxNihTUEkyX1REQlIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfUkRCUigpCQliZmluX3JlYWQxNihTUEkyX1JEQlIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1BJMl9SREJSKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfUkRCUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1BJMl9CQVVEKCkJCWJmaW5fcmVhZDE2KFNQSTJfQkFVRCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX0JBVUQodmFsKQliZmluX3dyaXRlMTYoU1BJMl9CQVVELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TUEkyX1NIQURPVygpCQliZmluX3JlYWQxNihTUEkyX1NIQURPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX1NIQURPVyh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX1NIQURPVywgdmFsKQorLyogVGhlIEJGNTQ5IGlzIGxpa2UgdGhlIEJGNTQ0LCBidXQgaGFzIE1YVlIgKi8KKyNpbmNsdWRlICJjZGVmQkY1NDcuaCIKIAogLyogTVhWUiBSZWdpc3RlcnMgKi8KIApAQCAtNDY0LDEzNzYgKzMwNyw0IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1NDTEtfQ05UKCkJCWJmaW5fcmVhZDE2KE1YVlJfU0NMS19DTlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9TQ0xLX0NOVCh2YWwpCQliZmluX3dyaXRlMTYoTVhWUl9TQ0xLX0NOVCwgdmFsKQogCi0vKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAxIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01DMSgpCQliZmluX3JlYWQxNihDQU4xX01DMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01DMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01DMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NRDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVFJTMSgpCQliZmluX3JlYWQxNihDQU4xX1RSUzEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9UUlMxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVFJTMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlIxKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJSMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUjEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlIxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RBMSgpCQliZmluX3JlYWQxNihDQU4xX1RBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RBMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BQTEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfUk1QMSgpCQliZmluX3JlYWQxNihDQU4xX1JNUDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9STVAxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfUk1QMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STUwxKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1MMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNTDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STUwxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CVElGMSgpCQliZmluX3JlYWQxNihDQU4xX01CVElGMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CVElGMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CVElGMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQlJJRjEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQlJJRjEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQlJJRjEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQlJJRjEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJJTTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQklNMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CSU0xKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJJTTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfUkZIMSgpCQliZmluX3JlYWQxNihDQU4xX1JGSDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9SRkgxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfUkZIMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9PUFNTMSgpCQliZmluX3JlYWQxNihDQU4xX09QU1MxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfT1BTUzEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9PUFNTMSwgdmFsKQotCi0vKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01DMigpCQliZmluX3JlYWQxNihDQU4xX01DMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01DMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01DMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NRDIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NRDIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NRDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NRDIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVFJTMigpCQliZmluX3JlYWQxNihDQU4xX1RSUzIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9UUlMyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVFJTMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlIyKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUjIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlIyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RBMigpCQliZmluX3JlYWQxNihDQU4xX1RBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RBMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BQTIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfUk1QMigpCQliZmluX3JlYWQxNihDQU4xX1JNUDIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9STVAyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfUk1QMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STUwyKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1MMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNTDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STUwyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CVElGMigpCQliZmluX3JlYWQxNihDQU4xX01CVElGMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CVElGMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CVElGMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQlJJRjIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQlJJRjIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQlJJRjIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQlJJRjIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJJTTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQklNMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CSU0yKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJJTTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfUkZIMigpCQliZmluX3JlYWQxNihDQU4xX1JGSDIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9SRkgyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfUkZIMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9PUFNTMigpCQliZmluX3JlYWQxNihDQU4xX09QU1MyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfT1BTUzIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9PUFNTMiwgdmFsKQotCi0vKiBDQU4gQ29udHJvbGxlciAxIENsb2NrL0ludGVycnViZmluX3JlYWRfKCl0L0NvdW50ZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQ0xPQ0soKQkJYmZpbl9yZWFkMTYoQ0FOMV9DTE9DSykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0NMT0NLKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQ0xPQ0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVElNSU5HKCkJCWJmaW5fcmVhZDE2KENBTjFfVElNSU5HKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVElNSU5HKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVElNSU5HLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0RFQlVHKCkJCWJmaW5fcmVhZDE2KENBTjFfREVCVUcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9ERUJVRyh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0RFQlVHLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1NUQVRVUygpCQliZmluX3JlYWQxNihDQU4xX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1NUQVRVUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DRUMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9DRUMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9DRUModmFsKQliZmluX3dyaXRlMTYoQ0FOMV9DRUMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfR0lTKCkJCWJmaW5fcmVhZDE2KENBTjFfR0lTKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfR0lTKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfR0lTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0dJTSgpCQliZmluX3JlYWQxNihDQU4xX0dJTSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0dJTSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0dJTSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9HSUYoKQkJYmZpbl9yZWFkMTYoQ0FOMV9HSUYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9HSUYodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9HSUYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQ09OVFJPTCgpCWJmaW5fcmVhZDE2KENBTjFfQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0NPTlRST0wodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0lOVFIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9JTlRSKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfSU5UUih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0lOVFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJURCgpCQliZmluX3JlYWQxNihDQU4xX01CVEQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQlREKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJURCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9FV1IoKQkJYmZpbl9yZWFkMTYoQ0FOMV9FV1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9FV1IodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9FV1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfRVNSKCkJCWJmaW5fcmVhZDE2KENBTjFfRVNSKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfRVNSKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfRVNSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1VDQ05UKCkJCWJmaW5fcmVhZDE2KENBTjFfVUNDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9VQ0NOVCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1VDQ05ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1VDUkMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9VQ1JDKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVUNSQyh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1VDUkMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNDTkYoKQkJYmZpbl9yZWFkMTYoQ0FOMV9VQ0NORikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1VDQ05GKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNDTkYsIHZhbCkKLQotLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2ViZmluX3JlYWRfKCl0YW5jZSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAwTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDBMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wMEwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAwTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAwSCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDBIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wMEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAwSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAxTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDFMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wMUwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAxTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAxSCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDFIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wMUgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAxSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAyTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDJMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wMkwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAyTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAySCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDJIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wMkgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAySCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAzTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDNMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wM0wodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAzTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTAzSCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDNIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wM0godmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTAzSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA0TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDRMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wNEwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA0TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA0SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDRIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wNEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA0SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA1TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDVMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wNUwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA1TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA1SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDVIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wNUgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA1SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA2TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDZMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wNkwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA2TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA2SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDZIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wNkgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA2SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA3TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDdMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wN0wodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA3TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA3SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDdIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wN0godmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA3SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA4TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDhMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wOEwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA4TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA4SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDhIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wOEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA4SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA5TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDlMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wOUwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA5TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTA5SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMDlIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0wOUgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTA5SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTEwTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTBMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xMEwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTEwTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTEwSCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTBIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xMEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTEwSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTExTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTFMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xMUwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTExTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTExSCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTFIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xMUgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTExSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTEyTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTJMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xMkwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTEyTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTEySCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTJIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xMkgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTEySCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTEzTCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTNMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xM0wodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTEzTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTEzSCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTNIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xM0godmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTEzSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTE0TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTRMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xNEwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTE0TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTE0SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTRIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xNEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTE0SCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTE1TCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTVMKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xNUwodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTE1TCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9BTTE1SCgpCQliZmluX3JlYWQxNihDQU4xX0FNMTVIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQU0xNUgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9BTTE1SCwgdmFsKQotCi0vKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQWNjZWJmaW5fcmVhZF8oKXRhbmNlIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTZMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNkwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTZMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTZIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNkgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTZILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTdMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xN0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTdMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTdIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xN0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMThMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xOEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMThMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMThIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xOEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMThILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTlMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xOUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTlMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTlIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xOUgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTlILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yMEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjBMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yMEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjBILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yMUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yMUgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjFILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yMkwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjJMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yMkgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjJILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yM0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjNMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yM0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTIzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjNILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yNEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjRMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yNEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjRILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yNUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjVMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yNUgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjVILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjZMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yNkwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjZMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjZIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yNkgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjZILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjdMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yN0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjdMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjdIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yN0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjhMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yOEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjhMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjhIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yOEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjhILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjlMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yOUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjlMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMjlIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0yOUgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTI5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMjlILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMzBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0zMEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTMwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMzBMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMzBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0zMEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTMwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMzBILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMzFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0zMUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTMxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMzFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMzFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0zMUgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTMxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMzFILCB2YWwpCi0KLS8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEYXRhIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMF9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMF9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMF9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAwX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDFfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDFfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAxX0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAxX1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAxX0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDJfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDJfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDJfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDJfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDJfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDJfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDJfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDJfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwM19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwM19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwM19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwM19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwM19MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwM19USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwM19JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAzX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwM19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA0X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA0X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDRfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA0X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDRfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA0X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA0X0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA0X1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA0X0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDRfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA0X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDVfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDVfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDVfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDVfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDVfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDVfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDVfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDVfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNl9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNl9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNl9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA2X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA3X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA3X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDdfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA3X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDdfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA3X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA3X0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA3X1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA3X0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDdfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA3X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDhfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDhfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDhfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDhfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDhfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDhfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDhfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDhfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOV9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOV9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOV9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA5X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTBfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTBfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEwX0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEwX1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEwX0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTFfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTFfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTFfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMl9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMl9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMl9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEyX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEzX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEzX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTNfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEzX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTNfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEzX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEzX0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEzX1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEzX0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTNfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEzX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTRfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTRfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTRfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTRfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTRfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTRfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTRfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTRfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNV9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNV9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNV9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE1X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9JRDEsIHZhbCkKLQotLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IERhdGEgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE2X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE2X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTZfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE2X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTZfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE2X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE2X0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE2X1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE2X0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTZfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE2X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTdfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTdfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTdfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTdfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTdfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTdfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTdfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxN19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTdfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOF9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMThfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOF9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMThfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOF9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE4X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMThfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE5X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE5X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTlfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE5X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTlfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE5X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE5X0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE5X1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE5X0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTlfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE5X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjBfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjBfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjBfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjBfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjBfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjBfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjBfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjBfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMV9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMV9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMV9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIxX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIyX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIyX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjJfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIyX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjJfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIyX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIyX0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIyX1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIyX0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjJfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIyX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjNfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjNfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjNfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjNfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjNfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjNfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjNfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyM19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjNfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNF9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNF9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNF9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI0X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI1X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI1X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjVfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI1X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjVfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI1X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI1X0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI1X1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI1X0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjVfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI1X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjZfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjZfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjZfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjZfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjZfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjZfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjZfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjZfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyN19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyN19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyN19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyN19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyN19MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyN19USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyN19JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI3X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyN19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI4X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI4X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjhfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI4X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjhfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI4X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI4X0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI4X1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI4X0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjhfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI4X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X0lEMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9EQVRBMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjlfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjlfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9EQVRBMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9EQVRBMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjlfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9EQVRBMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9EQVRBMykKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjlfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9EQVRBMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjlfTEVOR1RIKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0xFTkdUSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjlfVElNRVNUQU1QKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X1RJTUVTVEFNUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjlfSUQwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9JRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0lEMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjlfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0RBVEEwKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0RBVEEwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0RBVEExKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0RBVEEyLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0RBVEEzKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0RBVEEzLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMF9MRU5HVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfTEVOR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMF9USU1FU1RBTVApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfVElNRVNUQU1QLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMF9JRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0lEMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMwX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9JRDEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfREFUQTAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfREFUQTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfREFUQTEsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMzFfREFUQTIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMzFfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfREFUQTMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMxX0xFTkdUSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9MRU5HVEgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMxX1RJTUVTVEFNUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9USU1FU1RBTVAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMxX0lEMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfSUQwLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9JRDEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX0lEMSwgdmFsKQotCi0vKiBBVEFQSSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfQ09OVFJPTCgpCQliZmluX3JlYWQxNihBVEFQSV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1NUQVRVUygpCQliZmluX3JlYWQxNihBVEFQSV9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0RFVl9BRERSKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RFVl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RFVl9BRERSKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9ERVZfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfREVWX1RYQlVGKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RFVl9UWEJVRikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ERVZfVFhCVUYodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0RFVl9UWEJVRiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfREVWX1JYQlVGKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RFVl9SWEJVRikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ERVZfUlhCVUYodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0RFVl9SWEJVRiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfSU5UX01BU0soKQkJYmZpbl9yZWFkMTYoQVRBUElfSU5UX01BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfSU5UX01BU0sodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0lOVF9NQVNLLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9JTlRfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0lOVF9TVEFUVVMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfSU5UX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9JTlRfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9YRkVSX0xFTigpCQliZmluX3JlYWQxNihBVEFQSV9YRkVSX0xFTikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9YRkVSX0xFTih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfWEZFUl9MRU4sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0xJTkVfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0xJTkVfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0xJTkVfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX0xJTkVfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9TTV9TVEFURSgpCQliZmluX3JlYWQxNihBVEFQSV9TTV9TVEFURSkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9TTV9TVEFURSh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfU01fU1RBVEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1RFUk1JTkFURSgpCQliZmluX3JlYWQxNihBVEFQSV9URVJNSU5BVEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVEVSTUlOQVRFKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9URVJNSU5BVEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1BJT19URlJDTlQoKQkJYmZpbl9yZWFkMTYoQVRBUElfUElPX1RGUkNOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9QSU9fVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1BJT19URlJDTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0RNQV9URlJDTlQoKQkJYmZpbl9yZWFkMTYoQVRBUElfRE1BX1RGUkNOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ETUFfVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX0RNQV9URlJDTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VNQUlOX1RGUkNOVCgpCQliZmluX3JlYWQxNihBVEFQSV9VTUFJTl9URlJDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVU1BSU5fVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VNQUlOX1RGUkNOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVURNQU9VVF9URlJDTlQoKQliZmluX3JlYWQxNihBVEFQSV9VRE1BT1VUX1RGUkNOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VRE1BT1VUX1RGUkNOVCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VRE1BT1VUX1RGUkNOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUkVHX1RJTV8wKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1JFR19USU1fMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9SRUdfVElNXzAodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1JFR19USU1fMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUElPX1RJTV8wKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1BJT19USU1fMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9QSU9fVElNXzAodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1BJT19USU1fMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUElPX1RJTV8xKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1BJT19USU1fMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9QSU9fVElNXzEodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1BJT19USU1fMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTVVMVElfVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfTVVMVElfVElNXzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTVVMVElfVElNXzAodmFsKQliZmluX3dyaXRlMTYoQVRBUElfTVVMVElfVElNXzAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX01VTFRJX1RJTV8xKCkJCWJmaW5fcmVhZDE2KEFUQVBJX01VTFRJX1RJTV8xKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX01VTFRJX1RJTV8xKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX01VTFRJX1RJTV8xLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9NVUxUSV9USU1fMigpCQliZmluX3JlYWQxNihBVEFQSV9NVUxUSV9USU1fMikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9NVUxUSV9USU1fMih2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9NVUxUSV9USU1fMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzAodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VMVFJBX1RJTV8xKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VMVFJBX1RJTV8xKQotI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VMVFJBX1RJTV8xKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VMVFJBX1RJTV8xLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMigpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMikKLSNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMih2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzMoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzModmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzMsIHZhbCkKLQotLyogU0RIIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUFdSX0NUTCgpCQliZmluX3JlYWQxNihTREhfUFdSX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUFdSX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUFdSX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0NMS19DVEwoKQkJYmZpbl9yZWFkMTYoU0RIX0NMS19DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0NMS19DVEwodmFsKQliZmluX3dyaXRlMTYoU0RIX0NMS19DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9BUkdVTUVOVCgpCWJmaW5fcmVhZDMyKFNESF9BUkdVTUVOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfQVJHVU1FTlQodmFsKQliZmluX3dyaXRlMzIoU0RIX0FSR1VNRU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfQ09NTUFORCgpCQliZmluX3JlYWQxNihTREhfQ09NTUFORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ09NTUFORCh2YWwpCWJmaW5fd3JpdGUxNihTREhfQ09NTUFORCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BfQ01EKCkJYmZpbl9yZWFkMTYoU0RIX1JFU1BfQ01EKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQX0NNRCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUkVTUF9DTUQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTAoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UwKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTAodmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMSgpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTEpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMSh2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UyKCkJYmZpbl9yZWFkMzIoU0RIX1JFU1BPTlNFMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUE9OU0UyKHZhbCkJYmZpbl93cml0ZTMyKFNESF9SRVNQT05TRTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTMoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UzKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTModmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfVElNRVIoKQliZmluX3JlYWQzMihTREhfREFUQV9USU1FUikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfREFUQV9USU1FUih2YWwpCWJmaW5fd3JpdGUzMihTREhfREFUQV9USU1FUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfTEdUSCgpCWJmaW5fcmVhZDE2KFNESF9EQVRBX0xHVEgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfTEdUSCh2YWwpCWJmaW5fd3JpdGUxNihTREhfREFUQV9MR1RILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9DVEwoKQliZmluX3JlYWQxNihTREhfREFUQV9DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNESF9EQVRBX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfQ05UKCkJYmZpbl9yZWFkMTYoU0RIX0RBVEFfQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX0NOVCh2YWwpCWJmaW5fd3JpdGUxNihTREhfREFUQV9DTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVMoKQkJYmZpbl9yZWFkMzIoU0RIX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTMyKFNESF9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVNfQ0xSKCkJYmZpbl9yZWFkMTYoU0RIX1NUQVRVU19DTFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1NUQVRVU19DTFIodmFsKQliZmluX3dyaXRlMTYoU0RIX1NUQVRVU19DTFIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9NQVNLMCgpCQliZmluX3JlYWQzMihTREhfTUFTSzApCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX01BU0swKHZhbCkJYmZpbl93cml0ZTMyKFNESF9NQVNLMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX01BU0sxKCkJCWJmaW5fcmVhZDMyKFNESF9NQVNLMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfTUFTSzEodmFsKQliZmluX3dyaXRlMzIoU0RIX01BU0sxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfRklGT19DTlQoKQliZmluX3JlYWQxNihTREhfRklGT19DTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0ZJRk9fQ05UKHZhbCkJYmZpbl93cml0ZTE2KFNESF9GSUZPX0NOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX0ZJRk8oKQkJYmZpbl9yZWFkMzIoU0RIX0ZJRk8pCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0ZJRk8odmFsKQliZmluX3dyaXRlMzIoU0RIX0ZJRk8sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9FX1NUQVRVUygpCWJmaW5fcmVhZDE2KFNESF9FX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfRV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoU0RIX0VfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfRV9NQVNLKCkJCWJmaW5fcmVhZDE2KFNESF9FX01BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0VfTUFTSyh2YWwpCWJmaW5fd3JpdGUxNihTREhfRV9NQVNLLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfQ0ZHKCkJCWJmaW5fcmVhZDE2KFNESF9DRkcpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0NGRyh2YWwpCQliZmluX3dyaXRlMTYoU0RIX0NGRywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1JEX1dBSVRfRU4oKQliZmluX3JlYWQxNihTREhfUkRfV0FJVF9FTikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkRfV0FJVF9FTih2YWwpCWJmaW5fd3JpdGUxNihTREhfUkRfV0FJVF9FTiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDAoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDAodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQxKCkJCWJmaW5fcmVhZDE2KFNESF9QSUQxKQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQxKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQxLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMigpCQliZmluX3JlYWQxNihTREhfUElEMikKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMih2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDMoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDModmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ0KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ0KQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ0KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ0LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9TREhfUElENSgpCQliZmluX3JlYWQxNihTREhfUElENSkKLSNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElENSh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElENSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDYoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDYodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDYsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ3KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ3KQotI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ3KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ3LCB2YWwpCi0KLS8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfSE9TVF9DT05UUk9MKCkJYmZpbl9yZWFkMTYoSE9TVF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfQ09OVFJPTCh2YWwpCWJmaW5fd3JpdGUxNihIT1NUX0NPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEhPU1RfU1RBVFVTKQotI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KEhPU1RfU1RBVFVTLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1RJTUVPVVQoKQliZmluX3JlYWQxNihIT1NUX1RJTUVPVVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9USU1FT1VUKHZhbCkJYmZpbl93cml0ZTE2KEhPU1RfVElNRU9VVCwgdmFsKQotCi0vKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZBRERSKCkJCWJmaW5fcmVhZDE2KFVTQl9GQUREUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRkFERFIodmFsKQliZmluX3dyaXRlMTYoVVNCX0ZBRERSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUE9XRVIoKQkJYmZpbl9yZWFkMTYoVVNCX1BPV0VSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QT1dFUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfUE9XRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFgoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlRYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlgoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJSWCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFhFKCkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVFhFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFhFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFhFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlJYRSgpCQliZmluX3JlYWQxNihVU0JfSU5UUlJYRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlJYRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0IoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJVU0IodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVVNCRSgpCWJmaW5fcmVhZDE2KFVTQl9JTlRSVVNCRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQkUodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0JFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlJBTUUoKQkJYmZpbl9yZWFkMTYoVVNCX0ZSQU1FKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GUkFNRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRlJBTUUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTkRFWCgpCQliZmluX3JlYWQxNihVU0JfSU5ERVgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOREVYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTkRFWCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RFU1RNT0RFKCkJYmZpbl9yZWFkMTYoVVNCX1RFU1RNT0RFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9URVNUTU9ERSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfVEVTVE1PREUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9HTE9CSU5UUigpCWJmaW5fcmVhZDE2KFVTQl9HTE9CSU5UUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfR0xPQklOVFIodmFsKQliZmluX3dyaXRlMTYoVVNCX0dMT0JJTlRSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfR0xPQkFMX0NUTCgpCWJmaW5fcmVhZDE2KFVTQl9HTE9CQUxfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9HTE9CQUxfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9HTE9CQUxfQ1RMLCB2YWwpCi0KLS8qIFVTQiBQYWNrZXQgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYX01BWF9QQUNLRVQoKQkJYmZpbl9yZWFkMTYoVVNCX1RYX01BWF9QQUNLRVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYX01BWF9QQUNLRVQodmFsKQliZmluX3dyaXRlMTYoVVNCX1RYX01BWF9QQUNLRVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9DU1IwKCkJCQliZmluX3JlYWQxNihVU0JfQ1NSMCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQ1NSMCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0NTUjAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWENTUigpCQkJYmZpbl9yZWFkMTYoVVNCX1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWENTUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhfTUFYX1BBQ0tFVCgpCQliZmluX3JlYWQxNihVU0JfUlhfTUFYX1BBQ0tFVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhfTUFYX1BBQ0tFVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfUlhfTUFYX1BBQ0tFVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYQ1NSKCkJCQliZmluX3JlYWQxNihVU0JfUlhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYQ1NSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9DT1VOVDAoKQkJCWJmaW5fcmVhZDE2KFVTQl9DT1VOVDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0NPVU5UMCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0NPVU5UMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFVTQl9SWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWENPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYVFlQRSgpCQkJYmZpbl9yZWFkMTYoVVNCX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhUWVBFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfTkFLTElNSVQwKCkJCWJmaW5fcmVhZDE2KFVTQl9OQUtMSU1JVDApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX05BS0xJTUlUMCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX05BS0xJTUlUMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYSU5URVJWQUwoKQkJYmZpbl9yZWFkMTYoVVNCX1RYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYSU5URVJWQUwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhUWVBFKCkJCQliZmluX3JlYWQxNihVU0JfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWFRZUEUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWElOVEVSVkFMKCkJCWJmaW5fcmVhZDE2KFVTQl9SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWElOVEVSVkFMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFVTQl9UWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWENPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhDT1VOVCwgdmFsKQotCi0vKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCBGSUZPIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAwX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQMF9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDBfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQMF9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAxX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQMV9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDFfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQMV9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAyX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQMl9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDJfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQMl9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAzX0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQM19GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDNfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQM19GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA0X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQNF9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDRfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQNF9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA1X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQNV9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDVfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQNV9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA2X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQNl9GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDZfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQNl9GSUZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA3X0ZJRk8oKQkJYmZpbl9yZWFkMTYoVVNCX0VQN19GSUZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDdfRklGTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0VQN19GSUZPLCB2YWwpCi0KLS8qIFVTQiBPVEcgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19ERVZfQ1RMKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfREVWX0NUTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX0RFVl9DVEwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9PVEdfREVWX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19WQlVTX0lSUSgpCQliZmluX3JlYWQxNihVU0JfT1RHX1ZCVVNfSVJRKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfVkJVU19JUlEodmFsKQliZmluX3dyaXRlMTYoVVNCX09UR19WQlVTX0lSUSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19WQlVTX01BU0soKQkJYmZpbl9yZWFkMTYoVVNCX09UR19WQlVTX01BU0spCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19WQlVTX01BU0sodmFsKQliZmluX3dyaXRlMTYoVVNCX09UR19WQlVTX01BU0ssIHZhbCkKLQotLyogVVNCIFBoeSBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfTElOS0lORk8oKQkJYmZpbl9yZWFkMTYoVVNCX0xJTktJTkZPKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MSU5LSU5GTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0xJTktJTkZPLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfVlBMRU4oKQkJCWJmaW5fcmVhZDE2KFVTQl9WUExFTikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVlBMRU4odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9WUExFTiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0hTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9IU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9IU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSFNfRU9GMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9GU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRlNfRU9GMSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0xTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9MU19FT0YxKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTFNfRU9GMSwgdmFsKQotCi0vKiAoQVBIWV9DTlRSTCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NOVFJMKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NOVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DTlRSTCwgdmFsKQotCi0vKiAoQVBIWV9DQUxJQiBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NBTElCKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NBTElCKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NBTElCKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DQUxJQiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ05UUkwyKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMMikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DTlRSTDIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NOVFJMMiwgdmFsKQotCi0vKiAoUEhZX1RFU1QgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUEhZX1RFU1QoKQkJYmZpbl9yZWFkMTYoVVNCX1BIWV9URVNUKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QSFlfVEVTVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BIWV9URVNULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfUExMT1NDX0NUUkwoKQkJYmZpbl9yZWFkMTYoVVNCX1BMTE9TQ19DVFJMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QTExPU0NfQ1RSTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BMTE9TQ19DVFJMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfU1JQX0NMS0RJVigpCQliZmluX3JlYWQxNihVU0JfU1JQX0NMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfU1JQX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1NSUF9DTEtESVYsIHZhbCkKLQotLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYSU5URVJWQUwsIHZhbCkKLQotLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhJTlRFUlZBTCwgdmFsKQotCi0vKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCAyIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWElOVEVSVkFMLCB2YWwpCi0KLS8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDMgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYSU5URVJWQUwsIHZhbCkKLQotLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhJTlRFUlZBTCwgdmFsKQotCi0vKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWElOVEVSVkFMLCB2YWwpCi0KLS8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWE1BWFApCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWE1BWFAsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWENTUikKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDU1IsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWFRZUEUpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWFRZUEUsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhJTlRFUlZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWElOVEVSVkFMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYSU5URVJWQUwsIHZhbCkKLQotLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWENPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYQ09VTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhNQVhQKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhNQVhQLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDU1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYQ1NSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYTUFYUCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYTUFYUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYQ1NSKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENTUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYVFlQRSkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYVFlQRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWElOVEVSVkFMKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYSU5URVJWQUwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhUWVBFKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhUWVBFLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYSU5URVJWQUwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhJTlRFUlZBTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDT1VOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWENPVU5ULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpCQliZmluX3JlYWQxNihVU0JfRE1BX0lOVEVSUlVQVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BX0lOVEVSUlVQVCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMEFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMEFERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMENPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgMSBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMUFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDIgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkFERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5USElHSCwgdmFsKQotCi0vKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQUREUkxPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0FERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQUREUkxPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0FERFJISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgNCBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNENPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNEFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNEFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNEFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0QUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDUgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1QUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVBRERSSElHSCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSSElHSCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPVU5UTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT1VOVExPVywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT1VOVEhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT1VOVEhJR0gsIHZhbCkKLQotLyogVVNCIENoYW5uZWwgNiBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPTlRST0wsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNkFERFJMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNkFERFJMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZBRERSSElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2QUREUkhJR0gsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT1VOVExPVykKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09VTlRMT1csIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09VTlRISUdIKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09VTlRISUdILCB2YWwpCi0KLS8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0FERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdBRERSTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTdBRERSTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0FERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3QUREUkhJR0gpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0FERFJISUdILCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09VTlRMT1cpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPVU5UTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPVU5USElHSCkKLSNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPVU5USElHSCwgdmFsKQotCi0vKiBLZXliZmluX3JlYWRfKClhZCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfS1BBRF9DVEwoKQkJYmZpbl9yZWFkMTYoS1BBRF9DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9DVEwodmFsKQliZmluX3dyaXRlMTYoS1BBRF9DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0tQQURfUFJFU0NBTEUoKQliZmluX3JlYWQxNihLUEFEX1BSRVNDQUxFKQotI2RlZmluZSBiZmluX3dyaXRlX0tQQURfUFJFU0NBTEUodmFsKQliZmluX3dyaXRlMTYoS1BBRF9QUkVTQ0FMRSwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfS1BBRF9NU0VMKCkJCWJmaW5fcmVhZDE2KEtQQURfTVNFTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX01TRUwodmFsKQliZmluX3dyaXRlMTYoS1BBRF9NU0VMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1JPV0NPTCgpCQliZmluX3JlYWQxNihLUEFEX1JPV0NPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1JPV0NPTCh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX1JPV0NPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfS1BBRF9TVEFUKCkJCWJmaW5fcmVhZDE2KEtQQURfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1NUQVQodmFsKQliZmluX3dyaXRlMTYoS1BBRF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1NPRlRFVkFMKCkJYmZpbl9yZWFkMTYoS1BBRF9TT0ZURVZBTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1NPRlRFVkFMKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfU09GVEVWQUwsIHZhbCkKLQotLyogUGl4ZWwgQ29tYmZpbl9yZWFkXygpb3NpdG9yIChQSVhDKSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19DVEwoKQkJYmZpbl9yZWFkMTYoUElYQ19DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19DVEwodmFsKQliZmluX3dyaXRlMTYoUElYQ19DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfUFBMKCkJCWJmaW5fcmVhZDE2KFBJWENfUFBMKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfUFBMKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfUFBMLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0xQRigpCQliZmluX3JlYWQxNihQSVhDX0xQRikKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0xQRih2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0xQRiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19BSFNUQVJUKCkJYmZpbl9yZWFkMTYoUElYQ19BSFNUQVJUKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQUhTVEFSVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FIU1RBUlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQUhFTkQoKQkJYmZpbl9yZWFkMTYoUElYQ19BSEVORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FIRU5EKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQUhFTkQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQVZTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQVZTVEFSVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FWU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BVlNUQVJULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FWRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQVZFTkQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BVkVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FWRU5ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FUUkFOU1AoKQliZmluX3JlYWQxNihQSVhDX0FUUkFOU1ApCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BVFJBTlNQKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQVRSQU5TUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19CSFNUQVJUKCkJYmZpbl9yZWFkMTYoUElYQ19CSFNUQVJUKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQkhTVEFSVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JIU1RBUlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQkhFTkQoKQkJYmZpbl9yZWFkMTYoUElYQ19CSEVORCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JIRU5EKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQkhFTkQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQlZTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQlZTVEFSVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JWU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CVlNUQVJULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JWRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQlZFTkQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVkVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JWRU5ELCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JUUkFOU1AoKQliZmluX3JlYWQxNihQSVhDX0JUUkFOU1ApCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVFJBTlNQKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQlRSQU5TUCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19JTlRSU1RBVCgpCWJmaW5fcmVhZDE2KFBJWENfSU5UUlNUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19JTlRSU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0lOVFJTVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX1JZQ09OKCkJCWJmaW5fcmVhZDMyKFBJWENfUllDT04pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19SWUNPTih2YWwpCWJmaW5fd3JpdGUzMihQSVhDX1JZQ09OLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0dVQ09OKCkJCWJmaW5fcmVhZDMyKFBJWENfR1VDT04pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19HVUNPTih2YWwpCWJmaW5fd3JpdGUzMihQSVhDX0dVQ09OLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JWQ09OKCkJCWJmaW5fcmVhZDMyKFBJWENfQlZDT04pCi0jZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVkNPTih2YWwpCWJmaW5fd3JpdGUzMihQSVhDX0JWQ09OLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0NDQklBUygpCQliZmluX3JlYWQzMihQSVhDX0NDQklBUykKLSNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0NDQklBUyh2YWwpCWJmaW5fd3JpdGUzMihQSVhDX0NDQklBUywgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfUElYQ19UQygpCQliZmluX3JlYWQzMihQSVhDX1RDKQotI2RlZmluZSBiZmluX3dyaXRlX1BJWENfVEModmFsKQkJYmZpbl93cml0ZTMyKFBJWENfVEMsIHZhbCkKLQotLyogSGFuZHNoYWtlIE1ETUEgMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ0lOSVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDSU5JVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0JDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfQkNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9CQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9CQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ1VSR0VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNVUkdFTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDVVJHRU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNVUkdFTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ09WRVJGTE9XKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ09WRVJGTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09WRVJGTE9XKHZhbCkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09WRVJGTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0JDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfQkNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9CQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9CQ09VTlQsIHZhbCkKLQotLyogSGFuZHNoYWtlIE1ETUEgMSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE1ETUExX0NPTlRST0wpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9DT05UUk9MLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ0lOSVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDSU5JVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0JDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfQkNJTklUKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9CQ0lOSVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ1VSR0VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNVUkdFTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDVVJHRU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNVUkdFTlQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ09WRVJGTE9XKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ09WRVJGTE9XKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09WRVJGTE9XKHZhbCkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09WRVJGTE9XLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ09VTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDT1VOVCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0JDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfQkNPVU5UKQotI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9CQ09VTlQsIHZhbCkKLQogI2VuZGlmIC8qIF9DREVGX0JGNTQ5X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaAppbmRleCBhMmU5ZDk4Li4zMmY3MWU2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCkBAIC0yNjE1LDE3ICsyNjE1LDYgQEAKICNkZWZpbmUgYmZpbl9yZWFkX0NOVF9NSU4oKQkJYmZpbl9yZWFkMzIoQ05UX01JTikKICNkZWZpbmUgYmZpbl93cml0ZV9DTlRfTUlOKHZhbCkJCWJmaW5fd3JpdGUzMihDTlRfTUlOLCB2YWwpCiAKLS8qIE9UUC9GVVNFIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIGJmaW5fcmVhZF9PVFBfQ09OVFJPTCgpCQliZmluX3JlYWQxNihPVFBfQ09OVFJPTCkKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfQ09OVFJPTCh2YWwpCWJmaW5fd3JpdGUxNihPVFBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX0JFTigpCQliZmluX3JlYWQxNihPVFBfQkVOKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9CRU4odmFsKQkJYmZpbl93cml0ZTE2KE9UUF9CRU4sIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoT1RQX1NUQVRVUykKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE9UUF9TVEFUVVMsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9USU1JTkcoKQkJYmZpbl9yZWFkMzIoT1RQX1RJTUlORykKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfVElNSU5HKHZhbCkJYmZpbl93cml0ZTMyKE9UUF9USU1JTkcsIHZhbCkKLQogLyogU2VjdXJpdHkgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9TWVNTV1QoKQliZmluX3JlYWQzMihTRUNVUkVfU1lTU1dUKQpAQCAtMjY0MCwxNyArMjYyOSw2IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9QRVJJTVVYKCkJYmZpbl9yZWFkMTYoRE1BQzFfUEVSSU1VWCkKICNkZWZpbmUgYmZpbl93cml0ZV9ETUFDMV9QRVJJTVVYKHZhbCkJYmZpbl93cml0ZTE2KERNQUMxX1BFUklNVVgsIHZhbCkKIAotLyogT1RQIFJlYWQvV3JpdGUgRGF0YSBCdWZmZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMCgpCQliZmluX3JlYWQzMihPVFBfREFUQTApCi0jZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0RBVEEwKHZhbCkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfT1RQX0RBVEExKCkJCWJmaW5fcmVhZDMyKE9UUF9EQVRBMSkKLSNkZWZpbmUgYmZpbl93cml0ZV9PVFBfREFUQTEodmFsKQliZmluX3dyaXRlMzIoT1RQX0RBVEExLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTIoKQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEyKQotI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMih2YWwpCWJmaW5fd3JpdGUzMihPVFBfREFUQTIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMygpCQliZmluX3JlYWQzMihPVFBfREFUQTMpCi0jZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0RBVEEzKHZhbCkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMywgdmFsKQotCiAvKiBIYW5kc2hha2UgTURNQSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc2hhcmVkIGZpbGUgYmVjYXVzZSBpdCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBBRFNQLUJGNTQyIGJmaW5fcmVhZF8oKXJvY2Vzc29yICovCiAKIC8qIGxlZ2FjeSBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCmluZGV4IDM5ZjU4OGQuLmY5MTZjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKQEAgLTYyNCw5ICs2MjQsOSBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BX1JFQURZICAweDEgICAgICAgIC8qIERNQSBSZWFkeSAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgIEZJRk9GVUxMICAweDIgICAgICAgIC8qIEZJRk8gRnVsbCAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgRklGT0VNUFRZICAweDQgICAgICAgIC8qIEZJRk8gRW1wdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDT01QTEVURSAgMHg4ICAgICAgICAvKiBETUEgQ29tcGxldGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQV9DT01QTEVURSAgMHg4ICAgICAgICAvKiBETUEgQ29tcGxldGUgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSFNISyAgMHgxMCAgICAgICAvKiBIb3N0IEhhbmRzaGFrZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FT1VUICAweDIwICAgICAgIC8qIEhvc3QgVGltZW91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSFNUSU1FT1VUICAweDIwICAgICAgIC8qIEhvc3QgVGltZW91dCAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBISVJRICAweDQwICAgICAgIC8qIEhvc3QgSW50ZXJydXB0IFJlcXVlc3QgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgQUxMT1dfQ05GRyAgMHg4MCAgICAgICAvKiBBbGxvdyBOZXcgQ29uZmlndXJhdGlvbiAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRElSICAweDEwMCAgICAgIC8qIERNQSBEaXJlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAppbmRleCBjNGRjZjMwLi43MmMzNDM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCkBAIC00LDE4ICs0LDE4IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAotI2lmbmRlZiBfREVGX0JGNTQ4X0gKLSNkZWZpbmUgX0RFRl9CRjU0OF9ICisjaWZuZGVmIF9ERUZfQkY1NDdfSAorI2RlZmluZSBfREVGX0JGNTQ3X0gKIAogLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgPGFzbS9kZWZfTFBCbGFja2Zpbi5oPgogCi0vKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0OCAqLworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDcgKi8KIAogLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCiAKLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0OCB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0NyB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KIAogLyogVGltZXIgUmVnaXN0ZXJzICovCiAKQEAgLTEyMTcsNCArMTIxNyw0IEBACiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKIAotI2VuZGlmIC8qIF9ERUZfQkY1NDhfSCAqLworI2VuZGlmIC8qIF9ERUZfQkY1NDdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCmluZGV4IGE1MDc5OTguLjNmYjMzYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKQEAgLTE1LDExNSArMTUsOCBAQAogLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCiAKLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0OCB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KLQotLyogVGltZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9DT05GSUcgIDB4ZmZjMDA2MDAgICAvKiBUaW1lciA4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI4X0NPVU5URVIgIDB4ZmZjMDA2MDQgICAvKiBUaW1lciA4IENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9QRVJJT0QgIDB4ZmZjMDA2MDggICAvKiBUaW1lciA4IFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9XSURUSCAgMHhmZmMwMDYwYyAgIC8qIFRpbWVyIDggV2lkdGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9DT05GSUcgIDB4ZmZjMDA2MTAgICAvKiBUaW1lciA5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI5X0NPVU5URVIgIDB4ZmZjMDA2MTQgICAvKiBUaW1lciA5IENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9QRVJJT0QgIDB4ZmZjMDA2MTggICAvKiBUaW1lciA5IFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9XSURUSCAgMHhmZmMwMDYxYyAgIC8qIFRpbWVyIDkgV2lkdGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT05GSUcgIDB4ZmZjMDA2MjAgICAvKiBUaW1lciAxMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT1VOVEVSICAweGZmYzAwNjI0ICAgLyogVGltZXIgMTAgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUjEwX1BFUklPRCAgMHhmZmMwMDYyOCAgIC8qIFRpbWVyIDEwIFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVIxMF9XSURUSCAgMHhmZmMwMDYyYyAgIC8qIFRpbWVyIDEwIFdpZHRoIFJlZ2lzdGVyICovCi0KLS8qIFRpbWVyIEdyb3VwIG9mIDMgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSX0VOQUJMRTEgIDB4ZmZjMDA2NDAgICAvKiBUaW1lciBHcm91cCBvZiAzIEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUl9ESVNBQkxFMSAgMHhmZmMwMDY0NCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgRGlzYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVJfU1RBVFVTMSAgMHhmZmMwMDY0OCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgU3RhdHVzIFJlZ2lzdGVyICovCi0KLS8qIFNQT1JUMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVENSMSAgMHhmZmMwMDgwMCAgIC8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1RDUjIgIDB4ZmZjMDA4MDQgICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UQ0xLRElWICAweGZmYzAwODA4ICAgLyogU1BPUlQwIFRyYW5zbWl0IFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVEZTRElWICAweGZmYzAwODBjICAgLyogU1BPUlQwIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UWCAgMHhmZmMwMDgxMCAgIC8qIFNQT1JUMCBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JYICAweGZmYzAwODE4ICAgLyogU1BPUlQwIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNSMSAgMHhmZmMwMDgyMCAgIC8qIFNQT1JUMCBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNSMiAgMHhmZmMwMDgyNCAgIC8qIFNQT1JUMCBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNMS0RJViAgMHhmZmMwMDgyOCAgIC8qIFNQT1JUMCBSZWNlaXZlIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkZTRElWICAweGZmYzAwODJjICAgLyogU1BPUlQwIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9TVEFUICAweGZmYzAwODMwICAgLyogU1BPUlQwIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfQ0hOTCAgMHhmZmMwMDgzNCAgIC8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTUNNQzEgIDB4ZmZjMDA4MzggICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTUNNQzIgIDB4ZmZjMDA4M2MgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzAgIDB4ZmZjMDA4NDAgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NVENTMSAgMHhmZmMwMDg0NCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01UQ1MyICAweGZmYzAwODQ4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzMgIDB4ZmZjMDA4NGMgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMCAgMHhmZmMwMDg1MCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVJDUzEgIDB4ZmZjMDA4NTQgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01SQ1MyICAweGZmYzAwODU4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMyAgMHhmZmMwMDg1YyAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KLQotLyogRVBQSTAgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9TVEFUVVMgIDB4ZmZjMDEwMDAgICAvKiBFUFBJMCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9IQ09VTlQgIDB4ZmZjMDEwMDQgICAvKiBFUFBJMCBIb3Jpem9udGFsIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfSERFTEFZICAweGZmYzAxMDA4ICAgLyogRVBQSTAgSG9yaXpvbnRhbCBEZWxheSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX1ZDT1VOVCAgMHhmZmMwMTAwYyAgIC8qIEVQUEkwIFZlcnRpY2FsIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfVkRFTEFZICAweGZmYzAxMDEwICAgLyogRVBQSTAgVmVydGljYWwgRGVsYXkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRVBQSTBfRlJBTUUgIDB4ZmZjMDEwMTQgICAvKiBFUFBJMCBMaW5lcyBwZXIgRnJhbWUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0xJTkUgIDB4ZmZjMDEwMTggICAvKiBFUFBJMCBTYW1wbGVzIHBlciBMaW5lIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ0xLRElWICAweGZmYzAxMDFjICAgLyogRVBQSTAgQ2xvY2sgRGl2aWRlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUFBJMF9DT05UUk9MICAweGZmYzAxMDIwICAgLyogRVBQSTAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJMF9GUzFXX0hCTCAgMHhmZmMwMTAyNCAgIC8qIEVQUEkwIEZTMSBXaWR0aCBSZWdpc3RlciAvIEVQUEkwIEhvcml6b250YWwgQmxhbmtpbmcgU2FtcGxlcyBQZXIgTGluZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQUEkwX0ZTMVBfQVZQTCAgMHhmZmMwMTAyOCAgIC8qIEVQUEkwIEZTMSBQZXJpb2QgUmVnaXN0ZXIgLyBFUFBJMCBBY3RpdmUgVmlkZW8gU2FtcGxlcyBQZXIgTGluZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJMF9GUzJXX0xWQiAgMHhmZmMwMTAyYyAgIC8qIEVQUEkwIEZTMiBXaWR0aCBSZWdpc3RlciAvIEVQUEkwIExpbmVzIG9mIFZlcnRpY2FsIEJsYW5raW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVBQSTBfRlMyUF9MQVZGICAweGZmYzAxMDMwICAgLyogRVBQSTAgRlMyIFBlcmlvZCBSZWdpc3Rlci8gRVBQSTAgTGluZXMgb2YgQWN0aXZlIFZpZGVvIFBlciBGaWVsZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ0xJUCAgMHhmZmMwMTAzNCAgIC8qIEVQUEkwIENsaXBwaW5nIFJlZ2lzdGVyICovCi0KLS8qIFVBUlQyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfRExMICAweGZmYzAyMTAwICAgLyogRGl2aXNvciBMYXRjaCBMb3cgQnl0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQyX0RMSCAgMHhmZmMwMjEwNCAgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBCeXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9HQ1RMICAweGZmYzAyMTA4ICAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9MQ1IgIDB4ZmZjMDIxMGMgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9NQ1IgIDB4ZmZjMDIxMTAgICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfTFNSICAweGZmYzAyMTE0ICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9NU1IgIDB4ZmZjMDIxMTggICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9TQ1IgIDB4ZmZjMDIxMWMgICAvKiBTY3JhdGNoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBVQVJUMl9JRVJfU0VUICAweGZmYzAyMTIwICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBTZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVQVJUMl9JRVJfQ0xFQVIgIDB4ZmZjMDIxMjQgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIENsZWFyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfUkJSICAweGZmYzAyMTJjICAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKi8KLQotLyogVHdvIFdpcmUgSW50ZXJmYWNlIFJlZ2lzdGVycyAoVFdJMSkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRXSTFfUkVHQkFTRSAgMHhmZmMwMjIwMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUV0kxX0NMS0RJViAgMHhmZmMwMjIwMCAgIC8qIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUV0kxX0NPTlRST0wgIDB4ZmZjMDIyMDQgICAvKiBUV0kgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQ1RSTCAgMHhmZmMwMjIwOCAgIC8qIFRXSSBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX1NUQVQgIDB4ZmZjMDIyMGMgICAvKiBUV0kgU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX0FERFIgIDB4ZmZjMDIyMTAgICAvKiBUV0kgU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9DVFJMICAweGZmYzAyMjE0ICAgLyogVFdJIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX1NUQVQgIDB4ZmZjMDIyMTggICAvKiBUV0kgTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9BRERSICAweGZmYzAyMjFjICAgLyogVFdJIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfSU5UX1NUQVQgIDB4ZmZjMDIyMjAgICAvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFdJMV9JTlRfTUFTSyAgMHhmZmMwMjIyNCAgIC8qIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fQ1RSTCAgMHhmZmMwMjIyOCAgIC8qIFRXSSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9GSUZPX1NUQVQgIDB4ZmZjMDIyMmMgICAvKiBUV0kgRklGTyBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9YTVRfREFUQTggIDB4ZmZjMDIyODAgICAvKiBUV0kgRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9YTVRfREFUQTE2ICAweGZmYzAyMjg0ICAgLyogVFdJIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX1JDVl9EQVRBOCAgMHhmZmMwMjI4OCAgIC8qIFRXSSBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfUkNWX0RBVEExNiAgMHhmZmMwMjI4YyAgIC8qIFRXSSBGSUZPIFJlY2VpdmUgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLwotCi0vKiBTUEkyICBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQSTJfUkVHQkFTRSAgMHhmZmMwMjQwMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0NUTCAgMHhmZmMwMjQwMCAgIC8qIFNQSTIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0ZMRyAgMHhmZmMwMjQwNCAgIC8qIFNQSTIgRmxhZyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfU1RBVCAgMHhmZmMwMjQwOCAgIC8qIFNQSTIgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BJMl9UREJSICAweGZmYzAyNDBjICAgLyogU1BJMiBUcmFuc21pdCBEYXRhIEJ1ZmZlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfUkRCUiAgMHhmZmMwMjQxMCAgIC8qIFNQSTIgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfQkFVRCAgMHhmZmMwMjQxNCAgIC8qIFNQSTIgQmF1ZCBSYXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQSTJfU0hBRE9XICAweGZmYzAyNDE4ICAgLyogU1BJMiBSZWNlaXZlIERhdGEgQnVmZmVyIFNoYWRvdyBSZWdpc3RlciAqLworLyogVGhlIEJGNTQ4IGlzIGxpa2UgdGhlIEJGNTQ3LCBidXQgaGFzIGFkZGl0aW9uYWwgQ0FOcyAqLworI2luY2x1ZGUgImRlZkJGNTQ3LmgiCiAKIC8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDEgUmVnaXN0ZXJzICovCiAKQEAgLTUwOCwxMDk2ICs0MDEsNCBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0lEMCAgMHhmZmMwMzdmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBJRDAgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9JRDEgIDB4ZmZjMDM3ZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgSUQxIFJlZ2lzdGVyICovCiAKLS8qIEFUQVBJIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBVEFQSV9DT05UUk9MICAweGZmYzAzODAwICAgLyogQVRBUEkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFUQVBJX1NUQVRVUyAgMHhmZmMwMzgwNCAgIC8qIEFUQVBJIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfQUREUiAgMHhmZmMwMzgwOCAgIC8qIEFUQVBJIERldmljZSBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQVRBUElfREVWX1RYQlVGICAweGZmYzAzODBjICAgLyogQVRBUEkgRGV2aWNlIFJlZ2lzdGVyIFdyaXRlIERhdGEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfUlhCVUYgIDB4ZmZjMDM4MTAgICAvKiBBVEFQSSBEZXZpY2UgUmVnaXN0ZXIgUmVhZCBEYXRhICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9NQVNLICAweGZmYzAzODE0ICAgLyogQVRBUEkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9TVEFUVVMgIDB4ZmZjMDM4MTggICAvKiBBVEFQSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX1hGRVJfTEVOICAweGZmYzAzODFjICAgLyogQVRBUEkgTGVuZ3RoIG9mIFRyYW5zZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0xJTkVfU1RBVFVTICAweGZmYzAzODIwICAgLyogQVRBUEkgTGluZSBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVRBUElfU01fU1RBVEUgIDB4ZmZjMDM4MjQgICAvKiBBVEFQSSBTdGF0ZSBNYWNoaW5lIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1RFUk1JTkFURSAgMHhmZmMwMzgyOCAgIC8qIEFUQVBJIEhvc3QgVGVybWluYXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBBVEFQSV9QSU9fVEZSQ05UICAweGZmYzAzODJjICAgLyogQVRBUEkgUElPIG1vZGUgdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0RNQV9URlJDTlQgIDB4ZmZjMDM4MzAgICAvKiBBVEFQSSBETUEgbW9kZSB0cmFuc2ZlciBjb3VudCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX1VNQUlOX1RGUkNOVCAgMHhmZmMwMzgzNCAgIC8qIEFUQVBJIFVETUFJTiB0cmFuc2ZlciBjb3VudCAqLwotI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9VRE1BT1VUX1RGUkNOVCAgMHhmZmMwMzgzOCAgIC8qIEFUQVBJIFVETUFPVVQgdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9SRUdfVElNXzAgIDB4ZmZjMDM4NDAgICAvKiBBVEFQSSBSZWdpc3RlciBUcmFuc2ZlciBUaW1pbmcgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMCAgMHhmZmMwMzg0NCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMSAgMHhmZmMwMzg0OCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMCAgMHhmZmMwMzg1MCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMSAgMHhmZmMwMzg1NCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMiAgMHhmZmMwMzg1OCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMCAgMHhmZmMwMzg2MCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMSAgMHhmZmMwMzg2NCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMiAgMHhmZmMwMzg2OCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMyAgMHhmZmMwMzg2YyAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMyBSZWdpc3RlciAqLwotCi0vKiBTREggUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0RIX1BXUl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBTREggUG93ZXIgQ29udHJvbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTREhfQ0xLX0NUTCAgMHhmZmMwMzkwNCAgIC8qIFNESCBDbG9jayBDb250cm9sICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0FSR1VNRU5UICAweGZmYzAzOTA4ICAgLyogU0RIIEFyZ3VtZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNESF9DT01NQU5EICAweGZmYzAzOTBjICAgLyogU0RIIENvbW1hbmQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfUkVTUF9DTUQgIDB4ZmZjMDM5MTAgICAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMCAgMHhmZmMwMzkxNCAgIC8qIFNESCBSZXNwb25zZTAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNESF9SRVNQT05TRTEgIDB4ZmZjMDM5MTggICAvKiBTREggUmVzcG9uc2UxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREhfUkVTUE9OU0UyICAweGZmYzAzOTFjICAgLyogU0RIIFJlc3BvbnNlMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMyAgMHhmZmMwMzkyMCAgIC8qIFNESCBSZXNwb25zZTMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfVElNRVIgIDB4ZmZjMDM5MjQgICAvKiBTREggRGF0YSBUaW1lciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfTEdUSCAgMHhmZmMwMzkyOCAgIC8qIFNESCBEYXRhIExlbmd0aCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9EQVRBX0NUTCAgMHhmZmMwMzkyYyAgIC8qIFNESCBEYXRhIENvbnRyb2wgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfREFUQV9DTlQgIDB4ZmZjMDM5MzAgICAvKiBTREggRGF0YSBDb3VudGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTICAweGZmYzAzOTM0ICAgLyogU0RIIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTX0NMUiAgMHhmZmMwMzkzOCAgIC8qIFNESCBTdGF0dXMgQ2xlYXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTREhfTUFTSzAgIDB4ZmZjMDM5M2MgICAvKiBTREggSW50ZXJydXB0MCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU0RIX01BU0sxICAweGZmYzAzOTQwICAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9GSUZPX0NOVCAgMHhmZmMwMzk0OCAgIC8qIFNESCBGSUZPIENvdW50ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0RIX0ZJRk8gIDB4ZmZjMDM5ODAgICAvKiBTREggRGF0YSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0VfU1RBVFVTICAweGZmYzAzOWMwICAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNESF9FX01BU0sgIDB4ZmZjMDM5YzQgICAvKiBTREggRXhjZXB0aW9uIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9DRkcgIDB4ZmZjMDM5YzggICAvKiBTREggQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfUkRfV0FJVF9FTiAgMHhmZmMwMzljYyAgIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQwICAweGZmYzAzOWQwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24wICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQxICAweGZmYzAzOWQ0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24xICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQyICAweGZmYzAzOWQ4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQzICAweGZmYzAzOWRjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ0ICAweGZmYzAzOWUwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb240ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ1ICAweGZmYzAzOWU0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ2ICAweGZmYzAzOWU4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb242ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ3ICAweGZmYzAzOWVjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb243ICovCi0KLS8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ09OVFJPTCAgMHhmZmMwM2EwMCAgIC8qIEhPU1QgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRVUyAgMHhmZmMwM2EwNCAgIC8qIEhPU1QgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9USU1FT1VUICAweGZmYzAzYTA4ICAgLyogSE9TVCBBY2tub3dsZWRnZSBNb2RlIFRpbWVvdXQgUmVnaXN0ZXIgKi8KLQotLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRkFERFIgIDB4ZmZjMDNjMDAgICAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1BPV0VSICAweGZmYzAzYzA0ICAgLyogUG93ZXIgbWFuYWdlbWVudCByZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWCAgMHhmZmMwM2MwOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgVHggZW5kcG9pbnQgMSB0byA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYICAweGZmYzAzYzBjICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBSeCBlbmRwb2ludHMgMSB0byA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFhFICAweGZmYzAzYzEwICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clR4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlhFICAweGZmYzAzYzE0ICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clJ4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCICAweGZmYzAzYzE4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBjb21tb24gVVNCIGludGVycnVwdHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQkUgIDB4ZmZjMDNjMWMgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVVNCICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZSQU1FICAweGZmYzAzYzIwICAgLyogVVNCIGZyYW1lIG51bWJlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTkRFWCAgMHhmZmMwM2MyNCAgIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIGluZGV4ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1RFU1RNT0RFICAweGZmYzAzYzI4ICAgLyogRW5hYmxlZCBVU0IgMjAgdGVzdCBtb2RlcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CSU5UUiAgMHhmZmMwM2MyYyAgIC8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBhbmQgV2FrZXVwIEV4Y2VwdGlvbiBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JBTF9DVEwgIDB4ZmZjMDNjMzAgICAvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBmb3IgdGhlIGNvcmUgKi8KLQotLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9UWF9NQVhfUEFDS0VUICAweGZmYzAzYzQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1NSMCAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENTUiAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfUlhfTUFYX1BBQ0tFVCAgMHhmZmMwM2M0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDU1IgIDB4ZmZjMDNjNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NPVU5UMCAgMHhmZmMwM2M1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENPVU5UICAweGZmYzAzYzUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWFRZUEUgIDB4ZmZjMDNjNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBVU0JfTkFLTElNSVQwICAweGZmYzAzYzU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1RYSU5URVJWQUwgIDB4ZmZjMDNjNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYVFlQRSAgMHhmZmMwM2M1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1JYSU5URVJWQUwgIDB4ZmZjMDNjNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ09VTlQgIDB4ZmZjMDNjNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDBfRklGTyAgMHhmZmMwM2M4MCAgIC8qIEVuZHBvaW50IDAgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDFfRklGTyAgMHhmZmMwM2M4OCAgIC8qIEVuZHBvaW50IDEgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDJfRklGTyAgMHhmZmMwM2M5MCAgIC8qIEVuZHBvaW50IDIgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDNfRklGTyAgMHhmZmMwM2M5OCAgIC8qIEVuZHBvaW50IDMgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDRfRklGTyAgMHhmZmMwM2NhMCAgIC8qIEVuZHBvaW50IDQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDVfRklGTyAgMHhmZmMwM2NhOCAgIC8qIEVuZHBvaW50IDUgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDZfRklGTyAgMHhmZmMwM2NiMCAgIC8qIEVuZHBvaW50IDYgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDdfRklGTyAgMHhmZmMwM2NiOCAgIC8qIEVuZHBvaW50IDcgRklGTyAqLwotCi0vKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfT1RHX0RFVl9DVEwgIDB4ZmZjMDNkMDAgICAvKiBPVEcgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19JUlEgIDB4ZmZjMDNkMDQgICAvKiBPVEcgVkJVUyBDb250cm9sIEludGVycnVwdHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX01BU0sgIDB4ZmZjMDNkMDggICAvKiBWQlVTIENvbnRyb2wgSW50ZXJydXB0IEVuYWJsZSAqLwotCi0vKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfTElOS0lORk8gIDB4ZmZjMDNkNDggICAvKiBFbmFibGVzIHByb2dyYW1taW5nIG9mIHNvbWUgUEhZLXNpZGUgZGVsYXlzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1ZQTEVOICAweGZmYzAzZDRjICAgLyogRGV0ZXJtaW5lcyBkdXJhdGlvbiBvZiBWQlVTIHB1bHNlIGZvciBWQlVTIGNoYXJnaW5nICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9IU19FT0YxICAweGZmYzAzZDUwICAgLyogVGltZSBidWZmZXIgZm9yIEhpZ2gtU3BlZWQgdHJhbnNhY3Rpb25zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9GU19FT0YxICAweGZmYzAzZDU0ICAgLyogVGltZSBidWZmZXIgZm9yIEZ1bGwtU3BlZWQgdHJhbnNhY3Rpb25zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9MU19FT0YxICAweGZmYzAzZDU4ICAgLyogVGltZSBidWZmZXIgZm9yIExvdy1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KLQotLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMICAweGZmYzAzZGUwICAgLyogUmVnaXN0ZXIgdGhhdCBpbmNyZWFzZXMgdmlzaWJpbGl0eSBvZiBBbmFsb2cgUEhZICovCi0KLS8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DQUxJQiAgMHhmZmMwM2RlNCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gc2V0IHNvbWUgY2FsaWJyYXRpb24gdmFsdWVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0FQSFlfQ05UUkwyICAweGZmYzAzZGU4ICAgLyogUmVnaXN0ZXIgdXNlZCB0byBwcmV2ZW50IHJlLWVudW1lcmF0aW9uIG9uY2UgTW9hYiBnb2VzIGludG8gaGliZXJuYXRlIG1vZGUgKi8KLQotLyogKFBIWV9URVNUIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9QSFlfVEVTVCAgMHhmZmMwM2RlYyAgIC8qIFVzZWQgZm9yIHJlZHVjaW5nIHNpbXVsYXRpb24gdGltZSBhbmQgc2ltcGxpZmllcyBGSUZPIHRlc3RhYmlsaXR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX1BMTE9TQ19DVFJMICAweGZmYzAzZGYwICAgLyogVXNlZCB0byBwcm9ncmFtIGRpZmZlcmVudCBwYXJhbWV0ZXJzIGZvciBVU0IgUExMIGFuZCBPc2NpbGxhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9TUlBfQ0xLRElWICAweGZmYzAzZGY0ICAgLyogVXNlZCB0byBwcm9ncmFtIGNsb2NrIGRpdmlkZSB2YWx1ZSBmb3IgdGhlIGNsb2NrIGZlZCB0byB0aGUgU1JQIGRldGVjdGlvbiBsb2dpYyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhNQVhQICAweGZmYzAzZTAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDU1IgIDB4ZmZjMDNlMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYTUFYUCAgMHhmZmMwM2UwOCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYQ1NSICAweGZmYzAzZTBjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENPVU5UICAweGZmYzAzZTEwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYVFlQRSAgMHhmZmMwM2UxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9UWElOVEVSVkFMICAweGZmYzAzZTE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYVFlQRSAgMHhmZmMwM2UxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9SWElOVEVSVkFMICAweGZmYzAzZTIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0KLS8qIFVTQiBFbmRwb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ09VTlQgIDB4ZmZjMDNlMjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQwIFR4IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWE1BWFAgIDB4ZmZjMDNlNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENTUiAgMHhmZmMwM2U0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWE1BWFAgIDB4ZmZjMDNlNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWENTUiAgMHhmZmMwM2U0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDT1VOVCAgMHhmZmMwM2U1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDEgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYVFlQRSAgMHhmZmMwM2U1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQxICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9UWElOVEVSVkFMICAweGZmYzAzZTU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhUWVBFICAweGZmYzAzZTVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkxX1JYSU5URVJWQUwgIDB4ZmZjMDNlNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KLQotLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDT1VOVCAgMHhmZmMwM2U2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZStIMTAyIGVuZHBvaW50MSBUeCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhNQVhQICAweGZmYzAzZTgwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDU1IgIDB4ZmZjMDNlODQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhNQVhQICAweGZmYzAzZTg4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhDU1IgIDB4ZmZjMDNlOGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ09VTlQgIDB4ZmZjMDNlOTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQyIEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWFRZUEUgIDB4ZmZjMDNlOTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MiAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhJTlRFUlZBTCAgMHhmZmMwM2U5OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYVFlQRSAgMHhmZmMwM2U5YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMl9SWElOVEVSVkFMICAweGZmYzAzZWEwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCi0KLS8qIFVTQiBFbmRwb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ09VTlQgIDB4ZmZjMDNlYTggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQyIFR4IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWE1BWFAgIDB4ZmZjMDNlYzAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENTUiAgMHhmZmMwM2VjNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWE1BWFAgIDB4ZmZjMDNlYzggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWENTUiAgMHhmZmMwM2VjYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDT1VOVCAgMHhmZmMwM2VkMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDMgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYVFlQRSAgMHhmZmMwM2VkNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQzICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19UWElOVEVSVkFMICAweGZmYzAzZWQ4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhUWVBFICAweGZmYzAzZWRjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkzX1JYSU5URVJWQUwgIDB4ZmZjMDNlZTAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KLQotLyogVVNCIEVuZHBvaW50IDQgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDT1VOVCAgMHhmZmMwM2VlOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBIMTI0ZW5kcG9pbnQzIFR4IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWE1BWFAgIDB4ZmZjMDNmMDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENTUiAgMHhmZmMwM2YwNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWE1BWFAgIDB4ZmZjMDNmMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWENTUiAgMHhmZmMwM2YwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDT1VOVCAgMHhmZmMwM2YxMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYVFlQRSAgMHhmZmMwM2YxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9UWElOVEVSVkFMICAweGZmYzAzZjE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhUWVBFICAweGZmYzAzZjFjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk0X1JYSU5URVJWQUwgIDB4ZmZjMDNmMjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KLQotLyogVVNCIEVuZHBvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDT1VOVCAgMHhmZmMwM2YyOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDQgVHggRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYTUFYUCAgMHhmZmMwM2Y0MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ1NSICAweGZmYzAzZjQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYTUFYUCAgMHhmZmMwM2Y0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYQ1NSICAweGZmYzAzZjRjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENPVU5UICAweGZmYzAzZjUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhUWVBFICAweGZmYzAzZjU0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDUgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1RYSU5URVJWQUwgIDB4ZmZjMDNmNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWFRZUEUgIDB4ZmZjMDNmNWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhJTlRFUlZBTCAgMHhmZmMwM2Y2MCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLwotCi0vKiBVU0IgRW5kcG9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENPVU5UICAweGZmYzAzZjY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEgxNDVlbmRwb2ludDUgVHggRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYTUFYUCAgMHhmZmMwM2Y4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYQ1NSICAweGZmYzAzZjg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYTUFYUCAgMHhmZmMwM2Y4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ1NSICAweGZmYzAzZjhjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENPVU5UICAweGZmYzAzZjkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NiBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhUWVBFICAweGZmYzAzZjk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1RYSU5URVJWQUwgIDB4ZmZjMDNmOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWFRZUEUgIDB4ZmZjMDNmOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NiAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhJTlRFUlZBTCAgMHhmZmMwM2ZhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLwotCi0vKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWENPVU5UICAweGZmYzAzZmE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NiBUeCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhNQVhQICAweGZmYzAzZmMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDU1IgIDB4ZmZjMDNmYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhNQVhQICAweGZmYzAzZmM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDU1IgIDB4ZmZjMDNmY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ09VTlQgIDB4ZmZjMDNmZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ3IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWFRZUEUgIDB4ZmZjMDNmZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhJTlRFUlZBTCAgMHhmZmMwM2ZkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYVFlQRSAgMHhmZmMwM2ZkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19SWElOVEVSVkFMICAweGZmYzAzZmYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENPVU5UICAweGZmYzAzZmY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NyBUeCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUFfSU5URVJSVVBUICAweGZmYzA0MDAwICAgLyogSW5kaWNhdGVzIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgdGhlIERNQSBjaGFubmVscyAqLwotCi0vKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09OVFJPTCAgMHhmZmMwNDAwNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAwIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMEFERFJMT1cgIDB4ZmZjMDQwMDggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQUREUkhJR0ggIDB4ZmZjMDQwMGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09VTlRMT1cgIDB4ZmZjMDQwMTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMENPVU5USElHSCAgMHhmZmMwNDAxNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCi0KLS8qIFVTQiBDaGFubmVsIDEgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT05UUk9MICAweGZmYzA0MDI0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDEgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUExQUREUkxPVyAgMHhmZmMwNDAyOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFBRERSSElHSCAgMHhmZmMwNDAyYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT1VOVExPVyAgMHhmZmMwNDAzMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUExQ09VTlRISUdIICAweGZmYzA0MDM0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KLQotLyogVVNCIENoYW5uZWwgMiBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPTlRST0wgIDB4ZmZjMDQwNDQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMiBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTJBRERSTE9XICAweGZmYzA0MDQ4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkFERFJISUdIICAweGZmYzA0MDRjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPVU5UTE9XICAweGZmYzA0MDUwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTJDT1VOVEhJR0ggIDB4ZmZjMDQwNTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLwotCi0vKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09OVFJPTCAgMHhmZmMwNDA2NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAzIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BM0FERFJMT1cgIDB4ZmZjMDQwNjggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQUREUkhJR0ggIDB4ZmZjMDQwNmMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09VTlRMT1cgIDB4ZmZjMDQwNzAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BM0NPVU5USElHSCAgMHhmZmMwNDA3NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCi0KLS8qIFVTQiBDaGFubmVsIDQgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT05UUk9MICAweGZmYzA0MDg0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDQgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE0QUREUkxPVyAgMHhmZmMwNDA4OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRBRERSSElHSCAgMHhmZmMwNDA4YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT1VOVExPVyAgMHhmZmMwNDA5MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09VTlRISUdIICAweGZmYzA0MDk0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KLQotLyogVVNCIENoYW5uZWwgNSBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPTlRST0wgIDB4ZmZjMDQwYTQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTVBRERSTE9XICAweGZmYzA0MGE4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUFERFJISUdIICAweGZmYzA0MGFjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPVU5UTE9XICAweGZmYzA0MGIwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTVDT1VOVEhJR0ggIDB4ZmZjMDQwYjQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLwotCi0vKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09OVFJPTCAgMHhmZmMwNDBjNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA2IGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNkFERFJMT1cgIDB4ZmZjMDQwYzggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2QUREUkhJR0ggIDB4ZmZjMDQwY2MgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09VTlRMT1cgIDB4ZmZjMDQwZDAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNkNPVU5USElHSCAgMHhmZmMwNDBkNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCi0KLS8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT05UUk9MICAweGZmYzA0MGU0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDcgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE3QUREUkxPVyAgMHhmZmMwNDBlOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdBRERSSElHSCAgMHhmZmMwNDBlYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT1VOVExPVyAgMHhmZmMwNDBmMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09VTlRISUdIICAweGZmYzA0MGY0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KLQotLyogS2V5cGFkIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfQ1RMICAweGZmYzA0MTAwICAgLyogQ29udHJvbHMga2V5cGFkIG1vZHVsZSBlbmFibGUgYW5kIGRpc2FibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEtQQURfUFJFU0NBTEUgIDB4ZmZjMDQxMDQgICAvKiBFc3RhYmxpc2ggYSB0aW1lIGJhc2UgZm9yIHByb2dyYW1pbmcgdGhlIEtQQURfTVNFTCByZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfTVNFTCAgMHhmZmMwNDEwOCAgIC8qIFNlbGVjdHMgZGVsYXkgcGFyYW1ldGVycyBmb3Iga2V5cGFkIGludGVyZmFjZSBzZW5zaXRpdml0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBLUEFEX1JPV0NPTCAgMHhmZmMwNDEwYyAgIC8qIENhcHR1cmVzIHRoZSByb3cgYW5kIGNvbHVtbiBvdXRwdXQgdmFsdWVzIG9mIHRoZSBrZXlzIHByZXNzZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBLUEFEX1NUQVQgIDB4ZmZjMDQxMTAgICAvKiBIb2xkcyBhbmQgY2xlYXJzIHRoZSBzdGF0dXMgb2YgdGhlIGtleXBhZCBpbnRlcmZhY2UgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEX1NPRlRFVkFMICAweGZmYzA0MTE0ICAgLyogTGV0cyBzb2Z0d2FyZSBmb3JjZSBrZXlwYWQgaW50ZXJmYWNlIHRvIGNoZWNrIGZvciBrZXlzIGJlaW5nIHByZXNzZWQgKi8KLQotLyogUGl4ZWwgQ29tcG9zaXRvciAoUElYQykgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19DVEwgIDB4ZmZjMDQ0MDAgICAvKiBPdmVybGF5IGVuYWJsZSwgcmVzYW1wbGluZyBtb2RlLCBJL08gZGF0YSBmb3JtYXQsIHRyYW5zcGFyZW5jeSBlbmFibGUsIHdhdGVybWFyayBsZXZlbCwgRklGTyBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19QUEwgIDB4ZmZjMDQ0MDQgICAvKiBIb2xkcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSBvZiB0aGUgZGlzcGxheSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0xQRiAgMHhmZmMwNDQwOCAgIC8qIEhvbGRzIHRoZSBudW1iZXIgb2YgbGluZXMgcGVyIGZyYW1lIG9mIHRoZSBkaXNwbGF5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BSFNUQVJUICAweGZmYzA0NDBjICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQUhFTkQgIDB4ZmZjMDQ0MTAgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0FWU1RBUlQgIDB4ZmZjMDQ0MTQgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQVZFTkQgIDB4ZmZjMDQ0MTggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEEpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BVFJBTlNQICAweGZmYzA0NDFjICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEEpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CSFNUQVJUICAweGZmYzA0NDIwICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQkhFTkQgIDB4ZmZjMDQ0MjQgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWU1RBUlQgIDB4ZmZjMDQ0MjggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQlZFTkQgIDB4ZmZjMDQ0MmMgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEIpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CVFJBTlNQICAweGZmYzA0NDMwICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEIpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBQSVhDX0lOVFJTVEFUICAweGZmYzA0NDNjICAgLyogT3ZlcmxheSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi9zdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfUllDT04gIDB4ZmZjMDQ0NDAgICAvKiBDb2xvciBzcGFjZSBjb252ZXJzaW9uIG1hdHJpeCByZWdpc3Rlci4gQ29udGFpbnMgdGhlIFIvWSBjb252ZXJzaW9uIGNvZWZmaWNpZW50cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19HVUNPTiAgMHhmZmMwNDQ0NCAgIC8qIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4IHJlZ2lzdGVyLiBDb250YWlucyB0aGUgRy9VIGNvbnZlcnNpb24gY29lZmZpY2llbnRzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWQ09OICAweGZmYzA0NDQ4ICAgLyogQ29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXggcmVnaXN0ZXIuIENvbnRhaW5zIHRoZSBCL1YgY29udmVyc2lvbiBjb2VmZmljaWVudHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUElYQ19DQ0JJQVMgIDB4ZmZjMDQ0NGMgICAvKiBCaWFzIHZhbHVlcyBmb3IgdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX1RDICAweGZmYzA0NDUwICAgLyogSG9sZHMgdGhlIHRyYW5zcGFyZW50IGNvbG9yIHZhbHVlICovCi0KLS8qIEhhbmRzaGFrZSBNRE1BIDAgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUEwX0NPTlRST0wgIDB4ZmZjMDQ1MDAgICAvKiBIYW5kc2hha2UgTURNQTAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0VDSU5JVCAgMHhmZmMwNDUwNCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9CQ0lOSVQgIDB4ZmZjMDQ1MDggICAvKiBIYW5kc2hha2UgTURNQTAgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ1VSR0VOVCAgMHhmZmMwNDUwYyAgIC8qIEhhbmRzaGFrZSBNRE1BMCBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSE1ETUEwX0VDT1ZFUkZMT1cgIDB4ZmZjMDQ1MTAgICAvKiBIYW5kc2hha2UgTURNQTAgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ09VTlQgIDB4ZmZjMDQ1MTQgICAvKiBIYW5kc2hha2UgTURNQTAgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTBfQkNPVU5UICAweGZmYzA0NTE4ICAgLyogSGFuZHNoYWtlIE1ETUEwIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIgKi8KLQotLyogSGFuZHNoYWtlIE1ETUEgMSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQTFfQ09OVFJPTCAgMHhmZmMwNDU0MCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTFfRUNJTklUICAweGZmYzA0NTQ0ICAgLyogSGFuZHNoYWtlIE1ETUExIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0JDSU5JVCAgMHhmZmMwNDU0OCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE1ETUExX0VDVVJHRU5UICAweGZmYzA0NTRjICAgLyogSGFuZHNoYWtlIE1ETUExIFVyZ2VudCBFZGdlIENvdW50IFRocmVzaG9sZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBITURNQTFfRUNPVkVSRkxPVyAgMHhmZmMwNDU1MCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0VDT1VOVCAgMHhmZmMwNDU1NCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMV9CQ09VTlQgIDB4ZmZjMDQ1NTggICAvKiBIYW5kc2hha2UgTURNQTEgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlciAqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgICBTSU5HTEUgQklUIE1BQ1JPIFBBSVJTIChiaXQgbWFzayBhbmQgbmVnYXRlZCBvbmUpICAgICAgKi8KLS8qICAgICBhbmQgTVVMVEkgQklUIFJFQUQgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFBJWENfRU4gIDB4MSAgICAgICAgLyogUGl4ZWwgQ29tcG9zaXRvciBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBPVlJfQV9FTiAgMHgyICAgICAgICAvKiBPdmVybGF5IEEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0JfRU4gIDB4NCAgICAgICAgLyogT3ZlcmxheSBCIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIElNR19GT1JNICAweDggICAgICAgIC8qIEltYWdlIERhdGEgRm9ybWF0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0ZPUk0gIDB4MTAgICAgICAgLyogT3ZlcmxheSBEYXRhIEZvcm1hdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE9VVF9GT1JNICAweDIwICAgICAgIC8qIE91dHB1dCBEYXRhIEZvcm1hdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVRFNfTU9EICAweDQwICAgICAgIC8qIFJlc2FtcGxpbmcgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRDX0VOICAweDgwICAgICAgIC8qIFRyYW5zcGFyZW50IENvbG9yIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIElNR19TVEFUICAweDMwMCAgICAgIC8qIEltYWdlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX1NUQVQgIDB4YzAwICAgICAgLyogT3ZlcmxheSBGSUZPIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV01fTFZMICAweDMwMDAgICAgIC8qIEZJRk8gV2F0ZXJtYXJrIExldmVsICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSFNUQVJUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBX0hTVEFSVCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIFN0YXJ0IENvb3JkaW5hdGVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSEVORCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX0hFTkQgIDB4ZmZmICAgICAgLyogSG9yaXpvbnRhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0FWU1RBUlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFfVlNUQVJUICAweDNmZiAgICAgIC8qIFZlcnRpY2FsIFN0YXJ0IENvb3JkaW5hdGVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVkVORCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX1ZFTkQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgRW5kIENvb3JkaW5hdGVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVFJBTlNQICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBX1RSQU5TUCAgMHhmICAgICAgICAvKiBUcmFuc3BhcmVuY3kgVmFsdWUgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JIU1RBUlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfSFNUQVJUICAweGZmZiAgICAgIC8qIEhvcml6b250YWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JIRU5EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfSEVORCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIEVuZCBDb29yZGluYXRlcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFBJWENfQlZTVEFSVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQl9WU1RBUlQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JWRU5EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfVkVORCAgMHgzZmYgICAgICAvKiBWZXJ0aWNhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JUUkFOU1AgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfVFJBTlNQICAweGYgICAgICAgIC8qIFRyYW5zcGFyZW5jeSBWYWx1ZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFBJWENfSU5UUlNUQVQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBPVlJfSU5UX0VOICAweDEgICAgICAgIC8qIEludGVycnVwdCBhdCBFbmQgb2YgTGFzdCBWYWxpZCBPdmVybGF5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEZSTV9JTlRfRU4gIDB4MiAgICAgICAgLyogSW50ZXJydXB0IGF0IEVuZCBvZiBGcmFtZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgT1ZSX0lOVF9TVEFUICAweDQgICAgICAgIC8qIE92ZXJsYXkgSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgRlJNX0lOVF9TVEFUICAweDggICAgICAgIC8qIEZyYW1lIEludGVycnVwdCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX1JZQ09OICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExMSAgMHgzZmYgICAgICAvKiBBMTEgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTEyICAweGZmYzAwICAgIC8qIEExMiBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTMgIDB4M2ZmMDAwMDAgLyogQTEzIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSWV9NVUxUNCAgMHg0MDAwMDAwMCAvKiBNdWx0aXBseSBSb3cgYnkgNCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFBJWENfR1VDT04gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTIxICAweDNmZiAgICAgIC8qIEEyMSBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjIgIDB4ZmZjMDAgICAgLyogQTIyIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEyMyAgMHgzZmYwMDAwMCAvKiBBMjMgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEdVX01VTFQ0ICAweDQwMDAwMDAwIC8qIE11bHRpcGx5IFJvdyBieSA0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19CVkNPTiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMzEgIDB4M2ZmICAgICAgLyogQTMxIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzMiAgMHhmZmMwMCAgICAvKiBBMzIgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTMzICAweDNmZjAwMDAwIC8qIEEzMyBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQlZfTVVMVDQgIDB4NDAwMDAwMDAgLyogTXVsdGlwbHkgUm93IGJ5IDQgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0NDQklBUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTQgIDB4M2ZmICAgICAgLyogQTE0IGluIHRoZSBCaWFzIFZlY3RvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTI0ICAweGZmYzAwICAgIC8qIEEyNCBpbiB0aGUgQmlhcyBWZWN0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzNCAgMHgzZmYwMDAwMCAvKiBBMzQgaW4gdGhlIEJpYXMgVmVjdG9yICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19UQyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUllfVFJBTlMgIDB4ZmYgICAgICAgLyogVHJhbnNwYXJlbnQgQ29sb3IgLSBSL1kgQ29tcG9uZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgR1VfVFJBTlMgIDB4ZmYwMCAgICAgLyogVHJhbnNwYXJlbnQgQ29sb3IgLSBHL1UgQ29tcG9uZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQlZfVFJBTlMgIDB4ZmYwMDAwICAgLyogVHJhbnNwYXJlbnQgQ29sb3IgLSBCL1YgQ29tcG9uZW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgSE9TVF9DT05UUk9MICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9FTiAgMHgxICAgICAgICAvKiBIb3N0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfRU5EICAweDIgICAgICAgIC8qIEhvc3QgRW5kaWFuZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEQVRBX1NJWkUgIDB4NCAgICAgICAgLyogRGF0YSBTaXplICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SU1QgIDB4OCAgICAgICAgLyogSG9zdCBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhSRFlfT1ZSICAweDIwICAgICAgIC8qIEhvc3QgUmVhZHkgT3ZlcnJpZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBJTlRfTU9ERSAgMHg0MCAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEJUX0VOICAweDgwICAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRUhXICAweDEwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFdyaXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFSFIgIDB4MjAwICAgICAgLyogRW5hYmxlIEhvc3QgUmVhZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQkRSICAweDQwMCAgICAgIC8qIEJ1cnN0IERNQSBSZXF1ZXN0cyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhPU1RfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERNQV9SRUFEWSAgMHgxICAgICAgICAvKiBETUEgUmVhZHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBGSUZPRlVMTCAgMHgyICAgICAgICAvKiBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEZJRk9FTVBUWSAgMHg0ICAgICAgICAvKiBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICBETUFfQ09NUExFVEUgIDB4OCAgICAgICAgLyogRE1BIENvbXBsZXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhTSEsgIDB4MTAgICAgICAgLyogSG9zdCBIYW5kc2hha2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEhTVElNRU9VVCAgMHgyMCAgICAgICAvKiBIb3N0IFRpbWVvdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSElSUSAgMHg0MCAgICAgICAvKiBIb3N0IEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFMTE9XX0NORkcgIDB4ODAgICAgICAgLyogQWxsb3cgTmV3IENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BX0RJUiAgMHgxMDAgICAgICAvKiBETUEgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCVEUgIDB4MjAwICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhPU1RfVElNRU9VVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIENPVU5UX1RJTUVPVVQgIDB4N2ZmICAgICAgLyogSG9zdCBUaW1lb3V0IGNvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBLUEFEX0VOICAweDEgICAgICAgIC8qIEtleXBhZCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIEtQQURfSVJRTU9ERSAgMHg2ICAgICAgICAvKiBLZXkgUHJlc3MgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBLUEFEX1JPV0VOICAweDFjMDAgICAgIC8qIFJvdyBFbmFibGUgV2lkdGggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgS1BBRF9DT0xFTiAgMHhlMDAwICAgICAvKiBDb2x1bW4gRW5hYmxlIFdpZHRoICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9QUkVTQ0FMRSAqLwotCi0jZGVmaW5lICAgICAgICAgS1BBRF9QUkVTQ0FMRV9WQUwgIDB4M2YgICAgICAgLyogS2V5IFByZXNjYWxlIFZhbHVlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9NU0VMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgREJPTl9TQ0FMRSAgMHhmZiAgICAgICAvKiBEZWJvdW5jZSBTY2FsZSBWYWx1ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ09MRFJWX1NDQUxFICAweGZmMDAgICAgIC8qIENvbHVtbiBEcml2ZXIgU2NhbGUgVmFsdWUgKi8KLQotLyogQml0IG1hc2tzIGZvciBLUEFEX1JPV0NPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9ST1cgIDB4ZmYgICAgICAgLyogUm93cyBQcmVzc2VkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9DT0wgIDB4ZmYwMCAgICAgLyogQ29sdW1ucyBQcmVzc2VkICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TVEFUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBLUEFEX0lSUSAgMHgxICAgICAgICAvKiBLZXlwYWQgSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgS1BBRF9NUk9XQ09MICAweDYgICAgICAgIC8qIE11bHRpcGxlIFJvdy9Db2x1bW4gS2V5cHJlc3MgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBLUEFEX1BSRVNTRUQgIDB4OCAgICAgICAgLyogS2V5IHByZXNzIGN1cnJlbnQgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TT0ZURVZBTCAqLwotCi0jZGVmaW5lICAgICAgICAgICBLUEFEX1NPRlRFVkFMX0UgIDB4MiAgICAgICAgLyogU29mdHdhcmUgUHJvZ3JhbW1hYmxlIEZvcmNlIEV2YWx1YXRlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCi0jaWYgMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLwotI2VuZGlmCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICBQSU9fU1RBUlQgIDB4MSAgICAgICAgLyogU3RhcnQgUElPL1JlZyBPcCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIE1VTFRJX1NUQVJUICAweDIgICAgICAgIC8qIFN0YXJ0IE11bHRpLURNQSBPcCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVMVFJBX1NUQVJUICAweDQgICAgICAgIC8qIFN0YXJ0IFVsdHJhLURNQSBPcCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFhGRVJfRElSICAweDggICAgICAgIC8qIFRyYW5zZmVyIERpcmVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIElPUkRZX0VOICAweDEwICAgICAgIC8qIElPUkRZIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0ZMVVNIICAweDIwICAgICAgIC8qIEZsdXNoIEZJRk9zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgU09GVF9SU1QgIDB4NDAgICAgICAgLyogU29mdCBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBERVZfUlNUICAweDgwICAgICAgIC8qIERldmljZSBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBURlJDTlRfUlNUICAweDEwMCAgICAgIC8qIFRyYW5zIENvdW50IFJlc2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgRU5EX09OX1RFUk0gIDB4MjAwICAgICAgLyogRW5kL1Rlcm1pbmF0ZSBTZWxlY3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBQSU9fVVNFX0RNQSAgMHg0MDAgICAgICAvKiBQSU8tRE1BIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICBVRE1BSU5fRklGT19USFJTICAweGYwMDAgICAgIC8qIFVsdHJhIERNQS1JTiBGSUZPIFRocmVzaG9sZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgUElPX1hGRVJfT04gIDB4MSAgICAgICAgLyogUElPIHRyYW5zZmVyIGluIHByb2dyZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgIE1VTFRJX1hGRVJfT04gIDB4MiAgICAgICAgLyogTXVsdGktd29yZCBETUEgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgVUxUUkFfWEZFUl9PTiAgMHg0ICAgICAgICAvKiBVbHRyYSBETUEgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVTFRSQV9JTl9GTCAgMHhmMCAgICAgICAvKiBVbHRyYSBETUEgSW5wdXQgRklGTyBMZXZlbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX0RFVl9BRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBERVZfQUREUiAgMHgxZiAgICAgICAvKiBEZXZpY2UgQWRkcmVzcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX0lOVF9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgIEFUQVBJX0RFVl9JTlRfTUFTSyAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgUElPX0RPTkVfTUFTSyAgMHgyICAgICAgICAvKiBQSU8gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgbWFzayAqLwotI2RlZmluZSAgICAgICAgICAgTVVMVElfRE9ORV9NQVNLICAweDQgICAgICAgIC8qIE11bHRpLURNQSB0cmFuc2ZlciBkb25lIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lICAgICAgICAgIFVETUFJTl9ET05FX01BU0sgIDB4OCAgICAgICAgLyogVWx0cmEtRE1BIGluIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBVRE1BT1VUX0RPTkVfTUFTSyAgMHgxMCAgICAgICAvKiBVbHRyYS1ETUEgb3V0IHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgSE9TVF9URVJNX1hGRVJfTUFTSyAgMHgyMCAgICAgICAvKiBIb3N0IHRlcm1pbmF0ZSBjdXJyZW50IHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lICAgICAgICAgICBNVUxUSV9URVJNX01BU0sgIDB4NDAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBNdWx0aS1ETUEgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVURNQUlOX1RFUk1fTUFTSyAgMHg4MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1pbiB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLwotI2RlZmluZSAgICAgICAgIFVETUFPVVRfVEVSTV9NQVNLICAweDEwMCAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgVWx0cmEtRE1BLW91dCB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX0lOVF9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9ERVZfSU5UICAweDEgICAgICAgIC8qIERldmljZSBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBQSU9fRE9ORV9JTlQgIDB4MiAgICAgICAgLyogUElPIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgIE1VTFRJX0RPTkVfSU5UICAweDQgICAgICAgIC8qIE11bHRpLURNQSB0cmFuc2ZlciBkb25lIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgIFVETUFJTl9ET05FX0lOVCAgMHg4ICAgICAgICAvKiBVbHRyYS1ETUEgaW4gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgIFVETUFPVVRfRE9ORV9JTlQgIDB4MTAgICAgICAgLyogVWx0cmEtRE1BIG91dCB0cmFuc2ZlciBkb25lIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgIEhPU1RfVEVSTV9YRkVSX0lOVCAgMHgyMCAgICAgICAvKiBIb3N0IHRlcm1pbmF0ZSBjdXJyZW50IHRyYW5zZmVyIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICBNVUxUSV9URVJNX0lOVCAgMHg0MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIE11bHRpLURNQSB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICBVRE1BSU5fVEVSTV9JTlQgIDB4ODAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtaW4gdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBVRE1BT1VUX1RFUk1fSU5UICAweDEwMCAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgVWx0cmEtRE1BLW91dCB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfTElORV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9JTlRSICAweDEgICAgICAgIC8qIERldmljZSBpbnRlcnJ1cHQgdG8gaG9zdCBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9EQVNQICAweDIgICAgICAgIC8qIERldmljZSBkYXNwIHRvIGhvc3QgbGluZSBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgQVRBUElfQ1MwTiAgMHg0ICAgICAgICAvKiBBVEFQSSBjaGlwIHNlbGVjdCAwIGxpbmUgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0NTMU4gIDB4OCAgICAgICAgLyogQVRBUEkgY2hpcCBzZWxlY3QgMSBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9BRERSICAweDcwICAgICAgIC8qIEFUQVBJIGFkZHJlc3MgbGluZSBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIEFUQVBJX0RNQVJFUSAgMHg4MCAgICAgICAvKiBBVEFQSSBETUEgcmVxdWVzdCBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9ETUFBQ0tOICAweDEwMCAgICAgIC8qIEFUQVBJIERNQSBhY2tub3dsZWRnZSBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX0RJT1dOICAweDIwMCAgICAgIC8qIEFUQVBJIHdyaXRlIGxpbmUgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQVRBUElfRElPUk4gIDB4NDAwICAgICAgLyogQVRBUEkgcmVhZCBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX0lPUkRZICAweDgwMCAgICAgIC8qIEFUQVBJIElPUkRZIGxpbmUgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfU01fU1RBVEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBQSU9fQ1NUQVRFICAweGYgICAgICAgIC8qIFBJTyBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBETUFfQ1NUQVRFICAweGYwICAgICAgIC8qIERNQSBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICBVRE1BSU5fQ1NUQVRFICAweGYwMCAgICAgIC8qIFVsdHJhIERNQS1JbiBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgIFVETUFPVVRfQ1NUQVRFICAweGYwMDAgICAgIC8qIEFUQVBJIElPUkRZIGxpbmUgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVEVSTUlOQVRFICovCi0KLSNkZWZpbmUgICAgICAgICAgIEFUQVBJX0hPU1RfVEVSTSAgMHgxICAgICAgICAvKiBIb3N0IHRlcm1pbmF0aW9uYXRpb24gKi8KLQotLyogQml0IG1hc2tzIGZvciBBVEFQSV9SRUdfVElNXzAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVDJfUkVHICAweGZmICAgICAgIC8qIEVuZCBvZiBjeWNsZSB0aW1lIGZvciByZWdpc3RlciBhY2Nlc3MgdHJhbnNmZXJzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVEVPQ19SRUcgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SL0RJT1cgcHVsc2V3aWR0aCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBUMV9SRUcgIDB4ZiAgICAgICAgLyogVGltZSBmcm9tIGFkZHJlc3MgdmFsaWQgdG8gRElPUi9ESU9XICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFQyX1JFR19QSU8gIDB4ZmYwICAgICAgLyogRElPUi9ESU9XIHB1bHNld2lkdGggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFQ0X1JFRyAgMHhmMDAwICAgICAvKiBESU9XIGRhdGEgaG9sZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBURU9DX1JFR19QSU8gIDB4ZmYgICAgICAgLyogRW5kIG9mIGN5Y2xlIHRpbWUgZm9yIFBJTyBhY2Nlc3MgdHJhbnNmZXJzLiAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBURCAgMHhmZiAgICAgICAvKiBESU9SL0RJT1cgYXNzZXJ0ZWQgcHVsc2V3aWR0aCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFRNICAweGZmMDAgICAgIC8qIFRpbWUgZnJvbSBhZGRyZXNzIHZhbGlkIHRvIERJT1IvRElPVyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8xICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRLVyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgbmVnYXRlZCBwdWxzZXdpZHRoICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUS1IgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SIG5lZ2F0ZWQgcHVsc2V3aWR0aCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8yICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBUSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgZGF0YSBob2xkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFT0MgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbmQgb2YgY3ljbGUgZm9yIERNQSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEFDSyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIHNldHVwIGFuZCBob2xkIHRpbWVzIGZvciBUQUNLICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFTlYgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbnZlbG9wZSB0aW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURFZTICAweGZmICAgICAgIC8qIFNlbGVjdHMgZGF0YSB2YWxpZCBzZXR1cCB0aW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUQ1lDX1REVlMgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBjeWNsZSB0aW1lIC0gVERWUyB0aW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVFNTICAweGZmICAgICAgIC8qIFNlbGVjdHMgdGltZSBmcm9tIFNUUk9CRSBlZGdlIHRvIG5lZ2F0aW9uIG9mIERNQVJRIG9yIGFzc2VydGlvbiBvZiBTVE9QICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRNTEkgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBpbnRlcmxvY2sgdGltZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8zICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFpBSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIG1pbmltdW0gZGVsYXkgcmVxdWlyZWQgZm9yIG91dHB1dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJFQURZX1BBVVNFICAweGZmMDAgICAgIC8qIFNlbGVjdHMgcmVhZHkgdG8gcGF1c2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBUSU1FUl9FTkFCTEUxICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRU45ICAweDIgICAgICAgIC8qIFRpbWVyIDkgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVOMTAgIDB4NCAgICAgICAgLyogVGltZXIgMTAgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVElNRVJfRElTQUJMRTEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM4ICAweDEgICAgICAgIC8qIFRpbWVyIDggRGlzYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM5ICAweDIgICAgICAgIC8qIFRpbWVyIDkgRGlzYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRJTURJUzEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIERpc2FibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBUSU1FUl9TVEFUVVMxICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNSUw5ICAweDIgICAgICAgIC8qIFRpbWVyIDkgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUlMMTAgIDB4NCAgICAgICAgLyogVGltZXIgMTAgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjggIDB4MTAgICAgICAgLyogVGltZXIgOCBDb3VudGVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjkgIDB4MjAgICAgICAgLyogVGltZXIgOSBDb3VudGVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRPVkZfRVJSMTAgIDB4NDAgICAgICAgLyogVGltZXIgMTAgQ291bnRlciBPdmVyZmxvdyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU44ICAweDEwMDAgICAgIC8qIFRpbWVyIDggU2xhdmUgRW5hYmxlIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU45ICAweDIwMDAgICAgIC8qIFRpbWVyIDkgU2xhdmUgRW5hYmxlIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFJVTjEwICAweDQwMDAgICAgIC8qIFRpbWVyIDEwIFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBFUFBJMCBhcmUgb2J0YWluZWQgZnJvbSBjb21tb24gYmFzZSBoZWFkZXIgZm9yIEVQUEl4IChFUFBJMSBhbmQgRVBQSTIpICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0ZBRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgRlVOQ1RJT05fQUREUkVTUyAgMHg3ZiAgICAgICAvKiBGdW5jdGlvbiBhZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1BPV0VSICovCi0KLSNkZWZpbmUgICAgICAgICAgIEVOQUJMRV9TVVNQRU5ETSAgMHgxICAgICAgICAvKiBlbmFibGUgU3VzcGVuZE0gb3V0cHV0ICovCi0jZGVmaW5lICAgICAgICAgICAgICBTVVNQRU5EX01PREUgIDB4MiAgICAgICAgLyogU3VzcGVuZCBNb2RlIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJFU1VNRV9NT0RFICAweDQgICAgICAgIC8qIERNQSBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkVTRVQgIDB4OCAgICAgICAgLyogUmVzZXQgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhTX01PREUgIDB4MTAgICAgICAgLyogSGlnaCBTcGVlZCBtb2RlIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgSFNfRU5BQkxFICAweDIwICAgICAgIC8qIGhpZ2ggU3BlZWQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTT0ZUX0NPTk4gIDB4NDAgICAgICAgLyogU29mdCBjb25uZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIElTT19VUERBVEUgIDB4ODAgICAgICAgLyogSXNvY2hyb25vdXMgdXBkYXRlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDBfVFggIDB4MSAgICAgICAgLyogVHggRW5kcG9pbnQgMCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMV9UWCAgMHgyICAgICAgICAvKiBUeCBFbmRwb2ludCAxIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAyX1RYICAweDQgICAgICAgIC8qIFR4IEVuZHBvaW50IDIgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDNfVFggIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNF9UWCAgMHgxMCAgICAgICAvKiBUeCBFbmRwb2ludCA0IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA1X1RYICAweDIwICAgICAgIC8qIFR4IEVuZHBvaW50IDUgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDZfVFggIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQN19UWCAgMHg4MCAgICAgICAvKiBUeCBFbmRwb2ludCA3IGludGVycnVwdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSUlggKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAxX1JYICAweDIgICAgICAgIC8qIFJ4IEVuZHBvaW50IDEgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDJfUlggIDB4NCAgICAgICAgLyogUnggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQM19SWCAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA0X1JYICAweDEwICAgICAgIC8qIFJ4IEVuZHBvaW50IDQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDVfUlggIDB4MjAgICAgICAgLyogUnggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNl9SWCAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA3X1JYICAweDgwICAgICAgIC8qIFJ4IEVuZHBvaW50IDcgaW50ZXJydXB0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMF9UWF9FICAweDEgICAgICAgIC8qIEVuZHBvaW50IDAgaW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMV9UWF9FICAweDIgICAgICAgIC8qIFR4IEVuZHBvaW50IDEgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDJfVFhfRSAgMHg0ICAgICAgICAvKiBUeCBFbmRwb2ludCAyIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVAzX1RYX0UgIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNF9UWF9FICAweDEwICAgICAgIC8qIFR4IEVuZHBvaW50IDQgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDVfVFhfRSAgMHgyMCAgICAgICAvKiBUeCBFbmRwb2ludCA1IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVA2X1RYX0UgIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQN19UWF9FICAweDgwICAgICAgIC8qIFR4IEVuZHBvaW50IDcgaW50ZXJydXB0ICBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlJYRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVAxX1JYX0UgIDB4MiAgICAgICAgLyogUnggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMl9SWF9FICAweDQgICAgICAgIC8qIFJ4IEVuZHBvaW50IDIgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDNfUlhfRSAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVA0X1JYX0UgIDB4MTAgICAgICAgLyogUnggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNV9SWF9FICAweDIwICAgICAgIC8qIFJ4IEVuZHBvaW50IDUgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDZfUlhfRSAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVA3X1JYX0UgIDB4ODAgICAgICAgLyogUnggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVVNCICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFNVU1BFTkRfQiAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFU1VNRV9CICAweDIgICAgICAgIC8qIFJlc3VtZSBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQiAgMHg0ICAgICAgICAvKiBSZXNldC9iYWJibGUgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU09GX0IgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENPTk5fQiAgMHgxMCAgICAgICAvKiBDb25uZWN0aW9uIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERJU0NPTl9CICAweDIwICAgICAgIC8qIERpc2Nvbm5lY3QgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgIFNFU1NJT05fUkVRX0IgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICBWQlVTX0VSUk9SX0IgIDB4ODAgICAgICAgLyogVmJ1cyB0aHJlc2hvbGQgaW5kaWNhdG9yICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJVU0JFICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgU1VTUEVORF9CRSAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBSRVNVTUVfQkUgIDB4MiAgICAgICAgLyogUmVzdW1lIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQkUgIDB4NCAgICAgICAgLyogUmVzZXQvYmFiYmxlIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTT0ZfQkUgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgaW50IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT05OX0JFICAweDEwICAgICAgIC8qIENvbm5lY3Rpb24gaW5kaWNhdG9yIGludCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERJU0NPTl9CRSAgMHgyMCAgICAgICAvKiBEaXNjb25uZWN0IGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgU0VTU0lPTl9SRVFfQkUgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0IGludCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgVkJVU19FUlJPUl9CRSAgMHg4MCAgICAgICAvKiBWYnVzIHRocmVzaG9sZCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9GUkFNRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBGUkFNRV9OVU1CRVIgIDB4N2ZmICAgICAgLyogRnJhbWUgbnVtYmVyICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOREVYICovCi0KLSNkZWZpbmUgICAgICAgICBTRUxFQ1RFRF9FTkRQT0lOVCAgMHhmICAgICAgICAvKiBzZWxlY3RlZCBlbmRwb2ludCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9HTE9CQUxfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgR0xPQkFMX0VOQSAgMHgxICAgICAgICAvKiBlbmFibGVzIFVTQiBtb2R1bGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAxX1RYX0VOQSAgMHgyICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAxIGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDJfVFhfRU5BICAweDQgICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDIgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQM19UWF9FTkEgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMyBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA0X1RYX0VOQSAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA0IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDVfVFhfRU5BICAweDIwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDUgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9UWF9FTkEgIDB4NDAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNiBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA3X1RYX0VOQSAgMHg4MCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA3IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDFfUlhfRU5BICAweDEwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMSBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAyX1JYX0VOQSAgMHgyMDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDIgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQM19SWF9FTkEgIDB4NDAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAzIGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDRfUlhfRU5BICAweDgwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA1X1JYX0VOQSAgMHgxMDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDUgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9SWF9FTkEgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA2IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDdfUlhfRU5BICAweDQwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNyBlbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX0RFVl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRVNTSU9OICAweDEgICAgICAgIC8qIHNlc3Npb24gaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SRVEgIDB4MiAgICAgICAgLyogSG9zdCBuZWdvdGlhdGlvbiByZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX01PREUgIDB4NCAgICAgICAgLyogaW5kaWNhdGVzIFVTQkRSQyBpcyBhIGhvc3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBWQlVTMCAgMHg4ICAgICAgICAvKiBWYnVzIGxldmVsIGluZGljYXRvclswXSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFZCVVMxICAweDEwICAgICAgIC8qIFZidXMgbGV2ZWwgaW5kaWNhdG9yWzFdICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTFNERVYgIDB4MjAgICAgICAgLyogTG93LXNwZWVkIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZTREVWICAweDQwICAgICAgIC8qIEZ1bGwgb3IgSGlnaC1zcGVlZCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBCX0RFVklDRSAgMHg4MCAgICAgICAvKiBBJyBvciAnQicgZGV2aWNlIGluZGljYXRvciAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfVkJVU19JUlEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBEUklWRV9WQlVTX09OICAweDEgICAgICAgIC8qIGluZGljYXRvciB0byBkcml2ZSBWQlVTIGNvbnRyb2wgY2lyY3VpdCAqLwotI2RlZmluZSAgICAgICAgICAgIERSSVZFX1ZCVVNfT0ZGICAweDIgICAgICAgIC8qIGluZGljYXRvciB0byBzaHV0IG9mZiBjaGFyZ2UgcHVtcCAqLwotI2RlZmluZSAgICAgICAgICAgQ0hSR19WQlVTX1NUQVJUICAweDQgICAgICAgIC8qIGluZGljYXRvciBmb3IgZXh0ZXJuYWwgY2lyY3VpdCB0byBzdGFydCBjaGFyZ2luZyBWQlVTICovCi0jZGVmaW5lICAgICAgICAgICAgIENIUkdfVkJVU19FTkQgIDB4OCAgICAgICAgLyogaW5kaWNhdG9yIGZvciBleHRlcm5hbCBjaXJjdWl0IHRvIGVuZCBjaGFyZ2luZyBWQlVTICovCi0jZGVmaW5lICAgICAgICBESVNDSFJHX1ZCVVNfU1RBUlQgIDB4MTAgICAgICAgLyogaW5kaWNhdG9yIHRvIHN0YXJ0IGRpc2NoYXJnaW5nIFZCVVMgKi8KLSNkZWZpbmUgICAgICAgICAgRElTQ0hSR19WQlVTX0VORCAgMHgyMCAgICAgICAvKiBpbmRpY2F0b3IgdG8gc3RvcCBkaXNjaGFyZ2luZyBWQlVTICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19WQlVTX01BU0sgKi8KLQotI2RlZmluZSAgICAgICAgIERSSVZFX1ZCVVNfT05fRU5BICAweDEgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09OIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgRFJJVkVfVkJVU19PRkZfRU5BICAweDIgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09GRiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHg0ICAgICAgICAvKiBlbmFibGUgQ0hSR19WQlVTX1NUQVJUIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgIENIUkdfVkJVU19FTkRfRU5BICAweDggICAgICAgIC8qIGVuYWJsZSBDSFJHX1ZCVVNfRU5EIGludGVycnVwdCAqLwotI2RlZmluZSAgICBESVNDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDEwICAgICAgIC8qIGVuYWJsZSBESVNDSFJHX1ZCVVNfU1RBUlQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgRElTQ0hSR19WQlVTX0VORF9FTkEgIDB4MjAgICAgICAgLyogZW5hYmxlIERJU0NIUkdfVkJVU19FTkQgaW50ZXJydXB0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0NTUjAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYUEtUUkRZICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IHJlY2VpdmUgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVFhQS1RSRFkgIDB4MiAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgU1RBTExfU0VOVCAgMHg0ICAgICAgICAvKiBTVEFMTCBoYW5kc2hha2Ugc2VudCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRBRU5EICAweDggICAgICAgIC8qIERhdGEgZW5kIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFNFVFVQRU5EICAweDEwICAgICAgIC8qIFNldHVwIGVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgU0VORFNUQUxMICAweDIwICAgICAgIC8qIFNlbmQgU1RBTEwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgU0VSVklDRURfUlhQS1RSRFkgIDB4NDAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgUnhQa3RSZHkgYml0ICovCi0jZGVmaW5lICAgICAgICAgU0VSVklDRURfU0VUVVBFTkQgIDB4ODAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgU2V0dXBFbmQgYml0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBGTFVTSEZJRk8gIDB4MTAwICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICBTVEFMTF9SRUNFSVZFRF9IICAweDQgICAgICAgIC8qIFNUQUxMIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgU0VUVVBQS1RfSCAgMHg4ICAgICAgICAvKiBzZW5kIFNldHVwIHRva2VuIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUlJPUl9IICAweDEwICAgICAgIC8qIHRpbWVvdXQgZXJyb3IgaW5kaWNhdG9yIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFUVBLVF9IICAweDIwICAgICAgIC8qIFJlcXVlc3QgYW4gSU4gdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU1RBVFVTUEtUX0ggIDB4NDAgICAgICAgLyogU3RhdHVzIHN0YWdlIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICBOQUtfVElNRU9VVF9IICAweDgwICAgICAgIC8qIEVQMCBoYWx0ZWQgYWZ0ZXIgYSBOQUsgaG9zdCBtb2RlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0NPVU5UMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBFUDBfUlhfQ09VTlQgIDB4N2YgICAgICAgLyogbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGluIEVQMCBGSUZPICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX05BS0xJTUlUMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIEVQMF9OQUtfTElNSVQgIDB4MWYgICAgICAgLyogbnVtYmVyIG9mIGZyYW1lcy9taWNybyBmcmFtZXMgYWZ0ZXIgd2hpY2ggRVAwIHRpbWVvdXRzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYX01BWF9QQUNLRVQgKi8KLQotI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9UICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYX01BWF9QQUNLRVQgKi8KLQotI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9SICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYQ1NSICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVFhQS1RSRFlfVCAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICBGSUZPX05PVF9FTVBUWV9UICAweDIgICAgICAgIC8qIEZJRk8gbm90IGVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVOREVSUlVOX1QgIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1QgIDB4OCAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9UICAweDEwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1QgIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCi0jZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1QgIDB4NDAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QVFhfVCAgMHg4MCAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9UICAweDQwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgRk9SQ0VfREFUQVRPR0dMRV9UICAweDgwMCAgICAgIC8qIEZvcmNlIGRhdGEgdG9nZ2xlICovCi0jZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1QgIDB4MTAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19UICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEFVVE9TRVRfVCAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9USCAgMHg0ICAgICAgICAvKiBlcnJvciBjb25kaXRpb24gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgU1RBTExfUkVDRUlWRURfVEggIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgIE5BS19USU1FT1VUX1RIICAweDgwICAgICAgIC8qIE5BSyB0aW1lb3V0IGhvc3QgbW9kZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWENPVU5UICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUWF9DT1VOVCAgMHgxZmZmICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWENTUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFJYUEtUUkRZX1IgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBGSUZPX0ZVTExfUiAgMHgyICAgICAgICAvKiBGSUZPIG5vdCBlbXB0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgT1ZFUlJVTl9SICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVEFFUlJPUl9SICAweDggICAgICAgIC8qIE91dCBwYWNrZXQgY2Fubm90IGJlIGxvYWRlZCBpbnRvIFJ4ICBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1IgIDB4MTAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9SICAweDIwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1IgIDB4NDAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCi0jZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1IgIDB4ODAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QUlhfUiAgMHgxMDAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9SICAweDgwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgRElTTllFVF9SICAweDEwMDAgICAgIC8qIGRpc2FibGUgTnlldCBoYW5kc2hha2VzICovCi0jZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1IgIDB4MjAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19SICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBBVVRPQ0xFQVJfUiAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9SSCAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBSRVFQS1RfUkggIDB4MjAgICAgICAgLyogcmVxdWVzdCBhbiBJTiB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICBTVEFMTF9SRUNFSVZFRF9SSCAgMHg0MCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgSU5DT01QUlhfUkggIDB4MTAwICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgIERNQVJFUU1PREVfUkggIDB4ODAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVVRPUkVRX1JIICAweDQwMDAgICAgIC8qIHNldHMgUmVxUGt0IGF1dG9tYXRpY2FsbHkgaG9zdCBtb2RlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYQ09VTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYX0NPVU5UICAweDFmZmYgICAgIC8qIE51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiB0aGUgcGFja2V0IGluIHRoZSBSeCBGSUZPICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYVFlQRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgVEFSR0VUX0VQX05PX1QgIDB4ZiAgICAgICAgLyogRVAgbnVtYmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFBST1RPQ09MX1QgIDB4YyAgICAgICAgLyogdHJhbnNmZXIgdHlwZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWElOVEVSVkFMICovCi0KLSNkZWZpbmUgICAgICAgICAgVFhfUE9MTF9JTlRFUlZBTCAgMHhmZiAgICAgICAvKiBwb2xsaW5nIGludGVydmFsIGZvciBzZWxlY3RlZCBUeCBFUCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWFRZUEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgIFRBUkdFVF9FUF9OT19SICAweGYgICAgICAgIC8qIEVQIG51bWJlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQUk9UT0NPTF9SICAweGMgICAgICAgIC8qIHRyYW5zZmVyIHR5cGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfUlhJTlRFUlZBTCAqLwotCi0jZGVmaW5lICAgICAgICAgIFJYX1BPTExfSU5URVJWQUwgIDB4ZmYgICAgICAgLyogcG9sbGluZyBpbnRlcnZhbCBmb3Igc2VsZWN0ZWQgUnggRVAgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BX0lOVEVSUlVQVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMF9JTlQgIDB4MSAgICAgICAgLyogRE1BMCBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTFfSU5UICAweDIgICAgICAgIC8qIERNQTEgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEyX0lOVCAgMHg0ICAgICAgICAvKiBETUEyIHBlbmRpbmcgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BM19JTlQgIDB4OCAgICAgICAgLyogRE1BMyBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTRfSU5UICAweDEwICAgICAgIC8qIERNQTQgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE1X0lOVCAgMHgyMCAgICAgICAvKiBETUE1IHBlbmRpbmcgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNl9JTlQgIDB4NDAgICAgICAgLyogRE1BNiBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTdfSU5UICAweDgwICAgICAgIC8qIERNQTcgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPTlRST0wgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRU5BICAweDEgICAgICAgIC8qIERNQSBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERJUkVDVElPTiAgMHgyICAgICAgICAvKiBkaXJlY3Rpb24gb2YgRE1BIHRyYW5zZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1PREUgIDB4NCAgICAgICAgLyogRE1BIEJ1cyBlcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBJTlRfRU5BICAweDggICAgICAgIC8qIEludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUE5VTSAgMHhmMCAgICAgICAvKiBFUCBudW1iZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBCVVNFUlJPUiAgMHgxMDAgICAgICAvKiBETUEgQnVzIGVycm9yICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhBRERSSElHSCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIERNQV9BRERSX0hJR0ggIDB4ZmZmZiAgICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBETUEgbWFzdGVyIGNoYW5uZWwgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeEFERFJMT1cgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgRE1BX0FERFJfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgRE1BIG1hc3RlciBjaGFubmVsICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT1VOVEhJR0ggKi8KLQotI2RlZmluZSAgICAgICAgICAgIERNQV9DT1VOVF9ISUdIICAweGZmZmYgICAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09VTlRMT1cgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBETUFfQ09VTlRfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhNRE1BeF9DT05UUk9MICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUFFTiAgMHgxICAgICAgICAvKiBIYW5kc2hha2UgTURNQSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJFUCAgMHgyICAgICAgICAvKiBIYW5kc2hha2UgTURNQSBSZXF1ZXN0IFBvbGFyaXR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVVEUgIDB4OCAgICAgICAgLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBPSUUgIDB4MTAgICAgICAgLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCRElFICAweDIwICAgICAgIC8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQkRJICAweDQwICAgICAgIC8qIE1hc2sgQmxvY2sgRG9uZSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERSUSAgMHgzMDAgICAgICAvKiBIYW5kc2hha2UgTURNQSBSZXF1ZXN0IFR5cGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJCQyAgMHgxMDAwICAgICAvKiBGb3JjZSBSZWxvYWQgb2YgQkNPVU5UICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUFMgIDB4MjAwMCAgICAgLyogUGluIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9JICAweDQwMDAgICAgIC8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJESSAgMHg4MDAwICAgICAvKiBCbG9jayBEb25lIEludGVycnVwdCBHZW5lcmF0ZWQgKi8KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogICAgIE1VTFRJIEJJVCBNQUNSTyBFTlVNRVJBVElPTlMgICAgICAgICAgICAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0KICNlbmRpZiAvKiBfREVGX0JGNTQ4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaAppbmRleCBmN2YwNDM1Li41YTA0ZTZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCkBAIC0xMCwxMjEgKzEwLDEzIEBACiAvKiBJbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCiAjaW5jbHVkZSA8YXNtL2RlZl9MUEJsYWNrZmluLmg+CiAKLQogLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDkgKi8KIAogLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KICNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCiAKLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0OSB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KLQotLyogVGltZXIgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9DT05GSUcgIDB4ZmZjMDA2MDAgICAvKiBUaW1lciA4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI4X0NPVU5URVIgIDB4ZmZjMDA2MDQgICAvKiBUaW1lciA4IENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9QRVJJT0QgIDB4ZmZjMDA2MDggICAvKiBUaW1lciA4IFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9XSURUSCAgMHhmZmMwMDYwYyAgIC8qIFRpbWVyIDggV2lkdGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9DT05GSUcgIDB4ZmZjMDA2MTAgICAvKiBUaW1lciA5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI5X0NPVU5URVIgIDB4ZmZjMDA2MTQgICAvKiBUaW1lciA5IENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9QRVJJT0QgIDB4ZmZjMDA2MTggICAvKiBUaW1lciA5IFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9XSURUSCAgMHhmZmMwMDYxYyAgIC8qIFRpbWVyIDkgV2lkdGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT05GSUcgIDB4ZmZjMDA2MjAgICAvKiBUaW1lciAxMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT1VOVEVSICAweGZmYzAwNjI0ICAgLyogVGltZXIgMTAgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUjEwX1BFUklPRCAgMHhmZmMwMDYyOCAgIC8qIFRpbWVyIDEwIFBlcmlvZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVIxMF9XSURUSCAgMHhmZmMwMDYyYyAgIC8qIFRpbWVyIDEwIFdpZHRoIFJlZ2lzdGVyICovCi0KLS8qIFRpbWVyIEdyb3VwIG9mIDMgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSX0VOQUJMRTEgIDB4ZmZjMDA2NDAgICAvKiBUaW1lciBHcm91cCBvZiAzIEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUl9ESVNBQkxFMSAgMHhmZmMwMDY0NCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgRGlzYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVJfU1RBVFVTMSAgMHhmZmMwMDY0OCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgU3RhdHVzIFJlZ2lzdGVyICovCi0KLS8qIFNQT1JUMCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVENSMSAgMHhmZmMwMDgwMCAgIC8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1RDUjIgIDB4ZmZjMDA4MDQgICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UQ0xLRElWICAweGZmYzAwODA4ICAgLyogU1BPUlQwIFRyYW5zbWl0IFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVEZTRElWICAweGZmYzAwODBjICAgLyogU1BPUlQwIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UWCAgMHhmZmMwMDgxMCAgIC8qIFNQT1JUMCBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JYICAweGZmYzAwODE4ICAgLyogU1BPUlQwIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNSMSAgMHhmZmMwMDgyMCAgIC8qIFNQT1JUMCBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNSMiAgMHhmZmMwMDgyNCAgIC8qIFNQT1JUMCBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNMS0RJViAgMHhmZmMwMDgyOCAgIC8qIFNQT1JUMCBSZWNlaXZlIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkZTRElWICAweGZmYzAwODJjICAgLyogU1BPUlQwIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9TVEFUICAweGZmYzAwODMwICAgLyogU1BPUlQwIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfQ0hOTCAgMHhmZmMwMDgzNCAgIC8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTUNNQzEgIDB4ZmZjMDA4MzggICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTUNNQzIgIDB4ZmZjMDA4M2MgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzAgIDB4ZmZjMDA4NDAgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NVENTMSAgMHhmZmMwMDg0NCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01UQ1MyICAweGZmYzAwODQ4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzMgIDB4ZmZjMDA4NGMgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMCAgMHhmZmMwMDg1MCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVJDUzEgIDB4ZmZjMDA4NTQgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01SQ1MyICAweGZmYzAwODU4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMyAgMHhmZmMwMDg1YyAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KLQotLyogRVBQSTAgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9TVEFUVVMgIDB4ZmZjMDEwMDAgICAvKiBFUFBJMCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9IQ09VTlQgIDB4ZmZjMDEwMDQgICAvKiBFUFBJMCBIb3Jpem9udGFsIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfSERFTEFZICAweGZmYzAxMDA4ICAgLyogRVBQSTAgSG9yaXpvbnRhbCBEZWxheSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX1ZDT1VOVCAgMHhmZmMwMTAwYyAgIC8qIEVQUEkwIFZlcnRpY2FsIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfVkRFTEFZICAweGZmYzAxMDEwICAgLyogRVBQSTAgVmVydGljYWwgRGVsYXkgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRVBQSTBfRlJBTUUgIDB4ZmZjMDEwMTQgICAvKiBFUFBJMCBMaW5lcyBwZXIgRnJhbWUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0xJTkUgIDB4ZmZjMDEwMTggICAvKiBFUFBJMCBTYW1wbGVzIHBlciBMaW5lIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ0xLRElWICAweGZmYzAxMDFjICAgLyogRVBQSTAgQ2xvY2sgRGl2aWRlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUFBJMF9DT05UUk9MICAweGZmYzAxMDIwICAgLyogRVBQSTAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJMF9GUzFXX0hCTCAgMHhmZmMwMTAyNCAgIC8qIEVQUEkwIEZTMSBXaWR0aCBSZWdpc3RlciAvIEVQUEkwIEhvcml6b250YWwgQmxhbmtpbmcgU2FtcGxlcyBQZXIgTGluZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQUEkwX0ZTMVBfQVZQTCAgMHhmZmMwMTAyOCAgIC8qIEVQUEkwIEZTMSBQZXJpb2QgUmVnaXN0ZXIgLyBFUFBJMCBBY3RpdmUgVmlkZW8gU2FtcGxlcyBQZXIgTGluZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJMF9GUzJXX0xWQiAgMHhmZmMwMTAyYyAgIC8qIEVQUEkwIEZTMiBXaWR0aCBSZWdpc3RlciAvIEVQUEkwIExpbmVzIG9mIFZlcnRpY2FsIEJsYW5raW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVBQSTBfRlMyUF9MQVZGICAweGZmYzAxMDMwICAgLyogRVBQSTAgRlMyIFBlcmlvZCBSZWdpc3Rlci8gRVBQSTAgTGluZXMgb2YgQWN0aXZlIFZpZGVvIFBlciBGaWVsZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ0xJUCAgMHhmZmMwMTAzNCAgIC8qIEVQUEkwIENsaXBwaW5nIFJlZ2lzdGVyICovCi0KLS8qIFVBUlQyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfRExMICAweGZmYzAyMTAwICAgLyogRGl2aXNvciBMYXRjaCBMb3cgQnl0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQyX0RMSCAgMHhmZmMwMjEwNCAgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBCeXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9HQ1RMICAweGZmYzAyMTA4ICAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9MQ1IgIDB4ZmZjMDIxMGMgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9NQ1IgIDB4ZmZjMDIxMTAgICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfTFNSICAweGZmYzAyMTE0ICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9NU1IgIDB4ZmZjMDIxMTggICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9TQ1IgIDB4ZmZjMDIxMWMgICAvKiBTY3JhdGNoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBVQVJUMl9JRVJfU0VUICAweGZmYzAyMTIwICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBTZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVQVJUMl9JRVJfQ0xFQVIgIDB4ZmZjMDIxMjQgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIENsZWFyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfUkJSICAweGZmYzAyMTJjICAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKi8KLQotLyogVHdvIFdpcmUgSW50ZXJmYWNlIFJlZ2lzdGVycyAoVFdJMSkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRXSTFfUkVHQkFTRSAgMHhmZmMwMjIwMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUV0kxX0NMS0RJViAgMHhmZmMwMjIwMCAgIC8qIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUV0kxX0NPTlRST0wgIDB4ZmZjMDIyMDQgICAvKiBUV0kgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQ1RSTCAgMHhmZmMwMjIwOCAgIC8qIFRXSSBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX1NUQVQgIDB4ZmZjMDIyMGMgICAvKiBUV0kgU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX0FERFIgIDB4ZmZjMDIyMTAgICAvKiBUV0kgU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9DVFJMICAweGZmYzAyMjE0ICAgLyogVFdJIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX1NUQVQgIDB4ZmZjMDIyMTggICAvKiBUV0kgTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9BRERSICAweGZmYzAyMjFjICAgLyogVFdJIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfSU5UX1NUQVQgIDB4ZmZjMDIyMjAgICAvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFdJMV9JTlRfTUFTSyAgMHhmZmMwMjIyNCAgIC8qIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fQ1RSTCAgMHhmZmMwMjIyOCAgIC8qIFRXSSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9GSUZPX1NUQVQgIDB4ZmZjMDIyMmMgICAvKiBUV0kgRklGTyBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9YTVRfREFUQTggIDB4ZmZjMDIyODAgICAvKiBUV0kgRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9YTVRfREFUQTE2ICAweGZmYzAyMjg0ICAgLyogVFdJIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX1JDVl9EQVRBOCAgMHhmZmMwMjI4OCAgIC8qIFRXSSBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfUkNWX0RBVEExNiAgMHhmZmMwMjI4YyAgIC8qIFRXSSBGSUZPIFJlY2VpdmUgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLwotCi0vKiBTUEkyICBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQSTJfUkVHQkFTRSAgMHhmZmMwMjQwMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0NUTCAgMHhmZmMwMjQwMCAgIC8qIFNQSTIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0ZMRyAgMHhmZmMwMjQwNCAgIC8qIFNQSTIgRmxhZyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfU1RBVCAgMHhmZmMwMjQwOCAgIC8qIFNQSTIgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BJMl9UREJSICAweGZmYzAyNDBjICAgLyogU1BJMiBUcmFuc21pdCBEYXRhIEJ1ZmZlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfUkRCUiAgMHhmZmMwMjQxMCAgIC8qIFNQSTIgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfQkFVRCAgMHhmZmMwMjQxNCAgIC8qIFNQSTIgQmF1ZCBSYXRlIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQSTJfU0hBRE9XICAweGZmYzAyNDE4ICAgLyogU1BJMiBSZWNlaXZlIERhdGEgQnVmZmVyIFNoYWRvdyBSZWdpc3RlciAqLworLyogVGhlIEJGNTQ5IGlzIGxpa2UgdGhlIEJGNTQ0LCBidXQgaGFzIE1YVlIgKi8KKyNpbmNsdWRlICJkZWZCRjU0Ny5oIgogCiAvKiBNWFZSIFJlZ2lzdGVycyAqLwogCkBAIC0yOTYsMjQxOCArMTg4LDQgQEAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNWFZSX1BJTl9DVEwgIDB4ZmZjMDI4ZGMgICAvKiBNWFZSIFBpbiBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNWFZSX1NDTEtfQ05UICAweGZmYzAyOGUwICAgLyogTVhWUiBTeXN0ZW0gQ2xvY2sgQ291bnRlciBSZWdpc3RlciAqLwogCi0vKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAxIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUMxICAweGZmYzAzMjAwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01EMSAgMHhmZmMwMzIwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEaXJlY3Rpb24gUmVnaXN0ZXIgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJTMSAgMHhmZmMwMzIwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJSMSAgMHhmZmMwMzIwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVEExICAweGZmYzAzMjEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBBY2tub3dsZWRnZSBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQUExICAweGZmYzAzMjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBBYm9ydCBBY2tub3dsZWRnZSBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STVAxICAweGZmYzAzMjE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STUwxICAweGZmYzAzMjFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJUSUYxICAweGZmYzAzMjIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlJJRjEgIDB4ZmZjMDMyMjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CSU0xICAweGZmYzAzMjI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JGSDEgIDB4ZmZjMDMyMmMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgUmVnaXN0ZXIgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9PUFNTMSAgMHhmZmMwMzIzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgT3ZlcndyaXRlIFByb3RlY3Rpb24gU2luZ2xlIFNob3QgVHJhbnNtaXQgUmVnaXN0ZXIgMSAqLwotCi0vKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUMyICAweGZmYzAzMjQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01EMiAgMHhmZmMwMzI0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEaXJlY3Rpb24gUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJTMiAgMHhmZmMwMzI0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJSMiAgMHhmZmMwMzI0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCBSZWdpc3RlciAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVEEyICAweGZmYzAzMjUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBBY2tub3dsZWRnZSBSZWdpc3RlciAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQUEyICAweGZmYzAzMjU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBBYm9ydCBBY2tub3dsZWRnZSBSZWdpc3RlciAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STVAyICAweGZmYzAzMjU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyBSZWdpc3RlciAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STUwyICAweGZmYzAzMjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBSZWdpc3RlciAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJUSUYyICAweGZmYzAzMjYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlJJRjIgIDB4ZmZjMDMyNjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CSU0yICAweGZmYzAzMjY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JGSDIgIDB4ZmZjMDMyNmMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9PUFNTMiAgMHhmZmMwMzI3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgT3ZlcndyaXRlIFByb3RlY3Rpb24gU2luZ2xlIFNob3QgVHJhbnNtaXQgUmVnaXN0ZXIgMiAqLwotCi0vKiBDQU4gQ29udHJvbGxlciAxIENsb2NrL0ludGVycnVwdC9Db3VudGVyIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0NMT0NLICAweGZmYzAzMjgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBDbG9jayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX1RJTUlORyAgMHhmZmMwMzI4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgVGltaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0RFQlVHICAweGZmYzAzMjg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBEZWJ1ZyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX1NUQVRVUyAgMHhmZmMwMzI4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0NFQyAgMHhmZmMwMzI5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJUyAgMHhmZmMwMzI5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9HSU0gIDB4ZmZjMDMyOTggICAvKiBDQU4gQ29udHJvbGxlciAxIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJRiAgMHhmZmMwMzI5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOMV9DT05UUk9MICAweGZmYzAzMmEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfSU5UUiAgMHhmZmMwMzJhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CVEQgIDB4ZmZjMDMyYWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggVGVtcG9yYXJ5IERpc2FibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9FV1IgIDB4ZmZjMDMyYjAgICAvKiBDQU4gQ29udHJvbGxlciAxIFByb2dyYW1tYWJsZSBXYXJuaW5nIExldmVsIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfRVNSICAweGZmYzAzMmI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVUNDTlQgIDB4ZmZjMDMyYzQgICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9VQ1JDICAweGZmYzAzMmM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBVbml2ZXJzYWwgQ291bnRlciBGb3JjZSBSZWxvYWQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVUNDTkYgIDB4ZmZjMDMyY2MgICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLQotLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMEwgIDB4ZmZjMDMzMDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAwSCAgMHhmZmMwMzMwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMUwgIDB4ZmZjMDMzMDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAxSCAgMHhmZmMwMzMwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMkwgIDB4ZmZjMDMzMTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAySCAgMHhmZmMwMzMxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wM0wgIDB4ZmZjMDMzMTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAzSCAgMHhmZmMwMzMxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNEwgIDB4ZmZjMDMzMjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA0SCAgMHhmZmMwMzMyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNUwgIDB4ZmZjMDMzMjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA1SCAgMHhmZmMwMzMyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNkwgIDB4ZmZjMDMzMzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA2SCAgMHhmZmMwMzMzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wN0wgIDB4ZmZjMDMzMzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA3SCAgMHhmZmMwMzMzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wOEwgIDB4ZmZjMDMzNDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggOCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA4SCAgMHhmZmMwMzM0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wOUwgIDB4ZmZjMDMzNDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA5SCAgMHhmZmMwMzM0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMEwgIDB4ZmZjMDMzNTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMEggIDB4ZmZjMDMzNTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTExTCAgMHhmZmMwMzM1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTExSCAgMHhmZmMwMzM1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTJMICAweGZmYzAzMzYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTJIICAweGZmYzAzMzY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xM0wgIDB4ZmZjMDMzNjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xM0ggIDB4ZmZjMDMzNmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE0TCAgMHhmZmMwMzM3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE0SCAgMHhmZmMwMzM3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTVMICAweGZmYzAzMzc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTVIICAweGZmYzAzMzdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLQotLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNkwgIDB4ZmZjMDMzODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNkggIDB4ZmZjMDMzODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE3TCAgMHhmZmMwMzM4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE3SCAgMHhmZmMwMzM4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMThMICAweGZmYzAzMzkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMThIICAweGZmYzAzMzk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOUwgIDB4ZmZjMDMzOTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOUggIDB4ZmZjMDMzOWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIwTCAgMHhmZmMwMzNhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIwSCAgMHhmZmMwMzNhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjFMICAweGZmYzAzM2E4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjFIICAweGZmYzAzM2FjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMkwgIDB4ZmZjMDMzYjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMkggIDB4ZmZjMDMzYjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIzTCAgMHhmZmMwMzNiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIzSCAgMHhmZmMwMzNiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjRMICAweGZmYzAzM2MwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjRIICAweGZmYzAzM2M0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNUwgIDB4ZmZjMDMzYzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNUggIDB4ZmZjMDMzY2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI2TCAgMHhmZmMwMzNkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI2SCAgMHhmZmMwMzNkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjdMICAweGZmYzAzM2Q4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjdIICAweGZmYzAzM2RjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yOEwgIDB4ZmZjMDMzZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yOEggIDB4ZmZjMDMzZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI5TCAgMHhmZmMwMzNlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI5SCAgMHhmZmMwMzNlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMzBMICAweGZmYzAzM2YwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMzBIICAweGZmYzAzM2Y0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMUwgIDB4ZmZjMDMzZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMUggIDB4ZmZjMDMzZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLwotCi0vKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMCAgMHhmZmMwMzQwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMSAgMHhmZmMwMzQwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMiAgMHhmZmMwMzQwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMyAgMHhmZmMwMzQwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0xFTkdUSCAgMHhmZmMwMzQxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAwX1RJTUVTVEFNUCAgMHhmZmMwMzQxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0lEMCAgMHhmZmMwMzQxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0lEMSAgMHhmZmMwMzQxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMCAgMHhmZmMwMzQyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMSAgMHhmZmMwMzQyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMiAgMHhmZmMwMzQyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMyAgMHhmZmMwMzQyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0xFTkdUSCAgMHhmZmMwMzQzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAxX1RJTUVTVEFNUCAgMHhmZmMwMzQzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0lEMCAgMHhmZmMwMzQzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0lEMSAgMHhmZmMwMzQzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMCAgMHhmZmMwMzQ0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMSAgMHhmZmMwMzQ0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMiAgMHhmZmMwMzQ0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMyAgMHhmZmMwMzQ0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0xFTkdUSCAgMHhmZmMwMzQ1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAyX1RJTUVTVEFNUCAgMHhmZmMwMzQ1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0lEMCAgMHhmZmMwMzQ1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0lEMSAgMHhmZmMwMzQ1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMCAgMHhmZmMwMzQ2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMSAgMHhmZmMwMzQ2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMiAgMHhmZmMwMzQ2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMyAgMHhmZmMwMzQ2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0xFTkdUSCAgMHhmZmMwMzQ3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAzX1RJTUVTVEFNUCAgMHhmZmMwMzQ3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0lEMCAgMHhmZmMwMzQ3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0lEMSAgMHhmZmMwMzQ3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMCAgMHhmZmMwMzQ4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMSAgMHhmZmMwMzQ4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMiAgMHhmZmMwMzQ4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMyAgMHhmZmMwMzQ4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0xFTkdUSCAgMHhmZmMwMzQ5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA0X1RJTUVTVEFNUCAgMHhmZmMwMzQ5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0lEMCAgMHhmZmMwMzQ5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0lEMSAgMHhmZmMwMzQ5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMCAgMHhmZmMwMzRhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMSAgMHhmZmMwMzRhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMiAgMHhmZmMwMzRhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMyAgMHhmZmMwMzRhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0xFTkdUSCAgMHhmZmMwMzRiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA1X1RJTUVTVEFNUCAgMHhmZmMwMzRiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0lEMCAgMHhmZmMwMzRiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0lEMSAgMHhmZmMwMzRiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMCAgMHhmZmMwMzRjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMSAgMHhmZmMwMzRjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMiAgMHhmZmMwMzRjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMyAgMHhmZmMwMzRjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0xFTkdUSCAgMHhmZmMwMzRkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA2X1RJTUVTVEFNUCAgMHhmZmMwMzRkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0lEMCAgMHhmZmMwMzRkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0lEMSAgMHhmZmMwMzRkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMCAgMHhmZmMwMzRlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMSAgMHhmZmMwMzRlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMiAgMHhmZmMwMzRlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMyAgMHhmZmMwMzRlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0xFTkdUSCAgMHhmZmMwMzRmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA3X1RJTUVTVEFNUCAgMHhmZmMwMzRmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0lEMCAgMHhmZmMwMzRmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0lEMSAgMHhmZmMwMzRmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMCAgMHhmZmMwMzUwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMSAgMHhmZmMwMzUwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMiAgMHhmZmMwMzUwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMyAgMHhmZmMwMzUwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0xFTkdUSCAgMHhmZmMwMzUxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA4X1RJTUVTVEFNUCAgMHhmZmMwMzUxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0lEMCAgMHhmZmMwMzUxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0lEMSAgMHhmZmMwMzUxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMCAgMHhmZmMwMzUyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMSAgMHhmZmMwMzUyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMiAgMHhmZmMwMzUyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMyAgMHhmZmMwMzUyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0xFTkdUSCAgMHhmZmMwMzUzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA5X1RJTUVTVEFNUCAgMHhmZmMwMzUzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0lEMCAgMHhmZmMwMzUzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0lEMSAgMHhmZmMwMzUzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMCAgMHhmZmMwMzU0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTBfREFUQTEgIDB4ZmZjMDM1NDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0RBVEEyICAweGZmYzAzNTQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMyAgMHhmZmMwMzU0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9MRU5HVEggIDB4ZmZjMDM1NTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTBfVElNRVNUQU1QICAweGZmYzAzNTU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0lEMCAgMHhmZmMwMzU1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9JRDEgIDB4ZmZjMDM1NWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEEwICAweGZmYzAzNTYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMV9EQVRBMSAgMHhmZmMwMzU2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfREFUQTIgIDB4ZmZjMDM1NjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEEzICAweGZmYzAzNTZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0xFTkdUSCAgMHhmZmMwMzU3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxMV9USU1FU1RBTVAgIDB4ZmZjMDM1NzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfSUQwICAweGZmYzAzNTc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0lEMSAgMHhmZmMwMzU3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTAgIDB4ZmZjMDM1ODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEyX0RBVEExICAweGZmYzAzNTg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9EQVRBMiAgMHhmZmMwMzU4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTMgIDB4ZmZjMDM1OGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTJfTEVOR1RIICAweGZmYzAzNTkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjEyX1RJTUVTVEFNUCAgMHhmZmMwMzU5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9JRDAgIDB4ZmZjMDM1OTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfSUQxICAweGZmYzAzNTljICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMCAgMHhmZmMwMzVhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTNfREFUQTEgIDB4ZmZjMDM1YTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0RBVEEyICAweGZmYzAzNWE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMyAgMHhmZmMwMzVhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxM19MRU5HVEggIDB4ZmZjMDM1YjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTNfVElNRVNUQU1QICAweGZmYzAzNWI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0lEMCAgMHhmZmMwMzViOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19JRDEgIDB4ZmZjMDM1YmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEEwICAweGZmYzAzNWMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNF9EQVRBMSAgMHhmZmMwMzVjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfREFUQTIgIDB4ZmZjMDM1YzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEEzICAweGZmYzAzNWNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0xFTkdUSCAgMHhmZmMwMzVkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxNF9USU1FU1RBTVAgIDB4ZmZjMDM1ZDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfSUQwICAweGZmYzAzNWQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0lEMSAgMHhmZmMwMzVkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTAgIDB4ZmZjMDM1ZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE1X0RBVEExICAweGZmYzAzNWU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9EQVRBMiAgMHhmZmMwMzVlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTMgIDB4ZmZjMDM1ZWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTVfTEVOR1RIICAweGZmYzAzNWYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE1X1RJTUVTVEFNUCAgMHhmZmMwMzVmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9JRDAgIDB4ZmZjMDM1ZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfSUQxICAweGZmYzAzNWZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IElEMSBSZWdpc3RlciAqLwotCi0vKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMCAgMHhmZmMwMzYwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTZfREFUQTEgIDB4ZmZjMDM2MDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0RBVEEyICAweGZmYzAzNjA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMyAgMHhmZmMwMzYwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9MRU5HVEggIDB4ZmZjMDM2MTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTZfVElNRVNUQU1QICAweGZmYzAzNjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0lEMCAgMHhmZmMwMzYxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9JRDEgIDB4ZmZjMDM2MWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEEwICAweGZmYzAzNjIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxN19EQVRBMSAgMHhmZmMwMzYyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfREFUQTIgIDB4ZmZjMDM2MjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEEzICAweGZmYzAzNjJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0xFTkdUSCAgMHhmZmMwMzYzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxN19USU1FU1RBTVAgIDB4ZmZjMDM2MzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfSUQwICAweGZmYzAzNjM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0lEMSAgMHhmZmMwMzYzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTAgIDB4ZmZjMDM2NDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE4X0RBVEExICAweGZmYzAzNjQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9EQVRBMiAgMHhmZmMwMzY0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTMgIDB4ZmZjMDM2NGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMThfTEVOR1RIICAweGZmYzAzNjUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE4X1RJTUVTVEFNUCAgMHhmZmMwMzY1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9JRDAgIDB4ZmZjMDM2NTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMThfSUQxICAweGZmYzAzNjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMCAgMHhmZmMwMzY2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTlfREFUQTEgIDB4ZmZjMDM2NjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0RBVEEyICAweGZmYzAzNjY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMyAgMHhmZmMwMzY2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9MRU5HVEggIDB4ZmZjMDM2NzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTlfVElNRVNUQU1QICAweGZmYzAzNjc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0lEMCAgMHhmZmMwMzY3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9JRDEgIDB4ZmZjMDM2N2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEEwICAweGZmYzAzNjgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMF9EQVRBMSAgMHhmZmMwMzY4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfREFUQTIgIDB4ZmZjMDM2ODggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEEzICAweGZmYzAzNjhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0xFTkdUSCAgMHhmZmMwMzY5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyMF9USU1FU1RBTVAgIDB4ZmZjMDM2OTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfSUQwICAweGZmYzAzNjk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0lEMSAgMHhmZmMwMzY5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTAgIDB4ZmZjMDM2YTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIxX0RBVEExICAweGZmYzAzNmE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9EQVRBMiAgMHhmZmMwMzZhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTMgIDB4ZmZjMDM2YWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjFfTEVOR1RIICAweGZmYzAzNmIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjIxX1RJTUVTVEFNUCAgMHhmZmMwMzZiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9JRDAgIDB4ZmZjMDM2YjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfSUQxICAweGZmYzAzNmJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMCAgMHhmZmMwMzZjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjJfREFUQTEgIDB4ZmZjMDM2YzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0RBVEEyICAweGZmYzAzNmM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMyAgMHhmZmMwMzZjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9MRU5HVEggIDB4ZmZjMDM2ZDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjJfVElNRVNUQU1QICAweGZmYzAzNmQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0lEMCAgMHhmZmMwMzZkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9JRDEgIDB4ZmZjMDM2ZGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEEwICAweGZmYzAzNmUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyM19EQVRBMSAgMHhmZmMwMzZlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfREFUQTIgIDB4ZmZjMDM2ZTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEEzICAweGZmYzAzNmVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0xFTkdUSCAgMHhmZmMwMzZmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyM19USU1FU1RBTVAgIDB4ZmZjMDM2ZjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfSUQwICAweGZmYzAzNmY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0lEMSAgMHhmZmMwMzZmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTAgIDB4ZmZjMDM3MDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI0X0RBVEExICAweGZmYzAzNzA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9EQVRBMiAgMHhmZmMwMzcwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTMgIDB4ZmZjMDM3MGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjRfTEVOR1RIICAweGZmYzAzNzEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI0X1RJTUVTVEFNUCAgMHhmZmMwMzcxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9JRDAgIDB4ZmZjMDM3MTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfSUQxICAweGZmYzAzNzFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMCAgMHhmZmMwMzcyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjVfREFUQTEgIDB4ZmZjMDM3MjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0RBVEEyICAweGZmYzAzNzI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMyAgMHhmZmMwMzcyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9MRU5HVEggIDB4ZmZjMDM3MzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjVfVElNRVNUQU1QICAweGZmYzAzNzM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0lEMCAgMHhmZmMwMzczOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9JRDEgIDB4ZmZjMDM3M2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEEwICAweGZmYzAzNzQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNl9EQVRBMSAgMHhmZmMwMzc0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfREFUQTIgIDB4ZmZjMDM3NDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEEzICAweGZmYzAzNzRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0xFTkdUSCAgMHhmZmMwMzc1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyNl9USU1FU1RBTVAgIDB4ZmZjMDM3NTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfSUQwICAweGZmYzAzNzU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0lEMSAgMHhmZmMwMzc1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTAgIDB4ZmZjMDM3NjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI3X0RBVEExICAweGZmYzAzNzY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19EQVRBMiAgMHhmZmMwMzc2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTMgIDB4ZmZjMDM3NmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjdfTEVOR1RIICAweGZmYzAzNzcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI3X1RJTUVTVEFNUCAgMHhmZmMwMzc3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19JRDAgIDB4ZmZjMDM3NzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfSUQxICAweGZmYzAzNzdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMCAgMHhmZmMwMzc4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjhfREFUQTEgIDB4ZmZjMDM3ODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0RBVEEyICAweGZmYzAzNzg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMyAgMHhmZmMwMzc4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9MRU5HVEggIDB4ZmZjMDM3OTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjhfVElNRVNUQU1QICAweGZmYzAzNzk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0lEMCAgMHhmZmMwMzc5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9JRDEgIDB4ZmZjMDM3OWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEEwICAweGZmYzAzN2EwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOV9EQVRBMSAgMHhmZmMwMzdhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBEYXRhIDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfREFUQTIgIDB4ZmZjMDM3YTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgRGF0YSAyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEEzICAweGZmYzAzN2FjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0xFTkdUSCAgMHhmZmMwMzdiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBMZW5ndGggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyOV9USU1FU1RBTVAgIDB4ZmZjMDM3YjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgVGltZXN0YW1wIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfSUQwICAweGZmYzAzN2I4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IElEMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0lEMSAgMHhmZmMwMzdiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTAgIDB4ZmZjMDM3YzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMwX0RBVEExICAweGZmYzAzN2M0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIERhdGEgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9EQVRBMiAgMHhmZmMwMzdjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBEYXRhIDIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTMgIDB4ZmZjMDM3Y2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMzBfTEVOR1RIICAweGZmYzAzN2QwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIExlbmd0aCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjMwX1RJTUVTVEFNUCAgMHhmZmMwMzdkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9JRDAgIDB4ZmZjMDM3ZDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfSUQxICAweGZmYzAzN2RjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMCAgMHhmZmMwMzdlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzFfREFUQTEgIDB4ZmZjMDM3ZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgRGF0YSAxIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0RBVEEyICAweGZmYzAzN2U4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIERhdGEgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMyAgMHhmZmMwMzdlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9MRU5HVEggIDB4ZmZjMDM3ZjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMzFfVElNRVNUQU1QICAweGZmYzAzN2Y0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIFRpbWVzdGFtcCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0lEMCAgMHhmZmMwMzdmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9JRDEgIDB4ZmZjMDM3ZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgSUQxIFJlZ2lzdGVyICovCi0KLS8qIEFUQVBJIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBVEFQSV9DT05UUk9MICAweGZmYzAzODAwICAgLyogQVRBUEkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFUQVBJX1NUQVRVUyAgMHhmZmMwMzgwNCAgIC8qIEFUQVBJIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfQUREUiAgMHhmZmMwMzgwOCAgIC8qIEFUQVBJIERldmljZSBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQVRBUElfREVWX1RYQlVGICAweGZmYzAzODBjICAgLyogQVRBUEkgRGV2aWNlIFJlZ2lzdGVyIFdyaXRlIERhdGEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfUlhCVUYgIDB4ZmZjMDM4MTAgICAvKiBBVEFQSSBEZXZpY2UgUmVnaXN0ZXIgUmVhZCBEYXRhICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9NQVNLICAweGZmYzAzODE0ICAgLyogQVRBUEkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9TVEFUVVMgIDB4ZmZjMDM4MTggICAvKiBBVEFQSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX1hGRVJfTEVOICAweGZmYzAzODFjICAgLyogQVRBUEkgTGVuZ3RoIG9mIFRyYW5zZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0xJTkVfU1RBVFVTICAweGZmYzAzODIwICAgLyogQVRBUEkgTGluZSBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVRBUElfU01fU1RBVEUgIDB4ZmZjMDM4MjQgICAvKiBBVEFQSSBTdGF0ZSBNYWNoaW5lIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1RFUk1JTkFURSAgMHhmZmMwMzgyOCAgIC8qIEFUQVBJIEhvc3QgVGVybWluYXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBBVEFQSV9QSU9fVEZSQ05UICAweGZmYzAzODJjICAgLyogQVRBUEkgUElPIG1vZGUgdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0RNQV9URlJDTlQgIDB4ZmZjMDM4MzAgICAvKiBBVEFQSSBETUEgbW9kZSB0cmFuc2ZlciBjb3VudCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX1VNQUlOX1RGUkNOVCAgMHhmZmMwMzgzNCAgIC8qIEFUQVBJIFVETUFJTiB0cmFuc2ZlciBjb3VudCAqLwotI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9VRE1BT1VUX1RGUkNOVCAgMHhmZmMwMzgzOCAgIC8qIEFUQVBJIFVETUFPVVQgdHJhbnNmZXIgY291bnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9SRUdfVElNXzAgIDB4ZmZjMDM4NDAgICAvKiBBVEFQSSBSZWdpc3RlciBUcmFuc2ZlciBUaW1pbmcgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMCAgMHhmZmMwMzg0NCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMSAgMHhmZmMwMzg0OCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMCAgMHhmZmMwMzg1MCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMSAgMHhmZmMwMzg1NCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMiAgMHhmZmMwMzg1OCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMCAgMHhmZmMwMzg2MCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMSAgMHhmZmMwMzg2NCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMiAgMHhmZmMwMzg2OCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMyAgMHhmZmMwMzg2YyAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMyBSZWdpc3RlciAqLwotCi0vKiBTREggUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0RIX1BXUl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBTREggUG93ZXIgQ29udHJvbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTREhfQ0xLX0NUTCAgMHhmZmMwMzkwNCAgIC8qIFNESCBDbG9jayBDb250cm9sICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0FSR1VNRU5UICAweGZmYzAzOTA4ICAgLyogU0RIIEFyZ3VtZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNESF9DT01NQU5EICAweGZmYzAzOTBjICAgLyogU0RIIENvbW1hbmQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfUkVTUF9DTUQgIDB4ZmZjMDM5MTAgICAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMCAgMHhmZmMwMzkxNCAgIC8qIFNESCBSZXNwb25zZTAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNESF9SRVNQT05TRTEgIDB4ZmZjMDM5MTggICAvKiBTREggUmVzcG9uc2UxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREhfUkVTUE9OU0UyICAweGZmYzAzOTFjICAgLyogU0RIIFJlc3BvbnNlMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMyAgMHhmZmMwMzkyMCAgIC8qIFNESCBSZXNwb25zZTMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfVElNRVIgIDB4ZmZjMDM5MjQgICAvKiBTREggRGF0YSBUaW1lciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfTEdUSCAgMHhmZmMwMzkyOCAgIC8qIFNESCBEYXRhIExlbmd0aCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9EQVRBX0NUTCAgMHhmZmMwMzkyYyAgIC8qIFNESCBEYXRhIENvbnRyb2wgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfREFUQV9DTlQgIDB4ZmZjMDM5MzAgICAvKiBTREggRGF0YSBDb3VudGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTICAweGZmYzAzOTM0ICAgLyogU0RIIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTX0NMUiAgMHhmZmMwMzkzOCAgIC8qIFNESCBTdGF0dXMgQ2xlYXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTREhfTUFTSzAgIDB4ZmZjMDM5M2MgICAvKiBTREggSW50ZXJydXB0MCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU0RIX01BU0sxICAweGZmYzAzOTQwICAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9GSUZPX0NOVCAgMHhmZmMwMzk0OCAgIC8qIFNESCBGSUZPIENvdW50ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0RIX0ZJRk8gIDB4ZmZjMDM5ODAgICAvKiBTREggRGF0YSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0VfU1RBVFVTICAweGZmYzAzOWMwICAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNESF9FX01BU0sgIDB4ZmZjMDM5YzQgICAvKiBTREggRXhjZXB0aW9uIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9DRkcgIDB4ZmZjMDM5YzggICAvKiBTREggQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfUkRfV0FJVF9FTiAgMHhmZmMwMzljYyAgIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQwICAweGZmYzAzOWQwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24wICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQxICAweGZmYzAzOWQ0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24xICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQyICAweGZmYzAzOWQ4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQzICAweGZmYzAzOWRjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ0ICAweGZmYzAzOWUwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb240ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ1ICAweGZmYzAzOWU0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ2ICAweGZmYzAzOWU4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb242ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ3ICAweGZmYzAzOWVjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb243ICovCi0KLS8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ09OVFJPTCAgMHhmZmMwM2EwMCAgIC8qIEhPU1QgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRVUyAgMHhmZmMwM2EwNCAgIC8qIEhPU1QgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9USU1FT1VUICAweGZmYzAzYTA4ICAgLyogSE9TVCBBY2tub3dsZWRnZSBNb2RlIFRpbWVvdXQgUmVnaXN0ZXIgKi8KLQotLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRkFERFIgIDB4ZmZjMDNjMDAgICAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1BPV0VSICAweGZmYzAzYzA0ICAgLyogUG93ZXIgbWFuYWdlbWVudCByZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWCAgMHhmZmMwM2MwOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgVHggZW5kcG9pbnQgMSB0byA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYICAweGZmYzAzYzBjICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBSeCBlbmRwb2ludHMgMSB0byA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFhFICAweGZmYzAzYzEwICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clR4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlhFICAweGZmYzAzYzE0ICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clJ4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCICAweGZmYzAzYzE4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBjb21tb24gVVNCIGludGVycnVwdHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQkUgIDB4ZmZjMDNjMWMgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVVNCICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZSQU1FICAweGZmYzAzYzIwICAgLyogVVNCIGZyYW1lIG51bWJlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTkRFWCAgMHhmZmMwM2MyNCAgIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIGluZGV4ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1RFU1RNT0RFICAweGZmYzAzYzI4ICAgLyogRW5hYmxlZCBVU0IgMjAgdGVzdCBtb2RlcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CSU5UUiAgMHhmZmMwM2MyYyAgIC8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBhbmQgV2FrZXVwIEV4Y2VwdGlvbiBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JBTF9DVEwgIDB4ZmZjMDNjMzAgICAvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBmb3IgdGhlIGNvcmUgKi8KLQotLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9UWF9NQVhfUEFDS0VUICAweGZmYzAzYzQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1NSMCAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENTUiAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfUlhfTUFYX1BBQ0tFVCAgMHhmZmMwM2M0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDU1IgIDB4ZmZjMDNjNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NPVU5UMCAgMHhmZmMwM2M1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENPVU5UICAweGZmYzAzYzUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWFRZUEUgIDB4ZmZjMDNjNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBVU0JfTkFLTElNSVQwICAweGZmYzAzYzU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1RYSU5URVJWQUwgIDB4ZmZjMDNjNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYVFlQRSAgMHhmZmMwM2M1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1JYSU5URVJWQUwgIDB4ZmZjMDNjNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ09VTlQgIDB4ZmZjMDNjNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDBfRklGTyAgMHhmZmMwM2M4MCAgIC8qIEVuZHBvaW50IDAgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDFfRklGTyAgMHhmZmMwM2M4OCAgIC8qIEVuZHBvaW50IDEgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDJfRklGTyAgMHhmZmMwM2M5MCAgIC8qIEVuZHBvaW50IDIgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDNfRklGTyAgMHhmZmMwM2M5OCAgIC8qIEVuZHBvaW50IDMgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDRfRklGTyAgMHhmZmMwM2NhMCAgIC8qIEVuZHBvaW50IDQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDVfRklGTyAgMHhmZmMwM2NhOCAgIC8qIEVuZHBvaW50IDUgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDZfRklGTyAgMHhmZmMwM2NiMCAgIC8qIEVuZHBvaW50IDYgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDdfRklGTyAgMHhmZmMwM2NiOCAgIC8qIEVuZHBvaW50IDcgRklGTyAqLwotCi0vKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfT1RHX0RFVl9DVEwgIDB4ZmZjMDNkMDAgICAvKiBPVEcgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19JUlEgIDB4ZmZjMDNkMDQgICAvKiBPVEcgVkJVUyBDb250cm9sIEludGVycnVwdHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX01BU0sgIDB4ZmZjMDNkMDggICAvKiBWQlVTIENvbnRyb2wgSW50ZXJydXB0IEVuYWJsZSAqLwotCi0vKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfTElOS0lORk8gIDB4ZmZjMDNkNDggICAvKiBFbmFibGVzIHByb2dyYW1taW5nIG9mIHNvbWUgUEhZLXNpZGUgZGVsYXlzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1ZQTEVOICAweGZmYzAzZDRjICAgLyogRGV0ZXJtaW5lcyBkdXJhdGlvbiBvZiBWQlVTIHB1bHNlIGZvciBWQlVTIGNoYXJnaW5nICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9IU19FT0YxICAweGZmYzAzZDUwICAgLyogVGltZSBidWZmZXIgZm9yIEhpZ2gtU3BlZWQgdHJhbnNhY3Rpb25zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9GU19FT0YxICAweGZmYzAzZDU0ICAgLyogVGltZSBidWZmZXIgZm9yIEZ1bGwtU3BlZWQgdHJhbnNhY3Rpb25zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9MU19FT0YxICAweGZmYzAzZDU4ICAgLyogVGltZSBidWZmZXIgZm9yIExvdy1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KLQotLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMICAweGZmYzAzZGUwICAgLyogUmVnaXN0ZXIgdGhhdCBpbmNyZWFzZXMgdmlzaWJpbGl0eSBvZiBBbmFsb2cgUEhZICovCi0KLS8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DQUxJQiAgMHhmZmMwM2RlNCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gc2V0IHNvbWUgY2FsaWJyYXRpb24gdmFsdWVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0FQSFlfQ05UUkwyICAweGZmYzAzZGU4ICAgLyogUmVnaXN0ZXIgdXNlZCB0byBwcmV2ZW50IHJlLWVudW1lcmF0aW9uIG9uY2UgTW9hYiBnb2VzIGludG8gaGliZXJuYXRlIG1vZGUgKi8KLQotLyogKFBIWV9URVNUIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9QSFlfVEVTVCAgMHhmZmMwM2RlYyAgIC8qIFVzZWQgZm9yIHJlZHVjaW5nIHNpbXVsYXRpb24gdGltZSBhbmQgc2ltcGxpZmllcyBGSUZPIHRlc3RhYmlsaXR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX1BMTE9TQ19DVFJMICAweGZmYzAzZGYwICAgLyogVXNlZCB0byBwcm9ncmFtIGRpZmZlcmVudCBwYXJhbWV0ZXJzIGZvciBVU0IgUExMIGFuZCBPc2NpbGxhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9TUlBfQ0xLRElWICAweGZmYzAzZGY0ICAgLyogVXNlZCB0byBwcm9ncmFtIGNsb2NrIGRpdmlkZSB2YWx1ZSBmb3IgdGhlIGNsb2NrIGZlZCB0byB0aGUgU1JQIGRldGVjdGlvbiBsb2dpYyAqLwotCi0vKiBVU0IgRW5kcG9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhNQVhQICAweGZmYzAzZTAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDU1IgIDB4ZmZjMDNlMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYTUFYUCAgMHhmZmMwM2UwOCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYQ1NSICAweGZmYzAzZTBjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENPVU5UICAweGZmYzAzZTEwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYVFlQRSAgMHhmZmMwM2UxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9UWElOVEVSVkFMICAweGZmYzAzZTE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYVFlQRSAgMHhmZmMwM2UxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQwICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9SWElOVEVSVkFMICAweGZmYzAzZTIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCi0KLS8qIFVTQiBFbmRwb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ09VTlQgIDB4ZmZjMDNlMjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQwIFR4IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWE1BWFAgIDB4ZmZjMDNlNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENTUiAgMHhmZmMwM2U0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWE1BWFAgIDB4ZmZjMDNlNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWENTUiAgMHhmZmMwM2U0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDT1VOVCAgMHhmZmMwM2U1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDEgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYVFlQRSAgMHhmZmMwM2U1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQxICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9UWElOVEVSVkFMICAweGZmYzAzZTU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhUWVBFICAweGZmYzAzZTVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDEgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkxX1JYSU5URVJWQUwgIDB4ZmZjMDNlNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KLQotLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDT1VOVCAgMHhmZmMwM2U2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZStIMTAyIGVuZHBvaW50MSBUeCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhNQVhQICAweGZmYzAzZTgwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDU1IgIDB4ZmZjMDNlODQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhNQVhQICAweGZmYzAzZTg4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhDU1IgIDB4ZmZjMDNlOGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ09VTlQgIDB4ZmZjMDNlOTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQyIEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWFRZUEUgIDB4ZmZjMDNlOTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MiAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhJTlRFUlZBTCAgMHhmZmMwM2U5OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYVFlQRSAgMHhmZmMwM2U5YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQyICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMl9SWElOVEVSVkFMICAweGZmYzAzZWEwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCi0KLS8qIFVTQiBFbmRwb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ09VTlQgIDB4ZmZjMDNlYTggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQyIFR4IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWE1BWFAgIDB4ZmZjMDNlYzAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENTUiAgMHhmZmMwM2VjNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWE1BWFAgIDB4ZmZjMDNlYzggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWENTUiAgMHhmZmMwM2VjYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDT1VOVCAgMHhmZmMwM2VkMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDMgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYVFlQRSAgMHhmZmMwM2VkNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQzICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19UWElOVEVSVkFMICAweGZmYzAzZWQ4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhUWVBFICAweGZmYzAzZWRjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDMgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkzX1JYSU5URVJWQUwgIDB4ZmZjMDNlZTAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KLQotLyogVVNCIEVuZHBvaW50IDQgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDT1VOVCAgMHhmZmMwM2VlOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBIMTI0ZW5kcG9pbnQzIFR4IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWE1BWFAgIDB4ZmZjMDNmMDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENTUiAgMHhmZmMwM2YwNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWE1BWFAgIDB4ZmZjMDNmMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWENTUiAgMHhmZmMwM2YwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDT1VOVCAgMHhmZmMwM2YxMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYVFlQRSAgMHhmZmMwM2YxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9UWElOVEVSVkFMICAweGZmYzAzZjE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhUWVBFICAweGZmYzAzZjFjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDQgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk0X1JYSU5URVJWQUwgIDB4ZmZjMDNmMjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KLQotLyogVVNCIEVuZHBvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDT1VOVCAgMHhmZmMwM2YyOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDQgVHggRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYTUFYUCAgMHhmZmMwM2Y0MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ1NSICAweGZmYzAzZjQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYTUFYUCAgMHhmZmMwM2Y0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYQ1NSICAweGZmYzAzZjRjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENPVU5UICAweGZmYzAzZjUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NSBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhUWVBFICAweGZmYzAzZjU0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDUgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1RYSU5URVJWQUwgIDB4ZmZjMDNmNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWFRZUEUgIDB4ZmZjMDNmNWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NSAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhJTlRFUlZBTCAgMHhmZmMwM2Y2MCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLwotCi0vKiBVU0IgRW5kcG9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENPVU5UICAweGZmYzAzZjY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEgxNDVlbmRwb2ludDUgVHggRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYTUFYUCAgMHhmZmMwM2Y4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYQ1NSICAweGZmYzAzZjg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYTUFYUCAgMHhmZmMwM2Y4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ1NSICAweGZmYzAzZjhjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENPVU5UICAweGZmYzAzZjkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NiBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhUWVBFICAweGZmYzAzZjk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1RYSU5URVJWQUwgIDB4ZmZjMDNmOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWFRZUEUgIDB4ZmZjMDNmOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NiAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhJTlRFUlZBTCAgMHhmZmMwM2ZhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLwotCi0vKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWENPVU5UICAweGZmYzAzZmE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NiBUeCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhNQVhQICAweGZmYzAzZmMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDU1IgIDB4ZmZjMDNmYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhNQVhQICAweGZmYzAzZmM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDU1IgIDB4ZmZjMDNmY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ09VTlQgIDB4ZmZjMDNmZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ3IEZJRk8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWFRZUEUgIDB4ZmZjMDNmZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhJTlRFUlZBTCAgMHhmZmMwM2ZkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYVFlQRSAgMHhmZmMwM2ZkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19SWElOVEVSVkFMICAweGZmYzAzZmYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENPVU5UICAweGZmYzAzZmY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NyBUeCBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUFfSU5URVJSVVBUICAweGZmYzA0MDAwICAgLyogSW5kaWNhdGVzIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgdGhlIERNQSBjaGFubmVscyAqLwotCi0vKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09OVFJPTCAgMHhmZmMwNDAwNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAwIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMEFERFJMT1cgIDB4ZmZjMDQwMDggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQUREUkhJR0ggIDB4ZmZjMDQwMGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09VTlRMT1cgIDB4ZmZjMDQwMTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMENPVU5USElHSCAgMHhmZmMwNDAxNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCi0KLS8qIFVTQiBDaGFubmVsIDEgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT05UUk9MICAweGZmYzA0MDI0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDEgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUExQUREUkxPVyAgMHhmZmMwNDAyOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFBRERSSElHSCAgMHhmZmMwNDAyYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT1VOVExPVyAgMHhmZmMwNDAzMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUExQ09VTlRISUdIICAweGZmYzA0MDM0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KLQotLyogVVNCIENoYW5uZWwgMiBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPTlRST0wgIDB4ZmZjMDQwNDQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMiBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTJBRERSTE9XICAweGZmYzA0MDQ4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkFERFJISUdIICAweGZmYzA0MDRjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPVU5UTE9XICAweGZmYzA0MDUwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTJDT1VOVEhJR0ggIDB4ZmZjMDQwNTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLwotCi0vKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09OVFJPTCAgMHhmZmMwNDA2NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAzIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BM0FERFJMT1cgIDB4ZmZjMDQwNjggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQUREUkhJR0ggIDB4ZmZjMDQwNmMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09VTlRMT1cgIDB4ZmZjMDQwNzAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BM0NPVU5USElHSCAgMHhmZmMwNDA3NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCi0KLS8qIFVTQiBDaGFubmVsIDQgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT05UUk9MICAweGZmYzA0MDg0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDQgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE0QUREUkxPVyAgMHhmZmMwNDA4OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRBRERSSElHSCAgMHhmZmMwNDA4YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT1VOVExPVyAgMHhmZmMwNDA5MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09VTlRISUdIICAweGZmYzA0MDk0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KLQotLyogVVNCIENoYW5uZWwgNSBDb25maWcgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPTlRST0wgIDB4ZmZjMDQwYTQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTVBRERSTE9XICAweGZmYzA0MGE4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUFERFJISUdIICAweGZmYzA0MGFjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPVU5UTE9XICAweGZmYzA0MGIwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTVDT1VOVEhJR0ggIDB4ZmZjMDQwYjQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLwotCi0vKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09OVFJPTCAgMHhmZmMwNDBjNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA2IGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNkFERFJMT1cgIDB4ZmZjMDQwYzggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2QUREUkhJR0ggIDB4ZmZjMDQwY2MgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09VTlRMT1cgIDB4ZmZjMDQwZDAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNkNPVU5USElHSCAgMHhmZmMwNDBkNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCi0KLS8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT05UUk9MICAweGZmYzA0MGU0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDcgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE3QUREUkxPVyAgMHhmZmMwNDBlOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdBRERSSElHSCAgMHhmZmMwNDBlYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT1VOVExPVyAgMHhmZmMwNDBmMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09VTlRISUdIICAweGZmYzA0MGY0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KLQotLyogS2V5cGFkIFJlZ2lzdGVycyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfQ1RMICAweGZmYzA0MTAwICAgLyogQ29udHJvbHMga2V5cGFkIG1vZHVsZSBlbmFibGUgYW5kIGRpc2FibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEtQQURfUFJFU0NBTEUgIDB4ZmZjMDQxMDQgICAvKiBFc3RhYmxpc2ggYSB0aW1lIGJhc2UgZm9yIHByb2dyYW1pbmcgdGhlIEtQQURfTVNFTCByZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfTVNFTCAgMHhmZmMwNDEwOCAgIC8qIFNlbGVjdHMgZGVsYXkgcGFyYW1ldGVycyBmb3Iga2V5cGFkIGludGVyZmFjZSBzZW5zaXRpdml0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBLUEFEX1JPV0NPTCAgMHhmZmMwNDEwYyAgIC8qIENhcHR1cmVzIHRoZSByb3cgYW5kIGNvbHVtbiBvdXRwdXQgdmFsdWVzIG9mIHRoZSBrZXlzIHByZXNzZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBLUEFEX1NUQVQgIDB4ZmZjMDQxMTAgICAvKiBIb2xkcyBhbmQgY2xlYXJzIHRoZSBzdGF0dXMgb2YgdGhlIGtleXBhZCBpbnRlcmZhY2UgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEX1NPRlRFVkFMICAweGZmYzA0MTE0ICAgLyogTGV0cyBzb2Z0d2FyZSBmb3JjZSBrZXlwYWQgaW50ZXJmYWNlIHRvIGNoZWNrIGZvciBrZXlzIGJlaW5nIHByZXNzZWQgKi8KLQotLyogUGl4ZWwgQ29tcG9zaXRvciAoUElYQykgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19DVEwgIDB4ZmZjMDQ0MDAgICAvKiBPdmVybGF5IGVuYWJsZSwgcmVzYW1wbGluZyBtb2RlLCBJL08gZGF0YSBmb3JtYXQsIHRyYW5zcGFyZW5jeSBlbmFibGUsIHdhdGVybWFyayBsZXZlbCwgRklGTyBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19QUEwgIDB4ZmZjMDQ0MDQgICAvKiBIb2xkcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSBvZiB0aGUgZGlzcGxheSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0xQRiAgMHhmZmMwNDQwOCAgIC8qIEhvbGRzIHRoZSBudW1iZXIgb2YgbGluZXMgcGVyIGZyYW1lIG9mIHRoZSBkaXNwbGF5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BSFNUQVJUICAweGZmYzA0NDBjICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQUhFTkQgIDB4ZmZjMDQ0MTAgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0FWU1RBUlQgIDB4ZmZjMDQ0MTQgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQVZFTkQgIDB4ZmZjMDQ0MTggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEEpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BVFJBTlNQICAweGZmYzA0NDFjICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEEpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CSFNUQVJUICAweGZmYzA0NDIwICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQkhFTkQgIDB4ZmZjMDQ0MjQgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWU1RBUlQgIDB4ZmZjMDQ0MjggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQlZFTkQgIDB4ZmZjMDQ0MmMgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEIpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CVFJBTlNQICAweGZmYzA0NDMwICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEIpICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBQSVhDX0lOVFJTVEFUICAweGZmYzA0NDNjICAgLyogT3ZlcmxheSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi9zdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfUllDT04gIDB4ZmZjMDQ0NDAgICAvKiBDb2xvciBzcGFjZSBjb252ZXJzaW9uIG1hdHJpeCByZWdpc3Rlci4gQ29udGFpbnMgdGhlIFIvWSBjb252ZXJzaW9uIGNvZWZmaWNpZW50cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19HVUNPTiAgMHhmZmMwNDQ0NCAgIC8qIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4IHJlZ2lzdGVyLiBDb250YWlucyB0aGUgRy9VIGNvbnZlcnNpb24gY29lZmZpY2llbnRzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWQ09OICAweGZmYzA0NDQ4ICAgLyogQ29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXggcmVnaXN0ZXIuIENvbnRhaW5zIHRoZSBCL1YgY29udmVyc2lvbiBjb2VmZmljaWVudHMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUElYQ19DQ0JJQVMgIDB4ZmZjMDQ0NGMgICAvKiBCaWFzIHZhbHVlcyBmb3IgdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX1RDICAweGZmYzA0NDUwICAgLyogSG9sZHMgdGhlIHRyYW5zcGFyZW50IGNvbG9yIHZhbHVlICovCi0KLS8qIEhhbmRzaGFrZSBNRE1BIDAgUmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUEwX0NPTlRST0wgIDB4ZmZjMDQ1MDAgICAvKiBIYW5kc2hha2UgTURNQTAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0VDSU5JVCAgMHhmZmMwNDUwNCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9CQ0lOSVQgIDB4ZmZjMDQ1MDggICAvKiBIYW5kc2hha2UgTURNQTAgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ1VSR0VOVCAgMHhmZmMwNDUwYyAgIC8qIEhhbmRzaGFrZSBNRE1BMCBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSE1ETUEwX0VDT1ZFUkZMT1cgIDB4ZmZjMDQ1MTAgICAvKiBIYW5kc2hha2UgTURNQTAgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ09VTlQgIDB4ZmZjMDQ1MTQgICAvKiBIYW5kc2hha2UgTURNQTAgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTBfQkNPVU5UICAweGZmYzA0NTE4ICAgLyogSGFuZHNoYWtlIE1ETUEwIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIgKi8KLQotLyogSGFuZHNoYWtlIE1ETUEgMSBSZWdpc3RlcnMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQTFfQ09OVFJPTCAgMHhmZmMwNDU0MCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTFfRUNJTklUICAweGZmYzA0NTQ0ICAgLyogSGFuZHNoYWtlIE1ETUExIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0JDSU5JVCAgMHhmZmMwNDU0OCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE1ETUExX0VDVVJHRU5UICAweGZmYzA0NTRjICAgLyogSGFuZHNoYWtlIE1ETUExIFVyZ2VudCBFZGdlIENvdW50IFRocmVzaG9sZCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBITURNQTFfRUNPVkVSRkxPVyAgMHhmZmMwNDU1MCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0VDT1VOVCAgMHhmZmMwNDU1NCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMV9CQ09VTlQgIDB4ZmZjMDQ1NTggICAvKiBIYW5kc2hha2UgTURNQTEgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlciAqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgICBTSU5HTEUgQklUIE1BQ1JPIFBBSVJTIChiaXQgbWFzayBhbmQgbmVnYXRlZCBvbmUpICAgICAgKi8KLS8qICAgICBhbmQgTVVMVEkgQklUIFJFQUQgTUFDUk9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFBJWENfRU4gIDB4MSAgICAgICAgLyogUGl4ZWwgQ29tcG9zaXRvciBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBPVlJfQV9FTiAgMHgyICAgICAgICAvKiBPdmVybGF5IEEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0JfRU4gIDB4NCAgICAgICAgLyogT3ZlcmxheSBCIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIElNR19GT1JNICAweDggICAgICAgIC8qIEltYWdlIERhdGEgRm9ybWF0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0ZPUk0gIDB4MTAgICAgICAgLyogT3ZlcmxheSBEYXRhIEZvcm1hdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE9VVF9GT1JNICAweDIwICAgICAgIC8qIE91dHB1dCBEYXRhIEZvcm1hdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBVRFNfTU9EICAweDQwICAgICAgIC8qIFJlc2FtcGxpbmcgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRDX0VOICAweDgwICAgICAgIC8qIFRyYW5zcGFyZW50IENvbG9yIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIElNR19TVEFUICAweDMwMCAgICAgIC8qIEltYWdlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX1NUQVQgIDB4YzAwICAgICAgLyogT3ZlcmxheSBGSUZPIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV01fTFZMICAweDMwMDAgICAgIC8qIEZJRk8gV2F0ZXJtYXJrIExldmVsICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSFNUQVJUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBX0hTVEFSVCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIFN0YXJ0IENvb3JkaW5hdGVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSEVORCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX0hFTkQgIDB4ZmZmICAgICAgLyogSG9yaXpvbnRhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0FWU1RBUlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEFfVlNUQVJUICAweDNmZiAgICAgIC8qIFZlcnRpY2FsIFN0YXJ0IENvb3JkaW5hdGVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVkVORCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX1ZFTkQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgRW5kIENvb3JkaW5hdGVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVFJBTlNQICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBBX1RSQU5TUCAgMHhmICAgICAgICAvKiBUcmFuc3BhcmVuY3kgVmFsdWUgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JIU1RBUlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfSFNUQVJUICAweGZmZiAgICAgIC8qIEhvcml6b250YWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JIRU5EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfSEVORCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIEVuZCBDb29yZGluYXRlcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFBJWENfQlZTVEFSVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQl9WU1RBUlQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JWRU5EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfVkVORCAgMHgzZmYgICAgICAvKiBWZXJ0aWNhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0JUUkFOU1AgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfVFJBTlNQICAweGYgICAgICAgIC8qIFRyYW5zcGFyZW5jeSBWYWx1ZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFBJWENfSU5UUlNUQVQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBPVlJfSU5UX0VOICAweDEgICAgICAgIC8qIEludGVycnVwdCBhdCBFbmQgb2YgTGFzdCBWYWxpZCBPdmVybGF5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEZSTV9JTlRfRU4gIDB4MiAgICAgICAgLyogSW50ZXJydXB0IGF0IEVuZCBvZiBGcmFtZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgT1ZSX0lOVF9TVEFUICAweDQgICAgICAgIC8qIE92ZXJsYXkgSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgRlJNX0lOVF9TVEFUICAweDggICAgICAgIC8qIEZyYW1lIEludGVycnVwdCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX1JZQ09OICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExMSAgMHgzZmYgICAgICAvKiBBMTEgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTEyICAweGZmYzAwICAgIC8qIEExMiBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTMgIDB4M2ZmMDAwMDAgLyogQTEzIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSWV9NVUxUNCAgMHg0MDAwMDAwMCAvKiBNdWx0aXBseSBSb3cgYnkgNCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFBJWENfR1VDT04gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTIxICAweDNmZiAgICAgIC8qIEEyMSBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjIgIDB4ZmZjMDAgICAgLyogQTIyIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEyMyAgMHgzZmYwMDAwMCAvKiBBMjMgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEdVX01VTFQ0ICAweDQwMDAwMDAwIC8qIE11bHRpcGx5IFJvdyBieSA0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19CVkNPTiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMzEgIDB4M2ZmICAgICAgLyogQTMxIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzMiAgMHhmZmMwMCAgICAvKiBBMzIgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTMzICAweDNmZjAwMDAwIC8qIEEzMyBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQlZfTVVMVDQgIDB4NDAwMDAwMDAgLyogTXVsdGlwbHkgUm93IGJ5IDQgKi8KLQotLyogQml0IG1hc2tzIGZvciBQSVhDX0NDQklBUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTQgIDB4M2ZmICAgICAgLyogQTE0IGluIHRoZSBCaWFzIFZlY3RvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTI0ICAweGZmYzAwICAgIC8qIEEyNCBpbiB0aGUgQmlhcyBWZWN0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzNCAgMHgzZmYwMDAwMCAvKiBBMzQgaW4gdGhlIEJpYXMgVmVjdG9yICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUElYQ19UQyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUllfVFJBTlMgIDB4ZmYgICAgICAgLyogVHJhbnNwYXJlbnQgQ29sb3IgLSBSL1kgQ29tcG9uZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgR1VfVFJBTlMgIDB4ZmYwMCAgICAgLyogVHJhbnNwYXJlbnQgQ29sb3IgLSBHL1UgQ29tcG9uZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQlZfVFJBTlMgIDB4ZmYwMDAwICAgLyogVHJhbnNwYXJlbnQgQ29sb3IgLSBCL1YgQ29tcG9uZW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgSE9TVF9DT05UUk9MICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9FTiAgMHgxICAgICAgICAvKiBIb3N0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfRU5EICAweDIgICAgICAgIC8qIEhvc3QgRW5kaWFuZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEQVRBX1NJWkUgIDB4NCAgICAgICAgLyogRGF0YSBTaXplICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SU1QgIDB4OCAgICAgICAgLyogSG9zdCBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhSRFlfT1ZSICAweDIwICAgICAgIC8qIEhvc3QgUmVhZHkgT3ZlcnJpZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBJTlRfTU9ERSAgMHg0MCAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEJUX0VOICAweDgwICAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRUhXICAweDEwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFdyaXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFSFIgIDB4MjAwICAgICAgLyogRW5hYmxlIEhvc3QgUmVhZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQkRSICAweDQwMCAgICAgIC8qIEJ1cnN0IERNQSBSZXF1ZXN0cyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhPU1RfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERNQV9SRUFEWSAgMHgxICAgICAgICAvKiBETUEgUmVhZHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBGSUZPRlVMTCAgMHgyICAgICAgICAvKiBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEZJRk9FTVBUWSAgMHg0ICAgICAgICAvKiBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICBETUFfQ09NUExFVEUgIDB4OCAgICAgICAgLyogRE1BIENvbXBsZXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhTSEsgIDB4MTAgICAgICAgLyogSG9zdCBIYW5kc2hha2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRU9VVCAgMHgyMCAgICAgICAvKiBIb3N0IFRpbWVvdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSElSUSAgMHg0MCAgICAgICAvKiBIb3N0IEludGVycnVwdCBSZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFMTE9XX0NORkcgIDB4ODAgICAgICAgLyogQWxsb3cgTmV3IENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BX0RJUiAgMHgxMDAgICAgICAvKiBETUEgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCVEUgIDB4MjAwICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhPU1RfVElNRU9VVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIENPVU5UX1RJTUVPVVQgIDB4N2ZmICAgICAgLyogSG9zdCBUaW1lb3V0IGNvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DT05GSUcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUkVOICAweDEgICAgICAgIC8qIE1YVlIgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1NU00gIDB4MiAgICAgICAgLyogTVhWUiBNYXN0ZXIvU2xhdmUgTW9kZSBTZWxlY3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFDVElWRSAgMHg0ICAgICAgICAvKiBBY3RpdmUgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RFTEFZICAweDggICAgICAgIC8qIFN5bmNocm9ub3VzIERhdGEgRGVsYXkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgTkNNUlhFTiAgMHgxMCAgICAgICAvKiBOb3JtYWwgQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFJXUlJYRU4gIDB4MjAgICAgICAgLyogUmVtb3RlIFdyaXRlIFJlY2VpdmUgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVRYRU4gIDB4NDAgICAgICAgLyogTVhWUiBUcmFuc21pdCBEYXRhIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVRYT05CICAweDgwICAgICAgIC8qIE1YVlIgUGh5IFRyYW5zbWl0dGVyIE9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEVQQVJJVFkgIDB4MTAwICAgICAgLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNU0IgIDB4MWUwMCAgICAgLyogTWFzdGVyIFN5bmNocm9ub3VzIEJvdW5kYXJ5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBBUFJYRU4gIDB4MjAwMCAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV0FLRVVQICAweDQwMDAgICAgIC8qIFdha2UtVXAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBMTUVDSCAgMHg4MDAwICAgICAvKiBMb2NrIE1lY2hhbmlzbSBTZWxlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1NUQVRFXzAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBOQUNUICAweDEgICAgICAgIC8qIE5ldHdvcmsgQWN0aXZpdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNCTE9DSyAgMHgyICAgICAgICAvKiBTdXBlciBCbG9jayBMb2NrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEZNUExMU1QgIDB4YyAgICAgICAgLyogRnJlcXVlbmN5IE11bHRpcGx5IFBMTCBTTSBTdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENEUlBMTFNUICAweGUwICAgICAgIC8qIENsb2NrL0RhdGEgUmVjb3ZlcnkgUExMIFNNIFN0YXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQVBCU1kgIDB4MTAwICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgQnVzeSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFQQVJCICAweDIwMCAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgQXJiaXRyYXRpbmcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVBUWCAgMHg0MDAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFRyYW5zbWl0dGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBUFJYICAweDgwMCAgICAgIC8qIFJlY2VpdmluZyBBc3luY2hyb25vdXMgUGFja2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01CU1kgIDB4MTAwMCAgICAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciBCdXN5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01BUkIgIDB4MjAwMCAgICAgLyogQ29udHJvbCBNZXNzYWdlIEFyYml0cmF0aW5nICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENNVFggIDB4NDAwMCAgICAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0dGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTVJYICAweDgwMDAgICAgIC8qIFJlY2VpdmluZyBDb250cm9sIE1lc3NhZ2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1SWE9OQiAgMHgxMDAwMCAgICAvKiBNUlhPTkIgUGluIFN0YXRlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkdTSVAgIDB4MjAwMDAgICAgLyogUmVtb3RlIEdldCBTb3VyY2UgSW4gUHJvZ3Jlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEQUxJUCAgMHg0MDAwMCAgICAvKiBSZXNvdXJjZSBEZWFsbG9jYXRlIEluIFByb2dyZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFMSVAgIDB4ODAwMDAgICAgLyogUmVzb3VyY2UgQWxsb2NhdGUgSW4gUHJvZ3Jlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSUkRJUCAgMHgxMDAwMDAgICAvKiBSZW1vdGUgUmVhZCBJbiBQcm9ncmVzcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJXUklQICAweDIwMDAwMCAgIC8qIFJlbW90ZSBXcml0ZSBJbiBQcm9ncmVzcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZMT0NLICAweDQwMDAwMCAgIC8qIEZyYW1lIExvY2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBCTE9DSyAgMHg4MDAwMDAgICAvKiBCbG9jayBMb2NrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSU0IgIDB4ZjAwMDAwMCAgLyogUmVjZWl2ZWQgU3luY2hyb25vdXMgQm91bmRhcnkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREVSUk5VTSAgMHhmMDAwMDAwMCAvKiBETUEgRXJyb3IgQ2hhbm5lbCBOdW1iZXIgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1NUQVRFXzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUlhOVU1CICAweGYgICAgICAgIC8qIFN5bmNocm9ub3VzIFJlY2VpdmUgRklGTyBOdW1iZXIgb2YgQnl0ZXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU1RYTlVNQiAgMHhmMCAgICAgICAvKiBTeW5jaHJvbm91cyBUcmFuc21pdCBGSUZPIE51bWJlciBvZiBCeXRlcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQVBDT05UICAweDEwMCAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgQ29udGludWF0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgT0JFUlJOVU0gIDB4ZTAwICAgICAgLyogRE1BIE91dCBvZiBCb3VuZHMgRXJyb3IgQ2hhbm5lbCBOdW1iZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRE1BQUNUSVZFMCAgMHgxMDAwMCAgICAvKiBETUEwIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBETUFBQ1RJVkUxICAweDIwMDAwICAgIC8qIERNQTEgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIERNQUFDVElWRTIgIDB4NDAwMDAgICAgLyogRE1BMiBBY3RpdmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRE1BQUNUSVZFMyAgMHg4MDAwMCAgICAvKiBETUEzIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBETUFBQ1RJVkU0ICAweDEwMDAwMCAgIC8qIERNQTQgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIERNQUFDVElWRTUgIDB4MjAwMDAwICAgLyogRE1BNSBBY3RpdmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRE1BQUNUSVZFNiAgMHg0MDAwMDAgICAvKiBETUE2IEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBETUFBQ1RJVkU3ICAweDgwMDAwMCAgIC8qIERNQTcgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BUE1FTjAgIDB4MTAwMDAwMCAgLyogRE1BMCBQYXR0ZXJuIE1hdGNoaW5nIEVuYWJsZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUFQTUVOMSAgMHgyMDAwMDAwICAvKiBETUExIFBhdHRlcm4gTWF0Y2hpbmcgRW5hYmxlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQVBNRU4yICAweDQwMDAwMDAgIC8qIERNQTIgUGF0dGVybiBNYXRjaGluZyBFbmFibGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BUE1FTjMgIDB4ODAwMDAwMCAgLyogRE1BMyBQYXR0ZXJuIE1hdGNoaW5nIEVuYWJsZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUFQTUVONCAgMHgxMDAwMDAwMCAvKiBETUE0IFBhdHRlcm4gTWF0Y2hpbmcgRW5hYmxlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQVBNRU41ICAweDIwMDAwMDAwIC8qIERNQTUgUGF0dGVybiBNYXRjaGluZyBFbmFibGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BUE1FTjYgIDB4NDAwMDAwMDAgLyogRE1BNiBQYXR0ZXJuIE1hdGNoaW5nIEVuYWJsZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUFQTUVONyAgMHg4MDAwMDAwMCAvKiBETUE3IFBhdHRlcm4gTWF0Y2hpbmcgRW5hYmxlZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfSU5UX1NUQVRfMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE5JMkEgIDB4MSAgICAgICAgLyogTmV0d29yayBJbmFjdGl2ZSB0byBBY3RpdmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTkEySSAgMHgyICAgICAgICAvKiBOZXR3b3JrIEFjdGl2ZSB0byBJbmFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNCVTJMICAweDQgICAgICAgIC8qIFN1cGVyIEJsb2NrIFVubG9jayB0byBMb2NrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0JMMlUgIDB4OCAgICAgICAgLyogU3VwZXIgQmxvY2sgTG9jayB0byBVbmxvY2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBSVSAgMHgxMCAgICAgICAvKiBQb3NpdGlvbiBSZWdpc3RlciBVcGRhdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1QUlUgIDB4MjAgICAgICAgLyogTWF4aW11bSBQb3NpdGlvbiBSZWdpc3RlciBVcGRhdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBEUlUgIDB4NDAgICAgICAgLyogRGVsYXkgUmVnaXN0ZXIgVXBkYXRlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRFJVICAweDgwICAgICAgIC8qIE1heGltdW0gRGVsYXkgUmVnaXN0ZXIgVXBkYXRlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU0JVICAweDEwMCAgICAgIC8qIFN5bmNocm9ub3VzIEJvdW5kYXJ5IFVwZGF0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFUVSAgMHgyMDAgICAgICAvKiBBbGxvY2F0aW9uIFRhYmxlIFVwZGF0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkNaMCAgMHg0MDAgICAgICAvKiBGcmFtZSBDb3VudGVyIDAgWmVybyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGQ1oxICAweDgwMCAgICAgIC8qIEZyYW1lIENvdW50ZXIgMSBaZXJvICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBFUlIgIDB4MTAwMCAgICAgLyogUGFyaXR5IEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1IMkwgIDB4MjAwMCAgICAgLyogTVJYT05CIEhpZ2ggdG8gTG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1MMkggIDB4NDAwMCAgICAgLyogTVJYT05CIExvdyB0byBIaWdoICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBXVVAgIDB4ODAwMCAgICAgLyogV2FrZS1VcCBQcmVhbWJsZSBSZWNlaXZlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGVTJMICAweDEwMDAwICAgIC8qIEZyYW1lIFVubG9jayB0byBMb2NrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZMMlUgIDB4MjAwMDAgICAgLyogRnJhbWUgTG9jayB0byBVbmxvY2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQlUyTCAgMHg0MDAwMCAgICAvKiBCbG9jayBVbmxvY2sgdG8gTG9jayAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCTDJVICAweDgwMDAwICAgIC8qIEJsb2NrIExvY2sgdG8gVW5sb2NrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgT0JFUlIgIDB4MTAwMDAwICAgLyogRE1BIE91dCBvZiBCb3VuZHMgRXJyb3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBGTCAgMHgyMDAwMDAgICAvKiBQTEwgRnJlcXVlbmN5IExvY2tlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU0NaICAweDQwMDAwMCAgIC8qIFN5c3RlbSBDbG9jayBDb3VudGVyIFplcm8gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkVSUiAgMHg4MDAwMDAgICAvKiBGSUZPIEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTVIgIDB4MTAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01ST0YgIDB4MjAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENNVFMgIDB4NDAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciBTdWNjZXNzZnVsbHkgU2VudCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTVRDICAweDgwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBUcmFuc21pdCBCdWZmZXIgU3VjY2Vzc2Z1bGx5IENhbmNlbGxlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSV1JDICAweDEwMDAwMDAwIC8qIFJlbW90ZSBXcml0ZSBDb250cm9sIE1lc3NhZ2UgQ29tcGxldGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCQ1ogIDB4MjAwMDAwMDAgLyogQmxvY2sgQ291bnRlciBaZXJvICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQk1FUlIgIDB4NDAwMDAwMDAgLyogQmlwaGFzZSBNYXJrIENvZGluZyBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBERVJSICAweDgwMDAwMDAwIC8qIERNQSBFcnJvciAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfSU5UX1NUQVRfMSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTAgIDB4MSAgICAgICAgLyogRE1BMCBIYWxmIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBET05FMCAgMHgyICAgICAgICAvKiBETUEwIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFQUiAgMHg0ICAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQVBST0YgIDB4OCAgICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciBPdmVyZmxvdyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSERPTkUxICAweDEwICAgICAgIC8qIERNQTEgSGFsZiBEb25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE9ORTEgIDB4MjAgICAgICAgLyogRE1BMSBEb25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFQVFMgIDB4NDAgICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgU3VjY2Vzc2Z1bGx5IFNlbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVBUQyAgMHg4MCAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFRyYW5zbWl0IEJ1ZmZlciBTdWNjZXNzZnVsbHkgQ2FuY2VsbGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTIgIDB4MTAwICAgICAgLyogRE1BMiBIYWxmIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBET05FMiAgMHgyMDAgICAgICAvKiBETUEyIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBBUFJDRSAgMHg0MDAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmUgQ1JDIEVycm9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQVBSUEUgIDB4ODAwICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIFBhY2tldCBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSERPTkUzICAweDEwMDAgICAgIC8qIERNQTMgSGFsZiBEb25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE9ORTMgIDB4MjAwMCAgICAgLyogRE1BMyBEb25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTQgIDB4MTAwMDAgICAgLyogRE1BNCBIYWxmIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBET05FNCAgMHgyMDAwMCAgICAvKiBETUE0IERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhET05FNSAgMHgxMDAwMDAgICAvKiBETUE1IEhhbGYgRG9uZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkU1ICAweDIwMDAwMCAgIC8qIERNQTUgRG9uZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSERPTkU2ICAweDEwMDAwMDAgIC8qIERNQTYgSGFsZiBEb25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE9ORTYgIDB4MjAwMDAwMCAgLyogRE1BNiBEb25lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTcgIDB4MTAwMDAwMDAgLyogRE1BNyBIYWxmIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBET05FNyAgMHgyMDAwMDAwMCAvKiBETUE3IERvbmUgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0lOVF9FTl8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE5JMkFFTiAgMHgxICAgICAgICAvKiBOZXR3b3JrIEluYWN0aXZlIHRvIEFjdGl2ZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBOQTJJRU4gIDB4MiAgICAgICAgLyogTmV0d29yayBBY3RpdmUgdG8gSW5hY3RpdmUgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTQlUyTEVOICAweDQgICAgICAgIC8qIFN1cGVyIEJsb2NrIFVubG9jayB0byBMb2NrIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0JMMlVFTiAgMHg4ICAgICAgICAvKiBTdXBlciBCbG9jayBMb2NrIHRvIFVubG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUFJVRU4gIDB4MTAgICAgICAgLyogUG9zaXRpb24gUmVnaXN0ZXIgVXBkYXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNUFJVRU4gIDB4MjAgICAgICAgLyogTWF4aW11bSBQb3NpdGlvbiBSZWdpc3RlciBVcGRhdGVkIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEUlVFTiAgMHg0MCAgICAgICAvKiBEZWxheSBSZWdpc3RlciBVcGRhdGVkIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1EUlVFTiAgMHg4MCAgICAgICAvKiBNYXhpbXVtIERlbGF5IFJlZ2lzdGVyIFVwZGF0ZWQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNCVUVOICAweDEwMCAgICAgIC8qIFN5bmNocm9ub3VzIEJvdW5kYXJ5IFVwZGF0ZWQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFUVUVOICAweDIwMCAgICAgIC8qIEFsbG9jYXRpb24gVGFibGUgVXBkYXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBGQ1owRU4gIDB4NDAwICAgICAgLyogRnJhbWUgQ291bnRlciAwIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRkNaMUVOICAweDgwMCAgICAgIC8qIEZyYW1lIENvdW50ZXIgMSBaZXJvIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBFUlJFTiAgMHgxMDAwICAgICAvKiBQYXJpdHkgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUgyTEVOICAweDIwMDAgICAgIC8qIE1SWE9OQiBIaWdoIHRvIExvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNTDJIRU4gIDB4NDAwMCAgICAgLyogTVJYT05CIExvdyB0byBIaWdoIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBXVVBFTiAgMHg4MDAwICAgICAvKiBXYWtlLVVwIFByZWFtYmxlIFJlY2VpdmVkIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZVMkxFTiAgMHgxMDAwMCAgICAvKiBGcmFtZSBVbmxvY2sgdG8gTG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBGTDJVRU4gIDB4MjAwMDAgICAgLyogRnJhbWUgTG9jayB0byBVbmxvY2sgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQlUyTEVOICAweDQwMDAwICAgIC8qIEJsb2NrIFVubG9jayB0byBMb2NrIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJMMlVFTiAgMHg4MDAwMCAgICAvKiBCbG9jayBMb2NrIHRvIFVubG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIE9CRVJSRU4gIDB4MTAwMDAwICAgLyogRE1BIE91dCBvZiBCb3VuZHMgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFBGTEVOICAweDIwMDAwMCAgIC8qIFBMTCBGcmVxdWVuY3kgTG9ja2VkIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTQ1pFTiAgMHg0MDAwMDAgICAvKiBTeXN0ZW0gQ2xvY2sgQ291bnRlciBaZXJvIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZFUlJFTiAgMHg4MDAwMDAgICAvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTVJFTiAgMHgxMDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZWQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJPRkVOICAweDIwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVRTRU4gIDB4NDAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciBTdWNjZXNzZnVsbHkgU2VudCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVRDRU4gIDB4ODAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciBTdWNjZXNzZnVsbHkgQ2FuY2VsbGVkIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJXUkNFTiAgMHgxMDAwMDAwMCAvKiBSZW1vdGUgV3JpdGUgQ29udHJvbCBNZXNzYWdlIENvbXBsZXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQkNaRU4gIDB4MjAwMDAwMDAgLyogQmxvY2sgQ291bnRlciBaZXJvIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQk1FUlJFTiAgMHg0MDAwMDAwMCAvKiBCaXBoYXNlIE1hcmsgQ29kaW5nIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERFUlJFTiAgMHg4MDAwMDAwMCAvKiBETUEgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfSU5UX0VOXzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhET05FRU4wICAweDEgICAgICAgIC8qIERNQTAgSGFsZiBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE9ORUVOMCAgMHgyICAgICAgICAvKiBETUEwIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFQUkVOICAweDQgICAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZWQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBBUFJPRkVOICAweDggICAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEhET05FRU4xICAweDEwICAgICAgIC8qIERNQTEgSGFsZiBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE9ORUVOMSAgMHgyMCAgICAgICAvKiBETUExIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQVBUU0VOICAweDQwICAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXQgQnVmZmVyIFN1Y2Nlc3NmdWxseSBTZW50IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFQVENFTiAgMHg4MCAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFRyYW5zbWl0IEJ1ZmZlciBTdWNjZXNzZnVsbHkgQ2FuY2VsbGVkIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVOMiAgMHgxMDAgICAgICAvKiBETUEyIEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjIgIDB4MjAwICAgICAgLyogRE1BMiBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVBSQ0VFTiAgMHg0MDAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmUgQ1JDIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVBSUEVFTiAgMHg4MDAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmUgUGFja2V0IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVOMyAgMHgxMDAwICAgICAvKiBETUEzIEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjMgIDB4MjAwMCAgICAgLyogRE1BMyBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVONCAgMHgxMDAwMCAgICAvKiBETUE0IEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjQgIDB4MjAwMDAgICAgLyogRE1BNCBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVONSAgMHgxMDAwMDAgICAvKiBETUE1IEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjUgIDB4MjAwMDAwICAgLyogRE1BNSBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVONiAgMHgxMDAwMDAwICAvKiBETUE2IEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjYgIDB4MjAwMDAwMCAgLyogRE1BNiBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVONyAgMHgxMDAwMDAwMCAvKiBETUE3IEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjcgIDB4MjAwMDAwMDAgLyogRE1BNyBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1BPU0lUSU9OICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBQT1NJVElPTiAgMHgzZiAgICAgICAvKiBOb2RlIFBvc2l0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBQVkFMSUQgIDB4ODAwMCAgICAgLyogTm9kZSBQb3NpdGlvbiBWYWxpZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfTUFYX1BPU0lUSU9OICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1QT1NJVElPTiAgMHgzZiAgICAgICAvKiBNYXhpbXVtIE5vZGUgUG9zaXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgTVBWQUxJRCAgMHg4MDAwICAgICAvKiBNYXhpbXVtIE5vZGUgUG9zaXRpb24gVmFsaWQgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0RFTEFZICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBERUxBWSAgMHgzZiAgICAgICAvKiBOb2RlIEZyYW1lIERlbGF5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBEVkFMSUQgIDB4ODAwMCAgICAgLyogTm9kZSBGcmFtZSBEZWxheSBWYWxpZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfTUFYX0RFTEFZICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1ERUxBWSAgMHgzZiAgICAgICAvKiBNYXhpbXVtIE5vZGUgRnJhbWUgRGVsYXkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgTURWQUxJRCAgMHg4MDAwICAgICAvKiBNYXhpbXVtIE5vZGUgRnJhbWUgRGVsYXkgVmFsaWQgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0xBRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBMQUREUiAgMHhmZmZmICAgICAvKiBMb2dpY2FsIEFkZHJlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIExWQUxJRCAgMHg4MDAwMDAwMCAvKiBMb2dpY2FsIEFkZHJlc3MgVmFsaWQgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0dBRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEdBRERSTCAgMHhmZiAgICAgICAvKiBHcm91cCBBZGRyZXNzIExvd2VyIEJ5dGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEdWQUxJRCAgMHg4MDAwICAgICAvKiBHcm91cCBBZGRyZXNzIFZhbGlkICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BQUREUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQUFERFIgIDB4ZmZmZiAgICAgLyogQWx0ZXJuYXRlIEFkZHJlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFWQUxJRCAgMHg4MDAwMDAwMCAvKiBBbHRlcm5hdGUgQWRkcmVzcyBWYWxpZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQUxMT0NfMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDAgIDB4N2YgICAgICAgLyogQ2hhbm5lbCAwIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVMCAgMHg4MCAgICAgICAvKiBDaGFubmVsIDAgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDEgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCAwIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVMSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDAgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDIgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAwIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVMiAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDAgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDMgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCAwIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVMyAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDAgSW4gVXNlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ18xICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMNCAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDQgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVU0ICAweDgwICAgICAgIC8qIENoYW5uZWwgNCBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMNSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDUgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVU1ICAweDgwMDAgICAgIC8qIENoYW5uZWwgNSBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMNiAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDYgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVU2ICAweDgwMDAwMCAgIC8qIENoYW5uZWwgNiBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMNyAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDcgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVU3ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgNyBJbiBVc2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0w4ICAweDdmICAgICAgIC8qIENoYW5uZWwgOCBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENJVTggIDB4ODAgICAgICAgLyogQ2hhbm5lbCA4IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0w5ICAweDdmMDAgICAgIC8qIENoYW5uZWwgOSBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENJVTkgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCA5IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDEwICAweDdmMDAwMCAgIC8qIENoYW5uZWwgMTAgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTEwICAweDgwMDAwMCAgIC8qIENoYW5uZWwgMTAgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMTEgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCAxMSBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMTEgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCAxMSBJbiBVc2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDEyICAweDdmICAgICAgIC8qIENoYW5uZWwgMTIgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTEyICAweDgwICAgICAgIC8qIENoYW5uZWwgMTIgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMTMgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCAxMyBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMTMgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCAxMyBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wxNCAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDE0IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUxNCAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDE0IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDE1ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMTUgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTE1ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMTUgSW4gVXNlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ180ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wxNiAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDE2IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUxNiAgMHg4MCAgICAgICAvKiBDaGFubmVsIDE2IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDE3ICAweDdmMDAgICAgIC8qIENoYW5uZWwgMTcgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTE3ICAweDgwMDAgICAgIC8qIENoYW5uZWwgMTcgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMTggIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAxOCBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMTggIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAxOCBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wxOSAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDE5IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUxOSAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDE5IEluIFVzZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQUxMT0NfNSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMjAgIDB4N2YgICAgICAgLyogQ2hhbm5lbCAyMCBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMjAgIDB4ODAgICAgICAgLyogQ2hhbm5lbCAyMCBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wyMSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDIxIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUyMSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDIxIEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDIyICAweDdmMDAwMCAgIC8qIENoYW5uZWwgMjIgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTIyICAweDgwMDAwMCAgIC8qIENoYW5uZWwgMjIgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMjMgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCAyMyBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMjMgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCAyMyBJbiBVc2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzYgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDI0ICAweDdmICAgICAgIC8qIENoYW5uZWwgMjQgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTI0ICAweDgwICAgICAgIC8qIENoYW5uZWwgMjQgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMjUgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCAyNSBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMjUgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCAyNSBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wyNiAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDI2IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUyNiAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDI2IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDI3ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMjcgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTI3ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMjcgSW4gVXNlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ183ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wyOCAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDI4IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUyOCAgMHg4MCAgICAgICAvKiBDaGFubmVsIDI4IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDI5ICAweDdmMDAgICAgIC8qIENoYW5uZWwgMjkgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTI5ICAweDgwMDAgICAgIC8qIENoYW5uZWwgMjkgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzAgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAzMCBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzAgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAzMCBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wzMSAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDMxIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUzMSAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDMxIEluIFVzZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQUxMT0NfOCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzIgIDB4N2YgICAgICAgLyogQ2hhbm5lbCAzMiBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzIgIDB4ODAgICAgICAgLyogQ2hhbm5lbCAzMiBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wzMyAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDMzIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUzMyAgMHg4MDAwICAgICAvKiBDaGFubmVsIDMzIEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDM0ICAweDdmMDAwMCAgIC8qIENoYW5uZWwgMzQgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTM0ICAweDgwMDAwMCAgIC8qIENoYW5uZWwgMzQgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzUgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCAzNSBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzUgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCAzNSBJbiBVc2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzkgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDM2ICAweDdmICAgICAgIC8qIENoYW5uZWwgMzYgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTM2ICAweDgwICAgICAgIC8qIENoYW5uZWwgMzYgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzcgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCAzNyBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzcgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCAzNyBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wzOCAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDM4IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUzOCAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDM4IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDM5ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMzkgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTM5ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMzkgSW4gVXNlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ18xMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDAgIDB4N2YgICAgICAgLyogQ2hhbm5lbCA0MCBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDAgIDB4ODAgICAgICAgLyogQ2hhbm5lbCA0MCBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0MSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDQxIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0MSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDQxIEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDQyICAweDdmMDAwMCAgIC8qIENoYW5uZWwgNDIgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTQyICAweDgwMDAwMCAgIC8qIENoYW5uZWwgNDIgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDMgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCA0MyBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDMgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCA0MyBJbiBVc2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzExICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0NCAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDQ0IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0NCAgMHg4MCAgICAgICAvKiBDaGFubmVsIDQ0IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDQ1ICAweDdmMDAgICAgIC8qIENoYW5uZWwgNDUgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTQ1ICAweDgwMDAgICAgIC8qIENoYW5uZWwgNDUgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDYgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCA0NiBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDYgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCA0NiBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0NyAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDQ3IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0NyAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDQ3IEluIFVzZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQUxMT0NfMTIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDQ4ICAweDdmICAgICAgIC8qIENoYW5uZWwgNDggQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTQ4ICAweDgwICAgICAgIC8qIENoYW5uZWwgNDggSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDkgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCA0OSBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDkgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCA0OSBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1MCAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDUwIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1MCAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDUwIEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDUxICAweDdmMDAwMDAwIC8qIENoYW5uZWwgNTEgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTUxICAweDgwMDAwMDAwIC8qIENoYW5uZWwgNTEgSW4gVXNlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ18xMyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTIgIDB4N2YgICAgICAgLyogQ2hhbm5lbCA1MiBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTIgIDB4ODAgICAgICAgLyogQ2hhbm5lbCA1MiBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1MyAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDUzIENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1MyAgMHg4MDAwICAgICAvKiBDaGFubmVsIDUzIEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDU0ICAweDdmMDAwMCAgIC8qIENoYW5uZWwgNTQgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTU0ICAweDgwMDAwMCAgIC8qIENoYW5uZWwgNTQgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTUgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCA1NSBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTUgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCA1NSBJbiBVc2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzE0ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1NiAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDU2IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1NiAgMHg4MCAgICAgICAvKiBDaGFubmVsIDU2IEluIFVzZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDU3ICAweDdmMDAgICAgIC8qIENoYW5uZWwgNTcgQ29ubmVjdGlvbiBMYWJlbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTU3ICAweDgwMDAgICAgIC8qIENoYW5uZWwgNTcgSW4gVXNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTggIDB4N2YwMDAwICAgLyogQ2hhbm5lbCA1OCBDb25uZWN0aW9uIExhYmVsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTggIDB4ODAwMDAwICAgLyogQ2hhbm5lbCA1OCBJbiBVc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1OSAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDU5IENvbm5lY3Rpb24gTGFiZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1OSAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDU5IEluIFVzZSAqLwotCi0vKiBNWFZSX1NZTkNfTENIQU5fMCBNYXNrcyAqLwotCi0jZGVmaW5lIExDSEFOUEMwICAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUgTENIQU5QQzEgICAgIDB4MDAwMDAwRjBsdQotI2RlZmluZSBMQ0hBTlBDMiAgICAgMHgwMDAwMEYwMGx1Ci0jZGVmaW5lIExDSEFOUEMzICAgICAweDAwMDBGMDAwbHUKLSNkZWZpbmUgTENIQU5QQzQgICAgIDB4MDAwRjAwMDBsdQotI2RlZmluZSBMQ0hBTlBDNSAgICAgMHgwMEYwMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEM2ICAgICAweDBGMDAwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzcgICAgIDB4RjAwMDAwMDBsdQotCi0KLS8qIE1YVlJfU1lOQ19MQ0hBTl8xIE1hc2tzICovCi0KLSNkZWZpbmUgTENIQU5QQzggICAgIDB4MDAwMDAwMEZsdQotI2RlZmluZSBMQ0hBTlBDOSAgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lIExDSEFOUEMxMCAgICAweDAwMDAwRjAwbHUKLSNkZWZpbmUgTENIQU5QQzExICAgIDB4MDAwMEYwMDBsdQotI2RlZmluZSBMQ0hBTlBDMTIgICAgMHgwMDBGMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEMxMyAgICAweDAwRjAwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzE0ICAgIDB4MEYwMDAwMDBsdQotI2RlZmluZSBMQ0hBTlBDMTUgICAgMHhGMDAwMDAwMGx1Ci0KLQotLyogTVhWUl9TWU5DX0xDSEFOXzIgTWFza3MgKi8KLQotI2RlZmluZSBMQ0hBTlBDMTYgICAgMHgwMDAwMDAwRmx1Ci0jZGVmaW5lIExDSEFOUEMxNyAgICAweDAwMDAwMEYwbHUKLSNkZWZpbmUgTENIQU5QQzE4ICAgIDB4MDAwMDBGMDBsdQotI2RlZmluZSBMQ0hBTlBDMTkgICAgMHgwMDAwRjAwMGx1Ci0jZGVmaW5lIExDSEFOUEMyMCAgICAweDAwMEYwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzIxICAgIDB4MDBGMDAwMDBsdQotI2RlZmluZSBMQ0hBTlBDMjIgICAgMHgwRjAwMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEMyMyAgICAweEYwMDAwMDAwbHUKLQotCi0vKiBNWFZSX1NZTkNfTENIQU5fMyBNYXNrcyAqLwotCi0jZGVmaW5lIExDSEFOUEMyNCAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUgTENIQU5QQzI1ICAgIDB4MDAwMDAwRjBsdQotI2RlZmluZSBMQ0hBTlBDMjYgICAgMHgwMDAwMEYwMGx1Ci0jZGVmaW5lIExDSEFOUEMyNyAgICAweDAwMDBGMDAwbHUKLSNkZWZpbmUgTENIQU5QQzI4ICAgIDB4MDAwRjAwMDBsdQotI2RlZmluZSBMQ0hBTlBDMjkgICAgMHgwMEYwMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEMzMCAgICAweDBGMDAwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzMxICAgIDB4RjAwMDAwMDBsdQotCi0KLS8qIE1YVlJfU1lOQ19MQ0hBTl80IE1hc2tzICovCi0KLSNkZWZpbmUgTENIQU5QQzMyICAgIDB4MDAwMDAwMEZsdQotI2RlZmluZSBMQ0hBTlBDMzMgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lIExDSEFOUEMzNCAgICAweDAwMDAwRjAwbHUKLSNkZWZpbmUgTENIQU5QQzM1ICAgIDB4MDAwMEYwMDBsdQotI2RlZmluZSBMQ0hBTlBDMzYgICAgMHgwMDBGMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEMzNyAgICAweDAwRjAwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzM4ICAgIDB4MEYwMDAwMDBsdQotI2RlZmluZSBMQ0hBTlBDMzkgICAgMHhGMDAwMDAwMGx1Ci0KLQotLyogTVhWUl9TWU5DX0xDSEFOXzUgTWFza3MgKi8KLQotI2RlZmluZSBMQ0hBTlBDNDAgICAgMHgwMDAwMDAwRmx1Ci0jZGVmaW5lIExDSEFOUEM0MSAgICAweDAwMDAwMEYwbHUKLSNkZWZpbmUgTENIQU5QQzQyICAgIDB4MDAwMDBGMDBsdQotI2RlZmluZSBMQ0hBTlBDNDMgICAgMHgwMDAwRjAwMGx1Ci0jZGVmaW5lIExDSEFOUEM0NCAgICAweDAwMEYwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzQ1ICAgIDB4MDBGMDAwMDBsdQotI2RlZmluZSBMQ0hBTlBDNDYgICAgMHgwRjAwMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEM0NyAgICAweEYwMDAwMDAwbHUKLQotCi0vKiBNWFZSX1NZTkNfTENIQU5fNiBNYXNrcyAqLwotCi0jZGVmaW5lIExDSEFOUEM0OCAgICAweDAwMDAwMDBGbHUKLSNkZWZpbmUgTENIQU5QQzQ5ICAgIDB4MDAwMDAwRjBsdQotI2RlZmluZSBMQ0hBTlBDNTAgICAgMHgwMDAwMEYwMGx1Ci0jZGVmaW5lIExDSEFOUEM1MSAgICAweDAwMDBGMDAwbHUKLSNkZWZpbmUgTENIQU5QQzUyICAgIDB4MDAwRjAwMDBsdQotI2RlZmluZSBMQ0hBTlBDNTMgICAgMHgwMEYwMDAwMGx1Ci0jZGVmaW5lIExDSEFOUEM1NCAgICAweDBGMDAwMDAwbHUKLSNkZWZpbmUgTENIQU5QQzU1ICAgIDB4RjAwMDAwMDBsdQotCi0KLS8qIE1YVlJfU1lOQ19MQ0hBTl83IE1hc2tzICovCi0KLSNkZWZpbmUgTENIQU5QQzU2ICAgIDB4MDAwMDAwMEZsdQotI2RlZmluZSBMQ0hBTlBDNTcgICAgMHgwMDAwMDBGMGx1Ci0jZGVmaW5lIExDSEFOUEM1OCAgICAweDAwMDAwRjAwbHUKLSNkZWZpbmUgTENIQU5QQzU5ICAgIDB4MDAwMEYwMDBsdQotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfRE1BeF9DT05GSUcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTURNQUVOICAweDEgICAgICAgIC8qIERNQSBDaGFubmVsIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQUREICAweDIgICAgICAgIC8qIERNQSBDaGFubmVsIERpcmVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQlk0U1dBUEVOICAweDIwICAgICAgIC8qIERNQSBDaGFubmVsIEZvdXIgQnl0ZSBTd2FwIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIExDSEFOICAweDNjMCAgICAgIC8qIERNQSBDaGFubmVsIExvZ2ljYWwgQ2hhbm5lbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQklUU1dBUEVOICAweDQwMCAgICAgIC8qIERNQSBDaGFubmVsIEJpdCBTd2FwIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQlkyU1dBUEVOICAweDgwMCAgICAgIC8qIERNQSBDaGFubmVsIFR3byBCeXRlIFN3YXAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUZMT1cgIDB4NzAwMCAgICAgLyogRE1BIENoYW5uZWwgT3BlcmF0aW9uIEZsb3cgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRklYRURQTSAgMHg4MDAwMCAgICAvKiBETUEgQ2hhbm5lbCBGaXhlZCBQYXR0ZXJuIE1hdGNoaW5nIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFNUQVJUUEFUICAweDMwMDAwMCAgIC8qIERNQSBDaGFubmVsIFN0YXJ0IFBhdHRlcm4gU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNUT1BQQVQgIDB4YzAwMDAwICAgLyogRE1BIENoYW5uZWwgU3RvcCBQYXR0ZXJuIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENPVU5UUE9TICAweDFjMDAwMDAwIC8qIERNQSBDaGFubmVsIENvdW50IFBvc2l0aW9uICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BUF9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTVEFSVEFQICAweDEgICAgICAgIC8qIFN0YXJ0IEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXNzaW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOQ0VMQVAgIDB4MiAgICAgICAgLyogQ2FuY2VsIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXNzaW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFJFU0VUQVAgIDB4NCAgICAgICAgLyogUmVzZXQgQXN5bmNocm9ub3VzIFBhY2tldCBBcmJpdHJhdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQVBSQkUwICAweDQwMDAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQVBSQkUxICAweDgwMDAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQVBSQl9TVEFSVF9BRERSICovCi0KLSNkZWZpbmUgICAgICBNWFZSX0FQUkJfU1RBUlRfQUREUl9NQVNLICAweDFmZmZmZmUgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQVBSQl9DVVJSX0FERFIgKi8KLQotI2RlZmluZSAgICAgICBNWFZSX0FQUkJfQ1VSUl9BRERSX01BU0sgIDB4ZmZmZmZmZmYgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciBDdXJyZW50IEFkZHJlc3MgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0FQVEJfU1RBUlRfQUREUiAqLwotCi0jZGVmaW5lICAgICAgIE1YVlJfQVBUQl9TVEFSVF9BRERSX01BU0sgIDB4MWZmZmZmZSAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQVBUQl9DVVJSX0FERFIgKi8KLQotI2RlZmluZSAgICAgICAgTVhWUl9BUFRCX0NVUlJfQUREUl9NQVNLICAweGZmZmZmZmZmIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXQgQnVmZmVyIEN1cnJlbnQgQWRkcmVzcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQ01fQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU1RBUlRDTSAgMHgxICAgICAgICAvKiBTdGFydCBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXNzaW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOQ0VMQ00gIDB4MiAgICAgICAgLyogQ2FuY2VsIENvbnRyb2wgTWVzc2FnZSBUcmFuc21pc3Npb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFMCAgMHgxMDAwMCAgICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01SQkUxICAweDIwMDAwICAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVJCRTIgIDB4NDAwMDAgICAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFMyAgMHg4MDAwMCAgICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01SQkU0ICAweDEwMDAwMCAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSA0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVJCRTUgIDB4MjAwMDAwICAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFNiAgMHg0MDAwMDAgICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgNiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01SQkU3ICAweDgwMDAwMCAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSA3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVJCRTggIDB4MTAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFOSAgMHgyMDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgOSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTEwICAweDQwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTExICAweDgwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTEyICAweDEwMDAwMDAwIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTEzICAweDIwMDAwMDAwIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTE0ICAweDQwMDAwMDAwIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTE1ICAweDgwMDAwMDAwIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxNSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQ01SQl9TVEFSVF9BRERSICovCi0KLSNkZWZpbmUgICAgICBNWFZSX0NNUkJfU1RBUlRfQUREUl9NQVNLICAweDFmZmZmZmUgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBTdGFydCBBZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTVJCX0NVUlJfQUREUiAqLwotCi0jZGVmaW5lICAgICAgIE1YVlJfQ01SQl9DVVJSX0FERFJfTUFTSyAgMHhmZmZmZmZmZiAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgQ3VycmVudCBBZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTVRCX1NUQVJUX0FERFIgKi8KLQotI2RlZmluZSAgICAgIE1YVlJfQ01UQl9TVEFSVF9BRERSX01BU0sgIDB4MWZmZmZmZSAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciBTdGFydCBBZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTVRCX0NVUlJfQUREUiAqLwotCi0jZGVmaW5lICAgICAgIE1YVlJfQ01UQl9DVVJSX0FERFJfTUFTSyAgMHhmZmZmZmZmZiAvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIEN1cnJlbnQgQWRkcmVzcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfUlJEQl9TVEFSVF9BRERSICovCi0KLSNkZWZpbmUgICAgICBNWFZSX1JSREJfU1RBUlRfQUREUl9NQVNLICAweDFmZmZmZmUgIC8qIFJlbW90ZSBSZWFkIEJ1ZmZlciBTdGFydCBBZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9SUkRCX0NVUlJfQUREUiAqLwotCi0jZGVmaW5lICAgICAgIE1YVlJfUlJEQl9DVVJSX0FERFJfTUFTSyAgMHhmZmZmZmZmZiAvKiBSZW1vdGUgUmVhZCBCdWZmZXIgQ3VycmVudCBBZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9QQVRfREFUQXggKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfREFUQV8wICAweGZmICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRGF0YSBCeXRlIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0RBVEFfMSAgMHhmZjAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIERhdGEgQnl0ZSAxICovCi0jZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9EQVRBXzIgIDB4ZmYwMDAwICAgLyogUGF0dGVybiBNYXRjaCBEYXRhIEJ5dGUgMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfREFUQV8zICAweGZmMDAwMDAwIC8qIFBhdHRlcm4gTWF0Y2ggRGF0YSBCeXRlIDMgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1BBVF9FTl8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMCAgMHgxICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMSAgMHgyICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMiAgMHg0ICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMyAgMHg4ICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNCAgMHgxMCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNSAgMHgyMCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNiAgMHg0MCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNyAgMHg4MCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMCAgMHgxMDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMSAgMHgyMDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMiAgMHg0MDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMyAgMHg4MDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNCAgMHgxMDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNSAgMHgyMDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNiAgMHg0MDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNyAgMHg4MDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMCAgMHgxMDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMSAgMHgyMDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMiAgMHg0MDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMyAgMHg4MDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNCAgMHgxMDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNSAgMHgyMDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNiAgMHg0MDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNyAgMHg4MDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMCAgMHgxMDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMSAgMHgyMDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMiAgMHg0MDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMyAgMHg4MDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNCAgMHgxMDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNSAgMHgyMDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNiAgMHg0MDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNyAgMHg4MDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDcgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1BBVF9FTl8xICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMCAgMHgxICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMSAgMHgyICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMiAgMHg0ICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMyAgMHg4ICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNCAgMHgxMCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNSAgMHgyMCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNiAgMHg0MCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNyAgMHg4MCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMCAgMHgxMDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMSAgMHgyMDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMiAgMHg0MDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMyAgMHg4MDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNCAgMHgxMDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNSAgMHgyMDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNiAgMHg0MDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNyAgMHg4MDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMCAgMHgxMDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMSAgMHgyMDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMiAgMHg0MDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMyAgMHg4MDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNCAgMHgxMDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNSAgMHgyMDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNiAgMHg0MDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNyAgMHg4MDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMCAgMHgxMDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMSAgMHgyMDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMiAgMHg0MDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMyAgMHg4MDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNCAgMHgxMDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNSAgMHgyMDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNiAgMHg0MDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNyAgMHg4MDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDcgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX0ZSQU1FX0NOVF8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkNOVCAgMHhmZmZmICAgICAvKiBGcmFtZSBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfRlJBTUVfQ05UXzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGQ05UICAweGZmZmYgICAgIC8qIEZyYW1lIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0gwICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0gwICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCAwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9DSDEgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTVVURV9DSDEgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0NIMiAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNVVRFX0NIMiAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0gzICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0gzICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAwICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0g0ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0g0ICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCA0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9DSDUgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTVVURV9DSDUgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0NINiAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNVVRFX0NINiAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0g3ICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0g3ICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCA3ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0g4ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgOCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0g4ICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCA4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9DSDkgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTVVURV9DSDkgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gxMCAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDEwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMTAgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDEwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTEgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDExICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAxMSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR18zICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gxMiAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDEyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMTIgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDEyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTMgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDEzICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCAxMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE0ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMTQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxNCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgMTQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gxNSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDE1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMTUgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDE1ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE2ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMTYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxNiAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgMTYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gxNyAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDE3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMTcgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDE3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTggIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxOCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDE4ICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCAxOCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE5ICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgMTkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxOSAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgMTkgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfNSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjAgIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDIwICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCAyMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDIxICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMjEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gyMSAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgMjEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyMiAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDIyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjIgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDIyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjMgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDIzICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAyMyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR182ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyNCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDI0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjQgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDI0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjUgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyNSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDI1ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCAyNSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDI2ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMjYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gyNiAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgMjYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyNyAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDI3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjcgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDI3ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDI4ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMjggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gyOCAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgMjggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyOSAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDI5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjkgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDI5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzAgIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDMwICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCAzMCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDMxICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgMzEgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gzMSAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgMzEgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfOCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzIgIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDMyICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCAzMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDMzICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMzMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gzMyAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgMzMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzNCAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDM0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzQgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDM0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzUgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzNSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDM1ICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAzNSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR185ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzNiAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDM2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzYgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDM2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzcgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDM3ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCAzNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDM4ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMzggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gzOCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgMzggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzOSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDM5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzkgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDM5ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEwICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0MCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDAgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDQwICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINDEgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA0MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDQxICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA0MSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDQyICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g0MiAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNDIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0MyAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDQzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDMgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzExICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0NCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDQgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDQ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINDUgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA0NSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDQ1ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA0NSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDQ2ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g0NiAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNDYgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0NyAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDQ3ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDcgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDQ3ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEyICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0OCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDQ4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDggIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDQ4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINDkgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA0OSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDQ5ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA0OSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDUwICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNTAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1MCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNTAgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1MSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDUxICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTEgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDUxICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1MiAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDUyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTIgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDUyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINTMgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA1MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDUzICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA1MyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDU0ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNTQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1NCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNTQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1NSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDU1ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTUgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDU1ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzE0ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1NiAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDU2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTYgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDU2ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINTcgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA1NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDU3ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA1NyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDU4ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNTggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1OCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNTggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1OSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDU5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTkgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDU5ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9CTE9DS19DTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCQ05UICAweGZmZmYgICAgIC8qIEJsb2NrIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTEtfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFRBTENFTiAgMHgxICAgICAgICAvKiBNWFZSIENyeXN0YWwgT3NjaWxsYXRvciBDbG9jayBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFRBTEZFTiAgMHgyICAgICAgICAvKiBNWFZSIENyeXN0YWwgT3NjaWxsYXRvciBGZWVkYmFjayBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFRBTE1VTCAgMHgzMCAgICAgICAvKiBNWFZSIENyeXN0YWwgTXVsdGlwbGllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENMS1gzU0VMICAweDgwICAgICAgIC8qIENsb2NrIEdlbmVyYXRpb24gU291cmNlIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBNTUNMS0VOICAweDEwMCAgICAgIC8qIE1hc3RlciBDbG9jayBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNTUNMS01VTCAgMHgxZTAwICAgICAvKiBNYXN0ZXIgQ2xvY2sgTXVsdGlwbGljYXRpb24gRmFjdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFBMTFNNUFMgIDB4ZTAwMCAgICAgLyogTVhWUiBQTEwgU3RhdGUgTWFjaGluZSBQcmVzY2FsZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJDTEtFTiAgMHgxMDAwMCAgICAvKiBCaXQgQ2xvY2sgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgTUJDTEtESVYgIDB4MWUwMDAwICAgLyogQml0IENsb2NrIERpdmlkZSBGYWN0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJTlZSWCAgMHg4MDAwMDAgICAvKiBJbnZlcnQgUmVjZWl2ZSBEYXRhICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUZTRU4gIDB4MTAwMDAwMCAgLyogRnJhbWUgU3luYyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1GU0RJViAgMHgxZTAwMDAwMCAvKiBGcmFtZSBTeW5jIERpdmlkZSBGYWN0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1GU1NFTCAgMHg2MDAwMDAwMCAvKiBGcmFtZSBTeW5jIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBNRlNTWU5DICAweDgwMDAwMDAwIC8qIEZyYW1lIFN5bmMgU3luY2hyb25pemF0aW9uIFNlbGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE1YVlJfQ0RSUExMX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENEUlNNRU4gIDB4MSAgICAgICAgLyogTVhWUiBDRFJQTEwgU3RhdGUgTWFjaGluZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0RSUlNUQiAgMHgyICAgICAgICAvKiBNWFZSIENEUlBMTCBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDRFJTVkNPICAweDQgICAgICAgIC8qIE1YVlIgQ0RSUExMIFN0YXJ0IFZDTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDRFJNT0RFICAweDggICAgICAgIC8qIE1YVlIgQ0RSUExMIENEUiBNb2RlIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDRFJTQ05UICAweDNmMCAgICAgIC8qIE1YVlIgQ0RSUExMIFN0YXJ0IENvdW50ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0RSTENOVCAgMHhmYzAwICAgICAvKiBNWFZSIENEUlBMTCBMb2NrIENvdW50ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENEUlNIUFNFTCAgMHgzZjAwMDAgICAvKiBNWFZSIENEUlBMTCBTaGFwZXIgU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ0RSU0hQRU4gIDB4ODAwMDAwICAgLyogTVhWUiBDRFJQTEwgU2hhcGVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENEUkNQU0VMICAweGZmMDAwMDAwIC8qIE1YVlIgQ0RSUExMIENoYXJnZSBQdW1wIEN1cnJlbnQgU2VsZWN0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9GTVBMTF9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRk1TTUVOICAweDEgICAgICAgIC8qIE1YVlIgRk1QTEwgU3RhdGUgTWFjaGluZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZNUlNUQiAgMHgyICAgICAgICAvKiBNWFZSIEZNUExMIFJlc2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBGTVNWQ08gIDB4NCAgICAgICAgLyogTVhWUiBGTVBMTCBTdGFydCBWQ08gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZNU0NOVCAgMHgzZjAgICAgICAvKiBNWFZSIEZNUExMIFN0YXJ0IENvdW50ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZNTENOVCAgMHhmYzAwICAgICAvKiBNWFZSIEZNUExMIExvY2sgQ291bnRlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBGTUNQU0VMICAweGZmMDAwMDAwIC8qIE1YVlIgRk1QTEwgQ2hhcmdlIFB1bXAgQ3VycmVudCBTZWxlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBNWFZSX1BJTl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1UWE9OQk9EICAweDEgICAgICAgIC8qIE1UWE9OQiBPcGVuIERyYWluIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBNVFhPTkJHICAweDIgICAgICAgIC8qIE1UWE9OQiBHYXRlcyBNVFggU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUZTT0UgIDB4MTAgICAgICAgLyogTUZTIE91dHB1dCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNRlNHUFNFTCAgMHgyMCAgICAgICAvKiBNRlMgR2VuZXJhbCBQdXJwb3NlIE91dHB1dCBTZWxlY3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNRlNHUERBVCAgMHg0MCAgICAgICAvKiBNRlMgR2VuZXJhbCBQdXJwb3NlIE91dHB1dCBEYXRhICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTVhWUl9TQ0xLX0NOVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNDTlQgIDB4ZmZmZiAgICAgLyogU3lzdGVtIENsb2NrIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBLUEFEX0VOICAweDEgICAgICAgIC8qIEtleXBhZCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIEtQQURfSVJRTU9ERSAgMHg2ICAgICAgICAvKiBLZXkgUHJlc3MgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBLUEFEX1JPV0VOICAweDFjMDAgICAgIC8qIFJvdyBFbmFibGUgV2lkdGggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgS1BBRF9DT0xFTiAgMHhlMDAwICAgICAvKiBDb2x1bW4gRW5hYmxlIFdpZHRoICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9QUkVTQ0FMRSAqLwotCi0jZGVmaW5lICAgICAgICAgS1BBRF9QUkVTQ0FMRV9WQUwgIDB4M2YgICAgICAgLyogS2V5IFByZXNjYWxlIFZhbHVlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9NU0VMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgREJPTl9TQ0FMRSAgMHhmZiAgICAgICAvKiBEZWJvdW5jZSBTY2FsZSBWYWx1ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ09MRFJWX1NDQUxFICAweGZmMDAgICAgIC8qIENvbHVtbiBEcml2ZXIgU2NhbGUgVmFsdWUgKi8KLQotLyogQml0IG1hc2tzIGZvciBLUEFEX1JPV0NPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9ST1cgIDB4ZmYgICAgICAgLyogUm93cyBQcmVzc2VkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9DT0wgIDB4ZmYwMCAgICAgLyogQ29sdW1ucyBQcmVzc2VkICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TVEFUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBLUEFEX0lSUSAgMHgxICAgICAgICAvKiBLZXlwYWQgSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgS1BBRF9NUk9XQ09MICAweDYgICAgICAgIC8qIE11bHRpcGxlIFJvdy9Db2x1bW4gS2V5cHJlc3MgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBLUEFEX1BSRVNTRUQgIDB4OCAgICAgICAgLyogS2V5IHByZXNzIGN1cnJlbnQgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TT0ZURVZBTCAqLwotCi0jZGVmaW5lICAgICAgICAgICBLUEFEX1NPRlRFVkFMX0UgIDB4MiAgICAgICAgLyogU29mdHdhcmUgUHJvZ3JhbW1hYmxlIEZvcmNlIEV2YWx1YXRlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCi0jaWYgMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLwotI2VuZGlmCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICBQSU9fU1RBUlQgIDB4MSAgICAgICAgLyogU3RhcnQgUElPL1JlZyBPcCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIE1VTFRJX1NUQVJUICAweDIgICAgICAgIC8qIFN0YXJ0IE11bHRpLURNQSBPcCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFVMVFJBX1NUQVJUICAweDQgICAgICAgIC8qIFN0YXJ0IFVsdHJhLURNQSBPcCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFhGRVJfRElSICAweDggICAgICAgIC8qIFRyYW5zZmVyIERpcmVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIElPUkRZX0VOICAweDEwICAgICAgIC8qIElPUkRZIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0ZMVVNIICAweDIwICAgICAgIC8qIEZsdXNoIEZJRk9zICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgU09GVF9SU1QgIDB4NDAgICAgICAgLyogU29mdCBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBERVZfUlNUICAweDgwICAgICAgIC8qIERldmljZSBSZXNldCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBURlJDTlRfUlNUICAweDEwMCAgICAgIC8qIFRyYW5zIENvdW50IFJlc2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgRU5EX09OX1RFUk0gIDB4MjAwICAgICAgLyogRW5kL1Rlcm1pbmF0ZSBTZWxlY3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBQSU9fVVNFX0RNQSAgMHg0MDAgICAgICAvKiBQSU8tRE1BIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICBVRE1BSU5fRklGT19USFJTICAweGYwMDAgICAgIC8qIFVsdHJhIERNQS1JTiBGSUZPIFRocmVzaG9sZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgUElPX1hGRVJfT04gIDB4MSAgICAgICAgLyogUElPIHRyYW5zZmVyIGluIHByb2dyZXNzICovCi0jZGVmaW5lICAgICAgICAgICAgIE1VTFRJX1hGRVJfT04gIDB4MiAgICAgICAgLyogTXVsdGktd29yZCBETUEgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgVUxUUkFfWEZFUl9PTiAgMHg0ICAgICAgICAvKiBVbHRyYSBETUEgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBVTFRSQV9JTl9GTCAgMHhmMCAgICAgICAvKiBVbHRyYSBETUEgSW5wdXQgRklGTyBMZXZlbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX0RFVl9BRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBERVZfQUREUiAgMHgxZiAgICAgICAvKiBEZXZpY2UgQWRkcmVzcyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX0lOVF9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgIEFUQVBJX0RFVl9JTlRfTUFTSyAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgUElPX0RPTkVfTUFTSyAgMHgyICAgICAgICAvKiBQSU8gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgbWFzayAqLwotI2RlZmluZSAgICAgICAgICAgTVVMVElfRE9ORV9NQVNLICAweDQgICAgICAgIC8qIE11bHRpLURNQSB0cmFuc2ZlciBkb25lIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lICAgICAgICAgIFVETUFJTl9ET05FX01BU0sgIDB4OCAgICAgICAgLyogVWx0cmEtRE1BIGluIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBVRE1BT1VUX0RPTkVfTUFTSyAgMHgxMCAgICAgICAvKiBVbHRyYS1ETUEgb3V0IHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgSE9TVF9URVJNX1hGRVJfTUFTSyAgMHgyMCAgICAgICAvKiBIb3N0IHRlcm1pbmF0ZSBjdXJyZW50IHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lICAgICAgICAgICBNVUxUSV9URVJNX01BU0sgIDB4NDAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBNdWx0aS1ETUEgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVURNQUlOX1RFUk1fTUFTSyAgMHg4MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1pbiB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLwotI2RlZmluZSAgICAgICAgIFVETUFPVVRfVEVSTV9NQVNLICAweDEwMCAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgVWx0cmEtRE1BLW91dCB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX0lOVF9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9ERVZfSU5UICAweDEgICAgICAgIC8qIERldmljZSBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBQSU9fRE9ORV9JTlQgIDB4MiAgICAgICAgLyogUElPIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgIE1VTFRJX0RPTkVfSU5UICAweDQgICAgICAgIC8qIE11bHRpLURNQSB0cmFuc2ZlciBkb25lIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgIFVETUFJTl9ET05FX0lOVCAgMHg4ICAgICAgICAvKiBVbHRyYS1ETUEgaW4gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgIFVETUFPVVRfRE9ORV9JTlQgIDB4MTAgICAgICAgLyogVWx0cmEtRE1BIG91dCB0cmFuc2ZlciBkb25lIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgIEhPU1RfVEVSTV9YRkVSX0lOVCAgMHgyMCAgICAgICAvKiBIb3N0IHRlcm1pbmF0ZSBjdXJyZW50IHRyYW5zZmVyIGludGVycnVwdCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICBNVUxUSV9URVJNX0lOVCAgMHg0MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIE11bHRpLURNQSB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICBVRE1BSU5fVEVSTV9JTlQgIDB4ODAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtaW4gdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBVRE1BT1VUX1RFUk1fSU5UICAweDEwMCAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgVWx0cmEtRE1BLW91dCB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfTElORV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9JTlRSICAweDEgICAgICAgIC8qIERldmljZSBpbnRlcnJ1cHQgdG8gaG9zdCBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9EQVNQICAweDIgICAgICAgIC8qIERldmljZSBkYXNwIHRvIGhvc3QgbGluZSBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgQVRBUElfQ1MwTiAgMHg0ICAgICAgICAvKiBBVEFQSSBjaGlwIHNlbGVjdCAwIGxpbmUgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0NTMU4gIDB4OCAgICAgICAgLyogQVRBUEkgY2hpcCBzZWxlY3QgMSBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9BRERSICAweDcwICAgICAgIC8qIEFUQVBJIGFkZHJlc3MgbGluZSBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIEFUQVBJX0RNQVJFUSAgMHg4MCAgICAgICAvKiBBVEFQSSBETUEgcmVxdWVzdCBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9ETUFBQ0tOICAweDEwMCAgICAgIC8qIEFUQVBJIERNQSBhY2tub3dsZWRnZSBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX0RJT1dOICAweDIwMCAgICAgIC8qIEFUQVBJIHdyaXRlIGxpbmUgc3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQVRBUElfRElPUk4gIDB4NDAwICAgICAgLyogQVRBUEkgcmVhZCBsaW5lIHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX0lPUkRZICAweDgwMCAgICAgIC8qIEFUQVBJIElPUkRZIGxpbmUgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfU01fU1RBVEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBQSU9fQ1NUQVRFICAweGYgICAgICAgIC8qIFBJTyBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBETUFfQ1NUQVRFICAweGYwICAgICAgIC8qIERNQSBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICBVRE1BSU5fQ1NUQVRFICAweGYwMCAgICAgIC8qIFVsdHJhIERNQS1JbiBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLwotI2RlZmluZSAgICAgICAgICAgIFVETUFPVVRfQ1NUQVRFICAweGYwMDAgICAgIC8qIEFUQVBJIElPUkRZIGxpbmUgc3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVEVSTUlOQVRFICovCi0KLSNkZWZpbmUgICAgICAgICAgIEFUQVBJX0hPU1RfVEVSTSAgMHgxICAgICAgICAvKiBIb3N0IHRlcm1pbmF0aW9uYXRpb24gKi8KLQotLyogQml0IG1hc2tzIGZvciBBVEFQSV9SRUdfVElNXzAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVDJfUkVHICAweGZmICAgICAgIC8qIEVuZCBvZiBjeWNsZSB0aW1lIGZvciByZWdpc3RlciBhY2Nlc3MgdHJhbnNmZXJzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVEVPQ19SRUcgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SL0RJT1cgcHVsc2V3aWR0aCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBUMV9SRUcgIDB4ZiAgICAgICAgLyogVGltZSBmcm9tIGFkZHJlc3MgdmFsaWQgdG8gRElPUi9ESU9XICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFQyX1JFR19QSU8gIDB4ZmYwICAgICAgLyogRElPUi9ESU9XIHB1bHNld2lkdGggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFQ0X1JFRyAgMHhmMDAwICAgICAvKiBESU9XIGRhdGEgaG9sZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBURU9DX1JFR19QSU8gIDB4ZmYgICAgICAgLyogRW5kIG9mIGN5Y2xlIHRpbWUgZm9yIFBJTyBhY2Nlc3MgdHJhbnNmZXJzLiAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBURCAgMHhmZiAgICAgICAvKiBESU9SL0RJT1cgYXNzZXJ0ZWQgcHVsc2V3aWR0aCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFRNICAweGZmMDAgICAgIC8qIFRpbWUgZnJvbSBhZGRyZXNzIHZhbGlkIHRvIERJT1IvRElPVyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8xICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRLVyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgbmVnYXRlZCBwdWxzZXdpZHRoICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUS1IgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SIG5lZ2F0ZWQgcHVsc2V3aWR0aCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8yICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBUSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgZGF0YSBob2xkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFT0MgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbmQgb2YgY3ljbGUgZm9yIERNQSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8wICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEFDSyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIHNldHVwIGFuZCBob2xkIHRpbWVzIGZvciBUQUNLICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFTlYgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbnZlbG9wZSB0aW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURFZTICAweGZmICAgICAgIC8qIFNlbGVjdHMgZGF0YSB2YWxpZCBzZXR1cCB0aW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUQ1lDX1REVlMgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBjeWNsZSB0aW1lIC0gVERWUyB0aW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVFNTICAweGZmICAgICAgIC8qIFNlbGVjdHMgdGltZSBmcm9tIFNUUk9CRSBlZGdlIHRvIG5lZ2F0aW9uIG9mIERNQVJRIG9yIGFzc2VydGlvbiBvZiBTVE9QICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRNTEkgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBpbnRlcmxvY2sgdGltZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8zICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFpBSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIG1pbmltdW0gZGVsYXkgcmVxdWlyZWQgZm9yIG91dHB1dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJFQURZX1BBVVNFICAweGZmMDAgICAgIC8qIFNlbGVjdHMgcmVhZHkgdG8gcGF1c2UgKi8KLQotLyogQml0IG1hc2tzIGZvciBUSU1FUl9FTkFCTEUxICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRU45ICAweDIgICAgICAgIC8qIFRpbWVyIDkgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVOMTAgIDB4NCAgICAgICAgLyogVGltZXIgMTAgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVElNRVJfRElTQUJMRTEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM4ICAweDEgICAgICAgIC8qIFRpbWVyIDggRGlzYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM5ICAweDIgICAgICAgIC8qIFRpbWVyIDkgRGlzYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRJTURJUzEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIERpc2FibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBUSU1FUl9TVEFUVVMxICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNSUw5ICAweDIgICAgICAgIC8qIFRpbWVyIDkgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUlMMTAgIDB4NCAgICAgICAgLyogVGltZXIgMTAgSW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjggIDB4MTAgICAgICAgLyogVGltZXIgOCBDb3VudGVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjkgIDB4MjAgICAgICAgLyogVGltZXIgOSBDb3VudGVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRPVkZfRVJSMTAgIDB4NDAgICAgICAgLyogVGltZXIgMTAgQ291bnRlciBPdmVyZmxvdyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU44ICAweDEwMDAgICAgIC8qIFRpbWVyIDggU2xhdmUgRW5hYmxlIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU45ICAweDIwMDAgICAgIC8qIFRpbWVyIDkgU2xhdmUgRW5hYmxlIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFJVTjEwICAweDQwMDAgICAgIC8qIFRpbWVyIDEwIFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBFUFBJMCBhcmUgb2J0YWluZWQgZnJvbSBjb21tb24gYmFzZSBoZWFkZXIgZm9yIEVQUEl4IChFUFBJMSBhbmQgRVBQSTIpICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0ZBRERSICovCi0KLSNkZWZpbmUgICAgICAgICAgRlVOQ1RJT05fQUREUkVTUyAgMHg3ZiAgICAgICAvKiBGdW5jdGlvbiBhZGRyZXNzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1BPV0VSICovCi0KLSNkZWZpbmUgICAgICAgICAgIEVOQUJMRV9TVVNQRU5ETSAgMHgxICAgICAgICAvKiBlbmFibGUgU3VzcGVuZE0gb3V0cHV0ICovCi0jZGVmaW5lICAgICAgICAgICAgICBTVVNQRU5EX01PREUgIDB4MiAgICAgICAgLyogU3VzcGVuZCBNb2RlIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJFU1VNRV9NT0RFICAweDQgICAgICAgIC8qIERNQSBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkVTRVQgIDB4OCAgICAgICAgLyogUmVzZXQgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIEhTX01PREUgIDB4MTAgICAgICAgLyogSGlnaCBTcGVlZCBtb2RlIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgSFNfRU5BQkxFICAweDIwICAgICAgIC8qIGhpZ2ggU3BlZWQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTT0ZUX0NPTk4gIDB4NDAgICAgICAgLyogU29mdCBjb25uZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIElTT19VUERBVEUgIDB4ODAgICAgICAgLyogSXNvY2hyb25vdXMgdXBkYXRlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDBfVFggIDB4MSAgICAgICAgLyogVHggRW5kcG9pbnQgMCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMV9UWCAgMHgyICAgICAgICAvKiBUeCBFbmRwb2ludCAxIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAyX1RYICAweDQgICAgICAgIC8qIFR4IEVuZHBvaW50IDIgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDNfVFggIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNF9UWCAgMHgxMCAgICAgICAvKiBUeCBFbmRwb2ludCA0IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA1X1RYICAweDIwICAgICAgIC8qIFR4IEVuZHBvaW50IDUgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDZfVFggIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQN19UWCAgMHg4MCAgICAgICAvKiBUeCBFbmRwb2ludCA3IGludGVycnVwdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSUlggKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAxX1JYICAweDIgICAgICAgIC8qIFJ4IEVuZHBvaW50IDEgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDJfUlggIDB4NCAgICAgICAgLyogUnggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQM19SWCAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA0X1JYICAweDEwICAgICAgIC8qIFJ4IEVuZHBvaW50IDQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDVfUlggIDB4MjAgICAgICAgLyogUnggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNl9SWCAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA3X1JYICAweDgwICAgICAgIC8qIFJ4IEVuZHBvaW50IDcgaW50ZXJydXB0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMF9UWF9FICAweDEgICAgICAgIC8qIEVuZHBvaW50IDAgaW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMV9UWF9FICAweDIgICAgICAgIC8qIFR4IEVuZHBvaW50IDEgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDJfVFhfRSAgMHg0ICAgICAgICAvKiBUeCBFbmRwb2ludCAyIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVAzX1RYX0UgIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNF9UWF9FICAweDEwICAgICAgIC8qIFR4IEVuZHBvaW50IDQgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDVfVFhfRSAgMHgyMCAgICAgICAvKiBUeCBFbmRwb2ludCA1IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVA2X1RYX0UgIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQN19UWF9FICAweDgwICAgICAgIC8qIFR4IEVuZHBvaW50IDcgaW50ZXJydXB0ICBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlJYRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVAxX1JYX0UgIDB4MiAgICAgICAgLyogUnggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMl9SWF9FICAweDQgICAgICAgIC8qIFJ4IEVuZHBvaW50IDIgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDNfUlhfRSAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVA0X1JYX0UgIDB4MTAgICAgICAgLyogUnggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNV9SWF9FICAweDIwICAgICAgIC8qIFJ4IEVuZHBvaW50IDUgaW50ZXJydXB0ICBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDZfUlhfRSAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRVA3X1JYX0UgIDB4ODAgICAgICAgLyogUnggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgIEVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVVNCICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFNVU1BFTkRfQiAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFU1VNRV9CICAweDIgICAgICAgIC8qIFJlc3VtZSBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQiAgMHg0ICAgICAgICAvKiBSZXNldC9iYWJibGUgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU09GX0IgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENPTk5fQiAgMHgxMCAgICAgICAvKiBDb25uZWN0aW9uIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERJU0NPTl9CICAweDIwICAgICAgIC8qIERpc2Nvbm5lY3QgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgIFNFU1NJT05fUkVRX0IgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICBWQlVTX0VSUk9SX0IgIDB4ODAgICAgICAgLyogVmJ1cyB0aHJlc2hvbGQgaW5kaWNhdG9yICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJVU0JFICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgU1VTUEVORF9CRSAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBSRVNVTUVfQkUgIDB4MiAgICAgICAgLyogUmVzdW1lIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQkUgIDB4NCAgICAgICAgLyogUmVzZXQvYmFiYmxlIGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTT0ZfQkUgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgaW50IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT05OX0JFICAweDEwICAgICAgIC8qIENvbm5lY3Rpb24gaW5kaWNhdG9yIGludCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERJU0NPTl9CRSAgMHgyMCAgICAgICAvKiBEaXNjb25uZWN0IGluZGljYXRvciBpbnQgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgU0VTU0lPTl9SRVFfQkUgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0IGludCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgVkJVU19FUlJPUl9CRSAgMHg4MCAgICAgICAvKiBWYnVzIHRocmVzaG9sZCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9GUkFNRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBGUkFNRV9OVU1CRVIgIDB4N2ZmICAgICAgLyogRnJhbWUgbnVtYmVyICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOREVYICovCi0KLSNkZWZpbmUgICAgICAgICBTRUxFQ1RFRF9FTkRQT0lOVCAgMHhmICAgICAgICAvKiBzZWxlY3RlZCBlbmRwb2ludCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9HTE9CQUxfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgR0xPQkFMX0VOQSAgMHgxICAgICAgICAvKiBlbmFibGVzIFVTQiBtb2R1bGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAxX1RYX0VOQSAgMHgyICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAxIGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDJfVFhfRU5BICAweDQgICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDIgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQM19UWF9FTkEgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMyBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA0X1RYX0VOQSAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA0IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDVfVFhfRU5BICAweDIwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDUgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9UWF9FTkEgIDB4NDAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNiBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA3X1RYX0VOQSAgMHg4MCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA3IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDFfUlhfRU5BICAweDEwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMSBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVAyX1JYX0VOQSAgMHgyMDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDIgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQM19SWF9FTkEgIDB4NDAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAzIGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDRfUlhfRU5BICAweDgwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgRVA1X1JYX0VOQSAgMHgxMDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDUgZW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9SWF9FTkEgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA2IGVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBFUDdfUlhfRU5BICAweDQwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNyBlbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX0RFVl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRVNTSU9OICAweDEgICAgICAgIC8qIHNlc3Npb24gaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SRVEgIDB4MiAgICAgICAgLyogSG9zdCBuZWdvdGlhdGlvbiByZXF1ZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX01PREUgIDB4NCAgICAgICAgLyogaW5kaWNhdGVzIFVTQkRSQyBpcyBhIGhvc3QgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBWQlVTMCAgMHg4ICAgICAgICAvKiBWYnVzIGxldmVsIGluZGljYXRvclswXSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFZCVVMxICAweDEwICAgICAgIC8qIFZidXMgbGV2ZWwgaW5kaWNhdG9yWzFdICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTFNERVYgIDB4MjAgICAgICAgLyogTG93LXNwZWVkIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZTREVWICAweDQwICAgICAgIC8qIEZ1bGwgb3IgSGlnaC1zcGVlZCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBCX0RFVklDRSAgMHg4MCAgICAgICAvKiBBJyBvciAnQicgZGV2aWNlIGluZGljYXRvciAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfVkJVU19JUlEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBEUklWRV9WQlVTX09OICAweDEgICAgICAgIC8qIGluZGljYXRvciB0byBkcml2ZSBWQlVTIGNvbnRyb2wgY2lyY3VpdCAqLwotI2RlZmluZSAgICAgICAgICAgIERSSVZFX1ZCVVNfT0ZGICAweDIgICAgICAgIC8qIGluZGljYXRvciB0byBzaHV0IG9mZiBjaGFyZ2UgcHVtcCAqLwotI2RlZmluZSAgICAgICAgICAgQ0hSR19WQlVTX1NUQVJUICAweDQgICAgICAgIC8qIGluZGljYXRvciBmb3IgZXh0ZXJuYWwgY2lyY3VpdCB0byBzdGFydCBjaGFyZ2luZyBWQlVTICovCi0jZGVmaW5lICAgICAgICAgICAgIENIUkdfVkJVU19FTkQgIDB4OCAgICAgICAgLyogaW5kaWNhdG9yIGZvciBleHRlcm5hbCBjaXJjdWl0IHRvIGVuZCBjaGFyZ2luZyBWQlVTICovCi0jZGVmaW5lICAgICAgICBESVNDSFJHX1ZCVVNfU1RBUlQgIDB4MTAgICAgICAgLyogaW5kaWNhdG9yIHRvIHN0YXJ0IGRpc2NoYXJnaW5nIFZCVVMgKi8KLSNkZWZpbmUgICAgICAgICAgRElTQ0hSR19WQlVTX0VORCAgMHgyMCAgICAgICAvKiBpbmRpY2F0b3IgdG8gc3RvcCBkaXNjaGFyZ2luZyBWQlVTICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19WQlVTX01BU0sgKi8KLQotI2RlZmluZSAgICAgICAgIERSSVZFX1ZCVVNfT05fRU5BICAweDEgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09OIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgRFJJVkVfVkJVU19PRkZfRU5BICAweDIgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09GRiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHg0ICAgICAgICAvKiBlbmFibGUgQ0hSR19WQlVTX1NUQVJUIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgIENIUkdfVkJVU19FTkRfRU5BICAweDggICAgICAgIC8qIGVuYWJsZSBDSFJHX1ZCVVNfRU5EIGludGVycnVwdCAqLwotI2RlZmluZSAgICBESVNDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDEwICAgICAgIC8qIGVuYWJsZSBESVNDSFJHX1ZCVVNfU1RBUlQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgRElTQ0hSR19WQlVTX0VORF9FTkEgIDB4MjAgICAgICAgLyogZW5hYmxlIERJU0NIUkdfVkJVU19FTkQgaW50ZXJydXB0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0NTUjAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYUEtUUkRZICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IHJlY2VpdmUgaW5kaWNhdG9yICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVFhQS1RSRFkgIDB4MiAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgU1RBTExfU0VOVCAgMHg0ICAgICAgICAvKiBTVEFMTCBoYW5kc2hha2Ugc2VudCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRBRU5EICAweDggICAgICAgIC8qIERhdGEgZW5kIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFNFVFVQRU5EICAweDEwICAgICAgIC8qIFNldHVwIGVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgU0VORFNUQUxMICAweDIwICAgICAgIC8qIFNlbmQgU1RBTEwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgU0VSVklDRURfUlhQS1RSRFkgIDB4NDAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgUnhQa3RSZHkgYml0ICovCi0jZGVmaW5lICAgICAgICAgU0VSVklDRURfU0VUVVBFTkQgIDB4ODAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgU2V0dXBFbmQgYml0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBGTFVTSEZJRk8gIDB4MTAwICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICBTVEFMTF9SRUNFSVZFRF9IICAweDQgICAgICAgIC8qIFNUQUxMIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgU0VUVVBQS1RfSCAgMHg4ICAgICAgICAvKiBzZW5kIFNldHVwIHRva2VuIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUlJPUl9IICAweDEwICAgICAgIC8qIHRpbWVvdXQgZXJyb3IgaW5kaWNhdG9yIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFUVBLVF9IICAweDIwICAgICAgIC8qIFJlcXVlc3QgYW4gSU4gdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU1RBVFVTUEtUX0ggIDB4NDAgICAgICAgLyogU3RhdHVzIHN0YWdlIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICBOQUtfVElNRU9VVF9IICAweDgwICAgICAgIC8qIEVQMCBoYWx0ZWQgYWZ0ZXIgYSBOQUsgaG9zdCBtb2RlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0NPVU5UMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBFUDBfUlhfQ09VTlQgIDB4N2YgICAgICAgLyogbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGluIEVQMCBGSUZPICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX05BS0xJTUlUMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIEVQMF9OQUtfTElNSVQgIDB4MWYgICAgICAgLyogbnVtYmVyIG9mIGZyYW1lcy9taWNybyBmcmFtZXMgYWZ0ZXIgd2hpY2ggRVAwIHRpbWVvdXRzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYX01BWF9QQUNLRVQgKi8KLQotI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9UICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYX01BWF9QQUNLRVQgKi8KLQotI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9SICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYQ1NSICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgVFhQS1RSRFlfVCAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLwotI2RlZmluZSAgICAgICAgICBGSUZPX05PVF9FTVBUWV9UICAweDIgICAgICAgIC8qIEZJRk8gbm90IGVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFVOREVSUlVOX1QgIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1QgIDB4OCAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9UICAweDEwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1QgIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCi0jZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1QgIDB4NDAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QVFhfVCAgMHg4MCAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9UICAweDQwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgRk9SQ0VfREFUQVRPR0dMRV9UICAweDgwMCAgICAgIC8qIEZvcmNlIGRhdGEgdG9nZ2xlICovCi0jZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1QgIDB4MTAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19UICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIEFVVE9TRVRfVCAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9USCAgMHg0ICAgICAgICAvKiBlcnJvciBjb25kaXRpb24gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgU1RBTExfUkVDRUlWRURfVEggIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgIE5BS19USU1FT1VUX1RIICAweDgwICAgICAgIC8qIE5BSyB0aW1lb3V0IGhvc3QgbW9kZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWENPVU5UICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUWF9DT1VOVCAgMHgxZmZmICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWENTUiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFJYUEtUUkRZX1IgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBGSUZPX0ZVTExfUiAgMHgyICAgICAgICAvKiBGSUZPIG5vdCBlbXB0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgT1ZFUlJVTl9SICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVEFFUlJPUl9SICAweDggICAgICAgIC8qIE91dCBwYWNrZXQgY2Fubm90IGJlIGxvYWRlZCBpbnRvIFJ4ICBGSUZPICovCi0jZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1IgIDB4MTAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLwotI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9SICAweDIwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCi0jZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1IgIDB4NDAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCi0jZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1IgIDB4ODAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QUlhfUiAgMHgxMDAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9SICAweDgwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgRElTTllFVF9SICAweDEwMDAgICAgIC8qIGRpc2FibGUgTnlldCBoYW5kc2hha2VzICovCi0jZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1IgIDB4MjAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19SICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBBVVRPQ0xFQVJfUiAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9SSCAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBSRVFQS1RfUkggIDB4MjAgICAgICAgLyogcmVxdWVzdCBhbiBJTiB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KLSNkZWZpbmUgICAgICAgICBTVEFMTF9SRUNFSVZFRF9SSCAgMHg0MCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgSU5DT01QUlhfUkggIDB4MTAwICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgaG9zdCBtb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgIERNQVJFUU1PREVfUkggIDB4ODAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uIGhvc3QgbW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBBVVRPUkVRX1JIICAweDQwMDAgICAgIC8qIHNldHMgUmVxUGt0IGF1dG9tYXRpY2FsbHkgaG9zdCBtb2RlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYQ09VTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYX0NPVU5UICAweDFmZmYgICAgIC8qIE51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiB0aGUgcGFja2V0IGluIHRoZSBSeCBGSUZPICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYVFlQRSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgVEFSR0VUX0VQX05PX1QgIDB4ZiAgICAgICAgLyogRVAgbnVtYmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFBST1RPQ09MX1QgIDB4YyAgICAgICAgLyogdHJhbnNmZXIgdHlwZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9UWElOVEVSVkFMICovCi0KLSNkZWZpbmUgICAgICAgICAgVFhfUE9MTF9JTlRFUlZBTCAgMHhmZiAgICAgICAvKiBwb2xsaW5nIGludGVydmFsIGZvciBzZWxlY3RlZCBUeCBFUCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9SWFRZUEUgKi8KLQotI2RlZmluZSAgICAgICAgICAgIFRBUkdFVF9FUF9OT19SICAweGYgICAgICAgIC8qIEVQIG51bWJlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQUk9UT0NPTF9SICAweGMgICAgICAgIC8qIHRyYW5zZmVyIHR5cGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfUlhJTlRFUlZBTCAqLwotCi0jZGVmaW5lICAgICAgICAgIFJYX1BPTExfSU5URVJWQUwgIDB4ZmYgICAgICAgLyogcG9sbGluZyBpbnRlcnZhbCBmb3Igc2VsZWN0ZWQgUnggRVAgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BX0lOVEVSUlVQVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMF9JTlQgIDB4MSAgICAgICAgLyogRE1BMCBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTFfSU5UICAweDIgICAgICAgIC8qIERNQTEgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEyX0lOVCAgMHg0ICAgICAgICAvKiBETUEyIHBlbmRpbmcgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BM19JTlQgIDB4OCAgICAgICAgLyogRE1BMyBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTRfSU5UICAweDEwICAgICAgIC8qIERNQTQgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE1X0lOVCAgMHgyMCAgICAgICAvKiBETUE1IHBlbmRpbmcgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNl9JTlQgIDB4NDAgICAgICAgLyogRE1BNiBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTdfSU5UICAweDgwICAgICAgIC8qIERNQTcgcGVuZGluZyBpbnRlcnJ1cHQgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPTlRST0wgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRU5BICAweDEgICAgICAgIC8qIERNQSBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERJUkVDVElPTiAgMHgyICAgICAgICAvKiBkaXJlY3Rpb24gb2YgRE1BIHRyYW5zZmVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1PREUgIDB4NCAgICAgICAgLyogRE1BIEJ1cyBlcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBJTlRfRU5BICAweDggICAgICAgIC8qIEludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUE5VTSAgMHhmMCAgICAgICAvKiBFUCBudW1iZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBCVVNFUlJPUiAgMHgxMDAgICAgICAvKiBETUEgQnVzIGVycm9yICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhBRERSSElHSCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgIERNQV9BRERSX0hJR0ggIDB4ZmZmZiAgICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBETUEgbWFzdGVyIGNoYW5uZWwgKi8KLQotLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeEFERFJMT1cgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgRE1BX0FERFJfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgRE1BIG1hc3RlciBjaGFubmVsICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT1VOVEhJR0ggKi8KLQotI2RlZmluZSAgICAgICAgICAgIERNQV9DT1VOVF9ISUdIICAweGZmZmYgICAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09VTlRMT1cgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBETUFfQ09VTlRfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEhNRE1BeF9DT05UUk9MICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUFFTiAgMHgxICAgICAgICAvKiBIYW5kc2hha2UgTURNQSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJFUCAgMHgyICAgICAgICAvKiBIYW5kc2hha2UgTURNQSBSZXF1ZXN0IFBvbGFyaXR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVVEUgIDB4OCAgICAgICAgLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBPSUUgIDB4MTAgICAgICAgLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCRElFICAweDIwICAgICAgIC8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQkRJICAweDQwICAgICAgIC8qIE1hc2sgQmxvY2sgRG9uZSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERSUSAgMHgzMDAgICAgICAvKiBIYW5kc2hha2UgTURNQSBSZXF1ZXN0IFR5cGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJCQyAgMHgxMDAwICAgICAvKiBGb3JjZSBSZWxvYWQgb2YgQkNPVU5UICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUFMgIDB4MjAwMCAgICAgLyogUGluIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9JICAweDQwMDAgICAgIC8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJESSAgMHg4MDAwICAgICAvKiBCbG9jayBEb25lIEludGVycnVwdCBHZW5lcmF0ZWQgKi8KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogICAgIE1VTFRJIEJJVCBNQUNSTyBFTlVNRVJBVElPTlMgICAgICAgICAgICAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICAgTVhWUiBBZGRyZXNzIE9mZnNldHMgICAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciAoQ01SQikgQWRkcmVzcyBPZmZzZXRzICovCi0KLSNkZWZpbmUgQ01SQl9TVFJJREUgICAgICAgMHgwMDAwMDAxNmx1Ci0KLSNkZWZpbmUgQ01SQl9EU1RfT0ZGU0VUICAgMHgwMDAwMDAwMGx1Ci0jZGVmaW5lIENNUkJfU1JDX09GRlNFVCAgIDB4MDAwMDAwMDJsdQotI2RlZmluZSBDTVJCX0RBVEFfT0ZGU0VUICAweDAwMDAwMDA1bHUKLQotLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciAoQ01UQikgQWRkcmVzcyBPZmZzZXRzICovCi0KLSNkZWZpbmUgQ01UQl9QUklPX09GRlNFVCAgICAweDAwMDAwMDAwbHUKLSNkZWZpbmUgQ01UQl9EU1RfT0ZGU0VUICAgICAweDAwMDAwMDAybHUKLSNkZWZpbmUgQ01UQl9TUkNfT0ZGU0VUICAgICAweDAwMDAwMDA0bHUKLSNkZWZpbmUgQ01UQl9UWVBFX09GRlNFVCAgICAweDAwMDAwMDA2bHUKLSNkZWZpbmUgQ01UQl9EQVRBX09GRlNFVCAgICAweDAwMDAwMDA3bHUKLQotI2RlZmluZSBDTVRCX0FOU1dFUl9PRkZTRVQgIDB4MDAwMDAwMEFsdQotCi0jZGVmaW5lIENNVEJfU1RBVF9OX09GRlNFVCAgMHgwMDAwMDAxOGx1Ci0jZGVmaW5lIENNVEJfU1RBVF9BX09GRlNFVCAgMHgwMDAwMDAxNmx1Ci0jZGVmaW5lIENNVEJfU1RBVF9EX09GRlNFVCAgMHgwMDAwMDAwRWx1Ci0jZGVmaW5lIENNVEJfU1RBVF9SX09GRlNFVCAgMHgwMDAwMDAxNGx1Ci0jZGVmaW5lIENNVEJfU1RBVF9XX09GRlNFVCAgMHgwMDAwMDAxNGx1Ci0jZGVmaW5lIENNVEJfU1RBVF9HX09GRlNFVCAgMHgwMDAwMDAxNGx1Ci0KLS8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgKEFQUkIpIEFkZHJlc3MgT2Zmc2V0cyAqLwotCi0jZGVmaW5lIEFQUkJfU1RSSURFICAgICAgIDB4MDAwMDA0MDBsdQotCi0jZGVmaW5lIEFQUkJfRFNUX09GRlNFVCAgIDB4MDAwMDAwMDBsdQotI2RlZmluZSBBUFJCX0xFTl9PRkZTRVQgICAweDAwMDAwMDAybHUKLSNkZWZpbmUgQVBSQl9TUkNfT0ZGU0VUICAgMHgwMDAwMDAwNGx1Ci0jZGVmaW5lIEFQUkJfREFUQV9PRkZTRVQgIDB4MDAwMDAwMDZsdQotCi0vKiBBc3luY2hyb25vdXMgUGFja2V0IFRyYW5zbWl0IEJ1ZmZlciAoQVBUQikgQWRkcmVzcyBPZmZzZXRzICovCi0KLSNkZWZpbmUgQVBUQl9QUklPX09GRlNFVCAgMHgwMDAwMDAwMGx1Ci0jZGVmaW5lIEFQVEJfRFNUX09GRlNFVCAgIDB4MDAwMDAwMDJsdQotI2RlZmluZSBBUFRCX0xFTl9PRkZTRVQgICAweDAwMDAwMDA0bHUKLSNkZWZpbmUgQVBUQl9TUkNfT0ZGU0VUICAgMHgwMDAwMDAwNmx1Ci0jZGVmaW5lIEFQVEJfREFUQV9PRkZTRVQgIDB4MDAwMDAwMDhsdQotCi0vKiBSZW1vdGUgUmVhZCBCdWZmZXIgKFJSREIpIEFkZHJlc3MgT2Zmc2V0cyAqLwotCi0jZGVmaW5lIFJSREJfV0FERFJfT0ZGU0VUIDB4MDAwMDAxMDBsdQotI2RlZmluZSBSUkRCX1dMRU5fT0ZGU0VUICAweDAwMDAwMTAxbHUKLQotLyogKioqKioqKioqKioqKioqKiAqLwotLyogICBNWFZSIE1hY3JvcyAgICAqLwotLyogKioqKioqKioqKioqKioqKiAqLwotCi0vKiBNWFZSX0NPTkZJRyBNYWNyb3MgKi8KLQotI2RlZmluZSBTRVRfTVNCKHgpICAgICAgICggKCAoeCkgJiAweEYgICkgPDwgOSkKLQotLyogTVhWUl9JTlRfU1RBVF8xIE1hY3JvcyAqLwotCi0jZGVmaW5lIERPTkVYKHgpICAgICAgICAgKDB4MDAwMDAwMDIgPDwgKDQgKiAoeCkpKQotI2RlZmluZSBIRE9ORVgoeCkgICAgICAgICgweDAwMDAwMDAxIDw8ICg0ICogKHgpKSkKLQotLyogTVhWUl9JTlRfRU5fMSBNYWNyb3MgKi8KLQotI2RlZmluZSBET05FRU5YKHgpICAgICAgICgweDAwMDAwMDAyIDw8ICg0ICogKHgpKSkKLSNkZWZpbmUgSERPTkVFTlgoeCkgICAgICAoMHgwMDAwMDAwMSA8PCAoNCAqICh4KSkpCi0KLS8qIE1YVlJfQ0RSUExMX0NUTCBNYWNyb3MgKi8KLQotI2RlZmluZSBTRVRfQ0RSU0hQU0VMKHgpICggKCAoeCkgJiAweDNGICkgPDwgMTYpCi0KLS8qIE1YVlJfRk1QTExfQ1RMIE1hY3JvcyAqLwotCi0jZGVmaW5lIFNFVF9DRFJDUFNFTCh4KSAgKCAoICh4KSAmIDB4RkYgKSA8PCAyNCkKLSNkZWZpbmUgU0VUX0ZNQ1BTRUwoeCkgICAoICggKHgpICYgMHhGRiApIDw8IDI0KQotCiAjZW5kaWYgLyogX0RFRl9CRjU0OV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oCmluZGV4IDg1OTBjOGMuLmFiMDRkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oCkBAIC0xNjA5LDQ0ICsxNjA5LDYgQEAKICNkZWZpbmUgICAgICAgICAgICAgICAgIFBJTlQyICAweDQwMDAwMDAwIC8qIFBpbiBJbnRlcnJ1cHQgMiAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgUElOVDMgIDB4ODAwMDAwMDAgLyogUGluIEludGVycnVwdCAzICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgRE1BeF9DT05GSUcsIE1ETUFfU3hfQ09ORklHLCBNRE1BX0R4X0NPTkZJRyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BRU4gIDB4MSAgICAgICAgLyogRE1BIENoYW5uZWwgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBXTlIgIDB4MiAgICAgICAgLyogRE1BIERpcmVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFdEU0laRV84ICAweDAgICAgICAgIC8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFdEU0laRV8xNiAgMHg0ICAgICAgICAvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAxNiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgV0RTSVpFXzMyICAweDggICAgICAgIC8qIFRyYW5zZmVyIFdvcmQgU2l6ZSA9IDMyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BMkQgIDB4MTAgICAgICAgLyogRE1BIE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUkVTVEFSVCAgMHgyMCAgICAgICAvKiBXb3JrIFVuaXQgVHJhbnNpdGlvbnMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERJX1NFTCAgMHg0MCAgICAgICAvKiBEYXRhIEludGVycnVwdCBUaW1pbmcgU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRElfRU4gIDB4ODAgICAgICAgLyogRGF0YSBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE5EU0laRSAgMHhmMDAgICAgICAvKiBGbGV4IERlc2NyaXB0b3IgU2l6ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV8wIDB4MDAwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMCAoU3RvcC9BdXRvYnVmZmVyKSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV8xIDB4MDEwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV8yIDB4MDIwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV8zIDB4MDMwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV80IDB4MDQwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV81IDB4MDUwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV82IDB4MDYwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV83IDB4MDcwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV84IDB4MDgwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gOCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5EU0laRV85IDB4MDkwMCAgICAgIC8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gOSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQUZMT1cgIDB4ZjAwMCAgICAgLyogTmV4dCBPcGVyYXRpb24gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERNQUZMT1dfU1RPUCAgMHgwMDAwICAgICAvKiBTdG9wIE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERNQUZMT1dfQVVUTyAgMHgxMDAwICAgICAvKiBBdXRvYnVmZmVyIE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgRE1BRkxPV19BUlJBWSAgMHg0MDAwICAgICAvKiBEZXNjcmlwdG9yIEFycmF5IE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgRE1BRkxPV19TTUFMTCAgMHg2MDAwICAgICAvKiBTbWFsbCBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICBETUFGTE9XX0xBUkdFICAweDcwMDAgICAgIC8qIExhcmdlIE1vZGVsIERlc2NyaXB0b3IgTGlzdCBNb2RlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRE1BeF9JUlFfU1RBVFVTLCBNRE1BX1N4X0lSUV9TVEFUVVMsIE1ETUFfRHhfSVJRX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BX0RPTkUgIDB4MSAgICAgICAgLyogRE1BIENvbXBsZXRpb24gSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRVJSICAweDIgICAgICAgIC8qIERNQSBFcnJvciBJbnRlcnJ1cHQgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBERkVUQ0ggIDB4NCAgICAgICAgLyogRE1BIERlc2NyaXB0b3IgRmV0Y2ggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BX1JVTiAgMHg4ICAgICAgICAvKiBETUEgQ2hhbm5lbCBSdW5uaW5nICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgRE1BeF9QRVJJUEhFUkFMX01BUCwgTURNQV9TeF9JUlFfU1RBVFVTLCBNRE1BX0R4X0lSUV9TVEFUVVMgKi8KIAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENUWVBFICAweDQwICAgICAgIC8qIERNQSBDaGFubmVsIFR5cGUgKi8KQEAgLTE4MTUsMTAgKzE3NzcsNiBAQAogI2RlZmluZSAgICAgICAgICAgICAgIERFQjNfTUVSUk9SICAweDQwICAgICAgIC8qIERFQjMgRXJyb3IgKDJuZCkgKi8KICNkZWZpbmUgICAgICAgICAgICAgICBDT1JFX01FUlJPUiAgMHg4MCAgICAgICAvKiBDb3JlIEVycm9yICgybmQpICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9FUlJBREQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICBFUlJPUl9BRERSRVNTICAweGZmZmZmZmZmIC8qIEVycm9yIEFkZHJlc3MgKi8KLQogLyogQml0IG1hc2tzIGZvciBFQklVX1JTVENUTCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgICBERFJTUkVTRVQgIDB4MSAgICAgICAgLyogRERSIHNvZnQgcmVzZXQgKi8KQEAgLTE4MjcsOTggKzE3ODUsNiBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNSQUNLICAweDEwICAgICAgIC8qIFNlbGYtcmVmcmVzaCBhY2tub3dsZWRnZSAqLwogI2RlZmluZSAgICAgICAgICAgICAgICBNRERSRU5BQkxFICAweDIwICAgICAgIC8qIE1vYmlsZSBERFIgZW5hYmxlICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCUkMwICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQlJDMCAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQlJDMSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJSQzEgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJSQzIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCUkMyICAweGZmZmZmZmZmIC8qIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCUkMzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQlJDMyAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQlJDNCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJSQzQgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJSQzUgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCUkM1ICAweGZmZmZmZmZmIC8qIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCUkM2ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQlJDNiAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQlJDNyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJSQzcgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJXQzAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCV0MwICAweGZmZmZmZmZmIC8qIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCV0MxICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQldDMSAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQldDMiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJXQzIgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJXQzMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCV0MzICAweGZmZmZmZmZmIC8qIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCV0M0ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQldDNCAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQldDNSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJXQzUgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJXQzYgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCV0M2ICAweGZmZmZmZmZmIC8qIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCV0M3ICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQldDNyAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQUNDVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFDQ1QgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBFQklVX0REUlRBQ1QgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURUNUICAweGZmZmZmZmZmIC8qIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJBUkNUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVJDVCAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSR0MwICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEdDMCAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSR0MxICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEdDMSAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSR0MyICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEdDMiAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSR0MzICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEdDMyAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLwotCiAvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSTUNFTiAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgIEIwV0NFTkFCTEUgIDB4MSAgICAgICAgLyogQmFuayAwIHdyaXRlIGNvdW50IGVuYWJsZSAqLwpAQCAtMjA5MiwxMiArMTk1OCw2IEBACiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjYgIDB4NDAwMDAwMDAgLyogVGltZXIgNiBTbGF2ZSBFbmFibGUgU3RhdHVzICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjcgIDB4ODAwMDAwMDAgLyogVGltZXIgNyBTbGF2ZSBFbmFibGUgU3RhdHVzICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgV0RPR19DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBXREVWICAweDYgICAgICAgIC8qIFdhdGNoZG9nIEV2ZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFdERU4gIDB4ZmYwICAgICAgLyogV2F0Y2hkb2cgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFdEUk8gIDB4ODAwMCAgICAgLyogV2F0Y2hkb2cgUm9sbGVkIE92ZXIgKi8KLQogLyogQml0IG1hc2tzIGZvciBDTlRfQ09ORklHICovCiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05URSAgMHgxICAgICAgICAvKiBDb3VudGVyIEVuYWJsZSAqLwpAQCAtMjE0OSw4MSArMjAwOSw2IEBACiAKICNkZWZpbmUgICAgICAgICAgICAgICAgIERQUkVTQ0FMRSAgMHhmICAgICAgICAvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KIAotLyogQml0IG1hc2tzIGZvciBSVENfU1RBVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ09ORFMgIDB4M2YgICAgICAgLyogU2Vjb25kcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBNSU5VVEVTICAweGZjMCAgICAgIC8qIE1pbnV0ZXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1VSUyAgMHgxZjAwMCAgICAvKiBIb3VycyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBWV9DT1VOVEVSICAweGZmZmUwMDAwIC8qIERheSBDb3VudGVyICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUlRDX0lDVEwgKi8KLQotI2RlZmluZSBTVE9QV0FUQ0hfSU5URVJSVVBUX0VOQUJMRSAgMHgxICAgICAgICAvKiBTdG9wd2F0Y2ggSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICBBTEFSTV9JTlRFUlJVUFRfRU5BQkxFICAweDIgICAgICAgIC8qIEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgIFNFQ09ORFNfSU5URVJSVVBUX0VOQUJMRSAgMHg0ICAgICAgICAvKiBTZWNvbmRzIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgIE1JTlVURVNfSU5URVJSVVBUX0VOQUJMRSAgMHg4ICAgICAgICAvKiBNaW51dGVzIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgSE9VUlNfSU5URVJSVVBUX0VOQUJMRSAgMHgxMCAgICAgICAvKiBIb3VycyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFRXRU5UWV9GT1VSX0hPVVJTX0lOVEVSUlVQVF9FTkFCTEUgIDB4MjAgICAgICAgLyogMjQgSG91cnMgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBEQVlfQUxBUk1fSU5URVJSVVBUX0VOQUJMRSAgMHg0MCAgICAgICAvKiBEYXkgQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBXUklURV9DT01QTEVURV9JTlRFUlJVUFRfRU5BQkxFICAweDgwMDAgICAgIC8qIFdyaXRlIENvbXBsZXRlIEludGVycnVwdCBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBSVENfSVNUQVQgKi8KLQotI2RlZmluZSAgICAgIFNUT1BXQVRDSF9FVkVOVF9GTEFHICAweDEgICAgICAgIC8qIFN0b3B3YXRjaCBFdmVudCBGbGFnICovCi0jZGVmaW5lICAgICAgICAgIEFMQVJNX0VWRU5UX0ZMQUcgIDB4MiAgICAgICAgLyogQWxhcm0gRXZlbnQgRmxhZyAqLwotI2RlZmluZSAgICAgICAgU0VDT05EU19FVkVOVF9GTEFHICAweDQgICAgICAgIC8qIFNlY29uZHMgRXZlbnQgRmxhZyAqLwotI2RlZmluZSAgICAgICAgTUlOVVRFU19FVkVOVF9GTEFHICAweDggICAgICAgIC8qIE1pbnV0ZXMgRXZlbnQgRmxhZyAqLwotI2RlZmluZSAgICAgICAgICBIT1VSU19FVkVOVF9GTEFHICAweDEwICAgICAgIC8qIEhvdXJzIEV2ZW50IEZsYWcgKi8KLSNkZWZpbmUgVFdFTlRZX0ZPVVJfSE9VUlNfRVZFTlRfRkxBRyAgMHgyMCAgICAgICAvKiAyNCBIb3VycyBFdmVudCBGbGFnICovCi0jZGVmaW5lICAgICAgREFZX0FMQVJNX0VWRU5UX0ZMQUcgIDB4NDAgICAgICAgLyogRGF5IEFsYXJtIEV2ZW50IEZsYWcgKi8KLSNkZWZpbmUgICAgIFdSSVRFX1BFTkRJTkdfX1NUQVRVUyAgMHg0MDAwICAgICAvKiBXcml0ZSBQZW5kaW5nICBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICBXUklURV9DT01QTEVURSAgMHg4MDAwICAgICAvKiBXcml0ZSBDb21wbGV0ZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFJUQ19TV0NOVCAqLwotCi0jZGVmaW5lICAgICAgICAgICBTVE9QV0FUQ0hfQ09VTlQgIDB4ZmZmZiAgICAgLyogU3RvcHdhdGNoIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUlRDX0FMQVJNICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDT05EUyAgMHgzZiAgICAgICAvKiBTZWNvbmRzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIE1JTlVURVMgIDB4ZmMwICAgICAgLyogTWludXRlcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPVVJTICAweDFmMDAwICAgIC8qIEhvdXJzICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBEQVkgIDB4ZmZmZTAwMDAgLyogRGF5ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgUlRDX1BSRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQUkVOICAweDEgICAgICAgIC8qIFByZXNjYWxlciBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBPVFBfQ09OVFJPTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIEZVU0VfRkFERFIgIDB4MWZmICAgICAgLyogT1RQL0Z1c2UgQWRkcmVzcyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGSUVOICAweDgwMCAgICAgIC8qIE9UUC9GdXNlIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBGVEVTVERFQyAgMHgxMDAwICAgICAvKiBPVFAvRnVzZSBUZXN0IERlY29kZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRldSVEVTVCAgMHgyMDAwICAgICAvKiBPVFAvRnVzZSBXcml0ZSBUZXN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRlJERU4gIDB4NDAwMCAgICAgLyogT1RQL0Z1c2UgUmVhZCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGV1JFTiAgMHg4MDAwICAgICAvKiBPVFAvRnVzZSBXcml0ZSBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBPVFBfQkVOICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkJFTiAgMHhmZmZmICAgICAvKiBPVFAvRnVzZSBCeXRlIEVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE9UUF9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZDT01QICAweDEgICAgICAgIC8qIE9UUC9GdXNlIEFjY2VzcyBDb21wbGV0ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRkVSUk9SICAweDIgICAgICAgIC8qIE9UUC9GdXNlIEFjY2VzcyBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIE1NUkdMT0FEICAweDEwICAgICAgIC8qIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIgR2Fza2V0IExvYWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBNTVJHTE9DSyAgMHgyMCAgICAgICAvKiBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyIEdhc2tldCBMb2NrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBGUEdNRU4gIDB4NDAgICAgICAgLyogT1RQL0Z1c2UgUHJvZ3JhbSBFbmFibGUgKi8KLQotLyogQml0IG1hc2tzIGZvciBPVFBfVElNSU5HICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNFQ0RJViAgMHhmZiAgICAgICAvKiBNaWNybyBTZWNvbmQgRGl2aWRlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBSRUFEQUNDICAweDdmMDAgICAgIC8qIFJlYWQgQWNjZXNzIFRpbWUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1BVTVBSTCAgMHgzODAwMCAgICAvKiBDaGFyZ2UgUHVtcCBSZWxlYXNlIFRpbWUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1BVTVBTVSAgMHhjMDAwMCAgICAvKiBDaGFyZ2UgUHVtcCBTZXR1cCBUaW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QSEQgIDB4ZjAwMDAwICAgLyogQ2hhcmdlIFB1bXAgSG9sZCBUaW1lICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFBHTVRJTUUgIDB4ZmYwMDAwMDAgLyogUHJvZ3JhbSBUaW1lICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX1NZU1NXVCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVNVURBQkwgIDB4MSAgICAgICAgLyogRW11bGF0aW9uIERpc2FibGUuICovCkBAIC0yMjUyLDI2ICsyMDM3LDYgQEAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFGRVhJVCAgMHgxMCAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBGaXJtd2FyZSBFeGl0ICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1NUQVQgIDB4ZTAgICAgICAgLyogU2VjdXJlIFN0YXR1cyAqLwogCi0vKiBCaXQgbWFza3MgZm9yIFBMTF9ESVYgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDU0VMICAweDMwICAgICAgIC8qIENvcmUgU2VsZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNTRUwgIDB4ZiAgICAgICAgLyogU3lzdGVtIFNlbGVjdCAqLwotI2RlZmluZQkJCUNTRUxfRElWMQkweDAwMDAJLyogQ0NMSyA9IFZDTyAvIDEgKi8KLSNkZWZpbmUJCQlDU0VMX0RJVjIJMHgwMDEwCS8qIENDTEsgPSBWQ08gLyAyICovCi0jZGVmaW5lCQkJQ1NFTF9ESVY0CTB4MDAyMAkvKiBDQ0xLID0gVkNPIC8gNCAqLwotI2RlZmluZQkJCUNTRUxfRElWOAkweDAwMzAJLyogQ0NMSyA9IFZDTyAvIDggKi8KLQotLyogQml0IG1hc2tzIGZvciBQTExfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTVNFTCAgMHg3ZTAwICAgICAvKiBNdWx0aXBsaWVyIFNlbGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQllQQVNTICAweDEwMCAgICAgIC8qIFBMTCBCeXBhc3MgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICBPVVRQVVRfREVMQVkgIDB4ODAgICAgICAgLyogRXh0ZXJuYWwgTWVtb3J5IE91dHB1dCBEZWxheSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBJTlBVVF9ERUxBWSAgMHg0MCAgICAgICAvKiBFeHRlcm5hbCBNZW1vcnkgSW5wdXQgRGVsYXkgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBEV04gIDB4MjAgICAgICAgLyogUG93ZXIgRG93biAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1RPUENLICAweDggICAgICAgIC8qIFN0b3AgQ2xvY2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUExMX09GRiAgMHgyICAgICAgICAvKiBEaXNhYmxlIFBMTCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIERGICAweDEgICAgICAgIC8qIERpdmlkZSBGcmVxdWVuY3kgKi8KLQogLyogU1dSU1QgTWFza3MgKi8KICNkZWZpbmUgICAgICAgICAgICAgIFNZU1RFTV9SRVNFVCAweDAwMDcgICAgICAgLyogSW5pdGlhdGVzIEEgU3lzdGVtIFNvZnR3YXJlIFJlc2V0ICovCiAjZGVmaW5lICAgICAgICAgICAgICBET1VCTEVfRkFVTFQgMHgwMDA4ICAgICAgIC8qIENvcmUgRG91YmxlIEZhdWx0IENhdXNlcyBSZXNldCAqLwpAQCAtMjI3OSw1MiArMjA0NCw2IEBACiAjZGVmaW5lICAgICAgICAgICAgICAgIFJFU0VUX1dET0cgMHg0MDAwICAgICAgIC8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBXYXRjaGRvZyBUaW1lciAqLwogI2RlZmluZSAgICAgICAgICAgIFJFU0VUX1NPRlRXQVJFIDB4ODAwMCAgICAgICAvKiBTVyBSZXNldCBPY2N1cnJlZCBTaW5jZSBMYXN0IFJlYWQgT2YgU1dSU1QgKi8KIAotLyogQml0IG1hc2tzIGZvciBQTExfU1RBVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgIFBMTF9MT0NLRUQgIDB4MjAgICAgICAgLyogUExMIExvY2tlZCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgIEFDVElWRV9QTExESVNBQkxFRCAgMHg0ICAgICAgICAvKiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBEaXNhYmxlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBGVUxMX09OICAweDIgICAgICAgIC8qIEZ1bGwtT24gTW9kZSAqLwotI2RlZmluZSAgICAgICAgIEFDVElWRV9QTExFTkFCTEVEICAweDEgICAgICAgIC8qIEFjdGl2ZSBNb2RlIFdpdGggUExMIEVuYWJsZWQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSVENXUyAgMHg0MDAgICAgICAvKiBSVEMvUmVzZXQgV2FrZS1VcCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDQU5XUyAgMHg4MDAgICAgICAvKiBDQU4gV2FrZS1VcCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JXUyAgMHgyMDAwICAgICAvKiBVU0IgV2FrZS1VcCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEtQQURXUyAgMHg0MDAwICAgICAvKiBLZXlwYWQgV2FrZS1VcCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBST1RXUyAgMHg4MDAwICAgICAvKiBSb3RhcnkgV2FrZS1VcCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgR1BXUyAgMHgxMDAwICAgICAvKiBHZW5lcmFsLVB1cnBvc2UgV2FrZS1VcCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBWUl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGUkVRICAweDMgICAgICAgIC8qIFJlZ3VsYXRvciBTd2l0Y2hpbmcgRnJlcXVlbmN5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEdBSU4gIDB4YyAgICAgICAgLyogVm9sdGFnZSBPdXRwdXQgTGV2ZWwgR2FpbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBWTEVWICAweGYwICAgICAgIC8qIEludGVybmFsIFZvbHRhZ2UgTGV2ZWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0NLRUxPVyAgMHg4MDAwICAgICAvKiBEcml2ZSBTQ0tFIExvdyBEdXJpbmcgUmVzZXQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFdBS0UgIDB4MTAwICAgICAgLyogUlRDL1Jlc2V0IFdha2UtVXAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOV0UgIDB4MjAwICAgICAgLyogQ0FOMC8xIFdha2UtVXAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEdQV0UgIDB4NDAwICAgICAgLyogR2VuZXJhbC1QdXJwb3NlIFdha2UtVXAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCV0UgIDB4ODAwICAgICAgLyogVVNCIFdha2UtVXAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEV0UgIDB4MTAwMCAgICAgLyogS2V5cGFkIFdha2UtVXAgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk9UV0UgIDB4MjAwMCAgICAgLyogUm90YXJ5IFdha2UtVXAgRW5hYmxlICovCi0KLSNkZWZpbmUJRlJFUV8zMzMJCTB4MDAwMQkvKiBTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDMzMyBrSHogKi8KLSNkZWZpbmUJRlJFUV82NjcJCTB4MDAwMgkvKiBTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDY2NyBrSHogKi8KLSNkZWZpbmUJRlJFUV8xMDAwCQkweDAwMDMJLyogU3dpdGNoaW5nIEZyZXF1ZW5jeSBJcyAxIE1IeiAqLwotCi0jZGVmaW5lCUdBSU5fNQkJCTB4MDAwMAkvKiBHQUlOID0gNSovCi0jZGVmaW5lCUdBSU5fMTAJCQkweDAwMDQJLyogR0FJTiA9IDEqLwotI2RlZmluZQlHQUlOXzIwCQkJMHgwMDA4CS8qIEdBSU4gPSAyKi8KLSNkZWZpbmUJR0FJTl81MAkJCTB4MDAwQwkvKiBHQUlOID0gNSovCi0KLSNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogVkxFViA9IDAuODUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLSNkZWZpbmUJVkxFVl8wOTAJCTB4MDA3MAkvKiBWTEVWID0gMC45MCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLwotI2RlZmluZQlWTEVWXzA5NQkJMHgwMDgwCS8qIFZMRVYgPSAwLjk1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCi0jZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogVkxFViA9IDEuMDAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLSNkZWZpbmUJVkxFVl8xMDUJCTB4MDBBMAkvKiBWTEVWID0gMS4wNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLwotI2RlZmluZQlWTEVWXzExMAkJMHgwMEIwCS8qIFZMRVYgPSAxLjEwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCi0jZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogVkxFViA9IDEuMTUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLSNkZWZpbmUJVkxFVl8xMjAJCTB4MDBEMAkvKiBWTEVWID0gMS4yMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLwotI2RlZmluZQlWTEVWXzEyNQkJMHgwMEUwCS8qIFZMRVYgPSAxLjI1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCi0jZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogVkxFViA9IDEuMzAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLQogLyogQml0IG1hc2tzIGZvciBORkNfQ1RMICovCiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFdSX0RMWSAgMHhmICAgICAgICAvKiBXcml0ZSBTdHJvYmUgRGVsYXkgKi8KQEAgLTI0ODksMTQgKzIyMDgsNiBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVQ0NUICAweDQwICAgICAgIC8qIFVuaXZlcnNhbCBDb3VudGVyIENBTiBUcmlnZ2VyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQ0UgIDB4ODAgICAgICAgLyogVW5pdmVyc2FsIENvdW50ZXIgRW5hYmxlICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9VQ0NOVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVUNDTlQgIDB4ZmZmZiAgICAgLyogVW5pdmVyc2FsIENvdW50ZXIgQ291bnQgVmFsdWUgKi8KLQotLyogQml0IG1hc2tzIGZvciBDQU4wX1VDUkMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVDVkFMICAweGZmZmYgICAgIC8qIFVuaXZlcnNhbCBDb3VudGVyIFJlbG9hZC9DYXB0dXJlIFZhbHVlICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9DRUMgKi8KIAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhFQ05UICAweGZmICAgICAgIC8qIFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9LY29uZmlnCmluZGV4IGU0YmM2ZDcuLjFhYTUyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL0tjb25maWcKQEAgLTE5LDQgKzE5LDExIEBACiAJaGVscAogCSAgQ00tQkY1NjEgc3VwcG9ydCBmb3IgRVZBTC0gYW5kIERFVi1Cb2FyZC4KIAorY29uZmlnIEJGSU41NjFfQUNWSUxPTgorCWJvb2wgIkJGNTYxLUFDVklMT04iCisJaGVscAorCSAgQkY1NjEtQUNWSUxPTiBTeXN0ZW0gT24gTW9kdWxlIHN1cHBvcnQgKFNPLURJTU0gMTQ0KS4KKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFjdmlsb24gQkY1NjEgU29NCisJICBwbGVhc2UgZ28gdG8gaHR0cDovL3d3dy5uaWlzdHQucnUvCisKIGVuZGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvTWFrZWZpbGUKaW5kZXggM2ExNTI1NS4uYTU4NzlmNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogIyBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL01ha2VmaWxlCiAjCiAKK29iai0kKENPTkZJR19CRklONTYxX0FDVklMT04pICAgICAgICAgICs9IGFjdmlsb24ubwogb2JqLSQoQ09ORklHX0JGSU41NjFfQkxVRVRFQ0hOSVhfQ00pICAgKz0gY21fYmY1NjEubwogb2JqLSQoQ09ORklHX0JGSU41NjFfRVpLSVQpICAgICAgICAgICAgKz0gZXpraXQubwogb2JqLSQoQ09ORklHX0JGSU41NjFfVEVQTEEpICAgICAgICAgICAgKz0gdGVwbGEubwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9hY3ZpbG9uLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2Fjdmlsb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2U4ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9hY3ZpbG9uLmMKQEAgLTAsMCArMSw1NTEgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hY3ZpbG9uLmMKKyAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2V6a2l0LmMKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246CisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOSBDSlNDICJOSUkgU1RUIgorICoKKyAqIEJ1Z3M6CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBBY3ZpbG9uIEJGNTYxIFNvTSBwbGVhc2UKKyAqIGdvIHRvIGh0dHA6Ly93d3cubmlpc3R0LnJ1LworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtcGNhLXBsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorI2luY2x1ZGUgPGFzbS9kcG1jLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworLyoKKyAqIE5hbWUgdGhlIEJvYXJkIGZvciB0aGUgL3Byb2MvY3B1aW5mbworICovCitjb25zdCBjaGFyIGJmaW5fYm9hcmRfbmFtZVtdID0gIkFjdmlsb24gYm9hcmQiOworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDE3NjBfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTc2MF9IQ0RfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxNzYwLmg+CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5faXNwMTc2MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJICAgICAgIC5zdGFydCA9IDB4MjAwMDAwMDAsCisJICAgICAgIC5lbmQgPSAweDIwMDAwMDAwICsgMHgwMDBmZmZmZiwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJICAgICAgIH0sCisJWzFdID0geworCSAgICAgICAuc3RhcnQgPSBJUlFfUEYxNSwKKwkgICAgICAgLmVuZCA9IElSUV9QRjE1LAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorCSAgICAgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpc3AxNzYwX3BsYXRmb3JtX2RhdGEgaXNwMTc2MF9wcml2ID0geworCS5pc19pc3AxNzYxID0gMCwKKwkucG9ydDFfZGlzYWJsZSA9IDAsCisJLmJ1c193aWR0aF8xNiA9IDEsCisJLnBvcnQxX290ZyA9IDAsCisJLmFuYWxvZ19vYyA9IDAsCisJLmRhY2tfcG9sYXJpdHlfaGlnaCA9IDAsCisJLmRyZXFfcG9sYXJpdHlfaGlnaCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2lzcDE3NjBfZGV2aWNlID0geworCS5uYW1lID0gImlzcDE3NjAtaGNkIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmlzcDE3NjBfcHJpdiwKKwkJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9pc3AxNzYwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gYmZpbl9pc3AxNzYwX3Jlc291cmNlcywKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2kyY19wY2FfcmVzb3VyY2VzW10gPSB7CisJeworCSAubmFtZSA9ICJwY2E5NTY0LXJlZ3MiLAorCSAuc3RhcnQgPSAweDJDMDAwMDAwLAorCSAuZW5kID0gMHgyQzAwMDAwMCArIDE2LAorCSAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCSB9LCB7CisKKwkgICAgIC5zdGFydCA9IElSUV9QRjgsCisJICAgICAuZW5kID0gSVJRX1BGOCwKKwkgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCisJICAgICB9LAorfTsKKworc3RydWN0IGkyY19wY2E5NTY0X3BmX3BsYXRmb3JtX2RhdGEgcGNhOTU2NF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvID0gLTEsCisJLmkyY19jbG9ja19zcGVlZCA9IDMzMDAwMCwKKwkudGltZW91dCA9IDEwMDAwCit9OworCisvKiBQQ0E5NTY0IEkyQyBCdXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2kyY19wY2FfZGV2aWNlID0geworCS5uYW1lID0gImkyYy1wY2EtcGxhdGZvcm0iLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5faTJjX3BjYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmaW5faTJjX3BjYV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNhOTU2NF9wbGF0Zm9ybV9kYXRhLAorCQl9Cit9OworCisvKiBJMkMgZGV2aWNlcyBmaXR0ZWQuICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGFjdmlsb25faTJjX2RldnNbXSBfX2luaXRkYXRhID0geworCXsKKwkgSTJDX0JPQVJEX0lORk8oImRzMTMzOSIsIDB4NjgpLAorCSB9LAorCXsKKwkgSTJDX0JPQVJEX0lORk8oInRjbjc1IiwgMHg0OSksCisJIH0sCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU0pIHx8IGRlZmluZWQoQ09ORklHX01URF9QTEFUUkFNX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBtdGRfcmFtX2RhdGEgPSB7CisJLm1hcG5hbWUgPSAicm9vdGZzKFJBTSkiLAorCS5iYW5rd2lkdGggPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdGRfcmFtX3Jlc291cmNlID0geworCS5zdGFydCA9IDB4NDAwMDAwMCwKKwkuZW5kID0gMHg1ZmZmZmZmLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXRkX3JhbV9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXRkLXJhbSIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZtdGRfcmFtX2RhdGEsCisJCX0sCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZtdGRfcmFtX3Jlc291cmNlLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU01TQzkxMVgpIHx8IGRlZmluZWQoQ09ORklHX1NNU0M5MTFYX01PRFVMRSkKKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJIC5uYW1lID0gInNtc2M5MTF4LW1lbW9yeSIsCisJIC5zdGFydCA9IDB4MjgwMDAwMDAsCisJIC5lbmQgPSAweDI4MDAwMDAwICsgMHhGRiwKKwkgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJIH0sCisJeworCSAuc3RhcnQgPSBJUlFfUEY3LAorCSAuZW5kID0gSVJRX1BGNywKKwkgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKKwkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuZmxhZ3MgPSBTTVNDOTExWF9VU0VfMzJCSVQsCisJLmlycV9wb2xhcml0eSA9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZSA9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLnBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lID0gInNtc2M5MTF4IiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IHNtc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJCX0sCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3VhcnQwX3Jlc291cmNlc1tdID0geworCXsKKwkgLnN0YXJ0ID0gQkZJTl9VQVJUX1RIUiwKKwkgLmVuZCA9IEJGSU5fVUFSVF9HQ1RMICsgMiwKKwkgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJIH0sCisJeworCSAuc3RhcnQgPSBJUlFfVUFSVF9SWCwKKwkgLmVuZCA9IElSUV9VQVJUX1JYICsgMSwKKwkgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJIH0sCisJeworCSAuc3RhcnQgPSBJUlFfVUFSVF9FUlJPUiwKKwkgLmVuZCA9IElSUV9VQVJUX0VSUk9SLAorCSAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkgfSwKKwl7CisJIC5zdGFydCA9IENIX1VBUlRfVFgsCisJIC5lbmQgPSBDSF9VQVJUX1RYLAorCSAuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkgfSwKKwl7CisJIC5zdGFydCA9IENIX1VBUlRfUlgsCisJIC5lbmQgPSBDSF9VQVJUX1JYLAorCSAuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwkgfSwKK307CisKK3Vuc2lnbmVkIHNob3J0IGJmaW5fdWFydDBfcGVyaXBoZXJhbHNbXSA9IHsKKwlQX1VBUlQwX1RYLCBQX1VBUlQwX1JYLCAwCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3VhcnQwX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXVhcnQiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fdWFydDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBiZmluX3VhcnQwX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkvKiBQYXNzZWQgdG8gZHJpdmVyICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fdWFydDBfcGVyaXBoZXJhbHMsCisJCX0sCit9OworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STV9NT0RVTEUpCisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK2NvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGJmaW5fcGxhdF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJIC5uYW1lID0gInBhcmFtcyhuYW5kKSIsCisJIC5zaXplID0gMzIgKiAxMDI0ICogMTAyNCwKKwkgLm9mZnNldCA9IDAsCisJIH0sIHsKKwkgICAgIC5uYW1lID0gInVzZXJmcyhuYW5kKSIsCisJICAgICAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJICAgICAub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgfSwKK307CisjZW5kaWYKKworI2RlZmluZSBCRklOX05BTkRfUExBVF9DTEUgMgorI2RlZmluZSBCRklOX05BTkRfUExBVF9BTEUgMworCitzdGF0aWMgdm9pZCBiZmluX3BsYXRfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJd3JpdGViKGNtZCwgdGhpcy0+SU9fQUREUl9XICsgKDEgPDwgQkZJTl9OQU5EX1BMQVRfQ0xFKSk7CisJZWxzZQorCQl3cml0ZWIoY21kLCB0aGlzLT5JT19BRERSX1cgKyAoMSA8PCBCRklOX05BTkRfUExBVF9BTEUpKTsKK30KKworI2RlZmluZSBCRklOX05BTkRfUExBVF9SRUFEWSBHUElPX1BGMTAKK3N0YXRpYyBpbnQgYmZpbl9wbGF0X25hbmRfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShCRklOX05BTkRfUExBVF9SRUFEWSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIGJmaW5fcGxhdF9uYW5kX2RhdGEgPSB7CisJLmNoaXAgPSB7CisJCSAuY2hpcF9kZWxheSA9IDMwLAorI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCQkgLnBhcnRfcHJvYmVfdHlwZXMgPSBwYXJ0X3Byb2JlcywKKwkJIC5wYXJ0aXRpb25zID0gYmZpbl9wbGF0X25hbmRfcGFydGl0aW9ucywKKwkJIC5ucl9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShiZmluX3BsYXRfbmFuZF9wYXJ0aXRpb25zKSwKKyNlbmRpZgorCQkgfSwKKwkuY3RybCA9IHsKKwkJIC5jbWRfY3RybCA9IGJmaW5fcGxhdF9uYW5kX2NtZF9jdHJsLAorCQkgLmRldl9yZWFkeSA9IGJmaW5fcGxhdF9uYW5kX2Rldl9yZWFkeSwKKwkJIH0sCit9OworCisjZGVmaW5lIE1BWCh4LCB5KSAoeCA+IHkgPyB4IDogeSkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9wbGF0X25hbmRfcmVzb3VyY2VzID0geworCS5zdGFydCA9IDB4MjQwMDAwMDAsCisJLmVuZCA9IDB4MjQwMDAwMDAgKyAoMSA8PCBNQVgoQkZJTl9OQU5EX1BMQVRfQ0xFLCBCRklOX05BTkRfUExBVF9BTEUpKSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9hc3luY19uYW5kX2RldmljZSA9IHsKKwkubmFtZSA9ICJnZW5fbmFuZCIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZiZmluX3BsYXRfbmFuZF9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9wbGF0X25hbmRfZGF0YSwKKwkJfSwKK307CisKK3N0YXRpYyB2b2lkIGJmaW5fcGxhdF9uYW5kX2luaXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoQkZJTl9OQU5EX1BMQVRfUkVBRFksICJiZmluX25hbmRfcGxhdCIpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGJmaW5fcGxhdF9uYW5kX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYmZpbl9zcGlfZGF0YWZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJIC5uYW1lID0gImJvb3Rsb2FkZXIiLAorCSAuc2l6ZSA9IDB4NDIwMCwKKwkgLm9mZnNldCA9IDAsCisJIC5tYXNrX2ZsYWdzID0gTVREX0NBUF9ST019LAorCXsKKwkgLm5hbWUgPSAidS1ib290IiwKKwkgLnNpemUgPSAweDQyMDAwLAorCSAub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSB9LAorCXsKKwkgLm5hbWUgPSAidS1ib290KHBhcmFtcykiLAorCSAuc2l6ZSA9IDB4NDIwMCwKKwkgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgfSwKKwl7CisJIC5uYW1lID0gImtlcm5lbCIsCisJIC5zaXplID0gMHgyOTQwMDAsCisJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJIH0sCisJeworCSAubmFtZSA9ICJwYXJhbXMiLAorCSAuc2l6ZSA9IDB4NDIwMDAsCisJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJIH0sCisJeworCSAubmFtZSA9ICJyb290ZnMiLAorCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBiZmluX3NwaV9kYXRhZmxhc2hfZGF0YSA9IHsKKwkubmFtZSA9ICJTUEkgRGF0YWZsYXNoIiwKKwkucGFydHMgPSBiZmluX3NwaV9kYXRhZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGJmaW5fc3BpX2RhdGFmbGFzaF9wYXJ0aXRpb25zKSwKK307CisKKy8qIERhdGFGbGFzaCBjaGlwICovCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgZGF0YV9mbGFzaF9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAwLAkvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwICovCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX1NQSURFVikgfHwgZGVmaW5lZChDT05GSUdfU1BJX1NQSURFVl9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpZGV2X2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NQSV9CRklOX01PRFVMRSkKKy8qIFNQSSAoMCkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9zcGkwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCSAgICAgICAuc3RhcnQgPSBTUEkwX1JFR0JBU0UsCisJICAgICAgIC5lbmQgPSBTUEkwX1JFR0JBU0UgKyAweEZGLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkgICAgICAgfSwKKwlbMV0gPSB7CisJICAgICAgIC5zdGFydCA9IENIX1NQSSwKKwkgICAgICAgLmVuZCA9IENIX1NQSSwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJICAgICAgIH0sCisJWzJdID0geworCSAgICAgICAuc3RhcnQgPSBJUlFfU1BJLAorCSAgICAgICAuZW5kID0gSVJRX1NQSSwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJICAgICAgIH0sCit9OworCisvKiBTUEkgY29udHJvbGxlciBkYXRhICovCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX21hc3RlciBiZmluX3NwaTBfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSA4LAorCS5lbmFibGVfZG1hID0gMSwJLyogbWFzdGVyIGhhcyB0aGUgYWJpbGl0eSB0byBkbyBkbWEgdHJhbnNmZXIgKi8KKwkucGluX3JlcSA9IHtQX1NQSTBfU0NLLCBQX1NQSTBfTUlTTywgUF9TUEkwX01PU0ksIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcGkwX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXNwaSIsCisJLmlkID0gMCwJCS8qIEJ1cyBudW1iZXIgKi8KKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmZpbl9zcGkwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgPSBiZmluX3NwaTBfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9zcGkwX2luZm8sCS8qIFBhc3NlZCB0byBkcml2ZXIgKi8KKwkJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBiZmluX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWKSB8fCBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWX01PRFVMRSkKKwl7CisJIC5tb2RhbGlhcyA9ICJzcGlkZXYiLAorCSAubWF4X3NwZWVkX2h6ID0gMzEyNTAwMCwJLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCSAuYnVzX251bSA9IDAsCisJIC5jaGlwX3NlbGVjdCA9IDMsCisJIC5jb250cm9sbGVyX2RhdGEgPSAmc3BpZGV2X2NoaXBfaW5mbywKKwkgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpIHx8IGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0hfTU9EVUxFKQorCXsJCQkvKiBEYXRhRmxhc2ggY2hpcCAqLworCSAubW9kYWxpYXMgPSAibXRkX2RhdGFmbGFzaCIsCisJIC5tYXhfc3BlZWRfaHogPSAzMzI1MDAwMCwJLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCSAuYnVzX251bSA9IDAsCQkvKiBGcmFtZXdvcmsgYnVzIG51bWJlciAqLworCSAuY2hpcF9zZWxlY3QgPSAyLAkvKiBGcmFtZXdvcmsgY2hpcCBzZWxlY3QgKi8KKwkgLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9zcGlfZGF0YWZsYXNoX2RhdGEsCisJIC5jb250cm9sbGVyX2RhdGEgPSAmZGF0YV9mbGFzaF9jaGlwX2luZm8sCisJIC5tb2RlID0gU1BJX01PREVfMywKKwkgfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKKwkuc3RhcnQgPSAzMSwKKy8qICAgICAgLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwgKi8KKwkuZW5kID0gMzIsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKKwkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0geworCVZSUEFJUihWTEVWXzA4NSwgMjUwMDAwMDAwKSwKKwlWUlBBSVIoVkxFVl8wOTAsIDMwMDAwMDAwMCksCisJVlJQQUlSKFZMRVZfMDk1LCAzMTMwMDAwMDApLAorCVZSUEFJUihWTEVWXzEwMCwgMzUwMDAwMDAwKSwKKwlWUlBBSVIoVkxFVl8xMDUsIDQwMDAwMDAwMCksCisJVlJQQUlSKFZMRVZfMTEwLCA0NDQwMDAwMDApLAorCVZSUEFJUihWTEVWXzExNSwgNDUwMDAwMDAwKSwKKwlWUlBBSVIoVkxFVl8xMjAsIDQ3NTAwMDAwMCksCisJVlJQQUlSKFZMRVZfMTI1LCA1MDAwMDAwMDApLAorCVZSUEFJUihWTEVWXzEzMCwgNjAwMDAwMDAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9kcG1jX3BsYXRmb3JtX2RhdGEgYmZpbl9kbXBjX3ZyZWdfZGF0YSA9IHsKKwkudHVwbGVfdGFiID0gY2Nsa192bGV2X2RhdGFzaGVldCwKKwkudGFic2l6ZSA9IEFSUkFZX1NJWkUoY2Nsa192bGV2X2RhdGFzaGVldCksCisJLnZyX3NldHRsaW5nX3RpbWUgPSAyNSAvKiB1cyAqLyAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2RwbWMgPSB7CisJLm5hbWUgPSAiYmZpbiBkcG1jIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2RtcGNfdnJlZ19kYXRhLAorCQl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFjdmlsb25fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmJmaW5fZHBtYywKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCisJJmJmaW5fc3BpMF9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQwCisJJmJmaW5fdWFydDBfZGV2aWNlLAorI2VuZGlmCisjZW5kaWYKKworCSZiZmluX2dwaW9zX2RldmljZSwKKworI2lmIGRlZmluZWQoQ09ORklHX1NNU0M5MTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTVNDOTExWF9NT0RVTEUpCisJJnNtc2M5MTF4X2RldmljZSwKKyNlbmRpZgorCisJJmJmaW5faTJjX3BjYV9kZXZpY2UsCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STSkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUExBVEZPUk1fTU9EVUxFKQorCSZiZmluX2FzeW5jX25hbmRfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUExBVFJBTSkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU1fTU9EVUxFKQorCSZtdGRfcmFtX2RldmljZSwKKyNlbmRpZgorCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhY3ZpbG9uX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19mdW5jX18pOworCisJYmZpbl9wbGF0X25hbmRfaW5pdCgpOworCXJldCA9CisJICAgIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGFjdmlsb25fZGV2aWNlcywgQVJSQVlfU0laRShhY3ZpbG9uX2RldmljZXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGFjdmlsb25faTJjX2RldnMsCisJCQkJQVJSQVlfU0laRShhY3ZpbG9uX2kyY19kZXZzKSk7CisKKwliZmluX3dyaXRlX0ZJTzBfRkxBR19DKDEgPDwgMTQpOworCW1zbGVlcCg1KTsKKwliZmluX3dyaXRlX0ZJTzBfRkxBR19TKDEgPDwgMTQpOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChhY3ZpbG9uX2luaXQpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYWN2aWxvbl9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFKSB8fCBkZWZpbmVkKENPTkZJR19FQVJMWV9QUklOVEspCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQwCisJJmJmaW5fdWFydDBfZGV2aWNlLAorI2VuZGlmCisjZW5kaWYKK307CisKK3ZvaWQgX19pbml0IG5hdGl2ZV9tYWNoaW5lX2Vhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAicmVnaXN0ZXIgZWFybHkgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoYWN2aWxvbl9lYXJseV9kZXZpY2VzLAorCQkJCSAgIEFSUkFZX1NJWkUoYWN2aWxvbl9lYXJseV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKaW5kZXggOWUyZDhjZi4uZmZkM2U2YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYwpAQCAtNDksNyArNDksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9pc3AxNzYwX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiaXNwMTc2MC1oY2QiLAorCS5uYW1lICAgICAgICAgICA9ICJpc3AxNzYwIiwKIAkuaWQgICAgICAgICAgICAgPSAwLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJmlzcDE3NjBfcHJpdiwKQEAgLTE1OSwyOCArMTU5LDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FYODgxODApIHx8IGRlZmluZWQoQ09ORklHX0FYODgxODBfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBheDg4MTgwX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgyYzAwMDAwMCwKLQkJLmVuZAk9IDB4MmMwMDAwMDAgKyAweDgwMDAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfUEYxMCwKLQkJLmVuZAk9IElSUV9QRjEwLAotCQkuZmxhZ3MJPSAoSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCksCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF4ODgxODBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJheDg4MTgwIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF4ODgxODBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBheDg4MTgwX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC00MjEsMTAgKzM5OSw2IEBACiAJJnNtYzkxeF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FYODgxODApIHx8IGRlZmluZWQoQ09ORklHX0FYODgxODBfTU9EVUxFKQotCSZheDg4MTgwX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzIpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyX01PRFVMRSkKIAkmbmV0MjI3Ml9iZmluX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvY29yZWIuYwppbmRleCAxZTYwYTkyLi5kZWIyMjcxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvY29yZWIuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvY29yZWIuYwpAQCAtMjIsOCArMjIsOCBAQAogI2RlZmluZSBDTURfQ09SRUJfU1RPUAkJMwogI2RlZmluZSBDTURfQ09SRUJfUkVTRVQJCTQKIAotc3RhdGljIGludAotY29yZWJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcKK2NvcmViX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNDksOCArNDksOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb3JlYl9mb3BzID0gewotCS5vd25lciAgID0gVEhJU19NT0RVTEUsCi0JLmlvY3RsICAgPSBjb3JlYl9pb2N0bCwKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkudW5sb2NrZWRfaW9jdGwgPSBjb3JlYl9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBjb3JlYl9kZXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKaW5kZXggYTMxZTUwOS4uNGM4ZTM2YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaApAQCAtODg0LDY1ICs4ODQsMTEgQEAKIC8qIFN5c3RlbSBNTVIgUmVnaXN0ZXIgQml0cyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotLyogKioqKioqKioqKioqKioqKioqKioqIFBMTCBBTkQgUkVTRVQgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIFBMTF9DVEwgTWFza3MgKi8KLSNkZWZpbmUgUExMX0NMS0lOICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIFBhc3MgQ0xLSU4gdG8gUExMICovCi0jZGVmaW5lIFBMTF9DTEtJTl9ESVYyICAgICAgICAgMHgwMDAwMDAwMQkvKiBQYXNzIENMS0lOLzIgdG8gUExMICovCi0jZGVmaW5lIFBMTF9PRkYgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBTaHV0IG9mZiBQTEwgY2xvY2tzICovCi0jZGVmaW5lIFNUT1BDS19PRkYgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBDb3JlIGNsb2NrIG9mZiAqLwotI2RlZmluZSBQRFdOICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogUHV0IHRoZSBQTEwgaW4gYSBEZWVwIFNsZWVwIHN0YXRlICovCi0jZGVmaW5lIEJZUEFTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBCeXBhc3MgdGhlIFBMTCAqLwotCiAvKiBDSElQSUQgTWFza3MgKi8KICNkZWZpbmUgQ0hJUElEX1ZFUlNJT04gICAgICAgICAweEYwMDAwMDAwCiAjZGVmaW5lIENISVBJRF9GQU1JTFkgICAgICAgICAgMHgwRkZGRjAwMAogI2RlZmluZSBDSElQSURfTUFOVUZBQ1RVUkUgICAgIDB4MDAwMDBGRkUKIAotLyogVlJfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZQlGUkVRCQkJMHgwMDAzCS8qIFN3aXRjaGluZyBPc2NpbGxhdG9yIEZyZXF1ZW5jeSBGb3IgUmVndWxhdG9yCSovCi0jZGVmaW5lCUhJQkVSTkFURQkJMHgwMDAwCS8qIFBvd2VyZG93bi9CeXBhc3MgT24tQm9hcmQgUmVndWxhdGlvbgkqLwotI2RlZmluZQlGUkVRXzMzMwkJMHgwMDAxCS8qIFN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMzMzIGtIeiAqLwotI2RlZmluZQlGUkVRXzY2NwkJMHgwMDAyCS8qIFN3aXRjaGluZyBGcmVxdWVuY3kgSXMgNjY3IGtIeiAqLwotI2RlZmluZQlGUkVRXzEwMDAJCTB4MDAwMwkvKiBTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDEgTUh6ICovCi0KLSNkZWZpbmUJR0FJTgkJCTB4MDAwQwkvKiBWb2x0YWdlIExldmVsIEdhaW4JKi8KLSNkZWZpbmUJR0FJTl81CQkJMHgwMDAwCS8qIEdBSU4gPSA1Ki8KLSNkZWZpbmUJR0FJTl8xMAkJCTB4MDAwNAkvKiBHQUlOID0gMSovCi0jZGVmaW5lCUdBSU5fMjAJCQkweDAwMDgJLyogR0FJTiA9IDIqLwotI2RlZmluZQlHQUlOXzUwCQkJMHgwMDBDCS8qIEdBSU4gPSA1Ki8KLQotI2RlZmluZQlWTEVWCQkJMHgwMEYwCS8qIEludGVybmFsIFZvbHRhZ2UgTGV2ZWwgKi8KLSNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogVkxFViA9IDAuODUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLSNkZWZpbmUJVkxFVl8wOTAJCTB4MDA3MAkvKiBWTEVWID0gMC45MCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLwotI2RlZmluZQlWTEVWXzA5NQkJMHgwMDgwCS8qIFZMRVYgPSAwLjk1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCi0jZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogVkxFViA9IDEuMDAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLSNkZWZpbmUJVkxFVl8xMDUJCTB4MDBBMAkvKiBWTEVWID0gMS4wNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLwotI2RlZmluZQlWTEVWXzExMAkJMHgwMEIwCS8qIFZMRVYgPSAxLjEwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCi0jZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogVkxFViA9IDEuMTUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLSNkZWZpbmUJVkxFVl8xMjAJCTB4MDBEMAkvKiBWTEVWID0gMS4yMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KSAqLwotI2RlZmluZQlWTEVWXzEyNQkJMHgwMEUwCS8qIFZMRVYgPSAxLjI1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICovCi0jZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogVkxFViA9IDEuMzAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkgKi8KLQotI2RlZmluZQlXQUtFCQkJMHgwMTAwCS8qIEVuYWJsZSBSVEMvUmVzZXQgV2FrZXVwIEZyb20gSGliZXJuYXRlICovCi0jZGVmaW5lCVNDS0VMT1cJCQkweDgwMDAJLyogRG8gTm90IERyaXZlIFNDS0UgSGlnaCBEdXJpbmcgUmVzZXQgQWZ0ZXIgSGliZXJuYXRlICovCi0KLS8qIFBMTF9ESVYgTWFza3MgKi8KLSNkZWZpbmUgU0NMS19ESVYoeCkgICh4KQkvKiBTQ0xLID0gVkNPIC8geCAqLwotCi0jZGVmaW5lIENTRUwJCQkweDMwCQkvKiBDb3JlIFNlbGVjdCAqLwotI2RlZmluZSBTU0VMCQkJMHhmCQkvKiBTeXN0ZW0gU2VsZWN0ICovCi0jZGVmaW5lIENDTEtfRElWMSAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBDQ0xLID0gVkNPIC8gMSAqLwotI2RlZmluZSBDQ0xLX0RJVjIgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogQ0NMSyA9IFZDTyAvIDIgKi8KLSNkZWZpbmUgQ0NMS19ESVY0ICAgICAgICAgICAgICAweDAwMDAwMDIwCS8qIENDTEsgPSBWQ08gLyA0ICovCi0jZGVmaW5lIENDTEtfRElWOCAgICAgICAgICAgICAgMHgwMDAwMDAzMAkvKiBDQ0xLID0gVkNPIC8gOCAqLwotCi0vKiBQTExfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgQUNUSVZFX1BMTEVOQUJMRUQJMHgwMDAxCS8qIFByb2Nlc3NvciBJbiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBFbmFibGVkICAgICovCi0jZGVmaW5lCUZVTExfT04JCQkJMHgwMDAyCS8qIFByb2Nlc3NvciBJbiBGdWxsIE9uIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBBQ1RJVkVfUExMRElTQUJMRUQJMHgwMDA0CS8qIFByb2Nlc3NvciBJbiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBEaXNhYmxlZCAgICovCi0jZGVmaW5lCVBMTF9MT0NLRUQJCQkweDAwMjAJLyogUExMX0xPQ0tDTlQgSGFzIEJlZW4gUmVhY2hlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KIC8qIFNJQ0FfU1lTQ1IgTWFza3MgKi8KICNkZWZpbmUgQ09SRUJfU1JBTV9JTklUCQkweDAwMjAKIApAQCAtMTE1MCw1MyArMTA5Niw2IEBACiAKIC8qICoqKioqKioqKiogIERNQSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKio4ICovCiAKLS8qIERNQXhfQ09ORklHLCBNRE1BX3l5X0NPTkZJRywgSU1ETUFfeXlfQ09ORklHIE1hc2tzICovCi0jZGVmaW5lIERNQUVOCSAgICAgICAgMHgwMDAwMDAwMQkvKiBDaGFubmVsIEVuYWJsZSAqLwotI2RlZmluZSBXTlIJICAgCTB4MDAwMDAwMDIJLyogQ2hhbm5lbCBEaXJlY3Rpb24gKFcvUiopICovCi0jZGVmaW5lIFdEU0laRV84CTB4MDAwMDAwMDAJLyogV29yZCBTaXplIDggYml0cyAqLwotI2RlZmluZSBXRFNJWkVfMTYJMHgwMDAwMDAwNAkvKiBXb3JkIFNpemUgMTYgYml0cyAqLwotI2RlZmluZSBXRFNJWkVfMzIJMHgwMDAwMDAwOAkvKiBXb3JkIFNpemUgMzIgYml0cyAqLwotI2RlZmluZSBETUEyRAkgICAgICAgIDB4MDAwMDAwMTAJLyogMkQvMUQqIE1vZGUgKi8KLSNkZWZpbmUgUkVTVEFSVCAgICAgICAgIDB4MDAwMDAwMjAJLyogUmVzdGFydCAqLwotI2RlZmluZSBESV9TRUwJICAgICAgICAweDAwMDAwMDQwCS8qIERhdGEgSW50ZXJydXB0IFNlbGVjdCAqLwotI2RlZmluZSBESV9FTgkgICAgICAgIDB4MDAwMDAwODAJLyogRGF0YSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIE5EU0laRV8wCQkweDAwMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAwIChTdG9wL0F1dG9idWZmZXIpICAgKi8KLSNkZWZpbmUgTkRTSVpFXzEJCTB4MDEwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfMgkJMHgwMjAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV8zCQkweDAzMDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzQJCTB4MDQwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfNQkJMHgwNTAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV82CQkweDA2MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFXzcJCTB4MDcwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBORFNJWkVfOAkJMHgwODAwCS8qIE5leHQgRGVzY3JpcHRvciBTaXplID0gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE5EU0laRV85CQkweDA5MDAJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTkRTSVpFCSAgICAgICAgMHgwMDAwMDkwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSAqLwotI2RlZmluZSBETUFGTE9XCSAgICAgICAgMHgwMDAwNzAwMAkvKiBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUgRE1BRkxPV19TVE9QCQkweDAwMDAJLyogU3RvcCBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfQVVUTwkJMHgxMDAwCS8qIEF1dG9idWZmZXIgTW9kZSAqLwotI2RlZmluZSBETUFGTE9XX0FSUkFZCQkweDQwMDAJLyogRGVzY3JpcHRvciBBcnJheSBNb2RlICovCi0jZGVmaW5lIERNQUZMT1dfU01BTEwJCTB4NjAwMAkvKiBTbWFsbCBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZSAqLwotI2RlZmluZSBETUFGTE9XX0xBUkdFCQkweDcwMDAJLyogTGFyZ2UgTW9kZWwgRGVzY3JpcHRvciBMaXN0IE1vZGUgKi8KLQotI2RlZmluZSBETUFFTl9QCSAgICAgICAgICAgIAkwCS8qIENoYW5uZWwgRW5hYmxlICovCi0jZGVmaW5lIFdOUl9QCSAgICAgICAgICAgIAkxCS8qIENoYW5uZWwgRGlyZWN0aW9uIChXL1IqKSAqLwotI2RlZmluZSBETUEyRF9QCSAgICAgICAgCTQJLyogMkQvMUQqIE1vZGUgKi8KLSNkZWZpbmUgUkVTVEFSVF9QCSAgICAgIAk1CS8qIFJlc3RhcnQgKi8KLSNkZWZpbmUgRElfU0VMX1AJICAgICAJNgkvKiBEYXRhIEludGVycnVwdCBTZWxlY3QgKi8KLSNkZWZpbmUgRElfRU5fUAkgICAgICAgICAgICAJNwkvKiBEYXRhIEludGVycnVwdCBFbmFibGUgKi8KLQotLyogRE1BeF9JUlFfU1RBVFVTLCBNRE1BX3l5X0lSUV9TVEFUVVMsIElNRE1BX3l5X0lSUV9TVEFUVVMgTWFza3MgKi8KLQotI2RlZmluZSBETUFfRE9ORQkJMHgwMDAwMDAwMQkvKiBETUEgRG9uZSBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgRE1BX0VSUgkgICAgICAgIAkweDAwMDAwMDAyCS8qIERNQSBFcnJvciBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgREZFVENICSAgICAgICAgICAgIAkweDAwMDAwMDA0CS8qIERlc2NyaXB0b3IgRmV0Y2ggSW5kaWNhdG9yICovCi0jZGVmaW5lIERNQV9SVU4JICAgICAgICAgICAgCTB4MDAwMDAwMDgJLyogRE1BIFJ1bm5pbmcgSW5kaWNhdG9yICovCi0KLSNkZWZpbmUgRE1BX0RPTkVfUAkgICAgCTAJLyogRE1BIERvbmUgSW5kaWNhdG9yICovCi0jZGVmaW5lIERNQV9FUlJfUCAgICAgCQkxCS8qIERNQSBFcnJvciBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgREZFVENIX1AgICAgIAkJMgkvKiBEZXNjcmlwdG9yIEZldGNoIEluZGljYXRvciAqLwotI2RlZmluZSBETUFfUlVOX1AgICAgIAkJMwkvKiBETUEgUnVubmluZyBJbmRpY2F0b3IgKi8KLQogLyogRE1BeF9QRVJJUEhFUkFMX01BUCwgTURNQV95eV9QRVJJUEhFUkFMX01BUCwgSU1ETUFfeXlfUEVSSVBIRVJBTF9NQVAgTWFza3MgKi8KIAogI2RlZmluZSBDVFlQRQkgICAgICAgICAgICAweDAwMDAwMDQwCS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKaW5kZXggNTEwZjU3Ni4uMDE5MjUzMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwpAQCAtNTIsOCArNTIsNiBAQAogCiB2b2lkIF9fY3B1aW5pdCBwbGF0Zm9ybV9zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQogewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KIAkvKiBDbG9uZSBzZXR1cCBmb3IgcGVyaXBoZXJhbCBpbnRlcnJ1cHQgc291cmNlcyBmcm9tIENvcmVBLiAqLwogCWJmaW5fd3JpdGVfU0lDQl9JTUFTSzAoYmZpbl9yZWFkX1NJQ0FfSU1BU0swKCkpOwogCWJmaW5fd3JpdGVfU0lDQl9JTUFTSzEoYmZpbl9yZWFkX1NJQ0FfSU1BU0sxKCkpOwpAQCAtNzAsMTEgKzY4LDYgQEAKIAliZmluX3dyaXRlX1NJQ0JfSUFSNyhiZmluX3JlYWRfU0lDQV9JQVI3KCkpOwogCVNTWU5DKCk7CiAKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQkvKiBDYWxpYnJhdGUgbG9vcHMgcGVyIGppZmZ5IHZhbHVlLiAqLwotCWNhbGlicmF0ZV9kZWxheSgpOwotCiAJLyogU3RvcmUgQ1BVLXByaXZhdGUgaW5mb3JtYXRpb24gdG8gdGhlIGNwdV9kYXRhIGFycmF5LiAqLwogCWJmaW5fc2V0dXBfY3B1ZGF0YShjcHUpOwogCkBAIC0xMDgsOSArMTAxLDEzIEBACiAJCWJhcnJpZXIoKTsKIAl9CiAKLQlzcGluX3VubG9jaygmYm9vdF9sb2NrKTsKLQotCXJldHVybiBjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkgPyAwIDogLUVOT1NZUzsKKwlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKSB7CisJCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7CisJCS8qIHJlbGVhc2UgdGhlIGxvY2sgYW5kIGxldCBjb3JlYiBydW4gKi8KKwkJc3Bpbl91bmxvY2soJmJvb3RfbG9jayk7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlwYW5pYygiQ1BVJXU6IHByb2Nlc3NvciBmYWlsZWQgdG8gYm9vdFxuIiwgY3B1KTsKIH0KIAogdm9pZCBfX2luaXQgcGxhdGZvcm1fcmVxdWVzdF9pcGkoaXJxX2hhbmRsZXJfdCBoYW5kbGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jbG9ja3MtaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jbG9ja3MtaW5pdC5jCmluZGV4IGVmNjg3MGUuLmQ1Y2ZlNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2xvY2tzLWluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2Nsb2Nrcy1pbml0LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2Nrcy5oPgogI2luY2x1ZGUgPGFzbS9tZW1faW5pdC5oPgorI2luY2x1ZGUgPGFzbS9kcG1jLmg+CiAKICNkZWZpbmUgU0RHQ1RMX1dJRFRIICgxIDw8IDMxKQkvKiBTRFJBTSBleHRlcm5hbCBkYXRhIHBhdGggd2lkdGggKi8KICNkZWZpbmUgUExMX0NUTF9WQUwgXApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwppbmRleCAwMTUwNjUwLi43Nzc1ODI4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLQorI2luY2x1ZGUgPGFzbS9kcG1jLmg+CiAKIC8qIHRoaXMgaXMgdGhlIHRhYmxlIG9mIENDTEsgZnJlcXVlbmNpZXMsIGluIEh6ICovCiAvKiAuaW5kZXggaXMgdGhlIGVudHJ5IGluIHRoZSBhdXhpbGxhcnkgZHBtX3N0YXRlX3RhYmxlW10gKi8KQEAgLTEzOCw3ICsxMzgsOCBAQAogCQkJCQkJIGRwbV9zdGF0ZV90YWJsZVtpbmRleF0udHNjYWxlKTsKIAl9CiAKLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gKGJmaW5fcmVhZF9QTExfTE9DS0NOVCgpIC8gKHNjbGsgLyAxMDAwMDAwKSkgKiAxMDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSA1MDAwMDsgLyogNTB1cyBhc3N1bWVkICovCisKIAkvKk5vdyAsb25seSBzdXBwb3J0IG9uZSBjcHUgKi8KIAlwb2xpY3ktPmN1ciA9IGNjbGs7CiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoYmZpbl9mcmVxX3RhYmxlLCBwb2xpY3ktPmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWNfbW9kZXMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtY19tb2Rlcy5TCmluZGV4IDgwMDlhNTEuLmIwMzcxNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtY19tb2Rlcy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtY19tb2Rlcy5TCkBAIC00MDQsNiArNDA0LDIxIEBACiAJUE1fU1lTX1BVU0goRUJJVV9GQ1RMKQogI2VuZGlmCiAKKyNpZmRlZiBQT1JUQ0lPX0ZFUgorCVBNX1NZU19QVVNIMTYoUE9SVENJT19ESVIpCisJUE1fU1lTX1BVU0gxNihQT1JUQ0lPX0lORU4pCisJUE1fU1lTX1BVU0gxNihQT1JUQ0lPKQorCVBNX1NZU19QVVNIMTYoUE9SVENJT19GRVIpCisJUE1fU1lTX1BVU0gxNihQT1JURElPX0RJUikKKwlQTV9TWVNfUFVTSDE2KFBPUlRESU9fSU5FTikKKwlQTV9TWVNfUFVTSDE2KFBPUlRESU8pCisJUE1fU1lTX1BVU0gxNihQT1JURElPX0ZFUikKKwlQTV9TWVNfUFVTSDE2KFBPUlRFSU9fRElSKQorCVBNX1NZU19QVVNIMTYoUE9SVEVJT19JTkVOKQorCVBNX1NZU19QVVNIMTYoUE9SVEVJTykKKwlQTV9TWVNfUFVTSDE2KFBPUlRFSU9fRkVSKQorI2VuZGlmCisKIAlQTV9TWVNfUFVTSDE2KFNZU0NSKQogCiAJLyogU2F2ZSBDb3JlIE1NUnMgKi8KQEAgLTcxNiw2ICs3MzEsMjEgQEAKIAlQMC5MID0gbG8oUExMX0NUTCk7CiAJUE1fU1lTX1BPUDE2KFNZU0NSKQogCisjaWZkZWYgUE9SVENJT19GRVIKKwlQTV9TWVNfUE9QMTYoUE9SVEVJT19GRVIpCisJUE1fU1lTX1BPUDE2KFBPUlRFSU8pCisJUE1fU1lTX1BPUDE2KFBPUlRFSU9fSU5FTikKKwlQTV9TWVNfUE9QMTYoUE9SVEVJT19ESVIpCisJUE1fU1lTX1BPUDE2KFBPUlRESU9fRkVSKQorCVBNX1NZU19QT1AxNihQT1JURElPKQorCVBNX1NZU19QT1AxNihQT1JURElPX0lORU4pCisJUE1fU1lTX1BPUDE2KFBPUlRESU9fRElSKQorCVBNX1NZU19QT1AxNihQT1JUQ0lPX0ZFUikKKwlQTV9TWVNfUE9QMTYoUE9SVENJTykKKwlQTV9TWVNfUE9QMTYoUE9SVENJT19JTkVOKQorCVBNX1NZU19QT1AxNihQT1JUQ0lPX0RJUikKKyNlbmRpZgorCiAjaWZkZWYgRUJJVV9GQ1RMCiAJUE1fU1lTX1BPUChFQklVX0ZDVEwpCiAJUE1fU1lTX1BPUChFQklVX01PREUpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKaW5kZXggZjNmOGJiNC4uYjBlZDBiNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwpAQCAtNzEzLDYgKzcxMyw4IEBACiAJY2MgPSBCSVRUU1QocjcsIFRJRl9SRVNUT1JFX1NJR01BU0spOwogCWlmIGNjIGp1bXAgLkxzeXNjYWxsX2RvX3NpZ25hbHM7CiAJY2MgPSBCSVRUU1QocjcsIFRJRl9TSUdQRU5ESU5HKTsKKwlpZiBjYyBqdW1wIC5Mc3lzY2FsbF9kb19zaWduYWxzOworCWNjID0gQklUVFNUKHI3LCBUSUZfTk9USUZZX1JFU1VNRSk7CiAJaWYgIWNjIGp1bXAgLkxzeXNjYWxsX3JlYWxseV9leGl0OwogLkxzeXNjYWxsX2RvX3NpZ25hbHM6CiAJLyogUmVlbmFibGUgaW50ZXJydXB0cy4gICovCkBAIC03MjEsNyArNzIzLDcgQEAKIAogCXIwID0gc3A7CiAJU1AgKz0gLTEyOwotCWNhbGwgX2RvX3NpZ25hbDsKKwljYWxsIF9kb19ub3RpZnlfcmVzdW1lOwogCVNQICs9IDEyOwogCiAuTHN5c2NhbGxfcmVhbGx5X2V4aXQ6CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCmluZGV4IDY2MGVhMWIuLjE4NzNiMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCkBAIC0yNSwxMSArMjUsMjAgQEAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9pcnFfaGFuZGxlci5oPgorI2luY2x1ZGUgPGFzbS9kcG1jLmg+CisjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CisjaW5jbHVkZSA8YXNtL2JmaW5fc3BvcnQuaD4KIAogI2RlZmluZSBTSUNfU1lTSVJRKGlycSkJKGlycSAtIChJUlFfQ09SRVRNUiArIDEpKQogCiAjaWZkZWYgQkY1MzdfRkFNSUxZCiAjIGRlZmluZSBCRjUzN19HRU5FUklDX0VSUk9SX0lOVF9ERU1VWAorIyBkZWZpbmUgU1BJX0VSUl9NQVNLICAgKEJJVF9TVEFUX1RYQ09MIHwgQklUX1NUQVRfUkJTWSB8IEJJVF9TVEFUX01PREYgfCBCSVRfU1RBVF9UWEUpCS8qIFNQSV9TVEFUICovCisjIGRlZmluZSBTUE9SVF9FUlJfTUFTSyAoUk9WRiB8IFJVVkYgfCBUT1ZGIHwgVFVWRikJLyogU1BPUlRfU1RBVCAqLworIyBkZWZpbmUgUFBJX0VSUl9NQVNLICAgKDB4RkZGRiAmIH5GTEQpCS8qIFBQSV9TVEFUVVMgKi8KKyMgZGVmaW5lIEVNQUNfRVJSX01BU0sgIChQSFlJTlQgfCBNTUNJTlQgfCBSWEZTSU5UIHwgVFhGU0lOVCB8IFdBS0VERVQgfCBSWERNQUVSUiB8IFRYRE1BRVJSIHwgU1RNRE9ORSkJLyogRU1BQ19TWVNUQVQgKi8KKyMgZGVmaW5lIFVBUlRfRVJSX01BU0sgICgweDYpCS8qIFVBUlRfSUlSICovCisjIGRlZmluZSBDQU5fRVJSX01BU0sgICAoRVdUSUYgfCBFV1JJRiB8IEVQSUYgfCBCT0lGIHwgV1VJRiB8IFVJQUlGIHwgQUFJRiB8IFJNTElGIHwgVUNFSUYgfCBFWFRJRiB8IEFESUYpCS8qIENBTl9HSUYgKi8KICNlbHNlCiAjIHVuZGVmIEJGNTM3X0dFTkVSSUNfRVJST1JfSU5UX0RFTVVYCiAjZW5kaWYKQEAgLTMyNCwxMSArMzMzLDkgQEAKIAkJaXJxID0gSVJRX0NBTl9FUlJPUjsKIAllbHNlIGlmIChiZmluX3JlYWRfU1BJX1NUQVQoKSAmIFNQSV9FUlJfTUFTSykKIAkJaXJxID0gSVJRX1NQSV9FUlJPUjsKLQllbHNlIGlmICgoYmZpbl9yZWFkX1VBUlQwX0lJUigpICYgVUFSVF9FUlJfTUFTS19TVEFUMSkgJiYKLQkJIChiZmluX3JlYWRfVUFSVDBfSUlSKCkgJiBVQVJUX0VSUl9NQVNLX1NUQVQwKSkKKwllbHNlIGlmICgoYmZpbl9yZWFkX1VBUlQwX0lJUigpICYgVUFSVF9FUlJfTUFTSykgPT0gVUFSVF9FUlJfTUFTSykKIAkJaXJxID0gSVJRX1VBUlQwX0VSUk9SOwotCWVsc2UgaWYgKChiZmluX3JlYWRfVUFSVDFfSUlSKCkgJiBVQVJUX0VSUl9NQVNLX1NUQVQxKSAmJgotCQkgKGJmaW5fcmVhZF9VQVJUMV9JSVIoKSAmIFVBUlRfRVJSX01BU0tfU1RBVDApKQorCWVsc2UgaWYgKChiZmluX3JlYWRfVUFSVDFfSUlSKCkgJiBVQVJUX0VSUl9NQVNLKSA9PSBVQVJUX0VSUl9NQVNLKQogCQlpcnEgPSBJUlFfVUFSVDFfRVJST1I7CiAKIAlpZiAoaXJxKSB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwppbmRleCBkOTJiMTY4Li4zNjllNjg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKQEAgLTMzNiwxMyArMzM2LDYgQEAKIAogCXJldCA9IHBsYXRmb3JtX2Jvb3Rfc2Vjb25kYXJ5KGNwdSwgaWRsZSk7CiAKLQlpZiAocmV0KSB7Ci0JCWNwdV9jbGVhcihjcHUsIGNwdV9wcmVzZW50X21hcCk7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkNQVSV1OiBwcm9jZXNzb3IgZmFpbGVkIHRvIGJvb3QgKCVkKVxuIiwgY3B1LCByZXQpOwotCQlmcmVlX3Rhc2soaWRsZSk7Ci0JfSBlbHNlCi0JCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0KIAlzZWNvbmRhcnlfc3RhY2sgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKQEAgLTQxOCw5ICs0MTEsMTYgQEAKIAogCXNldHVwX3NlY29uZGFyeShjcHUpOwogCisJcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQoY3B1KTsKKwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCXBsYXRmb3JtX3NlY29uZGFyeV9pbml0KGNwdSk7CisJLyoKKwkgKiBDYWxpYnJhdGUgbG9vcHMgcGVyIGppZmZ5IHZhbHVlLgorCSAqIElSUXMgbmVlZCB0byBiZSBlbmFibGVkIGhlcmUgLSBELWNhY2hlIGNhbiBiZSBpbnZhbGlkYXRlZAorCSAqIGluIHRpbWVyIGlycSBoYW5kbGVyLCBzbyBjb3JlIEIgY2FuIHJlYWQgY29ycmVjdCBqaWZmaWVzLgorCSAqLworCWNhbGlicmF0ZV9kZWxheSgpOwogCiAJY3B1X2lkbGUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaGVhZC5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKaW5kZXggM2RiNDc4ZS4uNzYyNjZmOCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIFRoZSBtYWNyb3MgZm91bmQgaW4gbW11X2RlZnNfYXNtLmggdXNlcyB0aGUgIyMgY29uY2F0ZW5hdGlvbiBvcGVyYXRvciwgc28KICAqIC10cmFkaXRpb25hbCBtdXN0IG5vdCBiZSB1c2VkIHdoZW4gYXNzZW1ibGluZyB0aGlzIGZpbGUuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgogI2luY2x1ZGUgPGFyY2gvbWVtbWFwLmg+CiAjaW5jbHVkZSA8aHdyZWdzL3JlZ19yZHdyLmg+CiAjaW5jbHVkZSA8aHdyZWdzL2ludHJfdmVjdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9zcGlubG9jay5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9zcGlubG9jay5oCmluZGV4IDM2N2E1M2UuLmYxNzFhNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvc3BpbmxvY2suaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3NwaW5sb2NrLmgKQEAgLTksMTIgKzksMTIgQEAKIGV4dGVybiB2b2lkIGNyaXNfc3Bpbl9sb2NrKHZvaWQgKmwpOwogZXh0ZXJuIGludCBjcmlzX3NwaW5fdHJ5bG9jayh2b2lkICpsKTsKIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKngpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfbG9ja2VkKGFyY2hfc3BpbmxvY2tfdCAqeCkKIHsKIAlyZXR1cm4gKih2b2xhdGlsZSBzaWduZWQgY2hhciAqKSgmKHgpLT5zbG9jaykgPD0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl91bmxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZlLmQgJTEsJTAiIFwKIAkJCSAgOiAiPW0iIChsb2NrLT5zbG9jaykgXApAQCAtMjIsMjYgKzIyLDI2IEBACiAJCQkgIDogIm1lbW9yeSIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCXdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkKKwl3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZChsb2NrKSkKIAkJY3B1X3JlbGF4KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlyZXR1cm4gY3Jpc19zcGluX3RyeWxvY2soKHZvaWQgKikmbG9jay0+c2xvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAljcmlzX3NwaW5fbG9jaygodm9pZCAqKSZsb2NrLT5zbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorYXJjaF9zcGluX2xvY2tfZmxhZ3MoYXJjaF9zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCV9fcmF3X3NwaW5fbG9jayhsb2NrKTsKKwlhcmNoX3NwaW5fbG9jayhsb2NrKTsKIH0KIAogLyoKQEAgLTU2LDc2ICs1Niw3NiBAQAogICoKICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJhd19yd2xvY2tfdCAqeCkKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF9jYW5fbG9jayhhcmNoX3J3bG9ja190ICp4KQogewogCXJldHVybiAoaW50KSh4KS0+bG9jayA+IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJhd19yd2xvY2tfdCAqeCkKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfd3JpdGVfY2FuX2xvY2soYXJjaF9yd2xvY2tfdCAqeCkKIHsKIAlyZXR1cm4gKHgpLT5sb2NrID09IFJXX0xPQ0tfQklBUzsKIH0KIAotc3RhdGljICBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyAgaW5saW5lIHZvaWQgYXJjaF9yZWFkX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JX19yYXdfc3Bpbl9sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZydy0+c2xvY2spOwogCXdoaWxlIChydy0+bG9jayA9PSAwKTsKIAlydy0+bG9jay0tOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnJ3LT5zbG9jayk7CiB9CiAKLXN0YXRpYyAgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljICBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JX19yYXdfc3Bpbl9sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZydy0+c2xvY2spOwogCXdoaWxlIChydy0+bG9jayAhPSBSV19MT0NLX0JJQVMpOwogCXJ3LT5sb2NrID0gMDsKLQlfX3Jhd19zcGluX3VubG9jaygmcnctPnNsb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZydy0+c2xvY2spOwogfQogCi1zdGF0aWMgIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JX19yYXdfc3Bpbl9sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZydy0+c2xvY2spOwogCXJ3LT5sb2NrKys7Ci0JX19yYXdfc3Bpbl91bmxvY2soJnJ3LT5zbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmcnctPnNsb2NrKTsKIH0KIAotc3RhdGljICBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyAgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JX19yYXdfc3Bpbl9sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZydy0+c2xvY2spOwogCXdoaWxlIChydy0+bG9jayAhPSBSV19MT0NLX0JJQVMpOwogCXJ3LT5sb2NrID0gUldfTE9DS19CSUFTOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnJ3LT5zbG9jayk7CiB9CiAKLXN0YXRpYyAgaW5saW5lIGludCBfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyAgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlpbnQgcmV0ID0gMDsKLQlfX3Jhd19zcGluX2xvY2soJnJ3LT5zbG9jayk7CisJYXJjaF9zcGluX2xvY2soJnJ3LT5zbG9jayk7CiAJaWYgKHJ3LT5sb2NrICE9IDApIHsKIAkJcnctPmxvY2stLTsKIAkJcmV0ID0gMTsKIAl9Ci0JX19yYXdfc3Bpbl91bmxvY2soJnJ3LT5zbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmcnctPnNsb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljICBpbmxpbmUgaW50IGFyY2hfd3JpdGVfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlpbnQgcmV0ID0gMDsKLQlfX3Jhd19zcGluX2xvY2soJnJ3LT5zbG9jayk7CisJYXJjaF9zcGluX2xvY2soJnJ3LT5zbG9jayk7CiAJaWYgKHJ3LT5sb2NrID09IFJXX0xPQ0tfQklBUykgewogCQlydy0+bG9jayA9IDA7CiAJCXJldCA9IDE7CiAJfQotCV9fcmF3X3NwaW5fdW5sb2NrKCZydy0+c2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnJ3LT5zbG9jayk7CiAJcmV0dXJuIDE7CiB9CiAKICNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfcmVhZF9sb2NrKGxvY2spCiAjZGVmaW5lIF9yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd193cml0ZV9sb2NrKGxvY2spCiAKLSNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF93cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMGY1MWIxMC4uOGEzZDhlMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNjQsOCArNjQsNiBAQAogI2RlZmluZSBFRl9DUklTX1ZBUklBTlRfQ09NTU9OX1YxMF9WMzIJMHgwMDAwMDAwNAogLyogRW5kIG9mIGV4Y2VycHQgZnJvbSB7YmludXRpbHN9L2luY2x1ZGUvZWxmL2NyaXMuaC4gICovCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLQogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk4MTkyCiAKIC8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2NyaXMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZGRkNmZiYi4uZGQ3YjhlOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CiAKIC8qCiAgKiBHZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDBjYTdkOTguLmI1Y2UwNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtNTIsNyArNTIsNyBAQAogCX0KIAogCWlmIChpIDwgTlJfSVJRUykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwogCQlpZiAoIWFjdGlvbikKIAkJCWdvdG8gc2tpcDsKQEAgLTcxLDcgKzcxLDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYmJmZGE2Ny4uZDQ5ZDE3ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTgsNyArOCw2IEBACiAgKiB0aGUga2VybmVsIGhhcyBib290ZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcwZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDdiYmY2ZTQuLmMzODE5ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMTUsNyArMTE1LDYgQEAKIAlfX2tlcm5lbF9mcmFtZTBfcHRyLT5ncjI5CT0gMDsJCQkJCQlcCiB9IHdoaWxlKDApCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKICNkZWZpbmUgRUxGX0ZEUElDX0NPUkVfRUZMQUdTCUVGX0ZSVl9GRFBJQwogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQkxNjM4NApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCmluZGV4IGFmM2U4MjQuLjYyZDFhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl9CiAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKGFjdGlvbikgewogCQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKQEAgLTg1LDcgKzg1LDcgQEAKIAkJCXNlcV9wdXRjKHAsICdcbicpOwogCQl9CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CiAJCXNlcV9wcmludGYocCwgIkVycjogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDU1ZTRmYWIuLjc1Y2Y3ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL0tjb25maWcgYi9hcmNoL2g4MzAwL0tjb25maWcKaW5kZXggOTQyMDY0OC4uNTNjYzY2OSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnCisrKyBiL2FyY2gvaDgzMDAvS2NvbmZpZwpAQCAtMTAsNiArMTAsMTAgQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgSEFWRV9JREUKIAorY29uZmlnIFNZTUJPTF9QUkVGSVgKKwlzdHJpbmcKKwlkZWZhdWx0ICJfIgorCiBjb25maWcgTU1VCiAJYm9vbAogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGdlbmVyYXRlZC9hc20tb2Zmc2V0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggOTRlMjI4NC4uYzI0ZmEyNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0zNCw3ICszNCw2IEBACiAKICNkZWZpbmUgRUxGX1BMQVRfSU5JVChfcikJX3ItPmVyMSA9IDAKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKIC8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCBkZTIzMjMxLi44ZTQ2NzI0IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTgsNiArOCw0IEBACiAjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCiAjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKIAotI2RlZmluZSBNT0RVTEVfU1lNQk9MX1BSRUZJWCAiXyIKLQogI2VuZGlmIC8qIF9BU01fSDgvMzAwX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYyBiL2FyY2gvaDgzMDAva2VybmVsL2lycS5jCmluZGV4IDVjOTEzZDQuLmMyNWRjMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL2lycS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgQ1BVMCIpOwogCiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CiAJCWlmICghYWN0aW9uKQogCQkJZ290byB1bmxvY2s7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHVubG9jazoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGI5ZTI0OTA3Li4wM2QzNTZkIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsNCArMSwzIEBACi0jZGVmaW5lIFZNTElOVVhfU1lNQk9MKF9zeW1fKSBfIyNfc3ltXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCAxZWU1OTZjLi4yZDdmNTZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtODcsOSArODcsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEhBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQQotCWRlZl9ib29sIHkKLQogY29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvTWFrZWZpbGUgYi9hcmNoL2lhNjQvTWFrZWZpbGUKaW5kZXggZTdjYmFhMC4uNDc1ZTI3MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9NYWtlZmlsZQpAQCAtMTAzLDQgKzEwMyw0IEBACiBQSE9OWSArPSBtYWtlX25yX2lycXNfaCBGT1JDRQogCiBtYWtlX25yX2lycXNfaDogRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2lhNjQva2VybmVsIGluY2x1ZGUvYXNtLWlhNjQvbnItaXJxcy5oCisJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9pYTY0L2tlcm5lbCBpbmNsdWRlL2dlbmVyYXRlZC9uci1pcnFzLmgKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IGYzMzJlM2YuLmUxNGM0OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtNjc3LDEyICs2NzcsMTkgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2F2ZWRfbG9jaywgZmxhZ3MpOwogCiAJCQlwaWRlID0gc2JhX3NlYXJjaF9iaXRtYXAoaW9jLCBkZXYsIHBhZ2VzX25lZWRlZCwgMCk7Ci0JCQlpZiAodW5saWtlbHkocGlkZSA+PSAoaW9jLT5yZXNfc2l6ZSA8PCAzKSkpCi0JCQkJcGFuaWMoX19GSUxFX18gIjogSS9PIE1NVSBAICVwIGlzIG91dCBvZiBtYXBwaW5nIHJlc291cmNlc1xuIiwKLQkJCQkgICAgICBpb2MtPmlvY19ocGEpOworCQkJaWYgKHVubGlrZWx5KHBpZGUgPj0gKGlvYy0+cmVzX3NpemUgPDwgMykpKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEkvTyBNTVUgQCAlcCBpcyIKKwkJCQkgICAgICAgIm91dCBvZiBtYXBwaW5nIHJlc291cmNlcywgJXUgJXUgJWx4XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgaW9jLT5pb2NfaHBhLCBpb2MtPnJlc19zaXplLAorCQkJCSAgICAgICBwYWdlc19uZWVkZWQsIGRtYV9nZXRfc2VnX2JvdW5kYXJ5KGRldikpOworCQkJCXJldHVybiAtMTsKKwkJCX0KICNlbHNlCi0JCQlwYW5pYyhfX0ZJTEVfXyAiOiBJL08gTU1VIEAgJXAgaXMgb3V0IG9mIG1hcHBpbmcgcmVzb3VyY2VzXG4iLAotCQkJICAgICAgaW9jLT5pb2NfaHBhKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJL08gTU1VIEAgJXAgaXMiCisJCQkgICAgICAgIm91dCBvZiBtYXBwaW5nIHJlc291cmNlcywgJXUgJXUgJWx4XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpb2MtPmlvY19ocGEsIGlvYy0+cmVzX3NpemUsCisJCQkgICAgICAgcGFnZXNfbmVlZGVkLCBkbWFfZ2V0X3NlZ19ib3VuZGFyeShkZXYpKTsKKwkJCXJldHVybiAtMTsKICNlbmRpZgogCQl9CiAJfQpAQCAtOTY1LDYgKzk3Miw4IEBACiAjZW5kaWYKIAogCXBpZGUgPSBzYmFfYWxsb2NfcmFuZ2UoaW9jLCBkZXYsIHNpemUpOworCWlmIChwaWRlIDwgMCkKKwkJcmV0dXJuIDA7CiAKIAlpb3ZwID0gKGRtYV9hZGRyX3QpIHBpZGUgPDwgaW92cF9zaGlmdDsKIApAQCAtMTMyMCw2ICsxMzI5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGRtYV9vZmZzZXQsIGRtYV9sZW47IC8qIHN0YXJ0L2xlbiBvZiBETUEgc3RyZWFtICovCiAJaW50IG5fbWFwcGluZ3MgPSAwOwogCXVuc2lnbmVkIGludCBtYXhfc2VnX3NpemUgPSBkbWFfZ2V0X21heF9zZWdfc2l6ZShkZXYpOworCWludCBpZHg7CiAKIAl3aGlsZSAobmVudHMgPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykgc2JhX3NnX2FkZHJlc3Moc3RhcnRzZyk7CkBAIC0xNDE4LDE2ICsxNDI4LDIyIEBACiAJCXZjb250aWdfc2ctPmRtYV9sZW5ndGggPSB2Y29udGlnX2xlbjsKIAkJZG1hX2xlbiA9IChkbWFfbGVuICsgZG1hX29mZnNldCArIH5pb3ZwX21hc2spICYgaW92cF9tYXNrOwogCQlBU1NFUlQoZG1hX2xlbiA8PSBETUFfQ0hVTktfU0laRSk7Ci0JCWRtYV9zZy0+ZG1hX2FkZHJlc3MgPSAoZG1hX2FkZHJfdCkgKFBJREVfRkxBRwotCQkJfCAoc2JhX2FsbG9jX3JhbmdlKGlvYywgZGV2LCBkbWFfbGVuKSA8PCBpb3ZwX3NoaWZ0KQotCQkJfCBkbWFfb2Zmc2V0KTsKKwkJaWR4ID0gc2JhX2FsbG9jX3JhbmdlKGlvYywgZGV2LCBkbWFfbGVuKTsKKwkJaWYgKGlkeCA8IDApIHsKKwkJCWRtYV9zZy0+ZG1hX2xlbmd0aCA9IDA7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZG1hX3NnLT5kbWFfYWRkcmVzcyA9IChkbWFfYWRkcl90KShQSURFX0ZMQUcgfCAoaWR4IDw8IGlvdnBfc2hpZnQpCisJCQkJCQkgICB8IGRtYV9vZmZzZXQpOwogCQluX21hcHBpbmdzKys7CiAJfQogCiAJcmV0dXJuIG5fbWFwcGluZ3M7CiB9CiAKLQorc3RhdGljIHZvaWQgc2JhX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwogLyoqCiAgKiBzYmFfbWFwX3NnIC0gbWFwIFNjYXR0ZXIvR2F0aGVyIGxpc3QKICAqIEBkZXY6IGluc3RhbmNlIG9mIFBDSSBvd25lZCBieSB0aGUgZHJpdmVyIHRoYXQncyBhc2tpbmcuCkBAIC0xNDkzLDYgKzE1MDksMTAgQEAKIAkqKiBBY2Nlc3MgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBpcyB3aGF0IGZvcmNlcyBhIHR3byBwYXNzIGFsZ29yaXRobS4KIAkqLwogCWNvYWxlc2NlZCA9IHNiYV9jb2FsZXNjZV9jaHVua3MoaW9jLCBkZXYsIHNnbGlzdCwgbmVudHMpOworCWlmIChjb2FsZXNjZWQgPCAwKSB7CisJCXNiYV91bm1hcF9zZ19hdHRycyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpciwgYXR0cnMpOworCQlyZXR1cm4gMDsKKwl9CiAKIAkvKgogCSoqIFByb2dyYW0gdGhlIEkvTyBQZGlyCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9lbGZjb3JlMzIuaCBiL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oCmluZGV4IDlhM2FiZjU4Li42NTc3MjU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9lbGZjb3JlMzIuaAorKysgYi9hcmNoL2lhNjQvaWEzMi9lbGZjb3JlMzIuaApAQCAtMTEsOCArMTEsNiBAQAogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUCAxCi0KIC8qIE92ZXJyaWRlIGVsZmNvcmUuaCAqLwogI2RlZmluZSBfTElOVVhfRUxGQ09SRV9IIDEKIHR5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9ncmVnX3Q7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggNTdhMjc4Ny4uNmViYzIyOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTI3LDcgKzEyNyw3IEBACiAgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCiAgKgogICogU2ltaWxhcmx5IHRvIGNsZWFyX2JpdF91bmxvY2ssIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgc3RvcmUKLSAqIHdpdGggcmVsZWFzZSBzZW1hbnRpY3MuIFNlZSBhbHNvIF9fcmF3X3NwaW5fdW5sb2NrKCkuCisgKiB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzLiBTZWUgYWxzbyBhcmNoX3NwaW5fdW5sb2NrKCkuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKIF9fY2xlYXJfYml0X3VubG9jayhpbnQgbnIsIHZvaWQgKmFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDhkM2M3OWMuLjdkMDlhMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC03Myw3ICs3Myw3IEBACiAJaWYgKCFkZXYtPmRtYV9tYXNrKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBhZGRyICsgc2l6ZSA8PSAqZGV2LT5kbWFfbWFzazsKKwlyZXR1cm4gYWRkciArIHNpemUgLSAxIDw9ICpkZXYtPmRtYV9tYXNrOwogfQogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGh5c190b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA4NmVkZGVlLi5lMTQxMDhiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yNSw3ICsyNSw2IEBACiAjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTFNCCiAjZGVmaW5lIEVMRl9BUkNICUVNX0lBXzY0CiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKIAogLyogTGVhc3Qtc2lnbmlmaWNhbnQgZm91ciBiaXRzIG9mIEVMRiBoZWFkZXIncyBlX2ZsYWdzIGFyZSBPUy1zcGVjaWZpYy4gIFRoZSBiaXRzIGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IDkxNjE5YjMuLmJmMmUzNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTU5LDcgKzU5LDEzIEBACiBleHRlcm4gaW50IGlhNjRfZmlyc3RfZGV2aWNlX3ZlY3RvcjsKIGV4dGVybiBpbnQgaWE2NF9sYXN0X2RldmljZV92ZWN0b3I7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIChkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpIHx8IGRlZmluZWQgKENPTkZJR19JQTY0X0RJRykpCisvKiBSZXNlcnZlIHRoZSBsb3dlciBwcmlvcml0eSB2ZWN0b3IgdGhhbiBkZXZpY2UgdmVjdG9ycyBmb3IgIm1vdmUgSVJRIiBJUEkgKi8KKyNkZWZpbmUgSUE2NF9JUlFfTU9WRV9WRUNUT1IJCTB4MzAJLyogIm1vdmUgSVJRIiBJUEkgKi8KKyNkZWZpbmUgSUE2NF9ERUZfRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMxCisjZWxzZQogI2RlZmluZSBJQTY0X0RFRl9GSVJTVF9ERVZJQ0VfVkVDVE9SCTB4MzAKKyNlbmRpZgogI2RlZmluZSBJQTY0X0RFRl9MQVNUX0RFVklDRV9WRUNUT1IJMHhlNwogI2RlZmluZSBJQTY0X0ZJUlNUX0RFVklDRV9WRUNUT1IJaWE2NF9maXJzdF9kZXZpY2VfdmVjdG9yCiAjZGVmaW5lIElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SCQlpYTY0X2xhc3RfZGV2aWNlX3ZlY3RvcgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaAppbmRleCAwZDlkMTZlLi5jYzgzMzVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW8uaApAQCAtNDI0LDYgKzQyNCw4IEBACiBleHRlcm4gdm9pZCBfX2lvbWVtICogaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKiBpb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgaW91bm1hcCAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKiBlYXJseV9pb3JlbWFwICh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIGVhcmx5X2lvdW5tYXAgKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAogLyoKICAqIFN0cmluZyB2ZXJzaW9uIG9mIElPIG1lbW9yeSBhY2Nlc3Mgb3BzOgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDUyODI1NDYuLjkxYjkyMGZkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lycS5oCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20taWE2NC9uci1pcnFzLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL25yLWlycXMuaD4KIAogc3RhdGljIF9faW5saW5lX18gaW50CiBpcnFfY2Fub25pY2FsaXplIChpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21jYS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21jYS5oCmluZGV4IGMxNzFjZGYuLjQzZjk2YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tY2EuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWNhLmgKQEAgLTEwNiw2ICsxMDYsMTEgQEAKIAl1bnNpZ25lZCBsb25nCQlvc19zdGF0dXM7CQkvKiBPUyBzdGF0dXMgdG8gU0FMLCBlbnVtIGJlbG93ICovCiAJdW5zaWduZWQgbG9uZwkJY29udGV4dDsJCS8qIDAgaWYgcmV0dXJuIHRvIHNhbWUgY29udGV4dAogCQkJCQkJCSAgIDEgaWYgcmV0dXJuIHRvIG5ldyBjb250ZXh0ICovCisKKwkvKiBJLXJlc291cmNlcyAqLworCXVuc2lnbmVkIGxvbmcJCWlpcDsKKwl1bnNpZ25lZCBsb25nCQlpcHNyOworCXVuc2lnbmVkIGxvbmcJCWlmczsKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21lbWluaXQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tZW1pbml0LmgKaW5kZXggNjg4YTgxMi4uNjFjN2IxNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21lbWluaXQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWVtaW5pdC5oCkBAIC02MSw3ICs2MSw3IEBACiAKICNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCiAjIGRlZmluZSBMQVJHRV9HQVAJMHg0MDAwMDAwMCAvKiBVc2UgdmlydHVhbCBtZW0gbWFwIGlmIGhvbGUgaXMgPiB0aGFuIHRoaXMgKi8KLSAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7CisgIGV4dGVybiB1bnNpZ25lZCBsb25nIFZNQUxMT0NfRU5EOwogICBleHRlcm4gc3RydWN0IHBhZ2UgKnZtZW1fbWFwOwogICBleHRlcm4gaW50IGZpbmRfbGFyZ2VzdF9ob2xlKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKTsKICAgZXh0ZXJuIGludCBjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9udW1hLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbnVtYS5oCmluZGV4IDM0OTlmZjUuLjZhOGEyN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9udW1hLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL251bWEuaApAQCAtMjIsOCArMjIsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCi0jZGVmaW5lIE5VTUFfTk9fTk9ERQktMQotCiBleHRlcm4gdTE2IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogZXh0ZXJuIGNwdW1hc2tfdCBub2RlX3RvX2NwdV9tYXNrW01BWF9OVU1OT0RFU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKIGV4dGVybiBwZ19kYXRhX3QgKnBnZGF0X2xpc3RbTUFYX05VTU5PREVTXTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg4NDBhNjkuLjY5YmYxMzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjI4LDggKzIyOCw3IEBACiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCShSR05fQkFTRShSR05fR0FURSkgKyAweDIwMDAwMDAwMFVMKQogI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKICMgZGVmaW5lIFZNQUxMT0NfRU5EX0lOSVQJKFJHTl9CQVNFKFJHTl9HQVRFKSArICgxVUwgPDwgKDQqUEFHRV9TSElGVCAtIDkpKSkKLSMgZGVmaW5lIFZNQUxMT0NfRU5ECQl2bWFsbG9jX2VuZAotICBleHRlcm4gdW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIFZNQUxMT0NfRU5EOwogI2Vsc2UKICNpZiBkZWZpbmVkKENPTkZJR19TUEFSU0VNRU0pICYmIGRlZmluZWQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKQogLyogU1BBUlNFTUVNX1ZNRU1NQVAgdXNlcyBoYWxmIG9mIHZtYWxsb2MuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAzZWFlZWRmMS4uN2ZhOTBmNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjI5LDcgKzIyOSw3IEBACiAjZW5kaWYKIH07CiAKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY3B1aW5mb19pYTY0LCBjcHVfaW5mbyk7CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNwdWluZm9faWE2NCwgaWE2NF9jcHVfaW5mbyk7CiAKIC8qCiAgKiBUaGUgImxvY2FsIiBkYXRhIHZhcmlhYmxlLiAgSXQgcmVmZXJzIHRvIHRoZSBwZXItQ1BVIGRhdGEgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcKQEAgLTIzNyw4ICsyMzcsOCBAQAogICogRG8gbm90IHVzZSB0aGUgYWRkcmVzcyBvZiBsb2NhbF9jcHVfZGF0YSwgc2luY2UgaXQgd2lsbCBiZSBkaWZmZXJlbnQgZnJvbQogICogY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKSEKICAqLwotI2RlZmluZSBsb2NhbF9jcHVfZGF0YQkJKCZfX2lhNjRfcGVyX2NwdV92YXIoY3B1X2luZm8pKQotI2RlZmluZSBjcHVfZGF0YShjcHUpCQkoJnBlcl9jcHUoY3B1X2luZm8sIGNwdSkpCisjZGVmaW5lIGxvY2FsX2NwdV9kYXRhCQkoJl9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X2NwdV9pbmZvKSkKKyNkZWZpbmUgY3B1X2RhdGEoY3B1KQkJKCZwZXJfY3B1KGlhNjRfY3B1X2luZm8sIGNwdSkpCiAKIGV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvIChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9yd3NlbS5oCmluZGV4IGZiZWU3NGIuLmU4NzYyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9yd3NlbS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCiAKICNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCi0JeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCisJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgX19TUElOX0xPQ0tfVU5MT0NLRUQoKG5hbWUpLndhaXRfbG9jayksIFwKIAkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIH0KIAogI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMjM5ZWNkYy4uMWE5MWM5MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfaW5pdCh4KQkJCSgoeCktPmxvY2sgPSAwKQorI2RlZmluZSBhcmNoX3NwaW5fbG9ja19pbml0KHgpCQkJKCh4KS0+bG9jayA9IDApCiAKIC8qCiAgKiBUaWNrZXQgbG9ja3MgYXJlIGNvbmNlcHR1YWxseSB0d28gcGFydHMsIG9uZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGhlYWQgb2YKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgVElDS0VUX0JJVFMJMTUKICNkZWZpbmUJVElDS0VUX01BU0sJKCgxIDw8IFRJQ0tFVF9CSVRTKSAtIDEpCiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldCwgc2VydmU7CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCkBAIC02Nyw3ICs2Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgc2hvcnQJKnAgPSAodW5zaWduZWQgc2hvcnQgKikmbG9jay0+bG9jayArIDEsIHRtcDsKIApAQCAtNzUsNyArNzUsNyBAQAogCUFDQ0VTU19PTkNFKCpwKSA9ICh0bXAgKyAyKSAmIH4xOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldDsKIApAQCAtODksNjQgKzg5LDY0IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCiAJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCiAJcmV0dXJuICgodG1wIC0gKHRtcCA+PiBUSUNLRVRfU0hJRlQpKSAmIFRJQ0tFVF9NQVNLKSA+IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKGxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19jb250ZW5kZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChsb2NrKTsKIH0KLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQJX19yYXdfc3Bpbl9pc19jb250ZW5kZWQKKyNkZWZpbmUgYXJjaF9zcGluX2lzX2NvbnRlbmRlZAlhcmNoX3NwaW5faXNfY29udGVuZGVkCiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9ja19mbGFncyhhcmNoX3NwaW5sb2NrX3QgKmxvY2ssCiAJCQkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JX19yYXdfc3Bpbl9sb2NrKGxvY2spOworCWFyY2hfc3Bpbl9sb2NrKGxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCV9fdGlja2V0X3NwaW5fdW5sb2NrX3dhaXQobG9jayk7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKLSNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKKyNkZWZpbmUgYXJjaF9yZWFkX2Nhbl9sb2NrKHJ3KQkJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA+PSAwKQorI2RlZmluZSBhcmNoX3dyaXRlX2Nhbl9sb2NrKHJ3KQkoKih2b2xhdGlsZSBpbnQgKikocncpID09IDApCiAKICNpZmRlZiBBU01fU1VQUE9SVEVECiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAotX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHJhd19yd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK2FyY2hfcmVhZF9sb2NrX2ZsYWdzKGFyY2hfcndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkidGJpdC5ueiBwNiwgcDAgPSAlMSwlMlxuIgpAQCAtMTY5LDE1ICsxNjksMTUgQEAKIAkJOiAicDYiLCAicDciLCAicjIiLCAibWVtb3J5Iik7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrKGxvY2spIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCAwKQorI2RlZmluZSBhcmNoX3JlYWRfbG9jayhsb2NrKSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCAwKQogCiAjZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwogCi0jZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhydywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhydykKKyNkZWZpbmUgYXJjaF9yZWFkX2xvY2tfZmxhZ3MocncsIGZsYWdzKSBhcmNoX3JlYWRfbG9jayhydykKIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socncpCQkJCQkJCQlcCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrKHJ3KQkJCQkJCQkJXAogZG8gewkJCQkJCQkJCQkJXAotCXJhd19yd2xvY2tfdCAqX19yZWFkX2xvY2tfcHRyID0gKHJ3KTsJCQkJCQlcCisJYXJjaF9yd2xvY2tfdCAqX19yZWFkX2xvY2tfcHRyID0gKHJ3KTsJCQkJCQlcCiAJCQkJCQkJCQkJCVwKIAl3aGlsZSAodW5saWtlbHkoaWE2NF9mZXRjaGFkZCgxLCAoaW50ICopIF9fcmVhZF9sb2NrX3B0ciwgYWNxKSA8IDApKSB7CQlcCiAJCWlhNjRfZmV0Y2hhZGQoLTEsIChpbnQgKikgX19yZWFkX2xvY2tfcHRyLCByZWwpOwkJCVwKQEAgLTE4OCwxNiArMTg4LDE2IEBACiAKICNlbmRpZiAvKiAhQVNNX1NVUFBPUlRFRCAqLwogCi0jZGVmaW5lIF9fcmF3X3JlYWRfdW5sb2NrKHJ3KQkJCQkJXAorI2RlZmluZSBhcmNoX3JlYWRfdW5sb2NrKHJ3KQkJCQkJXAogZG8gewkJCQkJCQkJXAotCXJhd19yd2xvY2tfdCAqX19yZWFkX2xvY2tfcHRyID0gKHJ3KTsJCQlcCisJYXJjaF9yd2xvY2tfdCAqX19yZWFkX2xvY2tfcHRyID0gKHJ3KTsJCQlcCiAJaWE2NF9mZXRjaGFkZCgtMSwgKGludCAqKSBfX3JlYWRfbG9ja19wdHIsIHJlbCk7CVwKIH0gd2hpbGUgKDApCiAKICNpZmRlZiBBU01fU1VQUE9SVEVECiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAotX19yYXdfd3JpdGVfbG9ja19mbGFncyhyYXdfcndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCithcmNoX3dyaXRlX2xvY2tfZmxhZ3MoYXJjaF9yd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSJ0Yml0Lm56IHA2LCBwMCA9ICUxLCAlMlxuIgpAQCAtMjIxLDkgKzIyMSw5IEBACiAJCTogImFyLmNjdiIsICJwNiIsICJwNyIsICJyMiIsICJyMjkiLCAibWVtb3J5Iik7CiB9CiAKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9jayhydykgX19yYXdfd3JpdGVfbG9ja19mbGFncyhydywgMCkKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrKHJ3KSBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MocncsIDApCiAKLSNkZWZpbmUgX19yYXdfd3JpdGVfdHJ5bG9jayhydykJCQkJCQkJXAorI2RlZmluZSBhcmNoX3dyaXRlX3RyeWxvY2socncpCQkJCQkJCVwKICh7CQkJCQkJCQkJCVwKIAlyZWdpc3RlciBsb25nIHJlc3VsdDsJCQkJCQkJXAogCQkJCQkJCQkJCVwKQEAgLTIzNSw3ICsyMzUsNyBAQAogCShyZXN1bHQgPT0gMCk7CQkJCQkJCQlcCiB9KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICp4KQogewogCXU4ICp5ID0gKHU4ICopeDsKIAliYXJyaWVyKCk7CkBAIC0yNDQsOSArMjQ0LDkgQEAKIAogI2Vsc2UgLyogIUFTTV9TVVBQT1JURUQgKi8KIAotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGwsIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGwpCisjZGVmaW5lIGFyY2hfd3JpdGVfbG9ja19mbGFncyhsLCBmbGFncykgYXJjaF93cml0ZV9sb2NrKGwpCiAKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9jayhsKQkJCQkJCQkJXAorI2RlZmluZSBhcmNoX3dyaXRlX2xvY2sobCkJCQkJCQkJCVwKICh7CQkJCQkJCQkJCQlcCiAJX191NjQgaWE2NF92YWwsIGlhNjRfc2V0X3ZhbCA9IGlhNjRfZGVwX21pKC0xLCAwLCAzMSwgMSk7CQkJXAogCV9fdTMyICppYTY0X3dyaXRlX2xvY2tfcHRyID0gKF9fdTMyICopIChsKTsJCQkJCVwKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCX0gd2hpbGUgKGlhNjRfdmFsKTsJCQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgX19yYXdfd3JpdGVfdHJ5bG9jayhydykJCQkJCQlcCisjZGVmaW5lIGFyY2hfd3JpdGVfdHJ5bG9jayhydykJCQkJCQlcCiAoewkJCQkJCQkJCVwKIAlfX3U2NCBpYTY0X3ZhbDsJCQkJCQkJXAogCV9fdTY0IGlhNjRfc2V0X3ZhbCA9IGlhNjRfZGVwX21pKC0xLCAwLCAzMSwxKTsJCQlcCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkoaWE2NF92YWwgPT0gMCk7CQkJCQkJXAogfSkKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKngpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqeCkKIHsKIAliYXJyaWVyKCk7CiAJeC0+d3JpdGVfbG9jayA9IDA7CkBAIC0yNzMsMTAgKzI3MywxMCBAQAogCiAjZW5kaWYgLyogIUFTTV9TVVBQT1JURUQgKi8KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqeCkKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKngpCiB7CiAJdW5pb24gewotCQlyYXdfcndsb2NrX3QgbG9jazsKKwkJYXJjaF9yd2xvY2tfdCBsb2NrOwogCQlfX3UzMiB3b3JkOwogCX0gb2xkLCBuZXc7CiAJb2xkLmxvY2sgPSBuZXcubG9jayA9ICp4OwpAQCAtMjg1LDggKzI4NSw4IEBACiAJcmV0dXJuICh1MzIpaWE2NF9jbXB4Y2hnNF9hY3EoKF9fdTMyICopKHgpLCBuZXcud29yZCwgb2xkLndvcmQpID09IG9sZC53b3JkOwogfQogCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qICBfQVNNX0lBNjRfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCA0NzRlNDZmLi5lMmI0MmE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNywxNSArNywxNSBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Ci19IHJhd19zcGlubG9ja190OworfSBhcmNoX3NwaW5sb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CisjZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCByZWFkX2NvdW50ZXIJOiAzMTsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd3JpdGVfbG9jawk6ICAxOwotfSByYXdfcndsb2NrX3Q7Cit9IGFyY2hfcndsb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwLCAwIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgMCwgMCB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNmI3ZWRjYS4uMmE3NWU5MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC04MSwxNyArODEsMTQgQEAKIGVuZGVmCiAKICMgV2UgdXNlIGludGVybmFsIGtidWlsZCBydWxlcyB0byBhdm9pZCB0aGUgImlzIHVwIHRvIGRhdGUiIG1lc3NhZ2UgZnJvbSBtYWtlCi1hcmNoLyQoU1JDQVJDSCkva2VybmVsL25yLWlycXMuczogJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkva2VybmVsL25yLWlycXMuYyBcCi0JCQkJJCh3aWxkY2FyZCAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLWlhNjQvKi9pcnEuaCkKK2FyY2gvJChTUkNBUkNIKS9rZXJuZWwvbnItaXJxcy5zOiBhcmNoLyQoU1JDQVJDSCkva2VybmVsL25yLWlycXMuYwogCSQoUSlta2RpciAtcCAkKGRpciAkQCkKIAkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsY2Nfc19jKQogCi1pbmNsdWRlL2FzbS1pYTY0L25yLWlycXMuaDogYXJjaC8kKFNSQ0FSQ0gpL2tlcm5lbC9uci1pcnFzLnMKK2luY2x1ZGUvZ2VuZXJhdGVkL25yLWlycXMuaDogYXJjaC8kKFNSQ0FSQ0gpL2tlcm5lbC9uci1pcnFzLnMKIAkkKFEpbWtkaXIgLXAgJChkaXIgJEApCiAJJChjYWxsIGNtZCxucl9pcnFzKQogCi1jbGVhbi1maWxlcyArPSAkKG9ianRyZWUpL2luY2x1ZGUvYXNtLWlhNjQvbnItaXJxcy5oCi0KICMKICMgbmF0aXZlIGl2dC5TLCBlbnRyeS5TIGFuZCBmc3lzLlMKICMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggYmFlYzZmMC4uNDA1NzRhZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTcwMiwxMSArNzAyLDIzIEBACiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKIAkJICAgICAgICJFcnJvciBwYXJzaW5nIE1BRFQgLSBubyBMQVBJQyBlbnRyaWVzXG4iKTsKIAorI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoYXZhaWxhYmxlX2NwdXMgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBGb3VuZCAwIENQVVM7IGFzc3VtaW5nIDFcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJDUFUgMCAoMHglMDR4KSIsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJc21wX2Jvb3RfZGF0YS5jcHVfcGh5c19pZFthdmFpbGFibGVfY3B1c10gPQorCQkgICAgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWF2YWlsYWJsZV9jcHVzID0gMTsJLyogV2UndmUgZ290IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSwgbm8/ICovCisJfQorCXNtcF9ib290X2RhdGEuY3B1X2NvdW50ID0gYXZhaWxhYmxlX2NwdXM7CisjZW5kaWYKKwkvKiBNYWtlIGJvb3QtdXAgbG9vayBwcmV0dHkgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlZCBDUFVzIGF2YWlsYWJsZSwgJWQgQ1BVcyB0b3RhbFxuIiwgYXZhaWxhYmxlX2NwdXMsCisJICAgICAgIHRvdGFsX2NwdXMpOworCiAJcmV0dXJuIDA7CiB9CiAKLQotCiBpbnQgX19pbml0IGFjcGlfYm9vdF9pbml0KHZvaWQpCiB7CiAKQEAgLTc2OSwxOCArNzgxLDggQEAKIAlpZiAoYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19GQURULCBhY3BpX3BhcnNlX2ZhZHQpKQogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDYW4ndCBmaW5kIEZBRFRcbiIpOwogCisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoYXZhaWxhYmxlX2NwdXMgPT0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBGb3VuZCAwIENQVVM7IGFzc3VtaW5nIDFcbiIpOwotCQlwcmludGsoS0VSTl9JTkZPICJDUFUgMCAoMHglMDR4KSIsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJc21wX2Jvb3RfZGF0YS5jcHVfcGh5c19pZFthdmFpbGFibGVfY3B1c10gPQotCQkgICAgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCWF2YWlsYWJsZV9jcHVzID0gMTsJLyogV2UndmUgZ290IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSwgbm8/ICovCi0JfQotCXNtcF9ib290X2RhdGEuY3B1X2NvdW50ID0gYXZhaWxhYmxlX2NwdXM7Ci0KLQlzbXBfYnVpbGRfY3B1X21hcCgpOwotIyBpZmRlZiBDT05GSUdfQUNQSV9OVU1BCiAJaWYgKHNyYXRfbnVtX2NwdXMgPT0gMCkgewogCQlpbnQgY3B1LCBpID0gMTsKIAkJZm9yIChjcHUgPSAwOyBjcHUgPCBzbXBfYm9vdF9kYXRhLmNwdV9jb3VudDsgY3B1KyspCkBAIC03ODksMTQgKzc5MSw5IEBACiAJCQkJbm9kZV9jcHVpZFtpKytdLnBoeXNfaWQgPQogCQkJCSAgICBzbXBfYm9vdF9kYXRhLmNwdV9waHlzX2lkW2NwdV07CiAJfQotIyBlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FDUElfTlVNQQogCWJ1aWxkX2NwdV90b19ub2RlX21hcCgpOwogI2VuZGlmCi0JLyogTWFrZSBib290LXVwIGxvb2sgcHJldHR5ICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiJWQgQ1BVcyBhdmFpbGFibGUsICVkIENQVXMgdG90YWxcbiIsIGF2YWlsYWJsZV9jcHVzLAotCSAgICAgICB0b3RhbF9jcHVzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwppbmRleCA2OTZlZmYyLi4xN2E5ZmJhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKICAqIGludGVybWVkaWF0ZSBwcmVjaXNpb24gc28gdGhhdCB3ZSBjYW4gcHJvZHVjZSBhIGZ1bGwgNjQtYml0IHJlc3VsdC4KICAqLwogR0xPQkFMX0VOVFJZKGlhNjRfbmF0aXZlX3NjaGVkX2Nsb2NrKQotCWFkZGwgcjg9VEhJU19DUFUoY3B1X2luZm8pICsgSUE2NF9DUFVJTkZPX05TRUNfUEVSX0NZQ19PRkZTRVQscjAKKwlhZGRsIHI4PVRISVNfQ1BVKGlhNjRfY3B1X2luZm8pICsgSUE2NF9DUFVJTkZPX05TRUNfUEVSX0NZQ19PRkZTRVQscjAKIAltb3YubSByOT1hci5pdGMJCS8vIGZldGNoIGN5Y2xlLWNvdW50ZXIJCQkJKDM1IGN5YykKIAk7OwogCWxkZjggZjg9W3I4XQpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogR0xPQkFMX0VOVFJZKGN5Y2xlX3RvX2NwdXRpbWUpCiAJYWxsb2MgcjE2PWFyLnBmcywxLDAsMCwwCi0JYWRkbCByOD1USElTX0NQVShjcHVfaW5mbykgKyBJQTY0X0NQVUlORk9fTlNFQ19QRVJfQ1lDX09GRlNFVCxyMAorCWFkZGwgcjg9VEhJU19DUFUoaWE2NF9jcHVfaW5mbykgKyBJQTY0X0NQVUlORk9fTlNFQ19QRVJfQ1lDX09GRlNFVCxyMAogCTs7CiAJbGRmOCBmOD1bcjhdCiAJOzsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKaW5kZXggMTRkMzllMy4uNDYxYjk5OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotRVhQT1JUX1NZTUJPTChwZXJfY3B1X19jcHVfaW5mbyk7CitFWFBPUlRfU1lNQk9MKHBlcl9jcHVfX2lhNjRfY3B1X2luZm8pOwogI2lmZGVmIENPTkZJR19TTVAKIEVYUE9SVF9TWU1CT0wocGVyX2NwdV9fbG9jYWxfcGVyX2NwdV9vZmZzZXQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCmluZGV4IGRhYjRkMzkuLjk1YWM3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jCkBAIC03OTMsMTIgKzc5MywxMiBAQAogCQkJZ290byB1bmxvY2tfaW9zYXBpY19sb2NrOwogCX0KIAotCXNwaW5fbG9jaygmaXJxX2Rlc2NbaXJxXS5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZpcnFfZGVzY1tpcnFdLmxvY2spOwogCWRlc3QgPSBnZXRfdGFyZ2V0X2NwdShnc2ksIGlycSk7CiAJZG1vZGUgPSBjaG9vc2VfZG1vZGUoKTsKIAllcnIgPSByZWdpc3Rlcl9pbnRyKGdzaSwgaXJxLCBkbW9kZSwgcG9sYXJpdHksIHRyaWdnZXIpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfZGVzY1tpcnFdLmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmlycV9kZXNjW2lycV0ubG9jayk7CiAJCWlycSA9IGVycjsKIAkJZ290byB1bmxvY2tfaW9zYXBpY19sb2NrOwogCX0KQEAgLTgxNyw3ICs4MTcsNyBAQAogCSAgICAgICAocG9sYXJpdHkgPT0gSU9TQVBJQ19QT0xfSElHSCA/ICJoaWdoIiA6ICJsb3ciKSwKIAkgICAgICAgY3B1X2xvZ2ljYWxfaWQoZGVzdCksIGRlc3QsIGlycV90b192ZWN0b3IoaXJxKSk7CiAKLQlzcGluX3VubG9jaygmaXJxX2Rlc2NbaXJxXS5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmlycV9kZXNjW2lycV0ubG9jayk7CiAgdW5sb2NrX2lvc2FwaWNfbG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKaW5kZXggN2Q4OTUxMi4uOTRlZTlkMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCkBAIC03MSw3ICs3MSw3IEBACiAJfQogCiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CiAJCWlmICghYWN0aW9uKQogCQkJZ290byBza2lwOwpAQCAtOTEsNyArOTEsNyBAQAogCiAJCXNlcV9wdXRjKHAsICdcbicpOwogc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKQogCQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMgYi9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKaW5kZXggZGQ5ZDdiNS4uZDQwOTNhMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwpAQCAtMjYwLDcgKzI2MCw2IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIChkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0lBNjRfRElHKSkKLSNkZWZpbmUgSUE2NF9JUlFfTU9WRV9WRUNUT1IJSUE2NF9ERUZfRklSU1RfREVWSUNFX1ZFQ1RPUgogCiBzdGF0aWMgZW51bSB2ZWN0b3JfZG9tYWluX3R5cGUgewogCVZFQ1RPUl9ET01BSU5fTk9ORSwKQEAgLTM0NSw3ICszNDQsNyBAQAogCiAJCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAkJY2ZnID0gaXJxX2NmZyArIGlycTsKLQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCiAJCQlnb3RvIHVubG9jazsKIApAQCAtMzU4LDcgKzM1Nyw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50LS07CiAJdW5sb2NrOgotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTY1OSwxMSArNjU4LDggQEAKIAlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfU1BVUklPVVNfSU5UX1ZFQ1RPUiwgTlVMTCk7CiAjaWZkZWYgQ09ORklHX1NNUAogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9ESUcpCi0JaWYgKHZlY3Rvcl9kb21haW5fdHlwZSAhPSBWRUNUT1JfRE9NQUlOX05PTkUpIHsKLQkJQlVHX09OKElBNjRfRklSU1RfREVWSUNFX1ZFQ1RPUiAhPSBJQTY0X0lSUV9NT1ZFX1ZFQ1RPUik7Ci0JCUlBNjRfRklSU1RfREVWSUNFX1ZFQ1RPUisrOworCWlmICh2ZWN0b3JfZG9tYWluX3R5cGUgIT0gVkVDVE9SX0RPTUFJTl9OT05FKQogCQlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfSVJRX01PVkVfVkVDVE9SLCAmaXJxX21vdmVfaXJxYWN0aW9uKTsKLQl9CiAjZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR19QRVJGTU9OCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCA0OTZhYzdhLi4zMmYyNjM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTg4OCw5ICs4ODgsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZpbmlzaF9wdF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBwYWxfbWluX3N0YXRlX2FyZWFfdCAqbXMsCitmaW5pc2hfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICpzb3MsCiAJCXVuc2lnbmVkIGxvbmcgKm5hdCkKIHsKKwljb25zdCBwYWxfbWluX3N0YXRlX2FyZWFfdCAqbXMgPSBzb3MtPnBhbF9taW5fc3RhdGU7CiAJY29uc3QgdTY0ICpiYW5rOwogCiAJLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQpAQCAtOTA0LDYgKzkwNSwxMCBAQAogCQlyZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7CiAJCXJlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV94cHNyOwogCQlyZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7CisKKwkJc29zLT5paXAgPSBtcy0+cG1zYV9paXA7CisJCXNvcy0+aXBzciA9IG1zLT5wbXNhX2lwc3I7CisJCXNvcy0+aWZzID0gbXMtPnBtc2FfaWZzOwogCX0KIAlyZWdzLT5wciA9IG1zLT5wbXNhX3ByOwogCXJlZ3MtPmIwID0gbXMtPnBtc2FfYnIwOwpAQCAtMTA3OSw3ICsxMDg0LDcgQEAKIAltZW1jcHkob2xkX3JlZ3MsIHJlZ3MsIHNpemVvZigqcmVncykpOwogCW9sZF9yZWdzLT5sb2FkcnMgPSBsb2FkcnM7CiAJb2xkX3VuYXQgPSBvbGRfcmVncy0+YXJfdW5hdDsKLQlmaW5pc2hfcHRfcmVncyhvbGRfcmVncywgbXMsICZvbGRfdW5hdCk7CisJZmluaXNoX3B0X3JlZ3Mob2xkX3JlZ3MsIHNvcywgJm9sZF91bmF0KTsKIAogCS8qIE5leHQgc3RhY2sgYSBzdHJ1Y3Qgc3dpdGNoX3N0YWNrLiAgbWNhX2FzbS5TIGJ1aWx0IGEgcGFydGlhbAogCSAqIHN3aXRjaF9zdGFjaywgY29weSBpdCBhbmQgZmlsbCBpbiB0aGUgYmxhbmtzIHVzaW5nIHB0X3JlZ3MgYW5kCkBAIC0xMTUwLDcgKzExNTUsNyBAQAogCW1wcmludGsoS0VSTl9JTkZPICJjcHUgJWQsICVzICVzLCBvcmlnaW5hbCBzdGFjayBub3QgbW9kaWZpZWRcbiIsCiAJCQlzbXBfcHJvY2Vzc29yX2lkKCksIHR5cGUsIG1zZyk7CiAJb2xkX3VuYXQgPSByZWdzLT5hcl91bmF0OwotCWZpbmlzaF9wdF9yZWdzKHJlZ3MsIG1zLCAmb2xkX3VuYXQpOworCWZpbmlzaF9wdF9yZWdzKHJlZ3MsIHNvcywgJm9sZF91bmF0KTsKIAlyZXR1cm4gcHJldmlvdXNfY3VycmVudDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwppbmRleCA3NDYxZDI1Li5kNWJkZjlkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwpAQCAtNTksNyArNTksNyBAQAogaWE2NF9kb190bGJfcHVyZ2U6CiAjZGVmaW5lIE8obWVtYmVyKQlJQTY0X0NQVUlORk9fIyNtZW1iZXIjI19PRkZTRVQKIAotCUdFVF9USElTX1BBRERSKHIyLCBjcHVfaW5mbykJLy8gbG9hZCBwaHlzIGFkZHIgb2YgY3B1X2luZm8gaW50byByMgorCUdFVF9USElTX1BBRERSKHIyLCBpYTY0X2NwdV9pbmZvKSAvLyBsb2FkIHBoeXMgYWRkciBvZiBjcHVfaW5mbyBpbnRvIHIyCiAJOzsKIAlhZGRsIHIxNz1PKFBUQ0VfU1RSSURFKSxyMgogCWFkZGwgcjI9TyhQVENFX0JBU0UpLHIyCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDU5OWIyMzMuLjUyNDYyODUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yMjAwLDcgKzIyMDAsNyBAQAogewogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCBwYXRoIHBhdGg7CiAJY2hhciBuYW1lWzMyXTsKIAlzdHJ1Y3QgcXN0ciB0aGlzOwogCkBAIC0yMjI1LDE4ICsyMjI1LDE5IEBACiAJLyoKIAkgKiBhbGxvY2F0ZSBhIG5ldyBkY2FjaGUgZW50cnkKIAkgKi8KLQlkZW50cnkgPSBkX2FsbG9jKHBmbWZzX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKLQlpZiAoIWRlbnRyeSkgeworCXBhdGguZGVudHJ5ID0gZF9hbGxvYyhwZm1mc19tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CisJaWYgKCFwYXRoLmRlbnRyeSkgewogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQorCXBhdGgubW50ID0gbW50Z2V0KHBmbWZzX21udCk7CiAKLQlkZW50cnktPmRfb3AgPSAmcGZtZnNfZGVudHJ5X29wZXJhdGlvbnM7Ci0JZF9hZGQoZGVudHJ5LCBpbm9kZSk7CisJcGF0aC5kZW50cnktPmRfb3AgPSAmcGZtZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9hZGQocGF0aC5kZW50cnksIGlub2RlKTsKIAotCWZpbGUgPSBhbGxvY19maWxlKHBmbWZzX21udCwgZGVudHJ5LCBGTU9ERV9SRUFELCAmcGZtX2ZpbGVfb3BzKTsKKwlmaWxlID0gYWxsb2NfZmlsZSgmcGF0aCwgRk1PREVfUkVBRCwgJnBmbV9maWxlX29wcyk7CiAJaWYgKCFmaWxlKSB7Ci0JCWRwdXQoZGVudHJ5KTsKKwkJcGF0aF9wdXQoJnBhdGgpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5GSUxFKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMgYi9hcmNoL2lhNjQva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCmluZGV4IDMyZjZmYzEuLmMzNzBlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtNjEsNyArNjEsNyBAQAogCiAJLy8gcHVyZ2UgYWxsIFRDIGVudHJpZXMKICNkZWZpbmUgTyhtZW1iZXIpICAgICAgIElBNjRfQ1BVSU5GT18jI21lbWJlciMjX09GRlNFVAotICAgICAgICBHRVRfVEhJU19QQUREUihyMiwgY3B1X2luZm8pICAgIC8vIGxvYWQgcGh5cyBhZGRyIG9mIGNwdV9pbmZvIGludG8gcjIKKyAgICAgICAgR0VUX1RISVNfUEFERFIocjIsIGlhNjRfY3B1X2luZm8pIC8vIGxvYWQgcGh5cyBhZGRyIG9mIGNwdV9pbmZvIGludG8gcjIKICAgICAgICAgOzsKICAgICAgICAgYWRkbCByMTc9TyhQVENFX1NUUklERSkscjIKICAgICAgICAgYWRkbCByMj1PKFBUQ0VfQkFTRSkscjIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCAxZGU4NmM5Li5hMWVhODc5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC03NCw3ICs3NCw3IEBACiBFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOwogI2VuZGlmCiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX2lhNjQsIGNwdV9pbmZvKTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX2lhNjQsIGlhNjRfY3B1X2luZm8pOwogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbG9jYWxfcGVyX2NwdV9vZmZzZXQpOwogdW5zaWduZWQgbG9uZyBpYTY0X2N5Y2xlc19wZXJfdXNlYzsKIHN0cnVjdCBpYTY0X2Jvb3RfcGFyYW0gKmlhNjRfYm9vdF9wYXJhbTsKQEAgLTU2NiwxOSArNTY2LDE4IEBACiAJZWFybHlfYWNwaV9ib290X2luaXQoKTsKICMgaWZkZWYgQ09ORklHX0FDUElfTlVNQQogCWFjcGlfbnVtYV9pbml0KCk7Ci0jaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKKyMgIGlmZGVmIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVCiAJcHJlZmlsbF9wb3NzaWJsZV9tYXAoKTsKLSNlbmRpZgorIyAgZW5kaWYKIAlwZXJfY3B1X3NjYW5fZmluYWxpemUoKGNwdXNfd2VpZ2h0KGVhcmx5X2NwdV9wb3NzaWJsZV9tYXApID09IDAgPwogCQkzMiA6IGNwdXNfd2VpZ2h0KGVhcmx5X2NwdV9wb3NzaWJsZV9tYXApKSwKIAkJYWRkaXRpb25hbF9jcHVzID4gMCA/IGFkZGl0aW9uYWxfY3B1cyA6IDApOwogIyBlbmRpZgotI2Vsc2UKLSMgaWZkZWYgQ09ORklHX1NNUAotCXNtcF9idWlsZF9jcHVfbWFwKCk7CS8qIGhhcHBlbnMsIGUuZy4sIHdpdGggdGhlIFNraSBzaW11bGF0b3IgKi8KLSMgZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfQVBDSV9CT09UICovCiAKKyNpZmRlZiBDT05GSUdfU01QCisJc21wX2J1aWxkX2NwdV9tYXAoKTsKKyNlbmRpZgogCWZpbmRfbWVtb3J5KCk7CiAKIAkvKiBwcm9jZXNzIFNBTCBzeXN0ZW0gdGFibGU6ICovCkBAIC04NTYsMTggKzg1NSw2IEBACiB9CiAKIC8qCi0gKiBJbiBVUCBjb25maWd1cmF0aW9uLCBzZXR1cF9wZXJfY3B1X2FyZWFzKCkgaXMgZGVmaW5lZCBpbgotICogaW5jbHVkZS9saW51eC9wZXJjcHUuaAotICovCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCBfX2luaXQKLXNldHVwX3Blcl9jcHVfYXJlYXMgKHZvaWQpCi17Ci0JLyogc3RhcnRfa2VybmVsKCkgcmVxdWlyZXMgdGhpcy4uLiAqLwotfQotI2VuZGlmCi0KLS8qCiAgKiBEbyB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uczoKICAqCiAgKiAxLiB0aGUgbWF4LiBjYWNoZSBsaW5lIHNpemUuCkBAIC05ODAsNyArOTY3LDcgQEAKIAkgKiBkZXBlbmRzIG9uIHRoZSBkYXRhIHJldHVybmVkIGJ5IGlkZW50aWZ5X2NwdSgpLiAgV2UgYnJlYWsgdGhlIGRlcGVuZGVuY3kgYnkKIAkgKiBhY2Nlc3NpbmcgY3B1X2RhdGEoKSB0aHJvdWdoIHRoZSBjYW5vbmljYWwgcGVyLUNQVSBhZGRyZXNzLgogCSAqLwotCWNwdV9pbmZvID0gY3B1X2RhdGEgKyAoKGNoYXIgKikgJl9faWE2NF9wZXJfY3B1X3ZhcihjcHVfaW5mbykgLSBfX3Blcl9jcHVfc3RhcnQpOworCWNwdV9pbmZvID0gY3B1X2RhdGEgKyAoKGNoYXIgKikgJl9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X2NwdV9pbmZvKSAtIF9fcGVyX2NwdV9zdGFydCk7CiAJaWRlbnRpZnlfY3B1KGNwdV9pbmZvKTsKIAogI2lmZGVmIENPTkZJR19NQ0tJTkxFWQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDBhMGM3N2IuLjEyOTViYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE2Niw2ICsxNjYsMTIgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmCUNPTkZJR19TTVAKKyAgLiA9IEFMSUdOKFBFUkNQVV9QQUdFX1NJWkUpOworICBfX2NwdTBfcGVyX2NwdSA9IC47CisgIC4gPSAuICsgUEVSQ1BVX1BBR0VfU0laRTsJLyogY3B1MCBwZXItY3B1IHNwYWNlICovCisjZW5kaWYKKwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CiAKQEAgLTE5OCwxMSArMjA0LDYgQEAKICAgZGF0YSA6IHsgfSA6ZGF0YQogICAuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpCiAJewotI2lmZGVmCUNPTkZJR19TTVAKLSAgLiA9IEFMSUdOKFBFUkNQVV9QQUdFX1NJWkUpOwotCQlfX2NwdTBfcGVyX2NwdSA9IC47Ci0gIC4gPSAuICsgUEVSQ1BVX1BBR0VfU0laRTsJLyogY3B1MCBwZXItY3B1IHNwYWNlICovCi0jZW5kaWYKIAkJSU5JVF9UQVNLX0RBVEEoUEFHRV9TSVpFKQogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKFNNUF9DQUNIRV9CWVRFUykKIAkJUkVBRF9NT1NUTFlfREFUQShTTVBfQ0FDSEVfQllURVMpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2lhNjQva3ZtL2FzbS1vZmZzZXRzLmMKaW5kZXggMGMzNTY0YS4uOTMyNGM4NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvaWE2NC9rdm0vYXNtLW9mZnNldHMuYwpAQCAtMjIsNyArMjIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKaW5kZXggMmY3MjRkMi4uNTRiZjU0MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtMTU0LDM4ICsxNTQsOTkgQEAKIHZvaWQgKiBfX2NwdWluaXQKIHBlcl9jcHVfaW5pdCAodm9pZCkKIHsKLQlpbnQgY3B1OwotCXN0YXRpYyBpbnQgZmlyc3RfdGltZT0xOworCXN0YXRpYyBib29sIGZpcnN0X3RpbWUgPSB0cnVlOworCXZvaWQgKmNwdTBfZGF0YSA9IF9fY3B1MF9wZXJfY3B1OworCXVuc2lnbmVkIGludCBjcHU7CisKKwlpZiAoIWZpcnN0X3RpbWUpCisJCWdvdG8gc2tpcDsKKwlmaXJzdF90aW1lID0gZmFsc2U7CiAKIAkvKgotCSAqIGdldF9mcmVlX3BhZ2VzKCkgY2Fubm90IGJlIHVzZWQgYmVmb3JlIGNwdV9pbml0KCkgZG9uZS4gIEJTUAotCSAqIGFsbG9jYXRlcyAiTlJfQ1BVUyIgcGFnZXMgZm9yIGFsbCBDUFVzIHRvIGF2b2lkIHRoYXQgQVAgY2FsbHMKLQkgKiBnZXRfemVyb2VkX3BhZ2UoKS4KKwkgKiBnZXRfZnJlZV9wYWdlcygpIGNhbm5vdCBiZSB1c2VkIGJlZm9yZSBjcHVfaW5pdCgpIGRvbmUuCisJICogQlNQIGFsbG9jYXRlcyBQRVJDUFVfUEFHRV9TSVpFIGJ5dGVzIGZvciBhbGwgcG9zc2libGUgQ1BVcworCSAqIHRvIGF2b2lkIHRoYXQgQVAgY2FsbHMgZ2V0X3plcm9lZF9wYWdlKCkuCiAJICovCi0JaWYgKGZpcnN0X3RpbWUpIHsKLQkJdm9pZCAqY3B1MF9kYXRhID0gX19jcHUwX3Blcl9jcHU7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQl2b2lkICpzcmMgPSBjcHUgPT0gMCA/IGNwdTBfZGF0YSA6IF9fcGh5c19wZXJfY3B1X3N0YXJ0OwogCi0JCWZpcnN0X3RpbWU9MDsKKwkJbWVtY3B5KGNwdV9kYXRhLCBzcmMsIF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQpOworCQlfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gPSAoY2hhciAqKWNwdV9kYXRhIC0gX19wZXJfY3B1X3N0YXJ0OworCQlwZXJfY3B1KGxvY2FsX3Blcl9jcHVfb2Zmc2V0LCBjcHUpID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogCi0JCV9fcGVyX2NwdV9vZmZzZXRbMF0gPSAoY2hhciAqKSBjcHUwX2RhdGEgLSBfX3Blcl9jcHVfc3RhcnQ7Ci0JCXBlcl9jcHUobG9jYWxfcGVyX2NwdV9vZmZzZXQsIDApID0gX19wZXJfY3B1X29mZnNldFswXTsKKwkJLyoKKwkJICogcGVyY3B1IGFyZWEgZm9yIGNwdTAgaXMgbW92ZWQgZnJvbSB0aGUgX19pbml0IGFyZWEKKwkJICogd2hpY2ggaXMgc2V0dXAgYnkgaGVhZC5TIGFuZCB1c2VkIHRpbGwgdGhpcyBwb2ludC4KKwkJICogVXBkYXRlIGFyLmszLiAgVGhpcyBtb3ZlIGlzIGVuc3VyZXMgdGhhdCBwZXJjcHUKKwkJICogYXJlYSBmb3IgY3B1MCBpcyBvbiB0aGUgY29ycmVjdCBub2RlIGFuZCBpdHMKKwkJICogdmlydHVhbCBhZGRyZXNzIGlzbid0IGluc2FuZWx5IGZhciBmcm9tIG90aGVyCisJCSAqIHBlcmNwdSBhcmVhcyB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGNvbmdydWVudAorCQkgKiBwZXJjcHUgYWxsb2NhdG9yLgorCQkgKi8KKwkJaWYgKGNwdSA9PSAwKQorCQkJaWE2NF9zZXRfa3IoSUE2NF9LUl9QRVJfQ1BVX0RBVEEsIF9fcGEoY3B1X2RhdGEpIC0KKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0KTsKIAotCQlmb3IgKGNwdSA9IDE7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7Ci0JCQltZW1jcHkoY3B1X2RhdGEsIF9fcGh5c19wZXJfY3B1X3N0YXJ0LCBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKLQkJCV9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IChjaGFyICopIGNwdV9kYXRhIC0gX19wZXJfY3B1X3N0YXJ0OwotCQkJY3B1X2RhdGEgKz0gUEVSQ1BVX1BBR0VfU0laRTsKLQkJCXBlcl9jcHUobG9jYWxfcGVyX2NwdV9vZmZzZXQsIGNwdSkgPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV07Ci0JCX0KKwkJY3B1X2RhdGEgKz0gUEVSQ1BVX1BBR0VfU0laRTsKIAl9Citza2lwOgogCXJldHVybiBfX3Blcl9jcHVfc3RhcnQgKyBfX3Blcl9jcHVfb2Zmc2V0W3NtcF9wcm9jZXNzb3JfaWQoKV07CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogYWxsb2NfcGVyX2NwdV9kYXRhKHZvaWQpCiB7Ci0JY3B1X2RhdGEgPSBfX2FsbG9jX2Jvb3RtZW0oUEVSQ1BVX1BBR0VfU0laRSAqIE5SX0NQVVMtMSwKKwljcHVfZGF0YSA9IF9fYWxsb2NfYm9vdG1lbShQRVJDUFVfUEFHRV9TSVpFICogbnVtX3Bvc3NpYmxlX2NwdXMoKSwKIAkJCQkgICBQRVJDUFVfUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogfQorCisvKioKKyAqIHNldHVwX3Blcl9jcHVfYXJlYXMgLSBzZXR1cCBwZXJjcHUgYXJlYXMKKyAqCisgKiBBcmNoIGNvZGUgaGFzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBwZXJjcHUgYXJlYXMuICBBbGwKKyAqIHRoaXMgZnVuY3Rpb24gaGFzIHRvIGRvIGlzIHRvIHRlYWNoIHRoZSBkZXRlcm1pbmVkIGxheW91dCB0byB0aGUKKyAqIGR5bmFtaWMgcGVyY3B1IGFsbG9jYXRvciwgd2hpY2ggaGFwcGVucyB0byBiZSBtb3JlIGNvbXBsZXggdGhhbgorICogY3JlYXRpbmcgd2hvbGUgbmV3IG9uZXMgdXNpbmcgaGVscGVycy4KKyAqLwordm9pZCBfX2luaXQKK3NldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKK3sKKwlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKKwlzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvICpnaTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXNzaXplX3Qgc3RhdGljX3NpemUsIHJlc2VydmVkX3NpemUsIGR5bl9zaXplOworCWludCByYzsKKworCWFpID0gcGNwdV9hbGxvY19hbGxvY19pbmZvKDEsIG51bV9wb3NzaWJsZV9jcHVzKCkpOworCWlmICghYWkpCisJCXBhbmljKCJmYWlsZWQgdG8gYWxsb2NhdGUgcGNwdV9hbGxvY19pbmZvIik7CisJZ2kgPSAmYWktPmdyb3Vwc1swXTsKKworCS8qIHVuaXRzIGFyZSBhc3NpZ25lZCBjb25zZWN1dGl2ZWx5IHRvIHBvc3NpYmxlIGNwdXMgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlnaS0+Y3B1X21hcFtnaS0+bnJfdW5pdHMrK10gPSBjcHU7CisKKwkvKiBzZXQgcGFyYW1ldGVycyAqLworCXN0YXRpY19zaXplID0gX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDsKKwlyZXNlcnZlZF9zaXplID0gUEVSQ1BVX01PRFVMRV9SRVNFUlZFOworCWR5bl9zaXplID0gUEVSQ1BVX1BBR0VfU0laRSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTsKKwlpZiAoZHluX3NpemUgPCAwKQorCQlwYW5pYygicGVyY3B1IGFyZWEgb3ZlcmZsb3cgc3RhdGljPSV6ZCByZXNlcnZlZD0lemRcbiIsCisJCSAgICAgIHN0YXRpY19zaXplLCByZXNlcnZlZF9zaXplKTsKKworCWFpLT5zdGF0aWNfc2l6ZQkJPSBzdGF0aWNfc2l6ZTsKKwlhaS0+cmVzZXJ2ZWRfc2l6ZQk9IHJlc2VydmVkX3NpemU7CisJYWktPmR5bl9zaXplCQk9IGR5bl9zaXplOworCWFpLT51bml0X3NpemUJCT0gUEVSQ1BVX1BBR0VfU0laRTsKKwlhaS0+YXRvbV9zaXplCQk9IFBBR0VfU0laRTsKKwlhaS0+YWxsb2Nfc2l6ZQkJPSBQRVJDUFVfUEFHRV9TSVpFOworCisJcmMgPSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBfX3Blcl9jcHVfc3RhcnQgKyBfX3Blcl9jcHVfb2Zmc2V0WzBdKTsKKwlpZiAocmMpCisJCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CisKKwlwY3B1X2ZyZWVfYWxsb2NfaW5mbyhhaSk7Cit9CiAjZWxzZQogI2RlZmluZSBhbGxvY19wZXJfY3B1X2RhdGEoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtMjcwLDggKzMzMSw4IEBACiAKIAkJbWFwX3NpemUgPSBQQUdFX0FMSUdOKEFMSUdOKG1heF9sb3dfcGZuLCBNQVhfT1JERVJfTlJfUEFHRVMpICoKIAkJCXNpemVvZihzdHJ1Y3QgcGFnZSkpOwotCQl2bWFsbG9jX2VuZCAtPSBtYXBfc2l6ZTsKLQkJdm1lbV9tYXAgPSAoc3RydWN0IHBhZ2UgKikgdm1hbGxvY19lbmQ7CisJCVZNQUxMT0NfRU5EIC09IG1hcF9zaXplOworCQl2bWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSBWTUFMTE9DX0VORDsKIAkJZWZpX21lbW1hcF93YWxrKGNyZWF0ZV9tZW1fbWFwX3BhZ2VfdGFibGUsIE5VTEwpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggZDg1YmE5OC4uMTljNGIyMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtMTQzLDIyICsxNDMsMTIwIEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2Vhcmx5X2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSAwKSB7Ci0JCQl2b2lkICpjcHUwX2RhdGEgPSBfX2NwdTBfcGVyX2NwdTsKLQkJCV9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IChjaGFyKiljcHUwX2RhdGEgLQotCQkJCV9fcGVyX2NwdV9zdGFydDsKLQkJfSBlbHNlIGlmIChub2RlID09IG5vZGVfY3B1aWRbY3B1XS5uaWQpIHsKLQkJCW1lbWNweShfX3ZhKGNwdV9kYXRhKSwgX19waHlzX3Blcl9jcHVfc3RhcnQsCi0JCQkgICAgICAgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7Ci0JCQlfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gPSAoY2hhciopX192YShjcHVfZGF0YSkgLQotCQkJCV9fcGVyX2NwdV9zdGFydDsKLQkJCWNwdV9kYXRhICs9IFBFUkNQVV9QQUdFX1NJWkU7Ci0JCX0KKwkJdm9pZCAqc3JjID0gY3B1ID09IDAgPyBfX2NwdTBfcGVyX2NwdSA6IF9fcGh5c19wZXJfY3B1X3N0YXJ0OworCisJCWlmIChub2RlICE9IG5vZGVfY3B1aWRbY3B1XS5uaWQpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoX192YShjcHVfZGF0YSksIHNyYywgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7CisJCV9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IChjaGFyICopX192YShjcHVfZGF0YSkgLQorCQkJX19wZXJfY3B1X3N0YXJ0OworCisJCS8qCisJCSAqIHBlcmNwdSBhcmVhIGZvciBjcHUwIGlzIG1vdmVkIGZyb20gdGhlIF9faW5pdCBhcmVhCisJCSAqIHdoaWNoIGlzIHNldHVwIGJ5IGhlYWQuUyBhbmQgdXNlZCB0aWxsIHRoaXMgcG9pbnQuCisJCSAqIFVwZGF0ZSBhci5rMy4gIFRoaXMgbW92ZSBpcyBlbnN1cmVzIHRoYXQgcGVyY3B1CisJCSAqIGFyZWEgZm9yIGNwdTAgaXMgb24gdGhlIGNvcnJlY3Qgbm9kZSBhbmQgaXRzCisJCSAqIHZpcnR1YWwgYWRkcmVzcyBpc24ndCBpbnNhbmVseSBmYXIgZnJvbSBvdGhlcgorCQkgKiBwZXJjcHUgYXJlYXMgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBjb25ncnVlbnQKKwkJICogcGVyY3B1IGFsbG9jYXRvci4KKwkJICovCisJCWlmIChjcHUgPT0gMCkKKwkJCWlhNjRfc2V0X2tyKElBNjRfS1JfUEVSX0NQVV9EQVRBLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyljcHVfZGF0YSAtCisJCQkJICAgICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCk7CisKKwkJY3B1X2RhdGEgKz0gUEVSQ1BVX1BBR0VfU0laRTsKIAl9CiAjZW5kaWYKIAlyZXR1cm4gY3B1X2RhdGE7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCisvKioKKyAqIHNldHVwX3Blcl9jcHVfYXJlYXMgLSBzZXR1cCBwZXJjcHUgYXJlYXMKKyAqCisgKiBBcmNoIGNvZGUgaGFzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBwZXJjcHUgYXJlYXMuICBBbGwKKyAqIHRoaXMgZnVuY3Rpb24gaGFzIHRvIGRvIGlzIHRvIHRlYWNoIHRoZSBkZXRlcm1pbmVkIGxheW91dCB0byB0aGUKKyAqIGR5bmFtaWMgcGVyY3B1IGFsbG9jYXRvciwgd2hpY2ggaGFwcGVucyB0byBiZSBtb3JlIGNvbXBsZXggdGhhbgorICogY3JlYXRpbmcgd2hvbGUgbmV3IG9uZXMgdXNpbmcgaGVscGVycy4KKyAqLwordm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQoreworCXN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpOworCXN0cnVjdCBwY3B1X2dyb3VwX2luZm8gKnVuaW5pdGlhbGl6ZWRfdmFyKGdpKTsKKwl1bnNpZ25lZCBpbnQgKmNwdV9tYXA7CisJdm9pZCAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIGJhc2Vfb2Zmc2V0OworCXVuc2lnbmVkIGludCBjcHU7CisJc3NpemVfdCBzdGF0aWNfc2l6ZSwgcmVzZXJ2ZWRfc2l6ZSwgZHluX3NpemU7CisJaW50IG5vZGUsIHByZXZfbm9kZSwgdW5pdCwgbnJfdW5pdHMsIHJjOworCisJYWkgPSBwY3B1X2FsbG9jX2FsbG9jX2luZm8oTUFYX05VTU5PREVTLCBucl9jcHVfaWRzKTsKKwlpZiAoIWFpKQorCQlwYW5pYygiZmFpbGVkIHRvIGFsbG9jYXRlIHBjcHVfYWxsb2NfaW5mbyIpOworCWNwdV9tYXAgPSBhaS0+Z3JvdXBzWzBdLmNwdV9tYXA7CisKKwkvKiBkZXRlcm1pbmUgYmFzZSAqLworCWJhc2UgPSAodm9pZCAqKVVMT05HX01BWDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQliYXNlID0gbWluKGJhc2UsCisJCQkgICAodm9pZCAqKShfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gKyBfX3Blcl9jcHVfc3RhcnQpKTsKKwliYXNlX29mZnNldCA9ICh2b2lkICopX19wZXJfY3B1X3N0YXJ0IC0gYmFzZTsKKworCS8qIGJ1aWxkIGNwdV9tYXAsIHVuaXRzIGFyZSBncm91cGVkIGJ5IG5vZGUgKi8KKwl1bml0ID0gMDsKKwlmb3JfZWFjaF9ub2RlKG5vZGUpCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCQlpZiAobm9kZSA9PSBub2RlX2NwdWlkW2NwdV0ubmlkKQorCQkJCWNwdV9tYXBbdW5pdCsrXSA9IGNwdTsKKwlucl91bml0cyA9IHVuaXQ7CisKKwkvKiBzZXQgYmFzaWMgcGFyYW1ldGVycyAqLworCXN0YXRpY19zaXplID0gX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDsKKwlyZXNlcnZlZF9zaXplID0gUEVSQ1BVX01PRFVMRV9SRVNFUlZFOworCWR5bl9zaXplID0gUEVSQ1BVX1BBR0VfU0laRSAtIHN0YXRpY19zaXplIC0gcmVzZXJ2ZWRfc2l6ZTsKKwlpZiAoZHluX3NpemUgPCAwKQorCQlwYW5pYygicGVyY3B1IGFyZWEgb3ZlcmZsb3cgc3RhdGljPSV6ZCByZXNlcnZlZD0lemRcbiIsCisJCSAgICAgIHN0YXRpY19zaXplLCByZXNlcnZlZF9zaXplKTsKKworCWFpLT5zdGF0aWNfc2l6ZQkJPSBzdGF0aWNfc2l6ZTsKKwlhaS0+cmVzZXJ2ZWRfc2l6ZQk9IHJlc2VydmVkX3NpemU7CisJYWktPmR5bl9zaXplCQk9IGR5bl9zaXplOworCWFpLT51bml0X3NpemUJCT0gUEVSQ1BVX1BBR0VfU0laRTsKKwlhaS0+YXRvbV9zaXplCQk9IFBBR0VfU0laRTsKKwlhaS0+YWxsb2Nfc2l6ZQkJPSBQRVJDUFVfUEFHRV9TSVpFOworCisJLyoKKwkgKiBDUFVzIGFyZSBwdXQgaW50byBncm91cHMgYWNjb3JkaW5nIHRvIG5vZGUuICBXYWxrIGNwdV9tYXAKKwkgKiBhbmQgY3JlYXRlIG5ldyBncm91cHMgYXQgbm9kZSBib3VuZGFyaWVzLgorCSAqLworCXByZXZfbm9kZSA9IC0xOworCWFpLT5ucl9ncm91cHMgPSAwOworCWZvciAodW5pdCA9IDA7IHVuaXQgPCBucl91bml0czsgdW5pdCsrKSB7CisJCWNwdSA9IGNwdV9tYXBbdW5pdF07CisJCW5vZGUgPSBub2RlX2NwdWlkW2NwdV0ubmlkOworCisJCWlmIChub2RlID09IHByZXZfbm9kZSkgeworCQkJZ2ktPm5yX3VuaXRzKys7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmV2X25vZGUgPSBub2RlOworCisJCWdpID0gJmFpLT5ncm91cHNbYWktPm5yX2dyb3VwcysrXTsKKwkJZ2ktPm5yX3VuaXRzCQk9IDE7CisJCWdpLT5iYXNlX29mZnNldAkJPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gKyBiYXNlX29mZnNldDsKKwkJZ2ktPmNwdV9tYXAJCT0gJmNwdV9tYXBbdW5pdF07CisJfQorCisJcmMgPSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTsKKwlpZiAocmMpCisJCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CisKKwlwY3B1X2ZyZWVfYWxsb2NfaW5mbyhhaSk7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBmaWxsX3Blcm5vZGUgLSBpbml0aWFsaXplIHBlcm5vZGUgZGF0YS4KICAqIEBub2RlOiB0aGUgbm9kZSBpZC4KQEAgLTM1Miw3ICs0NTAsOCBAQAogCS8qIFNldCB0aGUgbm9kZV9kYXRhIHBvaW50ZXIgZm9yIGVhY2ggcGVyLWNwdSBzdHJ1Y3QgKi8KIAlmb3JfZWFjaF9wb3NzaWJsZV9lYXJseV9jcHUoY3B1KSB7CiAJCW5vZGUgPSBub2RlX2NwdWlkW2NwdV0ubmlkOwotCQlwZXJfY3B1KGNwdV9pbmZvLCBjcHUpLm5vZGVfZGF0YSA9IG1lbV9kYXRhW25vZGVdLm5vZGVfZGF0YTsKKwkJcGVyX2NwdShpYTY0X2NwdV9pbmZvLCBjcHUpLm5vZGVfZGF0YSA9CisJCQltZW1fZGF0YVtub2RlXS5ub2RlX2RhdGE7CiAJfQogI2Vsc2UKIAl7CkBAIC0zNjAsNyArNDU5LDcgQEAKIAkJY3B1ID0gMDsKIAkJbm9kZSA9IG5vZGVfY3B1aWRbY3B1XS5uaWQ7CiAJCWNwdTBfY3B1X2luZm8gPSAoc3RydWN0IGNwdWluZm9faWE2NCAqKShfX3BoeXNfcGVyX2NwdV9zdGFydCArCi0JCQkoKGNoYXIgKikmcGVyX2NwdV9fY3B1X2luZm8gLSBfX3Blcl9jcHVfc3RhcnQpKTsKKwkJCSgoY2hhciAqKSZwZXJfY3B1X19pYTY0X2NwdV9pbmZvIC0gX19wZXJfY3B1X3N0YXJ0KSk7CiAJCWNwdTBfY3B1X2luZm8tPm5vZGVfZGF0YSA9IG1lbV9kYXRhW25vZGVdLm5vZGVfZGF0YTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtNjY2LDkgKzc2NSw5IEBACiAJc3BhcnNlX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKLQl2bWFsbG9jX2VuZCAtPSBQQUdFX0FMSUdOKEFMSUdOKG1heF9sb3dfcGZuLCBNQVhfT1JERVJfTlJfUEFHRVMpICoKKwlWTUFMTE9DX0VORCAtPSBQQUdFX0FMSUdOKEFMSUdOKG1heF9sb3dfcGZuLCBNQVhfT1JERVJfTlJfUEFHRVMpICoKIAkJc2l6ZW9mKHN0cnVjdCBwYWdlKSk7Ci0Jdm1lbV9tYXAgPSAoc3RydWN0IHBhZ2UgKikgdm1hbGxvY19lbmQ7CisJdm1lbV9tYXAgPSAoc3RydWN0IHBhZ2UgKikgVk1BTExPQ19FTkQ7CiAJZWZpX21lbW1hcF93YWxrKGNyZWF0ZV9tZW1fbWFwX3BhZ2VfdGFibGUsIE5VTEwpOwogCXByaW50aygiVmlydHVhbCBtZW1fbWFwIHN0YXJ0cyBhdCAweCVwXG4iLCB2bWVtX21hcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDE4NTc3NjYuLmI5NjA5YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNDQsOCArNDQsOCBAQAogdW5zaWduZWQgbG9uZyBNQVhfRE1BX0FERFJFU1MgPSBQQUdFX09GRlNFVCArIDB4MTAwMDAwMDAwVUw7CiAKICNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCi11bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkRfSU5JVDsKLUVYUE9SVF9TWU1CT0wodm1hbGxvY19lbmQpOwordW5zaWduZWQgbG9uZyBWTUFMTE9DX0VORCA9IFZNQUxMT0NfRU5EX0lOSVQ7CitFWFBPUlRfU1lNQk9MKFZNQUxMT0NfRU5EKTsKIHN0cnVjdCBwYWdlICp2bWVtX21hcDsKIEVYUE9SVF9TWU1CT0wodm1lbV9tYXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC9pYTY0L21tL2lvcmVtYXAuYwppbmRleCAyYTE0MDYyLi4zZGNjZGQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pb3JlbWFwLmMKQEAgLTIyLDYgKzIyLDEyIEBACiB9CiAKIHZvaWQgX19pb21lbSAqCitlYXJseV9pb3JlbWFwICh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c19hZGRyKTsKK30KKwordm9pZCBfX2lvbWVtICoKIGlvcmVtYXAgKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwpAQCAtMTAyLDYgKzEwOCwxMSBAQAogRVhQT1JUX1NZTUJPTChpb3JlbWFwX25vY2FjaGUpOwogCiB2b2lkCitlYXJseV9pb3VubWFwICh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKK30KKwordm9pZAogaW91bm1hcCAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCWlmIChSRUdJT05fTlVNQkVSKGFkZHIpID09IFJHTl9HQVRFKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jCmluZGV4IDExNzY1MDYuLmU4ODRiYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMKQEAgLTQ5NiwxMyArNDk2LDEzIEBACiAJCXNlcV9wcmludGYoZmlsZSwgImNwdSAlZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZFxuIiwgY3B1LCBzdGF0LT5wdGNfbCwKIAkJCQlzdGF0LT5jaGFuZ2VfcmlkLCBzdGF0LT5zaHViX3B0Y19mbHVzaGVzLCBzdGF0LT5ub2Rlc19mbHVzaGVkLAogCQkJCXN0YXQtPmRlYWRsb2NrcywKLQkJCQkxMDAwICogc3RhdC0+bG9ja19pdGNfY2xvY2tzIC8gcGVyX2NwdShjcHVfaW5mbywgY3B1KS5jeWNfcGVyX3VzZWMsCi0JCQkJMTAwMCAqIHN0YXQtPnNodWJfaXRjX2Nsb2NrcyAvIHBlcl9jcHUoY3B1X2luZm8sIGNwdSkuY3ljX3Blcl91c2VjLAotCQkJCTEwMDAgKiBzdGF0LT5zaHViX2l0Y19jbG9ja3NfbWF4IC8gcGVyX2NwdShjcHVfaW5mbywgY3B1KS5jeWNfcGVyX3VzZWMsCisJCQkJMTAwMCAqIHN0YXQtPmxvY2tfaXRjX2Nsb2NrcyAvIHBlcl9jcHUoaWE2NF9jcHVfaW5mbywgY3B1KS5jeWNfcGVyX3VzZWMsCisJCQkJMTAwMCAqIHN0YXQtPnNodWJfaXRjX2Nsb2NrcyAvIHBlcl9jcHUoaWE2NF9jcHVfaW5mbywgY3B1KS5jeWNfcGVyX3VzZWMsCisJCQkJMTAwMCAqIHN0YXQtPnNodWJfaXRjX2Nsb2Nrc19tYXggLyBwZXJfY3B1KGlhNjRfY3B1X2luZm8sIGNwdSkuY3ljX3Blcl91c2VjLAogCQkJCXN0YXQtPnNodWJfcHRjX2ZsdXNoZXNfbm90X215X21tLAogCQkJCXN0YXQtPmRlYWRsb2NrczIsCiAJCQkJc3RhdC0+c2h1Yl9pcGlfZmx1c2hlcywKLQkJCQkxMDAwICogc3RhdC0+c2h1Yl9pcGlfZmx1c2hlc19pdGNfY2xvY2tzIC8gcGVyX2NwdShjcHVfaW5mbywgY3B1KS5jeWNfcGVyX3VzZWMpOworCQkJCTEwMDAgKiBzdGF0LT5zaHViX2lwaV9mbHVzaGVzX2l0Y19jbG9ja3MgLyBwZXJfY3B1KGlhNjRfY3B1X2luZm8sIGNwdSkuY3ljX3Blcl91c2VjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKaW5kZXggMzViMmEyNy4uZWZiNDU0NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vaW8uaD4KQEAgLTM2OSw3ICszNzAsNyBAQAogc3RhdGljIGRtYV9hZGRyX3QKIHRpb2NhX2RtYV9tYXBwZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGxvbmcgcGFkZHIsIHNpemVfdCByZXFfc2l6ZSkKIHsKLQlpbnQgaSwgcHMsIHBzX3NoaWZ0LCBlbnRyeSwgZW50cmllcywgbWFwc2l6ZSwgbGFzdF9lbnRyeTsKKwlpbnQgcHMsIHBzX3NoaWZ0LCBlbnRyeSwgZW50cmllcywgbWFwc2l6ZTsKIAl1NjQgeGlvX2FkZHIsIGVuZF94aW9fYWRkcjsKIAlzdHJ1Y3QgdGlvY2FfY29tbW9uICp0aW9jYV9jb21tb247CiAJc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybjsKQEAgLTQxMCwyMyArNDExLDEzIEBACiAJbWFwID0gdGlvY2Ffa2Vybi0+Y2FfcGNpZ2FydF9wYWdlbWFwOwogCW1hcHNpemUgPSB0aW9jYV9rZXJuLT5jYV9wY2lnYXJ0X2VudHJpZXM7CiAKLQllbnRyeSA9IGZpbmRfZmlyc3RfemVyb19iaXQobWFwLCBtYXBzaXplKTsKLQl3aGlsZSAoZW50cnkgPCBtYXBzaXplKSB7Ci0JCWxhc3RfZW50cnkgPSBmaW5kX25leHRfYml0KG1hcCwgbWFwc2l6ZSwgZW50cnkpOwotCi0JCWlmIChsYXN0X2VudHJ5IC0gZW50cnkgPj0gZW50cmllcykKLQkJCWJyZWFrOwotCi0JCWVudHJ5ID0gZmluZF9uZXh0X3plcm9fYml0KG1hcCwgbWFwc2l6ZSwgbGFzdF9lbnRyeSk7Ci0JfQotCi0JaWYgKGVudHJ5ID4gbWFwc2l6ZSkgeworCWVudHJ5ID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEobWFwLCBtYXBzaXplLCAwLCBlbnRyaWVzLCAwKTsKKwlpZiAoZW50cnkgPj0gbWFwc2l6ZSkgewogCQlrZnJlZShjYV9kbWFtYXApOwogCQlnb3RvIG1hcF9yZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykKLQkJc2V0X2JpdChlbnRyeSArIGksIG1hcCk7CisJYml0bWFwX3NldChtYXAsIGVudHJ5LCBlbnRyaWVzKTsKIAogCWJ1c19hZGRyID0gdGlvY2Ffa2Vybi0+Y2FfcGNpYXBfYmFzZSArIChlbnRyeSAqIHBzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmMgYi9hcmNoL2lhNjQveGVuL2lycV94ZW4uYwppbmRleCBmMDQyZTE5Li5hM2ZiN2NmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL2lycV94ZW4uYworKysgYi9hcmNoL2lhNjQveGVuL2lycV94ZW4uYwpAQCAtNjMsMTkgKzYzLDE5IEBACiB9CiAKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgdGltZXJfaXJxKSA9IC0xOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgaXBpX2lycSkgPSAtMTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHJlc2NoZWRfaXJxKSA9IC0xOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgY21jX2lycSkgPSAtMTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGNtY3BfaXJxKSA9IC0xOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgY3BlcF9pcnEpID0gLTE7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCB4ZW5fdGltZXJfaXJxKSA9IC0xOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgeGVuX2lwaV9pcnEpID0gLTE7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCB4ZW5fcmVzY2hlZF9pcnEpID0gLTE7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCB4ZW5fY21jX2lycSkgPSAtMTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHhlbl9jbWNwX2lycSkgPSAtMTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHhlbl9jcGVwX2lycSkgPSAtMTsKICNkZWZpbmUgTkFNRV9TSVpFCTE1Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCB0aW1lcl9uYW1lKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIGlwaV9uYW1lKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIHJlc2NoZWRfbmFtZSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCBjbWNfbmFtZSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCBjbWNwX25hbWUpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGNoYXJbTkFNRV9TSVpFXSwgY3BlcF9uYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIHhlbl90aW1lcl9uYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIHhlbl9pcGlfbmFtZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCB4ZW5fcmVzY2hlZF9uYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIHhlbl9jbWNfbmFtZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltOQU1FX1NJWkVdLCB4ZW5fY21jcF9uYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW05BTUVfU0laRV0sIHhlbl9jcGVwX25hbWUpOwogI3VuZGVmIE5BTUVfU0laRQogCiBzdHJ1Y3Qgc2F2ZWRfaXJxIHsKQEAgLTE0NCw2NCArMTQ0LDY0IEBACiAJaWYgKHhlbl9zbGFiX3JlYWR5KSB7CiAJCXN3aXRjaCAodmVjKSB7CiAJCWNhc2UgSUE2NF9USU1FUl9WRUNUT1I6Ci0JCQlzbnByaW50ZihwZXJfY3B1KHRpbWVyX25hbWUsIGNwdSksCi0JCQkJIHNpemVvZihwZXJfY3B1KHRpbWVyX25hbWUsIGNwdSkpLAorCQkJc25wcmludGYocGVyX2NwdSh4ZW5fdGltZXJfbmFtZSwgY3B1KSwKKwkJCQkgc2l6ZW9mKHBlcl9jcHUoeGVuX3RpbWVyX25hbWUsIGNwdSkpLAogCQkJCSAiJXMlZCIsIGFjdGlvbi0+bmFtZSwgY3B1KTsKIAkJCWlycSA9IGJpbmRfdmlycV90b19pcnFoYW5kbGVyKFZJUlFfSVRDLCBjcHUsCiAJCQkJYWN0aW9uLT5oYW5kbGVyLCBhY3Rpb24tPmZsYWdzLAotCQkJCXBlcl9jcHUodGltZXJfbmFtZSwgY3B1KSwgYWN0aW9uLT5kZXZfaWQpOwotCQkJcGVyX2NwdSh0aW1lcl9pcnEsIGNwdSkgPSBpcnE7CisJCQkJcGVyX2NwdSh4ZW5fdGltZXJfbmFtZSwgY3B1KSwgYWN0aW9uLT5kZXZfaWQpOworCQkJcGVyX2NwdSh4ZW5fdGltZXJfaXJxLCBjcHUpID0gaXJxOwogCQkJYnJlYWs7CiAJCWNhc2UgSUE2NF9JUElfUkVTQ0hFRFVMRToKLQkJCXNucHJpbnRmKHBlcl9jcHUocmVzY2hlZF9uYW1lLCBjcHUpLAotCQkJCSBzaXplb2YocGVyX2NwdShyZXNjaGVkX25hbWUsIGNwdSkpLAorCQkJc25wcmludGYocGVyX2NwdSh4ZW5fcmVzY2hlZF9uYW1lLCBjcHUpLAorCQkJCSBzaXplb2YocGVyX2NwdSh4ZW5fcmVzY2hlZF9uYW1lLCBjcHUpKSwKIAkJCQkgIiVzJWQiLCBhY3Rpb24tPm5hbWUsIGNwdSk7CiAJCQlpcnEgPSBiaW5kX2lwaV90b19pcnFoYW5kbGVyKFhFTl9SRVNDSEVEVUxFX1ZFQ1RPUiwgY3B1LAogCQkJCWFjdGlvbi0+aGFuZGxlciwgYWN0aW9uLT5mbGFncywKLQkJCQlwZXJfY3B1KHJlc2NoZWRfbmFtZSwgY3B1KSwgYWN0aW9uLT5kZXZfaWQpOwotCQkJcGVyX2NwdShyZXNjaGVkX2lycSwgY3B1KSA9IGlycTsKKwkJCQlwZXJfY3B1KHhlbl9yZXNjaGVkX25hbWUsIGNwdSksIGFjdGlvbi0+ZGV2X2lkKTsKKwkJCXBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpID0gaXJxOwogCQkJYnJlYWs7CiAJCWNhc2UgSUE2NF9JUElfVkVDVE9SOgotCQkJc25wcmludGYocGVyX2NwdShpcGlfbmFtZSwgY3B1KSwKLQkJCQkgc2l6ZW9mKHBlcl9jcHUoaXBpX25hbWUsIGNwdSkpLAorCQkJc25wcmludGYocGVyX2NwdSh4ZW5faXBpX25hbWUsIGNwdSksCisJCQkJIHNpemVvZihwZXJfY3B1KHhlbl9pcGlfbmFtZSwgY3B1KSksCiAJCQkJICIlcyVkIiwgYWN0aW9uLT5uYW1lLCBjcHUpOwogCQkJaXJxID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fSVBJX1ZFQ1RPUiwgY3B1LAogCQkJCWFjdGlvbi0+aGFuZGxlciwgYWN0aW9uLT5mbGFncywKLQkJCQlwZXJfY3B1KGlwaV9uYW1lLCBjcHUpLCBhY3Rpb24tPmRldl9pZCk7Ci0JCQlwZXJfY3B1KGlwaV9pcnEsIGNwdSkgPSBpcnE7CisJCQkJcGVyX2NwdSh4ZW5faXBpX25hbWUsIGNwdSksIGFjdGlvbi0+ZGV2X2lkKTsKKwkJCXBlcl9jcHUoeGVuX2lwaV9pcnEsIGNwdSkgPSBpcnE7CiAJCQlicmVhazsKIAkJY2FzZSBJQTY0X0NNQ19WRUNUT1I6Ci0JCQlzbnByaW50ZihwZXJfY3B1KGNtY19uYW1lLCBjcHUpLAotCQkJCSBzaXplb2YocGVyX2NwdShjbWNfbmFtZSwgY3B1KSksCisJCQlzbnByaW50ZihwZXJfY3B1KHhlbl9jbWNfbmFtZSwgY3B1KSwKKwkJCQkgc2l6ZW9mKHBlcl9jcHUoeGVuX2NtY19uYW1lLCBjcHUpKSwKIAkJCQkgIiVzJWQiLCBhY3Rpb24tPm5hbWUsIGNwdSk7CiAJCQlpcnEgPSBiaW5kX3ZpcnFfdG9faXJxaGFuZGxlcihWSVJRX01DQV9DTUMsIGNwdSwKLQkJCQkJCSAgICAgIGFjdGlvbi0+aGFuZGxlciwKLQkJCQkJCSAgICAgIGFjdGlvbi0+ZmxhZ3MsCi0JCQkJCQkgICAgICBwZXJfY3B1KGNtY19uYW1lLCBjcHUpLAotCQkJCQkJICAgICAgYWN0aW9uLT5kZXZfaWQpOwotCQkJcGVyX2NwdShjbWNfaXJxLCBjcHUpID0gaXJxOworCQkJCQkJYWN0aW9uLT5oYW5kbGVyLAorCQkJCQkJYWN0aW9uLT5mbGFncywKKwkJCQkJCXBlcl9jcHUoeGVuX2NtY19uYW1lLCBjcHUpLAorCQkJCQkJYWN0aW9uLT5kZXZfaWQpOworCQkJcGVyX2NwdSh4ZW5fY21jX2lycSwgY3B1KSA9IGlycTsKIAkJCWJyZWFrOwogCQljYXNlIElBNjRfQ01DUF9WRUNUT1I6Ci0JCQlzbnByaW50ZihwZXJfY3B1KGNtY3BfbmFtZSwgY3B1KSwKLQkJCQkgc2l6ZW9mKHBlcl9jcHUoY21jcF9uYW1lLCBjcHUpKSwKKwkJCXNucHJpbnRmKHBlcl9jcHUoeGVuX2NtY3BfbmFtZSwgY3B1KSwKKwkJCQkgc2l6ZW9mKHBlcl9jcHUoeGVuX2NtY3BfbmFtZSwgY3B1KSksCiAJCQkJICIlcyVkIiwgYWN0aW9uLT5uYW1lLCBjcHUpOwogCQkJaXJxID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fQ01DUF9WRUNUT1IsIGNwdSwKLQkJCQkJCSAgICAgYWN0aW9uLT5oYW5kbGVyLAotCQkJCQkJICAgICBhY3Rpb24tPmZsYWdzLAotCQkJCQkJICAgICBwZXJfY3B1KGNtY3BfbmFtZSwgY3B1KSwKLQkJCQkJCSAgICAgYWN0aW9uLT5kZXZfaWQpOwotCQkJcGVyX2NwdShjbWNwX2lycSwgY3B1KSA9IGlycTsKKwkJCQkJCWFjdGlvbi0+aGFuZGxlciwKKwkJCQkJCWFjdGlvbi0+ZmxhZ3MsCisJCQkJCQlwZXJfY3B1KHhlbl9jbWNwX25hbWUsIGNwdSksCisJCQkJCQlhY3Rpb24tPmRldl9pZCk7CisJCQlwZXJfY3B1KHhlbl9jbWNwX2lycSwgY3B1KSA9IGlycTsKIAkJCWJyZWFrOwogCQljYXNlIElBNjRfQ1BFUF9WRUNUT1I6Ci0JCQlzbnByaW50ZihwZXJfY3B1KGNwZXBfbmFtZSwgY3B1KSwKLQkJCQkgc2l6ZW9mKHBlcl9jcHUoY3BlcF9uYW1lLCBjcHUpKSwKKwkJCXNucHJpbnRmKHBlcl9jcHUoeGVuX2NwZXBfbmFtZSwgY3B1KSwKKwkJCQkgc2l6ZW9mKHBlcl9jcHUoeGVuX2NwZXBfbmFtZSwgY3B1KSksCiAJCQkJICIlcyVkIiwgYWN0aW9uLT5uYW1lLCBjcHUpOwogCQkJaXJxID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fQ1BFUF9WRUNUT1IsIGNwdSwKLQkJCQkJCSAgICAgYWN0aW9uLT5oYW5kbGVyLAotCQkJCQkJICAgICBhY3Rpb24tPmZsYWdzLAotCQkJCQkJICAgICBwZXJfY3B1KGNwZXBfbmFtZSwgY3B1KSwKLQkJCQkJCSAgICAgYWN0aW9uLT5kZXZfaWQpOwotCQkJcGVyX2NwdShjcGVwX2lycSwgY3B1KSA9IGlycTsKKwkJCQkJCWFjdGlvbi0+aGFuZGxlciwKKwkJCQkJCWFjdGlvbi0+ZmxhZ3MsCisJCQkJCQlwZXJfY3B1KHhlbl9jcGVwX25hbWUsIGNwdSksCisJCQkJCQlhY3Rpb24tPmRldl9pZCk7CisJCQlwZXJfY3B1KHhlbl9jcGVwX2lycSwgY3B1KSA9IGlycTsKIAkJCWJyZWFrOwogCQljYXNlIElBNjRfQ1BFX1ZFQ1RPUjoKIAkJY2FzZSBJQTY0X01DQV9SRU5ERVpfVkVDVE9SOgpAQCAtMjc1LDMwICsyNzUsMzMgQEAKIAogCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQpIHsKIAkJLyogVW5yZWdpc3RlciBldnRjaG4uICAqLwotCQlpZiAocGVyX2NwdShjcGVwX2lycSwgY3B1KSA+PSAwKSB7Ci0JCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoY3BlcF9pcnEsIGNwdSksIE5VTEwpOwotCQkJcGVyX2NwdShjcGVwX2lycSwgY3B1KSA9IC0xOworCQlpZiAocGVyX2NwdSh4ZW5fY3BlcF9pcnEsIGNwdSkgPj0gMCkgeworCQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9jcGVwX2lycSwgY3B1KSwKKwkJCQkJICAgICAgIE5VTEwpOworCQkJcGVyX2NwdSh4ZW5fY3BlcF9pcnEsIGNwdSkgPSAtMTsKIAkJfQotCQlpZiAocGVyX2NwdShjbWNwX2lycSwgY3B1KSA+PSAwKSB7Ci0JCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoY21jcF9pcnEsIGNwdSksIE5VTEwpOwotCQkJcGVyX2NwdShjbWNwX2lycSwgY3B1KSA9IC0xOworCQlpZiAocGVyX2NwdSh4ZW5fY21jcF9pcnEsIGNwdSkgPj0gMCkgeworCQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9jbWNwX2lycSwgY3B1KSwKKwkJCQkJICAgICAgIE5VTEwpOworCQkJcGVyX2NwdSh4ZW5fY21jcF9pcnEsIGNwdSkgPSAtMTsKIAkJfQotCQlpZiAocGVyX2NwdShjbWNfaXJxLCBjcHUpID49IDApIHsKLQkJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShjbWNfaXJxLCBjcHUpLCBOVUxMKTsKLQkJCXBlcl9jcHUoY21jX2lycSwgY3B1KSA9IC0xOworCQlpZiAocGVyX2NwdSh4ZW5fY21jX2lycSwgY3B1KSA+PSAwKSB7CisJCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoeGVuX2NtY19pcnEsIGNwdSksIE5VTEwpOworCQkJcGVyX2NwdSh4ZW5fY21jX2lycSwgY3B1KSA9IC0xOwogCQl9Ci0JCWlmIChwZXJfY3B1KGlwaV9pcnEsIGNwdSkgPj0gMCkgewotCQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KGlwaV9pcnEsIGNwdSksIE5VTEwpOwotCQkJcGVyX2NwdShpcGlfaXJxLCBjcHUpID0gLTE7CisJCWlmIChwZXJfY3B1KHhlbl9pcGlfaXJxLCBjcHUpID49IDApIHsKKwkJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdSh4ZW5faXBpX2lycSwgY3B1KSwgTlVMTCk7CisJCQlwZXJfY3B1KHhlbl9pcGlfaXJxLCBjcHUpID0gLTE7CiAJCX0KLQkJaWYgKHBlcl9jcHUocmVzY2hlZF9pcnEsIGNwdSkgPj0gMCkgewotCQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHJlc2NoZWRfaXJxLCBjcHUpLAotCQkJCQkJTlVMTCk7Ci0JCQlwZXJfY3B1KHJlc2NoZWRfaXJxLCBjcHUpID0gLTE7CisJCWlmIChwZXJfY3B1KHhlbl9yZXNjaGVkX2lycSwgY3B1KSA+PSAwKSB7CisJCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpLAorCQkJCQkgICAgICAgTlVMTCk7CisJCQlwZXJfY3B1KHhlbl9yZXNjaGVkX2lycSwgY3B1KSA9IC0xOwogCQl9Ci0JCWlmIChwZXJfY3B1KHRpbWVyX2lycSwgY3B1KSA+PSAwKSB7Ci0JCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUodGltZXJfaXJxLCBjcHUpLCBOVUxMKTsKLQkJCXBlcl9jcHUodGltZXJfaXJxLCBjcHUpID0gLTE7CisJCWlmIChwZXJfY3B1KHhlbl90aW1lcl9pcnEsIGNwdSkgPj0gMCkgeworCQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl90aW1lcl9pcnEsIGNwdSksCisJCQkJCSAgICAgICBOVUxMKTsKKwkJCXBlcl9jcHUoeGVuX3RpbWVyX2lycSwgY3B1KSA9IC0xOwogCQl9CiAJfQogCXJldHVybiBOT1RJRllfT0s7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL3RpbWUuYyBiL2FyY2gvaWE2NC94ZW4vdGltZS5jCmluZGV4IGRiZWFkYjkuLmMxYzU0NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC94ZW4vdGltZS5jCisrKyBiL2FyY2gvaWE2NC94ZW4vdGltZS5jCkBAIC0zNCwxNSArMzQsMTUgQEAKIAogI2luY2x1ZGUgIi4uL2tlcm5lbC9mc3lzY2FsbF9ndG9kX2RhdGEuaCIKIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywgcnVuc3RhdGUpOwotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJvY2Vzc2VkX3N0b2xlbl90aW1lKTsKLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHByb2Nlc3NlZF9ibG9ja2VkX3RpbWUpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHhlbl9ydW5zdGF0ZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgeGVuX3N0b2xlbl90aW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB4ZW5fYmxvY2tlZF90aW1lKTsKIAogLyogdGFrZW4gZnJvbSBpMzg2L2tlcm5lbC90aW1lLXhlbi5jICovCiBzdGF0aWMgdm9pZCB4ZW5faW5pdF9taXNzaW5nX3RpY2tzX2FjY291bnRpbmcoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9yZWdpc3Rlcl9ydW5zdGF0ZV9tZW1vcnlfYXJlYSBhcmVhOwotCXN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8gKnJ1bnN0YXRlID0gJnBlcl9jcHUocnVuc3RhdGUsIGNwdSk7CisJc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyAqcnVuc3RhdGUgPSAmcGVyX2NwdSh4ZW5fcnVuc3RhdGUsIGNwdSk7CiAJaW50IHJjOwogCiAJbWVtc2V0KHJ1bnN0YXRlLCAwLCBzaXplb2YoKnJ1bnN0YXRlKSk7CkBAIC01Miw4ICs1Miw4IEBACiAJCQkJJmFyZWEpOwogCVdBUk5fT04ocmMgJiYgcmMgIT0gLUVOT1NZUyk7CiAKLQlwZXJfY3B1KHByb2Nlc3NlZF9ibG9ja2VkX3RpbWUsIGNwdSkgPSBydW5zdGF0ZS0+dGltZVtSVU5TVEFURV9ibG9ja2VkXTsKLQlwZXJfY3B1KHByb2Nlc3NlZF9zdG9sZW5fdGltZSwgY3B1KSA9IHJ1bnN0YXRlLT50aW1lW1JVTlNUQVRFX3J1bm5hYmxlXQorCXBlcl9jcHUoeGVuX2Jsb2NrZWRfdGltZSwgY3B1KSA9IHJ1bnN0YXRlLT50aW1lW1JVTlNUQVRFX2Jsb2NrZWRdOworCXBlcl9jcHUoeGVuX3N0b2xlbl90aW1lLCBjcHUpID0gcnVuc3RhdGUtPnRpbWVbUlVOU1RBVEVfcnVubmFibGVdCiAJCQkJCSAgICArIHJ1bnN0YXRlLT50aW1lW1JVTlNUQVRFX29mZmxpbmVdOwogfQogCkBAIC02OCw3ICs2OCw3IEBACiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7CiAKLQlzdGF0ZSA9ICZfX2dldF9jcHVfdmFyKHJ1bnN0YXRlKTsKKwlzdGF0ZSA9ICZfX2dldF9jcHVfdmFyKHhlbl9ydW5zdGF0ZSk7CiAKIAkvKgogCSAqIFRoZSBydW5zdGF0ZSBpbmZvIGlzIGFsd2F5cyB1cGRhdGVkIGJ5IHRoZSBoeXBlcnZpc29yIG9uCkBAIC0xMDMsMTIgKzEwMywxMiBAQAogCSAqIFRoaXMgZnVuY3Rpb24ganVzdCBjaGVja3MgYW5kIHJlamVjdCB0aGlzIGVmZmVjdC4KIAkgKi8KIAlpZiAoIXRpbWVfYWZ0ZXJfZXEocnVuc3RhdGUudGltZVtSVU5TVEFURV9ibG9ja2VkXSwKLQkJCSAgIHBlcl9jcHUocHJvY2Vzc2VkX2Jsb2NrZWRfdGltZSwgY3B1KSkpCisJCQkgICBwZXJfY3B1KHhlbl9ibG9ja2VkX3RpbWUsIGNwdSkpKQogCQlibG9ja2VkID0gMDsKIAogCWlmICghdGltZV9hZnRlcl9lcShydW5zdGF0ZS50aW1lW1JVTlNUQVRFX3J1bm5hYmxlXSArCiAJCQkgICBydW5zdGF0ZS50aW1lW1JVTlNUQVRFX29mZmxpbmVdLAotCQkJICAgcGVyX2NwdShwcm9jZXNzZWRfc3RvbGVuX3RpbWUsIGNwdSkpKQorCQkJICAgcGVyX2NwdSh4ZW5fc3RvbGVuX3RpbWUsIGNwdSkpKQogCQlzdG9sZW4gPSAwOwogCiAJaWYgKCF0aW1lX2FmdGVyKGRlbHRhX2l0bSArIG5ld19pdG0sIGlhNjRfZ2V0X2l0YygpKSkKQEAgLTE0Nyw4ICsxNDcsOCBAQAogCQl9IGVsc2UgewogCQkJbG9jYWxfY3B1X2RhdGEtPml0bV9uZXh0ID0gZGVsdGFfaXRtICsgbmV3X2l0bTsKIAkJfQotCQlwZXJfY3B1KHByb2Nlc3NlZF9zdG9sZW5fdGltZSwgY3B1KSArPSBOU19QRVJfVElDSyAqIHN0b2xlbjsKLQkJcGVyX2NwdShwcm9jZXNzZWRfYmxvY2tlZF90aW1lLCBjcHUpICs9IE5TX1BFUl9USUNLICogYmxvY2tlZDsKKwkJcGVyX2NwdSh4ZW5fc3RvbGVuX3RpbWUsIGNwdSkgKz0gTlNfUEVSX1RJQ0sgKiBzdG9sZW47CisJCXBlcl9jcHUoeGVuX2Jsb2NrZWRfdGltZSwgY3B1KSArPSBOU19QRVJfVElDSyAqIGJsb2NrZWQ7CiAJfQogCXJldHVybiBkZWx0YV9pdG07CiB9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMGNjMzRjOS4uMmY4NTQxMiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTAyLDcgKzEwMiw2IEBACiAgKi8KICNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkoX3IpLT5yMCA9IDAKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZGRlZDkyMy4uMTc5YTA2NCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTI0LDE5ICsyNCwxOSBAQAogICogV2UgbWFrZSBubyBmYWlybmVzcyBhc3N1bXB0aW9ucy4gVGhleSBoYXZlIGEgY29zdC4KICAqLwogCi0jZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKHgpCQkoKih2b2xhdGlsZSBpbnQgKikoJih4KS0+c2xvY2spIDw9IDApCi0jZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCi0jZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoeCkgXAotCQlkbyB7IGNwdV9yZWxheCgpOyB9IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSkKKyNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KQkJKCoodm9sYXRpbGUgaW50ICopKCYoeCktPnNsb2NrKSA8PSAwKQorI2RlZmluZSBhcmNoX3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9zcGluX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KHgpIFwKKwkJZG8geyBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZCh4KSkKIAogLyoqCi0gKiBfX3Jhd19zcGluX3RyeWxvY2sgLSBUcnkgc3BpbiBsb2NrIGFuZCByZXR1cm4gYSByZXN1bHQKKyAqIGFyY2hfc3Bpbl90cnlsb2NrIC0gVHJ5IHNwaW4gbG9jayBhbmQgcmV0dXJuIGEgcmVzdWx0CiAgKiBAbG9jazogUG9pbnRlciB0byB0aGUgbG9jayB2YXJpYWJsZQogICoKLSAqIF9fcmF3X3NwaW5fdHJ5bG9jaygpIHRyaWVzIHRvIGdldCB0aGUgbG9jayBhbmQgcmV0dXJucyBhIHJlc3VsdC4KKyAqIGFyY2hfc3Bpbl90cnlsb2NrKCkgdHJpZXMgdG8gZ2V0IHRoZSBsb2NrIGFuZCByZXR1cm5zIGEgcmVzdWx0LgogICogT24gdGhlIG0zMnIsIHRoZSByZXN1bHQgdmFsdWUgaXMgMSAoPSBTdWNjZXNzKSBvciAwICg9IEZhaWx1cmUpLgogICovCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IG9sZHZhbDsKIAl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CkBAIC01MCw3ICs1MCw3IEBACiAJICogfQogCSAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiMgX19yYXdfc3Bpbl90cnlsb2NrCQlcblx0IgorCQkiIyBhcmNoX3NwaW5fdHJ5bG9jawkJXG5cdCIKIAkJImxkaQklMSwgIzA7CQkJXG5cdCIKIAkJIm12ZmMJJTIsIHBzdzsJCVxuXHQiCiAJCSJjbHJwc3cJIzB4NDAgLT4gbm9wOwkJXG5cdCIKQEAgLTY5LDcgKzY5LDcgQEAKIAlyZXR1cm4gKG9sZHZhbCA+IDApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDAsIHRtcDE7CiAKQEAgLTg0LDcgKzg0LDcgQEAKIAkgKiB9CiAJICovCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiIyBfX3Jhd19zcGluX2xvY2sJCVxuXHQiCisJCSIjIGFyY2hfc3Bpbl9sb2NrCQlcblx0IgogCQkiLmZpbGxpbnNuCQkJXG4iCiAJCSIxOgkJCQlcblx0IgogCQkibXZmYwklMSwgcHN3OwkJXG5cdCIKQEAgLTExMSw3ICsxMTEsNyBAQAogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAltYigpOwogCWxvY2stPnNsb2NrID0gMTsKQEAgLTE0MCwxNSArMTQwLDE1IEBACiAgKiByZWFkX2Nhbl9sb2NrIC0gd291bGQgcmVhZF90cnlsb2NrKCkgc3VjY2VlZD8KICAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgogICovCi0jZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkgKChpbnQpKHgpLT5sb2NrID4gMCkKKyNkZWZpbmUgYXJjaF9yZWFkX2Nhbl9sb2NrKHgpICgoaW50KSh4KS0+bG9jayA+IDApCiAKIC8qKgogICogd3JpdGVfY2FuX2xvY2sgLSB3b3VsZCB3cml0ZV90cnlsb2NrKCkgc3VjY2VlZD8KICAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgogICovCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHgpICgoeCktPmxvY2sgPT0gUldfTE9DS19CSUFTKQorI2RlZmluZSBhcmNoX3dyaXRlX2Nhbl9sb2NrKHgpICgoeCktPmxvY2sgPT0gUldfTE9DS19CSUFTKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAwLCB0bXAxOwogCkBAIC0xOTksNyArMTk5LDcgQEAKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDAsIHRtcDEsIHRtcDI7CiAKQEAgLTI1Miw3ICsyNTIsNyBAQAogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAwLCB0bXAxOwogCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAwLCB0bXAxLCB0bXAyOwogCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqbG9jaykKIHsKIAlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QqKWxvY2s7CiAJaWYgKGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA+PSAwKQpAQCAtMzA3LDcgKzMwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKIAlpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdChSV19MT0NLX0JJQVMsIGNvdW50KSkKQEAgLTMxNiwxMSArMzE2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3dyaXRlX2xvY2sobG9jaykKIAotI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAKICNlbmRpZgkvKiBfQVNNX00zMlJfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCA4M2Y1MjEwLi45MmUyNzY3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNywxNyArNywxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgaW50IHNsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKK30gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDEgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgMSB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSBpbnQgbG9jazsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCiAjZGVmaW5lIFJXX0xPQ0tfQklBUwkJCTB4MDEwMDAwMDAKICNkZWZpbmUgUldfTE9DS19CSUFTX1NUUgkJIjB4MDEwMDAwMDAiCiAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyBSV19MT0NLX0JJQVMgfQorI2RlZmluZSBfX0FSQ0hfUldfTE9DS19VTkxPQ0tFRAkJeyBSV19MT0NLX0JJQVMgfQogCiAjZW5kaWYgLyogX0FTTV9NMzJSX1NQSU5MT0NLX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCmluZGV4IDhkZmQzMWUuLjNjNzFmNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwpAQCAtNDAsNyArNDAsNyBAQAogCX0KIAogCWlmIChpIDwgTlJfSVJRUykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwogCQlpZiAoIWFjdGlvbikKIAkJCWdvdG8gc2tpcDsKQEAgLTU5LDcgKzU5LDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMGIwZjQ5ZS4uMDFjMTkzZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNTksNyArNTksNiBAQAogICAgaXMgYWN0dWFsbHkgdXNlZCBvbiBBU1YuICAqLwogI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCV9yLT5hMSA9IDAKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2lmbmRlZiBDT05GSUdfU1VOMwogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmgKaW5kZXggZmU2MGUxYS4uYWNhMGUyOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9tbS5oCkBAIC04Myw5ICs4Myw5IEBACiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQgKCgodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCBLTUFQX1NUQVJUCiAjZWxzZQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX3ZtYWxsb2NfZW5kOwogI2RlZmluZSBWTUFMTE9DX1NUQVJUIDB4MGY4MDAwMDAKLSNkZWZpbmUgVk1BTExPQ19FTkQgdm1hbGxvY19lbmQKKyNkZWZpbmUgVk1BTExPQ19FTkQgbTY4a192bWFsbG9jX2VuZAogI2VuZGlmIC8qIENPTkZJR19TVU4zICovCiAKIC8qIHplcm8gcGFnZSB1c2VkIGZvciB1bmluaXRpYWxpemVkIHN0dWZmICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2hlYWQuUyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCmluZGV4IDg2ZWRiNWYuLmVmNTQxMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCkBAIC0xOTYsNyArMTk2LDcgQEAKICAqIGZvciB0aGVtIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXkgbWVhbi4KICAqCiAgKiBDT05GSUdfeHh4OglUaGVzZSBhcmUgdGhlIG9idmlvdXMgbWFjaGluZSBjb25maWd1cmF0aW9uIGRlZmluZXMgY3JlYXRlZAotICogZHVyaW5nIGNvbmZpZ3VyYXRpb24uICBUaGVzZSBhcmUgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmguCisgKiBkdXJpbmcgY29uZmlndXJhdGlvbi4gIFRoZXNlIGFyZSBkZWZpbmVkIGluIGF1dG9jb25mLmguCiAgKgogICogQ09OU09MRToJVGhlcmUgaXMgc3VwcG9ydCBmb3IgaGVhZC5TIGNvbnNvbGUgaW4gdGhpcyBmaWxlLiAgVGhpcwogICogY29uc29sZSBjYW4gdGFsayB0byBhIE1hYyBmcmFtZSBidWZmZXIsIGJ1dCBjb3VsZCBlYXNpbHkgYmUgZXh0cmFwb2xhdGVkCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9tbXVfZW11LmMgYi9hcmNoL202OGsvc3VuMy9tbXVfZW11LmMKaW5kZXggM2NkMTkzOS4uOTRmODFlYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvbW11X2VtdS5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL21tdV9lbXUuYwpAQCAtNDUsOCArNDUsOCBAQAogKiogR2xvYmFscwogKi8KIAotdW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDsKLUVYUE9SVF9TWU1CT0wodm1hbGxvY19lbmQpOwordW5zaWduZWQgbG9uZyBtNjhrX3ZtYWxsb2NfZW5kOworRVhQT1JUX1NZTUJPTChtNjhrX3ZtYWxsb2NfZW5kKTsKIAogdW5zaWduZWQgbG9uZyBwbWVnX3ZhZGRyW1BNRUdTX05VTV07CiB1bnNpZ25lZCBjaGFyIHBtZWdfYWxsb2NbUE1FR1NfTlVNXTsKQEAgLTE3Miw4ICsxNzIsOCBAQAogI2VuZGlmCiAJCQkvLyB0aGUgbG93ZXN0IG1hcHBpbmcgaGVyZSBpcyB0aGUgZW5kIG9mIG91cgogCQkJLy8gdm1hbGxvYyByZWdpb24KLQkJCWlmKCF2bWFsbG9jX2VuZCkKLQkJCQl2bWFsbG9jX2VuZCA9IHNlZzsKKwkJCWlmICghbTY4a192bWFsbG9jX2VuZCkKKwkJCQltNjhrX3ZtYWxsb2NfZW5kID0gc2VnOwogCiAJCQkvLyBtYXJrIHRoZSBzZWdtYXAgYWxsb2MnZCwgYW5kIHJlc2VydmUgYW55CiAJCQkvLyBvZiB0aGUgZmlyc3QgMHhiZmYgcGFnZXMgdGhlIGhhcmR3YXJlIGlzCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCmluZGV4IGJiZDgzMjcuLmZkNTNlNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCkBAIC02LDggKzYsMTUgQEAKIGNvbmZpZyBNSUNST0JMQVpFCiAJZGVmX2Jvb2wgeQogCXNlbGVjdCBIQVZFX0xNQgorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCisJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKKwlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgorCXNlbGVjdCBIQVZFX09QUk9GSUxFCisJc2VsZWN0IFRSQUNJTkdfU1VQUE9SVAogCiBjb25maWcgU1dBUAogCWRlZl9ib29sIG4KQEAgLTU3LDEyICs2NCwyNCBAQAogY29uZmlnIEdFTkVSSUNfQ1NVTQogCWRlZl9ib29sIHkKIAorY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAorCWRlZl9ib29sIHkKKworY29uZmlnIExPQ0tERVBfU1VQUE9SVAorCWRlZl9ib29sIHkKKworY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisJZGVmX2Jvb2wgeQorCiBjb25maWcgUENJCiAJZGVmX2Jvb2wgbgogCiBjb25maWcgTk9fRE1BCiAJZGVmX2Jvb2wgeQogCitjb25maWcgRFRDCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcuZGVidWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZwppbmRleCAyNDJjZDM1Li45ZGM3MDhhIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZy5kZWJ1ZwpAQCAtMyw2ICszLDkgQEAKIAogbWVudSAiS2VybmVsIGhhY2tpbmciCiAKK2NvbmZpZyBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCiBjb25maWcgRUFSTFlfUFJJTlRLCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUKaW5kZXggMzQxODczNS4uZDJkNmNmYyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL01ha2VmaWxlCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZQpAQCAtNTEsNiArNTEsOCBAQAogY29yZS15ICs9IGFyY2gvbWljcm9ibGF6ZS9tbS8KIGNvcmUteSArPSBhcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vCiAKK2RyaXZlcnMtJChDT05GSUdfT1BST0ZJTEUpICs9IGFyY2gvbWljcm9ibGF6ZS9vcHJvZmlsZS8KKwogYm9vdCA6PSBhcmNoL21pY3JvYmxhemUvYm9vdAogCiAjIEFyZSB3ZSBtYWtpbmcgYSBzaW1wbGVJbWFnZS48Ym9hcmRuYW1lPiB0YXJnZXQ/IElmIHNvLCBjcmFjayBvdXQgdGhlIGJvYXJkbmFtZQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQppbmRleCAyMWYxMzMyLi45MDJjZjk4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQpAQCAtMiwxMSArMiwxMyBAQAogIyBhcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQogIwogCitNS0lNQUdFIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9ta3Vib290LnNoCisKIG9iai15ICs9IGxpbmtlZF9kdGIubwogCiB0YXJnZXRzIDo9IGxpbnV4LmJpbiBsaW51eC5iaW4uZ3ogc2ltcGxlSW1hZ2UuJQogCi1PQkpDT1BZRkxBR1NfbGludXguYmluICA6PSAtTyBiaW5hcnkKK09CSkNPUFlGTEFHUyA6PSAtTyBiaW5hcnkKIAogIyBXaGVyZSB0aGUgRFRTIGZpbGVzIGxpdmUKIGR0c3RyZWUgICAgICAgICA6PSAkKHNyY3RyZWUpLyQoc3JjKS9kdHMKQEAgLTI0LDYgKzI2LDcgQEAKIAlbIC1uICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpIF0gJiYgWyAhIC1lICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpIF0gJiYgXAogCXRvdWNoICQoQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UpIHx8IGVjaG8gIk5vIENQSU8gaW1hZ2UiCiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UpCiAJQGVjaG8gJ0tlcm5lbDogJEAgaXMgcmVhZHknICcgKCMnYGNhdCAudmVyc2lvbmAnKScKIAogJChvYmopL2xpbnV4LmJpbi5nejogJChvYmopL2xpbnV4LmJpbiBGT1JDRQpAQCAtMzYsOCArMzksMTYgQEAKIHF1aWV0X2NtZF9zdHJpcCA9IFNUUklQICAgJEAKICAgICAgIGNtZF9zdHJpcCA9ICQoU1RSSVApIC1LIF9zdGFydCAtSyBfZW5kIC1LIF9fbG9nX2J1ZiAtSyBfZmR0X3N0YXJ0IHZtbGludXggLW8gJEAKIAorcXVpZXRfY21kX3VpbWFnZSA9IFVJTUFHRSAgJEAudWIKKyAgICAgIGNtZF91aW1hZ2UgPSAkKENPTkZJR19TSEVMTCkgJChNS0lNQUdFKSAtQSBtaWNyb2JsYXplIC1PIGxpbnV4IC1UIGtlcm5lbCBcCisgICAgICAgICAgICAgICAgICAgLUMgbm9uZSAtbiAnTGludXgtJChLRVJORUxSRUxFQVNFKScgXAorICAgICAgICAgICAgICAgICAgIC1hICQoQ09ORklHX0tFUk5FTF9CQVNFX0FERFIpIC1lICQoQ09ORklHX0tFUk5FTF9CQVNFX0FERFIpIFwKKyAgICAgICAgICAgICAgICAgICAtZCAkQCAkQC51YgorCiAkKG9iaikvc2ltcGxlSW1hZ2UuJTogdm1saW51eCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGNwLC51bnN0cmlwKQorCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlKQogCSQoY2FsbCBpZl9jaGFuZ2VkLHN0cmlwKQogCUBlY2hvICdLZXJuZWw6ICRAIGlzIHJlYWR5JyAnICgjJ2BjYXQgLnZlcnNpb25gJyknCiAKQEAgLTUzLDQgKzY0LDQgQEAKIAogY2xlYW4ta2VybmVsICs9IGxpbnV4LmJpbiBsaW51eC5iaW4uZ3ogc2ltcGxlSW1hZ2UuKgogCi1jbGVhbi1maWxlcyArPSAqLmR0YgorY2xlYW4tZmlsZXMgKz0gKi5kdGIgc2ltcGxlSW1hZ2UuKi51bnN0cmlwCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IGMyMDljNDcuLmU1MjIxMDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0yMSwyMCArMjEsNCBAQAogCiAjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwlMMV9DQUNIRV9CWVRFUwogCi12b2lkIF9lbmFibGVfaWNhY2hlKHZvaWQpOwotdm9pZCBfZGlzYWJsZV9pY2FjaGUodm9pZCk7Ci12b2lkIF9pbnZhbGlkYXRlX2ljYWNoZSh1bnNpZ25lZCBpbnQgYWRkcik7Ci0KLSNkZWZpbmUgX19lbmFibGVfaWNhY2hlKCkJCV9lbmFibGVfaWNhY2hlKCkKLSNkZWZpbmUgX19kaXNhYmxlX2ljYWNoZSgpCQlfZGlzYWJsZV9pY2FjaGUoKQotI2RlZmluZSBfX2ludmFsaWRhdGVfaWNhY2hlKGFkZHIpCV9pbnZhbGlkYXRlX2ljYWNoZShhZGRyKQotCi12b2lkIF9lbmFibGVfZGNhY2hlKHZvaWQpOwotdm9pZCBfZGlzYWJsZV9kY2FjaGUodm9pZCk7Ci12b2lkIF9pbnZhbGlkYXRlX2RjYWNoZSh1bnNpZ25lZCBpbnQgYWRkcik7Ci0KLSNkZWZpbmUgX19lbmFibGVfZGNhY2hlKCkJCV9lbmFibGVfZGNhY2hlKCkKLSNkZWZpbmUgX19kaXNhYmxlX2RjYWNoZSgpCQlfZGlzYWJsZV9kY2FjaGUoKQotI2RlZmluZSBfX2ludmFsaWRhdGVfZGNhY2hlKGFkZHIpCV9pbnZhbGlkYXRlX2RjYWNoZShhZGRyKQotCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDA4ODA3NmUuLmE2ZWRkMzU2IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE4LDYgKzE4LDggQEAKIC8qIFNvbWVib2R5IGRlcGVuZHMgb24gdGhpczsgc2lnaC4uLiAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKKy8qIExvb2sgYXQgRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgKi8KKwogLyoKICAqIENhY2hlIGhhbmRsaW5nIGZ1bmN0aW9ucy4KICAqIE1pY3JvYmxhemUgaGFzIGEgd3JpdGUtdGhyb3VnaCBkYXRhIGNhY2hlLCBtZWFuaW5nIHRoYXQgdGhlIGRhdGEgY2FjaGUKQEAgLTI3LDc4ICsyOSw4MSBAQAogICogaW5zdHJ1Y3Rpb24gY2FjaGUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGZldGNoIG9sZCwgYmFkIGNvZGUuCiAgKi8KIAorLyogc3RydWN0IGNhY2hlLCBkPWRjYWNoZSwgaT1pY2FjaGUsIGZsID0gZmx1c2gsIGl2ID0gaW52YWxpZGF0ZSwKKyAqIHN1ZmZpeCByID0gcmFuZ2UgKi8KK3N0cnVjdCBzY2FjaGUgeworCS8qIGljYWNoZSAqLworCXZvaWQgKCppZSkodm9pZCk7IC8qIGVuYWJsZSAqLworCXZvaWQgKCppZCkodm9pZCk7IC8qIGRpc2FibGUgKi8KKwl2b2lkICgqaWZsKSh2b2lkKTsgLyogZmx1c2ggKi8KKwl2b2lkICgqaWZscikodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpOworCXZvaWQgKCppaW4pKHZvaWQpOyAvKiBpbnZhbGlkYXRlICovCisJdm9pZCAoKmlpbnIpKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKTsKKwkvKiBkY2FjaGUgKi8KKwl2b2lkICgqZGUpKHZvaWQpOyAvKiBlbmFibGUgKi8KKwl2b2lkICgqZGQpKHZvaWQpOyAvKiBkaXNhYmxlICovCisJdm9pZCAoKmRmbCkodm9pZCk7IC8qIGZsdXNoICovCisJdm9pZCAoKmRmbHIpKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKTsKKwl2b2lkICgqZGluKSh2b2lkKTsgLyogaW52YWxpZGF0ZSAqLworCXZvaWQgKCpkaW5yKSh1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYik7Cit9OworCisvKiBtaWNyb2JsYXplIGNhY2hlICovCitleHRlcm4gc3RydWN0IHNjYWNoZSAqbWJjOworCit2b2lkIG1pY3JvYmxhemVfY2FjaGVfaW5pdCh2b2lkKTsKKworI2RlZmluZSBlbmFibGVfaWNhY2hlKCkJCQkJCW1iYy0+aWUoKTsKKyNkZWZpbmUgZGlzYWJsZV9pY2FjaGUoKQkJCQltYmMtPmlkKCk7CisjZGVmaW5lIGZsdXNoX2ljYWNoZSgpCQkJCQltYmMtPmlmbCgpOworI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCQltYmMtPmlmbHIoc3RhcnQsIGVuZCk7CisjZGVmaW5lIGludmFsaWRhdGVfaWNhY2hlKCkJCQkJbWJjLT5paW4oKTsKKyNkZWZpbmUgaW52YWxpZGF0ZV9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCW1iYy0+aWlucihzdGFydCwgZW5kKTsKKworCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGcsIGFkciwgbGVuKQlmbHVzaF9pY2FjaGUoKTsKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwZykJCQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZW5hYmxlX2RjYWNoZSgpCQkJCQltYmMtPmRlKCk7CisjZGVmaW5lIGRpc2FibGVfZGNhY2hlKCkJCQkJbWJjLT5kZCgpOwogLyogRklYTUUgZm9yIExMLXRlbWFjIGRyaXZlciAqLwotI2RlZmluZSBpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZShzdGFydCwgZW5kKSBcCi0JCQlfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCisjZGVmaW5lIGludmFsaWRhdGVfZGNhY2hlKCkJCQkJbWJjLT5kaW4oKTsKKyNkZWZpbmUgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCW1iYy0+ZGlucihzdGFydCwgZW5kKTsKKyNkZWZpbmUgZmx1c2hfZGNhY2hlKCkJCQkJCW1iYy0+ZGZsKCk7CisjZGVmaW5lIGZsdXNoX2RjYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJCW1iYy0+ZGZscihzdGFydCwgZW5kKTsKIAotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCV9faW52YWxpZGF0ZV9jYWNoZV9hbGwoKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJX19pbnZhbGlkYXRlX2NhY2hlX2FsbCgpCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9yYW5nZShzdGFydCwgZW5kKQlfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCiAjZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAwCisvKiBELWNhY2hlIGFsaWFzaW5nIHByb2JsZW0gY2FuJ3QgaGFwcGVuIC0gY2FjaGUgaXMgYmV0d2VlbiBNTVUgYW5kIHJhbSAqLwogI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQogCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgbGVuKQlfX2ludmFsaWRhdGVfaWNhY2hlX3JhbmdlKHN0YXJ0LCBsZW4pCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNpZm5kZWYgQ09ORklHX01NVQotIyBkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RhcnQsIGxlbikJZG8geyB9IHdoaWxlICgwKQotI2Vsc2UKLSMgZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGcsIGFkciwgbGVuKSBfX2ludmFsaWRhdGVfaWNhY2hlX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCiAKLSMgZGVmaW5lIGZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2UpCQlkbyB7IH0gd2hpbGUgKDApCi0KLSMgZGVmaW5lIGZsdXNoX2ljYWNoZSgpCQkJX19pbnZhbGlkYXRlX2ljYWNoZV9hbGwoKQotIyBkZWZpbmUgZmx1c2hfY2FjaGVfc2lndHJhbXAodmFkZHIpIFwKLQkJCV9faW52YWxpZGF0ZV9pY2FjaGVfcmFuZ2UodmFkZHIsIHZhZGRyICsgOCkKLQotIyBkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQotCi0jIGRlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorLyogTVM6IGtnZGIgY29kZSB1c2UgdGhpcyBtYWNybywgd3JvbmcgbGVuIHdpdGggRkxBU0ggKi8KKyNpZiAwCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGxlbikJewlcCisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCkgKHN0YXJ0KSwgKHVuc2lnbmVkKSAoc3RhcnQpICsgKGxlbikpOyBcCisJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCkgKHN0YXJ0KSwgKHVuc2lnbmVkKSAoc3RhcnQpICsgKGxlbikpOyBcCit9CiAjZW5kaWYKIAotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBsZW4pIGRvIHsgfSB3aGlsZSAoMCkKIAotc3RydWN0IHBhZ2U7Ci1zdHJ1Y3QgbW1fc3RydWN0Owotc3RydWN0IHZtX2FyZWFfc3RydWN0OwotCi0vKiBzZWUgYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jYWNoZS5jICovCi1leHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX2FsbCh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQl1bnNpZ25lZCBsb25nIGFkciwgaW50IGxlbik7Ci1leHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfY2FjaGVfc2lndHJhbXAodW5zaWduZWQgbG9uZyBhZGRyKTsKLQotZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZV9hbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLWV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJdW5zaWduZWQgbG9uZyBhZHIsIGludCBsZW4pOwotCi1leHRlcm4gaW5saW5lIHZvaWQgX19pbnZhbGlkYXRlX2NhY2hlX2FsbCh2b2lkKQotewotCV9faW52YWxpZGF0ZV9pY2FjaGVfYWxsKCk7Ci0JX19pbnZhbGlkYXRlX2RjYWNoZV9hbGwoKTsKLX0KLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi1kbyB7IG1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKTsgXAotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQpIChkc3QpLCAodW5zaWduZWQpIChkc3QpICsgKGxlbikpOyBcCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCQlcCitkbyB7CQkJCQkJCQkJXAorCW1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKTsJCQkJCVwKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkKSAoZHN0KSwgKHVuc2lnbmVkKSAoZHN0KSArIChsZW4pKTsJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLQltZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSkKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKQkJXAorZG8gewkJCQkJCQkJCVwKKwltZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSk7CQkJCQlcCit9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2NwdWluZm8uaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9jcHVpbmZvLmgKaW5kZXggNTJmMjhmNi4uYjRmNWNhMyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2NwdWluZm8uaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vY3B1aW5mby5oCkBAIC00Myw3ICs0Myw3IEBACiAJdTMyIHVzZV9pY2FjaGU7CiAJdTMyIGljYWNoZV90YWdiaXRzOwogCXUzMiBpY2FjaGVfd3JpdGU7Ci0JdTMyIGljYWNoZV9saW5lOworCXUzMiBpY2FjaGVfbGluZV9sZW5ndGg7CiAJdTMyIGljYWNoZV9zaXplOwogCXVuc2lnbmVkIGxvbmcgaWNhY2hlX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBpY2FjaGVfaGlnaDsKQEAgLTUxLDggKzUxLDkgQEAKIAl1MzIgdXNlX2RjYWNoZTsKIAl1MzIgZGNhY2hlX3RhZ2JpdHM7CiAJdTMyIGRjYWNoZV93cml0ZTsKLQl1MzIgZGNhY2hlX2xpbmU7CisJdTMyIGRjYWNoZV9saW5lX2xlbmd0aDsKIAl1MzIgZGNhY2hlX3NpemU7CisJdTMyIGRjYWNoZV93YjsKIAl1bnNpZ25lZCBsb25nIGRjYWNoZV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZGNhY2hlX2hpZ2g7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCAzMDI4NmRiLi43OGEwMzg0IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xOSw2ICsxOSwxOCBAQAogc3RydWN0IHBkZXZfYXJjaGRhdGEgewogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRldl9hcmNoZGF0YV9zZXRfbm9kZShzdHJ1Y3QgZGV2X2FyY2hkYXRhICphZCwKKwkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJYWQtPm9mX25vZGUgPSBucDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKgorZGV2X2FyY2hkYXRhX2dldF9ub2RlKGNvbnN0IHN0cnVjdCBkZXZfYXJjaGRhdGEgKmFkKQoreworCXJldHVybiBhZC0+b2Zfbm9kZTsKK30KKwogI2VuZGlmIC8qIF9BU01fTUlDUk9CTEFaRV9ERVZJQ0VfSCAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmOTJmYzBkLi43ZDRhY2YyIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03Nyw3ICs3Nyw2IEBACiAjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCiAjZW5kaWYKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCmluZGV4IDhiMTM3ODkuLmZkMmZhMmVjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0xICsxLDI2IEBACisjaWZuZGVmIF9BU01fTUlDUk9CTEFaRV9GVFJBQ0UKKyNkZWZpbmUgX0FTTV9NSUNST0JMQVpFX0ZUUkFDRQogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorCisjZGVmaW5lIE1DT1VOVF9BRERSCQkoKGxvbmcpKF9tY291bnQpKQorI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFCTggLyogc2l6ZW9mIG1jb3VudCBjYWxsICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBfbWNvdW50KHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2NhbGxfZ3JhcGgodm9pZCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorLyogcmVsb2N0aW9uIG9mIG1jb3VudCBjYWxsIHNpdGUgaXMgdGhlIHNhbWUgYXMgdGhlIGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyOworfQorCitzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlIHsKK307CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCisjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0ZUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2Z1dGV4LmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZnV0ZXguaAppbmRleCAwYjc0NTgyLi44ZGJiNmU3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZnV0ZXguaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZnV0ZXguaApAQCAtMSArMSwxMjYgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mdXRleC5oPgorI2lmbmRlZiBfQVNNX01JQ1JPQkxBWkVfRlVURVhfSAorI2RlZmluZSBfQVNNX01JQ1JPQkxBWkVfRlVURVhfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKyNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykgXAorKHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKKwkJCSIxOglsd3gJJTAsICUyLCByMDsgIgkJCVwKKwkJCQlpbnNuCQkJCQlcCisJCQkiMjoJc3d4CSUxLCAlMiwgcjA7CQkJXAorCQkJCWFkZGljCSUxLCByMCwgMDsJCQlcCisJCQkJYm5laQklMSwgMWI7CQkJCVwKKwkJCTM6CQkJCQkJXAorCQkJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIjsJCQkJXAorCQkJNDoJYnJpZAkzYjsJCQkJXAorCQkJCWFkZGlrCSUxLCByMCwgJTM7CQkJXAorCQkJLnByZXZpb3VzOwkJCQkJXAorCQkJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIjsJCQlcCisJCQkud29yZAkxYiw0YiwyYiw0YjsJCQkJXAorCQkJLnByZXZpb3VzOyIJCQkJCVwKKwk6ICI9JnIiIChvbGR2YWwpLCAiPSZyIiAocmV0KQkJCQkJXAorCTogImIiICh1YWRkciksICJpIiAoLUVGQVVMVCksICJyIiAob3BhcmcpCQkJXAorCSk7CQkJCQkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIGludAorZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgZW5jb2RlZF9vcCwgaW50IF9fdXNlciAqdWFkZHIpCit7CisJaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKKwlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CisJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CisJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKKwlpbnQgb2xkdmFsID0gMCwgcmV0OworCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKKwkJb3BhcmcgPSAxIDw8IG9wYXJnOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBGVVRFWF9PUF9TRVQ6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJvciAlMSwlNCwlNDsiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9BREQ6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJhZGQgJTEsJTAsJTQ7IiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfT1I6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJvciAlMSwlMCwlNDsiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9BTkROOgorCQlfX2Z1dGV4X2F0b21pY19vcCgiYW5kICUxLCUwLCU0OyIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX1hPUjoKKwkJX19mdXRleF9hdG9taWNfb3AoInhvciAlMSwlMCwlNDsiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisKKwlpZiAoIXJldCkgeworCQlzd2l0Y2ggKGNtcCkgeworCQljYXNlIEZVVEVYX09QX0NNUF9FUToKKwkJCXJldCA9IChvbGR2YWwgPT0gY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9ORToKKwkJCXJldCA9IChvbGR2YWwgIT0gY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MVDoKKwkJCXJldCA9IChvbGR2YWwgPCBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dFOgorCQkJcmV0ID0gKG9sZHZhbCA+PSBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xFOgorCQkJcmV0ID0gKG9sZHZhbCA8PSBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dUOgorCQkJcmV0ID0gKG9sZHZhbCA+IGNtcGFyZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FTk9TWVM7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2Z1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQoreworCWludCBwcmV2LCBjbXA7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIxOglsd3gJJTAsICUyLCByMDsJCVwKKwkJCQkJY21wCSUxLCAlMCwgJTM7CQlcCisJCQkJCWJlcWkJJTEsIDNmOwkJCVwKKwkJCQkyOglzd3gJJTQsICUyLCByMDsJCVwKKwkJCQkJYWRkaWMJJTEsIHIwLCAwOwkJXAorCQkJCQlibmVpCSUxLCAxYjsJCQlcCisJCQkJMzoJCQkJCVwKKwkJCQkuc2VjdGlvbiAuZml4dXAsXCJheFwiOwkJCVwKKwkJCQk0OglicmlkCTNiOwkJCVwKKwkJCQkJYWRkaWsJJTAsIHIwLCAlNTsJCVwKKwkJCQkucHJldmlvdXM7CQkJCVwKKwkJCQkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiOwkJXAorCQkJCS53b3JkCTFiLDRiLDJiLDRiOwkJCVwKKwkJCQkucHJldmlvdXM7IgkJCQlcCisJCTogIj0mciIgKHByZXYpLCAiPSZyIihjbXApCQkJCVwKKwkJOiAiciIgKHVhZGRyKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCksICJpIiAoLUVGQVVMVCkpOworCisJcmV0dXJuIHByZXY7Cit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAppbmRleCBkZWE2NTY0Li4yYzM4YzZkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApAQCAtMTAsNzggKzEwLDczIEBACiAjZGVmaW5lIF9BU01fTUlDUk9CTEFaRV9JUlFGTEFHU19ICiAKICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KIAogIyBpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKIAotIyBkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCQkJCVwKKyMgZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncykJCQlcCiAJZG8gewkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlICgiIyBsb2NhbF9pcnFfc2F2ZQlcblx0IglcCi0JCQkJIm1zcmNsciAlMCwgJTEJXG5cdCIJXAotCQkJCSJub3AJXG5cdCIJCVwKKwkJYXNtIHZvbGF0aWxlICgiCW1zcmNsciAlMCwgJTE7CQlcCisJCQkJbm9wOyIJCQlcCiAJCQkJOiAiPXIiKGZsYWdzKQkJXAogCQkJCTogImkiKE1TUl9JRSkJCVwKIAkJCQk6ICJtZW1vcnkiKTsJCVwKIAl9IHdoaWxlICgwKQogCi0jIGRlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSAoIiMgbG9jYWxfaXJxX2Rpc2FibGUgXG5cdCIJXAotCQkJCSJtc3JjbHIgcjAsICUwIFxuXHQiCQlcCi0JCQkJIm5vcAlcblx0IgkJCVwKLQkJCQk6CQkJCVwKLQkJCQk6ICJpIihNU1JfSUUpCQkJXAotCQkJCTogIm1lbW9yeSIpOwkJCVwKKyMgZGVmaW5lIHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpCQkJXAorCWRvIHsJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSAoIgltc3JjbHIgcjAsICUwOwkJXAorCQkJCW5vcDsiCQkJXAorCQkJCToJCQlcCisJCQkJOiAiaSIoTVNSX0lFKQkJXAorCQkJCTogIm1lbW9yeSIpOwkJXAogCX0gd2hpbGUgKDApCiAKLSMgZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUgKCIjIGxvY2FsX2lycV9lbmFibGUgXG5cdCIJCVwKLQkJCQkibXNyc2V0CXIwLCAlMCBcblx0IgkJXAotCQkJCSJub3AJXG5cdCIJCQlcCi0JCQkJOgkJCQlcCi0JCQkJOiAiaSIoTVNSX0lFKQkJCVwKLQkJCQk6ICJtZW1vcnkiKTsJCQlcCisjIGRlZmluZSByYXdfbG9jYWxfaXJxX2VuYWJsZSgpCQkJCVwKKwlkbyB7CQkJCQkJXAorCQlhc20gdm9sYXRpbGUgKCIJbXNyc2V0CXIwLCAlMDsJCVwKKwkJCQlub3A7IgkJCVwKKwkJCQk6CQkJXAorCQkJCTogImkiKE1TUl9JRSkJCVwKKwkJCQk6ICJtZW1vcnkiKTsJCVwKIAl9IHdoaWxlICgwKQogCiAjIGVsc2UgLyogQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSID09IDAgKi8KIAotIyBkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCQkJCQlcCisjIGRlZmluZSByYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCQkJCVwKIAlkbyB7CQkJCQkJCVwKIAkJcmVnaXN0ZXIgdW5zaWduZWQgdG1wOwkJCQlcCi0JCWFzbSB2b2xhdGlsZSAoIiMgbG9jYWxfaXJxX3NhdmUJXG5cdCIJCVwKLQkJCQkibWZzCSUwLCBybXNyIFxuXHQiCQlcCi0JCQkJIm5vcCBcblx0IgkJCVwKLQkJCQkiYW5kaQklMSwgJTAsICUyIFxuXHQiCVwKLQkJCQkibXRzCXJtc3IsICUxIFxuXHQiCQlcCi0JCQkJIm5vcCBcblx0IgkJCVwKKwkJYXNtIHZvbGF0aWxlICgiCW1mcwklMCwgcm1zcjsJCVwKKwkJCQlub3A7CQkJCVwKKwkJCQlhbmRpCSUxLCAlMCwgJTI7CQlcCisJCQkJbXRzCXJtc3IsICUxOwkJXAorCQkJCW5vcDsiCQkJCVwKIAkJCQk6ICI9ciIoZmxhZ3MpLCAiPXIiICh0bXApCVwKIAkJCQk6ICJpIih+TVNSX0lFKQkJCVwKIAkJCQk6ICJtZW1vcnkiKTsJCQlcCiAJfSB3aGlsZSAoMCkKIAotIyBkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKQkJCQkJXAorIyBkZWZpbmUgcmF3X2xvY2FsX2lycV9kaXNhYmxlKCkJCQkJXAogCWRvIHsJCQkJCQkJXAogCQlyZWdpc3RlciB1bnNpZ25lZCB0bXA7CQkJCVwKLQkJYXNtIHZvbGF0aWxlICgiIyBsb2NhbF9pcnFfZGlzYWJsZSBcblx0IglcCi0JCQkJIm1mcwklMCwgcm1zciBcblx0IgkJXAotCQkJCSJub3AgXG5cdCIJCQlcCi0JCQkJImFuZGkJJTAsICUwLCAlMSBcblx0IglcCi0JCQkJIm10cwlybXNyLCAlMCBcblx0IgkJXAotCQkJCSJub3AgXG5cdCIJCQlcCisJCWFzbSB2b2xhdGlsZSAoIgltZnMJJTAsIHJtc3I7CQlcCisJCQkJbm9wOwkJCQlcCisJCQkJYW5kaQklMCwgJTAsICUxOwkJXAorCQkJCW10cwlybXNyLCAlMDsJCVwKKwkJCQlub3A7IgkJCVwKIAkJCQk6ICI9ciIodG1wKQkJCVwKIAkJCQk6ICJpIih+TVNSX0lFKQkJCVwKIAkJCQk6ICJtZW1vcnkiKTsJCQlcCiAJfSB3aGlsZSAoMCkKIAotIyBkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCQkJCQlcCisjIGRlZmluZSByYXdfbG9jYWxfaXJxX2VuYWJsZSgpCQkJCQlcCiAJZG8gewkJCQkJCQlcCiAJCXJlZ2lzdGVyIHVuc2lnbmVkIHRtcDsJCQkJXAotCQlhc20gdm9sYXRpbGUgKCIjIGxvY2FsX2lycV9lbmFibGUgXG5cdCIJCVwKLQkJCQkibWZzCSUwLCBybXNyIFxuXHQiCQlcCi0JCQkJIm5vcCBcblx0IgkJCVwKLQkJCQkib3JpCSUwLCAlMCwgJTEgXG5cdCIJXAotCQkJCSJtdHMJcm1zciwgJTAgXG5cdCIJCVwKLQkJCQkibm9wIFxuXHQiCQkJXAorCQlhc20gdm9sYXRpbGUgKCIJbWZzCSUwLCBybXNyOwkJXAorCQkJCW5vcDsJCQkJXAorCQkJCW9yaQklMCwgJTAsICUxOwkJXAorCQkJCW10cwlybXNyLCAlMDsJCVwKKwkJCQlub3A7IgkJCQlcCiAJCQkJOiAiPXIiKHRtcCkJCQlcCiAJCQkJOiAiaSIoTVNSX0lFKQkJCVwKIAkJCQk6ICJtZW1vcnkiKTsJCQlcCkBAIC04OSwzNSArODQsMjggQEAKIAogIyBlbmRpZiAvKiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIgKi8KIAotI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKQkJCQkJXAorI2RlZmluZSByYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCQkJCVwKIAlkbyB7CQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlICgiIyBsb2NhbF9zYXZlX2ZsYWdzIFxuXHQiCQlcCi0JCQkJIm1mcwklMCwgcm1zciBcblx0IgkJXAotCQkJCSJub3AJXG5cdCIJCQlcCi0JCQkJOiAiPXIiKGZsYWdzKQkJCVwKKwkJYXNtIHZvbGF0aWxlICgiCW10cwlybXNyLCAlMDsJCVwKKwkJCQlub3A7IgkJCQlcCiAJCQkJOgkJCQlcCisJCQkJOiAiciIoZmxhZ3MpCQkJXAogCQkJCTogIm1lbW9yeSIpOwkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQkJCVwKLQlkbyB7CQkJCQkJXAotCQlhc20gdm9sYXRpbGUgKCIjIGxvY2FsX2lycV9yZXN0b3JlIFxuXHQiXAotCQkJCSJtdHMJcm1zciwgJTAgXG5cdCIJXAotCQkJCSJub3AJXG5cdCIJCVwKLQkJCQk6CQkJXAotCQkJCTogInIiKGZsYWdzKQkJXAotCQkJCTogIm1lbW9yeSIpOwkJXAotCX0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgaW50IGlycXNfZGlzYWJsZWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbXNyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCXJldHVybiAoKGZsYWdzICYgTVNSX0lFKSA9PSAwKTsKKwlhc20gdm9sYXRpbGUgKCIJbWZzCSUwLCBybXNyOwlcCisJCQlub3A7IgkJCVwKKwkJCTogIj1yIihmbGFncykJCVwKKwkJCToJCQlcCisJCQk6ICJtZW1vcnkiKTsJCVwKKwlyZXR1cm4gZmxhZ3M7CiB9CiAKLSNkZWZpbmUgcmF3X2lycXNfZGlzYWJsZWQgaXJxc19kaXNhYmxlZAotI2RlZmluZSByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykJKChmbGFncykgPT0gMCkKKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSgoZmxhZ3MpID0gZ2V0X21zcigpKQorI2RlZmluZSByYXdfaXJxc19kaXNhYmxlZCgpCQkoKGdldF9tc3IoKSAmIE1TUl9JRSkgPT0gMCkKKyNkZWZpbmUgcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpCSgoZmxhZ3MgJiBNU1JfSUUpID09IDApCiAKICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfSVJRRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggODgwYzk4OC4uOWI2NmMwZiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xNjQsNyArMTY0LDggQEAKICMgIGVuZGlmIC8qIENPTkZJR19NTVUgKi8KIAogIyAgaWZuZGVmIENPTkZJR19NTVUKLSMgIGRlZmluZSBwZm5fdmFsaWQocGZuKQkoKHBmbikgPj0gbWluX2xvd19wZm4gJiYgKHBmbikgPD0gbWF4X21hcG5yKQorIyAgZGVmaW5lIHBmbl92YWxpZChwZm4pCSgoKHBmbikgPj0gbWluX2xvd19wZm4pICYmIFwKKwkJCQkoKHBmbikgPD0gKG1pbl9sb3dfcGZuICsgbWF4X21hcG5yKSkpCiAjICBkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCShQQUdFX09GRlNFVCA+PiBQQUdFX1NISUZUKQogIyAgZWxzZSAvKiBDT05GSUdfTU1VICovCiAjICBkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCShtZW1vcnlfc3RhcnQgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGIwMTMxZGEuLjc1NDdmNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMTA2LDkgKzEwNiw2IEBACiAgKi8KICNkZWZpbmUgcG1kX2FsbG9jX29uZV9mYXN0KG1tLCBhZGRyZXNzKQkoeyBCVUcoKTsgKChwbWRfdCAqKTEpOyB9KQogI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLCBhZGRyZXNzKQkoeyBCVUcoKTsgKChwbWRfdCAqKTIpOyB9KQotLyogRklYTUUgdHdvIGRlZmluaXRpb24gLSBsb29rIGJlbG93ICovCi0jZGVmaW5lIHBtZF9mcmVlKG1tLCB4KQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkJQlVHKCkKIAogc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKQEAgLTE5MiwxNCArMTg5LDE0IEBACiAgKiB0aGUgcGdkIHdpbGwgYWx3YXlzIGJlIHByZXNlbnQuLgogICovCiAjZGVmaW5lIHBtZF9hbGxvY19vbmUobW0sIGFkZHJlc3MpCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCi0vKiNkZWZpbmUgcG1kX2ZyZWUobW0sIHgpCQkJZG8geyB9IHdoaWxlICgwKSovCi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgeCwgYWRkcikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwbWRfZnJlZShtbSwgeCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgeCwgYWRkcikJcG1kX2ZyZWUoKHRsYiktPm1tLCB4KQogI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQlCVUcoKQogCiBleHRlcm4gaW50IGRvX2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7CiAKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKLSNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCQlkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHZyLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHZyLmgKaW5kZXggNjZmMWIzMC4uZTM4YWJjNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3B2ci5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wdnIuaApAQCAtNzYsMjAgKzc2LDIzIEBACiAjZGVmaW5lIFBWUjNfRlNMX0xJTktTX01BU0sJCTB4MDAwMDAzODAKIAogLyogSUNhY2hlIGNvbmZpZyBQVlIgbWFza3MgKi8KLSNkZWZpbmUgUFZSNF9VU0VfSUNBQ0hFX01BU0sJCTB4ODAwMDAwMDAKLSNkZWZpbmUgUFZSNF9JQ0FDSEVfQUREUl9UQUdfQklUU19NQVNLCTB4N0MwMDAwMDAKLSNkZWZpbmUgUFZSNF9JQ0FDSEVfVVNFX0ZTTF9NQVNLCTB4MDIwMDAwMDAKLSNkZWZpbmUgUFZSNF9JQ0FDSEVfQUxMT1dfV1JfTUFTSwkweDAxMDAwMDAwCi0jZGVmaW5lIFBWUjRfSUNBQ0hFX0xJTkVfTEVOX01BU0sJMHgwMEUwMDAwMAotI2RlZmluZSBQVlI0X0lDQUNIRV9CWVRFX1NJWkVfTUFTSwkweDAwMUYwMDAwCisjZGVmaW5lIFBWUjRfVVNFX0lDQUNIRV9NQVNLCQkweDgwMDAwMDAwIC8qIElDVSAqLworI2RlZmluZSBQVlI0X0lDQUNIRV9BRERSX1RBR19CSVRTX01BU0sJMHg3QzAwMDAwMCAvKiBJQ1RTICovCisjZGVmaW5lIFBWUjRfSUNBQ0hFX0FMTE9XX1dSX01BU0sJMHgwMTAwMDAwMCAvKiBJQ1cgKi8KKyNkZWZpbmUgUFZSNF9JQ0FDSEVfTElORV9MRU5fTUFTSwkweDAwRTAwMDAwIC8qIElDTEwgKi8KKyNkZWZpbmUgUFZSNF9JQ0FDSEVfQllURV9TSVpFX01BU0sJMHgwMDFGMDAwMCAvKiBJQ0JTICovCisjZGVmaW5lIFBWUjRfSUNBQ0hFX0FMV0FZU19VU0VECQkweDAwMDA4MDAwIC8qIElBVSAqLworI2RlZmluZSBQVlI0X0lDQUNIRV9JTlRFUkZBQ0UJCTB4MDAwMDIwMDAgLyogSUNJICovCiAKIC8qIERDYWNoZSBjb25maWcgUFZSIG1hc2tzICovCi0jZGVmaW5lIFBWUjVfVVNFX0RDQUNIRV9NQVNLCQkweDgwMDAwMDAwCi0jZGVmaW5lIFBWUjVfRENBQ0hFX0FERFJfVEFHX0JJVFNfTUFTSwkweDdDMDAwMDAwCi0jZGVmaW5lIFBWUjVfRENBQ0hFX1VTRV9GU0xfTUFTSwkweDAyMDAwMDAwCi0jZGVmaW5lIFBWUjVfRENBQ0hFX0FMTE9XX1dSX01BU0sJMHgwMTAwMDAwMAotI2RlZmluZSBQVlI1X0RDQUNIRV9MSU5FX0xFTl9NQVNLCTB4MDBFMDAwMDAKLSNkZWZpbmUgUFZSNV9EQ0FDSEVfQllURV9TSVpFX01BU0sJMHgwMDFGMDAwMAorI2RlZmluZSBQVlI1X1VTRV9EQ0FDSEVfTUFTSwkJMHg4MDAwMDAwMCAvKiBEQ1UgKi8KKyNkZWZpbmUgUFZSNV9EQ0FDSEVfQUREUl9UQUdfQklUU19NQVNLCTB4N0MwMDAwMDAgLyogRENUUyAqLworI2RlZmluZSBQVlI1X0RDQUNIRV9BTExPV19XUl9NQVNLCTB4MDEwMDAwMDAgLyogRENXICovCisjZGVmaW5lIFBWUjVfRENBQ0hFX0xJTkVfTEVOX01BU0sJMHgwMEUwMDAwMCAvKiBEQ0xMICovCisjZGVmaW5lIFBWUjVfRENBQ0hFX0JZVEVfU0laRV9NQVNLCTB4MDAxRjAwMDAgLyogRENCUyAqLworI2RlZmluZSBQVlI1X0RDQUNIRV9BTFdBWVNfVVNFRAkJMHgwMDAwODAwMCAvKiBEQVUgKi8KKyNkZWZpbmUgUFZSNV9EQ0FDSEVfVVNFX1dSSVRFQkFDSwkweDAwMDA0MDAwIC8qIERXQiAqLworI2RlZmluZSBQVlI1X0RDQUNIRV9JTlRFUkZBQ0UJCTB4MDAwMDIwMDAgLyogRENJICovCiAKIC8qIElDYWNoZSBiYXNlIGFkZHJlc3MgUFZSIG1hc2sgKi8KICNkZWZpbmUgUFZSNl9JQ0FDSEVfQkFTRUFERFJfTUFTSwkweEZGRkZGRkZGCkBAIC0xNzgsMTEgKzE4MSwxNCBAQAogCQkJKChwdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfQUREUl9UQUdfQklUU19NQVNLKSA+PiAyNikKICNkZWZpbmUgUFZSX0RDQUNIRV9VU0VfRlNMKHB2cikJCShwdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfVVNFX0ZTTF9NQVNLKQogI2RlZmluZSBQVlJfRENBQ0hFX0FMTE9XX1dSKHB2cikJKHB2ci5wdnJbNV0gJiBQVlI1X0RDQUNIRV9BTExPV19XUl9NQVNLKQorLyogRklYTUUgdHdvIHNoaWZ0cyBvbiBvbmUgbGluZSBuZWVkcyBhbnkgY29tbWVudCAqLwogI2RlZmluZSBQVlJfRENBQ0hFX0xJTkVfTEVOKHB2cikgXAogCQkJKDEgPDwgKChwdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfTElORV9MRU5fTUFTSykgPj4gMjEpKQogI2RlZmluZSBQVlJfRENBQ0hFX0JZVEVfU0laRShwdnIpIFwKIAkJCSgxIDw8ICgocHZyLnB2cls1XSAmIFBWUjVfRENBQ0hFX0JZVEVfU0laRV9NQVNLKSA+PiAxNikpCiAKKyNkZWZpbmUgUFZSX0RDQUNIRV9VU0VfV1JJVEVCQUNLKHB2cikgXAorCQkJKChwdnIucHZyWzVdICYgUFZSNV9EQ0FDSEVfVVNFX1dSSVRFQkFDSykgPj4gMTQpCiAKICNkZWZpbmUgUFZSX0lDQUNIRV9CQVNFQUREUihwdnIpCShwdnIucHZyWzZdICYgUFZSNl9JQ0FDSEVfQkFTRUFERFJfTUFTSykKICNkZWZpbmUgUFZSX0lDQUNIRV9ISUdIQUREUihwdnIpCShwdnIucHZyWzddICYgUFZSN19JQ0FDSEVfSElHSEFERFJfTUFTSykKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggZWQ2N2M5ZS4uN2YzMTM5NCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTM1LDYgKzM1LDggQEAKIGV4dGVybiB2b2lkIGVhcmx5X2NvbnNvbGVfcmVnX3RsYl9hbGxvYyh1bnNpZ25lZCBpbnQgYWRkcik7CiAjICAgZW5kaWYgLyogQ09ORklHX01NVSAqLwogCitleHRlcm4gdm9pZCBvZl9wbGF0Zm9ybV9yZXNldF9ncGlvX3Byb2JlKHZvaWQpOworCiB2b2lkIHRpbWVfaW5pdCh2b2lkKTsKIHZvaWQgaW5pdF9JUlEodm9pZCk7CiB2b2lkIG1hY2hpbmVfZWFybHlfaW5pdChjb25zdCBjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBpbnQgcmFtLApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGIxZWQ2MTUuLjE1Nzk3MDY4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY21weGNoZy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NtcHhjaGctbG9jYWwuaD4KIAorI2RlZmluZSBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXCisKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIHN0cnVjdCB0aHJlYWRfaW5mbzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNTQzMWI0Ni4uMzcxYmQ2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yNzIsOCArMjcyLDkgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X3RvZnJvbV91c2VyKHZvaWQgX191c2VyICp0bywKLQkJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCWNvcHlfZnJvbV91c2VyKCh0byksIChmcm9tKSwgKG4pKQorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHRvLCBmcm9tLCBuKSBcCisJCWNvcHlfZnJvbV91c2VyKCh0byksIChmcm9tKSwgKG4pKQogCiAjZGVmaW5lIGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbikJCQkJCVwKIAkoYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHRvKSwgKG4pKSA/CQkJCVwKQEAgLTI5MCwxMCArMjkxLDYgQEAKIAkJCSh2b2lkIF9fdXNlciAqKShmcm9tKSwgKG4pKQkJCVwKIAkJOiAtRUZBVUxUKQogCi0jZGVmaW5lIF9fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pCWNvcHlfZnJvbV91c2VyKCh0byksIChmcm9tKSwgKG4pKQotI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHRvLCBmcm9tLCBuKSBcCi0JCWNvcHlfZnJvbV91c2VyKCh0byksIChmcm9tKSwgKG4pKQotCiBleHRlcm4gaW50IF9fc3RybmNweV91c2VyKGNoYXIgKnRvLCBjb25zdCBjaGFyIF9fdXNlciAqZnJvbSwgaW50IGxlbik7CiBleHRlcm4gaW50IF9fc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzc3RyLCBpbnQgbGVuKTsKIApAQCAtMzA1LDYgKzMwMiw5IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV90b2Zyb21fdXNlcih2b2lkIF9fdXNlciAqdG8sCisJCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpOworCiAvKgogICogVGhlIGV4Y2VwdGlvbiB0YWJsZSBjb25zaXN0cyBvZiBwYWlycyBvZiBhZGRyZXNzZXM6IHRoZSBmaXJzdCBpcyB0aGUKICAqIGFkZHJlc3Mgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIGZhdWx0LCBhbmQgdGhlIHNlY29uZCBpcwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZDQ4NzcyOS4uYjA3NTk0ZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL01ha2VmaWxlCkBAIC0yLDEyICsyLDIyIEBACiAjIE1ha2VmaWxlCiAjCiAKK2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyMgRG8gbm90IHRyYWNlIGVhcmx5IGJvb3QgY29kZSBhbmQgbG93IGxldmVsIGNvZGUKK0NGTEFHU19SRU1PVkVfdGltZXIubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9pbnRjLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfZWFybHlfcHJpbnRrLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfc2VsZm1vZC5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2hlYXJ0YmVhdC5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCitlbmRpZgorCiBleHRyYS15IDo9IGhlYWQubyB2bWxpbnV4LmxkcwogCiBvYmoteSArPSBleGNlcHRpb25zLm8gXAogCWh3X2V4Y2VwdGlvbl9oYW5kbGVyLm8gaW5pdF90YXNrLm8gaW50Yy5vIGlycS5vIG9mX2RldmljZS5vIFwKIAlvZl9wbGF0Zm9ybS5vIHByb2Nlc3MubyBwcm9tLm8gcHJvbV9wYXJzZS5vIHB0cmFjZS5vIFwKLQlzZXR1cC5vIHNpZ25hbC5vIHN5c19taWNyb2JsYXplLm8gdGltZXIubyB0cmFwcy5vCisJc2V0dXAubyBzaWduYWwubyBzeXNfbWljcm9ibGF6ZS5vIHRpbWVyLm8gdHJhcHMubyByZXNldC5vCiAKIG9iai15ICs9IGNwdS8KIApAQCAtMTYsNSArMjYsNyBAQAogb2JqLSQoQ09ORklHX0hFQVJUX0JFQVQpCSs9IGhlYXJ0YmVhdC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1pY3JvYmxhemVfa3N5bXMubyBtb2R1bGUubwogb2JqLSQoQ09ORklHX01NVSkJCSs9IG1pc2Mubworb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubworb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikJKz0gZnRyYWNlLm8gbWNvdW50Lm8KIAogb2JqLXkJKz0gZW50cnkkKE1NVSkubwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCAyMDY0NmU1Li41OWNjN2JjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMiw2ICsyLDEwIEBACiAjIEJ1aWxkIHRoZSBhcHByb3ByaWF0ZSBDUFUgdmVyc2lvbiBzdXBwb3J0CiAjCiAKK2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKK0NGTEFHU19SRU1PVkVfY2FjaGUubyA9IC1wZworZW5kaWYKKwogRVhUUkFfQ0ZMQUdTICs9IC1EQ1BVX01BSk9SPSQoQ1BVX01BSk9SKSAtRENQVV9NSU5PUj0kKENQVV9NSU5PUikgXAogCQktRENQVV9SRVY9JChDUFVfUkVWKQogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYwppbmRleCBhZjg2NmE0Li5kOWQ2MzgzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NhY2hlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgUGV0YUxvZ2l4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSm9obiBXaWxsaWFtcyA8am9obi53aWxsaWFtc0BwZXRhbG9naXguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgSm9obiBXaWxsaWFtcyA8am9obi53aWxsaWFtc0BwZXRhbG9naXguY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcwpAQCAtMTMsMjQzICsxMyw1MzQgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWluZm8uaD4KKyNpbmNsdWRlIDxhc20vcHZyLmg+CiAKLS8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAqLwotCi12b2lkIF9lbmFibGVfaWNhY2hlKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnZhbGlkYXRlX2ZsdXNoX2ljYWNoZSh1bnNpZ25lZCBpbnQgYWRkcikKIHsKLQlpZiAoY3B1aW5mby51c2VfaWNhY2hlKSB7Ci0jaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgiCQkJCQlcCi0JCQkJbXNyc2V0CXIwLCAlMDsJCQkJXAotCQkJCW5vcDsgIgkJCQkJXAotCQkJCToJCQkJCVwKLQkJCQk6ICJpIiAoTVNSX0lDRSkJCQkJXAotCQkJCTogIm1lbW9yeSIpOwotI2Vsc2UKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJCQkJCVwKLQkJCQltZnMJcjEyLCBybXNyOwkJCVwKLQkJCQlub3A7CQkJCQlcCi0JCQkJb3JpCXIxMiwgcjEyLCAlMDsJCQlcCi0JCQkJbXRzCXJtc3IsIHIxMjsJCQlcCi0JCQkJbm9wOyAiCQkJCQlcCi0JCQkJOgkJCQkJXAotCQkJCTogImkiIChNU1JfSUNFKQkJCQlcCi0JCQkJOiAibWVtb3J5IiwgInIxMiIpOwotI2VuZGlmCi0JfQorCV9fYXNtX18gX192b2xhdGlsZV9fICgid2ljCSUwLCByMDsiCVwKKwkJCQkJOiA6ICJyIiAoYWRkcikpOwogfQogCi12b2lkIF9kaXNhYmxlX2ljYWNoZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfZGNhY2hlKHVuc2lnbmVkIGludCBhZGRyKQogewotCWlmIChjcHVpbmZvLnVzZV9pY2FjaGUpIHsKLSNpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJCQkJCVwKLQkJCQltc3JjbHIgcjAsICUwOwkJCQlcCi0JCQkJbm9wOyAiCQkJCQlcCi0JCQkJOgkJCQkJXAotCQkJCTogImkiIChNU1JfSUNFKQkJCQlcCi0JCQkJOiAibWVtb3J5Iik7Ci0jZWxzZQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIgkJCQkJXAotCQkJCW1mcwlyMTIsIHJtc3I7CQkJXAotCQkJCW5vcDsJCQkJCVwKLQkJCQlhbmRpCXIxMiwgcjEyLCB+JTA7CQkJXAotCQkJCW10cwlybXNyLCByMTI7CQkJXAotCQkJCW5vcDsgIgkJCQkJXAotCQkJCToJCQkJCVwKLQkJCQk6ICJpIiAoTVNSX0lDRSkJCQkJXAotCQkJCTogIm1lbW9yeSIsICJyMTIiKTsKLSNlbmRpZgotCX0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIndkYy5mbHVzaAklMCwgcjA7IglcCisJCQkJCTogOiAiciIgKGFkZHIpKTsKIH0KIAotdm9pZCBfaW52YWxpZGF0ZV9pY2FjaGUodW5zaWduZWQgaW50IGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZSh1bnNpZ25lZCBpbnQgYmFzZWFkZHIsCisJCQkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewotCWlmIChjcHVpbmZvLnVzZV9pY2FjaGUpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJCQkJCVwKLQkJCQl3aWMJJTAsIHIwIgkJCQlcCi0JCQkJOgkJCQkJXAotCQkJCTogInIiIChhZGRyKSk7Ci0JfQorCV9fYXNtX18gX192b2xhdGlsZV9fICgid2RjLmNsZWFyCSUwLCAlMTsiCVwKKwkJCQkJOiA6ICJyIiAoYmFzZWFkZHIpLCAiciIgKG9mZnNldCkpOwogfQogCi12b2lkIF9lbmFibGVfZGNhY2hlKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19lbmFibGVfaWNhY2hlX21zcih2b2lkKQogewotCWlmIChjcHVpbmZvLnVzZV9kY2FjaGUpIHsKLSNpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9NU1JfSU5TVFIKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJCQkJCVwKLQkJCQltc3JzZXQJcjAsICUwOwkJCQlcCi0JCQkJbm9wOyAiCQkJCQlcCi0JCQkJOgkJCQkJXAotCQkJCTogImkiIChNU1JfRENFKQkJCQlcCi0JCQkJOiAibWVtb3J5Iik7Ci0jZWxzZQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIgkJCQkJXAotCQkJCW1mcwlyMTIsIHJtc3I7CQkJXAotCQkJCW5vcDsJCQkJCVwKLQkJCQlvcmkJcjEyLCByMTIsICUwOwkJCVwKLQkJCQltdHMJcm1zciwgcjEyOwkJCVwKLQkJCQlub3A7ICIJCQkJCVwKLQkJCQk6CQkJCQlcCi0JCQkJOiAiaSIgKE1TUl9EQ0UpCQkJXAotCQkJCTogIm1lbW9yeSIsICJyMTIiKTsKLSNlbmRpZgotCX0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIgltc3JzZXQJcjAsICUwOwkJXAorCQkJCW5vcDsgIgkJCVwKKwkJCTogOiAiaSIgKE1TUl9JQ0UpIDogIm1lbW9yeSIpOwogfQogCi12b2lkIF9kaXNhYmxlX2RjYWNoZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIF9fZGlzYWJsZV9pY2FjaGVfbXNyKHZvaWQpCiB7Ci0jaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgiCQkJCQlcCi0JCQkJbXNyY2xyCXIwLCAlMDsJCQkJXAotCQkJCW5vcDsgIgkJCQkJXAotCQkJCToJCQkJCVwKLQkJCQk6ICJpIiAoTVNSX0RDRSkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJbXNyY2xyCXIwLCAlMDsJCVwKKwkJCQlub3A7ICIJCQlcCisJCQk6IDogImkiIChNU1JfSUNFKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZW5hYmxlX2RjYWNoZV9tc3Iodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIgltc3JzZXQJcjAsICUwOwkJXAorCQkJCW5vcDsgIgkJCVwKKwkJCQk6CQkJXAorCQkJCTogImkiIChNU1JfRENFKQkJXAogCQkJCTogIm1lbW9yeSIpOwotI2Vsc2UKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJCQkJCVwKLQkJCQltZnMJcjEyLCBybXNyOwkJCVwKLQkJCQlub3A7CQkJCQlcCi0JCQkJYW5kaQlyMTIsIHIxMiwgfiUwOwkJCVwKLQkJCQltdHMJcm1zciwgcjEyOwkJCVwKLQkJCQlub3A7ICIJCQkJCVwKLQkJCQk6CQkJCQlcCi0JCQkJOiAiaSIgKE1TUl9EQ0UpCQkJXAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kaXNhYmxlX2RjYWNoZV9tc3Iodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIgltc3JjbHIJcjAsICUwOwkJXAorCQkJCW5vcDsgIgkJCVwKKwkJCQk6CQkJXAorCQkJCTogImkiIChNU1JfRENFKQkJXAorCQkJCTogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19lbmFibGVfaWNhY2hlX25vbXNyKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJbWZzCXIxMiwgcm1zcjsJXAorCQkJCW5vcDsJCQlcCisJCQkJb3JpCXIxMiwgcjEyLCAlMDsJXAorCQkJCW10cwlybXNyLCByMTI7CVwKKwkJCQlub3A7ICIJCQlcCisJCQkJOgkJCVwKKwkJCQk6ICJpIiAoTVNSX0lDRSkJCVwKIAkJCQk6ICJtZW1vcnkiLCAicjEyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rpc2FibGVfaWNhY2hlX25vbXNyKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJbWZzCXIxMiwgcm1zcjsJXAorCQkJCW5vcDsJCQlcCisJCQkJYW5kaQlyMTIsIHIxMiwgfiUwOwlcCisJCQkJbXRzCXJtc3IsIHIxMjsJXAorCQkJCW5vcDsgIgkJCVwKKwkJCQk6CQkJXAorCQkJCTogImkiIChNU1JfSUNFKQkJXAorCQkJCTogIm1lbW9yeSIsICJyMTIiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZW5hYmxlX2RjYWNoZV9ub21zcih2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiCW1mcwlyMTIsIHJtc3I7CVwKKwkJCQlub3A7CQkJXAorCQkJCW9yaQlyMTIsIHIxMiwgJTA7CVwKKwkJCQltdHMJcm1zciwgcjEyOwlcCisJCQkJbm9wOyAiCQkJXAorCQkJCToJCQlcCisJCQkJOiAiaSIgKE1TUl9EQ0UpCQlcCisJCQkJOiAibWVtb3J5IiwgInIxMiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kaXNhYmxlX2RjYWNoZV9ub21zcih2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiCW1mcwlyMTIsIHJtc3I7CVwKKwkJCQlub3A7CQkJXAorCQkJCWFuZGkJcjEyLCByMTIsIH4lMDsJXAorCQkJCW10cwlybXNyLCByMTI7CVwKKwkJCQlub3A7ICIJCQlcCisJCQkJOgkJCVwKKwkJCQk6ICJpIiAoTVNSX0RDRSkJCVwKKwkJCQk6ICJtZW1vcnkiLCAicjEyIik7Cit9CisKKworLyogSGVscGVyIG1hY3JvIGZvciBjb21wdXRpbmcgdGhlIGxpbWl0cyBvZiBjYWNoZSByYW5nZSBsb29wcyAqLworI2RlZmluZSBDQUNIRV9MT09QX0xJTUlUUyhzdGFydCwgZW5kLCBjYWNoZV9saW5lX2xlbmd0aCwgY2FjaGVfc2l6ZSkJXAorZG8gewkJCQkJCQkJCVwKKwlpbnQgYWxpZ24gPSB+KGNhY2hlX2xpbmVfbGVuZ3RoIC0gMSk7CQkJCVwKKwllbmQgPSBtaW4oc3RhcnQgKyBjYWNoZV9zaXplLCBlbmQpOwkJCQlcCisJc3RhcnQgJj0gYWxpZ247CQkJCQkJCVwKKwllbmQgPSAoKGVuZCAmIGFsaWduKSArIGNhY2hlX2xpbmVfbGVuZ3RoKTsJCQlcCit9IHdoaWxlICgwKTsKKworLyoKKyAqIEhlbHBlciBtYWNybyB0byBsb29wIG92ZXIgdGhlIHNwZWNpZmllZCBjYWNoZV9zaXplL2xpbmVfbGVuZ3RoIGFuZAorICogZXhlY3V0ZSAnb3AnIG9uIHRoYXQgY2FjaGVsaW5lCisgKi8KKyNkZWZpbmUgQ0FDSEVfQUxMX0xPT1AoY2FjaGVfc2l6ZSwgbGluZV9sZW5ndGgsIG9wKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGxlbiA9IGNhY2hlX3NpemU7CQkJCQlcCisJaW50IHN0ZXAgPSAtbGluZV9sZW5ndGg7CQkJCQlcCisJQlVHX09OKHN0ZXAgPj0gMCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiIDE6ICAgICAgIiAjb3AgIiAlMCwgcjA7CQkJXAorCQkJCQliZ3RpZCAgICUwLCAxYjsJCQlcCisJCQkJCWFkZGsgICAgJTAsICUwLCAlMTsJCVwKKwkJCQkJIiA6IDogInIiIChsZW4pLCAiciIgKHN0ZXApCVwKKwkJCQkJOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSAoMCk7CisKKworI2RlZmluZSBDQUNIRV9BTExfTE9PUDIoY2FjaGVfc2l6ZSwgbGluZV9sZW5ndGgsIG9wKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGxlbiA9IGNhY2hlX3NpemU7CQkJCQlcCisJaW50IHN0ZXAgPSAtbGluZV9sZW5ndGg7CQkJCQlcCisJQlVHX09OKHN0ZXAgPj0gMCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiIDE6ICAgICAgIiAjb3AgIiByMCwgJTA7CQkJXAorCQkJCQliZ3RpZCAgICUwLCAxYjsJCQlcCisJCQkJCWFkZGsgICAgJTAsICUwLCAlMTsJCVwKKwkJCQkJIiA6IDogInIiIChsZW4pLCAiciIgKHN0ZXApCVwKKwkJCQkJOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSAoMCk7CisKKy8qIGZvciB3ZGMuZmx1c2gvY2xlYXIgKi8KKyNkZWZpbmUgQ0FDSEVfUkFOR0VfTE9PUF8yKHN0YXJ0LCBlbmQsIGxpbmVfbGVuZ3RoLCBvcCkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWludCBzdGVwID0gLWxpbmVfbGVuZ3RoOwkJCQkJXAorCWludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwkJCQkJXAorCUJVR19PTihjb3VudCA8PSAwKTsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgMToJIiAjb3AgIiAlMCwgJTE7CQkJXAorCQkJCQliZ3RpZCAgICUxLCAxYjsJCQlcCisJCQkJCWFkZGsgICAgJTEsICUxLCAlMjsJCVwKKwkJCQkJIiA6IDogInIiIChzdGFydCksICJyIiAoY291bnQpLAlcCisJCQkJCSJyIiAoc3RlcCkgOiAibWVtb3J5Iik7CQlcCit9IHdoaWxlICgwKTsKKworLyogSXQgaXMgdXNlZCBvbmx5IGZpcnN0IHBhcmFtZXRlciBmb3IgT1AgLSBmb3Igd2ljLCB3ZGMgKi8KKyNkZWZpbmUgQ0FDSEVfUkFOR0VfTE9PUF8xKHN0YXJ0LCBlbmQsIGxpbmVfbGVuZ3RoLCBvcCkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWludCBzdGVwID0gLWxpbmVfbGVuZ3RoOwkJCQkJXAorCWludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwkJCQkJXAorCUJVR19PTihjb3VudCA8PSAwKTsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgMToJYWRkawklMCwgJTAsICUxOwkJXAorCQkJCQkiICNvcCAiICUwLCByMDsJCQlcCisJCQkJCWJndGlkICAgJTEsIDFiOwkJCVwKKwkJCQkJYWRkayAgICAlMSwgJTEsICUyOwkJXAorCQkJCQkiIDogOiAiciIgKHN0YXJ0KSwgInIiIChjb3VudCksCVwKKwkJCQkJInIiIChzdGVwKSA6ICJtZW1vcnkiKTsJCVwKK30gd2hpbGUgKDApOworCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2ljYWNoZV9yYW5nZV9tc3JfaXJxKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6IHN0YXJ0IDB4JXgsIGVuZCAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkodW5zaWduZWQgaW50KXN0YXJ0LCAodW5zaWduZWQgaW50KSBlbmQpOworCisJQ0FDSEVfTE9PUF9MSU1JVFMoc3RhcnQsIGVuZCwKKwkJCWNwdWluZm8uaWNhY2hlX2xpbmVfbGVuZ3RoLCBjcHVpbmZvLmljYWNoZV9zaXplKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2Rpc2FibGVfaWNhY2hlX21zcigpOworCisJQ0FDSEVfUkFOR0VfTE9PUF8xKHN0YXJ0LCBlbmQsIGNwdWluZm8uaWNhY2hlX2xpbmVfbGVuZ3RoLCB3aWMpOworCisJX19lbmFibGVfaWNhY2hlX21zcigpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19mbHVzaF9pY2FjaGVfcmFuZ2Vfbm9tc3JfaXJxKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogc3RhcnQgMHgleCwgZW5kIDB4JXhcbiIsIF9fZnVuY19fLAorCQkJCSh1bnNpZ25lZCBpbnQpc3RhcnQsICh1bnNpZ25lZCBpbnQpIGVuZCk7CisKKwlDQUNIRV9MT09QX0xJTUlUUyhzdGFydCwgZW5kLAorCQkJY3B1aW5mby5pY2FjaGVfbGluZV9sZW5ndGgsIGNwdWluZm8uaWNhY2hlX3NpemUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fZGlzYWJsZV9pY2FjaGVfbm9tc3IoKTsKKworCUNBQ0hFX1JBTkdFX0xPT1BfMShzdGFydCwgZW5kLCBjcHVpbmZvLmljYWNoZV9saW5lX2xlbmd0aCwgd2ljKTsKKworCV9fZW5hYmxlX2ljYWNoZV9ub21zcigpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19mbHVzaF9pY2FjaGVfcmFuZ2Vfbm9pcnEodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlwcl9kZWJ1ZygiJXM6IHN0YXJ0IDB4JXgsIGVuZCAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkodW5zaWduZWQgaW50KXN0YXJ0LCAodW5zaWduZWQgaW50KSBlbmQpOworCisJQ0FDSEVfTE9PUF9MSU1JVFMoc3RhcnQsIGVuZCwKKwkJCWNwdWluZm8uaWNhY2hlX2xpbmVfbGVuZ3RoLCBjcHVpbmZvLmljYWNoZV9zaXplKTsKKwlDQUNIRV9SQU5HRV9MT09QXzEoc3RhcnQsIGVuZCwgY3B1aW5mby5pY2FjaGVfbGluZV9sZW5ndGgsIHdpYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZmx1c2hfaWNhY2hlX2FsbF9tc3JfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fZGlzYWJsZV9pY2FjaGVfbXNyKCk7CisKKwlDQUNIRV9BTExfTE9PUChjcHVpbmZvLmljYWNoZV9zaXplLCBjcHVpbmZvLmljYWNoZV9saW5lX2xlbmd0aCwgd2ljKTsKKworCV9fZW5hYmxlX2ljYWNoZV9tc3IoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZmx1c2hfaWNhY2hlX2FsbF9ub21zcl9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19kaXNhYmxlX2ljYWNoZV9ub21zcigpOworCisJQ0FDSEVfQUxMX0xPT1AoY3B1aW5mby5pY2FjaGVfc2l6ZSwgY3B1aW5mby5pY2FjaGVfbGluZV9sZW5ndGgsIHdpYyk7CisKKwlfX2VuYWJsZV9pY2FjaGVfbm9tc3IoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZmx1c2hfaWNhY2hlX2FsbF9ub2lycSh2b2lkKQoreworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCUNBQ0hFX0FMTF9MT09QKGNwdWluZm8uaWNhY2hlX3NpemUsIGNwdWluZm8uaWNhY2hlX2xpbmVfbGVuZ3RoLCB3aWMpOworfQorCitzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX2FsbF9tc3JfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fZGlzYWJsZV9kY2FjaGVfbXNyKCk7CisKKwlDQUNIRV9BTExfTE9PUChjcHVpbmZvLmRjYWNoZV9zaXplLCBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwgd2RjKTsKKworCV9fZW5hYmxlX2RjYWNoZV9tc3IoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsX25vbXNyX2lycSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2Rpc2FibGVfZGNhY2hlX25vbXNyKCk7CisKKwlDQUNIRV9BTExfTE9PUChjcHVpbmZvLmRjYWNoZV9zaXplLCBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwgd2RjKTsKKworCV9fZW5hYmxlX2RjYWNoZV9ub21zcigpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZV9hbGxfbm9pcnFfd3Qodm9pZCkKK3sKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKwlDQUNIRV9BTExfTE9PUChjcHVpbmZvLmRjYWNoZV9zaXplLCBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwgd2RjKQorfQorCisvKiBGSVhNRSB0aGlzIGlzIHdlaXJkIC0gc2hvdWxkIGJlIG9ubHkgd2RjIGJ1dCBub3Qgd29yaworICogTVM6IEkgYW0gZ2V0dGluZyBidXMgZXJyb3JzIGFuZCBvdGhlciB3ZWlyZCB0aGluZ3MgKi8KK3N0YXRpYyB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsX3diKHZvaWQpCit7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisJQ0FDSEVfQUxMX0xPT1AyKGNwdWluZm8uZGNhY2hlX3NpemUsIGNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLAorCQkJCQl3ZGMuY2xlYXIpCisKKyNpZiAwCisJdW5zaWduZWQgaW50IGk7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIEp1c3QgbG9vcCB0aHJvdWdoIGNhY2hlIHNpemUgYW5kIGludmFsaWRhdGUgaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY3B1aW5mby5kY2FjaGVfc2l6ZTsgaSArPSBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCkKKwkJCV9faW52YWxpZGF0ZV9kY2FjaGUoMCwgaSk7CiAjZW5kaWYKIH0KIAotdm9pZCBfaW52YWxpZGF0ZV9kY2FjaGUodW5zaWduZWQgaW50IGFkZHIpCitzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlX3diKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIJCQkJCVwKLQkJCQl3ZGMJJTAsIHIwIgkJCQlcCi0JCQkJOgkJCQkJXAotCQkJCTogInIiIChhZGRyKSk7CisJcHJfZGVidWcoIiVzOiBzdGFydCAweCV4LCBlbmQgMHgleFxuIiwgX19mdW5jX18sCisJCQkJKHVuc2lnbmVkIGludClzdGFydCwgKHVuc2lnbmVkIGludCkgZW5kKTsKKworCUNBQ0hFX0xPT1BfTElNSVRTKHN0YXJ0LCBlbmQsCisJCQljcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwgY3B1aW5mby5kY2FjaGVfc2l6ZSk7CisJQ0FDSEVfUkFOR0VfTE9PUF8yKHN0YXJ0LCBlbmQsIGNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLCB3ZGMuY2xlYXIpOwogfQogCi12b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlX25vbXNyX3d0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgZmxhZ3M7CisJcHJfZGVidWcoIiVzOiBzdGFydCAweCV4LCBlbmQgMHgleFxuIiwgX19mdW5jX18sCisJCQkJKHVuc2lnbmVkIGludClzdGFydCwgKHVuc2lnbmVkIGludCkgZW5kKTsKKwlDQUNIRV9MT09QX0xJTUlUUyhzdGFydCwgZW5kLAorCQkJY3B1aW5mby5kY2FjaGVfbGluZV9sZW5ndGgsIGNwdWluZm8uZGNhY2hlX3NpemUpOwogCi0JaWYgKGNwdWluZm8udXNlX2ljYWNoZSkgewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCV9fZGlzYWJsZV9pY2FjaGUoKTsKKwlDQUNIRV9SQU5HRV9MT09QXzEoc3RhcnQsIGVuZCwgY3B1aW5mby5kY2FjaGVfbGluZV9sZW5ndGgsIHdkYyk7Cit9CiAKLQkJLyogSnVzdCBsb29wIHRocm91Z2ggY2FjaGUgc2l6ZSBhbmQgaW52YWxpZGF0ZSwgbm8gbmVlZCB0byBhZGQKLQkJCUNBQ0hFX0JBU0UgYWRkcmVzcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY3B1aW5mby5pY2FjaGVfc2l6ZTsKLQkJCWkgKz0gY3B1aW5mby5pY2FjaGVfbGluZSkKLQkJCQlfX2ludmFsaWRhdGVfaWNhY2hlKGkpOworc3RhdGljIHZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZV9tc3JfaXJxX3d0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQlfX2VuYWJsZV9pY2FjaGUoKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXByX2RlYnVnKCIlczogc3RhcnQgMHgleCwgZW5kIDB4JXhcbiIsIF9fZnVuY19fLAorCQkJCSh1bnNpZ25lZCBpbnQpc3RhcnQsICh1bnNpZ25lZCBpbnQpIGVuZCk7CisJQ0FDSEVfTE9PUF9MSU1JVFMoc3RhcnQsIGVuZCwKKwkJCWNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLCBjcHVpbmZvLmRjYWNoZV9zaXplKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2Rpc2FibGVfZGNhY2hlX21zcigpOworCisJQ0FDSEVfUkFOR0VfTE9PUF8xKHN0YXJ0LCBlbmQsIGNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLCB3ZGMpOworCisJX19lbmFibGVfZGNhY2hlX21zcigpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZV9ub21zcl9pcnEodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiBzdGFydCAweCV4LCBlbmQgMHgleFxuIiwgX19mdW5jX18sCisJCQkJKHVuc2lnbmVkIGludClzdGFydCwgKHVuc2lnbmVkIGludCkgZW5kKTsKKworCUNBQ0hFX0xPT1BfTElNSVRTKHN0YXJ0LCBlbmQsCisJCQljcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwgY3B1aW5mby5kY2FjaGVfc2l6ZSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19kaXNhYmxlX2RjYWNoZV9ub21zcigpOworCisJQ0FDSEVfUkFOR0VfTE9PUF8xKHN0YXJ0LCBlbmQsIGNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLCB3ZGMpOworCisJX19lbmFibGVfZGNhY2hlX25vbXNyKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9hbGxfd2Iodm9pZCkKK3sKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKwlDQUNIRV9BTExfTE9PUChjcHVpbmZvLmRjYWNoZV9zaXplLCBjcHVpbmZvLmRjYWNoZV9saW5lX2xlbmd0aCwKKwkJCQl3ZGMuZmx1c2gpOworfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9yYW5nZV93Yih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlwcl9kZWJ1ZygiJXM6IHN0YXJ0IDB4JXgsIGVuZCAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkodW5zaWduZWQgaW50KXN0YXJ0LCAodW5zaWduZWQgaW50KSBlbmQpOworCisJQ0FDSEVfTE9PUF9MSU1JVFMoc3RhcnQsIGVuZCwKKwkJCWNwdWluZm8uZGNhY2hlX2xpbmVfbGVuZ3RoLCBjcHVpbmZvLmRjYWNoZV9zaXplKTsKKwlDQUNIRV9SQU5HRV9MT09QXzIoc3RhcnQsIGVuZCwgY3B1aW5mby5kY2FjaGVfbGluZV9sZW5ndGgsIHdkYy5mbHVzaCk7Cit9CisKKy8qIHN0cnVjdCBmb3Igd2IgY2FjaGVzIGFuZCBmb3Igd3QgY2FjaGVzICovCitzdHJ1Y3Qgc2NhY2hlICptYmM7CisKKy8qIG5ldyB3YiBjYWNoZSBtb2RlbCAqLworY29uc3Qgc3RydWN0IHNjYWNoZSB3Yl9tc3IgPSB7CisJLmllID0gX19lbmFibGVfaWNhY2hlX21zciwKKwkuaWQgPSBfX2Rpc2FibGVfaWNhY2hlX21zciwKKwkuaWZsID0gX19mbHVzaF9pY2FjaGVfYWxsX25vaXJxLAorCS5pZmxyID0gX19mbHVzaF9pY2FjaGVfcmFuZ2Vfbm9pcnEsCisJLmlpbiA9IF9fZmx1c2hfaWNhY2hlX2FsbF9ub2lycSwKKwkuaWluciA9IF9fZmx1c2hfaWNhY2hlX3JhbmdlX25vaXJxLAorCS5kZSA9IF9fZW5hYmxlX2RjYWNoZV9tc3IsCisJLmRkID0gX19kaXNhYmxlX2RjYWNoZV9tc3IsCisJLmRmbCA9IF9fZmx1c2hfZGNhY2hlX2FsbF93YiwKKwkuZGZsciA9IF9fZmx1c2hfZGNhY2hlX3JhbmdlX3diLAorCS5kaW4gPSBfX2ludmFsaWRhdGVfZGNhY2hlX2FsbF93YiwKKwkuZGluciA9IF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Vfd2IsCit9OworCisvKiBUaGVyZSBpcyBvbmx5IGRpZmZlcmVuY2UgaW4gaWUsIGlkLCBkZSwgZGQgZnVuY3Rpb25zICovCitjb25zdCBzdHJ1Y3Qgc2NhY2hlIHdiX25vbXNyID0geworCS5pZSA9IF9fZW5hYmxlX2ljYWNoZV9ub21zciwKKwkuaWQgPSBfX2Rpc2FibGVfaWNhY2hlX25vbXNyLAorCS5pZmwgPSBfX2ZsdXNoX2ljYWNoZV9hbGxfbm9pcnEsCisJLmlmbHIgPSBfX2ZsdXNoX2ljYWNoZV9yYW5nZV9ub2lycSwKKwkuaWluID0gX19mbHVzaF9pY2FjaGVfYWxsX25vaXJxLAorCS5paW5yID0gX19mbHVzaF9pY2FjaGVfcmFuZ2Vfbm9pcnEsCisJLmRlID0gX19lbmFibGVfZGNhY2hlX25vbXNyLAorCS5kZCA9IF9fZGlzYWJsZV9kY2FjaGVfbm9tc3IsCisJLmRmbCA9IF9fZmx1c2hfZGNhY2hlX2FsbF93YiwKKwkuZGZsciA9IF9fZmx1c2hfZGNhY2hlX3JhbmdlX3diLAorCS5kaW4gPSBfX2ludmFsaWRhdGVfZGNhY2hlX2FsbF93YiwKKwkuZGluciA9IF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Vfd2IsCit9OworCisvKiBPbGQgd3QgY2FjaGUgbW9kZWwgd2l0aCBkaXNhYmxpbmcgaXJxIGFuZCB0dXJuIG9mZiBjYWNoZSAqLworY29uc3Qgc3RydWN0IHNjYWNoZSB3dF9tc3IgPSB7CisJLmllID0gX19lbmFibGVfaWNhY2hlX21zciwKKwkuaWQgPSBfX2Rpc2FibGVfaWNhY2hlX21zciwKKwkuaWZsID0gX19mbHVzaF9pY2FjaGVfYWxsX21zcl9pcnEsCisJLmlmbHIgPSBfX2ZsdXNoX2ljYWNoZV9yYW5nZV9tc3JfaXJxLAorCS5paW4gPSBfX2ZsdXNoX2ljYWNoZV9hbGxfbXNyX2lycSwKKwkuaWluciA9IF9fZmx1c2hfaWNhY2hlX3JhbmdlX21zcl9pcnEsCisJLmRlID0gX19lbmFibGVfZGNhY2hlX21zciwKKwkuZGQgPSBfX2Rpc2FibGVfZGNhY2hlX21zciwKKwkuZGZsID0gX19pbnZhbGlkYXRlX2RjYWNoZV9hbGxfbXNyX2lycSwKKwkuZGZsciA9IF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2VfbXNyX2lycV93dCwKKwkuZGluID0gX19pbnZhbGlkYXRlX2RjYWNoZV9hbGxfbXNyX2lycSwKKwkuZGluciA9IF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2VfbXNyX2lycV93dCwKK307CisKK2NvbnN0IHN0cnVjdCBzY2FjaGUgd3Rfbm9tc3IgPSB7CisJLmllID0gX19lbmFibGVfaWNhY2hlX25vbXNyLAorCS5pZCA9IF9fZGlzYWJsZV9pY2FjaGVfbm9tc3IsCisJLmlmbCA9IF9fZmx1c2hfaWNhY2hlX2FsbF9ub21zcl9pcnEsCisJLmlmbHIgPSBfX2ZsdXNoX2ljYWNoZV9yYW5nZV9ub21zcl9pcnEsCisJLmlpbiA9IF9fZmx1c2hfaWNhY2hlX2FsbF9ub21zcl9pcnEsCisJLmlpbnIgPSBfX2ZsdXNoX2ljYWNoZV9yYW5nZV9ub21zcl9pcnEsCisJLmRlID0gX19lbmFibGVfZGNhY2hlX25vbXNyLAorCS5kZCA9IF9fZGlzYWJsZV9kY2FjaGVfbm9tc3IsCisJLmRmbCA9IF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsX25vbXNyX2lycSwKKwkuZGZsciA9IF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Vfbm9tc3JfaXJxLAorCS5kaW4gPSBfX2ludmFsaWRhdGVfZGNhY2hlX2FsbF9ub21zcl9pcnEsCisJLmRpbnIgPSBfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlX25vbXNyX2lycSwKK307CisKKy8qIE5ldyB3dCBjYWNoZSBtb2RlbCBmb3IgbmV3ZXIgTWljcm9ibGF6ZSB2ZXJzaW9ucyAqLworY29uc3Qgc3RydWN0IHNjYWNoZSB3dF9tc3Jfbm9pcnEgPSB7CisJLmllID0gX19lbmFibGVfaWNhY2hlX21zciwKKwkuaWQgPSBfX2Rpc2FibGVfaWNhY2hlX21zciwKKwkuaWZsID0gX19mbHVzaF9pY2FjaGVfYWxsX25vaXJxLAorCS5pZmxyID0gX19mbHVzaF9pY2FjaGVfcmFuZ2Vfbm9pcnEsCisJLmlpbiA9IF9fZmx1c2hfaWNhY2hlX2FsbF9ub2lycSwKKwkuaWluciA9IF9fZmx1c2hfaWNhY2hlX3JhbmdlX25vaXJxLAorCS5kZSA9IF9fZW5hYmxlX2RjYWNoZV9tc3IsCisJLmRkID0gX19kaXNhYmxlX2RjYWNoZV9tc3IsCisJLmRmbCA9IF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsX25vaXJxX3d0LAorCS5kZmxyID0gX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZV9ub21zcl93dCwKKwkuZGluID0gX19pbnZhbGlkYXRlX2RjYWNoZV9hbGxfbm9pcnFfd3QsCisJLmRpbnIgPSBfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlX25vbXNyX3d0LAorfTsKKworY29uc3Qgc3RydWN0IHNjYWNoZSB3dF9ub21zcl9ub2lycSA9IHsKKwkuaWUgPSBfX2VuYWJsZV9pY2FjaGVfbm9tc3IsCisJLmlkID0gX19kaXNhYmxlX2ljYWNoZV9ub21zciwKKwkuaWZsID0gX19mbHVzaF9pY2FjaGVfYWxsX25vaXJxLAorCS5pZmxyID0gX19mbHVzaF9pY2FjaGVfcmFuZ2Vfbm9pcnEsCisJLmlpbiA9IF9fZmx1c2hfaWNhY2hlX2FsbF9ub2lycSwKKwkuaWluciA9IF9fZmx1c2hfaWNhY2hlX3JhbmdlX25vaXJxLAorCS5kZSA9IF9fZW5hYmxlX2RjYWNoZV9ub21zciwKKwkuZGQgPSBfX2Rpc2FibGVfZGNhY2hlX25vbXNyLAorCS5kZmwgPSBfX2ludmFsaWRhdGVfZGNhY2hlX2FsbF9ub2lycV93dCwKKwkuZGZsciA9IF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Vfbm9tc3Jfd3QsCisJLmRpbiA9IF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsX25vaXJxX3d0LAorCS5kaW5yID0gX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZV9ub21zcl93dCwKK307CisKKy8qIENQVSB2ZXJzaW9uIGNvZGUgZm9yIDcuMjAuYyAtIHNlZSBhcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLmMgKi8KKyNkZWZpbmUgQ1BVVkVSXzdfMjBfQQkweDBjCisjZGVmaW5lIENQVVZFUl83XzIwX0QJMHgwZgorCisjZGVmaW5lIElORk8ocykJcHJpbnRrKEtFUk5fSU5GTyAiY2FjaGU6ICIgcyAiIFxuIik7CisKK3ZvaWQgbWljcm9ibGF6ZV9jYWNoZV9pbml0KHZvaWQpCit7CisJaWYgKGNwdWluZm8udXNlX2luc3RyICYgUFZSMl9VU0VfTVNSX0lOU1RSKSB7CisJCWlmIChjcHVpbmZvLmRjYWNoZV93YikgeworCQkJSU5GTygid2JfbXNyIik7CisJCQltYmMgPSAoc3RydWN0IHNjYWNoZSAqKSZ3Yl9tc3I7CisJCQlpZiAoY3B1aW5mby52ZXJfY29kZSA8IENQVVZFUl83XzIwX0QpIHsKKwkJCQkvKiBNUzogcHJvYmxlbSB3aXRoIHNpZ25hbCBoYW5kbGluZyAtIGh3IGJ1ZyAqLworCQkJCUlORk8oIldCIHdvbid0IHdvcmsgcHJvcGVybHkiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjcHVpbmZvLnZlcl9jb2RlID49IENQVVZFUl83XzIwX0EpIHsKKwkJCQlJTkZPKCJ3dF9tc3Jfbm9pcnEiKTsKKwkJCQltYmMgPSAoc3RydWN0IHNjYWNoZSAqKSZ3dF9tc3Jfbm9pcnE7CisJCQl9IGVsc2UgeworCQkJCUlORk8oInd0X21zciIpOworCQkJCW1iYyA9IChzdHJ1Y3Qgc2NhY2hlICopJnd0X21zcjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChjcHVpbmZvLmRjYWNoZV93YikgeworCQkJSU5GTygid2Jfbm9tc3IiKTsKKwkJCW1iYyA9IChzdHJ1Y3Qgc2NhY2hlICopJndiX25vbXNyOworCQkJaWYgKGNwdWluZm8udmVyX2NvZGUgPCBDUFVWRVJfN18yMF9EKSB7CisJCQkJLyogTVM6IHByb2JsZW0gd2l0aCBzaWduYWwgaGFuZGxpbmcgLSBodyBidWcgKi8KKwkJCQlJTkZPKCJXQiB3b24ndCB3b3JrIHByb3Blcmx5Iik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY3B1aW5mby52ZXJfY29kZSA+PSBDUFVWRVJfN18yMF9BKSB7CisJCQkJSU5GTygid3Rfbm9tc3Jfbm9pcnEiKTsKKwkJCQltYmMgPSAoc3RydWN0IHNjYWNoZSAqKSZ3dF9ub21zcl9ub2lycTsKKwkJCX0gZWxzZSB7CisJCQkJSU5GTygid3Rfbm9tc3IiKTsKKwkJCQltYmMgPSAoc3RydWN0IHNjYWNoZSAqKSZ3dF9ub21zcjsKKwkJCX0KKwkJfQogCX0KIH0KLQotdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGZsYWdzOwotCXVuc2lnbmVkIGludCBhbGlnbjsKLQotCWlmIChjcHVpbmZvLnVzZV9pY2FjaGUpIHsKLQkJLyoKLQkJICogTm8gbmVlZCB0byBjb3ZlciBlbnRpcmUgY2FjaGUgcmFuZ2UsCi0JCSAqIGp1c3QgY292ZXIgY2FjaGUgZm9vdHByaW50Ci0JCSAqLwotCQllbmQgPSBtaW4oc3RhcnQgKyBjcHVpbmZvLmljYWNoZV9zaXplLCBlbmQpOwotCQlhbGlnbiA9IH4oY3B1aW5mby5pY2FjaGVfbGluZSAtIDEpOwotCQlzdGFydCAmPSBhbGlnbjsgLyogTWFrZSBzdXJlIHdlIGFyZSBhbGlnbmVkICovCi0JCS8qIFB1c2ggZW5kIHVwIHRvIHRoZSBuZXh0IGNhY2hlIGxpbmUgKi8KLQkJZW5kID0gKChlbmQgJiBhbGlnbikgKyBjcHVpbmZvLmljYWNoZV9saW5lKTsKLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCV9fZGlzYWJsZV9pY2FjaGUoKTsKLQotCQlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBjcHVpbmZvLmljYWNoZV9saW5lKQotCQkJX19pbnZhbGlkYXRlX2ljYWNoZShpKTsKLQotCQlfX2VuYWJsZV9pY2FjaGUoKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLX0KLQotdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCV9faW52YWxpZGF0ZV9pY2FjaGVfYWxsKCk7Ci19Ci0KLXZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkciwKLQkJCQlpbnQgbGVuKQotewotCV9faW52YWxpZGF0ZV9pY2FjaGVfYWxsKCk7Ci19Ci0KLXZvaWQgX19pbnZhbGlkYXRlX2NhY2hlX3NpZ3RyYW1wKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2ludmFsaWRhdGVfaWNhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyA4KTsKLX0KLQotdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX2FsbCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGZsYWdzOwotCi0JaWYgKGNwdWluZm8udXNlX2RjYWNoZSkgewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCV9fZGlzYWJsZV9kY2FjaGUoKTsKLQotCQkvKgotCQkgKiBKdXN0IGxvb3AgdGhyb3VnaCBjYWNoZSBzaXplIGFuZCBpbnZhbGlkYXRlLAotCQkgKiBubyBuZWVkIHRvIGFkZCBDQUNIRV9CQVNFIGFkZHJlc3MKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBjcHVpbmZvLmRjYWNoZV9zaXplOwotCQkJaSArPSBjcHVpbmZvLmRjYWNoZV9saW5lKQotCQkJCV9faW52YWxpZGF0ZV9kY2FjaGUoaSk7Ci0KLQkJX19lbmFibGVfZGNhY2hlKCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci19Ci0KLXZvaWQgX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBmbGFnczsKLQl1bnNpZ25lZCBpbnQgYWxpZ247Ci0KLQlpZiAoY3B1aW5mby51c2VfZGNhY2hlKSB7Ci0JCS8qCi0JCSAqIE5vIG5lZWQgdG8gY292ZXIgZW50aXJlIGNhY2hlIHJhbmdlLAotCQkgKiBqdXN0IGNvdmVyIGNhY2hlIGZvb3RwcmludAotCQkgKi8KLQkJZW5kID0gbWluKHN0YXJ0ICsgY3B1aW5mby5kY2FjaGVfc2l6ZSwgZW5kKTsKLQkJYWxpZ24gPSB+KGNwdWluZm8uZGNhY2hlX2xpbmUgLSAxKTsKLQkJc3RhcnQgJj0gYWxpZ247IC8qIE1ha2Ugc3VyZSB3ZSBhcmUgYWxpZ25lZCAqLwotCQkvKiBQdXNoIGVuZCB1cCB0byB0aGUgbmV4dCBjYWNoZSBsaW5lICovCi0JCWVuZCA9ICgoZW5kICYgYWxpZ24pICsgY3B1aW5mby5kY2FjaGVfbGluZSk7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJX19kaXNhYmxlX2RjYWNoZSgpOwotCi0JCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGNwdWluZm8uZGNhY2hlX2xpbmUpCi0JCQlfX2ludmFsaWRhdGVfZGNhY2hlKGkpOwotCi0JCV9fZW5hYmxlX2RjYWNoZSgpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotfQotCi12b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JX19pbnZhbGlkYXRlX2RjYWNoZV9hbGwoKTsKLX0KLQotdm9pZCBfX2ludmFsaWRhdGVfZGNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRyLAotCQkJCWludCBsZW4pCi17Ci0JX19pbnZhbGlkYXRlX2RjYWNoZV9hbGwoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8tcHZyLWZ1bGwuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8tcHZyLWZ1bGwuYwppbmRleCBjMjU5Nzg2Li5mNzJkYmQ2IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLXB2ci1mdWxsLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby1wdnItZnVsbC5jCkBAIC0yMSw4ICsyMSwxNCBAQAogICovCiAKICNkZWZpbmUgQ0koYywgcCkgeyBjaS0+YyA9IFBWUl8jI3AocHZyKTsgfQorCisjaWYgZGVmaW5lZChDT05GSUdfRUFSTFlfUFJJTlRLKSAmJiBkZWZpbmVkKENPTkZJR19TRVJJQUxfVUFSVExJVEVfQ09OU09MRSkKICNkZWZpbmUgZXJyX3ByaW50ayh4KSBcCiAJZWFybHlfcHJpbnRrKCJFUlJPUjogTWljcm9ibGF6ZSAiIHggIi1kaWZmZXJlbnQgZm9yIFBWUiBhbmQgRFRTXG4iKTsKKyNlbHNlCisjZGVmaW5lIGVycl9wcmludGsoeCkgXAorCXByaW50ayhLRVJOX0lORk8gIkVSUk9SOiBNaWNyb2JsYXplICIgeCAiLWRpZmZlcmVudCBmb3IgUFZSIGFuZCBEVFNcbiIpOworI2VuZGlmCiAKIHZvaWQgc2V0X2NwdWluZm9fcHZyX2Z1bGwoc3RydWN0IGNwdWluZm8gKmNpLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSkKIHsKQEAgLTcwLDcgKzc2LDcgQEAKIAlDSSh1c2VfaWNhY2hlLCBVU0VfSUNBQ0hFKTsKIAlDSShpY2FjaGVfdGFnYml0cywgSUNBQ0hFX0FERFJfVEFHX0JJVFMpOwogCUNJKGljYWNoZV93cml0ZSwgSUNBQ0hFX0FMTE9XX1dSKTsKLQlDSShpY2FjaGVfbGluZSwgSUNBQ0hFX0xJTkVfTEVOKTsKKwljaS0+aWNhY2hlX2xpbmVfbGVuZ3RoID0gUFZSX0lDQUNIRV9MSU5FX0xFTihwdnIpIDw8IDI7CiAJQ0koaWNhY2hlX3NpemUsIElDQUNIRV9CWVRFX1NJWkUpOwogCUNJKGljYWNoZV9iYXNlLCBJQ0FDSEVfQkFTRUFERFIpOwogCUNJKGljYWNoZV9oaWdoLCBJQ0FDSEVfSElHSEFERFIpOwpAQCAtNzgsMTEgKzg0LDE2IEBACiAJQ0kodXNlX2RjYWNoZSwgVVNFX0RDQUNIRSk7CiAJQ0koZGNhY2hlX3RhZ2JpdHMsIERDQUNIRV9BRERSX1RBR19CSVRTKTsKIAlDSShkY2FjaGVfd3JpdGUsIERDQUNIRV9BTExPV19XUik7Ci0JQ0koZGNhY2hlX2xpbmUsIERDQUNIRV9MSU5FX0xFTik7CisJY2ktPmRjYWNoZV9saW5lX2xlbmd0aCA9IFBWUl9EQ0FDSEVfTElORV9MRU4ocHZyKSA8PCAyOwogCUNJKGRjYWNoZV9zaXplLCBEQ0FDSEVfQllURV9TSVpFKTsKIAlDSShkY2FjaGVfYmFzZSwgRENBQ0hFX0JBU0VBRERSKTsKIAlDSShkY2FjaGVfaGlnaCwgRENBQ0hFX0hJR0hBRERSKTsKIAorCXRlbXAgPSBQVlJfRENBQ0hFX1VTRV9XUklURUJBQ0socHZyKTsKKwlpZiAoY2ktPmRjYWNoZV93YiAhPSB0ZW1wKQorCQllcnJfcHJpbnRrKCJEQ0FDSEUgV0IiKTsKKwljaS0+ZGNhY2hlX3diID0gdGVtcDsKKwogCUNJKHVzZV9kb3BiLCBEX09QQik7CiAJQ0kodXNlX2lvcGIsIElfT1BCKTsKIAlDSSh1c2VfZGxtYiwgRF9MTUIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby1zdGF0aWMuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8tc3RhdGljLmMKaW5kZXggYWRiNDQ4Zi4uNjA5NWFhNiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby1zdGF0aWMuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLXN0YXRpYy5jCkBAIC03MiwxMiArNzIsMTIgQEAKIAljaS0+dXNlX2ljYWNoZSA9IGZjcHUoY3B1LCAieGxueCx1c2UtaWNhY2hlIik7CiAJY2ktPmljYWNoZV90YWdiaXRzID0gZmNwdShjcHUsICJ4bG54LGFkZHItdGFnLWJpdHMiKTsKIAljaS0+aWNhY2hlX3dyaXRlID0gZmNwdShjcHUsICJ4bG54LGFsbG93LWljYWNoZS13ciIpOwotCWNpLT5pY2FjaGVfbGluZSA9IGZjcHUoY3B1LCAieGxueCxpY2FjaGUtbGluZS1sZW4iKSA8PCAyOwotCWlmICghY2ktPmljYWNoZV9saW5lKSB7CisJY2ktPmljYWNoZV9saW5lX2xlbmd0aCA9IGZjcHUoY3B1LCAieGxueCxpY2FjaGUtbGluZS1sZW4iKSA8PCAyOworCWlmICghY2ktPmljYWNoZV9saW5lX2xlbmd0aCkgewogCQlpZiAoZmNwdShjcHUsICJ4bG54LGljYWNoZS11c2UtZnNsIikpCi0JCQljaS0+aWNhY2hlX2xpbmUgPSA0IDw8IDI7CisJCQljaS0+aWNhY2hlX2xpbmVfbGVuZ3RoID0gNCA8PCAyOwogCQllbHNlCi0JCQljaS0+aWNhY2hlX2xpbmUgPSAxIDw8IDI7CisJCQljaS0+aWNhY2hlX2xpbmVfbGVuZ3RoID0gMSA8PCAyOwogCX0KIAljaS0+aWNhY2hlX3NpemUgPSBmY3B1KGNwdSwgImktY2FjaGUtc2l6ZSIpOwogCWNpLT5pY2FjaGVfYmFzZSA9IGZjcHUoY3B1LCAiaS1jYWNoZS1iYXNlYWRkciIpOwpAQCAtODYsMTYgKzg2LDE3IEBACiAJY2ktPnVzZV9kY2FjaGUgPSBmY3B1KGNwdSwgInhsbngsdXNlLWRjYWNoZSIpOwogCWNpLT5kY2FjaGVfdGFnYml0cyA9IGZjcHUoY3B1LCAieGxueCxkY2FjaGUtYWRkci10YWciKTsKIAljaS0+ZGNhY2hlX3dyaXRlID0gZmNwdShjcHUsICJ4bG54LGFsbG93LWRjYWNoZS13ciIpOwotCWNpLT5kY2FjaGVfbGluZSA9IGZjcHUoY3B1LCAieGxueCxkY2FjaGUtbGluZS1sZW4iKSA8PCAyOwotCWlmICghY2ktPmRjYWNoZV9saW5lKSB7CisJY2ktPmRjYWNoZV9saW5lX2xlbmd0aCA9IGZjcHUoY3B1LCAieGxueCxkY2FjaGUtbGluZS1sZW4iKSA8PCAyOworCWlmICghY2ktPmRjYWNoZV9saW5lX2xlbmd0aCkgewogCQlpZiAoZmNwdShjcHUsICJ4bG54LGRjYWNoZS11c2UtZnNsIikpCi0JCQljaS0+ZGNhY2hlX2xpbmUgPSA0IDw8IDI7CisJCQljaS0+ZGNhY2hlX2xpbmVfbGVuZ3RoID0gNCA8PCAyOwogCQllbHNlCi0JCQljaS0+ZGNhY2hlX2xpbmUgPSAxIDw8IDI7CisJCQljaS0+ZGNhY2hlX2xpbmVfbGVuZ3RoID0gMSA8PCAyOwogCX0KIAljaS0+ZGNhY2hlX3NpemUgPSBmY3B1KGNwdSwgImQtY2FjaGUtc2l6ZSIpOwogCWNpLT5kY2FjaGVfYmFzZSA9IGZjcHUoY3B1LCAiZC1jYWNoZS1iYXNlYWRkciIpOwogCWNpLT5kY2FjaGVfaGlnaCA9IGZjcHUoY3B1LCAiZC1jYWNoZS1oaWdoYWRkciIpOworCWNpLT5kY2FjaGVfd2IgPSBmY3B1KGNwdSwgInhsbngsZGNhY2hlLXVzZS13cml0ZWJhY2siKTsKIAogCWNpLT51c2VfZG9wYiA9IGZjcHUoY3B1LCAieGxueCxkLW9wYiIpOwogCWNpLT51c2VfaW9wYiA9IGZjcHUoY3B1LCAieGxueCxpLW9wYiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby5jCmluZGV4IDM1MzliYWIuLjk5MWQ3MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8uYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLmMKQEAgLTI5LDExICsyOSw4IEBACiAJeyI3LjIwLmEiLCAweDBjfSwKIAl7IjcuMjAuYiIsIDB4MGR9LAogCXsiNy4yMC5jIiwgMHgwZX0sCi0JLyogRklYTUUgVGhlcmUgaXMgbm8ga2V5Y29kZSBkZWZpbmVkIGluIE1CViBmb3IgdGhlc2UgdmVyc2lvbnMgKi8KLQl7IjIuMTAuYSIsIDB4MTB9LAotCXsiMy4wMC5hIiwgMHgyMH0sCi0JeyI0LjAwLmEiLCAweDMwfSwKLQl7IjQuMDAuYiIsIDB4NDB9LAorCXsiNy4yMC5kIiwgMHgwZn0sCisJeyI3LjMwLmEiLCAweDEwfSwKIAl7TlVMTCwgMH0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9tYi5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvbWIuYwppbmRleCA0ZGNmY2NkLi4wYzkxMmIyIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9tYi5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L21iLmMKQEAgLTEwMywxMSArMTAzLDE1IEBACiAJZWxzZQogCQljb3VudCArPSBzZXFfcHJpbnRmKG0sICJJY2FjaGU6XHRcdG5vXG4iKTsKIAotCWlmIChjcHVpbmZvLnVzZV9kY2FjaGUpCisJaWYgKGNwdWluZm8udXNlX2RjYWNoZSkgewogCQljb3VudCArPSBzZXFfcHJpbnRmKG0sCiAJCQkJIkRjYWNoZTpcdFx0JXVrQlxuIiwKIAkJCQljcHVpbmZvLmRjYWNoZV9zaXplID4+IDEwKTsKLQllbHNlCisJCWlmIChjcHVpbmZvLmRjYWNoZV93YikKKwkJCWNvdW50ICs9IHNlcV9wcmludGYobSwgIlx0XHR3cml0ZS1iYWNrXG4iKTsKKwkJZWxzZQorCQkJY291bnQgKz0gc2VxX3ByaW50ZihtLCAiXHRcdHdyaXRlLXRocm91Z2hcbiIpOworCX0gZWxzZQogCQljb3VudCArPSBzZXFfcHJpbnRmKG0sICJEY2FjaGU6XHRcdG5vXG4iKTsKIAogCWNvdW50ICs9IHNlcV9wcmludGYobSwKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKaW5kZXggYzlhNDM0MC4uOWJlZTkzOCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogaW50IGNwdV9oYXNfcHZyKHZvaWQpCiB7Ci0JdW5zaWduZWQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBwdnIwOwogCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LW5vbW11LlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LW5vbW11LlMKaW5kZXggOTA4M2Q4NS4uOTViMDg1NSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS1ub21tdS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnktbm9tbXUuUwpAQCAtMjA4LDggKzIwOCw2IEBACiAJbHdpCXIxLCByMSwgVFNfVEhSRUFEX0lORk8JCS8qIGdldCB0aGUgdGhyZWFkIGluZm8gKi8KIAkvKiBjYWxjdWxhdGUga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KIAlhZGRpawlyMSwgcjEsIFRIUkVBRF9TSVpFIC0gUFRfU0laRQotCXN3aQlyMTEsIHIwLCBQRVJfQ1BVKFIxMV9TQVZFKQkvKiB0ZW1wb3JhcmlseSBzYXZlIHIxMSAqLwotCWx3aQlyMTEsIHIwLCBQRVJfQ1BVKEtNKQkJLyogbG9hZCBtb2RlIGluZGljYXRvciAqLwogMjoKIAlzd2kJcjExLCByMSwgUFRfTU9ERQkJLyogc3RvcmUgdGhlIG1vZGUgKi8KIAlsd2kJcjExLCByMCwgUEVSX0NQVShSMTFfU0FWRSkJLyogcmVsb2FkIHIxMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCmluZGV4IGUzZWNiMzYuLjNiYWQ0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAorI3VuZGVmIERFQlVHCisKIC8qIFRoZSBzaXplIG9mIGEgc3RhdGUgc2F2ZSBmcmFtZS4gKi8KICNkZWZpbmUgU1RBVEVfU0FWRV9TSVpFCQkoUFRfU0laRSArIFNUQVRFX1NBVkVfQVJHX1NQQUNFKQogCkBAIC0zNTIsMTAgKzM1NCwxMiBAQAogCWFkZAlyMTIsIHIxMiwgcjEyOwkJCS8qIGNvbnZlcnQgbnVtIC0+IHB0ciAqLwogCWFkZAlyMTIsIHIxMiwgcjEyOwogCisjaWZkZWYgREVCVUcKIAkvKiBUcmFjIHN5c2NhbGxzIGFuZCBzdG9yZWQgdGhlbSB0byByMF9yYW0gKi8KIAlsd2kJcjMsIHIxMiwgMHg0MDAgKyByMF9yYW0KIAlhZGRpCXIzLCByMywgMQogCXN3aQlyMywgcjEyLCAweDQwMCArIHIwX3JhbQorI2VuZGlmCiAKIAkjIEZpbmQgYW5kIGp1bXAgaW50byB0aGUgc3lzY2FsbCBoYW5kbGVyLgogCWx3aQlyMTIsIHIxMiwgc3lzX2NhbGxfdGFibGUKQEAgLTQ5NiwxNyArNTAwLDYgQEAKIAlicmlkCW1pY3JvYmxhemVfZXhlY3ZlOwkvKiBEbyByZWFsIHdvcmsgKHRhaWwtY2FsbCkuKi8KIAlub3A7CiAKLUNfRU5UUlkoc3lzX3J0X3NpZ3N1c3BlbmRfd3JhcHBlcik6Ci0Jc3dpCXIzLCByMSwgUFRPK1BUX1IzOyAvKiByZXN0b3JlIHNhdmVkIHIzLCByNCByZWdpc3RlcnMgKi8KLQlzd2kJcjQsIHIxLCBQVE8rUFRfUjQ7Ci0JbGEJcjcsIHIxLCBQVE87CQkvKiBhZGQgdXNlciBjb250ZXh0IGFzIDNyZCBhcmcgKi8KLQlicmxpZAlyMTUsIHN5c19ydF9zaWdzdXNwZW5kOwkvKiBEbyByZWFsIHdvcmsuKi8KLQlub3A7Ci0JbHdpCXIzLCByMSwgUFRPK1BUX1IzOyAvKiByZXN0b3JlIHNhdmVkIHIzLCByNCByZWdpc3RlcnMgKi8KLQlsd2kJcjQsIHIxLCBQVE8rUFRfUjQ7Ci0JYnJpIHJldF9mcm9tX3RyYXAgLyogZmFsbCB0aHJvdWdoIHdpbGwgbm90IHdvcmsgaGVyZSBkdWUgdG8gYWxpZ24gKi8KLQlub3A7Ci0KIENfRU5UUlkoc3lzX3J0X3NpZ3JldHVybl93cmFwcGVyKToKIAlzd2kJcjMsIHIxLCBQVE8rUFRfUjM7IC8qIHJlc3RvcmUgc2F2ZWQgcjMsIHI0IHJlZ2lzdGVycyAqLwogCXN3aQlyNCwgcjEsIFBUTytQVF9SNDsKQEAgLTcxMSwxNSArNzA0LDExIEBACiAJICogKGluIGEgcG9zc2libHkgbW9kaWZpZWQgZm9ybSkgYWZ0ZXIgZG9fc2lnbmFsIHJldHVybnMuCiAJICogc3RvcmUgcmV0dXJuIHJlZ2lzdGVycyBzZXBhcmF0ZWx5IGJlY2F1c2UgdGhpcyBtYWNyb3MgaXMgdXNlCiAJICogZm9yIG90aGVycyBleGNlcHRpb25zICovCi0Jc3dpCXIzLCByMSwgUFRPICsgUFRfUjM7Ci0Jc3dpCXI0LCByMSwgUFRPICsgUFRfUjQ7CiAJbGEJcjUsIHIxLCBQVE87CQkvKiBBcmcgMTogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKi8KIAlhZGQJcjYsIHIwLCByMDsJCS8qIEFyZyAyOiBzaWdzZXRfdCAqb2xkc2V0ICovCiAJYWRkaQlyNywgcjAsIDA7CQkvKiBBcmcgMzogaW50IGluX3N5c2NhbGwgKi8KIAlicmFsaWQJcjE1LCBkb19zaWduYWw7CS8qIEhhbmRsZSBhbnkgc2lnbmFscyAqLwogCW5vcDsKLQlsd2kJcjMsIHIxLCBQVE8rUFRfUjM7IC8qIHJlc3RvcmUgc2F2ZWQgcjMsIHI0IHJlZ2lzdGVycyAqLwotCWx3aQlyNCwgcjEsIFBUTytQVF9SNDsKIAogLyogRmluYWxseSwgcmV0dXJuIHRvIHVzZXIgc3RhdGUuICAqLwogMToJc3dpCXIwLCByMCwgUEVSX0NQVShLTSk7CS8qIE5vdyBvZmZpY2lhbGx5IGluIHVzZXIgc3RhdGUuICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9mdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODhiMzFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9mdHJhY2UuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIEZ0cmFjZSBzdXBwb3J0IGZvciBNaWNyb2JsYXplLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGV0YUxvZ2l4CisgKgorICogQmFzZWQgb24gTUlQUyBhbmQgUG93ZXJQQyBmdHJhY2UgY29kZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisvKgorICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRycworICogaW4gY3VycmVudCB0aHJlYWQgaW5mby4KKyAqLwordm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKwlpbnQgZmF1bHRlZCwgZXJyOworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOworCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2hvb2tlciA9ICh1bnNpZ25lZCBsb25nKQorCQkJCSZyZXR1cm5fdG9faGFuZGxlcjsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFByb3RlY3QgYWdhaW5zdCBmYXVsdCwgZXZlbiBpZiBpdCBzaG91bGRuJ3QKKwkgKiBoYXBwZW4uIFRoaXMgdG9vbCBpcyB0b28gbXVjaCBpbnRydXNpdmUgdG8KKwkgKiBpZ25vcmUgc3VjaCBhIHByb3RlY3Rpb24uCisJICovCisJYXNtIHZvbGF0aWxlKCIJMToJbHdpCSUwLCAlMiwgMDsJCVwKKwkJCTI6CXN3aQklMywgJTIsIDA7CQlcCisJCQkJYWRkaWsJJTEsIHIwLCAwOwkJXAorCQkJMzoJCQkJCVwKKwkJCQkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIjsJXAorCQkJNDoJYnJpZAkzYjsJCQlcCisJCQkJYWRkaWsJJTEsIHIwLCAxOwkJXAorCQkJCS5wcmV2aW91czsJCQlcCisJCQkJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIjsJXAorCQkJCS53b3JkCTFiLDRiOwkJCVwKKwkJCQkud29yZAkyYiw0YjsJCQlcCisJCQkJLnByZXZpb3VzOyIJCQlcCisJCQk6ICI9JnIiIChvbGQpLCAiPXIiIChmYXVsdGVkKQorCQkJOiAiciIgKHBhcmVudCksICJyIiAocmV0dXJuX2hvb2tlcikKKwkpOworCisJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKSB7CisJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwllcnIgPSBmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCwgMCk7CisJaWYgKGVyciA9PSAtRUJVU1kpIHsKKwkJKnBhcmVudCA9IG9sZDsKKwkJcmV0dXJuOworCX0KKworCXRyYWNlLmZ1bmMgPSBzZWxmX2FkZHI7CisJLyogT25seSB0cmFjZSBpZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBleHBlY3RzIHRvICovCisJaWYgKCFmdHJhY2VfZ3JhcGhfZW50cnkoJnRyYWNlKSkgeworCQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOworCQkqcGFyZW50ID0gb2xkOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKy8qIHNhdmUgdmFsdWUgdG8gYWRkciAtIGl0IGlzIHNhdmUgdG8gZG8gaXQgaW4gYXNtICovCitzdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpbnQgZmF1bHRlZCA9IDA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiCTE6CXN3aQklMiwgJTEsIDA7CQlcCisJCQkJCWFkZGlrCSUwLCByMCwgMDsJCVwKKwkJCQkyOgkJCQkJXAorCQkJCQkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIjsJXAorCQkJCTM6CWJyaWQJMmI7CQkJXAorCQkJCQlhZGRpawklMCwgcjAsIDE7CQlcCisJCQkJCS5wcmV2aW91czsJCQlcCisJCQkJCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCI7CVwKKwkJCQkJLndvcmQJMWIsM2I7CQkJXAorCQkJCQkucHJldmlvdXM7IgkJCVwKKwkJCQk6ICI9ciIgKGZhdWx0ZWQpCisJCQkJOiAiciIgKGFkZHIpLCAiciIgKHZhbHVlKQorCSk7CisKKwlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTUlDUk9CTEFaRV9OT1AgMHg4MDAwMDAwMAorI2RlZmluZSBNSUNST0JMQVpFX0JSSSAweGI4MDAwMDBDCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVjb3JkZWQ7IC8qIGlmIHNhdmUgd2FzIG9yIG5vdCAqLworc3RhdGljIHVuc2lnbmVkIGludCBpbW07IC8qIHNhdmluZyB3aG9sZSBpbW0gaW5zdHJ1Y3Rpb24gKi8KKworLyogVGhlcmUgYXJlIHR3byBhcHByb2FjaGVzIGhvd3RvIHNvbHZlIGZ0cmFjZV9tYWtlIG5vcCBmdW5jdGlvbiAtIGxvb2sgYmVsb3cgKi8KKyN1bmRlZiBVU0VfRlRSQUNFX05PUAorCisjaWZkZWYgVVNFX0ZUUkFDRV9OT1AKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnJhbGlkOyAvKiBzYXZpbmcgd2hvbGUgYnJhbGlkIGluc3RydWN0aW9uICovCisjZW5kaWYKKworaW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCQlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJLyogd2UgaGF2ZSB0aGlzIHBhcnQgb2YgY29kZSB3aGljaCB3ZSBhcmUgd29ya2luZyB3aXRoCisJICogYjAwMGMwMDAgICAgICAgIGltbSAgICAgLTE2Mzg0CisJICogYjlmYzhlMzAgICAgICAgIGJyYWxpZCAgcjE1LCAtMjkxMzYgICAgIC8vIGMwMDA4ZTMwIDxfbWNvdW50PgorCSAqIDgwMDAwMDAwICAgICAgICBvciAgICAgIHIwLCByMCwgcjAKKwkgKgorCSAqIFRoZSBmaXJzdCBzb2x1dGlvbiAoIVVTRV9GVFJBQ0VfTk9QLWNvdWxkIGJlIGNhbGxlZCBicmFuY2ggc29sdXRpb24pCisJICogYjAwMGMwMDAgICAgICAgIGJyaQkxMiAoMHhDIC0ganVtcCB0byBhbnkgb3RoZXIgaW5zdHJ1Y3Rpb24pCisJICogYjlmYzhlMzAgICAgICAgIGJyYWxpZCAgcjE1LCAtMjkxMzYgICAgIC8vIGMwMDA4ZTMwIDxfbWNvdW50PgorCSAqIDgwMDAwMDAwICAgICAgICBvciAgICAgIHIwLCByMCwgcjAKKwkgKiBhbnkgb3RoZXIgaW5zdHJ1Y3Rpb24KKwkgKgorCSAqIFRoZSBzZWNvbmQgc29sdXRpb24gKFVTRV9GVFJBQ0VfTk9QKSAtIG5vIGp1bXAganVzdCBub3BzCisJICogODAwMDAwMDAgICAgICAgIG9yICAgICAgcjAsIHIwLCByMAorCSAqIDgwMDAwMDAwICAgICAgICBvciAgICAgIHIwLCByMCwgcjAKKwkgKiA4MDAwMDAwMCAgICAgICAgb3IgICAgICByMCwgcjAsIHIwCisJICovCisJaW50IHJldCA9IDA7CisKKwlpZiAocmVjb3JkZWQgPT0gMCkgeworCQlyZWNvcmRlZCA9IDE7CisJCWltbSA9ICoodW5zaWduZWQgaW50ICopcmVjLT5pcDsKKwkJcHJfZGVidWcoIiVzOiBpbW06MHgleFxuIiwgX19mdW5jX18sIGltbSk7CisjaWZkZWYgVVNFX0ZUUkFDRV9OT1AKKwkJYnJhbGlkID0gKih1bnNpZ25lZCBpbnQgKikocmVjLT5pcCArIDQpOworCQlwcl9kZWJ1ZygiJXM6IGJyYWxpZCAweCV4XG4iLCBfX2Z1bmNfXywgYnJhbGlkKTsKKyNlbmRpZiAvKiBVU0VfRlRSQUNFX05PUCAqLworCX0KKworI2lmZGVmIFVTRV9GVFJBQ0VfTk9QCisJcmV0ID0gZnRyYWNlX21vZGlmeV9jb2RlKHJlYy0+aXAsIE1JQ1JPQkxBWkVfTk9QKTsKKwlyZXQgKz0gZnRyYWNlX21vZGlmeV9jb2RlKHJlYy0+aXAgKyA0LCBNSUNST0JMQVpFX05PUCk7CisjZWxzZSAvKiBVU0VfRlRSQUNFX05PUCAqLworCXJldCA9IGZ0cmFjZV9tb2RpZnlfY29kZShyZWMtPmlwLCBNSUNST0JMQVpFX0JSSSk7CisjZW5kaWYgLyogVVNFX0ZUUkFDRV9OT1AgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJldF9hZGRyOyAvKiBpbml0aWFsaXplZCBhcyAwIGJ5IGRlZmF1bHQgKi8KKworLyogSSBiZWxpZXZlIHRoYXQgZmlyc3QgaXMgY2FsbGVkIGZ0cmFjZV9tYWtlX25vcCBiZWZvcmUgdGhpcyBmdW5jdGlvbiAqLworaW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCByZXQ7CisJcmV0X2FkZHIgPSBhZGRyOyAvKiBzYXZpbmcgd2hlcmUgdGhlIGJhcnJpZXIganVtcCBpcyAqLworCXByX2RlYnVnKCIlczogYWRkcjoweCV4LCByZWMtPmlwOiAweCV4LCBpbW06MHgleFxuIiwKKwkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpYWRkciwgKHVuc2lnbmVkIGludClyZWMtPmlwLCBpbW0pOworCXJldCA9IGZ0cmFjZV9tb2RpZnlfY29kZShyZWMtPmlwLCBpbW0pOworI2lmZGVmIFVTRV9GVFJBQ0VfTk9QCisJcHJfZGVidWcoIiVzOiBicmFsaWQ6MHgleFxuIiwgX19mdW5jX18sIGJyYWxpZCk7CisJcmV0ICs9IGZ0cmFjZV9tb2RpZnlfY29kZShyZWMtPmlwICsgNCwgYnJhbGlkKTsKKyNlbmRpZiAvKiBVU0VfRlRSQUNFX05PUCAqLworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKK3sKKwkvKiBUaGUgcmV0dXJuIGNvZGUgaXMgcmV0dXJlZCB2aWEgZGF0YSAqLworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYykKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfY2FsbCk7CisJdW5zaWduZWQgaW50IHVwcGVyID0gKHVuc2lnbmVkIGludClmdW5jOworCXVuc2lnbmVkIGludCBsb3dlciA9ICh1bnNpZ25lZCBpbnQpZnVuYzsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNyZWF0ZSBwcm9wZXIgc2F2aW5nIHRvIGZ0cmFjZV9jYWxsIHBvbGwgKi8KKwl1cHBlciA9IDB4YjAwMDAwMDAgKyAodXBwZXIgPj4gMTYpOyAvKiBpbW0gZnVuY191cHBlciAqLworCWxvd2VyID0gMHgzMjgwMDAwMCArIChsb3dlciAmIDB4RkZGRik7IC8qIGFkZGlrIHIyMCwgcjAsIGZ1bmNfbG93ZXIgKi8KKworCXByX2RlYnVnKCIlczogZnVuYz0weCV4LCBpcD0weCV4LCB1cHBlcj0weCV4LCBsb3dlcj0weCV4XG4iLAorCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludClmdW5jLCAodW5zaWduZWQgaW50KWlwLCB1cHBlciwgbG93ZXIpOworCisJLyogc2F2ZSB1cHBlciBhbmQgbG93ZXIgY29kZSAqLworCXJldCA9IGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgdXBwZXIpOworCXJldCArPSBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAgKyA0LCBsb3dlcik7CisKKwkvKiBXZSBqdXN0IG5lZWQgdG8gcmVtb3ZlIHRoZSBydHNkIHIxNSwgOCBieSBOT1AgKi8KKwlCVUdfT04oIXJldF9hZGRyKTsKKwlpZiAocmV0X2FkZHIpCisJCXJldCArPSBmdHJhY2VfbW9kaWZ5X2NvZGUocmV0X2FkZHIsIE1JQ1JPQkxBWkVfTk9QKTsKKwllbHNlCisJCXJldCA9IDE7IC8qIGZhdWx0ICovCisKKwkvKiBBbGwgY2hhbmdlcyBhcmUgZG9uZSAtIGxldHMgZG8gY2FjaGVzIGNvbnNpc3RlbnQgKi8KKwlmbHVzaF9pY2FjaGUoKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgordW5zaWduZWQgaW50IG9sZF9qdW1wOyAvKiBzYXZpbmcgcGxhY2UgZm9yIGp1bXAgaW5zdHJ1Y3Rpb24gKi8KKworaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXVuc2lnbmVkIGludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpcCA9ICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGxfZ3JhcGgpOworCisJb2xkX2p1bXAgPSAqKHVuc2lnbmVkIGludCAqKWlwOyAvKiBzYXZlIGp1bXAgb3ZlciBpbnN0cnVjdGlvbiAqLworCXJldCA9IGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgTUlDUk9CTEFaRV9OT1ApOworCWZsdXNoX2ljYWNoZSgpOworCisJcHJfZGVidWcoIiVzOiBSZXBsYWNlIGluc3RydWN0aW9uOiAweCV4XG4iLCBfX2Z1bmNfXywgb2xkX2p1bXApOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfY2FsbF9ncmFwaCk7CisKKwlyZXQgPSBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZF9qdW1wKTsKKwlmbHVzaF9pY2FjaGUoKTsKKworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFydGJlYXQuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaGVhcnRiZWF0LmMKaW5kZXggMWJkZjIwMi4uNTIyNzUxNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFydGJlYXQuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYXJ0YmVhdC5jCkBAIC00NSw2ICs0NSw3IEBACiB2b2lkIHNldHVwX2hlYXJ0YmVhdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3BpbyA9IE5VTEw7CisJaW50ICpwcm9wOwogCWludCBqOwogCWNoYXIgKmdwaW9fbGlzdFtdID0gewogCQkJCSJ4bG54LHhwcy1ncGlvLTEuMDAuYSIsCkBAIC01OCwxMCArNTksMTQgQEAKIAkJCWJyZWFrOwogCX0KIAotCWJhc2VfYWRkciA9ICooaW50ICopIG9mX2dldF9wcm9wZXJ0eShncGlvLCAicmVnIiwgTlVMTCk7Ci0JYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoYmFzZV9hZGRyLCBQQUdFX1NJWkUpOwotCXByaW50ayhLRVJOX05PVElDRSAiSGVhcnRiZWF0IEdQSU8gYXQgMHgleFxuIiwgYmFzZV9hZGRyKTsKKwlpZiAoZ3BpbykgeworCQliYXNlX2FkZHIgPSAqKGludCAqKSBvZl9nZXRfcHJvcGVydHkoZ3BpbywgInJlZyIsIE5VTEwpOworCQliYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChiYXNlX2FkZHIsIFBBR0VfU0laRSk7CisJCXByaW50ayhLRVJOX05PVElDRSAiSGVhcnRiZWF0IEdQSU8gYXQgMHgleFxuIiwgYmFzZV9hZGRyKTsKIAotCWlmICgqKGludCAqKSBvZl9nZXRfcHJvcGVydHkoZ3BpbywgInhsbngsaXMtYmlkaXIiLCBOVUxMKSkKLQkJb3V0X2JlMzIoYmFzZV9hZGRyICsgNCwgMCk7IC8qIEdQSU8gaXMgY29uZmlndXJlZCBhcyBvdXRwdXQgKi8KKwkJLyogR1BJTyBpcyBjb25maWd1cmVkIGFzIG91dHB1dCAqLworCQlwcm9wID0gKGludCAqKSBvZl9nZXRfcHJvcGVydHkoZ3BpbywgInhsbngsaXMtYmlkaXIiLCBOVUxMKTsKKwkJaWYgKHByb3ApCisJCQlvdXRfYmUzMihiYXNlX2FkZHIgKyA0LCAwKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2ludGMuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaW50Yy5jCmluZGV4IDZlZWE2ZjkuLjAzMTcyYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaW50Yy5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaW50Yy5jCkBAIC00Miw4ICs0MiwxNiBAQAogCiBzdGF0aWMgdm9pZCBpbnRjX2VuYWJsZV9vcl91bm1hc2sodW5zaWduZWQgaW50IGlycSkKIHsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IGlycTsKIAlwcl9kZWJ1ZygiZW5hYmxlX29yX3VubWFzazogJWRcbiIsIGlycSk7Ci0Jb3V0X2JlMzIoSU5UQ19CQVNFICsgU0lFLCAxIDw8IGlycSk7CisJb3V0X2JlMzIoSU5UQ19CQVNFICsgU0lFLCBtYXNrKTsKKworCS8qIGFjayBsZXZlbCBpcnFzIGJlY2F1c2UgdGhleSBjYW4ndCBiZSBhY2tlZCBkdXJpbmcKKwkgKiBhY2sgZnVuY3Rpb24gc2luY2UgdGhlIGhhbmRsZV9sZXZlbF9pcnEgZnVuY3Rpb24KKwkgKiBhY2tzIHRoZSBpcnEgYmVmb3JlIGNhbGxpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyCisJICovCisJaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKQorCQlvdXRfYmUzMihJTlRDX0JBU0UgKyBJQVIsIG1hc2spOwogfQogCiBzdGF0aWMgdm9pZCBpbnRjX2Rpc2FibGVfb3JfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pcnEuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaXJxLmMKaW5kZXggN2Q1ZGRkNi4uMGYwNjAzNCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2lycS5jCkBAIC02OCw3ICs2OCw3IEBACiAJfQogCiAJaWYgKGkgPCBucl9pcnEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHNraXA7CkBAIC04OSw3ICs4OSw3IEBACiAKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiBza2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9tY291bnQuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvbWNvdW50LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlYWE3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvbWNvdW50LlMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBMb3ctbGV2ZWwgZnRyYWNlIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBQZXRhTG9naXgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjZGVmaW5lIE5PQUxJR05fRU5UUlkobmFtZSkJLmdsb2JsIG5hbWU7IG5hbWU6CisKKy8qIEZJWE1FIE1TOiBJIHRoaW5rIHRoYXQgSSBkb24ndCBuZWVkIHRvIHNhdmUgYWxsIHJlZ3MgKi8KKyNkZWZpbmUgU0FWRV9SRUdTCQlcCisJYWRkaWsJcjEsIHIxLCAtMTIwOwlcCisJc3dpCXIyLCByMSwgNDsJXAorCXN3aQlyMywgcjEsIDg7CVwKKwlzd2kJcjQsIHIxLCAxMjsJXAorCXN3aQlyNSwgcjEsIDExNjsJXAorCXN3aQlyNiwgcjEsIDE2OwlcCisJc3dpCXI3LCByMSwgMjA7CVwKKwlzd2kJcjgsIHIxLCAyNDsJXAorCXN3aQlyOSwgcjEsIDI4OwlcCisJc3dpCXIxMCwgcjEsIDMyOwlcCisJc3dpCXIxMSwgcjEsIDM2OwlcCisJc3dpCXIxMiwgcjEsIDQwOwlcCisJc3dpCXIxMywgcjEsIDQ0OwlcCisJc3dpCXIxNCwgcjEsIDQ4OwlcCisJc3dpCXIxNiwgcjEsIDUyOwlcCisJc3dpCXIxNywgcjEsIDU2OwlcCisJc3dpCXIxOCwgcjEsIDYwOwlcCisJc3dpCXIxOSwgcjEsIDY0OwlcCisJc3dpCXIyMCwgcjEsIDY4OwlcCisJc3dpCXIyMSwgcjEsIDcyOwlcCisJc3dpCXIyMiwgcjEsIDc2OwlcCisJc3dpCXIyMywgcjEsIDgwOwlcCisJc3dpCXIyNCwgcjEsIDg0OwlcCisJc3dpCXIyNSwgcjEsIDg4OwlcCisJc3dpCXIyNiwgcjEsIDkyOwlcCisJc3dpCXIyNywgcjEsIDk2OwlcCisJc3dpCXIyOCwgcjEsIDEwMDsJXAorCXN3aQlyMjksIHIxLCAxMDQ7CVwKKwlzd2kJcjMwLCByMSwgMTA4OwlcCisJc3dpCXIzMSwgcjEsIDExMjsKKworI2RlZmluZSBSRVNUT1JFX1JFR1MJCVwKKwlsd2kJcjIsIHIxLCA0OwlcCisJbHdpCXIzLCByMSwgODsJXAorCWx3aQlyNCwgcjEsIDEyOwlcCisJbHdpCXI1LCByMSwgMTE2OwlcCisJbHdpCXI2LCByMSwgMTY7CVwKKwlsd2kJcjcsIHIxLCAyMDsJXAorCWx3aQlyOCwgcjEsIDI0OwlcCisJbHdpCXI5LCByMSwgMjg7CVwKKwlsd2kJcjEwLCByMSwgMzI7CVwKKwlsd2kJcjExLCByMSwgMzY7CVwKKwlsd2kJcjEyLCByMSwgNDA7CVwKKwlsd2kJcjEzLCByMSwgNDQ7CVwKKwlsd2kJcjE0LCByMSwgNDg7CVwKKwlsd2kJcjE2LCByMSwgNTI7CVwKKwlsd2kJcjE3LCByMSwgNTY7CVwKKwlsd2kJcjE4LCByMSwgNjA7CVwKKwlsd2kJcjE5LCByMSwgNjQ7CVwKKwlsd2kJcjIwLCByMSwgNjg7CVwKKwlsd2kJcjIxLCByMSwgNzI7CVwKKwlsd2kJcjIyLCByMSwgNzY7CVwKKwlsd2kJcjIzLCByMSwgODA7CVwKKwlsd2kJcjI0LCByMSwgODQ7CVwKKwlsd2kJcjI1LCByMSwgODg7CVwKKwlsd2kJcjI2LCByMSwgOTI7CVwKKwlsd2kJcjI3LCByMSwgOTY7CVwKKwlsd2kJcjI4LCByMSwgMTAwOwlcCisJbHdpCXIyOSwgcjEsIDEwNDsJXAorCWx3aQlyMzAsIHIxLCAxMDg7CVwKKwlsd2kJcjMxLCByMSwgMTEyOwlcCisJYWRkaWsJcjEsIHIxLCAxMjA7CisKK0VOVFJZKGZ0cmFjZV9zdHViKQorCXJ0c2QJcjE1LCA4OworCW5vcDsKKworRU5UUlkoX21jb3VudCkKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK0VOVFJZKGZ0cmFjZV9jYWxsZXIpCisJLyogTVM6IEl0IGlzIGp1c3QgYmFycmllciB3aGljaCBpcyByZW1vdmVkIGZyb20gQyBjb2RlICovCisJcnRzZAlyMTUsIDgKKwlub3AKKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKwlTQVZFX1JFR1MKKwlzd2kJcjE1LCByMSwgMDsKKwkvKiBNUzogSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVCBiZWdpbiBvZiBjaGVja2luZyAqLworCWx3aQlyNSwgcjAsIGZ1bmN0aW9uX3RyYWNlX3N0b3A7CisJYm5laWQJcjUsIGVuZDsKKwlub3A7CisJLyogTVM6IEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QgZW5kIG9mIGNoZWNraW5nICovCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorI2lmbmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKwlsd2kJcjUsIHIwLCBmdHJhY2VfZ3JhcGhfcmV0dXJuOworCWFkZGlrCXI2LCByMCwgZnRyYWNlX3N0dWI7IC8qIGFzbSBpbXBsZW1lbnRhdGlvbiAqLworCWNtcHUJcjUsIHI1LCByNjsgLyogZnRyYWNlX2dyYXBoX3JldHVybiAhPSBmdHJhY2Vfc3R1YiAqLworCWJlcWlkCXI1LCBlbmRfZ3JhcGhfdHJhY2VyOworCW5vcDsKKworCWx3aQlyNiwgcjAsIGZ0cmFjZV9ncmFwaF9lbnRyeTsKKwlhZGRpawlyNSwgcjAsIGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViOyAvKiBpbXBsZW1lbnRlZCBpbiBDICovCisJY21wdQlyNSwgcjUsIHI2OyAvKiBmdHJhY2VfZ3JhcGhfZW50cnkgIT0gZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIgKi8KKwliZXFpZAlyNSwgZW5kX2dyYXBoX3RyYWNlcjsKKwlub3A7CisjZWxzZSAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KK05PQUxJR05fRU5UUlkoZnRyYWNlX2NhbGxfZ3JhcGgpCisJLyogTVM6IGp1bXAgb3ZlciBncmFwaCBmdW5jdGlvbiAtIHJlcGxhY2VkIGZyb20gQyBjb2RlICovCisJYnJpCWVuZF9ncmFwaF90cmFjZXIKKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKwlhZGRpawlyNSwgcjEsIDEyMDsgLyogTVM6IGxvYWQgcGFyZW50IGFkZHIgKi8KKwlhZGRpawlyNiwgcjE1LCAwOyAvKiBNUzogbG9hZCBjdXJyZW50IGZ1bmN0aW9uIGFkZHIgKi8KKwlicmFsaWQJcjE1LCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm47CisJbm9wOworCS8qIE1TOiBncmFwaCB3YXMgdGFrZW4gdGhhdCdzIHdoeSAtIGNhbiBqdW1wIG92ZXIgZnVuY3Rpb24gdHJhY2UgKi8KKwlicmlkCWVuZDsKKwlub3A7CitlbmRfZ3JhcGhfdHJhY2VyOgorI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KKyNpZm5kZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisJLyogTVM6IHRlc3QgZnVuY3Rpb24gdHJhY2UgaWYgaXMgdGFrZW4gb3Igbm90ICovCisJbHdpCXIyMCwgcjAsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbjsKKwlhZGRpawlyNiwgcjAsIGZ0cmFjZV9zdHViOworCWNtcHUJcjUsIHIyMCwgcjY7IC8qIGZ0cmFjZV90cmFjZV9mdW5jdGlvbiAhPSBmdHJhY2Vfc3R1YiAqLworCWJlcWlkCXI1LCBlbmQ7IC8qIE1TOiBub3QgdGFrZW4gLT4ganVtcCBvdmVyICovCisJbm9wOworI2Vsc2UgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCitOT0FMSUdOX0VOVFJZKGZ0cmFjZV9jYWxsKQorLyogaW5zdHJ1Y3Rpb24gZm9yIHNldHVwIGltbSBGVU5DX3BhcnQxLCBhZGRpayByMjAsIHIwLCBGVU5DX3BhcnQyICovCisJbm9wCisJbm9wCisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisvKiBzdGF0aWMgbm9ybWFsIHRyYWNlICovCisJbHdpCXI2LCByMSwgMTIwOyAvKiBNUzogbG9hZCBwYXJlbnQgYWRkciAqLworCWFkZGlrCXI1LCByMTUsIDA7IC8qIE1TOiBsb2FkIGN1cnJlbnQgZnVuY3Rpb24gYWRkciAqLworCS8qIE1TOiBoZXJlIGlzIGRlcGVuZGVuY3kgb24gcHJldmlvdXMgY29kZSAqLworCWJyYWxkCXIxNSwgcjIwOyAvKiBNUzoganVtcCB0byBmdHJhY2UgaGFuZGxlciAqLworCW5vcDsKK2VuZDoKKwlsd2kJcjE1LCByMSwgMDsKKwlSRVNUT1JFX1JFR1MKKworCXJ0c2QJcjE1LCA4OyAvKiBNUzoganVtcCBiYWNrICovCisJbm9wOworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorRU5UUlkocmV0dXJuX3RvX2hhbmRsZXIpCisJbm9wOyAvKiBNUzoganVzdCBiYXJyaWVyIGZvciBydHNkIHIxNSwgOCAqLworCW5vcDsKKwlTQVZFX1JFR1MKKwlzd2kJcjE1LCByMSwgMDsKKworCS8qIE1TOiBmaW5kIG91dCByZXR1cm5pbmcgYWRkcmVzcyAqLworCWJyYWxpZAlyMTUsIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcjsKKwlub3A7CisKKwkvKiBNUzogcmV0dXJuIHZhbHVlIGZyb20gZnRyYWNlX3JldHVybl90b19oYW5kbGVyIGlzIG15IHJldHVybmluZyBhZGRyCisJICogbXVzdCBiZSBiZWZvcmUgcmVzdG9yZSByZWdzIGJlY2F1c2UgSSBoYXZlIHRvIHJlc3RvcmUgcjMgY29udGVudCAqLworCWFkZGlrCXIxNSwgcjMsIDA7CisJUkVTVE9SRV9SRUdTCisKKwlydHNkCXIxNSwgODsgLyogTVM6IGp1bXAgYmFjayAqLworCW5vcDsKKyNlbmRpZgkvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL21pY3JvYmxhemVfa3N5bXMuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvbWljcm9ibGF6ZV9rc3ltcy5jCmluZGV4IDU5ZmYyMGUuLmJjNGRjYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvbWljcm9ibGF6ZV9rc3ltcy5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvbWljcm9ibGF6ZV9rc3ltcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIC8qCkBAIC00NywzICs0OCw3IEBACiBFWFBPUlRfU1lNQk9MKF9fdW1vZHNpMyk7CiBleHRlcm4gY2hhciAqX2Vic3M7CiBFWFBPUlRfU1lNQk9MX0dQTChfZWJzcyk7CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorZXh0ZXJuIHZvaWQgX21jb3VudCh2b2lkKTsKK0VYUE9SVF9TWU1CT0woX21jb3VudCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzU5MmQ0Ny4uODEyZjFiZiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcmVzZXQuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTcyMWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9yZXNldC5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBQZXRhTG9naXgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCisvKiBUcmlnZ2VyIHNwZWNpZmljIGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTkZJR19HUElPTElCCisKKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisKK3N0YXRpYyBpbnQgaGFuZGxlOyAvKiByZXNldCBwaW4gaGFuZGxlICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJlc2V0X3ZhbDsKKworc3RhdGljIGludCBvZl9yZXNldF9ncGlvX2hhbmRsZSh2b2lkKQoreworCWludCByZXQ7IC8qIHZhcmlhYmxlIHdoaWNoIHN0b3JlZCBoYW5kbGUgcmVzZXQgZ3BpbyBwaW4gKi8KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7IC8qIHJvb3Qgbm9kZSAqLworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3BpbzsgLyogZ3BpbyBub2RlICovCisJc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSBOVUxMOworCWVudW0gb2ZfZ3Bpb19mbGFncyBmbGFncyA7CisJY29uc3Qgdm9pZCAqZ3Bpb19zcGVjOworCisJLyogZmluZCBvdXQgcm9vdCBub2RlICovCisJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisKKwkvKiBnaXZlIG1lIGhhbmRsZSBmb3IgZ3BpbyBub2RlIHRvIGJlIHBvc3NpYmxlIGFsbG9jYXRlIHBpbiAqLworCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyhyb290LCAiaGFyZC1yZXNldC1ncGlvcyIsCisJCQkJIiNncGlvLWNlbGxzIiwgMCwgJmdwaW8sICZncGlvX3NwZWMpOworCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoIiVzOiBjYW4ndCBwYXJzZSBncGlvcyBwcm9wZXJ0eVxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycjA7CisJfQorCisJb2ZfZ2MgPSBncGlvLT5kYXRhOworCWlmICghb2ZfZ2MpIHsKKwkJcHJfZGVidWcoIiVzOiBncGlvIGNvbnRyb2xsZXIgJXMgaXNuJ3QgcmVnaXN0ZXJlZFxuIiwKKwkJCSByb290LT5mdWxsX25hbWUsIGdwaW8tPmZ1bGxfbmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXQgPSBvZl9nYy0+eGxhdGUob2ZfZ2MsIHJvb3QsIGdwaW9fc3BlYywgJmZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnIxOworCisJcmV0ICs9IG9mX2djLT5nYy5iYXNlOworZXJyMToKKwlvZl9ub2RlX3B1dChncGlvKTsKK2VycjA6CisJcHJfZGVidWcoIiVzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBvZl9wbGF0Zm9ybV9yZXNldF9ncGlvX3Byb2JlKHZvaWQpCit7CisJaW50IHJldDsKKwloYW5kbGUgPSBvZl9yZXNldF9ncGlvX2hhbmRsZSgpOworCisJaWYgKCFncGlvX2lzX3ZhbGlkKGhhbmRsZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2tpcHBpbmcgdW5hdmFpbGFibGUgUkVTRVQgZ3BpbyAlZCAoJXMpXG4iLAorCQkJCWhhbmRsZSwgInJlc2V0Iik7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhhbmRsZSwgInJlc2V0Iik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR1BJTyBwaW4gaXMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogZ2V0IGN1cnJlbnQgc2V0dXAgdmFsdWUgKi8KKwlyZXNldF92YWwgPSBncGlvX2dldF92YWx1ZShoYW5kbGUpOworCS8qIEZJWE1FIG1heWJlIHdvcnRoIHRvIHBlcmZvcm0gYW55IGFjdGlvbiAqLworCXByX2RlYnVnKCJSZXNldDogR3BpbyBvdXRwdXQgc3RhdGU6IDB4JXhcbiIsIHJlc2V0X3ZhbCk7CisKKwkvKiBTZXR1cCBHUElPIGFzIG91dHB1dCAqLworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChoYW5kbGUsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCS8qIFNldHVwIG91dHB1dCBkaXJlY3Rpb24gKi8KKwlncGlvX3NldF92YWx1ZShoYW5kbGUsIDApOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUkVTRVQ6IFJlZ2lzdGVyZWQgZ3BpbyBkZXZpY2U6ICVkLCBjdXJyZW50IHZhbDogJWRcbiIsCisJCQkJCQkJaGFuZGxlLCByZXNldF92YWwpOworCXJldHVybjsKK2VycjoKKwlncGlvX2ZyZWUoaGFuZGxlKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgZ3Bpb19zeXN0ZW1fcmVzZXQodm9pZCkKK3sKKwlncGlvX3NldF92YWx1ZShoYW5kbGUsIDEgLSByZXNldF92YWwpOworfQorI2Vsc2UKKyNkZWZpbmUgZ3Bpb19zeXN0ZW1fcmVzZXQoKSBkbyB7fSB3aGlsZSAoMCkKK3ZvaWQgb2ZfcGxhdGZvcm1fcmVzZXRfZ3Bpb19wcm9iZSh2b2lkKQoreworCXJldHVybjsKK30KKyNlbmRpZgorCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICJNYWNoaW5lIHJlc3RhcnQuLi5cbiIpOworCWdwaW9fc3lzdGVtX3Jlc2V0KCk7CisJZHVtcF9zdGFjaygpOworCXdoaWxlICgxKQorCQk7Cit9CisKK3ZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworCXByaW50ayhLRVJOX05PVElDRSAiTWFjaGluZSBzaHV0ZG93bi4uLlxuIik7CisJd2hpbGUgKDEpCisJCTsKK30KKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgIk1hY2hpbmUgaGFsdC4uLlxuIik7CisJd2hpbGUgKDEpCisJCTsKK30KKwordm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50ayhLRVJOX05PVElDRSAiTWFjaGluZSBwb3dlciBvZmYuLi5cbiIpOworCXdoaWxlICgxKQorCQk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKaW5kZXggOGMxZTBmNGQuLjUzNzJiMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKQEAgLTUyLDEzICs1MiwxMiBAQAogCS8qIGlycV9lYXJseV9pbml0KCk7ICovCiAJc2V0dXBfY3B1aW5mbygpOwogCi0JX19pbnZhbGlkYXRlX2ljYWNoZV9hbGwoKTsKLQlfX2VuYWJsZV9pY2FjaGUoKTsKKwltaWNyb2JsYXplX2NhY2hlX2luaXQoKTsKIAotCV9faW52YWxpZGF0ZV9kY2FjaGVfYWxsKCk7Ci0JX19lbmFibGVfZGNhY2hlKCk7CisJZW5hYmxlX2RjYWNoZSgpOwogCi0JcGFuaWNfdGltZW91dCA9IDEyMDsKKwlpbnZhbGlkYXRlX2ljYWNoZSgpOworCWVuYWJsZV9pY2FjaGUoKTsKIAogCXNldHVwX21lbW9yeSgpOwogCkBAIC0xMzEsNiArMTMwLDggQEAKIAkJc3RybGNweShjbWRfbGluZSwgY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwogI2VuZGlmCiAKKwlsb2NrZGVwX2luaXQoKTsKKwogLyogaW5pdGlhbGl6ZSBkZXZpY2UgdHJlZSBmb3IgdXNhZ2UgaW4gZWFybHlfcHJpbnRrICovCiAJZWFybHlfaW5pdF9kZXZ0cmVlKCh2b2lkICopX2ZkdF9zdGFydCk7CiAKQEAgLTE4NiwzMiArMTg3LDMgQEAKIH0KIGFyY2hfaW5pdGNhbGwobWljcm9ibGF6ZV9kZWJ1Z2ZzX2luaXQpOwogI2VuZGlmCi0KLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNtZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIk1hY2hpbmUgcmVzdGFydC4uLlxuIik7Ci0JZHVtcF9zdGFjaygpOwotCXdoaWxlICgxKQotCQk7Ci19Ci0KLXZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQotewotCXByaW50ayhLRVJOX05PVElDRSAiTWFjaGluZSBzaHV0ZG93bi4uLlxuIik7Ci0Jd2hpbGUgKDEpCi0JCTsKLX0KLQotdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIk1hY2hpbmUgaGFsdC4uLlxuIik7Ci0Jd2hpbGUgKDEpCi0JCTsKLX0KLQotdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQotewotCXByaW50ayhLRVJOX05PVElDRSAiTWFjaGluZSBwb3dlciBvZmYuLi5cbiIpOwotCXdoaWxlICgxKQotCQk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zaWduYWwuYwppbmRleCAxYzgwZTRmLi5kOGQzYmIzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2lnbmFsLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKIAogYXNtbGlua2FnZSBpbnQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaWdzZXRfdCAqb2xkc2V0LCBpbnQgaW5fc3ljYWxsKTsKIAotCiBhc21saW5rYWdlIGxvbmcKIHN5c19zaWdhbHRzdGFjayhjb25zdCBzdGFja190IF9fdXNlciAqdXNzLCBzdGFja190IF9fdXNlciAqdW9zcywKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0xNzYsNiArMTc1LDExIEBACiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CiAJaW50IGVyciA9IDA7CiAJaW50IHNpZ25hbDsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAwOworI2lmZGVmIENPTkZJR19NTVUKKwlwbWRfdCAqcG1kcDsKKwlwdGVfdCAqcHRlcDsKKyNlbmRpZgogCiAJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKIApAQCAtMjE2LDggKzIyMCwyOSBAQAogCSBOZWdhdGl2ZSA4IG9mZnNldCBiZWNhdXNlIHJldHVybiBpcyBydHNkIHIxNSwgOCAqLwogCXJlZ3MtPnIxNSA9ICgodW5zaWduZWQgbG9uZylmcmFtZS0+dHJhbXApLTg7CiAKLQlfX2ludmFsaWRhdGVfY2FjaGVfc2lndHJhbXAoKHVuc2lnbmVkIGxvbmcpZnJhbWUtPnRyYW1wKTsKKwlhZGRyZXNzID0gKCh1bnNpZ25lZCBsb25nKWZyYW1lLT50cmFtcCk7CisjaWZkZWYgQ09ORklHX01NVQorCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQoCisJCQlwZ2Rfb2Zmc2V0KGN1cnJlbnQtPm1tLCBhZGRyZXNzKSwKKwkJCQkJYWRkcmVzcyksIGFkZHJlc3MpOwogCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZHAsIGFkZHJlc3MpOworCWlmIChwdGVfcHJlc2VudCgqcHRlcCkpIHsKKwkJYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3MocHRlX3BhZ2UoKnB0ZXApKTsKKwkJLyogTVM6IEkgbmVlZCBhZGQgb2Zmc2V0IGluIHBhZ2UgKi8KKwkJYWRkcmVzcyArPSAoKHVuc2lnbmVkIGxvbmcpZnJhbWUtPnRyYW1wKSAmIH5QQUdFX01BU0s7CisJCS8qIE1TIGFkZHJlc3MgaXMgdmlydHVhbCAqLworCQlhZGRyZXNzID0gdmlydF90b19waHlzKGFkZHJlc3MpOworCQlpbnZhbGlkYXRlX2ljYWNoZV9yYW5nZShhZGRyZXNzLCBhZGRyZXNzICsgOCk7CisJCWZsdXNoX2RjYWNoZV9yYW5nZShhZGRyZXNzLCBhZGRyZXNzICsgOCk7CisJfQorCXB0ZV91bm1hcChwdGVwKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworI2Vsc2UKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoYWRkcmVzcywgYWRkcmVzcyArIDgpOworCWZsdXNoX2RjYWNoZV9yYW5nZShhZGRyZXNzLCBhZGRyZXNzICsgOCk7CisjZW5kaWYKIAlpZiAoZXJyKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKIApAQCAtMjMzLDYgKzI1OCwxMCBAQAogCiAJc2V0X2ZzKFVTRVJfRFMpOwogCisJLyogdGhlIHRyYWNlciBtYXkgd2FudCB0byBzaW5nbGUtc3RlcCBpbnNpZGUgdGhlIGhhbmRsZXIgKi8KKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpCisJCXB0cmFjZV9ub3RpZnkoU0lHVFJBUCk7CisKICNpZmRlZiBERUJVR19TSUcKIAlwcmludGsoS0VSTl9JTkZPICJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseFxuIiwKIAkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+cGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N0YWNrdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM2OTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIFN0YWNrIHRyYWNlIHN1cHBvcnQgZm9yIE1pY3JvYmxhemUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBQZXRhTG9naXgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKiBGSVhNRSBpbml0aWFsIHN1cHBvcnQgKi8KK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQoreworCXVuc2lnbmVkIGxvbmcgKnNwOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlhc20oImFkZGlrICUwLCByMSwgMCIgOiAiPXIiIChzcCkpOworCisJd2hpbGUgKCFrc3RhY2tfZW5kKHNwKSkgeworCQlhZGRyID0gKnNwKys7CisJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKKwkJCWlmICh0cmFjZS0+c2tpcCA+IDApCisJCQkJdHJhY2UtPnNraXAtLTsKKwkJCWVsc2UKKwkJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CisKKwkJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlKTsKKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwl1bnNpZ25lZCBpbnQgKnNwOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSB0YXNrX3RocmVhZF9pbmZvKHRzayk7CisKKwlpZiAodHNrID09IGN1cnJlbnQpCisJCWFzbSgiYWRkaWsgJTAsIHIxLCAwIiA6ICI9ciIgKHNwKSk7CisJZWxzZQorCQlzcCA9ICh1bnNpZ25lZCBpbnQgKil0aS0+Y3B1X2NvbnRleHQucjE7CisKKwl3aGlsZSAoIWtzdGFja19lbmQoc3ApKSB7CisJCWFkZHIgPSAqc3ArKzsKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworCQkJaWYgKHRyYWNlLT5za2lwID4gMCkKKwkJCQl0cmFjZS0+c2tpcC0tOworCQkJZWxzZQorCQkJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gYWRkcjsKKworCQkJaWYgKHRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllcykKKwkJCQlicmVhazsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhdmVfc3RhY2tfdHJhY2VfdHNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggYjk2ZjM2NS4uNDA4OGJlNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTE4Myw3ICsxODMsNyBAQAogCS5sb25nIHN5c19ydF9zaWdwZW5kaW5nCiAJLmxvbmcgc3lzX3J0X3NpZ3RpbWVkd2FpdAogCS5sb25nIHN5c19ydF9zaWdxdWV1ZWluZm8KLQkubG9uZyBzeXNfcnRfc2lnc3VzcGVuZF93cmFwcGVyCisJLmxvbmcgc3lzX3J0X3NpZ3N1c3BlbmQKIAkubG9uZyBzeXNfcHJlYWQ2NAkJLyogMTgwICovCiAJLmxvbmcgc3lzX3B3cml0ZTY0CiAJLmxvbmcgc3lzX2Nob3duCkBAIC0zMDMsNyArMzAzLDcgQEAKIAkubG9uZyBzeXNfbWtkaXJhdAogCS5sb25nIHN5c19ta25vZGF0CiAJLmxvbmcgc3lzX2ZjaG93bmF0Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfZnV0aW1lc2F0CiAJLmxvbmcgc3lzX2ZzdGF0YXQ2NAkJLyogMzAwICovCiAJLmxvbmcgc3lzX3VubGlua2F0CiAJLmxvbmcgc3lzX3JlbmFtZWF0CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMKaW5kZXggNTQ5OWRlYS4uZWQ2MWIyZiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdGltZXIuYwpAQCAtMTgzLDYgKzE4MywzMSBAQAogCXJldHVybiAoY3ljbGVfdCkgKGluX2JlMzIoVElNRVJfQkFTRSArIFRDUjEpKTsKIH0KIAorc3RhdGljIHN0cnVjdCB0aW1lY291bnRlciBtaWNyb2JsYXplX3RjID0geworCS5jYyA9IE5VTEwsCit9OworCitzdGF0aWMgY3ljbGVfdCBtaWNyb2JsYXplX2NjX3JlYWQoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MpCit7CisJcmV0dXJuIG1pY3JvYmxhemVfcmVhZChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBjeWNsZWNvdW50ZXIgbWljcm9ibGF6ZV9jYyA9IHsKKwkucmVhZCA9IG1pY3JvYmxhemVfY2NfcmVhZCwKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdCA9IDI0LAorfTsKKworaW50IF9faW5pdCBpbml0X21pY3JvYmxhemVfdGltZWNvdW50ZXIodm9pZCkKK3sKKwltaWNyb2JsYXplX2NjLm11bHQgPSBkaXZfc2MoY3B1aW5mby5jcHVfY2xvY2tfZnJlcSwgTlNFQ19QRVJfU0VDLAorCQkJCW1pY3JvYmxhemVfY2Muc2hpZnQpOworCisJdGltZWNvdW50ZXJfaW5pdCgmbWljcm9ibGF6ZV90YywgJm1pY3JvYmxhemVfY2MsIHNjaGVkX2Nsb2NrKCkpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfbWljcm9ibGF6ZSA9IHsKIAkubmFtZQkJPSAibWljcm9ibGF6ZV9jbG9ja3NvdXJjZSIsCiAJLnJhdGluZwkJPSAzMDAsCkBAIC0yMDQsNiArMjI5LDkgQEAKIAlvdXRfYmUzMihUSU1FUl9CQVNFICsgVENTUjEsIGluX2JlMzIoVElNRVJfQkFTRSArIFRDU1IxKSAmIH5UQ1NSX0VOVCk7CiAJLyogc3RhcnQgdGltZXIxIC0gdXAgY291bnRpbmcgd2l0aG91dCBpbnRlcnJ1cHQgKi8KIAlvdXRfYmUzMihUSU1FUl9CQVNFICsgVENTUjEsIFRDU1JfVElOVHxUQ1NSX0VOVHxUQ1NSX0FSSFQpOworCisJLyogcmVnaXN0ZXIgdGltZWNvdW50ZXIgLSBmb3IgZnRyYWNlIHN1cHBvcnQgKi8KKwlpbml0X21pY3JvYmxhemVfdGltZWNvdW50ZXIoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGU3MDQxODguLjVlZjYxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI2LDExICsyNiwxMiBAQAogCQlfc3RleHQgPSAuIDsKIAkJKigudGV4dCAudGV4dC4qKQogCQkqKC5maXh1cCkKLSAgICAgICAgICAgICAgIEVYSVRfVEVYVAotICAgICAgICAgICAgICAgRVhJVF9DQUxMCisJCUVYSVRfVEVYVAorCQlFWElUX0NBTEwKIAkJU0NIRURfVEVYVAogCQlMT0NLX1RFWFQKIAkJS1BST0JFU19URVhUCisJCUlSUUVOVFJZX1RFWFQKIAkJLiA9IEFMSUdOICg0KSA7CiAJCV9ldGV4dCA9IC4gOwogCX0KQEAgLTg2LDYgKzg3LDcgQEAKIAkJX0tFUk5FTF9TREFfQkFTRV8gPSBfc3NybyArIChfc3Nyb19zaXplIC8gMikgOwogCX0KIAorCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdF9iZWdpbiA9IC47CiAKIAlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbGliL3VhY2Nlc3MuYyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvdWFjY2Vzcy5jCmluZGV4IDhlYjlkZjUuLmE4NTNmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9saWIvdWFjY2Vzcy5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvdWFjY2Vzcy5jCkBAIC0zOSwzICszOSwxMCBAQAogCQlfX2RvX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCwgcmVzKTsKIAlyZXR1cm4gcmVzOwogfQorCit1bnNpZ25lZCBsb25nIF9fY29weV90b2Zyb21fdXNlcih2b2lkIF9fdXNlciAqdG8sCisJCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMgYi9hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jCmluZGV4IGE0NDg5MmUuLmE1N2NlZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMKKysrIGIvYXJjaC9taWNyb2JsYXplL21tL2luaXQuYwpAQCAtNDEsNiArNDEsNyBAQAogICogaGF2ZSBhdmFpbGFibGUuCiAgKi8KIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworRVhQT1JUX1NZTUJPTChtZW1vcnlfc3RhcnQpOwogdW5zaWduZWQgbG9uZyBtZW1vcnlfZW5kOyAvKiBkdWUgdG8gbW0vbm9tbXUuYyAqLwogdW5zaWduZWQgbG9uZyBtZW1vcnlfc2l6ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL21tL3BndGFibGUuYyBiL2FyY2gvbWljcm9ibGF6ZS9tbS9wZ3RhYmxlLmMKaW5kZXggNDZjNGNhNS4uMjgyMDA4MSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL21tL3BndGFibGUuYworKysgYi9hcmNoL21pY3JvYmxhemUvbW0vcGd0YWJsZS5jCkBAIC0xNDQsNyArMTQ0LDYgQEAKIAlwbWRfdCAqcGQ7CiAJcHRlX3QgKnBnOwogCWludCBlcnIgPSAtRU5PTUVNOwotCS8qIHNwaW5fbG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOyAqLwogCS8qIFVzZSB1cHBlciAxMCBiaXRzIG9mIFZBIHRvIGluZGV4IHRoZSBmaXJzdCBsZXZlbCBtYXAgKi8KIAlwZCA9IHBtZF9vZmZzZXQocGdkX29mZnNldF9rKHZhKSwgdmEpOwogCS8qIFVzZSBtaWRkbGUgMTAgYml0cyBvZiBWQSB0byBpbmRleCB0aGUgc2Vjb25kLWxldmVsIG1hcCAqLwpAQCAtMTU4LDkgKzE1Nyw3IEBACiAJCWlmIChtZW1faW5pdF9kb25lKQogCQkJZmx1c2hfSFBURSgwLCB2YSwgcG1kX3ZhbCgqcGQpKTsKIAkJCS8qIGZsdXNoX0hQVEUoMCwgdmEsIHBnKTsgKi8KLQogCX0KLQkvKiBzcGluX3VubG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOyAqLwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4MiwxMiArMTc5LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93X3RtZW0odW5zaWduZWQgbG9uZyB0bWVtKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYTsKLQlhID0gYSArIHRtZW07Ci19Ci0KIC8qCiAgKiBNYXAgaW4gYWxsIG9mIHBoeXNpY2FsIG1lbW9yeSBzdGFydGluZyBhdCBDT05GSUdfS0VSTkVMX1NUQVJULgogICovCkBAIC0xOTcsNyArMTg4LDYgQEAKIAogCXYgPSBDT05GSUdfS0VSTkVMX1NUQVJUOwogCXAgPSBtZW1vcnlfc3RhcnQ7Ci0Jc2hvd190bWVtKG1lbW9yeV9zaXplKTsKIAlmb3IgKHMgPSAwOyBzIDwgbWVtb3J5X3NpemU7IHMgKz0gUEFHRV9TSVpFKSB7CiAJCWYgPSBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfAogCQkJCV9QQUdFX1NIQVJFRCB8IF9QQUdFX0hXRVhFQzsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9vcHJvZmlsZS9NYWtlZmlsZSBiL2FyY2gvbWljcm9ibGF6ZS9vcHJvZmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDAzNDhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taWNyb2JsYXplL29wcm9maWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgYXJjaC9taWNyb2JsYXplL29wcm9maWxlL01ha2VmaWxlCisjCisKK29iai0kKENPTkZJR19PUFJPRklMRSkgKz0gb3Byb2ZpbGUubworCitEUklWRVJfT0JKUyA6PSAkKGFkZHByZWZpeCAuLi8uLi8uLi9kcml2ZXJzL29wcm9maWxlLywgXAorCQlvcHJvZi5vIGNwdV9idWZmZXIubyBidWZmZXJfc3luYy5vIFwKKwkJZXZlbnRfYnVmZmVyLm8gb3Byb2ZpbGVfZmlsZXMubyBcCisJCW9wcm9maWxlZnMubyBvcHJvZmlsZV9zdGF0cy5vIFwKKwkJdGltZXJfaW50Lm8gKQorCitvcHJvZmlsZS15IDo9ICQoRFJJVkVSX09CSlMpIG1pY3JvYmxhemVfb3Byb2ZpbGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL29wcm9maWxlL21pY3JvYmxhemVfb3Byb2ZpbGUuYyBiL2FyY2gvbWljcm9ibGF6ZS9vcHJvZmlsZS9taWNyb2JsYXplX29wcm9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmMTdlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9vcHJvZmlsZS9taWNyb2JsYXplX29wcm9maWxlLmMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIE1pY3JvYmxhemUgb3Byb2ZpbGUgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGV0YUxvZ2l4CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK2ludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCit7CisJcmV0dXJuIC0xOworfQorCit2b2lkIG9wcm9maWxlX2FyY2hfZXhpdCh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL0tjb25maWcucGxhdGZvcm0gYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vS2NvbmZpZy5wbGF0Zm9ybQppbmRleCA4ZTliNDc1Li42NjljN2VlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vS2NvbmZpZy5wbGF0Zm9ybQorKysgYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vS2NvbmZpZy5wbGF0Zm9ybQpAQCAtNTMsMzEgKzUzLDEyIEBACiAKIGNvbmZpZyBPUFRfTElCX0FTTQogCWJvb2wgIk9wdGltYWxpemVkIGxpYiBmdW5jdGlvbiBBU00iCi0JZGVwZW5kcyBvbiBPUFRfTElCX0ZVTkNUSU9OCisJZGVwZW5kcyBvbiBPUFRfTElCX0ZVTkNUSU9OICYmIChYSUxJTlhfTUlDUk9CTEFaRTBfVVNFX0JBUlJFTCA9IDEpCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgQWxsb3dzIHR1cm4gb24gb3B0aW1hbGl6ZWQgbGlicmFyeSBmdW5jdGlvbiAobWVtY3B5IGFuZCBtZW1tb3ZlKS4KIAkgIEZ1bmN0aW9uIGFyZSB3cml0dGVuIGluIGFzbSBjb2RlLgogCi0jIFRoaXMgaXMgc3RpbGwgYSBiaXQgYnJva2VuIC0gZGlzYWJsaW5nIGZvciBub3cgSlcgMjAwNzA1MDQKLWNvbmZpZyBBTExPV19FRElUX0FVVE8KLQlib29sICJQZXJtaXQgRGlzcGxheS9lZGl0IG9mIEtjb25maWcuYXV0byBwbGF0Zm9ybSBzZXR0aW5ncyIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBBbGxvd3MgdGhlIGVkaXRpbmcgb2YgYXV0by1nZW5lcmF0ZWQgcGxhdGZvcm0gc2V0dGluZ3MgZnJvbQotCSAgdGhlIEtjb25maWcuYXV0byBmaWxlLiBPYnZpb3VzbHkgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlCi0JICB1bmRlcmx5aW5nIGhhcmR3YXJlLCBzbyBiZSB2ZXJ5IGNhcmVmdWwgaWYgeW91IGdvIGVkaXRpbmcKLQkgIHRoZXNlIHNldHRpbmdzLgotCi0JICBBbHNvLCBpZiB5b3UgZW5hYmxlIHRoaXMsIGFuZCBlZGl0IHZhcmlvdXMgS2NvbmZpZy5hdXRvCi0JICBzZXR0aW5ncywgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVCBpZiB5b3UgdGhlbiBkaXNhYmxlIGl0Ci0JICBhZ2Fpbi4gWW91IGhhdmUgYmVlbiB3YXJuZWQhCi0KLQkgIElmIHVuc3VyZSwgc2F5IG5vLgotCi1jb21tZW50ICJBdXRvbWF0aWMgcGxhdGZvcm0gc2V0dGluZ3MgZnJvbSBLY29uZmlnLmF1dG8iCi0JZGVwZW5kcyBvbiBBTExPV19FRElUX0FVVE8KLQogaWYgUExBVEZPUk1fR0VORVJJQz15CiAJc291cmNlICJhcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9LY29uZmlnLmF1dG8iCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL2dlbmVyaWMvS2NvbmZpZy5hdXRvIGIvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL2dlbmVyaWMvS2NvbmZpZy5hdXRvCmluZGV4IGZiY2EyMmQuLjVkODZmYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9wbGF0Zm9ybS9nZW5lcmljL0tjb25maWcuYXV0bworKysgYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9LY29uZmlnLmF1dG8KQEAgLTIxLDcgKzIxLDYgQEAKIAogIyBEZWZpbml0aW9ucyBmb3IgTUlDUk9CTEFaRTAKIGNvbW1lbnQgIkRlZmluaXRpb25zIGZvciBNSUNST0JMQVpFMCIKLQlkZXBlbmRzIG9uIEFMTE9XX0VESVRfQVVUTwogCiBjb25maWcgS0VSTkVMX0JBU0VfQUREUgogCWhleCAiUGh5c2ljYWwgYWRkcmVzcyB3aGVyZSBMaW51eCBLZXJuZWwgaXMiCkBAIC0zMCwzMyArMjksMzMgQEAKIAkgIEJBU0UgQWRkcmVzcyBmb3Iga2VybmVsCiAKIGNvbmZpZyBYSUxJTlhfTUlDUk9CTEFaRTBfRkFNSUxZCi0Jc3RyaW5nICJUYXJnZXR0ZWQgRlBHQSBmYW1pbHkiIGlmIEFMTE9XX0VESVRfQVVUTworCXN0cmluZyAiVGFyZ2V0dGVkIEZQR0EgZmFtaWx5IgogCWRlZmF1bHQgInZpcnRleDUiCiAKIGNvbmZpZyBYSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgotCWludCAiVVNFX01TUl9JTlNUUiByYW5nZSAoMDoxKSIgaWYgQUxMT1dfRURJVF9BVVRPCi0JZGVmYXVsdCAxCisJaW50ICJVU0VfTVNSX0lOU1RSIHJhbmdlICgwOjEpIgorCWRlZmF1bHQgMAogCiBjb25maWcgWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9QQ01QX0lOU1RSCi0JaW50ICJVU0VfUENNUF9JTlNUUiByYW5nZSAoMDoxKSIgaWYgQUxMT1dfRURJVF9BVVRPCi0JZGVmYXVsdCAxCisJaW50ICJVU0VfUENNUF9JTlNUUiByYW5nZSAoMDoxKSIKKwlkZWZhdWx0IDAKIAogY29uZmlnIFhJTElOWF9NSUNST0JMQVpFMF9VU0VfQkFSUkVMCi0JaW50ICJVU0VfQkFSUkVMIHJhbmdlICgwOjEpIiBpZiBBTExPV19FRElUX0FVVE8KLQlkZWZhdWx0IDEKKwlpbnQgIlVTRV9CQVJSRUwgcmFuZ2UgKDA6MSkiCisJZGVmYXVsdCAwCiAKIGNvbmZpZyBYSUxJTlhfTUlDUk9CTEFaRTBfVVNFX0RJVgotCWludCAiVVNFX0RJViByYW5nZSAoMDoxKSIgaWYgQUxMT1dfRURJVF9BVVRPCi0JZGVmYXVsdCAxCisJaW50ICJVU0VfRElWIHJhbmdlICgwOjEpIgorCWRlZmF1bHQgMAogCiBjb25maWcgWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9IV19NVUwKLQlpbnQgIlVTRV9IV19NVUwgdmFsdWVzICgwPU5PTkUsIDE9TVVMMzIsIDI9TVVMNjQpIiBpZiBBTExPV19FRElUX0FVVE8KLQlkZWZhdWx0IDIKKwlpbnQgIlVTRV9IV19NVUwgdmFsdWVzICgwPU5PTkUsIDE9TVVMMzIsIDI9TVVMNjQpIgorCWRlZmF1bHQgMAogCiBjb25maWcgWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9GUFUKLQlpbnQgIlVTRV9GUFUgdmFsdWVzICgwPU5PTkUsIDE9QkFTSUMsIDI9RVhURU5ERUQpIiBpZiBBTExPV19FRElUX0FVVE8KLQlkZWZhdWx0IDIKKwlpbnQgIlVTRV9GUFUgdmFsdWVzICgwPU5PTkUsIDE9QkFTSUMsIDI9RVhURU5ERUQpIgorCWRlZmF1bHQgMAogCiBjb25maWcgWElMSU5YX01JQ1JPQkxBWkUwX0hXX1ZFUgotCXN0cmluZyAiQ29yZSB2ZXJzaW9uIG51bWJlciIgaWYgQUxMT1dfRURJVF9BVVRPCisJc3RyaW5nICJDb3JlIHZlcnNpb24gbnVtYmVyIgogCWRlZmF1bHQgNy4xMC5kCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9zeXN0ZW0uZHRzIGIvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL2dlbmVyaWMvc3lzdGVtLmR0cwppbmRleCAyOTk5M2Y2Li4yZDVjNDE3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9zeXN0ZW0uZHRzCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9wbGF0Zm9ybS9nZW5lcmljL3N5c3RlbS5kdHMKQEAgLTMyLDExICszMiwxNiBAQAogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwogCWNvbXBhdGlibGUgPSAieGxueCxtaWNyb2JsYXplIjsKKwloYXJkLXJlc2V0LWdwaW9zID0gPCZMRURzXzhCaXQgMiAxPjsKIAltb2RlbCA9ICJ0ZXN0aW5nIjsKIAlERFIyX1NEUkFNOiBtZW1vcnlAOTAwMDAwMDAgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwogCQlyZWcgPSA8IDB4OTAwMDAwMDAgMHgxMDAwMDAwMCA+OwogCX0gOworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmSGFyZF9FdGhlcm5ldF9NQUM7CisJCXNlcmlhbDAgPSAmUlMyMzJfVWFydF8xOworCX0gOwogCWNob3NlbiB7CiAJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5VUwwLDExNTIwMCBoaWdocmVzPW9uIjsKIAkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYkAwL3NlcmlhbEA4NDAwMDAwMCI7CkBAIC0xMjcsNyArMTMyLDcgQEAKIAltYl9wbGI6IHBsYkAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gInhsbngscGxiLXY0Ni0xLjAzLmEiLCAic2ltcGxlLWJ1cyI7CisJCWNvbXBhdGlibGUgPSAieGxueCxwbGItdjQ2LTEuMDMuYSIsICJ4bG54LHBsYi12NDYtMS4wMC5hIiwgInNpbXBsZS1idXMiOwogCQlyYW5nZXMgOwogCQlGTEFTSDogZmxhc2hAYTAwMDAwMDAgewogCQkJYmFuay13aWR0aCA9IDwyPjsKQEAgLTIxNCwxMiArMjE5LDEyIEBACiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAieGxueCxjb21wb3VuZCI7CiAJCQlldGhlcm5ldEA4MWMwMDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1sbC10ZW1hYy0xLjAxLmIiOworCQkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtbGwtdGVtYWMtMS4wMS5iIiwgInhsbngseHBzLWxsLXRlbWFjLTEuMDAuYSI7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmeHBzX2ludGNfMD47CiAJCQkJaW50ZXJydXB0cyA9IDwgNSAyID47CiAJCQkJbGxpbmstY29ubmVjdGVkID0gPCZQSU0zPjsKLQkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDIgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMGEgMzUgMDAgMDAgMDAgXTsKIAkJCQlyZWcgPSA8IDB4ODFjMDAwMDAgMHg0MCA+OwogCQkJCXhsbngsYnVzMmNvcmUtY2xrLXJhdGlvID0gPDB4MT47CiAJCQkJeGxueCxwaHktdHlwZSA9IDwweDE+OwpAQCAtMjYxLDYgKzI2NiwzMyBAQAogCQkJeGxueCxpcy1kdWFsID0gPDB4MD47CiAJCQl4bG54LHRyaS1kZWZhdWx0ID0gPDB4ZmZmZmZmZmY+OwogCQkJeGxueCx0cmktZGVmYXVsdC0yID0gPDB4ZmZmZmZmZmY+OworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX0gOworCisJCWdwaW8tbGVkcyB7CisJCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJCWhlYXJ0YmVhdCB7CisJCQkJbGFiZWwgPSAiSGVhcnRiZWF0IjsKKwkJCQlncGlvcyA9IDwmTEVEc184Qml0IDQgMT47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQl9OworCisJCQl5ZWxsb3cgeworCQkJCWxhYmVsID0gIlllbGxvdyI7CisJCQkJZ3Bpb3MgPSA8JkxFRHNfOEJpdCA1IDE+OworCQkJfTsKKworCQkJcmVkIHsKKwkJCQlsYWJlbCA9ICJSZWQiOworCQkJCWdwaW9zID0gPCZMRURzXzhCaXQgNiAxPjsKKwkJCX07CisKKwkJCWdyZWVuIHsKKwkJCQlsYWJlbCA9ICJHcmVlbiI7CisJCQkJZ3Bpb3MgPSA8JkxFRHNfOEJpdCA3IDE+OworCQkJfTsKIAkJfSA7CiAJCVJTMjMyX1VhcnRfMTogc2VyaWFsQDg0MDAwMDAwIHsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjUwMDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL3BsYXRmb3JtLmMgYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vcGxhdGZvcm0uYwppbmRleCA1NmUwMjM0Li41Yjg5YjU4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vcGxhdGZvcm0uYworKysgYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vcGxhdGZvcm0uYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhpbGlueF9vZl9idXNfaWRzW10gX19pbml0ZGF0YSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LApAQCAtMjYsNiArMjcsNyBAQAogc3RhdGljIGludCBfX2luaXQgbWljcm9ibGF6ZV9kZXZpY2VfcHJvYmUodm9pZCkKIHsKIAlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgeGlsaW54X29mX2J1c19pZHMsIE5VTEwpOworCW9mX3BsYXRmb3JtX3Jlc2V0X2dwaW9fcHJvYmUoKTsKIAlyZXR1cm4gMDsKIH0KIGRldmljZV9pbml0Y2FsbChtaWNyb2JsYXplX2RldmljZV9wcm9iZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGZkNzYyMGYuLjk1NDExNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC01LDkgKzUsMTIgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgotCSMgSG9ycmlibGUgc291cmNlIG9mIGNvbmZ1c2lvbi4gIERpZSwgZGllLCBkaWUgLi4uCi0Jc2VsZWN0IEVNQkVEREVECi0Jc2VsZWN0IFJUQ19MSUIgaWYgIUxFTU9URV9GVUxPT05HMkUKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAorCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCisJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwlzZWxlY3QgUlRDX0xJQiBpZiAhTUFDSF9MT09OR1NPTgogCiBtYWlubWVudSAiTGludXgvTUlQUyBLZXJuZWwgQ29uZmlndXJhdGlvbiIKIApAQCAtMjIsNiArMjUsNyBAQAogCiBjb25maWcgTUFDSF9BTENIRU1ZCiAJYm9vbCAiQWxjaGVteSBwcm9jZXNzb3IgYmFzZWQgbWFjaGluZXMiCisJc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVAogCiBjb25maWcgQVI3CiAJYm9vbCAiVGV4YXMgSW5zdHJ1bWVudHMgQVI3IgpAQCAtMzYsNiArNDAsNyBAQAogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTAKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEdDRAogCXNlbGVjdCBWTFlOUQpAQCAtNDMsMjMgKzQ4LDYgQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBBUjcgU3lzdGVtLW9uLWEtQ2hpcAogCSAgZmFtaWx5OiBUTkVURDcxMDAsIDcyMDAgYW5kIDczMDAuCiAKLWNvbmZpZyBCQVNMRVJfRVhDSVRFCi0JYm9vbCAiQmFzbGVyIGVYY2l0ZSBzbWFydCBjYW1lcmEiCi0Jc2VsZWN0IENFVlRfUjRLCi0Jc2VsZWN0IENTUkNfUjRLCi0Jc2VsZWN0IERNQV9DT0hFUkVOVAotCXNlbGVjdCBIV19IQVNfUENJCi0Jc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgSVJRX0NQVV9STTdLCi0Jc2VsZWN0IElSUV9DUFVfUk05SwotCXNlbGVjdCBNSVBTX1JNOTEyMgotCXNlbGVjdCBTWVNfSEFTX0NQVV9STTkwMDAKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgotCWhlbHAKLQkgIFRoZSBlWGNpdGUgaXMgYSBzbWFydCBjYW1lcmEgcGxhdGZvcm0gbWFudWZhY3R1cmVkIGJ5Ci0JICBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRy4KLQogY29uZmlnIEJDTTQ3WFgKIAlib29sICJCQ000N1hYIGJhc2VkIGJvYXJkcyIKIAlzZWxlY3QgQ0VWVF9SNEsKQEAgLTE5Miw2ICsxODAsNyBAQAogCiBjb25maWcgTUFDSF9MT09OR1NPTgogCWJvb2wgIkxvb25nc29uIGZhbWlseSBvZiBtYWNoaW5lcyIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBvZiBMb29uZ3NvbiBmYW1pbHkgb2YgbWFjaGluZXMuCiAKQEAgLTIzMyw2ICsyMjIsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTUlQU19DTVAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX01VTFRJVEhSRUFESU5HCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTUFSVE1JUFMKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNSVBTIFRlY2hub2xvZ2llcyBNYWx0YSBldmFsdWF0aW9uCiAJICBib2FyZC4KQEAgLTMzNCw2ICszMjQsMjQgQEAKIAkgIFlvc2VtaXRlIGlzIGFuIGV2YWx1YXRpb24gYm9hcmQgZm9yIHRoZSBSTTkwMDB4MiBwcm9jZXNzb3IKIAkgIG1hbnVmYWN0dXJlZCBieSBQTUMtU2llcnJhLgogCitjb25maWcgUE9XRVJUVgorCWJvb2wgIkNpc2NvIFBvd2VyVFYiCisJc2VsZWN0IEJPT1RfRUxGMzIKKwlzZWxlY3QgQ0VWVF9SNEsKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfRUkKKwlzZWxlY3QgQ1NSQ19QT1dFUlRWCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBIV19IQVNfUENJCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCisJc2VsZWN0IFVTQl9PSENJX0xJVFRMRV9FTkRJQU4KKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIENpc2NvIFBvd2VyVFYgUGxhdGZvcm0uCisKIGNvbmZpZyBTR0lfSVAyMgogCWJvb2wgIlNHSSBJUDIyIChJbmR5L0luZGlnbzIpIgogCXNlbGVjdCBBUkMKQEAgLTY3NCwxMSArNjgyLDExIEBACiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIgotc291cmNlICJhcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvYmNtNjN4eC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvamF6ei9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvbGFzYXQvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3BtYy1zaWVycmEvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9taXBzL3Bvd2VydHYvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9zaWJ5dGUvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3R4eDkvS2NvbmZpZyIKQEAgLTc3OCw2ICs3ODYsOSBAQAogY29uZmlnIENTUkNfSU9BU0lDCiAJYm9vbAogCitjb25maWcgQ1NSQ19QT1dFUlRWCisJYm9vbAorCiBjb25maWcgQ1NSQ19SNEtfTElCCiAJYm9vbAogCkBAIC04MDYsMjAgKzgxNyw2IEBACiBjb25maWcgRE1BX05FRURfUENJX01BUF9TVEFURQogCWJvb2wKIAotY29uZmlnIEVBUkxZX1BSSU5USwotCWJvb2wgIkVhcmx5IHByaW50ayIgaWYgRU1CRURERUQgJiYgREVCVUdfS0VSTkVMCi0JZGVwZW5kcyBvbiBTWVNfSEFTX0VBUkxZX1BSSU5USwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3BlY2lhbCBjb25zb2xlIGRyaXZlcnMgd2hpY2ggYWxsb3cgdGhlIGtlcm5lbAotCSAgdG8gcHJpbnQgbWVzc2FnZXMgdmVyeSBlYXJseSBpbiB0aGUgYm9vdHVwIHByb2Nlc3MuCi0KLQkgIFRoaXMgaXMgdXNlZnVsIGZvciBrZXJuZWwgZGVidWdnaW5nIHdoZW4geW91ciBtYWNoaW5lIGNyYXNoZXMgdmVyeQotCSAgZWFybHkgYmVmb3JlIHRoZSBjb25zb2xlIGNvZGUgaXMgaW5pdGlhbGl6ZWQuIEZvciBub3JtYWwgb3BlcmF0aW9uLAotCSAgaXQgaXMgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UgaXQgbG9va3MgdWdseSBvbiBzb21lIG1hY2hpbmVzIGFuZAotCSAgZG9lc24ndCBjb29wZXJhdGUgd2l0aCBhbiBYIHNlcnZlci4gWW91IHNob3VsZCBub3JtYWxseSBzYXkgTiBoZXJlLAotCSAgdW5sZXNzIHlvdSB3YW50IHRvIGRlYnVnIHN1Y2ggYSBjcmFzaC4KLQogY29uZmlnIFNZU19IQVNfRUFSTFlfUFJJTlRLCiAJYm9vbAogCkBAIC0xMDY5LDYgKzEwNjYsMjEgQEAKIAkgIFRoZSBMb29uZ3NvbiAyRSBwcm9jZXNzb3IgaW1wbGVtZW50cyB0aGUgTUlQUyBJSUkgaW5zdHJ1Y3Rpb24gc2V0CiAJICB3aXRoIG1hbnkgZXh0ZW5zaW9ucy4KIAorCSAgSXQgaGFzIGFuIGludGVybmFsIEZQR0Egbm9ydGhicmlkZ2UsIHdoaWNoIGlzIGNvbXBhdGlhYmxlIHRvCisJICBib25pdG82NC4KKworY29uZmlnIENQVV9MT09OR1NPTjJGCisJYm9vbCAiTG9vbmdzb24gMkYiCisJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9MT09OR1NPTjJGCisJc2VsZWN0IENQVV9MT09OR1NPTjIKKwloZWxwCisJICBUaGUgTG9vbmdzb24gMkYgcHJvY2Vzc29yIGltcGxlbWVudHMgdGhlIE1JUFMgSUlJIGluc3RydWN0aW9uIHNldAorCSAgd2l0aCBtYW55IGV4dGVuc2lvbnMuCisKKwkgIExvb25nc29uMkYgaGF2ZSBidWlsdC1pbiBERFIyIGFuZCBQQ0lYIGNvbnRyb2xsZXIuIFRoZSBQQ0lYIGNvbnRyb2xsZXIKKwkgIGhhdmUgYSBzaW1pbGFyIHByb2dyYW1taW5nIGludGVyZmFjZSB3aXRoIEZQR0Egbm9ydGhicmlkZ2UgdXNlZCBpbgorCSAgTG9vbmdzb24yRS4KKwogY29uZmlnIENQVV9NSVBTMzJfUjEKIAlib29sICJNSVBTMzIgUmVsZWFzZSAxIgogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTUlQUzMyX1IxCkBAIC0xMjk0LDYgKzEzMDYsMTYgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfWkJPT1QKKwlib29sCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQorCitjb25maWcgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MAorCWJvb2wKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UCisKIGNvbmZpZyBDUFVfTE9PTkdTT04yCiAJYm9vbAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCkBAIC0xMzAzLDYgKzEzMjUsMTIgQEAKIGNvbmZpZyBTWVNfSEFTX0NQVV9MT09OR1NPTjJFCiAJYm9vbAogCitjb25maWcgU1lTX0hBU19DUFVfTE9PTkdTT04yRgorCWJvb2wKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0NQVUZSRVEKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcgaWYgNjRCSVQKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX1VOQ0FDSEVEX0FDQ0VMRVJBVEVECisKIGNvbmZpZyBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlib29sCiAKQEAgLTE0MTEsOCArMTQzOSwxNyBAQAogCWJvb2wKIGNvbmZpZyBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJYm9vbAorY29uZmlnIENQVV9TVVBQT1JUU19DUFVGUkVRCisJYm9vbAorY29uZmlnIENQVV9TVVBQT1JUU19BRERSV0lOQ0ZHCisJYm9vbAogY29uZmlnIENQVV9TVVBQT1JUU19IVUdFUEFHRVMKIAlib29sCitjb25maWcgQ1BVX1NVUFBPUlRTX1VOQ0FDSEVEX0FDQ0VMRVJBVEVECisJYm9vbAorY29uZmlnIE1JUFNfUEdEX0MwX0NPTlRFWFQKKwlib29sCisJZGVmYXVsdCB5IGlmIDY0QklUICYmIENQVV9NSVBTUjIKIAogIwogIyBTZXQgdG8geSBmb3IgcHRyYWNlIGFjY2VzcyB0byB3YXRjaCByZWdpc3RlcnMuCkBAIC0yMDI0LDE1ICsyMDYxLDYgQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKLWNvbmZpZyBQUk9CRV9JTklUUkRfSEVBREVSCi0JYm9vbCAiUHJvYmUgaW5pdHJkIGhlYWRlciBjcmVhdGVkIGJ5IGFkZGluaXRyZCIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJECi0JaGVscAotCSAgUHJvYmUgaW5pdHJkIGhlYWRlciBhdCB0aGUgbGFzdCBwYWdlIG9mIGtlcm5lbCBpbWFnZS4KLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhcmNoL21pcHMvYm9vdC9hZGRpbml0cmQuYyB0bwotCSAgYWRkIGluaXRyZCBvciBpbml0cmFtZnMgaW1hZ2UgdG8gdGhlIGtlcm5lbCBpbWFnZS4KLQkgIE90aGVyd2lzZSwgc2F5IE4uCi0KIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKSIKQEAgLTIxMDQsNiArMjEzMiw3IEBACiAKIGNvbmZpZyBJODI1MwogCWJvb2wKKwlzZWxlY3QgTUlQU19FWFRFUk5BTF9USU1FUgogCiBjb25maWcgWk9ORV9ETUEzMgogCWJvb2wKQEAgLTIxODAsNiArMjIwOSw4IEBACiAKIGVuZG1lbnUKIAorc291cmNlICJhcmNoL21pcHMva2VybmVsL2NwdWZyZXEvS2NvbmZpZyIKKwogc291cmNlICJuZXQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCmluZGV4IDM2NGNhODkuLmQyYjg4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCkBAIC02LDE1ICs2LDY2IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKK2NvbmZpZyBFQVJMWV9QUklOVEsKKwlib29sICJFYXJseSBwcmludGsiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTWVNfSEFTX0VBUkxZX1BSSU5USworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3BlY2lhbCBjb25zb2xlIGRyaXZlcnMgd2hpY2ggYWxsb3cgdGhlIGtlcm5lbAorCSAgdG8gcHJpbnQgbWVzc2FnZXMgdmVyeSBlYXJseSBpbiB0aGUgYm9vdHVwIHByb2Nlc3MuCisKKwkgIFRoaXMgaXMgdXNlZnVsIGZvciBrZXJuZWwgZGVidWdnaW5nIHdoZW4geW91ciBtYWNoaW5lIGNyYXNoZXMgdmVyeQorCSAgZWFybHkgYmVmb3JlIHRoZSBjb25zb2xlIGNvZGUgaXMgaW5pdGlhbGl6ZWQuIEZvciBub3JtYWwgb3BlcmF0aW9uLAorCSAgaXQgaXMgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UgaXQgbG9va3MgdWdseSBvbiBzb21lIG1hY2hpbmVzIGFuZAorCSAgZG9lc24ndCBjb29wZXJhdGUgd2l0aCBhbiBYIHNlcnZlci4gWW91IHNob3VsZCBub3JtYWxseSBzYXkgTiBoZXJlLAorCSAgdW5sZXNzIHlvdSB3YW50IHRvIGRlYnVnIHN1Y2ggYSBjcmFzaC4KKworY29uZmlnIENNRExJTkVfQk9PTAorCWJvb2wgIkJ1aWx0LWluIGtlcm5lbCBjb21tYW5kIGxpbmUiCisJZGVmYXVsdCBuCisJaGVscAorCSAgRm9yIG1vc3Qgc3lzdGVtcywgaXQgaXMgZmlybXdhcmUgb3Igc2Vjb25kIHN0YWdlIGJvb3Rsb2FkZXIgdGhhdAorCSAgYnkgZGVmYXVsdCBzcGVjaWZpZXMgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIEhvd2V2ZXIsCisJICBpdCBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYWR2YW50YWdlb3VzIHRvIGVpdGhlciBvdmVycmlkZSB0aGUKKwkgIGRlZmF1bHQga2VybmVsIGNvbW1hbmQgbGluZSBvciBhZGQgYSBmZXcgZXh0cmEgb3B0aW9ucyB0byBpdC4KKwkgIEZvciBzdWNoIGNhc2VzLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGhhcmRjb2RlIHlvdXIgb3duCisJICBjb21tYW5kIGxpbmUgb3B0aW9ucyBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwuICBGb3IgdGhhdCwgeW91CisJICBzaG91bGQgY2hvb3NlICdZJyBoZXJlLCBhbmQgZmlsbCBpbiB0aGUgZXh0cmEgYm9vdCBhcmd1bWVudHMKKwkgIGluIENPTkZJR19DTURMSU5FLgorCisJICBUaGUgYnVpbHQtaW4gb3B0aW9ucyB3aWxsIGJlIGNvbmNhdGVuYXRlZCB0byB0aGUgZGVmYXVsdCBjb21tYW5kCisJICBsaW5lIGlmIENNRExJTkVfT1ZFUlJJREUgaXMgc2V0IHRvICdOJy4gT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdAorCSAgY29tbWFuZCBsaW5lIHdpbGwgYmUgaWdub3JlZCBhbmQgcmVwbGFjZWQgYnkgdGhlIGJ1aWx0LWluIHN0cmluZy4KKworCSAgTW9zdCBNSVBTIHN5c3RlbXMgd2lsbCBub3JtYWxseSBleHBlY3QgJ04nIGhlcmUgYW5kIHJlbHkgdXBvbgorCSAgdGhlIGNvbW1hbmQgbGluZSBmcm9tIHRoZSBmaXJtd2FyZSBvciB0aGUgc2Vjb25kLXN0YWdlIGJvb3Rsb2FkZXIuCisKIGNvbmZpZyBDTURMSU5FCiAJc3RyaW5nICJEZWZhdWx0IGtlcm5lbCBjb21tYW5kIHN0cmluZyIKKwlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAogCWRlZmF1bHQgIiIKIAloZWxwCiAJICBPbiBzb21lIHBsYXRmb3JtcywgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSBmb3IgdGhlIGJvb3QgbG9hZGVyIHRvCi0JICBwYXNzIGFyZ3VtZW50cyB0byB0aGUga2VybmVsLiBGb3IgdGhlc2UgcGxhdGZvcm1zLCB5b3UgY2FuIHN1cHBseQotCSAgc29tZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhdCBidWlsZCB0aW1lIGJ5IGVudGVyaW5nIHRoZW0gaGVyZS4gIEluCi0JICBvdGhlciBjYXNlcyB5b3UgY2FuIHNwZWNpZnkga2VybmVsIGFyZ3Mgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZQotCSAgdG8gc2V0IHRoZW0gdXAgaW4gYm9hcmQgcHJvbSBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KKwkgIHBhc3MgYXJndW1lbnRzIHRvIHRoZSBrZXJuZWwuICBGb3IgdGhlc2UgcGxhdGZvcm1zLCBhbmQgZm9yIHRoZSBjYXNlcworCSAgd2hlbiB5b3Ugd2FudCB0byBhZGQgc29tZSBleHRyYSBvcHRpb25zIHRvIHRoZSBjb21tYW5kIGxpbmUgb3IgaWdub3JlCisJICB0aGUgZGVmYXVsdCBjb21tYW5kIGxpbmUsIHlvdSBjYW4gc3VwcGx5IHNvbWUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXQKKwkgIGJ1aWxkIHRpbWUgYnkgZW50ZXJpbmcgdGhlbSBoZXJlLiAgSW4gb3RoZXIgY2FzZXMgeW91IGNhbiBzcGVjaWZ5CisJICBrZXJuZWwgYXJncyBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHNldCB0aGVtIHVwIGluIGJvYXJkIHByb20KKwkgIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBDTURMSU5FX0JPT0wgYW5kIENNRExJTkVfT1ZFUlJJREUKKwkgIG9wdGlvbnMuCisKK2NvbmZpZyBDTURMSU5FX09WRVJSSURFCisJYm9vbCAiQnVpbHQtaW4gY29tbWFuZCBsaW5lIG92ZXJyaWRlcyBmaXJ3YXJlIGFyZ3VtZW50cyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAorCWhlbHAKKwkgIEJ5IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gJ1knIHlvdSB3aWxsIGhhdmUgeW91ciBrZXJuZWwgaWdub3JlCisJICBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZyb20gZmlybXdhcmUgb3Igc2Vjb25kIHN0YWdlIGJvb3Rsb2FkZXIuCisJICBJbnN0ZWFkLCB0aGUgYnVpbHQtaW4gY29tbWFuZCBsaW5lIHdpbGwgYmUgdXNlZCBleGNsdXNpdmVseS4KKworCSAgTm9ybWFsbHksIHlvdSB3aWxsIGNob29zZSAnTicgaGVyZS4KIAogY29uZmlnIERFQlVHX1NUQUNLX1VTQUdFCiAJYm9vbCAiRW5hYmxlIHN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCA3N2Y1MDIxLi4xODkzZWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC00OCw3ICs0OCwxNiBAQAogICBlbmRpZgogZW5kaWYKIAoraWZuZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIGNmbGFncy15IDo9IC1mZnVuY3Rpb24tc2VjdGlvbnMKK2VuZGlmCitpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisgIGlmbmRlZiBLQlVJTERfTUNPVU5UX1JBX0FERFJFU1MKKyAgICBpZmVxICgkKGNhbGwgY2Mtb3B0aW9uLXluLC1tbWNvdW50LXJhLWFkZHJlc3MpLCB5KQorICAgICAgY2ZsYWdzLXkgKz0gLW1tY291bnQtcmEtYWRkcmVzcyAtREtCVUlMRF9NQ09VTlRfUkFfQUREUkVTUworICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgogY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwgLW1uby1jaGVjay16ZXJvLWRpdmlzaW9uKQogCiBpZmRlZiBDT05GSUdfMzJCSVQKQEAgLTY5LDYgKzc4LDcgQEAKIAogYWxsLSQoQ09ORklHX0JPT1RfRUxGMzIpCTo9ICQodm1saW51eC0zMikKIGFsbC0kKENPTkZJR19CT09UX0VMRjY0KQk6PSAkKHZtbGludXgtNjQpCithbGwtJChDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UKSs9IHZtbGludXoKIAogIwogIyBHQ0MgdXNlcyAtRyAwIC1tYWJpY2FsbHMgLWZwaWMgYXMgZGVmYXVsdC4gIFdlIGRvbid0IHdhbnQgUElDIGluIHRoZSBrZXJuZWwKQEAgLTEyNCw2ICsxMzQsOCBAQAogY2ZsYWdzLSQoQ09ORklHX0NQVV9MT09OR1NPTjIpCSs9IC1XYSwtLXRyYXAKIGNmbGFncy0kKENPTkZJR19DUFVfTE9PTkdTT04yRSkgKz0gXAogCSQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWxvb25nc29uMmUsLW1hcmNoPXI0NjAwKQorY2ZsYWdzLSQoQ09ORklHX0NQVV9MT09OR1NPTjJGKSArPSBcCisJJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bG9vbmdzb24yZiwtbWFyY2g9cjQ2MDApCiAKIGNmbGFncy0kKENPTkZJR19DUFVfTUlQUzMyX1IxKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzMzIsLW1pcHMzMiAtVV9NSVBTX0lTQSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzMyKSBcCiAJCQktV2EsLW1pcHMzMiAtV2EsLS10cmFwCkBAIC0zMjQsNiArMzM2LDcgQEAKIGNmbGFncy0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24gXAogICAgICAgICAgICAgICAgICAgICAtbW5vLWJyYW5jaC1saWtlbHkKIGxvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0weGZmZmZmZmZmODAxMDAwMDAKK2xvYWQtJChDT05GSUdfTEVNT1RFX01BQ0gyRikgKz0weGZmZmZmZmZmODAyMDAwMDAKIAogIwogIyBNSVBTIE1hbHRhIGJvYXJkCkBAIC0zMzEsNyArMzQ0LDcgQEAKIGNvcmUtJChDT05GSUdfTUlQU19NQUxUQSkJKz0gYXJjaC9taXBzL210aS1tYWx0YS8KIGNmbGFncy0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbWFsdGEKIGxvYWQtJChDT05GSUdfTUlQU19NQUxUQSkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi1hbGwtJChDT05GSUdfTUlQU19NQUxUQSkJOj0gdm1saW51eC5iaW4KK2FsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSB2bWxpbnV6LmJpbgogCiAjCiAjIE1JUFMgU0lNCkBAIC0zNTYsMTMgKzM2OSw2IEBACiBsb2FkLSQoQ09ORklHX1BNQ19ZT1NFTUlURSkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCiAKICMKLSMgQmFzbGVyIGVYY2l0ZQotIwotY29yZS0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSBhcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS8KLWNmbGFncy0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlCi1sb2FkLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCSs9IDB4ODAxMDAwMDAKLQotIwogIyBMQVNBVCBwbGF0Zm9ybXMKICMKIGNvcmUtJChDT05GSUdfTEFTQVQpCQkrPSBhcmNoL21pcHMvbGFzYXQvCkBAIC00NDEsNiArNDQ3LDEzIEBACiBsb2FkLSQoQ09ORklHX05FQ19NQVJLRUlOUykJKz0gMHhmZmZmZmZmZjg4MTAwMDAwCiAKICMKKyMgQ2lzY28gUG93ZXJUViBQbGF0Zm9ybQorIworY29yZS0kKENPTkZJR19QT1dFUlRWKQkJKz0gYXJjaC9taXBzL3Bvd2VydHYvCitjZmxhZ3MtJChDT05GSUdfUE9XRVJUVikgICAgICAgICs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2Citsb2FkLSQoQ09ORklHX1BPV0VSVFYpCQkrPSAweGZmZmZmZmZmOTA4MDAwMDAKKworIwogIyBTR0kgSVAyMiAoSW5keS9JbmRpZ28yKQogIwogIyBTZXQgdGhlIGxvYWQgYWRkcmVzcyB0byA+PSAweGZmZmZmZmZmODgwNjkwMDAgaWYgeW91IHdhbnQgdG8gbGVhdmUgc3BhY2UgZm9yCkBAIC01ODEsNyArNTk0LDcgQEAKIGVsc2UKIGxvYWQtJChDT05GSUdfU05JX1JNKQkJKz0gMHhmZmZmZmZmZjgwMDMwMDAwCiBlbmRpZgotYWxsLSQoQ09ORklHX1NOSV9STSkJCTo9IHZtbGludXguZWNvZmYKK2FsbC0kKENPTkZJR19TTklfUk0pCQk6PSB2bWxpbnV6LmVjb2ZmCiAKICMKICMgQ29tbW9uIFRYeDkKQEAgLTY5OSw5ICs3MTIsMjMgQEAKIAkkKE9CSkNPUFkpIC1PICQoNjRiaXQtYmZkKSAkKE9CSkNPUFlGTEFHUykgJDwgJEAKIAogbWFrZWJvb3QgPSQoUSkkKE1BS0UpICQoYnVpbGQpPWFyY2gvbWlwcy9ib290IFZNTElOVVg9JCh2bWxpbnV4LTMyKSAkKDEpCittYWtlemJvb3QgPSQoUSkkKE1BS0UpICQoYnVpbGQpPWFyY2gvbWlwcy9ib290L2NvbXByZXNzZWQgXAorCSAgIFZNTElOVVhfTE9BRF9BRERSRVNTPSQobG9hZC15KSAzMmJpdC1iZmQ9JCgzMmJpdC1iZmQpICQoMSkKIAogYWxsOgkkKGFsbC15KQogCit2bWxpbnV6OiB2bWxpbnV4IEZPUkNFCisJK0AkKGNhbGwgbWFrZXpib290LCRAKQorCit2bWxpbnV6LmJpbjogdm1saW51eAorCStAJChjYWxsIG1ha2V6Ym9vdCwkQCkKKwordm1saW51ei5lY29mZjogdm1saW51eAorCStAJChjYWxsIG1ha2V6Ym9vdCwkQCkKKwordm1saW51ei5zcmVjOiB2bWxpbnV4CisJK0AkKGNhbGwgbWFrZXpib290LCRAKQorCiB2bWxpbnV4LmJpbjogJCh2bWxpbnV4LTMyKQogCStAJChjYWxsIG1ha2Vib290LCRAKQogCkBAIC03MjYsMTEgKzc1MywxMyBAQAogCiBpbnN0YWxsOgogCSQoUSlpbnN0YWxsIC1EIC1tIDc1NSB2bWxpbnV4ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV4LSQoS0VSTkVMUkVMRUFTRSkKKwkkKFEpaW5zdGFsbCAtRCAtbSA3NTUgdm1saW51eiAkKElOU1RBTExfUEFUSCkvdm1saW51ei0kKEtFUk5FTFJFTEVBU0UpCiAJJChRKWluc3RhbGwgLUQgLW0gNjQ0IC5jb25maWcgJChJTlNUQUxMX1BBVEgpL2NvbmZpZy0kKEtFUk5FTFJFTEVBU0UpCiAJJChRKWluc3RhbGwgLUQgLW0gNjQ0IFN5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAtJChLRVJORUxSRUxFQVNFKQogCiBhcmNoY2xlYW46CiAJQCQoTUFLRSkgJChjbGVhbik9YXJjaC9taXBzL2Jvb3QKKwlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkCiAJQCQoTUFLRSkgJChjbGVhbik9YXJjaC9taXBzL2xhc2F0CiAKIGRlZmluZSBhcmNoaGVscApAQCAtNzM4LDEwICs3NjcsMTggQEAKIAllY2hvICcgIHZtbGludXguZWNvZmYgICAgICAgIC0gRUNPRkYgYm9vdCBpbWFnZScKIAllY2hvICcgIHZtbGludXguYmluICAgICAgICAgIC0gUmF3IGJpbmFyeSBib290IGltYWdlJwogCWVjaG8gJyAgdm1saW51eC5zcmVjICAgICAgICAgLSBTUkVDIGJvb3QgaW1hZ2UnCisJZWNobyAnICB2bWxpbnV6ICAgICAgICAgICAgICAtIENvbXByZXNzZWQgYm9vdCh6Ym9vdCkgaW1hZ2UnCisJZWNobyAnICB2bWxpbnV6LmVjb2ZmICAgICAgICAtIEVDT0ZGIHpib290IGltYWdlJworCWVjaG8gJyAgdm1saW51ei5iaW4gICAgICAgICAgLSBSYXcgYmluYXJ5IHpib290IGltYWdlJworCWVjaG8gJyAgdm1saW51ei5zcmVjICAgICAgICAgLSBTUkVDIHpib290IGltYWdlJwogCWVjaG8KIAllY2hvICcgIFRoZXNlIHdpbGwgYmUgZGVmYXVsdCBhcyBhcHJvcHJpYXRlIGZvciBhIGNvbmZpZ3VyZWQgcGxhdGZvcm0uJwogZW5kZWYKIAogQ0xFQU5fRklMRVMgKz0gdm1saW51eC4zMiBcCiAJICAgICAgIHZtbGludXguNjQgXAotCSAgICAgICB2bWxpbnV4LmVjb2ZmCisJICAgICAgIHZtbGludXguZWNvZmYgXAorCSAgICAgICB2bWxpbnV6IFwKKwkgICAgICAgdm1saW51ei5lY29mZiBcCisJICAgICAgIHZtbGludXouYmluIFwKKwkgICAgICAgdm1saW51ei5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKaW5kZXggODM1ZjNmMC4uODUxNjljMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJaW50IHJlczsKIAl1MzIgKmJvb3RjciwgdmFsOwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAotCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydFsyXTsKKwlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0X3BvcnRbMl0gX19pbml0ZGF0YTsKIAogCW1lbXNldCh1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSAqIDIpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9LY29uZmlnIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE1MDYwNy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1jb25maWcgQkFTTEVSX0VYQ0lURV9QUk9UT1RZUEUKLQlib29sICJTdXBwb3J0IGZvciBwcmUtcmVsZWFzZSB1bml0cyIKLQlkZXBlbmRzIG9uIEJBU0xFUl9FWENJVEUKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBQcmUtc2VyaWVzIChwcm90b3R5cGUpIHVuaXRzIGFyZSBkaWZmZXJlbnQgZnJvbSBsYXRlciBvbmVzIGluCi0JICBzb21lIHdheXMuIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UuIFBsZWFzZQotCSAgbm90ZSB0aGF0IGEga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gc2VsZWN0ZWQgd2lsbCBub3QgYmUKLQkgIGFibGUgdG8gcnVuIG9uIG5vcm1hbCB1bml0cy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL01ha2VmaWxlIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZjI5Y2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIEJhc2xlciBlWGNpdGUKLSMKLQotb2JqLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCSs9IGV4Y2l0ZV9pcnEubyBleGNpdGVfcHJvbS5vIGV4Y2l0ZV9zZXR1cC5vIFwKLQkJCQkgICBleGNpdGVfZGV2aWNlLm8gZXhjaXRlX3Byb2Nmcy5vCi0KLW9iai1tCQkJCSs9IGV4Y2l0ZV9pb2Rldi5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMGJjMmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCi0gKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgotCi0jaW5jbHVkZSA8ZXhjaXRlLmg+Ci0jaW5jbHVkZSA8cm05a19ldGguaD4KLSNpbmNsdWRlIDxybTlrX3dkdC5oPgotI2luY2x1ZGUgPHJtOWtfeGljYXAuaD4KLSNpbmNsdWRlIDxleGNpdGVfbmFuZGZsYXNoLmg+Ci0KLSNpbmNsdWRlICJleGNpdGVfaW9kZXYuaCIKLQotI2RlZmluZSBSTTlLX0dFX1VOSVQJMAotI2RlZmluZSBYSUNBUF9VTklUCTAKLSNkZWZpbmUgTkFORF9VTklUCTAKLQotI2RlZmluZSBETExfVElNRU9VVAkzCQkvKiBzZWNvbmRzICovCi0KLQotI2RlZmluZSBSSU5JVChfX3N0YXJ0X18sIF9fZW5kX18sIF9fbmFtZV9fLCBfX3BhcmVudF9fKSB7CVwKLQkubmFtZQk9IF9fbmFtZV9fICJfMCIsCQkJCVwKLQkuc3RhcnQJPSAoX19zdGFydF9fKSwJCQkJCVwKLQkuZW5kCT0gKF9fZW5kX18pLAkJCQkJXAotCS5mbGFncwk9IDAsCQkJCQkJXAotCS5wYXJlbnQJPSAoX19wYXJlbnRfXykJCQkJCVwKLX0KLQotI2RlZmluZSBSSU5JVF9JUlEoX19pcnFfXywgX19uYW1lX18pIHsJXAotCS5uYW1lCT0gX19uYW1lX18gIl8wIiwJXAotCS5zdGFydAk9IChfX2lycV9fKSwJCVwKLQkuZW5kCT0gKF9faXJxX18pLAkJXAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAlcCi0JLnBhcmVudAk9IE5VTEwJCQlcCi19Ci0KLQotCi1lbnVtIHsKLQlzbGljZV94aWNhcCwKLQlzbGljZV9ldGgKLX07Ci0KLQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlCi0JZXhjaXRlX2N0cl9yZXNvdXJjZSBfX21heWJlX3VudXNlZCA9IHsKLQkJLm5hbWUJCT0gIkdQSSBjb3VudGVycyIsCi0JCS5zdGFydAkJPSAwLAotCQkuZW5kCQk9IDUsCi0JCS5mbGFncwkJPSAwLAotCQkucGFyZW50CQk9IE5VTEwsCi0JCS5zaWJsaW5nCT0gTlVMTCwKLQkJLmNoaWxkCQk9IE5VTEwKLQl9LAotCWV4Y2l0ZV9ncGlzbGljZV9yZXNvdXJjZSBfX21heWJlX3VudXNlZCA9IHsKLQkJLm5hbWUJCT0gIkdQSSBzbGljZXMiLAotCQkuc3RhcnQJCT0gMCwKLQkJLmVuZAkJPSAxLAotCQkuZmxhZ3MJCT0gMCwKLQkJLnBhcmVudAkJPSBOVUxMLAotCQkuc2libGluZwk9IE5VTEwsCi0JCS5jaGlsZAkJPSBOVUxMCi0JfSwKLQlleGNpdGVfbWRpb19jaGFubmVsX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiTURJTyBjaGFubmVscyIsCi0JCS5zdGFydAkJPSAwLAotCQkuZW5kCQk9IDEsCi0JCS5mbGFncwkJPSAwLAotCQkucGFyZW50CQk9IE5VTEwsCi0JCS5zaWJsaW5nCT0gTlVMTCwKLQkJLmNoaWxkCQk9IE5VTEwKLQl9LAotCWV4Y2l0ZV9maWZvbWVtX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiRklGTyBtZW1vcnkiLAotCQkuc3RhcnQJCT0gMCwKLQkJLmVuZAkJPSA3NjcsCi0JCS5mbGFncwkJPSAwLAotCQkucGFyZW50CQk9IE5VTEwsCi0JCS5zaWJsaW5nCT0gTlVMTCwKLQkJLmNoaWxkCQk9IE5VTEwKLQl9LAotCWV4Y2l0ZV9zY3JhbV9yZXNvdXJjZSBfX21heWJlX3VudXNlZCA9IHsKLQkJLm5hbWUJCT0gIlNjcmF0Y2ggUkFNIiwKLQkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX1NDUkFNLAotCQkuZW5kCQk9IEVYQ0lURV9QSFlTX1NDUkFNICsgRVhDSVRFX1NJWkVfU0NSQU0gLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX0sCi0JZXhjaXRlX2ZwZ2FfcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7Ci0JCS5uYW1lCQk9ICJTeXN0ZW0gRlBHQSIsCi0JCS5zdGFydAkJPSBFWENJVEVfUEhZU19GUEdBLAotCQkuZW5kCQk9IEVYQ0lURV9QSFlTX0ZQR0EgKyBFWENJVEVfU0laRV9GUEdBIC0gMSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCQkucGFyZW50CQk9IE5VTEwsCi0JCS5zaWJsaW5nCT0gTlVMTCwKLQkJLmNoaWxkCQk9IE5VTEwKLQl9LAotCWV4Y2l0ZV9uYW5kX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiTkFORCBmbGFzaCBjb250cm9sIiwKLQkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX05BTkQsCi0JCS5lbmQJCT0gRVhDSVRFX1BIWVNfTkFORCArIEVYQ0lURV9TSVpFX05BTkQgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX0sCi0JZXhjaXRlX3RpdGFuX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiVElUQU4gcmVnaXN0ZXJzIiwKLQkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX1RJVEFOLAotCQkuZW5kCQk9IEVYQ0lURV9QSFlTX1RJVEFOICsgRVhDSVRFX1NJWkVfVElUQU4gLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX07Ci0KLQotCi1zdGF0aWMgdm9pZCBhZGp1c3RfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnA7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNCi0JCQkJICAgfCBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfRE1BOwotCi0JZm9yIChwID0gcmVzOyBwIDwgcmVzICsgbjsgcCsrKSB7Ci0JCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqIGNvbnN0IHBhcmVudCA9IHAtPnBhcmVudDsKLQkJaWYgKHBhcmVudCkgewotCQkJcC0+c3RhcnQgKz0gcGFyZW50LT5zdGFydDsKLQkJCXAtPmVuZCAgICs9IHBhcmVudC0+c3RhcnQ7Ci0JCQlwLT5mbGFncyA9ICBwYXJlbnQtPmZsYWdzICYgbWFzazsKLQkJfQotCX0KLX0KLQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19FWENJVEVfRkNBUF9HUEkpIHx8IGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHhpY2FwX3JzcmNbXSA9IHsKLQlSSU5JVCgweDQ4NDAsIDB4NDg2ZiwgWElDQVBfUkVTT1VSQ0VfRklGT19SWCwgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCi0JUklOSVQoMHg0OTQwLCAweDQ5NGIsIFhJQ0FQX1JFU09VUkNFX0ZJRk9fVFgsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4NTA0MCwgMHg1MTI3LCBYSUNBUF9SRVNPVVJDRV9YRE1BLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDEwMDAsIDB4MTEyZiwgWElDQVBfUkVTT1VSQ0VfUEtUUFJPQywgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCi0JUklOSVQoMHgxMTAwLCAweDExMGYsIFhJQ0FQX1JFU09VUkNFX1BLVF9TVFJFQU0sICZleGNpdGVfZnBnYV9yZXNvdXJjZSksCi0JUklOSVQoMHgwODAwLCAweDBiZmYsIFhJQ0FQX1JFU09VUkNFX0RNQURFU0MsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpLAotCVJJTklUKHNsaWNlX3hpY2FwLCBzbGljZV94aWNhcCwgWElDQVBfUkVTT1VSQ0VfR1BJX1NMSUNFLCAmZXhjaXRlX2dwaXNsaWNlX3Jlc291cmNlKSwKLQlSSU5JVCgweDAxMDAsIDB4MDJmZiwgWElDQVBfUkVTT1VSQ0VfRklGT19CTEssICZleGNpdGVfZmlmb21lbV9yZXNvdXJjZSksCi0JUklOSVRfSVJRKFRJVEFOX0lSUSwgIFhJQ0FQX1JFU09VUkNFX0lSUSkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHhpY2FwX3BkZXYgPSB7Ci0JLm5hbWUJCT0gWElDQVBfTkFNRSwKLQkuaWQJCT0gWElDQVBfVU5JVCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoeGljYXBfcnNyYyksCi0JLnJlc291cmNlCT0geGljYXBfcnNyYwotfTsKLQotLyoKLSAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIEdQSSBwb3J0IHRoYXQgcmVjZWl2ZXMgdGhlCi0gKiBpbWFnZSBkYXRhIGZyb20gdGhlIGVtYmVkZGVkIGNhbWVyYS4KLSAqLwotc3RhdGljIGludCBfX2luaXQgeGljYXBfZGV2aW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdGVuZDsKLQl1MzIgcmVnOwotCWludCByZXR2YWw7Ci0KLQlhZGp1c3RfcmVzb3VyY2VzKHhpY2FwX3JzcmMsIEFSUkFZX1NJWkUoeGljYXBfcnNyYykpOwotCi0JLyogUG93ZXIgdXAgdGhlIHNsaWNlIGFuZCBjb25maWd1cmUgaXQuICovCi0JcmVnID0gdGl0YW5fcmVhZGwoQ1BUQzFSKTsKLQlyZWcgJj0gfigweDExMTAwIDw8IHNsaWNlX3hpY2FwKTsKLQl0aXRhbl93cml0ZWwocmVnLCBDUFRDMVIpOwotCi0JLyogRW5hYmxlIHNsaWNlICYgRExMLiAqLwotCXJlZz0gdGl0YW5fcmVhZGwoQ1BSUik7Ci0JcmVnICY9IH4oMHgwMDAzMDAwMyA8PCAoc2xpY2VfeGljYXAgKiAyKSk7Ci0JdGl0YW5fd3JpdGVsKHJlZywgQ1BSUik7Ci0KLQkvKiBXYWl0IGZvciBETExzIHRvIGxvY2sgKi8KLQl0ZW5kID0gamlmZmllcyArIERMTF9USU1FT1VUICogSFo7Ci0Jd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRlbmQpKSB7Ci0JCWlmICghKH50aXRhbl9yZWFkbChDUERTUikgJiAoMHgxIDw8IChzbGljZV94aWNhcCAqIDQpKSkpCi0JCQlicmVhazsKLQkJeWllbGQoKTsKLQl9Ci0KLQlpZiAofnRpdGFuX3JlYWRsKENQRFNSKSAmICgweDEgPDwgKHNsaWNlX3hpY2FwICogNCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IERMTCBub3QgbG9ja2VkIGFmdGVyICV1IHNlY29uZHNcbiIsCi0JCSAgICAgICB4aWNhcF9wZGV2Lm5hbWUsIERMTF9USU1FT1VUKTsKLQkJcmV0dmFsID0gLUVUSU1FOwotCX0gZWxzZSB7Ci0JCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSAqLwotCQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnhpY2FwX3BkZXYpOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLWRldmljZV9pbml0Y2FsbCh4aWNhcF9kZXZpbml0KTsKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19FWENJVEVfRkNBUF9HUEkpIHx8IGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSV9NT0RVTEUpICovCi0KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfV0RUX1JNOUtfR1BJKSB8fCBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUElfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcnNyY1tdID0gewotCVJJTklUKDAsIDAsIFdEVF9SRVNPVVJDRV9DT1VOVEVSLCAmZXhjaXRlX2N0cl9yZXNvdXJjZSksCi0JUklOSVQoMHgwMDg0LCAweDAwOGYsIFdEVF9SRVNPVVJDRV9SRUdTLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVF9JUlEoVElUQU5fSVJRLCAgV0RUX1JFU09VUkNFX0lSUSkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHdkdF9wZGV2ID0gewotCS5uYW1lCQk9IFdEVF9OQU1FLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3JzcmMpLAotCS5yZXNvdXJjZQk9IHdkdF9yc3JjCi19OwotCi0vKgotICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgR1BJIHBvcnQgdGhhdCByZWNlaXZlcyB0aGUKLSAqIGltYWdlIGRhdGEgZnJvbSB0aGUgZW1iZWRkZWQgY2FtZXJhLgotICovCi1zdGF0aWMgaW50IF9faW5pdCB3ZHRfZGV2aW5pdCh2b2lkKQotewotCWFkanVzdF9yZXNvdXJjZXMod2R0X3JzcmMsIEFSUkFZX1NJWkUod2R0X3JzcmMpKTsKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3ZHRfcGRldik7Ci19Ci0KLWRldmljZV9pbml0Y2FsbCh3ZHRfZGV2aW5pdCk7Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfV0RUX1JNOUtfR1BJKSB8fCBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUElfTU9EVUxFKSAqLwotCi0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleGNpdGVfbmFuZGZsYXNoX3JzcmNbXSA9IHsKLSAJUklOSVQoMHgyMDAwLCAweDIwMWYsIEVYQ0lURV9OQU5ERkxBU0hfUkVTT1VSQ0VfUkVHUywgICZleGNpdGVfbmFuZF9yZXNvdXJjZSkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV4Y2l0ZV9uYW5kZmxhc2hfcGRldiA9IHsKLQkubmFtZQkJPSAiZXhjaXRlX25hbmQiLAotCS5pZAkJPSBOQU5EX1VOSVQsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV4Y2l0ZV9uYW5kZmxhc2hfcnNyYyksCi0JLnJlc291cmNlCT0gZXhjaXRlX25hbmRmbGFzaF9yc3JjCi19OwotCi0vKgotICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgYWNjZXNzIHRvIHRoZSBuYW5kLWZsYXNoCi0gKiBwb3J0Ci0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kZmxhc2hfZGV2aW5pdCh2b2lkKQotewotCWFkanVzdF9yZXNvdXJjZXMoZXhjaXRlX25hbmRmbGFzaF9yc3JjLCBBUlJBWV9TSVpFKGV4Y2l0ZV9uYW5kZmxhc2hfcnNyYykpOwotCi0gICAgICAgIC8qIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlICovCi0KLSAgICAgICAgLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovCi0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXhjaXRlX25hbmRmbGFzaF9wZGV2KTsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGV4Y2l0ZV9uYW5kZmxhc2hfZGV2aW5pdCk7Ci0KLQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlvZGV2X3JzcmNbXSA9IHsKLQlSSU5JVF9JUlEoRlBHQTFfSVJRLCAgSU9ERVZfUkVTT1VSQ0VfSVJRKQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9fcGRldiA9IHsKLQkubmFtZQkJPSBJT0RFVl9OQU1FLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW9kZXZfcnNyYyksCi0JLnJlc291cmNlCT0gaW9kZXZfcnNyYwotfTsKLQotLyoKLSAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIGV4dGVybmFsIEkvTyBwb3J0cy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgaW9fZGV2aW5pdCh2b2lkKQotewotCWFkanVzdF9yZXNvdXJjZXMoaW9kZXZfcnNyYywgQVJSQVlfU0laRShpb2Rldl9yc3JjKSk7Ci0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9fcGRldik7Ci19Ci0KLWRldmljZV9pbml0Y2FsbChpb19kZXZpbml0KTsKLQotCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX1JNOUtfR0UpIHx8IGRlZmluZWQoQ09ORklHX1JNOUtfR0VfTU9EVUxFKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybTlrX2dlX3JzcmNbXSA9IHsKLQlSSU5JVCgweDIyMDAsIDB4MjdmZiwgUk05S19HRV9SRVNPVVJDRV9NQUMsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4MTgwMCwgMHgxZmZmLCBSTTlLX0dFX1JFU09VUkNFX01TVEFULCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDIwMDAsIDB4MjEyZiwgUk05S19HRV9SRVNPVVJDRV9QS1RQUk9DLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDUxNDAsIDB4NTIyNywgUk05S19HRV9SRVNPVVJDRV9YRE1BLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDQ4NzAsIDB4NDg5ZiwgUk05S19HRV9SRVNPVVJDRV9GSUZPX1JYLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDQ5NGMsIDB4NDk1NywgUk05S19HRV9SRVNPVVJDRV9GSUZPX1RYLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDAwMDAsIDB4MDA3ZiwgUk05S19HRV9SRVNPVVJDRV9GSUZPTUVNX1JYLCAmZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UpLAotCVJJTklUKDB4MDA4MCwgMHgwMGZmLCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fVFgsICZleGNpdGVfZmlmb21lbV9yZXNvdXJjZSksCi0JUklOSVQoMHgwMTgwLCAweDAxOWYsIFJNOUtfR0VfUkVTT1VSQ0VfUEhZLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDAwMDAsIDB4MDNmZiwgUk05S19HRV9SRVNPVVJDRV9ETUFERVNDX1JYLCAmZXhjaXRlX3NjcmFtX3Jlc291cmNlKSwKLQlSSU5JVCgweDA0MDAsIDB4MDdmZiwgUk05S19HRV9SRVNPVVJDRV9ETUFERVNDX1RYLCAmZXhjaXRlX3NjcmFtX3Jlc291cmNlKSwKLQlSSU5JVChzbGljZV9ldGgsIHNsaWNlX2V0aCwgUk05S19HRV9SRVNPVVJDRV9HUElfU0xJQ0UsICZleGNpdGVfZ3Bpc2xpY2VfcmVzb3VyY2UpLAotCVJJTklUKDAsIDAsIFJNOUtfR0VfUkVTT1VSQ0VfTURJT19DSEFOTkVMLCAmZXhjaXRlX21kaW9fY2hhbm5lbF9yZXNvdXJjZSksCi0JUklOSVRfSVJRKFRJVEFOX0lSUSwgIFJNOUtfR0VfUkVTT1VSQ0VfSVJRX01BSU4pLAotCVJJTklUX0lSUShQSFlfSVJRLCBSTTlLX0dFX1JFU09VUkNFX0lSUV9QSFkpCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBybTlrX2dlX3BkZXYgPSB7Ci0JLm5hbWUJCT0gUk05S19HRV9OQU1FLAotCS5pZAkJPSBSTTlLX0dFX1VOSVQsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJtOWtfZ2VfcnNyYyksCi0JLnJlc291cmNlCT0gcm05a19nZV9yc3JjCi19OwotCi0KLQotLyoKLSAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIEV0aGVybmV0IHBvcnQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHJtOWtfZ2VfZGV2aW5pdCh2b2lkKQotewotCXUzMiByZWc7Ci0KLQlhZGp1c3RfcmVzb3VyY2VzKHJtOWtfZ2VfcnNyYywgQVJSQVlfU0laRShybTlrX2dlX3JzcmMpKTsKLQotCS8qIFBvd2VyIHVwIHRoZSBzbGljZSBhbmQgY29uZmlndXJlIGl0LiAqLwotCXJlZyA9IHRpdGFuX3JlYWRsKENQVEMxUik7Ci0JcmVnICY9IH4oMHgxMTAwMCA8PCBzbGljZV9ldGgpOwotCXJlZyB8PSAweDEwMCA8PCBzbGljZV9ldGg7Ci0JdGl0YW5fd3JpdGVsKHJlZywgQ1BUQzFSKTsKLQotCS8qIFRha2UgdGhlIE1BQyBvdXQgb2YgcmVzZXQsIHJlc2V0IHRoZSBETExzLiAqLwotCXJlZyA9IHRpdGFuX3JlYWRsKENQUlIpOwotCXJlZyAmPSB+KDB4MDAwMzAwMDAgPDwgKHNsaWNlX2V0aCAqIDIpKTsKLQlyZWcgfD0gMHgzIDw8IChzbGljZV9ldGggKiAyKTsKLQl0aXRhbl93cml0ZWwocmVnLCBDUFJSKTsKLQotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJtOWtfZ2VfcGRldik7Ci19Ci0KLWRldmljZV9pbml0Y2FsbChybTlrX2dlX2RldmluaXQpOwotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1JNOUtfR0UpIHx8IGRlZmluZWQoQ09ORklHX1JNOUtfR0VfTU9EVUxFKSAqLwotCi0KLQotc3RhdGljIGludCBfX2luaXQgZXhjaXRlX3NldHVwX2RldnModm9pZCkKLXsKLQlpbnQgcmVzOwotCXUzMiByZWc7Ci0KLQkvKiBFbmFibGUgeGRtYSBhbmQgZmlmbyBpbnRlcnJ1cHRzICovCi0JcmVnID0gdGl0YW5fcmVhZGwoMHgwMDUwKTsKLQl0aXRhbl93cml0ZWwocmVnIHwgMHgxODAwMDAwMCwgMHgwMDUwKTsKLQotCXJlcyA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCXJlcyA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZXhjaXRlX3NjcmFtX3Jlc291cmNlKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCXJlcyA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZXhjaXRlX2ZwZ2FfcmVzb3VyY2UpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0JcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfbmFuZF9yZXNvdXJjZSk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQlleGNpdGVfZnBnYV9yZXNvdXJjZS5mbGFncyA9IGV4Y2l0ZV9mcGdhX3Jlc291cmNlLnBhcmVudC0+ZmxhZ3MgJgotCQkJCSAgICggSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNCi0JCQkJICAgfCBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfRE1BKTsKLQlleGNpdGVfbmFuZF9yZXNvdXJjZS5mbGFncyA9IGV4Y2l0ZV9uYW5kX3Jlc291cmNlLnBhcmVudC0+ZmxhZ3MgJgotCQkJCSAgICggSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNCi0JCQkJICAgfCBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfRE1BKTsKLQotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGV4Y2l0ZV9zZXR1cF9kZXZzKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4YjFkMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNSBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRwotICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLQotI2luY2x1ZGUgImV4Y2l0ZV9pb2Rldi5oIgotCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqaW9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwotc3RhdGljIGludCBpb2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7Ci1zdGF0aWMgc3NpemVfdCBpb2Rldl9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCBzLCBsb2ZmX3QgKik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGlvZGV2X3BvbGwoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwotc3RhdGljIGlycXJldHVybl90IGlvZGV2X2lycWhkbChpbnQsIHZvaWQgKik7Ci0KLQotCi1zdGF0aWMgY29uc3QgY2hhciBpb2Rldl9uYW1lW10gPSAiaW9kZXYiOwotc3RhdGljIHVuc2lnbmVkIGludCBpb2Rldl9pcnE7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOwotCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9Ci17Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGlvZGV2X29wZW4sCi0JLnJlbGVhc2UJPSBpb2Rldl9yZWxlYXNlLAotCS5yZWFkCQk9IGlvZGV2X3JlYWQsCi0JLnBvbGwJCT0gaW9kZXZfcG9sbAotfTsKLQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPQotewotCS5taW5vcgkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCi0JLm5hbWUJCT0gaW9kZXZfbmFtZSwKLQkuZm9wcwkJPSAmZm9wcwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW9kZXZfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCQk9IGlvZGV2X25hbWUsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSBpb2Rldl9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlvZGV2X3JlbW92ZSksCi19OwotCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqCi1pb2Rldl9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2LCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgIHVuc2lnbmVkIGludCB0eXBlKQotewotCWNoYXIgYnVmWzgwXTsKLQlpZiAoc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJXNfMCIsIG5hbWUpID49IHNpemVvZiBidWYpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkdiwgdHlwZSwgYnVmKTsKLX0KLQotCi0KLS8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcmkgPQotCQlpb2Rldl9nZXRfcmVzb3VyY2UoZGV2LCBJT0RFVl9SRVNPVVJDRV9JUlEsIElPUkVTT1VSQ0VfSVJRKTsKLQotCWlmICh1bmxpa2VseSghcmkpKQotCQlyZXR1cm4gLUVOWElPOwotCi0JaW9kZXZfaXJxID0gcmktPnN0YXJ0OwotCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtaXNjZGV2KTsKLX0KLQotCi0KLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIG1pc2NfZGVyZWdpc3RlcigmbWlzY2Rldik7Ci19Ci0KLXN0YXRpYyBpbnQgaW9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShpb2Rldl9pcnEsIGlvZGV2X2lycWhkbCwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgIGlvZGV2X25hbWUsICZtaXNjZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQotewotCWZyZWVfaXJxKGlvZGV2X2lycSwgJm1pc2NkZXYpOwotCXJldHVybiAwOwotfQotCi0KLQotCi1zdGF0aWMgc3NpemVfdAotaW9kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZiwgY2hhciBfX3VzZXIgKmQsIHNpemVfdCBzLCBsb2ZmX3QgKm8pCi17Ci0Jc3NpemVfdCByZXQ7Ci0JREVGSU5FX1dBSVQodyk7Ci0KLQlwcmVwYXJlX3RvX3dhaXQoJndxLCAmdywgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlzY2hlZHVsZSgpOwotCXJldCA9IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpID8gLUVSRVNUQVJUU1lTIDogMDsKLQlmaW5pc2hfd2FpdCgmd3EsICZ3KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwKQotewotCXBvbGxfd2FpdChmLCAmd3EsIHApOwotCXJldHVybiBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGlvZGV2X2lycWhkbChpbnQgaXJxLCB2b2lkICpjdHh0KQotewotCXdha2VfdXAoJndxKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW9kZXZfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOwotfQotCi0KLQotc3RhdGljIHZvaWQgX19leGl0IGlvZGV2X2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGlvZGV2X2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGlvZGV2X2NsZWFudXBfbW9kdWxlKTsKLQotCi0KLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJCYXNsZXIgZVhjaXRlIGkvbyBpbnRlcnJ1cHQgaGFuZGxlciIpOwotTU9EVUxFX1ZFUlNJT04oIjAuMCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmggYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmYmI1ZC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgX19FWENJVEVfSU9ERVZfSF9fCi0jZGVmaW5lIF9fRVhDSVRFX0lPREVWX0hfXwotCi0vKiBEZXZpY2UgbmFtZSAqLwotI2RlZmluZSBJT0RFVl9OQU1FCQkiaW9kZXYiCi0KLS8qIFJlc291cmNlIG5hbWVzICovCi0jZGVmaW5lIElPREVWX1JFU09VUkNFX0lSUQkiZXhjaXRlX2lvZGV2X2lycSIKLQotI2VuZGlmIC8qIF9fRVhDSVRFX0lPREVWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lycS5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzRlMGE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKLSAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJlYi5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4KLQotI2luY2x1ZGUgPGV4Y2l0ZS5oPgotCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGV4Y2l0ZV9oYW5kbGVfaW50KHZvaWQpOwotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLSAqLwotdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQotewotCW1pcHNfY3B1X2lycV9pbml0KCk7Ci0Jcm03a19jcHVfaXJxX2luaXQoKTsKLQlybTlrX2NwdV9pcnFfaW5pdCgpOwotfQotCi1hc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKLXsKLQljb25zdCB1MzIKLQkJaW50ZXJydXB0cyA9IHJlYWRfYzBfY2F1c2UoKSA+PiA4LAotCQltYXNrID0gKChyZWFkX2MwX3N0YXR1cygpID4+IDgpICYgMHgwMDAwMDBmZikgfAotCQkgICAgICAgKHJlYWRfYzBfaW50Y29udHJvbCgpICYgMHgwMDAwZmYwMCksCi0JCXBlbmRpbmcgPSBpbnRlcnJ1cHRzICYgbWFzazsKLQl1MzIgbXNnaW50ZmxhZ3MsIG1zZ2ludG1hc2ssIG1zZ2ludDsKLQotCS8qIHByb2Nlc3MgdGltZXIgaW50ZXJydXB0ICovCi0JaWYgKHBlbmRpbmcgJiAoMSA8PCBUSU1FUl9JUlEpKSB7Ci0JCWRvX0lSUShUSU1FUl9JUlEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUHJvY2VzcyBQQ0kgaW50ZXJydXB0cyAqLwotI2lmIFVTQl9JUlEgPCAxMAotCW1zZ2ludGZsYWdzID0gb2NkX3JlYWRsKElOVFAwU3RhdHVzMCArIChVU0JfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKFVTQl9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChVU0JfTVNHSU5UICUgMHgyMCkpOwotCWlmICgocGVuZGluZyAmICgxIDw8IFVTQl9JUlEpKSAmJiBtc2dpbnQpIHsKLSNlbHNlCi0JaWYgKHBlbmRpbmcgJiAoMSA8PCBVU0JfSVJRKSkgewotI2VuZGlmCi0JCWRvX0lSUShVU0JfSVJRKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFByb2Nlc3MgVElUQU4gaW50ZXJydXB0cyAqLwotCW1zZ2ludGZsYWdzID0gb2NkX3JlYWRsKElOVFAwU3RhdHVzMCArIChUSVRBTl9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludG1hc2sgID0gb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoVElUQU5fTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQltc2dpbnQJICAgID0gbXNnaW50ZmxhZ3MgJiBtc2dpbnRtYXNrICYgKDB4MSA8PCAoVElUQU5fTVNHSU5UICUgMHgyMCkpOwotCWlmICgocGVuZGluZyAmICgxIDw8IFRJVEFOX0lSUSkpICYmIG1zZ2ludCkgewotCQlvY2Rfd3JpdGVsKG1zZ2ludCwgSU5UUDBDbGVhcjAgKyAoVElUQU5fTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQkJZG9fSVJRKFRJVEFOX0lSUSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBQcm9jZXNzIEZQR0EgbGluZSAjMCBpbnRlcnJ1cHRzICovCi0JbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKEZQR0EwX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7Ci0JbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChGUEdBMF9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChGUEdBMF9NU0dJTlQgJSAweDIwKSk7Ci0JaWYgKChwZW5kaW5nICYgKDEgPDwgRlBHQTBfSVJRKSkgJiYgbXNnaW50KSB7Ci0JCWRvX0lSUShGUEdBMF9JUlEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUHJvY2VzcyBGUEdBIGxpbmUgIzEgaW50ZXJydXB0cyAqLwotCW1zZ2ludGZsYWdzID0gb2NkX3JlYWRsKElOVFAwU3RhdHVzMCArIChGUEdBMV9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludG1hc2sgID0gb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoRlBHQTFfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQltc2dpbnQJICAgID0gbXNnaW50ZmxhZ3MgJiBtc2dpbnRtYXNrICYgKDB4MSA8PCAoRlBHQTFfTVNHSU5UICUgMHgyMCkpOwotCWlmICgocGVuZGluZyAmICgxIDw8IEZQR0ExX0lSUSkpICYmIG1zZ2ludCkgewotCQlkb19JUlEoRlBHQTFfSVJRKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFByb2Nlc3MgUEhZIGludGVycnVwdHMgKi8KLQltc2dpbnRmbGFncyA9IG9jZF9yZWFkbChJTlRQMFN0YXR1czAgKyAoUEhZX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7Ci0JbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChQSFlfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQltc2dpbnQJICAgID0gbXNnaW50ZmxhZ3MgJiBtc2dpbnRtYXNrICYgKDB4MSA8PCAoUEhZX01TR0lOVCAlIDB4MjApKTsKLQlpZiAoKHBlbmRpbmcgJiAoMSA8PCBQSFlfSVJRKSkgJiYgbXNnaW50KSB7Ci0JCWRvX0lSUShQSFlfSVJRKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFByb2Nlc3Mgc3B1cmlvdXMgaW50ZXJydXB0cyAqLwotCXNwdXJpb3VzX2ludGVycnVwdCgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb2Nmcy5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb2Nmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODkyM2U2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9jZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCi0gKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqCi0gKiAgUHJvY2ZzIHN1cHBvcnQgZm9yIEJhc2xlciBlWGNpdGUKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4KLQotI2luY2x1ZGUgPGV4Y2l0ZS5oPgotCi1zdGF0aWMgaW50IGV4Y2l0ZV91bml0X2lkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc2VxX3ByaW50ZihtLCAiJTA2eCIsIHVuaXRfaWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGV4Y2l0ZV91bml0X2lkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZXhjaXRlX3VuaXRfaWRfcHJvY19zaG93LCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhjaXRlX3VuaXRfaWRfcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBleGNpdGVfdW5pdF9pZF9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQKLWV4Y2l0ZV9ib290cm9tX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQl2b2lkIF9faW9tZW0gKiBzcmM7Ci0KLQlpZiAob2ZmID49IEVYQ0lURV9TSVpFX0JPT1RST00pIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICgob2ZmICsgY291bnQpID4gRVhDSVRFX1NJWkVfQk9PVFJPTSkKLQkJY291bnQgPSBFWENJVEVfU0laRV9CT09UUk9NIC0gb2ZmOwotCi0Jc3JjID0gaW9yZW1hcChFWENJVEVfUEhZU19CT09UUk9NICsgb2ZmLCBjb3VudCk7Ci0JaWYgKHNyYykgewotCQltZW1jcHlfZnJvbWlvKHBhZ2UsIHNyYywgY291bnQpOwotCQlpb3VubWFwKHNyYyk7Ci0JCSpzdGFydCA9IHBhZ2U7Ci0JfSBlbHNlIHsKLQkJY291bnQgPSAtRU5PTUVNOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotdm9pZCBleGNpdGVfcHJvY2ZzX2luaXQodm9pZCkKLXsKLQkvKiBDcmVhdGUgJiBwb3B1bGF0ZSAvcHJvYy9leGNpdGUgKi8KLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBjb25zdCBwZGlyID0gcHJvY19ta2RpcigiZXhjaXRlIiwgTlVMTCk7Ci0JaWYgKHBkaXIpIHsKLQkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZTsKLQotCQllID0gcHJvY19jcmVhdGUoInVuaXRfaWQiLCBTX0lSVUdPLCBwZGlyLAotCQkJCSZleGNpdGVfdW5pdF9pZF9wcm9jX2ZvcHMpOwotCQlpZiAoZSkgZS0+c2l6ZSA9IDY7Ci0KLQkJZSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImJvb3Ryb20iLCBTX0lSVUdPLCBwZGlyLAotCQkJCQkgICBleGNpdGVfYm9vdHJvbV9yZWFkLCBOVUxMKTsKLQkJaWYgKGUpIGUtPnNpemUgPSBFWENJVEVfU0laRV9CT09UUk9NOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9tLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQ4YmM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgVGhvbWFzIEtvZWxsZXIgKHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20pCi0gKiAgQmFzZWQgb24gdGhlIFBNQy1TaWVycmEgWW9zZW1pdGUgYm9hcmQgc3VwcG9ydCBieSBSYWxmIEJhZWNobGUgYW5kCi0gKiAgTWFuaXNoIExhY2h3YW5pLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vc3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxleGNpdGUuaD4KLQotLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCBieSBSZWRib290IHRvIHBhc3MgYXJndW1lbnRzIHRvIHRoZSBrZXJuZWwgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0JY2hhciAqbmFtZTsKLQljaGFyICp2YWw7Ci19IHRfZW52X3ZhcjsKLQotc3RydWN0IHBhcm1ibG9jayB7Ci0JdF9lbnZfdmFyIG1lbXNpemU7Ci0JdF9lbnZfdmFyIG1vZGV0dHkwOwotCXRfZW52X3ZhciBldGhhZGRyOwotCXRfZW52X3ZhciBlbnZfZW5kOwotCWNoYXIgKmFyZ3ZbMl07Ci0JY2hhciB0ZXh0WzBdOwotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBwcm9tX2FyZ2M7Ci1zdGF0aWMgY29uc3QgY2hhciAqKiBwcm9tX2FyZ3Y7Ci1zdGF0aWMgY29uc3QgdF9lbnZfdmFyICogcHJvbV9lbnY7Ci0KLXN0YXRpYyB2b2lkIHByb21faGFsdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwotc3RhdGljIHZvaWQgcHJvbV9leGl0KHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci0KLQotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIkJhc2xlciBlWGNpdGUiOwotfQotCi0vKgotICogSGFsdCB0aGUgc3lzdGVtCi0gKi8KLXN0YXRpYyB2b2lkIHByb21faGFsdCh2b2lkKQotewotCXByaW50ayhLRVJOX05PVElDRSAiXG4qKiBTeXN0ZW0gaGFsdGVkLlxuIik7Ci0Jd2hpbGUgKDEpCi0JCWFzbSB2b2xhdGlsZSAoCi0JCQkiXHQuc2V0XHRtaXBzM1xuIgotCQkJIlx0d2FpdFxuIgotCQkJIlx0LnNldFx0bWlwczBcbiIKLQkJKTsKLX0KLQotLyoKLSAqIFJlc2V0IHRoZSBDUFUgYW5kIHJlLWVudGVyIFJlZGJvb3QKLSAqLwotc3RhdGljIHZvaWQgcHJvbV9leGl0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqIGNvbnN0IGZsZyA9Ci0JCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChFWENJVEVfQUREUl9GUEdBICsgRVhDSVRFX0ZQR0FfRFBSKTsKLQotCS8qIENsZWFyIHRoZSB3YXRjaGRvZyByZXNldCBmbGFnLCBzZXQgdGhlIHJlYm9vdCBmbGFnICovCi0JKmZsZyAmPSB+MHgwMTsKLQkqZmxnIHw9IDB4ODA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgIChFWENJVEVfQUREUl9GUEdBICsgRVhDSVRFX0ZQR0FfU1lTQ1RMKSA9IDB4MDI7Ci0JCWlvYigpOwotCQltZGVsYXkoMTAwMCk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJSZXNldCBmYWlsZWRcbiIpOwotCXByb21faGFsdCgpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBfX2luaXQgKnByb21fZ2V0ZW52KGNoYXIgKm5hbWUpCi17Ci0JY29uc3QgdF9lbnZfdmFyICogcDsKLQlmb3IgKHAgPSBwcm9tX2VudjsgcC0+bmFtZSAhPSBOVUxMOyBwKyspCi0JCWlmKHN0cmNtcChuYW1lLCBwLT5uYW1lKSA9PSAwKQotCQkJYnJlYWs7Ci0JcmV0dXJuIHAtPnZhbDsKLX0KLQotLyoKLSAqIEluaXQgcm91dGluZSB3aGljaCBhY2NlcHRzIHRoZSB2YXJpYWJsZXMgZnJvbSBSZWRib290Ci0gKi8KLXZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQotewotCWNvbnN0IHN0cnVjdCBwYXJtYmxvY2sgKiBjb25zdCBwYiA9IChzdHJ1Y3QgcGFybWJsb2NrICopIGZ3X2FyZzI7Ci0KLQlwcm9tX2FyZ2MgPSBmd19hcmcwOwotCXByb21fYXJndiA9IChjb25zdCBjaGFyICoqKSBmd19hcmcxOwotCXByb21fZW52ID0gJnBiLT5tZW1zaXplOwotCi0JLyogQ2FsbGJhY2tzIGZvciBoYWx0LCByZXN0YXJ0ICovCi0JX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkICgqKShjaGFyICopKSBwcm9tX2V4aXQ7Ci0JX21hY2hpbmVfaGFsdCA9IHByb21faGFsdDsKLQotI2lmZGVmIENPTkZJR18zMkJJVAotCS8qIGNvcHkgY29tbWFuZCBsaW5lICovCi0Jc3RyY3B5KGFyY3NfY21kbGluZSwgcHJvbV9hcmd2WzFdKTsKLQltZW1zaXplID0gc2ltcGxlX3N0cnRvbChwcm9tX2dldGVudigibWVtc2l6ZSIpLCBOVUxMLCAxNik7Ci0Jc3RyY3B5KG1vZGV0dHksIHByb21fZ2V0ZW52KCJtb2RldHR5MCIpKTsKLSNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KLQotI2lmZGVmIENPTkZJR182NEJJVAotIwllcnJvciA2NCBiaXQgc3VwcG9ydCBub3QgaW1wbGVtZW50ZWQKLSNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KLX0KLQotLyogVGhpcyBpcyBjYWxsZWQgZnJvbSBmcmVlX2luaXRtZW0oKSwgc28gd2UgbmVlZCB0byBwcm92aWRlIGl0ICovCi12b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfc2V0dXAuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjZiM2I4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCi0gKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqICBCYXNlZCBvbiB0aGUgUE1DLVNpZXJyYSBZb3NlbWl0ZSBib2FyZCBzdXBwb3J0IGJ5IFJhbGYgQmFlY2hsZSBhbmQKLSAqICBNYW5pc2ggTGFjaHdhbmkuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUtMzIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgotCi0jaW5jbHVkZSA8ZXhjaXRlLmg+Ci0KLSNkZWZpbmUgVElUQU5fVUFSVF9DTEsJMjUwMDAwMDAKLQotI2lmIDEKLS8qIG5vcm1hbCBzZXJpYWwgcG9ydCBhc3NpZ25tZW50ICovCi0jZGVmaW5lIFJFR0JBU0VfU0VSMAkweDAyMDgKLSNkZWZpbmUgUkVHQkFTRV9TRVIxCTB4MDIzOAotI2RlZmluZSBNQVNLX1NFUjAJMHgxCi0jZGVmaW5lIE1BU0tfU0VSMQkweDIKLSNlbHNlCi0vKiBzZXJpYWwgcG9ydHMgc3dhcHBlZCAqLwotI2RlZmluZSBSRUdCQVNFX1NFUjAJMHgwMjM4Ci0jZGVmaW5lIFJFR0JBU0VfU0VSMQkweDAyMDgKLSNkZWZpbmUgTUFTS19TRVIwCTB4MgotI2RlZmluZSBNQVNLX1NFUjEJMHgxCi0jZW5kaWYKLQotdW5zaWduZWQgbG9uZyBtZW1zaXplOwotY2hhciBtb2RldHR5WzMwXTsKLXVuc2lnbmVkIGludCB0aXRhbl9pcnEgPSBUSVRBTl9JUlE7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICogY3RsX3JlZ3M7Ci11MzIgdW5pdF9pZDsKLQotdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogY29uc3Qgb2NkX2Jhc2UgPSAodm9pZCAqKSAoRVhDSVRFX0FERFJfT0NEKTsKLXZvbGF0aWxlIHZvaWQgX19pb21lbSAqIGNvbnN0IHRpdGFuX2Jhc2UgPSAodm9pZCAqKSAoRVhDSVRFX0FERFJfVElUQU4pOwotCi0vKiBQcm90ZWN0IGFjY2VzcyB0byBzaGFyZWQgR1BJIHJlZ2lzdGVycyAqLwotREVGSU5FX1NQSU5MT0NLKHRpdGFuX2xvY2spOwotaW50IHRpdGFuX2lycWZsYWdzOwotCi0KLS8qCi0gKiBUaGUgZVhjaXRlIHBsYXRmb3JtIHVzZXMgdGhlIGFsdGVybmF0ZSB0aW1lciBpbnRlcnJ1cHQKLSAqCi0gKiBGaXhtZTogQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nIGNldnQtcjRrLmMgZG9lc24ndCB5ZXQga25vdyBhYm91dCBob3cKLSAqIHRvIGhhbmRsZSB0aGUgYWx0ZXJuYXRlIHRpbWVyIGludGVycnVwdCBvZiB0aGUgUk05MDAwLgotICovCi12b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQotewotCWNvbnN0IHUzMiBtb2RlYml0NSA9IG9jZF9yZWFkbCgweDAwZTQpOwotCXVuc2lnbmVkIGludCBtdWx0ID0gKChtb2RlYml0NSA+PiAxMSkgJiAweDFmKSArIDI7Ci0JdW5zaWduZWQgaW50IGRpdiA9ICgobW9kZWJpdDUgPj4gMTYpICYgMHgxZikgKyAyOwotCi0JaWYgKGRpdiA9PSAzMykKLQkJZGl2ID0gMTsKLQltaXBzX2hwdF9mcmVxdWVuY3kgPSBFWENJVEVfQ1BVX0VYVF9DTE9DSyAqIG11bHQgLyBkaXYgLyAyOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBleGNpdGVfaW5pdF9jb25zb2xlKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApCi0Jc3RhdGljIF9faW5pdGRhdGEgY2hhciBzZXJyW10gPQotCQlLRVJOX0VSUiAiU2VyaWFsIHBvcnQgIyV1IHNldHVwIGZhaWxlZFxuIjsKLQlzdHJ1Y3QgdWFydF9wb3J0IHVwOwotCi0JLyogVGFrZSB0aGUgRFVBUlQgb3V0IG9mIHJlc2V0ICovCi0JdGl0YW5fd3JpdGVsKDB4MDBmZjFjZmYsIENQUlIpOwotCi0jaWYgKENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUyA+IDEpCi0JLyogRW5hYmxlIGJvdGggcG9ydHMgKi8KLQl0aXRhbl93cml0ZWwoTUFTS19TRVIwIHwgTUFTS19TRVIxLCBVQUNGRyk7Ci0jZWxzZQotCS8qIEVuYWJsZSBwb3J0ICMwIG9ubHkgKi8KLQl0aXRhbl93cml0ZWwoTUFTS19TRVIwLCBVQUNGRyk7Ci0jZW5kaWYKLQotIAkvKgotCSAqIFNldCB1cCBzZXJpYWwgcG9ydCAjMC4gRG8gbm90IHVzZSBhdXRvZGV0ZWN0aW9uOyB0aGUgcmVzdWx0IGlzCi0JICogbm90IHdoYXQgd2Ugd2FudC4KLSAJICovCi0JbWVtc2V0KCZ1cCwgMCwgc2l6ZW9mKHVwKSk7Ci0JdXAubWVtYmFzZQk9IChjaGFyICopIHRpdGFuX2FkZHIoUkVHQkFTRV9TRVIwKTsKLQl1cC5pcnEJCT0gVElUQU5fSVJROwotCXVwLnVhcnRjbGsJPSBUSVRBTl9VQVJUX0NMSzsKLQl1cC5yZWdzaGlmdAk9IDA7Ci0JdXAuaW90eXBlCT0gVVBJT19STTkwMDA7Ci0JdXAudHlwZQkJPSBQT1JUX1JNOTAwMDsKLQl1cC5mbGFncwk9IFVQRl9TSEFSRV9JUlE7Ci0JdXAubGluZQkJPSAwOwotCWlmIChlYXJseV9zZXJpYWxfc2V0dXAoJnVwKSkKLQkJcHJpbnRrKHNlcnIsIHVwLmxpbmUpOwotCi0jaWYgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTID4gMQotCS8qIEFuZCBub3cgZm9yIHBvcnQgIzEuICovCi0JdXAubWVtYmFzZQk9IChjaGFyICopIHRpdGFuX2FkZHIoUkVHQkFTRV9TRVIxKTsKLQl1cC5saW5lCQk9IDE7Ci0gCWlmIChlYXJseV9zZXJpYWxfc2V0dXAoJnVwKSkKLQkJcHJpbnRrKHNlcnIsIHVwLmxpbmUpOwotI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUyA+IDEgKi8KLSNlbHNlCi0JLyogTGVhdmUgdGhlIERVQVJUIGluIHJlc2V0ICovCi0JdGl0YW5fd3JpdGVsKDB4MDBmZjNjZmYsIENQUlIpOwotI2VuZGlmICAvKiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBleGNpdGVfcGxhdGZvcm1faW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwotCXU4IHJlZzsKLQl2b2lkIF9faW9tZW0gKiBkcHI7Ci0KLQkvKiBCSVUgYnVmZmVyIGFsbG9jYXRpb25zICovCi0Jb2NkX3dyaXRlbCg4LCBDUFVSU0xNVCk7CS8qIENQVSAqLwotCXRpdGFuX3dyaXRlbCg0LCBDUEdSV0wpOwkvKiBHUEkgLyBFdGhlcm5ldCAqLwotCi0JLyogTWFwIGNvbnRyb2wgcmVnaXN0ZXJzIGxvY2F0ZWQgaW4gRlBHQSAqLwotCWN0bF9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKEVYQ0lURV9QSFlTX0ZQR0EgKyBFWENJVEVfRlBHQV9TWVNDVEwsIDE2KTsKLQlpZiAoIWN0bF9yZWdzKQotCQlwYW5pYygiZVhjaXRlOiBmYWlsZWQgdG8gbWFwIHBsYXRmb3JtIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKLQltZW1jcHlfZnJvbWlvKGJ1ZiwgY3RsX3JlZ3MgKyAyLCBBUlJBWV9TSVpFKGJ1ZikpOwotCXVuaXRfaWQgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpIHwgKGJ1ZlsyXSA8PCAxNik7Ci0KLQkvKiBDbGVhciB0aGUgcmVib290IGZsYWcgKi8KLQlkcHIgPSBpb3JlbWFwX25vY2FjaGUoRVhDSVRFX1BIWVNfRlBHQSArIEVYQ0lURV9GUEdBX0RQUiwgMSk7Ci0JcmVnID0gX19yYXdfcmVhZGIoZHByKTsKLQlfX3Jhd193cml0ZWIocmVnICYgMHg3ZiwgZHByKTsKLQlpb3VubWFwKGRwcik7Ci0KLQkvKiBJbnRlcnJ1cHQgY29udHJvbGxlciBzZXR1cCAqLwotCWZvciAoaSA9IElOVFAwU3RhdHVzMDsgaSA8IElOVFAwU3RhdHVzMCArIDB4ODA7IGkgKz0gMHgxMCkgewotCQlvY2Rfd3JpdGVsKDB4MDAwMDAwMDAsIGkgKyAweDA0KTsKLQkJb2NkX3dyaXRlbCgweGZmZmZmZmZmLCBpICsgMHgwYyk7Ci0JfQotCW9jZF93cml0ZWwoMHgyLCBOTUlDT05GSUcpOwotCi0Jb2NkX3dyaXRlbCgweDEgPDwgKFRJVEFOX01TR0lOVCAlIDB4MjApLAotCQkgICBJTlRQME1hc2swICsgKDB4MTAgKiAoVElUQU5fTVNHSU5UIC8gMHgyMCkpKTsKLQlvY2Rfd3JpdGVsKCgweDEgPDwgKEZQR0EwX01TR0lOVCAlIDB4MjApKQotCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoRlBHQTBfTVNHSU5UIC8gMHgyMCkpKSwKLQkJICAgSU5UUDBNYXNrMCArICgweDEwICogKEZQR0EwX01TR0lOVCAvIDB4MjApKSk7Ci0Jb2NkX3dyaXRlbCgoMHgxIDw8IChGUEdBMV9NU0dJTlQgJSAweDIwKSkKLQkJICAgfCBvY2RfcmVhZGwoSU5UUDBNYXNrMCArICgweDEwICogKEZQR0ExX01TR0lOVCAvIDB4MjApKSksCi0JCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChGUEdBMV9NU0dJTlQgLyAweDIwKSkpOwotCW9jZF93cml0ZWwoKDB4MSA8PCAoUEhZX01TR0lOVCAlIDB4MjApKQotCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoUEhZX01TR0lOVCAvIDB4MjApKSksCi0JCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChQSFlfTVNHSU5UIC8gMHgyMCkpKTsKLSNpZiBVU0JfSVJRIDwgMTAKLQlvY2Rfd3JpdGVsKCgweDEgPDwgKFVTQl9NU0dJTlQgJSAweDIwKSkKLQkJICAgfCBvY2RfcmVhZGwoSU5UUDBNYXNrMCArICgweDEwICogKFVTQl9NU0dJTlQgLyAweDIwKSkpLAotCQkgICBJTlRQME1hc2swICsgKDB4MTAgKiAoVVNCX01TR0lOVCAvIDB4MjApKSk7Ci0jZW5kaWYKLQkvKiBFbmFibGUgdGhlIHBhY2tldCBGSUZPLCBYRE1BIGFuZCBYRE1BIGFyYml0ZXIgKi8KLQl0aXRhbl93cml0ZWwoMHgwMGZmMThmZiwgQ1BSUik7Ci0KLQkvKgotCSAqIFNldCB1cCB0aGUgUEFETVVYLiBQb3dlciBkb3duIGFsbCBldGhlcm5ldCBzbGljZXMsCi0JICogdGhleSB3aWxsIGJlIHBvd2VyZWQgdXAgYW5kIGNvbmZpZ3VyZWQgYXQgZGV2aWNlIHN0YXJ0dXAuCi0JICovCi0JdGl0YW5fd3JpdGVsKDB4MDA4NzgyMDYsIENQVEMxUik7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMDExMDAsIENQVEMwUik7IC8qIGxhdGNoIFBBRE1VWCwgZW5hYmxlIFdDSU1PREUgKi8KLQotCS8qIFJlc2V0IGFuZCBlbmFibGUgdGhlIEZJRk8gYmxvY2sgKi8KLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMSwgU0RSWEZDSUUpOwotCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAxLCBTRFRYRkNJRSk7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMDAxMDAsIFNEUlhGQ0lFKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgU0RUWEZDSUUpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBjb21tb24gaW50ZXJydXB0IHNoYXJlZCBieSBhbGwgY29tcG9uZW50cyBvZgotCSAqIHRoZSBHUEkvRXRoZXJuZXQgc3Vic3lzdGVtLgotCSAqLwotCXRpdGFuX3dyaXRlbCgoRVhDSVRFX1BIWVNfT0NEID4+IDEyKSwgQ1BDRkcwKTsKLQl0aXRhbl93cml0ZWwoVElUQU5fTVNHSU5ULCBDUENGRzEpOwotCi0JLyoKLQkgKiBYRE1BIGNvbmZpZ3VyYXRpb24uCi0JICogSW4gb3JkZXIgZm9yIHRoZSBYRE1BIHRvIGJlIHNoYXJhYmxlIGFtb25nIG11bHRpcGxlIGRyaXZlcnMsCi0JICogdGhlIHNldHVwIG11c3QgYmUgZG9uZSBoZXJlIGluIHRoZSBwbGF0Zm9ybS4gVGhlIHJlYXNvbiBpcyB0aGF0Ci0JICogdGhpcyBzZXR1cCBjYW4gb25seSBiZSBkb25lIHdoaWxlIHRoZSBYRE1BIGlzIGluIHJlc2V0LiBJZiB0aGlzCi0JICogd2VyZSBkb25lIGluIGEgZHJpdmVyLCBpdCB3b3VsZCBpbnRlcnJ1cHQgYWxsIG90aGVyIGRyaXZlcnMKLQkgKiB1c2luZyB0aGUgWERNQS4KLQkgKi8KLQl0aXRhbl93cml0ZWwoMHg4MDAyMWRmZiwgR1hDRkcpOwkvKiBYRE1BIHJlc2V0ICovCi0JdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIENQWENJU1JBKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BYQ0lTUkIpOwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ISUdITUVNKQotIwllcnJvciBjaGFuZ2UgZm9yIEhJR0hNRU0gc3VwcG9ydCEKLSNlbHNlCi0JdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIEdYRE1BRFJQRlgpOwkvKiBidWZmZXIgYWRkcmVzcyBwcmVmaXggKi8KLSNlbmRpZgotCXRpdGFuX3dyaXRlbCgwLCBHWERNQV9ERVNDQURSKTsKLQotCWZvciAoaSA9IDB4NTA0MDsgaSA8PSAweDUzMDA7IGkgKz0gMHgwMDQwKQotCQl0aXRhbl93cml0ZWwoMHg4MDA4MDAwMCwgaSk7CS8qIHJlc2V0IGNoYW5uZWwgKi8KLQotCXRpdGFuX3dyaXRlbCgoMHgxIDw8IDI5KQkJCS8qIG5vIHNwYXJzZSB0eCBkZXNjci4gKi8KLQkJICAgICB8ICgweDEgPDwgMjgpCQkJLyogbm8gc3BhcnNlIHJ4IGRlc2NyLiAqLwotCQkgICAgIHwgKDB4MSA8PCAyMykgfCAoMHgxIDw8IDI0KQkvKiBkZXNjcmlwdG9yIGNvaGVyZW5jeSAqLwotCQkgICAgIHwgKDB4MSA8PCAyMSkgfCAoMHgxIDw8IDIyKQkvKiBkYXRhIGNvaGVyZW5jeSAqLwotCQkgICAgIHwgKDB4MSA8PCAxNykKLQkJICAgICB8IDB4MWRmZiwKLQkJICAgICBHWENGRyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTVApCi0jCWVycm9yIE5vIFNNUCBzdXBwb3J0Ci0jZWxzZQotCS8qIEFsbCBpbnRlcnJ1cHRzIGdvIHRvIGNvcmUgIzAgb25seS4gKi8KLQl0aXRhbl93cml0ZWwoMHgxZjAwN2ZmZiwgQ1BEU1QwQSk7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIENQRFNUMEIpOwotCXRpdGFuX3dyaXRlbCgweDAwMDBmZjNmLCBDUERTVDFBKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BEU1QxQik7Ci0JdGl0YW5fd3JpdGVsKDB4MDBmZmZmZmYsIENQWERTVEEpOwotCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBDUFhEU1RCKTsKLSNlbmRpZgotCi0JLyogRW5hYmxlIERVQVJUIGludGVycnVwdHMsIGRpc2FibGUgZXZlcnl0aGluZyBlbHNlLiAqLwotCXRpdGFuX3dyaXRlbCgweDA0MDAwMDAwLCBDUEdJRzBFUik7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMDAwYzAsIENQR0lHMUVSKTsKLQotCWV4Y2l0ZV9wcm9jZnNfaW5pdCgpOwotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQotewotCXZvbGF0aWxlIHUzMiAqIGNvbnN0IGJvb3Rfb2NkX2Jhc2UgPSAodTMyICopIDB4YmY3ZmMwMDA7Ci0KLQkvKiBBbm5vdW5jZSBSQU0gdG8gc3lzdGVtICovCi0JYWRkX21lbW9yeV9yZWdpb24oMHgwMDAwMDAwMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKLQotCS8qIFNldCB1cCB0aGUgcGVyaXBoZXJhbCBhZGRyZXNzIG1hcCAqLwotCSooYm9vdF9vY2RfYmFzZSArIChMS0I5IC8gc2l6ZW9mKHUzMikpKSA9IDA7Ci0JKihib290X29jZF9iYXNlICsgKExLQjEwIC8gc2l6ZW9mKHUzMikpKSA9IDA7Ci0JKihib290X29jZF9iYXNlICsgKExLQjExIC8gc2l6ZW9mKHUzMikpKSA9IDA7Ci0JKihib290X29jZF9iYXNlICsgKExLQjEyIC8gc2l6ZW9mKHUzMikpKSA9IDA7Ci0Jd21iKCk7Ci0JKihib290X29jZF9iYXNlICsgKExLQjAgLyBzaXplb2YodTMyKSkpID0gRVhDSVRFX1BIWVNfT0NEID4+IDQ7Ci0Jd21iKCk7Ci0KLQlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19USVRBTiA+PiA0KSB8IDB4MVVMLCBMS0I1KTsKLQlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfVElUQU4gPj4gNCkgJiAweDdmZmZmZjAwKSAtIDB4MTAwLCBMS001KTsKLQlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19TQ1JBTSA+PiA0KSB8IDB4MVVMLCBMS0IxMyk7Ci0Jb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX1NDUkFNID4+IDQpICYgMHhmZmZmZmYwMCkgLSAweDEwMCwgTEtNMTMpOwotCi0JLyogTG9jYWwgYnVzIHNsb3QgIzAgKi8KLQlvY2Rfd3JpdGVsKDB4MDAwNDA1MTAsIExEUDApOwotCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX0JPT1RST00gPj4gNCkgfCAweDFVTCwgTEtCOSk7Ci0Jb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX0JPT1RST00gPj4gNCkgJiAweDAzZmZmZjAwKSAtIDB4MTAwLCBMS005KTsKLQotCS8qIExvY2FsIGJ1cyBzbG90ICMyICovCi0Jb2NkX3dyaXRlbCgweDAwMDAwMzMwLCBMRFAyKTsKLQlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19GUEdBID4+IDQpIHwgMHgxLCBMS0IxMSk7Ci0Jb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX0ZQR0EgPj4gNCkgLSAweDEwMCkgJiAweDAzZmZmZjAwLCBMS00xMSk7Ci0KLQkvKiBMb2NhbCBidXMgc2xvdCAjMyAqLwotCW9jZF93cml0ZWwoMHgwMDEyMzQxMywgTERQMyk7Ci0Jb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfTkFORCA+PiA0KSB8IDB4MSwgTEtCMTIpOwotCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9OQU5EID4+IDQpIC0gMHgxMDApICYgMHgwM2ZmZmYwMCwgTEtNMTIpOwotfQotCi0KLQotY29uc29sZV9pbml0Y2FsbChleGNpdGVfaW5pdF9jb25zb2xlKTsKLWFyY2hfaW5pdGNhbGwoZXhjaXRlX3BsYXRmb3JtX2luaXQpOwotCi1FWFBPUlRfU1lNQk9MKHRpdGFuX2xvY2spOwotRVhQT1JUX1NZTUJPTCh0aXRhbl9pcnFmbGFncyk7Ci1FWFBPUlRfU1lNQk9MKHRpdGFuX2lycSk7Ci1FWFBPUlRfU1lNQk9MKG9jZF9iYXNlKTsKLUVYUE9SVF9TWU1CT0wodGl0YW5fYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKaW5kZXggZmIyODRjMy4uYzUxNDA1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwpAQCAtMTAwLDExICsxMDAsMTEgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmW0NMX1NJWkVdIF9faW5pdGRhdGE7CisJc3RhdGljIGNoYXIgYnVmW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOwogCiAJLyogR2V0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGZyb20gQ0ZFICovCi0JaWYgKGNmZV9nZXRlbnYoIkxJTlVYX0NNRExJTkUiLCBidWYsIENMX1NJWkUpID49IDApIHsKLQkJYnVmW0NMX1NJWkUtMV0gPSAwOworCWlmIChjZmVfZ2V0ZW52KCJMSU5VWF9DTURMSU5FIiwgYnVmLCBDT01NQU5EX0xJTkVfU0laRSkgPj0gMCkgeworCQlidWZbQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9IDA7CiAJCXN0cmNweShhcmNzX2NtZGxpbmUsIGJ1Zik7CiAJfQogCkBAIC0xMTIsMTMgKzExMiwxMyBAQAogCSAqIGFzIENGRSBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgbGF0ZXIgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gKi8KIAlpZiAoKHN0cnN0cihhcmNzX2NtZGxpbmUsICJjb25zb2xlPSIpKSA9PSBOVUxMKSB7CiAJCS8qIFRyeSB0byByZWFkIHRoZSBkZWZhdWx0IHNlcmlhbCBwb3J0IHVzZWQgYnkgQ0ZFICovCi0JCWlmICgoY2ZlX2dldGVudigiQk9PVF9DT05TT0xFIiwgYnVmLCBDTF9TSVpFKSA8IDApCisJCWlmICgoY2ZlX2dldGVudigiQk9PVF9DT05TT0xFIiwgYnVmLCBDT01NQU5EX0xJTkVfU0laRSkgPCAwKQogCQkgICAgfHwgKHN0cm5jbXAoInVhcnQiLCBidWYsIDQpKSkKIAkJCS8qIERlZmF1bHQgdG8gdWFydDAgKi8KIAkJCXN0cmNweShidWYsICJ1YXJ0MCIpOwogCiAJCS8qIENvbXB1dGUgdGhlIG5ldyBjb21tYW5kIGxpbmUgKi8KLQkJc25wcmludGYoYXJjc19jbWRsaW5lLCBDTF9TSVpFLCAiJXMgY29uc29sZT10dHlTJWMsMTE1MjAwIiwKKwkJc25wcmludGYoYXJjc19jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSwgIiVzIGNvbnNvbGU9dHR5UyVjLDExNTIwMCIsCiAJCQkgYXJjc19jbWRsaW5lLCBidWZbNF0pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L01ha2VmaWxlIGIvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUKaW5kZXggMmEyMDlkNy4uMDk0YmM4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKIAogVk1MSU5VWCA9IHZtbGludXgKIAotYWxsOiB2bWxpbnV4LmVjb2ZmIHZtbGludXguc3JlYyBhZGRpbml0cmQKK2FsbDogdm1saW51eC5lY29mZiB2bWxpbnV4LnNyZWMKIAogdm1saW51eC5lY29mZjogJChvYmopL2VsZjJlY29mZiAkKFZNTElOVVgpCiAJJChvYmopL2VsZjJlY29mZiAkKFZNTElOVVgpIHZtbGludXguZWNvZmYgJChFMkVGTEFHUykKQEAgLTM5LDExICszOSw3IEBACiB2bWxpbnV4LnNyZWM6ICQoVk1MSU5VWCkKIAkkKE9CSkNPUFkpIC1TIC1PIHNyZWMgJChzdHJpcC1mbGFncykgJChWTUxJTlVYKSAkKG9iaikvdm1saW51eC5zcmVjCiAKLSQob2JqKS9hZGRpbml0cmQ6ICQob2JqKS9hZGRpbml0cmQuYwotCSQoSE9TVENDKSAtbyAkQCAkXgotCi1jbGVhbi1maWxlcyArPSBhZGRpbml0cmQgXAotCSAgICAgICBlbGYyZWNvZmYgXAorY2xlYW4tZmlsZXMgKz0gZWxmMmVjb2ZmIFwKIAkgICAgICAgdm1saW51eC5iaW4gXAogCSAgICAgICB2bWxpbnV4LmVjb2ZmIFwKIAkgICAgICAgdm1saW51eC5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9hZGRpbml0cmQuYyBiL2FyY2gvbWlwcy9ib290L2FkZGluaXRyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWIzZmViLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ib290L2FkZGluaXRyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBhZGRpbml0cmQgLSBwcm9ncmFtIHRvIGFkZCBhIGluaXRyZCBpbWFnZSB0byBhbiBlY29mZiBrZXJuZWwKLSAqCi0gKiAoQykgMTk5OSBUaG9tYXMgQm9nZW5kb2VyZmVyCi0gKiBtaW5vciBtb2RpZmljYXRpb25zLCBjbGVhbnVwOiBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgotICogZnVydGhlciBjbGVhbnVwOiBNYWNpZWogVy4gUm96eWNraQotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLSNpbmNsdWRlICJlY29mZi5oIgotCi0jZGVmaW5lIE1JUFNfUEFHRV9TSVpFCTQwOTYKLSNkZWZpbmUgTUlQU19QQUdFX01BU0sJKE1JUFNfUEFHRV9TSVpFLTEpCi0KLSNkZWZpbmUgc3dhYjE2KHgpIFwKLSAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoIFwKLSAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBzaG9ydCkoeCkgJiAodW5zaWduZWQgc2hvcnQpMHgwMGZmVSkgPDwgOCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgc2hvcnQpKHgpICYgKHVuc2lnbmVkIHNob3J0KTB4ZmYwMFUpID4+IDgpICkpCi0KLSNkZWZpbmUgc3dhYjMyKHgpIFwKLSAgICAgICAgKCh1bnNpZ25lZCBpbnQpKCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSkKLQotI2RlZmluZSBTV0FCKGEpCShzd2FiID8gc3dhYjMyKGEpIDogKGEpKQotCi12b2lkIGRpZShjaGFyICpzKQotewotCXBlcnJvcihzKTsKLQlleGl0KDEpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWludCBmZF92bWxpbnV4LCBmZF9pbml0cmQsIGZkX291dGZpbGU7Ci0JRklMSERSIGVmaWxlOwotCUFPVVRIRFIgZWFvdXQ7Ci0JU0NOSERSIGVzZWNzWzNdOwotCXN0cnVjdCBzdGF0IHN0OwotCWNoYXIgYnVmWzEwMjRdOwotCXVuc2lnbmVkIGxvbmcgbG9hZGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBpbml0cmRfaGVhZGVyWzJdOwotCWludCBpLCBjbnQ7Ci0JaW50IHN3YWIgPSAwOwotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlwcmludGYoIlVzYWdlOiAlcyA8dm1saW51eD4gPGluaXRyZD4gPG91dGZpbGU+XG4iLCBhcmd2WzBdKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlpZiAoKGZkX3ZtbGludXggPSBvcGVuIChhcmd2WzFdLCBPX1JET05MWSkpIDwgMCkKLQkJIGRpZSgib3BlbiB2bWxpbnV4Iik7Ci0JaWYgKHJlYWQgKGZkX3ZtbGludXgsICZlZmlsZSwgc2l6ZW9mIGVmaWxlKSAhPSBzaXplb2YgZWZpbGUpCi0JCWRpZSgicmVhZCBmaWxlIGhlYWRlciIpOwotCWlmIChyZWFkIChmZF92bWxpbnV4LCAmZWFvdXQsIHNpemVvZiBlYW91dCkgIT0gc2l6ZW9mIGVhb3V0KQotCQlkaWUoInJlYWQgYW91dCBoZWFkZXIiKTsKLQlpZiAocmVhZCAoZmRfdm1saW51eCwgZXNlY3MsIHNpemVvZiBlc2VjcykgIT0gc2l6ZW9mIGVzZWNzKQotCQlkaWUoInJlYWQgc2VjdGlvbiBoZWFkZXJzIik7Ci0JLyoKLQkgKiBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIGlzIGdvb2QgZm9yIHVzCi0JICovCi0JLyogVEJEICovCi0KLQkvKgotCSAqIGNoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3YWIgd29yZHMKLQkgKi8KLQlpZiAobnRvaHMoMHhhYTU1KSA9PSAweGFhNTUpIHsKLQkJaWYgKGVmaWxlLmZfbWFnaWMgPT0gc3dhYjE2KE1JUFNFTE1BR0lDKSkKLQkJCXN3YWIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChlZmlsZS5mX21hZ2ljID09IHN3YWIxNihNSVBTRUJNQUdJQykpCi0JCQlzd2FiID0gMTsKLQl9Ci0KLQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBlbXB0eSBkYXRhIHNlZ21lbnQgZm9yIHRoZSBpbml0cmQgKi8KLQlpZiAoZWFvdXQuZHNpemUgfHwgZXNlY3NbMV0uc19zaXplKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiRGF0YSBzZWdtZW50IG5vdCBlbXB0eS4gR2l2aW5nIHVwIVxuIik7Ci0JCWV4aXQoMSk7Ci0JfQotCWlmICgoZmRfaW5pdHJkID0gb3BlbiAoYXJndlsyXSwgT19SRE9OTFkpKSA8IDApCi0JCWRpZSgib3BlbiBpbml0cmQiKTsKLQlpZiAoZnN0YXQgKGZkX2luaXRyZCwgJnN0KSA8IDApCi0JCWRpZSgiZnN0YXQgaW5pdHJkIik7Ci0JbG9hZGFkZHIgPSAoKFNXQUIoZXNlY3NbMl0uc192YWRkcikgKyBTV0FCKGVzZWNzWzJdLnNfc2l6ZSkKLQkJCSsgTUlQU19QQUdFX1NJWkUtMSkgJiB+TUlQU19QQUdFX01BU0spIC0gODsKLQlpZiAobG9hZGFkZHIgPCAoU1dBQihlc2Vjc1syXS5zX3ZhZGRyKSArIFNXQUIoZXNlY3NbMl0uc19zaXplKSkpCi0JCWxvYWRhZGRyICs9IE1JUFNfUEFHRV9TSVpFOwotCWluaXRyZF9oZWFkZXJbMF0gPSBTV0FCKDB4NDk0RTUyNDQpOwotCWluaXRyZF9oZWFkZXJbMV0gPSBTV0FCKHN0LnN0X3NpemUpOwotCWVhb3V0LmRzaXplID0gZXNlY3NbMV0uc19zaXplID0gaW5pdHJkX2hlYWRlclsxXSA9IFNXQUIoc3Quc3Rfc2l6ZSs4KTsKLQllYW91dC5kYXRhX3N0YXJ0ID0gZXNlY3NbMV0uc192YWRkciA9IGVzZWNzWzFdLnNfcGFkZHIgPSBTV0FCKGxvYWRhZGRyKTsKLQotCWlmICgoZmRfb3V0ZmlsZSA9IG9wZW4gKGFyZ3ZbM10sIE9fUkRXUnxPX0NSRUFUfE9fVFJVTkMsIDA2NjYpKSA8IDApCi0JCWRpZSgib3BlbiBvdXRmaWxlIik7Ci0JaWYgKHdyaXRlIChmZF9vdXRmaWxlLCAmZWZpbGUsIHNpemVvZiBlZmlsZSkgIT0gc2l6ZW9mIGVmaWxlKQotCQlkaWUoIndyaXRlIGZpbGUgaGVhZGVyIik7Ci0JaWYgKHdyaXRlIChmZF9vdXRmaWxlLCAmZWFvdXQsIHNpemVvZiBlYW91dCkgIT0gc2l6ZW9mIGVhb3V0KQotCQlkaWUoIndyaXRlIGFvdXQgaGVhZGVyIik7Ci0JaWYgKHdyaXRlIChmZF9vdXRmaWxlLCBlc2Vjcywgc2l6ZW9mIGVzZWNzKSAhPSBzaXplb2YgZXNlY3MpCi0JCWRpZSgid3JpdGUgc2VjdGlvbiBoZWFkZXJzIik7Ci0JLyogc2tpcCBwYWRkaW5nICovCi0JaWYobHNlZWsoZmRfdm1saW51eCwgU1dBQihlc2Vjc1swXS5zX3NjbnB0ciksIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpCi0JCWRpZSgibHNlZWsgdm1saW51eCIpOwotCWlmKGxzZWVrKGZkX291dGZpbGUsIFNXQUIoZXNlY3NbMF0uc19zY25wdHIpLCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKQotCQlkaWUoImxzZWVrIG91dGZpbGUiKTsKLQkvKiBjb3B5IHRleHQgc2VnbWVudCAqLwotCWNudCA9IFNXQUIoZWFvdXQudHNpemUpOwotCXdoaWxlIChjbnQpIHsKLQkJaWYgKChpID0gcmVhZCAoZmRfdm1saW51eCwgYnVmLCBzaXplb2YgYnVmKSkgPD0gMCkKLQkJCWRpZSgicmVhZCB2bWxpbnV4Iik7Ci0JCWlmICh3cml0ZSAoZmRfb3V0ZmlsZSwgYnVmLCBpKSAhPSBpKQotCQkJZGllKCJ3cml0ZSB2bWxpbnV4Iik7Ci0JCWNudCAtPSBpOwotCX0KLQlpZiAod3JpdGUgKGZkX291dGZpbGUsIGluaXRyZF9oZWFkZXIsIHNpemVvZiBpbml0cmRfaGVhZGVyKSAhPSBzaXplb2YgaW5pdHJkX2hlYWRlcikKLQkJZGllKCJ3cml0ZSBpbml0cmQgaGVhZGVyIik7Ci0Jd2hpbGUgKChpID0gcmVhZCAoZmRfaW5pdHJkLCBidWYsIHNpemVvZiBidWYpKSA+IDApCi0JCWlmICh3cml0ZSAoZmRfb3V0ZmlsZSwgYnVmLCBpKSAhPSBpKQotCQkJZGllKCJ3cml0ZSBpbml0cmQiKTsKLQljbG9zZShmZF92bWxpbnV4KTsKLQljbG9zZShmZF9pbml0cmQpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3ZjQwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDAgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4KKyMKKyMgQWRhcHRlZCBmb3IgTUlQUyBQZXRlIFBvcG92LCBEYW4gTWFsZWsKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IGJ5IExpbnVzIFRvcnZhbGRzCisjIEFkYXB0ZWQgZm9yIFBvd2VyUEMgYnkgR2FyeSBUaG9tYXMKKyMgbW9kaWZpZWQgYnkgQ29ydCAoY29ydEBjcy5ubXQuZWR1KQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5CisjIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyMKKworIyBjb21wcmVzc2VkIGtlcm5lbCBsb2FkIGFkZHI6IFZNTElOVVpfTE9BRF9BRERSRVNTID4gVk1MSU5VWF9MT0FEX0FERFJFU1MgKyBWTUxJTlVYX1NJWkUKK1ZNTElOVVhfU0laRSA6PSAkKHNoZWxsIHdjIC1jICQob2JqdHJlZSkvJChLQlVJTERfSU1BR0UpIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMSkKK1ZNTElOVVhfU0laRSA6PSAkKHNoZWxsIFsgLW4gIiQoVk1MSU5VWF9TSVpFKSIgXSAmJiBlY2hvICQkKCgkKFZNTElOVVhfU0laRSkgKyAoNjU1MzYgLSAkKFZNTElOVVhfU0laRSkgJSA2NTUzNikpKSkKK1ZNTElOVVpfTE9BRF9BRERSRVNTIDo9IDB4JChzaGVsbCBbIC1uICIkKFZNTElOVVhfU0laRSkiIF0gJiYgcHJpbnRmICV4ICQkKCgkKFZNTElOVVhfTE9BRF9BRERSRVNTKSArICQoVk1MSU5VWF9TSVpFKSkpKQorCisjIHNldCB0aGUgZGVmYXVsdCBzaXplIG9mIHRoZSBtYWxsb2NpbmcgYXJlYSBmb3IgZGVjb21wcmVzc2luZworQk9PVF9IRUFQX1NJWkUgOj0gMHg0MDAwMDAKKworIyBEaXNhYmxlIEZ1bmN0aW9uIFRyYWNlcgorS0JVSUxEX0NGTEFHUyA6PSAkKHNoZWxsIGVjaG8gJChLQlVJTERfQ0ZMQUdTKSB8IHNlZCAtZSAicy8tcGcvLyIpCisKK0tCVUlMRF9DRkxBR1MgOj0gJChMSU5VWElOQ0xVREUpICQoS0JVSUxEX0NGTEFHUykgLURfX0tFUk5FTF9fIFwKKwktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpIC1EIlZNTElOVVhfTE9BRF9BRERSRVNTX1VMTD0kKFZNTElOVVhfTE9BRF9BRERSRVNTKXVsbCIgXAorCitLQlVJTERfQUZMQUdTIDo9ICQoTElOVVhJTkNMVURFKSAkKEtCVUlMRF9BRkxBR1MpIC1EX19BU1NFTUJMWV9fIFwKKwktREtFUk5FTF9FTlRSWT0weCQoc2hlbGwgJChOTSkgJChvYmp0cmVlKS8kKEtCVUlMRF9JTUFHRSkgMj4vZGV2L251bGwgfCBncmVwICIga2VybmVsX2VudHJ5IiB8IGN1dCAtZjEgLWQgXCApIFwKKwktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpCisKK29iai15IDo9ICQob2JqKS9oZWFkLm8gJChvYmopL2RlY29tcHJlc3MubyAkKG9iaikvZGJnLm8KKworb2JqLSQoQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTApICs9ICQob2JqKS91YXJ0LTE2NTUwLm8KKworT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICQoT0JKQ09QWUZMQUdTKSAtTyBiaW5hcnkgLVIgLmNvbW1lbnQgLVMKKyQob2JqKS92bWxpbnV4LmJpbjogJChLQlVJTERfSU1BR0UpCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworc3VmZml4XyQoQ09ORklHX0tFUk5FTF9HWklQKSAgPSBnegorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9CWklQMikgPSBiejIKK3N1ZmZpeF8kKENPTkZJR19LRVJORUxfTFpNQSkgID0gbHptYQordG9vbF8kKENPTkZJR19LRVJORUxfR1pJUCkgICAgPSBnemlwCit0b29sXyQoQ09ORklHX0tFUk5FTF9CWklQMikgICA9IGJ6aXAyCit0b29sXyQoQ09ORklHX0tFUk5FTF9MWk1BKSAgICA9IGx6bWEKKyQob2JqKS92bWxpbnV4LiQoc3VmZml4X3kpOiAkKG9iaikvdm1saW51eC5iaW4KKwkkKGNhbGwgaWZfY2hhbmdlZCwkKHRvb2xfeSkpCisKKyQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC4kKHN1ZmZpeF95KSAkKG9iaikvZHVtbXkubworCSQoUSkkKE9CSkNPUFkpICQoT0JKQ09QWUZMQUdTKSBcCisJCS0tYWRkLXNlY3Rpb249LmltYWdlPSQ8IFwKKwkJLS1zZXQtc2VjdGlvbi1mbGFncz0uaW1hZ2U9Y29udGVudHMsYWxsb2MsbG9hZCxyZWFkb25seSxkYXRhIFwKKwkJJChvYmopL2R1bW15Lm8gJEAKKworTERGTEFHU192bWxpbnV6IDo9ICQoTERGTEFHUykgLVR0ZXh0ICQoVk1MSU5VWl9MT0FEX0FERFJFU1MpIC1UCit2bWxpbnV6OiAkKHNyYykvbGQuc2NyaXB0ICQob2JqLXkpICQob2JqKS9waWdneS5vCisJJChjYWxsIGlmX2NoYW5nZWQsbGQpCisJJChRKSQoT0JKQ09QWSkgJChPQkpDT1BZRkxBR1MpIC1SIC5jb21tZW50IC1SIC5zdGFiIC1SIC5zdGFic3RyIC1SIC5pbml0cmQgLVIgLnN5c21hcCAkQAorCisjCisjIFNvbWUgREVDc3RhdGlvbnMgbmVlZCBhbGwgcG9zc2libGUgc2VjdGlvbnMgb2YgYW4gRUNPRkYgZXhlY3V0YWJsZQorIworaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgorICBFMkVGTEFHUyA9IC1hCitlbHNlCisgIEUyRUZMQUdTID0KK2VuZGlmCisKKyMgZWxmMmVjb2ZmIGNhbiBvbmx5IGhhbmRsZSAzMmJpdCBpbWFnZQorCitpZmRlZiBDT05GSUdfMzJCSVQKKwlWTUxJTlVaID0gdm1saW51egorZWxzZQorCVZNTElOVVogPSB2bWxpbnV6LjMyCitlbmRpZgorCit2bWxpbnV6LjMyOiB2bWxpbnV6CisJJChRKSQoT0JKQ09QWSkgLU8gJCgzMmJpdC1iZmQpICQoT0JKQ09QWUZMQUdTKSAkPCAkQAorCit2bWxpbnV6LmVjb2ZmOiAkKG9iaikvLi4vZWxmMmVjb2ZmICQoVk1MSU5VWikKKwkkKFEpJChvYmopLy4uL2VsZjJlY29mZiAkKFZNTElOVVopIHZtbGludXouZWNvZmYgJChFMkVGTEFHUykKKworJChvYmopLy4uL2VsZjJlY29mZjogJChzcmMpLy4uL2VsZjJlY29mZi5jCisJJChRKSQoSE9TVENDKSAtbyAkQCAkXgorCitkcm9wLXNlY3Rpb25zCT0gLnJlZ2luZm8gLm1kZWJ1ZyAuY29tbWVudCAubm90ZSAucGRyIC5vcHRpb25zIC5NSVBTLm9wdGlvbnMKK3N0cmlwLWZsYWdzCT0gJChhZGRwcmVmaXggLS1yZW1vdmUtc2VjdGlvbj0sJChkcm9wLXNlY3Rpb25zKSkKKworT0JKQ09QWUZMQUdTX3ZtbGludXouYmluIDo9ICQoT0JKQ09QWUZMQUdTKSAtTyBiaW5hcnkgJChzdHJpcC1mbGFncykKK3ZtbGludXouYmluOiB2bWxpbnV6CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworT0JKQ09QWUZMQUdTX3ZtbGludXouc3JlYyA6PSAkKE9CSkNPUFlGTEFHUykgLVMgLU8gc3JlYyAkKHN0cmlwLWZsYWdzKQordm1saW51ei5zcmVjOiB2bWxpbnV6CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworY2xlYW46CitjbGVhbi1maWxlcyArPSAqLm8gXAorCSAgICAgICB2bWxpbnUqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRkYzdhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIE1JUFMtc3BlY2lmaWMgZGVidWcgc3VwcG9ydCBmb3IgcHJlLWJvb3QgZW52aXJvbm1lbnQKKyAqCisgKiBOT1RFOiBwdXRjKCkgaXMgYm9hcmQgc3BlY2lmaWMsIGlmIHlvdXIgYm9hcmQgaGF2ZSBhIDE2NTUwIGNvbXBhdGlibGUgdWFydCwKKyAqIHBsZWFzZSBzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCBmb3IgeW91ciBtYWNoaW5lLiBvdGhld2lzZSwgeW91CisgKiBuZWVkIHRvIGltcGxlbWVudCB5b3VyIG93biBwdXRjKCkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit2b2lkIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgcHV0YyhjaGFyIGMpCit7Cit9CisKK3ZvaWQgcHV0cyhjb25zdCBjaGFyICpzKQoreworCWNoYXIgYzsKKwl3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKSB7CisJCXB1dGMoYyk7CisJCWlmIChjID09ICdcbicpCisJCQlwdXRjKCdccicpOworCX0KK30KKwordm9pZCBwdXRoZXgodW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKworCXVuc2lnbmVkIGNoYXIgYnVmWzEwXTsKKwlpbnQgaTsKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQlidWZbaV0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiJbdmFsICYgMHgwRl07CisJCXZhbCA+Pj0gNDsKKwl9CisJYnVmWzhdID0gJ1wwJzsKKwlwdXRzKGJ1Zik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MzMwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIE1pc2MuIGJvb3Rsb2FkZXIgY29kZSBmb3IgbWFueSBtYWNoaW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIEF1dGhvcjogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAbXZpc3RhLmNvbT4gRGVyaXZlZCBmcm9tCisgKiBhcmNoL3BwYy9ib290L3ByZXAvbWlzYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qIFRoZXNlIHR3byB2YXJpYWJsZXMgc3BlY2lmeSB0aGUgZnJlZSBtZW0gcmVnaW9uCisgKiB0aGF0IGNhbiBiZSB1c2VkIGZvciB0ZW1wb3JhcnkgbWFsbG9jIGFyZWEKKyAqLwordW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7Cit1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CitjaGFyICp6aW1hZ2Vfc3RhcnQ7CisKKy8qIFRoZSBsaW5rZXIgdGVsbHMgdXMgd2hlcmUgdGhlIGltYWdlIGlzLiAqLworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19pbWFnZV9iZWdpbiwgX19pbWFnZV9lbmQ7CitleHRlcm4gdW5zaWduZWQgY2hhciBfX3JhbWRpc2tfYmVnaW4sIF9fcmFtZGlza19lbmQ7Cit1bnNpZ25lZCBsb25nIGluaXRyZF9zaXplOworCisvKiBkZWJ1ZyBpbnRlcmZhY2VzICAqLworZXh0ZXJuIHZvaWQgcHV0cyhjb25zdCBjaGFyICpzKTsKK2V4dGVybiB2b2lkIHB1dGhleCh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKTsKKwordm9pZCBlcnJvcihjaGFyICp4KQoreworCXB1dHMoIlxuXG4iKTsKKwlwdXRzKHgpOworCXB1dHMoIlxuXG4gLS0gU3lzdGVtIGhhbHRlZCIpOworCisJd2hpbGUgKDEpCisJCTsJLyogSGFsdCAqLworfQorCisvKiBhY3RpdmF0ZSB0aGUgY29kZSBmb3IgcHJlLWJvb3QgZW52aXJvbm1lbnQgKi8KKyNkZWZpbmUgU1RBVElDIHN0YXRpYworCisjaWZkZWYgQ09ORklHX0tFUk5FTF9HWklQCit2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpzID0gc3JjOworCWNoYXIgKmQgPSBkZXN0OworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZFtpXSA9IHNbaV07CisJcmV0dXJuIGRlc3Q7Cit9CisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0JaSVAyCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQoreworCWludCBpOworCWNoYXIgKnNzID0gczsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXNzW2ldID0gYzsKKwlyZXR1cm4gczsKK30KKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCisKK3ZvaWQgZGVjb21wcmVzc19rZXJuZWwodW5zaWduZWQgbG9uZyBib290X2hlYXBfc3RhcnQpCit7CisJaW50IHppbWFnZV9zaXplOworCisJLyoKKwkgKiBXZSBsaW5rIG91cnNlbGYgdG8gYW4gYXJiaXRyYXJ5IGxvdyBhZGRyZXNzLiAgV2hlbiB3ZSBydW4sIHdlCisJICogcmVsb2NhdGUgb3V0c2VsZiB0byB0aGF0IGFkZHJlc3MuICBfX2ltYWdlX2JlaWduIHBvaW50cyB0bworCSAqIHRoZSBwYXJ0IG9mIHRoZSBpbWFnZSB3aGVyZSB0aGUgekltYWdlIGlzLiAtLSBUb20KKwkgKi8KKwl6aW1hZ2Vfc3RhcnQgPSAoY2hhciAqKSh1bnNpZ25lZCBsb25nKSgmX19pbWFnZV9iZWdpbik7CisJemltYWdlX3NpemUgPSAodW5zaWduZWQgbG9uZykoJl9faW1hZ2VfZW5kKSAtCisJICAgICh1bnNpZ25lZCBsb25nKSgmX19pbWFnZV9iZWdpbik7CisKKwkvKgorCSAqIFRoZSB6SW1hZ2UgYW5kIGluaXRyZCB3aWxsIGJlIGJldHdlZW4gc3RhcnQgYW5kIF9lbmQsIHNvIHRoZXkndmUKKwkgKiBhbHJlYWR5IGJlZW4gbW92ZWQgb25jZS4gIFdlJ3JlIGdvb2QgdG8gZ28gbm93LiAtLSBUb20KKwkgKi8KKwlwdXRzKCJ6aW1hZ2UgYXQ6ICAgICAiKTsKKwlwdXRoZXgoKHVuc2lnbmVkIGxvbmcpemltYWdlX3N0YXJ0KTsKKwlwdXRzKCIgIik7CisJcHV0aGV4KCh1bnNpZ25lZCBsb25nKSh6aW1hZ2Vfc2l6ZSArIHppbWFnZV9zdGFydCkpOworCXB1dHMoIlxuIik7CisKKwlpZiAoaW5pdHJkX3NpemUpIHsKKwkJcHV0cygiaW5pdHJkIGF0OiAgICAgIik7CisJCXB1dGhleCgodW5zaWduZWQgbG9uZykoJl9fcmFtZGlza19iZWdpbikpOworCQlwdXRzKCIgIik7CisJCXB1dGhleCgodW5zaWduZWQgbG9uZykoJl9fcmFtZGlza19lbmQpKTsKKwkJcHV0cygiXG4iKTsKKwl9CisKKwkvKiB0aGlzIGFyZWEgYXJlIHByZXBhcmVkIGZvciBtYWxsb2Npbmcgd2hlbiBkZWNvbXByZXNzaW5nICovCisJZnJlZV9tZW1fcHRyID0gYm9vdF9oZWFwX3N0YXJ0OworCWZyZWVfbWVtX2VuZF9wdHIgPSBib290X2hlYXBfc3RhcnQgKyBCT09UX0hFQVBfU0laRTsKKworCS8qIERpc3BsYXkgc3RhbmRhcmQgTGludXgvTUlQUyBib290IHByb21wdCBmb3Iga2VybmVsIGFyZ3MgKi8KKwlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4IGF0IGxvYWQgYWRkcmVzcyAiKTsKKwlwdXRoZXgoVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMKTsKKwlwdXRzKCJcbiIpOworCS8qIERlY29tcHJlc3MgdGhlIGtlcm5lbCB3aXRoIGFjY29yZGluZyBhbGdvcml0aG0gKi8KKwlkZWNvbXByZXNzKHppbWFnZV9zdGFydCwgemltYWdlX3NpemUsIDAsIDAsCisJCSAgICh2b2lkICopVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMLCAwLCBlcnJvcik7CisJLyogRklYTUU6IGlzIHRoZXJlIGEgbmVlZCB0byBmbHVzaCBjYWNoZSBoZXJlPyAqLworCXB1dHMoIk5vdywgYm9vdGluZyB0aGUga2VybmVsLi4uXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZHVtbXkuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZHVtbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWRiZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kdW1teS5jCkBAIC0wLDAgKzEsNCBAQAoraW50IG1haW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2NWE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgV2FsZG9yZiBFbGVjdHJvbmljcworICogV3JpdHRlbiBieSBSYWxmIEJhZWNobGUgYW5kIEFuZHJlYXMgQnVzc2UKKyAqIENvcHlyaWdodCAoQykgMTk5NSAtIDE5OTkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNLiBBbnRvaW5lCisgKiBNb2RpZmllZCBmb3IgREVDU3RhdGlvbiBhbmQgaGVuY2UgUjMwMDAgc3VwcG9ydCBieSBQYXVsIE0uIEFudG9pbmUKKyAqIEZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBieSBEYXZpZCBTLiBNaWxsZXIgYW5kIEhhcmFsZCBLb2VyZmdlbgorICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKworCS5zZXQgbm9yZW9yZGVyCisJLmNwcmVzdG9yZQorCUxFQUYoc3RhcnQpCitzdGFydDoKKwkvKiBTYXZlIGJvb3Qgcm9tIHN0YXJ0IGFyZ3MgKi8KKwltb3ZlCXMwLCBhMAorCW1vdmUJczEsIGExCisJbW92ZQlzMiwgYTIKKwltb3ZlCXMzLCBhMworCisJLyogQ2xlYXIgQlNTICovCisJUFRSX0xBCWEwLCBfZWRhdGEKKwlQVFJfTEEJYTIsIF9lbmQKKzE6CXN3CXplcm8sIDAoYTApCisJYm5lCWEyLCBhMCwgMWIKKwkgYWRkaXUJYTAsIGEwLCA0CisKKwlQVFJfTEEJYTAsICguaGVhcCkgICAgICAgICAgLyogaGVhcCBhZGRyZXNzICovCisJUFRSX0xBICBzcCwgKC5zdGFjayArIDgxOTIpICAvKiBzdGFjayBhZGRyZXNzICovCisKKwlQVFJfTEEJcmEsIDJmCisJUFRSX0xBCWswLCBkZWNvbXByZXNzX2tlcm5lbAorCWpyCWswCisJIG5vcAorMjoKKwltb3ZlCWEwLCBzMAorCW1vdmUJYTEsIHMxCisJbW92ZQlhMiwgczIKKwltb3ZlCWEzLCBzMworCVBUUl9MSQlrMCwgS0VSTkVMX0VOVFJZCisJanIJazAKKwkgbm9wCiszOgorCWIJM2IKKwkgbm9wCisJRU5EKHN0YXJ0KQorCisJLmNvbW0gLmhlYXAsQk9PVF9IRUFQX1NJWkUsNAorCS5jb21tIC5zdGFjayw0MDk2KjIsNApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9sZC5zY3JpcHQgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2xkLnNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWU5ZjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9sZC5zY3JpcHQKQEAgLTAsMCArMSwxNTAgQEAKK09VVFBVVF9BUkNIKG1pcHMpCitFTlRSWShzdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJCX0gPTAKKyAgLnRleHQgICAgICA6CisgIHsKKyAgICBfZnRleHQgPSAuIDsKKyAgICAqKC50ZXh0KQorICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGExKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5rc3RydGFiIDogeyAqKC5rc3RydGFiKSB9CisKKyAgLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIF9fc3RhcnRfX19kYmVfdGFibGUgPSAuOwkvKiBFeGNlcHRpb24gdGFibGUgZm9yIGRhdGEgYnVzIGVycm9ycyAqLworICBfX2RiZV90YWJsZSA6IHsgKihfX2RiZV90YWJsZSkgfQorICBfX3N0b3BfX19kYmVfdGFibGUgPSAuOworCisgIF9fc3RhcnRfX19rc3ltdGFiID0gLjsJLyogS2VybmVsIHN5bWJvbCB0YWJsZSAqLworICBfX2tzeW10YWIgOiB7ICooX19rc3ltdGFiKSB9CisgIF9fc3RvcF9fX2tzeW10YWIgPSAuOworCisgIF9ldGV4dCA9IC47CisKKyAgLiA9IEFMSUdOKDgxOTIpOworICAuZGF0YS5pbml0X3Rhc2sgOiB7ICooLmRhdGEuaW5pdF90YXNrKSB9CisKKyAgLyogU3RhcnR1cCBjb2RlICovCisgIC4gPSBBTElHTig0MDk2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMTYpOworICBfX3NldHVwX3N0YXJ0ID0gLjsKKyAgLnNldHVwLmluaXQgOiB7ICooLnNldHVwLmluaXQpIH0KKyAgX19zZXR1cF9lbmQgPSAuOworICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLmluaXRjYWxsLmluaXQgOiB7ICooLmluaXRjYWxsLmluaXQpIH0KKyAgX19pbml0Y2FsbF9lbmQgPSAuOworICAuID0gQUxJR04oNDA5Nik7CS8qIEFsaWduIGRvdWJsZSBwYWdlIGZvciBpbml0X3Rhc2tfdW5pb24gKi8KKyAgX19pbml0X2VuZCA9IC47CisKKyAgLiA9IEFMSUdOKDQwOTYpOworICAuZGF0YS5wYWdlX2FsaWduZWQgOiB7ICooLmRhdGEuaWR0KSB9CisKKyAgLiA9IEFMSUdOKDMyKTsKKyAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KKworICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5yZWdpbmZvIDogeyAqKC5yZWdpbmZvKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICBJdCB3b3VsZAorICAgICBiZSBtb3JlIGNvcnJlY3QgdG8gZG8gdGhpczoKKyAgICAgICAuID0gLjsKKyAgICAgVGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIG9mIGEKKyAgICAgdGV4dCBzZWdtZW50IGVuZGluZyBwcmVjaXNlbHkgYXQgdGhlIGVuZCBvZiBhIHBhZ2U7IGl0IGNhdXNlcyB0aGUKKyAgICAgZGF0YSBzZWdtZW50IHRvIHNraXAgYSBwYWdlLiAgVGhlIGFib3ZlIGV4cHJlc3Npb24gZG9lcyBub3QgaGF2ZQorICAgICB0aGlzIHByb2JsZW0sIGJ1dCBpdCB3aWxsIGN1cnJlbnRseSAoMi85NSkgY2F1c2UgQkZEIHRvIGFsbG9jYXRlCisgICAgIGEgc2luZ2xlIHNlZ21lbnQsIGNvbWJpbmluZyBib3RoIHRleHQgYW5kIGRhdGEsIGZvciB0aGlzIGNhc2UuCisgICAgIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSB0ZXh0IHNlZ21lbnQgZnJvbSBiZWluZyBzaGFyZWQgYW1vbmcKKyAgICAgbXVsdGlwbGUgZXhlY3V0aW9ucyBvZiB0aGUgcHJvZ3JhbTsgSSB0aGluayB0aGF0IGlzIG1vcmUKKyAgICAgaW1wb3J0YW50IHRoYW4gbG9zaW5nIGEgcGFnZSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIChub3RlCisgICAgIHRoYXQgbm8gYWN0dWFsIG1lbW9yeSBpcyBsb3N0OyB0aGUgcGFnZSB3aGljaCBpcyBza2lwcGVkIGNhbiBub3QKKyAgICAgYmUgcmVmZXJlbmNlZCkuICAqLworICAuID0gLjsKKyAgLmRhdGEgICAgOgorICB7CisgICAgX2ZkYXRhID0gLiA7CisgICAgKiguZGF0YSkKKworICAgLyogUHV0IHRoZSBjb21wcmVzc2VkIGltYWdlIGhlcmUsIHNvIGJzcyBpcyBvbiB0aGUgZW5kLiAqLworICAgX19pbWFnZV9iZWdpbiA9IC47CisgICAqKC5pbWFnZSkKKyAgIF9faW1hZ2VfZW5kID0gLjsKKyAgIC8qIEFsaWduIHRoZSBpbml0aWFsIHJhbWRpc2sgaW1hZ2UgKElOSVRSRCkgb24gcGFnZSBib3VuZGFyaWVzLiAqLworICAgLiA9IEFMSUdOKDQwOTYpOworICAgX19yYW1kaXNrX2JlZ2luID0gLjsKKyAgICooLmluaXRyZCkKKyAgIF9fcmFtZGlza19lbmQgPSAuOworICAgLiA9IEFMSUdOKDQwOTYpOworCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgLmRhdGExICAgOiB7ICooLmRhdGExKSB9CisgIF9ncCA9IC4gKyAweDgwMDA7CisgIC5saXQ4IDogeyAqKC5saXQ4KSB9CisgIC5saXQ0IDogeyAqKC5saXQ0KSB9CisgIC5jdG9ycyAgICAgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgICAgIDogeyAqKC5kdG9ycykgICB9CisgIC5nb3QgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5nb3QpIH0KKyAgLmR5bmFtaWMgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLyogV2Ugd2FudCB0aGUgc21hbGwgZGF0YSBzZWN0aW9ucyB0b2dldGhlciwgc28gc2luZ2xlLWluc3RydWN0aW9uIG9mZnNldHMKKyAgICAgY2FuIGFjY2VzcyB0aGVtIGFsbCwgYW5kIGluaXRpYWxpemVkIGRhdGEgYWxsIGJlZm9yZSB1bmluaXRpYWxpemVkLCBzbworICAgICB3ZSBjYW4gc2hvcnRlbiB0aGUgb24tZGlzayBzZWdtZW50IHNpemUuICAqLworICAuc2RhdGEgICAgIDogeyAqKC5zZGF0YSkgfQorICAuID0gQUxJR04oNCk7CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICBfX2Jzc19zdGFydCA9IC47CisgIF9mYnNzID0gLjsKKyAgLnNic3MgICAgICA6IHsgKiguc2JzcykgKiguc2NvbW1vbikgfQorICAuYnNzICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgICAuICA9IEFMSUdOKDQpOworICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworICB9CisKKyAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisgIC9ESVNDQVJELyA6CisgIHsKKyAgICAgICAgKigudGV4dC5leGl0KQorICAgICAgICAqKC5kYXRhLmV4aXQpCisgICAgICAgICooLmV4aXRjYWxsLmV4aXQpCisgIH0KKworICAvKiBUaGlzIGlzIHRoZSBNSVBTIHNwZWNpZmljIG1kZWJ1ZyBzZWN0aW9uLiAgKi8KKyAgLm1kZWJ1ZyA6IHsgKigubWRlYnVnKSB9CisgIC8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIEVMRiBiYWNrZW5kcyB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbgorICAgICBjb252ZXJ0ZWQgdG8gdGhlIG5ldyBzdHlsZSBsaW5rZXIuICAqLworICAuc3RhYiAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIC5kZWJ1ZyBEV0FSRiBzZWN0aW9uIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICBzZWN0aW9uIHNvIHdlIGJlZ2luIC5kZWJ1ZyBhdCAwLiAgSXQncyBub3QgY2xlYXIgeWV0IHdoYXQgbmVlZHMgdG8gaGFwcGVuCisgICAgIGZvciB0aGUgb3RoZXJzLiAgICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogVGhlc2UgbXVzdCBhcHBlYXIgcmVnYXJkbGVzcyBvZiAgLiAgKi8KKyAgLmdwdGFiLnNkYXRhIDogeyAqKC5ncHRhYi5kYXRhKSAqKC5ncHRhYi5zZGF0YSkgfQorICAuZ3B0YWIuc2JzcyA6IHsgKiguZ3B0YWIuYnNzKSAqKC5ncHRhYi5zYnNzKSB9CisgIC5jb21tZW50IDogeyAqKC5jb21tZW50KSB9CisgIC5ub3RlIDogeyAqKC5ub3RlKSB9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtMTY1NTAuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC0xNjU1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Y2FhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtMTY1NTAuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogMTY1NTAgY29tcGF0aWJsZSB1YXJ0IGJhc2VkIHNlcmlhbCBkZWJ1ZyBzdXBwb3J0IGZvciB6Ym9vdAorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0xPT05HU09OKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01BTFRBKQorI2RlZmluZSBVQVJUX0JBU0UgMHgxZmQwMDNmOAorI2RlZmluZSBQT1JUKG9mZnNldCkgKENLU0VHMUFERFIoVUFSVF9CQVNFKSArIChvZmZzZXQpKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVI3CisjaW5jbHVkZSA8YXI3Lmg+CisjZGVmaW5lIFBPUlQob2Zmc2V0KSAoQ0tTRUcxQUREUihBUjdfUkVHU19VQVJUMCkgKyAoNCAqIG9mZnNldCkpCisjZW5kaWYKKworI2lmbmRlZiBQT1JUCisjZXJyb3IgcGxlYXNlIGRlZmluZSB0aGUgc2VyaWFsIHBvcnQgYWRkcmVzcyBmb3IgeW91ciBvd24gbWFjaGluZQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9pbihpbnQgb2Zmc2V0KQoreworCXJldHVybiAqKChjaGFyICopUE9SVChvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbF9vdXQoaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCSooKGNoYXIgKilQT1JUKG9mZnNldCkpID0gdmFsdWU7Cit9CisKK3ZvaWQgcHV0YyhjaGFyIGMpCit7CisJaW50IHRpbWVvdXQgPSAxMDI0OworCisJd2hpbGUgKCgoc2VyaWFsX2luKFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RIUkUpID09IDApICYmICh0aW1lb3V0LS0gPiAwKSkKKwkJOworCisJc2VyaWFsX291dChVQVJUX1RYLCBjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKaW5kZXggMTM5NDM2Mi4uM2U5ODc2MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IENhdml1bSBOZXR3b3JrcwogIwogCi1vYmoteSA6PSBzZXR1cC5vIHNlcmlhbC5vIG9jdGVvbi1wbGF0Zm9ybS5vIG9jdGVvbi1pcnEubyBjc3JjLW9jdGVvbi5vCitvYmoteSA6PSBjcHUubyBzZXR1cC5vIHNlcmlhbC5vIG9jdGVvbi1wbGF0Zm9ybS5vIG9jdGVvbi1pcnEubyBjc3JjLW9jdGVvbi5vCiBvYmoteSArPSBkbWEtb2N0ZW9uLm8gZmxhc2hfc2V0dXAubwogb2JqLXkgKz0gb2N0ZW9uLW1lbWNweS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NwdS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZjUzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NwdS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLAorICogICB3cml0dGVuIGJ5IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL2NvcDIuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KKworc3RhdGljIGludCBjbm1pcHNfY3UyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCXZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENVMl9FWENFUFRJT046CisJCXByZWZldGNoKCZjdXJyZW50LT50aHJlYWQuY3AyKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlLU1RLX1NUQVRVUyhjdXJyZW50KSB8PSBTVDBfQ1UyOworCQlzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOworCQl3cml0ZV9jMF9zdGF0dXMoc3RhdHVzIHwgU1QwX0NVMik7CisJCW9jdGVvbl9jb3AyX3Jlc3RvcmUoJihjdXJyZW50LT50aHJlYWQuY3AyKSk7CisJCXdyaXRlX2MwX3N0YXR1cyhzdGF0dXMgJiB+U1QwX0NVMik7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlyZXR1cm4gTk9USUZZX0JBRDsJLyogRG9uJ3QgY2FsbCBkZWZhdWx0IG5vdGlmaWVyICovCisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsJCS8qIExldCBkZWZhdWx0IG5vdGlmaWVyIHNlbmQgc2lnbmFscyAqLworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNubWlwc19jdTJfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjbm1pcHNfY3UyX2NhbGwsCit9OworCitzdGF0aWMgaW50IGNubWlwc19jdTJfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfY3UyX25vdGlmaWVyKCZjbm1pcHNfY3UyX25vdGlmaWVyKTsKK30KK2Vhcmx5X2luaXRjYWxsKGNubWlwc19jdTJfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwppbmRleCBiZTcxMWRkLi5jZmRiNGMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwpAQCAtMTU5LDYgKzE1OSw5NCBAQAogfQogZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9ybmdfZGV2aWNlX2luaXQpOwogCisvKiBPY3Rlb24gU01JL01ESU8gaW50ZXJmYWNlLiAgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZGlvYnVzX2RldmljZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAob2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKKwkJcmV0dXJuIDA7IC8qIE5vIG1kaW8gaW4gdGhlIHNpbXVsYXRvci4gKi8KKworCS8qIFRoZSBidXMgbnVtYmVyIGlzIHRoZSBwbGF0Zm9ybV9kZXZpY2UgaWQuICAqLworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJtZGlvLW9jdGVvbiIsIDApOworCWlmICghcGQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJcmV0dXJuIHJldDsKK2ZhaWw6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworCit9CitkZXZpY2VfaW5pdGNhbGwob2N0ZW9uX21kaW9idXNfZGV2aWNlX2luaXQpOworCisvKiBPY3Rlb24gbWdtdCBwb3J0IEV0aGVybmV0IGludGVyZmFjZS4gICovCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fbWdtdF9kZXZpY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCWludCByZXQgPSAwOworCWludCBwb3J0LCBudW1fcG9ydHM7CisKKwlzdHJ1Y3QgcmVzb3VyY2UgbWdtdF9wb3J0X3Jlc291cmNlID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gLTEsCisJCS5lbmQJPSAtMQorCX07CisKKwlpZiAoIU9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKSAmJiAhT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpKQorCQlyZXR1cm4gMDsKKworCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkpCisJCW51bV9wb3J0cyA9IDE7CisJZWxzZQorCQludW1fcG9ydHMgPSAyOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IG51bV9wb3J0czsgcG9ydCsrKSB7CisJCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJvY3Rlb25fbWdtdCIsIHBvcnQpOworCQlpZiAoIXBkKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoKKwkJCW1nbXRfcG9ydF9yZXNvdXJjZS5zdGFydCA9IE9DVEVPTl9JUlFfTUlJMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQltZ210X3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSBPQ1RFT05fSVJRX01JSTE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJCW1nbXRfcG9ydF9yZXNvdXJjZS5lbmQgPSBtZ210X3BvcnRfcmVzb3VyY2Uuc3RhcnQ7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGQsICZtZ210X3BvcnRfcmVzb3VyY2UsIDEpOworCisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybiByZXQ7CitmYWlsOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKKworfQorZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9tZ210X2RldmljZV9pbml0KTsKKwogTU9EVUxFX0FVVEhPUigiRGF2aWQgRGFuZXkgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBsYXRmb3JtIGRyaXZlciBmb3IgT2N0ZW9uIFNPQyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2FyN19kZWZjb25maWcKaW5kZXggMzU2NDgzMC4uNWE1YjZiYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYXI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hcjdfZGVmY29uZmlnCkBAIC0xMCw3ICsxMCw2IEBACiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAogQ09ORklHX0FSNz15Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTI2NSw3ICsyNjQsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotQ09ORklHX1BST0JFX0lOSVRSRF9IRUFERVI9eQogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTMsNyArMTA1MSw5IEBACiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9InJvb3Rmc3R5cGU9c3F1YXNoZnMsamZmczIiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnCmluZGV4IDk0YjdkNTcuLjI2N2JkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogQ09ORklHX0JDTTQ3WFg9eQogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTE4NTMsNyArMTg1Miw3IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2JjbTYzeHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNjN4eF9kZWZjb25maWcKaW5kZXggZWEwMGMxOC4uN2ZlZTAyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNjN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNjN4eF9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKIENPTkZJR19CQ002M1hYPXkKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKQEAgLTk0Miw3ICs5NDEsOSBAQAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCmluZGV4IDEzZDllYjQuLmMyZjA2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTEyMzcsNyArMTIzNiw3IEBACiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0IxWFhYX0NPUkVMSVMgaXMgbm90IHNldAogIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKaW5kZXggMTg1ZGYyMy4uNzJiN2U0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtNzgzLDcgKzc4Miw5IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlWUjAsMzg0MDAiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jYXZpdW0tb2N0ZW9uX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2Nhdml1bS1vY3Rlb25fZGVmY29uZmlnCmluZGV4IDdhZmFhMjguLmM4NTA3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2Nhdml1bS1vY3Rlb25fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2Nhdml1bS1vY3Rlb25fZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtMjY5LDcgKzI2OCw2IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgogQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1BST0JFX0lOSVRSRF9IRUFERVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTgyMiw3ICs4MjAsNyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwppbmRleCA2YzhjY2E4Li40OWU2MTMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0NPQkFMVD15CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtMTEyNiw3ICsxMTI1LDcgQEAKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwppbmRleCBkYmRmM2JiLi42OGU5MGNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKQEAgLTIzLDcgKzIzLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMDkwLDcgKzEwODksNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IGZhNjgxNDQuLjkwODEyODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEwOTAsNyArMTA4OSw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKaW5kZXggZDczZjFkZS4uZGFiZjAzMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCkBAIC0yMyw3ICsyMyw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19EQjEyMDA9eQogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTExNzIsNyArMTE3MSw5IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0ibWVtPTQ4TSIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IGVjM2UwMjhhLi5hMTUxMzEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTIzLDcgKzIzLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMzkwLDcgKzEzODksNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCmluZGV4IDc2MzFkYWUuLjZiNjQzMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogQ09ORklHX01JUFNfREIxNTUwPXkKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMjA3LDcgKzEyMDYsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKaW5kZXggOWU2NWU2YS4uY2JiNGQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogQ09ORklHX01BQ0hfREVDU1RBVElPTj15CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtODgyLDcgKzg4MSw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKaW5kZXggMWJkODRkNC4uNTI5NjhjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC01NjEsNyArNTYwLDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlWUjAsMTkyMDAgaWRlMD0weDFmMCwweDNmNiw0MCBtZW09OE0iCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk5NWQ0My4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozMSAyMDA3Ci0jCi1DT05GSUdfTUlQUz15Ci0KLSMKLSMgTWFjaGluZSBzZWxlY3Rpb24KLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTTEVSX0VYQ0lURT15Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFX1BST1RPVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0Ci1DT05GSUdfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19DUFVfQklHX0VORElBTj15Ci0jIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQotQ09ORklHX0lSUV9DUFU9eQotQ09ORklHX0lSUV9DUFVfUk03Sz15Ci1DT05GSUdfSVJRX0NQVV9STTlLPXkKLUNPTkZJR19NSVBTX1JNOTEyMj15Ci1DT05GSUdfU0VSSUFMX1JNOTAwMD15Ci1DT05GSUdfR1BJX1JNOTAwMD15Ci1DT05GSUdfV0RUX1JNOTAwMD15Ci1DT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01Ci0KLSMKLSMgQ1BVIHNlbGVjdGlvbgotIwotIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAotQ09ORklHX0NQVV9STTkwMDA9eQotIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfUk05MDAwPXkKLUNPTkZJR19XRUFLX09SREVSSU5HPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLQotIwotIyBLZXJuZWwgdHlwZQotIwotQ09ORklHXzMyQklUPXkKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX1NJWkVfNEtCPXkKLSMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQotQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfU1lOQz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi0jIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQotIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BSRUVNUFRfQktMPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKLSMKLUNPTkZJR19IV19IQVNfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCi0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFEX1NJR05BTFM9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1RHVD1tCi0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQVNfQVRUUlM9bQotQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCi0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0FJQzk0WFg9bQotIyBDT05GSUdfQUlDOTRYWF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCi0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCi0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9bQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPW0KLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1dEVF9STTlLX0dQST1tCi0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU01JVkdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT1tCi0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1VTQl9FSENJX0hDRD15Ci0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotCi0jCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQotIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19YQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZwppbmRleCAwMTk3ZjBkLi5hMDlkZDAzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMxCi0jIFRodSBKdWwgIDIgMjI6Mzc6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBGcmkgT2N0IDE2IDEzOjE4OjAxIDIwMDkKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTAsOCArMTAsOCBAQAogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEwNSw2ICsxMDUsOCBAQAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTA9eQogQ09ORklHX0NQVV9MT09OR1NPTjI9eQogQ09ORklHX1NZU19IQVNfQ1BVX0xPT05HU09OMkU9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQpAQCAtMTM1LDEyICsxMzcsMTYgQEAKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKworIworIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAorIwogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQEAgLTE0OCw2ICsxNTQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQpAQCAtMTgwLDYgKzE4NywxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWZ1bG9vbmcyZSIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC0xOTMsMTEgKzIwNiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTY0CisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMjM1LDE4ICsyNDksMTYgQEAKIENPTkZJR19BSU89eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQpAQCAtMjU1LDggKzI2Nyw4IEBACiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMjgzLDcgKzI5NSw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKQEAgLTMyMSw5ICszMzMsMTQgQEAKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19ISUJFUk5BVElPTl9OVlM9eQorQ09ORklHX0hJQkVSTkFUSU9OPXkKK0NPTkZJR19QTV9TVERfUEFSVElUSU9OPSIvZGV2L2hkYTMiCisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQorQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKQEAgLTQ0Miw2ICs0NTksNyBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDczLDYgKzQ5MSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00ODEsNyArNTAwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUXzlQPW0KQEAgLTQ5NSw2ICs1MTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01MDQsOSArNTIzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPW0KICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC04MjAsNiArODM5LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC04NjcsMTAgKzg4Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg4Niw2ICs5MDMsNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC05MzMsMTIgKzk1MSwxNiBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQpAQCAtOTQ2LDYgKzk2OCw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD15CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKQEAgLTEwMTUsNiArMTAzOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA3MCw5ICsxMDk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDg4LDcgKzExMDksNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTEwNSw2ICsxMTI1LDcgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTE0LDYgKzExMzUsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTgsNiArMTIyMCw3IEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC0xMzA0LDcgKzEzMjcsNiBAQAogQ09ORklHX0FDOTdfQlVTPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSElEUkFXPXkKIAogIwpAQCAtMTM1Niw2ICsxMzc4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTc2MF9IQ0Q9bQorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xNDUzLDYgKzE0NzYsNyBAQAogIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU9fQUVDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBpcyBub3Qgc2V0CiAKICMKICMgVEkgVkxZTlEKQEAgLTE0NjksMTAgKzE0OTMsMTAgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPW0KLUNPTkZJR19FWFQ0REVWX0NPTVBBVD15CiBDT05GSUdfRVhUNF9GU19YQVRUUj15CiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfWElQPXkKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0ODksNiArMTUxMyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTU3LDcgKzE1ODIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CkBAIC0xNjY2LDYgKzE2OTAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY3OCwxMyArMTcwMywxNCBAQAogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNzQyLDExICsxNzY4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9bQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKaW5kZXggZjE0ZDM4Yi4uMjIyZDdlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMTg4LDcgKzExODcsNyBAQAogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHPXkKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggMWZjNzNhYS4uZWQ4NGI0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTk0MCw3ICs5MzksNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnCmluZGV4IDUzOWRjY2IuLmRhYjJlNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtODE2LDcgKzgxNSw3IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKaW5kZXggZDkzNGJkZS4uMTg0MWM4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMTI2LDcgKzExMjUsNyBAQAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvamF6el9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZwppbmRleCBkMjJkZjYxLi4xNGMyYWIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogQ09ORklHX01BQ0hfSkFaWj15CkBAIC0xMzc0LDcgKzEzNzMsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKaW5kZXggNTM4MGYxZi4uNGQ2NmM0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC04MzUsNyArODM0LDcgQEAKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0X2RlZmNvbmZpZwppbmRleCAwNDQwNzRkLi4wOGQ0ODFlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sYXNhdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXRfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC03OTgsNyArNzk3LDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWEwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKQEAgLTAsMCArMSwxODM1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2CisjIE1vbiBOb3YgIDkgMjM6NDI6NDIgMjAwOQorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCisjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0xPT05HU09OPXkKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CisjIENPTkZJR19MRU1PVEVfRlVMT09ORzJFIGlzIG5vdCBzZXQKK0NPTkZJR19MRU1PVEVfTUFDSDJGPXkKK0NPTkZJR19DUzU1MzY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NFVlRfUjRLPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorQ09ORklHX0k4MjU5PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfQk9PVF9FTEYzMj15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9MT09OR1NPTjJGPXkKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MD15CitDT05GSUdfQ1BVX0xPT05HU09OMj15CitDT05GSUdfU1lTX0hBU19DUFVfTE9PTkdTT04yRj15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKKyMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKK0NPTkZJR182NEJJVD15CisjIENPTkZJR19QQUdFX1NJWkVfNEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV8xNktCPXkKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9TQ0FDSEU9eQorQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQorIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1dCPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisKKyMKKyMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKKyMKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTI1MAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKK0NPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQorIworQ09ORklHX0hXX0hBU19QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CitDT05GSUdfSVNBPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTMzJfQ09NUEFUPXkKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19NSVBTMzJfTzMyPXkKK0NPTkZJR19NSVBTMzJfTjMyPXkKK0NPTkZJR19CSU5GTVRfRUxGMzI9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0hJQkVSTkFUSU9OX05WUz15CitDT05GSUdfSElCRVJOQVRJT049eQorQ09ORklHX1BNX1NURF9QQVJUSVRJT049Ii9kZXYvaGRhMyIKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KK0NPTkZJR19UQ1BfQ09OR19IVENQPW0KKyMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0hZQkxBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1ZFR0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0xQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1ZFTk8gaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfWUVBSCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9CSUM9eQorIyBDT05GSUdfREVGQVVMVF9DVUJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0hUQ1AgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9WRUdBUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1dFU1RXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfUkVOTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iYmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfU0VDTUFSSz15CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCisjIENPTkZJR19ORVRfU0NIX0NCUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1RCRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0dSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0RSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0lOR1JFU1MgaXMgbm90IHNldAorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfVENJTkRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUlNWUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JTVlA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VNQVRDSD15CitDT05GSUdfTkVUX0VNQVRDSF9TVEFDSz0zMgorIyBDT05GSUdfTkVUX0VNQVRDSF9DTVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9OQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIX01FVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9URVhUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX0FDVD15CisjIENPTkZJR19ORVRfQUNUX1BPTElDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX0dBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9NSVJSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9OQVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9QRURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9TS0JFRElUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorQ09ORklHX1JGS0lMTD1tCisjIENPTkZJR19SRktJTExfSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfVElNSU5HUz15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9BTUQ3NFhYPXkKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorCisjCisjIE90aGVyIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisKKyMKKyMgTm90ZTogbW9zdCBvZiB0aGVzZSBhbHNvIHJlcXVpcmUgc3BlY2lhbCBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzREUklWRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFRDMjI3OCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hUNjU2MEIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9RRDY1WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUM4NjcyIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0lGQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAorIyBDT05GSUdfVEMzNTgxNSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPTz15CisjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQorIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CitDT05GSUdfUjgxNjk9eQorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CitDT05GSUdfV0xBTl9QUkU4MDIxMT15CisjIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9QUzJfQUxQUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE2CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX0ZPVVJQT1JUPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0FDQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9CT0NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYQVJfU1QxNkM1NTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfSFVCNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorQ09ORklHX1JUQz15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfU1VQUE9SVD1tCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KK0NPTkZJR19WSURFT19BTExPV19WNEwxPXkKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorQ09ORklHX1VTQl9WSURFT19DTEFTUz1tCitDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKK0NPTkZJR19VU0JfR1NQQ0E9bQorIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVklDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lCTUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS09OSUNBV0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1FVSUNLQ0FNX01FU1NFTkdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVQ2MVgyNTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CisjIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQVJCPXkKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQ9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorQ09ORklHX0ZCX1NJUz15CitDT05GSUdfRkJfU0lTXzMwMD15CitDT05GSUdfRkJfU0lTXzMxNT15CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKKyMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0ZPTlRfNngxMT15CitDT05GSUdfRk9OVF83eDE0PXkKK0NPTkZJR19GT05UX1BFQVJMXzh4OD15CitDT05GSUdfRk9OVF9BQ09STl84eDg9eQorQ09ORklHX0ZPTlRfTUlOSV80eDY9eQorQ09ORklHX0ZPTlRfU1VOOHgxNj15CitDT05GSUdfRk9OVF9TVU4xMngyMj15CitDT05GSUdfRk9OVF8xMHgxOD15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD1tCisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorQ09ORklHX1NORF9DUzU1MzVBVURJTz1tCisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT1RHX1dISVRFTElTVD15CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1VTQl9VSENJX0hDRD1tCisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQUNNPW0KKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV0RNPW0KKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9bQorQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9bQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT1tCitDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9bQorQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworQ09ORklHX1NUQUdJTkc9eQorIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01FREkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODdTRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTkyU1UgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE5MkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKKworIworIyBBbmRyb2lkCisjCisKKyMKKyMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KKyMKKworIworIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgorIworIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19EU1QgaXMgbm90IHNldAorIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAorIyBDT05GSUdfQjNERkcgaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJTkU2X1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0gyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUNjY1NSBpcyBub3Qgc2V0CisjIENPTkZJR19WVDY2NTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVURMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRV9CVVMgaXMgbm90IHNldAorCisjCisjIFJBUiBSZWdpc3RlciBEcml2ZXIKKyMKKyMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU8gaXMgbm90IHNldAorQ09ORklHX0ZCX1NNN1hYPXkKK0NPTkZJR19GQl9TTTdYWF9BQ0NFTD15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0idXRmLTgiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggM2YwMTg3MC4uZDNjNjAxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNiBAQAogIwogQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTE1OTEsNyArMTU5MCw3IEBACiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYXJrZWluc19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYXJrZWluc19kZWZjb25maWcKaW5kZXggZDAwMWY3ZTguLjZhMzI1YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYXJrZWluc19kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMzY2LDcgKzEzNjUsOSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIG1lbT0xOTJtIGlwPWJvb3RwIHJvb3Q9L2Rldi9uZnMgcnciCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCmluZGV4IDczNTg0NTQuLmY3N2EzNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtNjM1LDcgKzYzNCw5IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9Im5mc3Jvb3Q9MTkyLjE2OC4xOTIuMTY5Oi91MS9taXBzZWwsdGltZW89MjAgaXA9ZGhjcCIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCmluZGV4IDhjNzIwZTUuLjE3MjAzMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtODE3LDcgKzgxNiw5IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlWUjAsMTkyMDAgaWRlMD0weDE3MCwweDM3Niw3MyIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21zcDcxeHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXNwNzF4eF9kZWZjb25maWcKaW5kZXggZWNiYzAzMC4uMDAwZDE4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXNwNzF4eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXNwNzF4eF9kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xNDEyLDcgKzE0MTEsNyBAQAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19VTkNBQ0hFRCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCmluZGV4IDk0NzdmMDQuLjE0NGI5NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMzAxOCw3ICszMDE3LDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKaW5kZXggYmU4MDkxZS4uZGRmNjdmNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCkBAIC0yMyw3ICsyMyw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTA4Myw3ICsxMDgyLDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCBlNzRiYTc5Li41ZWM2MDgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTIzLDcgKzIzLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMjAwLDcgKzExOTksNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IDFkODk2ZmQuLjY2NDc2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTExOTMsNyArMTE5Miw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODMzNS1zdGIyMjVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODMzNS1zdGIyMjVfZGVmY29uZmlnCmluZGV4IGZlZjRkMzEuLjg0ODM0NGQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4MzM1LXN0YjIyNV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODMzNS1zdGIyMjVfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtMTAzNCw3ICsxMDMzLDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFUk5FTF9URVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKaW5kZXggZTEwYzcxMS4uOWQ3MjFmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEyMTUsNyArMTIxNCw5IEBACiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMxLDM4NDAwbjggcm9vdD0vZGV2L25mcyBpcD1ib290cCIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZwppbmRleCA1ZWQzYzhkLi5hYjA3ZWMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1zdGI4MTBfZGVmY29uZmlnCkBAIC0yMiw3ICsyMiw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTIwNSw3ICsxMjA0LDkgQEAKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzEsMzg0MDBuOCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG93ZXJ0dl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wb3dlcnR2X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjkxNjMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG93ZXJ0dl9kZWZjb25maWcKQEAgLTAsMCArMSwxNTUwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM1CisjIEZyaSBBdWcgMjggMTQ6NDk6MzMgMjAwOQorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCisjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRU1PVEVfRlVMT05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJUVj15CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlOX1JVTlRJTUVfUkVTT1VSQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RMT0FERVJfRFJJVkVSIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UTE9BREVSX0ZBTUlMWT0iUjIiCitDT05GSUdfQ1NSQ19QT1dFUlRWPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DRVZUX1I0Sz15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfQklHX0VORElBTj15CisjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQorQ09ORklHX0JPT1RfRUxGMzI9eQorQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQorCisjCisjIENQVSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX01JUFMzMl9SMj15CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMj15CitDT05GSUdfQ1BVX01JUFMzMj15CitDT05GSUdfQ1BVX01JUFNSMj15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCitDT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CitDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CisjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CitDT05GSUdfQ1BVX01JUFNSMl9JUlFfVkk9eQorQ09ORklHX0NQVV9NSVBTUjJfSVJRX0VJPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX1JEX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUdOQUxGRCBpcyBub3Qgc2V0CitDT05GSUdfVElNRVJGRD15CisjIENPTkZJR19FVkVOVEZEIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfUFJPQkVfSU5JVFJEX0hFQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCitDT05GSUdfSFdfSEFTX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorQ09ORklHX0lQVjZfUFJJVkFDWT15CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPXkKK0NPTkZJR19JTkVUNl9FU1A9eQorQ09ORklHX0lORVQ2X0lQQ09NUD15CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9UVU5ORUw9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9UVU5ORUw9eQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorIyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD15CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfSVBUQUJMRVM9eQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRklMVEVSPXkKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0FSUFRBQkxFUz15CitDT05GSUdfSVBfTkZfQVJQRklMVEVSPXkKKyMgQ09ORklHX0lQX05GX0FSUF9NQU5HTEUgaXMgbm90IHNldAorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz15CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9ITCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfTUggaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9GSUxURVI9eQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfU1RQPXkKK0NPTkZJR19CUklER0U9eQorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPXkKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIRUQ9eQorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hfQ0JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfSFRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1BSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9SRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9TRlEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9URVFMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX1RCRj15CisjIENPTkZJR19ORVRfU0NIX0dSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0RSUiBpcyBub3Qgc2V0CisKKyMKKyMgQ2xhc3NpZmljYXRpb24KKyMKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19UQ0lOREVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfRlcgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19VMzIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUlNWUDYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1JUTDgxNTA9eQorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NFUklBTD15CitDT05GSUdfVVNCX1NFUklBTF9DT05TT0xFPXkKKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9DUDIxMFg9eQorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9eQorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9InJ3IGRoYXNoX2VudHJpZXM9MTAyNCBpaGFzaF9lbnRyaWVzPTEwMjQgaXA9MTAuMC4xLjM6MTAuMC4xLjE6MTAuMC4xLjE6MjU1LjI1NS4yNTUuMDp6ZXVzOmV0aDA6IHJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0vbmZzcm9vdC9jcmFtZnMsd3NpemU9NTEyLHJzaXplPTUxMix0Y3Agbm9rZ2RiIGNvbnNvbGU9dHR5VVNCMCwxMTUyMDAgbWVtc2l6ZT0yNTJNIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnCmluZGV4IGY0MGMzYTAuLjU3YTUwNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMjA0LDcgKzEyMDMsNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKaW5kZXggNmM2YTE5YS4uMjFjMjAyMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNiBAQAogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CkBAIC0yODQsNyArMjgzLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMDYzLDcgKzEwNjEsNyBAQAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggZTUzYjhkMC4uNzkwMzYyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTE2OTQsNyArMTY5Myw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKaW5kZXggN2YzOGMwYi4uN2YwN2JmMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtOTYxLDcgKzk2MCw3IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfU0IxWFhYX0NPUkVMSVMgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjE5X2RlZmNvbmZpZwppbmRleCBiNTA1OTg4Li5jNTRkMTEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC04OTIsNyArODkxLDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY2NhPTMgbWVtPTY0TSBjb25zb2xlPXR0eVZSMCwxMTUyMDAgaXA9YW55IHJvb3Q9L2Rldi9uZnMiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwppbmRleCBiMDZhNzE2Li5lN2M1Y2QzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC04OTUsNyArODk0LDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY2NhPTMgbWVtPTMyTSBjb25zb2xlPXR0eVZSMCwxMTUyMDAiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwppbmRleCA0NjUxMmNmLi5iNTAwMzJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMDc3LDcgKzEwNzYsOSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjY2E9MyBtZW09NjRNIGNvbnNvbGU9dHR5VlIwLDExNTIwMCBpcD1hbnkgcm9vdD0vZGV2L25mcyIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKaW5kZXggYjQzN2ViNy4uYzAyYmEwOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTc1NSw3ICs3NTQsOSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVZSMCwxOTIwMCBpZGUwPTB4MTcwLDB4Mzc2LDQ5IG1lbT0xNk0iCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwppbmRleCAwNmFjYzc0Li5hMzViYzQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC04ODcsNyArODg2LDkgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMG44IgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCmluZGV4IDY5ZmVhZjguLmUzZDY4ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC04MjQsNyArODIzLDcgQEAKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9mdy9hcmMvY21kbGluZS5jIGIvYXJjaC9taXBzL2Z3L2FyYy9jbWRsaW5lLmMKaW5kZXggNGNhNGVlZi4uNWM4NjAzYzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9mdy9hcmMvY21kbGluZS5jCisrKyBiL2FyY2gvbWlwcy9mdy9hcmMvY21kbGluZS5jCkBAIC0xNiwxMSArMTYsNiBAQAogCiAjdW5kZWYgREVCVUdfQ01ETElORQogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiBhcmNzX2NtZGxpbmU7Ci19Ci0KIHN0YXRpYyBjaGFyICppZ25vcmVkW10gPSB7CiAJIkNvbnNvbGVJbj0iLAogCSJDb25zb2xlT3V0PSIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYm9vdGluZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9ib290aW5mby5oCmluZGV4IGY1ZGZhZjYuLjA5ZWVlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9ib290aW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9ib290aW5mby5oCkBAIC02Nyw5ICs2Nyw5IEBACiAjZGVmaW5lIE1BQ0hfTEVNT1RFX01MMkY3ICAgICAgMwogI2RlZmluZSBNQUNIX0xFTU9URV9ZTDJGODkgICAgIDQKICNkZWZpbmUgTUFDSF9ERVhYT05fR0RJVU0yRjEwICA1Ci0jZGVmaW5lIE1BQ0hfTE9PTkdTT05fRU5EICAgICAgNgotCi0jZGVmaW5lIENMX1NJWkUJCQlDT01NQU5EX0xJTkVfU0laRQorI2RlZmluZSBNQUNIX0xFTU9URV9OQVMgICAgICAgIDYKKyNkZWZpbmUgTUFDSF9MRU1PVEVfTEwyRiAgICAgICA3CisjZGVmaW5lIE1BQ0hfTE9PTkdTT05fRU5EICAgICAgOAogCiBleHRlcm4gY2hhciAqc3lzdGVtX3R5cGU7CiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKIC8qCiAgKiBJbml0aWFsIGtlcm5lbCBjb21tYW5kIGxpbmUsIHVzdWFsbHkgc2V0dXAgYnkgcHJvbV9pbml0KCkKICAqLwotZXh0ZXJuIGNoYXIgYXJjc19jbWRsaW5lW0NMX1NJWkVdOworZXh0ZXJuIGNoYXIgYXJjc19jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKIAogLyoKICAqIFJlZ2lzdGVycyBhMCwgYTEsIGEzIGFuZCBhNCBhcyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBlbnRyeSBieSBmaXJtd2FyZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg5NGFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Nsb2NrLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfX0FTTV9NSVBTX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fTUlQU19DTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKK2V4dGVybiB2b2lkICgqY3B1X3dhaXQpICh2b2lkKTsKKworc3RydWN0IGNsazsKKworc3RydWN0IGNsa19vcHMgeworCXZvaWQgKCppbml0KSAoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkICgqZW5hYmxlKSAoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkICgqZGlzYWJsZSkgKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZCAoKnJlY2FsYykgKHN0cnVjdCBjbGsgKmNsayk7CisJaW50ICgqc2V0X3JhdGUpIChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50IGFsZ29faWQpOworCWxvbmcgKCpyb3VuZF9yYXRlKSAoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworfTsKKworc3RydWN0IGNsayB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlkOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCisJc3RydWN0IGNsayAqcGFyZW50OworCXN0cnVjdCBjbGtfb3BzICpvcHM7CisKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OworCisjZGVmaW5lIENMS19BTFdBWVNfRU5BQkxFRAkoMSA8PCAwKQorI2RlZmluZSBDTEtfUkFURV9QUk9QQUdBVEVTCSgxIDw8IDEpCisKKy8qIFNob3VsZCBiZSBkZWZpbmVkIGJ5IHByb2Nlc3Nvci1zcGVjaWZpYyBjb2RlICovCit2b2lkIGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqLCBpbnQgdHlwZSk7CisKK2ludCBjbGtfaW5pdCh2b2lkKTsKKworaW50IF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICopOwordm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKik7CisKK3ZvaWQgY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGsgKik7CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqKTsKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqKTsKKworLyogdGhlIGV4cG9ydGVkIEFQSSwgaW4gYWRkaXRpb24gdG8gY2xrX3NldF9yYXRlICovCisvKioKKyAqIGNsa19zZXRfcmF0ZV9leCAtIHNldCB0aGUgY2xvY2sgcmF0ZSBmb3IgYSBjbG9jayBzb3VyY2UsIHdpdGggYWRkaXRpb25hbCBwYXJhbWV0ZXIKKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICogQHJhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZSBpbiBIegorICogQGFsZ29faWQ6IGFsZ29yaXRobSBpZCB0byBiZSBwYXNzZWQgZG93biB0byBvcHMtPnNldF9yYXRlCisgKgorICogUmV0dXJucyBzdWNjZXNzICgwKSBvciBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IGNsa19zZXRfcmF0ZV9leChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50IGFsZ29faWQpOworCisjZW5kaWYJCQkJLyogX19BU01fTUlQU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29wMi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NvcDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA0Yzk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NvcDIuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcywKKyAqICAgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKi8KKyNpZm5kZWYgX19BU01fQ09QMl9ICisjZGVmaW5lIF9fQVNNX0NPUDJfSAorCitlbnVtIGN1Ml9vcHMgeworCUNVMl9FWENFUFRJT04sCisJQ1UyX0xXQzJfT1AsCisJQ1UyX0xEQzJfT1AsCisJQ1UyX1NXQzJfT1AsCisJQ1UyX1NEQzJfT1AsCit9OworCitleHRlcm4gaW50IHJlZ2lzdGVyX2N1Ml9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgY3UyX25vdGlmaWVyX2NhbGxfY2hhaW4odW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOworCisjZW5kaWYgLyogX19BU01fQ09QMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggNGI5NmQxYS4uY2YzNzNhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMTU0LDYgKzE1NCw4IEBACiAjZGVmaW5lIFBSSURfUkVWX1ZSNDE4MUEJMHgwMDcwCS8qIFNhbWUgYXMgVlI0MTIyICovCiAjZGVmaW5lIFBSSURfUkVWX1ZSNDEzMAkJMHgwMDgwCiAjZGVmaW5lIFBSSURfUkVWXzM0S19WMV8wXzIJMHgwMDIyCisjZGVmaW5lIFBSSURfUkVWX0xPT05HU09OMkUJMHgwMDAyCisjZGVmaW5lIFBSSURfUkVWX0xPT05HU09OMkYJMHgwMDAzCiAKIC8qCiAgKiBPbGRlciBwcm9jZXNzb3JzIHVzZWQgdG8gZW5jb2RlIHByb2Nlc3NvciB2ZXJzaW9uIGFuZCByZXZpc2lvbiBpbiB0d28KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3OTkwNjk0Li43YTZhMzVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0zMjYsNyArMzI2LDYgQEAKICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKQkJCVwKIAlkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKIAogLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZmNudGwuaAppbmRleCA3YzY2ODFhLi5lNDgyZmU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMTksNyArMTksNyBAQAogI2RlZmluZSBGQVNZTkMJCTB4MTAwMAkvKiBmY250bCwgZm9yIEJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIE9fTEFSR0VGSUxFCTB4MjAwMAkvKiBhbGxvdyBsYXJnZSBmaWxlIG9wZW5zICovCiAvKgotICogQmVmb3JlIExpbnV4IDIuNi4zMiBvbmx5IE9fRFNZTkMgc2VtYW50aWNzIHdlcmUgaW1wbGVtZW50ZWQsIGJ1dCB1c2luZworICogQmVmb3JlIExpbnV4IDIuNi4zMyBvbmx5IE9fRFNZTkMgc2VtYW50aWNzIHdlcmUgaW1wbGVtZW50ZWQsIGJ1dCB1c2luZwogICogdGhlIE9fU1lOQyBmbGFnLiAgV2UgY29udGludWUgdG8gdXNlIHRoZSBleGlzdGluZyBudW1lcmljYWwgdmFsdWUKICAqIGZvciBPX0RTWU5DIHNlbWFudGljcyBub3csIGJ1dCB1c2luZyB0aGUgY29ycmVjdCBzeW1ib2xpYyBuYW1lIGZvciBpdC4KICAqIFRoaXMgbmV3IHZhbHVlIGlzIHVzZWQgdG8gcmVxdWVzdCB0cnVlIFBvc2l4IE9fU1lOQyBzZW1hbnRpY3MuICBJdCBpcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IDhhM2VmMjQuLjdmY2VmOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTI4LDE1ICsyOCw3IEBACiBzdHJ1Y3Qgc2lnY29udGV4dDsKIHN0cnVjdCBzaWdjb250ZXh0MzI7CiAKLWV4dGVybiBhc21saW5rYWdlIGludCAoKnNhdmVfZnBfY29udGV4dCkoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci1leHRlcm4gYXNtbGlua2FnZSBpbnQgKCpyZXN0b3JlX2ZwX2NvbnRleHQpKHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOwotCi1leHRlcm4gYXNtbGlua2FnZSBpbnQgKCpzYXZlX2ZwX2NvbnRleHQzMikoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLWV4dGVybiBhc21saW5rYWdlIGludCAoKnJlc3RvcmVfZnBfY29udGV4dDMyKShzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOwotCiBleHRlcm4gdm9pZCBmcHVfZW11bGF0b3JfaW5pdF9mcHUodm9pZCk7Ci1leHRlcm4gaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci1leHRlcm4gaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CiBleHRlcm4gdm9pZCBfaW5pdF9mcHUodm9pZCk7CiBleHRlcm4gdm9pZCBfc2F2ZV9mcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBfcmVzdG9yZV9mcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1X2VtdWxhdG9yLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1X2VtdWxhdG9yLmgKaW5kZXggZTUxODk1Ny4uYWVjYWRhNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdV9lbXVsYXRvci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHVfZW11bGF0b3IuaApAQCAtMjUsMTcgKzI1LDI3IEBACiAKICNpbmNsdWRlIDxhc20vYnJlYWsuaD4KICNpbmNsdWRlIDxhc20vaW5zdC5oPgorI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAKIHN0cnVjdCBtaXBzX2ZwdV9lbXVsYXRvcl9zdGF0cyB7Ci0JdW5zaWduZWQgaW50IGVtdWxhdGVkOwotCXVuc2lnbmVkIGludCBsb2FkczsKLQl1bnNpZ25lZCBpbnQgc3RvcmVzOwotCXVuc2lnbmVkIGludCBjcDFvcHM7Ci0JdW5zaWduZWQgaW50IGNwMXhvcHM7Ci0JdW5zaWduZWQgaW50IGVycm9yczsKKwlsb2NhbF90IGVtdWxhdGVkOworCWxvY2FsX3QgbG9hZHM7CisJbG9jYWxfdCBzdG9yZXM7CisJbG9jYWxfdCBjcDFvcHM7CisJbG9jYWxfdCBjcDF4b3BzOworCWxvY2FsX3QgZXJyb3JzOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBtaXBzX2ZwdV9lbXVsYXRvcl9zdGF0cyBmcHVlbXVzdGF0czsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbWlwc19mcHVfZW11bGF0b3Jfc3RhdHMsIGZwdWVtdXN0YXRzKTsKKworI2RlZmluZSBNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKE0pCQkJCQlcCisJY3B1X2xvY2FsX3dyYXAoX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIoZnB1ZW11c3RhdHMpLk0pKQorCisjZWxzZQorI2RlZmluZSBNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKE0pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KIAogZXh0ZXJuIGludCBtaXBzX2RzZW11bChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbWlwc19pbnN0cnVjdGlvbiBpciwKIAl1bnNpZ25lZCBsb25nIGNwYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggNDBhOGMxNy4uMzk4NmNkOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMSArMSw5MCBAQAotLyogZW1wdHkgKi8KKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqLworCisjaWZuZGVmIF9BU01fTUlQU19GVFJBQ0VfSAorI2RlZmluZSBfQVNNX01JUFNfRlRSQUNFX0gKKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKworI2RlZmluZSBNQ09VTlRfQUREUiAoKHVuc2lnbmVkIGxvbmcpKF9tY291bnQpKQorI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFIDQJCS8qIHNpemVvZiBtY291bnQgY2FsbCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgX21jb3VudCh2b2lkKTsKKyNkZWZpbmUgbWNvdW50IF9tY291bnQKKworI2RlZmluZSBzYWZlX2xvYWQobG9hZCwgc3JjLCBkc3QsIGVycm9yKQkJXAorZG8gewkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgJCQkJCVwKKwkJIjE6ICIgbG9hZCAiICVbIiBTVFIoZHN0KSAiXSwgMCglWyIgU1RSKHNyYykgIl0pXG4iXAorCQkiICAgbGkgJVsiIFNUUihlcnJvcikgIl0sIDBcbiIJCVwKKwkJIjI6XG4iCQkJCQlcCisJCQkJCQkJXAorCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIJCVwKKwkJIjM6IGxpICVbIiBTVFIoZXJyb3IpICJdLCAxXG4iCQlcCisJCSIgICBqIDJiXG4iCQkJCVwKKwkJIi5wcmV2aW91c1xuIgkJCQlcCisJCQkJCQkJXAorCQkiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IglcCisJCVNUUihQVFIpICJcdDFiLCAzYlxuXHQiCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCVwKKwkJCQkJCQlcCisJCTogW2RzdF0gIj0mciIgKGRzdCksIFtlcnJvcl0gIj1yIiAoZXJyb3IpXAorCQk6IFtzcmNdICJyIiAoc3JjKQkJCVwKKwkJOiAibWVtb3J5IgkJCQlcCisJKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNhZmVfc3RvcmUoc3RvcmUsIHNyYywgZHN0LCBlcnJvcikJXAorZG8gewkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKAkJCQlcCisJCSIxOiAiIHN0b3JlICIgJVsiIFNUUihzcmMpICJdLCAwKCVbIiBTVFIoZHN0KSAiXSlcbiJcCisJCSIgICBsaSAlWyIgU1RSKGVycm9yKSAiXSwgMFxuIglcCisJCSIyOlxuIgkJCQlcCisJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsIFwiYXhcIlxuIglcCisJCSIzOiBsaSAlWyIgU1RSKGVycm9yKSAiXSwgMVxuIglcCisJCSIgICBqIDJiXG4iCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJXAorCQkJCQkJXAorCQkiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IlwKKwkJU1RSKFBUUikgIlx0MWIsIDNiXG5cdCIJCVwKKwkJIi5wcmV2aW91c1xuIgkJCVwKKwkJCQkJCVwKKwkJOiBbZXJyb3JdICI9ciIgKGVycm9yKQkJXAorCQk6IFtkc3RdICJyIiAoZHN0KSwgW3NyY10gInIiIChzcmMpXAorCQk6ICJtZW1vcnkiCQkJXAorCSk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNhZmVfbG9hZF9jb2RlKGRzdCwgc3JjLCBlcnJvcikgXAorCXNhZmVfbG9hZChTVFIobHcpLCBzcmMsIGRzdCwgZXJyb3IpCisjZGVmaW5lIHNhZmVfc3RvcmVfY29kZShzcmMsIGRzdCwgZXJyb3IpIFwKKwlzYWZlX3N0b3JlKFNUUihzdyksIHNyYywgZHN0LCBlcnJvcikKKworI2RlZmluZSBzYWZlX2xvYWRfc3RhY2soZHN0LCBzcmMsIGVycm9yKSBcCisJc2FmZV9sb2FkKFNUUihQVFJfTCksIHNyYywgZHN0LCBlcnJvcikKKworI2RlZmluZSBzYWZlX3N0b3JlX3N0YWNrKHNyYywgZHN0LCBlcnJvcikgXAorCXNhZmVfc3RvcmUoU1RSKFBUUl9TKSwgc3JjLCBkc3QsIGVycm9yKQorCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyOworfQorCitzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlIHsKK307CisKKyNlbmRpZiAvKiAgQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLworI2VuZGlmIC8qIF9BU01fTUlQU19GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDA5YjA4ZDAuLjA2OTYwMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTExMywzNiArMTEzLDExIEBACiAKICNlbmRpZgogCi0vKgotICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCi0gKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKLSAqIGhhbmRsZXJzKS4KLSAqCi0gKiBJZGVhbGx5IHRoZXJlIHNob3VsZCBiZSBhd2F5IHRvIGdldCB0aGlzIGludG8ga2VybmVsL2lycS9oYW5kbGUuYyB0bwotICogYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGEgY2FsbCBmb3IganVzdCBhIHRpbnkgZnVuY3Rpb24gLi4uCi0gKi8KLSNkZWZpbmUgZG9fSVJRKGlycSkJCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpcnFfZW50ZXIoKTsJCQkJCQkJXAotCV9fRE9fSVJRX1NNVENfSE9PSyhpcnEpOwkJCQkJXAotCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwkJCQkJXAotCWlycV9leGl0KCk7CQkJCQkJCVwKLX0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBkb19JUlEodW5zaWduZWQgaW50IGlycSk7CiAKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDX0lSUUFGRgotLyoKLSAqIFRvIGF2b2lkIGluZWZmaWNpZW50IGFuZCBpbiBzb21lIGNhc2VzIHBhdGhvbG9naWNhbCByZS1jaGVja2luZyBvZgotICogSVJRIGFmZmluaXR5LCB3ZSBoYXZlIHRoaXMgdmFyaWFudCB0aGF0IHNraXBzIHRoZSBhZmZpbml0eSBjaGVjay4KLSAqLwogCi0KLSNkZWZpbmUgZG9fSVJRX25vX2FmZmluaXR5KGlycSkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlycV9lbnRlcigpOwkJCQkJCQlcCi0JX19OT19BRkZJTklUWV9JUlFfU01UQ19IT09LKGlycSk7CQkJCVwKLQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsJCQkJCVwKLQlpcnFfZXhpdCgpOwkJCQkJCQlcCi19IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZG9fSVJRX25vX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpOwogCiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQ19JUlFBRkYgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDcxMDRjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICovCi0jaWZuZGVmIF9fQVNNX01BQ0hfRVhDSVRFX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICi0jZGVmaW5lIF9fQVNNX01BQ0hfRVhDSVRFX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICi0KLS8qCi0gKiBCYXNsZXIgZVhjaXRlIGhhcyBhbiBSTTkxMjIgcHJvY2Vzc29yLgotICovCi0jZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKLSNkZWZpbmUgY3B1X2hhc19taXBzMTYJCTAKLSNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMAotI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAotI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCi0jZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKLSNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkxCi0jZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkwCi0jZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKLQotI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKLSNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCi0jZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkwCi0jZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCi0jZGVmaW5lIGNwdV9oYXNfZHNwCQkwCi0jZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkwCi0jZGVmaW5lIGNwdV9oYXNfbWlwc210CQkwCi0jZGVmaW5lIGNwdV9oYXNfdXNlcmxvY2FsCTAKLQotI2RlZmluZSBjcHVfaGFzX25vZnB1ZXgJCTAKLSNkZWZpbmUgY3B1X2hhc182NGJpdHMJCTEKLQotI2RlZmluZSBjcHVfaGFzX21pcHMzMnIxCTAKLSNkZWZpbmUgY3B1X2hhc19taXBzMzJyMgkwCi0jZGVmaW5lIGNwdV9oYXNfbWlwczY0cjEJMAotI2RlZmluZSBjcHVfaGFzX21pcHM2NHIyCTAKLQotI2RlZmluZSBjcHVfaGFzX2luY2x1c2l2ZV9wY2FjaGVzCTAKLQotI2RlZmluZSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpCTMyCi0jZGVmaW5lIGNwdV9pY2FjaGVfbGluZV9zaXplKCkJMzIKLSNkZWZpbmUgY3B1X3NjYWNoZV9saW5lX3NpemUoKQkzMgotCi0jZW5kaWYgLyogX19BU01fTUFDSF9FWENJVEVfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9leGNpdGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9leGNpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyOWJhNC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvZXhjaXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotI2lmbmRlZiBfX0VYQ0lURV9IX18KLSNkZWZpbmUgX19FWENJVEVfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0jZGVmaW5lIEVYQ0lURV9DUFVfRVhUX0NMT0NLIDEwMDAwMDAwMAotCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotdm9pZCBfX2luaXQgZXhjaXRlX2tnZGJfaW5pdCh2b2lkKTsKLXZvaWQgZXhjaXRlX3Byb2Nmc19pbml0KHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKLWV4dGVybiBjaGFyIG1vZGV0dHlbXTsKLWV4dGVybiB1MzIgdW5pdF9pZDsKLSNlbmRpZgotCi0vKiBCYXNlIG5hbWUgZm9yIFhJQ0FQIGRldmljZXMgKi8KLSNkZWZpbmUgWElDQVBfTkFNRQkieGljYXBfZ3BpIgotCi0vKiBPQ0QgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBMS0IwCQkweDAwMzgKLSNkZWZpbmUgTEtCNQkJMHgwMTI4Ci0jZGVmaW5lIExLTTUJCTB4MDEyQwotI2RlZmluZSBMS0I3CQkweDAxMzgKLSNkZWZpbmUgTEtNNwkJMHgwMTNjCi0jZGVmaW5lIExLQjgJCTB4MDE0MAotI2RlZmluZSBMS004CQkweDAxNDQKLSNkZWZpbmUgTEtCOQkJMHgwMTQ4Ci0jZGVmaW5lIExLTTkJCTB4MDE0YwotI2RlZmluZSBMS0IxMAkJMHgwMTUwCi0jZGVmaW5lIExLTTEwCQkweDAxNTQKLSNkZWZpbmUgTEtCMTEJCTB4MDE1OAotI2RlZmluZSBMS00xMQkJMHgwMTVjCi0jZGVmaW5lIExLQjEyCQkweDAxNjAKLSNkZWZpbmUgTEtNMTIJCTB4MDE2NAotI2RlZmluZSBMS0IxMwkJMHgwMTY4Ci0jZGVmaW5lIExLTTEzCQkweDAxNmMKLSNkZWZpbmUgTERQMAkJMHgwMjAwCi0jZGVmaW5lIExEUDEJCTB4MDIxMAotI2RlZmluZSBMRFAyCQkweDAyMjAKLSNkZWZpbmUgTERQMwkJMHgwMjMwCi0jZGVmaW5lIElOVFBJTjAJCTB4MEE0MAotI2RlZmluZSBJTlRQSU4xCQkweDBBNDQKLSNkZWZpbmUgSU5UUElOMgkJMHgwQTQ4Ci0jZGVmaW5lIElOVFBJTjMJCTB4MEE0QwotI2RlZmluZSBJTlRQSU40CQkweDBBNTAKLSNkZWZpbmUgSU5UUElONQkJMHgwQTU0Ci0jZGVmaW5lIElOVFBJTjYJCTB4MEE1OAotI2RlZmluZSBJTlRQSU43CQkweDBBNUMKLQotCi0KLQotLyogVElUQU4gcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBDUFJSCQkweDAwMDQKLSNkZWZpbmUgQ1BEU1IJCTB4MDAwOAotI2RlZmluZSBDUFRDMFIJCTB4MDAwYwotI2RlZmluZSBDUFRDMVIJCTB4MDAxMAotI2RlZmluZSBDUENGRzAJCTB4MDAyMAotI2RlZmluZSBDUENGRzEJCTB4MDAyNAotI2RlZmluZSBDUERTVDBBCQkweDAwMjgKLSNkZWZpbmUgQ1BEU1QwQgkJMHgwMDJjCi0jZGVmaW5lIENQRFNUMUEJCTB4MDAzMAotI2RlZmluZSBDUERTVDFCCQkweDAwMzQKLSNkZWZpbmUgQ1BYRFNUQQkJMHgwMDM4Ci0jZGVmaW5lIENQWERTVEIJCTB4MDAzYwotI2RlZmluZSBDUFhDSVNSQQkweDAwNDgKLSNkZWZpbmUgQ1BYQ0lTUkIJMHgwMDRjCi0jZGVmaW5lIENQR0lHMEVSCTB4MDA1MAotI2RlZmluZSBDUEdJRzFFUgkweDAwNTQKLSNkZWZpbmUgQ1BHUldMCQkweDAwNjgKLSNkZWZpbmUgQ1BVUlNMTVQJMHgwMGY4Ci0jZGVmaW5lIFVBQ0ZHCQkweDAyMDAKLSNkZWZpbmUgVUFJTlRTCQkweDAyMDQKLSNkZWZpbmUgU0RSWEZDSUUJMHg0ODI4Ci0jZGVmaW5lIFNEVFhGQ0lFCTB4NDkyOAotI2RlZmluZSBJTlRQMFN0YXR1czAJMHgxQjAwCi0jZGVmaW5lIElOVFAwTWFzazAJMHgxQjA0Ci0jZGVmaW5lIElOVFAwU2V0MAkweDFCMDgKLSNkZWZpbmUgSU5UUDBDbGVhcjAJMHgxQjBDCi0jZGVmaW5lIEdYQ0ZHCQkweDUwMDAKLSNkZWZpbmUgR1hETUFEUlBGWAkweDUwMTgKLSNkZWZpbmUgR1hETUFfREVTQ0FEUgkweDUwMWMKLSNkZWZpbmUgR1hDSDBUREVTU1RSVAkweDUwNTQKLQotLyogSVJRIGRlZmluaXRpb25zICovCi0jZGVmaW5lIE5NSUNPTkZJRwkJMHhhYzAKLSNkZWZpbmUgVElUQU5fTVNHSU5UCTB4YzQKLSNkZWZpbmUgVElUQU5fSVJRCSgoVElUQU5fTVNHSU5UIC8gMHgyMCkgKyAyKQotI2RlZmluZSBGUEdBMF9NU0dJTlQJMHg1YQotI2RlZmluZSBGUEdBMF9JUlEJKChGUEdBMF9NU0dJTlQgLyAweDIwKSArIDIpCi0jZGVmaW5lIEZQR0ExX01TR0lOVAkweDdiCi0jZGVmaW5lIEZQR0ExX0lSUQkoKEZQR0ExX01TR0lOVCAvIDB4MjApICsgMikKLSNkZWZpbmUgUEhZX01TR0lOVAkweDljCi0jZGVmaW5lIFBIWV9JUlEJCSgoUEhZX01TR0lOVCAgIC8gMHgyMCkgKyAyKQotCi0jaWYgZGVmaW5lZChDT05GSUdfQkFTTEVSX0VYQ0lURV9QUk9UT1RZUEUpCi0vKiBQcmUtcmVsZWFzZSB1bml0cyB1c2VkIGludGVycnVwdCBwaW4gIzkgKi8KLSNkZWZpbmUgVVNCX0lSUQkJMTEKLSNlbHNlCi0vKiBSZS1kZXNpZ25lZCB1bml0cyB1c2UgaW50ZXJydXB0IHBpbiAjMSAqLwotI2RlZmluZSBVU0JfTVNHSU5UCTB4MzkKLSNkZWZpbmUgVVNCX0lSUQkJKChVU0JfTVNHSU5UIC8gMHgyMCkgKyAyKQotI2VuZGlmCi0jZGVmaW5lIFRJTUVSX0lSUQkxMgotCi0KLS8qIERldmljZSBhZGRyZXNzIHJhbmdlcyAqLwotI2RlZmluZSBFWENJVEVfT0ZGU19PQ0QJCTB4MWZmZmMwMDAKLSNkZWZpbmUJRVhDSVRFX1NJWkVfT0NECQkoMTYgKiAxMDI0KQotI2RlZmluZSBFWENJVEVfUEhZU19PQ0QJCUNQSFlTQUREUihFWENJVEVfT0ZGU19PQ0QpCi0jZGVmaW5lIEVYQ0lURV9BRERSX09DRAkJQ0tTRUcxQUREUihFWENJVEVfT0ZGU19PQ0QpCi0KLSNkZWZpbmUgRVhDSVRFX09GRlNfU0NSQU0gCTB4MWZmZmEwMDAKLSNkZWZpbmUJRVhDSVRFX1NJWkVfU0NSQU0JKDggPDwgMTApCi0jZGVmaW5lIEVYQ0lURV9QSFlTX1NDUkFNIAlDUEhZU0FERFIoRVhDSVRFX09GRlNfU0NSQU0pCi0jZGVmaW5lIEVYQ0lURV9BRERSX1NDUkFNIAlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1NDUkFNKQotCi0jZGVmaW5lIEVYQ0lURV9PRkZTX1BDSV9JTwkweDFmZmY4MDAwCi0jZGVmaW5lCUVYQ0lURV9TSVpFX1BDSV9JTwkoOCA8PCAxMCkKLSNkZWZpbmUgRVhDSVRFX1BIWVNfUENJX0lPCUNQSFlTQUREUihFWENJVEVfT0ZGU19QQ0lfSU8pCi0jZGVmaW5lIEVYQ0lURV9BRERSX1BDSV9JTyAJQ0tTRUcxQUREUihFWENJVEVfT0ZGU19QQ0lfSU8pCi0KLSNkZWZpbmUgRVhDSVRFX09GRlNfVElUQU4JMHgxZmZmMDAwMAotI2RlZmluZSBFWENJVEVfU0laRV9USVRBTgkoMzIgPDwgMTApCi0jZGVmaW5lIEVYQ0lURV9QSFlTX1RJVEFOCUNQSFlTQUREUihFWENJVEVfT0ZGU19USVRBTikKLSNkZWZpbmUgRVhDSVRFX0FERFJfVElUQU4JQ0tTRUcxQUREUihFWENJVEVfT0ZGU19USVRBTikKLQotI2RlZmluZSBFWENJVEVfT0ZGU19QQ0lfTUVNCTB4MWZmZTAwMDAKLSNkZWZpbmUgRVhDSVRFX1NJWkVfUENJX01FTQkoNjQgPDwgMTApCi0jZGVmaW5lIEVYQ0lURV9QSFlTX1BDSV9NRU0JQ1BIWVNBRERSKEVYQ0lURV9PRkZTX1BDSV9NRU0pCi0jZGVmaW5lIEVYQ0lURV9BRERSX1BDSV9NRU0JQ0tTRUcxQUREUihFWENJVEVfT0ZGU19QQ0lfTUVNKQotCi0jZGVmaW5lIEVYQ0lURV9PRkZTX0ZQR0EJMHgxZmZkYzAwMAotI2RlZmluZSBFWENJVEVfU0laRV9GUEdBCSgxNiA8PCAxMCkKLSNkZWZpbmUgRVhDSVRFX1BIWVNfRlBHQQlDUEhZU0FERFIoRVhDSVRFX09GRlNfRlBHQSkKLSNkZWZpbmUgRVhDSVRFX0FERFJfRlBHQQlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX0ZQR0EpCi0KLSNkZWZpbmUgRVhDSVRFX09GRlNfTkFORAkweDFmZmQ4MDAwCi0jZGVmaW5lIEVYQ0lURV9TSVpFX05BTkQJKDE2IDw8IDEwKQotI2RlZmluZSBFWENJVEVfUEhZU19OQU5ECUNQSFlTQUREUihFWENJVEVfT0ZGU19OQU5EKQotI2RlZmluZSBFWENJVEVfQUREUl9OQU5ECUNLU0VHMUFERFIoRVhDSVRFX09GRlNfTkFORCkKLQotI2RlZmluZSBFWENJVEVfT0ZGU19CT09UUk9NCTB4MWYwMDAwMDAKLSNkZWZpbmUgRVhDSVRFX1NJWkVfQk9PVFJPTQkoOCA8PCAyMCkKLSNkZWZpbmUgRVhDSVRFX1BIWVNfQk9PVFJPTQlDUEhZU0FERFIoRVhDSVRFX09GRlNfQk9PVFJPTSkKLSNkZWZpbmUgRVhDSVRFX0FERFJfQk9PVFJPTQlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX0JPT1RST00pCi0KLS8qIEZQR0EgYWRkcmVzcyBvZmZzZXRzICovCi0jZGVmaW5lIEVYQ0lURV9GUEdBX0RQUgkJMHgwMTA0CS8qIGR1YWwtcG9ydGVkIHJhbSAqLwotI2RlZmluZSBFWENJVEVfRlBHQV9TWVNDVEwJMHgwMjAwCS8qIHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyIGJsb2NrICovCi0KLSNlbmRpZiAvKiBfX0VYQ0lURV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9leGNpdGVfZnBnYS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZV9mcGdhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMWVmNjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZV9mcGdhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jaWZuZGVmIEVYQ0lURV9GUEdBX0hfSU5DTFVERUQKLSNkZWZpbmUgRVhDSVRFX0ZQR0FfSF9JTkNMVURFRAotCi0KLS8qKgotICogQWRkcmVzcyBhbGlnbm1lbnQgb2YgdGhlIGluZGl2aWR1YWwgRlBHQSBieXRlcy4KLSAqIFRoZSBhZGRyZXNzIGFycmFuZ2VtZW50IG9mIHRoZSBpbmRpdmlkdWFsIGJ5dGVzIG9mIHRoZSBGUEdBIGlzIHR3bwotICogYnl0ZSBhbGlnbmVkIGF0IHRoZSBlbWJlZGRlZCBNSzIgcGxhdGZvcm0uCi0gKi8KLSNpZmRlZiBFWENJVEVfQ0NJX0ZQR0FfTUsyCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZXhjaXRlX2NjaV9mcGdhX2FsaWduX3QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMikpKTsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZXhjaXRlX2NjaV9mcGdhX2FsaWduX3Q7Ci0jZW5kaWYKLQotCi0vKioKLSAqIFNpemUgb2YgRHVhbCBQb3J0ZWQgUkFNLgotICovCi0jZGVmaW5lIEVYQ0lURV9EUFJfU0laRSAyNjMKLQotCi0vKioKLSAqIFNpemUgb2YgUmVzZXJ2ZWQgU3RhdHVzIEZpZWxkcyBpbiBEdWFsIFBvcnRlZCBSQU0uCi0gKi8KLSNkZWZpbmUgRVhDSVRFX0RQUl9TVEFUVVNfU0laRSA3Ci0KLQotCi0vKioKLSAqIEZQR0EuCi0gKiBIYXJkd2FyZSByZWdpc3RlciBsYXlvdXQgb2YgdGhlIEZQR0EgaW50ZXJmYWNlLiBUaGUgRlBHQSBtdXN0IGFjY2Vzc2VkCi0gKiBieXRlIHdpc2Ugc29sZWx5LgotICogQHNlZSBFWENJVEVfQ0NJX0RQUl9NSzIKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgZXhjaXRlX2ZwZ2EgewotCi0JLyoqCi0JICogRHVhbCBQb3J0ZWQgUkFNLgotCSAqLwotCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IGRwcltFWENJVEVfRFBSX1NJWkVdOwotCi0JLyoqCi0JICogU3RhdHVzLgotCSAqLwotCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHN0YXR1c1tFWENJVEVfRFBSX1NUQVRVU19TSVpFXTsKLQotI2lmZGVmIEVYQ0lURV9DQ0lfRlBHQV9NSzIKLQkvKioKLQkgKiBSTTkwMDAgSW50ZXJydXB0LgotCSAqIFdyaXRlIGFjY2VzcyBpbml0aWF0ZXMgaW50ZXJydXB0IGF0IHRoZSBSTTkwMDAgKE1JUFMpIHByb2Nlc3NvciBvZiB0aGUgZVhjaXRlLgotCSAqLwotCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHJtOWtfaW50OwotI2Vsc2UKLQkvKioKLQkgKiBNSzIgSW50ZXJydXB0LgotCSAqIFdyaXRlIGFjY2VzcyBpbml0aWF0ZXMgaW50ZXJydXB0IGF0IHRoZSBBUk0gcHJvY2Vzc29yIG9mIHRoZSBNSzIuCi0JICovCi0JZXhjaXRlX2NjaV9mcGdhX2FsaWduX3QgbWsyX2ludDsKLQotCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IGdhcFsweDEwMDAtMHgxMGZdOwotCi0JLyoqCi0JICogSVJRIFNvdXJjZS9BY2tub3dsZWRnZS4KLQkgKi8KLQlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBybTlrX2lycV9zcmM7Ci0KLQkvKioKLQkgKiBJUlEgTWFzay4KLQkgKiBTZXQgYml0cyBlbmFibGUgdGhlIHJlbGF0ZWQgaW50ZXJydXB0LgotCSAqLwotCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHJtOWtfaXJxX21hc2s7Ci0jZW5kaWYKLQotCi19IGV4Y2l0ZV9mcGdhOwotCi0KLQotI2VuZGlmCS8qIG5kZWYgRVhDSVRFX0ZQR0FfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZV9uYW5kZmxhc2guaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9leGNpdGVfbmFuZGZsYXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Y2Y2MTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZV9uYW5kZmxhc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX0VYQ0lURV9OQU5ERkxBU0hfSF9fCi0jZGVmaW5lIF9fRVhDSVRFX05BTkRGTEFTSF9IX18KLQotLyogUmVzb3VyY2UgbmFtZXMgKi8KLSNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9SRVNPVVJDRV9SRUdTCSJleGNpdGVfbmFuZGZsYXNoX3JlZ3MiCi0KLSNlbmRpZiAvKiBfX0VYQ0lURV9OQU5ERkxBU0hfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvcm05a19ldGguaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9ybTlrX2V0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDcwNWE0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9ybTlrX2V0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmICFkZWZpbmVkKF9fUk05S19FVEhfSF9fKQotI2RlZmluZSBfX1JNOUtfRVRIX0hfXwotCi0jZGVmaW5lIFJNOUtfR0VfTkFNRQkJCSJybTlrX2dlIgotCi0vKiBSZXNvdXJjZSBuYW1lcyAqLwotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX01BQyAgICAgIAkicm05a19nZV9tYWMiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfTVNUQVQgICAgICAJInJtOWtfZ2VfbXN0YXQiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfUEtUUFJPQwkicm05a19nZV9wa3Rwcm9jIgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX1hETUEJCSJybTlrX2dlX3hkbWEiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT19SWCAgCSJybTlrX2dlX2ZpZm9fcngiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT19UWCAgCSJybTlrX2dlX2ZpZm9fdHgiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT01FTV9SWCAgCSJybTlrX2dlX2ZpZm9fbWVtb3J5X3J4IgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fVFggIAkicm05a19nZV9maWZvX21lbW9yeV90eCIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9QSFkgICAgICAJInJtOWtfZ2VfcGh5IgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfUlggIAkicm05a19nZV9kbWFkZXNjX3J4IgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfVFggIAkicm05a19nZV9kbWFkZXNjX3R4IgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0lSUV9NQUlOCSJybTlrX2dlX2lycV9tYWluIgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0lSUV9QSFkJInJtOWtfZ2VfaXJxX3BoeSIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9HUElfU0xJQ0UJInJtOWtfZ2VfZ3BpX3NsaWNlIgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX01ESU9fQ0hBTk5FTAkicm05a19nZV9tZGlvX2NoYW5uZWwiCi0KLSNlbmRpZiAvKiAhZGVmaW5lZChfX1JNOUtfRVRIX0hfXykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9ybTlrX3dkdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfd2R0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTNjMDguLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfd2R0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9fUk05S19XRFRfSF9fCi0jZGVmaW5lIF9fUk05S19XRFRfSF9fCi0KLS8qIERldmljZSBuYW1lICovCi0jZGVmaW5lIFdEVF9OQU1FCQkid2R0X2dwaSIKLQotLyogUmVzb3VyY2UgbmFtZXMgKi8KLSNkZWZpbmUgV0RUX1JFU09VUkNFX1JFR1MJImV4Y2l0ZV93YXRjaGRvZ19yZWdzIgotI2RlZmluZSBXRFRfUkVTT1VSQ0VfSVJRCSJleGNpdGVfd2F0Y2hkb2dfaXJxIgotI2RlZmluZSBXRFRfUkVTT1VSQ0VfQ09VTlRFUgkiZXhjaXRlX3dhdGNoZG9nX2NvdW50ZXIiCi0KLSNlbmRpZiAvKiBfX1JNOUtfV0RUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfeGljYXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9ybTlrX3hpY2FwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOTU3NzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfeGljYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpZm5kZWYgX19FWENJVEVfWElDQVBfSF9fCi0jZGVmaW5lIF9fRVhDSVRFX1hJQ0FQX0hfXwotCi0KLS8qIFJlc291cmNlIG5hbWVzICovCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0ZJRk9fUlgJCSJ4aWNhcF9maWZvX3J4IgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9GSUZPX1RYCQkieGljYXBfZmlmb190eCIKLSNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfWERNQSAJCSJ4aWNhcF94ZG1hIgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9ETUFERVNDCQkieGljYXBfZG1hZGVzYyIKLSNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfUEtUUFJPQyAgCSJ4aWNhcF9wa3Rwcm9jIgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9JUlEJCSJ4aWNhcF9pcnEiCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0dQSV9TTElDRQkieGljYXBfZ3BpX3NsaWNlIgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9GSUZPX0JMSwkJInhpY2FwX2ZpZm9fYmxvY2tzIgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9QS1RfU1RSRUFNCSJ4aWNhcF9wa3Rfc3RyZWFtIgotCi0jZW5kaWYgLyogX19FWENJVEVfWElDQVBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvd2FyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvd2FyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODIxODAuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3dhci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNyBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Ci0gKi8KLSNpZm5kZWYgX19BU01fTUlQU19NQUNIX0VYQ0lURV9XQVJfSAotI2RlZmluZSBfX0FTTV9NSVBTX01BQ0hfRVhDSVRFX1dBUl9ICi0KLSNkZWZpbmUgUjQ2MDBfVjFfSU5ERVhfSUNBQ0hFT1BfV0FSCTAKLSNkZWZpbmUgUjQ2MDBfVjFfSElUX0NBQ0hFT1BfV0FSCTAKLSNkZWZpbmUgUjQ2MDBfVjJfSElUX0NBQ0hFT1BfV0FSCTAKLSNkZWZpbmUgUjU0MzJfQ1AwX0lOVEVSUlVQVF9XQVIJCTAKLSNkZWZpbmUgQkNNMTI1MF9NM19XQVIJCQkwCi0jZGVmaW5lIFNJQllURV8xOTU2X1dBUgkJCTAKLSNkZWZpbmUgTUlQUzRLX0lDQUNIRV9SRUZJTExfV0FSCTAKLSNkZWZpbmUgTUlQU19DQUNIRV9TWU5DX1dBUgkJMAotI2RlZmluZSBUWDQ5WFhfSUNBQ0hFX0lOREVYX0lOVl9XQVIJMAotI2RlZmluZSBSTTkwMDBfQ0RFWF9TTVBfV0FSCQkxCi0jZGVmaW5lIElDQUNIRV9SRUZJTExTX1dPUktBUk9VTkRfV0FSICAgMQotI2RlZmluZSBSMTAwMDBfTExTQ19XQVIJCQkwCi0jZGVmaW5lIE1JUFMzNEtfTUlTU0VEX0lUTEJfV0FSCTAKLQotI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9FWENJVEVfV0FSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFmNzdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNi5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogVGhlIGhlYWRlciBmaWxlIG9mIGNzNTUzNiBzb3VydGggYnJpZGdlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4KKyAqIEF1dGhvciA6IGpsbGl1IDxsaXVqbEBsZW1vdGUuY29tPgorICovCisKKyNpZm5kZWYJX0NTNTUzNl9ICisjZGVmaW5lCV9DUzU1MzZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgX3JkbXNyKHUzMiBtc3IsIHUzMiAqaGksIHUzMiAqbG8pOworZXh0ZXJuIHZvaWQgX3dybXNyKHUzMiBtc3IsIHUzMiBoaSwgdTMyIGxvKTsKKworLyoKKyAqIE1TUiBtb2R1bGUgYmFzZQorICovCisjZGVmaW5lCUNTNTUzNl9TQl9NU1JfQkFTRQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUJQ1M1NTM2X0dMSVVfTVNSX0JBU0UJKDB4MTAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9JTExFR0FMX01TUl9CQVNFCSgweDIwMDAwMDAwKQorI2RlZmluZQlDUzU1MzZfVVNCX01TUl9CQVNFCSgweDQwMDAwMDAwKQorI2RlZmluZQlDUzU1MzZfSURFX01TUl9CQVNFCSgweDYwMDAwMDAwKQorI2RlZmluZQlDUzU1MzZfRElWSUxfTVNSX0JBU0UJKDB4ODAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9BQ0NfTVNSX0JBU0UJKDB4YTAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9VTlVTRURfTVNSX0JBU0UJKDB4YzAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9HTENQX01TUl9CQVNFCSgweGUwMDAwMDAwKQorCisjZGVmaW5lCVNCX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X1NCX01TUl9CQVNFCXwgKG9mZnNldCkpCisjZGVmaW5lCUdMSVVfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfR0xJVV9NU1JfQkFTRQl8IChvZmZzZXQpKQorI2RlZmluZQlJTExFR0FMX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X0lMTEVHQUxfTVNSX0JBU0UgfCAob2Zmc2V0KSkKKyNkZWZpbmUJVVNCX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X1VTQl9NU1JfQkFTRQl8IChvZmZzZXQpKQorI2RlZmluZQlJREVfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfSURFX01TUl9CQVNFCXwgKG9mZnNldCkpCisjZGVmaW5lCURJVklMX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X0RJVklMX01TUl9CQVNFCXwgKG9mZnNldCkpCisjZGVmaW5lCUFDQ19NU1JfUkVHKG9mZnNldCkJKENTNTUzNl9BQ0NfTVNSX0JBU0UJfCAob2Zmc2V0KSkKKyNkZWZpbmUJVU5VU0VEX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X1VOVVNFRF9NU1JfQkFTRQl8IChvZmZzZXQpKQorI2RlZmluZQlHTENQX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X0dMQ1BfTVNSX0JBU0UJfCAob2Zmc2V0KSkKKworLyoKKyAqIEJBUiBTUEFDRSBPRiBWSVJUVUFMIFBDSSA6CisgKiByYW5nZSBmb3IgcGNpIHByb2JlIHVzZSwgbGVuZ3RoIGlzIHRoZSBhY3R1YWwgc2l6ZS4KKyAqLworLyogSU8gc3BhY2UgZm9yIGFsbCBESVZJTCBtb2R1bGVzICovCisjZGVmaW5lCUNTNTUzNl9JUlFfUkFOR0UJMHhmZmZmZmZlMCAvKiBVU0VSRCBGT1IgUENJIFBST0JFICovCisjZGVmaW5lCUNTNTUzNl9JUlFfTEVOR1RICTB4MjAJLyogVEhFIFJFR1MgQUNUVUFMIExFTkdUSCAqLworI2RlZmluZQlDUzU1MzZfU01CX1JBTkdFCTB4ZmZmZmZmZjgKKyNkZWZpbmUJQ1M1NTM2X1NNQl9MRU5HVEgJMHgwOAorI2RlZmluZQlDUzU1MzZfR1BJT19SQU5HRQkweGZmZmZmZjAwCisjZGVmaW5lCUNTNTUzNl9HUElPX0xFTkdUSAkweDEwMAorI2RlZmluZQlDUzU1MzZfTUZHUFRfUkFOR0UJMHhmZmZmZmZjMAorI2RlZmluZQlDUzU1MzZfTUZHUFRfTEVOR1RICTB4NDAKKyNkZWZpbmUJQ1M1NTM2X0FDUElfUkFOR0UJMHhmZmZmZmZlMAorI2RlZmluZQlDUzU1MzZfQUNQSV9MRU5HVEgJMHgyMAorI2RlZmluZQlDUzU1MzZfUE1TX1JBTkdFCTB4ZmZmZmZmODAKKyNkZWZpbmUJQ1M1NTM2X1BNU19MRU5HVEgJMHg4MAorLyogSU8gc3BhY2UgZm9yIElERSAqLworI2RlZmluZQlDUzU1MzZfSURFX1JBTkdFCTB4ZmZmZmZmZjAKKyNkZWZpbmUJQ1M1NTM2X0lERV9MRU5HVEgJMHgxMAorLyogSU8gc3BhY2UgZm9yIEFDQyAqLworI2RlZmluZQlDUzU1MzZfQUNDX1JBTkdFCTB4ZmZmZmZmODAKKyNkZWZpbmUJQ1M1NTM2X0FDQ19MRU5HVEgJMHg4MAorLyogTUVNIHNwYWNlIGZvciBBTEwgVVNCIG1vZHVsZXMgKi8KKyNkZWZpbmUJQ1M1NTM2X09IQ0lfUkFOR0UJMHhmZmZmZjAwMAorI2RlZmluZQlDUzU1MzZfT0hDSV9MRU5HVEgJMHgxMDAwCisjZGVmaW5lCUNTNTUzNl9FSENJX1JBTkdFCTB4ZmZmZmYwMDAKKyNkZWZpbmUJQ1M1NTM2X0VIQ0lfTEVOR1RICTB4MTAwMAorCisvKgorICogUENJIE1TUiBBQ0NFU1MKKyAqLworI2RlZmluZQlQQ0lfTVNSX0NUUkwJCTB4RjAKKyNkZWZpbmUJUENJX01TUl9BRERSCQkweEY0CisjZGVmaW5lCVBDSV9NU1JfREFUQV9MTwkJMHhGOAorI2RlZmluZQlQQ0lfTVNSX0RBVEFfSEkJCTB4RkMKKworLyoqKioqKioqKioqKioqKiogTVNSICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogR0xJVSBTVEFOREFSRCBNU1IKKyAqLworI2RlZmluZQlHTElVX0NBUAkJMHgwMAorI2RlZmluZQlHTElVX0NPTkZJRwkJMHgwMQorI2RlZmluZQlHTElVX1NNSQkJMHgwMgorI2RlZmluZQlHTElVX0VSUk9SCQkweDAzCisjZGVmaW5lCUdMSVVfUE0JCQkweDA0CisjZGVmaW5lCUdMSVVfRElBRwkJMHgwNQorCisvKgorICogR0xJVSBTUEVDLiBNU1IKKyAqLworI2RlZmluZQlHTElVX1AyRF9CTTAJCTB4MjAKKyNkZWZpbmUJR0xJVV9QMkRfQk0xCQkweDIxCisjZGVmaW5lCUdMSVVfUDJEX0JNMgkJMHgyMgorI2RlZmluZQlHTElVX1AyRF9CTUswCQkweDIzCisjZGVmaW5lCUdMSVVfUDJEX0JNSzEJCTB4MjQKKyNkZWZpbmUJR0xJVV9QMkRfQk0zCQkweDI1CisjZGVmaW5lCUdMSVVfUDJEX0JNNAkJMHgyNgorI2RlZmluZQlHTElVX0NPSAkJMHg4MAorI2RlZmluZQlHTElVX1BBRQkJMHg4MQorI2RlZmluZQlHTElVX0FSQgkJMHg4MgorI2RlZmluZQlHTElVX0FTTUkJCTB4ODMKKyNkZWZpbmUJR0xJVV9BRVJSCQkweDg0CisjZGVmaW5lCUdMSVVfREVCVUcJCTB4ODUKKyNkZWZpbmUJR0xJVV9QSFlfQ0FQCQkweDg2CisjZGVmaW5lCUdMSVVfTk9VVF9SRVNQCQkweDg3CisjZGVmaW5lCUdMSVVfTk9VVF9XREFUQQkJMHg4OAorI2RlZmluZQlHTElVX1dIT0FNSQkJMHg4QgorI2RlZmluZQlHTElVX1NMVl9ESVMJCTB4OEMKKyNkZWZpbmUJR0xJVV9JT0RfQk0wCQkweEUwCisjZGVmaW5lCUdMSVVfSU9EX0JNMQkJMHhFMQorI2RlZmluZQlHTElVX0lPRF9CTTIJCTB4RTIKKyNkZWZpbmUJR0xJVV9JT0RfQk0zCQkweEUzCisjZGVmaW5lCUdMSVVfSU9EX0JNNAkJMHhFNAorI2RlZmluZQlHTElVX0lPRF9CTTUJCTB4RTUKKyNkZWZpbmUJR0xJVV9JT0RfQk02CQkweEU2CisjZGVmaW5lCUdMSVVfSU9EX0JNNwkJMHhFNworI2RlZmluZQlHTElVX0lPRF9CTTgJCTB4RTgKKyNkZWZpbmUJR0xJVV9JT0RfQk05CQkweEU5CisjZGVmaW5lCUdMSVVfSU9EX1NDMAkJMHhFQQorI2RlZmluZQlHTElVX0lPRF9TQzEJCTB4RUIKKyNkZWZpbmUJR0xJVV9JT0RfU0MyCQkweEVDCisjZGVmaW5lCUdMSVVfSU9EX1NDMwkJMHhFRAorI2RlZmluZQlHTElVX0lPRF9TQzQJCTB4RUUKKyNkZWZpbmUJR0xJVV9JT0RfU0M1CQkweEVGCisjZGVmaW5lCUdMSVVfSU9EX1NDNgkJMHhGMAorI2RlZmluZQlHTElVX0lPRF9TQzcJCTB4RjEKKworLyoKKyAqIFNCIFNUQU5EQVJECisgKi8KKyNkZWZpbmUJU0JfQ0FQCQkweDAwCisjZGVmaW5lCVNCX0NPTkZJRwkweDAxCisjZGVmaW5lCVNCX1NNSQkJMHgwMgorI2RlZmluZQlTQl9FUlJPUgkweDAzCisjZGVmaW5lCVNCX01BUl9FUlJfRU4JCTB4MDAwMDAwMDEKKyNkZWZpbmUJU0JfVEFSX0VSUl9FTgkJMHgwMDAwMDAwMgorI2RlZmluZQlTQl9SU1ZEX0JJVDEJCTB4MDAwMDAwMDQKKyNkZWZpbmUJU0JfRVhDRVBfRVJSX0VOCQkweDAwMDAwMDA4CisjZGVmaW5lCVNCX1NZU0VfRVJSX0VOCQkweDAwMDAwMDEwCisjZGVmaW5lCVNCX1BBUkVfRVJSX0VOCQkweDAwMDAwMDIwCisjZGVmaW5lCVNCX1RBU19FUlJfRU4JCTB4MDAwMDAwNDAKKyNkZWZpbmUJU0JfTUFSX0VSUl9GTEFHCQkweDAwMDEwMDAwCisjZGVmaW5lCVNCX1RBUl9FUlJfRkxBRwkJMHgwMDAyMDAwMAorI2RlZmluZQlTQl9SU1ZEX0JJVDIJCTB4MDAwNDAwMDAKKyNkZWZpbmUJU0JfRVhDRVBfRVJSX0ZMQUcJMHgwMDA4MDAwMAorI2RlZmluZQlTQl9TWVNFX0VSUl9GTEFHCTB4MDAxMDAwMDAKKyNkZWZpbmUJU0JfUEFSRV9FUlJfRkxBRwkweDAwMjAwMDAwCisjZGVmaW5lCVNCX1RBU19FUlJfRkxBRwkJMHgwMDQwMDAwMAorI2RlZmluZQlTQl9QTQkJMHgwNAorI2RlZmluZQlTQl9ESUFHCQkweDA1CisKKy8qCisgKiBTQiBTUEVDLgorICovCisjZGVmaW5lCVNCX0NUUkwJCTB4MTAKKyNkZWZpbmUJU0JfUjAJCTB4MjAKKyNkZWZpbmUJU0JfUjEJCTB4MjEKKyNkZWZpbmUJU0JfUjIJCTB4MjIKKyNkZWZpbmUJU0JfUjMJCTB4MjMKKyNkZWZpbmUJU0JfUjQJCTB4MjQKKyNkZWZpbmUJU0JfUjUJCTB4MjUKKyNkZWZpbmUJU0JfUjYJCTB4MjYKKyNkZWZpbmUJU0JfUjcJCTB4MjcKKyNkZWZpbmUJU0JfUjgJCTB4MjgKKyNkZWZpbmUJU0JfUjkJCTB4MjkKKyNkZWZpbmUJU0JfUjEwCQkweDJBCisjZGVmaW5lCVNCX1IxMQkJMHgyQgorI2RlZmluZQlTQl9SMTIJCTB4MkMKKyNkZWZpbmUJU0JfUjEzCQkweDJECisjZGVmaW5lCVNCX1IxNAkJMHgyRQorI2RlZmluZQlTQl9SMTUJCTB4MkYKKworLyoKKyAqIEdMQ1AgU1RBTkRBUkQKKyAqLworI2RlZmluZQlHTENQX0NBUAkJMHgwMAorI2RlZmluZQlHTENQX0NPTkZJRwkJMHgwMQorI2RlZmluZQlHTENQX1NNSQkJMHgwMgorI2RlZmluZQlHTENQX0VSUk9SCQkweDAzCisjZGVmaW5lCUdMQ1BfUE0JCQkweDA0CisjZGVmaW5lCUdMQ1BfRElBRwkJMHgwNQorCisvKgorICogR0xDUCBTUEVDLgorICovCisjZGVmaW5lCUdMQ1BfQ0xLX0RJU19ERUxBWQkweDA4CisjZGVmaW5lCUdMQ1BfUE1fQ0xLX0RJU0FCTEUJMHgwOQorI2RlZmluZQlHTENQX0dMQl9QTQkJMHgwQgorI2RlZmluZQlHTENQX0RCR19PVVQJCTB4MEMKKyNkZWZpbmUJR0xDUF9SU1ZEMQkJMHgwRAorI2RlZmluZQlHTENQX1NPRlRfQ09NCQkweDBFCisjZGVmaW5lCVNPRlRfQkFSX1NNQl9GTEFHCTB4MDAwMDAwMDEKKyNkZWZpbmUJU09GVF9CQVJfR1BJT19GTEFHCTB4MDAwMDAwMDIKKyNkZWZpbmUJU09GVF9CQVJfTUZHUFRfRkxBRwkweDAwMDAwMDA0CisjZGVmaW5lCVNPRlRfQkFSX0lSUV9GTEFHCTB4MDAwMDAwMDgKKyNkZWZpbmUJU09GVF9CQVJfUE1TX0ZMQUcJMHgwMDAwMDAxMAorI2RlZmluZQlTT0ZUX0JBUl9BQ1BJX0ZMQUcJMHgwMDAwMDAyMAorI2RlZmluZQlTT0ZUX0JBUl9JREVfRkxBRwkweDAwMDAwNDAwCisjZGVmaW5lCVNPRlRfQkFSX0FDQ19GTEFHCTB4MDAwMDA4MDAKKyNkZWZpbmUJU09GVF9CQVJfT0hDSV9GTEFHCTB4MDAwMDEwMDAKKyNkZWZpbmUJU09GVF9CQVJfRUhDSV9GTEFHCTB4MDAwMDIwMDAKKyNkZWZpbmUJR0xDUF9SU1ZEMgkJMHgwRgorI2RlZmluZQlHTENQX0NMS19PRkYJCTB4MTAKKyNkZWZpbmUJR0xDUF9DTEtfQUNUSVZFCQkweDExCisjZGVmaW5lCUdMQ1BfQ0xLX0RJU0FCTEUJMHgxMgorI2RlZmluZQlHTENQX0NMSzRBQ0sJCTB4MTMKKyNkZWZpbmUJR0xDUF9TWVNfUlNUCQkweDE0CisjZGVmaW5lCUdMQ1BfUlNWRDMJCTB4MTUKKyNkZWZpbmUJR0xDUF9EQkdfQ0xLX0NUUkwJMHgxNgorI2RlZmluZQlHTENQX0NISVBfUkVWX0lECTB4MTcKKworLyogUElDICovCisjZGVmaW5lCVBJQ19ZU0VMX0xPVwkJMHgyMAorI2RlZmluZQlQSUNfWVNFTF9MT1dfVVNCX1NISUZUCQk4CisjZGVmaW5lCVBJQ19ZU0VMX0xPV19BQ0NfU0hJRlQJCTE2CisjZGVmaW5lCVBJQ19ZU0VMX0xPV19GTEFTSF9TSElGVAkyNAorI2RlZmluZQlQSUNfWVNFTF9ISUdICQkweDIxCisjZGVmaW5lCVBJQ19aU0VMX0xPVwkJMHgyMgorI2RlZmluZQlQSUNfWlNFTF9ISUdICQkweDIzCisjZGVmaW5lCVBJQ19JUlFNX1BSSU0JCTB4MjQKKyNkZWZpbmUJUElDX0lSUU1fTFBDCQkweDI1CisjZGVmaW5lCVBJQ19YSVJSX1NUU19MT1cJMHgyNgorI2RlZmluZQlQSUNfWElSUl9TVFNfSElHSAkweDI3CisjZGVmaW5lCVBDSV9TSERXCQkweDM0CisKKy8qCisgKiBESVZJTCBTVEFOREFSRAorICovCisjZGVmaW5lCURJVklMX0NBUAkJMHgwMAorI2RlZmluZQlESVZJTF9DT05GSUcJCTB4MDEKKyNkZWZpbmUJRElWSUxfU01JCQkweDAyCisjZGVmaW5lCURJVklMX0VSUk9SCQkweDAzCisjZGVmaW5lCURJVklMX1BNCQkweDA0CisjZGVmaW5lCURJVklMX0RJQUcJCTB4MDUKKworLyoKKyAqIERJVklMIFNQRUMuCisgKi8KKyNkZWZpbmUJRElWSUxfTEJBUl9JUlEJCTB4MDgKKyNkZWZpbmUJRElWSUxfTEJBUl9LRUwJCTB4MDkKKyNkZWZpbmUJRElWSUxfTEJBUl9TTUIJCTB4MEIKKyNkZWZpbmUJRElWSUxfTEJBUl9HUElPCQkweDBDCisjZGVmaW5lCURJVklMX0xCQVJfTUZHUFQJMHgwRAorI2RlZmluZQlESVZJTF9MQkFSX0FDUEkJCTB4MEUKKyNkZWZpbmUJRElWSUxfTEJBUl9QTVMJCTB4MEYKKyNkZWZpbmUJRElWSUxfTEVHX0lPCQkweDE0CisjZGVmaW5lCURJVklMX0JBTExfT1BUUwkJMHgxNQorI2RlZmluZQlESVZJTF9TT0ZUX0lSUQkJMHgxNgorI2RlZmluZQlESVZJTF9TT0ZUX1JFU0VUCTB4MTcKKworLyogTUZHUFQgKi8KKyNkZWZpbmUgTUZHUFRfSVJRCTB4MjgKKworLyoKKyAqIElERSBTVEFOREFSRAorICovCisjZGVmaW5lCUlERV9DQVAJCTB4MDAKKyNkZWZpbmUJSURFX0NPTkZJRwkweDAxCisjZGVmaW5lCUlERV9TTUkJCTB4MDIKKyNkZWZpbmUJSURFX0VSUk9SCTB4MDMKKyNkZWZpbmUJSURFX1BNCQkweDA0CisjZGVmaW5lCUlERV9ESUFHCTB4MDUKKworLyoKKyAqIElERSBTUEVDLgorICovCisjZGVmaW5lCUlERV9JT19CQVIJMHgwOAorI2RlZmluZQlJREVfQ0ZHCQkweDEwCisjZGVmaW5lCUlERV9EVEMJCTB4MTIKKyNkZWZpbmUJSURFX0NBU1QJMHgxMworI2RlZmluZQlJREVfRVRDCQkweDE0CisjZGVmaW5lCUlERV9JTlRFUk5BTF9QTQkweDE1CisKKy8qCisgKiBBQ0MgU1RBTkRBUkQKKyAqLworI2RlZmluZQlBQ0NfQ0FQCQkweDAwCisjZGVmaW5lCUFDQ19DT05GSUcJMHgwMQorI2RlZmluZQlBQ0NfU01JCQkweDAyCisjZGVmaW5lCUFDQ19FUlJPUgkweDAzCisjZGVmaW5lCUFDQ19QTQkJMHgwNAorI2RlZmluZQlBQ0NfRElBRwkweDA1CisKKy8qCisgKiBVU0IgU1RBTkRBUkQKKyAqLworI2RlZmluZQlVU0JfQ0FQCQkweDAwCisjZGVmaW5lCVVTQl9DT05GSUcJMHgwMQorI2RlZmluZQlVU0JfU01JCQkweDAyCisjZGVmaW5lCVVTQl9FUlJPUgkweDAzCisjZGVmaW5lCVVTQl9QTQkJMHgwNAorI2RlZmluZQlVU0JfRElBRwkweDA1CisKKy8qCisgKiBVU0IgU1BFQy4KKyAqLworI2RlZmluZQlVU0JfT0hDSQkweDA4CisjZGVmaW5lCVVTQl9FSENJCTB4MDkKKworLyoqKioqKioqKioqKioqKioqKiBOQVRJVkUgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogR1BJTyA6IEkvTyBTUEFDRTsgUkVHIDogMzJCSVRTICovCisjZGVmaW5lCUdQSU9MX09VVF9WQUwJCTB4MDAKKyNkZWZpbmUJR1BJT0xfT1VUX0VOCQkweDA0CisKKyNlbmRpZgkJCQkvKiBfQ1M1NTM2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfbWZncHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfbWZncHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQ5M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBjczU1MzYgbWZncHQgaGVhZGVyIGZpbGUKKyAqLworCisjaWZuZGVmIF9DUzU1MzZfTUZHUFRfSAorI2RlZmluZSBfQ1M1NTM2X01GR1BUX0gKKworI2luY2x1ZGUgPGNzNTUzNi9jczU1MzYuaD4KKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2X3BjaS5oPgorCisjaWZkZWYgQ09ORklHX0NTNTUzNl9NRkdQVAorZXh0ZXJuIHZvaWQgc2V0dXBfbWZncHQwX3RpbWVyKHZvaWQpOworZXh0ZXJuIHZvaWQgZGlzYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19tYXliZV91bnVzZWQgc2V0dXBfbWZncHQwX3RpbWVyKHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19tYXliZV91bnVzZWQgZGlzYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIF9fbWF5YmVfdW51c2VkIGVuYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKQoreworfQorI2VuZGlmCisKKyNkZWZpbmUgTUZHUFRfVElDS19SQVRFIDE0MzE4MDAwCisjZGVmaW5lIENPTVBBUkUgICgoTUZHUFRfVElDS19SQVRFICsgSFovMikgLyBIWikKKworI2RlZmluZSBNRkdQVF9CQVNFCW1mZ3B0X2Jhc2UKKyNkZWZpbmUgTUZHUFQwX0NNUDIJKE1GR1BUX0JBU0UgKyAyKQorI2RlZmluZSBNRkdQVDBfQ05UCShNRkdQVF9CQVNFICsgNCkKKyNkZWZpbmUgTUZHUFQwX1NFVFVQCShNRkdQVF9CQVNFICsgNikKKworI2VuZGlmIC8qIV9DUzU1MzZfTUZHUFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl9wY2kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjYTljOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfcGNpLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiB0aGUgZGVmaW5pdGlvbiBmaWxlIG9mIGNzNTUzNiBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlKFZTTSkuCisgKiBwY2kgY29uZmlndXJhdGlvbiBzcGFjZSBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgVlNNLCBzbworICogdGhlcmUgaXMgbm8gbmVlZCBvZiB0aGUgTVNSIHJlYWQvd3JpdGUgbm93LCBleGNlcHQgdGhlIHNwZWMuCisgKiBNU1IgcmVnaXN0ZXJzIHdoaWNoIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqLworCisjaWZuZGVmCV9DUzU1MzZfUENJX0gKKyNkZWZpbmUJX0NTNTUzNl9QQ0lfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgorCitleHRlcm4gdm9pZCBjczU1MzZfcGNpX2NvbmZfd3JpdGU0KGludCBmdW5jdGlvbiwgaW50IHJlZywgdTMyIHZhbHVlKTsKK2V4dGVybiB1MzIgY3M1NTM2X3BjaV9jb25mX3JlYWQ0KGludCBmdW5jdGlvbiwgaW50IHJlZyk7CisKKyNkZWZpbmUJQ1M1NTM2X0FDQ19JTlRSCQk5CisjZGVmaW5lCUNTNTUzNl9JREVfSU5UUgkJMTQKKyNkZWZpbmUJQ1M1NTM2X1VTQl9JTlRSCQkxMQorI2RlZmluZQlDUzU1MzZfTUZHUFRfSU5UUgk1CisjZGVmaW5lCUNTNTUzNl9VQVJUMV9JTlRSCTQKKyNkZWZpbmUJQ1M1NTM2X1VBUlQyX0lOVFIJMworCisvKioqKioqKioqKioqKiogUENJIEJVUyBERVZJQ0UgRlVOQ1RJT04gKioqKioqKioqKioqKioqLworCisvKgorICogUENJIGJ1cyBkZXZpY2UgZnVuY3Rpb24KKyAqLworI2RlZmluZQlQQ0lfQlVTX0NTNTUzNgkJMAorI2RlZmluZQlQQ0lfSURTRUxfQ1M1NTM2CTE0CisKKy8qKioqKioqKioqIFNUQU5EQVJEIFBDSS0yLjIgRVhQQU5TSU9OICoqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQorICogd2UgaGF2ZSB0byB2aXJ0dWFsaXplIHRoZSBQQ0kgY29uZmlndXJlIHNwYWNlIGhlYWQsIHNvIHdlIHNob3VsZAorICogZGVmaW5lIHRoZSBuZWNlc3NhcnkgSURzIGFuZCBzb21lIG90aGVycy4KKyAqLworCisvKiBDT05GSUcgb2YgUENJIFZFTkRPUiBJRCovCisjZGVmaW5lIENGR19QQ0lfVkVORE9SX0lEKG1vZF9kZXZfaWQsIHN5c192ZW5kb3JfaWQpIFwKKwkoKChtb2RfZGV2X2lkKSA8PCAxNikgfCAoc3lzX3ZlbmRvcl9pZCkpCisKKy8qIFZFTkRPUiBJRCAqLworI2RlZmluZQlDUzU1MzZfVkVORE9SX0lECTB4MTAyMgorCisvKiBERVZJQ0UgSUQgKi8KKyNkZWZpbmUJQ1M1NTM2X0lTQV9ERVZJQ0VfSUQJCTB4MjA5MAorI2RlZmluZQlDUzU1MzZfSURFX0RFVklDRV9JRAkJMHgyMDlhCisjZGVmaW5lCUNTNTUzNl9BQ0NfREVWSUNFX0lECQkweDIwOTMKKyNkZWZpbmUJQ1M1NTM2X09IQ0lfREVWSUNFX0lECQkweDIwOTQKKyNkZWZpbmUJQ1M1NTM2X0VIQ0lfREVWSUNFX0lECQkweDIwOTUKKworLyogQ0xBU1MgQ09ERSA6IENMQVNTIFNVQi1DTEFTUyBJTlRFUkZBQ0UgKi8KKyNkZWZpbmUJQ1M1NTM2X0lTQV9DTEFTU19DT0RFCQkweDA2MDEwMAorI2RlZmluZSBDUzU1MzZfSURFX0NMQVNTX0NPREUJCTB4MDEwMTgwCisjZGVmaW5lCUNTNTUzNl9BQ0NfQ0xBU1NfQ09ERQkJMHgwNDAxMDAKKyNkZWZpbmUJQ1M1NTM2X09IQ0lfQ0xBU1NfQ09ERQkJMHgwQzAzMTAKKyNkZWZpbmUJQ1M1NTM2X0VIQ0lfQ0xBU1NfQ09ERQkJMHgwQzAzMjAKKworLyogQkhMQyA6IEJJU1QgSEVBREVSLVRZUEUgTEFURU5DWS1USU1FUiBDQUNIRS1MSU5FLVNJWkUgKi8KKworI2RlZmluZSBDRkdfUENJX0NBQ0hFX0xJTkVfU0laRShoZWFkZXJfdHlwZSwgbGF0ZW5jeV90aW1lcikJXAorCSgoUENJX05PTkVfQklTVCA8PCAyNCkgfCAoKGhlYWRlcl90eXBlKSA8PCAxNikgXAorCQl8ICgobGF0ZW5jeV90aW1lcikgPDwgOCkgfCBQQ0lfTk9STUFMX0NBQ0hFX0xJTkVfU0laRSk7CisKKyNkZWZpbmUJUENJX05PTkVfQklTVAkJCTB4MDAJLyogUk8gbm90IGltcGxlbWVudGVkIHlldC4gKi8KKyNkZWZpbmUJUENJX0JSSURHRV9IRUFERVJfVFlQRQkJMHg4MAkvKiBSTyAqLworI2RlZmluZQlQQ0lfTk9STUFMX0hFQURFUl9UWVBFCQkweDAwCisjZGVmaW5lCVBDSV9OT1JNQUxfTEFURU5DWV9USU1FUgkweDAwCisjZGVmaW5lCVBDSV9OT1JNQUxfQ0FDSEVfTElORV9TSVpFCTB4MDgJLyogUlcgKi8KKworLyogQkFSICovCisjZGVmaW5lCVBDSV9CQVIwX1JFRwkJCTB4MTAKKyNkZWZpbmUJUENJX0JBUjFfUkVHCQkJMHgxNAorI2RlZmluZQlQQ0lfQkFSMl9SRUcJCQkweDE4CisjZGVmaW5lCVBDSV9CQVIzX1JFRwkJCTB4MWMKKyNkZWZpbmUJUENJX0JBUjRfUkVHCQkJMHgyMAorI2RlZmluZQlQQ0lfQkFSNV9SRUcJCQkweDI0CisjZGVmaW5lCVBDSV9CQVJfQ09VTlQJCQk2CisjZGVmaW5lCVBDSV9CQVJfUkFOR0VfTUFTSwkJMHhGRkZGRkZGRgorCisvKiBDQVJEQlVTIENJUyBQT0lOVEVSICovCisjZGVmaW5lCVBDSV9DQVJEQlVTX0NJU19QT0lOVEVSCQkweDAwMDAwMDAwCisKKy8qIFNVQlNZU1RFTSBWRU5ET1IgSUQgICovCisjZGVmaW5lCUNTNTUzNl9TVUJfVkVORE9SX0lECQlDUzU1MzZfVkVORE9SX0lECisKKy8qIFNVQlNZU1RFTSBJRCAqLworI2RlZmluZQlDUzU1MzZfSVNBX1NVQl9JRAkJQ1M1NTM2X0lTQV9ERVZJQ0VfSUQKKyNkZWZpbmUJQ1M1NTM2X0lERV9TVUJfSUQJCUNTNTUzNl9JREVfREVWSUNFX0lECisjZGVmaW5lCUNTNTUzNl9BQ0NfU1VCX0lECQlDUzU1MzZfQUNDX0RFVklDRV9JRAorI2RlZmluZQlDUzU1MzZfT0hDSV9TVUJfSUQJCUNTNTUzNl9PSENJX0RFVklDRV9JRAorI2RlZmluZQlDUzU1MzZfRUhDSV9TVUJfSUQJCUNTNTUzNl9FSENJX0RFVklDRV9JRAorCisvKiBFWFBBTlNJT04gUk9NIEJBUiAqLworI2RlZmluZQlQQ0lfRVhQQU5TSU9OX1JPTV9CQVIJCTB4MDAwMDAwMDAKKworLyogQ0FQQUJJTElUSUVTIFBPSU5URVIgKi8KKyNkZWZpbmUJUENJX0NBUExJU1RfUE9JTlRFUgkJMHgwMDAwMDAwMAorI2RlZmluZSBQQ0lfQ0FQTElTVF9VU0JfUE9JTlRFUgkJMHg0MAorLyogSU5URVJSVVBUICovCisKKyNkZWZpbmUgQ0ZHX1BDSV9JTlRFUlJVUFRfTElORShwaW4sIG1vZF9pbnRyKSBcCisJKChQQ0lfTUFYX0xBVEVOQ1kgPDwgMjQpIHwgKFBDSV9NSU5fR1JBTlQgPDwgMTYpIHwgXAorCQkoKHBpbikgPDwgOCkgfCAobW9kX2ludHIpKQorCisjZGVmaW5lCVBDSV9NQVhfTEFURU5DWQkJCTB4NDAKKyNkZWZpbmUJUENJX01JTl9HUkFOVAkJCTB4MDAKKyNkZWZpbmUJUENJX0RFRkFVTFRfUElOCQkJMHgwMQorCisvKioqKioqKioqKiogRVhQQU5TSU9OIFBDSSBSRUcgKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSVNBIEVYUEFOU0lPTgorICovCisjZGVmaW5lCVBDSV9VQVJUMV9JTlRfUkVHIAkweDUwCisjZGVmaW5lIFBDSV9VQVJUMl9JTlRfUkVHCTB4NTQKKyNkZWZpbmUJUENJX0lTQV9GSVhVUF9SRUcJMHg1OAorCisvKgorICogSURFIEVYUEFOU0lPTgorICovCisjZGVmaW5lCVBDSV9JREVfQ0ZHX1JFRwkJMHg0MAorI2RlZmluZQlDUzU1MzZfSURFX0ZMQVNIX1NJR05BVFVSRQkweERFQURCRUVGCisjZGVmaW5lCVBDSV9JREVfRFRDX1JFRwkJMHg0OAorI2RlZmluZQlQQ0lfSURFX0NBU1RfUkVHCTB4NEMKKyNkZWZpbmUJUENJX0lERV9FVENfUkVHCQkweDUwCisjZGVmaW5lCVBDSV9JREVfUE1fUkVHCQkweDU0CisjZGVmaW5lCVBDSV9JREVfSU5UX1JFRwkJMHg2MAorCisvKgorICogQUNDIEVYUEFOU0lPTgorICovCisjZGVmaW5lCVBDSV9BQ0NfSU5UX1JFRwkJMHg1MAorCisvKgorICogT0hDSSBFWFBBTlNJT04gOiBJTlRURVJVUFQgSVMgSU1QTEVNRU5URUQgQlkgVEhFIE9IQ0kKKyAqLworI2RlZmluZQlQQ0lfT0hDSV9QTV9SRUcJCTB4NDAKKyNkZWZpbmUJUENJX09IQ0lfSU5UX1JFRwkweDUwCisKKy8qCisgKiBFSENJIEVYUEFOU0lPTgorICovCisjZGVmaW5lCVBDSV9FSENJX0xFR1NNSUVOX1JFRwkweDUwCisjZGVmaW5lCVBDSV9FSENJX0xFR1NNSVNUU19SRUcJMHg1NAorI2RlZmluZQlQQ0lfRUhDSV9GTEFESl9SRUcJMHg2MAorCisjZW5kaWYJCQkJLyogX0NTNTUzNl9QQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDViZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiB0aGUgcmVhZC93cml0ZSBpbnRlcmZhY2VzIGZvciBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlKFZTTSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKi8KKworI2lmbmRlZglfQ1M1NTM2X1ZTTV9ICisjZGVmaW5lCV9DUzU1MzZfVlNNX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdm9pZCAoKmNzNTUzNl9wY2lfdnNtX3dyaXRlKShpbnQgcmVnLCB1MzIgdmFsdWUpOwordHlwZWRlZiB1MzIgKCpjczU1MzZfcGNpX3ZzbV9yZWFkKShpbnQgcmVnKTsKKworI2RlZmluZSBERUNMQVJFX0NTNTUzNl9NT0RVTEUobmFtZSkgXAorZXh0ZXJuIHZvaWQgcGNpXyMjbmFtZSMjX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsdWUpOyBcCitleHRlcm4gdTMyIHBjaV8jI25hbWUjI19yZWFkX3JlZyhpbnQgcmVnKTsKKworLyogaWRlIG1vZHVsZSAqLworREVDTEFSRV9DUzU1MzZfTU9EVUxFKGlkZSkKKy8qIGFjYyBtb2R1bGUgKi8KK0RFQ0xBUkVfQ1M1NTM2X01PRFVMRShhY2MpCisvKiBvaGNpIG1vZHVsZSAqLworREVDTEFSRV9DUzU1MzZfTU9EVUxFKG9oY2kpCisvKiBpc2EgbW9kdWxlICovCitERUNMQVJFX0NTNTUzNl9NT0RVTEUoaXNhKQorLyogZWhjaSBtb2R1bGUgKi8KK0RFQ0xBUkVfQ1M1NTM2X01PRFVMRShlaGNpKQorCisjZW5kaWYJCQkJLyogX0NTNTUzNl9WU01fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vZG1hLWNvaGVyZW5jZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vZG1hLWNvaGVyZW5jZS5oCmluZGV4IDcxYTY4NTEuLjk4MWM3NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2RtYS1jb2hlcmVuY2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9kbWEtY29oZXJlbmNlLmgKQEAgLTI4LDcgKzI4LDExIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGxhdF9kbWFfYWRkcl90b19waHlzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlkbWFfYWRkcl90IGRtYV9hZGRyKQogeworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9MT09OR1NPTjJGKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkKKwlyZXR1cm4gKGRtYV9hZGRyID4gMHg4ZmZmZmZmZikgPyBkbWFfYWRkciA6IChkbWFfYWRkciAmIDB4MGZmZmZmZmYpOworI2Vsc2UKIAlyZXR1cm4gZG1hX2FkZHIgJiAweDdmZmZmZmZmOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbGF0X3VubWFwX2RtYV9tZW0oc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKaW5kZXggZGE3MGJjZi4uZWU4YmM4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KICAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTE1LDkgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotLyogdGhlcmUgaXMgYW4gaW50ZXJuYWwgYm9uaXRvNjQtY29tcGF0aWFibGUgbm9ydGhicmlkZ2UgaW4gbG9vbmdzb24yZS8yZiAqLwotI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oPgotCiAvKiBsb29uZ3NvbiBpbnRlcm5hbCBub3J0aGJyaWRnZSBpbml0aWFsaXphdGlvbiAqLwogZXh0ZXJuIHZvaWQgYm9uaXRvX2lycV9pbml0KHZvaWQpOwogCkBAIC0zMiw3ICsyOSwxOSBAQAogLyogbG9vbmdzb24tc3BlY2lmaWMgY29tbWFuZCBsaW5lLCBlbnYgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqLwogZXh0ZXJuIHZvaWQgX19pbml0IHByb21faW5pdF9tZW1vcnkodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHJvbV9pbml0X21hY2h0eXBlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHByb21faW5pdF9lbnYodm9pZCk7CisjaWZkZWYgQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2xvb25nc29uX3VhcnRfYmFzZSwgbG9vbmdzb25fdWFydF9iYXNlOworZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2xvb25nc29uX3VhcnRfYmFzZSh2b2lkKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvbV9pbml0X3VhcnRfYmFzZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0UKKwlwcm9tX2luaXRfbG9vbmdzb25fdWFydF9iYXNlKCk7CisjZW5kaWYKK30KIAogLyogaXJxIG9wZXJhdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIGJvbml0b19pcnFkaXNwYXRjaCh2b2lkKTsKQEAgLTQwLDI1ICs0OSwyNzYgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBzZXRfaXJxX3RyaWdnZXJfbW9kZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBtYWNoX2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFjaF9pcnFfZGlzcGF0Y2godW5zaWduZWQgaW50IHBlbmRpbmcpOworZXh0ZXJuIGludCBtYWNoX2k4MjU5X2lycSh2b2lkKTsKKworLyogV2UgbmVlZCB0aGlzIGluIHNvbWUgcGxhY2VzLi4uICovCisjZGVmaW5lIGRlbGF5KCkJKHsJCVwKKwlpbnQgeDsJCQkJXAorCWZvciAoeCA9IDA7IHggPCAxMDAwMDA7IHgrKykJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIik7IFwKK30pCisKKyNkZWZpbmUgTE9PTkdTT05fUkVHKHgpIFwKKwkoKih2b2xhdGlsZSB1MzIgKikoKGNoYXIgKilDS1NFRzFBRERSKExPT05HU09OX1JFR19CQVNFKSArICh4KSkpCisKKyNkZWZpbmUgTE9PTkdTT05fSVJRX0JBU0UJMzIKKyNkZWZpbmUgTE9PTkdTT04yX1BFUkZDTlRfSVJRCShNSVBTX0NQVV9JUlFfQkFTRSArIDYpIC8qIGNwdSBwZXJmIGNvdW50ZXIgKi8KKworI2RlZmluZSBMT09OR1NPTl9GTEFTSF9CQVNFCTB4MWMwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fRkxBU0hfU0laRQkweDAyMDAwMDAwCS8qIDMyTSAqLworI2RlZmluZSBMT09OR1NPTl9GTEFTSF9UT1AJKExPT05HU09OX0ZMQVNIX0JBU0UrTE9PTkdTT05fRkxBU0hfU0laRS0xKQorCisjZGVmaW5lIExPT05HU09OX0xJTzBfQkFTRQkweDFlMDAwMDAwCisjZGVmaW5lIExPT05HU09OX0xJTzBfU0laRQkweDAxQzAwMDAwCS8qIDI4TSAqLworI2RlZmluZSBMT09OR1NPTl9MSU8wX1RPUAkoTE9PTkdTT05fTElPMF9CQVNFK0xPT05HU09OX0xJTzBfU0laRS0xKQorCisjZGVmaW5lIExPT05HU09OX0JPT1RfQkFTRQkweDFmYzAwMDAwCisjZGVmaW5lIExPT05HU09OX0JPT1RfU0laRQkweDAwMTAwMDAwCS8qIDFNICovCisjZGVmaW5lIExPT05HU09OX0JPT1RfVE9QIAkoTE9PTkdTT05fQk9PVF9CQVNFK0xPT05HU09OX0JPT1RfU0laRS0xKQorI2RlZmluZSBMT09OR1NPTl9SRUdfQkFTRSAJMHgxZmUwMDAwMAorI2RlZmluZSBMT09OR1NPTl9SRUdfU0laRSAJMHgwMDEwMDAwMAkvKiAyNTZCeXRlcyArIDI1NkJ5dGVzICsgPz8/ICovCisjZGVmaW5lIExPT05HU09OX1JFR19UT1AJKExPT05HU09OX1JFR19CQVNFK0xPT05HU09OX1JFR19TSVpFLTEpCisKKyNkZWZpbmUgTE9PTkdTT05fTElPMV9CQVNFIAkweDFmZjAwMDAwCisjZGVmaW5lIExPT05HU09OX0xJTzFfU0laRSAJMHgwMDEwMDAwMAkvKiAxTSAqLworI2RlZmluZSBMT09OR1NPTl9MSU8xX1RPUAkoTE9PTkdTT05fTElPMV9CQVNFK0xPT05HU09OX0xJTzFfU0laRS0xKQorCisjZGVmaW5lIExPT05HU09OX1BDSUxPMF9CQVNFCTB4MTAwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJTE8xX0JBU0UJMHgxNDAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lMTzJfQkFTRQkweDE4MDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUxPX0JBU0UJTE9PTkdTT05fUENJTE8wX0JBU0UKKyNkZWZpbmUgTE9PTkdTT05fUENJTE9fU0laRQkweDBjMDAwMDAwCS8qIDY0TSAqIDMgKi8KKyNkZWZpbmUgTE9PTkdTT05fUENJTE9fVE9QCShMT09OR1NPTl9QQ0lMTzBfQkFTRStMT09OR1NPTl9QQ0lMT19TSVpFLTEpCisKKyNkZWZpbmUgTE9PTkdTT05fUENJQ0ZHX0JBU0UJMHgxZmU4MDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lDRkdfU0laRQkweDAwMDAwODAwCS8qIDJLICovCisjZGVmaW5lIExPT05HU09OX1BDSUNGR19UT1AJKExPT05HU09OX1BDSUNGR19CQVNFK0xPT05HU09OX1BDSUNGR19TSVpFLTEpCisjZGVmaW5lIExPT05HU09OX1BDSUlPX0JBU0UJMHgxZmQwMDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lJT19TSVpFCTB4MDAxMDAwMDAJLyogMU0gKi8KKyNkZWZpbmUgTE9PTkdTT05fUENJSU9fVE9QCShMT09OR1NPTl9QQ0lJT19CQVNFK0xPT05HU09OX1BDSUlPX1NJWkUtMSkKKworLyogTG9vbmdzb24gUmVnaXN0ZXIgQmFzZXMgKi8KKworI2RlZmluZSBMT09OR1NPTl9QQ0lDT05GSUdCQVNFCTB4MDAKKyNkZWZpbmUgTE9PTkdTT05fUkVHQkFTRQkweDEwMAogCiAvKiBQQ0kgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgTE9PTkdTT05fUENJX0lTUjRDICBCT05JVE9fUENJX1JFRygweDRjKQorCisjZGVmaW5lIExPT05HU09OX1BDSV9SRUcoeCkJTE9PTkdTT05fUkVHKExPT05HU09OX1BDSUNPTkZJR0JBU0UgKyAoeCkpCisjZGVmaW5lIExPT05HU09OX1BDSURJRAkJTE9PTkdTT05fUENJX1JFRygweDAwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lDTUQJCUxPT05HU09OX1BDSV9SRUcoMHgwNCkKKyNkZWZpbmUgTE9PTkdTT05fUENJQ0xBU1MgCUxPT05HU09OX1BDSV9SRUcoMHgwOCkKKyNkZWZpbmUgTE9PTkdTT05fUENJTFRJTUVSCUxPT05HU09OX1BDSV9SRUcoMHgwYykKKyNkZWZpbmUgTE9PTkdTT05fUENJQkFTRTAgCUxPT05HU09OX1BDSV9SRUcoMHgxMCkKKyNkZWZpbmUgTE9PTkdTT05fUENJQkFTRTEgCUxPT05HU09OX1BDSV9SRUcoMHgxNCkKKyNkZWZpbmUgTE9PTkdTT05fUENJQkFTRTIgCUxPT05HU09OX1BDSV9SRUcoMHgxOCkKKyNkZWZpbmUgTE9PTkdTT05fUENJQkFTRTMgCUxPT05HU09OX1BDSV9SRUcoMHgxYykKKyNkZWZpbmUgTE9PTkdTT05fUENJQkFTRTQgCUxPT05HU09OX1BDSV9SRUcoMHgyMCkKKyNkZWZpbmUgTE9PTkdTT05fUENJRVhQUkJBU0UJTE9PTkdTT05fUENJX1JFRygweDMwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lJTlQJCUxPT05HU09OX1BDSV9SRUcoMHgzYykKKworI2RlZmluZSBMT09OR1NPTl9QQ0lfSVNSNEMJTE9PTkdTT05fUENJX1JFRygweDRjKQorCisjZGVmaW5lIExPT05HU09OX1BDSUNNRF9QRVJSX0NMUgkweDgwMDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUNNRF9TRVJSX0NMUgkweDQwMDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUNNRF9NQUJPUlRfQ0xSCTB4MjAwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX01UQUJPUlRfQ0xSCTB4MTAwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX1RBQk9SVF9DTFIJMHgwODAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lDTURfTVBFUlJfQ0xSIAkweDAxMDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUNNRF9QRVJSUkVTUEVOCTB4MDAwMDAwNDAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX0FTVEVQRU4JCTB4MDAwMDAwODAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX1NFUlJFTgkJMHgwMDAwMDEwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lMVElNRVJfQlVTTEFURU5DWQkweDAwMDBmZjAwCisjZGVmaW5lIExPT05HU09OX1BDSUxUSU1FUl9CVVNMQVRFTkNZX1NISUZUCTgKKworLyogTG9vbmdzb24gaC93IENvbmZpZ3VyYXRpb24gKi8KKworI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfT0ZGU0VUCQkweDQKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgTE9PTkdTT05fR0VOQ0ZHX09GRlNFVCkKKworI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfREVCVUdNT0RFCTB4MDAwMDAwMDEKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX1NOT09QRU4JCTB4MDAwMDAwMDIKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0NQVVNFTEZSRVNFVAkweDAwMDAwMDA0CisKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0ZPUkNFX0lSUUEJMHgwMDAwMDAwOAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfSVJRQV9JU09VVAkweDAwMDAwMDEwCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19JUlFBX0ZST01fSU5UMQkweDAwMDAwMDIwCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19CWVRFU1dBUAkweDAwMDAwMDQwCisKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX1VOQ0FDSEVECTB4MDAwMDAwODAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX1BSRUZFVENIRU4JMHgwMDAwMDEwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfV0JFSElOREVOCTB4MDAwMDAyMDAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0NBQ0hFQUxHCTB4MDAwMDBjMDAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0NBQ0hFQUxHX1NISUZUCTEwCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19QQ0lRVUVVRQkweDAwMDAxMDAwCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19DQUNIRVNUT1AJMHgwMDAwMjAwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfTVNUUkJZVEVTV0FQCTB4MDAwMDQwMDAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0JVU0VSUkVOCTB4MDAwMDgwMDAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX05PUkVUUllUSU1FT1VUCTB4MDAwMTAwMDAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX1NIT1JUQ09QWVRJTUVPVVQJMHgwMDAyMDAwMAorCisvKiBQQ0kgYWRkcmVzcyBtYXAgY29udHJvbCAqLworCisjZGVmaW5lIExPT05HU09OX1BDSU1BUAkJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgxMCkKKyNkZWZpbmUgTE9PTkdTT05fUENJTUVNQkFTRUNGRwkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDE0KQorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfQ0ZHCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MTgpCisKKy8qIEdQSU8gUmVncyAtIHIvdyAqLworCisjZGVmaW5lIExPT05HU09OX0dQSU9EQVRBIAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDFjKQorI2RlZmluZSBMT09OR1NPTl9HUElPSUUJCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MjApCisKKy8qIElDVSBDb25maWd1cmF0aW9uIFJlZ3MgLSByL3cgKi8KKworI2RlZmluZSBMT09OR1NPTl9JTlRFREdFCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MjQpCisjZGVmaW5lIExPT05HU09OX0lOVFNURUVSIAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDI4KQorI2RlZmluZSBMT09OR1NPTl9JTlRQT0wJCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MmMpCisKKy8qIElDVSBFbmFibGUgUmVncyAtIEludEVuICYgSW50SVNSIGFyZSByL28uICovCisKKyNkZWZpbmUgTE9PTkdTT05fSU5URU5TRVQgCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MzApCisjZGVmaW5lIExPT05HU09OX0lOVEVOQ0xSIAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDM0KQorI2RlZmluZSBMT09OR1NPTl9JTlRFTgkJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgzOCkKKyNkZWZpbmUgTE9PTkdTT05fSU5USVNSCQkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDNjKQorCisvKiBJQ1UgKi8KKyNkZWZpbmUgTE9PTkdTT05fSUNVX01CT1hFUwkJMHgwMDAwMDAwZgorI2RlZmluZSBMT09OR1NPTl9JQ1VfTUJPWEVTX1NISUZUIAkwCisjZGVmaW5lIExPT05HU09OX0lDVV9ETUFSRFkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0RNQUVNUFRZCQkweDAwMDAwMDIwCisjZGVmaW5lIExPT05HU09OX0lDVV9DT1BZUkRZCQkweDAwMDAwMDQwCisjZGVmaW5lIExPT05HU09OX0lDVV9DT1BZRU1QVFkJCTB4MDAwMDAwODAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0NPUFlFUlIJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX1BDSUlSUQkJMHgwMDAwMDIwMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfTUFTVEVSRVJSCQkweDAwMDAwNDAwCisjZGVmaW5lIExPT05HU09OX0lDVV9TWVNURU1FUlIJCTB4MDAwMDA4MDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0RSQU1QRVJSCQkweDAwMDAxMDAwCisjZGVmaW5lIExPT05HU09OX0lDVV9SRVRSWUVSUgkJMHgwMDAwMjAwMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfR1BJT1MJCTB4MDFmZjAwMDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0dQSU9TX1NISUZUCQkxNgorI2RlZmluZSBMT09OR1NPTl9JQ1VfR1BJTlMJCTB4N2UwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0dQSU5TX1NISUZUCQkyNQorI2RlZmluZSBMT09OR1NPTl9JQ1VfTUJPWChOKQkJKDE8PChMT09OR1NPTl9JQ1VfTUJPWEVTX1NISUZUKyhOKSkpCisjZGVmaW5lIExPT05HU09OX0lDVV9HUElPKE4pCQkoMTw8KExPT05HU09OX0lDVV9HUElPU19TSElGVCsoTikpKQorI2RlZmluZSBMT09OR1NPTl9JQ1VfR1BJTihOKQkJKDE8PChMT09OR1NPTl9JQ1VfR1BJTlNfU0hJRlQrKE4pKSkKKworLyogUENJIHByZWZldGNoIHdpbmRvdyBiYXNlICYgbWFzayAqLworCisjZGVmaW5lIExPT05HU09OX01FTV9XSU5fQkFTRV9MIAlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4NDApCisjZGVmaW5lIExPT05HU09OX01FTV9XSU5fQkFTRV9IIAlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4NDQpCisjZGVmaW5lIExPT05HU09OX01FTV9XSU5fTUFTS19MIAlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4NDgpCisjZGVmaW5lIExPT05HU09OX01FTV9XSU5fTUFTS19IIAlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4NGMpCiAKIC8qIFBDSV9IaXQqX1NlbF8qICovCiAKLSNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDBfU0VMX0wgICAgIEJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NTApCi0jZGVmaW5lIExPT05HU09OX1BDSV9ISVQwX1NFTF9IICAgICBCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDU0KQotI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMV9TRUxfTCAgICAgQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg1OCkKLSNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDFfU0VMX0ggICAgIEJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NWMpCi0jZGVmaW5lIExPT05HU09OX1BDSV9ISVQyX1NFTF9MICAgICBCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDYwKQotI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMl9TRUxfSCAgICAgQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg2NCkKKyNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDBfU0VMX0wJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg1MCkKKyNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDBfU0VMX0gJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg1NCkKKyNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDFfU0VMX0wJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg1OCkKKyNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDFfU0VMX0gJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg1YykKKyNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDJfU0VMX0wJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg2MCkKKyNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDJfU0VMX0gJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg2NCkKIAogLyogUFhBcmIgQ29uZmlnICYgU3RhdHVzICovCiAKLSNkZWZpbmUgTE9PTkdTT05fUFhBUkJfQ0ZHICAgICAgQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg2OCkKLSNkZWZpbmUgTE9PTkdTT05fUFhBUkJfU1RBVFVTICAgICAgIEJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NmMpCisjZGVmaW5lIExPT05HU09OX1BYQVJCX0NGRwkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDY4KQorI2RlZmluZSBMT09OR1NPTl9QWEFSQl9TVEFUVVMJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg2YykKIAotLyogbG9vbmdzb24yLXNwZWNpZmljIHBlcmYgY291bnRlciBJUlEgKi8KLSNkZWZpbmUgTE9PTkdTT04yX1BFUkZDTlRfSVJRICAgKE1JUFNfQ1BVX0lSUV9CQVNFICsgNikKKy8qIHBjaW1hcCAqLworCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9QQ0lNQVBfTE8wCTB4MDAwMDAwM2YKKyNkZWZpbmUgTE9PTkdTT05fUENJTUFQX1BDSU1BUF9MTzBfU0hJRlQJMAorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQX0xPMQkweDAwMDAwZmMwCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9QQ0lNQVBfTE8xX1NISUZUCTYKKyNkZWZpbmUgTE9PTkdTT05fUENJTUFQX1BDSU1BUF9MTzIJMHgwMDAzZjAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQX0xPMl9TSElGVAkxMgorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQXzIJMHgwMDA0MDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfV0lOKFdJTiwgQUREUikJXAorCSgoKChBRERSKT4+MjYpICYgTE9PTkdTT05fUENJTUFQX1BDSU1BUF9MTzApIDw8ICgoV0lOKSo2KSkKKworI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQ1BVRlJFUQorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KK2V4dGVybiB2b2lkIGxvb25nc29uMl9jcHVfd2FpdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgbG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW107CisKKy8qIENoaXAgQ29uZmlnICovCisjZGVmaW5lIExPT05HU09OX0NISVBDRkcwCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4ODApCisjZW5kaWYKKworLyoKKyAqIGFkZHJlc3Mgd2luZG93cyBjb25maWd1cmF0aW9uIG1vZHVsZQorICoKKyAqIGxvb25nc29uMmUgZG8gbm90IGhhdmUgdGhpcyBtb2R1bGUKKyAqLworI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRworCisvKiBhZGRyZXNzIHdpbmRvdyBjb25maWcgbW9kdWxlIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBMT09OR1NPTl9BRERSV0lOQ0ZHX0JBU0UJCTB4M2ZmMDAwMDB1bAorI2RlZmluZSBMT09OR1NPTl9BRERSV0lOQ0ZHX1NJWkUJCTB4MTgwCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9sb29uZ3Nvbl9hZGRyd2luY2ZnX2Jhc2U7CisjZGVmaW5lIExPT05HU09OX0FERFJXSU5DRkcob2Zmc2V0KSBcCisJKCoodm9sYXRpbGUgdTY0ICopKF9sb29uZ3Nvbl9hZGRyd2luY2ZnX2Jhc2UgKyAob2Zmc2V0KSkpCisKKyNkZWZpbmUgQ1BVX1dJTjBfQkFTRQlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4MDApCisjZGVmaW5lIENQVV9XSU4xX0JBU0UJTE9PTkdTT05fQUREUldJTkNGRygweDA4KQorI2RlZmluZSBDUFVfV0lOMl9CQVNFCUxPT05HU09OX0FERFJXSU5DRkcoMHgxMCkKKyNkZWZpbmUgQ1BVX1dJTjNfQkFTRQlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4MTgpCisKKyNkZWZpbmUgQ1BVX1dJTjBfTUFTSwlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4MjApCisjZGVmaW5lIENQVV9XSU4xX01BU0sJTE9PTkdTT05fQUREUldJTkNGRygweDI4KQorI2RlZmluZSBDUFVfV0lOMl9NQVNLCUxPT05HU09OX0FERFJXSU5DRkcoMHgzMCkKKyNkZWZpbmUgQ1BVX1dJTjNfTUFTSwlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4MzgpCisKKyNkZWZpbmUgQ1BVX1dJTjBfTU1BUAlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4NDApCisjZGVmaW5lIENQVV9XSU4xX01NQVAJTE9PTkdTT05fQUREUldJTkNGRygweDQ4KQorI2RlZmluZSBDUFVfV0lOMl9NTUFQCUxPT05HU09OX0FERFJXSU5DRkcoMHg1MCkKKyNkZWZpbmUgQ1BVX1dJTjNfTU1BUAlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4NTgpCisKKyNkZWZpbmUgUENJRE1BX1dJTjBfQkFTRQlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4NjApCisjZGVmaW5lIFBDSURNQV9XSU4xX0JBU0UJTE9PTkdTT05fQUREUldJTkNGRygweDY4KQorI2RlZmluZSBQQ0lETUFfV0lOMl9CQVNFCUxPT05HU09OX0FERFJXSU5DRkcoMHg3MCkKKyNkZWZpbmUgUENJRE1BX1dJTjNfQkFTRQlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4NzgpCisKKyNkZWZpbmUgUENJRE1BX1dJTjBfTUFTSwlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4ODApCisjZGVmaW5lIFBDSURNQV9XSU4xX01BU0sJTE9PTkdTT05fQUREUldJTkNGRygweDg4KQorI2RlZmluZSBQQ0lETUFfV0lOMl9NQVNLCUxPT05HU09OX0FERFJXSU5DRkcoMHg5MCkKKyNkZWZpbmUgUENJRE1BX1dJTjNfTUFTSwlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4OTgpCisKKyNkZWZpbmUgUENJRE1BX1dJTjBfTU1BUAlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4YTApCisjZGVmaW5lIFBDSURNQV9XSU4xX01NQVAJTE9PTkdTT05fQUREUldJTkNGRygweGE4KQorI2RlZmluZSBQQ0lETUFfV0lOMl9NTUFQCUxPT05HU09OX0FERFJXSU5DRkcoMHhiMCkKKyNkZWZpbmUgUENJRE1BX1dJTjNfTU1BUAlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4YjgpCisKKyNkZWZpbmUgQUREUldJTl9XSU4wCTAKKyNkZWZpbmUgQUREUldJTl9XSU4xCTEKKyNkZWZpbmUgQUREUldJTl9XSU4yCTIKKyNkZWZpbmUgQUREUldJTl9XSU4zCTMKKworI2RlZmluZSBBRERSV0lOX01BUF9EU1RfRERSCTAKKyNkZWZpbmUgQUREUldJTl9NQVBfRFNUX1BDSQkxCisjZGVmaW5lIEFERFJXSU5fTUFQX0RTVF9MSU8JMQorCisvKgorICogczogQ1BVLCBQQ0lETUEKKyAqIGQ6IEREUiwgUENJLCBMSU8KKyAqIHdpbjogMCwgMSwgMiwgMworICogc3JjOiBtYXAgc291cmNlCisgKiBkc3Q6IG1hcCBkZXN0aW5hdGlvbgorICogc2l6ZTogfm1hc2sgKyAxCisgKi8KKyNkZWZpbmUgTE9PTkdTT05fQUREUldJTl9DRkcocywgZCwgdywgc3JjLCBkc3QsIHNpemUpIGRvIHtcCisJcyMjX1dJTiMjdyMjX0JBU0UgPSAoc3JjKTsgXAorCXMjI19XSU4jI3cjI19NTUFQID0gKHNyYykgfCBBRERSV0lOX01BUF9EU1RfIyNkOyBcCisJcyMjX1dJTiMjdyMjX01BU0sgPSB+KHNpemUtMSk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgTE9PTkdTT05fQUREUldJTl9DUFVUT1BDSSh3aW4sIHNyYywgZHN0LCBzaXplKSBcCisJTE9PTkdTT05fQUREUldJTl9DRkcoQ1BVLCBQQ0ksIHdpbiwgc3JjLCBkc3QsIHNpemUpCisjZGVmaW5lIExPT05HU09OX0FERFJXSU5fQ1BVVE9ERFIod2luLCBzcmMsIGRzdCwgc2l6ZSkgXAorCUxPT05HU09OX0FERFJXSU5fQ0ZHKENQVSwgRERSLCB3aW4sIHNyYywgZHN0LCBzaXplKQorI2RlZmluZSBMT09OR1NPTl9BRERSV0lOX1BDSVRPRERSKHdpbiwgc3JjLCBkc3QsIHNpemUpIFwKKwlMT09OR1NPTl9BRERSV0lOX0NGRyhQQ0lETUEsIEREUiwgd2luLCBzcmMsIGRzdCwgc2l6ZSkKKworI2VuZGlmCS8qICEgQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHICovCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0xPT05HU09OX0xPT05HU09OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaAppbmRleCAyMDZlYTIwLi5hY2Y4MzU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCkBAIC0xMywxMCArMTMsMTUgQEAKIAogI2lmZGVmIENPTkZJR19MRU1PVEVfRlVMT09ORzJFCiAKLSNkZWZpbmUgTE9PTkdTT05fVUFSVF9CQVNFIChCT05JVE9fUENJSU9fQkFTRSArIDB4M2Y4KQotCiAjZGVmaW5lIExPT05HU09OX01BQ0hUWVBFIE1BQ0hfTEVNT1RFX0ZMMkUKIAogI2VuZGlmCiAKKy8qIHVzZSBmdWxvb25nMmYgYXMgdGhlIGRlZmF1bHQgbWFjaGluZSBvZiBMRU1PVEVfTUFDSDJGICovCisjaWZkZWYgQ09ORklHX0xFTU9URV9NQUNIMkYKKworI2RlZmluZSBMT09OR1NPTl9NQUNIVFlQRSBNQUNIX0xFTU9URV9GTDJGCisKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BU01fTUFDSF9MT09OR1NPTl9NQUNISU5FX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmgKaW5kZXggYmQ3YjNjYi4uZTk5NjBmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgogICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTIsMTkgKzEyLDMwIEBACiAjZGVmaW5lIF9fQVNNX01BQ0hfTE9PTkdTT05fTUVNX0gKIAogLyoKLSAqIE9uIExlbW90ZSBMb29uZ3NvbiAyZQorICogaGlnaCBtZW1vcnkgc3BhY2UKICAqCi0gKiB0aGUgaGlnaCBtZW1vcnkgc3BhY2Ugc3RhcnRzIGZyb20gNTEyTS4KLSAqIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyByZXNpZGUgYmV0d2VlbiAweDEwMDA6MDAwMCBhbmQgMHgyMDAwOjAwMDAuCisgKiBpbiBsb29uZ3NvbjJlLCBzdGFydHMgZnJvbSA1MTJNCisgKiBpbiBsb29uZ3NvbjJmLCBzdGFydHMgZnJvbSAyRyAyNTZNCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0xPT05HU09OMkUKKyNkZWZpbmUgTE9PTkdTT05fSElHSE1FTV9TVEFSVAkweDIwMDAwMDAwCisjZWxzZQorI2RlZmluZSBMT09OR1NPTl9ISUdITUVNX1NUQVJUCTB4OTAwMDAwMDAKKyNlbmRpZgorCisvKgorICogdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzKE1NSU8pOgorICoKKyAqIE9uIHRoZSBMZW1vdGUgTG9vbmdzb24gMmUgc3lzdGVtLCByZXNpZGUgYmV0d2VlbiAweDEwMDA6MDAwMCBhbmQgMHgyMDAwOjAwMDAuCisgKiBPbiB0aGUgTGVtb3RlIExvb25nc29uIDJmIHN5c3RlbSwgcmVzaWRlIGJldHdlZW4gMHgxMDAwOjAwMDAgYW5kIDB4ODAwMDowMDAwLgogICovCiAKLSNpZmRlZiBDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRQotCi0jZGVmaW5lIExPT05HU09OX0hJR0hNRU1fU1RBUlQgIDB4MjAwMDAwMDAKLQogI2RlZmluZSBMT09OR1NPTl9NTUlPX01FTV9TVEFSVCAweDEwMDAwMDAwCi0jZGVmaW5lIExPT05HU09OX01NSU9fTUVNX0VORCAgIDB4MjAwMDAwMDAKIAorI2lmZGVmIENPTkZJR19DUFVfTE9PTkdTT04yRQorI2RlZmluZSBMT09OR1NPTl9NTUlPX01FTV9FTkQJMHgyMDAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgTE9PTkdTT05fTU1JT19NRU1fRU5ECTB4ODAwMDAwMDAKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fTUFDSF9MT09OR1NPTl9NRU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vcGNpLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaAppbmRleCBmMTY2M2NhLi5hMTk5YTRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDggWmhhbmcgTGUgPHIwYmVydHpAZ2VudG9vLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAogICogYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCkBAIC0yMiwxNiArMjMsMzkgQEAKICNpZm5kZWYgX19BU01fTUFDSF9MT09OR1NPTl9QQ0lfSF8KICNkZWZpbmUgX19BU01fTUFDSF9MT09OR1NPTl9QQ0lfSF8KIAotZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGJvbml0bzY0X3BjaV9vcHM7CitleHRlcm4gc3RydWN0IHBjaV9vcHMgbG9vbmdzb25fcGNpX29wczsKIAotI2lmZGVmIENPTkZJR19MRU1PVEVfRlVMT09ORzJFCi0KLS8qIHRoaXMgcGNpIG1lbW9yeSBzcGFjZSBpcyBtYXBwZWQgYnkgcGNpbWFwIGluIHBjaS5jICovCi0jZGVmaW5lIExPT05HU09OX1BDSV9NRU1fU1RBUlQJQk9OSVRPX1BDSUxPMV9CQVNFCi0jZGVmaW5lIExPT05HU09OX1BDSV9NRU1fRU5ECShCT05JVE9fUENJTE8xX0JBU0UgKyAweDA0MDAwMDAwICogMikKIC8qIHRoaXMgaXMgYW4gb2Zmc2V0IGZyb20gbWlwc19pb19wb3J0X2Jhc2UgKi8KICNkZWZpbmUgTE9PTkdTT05fUENJX0lPX1NUQVJUCTB4MDAwMDQwMDBVTAogCi0jZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcKKworLyoKKyAqIHdlIHVzZSBhZGRyZXNzIHdpbmRvdzIgdG8gbWFwIGNwdSBhZGRyZXNzIHNwYWNlIHRvIHBjaSBzcGFjZQorICogd2luZG93MjogY3B1IFsxRywgMkddIC0+IHBjaSBbMUcsIDJHXQorICogd2h5IG5vdCB1c2Ugd2luZG93IDAgJiAxPyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYnkgY3B1IHdoZW4gYm9vdGluZy4KKyAqIHdpbmRvdzA6IGNwdSBbMCwgMjU2TV0gLT4gZGRyIFswLCAyNTZNXQorICogd2luZG93MTogY3B1IFsyNTZNLCA1MTJNXSAtPiBwY2kgWzI1Nk0sIDUxMk1dCisgKi8KKworLyogdGhlIHNtYWxsZXN0IExPT05HU09OX0NQVV9NRU1fU1JDIGNhbiBiZSA1MTJNICovCisjZGVmaW5lIExPT05HU09OX0NQVV9NRU1fU1JDCTB4NDAwMDAwMDB1bAkJLyogMUcgKi8KKyNkZWZpbmUgTE9PTkdTT05fUENJX01FTV9EU1QJTE9PTkdTT05fQ1BVX01FTV9TUkMKKworI2RlZmluZSBMT09OR1NPTl9QQ0lfTUVNX1NUQVJUCUxPT05HU09OX1BDSV9NRU1fRFNUCisjZGVmaW5lIExPT05HU09OX1BDSV9NRU1fRU5ECSgweDgwMDAwMDAwdWwtMSkJLyogMkcgKi8KKworI2RlZmluZSBNTUFQX0NQVVRPUENJX1NJWkUJKExPT05HU09OX1BDSV9NRU1fRU5EIC0gXAorCQkJCQlMT09OR1NPTl9QQ0lfTUVNX1NUQVJUICsgMSkKKworI2Vsc2UJLyogbG9vbmdzb24yZi8zMmJpdCAmIGxvb25nc29uMmUgKi8KKworLyogdGhpcyBwY2kgbWVtb3J5IHNwYWNlIGlzIG1hcHBlZCBieSBwY2ltYXAgaW4gcGNpLmMgKi8KKyNkZWZpbmUgTE9PTkdTT05fUENJX01FTV9TVEFSVAlMT09OR1NPTl9QQ0lMTzFfQkFTRQorI2RlZmluZSBMT09OR1NPTl9QQ0lfTUVNX0VORAkoTE9PTkdTT05fUENJTE8xX0JBU0UgKyAweDA0MDAwMDAwICogMikKKy8qIHRoaXMgaXMgYW4gb2Zmc2V0IGZyb20gbWlwc19pb19wb3J0X2Jhc2UgKi8KKyNkZWZpbmUgTE9PTkdTT05fUENJX0lPX1NUQVJUCTB4MDAwMDQwMDBVTAorCisjZW5kaWYJLyogIUNPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRyAqLwogCiAjZW5kaWYgLyogIV9fQVNNX01BQ0hfTE9PTkdTT05fUENJX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYWQ0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWMuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX01BQ0hfUE9XRVJUVl9BU0lDX0gKKyNkZWZpbmUgX0FTTV9NQUNIX1BPV0VSVFZfQVNJQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVncy5oPgorCisjZGVmaW5lIERWUl9DQVBBQkxFICAgICAoMTw8MCkKKyNkZWZpbmUgUENJRV9DQVBBQkxFICAgICgxPDwxKQorI2RlZmluZSBGRlNfQ0FQQUJMRSAgICAgKDE8PDIpCisjZGVmaW5lIERJU1BMQVlfQ0FQQUJMRSAoMTw8MykKKworLyogUGxhdGZvcm0gRmFtaWx5IHR5cGVzCisgKiBGb3IgY29tcGl0YWJpbGl0eSwgdGhlIG5ldyB2YWx1ZSBtdXN0IGJlIGFkZGVkIGluIHRoZSBlbmQgKi8KK2VudW0gZmFtaWx5X3R5cGUgeworCUZBTUlMWV84NTAwLAorCUZBTUlMWV84NTAwUk5HLAorCUZBTUlMWV80NTAwLAorCUZBTUlMWV8xNTAwLAorCUZBTUlMWV84NjAwLAorCUZBTUlMWV80NjAwLAorCUZBTUlMWV80NjAwVlpBLAorCUZBTUlMWV84NjAwVlpCLAorCUZBTUlMWV8xNTAwVlpFLAorCUZBTUlMWV8xNTAwVlpGLAorCUZBTUlMSUVTCit9OworCisvKiBSZWdpc3RlciBtYXBzIGZvciBlYWNoIEFTSUMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwIGNhbGxpb3BlX3JlZ2lzdGVyX21hcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwIGNyb251c19yZWdpc3Rlcl9tYXA7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCB6ZXVzX3JlZ2lzdGVyX21hcDsKKworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBkdnJfY3JvbnVzX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBkdnJfemV1c19yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl9jYWxsaW9wZV9yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl9jcm9udXNfcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHJlc291cmNlIG5vbl9kdnJfY3JvbnVzbGl0ZV9yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl92el9jYWxsaW9wZV9yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl92emVfY2FsbGlvcGVfcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHJlc291cmNlIG5vbl9kdnJfdnpmX2NhbGxpb3BlX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX3pldXNfcmVzb3VyY2VzW107CisKK2V4dGVybiB2b2lkIHBvd2VydHZfcGxhdGZvcm1faW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX2FsbG9jX2Jvb3RtZW0odm9pZCk7CitleHRlcm4gZW51bSBhc2ljX3R5cGUgcGxhdGZvcm1fZ2V0X2FzaWModm9pZCk7CitleHRlcm4gZW51bSBmYW1pbHlfdHlwZSBwbGF0Zm9ybV9nZXRfZmFtaWx5KHZvaWQpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9zdXBwb3J0c19kdnIodm9pZCk7CitleHRlcm4gaW50IHBsYXRmb3JtX3N1cHBvcnRzX2Zmcyh2b2lkKTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fc3VwcG9ydHNfcGNpZSh2b2lkKTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fc3VwcG9ydHNfZGlzcGxheSh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbmZpZ3VyZV9wbGF0Zm9ybSh2b2lkKTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX2NvbmZpZ3VyZV91c2JfZWhjaSh2b2lkKTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYl9laGNpKHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9vaGNpKHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fdW5jb25maWd1cmVfdXNiX29oY2kodm9pZCk7CisKKy8qIFBsYXRmb3JtIFJlc291cmNlcyAqLworI2RlZmluZSBBU0lDX1JFU09VUkNFX0dFVF9FWElTVFMgMQorZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqYXNpY19yZXNvdXJjZV9nZXQoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV9yZWxlYXNlX21lbW9yeSh2b2lkICpiYWRkciwgaW50IHNpemUpOworCisvKiBSZWJvb3QgQ2F1c2UgKi8KK2V4dGVybiB2b2lkIHNldF9yZWJvb3RfY2F1c2UoY2hhciBjb2RlLCB1bnNpZ25lZCBpbnQgZGF0YSwgdW5zaWduZWQgaW50IGRhdGEyKTsKK2V4dGVybiB2b2lkIHNldF9sb2NrZWRfcmVib290X2NhdXNlKGNoYXIgY29kZSwgdW5zaWduZWQgaW50IGRhdGEsCisJdW5zaWduZWQgaW50IGRhdGEyKTsKKworZW51bSBzeXNfcmVib290X3R5cGUgeworCXN5c191bmtub3duX3JlYm9vdCA9IDB4MDAsCS8qIFVua25vd24gcmVib290IGNhdXNlICovCisJc3lzX2RhdmljX2NoYW5nZSA9IDB4MDEsCS8qIFJlYm9vdCBkdWUgdG8gY2hhbmdlIGluIERBVklDCisJCQkJCSAqIG1vZGUgKi8KKwlzeXNfdXNlcl9yZWJvb3QgPSAweDAyLAkJLyogUmVib290IGluaXRpYXRlZCBieSB1c2VyICovCisJc3lzX3N5c3RlbV9yZWJvb3QgPSAweDAzLAkvKiBSZWJvb3QgaW5pdGlhdGVkIGJ5IE9TICovCisJc3lzX3RyYXBfcmVib290ID0gMHgwNCwJCS8qIFJlYm9vdCBkdWUgdG8gYSBDUFUgdHJhcCAqLworCXN5c19zaWxlbnRfcmVib290ID0gMHgwNSwJLyogU2lsZW50IHJlYm9vdCAqLworCXN5c19ib290X2xkcl9yZWJvb3QgPSAweDA2LAkvKiBCb290bG9hZGVyIHJlYm9vdCAqLworCXN5c19wb3dlcl91cF9yZWJvb3QgPSAweDA3LAkvKiBQb3dlciBvbiBib290dXAuICBPbGRlcgorCQkJCQkgKiBkcml2ZXJzIG1heSByZXBvcnQgYXMKKwkJCQkJICogdXNlclJlYm9vdC4gKi8KKwlzeXNfY29kZV9jaGFuZ2UgPSAweDA4LAkJLyogUmVib290IHRvIHRha2UgY29kZSBjaGFuZ2UuCisJCQkJCSAqIE9sZGVyIGRyaXZlcnMgbWF5IHJlcG9ydCBhcworCQkJCQkgKiB1c2VyUmVib290LiAqLworCXN5c19oYXJkd2FyZV9yZXNldCA9IDB4MDksCS8qIEhXIHdhdGNoZG9nIG9yIGZyb250LXBhbmVsCisJCQkJCSAqIHJlc2V0IGJ1dHRvbiByZXNldC4gIE9sZGVyCisJCQkJCSAqIGRyaXZlcnMgbWF5IHJlcG9ydCBhcworCQkJCQkgKiB1c2VyUmVib290LiAqLworCXN5c193YXRjaGRvZ0ludGVycnVwdCA9IDB4MEEJLyogUHJlLXdhdGNoZG9nIGludGVycnVwdCAqLworfTsKKworI2VuZGlmIC8qIF9BU01fTUFDSF9QT1dFUlRWX0FTSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2NWM5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9QT1dFUlRWX0FTSUNfSF8KKyNkZWZpbmUgX19BU01fTUFDSF9QT1dFUlRWX0FTSUNfSF8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKiBBU0lDIHR5cGVzICovCitlbnVtIGFzaWNfdHlwZSB7CisJQVNJQ19VTktOT1dOLAorCUFTSUNfWkVVUywKKwlBU0lDX0NBTExJT1BFLAorCUFTSUNfQ1JPTlVTLAorCUFTSUNfQ1JPTlVTTElURSwKKwlBU0lDUworfTsKKworLyogaGFyZGNvZGVkIHZhbHVlcyByZWFkIGZyb20gQ2hpcCBWZXJzaW9uIHJlZ2lzdGVycyAqLworI2RlZmluZSBDUk9OVVNfMTAJMHgwQjRDMUMyMAorI2RlZmluZSBDUk9OVVNfMTEJMHgwQjRDMUMyMQorI2RlZmluZSBDUk9OVVNMSVRFXzEwCTB4MEI0QzFDNDAKKworI2RlZmluZSBOQU5EX0ZMQVNIX0JBU0UJMHgwMzAwMDAwMAorI2RlZmluZSBaRVVTX0lPX0JBU0UJMHgwOTAwMDAwMAorI2RlZmluZSBDQUxMSU9QRV9JT19CQVNFCTB4MDgwMDAwMDAKKyNkZWZpbmUgQ1JPTlVTX0lPX0JBU0UJMHgwOTAwMDAwMAorI2RlZmluZSBBU0lDX0lPX1NJWkUJMHgwMTAwMDAwMAorCisvKiBEZWZpbml0aW9ucyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBVQVJUMV9JTlRTVEFUCXVhcnQxX2ludHN0YXQKKyNkZWZpbmUgVUFSVDFfSU5URU4JdWFydDFfaW50ZW4KKyNkZWZpbmUgVUFSVDFfQ09ORklHMQl1YXJ0MV9jb25maWcxCisjZGVmaW5lIFVBUlQxX0NPTkZJRzIJdWFydDFfY29uZmlnMgorI2RlZmluZSBVQVJUMV9ESVZJU09SSEkJdWFydDFfZGl2aXNvcmhpCisjZGVmaW5lIFVBUlQxX0RJVklTT1JMTwl1YXJ0MV9kaXZpc29ybG8KKyNkZWZpbmUgVUFSVDFfREFUQQl1YXJ0MV9kYXRhCisjZGVmaW5lIFVBUlQxX1NUQVRVUwl1YXJ0MV9zdGF0dXMKKworLyogQVNJQyByZWdpc3RlciBlbnVtZXJhdGlvbiAqLworc3RydWN0IHJlZ2lzdGVyX21hcCB7CisJdTMyIGVpY19zbG93MF9zdHJ0X2FkZDsKKwl1MzIgZWljX2NmZ19iaXRzOworCXUzMiBlaWNfcmVhZHlfc3RhdHVzOworCisJdTMyIGNoaXB2ZXIzOworCXUzMiBjaGlwdmVyMjsKKwl1MzIgY2hpcHZlcjE7CisJdTMyIGNoaXB2ZXIwOworCisJdTMyIHVhcnQxX2ludHN0YXQ7CisJdTMyIHVhcnQxX2ludGVuOworCXUzMiB1YXJ0MV9jb25maWcxOworCXUzMiB1YXJ0MV9jb25maWcyOworCXUzMiB1YXJ0MV9kaXZpc29yaGk7CisJdTMyIHVhcnQxX2Rpdmlzb3JsbzsKKwl1MzIgdWFydDFfZGF0YTsKKwl1MzIgdWFydDFfc3RhdHVzOworCisJdTMyIGludF9zdGF0XzM7CisJdTMyIGludF9zdGF0XzI7CisJdTMyIGludF9zdGF0XzE7CisJdTMyIGludF9zdGF0XzA7CisJdTMyIGludF9jb25maWc7CisJdTMyIGludF9pbnRfc2NhbjsKKwl1MzIgaWVuX2ludF8zOworCXUzMiBpZW5faW50XzI7CisJdTMyIGllbl9pbnRfMTsKKwl1MzIgaWVuX2ludF8wOworCXUzMiBpbnRfbGV2ZWxfM18zOworCXUzMiBpbnRfbGV2ZWxfM18yOworCXUzMiBpbnRfbGV2ZWxfM18xOworCXUzMiBpbnRfbGV2ZWxfM18wOworCXUzMiBpbnRfbGV2ZWxfMl8zOworCXUzMiBpbnRfbGV2ZWxfMl8yOworCXUzMiBpbnRfbGV2ZWxfMl8xOworCXUzMiBpbnRfbGV2ZWxfMl8wOworCXUzMiBpbnRfbGV2ZWxfMV8zOworCXUzMiBpbnRfbGV2ZWxfMV8yOworCXUzMiBpbnRfbGV2ZWxfMV8xOworCXUzMiBpbnRfbGV2ZWxfMV8wOworCXUzMiBpbnRfbGV2ZWxfMF8zOworCXUzMiBpbnRfbGV2ZWxfMF8yOworCXUzMiBpbnRfbGV2ZWxfMF8xOworCXUzMiBpbnRfbGV2ZWxfMF8wOworCXUzMiBpbnRfZG9jc2lzX2VuOworCisJdTMyIG1pcHNfcGxsX3NldHVwOworCXUzMiB1c2JfZnM7CisJdTMyIHRlc3RfYnVzOworCXUzMiBjcnRfc3BhcmU7CisJdTMyIHVzYjJfb2hjaV9pbnRfbWFzazsKKwl1MzIgdXNiMl9zdHJhcDsKKwl1MzIgZWhjaV9oY2FwYmFzZTsKKwl1MzIgb2hjaV9oY19yZXZpc2lvbjsKKwl1MzIgYmNtMV9ic19sbWlfc3RlZXI7CisJdTMyIHVzYjJfY29udHJvbDsKKwl1MzIgdXNiMl9zdGJ1c19vYmM7CisJdTMyIHVzYjJfc3RidXNfbWVzc19zaXplOworCXUzMiB1c2IyX3N0YnVzX2NodW5rX3NpemU7CisKKwl1MzIgcGNpZV9yZWdzOworCXUzMiB0aW1fY2g7CisJdTMyIHRpbV9jbDsKKwl1MzIgZ3Bpb19kb3V0OworCXUzMiBncGlvX2RpbjsKKwl1MzIgZ3Bpb19kaXI7CisJdTMyIHdhdGNoZG9nOworCXUzMiBmcm9udF9wYW5lbDsKKworCXUzMiByZWdpc3Rlcl9tYXBzOworfTsKKworZXh0ZXJuIGVudW0gYXNpY190eXBlIGFzaWM7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCAqcmVnaXN0ZXJfbWFwOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXNpY19waHlfYmFzZTsJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBBU0lDICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBhc2ljX2Jhc2U7CQkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgQVNJQyAqLworCisvKgorICogTWFjcm9zIHRvIGludGVyZmFjZSB0byByZWdpc3RlcnMgdGhyb3VnaCB0aGVpciBpb3JlbWFwcGVkIGFkZHJlc3MKKyAqIGFzaWNfcmVnX29mZnNldAlSZXR1cm5zIHRoZSBvZmZzZXQgb2YgYSBnaXZlbiByZWdpc3RlciBmcm9tIHRoZSBzdGFydAorICoJCQlvZiB0aGUgQVNJQyBhZGRyZXNzIHNwYWNlCisgKiBhc2ljX3JlZ19waHlzX2FkZHIJUmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIKKyAqIGFzaWNfcmVnX2FkZHIJUmV0dXJucyB0aGUgaW9tYXBwZWQgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBnaXZlbgorICoJCQlyZWdpc3Rlci4KKyAqLworI2RlZmluZSBhc2ljX3JlZ19vZmZzZXQoeCkJKHJlZ2lzdGVyX21hcC0+eCkKKyNkZWZpbmUgYXNpY19yZWdfcGh5c19hZGRyKHgpCShhc2ljX3BoeV9iYXNlICsgYXNpY19yZWdfb2Zmc2V0KHgpKQorI2RlZmluZSBhc2ljX3JlZ19hZGRyKHgpIFwKKwkoKHVuc2lnbmVkIGludCAqKSAoYXNpY19iYXNlICsgYXNpY19yZWdfb2Zmc2V0KHgpKSkKKworLyoKKyAqIFRoZSBhc2ljX3JlZyBtYWNybyBpcyBnb25lLiBJdCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZWl0aGVyIGFzaWNfcmVhZCBvcgorICogYXNpY193cml0ZSwgYXMgYXBwcm9wcmlhdGUuCisgKi8KKworI2RlZmluZSBhc2ljX3JlYWQoeCkJCXJlYWRsKGFzaWNfcmVnX2FkZHIoeCkpCisjZGVmaW5lIGFzaWNfd3JpdGUodiwgeCkJd3JpdGVsKHYsIGFzaWNfcmVnX2FkZHIoeCkpCisKK2V4dGVybiB2b2lkIGFzaWNfaXJxX2luaXQodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvZG1hLWNvaGVyZW5jZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4ZDVlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvZG1hLWNvaGVyZW5jZS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVmVyc2lvbiBmcm9tIG1hY2gtZ2VuZXJpYyBtb2RpZmllZCB0byBzdXBwb3J0IFBvd2VyVFYgcG9ydAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX1BPV0VSVFZfRE1BX0NPSEVSRU5DRV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfUE9XRVJUVl9ETUFfQ09IRVJFTkNFX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpYy5oPgorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfa3NlZzIodm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBLU0VHMjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5c19mcm9tX3B0ZSh2b2lkICphZGRyKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGVwLCBwdGU7CisKKwl1bnNpZ25lZCBsb25nIHZpcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSAwVUw7CisKKwkvKiBnZXQgdGhlIHBhZ2UgZ2xvYmFsIGRpcmVjdG9yeS4gKi8KKwlwZ2QgPSBwZ2Rfb2Zmc2V0X2sodmlydF9hZGRyKTsKKworCWlmICghcGdkX25vbmUoKnBnZCkpIHsKKwkJLyogZ2V0IHRoZSBwYWdlIHVwcGVyIGRpcmVjdG9yeSAqLworCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgdmlydF9hZGRyKTsKKwkJaWYgKCFwdWRfbm9uZSgqcHVkKSkgeworCQkJLyogZ2V0IHRoZSBwYWdlIG1pZGRsZSBkaXJlY3RvcnkgKi8KKwkJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCB2aXJ0X2FkZHIpOworCQkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgeworCQkJCS8qIGdldCBhIHBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgZW50cnkgKi8KKwkJCQlwdGVwID0gcHRlX29mZnNldChwbWQsIHZpcnRfYWRkcik7CisJCQkJcHRlID0gKnB0ZXA7CisJCQkJLyogY2hlY2sgZm9yIGEgdmFsaWQgcGFnZSAqLworCQkJCWlmIChwdGVfcHJlc2VudChwdGUpKSB7CisJCQkJCS8qIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0aGUgcGFnZSBpcworCQkJCQkgKiByZWZlcmluZyB0byAqLworCQkJCQlwaHlzX2FkZHIgPSAodW5zaWduZWQgbG9uZykKKwkJCQkJCXBhZ2VfdG9fcGh5cyhwdGVfcGFnZShwdGUpKTsKKwkJCQkJLyogYWRkIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBwYWdlICovCisJCQkJCXBoeXNfYWRkciB8PSAodmlydF9hZGRyICYgflBBR0VfTUFTSyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHBoeXNfYWRkcjsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBsYXRfbWFwX2RtYV9tZW0oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyLAorCXNpemVfdCBzaXplKQoreworCWlmIChpc19rc2VnMihhZGRyKSkKKwkJcmV0dXJuIHBoeXNfdG9fYnVzKHZpcnRfdG9fcGh5c19mcm9tX3B0ZShhZGRyKSk7CisJZWxzZQorCQlyZXR1cm4gcGh5c190b19idXModmlydF90b19waHlzKGFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBsYXRfbWFwX2RtYV9tZW1fcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIHBoeXNfdG9fYnVzKHBhZ2VfdG9fcGh5cyhwYWdlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbGF0X2RtYV9hZGRyX3RvX3BoeXMoc3RydWN0IGRldmljZSAqZGV2LAorCWRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIGJ1c190b19waHlzKGRtYV9hZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRfdW5tYXBfZG1hX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgcGxhdF9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJLyoKKwkgKiB3ZSBmYWxsIGJhY2sgdG8gR0ZQX0RNQSB3aGVuIHRoZSBtYXNrIGlzbid0IGFsbCAxcywKKwkgKiBzbyB3ZSBjYW4ndCBndWFyYW50ZWUgYWxsb2NhdGlvbnMgdGhhdCBtdXN0IGJlCisJICogd2l0aGluIGEgdGlnaHRlciByYW5nZSB0aGFuIEdGUF9ETUEuLgorCSAqLworCWlmIChtYXNrIDwgRE1BX0JJVF9NQVNLKDI0KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRfZXh0cmFfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBsYXRfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGxhdF9kZXZpY2VfaXNfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogX19BU01fTUFDSF9QT1dFUlRWX0RNQV9DT0hFUkVOQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYJX0FTTV9NQUNIX1BPV0VSVFZfSU5URVJSVVBUU19IXworI2RlZmluZSBfQVNNX01BQ0hfUE9XRVJUVl9JTlRFUlJVUFRTX0hfCisKKy8qCisgKiBEZWZpbmVzIGZvciBhbGwgb2YgdGhlIGludGVycnVwdCBsaW5lcworICovCisKKy8qIERlZmluaXRpb25zIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIGtJcnFfVWFydDEJCWlycV91YXJ0MQorCisjZGVmaW5lIGliYXNlIDAKKworLyotLS0tLS0tLS0tLS0tIFJlZ2lzdGVyOiBpbnRfc3RhdF8zICovCisvKiAxMjYgdW51c2VkIChiaXQgMzEpICovCisjZGVmaW5lIGlycV9hc2MydmlkZW8JCShpYmFzZSsxMjYpCS8qIEFTQyAyIFZpZGVvIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYXNjMXZpZGVvCQkoaWJhc2UrMTI1KQkvKiBBU0MgMSBWaWRlbyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2NvbW1zX2Jsb2NrX3dkCShpYmFzZSsxMjQpCS8qIEFTQyAxIFZpZGVvIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfZmRtYV9tYWlsYm94CShpYmFzZSsxMjMpCS8qIEZETUEgTWFpbGJveCBPdXRwdXQgKi8KKyNkZWZpbmUgaXJxX2ZkbWFfZ3AJCShpYmFzZSsxMjIpCS8qIEZETUEgR1AgT3V0cHV0ICovCisjZGVmaW5lIGlycV9taXBzX3BpYwkJKGliYXNlKzEyMSkJLyogTUlQUyBQZXJmb3JtYW5jZSBDb3VudGVyCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX21pcHNfdGltZXIJCShpYmFzZSsxMjApCS8qIE1JUFMgVGltZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9tZW1vcnlfcHJvdGVjdAkoaWJhc2UrMTE5KQkvKiBNZW1vcnkgUHJvdGVjdGlvbiBJbnRlcnJ1cHQKKwkJCQkJCSAqIC0tIE9yZWQgYnkgZ2x1ZSBsb2dpYyBpbnNpZGUKKwkJCQkJCSAqICBTUEFSQyBJTEMgKHNlZQorCQkJCQkJICogIElOVF9NRU1fUFJPVF9TVEFULCBiZWxvdywKKwkJCQkJCSAqICBmb3IgaW5kaXZpZHVhbCBpbnRlcnJ1cHRzKQorCQkJCQkJICovCisvKiAxMTggdW51c2VkIChiaXQgMjIpICovCisjZGVmaW5lIGlycV9zYmFnCQkoaWJhc2UrMTE3KQkvKiBTQkFHIEludGVycnVwdCAtLSBPcmVkIGJ5CisJCQkJCQkgKiBnbHVlIGxvZ2ljIGluc2lkZSBTUEFSQyBJTEMKKwkJCQkJCSAqIChzZWUgSU5UX1NCQUdfU1RBVCwgYmVsb3csCisJCQkJCQkgKiBmb3IgaW5kaXZpZHVhbCBpbnRlcnJ1cHRzKSAqLworI2RlZmluZSBpcnFfcWFtX2JfZmVjCQkoaWJhc2UrMTE2KQkvKiBRQU0gIEIgRkVDIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcWFtX2FfZmVjCQkoaWJhc2UrMTE1KQkvKiBRQU0gQSBGRUMgSW50ZXJydXB0ICovCisvKiAxMTQgdW51c2VkIAkoYml0IDE4KSAqLworI2RlZmluZSBpcnFfbWFpbGJveAkJKGliYXNlKzExMykJLyogTWFpbGJveCBEZWJ1ZyBJbnRlcnJ1cHQgIC0tCisJCQkJCQkgKiBPcmVkIGJ5IGdsdWUgbG9naWMgaW5zaWRlCisJCQkJCQkgKiBTUEFSQyBJTEMgKHNlZQorCQkJCQkJICogSU5UX01BSUxCT1hfU1RBVCwgYmVsb3csIGZvcgorCQkJCQkJICogaW5kaXZpZHVhbCBpbnRlcnJ1cHRzKSAqLworI2RlZmluZSBpcnFfZnVzZV9zdGF0MQkJKGliYXNlKzExMikJLyogRnVzZSBTdGF0dXMgMSAqLworI2RlZmluZSBpcnFfZnVzZV9zdGF0MgkJKGliYXNlKzExMSkJLyogRnVzZSBTdGF0dXMgMiAqLworI2RlZmluZSBpcnFfZnVzZV9zdGF0MwkJKGliYXNlKzExMCkJLyogQmxpdHRlciBJbnRlcnJ1cHQgLyBGdXNlCisJCQkJCQkgKiBTdGF0dXMgMyAqLworI2RlZmluZSBpcnFfYmxpdHRlcgkJKGliYXNlKzExMCkJLyogQmxpdHRlciBJbnRlcnJ1cHQgLyBGdXNlCisJCQkJCQkgKiBTdGF0dXMgMyAqLworI2RlZmluZSBpcnFfYXZjMV9wcDAJCShpYmFzZSsxMDkpCS8qIEFWQyBEZWNvZGVyICMxIFBQMAorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hdmMxX3BwMQkJKGliYXNlKzEwOCkJLyogQVZDIERlY29kZXIgIzEgUFAxCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2F2YzFfbWJlCQkoaWJhc2UrMTA3KQkvKiBBVkMgRGVjb2RlciAjMSBNQkUKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYXZjMl9wcDAJCShpYmFzZSsxMDYpCS8qIEFWQyBEZWNvZGVyICMyIFBQMAorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hdmMyX3BwMQkJKGliYXNlKzEwNSkJLyogQVZDIERlY29kZXIgIzIgUFAxCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2F2YzJfbWJlCQkoaWJhc2UrMTA0KQkvKiBBVkMgRGVjb2RlciAjMiBNQkUKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfemJ1Z19zcGkJCShpYmFzZSsxMDMpCS8qIFpidWcgU1BJIFNsYXZlIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcWFtX21vZDIJCShpYmFzZSsxMDIpCS8qIFFBTSBNb2R1bGF0b3IgMiBETUEKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfaXJfcngJCShpYmFzZSsxMDEpCS8qIElSIFJYIDIgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hdWRfZHNwMgkJKGliYXNlKzEwMCkJLyogQXVkaW8gRFNQICMyIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYXVkX2RzcDEJCShpYmFzZSs5OSkJLyogQXVkaW8gRFNQICMxIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfZG9jc2lzCQkoaWJhc2UrOTgpCS8qIERPQ1NJUyBEZWJ1ZyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3NkX2R2cDEJCShpYmFzZSs5NykJLyogU0QgRFZQICMxIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfc2RfZHZwMgkJKGliYXNlKzk2KQkvKiBTRCBEVlAgIzIgSW50ZXJydXB0ICovCisvKi0tLS0tLS0tLS0tLS0gUmVnaXN0ZXI6IGludF9zdGF0XzIgKi8KKyNkZWZpbmUgaXJxX2hkX2R2cAkJKGliYXNlKzk1KQkvKiBIRCBEVlAgSW50ZXJydXB0ICovCisjZGVmaW5lIGtJcnFfUHJld2F0Y2hkb2cJKGliYXNlKzk0KQkvKiB3YXRjaGRvZyBQcmUtSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV90aW1lcjIJCShpYmFzZSs5MykJLyogUHJvZ3JhbW1hYmxlIFRpbWVyCisJCQkJCQkgKiBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSBpcnFfMTM5NAkJKGliYXNlKzkyKQkvKiAxMzk0IEZpcmV3aXJlIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfdXNib2hjaQkJKGliYXNlKzkxKQkvKiBVU0IgMi4wIE9IQ0kgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV91c2JlaGNpCQkoaWJhc2UrOTApCS8qIFVTQiAyLjAgRUhDSSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3BjaWV4cAkJKGliYXNlKzg5KQkvKiBQQ0kgRXhwcmVzcyAwIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcGNpZXhwMAkJKGliYXNlKzg5KQkvKiBQQ0kgRXhwcmVzcyAwIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYWZlMQkJKGliYXNlKzg4KQkvKiBBRkUgMSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3NhdGEJCShpYmFzZSs4NykJLyogU0FUQSAxIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfc2F0YTEJCShpYmFzZSs4NykJLyogU0FUQSAxIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfZHRjcAkJKGliYXNlKzg2KQkvKiBEVENQIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcGNpZXhwMQkJKGliYXNlKzg1KQkvKiBQQ0kgRXhwcmVzcyAxIEludGVycnVwdCAqLworLyogODQgdW51c2VkIAkoYml0IDIwKSAqLworLyogODMgdW51c2VkIAkoYml0IDE5KSAqLworLyogODIgdW51c2VkIAkoYml0IDE4KSAqLworI2RlZmluZSBpcnFfc2F0YTIJCShpYmFzZSs4MSkJLyogU0FUQTIgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV91YXJ0MgkJKGliYXNlKzgwKQkvKiBVQVJUMiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2xlZ2FjeV91c2IJCShpYmFzZSs3OSkJLyogTGVnYWN5IFVTQiBIb3N0IElTUiAoMS4xCisJCQkJCQkgKiBIb3N0IG1vZHVsZSkgKi8KKyNkZWZpbmUgaXJxX3BvZAkJCShpYmFzZSs3OCkJLyogUE9EIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfc2xhdmVfdXNiCQkoaWJhc2UrNzcpCS8qIFNsYXZlIFVTQiAqLworI2RlZmluZSBpcnFfZGVuYzEJCShpYmFzZSs3NikJLyogREVOQyAjMSBWVEcgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV92YmlfdnRnCQkoaWJhc2UrNzUpCS8qIFZCSSBWVEcgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hZmUyCQkoaWJhc2UrNzQpCS8qIEFGRSAyIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfZGVuYzIJCShpYmFzZSs3MykJLyogREVOQyAjMiBWVEcgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hc2MyCQkoaWJhc2UrNzIpCS8qIEFTQyAjMiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2FzYzEJCShpYmFzZSs3MSkJLyogQVNDICMxIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfbW9kX2RtYQkJKGliYXNlKzcwKQkvKiBNb2R1bGF0b3IgRE1BIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYnl0ZV9lbmcxCQkoaWJhc2UrNjkpCS8qIEJ5dGUgRW5naW5lIEludGVycnVwdCBbMV0gKi8KKyNkZWZpbmUgaXJxX2J5dGVfZW5nMAkJKGliYXNlKzY4KQkvKiBCeXRlIEVuZ2luZSBJbnRlcnJ1cHQgWzBdICovCisvKiA2NyB1bnVzZWQgCShiaXQgMDMpICovCisvKiA2NiB1bnVzZWQgCShiaXQgMDIpICovCisvKiA2NSB1bnVzZWQgCShiaXQgMDEpICovCisvKiA2NCB1bnVzZWQgCShiaXQgMDApICovCisvKi0tLS0tLS0tLS0tLS0gUmVnaXN0ZXI6IGludF9zdGF0XzEgKi8KKy8qIDYzIHVudXNlZCAJKGJpdCAzMSkgKi8KKy8qIDYyIHVudXNlZCAJKGJpdCAzMCkgKi8KKy8qIDYxIHVudXNlZCAJKGJpdCAyOSkgKi8KKy8qIDYwIHVudXNlZCAJKGJpdCAyOCkgKi8KKy8qIDU5IHVudXNlZCAJKGJpdCAyNykgKi8KKy8qIDU4IHVudXNlZCAJKGJpdCAyNikgKi8KKy8qIDU3IHVudXNlZCAJKGJpdCAyNSkgKi8KKy8qIDU2IHVudXNlZCAJKGJpdCAyNCkgKi8KKyNkZWZpbmUgaXJxX2J1Zl9kbWFfbWVtMm1lbQkoaWJhc2UrNTUpCS8qIEJ1ZkRNQSBNZW1vcnkgdG8gTWVtb3J5CisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2J1Zl9kbWFfdXNidHJhbnNtaXQJKGliYXNlKzU0KQkvKiBCdWZETUEgVVNCIFRyYW5zbWl0CisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2J1Zl9kbWFfcXBza3BvZHRyYW5zbWl0IChpYmFzZSs1MykJLyogQnVmRE1BIFFQU0svUE9EIFRyYW1zaXQKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYnVmX2RtYV90cmFuc21pdF9lcnJvciAoaWJhc2UrNTIpCS8qIEJ1ZkRNQSBUcmFuc21pdCBFcnJvcgorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9idWZfZG1hX3VzYnJlY3YJKGliYXNlKzUxKQkvKiBCdWZETUEgVVNCIFJlY2VpdmUKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYnVmX2RtYV9xcHNrcG9kcmVjdgkoaWJhc2UrNTApCS8qIEJ1ZkRNQSBRUFNLL1BPRCBSZWNlaXZlCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2J1Zl9kbWFfcmVjdl9lcnJvcgkoaWJhc2UrNDkpCS8qIEJ1ZkRNQSBSZWNlaXZlIEVycm9yCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3FhbWRtYV90cmFuc21pdF9wbGF5IChpYmFzZSs0OCkJLyogUUFNRE1BIFRyYW5zbWl0L1BsYXkKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcWFtZG1hX3RyYW5zbWl0X2Vycm9yIChpYmFzZSs0NykJLyogUUFNRE1BIFRyYW5zbWl0IEVycm9yCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3FhbWRtYV9yZWN2MmhpZ2gJKGliYXNlKzQ2KQkvKiBRQU1ETUEgUmVjZWl2ZSAyIEhpZ2gKKwkJCQkJCSAqIChDaGFucyA2My0zMikgKi8KKyNkZWZpbmUgaXJxX3FhbWRtYV9yZWN2MmxvdwkoaWJhc2UrNDUpCS8qIFFBTURNQSBSZWNlaXZlIDIgTG93CisJCQkJCQkgKiAoQ2hhbnMgMzEtMCkgKi8KKyNkZWZpbmUgaXJxX3FhbWRtYV9yZWN2MWhpZ2gJKGliYXNlKzQ0KQkvKiBRQU1ETUEgUmVjZWl2ZSAxIEhpZ2gKKwkJCQkJCSAqIChDaGFucyA2My0zMikgKi8KKyNkZWZpbmUgaXJxX3FhbWRtYV9yZWN2MWxvdwkoaWJhc2UrNDMpCS8qIFFBTURNQSBSZWNlaXZlIDEgTG93CisJCQkJCQkgKiAoQ2hhbnMgMzEtMCkgKi8KKyNkZWZpbmUgaXJxX3FhbWRtYV9yZWN2X2Vycm9yCShpYmFzZSs0MikJLyogUUFNRE1BIFJlY2VpdmUgRXJyb3IKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfbXBlZ3NwbGljZQkJKGliYXNlKzQxKQkvKiBNUEVHIFNwbGljZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2RlaW50ZXJsYWNlX3JkeQkoaWJhc2UrNDApCS8qIERlaW50ZXJsYWNlciBGcmFtZSBSZWFkeQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9leHRfaW4wCQkoaWJhc2UrMzkpCS8qIEV4dGVybmFsIEludGVycnVwdCBpcnFfaW4wICovCisjZGVmaW5lIGlycV9ncGlvMwkJKGliYXNlKzM4KQkvKiBHUCBJL08gSVJRIDMgLSBGcm9tIEdQIEkvTworCQkJCQkJICogTW9kdWxlICovCisjZGVmaW5lIGlycV9ncGlvMgkJKGliYXNlKzM3KQkvKiBHUCBJL08gSVJRIDIgLSBGcm9tIEdQIEkvTworCQkJCQkJICogTW9kdWxlIChBQkVfaW50TikgKi8KKyNkZWZpbmUgaXJxX3BjcmNtcGx0MQkJKGliYXNlKzM2KQkvKiBQQ1IgQ2FwdHVyZSBDb21wbGV0ZSAgb3IKKwkJCQkJCSAqIERpc2NvbnRpbnVpdHkgMSAqLworI2RlZmluZSBpcnFfcGNyY21wbHQyCQkoaWJhc2UrMzUpCS8qIFBDUiBDYXB0dXJlIENvbXBsZXRlIG9yCisJCQkJCQkgKiBEaXNjb250aW51aXR5IDIgKi8KKyNkZWZpbmUgaXJxX3BhcnNlX3BlaWVycgkoaWJhc2UrMzQpCS8qIFBJRCBQYXJzZXIgRXJyb3IgRGV0ZWN0CisJCQkJCQkgKiAoUEVJKSAqLworI2RlZmluZSBpcnFfcGFyc2VfY29udF9lcnIJKGliYXNlKzMzKQkvKiBQSUQgUGFyc2VyIGNvbnRpbnVpdHkgZXJyb3IKKwkJCQkJCSAqIGRldGVjdCAqLworI2RlZmluZSBpcnFfZHMxZnJhbWVyCQkoaWJhc2UrMzIpCS8qIERTMSBGcmFtZXIgSW50ZXJydXB0ICovCisvKi0tLS0tLS0tLS0tLS0gUmVnaXN0ZXI6IGludF9zdGF0XzAgKi8KKyNkZWZpbmUgaXJxX2dwaW8xCQkoaWJhc2UrMzEpCS8qIEdQIEkvTyBJUlEgMSAtIEZyb20gR1AgSS9PCisJCQkJCQkgKiBNb2R1bGUgKi8KKyNkZWZpbmUgaXJxX2dwaW8wCQkoaWJhc2UrMzApCS8qIEdQIEkvTyBJUlEgMCAtIEZyb20gR1AgSS9PCisJCQkJCQkgKiBNb2R1bGUgKi8KKyNkZWZpbmUgaXJxX3Fwc2tfb3V0X2Fsb2hhCShpYmFzZSsyOSkJLyogUVBTSyBPdXRwdXQgU2xvdHRlZCBBbG9oYQorCQkJCQkJICogKGNoYW4gMykgVHJhbnNtaXNzaW9uCisJCQkJCQkgKiBDb21wbGV0ZWQgT0sgKi8KKyNkZWZpbmUgaXJxX3Fwc2tfb3V0X3RkbWEJKGliYXNlKzI4KQkvKiBRUFNLIE91dHB1dCBURE1BIChjaGFuIDIpCisJCQkJCQkgKiBUcmFuc21pc3Npb24gQ29tcGxldGVkIE9LICovCisjZGVmaW5lIGlycV9xcHNrX291dF9yZXNlcnZlCShpYmFzZSsyNykJLyogUVBTSyBPdXRwdXQgUmVzZXJ2YXRpb24KKwkJCQkJCSAqIChjaGFuIDEpIFRyYW5zbWlzc2lvbgorCQkJCQkJICogQ29tcGxldGVkIE9LICovCisjZGVmaW5lIGlycV9xcHNrX291dF9hbG9oYV9lcnIJKGliYXNlKzI2KQkvKiBRUFNLIE91dHB1dCBTbG90dGVkIEFsb2hhCisJCQkJCQkgKiAoY2hhbiAzKVRyYW5zbWlzc2lvbgorCQkJCQkJICogY29tcGxldGVkIHdpdGggRXJyb3JzLiAqLworI2RlZmluZSBpcnFfcXBza19vdXRfdGRtYV9lcnIJKGliYXNlKzI1KQkvKiBRUFNLIE91dHB1dCBURE1BIChjaGFuIDIpCisJCQkJCQkgKiBUcmFuc21pc3Npb24gY29tcGxldGVkIHdpdGgKKwkJCQkJCSAqIEVycm9ycy4gKi8KKyNkZWZpbmUgaXJxX3Fwc2tfb3V0X3JzcnZfZXJyCShpYmFzZSsyNCkJLyogUVBTSyBPdXRwdXQgUmVzZXJ2YXRpb24KKwkJCQkJCSAqIChjaGFuIDEpIFRyYW5zbWlzc2lvbgorCQkJCQkJICogY29tcGxldGVkIHdpdGggRXJyb3JzICovCisjZGVmaW5lIGlycV9hbG9oYV9mYWlsCQkoaWJhc2UrMjMpCS8qIFVuc3VjY2Vzc2Z1bCBSZXNlbmQgb2YgQWxvaGEKKwkJCQkJCSAqIGZvciBOIHRpbWVzLiBBbG9oYSByZXRyeQorCQkJCQkJICogdGltZW91dCBmb3IgY2hhbm5lbCAzLiAqLworI2RlZmluZSBpcnFfdGltZXIxCQkoaWJhc2UrMjIpCS8qIFByb2dyYW1tYWJsZSBUaW1lcgorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9rZXlib2FyZAkJKGliYXNlKzIxKQkvKiBLZXlib2FyZCBNb2R1bGUgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9pMmMJCQkoaWJhc2UrMjApCS8qIEkyQyBNb2R1bGUgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9zcGkJCQkoaWJhc2UrMTkpCS8qIFNQSSBNb2R1bGUgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9pcmJsYXN0ZXIJCShpYmFzZSsxOCkJLyogSVIgQmxhc3RlciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3NwbGljZV9kZXRlY3QJKGliYXNlKzE3KQkvKiBQSUQgS2V5IENoYW5nZSBJbnRlcnJ1cHQgb3IKKwkJCQkJCSAqIFNwbGljZSBEZXRlY3QgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9zZV9taWNybwkJKGliYXNlKzE2KQkvKiBTZWN1cmUgTWljcm8gSS9GIE1vZHVsZQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV91YXJ0MQkJKGliYXNlKzE1KQkvKiBVQVJUIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfaXJyZWN2CQkoaWJhc2UrMTQpCS8qIElSIFJlY2VpdmVyIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfaG9zdF9pbnQxCQkoaWJhc2UrMTMpCS8qIEhvc3QtdG8tSG9zdCBJbnRlcnJ1cHQgMSAqLworI2RlZmluZSBpcnFfaG9zdF9pbnQwCQkoaWJhc2UrMTIpCS8qIEhvc3QtdG8tSG9zdCBJbnRlcnJ1cHQgMCAqLworI2RlZmluZSBpcnFfcXBza19oZWNlcnIJCShpYmFzZSsxMSkJLyogUVBTSyBIRUMgRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9xcHNrX2NyY2VycgkJKGliYXNlKzEwKQkvKiBRUFNLIEFBTC01IENSQyBFcnJvcgorCQkJCQkJICogSW50ZXJydXB0ICovCisvKiA5IHVudXNlZCAJKGJpdCAwOSkgKi8KKy8qIDggdW51c2VkIAkoYml0IDA4KSAqLworI2RlZmluZSBpcnFfcHNpY3JjZXJyCQkoaWJhc2UrNykgCS8qIFFBTSBQU0kgQ1JDIEVycm9yCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3BzaWxlbmd0aF9lcnIJKGliYXNlKzYpIAkvKiBRQU0gUFNJIExlbmd0aCBFcnJvcgorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9lc2Zmb3J3YXJkCQkoaWJhc2UrNSkgCS8qIEVTRiBJbnRlcnJ1cHQgTWFyayBGcm9tCisJCQkJCQkgKiBGb3J3YXJkIFBhdGggUmVmZXJlbmNlIC0KKwkJCQkJCSAqIGV2ZXJ5IDNtcyB3aGVuIGZvcndhcmQgTWJpdHMKKwkJCQkJCSAqIGFuZCBmb3J3YXJkIHNsb3QgY29udHJvbAorCQkJCQkJICogYnl0ZXMgYXJlIHVwZGF0ZWQuICovCisjZGVmaW5lIGlycV9lc2ZyZXZlcnNlCQkoaWJhc2UrNCkgCS8qIEVTRiBJbnRlcnJ1cHQgTWFyayBmcm9tCisJCQkJCQkgKiBSZXZlcnNlIFBhdGggUmVmZXJlbmNlIC0KKwkJCQkJCSAqIGRlbGF5ZWQgZnJvbSBmb3J3YXJkIG1hcmsgYnkKKwkJCQkJCSAqIHRoZSByYW5naW5nIGRlbGF5IHBsdXMgYQorCQkJCQkJICogZml4ZWQgYW1vdW50LiBXaGVuIHJldmVyc2UKKwkJCQkJCSAqIE1iaXRzIGFuZCByZXZlcnNlIHNsb3QKKwkJCQkJCSAqIGNvbnRyb2wgYnl0ZXMgYXJlIHVwZGF0ZWQuCisJCQkJCQkgKiBPY2N1cnMgZXZlcnkgM21zIGZvciAzLjBNIGFuZAorCQkJCQkJICogMS41NTQgTSB1cHN0cmVhbSByYXRlcyBhbmQKKwkJCQkJCSAqIGV2ZXJ5IDYgbXMgZm9yIDI1NksgdXBzdHJlYW0KKwkJCQkJCSAqIHJhdGUuICovCisjZGVmaW5lIGlycV9hbG9oYV90aW1lb3V0CShpYmFzZSszKSAJLyogU2xvdHRlZC1BbG9oYSB0aW1lb3V0IG9uCisJCQkJCQkgKiBDaGFubmVsIDEuICovCisjZGVmaW5lIGlycV9yZXNlcnZhdGlvbgkJKGliYXNlKzIpIAkvKiBQYXJ0aWFsIChvciBJbmNyZW1lbnRhbCkKKwkJCQkJCSAqIFJlc2VydmF0aW9uIE1lc3NhZ2UgQ29tcGxldGVkCisJCQkJCQkgKiBvciBTbG90dGVkIGFsb2hhIHZlcmlmeSBmb3IKKwkJCQkJCSAqIGNoYW5uZWwgMS4gKi8KKyNkZWZpbmUgaXJxX2Fsb2hhMwkJKGliYXNlKzEpIAkvKiBTbG90dGVkLUFsb2hhIE1lc3NhZ2UgVmVyaWZ5CisJCQkJCQkgKiBJbnRlcnJ1cHQgb3IgUmVzZXJ2YXRpb24KKwkJCQkJCSAqIGluY3JlbWVudCBjb21wbGV0ZWQgZm9yCisJCQkJCQkgKiBjaGFubmVsIDMuICovCisjZGVmaW5lIGlycV9tcGVnX2QJCShpYmFzZSswKSAJLyogTVBFRyBEZWNvZGVyIEludGVycnVwdCAqLworI2VuZGlmCS8qIF9BU01fTUFDSF9QT1dFUlRWX0lOVEVSUlVQVFNfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2lvcmVtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjI3NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pb3JlbWFwLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfUE9XRVJUVl9JT1JFTUFQX0gKKyNkZWZpbmUgX19BU01fTUFDSF9QT1dFUlRWX0lPUkVNQVBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBMT1dfTUVNX0JPVU5EQVJZX1BIWVMJMHgyMDAwMDAwMAorI2RlZmluZSBMT1dfTUVNX0JPVU5EQVJZX01BU0sJKH4oTE9XX01FTV9CT1VOREFSWV9QSFlTIC0gMSkpCisKKy8qCisgKiBUaGUgYnVzIGFkZHJlc3NlcyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyB0aGF0CisgKiB0aGUgcHJvY2Vzc29yIHNlZXMgYnkgYW4gb2Zmc2V0LiBUaGlzIG9mZnNldCB2YXJpZXMgYnkgQVNJQworICogdmVyc2lvbi4gRGVmaW5lIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgb2Zmc2V0IGFuZCBzb21lIG1hY3JvcyB0bworICogbWFrZSB0aGUgY29udmVyc2lvbiBzaW1wbGVyLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c190b19idXNfb2Zmc2V0OworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNkZWZpbmUgTUVNX0dBUF9QSFlTCQkweDYwMDAwMDAwCisvKgorICogVE9ETzogV2Ugd2lsbCB1c2UgdGhlIGhhcmQgY29kZSBmb3IgY29udmVyc2lvbiBiZXR3ZWVuIHBoeXNpY2FsIGFuZAorICogYnVzIHVudGlsIHRoZSBib290bG9hZGVyIHJlbGVhc2VzIHRoZWlyIGRldmljZSB0cmVlIHRvIHVzLgorICovCisjZGVmaW5lIHBoeXNfdG9fYnVzKHgpICgoKHgpIDwgTE9XX01FTV9CT1VOREFSWV9QSFlTKSA/IFwKKwkoKHgpICsgcGh5c190b19idXNfb2Zmc2V0KSA6ICh4KSkKKyNkZWZpbmUgYnVzX3RvX3BoeXMoeCkgKCgoeCkgPCBNRU1fR0FQX1BIWVNfQUREUikgPyBcCisJKCh4KSAtIHBoeXNfdG9fYnVzX29mZnNldCkgOiAoeCkpCisjZWxzZQorI2RlZmluZSBwaHlzX3RvX2J1cyh4KSAoKHgpICsgcGh5c190b19idXNfb2Zmc2V0KQorI2RlZmluZSBidXNfdG9fcGh5cyh4KSAoKHgpIC0gcGh5c190b19idXNfb2Zmc2V0KQorI2VuZGlmCisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgYWRkcmVzcyB3ZSBhcmUgZ2l2ZW4gaXMgZm9yIGFuIEFTSUMgZGV2aWNlCisgKiBQYXJhbXM6ICBhZGRyICAgIEFkZHJlc3MgdG8gY2hlY2sKKyAqIFJldHVybnM6IFplcm8gaWYgdGhlIGFkZHJlc3MgaXMgbm90IGZvciBBU0lDIGRldmljZXMsIG5vbi16ZXJvCisgKiAgICAgIGlmIGl0IGlzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhc2ljX2lzX2RldmljZV9hZGRyKHBoeXNfdCBhZGRyKQoreworCXJldHVybiAhKChwaHlzX3QpYWRkciAmIChwaHlzX3QpIExPV19NRU1fQk9VTkRBUllfTUFTSyk7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgYWRkcmVzcyB3ZSBhcmUgZ2l2ZW4gaXMgZXh0ZXJuYWwgUkFNIG1hcHBhYmxlCisgKiBpbnRvIEtTRUcxLgorICogUGFyYW1zOiAgYWRkciAgICBBZGRyZXNzIHRvIGNoZWNrCisgKiBSZXR1cm5zOiBaZXJvIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCBmb3IgZXh0ZXJuYWwgUkFNIGFuZAorICovCitzdGF0aWMgaW5saW5lIGludCBhc2ljX2lzX2xvd21lbV9yYW1fYWRkcihwaHlzX3QgYWRkcikKK3sKKwkvKgorCSAqIFRoZSBSQU0gYWx3YXlzIHN0YXJ0cyBhdCB0aGUgZm9sbG93aW5nIGFkZHJlc3MgaW4gdGhlIHByb2Nlc3NvcidzCisJICogcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQorCSAqLworCXN0YXRpYyBjb25zdCBwaHlzX3QgcGh5c19yYW1fYmFzZSA9IDB4MTAwMDAwMDA7CisJcGh5c190IGJ1c19yYW1fYmFzZTsKKworCWJ1c19yYW1fYmFzZSA9IHBoeXNfdG9fYnVzX29mZnNldCArIHBoeXNfcmFtX2Jhc2U7CisKKwlyZXR1cm4gYWRkciA+PSBidXNfcmFtX2Jhc2UgJiYKKwkJYWRkciA8IChidXNfcmFtX2Jhc2UgKyAoTE9XX01FTV9CT1VOREFSWV9QSFlTIC0gcGh5c19yYW1fYmFzZSkpOworfQorCisvKgorICogQWxsb3cgcGh5c2ljYWwgYWRkcmVzc2VzIHRvIGJlIGZpeGVkIHVwIHRvIGhlbHAgcGVyaXBoZXJhbHMgbG9jYXRlZAorICogb3V0c2lkZSB0aGUgbG93IDMyLWJpdCByYW5nZSAtLSBnZW5lcmljIHBhc3MtdGhyb3VnaCB2ZXJzaW9uLgorICovCitzdGF0aWMgaW5saW5lIHBoeXNfdCBmaXh1cF9iaWdwaHlzX2FkZHIocGh5c190IHBoeXNfYWRkciwgcGh5c190IHNpemUpCit7CisJcmV0dXJuIHBoeXNfYWRkcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnBsYXRfaW9yZW1hcChwaHlzX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGxhdF9pb3VubWFwKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BPV0VSVFZfSU9SRU1BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmQ1ZDBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pcnEuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fTUFDSF9QT1dFUlRWX0lSUV9ICisjZGVmaW5lIF9BU01fTUFDSF9QT1dFUlRWX0lSUV9ICisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmg+CisKKyNkZWZpbmUgTUlQU19DUFVfSVJRX0JBU0UJaWJhc2UKKyNkZWZpbmUgTlJfSVJRUwkJCTEyNworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L3Bvd2VydHYtY2xvY2suaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvcG93ZXJ0di1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2U5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L3Bvd2VydHYtY2xvY2suaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworLyoKKyAqIExvY2FsIGRlZmluaXRpb25zIGZvciB0aGUgcG93ZXJ0diBQQ0kgY29kZQorICovCisKKyNpZm5kZWYgX1BPV0VSVFZfUENJX1BPV0VSVFZfUENJX0hfCisjZGVmaW5lIF9QT1dFUlRWX1BDSV9QT1dFUlRWX1BDSV9IXworZXh0ZXJuIGludCBhc2ljX3BjaWVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworZXh0ZXJuIGludCBhc2ljX3BjaWVfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgYXNpY19wY2llX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgbG9nX2xldmVsOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L3dhci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di93YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWMwNWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di93YXIuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyB2ZXJzaW9uIGZvciB0aGUgUG93ZXJUViBwbGF0Zm9ybSBjb3BpZWQgZnJvbSB0aGUgTWFsdGEgdmVyc2lvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDcgYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX1BPV0VSVFZfV0FSX0gKKyNkZWZpbmUgX19BU01fTUFDSF9QT1dFUlRWX1dBUl9ICisKKyNkZWZpbmUgUjQ2MDBfVjFfSU5ERVhfSUNBQ0hFT1BfV0FSCTAKKyNkZWZpbmUgUjQ2MDBfVjFfSElUX0NBQ0hFT1BfV0FSCTAKKyNkZWZpbmUgUjQ2MDBfVjJfSElUX0NBQ0hFT1BfV0FSCTAKKyNkZWZpbmUgUjU0MzJfQ1AwX0lOVEVSUlVQVF9XQVIJCTAKKyNkZWZpbmUgQkNNMTI1MF9NM19XQVIJCQkwCisjZGVmaW5lIFNJQllURV8xOTU2X1dBUgkJCTAKKyNkZWZpbmUgTUlQUzRLX0lDQUNIRV9SRUZJTExfV0FSCTEKKyNkZWZpbmUgTUlQU19DQUNIRV9TWU5DX1dBUgkJMQorI2RlZmluZSBUWDQ5WFhfSUNBQ0hFX0lOREVYX0lOVl9XQVIJMAorI2RlZmluZSBSTTkwMDBfQ0RFWF9TTVBfV0FSCQkwCisjZGVmaW5lIElDQUNIRV9SRUZJTExTX1dPUktBUk9VTkRfV0FSCTEKKyNkZWZpbmUgUjEwMDAwX0xMU0NfV0FSCQkJMAorI2RlZmluZSBNSVBTMzRLX01JU1NFRF9JVExCX1dBUgkJMAorCisjZW5kaWYgLyogX19BU01fTUFDSF9QT1dFUlRWX1dBUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvYm9uaXRvNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oCmluZGV4IGE1NzZjZTAuLmQxNGUyYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oCkBAIC0yNiwxMSArMjYsNiBAQAogLyogb2Zmc2V0cyBmcm9tIGJhc2UgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQk9OSVRPKHgpCSh4KQogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKQotCi0jZGVmaW5lIEJPTklUTyh4KSAoKih2b2xhdGlsZSB1MzIgKikoKGNoYXIgKilDS1NFRzFBRERSKEJPTklUT19SRUdfQkFTRSkgKyAoeCkpKQotI2RlZmluZSBCT05JVE9fSVJRX0JBU0UgICAzMgotCiAjZWxzZQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA2MDgzZGI1Li4xNDViYjgxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMjQsNiArMjQsMzMgQEAKICNlbmRpZiAvKiBTTVRDICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KIAorI2lmZGVmIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUCisKKyNkZWZpbmUgVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChwZ2QpCQkJCVwKKwl0bGJtaXNzX2hhbmRsZXJfc2V0dXBfcGdkKCh1bnNpZ25lZCBsb25nKShwZ2QpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxibWlzc19oYW5kbGVyX3NldHVwX3BnZCh1bnNpZ25lZCBsb25nIHBnZCkKK3sKKwkvKiBDaGVjayBmb3Igc3dhcHBlcl9wZ19kaXIgYW5kIGNvbnZlcnQgdG8gcGh5c2ljYWwgYWRkcmVzcy4gKi8KKwlpZiAoKHBnZCAmIENLU0VHMykgPT0gQ0tTRUcwKQorCQlwZ2QgPSBDUEhZU0FERFIocGdkKTsKKwl3cml0ZV9jMF9jb250ZXh0KHBnZCA8PCAxMSk7Cit9CisKKyNkZWZpbmUgVExCTUlTU19IQU5ETEVSX1NFVFVQKCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKTsJCVwKKwkJd3JpdGVfYzBfeGNvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCA1MSk7IFwKKwl9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY3VycmVudF9wZ2Qodm9pZCkKK3sKKwlyZXR1cm4gUEhZU19UT19YS1NFR19DQUNIRUQoKHJlYWRfYzBfY29udGV4dCgpID4+IDExKSAmIH4weGZmZlVMKTsKK30KKworI2Vsc2UgLyogQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQ6IHVzaW5nICBwZ2RfY3VycmVudCovCisKIC8qCiAgKiBGb3IgdGhlIGZhc3QgdGxiIG1pc3MgaGFuZGxlcnMsIHdlIGtlZXAgYSBwZXIgY3B1IGFycmF5IG9mIHBvaW50ZXJzCiAgKiB0byB0aGUgY3VycmVudCBwZ2QgZm9yIGVhY2ggcHJvY2Vzc29yLiBBbHNvLCB0aGUgcHJvYy4gaWQgaXMgc3R1ZmZlZApAQCAtNDYsNyArNzMsNyBAQAogCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsJCQkJCVwKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQogI2VuZGlmCi0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVCovCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQogCiAjZGVmaW5lIEFTSURfSU5DCTB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1hZ2wtZGVmcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWFnbC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NGI5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1hZ2wtZGVmcy5oCkBAIC0wLDAgKzEsMTE5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqbGljZW5zZSBzdGFydCoqKioqKioqKioqKioqKgorICogQXV0aG9yOiBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBDb250YWN0OiBzdXBwb3J0QGNhdml1bW5ldHdvcmtzLmNvbQorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9DVEVPTiBTREsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogQVMtSVMgYW5kIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUsIG9yCisgKiBOT05JTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKiBvciB2aXNpdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYWxzbyBiZSBhdmFpbGFibGUgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBmcm9tIENhdml1bS4KKyAqIENvbnRhY3QgQ2F2aXVtIE5ldHdvcmtzIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKipsaWNlbnNlIGVuZCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ1ZNWF9BR0xfREVGU19IX18KKyNkZWZpbmUgX19DVk1YX0FHTF9ERUZTX0hfXworCisjZGVmaW5lIENWTVhfQUdMX0dNWF9CQURfUkVHIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDUxOHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX0JJU1QgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNDAwdWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfRFJWX0NUTCBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA3RjB1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9JTkZfTU9ERSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA3Rjh1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9QUlRYX0NGRyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDAxMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0FEUl9DQU0wKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMTgwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfQURSX0NBTTEob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAxODh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDE5MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0FEUl9DQU0zKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMTk4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfQURSX0NBTTQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAxQTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNNShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDFBOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0FEUl9DQU1fRU4ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAxMDh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ1RMKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMTAwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfREVDSVNJT04ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwNDB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9GUk1fQ0hLKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDIwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfRlJNX0NUTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDAxOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0ZSTV9NQVgob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwMzB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9GUk1fTUlOKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDI4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfSUZHKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDU4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfSU5UX0VOKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDA4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfSU5UX1JFRyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDAwMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0pBQkJFUihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDAzOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1BBVVNFX0RST1BfVElNRShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA2OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX0NUTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA1MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX09DVFMob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwODh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19PQ1RTX0NUTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA5OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX09DVFNfRE1BQyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDBBOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX09DVFNfRFJQKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMEI4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfUEtUUyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA4MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfQkFEKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMEMwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfUEtUU19DVEwob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwOTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19QS1RTX0RNQUMob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwQTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19QS1RTX0RSUChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDBCMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1VERF9TS1Aob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwNDh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYX0JQX0RST1BYKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNDIwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogOCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWF9CUF9PRkZYKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNDYwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogOCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWF9CUF9PTlgob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0NDB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiA4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYX1BSVF9JTkZPIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDRFOHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYX1RYX1NUQVRVUyBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA3RTh1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9TTUFDWChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDIzMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfU1RBVF9CUCBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA1MjB1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfQVBQRU5EKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfQ1RMKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjcwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfTUlOX1BLVChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI0MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1BBVVNFX1BLVF9JTlRFUlZBTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI0OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1BBVVNFX1BLVF9USU1FKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjM4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfUEFVU0VfVE9HTyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI1OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1BBVVNFX1pFUk8ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyNjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TT0ZUX1BBVVNFKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjUwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDAob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyODB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUMShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI4OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVQyKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjkwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDMob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyOTh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUNChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDJBMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVQ1KG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMkE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDYob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyQjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUNyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDJCOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVQ4KG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMkMwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDkob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyQzh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUU19DVEwob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyNjh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9USFJFU0gob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyMTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYX0JQIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDREMHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYX0NPTF9BVFRFTVBUIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDQ5OHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYX0lGRyBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0ODh1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9JTlRfRU4gXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNTA4dWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfSU5UX1JFRyBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA1MDB1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9KQU0gXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNDkwdWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfTEZTUiBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0Rjh1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9PVlJfQlAgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNEM4dWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfUEFVU0VfUEtUX0RNQUMgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNEEwdWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfUEFVU0VfUEtUX1RZUEUgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNEE4dWxsKQorCit1bmlvbiBjdm14X2FnbF9nbXhfYmFkX3JlZyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmFkX3JlZ19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzhfNjM6MjY7CisJCXVpbnQ2NF90IHR4cHNoMToxOworCQl1aW50NjRfdCB0eHBvcDE6MTsKKwkJdWludDY0X3Qgb3ZyZmx3MToxOworCQl1aW50NjRfdCB0eHBzaDoxOworCQl1aW50NjRfdCB0eHBvcDoxOworCQl1aW50NjRfdCBvdnJmbHc6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjdfMzE6NTsKKwkJdWludDY0X3Qgc3RhdG92cjoxOworCQl1aW50NjRfdCByZXNlcnZlZF8yM18yNTozOworCQl1aW50NjRfdCBsb3N0c3RhdDoxOworCQl1aW50NjRfdCByZXNlcnZlZF80XzIxOjE4OworCQl1aW50NjRfdCBvdXRfb3ZyOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzBfMToyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2JhZF9yZWdfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iYWRfcmVnX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iYWRfcmVnX2NuNTZ4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzM1XzYzOjI5OworCQl1aW50NjRfdCB0eHBzaDoxOworCQl1aW50NjRfdCB0eHBvcDoxOworCQl1aW50NjRfdCBvdnJmbHc6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjdfMzE6NTsKKwkJdWludDY0X3Qgc3RhdG92cjoxOworCQl1aW50NjRfdCByZXNlcnZlZF8yM18yNTozOworCQl1aW50NjRfdCBsb3N0c3RhdDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8zXzIxOjE5OworCQl1aW50NjRfdCBvdXRfb3ZyOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzBfMToyOworCX0gY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmFkX3JlZ19jbjU2eHggY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfYmlzdCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmlzdF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTBfNjM6NTQ7CisJCXVpbnQ2NF90IHN0YXR1czoxMDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iaXN0X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmlzdF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmlzdF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2Jpc3RfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9kcnZfY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9kcnZfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80OV82MzoxNTsKKwkJdWludDY0X3QgYnlwX2VuMToxOworCQl1aW50NjRfdCByZXNlcnZlZF80NV80NzozOworCQl1aW50NjRfdCBwY3RsMTo1OworCQl1aW50NjRfdCByZXNlcnZlZF8zN18zOTozOworCQl1aW50NjRfdCBuY3RsMTo1OworCQl1aW50NjRfdCByZXNlcnZlZF8xN18zMToxNTsKKwkJdWludDY0X3QgYnlwX2VuOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEzXzE1OjM7CisJCXVpbnQ2NF90IHBjdGw6NTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNV83OjM7CisJCXVpbnQ2NF90IG5jdGw6NTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9kcnZfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfZHJ2X2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfZHJ2X2N0bF9jbjU2eHggeworCQl1aW50NjRfdCByZXNlcnZlZF8xN182Mzo0NzsKKwkJdWludDY0X3QgYnlwX2VuOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEzXzE1OjM7CisJCXVpbnQ2NF90IHBjdGw6NTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNV83OjM7CisJCXVpbnQ2NF90IG5jdGw6NTsKKwl9IGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2Rydl9jdGxfY241Nnh4IGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X2luZl9tb2RlIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9pbmZfbW9kZV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMl82Mzo2MjsKKwkJdWludDY0X3QgZW46MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMF8wOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfaW5mX21vZGVfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9pbmZfbW9kZV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfaW5mX21vZGVfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9pbmZfbW9kZV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3BydHhfY2ZnIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9wcnR4X2NmZ19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNl82Mzo1ODsKKwkJdWludDY0X3QgdHhfZW46MTsKKwkJdWludDY0X3QgcnhfZW46MTsKKwkJdWludDY0X3Qgc2xvdHRpbWU6MTsKKwkJdWludDY0X3QgZHVwbGV4OjE7CisJCXVpbnQ2NF90IHNwZWVkOjE7CisJCXVpbnQ2NF90IGVuOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcHJ0eF9jZmdfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9wcnR4X2NmZ19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcHJ0eF9jZmdfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9wcnR4X2NmZ19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0wX3MgeworCQl1aW50NjRfdCBhZHI6NjQ7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0wX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0wX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTBfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTBfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTEgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMV9zIHsKKwkJdWludDY0X3QgYWRyOjY0OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0xX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0xX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0yIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTJfcyB7CisJCXVpbnQ2NF90IGFkcjo2NDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTJfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTJfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMl9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0zX3MgeworCQl1aW50NjRfdCBhZHI6NjQ7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0zX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0zX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTNfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTNfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNF9zIHsKKwkJdWludDY0X3QgYWRyOjY0OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW00X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW00X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW01IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTVfcyB7CisJCXVpbnQ2NF90IGFkcjo2NDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTVfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTVfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtX2VuIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbV9lbl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOF82Mzo1NjsKKwkJdWludDY0X3QgZW46ODsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbV9lbl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtX2VuX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbV9lbl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtX2VuX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jdGwgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80XzYzOjYwOworCQl1aW50NjRfdCBjYW1fbW9kZToxOworCQl1aW50NjRfdCBtY3N0OjI7CisJCXVpbnQ2NF90IGJjc3Q6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2N0bF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY3RsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2N0bF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY3RsX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2RlY2lzaW9uIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZGVjaXNpb25fcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzVfNjM6NTk7CisJCXVpbnQ2NF90IGNudDo1OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9kZWNpc2lvbl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9kZWNpc2lvbl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2RlY2lzaW9uX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2RlY2lzaW9uX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2ZybV9jaGsgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fY2hrX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF85XzYzOjU1OworCQl1aW50NjRfdCBza3BlcnI6MTsKKwkJdWludDY0X3QgcmN2ZXJyOjE7CisJCXVpbnQ2NF90IGxlbmVycjoxOworCQl1aW50NjRfdCBhbG5lcnI6MTsKKwkJdWludDY0X3QgZmNzZXJyOjE7CisJCXVpbnQ2NF90IGphYmJlcjoxOworCQl1aW50NjRfdCBtYXhlcnI6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8xOjE7CisJCXVpbnQ2NF90IG1pbmVycjoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fY2hrX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jaGtfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fY2hrX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jaGtfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfZnJtX2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jdGxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEwXzYzOjU0OworCQl1aW50NjRfdCBwcmVfYWxpZ246MTsKKwkJdWludDY0X3QgcGFkX2xlbjoxOworCQl1aW50NjRfdCB2bGFuX2xlbjoxOworCQl1aW50NjRfdCBwcmVfZnJlZToxOworCQl1aW50NjRfdCBjdGxfc21hYzoxOworCQl1aW50NjRfdCBjdGxfbWNzdDoxOworCQl1aW50NjRfdCBjdGxfYmNrOjE7CisJCXVpbnQ2NF90IGN0bF9kcnA6MTsKKwkJdWludDY0X3QgcHJlX3N0cnA6MTsKKwkJdWludDY0X3QgcHJlX2NoazoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jdGxfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fY3RsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfZnJtX21heCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9tYXhfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzYzOjQ4OworCQl1aW50NjRfdCBsZW46MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9tYXhfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21heF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9tYXhfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21heF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWluIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21pbl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IGxlbjoxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21pbl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWluX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21pbl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWluX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2lmZyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2lmZ19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNF82Mzo2MDsKKwkJdWludDY0X3QgaWZnOjQ7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2lmZ19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pZmdfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pZmdfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaWZnX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2ludF9lbiB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9lbl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjBfNjM6NDQ7CisJCXVpbnQ2NF90IHBhdXNlX2RycDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xNl8xODozOworCQl1aW50NjRfdCBpZmdlcnI6MTsKKwkJdWludDY0X3QgY29sZGV0OjE7CisJCXVpbnQ2NF90IGZhbGVycjoxOworCQl1aW50NjRfdCByc3ZlcnI6MTsKKwkJdWludDY0X3QgcGN0ZXJyOjE7CisJCXVpbnQ2NF90IG92cmVycjoxOworCQl1aW50NjRfdCByZXNlcnZlZF85Xzk6MTsKKwkJdWludDY0X3Qgc2twZXJyOjE7CisJCXVpbnQ2NF90IHJjdmVycjoxOworCQl1aW50NjRfdCBsZW5lcnI6MTsKKwkJdWludDY0X3QgYWxuZXJyOjE7CisJCXVpbnQ2NF90IGZjc2VycjoxOworCQl1aW50NjRfdCBqYWJiZXI6MTsKKwkJdWludDY0X3QgbWF4ZXJyOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMToxOworCQl1aW50NjRfdCBtaW5lcnI6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X2VuX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9lbl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9lbl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pbnRfZW5fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfaW50X3JlZyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9yZWdfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIwXzYzOjQ0OworCQl1aW50NjRfdCBwYXVzZV9kcnA6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfMTg6MzsKKwkJdWludDY0X3QgaWZnZXJyOjE7CisJCXVpbnQ2NF90IGNvbGRldDoxOworCQl1aW50NjRfdCBmYWxlcnI6MTsKKwkJdWludDY0X3QgcnN2ZXJyOjE7CisJCXVpbnQ2NF90IHBjdGVycjoxOworCQl1aW50NjRfdCBvdnJlcnI6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOV85OjE7CisJCXVpbnQ2NF90IHNrcGVycjoxOworCQl1aW50NjRfdCByY3ZlcnI6MTsKKwkJdWludDY0X3QgbGVuZXJyOjE7CisJCXVpbnQ2NF90IGFsbmVycjoxOworCQl1aW50NjRfdCBmY3NlcnI6MTsKKwkJdWludDY0X3QgamFiYmVyOjE7CisJCXVpbnQ2NF90IG1heGVycjoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xXzE6MTsKKwkJdWludDY0X3QgbWluZXJyOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9yZWdfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X3JlZ19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9yZWdfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X3JlZ19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9qYWJiZXIgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9qYWJiZXJfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzYzOjQ4OworCQl1aW50NjRfdCBjbnQ6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2phYmJlcl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9qYWJiZXJfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9qYWJiZXJfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfamFiYmVyX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3BhdXNlX2Ryb3BfdGltZSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3BhdXNlX2Ryb3BfdGltZV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IHN0YXR1czoxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfcGF1c2VfZHJvcF90aW1lX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3BhdXNlX2Ryb3BfdGltZV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3BhdXNlX2Ryb3BfdGltZV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9wYXVzZV9kcm9wX3RpbWVfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xXzYzOjYzOworCQl1aW50NjRfdCByZF9jbHI6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX2N0bF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0cyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ4XzYzOjE2OworCQl1aW50NjRfdCBjbnQ6NDg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80OF82MzoxNjsKKwkJdWludDY0X3QgY250OjQ4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2N0bF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfY3RsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfY3RsX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZG1hYyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZG1hY19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDhfNjM6MTY7CisJCXVpbnQ2NF90IGNudDo0ODsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kbWFjX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZG1hY19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZG1hY19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RtYWNfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kcnAgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RycF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDhfNjM6MTY7CisJCXVpbnQ2NF90IGNudDo0ODsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kcnBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kcnBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RycF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RycF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzJfNjM6MzI7CisJCXVpbnQ2NF90IGNudDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfYmFkIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19iYWRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzMyXzYzOjMyOworCQl1aW50NjRfdCBjbnQ6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfYmFkX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfYmFkX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19iYWRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19iYWRfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19jdGwgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2N0bF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzJfNjM6MzI7CisJCXVpbnQ2NF90IGNudDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19jdGxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19jdGxfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2N0bF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2N0bF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RtYWMgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RtYWNfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzMyXzYzOjMyOworCQl1aW50NjRfdCBjbnQ6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZG1hY19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RtYWNfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RtYWNfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kbWFjX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZHJwIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kcnBfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzMyXzYzOjMyOworCQl1aW50NjRfdCBjbnQ6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZHJwX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZHJwX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kcnBfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kcnBfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfdWRkX3NrcCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3VkZF9za3BfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzlfNjM6NTU7CisJCXVpbnQ2NF90IGZjc3NlbDoxOworCQl1aW50NjRfdCByZXNlcnZlZF83Xzc6MTsKKwkJdWludDY0X3QgbGVuOjc7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3VkZF9za3BfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfdWRkX3NrcF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3VkZF9za3BfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfdWRkX3NrcF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4X2JwX2Ryb3B4IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9kcm9weF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNl82Mzo1ODsKKwkJdWludDY0X3QgbWFyazo2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX2Ryb3B4X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfZHJvcHhfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX2Ryb3B4X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfZHJvcHhfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeF9icF9vZmZ4IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9vZmZ4X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF82XzYzOjU4OworCQl1aW50NjRfdCBtYXJrOjY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfb2ZmeF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29mZnhfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29mZnhfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9vZmZ4X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnhfYnBfb254IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9vbnhfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzlfNjM6NTU7CisJCXVpbnQ2NF90IG1hcms6OTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9vbnhfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9vbnhfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29ueF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29ueF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4X3BydF9pbmZvIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9wcnRfaW5mb19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMThfNjM6NDY7CisJCXVpbnQ2NF90IGRyb3A6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMl8xNToxNDsKKwkJdWludDY0X3QgY29tbWl0OjI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfcHJ0X2luZm9fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9wcnRfaW5mb19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfcHJ0X2luZm9fY241Nnh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTdfNjM6NDc7CisJCXVpbnQ2NF90IGRyb3A6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8xNToxNTsKKwkJdWludDY0X3QgY29tbWl0OjE7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9wcnRfaW5mb19jbjU2eHggY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnhfdHhfc3RhdHVzIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF90eF9zdGF0dXNfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzZfNjM6NTg7CisJCXVpbnQ2NF90IHR4OjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzJfMzoyOworCQl1aW50NjRfdCByeDoyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X3R4X3N0YXR1c19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X3R4X3N0YXR1c19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfdHhfc3RhdHVzX2NuNTZ4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzVfNjM6NTk7CisJCXVpbnQ2NF90IHR4OjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMzozOworCQl1aW50NjRfdCByeDoxOworCX0gY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfdHhfc3RhdHVzX2NuNTZ4eCBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9zbWFjeCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfc21hY3hfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ4XzYzOjE2OworCQl1aW50NjRfdCBzbWFjOjQ4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3NtYWN4X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfc21hY3hfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3NtYWN4X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfc21hY3hfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9zdGF0X2JwIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zdGF0X2JwX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xN182Mzo0NzsKKwkJdWludDY0X3QgYnA6MTsKKwkJdWludDY0X3QgY250OjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3N0YXRfYnBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zdGF0X2JwX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zdGF0X2JwX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfc3RhdF9icF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9hcHBlbmQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9hcHBlbmRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzRfNjM6NjA7CisJCXVpbnQ2NF90IGZvcmNlX2ZjczoxOworCQl1aW50NjRfdCBmY3M6MTsKKwkJdWludDY0X3QgcGFkOjE7CisJCXVpbnQ2NF90IHByZWFtYmxlOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2FwcGVuZF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9hcHBlbmRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9hcHBlbmRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfYXBwZW5kX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2N0bF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMl82Mzo2MjsKKwkJdWludDY0X3QgeHNkZWZfZW46MTsKKwkJdWludDY0X3QgeHNjb2xfZW46MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2N0bF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfbWluX3BrdCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X21pbl9wa3RfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzhfNjM6NTY7CisJCXVpbnQ2NF90IG1pbl9zaXplOjg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X21pbl9wa3RfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfbWluX3BrdF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X21pbl9wa3RfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfbWluX3BrdF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfaW50ZXJ2YWwgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfaW50ZXJ2YWxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzYzOjQ4OworCQl1aW50NjRfdCBpbnRlcnZhbDoxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X2ludGVydmFsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF9pbnRlcnZhbF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF9pbnRlcnZhbF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfaW50ZXJ2YWxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X3RpbWUgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfdGltZV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IHRpbWU6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF90aW1lX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF90aW1lX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X3RpbWVfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X3RpbWVfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfcGF1c2VfdG9nbyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3RvZ29fcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzYzOjQ4OworCQl1aW50NjRfdCB0aW1lOjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV90b2dvX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3RvZ29fcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV90b2dvX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3RvZ29fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfcGF1c2VfemVybyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3plcm9fcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfNjM6NjM7CisJCXVpbnQ2NF90IHNlbmQ6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfemVyb19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV96ZXJvX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfemVyb19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV96ZXJvX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3NvZnRfcGF1c2UgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zb2Z0X3BhdXNlX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xNl82Mzo0ODsKKwkJdWludDY0X3QgdGltZToxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc29mdF9wYXVzZV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zb2Z0X3BhdXNlX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc29mdF9wYXVzZV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zb2Z0X3BhdXNlX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQwIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDBfcyB7CisJCXVpbnQ2NF90IHhzZGVmOjMyOworCQl1aW50NjRfdCB4c2NvbDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9zdGF0MSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQxX3MgeworCQl1aW50NjRfdCBzY29sOjMyOworCQl1aW50NjRfdCBtY29sOjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQxX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQxX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQyIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDJfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ4XzYzOjE2OworCQl1aW50NjRfdCBvY3RzOjQ4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0Ml9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0Ml9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQyX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQyX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQzIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDNfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzMyXzYzOjMyOworCQl1aW50NjRfdCBwa3RzOjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0M19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0M19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQzX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQzX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQ0IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDRfcyB7CisJCXVpbnQ2NF90IGhpc3QxOjMyOworCQl1aW50NjRfdCBoaXN0MDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9zdGF0NSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ1X3MgeworCQl1aW50NjRfdCBoaXN0MzozMjsKKwkJdWludDY0X3QgaGlzdDI6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ1X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ1X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDVfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDVfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDYgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0Nl9zIHsKKwkJdWludDY0X3QgaGlzdDU6MzI7CisJCXVpbnQ2NF90IGhpc3Q0OjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0Nl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0Nl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ2X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ2X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQ3IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDdfcyB7CisJCXVpbnQ2NF90IGhpc3Q3OjMyOworCQl1aW50NjRfdCBoaXN0NjozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDdfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDdfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0N19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0N19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9zdGF0OCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ4X3MgeworCQl1aW50NjRfdCBtY3N0OjMyOworCQl1aW50NjRfdCBiY3N0OjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0OF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0OF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ4X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ4X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQ5IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDlfcyB7CisJCXVpbnQ2NF90IHVuZGZsdzozMjsKKwkJdWludDY0X3QgY3RsOjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0OV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0OV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ5X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ5X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXRzX2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXRzX2N0bF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV82Mzo2MzsKKwkJdWludDY0X3QgcmRfY2xyOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXRzX2N0bF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0c19jdGxfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0c19jdGxfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdHNfY3RsX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3RocmVzaCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3RocmVzaF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNl82Mzo1ODsKKwkJdWludDY0X3QgY250OjY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3RocmVzaF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF90aHJlc2hfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF90aHJlc2hfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfdGhyZXNoX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHhfYnAgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2JwX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yXzYzOjYyOworCQl1aW50NjRfdCBicDoyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2JwX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfYnBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2JwX2NuNTZ4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfNjM6NjM7CisJCXVpbnQ2NF90IGJwOjE7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9icF9jbjU2eHggY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHhfY29sX2F0dGVtcHQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2NvbF9hdHRlbXB0X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF81XzYzOjU5OworCQl1aW50NjRfdCBsaW1pdDo1OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2NvbF9hdHRlbXB0X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfY29sX2F0dGVtcHRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2NvbF9hdHRlbXB0X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfY29sX2F0dGVtcHRfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9pZmcgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2lmZ19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOF82Mzo1NjsKKwkJdWludDY0X3QgaWZnMjo0OworCQl1aW50NjRfdCBpZmcxOjQ7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaWZnX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaWZnX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pZmdfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pZmdfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9pbnRfZW4geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9lbl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMThfNjM6NDY7CisJCXVpbnQ2NF90IGxhdGVfY29sOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE0XzE1OjI7CisJCXVpbnQ2NF90IHhzZGVmOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEwXzExOjI7CisJCXVpbnQ2NF90IHhzY29sOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzRfNzo0OworCQl1aW50NjRfdCB1bmRmbHc6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8xOjE7CisJCXVpbnQ2NF90IHBrb19ueGE6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pbnRfZW5fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pbnRfZW5fcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9lbl9jbjU2eHggeworCQl1aW50NjRfdCByZXNlcnZlZF8xN182Mzo0NzsKKwkJdWludDY0X3QgbGF0ZV9jb2w6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTNfMTU6MzsKKwkJdWludDY0X3QgeHNkZWY6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOV8xMTozOworCQl1aW50NjRfdCB4c2NvbDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8zXzc6NTsKKwkJdWludDY0X3QgdW5kZmx3OjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMToxOworCQl1aW50NjRfdCBwa29fbnhhOjE7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pbnRfZW5fY241Nnh4IGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4X2ludF9yZWcgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9yZWdfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE4XzYzOjQ2OworCQl1aW50NjRfdCBsYXRlX2NvbDoyOworCQl1aW50NjRfdCByZXNlcnZlZF8xNF8xNToyOworCQl1aW50NjRfdCB4c2RlZjoyOworCQl1aW50NjRfdCByZXNlcnZlZF8xMF8xMToyOworCQl1aW50NjRfdCB4c2NvbDoyOworCQl1aW50NjRfdCByZXNlcnZlZF80Xzc6NDsKKwkJdWludDY0X3QgdW5kZmx3OjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMToxOworCQl1aW50NjRfdCBwa29fbnhhOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X3JlZ19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9yZWdfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9yZWdfY241Nnh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTdfNjM6NDc7CisJCXVpbnQ2NF90IGxhdGVfY29sOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEzXzE1OjM7CisJCXVpbnQ2NF90IHhzZGVmOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzlfMTE6MzsKKwkJdWludDY0X3QgeHNjb2w6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfM183OjU7CisJCXVpbnQ2NF90IHVuZGZsdzoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xXzE6MTsKKwkJdWludDY0X3QgcGtvX254YToxOworCX0gY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X3JlZ19jbjU2eHggY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHhfamFtIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9qYW1fcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzhfNjM6NTY7CisJCXVpbnQ2NF90IGphbTo4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2phbV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2phbV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfamFtX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfamFtX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHhfbGZzciB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfbGZzcl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IGxmc3I6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfbGZzcl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2xmc3JfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2xmc3JfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9sZnNyX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHhfb3ZyX2JwIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9vdnJfYnBfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEwXzYzOjU0OworCQl1aW50NjRfdCBlbjoyOworCQl1aW50NjRfdCByZXNlcnZlZF82Xzc6MjsKKwkJdWludDY0X3QgYnA6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMl8zOjI7CisJCXVpbnQ2NF90IGlnbl9mdWxsOjI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfb3ZyX2JwX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfb3ZyX2JwX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9vdnJfYnBfY241Nnh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOV82Mzo1NTsKKwkJdWludDY0X3QgZW46MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNV83OjM7CisJCXVpbnQ2NF90IGJwOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMzozOworCQl1aW50NjRfdCBpZ25fZnVsbDoxOworCX0gY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfb3ZyX2JwX2NuNTZ4eCBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfZG1hYyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X2RtYWNfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ4XzYzOjE2OworCQl1aW50NjRfdCBkbWFjOjQ4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X3BhdXNlX3BrdF9kbWFjX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X2RtYWNfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X3BhdXNlX3BrdF9kbWFjX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X2RtYWNfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfdHlwZSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X3R5cGVfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzYzOjQ4OworCQl1aW50NjRfdCB0eXBlOjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X3BhdXNlX3BrdF90eXBlX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X3R5cGVfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X3BhdXNlX3BrdF90eXBlX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X3R5cGVfcyBjbjU2eHhwMTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW1peHgtZGVmcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW1peHgtZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjZkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbWl4eC1kZWZzLmgKQEAgLTAsMCArMSwyNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKmxpY2Vuc2Ugc3RhcnQqKioqKioqKioqKioqKioKKyAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCisgKgorICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2F2aXVtIE5ldHdvcmtzCisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgorICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCisgKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqbGljZW5zZSBlbmQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0NWTVhfTUlYWF9ERUZTX0hfXworI2RlZmluZSBfX0NWTVhfTUlYWF9ERUZTX0hfXworCisjZGVmaW5lIENWTVhfTUlYWF9CSVNUKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDc4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9DVEwob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwMjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX0lOVEVOQShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDA1MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfSVJDTlQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwMzB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX0lSSFdNKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDI4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9JUklORzEob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwMTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX0lSSU5HMihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDAxOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfSVNSKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDQ4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9PUkNOVChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDA0MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfT1JIV00ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwMzh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX09SSU5HMShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDAwMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfT1JJTkcyKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDA4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9SRU1DTlQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwNTh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKwordW5pb24gY3ZteF9taXh4X2Jpc3QgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2Jpc3RfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzRfNjM6NjA7CisJCXVpbnQ2NF90IG1ycWRhdDoxOworCQl1aW50NjRfdCBpcGZkYXQ6MTsKKwkJdWludDY0X3QgaXJmZGF0OjE7CisJCXVpbnQ2NF90IG9yZmRhdDoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X2Jpc3RfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9iaXN0X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9iaXN0X3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfYmlzdF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF84XzYzOjU2OworCQl1aW50NjRfdCBjcmNfc3RyaXA6MTsKKwkJdWludDY0X3QgYnVzeToxOworCQl1aW50NjRfdCBlbjoxOworCQl1aW50NjRfdCByZXNldDoxOworCQl1aW50NjRfdCBsZW5kaWFuOjE7CisJCXVpbnQ2NF90IG5idGFyYjoxOworCQl1aW50NjRfdCBtcnFfaHdtOjI7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfY3RsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9jdGxfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9pbnRlbmEgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2ludGVuYV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfN182Mzo1NzsKKwkJdWludDY0X3Qgb3J1bmVuYToxOworCQl1aW50NjRfdCBpcnVuZW5hOjE7CisJCXVpbnQ2NF90IGRhdGFfZHJwZW5hOjE7CisJCXVpbnQ2NF90IGl0aGVuYToxOworCQl1aW50NjRfdCBvdGhlbmE6MTsKKwkJdWludDY0X3QgaXZmZW5hOjE7CisJCXVpbnQ2NF90IG92ZmVuYToxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X2ludGVuYV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2ludGVuYV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfaW50ZW5hX3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfaW50ZW5hX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfaXJjbnQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyY250X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yMF82Mzo0NDsKKwkJdWludDY0X3QgaXJjbnQ6MjA7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfaXJjbnRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmNudF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfaXJjbnRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmNudF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X2lyaHdtIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9pcmh3bV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDBfNjM6MjQ7CisJCXVpbnQ2NF90IGlicGx3bToyMDsKKwkJdWludDY0X3QgaXJod206MjA7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfaXJod21fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmh3bV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfaXJod21fcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmh3bV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X2lyaW5nMSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfaXJpbmcxX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF82MF82Mzo0OworCQl1aW50NjRfdCBpc2l6ZToyMDsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzZfMzk6NDsKKwkJdWludDY0X3QgaWJhc2U6MzM7CisJCXVpbnQ2NF90IHJlc2VydmVkXzBfMjozOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaW5nMV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaW5nMV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfaXJpbmcxX3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfaXJpbmcxX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfaXJpbmcyIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzJfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzUyXzYzOjEyOworCQl1aW50NjRfdCBpdGxwdHI6MjA7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIwXzMxOjEyOworCQl1aW50NjRfdCBpZGJlbGw6MjA7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfaXJpbmcyX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfaXJpbmcyX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzJfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzJfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9pc3IgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lzcl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfN182Mzo1NzsKKwkJdWludDY0X3Qgb3J1bjoxOworCQl1aW50NjRfdCBpcnVuOjE7CisJCXVpbnQ2NF90IGRhdGFfZHJwOjE7CisJCXVpbnQ2NF90IGlydGhyZXNoOjE7CisJCXVpbnQ2NF90IG9ydGhyZXNoOjE7CisJCXVpbnQ2NF90IGlkYmxvdmY6MTsKKwkJdWludDY0X3Qgb2RibG92ZjoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lzcl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lzcl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfaXNyX3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfaXNyX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfb3JjbnQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yY250X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yMF82Mzo0NDsKKwkJdWludDY0X3Qgb3JjbnQ6MjA7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfb3JjbnRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9vcmNudF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfb3JjbnRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9vcmNudF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X29yaHdtIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9vcmh3bV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjBfNjM6NDQ7CisJCXVpbnQ2NF90IG9yaHdtOjIwOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaHdtX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfb3Jod21fcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaHdtX3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfb3Jod21fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9vcmluZzEgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNjBfNjM6NDsKKwkJdWludDY0X3Qgb3NpemU6MjA7CisJCXVpbnQ2NF90IHJlc2VydmVkXzM2XzM5OjQ7CisJCXVpbnQ2NF90IG9iYXNlOjMzOworCQl1aW50NjRfdCByZXNlcnZlZF8wXzI6MzsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9vcmluZzFfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9vcmluZzFfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X29yaW5nMiB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfb3JpbmcyX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF81Ml82MzoxMjsKKwkJdWludDY0X3Qgb3RscHRyOjIwOworCQl1aW50NjRfdCByZXNlcnZlZF8yMF8zMToxMjsKKwkJdWludDY0X3Qgb2RiZWxsOjIwOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfb3JpbmcyX3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfb3JpbmcyX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfcmVtY250IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9yZW1jbnRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzUyXzYzOjEyOworCQl1aW50NjRfdCBpcmVtY250OjIwOworCQl1aW50NjRfdCByZXNlcnZlZF8yMF8zMToxMjsKKwkJdWludDY0X3Qgb3JlbWNudDoyMDsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9yZW1jbnRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9yZW1jbnRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9taXh4X3JlbWNudF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X3JlbWNudF9zIGNuNTZ4eHAxOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtc21peC1kZWZzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtc21peC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlNDVmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1zbWl4LWRlZnMuaApAQCAtMCwwICsxLDE3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqbGljZW5zZSBzdGFydCoqKioqKioqKioqKioqKgorICogQXV0aG9yOiBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBDb250YWN0OiBzdXBwb3J0QGNhdml1bW5ldHdvcmtzLmNvbQorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9DVEVPTiBTREsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogQVMtSVMgYW5kIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUsIG9yCisgKiBOT05JTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKiBvciB2aXNpdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYWxzbyBiZSBhdmFpbGFibGUgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBmcm9tIENhdml1bS4KKyAqIENvbnRhY3QgQ2F2aXVtIE5ldHdvcmtzIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKipsaWNlbnNlIGVuZCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ1ZNWF9TTUlYX0RFRlNfSF9fCisjZGVmaW5lIF9fQ1ZNWF9TTUlYX0RFRlNfSF9fCisKKyNkZWZpbmUgQ1ZNWF9TTUlYX0NMSyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDAwMDAwMTgxOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDI1NikpCisjZGVmaW5lIENWTVhfU01JWF9DTUQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwMDAwMDE4MDB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyNTYpKQorI2RlZmluZSBDVk1YX1NNSVhfRU4ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwMDAwMDE4MjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyNTYpKQorI2RlZmluZSBDVk1YX1NNSVhfUkRfREFUKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMDAwMDAxODEwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjU2KSkKKyNkZWZpbmUgQ1ZNWF9TTUlYX1dSX0RBVChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDAwMDAwMTgwOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDI1NikpCisKK3VuaW9uIGN2bXhfc21peF9jbGsgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjVfNjM6Mzk7CisJCXVpbnQ2NF90IG1vZGU6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjFfMjM6MzsKKwkJdWludDY0X3Qgc2FtcGxlX2hpOjU7CisJCXVpbnQ2NF90IHNhbXBsZV9tb2RlOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE0XzE0OjE7CisJCXVpbnQ2NF90IGNsa19pZGxlOjE7CisJCXVpbnQ2NF90IHByZWFtYmxlOjE7CisJCXVpbnQ2NF90IHNhbXBsZTo0OworCQl1aW50NjRfdCBwaGFzZTo4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjMweHggeworCQl1aW50NjRfdCByZXNlcnZlZF8yMV82Mzo0MzsKKwkJdWludDY0X3Qgc2FtcGxlX2hpOjU7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE0XzE1OjI7CisJCXVpbnQ2NF90IGNsa19pZGxlOjE7CisJCXVpbnQ2NF90IHByZWFtYmxlOjE7CisJCXVpbnQ2NF90IHNhbXBsZTo0OworCQl1aW50NjRfdCBwaGFzZTo4OworCX0gY24zMHh4OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX2NuMzB4eCBjbjMxeHg7CisJc3RydWN0IGN2bXhfc21peF9jbGtfY24zMHh4IGNuMzh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjMweHggY24zOHh4cDI7CisJc3RydWN0IGN2bXhfc21peF9jbGtfY241MHh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjVfNjM6Mzk7CisJCXVpbnQ2NF90IG1vZGU6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjFfMjM6MzsKKwkJdWludDY0X3Qgc2FtcGxlX2hpOjU7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE0XzE1OjI7CisJCXVpbnQ2NF90IGNsa19pZGxlOjE7CisJCXVpbnQ2NF90IHByZWFtYmxlOjE7CisJCXVpbnQ2NF90IHNhbXBsZTo0OworCQl1aW50NjRfdCBwaGFzZTo4OworCX0gY241MHh4OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX3MgY241Mnh4OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX2NuNTB4eCBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjUweHggY241Nnh4cDE7CisJc3RydWN0IGN2bXhfc21peF9jbGtfY24zMHh4IGNuNTh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjMweHggY241OHh4cDE7Cit9OworCit1bmlvbiBjdm14X3NtaXhfY21kIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfc21peF9jbWRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE4XzYzOjQ2OworCQl1aW50NjRfdCBwaHlfb3A6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTNfMTU6MzsKKwkJdWludDY0X3QgcGh5X2Fkcjo1OworCQl1aW50NjRfdCByZXNlcnZlZF81Xzc6MzsKKwkJdWludDY0X3QgcmVnX2Fkcjo1OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9jbjMweHggeworCQl1aW50NjRfdCByZXNlcnZlZF8xN182Mzo0NzsKKwkJdWludDY0X3QgcGh5X29wOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEzXzE1OjM7CisJCXVpbnQ2NF90IHBoeV9hZHI6NTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNV83OjM7CisJCXVpbnQ2NF90IHJlZ19hZHI6NTsKKwl9IGNuMzB4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9jbjMweHggY24zMXh4OworCXN0cnVjdCBjdm14X3NtaXhfY21kX2NuMzB4eCBjbjM4eHg7CisJc3RydWN0IGN2bXhfc21peF9jbWRfY24zMHh4IGNuMzh4eHAyOworCXN0cnVjdCBjdm14X3NtaXhfY21kX3MgY241MHh4OworCXN0cnVjdCBjdm14X3NtaXhfY21kX3MgY241Mnh4OworCXN0cnVjdCBjdm14X3NtaXhfY21kX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfc21peF9jbWRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfc21peF9jbWRfcyBjbjU2eHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9jbjMweHggY241OHh4OworCXN0cnVjdCBjdm14X3NtaXhfY21kX2NuMzB4eCBjbjU4eHhwMTsKK307CisKK3VuaW9uIGN2bXhfc21peF9lbiB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfNjM6NjM7CisJCXVpbnQ2NF90IGVuOjE7CisJfSBzOworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjMweHg7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuMzF4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2VuX3MgY24zOHh4OworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjM4eHhwMjsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2VuX3MgY241MHh4OworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuNTZ4eHAxOworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjU4eHg7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuNTh4eHAxOworfTsKKwordW5pb24gY3ZteF9zbWl4X3JkX2RhdCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xOF82Mzo0NjsKKwkJdWludDY0X3QgcGVuZGluZzoxOworCQl1aW50NjRfdCB2YWw6MTsKKwkJdWludDY0X3QgZGF0OjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuMzB4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuMzF4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuMzh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuMzh4eHAyOworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY241MHh4OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY241Mnh4OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfc21peF9yZF9kYXRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfc21peF9yZF9kYXRfcyBjbjU2eHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuNTh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuNTh4eHAxOworfTsKKwordW5pb24gY3ZteF9zbWl4X3dyX2RhdCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xOF82Mzo0NjsKKwkJdWludDY0X3QgcGVuZGluZzoxOworCQl1aW50NjRfdCB2YWw6MTsKKwkJdWludDY0X3QgZGF0OjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuMzB4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuMzF4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuMzh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuMzh4eHAyOworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY241MHh4OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY241Mnh4OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfc21peF93cl9kYXRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfc21peF93cl9kYXRfcyBjbjU2eHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuNTh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuNTh4eHAxOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaAppbmRleCBjYWM5YjFhLi40ZDBhOGM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG9jdGVvbl9jcnlwdG9fZW5hYmxlKHN0cnVjdCBvY3Rlb25fY29wMl9zdGF0ZSAqc3RhdGUpOwogZXh0ZXJuIHZvaWQgb2N0ZW9uX2NyeXB0b19kaXNhYmxlKHN0cnVjdCBvY3Rlb25fY29wMl9zdGF0ZSAqc3RhdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgb2N0ZW9uX2NvcDJfcmVzdG9yZShzdHJ1Y3Qgb2N0ZW9uX2NvcDJfc3RhdGUgKnRhc2spOwogCiBleHRlcm4gdm9pZCBvY3Rlb25faW5pdF9jdm1jb3VudCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDZlYjYxMy4uMTg1NDMzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zOTAsNiArMzkwLDE5IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogCiAvKgorICogdW5jYWNoZWQgYWNjZWxlcmF0ZWQgVExCIG1hcCBmb3IgdmlkZW8gbWVtb3J5IGFjY2VzcworICovCisjaWZkZWYgQ09ORklHX0NQVV9TVVBQT1JUU19VTkNBQ0hFRF9BQ0NFTEVSQVRFRAorI2RlZmluZSBfX0hBVkVfUEhZU19NRU1fQUNDRVNTX1BST1QKKworc3RydWN0IGZpbGU7CitwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3Qgdm1hX3Byb3QpOworaW50IHBoeXNfbWVtX2FjY2Vzc19wcm90X2FsbG93ZWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQl1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICp2bWFfcHJvdCk7CisjZW5kaWYKKworLyoKICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmcKICAqIGNvbnN0cmFpbnRzIHBsYWNlZCBvbiB1cyBieSB0aGUgY2FjaGUgYXJjaGl0ZWN0dXJlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAppbmRleCBiZmNlNWM3Li42Mzc0MWNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKQEAgLTg1LDggKzg1LDcgQEAKIGV4dGVybiBQQ0hBUiBBcmNHZXRFbnZpcm9ubWVudFZhcmlhYmxlKFBDSEFSIG5hbWUpOwogZXh0ZXJuIExPTkcgQXJjU2V0RW52aXJvbm1lbnRWYXJpYWJsZShQQ0hBUiBuYW1lLCBQQ0hBUiB2YWx1ZSk7CiAKLS8qIEFSQ1MgY29tbWFuZCBsaW5lIGFjcXVpc2l0aW9uIGFuZCBwYXJzaW5nLiAqLwotZXh0ZXJuIGNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKKy8qIEFSQ1MgY29tbWFuZCBsaW5lIHBhcnNpbmcuICovCiBleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIAogLyogQWNxdWlyaW5nIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQgdGltZSwgZXRjLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA1YjYwYTA5Li4yMWVmOWVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMzQsMzMgKzM0LDMzIEBACiAgKiBiZWNvbWVzIGVxdWFsIHRvIHRoZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGFpbC4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19sb2NrZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGludCBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCiAJcmV0dXJuICgoY291bnRlcnMgPj4gMTQpIF4gY291bnRlcnMpICYgMHgxZmZmOwogfQogCi0jZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCi0jZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoeCkgXAotCXdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSkgeyBjcHVfcmVsYXgoKTsgfQorI2RlZmluZSBhcmNoX3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9zcGluX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KHgpIFwKKwl3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZCh4KSkgeyBjcHVfcmVsYXgoKTsgfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19jb250ZW5kZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGludCBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCiAJcmV0dXJuICgoKGNvdW50ZXJzID4+IDE0KSAtIGNvdW50ZXJzKSAmIDB4MWZmZikgPiAxOwogfQotI2RlZmluZSBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAlfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAorI2RlZmluZSBhcmNoX3NwaW5faXNfY29udGVuZGVkCWFyY2hfc3Bpbl9pc19jb250ZW5kZWQKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IG15X3RpY2tldDsKIAlpbnQgdG1wOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIJLnNldCBwdXNoCQkjIF9fcmF3X3NwaW5fbG9jawlcbiIKKwkJIgkuc2V0IHB1c2gJCSMgYXJjaF9zcGluX2xvY2sJXG4iCiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKQEAgLTk0LDcgKzk0LDcgQEAKIAkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KSk7CiAJfSBlbHNlIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiCS5zZXQgcHVzaAkJIyBfX3Jhd19zcGluX2xvY2sJXG4iCisJCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl9sb2NrCVxuIgogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgpAQCAtMTM0LDcgKzEzNCw3IEBACiAJc21wX2xsc2NfbWIoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl91bmxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXA7CiAKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIJCQkJIyBfX3Jhd19zcGluX3VubG9jawlcbiIKKwkJIgkJCQkjIGFyY2hfc3Bpbl91bmxvY2sJXG4iCiAJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCWFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCiAJCSIJb3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgpAQCAtMTUzLDcgKzE1Myw3IEBACiAJCSAgW3RpY2tldF0gIj0mciIgKHRtcCkpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIgkuc2V0IHB1c2gJCSMgX19yYXdfc3Bpbl91bmxvY2sJXG4iCisJCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl91bmxvY2sJXG4iCiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCkBAIC0xNzQsMTMgKzE3NCwxMyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXAsIHRtcDIsIHRtcDM7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIgkuc2V0IHB1c2gJCSMgX19yYXdfc3Bpbl90cnlsb2NrCVxuIgorCQkiCS5zZXQgcHVzaAkJIyBhcmNoX3NwaW5fdHJ5bG9jawlcbiIKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIgkuc2V0IHB1c2gJCSMgX19yYXdfc3Bpbl90cnlsb2NrCVxuIgorCQkiCS5zZXQgcHVzaAkJIyBhcmNoX3NwaW5fdHJ5bG9jawlcbiIKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSIJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKQEAgLTI0OCwyMSArMjQ4LDIxIEBACiAgKiByZWFkX2Nhbl9sb2NrIC0gd291bGQgcmVhZF90cnlsb2NrKCkgc3VjY2VlZD8KICAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgogICovCi0jZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2socncpCSgocncpLT5sb2NrID49IDApCisjZGVmaW5lIGFyY2hfcmVhZF9jYW5fbG9jayhydykJKChydyktPmxvY2sgPj0gMCkKIAogLyoKICAqIHdyaXRlX2Nhbl9sb2NrIC0gd291bGQgd3JpdGVfdHJ5bG9jaygpIHN1Y2NlZWQ/CiAgKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlvbi4KICAqLwotI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykJKCEocncpLT5sb2NrKQorI2RlZmluZSBhcmNoX3dyaXRlX2Nhbl9sb2NrKHJ3KQkoIShydyktPmxvY2spCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIgkuc2V0CW5vcmVvcmRlcgkjIF9fcmF3X3JlYWRfbG9jawlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIGFyY2hfcmVhZF9sb2NrCVxuIgogCQkiMToJbGwJJTEsICUyCQkJCQlcbiIKIAkJIglibHR6CSUxLCAxYgkJCQkJXG4iCiAJCSIJIGFkZHUJJTEsIDEJCQkJCVxuIgpAQCAtMjc1LDcgKzI3NSw3IEBACiAJCTogIm1lbW9yeSIpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCS5zZXQJbm9yZW9yZGVyCSMgX19yYXdfcmVhZF9sb2NrCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCSMgYXJjaF9yZWFkX2xvY2sJXG4iCiAJCSIxOglsbAklMSwgJTIJCQkJCVxuIgogCQkiCWJsdHoJJTEsIDJmCQkJCQlcbiIKIAkJIgkgYWRkdQklMSwgMQkJCQkJXG4iCkBAIC0zMDEsNyArMzAxLDcgQEAKIC8qIE5vdGUgdGhlIHVzZSBvZiBzdWIsIG5vdCBzdWJ1IHdoaWNoIHdpbGwgbWFrZSB0aGUga2VybmVsIGRpZSB3aXRoIGFuCiAgICBvdmVyZmxvdyBleGNlcHRpb24gaWYgd2UgZXZlciB0cnkgdG8gdW5sb2NrIGFuIHJ3bG9jayB0aGF0IGlzIGFscmVhZHkKICAgIHVubG9ja2VkIG9yIGlzIGJlaW5nIGhlbGQgYnkgYSB3cml0ZXIuICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCkBAIC0zMDksNyArMzA5LDcgQEAKIAogCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIxOglsbAklMSwgJTIJCSMgX19yYXdfcmVhZF91bmxvY2sJXG4iCisJCSIxOglsbAklMSwgJTIJCSMgYXJjaF9yZWFkX3VubG9jawlcbiIKIAkJIglzdWIJJTEsIDEJCQkJCVxuIgogCQkiCXNjCSUxLCAlMAkJCQkJXG4iCiAJCSIJYmVxemwJJTEsIDFiCQkJCQlcbiIKQEAgLTMxOCw3ICszMTgsNyBAQAogCQk6ICJtZW1vcnkiKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIgkuc2V0CW5vcmVvcmRlcgkjIF9fcmF3X3JlYWRfdW5sb2NrCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCSMgYXJjaF9yZWFkX3VubG9jawlcbiIKIAkJIjE6CWxsCSUxLCAlMgkJCQkJXG4iCiAJCSIJc3ViCSUxLCAxCQkJCQlcbiIKIAkJIglzYwklMSwgJTAJCQkJCVxuIgpAQCAtMzM1LDEzICszMzUsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCS5zZXQJbm9yZW9yZGVyCSMgX19yYXdfd3JpdGVfbG9jawlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIGFyY2hfd3JpdGVfbG9jawlcbiIKIAkJIjE6CWxsCSUxLCAlMgkJCQkJXG4iCiAJCSIJYm5legklMSwgMWIJCQkJCVxuIgogCQkiCSBsdWkJJTEsIDB4ODAwMAkJCQlcbiIKQEAgLTM1NCw3ICszNTQsNyBAQAogCQk6ICJtZW1vcnkiKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIgkuc2V0CW5vcmVvcmRlcgkjIF9fcmF3X3dyaXRlX2xvY2sJXG4iCisJCSIJLnNldAlub3Jlb3JkZXIJIyBhcmNoX3dyaXRlX2xvY2sJXG4iCiAJCSIxOglsbAklMSwgJTIJCQkJCVxuIgogCQkiCWJuZXoJJTEsIDJmCQkJCQlcbiIKIAkJIgkgbHVpCSUxLCAweDgwMDAJCQkJXG4iCkBAIC0zNzcsMjYgKzM3NywyNiBAQAogCXNtcF9sbHNjX21iKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlzbXBfbWIoKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIJCQkJIyBfX3Jhd193cml0ZV91bmxvY2sJXG4iCisJIgkJCQkjIGFyY2hfd3JpdGVfdW5sb2NrCVxuIgogCSIJc3cJJDAsICUwCQkJCQlcbiIKIAk6ICI9bSIgKHJ3LT5sb2NrKQogCTogIm0iIChydy0+bG9jaykKIAk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCWludCByZXQ7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCS5zZXQJbm9yZW9yZGVyCSMgX19yYXdfcmVhZF90cnlsb2NrCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCSMgYXJjaF9yZWFkX3RyeWxvY2sJXG4iCiAJCSIJbGkJJTIsIDAJCQkJCVxuIgogCQkiMToJbGwJJTEsICUzCQkJCQlcbiIKIAkJIglibHR6CSUxLCAyZgkJCQkJXG4iCkBAIC00MTMsNyArNDEzLDcgQEAKIAkJOiAibWVtb3J5Iik7CiAJfSBlbHNlIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIJLnNldAlub3Jlb3JkZXIJIyBfX3Jhd19yZWFkX3RyeWxvY2sJXG4iCisJCSIJLnNldAlub3Jlb3JkZXIJIyBhcmNoX3JlYWRfdHJ5bG9jawlcbiIKIAkJIglsaQklMiwgMAkJCQkJXG4iCiAJCSIxOglsbAklMSwgJTMJCQkJCVxuIgogCQkiCWJsdHoJJTEsIDJmCQkJCQlcbiIKQEAgLTQzMywxNCArNDMzLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGludCB0bXA7CiAJaW50IHJldDsKIAogCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIJLnNldAlub3Jlb3JkZXIJIyBfX3Jhd193cml0ZV90cnlsb2NrCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCSMgYXJjaF93cml0ZV90cnlsb2NrCVxuIgogCQkiCWxpCSUyLCAwCQkJCQlcbiIKIAkJIjE6CWxsCSUxLCAlMwkJCQkJXG4iCiAJCSIJYm5legklMSwgMmYJCQkJCVxuIgpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCTogIm1lbW9yeSIpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCS5zZXQJbm9yZW9yZGVyCSMgX19yYXdfd3JpdGVfdHJ5bG9jawlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkjIGFyY2hfd3JpdGVfdHJ5bG9jawlcbiIKIAkJIglsaQklMiwgMAkJCQkJXG4iCiAJCSIxOglsbAklMSwgJTMJCQkJCVxuIgogCQkiCWJuZXoJJTEsIDJmCQkJCQlcbiIKQEAgLTQ4MCwxMSArNDgwLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfd3JpdGVfbG9jayhsb2NrKQogCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qIF9BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBhZGVlZGFhMS4uZWUxOTdjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTEyLDE0ICsxMiwxNCBAQAogCSAqIGJpdHMgMTUuLjI4OiB0aWNrZXQKIAkgKi8KIAl1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3NwaW5sb2NrX3Q7Cit9IGFyY2hfc3BpbmxvY2tfdDsKIAotI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Ci19IHJhd19yd2xvY2tfdDsKK30gYXJjaF9yd2xvY2tfdDsKIAotI2RlZmluZSBfX1JBV19SV19MT0NLX1VOTE9DS0VECQl7IDAgfQorI2RlZmluZSBfX0FSQ0hfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N0YWNrZnJhbWUuaAppbmRleCBkYjBmYTdiLi4zYjZkYTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmgKQEAgLTUxLDkgKzUxLDYgQEAKIAkJTE9OR19TCXYxLCBQVF9BQ1goc3ApCiAjZWxzZQogCQltZmhpCXYxCi0JCUxPTkdfUwl2MSwgUFRfSEkoc3ApCi0JCW1mbG8JdjEKLQkJTE9OR19TCXYxLCBQVF9MTyhzcCkKICNlbmRpZgogI2lmZGVmIENPTkZJR18zMkJJVAogCQlMT05HX1MJJDgsIFBUX1I4KHNwKQpAQCAtNjIsMTAgKzU5LDE3IEBACiAJCUxPTkdfUwkkMTAsIFBUX1IxMChzcCkKIAkJTE9OR19TCSQxMSwgUFRfUjExKHNwKQogCQlMT05HX1MJJDEyLCBQVF9SMTIoc3ApCisjaWZuZGVmIENPTkZJR19DUFVfSEFTX1NNQVJUTUlQUworCQlMT05HX1MJdjEsIFBUX0hJKHNwKQorCQltZmxvCXYxCisjZW5kaWYKIAkJTE9OR19TCSQxMywgUFRfUjEzKHNwKQogCQlMT05HX1MJJDE0LCBQVF9SMTQoc3ApCiAJCUxPTkdfUwkkMTUsIFBUX1IxNShzcCkKIAkJTE9OR19TCSQyNCwgUFRfUjI0KHNwKQorI2lmbmRlZiBDT05GSUdfQ1BVX0hBU19TTUFSVE1JUFMKKwkJTE9OR19TCXYxLCBQVF9MTyhzcCkKKyNlbmRpZgogCQkuZW5kbQogCiAJCS5tYWNybwlTQVZFX1NUQVRJQwpAQCAtODMsMTUgKzg3LDE5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKICNkZWZpbmUgUFRFQkFTRV9TSElGVAkxOQkvKiBUQ0JJTkQgKi8KKyNkZWZpbmUgQ1BVX0lEX1JFRyBDUDBfVENCSU5ECisjZGVmaW5lIENQVV9JRF9NRkMwIG1mYzAKKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQpCisjZGVmaW5lIFBURUJBU0VfU0hJRlQJNDgJLyogWENPTlRFWFQgKi8KKyNkZWZpbmUgQ1BVX0lEX1JFRyBDUDBfWENPTlRFWFQKKyNkZWZpbmUgQ1BVX0lEX01GQzAgTUZDMAogI2Vsc2UKICNkZWZpbmUgUFRFQkFTRV9TSElGVAkyMwkvKiBDT05URVhUICovCisjZGVmaW5lIENQVV9JRF9SRUcgQ1AwX0NPTlRFWFQKKyNkZWZpbmUgQ1BVX0lEX01GQzAgTUZDMAogI2VuZGlmCiAJCS5tYWNybwlnZXRfc2F2ZWRfc3AJLyogU01QIHZhcmlhdGlvbiAqLwotI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQkJbWZjMAlrMCwgQ1AwX1RDQklORAotI2Vsc2UKLQkJTUZDMAlrMCwgQ1AwX0NPTlRFWFQKLSNlbmRpZgorCQlDUFVfSURfTUZDMAlrMCwgQ1BVX0lEX1JFRwogI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKSB8fCBkZWZpbmVkKEtCVUlMRF82NEJJVF9TWU0zMikKIAkJbHVpCWsxLCAlaGkoa2VybmVsc3ApCiAjZWxzZQpAQCAtMTA3LDExICsxMTUsNyBAQAogCQkuZW5kbQogCiAJCS5tYWNybwlzZXRfc2F2ZWRfc3Agc3RhY2twIHRlbXAgdGVtcDIKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JCW1mYzAJXHRlbXAsIENQMF9UQ0JJTkQKLSNlbHNlCi0JCU1GQzAJXHRlbXAsIENQMF9DT05URVhUCi0jZW5kaWYKKwkJQ1BVX0lEX01GQzAJXHRlbXAsIENQVV9JRF9SRUcKIAkJTE9OR19TUkwJXHRlbXAsIFBURUJBU0VfU0hJRlQKIAkJTE9OR19TCVxzdGFja3AsIGtlcm5lbHNwKFx0ZW1wKQogCQkuZW5kbQpAQCAtMTY2LDcgKzE3MCw2IEBACiAJCUxPTkdfUwkkMCwgUFRfUjAoc3ApCiAJCW1mYzAJdjEsIENQMF9TVEFUVVMKIAkJTE9OR19TCSQyLCBQVF9SMihzcCkKLQkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogCQkvKgogCQkgKiBJZGVhbGx5LCB0aGVzZSBpbnN0cnVjdGlvbnMgd291bGQgYmUgc2h1ZmZsZWQgaW4KQEAgLTE3OCwyMCArMTgxLDIxIEBACiAJCUxPTkdfUwl2MSwgUFRfVENTVEFUVVMoc3ApCiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlMT05HX1MJJDQsIFBUX1I0KHNwKQotCQltZmMwCXYxLCBDUDBfQ0FVU0UKIAkJTE9OR19TCSQ1LCBQVF9SNShzcCkKLQkJTE9OR19TCXYxLCBQVF9DQVVTRShzcCkKKwkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCisJCW1mYzAJdjEsIENQMF9DQVVTRQogCQlMT05HX1MJJDYsIFBUX1I2KHNwKQotCQlNRkMwCXYxLCBDUDBfRVBDCiAJCUxPTkdfUwkkNywgUFRfUjcoc3ApCisJCUxPTkdfUwl2MSwgUFRfQ0FVU0Uoc3ApCisJCU1GQzAJdjEsIENQMF9FUEMKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJTE9OR19TCSQ4LCBQVF9SOChzcCkKIAkJTE9OR19TCSQ5LCBQVF9SOShzcCkKICNlbmRpZgotCQlMT05HX1MJdjEsIFBUX0VQQyhzcCkKIAkJTE9OR19TCSQyNSwgUFRfUjI1KHNwKQogCQlMT05HX1MJJDI4LCBQVF9SMjgoc3ApCiAJCUxPTkdfUwkkMzEsIFBUX1IzMShzcCkKKwkJTE9OR19TCXYxLCBQVF9FUEMoc3ApCiAJCW9yaQkkMjgsIHNwLCBfVEhSRUFEX01BU0sKIAkJeG9yaQkkMjgsIF9USFJFQURfTUFTSwogI2lmZGVmIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZWVjZDJhOS4uOTMyNmFmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC0yLDE0ICsyLDE3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvTUlQUyBrZXJuZWwuCiAjCiAKLUNQUEZMQUdTX3ZtbGludXgubGRzIDo9ICQoS0JVSUxEX0NGTEFHUykKLQogZXh0cmEteQkJOj0gaGVhZC5vIGluaXRfdGFzay5vIHZtbGludXgubGRzCiAKIG9iai15CQkrPSBjcHUtcHJvYmUubyBicmFuY2gubyBlbnRyeS5vIGdlbmV4Lm8gaXJxLm8gcHJvY2Vzcy5vIFwKIAkJICAgcHRyYWNlLm8gcmVzZXQubyBzZXR1cC5vIHNpZ25hbC5vIHN5c2NhbGwubyBcCiAJCSAgIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gd2F0Y2gubwogCitpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCitDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2Vhcmx5X3ByaW50ay5vID0gLXBnCitlbmRpZgorCiBvYmotJChDT05GSUdfQ0VWVF9CQ00xNDgwKQkrPSBjZXZ0LWJjbTE0ODAubwogb2JqLSQoQ09ORklHX0NFVlRfUjRLX0xJQikJKz0gY2V2dC1yNGsubwogb2JqLSQoQ09ORklHX01JUFNfTVRfU01UQykJKz0gY2V2dC1zbXRjLm8KQEAgLTE5LDYgKzIyLDcgQEAKIG9iai0kKENPTkZJR19DRVZUX1RYWDkpCQkrPSBjZXZ0LXR4eDkubwogb2JqLSQoQ09ORklHX0NTUkNfQkNNMTQ4MCkJKz0gY3NyYy1iY20xNDgwLm8KIG9iai0kKENPTkZJR19DU1JDX0lPQVNJQykJKz0gY3NyYy1pb2FzaWMubworb2JqLSQoQ09ORklHX0NTUkNfUE9XRVJUVikJKz0gY3NyYy1wb3dlcnR2Lm8KIG9iai0kKENPTkZJR19DU1JDX1I0S19MSUIpCSs9IGNzcmMtcjRrLm8KIG9iai0kKENPTkZJR19DU1JDX1NCMTI1MCkJKz0gY3NyYy1zYjEyNTAubwogb2JqLSQoQ09ORklHX1NZTkNfUjRLKQkJKz0gc3luYy1yNGsubwpAQCAtMjYsNiArMzAsOCBAQAogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtaXBzX2tzeW1zLm8gbW9kdWxlLm8KIAorb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikJKz0gbWNvdW50Lm8gZnRyYWNlLm8KKwogb2JqLSQoQ09ORklHX0NQVV9MT09OR1NPTjIpCSs9IHI0a19mcHUubyByNGtfc3dpdGNoLm8KIG9iai0kKENPTkZJR19DUFVfTUlQUzMyKQkrPSByNGtfZnB1Lm8gcjRrX3N3aXRjaC5vCiBvYmotJChDT05GSUdfQ1BVX01JUFM2NCkJKz0gcjRrX2ZwdS5vIHI0a19zd2l0Y2gubwpAQCAtOTIsNCArOTgsOCBAQAogCiBvYmotJChDT05GSUdfSEFWRV9TVERfUENfU0VSSUFMX1BPUlQpCSs9IDgyNTAtcGxhdGZvcm0ubwogCitvYmotJChDT05GSUdfTUlQU19DUFVGUkVRKQkrPSBjcHVmcmVxLworCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgorCitDUFBGTEFHU192bWxpbnV4LmxkcwkJOj0gJChLQlVJTERfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggN2E1MTg2Ni4uODBlMjAyZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYnVncy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KQEAgLTMyLDYgKzMzLDcgQEAKICAqIHRoZSBDUFUgdmVyeSBtdWNoLgogICovCiB2b2lkICgqY3B1X3dhaXQpKHZvaWQpOworRVhQT1JUX1NZTUJPTChjcHVfd2FpdCk7CiAKIHN0YXRpYyB2b2lkIHIzMDgxX3dhaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnIGIvYXJjaC9taXBzL2tlcm5lbC9jcHVmcmVxL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjNjAxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnCkBAIC0wLDAgKzEsNDEgQEAKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisKK2NvbmZpZyBNSVBTX0VYVEVSTkFMX1RJTUVSCisJYm9vbAorCitjb25maWcgTUlQU19DUFVGUkVRCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQ1BVX1NVUFBPUlRTX0NQVUZSRVEgJiYgTUlQU19FWFRFUk5BTF9USU1FUgorCitpZiBNSVBTX0NQVUZSRVEKKworbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgorCitzb3VyY2UgImRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIgorCitpZiBDUFVfRlJFUQorCitjb21tZW50ICJDUFVGcmVxIHByb2Nlc3NvciBkcml2ZXJzIgorCitjb25maWcgTE9PTkdTT04yX0NQVUZSRVEKKwl0cmlzdGF0ZSAiTG9vbmdzb24yIENQVUZyZXEgRHJpdmVyIgorCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQorCWRlcGVuZHMgb24gTUlQU19DUFVGUkVRCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIENQVUZyZXEgZHJpdmVyIGZvciBsb29uZ3NvbiBwcm9jZXNzb3JzIHdoaWNoCisJICBzdXBwb3J0IHNvZnR3YXJlIGNvbmZpZ3VyYWJsZSBjcHUgZnJlcXVlbmN5LgorCisJICBMb29uZ3NvbjJGIGFuZCBpdCdzIHN1Y2Nlc3NvcnMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisKKwkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxLz4uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKworZW5kaWYJIyBDUFVfRlJFUQorCitlbmRtZW51CisKK2VuZGlmCSMgTUlQU19DUFVGUkVRCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdWZyZXEvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL2NwdWZyZXEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0NzlhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2NwdWZyZXEvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvTUlQUyBjcHVmcmVxLgorIworCitvYmotJChDT05GSUdfTE9PTkdTT04yX0NQVUZSRVEpICs9IGxvb25nc29uMl9jcHVmcmVxLm8gbG9vbmdzb24yX2Nsb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY2xvY2suYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2NhMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHVmcmVxL2xvb25nc29uMl9jbG9jay5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIEF1dGhvcjogWWFuaHVhLCB5YW5oQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCitzdGF0aWMgTElTVF9IRUFEKGNsb2NrX2xpc3QpOworc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja19sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tfbGlzdF9zZW0pOworCisvKiBNaW5pbXVtIENMSyBzdXBwb3J0ICovCitlbnVtIHsKKwlEQ19aRVJPLCBEQ18yNVBUID0gMiwgRENfMzdQVCwgRENfNTBQVCwgRENfNjJQVCwgRENfNzVQVCwKKwlEQ184N1BULCBEQ19ESVNBQkxFLCBEQ19SRVNWCit9OworCitzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgbG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW10gPSB7CisJe0RDX1JFU1YsIENQVUZSRVFfRU5UUllfSU5WQUxJRH0sCisJe0RDX1pFUk8sIENQVUZSRVFfRU5UUllfSU5WQUxJRH0sCisJe0RDXzI1UFQsIDB9LAorCXtEQ18zN1BULCAwfSwKKwl7RENfNTBQVCwgMH0sCisJe0RDXzYyUFQsIDB9LAorCXtEQ183NVBULCAwfSwKKwl7RENfODdQVCwgMH0sCisJe0RDX0RJU0FCTEUsIDB9LAorCXtEQ19SRVNWLCBDUFVGUkVRX1RBQkxFX0VORH0sCit9OworRVhQT1JUX1NZTUJPTF9HUEwobG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKKwkubmFtZSA9ICJjcHVfY2xrIiwKKwkuZmxhZ3MgPSBDTEtfQUxXQVlTX0VOQUJMRUQgfCBDTEtfUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlID0gODAwMDAwMDAwLAorfTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXJldHVybiAmY3B1X2NsazsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3N0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAobGlrZWx5KGNsa3AtPnBhcmVudCAhPSBjbGspKQorCQkJY29udGludWU7CisJCWlmIChsaWtlbHkoY2xrcC0+b3BzICYmIGNsa3AtPm9wcy0+cmVjYWxjKSkKKwkJCWNsa3AtPm9wcy0+cmVjYWxjKGNsa3ApOworCQlpZiAodW5saWtlbHkoY2xrcC0+ZmxhZ3MgJiBDTEtfUkFURV9QUk9QQUdBVEVTKSkKKwkJCXByb3BhZ2F0ZV9yYXRlKGNsa3ApOworCX0KK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZyljbGstPnJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGtfc2V0X3JhdGVfZXgoY2xrLCByYXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19zZXRfcmF0ZSk7CisKK2ludCBjbGtfc2V0X3JhdGVfZXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKQoreworCWludCByZXQgPSAwOworCWludCByZWd2YWw7CisJaW50IGk7CisKKwlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcmF0ZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPm9wcy0+c2V0X3JhdGUoY2xrLCByYXRlLCBhbGdvX2lkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ0xLX1JBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlmb3IgKGkgPSAwOyBsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOworCSAgICAgaSsrKSB7CisJCWlmIChsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID09CisJCSAgICBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCisJCQljb250aW51ZTsKKwkJaWYgKHJhdGUgPT0gbG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSkKKwkJCWJyZWFrOworCX0KKwlpZiAocmF0ZSAhPSBsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5KQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJlZ3ZhbCA9IExPT05HU09OX0NISVBDRkcwOworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+MHg3KSB8IChsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uaW5kZXggLSAxKTsKKwlMT09OR1NPTl9DSElQQ0ZHMCA9IHJlZ3ZhbDsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfc2V0X3JhdGVfZXgpOworCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmIChsaWtlbHkoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPnJvdW5kX3JhdGUpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJvdW5kZWQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJcm91bmRlZCA9IGNsay0+b3BzLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKworCQlyZXR1cm4gcm91bmRlZDsKKwl9CisKKwlyZXR1cm4gcmF0ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19yb3VuZF9yYXRlKTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpbXBsZSB2ZXJzaW9uIG9mIExvb25nc29uLTIgd2FpdCwgTWF5YmUgd2UgbmVlZCBkbyB0aGlzIGluCisgKiBpbnRlcnJ1cHQgZGlzYWJsZWQgY29udGVudAorICovCisKK0RFRklORV9TUElOTE9DSyhsb29uZ3NvbjJfd2FpdF9sb2NrKTsKK3ZvaWQgbG9vbmdzb24yX2NwdV93YWl0KHZvaWQpCit7CisJdTMyIGNwdV9mcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9vbmdzb24yX3dhaXRfbG9jaywgZmxhZ3MpOworCWNwdV9mcmVxID0gTE9PTkdTT05fQ0hJUENGRzA7CisJTE9PTkdTT05fQ0hJUENGRzAgJj0gfjB4NzsJLyogUHV0IENQVSBpbnRvIHdhaXQgbW9kZSAqLworCUxPT05HU09OX0NISVBDRkcwID0gY3B1X2ZyZXE7CS8qIFJlc3RvcmUgQ1BVIHN0YXRlICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9vbmdzb24yX3dhaXRfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9vbmdzb24yX2NwdV93YWl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY3B1ZnJlcS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHVmcmVxL2xvb25nc29uMl9jcHVmcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2YTBiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY3B1ZnJlcS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ3B1ZnJlcSBkcml2ZXIgZm9yIHRoZSBsb29uZ3Nvbi0yIHByb2Nlc3NvcnMKKyAqCisgKiBUaGUgMkUgcmV2aXNpb24gb2YgbG9vbmdzb24gcHJvY2Vzc29yIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA4IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQXV0aG9yOiBZYW5odWEsIHlhbmhAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIHNldF9jcHVzX2FsbG93ZWQoKSAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKK3N0YXRpYyB1aW50IG5vd2FpdDsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNwdWNsazsKKworc3RhdGljIHZvaWQgKCpzYXZlZF9jcHVfd2FpdCkgKHZvaWQpOworCitzdGF0aWMgaW50IGxvb25nc29uMl9jcHVfZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbG9vbmdzb24yX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBsb29uZ3NvbjJfY3B1X2ZyZXFfbm90aWZpZXIKK307CisKK3N0YXRpYyBpbnQgbG9vbmdzb24yX2NwdV9mcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCWlmICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFKQorCQljdXJyZW50X2NwdV9kYXRhLnVkZWxheV92YWwgPSBsb29wc19wZXJfamlmZnk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsb29uZ3NvbjJfY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNwdWNsayk7Cit9CisKKy8qCisgKiBIZXJlIHdlIG5vdGlmeSBvdGhlciBkcml2ZXJzIG9mIHRoZSBwcm9wb3NlZCBjaGFuZ2UgYW5kIHRoZSBmaW5hbCBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgbG9vbmdzb24yX2NwdWZyZXFfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKKwl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOworCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKworCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQKKwkgICAgKHBvbGljeSwgJmxvb25nc29uMl9jbG9ja21vZF90YWJsZVswXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLAorCSAgICAgJm5ld3N0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmcmVxID0KKwkgICAgKChjcHVfY2xvY2tfZnJlcSAvIDEwMDApICoKKwkgICAgIGxvb25nc29uMl9jbG9ja21vZF90YWJsZVtuZXdzdGF0ZV0uaW5kZXgpIC8gODsKKwlpZiAoZnJlcSA8IHBvbGljeS0+bWluIHx8IGZyZXEgPiBwb2xpY3ktPm1heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiY3B1ZnJlcTogcmVxdWVzdGVkIGZyZXF1ZW5jeSAldSBIelxuIiwgdGFyZ2V0X2ZyZXEgKiAxMDAwKTsKKworCWZyZXFzLmNwdSA9IGNwdTsKKwlmcmVxcy5vbGQgPSBsb29uZ3NvbjJfY3B1ZnJlcV9nZXQoY3B1KTsKKwlmcmVxcy5uZXcgPSBmcmVxOworCWZyZXFzLmZsYWdzID0gMDsKKworCWlmIChmcmVxcy5uZXcgPT0gZnJlcXMub2xkKQorCQlyZXR1cm4gMDsKKworCS8qIG5vdGlmaWVycyAqLworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisKKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdXNfYWxsb3dlZCk7CisKKwkvKiBzZXR0aW5nIHRoZSBjcHUgZnJlcXVlbmN5ICovCisJY2xrX3NldF9yYXRlKGNwdWNsaywgZnJlcSk7CisKKwkvKiBub3RpZmllcnMgKi8KKwljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKworCXByX2RlYnVnKCJjcHVmcmVxOiBzZXQgZnJlcXVlbmN5ICV1IGtIelxuIiwgZnJlcSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb29uZ3NvbjJfY3B1ZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpbnQgaTsKKworCWlmICghY3B1X29ubGluZShwb2xpY3ktPmNwdSkpCisJCXJldHVybiAtRU5PREVWOworCisJY3B1Y2xrID0gY2xrX2dldChOVUxMLCAiY3B1X2NsayIpOworCWlmIChJU19FUlIoY3B1Y2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNvdWxkbid0IGdldCBDUFUgY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3B1Y2xrKTsKKwl9CisKKwljcHVjbGstPnJhdGUgPSBjcHVfY2xvY2tfZnJlcSAvIDEwMDA7CisJaWYgKCFjcHVjbGstPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2xvY2sgdGFibGUgaW5pdCAqLworCWZvciAoaSA9IDI7CisJICAgICAobG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7CisJICAgICBpKyspCisJCWxvb25nc29uMl9jbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSAoY3B1Y2xrLT5yYXRlICogaSkgLyA4OworCisJcG9saWN5LT5jdXIgPSBsb29uZ3NvbjJfY3B1ZnJlcV9nZXQocG9saWN5LT5jcHUpOworCisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoJmxvb25nc29uMl9jbG9ja21vZF90YWJsZVswXSwKKwkJCQkJIHBvbGljeS0+Y3B1KTsKKworCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwKKwkJCQkJICAgICZsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbMF0pOworfQorCitzdGF0aWMgaW50IGxvb25nc29uMl9jcHVmcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwKKwkJCQkJICAgICAgJmxvb25nc29uMl9jbG9ja21vZF90YWJsZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgbG9vbmdzb24yX2NwdWZyZXFfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljbGtfcHV0KGNwdWNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpsb29uZ3NvbjJfdGFibGVfYXR0cltdID0geworCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBsb29uZ3NvbjJfY3B1ZnJlcV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibG9vbmdzb24yIiwKKwkuaW5pdCA9IGxvb25nc29uMl9jcHVmcmVxX2NwdV9pbml0LAorCS52ZXJpZnkgPSBsb29uZ3NvbjJfY3B1ZnJlcV92ZXJpZnksCisJLnRhcmdldCA9IGxvb25nc29uMl9jcHVmcmVxX3RhcmdldCwKKwkuZ2V0ID0gbG9vbmdzb24yX2NwdWZyZXFfZ2V0LAorCS5leGl0ID0gbG9vbmdzb24yX2NwdWZyZXFfZXhpdCwKKwkuYXR0ciA9IGxvb25nc29uMl90YWJsZV9hdHRyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgcGxhdGZvcm1fZGV2aWNlX2lkc1tdID0geworCXsKKwkJLm5hbWUgPSAibG9vbmdzb24yX2NwdWZyZXEiLAorCX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHBsYXRmb3JtX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibG9vbmdzb24yX2NwdWZyZXEiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZSA9IHBsYXRmb3JtX2RldmljZV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogUmVnaXN0ZXIgcGxhdGZvcm0gc3R1ZmYgKi8KKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByX2luZm8oImNwdWZyZXE6IExvb25nc29uLTJGIENQVSBmcmVxdWVuY3kgZHJpdmVyLlxuIik7CisKKwljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZsb29uZ3NvbjJfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CisKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmbG9vbmdzb24yX2NwdWZyZXFfZHJpdmVyKTsKKworCWlmICghcmV0ICYmICFub3dhaXQpIHsKKwkJc2F2ZWRfY3B1X3dhaXQgPSBjcHVfd2FpdDsKKwkJY3B1X3dhaXQgPSBsb29uZ3NvbjJfY3B1X3dhaXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfZXhpdCh2b2lkKQoreworCWlmICghbm93YWl0ICYmIHNhdmVkX2NwdV93YWl0KQorCQljcHVfd2FpdCA9IHNhdmVkX2NwdV93YWl0OworCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmxvb25nc29uMl9jcHVmcmVxX2RyaXZlcik7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZsb29uZ3NvbjJfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjcHVmcmVxX2luaXQpOworbW9kdWxlX2V4aXQoY3B1ZnJlcV9leGl0KTsKKworbW9kdWxlX3BhcmFtKG5vd2FpdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2FpdCwgIkRpc2FibGUgTG9vbmdzb24tMkYgc3BlY2lmaWMgd2FpdCIpOworCitNT0RVTEVfQVVUSE9SKCJZYW5odWEgPHlhbmhAbGVtb3RlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiY3B1ZnJlcSBkcml2ZXIgZm9yIExvb25nc29uMkYiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1wb3dlcnR2LmMgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyN2MxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNjaWVudGlmaWMtQXRsYW50YSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisvKgorICogVGhlIGZpbGUgY29tZXMgZnJvbSBrZXJuZWwvY3NyYy1yNGsuYworICovCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vdGltZS5oPgkJCS8qIE5vdCBpbmNsdWRlZCBpbiBsaW51eC90aW1lLmggKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisjaW5jbHVkZSAicG93ZXJ0di1jbG9jay5oIgorCisvKiBNSVBTIFBMTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBQTExfR0VUX00oeCkJCSgoKHgpID4+IDgpICYgMHgwMDAwMDBGRikKKyNkZWZpbmUgUExMX0dFVF9OKHgpCQkoKCh4KSA+PiAxNikgJiAweDAwMDAwMEZGKQorI2RlZmluZSBQTExfR0VUX1AoeCkJCSgoKHgpID4+IDI0KSAmIDB4MDAwMDAwMDcpCisKKy8qCisgKiByZXR1cm5zOiAgQ2xvY2sgZnJlcXVlbmN5IGluIGtIegorICovCit1bnNpZ25lZCBpbnQgX19pbml0IG1pcHNfZ2V0X3BsbF9mcmVxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHBsbF9yZWcsIG0sIG4sIHA7CisJdW5zaWduZWQgaW50IGZpbiA9IDU0MDAwOyAvKiBCYXNlIGZyZXF1ZW5jeSBpbiBrSHogKi8KKwl1bnNpZ25lZCBpbnQgZm91dDsKKworCS8qIFJlYWQgUExMIHJlZ2lzdGVyIHNldHRpbmcgKi8KKwlwbGxfcmVnID0gYXNpY19yZWFkKG1pcHNfcGxsX3NldHVwKTsKKwltID0gUExMX0dFVF9NKHBsbF9yZWcpOworCW4gPSBQTExfR0VUX04ocGxsX3JlZyk7CisJcCA9IFBMTF9HRVRfUChwbGxfcmVnKTsKKwlwcl9pbmZvKCJNSVBTIFBMTCBSZWdpc3RlcjoweCV4ICBNPSVkICBOPSVkICBQPSVkXG4iLCBwbGxfcmVnLCBtLCBuLCBwKTsKKworCS8qIENhbGN1bGF0ZSBjbG9jayBmcmVxdWVuY3kgPSAoMiAqIE4gKiA1NE1IeikgLyAoTSAqICgyKipQKSkgKi8KKwlmb3V0ID0gKCgyICogbiAqIGZpbikgLyAobSAqICgweDAxIDw8IHApKSk7CisKKwlwcl9pbmZvKCJNSVBTIENsb2NrIEZyZXE9JWQga0h6XG4iLCBmb3V0KTsKKworCXJldHVybiBmb3V0OworfQorCitzdGF0aWMgY3ljbGVfdCBjMF9ocHRfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiByZWFkX2MwX2NvdW50KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfbWlwcyA9IHsKKwkubmFtZQkJPSAicG93ZXJ0di1jb3VudGVyIiwKKwkucmVhZAkJPSBjMF9ocHRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcG93ZXJ0dl9jMF9ocHRfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBwbGxfZnJlcSA9IG1pcHNfZ2V0X3BsbF9mcmVxKCk7CisKKwlwcl9pbmZvKCJDUFUgZnJlcXVlbmN5ICVkLiUwMmQgTUh6XG4iLCBwbGxfZnJlcSAvIDEwMDAsCisJCShwbGxfZnJlcSAlIDEwMDApICogMTAwIC8gMTAwMCk7CisKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBwbGxfZnJlcSAvIDIgKiAxMDAwOworCisJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAyMDAgKyBtaXBzX2hwdF9mcmVxdWVuY3kgLyAxMDAwMDAwMDsKKworCWNsb2Nrc291cmNlX3NldF9jbG9jaygmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9taXBzKTsKK30KKworLyoqCisgKiBzdHJ1Y3QgdGltX2MgLSBmcmVlIHJ1bm5pbmcgY291bnRlcgorICogQGhpOglIaWdoIDE2IGJpdHMgb2YgdGhlIGNvdW50ZXIKKyAqIEBsbzoJTG93IDMyIGJpdHMgb2YgdGhlIGNvdW50ZXIKKyAqCisgKiBMYXlzIG91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBmcmVlIHJ1bm5pbmcgY291bnRlciBpbiBtZW1vcnkuIFRoaXMgY291bnRlcgorICogaW5jcmVtZW50cyBhdCBhIHJhdGUgb2YgMjcgTUh6Lzggb24gYWxsIHBsYXRmb3Jtcy4KKyAqLworc3RydWN0IHRpbV9jIHsKKwl1bnNpZ25lZCBpbnQgaGk7CisJdW5zaWduZWQgaW50IGxvOworfTsKKworc3RhdGljIHN0cnVjdCB0aW1fYyAqdGltX2M7CisKK3N0YXRpYyBjeWNsZV90IHRpbV9jX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwl1bnNpZ25lZCBpbnQgaGk7CisJdW5zaWduZWQgaW50IG5leHRfaGk7CisJdW5zaWduZWQgaW50IGxvOworCisJaGkgPSByZWFkbCgmdGltX2MtPmhpKTsKKworCWZvciAoOzspIHsKKwkJbG8gPSByZWFkbCgmdGltX2MtPmxvKTsKKwkJbmV4dF9oaSA9IHJlYWRsKCZ0aW1fYy0+aGkpOworCQlpZiAobmV4dF9oaSA9PSBoaSkKKwkJCWJyZWFrOworCQloaSA9IG5leHRfaGk7CisJfQorCitwcl9jcml0KCIlczogcmVhZCAlbGx4XG4iLCBfX2Z1bmNfXywgKCh1NjQpIGhpIDw8IDMyKSB8IGxvKTsKKwlyZXR1cm4gKCh1NjQpIGhpIDw8IDMyKSB8IGxvOworfQorCisjZGVmaW5lIFRJTV9DX1NJWkUJCTQ4CQkvKiAjIGJpdHMgaW4gdGhlIHRpbWVyICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfdGltX2MgPSB7CisJLm5hbWUJCT0gInBvd2VydHYtdGltX2MiLAorCS5yZWFkCQk9IHRpbV9jX3JlYWQsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSyhUSU1fQ19TSVpFKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCisvKioKKyAqIHBvd2VydHZfdGltX2NfY2xvY2tzb3VyY2VfaW5pdCAtIHNldCB1cCBhIGNsb2NrIHNvdXJjZSBmb3IgdGhlIFRJTV9DIGNsb2NrCisgKgorICogVGhlIGhhcmQgcGFydCBoZXJlIGlzIGNvbWluZyB1cCB3aXRoIGEgY29uc3RhbnQgayBhbmQgc2hpZnQgcyBzdWNoIHRoYXQKKyAqIHRoZSA0OC1iaXQgVElNX0MgdmFsdWUgbXVsdGlwbGllZCBieSBrIGRvZXNuJ3Qgb3ZlcmZsb3cgYW5kIHRoYXQgdmFsdWUsCisgKiB3aGVuIHNoaWZ0ZWQgcmlnaHQgYnkgcywgeWllbGRzIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBuYW5vc2Vjb25kcy4KKyAqIFdlIGtub3cgdGhhdCBUSU1fQyBjb3VudHMgYXQgMjcgTUh6LzgsIHNvIGVhY2ggY3ljbGUgY29ycmVzcG9uZHMgdG8KKyAqIDEgLyAoMjcsMDAwLDAwMC84KSBzZWNvbmRzLiBNdWx0aXBseSB0aGF0IGJ5IGEgYmlsbGlvbiBhbmQgeW91IGdldCB0aGUKKyAqIG51bWJlciBvZiBuYW5vc2Vjb25kcy4gU2luY2UgdGhlIFRJTV9DIHZhbHVlIGhhcyA0OCBiaXRzIGFuZCB0aGUgbWF0aCBpcworICogZG9uZSBpbiA2NCBiaXRzLCBhdm9pZGluZyBhbiBvdmVyZmxvdyBtZWFucyB0aGF0IGsgbXVzdCBiZSBsZXNzIHRoYW4KKyAqIDY0IC0gNDggPSAxNiBiaXRzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcG93ZXJ0dl90aW1fY19jbG9ja3NvdXJjZV9pbml0KHZvaWQpCit7CisJaW50CQkJcHJlc2NhbGU7CisJdW5zaWduZWQgbG9uZwkJZGl2aWRlbmQ7CisJdW5zaWduZWQgbG9uZwkJazsKKwlpbnQJCQlzOworCWNvbnN0IGludAkJbWF4X2tfYml0cyA9ICg2NCAtIDQ4KSAtIDE7CisJY29uc3QgdW5zaWduZWQgbG9uZwliaWxsaW9uID0gMTAwMDAwMDAwMDsKKwljb25zdCB1bnNpZ25lZCBsb25nCWNvdW50c19wZXJfc2Vjb25kID0gMjcwMDAwMDAgLyA4OworCisJcHJlc2NhbGUgPSBCSVRTX1BFUl9MT05HIC0gaWxvZzIoYmlsbGlvbikgLSAxOworCWRpdmlkZW5kID0gYmlsbGlvbiA8PCBwcmVzY2FsZTsKKwlrID0gZGl2aWRlbmQgLyBjb3VudHNfcGVyX3NlY29uZDsKKwlzID0gaWxvZzIoaykgLSBtYXhfa19iaXRzOworCisJaWYgKHMgPCAwKQorCQlzID0gcHJlc2NhbGU7CisKKwllbHNlIHsKKwkJayA+Pj0gczsKKwkJcyArPSBwcmVzY2FsZTsKKwl9CisKKwljbG9ja3NvdXJjZV90aW1fYy5tdWx0ID0gazsKKwljbG9ja3NvdXJjZV90aW1fYy5zaGlmdCA9IHM7CisJY2xvY2tzb3VyY2VfdGltX2MucmF0aW5nID0gMjAwOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3RpbV9jKTsKKwl0aW1fYyA9IChzdHJ1Y3QgdGltX2MgKikgYXNpY19yZWdfYWRkcih0aW1fY2gpOworfQorCisvKioKKyBwb3dlcnR2X2Nsb2Nrc291cmNlX2luaXQgLSBpbml0aWFsaXplIGFsbCBjbG9ja3NvdXJjZXMKKyAqLwordm9pZCBfX2luaXQgcG93ZXJ0dl9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCit7CisJcG93ZXJ0dl9jMF9ocHRfY2xvY2tzb3VyY2VfaW5pdCgpOworCXBvd2VydHZfdGltX2NfY2xvY2tzb3VyY2VfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiMDY3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb2RlIGZvciByZXBsYWNpbmcgZnRyYWNlIGNhbGxzIHdpdGgganVtcHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiBUaGFua3MgZ29lcyB0byBTdGV2ZW4gUm9zdGVkdCBmb3Igd3JpdGluZyB0aGUgb3JpZ2luYWwgeDg2IHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCisjZGVmaW5lIEpBTCAweDBjMDAwMDAwCQkvKiBqdW1wICYgbGluazogaXAgLS0+IHJhLCBqdW1wIHRvIHRhcmdldCAqLworI2RlZmluZSBBRERSX01BU0sgMHgwM2ZmZmZmZgkvKiAgb3BfY29kZXxhZGRyIDogMzEuLi4yNnwyNSAuLi4uMCAqLworI2RlZmluZSBqdW1wX2luc25fZW5jb2RlKG9wX2NvZGUsIGFkZHIpIFwKKwkoKHVuc2lnbmVkIGludCkoKG9wX2NvZGUpIHwgKCgoYWRkcikgPj4gMikgJiBBRERSX01BU0spKSkKKworc3RhdGljIHVuc2lnbmVkIGludCBmdHJhY2Vfbm9wID0gMHgwMDAwMDAwMDsKKworc3RhdGljIGludCBmdHJhY2VfbW9kaWZ5X2NvZGUodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgaW50IG5ld19jb2RlKQoreworCWludCBmYXVsdGVkOworCisJLyogKih1bnNpZ25lZCBpbnQgKilpcCA9IG5ld19jb2RlOyAqLworCXNhZmVfc3RvcmVfY29kZShuZXdfY29kZSwgaXAsIGZhdWx0ZWQpOworCisJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZsdXNoX2ljYWNoZV9yYW5nZShpcCwgaXAgKyA4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx1aV92MTsKK3N0YXRpYyBpbnQgamFsX21jb3VudDsKKworaW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCSAgICBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgaW50IG5ldzsKKwlpbnQgZmF1bHRlZDsKKwl1bnNpZ25lZCBsb25nIGlwID0gcmVjLT5pcDsKKworCS8qIFdlIGhhdmUgY29tcGlsZWQgbW9kdWxlIHdpdGggLW1sb25nLWNhbGxzLCBidXQgY29tcGlsZWQgdGhlIGtlcm5lbAorCSAqIHdpdGhvdXQgaXQsIHdlIG5lZWQgdG8gY29wZSB3aXRoIHRoZW0gcmVzcGVjdGl2ZWx5LiAqLworCWlmIChpcCAmIDB4NDAwMDAwMDApIHsKKwkJLyogcmVjb3JkIGl0IGZvciBmdHJhY2VfbWFrZV9jYWxsICovCisJCWlmIChsdWlfdjEgPT0gMCkgeworCQkJLyogbHVpX3YxID0gKih1bnNpZ25lZCBpbnQgKilpcDsgKi8KKwkJCXNhZmVfbG9hZF9jb2RlKGx1aV92MSwgaXAsIGZhdWx0ZWQpOworCisJCQlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQkvKiBsdWkgdjEsIGhpXzE2Yml0X29mX21jb3VudCAgICAgICAgLS0+IGIgMWYgKDB4MTAwMDAwMDQpCisJCSAqIGFkZGl1IHYxLCB2MSwgbG93XzE2Yml0X29mX21jb3VudAorCQkgKiBtb3ZlIGF0LCByYQorCQkgKiBqYWxyIHYxCisJCSAqIG5vcAorCQkgKiAJCQkJICAgICAxZjogKGlwICsgMTIpCisJCSAqLworCQluZXcgPSAweDEwMDAwMDA0OworCX0gZWxzZSB7CisJCS8qIHJlY29yZC9jYWxjdWxhdGUgaXQgZm9yIGZ0cmFjZV9tYWtlX2NhbGwgKi8KKwkJaWYgKGphbF9tY291bnQgPT0gMCkgeworCQkJLyogV2UgY2FuIHJlY29yZCBpdCBkaXJlY3RseSBsaWtlIHRoaXM6CisJCQkgKiAgICAgamFsX21jb3VudCA9ICoodW5zaWduZWQgaW50ICopaXA7CisJCQkgKiBIZXJlaW4sIGp1bXAgb3ZlciB0aGUgZmlyc3QgdHdvIG5vcCBpbnN0cnVjdGlvbnMgKi8KKwkJCWphbF9tY291bnQgPSBqdW1wX2luc25fZW5jb2RlKEpBTCwgKE1DT1VOVF9BRERSICsgOCkpOworCQl9CisKKwkJLyogbW92ZSBhdCwgcmEKKwkJICogamFsciB2MQkJLS0+IG5vcAorCQkgKi8KKwkJbmV3ID0gZnRyYWNlX25vcDsKKwl9CisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgbmV3KTsKK30KKworc3RhdGljIGludCBtb2RpZmllZDsJLyogaW5pdGlhbGl6ZWQgYXMgMCBieSBkZWZhdWx0ICovCisKK2ludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgbmV3OworCXVuc2lnbmVkIGxvbmcgaXAgPSByZWMtPmlwOworCisJLyogV2UganVzdCBuZWVkIHRvIHJlbW92ZSB0aGUgImIgZnRyYWNlX3N0dWIiIGF0IHRoZSBmaXN0IHRpbWUhICovCisJaWYgKG1vZGlmaWVkID09IDApIHsKKwkJbW9kaWZpZWQgPSAxOworCQlmdHJhY2VfbW9kaWZ5X2NvZGUoYWRkciwgZnRyYWNlX25vcCk7CisJfQorCS8qIGlwLCBtb2R1bGU6IDB4YzAwMDAwMDAsIGtlcm5lbDogMHg4MDAwMDAwMCAqLworCW5ldyA9IChpcCAmIDB4NDAwMDAwMDApID8gbHVpX3YxIDogamFsX21jb3VudDsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG5ldyk7Cit9CisKKyNkZWZpbmUgRlRSQUNFX0NBTExfSVAgKCh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGwpKQorCitpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCit7CisJdW5zaWduZWQgaW50IG5ldzsKKworCW5ldyA9IGp1bXBfaW5zbl9lbmNvZGUoSkFMLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoRlRSQUNFX0NBTExfSVAsIG5ldyk7Cit9CisKK2ludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKK3sKKwkvKiBUaGUgcmV0dXJuIGNvZGUgaXMgcmV0dXJlZCB2aWEgZGF0YSAqLworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKworZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2NhbGwodm9pZCk7CisjZGVmaW5lIEpNUAkweDA4MDAwMDAwCS8qIGp1bXAgdG8gdGFyZ2V0IGRpcmVjdGx5ICovCisjZGVmaW5lIENBTExfRlRSQUNFX0dSQVBIX0NBTExFUiBcCisJanVtcF9pbnNuX2VuY29kZShKTVAsICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2dyYXBoX2NhbGxlcikpCisjZGVmaW5lIEZUUkFDRV9HUkFQSF9DQUxMX0lQCSgodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9jYWxsKSkKKworaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoRlRSQUNFX0dSQVBIX0NBTExfSVAsCisJCQkJICBDQUxMX0ZUUkFDRV9HUkFQSF9DQUxMRVIpOworfQorCitpbnQgZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoRlRSQUNFX0dSQVBIX0NBTExfSVAsIGZ0cmFjZV9ub3ApOworfQorCisjZW5kaWYJCQkJLyogIUNPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZuZGVmIEtCVUlMRF9NQ09VTlRfUkFfQUREUkVTUworI2RlZmluZSBTX1JBX1NQCSgweGFmYmYgPDwgMTYpCS8qIHN7ZCx3fSByYSwgb2Zmc2V0KHNwKSAqLworI2RlZmluZSBTX1JfU1AJKDB4YWZiMCA8PCAxNikgIC8qIHN7ZCx3fSBSLCBvZmZzZXQoc3ApICovCisjZGVmaW5lIE9GRlNFVF9NQVNLCTB4ZmZmZgkvKiBzdGFjayBvZmZzZXQgcmFuZ2U6IDAgfiBQVF9TSVpFICovCisKK3Vuc2lnbmVkIGxvbmcgZnRyYWNlX2dldF9wYXJlbnRfYWRkcih1bnNpZ25lZCBsb25nIHNlbGZfYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZnApCit7CisJdW5zaWduZWQgbG9uZyBzcCwgaXAsIHJhOworCXVuc2lnbmVkIGludCBjb2RlOworCWludCBmYXVsdGVkOworCisJLyogaW4gbW9kdWxlIG9yIGtlcm5lbD8gKi8KKwlpZiAoc2VsZl9hZGRyICYgMHg0MDAwMDAwMCkgeworCQkvKiBtb2R1bGU6IG1vdmUgdG8gdGhlIGluc3RydWN0aW9uICJsdWkgdjEsIEhJXzE2QklUX09GX01DT1VOVCIgKi8KKwkJaXAgPSBzZWxmX2FkZHIgLSAyMDsKKwl9IGVsc2UgeworCQkvKiBrZXJuZWw6IG1vdmUgdG8gdGhlIGluc3RydWN0aW9uICJtb3ZlIHJhLCBhdCIgKi8KKwkJaXAgPSBzZWxmX2FkZHIgLSAxMjsKKwl9CisKKwkvKiBzZWFyY2ggdGhlIHRleHQgdW50aWwgZmluZGluZyB0aGUgbm9uLXN0b3JlIGluc3RydWN0aW9uIG9yICJze2Qsd30KKwkgKiByYSwgb2Zmc2V0KHNwKSIgaW5zdHJ1Y3Rpb24gKi8KKwlkbyB7CisJCWlwIC09IDQ7CisKKwkJLyogZ2V0IHRoZSBjb2RlIGF0ICJpcCI6IGNvZGUgPSAqKHVuc2lnbmVkIGludCAqKWlwOyAqLworCQlzYWZlX2xvYWRfY29kZShjb2RlLCBpcCwgZmF1bHRlZCk7CisKKwkJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgd2UgaGl0IHRoZSBub24tc3RvcmUgaW5zdHJ1Y3Rpb24gYmVmb3JlIGZpbmRpbmcgd2hlcmUgdGhlCisJCSAqIHJhIGlzIHN0b3JlZCwgdGhlbiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiBhbmQgaXQgZG9lcyBub3QKKwkJICogc3RvcmUgdGhlIHJhIG9uIHRoZSBzdGFjay4gKi8KKwkJaWYgKChjb2RlICYgU19SX1NQKSAhPSBTX1JfU1ApCisJCQlyZXR1cm4gcGFyZW50X2FkZHI7CisKKwl9IHdoaWxlICgoKGNvZGUgJiBTX1JBX1NQKSAhPSBTX1JBX1NQKSk7CisKKwlzcCA9IGZwICsgKGNvZGUgJiBPRkZTRVRfTUFTSyk7CisKKwkvKiByYSA9ICoodW5zaWduZWQgbG9uZyAqKXNwOyAqLworCXNhZmVfbG9hZF9zdGFjayhyYSwgc3AsIGZhdWx0ZWQpOworCWlmICh1bmxpa2VseShmYXVsdGVkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmEgPT0gcGFyZW50KQorCQlyZXR1cm4gc3A7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKgorICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRycworICogaW4gY3VycmVudCB0aHJlYWQgaW5mby4KKyAqLwordm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZnApCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CisJdW5zaWduZWQgbG9uZyByZXR1cm5faG9va2VyID0gKHVuc2lnbmVkIGxvbmcpCisJICAgICZyZXR1cm5fdG9faGFuZGxlcjsKKwlpbnQgZmF1bHRlZDsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQorCQlyZXR1cm47CisKKwkvKiAicGFyZW50IiBpcyB0aGUgc3RhY2sgYWRkcmVzcyBzYXZlZCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGNhbGxlcgorCSAqIG9mIF9tY291bnQuCisJICoKKwkgKiBpZiB0aGUgZ2NjIDwgNC41LCBhIGxlYWYgZnVuY3Rpb24gZG9lcyBub3Qgc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MKKwkgKiBpbiB0aGUgc3RhY2sgYWRkcmVzcywgc28sIHdlICJlbXVsYXRlIiBvbmUgaW4gX21jb3VudCdzIHN0YWNrIHNwYWNlLAorCSAqIGFuZCBoaWphY2sgaXQgZGlyZWN0bHksIGJ1dCBmb3IgYSBub24tbGVhZiBmdW5jdGlvbiwgaXQgc2F2ZSB0aGUKKwkgKiByZXR1cm4gYWRkcmVzcyB0byB0aGUgaXRzIG93biBzdGFjayBzcGFjZSwgd2UgY2FuIG5vdCBoaWphY2sgaXQKKwkgKiBkaXJlY3RseSwgYnV0IG5lZWQgdG8gZmluZCB0aGUgcmVhbCBzdGFjayBhZGRyZXNzLAorCSAqIGZ0cmFjZV9nZXRfcGFyZW50X2FkZHIoKSBkb2VzIGl0IQorCSAqCisJICogaWYgZ2NjPj0gNC41LCB3aXRoIHRoZSBuZXcgLW1tY291bnQtcmEtYWRkcmVzcyBvcHRpb24sIGZvciBhCisJICogbm9uLWxlYWYgZnVuY3Rpb24sIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBzYXZlZAorCSAqIHRvICQxMiBmb3IgdXMsIGFuZCBmb3IgYSBsZWFmIGZ1bmN0aW9uLCBvbmx5IHB1dCBhIHplcm8gaW50byAkMTIuIHdlCisJICogZG8gaXQgaW4gZnRyYWNlX2dyYXBoX2NhbGxlciBvZiBtY291bnQuUy4KKwkgKi8KKworCS8qIG9sZCA9ICpwYXJlbnQ7ICovCisJc2FmZV9sb2FkX3N0YWNrKG9sZCwgcGFyZW50LCBmYXVsdGVkKTsKKwlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCWdvdG8gb3V0OworI2lmbmRlZiBLQlVJTERfTUNPVU5UX1JBX0FERFJFU1MKKwlwYXJlbnQgPSAodW5zaWduZWQgbG9uZyAqKWZ0cmFjZV9nZXRfcGFyZW50X2FkZHIoc2VsZl9hZGRyLCBvbGQsCisJCQkJCQkJICh1bnNpZ25lZCBsb25nKXBhcmVudCwKKwkJCQkJCQkgZnApOworCS8qIElmIGZhaWxzIHdoZW4gZ2V0dGluZyB0aGUgc3RhY2sgYWRkcmVzcyBvZiB0aGUgbm9uLWxlYWYgZnVuY3Rpb24ncworCSAqIHJhLCBzdG9wIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBhbmQgcmV0dXJuICovCisJaWYgKHBhcmVudCA9PSAwKQorCQlnb3RvIG91dDsKKyNlbmRpZgorCS8qICpwYXJlbnQgPSByZXR1cm5faG9va2VyOyAqLworCXNhZmVfc3RvcmVfc3RhY2socmV0dXJuX2hvb2tlciwgcGFyZW50LCBmYXVsdGVkKTsKKwlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCWdvdG8gb3V0OworCisJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShvbGQsIHNlbGZfYWRkciwgJnRyYWNlLmRlcHRoLCBmcCkgPT0KKwkgICAgLUVCVVNZKSB7CisJCSpwYXJlbnQgPSBvbGQ7CisJCXJldHVybjsKKwl9CisKKwl0cmFjZS5mdW5jID0gc2VsZl9hZGRyOworCisJLyogT25seSB0cmFjZSBpZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBleHBlY3RzIHRvICovCisJaWYgKCFmdHJhY2VfZ3JhcGhfZW50cnkoJnRyYWNlKSkgeworCQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOworCQkqcGFyZW50ID0gb2xkOworCX0KKwlyZXR1cm47CitvdXQ6CisJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwlXQVJOX09OKDEpOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDdiODQ1YmEuLjk4MWY4NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtOTksNyArMTAwLDcgQEAKIAl9CiAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHNraXA7CkBAIC0xMTgsNyArMTE5LDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgewogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAkJc2VxX3ByaW50ZihwLCAiRVJSOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOwpAQCAtMTUwLDMgKzE1MSwzMiBAQAogCQlrZ2RiX2Vhcmx5X3NldHVwID0gMTsKICNlbmRpZgogfQorCisvKgorICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCisgKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKKyAqIGhhbmRsZXJzKS4KKyAqLwordm9pZCBfX2lycV9lbnRyeSBkb19JUlEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfZW50ZXIoKTsKKwlfX0RPX0lSUV9TTVRDX0hPT0soaXJxKTsKKwlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwlpcnFfZXhpdCgpOworfQorCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQ19JUlFBRkYKKy8qCisgKiBUbyBhdm9pZCBpbmVmZmljaWVudCBhbmQgaW4gc29tZSBjYXNlcyBwYXRob2xvZ2ljYWwgcmUtY2hlY2tpbmcgb2YKKyAqIElSUSBhZmZpbml0eSwgd2UgaGF2ZSB0aGlzIHZhcmlhbnQgdGhhdCBza2lwcyB0aGUgYWZmaW5pdHkgY2hlY2suCisgKi8KKwordm9pZCBfX2lycV9lbnRyeSBkb19JUlFfbm9fYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfZW50ZXIoKTsKKwlfX05PX0FGRklOSVRZX0lSUV9TTVRDX0hPT0soaXJxKTsKKwlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwlpcnFfZXhpdCgpOworfQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQ19JUlFBRkYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWNmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogTUlQUyBzcGVjaWZpYyBfbWNvdW50IHN1cHBvcnQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICovCisKKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KKyNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CisKKwkudGV4dAorCS5zZXQgbm9yZW9yZGVyCisJLnNldCBub2F0CisKKwkubWFjcm8gTUNPVU5UX1NBVkVfUkVHUworCVBUUl9TVUJVCXNwLCBQVF9TSVpFCisJUFRSX1MJcmEsIFBUX1IzMShzcCkKKwlQVFJfUwlBVCwgUFRfUjEoc3ApCisJUFRSX1MJYTAsIFBUX1I0KHNwKQorCVBUUl9TCWExLCBQVF9SNShzcCkKKwlQVFJfUwlhMiwgUFRfUjYoc3ApCisJUFRSX1MJYTMsIFBUX1I3KHNwKQorI2lmZGVmIENPTkZJR182NEJJVAorCVBUUl9TCWE0LCBQVF9SOChzcCkKKwlQVFJfUwlhNSwgUFRfUjkoc3ApCisJUFRSX1MJYTYsIFBUX1IxMChzcCkKKwlQVFJfUwlhNywgUFRfUjExKHNwKQorI2VuZGlmCisJLmVuZG0KKworCS5tYWNybyBNQ09VTlRfUkVTVE9SRV9SRUdTCisJUFRSX0wJcmEsIFBUX1IzMShzcCkKKwlQVFJfTAlBVCwgUFRfUjEoc3ApCisJUFRSX0wJYTAsIFBUX1I0KHNwKQorCVBUUl9MCWExLCBQVF9SNShzcCkKKwlQVFJfTAlhMiwgUFRfUjYoc3ApCisJUFRSX0wJYTMsIFBUX1I3KHNwKQorI2lmZGVmIENPTkZJR182NEJJVAorCVBUUl9MCWE0LCBQVF9SOChzcCkKKwlQVFJfTAlhNSwgUFRfUjkoc3ApCisJUFRSX0wJYTYsIFBUX1IxMChzcCkKKwlQVFJfTAlhNywgUFRfUjExKHNwKQorI2VuZGlmCisjaWZkZWYgQ09ORklHXzY0QklUCisJUFRSX0FERElVCXNwLCBQVF9TSVpFCisjZWxzZQorCVBUUl9BRERJVQlzcCwgKFBUX1NJWkUgKyA4KQorI2VuZGlmCisuZW5kbQorCisJLm1hY3JvIFJFVFVSTl9CQUNLCisJanIgcmEKKwkgbW92ZSByYSwgQVQKKwkuZW5kbQorCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisKK05FU1RFRChmdHJhY2VfY2FsbGVyLCBQVF9TSVpFLCByYSkKKwkuZ2xvYmwgX21jb3VudAorX21jb3VudDoKKwliCWZ0cmFjZV9zdHViCisJIG5vcAorCWx3CXQxLCBmdW5jdGlvbl90cmFjZV9zdG9wCisJYm5legl0MSwgZnRyYWNlX3N0dWIKKwkgbm9wCisKKwlNQ09VTlRfU0FWRV9SRUdTCisjaWZkZWYgS0JVSUxEX01DT1VOVF9SQV9BRERSRVNTCisJUFRSX1MJdDAsIFBUX1IxMihzcCkJLyogdDAgc2F2ZWQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXR1cm4gYWRkcmVzcyhhdCkgYnkgLW1tY291bnQtcmEtYWRkcmVzcyAqLworI2VuZGlmCisKKwltb3ZlCWEwLCByYQkJLyogYXJnMTogbmV4dCBpcCwgc2VsZmFkZHIgKi8KKwkuZ2xvYmwgZnRyYWNlX2NhbGwKK2Z0cmFjZV9jYWxsOgorCW5vcAkvKiBhIHBsYWNlaG9sZGVyIGZvciB0aGUgY2FsbCB0byBhIHJlYWwgdHJhY2luZyBmdW5jdGlvbiAqLworCSBtb3ZlCWExLCBBVAkJLyogYXJnMjogdGhlIGNhbGxlcidzIG5leHQgaXAsIHBhcmVudCAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCS5nbG9ibCBmdHJhY2VfZ3JhcGhfY2FsbAorZnRyYWNlX2dyYXBoX2NhbGw6CisJbm9wCisJIG5vcAorI2VuZGlmCisKKwlNQ09VTlRfUkVTVE9SRV9SRUdTCisJLmdsb2JsIGZ0cmFjZV9zdHViCitmdHJhY2Vfc3R1YjoKKwlSRVRVUk5fQkFDSworCUVORChmdHJhY2VfY2FsbGVyKQorCisjZWxzZQkvKiAhIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCitORVNURUQoX21jb3VudCwgUFRfU0laRSwgcmEpCisJbHcJdDEsIGZ1bmN0aW9uX3RyYWNlX3N0b3AKKwlibmV6CXQxLCBmdHJhY2Vfc3R1YgorCSBub3AKKwlQVFJfTEEJdDEsIGZ0cmFjZV9zdHViCisJUFRSX0wJdDIsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbiAvKiBQcmVwYXJlIHQyIGZvciAoMSkgKi8KKwlibmUJdDEsIHQyLCBzdGF0aWNfdHJhY2UKKwkgbm9wCisKKyNpZmRlZglDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJUFRSX0wJdDMsIGZ0cmFjZV9ncmFwaF9yZXR1cm4KKwlibmUJdDEsIHQzLCBmdHJhY2VfZ3JhcGhfY2FsbGVyCisJIG5vcAorCVBUUl9MQQl0MSwgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIKKwlQVFJfTAl0MywgZnRyYWNlX2dyYXBoX2VudHJ5CisJYm5lCXQxLCB0MywgZnRyYWNlX2dyYXBoX2NhbGxlcgorCSBub3AKKyNlbmRpZgorCWIJZnRyYWNlX3N0dWIKKwkgbm9wCisKK3N0YXRpY190cmFjZToKKwlNQ09VTlRfU0FWRV9SRUdTCisKKwltb3ZlCWEwLCByYQkJLyogYXJnMTogbmV4dCBpcCwgc2VsZmFkZHIgKi8KKwlqYWxyCXQyCQkvKiAoMSkgY2FsbCAqZnRyYWNlX3RyYWNlX2Z1bmN0aW9uICovCisJIG1vdmUJYTEsIEFUCQkvKiBhcmcyOiB0aGUgY2FsbGVyJ3MgbmV4dCBpcCwgcGFyZW50ICovCisKKwlNQ09VTlRfUkVTVE9SRV9SRUdTCisJLmdsb2JsIGZ0cmFjZV9zdHViCitmdHJhY2Vfc3R1YjoKKwlSRVRVUk5fQkFDSworCUVORChfbWNvdW50KQorCisjZW5kaWYJLyogISBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKworTkVTVEVEKGZ0cmFjZV9ncmFwaF9jYWxsZXIsIFBUX1NJWkUsIHJhKQorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCVBUUl9MCWExLCBQVF9SMzEoc3ApCS8qIGxvYWQgdGhlIG9yaWdpbmFsIHJhIGZyb20gdGhlIHN0YWNrICovCisjaWZkZWYgS0JVSUxEX01DT1VOVF9SQV9BRERSRVNTCisJUFRSX0wJdDAsIFBUX1IxMihzcCkJLyogbG9hZCB0aGUgb3JpZ2luYWwgdDAgZnJvbSB0aGUgc3RhY2sgKi8KKyNlbmRpZgorI2Vsc2UKKwlNQ09VTlRfU0FWRV9SRUdTCisJbW92ZQlhMSwgcmEJCS8qIGFyZzI6IG5leHQgaXAsIHNlbGZhZGRyICovCisjZW5kaWYKKworI2lmZGVmIEtCVUlMRF9NQ09VTlRfUkFfQUREUkVTUworCWJuZXoJdDAsIDFmCQkvKiBub24tbGVhZiBmdW5jOiB0MCBzYXZlZCB0aGUgbG9jYXRpb24gb2YgdGhlIHJldHVybiBhZGRyZXNzICovCisJIG5vcAorCVBUUl9MQQl0MCwgUFRfUjEoc3ApCS8qIGxlYWYgZnVuYzogZ2V0IHRoZSBsb2NhdGlvbiBvZiBhdChvbGQgcmEpIGZyb20gb3VyIG93biBzdGFjayAqLworMToJbW92ZQlhMCwgdDAJCS8qIGFyZzE6IHRoZSBsb2NhdGlvbiBvZiB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KKyNlbHNlCisJUFRSX0xBCWEwLCBQVF9SMShzcCkJLyogYXJnMTogJkFUIC0+IGEwICovCisjZW5kaWYKKwlqYWwJcHJlcGFyZV9mdHJhY2VfcmV0dXJuCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwkgbW92ZQlhMiwgZnAJCS8qIGFyZzM6IGZyYW1lIHBvaW50ZXIgKi8KKyNlbHNlCisjaWZkZWYgQ09ORklHXzY0QklUCisJIFBUUl9MQQlhMiwgUFRfU0laRShzcCkKKyNlbHNlCisJIFBUUl9MQQlhMiwgKFBUX1NJWkUrOCkoc3ApCisjZW5kaWYKKyNlbmRpZgorCisJTUNPVU5UX1JFU1RPUkVfUkVHUworCVJFVFVSTl9CQUNLCisJRU5EKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisKKwkuYWxpZ24JMgorCS5nbG9ibAlyZXR1cm5fdG9faGFuZGxlcgorcmV0dXJuX3RvX2hhbmRsZXI6CisJUFRSX1NVQlUJc3AsIFBUX1NJWkUKKwlQVFJfUwl2MCwgUFRfUjIoc3ApCisKKwlqYWwJZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJIFBUUl9TCXYxLCBQVF9SMyhzcCkKKworCS8qIHJlc3RvcmUgdGhlIHJlYWwgcGFyZW50IGFkZHJlc3M6IHYwIC0+IHJhICovCisJbW92ZQlyYSwgdjAKKworCVBUUl9MCXYwLCBQVF9SMihzcCkKKwlQVFJfTAl2MSwgUFRfUjMoc3ApCisJanIJcmEKKwkgUFRSX0FERElVCXNwLCBQVF9TSVpFCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCisJLnNldCBhdAorCS5zZXQgcmVvcmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwppbmRleCAyMjU3NTVkLi4xZDA0ODA3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYworKysgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CiAKIGV4dGVybiB2b2lkICpfX2J6ZXJvKHZvaWQgKl9fcywgc2l6ZV90IF9fY291bnQpOwogZXh0ZXJuIGxvbmcgX19zdHJuY3B5X2Zyb21fdXNlcl9ub2NoZWNrX2FzbShjaGFyICpfX3RvLApAQCAtNTEsMyArNTIsNyBAQAogRVhQT1JUX1NZTUJPTChfX2NzdW1fcGFydGlhbF9jb3B5X3VzZXIpOwogCiBFWFBPUlRfU1lNQk9MKGludmFsaWRfcHRlX3RhYmxlKTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisvKiBfbWNvdW50IGlzIGRlZmluZWQgaW4gYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUyAqLworRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDJiMjkwZDcuLmY5NTEzZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTU4LDggKzU4LDEyIEBACiAKIHN0cnVjdCBib290X21lbV9tYXAgYm9vdF9tZW1fbWFwOwogCi1zdGF0aWMgY2hhciBjb21tYW5kX2xpbmVbQ0xfU0laRV07Ci0gICAgICAgY2hhciBhcmNzX2NtZGxpbmVbQ0xfU0laRV09Q09ORklHX0NNRExJTkU7CitzdGF0aWMgY2hhciBfX2luaXRkYXRhIGNvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CitjaGFyIF9faW5pdGRhdGEgYXJjc19jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKworI2lmZGVmIENPTkZJR19DTURMSU5FX0JPT0wKK3N0YXRpYyBjaGFyIF9faW5pdGRhdGEgYnVpbHRpbl9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSA9IENPTkZJR19DTURMSU5FOworI2VuZGlmCiAKIC8qCiAgKiBtaXBzX2lvX3BvcnRfYmFzZSBpcyB0aGUgYmVnaW4gb2YgdGhlIGFkZHJlc3Mgc3BhY2UgdG8gd2hpY2ggeDg2IHN0eWxlCkBAIC0xNjYsMjYgKzE3MCw4IEBACiAJICogYWxyZWFkeSBzZXQgdXAgaW5pdHJkX3N0YXJ0IGFuZCBpbml0cmRfZW5kLiBJbiB0aGVzZSBjYXNlcwogCSAqIHBlcmZvbSBzYW5pdHkgY2hlY2tzIGFuZCB1c2UgdGhlbSBpZiBhbGwgbG9va3MgZ29vZC4KIAkgKi8KLQlpZiAoIWluaXRyZF9zdGFydCB8fCBpbml0cmRfZW5kIDw9IGluaXRyZF9zdGFydCkgewotI2lmZGVmIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSCi0JCXUzMiAqaW5pdHJkX2hlYWRlcjsKLQotCQkvKgotCQkgKiBTZWUgaWYgaW5pdHJkIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBrZXJuZWwgaW1hZ2UgYnkKLQkJICogYXJjaC9taXBzL2Jvb3QvYWRkaW5pdHJkLmMuIEluIHRoYXQgY2FzZSBhIGhlYWRlciBpcwotCQkgKiBwcmVwZW5kZWQgdG8gaW5pdHJkIGFuZCBpcyBtYWRlIHVwIGJ5IDggYnl0ZXMuIFRoZSBmaXJzdAotCQkgKiB3b3JkIGlzIGEgbWFnaWMgbnVtYmVyIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgc2l6ZSBvZgotCQkgKiBpbml0cmQuICBJbml0cmQgc3RhcnQgbXVzdCBiZSBwYWdlIGFsaWduZWQgaW4gYW55IGNhc2VzLgotCQkgKi8KLQkJaW5pdHJkX2hlYWRlciA9IF9fdmEoUEFHRV9BTElHTihfX3BhX3N5bWJvbCgmX2VuZCkgKyA4KSkgLSA4OwotCQlpZiAoaW5pdHJkX2hlYWRlclswXSAhPSAweDQ5NEU1MjQ0KQotCQkJZ290byBkaXNhYmxlOwotCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZykoaW5pdHJkX2hlYWRlciArIDIpOwotCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgaW5pdHJkX2hlYWRlclsxXTsKLSNlbHNlCisJaWYgKCFpbml0cmRfc3RhcnQgfHwgaW5pdHJkX2VuZCA8PSBpbml0cmRfc3RhcnQpCiAJCWdvdG8gZGlzYWJsZTsKLSNlbmRpZgotCX0KIAogCWlmIChpbml0cmRfc3RhcnQgJiB+UEFHRV9NQVNLKSB7CiAJCXByX2VycigiaW5pdHJkIHN0YXJ0IG11c3QgYmUgcGFnZSBhbGlnbmVkXG4iKTsKQEAgLTQ3Niw4ICs0NjIsMjAgQEAKIAlwcl9pbmZvKCJEZXRlcm1pbmVkIHBoeXNpY2FsIFJBTSBtYXA6XG4iKTsKIAlwcmludF9tZW1vcnlfbWFwKCk7CiAKLQlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYXJjc19jbWRsaW5lLCBzaXplb2YoY29tbWFuZF9saW5lKSk7Ci0Jc3RybGNweShib290X2NvbW1hbmRfbGluZSwgY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisjaWZkZWYgQ09ORklHX0NNRExJTkVfQk9PTAorI2lmZGVmIENPTkZJR19DTURMSU5FX09WRVJSSURFCisJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgYnVpbHRpbl9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZWxzZQorCWlmIChidWlsdGluX2NtZGxpbmVbMF0pIHsKKwkJc3RybGNhdChhcmNzX2NtZGxpbmUsICIgIiwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgYnVpbHRpbl9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisJfQorCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGFyY3NfY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworI2VuZGlmCisjZWxzZQorCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGFyY3NfY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworI2VuZGlmCisJc3RybGNweShjb21tYW5kX2xpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAKIAkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwppbmRleCA2MjU0MDQxLi5kMGM2OGI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKQEAgLTM1LDYgKzM1LDE1IEBACiAKICNpbmNsdWRlICJzaWduYWwtY29tbW9uLmgiCiAKK3N0YXRpYyBpbnQgKCpzYXZlX2ZwX2NvbnRleHQpKHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOworc3RhdGljIGludCAoKnJlc3RvcmVfZnBfY29udGV4dCkoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBfc2F2ZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IF9yZXN0b3JlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CisKIC8qCiAgKiBIb3JyaWJseSBjb21wbGljYXRlZCAtIHdpdGggdGhlIGJsb29keSBSTTkwMDAgd29ya2Fyb3VuZHMgZW5hYmxlZAogICogdGhlIHNpZ25hbCB0cmFtcG9saW5lcyBpcyBtb3ZpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlIHNvIHdlIGNhbgpAQCAtNzA5LDMgKzcxOCw0MCBAQAogCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CiAJfQogfQorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBzbXBfc2F2ZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpCit7CisJcmV0dXJuIHJhd19jcHVfaGFzX2ZwdQorCSAgICAgICA/IF9zYXZlX2ZwX2NvbnRleHQoc2MpCisJICAgICAgIDogZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dChzYyk7Cit9CisKK3N0YXRpYyBpbnQgc21wX3Jlc3RvcmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKQoreworCXJldHVybiByYXdfY3B1X2hhc19mcHUKKwkgICAgICAgPyBfcmVzdG9yZV9mcF9jb250ZXh0KHNjKQorCSAgICAgICA6IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc2MpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2lnbmFsX3NldHVwKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIEZvciBub3cganVzdCBkbyB0aGUgY3B1X2hhc19mcHUgY2hlY2sgd2hlbiB0aGUgZnVuY3Rpb25zIGFyZSBpbnZva2VkICovCisJc2F2ZV9mcF9jb250ZXh0ID0gc21wX3NhdmVfZnBfY29udGV4dDsKKwlyZXN0b3JlX2ZwX2NvbnRleHQgPSBzbXBfcmVzdG9yZV9mcF9jb250ZXh0OworI2Vsc2UKKwlpZiAoY3B1X2hhc19mcHUpIHsKKwkJc2F2ZV9mcF9jb250ZXh0ID0gX3NhdmVfZnBfY29udGV4dDsKKwkJcmVzdG9yZV9mcF9jb250ZXh0ID0gX3Jlc3RvcmVfZnBfY29udGV4dDsKKwl9IGVsc2UgeworCQlzYXZlX2ZwX2NvbnRleHQgPSBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0OworCQlyZXN0b3JlX2ZwX2NvbnRleHQgPSBmcHVfZW11bGF0b3JfcmVzdG9yZV9jb250ZXh0OworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoc2lnbmFsX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYwppbmRleCAyZTc0MDc1Li4wM2FiYWYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCkBAIC0zNSw2ICszNSwxNSBAQAogCiAjaW5jbHVkZSAic2lnbmFsLWNvbW1vbi5oIgogCitzdGF0aWMgaW50ICgqc2F2ZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7CitzdGF0aWMgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBfc2F2ZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKK2V4dGVybiBhc21saW5rYWdlIGludCBfcmVzdG9yZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKKworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOworCiAvKgogICogSW5jbHVkaW5nIDxhc20vdW5pc3RkLmg+IHdvdWxkIGdpdmUgdXNlIHRoZSA2NC1iaXQgc3lzY2FsbCBudW1iZXJzIC4uLgogICovCkBAIC04MjgsMyArODM3LDE4IEBACiAJaW5mby5zaV9jb2RlIHw9IF9fU0lfQ0hMRDsKIAlyZXR1cm4gY29weV9zaWdpbmZvX3RvX3VzZXIzMih1aW5mbywgJmluZm8pOwogfQorCitzdGF0aWMgaW50IHNpZ25hbDMyX2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2hhc19mcHUpIHsKKwkJc2F2ZV9mcF9jb250ZXh0MzIgPSBfc2F2ZV9mcF9jb250ZXh0MzI7CisJCXJlc3RvcmVfZnBfY29udGV4dDMyID0gX3Jlc3RvcmVfZnBfY29udGV4dDMyOworCX0gZWxzZSB7CisJCXNhdmVfZnBfY29udGV4dDMyID0gZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dDMyOworCQlyZXN0b3JlX2ZwX2NvbnRleHQzMiA9IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQzMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzaWduYWwzMl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IGU3MmU2ODQuLjZjZGNhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMzAsNyArMTMxLDcgQEAKIC8qCiAgKiBDYWxsIGludG8gYm90aCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFzIHdlIHNoYXJlIHRoZSBJUEkgZm9yIHRoZW0KICAqLwotdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCkKK3ZvaWQgX19pcnFfZW50cnkgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IGEzOGUzZWUuLjIzNDk5YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC05MzksMjMgKzk0MCwyOSBAQAogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbWlwc19jbG9ja2V2ZW50X2RldmljZSk7CiAKLXZvaWQgaXBpX2RlY29kZShzdHJ1Y3Qgc210Y19pcGkgKnBpcGkpCitzdGF0aWMgdm9pZCBfX2lycV9lbnRyeSBzbXRjX2Nsb2NrX3RpY2tfaW50ZXJydXB0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKKwlpbnQgaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyAxOworCisJaXJxX2VudGVyKCk7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CisJY2QgPSAmcGVyX2NwdShtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOworCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKKwlpcnFfZXhpdCgpOworfQorCit2b2lkIGlwaV9kZWNvZGUoc3RydWN0IHNtdGNfaXBpICpwaXBpKQorewogCXZvaWQgKmFyZ19jb3B5ID0gcGlwaS0+YXJnOwogCWludCB0eXBlX2NvcHkgPSBwaXBpLT50eXBlOwotCWludCBpcnEgPSBNSVBTX0NQVV9JUlFfQkFTRSArIDE7CiAKIAlzbXRjX2lwaV9ucSgmZnJlZUlQSXEsIHBpcGkpOwogCiAJc3dpdGNoICh0eXBlX2NvcHkpIHsKIAljYXNlIFNNVENfQ0xPQ0tfVElDSzoKLQkJaXJxX2VudGVyKCk7Ci0JCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGlycV90b19kZXNjKGlycSkpOwotCQljZCA9ICZwZXJfY3B1KG1pcHNfY2xvY2tldmVudF9kZXZpY2UsIGNwdSk7Ci0JCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKLQkJaXJxX2V4aXQoKTsKKwkJc210Y19jbG9ja190aWNrX2ludGVycnVwdCgpOwogCQlicmVhazsKIAogCWNhc2UgTElOVVhfU01QX0lQSToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCAwYTE4YjRjLi4zMDhlNDM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0yNSwxMCArMjUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9icmFuY2guaD4KICNpbmNsdWRlIDxhc20vYnJlYWsuaD4KKyNpbmNsdWRlIDxhc20vY29wMi5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZHNwLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpAQCAtNzksMTAgKzgxLDYgQEAKIGV4dGVybiBpbnQgZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyKHN0cnVjdCBwdF9yZWdzICp4Y3AsCiAJc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqY3R4LCBpbnQgaGFzX2ZwdSk7CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KLWV4dGVybiBhc21saW5rYWdlIHZvaWQgb2N0ZW9uX2NvcDJfcmVzdG9yZShzdHJ1Y3Qgb2N0ZW9uX2NvcDJfc3RhdGUgKnRhc2spOwotI2VuZGlmCi0KIHZvaWQgKCpib2FyZF9iZV9pbml0KSh2b2lkKTsKIGludCAoKmJvYXJkX2JlX2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOwogdm9pZCAoKmJvYXJkX25taV9oYW5kbGVyX3NldHVwKSh2b2lkKTsKQEAgLTg1Nyw2ICs4NTUsNDQgQEAKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogfQogCisvKgorICogTm8gbG9jazsgb25seSB3cml0dGVuIGR1cmluZyBlYXJseSBib290dXAgYnkgQ1BVIDAuCisgKi8KK3N0YXRpYyBSQVdfTk9USUZJRVJfSEVBRChjdTJfY2hhaW4pOworCitpbnQgX19yZWYgcmVnaXN0ZXJfY3UyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIHJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY3UyX2NoYWluLCBuYik7Cit9CisKK2ludCBjdTJfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlyZXR1cm4gcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmN1Ml9jaGFpbiwgdmFsLCB2KTsKK30KKworc3RhdGljIGludCBkZWZhdWx0X2N1Ml9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKyAgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGRhdGE7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWRlZmF1bHQ6CisJCWRpZV9pZl9rZXJuZWwoIlVuaGFuZGxlZCBrZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBvciBpbnZhbGlkICIKKwkJCSAgICAgICJpbnN0cnVjdGlvbiIsIHJlZ3MpOworCQkvKiBGYWxsIHRocm91Z2ggICovCisKKwljYXNlIENVMl9FWENFUFRJT046CisJCWZvcmNlX3NpZyhTSUdJTEwsIGN1cnJlbnQpOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGVmYXVsdF9jdTJfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBkZWZhdWx0X2N1Ml9jYWxsLAorCS5wcmlvcml0eQk9IDB4ODAwMDAwMDAsCQkvKiBSdW4gbGFzdCAgKi8KK307CisKIGFzbWxpbmthZ2Ugdm9pZCBkb19jcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IF9fdXNlciAqZXBjOwpAQCAtOTIwLDE3ICs5NTYsOSBAQAogCQlyZXR1cm47CiAKIAljYXNlIDI6Ci0jaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCi0JCXByZWZldGNoKCZjdXJyZW50LT50aHJlYWQuY3AyKTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlLU1RLX1NUQVRVUyhjdXJyZW50KSB8PSBTVDBfQ1UyOwotCQlzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwotCQl3cml0ZV9jMF9zdGF0dXMoc3RhdHVzIHwgU1QwX0NVMik7Ci0JCW9jdGVvbl9jb3AyX3Jlc3RvcmUoJihjdXJyZW50LT50aHJlYWQuY3AyKSk7Ci0JCXdyaXRlX2MwX3N0YXR1cyhzdGF0dXMgJiB+U1QwX0NVMik7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuOwotI2VuZGlmCisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjdTJfY2hhaW4sIENVMl9FWENFUFRJT04sIHJlZ3MpOworCQlicmVhazsKKwogCWNhc2UgMzoKIAkJYnJlYWs7CiAJfQpAQCAtMTM2Nyw3NyArMTM5NSw2IEBACiAJcmV0dXJuIHNldF92aV9zcnNfaGFuZGxlcihuLCBhZGRyLCAwKTsKIH0KIAotLyoKLSAqIFRoaXMgaXMgdXNlZCBieSBuYXRpdmUgc2lnbmFsIGhhbmRsaW5nCi0gKi8KLWFzbWxpbmthZ2UgaW50ICgqc2F2ZV9mcF9jb250ZXh0KShzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLWFzbWxpbmthZ2UgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0KShzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IF9zYXZlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci1leHRlcm4gYXNtbGlua2FnZSBpbnQgX3Jlc3RvcmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci1leHRlcm4gYXNtbGlua2FnZSBpbnQgZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBpbnQgc21wX3NhdmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKQotewotCXJldHVybiByYXdfY3B1X2hhc19mcHUKLQkgICAgICAgPyBfc2F2ZV9mcF9jb250ZXh0KHNjKQotCSAgICAgICA6IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc2MpOwotfQotCi1zdGF0aWMgaW50IHNtcF9yZXN0b3JlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYykKLXsKLQlyZXR1cm4gcmF3X2NwdV9oYXNfZnB1Ci0JICAgICAgID8gX3Jlc3RvcmVfZnBfY29udGV4dChzYykKLQkgICAgICAgOiBmcHVfZW11bGF0b3JfcmVzdG9yZV9jb250ZXh0KHNjKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFsX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JLyogRm9yIG5vdyBqdXN0IGRvIHRoZSBjcHVfaGFzX2ZwdSBjaGVjayB3aGVuIHRoZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgKi8KLQlzYXZlX2ZwX2NvbnRleHQgPSBzbXBfc2F2ZV9mcF9jb250ZXh0OwotCXJlc3RvcmVfZnBfY29udGV4dCA9IHNtcF9yZXN0b3JlX2ZwX2NvbnRleHQ7Ci0jZWxzZQotCWlmIChjcHVfaGFzX2ZwdSkgewotCQlzYXZlX2ZwX2NvbnRleHQgPSBfc2F2ZV9mcF9jb250ZXh0OwotCQlyZXN0b3JlX2ZwX2NvbnRleHQgPSBfcmVzdG9yZV9mcF9jb250ZXh0OwotCX0gZWxzZSB7Ci0JCXNhdmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQ7Ci0JCXJlc3RvcmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQ7Ci0JfQotI2VuZGlmCi19Ci0KLSNpZmRlZiBDT05GSUdfTUlQUzMyX0NPTVBBVAotCi0vKgotICogVGhpcyBpcyB1c2VkIGJ5IDMyLWJpdCBzaWduYWwgc3R1ZmYgb24gdGhlIDY0LWJpdCBrZXJuZWwKLSAqLwotYXNtbGlua2FnZSBpbnQgKCpzYXZlX2ZwX2NvbnRleHQzMikoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLWFzbWxpbmthZ2UgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7Ci0KLWV4dGVybiBhc21saW5rYWdlIGludCBfc2F2ZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLWV4dGVybiBhc21saW5rYWdlIGludCBfcmVzdG9yZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOwotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFsMzJfaW5pdCh2b2lkKQotewotCWlmIChjcHVfaGFzX2ZwdSkgewotCQlzYXZlX2ZwX2NvbnRleHQzMiA9IF9zYXZlX2ZwX2NvbnRleHQzMjsKLQkJcmVzdG9yZV9mcF9jb250ZXh0MzIgPSBfcmVzdG9yZV9mcF9jb250ZXh0MzI7Ci0JfSBlbHNlIHsKLQkJc2F2ZV9mcF9jb250ZXh0MzIgPSBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0MzI7Ci0JCXJlc3RvcmVfZnBfY29udGV4dDMyID0gZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dDMyOwotCX0KLX0KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBjcHVfY2FjaGVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHRsYl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2hhbmRsZXJzKHZvaWQpOwpAQCAtMTc1MSwxMyArMTcwOCwxMCBAQAogCWVsc2UKIAkJbWVtY3B5KCh2b2lkICopKGViYXNlICsgMHgwODApLCAmZXhjZXB0X3ZlYzNfZ2VuZXJpYywgMHg4MCk7CiAKLQlzaWduYWxfaW5pdCgpOwotI2lmZGVmIENPTkZJR19NSVBTMzJfQ09NUEFUCi0Jc2lnbmFsMzJfaW5pdCgpOwotI2VuZGlmCi0KIAlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoZWJhc2UsIGViYXNlICsgMHg0MDApOwogCWZsdXNoX3RsYl9oYW5kbGVycygpOwogCiAJc29ydF9leHRhYmxlKF9fc3RhcnRfX19kYmVfdGFibGUsIF9fc3RvcF9fX2RiZV90YWJsZSk7CisKKwlyZWdpc3Rlcl9jdTJfbm90aWZpZXIoJmRlZmF1bHRfY3UyX25vdGlmaWVyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL21pcHMva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDY3YmQ2MjYuLjY5YjAzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC91bmFsaWduZWQuYwpAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vYnJhbmNoLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9jb3AyLmg+CiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ1MSwxNyArNDUyLDI3IEBACiAJCSAqLwogCQlnb3RvIHNpZ2J1czsKIAorCS8qCisJICogQ09QMiBpcyBhdmFpbGFibGUgdG8gaW1wbGVtZW50b3IgZm9yIGFwcGxpY2F0aW9uIHNwZWNpZmljIHVzZS4KKwkgKiBJdCdzIHVwIHRvIGFwcGxpY2F0aW9ucyB0byByZWdpc3RlciBhIG5vdGlmaWVyIGNoYWluIGFuZCBkbworCSAqIHdoYXRldmVyIHRoZXkgaGF2ZSB0byBkbywgaW5jbHVkaW5nIHBvc3NpYmxlIHNlbmRpbmcgb2Ygc2lnbmFscy4KKwkgKi8KIAljYXNlIGx3YzJfb3A6CisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9MV0MyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIGxkYzJfb3A6CisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9MREMyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIHN3YzJfb3A6CisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9TV0MyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIHNkYzJfb3A6Ci0JCS8qCi0JCSAqIFRoZXNlIGFyZSB0aGUgY29wcm9jZXNzb3IgMiBsb2FkL3N0b3Jlcy4gIFRoZSBjdXJyZW50Ci0JCSAqIGltcGxlbWVudGF0aW9ucyBkb24ndCB1c2UgY3AyIGFuZCBjcDIgc2hvdWxkIGFsd2F5cyBiZQotCQkgKiBkaXNhYmxlZCBpbiBjMF9zdGF0dXMuICBTbyBzZW5kIFNJR0lMTC4KLSAgICAgICAgICAgICAgICAgKiAoTm8gbG9uZ2VyIHRydWU6IFRoZSBTb255IFByYXlzdGF0aW9uIHVzZXMgY3AyIGZvcgotICAgICAgICAgICAgICAgICAqIDNEIG1hdHJpeCBvcGVyYXRpb25zLiAgRHVubm8gaWYgdGhhdCB0aGluZ3kgaGFzIGEgTU1VIC4uLikKLQkJICovCisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9TREMyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQkvKgogCQkgKiBQaGVlZWUuLi4gIFdlIGVuY291bnRlcmVkIGFuIHlldCB1bmtub3duIGluc3RydWN0aW9uIG9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTYyYjI5OS4uZjI1ZGY3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDYsNiArNDYsNyBAQAogCQlTQ0hFRF9URVhUCiAJCUxPQ0tfVEVYVAogCQlLUFJPQkVTX1RFWFQKKwkJSVJRRU5UUllfVEVYVAogCQkqKC50ZXh0LiopCiAJCSooLmZpeHVwKQogCQkqKC5nbnUud2FybmluZykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9waWN2dWVfcHJvYy5jIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZV9wcm9jLmMKaW5kZXggMGJiNjAzNy4uOGUzODhkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZV9wcm9jLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZV9wcm9jLmMKQEAgLTQsMTIgKzQsMTQgQEAKICAqIEJyaWFuIE11cnBoeSA8YnJpYW4ubXVycGh5QGVpY29uLmNvbT4KICAqCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTM4LDEyICs0MCw5IEBACiAKIHN0YXRpYyBERUNMQVJFX1RBU0tMRVQocHZjX2Rpc3BsYXlfdGFza2xldCwgJnB2Y19kaXNwbGF5LCAwKTsKIAotc3RhdGljIGludCBwdmNfcHJvY19yZWFkX2xpbmUoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHB2Y19saW5lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JY2hhciAqb3JpZ3BhZ2UgPSBwYWdlOwotCWludCBsaW5lbm8gPSAqKGludCAqKWRhdGE7CisJaW50IGxpbmVubyA9ICooaW50ICopbS0+cHJpdmF0ZTsKIAogCWlmIChsaW5lbm8gPCAwIHx8IGxpbmVubyA+IFBWQ19OTElORVMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicHJvY19yZWFkX2xpbmU6IGludmFsaWQgbGluZW5vICVkXG4iLCBsaW5lbm8pOwpAQCAtNTEsNDUgKzUwLDY2IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcHZjX211dGV4KTsKLQlwYWdlICs9IHNwcmludGYocGFnZSwgIiVzXG4iLCBwdmNfbGluZXNbbGluZW5vXSk7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHB2Y19saW5lc1tsaW5lbm9dKTsKIAltdXRleF91bmxvY2soJnB2Y19tdXRleCk7CiAKLQlyZXR1cm4gcGFnZSAtIG9yaWdwYWdlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB2Y19wcm9jX3dyaXRlX2xpbmUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHB2Y19saW5lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgb3JpZ2NvdW50ID0gY291bnQ7Ci0JaW50IGxpbmVubyA9ICooaW50ICopZGF0YTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHZjX2xpbmVfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KIAotCWlmIChsaW5lbm8gPCAwIHx8IGxpbmVubyA+IFBWQ19OTElORVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicHJvY193cml0ZV9saW5lOiBpbnZhbGlkIGxpbmVubyAlZFxuIiwKLQkJICAgICAgIGxpbmVubyk7Ci0JCXJldHVybiBvcmlnY291bnQ7Ci0JfQorc3RhdGljIHNzaXplX3QgcHZjX2xpbmVfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWludCBsaW5lbm8gPSAqKGludCAqKVBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKwljaGFyIGtidWZbUFZDX0xJTkVMRU5dOworCXNpemVfdCBsZW47CiAKLQlpZiAoY291bnQgPiBQVkNfTElORUxFTikKLQkJY291bnQgPSBQVkNfTElORUxFTjsKKwlCVUdfT04obGluZW5vIDwgMCB8fCBsaW5lbm8gPiBQVkNfTkxJTkVTKTsKIAotCWlmIChidWZmZXJbY291bnQtMV0gPT0gJ1xuJykKLQkJY291bnQtLTsKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihrYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWtidWZbbGVuXSA9ICdcMCc7CisKKwlpZiAobGVuID4gMCAmJiBrYnVmW2xlbiAtIDFdID09ICdcbicpCisJCWxlbi0tOwogCiAJbXV0ZXhfbG9jaygmcHZjX211dGV4KTsKLQlzdHJuY3B5KHB2Y19saW5lc1tsaW5lbm9dLCBidWZmZXIsIGNvdW50KTsKLQlwdmNfbGluZXNbbGluZW5vXVtjb3VudF0gPSAnXDAnOworCXN0cm5jcHkocHZjX2xpbmVzW2xpbmVub10sIGtidWYsIGxlbik7CisJcHZjX2xpbmVzW2xpbmVub11bbGVuXSA9ICdcMCc7CiAJbXV0ZXhfdW5sb2NrKCZwdmNfbXV0ZXgpOwogCiAJdGFza2xldF9zY2hlZHVsZSgmcHZjX2Rpc3BsYXlfdGFza2xldCk7CiAKLQlyZXR1cm4gb3JpZ2NvdW50OworCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBwdmNfcHJvY193cml0ZV9zY3JvbGwoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwdmNfbGluZV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHB2Y19saW5lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwdmNfbGluZV9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIHNzaXplX3QgcHZjX3Njcm9sbF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKLQlpbnQgb3JpZ2NvdW50ID0gY291bnQ7Ci0JaW50IGNtZCA9IHNpbXBsZV9zdHJ0b2woYnVmZmVyLCBOVUxMLCAxMCk7CisJY2hhciBrYnVmWzQyXTsKKwlzaXplX3QgbGVuOworCWludCBjbWQ7CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihrYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWtidWZbbGVuXSA9ICdcMCc7CisKKwljbWQgPSBzaW1wbGVfc3RydG9sKGtidWYsIE5VTEwsIDEwKTsKIAogCW11dGV4X2xvY2soJnB2Y19tdXRleCk7CiAJaWYgKHNjcm9sbF9pbnRlcnZhbCAhPSAwKQpAQCAtMTEwLDIyICsxMzAsMzEgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwdmNfbXV0ZXgpOwogCi0JcmV0dXJuIG9yaWdjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgcHZjX3Byb2NfcmVhZF9zY3JvbGwoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHB2Y19zY3JvbGxfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICpvcmlncGFnZSA9IHBhZ2U7Ci0KIAltdXRleF9sb2NrKCZwdmNfbXV0ZXgpOwotCXBhZ2UgKz0gc3ByaW50ZihwYWdlLCAiJWRcbiIsIHNjcm9sbF9kaXIgKiBzY3JvbGxfaW50ZXJ2YWwpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCBzY3JvbGxfZGlyICogc2Nyb2xsX2ludGVydmFsKTsKIAltdXRleF91bmxvY2soJnB2Y19tdXRleCk7CiAKLQlyZXR1cm4gcGFnZSAtIG9yaWdwYWdlOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHB2Y19zY3JvbGxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwdmNfc2Nyb2xsX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB2Y19zY3JvbGxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwdmNfc2Nyb2xsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwdmNfc2Nyb2xsX3Byb2Nfd3JpdGUsCit9OwogCiB2b2lkIHB2Y19wcm9jX3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0xNjMsMjIgKzE5MiwxNiBAQAogCQlwdmNfbGluZWRhdGFbaV0gPSBpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgUFZDX05MSU5FUzsgaSsrKSB7Ci0JCXByb2NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShwdmNfbGluZW5hbWVbaV0sIDA2NDQsCi0JCQkJCSAgICAgICBwdmNfZGlzcGxheV9kaXIpOworCQlwcm9jX2VudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShwdmNfbGluZW5hbWVbaV0sIDA2NDQsIHB2Y19kaXNwbGF5X2RpciwKKwkJCQkJJnB2Y19saW5lX3Byb2NfZm9wcywgJnB2Y19saW5lZGF0YVtpXSk7CiAJCWlmIChwcm9jX2VudHJ5ID09IE5VTEwpCiAJCQlnb3RvIGVycm9yOwotCi0JCXByb2NfZW50cnktPnJlYWRfcHJvYyA9IHB2Y19wcm9jX3JlYWRfbGluZTsKLQkJcHJvY19lbnRyeS0+d3JpdGVfcHJvYyA9IHB2Y19wcm9jX3dyaXRlX2xpbmU7Ci0JCXByb2NfZW50cnktPmRhdGEgPSAmcHZjX2xpbmVkYXRhW2ldOwogCX0KLQlwcm9jX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNjcm9sbCIsIDA2NDQsIHB2Y19kaXNwbGF5X2Rpcik7CisJcHJvY19lbnRyeSA9IHByb2NfY3JlYXRlKCJzY3JvbGwiLCAwNjQ0LCBwdmNfZGlzcGxheV9kaXIsCisJCQkJICZwdmNfc2Nyb2xsX3Byb2NfZm9wcyk7CiAJaWYgKHByb2NfZW50cnkgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKIAotCXByb2NfZW50cnktPndyaXRlX3Byb2MgPSBwdmNfcHJvY193cml0ZV9zY3JvbGw7Ci0JcHJvY19lbnRyeS0+cmVhZF9wcm9jID0gcHZjX3Byb2NfcmVhZF9zY3JvbGw7Ci0KIAlpbml0X3RpbWVyKCZ0aW1lcik7CiAJdGltZXIuZnVuY3Rpb24gPSBwdmNfcHJvY190aW1lcmZ1bmM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9wcm9tLmMgYi9hcmNoL21pcHMvbGFzYXQvcHJvbS5jCmluZGV4IDZhY2M2Y2IuLjIwZmRlMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3Byb20uYwpAQCAtMTAwLDggKzEwMCw4IEBACiAKIAkvKiBHZXQgdGhlIGNvbW1hbmQgbGluZSAqLwogCWlmIChhcmdjID4gMCkgewotCQlzdHJuY3B5KGFyY3NfY21kbGluZSwgYXJndlswXSwgQ0xfU0laRS0xKTsKLQkJYXJjc19jbWRsaW5lW0NMX1NJWkUtMV0gPSAnXDAnOworCQlzdHJuY3B5KGFyY3NfY21kbGluZSwgYXJndlswXSwgQ09NTUFORF9MSU5FX1NJWkUtMSk7CisJCWFyY3NfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRS0xXSA9ICdcMCc7CiAJfQogCiAJLyogU2V0IHRoZSBJL08gYmFzZSBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMgYi9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKaW5kZXggMTRiOWEyOC4uZDg3ZmZkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2xhc2F0X3ByaWQsCi0uCX0sCisJfSwKICNpZmRlZiBDT05GSUdfSU5FVAogCXsKIAkJLnByb2NuYW1lCT0gImlwYWRkciIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vS2NvbmZpZyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9LY29uZmlnCmluZGV4IGQ0NTA5MjUuLjNkZjE5NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9LY29uZmlnCkBAIC0xLDMxICsxLDg1IEBACiBjaG9pY2UKLSAgICBwcm9tcHQgIk1hY2hpbmUgVHlwZSIKLSAgICBkZXBlbmRzIG9uIE1BQ0hfTE9PTkdTT04KKwlwcm9tcHQgIk1hY2hpbmUgVHlwZSIKKwlkZXBlbmRzIG9uIE1BQ0hfTE9PTkdTT04KIAogY29uZmlnIExFTU9URV9GVUxPT05HMkUKLSAgICBib29sICJMZW1vdGUgRnVsb29uZygyZSkgbWluaS1QQyIKLSAgICBzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0gICAgc2VsZWN0IENFVlRfUjRLCi0gICAgc2VsZWN0IENTUkNfUjRLCi0gICAgc2VsZWN0IFNZU19IQVNfQ1BVX0xPT05HU09OMkUKLSAgICBzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0gICAgc2VsZWN0IEJPT1RfRUxGMzIKLSAgICBzZWxlY3QgQk9BUkRfU0NBQ0hFCi0gICAgc2VsZWN0IEhXX0hBU19QQ0kKLSAgICBzZWxlY3QgSTgyNTkKLSAgICBzZWxlY3QgSVNBCi0gICAgc2VsZWN0IElSUV9DUFUKLSAgICBzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotICAgIHNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCi0gICAgc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0gICAgc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCi0gICAgc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCi0gICAgc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotICAgIHNlbGVjdCBHRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU4KLSAgICBzZWxlY3QgQ1BVX0hBU19XQgotICAgIGhlbHAKLSAgICAgIExlbW90ZSBGdWxvb25nKDJlKSBtaW5pLVBDIGJvYXJkIGJhc2VkIG9uIHRoZSBDaGluZXNlIExvb25nc29uLTJFIENQVSBhbmQKLSAgICAgIGFuIEZQR0Egbm9ydGhicmlkZ2UKKwlib29sICJMZW1vdGUgRnVsb29uZygyZSkgbWluaS1QQyIKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IENFVlRfUjRLCisJc2VsZWN0IENTUkNfUjRLCisJc2VsZWN0IFNZU19IQVNfQ1BVX0xPT05HU09OMkUKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEJPT1RfRUxGMzIKKwlzZWxlY3QgQk9BUkRfU0NBQ0hFCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSTgyNTkKKwlzZWxlY3QgSVNBCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCXNlbGVjdCBHRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU4KKwlzZWxlY3QgQ1BVX0hBU19XQgorCWhlbHAKKwkgIExlbW90ZSBGdWxvb25nKDJlKSBtaW5pLVBDIGJvYXJkIGJhc2VkIG9uIHRoZSBDaGluZXNlIExvb25nc29uLTJFIENQVSBhbmQKKwkgIGFuIEZQR0Egbm9ydGhicmlkZ2UKIAotICAgICAgTGVtb3RlIEZ1bG9vbmcoMmUpIG1pbmkgUEMgaGF2ZSBhIFZJQTY4NkIgc291dGggYnJpZGdlLgorCSAgTGVtb3RlIEZ1bG9vbmcoMmUpIG1pbmkgUEMgaGF2ZSBhIFZJQTY4NkIgc291dGggYnJpZGdlLgorCitjb25maWcgTEVNT1RFX01BQ0gyRgorCWJvb2wgIkxlbW90ZSBMb29uZ3NvbiAyRiBmYW1pbHkgbWFjaGluZXMiCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBCT0FSRF9TQ0FDSEUKKwlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBDRVZUX1I0SyBpZiAhIE1JUFNfRVhURVJOQUxfVElNRVIKKwlzZWxlY3QgQ1BVX0hBU19XQgorCXNlbGVjdCBDUzU1MzYKKwlzZWxlY3QgQ1NSQ19SNEsgaWYgISBNSVBTX0VYVEVSTkFMX1RJTUVSCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlzZWxlY3QgR0VORVJJQ19JU0FfRE1BX1NVUFBPUlRfQlJPS0VOCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSTgyNTkKKwlzZWxlY3QgSVJRX0NQVQorCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1lTX0hBU19DUFVfTE9PTkdTT04yRgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USworCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwloZWxwCisJICBMZW1vdGUgTG9vbmdzb24gMkYgZmFtaWx5IG1hY2hpbmVzIHV0aWxpemUgdGhlIDJGIHJldmlzaW9uIG9mCisJICBMb29uZ3NvbiBwcm9jZXNzb3IgYW5kIHRoZSBBTUQgQ1M1NTM2IHNvdXRoIGJyaWRnZS4KKworCSAgVGhlc2UgZmFtaWx5IG1hY2hpbmVzIGluY2x1ZGUgZnVsb29uZzJmIG1pbmkgUEMsIHllZWxvb25nMmYgbm90ZWJvb2ssCisJICBMaW5nTG9vbmcgYWxsaW5vbmUgUEMgYW5kIHNvIGZvcnRoLgogZW5kY2hvaWNlCisKK2NvbmZpZyBDUzU1MzYKKwlib29sCisKK2NvbmZpZyBDUzU1MzZfTUZHUFQKKwlib29sICJDUzU1MzYgTUZHUFQgVGltZXIiCisJZGVwZW5kcyBvbiBDUzU1MzYKKwlzZWxlY3QgTUlQU19FWFRFUk5BTF9USU1FUgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG1mZ3B0MCB0aW1lciBvZiBBTUQgQ1M1NTM2LgorCisJICBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIExvb25nc29uMiBDUFVGcmVxIERyaXZlciwgUGxlYXNlIGVuYWJsZQorCSAgdGhpcyBvcHRpb24gYXQgZmlyc3QsIG90aGVyd2lzZSwgWW91IHdpbGwgZ2V0IHdyb25nIHN5c3RlbSB0aW1lLgorCisJICBJZiB1bnN1cmUsIHNheSBZZXMuCisKK2NvbmZpZyBMT09OR1NPTl9TVVNQRU5ECisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQ1BVX1NVUFBPUlRTX0NQVUZSRVEgJiYgU1VTUEVORAorCitjb25maWcgTE9PTkdTT05fVUFSVF9CQVNFCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gRUFSTFlfUFJJTlRLIHx8IFNFUklBTF84MjUwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvbG9vbmdzb24vTWFrZWZpbGUKaW5kZXggMzkwNDhjNC4uMmI3NmNiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9NYWtlZmlsZQpAQCAtOSwzICs5LDkgQEAKICMKIAogb2JqLSQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpICArPSBmdWxvb25nLTJlLworCisjCisjIExlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcworIworCitvYmotJChDT05GSUdfTEVNT1RFX01BQ0gyRikgICs9IGxlbW90ZS0yZi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL01ha2VmaWxlCmluZGV4IDY1NmIzY2MuLjc2NjhjNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9NYWtlZmlsZQpAQCAtMyw5ICszLDIzIEBACiAjCiAKIG9iai15ICs9IHNldHVwLm8gaW5pdC5vIGNtZGxpbmUubyBlbnYubyB0aW1lLm8gcmVzZXQubyBpcnEubyBcCi0gICAgcGNpLm8gYm9uaXRvLWlycS5vIG1lbS5vIG1hY2h0eXBlLm8KKyAgICBwY2kubyBib25pdG8taXJxLm8gbWVtLm8gbWFjaHR5cGUubyBwbGF0Zm9ybS5vCiAKICMKLSMgRWFybHkgcHJpbnRrIHN1cHBvcnQKKyMgU2VyaWFsIHBvcnQgc3VwcG9ydAogIwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykgKz0gZWFybHlfcHJpbnRrLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MCkgKz0gc2VyaWFsLm8KK29iai0kKENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0UpICs9IHVhcnRfYmFzZS5vCisKKyMKKyMgRW5hYmxlIENTNTUzNiBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlKFZTTSkgdG8gdmlydHVsaXplIHRoZSBQQ0kgY29uZmlndXJlCisjIHNwYWNlCisjCitvYmotJChDT05GSUdfQ1M1NTM2KSArPSBjczU1MzYvCisKKyMKKyMgU3VzcGVuZCBTdXBwb3J0CisjCisKK29iai0kKENPTkZJR19MT09OR1NPTl9TVVNQRU5EKSArPSBwbS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Jvbml0by1pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vYm9uaXRvLWlycS5jCmluZGV4IDNlMzFlN2EuLjJkYzJhNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vYm9uaXRvLWlycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vYm9uaXRvLWlycS5jCkBAIC0xMiwxOCArMTIsMTkgQEAKICAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib25pdG9faXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQogewotCUJPTklUT19JTlRFTlNFVCA9ICgxIDw8IChpcnEgLSBCT05JVE9fSVJRX0JBU0UpKTsKKwlMT09OR1NPTl9JTlRFTlNFVCA9ICgxIDw8IChpcnEgLSBMT09OR1NPTl9JUlFfQkFTRSkpOwogCW1taW93YigpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm9uaXRvX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JQk9OSVRPX0lOVEVOQ0xSID0gKDEgPDwgKGlycSAtIEJPTklUT19JUlFfQkFTRSkpOworCUxPT05HU09OX0lOVEVOQ0xSID0gKDEgPDwgKGlycSAtIExPT05HU09OX0lSUV9CQVNFKSk7CiAJbW1pb3diKCk7CiB9CiAKQEAgLTM1LDcgKzM2LDcgQEAKIAkudW5tYXNrCT0gYm9uaXRvX2lycV9lbmFibGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBkbWFfdGltZW91dF9pcnFhY3Rpb24gPSB7CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBfX21heWJlX3VudXNlZCBkbWFfdGltZW91dF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCiAJLm5hbWUJCT0gImRtYV90aW1lb3V0IiwKIH07CkBAIC00NCw4ICs0NSwxMCBAQAogewogCXUzMiBpOwogCi0JZm9yIChpID0gQk9OSVRPX0lSUV9CQVNFOyBpIDwgQk9OSVRPX0lSUV9CQVNFICsgMzI7IGkrKykKKwlmb3IgKGkgPSBMT09OR1NPTl9JUlFfQkFTRTsgaSA8IExPT05HU09OX0lSUV9CQVNFICsgMzI7IGkrKykKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZib25pdG9faXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCi0Jc2V0dXBfaXJxKEJPTklUT19JUlFfQkFTRSArIDEwLCAmZG1hX3RpbWVvdXRfaXJxYWN0aW9uKTsKKyNpZmRlZiBDT05GSUdfQ1BVX0xPT05HU09OMkUKKwlzZXR1cF9pcnEoTE9PTkdTT05fSVJRX0JBU0UgKyAxMCwgJmRtYV90aW1lb3V0X2lycWFjdGlvbik7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKaW5kZXggNzVmMWIyNC4uN2FkNDdmMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKQEAgLTksNyArOSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KICAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtNDksNCArNDksNiBAQAogCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7CiAJaWYgKChzdHJzdHIoYXJjc19jbWRsaW5lLCAicm9vdD0iKSkgPT0gTlVMTCkKIAkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiByb290PS9kZXYvaGRhMSIpOworCisJcHJvbV9pbml0X21hY2h0eXBlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMGQ0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjIE1ha2VmaWxlIGZvciBDUzU1MzYgc3VwcG9ydC4KKyMKKworb2JqLSQoQ09ORklHX0NTNTUzNikgKz0gY3M1NTM2X3BjaS5vIGNzNTUzNl9pZGUubyBjczU1MzZfYWNjLm8gY3M1NTM2X29oY2kubyBcCisJCQljczU1MzZfaXNhLm8gY3M1NTM2X2VoY2kubworCisjCisjIEVuYWJsZSBjczU1MzYgbWZncHQgVGltZXIKKyMKK29iai0kKENPTkZJR19DUzU1MzZfTUZHUFQpICs9IGNzNTUzNl9tZmdwdC5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5NDg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIHRoZSBBQ0MgVmlydHVhbCBTdXBwb3J0IE1vZHVsZSBvZiBBTUQgQ1M1NTM2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKwordm9pZCBwY2lfYWNjX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsdWUpCit7CisJdTMyIGhpID0gMCwgbG8gPSB2YWx1ZTsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJX3JkbXNyKEdMSVVfTVNSX1JFRyhHTElVX1BBRSksICZoaSwgJmxvKTsKKwkJaWYgKHZhbHVlICYgUENJX0NPTU1BTkRfTUFTVEVSKQorCQkJbG8gfD0gKDB4MDMgPDwgOCk7CisJCWVsc2UKKwkJCWxvICY9IH4oMHgwMyA8PCA4KTsKKwkJX3dybXNyKEdMSVVfTVNSX1JFRyhHTElVX1BBRSksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX1NUQVRVUzoKKwkJaWYgKHZhbHVlICYgUENJX1NUQVRVU19QQVJJVFkpIHsKKwkJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQkJaWYgKGxvICYgU0JfUEFSRV9FUlJfRkxBRykgeworCQkJCWxvID0gKGxvICYgMHgwMDAwZmZmZikgfCBTQl9QQVJFX0VSUl9GTEFHOworCQkJCV93cm1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgaGksIGxvKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9CQVIwX1JFRzoKKwkJaWYgKHZhbHVlID09IFBDSV9CQVJfUkFOR0VfTUFTSykgeworCQkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCQkJbG8gfD0gU09GVF9CQVJfQUNDX0ZMQUc7CisJCQlfd3Jtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCBoaSwgbG8pOworCQl9IGVsc2UgaWYgKHZhbHVlICYgMHgwMSkgeworCQkJdmFsdWUgJj0gMHhmZmZmZmZmYzsKKwkJCWhpID0gMHhBMDAwMDAwMCB8ICgodmFsdWUgJiAweDAwMGZmMDAwKSA+PiAxMik7CisJCQlsbyA9IDB4MDAwZmZmODAgfCAoKHZhbHVlICYgMHgwMDAwMGZmZikgPDwgMjApOworCQkJX3dybXNyKEdMSVVfTVNSX1JFRyhHTElVX0lPRF9CTTEpLCBoaSwgbG8pOworCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0FDQ19JTlRfUkVHOgorCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhQSUNfWVNFTF9MT1cpLCAmaGksICZsbyk7CisJCS8qIGRpc2FibGUgYWxsIHRoZSB1c2IgaW50ZXJydXB0IGluIFBJQyAqLworCQlsbyAmPSB+KDB4ZiA8PCBQSUNfWVNFTF9MT1dfQUNDX1NISUZUKTsKKwkJaWYgKHZhbHVlKQkvKiBlbmFibGUgYWxsIHRoZSBhY2MgaW50ZXJydXB0IGluIFBJQyAqLworCQkJbG8gfD0gKENTNTUzNl9BQ0NfSU5UUiA8PCBQSUNfWVNFTF9MT1dfQUNDX1NISUZUKTsKKwkJX3dybXNyKERJVklMX01TUl9SRUcoUElDX1lTRUxfTE9XKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit1MzIgcGNpX2FjY19yZWFkX3JlZyhpbnQgcmVnKQoreworCXUzMiBoaSwgbG87CisJdTMyIGNvbmZfZGF0YSA9IDA7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX1ZFTkRPUl9JRDoKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfVkVORE9SX0lEKENTNTUzNl9BQ0NfREVWSUNFX0lELCBDUzU1MzZfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJX3JkbXNyKEdMSVVfTVNSX1JFRyhHTElVX0lPRF9CTTEpLCAmaGksICZsbyk7CisJCWlmICgoKGxvICYgMHhmZmYwMDAwMCkgfHwgKGhpICYgMHgwMDAwMDBmZikpCisJCSAgICAmJiAoKGhpICYgMHhmMDAwMDAwMCkgPT0gMHhhMDAwMDAwMCkpCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfSU87CisJCV9yZG1zcihHTElVX01TUl9SRUcoR0xJVV9QQUUpLCAmaGksICZsbyk7CisJCWlmICgobG8gJiAweDMwMCkgPT0gMHgzMDApCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfTUFTVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVEFUVVM6CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTXzY2TUhaOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19GQVNUX0JBQ0s7CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKQorCQkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfUEFSSVRZOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19ERVZTRUxfTUVESVVNOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19SRVZJU0lPTjoKKwkJX3JkbXNyKEFDQ19NU1JfUkVHKEFDQ19DQVApLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvICYgMHgwMDAwMDBmZjsKKwkJY29uZl9kYXRhIHw9IChDUzU1MzZfQUNDX0NMQVNTX0NPREUgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgUENJX0NBQ0hFX0xJTkVfU0laRToKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfQ0FDSEVfTElORV9TSVpFKFBDSV9OT1JNQUxfSEVBREVSX1RZUEUsCisJCQkJCSAgICBQQ0lfTk9STUFMX0xBVEVOQ1lfVElNRVIpOworCQlicmVhazsKKwljYXNlIFBDSV9CQVIwX1JFRzoKKwkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTT0ZUX0JBUl9BQ0NfRkxBRykgeworCQkJY29uZl9kYXRhID0gQ1M1NTM2X0FDQ19SQU5HRSB8CisJCQkgICAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTzsKKwkJCWxvICY9IH5TT0ZUX0JBUl9BQ0NfRkxBRzsKKwkJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJCX0gZWxzZSB7CisJCQlfcmRtc3IoR0xJVV9NU1JfUkVHKEdMSVVfSU9EX0JNMSksICZoaSwgJmxvKTsKKwkJCWNvbmZfZGF0YSA9IChoaSAmIDB4MDAwMDAwZmYpIDw8IDEyOworCQkJY29uZl9kYXRhIHw9IChsbyAmIDB4ZmZmMDAwMDApID4+IDIwOworCQkJY29uZl9kYXRhIHw9IDB4MDE7CisJCQljb25mX2RhdGEgJj0gfjB4MDI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0FDQ19TVUJfSUQsIENTNTUzNl9TVUJfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfUk9NX0FERFJFU1M6CisJCWNvbmZfZGF0YSA9IFBDSV9FWFBBTlNJT05fUk9NX0JBUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FQQUJJTElUWV9MSVNUOgorCQljb25mX2RhdGEgPSBQQ0lfQ0FQTElTVF9VU0JfUE9JTlRFUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSU5URVJSVVBUX0xJTkU6CisJCWNvbmZfZGF0YSA9CisJCSAgICBDRkdfUENJX0lOVEVSUlVQVF9MSU5FKFBDSV9ERUZBVUxUX1BJTiwgQ1M1NTM2X0FDQ19JTlRSKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbmZfZGF0YTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjljNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogdGhlIEVIQ0kgVmlydHVhbCBTdXBwb3J0IE1vZHVsZSBvZiBBTUQgQ1M1NTM2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKwordm9pZCBwY2lfZWhjaV93cml0ZV9yZWcoaW50IHJlZywgdTMyIHZhbHVlKQoreworCXUzMiBoaSA9IDAsIGxvID0gdmFsdWU7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX0NPTU1BTkQ6CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksICZoaSwgJmxvKTsKKwkJaWYgKHZhbHVlICYgUENJX0NPTU1BTkRfTUFTVEVSKQorCQkJaGkgfD0gUENJX0NPTU1BTkRfTUFTVEVSOworCQllbHNlCisJCQloaSAmPSB+UENJX0NPTU1BTkRfTUFTVEVSOworCisJCWlmICh2YWx1ZSAmIFBDSV9DT01NQU5EX01FTU9SWSkKKwkJCWhpIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJZWxzZQorCQkJaGkgJj0gflBDSV9DT01NQU5EX01FTU9SWTsKKwkJX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9FSENJKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQlpZiAodmFsdWUgJiBQQ0lfU1RBVFVTX1BBUklUWSkgeworCQkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKSB7CisJCQkJbG8gPSAobG8gJiAweDAwMDBmZmZmKSB8IFNCX1BBUkVfRVJSX0ZMQUc7CisJCQkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlpZiAodmFsdWUgPT0gUENJX0JBUl9SQU5HRV9NQVNLKSB7CisJCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCQlsbyB8PSBTT0ZUX0JBUl9FSENJX0ZMQUc7CisJCQlfd3Jtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCBoaSwgbG8pOworCQl9IGVsc2UgaWYgKCh2YWx1ZSAmIDB4MDEpID09IDB4MDApIHsKKwkJCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksIGhpLCBsbyk7CisKKwkJCXZhbHVlICY9IDB4ZmZmZmZmZjA7CisJCQloaSA9IDB4NDAwMDAwMDAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMCkgPj4gMjQpOworCQkJbG8gPSAweDAwMGZmZmZmIHwgKCh2YWx1ZSAmIDB4MDBmZmYwMDApIDw8IDgpOworCQkJX3dybXNyKEdMSVVfTVNSX1JFRyhHTElVX1AyRF9CTTQpLCBoaSwgbG8pOworCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0VIQ0lfTEVHU01JRU5fUkVHOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCWhpICY9IDB4MDAzZjAwMDA7CisJCWhpIHw9ICh2YWx1ZSAmIDB4M2YpIDw8IDE2OworCQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCBoaSwgbG8pOworCQlicmVhazsKKwljYXNlIFBDSV9FSENJX0ZMQURKX1JFRzoKKwkJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9FSENJKSwgJmhpLCAmbG8pOworCQloaSAmPSB+MHgwMDAwM2YwMDsKKwkJaGkgfD0gdmFsdWUgJiAweDAwMDAzZjAwOworCQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCBoaSwgbG8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3UzMiBwY2lfZWhjaV9yZWFkX3JlZyhpbnQgcmVnKQoreworCXUzMiBjb25mX2RhdGEgPSAwOworCXUzMiBoaSwgbG87CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX1ZFTkRPUl9JRDoKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfVkVORE9SX0lEKENTNTUzNl9FSENJX0RFVklDRV9JRCwgQ1M1NTM2X1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX0NPTU1BTkQ6CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksICZoaSwgJmxvKTsKKwkJaWYgKGhpICYgUENJX0NPTU1BTkRfTUFTVEVSKQorCQkJY29uZl9kYXRhIHw9IFBDSV9DT01NQU5EX01BU1RFUjsKKwkJaWYgKGhpICYgUENJX0NPTU1BTkRfTUVNT1JZKQorCQkJY29uZl9kYXRhIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU182Nk1IWjsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfRkFTVF9CQUNLOworCQlfcmRtc3IoU0JfTVNSX1JFRyhTQl9FUlJPUiksICZoaSwgJmxvKTsKKwkJaWYgKGxvICYgU0JfUEFSRV9FUlJfRkxBRykKKwkJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTX1BBUklUWTsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfREVWU0VMX01FRElVTTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0xBU1NfUkVWSVNJT046CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfQ0FQKSwgJmhpLCAmbG8pOworCQljb25mX2RhdGEgPSBsbyAmIDB4MDAwMDAwZmY7CisJCWNvbmZfZGF0YSB8PSAoQ1M1NTM2X0VIQ0lfQ0xBU1NfQ09ERSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FDSEVfTElORV9TSVpFOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9DQUNIRV9MSU5FX1NJWkUoUENJX05PUk1BTF9IRUFERVJfVFlQRSwKKwkJCQkJICAgIFBDSV9OT1JNQUxfTEFURU5DWV9USU1FUik7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCWlmIChsbyAmIFNPRlRfQkFSX0VIQ0lfRkxBRykgeworCQkJY29uZl9kYXRhID0gQ1M1NTM2X0VIQ0lfUkFOR0UgfAorCQkJICAgIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfTUVNT1JZOworCQkJbG8gJj0gflNPRlRfQkFSX0VIQ0lfRkxBRzsKKwkJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJCX0gZWxzZSB7CisJCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCQljb25mX2RhdGEgPSBsbyAmIDB4ZmZmZmYwMDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0VIQ0lfU1VCX0lELCBDUzU1MzZfU1VCX1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX1JPTV9BRERSRVNTOgorCQljb25mX2RhdGEgPSBQQ0lfRVhQQU5TSU9OX1JPTV9CQVI7CisJCWJyZWFrOworCWNhc2UgUENJX0NBUEFCSUxJVFlfTElTVDoKKwkJY29uZl9kYXRhID0gUENJX0NBUExJU1RfVVNCX1BPSU5URVI7CisJCWJyZWFrOworCWNhc2UgUENJX0lOVEVSUlVQVF9MSU5FOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9JTlRFUlJVUFRfTElORShQQ0lfREVGQVVMVF9QSU4sIENTNTUzNl9VU0JfSU5UUik7CisJCWJyZWFrOworCWNhc2UgUENJX0VIQ0lfTEVHU01JRU5fUkVHOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IChoaSAmIDB4MDAzZjAwMDApID4+IDE2OworCQlicmVhazsKKwljYXNlIFBDSV9FSENJX0xFR1NNSVNUU19SRUc6CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gKGhpICYgMHgzZjAwMDAwMCkgPj4gMjQ7CisJCWJyZWFrOworCWNhc2UgUENJX0VIQ0lfRkxBREpfUkVHOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGhpICYgMHgwMDAwM2YwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbmZfZGF0YTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYxNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogdGhlIElERSBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlIG9mIEFNRCBDUzU1MzYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuCisgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGNzNTUzNi9jczU1MzYuaD4KKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2X3BjaS5oPgorCit2b2lkIHBjaV9pZGVfd3JpdGVfcmVnKGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IHZhbHVlOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBDSV9DT01NQU5EOgorCQlfcmRtc3IoR0xJVV9NU1JfUkVHKEdMSVVfUEFFKSwgJmhpLCAmbG8pOworCQlpZiAodmFsdWUgJiBQQ0lfQ09NTUFORF9NQVNURVIpCisJCQlsbyB8PSAoMHgwMyA8PCA0KTsKKwkJZWxzZQorCQkJbG8gJj0gfigweDAzIDw8IDQpOworCQlfd3Jtc3IoR0xJVV9NU1JfUkVHKEdMSVVfUEFFKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQlpZiAodmFsdWUgJiBQQ0lfU1RBVFVTX1BBUklUWSkgeworCQkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKSB7CisJCQkJbG8gPSAobG8gJiAweDAwMDBmZmZmKSB8IFNCX1BBUkVfRVJSX0ZMQUc7CisJCQkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0NBQ0hFX0xJTkVfU0laRToKKwkJdmFsdWUgJj0gMHgwMDAwZmYwMDsKKwkJX3JkbXNyKFNCX01TUl9SRUcoU0JfQ1RSTCksICZoaSwgJmxvKTsKKwkJaGkgJj0gMHhmZmZmZmYwMDsKKwkJaGkgfD0gKHZhbHVlID4+IDgpOworCQlfd3Jtc3IoU0JfTVNSX1JFRyhTQl9DVFJMKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFSNF9SRUc6CisJCWlmICh2YWx1ZSA9PSBQQ0lfQkFSX1JBTkdFX01BU0spIHsKKwkJCV9yZG1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksICZoaSwgJmxvKTsKKwkJCWxvIHw9IFNPRlRfQkFSX0lERV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIGlmICh2YWx1ZSAmIDB4MDEpIHsKKwkJCWxvID0gKHZhbHVlICYgMHhmZmZmZmZmMCkgfCAweDE7CisJCQlfd3Jtc3IoSURFX01TUl9SRUcoSURFX0lPX0JBUiksIGhpLCBsbyk7CisKKwkJCXZhbHVlICY9IDB4ZmZmZmZmZmM7CisJCQloaSA9IDB4NjAwMDAwMDAgfCAoKHZhbHVlICYgMHgwMDBmZjAwMCkgPj4gMTIpOworCQkJbG8gPSAweDAwMGZmZmYwIHwgKCh2YWx1ZSAmIDB4MDAwMDBmZmYpIDw8IDIwKTsKKwkJCV93cm1zcihHTElVX01TUl9SRUcoR0xJVV9JT0RfQk0yKSwgaGksIGxvKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9JREVfQ0ZHX1JFRzoKKwkJaWYgKHZhbHVlID09IENTNTUzNl9JREVfRkxBU0hfU0lHTkFUVVJFKSB7CisJCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9CQUxMX09QVFMpLCAmaGksICZsbyk7CisJCQlsbyB8PSAweDAxOworCQkJX3dybXNyKERJVklMX01TUl9SRUcoRElWSUxfQkFMTF9PUFRTKSwgaGksIGxvKTsKKwkJfSBlbHNlCisJCQlfd3Jtc3IoSURFX01TUl9SRUcoSURFX0NGRyksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX0lERV9EVENfUkVHOgorCQlfd3Jtc3IoSURFX01TUl9SRUcoSURFX0RUQyksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX0lERV9DQVNUX1JFRzoKKwkJX3dybXNyKElERV9NU1JfUkVHKElERV9DQVNUKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSURFX0VUQ19SRUc6CisJCV93cm1zcihJREVfTVNSX1JFRyhJREVfRVRDKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSURFX1BNX1JFRzoKKwkJX3dybXNyKElERV9NU1JfUkVHKElERV9JTlRFUk5BTF9QTSksIGhpLCBsbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordTMyIHBjaV9pZGVfcmVhZF9yZWcoaW50IHJlZykKK3sKKwl1MzIgY29uZl9kYXRhID0gMDsKKwl1MzIgaGksIGxvOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBDSV9WRU5ET1JfSUQ6CisJCWNvbmZfZGF0YSA9CisJCSAgICBDRkdfUENJX1ZFTkRPUl9JRChDUzU1MzZfSURFX0RFVklDRV9JRCwgQ1M1NTM2X1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX0NPTU1BTkQ6CisJCV9yZG1zcihJREVfTVNSX1JFRyhJREVfSU9fQkFSKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiAweGZmZmZmZmYwKQorCQkJY29uZl9kYXRhIHw9IFBDSV9DT01NQU5EX0lPOworCQlfcmRtc3IoR0xJVV9NU1JfUkVHKEdMSVVfUEFFKSwgJmhpLCAmbG8pOworCQlpZiAoKGxvICYgMHgzMCkgPT0gMHgzMCkKKwkJCWNvbmZfZGF0YSB8PSBQQ0lfQ09NTUFORF9NQVNURVI7CisJCWJyZWFrOworCWNhc2UgUENJX1NUQVRVUzoKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfNjZNSFo7CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTX0ZBU1RfQkFDSzsKKwkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCWlmIChsbyAmIFNCX1BBUkVfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19QQVJJVFk7CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTX0RFVlNFTF9NRURJVU07CisJCWJyZWFrOworCWNhc2UgUENJX0NMQVNTX1JFVklTSU9OOgorCQlfcmRtc3IoSURFX01TUl9SRUcoSURFX0NBUCksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG8gJiAweDAwMDAwMGZmOworCQljb25mX2RhdGEgfD0gKENTNTUzNl9JREVfQ0xBU1NfQ09ERSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FDSEVfTElORV9TSVpFOgorCQlfcmRtc3IoU0JfTVNSX1JFRyhTQl9DVFJMKSwgJmhpLCAmbG8pOworCQloaSAmPSAweDAwMDAwMGY4OworCQljb25mX2RhdGEgPSBDRkdfUENJX0NBQ0hFX0xJTkVfU0laRShQQ0lfTk9STUFMX0hFQURFUl9UWVBFLCBoaSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjRfUkVHOgorCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCWlmIChsbyAmIFNPRlRfQkFSX0lERV9GTEFHKSB7CisJCQljb25mX2RhdGEgPSBDUzU1MzZfSURFX1JBTkdFIHwKKwkJCSAgICBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPOworCQkJbG8gJj0gflNPRlRfQkFSX0lERV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIHsKKwkJCV9yZG1zcihJREVfTVNSX1JFRyhJREVfSU9fQkFSKSwgJmhpLCAmbG8pOworCQkJY29uZl9kYXRhID0gbG8gJiAweGZmZmZmZmYwOworCQkJY29uZl9kYXRhIHw9IDB4MDE7CisJCQljb25mX2RhdGEgJj0gfjB4MDI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0lERV9TVUJfSUQsIENTNTUzNl9TVUJfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfUk9NX0FERFJFU1M6CisJCWNvbmZfZGF0YSA9IFBDSV9FWFBBTlNJT05fUk9NX0JBUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FQQUJJTElUWV9MSVNUOgorCQljb25mX2RhdGEgPSBQQ0lfQ0FQTElTVF9QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9JTlRFUlJVUFRfTElORToKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfSU5URVJSVVBUX0xJTkUoUENJX0RFRkFVTFRfUElOLCBDUzU1MzZfSURFX0lOVFIpOworCQlicmVhazsKKwljYXNlIFBDSV9JREVfQ0ZHX1JFRzoKKwkJX3JkbXNyKElERV9NU1JfUkVHKElERV9DRkcpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvOworCQlicmVhazsKKwljYXNlIFBDSV9JREVfRFRDX1JFRzoKKwkJX3JkbXNyKElERV9NU1JfUkVHKElERV9EVEMpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvOworCQlicmVhazsKKwljYXNlIFBDSV9JREVfQ0FTVF9SRUc6CisJCV9yZG1zcihJREVfTVNSX1JFRyhJREVfQ0FTVCksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG87CisJCWJyZWFrOworCWNhc2UgUENJX0lERV9FVENfUkVHOgorCQlfcmRtc3IoSURFX01TUl9SRUcoSURFX0VUQyksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG87CisJY2FzZSBQQ0lfSURFX1BNX1JFRzoKKwkJX3JkbXNyKElERV9NU1JfUkVHKElERV9JTlRFUk5BTF9QTSksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb25mX2RhdGE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmMTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIHRoZSBJU0EgVmlydHVhbCBTdXBwb3J0IE1vZHVsZSBvZiBBTUQgQ1M1NTM2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKworLyogY29tbW9uIHZhcmlhYmxlcyBmb3IgUENJX0lTQV9SRUFEL1dSSVRFX0JBUiAqLworc3RhdGljIGNvbnN0IHUzMiBkaXZpbF9tc3JfcmVnWzZdID0geworCURJVklMX01TUl9SRUcoRElWSUxfTEJBUl9TTUIpLCBESVZJTF9NU1JfUkVHKERJVklMX0xCQVJfR1BJTyksCisJRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX01GR1BUKSwgRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX0lSUSksCisJRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX1BNUyksIERJVklMX01TUl9SRUcoRElWSUxfTEJBUl9BQ1BJKSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc29mdF9iYXJfZmxhZ1s2XSA9IHsKKwlTT0ZUX0JBUl9TTUJfRkxBRywgU09GVF9CQVJfR1BJT19GTEFHLCBTT0ZUX0JBUl9NRkdQVF9GTEFHLAorCVNPRlRfQkFSX0lSUV9GTEFHLCBTT0ZUX0JBUl9QTVNfRkxBRywgU09GVF9CQVJfQUNQSV9GTEFHLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBzYl9tc3JfcmVnWzZdID0geworCVNCX01TUl9SRUcoU0JfUjApLCBTQl9NU1JfUkVHKFNCX1IxKSwgU0JfTVNSX1JFRyhTQl9SMiksCisJU0JfTVNSX1JFRyhTQl9SMyksIFNCX01TUl9SRUcoU0JfUjQpLCBTQl9NU1JfUkVHKFNCX1I1KSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYmFyX3NwYWNlX3JhbmdlWzZdID0geworCUNTNTUzNl9TTUJfUkFOR0UsIENTNTUzNl9HUElPX1JBTkdFLCBDUzU1MzZfTUZHUFRfUkFOR0UsCisJQ1M1NTM2X0lSUV9SQU5HRSwgQ1M1NTM2X1BNU19SQU5HRSwgQ1M1NTM2X0FDUElfUkFOR0UsCit9OworCitzdGF0aWMgY29uc3QgaW50IGJhcl9zcGFjZV9sZW5bNl0gPSB7CisJQ1M1NTM2X1NNQl9MRU5HVEgsIENTNTUzNl9HUElPX0xFTkdUSCwgQ1M1NTM2X01GR1BUX0xFTkdUSCwKKwlDUzU1MzZfSVJRX0xFTkdUSCwgQ1M1NTM2X1BNU19MRU5HVEgsIENTNTUzNl9BQ1BJX0xFTkdUSCwKK307CisKKy8qCisgKiBlbmFibGUgdGhlIGRpdmlsIG1vZHVsZSBiYXIgc3BhY2UuCisgKgorICogRm9yIGFsbCB0aGUgRElWSUwgbW9kdWxlIExCQVIsIHlvdSBzaG91bGQgY29udHJvbCB0aGUgRElWSUwgTEJBUiByZWcKKyAqIGFuZCB0aGUgUkNPTkZ4KDB+NSkgcmVnIHRvIHVzZSB0aGUgbW9kdWxlcy4KKyAqLworc3RhdGljIHZvaWQgZGl2aWxfbGJhcl9lbmFibGUodm9pZCkKK3sKKwl1MzIgaGksIGxvOworCWludCBvZmZzZXQ7CisKKwkvKgorCSAqIFRoZSBESVZJTCBJUlEgaXMgbm90IHVzZWQgeWV0LiBhbmQgbWFrZSB0aGUgUkNPTkYwIHJlc2VydmVkLgorCSAqLworCisJZm9yIChvZmZzZXQgPSBESVZJTF9MQkFSX1NNQjsgb2Zmc2V0IDw9IERJVklMX0xCQVJfUE1TOyBvZmZzZXQrKykgeworCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhvZmZzZXQpLCAmaGksICZsbyk7CisJCWhpIHw9IDB4MDE7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKERJVklMX0xCQVJfU01CKSwgaGksIGxvKTsKKwl9Cit9CisKKy8qCisgKiBkaXNhYmxlIHRoZSBkaXZpbCBtb2R1bGUgYmFyIHNwYWNlLgorICovCitzdGF0aWMgdm9pZCBkaXZpbF9sYmFyX2Rpc2FibGUodm9pZCkKK3sKKwl1MzIgaGksIGxvOworCWludCBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IERJVklMX0xCQVJfU01COyBvZmZzZXQgPD0gRElWSUxfTEJBUl9QTVM7IG9mZnNldCsrKSB7CisJCV9yZG1zcihESVZJTF9NU1JfUkVHKG9mZnNldCksICZoaSwgJmxvKTsKKwkJaGkgJj0gfjB4MDE7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKERJVklMX0xCQVJfU01CKSwgaGksIGxvKTsKKwl9Cit9CisKKy8qCisgKiBCQVIgd3JpdGU6IHdyaXRlIHZhbHVlIHRvIHRoZSBuIEJBUgorICovCisKK3ZvaWQgcGNpX2lzYV93cml0ZV9iYXIoaW50IG4sIHUzMiB2YWx1ZSkKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IHZhbHVlOworCisJaWYgKHZhbHVlID09IFBDSV9CQVJfUkFOR0VfTUFTSykgeworCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCWxvIHw9IHNvZnRfYmFyX2ZsYWdbbl07CisJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJfSBlbHNlIGlmICh2YWx1ZSAmIDB4MDEpIHsKKwkJLyogTkFUSVZFIHJlZyAqLworCQloaSA9IDB4MDAwMGYwMDE7CisJCWxvICY9IGJhcl9zcGFjZV9yYW5nZVtuXTsKKwkJX3dybXNyKGRpdmlsX21zcl9yZWdbbl0sIGhpLCBsbyk7CisKKwkJLyogUkNPTkZ4IGlzIDRieXRlcyBpbiB1bml0cyBmb3IgSS9PIHNwYWNlICovCisJCWhpID0gKCh2YWx1ZSAmIDB4MDAwZmZmZmMpIDw8IDEyKSB8CisJCSAgICAoKGJhcl9zcGFjZV9sZW5bbl0gLSA0KSA8PCAxMikgfCAweDAxOworCQlsbyA9ICgodmFsdWUgJiAweDAwMGZmZmZjKSA8PCAxMikgfCAweDAxOworCQlfd3Jtc3Ioc2JfbXNyX3JlZ1tuXSwgaGksIGxvKTsKKwl9Cit9CisKKy8qCisgKiBCQVIgcmVhZDogcmVhZCB0aGUgbiBCQVIKKyAqLworCit1MzIgcGNpX2lzYV9yZWFkX2JhcihpbnQgbikKK3sKKwl1MzIgY29uZl9kYXRhID0gMDsKKwl1MzIgaGksIGxvOworCisJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCWlmIChsbyAmIHNvZnRfYmFyX2ZsYWdbbl0pIHsKKwkJY29uZl9kYXRhID0gYmFyX3NwYWNlX3JhbmdlW25dIHwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTzsKKwkJbG8gJj0gfnNvZnRfYmFyX2ZsYWdbbl07CisJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJfSBlbHNlIHsKKwkJX3JkbXNyKGRpdmlsX21zcl9yZWdbbl0sICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG8gJiBiYXJfc3BhY2VfcmFuZ2Vbbl07CisJCWNvbmZfZGF0YSB8PSAweDAxOworCQljb25mX2RhdGEgJj0gfjB4MDI7CisJfQorCXJldHVybiBjb25mX2RhdGE7Cit9CisKKy8qCisgKiBpc2Ffd3JpdGU6IElTQSB3cml0ZSB0cmFuc2ZlcgorICoKKyAqIFdlIGFzc3VtZSB0aGF0IHRoaXMgaXMgbm90IGEgYnVzIG1hc3RlciB0cmFuc2Zlci4KKyAqLwordm9pZCBwY2lfaXNhX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsdWUpCit7CisJdTMyIGhpID0gMCwgbG8gPSB2YWx1ZTsKKwl1MzIgdGVtcDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJaWYgKHZhbHVlICYgUENJX0NPTU1BTkRfSU8pCisJCQlkaXZpbF9sYmFyX2VuYWJsZSgpOworCQllbHNlCisJCQlkaXZpbF9sYmFyX2Rpc2FibGUoKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQlfcmRtc3IoU0JfTVNSX1JFRyhTQl9FUlJPUiksICZoaSwgJmxvKTsKKwkJdGVtcCA9IGxvICYgMHgwMDAwZmZmZjsKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCkgJiYKKwkJICAgIChsbyAmIFNCX1RBU19FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9UQVNfRVJSX0ZMQUc7CisKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCkgJiYKKwkJICAgIChsbyAmIFNCX1RBUl9FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9UQVJfRVJSX0ZMQUc7CisKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkKKwkJICAgICYmIChsbyAmIFNCX01BUl9FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9NQVJfRVJSX0ZMQUc7CisKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZKQorCQkgICAgJiYgKGxvICYgU0JfUEFSRV9FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9QQVJFX0VSUl9GTEFHOworCisJCWxvID0gdGVtcDsKKwkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQlicmVhazsKKwljYXNlIFBDSV9DQUNIRV9MSU5FX1NJWkU6CisJCXZhbHVlICY9IDB4MDAwMGZmMDA7CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0NUUkwpLCAmaGksICZsbyk7CisJCWhpICY9IDB4ZmZmZmZmMDA7CisJCWhpIHw9ICh2YWx1ZSA+PiA4KTsKKwkJX3dybXNyKFNCX01TUl9SRUcoU0JfQ1RSTCksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigwLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjFfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigxLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjJfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigyLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjNfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigzLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjRfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2Jhcig0LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjVfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2Jhcig1LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX1VBUlQxX0lOVF9SRUc6CisJCV9yZG1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0hJR0gpLCAmaGksICZsbyk7CisJCS8qIGRpc2FibGUgdWFydDEgaW50ZXJydXB0IGluIFBJQyAqLworCQlsbyAmPSB+KDB4ZiA8PCAyNCk7CisJCWlmICh2YWx1ZSkJLyogZW5hYmxlIHVhcnQxIGludGVycnVwdCBpbiBQSUMgKi8KKwkJCWxvIHw9IChDUzU1MzZfVUFSVDFfSU5UUiA8PCAyNCk7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0hJR0gpLCBoaSwgbG8pOworCQlicmVhazsKKwljYXNlIFBDSV9VQVJUMl9JTlRfUkVHOgorCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhQSUNfWVNFTF9ISUdIKSwgJmhpLCAmbG8pOworCQkvKiBkaXNhYmxlIHVhcnQyIGludGVycnVwdCBpbiBQSUMgKi8KKwkJbG8gJj0gfigweGYgPDwgMjgpOworCQlpZiAodmFsdWUpCS8qIGVuYWJsZSB1YXJ0MiBpbnRlcnJ1cHQgaW4gUElDICovCisJCQlsbyB8PSAoQ1M1NTM2X1VBUlQyX0lOVFIgPDwgMjgpOworCQlfd3Jtc3IoRElWSUxfTVNSX1JFRyhQSUNfWVNFTF9ISUdIKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSVNBX0ZJWFVQX1JFRzoKKwkJaWYgKHZhbHVlKSB7CisJCQkvKiBlbmFibGUgdGhlIFRBUkdFVCBBQk9SVC9NQVNURVIgQUJPUlQgZXRjLiAqLworCQkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCQlsbyB8PSAweDAwMDAwMDYzOworCQkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQl9CisKKwlkZWZhdWx0OgorCQkvKiBBTEwgT1RIRVIgUENJIENPTkZJRyBTUEFDRSBIRUFERVIgSVMgTk9UIElNUExFTUVOVEVELiAqLworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBpc2FfcmVhZDogSVNBIHJlYWQgdHJhbnNmZXJzCisgKgorICogV2UgYXNzdW1lIHRoYXQgdGhpcyBpcyBub3QgYSBidXMgbWFzdGVyIHRyYW5zZmVyLgorICovCit1MzIgcGNpX2lzYV9yZWFkX3JlZyhpbnQgcmVnKQoreworCXUzMiBjb25mX2RhdGEgPSAwOworCXUzMiBoaSwgbG87CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX1ZFTkRPUl9JRDoKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfVkVORE9SX0lEKENTNTUzNl9JU0FfREVWSUNFX0lELCBDUzU1MzZfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJLyogd2UganVzdCBjaGVjayB0aGUgZmlyc3QgTEJBUiBmb3IgdGhlIElPIGVuYWJsZSBiaXQsICovCisJCS8qIG1heWJlIHdlIHNob3VsZCBjaGFuZ2VkIGxhdGVyLiAqLworCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX1NNQiksICZoaSwgJmxvKTsKKwkJaWYgKGhpICYgMHgwMSkKKwkJCWNvbmZfZGF0YSB8PSBQQ0lfQ09NTUFORF9JTzsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU182Nk1IWjsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfREVWU0VMX01FRElVTTsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfRkFTVF9CQUNLOworCisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTQl9UQVNfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUOworCQlpZiAobG8gJiBTQl9UQVJfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUOworCQlpZiAobG8gJiBTQl9NQVJfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUOworCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKQorCQkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19SRVZJU0lPTjoKKwkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX0NISVBfUkVWX0lEKSwgJmhpLCAmbG8pOworCQljb25mX2RhdGEgPSBsbyAmIDB4MDAwMDAwZmY7CisJCWNvbmZfZGF0YSB8PSAoQ1M1NTM2X0lTQV9DTEFTU19DT0RFIDw8IDgpOworCQlicmVhazsKKwljYXNlIFBDSV9DQUNIRV9MSU5FX1NJWkU6CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0NUUkwpLCAmaGksICZsbyk7CisJCWhpICY9IDB4MDAwMDAwZjg7CisJCWNvbmZfZGF0YSA9IENGR19QQ0lfQ0FDSEVfTElORV9TSVpFKFBDSV9CUklER0VfSEVBREVSX1RZUEUsIGhpKTsKKwkJYnJlYWs7CisJCS8qCisJCSAqIHdlIG9ubHkgdXNlIHRoZSBMQkFSIG9mIERJVklMLCBubyBSQ09ORiB1c2VkLgorCQkgKiBhbGwgb2YgdGhlbSBhcmUgSU8gc3BhY2UuCisJCSAqLworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlyZXR1cm4gcGNpX2lzYV9yZWFkX2JhcigwKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFSMV9SRUc6CisJCXJldHVybiBwY2lfaXNhX3JlYWRfYmFyKDEpOworCQlicmVhazsKKwljYXNlIFBDSV9CQVIyX1JFRzoKKwkJcmV0dXJuIHBjaV9pc2FfcmVhZF9iYXIoMik7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjNfUkVHOgorCQlicmVhazsKKwljYXNlIFBDSV9CQVI0X1JFRzoKKwkJcmV0dXJuIHBjaV9pc2FfcmVhZF9iYXIoNCk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjVfUkVHOgorCQlyZXR1cm4gcGNpX2lzYV9yZWFkX2Jhcig1KTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0lTQV9TVUJfSUQsIENTNTUzNl9TVUJfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfUk9NX0FERFJFU1M6CisJCWNvbmZfZGF0YSA9IFBDSV9FWFBBTlNJT05fUk9NX0JBUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FQQUJJTElUWV9MSVNUOgorCQljb25mX2RhdGEgPSBQQ0lfQ0FQTElTVF9QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9JTlRFUlJVUFRfTElORToKKwkJLyogbm8gaW50ZXJydXB0IHVzZWQgaGVyZSAqLworCQljb25mX2RhdGEgPSBDRkdfUENJX0lOVEVSUlVQVF9MSU5FKDB4MDAsIDB4MDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29uZl9kYXRhOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I0NGRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDUzU1MzYgR2VuZXJhbCB0aW1lciBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBBdXRob3I6IFlhbmh1YSwgeWFuaEBsZW1vdGUuY29tCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IHpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBSZWZlcmVuY2U6IEFNRCBHZW9kZShUTSkgQ1M1NTM2IENvbXBhbmlvbiBEZXZpY2UgRGF0YSBCb29rCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2X21mZ3B0Lmg+CisKK0RFRklORV9TUElOTE9DSyhtZmdwdF9sb2NrKTsKK0VYUE9SVF9TWU1CT0wobWZncHRfbG9jayk7CisKK3N0YXRpYyB1MzIgbWZncHRfYmFzZTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIE1GR1BUIHRpbWVyLgorICoKKyAqIFRoaXMgaXMgYWxzbyBjYWxsZWQgYWZ0ZXIgcmVzdW1lIHRvIGJyaW5nIHRoZSBNRkdQVCBpbnRvIG9wZXJhdGlvbiBhZ2Fpbi4KKyAqLworCisvKiBkaXNhYmxlIGNvdW50ZXIgKi8KK3ZvaWQgZGlzYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKQoreworCW91dHcoaW53KE1GR1BUMF9TRVRVUCkgJiAweDdmZmYsIE1GR1BUMF9TRVRVUCk7Cit9CitFWFBPUlRfU1lNQk9MKGRpc2FibGVfbWZncHQwX2NvdW50ZXIpOworCisvKiBlbmFibGUgY291bnRlciwgY29tcGFyYXRvcjIgdG8gZXZlbnQgbW9kZSwgMTQuMzE4TUh6IGNsb2NrICovCit2b2lkIGVuYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKQoreworCW91dHcoMHhlMzEwLCBNRkdQVDBfU0VUVVApOworfQorRVhQT1JUX1NZTUJPTChlbmFibGVfbWZncHQwX2NvdW50ZXIpOworCitzdGF0aWMgdm9pZCBpbml0X21mZ3B0X3RpbWVyKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3Bpbl9sb2NrKCZtZmdwdF9sb2NrKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCW91dHcoQ09NUEFSRSwgTUZHUFQwX0NNUDIpOwkvKiBzZXQgY29tcGFyYXRvcjIgKi8KKwkJb3V0dygwLCBNRkdQVDBfQ05UKTsJLyogc2V0IGNvdW50ZXIgdG8gMCAqLworCQllbmFibGVfbWZncHQwX2NvdW50ZXIoKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCQlpZiAoZXZ0LT5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDIHx8CisJCSAgICBldnQtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCkKKwkJCWRpc2FibGVfbWZncHQwX2NvdW50ZXIoKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCS8qIFRoZSBvbmVzaG90IG1vZGUgaGF2ZSB2ZXJ5IGhpZ2ggZGV2aWF0aW9uLCBOb3QgdXNlIGl0ISAqLworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZtZmdwdF9sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbWZncHRfY2xvY2tldmVudCA9IHsKKwkubmFtZSA9ICJtZmdwdCIsCisJLmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsCisJLnNldF9tb2RlID0gaW5pdF9tZmdwdF90aW1lciwKKwkuaXJxID0gQ1M1NTM2X01GR1BUX0lOVFIsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgYmFzZWhpOworCisJLyoKKwkgKiBnZXQgTUZHUFQgYmFzZSBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBkbyBub3QgcmVtb3ZlIG1lLCBpdCdzIG5lZWQgZm9yIHRoZSB2YWx1ZSBvZiBtZmdwdF9iYXNlIGlzCisJICogdmFyaWFibGUKKwkgKi8KKwlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX01GR1BUKSwgJmJhc2VoaSwgJm1mZ3B0X2Jhc2UpOworCisJLyogYWNrICovCisJb3V0dyhpbncoTUZHUFQwX1NFVFVQKSB8IDB4NDAwMCwgTUZHUFQwX1NFVFVQKTsKKworCW1mZ3B0X2Nsb2NrZXZlbnQuZXZlbnRfaGFuZGxlcigmbWZncHRfY2xvY2tldmVudCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTUgPSB7CisJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAorCS5uYW1lID0gInRpbWVyIgorfTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNvbnZlcnNpb24gZmFjdG9yIGFuZCB0aGUgbWluL21heCBkZWx0YXMgb2YgdGhlIGNsb2NrIGV2ZW50CisgKiBzdHJ1Y3R1cmUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBzb3VyY2Ugd2l0aCB0aGUgZnJhbWV3b3JrLgorICovCit2b2lkIF9faW5pdCBzZXR1cF9tZmdwdDBfdGltZXIodm9pZCkKK3sKKwl1MzIgYmFzZWhpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkID0gJm1mZ3B0X2Nsb2NrZXZlbnQ7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWNkLT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOworCWNsb2NrZXZlbnRfc2V0X2Nsb2NrKGNkLCBNRkdQVF9USUNLX1JBVEUpOworCWNkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZiwgY2QpOworCWNkLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgY2QpOworCisJLyogRW5hYmxlIE1GR1BUMCBDb21wYXJhdG9yIDIgT3V0cHV0IHRvIHRoZSBJbnRlcnJ1cHQgTWFwcGVyICovCisJX3dybXNyKERJVklMX01TUl9SRUcoTUZHUFRfSVJRKSwgMCwgMHgxMDApOworCisJLyogRW5hYmxlIEludGVycnVwdCBHYXRlIDUgKi8KKwlfd3Jtc3IoRElWSUxfTVNSX1JFRyhQSUNfWlNFTF9MT1cpLCAwLCAweDUwMDAwKTsKKworCS8qIGdldCBNRkdQVCBiYXNlIGFkZHJlc3MgKi8KKwlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX01GR1BUKSwgJmJhc2VoaSwgJm1mZ3B0X2Jhc2UpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKKworCXNldHVwX2lycShDUzU1MzZfTUZHUFRfSU5UUiwgJmlycTUpOworfQorCisvKgorICogU2luY2UgdGhlIE1GR1BUIG92ZXJmbG93cyBldmVyeSB0aWNrLCBpdHMgbm90IHZlcnkgdXNlZnVsCisgKiB0byBqdXN0IHJlYWQgYnkgaXRzZWxmLiBTbyB1c2UgamlmZmllcyB0byBlbXVsYXRlIGEgZnJlZQorICogcnVubmluZyBjb3VudGVyOgorICovCitzdGF0aWMgY3ljbGVfdCBtZmdwdF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisJdTMyIGppZnM7CisJc3RhdGljIGludCBvbGRfY291bnQ7CisJc3RhdGljIHUzMiBvbGRfamlmczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZmdwdF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBBbHRob3VnaCBvdXIgY2FsbGVyIG1heSBoYXZlIHRoZSByZWFkIHNpZGUgb2YgeHRpbWVfbG9jaywKKwkgKiB0aGlzIGlzIG5vdyBhIHNlcWxvY2ssIGFuZCB3ZSBhcmUgY2hlYXRpbmcgaW4gdGhpcyByb3V0aW5lCisJICogYnkgaGF2aW5nIHNpZGUgZWZmZWN0cyBvbiBzdGF0ZSB0aGF0IHdlIGNhbm5vdCB1bmRvIGlmCisJICogdGhlcmUgaXMgYSBjb2xsaXNpb24gb24gdGhlIHNlcWxvY2sgYW5kIG91ciBjYWxsZXIgaGFzIHRvCisJICogcmV0cnkuICAoTmFtZWx5LCBvbGRfamlmcyBhbmQgb2xkX2NvdW50LikgIFNvIHdlIG11c3QgdHJlYXQKKwkgKiBqaWZmaWVzIGFzIHZvbGF0aWxlIGRlc3BpdGUgdGhlIGxvY2suICBXZSByZWFkIGppZmZpZXMKKwkgKiBiZWZvcmUgbGF0Y2hpbmcgdGhlIHRpbWVyIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGFsdGhvdWdoCisJICogdGhlIGppZmZpZXMgdmFsdWUgbWlnaHQgYmUgb2xkZXIgdGhhbiB0aGUgY291bnQgKHRoYXQgaXMsCisJICogdGhlIGNvdW50ZXIgbWF5IHVuZGVyZmxvdyBiZXR3ZWVuIHRoZSBsYXN0IHBvaW50IHdoZXJlCisJICogamlmZmllcyB3YXMgaW5jcmVtZW50ZWQgYW5kIHRoZSBwb2ludCB3aGVyZSB3ZSBsYXRjaCB0aGUKKwkgKiBjb3VudCksIGl0IGNhbm5vdCBiZSBuZXdlci4KKwkgKi8KKwlqaWZzID0gamlmZmllczsKKwkvKiByZWFkIHRoZSBjb3VudCAqLworCWNvdW50ID0gaW53KE1GR1BUMF9DTlQpOworCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIGZvciBjb3VudCB0byBhcHBlYXIgdG8gZ28gdGhlIHdyb25nIHdheSBmb3IgdGhpcworCSAqIHJlYXNvbjoKKwkgKgorCSAqICBUaGUgdGltZXIgY291bnRlciB1bmRlcmZsb3dzLCBidXQgd2UgaGF2ZW4ndCBoYW5kbGVkIHRoZSByZXN1bHRpbmcKKwkgKiAgaW50ZXJydXB0IGFuZCBpbmNyZW1lbnRlZCBqaWZmaWVzIHlldC4KKwkgKgorCSAqIFByZXZpb3VzIGF0dGVtcHRzIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBpbnRlbGxpZ2VudGx5IHdlcmUgYnVnZ3ksIHNvCisJICogd2UganVzdCBkbyB0aGUgc2ltcGxlIHRoaW5nIG5vdy4KKwkgKi8KKwlpZiAoY291bnQgPCBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKKwkJY291bnQgPSBvbGRfY291bnQ7CisKKwlvbGRfY291bnQgPSBjb3VudDsKKwlvbGRfamlmcyA9IGppZnM7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZmdwdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gKGN5Y2xlX3QpIChqaWZzICogQ09NUEFSRSkgKyBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9tZmdwdCA9IHsKKwkubmFtZSA9ICJtZmdwdCIsCisJLnJhdGluZyA9IDEyMCwgLyogRnVuY3Rpb25hbCBmb3IgcmVhbCB1c2UsIGJ1dCBub3QgZGVzaXJlZCAqLworCS5yZWFkID0gbWZncHRfcmVhZCwKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5tdWx0ID0gMCwKKwkuc2hpZnQgPSAyMiwKK307CisKK2ludCBfX2luaXQgaW5pdF9tZmdwdF9jbG9ja3NvdXJjZSh2b2lkKQoreworCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkJLyogTUZHUFQgZG9lcyBub3Qgc2NhbGUhICovCisJCXJldHVybiAwOworCisJY2xvY2tzb3VyY2VfbWZncHQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoTUZHUFRfVElDS19SQVRFLCAyMik7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9tZmdwdCk7Cit9CisKK2FyY2hfaW5pdGNhbGwoaW5pdF9tZmdwdF9jbG9ja3NvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmRiMDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIHRoZSBPSENJIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUgb2YgQU1EIENTNTUzNgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4KKyAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNi5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfcGNpLmg+CisKK3ZvaWQgcGNpX29oY2lfd3JpdGVfcmVnKGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IHZhbHVlOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBDSV9DT01NQU5EOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX09IQ0kpLCAmaGksICZsbyk7CisJCWlmICh2YWx1ZSAmIFBDSV9DT01NQU5EX01BU1RFUikKKwkJCWhpIHw9IFBDSV9DT01NQU5EX01BU1RFUjsKKwkJZWxzZQorCQkJaGkgJj0gflBDSV9DT01NQU5EX01BU1RFUjsKKworCQlpZiAodmFsdWUgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCisJCQloaSB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7CisJCWVsc2UKKwkJCWhpICY9IH5QQ0lfQ09NTUFORF9NRU1PUlk7CisJCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfT0hDSSksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX1NUQVRVUzoKKwkJaWYgKHZhbHVlICYgUENJX1NUQVRVU19QQVJJVFkpIHsKKwkJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQkJaWYgKGxvICYgU0JfUEFSRV9FUlJfRkxBRykgeworCQkJCWxvID0gKGxvICYgMHgwMDAwZmZmZikgfCBTQl9QQVJFX0VSUl9GTEFHOworCQkJCV93cm1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgaGksIGxvKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9CQVIwX1JFRzoKKwkJaWYgKHZhbHVlID09IFBDSV9CQVJfUkFOR0VfTUFTSykgeworCQkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCQkJbG8gfD0gU09GVF9CQVJfT0hDSV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIGlmICgodmFsdWUgJiAweDAxKSA9PSAweDAwKSB7CisJCQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX09IQ0kpLCBoaSwgbG8pOworCisJCQl2YWx1ZSAmPSAweGZmZmZmZmYwOworCQkJaGkgPSAweDQwMDAwMDAwIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKKwkJCWxvID0gMHgwMDBmZmZmZiB8ICgodmFsdWUgJiAweDAwZmZmMDAwKSA8PCA4KTsKKwkJCV93cm1zcihHTElVX01TUl9SRUcoR0xJVV9QMkRfQk0zKSwgaGksIGxvKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9PSENJX0lOVF9SRUc6CisJCV9yZG1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0xPVyksICZoaSwgJmxvKTsKKwkJbG8gJj0gfigweGYgPDwgUElDX1lTRUxfTE9XX1VTQl9TSElGVCk7CisJCWlmICh2YWx1ZSkJLyogZW5hYmxlIGFsbCB0aGUgdXNiIGludGVycnVwdCBpbiBQSUMgKi8KKwkJCWxvIHw9IChDUzU1MzZfVVNCX0lOVFIgPDwgUElDX1lTRUxfTE9XX1VTQl9TSElGVCk7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0xPVyksIGhpLCBsbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordTMyIHBjaV9vaGNpX3JlYWRfcmVnKGludCByZWcpCit7CisJdTMyIGNvbmZfZGF0YSA9IDA7CisJdTMyIGhpLCBsbzsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ0lfVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X09IQ0lfREVWSUNFX0lELCBDUzU1MzZfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9PSENJKSwgJmhpLCAmbG8pOworCQlpZiAoaGkgJiBQQ0lfQ09NTUFORF9NQVNURVIpCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfTUFTVEVSOworCQlpZiAoaGkgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfTUVNT1JZOworCQlicmVhazsKKwljYXNlIFBDSV9TVEFUVVM6CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTXzY2TUhaOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19GQVNUX0JBQ0s7CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKQorCQkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfUEFSSVRZOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19ERVZTRUxfTUVESVVNOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19SRVZJU0lPTjoKKwkJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9DQVApLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvICYgMHgwMDAwMDBmZjsKKwkJY29uZl9kYXRhIHw9IChDUzU1MzZfT0hDSV9DTEFTU19DT0RFIDw8IDgpOworCQlicmVhazsKKwljYXNlIFBDSV9DQUNIRV9MSU5FX1NJWkU6CisJCWNvbmZfZGF0YSA9CisJCSAgICBDRkdfUENJX0NBQ0hFX0xJTkVfU0laRShQQ0lfTk9STUFMX0hFQURFUl9UWVBFLAorCQkJCQkgICAgUENJX05PUk1BTF9MQVRFTkNZX1RJTUVSKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFSMF9SRUc6CisJCV9yZG1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksICZoaSwgJmxvKTsKKwkJaWYgKGxvICYgU09GVF9CQVJfT0hDSV9GTEFHKSB7CisJCQljb25mX2RhdGEgPSBDUzU1MzZfT0hDSV9SQU5HRSB8CisJCQkgICAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlk7CisJCQlsbyAmPSB+U09GVF9CQVJfT0hDSV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIHsKKwkJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfT0hDSSksICZoaSwgJmxvKTsKKwkJCWNvbmZfZGF0YSA9IGxvICYgMHhmZmZmZmYwMDsKKwkJCWNvbmZfZGF0YSAmPSB+MHgwMDAwMDAwZjsJLyogMzJiaXQgbWVtICovCisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X09IQ0lfU1VCX0lELCBDUzU1MzZfU1VCX1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX1JPTV9BRERSRVNTOgorCQljb25mX2RhdGEgPSBQQ0lfRVhQQU5TSU9OX1JPTV9CQVI7CisJCWJyZWFrOworCWNhc2UgUENJX0NBUEFCSUxJVFlfTElTVDoKKwkJY29uZl9kYXRhID0gUENJX0NBUExJU1RfVVNCX1BPSU5URVI7CisJCWJyZWFrOworCWNhc2UgUENJX0lOVEVSUlVQVF9MSU5FOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9JTlRFUlJVUFRfTElORShQQ0lfREVGQVVMVF9QSU4sIENTNTUzNl9VU0JfSU5UUik7CisJCWJyZWFrOworCWNhc2UgUENJX09IQ0lfSU5UX1JFRzoKKwkJX3JkbXNyKERJVklMX01TUl9SRUcoUElDX1lTRUxfTE9XKSwgJmhpLCAmbG8pOworCQlpZiAoKGxvICYgMHgwMDAwMGYwMCkgPT0gQ1M1NTM2X1VTQl9JTlRSKQorCQkJY29uZl9kYXRhID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbmZfZGF0YTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjNmM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiByZWFkL3dyaXRlIG9wZXJhdGlvbiB0byB0aGUgUENJIGNvbmZpZyBzcGFjZSBvZiBDUzU1MzYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuCisgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJdGhlIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKSBmb3IgdmlydHVsaXppbmcgdGhlIFBDSQorICoJY29uZmlndXJlIHNwYWNlIGFyZSBkZWZpbmVkIGluIGNzNTUzNl9tb2R1bGVuYW1lLmMgcmVzcGVjdGl2ZWx5LAorICoKKyAqCWFmdGVyIHRoaXMgdmlydHVsaXppbmcsIHVzZXIgY2FuIGFjY2VzcyB0aGUgUENJIGNvbmZpZ3VyZSBzcGFjZQorICoJZGlyZWN0bHkgYXMgYSBub3JtYWwgbXVsdGktZnVuY3Rpb24gUENJIGRldmljZSB3aGljaCBmb2xsb3dzCisgKgl0aGUgUENJLTIuMiBzcGVjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfdnNtLmg+CisKK2VudW0geworCUNTNTUzNl9GVU5DX1NUQVJUID0gLTEsCisJQ1M1NTM2X0lTQV9GVU5DLAorCXJlc2VydmVkX2Z1bmMsCisJQ1M1NTM2X0lERV9GVU5DLAorCUNTNTUzNl9BQ0NfRlVOQywKKwlDUzU1MzZfT0hDSV9GVU5DLAorCUNTNTUzNl9FSENJX0ZVTkMsCisJQ1M1NTM2X0ZVTkNfRU5ELAorfTsKKworc3RhdGljIGNvbnN0IGNzNTUzNl9wY2lfdnNtX3dyaXRlIHZzbV9jb25mX3dyaXRlW10gPSB7CisJW0NTNTUzNl9JU0FfRlVOQ10JcGNpX2lzYV93cml0ZV9yZWcsCisJW3Jlc2VydmVkX2Z1bmNdCQlOVUxMLAorCVtDUzU1MzZfSURFX0ZVTkNdCXBjaV9pZGVfd3JpdGVfcmVnLAorCVtDUzU1MzZfQUNDX0ZVTkNdCXBjaV9hY2Nfd3JpdGVfcmVnLAorCVtDUzU1MzZfT0hDSV9GVU5DXQlwY2lfb2hjaV93cml0ZV9yZWcsCisJW0NTNTUzNl9FSENJX0ZVTkNdCXBjaV9laGNpX3dyaXRlX3JlZywKK307CisKK3N0YXRpYyBjb25zdCBjczU1MzZfcGNpX3ZzbV9yZWFkIHZzbV9jb25mX3JlYWRbXSA9IHsKKwlbQ1M1NTM2X0lTQV9GVU5DXQlwY2lfaXNhX3JlYWRfcmVnLAorCVtyZXNlcnZlZF9mdW5jXQkJTlVMTCwKKwlbQ1M1NTM2X0lERV9GVU5DXQlwY2lfaWRlX3JlYWRfcmVnLAorCVtDUzU1MzZfQUNDX0ZVTkNdCXBjaV9hY2NfcmVhZF9yZWcsCisJW0NTNTUzNl9PSENJX0ZVTkNdCXBjaV9vaGNpX3JlYWRfcmVnLAorCVtDUzU1MzZfRUhDSV9GVU5DXQlwY2lfZWhjaV9yZWFkX3JlZywKK307CisKKy8qCisgKiB3cml0ZSB0byBQQ0kgY29uZmlnIHNwYWNlIGFuZCB0cmFuc2ZlciBpdCB0byBNU1Igd3JpdGUuCisgKi8KK3ZvaWQgY3M1NTM2X3BjaV9jb25mX3dyaXRlNChpbnQgZnVuY3Rpb24sIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwlpZiAoKGZ1bmN0aW9uIDw9IENTNTUzNl9GVU5DX1NUQVJUKSB8fCAoZnVuY3Rpb24gPj0gQ1M1NTM2X0ZVTkNfRU5EKSkKKwkJcmV0dXJuOworCWlmICgocmVnIDwgMCkgfHwgKHJlZyA+IDB4MTAwKSB8fCAoKHJlZyAmIDB4MDMpICE9IDApKQorCQlyZXR1cm47CisKKwlpZiAodnNtX2NvbmZfd3JpdGVbZnVuY3Rpb25dICE9IE5VTEwpCisJCXZzbV9jb25mX3dyaXRlW2Z1bmN0aW9uXShyZWcsIHZhbHVlKTsKK30KKworLyoKKyAqIHJlYWQgUENJIGNvbmZpZyBzcGFjZSBhbmQgdHJhbnNmZXIgaXQgdG8gTVNSIGFjY2Vzcy4KKyAqLwordTMyIGNzNTUzNl9wY2lfY29uZl9yZWFkNChpbnQgZnVuY3Rpb24sIGludCByZWcpCit7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKChmdW5jdGlvbiA8PSBDUzU1MzZfRlVOQ19TVEFSVCkgfHwgKGZ1bmN0aW9uID49IENTNTUzNl9GVU5DX0VORCkpCisJCXJldHVybiAwOworCWlmICgocmVnIDwgMCkgfHwgKChyZWcgJiAweDAzKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHJlZyA+IDB4MTAwKQorCQlyZXR1cm4gMHhmZmZmZmZmZjsKKworCWlmICh2c21fY29uZl9yZWFkW2Z1bmN0aW9uXSAhPSBOVUxMKQorCQlkYXRhID0gdnNtX2NvbmZfcmVhZFtmdW5jdGlvbl0ocmVnKTsKKworCXJldHVybiBkYXRhOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKaW5kZXggYmM3M2VkYy4uMjNlN2E4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCkBAIC0xLDcgKzEsNyBAQAogLyogIGVhcmx5IHByaW50ayBzdXBwb3J0CiAgKgogICogIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IExlbW90ZSBJbmMuCiAgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTIsMjYgKzEyLDI5IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KLSNpbmNsdWRlIDxtYWNoaW5lLmg+CiAKICNkZWZpbmUgUE9SVChiYXNlLCBvZmZzZXQpICh1OCAqKShiYXNlICsgb2Zmc2V0KQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZXJpYWxfaW4ocGh5c19hZGRyX3QgYmFzZSwgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9pbih1bnNpZ25lZCBjaGFyICpiYXNlLCBpbnQgb2Zmc2V0KQogewogCXJldHVybiByZWFkYihQT1JUKGJhc2UsIG9mZnNldCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX291dChwaHlzX2FkZHJfdCBiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX291dCh1bnNpZ25lZCBjaGFyICpiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJd3JpdGViKHZhbHVlLCBQT1JUKGJhc2UsIG9mZnNldCkpOwogfQogCiB2b2lkIHByb21fcHV0Y2hhcihjaGFyIGMpCiB7Ci0JcGh5c19hZGRyX3QgdWFydF9iYXNlID0KLQkJKHBoeXNfYWRkcl90KSBpb3JlbWFwX25vY2FjaGUoTE9PTkdTT05fVUFSVF9CQVNFLCA4KTsKKwlpbnQgdGltZW91dDsKKwl1bnNpZ25lZCBjaGFyICp1YXJ0X2Jhc2U7CiAKLQl3aGlsZSAoKHNlcmlhbF9pbih1YXJ0X2Jhc2UsIFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RIUkUpID09IDApCisJdWFydF9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilfbG9vbmdzb25fdWFydF9iYXNlOworCXRpbWVvdXQgPSAxMDI0OworCisJd2hpbGUgKCgoc2VyaWFsX2luKHVhcnRfYmFzZSwgVUFSVF9MU1IpICYgVUFSVF9MU1JfVEhSRSkgPT0gMCkgJiYKKwkJCSh0aW1lb3V0LS0gPiAwKSkKIAkJOwogCiAJc2VyaWFsX291dCh1YXJ0X2Jhc2UsIFVBUlRfVFgsIGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKaW5kZXggYjllZjUwMy4uMTk2ZDk0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCkBAIC0xNywxMSArMTcsMTQgQEAKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogCiB1bnNpZ25lZCBsb25nIGJ1c19jbG9jaywgY3B1X2Nsb2NrX2ZyZXE7CitFWFBPUlRfU1lNQk9MKGNwdV9jbG9ja19mcmVxKTsKIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKIC8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYwppbmRleCAzYWJlOTI3Li5hMmFiZDkzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KICAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTAsMTkgKzEwLDI4IEBACiAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLQogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKKy8qIExvb25nc29uIENQVSBhZGRyZXNzIHdpbmRvd3MgY29uZmlnIHNwYWNlIGJhc2UgYWRkcmVzcyAqLwordW5zaWduZWQgbG9uZyBfX21heWJlX3VudXNlZCBfbG9vbmdzb25fYWRkcndpbmNmZ19iYXNlOworCiB2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKIHsKLSAgICAvKiBpbml0IGJhc2UgYWRkcmVzcyBvZiBpbyBzcGFjZSAqLworCS8qIGluaXQgYmFzZSBhZGRyZXNzIG9mIGlvIHNwYWNlICovCiAJc2V0X2lvX3BvcnRfYmFzZSgodW5zaWduZWQgbG9uZykKLQkJaW9yZW1hcChCT05JVE9fUENJSU9fQkFTRSwgQk9OSVRPX1BDSUlPX1NJWkUpKTsKKwkJaW9yZW1hcChMT09OR1NPTl9QQ0lJT19CQVNFLCBMT09OR1NPTl9QQ0lJT19TSVpFKSk7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcKKwlfbG9vbmdzb25fYWRkcndpbmNmZ19iYXNlID0gKHVuc2lnbmVkIGxvbmcpCisJCWlvcmVtYXAoTE9PTkdTT05fQUREUldJTkNGR19CQVNFLCBMT09OR1NPTl9BRERSV0lOQ0ZHX1NJWkUpOworI2VuZGlmCiAKIAlwcm9tX2luaXRfY21kbGluZSgpOwogCXByb21faW5pdF9lbnYoKTsKIAlwcm9tX2luaXRfbWVtb3J5KCk7CisKKwkvKmluaXQgdGhlIHVhcnQgYmFzZSBhZGRyZXNzICovCisJcHJvbV9pbml0X3VhcnRfYmFzZSgpOwogfQogCiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCmluZGV4IGIzMmI0YTMuLjIwZTczMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwpAQCAtMjAsMjEgKzIwLDIxIEBACiAJaW50IGk7CiAKIAkvKiB3b3JrYXJvdW5kIHRoZSBJTyBkbWEgcHJvYmxlbTogbGV0IGNwdSBsb29waW5nIHRvIGFsbG93IERNQSBmaW5pc2ggKi8KLQlpbnRfc3RhdHVzID0gQk9OSVRPX0lOVElTUjsKKwlpbnRfc3RhdHVzID0gTE9PTkdTT05fSU5USVNSOwogCWlmIChpbnRfc3RhdHVzICYgKDEgPDwgMTApKSB7CiAJCXdoaWxlIChpbnRfc3RhdHVzICYgKDEgPDwgMTApKSB7CiAJCQl1ZGVsYXkoMSk7Ci0JCQlpbnRfc3RhdHVzID0gQk9OSVRPX0lOVElTUjsKKwkJCWludF9zdGF0dXMgPSBMT09OR1NPTl9JTlRJU1I7CiAJCX0KIAl9CiAKIAkvKiBHZXQgcGVuZGluZyBzb3VyY2VzLCBtYXNrZWQgYnkgY3VycmVudCBlbmFibGVzICovCi0JaW50X3N0YXR1cyA9IEJPTklUT19JTlRJU1IgJiBCT05JVE9fSU5URU47CisJaW50X3N0YXR1cyA9IExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOOwogCiAJaWYgKGludF9zdGF0dXMgIT0gMCkgewogCQlpID0gX19mZnMoaW50X3N0YXR1cyk7CiAJCWludF9zdGF0dXMgJj0gfigxIDw8IGkpOwotCQlkb19JUlEoQk9OSVRPX0lSUV9CQVNFICsgaSk7CisJCWRvX0lSUShMT09OR1NPTl9JUlFfQkFTRSArIGkpOwogCX0KIH0KIApAQCAtNjAsMTMgKzYwLDEzIEBACiAJc2V0X2lycV90cmlnZ2VyX21vZGUoKTsKIAogCS8qIG5vIHN0ZWVyICovCi0JQk9OSVRPX0lOVFNURUVSID0gMDsKKwlMT09OR1NPTl9JTlRTVEVFUiA9IDA7CiAKIAkvKgogCSAqIE1hc2sgb3V0IGFsbCBpbnRlcnJ1cHQgYnkgd3JpdGluZyAiMSIgdG8gYWxsIGJpdCBwb3NpdGlvbiBpbgogCSAqIHRoZSBpbnRlcnJ1cHQgcmVzZXQgcmVnLgogCSAqLwotCUJPTklUT19JTlRFTkNMUiA9IH4wOworCUxPT05HU09OX0lOVEVOQ0xSID0gfjA7CiAKIAkvKiBtYWNoaW5lIHNwZWNpZmljIGlycSBpbml0ICovCiAJbWFjaF9pbml0X2lycSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCmluZGV4IDdiMzQ4MjQuLjBlZDUyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKQEAgLTE1LDYgKzE1LDkgQEAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogI2luY2x1ZGUgPG1hY2hpbmUuaD4KIAorLyogcGxlYXNlIGVuc3VyZSB0aGUgbGVuZ3RoIG9mIHRoZSBtYWNodHlwZSBzdHJpbmcgaXMgbGVzcyB0aGFuIDUwICovCisjZGVmaW5lIE1BQ0hUWVBFX0xFTiA1MAorCiBzdGF0aWMgY29uc3QgY2hhciAqc3lzdGVtX3R5cGVzW10gPSB7CiAJW01BQ0hfTE9PTkdTT05fVU5LTk9XTl0gICAgICAgICAidW5rbm93biBsb29uZ3NvbiBtYWNoaW5lIiwKIAlbTUFDSF9MRU1PVEVfRkwyRV0gICAgICAgICAgICAgICJsZW1vdGUtZnVsb29uZy0yZS1ib3giLApAQCAtMjIsMjkgKzI1LDM1IEBACiAJW01BQ0hfTEVNT1RFX01MMkY3XSAgICAgICAgICAgICAibGVtb3RlLW1lbmdsb29uZy0yZi03aW5jaGVzIiwKIAlbTUFDSF9MRU1PVEVfWUwyRjg5XSAgICAgICAgICAgICJsZW1vdGUteWVlbG9vbmctMmYtOC45aW5jaGVzIiwKIAlbTUFDSF9ERVhYT05fR0RJVU0yRjEwXSAgICAgICAgICJkZXh4b24tZ2lkdW0tMmYtMTBpbmNoZXMiLAorCVtNQUNIX0xFTU9URV9OQVNdCQkibGVtb3RlLW5hcy0yZiIsCisJW01BQ0hfTEVNT1RFX0xMMkZdICAgICAgICAgICAgICAibGVtb3RlLWx5bmxvb25nLTJmIiwKIAlbTUFDSF9MT09OR1NPTl9FTkRdICAgICAgICAgICAgIE5VTEwsCiB9OwogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKLQlpZiAobWlwc19tYWNodHlwZSA9PSBNQUNIX1VOS05PV04pCi0JCW1pcHNfbWFjaHR5cGUgPSBMT09OR1NPTl9NQUNIVFlQRTsKLQogCXJldHVybiBzeXN0ZW1fdHlwZXNbbWlwc19tYWNodHlwZV07CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IG1hY2h0eXBlX3NldHVwKGNoYXIgKnN0cikKK3ZvaWQgX19pbml0IHByb21faW5pdF9tYWNodHlwZSh2b2lkKQogeworCWNoYXIgKnAsIHN0cltNQUNIVFlQRV9MRU5dOwogCWludCBtYWNodHlwZSA9IE1BQ0hfTEVNT1RFX0ZMMkU7CiAKLQlpZiAoIXN0cikKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWlwc19tYWNodHlwZSA9IExPT05HU09OX01BQ0hUWVBFOworCisJcCA9IHN0cnN0cihhcmNzX2NtZGxpbmUsICJtYWNodHlwZT0iKTsKKwlpZiAoIXApCisJCXJldHVybjsKKwlwICs9IHN0cmxlbigibWFjaHR5cGU9Iik7CisJc3RybmNweShzdHIsIHAsIE1BQ0hUWVBFX0xFTik7CisJcCA9IHN0cnN0cihzdHIsICIgIik7CisJaWYgKHApCisJCSpwID0gJ1wwJzsKIAogCWZvciAoOyBzeXN0ZW1fdHlwZXNbbWFjaHR5cGVdOyBtYWNodHlwZSsrKQogCQlpZiAoc3Ryc3RyKHN5c3RlbV90eXBlc1ttYWNodHlwZV0sIHN0cikpIHsKIAkJCW1pcHNfbWFjaHR5cGUgPSBtYWNodHlwZTsKIAkJCWJyZWFrOwogCQl9Ci0JcmV0dXJuIDA7CiB9Ci1fX3NldHVwKCJtYWNodHlwZT0iLCBtYWNodHlwZV9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYwppbmRleCBlOTRlZjE1Li5jZWFjZDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKQEAgLTEyLDE1ICsxMiw0MCBAQAogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KICNpbmNsdWRlIDxtZW0uaD4KKyNpbmNsdWRlIDxwY2kuaD4KIAogdm9pZCBfX2luaXQgcHJvbV9pbml0X21lbW9yeSh2b2lkKQogewogICAgIGFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgKG1lbXNpemUgPDwgMjApLCBCT09UX01FTV9SQU0pOworCisgICAgYWRkX21lbW9yeV9yZWdpb24obWVtc2l6ZSA8PCAyMCwgTE9PTkdTT05fUENJX01FTV9TVEFSVCAtIChtZW1zaXplIDw8CisJCQkgICAgMjApLCBCT09UX01FTV9SRVNFUlZFRCk7CisjaWZkZWYgQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHCisJeworCQlpbnQgYml0OworCisJCWJpdCA9IGZscyhtZW1zaXplICsgaGlnaG1lbXNpemUpOworCQlpZiAoYml0ICE9IGZmcyhtZW1zaXplICsgaGlnaG1lbXNpemUpKQorCQkJYml0ICs9IDIwOworCQllbHNlCisJCQliaXQgPSBiaXQgKyAyMCAtIDE7CisKKwkJLyogc2V0IGNwdSB3aW5kb3czIHRvIG1hcCBDUFUgdG8gRERSOiAyRyAtPiAyRyAqLworCQlMT09OR1NPTl9BRERSV0lOX0NQVVRPRERSKEFERFJXSU5fV0lOMywgMHg4MDAwMDAwMHVsLAorCQkJCQkgIDB4ODAwMDAwMDB1bCwgKDEgPDwgYml0KSk7CisJCW1taW93YigpOworCX0KKyNlbmRpZiAvKiAhQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHICovCisKICNpZmRlZiBDT05GSUdfNjRCSVQKLSAgICBpZiAoaGlnaG1lbXNpemUgPiAwKQotCWFkZF9tZW1vcnlfcmVnaW9uKExPT05HU09OX0hJR0hNRU1fU1RBUlQsCi0JCWhpZ2htZW1zaXplIDw8IDIwLCBCT09UX01FTV9SQU0pOwotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCWlmIChoaWdobWVtc2l6ZSA+IDApCisJCWFkZF9tZW1vcnlfcmVnaW9uKExPT05HU09OX0hJR0hNRU1fU1RBUlQsCisJCQkJICBoaWdobWVtc2l6ZSA8PCAyMCwgQk9PVF9NRU1fUkFNKTsKKworCWFkZF9tZW1vcnlfcmVnaW9uKExPT05HU09OX1BDSV9NRU1fRU5EICsgMSwgTE9PTkdTT05fSElHSE1FTV9TVEFSVCAtCisJCQkgIExPT05HU09OX1BDSV9NRU1fRU5EIC0gMSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCisjZW5kaWYgLyogIUNPTkZJR182NEJJVCAqLwogfQogCiAvKiBvdmVycmlkZSBvZiBhcmNoL21pcHMvbW0vY2FjaGUuYzogX191bmNhY2hlZF9hY2Nlc3MgKi8KQEAgLTMzLDMgKzU4LDYxIEBACiAJCSgoYWRkciA+PSBMT09OR1NPTl9NTUlPX01FTV9TVEFSVCkgJiYKIAkJIChhZGRyIDwgTE9PTkdTT05fTU1JT19NRU1fRU5EKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX1VOQ0FDSEVEX0FDQ0VMRVJBVEVECisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVjYV9zdGFydCwgdWNhX2VuZDsKKworcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBmbiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kID0gb2Zmc2V0ICsgc2l6ZTsKKworCWlmIChfX3VuY2FjaGVkX2FjY2VzcyhmaWxlLCBvZmZzZXQpKSB7CisJCWlmICgoKHVjYV9zdGFydCAmJiBvZmZzZXQpID49IHVjYV9zdGFydCkgJiYKKwkJICAgIChlbmQgPD0gdWNhX2VuZCkpCisJCQlyZXR1cm4gX19wZ3Byb3QoKHBncHJvdF92YWwodm1hX3Byb3QpICYKKwkJCQkJIH5fQ0FDSEVfTUFTSykgfAorCQkJCQlfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQpOworCQllbHNlCisJCQlyZXR1cm4gcGdwcm90X25vbmNhY2hlZCh2bWFfcHJvdCk7CisJfQorCXJldHVybiB2bWFfcHJvdDsKK30KKworc3RhdGljIGludCBfX2luaXQgZmluZF92Z2FfbWVtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGlkeDsKKworCWlmICh1Y2Ffc3RhcnQpCisJCXJldHVybiAwOworCisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKKwkJaWYgKChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkgeworCQkJZm9yIChpZHggPSAwOyBpZHggPCBQQ0lfTlVNX1JFU09VUkNFUzsgaWR4KyspIHsKKwkJCQlyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwkJCQlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJCQkJdWNhX3N0YXJ0ID0gci0+c3RhcnQ7CisJCQkJCXVjYV9lbmQgPSByLT5lbmQ7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGZpbmRfdmdhX21lbV9pbml0KTsKKyNlbmRpZiAvKiAhQ09ORklHX0NQVV9TVVBQT1JUU19VTkNBQ0hFRF9BQ0NFTEVSQVRFRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGNpLmMKaW5kZXggYTNhNGFiZi4uMzFkOGM1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BjaS5jCkBAIC0yNyw3ICsyNyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyICBsb29uZ3Nvbl9wY2lfY29udHJvbGxlciA9IHsKLQkucGNpX29wcyAgICAgICAgPSAmYm9uaXRvNjRfcGNpX29wcywKKwkucGNpX29wcyAgICAgICAgPSAmbG9vbmdzb25fcGNpX29wcywKIAkuaW9fcmVzb3VyY2UgICAgPSAmbG9vbmdzb25fcGNpX2lvX3Jlc291cmNlLAogCS5tZW1fcmVzb3VyY2UgICA9ICZsb29uZ3Nvbl9wY2lfbWVtX3Jlc291cmNlLAogCS5tZW1fb2Zmc2V0ICAgICA9IDB4MDAwMDAwMDBVTCwKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCSAqIHBjaW1hcDogUENJX01BUDIgIFBDSV9NZW1fTG8yIFBDSV9NZW1fTG8xIFBDSV9NZW1fTG8wCiAJICogCSAgICAgWzwyR10gICBbMzg0TSw0NDhNXSBbMzIwTSwzODRNXSBbME0sNjRNXQogCSAqLwotCUJPTklUT19QQ0lNQVAgPSBCT05JVE9fUENJTUFQX1BDSU1BUF8yIHwKLQkJQk9OSVRPX1BDSU1BUF9XSU4oMiwgQk9OSVRPX1BDSUxPMl9CQVNFKSB8Ci0JCUJPTklUT19QQ0lNQVBfV0lOKDEsIEJPTklUT19QQ0lMTzFfQkFTRSkgfAotCQlCT05JVE9fUENJTUFQX1dJTigwLCAwKTsKKwlMT09OR1NPTl9QQ0lNQVAgPSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQXzIgfAorCQlMT09OR1NPTl9QQ0lNQVBfV0lOKDIsIExPT05HU09OX1BDSUxPMl9CQVNFKSB8CisJCUxPT05HU09OX1BDSU1BUF9XSU4oMSwgTE9PTkdTT05fUENJTE8xX0JBU0UpIHwKKwkJTE9PTkdTT05fUENJTUFQX1dJTigwLCAwKTsKIAogCS8qCiAJICogUENJLURNQSB0byBsb2NhbCBtYXBwaW5nOiBbMkcsMkcrMjU2TV0gLT4gWzBNLDI1Nk1dCiAJICovCi0JQk9OSVRPX1BDSUJBU0UwID0gMHg4MDAwMDAwMHVsOyAgIC8qIGJhc2U6IDJHIC0+IG1tYXA6IDBNICovCisJTE9PTkdTT05fUENJQkFTRTAgPSAweDgwMDAwMDAwdWw7ICAgLyogYmFzZTogMkcgLT4gbW1hcDogME0gKi8KIAkvKiBzaXplOiAyNTZNLCBidXJzdCB0cmFuc21pc3Npb24sIHByZS1mZXRjaCBlbmFibGUsIDY0Yml0ICovCiAJTE9PTkdTT05fUENJX0hJVDBfU0VMX0wgPSAweGMwMDAwMDBjdWw7CiAJTE9PTkdTT05fUENJX0hJVDBfU0VMX0ggPSAweGZmZmZmZmZmdWw7CkBAIC02Nyw2ICs2NywxNCBAQAogCS8qIGNhbiBub3QgY2hhbmdlIGdudCB0byBicmVhayBwY2kgdHJhbnNmZXIgd2hlbiBkZXZpY2UncyBnbnQgbm90CiAJZGVhc3NlcnQgZm9yIHNvbWUgYnJva2VuIGRldmljZSAqLwogCUxPT05HU09OX1BYQVJCX0NGRyA9IDB4MDBmZTAxMDV1bDsKKworI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRworCS8qCisJICogc2V0IGNwdSBhZGRyIHdpbmRvdzIgdG8gbWFwIENQVSBhZGRyZXNzIHNwYWNlIHRvIFBDSSBhZGRyZXNzIHNwYWNlCisJICovCisJTE9PTkdTT05fQUREUldJTl9DUFVUT1BDSShBRERSV0lOX1dJTjIsIExPT05HU09OX0NQVV9NRU1fU1JDLAorCQlMT09OR1NPTl9QQ0lfTUVNX0RTVCwgTU1BUF9DUFVUT1BDSV9TSVpFKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgxNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsb29uZ3NvbjJfY3B1ZnJlcV9kZXZpY2UgPSB7CisJLm5hbWUgPSAibG9vbmdzb24yX2NwdWZyZXEiLAorCS5pZCA9IC0xLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbG9vbmdzb24yX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKworCS8qIE9ubHkgMkYgcmV2aXNpb24gYW5kIGl0J3Mgc3VjY2Vzc29ycyBzdXBwb3J0IENQVUZyZXEgKi8KKwlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIFBSSURfUkVWX01BU0spID49IFBSSURfUkVWX0xPT05HU09OMkYpCisJCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxvb25nc29uMl9jcHVmcmVxX2RldmljZSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworYXJjaF9pbml0Y2FsbChsb29uZ3NvbjJfY3B1ZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI1ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogbG9vbmdzb24tc3BlY2lmaWMgc3VzcGVuZCBzdXBwb3J0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19tYXliZV91bnVzZWQgY2FjaGVkX21hc3Rlcl9tYXNrOwkvKiBpODI1OUEgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19tYXliZV91bnVzZWQgY2FjaGVkX3NsYXZlX21hc2s7CitzdGF0aWMgdW5zaWduZWQgaW50IF9fbWF5YmVfdW51c2VkIGNhY2hlZF9ib25pdG9faXJxX21hc2s7IC8qIGJvbml0byAqLworCit2b2lkIGFyY2hfc3VzcGVuZF9kaXNhYmxlX2lycXModm9pZCkKK3sKKwkvKiBkaXNhYmxlIGFsbCBtaXBzIGV2ZW50cyAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKyNpZmRlZiBDT05GSUdfSTgyNTkKKwkvKiBkaXNhYmxlIGFsbCBldmVudHMgb2YgaTgyNTlBICovCisJY2FjaGVkX3NsYXZlX21hc2sgPSBpbmIoUElDX1NMQVZFX0lNUik7CisJY2FjaGVkX21hc3Rlcl9tYXNrID0gaW5iKFBJQ19NQVNURVJfSU1SKTsKKworCW91dGIoMHhmZiwgUElDX1NMQVZFX0lNUik7CisJaW5iKFBJQ19TTEFWRV9JTVIpOworCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOworCWluYihQSUNfTUFTVEVSX0lNUik7CisjZW5kaWYKKwkvKiBkaXNhYmxlIGFsbCBldmVudHMgb2YgYm9uaXRvICovCisJY2FjaGVkX2Jvbml0b19pcnFfbWFzayA9IExPT05HU09OX0lOVEVOOworCUxPT05HU09OX0lOVEVOQ0xSID0gMHhmZmZmOworCSh2b2lkKUxPT05HU09OX0lOVEVOQ0xSOworfQorCit2b2lkIGFyY2hfc3VzcGVuZF9lbmFibGVfaXJxcyh2b2lkKQoreworCS8qIGVuYWJsZSBhbGwgbWlwcyBldmVudHMgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisjaWZkZWYgQ09ORklHX0k4MjU5CisJLyogb25seSBlbmFibGUgdGhlIGNhY2hlZCBldmVudHMgb2YgaTgyNTlBICovCisJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CisJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsKKyNlbmRpZgorCS8qIGVuYWJsZSBhbGwgY2FjaGVkIGV2ZW50cyBvZiBib25pdG8gKi8KKwlMT09OR1NPTl9JTlRFTlNFVCA9IGNhY2hlZF9ib25pdG9faXJxX21hc2s7CisJKHZvaWQpTE9PTkdTT05fSU5URU5TRVQ7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYm9hcmQtc3BlY2lmaWMgZXZlbnRzIGZvciB3YWtpbmcgdXAgbG9vbmdzb24gZnJvbSB3YWl0IG1vZGUKKyAqLwordm9pZCBfX3dlYWsgc2V0dXBfd2FrZXVwX2V2ZW50cyh2b2lkKQoreworfQorCisvKgorICogQ2hlY2sgd2FrZXVwIGV2ZW50cworICovCitpbnQgX193ZWFrIHdha2V1cF9sb29uZ3Nvbih2b2lkKQoreworCXJldHVybiAxOworfQorCisvKgorICogSWYgdGhlIGV2ZW50cyBhcmUgcmVhbGx5IHdoYXQgd2Ugd2FudCB0byB3YWtldXAgdGhlIENQVSwgd2FrZSBpdCB1cAorICogb3RoZXJ3aXNlIHB1dCB0aGUgQ1BVIGFzbGVlcCBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgd2FpdF9mb3Jfd2FrZXVwX2V2ZW50cyh2b2lkKQoreworCXdoaWxlICghd2FrZXVwX2xvb25nc29uKCkpCisJCUxPT05HU09OX0NISVBDRkcwICY9IH4weDc7Cit9CisKKy8qCisgKiBTdG9wIGFsbCBwZXJmIGNvdW50ZXJzCisgKgorICogJDI0IGlzIHRoZSBjb250cm9sIHJlZ2lzdGVyIG9mIExvb25nc29uIHBlcmYgY291bnRlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9wZXJmX2NvdW50ZXJzKHZvaWQpCit7CisJX193cml0ZV82NGJpdF9jMF9yZWdpc3RlcigkMjQsIDAsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGxvb25nc29uX3N1c3BlbmRfZW50ZXIodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZF9jcHVfZnJlcTsKKworCS8qIHNldHVwIHdha2V1cCBldmVudHMgdmlhIGVuYWJsaW5nIHRoZSBJUlFzICovCisJc2V0dXBfd2FrZXVwX2V2ZW50cygpOworCisJc3RvcF9wZXJmX2NvdW50ZXJzKCk7CisKKwljYWNoZWRfY3B1X2ZyZXEgPSBMT09OR1NPTl9DSElQQ0ZHMDsKKworCS8qIFB1dCBDUFUgaW50byB3YWl0IG1vZGUgKi8KKwlMT09OR1NPTl9DSElQQ0ZHMCAmPSB+MHg3OworCisJLyogd2FpdCBmb3IgdGhlIGdpdmVuIGV2ZW50cyB0byB3YWtldXAgY3B1IGZyb20gd2FpdCBtb2RlICovCisJd2FpdF9mb3Jfd2FrZXVwX2V2ZW50cygpOworCisJTE9PTkdTT05fQ0hJUENGRzAgPSBjYWNoZWRfY3B1X2ZyZXE7CisJbW1pb3diKCk7Cit9CisKK3ZvaWQgX193ZWFrIG1hY2hfc3VzcGVuZCh2b2lkKQoreworfQorCit2b2lkIF9fd2VhayBtYWNoX3Jlc3VtZSh2b2lkKQoreworfQorCitzdGF0aWMgaW50IGxvb25nc29uX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwltYWNoX3N1c3BlbmQoKTsKKworCS8qIHByb2Nlc3NvciBzcGVjaWZpYyBzdXNwZW5kICovCisJbG9vbmdzb25fc3VzcGVuZF9lbnRlcigpOworCisJbWFjaF9yZXN1bWUoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvb25nc29uX3BtX3ZhbGlkX3N0YXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX09OOgorCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGxvb25nc29uX3BtX29wcyA9IHsKKwkudmFsaWQJPSBsb29uZ3Nvbl9wbV92YWxpZF9zdGF0ZSwKKwkuZW50ZXIJPSBsb29uZ3Nvbl9wbV9lbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxvb25nc29uX3BtX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX3NldF9vcHMoJmxvb25nc29uX3BtX29wcyk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwobG9vbmdzb25fcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKaW5kZXggOTdlOTE4Mi4uZDU3ZjE3MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYwpAQCAtMjIsNyArMjIsNyBAQAogCW1hY2hfcHJlcGFyZV9yZWJvb3QoKTsKIAogCS8qIHJlYm9vdCB2aWEganVtcGluZyB0byBib290IGJhc2UgYWRkcmVzcyAqLwotCSgodm9pZCAoKikodm9pZCkpaW9yZW1hcF9ub2NhY2hlKEJPTklUT19CT09UX0JBU0UsIDQpKSAoKTsKKwkoKHZvaWQgKCopKHZvaWQpKWlvcmVtYXBfbm9jYWNoZShMT09OR1NPTl9CT09UX0JBU0UsIDQpKSAoKTsKIH0KIAogc3RhdGljIHZvaWQgbG9vbmdzb25faGFsdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNjZhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBZYW4gaHVhICh5YW5odWFAbGVtb3RlLmNvbSkKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gKHd1empAbGVtb3RlLmNvbSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSA8bG9vbmdzb24uaD4KKyNpbmNsdWRlIDxtYWNoaW5lLmg+CisKKyNkZWZpbmUgUE9SVChpbnQpCQkJXAorewkJCQkJCQkJXAorCS5pcnEJCT0gaW50LAkJCQkJXAorCS51YXJ0Y2xrCT0gMTg0MzIwMCwJCQkJXAorCS5pb3R5cGUJCT0gVVBJT19QT1JULAkJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAorCS5yZWdzaGlmdAk9IDAsCQkJCQlcCit9CisKKyNkZWZpbmUgUE9SVF9NKGludCkJCQkJXAorewkJCQkJCQkJXAorCS5pcnEJCT0gTUlQU19DUFVfSVJRX0JBU0UgKyAoaW50KSwJCVwKKwkudWFydGNsawk9IDM2ODY0MDAsCQkJCVwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCisJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopTlVMTCwJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAorCS5yZWdzaGlmdAk9IDAsCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgdWFydDgyNTBfZGF0YVtdWzJdID0geworCVtNQUNIX0xPT05HU09OX1VOS05PV05dICAgICAgICAge30sCisJW01BQ0hfTEVNT1RFX0ZMMkVdICAgICAgICAgICAgICB7UE9SVCg0KSwge30gfSwKKwlbTUFDSF9MRU1PVEVfRkwyRl0gICAgICAgICAgICAgIHtQT1JUKDMpLCB7fSB9LAorCVtNQUNIX0xFTU9URV9NTDJGN10gICAgICAgICAgICAge1BPUlRfTSgzKSwge30gfSwKKwlbTUFDSF9MRU1PVEVfWUwyRjg5XSAgICAgICAgICAgIHtQT1JUX00oMyksIHt9IH0sCisJW01BQ0hfREVYWE9OX0dESVVNMkYxMF0gICAgICAgICB7UE9SVF9NKDMpLCB7fSB9LAorCVtNQUNIX0xFTU9URV9OQVNdICAgICAgICAgICAgICAge1BPUlRfTSgzKSwge30gfSwKKwlbTUFDSF9MRU1PVEVfTEwyRl0gICAgICAgICAgICAgIHtQT1JUKDMpLCB7fSB9LAorCVtNQUNIX0xPT05HU09OX0VORF0gICAgICAgICAgICAge30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1YXJ0ODI1MF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2VyaWFsX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGlvdHlwZTsKKworCWlvdHlwZSA9IHVhcnQ4MjUwX2RhdGFbbWlwc19tYWNodHlwZV1bMF0uaW90eXBlOworCisJaWYgKFVQSU9fTUVNID09IGlvdHlwZSkKKwkJdWFydDgyNTBfZGF0YVttaXBzX21hY2h0eXBlXVswXS5tZW1iYXNlID0KKwkJCSh2b2lkIF9faW9tZW0gKilfbG9vbmdzb25fdWFydF9iYXNlOworCWVsc2UgaWYgKFVQSU9fUE9SVCA9PSBpb3R5cGUpCisJCXVhcnQ4MjUwX2RhdGFbbWlwc19tYWNodHlwZV1bMF0uaW9iYXNlID0KKwkJICAgIGxvb25nc29uX3VhcnRfYmFzZSAtIExPT05HU09OX1BDSUlPX0JBU0U7CisKKwl1YXJ0ODI1MF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSB1YXJ0ODI1MF9kYXRhW21pcHNfbWFjaHR5cGVdOworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWFydDgyNTBfZGV2aWNlKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNlcmlhbF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKaW5kZXggNmUwOGM4Mi4uMzVmMGI2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKQEAgLTE0LDExICsxNCwxNCBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfbWZncHQuaD4KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKIAkvKiBzZXR1cCBtaXBzIHI0ayB0aW1lciAqLwogCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNwdV9jbG9ja19mcmVxIC8gMjsKKworCXNldHVwX21mZ3B0MF90aW1lcigpOwogfQogCiB2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmZjY2YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCisvKiBpb3JlbWFwcGVkICovCit1bnNpZ25lZCBsb25nIF9sb29uZ3Nvbl91YXJ0X2Jhc2U7CitFWFBPUlRfU1lNQk9MKF9sb29uZ3Nvbl91YXJ0X2Jhc2UpOworLyogcmF3ICovCit1bnNpZ25lZCBsb25nIGxvb25nc29uX3VhcnRfYmFzZTsKK0VYUE9SVF9TWU1CT0wobG9vbmdzb25fdWFydF9iYXNlKTsKKwordm9pZCBwcm9tX2luaXRfbG9vbmdzb25fdWFydF9iYXNlKHZvaWQpCit7CisJc3dpdGNoIChtaXBzX21hY2h0eXBlKSB7CisJY2FzZSBNQUNIX0xFTU9URV9GTDJFOgorCQlsb29uZ3Nvbl91YXJ0X2Jhc2UgPSBMT09OR1NPTl9QQ0lJT19CQVNFICsgMHgzZjg7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfRkwyRjoKKwljYXNlIE1BQ0hfTEVNT1RFX0xMMkY6CisJCWxvb25nc29uX3VhcnRfYmFzZSA9IExPT05HU09OX1BDSUlPX0JBU0UgKyAweDJmODsKKwkJYnJlYWs7CisJY2FzZSBNQUNIX0xFTU9URV9NTDJGNzoKKwljYXNlIE1BQ0hfTEVNT1RFX1lMMkY4OToKKwljYXNlIE1BQ0hfREVYWE9OX0dESVVNMkYxMDoKKwljYXNlIE1BQ0hfTEVNT1RFX05BUzoKKwlkZWZhdWx0OgorCQkvKiBUaGUgQ1BVIHByb3ZpZGVkIHNlcmlhbCBwb3J0ICovCisJCWxvb25nc29uX3VhcnRfYmFzZSA9IExPT05HU09OX0xJTzFfQkFTRSArIDB4M2Y4OworCQlicmVhazsKKwl9CisKKwlfbG9vbmdzb25fdWFydF9iYXNlID0KKwkJKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGxvb25nc29uX3VhcnRfYmFzZSwgOCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jCmluZGV4IDc4ODhjZjYuLjMyMGU5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jCkBAIC00Nyw4ICs0Nyw4IEBACiB2b2lkIF9faW5pdCBzZXRfaXJxX3RyaWdnZXJfbW9kZSh2b2lkKQogewogCS8qIG1vc3QgYm9uaXRvIGlycSBzaG91bGQgYmUgbGV2ZWwgdHJpZ2dlcmVkICovCi0JQk9OSVRPX0lOVEVER0UgPSBCT05JVE9fSUNVX1NZU1RFTUVSUiB8IEJPTklUT19JQ1VfTUFTVEVSRVJSIHwKLQkgICAgQk9OSVRPX0lDVV9SRVRSWUVSUiB8IEJPTklUT19JQ1VfTUJPWEVTOworCUxPT05HU09OX0lOVEVER0UgPSBMT09OR1NPTl9JQ1VfU1lTVEVNRVJSIHwgTE9PTkdTT05fSUNVX01BU1RFUkVSUiB8CisJICAgIExPT05HU09OX0lDVV9SRVRSWUVSUiB8IExPT05HU09OX0lDVV9NQk9YRVM7CiB9CiAKIHZvaWQgX19pbml0IG1hY2hfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCmluZGV4IDY3N2ZlMTguLmZjMTZjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYwpAQCAtMTQsOCArMTQsOCBAQAogCiB2b2lkIG1hY2hfcHJlcGFyZV9yZWJvb3Qodm9pZCkKIHsKLQlCT05JVE9fQk9OR0VOQ0ZHICY9IH4oMSA8PCAyKTsKLQlCT05JVE9fQk9OR0VOQ0ZHIHw9ICgxIDw8IDIpOworCUxPT05HU09OX0dFTkNGRyAmPSB+KDEgPDwgMik7CisJTE9PTkdTT05fR0VOQ0ZHIHw9ICgxIDw8IDIpOwogfQogCiB2b2lkIG1hY2hfcHJlcGFyZV9zaHV0ZG93bih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NGIyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgbGVtb3RlIGxvb25nc29uMmYgZmFtaWx5IG1hY2hpbmVzCisjCisKK29iai15ICs9IGlycS5vIHJlc2V0Lm8gZWNfa2IzMzEwYi5vCisKKyMKKyMgU3VzcGVuZCBTdXBwb3J0CisjCisKK29iai0kKENPTkZJR19MT09OR1NPTl9TVVNQRU5EKSArPSBwbS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkODQxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIEJhc2ljIEtCMzMxMEIgRW1iZWRkZWQgQ29udHJvbGxlciBzdXBwb3J0IGZvciB0aGUgWWVlTG9vbmcgMkYgbmV0Ym9vaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTGVtb3RlIEluYy4KKyAqICBBdXRob3I6IGxpdWpsIDxsaXVqbEBsZW1vdGUuY29tPiwgMjAwOC0wNC0yMAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImVjX2tiMzMxMGIuaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpbmRleF9hY2Nlc3NfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBvcnRfYWNjZXNzX2xvY2spOworCit1bnNpZ25lZCBjaGFyIGVjX3JlYWQodW5zaWduZWQgc2hvcnQgYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5kZXhfYWNjZXNzX2xvY2ssIGZsYWdzKTsKKwlvdXRiKChhZGRyICYgMHhmZjAwKSA+PiA4LCBFQ19JT19QT1JUX0hJR0gpOworCW91dGIoKGFkZHIgJiAweDAwZmYpLCBFQ19JT19QT1JUX0xPVyk7CisJdmFsdWUgPSBpbmIoRUNfSU9fUE9SVF9EQVRBKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmRleF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZWNfcmVhZCk7CisKK3ZvaWQgZWNfd3JpdGUodW5zaWduZWQgc2hvcnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmRleF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCW91dGIoKGFkZHIgJiAweGZmMDApID4+IDgsIEVDX0lPX1BPUlRfSElHSCk7CisJb3V0YigoYWRkciAmIDB4MDBmZiksIEVDX0lPX1BPUlRfTE9XKTsKKwlvdXRiKHZhbCwgRUNfSU9fUE9SVF9EQVRBKTsKKwkvKiAgZmx1c2ggdGhlIHdyaXRlIGFjdGlvbiAqLworCWluYihFQ19JT19QT1JUX0RBVEEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZGV4X2FjY2Vzc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlY193cml0ZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEVDIGNvbW1hbmQgd3JpdGVzIGFuZCBjb3JyZXNwb25kaW5nIHN0YXR1cyBxdWVyaWVzLgorICovCitpbnQgZWNfcXVlcnlfc2VxKHVuc2lnbmVkIGNoYXIgY21kKQoreworCWludCB0aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBjaGlwIGdvdG8gcmVzZXQgbW9kZSAqLworCXVkZWxheShFQ19SRUdfREVMQVkpOworCW91dGIoY21kLCBFQ19DTURfUE9SVCk7CisJdWRlbGF5KEVDX1JFR19ERUxBWSk7CisKKwkvKiBjaGVjayBpZiB0aGUgY29tbWFuZCBpcyByZWNlaXZlZCBieSBlYyAqLworCXRpbWVvdXQgPSBFQ19DTURfVElNRU9VVDsKKwlzdGF0dXMgPSBpbmIoRUNfU1RTX1BPUlQpOworCXdoaWxlICh0aW1lb3V0LS0gJiYgKHN0YXR1cyAmICgxIDw8IDEpKSkgeworCQlzdGF0dXMgPSBpbmIoRUNfU1RTX1BPUlQpOworCQl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKKwl9CisKKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlYWRhYmxlIGVycm9yIDogdGltZW91dC4uLlxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAiKCV4LyVkKWVjIGlzc3VlZCBjb21tYW5kICVkIHN0YXR1cyA6IDB4JXhcbiIsCisJCQkgICB0aW1lb3V0LCBFQ19DTURfVElNRU9VVCAtIHRpbWVvdXQsIGNtZCwgc3RhdHVzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfYWNjZXNzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlY19xdWVyeV9zZXEpOworCisvKgorICogU2VuZCBxdWVyeSBjb21tYW5kIHRvIEVDIHRvIGdldCB0aGUgcHJvcGVyIGV2ZW50IG51bWJlcgorICovCitpbnQgZWNfcXVlcnlfZXZlbnRfbnVtKHZvaWQpCit7CisJcmV0dXJuIGVjX3F1ZXJ5X3NlcShDTURfR0VUX0VWRU5UX05VTSk7Cit9CitFWFBPUlRfU1lNQk9MKGVjX3F1ZXJ5X2V2ZW50X251bSk7CisKKy8qCisgKiBHZXQgZXZlbnQgbnVtYmVyIGZyb20gRUMKKyAqCisgKiBOT1RFOiBUaGlzIHJvdXRpbmUgbXVzdCBmb2xsb3cgdGhlIHF1ZXJ5X2V2ZW50X251bSBmdW5jdGlvbiBpbiB0aGUKKyAqIGludGVycnVwdC4KKyAqLworaW50IGVjX2dldF9ldmVudF9udW0odm9pZCkKK3sKKwlpbnQgdGltZW91dCA9IDEwMDsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisJdWRlbGF5KEVDX1JFR19ERUxBWSk7CisJc3RhdHVzID0gaW5iKEVDX1NUU19QT1JUKTsKKwl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKKwl3aGlsZSAodGltZW91dC0tICYmICEoc3RhdHVzICYgKDEgPDwgMCkpKSB7CisJCXN0YXR1cyA9IGluYihFQ19TVFNfUE9SVCk7CisJCXVkZWxheShFQ19SRUdfREVMQVkpOworCX0KKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXByX2luZm8oIiVzOiBnZXQgZXZlbnQgbnVtYmVyIHRpbWVvdXQuXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZhbHVlID0gaW5iKEVDX0RBVF9QT1JUKTsKKwl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKKworCXJldHVybiB2YWx1ZTsKK30KK0VYUE9SVF9TWU1CT0woZWNfZ2V0X2V2ZW50X251bSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuaCBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTVhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIEtCMzMxMEIgRW1iZWRkZWQgQ29udHJvbGxlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTGVtb3RlIEluYy4KKyAqICBBdXRob3I6IGxpdWpsIDxsaXVqbEBsZW1vdGUuY29tPiwgMjAwOC0wMy0xNAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfRUNfS0IzMzEwQl9ICisjZGVmaW5lIF9FQ19LQjMzMTBCX0gKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZWNfcmVhZCh1bnNpZ25lZCBzaG9ydCBhZGRyKTsKK2V4dGVybiB2b2lkIGVjX3dyaXRlKHVuc2lnbmVkIHNob3J0IGFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsKTsKK2V4dGVybiBpbnQgZWNfcXVlcnlfc2VxKHVuc2lnbmVkIGNoYXIgY21kKTsKK2V4dGVybiBpbnQgZWNfcXVlcnlfZXZlbnRfbnVtKHZvaWQpOworZXh0ZXJuIGludCBlY19nZXRfZXZlbnRfbnVtKHZvaWQpOworCit0eXBlZGVmIGludCAoKnNjaV9oYW5kbGVyKSAoaW50IHN0YXR1cyk7CitleHRlcm4gc2NpX2hhbmRsZXIgeWVlbG9vbmdfcmVwb3J0X2xpZF9zdGF0dXM7CisKKyNkZWZpbmUgU0NJX0lSUV9OVU0gMHgwQQorCisvKgorICogVGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGRldGVybWluZWQgYnkgdGhlIEVDIGluZGV4IGNvbmZpZ3VyYXRpb24uCisgKiAxLCBmaWxsIHRoZSBQT1JUX0hJR0ggYXMgRUMgcmVnaXN0ZXIgaGlnaCBwYXJ0LgorICogMiwgZmlsbCB0aGUgUE9SVF9MT1cgYXMgRUMgcmVnaXN0ZXIgbG93IHBhcnQuCisgKiAzLCBmaWxsIHRoZSBQT1JUX0RBVEEgYXMgRUMgcmVnaXN0ZXIgd3JpdGUgZGF0YSBvciBnZXQgdGhlIGRhdGEgZnJvbSBpdC4KKyAqLworI2RlZmluZQlFQ19JT19QT1JUX0hJR0gJMHgwMzgxCisjZGVmaW5lCUVDX0lPX1BPUlRfTE9XCTB4MDM4MgorI2RlZmluZQlFQ19JT19QT1JUX0RBVEEJMHgwMzgzCisKKy8qCisgKiBFQyBkZWxheSB0aW1lIGlzIDUwMHVzIGZvciByZWdpc3RlciBhbmQgc3RhdHVzIGFjY2VzcworICovCisjZGVmaW5lCUVDX1JFR19ERUxBWQk1MDAJLyogdW5pdCA6IHVzICovCisjZGVmaW5lCUVDX0NNRF9USU1FT1VUCTB4MTAwMAorCisvKgorICogRUMgYWNjZXNzIHBvcnQgZm9yIFNDSSBjb21tdW5pY2F0aW9uCisgKi8KKyNkZWZpbmUJRUNfQ01EX1BPUlQJCTB4NjYKKyNkZWZpbmUJRUNfU1RTX1BPUlQJCTB4NjYKKyNkZWZpbmUJRUNfREFUX1BPUlQJCTB4NjIKKyNkZWZpbmUJQ01EX0lOSVRfSURMRV9NT0RFCTB4ZGQKKyNkZWZpbmUJQ01EX0VYSVRfSURMRV9NT0RFCTB4ZGYKKyNkZWZpbmUJQ01EX0lOSVRfUkVTRVRfTU9ERQkweGQ4CisjZGVmaW5lCUNNRF9SRUJPT1RfU1lTVEVNCTB4OGMKKyNkZWZpbmUJQ01EX0dFVF9FVkVOVF9OVU0JMHg4NAorI2RlZmluZQlDTURfUFJPR1JBTV9QSUVDRQkweGRhCisKKy8qIHRlbXBlcmF0dXJlICYgZmFuIHJlZ2lzdGVycyAqLworI2RlZmluZQlSRUdfVEVNUEVSQVRVUkVfVkFMVUUJMHhGNDU4CisjZGVmaW5lCVJFR19GQU5fQVVUT19NQU5fU1dJVENIIDB4RjQ1OQorI2RlZmluZQlCSVRfRkFOX0FVVE8JCTAKKyNkZWZpbmUJQklUX0ZBTl9NQU5VQUwJCTEKKyNkZWZpbmUJUkVHX0ZBTl9DT05UUk9MCQkweEY0RDIKKyNkZWZpbmUJQklUX0ZBTl9DT05UUk9MX09OCSgxIDw8IDApCisjZGVmaW5lCUJJVF9GQU5fQ09OVFJPTF9PRkYJKDAgPDwgMCkKKyNkZWZpbmUJUkVHX0ZBTl9TVEFUVVMJCTB4RjREQQorI2RlZmluZQlCSVRfRkFOX1NUQVRVU19PTgkoMSA8PCAwKQorI2RlZmluZQlCSVRfRkFOX1NUQVRVU19PRkYJKDAgPDwgMCkKKyNkZWZpbmUJUkVHX0ZBTl9TUEVFRF9ISUdICTB4RkUyMgorI2RlZmluZQlSRUdfRkFOX1NQRUVEX0xPVwkweEZFMjMKKyNkZWZpbmUJUkVHX0ZBTl9TUEVFRF9MRVZFTAkweEY0Q0MKKy8qIGZhbiBzcGVlZCBkaXZpZGVyICovCisjZGVmaW5lCUZBTl9TUEVFRF9ESVZJREVSCTQ4MDAwMAkvKiAoNjAqMTAwMCoxMDAwLzYyLjUvMikqLworCisvKiBiYXR0ZXJ5IHJlZ2lzdGVycyAqLworI2RlZmluZQlSRUdfQkFUX0RFU0lHTl9DQVBfSElHSAkJMHhGNzdECisjZGVmaW5lCVJFR19CQVRfREVTSUdOX0NBUF9MT1cJCTB4Rjc3RQorI2RlZmluZQlSRUdfQkFUX0ZVTExDSEdfQ0FQX0hJR0gJMHhGNzgwCisjZGVmaW5lCVJFR19CQVRfRlVMTENIR19DQVBfTE9XCQkweEY3ODEKKyNkZWZpbmUJUkVHX0JBVF9ERVNJR05fVk9MX0hJR0gJCTB4Rjc4MgorI2RlZmluZQlSRUdfQkFUX0RFU0lHTl9WT0xfTE9XCQkweEY3ODMKKyNkZWZpbmUJUkVHX0JBVF9DVVJSRU5UX0hJR0gJCTB4Rjc4NAorI2RlZmluZQlSRUdfQkFUX0NVUlJFTlRfTE9XCQkweEY3ODUKKyNkZWZpbmUJUkVHX0JBVF9WT0xUQUdFX0hJR0gJCTB4Rjc4NgorI2RlZmluZQlSRUdfQkFUX1ZPTFRBR0VfTE9XCQkweEY3ODcKKyNkZWZpbmUJUkVHX0JBVF9URU1QRVJBVFVSRV9ISUdICTB4Rjc4OAorI2RlZmluZQlSRUdfQkFUX1RFTVBFUkFUVVJFX0xPVwkJMHhGNzg5CisjZGVmaW5lCVJFR19CQVRfUkVMQVRJVkVfQ0FQX0hJR0gJMHhGNDkyCisjZGVmaW5lCVJFR19CQVRfUkVMQVRJVkVfQ0FQX0xPVwkweEY0OTMKKyNkZWZpbmUJUkVHX0JBVF9WRU5ET1IJCQkweEY0QzQKKyNkZWZpbmUJRkxBR19CQVRfVkVORE9SX1NBTllPCQkweDAxCisjZGVmaW5lCUZMQUdfQkFUX1ZFTkRPUl9TSU1QTE8JCTB4MDIKKyNkZWZpbmUJUkVHX0JBVF9DRUxMX0NPVU5UCQkweEY0QzYKKyNkZWZpbmUJRkxBR19CQVRfQ0VMTF8zUzFQCQkweDAzCisjZGVmaW5lCUZMQUdfQkFUX0NFTExfM1MyUAkJMHgwNgorI2RlZmluZQlSRUdfQkFUX0NIQVJHRQkJCTB4RjRBMgorI2RlZmluZQlGTEFHX0JBVF9DSEFSR0VfRElTQ0hBUkdFCTB4MDEKKyNkZWZpbmUJRkxBR19CQVRfQ0hBUkdFX0NIQVJHRQkJMHgwMgorI2RlZmluZQlGTEFHX0JBVF9DSEFSR0VfQUNQT1dFUgkJMHgwMAorI2RlZmluZQlSRUdfQkFUX1NUQVRVUwkJCTB4RjRCMAorI2RlZmluZQlCSVRfQkFUX1NUQVRVU19MT1cJCSgxIDw8IDUpCisjZGVmaW5lCUJJVF9CQVRfU1RBVFVTX0RFU1RST1kJCSgxIDw8IDIpCisjZGVmaW5lCUJJVF9CQVRfU1RBVFVTX0ZVTEwJCSgxIDw8IDEpCisjZGVmaW5lCUJJVF9CQVRfU1RBVFVTX0lOCQkoMSA8PCAwKQorI2RlZmluZQlSRUdfQkFUX0NIQVJHRV9TVEFUVVMJCTB4RjRCMQorI2RlZmluZQlCSVRfQkFUX0NIQVJHRV9TVEFUVVNfT1ZFUlRFTVAJKDEgPDwgMikKKyNkZWZpbmUJQklUX0JBVF9DSEFSR0VfU1RBVFVTX1BSRUNIRwkoMSA8PCAxKQorI2RlZmluZQlSRUdfQkFUX1NUQVRFCQkJMHhGNDgyCisjZGVmaW5lCUJJVF9CQVRfU1RBVEVfQ0hBUkdJTkcJCSgxIDw8IDEpCisjZGVmaW5lCUJJVF9CQVRfU1RBVEVfRElTQ0hBUkdJTkcJKDEgPDwgMCkKKyNkZWZpbmUJUkVHX0JBVF9QT1dFUgkJCTB4RjQ0MAorI2RlZmluZQlCSVRfQkFUX1BPV0VSX1MzCQkoMSA8PCAyKQorI2RlZmluZQlCSVRfQkFUX1BPV0VSX09OCQkoMSA8PCAxKQorI2RlZmluZQlCSVRfQkFUX1BPV0VSX0FDSU4JCSgxIDw8IDApCisKKy8qIG90aGVyIHJlZ2lzdGVycyAqLworLyogQXVkaW86IHJkL3dyICovCisjZGVmaW5lCVJFR19BVURJT19WT0xVTUUJMHhGNDZDCisjZGVmaW5lCVJFR19BVURJT19NVVRFCQkweEY0RTcKKyNkZWZpbmUJUkVHX0FVRElPX0JFRVAJCTB4RjREMAorLyogVVNCIHBvcnQgcG93ZXIgb3Igbm90OiByZC93ciAqLworI2RlZmluZQlSRUdfVVNCMF9GTEFHCQkweEY0NjEKKyNkZWZpbmUJUkVHX1VTQjFfRkxBRwkJMHhGNDYyCisjZGVmaW5lCVJFR19VU0IyX0ZMQUcJCTB4RjQ2MworI2RlZmluZQlCSVRfVVNCX0ZMQUdfT04JCTEKKyNkZWZpbmUJQklUX1VTQl9GTEFHX09GRgkwCisvKiBMSUQgKi8KKyNkZWZpbmUJUkVHX0xJRF9ERVRFQ1QJCTB4RjRCRAorI2RlZmluZQlCSVRfTElEX0RFVEVDVF9PTgkxCisjZGVmaW5lCUJJVF9MSURfREVURUNUX09GRgkwCisvKiBDUlQgKi8KKyNkZWZpbmUJUkVHX0NSVF9ERVRFQ1QJCTB4RjRBRAorI2RlZmluZQlCSVRfQ1JUX0RFVEVDVF9QTFVHCTEKKyNkZWZpbmUJQklUX0NSVF9ERVRFQ1RfVU5QTFVHCTAKKy8qIExDRCBiYWNrbGlnaHQgYnJpZ2h0bmVzcyBhZGp1c3Q6IDkgbGV2ZWxzICovCisjZGVmaW5lCVJFR19ESVNQTEFZX0JSSUdIVE5FU1MJMHhGNEY1CisvKiBCbGFjayBzY3JlZW4gU3RhdHVzICovCisjZGVmaW5lCUJJVF9ESVNQTEFZX0xDRF9PTgkxCisjZGVmaW5lCUJJVF9ESVNQTEFZX0xDRF9PRkYJMAorLyogTENEIGJhY2tsaWdodCBjb250cm9sOiBvZmYvcmVzdG9yZSAqLworI2RlZmluZQlSRUdfQkFDS0xJR0hUX0NUUkwJMHhGN0JECisjZGVmaW5lCUJJVF9CQUNLTElHSFRfT04JMQorI2RlZmluZQlCSVRfQkFDS0xJR0hUX09GRgkwCisvKiBSZXNldCB0aGUgbWFjaGluZSBhdXRvLWNsZWFyOiByZC93ciAqLworI2RlZmluZQlSRUdfUkVTRVQJCTB4RjRFQworI2RlZmluZQlCSVRfUkVTRVRfT04JCTEKKy8qIExpZ2h0IHRoZSBsZWQ6IHJkL3dyICovCisjZGVmaW5lCVJFR19MRUQJCQkweEY0QzgKKyNkZWZpbmUJQklUX0xFRF9SRURfUE9XRVIJKDEgPDwgMCkKKyNkZWZpbmUJQklUX0xFRF9PUkFOR0VfUE9XRVIJKDEgPDwgMSkKKyNkZWZpbmUJQklUX0xFRF9HUkVFTl9DSEFSR0UJKDEgPDwgMikKKyNkZWZpbmUJQklUX0xFRF9SRURfQ0hBUkdFCSgxIDw8IDMpCisjZGVmaW5lCUJJVF9MRURfTlVNTE9DSwkJKDEgPDwgNCkKKy8qIFRlc3QgbGVkIG1vZGUsIGFsbCBsZWQgb24vb2ZmICovCisjZGVmaW5lCVJFR19MRURfVEVTVAkJMHhGNEMyCisjZGVmaW5lCUJJVF9MRURfVEVTVF9JTgkJMQorI2RlZmluZQlCSVRfTEVEX1RFU1RfT1VUCTAKKy8qIENhbWVyYSBvbi9vZmYgKi8KKyNkZWZpbmUJUkVHX0NBTUVSQV9TVEFUVVMJMHhGNDZBCisjZGVmaW5lCUJJVF9DQU1FUkFfU1RBVFVTX09OCTEKKyNkZWZpbmUJQklUX0NBTUVSQV9TVEFUVVNfT0ZGCTAKKyNkZWZpbmUJUkVHX0NBTUVSQV9DT05UUk9MCTB4RjdCNworI2RlZmluZQlCSVRfQ0FNRVJBX0NPTlRST0xfT0ZGCTAKKyNkZWZpbmUJQklUX0NBTUVSQV9DT05UUk9MX09OCTEKKy8qIFdsYW4gU3RhdHVzICovCisjZGVmaW5lCVJFR19XTEFOCQkweEY0RkEKKyNkZWZpbmUJQklUX1dMQU5fT04JCTEKKyNkZWZpbmUJQklUX1dMQU5fT0ZGCQkwCisjZGVmaW5lCVJFR19ESVNQTEFZX0xDRAkJMHhGNzlGCisKKy8qIFNDSSBFdmVudCBOdW1iZXIgZnJvbSBFQyAqLworZW51bSB7CisJRVZFTlRfTElEID0gMHgyMywJLyogIExJRCBvcGVuL2Nsb3NlICovCisJRVZFTlRfRElTUExBWV9UT0dHTEUsCS8qICBGbitGMyBmb3IgZGlzcGxheSBzd2l0Y2ggKi8KKwlFVkVOVF9TTEVFUCwJCS8qICBGbitGMSBmb3IgZW50ZXJpbmcgc2xlZXAgbW9kZSAqLworCUVWRU5UX09WRVJURU1QLAkJLyogIE92ZXItdGVtcGVyYXR1cmUgaGFwcGVuZWQgKi8KKwlFVkVOVF9DUlRfREVURUNULAkvKiAgQ1JUIGlzIGNvbm5lY3RlZCAqLworCUVWRU5UX0NBTUVSQSwJCS8qICBDYW1lcmEgb24vb2ZmICovCisJRVZFTlRfVVNCX09DMiwJCS8qICBVU0IyIE92ZXIgQ3VycmVudCBvY2N1cnJlZCAqLworCUVWRU5UX1VTQl9PQzAsCQkvKiAgVVNCMCBPdmVyIEN1cnJlbnQgb2NjdXJyZWQgKi8KKwlFVkVOVF9CTEFDS19TQ1JFRU4sCS8qICBUdXJuIG9uL29mZiBiYWNrbGlnaHQgKi8KKwlFVkVOVF9BVURJT19NVVRFLAkvKiAgTXV0ZSBvbi9vZmYgKi8KKwlFVkVOVF9ESVNQTEFZX0JSSUdIVE5FU1MsLyogTENEIGJhY2tsaWdodCBicmlnaHRuZXNzIGFkanVzdCAqLworCUVWRU5UX0FDX0JBVCwJCS8qICBBQyAmIEJhdHRlcnkgcmVsYXRpdmUgaXNzdWUgKi8KKwlFVkVOVF9BVURJT19WT0xVTUUsCS8qICBWb2x1bWUgYWRqdXN0ICovCisJRVZFTlRfV0xBTiwJCS8qICBXbGFuIG9uL29mZiAqLworCUVWRU5UX0VORAorfTsKKworI2VuZGlmIC8qICFfRUNfS0IzMzEwQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QzMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisjaW5jbHVkZSA8bWFjaGluZS5oPgorCisjZGVmaW5lIExPT05HU09OX1RJTUVSX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyA3KQkvKiBjcHUgdGltZXIgKi8KKyNkZWZpbmUgTE9PTkdTT05fUEVSRkNOVF9JUlEJKE1JUFNfQ1BVX0lSUV9CQVNFICsgNikJLyogY3B1IHBlcmYgY291bnRlciAqLworI2RlZmluZSBMT09OR1NPTl9OT1JUSF9CUklER0VfSVJRCShNSVBTX0NQVV9JUlFfQkFTRSArIDYpCS8qIGJvbml0byAqLworI2RlZmluZSBMT09OR1NPTl9VQVJUX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyAzKQkvKiBjcHUgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgTE9PTkdTT05fU09VVEhfQlJJREdFX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyAyKQkvKiBpODI1OSAqLworCisjZGVmaW5lIExPT05HU09OX0lOVF9CSVRfSU5UMAkJKDEgPDwgMTEpCisjZGVmaW5lIExPT05HU09OX0lOVF9CSVRfSU5UMQkJKDEgPDwgMTIpCisKKy8qCisgKiBUaGUgZ2VuZXJpYyBpODI1OV9pcnEoKSBtYWtlIHRoZSBrZXJuZWwgaGFuZyBvbiBib290aW5nLiAgU2luY2Ugd2UgY2Fubm90CisgKiBnZXQgdGhlIGlycSB2aWEgdGhlIElSUiBkaXJlY3RseSwgd2UgYWNjZXNzIHRoZSBJU1IgaW5zdGVhZC4KKyAqLworaW50IG1hY2hfaTgyNTlfaXJxKHZvaWQpCit7CisJaW50IGlycSwgaXNyOworCisJaXJxID0gLTE7CisKKwlpZiAoKExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOKSAmIExPT05HU09OX0lOVF9CSVRfSU5UMCkgeworCQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwkJaXNyID0gaW5iKFBJQ19NQVNURVJfQ01EKSAmCisJCQl+aW5iKFBJQ19NQVNURVJfSU1SKSAmIH4oMSA8PCBQSUNfQ0FTQ0FERV9JUik7CisJCWlmICghaXNyKQorCQkJaXNyID0gKGluYihQSUNfU0xBVkVfQ01EKSAmIH5pbmIoUElDX1NMQVZFX0lNUikpIDw8IDg7CisJCWlycSA9IGZmcyhpc3IpIC0gMTsKKwkJaWYgKHVubGlrZWx5KGlycSA9PSA3KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgbWF5IGJlIGEgc3B1cmlvdXMgaW50ZXJydXB0LgorCQkJICoKKwkJCSAqIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKElTUikuIElmIHRoZSBtb3N0CisJCQkgKiBzaWduaWZpY2FudCBiaXQgaXMgbm90IHNldCB0aGVuIHRoZXJlIGlzIG5vIHZhbGlkCisJCQkgKiBpbnRlcnJ1cHQuCisJCQkgKi8KKwkJCW91dGIoMHgwQiwgUElDX01BU1RFUl9JU1IpOwkvKiBJU1IgcmVnaXN0ZXIgKi8KKwkJCWlmICh+aW5iKFBJQ19NQVNURVJfSVNSKSAmIDB4ODApCisJCQkJaXJxID0gLTE7CisJCX0KKwkJc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKKwl9CisKKwlyZXR1cm4gaXJxOworfQorRVhQT1JUX1NZTUJPTChtYWNoX2k4MjU5X2lycSk7CisKK3N0YXRpYyB2b2lkIGk4MjU5X2lycWRpc3BhdGNoKHZvaWQpCit7CisJaW50IGlycTsKKworCWlycSA9IG1hY2hfaTgyNTlfaXJxKCk7CisJaWYgKGlycSA+PSAwKQorCQlkb19JUlEoaXJxKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdCgpOworfQorCit2b2lkIG1hY2hfaXJxX2Rpc3BhdGNoKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJZG9fSVJRKExPT05HU09OX1RJTUVSX0lSUSk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpIHsJLyogTm9ydGggQnJpZGdlLCBQZXJmIGNvdW50ZXIgKi8KKyNpZmRlZiBDT05GSUdfT1BST0ZJTEUKKwkJZG9fSVJRKExPT05HU09OMl9QRVJGQ05UX0lSUSk7CisjZW5kaWYKKwkJYm9uaXRvX2lycWRpc3BhdGNoKCk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykJLyogQ1BVIFVBUlQgKi8KKwkJZG9fSVJRKExPT05HU09OX1VBUlRfSVJRKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikJLyogU291dGggQnJpZGdlICovCisJCWk4MjU5X2lycWRpc3BhdGNoKCk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKK30KKwordm9pZCBfX2luaXQgc2V0X2lycV90cmlnZ2VyX21vZGUodm9pZCkKK3sKKwkvKiBzZXR1cCBjczU1MzYgYXMgaGlnaCBsZXZlbCB0cmlnZ2VyICovCisJTE9PTkdTT05fSU5UUE9MID0gTE9PTkdTT05fSU5UX0JJVF9JTlQwIHwgTE9PTkdTT05fSU5UX0JJVF9JTlQxOworCUxPT05HU09OX0lOVEVER0UgJj0gfihMT09OR1NPTl9JTlRfQklUX0lOVDAgfCBMT09OR1NPTl9JTlRfQklUX0lOVDEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXA2X2FjdGlvbihpbnQgY3BsLCB2b2lkICpkZXZfaWQpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdHJ1Y3QgaXJxYWN0aW9uIGlwNl9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPSBpcDZfYWN0aW9uLAorCS5uYW1lID0gImNhc2NhZGUiLAorCS5mbGFncyA9IElSUUZfU0hBUkVELAorfTsKKworc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlciA9IG5vX2FjdGlvbiwKKwkubmFtZSA9ICJjYXNjYWRlIiwKK307CisKK3ZvaWQgX19pbml0IG1hY2hfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBpbml0IGFsbCBjb250cm9sbGVyCisJICogICAwLTE1ICAgICAgICAgLS0tLS0tPiBpODI1OSBpbnRlcnJ1cHQKKwkgKiAgIDE2LTIzICAgICAgICAtLS0tLS0+IG1pcHMgY3B1IGludGVycnVwdAorCSAqICAgMzItNjMgICAgICAgIC0tLS0tLT4gYm9uaXRvIGlycQorCSAqLworCisJLyogU2V0cyB0aGUgZmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIuICovCisJbWlwc19jcHVfaXJxX2luaXQoKTsKKwlpbml0X2k4MjU5X2lycXMoKTsKKwlib25pdG9faXJxX2luaXQoKTsKKworCS8qIHNldHVwIG5vcnRoIGJyaWRnZSBpcnEgKGJvbml0bykgKi8KKwlzZXR1cF9pcnEoTE9PTkdTT05fTk9SVEhfQlJJREdFX0lSUSwgJmlwNl9pcnFhY3Rpb24pOworCS8qIHNldHVwIHNvdXJjZSBicmlkZ2UgaXJxIChpODI1OSkgKi8KKwlzZXR1cF9pcnEoTE9PTkdTT05fU09VVEhfQlJJREdFX0lSUSwgJmNhc2NhZGVfaXJxYWN0aW9uKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FmMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIExlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcycgc3BlY2lmaWMgc3VzcGVuZCBzdXBwb3J0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pODA0Mi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9tZmdwdC5oPgorI2luY2x1ZGUgImVjX2tiMzMxMGIuaCIKKworI2RlZmluZSBJODA0Ml9LQkRfSVJRCQkxCisjZGVmaW5lIEk4MDQyX0NUUl9LQkRJTlQJMHgwMQorI2RlZmluZSBJODA0Ml9DVFJfS0JERElTCTB4MTAKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaTgwNDJfY3RyOworCitzdGF0aWMgaW50IGk4MDQyX2VuYWJsZV9rYmRfcG9ydCh2b2lkKQoreworCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfUkNUUikpIHsKKwkJcHJfZXJyKCJpODA0Mi5jOiBDYW4ndCByZWFkIENUUiB3aGlsZSBlbmFibGluZyBpODA0MiBrYmQgcG9ydC4iCisJCSAgICAgICAiXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaTgwNDJfY3RyICY9IH5JODA0Ml9DVFJfS0JERElTOworCWk4MDQyX2N0ciB8PSBJODA0Ml9DVFJfS0JESU5UOworCisJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkgeworCQlpODA0Ml9jdHIgJj0gfkk4MDQyX0NUUl9LQkRJTlQ7CisJCWk4MDQyX2N0ciB8PSBJODA0Ml9DVFJfS0JERElTOworCQlwcl9lcnIoImk4MDQyLmM6IEZhaWxlZCB0byBlbmFibGUgS0JEIHBvcnQuXG4iKTsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXR1cF93YWtldXBfZXZlbnRzKHZvaWQpCit7CisJaW50IGlycV9tYXNrOworCisJc3dpdGNoIChtaXBzX21hY2h0eXBlKSB7CisJY2FzZSBNQUNIX0xFTU9URV9NTDJGNzoKKwljYXNlIE1BQ0hfTEVNT1RFX1lMMkY4OToKKwkJLyogb3BlbiB0aGUga2V5Ym9hcmQgaXJxIGluIGk4MjU5QSAqLworCQlvdXRiKCgweGZmICYgfigxIDw8IEk4MDQyX0tCRF9JUlEpKSwgUElDX01BU1RFUl9JTVIpOworCQlpcnFfbWFzayA9IGluYihQSUNfTUFTVEVSX0lNUik7CisKKwkJLyogZW5hYmxlIGtleWJvYXJkIHBvcnQgKi8KKwkJaTgwNDJfZW5hYmxlX2tiZF9wb3J0KCk7CisKKwkJLyogV2FrZXVwIENQVSB2aWEgU0NJIGxpZCBvcGVuIGV2ZW50ICovCisJCW91dGIoaXJxX21hc2sgJiB+KDEgPDwgUElDX0NBU0NBREVfSVIpLCBQSUNfTUFTVEVSX0lNUik7CisJCWluYihQSUNfTUFTVEVSX0lNUik7CisJCW91dGIoMHhmZiAmIH4oMSA8PCAoU0NJX0lSUV9OVU0gLSA4KSksIFBJQ19TTEFWRV9JTVIpOworCQlpbmIoUElDX1NMQVZFX0lNUik7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIGxpZF90YXNrOworc3RhdGljIGludCBpbml0aWFsaXplZDsKKy8qIHllZWxvb25nX3JlcG9ydF9saWRfc3RhdHVzIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4geWVlbG9vbmdfbGFwdG9wLmMgKi8KK3NjaV9oYW5kbGVyIHllZWxvb25nX3JlcG9ydF9saWRfc3RhdHVzOworRVhQT1JUX1NZTUJPTCh5ZWVsb29uZ19yZXBvcnRfbGlkX3N0YXR1cyk7CitzdGF0aWMgdm9pZCB5ZWVsb29uZ19saWRfdXBkYXRlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWlmICh5ZWVsb29uZ19yZXBvcnRfbGlkX3N0YXR1cykKKwkJeWVlbG9vbmdfcmVwb3J0X2xpZF9zdGF0dXMoQklUX0xJRF9ERVRFQ1RfT04pOworfQorCitpbnQgd2FrZXVwX2xvb25nc29uKHZvaWQpCit7CisJaW50IGlycTsKKworCS8qIHF1ZXJ5IHRoZSBpbnRlcnJ1cHQgbnVtYmVyICovCisJaXJxID0gbWFjaF9pODI1OV9pcnEoKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogaXJxID0gJWRcbiIsIF9fZnVuY19fLCBpcnEpOworCisJaWYgKGlycSA9PSBJODA0Ml9LQkRfSVJRKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChpcnEgPT0gU0NJX0lSUV9OVU0pIHsKKwkJaW50IHJldCwgc2NpX2V2ZW50OworCQkvKiBxdWVyeSB0aGUgZXZlbnQgbnVtYmVyICovCisJCXJldCA9IGVjX3F1ZXJ5X3NlcShDTURfR0VUX0VWRU5UX05VTSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIDA7CisJCXNjaV9ldmVudCA9IGVjX2dldF9ldmVudF9udW0oKTsKKwkJaWYgKHNjaV9ldmVudCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHNjaV9ldmVudCA9PSBFVkVOVF9MSUQpIHsKKwkJCWludCBsaWRfc3RhdHVzOworCQkJLyogY2hlY2sgdGhlIExJRCBzdGF0dXMgKi8KKwkJCWxpZF9zdGF0dXMgPSBlY19yZWFkKFJFR19MSURfREVURUNUKTsKKwkJCS8qIHdha2V1cCBjcHUgd2hlbiBwZW9wbGUgb3BlbiB0aGUgTElEICovCisJCQlpZiAobGlkX3N0YXR1cyA9PSBCSVRfTElEX0RFVEVDVF9PTikgeworCQkJCS8qIElmIHdlIGNhbGwgaXQgZGlyZWN0bHkgaGVyZSwgdGhlIFdBUk5JTkcKKwkJCQkgKiB3aWxsIGJlIHNlbnQgb3V0IGJ5IGdldG5zdGltZW9mZGF5CisJCQkJICogdmlhICJXQVJOX09OKHRpbWVrZWVwaW5nX3N1c3BlbmRlZCk7IgorCQkJCSAqIGJlY2F1c2Ugd2UgY2FuIG5vdCBzY2hlZHVsZSBpbiBzdXNwZW5kIG1vZGUuCisJCQkJICovCisJCQkJaWYgKGluaXRpYWxpemVkID09IDApIHsKKwkJCQkJSU5JVF9ERUxBWUVEX1dPUksoJmxpZF90YXNrLAorCQkJCQkJeWVlbG9vbmdfbGlkX3VwZGF0ZV90YXNrKTsKKwkJCQkJaW5pdGlhbGl6ZWQgPSAxOworCQkJCX0KKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmxpZF90YXNrLCAxKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCit2b2lkIF9fd2VhayBtYWNoX3N1c3BlbmQodm9pZCkKK3sKKwlkaXNhYmxlX21mZ3B0MF9jb3VudGVyKCk7Cit9CisKK3ZvaWQgX193ZWFrIG1hY2hfcmVzdW1lKHZvaWQpCit7CisJZW5hYmxlX21mZ3B0MF9jb3VudGVyKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkMWE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYwpAQCAtMCwwICsxLDE1OSBAQAorLyogQm9hcmQtc3BlY2lmaWMgcmVib290L3NodXRkb3duIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSAiZWNfa2IzMzEwYi5oIgorCitzdGF0aWMgdm9pZCByZXNldF9jcHUodm9pZCkKK3sKKwkvKgorCSAqIHJlc2V0IGNwdSB0byBmdWxsIHNwZWVkLCB0aGlzIGlzIG5lZWRlZCB3aGVuIGVuYWJsaW5nIGNwdSBmcmVxdWVuY3kKKwkgKiBzY2FsbGluZworCSAqLworCUxPT05HU09OX0NISVBDRkcwIHw9IDB4NzsKK30KKworLyogcmVzZXQgc3VwcG9ydCBmb3IgZnVsb29uZzJmICovCisKK3N0YXRpYyB2b2lkIGZsMmZfcmVib290KHZvaWQpCit7CisJcmVzZXRfY3B1KCk7CisKKwkvKiBzZW5kIGEgcmVzZXQgc2lnbmFsIHRvIHNvdXRoIGJyaWRnZS4KKwkgKgorCSAqIE5PVEU6IGlmIGVuYWJsZSAiUG93ZXIgTWFuYWdlbWVudCIgaW4ga2VybmVsLCBydGw4MTY5IHdpbGwgbm90IHJlc2V0CisJICogbm9ybWFsbHkgd2l0aCB0aGlzIHJlc2V0IG9wZXJhdGlvbiBhbmQgaXQgd2lsbCBub3Qgd29yayBpbiBQTU9OLCBidXQKKwkgKiB5b3UgY2FuIHR5cGUgaGFsdCBjb21tYW5kIGFuZCB0aGVuIHJlYm9vdCwgc2VlbXMgdGhlIGhhcmR3YXJlIHJlc2V0CisJICogbG9naWMgbm90IHdvcmsgbm9ybWFsbHkuCisJICovCisJeworCQl1MzIgaGksIGxvOworCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9TT0ZUX1JFU0VUKSwgJmhpLCAmbG8pOworCQlsbyB8PSAweDAwMDAwMDAxOworCQlfd3Jtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9TT0ZUX1JFU0VUKSwgaGksIGxvKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsMmZfc2h1dGRvd24odm9pZCkKK3sKKwl1MzIgaGksIGxvLCB2YWw7CisJaW50IGdwaW9fYmFzZTsKKworCS8qIGdldCBncGlvIGJhc2UgKi8KKwlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX0dQSU8pLCAmaGksICZsbyk7CisJZ3Bpb19iYXNlID0gbG8gJiAweGZmMDA7CisKKwkvKiBtYWtlIGNzNTUzNiBncGlvMTMgb3V0cHV0IGVuYWJsZSAqLworCXZhbCA9IGlubChncGlvX2Jhc2UgKyBHUElPTF9PVVRfRU4pOworCXZhbCAmPSB+KDEgPDwgKDE2ICsgMTMpKTsKKwl2YWwgfD0gKDEgPDwgMTMpOworCW91dGwodmFsLCBncGlvX2Jhc2UgKyBHUElPTF9PVVRfRU4pOworCW1taW93YigpOworCS8qIG1ha2UgY3M1NTM2IGdwaW8xMyBvdXRwdXQgbG93IGxldmVsIHZvbHRhZ2UuICovCisJdmFsID0gaW5sKGdwaW9fYmFzZSArIEdQSU9MX09VVF9WQUwpICYgfigxIDw8ICgxMykpOworCXZhbCB8PSAoMSA8PCAoMTYgKyAxMykpOworCW91dGwodmFsLCBncGlvX2Jhc2UgKyBHUElPTF9PVVRfVkFMKTsKKwltbWlvd2IoKTsKK30KKworLyogcmVzZXQgc3VwcG9ydCBmb3IgeWVlbG9vbmcyZiBhbmQgbWVuZ2xvb25nMmYgbm90ZWJvb2sgKi8KKwordm9pZCBtbDJmX3JlYm9vdCh2b2lkKQoreworCXJlc2V0X2NwdSgpOworCisJLyogc2VuZGluZyBhbiByZXNldCBzaWduYWwgdG8gRUMoZW1iZWRkZWQgY29udHJvbGxlcikgKi8KKwllY193cml0ZShSRUdfUkVTRVQsIEJJVF9SRVNFVF9PTik7Cit9CisKKyNkZWZpbmUgeWwyZjg5X3JlYm9vdCBtbDJmX3JlYm9vdAorCisvKiBtZW5nbG9uZyg3aW5jaGVzKSBsYXB0b3AgaGFzIGRpZmZlcmVudCBzaHV0ZG93biBsb2dpYyBmcm9tIDguOWluY2hlcyAqLworI2RlZmluZSBFQ19TSFVURE9XTl9JT19QT1JUX0hJR0ggMHhmZjJkCisjZGVmaW5lIEVDX1NIVVRET1dOX0lPX1BPUlRfTE9XCSAweGZmMmUKKyNkZWZpbmUgRUNfU0hVVERPV05fSU9fUE9SVF9EQVRBIDB4ZmYyZgorI2RlZmluZSBSRUdfU0hVVERPV05fSElHSCAgICAgICAgMHhGQworI2RlZmluZSBSRUdfU0hVVERPV05fTE9XICAgICAgICAgMHgyOQorI2RlZmluZSBCSVRfU0hVVERPV05fT04gICAgICAgICAgKDEgPDwgMSkKKworc3RhdGljIHZvaWQgbWwyZl9zaHV0ZG93bih2b2lkKQoreworCXU4IHZhbDsKKwl1NjQgaTsKKworCW91dGIoUkVHX1NIVVRET1dOX0hJR0gsIEVDX1NIVVRET1dOX0lPX1BPUlRfSElHSCk7CisJb3V0YihSRUdfU0hVVERPV05fTE9XLCBFQ19TSFVURE9XTl9JT19QT1JUX0xPVyk7CisJbW1pb3diKCk7CisJdmFsID0gaW5iKEVDX1NIVVRET1dOX0lPX1BPUlRfREFUQSk7CisJb3V0Yih2YWwgJiAofkJJVF9TSFVURE9XTl9PTiksIEVDX1NIVVRET1dOX0lPX1BPUlRfREFUQSk7CisJbW1pb3diKCk7CisJLyogbmVlZCBlbm91Z2ggd2FpdCBoZXJlLi4uIGhvdyBtYW55IG1pY3Jvc2Vjb25kcyBuZWVkcz8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKQorCQlkZWxheSgpOworCW91dGIodmFsIHwgQklUX1NIVVRET1dOX09OLCBFQ19TSFVURE9XTl9JT19QT1JUX0RBVEEpOworCW1taW93YigpOworfQorCitzdGF0aWMgdm9pZCB5bDJmODlfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBjcHUtZ3BpbzAgb3V0cHV0IGxvdyAqLworCUxPT05HU09OX0dQSU9EQVRBICY9IH4weDAwMDAwMDAxOworCS8qIGNwdS1ncGlvMCBhcyBvdXRwdXQgKi8KKwlMT09OR1NPTl9HUElPSUUgJj0gfjB4MDAwMDAwMDE7Cit9CisKK3ZvaWQgbWFjaF9wcmVwYXJlX3JlYm9vdCh2b2lkKQoreworCXN3aXRjaCAobWlwc19tYWNodHlwZSkgeworCWNhc2UgTUFDSF9MRU1PVEVfRkwyRjoKKwljYXNlIE1BQ0hfTEVNT1RFX05BUzoKKwljYXNlIE1BQ0hfTEVNT1RFX0xMMkY6CisJCWZsMmZfcmVib290KCk7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfTUwyRjc6CisJCW1sMmZfcmVib290KCk7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfWUwyRjg5OgorCQl5bDJmODlfcmVib290KCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordm9pZCBtYWNoX3ByZXBhcmVfc2h1dGRvd24odm9pZCkKK3sKKwlzd2l0Y2ggKG1pcHNfbWFjaHR5cGUpIHsKKwljYXNlIE1BQ0hfTEVNT1RFX0ZMMkY6CisJY2FzZSBNQUNIX0xFTU9URV9OQVM6CisJY2FzZSBNQUNIX0xFTU9URV9MTDJGOgorCQlmbDJmX3NodXRkb3duKCk7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfTUwyRjc6CisJCW1sMmZfc2h1dGRvd24oKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNIX0xFTU9URV9ZTDJGODk6CisJCXlsMmY4OV9zaHV0ZG93bigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKaW5kZXggNDU0YjUzOS4uOGYyZjhlOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYwpAQCAtMzUsNiArMzUsNyBAQAogICogYmV0dGVyIHBlcmZvcm1hbmNlIGJ5IGNvbXBpbGluZyB3aXRoIC1tc29mdC1mbG9hdCEKICAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KQEAgLTY4LDcgKzY5LDkgQEAKIAogLyogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zdHJ1Y3QgKi8KIAotc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzIGZwdWVtdXN0YXRzOworI2lmZGVmIENPTkZJR19ERUJVR19GUworREVGSU5FX1BFUl9DUFUoc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzLCBmcHVlbXVzdGF0cyk7CisjZW5kaWYKIAogLyogQ29udHJvbCByZWdpc3RlcnMgKi8KIApAQCAtMjA5LDcgKzIxMiw3IEBACiAJdW5zaWduZWQgaW50IGNvbmQ7CiAKIAlpZiAoZ2V0X3VzZXIoaXIsIChtaXBzX2luc3RydWN0aW9uIF9fdXNlciAqKSB4Y3AtPmNwMF9lcGMpKSB7Ci0JCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCXJldHVybiBTSUdCVVM7CiAJfQogCkBAIC0yNDAsNyArMjQzLDcgQEAKIAkJCXJldHVybiBTSUdJTEw7CiAJCX0KIAkJaWYgKGdldF91c2VyKGlyLCAobWlwc19pbnN0cnVjdGlvbiBfX3VzZXIgKikgZW11bHBjKSkgewotCQkJZnB1ZW11c3RhdHMuZXJyb3JzKys7CisJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQlyZXR1cm4gU0lHQlVTOwogCQl9CiAJCS8qIF9fY29tcHV0ZV9yZXR1cm5fZXBjKCkgd2lsbCBoYXZlIHVwZGF0ZWQgY3AwX2VwYyAqLwpAQCAtMjUzLDE2ICsyNTYsMTYgQEAKIAl9CiAKICAgICAgIGVtdWw6Ci0JZnB1ZW11c3RhdHMuZW11bGF0ZWQrKzsKKwlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVtdWxhdGVkKTsKIAlzd2l0Y2ggKE1JUFNJbnN0X09QQ09ERShpcikpIHsKIAljYXNlIGxkYzFfb3A6ewogCQl1NjQgX191c2VyICp2YSA9ICh1NjQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfUlMoaXIpXSArCiAJCQlNSVBTSW5zdF9TSU1NKGlyKSk7CiAJCXU2NCB2YWw7CiAKLQkJZnB1ZW11c3RhdHMubG9hZHMrKzsKKwkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhsb2Fkcyk7CiAJCWlmIChnZXRfdXNlcih2YWwsIHZhKSkgewotCQkJZnB1ZW11c3RhdHMuZXJyb3JzKys7CisJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQlyZXR1cm4gU0lHQlVTOwogCQl9CiAJCURJVE9SRUcodmFsLCBNSVBTSW5zdF9SVChpcikpOwpAQCAtMjc0LDEwICsyNzcsMTAgQEAKIAkJCU1JUFNJbnN0X1NJTU0oaXIpKTsKIAkJdTY0IHZhbDsKIAotCQlmcHVlbXVzdGF0cy5zdG9yZXMrKzsKKwkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhzdG9yZXMpOwogCQlESUZST01SRUcodmFsLCBNSVBTSW5zdF9SVChpcikpOwogCQlpZiAocHV0X3VzZXIodmFsLCB2YSkpIHsKLQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQkJcmV0dXJuIFNJR0JVUzsKIAkJfQogCQlicmVhazsKQEAgLTI4OCw5ICsyOTEsOSBAQAogCQkJTUlQU0luc3RfU0lNTShpcikpOwogCQl1MzIgdmFsOwogCi0JCWZwdWVtdXN0YXRzLmxvYWRzKys7CisJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMobG9hZHMpOwogCQlpZiAoZ2V0X3VzZXIodmFsLCB2YSkpIHsKLQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQkJcmV0dXJuIFNJR0JVUzsKIAkJfQogCQlTSVRPUkVHKHZhbCwgTUlQU0luc3RfUlQoaXIpKTsKQEAgLTMwMiwxMCArMzA1LDEwIEBACiAJCQlNSVBTSW5zdF9TSU1NKGlyKSk7CiAJCXUzMiB2YWw7CiAKLQkJZnB1ZW11c3RhdHMuc3RvcmVzKys7CisJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoc3RvcmVzKTsKIAkJU0lGUk9NUkVHKHZhbCwgTUlQU0luc3RfUlQoaXIpKTsKIAkJaWYgKHB1dF91c2VyKHZhbCwgdmEpKSB7Ci0JCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoZXJyb3JzKTsKIAkJCXJldHVybiBTSUdCVVM7CiAJCX0KIAkJYnJlYWs7CkBAIC00MjksNyArNDMyLDcgQEAKIAogCQkJCWlmIChnZXRfdXNlcihpciwKIAkJCQkgICAgKG1pcHNfaW5zdHJ1Y3Rpb24gX191c2VyICopIHhjcC0+Y3AwX2VwYykpIHsKLQkJCQkJZnB1ZW11c3RhdHMuZXJyb3JzKys7CisJCQkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoZXJyb3JzKTsKIAkJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCQl9CiAKQEAgLTU5NSw3ICs1OTgsNyBAQAogewogCXVuc2lnbmVkIHJjc3IgPSAwOwkvKiByZXN1bHRpbmcgY3NyICovCiAKLQlmcHVlbXVzdGF0cy5jcDF4b3BzKys7CisJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhjcDF4b3BzKTsKIAogCXN3aXRjaCAoTUlQU0luc3RfRk1BX0ZGTVQoaXIpKSB7CiAJY2FzZSBzX2ZtdDp7CQkvKiAwICovCkBAIC02MTAsOSArNjEzLDkgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5sb2FkcysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhsb2Fkcyk7CiAJCQlpZiAoZ2V0X3VzZXIodmFsLCB2YSkpIHsKLQkJCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCX0KIAkJCVNJVE9SRUcodmFsLCBNSVBTSW5zdF9GRChpcikpOwpAQCAtNjIyLDExICs2MjUsMTEgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5zdG9yZXMrKzsKKwkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoc3RvcmVzKTsKIAogCQkJU0lGUk9NUkVHKHZhbCwgTUlQU0luc3RfRlMoaXIpKTsKIAkJCWlmIChwdXRfdXNlcih2YWwsIHZhKSkgewotCQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoZXJyb3JzKTsKIAkJCQlyZXR1cm4gU0lHQlVTOwogCQkJfQogCQkJYnJlYWs7CkBAIC02ODcsOSArNjkwLDkgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5sb2FkcysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhsb2Fkcyk7CiAJCQlpZiAoZ2V0X3VzZXIodmFsLCB2YSkpIHsKLQkJCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCX0KIAkJCURJVE9SRUcodmFsLCBNSVBTSW5zdF9GRChpcikpOwpAQCAtNjk5LDEwICs3MDIsMTAgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5zdG9yZXMrKzsKKwkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoc3RvcmVzKTsKIAkJCURJRlJPTVJFRyh2YWwsIE1JUFNJbnN0X0ZTKGlyKSk7CiAJCQlpZiAocHV0X3VzZXIodmFsLCB2YSkpIHsKLQkJCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNzY5LDcgKzc3Miw3IEBACiAjZW5kaWYKIAl9IHJ2OwkJCS8qIHJlc3VsdGluZyB2YWx1ZSAqLwogCi0JZnB1ZW11c3RhdHMuY3Axb3BzKys7CisJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhjcDFvcHMpOwogCXN3aXRjaCAocmZtdCA9IChNSVBTSW5zdF9GRk1UKGlyKSAmIDB4ZikpIHsKIAljYXNlIHNfZm10OnsJCS8qIDAgKi8KIAkJdW5pb24gewpAQCAtMTI0MCw3ICsxMjQzLDcgQEAKIAkJcHJldmVwYyA9IHhjcC0+Y3AwX2VwYzsKIAogCQlpZiAoZ2V0X3VzZXIoaW5zbiwgKG1pcHNfaW5zdHJ1Y3Rpb24gX191c2VyICopIHhjcC0+Y3AwX2VwYykpIHsKLQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQkJcmV0dXJuIFNJR0JVUzsKIAkJfQogCQlpZiAoaW5zbiA9PSAwKQpAQCAtMTI3NiwzMyArMTI3OSw1MCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgZnB1ZW11X3N0YXRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBzdW0gPSAwOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXN0cnVjdCBtaXBzX2ZwdV9lbXVsYXRvcl9zdGF0cyAqcHM7CisJCWxvY2FsX3QgKnB2OworCQlwcyA9ICZwZXJfY3B1KGZwdWVtdXN0YXRzLCBjcHUpOworCQlwdiA9ICh2b2lkICopcHMgKyAodW5zaWduZWQgbG9uZylkYXRhOworCQlzdW0gKz0gbG9jYWxfcmVhZChwdik7CisJfQorCSp2YWwgPSBzdW07CisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmb3BzX2ZwdWVtdV9zdGF0LCBmcHVlbXVfc3RhdF9nZXQsIE5VTEwsICIlbGx1XG4iKTsKKwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm1pcHNfZGVidWdmc19kaXI7CiBzdGF0aWMgaW50IF9faW5pdCBkZWJ1Z2ZzX2ZwdWVtdSh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmQsICpkaXI7Ci0JaW50IGk7Ci0Jc3RhdGljIHN0cnVjdCB7Ci0JCWNvbnN0IGNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIGludCAqdjsKLQl9IHZhcnNbXSBfX2luaXRkYXRhID0gewotCQl7ICJlbXVsYXRlZCIsICZmcHVlbXVzdGF0cy5lbXVsYXRlZCB9LAotCQl7ICJsb2FkcyIsICAgICZmcHVlbXVzdGF0cy5sb2FkcyB9LAotCQl7ICJzdG9yZXMiLCAgICZmcHVlbXVzdGF0cy5zdG9yZXMgfSwKLQkJeyAiY3Axb3BzIiwgICAmZnB1ZW11c3RhdHMuY3Axb3BzIH0sCi0JCXsgImNwMXhvcHMiLCAgJmZwdWVtdXN0YXRzLmNwMXhvcHMgfSwKLQkJeyAiZXJyb3JzIiwgICAmZnB1ZW11c3RhdHMuZXJyb3JzIH0sCi0JfTsKIAogCWlmICghbWlwc19kZWJ1Z2ZzX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJmcHVlbXVzdGF0cyIsIG1pcHNfZGVidWdmc19kaXIpOwogCWlmICghZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YXJzKTsgaSsrKSB7Ci0JCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIodmFyc1tpXS5uYW1lLCBTX0lSVUdPLCBkaXIsIHZhcnNbaV0udik7Ci0JCWlmICghZCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKworI2RlZmluZSBGUFVfU1RBVF9DUkVBVEUoTSkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgjTSAsIFNfSVJVR08sIGRpciwJCVwKKwkJCSh2b2lkICopb2Zmc2V0b2Yoc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzLCBNKSwgXAorCQkJJmZvcHNfZnB1ZW11X3N0YXQpOwkJCQlcCisJCWlmICghZCkJCQkJCQkJXAorCQkJcmV0dXJuIC1FTk9NRU07CQkJCQlcCisJfSB3aGlsZSAoMCkKKworCUZQVV9TVEFUX0NSRUFURShlbXVsYXRlZCk7CisJRlBVX1NUQVRfQ1JFQVRFKGxvYWRzKTsKKwlGUFVfU1RBVF9DUkVBVEUoc3RvcmVzKTsKKwlGUFVfU1RBVF9DUkVBVEUoY3Axb3BzKTsKKwlGUFVfU1RBVF9DUkVBVEUoY3AxeG9wcyk7CisJRlBVX1NUQVRfQ1JFQVRFKGVycm9ycyk7CisKIAlyZXR1cm4gMDsKIH0KIF9faW5pdGNhbGwoZGVidWdmc19mcHVlbXUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jCmluZGV4IGRmN2I5ZDkuLjM2ZDk3NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kc2VtdWwuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHNlbXVsLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAllcnIgfD0gX19wdXRfdXNlcihjcGMsICZmci0+ZXBjKTsKIAogCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCXJldHVybiBTSUdCVVM7CiAJfQogCkBAIC0xMzYsNyArMTM2LDcgQEAKIAllcnIgfD0gX19nZXRfdXNlcihjb29raWUsICZmci0+Y29va2llKTsKIAogCWlmICh1bmxpa2VseShlcnIgfHwgKGluc24gIT0gQlJFQUtfTUFUSCkgfHwgKGNvb2tpZSAhPSBCRF9DT09LSUUpKSkgewotCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzc2ltL01ha2VmaWxlIGIvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKaW5kZXggNTdmNDNjMS4uNDFiOTY1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKQEAgLTE3LDggKzE3LDcgQEAKICMgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogIwogCi1vYmoteSA6PSBzaW1fcGxhdGZvcm0ubyBzaW1fc2V0dXAubyBzaW1fbWVtLm8gc2ltX3RpbWUubyBzaW1faW50Lm8gXAotCSBzaW1fY21kbGluZS5vCitvYmoteSA6PSBzaW1fcGxhdGZvcm0ubyBzaW1fc2V0dXAubyBzaW1fbWVtLm8gc2ltX3RpbWUubyBzaW1faW50Lm8KIAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykgKz0gc2ltX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX01JUFNfTVRfU01UQykgKz0gc2ltX3NtdGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHNzaW0vc2ltX2NtZGxpbmUuYyBiL2FyY2gvbWlwcy9taXBzc2ltL3NpbV9jbWRsaW5lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MjQwZTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21pcHNzaW0vc2ltX2NtZGxpbmUuYworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotCi1leHRlcm4gY2hhciBhcmNzX2NtZGxpbmVbXTsKLQotY2hhciAqIF9faW5pdCBwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gYXJjc19jbWRsaW5lOwotfQotCi12b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKLXsKLQkvKiBYWFg6IEdldCBib290IGxpbmUgZnJvbSBlbnZpcm9ubWVudD8gKi8KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzc2ltL3NpbV9zZXR1cC5jIGIvYXJjaC9taXBzL21pcHNzaW0vc2ltX3NldHVwLmMKaW5kZXggMjg3NzY3NS4uMDgyNGY2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHNzaW0vc2ltX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21pcHNzaW0vc2ltX3NldHVwLmMKQEAgLTYxLDcgKzYxLDYgQEAKIAlzZXRfaW9fcG9ydF9iYXNlKDB4YmZkMDAwMDApOwogCiAJcHJfaW5mbygiXG5MSU5VWCBzdGFydGVkLi4uXG4iKTsKLQlwcm9tX2luaXRfY21kbGluZSgpOwogCXByb21fbWVtaW5pdCgpOwogCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01QCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2Vyci1zYjEuYyBiL2FyY2gvbWlwcy9tbS9jZXJyLXNiMS5jCmluZGV4IDFiZDFmMTguLjM1NzEwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jZXJyLXNiMS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jZXJyLXNiMS5jCkBAIC01NjcsMTMgKzU2NywxMCBAQAogCQkJCWRhdGFsbyA9ICgodW5zaWduZWQgbG9uZyBsb25nKWRhdGFsb2hpIDw8IDMyKSB8IGRhdGFsb2xvOwogCQkJCWVjYyA9IGRjX2VjYyhkYXRhbG8pOwogCQkJCWlmIChlY2MgIT0gZGF0YWhpKSB7Ci0JCQkJCWludCBiaXRzID0gMDsKKwkJCQkJaW50IGJpdHM7CiAJCQkJCWJhZF9lY2MgfD0gMSA8PCAoMy1vZmZzZXQpOwogCQkJCQllY2MgXj0gZGF0YWhpOwotCQkJCQl3aGlsZSAoZWNjKSB7Ci0JCQkJCQlpZiAoZWNjICYgMSkgYml0cysrOwotCQkJCQkJZWNjID4+PSAxOwotCQkJCQl9CisJCQkJCWJpdHMgPSBod2VpZ2h0OChlY2MpOwogCQkJCQlyZXMgfD0gKGJpdHMgPT0gMSkgPyBDUDBfQ0VSUkRfREFUQV9TQkUgOiBDUDBfQ0VSUkRfREFUQV9EQkU7CiAJCQkJfQogCQkJCXByaW50aygiICAlMDJYLSUwMTZsbFgiLCBkYXRhaGksIGRhdGFsbyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCA4ZDFmNGYzLi45ZThkMDAzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTQ2Miw3ICs0NjIsOSBAQAogCQkJX19wYV9zeW1ib2woJl9faW5pdF9lbmQpKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVAogdW5zaWduZWQgbG9uZyBwZ2RfY3VycmVudFtOUl9DUFVTXTsKKyNlbmRpZgogLyoKICAqIE9uIDY0LWJpdCB3ZSd2ZSBnb3QgdGhyZWUtbGV2ZWwgcGFnZXRhYmxlcyB3aXRoIGEgc2xpZ2h0bHkKICAqIGRpZmZlcmVudCBsYXlvdXQgLi4uCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGJiMTcxOWEuLjNkMGJhYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0xNjAsNiArMTYwLDEyIEBACiBzdGF0aWMgc3RydWN0IHVhc21fbGFiZWwgbGFiZWxzWzEyOF0gX19jcHVpbml0ZGF0YTsKIHN0YXRpYyBzdHJ1Y3QgdWFzbV9yZWxvYyByZWxvY3NbMTI4XSBfX2NwdWluaXRkYXRhOwogCisjaWZuZGVmIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUCisvKgorICogQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQgaW1wbGllcyA2NCBiaXQgYW5kIGxhY2sgb2YgcGdkX2N1cnJlbnQsCisgKiB3ZSBjYW5ub3QgZG8gcjMwMDAgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcy4KKyAqLworCiAvKgogICogVGhlIFIzMDAwIFRMQiBoYW5kbGVyIGlzIHNpbXBsZS4KICAqLwpAQCAtMTk5LDYgKzIwNSw3IEBACiAKIAlkdW1wX2hhbmRsZXIoKHUzMiAqKWViYXNlLCAzMik7CiB9CisjZW5kaWYgLyogQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQgKi8KIAogLyoKICAqIFRoZSBSNDAwMCBUTEIgaGFuZGxlciBpcyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQuIFdlIGhhdmUgdHdvCkBAIC00OTcsOCArNTA0LDkgQEAKIGJ1aWxkX2dldF9wbWRlNjQodTMyICoqcCwgc3RydWN0IHVhc21fbGFiZWwgKipsLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCiAJCSB1bnNpZ25lZCBpbnQgdG1wLCB1bnNpZ25lZCBpbnQgcHRyKQogeworI2lmbmRlZiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVAogCWxvbmcgcGdkYyA9IChsb25nKXBnZF9jdXJyZW50OwotCisjZW5kaWYKIAkvKgogCSAqIFRoZSB2bWFsbG9jIGhhbmRsaW5nIGlzIG5vdCBpbiB0aGUgaG90cGF0aC4KIAkgKi8KQEAgLTUwNiw3ICs1MTQsMTUgQEAKIAl1YXNtX2lsX2JsdHoocCwgciwgdG1wLCBsYWJlbF92bWFsbG9jKTsKIAkvKiBObyB1YXNtX2lfbm9wIG5lZWRlZCBoZXJlLCBzaW5jZSB0aGUgbmV4dCBpbnNuIGRvZXNuJ3QgdG91Y2ggVE1QLiAqLwogCi0jaWZkZWYgQ09ORklHX1NNUAorI2lmZGVmIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUCisJLyoKKwkgKiAmcGdkIDw8IDExIHN0b3JlZCBpbiBDT05URVhUIFsyMy4uNjNdLgorCSAqLworCVVBU01faV9NRkMwKHAsIHB0ciwgQzBfQ09OVEVYVCk7CisJdWFzbV9pX2RpbnMocCwgcHRyLCAwLCAwLCAyMyk7IC8qIENsZWFyIGxvd2VyIDIzIGJpdHMgb2YgY29udGV4dC4gKi8KKwl1YXNtX2lfb3JpKHAsIHB0ciwgcHRyLCAweDU0MCk7IC8qIDEgMCAgMSAwIDEgIDw8IDYgIHhrcGh5cyBjYWNoZWQgKi8KKwl1YXNtX2lfZHJvdHIocCwgcHRyLCBwdHIsIDExKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NNUCkKICMgaWZkZWYgIENPTkZJR19NSVBTX01UX1NNVEMKIAkvKgogCSAqIFNNVEMgdXNlcyBUQ0JpbmQgdmFsdWUgYXMgIkNQVSIgaW5kZXgKQEAgLTUyMCw3ICs1MzYsNyBAQAogCSAqLwogCXVhc21faV9kbWZjMChwLCBwdHIsIEMwX0NPTlRFWFQpOwogCXVhc21faV9kc3JsKHAsIHB0ciwgcHRyLCAyMyk7Ci0jZW5kaWYKKyMgZW5kaWYKIAlVQVNNX2lfTEFfbW9zdGx5KHAsIHRtcCwgcGdkYyk7CiAJdWFzbV9pX2RhZGR1KHAsIHB0ciwgcHRyLCB0bXApOwogCXVhc21faV9kbWZjMChwLCB0bXAsIEMwX0JBRFZBRERSKTsKQEAgLTEwMzMsNiArMTA0OSw3IEBACiAJaVBURV9MVyhwLCBwdGUsIHB0cik7CiB9CiAKKyNpZm5kZWYgQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQKIC8qCiAgKiBSMzAwMCBzdHlsZSBUTEIgbG9hZC9zdG9yZS9tb2RpZnkgaGFuZGxlcnMuCiAgKi8KQEAgLTExODQsNiArMTIwMSw3IEBACiAKIAlkdW1wX2hhbmRsZXIoaGFuZGxlX3RsYm0sIEFSUkFZX1NJWkUoaGFuZGxlX3RsYm0pKTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVCAqLwogCiAvKgogICogUjQwMDAgc3R5bGUgVExCIGxvYWQvc3RvcmUvbW9kaWZ5IGhhbmRsZXJzLgpAQCAtMTQwMCw2ICsxNDE4LDcgQEAKIAljYXNlIENQVV9UWDM5MTI6CiAJY2FzZSBDUFVfVFgzOTIyOgogCWNhc2UgQ1BVX1RYMzkyNzoKKyNpZm5kZWYgQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQKIAkJYnVpbGRfcjMwMDBfdGxiX3JlZmlsbF9oYW5kbGVyKCk7CiAJCWlmICghcnVuX29uY2UpIHsKIAkJCWJ1aWxkX3IzMDAwX3RsYl9sb2FkX2hhbmRsZXIoKTsKQEAgLTE0MDcsNiArMTQyNiw5IEBACiAJCQlidWlsZF9yMzAwMF90bGJfbW9kaWZ5X2hhbmRsZXIoKTsKIAkJCXJ1bl9vbmNlKys7CiAJCX0KKyNlbHNlCisJCXBhbmljKCJObyBSMzAwMCBUTEIgcmVmaWxsIGhhbmRsZXIiKTsKKyNlbmRpZgogCQlicmVhazsKIAogCWNhc2UgQ1BVX1I2MDAwOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uYyBiL2FyY2gvbWlwcy9tbS91YXNtLmMKaW5kZXggZjQ2NzE5OS4uMGExNjVjNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uYworKysgYi9hcmNoL21pcHMvbW0vdWFzbS5jCkBAIC02MCwxMSArNjAsMTEgQEAKIAlpbnNuX2JlcWwsIGluc25fYmdleiwgaW5zbl9iZ2V6bCwgaW5zbl9ibHR6LCBpbnNuX2JsdHpsLAogCWluc25fYm5lLCBpbnNuX2NhY2hlLCBpbnNuX2RhZGR1LCBpbnNuX2RhZGRpdSwgaW5zbl9kbWZjMCwKIAlpbnNuX2RtdGMwLCBpbnNuX2RzbGwsIGluc25fZHNsbDMyLCBpbnNuX2RzcmEsIGluc25fZHNybCwKLQlpbnNuX2RzcmwzMiwgaW5zbl9kc3VidSwgaW5zbl9lcmV0LCBpbnNuX2osIGluc25famFsLCBpbnNuX2pyLAotCWluc25fbGQsIGluc25fbGwsIGluc25fbGxkLCBpbnNuX2x1aSwgaW5zbl9sdywgaW5zbl9tZmMwLAorCWluc25fZHNybDMyLCBpbnNuX2Ryb3RyLCBpbnNuX2RzdWJ1LCBpbnNuX2VyZXQsIGluc25faiwgaW5zbl9qYWwsCisJaW5zbl9qciwgaW5zbl9sZCwgaW5zbl9sbCwgaW5zbl9sbGQsIGluc25fbHVpLCBpbnNuX2x3LCBpbnNuX21mYzAsCiAJaW5zbl9tdGMwLCBpbnNuX29yaSwgaW5zbl9wcmVmLCBpbnNuX3JmZSwgaW5zbl9zYywgaW5zbl9zY2QsCiAJaW5zbl9zZCwgaW5zbl9zbGwsIGluc25fc3JhLCBpbnNuX3NybCwgaW5zbl9zdWJ1LCBpbnNuX3N3LAotCWluc25fdGxicCwgaW5zbl90bGJ3aSwgaW5zbl90bGJ3ciwgaW5zbl94b3IsIGluc25feG9yaQorCWluc25fdGxicCwgaW5zbl90bGJ3aSwgaW5zbl90bGJ3ciwgaW5zbl94b3IsIGluc25feG9yaSwgaW5zbl9kaW5zCiB9OwogCiBzdHJ1Y3QgaW5zbiB7CkBAIC0xMDQsNiArMTA0LDcgQEAKIAl7IGluc25fZHNyYSwgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBkc3JhX29wKSwgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX2RzcmwsIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgZHNybF9vcCksIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9kc3JsMzIsIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgZHNybDMyX29wKSwgUlQgfCBSRCB8IFJFIH0sCisJeyBpbnNuX2Ryb3RyLCBNKHNwZWNfb3AsIDEsIDAsIDAsIDAsIGRzcmxfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHN1YnUsIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgZHN1YnVfb3ApLCBSUyB8IFJUIHwgUkQgfSwKIAl7IGluc25fZXJldCwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCBlcmV0X29wKSwgIDAgfSwKIAl7IGluc25faiwgIE0oal9vcCwgMCwgMCwgMCwgMCwgMCksICBKSU1NIH0sCkBAIC0xMzIsNiArMTMzLDcgQEAKIAl7IGluc25fdGxid3IsICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxid3Jfb3ApLCAgMCB9LAogCXsgaW5zbl94b3IsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHhvcl9vcCksICBSUyB8IFJUIHwgUkQgfSwKIAl7IGluc25feG9yaSwgIE0oeG9yaV9vcCwgMCwgMCwgMCwgMCwgMCksICBSUyB8IFJUIHwgVUlNTSB9LAorCXsgaW5zbl9kaW5zLCBNKHNwZWMzX29wLCAwLCAwLCAwLCAwLCBkaW5zX29wKSwgUlMgfCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25faW52YWxpZCwgMCwgMCB9CiB9OwogCkBAIC0zMDQsNiArMzA2LDEyIEBACiAJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjKTsJCVwKIH0KIAorI2RlZmluZSBJX3UydTFtc2J1MyhvcCkJCQkJCVwKK0lwX3UydTFtc2J1MyhvcCkJCQkJCVwKK3sJCQkJCQkJXAorCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYytkLTEsIGMpOwlcCit9CisKICNkZWZpbmUgSV91MXUyKG9wKQkJCQkJXAogSXBfdTF1MihvcCkJCQkJCQlcCiB7CQkJCQkJCVwKQEAgLTM0OSw2ICszNTcsNyBAQAogSV91MnUxdTMoX2RzcmEpCiBJX3UydTF1MyhfZHNybCkKIElfdTJ1MXUzKF9kc3JsMzIpCitJX3UydTF1MyhfZHJvdHIpCiBJX3UzdTF1MihfZHN1YnUpCiBJXzAoX2VyZXQpCiBJX3UxKF9qKQpAQCAtMzc3LDYgKzM4Niw3IEBACiBJXzAoX3RsYndyKQogSV91M3UxdTIoX3hvcikKIElfdTJ1MXUzKF94b3JpKQorSV91MnUxbXNidTMoX2RpbnMpOwogCiAvKiBIYW5kbGUgbGFiZWxzLiAqLwogdm9pZCBfX2NwdWluaXQgdWFzbV9idWlsZF9sYWJlbChzdHJ1Y3QgdWFzbV9sYWJlbCAqKmxhYiwgdTMyICphZGRyLCBpbnQgbGlkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uaCBiL2FyY2gvbWlwcy9tbS91YXNtLmgKaW5kZXggYzZkMWUzZC4uM2QxNTNlZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uaAorKysgYi9hcmNoL21pcHMvbW0vdWFzbS5oCkBAIC0zNCw2ICszNCwxMSBAQAogdm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKIHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHNpZ25lZCBpbnQgYykKIAorI2RlZmluZSBJcF91MnUxbXNidTMob3ApCQkJCQkJXAordm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKK3Vhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjLAlcCisJICAgdW5zaWduZWQgaW50IGQpCisKICNkZWZpbmUgSXBfdTF1MihvcCkJCQkJCQkJXAogdm9pZCBfX2NwdWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKIApAQCAtNjUsNiArNzAsNyBAQAogSXBfdTJ1MXUzKF9kc3JhKTsKIElwX3UydTF1MyhfZHNybCk7CiBJcF91MnUxdTMoX2RzcmwzMik7CitJcF91MnUxdTMoX2Ryb3RyKTsKIElwX3UzdTF1MihfZHN1YnUpOwogSXBfMChfZXJldCk7CiBJcF91MShfaik7CkBAIC05Myw2ICs5OSw3IEBACiBJcF8wKF90bGJ3cik7CiBJcF91M3UxdTIoX3hvcik7CiBJcF91MnUxdTMoX3hvcmkpOworSXBfdTJ1MW1zYnUzKF9kaW5zKTsKIAogLyogSGFuZGxlIGxhYmVscy4gKi8KIHN0cnVjdCB1YXNtX2xhYmVsIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCmluZGV4IDkwMzVjNjQuLmIyNzQxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwpAQCAtNTUsNyArNTUsNyBAQAogCWNoYXIgKm1lbXNpemVfc3RyOwogCXVuc2lnbmVkIGludCBtZW1zaXplOwogCWNoYXIgKnB0cjsKLQlzdGF0aWMgY2hhciBjbWRsaW5lW0NMX1NJWkVdIF9faW5pdGRhdGE7CisJc3RhdGljIGNoYXIgY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKIAogCS8qIG90aGVyd2lzZSBsb29rIGluIHRoZSBlbnZpcm9ubWVudCAqLwogCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKaW5kZXggMzA1MzNiYS4uM2E0NjdjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBueDgzM3hfcGljX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICJQTlgtUElDIiwKKwkubmFtZSA9ICJQTlgtUElDIiwKIAkuc3RhcnR1cCA9IHBueDgzM3hfc3RhcnR1cF9waWNfaXJxLAogCS5zaHV0ZG93biA9IHBueDgzM3hfc2h1dGRvd25fcGljX2lycSwKIAkuZW5hYmxlID0gcG54ODMzeF9lbmFibGVfcGljX2lycSwKQEAgLTMwNSw3ICszMDUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbng4MzN4X2dwaW9faXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIlBOWC1HUElPIiwKKwkubmFtZSA9ICJQTlgtR1BJTyIsCiAJLnN0YXJ0dXAgPSBwbng4MzN4X3N0YXJ0dXBfZ3Bpb19pcnEsCiAJLnNodXRkb3duID0gcG54ODMzeF9kaXNhYmxlX2dwaW9faXJxLAogCS5lbmFibGUgPSBwbng4MzN4X2VuYWJsZV9ncGlvX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwppbmRleCA1NzVjZDE0Li40NzVmZjQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIExvb25nc29uMiBwZXJmb3JtYW5jZSBjb3VudGVyIGRyaXZlciBmb3Igb3Byb2ZpbGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KICAqIEF1dGhvcjogWWFuaHVhIDx5YW5oQGxlbW90ZS5jb20+CiAgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CiAgKgpAQCAtMTI1LDYgKzEyNSw5IEBACiAJICovCiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoZSBpcnEgYmVsb25ncyB0byBtZSAqLworCWVuYWJsZWQgPSByZWFkX2MwX3BlcmZjbnQoKSAmIExPT05HU09OMl9QRVJGQ05UX0lOVF9FTjsKKwlpZiAoIWVuYWJsZWQpCisJCXJldHVybiBJUlFfTk9ORTsKIAllbmFibGVkID0gcmVnLmNudDFfZW5hYmxlZCB8IHJlZy5jbnQyX2VuYWJsZWQ7CiAJaWYgKCFlbmFibGVkKQogCQlyZXR1cm4gSVJRX05PTkU7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQppbmRleCA5MWJmZTczLi5jOTIwOWNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKQEAgLTIyLDEzICsyMiwxMyBAQAogIwogIyBUaGVzZSBhcmUgc3RpbGwgcHJldHR5IG11Y2ggaW4gdGhlIG9sZCBzdGF0ZSwgd2F0Y2gsIGdvIGJsaW5kLgogIwotb2JqLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCSs9IG9wcy10aXRhbi5vIHBjaS1leGNpdGUubyBmaXh1cC1leGNpdGUubwogb2JqLSQoQ09ORklHX0xBU0FUKQkJKz0gcGNpLWxhc2F0Lm8KIG9iai0kKENPTkZJR19NSVBTX0NPQkFMVCkJKz0gZml4dXAtY29iYWx0Lm8KIG9iai0kKENPTkZJR19TT0NfQVUxNTAwKQkrPSBmaXh1cC1hdTEwMDAubyBvcHMtYXUxMDAwLm8KIG9iai0kKENPTkZJR19TT0NfQVUxNTUwKQkrPSBmaXh1cC1hdTEwMDAubyBvcHMtYXUxMDAwLm8KIG9iai0kKENPTkZJR19TT0NfUE5YODU1MCkJKz0gZml4dXAtcG54ODU1MC5vIG9wcy1wbng4NTUwLm8KLW9iai0kKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKQkrPSBmaXh1cC1mdWxvb25nMmUubyBvcHMtYm9uaXRvNjQubworb2JqLSQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpCSs9IGZpeHVwLWZ1bG9vbmcyZS5vIG9wcy1sb29uZ3NvbjIubworb2JqLSQoQ09ORklHX0xFTU9URV9NQUNIMkYpCSs9IGZpeHVwLWxlbW90ZTJmLm8gb3BzLWxvb25nc29uMi5vCiBvYmotJChDT05GSUdfTUlQU19NQUxUQSkJKz0gZml4dXAtbWFsdGEubwogb2JqLSQoQ09ORklHX1BNQ19NU1A3MTIwX0dXKQkrPSBmaXh1cC1wbWNtc3AubyBvcHMtcG1jbXNwLm8KIG9iai0kKENPTkZJR19QTUNfTVNQNzEyMF9FVkFMKQkrPSBmaXh1cC1wbWNtc3AubyBvcHMtcG1jbXNwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtZXhjaXRlLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWV4Y2l0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDY0ZDlmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtZXhjaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRwotICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8ZXhjaXRlLmg+Ci0KLWludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQlpZiAocGluID09IDApCi0JCXJldHVybiAtMTsKLQotCXJldHVybiBVU0JfSVJROwkJLyogVVNCIGNvbnRyb2xsZXIgaXMgdGhlIG9ubHkgUENJIGRldmljZSAqLwotfQotCi0vKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCi1pbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWZ1bG9vbmcyZS5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1mdWxvb25nMmUuYwppbmRleCAwYzRjN2E4Li40ZjZkOGRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWZ1bG9vbmcyZS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtZnVsb29uZzJlLmMKQEAgLTEzLDcgKzEzLDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvYm9uaXRvNjQuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKIC8qIFNvdXRoIGJyaWRnZSBzbG90IG51bWJlciBpcyBzZXQgYnkgdGhlIHBjaSBwcm9iZSBwcm9jZXNzICovCiBzdGF0aWMgdTggc2Jfc2xvdCA9IDU7CkBAIC0zNSw3ICszNiw3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWlycSA9IEJPTklUT19JUlFfQkFTRSArIDI1ICsgcGluOworCQlpcnEgPSBMT09OR1NPTl9JUlFfQkFTRSArIDI1ICsgcGluOwogCX0KIAlyZXR1cm4gaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmMmVkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBMZW1vdGUgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA0IElDVCBDQVMKKyAqIEF1dGhvcjogTGkgeGlhb3l1LCBsaXh5QGljdC5hYy5jbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8bG9vbmdzb24uaD4KKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKworLyogUENJIGludGVycnVwdCBwaW5zCisgKgorICogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLCBvciB5b3Ugc2hvdWxkIGNvbnNpZGVyIGxvb25nc29uMmYgaW50ZXJydXB0CisgKiByZWdpc3RlciBhbmQgeW91ciBwY2kgY2FyZCBkaXNwYXRjaAorICovCisKKyNkZWZpbmUgUENJQQkJNAorI2RlZmluZSBQQ0lCCQk1CisjZGVmaW5lIFBDSUMJCTYKKyNkZWZpbmUgUENJRAkJNworCisvKiBhbGwgdGhlIHBjaSBkZXZpY2UgaGFzIHRoZSBQQ0lBIHBpbiwgY2hlY2sgdGhlIGRhdGFzaGVldC4gKi8KK3N0YXRpYyBjaGFyIGlycV90YWJbXVs1XSBfX2luaXRkYXRhID0geworCS8qICAgICAgSU5UQSAgICBJTlRCICAgIElOVEMgICAgSU5URCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDExOiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAxMjogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMTM6IFVudXNlZCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDE0OiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAxNTogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMTY6IFVudXNlZCAqLworCXswLCBQQ0lBLCAwLCAwLCAwfSwJLyogIDE3OiBSVEw4MTEwLTAgKi8KKwl7MCwgUENJQiwgMCwgMCwgMH0sCS8qICAxODogUlRMODExMC0xICovCisJezAsIFBDSUMsIDAsIDAsIDB9LAkvKiAgMTk6IFNpSTMxMTQgKi8KKwl7MCwgUENJRCwgMCwgMCwgMH0sCS8qICAyMDogMy1wb3J0cyBuZWMgdXNiICovCisJezAsIFBDSUEsIFBDSUIsIFBDSUMsIFBDSUR9LAkvKiAgMjE6IFBDSS1TTE9UICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMjI6IFVudXNlZCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDIzOiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAyNDogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMjU6IFVudXNlZCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDI2OiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAyNzogVW51c2VkICovCit9OworCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IHZpcnE7CisKKwlpZiAoKFBDSV9TTE9UKGRldi0+ZGV2Zm4pICE9IFBDSV9JRFNFTF9DUzU1MzYpCisJICAgICYmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA8IDMyKSkgeworCQl2aXJxID0gaXJxX3RhYltzbG90XVtwaW5dOworCQlwcmludGsoS0VSTl9JTkZPICJzbG90OiAlZCwgcGluOiAlZCwgaXJxOiAlZFxuIiwgc2xvdCwgcGluLAorCQkgICAgICAgdmlycSArIExPT05HU09OX0lSUV9CQVNFKTsKKwkJaWYgKHZpcnEgIT0gMCkKKwkJCXJldHVybiBMT09OR1NPTl9JUlFfQkFTRSArIHZpcnE7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gUENJX0lEU0VMX0NTNTUzNikgewkvKiAgY3M1NTM2ICovCisJCXN3aXRjaCAoUENJX0ZVTkMoZGV2LT5kZXZmbikpIHsKKwkJY2FzZSAyOgorCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAorCQkJCQkgICAgICBDUzU1MzZfSURFX0lOVFIpOworCQkJcmV0dXJuIENTNTUzNl9JREVfSU5UUjsJLyogIGZvciBJREUgKi8KKwkJY2FzZSAzOgorCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAorCQkJCQkgICAgICBDUzU1MzZfQUNDX0lOVFIpOworCQkJcmV0dXJuIENTNTUzNl9BQ0NfSU5UUjsJLyogIGZvciBBVURJTyAqLworCQljYXNlIDQ6CS8qICBmb3IgT0hDSSAqLworCQljYXNlIDU6CS8qICBmb3IgRUhDSSAqLworCQljYXNlIDY6CS8qICBmb3IgVURDICovCisJCWNhc2UgNzoJLyogIGZvciBPVEcgKi8KKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKKwkJCQkJICAgICAgQ1M1NTM2X1VTQl9JTlRSKTsKKwkJCXJldHVybiBDUzU1MzZfVVNCX0lOVFI7CisJCX0KKwkJcmV0dXJuIGRldi0+aXJxOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIiBzdHJhbmdlIHBjaSBzbG90IG51bWJlci5cbiIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworLyogQ1M1NTM2IFNQRUMuIGZpeHVwICovCitzdGF0aWMgdm9pZCBfX2luaXQgbG9vbmdzb25fY3M1NTM2X2lzYV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKiB0aGUgdWFydDEgYW5kIHVhcnQyIGludGVycnVwdCBpbiBQSUMgaXMgZW5hYmxlZCBhcyBkZWZhdWx0ICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfVUFSVDFfSU5UX1JFRywgMSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfVUFSVDJfSU5UX1JFRywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsb29uZ3Nvbl9jczU1MzZfaWRlX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCS8qIHNldHRpbmcgdGhlIG11dGV4IHBpbiBhcyBJREUgZnVuY3Rpb24gKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9JREVfQ0ZHX1JFRywKKwkJCSAgICAgICBDUzU1MzZfSURFX0ZMQVNIX1NJR05BVFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsb29uZ3Nvbl9jczU1MzZfYWNjX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCS8qIGVuYWJsZSB0aGUgQVVESU8gaW50ZXJydXB0IGluIFBJQyAgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9BQ0NfSU5UX1JFRywgMSk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4YzApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbG9vbmdzb25fY3M1NTM2X29oY2lfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyogZW5hYmxlIHRoZSBPSENJIGludGVycnVwdCBpbiBQSUMgKi8KKwkvKiBUSEUgT0hDSSwgRUhDSSwgVURDLCBPVEcgYXJlIHNoYXJlZCB3aXRoIGludGVycnVwdCBpbiBQSUMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9PSENJX0lOVF9SRUcsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbG9vbmdzb25fY3M1NTM2X2VoY2lfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTMyIGhpLCBsbzsKKworCS8qIFNlcmlhbCBzaG9ydCBkZXRlY3QgZW5hYmxlICovCisJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAmaGksICZsbyk7CisJX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksIGxvKTsKKworCS8qIHNldHRpbmcgdGhlIFVTQjIuMCBtaWNybyBmcmFtZSBsZW5ndGggKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9FSENJX0ZMQURKX1JFRywgMHgyMDAwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxvb25nc29uX25lY19maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTAsICZ2YWwpOworCS8qIE9ubHkgMiBwb3J0IGJlIHVzZWQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTAsICh2YWwgJiB+MykgfCAweDIpOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EsCisJCQkgbG9vbmdzb25fY3M1NTM2X2lzYV9maXh1cCk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9PSEMsCisJCQkgbG9vbmdzb25fY3M1NTM2X29oY2lfZml4dXApOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRUhDLAorCQkJIGxvb25nc29uX2NzNTUzNl9laGNpX2ZpeHVwKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPLAorCQkJIGxvb25nc29uX2NzNTUzNl9hY2NfZml4dXApOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFLAorCQkJIGxvb25nc29uX2NzNTUzNl9pZGVfZml4dXApOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkVDLCBQQ0lfREVWSUNFX0lEX05FQ19VU0IsCisJCQkgbG9vbmdzb25fbmVjX2ZpeHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWJvbml0bzY0LmMgYi9hcmNoL21pcHMvcGNpL29wcy1ib25pdG82NC5jCmluZGV4IDU0ZTU1ZTcuLjFiM2UwM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWJvbml0bzY0LmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtYm9uaXRvNjQuYwpAQCAtMjksMTMgKzI5LDggQEAKICNkZWZpbmUgUENJX0FDQ0VTU19SRUFEICAwCiAjZGVmaW5lIFBDSV9BQ0NFU1NfV1JJVEUgMQogCi0jaWZkZWYgQ09ORklHX0xFTU9URV9GVUxPT05HMkUKLSNkZWZpbmUgQ0ZHX1NQQUNFX1JFRyhvZmZzZXQpICh2b2lkICopQ0tTRUcxQUREUihCT05JVE9fUENJQ0ZHX0JBU0UgfCAob2Zmc2V0KSkKLSNkZWZpbmUgSURfU0VMX0JFR0lOIDExCi0jZWxzZQogI2RlZmluZSBDRkdfU1BBQ0VfUkVHKG9mZnNldCkgKHZvaWQgKilDS1NFRzFBRERSKF9wY2ljdHJsX2Jvbml0b19wY2ljZmcgKyAob2Zmc2V0KSkKICNkZWZpbmUgSURfU0VMX0JFR0lOIDEwCi0jZW5kaWYKICNkZWZpbmUgTUFYX0RFVl9OVU0gKDMxIC0gSURfU0VMX0JFR0lOKQogCiAKQEAgLTc3LDEwICs3Miw4IEBACiAJYWRkcnAgPSBDRkdfU1BBQ0VfUkVHKGFkZHIgJiAweGZmZmYpOwogCWlmIChhY2Nlc3NfdHlwZSA9PSBQQ0lfQUNDRVNTX1dSSVRFKSB7CiAJCXdyaXRlbChjcHVfdG9fbGUzMigqZGF0YSksIGFkZHJwKTsKLSNpZm5kZWYgQ09ORklHX0xFTU9URV9GVUxPT05HMkUKIAkJLyogV2FpdCB0aWxsIGRvbmUgKi8KIAkJd2hpbGUgKEJPTklUT19QQ0lNU1RBVCAmIDB4Rik7Ci0jZW5kaWYKIAl9IGVsc2UgewogCQkqZGF0YSA9IGxlMzJfdG9fY3B1KHJlYWRsKGFkZHJwKSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvcGNpL29wcy1sb29uZ3NvbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTVkM2RhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBmdWxvb25nMmUgc3BlY2lmaWMgUENJIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDA0ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCUF1dGhvcnM6IENhcnN0ZW4gTGFuZ2dhYXJkIDxjYXJzdGVubEBtaXBzLmNvbT4KKyAqCQkgTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQG1pcHMuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKKyNpZmRlZiBDT05GSUdfQ1M1NTM2CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjZW5kaWYKKworI2RlZmluZSBQQ0lfQUNDRVNTX1JFQUQgIDAKKyNkZWZpbmUgUENJX0FDQ0VTU19XUklURSAxCisKKyNkZWZpbmUgQ0ZHX1NQQUNFX1JFRyhvZmZzZXQpIFwKKwkodm9pZCAqKUNLU0VHMUFERFIoTE9PTkdTT05fUENJQ0ZHX0JBU0UgfCAob2Zmc2V0KSkKKyNkZWZpbmUgSURfU0VMX0JFR0lOIDExCisjZGVmaW5lIE1BWF9ERVZfTlVNICgzMSAtIElEX1NFTF9CRUdJTikKKworCitzdGF0aWMgaW50IGxvb25nc29uX3BjaWJpb3NfY29uZmlnX2FjY2Vzcyh1bnNpZ25lZCBjaGFyIGFjY2Vzc190eXBlLAorCQkJCSAgICAgIHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCQkJICAgICAgdTMyICpkYXRhKQoreworCXUzMiBidXNudW0gPSBidXMtPm51bWJlcjsKKwl1MzIgYWRkciwgdHlwZTsKKwl1MzIgZHVtbXk7CisJdm9pZCAqYWRkcnA7CisJaW50IGRldmljZSA9IFBDSV9TTE9UKGRldmZuKTsKKwlpbnQgZnVuY3Rpb24gPSBQQ0lfRlVOQyhkZXZmbik7CisJaW50IHJlZyA9IHdoZXJlICYgfjM7CisKKwlpZiAoYnVzbnVtID09IDApIHsKKwkJLyogYm9hcmQtc3BlY2lmaWMgcGFydCxjdXJyZW50bHksb25seSBmdWxvb25nMmYseWVlbG9vbmcyZgorCQkgKiB1c2UgQ1M1NTM2LCBmdWxvb25nMmUgdXNlIHZpYTY4NmIsIGdkaXVtIGhhcyBubworCQkgKiBzb3V0aCBicmlkZ2UKKwkJICovCisjaWZkZWYgQ09ORklHX0NTNTUzNgorCQkvKiBjczU1MzZfcGNpX2NvbmZfcmVhZDQvd3JpdGU0KCkgd2lsbCBjYWxsIF9yZG1zci9fd3Jtc3IoKSB0bworCQkgKiBhY2Nlc3MgdGhlIHJlZ3N0ZXJzIFBDSV9NU1JfQUREUiwgUENJX01TUl9EQVRBX0xPLAorCQkgKiBQQ0lfTVNSX0RBVEFfSEksIHdoaWNoIGlzIGJpZ2dlciB0aGFuIFBDSV9NU1JfQ1RSTCwgc28sIGl0CisJCSAqIHdpbGwgbm90IGdvIHRoaXMgYnJhbmNoLCBidXQgdGhlIG90aGVycy4gc28sIG5vIGNhbGxpbmcgZGVhZAorCQkgKiBsb29wIGhlcmUuCisJCSAqLworCQlpZiAoKFBDSV9JRFNFTF9DUzU1MzYgPT0gZGV2aWNlKSAmJiAocmVnIDwgUENJX01TUl9DVFJMKSkgeworCQkJc3dpdGNoIChhY2Nlc3NfdHlwZSkgeworCQkJY2FzZSBQQ0lfQUNDRVNTX1JFQUQ6CisJCQkJKmRhdGEgPSBjczU1MzZfcGNpX2NvbmZfcmVhZDQoZnVuY3Rpb24sIHJlZyk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9BQ0NFU1NfV1JJVEU6CisJCQkJY3M1NTM2X3BjaV9jb25mX3dyaXRlNChmdW5jdGlvbiwgcmVnLCAqZGF0YSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCisJCS8qIFR5cGUgMCBjb25maWd1cmF0aW9uIGZvciBvbmJvYXJkIFBDSSBidXMgKi8KKwkJaWYgKGRldmljZSA+IE1BWF9ERVZfTlVNKQorCQkJcmV0dXJuIC0xOworCisJCWFkZHIgPSAoMSA8PCAoZGV2aWNlICsgSURfU0VMX0JFR0lOKSkgfCAoZnVuY3Rpb24gPDwgOCkgfCByZWc7CisJCXR5cGUgPSAwOworCX0gZWxzZSB7CisJCS8qIFR5cGUgMSBjb25maWd1cmF0aW9uIGZvciBvZmZib2FyZCBQQ0kgYnVzICovCisJCWFkZHIgPSAoYnVzbnVtIDw8IDE2KSB8IChkZXZpY2UgPDwgMTEpIHwgKGZ1bmN0aW9uIDw8IDgpIHwgcmVnOworCQl0eXBlID0gMHgxMDAwMDsKKwl9CisKKwkvKiBDbGVhciBhYm9ydHMgKi8KKwlMT09OR1NPTl9QQ0lDTUQgfD0gTE9PTkdTT05fUENJQ01EX01BQk9SVF9DTFIgfCBcCisJCQkJTE9PTkdTT05fUENJQ01EX01UQUJPUlRfQ0xSOworCisJTE9PTkdTT05fUENJTUFQX0NGRyA9IChhZGRyID4+IDE2KSB8IHR5cGU7CisKKwkvKiBGbHVzaCBCb25pdG8gcmVnaXN0ZXIgYmxvY2sgKi8KKwlkdW1teSA9IExPT05HU09OX1BDSU1BUF9DRkc7CisJbW1pb3diKCk7CisKKwlhZGRycCA9IENGR19TUEFDRV9SRUcoYWRkciAmIDB4ZmZmZik7CisJaWYgKGFjY2Vzc190eXBlID09IFBDSV9BQ0NFU1NfV1JJVEUpCisJCXdyaXRlbChjcHVfdG9fbGUzMigqZGF0YSksIGFkZHJwKTsKKwllbHNlCisJCSpkYXRhID0gbGUzMl90b19jcHUocmVhZGwoYWRkcnApKTsKKworCS8qIERldGVjdCBNYXN0ZXIvVGFyZ2V0IGFib3J0ICovCisJaWYgKExPT05HU09OX1BDSUNNRCAmIChMT09OR1NPTl9QQ0lDTURfTUFCT1JUX0NMUiB8CisJCQkgICAgIExPT05HU09OX1BDSUNNRF9NVEFCT1JUX0NMUikpIHsKKwkJLyogRXJyb3Igb2NjdXJyZWQgKi8KKworCQkvKiBDbGVhciBiaXRzICovCisJCUxPT05HU09OX1BDSUNNRCB8PSAoTE9PTkdTT05fUENJQ01EX01BQk9SVF9DTFIgfAorCQkJCSAgTE9PTkdTT05fUENJQ01EX01UQUJPUlRfQ0xSKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworCisvKgorICogV2UgY2FuJ3QgYWRkcmVzcyA4IGFuZCAxNiBiaXQgd29yZHMgZGlyZWN0bHkuICBJbnN0ZWFkIHdlIGhhdmUgdG8KKyAqIHJlYWQvd3JpdGUgYSAzMmJpdCB3b3JkIGFuZCBtYXNrL21vZGlmeSB0aGUgZGF0YSB3ZSBhY3R1YWxseSB3YW50LgorICovCitzdGF0aWMgaW50IGxvb25nc29uX3BjaWJpb3NfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCXUzMiBkYXRhID0gMDsKKworCWlmICgoc2l6ZSA9PSAyKSAmJiAod2hlcmUgJiAxKSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKwllbHNlIGlmICgoc2l6ZSA9PSA0KSAmJiAod2hlcmUgJiAzKSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCWlmIChsb29uZ3Nvbl9wY2liaW9zX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLCB3aGVyZSwKKwkJCQkgICAgICAgJmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc2l6ZSA9PSAxKQorCQkqdmFsID0gKGRhdGEgPj4gKCh3aGVyZSAmIDMpIDw8IDMpKSAmIDB4ZmY7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkqdmFsID0gKGRhdGEgPj4gKCh3aGVyZSAmIDMpIDw8IDMpKSAmIDB4ZmZmZjsKKwllbHNlCisJCSp2YWwgPSBkYXRhOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBsb29uZ3Nvbl9wY2liaW9zX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKChzaXplID09IDIpICYmICh3aGVyZSAmIDEpKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCWVsc2UgaWYgKChzaXplID09IDQpICYmICh3aGVyZSAmIDMpKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCisJaWYgKHNpemUgPT0gNCkKKwkJZGF0YSA9IHZhbDsKKwllbHNlIHsKKwkJaWYgKGxvb25nc29uX3BjaWJpb3NfY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1JFQUQsIGJ1cywgZGV2Zm4sCisJCQkJCXdoZXJlLCAmZGF0YSkpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKHNpemUgPT0gMSkKKwkJCWRhdGEgPSAoZGF0YSAmIH4oMHhmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJCQkJKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOworCQllbHNlIGlmIChzaXplID09IDIpCisJCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmZmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJCQkJKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOworCX0KKworCWlmIChsb29uZ3Nvbl9wY2liaW9zX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19XUklURSwgYnVzLCBkZXZmbiwgd2hlcmUsCisJCQkJICAgICAgICZkYXRhKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RydWN0IHBjaV9vcHMgbG9vbmdzb25fcGNpX29wcyA9IHsKKwkucmVhZCA9IGxvb25nc29uX3BjaWJpb3NfcmVhZCwKKwkud3JpdGUgPSBsb29uZ3Nvbl9wY2liaW9zX3dyaXRlCit9OworCisjaWZkZWYgQ09ORklHX0NTNTUzNgordm9pZCBfcmRtc3IodTMyIG1zciwgdTMyICpoaSwgdTMyICpsbykKK3sKKwlzdHJ1Y3QgcGNpX2J1cyBidXMgPSB7CisJCS5udW1iZXIgPSBQQ0lfQlVTX0NTNTUzNgorCX07CisJdTMyIGRldmZuID0gUENJX0RFVkZOKFBDSV9JRFNFTF9DUzU1MzYsIDApOworCWxvb25nc29uX3BjaWJpb3Nfd3JpdGUoJmJ1cywgZGV2Zm4sIFBDSV9NU1JfQUREUiwgNCwgbXNyKTsKKwlsb29uZ3Nvbl9wY2liaW9zX3JlYWQoJmJ1cywgZGV2Zm4sIFBDSV9NU1JfREFUQV9MTywgNCwgbG8pOworCWxvb25nc29uX3BjaWJpb3NfcmVhZCgmYnVzLCBkZXZmbiwgUENJX01TUl9EQVRBX0hJLCA0LCBoaSk7Cit9CitFWFBPUlRfU1lNQk9MKF9yZG1zcik7CisKK3ZvaWQgX3dybXNyKHUzMiBtc3IsIHUzMiBoaSwgdTMyIGxvKQoreworCXN0cnVjdCBwY2lfYnVzIGJ1cyA9IHsKKwkJLm51bWJlciA9IFBDSV9CVVNfQ1M1NTM2CisJfTsKKwl1MzIgZGV2Zm4gPSBQQ0lfREVWRk4oUENJX0lEU0VMX0NTNTUzNiwgMCk7CisJbG9vbmdzb25fcGNpYmlvc193cml0ZSgmYnVzLCBkZXZmbiwgUENJX01TUl9BRERSLCA0LCBtc3IpOworCWxvb25nc29uX3BjaWJpb3Nfd3JpdGUoJmJ1cywgZGV2Zm4sIFBDSV9NU1JfREFUQV9MTywgNCwgbG8pOworCWxvb25nc29uX3BjaWJpb3Nfd3JpdGUoJmJ1cywgZGV2Zm4sIFBDSV9NU1JfREFUQV9ISSwgNCwgaGkpOworfQorRVhQT1JUX1NZTUJPTChfd3Jtc3IpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWV4Y2l0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU2ODc2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWV4Y2l0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCi0gKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqICBCYXNlZCBvbiB0aGUgUE1DLVNpZXJyYSBZb3NlbWl0ZSBib2FyZCBzdXBwb3J0IGJ5IFJhbGYgQmFlY2hsZS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgotI2luY2x1ZGUgPGV4Y2l0ZS5oPgotCi0KLWV4dGVybiBzdHJ1Y3QgcGNpX29wcyB0aXRhbl9wY2lfb3BzOwotCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UKLQltZW1fcmVzb3VyY2UgPSAJewotCQkubmFtZQk9ICJQQ0kgbWVtb3J5IiwKLQkJLnN0YXJ0CT0gRVhDSVRFX1BIWVNfUENJX01FTSwKLQkJLmVuZAk9IEVYQ0lURV9QSFlTX1BDSV9NRU0gKyBFWENJVEVfU0laRV9QQ0lfTUVNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCWlvX3Jlc291cmNlID0gewotCQkubmFtZQk9ICJQQ0kgSS9PIiwKLQkJLnN0YXJ0CT0gRVhDSVRFX1BIWVNfUENJX0lPLAotCQkuZW5kCT0gRVhDSVRFX1BIWVNfUENJX0lPICsgRVhDSVRFX1NJWkVfUENJX0lPIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotCX07Ci0KLQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBieF9jb250cm9sbGVyID0gewotCS5wY2lfb3BzCT0gJnRpdGFuX3BjaV9vcHMsCi0JLm1lbV9yZXNvdXJjZQk9ICZtZW1fcmVzb3VyY2UsCi0JLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwVUwsCi0JLmlvX3Jlc291cmNlCT0gJmlvX3Jlc291cmNlLAotCS5pb19vZmZzZXQJPSAweDAwMDAwMDAwVUwKLX07Ci0KLQotc3RhdGljIGNoYXIKLQlpb3BhZ2VfZmFpbGVkW10gX19pbml0ZGF0YSAgID0gIkNhbm5vdCBhbGxvY2F0ZSBQQ0kgSS9PIHBhZ2UiLAotCW1vZGViaXRzX25vX3BjaVtdIF9faW5pdGRhdGEgPSAiUENJIGlzIG5vdCBjb25maWd1cmVkIGluIG1vZGUgYml0cyI7Ci0KLSNkZWZpbmUgUk05MDAweDJfT0NEX0hUU0MJMHgwNjA0Ci0jZGVmaW5lIFJNOTAwMHgyX09DRF9IVEJITAkweDA2MGMKLSNkZWZpbmUgUk05MDAweDJfT0NEX1BDSUhSU1QJMHgwNzhjCi0KLSNkZWZpbmUgUk05S19PQ0RfTU9ERUJJVDEJMHgwMGQ0IC8qIChNT0RFQklUMSkgTW9kZSBCaXQgMSAqLwotI2RlZmluZSBSTTlLX09DRF9DUEhEQ1IJCTB4MDBmNCAvKiBDUFUtUENJL0hUIERhdGEgQ29udHJvbC4gKi8KLQotI2RlZmluZSBQQ0lTQ19GQjJCIAkJMHgwMDAwMDIwMAotI2RlZmluZSBQQ0lTQ19NV0lDRwkJMHgwMDAwMDAxMAotI2RlZmluZSBQQ0lTQ19FTUMJCTB4MDAwMDAwMDQKLSNkZWZpbmUgUENJU0NfRVJNQQkJMHgwMDAwMDAwMgotCi0KLQotc3RhdGljIGludCBfX2luaXQgYmFzbGVyX2V4Y2l0ZV9wY2lfc2V0dXAodm9pZCkKLXsKLQljb25zdCB1bnNpZ25lZCBpbnQgZnVsbGJhcnMgPSBtZW1zaXplIC8gKDI1NiA8PCAyMCk7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQkvKiBDaGVjayBtb2RlYml0cyB0byBzZWUgaWYgUENJIGlzIHJlYWxseSBlbmFibGVkLiAqLwotCWlmICghKChvY2RfcmVhZGwoUk05S19PQ0RfTU9ERUJJVDEpID4+ICg0Ny0zMikpICYgMHgxKSkKLQkJcGFuaWMobW9kZWJpdHNfbm9fcGNpKTsKLQotCWlmIChOVUxMID09IHJlcXVlc3RfbWVtX3JlZ2lvbihFWENJVEVfUEhZU19QQ0lfSU8sIEVYQ0lURV9TSVpFX1BDSV9JTywKLQkJCQkgICAgICAgIk1lbW9yeS1tYXBwZWQgUENJIEkvTyBwYWdlIikpCi0JCXBhbmljKGlvcGFnZV9mYWlsZWQpOwotCi0JLyogRW5hYmxlIFBDSSAwIGFzIG1hc3RlciBmb3IgY29uZmlnIGN5Y2xlcyAqLwotCW9jZF93cml0ZWwoUENJU0NfRU1DIHwgUENJU0NfRVJNQSwgUk05MDAweDJfT0NEX0hUU0MpOwotCi0KLQkvKiBTZXQgdXAgbGF0ZW5jeSB0aW1lciAqLwotCW9jZF93cml0ZWwoMHg4MDA4LCBSTTkwMDB4Ml9PQ0RfSFRCSEwpOwotCi0JLyogIFNldHVwIGhvc3QgSU8gYW5kIE1lbW9yeSBzcGFjZSAqLwotCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX1BDSV9JTyA+PiA0KSB8IDEsIExLQjcpOwotCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9QQ0lfSU8gPj4gNCkgJiAweDdmZmZmZjAwKSAtIDB4MTAwLCBMS003KTsKLQlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19QQ0lfTUVNID4+IDQpIHwgMSwgTEtCOCk7Ci0Jb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX1BDSV9NRU0gPj4gNCkgJiAweDdmZmZmZjAwKSAtIDB4MTAwLCBMS004KTsKLQotCS8qIFNldCB1cCBQQ0kgQkFScyB0byBtYXAgYWxsIGluc3RhbGxlZCBtZW1vcnkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBiYXIgPSAweDYxMCArIGkgKiA0OwotCi0JICAgICAJaWYgKGkgPCBmdWxsYmFycykgewotCQkJb2NkX3dyaXRlbCgweDEwMDAwMDAwICogaSwgYmFyKTsKLQkJCW9jZF93cml0ZWwoMHgwMTAwMDAwMCAqIGksIGJhciArIDB4MTQwKTsKLQkJCW9jZF93cml0ZWwoMHgwZmZmZjAyOSwgYmFyICsgMHgxMDApOwotCQkJY29udGludWU7Ci0JCX0KLQotCSAgICAgCWlmIChpID09IGZ1bGxiYXJzKSB7Ci0JCQlpbnQgbzsKLQkJCXUzMiBtYXNrOwotCi0JCQljb25zdCB1bnNpZ25lZCBsb25nIHJlbSA9IG1lbXNpemUgLSBpICogMHgxMDAwMDAwMDsKLQkJCWlmICghcmVtKSB7Ci0JCQkJb2NkX3dyaXRlbCgweDAwMDAwMDAwLCBiYXIgKyAweDEwMCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW8gPSBmZnMocmVtKSAtIDE7Ci0JCQlpZiAocmVtICYgfigweDEgPDwgbykpCi0JCQkJbysrOwotCQkJbWFzayA9ICgoMHgxIDw8IG8pICYgMHgwZmZmZjAwMCkgLSAweDEwMDA7Ci0JCQlvY2Rfd3JpdGVsKDB4MTAwMDAwMDAgKiBpLCBiYXIpOwotCQkJb2NkX3dyaXRlbCgweDAxMDAwMDAwICogaSwgYmFyICsgMHgxNDApOwotCQkJb2NkX3dyaXRlbCgweDAwMDAwMDI5IHwgbWFzaywgYmFyICsgMHgxMDApOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlvY2Rfd3JpdGVsKDB4MDAwMDAwMDAsIGJhciArIDB4MTAwKTsKLQl9Ci0KLQkvKiBGaW5hbGx5LCBlbmFibGUgdGhlIFBDSSBpbnRlcnJ1cHQgKi8KLSNpZiBVU0JfSVJRID4gNwotCXNldF9jMF9pbnRjb250cm9sKDEgPDwgVVNCX0lSUSk7Ci0jZWxzZQotCXNldF9jMF9zdGF0dXMoMSA8PCAoVVNCX0lSUSArIDgpKTsKLSNlbmRpZgotCi0JaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gRVhDSVRFX1BIWVNfUENJX0lPOwotCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBFWENJVEVfUEhZU19QQ0lfSU8gKyBFWENJVEVfU0laRV9QQ0lfSU8gLSAxOwotCXNldF9pb19wb3J0X2Jhc2UoKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShFWENJVEVfUEhZU19QQ0lfSU8sIEVYQ0lURV9TSVpFX1BDSV9JTykpOwotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZieF9jb250cm9sbGVyKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1hcmNoX2luaXRjYWxsKGJhc2xlcl9leGNpdGVfcGNpX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L0tjb25maWcgYi9hcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMGU3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKK3NvdXJjZSAiYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9LY29uZmlnIgorCitjb25maWcgQk9PVExPQURFUl9EUklWRVIKKwlib29sICJQb3dlclRWIEJvb3Rsb2FkZXIgRHJpdmVyIFN1cHBvcnQiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBQT1dFUlRWCisJaGVscAorCSAgVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGxvYWQgYm9vdGxvYWRlciBkcml2ZXIuCisKK2NvbmZpZyBCT09UTE9BREVSX0ZBTUlMWQorCXN0cmluZyAiUE9XRVJUViBCb290bG9hZGVyIEZhbWlseSBzdHJpbmciCisJZGVmYXVsdCAiODUiCisJZGVwZW5kcyBvbiBQT1dFUlRWICYmICFCT09UTE9BREVSX0RSSVZFUgorCWhlbHAKKwkgIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHRoZSBib290bG9hZGVyIGRyaXZlciBpcyBkaXNhYmxlZAorCSAgYW5kIG11c3QgYmUgZXhhY3RseSB0d28gY2hhcmFjdGVycyBsb25nLiBGYW1pbGllcyBzdXBwb3J0ZWQgYXJlOgorCSAgICBSMSAtIFJORy0xMDAgIFIyIC0gUk5HLTIwMAorCSAgICBBMSAtIENsYXNzIEEgIEIxIC0gQ2xhc3MgQgorCSAgICBFMSAtIENsYXNzIEUgIEYxIC0gQ2xhc3MgRgorCSAgICA0NCAtIDQ1eHggICAgIDQ2IC0gNDZ4eAorCSAgICA4NSAtIDg1eHggICAgIDg2IC0gODZ4eApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG93ZXJ0di9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzUxNjcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvTWFrZWZpbGUKQEAgLTAsMCArMSwyOCBAQAorIworIyBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyMgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorIyBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFBvcnRpb25zIGNvcHlyaWdodCAoQykgIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBDaXNjbyBQb3dlclRWLXNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMKKyMgdW5kZXIgTGludXguCisjCisKK29iai15ICs9IGNtZGxpbmUubyBpbml0Lm8gbWVtb3J5Lm8gcmVzZXQubyB0aW1lLm8gcG93ZXJ0dl9zZXR1cC5vIGFzaWMvIHBjaS8KKworRVhUUkFfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvS2NvbmZpZyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDE2YmZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9LY29uZmlnCkBAIC0wLDAgKzEsMjggQEAKK2NvbmZpZyBNSU5fUlVOVElNRV9SRVNPVVJDRVMKKwlib29sICJTdXBwb3J0IGZvciBtaW5pbXVtIHJ1bnRpbWUgcmVzb3VyY2VzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gUE9XRVJUVgorCWhlbHAKKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIChTQSBhc2ljKSBydW50aW1lCisJICByZXNvdXJjZXMgdGhhdCBhcmUgcHJlYWxsb2NhdGVkIGJ5IHRoZSBrZXJuZWwuCisKK2NvbmZpZyBNSU5fUlVOVElNRV9ET0NTSVMKKwlib29sICJTdXBwb3J0IGZvciBtaW5pbXVtIERPQ1NJUyByZXNvdXJjZSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1JTl9SVU5USU1FX1JFU09VUkNFUworCWhlbHAKKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHByZWFsbG9jYXRlZCBET0NTSVMgcmVzb3VyY2UuCisKK2NvbmZpZyBNSU5fUlVOVElNRV9QTUVNCisJYm9vbCAiU3VwcG9ydCBmb3IgbWluaW11bSBQTUVNIHJlc291cmNlIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gTUlOX1JVTlRJTUVfUkVTT1VSQ0VTCisJaGVscAorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgcHJlYWxsb2NhdGVkIE1lbW9yeSByZXNvdXJjZS4KKworY29uZmlnIE1JTl9SVU5USU1FX1RGVFAKKwlib29sICJTdXBwb3J0IGZvciBtaW5pbXVtIFRGVFAgcmVzb3VyY2UiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBNSU5fUlVOVElNRV9SRVNPVVJDRVMKKwloZWxwCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBwcmVhbGxvY2F0ZWQgVEZUUCByZXNvdXJjZS4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYmZkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyMKKworb2JqLXkgKz0gYXNpYy1jYWxsaW9wZS5vIGFzaWMtY3JvbnVzLm8gYXNpYy16ZXVzLm8gYXNpY19kZXZpY2VzLm8gYXNpY19pbnQubyBcCisJIGlycV9hc2ljLm8gcHJlYWxsb2MtY2FsbGlvcGUubyBwcmVhbGxvYy1jcm9udXMubyBcCisJIHByZWFsbG9jLWNyb251c2xpdGUubyBwcmVhbGxvYy16ZXVzLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLWNhbGxpb3BlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkMzg4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBMb2NhdGlvbnMgb2YgZGV2aWNlcyBpbiB0aGUgQ2FsbGlvcGUgQVNJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKworY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCBjYWxsaW9wZV9yZWdpc3Rlcl9tYXAgPSB7CisJLmVpY19zbG93MF9zdHJ0X2FkZCA9IDB4ODAwMDAwLAorCS5laWNfY2ZnX2JpdHMgPSAweDgwMDAzOCwKKwkuZWljX3JlYWR5X3N0YXR1cyA9IDB4ODAwMDRjLAorCisJLmNoaXB2ZXIzID0gMHhBMDA4MDAsCisJLmNoaXB2ZXIyID0gMHhBMDA4MDQsCisJLmNoaXB2ZXIxID0gMHhBMDA4MDgsCisJLmNoaXB2ZXIwID0gMHhBMDA4MGMsCisKKwkvKiBUaGUgcmVnaXN0ZXJzIG9mIElSQmxhc3RlciAqLworCS51YXJ0MV9pbnRzdGF0ID0gMHhBMDE4MDAsCisJLnVhcnQxX2ludGVuID0gMHhBMDE4MDQsCisJLnVhcnQxX2NvbmZpZzEgPSAweEEwMTgwOCwKKwkudWFydDFfY29uZmlnMiA9IDB4QTAxODBDLAorCS51YXJ0MV9kaXZpc29yaGkgPSAweEEwMTgxMCwKKwkudWFydDFfZGl2aXNvcmxvID0gMHhBMDE4MTQsCisJLnVhcnQxX2RhdGEgPSAweEEwMTgxOCwKKwkudWFydDFfc3RhdHVzID0gMHhBMDE4MUMsCisKKwkuaW50X3N0YXRfMyA9IDB4QTAyODAwLAorCS5pbnRfc3RhdF8yID0gMHhBMDI4MDQsCisJLmludF9zdGF0XzEgPSAweEEwMjgwOCwKKwkuaW50X3N0YXRfMCA9IDB4QTAyODBjLAorCS5pbnRfY29uZmlnID0gMHhBMDI4MTAsCisJLmludF9pbnRfc2NhbiA9IDB4QTAyODE4LAorCS5pZW5faW50XzMgPSAweEEwMjgzMCwKKwkuaWVuX2ludF8yID0gMHhBMDI4MzQsCisJLmllbl9pbnRfMSA9IDB4QTAyODM4LAorCS5pZW5faW50XzAgPSAweEEwMjgzYywKKwkuaW50X2xldmVsXzNfMyA9IDB4QTAyODgwLAorCS5pbnRfbGV2ZWxfM18yID0gMHhBMDI4ODQsCisJLmludF9sZXZlbF8zXzEgPSAweEEwMjg4OCwKKwkuaW50X2xldmVsXzNfMCA9IDB4QTAyODhjLAorCS5pbnRfbGV2ZWxfMl8zID0gMHhBMDI4OTAsCisJLmludF9sZXZlbF8yXzIgPSAweEEwMjg5NCwKKwkuaW50X2xldmVsXzJfMSA9IDB4QTAyODk4LAorCS5pbnRfbGV2ZWxfMl8wID0gMHhBMDI4OWMsCisJLmludF9sZXZlbF8xXzMgPSAweEEwMjhhMCwKKwkuaW50X2xldmVsXzFfMiA9IDB4QTAyOGE0LAorCS5pbnRfbGV2ZWxfMV8xID0gMHhBMDI4YTgsCisJLmludF9sZXZlbF8xXzAgPSAweEEwMjhhYywKKwkuaW50X2xldmVsXzBfMyA9IDB4QTAyOGIwLAorCS5pbnRfbGV2ZWxfMF8yID0gMHhBMDI4YjQsCisJLmludF9sZXZlbF8wXzEgPSAweEEwMjhiOCwKKwkuaW50X2xldmVsXzBfMCA9IDB4QTAyOGJjLAorCS5pbnRfZG9jc2lzX2VuID0gMHhBMDI4RjQsCisKKwkubWlwc19wbGxfc2V0dXAgPSAweDk4MDAwMCwKKwkudXNiX2ZzID0gMHg5ODAwMzAsICAgICAJLyogLWRlZmF1bHQgNzI4MDAwMjgtICovCisJLnRlc3RfYnVzID0gMHg5ODAwQ0MsCisJLmNydF9zcGFyZSA9IDB4OTgwMGQ0LAorCS51c2IyX29oY2lfaW50X21hc2sgPSAweDlBMDAwYywKKwkudXNiMl9zdHJhcCA9IDB4OUEwMDE0LAorCS5laGNpX2hjYXBiYXNlID0gMHg5QkZFMDAsCisJLm9oY2lfaGNfcmV2aXNpb24gPSAweDlCRkMwMCwKKwkuYmNtMV9ic19sbWlfc3RlZXIgPSAweDlFMDAwNCwKKwkudXNiMl9jb250cm9sID0gMHg5RTAwNTQsCisJLnVzYjJfc3RidXNfb2JjID0gMHg5QkZGMDAsCisJLnVzYjJfc3RidXNfbWVzc19zaXplID0gMHg5QkZGMDQsCisJLnVzYjJfc3RidXNfY2h1bmtfc2l6ZSA9IDB4OUJGRjA4LAorCisJLnBjaWVfcmVncyA9IDB4MDAwMDAwLCAgICAgIAkvKiAtZG9lc24ndCBleGlzdC0gKi8KKwkudGltX2NoID0gMHhBMDJDMTAsCisJLnRpbV9jbCA9IDB4QTAyQzE0LAorCS5ncGlvX2RvdXQgPSAweEEwMmMyMCwKKwkuZ3Bpb19kaW4gPSAweEEwMmMyNCwKKwkuZ3Bpb19kaXIgPSAweEEwMmMyQywKKwkud2F0Y2hkb2cgPSAweEEwMmMzMCwKKwkuZnJvbnRfcGFuZWwgPSAweDAwMDAwMCwgICAgCS8qIC1ub3QgdXNlZC0gKi8KK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtY3JvbnVzLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtY3JvbnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0NTg5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jcm9udXMuYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogTG9jYXRpb25zIG9mIGRldmljZXMgaW4gdGhlIENyb251cyBBU0lDCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYy1BdGxhbnRhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBBdXRob3I6ICAgICAgIEtlbiBFcHBpbmV0dAorICogICAgICAgICAgICAgICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBEZXNjcmlwdGlvbjogIERlZmluZXMgdGhlIHBsYXRmb3JtIHJlc291cmNlcyBmb3IgdGhlIFNBIHNldHRvcC4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKK2NvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgY3JvbnVzX3JlZ2lzdGVyX21hcCA9IHsKKwkuZWljX3Nsb3cwX3N0cnRfYWRkID0gMHgwMDAwMDAsCisJLmVpY19jZmdfYml0cyA9IDB4MDAwMDM4LAorCS5laWNfcmVhZHlfc3RhdHVzID0gMHgwMDAwNEMsCisKKwkuY2hpcHZlcjMgPSAweDJBMDgwMCwKKwkuY2hpcHZlcjIgPSAweDJBMDgwNCwKKwkuY2hpcHZlcjEgPSAweDJBMDgwOCwKKwkuY2hpcHZlcjAgPSAweDJBMDgwQywKKworCS8qIFRoZSByZWdpc3RlcnMgb2YgSVJCbGFzdGVyICovCisJLnVhcnQxX2ludHN0YXQgPSAweDJBMTgwMCwKKwkudWFydDFfaW50ZW4gPSAweDJBMTgwNCwKKwkudWFydDFfY29uZmlnMSA9IDB4MkExODA4LAorCS51YXJ0MV9jb25maWcyID0gMHgyQTE4MEMsCisJLnVhcnQxX2Rpdmlzb3JoaSA9IDB4MkExODEwLAorCS51YXJ0MV9kaXZpc29ybG8gPSAweDJBMTgxNCwKKwkudWFydDFfZGF0YSA9IDB4MkExODE4LAorCS51YXJ0MV9zdGF0dXMgPSAweDJBMTgxQywKKworCS5pbnRfc3RhdF8zID0gMHgyQTI4MDAsCisJLmludF9zdGF0XzIgPSAweDJBMjgwNCwKKwkuaW50X3N0YXRfMSA9IDB4MkEyODA4LAorCS5pbnRfc3RhdF8wID0gMHgyQTI4MEMsCisJLmludF9jb25maWcgPSAweDJBMjgxMCwKKwkuaW50X2ludF9zY2FuID0gMHgyQTI4MTgsCisJLmllbl9pbnRfMyA9IDB4MkEyODMwLAorCS5pZW5faW50XzIgPSAweDJBMjgzNCwKKwkuaWVuX2ludF8xID0gMHgyQTI4MzgsCisJLmllbl9pbnRfMCA9IDB4MkEyODNDLAorCS5pbnRfbGV2ZWxfM18zID0gMHgyQTI4ODAsCisJLmludF9sZXZlbF8zXzIgPSAweDJBMjg4NCwKKwkuaW50X2xldmVsXzNfMSA9IDB4MkEyODg4LAorCS5pbnRfbGV2ZWxfM18wID0gMHgyQTI4OEMsCisJLmludF9sZXZlbF8yXzMgPSAweDJBMjg5MCwKKwkuaW50X2xldmVsXzJfMiA9IDB4MkEyODk0LAorCS5pbnRfbGV2ZWxfMl8xID0gMHgyQTI4OTgsCisJLmludF9sZXZlbF8yXzAgPSAweDJBMjg5QywKKwkuaW50X2xldmVsXzFfMyA9IDB4MkEyOEEwLAorCS5pbnRfbGV2ZWxfMV8yID0gMHgyQTI4QTQsCisJLmludF9sZXZlbF8xXzEgPSAweDJBMjhBOCwKKwkuaW50X2xldmVsXzFfMCA9IDB4MkEyOEFDLAorCS5pbnRfbGV2ZWxfMF8zID0gMHgyQTI4QjAsCisJLmludF9sZXZlbF8wXzIgPSAweDJBMjhCNCwKKwkuaW50X2xldmVsXzBfMSA9IDB4MkEyOEI4LAorCS5pbnRfbGV2ZWxfMF8wID0gMHgyQTI4QkMsCisJLmludF9kb2NzaXNfZW4gPSAweDJBMjhGNCwKKworCS5taXBzX3BsbF9zZXR1cCA9IDB4MUMwMDAwLAorCS51c2JfZnMgPSAweDFDMDAxOCwKKwkudGVzdF9idXMgPSAweDFDMDBDQywKKwkuY3J0X3NwYXJlID0gMHgxYzAwZDQsCisJLnVzYjJfb2hjaV9pbnRfbWFzayA9IDB4MjAwMDBDLAorCS51c2IyX3N0cmFwID0gMHgyMDAwMTQsCisJLmVoY2lfaGNhcGJhc2UgPSAweDIxRkUwMCwKKwkub2hjaV9oY19yZXZpc2lvbiA9IDB4MUUwMDAwLAorCS5iY20xX2JzX2xtaV9zdGVlciA9IDB4MkUwMDA4LAorCS51c2IyX2NvbnRyb2wgPSAweDJFMDA0QywKKwkudXNiMl9zdGJ1c19vYmMgPSAweDIxRkYwMCwKKwkudXNiMl9zdGJ1c19tZXNzX3NpemUgPSAweDIxRkYwNCwKKwkudXNiMl9zdGJ1c19jaHVua19zaXplID0gMHgyMUZGMDgsCisKKwkucGNpZV9yZWdzID0gMHgyMjAwMDAsCisJLnRpbV9jaCA9IDB4MkEyQzEwLAorCS50aW1fY2wgPSAweDJBMkMxNCwKKwkuZ3Bpb19kb3V0ID0gMHgyQTJDMjAsCisJLmdwaW9fZGluID0gMHgyQTJDMjQsCisJLmdwaW9fZGlyID0gMHgyQTJDMkMsCisJLndhdGNoZG9nID0gMHgyQTJDMzAsCisJLmZyb250X3BhbmVsID0gMHgyQTM4MDAsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLXpldXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy16ZXVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy16ZXVzLmMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIExvY2F0aW9ucyBvZiBkZXZpY2VzIGluIHRoZSBaZXVzIEFTSUMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKworY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCB6ZXVzX3JlZ2lzdGVyX21hcCA9IHsKKwkuZWljX3Nsb3cwX3N0cnRfYWRkID0gMHgwMDAwMDAsCisJLmVpY19jZmdfYml0cyA9IDB4MDAwMDM4LAorCS5laWNfcmVhZHlfc3RhdHVzID0gMHgwMDAwNGMsCisKKwkuY2hpcHZlcjMgPSAweDI4MDgwMCwKKwkuY2hpcHZlcjIgPSAweDI4MDgwNCwKKwkuY2hpcHZlcjEgPSAweDI4MDgwOCwKKwkuY2hpcHZlcjAgPSAweDI4MDgwYywKKworCS8qIFRoZSByZWdpc3RlcnMgb2YgSVJCbGFzdGVyICovCisJLnVhcnQxX2ludHN0YXQgPSAweDI4MTgwMCwKKwkudWFydDFfaW50ZW4gPSAweDI4MTgwNCwKKwkudWFydDFfY29uZmlnMSA9IDB4MjgxODA4LAorCS51YXJ0MV9jb25maWcyID0gMHgyODE4MEMsCisJLnVhcnQxX2Rpdmlzb3JoaSA9IDB4MjgxODEwLAorCS51YXJ0MV9kaXZpc29ybG8gPSAweDI4MTgxNCwKKwkudWFydDFfZGF0YSA9IDB4MjgxODE4LAorCS51YXJ0MV9zdGF0dXMgPSAweDI4MTgxQywKKworCS5pbnRfc3RhdF8zID0gMHgyODI4MDAsCisJLmludF9zdGF0XzIgPSAweDI4MjgwNCwKKwkuaW50X3N0YXRfMSA9IDB4MjgyODA4LAorCS5pbnRfc3RhdF8wID0gMHgyODI4MGMsCisJLmludF9jb25maWcgPSAweDI4MjgxMCwKKwkuaW50X2ludF9zY2FuID0gMHgyODI4MTgsCisJLmllbl9pbnRfMyA9IDB4MjgyODMwLAorCS5pZW5faW50XzIgPSAweDI4MjgzNCwKKwkuaWVuX2ludF8xID0gMHgyODI4MzgsCisJLmllbl9pbnRfMCA9IDB4MjgyODNjLAorCS5pbnRfbGV2ZWxfM18zID0gMHgyODI4ODAsCisJLmludF9sZXZlbF8zXzIgPSAweDI4Mjg4NCwKKwkuaW50X2xldmVsXzNfMSA9IDB4MjgyODg4LAorCS5pbnRfbGV2ZWxfM18wID0gMHgyODI4OGMsCisJLmludF9sZXZlbF8yXzMgPSAweDI4Mjg5MCwKKwkuaW50X2xldmVsXzJfMiA9IDB4MjgyODk0LAorCS5pbnRfbGV2ZWxfMl8xID0gMHgyODI4OTgsCisJLmludF9sZXZlbF8yXzAgPSAweDI4Mjg5YywKKwkuaW50X2xldmVsXzFfMyA9IDB4MjgyOGEwLAorCS5pbnRfbGV2ZWxfMV8yID0gMHgyODI4YTQsCisJLmludF9sZXZlbF8xXzEgPSAweDI4MjhhOCwKKwkuaW50X2xldmVsXzFfMCA9IDB4MjgyOGFjLAorCS5pbnRfbGV2ZWxfMF8zID0gMHgyODI4YjAsCisJLmludF9sZXZlbF8wXzIgPSAweDI4MjhiNCwKKwkuaW50X2xldmVsXzBfMSA9IDB4MjgyOGI4LAorCS5pbnRfbGV2ZWxfMF8wID0gMHgyODI4YmMsCisJLmludF9kb2NzaXNfZW4gPSAweDI4MjhGNCwKKworCS5taXBzX3BsbF9zZXR1cCA9IDB4MWEwMDAwLAorCS51c2JfZnMgPSAweDFhMDAxOCwKKwkudGVzdF9idXMgPSAweDFhMDIzOCwKKwkuY3J0X3NwYXJlID0gMHgxYTAwOTAsCisJLnVzYjJfb2hjaV9pbnRfbWFzayA9IDB4MWUwMDBjLAorCS51c2IyX3N0cmFwID0gMHgxZTAwMTQsCisJLmVoY2lfaGNhcGJhc2UgPSAweDFGRkUwMCwKKwkub2hjaV9oY19yZXZpc2lvbiA9IDB4MUZGQzAwLAorCS5iY20xX2JzX2xtaV9zdGVlciA9IDB4MkMwMDA4LAorCS51c2IyX2NvbnRyb2wgPSAweDJjMDFhMCwKKwkudXNiMl9zdGJ1c19vYmMgPSAweDFGRkYwMCwKKwkudXNiMl9zdGJ1c19tZXNzX3NpemUgPSAweDFGRkYwNCwKKwkudXNiMl9zdGJ1c19jaHVua19zaXplID0gMHgxRkZGMDgsCisKKwkucGNpZV9yZWdzID0gMHgyMDAwMDAsCisJLnRpbV9jaCA9IDB4MjgyQzEwLAorCS50aW1fY2wgPSAweDI4MkMxNCwKKwkuZ3Bpb19kb3V0ID0gMHgyODJjMjAsCisJLmdwaW9fZGluID0gMHgyODJjMjQsCisJLmdwaW9fZGlyID0gMHgyODJjMkMsCisJLndhdGNoZG9nID0gMHgyODJjMzAsCisJLmZyb250X3BhbmVsID0gMHgyODM4MDAsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlODI4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKQEAgLTAsMCArMSw3ODcgQEAKKy8qCisgKiAgICAgICAgICAgICAgICAgICBBU0lDIERldmljZSBMaXN0IEludGlhbGl6YXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjogIERlZmluZXMgdGhlIHBsYXRmb3JtIHJlc291cmNlcyBmb3IgdGhlIFNBIHNldHRvcC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICoKKyAqIE5PVEU6IFRoZSBib290bG9hZGVyIGFsbG9jYXRlcyBwZXJzaXN0ZW50IG1lbW9yeSBhdCBhbiBhZGRyZXNzIHdoaWNoIGlzCisgKiAxNiBNaUIgYmVsb3cgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCBhZGRyZXNzIGluIEtTRUcwLiBBbGwgZml4ZWQKKyAqIGFkZHJlc3MgbWVtb3J5IHJlc2VydmF0aW9ucyBtdXN0IGF2b2lkIHRoaXMgcmVnaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmg+CisKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2tibGRyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2RlZmluZSBCT09UTERSRkFNSUxZKGJ5dGUxLCBieXRlMCkgKCgoYnl0ZTEpIDw8IDgpIHwgKGJ5dGUwKSkKKworLyoKKyAqIEZvcndhcmQgUHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBwbWVtX3NldHVwX3Jlc291cmNlKHZvaWQpOworCisvKgorICogR2xvYmFsIFZhcmlhYmxlcworICovCitlbnVtIGFzaWNfdHlwZSBhc2ljOworCit1bnNpZ25lZCBpbnQgcGxhdGZvcm1fZmVhdHVyZXM7Cit1bnNpZ25lZCBpbnQgcGxhdGZvcm1fZmFtaWx5OworY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCAgKnJlZ2lzdGVyX21hcDsKK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbWFwKTsJCQkvKiBFeHBvcnRlZCBmb3IgdGVzdGluZyAqLwordW5zaWduZWQgbG9uZyBhc2ljX3BoeV9iYXNlOwordW5zaWduZWQgbG9uZyBhc2ljX2Jhc2U7CitFWFBPUlRfU1lNQk9MKGFzaWNfYmFzZSk7CQkJLyogRXhwb3J0ZWQgZm9yIHRlc3RpbmcgKi8KK3N0cnVjdCByZXNvdXJjZSAqZ3BfcmVzb3VyY2VzOworc3RhdGljIGJvb2wgdXNiX2NvbmZpZ3VyZWQ7CisKKy8qCisgKiBEb24ndCByZWNvbW1lbmQgdG8gdXNlIGl0IGRpcmVjdGx5LCBpdCBpcyB1c3VhbGx5IHVzZWQgYnkga2VybmVsIGludGVybmFsbHkuCisgKiBQb3J0YWJsZSBjb2RlIHNob3VsZCBiZSB1c2luZyBpbnRlcmZhY2VzIHN1Y2ggYXMgaW9yZW1wLCBkbWFfbWFwX3NpbmdsZSwgZXRjLgorICovCit1bnNpZ25lZCBsb25nIHBoeXNfdG9fYnVzX29mZnNldDsKK0VYUE9SVF9TWU1CT0wocGh5c190b19idXNfb2Zmc2V0KTsKKworLyoKKyAqCisgKiBJTyBSZXNvdXJjZSBEZWZpbml0aW9uCisgKgorICovCisKK3N0cnVjdCByZXNvdXJjZSBhc2ljX3Jlc291cmNlID0geworCS5uYW1lICA9ICJBU0lDIFJlc291cmNlIiwKKwkuc3RhcnQgPSAwLAorCS5lbmQgICA9IEFTSUNfSU9fU0laRSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKKy8qCisgKgorICogVVNCIEhvc3QgUmVzb3VyY2UgRGVmaW5pdGlvbgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVoY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkucGFyZW50ID0gJmFzaWNfcmVzb3VyY2UsCisJCS5zdGFydCAgPSAwLAorCQkuZW5kICAgID0gMHhmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgID0gaXJxX3VzYmVoY2ksCisJCS5lbmQgICAgPSBpcnFfdXNiZWhjaSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IGVoY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVoY2lfZGV2aWNlID0geworCS5uYW1lID0gInBvd2VydHYtZWhjaSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlID0gZWhjaV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrID0gJmVoY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnBhcmVudCA9ICZhc2ljX3Jlc291cmNlLAorCQkuc3RhcnQgID0gMCwKKwkJLmVuZCAgICA9IDB4ZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ICA9IGlycV91c2JvaGNpLAorCQkuZW5kICAgID0gaXJxX3VzYm9oY2ksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvaGNpX2RldmljZSA9IHsKKwkubmFtZSA9ICJwb3dlcnR2LW9oY2kiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSAyLAorCS5yZXNvdXJjZSA9IG9oY2lfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayA9ICZvaGNpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gPSB7CisJJmVoY2lfZGV2aWNlLAorCSZvaGNpX2RldmljZSwKK307CisKKy8qCisgKgorICogUGxhdGZvcm0gQ29uZmlndXJhdGlvbiBhbmQgRGV2aWNlIEluaXRpYWxpemF0aW9uCisgKgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZnNfdXBkYXRlKGludCBwZSwgaW50IG1kLCBpbnQgc2RpdiwgaW50IGRpc2FibGVfZGl2X2J5XzMpCit7CisJaW50IGVuX3ByZywgYnlwLCBwd3IsIG5zYiwgdmFsOworCWludCBzb3V0OworCisJc291dCA9IDE7CisJZW5fcHJnID0gMTsKKwlieXAgPSAwOworCW5zYiA9IDE7CisJcHdyID0gMTsKKworCXZhbCA9ICgoc2RpdiA8PCAyOSkgfCAobWQgPDwgMjQpIHwgKHBlPDw4KSB8IChzb3V0PDwzKSB8IChieXA8PDIpIHwKKwkJKG5zYjw8MSkgfCAoZGlzYWJsZV9kaXZfYnlfMzw8NSkpOworCisJYXNpY193cml0ZSh2YWwsIHVzYl9mcyk7CisJYXNpY193cml0ZSh2YWwgfCAoZW5fcHJnPDw0KSwgdXNiX2ZzKTsKKwlhc2ljX3dyaXRlKHZhbCB8IChlbl9wcmc8PDQpIHwgcHdyLCB1c2JfZnMpOworfQorCisvKgorICogQWxsb3cgb3ZlcnJpZGUgb2YgYm9vdGxvYWRlci1zcGVjaWZpZWQgbW9kZWwKKyAqLworc3RhdGljIGNoYXIgX19pbml0ZGF0YSBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKworI2RlZmluZQlGT1JDRUZBTUlMWV9QQVJBTQkiZm9yY2VmYW1pbHkiCisKK3N0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZvcmNlZmFtaWx5KHVuc2lnbmVkIGNoYXIgZm9yY2VkX2ZhbWlseVsyXSkKK3sKKwljb25zdCBjaGFyICpwOworCisJZm9yY2VkX2ZhbWlseVswXSA9ICdcMCc7CisJZm9yY2VkX2ZhbWlseVsxXSA9ICdcMCc7CisKKwkvKiBDaGVjayB0aGUgY29tbWFuZCBsaW5lIGZvciBhIGZvcmNlZmFtaWx5IGRpcmVjdGl2ZSAqLworCXN0cm5jcHkoY21kbGluZSwgYXJjc19jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSAtIDEpOworCXAgPSBzdHJzdHIoY21kbGluZSwgRk9SQ0VGQU1JTFlfUEFSQU0pOworCWlmIChwICYmIChwICE9IGNtZGxpbmUpICYmICgqKHAgLSAxKSAhPSAnICcpKQorCQlwID0gc3Ryc3RyKHAsICIgIiBGT1JDRUZBTUlMWV9QQVJBTSAiPSIpOworCisJaWYgKHApIHsKKwkJcCArPSBzdHJsZW4oRk9SQ0VGQU1JTFlfUEFSQU0gIj0iKTsKKworCQlpZiAoKnAgPT0gJ1wwJyB8fCAqKHAgKyAxKSA9PSAnXDAnIHx8CisJCQkoKihwICsgMikgIT0gJ1wwJyAmJiAqKHAgKyAyKSAhPSAnICcpKQorCQkJcHJfZXJyKEZPUkNFRkFNSUxZX1BBUkFNICIgbXVzdCBiZSBleGFjdGx5IHR3byAiCisJCQkJImNoYXJhY3RlcnMgbG9uZywgaWdub3JpbmcgdmFsdWVcbiIpOworCisJCWVsc2UgeworCQkJZm9yY2VkX2ZhbWlseVswXSA9ICpwOworCQkJZm9yY2VkX2ZhbWlseVsxXSA9ICoocCArIDEpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwbGF0Zm9ybV9zZXRfZmFtaWx5IC0gZGV0ZXJtaW5lIG1ham9yIHBsYXRmb3JtIGZhbWlseSB0eXBlLgorICoKKyAqIFJldHVybnMgZmFtaWx5IHR5cGU7IC0xIGlmIG5vbmUKKyAqIFJldHVybnMgdGhlIGZhbWlseSB0eXBlOyAtMSBpZiBub25lCisgKgorICovCitzdGF0aWMgX19pbml0IG5vaW5saW5lIHZvaWQgcGxhdGZvcm1fc2V0X2ZhbWlseSh2b2lkKQoreworI2RlZmluZSBCT09UTERSRkFNSUxZKGJ5dGUxLCBieXRlMCkgKCgoYnl0ZTEpIDw8IDgpIHwgKGJ5dGUwKSkKKworCXVuc2lnbmVkIGNoYXIgZm9yY2VkX2ZhbWlseVsyXTsKKwl1bnNpZ25lZCBzaG9ydCBib290bGRyX2ZhbWlseTsKKworCWNoZWNrX2ZvcmNlZmFtaWx5KGZvcmNlZF9mYW1pbHkpOworCisJaWYgKGZvcmNlZF9mYW1pbHlbMF0gIT0gJ1wwJyAmJiBmb3JjZWRfZmFtaWx5WzFdICE9ICdcMCcpCisJCWJvb3RsZHJfZmFtaWx5ID0gQk9PVExEUkZBTUlMWShmb3JjZWRfZmFtaWx5WzBdLAorCQkJZm9yY2VkX2ZhbWlseVsxXSk7CisJZWxzZSB7CisKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKwkJYm9vdGxkcl9mYW1pbHkgPSAodW5zaWduZWQgc2hvcnQpIGtibGRyX0dldFNXRmFtaWx5KCk7CisjZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX0JPT1RMT0FERVJfRkFNSUxZKQorCQlib290bGRyX2ZhbWlseSA9ICh1bnNpZ25lZCBzaG9ydCkgQk9PVExEUkZBTUlMWSgKKwkJCUNPTkZJR19CT09UTE9BREVSX0ZBTUlMWVswXSwKKwkJCUNPTkZJR19CT09UTE9BREVSX0ZBTUlMWVsxXSk7CisjZWxzZQorI2Vycm9yICJVbmtub3duIEJvb3Rsb2FkZXIgRmFtaWx5IgorI2VuZGlmCisjZW5kaWYKKwl9CisKKwlwcl9pbmZvKCJCb290bG9hZGVyIEZhbWlseSA9IDB4JTA0WFxuIiwgYm9vdGxkcl9mYW1pbHkpOworCisJc3dpdGNoIChib290bGRyX2ZhbWlseSkgeworCWNhc2UgQk9PVExEUkZBTUlMWSgnUicsICcxJyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV8xNTAwOworCQlicmVhazsKKwljYXNlIEJPT1RMRFJGQU1JTFkoJzQnLCAnNCcpOgorCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfNDUwMDsKKwkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCc0JywgJzYnKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzQ2MDA7CisJCWJyZWFrOworCWNhc2UgQk9PVExEUkZBTUlMWSgnQScsICcxJyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV80NjAwVlpBOworCQlicmVhazsKKwljYXNlIEJPT1RMRFJGQU1JTFkoJzgnLCAnNScpOgorCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfODUwMDsKKwkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCdSJywgJzInKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzg1MDBSTkc7CisJCWJyZWFrOworCWNhc2UgQk9PVExEUkZBTUlMWSgnOCcsICc2Jyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV84NjAwOworCQlicmVhazsKKwljYXNlIEJPT1RMRFJGQU1JTFkoJ0InLCAnMScpOgorCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfODYwMFZaQjsKKwkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCdFJywgJzEnKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzE1MDBWWkU7CisJCWJyZWFrOworCWNhc2UgQk9PVExEUkZBTUlMWSgnRicsICcxJyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV8xNTAwVlpGOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwbGF0Zm9ybV9mYW1pbHkgPSAtMTsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBwbGF0Zm9ybV9nZXRfZmFtaWx5KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2ZhbWlseTsKK30KK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fZ2V0X2ZhbWlseSk7CisKKy8qCisgKiBcYnJpZWYgdXNiX2V5ZV9jb25maWd1cmUoKSBmb3Igb3B0aW1pemluZyB0aGUgVVNCIGV5ZSBvbiBDYWxsaW9wZS4KKyAqCisgKiBccGFyYW0gICAgIHVuc2lnbmVkIGludCB2YWx1ZSBzYXZlZCB0byB0aGUgcmVnaXN0ZXIuCisgKgorICogXHJldHVybiAgICBub25lCisgKgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdXNiX2V5ZV9jb25maWd1cmUodW5zaWduZWQgaW50IHZhbHVlKQoreworCWFzaWNfd3JpdGUoYXNpY19yZWFkKGNydF9zcGFyZSkgfCB2YWx1ZSwgY3J0X3NwYXJlKTsKK30KKworLyoKKyAqIHBsYXRmb3JtX2dldF9hc2ljIC0gZGV0ZXJtaW5lIHRoZSBBU0lDIHR5cGUuCisgKgorICogXHBhcmFtICAgICBub25lCisgKgorICogXHJldHVybiAgICBBU0lDIHR5cGU7IEFTSUNfVU5LTk9XTiBpZiBub25lCisgKgorICovCitlbnVtIGFzaWNfdHlwZSBwbGF0Zm9ybV9nZXRfYXNpYyh2b2lkKQoreworCXJldHVybiBhc2ljOworfQorRVhQT1JUX1NZTUJPTChwbGF0Zm9ybV9nZXRfYXNpYyk7CisKKy8qCisgKiBwbGF0Zm9ybV9jb25maWd1cmVfdXNiIC0gdXNiIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gcGxhdGZvcm0gdHlwZS4KKyAqIEBiY20xX3VzYjJfY3RsOgl2YWx1ZSBmb3IgdGhlIEJDTTFfVVNCMl9DVEwgcmVnaXN0ZXIsIHdoaWNoIGlzCisgKgkJCXF1aXJreQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGxhdGZvcm1fY29uZmlndXJlX3VzYih2b2lkKQoreworCXUzMiBiY20xX3VzYjJfY3RsOworCisJaWYgKHVzYl9jb25maWd1cmVkKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGFzaWMpIHsKKwljYXNlIEFTSUNfWkVVUzoKKwkJZnNfdXBkYXRlKDB4MDAwMCwgMHgxMSwgMHgwMiwgMCk7CisJCWJjbTFfdXNiMl9jdGwgPSAweDgwMzsKKwkJYnJlYWs7CisKKwljYXNlIEFTSUNfQ1JPTlVTOgorCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgorCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKKwkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOworCQlicmVhazsKKworCWNhc2UgQVNJQ19DQUxMSU9QRToKKwkJZnNfdXBkYXRlKDB4MDAwMCwgMHgxMSwgMHgwMiwgMSk7CisKKwkJc3dpdGNoIChwbGF0Zm9ybV9mYW1pbHkpIHsKKwkJY2FzZSBGQU1JTFlfMTUwMFZaRToKKwkJCWJyZWFrOworCisJCWNhc2UgRkFNSUxZXzE1MDBWWkY6CisJCQl1c2JfZXllX2NvbmZpZ3VyZSgweDAwM2MwMDAwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl1c2JfZXllX2NvbmZpZ3VyZSgweDAwMzAwMDAwKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByX2VycigiVW5rbm93biBBU0lDIHR5cGU6ICVkXG4iLCBhc2ljKTsKKwkJYnJlYWs7CisJfQorCisJLyogdHVybiBvbiBVU0IgcG93ZXIgKi8KKwlhc2ljX3dyaXRlKDAsIHVzYjJfc3RyYXApOworCS8qIEVuYWJsZSBhbGwgT0hDSSBpbnRlcnJ1cHRzICovCisJYXNpY193cml0ZShiY20xX3VzYjJfY3RsLCB1c2IyX2NvbnRyb2wpOworCS8qIFVTQjJfU1RCVVNfT0JDIHN0b3JlMzIvbG9hZDMyICovCisJYXNpY193cml0ZSgzLCB1c2IyX3N0YnVzX29iYyk7CisJLyogVVNCMl9TVEJVU19NRVNTX1NJWkUgMiBwYWNrZXRzICovCisJYXNpY193cml0ZSgxLCB1c2IyX3N0YnVzX21lc3Nfc2l6ZSk7CisJLyogVVNCMl9TVEJVU19DSFVOS19TSVpFIDIgcGFja2V0cyAqLworCWFzaWNfd3JpdGUoMSwgdXNiMl9zdGJ1c19jaHVua19zaXplKTsKKworCXVzYl9jb25maWd1cmVkID0gdHJ1ZTsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgVVNCIEVIQ0kgaW50ZXJmYWNlCisgKi8KK3ZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9laGNpKCkKK3sKKwlwbGF0Zm9ybV9jb25maWd1cmVfdXNiKCk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIFVTQiBPSENJIGludGVyZmFjZQorICovCit2b2lkIHBsYXRmb3JtX2NvbmZpZ3VyZV91c2Jfb2hjaSgpCit7CisJcGxhdGZvcm1fY29uZmlndXJlX3VzYigpOworfQorCisvKgorICogU2h1dCB0aGUgVVNCIEVIQ0kgaW50ZXJmYWNlIGRvd24tLWN1cnJlbnRseSBhIE5PUAorICovCit2b2lkIHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYl9laGNpKCkKK3sKK30KKworLyoKKyAqIFNodXQgdGhlIFVTQiBPSENJIGludGVyZmFjZSBkb3duLS1jdXJyZW50bHkgYSBOT1AKKyAqLwordm9pZCBwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2Jfb2hjaSgpCit7Cit9CisKKy8qKgorICogY29uZmlndXJlX3BsYXRmb3JtIC0gY29uZmlndXJhdGlvbiBiYXNlZCBvbiBwbGF0Zm9ybSB0eXBlLgorICovCit2b2lkIF9faW5pdCBjb25maWd1cmVfcGxhdGZvcm0odm9pZCkKK3sKKwlwbGF0Zm9ybV9zZXRfZmFtaWx5KCk7CisKKwlzd2l0Y2ggKHBsYXRmb3JtX2ZhbWlseSkgeworCWNhc2UgRkFNSUxZXzE1MDA6CisJY2FzZSBGQU1JTFlfMTUwMFZaRToKKwljYXNlIEZBTUlMWV8xNTAwVlpGOgorCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFOworCQlhc2ljID0gQVNJQ19DQUxMSU9QRTsKKwkJYXNpY19waHlfYmFzZSA9IENBTExJT1BFX0lPX0JBU0U7CisJCXJlZ2lzdGVyX21hcCA9ICZjYWxsaW9wZV9yZWdpc3Rlcl9tYXA7CisJCWFzaWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXBfbm9jYWNoZShhc2ljX3BoeV9iYXNlLAorCQkJQVNJQ19JT19TSVpFKTsKKworCQlpZiAocGxhdGZvcm1fZmFtaWx5ID09IEZBTUlMWV8xNTAwVlpFKSB7CisJCQlncF9yZXNvdXJjZXMgPSBub25fZHZyX3Z6ZV9jYWxsaW9wZV9yZXNvdXJjZXM7CisJCQlwcl9pbmZvKCJQbGF0Zm9ybTogMTUwMC9WeiBDbGFzcyBFIC0gIgorCQkJCSJDQUxMSU9QRSwgTk9OX0RWUl9DQVBBQkxFXG4iKTsKKwkJfSBlbHNlIGlmIChwbGF0Zm9ybV9mYW1pbHkgPT0gRkFNSUxZXzE1MDBWWkYpIHsKKwkJCWdwX3Jlc291cmNlcyA9IG5vbl9kdnJfdnpmX2NhbGxpb3BlX3Jlc291cmNlczsKKwkJCXByX2luZm8oIlBsYXRmb3JtOiAxNTAwL1Z6IENsYXNzIEYgLSAiCisJCQkJIkNBTExJT1BFLCBOT05fRFZSX0NBUEFCTEVcbiIpOworCQl9IGVsc2UgeworCQkJZ3BfcmVzb3VyY2VzID0gbm9uX2R2cl9jYWxsaW9wZV9yZXNvdXJjZXM7CisJCQlwcl9pbmZvKCJQbGF0Zm9ybTogMTUwMC9STkcxMDAgLSBDQUxMSU9QRSwgIgorCQkJCSJOT05fRFZSX0NBUEFCTEVcbiIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQU1JTFlfNDUwMDoKKwkJcGxhdGZvcm1fZmVhdHVyZXMgPSBGRlNfQ0FQQUJMRSB8IFBDSUVfQ0FQQUJMRSB8CisJCQlESVNQTEFZX0NBUEFCTEU7CisJCWFzaWMgPSBBU0lDX1pFVVM7CisJCWFzaWNfcGh5X2Jhc2UgPSBaRVVTX0lPX0JBU0U7CisJCXJlZ2lzdGVyX21hcCA9ICZ6ZXVzX3JlZ2lzdGVyX21hcDsKKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBub25fZHZyX3pldXNfcmVzb3VyY2VzOworCisJCXByX2luZm8oIlBsYXRmb3JtOiA0NTAwIC0gWkVVUywgTk9OX0RWUl9DQVBBQkxFXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEZBTUlMWV80NjAwOgorCXsKKwkJdW5zaWduZWQgaW50IGNoaXB2ZXJzaW9uID0gMDsKKworCQkvKiBUaGUgc2V0dG9wIGhhcyBQQ0lFIGJ1dCBpdCBpc24ndCB1c2VkLCBzbyBkb24ndCBhZHZlcnRpc2UKKwkJICogaXQqLworCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFIHwgRElTUExBWV9DQVBBQkxFOworCQlhc2ljX3BoeV9iYXNlID0gQ1JPTlVTX0lPX0JBU0U7ICAgLyogc2FtZSBhcyBDcm9udXMgKi8KKwkJcmVnaXN0ZXJfbWFwID0gJmNyb251c19yZWdpc3Rlcl9tYXA7ICAgLyogc2FtZSBhcyBDcm9udXMgKi8KKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBub25fZHZyX2Nyb251c2xpdGVfcmVzb3VyY2VzOworCisJCS8qIEFTSUMgdmVyc2lvbiB3aWxsIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcmVhbCBDcm9udXNMaXRlIG9yCisJCSAqIENhc3RyYXRpKENyb251cykgKi8KKwkJY2hpcHZlcnNpb24gID0gYXNpY19yZWFkKGNoaXB2ZXIzKSA8PCAyNDsKKwkJY2hpcHZlcnNpb24gfD0gYXNpY19yZWFkKGNoaXB2ZXIyKSA8PCAxNjsKKwkJY2hpcHZlcnNpb24gfD0gYXNpY19yZWFkKGNoaXB2ZXIxKSA8PCA4OworCQljaGlwdmVyc2lvbiB8PSBhc2ljX3JlYWQoY2hpcHZlcjApOworCisJCWlmICgoY2hpcHZlcnNpb24gPT0gQ1JPTlVTXzEwKSB8fCAoY2hpcHZlcnNpb24gPT0gQ1JPTlVTXzExKSkKKwkJCWFzaWMgPSBBU0lDX0NST05VUzsKKwkJZWxzZQorCQkJYXNpYyA9IEFTSUNfQ1JPTlVTTElURTsKKworCQlwcl9pbmZvKCJQbGF0Zm9ybTogNDYwMCAtICVzLCBOT05fRFZSX0NBUEFCTEUsICIKKwkJCSJjaGlwdmVyc2lvbj0weCUwOFhcbiIsCisJCQkoYXNpYyA9PSBBU0lDX0NST05VUykgPyAiQ1JPTlVTIiA6ICJDUk9OVVMgTElURSIsCisJCQljaGlwdmVyc2lvbik7CisJCWJyZWFrOworCX0KKwljYXNlIEZBTUlMWV80NjAwVlpBOgorCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFIHwgRElTUExBWV9DQVBBQkxFOworCQlhc2ljID0gQVNJQ19DUk9OVVM7CisJCWFzaWNfcGh5X2Jhc2UgPSBDUk9OVVNfSU9fQkFTRTsKKwkJcmVnaXN0ZXJfbWFwID0gJmNyb251c19yZWdpc3Rlcl9tYXA7CisJCWFzaWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXBfbm9jYWNoZShhc2ljX3BoeV9iYXNlLAorCQkJQVNJQ19JT19TSVpFKTsKKwkJZ3BfcmVzb3VyY2VzID0gbm9uX2R2cl9jcm9udXNfcmVzb3VyY2VzOworCisJCXByX2luZm8oIlBsYXRmb3JtOiBWeiBDbGFzcyBBIC0gQ1JPTlVTLCBOT05fRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKworCWNhc2UgRkFNSUxZXzg1MDA6CisJY2FzZSBGQU1JTFlfODUwMFJORzoKKwkJcGxhdGZvcm1fZmVhdHVyZXMgPSBEVlJfQ0FQQUJMRSB8IFBDSUVfQ0FQQUJMRSB8CisJCQlESVNQTEFZX0NBUEFCTEU7CisJCWFzaWMgPSBBU0lDX1pFVVM7CisJCWFzaWNfcGh5X2Jhc2UgPSBaRVVTX0lPX0JBU0U7CisJCXJlZ2lzdGVyX21hcCA9ICZ6ZXVzX3JlZ2lzdGVyX21hcDsKKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBkdnJfemV1c19yZXNvdXJjZXM7CisKKwkJcHJfaW5mbygiUGxhdGZvcm06IDg1MDAvUk5HMjAwIC0gWkVVUywgRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKworCWNhc2UgRkFNSUxZXzg2MDA6CisJY2FzZSBGQU1JTFlfODYwMFZaQjoKKwkJcGxhdGZvcm1fZmVhdHVyZXMgPSBEVlJfQ0FQQUJMRSB8IFBDSUVfQ0FQQUJMRSB8CisJCQlESVNQTEFZX0NBUEFCTEU7CisJCWFzaWMgPSBBU0lDX0NST05VUzsKKwkJYXNpY19waHlfYmFzZSA9IENST05VU19JT19CQVNFOworCQlyZWdpc3Rlcl9tYXAgPSAmY3JvbnVzX3JlZ2lzdGVyX21hcDsKKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBkdnJfY3JvbnVzX3Jlc291cmNlczsKKworCQlwcl9pbmZvKCJQbGF0Zm9ybTogODYwMC9WeiBDbGFzcyBCIC0gQ1JPTlVTLCAiCisJCQkiRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByX2NyaXQoIlBsYXRmb3JtOiAgVU5LTk9XTiBQTEFURk9STVxuIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoYXNpYykgeworCWNhc2UgQVNJQ19aRVVTOgorCQlwaHlzX3RvX2J1c19vZmZzZXQgPSAweDMwMDAwMDAwOworCQlicmVhazsKKwljYXNlIEFTSUNfQ0FMTElPUEU6CisJCXBoeXNfdG9fYnVzX29mZnNldCA9IDB4MTAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIEFTSUNfQ1JPTlVTOgorCQkvKgorCQkgKiBUT0RPOiBXZSBzdXBwb3NlIDB4MTAwMDAwMDAgYWxpYXNlcyBpbnRvIDB4MjAwMDAwMDAtCisJCSAqIDB4MlhYWFhYWFguIElmIDB4MTAwMDAwMDAgYWxpYXNlcyBpbnRvIDB4NjAwMDAwMDAtCisJCSAqIDB4NlhYWFhYWFgsIHRoZSBvZmZzZXQgc2hvdWxkIGJlIDB4NTAwMDAwMDAsIG5vdCAweDEwMDAwMDAwLgorCQkgKi8KKwkJcGh5c190b19idXNfb2Zmc2V0ID0gMHgxMDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGh5c190b19idXNfb2Zmc2V0ID0gMHgwMDAwMDAwMDsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIHBsYXRmb3JtX2RldmljZXNfaW5pdCAtIHNldHMgdXAgVVNCIGRldmljZSByZXNvdXJzZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgcGxhdGZvcm1fZGV2aWNlc19pbml0KHZvaWQpCit7CisJcHJfbm90aWNlKCIlczogLS0tLS0gSW5pdGlhbGl6aW5nIFVTQiByZXNvdXJjZXMgLS0tLS1cbiIsIF9fZnVuY19fKTsKKworCWFzaWNfcmVzb3VyY2Uuc3RhcnQgPSBhc2ljX3BoeV9iYXNlOworCWFzaWNfcmVzb3VyY2UuZW5kICs9IGFzaWNfcmVzb3VyY2Uuc3RhcnQ7CisKKwllaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihlaGNpX2hjYXBiYXNlKTsKKwllaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gZWhjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7CisKKwlvaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihvaGNpX2hjX3JldmlzaW9uKTsKKwlvaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gb2hjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7CisKKwlzZXRfaW9fcG9ydF9iYXNlKDApOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0Zm9ybV9kZXZpY2VzX2luaXQpOworCisvKgorICoKKyAqIEJPT1RNRU0gQUxMT0NBVElPTgorICoKKyAqLworLyoKKyAqIEFsbG9jYXRlcy9yZXNlcnZlcyB0aGUgUGxhdGZvcm0gbWVtb3J5IHJlc291cmNlcyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICogVGhpcyBpZ25vcmVzIGFueSByZXNvdXJjZXMgdGhhdCBhcmUgZGVzaWduYXRlZCBJT1JFU09VUkNFX0lPCisgKi8KK3ZvaWQgX19pbml0IHBsYXRmb3JtX2FsbG9jX2Jvb3RtZW0odm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgdG90YWwgPSAwOworCisJLyogR2V0IHBlcnNpc3RlbnQgbWVtb3J5IGRhdGEgZnJvbSBjb21tYW5kIGxpbmUgYmVmb3JlIGFsbG9jYXRpbmcKKwkgKiByZXNvdXJjZXMuIFRoaXMgbmVlZCB0byBoYXBwZW4gYmVmb3JlIG5vcm1hbCBjb21tYW5kIGxpbmUgcGFyc2luZworCSAqIGhhcyBiZWVuIGRvbmUgKi8KKwlwbWVtX3NldHVwX3Jlc291cmNlKCk7CisKKwkvKiBMb29wIHRocm91Z2ggbG9va2luZyBmb3IgcmVzb3VyY2VzIHRoYXQgd2FudCBhIHBhcnRpY3VsYXIgYWRkcmVzcyAqLworCWZvciAoaSA9IDA7IGdwX3Jlc291cmNlc1tpXS5mbGFncyAhPSAwOyBpKyspIHsKKwkJaW50IHNpemUgPSBncF9yZXNvdXJjZXNbaV0uZW5kIC0gZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0ICsgMTsKKwkJaWYgKChncF9yZXNvdXJjZXNbaV0uc3RhcnQgIT0gMCkgJiYKKwkJCSgoZ3BfcmVzb3VyY2VzW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICE9IDApKSB7CisJCQlyZXNlcnZlX2Jvb3RtZW0oYnVzX3RvX3BoeXMoZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0KSwKKwkJCQlzaXplLCAwKTsKKwkJCXRvdGFsICs9IGdwX3Jlc291cmNlc1tpXS5lbmQgLQorCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCArIDE7CisJCQlwcl9pbmZvKCJyZXNlcnZlIHJlc291cmNlICVzIGF0ICUwOHggKCV1IGJ5dGVzKVxuIiwKKwkJCQlncF9yZXNvdXJjZXNbaV0ubmFtZSwgZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0LAorCQkJCWdwX3Jlc291cmNlc1tpXS5lbmQgLQorCQkJCQlncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyAxKTsKKwkJfQorCX0KKworCS8qIExvb3AgdGhyb3VnaCBhc3NpZ25pbmcgYWRkcmVzc2VzIGZvciB0aG9zZSB0aGF0IGFyZSBsZWZ0ICovCisJZm9yIChpID0gMDsgZ3BfcmVzb3VyY2VzW2ldLmZsYWdzICE9IDA7IGkrKykgeworCQlpbnQgc2l6ZSA9IGdwX3Jlc291cmNlc1tpXS5lbmQgLSBncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyAxOworCQlpZiAoKGdwX3Jlc291cmNlc1tpXS5zdGFydCA9PSAwKSAmJgorCQkJKChncF9yZXNvdXJjZXNbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgIT0gMCkpIHsKKwkJCXZvaWQgKm1lbSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoc2l6ZSk7CisKKwkJCWlmIChtZW0gPT0gTlVMTCkKKwkJCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBib290bWVtIHBhZ2VzICIKKwkJCQkJImZvciAlc1xuIiwgZ3BfcmVzb3VyY2VzW2ldLm5hbWUpOworCisJCQllbHNlIHsKKwkJCQlncF9yZXNvdXJjZXNbaV0uc3RhcnQgPQorCQkJCQlwaHlzX3RvX2J1cyh2aXJ0X3RvX3BoeXMobWVtKSk7CisJCQkJZ3BfcmVzb3VyY2VzW2ldLmVuZCA9CisJCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCArIHNpemUgLSAxOworCQkJCXRvdGFsICs9IHNpemU7CisJCQkJcHJfaW5mbygiYWxsb2NhdGUgcmVzb3VyY2UgJXMgYXQgJTA4eCAiCisJCQkJCQkiKCV1IGJ5dGVzKVxuIiwKKwkJCQkJZ3BfcmVzb3VyY2VzW2ldLm5hbWUsCisJCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCwgc2l6ZSk7CisJCQl9CisJCX0KKwl9CisKKwlwcl9pbmZvKCJUb3RhbCBQbGF0Zm9ybSBkcml2ZXIgbWVtb3J5IGFsbG9jYXRpb246IDB4JTA4eFxuIiwgdG90YWwpOworCisJLyogaW5kaWNhdGUgcmVzb3VyY2VzIHRoYXQgYXJlIHBsYXRmb3JtIEkvTyByZWxhdGVkICovCisJZm9yIChpID0gMDsgZ3BfcmVzb3VyY2VzW2ldLmZsYWdzICE9IDA7IGkrKykgeworCQlpZiAoKGdwX3Jlc291cmNlc1tpXS5zdGFydCAhPSAwKSAmJgorCQkJKChncF9yZXNvdXJjZXNbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAhPSAwKSkgeworCQkJcHJfaW5mbygicmVzZXJ2ZWQgcGxhdGZvcm0gcmVzb3VyY2UgJXMgYXQgJTA4eFxuIiwKKwkJCQlncF9yZXNvdXJjZXNbaV0ubmFtZSwgZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0KTsKKwkJfQorCX0KK30KKworLyoKKyAqCisgKiBQRVJTSVNURU5UIE1FTU9SWSAoUE1FTSkgQ09ORklHVVJBVElPTgorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcG1lbWFkZHIgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyYW1fcG1lbWFkZHIoY2hhciAqcCkKK3sKKwlwbWVtYWRkciA9ICh1bnNpZ25lZCBsb25nKXNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInBtZW1hZGRyIiwgZWFybHlfcGFyYW1fcG1lbWFkZHIpOworCitzdGF0aWMgbG9uZyBwbWVtbGVuIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcmFtX3BtZW1sZW4oY2hhciAqcCkKK3sKKy8qIFRPRE86IHdlIGNhbiB1c2UgdGhpcyBjb2RlIHdoZW4gYW5kIGlmIHRoZSBib290bG9hZGVyIGV2ZXIgY2hhbmdlcyB0aGlzICovCisjaWYgMAorCXBtZW1sZW4gPSAodW5zaWduZWQgbG9uZylzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKyNlbHNlCisJcG1lbWxlbiA9IDB4MjAwMDA7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJwbWVtbGVuIiwgZWFybHlfcGFyYW1fcG1lbWxlbik7CisKKy8qCisgKiBTZXQgdXAgcGVyc2lzdGVudCBtZW1vcnkuIElmIHdlIHdlcmUgZ2l2ZW4gdmFsdWVzLCB3ZSBwYXRjaCB0aGUgYXJyYXkgb2YKKyAqIHJlc291cmNlcy4gT3RoZXJ3aXNlLCBwZXJzaXN0ZW50IG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGFueXdoZXJlIGF0IGFsbC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHBtZW1fc2V0dXBfcmVzb3VyY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlOworCXJlc291cmNlID0gYXNpY19yZXNvdXJjZV9nZXQoIkRpYWdQZXJzaXN0ZW50TWVtb3J5Iik7CisKKwlpZiAocmVzb3VyY2UgJiYgcG1lbWFkZHIgJiYgcG1lbWxlbikgeworCQkvKiBUaGUgYWRkcmVzcyBwcm92aWRlZCBieSBib290bG9hZGVyIGlzIGluIGtzZWcwLiBDb252ZXJ0IHRvCisJCSAqIGEgYnVzIGFkZHJlc3MuICovCisJCXJlc291cmNlLT5zdGFydCA9IHBoeXNfdG9fYnVzKHBtZW1hZGRyIC0gMHg4MDAwMDAwMCk7CisJCXJlc291cmNlLT5lbmQgPSByZXNvdXJjZS0+c3RhcnQgKyBwbWVtbGVuIC0gMTsKKworCQlwcl9pbmZvKCJwZXJzaXN0ZW50IG1lbW9yeTogc3RhcnQ9MHgleCAgZW5kPTB4JXhcbiIsCisJCQlyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQpOworCX0KK30KKworLyoKKyAqCisgKiBSRVNPVVJDRSBBQ0NFU1MgRlVOQ1RJT05TCisgKgorICovCisKKy8qKgorICogYXNpY19yZXNvdXJjZV9nZXQgLSByZXRyaWV2ZXMgcGFyYW1ldGVycyBmb3IgYSBwbGF0Zm9ybSByZXNvdXJjZS4KKyAqIEBuYW1lOglzdHJpbmcgdG8gbWF0Y2ggcmVzb3VyY2UKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCByZXNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIENBTk5PVCBCRSBOQU1FRCBwbGF0Zm9ybV9yZXNvdXJjZV9nZXQsIHdoaWNoIHdvdWxkIGJlIHRoZSBvYnZpb3VzIGNob2ljZSwKKyAqIGFzIHRoaXMgZnVuY3Rpb24gbmFtZSBpcyBhbHJlYWR5IGRlY2xhcmVkCisgKi8KK3N0cnVjdCByZXNvdXJjZSAqYXNpY19yZXNvdXJjZV9nZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGdwX3Jlc291cmNlc1tpXS5mbGFncyAhPSAwOyBpKyspIHsKKwkJaWYgKHN0cmNtcChncF9yZXNvdXJjZXNbaV0ubmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmZ3BfcmVzb3VyY2VzW2ldOworCX0KKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChhc2ljX3Jlc291cmNlX2dldCk7CisKKy8qKgorICogcGxhdGZvcm1fcmVsZWFzZV9tZW1vcnkgLSByZWxlYXNlIHByZS1hbGxvY2F0ZWQgbWVtb3J5CisgKiBAcHRyOglwb2ludGVyIHRvIG1lbW9yeSB0byByZWxlYXNlCisgKiBAc2l6ZToJc2l6ZSBvZiByZXNvdXJjZQorICoKKyAqIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBmb3IgbWVtb3J5IGFsbG9jYXRlZCBvciByZXNlcnZlZCB2aWEgdGhlIGJvb3QKKyAqIG1lbW9yeSBhbGxvY2F0b3IuCisgKi8KK3ZvaWQgcGxhdGZvcm1fcmVsZWFzZV9tZW1vcnkodm9pZCAqcHRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlhZGRyID0gKCh1bnNpZ25lZCBsb25nKXB0ciArIChQQUdFX1NJWkUgLSAxKSkgJiBQQUdFX01BU0s7CisJZW5kID0gKCh1bnNpZ25lZCBsb25nKXB0ciArIHNpemUpICYgUEFHRV9NQVNLOworCisJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShfX3ZhKGFkZHIpKSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX192YShhZGRyKSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwbGF0Zm9ybV9yZWxlYXNlX21lbW9yeSk7CisKKy8qCisgKgorICogRkVBVFVSRSBBVkFJTEFCSUxJVFkgRlVOQ1RJT05TCisgKgorICovCitpbnQgcGxhdGZvcm1fc3VwcG9ydHNfZHZyKHZvaWQpCit7CisJcmV0dXJuIChwbGF0Zm9ybV9mZWF0dXJlcyAmIERWUl9DQVBBQkxFKSAhPSAwOworfQorCitpbnQgcGxhdGZvcm1fc3VwcG9ydHNfZmZzKHZvaWQpCit7CisJcmV0dXJuIChwbGF0Zm9ybV9mZWF0dXJlcyAmIEZGU19DQVBBQkxFKSAhPSAwOworfQorCitpbnQgcGxhdGZvcm1fc3VwcG9ydHNfcGNpZSh2b2lkKQoreworCXJldHVybiAocGxhdGZvcm1fZmVhdHVyZXMgJiBQQ0lFX0NBUEFCTEUpICE9IDA7Cit9CisKK2ludCBwbGF0Zm9ybV9zdXBwb3J0c19kaXNwbGF5KHZvaWQpCit7CisJcmV0dXJuIChwbGF0Zm9ybV9mZWF0dXJlcyAmIERJU1BMQVlfQ0FQQUJMRSkgIT0gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGIyZWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDQgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBSYWxmIEJhZWNobGUKKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwOSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFJvdXRpbmVzIGZvciBnZW5lcmljIG1hbmlwdWxhdGlvbiBvZiB0aGUgaW50ZXJydXB0cyBmb3VuZCBvbiB0aGUgUG93ZXJUVgorICogcGxhdGZvcm0uCisgKgorICogVGhlIGludGVycnVwdCBjb250cm9sbGVyIGlzIGxvY2F0ZWQgaW4gdGhlIFNvdXRoIEJyaWRnZSBhIFBJSVg0IGRldmljZQorICogd2l0aCB0d28gaW50ZXJuYWwgODJDOTUgaW50ZXJydXB0IGNvbnRyb2xsZXJzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9pbnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpcnE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOworCisJaXJxID0gKGFzaWNfcmVhZChpbnRfaW50X3NjYW4pID4+IDQpIC0gMTsKKworCWlmIChpcnEgPT0gMCB8fCBpcnEgPj0gTlJfSVJRUykKKwkJaXJxID0gLTE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaXJxOworfQorCitzdGF0aWMgdm9pZCBhc2ljX2lycWRpc3BhdGNoKHZvaWQpCit7CisJaW50IGlycTsKKworCWlycSA9IGdldF9pbnQoKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuOyAgLyogaW50ZXJydXB0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCAqLworCisJZG9fSVJRKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNseih1bnNpZ25lZCBsb25nIHgpCit7CisJX19hc21fXygKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisvKgorICogVmVyc2lvbiBvZiBmZnMgdGhhdCBvbmx5IGxvb2tzIGF0IGJpdHMgMTIuLjE1LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfZmZzKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworCXJldHVybiBmbHMocGVuZGluZykgLSAxICsgQ0FVU0VCX0lQOworfQorCisvKgorICogVE9ETzogY2hlY2sgaG93IGl0IHdvcmtzIHVuZGVyIEVJQyBtb2RlLgorICovCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID09IENBVVNFRl9JUDMpCisJCWFzaWNfaXJxZGlzcGF0Y2goKTsKKwllbHNlIGlmIChpcnEgPj0gMCkKKwkJZG9fSVJRKGlycSk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKK30KKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQoreworCWludCBpOworCisJYXNpY19pcnFfaW5pdCgpOworCisJLyoKKwkgKiBJbml0aWFsaXplIGludGVycnVwdCBleGNlcHRpb24gdmVjdG9ycy4KKwkgKi8KKwlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgeworCQlpbnQgbnZlYyA9IGNwdV9oYXNfdmVpYyA/IDY0IDogODsKKwkJZm9yIChpID0gMDsgaSA8IG52ZWM7IGkrKykKKwkJCXNldF92aV9oYW5kbGVyKGksIGFzaWNfaXJxZGlzcGF0Y2gpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvaXJxX2FzaWMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvaXJxX2FzaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRkMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9pcnFfYXNpYy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYyBBdGxhbnRhCisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIE1vZGlmaWVkIGZyb20gYXJjaC9taXBzL2tlcm5lbC9pcnEtcm03MDAwLmM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmFsZiBCYWVjaGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ3MuaD4KKworc3RhdGljIGlubGluZSB2b2lkIHVubWFza19hc2ljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZW5hYmxlX2JpdDsKKworCWVuYWJsZV9iaXQgPSAoMSA8PCAoaXJxICYgMHgxZikpOworCisJc3dpdGNoIChpcnEgPj4gNSkgeworCWNhc2UgMDoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8wKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8xKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8yKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8zKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hc2tfYXNpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpc2FibGVfbWFzazsKKworCWRpc2FibGVfbWFzayA9IH4oMSA8PCAoaXJxICYgMHgxZikpOworCisJc3dpdGNoIChpcnEgPj4gNSkgeworCWNhc2UgMDoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8wKSAmIGRpc2FibGVfbWFzaywgaWVuX2ludF8wKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhc2ljX3dyaXRlKGFzaWNfcmVhZChpZW5faW50XzEpICYgZGlzYWJsZV9tYXNrLCBpZW5faW50XzEpOworCQlicmVhazsKKwljYXNlIDI6CisJCWFzaWNfd3JpdGUoYXNpY19yZWFkKGllbl9pbnRfMikgJiBkaXNhYmxlX21hc2ssIGllbl9pbnRfMik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8zKSAmIGRpc2FibGVfbWFzaywgaWVuX2ludF8zKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGFzaWNfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiQVNJQyBMZXZlbCIsCisJLmFjayA9IG1hc2tfYXNpY19pcnEsCisJLm1hc2sgPSBtYXNrX2FzaWNfaXJxLAorCS5tYXNrX2FjayA9IG1hc2tfYXNpY19pcnEsCisJLnVubWFzayA9IHVubWFza19hc2ljX2lycSwKKwkuZW9pID0gdW5tYXNrX2FzaWNfaXJxLAorfTsKKwordm9pZCBfX2luaXQgYXNpY19pcnFfaW5pdCh2b2lkKQoreworCWludCBpOworCisJLyogc2V0IHByaW9yaXR5IHRvIDAgKi8KKwl3cml0ZV9jMF9zdGF0dXMocmVhZF9jMF9zdGF0dXMoKSAmIH4oMHgwMDAwZmMwMCkpOworCisJYXNpY193cml0ZSgwLCBpZW5faW50XzApOworCWFzaWNfd3JpdGUoMCwgaWVuX2ludF8xKTsKKwlhc2ljX3dyaXRlKDAsIGllbl9pbnRfMik7CisJYXNpY193cml0ZSgwLCBpZW5faW50XzMpOworCisJYXNpY193cml0ZSgweDBmZmZmZmZmLCBpbnRfbGV2ZWxfM18zKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8zXzIpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzNfMSk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfM18wKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8yXzMpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzJfMik7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMl8xKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8yXzApOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzFfMyk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMV8yKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8xXzEpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzFfMCk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMF8zKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8wXzIpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzBfMSk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMF8wKTsKKworCWFzaWNfd3JpdGUoMHhmLCBpbnRfaW50X3NjYW4pOworCisJLyoKKwkgKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGVycy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmFzaWNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jYWxsaW9wZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jYWxsaW9wZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWI3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL3ByZWFsbG9jLWNhbGxpb3BlLmMKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgKiBNZW1vcnkgcHJlLWFsbG9jYXRpb25zIGZvciBDYWxsaW9wZSBib3hlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKKy8qCisgKiBOT05fRFZSX0NBUEFCTEUgQ0FMTElPUEUgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2NhbGxpb3BlX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICogVklERU8gLyBMWDEKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLCAgICAgCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyNDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDAwMDAgLSAxLAkvKjJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLCAgIC8qOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDIwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS5lbmQgICAgPSAweDI2NzAwMDAwIC0gMSwgLyp+MzYuOU1pQiAoMzJNaUIgLSAoMk1pQiArIDhLaUIpKSAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQVZNRU1QYXJ0aXRpb24wIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwNjAwMDAwIC0gMSwJLyogNiBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERPQ1NJUyBTdWJzeXN0ZW0KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRG9jc2lzIiwKKwkJLnN0YXJ0ICA9IDB4MjIwMDAwMDAsCisJCS5lbmQgICAgPSAweDIyNzAwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHgyMjcwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjM1MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDIzNzAwMDAwLAorCQkuZW5kICAgID0gMHgyMzcyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRE1BIFJpbmcgYnVmZmVyIChkb24ndCBuZWVkIHJlY29yZGluZyBidWZmZXJzKQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJCTU1fQnVmZmVyIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMEFBMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczAiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsCQkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBBVkZTOiBwbGF5ZXIgSEFMIG1lbW9yeQorCSAqCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDJjNGMwMCAtIDEsCS8qIDk0NUsgKiAzIGZvciBwbGF5YmFjayAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFBNRU0KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNtYXJ0Y2FyZAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTbWFydENhcmRJbmZvIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIE5BTkQgRmxhc2gKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTmFuZEZsYXNoIiwKKwkJLnN0YXJ0ICA9IE5BTkRfRkxBU0hfQkFTRSwKKwkJLmVuZCAgICA9IE5BTkRfRkxBU0hfQkFTRSArIDB4NDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqIFN5bm9wc3lzIEdNQUMgTWVtb3J5IFJlZ2lvbgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHTUFDIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBBZGQgb3RoZXIgcmVzb3VyY2VzIGhlcmUKKwkgKgorCSAqLworCXsgfSwKK307CisKK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX3Z6X2NhbGxpb3BlX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICogVklERU8gLyBMWDEKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjQwMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MjAwMDAwIC0gMSwgLyoyIE1lZyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhrIGJsb2NrIFNUMjMxYSBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDI0MjAwMDAwLAorCQkuZW5kICAgID0gMHgyNDIwMjAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHgyMjIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MjJDMjBCODUgLSAxLAkvKiAxMC4xMiBNZWcgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTeXNhdWRpbyBEcml2ZXIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTVEFWRU0gZHJpdmVyL1NUQVBJCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDIwMzAwMDAwLAorCQkuZW5kICAgID0gMHgyMDYyMDAwMC0xLCAgLyozLjEyNSBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDIwMTAwMDAwLAorCQkuZW5kICAgID0gMHgyMDMwMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4MjM5MDAwMDAsCisJCS5lbmQgICAgPSAweDIzOTIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBETUEgUmluZyBidWZmZXIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQk1NX0J1ZmZlciIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBBQTAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlciBmb3IgdW5pdDAKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMwIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFBNRU0KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNtYXJ0Y2FyZAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTbWFydENhcmRJbmZvIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIE5BTkQgRmxhc2gKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTmFuZEZsYXNoIiwKKwkJLnN0YXJ0ICA9IE5BTkRfRkxBU0hfQkFTRSwKKwkJLmVuZCAgICA9IE5BTkRfRkxBU0hfQkFTRSsweDQwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKiBTeW5vcHN5cyBHTUFDIE1lbW9yeSBSZWdpb24KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiR01BQyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKKworc3RydWN0IHJlc291cmNlIG5vbl9kdnJfdnplX2NhbGxpb3BlX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICogVklERU8gLyBMWDEKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjIwMDAwMDAsCisJCS5lbmQgICAgPSAweDIyMjAwMDAwIC0gMSwJLyoyICBNZWcgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLAkvKiA4ayBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyMjIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjIyMDIwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjIyMDIwMDAsCisJCS5lbmQgICAgPSAweDIyQzIwQjg1IC0gMSwJLyogMTAuMTIgTWVnICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU3lzYXVkaW8gRHJpdmVyCisJICovCisJeworCQkubmFtZSAgID0gIkRTUF9JbWFnZV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMEZGRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19DUFVfUENNX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDlGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0FVWF9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19NYWluX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBVk1FTVBhcnRpdGlvbjAiLAorCQkuc3RhcnQgID0gMHgyMDM5NjAwMCwKKwkJLmVuZCAgICA9IDB4MjA2QjYwMDAgLSAxLAkJLyogMy4xMjUgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHgyMDEwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjAzOTYwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDIwNkI2MDAwLAorCQkuZW5kICAgID0gMHgyMDZENjAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRE1BIFJpbmcgYnVmZmVyCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBQTUVNCisJICovCisJeworCQkubmFtZSAgID0gIkRpYWdQZXJzaXN0ZW50TWVtb3J5IiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTbWFydGNhcmQKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgyODAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBOQU5EIEZsYXNoCisJICovCisJeworCQkubmFtZSAgID0gIk5hbmRGbGFzaCIsCisJCS5zdGFydCAgPSBOQU5EX0ZMQVNIX0JBU0UsCisJCS5lbmQgICAgPSBOQU5EX0ZMQVNIX0JBU0UrMHg0MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFN5bm9wc3lzIEdNQUMgTWVtb3J5IFJlZ2lvbgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHTUFDIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBBZGQgb3RoZXIgcmVzb3VyY2VzIGhlcmUKKwkgKi8KKwl7IH0sCit9OworCitzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl92emZfY2FsbGlvcGVfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9Cit7CisJLyoKKwkgKiBWSURFTyAvIExYMQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qRGVsdGEtTXUgMSBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDI0MDAwMDAwLAorCQkuZW5kICAgID0gMHgyNDIwMDAwMCAtIDEsCS8qMk1pQiAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDIwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS8qIH4xOS40ICgyMS41TWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmVuZCAgICA9IDB4MjU1ODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQVZNRU1QYXJ0aXRpb24wIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwNDgwMDAwIC0gMSwgIC8qIDQuNSBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDIyNzAwMDAwLAorCQkuZW5kICAgID0gMHgyMzUwMDAwMCAtIDEsIC8qIDE0IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4MjM3MDAwMDAsCisJCS5lbmQgICAgPSAweDIzNzIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBETUEgUmluZyBidWZmZXIgKGRvbid0IG5lZWQgcmVjb3JkaW5nIGJ1ZmZlcnMpCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwgIC8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczEiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsICAvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBBVkZTOiBwbGF5ZXIgSEFMIG1lbW9yeQorCSAqCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDJjNGMwMCAtIDEsICAvKiA5NDVLICogMyBmb3IgcGxheWJhY2sgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBQTUVNCisJICovCisJeworCQkubmFtZSAgID0gIkRpYWdQZXJzaXN0ZW50TWVtb3J5IiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTbWFydGNhcmQKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgyODAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBOQU5EIEZsYXNoCisJICovCisJeworCQkubmFtZSAgID0gIk5hbmRGbGFzaCIsCisJCS5zdGFydCAgPSBOQU5EX0ZMQVNIX0JBU0UsCisJCS5lbmQgICAgPSBOQU5EX0ZMQVNIX0JBU0UgKyAweDQwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU3lub3BzeXMgR01BQyBNZW1vcnkgUmVnaW9uCisJICovCisJeworCQkubmFtZSAgID0gIkdNQUMiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEFkZCBvdGhlciByZXNvdXJjZXMgaGVyZQorCSAqLworCXsgfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL3ByZWFsbG9jLWNyb251cy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jcm9udXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE1YzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jcm9udXMuYwpAQCAtMCwwICsxLDYwOCBAQAorLyoKKyAqIE1lbW9yeSBwcmUtYWxsb2NhdGlvbnMgZm9yIENyb251cyBib3hlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKKy8qCisgKiBEVlJfQ0FQQUJMRSBDUk9OVVMgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBkdnJfY3JvbnVzX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICoKKwkgKiBWSURFTzEgLyBMWDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyNDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFNb25pdG9yIiwJLyogOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDFGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHgyNDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MjVGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYkltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDYwMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFiTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4NjAyMDAwMDAsCisJCS5lbmQgICAgPSAweDYwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTIiLAorCQkuc3RhcnQgID0gMHg2MDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4NjFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDYzNTgwMDAwLAorCQkuZW5kICAgID0gMHg2NDE4MDAwMCAtIDEsICAvKiAxMiBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDYyMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MjcwMDAwMCAtIDEsCS8qIDcgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogR0hXIEhBTCBEcml2ZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIEdyYXBoaWNzSGVhcCAtIFBvd2VyVFYgR3JhcGhpY3MgSGVhcAorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDYyNzAwMDAwLAorCQkuZW5kICAgID0gMHg2MzUwMDAwMCAtIDEsCS8qIDE0IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDI2MDAwMDAwLAorCQkuZW5kICAgID0gMHgyNjAyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBETUEgUmluZyBidWZmZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQk1NX0J1ZmZlciIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDI4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MAorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRGlzcGxheSBCaW5zIGZvciB1bml0MAorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwJCS8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERpc3BsYXkgQmlucyBmb3IgdW5pdDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczEiLAorCQkuc3RhcnQgID0gMHg2NEFENDAwMCwKKwkJLmVuZCAgICA9IDB4NjRBRDUwMDAgLSAxLCAgLyogNCBLQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBJVEZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIklURlMiLAorCQkuc3RhcnQgID0gMHg2NDE4MDAwMCwKKwkJLyogODE1LDEwNCBieXRlcyBlYWNoIGZvciAyIElURlMgcGFydGl0aW9ucy4gKi8KKwkJLmVuZCAgICA9IDB4NjQzMERGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlMKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDY0MzBFMDAwLAorCQkvKiAoOTQ1SyAqIDgpID0gKDEyOEsgKjMpIDUgcGxheWJhY2tzIC8gMyBzZXJ2ZXIgKi8KKwkJLmVuZCAgICA9IDB4NjRBRDAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBdmZzRmlsZVN5cyIsCisJCS5zdGFydCAgPSAweDY0QUQwMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMTAwMCAtIDEsICAvKiA0SyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBQTUVNCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBQZXJzaXN0ZW50IG1lbW9yeSBmb3IgZGlhZ25vc3RpY3MuCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU21hcnRjYXJkCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBSZWFkIGFuZCB3cml0ZSBidWZmZXJzIGZvciBJbnRlcm5hbC9FeHRlcm5hbCBjYXJkcworCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNtYXJ0Q2FyZEluZm8iLAorCQkuc3RhcnQgID0gMHg2NEFEMTAwMCwKKwkJLmVuZCAgICA9IDB4NjRBRDM4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBLQVZORVQKKwkgKiAgICBOUCBSZXNldCBWZWN0b3IgLSBtdXN0IGJlIG9mIHRoZSBmb3JtIHh4Q3h4eHh4CisJICoJICAgTlAgSW1hZ2UgLSBtdXN0IGJlIHZpZGVvIGJhbmsgMQorCSAqCSAgIE5QIElQQyAtIG11c3QgYmUgdmlkZW8gYmFuayAyCisJICovCisJeworCQkubmFtZSAgID0gIk5QX1Jlc2V0X1ZlY3RvciIsCisJCS5zdGFydCAgPSAweDI3YzAwMDAwLAorCQkuZW5kICAgID0gMHgyN2MwMTAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JbWFnZSIsCisJCS5zdGFydCAgPSAweDI3MDIwMDAwLAorCQkuZW5kICAgID0gMHgyNzA2MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JUEMiLAorCQkuc3RhcnQgID0gMHg2MzUwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1ODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKKworLyoKKyAqIE5PTl9EVlJfQ0FQQUJMRSBDUk9OVVMgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2Nyb251c19yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0KK3sKKwkvKgorCSAqCisJICogVklERU8xIC8gTFgxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjQwMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MUZGRkZGLAkJLyogMk1pQiAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFhIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4MjQyMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS5lbmQgICAgPSAweDI1RkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBWSURFTzIgLyBMWDIKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWJJbWFnZSIsCS8qIERlbHRhLU11IDIgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHg2MDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYk1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYiBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDYwMjAwMDAwLAorCQkuZW5kICAgID0gMHg2MDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkyIiwKKwkJLnN0YXJ0ICA9IDB4NjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDYxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRFNQX0ltYWdlX0J1ZmYgLSBEU1AgY29kZSBhbmQgZGF0YSBpbWFnZXMgKDFNQikKKwkgKiAgQURTQ19DUFVfUENNX0J1ZmYgLSBBRFNDIENQVSBQQ00gYnVmZmVyICg0MEtCKQorCSAqICBBRFNDX0FVWF9CdWZmIC0gQURTQyBBVVggYnVmZmVyICgxNktCKQorCSAqICBBRFNDX01haW5fQnVmZiAtIEFEU0MgTWFpbiBidWZmZXIgKDE2S0IpCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFRoaXMgbWVtb3J5IGFyZWEgaXMgdXNlZCBmb3IgYWxsb2NhdGluZyBidWZmZXJzIGZvciBWaWRlbyBkZWNvZGluZworCSAqICBwdXJwb3Nlcy4gIEFsbG9jYXRpb24vRGUtYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBidWZmZXIgaXMgbWFuYWdlZAorCSAqICBieSB0aGUgU1RBVk1FTSBkcml2ZXIgb2YgdGhlIFNUQVBJLiAgVGhleSBjb3VsZCBiZSBEZWNpbWF0ZWQKKwkgKiAgUGljdHVyZSBCdWZmZXJzLCBJbnRlcm1lZGlhdGUgQnVmZmVycywgYXMgZGVlbWVkIG5lY2Vzc2FyeSBmb3IKKwkgKiAgdmlkZW8gZGVjb2RpbmcgcHVycG9zZXMsIGZvciBhbnkgdmlkZW8gZGVjb2RlcnMgb24gWmV1cy4KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBVk1FTVBhcnRpdGlvbjAiLAorCQkuc3RhcnQgID0gMHg2MzU4MDAwMCwKKwkJLmVuZCAgICA9IDB4NjQxODAwMDAgLSAxLCAgLyogMTIgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogRE9DU0lTIFN1YnN5c3RlbQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEb2NzaXMiLAorCQkuc3RhcnQgID0gMHg2MjAwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjI3MDAwMDAgLSAxLAkvKiA3IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBHcmFwaGljc0hlYXAgLSBQb3dlclRWIEdyYXBoaWNzIEhlYXAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg2MjcwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBtdWx0aSBjb20gYnVmZmVyIGFyZWEKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTXVsdGljb21TSE0iLAorCQkuc3RhcnQgID0gMHgyNjAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjYwMjAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRE1BIFJpbmcgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlciBmb3IgdW5pdDAKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERpc3BsYXkgQmlucyBmb3IgdW5pdDAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczAiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsCQkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMxIiwKKwkJLnN0YXJ0ICA9IDB4NjRBRDQwMDAsCisJCS5lbmQgICAgPSAweDY0QUQ1MDAwIC0gMSwgIC8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogQVZGUzogcGxheWVyIEhBTCBtZW1vcnkKKwkgKgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkF2ZnNEbWFNZW0iLAorCQkuc3RhcnQgID0gMHg2NDMwRTAwMCwKKwkJLmVuZCAgICA9IDB4NjQ1RDJDMDAgLSAxLCAgLyogOTQ1SyAqIDMgZm9yIHBsYXliYWNrICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFBNRU0KKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFBlcnNpc3RlbnQgbWVtb3J5IGZvciBkaWFnbm9zdGljcy4KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaWFnUGVyc2lzdGVudE1lbW9yeSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBTbWFydGNhcmQKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgZm9yIEludGVybmFsL0V4dGVybmFsIGNhcmRzCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDY0QUQxMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMzgwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEtBVk5FVAorCSAqICAgIE5QIFJlc2V0IFZlY3RvciAtIG11c3QgYmUgb2YgdGhlIGZvcm0geHhDeHh4eHgKKwkgKgkgICBOUCBJbWFnZSAtIG11c3QgYmUgdmlkZW8gYmFuayAxCisJICoJICAgTlAgSVBDIC0gbXVzdCBiZSB2aWRlbyBiYW5rIDIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTlBfUmVzZXRfVmVjdG9yIiwKKwkJLnN0YXJ0ICA9IDB4MjdjMDAwMDAsCisJCS5lbmQgICAgPSAweDI3YzAxMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0ltYWdlIiwKKwkJLnN0YXJ0ICA9IDB4MjcwMjAwMDAsCisJCS5lbmQgICAgPSAweDI3MDYwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0lQQyIsCisJCS5zdGFydCAgPSAweDYzNTAwMDAwLAorCQkuZW5kICAgID0gMHg2MzU4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtY3JvbnVzbGl0ZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jcm9udXNsaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhOTA1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtY3JvbnVzbGl0ZS5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogTWVtb3J5IHByZS1hbGxvY2F0aW9ucyBmb3IgQ3JvbnVzIExpdGUgYm94ZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYy1BdGxhbnRhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBBdXRob3I6ICAgICAgIEtlbiBFcHBpbmV0dAorICogICAgICAgICAgICAgICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpYy5oPgorCisvKgorICogTk9OX0RWUl9DQVBBQkxFIENST05VU0xJVEUgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2Nyb251c2xpdGVfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9Cit7CisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYUltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDYwMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4NjAyMDAwMDAsCisJCS5lbmQgICAgPSAweDYwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHg2MDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4NjFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDYzNTgwMDAwLAorCQkuZW5kICAgID0gMHg2M0I4MDAwMCAtIDEsICAvKiA2IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIERPQ1NJUyBTdWJzeXN0ZW0KKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRG9jc2lzIiwKKwkJLnN0YXJ0ICA9IDB4NjIwMDAwMDAsCisJCS5lbmQgICAgPSAweDYyNzAwMDAwIC0gMSwJLyogNyBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgR3JhcGhpY3NIZWFwIC0gUG93ZXJUViBHcmFwaGljcyBIZWFwCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiR3JhcGhpY3NIZWFwIiwKKwkJLnN0YXJ0ICA9IDB4NjI3MDAwMDAsCisJCS5lbmQgICAgPSAweDYzNTAwMDAwIC0gMSwJLyogMTQgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4MjYwMDAwMDAsCisJCS5lbmQgICAgPSAweDI2MDIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERNQSBSaW5nIGJ1ZmZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJCTU1fQnVmZmVyIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMEFBMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQwCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMwIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAkJLyogNCBLQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRGlzcGxheSBCaW5zIGZvciB1bml0MQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMSIsCisJCS5zdGFydCAgPSAweDYzQjgzMDAwLAorCQkuZW5kICAgID0gMHg2M0I4NDAwMCAtIDEsICAvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlM6IHBsYXllciBIQUwgbWVtb3J5CisJICoKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBdmZzRG1hTWVtIiwKKwkJLnN0YXJ0ICA9IDB4NjNCODQwMDAsCisJCS5lbmQgICAgPSAweDYzRTQ4QzAwIC0gMSwgIC8qIDk0NUsgKiAzIGZvciBwbGF5YmFjayAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBQTUVNCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBQZXJzaXN0ZW50IG1lbW9yeSBmb3IgZGlhZ25vc3RpY3MuCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU21hcnRjYXJkCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBSZWFkIGFuZCB3cml0ZSBidWZmZXJzIGZvciBJbnRlcm5hbC9FeHRlcm5hbCBjYXJkcworCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNtYXJ0Q2FyZEluZm8iLAorCQkuc3RhcnQgID0gMHg2M0I4MDAwMCwKKwkJLmVuZCAgICA9IDB4NjNCODI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBLQVZORVQKKwkgKiAgICBOUCBSZXNldCBWZWN0b3IgLSBtdXN0IGJlIG9mIHRoZSBmb3JtIHh4Q3h4eHh4CisJICoJICAgTlAgSW1hZ2UgLSBtdXN0IGJlIHZpZGVvIGJhbmsgMQorCSAqCSAgIE5QIElQQyAtIG11c3QgYmUgdmlkZW8gYmFuayAyCisJICovCisJeworCQkubmFtZSAgID0gIk5QX1Jlc2V0X1ZlY3RvciIsCisJCS5zdGFydCAgPSAweDI3YzAwMDAwLAorCQkuZW5kICAgID0gMHgyN2MwMTAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JbWFnZSIsCisJCS5zdGFydCAgPSAweDI3MDIwMDAwLAorCQkuZW5kICAgID0gMHgyNzA2MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JUEMiLAorCQkuc3RhcnQgID0gMHg2MzUwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1ODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogTkFORCBGbGFzaAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJOYW5kRmxhc2giLAorCQkuc3RhcnQgID0gTkFORF9GTEFTSF9CQVNFLAorCQkuZW5kICAgID0gTkFORF9GTEFTSF9CQVNFICsgMHg0MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtemV1cy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy16ZXVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4ZDQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtemV1cy5jCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogTWVtb3J5IHByZS1hbGxvY2F0aW9ucyBmb3IgWmV1cyBib3hlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKKy8qCisgKiBEVlJfQ0FQQUJMRSBSRVNPVVJDRVMKKyAqLworc3RydWN0IHJlc291cmNlIGR2cl96ZXVzX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICoKKwkgKiBWSURFTzEgLyBMWDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYSBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDIwMjAwMDAwLAorCQkuZW5kICAgID0gMHgyMDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDIxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYkltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDMwMDAwMDAwLAorCQkuZW5kICAgID0gMHgzMDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFiTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4MzAyMDAwMDAsCisJCS5lbmQgICAgPSAweDMwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTIiLAorCQkuc3RhcnQgID0gMHgzMDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MzFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMGMwMDAwMCAtIDEsCS8qIDEyIE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDQwMTAwMDAwLAorCQkuZW5kICAgID0gMHg0MDdmZmZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBHcmFwaGljc0hlYXAgLSBQb3dlclRWIEdyYXBoaWNzIEhlYXAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg0NjkwMDAwMCwKKwkJLmVuZCAgICA9IDB4NDc3MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4NDc5MDAwMDAsCisJCS5lbmQgICAgPSAweDQ3OTIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERNQSBSaW5nIGJ1ZmZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJCTU1fQnVmZmVyIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMjgwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQwCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMwIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMxIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBJVEZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIklURlMiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLyogODE1LDEwNCBieXRlcyBlYWNoIGZvciAyIElURlMgcGFydGl0aW9ucy4gKi8KKwkJLmVuZCAgICA9IDB4MDAxOERGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBBVkZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkF2ZnNEbWFNZW0iLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLyogKDk0NUsgKiA4KSA9ICgxMjhLICogMykgNSBwbGF5YmFja3MgLyAzIHNlcnZlciAqLworCQkuZW5kICAgID0gMHgwMDdjMjAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBdmZzRmlsZVN5cyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMTAwMCAtIDEsICAvKiA0SyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogUE1FTQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgUGVyc2lzdGVudCBtZW1vcnkgZm9yIGRpYWdub3N0aWNzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpYWdQZXJzaXN0ZW50TWVtb3J5IiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFNtYXJ0Y2FyZAorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgUmVhZCBhbmQgd3JpdGUgYnVmZmVycyBmb3IgSW50ZXJuYWwvRXh0ZXJuYWwgY2FyZHMKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTbWFydENhcmRJbmZvIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEFkZCBvdGhlciByZXNvdXJjZXMgaGVyZQorCSAqLworCXsgfSwKK307CisKKy8qCisgKiBOT05fRFZSX0NBUEFCTEUgWkVVUyBSRVNPVVJDRVMKKyAqLworc3RydWN0IHJlc291cmNlIG5vbl9kdnJfemV1c19yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0KK3sKKwkvKgorCSAqIFZJREVPMSAvIExYMQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYSBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDIwMjAwMDAwLAorCQkuZW5kICAgID0gMHgyMDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDIxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKiBTeXNhdWRpbyBEcml2ZXIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTVEFWRU0gZHJpdmVyL1NUQVBJCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDYwMDAwMCAtIDEsCS8qIDYgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDQwMTAwMDAwLAorCQkuZW5kICAgID0gMHg0MDdmZmZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg0NjkwMDAwMCwKKwkJLmVuZCAgICA9IDB4NDc3MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDQ3OTAwMDAwLAorCQkuZW5kICAgID0gMHg0NzkyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRE1BIFJpbmcgYnVmZmVyCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAyODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwJCS8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlM6IHBsYXllciBIQUwgbWVtb3J5CisJICoKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBdmZzRG1hTWVtIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMmM0YzAwIC0gMSwJLyogOTQ1SyAqIDMgZm9yIHBsYXliYWNrICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogUE1FTQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaWFnUGVyc2lzdGVudE1lbW9yeSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU21hcnRjYXJkCisJICovCisJeworCQkubmFtZSAgID0gIlNtYXJ0Q2FyZEluZm8iLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjgwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogTkFORCBGbGFzaAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJOYW5kRmxhc2giLAorCQkuc3RhcnQgID0gTkFORF9GTEFTSF9CQVNFLAorCQkuZW5kICAgID0gTkFORF9GTEFTSF9CQVNFICsgMHg0MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2NtZGxpbmUuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2NtZGxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQ3M2NiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvY21kbGluZS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIEtlcm5lbCBjb21tYW5kIGxpbmUgY3JlYXRpb24gdXNpbmcgdGhlIHByb20gbW9uaXRvciAoWUFNT04pIGFyZ2MvYXJndi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSAiaW5pdC5oIgorCisvKgorICogWUFNT04gKDMyLWJpdCBQUk9NKSBwYXNzIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgYXMgMzItYml0IHBvaW50ZXIuCisgKiBUaGlzIG1hY3JvIHRha2UgY2FyZSBvZiBzaWduIGV4dGVuc2lvbi4KKyAqLworI2RlZmluZSBwcm9tX2FyZ3YoaW5kZXgpICgoY2hhciAqKShsb25nKV9wcm9tX2FyZ3ZbKGluZGV4KV0pCisKK2NoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCit7CisJcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKK30KKwordm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCit7CisJaW50IGxlbjsKKworCWlmIChwcm9tX2FyZ2MgIT0gMSkKKwkJcmV0dXJuOworCisJbGVuID0gc3RybGVuKGFyY3NfY21kbGluZSk7CisKKwlhcmNzX2NtZGxpbmVbbGVuXSA9ICcgJzsKKworCXN0cmxjcHkoYXJjc19jbWRsaW5lICsgbGVuICsgMSwgKGNoYXIgKilfcHJvbV9hcmd2LAorCQlDT01NQU5EX0xJTkVfU0laRSAtIGxlbiAtIDEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvaW5pdC5jIGIvYXJjaC9taXBzL3Bvd2VydHYvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGU0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9pbml0LmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDQsIDIwMDUgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKglBbGwgcmlnaHRzIHJlc2VydmVkLgorICoJQXV0aG9yczogQ2Fyc3RlbiBMYW5nZ2FhcmQgPGNhcnN0ZW5sQG1pcHMuY29tPgorICoJCSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AbWlwcy5jb20+CisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFBST00gbGlicmFyeSBpbml0aWFsaXNhdGlvbiBjb2RlLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKworI2luY2x1ZGUgImluaXQuaCIKKworaW50IHByb21fYXJnYzsKK2ludCAqX3Byb21fYXJndiwgKl9wcm9tX2VudnA7Cit1bnNpZ25lZCBsb25nIF9wcm9tX21lbXNpemU7CisKKy8qCisgKiBZQU1PTiAoMzItYml0IFBST00pIHBhc3MgYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBhcyAzMi1iaXQgcG9pbnRlci4KKyAqIFRoaXMgbWFjcm8gdGFrZSBjYXJlIG9mIHNpZ24gZXh0ZW5zaW9uLCBpZiBydW5uaW5nIGluIDY0LWJpdCBtb2RlLgorICovCisjZGVmaW5lIHByb21fZW52cChpbmRleCkgKChjaGFyICopKGxvbmcpX3Byb21fZW52cFsoaW5kZXgpXSkKKworY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSkKK3sKKwljaGFyICpyZXN1bHQgPSBOVUxMOworCisJaWYgKF9wcm9tX2VudnAgIT0gTlVMTCkgeworCQkvKgorCQkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwkJICogSW4gNjQtYml0IG1vZGU6IHdlJ3JlIHVzaW5nIDY0LWJpdCBwb2ludGVycywgYnV0IGFsbCBwb2ludGVycworCQkgKiBpbiB0aGUgUFJPTSBzdHJ1Y3R1cmVzIGFyZSBvbmx5IDMyLWJpdCwgc28gd2UgbmVlZCBzb21lCisJCSAqIHdvcmthcm91bmRzLCBpZiB3ZSBhcmUgcnVubmluZyBpbiA2NC1iaXQgbW9kZS4KKwkJICovCisJCWludCBpLCBpbmRleCA9IDA7CisKKwkJaSA9IHN0cmxlbihlbnZuYW1lKTsKKworCQl3aGlsZSAocHJvbV9lbnZwKGluZGV4KSkgeworCQkJaWYgKHN0cm5jbXAoZW52bmFtZSwgcHJvbV9lbnZwKGluZGV4KSwgaSkgPT0gMCkgeworCQkJCXJlc3VsdCA9IHByb21fZW52cChpbmRleCArIDEpOworCQkJCWJyZWFrOworCQkJfQorCQkJaW5kZXggKz0gMjsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIFRPRE86IFZlcmlmeSBvbiBsaW51eC1taXBzIG1haWxpbmcgbGlzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHdvICAqLworLyogZnVuY3Rpb25zIGFyZSBjb3JyZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUT0RPOiBDb3B5IE5NSSBhbmQgRUpUQUcgZXhjZXB0aW9uIHZlY3RvcnMgdG8gbWVtb3J5IGZyb20gdGhlICAgKi8KKy8qIEJvb3RST00gZXhjZXB0aW9uIHZlY3RvcnMuIEZsdXNoIHRoZWlyIGNhY2hlIGVudHJpZXMuIHRlc3QgaXQuICAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgbWlwc19ubWlfc2V0dXAodm9pZCkKK3sKKwl2b2lkICpiYXNlOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCisJYmFzZSA9IGNwdV9oYXNfdmVpYyA/CisJCSh2b2lkICopKENBQ19CQVNFICsgMHhhODApIDoKKwkJKHZvaWQgKikoQ0FDX0JBU0UgKyAweDM4MCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IyKQorCWJhc2UgPSAodm9pZCAqKTB4YmZjMDAwMDA7CisjZWxzZQorI2Vycm9yIE5NSSBleGNlcHRpb24gaGFuZGxlciBhZGRyZXNzIG5vdCBkZWZpbmVkCisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pcHNfZWp0YWdfc2V0dXAodm9pZCkKK3sKKwl2b2lkICpiYXNlOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMl9SMSkKKwliYXNlID0gY3B1X2hhc192ZWljID8KKwkJKHZvaWQgKikoQ0FDX0JBU0UgKyAweGEwMCkgOgorCQkodm9pZCAqKShDQUNfQkFTRSArIDB4MzAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCisJYmFzZSA9ICh2b2lkICopMHhiZmMwMDQ4MDsKKyNlbHNlCisjZXJyb3IgRUpUQUcgZXhjZXB0aW9uIGhhbmRsZXIgYWRkcmVzcyBub3QgZGVmaW5lZAorI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCXByb21fYXJnYyA9IGZ3X2FyZzA7CisJX3Byb21fYXJndiA9IChpbnQgKikgZndfYXJnMTsKKwlfcHJvbV9lbnZwID0gKGludCAqKSBmd19hcmcyOworCV9wcm9tX21lbXNpemUgPSAodW5zaWduZWQgbG9uZykgZndfYXJnMzsKKworCWJvYXJkX25taV9oYW5kbGVyX3NldHVwID0gbWlwc19ubWlfc2V0dXA7CisJYm9hcmRfZWp0YWdfaGFuZGxlcl9zZXR1cCA9IG1pcHNfZWp0YWdfc2V0dXA7CisKKwlwcl9pbmZvKCJcbkxJTlVYIHN0YXJ0ZWQuLi5cbiIpOworCXByb21faW5pdF9jbWRsaW5lKCk7CisJY29uZmlndXJlX3BsYXRmb3JtKCk7CisJcHJvbV9tZW1pbml0KCk7CisKKyNpZm5kZWYgQ09ORklHX0JPT1RMT0FERVJfRFJJVkVSCisJcHJfaW5mbygiXG5Cb290bG9hZGVyIGRyaXZlciBpc24ndCBsb2FkZWQuLi5cbiIpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9pbml0LmggYi9hcmNoL21pcHMvcG93ZXJ0di9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmNmJmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2luaXQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogRGVmaW5pdGlvbnMgZnJvbSBwb3dlcnR2IGluaXQuYyBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3I6IERhdmlkIFZvbUxlaG4KKyAqLworCisjaWZuZGVmIF9QT1dFUlRWX0lOSVRfSAorI2RlZmluZSBfUE9XRVJUVl9JTklUX0gKK2V4dGVybiBpbnQgcHJvbV9hcmdjOworZXh0ZXJuIGludCAqX3Byb21fYXJndjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9wcm9tX21lbXNpemU7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L21lbW9yeS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkMDY2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L21lbW9yeS5jCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQXBwYXJlbnRseSBvcmlnaW5hbGx5IGZyb20gYXJjaC9taXBzL21hbHRhLW1lbW9yeS5jLiBNb2RpZmllZCB0byB3b3JrCisgKiB3aXRoIHRoZSBQb3dlclRWIGJvb3Rsb2FkZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3Byb20uaD4KKworI2luY2x1ZGUgImluaXQuaCIKKworLyogTWVtb3J5IGNvbnN0YW50cyAqLworI2RlZmluZSBLSUJJQllURShuKQkJKChuKSAqIDEwMjQpCS8qIE51bWJlciBvZiBraWJpYnl0ZXMgKi8KKyNkZWZpbmUgTUVCSUJZVEUobikJCSgobikgKiBLSUJJQllURSgxMDI0KSkgLyogTnVtYmVyIG9mIG1lYmlieXRlcyAqLworI2RlZmluZSBERUZBVUxUX01FTVNJWkUJCU1FQklCWVRFKDI1NikJLyogSWYgbm8gbWVtc2l6ZSBwcm92aWRlZCAqLworI2RlZmluZSBMT1dfTUVNX01BWAkJTUVCSUJZVEUoMjUyKQkvKiBNYXggdXNhYmxlIGxvdyBtZW0gKi8KKyNkZWZpbmUgUkVTX0JPT1RMRFJfTUVNU0laRQlNRUJJQllURSgxKQkvKiBNZW1vcnkgcmVzZXJ2ZWQgZm9yIGJsZHIgKi8KKyNkZWZpbmUgQk9PVF9NRU1fU0laRQkJS0lCSUJZVEUoMjU2KQkvKiBNZW1vcnkgcmVzZXJ2ZWQgZm9yIGJsZHIgKi8KKyNkZWZpbmUgUEhZU19NRU1fU1RBUlQJCTB4MTAwMDAwMDAJLyogU3RhcnQgb2YgcGh5c2ljYWwgbWVtb3J5ICovCisKK3Vuc2lnbmVkIGxvbmcgcHR2X21lbXNpemU7CisKK2NoYXIgX19pbml0ZGF0YSBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKwordm9pZCBfX2luaXQgcHJvbV9tZW1pbml0KHZvaWQpCit7CisJY2hhciAqbWVtc2l6ZV9zdHI7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgcGh5c2VuZDsKKwljaGFyICpwdHI7CisJaW50IGxvd19tZW07CisJaW50IGhpZ2hfbWVtOworCisJLyogQ2hlY2sgdGhlIGNvbW1hbmQgbGluZSBmaXJzdCBmb3IgYSBtZW1zaXplIGRpcmVjdGl2ZSAqLworCXN0cmNweShjbWRsaW5lLCBhcmNzX2NtZGxpbmUpOworCXB0ciA9IHN0cnN0cihjbWRsaW5lLCAibWVtc2l6ZT0iKTsKKwlpZiAocHRyICYmIChwdHIgIT0gY21kbGluZSkgJiYgKCoocHRyIC0gMSkgIT0gJyAnKSkKKwkJcHRyID0gc3Ryc3RyKHB0ciwgIiBtZW1zaXplPSIpOworCisJaWYgKHB0cikgeworCQltZW1zaXplID0gbWVtcGFyc2UocHRyICsgOCwgJnB0cik7CisJfSBlbHNlIHsKKwkJLyogb3RoZXJ3aXNlIGxvb2sgaW4gdGhlIGVudmlyb25tZW50ICovCisJCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKKworCQlpZiAobWVtc2l6ZV9zdHIgIT0gTlVMTCkgeworCQkJcHJfaW5mbygicHJvbSBtZW1zaXplID0gJXNcbiIsIG1lbXNpemVfc3RyKTsKKwkJCW1lbXNpemUgPSBzaW1wbGVfc3RydG9sKG1lbXNpemVfc3RyLCBOVUxMLCAwKTsKKwkJfQorCisJCWlmIChtZW1zaXplID09IDApIHsKKwkJCWlmIChfcHJvbV9tZW1zaXplICE9IDApIHsKKwkJCQltZW1zaXplID0gX3Byb21fbWVtc2l6ZTsKKwkJCQlwcl9pbmZvKCJfcHJvbV9tZW1zaXplID0gMHglbHhcbiIsIG1lbXNpemUpOworCQkJCS8qIGFkZCBpbiBtZW1vcnkgdGhhdCB0aGUgYm9vdGxvYWRlciBkb2Vzbid0CisJCQkJICogcmVwb3J0ICovCisJCQkJbWVtc2l6ZSArPSBCT09UX01FTV9TSVpFOworCQkJfSBlbHNlIHsKKwkJCQltZW1zaXplID0gREVGQVVMVF9NRU1TSVpFOworCQkJCXByX2luZm8oIk1lbXNpemUgbm90IHBhc3NlZCBieSBib290bG9hZGVyLCAiCisJCQkJCSJkZWZhdWx0aW5nIHRvIDB4JWx4XG4iLCBtZW1zaXplKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFN0b3JlIG1lbXNpemUgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KKwlwdHZfbWVtc2l6ZSA9IG1lbXNpemU7CisKKwlwaHlzZW5kID0gUEZOX0FMSUdOKCZfZW5kKSAtIDB4ODAwMDAwMDA7CisJaWYgKG1lbXNpemUgPiBMT1dfTUVNX01BWCkgeworCQlsb3dfbWVtID0gTE9XX01FTV9NQVg7CisJCWhpZ2hfbWVtID0gbWVtc2l6ZSAtIGxvd19tZW07CisJfSBlbHNlIHsKKwkJbG93X21lbSA9IG1lbXNpemU7CisJCWhpZ2hfbWVtID0gMDsKKwl9CisKKy8qCisgKiBUT0RPOiBXZSB3aWxsIHVzZSB0aGUgaGFyZCBjb2RlIGZvciBtZW1vcnkgY29uZmlndXJhdGlvbiB1bnRpbAorICogdGhlIGJvb3Rsb2FkZXIgcmVsZWFzZXMgdGhlaXIgZGV2aWNlIHRyZWUgdG8gdXMuCisgKi8KKwkvKgorCSAqIEFkZCB0aGUgbWVtb3J5IHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIGJvb3Rsb2FkZXIgdG8gdGhlCisJICogbWVtb3J5IG1hcC4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX01FTV9TVEFSVCwgUkVTX0JPT1RMRFJfTUVNU0laRSwKKwkJQk9PVF9NRU1fUkVTRVJWRUQpOworI2lmZGVmIENPTkZJR19ISUdITUVNXzI1Nl8xMjgKKwkvKgorCSAqIEFkZCBtZW1vcnkgaW4gbG93IGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcworCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX01FTV9TVEFSVCArIFJFU19CT09UTERSX01FTVNJWkUsCisJCUxPV19NRU1fTUFYIC0gUkVTX0JPT1RMRFJfTUVNU0laRSwgQk9PVF9NRU1fUkFNKTsKKwkvKgorCSAqIEFkZCB0aGUgbWVtb3J5IHJlc2VydmVkIGZvciByZXNldCB2ZWN0b3IuCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oMHgxZmMwMDAwMCwgTUVCSUJZVEUoNCksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKwkvKgorCSAqIEFkZCB0aGUgbWVtb3J5IHJlc2VydmVkLgorCSAqLworCWFkZF9tZW1vcnlfcmVnaW9uKDB4MjAwMDAwMDAsIE1FQklCWVRFKDEwMjQgKyA3NSksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKwkvKgorCSAqIEFkZCBtZW1vcnkgaW4gaGlnaCBmb3IgZ2VuZXJhbCB1c2UgYnkgdGhlIGtlcm5lbCBhbmQgaXRzIGZyaWVuZHMKKwkgKiAobGlrZSBkcml2ZXJzLCBhcHBsaWNhdGlvbnMsIGV0YykuCisJICoKKwkgKiA3NU1CIGlzIHJlc2VydmVkIGZvciBkZXZpY2VzIHdoaWNoIGFyZSB1c2luZyB0aGUgbWVtb3J5IGluIGhpZ2guCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oMHg2MDAwMDAwMCArIE1FQklCWVRFKDc1KSwgTUVCSUJZVEUoMTI4IC0gNzUpLAorCQlCT09UX01FTV9SQU0pOworI2VsaWYgZGVmaW5lZCBDT05GSUdfSElHSE1FTV8xMjhfMTI4CisJLyoKKwkgKiBBZGQgbWVtb3J5IGluIGxvdyBmb3IgZ2VuZXJhbCB1c2UgYnkgdGhlIGtlcm5lbCBhbmQgaXRzIGZyaWVuZHMKKwkgKiAobGlrZSBkcml2ZXJzLCBhcHBsaWNhdGlvbnMsIGV0YykuCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oUEhZU19NRU1fU1RBUlQgKyBSRVNfQk9PVExEUl9NRU1TSVpFLAorCQlNRUJJQllURSgxMjgpIC0gUkVTX0JPT1RMRFJfTUVNU0laRSwgQk9PVF9NRU1fUkFNKTsKKwkvKgorCSAqIEFkZCB0aGUgbWVtb3J5IHJlc2VydmVkLgorCSAqLworCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfTUVNX1NUQVJUICsgTUVCSUJZVEUoMTI4KSwKKwkJTUVCSUJZVEUoMTI4ICsgMTAyNCArIDc1KSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCS8qCisJICogQWRkIG1lbW9yeSBpbiBoaWdoIGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcworCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KKwkgKgorCSAqIDc1TUIgaXMgcmVzZXJ2ZWQgZm9yIGRldmljZXMgd2hpY2ggYXJlIHVzaW5nIHRoZSBtZW1vcnkgaW4gaGlnaC4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbigweDYwMDAwMDAwICsgTUVCSUJZVEUoNzUpLCBNRUJJQllURSgxMjggLSA3NSksCisJCUJPT1RfTUVNX1JBTSk7CisjZWxzZQorCS8qIEFkZCBsb3cgbWVtb3J5IHJlZ2lvbnMgZm9yIGVpdGhlcjoKKwkgKiAgIC0gbm8taGlnaG1lbW9yeSBjb25maWd1cmF0aW9uIGNhc2UgLU9SLQorCSAqICAgLSBoaWdobWVtb3J5ICJISUdITUVNX0xPV0JBTktfT05MWSIgY2FzZQorCSAqLworCS8qCisJICogQWRkIG1lbW9yeSBmb3IgZ2VuZXJhbCB1c2UgYnkgdGhlIGtlcm5lbCBhbmQgaXRzIGZyaWVuZHMKKwkgKiAobGlrZSBkcml2ZXJzLCBhcHBsaWNhdGlvbnMsIGV0YykuCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oUEhZU19NRU1fU1RBUlQgKyBSRVNfQk9PVExEUl9NRU1TSVpFLAorCQlsb3dfbWVtIC0gUkVTX0JPT1RMRFJfTUVNU0laRSwgQk9PVF9NRU1fUkFNKTsKKwkvKgorCSAqIEFkZCB0aGUgbWVtb3J5IHJlc2VydmVkIGZvciByZXNldCB2ZWN0b3IuCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oMHgxZmMwMDAwMCwgTUVCSUJZVEUoNCksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYm9vdF9tZW1fbWFwLm5yX21hcDsgaSsrKSB7CisJCWlmIChib290X21lbV9tYXAubWFwW2ldLnR5cGUgIT0gQk9PVF9NRU1fUk9NX0RBVEEpCisJCQljb250aW51ZTsKKworCQlhZGRyID0gYm9vdF9tZW1fbWFwLm1hcFtpXS5hZGRyOworCQlmcmVlX2luaXRfcGFnZXMoInByb20gbWVtb3J5IiwKKwkJCQlhZGRyLCBhZGRyICsgYm9vdF9tZW1fbWFwLm1hcFtpXS5zaXplKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wY2kvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG93ZXJ0di9wY2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjNjI0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOSAgU2NpZW50aWZpYy1BdGxhbnRhLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisjCisKK29iai0kKENPTkZJR19QQ0kpCSs9IGZpeHVwLXBvd2VydHYubworCitFWFRSQV9DRkxBR1MgKz0gLVdhbGwgLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvcGNpL2ZpeHVwLXBvd2VydHYuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9maXh1cC1wb3dlcnR2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2YmMyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9maXh1cC1wb3dlcnR2LmMKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaD4KKyNpbmNsdWRlICJwb3dlcnR2LXBjaS5oIgorCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJcmV0dXJuIGFzaWNfcGNpZV9tYXBfaXJxKGRldiwgc2xvdCwgcGluKTsKK30KKworLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLworaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKgorICogYXNpY19wY2llX21hcF9pcnEKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogKmRldiAtIHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZSAgKG5vdCB1c2VkKQorICogc2xvdCAtIHNsb3QgbnVtYmVyICAobm90IHVzZWQpCisgKiBwaW4gLSBwaW4gbnVtYmVyICAobm90IHVzZWQpCisgKgorICogUmV0dXJuIFZhbHVlOgorICogUmV0dXJuczogSVJRIG51bWJlciAoYWx3YXlzIHRoZSBQQ0kgRXhwcmVzcyBJUlEgbnVtYmVyKQorICoKKyAqIERlc2NyaXB0aW9uOgorICogYXNpY19wY2llX21hcF9pcnEgd2lsbCByZXR1cm4gdGhlIElSUSBudW1iZXIgb2YgdGhlIFBDSSBFeHByZXNzIGludGVycnVwdC4KKyAqCisgKi8KK2ludCBhc2ljX3BjaWVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJcmV0dXJuIGlycV9wY2lleHA7Cit9CitFWFBPUlRfU1lNQk9MKGFzaWNfcGNpZV9tYXBfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9wb3dlcnR2LXBjaS5oIGIvYXJjaC9taXBzL3Bvd2VydHYvcGNpL3Bvd2VydHYtcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1ODg2YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9wb3dlcnR2LXBjaS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKgkJCQlwb3dlcnR2LXBjaS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworLyoKKyAqIExvY2FsIGRlZmluaXRpb25zIGZvciB0aGUgcG93ZXJ0diBQQ0kgY29kZQorICovCisKKyNpZm5kZWYgX1BPV0VSVFZfUENJX1BPV0VSVFZfUENJX0hfCisjZGVmaW5lIF9QT1dFUlRWX1BDSV9QT1dFUlRWX1BDSV9IXworZXh0ZXJuIGludCBhc2ljX3BjaWVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworZXh0ZXJuIGludCBhc2ljX3BjaWVfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgYXNpY19wY2llX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgbG9nX2xldmVsOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2LWNsb2NrLmggYi9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2LWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0YzU0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHYtY2xvY2suaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3I6IERhdmlkIFZvbUxlaG4KKyAqLworCisjaWZuZGVmIF9QT1dFUlRWX1BPV0VSVFZfQ0xPQ0tfSAorI2RlZmluZSBfUE9XRVJUVl9QT1dFUlRWX0NMT0NLX0gKK2V4dGVybiBpbnQgcG93ZXJ0dl9jbG9ja2V2ZW50X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwb3dlcnR2X2Nsb2Nrc291cmNlX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IG1pcHNfZ2V0X3BsbF9mcmVxKHZvaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4ZWJmMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlICJyZXNldC5oIgorCisjZGVmaW5lIFZBTChuKQkJU1RSKG4pCisKKy8qCisgKiBNYWNyb3MgZm9yIGxvYWRpbmcgYWRkcmVzc2VzIGFuZCBzdG9yaW5nIHJlZ2lzdGVyczoKKyAqIFBUUl9MQQlMb2FkIHRoZSBhZGRyZXNzIGludG8gYSByZWdpc3RlcgorICogTE9OR19TCVN0b3JlIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBnaXZlbiByZWdpc3Rlci4KKyAqIExPTkdfTAlMb2FkIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBnaXZlbiByZWdpc3RlcgorICogUFRSX0FERElVCUFkZCBhIGNvbnN0YW50IHZhbHVlIHRvIGEgcmVnaXN0ZXIgdXNlZCBhcyBhIHBvaW50ZXIKKyAqIFJFR19TSVpFCU51bWJlciBvZiA4LWJpdCBieXRlcyBpbiBhIGZ1bGwgd2lkdGggcmVnaXN0ZXIKKyAqLworI2lmZGVmIENPTkZJR182NEJJVAorI3dhcm5pbmcgVE9ETzogNjQtYml0IGNvZGUgbmVlZHMgdG8gYmUgdmVyaWZpZWQKKyNkZWZpbmUgUFRSX0xBCQkiZGxhCSIKKyNkZWZpbmUgTE9OR19TCQkic2QJIgorI2RlZmluZSBMT05HX0wJCSJsZAkiCisjZGVmaW5lIFBUUl9BRERJVQkiZGFkZGl1CSIKKyNkZWZpbmUgUkVHX1NJWkUJIjgiCQkvKiBJbiBieXRlcyAqLworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfMzJCSVQKKyNkZWZpbmUgUFRSX0xBCQkibGEJIgorI2RlZmluZSBMT05HX1MJCSJzdwkiCisjZGVmaW5lIExPTkdfTAkJImx3CSIKKyNkZWZpbmUgUFRSX0FERElVCSJhZGRpdQkiCisjZGVmaW5lIFJFR19TSVpFCSI0IgkJLyogSW4gYnl0ZXMgKi8KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHB0X3JlZ3MgZGllX3JlZ3M7CitzdGF0aWMgYm9vbCBoYXZlX2RpZV9yZWdzOworCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9wYW5pY19ub3RpZmllcih2b2lkKTsKK3N0YXRpYyBpbnQgcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyX2Jsb2NrLAorCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmNhdXNlX3N0cmluZyk7CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiUG93ZXJUViI7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCit7CisJcGFuaWNfb25fb29wcyA9IDE7CisJcmVnaXN0ZXJfcGFuaWNfbm90aWZpZXIoKTsKKworI2lmIDAKKwltaXBzX3BjaWJpb3NfaW5pdCgpOworI2VuZGlmCisJbWlwc19yZWJvb3Rfc2V0dXAoKTsKK30KKworLyoKKyAqIEluc3RhbGwgYSBwYW5pYyBub3RpZmllciBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgZGlhZ25vc3RpY3MKKyAqLworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGFuaWNfbm90aWZpZXIoKQoreworCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNfbm90aWZpZXIgPSB7CisJCS5ub3RpZmllcl9jYWxsID0gcGFuaWNfaGFuZGxlciwKKwkJLm5leHQgPSBOVUxMLAorCQkucHJpb3JpdHkJPSBJTlRfTUFYCisJfTsKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY19ub3RpZmllcik7Cit9CisKK3N0YXRpYyBpbnQgcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyX2Jsb2NrLAorCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmNhdXNlX3N0cmluZykKK3sKKwlzdHJ1Y3QgcHRfcmVncwlteV9yZWdzOworCisJLyogU2F2ZSBhbGwgb2YgdGhlIHJlZ2lzdGVycyAqLworCXsKKwkJdW5zaWduZWQgbG9uZwlhdCwgdjAsIHYxOyAvKiBNdXN0IGJlIG9uIHRoZSBzdGFjayAqLworCisJCS8qIFN0YXJ0IGJ5IHNhdmluZyAkYXQgYW5kIHYwIG9uIHRoZSBzdGFjay4gV2UgdXNlICRhdAorCQkgKiBvdXJzZWx2ZXMsIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBjb21waWxlciBtYXkgdXNlIHYwIG9yIHYxCisJCSAqIHRvIGxvYWQgdGhlIGFkZHJlc3Mgb2YgdGhlIHB0X3JlZ3Mgc3RydWN0dXJlLiBXZSdsbCBjb21lCisJCSAqIGJhY2sgbGF0ZXIgdG8gc3RvcmUgdGhlIHJlZ2lzdGVycyBpbiB0aGUgcHRfcmVncworCQkgKiBzdHJ1Y3R1cmUuICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSIuc2V0CW5vYXRcbiIKKwkJCUxPTkdfUwkJIiRhdCwgJVthdF1cbiIKKwkJCUxPTkdfUwkJIiQyLCAlW3YwXVxuIgorCQkJTE9OR19TCQkiJDMsICVbdjFdXG4iCisJCToKKwkJCVthdF0gIj1tIiAoYXQpLAorCQkJW3YwXSAiPW0iICh2MCksCisJCQlbdjFdICI9bSIgKHYxKQorCQk6CisJCToJImF0IgorCQkpOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSIuc2V0CW5vYXRcbiIKKwkJCSJtb3ZlCQkkYXQsICVbcHRfcmVnc11cbiIKKworCQkJLyogQXJndW1lbnQgcmVnaXN0ZXJzICovCisJCQlMT05HX1MJCSIkNCwgIiBWQUwoUFRfUjQpICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJDUsICIgVkFMKFBUX1I1KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQ2LCAiIFZBTChQVF9SNikgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkNywgIiBWQUwoUFRfUjcpICIoJGF0KVxuIgorCisJCQkvKiBUZW1wb3JhcnkgcmVncyAqLworCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQ5LCAiIFZBTChQVF9SOSkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTAsICIgVkFMKFBUX1IxMCkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTIsICIgVkFMKFBUX1IxMikgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTMsICIgVkFMKFBUX1IxMykgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTUsICIgVkFMKFBUX1IxNSkgIigkYXQpXG4iCisKKwkJCS8qICJTYXZlZCIgcmVnaXN0ZXJzICovCisJCQlMT05HX1MJCSIkMTYsICIgVkFMKFBUX1IxNikgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTcsICIgVkFMKFBUX1IxNykgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTgsICIgVkFMKFBUX1IxOCkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMTksICIgVkFMKFBUX1IxOSkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMjAsICIgVkFMKFBUX1IyMCkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMjEsICIgVkFMKFBUX1IyMSkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMjIsICIgVkFMKFBUX1IyMikgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMjMsICIgVkFMKFBUX1IyMykgIigkYXQpXG4iCisKKwkJCS8qIEFkZCdsIHRlbXAgcmVncyAqLworCQkJTE9OR19TCQkiJDI0LCAiIFZBTChQVF9SMjQpICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJDI1LCAiIFZBTChQVF9SMjUpICIoJGF0KVxuIgorCisJCQkvKiBLZXJuZWwgdGVtcCByZWdzICovCisJCQlMT05HX1MJCSIkMjYsICIgVkFMKFBUX1IyNikgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMjcsICIgVkFMKFBUX1IyNykgIigkYXQpXG4iCisKKwkJCS8qIEdsb2JhbCBwb2ludGVyLCBzdGFjayBwb2ludGVyLCBmcmFtZSBwb2ludGVyIGFuZAorCQkJICogcmV0dXJuIGFkZHJlc3MgKi8KKwkJCUxPTkdfUwkJIiRncCwgIiBWQUwoUFRfUjI4KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiRzcCwgIiBWQUwoUFRfUjI5KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiRmcCwgIiBWQUwoUFRfUjMwKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiRyYSwgIiBWQUwoUFRfUjMxKSAiKCRhdClcbiIKKworCQkJLyogTm93IHdlIGNhbiBnZXQgdGhlICRhdCBhbmQgdjAgcmVnaXN0ZXJzIGJhY2sgYW5kCisJCQkgKiBzdG9yZSB0aGVtICovCisJCQlMT05HX0wJCSIkOCwgJVthdF1cbiIKKwkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMSkgIigkYXQpXG4iCisJCQlMT05HX0wJCSIkOCwgJVt2MF1cbiIKKwkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMikgIigkYXQpXG4iCisJCQlMT05HX0wJCSIkOCwgJVt2MV1cbiIKKwkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMykgIigkYXQpXG4iCisJCToKKwkJOgorCQkJW2F0XSAibSIgKGF0KSwKKwkJCVt2MF0gIm0iICh2MCksCisJCQlbdjFdICJtIiAodjEpLAorCQkJW3B0X3JlZ3NdICJyIiAoJm15X3JlZ3MpCisJCToJImF0IiwgInQwIgorCQkpOworCisJCS8qIFNldCB0aGUgY3VycmVudCBFUEMgdmFsdWUgdG8gYmUgdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhpcworCQkgKiBmdW5jdGlvbiAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkiLnNldAlub2F0XG4iCisJCSIxOlxuIgorCQkJUFRSX0xBCQkiJGF0LCAxYlxuIgorCQkJTE9OR19TCQkiJGF0LCAlW2NwMF9lcGNdXG4iCisJCToKKwkJCVtjcDBfZXBjXSAiPW0iIChteV9yZWdzLmNwMF9lcGMpCisJCToKKwkJOgkiYXQiCisJCSk7CisKKwkJbXlfcmVncy5jcDBfY2F1c2UgPSByZWFkX2MwX2NhdXNlKCk7CisJCW15X3JlZ3MuY3AwX3N0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7CisJfQorCisjaWZkZWYgQ09ORklHX0RJQUdOT1NUSUNTCisJZmFpbHVyZV9yZXBvcnQoKGNoYXIgKikgY2F1c2Vfc3RyaW5nLAorCQloYXZlX2RpZV9yZWdzID8gJmRpZV9yZWdzIDogJm15X3JlZ3MpOworCWhhdmVfZGllX3JlZ3MgPSBmYWxzZTsKKyNlbHNlCisJcHJfY3JpdCgiSSdtIGZlZWxpbmcgYSBiaXQgc2xlZXB5LiBobW1tbW0uLi4gcGVyaGFwcyBhIG5hcCB3b3VsZC4uLiAiCisJCSJ6enp6Li4uIFxuIik7CisjZW5kaWYKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworLyoqCisgKiBQbGF0Zm9ybS1zcGVjaWZpYyBoYW5kbGluZyBvZiBvb3BzCisgKiBAc3RyOglQb2ludGVyIHRvIHRoZSBvb3BzIHN0cmluZworICogQHJlZ3M6CVBvaW50ZXIgdG8gdGhlIG9vcHMgcmVnaXN0ZXJzCisgKiBBbGwgd2UgZG8gaGVyZSBpcyB0byBzYXZlIHRoZSByZWdpc3RlcnMgZm9yIHN1YnNlcXVlbnQgcHJpbnRpbmcgdGhyb3VnaAorICogdGhlIHBhbmljIG5vdGlmaWVyLgorICovCit2b2lkIHBsYXRmb3JtX2RpZShjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBzYXZlZCByZWdpc3RlcnMsIGRvbid0IG92ZXJ3cml0ZSB0aGVtIGFzIHRoZXkKKwkgKiB0aGV5IGFwcGx5IHRvIHRoZSBpbml0aWFsIGZhdWx0ICovCisKKwlpZiAoIWhhdmVfZGllX3JlZ3MpIHsKKwkJaGF2ZV9kaWVfcmVncyA9IHRydWU7CisJCWRpZV9yZWdzID0gKnJlZ3M7CisJfQorfQorCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgUkYgTUFDIGFkZHJlc3MsIGlmIG9uZSB3YXMgc3VwcGxpZWQgb24gdGhlCisgKiBjb21tYW5kIGxpbmUuICovCitzdGF0aWMgYm9vbCBoYXZlX3JmbWFjOworc3RhdGljIHU4IHJmbWFjW0VUSF9BTEVOXTsKKworc3RhdGljIGludCByZm1hY19wYXJhbShjaGFyICpwKQoreworCXU4CSpxOworCWJvb2wJaXNfaGlnaF9uaWJibGU7CisJaW50CWM7CisKKwkvKiBTa2lwIGEgbGVhZGluZyAiMHgiLCBpZiBwcmVzZW50ICovCisJaWYgKCpwID09ICcwJyAmJiAqKHArMSkgPT0gJ3gnKQorCQlwICs9IDI7CisKKwlxID0gcmZtYWM7CisJaXNfaGlnaF9uaWJibGUgPSB0cnVlOworCisJZm9yIChjID0gKHVuc2lnbmVkIGNoYXIpICpwKys7CisJCWlzeGRpZ2l0KGMpICYmIHEgLSByZm1hYyA8IEVUSF9BTEVOOworCQljID0gKHVuc2lnbmVkIGNoYXIpICpwKyspIHsKKwkJaW50CW5pYmJsZTsKKworCQluaWJibGUgPSAoaXNkaWdpdChjKSA/IChjIC0gJzAnKSA6CisJCQkoaXN1cHBlcihjKSA/IGMgLSAnQScgKyAxMCA6IGMgLSAnYScgKyAxMCkpOworCisJCWlmIChpc19oaWdoX25pYmJsZSkKKwkJCSpxID0gbmliYmxlIDw8IDQ7CisJCWVsc2UKKwkJCSpxKysgfD0gbmliYmxlOworCisJCWlzX2hpZ2hfbmliYmxlID0gIWlzX2hpZ2hfbmliYmxlOworCX0KKworCS8qIElmIHdlIHBhcnNlZCBhbGwgdGhlIHdheSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUgYW5kCisJICogcGFyc2VkIGFsbCBFVEhfQUxFTiBieXRlcywgd2UgaGF2ZSBhIHVzYWJsZSBSRiBNQUMgYWRkcmVzcyAqLworCWhhdmVfcmZtYWMgPSAoYyA9PSAnXDAnICYmIHEgLSByZm1hYyA9PSBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oInJmbWFjIiwgcmZtYWNfcGFyYW0pOworCisvKgorICogR2VuZXJhdGUgYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3MgdGhhdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB1bmlxdWUuCisgKiBAYWRkcjoJUG9pbnRlciB0byBzaXgtYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBFdGhlcm5ldCBhZGRyZXNzCisgKiBHZW5lcmF0ZXMgYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3MgdGhhdCBpcyBoaWdobHkgbGlrZWx5IHRvIGJlIHVuaXF1ZSBmb3IKKyAqIHRoaXMgcGFydGljdWxhciBzeXN0ZW0gb24gYSBuZXR3b3JrIHdpdGggb3RoZXIgc3lzdGVtcyBvZiB0aGUgc2FtZSB0eXBlLgorICoKKyAqIFRoZSBwcm9ibGVtIHdlIGFyZSBzb2x2aW5nIGlzIHRoYXQsIHdoZW4gcmFuZG9tX2V0aGVyX2FkZHIoKSBpcyB1c2VkIHRvCisgKiBnZW5lcmF0ZSBNQUMgYWRkcmVzc2VzIGF0IHN0YXJ0dXAsIHRoZXJlIGlzbid0IG11Y2ggZW50cm9weSBmb3IgdGhlIHJhbmRvbQorICogbnVtYmVyIGdlbmVyYXRvciB0byB1c2UgYW5kIHRoZSBhZGRyZXNzZXMgaXQgcHJvZHVjZXMgYXJlIGZhaXJseSBsaWtlbHkgdG8KKyAqIGJlIHRoZSBzYW1lIGFzIHRob3NlIG9mIG90aGVyIGlkZW50aWNhbCBzeXN0ZW1zIG9uIHRoZSBzYW1lIGxvY2FsIG5ldHdvcmsuCisgKiBUaGlzIGlzIHRydWUgZXZlbiBmb3IgcmVsYXRpdmVseSBzbWFsbCBudW1iZXJzIG9mIHN5c3RlbXMgKGZvciB0aGUgcmVhc29uCisgKiB3aHksIHNlZSB0aGUgV2lraXBlZGlhIGVudHJ5IGZvciAiQmlydGhkYXkgcHJvYmxlbSIgYXQ6CisgKglodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW0KKyAqCisgKiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgTUFDIGFkZHJlc3Mga25vd24gdG8gYmUgdW5pcXVlLCB0aGUKKyAqIFJGIE1BQyBhZGRyZXNzLiBUaGUgYmFkIG5ld3MgaXMgdGhhdCB0aGlzIGFkZHJlc3MgaXMgYWxyZWFkeSBpbiB1c2Ugb24gdGhlCisgKiBSRiBpbnRlcmZhY2UuIFdvcnNlLCB0aGUgb2J2aW91cyB0cmljaywgdGFraW5nIHRoZSBSRiBNQUMgYWRkcmVzcyBhbmQKKyAqIHR1cm5pbmcgb24gdGhlIGxvY2FsbHkgbWFuYWdlZCBiaXQsIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBmb3Igb3RoZXIgZGV2aWNlcy4KKyAqIFN0aWxsLCB0aGlzIGRvZXMgZ2l2ZSB1cyBzb21ldGhpbmcgdG8gd29yayB3aXRoLgorICoKKyAqIFRoZSBhcHByb2FjaCB3ZSB0YWtlIGlzOgorICogMS4JSWYgd2UgY2FuJ3QgZ2V0IHRoZSBSRiBNQUMgQWRkcmVzcywganVzdCBjYWxsIHJhbmRvbV9ldGhlcl9hZGRyLgorICogMi4JVXNlIHRoZSAyNC1iaXQgTklDLXNwZWNpZmljIGJpdHMgb2YgdGhlIFJGIE1BQyBhZGRyZXNzIGFzIHRoZSBsYXN0IDI0CisgKgliaXRzIG9mIHRoZSBuZXcgYWRkcmVzcy4gVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBiZSB1bmlxdWUsIGV4Y2VwdCBmb3IKKyAqCXRoZSBjdXJyZW50IGJveC4KKyAqIDMuCVRvIGF2b2lkIHVzaW5nIGFkZHJlc3NlcyBhbHJlYWR5IG9uIHRoZSBjdXJyZW50IGJveCwgd2Ugc2V0IHRoZSB0b3AKKyAqCXNpeCBiaXRzIG9mIHRoZSBhZGRyZXNzIHdpdGggYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSBhbnkgY3VycmVudGx5CisgKglyZWdpc3RlcmVkIFNjaWVudGlmaWMgQXRsYW50YSBvcmdhbml6YXRpb25hbGx5IHVuaXF1ZSBpZGVudGlmeWVyCisgKgkoT1VJKS4gVGhpcyBhdm9pZHMgZHVwbGljYXRpb24gd2l0aCBhbnkgYWRkcmVzc2VzIG9uIHRoZSBzeXN0ZW0gdGhhdAorICoJd2VyZSBnZW5lcmF0ZWQgZnJvbSB2YWxpZCBTY2llbnRpZmljIEF0bGFudGEtcmVnaXN0ZXJlZCBhZGRyZXNzIGJ5CisgKglzaW1wbHkgZmxpcHBpbmcgdGhlIGxvY2FsbHkgbWFuYWdlZCBiaXQuCisgKiA0LglXZSBhcmVuJ3QgZ2VuZXJhdGluZyBhIG11bHRpY2FzdCBhZGRyZXNzLCBzbyB3ZSBsZWF2ZSB0aGUgbXVsdGljYXN0CisgKgliaXQgb2ZmLiBTaW5jZSB3ZSBhcmVuJ3QgdXNpbmcgYSByZWdpc3RlcmVkIGFkZHJlc3MsIHdlIGhhdmUgdG8gc2V0CisgKgl0aGUgbG9jYWxseSBtYW5hZ2VkIGJpdC4KKyAqIDUuCVdlIHRoZW4gcmFuZG9tbHkgZ2VuZXJhdGUgdGhlIHJlbWFpbmluZyAxNi1iaXRzLiBUaGlzIGRvZXMgdHdvCisgKgl0aGluZ3M6CisgKglhLglJdCBhbGxvd3MgdXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBtb3JlIHRoYW4gb25lIGRldmljZQorICoJCWluIHRoaXMgc3lzdGVtCisgKgliLglJdCBlbnN1cmVzIHRoYXQgdGhpbmdzIHdpbGwgcHJvYmFibHkgc3RpbGwgd29yayBldmVuIGlmCisgKgkJc29tZSBkZXZpY2Ugb24gdGhlIGRldmljZSBuZXR3b3JrIGhhcyBhIGxvY2FsbHkgbWFuYWdlZAorICoJCWFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSB0b3Agc2l4IGJpdHMgZnJvbSBzdGVwIDIuCisgKi8KK3ZvaWQgcGxhdGZvcm1fcmFuZG9tX2V0aGVyX2FkZHIodTggYWRkcltFVEhfQUxFTl0pCit7CisJY29uc3QgaW50IG51bV9yYW5kb21fYnl0ZXMgPSAyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbm9uX3NjaWF0bF9vdWlfYml0cyA9IDB4YzB1OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJfbG9jYWxseV9tYW5hZ2VkID0gKDEgPDwgMSk7CisKKwlpZiAoIWhhdmVfcmZtYWMpIHsKKwkJcHJfd2FybmluZygicmZtYWMgbm90IGF2YWlsYWJsZSBvbiBjb21tYW5kIGxpbmU7ICIKKwkJCSJnZW5lcmF0aW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xuIik7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGFkZHIpOworCX0KKworCWVsc2UgeworCQlpbnQJaTsKKworCQkvKiBTZXQgdGhlIGZpcnN0IGJ5dGUgdG8gc29tZXRoaW5nIHRoYXQgd29uJ3QgbWF0Y2ggYSBTY2llbnRpZmljCisJCSAqIEF0bGFudGEgT1VJLCBpcyBsb2NhbGx5IG1hbmFnZWQsIGFuZCBpc24ndCBhIG11bHRpY2FzdAorCQkgKiBhZGRyZXNzICovCisJCWFkZHJbMF0gPSBub25fc2NpYXRsX291aV9iaXRzIHwgbWFjX2FkZHJfbG9jYWxseV9tYW5hZ2VkOworCisJCS8qIEdldCBzb21lIGJ5dGVzIG9mIHJhbmRvbSBhZGRyZXNzIGluZm9ybWF0aW9uICovCisJCWdldF9yYW5kb21fYnl0ZXMoJmFkZHJbMV0sIG51bV9yYW5kb21fYnl0ZXMpOworCisJCS8qIENvcHkgb3ZlciB0aGUgTklDLXNwZWNpZmljIGJpdHMgb2YgdGhlIFJGIE1BQyBhZGRyZXNzICovCisJCWZvciAoaSA9IDEgKyBudW1fcmFuZG9tX2J5dGVzOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJCWFkZHJbaV0gPSByZm1hY1tpXTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9yZXNldC5jIGIvYXJjaC9taXBzL3Bvd2VydHYvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRjNjUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcmVzZXQuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CQkJLyogTm90IGluY2x1ZGVkIGJ5IGxpbnV4L3JlYm9vdC5oICovCisKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2tibGRyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisjaW5jbHVkZSAicmVzZXQuaCIKKworc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCk7CitzdGF0aWMgdm9pZCBtaXBzX21hY2hpbmVfaGFsdCh2b2lkKTsKKworc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKK3sKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKwkvKgorCSAqIENhbGwgdGhlIGJvb3Rsb2FkZXIncyByZXNldCBmdW5jdGlvbiB0byBlbnN1cmUKKwkgKiB0aGF0IHBlcnNpc3RlbnQgZGF0YSBpcyBmbHVzaGVkIGJlZm9yZSBoYXJkIHJlc2V0CisJICovCisJa2JsZHJfU2V0Q2F1c2VBbmRSZXNldCgpOworI2Vsc2UKKwl3cml0ZWwoMHgxLCBhc2ljX3JlZ19hZGRyKHdhdGNoZG9nKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX2hhbHQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKwkvKgorCSAqIENhbGwgdGhlIGJvb3Rsb2FkZXIncyByZXNldCBmdW5jdGlvbiB0byBlbnN1cmUKKwkgKiB0aGF0IHBlcnNpc3RlbnQgZGF0YSBpcyBmbHVzaGVkIGJlZm9yZSBoYXJkIHJlc2V0CisJICovCisJa2JsZHJfU2V0Q2F1c2VBbmRSZXNldCgpOworI2Vsc2UKKwl3cml0ZWwoMHgxLCBhc2ljX3JlZ19hZGRyKHdhdGNoZG9nKSk7CisjZW5kaWYKK30KKwordm9pZCBtaXBzX3JlYm9vdF9zZXR1cCh2b2lkKQoreworCV9tYWNoaW5lX3Jlc3RhcnQgPSBtaXBzX21hY2hpbmVfcmVzdGFydDsKKwlfbWFjaGluZV9oYWx0ID0gbWlwc19tYWNoaW5lX2hhbHQ7CisJcG1fcG93ZXJfb2ZmID0gbWlwc19tYWNoaW5lX2hhbHQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9yZXNldC5oIGIvYXJjaC9taXBzL3Bvd2VydHYvcmVzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODhmZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcmVzZXQuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogRGVmaW5pdGlvbnMgZnJvbSBwb3dlcnR2IHJlc2V0LmMgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQXV0aG9yOiBEYXZpZCBWb21MZWhuCisgKi8KKworI2lmbmRlZiBfUE9XRVJUVl9QT1dFUlRWX1JFU0VUX0gKKyNkZWZpbmUgX1BPV0VSVFZfUE9XRVJUVl9SRVNFVF9ICitleHRlcm4gdm9pZCBtaXBzX3JlYm9vdF9zZXR1cCh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvdGltZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGE1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di90aW1lLmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFNldHRpbmcgdXAgdGhlIGNsb2NrIG9uIHRoZSBNSVBTIGJvYXJkcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNpbmNsdWRlICJwb3dlcnR2LWNsb2NrLmgiCisKK3Vuc2lnbmVkIGludCBfX2NwdWluaXQgZ2V0X2MwX2NvbXBhcmVfaW50KHZvaWQpCit7CisJcmV0dXJuIGlycV9taXBzX3RpbWVyOworfQorCit2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQoreworCXBvd2VydHZfY2xvY2tzb3VyY2VfaW5pdCgpOworCXI0a19jbG9ja2V2ZW50X2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMgYi9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCmluZGV4IGFkNWJkMTAuLmQ3YzI2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwpAQCAtNjksNyArNjksNyBAQAogCiB2b2lkIF9faW5pdCBwcm9tX3NldHVwX2NtZGxpbmUodm9pZCkKIHsKLQlzdGF0aWMgY2hhciBjbWRfbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOworCXN0YXRpYyBjaGFyIGNtZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKmNwLCAqYm9hcmQ7CiAJaW50IHByb21fYXJnYzsKIAljaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCQlzdHJjcHkoY3AsIGFyY3NfY21kbGluZSk7CiAJCWNwICs9IHN0cmxlbihhcmNzX2NtZGxpbmUpOwogCX0KLQljbWRfbGluZVtDTF9TSVpFLTFdID0gJ1wwJzsKKwljbWRfbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKIAogCXN0cmNweShhcmNzX2NtZGxpbmUsIGNtZF9saW5lKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWVpc2EuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWVpc2EuYwppbmRleCAxNjE3MjQxLi5kYTQ0Y2NiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1laXNhLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItZWlzYS5jCkBAIC01MCw5ICs1MCw5IEBACiAKIHN0YXRpYyBjaGFyIF9faW5pdCAqZGVjb2RlX2Vpc2Ffc2lnKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLSAgICAgICAgc3RhdGljIGNoYXIgc2lnX3N0cltFSVNBX1NJR19MRU5dOworCXN0YXRpYyBjaGFyIHNpZ19zdHJbRUlTQV9TSUdfTEVOXSBfX2luaXRkYXRhOwogCXU4IHNpZ1s0XTsKLSAgICAgICAgdTE2IHJldjsKKwl1MTYgcmV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYwppbmRleCAwZWNkNWZlLi4zODNmMTFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KICNpbmNsdWRlIDxhc20vc2dpL2hwYzMuaD4KQEAgLTE1MCw3ICsxNTEsNyBAQAogCiBleHRlcm4gdm9pZCBpcDIyX2JlX2ludGVycnVwdChpbnQgaXJxKTsKIAotc3RhdGljIHZvaWQgaW5keV9idXNlcnJvcl9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faXJxX2VudHJ5IGluZHlfYnVzZXJyb3JfaXJxKHZvaWQpCiB7CiAJaW50IGlycSA9IFNHSV9CVVNFUlJfSVJROwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwppbmRleCBiOWE5MzEzLi41ZGVlYjY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAljc2VyaWFsID0gQXJjR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiQ29uc29sZU91dCIpOwogCiAJaWYgKChjdHlwZSAmJiAqY3R5cGUgPT0gJ2QnKSB8fCAoY3NlcmlhbCAmJiAqY3NlcmlhbCA9PSAncycpKSB7Ci0JCXN0YXRpYyBjaGFyIG9wdGlvbnNbOF07CisJCXN0YXRpYyBjaGFyIG9wdGlvbnNbOF0gX19pbml0ZGF0YTsKIAkJY2hhciAqYmF1ZCA9IEFyY0dldEVudmlyb25tZW50VmFyaWFibGUoImRiYXVkIik7CiAJCWlmIChiYXVkKQogCQkJc3RyY3B5KG9wdGlvbnMsIGJhdWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCmluZGV4IGM4ZjdkMjMuLjYwM2ZjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KQEAgLTExNSw3ICsxMTYsNyBAQAogfQogCiAvKiBHZW5lcmljIFNHSSBoYW5kbGVyIGZvciAoc3B1cmlvdXMpIDgyNTQgaW50ZXJydXB0cyAqLwotdm9pZCBpbmR5XzgyNTR0aW1lcl9pcnEodm9pZCkKK3ZvaWQgX19pcnFfZW50cnkgaW5keV84MjU0dGltZXJfaXJxKHZvaWQpCiB7CiAJaW50IGlycSA9IFNHSV84MjU0XzBfSVJROwogCVVMT05HIGNudDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCmluZGV4IGM1YTVkNGEuLjNhYmQxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYwpAQCAtOTAsNyArOTAsNyBAQAogCXsKIAkJY2hhciogY29uID0gQXJjR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiY29uc29sZSIpOwogCQlpZiAoY29uICYmICpjb24gPT0gJ2QnKSB7Ci0JCQlzdGF0aWMgY2hhciBvcHRpb25zWzhdOworCQkJc3RhdGljIGNoYXIgb3B0aW9uc1s4XSBfX2luaXRkYXRhOwogCQkJY2hhciAqYmF1ZCA9IEFyY0dldEVudmlyb25tZW50VmFyaWFibGUoImRiYXVkIik7CiAJCQlpZiAoYmF1ZCkKIAkJCQlzdHJjcHkob3B0aW9ucywgYmF1ZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9jZmUuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL2NmZS5jCmluZGV4IGViNTM5NmMuLjYzNDMwMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL2NmZS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL2NmZS5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAkgKiBib290IGNvbnNvbGUKIAkgKi8KIAljZmVfY29uc19oYW5kbGUgPSBjZmVfZ2V0c3RkaGFuZGxlKENGRV9TVERIQU5ETEVfQ09OU09MRSk7Ci0JaWYgKGNmZV9nZXRlbnYoIkxJTlVYX0NNRExJTkUiLCBhcmNzX2NtZGxpbmUsIENMX1NJWkUpIDwgMCkgeworCWlmIChjZmVfZ2V0ZW52KCJMSU5VWF9DTURMSU5FIiwgYXJjc19jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSkgPCAwKSB7CiAJCWlmIChhcmdjID49IDApIHsKIAkJCS8qIFRoZSBsb2FkZXIgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGxpbmUgKi8KIAkJCS8qIHRvbyBlYXJseSBmb3IgcGFuaWMgdG8gZG8gYW55IGdvb2QgKi8KQEAgLTMxOCw3ICszMTgsNyBAQAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwogCiAJLyogTm90IHN1cmUgdGhpcyBpcyBuZWVkZWQsIGJ1dCBpdCdzIHRoZSBzYWZlIHdheS4gKi8KLQlhcmNzX2NtZGxpbmVbQ0xfU0laRS0xXSA9IDA7CisJYXJjc19jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFLTFdID0gMDsKIAogCXByb21fbWVtaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2EyMHIuYyBiL2FyY2gvbWlwcy9zbmkvYTIwci5jCmluZGV4IDdkZDc2ZmIuLmU2OTgwODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvYTIwci5jCisrKyBiL2FyY2gvbWlwcy9zbmkvYTIwci5jCkBAIC0xODgsNyArMTg4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhMjByX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJBMjBSIiwKKwkubmFtZQkJPSAiQTIwUiIsCiAJLmFjawkJPSBtYXNrX2EyMHJfaXJxLAogCS5tYXNrCQk9IG1hc2tfYTIwcl9pcnEsCiAJLm1hc2tfYWNrCT0gbWFza19hMjByX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpbXQuYyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwppbmRleCA3NGU2YzY3Li41MWU2MmJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3BjaW10LmMKKysrIGIvYXJjaC9taXBzL3NuaS9wY2ltdC5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwY2ltdF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiUENJTVQiLAorCS5uYW1lID0gIlBDSU1UIiwKIAkuYWNrID0gZGlzYWJsZV9wY2ltdF9pcnEsCiAJLm1hc2sgPSBkaXNhYmxlX3BjaW10X2lycSwKIAkubWFza19hY2sgPSBkaXNhYmxlX3BjaW10X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpdC5jIGIvYXJjaC9taXBzL3NuaS9wY2l0LmMKaW5kZXggMDcxYTk1Ny4uZjQ2OTlkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9wY2l0LmMKKysrIGIvYXJjaC9taXBzL3NuaS9wY2l0LmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjaXRfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIlBDSVQiLAorCS5uYW1lID0gIlBDSVQiLAogCS5hY2sgPSBkaXNhYmxlX3BjaXRfaXJxLAogCS5tYXNrID0gZGlzYWJsZV9wY2l0X2lycSwKIAkubWFza19hY2sgPSBkaXNhYmxlX3BjaXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jIGIvYXJjaC9taXBzL3NuaS9ybTIwMC5jCmluZGV4IDVlNjg3ODEuLjQ2ZjAwNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvcm0yMDAuYworKysgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKQEAgLTQ0OSw3ICs0NDksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHJtMjAwX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICJSTTIwMCIsCisJLm5hbWUgPSAiUk0yMDAiLAogCS5hY2sgPSBkaXNhYmxlX3JtMjAwX2lycSwKIAkubWFzayA9IGRpc2FibGVfcm0yMDBfaXJxLAogCS5tYXNrX2FjayA9IGRpc2FibGVfcm0yMDBfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9zZXR1cC5jIGIvYXJjaC9taXBzL3NuaS9zZXR1cC5jCmluZGV4IGE0OTI3MmMuLmQxNmI0NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvc2V0dXAuYworKysgYi9hcmNoL21pcHMvc25pL3NldHVwLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAljaGFyICpjZGV2OwogCWNoYXIgKmJhdWQ7CiAJaW50IHBvcnQ7Ci0Jc3RhdGljIGNoYXIgb3B0aW9uc1s4XTsKKwlzdGF0aWMgY2hhciBvcHRpb25zWzhdIF9faW5pdGRhdGE7CiAKIAljZGV2ID0gcHJvbV9nZXRlbnYoImNvbnNvbGVfZGV2Iik7CiAJaWYgKHN0cm5jbXAoY2RldiwgInR0eSIsIDMpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwppbmRleCBkNjY4MDJlLi4wNmU4MDFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlpbnQgYXJnYzsKIAlpbnQgKmFyZ3YzMjsKIAlpbnQgaTsJCQkvKiBBbHdheXMgaWdub3JlIHRoZSAiLWMiIGF0IGFyZ3ZbMF0gKi8KLQlzdGF0aWMgY2hhciBidWlsdGluW0NMX1NJWkVdIF9faW5pdGRhdGE7CisJc3RhdGljIGNoYXIgYnVpbHRpbltDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKIAogCWlmIChmd19hcmcwID49IENLU0VHMCB8fCBmd19hcmcxIDwgQ0tTRUcwKSB7CiAJCS8qCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHByZXByb2Nlc3NfY21kbGluZSh2b2lkKQogewotCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ0xfU0laRV0gX19pbml0ZGF0YTsKKwlzdGF0aWMgY2hhciBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKnM7CiAKIAlzdHJjcHkoY21kbGluZSwgYXJjc19jbWRsaW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ljdS5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaWN1LmMKaW5kZXggNmQzOWUyMi4uNjE1M2I2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaWN1LmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaWN1LmMKQEAgLTE1OSw5ICsxNTksOSBAQAogCiAJaWYgKGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTExIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTIxKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQlpY3UxX3NldChNUElVSU5UUkVHLCBtYXNrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMTc0LDkgKzE3NCw5IEBACiAKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMTEgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMjEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCWljdTFfY2xlYXIoTVBJVUlOVFJFRywgbWFzayk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTE4OSw5ICsxODksOSBAQAogCiAJaWYgKGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTExIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTIxKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQlpY3UxX3NldChNQUlVSU5UUkVHLCBtYXNrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMjA0LDkgKzIwNCw5IEBACiAKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMTEgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMjEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCWljdTFfY2xlYXIoTUFJVUlOVFJFRywgbWFzayk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTIxOSw5ICsyMTksOSBAQAogCiAJaWYgKGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTExIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTIxKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQlpY3UxX3NldChNS0lVSU5UUkVHLCBtYXNrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMjM0LDkgKzIzNCw5IEBACiAKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMTEgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMjEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCWljdTFfY2xlYXIoTUtJVUlOVFJFRywgbWFzayk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTI0Nyw5ICsyNDcsOSBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgRVRIRVJORVRfSVJROwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWljdTFfc2V0KE1NQUNJTlRSRUcsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKHZyNDF4eF9lbmFibGVfbWFjaW50KTsKQEAgLTI1OSw5ICsyNTksOSBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgRVRIRVJORVRfSVJROwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWljdTFfY2xlYXIoTU1BQ0lOVFJFRywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKIEVYUE9SVF9TWU1CT0wodnI0MXh4X2Rpc2FibGVfbWFjaW50KTsKQEAgLTI3MSw5ICsyNzEsOSBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgRFNJVV9JUlE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWN1MV9zZXQoTURTSVVJTlRSRUcsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKHZyNDF4eF9lbmFibGVfZHNpdWludCk7CkBAIC0yODMsOSArMjgzLDkgQEAKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIERTSVVfSVJROwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWljdTFfY2xlYXIoTURTSVVJTlRSRUcsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKHZyNDF4eF9kaXNhYmxlX2RzaXVpbnQpOwpAQCAtMjk1LDkgKzI5NSw5IEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBGSVJfSVJROwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWljdTJfc2V0KE1GSVJJTlRSRUcsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKHZyNDF4eF9lbmFibGVfZmlyaW50KTsKQEAgLTMwNyw5ICszMDcsOSBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgRklSX0lSUTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlpY3UyX2NsZWFyKE1GSVJJTlRSRUcsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKHZyNDF4eF9kaXNhYmxlX2ZpcmludCk7CkBAIC0zMjIsOSArMzIyLDkgQEAKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMjIgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMzEgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMzMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCWljdTJfd3JpdGUoTVBDSUlOVFJFRywgUENJSU5UMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTMzOCw5ICszMzgsOSBAQAogCWlmIChjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEyMiB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEzMSB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEzMykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJaWN1Ml93cml0ZShNUENJSU5UUkVHLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMzU0LDkgKzM1NCw5IEBACiAJaWYgKGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTIyIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTMxIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTMzKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQlpY3UyX3dyaXRlKE1TQ1VJTlRSRUcsIFNDVUlOVDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC0zNzAsOSArMzcwLDkgQEAKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMjIgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMzEgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMzMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCWljdTJfd3JpdGUoTVNDVUlOVFJFRywgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTM4Niw5ICszODYsOSBAQAogCWlmIChjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEyMiB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEzMSB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEzMykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJaWN1Ml9zZXQoTUNTSUlOVFJFRywgbWFzayk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTQwMiw5ICs0MDIsOSBAQAogCWlmIChjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEyMiB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEzMSB8fAogCSAgICBjdXJyZW50X2NwdV90eXBlKCkgPT0gQ1BVX1ZSNDEzMykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJaWN1Ml9jbGVhcihNQ1NJSU5UUkVHLCBtYXNrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNDE4LDkgKzQxOCw5IEBACiAJaWYgKGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTIyIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTMxIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfVlI0MTMzKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQlpY3UyX3dyaXRlKE1CQ1VJTlRSRUcsIEJDVUlOVFIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC00MzQsOSArNDM0LDkgQEAKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMjIgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMzEgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9WUjQxMzMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCWljdTJfd3JpdGUoTUJDVUlOVFJFRywgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQAogCiAJcGluID0gU1lTSU5UMV9JUlFfVE9fUElOKGlycSk7CiAKLQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAKIAlpbnRhc3NpZ24wID0gaWN1MV9yZWFkKElOVEFTU0lHTjApOwogCWludGFzc2lnbjEgPSBpY3UxX3JlYWQoSU5UQVNTSUdOMSk7CkBAIC01MjUsNyArNTI1LDcgQEAKIAkJaW50YXNzaWduMSB8PSAodWludDE2X3QpYXNzaWduIDw8IDk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUzMyw3ICs1MzMsNyBAQAogCWljdTFfd3JpdGUoSU5UQVNTSUdOMCwgaW50YXNzaWduMCk7CiAJaWN1MV93cml0ZShJTlRBU1NJR04xLCBpbnRhc3NpZ24xKTsKIAotCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0Niw3ICs1NDYsNyBAQAogCiAJcGluID0gU1lTSU5UMl9JUlFfVE9fUElOKGlycSk7CiAKLQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAKIAlpbnRhc3NpZ24yID0gaWN1MV9yZWFkKElOVEFTU0lHTjIpOwogCWludGFzc2lnbjMgPSBpY3UxX3JlYWQoSU5UQVNTSUdOMyk7CkBAIC01OTMsNyArNTkzLDcgQEAKIAkJaW50YXNzaWduMyB8PSAodWludDE2X3QpYXNzaWduIDw8IDEyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02MDEsNyArNjAxLDcgQEAKIAlpY3UxX3dyaXRlKElOVEFTU0lHTjIsIGludGFzc2lnbjIpOwogCWljdTFfd3JpdGUoSU5UQVNTSUdOMywgaW50YXNzaWduMyk7CiAKLQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNzVhNzBhYS4uZTVmYTk3YyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNzcsNyArNzcsNiBAQAogCV91ci0+YTEgICA9IDA7CV91ci0+YTAgICA9IDA7CV91ci0+ZDEgICA9IDA7CV91ci0+ZDAgICA9IDA7CVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYwppbmRleCA0YzNjNThlLi5lMmQ1ZWQ4IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCiAJCS8qIGRpc3BsYXkgaW5mb3JtYXRpb24gcm93cywgb25lIHBlciBhY3RpdmUgQ1BVICovCiAJY2FzZSAxIC4uLiBOUl9JUlFTIC0gMToKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAKIAkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwogCQlpZiAoYWN0aW9uKSB7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAkJCXNlcV9wdXRjKHAsICdcbicpOwogCQl9CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAogCQkvKiBwb2xpc2ggb2ZmIHdpdGggTk1JIGFuZCBlcnJvciBjb3VudGVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL2twcm9iZXMuYwppbmRleCBkYWNhZmFiLi42N2U2Mzg5IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL2twcm9iZXMuYwpAQCAtMzEsMTMgKzMxLDEzIEBACiAjZGVmaW5lIEtQUk9CRV9ISVRfQUNUSVZFCTB4MDAwMDAwMDEKICNkZWZpbmUgS1BST0JFX0hJVF9TUwkJMHgwMDAwMDAwMgogCi1zdGF0aWMgc3RydWN0IGtwcm9iZSAqY3VycmVudF9rcHJvYmU7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJyZW50X2twcm9iZV9vcmlnX3BjOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VycmVudF9rcHJvYmVfbmV4dF9wYzsKLXN0YXRpYyBpbnQgY3VycmVudF9rcHJvYmVfc3NfZmxhZ3M7CitzdGF0aWMgc3RydWN0IGtwcm9iZSAqY3VyX2twcm9iZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN1cl9rcHJvYmVfb3JpZ19wYzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN1cl9rcHJvYmVfbmV4dF9wYzsKK3N0YXRpYyBpbnQgY3VyX2twcm9iZV9zc19mbGFnczsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7Ci1zdGF0aWMga3Byb2JlX29wY29kZV90IGN1cnJlbnRfa3Byb2JlX3NzX2J1ZltNQVhfSU5TTl9TSVpFICsgMl07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJyZW50X2twcm9iZV9icF9hZGRyOworc3RhdGljIGtwcm9iZV9vcGNvZGVfdCBjdXJfa3Byb2JlX3NzX2J1ZltNQVhfSU5TTl9TSVpFICsgMl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJfa3Byb2JlX2JwX2FkZHI7CiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmUgKiwgY3VycmVudF9rcHJvYmUpID0gTlVMTDsKIApAQCAtMzk5LDI2ICszOTksMjUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5leHRwYzsKIAotCWN1cnJlbnRfa3Byb2JlX29yaWdfcGMgPSByZWdzLT5wYzsKLQltZW1jcHkoY3VycmVudF9rcHJvYmVfc3NfYnVmLCAmcC0+YWluc24uaW5zblswXSwgTUFYX0lOU05fU0laRSk7Ci0JcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZykgY3VycmVudF9rcHJvYmVfc3NfYnVmOworCWN1cl9rcHJvYmVfb3JpZ19wYyA9IHJlZ3MtPnBjOworCW1lbWNweShjdXJfa3Byb2JlX3NzX2J1ZiwgJnAtPmFpbnNuLmluc25bMF0sIE1BWF9JTlNOX1NJWkUpOworCXJlZ3MtPnBjID0gKHVuc2lnbmVkIGxvbmcpIGN1cl9rcHJvYmVfc3NfYnVmOwogCi0JbmV4dHBjID0gZmluZF9uZXh0cGMocmVncywgJmN1cnJlbnRfa3Byb2JlX3NzX2ZsYWdzKTsKLQlpZiAoY3VycmVudF9rcHJvYmVfc3NfZmxhZ3MgJiBTSU5HTEVTVEVQX1BDUkVMKQotCQljdXJyZW50X2twcm9iZV9uZXh0X3BjID0KLQkJCWN1cnJlbnRfa3Byb2JlX29yaWdfcGMgKyAobmV4dHBjIC0gcmVncy0+cGMpOworCW5leHRwYyA9IGZpbmRfbmV4dHBjKHJlZ3MsICZjdXJfa3Byb2JlX3NzX2ZsYWdzKTsKKwlpZiAoY3VyX2twcm9iZV9zc19mbGFncyAmIFNJTkdMRVNURVBfUENSRUwpCisJCWN1cl9rcHJvYmVfbmV4dF9wYyA9IGN1cl9rcHJvYmVfb3JpZ19wYyArIChuZXh0cGMgLSByZWdzLT5wYyk7CiAJZWxzZQotCQljdXJyZW50X2twcm9iZV9uZXh0X3BjID0gbmV4dHBjOworCQljdXJfa3Byb2JlX25leHRfcGMgPSBuZXh0cGM7CiAKIAkvKiBicmFuY2hpbmcgaW5zdHJ1Y3Rpb25zIG5lZWQgc3BlY2lhbCBoYW5kbGluZyAqLwotCWlmIChjdXJyZW50X2twcm9iZV9zc19mbGFncyAmIFNJTkdMRVNURVBfQlJBTkNIKQorCWlmIChjdXJfa3Byb2JlX3NzX2ZsYWdzICYgU0lOR0xFU1RFUF9CUkFOQ0gpCiAJCW5leHRwYyA9IHNpbmdsZXN0ZXBfYnJhbmNoX3NldHVwKHJlZ3MpOwogCi0JY3VycmVudF9rcHJvYmVfYnBfYWRkciA9IG5leHRwYzsKKwljdXJfa3Byb2JlX2JwX2FkZHIgPSBuZXh0cGM7CiAKIAkqKHU4ICopIG5leHRwYyA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047Ci0JbW4xMDMwMF9kY2FjaGVfZmx1c2hfcmFuZ2UyKCh1bnNpZ25lZCkgY3VycmVudF9rcHJvYmVfc3NfYnVmLAotCQkJCSAgICBzaXplb2YoY3VycmVudF9rcHJvYmVfc3NfYnVmKSk7CisJbW4xMDMwMF9kY2FjaGVfZmx1c2hfcmFuZ2UyKCh1bnNpZ25lZCkgY3VyX2twcm9iZV9zc19idWYsCisJCQkJICAgIHNpemVvZihjdXJfa3Byb2JlX3NzX2J1ZikpOwogCW1uMTAzMDBfaWNhY2hlX2ludigpOwogfQogCkBAIC00NDAsNyArNDM5LDcgQEAKIAkJCWRpc2FybV9rcHJvYmUocCwgcmVncyk7CiAJCQlyZXQgPSAxOwogCQl9IGVsc2UgewotCQkJcCA9IGN1cnJlbnRfa3Byb2JlOworCQkJcCA9IGN1cl9rcHJvYmU7CiAJCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5kbGVyKHAsIHJlZ3MpKQogCQkJCWdvdG8gc3NfcHJvYmU7CiAJCX0KQEAgLTQ2NCw3ICs0NjMsNyBAQAogCX0KIAogCWtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX0FDVElWRTsKLQljdXJyZW50X2twcm9iZSA9IHA7CisJY3VyX2twcm9iZSA9IHA7CiAJaWYgKHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKSB7CiAJCS8qIGhhbmRsZXIgaGFzIGFscmVhZHkgc2V0IHRoaW5ncyB1cCwgc28gc2tpcCBzcyBzZXR1cCAqLwogCQlyZXR1cm4gMTsKQEAgLTQ5MSw4ICs0OTAsOCBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3VtZV9leGVjdXRpb24oc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJLyogd2UgbWF5IG5lZWQgdG8gZml4dXAgcmVncy9zdGFjayBhZnRlciBzaW5nbGVzdGVwcGluZyBhIGNhbGwgaW5zbiAqLwotCWlmIChjdXJyZW50X2twcm9iZV9zc19mbGFncyAmIFNJTkdMRVNURVBfQlJBTkNIKSB7Ci0JCXJlZ3MtPnBjID0gY3VycmVudF9rcHJvYmVfb3JpZ19wYzsKKwlpZiAoY3VyX2twcm9iZV9zc19mbGFncyAmIFNJTkdMRVNURVBfQlJBTkNIKSB7CisJCXJlZ3MtPnBjID0gY3VyX2twcm9iZV9vcmlnX3BjOwogCQlzd2l0Y2ggKHAtPmFpbnNuLmluc25bMF0pIHsKIAkJY2FzZSAweGNkOgkvKiBDQUxMIChkMTYsUEMpICovCiAJCQkqKHVuc2lnbmVkICopIHJlZ3MtPnNwID0gcmVncy0+bWRyID0gcmVncy0+cGMgKyA1OwpAQCAtNTIzLDggKzUyMiw4IEBACiAJCX0KIAl9CiAKLQlyZWdzLT5wYyA9IGN1cnJlbnRfa3Byb2JlX25leHRfcGM7Ci0JY3VycmVudF9rcHJvYmVfYnBfYWRkciA9IDA7CisJcmVncy0+cGMgPSBjdXJfa3Byb2JlX25leHRfcGM7CisJY3VyX2twcm9iZV9icF9hZGRyID0gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC01MzIsMTAgKzUzMSwxMCBAQAogCWlmICgha3Byb2JlX3J1bm5pbmcoKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY3VycmVudF9rcHJvYmUtPnBvc3RfaGFuZGxlcikKLQkJY3VycmVudF9rcHJvYmUtPnBvc3RfaGFuZGxlcihjdXJyZW50X2twcm9iZSwgcmVncywgMCk7CisJaWYgKGN1cl9rcHJvYmUtPnBvc3RfaGFuZGxlcikKKwkJY3VyX2twcm9iZS0+cG9zdF9oYW5kbGVyKGN1cl9rcHJvYmUsIHJlZ3MsIDApOwogCi0JcmVzdW1lX2V4ZWN1dGlvbihjdXJyZW50X2twcm9iZSwgcmVncyk7CisJcmVzdW1lX2V4ZWN1dGlvbihjdXJfa3Byb2JlLCByZWdzKTsKIAlyZXNldF9jdXJyZW50X2twcm9iZSgpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAlyZXR1cm4gMTsKQEAgLTU0NSwxMiArNTQ0LDEyIEBACiBzdGF0aWMgaW5saW5lCiBpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewotCWlmIChjdXJyZW50X2twcm9iZS0+ZmF1bHRfaGFuZGxlciAmJgotCSAgICBjdXJyZW50X2twcm9iZS0+ZmF1bHRfaGFuZGxlcihjdXJyZW50X2twcm9iZSwgcmVncywgdHJhcG5yKSkKKwlpZiAoY3VyX2twcm9iZS0+ZmF1bHRfaGFuZGxlciAmJgorCSAgICBjdXJfa3Byb2JlLT5mYXVsdF9oYW5kbGVyKGN1cl9rcHJvYmUsIHJlZ3MsIHRyYXBucikpCiAJCXJldHVybiAxOwogCiAJaWYgKGtwcm9iZV9zdGF0dXMgJiBLUFJPQkVfSElUX1NTKSB7Ci0JCXJlc3VtZV9leGVjdXRpb24oY3VycmVudF9rcHJvYmUsIHJlZ3MpOworCQlyZXN1bWVfZXhlY3V0aW9uKGN1cl9rcHJvYmUsIHJlZ3MpOwogCQlyZXNldF9jdXJyZW50X2twcm9iZSgpOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJfQpAQCAtNTY3LDcgKzU2Niw3IEBACiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgRElFX0JSRUFLUE9JTlQ6Ci0JCWlmIChjdXJyZW50X2twcm9iZV9icF9hZGRyICE9IGFyZ3MtPnJlZ3MtPnBjKSB7CisJCWlmIChjdXJfa3Byb2JlX2JwX2FkZHIgIT0gYXJncy0+cmVncy0+cGMpIHsKIAkJCWlmIChrcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkKIAkJCQlyZXR1cm4gTk9USUZZX1NUT1A7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9ocHV4L3N5c19ocHV4LmMgYi9hcmNoL3BhcmlzYy9ocHV4L3N5c19ocHV4LmMKaW5kZXggMTgwNzJlMC4uOTIzNDNiZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaHB1eC9zeXNfaHB1eC5jCisrKyBiL2FyY2gvcGFyaXNjL2hwdXgvc3lzX2hwdXguYwpAQCAtNDQ1LDEyICs0NDUsNyBAQAogCiBpbnQgaHB1eF9waXBlKGludCAqa3N0YWNrX2ZpbGRlcykKIHsKLQlpbnQgZXJyb3I7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWVycm9yID0gZG9fcGlwZV9mbGFncyhrc3RhY2tfZmlsZGVzLCAwKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBkb19waXBlX2ZsYWdzKGtzdGFja19maWxkZXMsIDApOwogfQogCiAvKiBsaWVzIC0gc2F5cyBpdCB3b3JrcywgYnV0IGl0IHJlYWxseSBkaWRuJ3QgbG9jayBhbnl0aGluZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MGVlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGdlbmVyYXRlZC9hc20tb2Zmc2V0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA4YmM5ZTk2Li43MTY2MzRkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMjcsMTkgKzI3LDE5IEBACiAjICBkZWZpbmUgQVRPTUlDX0hBU0hfU0laRSA0CiAjICBkZWZpbmUgQVRPTUlDX0hBU0goYSkgKCYoX19hdG9taWNfaGFzaFsgKCgodW5zaWduZWQgbG9uZykgKGEpKS9MMV9DQUNIRV9CWVRFUykgJiAoQVRPTUlDX0hBU0hfU0laRS0xKSBdKSkKIAotZXh0ZXJuIHJhd19zcGlubG9ja190IF9fYXRvbWljX2hhc2hbQVRPTUlDX0hBU0hfU0laRV0gX19sb2NrX2FsaWduZWQ7CitleHRlcm4gYXJjaF9zcGlubG9ja190IF9fYXRvbWljX2hhc2hbQVRPTUlDX0hBU0hfU0laRV0gX19sb2NrX2FsaWduZWQ7CiAKIC8qIENhbid0IHVzZSByYXdfc3Bpbl9sb2NrX2lycSBiZWNhdXNlIG9mICNpbmNsdWRlIHByb2JsZW1zLCBzbwogICogdGhpcyBpcyB0aGUgc3Vic3RpdHV0ZSAqLwogI2RlZmluZSBfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKGwsZikgZG8gewlcCi0JcmF3X3NwaW5sb2NrX3QgKnMgPSBBVE9NSUNfSEFTSChsKTsJCVwKKwlhcmNoX3NwaW5sb2NrX3QgKnMgPSBBVE9NSUNfSEFTSChsKTsJCVwKIAlsb2NhbF9pcnFfc2F2ZShmKTsJCQlcCi0JX19yYXdfc3Bpbl9sb2NrKHMpOwkJCVwKKwlhcmNoX3NwaW5fbG9jayhzKTsJCQlcCiB9IHdoaWxlKDApCiAKICNkZWZpbmUgX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKGwsZikgZG8gewlcCi0JcmF3X3NwaW5sb2NrX3QgKnMgPSBBVE9NSUNfSEFTSChsKTsJCQlcCi0JX19yYXdfc3Bpbl91bmxvY2socyk7CQkJCVwKKwlhcmNoX3NwaW5sb2NrX3QgKnMgPSBBVE9NSUNfSEFTSChsKTsJCQlcCisJYXJjaF9zcGluX3VubG9jayhzKTsJCQkJXAogCWxvY2FsX2lycV9yZXN0b3JlKGYpOwkJCQlcCiB9IHdoaWxlKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggOGNmYzU1My4uNzVlNDZjNSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTMyLDE0ICszMiwxNCBAQAogCQkJICAgICAiXHQucG9wc2VjdGlvbiIJCQkJXAogCQkJICAgICA6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAlcCiAJCQkgICAgICJpIiAoMCksICJpIiAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSApOyBcCi0JCWZvcig7OykgOwkJCQkJCVwKKwkJdW5yZWFjaGFibGUoKTsJCQkJCQlcCiAJfSB3aGlsZSgwKQogCiAjZWxzZQogI2RlZmluZSBCVUcoKQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJYXNtIHZvbGF0aWxlKFBBUklTQ19CVUdfQlJFQUtfQVNNIDogOiApOwkJXAotCQlmb3IoOzspIDsJCQkJCQlcCisJCXVucmVhY2hhYmxlKCk7CQkJCQkJXAogCX0gd2hpbGUoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDljODAyZWIuLjE5ZjZjYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0zMjgsNyArMzI4LDYgQEAKICAgIHN1Y2ggZnVuY3Rpb24uICAqLwogI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpICAgICAgIF9yLT5nclsyM10gPSAwCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCiAvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCAyZmEwNWRkLi43MmMwZmFmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMjAsNiArMjAsMjAgQEAKICAqIERlZmluZWQgaW4gZW50cnkuUwogICovCiBleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKworCitleHRlcm4gdW5zaWduZWQgbG9uZyByZXR1cm5fYWRkcmVzcyh1bnNpZ25lZCBpbnQpOworCisjZGVmaW5lIEhBVkVfQVJDSF9DQUxMRVJfQUREUgorCisjZGVmaW5lIENBTExFUl9BRERSMCAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorI2RlZmluZSBDQUxMRVJfQUREUjEgcmV0dXJuX2FkZHJlc3MoMSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIyIHJldHVybl9hZGRyZXNzKDIpCisjZGVmaW5lIENBTExFUl9BRERSMyByZXR1cm5fYWRkcmVzcygzKQorI2RlZmluZSBDQUxMRVJfQUREUjQgcmV0dXJuX2FkZHJlc3MoNCkKKyNkZWZpbmUgQ0FMTEVSX0FERFI1IHJldHVybl9hZGRyZXNzKDUpCisjZGVmaW5lIENBTExFUl9BRERSNiByZXR1cm5fYWRkcmVzcyg2KQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfQVNNX1BBUklTQ19GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZmFlMDNlMS4uNzQwMzZmNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC01LDE3ICs1LDE3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zcGlubG9ja190eXBlcy5oPgogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqeCkKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19sb2NrZWQoYXJjaF9zcGlubG9ja190ICp4KQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IF9fbGRjd19hbGlnbih4KTsKIAlyZXR1cm4gKmEgPT0gMDsKIH0KIAotI2RlZmluZSBfX3Jhd19zcGluX2xvY2sobG9jaykgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIDApCi0jZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoeCkgXAotCQlkbyB7IGNwdV9yZWxheCgpOyB9IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSkKKyNkZWZpbmUgYXJjaF9zcGluX2xvY2sobG9jaykgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgMCkKKyNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KHgpIFwKKwkJZG8geyBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZCh4KSkKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqeCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9ja19mbGFncyhhcmNoX3NwaW5sb2NrX3QgKngsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYTsKQEAgLTMzLDcgKzMzLDcgQEAKIAltYigpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKngpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKngpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphOwogCW1iKCk7CkBAIC00Miw3ICs0Miw3IEBACiAJbWIoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICp4KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICp4KQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYTsKIAlpbnQgcmV0OwpAQCAtNjksMzggKzY5LDM4IEBACiAKIC8qIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBpbiBjYXNlIHdlJ3JlCiAgKiBpbnRlcnJ1cHRlZCBieSBzb21lIG90aGVyIGNvZGUgdGhhdCB3YW50cyB0byBncmFiIHRoZSBzYW1lIHJlYWQgbG9jayAqLwotc3RhdGljICBfX2lubGluZV9fIHZvaWQgX19yYXdfcmVhZF9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgIF9faW5saW5lX18gdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2tfZmxhZ3MoJnJ3LT5sb2NrLCBmbGFncyk7CisJYXJjaF9zcGluX2xvY2tfZmxhZ3MoJnJ3LT5sb2NrLCBmbGFncyk7CiAJcnctPmNvdW50ZXIrKzsKLQlfX3Jhd19zcGluX3VubG9jaygmcnctPmxvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBpbiBjYXNlIHdlJ3JlCiAgKiBpbnRlcnJ1cHRlZCBieSBzb21lIG90aGVyIGNvZGUgdGhhdCB3YW50cyB0byBncmFiIHRoZSBzYW1lIHJlYWQgbG9jayAqLwotc3RhdGljICBfX2lubGluZV9fIHZvaWQgX19yYXdfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyAgX19pbmxpbmVfXyB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKCZydy0+bG9jaywgZmxhZ3MpOworCWFyY2hfc3Bpbl9sb2NrX2ZsYWdzKCZydy0+bG9jaywgZmxhZ3MpOwogCXJ3LT5jb3VudGVyLS07Ci0JX19yYXdfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZydy0+bG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBlbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gY2FzZSB3ZSdyZQogICogaW50ZXJydXB0ZWQgYnkgc29tZSBvdGhlciBjb2RlIHRoYXQgd2FudHMgdG8gZ3JhYiB0aGUgc2FtZSByZWFkIGxvY2sgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBfX2lubGluZV9fIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogIHJldHJ5OgogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoX19yYXdfc3Bpbl90cnlsb2NrKCZydy0+bG9jaykpIHsKKwlpZiAoYXJjaF9zcGluX3RyeWxvY2soJnJ3LT5sb2NrKSkgewogCQlydy0+Y291bnRlcisrOwotCQlfX3Jhd19zcGluX3VubG9jaygmcnctPmxvY2spOworCQlhcmNoX3NwaW5fdW5sb2NrKCZydy0+bG9jayk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTExLDcgKzExMSw3IEBACiAJCXJldHVybiAwOwogCiAJLyogV2FpdCB1bnRpbCB3ZSBoYXZlIGEgcmVhbGlzdGljIGNoYW5jZSBhdCB0aGUgbG9jayAqLwotCXdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZCgmcnctPmxvY2spICYmIHJ3LT5jb3VudGVyID49IDApCisJd2hpbGUgKGFyY2hfc3Bpbl9pc19sb2NrZWQoJnJ3LT5sb2NrKSAmJiBydy0+Y291bnRlciA+PSAwKQogCQljcHVfcmVsYXgoKTsKIAogCWdvdG8gcmV0cnk7CkBAIC0xMTksMTUgKzExOSwxNSBAQAogCiAvKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBlbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gY2FzZSB3ZSdyZQogICogaW50ZXJydXB0ZWQgYnkgc29tZSBvdGhlciBjb2RlIHRoYXQgd2FudHMgdG8gcmVhZF90cnlsb2NrKCkgdGhpcyBsb2NrICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiByZXRyeToKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKCZydy0+bG9jaywgZmxhZ3MpOworCWFyY2hfc3Bpbl9sb2NrX2ZsYWdzKCZydy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHJ3LT5jb3VudGVyICE9IDApIHsKLQkJX19yYXdfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKKwkJYXJjaF9zcGluX3VubG9jaygmcnctPmxvY2spOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkJd2hpbGUgKHJ3LT5jb3VudGVyICE9IDApCkBAIC0xNDEsMjcgKzE0MSwyNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJcnctPmNvdW50ZXIgPSAwOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZydy0+bG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmcnctPmxvY2spOwogfQogCiAvKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBlbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gY2FzZSB3ZSdyZQogICogaW50ZXJydXB0ZWQgYnkgc29tZSBvdGhlciBjb2RlIHRoYXQgd2FudHMgdG8gcmVhZF90cnlsb2NrKCkgdGhpcyBsb2NrICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIF9faW5saW5lX18gaW50IGFyY2hfd3JpdGVfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXN1bHQgPSAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChfX3Jhd19zcGluX3RyeWxvY2soJnJ3LT5sb2NrKSkgeworCWlmIChhcmNoX3NwaW5fdHJ5bG9jaygmcnctPmxvY2spKSB7CiAJCWlmIChydy0+Y291bnRlciA9PSAwKSB7CiAJCQlydy0+Y291bnRlciA9IC0xOwogCQkJcmVzdWx0ID0gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIFJlYWQtbG9ja2VkLiAgT2ggd2VsbC4gKi8KLQkJCV9fcmF3X3NwaW5fdW5sb2NrKCZydy0+bG9jayk7CisJCQlhcmNoX3NwaW5fdW5sb2NrKCZydy0+bG9jayk7CiAJCX0KIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAgKiByZWFkX2Nhbl9sb2NrIC0gd291bGQgcmVhZF90cnlsb2NrKCkgc3VjY2VlZD8KICAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgX19yYXdfcmVhZF9jYW5fbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIF9faW5saW5lX18gaW50IGFyY2hfcmVhZF9jYW5fbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlyZXR1cm4gcnctPmNvdW50ZXIgPj0gMDsKIH0KQEAgLTE4MiwxNiArMTgyLDE2IEBACiAgKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPwogICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX3Jhd193cml0ZV9jYW5fbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIF9faW5saW5lX18gaW50IGFyY2hfd3JpdGVfY2FuX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJcmV0dXJuICFydy0+Y291bnRlcjsKIH0KIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfd3JpdGVfbG9jayhsb2NrKQogCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IDNmNzJmNDcuLjhjMzczYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNCwxOCArNCwxOCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogI2lmZGVmIENPTkZJR19QQTIwCiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IHNsb2NrOwotIyBkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEIHsgMSB9CisjIGRlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEIHsgMSB9CiAjZWxzZQogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrWzRdOwotIyBkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECXsgeyAxLCAxLCAxLCAxIH0gfQorIyBkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IHsgMSwgMSwgMSwgMSB9IH0KICNlbmRpZgotfSByYXdfc3BpbmxvY2tfdDsKK30gYXJjaF9zcGlubG9ja190OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JcmF3X3NwaW5sb2NrX3QgbG9jazsKKwlhcmNoX3NwaW5sb2NrX3QgbG9jazsKIAl2b2xhdGlsZSBpbnQgY291bnRlcjsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQJCXsgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VELCAwIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRCwgMCB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmY2QzYzcwLi5lYzc4N2I0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjQ0LDkgKzI0NCw2IEBACiAJREVGSU5FKFRIUkVBRF9TWiwgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykpOwogCURFRklORShUSFJFQURfU1pfQUxHTiwgYWxpZ24oc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbyksIDY0KSk7CiAJQkxBTksoKTsKLQlERUZJTkUoSVJRU1RBVF9TSVJRX1BFTkQsIG9mZnNldG9mKGlycV9jcHVzdGF0X3QsIF9fc29mdGlycV9wZW5kaW5nKSk7Ci0JREVGSU5FKElSUVNUQVRfU1osIHNpemVvZihpcnFfY3B1c3RhdF90KSk7Ci0JQkxBTksoKTsKIAlERUZJTkUoSUNBQ0hFX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBwZGNfY2FjaGVfaW5mbywgaWNfYmFzZSkpOwogCURFRklORShJQ0FDSEVfU1RSSURFLCBvZmZzZXRvZihzdHJ1Y3QgcGRjX2NhY2hlX2luZm8sIGljX3N0cmlkZSkpOwogCURFRklORShJQ0FDSEVfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCBwZGNfY2FjaGVfaW5mbywgaWNfY291bnQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwppbmRleCAyZTc2MTBjLi5lZmJjZWU1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwdV9pbnRlcnJ1cHRfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiQ1BVIiwKKwkubmFtZQkJPSAiQ1BVIiwKIAkuc3RhcnR1cAk9IGNwdV9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSBjcHVfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSBjcHVfZW5hYmxlX2lycSwKQEAgLTE4MCw3ICsxODAsNyBAQAogCWlmIChpIDwgTlJfSVJRUykgewogCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHNraXA7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbmRpZgogCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogI2lmbmRlZiBQQVJJU0NfSVJRX0NSMTZfQ09VTlRTCiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKICBza2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZTg0NjdlNC4uZmIzN2FjNSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgotI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGFzbS91Y29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9ydF9zaWdmcmFtZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKaW5kZXggMWZkMGYwYy4uM2YyZmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwpAQCAtNjAsOCArNjAsNiBAQAogI2RlZmluZSBzbXBfZGVidWcobHZsLCAuLi4pCWRvIHsgfSB3aGlsZSgwKQogI2VuZGlmIC8qIERFQlVHX1NNUCAqLwogCi1ERUZJTkVfU1BJTkxPQ0soc21wX2xvY2spOwotCiB2b2xhdGlsZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNtcF9pbml0X2N1cnJlbnRfaWRsZV90YXNrOwogCiAvKiB0cmFjayB3aGljaCBDUFUgaXMgYm9vdGluZyAqLwpAQCAtNjksNyArNjcsNyBAQAogCiBzdGF0aWMgaW50IHBhcmlzY19tYXhfY3B1cyBfX2NwdWluaXRkYXRhID0gMTsKIAotREVGSU5FX1BFUl9DUFUoc3BpbmxvY2tfdCwgaXBpX2xvY2spID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9QRVJfQ1BVKHNwaW5sb2NrX3QsIGlwaV9sb2NrKTsKIAogZW51bSBpcGlfbWVzc2FnZV90eXBlIHsKIAlJUElfTk9QPTAsCkBAIC00MzgsNiArNDM2LDExIEBACiAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCXNwaW5fbG9ja19pbml0KCZwZXJfY3B1KGlwaV9sb2NrLCBjcHUpKTsKKwogCWluaXRfY3B1X3ByZXNlbnQoY3B1bWFza19vZigwKSk7CiAKIAlwYXJpc2NfbWF4X2NwdXMgPSBtYXhfY3B1czsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYwppbmRleCA3NmQyM2VjLi45Nzc5ZWNlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCkBAIC0yNiwxMyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QveGRyLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCmluZGV4IGEzNjc5OWUuLmQ1OGVhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmx5Lmg+CkBAIC0xMTUsMjQgKzExNiwxOCBAQAogCX0KIH0KIAorc3RhdGljIGludCBjbXBfdW53aW5kX3RhYmxlX2VudHJ5KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuICgoY29uc3Qgc3RydWN0IHVud2luZF90YWJsZV9lbnRyeSAqKWEpLT5yZWdpb25fc3RhcnQKKwkgICAgIC0gKChjb25zdCBzdHJ1Y3QgdW53aW5kX3RhYmxlX2VudHJ5ICopYiktPnJlZ2lvbl9zdGFydDsKK30KKwogc3RhdGljIHZvaWQKIHVud2luZF90YWJsZV9zb3J0KHN0cnVjdCB1bndpbmRfdGFibGVfZW50cnkgKnN0YXJ0LAogCQkgIHN0cnVjdCB1bndpbmRfdGFibGVfZW50cnkgKmZpbmlzaCkKIHsKLQlzdHJ1Y3QgdW53aW5kX3RhYmxlX2VudHJ5IGVsLCAqcCwgKnE7Ci0KLQlmb3IgKHAgPSBzdGFydCArIDE7IHAgPCBmaW5pc2g7ICsrcCkgewotCQlpZiAocFswXS5yZWdpb25fc3RhcnQgPCBwWy0xXS5yZWdpb25fc3RhcnQpIHsKLQkJCWVsID0gKnA7Ci0JCQlxID0gcDsKLQkJCWRvIHsKLQkJCQlxWzBdID0gcVstMV07Ci0JCQkJLS1xOwotCQkJfSB3aGlsZSAocSA+IHN0YXJ0ICYmIAotCQkJCSBlbC5yZWdpb25fc3RhcnQgPCBxWy0xXS5yZWdpb25fc3RhcnQpOwotCQkJKnEgPSBlbDsKLQkJfQotCX0KKwlzb3J0KHN0YXJ0LCBmaW5pc2ggLSBzdGFydCwgc2l6ZW9mKHN0cnVjdCB1bndpbmRfdGFibGVfZW50cnkpLAorCSAgICAgY21wX3Vud2luZF90YWJsZV9lbnRyeSwgTlVMTCk7CiB9CiAKIHN0cnVjdCB1bndpbmRfdGFibGUgKgpAQCAtNDE3LDMgKzQxMiwzMCBAQAogCiAJcmV0dXJuIHJldDsKIH0KKwordW5zaWduZWQgbG9uZyByZXR1cm5fYWRkcmVzcyh1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IHVud2luZF9mcmFtZV9pbmZvIGluZm87CisJc3RydWN0IHB0X3JlZ3MgcjsKKwl1bnNpZ25lZCBsb25nIHNwOworCisJLyogaW5pdGlhbGl6ZSB1bndpbmQgaW5mbyAqLworCWFzbSB2b2xhdGlsZSAoImNvcHkgJSVyMzAsICUwIiA6ICI9ciIoc3ApKTsKKwltZW1zZXQoJnIsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCXIuaWFvcVswXSA9ICh1bnNpZ25lZCBsb25nKSBjdXJyZW50X3RleHRfYWRkcigpOworCXIuZ3JbMl0gPSAodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCXIuZ3JbMzBdID0gc3A7CisJdW53aW5kX2ZyYW1lX2luaXQoJmluZm8sIGN1cnJlbnQsICZyKTsKKworCS8qIHVud2luZCBzdGFjayAqLworCSsrbGV2ZWw7CisJZG8geworCQlpZiAodW53aW5kX29uY2UoJmluZm8pIDwgMCB8fCBpbmZvLmlwID09IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFfX2tlcm5lbF90ZXh0X2FkZHJlc3MoaW5mby5pcCkpIHsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAoaW5mby5pcCAmJiBsZXZlbC0tKTsKKworCXJldHVybiBpbmZvLmlwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbGliL2JpdG9wcy5jIGIvYXJjaC9wYXJpc2MvbGliL2JpdG9wcy5jCmluZGV4IGUzZWI3MzkuLjM1Mzk2M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2xpYi9iaXRvcHMuYworKysgYi9hcmNoL3BhcmlzYy9saWIvYml0b3BzLmMKQEAgLTEyLDggKzEyLDggQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCi1yYXdfc3BpbmxvY2tfdCBfX2F0b21pY19oYXNoW0FUT01JQ19IQVNIX1NJWkVdIF9fbG9ja19hbGlnbmVkID0gewotCVswIC4uLiAoQVRPTUlDX0hBU0hfU0laRS0xKV0gID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECithcmNoX3NwaW5sb2NrX3QgX19hdG9taWNfaGFzaFtBVE9NSUNfSEFTSF9TSVpFXSBfX2xvY2tfYWxpZ25lZCA9IHsKKwlbMCAuLi4gKEFUT01JQ19IQVNIX1NJWkUtMSldICA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyYmExNGU3Li5iYTM5NDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtNTYsNiArNTYsMTYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBOUl9JUlFTCisJaW50ICJOdW1iZXIgb2YgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVycyIKKwlyYW5nZSAzMiA1MTIKKwlkZWZhdWx0ICI1MTIiCisJaGVscAorCSAgVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVycyB0aGUga2VybmVsCisJICBjYW4gbWFuYWdlLiBWaXJ0dWFsIGludGVycnVwdCBudW1iZXJzIGFyZSB3aGF0IHlvdSBzZWUgaW4KKwkgIC9wcm9jL2ludGVycnVwdHMuIElmIHlvdSBjb25maWd1cmUgeW91ciBzeXN0ZW0gdG8gaGF2ZSB0b28gZmV3LAorCSAgZHJpdmVycyB3aWxsIGZhaWwgdG8gbG9hZCBvciB3b3JzZSAtIGhhbmRsZSB3aXRoIGNhcmUuCisKIGNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xOTksMjQgKzIwOSwxNCBAQAogY29uZmlnIFJFREJPT1QKIAlib29sCiAKLWNvbmZpZyBISUJFUk5BVEVfMzIKLQlib29sCi0JZGVwZW5kcyBvbiAoUFBDX1BNQUMgJiYgIVNNUCkgfHwgQlJPS0VOCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBISUJFUk5BVEVfNjQKLQlib29sCi0JZGVwZW5kcyBvbiBCUk9LRU4gfHwgKFBQQ19QTUFDNjQgJiYgRVhQRVJJTUVOVEFMKQotCWRlZmF1bHQgeQotCiBjb25maWcgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRQogCWJvb2wKLQlkZXBlbmRzIG9uIChQUEM2NCAmJiBISUJFUk5BVEVfNjQpIHx8IChQUEMzMiAmJiBISUJFUk5BVEVfMzIpCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBBREJfUE1VIHx8IFBQQ19FRklLQSB8fCBQUENfTElURTUyMDAgfHwgUFBDXzgzeHgKKwlkZXBlbmRzIG9uIEFEQl9QTVUgfHwgUFBDX0VGSUtBIHx8IFBQQ19MSVRFNTIwMCB8fCBQUENfODN4eCB8fCBcCisJCSAgIFBQQ184NXh4IHx8IFBQQ184Nnh4CiAKIGNvbmZpZyBQUENfRENSX05BVElWRQogCWJvb2wKQEAgLTMyMCw2ICszMjAsMTAgQEAKIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKK2NvbmZpZyBBUkNIX0NQVV9QUk9CRV9SRUxFQVNFCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gSE9UUExVR19DUFUKKwogY29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCiAJZGVmX2Jvb2wgeQogCkBAIC0zNzgsNiArMzgyLDE5IEBACiAJICBDUFUuICBHZW5lcmFsbHkgc2F5aW5nIFkgaXMgc2FmZSwgYWx0aG91Z2ggc29tZSBwcm9ibGVtcyBoYXZlIGJlZW4KIAkgIHJlcG9ydGVkIHdpdGggU01QIFBvd2VyIE1hY2ludG9zaGVzIHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZC4KIAorY29uZmlnIFNQQVJTRV9JUlEKKwlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzcGFyc2UgaXJxcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGRpc3RybworCSAga2VybmVscyB0aGF0IHdhbnQgdG8gZGVmaW5lIGEgaGlnaCBDT05GSUdfTlJfQ1BVUyB2YWx1ZSBidXQgc3RpbGwKKwkgIHdhbnQgdG8gaGF2ZSBsb3cga2VybmVsIG1lbW9yeSBmb290cHJpbnQgb24gc21hbGxlciBtYWNoaW5lcy4KKworCSAgKCBTcGFyc2UgSVJRcyBjYW4gYWxzbyBiZSBiZW5lZmljaWFsIG9uIE5VTUEgYm94ZXMsIGFzIHRoZXkgc3ByZWFkCisJICAgIG91dCB0aGUgaXJxX2Rlc2NbXSBhcnJheSBpbiBhIG1vcmUgTlVNQS1mcmllbmRseSB3YXkuICkKKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS4KKwogY29uZmlnIE5VTUEKIAlib29sICJOVU1BIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUEM2NApAQCAtNjUyLDYgKzY2OSwxNCBAQAogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCiAJc2VsZWN0IFBDSV9RVUlSS1MKIAorY29uZmlnIEZTTF9QTUMKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTVVNQRU5EICYmIChQUENfODV4eCB8fCBQUENfODZ4eCkKKwloZWxwCisJICBGcmVlc2NhbGUgTVBDODV4eC9NUEM4Nnh4IHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbGxlciBzdXBwb3J0CisJICAoc3VzcGVuZC9yZXN1bWUpLiBGb3IgTVBDODN4eCBzZWUgcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCisKIGNvbmZpZyA0eHhfU09DCiAJYm9vbAogCkBAIC02NzksNyArNzA0LDcgQEAKIGNvbmZpZyBQQ0kKIAlib29sICJQQ0kgc3VwcG9ydCIgaWYgUFBDX1BDSV9DSE9JQ0UKIAlkZWZhdWx0IHkgaWYgITQweCAmJiAhQ1BNMiAmJiAhOHh4ICYmICFQUENfODN4eCBcCi0JCSYmICFQUENfODV4eCAmJiAhUFBDXzg2eHgKKwkJJiYgIVBQQ184NXh4ICYmICFQUENfODZ4eCAmJiAhR0FNRUNVQkVfQ09NTU9OCiAJZGVmYXVsdCBQQ0lfUEVSTUVESUEgaWYgITR4eCAmJiAhQ1BNMiAmJiAhOHh4CiAJZGVmYXVsdCBQQ0lfUVNQQU4gaWYgITR4eCAmJiAhQ1BNMiAmJiA4eHgKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggYmYzMzgyZi4uNWNkZDdlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTI1NCw2ICsyNTQsMTQgQEAKIAkgIHVzaW5nIGEgQ1BNLWJhc2VkIHNlcmlhbCBwb3J0LiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGJvb3R3cmFwcGVyCiAJICBoYXMgcnVuLCBhbmQgc2V0IHVwIHRoZSBDUE0gaW4gYSBwYXJ0aWN1bGFyIHdheS4KIAorY29uZmlnIFBQQ19FQVJMWV9ERUJVR19VU0JHRUNLTworCWJvb2wgIkVhcmx5IGRlYnVnZ2luZyB0aHJvdWdoIHRoZSBVU0IgR2Vja28gYWRhcHRlciIKKwlkZXBlbmRzIG9uIEdBTUVDVUJFX0NPTU1PTgorCXNlbGVjdCBVU0JHRUNLT19VREJHCisJaGVscAorCSAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIGVhcmx5IGRlYnVnZ2luZyBmb3IgTmludGVuZG8gR2FtZUN1YmUvV2lpCisJICBjb25zb2xlcyB2aWEgYW4gZXh0ZXJuYWwgVVNCIEdlY2tvIGFkYXB0ZXIuCisKIGVuZGNob2ljZQogCiBjb25maWcgUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTTE9XCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCmluZGV4IDdiZmM4YWQuLmJiMjQ2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCkBAIC02Niw3ICs2Niw3IEBACiAJCWd1bnppcF91dGlsLmMgZWxmX3V0aWwuYyAkKHpsaWIpIGRldnRyZWUuYyBvZmxpYi5jIG9mY29uc29sZS5jIFwKIAkJNHh4LmMgZWJvbnkuYyBtdjY0eDYwLmMgbXBzYy5jIG12NjR4NjBfaTJjLmMgY3Vib290LmMgYmFtYm9vLmMgXAogCQljcG0tc2VyaWFsLmMgc3RkbGliLmMgbXBjNTJ4eC1wc2MuYyBwbGFuZXRjb3JlLmMgdWFydGxpdGUuYyBcCi0JCWZzbC1zb2MuYyBtcGM4eHguYyBwcTIuYworCQlmc2wtc29jLmMgbXBjOHh4LmMgcHEyLmMgdWdlY29uLmMKIHNyYy1wbGF0IDo9IG9mLmMgY3Vib290LTUyeHguYyBjdWJvb3QtODI0eC5jIGN1Ym9vdC04M3h4LmMgY3Vib290LTg1eHguYyBob2xseS5jIFwKIAkJY3Vib290LWVib255LmMgY3Vib290LWhvdGZvb3QuYyB0cmVlYm9vdC1lYm9ueS5jIHBycG1jMjgwMC5jIFwKIAkJcHMzLWhlYWQuUyBwczMtaHZjYWxsLlMgcHMzLmMgdHJlZWJvb3QtYmFtYm9vLmMgY3Vib290LTh4eC5jIFwKQEAgLTc2LDcgKzc2LDggQEAKIAkJY3Vib290LWthdG1haS5jIGN1Ym9vdC1yYWluaWVyLmMgcmVkYm9vdC04eHguYyBlcDgyNDhlLmMgXAogCQljdWJvb3Qtd2FycC5jIGN1Ym9vdC04NXh4LWNwbTIuYyBjdWJvb3QteW9zZW1pdGUuYyBzaW1wbGVib290LmMgXAogCQl2aXJ0ZXg0MDUtaGVhZC5TIHZpcnRleC5jIHJlZGJvb3QtODN4eC5jIGN1Ym9vdC1zYW00NDBlcC5jIFwKLQkJY3Vib290LWFjYWRpYS5jIGN1Ym9vdC1hbWlnYW9uZS5jIGN1Ym9vdC1raWxhdWVhLmMKKwkJY3Vib290LWFjYWRpYS5jIGN1Ym9vdC1hbWlnYW9uZS5jIGN1Ym9vdC1raWxhdWVhLmMgXAorCQlnYW1lY3ViZS1oZWFkLlMgZ2FtZWN1YmUuYyB3aWktaGVhZC5TIHdpaS5jCiBzcmMtYm9vdCA6PSAkKHNyYy13bGliKSAkKHNyYy1wbGF0KSBlbXB0eS5jCiAKIHNyYy1ib290IDo9ICQoYWRkcHJlZml4ICQob2JqKS8sICQoc3JjLWJvb3QpKQpAQCAtMjU0LDYgKzI1NSw4IEBACiBpbWFnZS0kKENPTkZJR19TVE9SQ0VOVEVSKQkJKz0gY3VJbWFnZS5zdG9yY2VudGVyCiBpbWFnZS0kKENPTkZJR19NUEM3NDQ4SFBDMikJCSs9IGN1SW1hZ2UubXBjNzQ0OGhwYzIKIGltYWdlLSQoQ09ORklHX1BQQ19DMkspCQkJKz0gY3VJbWFnZS5jMmsKK2ltYWdlLSQoQ09ORklHX0dBTUVDVUJFKQkJKz0gZHRiSW1hZ2UuZ2FtZWN1YmUKK2ltYWdlLSQoQ09ORklHX1dJSSkJCQkrPSBkdGJJbWFnZS53aWkKIAogIyBCb2FyZCBwb3J0IGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS9hbWlnYW9uZS9LY29uZmlnCiBpbWFnZS0kKENPTkZJR19BTUlHQU9ORSkJCSs9IGN1SW1hZ2UuYW1pZ2FvbmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IGM5MjAxNzAuLmNkNTZiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMzUyLDYgKzM1Miw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OwpAQCAtMzgxLDYgKzM4Miw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VpZ2VyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9laWdlci5kdHMKaW5kZXggYzRhOTM0Zi4uNDhiY2Y3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VpZ2VyLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZWlnZXIuZHRzCkBAIC0zMTYsNiArMzE2LDcgQEAKIAkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKIAkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CiAJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXJ4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAwPjsKIAkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMD47CkBAIC0zNDUsNiArMzQ2LDcgQEAKIAkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKIAkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CiAJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXJ4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAwPjsKIAkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMD47CkBAIC0zNzUsNiArMzc3LDggQEAKIAkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKIAkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CiAJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXJ4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKKwkJCQl0eC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47IC8qIGVtYWMyJjMgb25seSAqLwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OwogCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkxPjsKQEAgLTQwMyw2ICs0MDcsOCBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OworCQkJCXR4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsgLyogZW1hYzImMyBvbmx5ICovCiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dhbWVjdWJlLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nYW1lY3ViZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzYmUwZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nYW1lY3ViZS5kdHMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2FtZWN1YmUuZHRzCisgKgorICogTmludGVuZG8gR2FtZUN1YmUgcGxhdGZvcm0gZGV2aWNlIHRyZWUgc291cmNlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSBBbGJlcnQgSGVycmFuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJuaW50ZW5kbyxnYW1lY3ViZSI7CisJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxnYW1lY3ViZSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljaG9zZW4geworCQlib290YXJncyA9ICJyb290PS9kZXYvZ2Nuc2RhMiByb290d2FpdCB1ZGJnLWltbW9ydGFsIjsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMTgwMDAwMD47CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyxnZWtrb0AwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NDg2MDAwMDAwPjsgLyogNDg2TUh6ICovCisJCQlidXMtZnJlcXVlbmN5ID0gPDE2MjAwMDAwMD47IC8qIDE2Mk1IeiBjb3JlLXRvLWJ1cyAzeCAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDQwNTAwMDAwPjsgLyogMTYyTUh6IC8gNCAqLworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCX07CisJfTsKKworCS8qIGRldmljZXMgY29udGFpbmVkIGludCB0aGUgZmxpcHBlciBjaGlwc2V0ICovCisJZmxpcHBlciB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxmbGlwcGVyIjsKKwkJcmFuZ2VzID0gPDB4MGMwMDAwMDAgMHgwYzAwMDAwMCAweDAwMDEwMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKworCQl2aWRlb0AwYzAwMjAwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGZsaXBwZXItdmkiOworCQkJcmVnID0gPDB4MGMwMDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4PjsKKwkJfTsKKworCQlwcm9jZXNzb3ItaW50ZXJmYWNlQDBjMDAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8sZmxpcHBlci1waSI7CisJCQlyZWcgPSA8MHgwYzAwMzAwMCAweDEwMD47CisKKwkJCVBJQzogcGljIHsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAibmludGVuZG8sZmxpcHBlci1waWMiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJfTsKKwkJfTsKKworCQlkc3BAMGMwMDUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8sZmxpcHBlci1kc3AiOworCQkJcmVnID0gPDB4MGMwMDUwMDAgMHgyMDA+OworCQkJaW50ZXJydXB0cyA9IDw2PjsKKworCQkJbWVtb3J5QDAgeworCQkJCWNvbXBhdGlibGUgPSAibmludGVuZG8sZmxpcHBlci1hcmFtIjsKKwkJCQlyZWcgPSA8MCAweDEwMDAwMDA+OwkvKiAxNk1CICovCisJCQl9OworCQl9OworCisJCWRpc2tAMGMwMDYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxmbGlwcGVyLWRpIjsKKwkJCXJlZyA9IDwweDBjMDA2MDAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyPjsKKwkJfTsKKworCQlhdWRpb0AwYzAwNmMwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGZsaXBwZXItYWkiOworCQkJcmVnID0gPDB4MGMwMDZjMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDY+OworCQl9OworCisJCWdhbWVwYWQtY29udHJvbGxlckAwYzAwNjQwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGZsaXBwZXItc2kiOworCQkJcmVnID0gPDB4MGMwMDY0MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwzPjsKKwkJfTsKKworCQkvKiBFeHRlcm5hbCBJbnRlcmZhY2UgYnVzICovCisJCWV4aUAwYzAwNjgwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGZsaXBwZXItZXhpIjsKKwkJCXJlZyA9IDwweDBjMDA2ODAwIDB4NDA+OworCQkJdmlydHVhbC1yZWcgPSA8MHgwYzAwNjgwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ+OworCQl9OworICAgICAgICB9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwppbmRleCA5MTA5NDRlLi5jODYxMTRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwpAQCAtMTE4LDYgKzExOCwxMiBAQAogCQkJfTsKIAkJfTsKIAorCQludnJhbUAzLDAgeworCQkJZGV2aWNlX3R5cGUgPSAibnZyYW0iOworCQkJY29tcGF0aWJsZSA9ICJzaW10ZWssc3RrMTRjYTgiOworCQkJcmVnID0gPDB4MyAweDAgMHgyMDAwMD47CisJCX07CisKIAkJZnBnYUA0LDAgewogCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZnBnYS1yZWdzIjsKIAkJCXJlZyA9IDwweDQgMHgwIDB4NDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCmluZGV4IDIxMDdkM2MuLjgyMGMyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKQEAgLTExNSw2ICsxMTUsMTIgQEAKIAkJCX07CiAJCX07CiAKKwkJbnZyYW1AMywwIHsKKwkJCWRldmljZV90eXBlID0gIm52cmFtIjsKKwkJCWNvbXBhdGlibGUgPSAic2ltdGVrLHN0azE0Y2E4IjsKKwkJCXJlZyA9IDwweDMgMHgwIDB4MjAwMDA+OworCQl9OworCiAJCWZwZ2FANCwwIHsKIAkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcmVncyI7CiAJCQlyZWcgPSA8MHg0IDB4MCAweDQwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwppbmRleCAzNWE2MzE4Li4zMDkxMWFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCkBAIC04NCw2ICs4NCwxMiBAQAogCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwICAgICAvLyBJTyBGUEdBICg4LWJpdCkKIAkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47ICAgLy8gSU8gRlBHQSAoMzItYml0KQogCisJCW52cmFtQDMsMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJudnJhbSI7CisJCQljb21wYXRpYmxlID0gInNpbXRlayxzdGsxNGNhOCI7CisJCQlyZWcgPSA8MHgzIDB4MCAweDIwMDAwPjsKKwkJfTsKKwogCQlmcGdhQDQsMCB7CiAJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXJlZ3MiOwogCQkJcmVnID0gPDB4NCAweDAgMHg0MD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKaW5kZXggZjM3ODdhMi4uZjZmNjE4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpAQCAtMjkyLDYgKzI5Miw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OwpAQCAtMzIxLDYgKzMyMiw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OwpAQCAtMzUxLDYgKzM1Myw4IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CisJCQkJdHgtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OyAvKiBlbWFjMiYzIG9ubHkgKi8KIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAwPjsKIAkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMT47CkBAIC0zNzksNiArMzgzLDggQEAKIAkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKIAkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CiAJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXJ4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKKwkJCQl0eC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47IC8qIGVtYWMyJjMgb25seSAqLwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OwogCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9oYWxlYWthbGEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hhbGVha2FsYS5kdHMKaW5kZXggNWIyYTQ5NC4uMmIyNTY2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hhbGVha2FsYS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hhbGVha2FsYS5kdHMKQEAgLTIyNiw2ICsyMjYsOCBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OworCQkJCXR4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAwPjsKIAkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCmluZGV4IDA3NzgxOWIuLjhmMzQ1ZGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwpAQCAtMTYsNyArMTYsNyBAQAogCiAvIHsKIAkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKIAltb2RlbCA9ICJhbWNjLGthdG1haSI7CiAJY29tcGF0aWJsZSA9ICJhbWNjLGthdG1haSI7CiAJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CkBAIC00OSw3ICs0OSw3IEBACiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisJCXJlZyA9IDwweDAgMHgwMDAwMDAwMCAweDAgMHgwMDAwMDAwMD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KIAl9OwogCiAJVUlDMDogaW50ZXJydXB0LWNvbnRyb2xsZXIwIHsKQEAgLTEwOCwxMSArMTA4LDI2IEBACiAJCWRjci1yZWcgPSA8MHgwMGMgMHgwMDI+OwogCX07CiAKKwlNUTA6IG1xIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sbXEtNDQwc3BlIjsKKwkJZGNyLXJlZyA9IDwweDA0MCAweDAyMD47CisJfTsKKwogCXBsYiB7CiAJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NDBzcGUiLCAiaWJtLHBsYi00NDBncCIsICJpYm0scGxiNCI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOworCQkvKiAgICAgICAgYWRkci1jaGlsZCAgICAgYWRkci1wYXJlbnQgICAgc2l6ZSAqLworCQlyYW5nZXMgPSA8MHg0IDB4MDAxMDAwMDAgMHg0IDB4MDAxMDAwMDAgMHgwMDAwMTAwMAorCQkJICAweDQgMHgwMDIwMDAwMCAweDQgMHgwMDIwMDAwMCAweDAwMDAwNDAwCisJCQkgIDB4NCAweGUwMDAwMDAwIDB4NCAweGUwMDAwMDAwIDB4MjAwMDAwMDAKKwkJCSAgMHhjIDB4MDAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgyMDAwMDAwMAorCQkJICAweGQgMHgwMDAwMDAwMCAweGQgMHgwMDAwMDAwMCAweDgwMDAwMDAwCisJCQkgIDB4ZCAweDgwMDAwMDAwIDB4ZCAweDgwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCSAgMHhlIDB4MDAwMDAwMDAgMHhlIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAorCQkJICAweGUgMHg4MDAwMDAwMCAweGUgMHg4MDAwMDAwMCAweDgwMDAwMDAwCisJCQkgIDB4ZiAweDAwMDAwMDAwIDB4ZiAweDAwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCSAgMHhmIDB4ODAwMDAwMDAgMHhmIDB4ODAwMDAwMDAgMHg4MDAwMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLwogCiAJCVNEUkFNMDogc2RyYW0gewpAQCAtMjQ1LDggKzI2MCw4IEBACiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZCAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwYyAweDA4MDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKLQkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KLQkJCWRtYS1yYW5nZXMgPSA8MHg0MjAwMDAwMCAweDAgMHgwIDB4MCAweDAgMHgwIDB4ODAwMDAwMDA+OworCQkJLyogSW5ib3VuZCA0R0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLworCQkJZG1hLXJhbmdlcyA9IDwweDQyMDAwMDAwIDB4MCAweDAgMHgwIDB4MCAweDEgMHgwMDAwMDAwMD47CiAKIAkJCS8qIFRoaXMgZHJpdmVzIGJ1c3NlcyAwIHRvIDB4ZiAqLwogCQkJYnVzLXJhbmdlID0gPDB4MCAweGY+OwpAQCAtMjg5LDEwICszMDQsMTAgQEAKIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDBlIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBmIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKIAotCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwotCQkJZG1hLXJhbmdlcyA9IDwweDQyMDAwMDAwIDB4MCAweDAgMHgwIDB4MCAweDAgMHg4MDAwMDAwMD47CisJCQkvKiBJbmJvdW5kIDRHQiByYW5nZSBzdGFydGluZyBhdCAwICovCisJCQlkbWEtcmFuZ2VzID0gPDB4NDIwMDAwMDAgMHgwIDB4MCAweDAgMHgwIDB4MSAweDAwMDAwMDAwPjsKIAotCQkJLyogVGhpcyBkcml2ZXMgYnVzc2VzIDEwIHRvIDB4MWYgKi8KKwkJCS8qIFRoaXMgZHJpdmVzIGJ1c3NlcyAweDEwIHRvIDB4MWYgKi8KIAkJCWJ1cy1yYW5nZSA9IDwweDEwIDB4MWY+OwogCiAJCQkvKiBMZWdhY3kgaW50ZXJydXB0cyAobm90ZSB0aGUgd2VpcmQgcG9sYXJpdHksIHRoZSBicmlkZ2Ugc2VlbXMKQEAgLTMzMCwxMCArMzQ1LDEwIEBACiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZSAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDgwMDEwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKLQkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KLQkJCWRtYS1yYW5nZXMgPSA8MHg0MjAwMDAwMCAweDAgMHgwIDB4MCAweDAgMHgwIDB4ODAwMDAwMDA+OworCQkJLyogSW5ib3VuZCA0R0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLworCQkJZG1hLXJhbmdlcyA9IDwweDQyMDAwMDAwIDB4MCAweDAgMHgwIDB4MCAweDEgMHgwMDAwMDAwMD47CiAKLQkJCS8qIFRoaXMgZHJpdmVzIGJ1c3NlcyAxMCB0byAweDFmICovCisJCQkvKiBUaGlzIGRyaXZlcyBidXNzZXMgMHgyMCB0byAweDJmICovCiAJCQlidXMtcmFuZ2UgPSA8MHgyMCAweDJmPjsKIAogCQkJLyogTGVnYWN5IGludGVycnVwdHMgKG5vdGUgdGhlIHdlaXJkIHBvbGFyaXR5LCB0aGUgYnJpZGdlIHNlZW1zCkBAIC0zNzEsMTAgKzM4NiwxMCBAQAogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MDAwMDAwMGYgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHg4MDAyMDAwMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OwogCi0JCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCi0JCQlkbWEtcmFuZ2VzID0gPDB4NDIwMDAwMDAgMHgwIDB4MCAweDAgMHgwIDB4MCAweDgwMDAwMDAwPjsKKwkJCS8qIEluYm91bmQgNEdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KKwkJCWRtYS1yYW5nZXMgPSA8MHg0MjAwMDAwMCAweDAgMHgwIDB4MCAweDAgMHgxIDB4MDAwMDAwMDA+OwogCi0JCQkvKiBUaGlzIGRyaXZlcyBidXNzZXMgMTAgdG8gMHgxZiAqLworCQkJLyogVGhpcyBkcml2ZXMgYnVzc2VzIDB4MzAgdG8gMHgzZiAqLwogCQkJYnVzLXJhbmdlID0gPDB4MzAgMHgzZj47CiAKIAkJCS8qIExlZ2FjeSBpbnRlcnJ1cHRzIChub3RlIHRoZSB3ZWlyZCBwb2xhcml0eSwgdGhlIGJyaWRnZSBzZWVtcwpAQCAtMzkyLDYgKzQwNyw0OSBAQAogCQkJCTB4MCAweDAgMHgwIDB4MyAmVUlDMyAweGEgMHg0IC8qIHN3aXp6bGVkIGludCBDICovCiAJCQkJMHgwIDB4MCAweDAgMHg0ICZVSUMzIDB4YiAweDQgLyogc3dpenpsZWQgaW50IEQgKi8+OwogCQl9OworCisJCUkyTzogaTJvQDQwMDEwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImlibSxpMm8tNDQwc3BlIjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAxMDAwMDAgMHgxMDA+OworCQkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCX07CisKKwkJRE1BMDogZG1hMEA0MDAxMDAxMDAgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sZG1hLTQ0MHNwZSI7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJcmVnID0gPDB4MDAwMDAwMDQgMHgwMDEwMDEwMCAweDEwMD47CisJCQlkY3ItcmVnID0gPDB4MDYwIDB4MDIwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JkRNQTA+OworCQkJaW50ZXJydXB0cyA9IDwwIDE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCTAgJlVJQzAgMHgxNCA0CisJCQkJMSAmVUlDMSAweDE2IDQ+OworCQl9OworCisJCURNQTE6IGRtYTFANDAwMTAwMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLGRtYS00NDBzcGUiOworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAxMDAyMDAgMHgxMDA+OworCQkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZETUExPjsKKwkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkwICZVSUMwIDB4MTYgNAorCQkJCTEgJlVJQzEgMHgxNiA0PjsKKwkJfTsKKworCQl4b3ItYWNjZWxANDAwMjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1jYyx4b3ItYWNjZWxlcmF0b3IiOworCQkJcmVnID0gPDB4MDAwMDAwMDQgMHgwMDIwMDAwMCAweDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCWludGVycnVwdHMgPSA8MHgxZiA0PjsKKwkJfTsKIAl9OwogCiAJY2hvc2VuIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwppbmRleCBjNDY1NjE0Li4wODNlNjhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCkBAIC0yNzIsNiArMjcyLDggQEAKIAkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKIAkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CiAJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXJ4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKKwkJCQl0eC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OwpAQCAtMzAwLDYgKzMwMiw4IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CisJCQkJdHgtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OwogCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rbWV0ZXIxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rbWV0ZXIxLmR0cwppbmRleCAxNjcwNDRmLi42NWI4YjRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva21ldGVyMS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ttZXRlcjEuZHRzCkBAIC01OSw2ICs1OSwxMyBAQAogCQlyZWcgPSA8MHhlMDAwMDAwMCAweDAwMDAwMjAwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CisKIAkJaTJjQDMwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tYWthbHUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21ha2FsdS5kdHMKaW5kZXggZmZjMjQ2ZS4uNjNkNDhiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21ha2FsdS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21ha2FsdS5kdHMKQEAgLTIyNyw2ICsyMjcsOCBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OworCQkJCXR4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDNmPjsJLyogU3RhcnQgYXQgNiAqLwogCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkwPjsKQEAgLTI1NSw2ICsyNTcsOCBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHgtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OwogCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCmluZGV4IDMyZTEwZjUuLjhhM2E0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwpAQCAtMjA0LDYgKzIwNCw3IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTAgPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CiAKIAkJCW1kaW9ANTIwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI0Niw2ICsyNDcsNyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxID47CisJCQlmc2wsbWFnaWMtcGFja2V0OwogCiAJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0zMDksNiArMzExLDIyIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJfTsKIAorCQlndG0xOiB0aW1lckA1MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1ndG0iLCAiZnNsLGd0bSI7CisJCQlyZWcgPSA8MHg1MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw5MCA4IDc4IDggODQgOCA3MiA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMzMzMzMzMz47CisJCX07CisKKwkJdGltZXJANjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZ3RtIiwgImZzbCxndG0iOworCQkJcmVnID0gPDB4NjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8OTEgOCA3OSA4IDg1IDggNzMgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OworCQl9OworCiAJCS8qIElQSUMKIAkJICogaW50ZXJydXB0cyBjZWxsID0gPGludHIgIywgc2Vuc2U+CiAJCSAqIHNlbnNlIHZhbHVlcyBtYXRjaCBsaW51eCBJT1JFU09VUkNFX0lSUV8qIGRlZmluZXM6CkBAIC0zMzcsNiArMzU1LDE1IEBACiAJCQkJICAgICAgMHg1OSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LXBtYyIsICJmc2wsbXBjODMxMy1wbWMiLAorCQkJCSAgICAgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZnNsLG1wYzgzMTMtd2FrZXVwLXRpbWVyID0gPCZndG0xPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCmluZGV4IDQzNmM5YzYuLjA1YWQ4YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cwpAQCAtNzksNiArNzksMTMgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKKwogCQlpMmNAMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMTYzLDYgKzE3MCw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4NGM+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDAxMjIwMDNmPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJaXBpYzogcGljQDcwMCB7CkBAIC00MjgsNSArNDM2LDYgQEAKIAkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCmluZGV4IDlhMDk1MmYuLmY0ZmFkYjIzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCkBAIC02Miw2ICs2MiwxMyBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAorCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OworCiAJCWkyY0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0xNDEsNiArMTQ4LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg0Yz47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4MDEyMjAwM2Y+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlpcGljOnBpY0A3MDAgewpAQCAtMzYwLDUgKzM2OCw2IEBACiAJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCmluZGV4IGZlZWViN2YuLmI1M2QxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCkBAIC02Myw2ICs2MywyNCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAorCQlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCiAJCWkyY0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC03Miw2ICs5MCwxMiBAQAogCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlkZnNycjsKKworCQkJZWVwcm9tOiBhdDI0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gInN0LW1pY3JvLDI0YzI1NiI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQl9OwogCiAJCWkyY0AzMTAwIHsKQEAgLTkxLDYgKzExNSwyNSBAQAogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJfTsKIAorCQkJcGNmMTogaWV4cEAzOCB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxwY2Y4NTc0YSI7CisJCQkJcmVnID0gPDB4Mzg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKKwkJCXBjZjI6IGlleHBAMzkgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAidGkscGNmODU3NGEiOworCQkJCXJlZyA9IDwweDM5PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQl9OworCisJCQlzcGQ6IGF0MjRANTEgeworCQkJCWNvbXBhdGlibGUgPSAiYXQyNCxzcGQiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisKIAkJCW1jdV9waW86IG1jdUBhIHsKIAkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM0OWVtaXR4IiwKQEAgLTI3NSw2ICszMTgsMjQgQEAKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJpcGljIjsKIAkJfTsKKworCQlncGlvLWxlZHMgeworCQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCQlncmVlbiB7CisJCQkJbGFiZWwgPSAiR3JlZW4iOworCQkJCWdwaW9zID0gPCZwY2YxIDAgMT47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQl9OworCisJCQl5ZWxsb3cgeworCQkJCWxhYmVsID0gIlllbGxvdyI7CisJCQkJZ3Bpb3MgPSA8JnBjZjEgMSAxPjsKKwkJCQkvKiBsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsgKi8KKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJCX07CisJCX07CisKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTMzMSw3ICszOTIsMjYgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OWUtbG9jYWxidXMiLAogCQkJICAgICAiZnNsLHBxMnByby1sb2NhbGJ1cyI7CiAJCXJlZyA9IDwweGUwMDA1MDAwIDB4ZDg+OwotCQlyYW5nZXMgPSA8MHgzIDB4MCAweGYwMDAwMDAwIDB4MjEwPjsKKwkJcmFuZ2VzID0gPDB4MCAweDAgMHhmZTAwMDAwMCAweDEwMDAwMDAJLyogZmxhc2ggKi8KKwkJCSAgMHgxIDB4MCAweGY4MDAwMDAwIDB4MjAwMDAJLyogVlNDIDczODUgKi8KKwkJCSAgMHgyIDB4MCAweGY5MDAwMDAwIDB4MjAwMDAwCS8qIGV4cCBzbG90ICovCisJCQkgIDB4MyAweDAgMHhmMDAwMDAwMCAweDIxMD47CS8qIENGIHNsb3QgKi8KKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAgICAgIDB4MCAweDgwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCQl9OworCisJCWZsYXNoQDAsODAwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4ODAwMDAwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCX07CiAKIAkJcGF0YUAzLDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OWVtaXR4LXBhdGEiLCAiYXRhLWdlbmVyaWMiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKaW5kZXggMzlmZjRjOC4uNDVjZmExYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cwpAQCAtOTksNiArOTksMTMgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKKwogCQlpMmNAMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMTk0LDYgKzIwMSw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4N2U+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDAxMDEwZWJmPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJaXBpYzogcGljQDcwMCB7CkBAIC00NzAsNSArNDc4LDYgQEAKIAkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X3Jkay5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9yZGsuZHRzCmluZGV4IDYzMTVkNmYuLmJkZjQ0NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X3Jkay5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfcmRrLmR0cwpAQCAtNzEsNiArNzEsMTMgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKKwogCQlpMmNAMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwpAQCAtMTYxLDYgKzE2OCw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4N2U+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDAxMDEwZWJmPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJaXBpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANzAwIHsKQEAgLTQ1NSw2ICs0NjMsNyBAQAogCQkJCSAweGE4MDAgMCAwIDIgJmlwaWMgMjAgOAogCQkJCSAweGE4MDAgMCAwIDMgJmlwaWMgMjEgOAogCQkJCSAweGE4MDAgMCAwIDQgJmlwaWMgMTggOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCS8qIGZpbGxlZCBieSB1LWJvb3QgKi8KIAkJYnVzLXJhbmdlID0gPDAgMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwppbmRleCAwMGMyYmJkLi42ZDg5MmJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCkBAIC00MCw2ICs0MCw4IEBACiAJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCiAJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKIAkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDA4MDAwCS8vIGNvcmUKKwkJCQkgJnBtYyAweDAwMDA0MDAwPjsJLy8gdGltZWJhc2UKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CkBAIC05NCwzMSArOTYsNDEgQEAKIAkJCWludGVycnVwdHMgPSA8MTYgMj47CiAJCX07CiAKLQkJaTJjQDMwMDAgeworCQlpMmMtc2xlZXAtbmV4dXMgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwND47CisJCQlyYW5nZXM7CiAKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKLQkJCQlyZWcgPSA8MHg2OD47CisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJfTsKIAkJCX07Ci0JCX07CiAKLQkJaTJjQDMxMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKKwkJCWkyY0AzMTAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlkZnNycjsKKwkJCX07CiAJCX07CiAKIAkJZG1hQDIxMzAwIHsKQEAgLTEyOCw2ICsxNDAsOCBAQAogCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKIAkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CiAJCQljZWxsLWluZGV4ID0gPDA+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwNDAwPjsKKwogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OC1kbWEtY2hhbm5lbCIsCiAJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwpAQCAtMTc2LDYgKzE5MCw3IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwODA+OwogCiAJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yMjgsNiArMjQzLDcgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDA0MD47CiAKIAkJCW1kaW9ANTIwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI0MiwzMCArMjU4LDQ3IEBACiAJCQl9OwogCQl9OwogCi0JCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwotCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlkdWFydC1zbGVlcC1uZXh1cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwMj47CisJCQlyYW5nZXM7CisKKwkJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCX07CisKKwkJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCX07CiAJCX07CiAKLQkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jawotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIjsKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OC1ndXRzIiwgImZzbCxtcGM4NTQ4LWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwwIDB4ZTAwMDAgMHgxMDAwPjsKIAkJCWZzbCxoYXMtcnN0Y3I7Ci0JCX07CiAKLQkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgewotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDB4NDYwMCAweDEwMD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwbWM6IHBvd2VyQDcwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4LXBtYyIsCisJCQkJCSAgICAgImZzbCxtcGM4NTQ4LXBtYyI7CisJCQkJcmVnID0gPDB4NzAgMHgyMD47CisJCQl9OwogCQl9OwogCiAJCWNyeXB0b0AzMDAwMCB7CkBAIC0yNzcsNiArMzEwLDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4MTJiMGViZj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDEwMDAwMDA+OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CkBAIC0zNzYsNiArNDEwLDcgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wscWUiOwogCQlyYW5nZXMgPSA8MHgwIDB4ZTAwODAwMDAgMHg0MDAwMD47CiAJCXJlZyA9IDwweGUwMDgwMDAwIDB4NDgwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDAwODAwPjsKIAkJYnJnLWZyZXF1ZW5jeSA9IDwwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwzOTYwMDAwMDA+OwogCQlmc2wscWUtbnVtLXJpc2NzID0gPDI+OwpAQCAtNTA5LDYgKzU0NCw3IEBACiAJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyMDAwMDAwIDB4MCAweDgwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHg4MDAwMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtNTM0LDYgKzU3MCw3IEBACiAJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyODAwMDAwIDB4MCAweDgwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHgyMDAwMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtNTcwLDUgKzYwNyw3IEBACiAJCQkgICAgICA1NSAyIC8qIG1zZzJfdHggICAqLwogCQkJICAgICAgNTYgMiAvKiBtc2cyX3J4ICAgKi8+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDgwMDAwICAgLyogY29udHJvbGxlciAqLworCQkJICZwbWMgMHgwMDA0MDAwMD47IC8qIG1lc3NhZ2UgdW5pdCAqLwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCmluZGV4IDFlM2VjOGYuLjc5NWViMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKQEAgLTQxLDYgKzQxLDggQEAKIAkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKIAkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySwogCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDgwMDAJLy8gY29yZQorCQkJCSAmcG1jIDB4MDAwMDQwMDA+OwkvLyB0aW1lYmFzZQogCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKQEAgLTU5LDYgKzYxLDcgQEAKIAkJcmVnID0gPDB4ZTAwMDUwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwxOSAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCXNsZWVwID0gPCZwbWMgMHgwODAwMDAwMD47CiAKIAkJcmFuZ2VzID0gPDB4MCAweDAgMHhmZTAwMDAwMCAweDAyMDAwMDAwCiAJCQkgIDB4MSAweDAgMHhmODAwMDAwMCAweDAwMDA4MDAwCkBAIC0xNTgsNTEgKzE2MSw2OSBAQAogCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7CisJCWkyYy1zbGVlcC1uZXh1cyB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWRmc3JyOworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDA0PjsKKwkJCXJhbmdlczsKIAotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOwotCQkJCXJlZyA9IDwweDY4PjsKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlkZnNycjsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0cyA9IDwzIDE+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQl9OworCQkJfTsKKworCQkJaTJjQDMxMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWRmc3JyOwogCQkJfTsKIAkJfTsKIAotCQlpMmNAMzEwMCB7CisJCWR1YXJ0LXNsZWVwLW5leHVzIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZGZzcnI7Ci0JCX07CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMDI+OworCQkJcmFuZ2VzOwogCi0JCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwotCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OworCQkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJfTsKIAotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCX07CiAJCX07CiAKIAkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewpAQCAtMjYwLDYgKzI4MSw3IEBACiAJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw3MiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAyMDAwMDA+OwogCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTI3Niw2ICsyOTgsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweGJmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDEwMDAwMDA+OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CkBAIC0zMDQsOSArMzI3LDE4IEBACiAJCX07CiAKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY5LWd1dHMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjktZ3V0cyIsICJmc2wsbXBjODU0OC1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MCAweGUwMDAwIDB4MTAwMD47CiAJCQlmc2wsaGFzLXJzdGNyOworCisJCQlwbWM6IHBvd2VyQDcwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY5LXBtYyIsCisJCQkJCSAgICAgImZzbCxtcGM4NTQ4LXBtYyI7CisJCQkJcmVnID0gPDB4NzAgMHgyMD47CisJCQl9OwogCQl9OwogCiAJCXBhcl9pb0BlMDEwMCB7CkBAIC00MjIsNiArNDU0LDcgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wscWUiOwogCQlyYW5nZXMgPSA8MHgwIDB4ZTAwODAwMDAgMHg0MDAwMD47CiAJCXJlZyA9IDwweGUwMDgwMDAwIDB4NDgwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDAwODAwPjsKIAkJYnJnLWZyZXF1ZW5jeSA9IDwwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAkJZnNsLHFlLW51bS1yaXNjcyA9IDw0PjsKQEAgLTY4NCw2ICs3MTcsNyBAQAogCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTI4MDAwMDAgMHgwIDB4MDA4MDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MjAwMDAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlwY2llQDAgewogCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwpAQCAtNzE0LDUgKzc0OCw2IEBACiAJCQkgICAgICA1NSAyIC8qIG1zZzJfdHggICAqLwogCQkJICAgICAgNTYgMiAvKiBtc2cyX3J4ICAgKi8+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDgwMDAwPjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKaW5kZXggZjQ2OGQyMS4uOTUzNWNlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKQEAgLTM1LDYgKzM1LDggQEAKIAkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKIAkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMQogCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxCisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDgwMDAgMAkvLyBjb3JlCisJCQkJICZwbWMgMHgwMDAwNDAwMCAwPjsJLy8gdGltZWJhc2UKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKQEAgLTYwLDYgKzYyLDcgQEAKIAkJCSAgNSAwIDB4ZTg0ODAwMDAgMHgwMDAwODAwMAogCQkJICA2IDAgMHhlODRjMDAwMCAweDAwMDA4MDAwCiAJCQkgIDMgMCAweGU4MDAwMDAwIDB4MDAwMDAwMjA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDgwMDAwMDAgMD47CiAKIAkJZmxhc2hAMCwwIHsKIAkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKQEAgLTEwNSw2ICsxMDgsOCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsZnBnYS1waXhpcyI7CiAJCQlyZWcgPSA8MyAwIDB4MjA+OwogCQkJcmFuZ2VzID0gPDAgMyAwIDB4MjA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDggOD47CiAKIAkJCXNkY3NyX3BpbzogZ3Bpby1jb250cm9sbGVyQGEgewogCQkJCSNncGlvLWNlbGxzID0gPDI+OwpAQCAtMTYzLDYgKzE2OCw3IEBACiAJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwNCAwPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC0xNzQsNiArMTgwLDcgQEAKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8NDIgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwMiAwPjsKIAkJfTsKIAogCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CkBAIC0xODQsNiArMTkxLDcgQEAKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8NDIgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwOCAwPjsKIAkJfTsKIAogCQlzcGlANzAwMCB7CkBAIC0xOTYsNiArMjA0LDcgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJbW9kZSA9ICJjcHUiOwogCQkJZ3Bpb3MgPSA8JnNkY3NyX3BpbyA3IDA+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwODAwIDA+OwogCiAJCQltbWMtc2xvdEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjEwaHBjZC1tbWMtc2xvdCIsCkBAIC0yMTMsNiArMjIyLDcgQEAKIAkJCXJlZyA9IDwweDJjMDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDcyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDQwMDAwMDAgMD47CiAJCX07CiAKIAkJbXBpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANDAwMDAgewpAQCAtMjQxLDkgKzI1MSwxOCBAQAogCQl9OwogCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtZ3V0cyI7CiAJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDAgMHhlMDAwMCAweDEwMDA+OwogCQkJZnNsLGhhcy1yc3RjcjsKKworCQkJcG1jOiBwb3dlckA3MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1wbWMiLAorCQkJCQkgICAgICJmc2wsbXBjODY0MWQtcG1jIjsKKwkJCQlyZWcgPSA8MHg3MCAweDIwPjsKKwkJCX07CiAJCX07CiAKIAkJd2R0QGU0MDAwIHsKQEAgLTI2Miw2ICsyODEsNyBAQAogCQkJZnNsLHBsYXliYWNrLWRtYSA9IDwmZG1hMDA+OwogCQkJZnNsLGNhcHR1cmUtZG1hID0gPCZkbWEwMT47CiAJCQlmc2wsZmlmby1kZXB0aCA9IDw4PjsKKwkJCXNsZWVwID0gPCZwbWMgMCAweDA4MDAwMDAwPjsKIAkJfTsKIAogCQlzc2lAMTYxMDAgewpAQCAtMjcxLDYgKzI5MSw3IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8NjMgMj47CiAJCQlmc2wsZmlmby1kZXB0aCA9IDw4PjsKKwkJCXNsZWVwID0gPCZwbWMgMCAweDA0MDAwMDAwPjsKIAkJfTsKIAogCQlkbWFAMjEzMDAgewpAQCAtMjgwLDYgKzMwMSw3IEBACiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsgLyogRE1BIGdlbmVyYWwgc3RhdHVzIHJlZ2lzdGVyICovCiAJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwNDAwIDA+OwogCiAJCQlkbWEwMDogZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1kbWEtY2hhbm5lbCIsCkBAIC0zMjIsNiArMzQ0LDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHhjMzAwIDB4ND47IC8qIERNQSBnZW5lcmFsIHN0YXR1cyByZWdpc3RlciAqLwogCQkJcmFuZ2VzID0gPDB4MCAweGMxMDAgMHgyMDA+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMjAwIDA+OwogCiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjEwLWRtYS1jaGFubmVsIiwKQEAgLTM2OSw2ICszOTIsNyBAQAogCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTEwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4ODAwMDAwMDAgMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwpAQCAtMzk4LDYgKzQyMiw3IEBACiAJCWJ1cy1yYW5nZSA9IDwxIDM+OwogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMzAwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHg0MDAwMDAwMCAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjYgMj47CkBAIC00NzQsNiArNDk5LDcgQEAKIAkJCQkgMHgwMDAwIDAgMCA0ICZtcGljIDcgMT47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDI1IDI+OworCQlzbGVlcCA9IDwmcG1jIDB4MjAwMDAwMDAgMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjByZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjUyNjkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiLmR0cwpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIFAxMDIwIFJEQiBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCW1vZGVsID0gImZzbCxQMTAyMCI7CisJY29tcGF0aWJsZSA9ICJmc2wsUDEwMjBSREIiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLFAxMDIwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCisJCVBvd2VyUEMsUDEwMjBAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MT47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZTA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJLyogTk9SLCBOQU5EIEZsYXNoZXMgYW5kIFZpdGVzc2UgNSBwb3J0IEwyIHN3aXRjaCAqLworCQlyYW5nZXMgPSA8MHgwIDB4MCAweDAgMHhlZjAwMDAwMCAweDAxMDAwMDAwCisJCQkgIDB4MSAweDAgMHgwIDB4ZmZhMDAwMDAgMHgwMDA0MDAwMAorCQkJICAweDIgMHgwIDB4MCAweGZmYjAwMDAwIDB4MDAwMjAwMDA+OworCisJCW5vckAwLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MTAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJLyogVGhpcyBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhbHRlcmVkICAqLworCQkJCS8qIDI1NktCIGZvciBWaXRlc3NlIDczODUgU3dpdGNoIGZpcm13YXJlICovCisJCQkJcmVnID0gPDB4MCAweDAwMDQwMDAwPjsKKwkJCQlsYWJlbCA9ICJOT1IgKFJPKSBWaXRlc3NlLTczODUgRmlybXdhcmUiOworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJLyogMjU2S0IgZm9yIERUQiBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDAwNDAwMDA+OworCQkJCWxhYmVsID0gIk5PUiAoUk8pIERUQiBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDgwMDAwIHsKKwkJCQkvKiAzLjUgTUIgZm9yIExpbnV4IEtlcm5lbCBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAwMDgwMDAwIDB4MDAzODAwMDA+OworCQkJCWxhYmVsID0gIk5PUiAoUk8pIExpbnV4IEtlcm5lbCBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDQwMDAwMCB7CisJCQkJLyogMTFNQiBmb3IgSkZGUzIgYmFzZWQgUm9vdCBmaWxlIFN5c3RlbSAqLworCQkJCXJlZyA9IDwweDAwNDAwMDAwIDB4MDBiMDAwMDA+OworCQkJCWxhYmVsID0gIk5PUiAoUlcpIEpGRlMyIFJvb3QgRmlsZSBTeXN0ZW0iOworCQkJfTsKKworCQkJcGFydGl0aW9uQGYwMDAwMCB7CisJCQkJLyogVGhpcyBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhbHRlcmVkICAqLworCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgRW52aXJvbm1lbnQgVmFyaWFibGVzICovCisJCQkJcmVnID0gPDB4MDBmMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJbGFiZWwgPSAiTk9SIChSTykgVS1Cb290IEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCW5hbmRAMSwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4MSAweDAgMHg0MDAwMD47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQkvKiBUaGlzIGxvY2F0aW9uIG11c3Qgbm90IGJlIGFsdGVyZWQgICovCisJCQkJLyogMU1CIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAgMHgwMDEwMDAwMD47CisJCQkJbGFiZWwgPSAiTkFORCAoUk8pIFUtQm9vdCBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJLyogMU1CIGZvciBEVEIgSW1hZ2UgKi8KKwkJCQlyZWcgPSA8MHgwMDEwMDAwMCAweDAwMTAwMDAwPjsKKwkJCQlsYWJlbCA9ICJOQU5EIChSTykgRFRCIEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkvKiA0TUIgZm9yIExpbnV4IEtlcm5lbCBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDA0MDAwMDA+OworCQkJCWxhYmVsID0gIk5BTkQgKFJPKSBMaW51eCBLZXJuZWwgSW1hZ2UiOworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA2MDAwMDAgeworCQkJCS8qIDRNQiBmb3IgQ29tcHJlc3NlZCBSb290IGZpbGUgU3lzdGVtIEltYWdlICovCisJCQkJcmVnID0gPDB4MDA2MDAwMDAgMHgwMDQwMDAwMD47CisJCQkJbGFiZWwgPSAiTkFORCAoUk8pIENvbXByZXNzZWQgUkZTIEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AYTAwMDAwIHsKKwkJCQkvKiA3TUIgZm9yIEpGRlMyIGJhc2VkIFJvb3QgZmlsZSBTeXN0ZW0gKi8KKwkJCQlyZWcgPSA8MHgwMGEwMDAwMCAweDAwNzAwMDAwPjsKKwkJCQlsYWJlbCA9ICJOQU5EIChSVykgSkZGUzIgUm9vdCBGaWxlIFN5c3RlbSI7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTEwMDAwMCB7CisJCQkJLyogMTVNQiBmb3IgSkZGUzIgYmFzZWQgUm9vdCBmaWxlIFN5c3RlbSAqLworCQkJCXJlZyA9IDwweDAxMTAwMDAwIDB4MDBmMDAwMDA+OworCQkJCWxhYmVsID0gIk5BTkQgKFJXKSBXcml0YWJsZSBVc2VyIGFyZWEiOworCQkJfTsKKwkJfTsKKworCQlMMnN3aXRjaEAyLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAidml0ZXNzZS03Mzg1IjsKKwkJCXJlZyA9IDwweDIgMHgwIDB4MjAwMDA+OworCQl9OworCisJfTsKKworCXNvY0BmZmUwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKworCQllY20tbGF3QDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7CisJCQlyZWcgPSA8MHgwIDB4MTAwMD47CisJCQlmc2wsbnVtLWxhd3MgPSA8MTI+OworCQl9OworCisJCWVjbUAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWVjbSIsICJmc2wsZWNtIjsKKwkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQlpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOworCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQltb2RlID0gImNwdSI7CisKKwkJCWZzbF9tMjVwODBAMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaS1mbGFzaCI7CisJCQkJcmVnID0gPDA+OworCQkJCWxpbnV4LG1vZGFsaWFzID0gImZzbF9tMjVwODAiOworCQkJCW1vZGFsID0gInMyNXNsMTI4YiI7CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCQkJCW1vZGUgPSA8MD47CisKKwkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCQlyZWcgPSA8MHgwIDB4MDAwODAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBVLUJvb3QgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQkJCS8qIDUxMktCIGZvciBEVEIgSW1hZ2UgKi8KKwkJCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA4MDAwMD47CisJCQkJCWxhYmVsID0gIlNQSSAoUk8pIERUQiBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCS8qIDRNQiBmb3IgTGludXggS2VybmVsIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBMaW51eCBLZXJuZWwgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCQkvKiA0TUIgZm9yIENvbXByZXNzZWQgUkZTIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBDb21wcmVzc2VkIFJGUyBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDkwMDAwMCB7CisJCQkJCS8qIDdNQiBmb3IgSkZGUzIgYmFzZWQgUkZTICovCisJCQkJCXJlZyA9IDwweDAwOTAwMDAwIDB4MDA3MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJXKSBKRkZTMiBSRlMiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKKwkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47IC8vIEwyLDI1NksKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJdXNiQDIyMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKKwkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MjggMHgyPjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCXVzYkAyMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDQ2IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKworCQlzZGhjaUAyZTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1lc2RoYyIsICJmc2wsZXNkaGMiOworCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NzIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjEiLCAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwKKwkJCQkgICAgICJmc2wsc2VjMi4yIiwgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhiZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZmUwOTAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDAgMHhmZmUwOTAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMzAwMDAgMHgwIDB4MTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAorCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwMD47CisJCX07CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMGEwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDAgMHhjMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzIwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MTYgMj47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTkzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMC5kdHMKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBQMjAyMCBSREIgIENvcmUwIERldmljZSBUcmVlIFNvdXJjZSBpbiBDQU1QIG1vZGUuCisgKgorICogSW4gQ0FNUCBtb2RlLCBlYWNoIGNvcmUgbmVlZHMgdG8gaGF2ZSBpdHMgb3duIGR0cy4gT25seSBtcGljIGFuZCBMMiBjYWNoZQorICogY2FuIGJlIHNoYXJlZCwgYWxsIHRoZSBvdGhlciBkZXZpY2VzIG11c3QgYmUgYXNzaWduZWQgdG8gb25lIGNvcmUgb25seS4KKyAqIFRoaXMgZHRzIGZpbGUgYWxsb3dzIGNvcmUwIHRvIGhhdmUgbWVtb3J5LCBsMiwgaTJjLCBzcGksIGdwaW8sIGRtYTEsIHVzYiwKKyAqIGV0aDEsIGV0aDIsIHNkaGMsIGNyeXB0bywgZ2xvYmFsLXV0aWwsIHBjaTAuCisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwltb2RlbCA9ICJmc2wsUDIwMjAiOworCWNvbXBhdGlibGUgPSAiZnNsLFAyMDIwUkRCIiwgImZzbCxNUEM4NVhYUkRCLUNBTVAiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJZXRoZXJuZXQyID0gJmVuZXQyOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXBjaTAgPSAmcGNpMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLFAyMDIwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCX07CisKKwlzb2NAZmZlMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWltbXIiLCAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgIDB4MCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCisKKwkJZWNtLWxhd0AwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVjbS1sYXciOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQkJZnNsLG51bS1sYXdzID0gPDEyPjsKKwkJfTsKKworCQllY21AMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lY20iLCAiZnNsLGVjbSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDE3IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCX07CisKKwkJc3BpQDcwMDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKKwkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJbW9kZSA9ICJjcHUiOworCisJCQlmc2xfbTI1cDgwQDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGktZmxhc2giOworCQkJCXJlZyA9IDwwPjsKKwkJCQlsaW51eCxtb2RhbGlhcyA9ICJmc2xfbTI1cDgwIjsKKwkJCQltb2RhbCA9ICJzMjVzbDEyOGIiOworCQkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwkJCQltb2RlID0gPDA+OworCisJCQkJcGFydGl0aW9uQDAgeworCQkJCQkvKiA1MTJLQiBmb3IgdS1ib290IEJvb3Rsb2FkZXIgSW1hZ2UgKi8KKwkJCQkJcmVnID0gPDB4MCAweDAwMDgwMDAwPjsKKwkJCQkJbGFiZWwgPSAiU1BJIChSTykgVS1Cb290IEltYWdlIjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisKKwkJCQlwYXJ0aXRpb25AODAwMDAgeworCQkJCQkvKiA1MTJLQiBmb3IgRFRCIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwMDgwMDAwIDB4MDAwODAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBEVEIgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCQkvKiA0TUIgZm9yIExpbnV4IEtlcm5lbCBJbWFnZSAqLworCQkJCQlyZWcgPSA8MHgwMDEwMDAwMCAweDAwNDAwMDAwPjsKKwkJCQkJbGFiZWwgPSAiU1BJIChSTykgTGludXggS2VybmVsIEltYWdlIjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisKKwkJCQlwYXJ0aXRpb25ANTAwMDAwIHsKKwkJCQkJLyogNE1CIGZvciBDb21wcmVzc2VkIFJGUyBJbWFnZSAqLworCQkJCQlyZWcgPSA8MHgwMDUwMDAwMCAweDAwNDAwMDAwPjsKKwkJCQkJbGFiZWwgPSAiU1BJIChSTykgQ29tcHJlc3NlZCBSRlMgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA5MDAwMDAgeworCQkJCQkvKiA3TUIgZm9yIEpGRlMyIGJhc2VkIFJGUyAqLworCQkJCQlyZWcgPSA8MHgwMDkwMDAwMCAweDAwNzAwMDAwPjsKKwkJCQkJbGFiZWwgPSAiU1BJIChSVykgSkZGUzIgUkZTIjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7CisJCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OyAvLyBMMiw1MTJLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCXVzYkAyMjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDI4IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKworCQltZGlvQDI0NTIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgMT47CisJCQkJcmVnID0gPDB4MD47CisJCQl9OworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKKwkJCX07CisJCX07CisKKwkJbWRpb0AyNTUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47CisKKwkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAic2dtaWkiOworCisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJfTsKKworCQlzZGhjaUAyZTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lc2RoYyIsICJmc2wsZXNkaGMiOworCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NzIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjEiLCAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwKKwkJCQkgICAgICJmc2wsc2VjMi4yIiwgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhiZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAorCQkJNDIgNzYgNzcgNzggNzkgLyogc2VyaWFsMSAsIGRtYTIgKi8KKwkJCTI5IDMwIDM0IDI2IC8qIGVuZXQwLCBwY2kxICovCisJCQkweGUwIDB4ZTEgMHhlMiAweGUzIC8qIG1zaSAqLworCQkJMHhlNCAweGU1IDB4ZTYgMHhlNworCQkJPjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmZlMDkwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzMwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjUgMj47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTEuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NWE1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMS5kdHMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBQMjAyMCBSREIgQ29yZTEgRGV2aWNlIFRyZWUgU291cmNlIGluIENBTVAgbW9kZS4KKyAqCisgKiBJbiBDQU1QIG1vZGUsIGVhY2ggY29yZSBuZWVkcyB0byBoYXZlIGl0cyBvd24gZHRzLiBPbmx5IG1waWMgYW5kIEwyIGNhY2hlCisgKiBjYW4gYmUgc2hhcmVkLCBhbGwgdGhlIG90aGVyIGRldmljZXMgbXVzdCBiZSBhc3NpZ25lZCB0byBvbmUgY29yZSBvbmx5LgorICogVGhpcyBkdHMgYWxsb3dzIGNvcmUxIHRvIGhhdmUgbDIsIGRtYTIsIGV0aDAsIHBjaTEsIG1zaS4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0byBhZGQgIi1iIDEiIGZvciBjb3JlMSdzIGR0cyBjb21waWxpbmcuCisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwltb2RlbCA9ICJmc2wsUDIwMjAiOworCWNvbXBhdGlibGUgPSAiZnNsLFAyMDIwUkRCIiwgImZzbCxNUEM4NVhYUkRCLUNBTVAiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlwY2kxID0gJnBjaTE7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyxQMjAyMEAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwl9OworCisJc29jQGZmZTAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1pbW1yIiwgInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwICAweDAgMHhmZmUwMDAwMCAweDEwMDAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgorCisJCXNlcmlhbDA6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWRtYUBjMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHhjMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzYgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3NyAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzggMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OworCQkJfTsKKwkJfTsKKworCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDwweDgwMDAwPjsgLy8gTDIsNTEySworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAorCQkJMTcgMTggNDMgNDIgNTkgNDcgLyplY20sIG1lbSwgaTJjLCBzZXJpYWwwLCBzcGksZ3BpbyAqLworCQkJMTYgMjAgMjEgMjIgMjMgMjggCS8qIEwyLCBkbWExLCBVU0IgKi8KKwkJCTAzIDM1IDM2IDQwIDMxIDMyIDMzIAkvKiBtZGlvLCBlbmV0MSwgZW5ldDIgKi8KKwkJCTcyIDQ1IDU4IDI1IAkJLyogc2RoY2ksIGNyeXB0byAsIHBjaSAqLworCQkJPjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMGEwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDAgMHhjMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzIwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjYgMj47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3A0MDgwZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3A0MDgwZHMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjllYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDQwODBkcy5kdHMKQEAgLTAsMCArMSw1NTQgQEAKKy8qCisgKiBQNDA4MERTIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZgl0aGUgR05VIEdlbmVyYWwJIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiZnNsLFA0MDgwRFMiOworCWNvbXBhdGlibGUgPSAiZnNsLFA0MDgwRFMiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCWNjc3IgPSAmc29jOworCisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlzZXJpYWwyID0gJnNlcmlhbDI7CisJCXNlcmlhbDMgPSAmc2VyaWFsMzsKKwkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKKwkJdXNiMCA9ICZ1c2IwOworCQl1c2IxID0gJnVzYjE7CisJCWRtYTAgPSAmZG1hMDsKKwkJZG1hMSA9ICZkbWExOworCQlzZGhjID0gJnNkaGM7CisKKwkJcmlvMCA9ICZyYXBpZGlvMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHUwOiBQb3dlclBDLDQwODBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMD47CisJCQlMMl8wOiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHUxOiBQb3dlclBDLDQwODBAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMT47CisJCQlMMl8xOiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHUyOiBQb3dlclBDLDQwODBAMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDI+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMj47CisJCQlMMl8yOiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHUzOiBQb3dlclBDLDQwODBAMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDM+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMz47CisJCQlMMl8zOiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHU0OiBQb3dlclBDLDQwODBANCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDQ+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfND47CisJCQlMMl80OiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHU1OiBQb3dlclBDLDQwODBANSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDU+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfNT47CisJCQlMMl81OiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHU2OiBQb3dlclBDLDQwODBANiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDY+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfNj47CisJCQlMMl82OiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCQljcHU3OiBQb3dlclBDLDQwODBANyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDc+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfNz47CisJCQlMMl83OiBsMi1jYWNoZSB7CisJCQl9OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCX07CisKKwlzb2M6IHNvY0BmZmUwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4ZiAweGZlMDAwMDAwIDB4MTAwMDAwMD47CisJCXJlZyA9IDwweGYgMHhmZTAwMDAwMCAwIDB4MDAwMDEwMDA+OworCisJCWNvcmVuZXQtbGF3QDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsY29yZW5ldC1sYXciOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQkJZnNsLG51bS1sYXdzID0gPDMyPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDgwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwweDEyIDI+OworCQl9OworCisJCW1lbW9yeS1jb250cm9sbGVyQDkwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4OTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDB4MTIgMj47CisJCX07CisKKwkJY29yZW5ldC1jZkAxODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxjb3JlbmV0LWNmIjsKKwkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CisJCQlmc2wsY2NmLW51bS1jc2RpZHMgPSA8MzI+OworCQkJZnNsLGNjZi1udW0tc25vb3BpZHMgPSA8MzI+OworCQl9OworCisJCWlvbW11QDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLXBhbXUiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDI0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCisJCWRtYTA6IGRtYUAxMDAzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MTAwMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MTAwMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxwNDA4MC1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDI4IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxwNDA4MC1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyOSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwzMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwzMSAyPjsKKwkJCX07CisJCX07CisKKwkJZG1hMTogZG1hQDEwMTMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgxMDEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgxMDExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MzIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMzIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM0IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM1IDI+OworCQkJfTsKKwkJfTsKKworCQlzcGlAMTEwMDAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaSI7CisJCQlyZWcgPSA8MHgxMTAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NTMgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZXNwaSxudW0tc3MtYml0cyA9IDw0PjsKKwkJCW1vZGUgPSAiY3B1IjsKKworCQkJZnNsX20yNXA4MEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlc3BpLWZsYXNoIjsKKwkJCQlyZWcgPSA8MD47CisJCQkJbGludXgsbW9kYWxpYXMgPSAiZnNsX20yNXA4MCI7CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NDAwMDAwMDA+OyAvKiBpbnB1dCBjbG9jayAqLworCQkJCXBhcnRpdGlvbkB1LWJvb3QgeworCQkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMTAwMDAwPjsKKwkJCQkJcmVhZC1vbmx5OworCQkJCX07CisJCQkJcGFydGl0aW9uQGtlcm5lbCB7CisJCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDA1MDAwMDA+OworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25AZHRiIHsKKwkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJcmVnID0gPDB4MDA2MDAwMDAgMHgwMDEwMDAwMD47CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCQkJCXBhcnRpdGlvbkBmcyB7CisJCQkJCWxhYmVsID0gImZpbGUgc3lzdGVtIjsKKwkJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDkwMDAwMD47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2RoYzogc2RoY0AxMTQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKKwkJCXJlZyA9IDwweDExNDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw0OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWkyY0AxMTgwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MTE4MDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MzggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWkyY0AxMTgxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MTE4MTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MzggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQkJZWVwcm9tQDUxIHsKKwkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQlyZWcgPSA8MHg1MT47CisJCQl9OworCQkJZWVwcm9tQDUyIHsKKwkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQlyZWcgPSA8MHg1Mj47CisJCQl9OworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczMyMzIiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMHgxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCX07CisJCX07CisKKwkJaTJjQDExOTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgxMTkwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwzOSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDExOTEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgxMTkxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwzOSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDExYzUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHgxMWM1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwzNiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEAxMWM2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4MTFjNjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MzYgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwyOiBzZXJpYWxAMTFkNTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDExZDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDM3IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMzogc2VyaWFsQDExZDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHgxMWQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwzNyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWdwaW8wOiBncGlvQDEzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwNDA4MC1ncGlvIjsKKwkJCXJlZyA9IDwweDEzMDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw1NSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJdXNiMDogdXNiQDIxMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwNDA4MC11c2IyLW1waCIsCisJCQkJCSJmc2wsbXBjODV4eC11c2IyLW1waCIsICJmc2wtdXNiMi1tcGgiOworCQkJcmVnID0gPDB4MjEwMDAwIDB4MTAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKworCQl1c2IxOiB1c2JAMjExMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLXVzYjItZHIiLAorCQkJCQkiZnNsLG1wYzg1eHgtdXNiMi1kciIsICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMTEwMDAgMHgxMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMHgyPjsKKwkJCWRyX21vZGUgPSAiaG9zdCI7CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKwl9OworCisJcmFwaWRpbzA6IHJhcGlkaW9AZmZlMGMwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIjsKKwkJcmVnID0gPDB4ZiAweGZlMGMwMDAwIDAgMHgyMDAwMD47CisJCXJhbmdlcyA9IDwwIDAgMHhmIDB4ZjUwMDAwMDAgMCAweDAxMDAwMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCS8qIGVycl9pcnEgYmVsbF9vdXRiX2lycSBiZWxsX2luYl9pcnEKKwkJCW1zZzFfdHhfaXJxIG1zZzFfcnhfaXJxCW1zZzJfdHhfaXJxIG1zZzJfcnhfaXJxICovCisJCWludGVycnVwdHMgPSA8MTYgMiA1NiAyIDU3IDIgNjAgMiA2MSAyIDYyIDIgNjMgMj47CisJfTsKKworCWxvY2FsYnVzQGZmZTEyNDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGYgMHhmZTEyNDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MjUgMj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZiAweGU4MDAwMDAwIDB4MDgwMDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDgwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZmUyMDAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxwNDA4MC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmUyMDAwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4ZTAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmIDB4ZjgwMDAwMDAgMHgwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MHgxZmNhMDU1PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MTYgMj47CisKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMCAwIDEgJm1waWMgNDAgMQorCQkJMDAwMCAwIDAgMiAmbXBpYyAxIDEKKwkJCTAwMDAgMCAwIDMgJm1waWMgMiAxCisJCQkwMDAwIDAgMCA0ICZtcGljIDMgMQorCQkJPjsKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4ZTAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGUwMDAwMDAwCisJCQkJICAwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDAwMTAwMDA+OworCQl9OworCX07CisKKwlwY2kxOiBwY2llQGZmZTIwMTAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHA0MDgwLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZTIwMTAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhlMDAwMDAwMCAweGMgMHgyMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGY4MDEwMDAwIDB4MCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDB4MWZjYTA1NT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAwIDAgMSAmbXBpYyA0MSAxCisJCQkwMDAwIDAgMCAyICZtcGljIDUgMQorCQkJMDAwMCAwIDAgMyAmbXBpYyA2IDEKKwkJCTAwMDAgMCAwIDQgJm1waWMgNyAxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhlMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4ZTAwMDAwMDAKKwkJCQkgIDAgMHgyMDAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDAxMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZmZlMjAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDQwODAtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZlMjAyMDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGUwMDAwMDAwIDB4YyAweDQwMDAwMDAwIDAgMHgyMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGYgMHhmODAyMDAwMCAwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MHgxZmNhMDU1PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDAgMCAxICZtcGljIDQyIDEKKwkJCTAwMDAgMCAwIDIgJm1waWMgOSAxCisJCQkwMDAwIDAgMCAzICZtcGljIDEwIDEKKwkJCTAwMDAgMCAwIDQgJm1waWMgMTEgMQorCQkJPjsKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4ZTAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGUwMDAwMDAwCisJCQkJICAwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDAwMTAwMDA+OworCQl9OworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMKaW5kZXggYWQ0MDJjNC4uZDJhZjMyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3JlZHdvb2QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yZWR3b29kLmR0cwpAQCAtMjI2LDYgKzIyNiw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzCmluZGV4IDMxNjA1ZWUuLmU1NzZlZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy93YXJwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAJCQkJZnBnYUAyLDQwMDAgewogCQkJCQljb21wYXRpYmxlID0gInBpa2EsZnBnYS1zZCI7Ci0JCQkJCXJlZyA9IDwweDAwMDAwMDAyIDB4MDAwMDQwMDAgMHgwMDAwMEEwMD47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAyIDB4MDAwMDQwMDAgMHgwMDAwNDAwMD47CiAJCQkJfTsKIAogCQkJCW5vckAwLDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dpaS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2lpLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzUyOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dpaS5kdHMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2lpLmR0cworICoKKyAqIE5pbnRlbmRvIFdpaSBwbGF0Zm9ybSBkZXZpY2UgdHJlZSBzb3VyY2UKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRoZSBHYW1lQ3ViZSBMaW51eCBUZWFtCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBBbGJlcnQgSGVycmFuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKy9kdHMtdjEvOworCisvKgorICogVGhpcyBpcyBjb21tZW50ZWQtb3V0IGZvciBub3cuCisgKiBVbnRpbCBhIGxhdGVyIHBhdGNoIGlzIG1lcmdlZCwgdGhlIGtlcm5lbCBjYW4gdXNlIG9ubHkgdGhlIGZpcnN0CisgKiBjb250aWd1b3VzIFJBTSByYW5nZSBhbmQgd2lsbCBCVUcoKSBpZiB0aGUgbWVtcmVzZXJ2ZSBpcyBvdXRzaWRlCisgKiB0aGF0IHJhbmdlLgorICovCisvKi9tZW1yZXNlcnZlLyAweDEwMDAwMDAwIDB4MDAwNDAwMDsqLwkvKiBEU1AgUkFNICovCisKKy8geworCW1vZGVsID0gIm5pbnRlbmRvLHdpaSI7CisJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyx3aWkiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAicm9vdD0vZGV2L21tY2JsazBwMiByb290d2FpdCB1ZGJnLWltbW9ydGFsIjsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMTgwMDAwMAkvKiBNRU0xIDI0TUIgMVQtU1JBTSAqLworCQkgICAgICAgMHgxMDAwMDAwMCAweDA0MDAwMDAwPjsJLyogTUVNMiA2NE1CIEdERFIzICovCisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyxicm9hZHdheUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NzI5MDAwMDAwPjsgLyogNzI5TUh6ICovCisJCQlidXMtZnJlcXVlbmN5ID0gPDI0MzAwMDAwMD47IC8qIDI0M01IeiBjb3JlLXRvLWJ1cyAzeCAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDYwNzUwMDAwPjsgLyogMjQzTUh6IC8gNCAqLworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCX07CisJfTsKKworCS8qIGRldmljZXMgY29udGFpbmVkIGluIHRoZSBob2xseXdvb2QgY2hpcHNldCAqLworCWhvbGx5d29vZCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxob2xseXdvb2QiOworICAgICAgICAgICAgICAgIHJhbmdlcyA9IDwweDBjMDAwMDAwIDB4MGMwMDAwMDAgMHgwMTAwMDAwMAorCQkJICAweDBkMDAwMDAwIDB4MGQwMDAwMDAgMHgwMDgwMDAwMAorCQkJICAweDBkODAwMDAwIDB4MGQ4MDAwMDAgMHgwMDgwMDAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQzA+OworCisJCXZpZGVvQDBjMDAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLXZpIiwKKwkJCQkJIm5pbnRlbmRvLGZsaXBwZXItdmkiOworCQkJcmVnID0gPDB4MGMwMDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4PjsKKwkJfTsKKworCQlwcm9jZXNzb3ItaW50ZXJmYWNlQDBjMDAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLXBpIiwKKwkJCQkJIm5pbnRlbmRvLGZsaXBwZXItcGkiOworCQkJcmVnID0gPDB4MGMwMDMwMDAgMHgxMDA+OworCisJCQlQSUMwOiBwaWMwIHsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAibmludGVuZG8sZmxpcHBlci1waWMiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJfTsKKwkJfTsKKworCQlkc3BAMGMwMDUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLWRzcCIsCisJCQkJCSJuaW50ZW5kbyxmbGlwcGVyLWRzcCI7CisJCQlyZWcgPSA8MHgwYzAwNTAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPDY+OworCQl9OworCisJCWdhbWVwYWQtY29udHJvbGxlckAwZDAwNjQwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGhvbGx5d29vZC1zaSIsCisJCQkJCSJuaW50ZW5kbyxmbGlwcGVyLXNpIjsKKwkJCXJlZyA9IDwweDBkMDA2NDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8Mz47CisJCX07CisKKwkJYXVkaW9AMGMwMDZjMDAgeworCQkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxob2xseXdvb2QtYWkiLAorCQkJCQkibmludGVuZG8sZmxpcHBlci1haSI7CisJCQlyZWcgPSA8MHgwZDAwNmMwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8Nj47CisJCX07CisKKwkJLyogRXh0ZXJuYWwgSW50ZXJmYWNlIGJ1cyAqLworCQlleGlAMGQwMDY4MDAgeworCQkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxob2xseXdvb2QtZXhpIiwKKwkJCQkJIm5pbnRlbmRvLGZsaXBwZXItZXhpIjsKKwkJCXJlZyA9IDwweDBkMDA2ODAwIDB4NDA+OworCQkJdmlydHVhbC1yZWcgPSA8MHgwZDAwNjgwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ+OworCQl9OworCisJCXVzYkAwZDA0MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGhvbGx5d29vZC11c2ItZWhjaSIsCisJCQkJCSJ1c2ItZWhjaSI7CisJCQlyZWcgPSA8MHgwZDA0MDAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDMT47CisJCX07CisKKwkJdXNiQDBkMDUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLXVzYi1vaGNpIiwKKwkJCQkJInVzYi1vaGNpIjsKKwkJCXJlZyA9IDwweDBkMDUwMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUMxPjsKKwkJfTsKKworCQl1c2JAMGQwNjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxob2xseXdvb2QtdXNiLW9oY2kiLAorCQkJCQkidXNiLW9oY2kiOworCQkJcmVnID0gPDB4MGQwNjAwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw2PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQzE+OworCQl9OworCisJCXNkQDBkMDcwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLXNkaGNpIiwKKwkJCQkJInNkaGNpIjsKKwkJCXJlZyA9IDwweDBkMDcwMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8Nz47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUMxPjsKKwkJfTsKKworCQlzZGlvQDBkMDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLXNkaGNpIiwKKwkJCQkJInNkaGNpIjsKKwkJCXJlZyA9IDwweDBkMDgwMDAwIDB4MjAwPjsKKwkJCWludGVycnVwdHMgPSA8OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUMxPjsKKwkJfTsKKworCQlpcGNAMGQwMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxob2xseXdvb2QtaXBjIjsKKwkJCXJlZyA9IDwweDBkMDAwMDAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwzMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUMxPjsKKwkJfTsKKworCQlQSUMxOiBwaWMxQDBkODAwMDMwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGhvbGx5d29vZC1waWMiOworCQkJcmVnID0gPDB4MGQ4MDAwMzAgMHgxMD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCWludGVycnVwdHMgPSA8MTQ+OworCQl9OworCisJCUdQSU86IGdwaW9AMGQ4MDAwYzAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGhvbGx5d29vZC1ncGlvIjsKKwkJCXJlZyA9IDwweDBkODAwMGMwIDB4NDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCisJCQkvKgorCQkJICogVGhpcyBpcyBjb21tZW50ZWQgb3V0IHdoaWxlIGEgc3RhbmRhcmQgYmluZGluZworCQkJICogZm9yIGkyYyBvdmVyIGdwaW8gaXMgZGVmaW5lZC4KKwkJCSAqLworCQkJLyoKKwkJCWkyYy12aWRlbyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkgICAgICAgIGNvbXBhdGlibGUgPSAiaTJjLWdwaW8iOworCisJCQkgICAgICAgIGdwaW9zID0gPCZHUElPIDE1IDAKKwkJCSAgICAgICAgICAgICAgICAgJkdQSU8gMTQgMD47CisJCQkgICAgICAgIGNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDA+OworCQkJCW5vLWNsb2NrLXN0cmV0Y2hpbmc7CisJCQkgICAgICAgIHNjbC1pcy1vcGVuLWRyYWluOworCQkJICAgICAgICBzZGEtaXMtb3Blbi1kcmFpbjsKKwkJCSAgICAgICAgc2RhLWVuZm9yY2UtZGlyOworCisJCQkgICAgICAgIEFWRTogYXVkaW8tdmlkZW8tZW5jb2RlckA3MCB7CisJCQkgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJuaW50ZW5kbyx3aWktYXVkaW8tdmlkZW8tZW5jb2RlciI7CisJCQkgICAgICAgICAgICAgICAgcmVnID0gPDB4NzA+OworCQkJICAgICAgICB9OworCQkJfTsKKwkJCSovCisJCX07CisKKwkJY29udHJvbEAwZDgwMDEwMCB7CisJCQljb21wYXRpYmxlID0gIm5pbnRlbmRvLGhvbGx5d29vZC1jb250cm9sIjsKKwkJCXJlZyA9IDwweDBkODAwMTAwIDB4MzAwPjsKKwkJfTsKKworCQlkaXNrQDBkODA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLWRpIjsKKwkJCXJlZyA9IDwweDBkODA2MDAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyPjsKKwkJfTsKKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy95b3NlbWl0ZS5kdHMKaW5kZXggMWZhM2NiNC4uNjQ5MjMyNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzCkBAIC0yODIsMjAgKzI4MiwxMCBAQAogCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwogCQkJZG1hLXJhbmdlcyA9IDwweDQyMDAwMDAwIDB4MCAweDAgMHgwIDB4MCAweDAgMHg4MDAwMDAwMD47CiAKLQkJCS8qIEJhbWJvbyBoYXMgYWxsIDQgSVJRIHBpbnMgdGllZCB0b2dldGhlciBwZXIgc2xvdCAqLwogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4MD47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAotCQkJCS8qIElEU0VMIDEgKi8KLQkJCQkweDgwMCAweDAgMHgwIDB4MCAmVUlDMCAweDFjIDB4OAotCi0JCQkJLyogSURTRUwgMiAqLwotCQkJCTB4MTAwMCAweDAgMHgwIDB4MCAmVUlDMCAweDFiIDB4OAotCi0JCQkJLyogSURTRUwgMyAqLwotCQkJCTB4MTgwMCAweDAgMHgwIDB4MCAmVUlDMCAweDFhIDB4OAotCi0JCQkJLyogSURTRUwgNCAqLwotCQkJCTB4MjAwMCAweDAgMHgwIDB4MCAmVUlDMCAweDE5IDB4OAorCQkJCS8qIElEU0VMIDEyICovCisJCQkJMHg2MDAwIDB4MCAweDAgMHgwICZVSUMwIDB4MTkgMHg4CiAJCQk+OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9nYW1lY3ViZS1oZWFkLlMgYi9hcmNoL3Bvd2VycGMvYm9vdC9nYW1lY3ViZS1oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhOWIyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2dhbWVjdWJlLWhlYWQuUwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9ib290L2dhbWVjdWJlLWhlYWQuUworICoKKyAqIE5pbnRlbmRvIEdhbWVDdWJlIGJvb3R3cmFwcGVyIGVudHJ5LgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgInBwY19hc20uaCIKKworLyoKKyAqIFRoZSBlbnRyeSBjb2RlIGRvZXMgbm8gYXNzdW1wdGlvbnMgcmVnYXJkaW5nOgorICogLSBpZiB0aGUgZGF0YSBhbmQgaW5zdHJ1Y3Rpb24gY2FjaGVzIGFyZSBlbmFibGVkIG9yIG5vdAorICogLSBpZiB0aGUgTU1VIGlzIGVuYWJsZWQgb3Igbm90CisgKgorICogV2UgZW5hYmxlIHRoZSBjYWNoZXMgaWYgbm90IGFscmVhZHkgZW5hYmxlZCwgZW5hYmxlIHRoZSBNTVUgd2l0aCBhbgorICogaWRlbnRpdHkgbWFwcGluZyBzY2hlbWUgYW5kIGp1bXAgdG8gdGhlIHN0YXJ0IGNvZGUuCisgKi8KKworCS50ZXh0CisKKwkuZ2xvYmwgX3ppbWFnZV9zdGFydAorX3ppbWFnZV9zdGFydDoKKworCS8qIHR1cm4gdGhlIE1NVSBvZmYgKi8KKwltZm1zcgk5CisJcmx3aW5tCTksIDksIDAsIH4oKDE8PDQpfCgxPDw1KSkgLyogTVNSX0RSfE1TUl9JUiAqLworCWJjbAkyMCwgMzEsIDFmCisxOgorCW1mbHIJOAorCWNscmx3aQk4LCA4LCAzCQkvKiBjb252ZXJ0IHRvIGEgcmVhbCBhZGRyZXNzICovCisJYWRkaQk4LCA4LCBfbW11X29mZiAtIDFiCisJbXRzcnIwCTgKKwltdHNycjEJOQorCXJmaQorX21tdV9vZmY6CisJLyogTU1VIGRpc2FibGVkICovCisKKwkvKiBzZXR1cCBCQVRzICovCisJaXN5bmMKKwlsaSAgICAgIDgsIDAKKwltdHNwcgkweDIxMCwgOAkvKiBJQkFUMFUgKi8KKwltdHNwcgkweDIxMiwgOAkvKiBJQkFUMVUgKi8KKwltdHNwcgkweDIxNCwgOAkvKiBJQkFUMlUgKi8KKwltdHNwcgkweDIxNiwgOAkvKiBJQkFUM1UgKi8KKwltdHNwcgkweDIxOCwgOAkvKiBEQkFUMFUgKi8KKwltdHNwcgkweDIxYSwgOAkvKiBEQkFUMVUgKi8KKwltdHNwcgkweDIxYywgOAkvKiBEQkFUMlUgKi8KKwltdHNwcgkweDIxZSwgOAkvKiBEQkFUM1UgKi8KKworCWxpCTgsIDB4MDFmZgkvKiBmaXJzdCAxNk1pQiAqLworCWxpCTksIDB4MDAwMgkvKiBydyAqLworCW10c3ByCTB4MjExLCA5CS8qIElCQVQwTCAqLworCW10c3ByCTB4MjEwLCA4CS8qIElCQVQwVSAqLworCW10c3ByCTB4MjE5LCA5CS8qIERCQVQwTCAqLworCW10c3ByCTB4MjE4LCA4CS8qIERCQVQwVSAqLworCisJbGlzCTgsIDB4MGMwMAkvKiBJL08gbWVtICovCisJb3JpCTgsIDgsIDB4M2ZmCS8qIDMyTWlCICovCisJbGlzCTksIDB4MGMwMAorCW9yaQk5LCA5LCAweDAwMmEJLyogdW5jYWNoZWQsIGd1YXJkZWQsIHJ3ICovCisJbXRzcHIJMHgyMWIsIDkJLyogREJBVDFMICovCisJbXRzcHIJMHgyMWEsIDgJLyogREJBVDFVICovCisKKwlsaXMJOCwgMHgwMTAwCS8qIG5leHQgOE1pQiAqLworCW9yaQk4LCA4LCAweDAwZmYJLyogOE1pQiAqLworCWxpcwk5LCAweDAxMDAKKwlvcmkJOSwgOSwgMHgwMDAyCS8qIHJ3ICovCisJbXRzcHIJMHgyMTUsIDkJLyogSUJBVDJMICovCisJbXRzcHIJMHgyMTQsIDgJLyogSUJBVDJVICovCisJbXRzcHIJMHgyMWQsIDkJLyogREJBVDJMICovCisJbXRzcHIJMHgyMWMsIDgJLyogREJBVDJVICovCisKKwkvKiBlbmFibGUgYW5kIGludmFsaWRhdGUgdGhlIGNhY2hlcyBpZiBub3QgYWxyZWFkeSBlbmFibGVkICovCisJbWZzcHIJOCwgMHgzZjAJLyogSElEMCAqLworCWFuZGkuCTAsIDgsICgxPDwxNSkJCS8qIEhJRDBfSUNFICovCisJYm5lCTFmCisJb3JpCTgsIDgsICgxPDwxNSl8KDE8PDExKQkvKiBISUQwX0lDRXxISUQwX0lDRkkqLworMToKKwlhbmRpLgkwLCA4LCAoMTw8MTQpCQkvKiBISUQwX0RDRSAqLworCWJuZQkxZgorCW9yaQk4LCA4LCAoMTw8MTQpfCgxPDwxMCkJLyogSElEMF9EQ0V8SElEMF9EQ0ZJKi8KKzE6CisJbXRzcHIJMHgzZjAsIDgJLyogSElEMCAqLworCWlzeW5jCisKKwkvKiBpbml0aWFsaXplIGFyZ3VtZW50cyAqLworCWxpCTMsIDAKKwlsaQk0LCAwCisJbGkJNSwgMAorCisJLyogdHVybiB0aGUgTU1VIG9uICovCisJYmNsCTIwLCAzMSwgMWYKKzE6CisJbWZscgk4CisJYWRkaQk4LCA4LCBfbW11X29uIC0gMWIKKwltZm1zcgk5CisJb3JpCTksIDksICgxPDw0KXwoMTw8NSkgLyogTVNSX0RSfE1TUl9JUiAqLworCW10c3JyMAk4CisJbXRzcnIxCTkKKwlzeW5jCisJcmZpCitfbW11X29uOgorCWIgX3ppbWFnZV9zdGFydF9saWIKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZ2FtZWN1YmUuYyBiL2FyY2gvcG93ZXJwYy9ib290L2dhbWVjdWJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhZTcwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9nYW1lY3ViZS5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvYm9vdC9nYW1lY3ViZS5jCisgKgorICogTmludGVuZG8gR2FtZUN1YmUgYm9vdHdyYXBwZXIgc3VwcG9ydAorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgIm9wcy5oIgorCisjaW5jbHVkZSAidWdlY29uLmgiCisKK0JTU19TVEFDSyg4MTkyKTsKKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUpCit7CisJdTMyIGhlYXBzaXplID0gMTYqMTAyNCoxMDI0IC0gKHUzMilfZW5kOworCisJc2ltcGxlX2FsbG9jX2luaXQoX2VuZCwgaGVhcHNpemUsIDMyLCA2NCk7CisJZmR0X2luaXQoX2R0Yl9zdGFydCk7CisKKwlpZiAodWdfcHJvYmUoKSkKKwkJY29uc29sZV9vcHMud3JpdGUgPSB1Z19jb25zb2xlX3dyaXRlOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYyBiL2FyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMmE2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5jCisgKgorICogVVNCIEdlY2tvIGJvb3R3cmFwcGVyIGNvbnNvbGUuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgQWxiZXJ0IEhlcnJhbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAib3BzLmgiCisKKworI2RlZmluZSBFWElfQ0xLXzMyTUhaICAgICAgICAgICA1CisKKyNkZWZpbmUgRVhJX0NTUiAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSAgIEVYSV9DU1JfQ0xLTUFTSyAgICAgICAoMHg3PDw0KQorI2RlZmluZSAgICAgRVhJX0NTUl9DTEtfMzJNSFogICAoRVhJX0NMS18zMk1IWjw8NCkKKyNkZWZpbmUgICBFWElfQ1NSX0NTTUFTSyAgICAgICAgKDB4Nzw8NykKKyNkZWZpbmUgICAgIEVYSV9DU1JfQ1NfMCAgICAgICAgKDB4MTw8NykgIC8qIENoaXAgU2VsZWN0IDAwMSAqLworCisjZGVmaW5lIEVYSV9DUiAgICAgICAgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgICBFWElfQ1JfVFNUQVJUICAgICAgICAgKDE8PDApCisjZGVmaW5lICAgRVhJX0NSX1dSSVRFCQkoMTw8MikKKyNkZWZpbmUgICBFWElfQ1JfUkVBRF9XUklURSAgICAgKDI8PDIpCisjZGVmaW5lICAgRVhJX0NSX1RMRU4obGVuKSAgICAgICgoKGxlbiktMSk8PDQpCisKKyNkZWZpbmUgRVhJX0RBVEEgICAgICAgICAgICAgICAgMHgxMAorCisKKy8qIHZpcnR1YWwgYWRkcmVzcyBiYXNlIGZvciBpbnB1dC9vdXRwdXQsIHJldHJpZXZlZCBmcm9tIGRldmljZSB0cmVlICovCitzdGF0aWMgdm9pZCAqdWdfaW9fYmFzZTsKKworCitzdGF0aWMgdTMyIHVnX2lvX3RyYW5zYWN0aW9uKHUzMiBpbikKK3sKKwl1MzIgKmNzcl9yZWcgPSB1Z19pb19iYXNlICsgRVhJX0NTUjsKKwl1MzIgKmRhdGFfcmVnID0gdWdfaW9fYmFzZSArIEVYSV9EQVRBOworCXUzMiAqY3JfcmVnID0gdWdfaW9fYmFzZSArIEVYSV9DUjsKKwl1MzIgY3NyLCBkYXRhLCBjcjsKKworCS8qIHNlbGVjdCAqLworCWNzciA9IEVYSV9DU1JfQ0xLXzMyTUhaIHwgRVhJX0NTUl9DU18wOworCW91dF9iZTMyKGNzcl9yZWcsIGNzcik7CisKKwkvKiByZWFkL3dyaXRlICovCisJZGF0YSA9IGluOworCW91dF9iZTMyKGRhdGFfcmVnLCBkYXRhKTsKKwljciA9IEVYSV9DUl9UTEVOKDIpIHwgRVhJX0NSX1JFQURfV1JJVEUgfCBFWElfQ1JfVFNUQVJUOworCW91dF9iZTMyKGNyX3JlZywgY3IpOworCisJd2hpbGUgKGluX2JlMzIoY3JfcmVnKSAmIEVYSV9DUl9UU1RBUlQpCisJCWJhcnJpZXIoKTsKKworCS8qIGRlc2VsZWN0ICovCisJb3V0X2JlMzIoY3NyX3JlZywgMCk7CisKKwlkYXRhID0gaW5fYmUzMihkYXRhX3JlZyk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgdWdfaXNfdHhmaWZvX3JlYWR5KHZvaWQpCit7CisJcmV0dXJuIHVnX2lvX3RyYW5zYWN0aW9uKDB4YzAwMDAwMDApICYgMHgwNDAwMDAwMDsKK30KKworc3RhdGljIHZvaWQgdWdfcmF3X3B1dGMoY2hhciBjaCkKK3sKKwl1Z19pb190cmFuc2FjdGlvbigweGIwMDAwMDAwIHwgKGNoIDw8IDIwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVnX3B1dGMoY2hhciBjaCkKK3sKKwlpbnQgY291bnQgPSAxNjsKKworCWlmICghdWdfaW9fYmFzZSkKKwkJcmV0dXJuOworCisJd2hpbGUgKCF1Z19pc190eGZpZm9fcmVhZHkoKSAmJiBjb3VudC0tKQorCQliYXJyaWVyKCk7CisJaWYgKGNvdW50ID49IDApCisJCXVnX3Jhd19wdXRjKGNoKTsKK30KKwordm9pZCB1Z19jb25zb2xlX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwljaGFyICpiID0gKGNoYXIgKilidWY7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJaWYgKCpiID09ICdcbicpCisJCQl1Z19wdXRjKCdccicpOworCQl1Z19wdXRjKCpiKyspOworCX0KK30KKworc3RhdGljIGludCB1Z19pc19hZGFwdGVyX3ByZXNlbnQodm9pZCkKK3sKKwlpZiAoIXVnX2lvX2Jhc2UpCisJCXJldHVybiAwOworCXJldHVybiB1Z19pb190cmFuc2FjdGlvbigweDkwMDAwMDAwKSA9PSAweDA0NzAwMDAwOworfQorCitzdGF0aWMgdm9pZCAqdWdfZ3JhYl9leGlfaW9fYmFzZSh2b2lkKQoreworCXUzMiB2OworCXZvaWQgKmRldnA7CisKKwlkZXZwID0gZmluZF9ub2RlX2J5X2NvbXBhdGlibGUoTlVMTCwgIm5pbnRlbmRvLGZsaXBwZXItZXhpIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0OworCWlmIChnZXRwcm9wKGRldnAsICJ2aXJ0dWFsLXJlZyIsICZ2LCBzaXplb2YodikpICE9IHNpemVvZih2KSkKKwkJZ290byBlcnJfb3V0OworCisJcmV0dXJuICh2b2lkICopdjsKKworZXJyX291dDoKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCAqdWdfcHJvYmUodm9pZCkKK3sKKwl2b2lkICpleGlfaW9fYmFzZTsKKwlpbnQgaTsKKworCWV4aV9pb19iYXNlID0gdWdfZ3JhYl9leGlfaW9fYmFzZSgpOworCWlmICghZXhpX2lvX2Jhc2UpCisJCXJldHVybiBOVUxMOworCisJLyogbG9vayBmb3IgYSB1c2JnZWNrbyBvbiBtZW1jYXJkIHNsb3RzIEEgYW5kIEIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXVnX2lvX2Jhc2UgPSBleGlfaW9fYmFzZSArIDB4MTQgKiBpOworCQlpZiAodWdfaXNfYWRhcHRlcl9wcmVzZW50KCkpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gMikKKwkJdWdfaW9fYmFzZSA9IE5VTEw7CisJcmV0dXJuIHVnX2lvX2Jhc2U7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdWdlY29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3Mzc1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3VnZWNvbi5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uaAorICoKKyAqIFVTQiBHZWNrbyBlYXJseSBib290d3JhcHBlciBjb25zb2xlLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1VHRUNPTl9ICisjZGVmaW5lIF9fVUdFQ09OX0gKKworZXh0ZXJuIHZvaWQgKnVnX3Byb2JlKHZvaWQpOworCitleHRlcm4gdm9pZCB1Z19wdXRjKGNoYXIgY2gpOworZXh0ZXJuIHZvaWQgdWdfY29uc29sZV93cml0ZShjb25zdCBjaGFyICpidWYsIGludCBsZW4pOworCisjZW5kaWYgLyogX19VR0VDT05fSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93aWktaGVhZC5TIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd2lpLWhlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ3OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd2lpLWhlYWQuUwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9ib290L3dpaS1oZWFkLlMKKyAqCisgKiBOaW50ZW5kbyBXaWkgYm9vdHdyYXBwZXIgZW50cnkuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgQWxiZXJ0IEhlcnJhbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSAicHBjX2FzbS5oIgorCisvKgorICogVGhlIGVudHJ5IGNvZGUgZG9lcyBubyBhc3N1bXB0aW9ucyByZWdhcmRpbmc6CisgKiAtIGlmIHRoZSBkYXRhIGFuZCBpbnN0cnVjdGlvbiBjYWNoZXMgYXJlIGVuYWJsZWQgb3Igbm90CisgKiAtIGlmIHRoZSBNTVUgaXMgZW5hYmxlZCBvciBub3QKKyAqIC0gaWYgdGhlIGhpZ2ggQkFUcyBhcmUgZW5hYmxlZCBvciBub3QKKyAqCisgKiBXZSBlbmFibGUgdGhlIGhpZ2ggQkFUcywgZW5hYmxlIHRoZSBjYWNoZXMgaWYgbm90IGFscmVhZHkgZW5hYmxlZCwKKyAqIGVuYWJsZSB0aGUgTU1VIHdpdGggYW4gaWRlbnRpdHkgbWFwcGluZyBzY2hlbWUgYW5kIGp1bXAgdG8gdGhlIHN0YXJ0IGNvZGUuCisgKi8KKworCS50ZXh0CisKKwkuZ2xvYmwgX3ppbWFnZV9zdGFydAorX3ppbWFnZV9zdGFydDoKKworCS8qIHR1cm4gdGhlIE1NVSBvZmYgKi8KKwltZm1zcgk5CisJcmx3aW5tCTksIDksIDAsIH4oKDE8PDQpfCgxPDw1KSkgLyogTVNSX0RSfE1TUl9JUiAqLworCWJjbAkyMCwgMzEsIDFmCisxOgorCW1mbHIJOAorCWNscmx3aQk4LCA4LCAzCQkvKiBjb252ZXJ0IHRvIGEgcmVhbCBhZGRyZXNzICovCisJYWRkaQk4LCA4LCBfbW11X29mZiAtIDFiCisJbXRzcnIwCTgKKwltdHNycjEJOQorCXJmaQorX21tdV9vZmY6CisJLyogTU1VIGRpc2FibGVkICovCisKKwkvKiBzZXR1cCBCQVRzICovCisJaXN5bmMKKwlsaSAgICAgIDgsIDAKKwltdHNwcgkweDIxMCwgOAkvKiBJQkFUMFUgKi8KKwltdHNwcgkweDIxMiwgOAkvKiBJQkFUMVUgKi8KKwltdHNwcgkweDIxNCwgOAkvKiBJQkFUMlUgKi8KKwltdHNwcgkweDIxNiwgOAkvKiBJQkFUM1UgKi8KKwltdHNwcgkweDIxOCwgOAkvKiBEQkFUMFUgKi8KKwltdHNwcgkweDIxYSwgOAkvKiBEQkFUMVUgKi8KKwltdHNwcgkweDIxYywgOAkvKiBEQkFUMlUgKi8KKwltdHNwcgkweDIxZSwgOAkvKiBEQkFUM1UgKi8KKworCW10c3ByCTB4MjMwLCA4CS8qIElCQVQ0VSAqLworCW10c3ByCTB4MjMyLCA4CS8qIElCQVQ1VSAqLworCW10c3ByCTB4MjM0LCA4CS8qIElCQVQ2VSAqLworCW10c3ByCTB4MjM2LCA4CS8qIElCQVQ3VSAqLworCW10c3ByCTB4MjM4LCA4CS8qIERCQVQ0VSAqLworCW10c3ByCTB4MjNhLCA4CS8qIERCQVQ1VSAqLworCW10c3ByCTB4MjNjLCA4CS8qIERCQVQ2VSAqLworCW10c3ByCTB4MjNlLCA4CS8qIERCQVQ3VSAqLworCisJbGkJOCwgMHgwMWZmCS8qIGZpcnN0IDE2TWlCICovCisJbGkJOSwgMHgwMDAyCS8qIHJ3ICovCisJbXRzcHIJMHgyMTEsIDkJLyogSUJBVDBMICovCisJbXRzcHIJMHgyMTAsIDgJLyogSUJBVDBVICovCisJbXRzcHIJMHgyMTksIDkJLyogREJBVDBMICovCisJbXRzcHIJMHgyMTgsIDgJLyogREJBVDBVICovCisKKwlsaXMJOCwgMHgwYzAwCS8qIEkvTyBtZW0gKi8KKwlvcmkJOCwgOCwgMHgzZmYJLyogMzJNaUIgKi8KKwlsaXMJOSwgMHgwYzAwCisJb3JpCTksIDksIDB4MDAyYQkvKiB1bmNhY2hlZCwgZ3VhcmRlZCwgcncgKi8KKwltdHNwcgkweDIxYiwgOQkvKiBEQkFUMUwgKi8KKwltdHNwcgkweDIxYSwgOAkvKiBEQkFUMVUgKi8KKworCWxpcwk4LCAweDAxMDAJLyogbmV4dCA4TWlCICovCisJb3JpCTgsIDgsIDB4MDBmZgkvKiA4TWlCICovCisJbGlzCTksIDB4MDEwMAorCW9yaQk5LCA5LCAweDAwMDIJLyogcncgKi8KKwltdHNwcgkweDIxNSwgOQkvKiBJQkFUMkwgKi8KKwltdHNwcgkweDIxNCwgOAkvKiBJQkFUMlUgKi8KKwltdHNwcgkweDIxZCwgOQkvKiBEQkFUMkwgKi8KKwltdHNwcgkweDIxYywgOAkvKiBEQkFUMlUgKi8KKworCWxpcwk4LCAweDEwMDAJLyogTUVNMiAqLworCW9yaQk4LCA4LCAweDA3ZmYJLyogNjRNaUIgKi8KKwlsaXMJOSwgMHgxMDAwCisJb3JpCTksIDksIDB4MDAwMgkvKiBydyAqLworCW10c3ByCTB4MjE2LCA4CS8qIElCQVQzVSAqLworCW10c3ByCTB4MjE3LCA5CS8qIElCQVQzTCAqLworCW10c3ByCTB4MjFlLCA4CS8qIERCQVQzVSAqLworCW10c3ByCTB4MjFmLCA5CS8qIERCQVQzTCAqLworCisJLyogZW5hYmxlIHRoZSBoaWdoIEJBVHMgKi8KKwltZnNwcgk4LCAweDNmMwkvKiBISUQ0ICovCisJb3Jpcwk4LCA4LCAweDAyMDAKKwltdHNwcgkweDNmMywgOAkvKiBISUQ0ICovCisKKwkvKiBlbmFibGUgYW5kIGludmFsaWRhdGUgdGhlIGNhY2hlcyBpZiBub3QgYWxyZWFkeSBlbmFibGVkICovCisJbWZzcHIJOCwgMHgzZjAJLyogSElEMCAqLworCWFuZGkuCTAsIDgsICgxPDwxNSkJCS8qIEhJRDBfSUNFICovCisJYm5lCTFmCisJb3JpCTgsIDgsICgxPDwxNSl8KDE8PDExKQkvKiBISUQwX0lDRXxISUQwX0lDRkkqLworMToKKwlhbmRpLgkwLCA4LCAoMTw8MTQpCQkvKiBISUQwX0RDRSAqLworCWJuZQkxZgorCW9yaQk4LCA4LCAoMTw8MTQpfCgxPDwxMCkJLyogSElEMF9EQ0V8SElEMF9EQ0ZJKi8KKzE6CisJbXRzcHIJMHgzZjAsIDgJLyogSElEMCAqLworCWlzeW5jCisKKwkvKiBpbml0aWFsaXplIGFyZ3VtZW50cyAqLworCWxpCTMsIDAKKwlsaQk0LCAwCisJbGkJNSwgMAorCisJLyogdHVybiB0aGUgTU1VIG9uICovCisJYmNsCTIwLCAzMSwgMWYKKzE6CisJbWZscgk4CisJYWRkaQk4LCA4LCBfbW11X29uIC0gMWIKKwltZm1zcgk5CisJb3JpCTksIDksICgxPDw0KXwoMTw8NSkgLyogTVNSX0RSfE1TUl9JUiAqLworCW10c3JyMAk4CisJbXRzcnIxCTkKKwlzeW5jCisJcmZpCitfbW11X29uOgorCS8qIHR1cm4gb24gdGhlIGZyb250IGJsdWUgbGVkIChha2E6IHlheSEgd2UgZ290IGhlcmUhKSAqLworCWxpcwk4LCAweDBkMDAKKwlvcmkJOCwgOCwgMHgwMGMwCisJbHd6CTksIDAoOCkKKwlvcmkJOSwgOSwgMHgyMAorCXN0dwk5LCAwKDgpCisKKwliIF96aW1hZ2Vfc3RhcnRfbGliCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3dpaS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd2lpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViYWVjMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dpaS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogYXJjaC9wb3dlcnBjL2Jvb3Qvd2lpLmMKKyAqCisgKiBOaW50ZW5kbyBXaWkgYm9vdHdyYXBwZXIgc3VwcG9ydAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgIm9wcy5oIgorCisjaW5jbHVkZSAidWdlY29uLmgiCisKK0JTU19TVEFDSyg4MTkyKTsKKworI2RlZmluZSBIV19SRUcoeCkJCSgodm9pZCAqKSh4KSkKKworI2RlZmluZSBFWElfQ1RSTAkJSFdfUkVHKDB4MGQ4MDAwNzApCisjZGVmaW5lIEVYSV9DVFJMX0VOQUJMRQkJKDE8PDApCisKKyNkZWZpbmUgTUVNMl9UT1AJCSgweDEwMDAwMDAwICsgNjQqMTAyNCoxMDI0KQorI2RlZmluZSBGSVJNV0FSRV9ERUZBVUxUX1NJWkUJKDEyKjEwMjQqMTAyNCkKKworCitzdHJ1Y3QgbWlwY19pbmZvaGRyIHsKKwljaGFyIG1hZ2ljWzNdOworCXU4IHZlcnNpb247CisJdTMyIG1lbTJfYm91bmRhcnk7CisJdTMyIGlwY19pbjsKKwlzaXplX3QgaXBjX2luX3NpemU7CisJdTMyIGlwY19vdXQ7CisJc2l6ZV90IGlwY19vdXRfc2l6ZTsKK307CisKK3N0YXRpYyBpbnQgbWlwY19jaGVja19hZGRyZXNzKHUzMiBwYSkKK3sKKwkvKiBvbmx5IE1FTTIgYWRkcmVzc2VzICovCisJaWYgKHBhIDwgMHgxMDAwMDAwMCB8fCBwYSA+IDB4MTQwMDAwMDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG1pcGNfaW5mb2hkciAqbWlwY19nZXRfaW5mb2hkcih2b2lkKQoreworCXN0cnVjdCBtaXBjX2luZm9oZHIgKipoZHJwLCAqaGRyOworCisJLyogJ21pbmknIGhlYWRlciBwb2ludGVyIGlzIHRoZSBsYXN0IHdvcmQgb2YgTUVNMiBtZW1vcnkgKi8KKwloZHJwID0gKHN0cnVjdCBtaXBjX2luZm9oZHIgKiopMHgxM2ZmZmZmYzsKKwlpZiAobWlwY19jaGVja19hZGRyZXNzKCh1MzIpaGRycCkpIHsKKwkJcHJpbnRmKCJtaW5pOiBpbnZhbGlkIGhkcnAgJTA4WFxuIiwgKHUzMiloZHJwKTsKKwkJaGRyID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJaGRyID0gKmhkcnA7CisJaWYgKG1pcGNfY2hlY2tfYWRkcmVzcygodTMyKWhkcikpIHsKKwkJcHJpbnRmKCJtaW5pOiBpbnZhbGlkIGhkciAlMDhYXG4iLCAodTMyKWhkcik7CisJCWhkciA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobWVtY21wKGhkci0+bWFnaWMsICJJUEMiLCAzKSkgeworCQlwcmludGYoIm1pbmk6IGludmFsaWQgbWFnaWNcbiIpOworCQloZHIgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gaGRyOworfQorCitzdGF0aWMgaW50IG1pcGNfZ2V0X21lbTJfYm91bmRhcnkodTMyICptZW0yX2JvdW5kYXJ5KQoreworCXN0cnVjdCBtaXBjX2luZm9oZHIgKmhkcjsKKwlpbnQgZXJyb3I7CisKKwloZHIgPSBtaXBjX2dldF9pbmZvaGRyKCk7CisJaWYgKCFoZHIpIHsKKwkJZXJyb3IgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1pcGNfY2hlY2tfYWRkcmVzcyhoZHItPm1lbTJfYm91bmRhcnkpKSB7CisJCXByaW50ZigibWluaTogaW52YWxpZCBtZW0yX2JvdW5kYXJ5ICUwOFhcbiIsCisJCSAgICAgICBoZHItPm1lbTJfYm91bmRhcnkpOworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwkqbWVtMl9ib3VuZGFyeSA9IGhkci0+bWVtMl9ib3VuZGFyeTsKKwllcnJvciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycm9yOworCit9CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2ZpeHVwcyh2b2lkKQoreworCXZvaWQgKm1lbTsKKwl1MzIgcmVnWzRdOworCXUzMiBtZW0yX2JvdW5kYXJ5OworCWludCBsZW47CisJaW50IGVycm9yOworCisJbWVtID0gZmluZGRldmljZSgiL21lbW9yeSIpOworCWlmICghbWVtKQorCQlmYXRhbCgiQ2FuJ3QgZmluZCBtZW1vcnkgbm9kZVxuIik7CisKKwkvKiB0d28gcmFuZ2VzIG9mIChhZGRyZXNzLCBzaXplKSB3b3JkcyAqLworCWxlbiA9IGdldHByb3AobWVtLCAicmVnIiwgcmVnLCBzaXplb2YocmVnKSk7CisJaWYgKGxlbiAhPSBzaXplb2YocmVnKSkgeworCQkvKiBub3RoaW5nIHRvIGRvICovCisJCWdvdG8gb3V0OworCX0KKworCS8qIHJldHJpZXZlIE1FTTIgYm91bmRhcnkgZnJvbSAnbWluaScgKi8KKwllcnJvciA9IG1pcGNfZ2V0X21lbTJfYm91bmRhcnkoJm1lbTJfYm91bmRhcnkpOworCWlmIChlcnJvcikgeworCQkvKiBpZiB0aGF0IGZhaWxzIHVzZSBhIHNhbmUgdmFsdWUgKi8KKwkJbWVtMl9ib3VuZGFyeSA9IE1FTTJfVE9QIC0gRklSTVdBUkVfREVGQVVMVF9TSVpFOworCX0KKworCWlmIChtZW0yX2JvdW5kYXJ5ID4gcmVnWzJdICYmIG1lbTJfYm91bmRhcnkgPCByZWdbMl0gKyByZWdbM10pIHsKKwkJcmVnWzNdID0gbWVtMl9ib3VuZGFyeSAtIHJlZ1syXTsKKwkJcHJpbnRmKCJ0b3Agb2YgTUVNMiBAICUwOFhcbiIsIHJlZ1syXSArIHJlZ1szXSk7CisJCXNldHByb3AobWVtLCAicmVnIiwgcmVnLCBzaXplb2YocmVnKSk7CisJfQorCitvdXQ6CisJcmV0dXJuOworfQorCit2b2lkIHBsYXRmb3JtX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSkKK3sKKwl1MzIgaGVhcHNpemUgPSAyNCoxMDI0KjEwMjQgLSAodTMyKV9lbmQ7CisKKwlzaW1wbGVfYWxsb2NfaW5pdChfZW5kLCBoZWFwc2l6ZSwgMzIsIDY0KTsKKwlmZHRfaW5pdChfZHRiX3N0YXJ0KTsKKworCS8qCisJICogJ21pbmknIGJvb3RzIHRoZSBCcm9hZHdheSBwcm9jZXNzb3Igd2l0aCBFWEkgZGlzYWJsZWQuCisJICogV2UgbmVlZCBpdCBlbmFibGVkIGJlZm9yZSBwcm9iaW5nIGZvciB0aGUgVVNCIEdlY2tvLgorCSAqLworCW91dF9iZTMyKEVYSV9DVFJMLCBpbl9iZTMyKEVYSV9DVFJMKSB8IEVYSV9DVFJMX0VOQUJMRSk7CisKKwlpZiAodWdfcHJvYmUoKSkKKwkJY29uc29sZV9vcHMud3JpdGUgPSB1Z19jb25zb2xlX3dyaXRlOworCisJcGxhdGZvcm1fb3BzLmZpeHVwcyA9IHBsYXRmb3JtX2ZpeHVwczsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlciBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKaW5kZXggYWM5ZTlhNS4uMzkwNTEyYSAxMDA3NTUKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCkBAIC0yMzAsNiArMjMwLDEwIEBACiAgICAgbGlua19hZGRyZXNzPScweDE0MDAwMDAnCiAgICAgcGxhdGZvcm1vPSRvYmplY3QvY3Vib290LTg1eHgubwogICAgIDs7CitnYW1lY3ViZXx3aWkpCisgICAgbGlua19hZGRyZXNzPScweDYwMDAwMCcKKyAgICBwbGF0Zm9ybW89IiRvYmplY3QvJHBsYXRmb3JtLWhlYWQubyAkb2JqZWN0LyRwbGF0Zm9ybS5vIgorICAgIDs7CiBlc2FjCiAKIHZtej0iJHRtcGRpci9gYmFzZW5hbWUgXCIka2VybmVsXCJgLiRleHQiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKaW5kZXggMjg5ODA3My4uNmNkMmNkNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMjE4LDcgKzIxOCw3IEBACiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NTUlPX05WUkFNPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCmluZGV4IGUxOTlkMWMuLmE2YTM3NjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMjE4LDcgKzIxOCw3IEBACiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NTUlPX05WUkFNPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCmluZGV4IDNiMGZiZmIuLjE5NzVkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMjE5LDcgKzIxOSw3IEBACiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NTUlPX05WUkFNPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKQEAgLTExMjQsNyArMTEyNCw3IEBACiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CiAjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfTlZSQU09eQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKaW5kZXggZmM5MDU5Mi4uODI2YTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtNzU3LDcgKzc1Nyw3IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX0FDRU5JQz15CitDT05GSUdfQUNFTklDPW0KIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKQEAgLTc5NCw4ICs3OTQsOCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2dhbWVjdWJlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2dhbWVjdWJlX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJlMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZ2FtZWN1YmVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA2MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjOAorIyBTdW4gTm92IDIyIDIxOjA3OjMwIDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX1BQQ19CT09LM1NfMzI9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorQ09ORklHX1BQQ19QRVJGX0NUUlM9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1nY24iCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CitDT05GSUdfUEVSRl9DT1VOVEVSUz15CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRDZ4eD15CisjIENPTkZJR19MSU5LU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE9SQ0VOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzc0NDhIUEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19IT0xMWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUFJQTUMyODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DMksgaXMgbm90IHNldAorQ09ORklHX0dBTUVDVUJFX0NPTU1PTj15CitDT05GSUdfVVNCR0VDS09fVURCRz15CitDT05GSUdfRkxJUFBFUl9QSUM9eQorQ09ORklHX0dBTUVDVUJFPXkKKyMgQ09ORklHX1dJSSBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworQ09ORklHX0FEVkFOQ0VEX09QVElPTlM9eQorIyBDT05GSUdfTE9XTUVNX1NJWkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorIyBDT05GSUdfUEFHRV9PRkZTRVRfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorIyBDT05GSUdfS0VSTkVMX1NUQVJUX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorIyBDT05GSUdfVEFTS19TSVpFX0JPT0wgaXMgbm90IHNldAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCisjIENPTkZJR19DT05TSVNURU5UX1NJWkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0pPWURFVj15CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0pPWVNUSUNLPXkKKyMgQ09ORklHX0pPWVNUSUNLX0FOQUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19BM0QgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfQURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0NPQlJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0dGMksgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfR1JJUCBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19HUklQX01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0dVSUxMRU1PVCBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19JTlRFUkFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19TSURFV0lOREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1RNREMgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkIgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1NUSU5HRVIgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfVFdJREpPWSBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19aSEVOSFVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0pPWURVTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9TRVFVRU5DRVI9eQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0dFTkVSSUM9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9eQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0VSX01BWF9UUkFDRT15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfR0VORVJJQ19UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKK0NPTkZJR19CT09UX1RSQUNFUj15CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFfQVBJX0RFQlVHPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQ1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRUFSTFlfREVCVUdfVVNCR0VDS089eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcKaW5kZXggZjkyNWM1NS4uNzY5ODJjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcKQEAgLTcxNCw4ICs3MTQsOCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCAyNTI0MDE4Li43YjM4MDRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC0zMDQsMTEgKzMwNCwxMSBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQorQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAorQ09ORklHX0haPTEwMAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKQEAgLTk4MCw3ICs5ODAsNyBAQAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUM9bQogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQpAQCAtMTAyMyw4ICsxMDIzLDggQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLUNPTkZJR19UUj15Ci1DT05GSUdfSUJNT0w9eQorIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldAogIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAogIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAogCkBAIC0xODYzLDcgKzE4NjMsNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQorQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKaW5kZXggMThhZjQ2MC4uODE5NWYxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCkBAIC0xMDA4LDggKzEwMDgsOCBAQAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19UUj15Ci1DT05GSUdfSUJNT0w9eQorIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldAogIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAogIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBjNTY4MzI5Li5jYTlmZjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMjMwLDExICsyMzAsMTEgQEAKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CkBAIC03OTYsNyArNzk2LDcgQEAKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX0FDRU5JQz15CitDT05GSUdfQUNFTklDPW0KIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKQEAgLTgzNCw4ICs4MzQsOCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiAKQEAgLTE0OTQsNyArMTQ5NCw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15CitDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy93aWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2lpX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzg2ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2lpX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0MDYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzgKKyMgU3VuIE5vdiAyMiAyMDozNzoyMSAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii13aWkiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CitDT05GSUdfUEVSRl9DT1VOVEVSUz15CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ2eHg9eQorIyBDT05GSUdfTElOS1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1RPUkNFTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM3NDQ4SFBDMiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSE9MTFkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BSUE1DMjgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQzJLIGlzIG5vdCBzZXQKK0NPTkZJR19HQU1FQ1VCRV9DT01NT049eQorQ09ORklHX1VTQkdFQ0tPX1VEQkc9eQorQ09ORklHX0ZMSVBQRVJfUElDPXkKKyMgQ09ORklHX0dBTUVDVUJFIGlzIG5vdCBzZXQKK0NPTkZJR19ITFdEX1BJQz15CitDT05GSUdfU1RBUkxFVF9NSU5JPXkKK0NPTkZJR19XSUk9eQorIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKK0NPTkZJR19BRFZBTkNFRF9PUFRJT05TPXkKKyMgQ09ORklHX0xPV01FTV9TSVpFX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKKyMgQ09ORklHX1BBR0VfT0ZGU0VUX0JPT0wgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKKyMgQ09ORklHX0tFUk5FTF9TVEFSVF9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKKyMgQ09ORklHX1RBU0tfU0laRV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorIyBDT05GSUdfQ09OU0lTVEVOVF9TSVpFX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD15CitDT05GSUdfQlRfTDJDQVA9eQorIyBDT05GSUdfQlRfU0NPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9SRkNPTU09eQorIyBDT05GSUdfQlRfUkZDT01NX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfQlRfQk5FUD15CitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorIyBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVIgaXMgbm90IHNldAorQ09ORklHX0JUX0hJRFA9eQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKKyMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTE9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorQ09ORklHX0I0Mz15CitDT05GSUdfQjQzX1NESU89eQorQ09ORklHX0I0M19QSU89eQorIyBDT05GSUdfQjQzX1BIWV9MUCBpcyBub3Qgc2V0CitDT05GSUdfQjQzX0RFQlVHPXkKKyMgQ09ORklHX0I0M19GT1JDRV9QSU8gaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTY0MAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAorQ09ORklHX0lOUFVUX0pPWURFVj15CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQorIyBDT05GSUdfSk9ZU1RJQ0tfQU5BTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0EzRCBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19BREkgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfQ09CUkEgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfR0YySyBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19HUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0dSSVBfTVAgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX0lOVEVSQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfVE1EQyBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19JRk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19NQUdFTExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19TUEFDRU9SQiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19TUEFDRUJBTEwgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfU1RJTkdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19UV0lESk9ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pPWVNUSUNLX1pIRU5IVUEgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1VJTlBVVD15CisjIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0I9eQorQ09ORklHX1NTQl9CTE9DS0lPPXkKK0NPTkZJR19TU0JfU0RJT0hPU1RfUE9TU0lCTEU9eQorQ09ORklHX1NTQl9TRElPSE9TVD15CisjIENPTkZJR19TU0JfU0lMRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfREVCVUc9eQorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSPXkKKyMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfV0FDT009bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1NESENJPXkKKyMgQ09ORklHX01NQ19TREhDSV9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfUExURk0gaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1dCU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9HRU5FUklDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPW0KKyMgQ09ORklHX0NVU0UgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PXkKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0VSX01BWF9UUkFDRT15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfR0VORVJJQ19UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKK0NPTkZJR19CT09UX1RSQUNFUj15CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1BX0FQSV9ERUJVRz15CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXN5bmNfdHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc3luY190eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMmRjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXN5bmNfdHguaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZy4KKyAqCisgKiBBdXRob3I6IFl1cmkgVGlraG9ub3YgPHl1ckBlbWNyYWZ0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0FTWU5DX1RYX0hfCisjZGVmaW5lIF9BU01fUE9XRVJQQ19BU1lOQ19UWF9IXworCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BlKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKK2V4dGVybiBzdHJ1Y3QgZG1hX2NoYW4gKgorcHBjNDQwc3BlX2FzeW5jX3R4X2ZpbmRfYmVzdF9jaGFubmVsKGVudW0gZG1hX3RyYW5zYWN0aW9uX3R5cGUgY2FwLAorCXN0cnVjdCBwYWdlICoqZHN0X2xzdCwgaW50IGRzdF9jbnQsIHN0cnVjdCBwYWdlICoqc3JjX2xzdCwKKwlpbnQgc3JjX2NudCwgc2l6ZV90IHNyY19zeik7CisKKyNkZWZpbmUgYXN5bmNfdHhfZmluZF9jaGFubmVsKGRlcCwgY2FwLCBkc3RfbHN0LCBkc3RfY250LCBzcmNfbHN0LCBcCisJCQkgICAgICBzcmNfY250LCBzcmNfc3opIFwKKwlwcGM0NDBzcGVfYXN5bmNfdHhfZmluZF9iZXN0X2NoYW5uZWwoY2FwLCBkc3RfbHN0LCBkc3RfY250LCBzcmNfbHN0LCBcCisJCQkJCSAgICAgc3JjX2NudCwgc3JjX3N6KQorI2Vsc2UKKworI2RlZmluZSBhc3luY190eF9maW5kX2NoYW5uZWwoZGVwLCB0eXBlLCBkc3QsIGRzdF9jb3VudCwgc3JjLCBzcmNfY291bnQsIGxlbikgXAorCV9fYXN5bmNfdHhfZmluZF9jaGFubmVsKGRlcCwgdHlwZSkKKworc3RydWN0IGRtYV9jaGFuICoKK19fYXN5bmNfdHhfZmluZF9jaGFubmVsKHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQsCisJCQllbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlIHR4X3R5cGUpOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggNjRlMWZkYy4uMmMxNTIxMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9idWcuaApAQCAtNjgsNyArNjgsNyBAQAogCQlfRU1JVF9CVUdfRU5UUlkJCQkJCVwKIAkJOiA6ICJpIiAoX19GSUxFX18pLCAiaSIgKF9fTElORV9fKSwJCVwKIAkJICAgICJpIiAoMCksICJpIiAgKHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KSkpOwlcCi0JZm9yKDs7KSA7CQkJCQkJXAorCXVucmVhY2hhYmxlKCk7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBCVUdfT04oeCkgZG8gewkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaAppbmRleCAyNGQ3OWUzLi4wODM1ZWI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbS5oCkBAIC0zLDggKzMsNDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKKy8qCisgKiBVU0IgQ29udHJvbGxlciBwcmFtIGNvbW1vbiB0byBRRSBhbmQgQ1BNLgorICovCitzdHJ1Y3QgdXNiX2N0bHIgeworCXU4CXVzYl91c21vZDsKKwl1OAl1c2JfdXNhZHI7CisJdTgJdXNiX3VzY29tOworCXU4CXJlczFbMV07CisJX19iZTE2CXVzYl91c2VwWzRdOworCXU4CXJlczJbNF07CisJX19iZTE2CXVzYl91c2JlcjsKKwl1OAlyZXMzWzJdOworCV9fYmUxNgl1c2JfdXNibXI7CisJdTgJcmVzNFsxXTsKKwl1OAl1c2JfdXNiczsKKwkvKiBGaWVsZHMgZG93biBiZWxvdyBhcmUgUUUtb25seSAqLworCV9fYmUxNgl1c2JfdXNzZnQ7CisJdTgJcmVzNVsyXTsKKwlfX2JlMTYJdXNiX3VzZnJuOworCXU4CXJlczZbMHgyMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEZ1bmN0aW9uIGNvZGUgYml0cywgdXN1YWxseSBnZW5lcmljIHRvIGRldmljZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BNMQorI2RlZmluZSBDUE1GQ1JfR0JMCSgodV9jaGFyKTB4MDApCS8qIEZsYWcgZG9lc24ndCBleGlzdCBpbiBDUE0xICovCisjZGVmaW5lIENQTUZDUl9UQzIJKCh1X2NoYXIpMHgwMCkJLyogRmxhZyBkb2Vzbid0IGV4aXN0IGluIENQTTEgKi8KKyNkZWZpbmUgQ1BNRkNSX0RUQgkoKHVfY2hhcikweDAwKQkvKiBGbGFnIGRvZXNuJ3QgZXhpc3QgaW4gQ1BNMSAqLworI2RlZmluZSBDUE1GQ1JfQkRCCSgodV9jaGFyKTB4MDApCS8qIEZsYWcgZG9lc24ndCBleGlzdCBpbiBDUE0xICovCisjZWxzZQorI2RlZmluZSBDUE1GQ1JfR0JMCSgodV9jaGFyKTB4MjApCS8qIFNldCBtZW1vcnkgc25vb3BpbmcgKi8KKyNkZWZpbmUgQ1BNRkNSX1RDMgkoKHVfY2hhcikweDA0KQkvKiBUcmFuc2ZlciBjb2RlIDIgdmFsdWUgKi8KKyNkZWZpbmUgQ1BNRkNSX0RUQgkoKHVfY2hhcikweDAyKQkvKiBVc2UgbG9jYWwgYnVzIGZvciBkYXRhIHdoZW4gc2V0ICovCisjZGVmaW5lIENQTUZDUl9CREIJKCh1X2NoYXIpMHgwMSkJLyogVXNlIGxvY2FsIGJ1cyBmb3IgQkQgd2hlbiBzZXQgKi8KKyNlbmRpZgorI2RlZmluZSBDUE1GQ1JfRUIJKCh1X2NoYXIpMHgxMCkJLyogU2V0IGJpZyBlbmRpYW4gYnl0ZSBvcmRlciAqLworCiAvKiBPcGNvZGVzIGNvbW1vbiB0byBDUE0xIGFuZCBDUE0yCiAqLwogI2RlZmluZSBDUE1fQ1JfSU5JVF9UUlgJCSgodXNob3J0KTB4MDAwMCkKQEAgLTkzLDEzICsxMzIsNTYgQEAKICNkZWZpbmUgQkRfSTJDX1NUQVJUCQkoMHgwNDAwKQogCiBpbnQgY3BtX211cmFtX2luaXQodm9pZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUE0pIHx8IGRlZmluZWQoQ09ORklHX1FVSUNDX0VOR0lORSkKIHVuc2lnbmVkIGxvbmcgY3BtX211cmFtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbik7CiBpbnQgY3BtX211cmFtX2ZyZWUodW5zaWduZWQgbG9uZyBvZmZzZXQpOwogdW5zaWduZWQgbG9uZyBjcG1fbXVyYW1fYWxsb2NfZml4ZWQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIF9faW9tZW0gKmNwbV9tdXJhbV9hZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIHVuc2lnbmVkIGxvbmcgY3BtX211cmFtX29mZnNldCh2b2lkIF9faW9tZW0gKmFkZHIpOwogZG1hX2FkZHJfdCBjcG1fbXVyYW1fZG1hKHZvaWQgX19pb21lbSAqYWRkcik7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNwbV9tdXJhbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFsaWduKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcG1fbXVyYW1fZnJlZSh1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNwbV9tdXJhbV9hbGxvY19maXhlZCh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqY3BtX211cmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcG1fbXVyYW1fb2Zmc2V0KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGNwbV9tdXJhbV9kbWEodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0NQTSkgfHwgZGVmaW5lZChDT05GSUdfUVVJQ0NfRU5HSU5FKSAqLworCisjaWZkZWYgQ09ORklHX0NQTQogaW50IGNwbV9jb21tYW5kKHUzMiBjb21tYW5kLCB1OCBvcGNvZGUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGNwbV9jb21tYW5kKHUzMiBjb21tYW5kLCB1OCBvcGNvZGUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisjZW5kaWYgLyogQ09ORklHX0NQTSAqLwogCiBpbnQgY3BtMl9ncGlvY2hpcF9hZGQzMihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0xLmgKaW5kZXggNzY4NWZmZC4uODFiMDExOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtMS5oCkBAIC00NzgsNTEgKzQ3OCw2IEBACiAJY2hhcglyZXMyWzJdOwkvKiBSZXNlcnZlZCAqLwogfSBpaWNfdDsKIAotLyogU1BJIHBhcmFtZXRlciBSQU0uCi0qLwotdHlwZWRlZiBzdHJ1Y3Qgc3BpIHsKLQl1c2hvcnQJc3BpX3JiYXNlOwkvKiBSeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KLQl1c2hvcnQJc3BpX3RiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KLQl1X2NoYXIJc3BpX3JmY3I7CS8qIFJ4IGZ1bmN0aW9uIGNvZGUgKi8KLQl1X2NoYXIJc3BpX3RmY3I7CS8qIFR4IGZ1bmN0aW9uIGNvZGUgKi8KLQl1c2hvcnQJc3BpX21yYmxyOwkvKiBNYXggcmVjZWl2ZSBidWZmZXIgbGVuZ3RoICovCi0JdWludAlzcGlfcnN0YXRlOwkvKiBJbnRlcm5hbCAqLwotCXVpbnQJc3BpX3JkcDsJLyogSW50ZXJuYWwgKi8KLQl1c2hvcnQJc3BpX3JicHRyOwkvKiBJbnRlcm5hbCAqLwotCXVzaG9ydAlzcGlfcmJjOwkvKiBJbnRlcm5hbCAqLwotCXVpbnQJc3BpX3J4dG1wOwkvKiBJbnRlcm5hbCAqLwotCXVpbnQJc3BpX3RzdGF0ZTsJLyogSW50ZXJuYWwgKi8KLQl1aW50CXNwaV90ZHA7CS8qIEludGVybmFsICovCi0JdXNob3J0CXNwaV90YnB0cjsJLyogSW50ZXJuYWwgKi8KLQl1c2hvcnQJc3BpX3RiYzsJLyogSW50ZXJuYWwgKi8KLQl1aW50CXNwaV90eHRtcDsJLyogSW50ZXJuYWwgKi8KLQl1aW50CXNwaV9yZXM7Ci0JdXNob3J0CXNwaV9ycGJhc2U7CS8qIFJlbG9jYXRpb24gcG9pbnRlciAqLwotCXVzaG9ydAlzcGlfcmVzMjsKLX0gc3BpX3Q7Ci0KLS8qIFNQSSBNb2RlIHJlZ2lzdGVyLgotKi8KLSNkZWZpbmUgU1BNT0RFX0xPT1AJKCh1c2hvcnQpMHg0MDAwKQkvKiBMb29wYmFjayAqLwotI2RlZmluZSBTUE1PREVfQ0kJKCh1c2hvcnQpMHgyMDAwKQkvKiBDbG9jayBJbnZlcnQgKi8KLSNkZWZpbmUgU1BNT0RFX0NQCSgodXNob3J0KTB4MTAwMCkJLyogQ2xvY2sgUGhhc2UgKi8KLSNkZWZpbmUgU1BNT0RFX0RJVjE2CSgodXNob3J0KTB4MDgwMCkJLyogQlJHLzE2IG1vZGUgKi8KLSNkZWZpbmUgU1BNT0RFX1JFVgkoKHVzaG9ydCkweDA0MDApCS8qIFJldmVyc2VkIERhdGEgKi8KLSNkZWZpbmUgU1BNT0RFX01TVFIJKCh1c2hvcnQpMHgwMjAwKQkvKiBTUEkgTWFzdGVyICovCi0jZGVmaW5lIFNQTU9ERV9FTgkoKHVzaG9ydCkweDAxMDApCS8qIEVuYWJsZSAqLwotI2RlZmluZSBTUE1PREVfTEVOTVNLCSgodXNob3J0KTB4MDBmMCkJLyogY2hhcmFjdGVyIGxlbmd0aCAqLwotI2RlZmluZSBTUE1PREVfTEVONAkoKHVzaG9ydCkweDAwMzApCS8qICA0IGJpdHMgcGVyIGNoYXIgKi8KLSNkZWZpbmUgU1BNT0RFX0xFTjgJKCh1c2hvcnQpMHgwMDcwKQkvKiAgOCBiaXRzIHBlciBjaGFyICovCi0jZGVmaW5lIFNQTU9ERV9MRU4xNgkoKHVzaG9ydCkweDAwZjApCS8qIDE2IGJpdHMgcGVyIGNoYXIgKi8KLSNkZWZpbmUgU1BNT0RFX1BNTVNLCSgodXNob3J0KTB4MDAwZikJLyogcHJlc2NhbGUgbW9kdWx1cyAqLwotCi0vKiBTUElFIGZpZWxkcyAqLwotI2RlZmluZSBTUElFX01NRQkweDIwCi0jZGVmaW5lIFNQSUVfVFhFCTB4MTAKLSNkZWZpbmUgU1BJRV9CU1kJMHgwNAotI2RlZmluZSBTUElFX1RYQgkweDAyCi0jZGVmaW5lIFNQSUVfUlhCCTB4MDEKLQogLyoKICAqIFJJU0MgQ29udHJvbGxlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGRlZmluaXRvbnMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0yLmgKaW5kZXggOTkwZmYxOS4uZjQyZTliYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtMi5oCkBAIC0xMjQsMTQgKzEyNCw2IEBACiAJX19jcG0yX3NldGJyZyhicmcsIHJhdGUsIENQTTJfQlJHX0lOVF9DTEssIGRpdjE2LCBDUE1fQlJHX0VYVENfSU5UKTsKIH0KIAotLyogRnVuY3Rpb24gY29kZSBiaXRzLCB1c3VhbGx5IGdlbmVyaWMgdG8gZGV2aWNlcy4KLSovCi0jZGVmaW5lIENQTUZDUl9HQkwJKCh1X2NoYXIpMHgyMCkJLyogU2V0IG1lbW9yeSBzbm9vcGluZyAqLwotI2RlZmluZSBDUE1GQ1JfRUIJKCh1X2NoYXIpMHgxMCkJLyogU2V0IGJpZyBlbmRpYW4gYnl0ZSBvcmRlciAqLwotI2RlZmluZSBDUE1GQ1JfVEMyCSgodV9jaGFyKTB4MDQpCS8qIFRyYW5zZmVyIGNvZGUgMiB2YWx1ZSAqLwotI2RlZmluZSBDUE1GQ1JfRFRCCSgodV9jaGFyKTB4MDIpCS8qIFVzZSBsb2NhbCBidXMgZm9yIGRhdGEgd2hlbiBzZXQgKi8KLSNkZWZpbmUgQ1BNRkNSX0JEQgkoKHVfY2hhcikweDAxKQkvKiBVc2UgbG9jYWwgYnVzIGZvciBCRCB3aGVuIHNldCAqLwotCiAvKiBQYXJhbWV0ZXIgUkFNIG9mZnNldHMgZnJvbSB0aGUgYmFzZS4KICovCiAjZGVmaW5lIFBST0ZGX1NDQzEJCSgodWludCkweDgwMDApCkBAIC02NTQsNDUgKzY0Niw2IEBACiAJdWludAlpaWNfdHh0bXA7CS8qIEludGVybmFsICovCiB9IGlpY190OwogCi0vKiBTUEkgcGFyYW1ldGVyIFJBTS4KLSovCi10eXBlZGVmIHN0cnVjdCBzcGkgewotCXVzaG9ydAlzcGlfcmJhc2U7CS8qIFJ4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLwotCXVzaG9ydAlzcGlfdGJhc2U7CS8qIFR4IEJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLwotCXVfY2hhcglzcGlfcmZjcjsJLyogUnggZnVuY3Rpb24gY29kZSAqLwotCXVfY2hhcglzcGlfdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLwotCXVzaG9ydAlzcGlfbXJibHI7CS8qIE1heCByZWNlaXZlIGJ1ZmZlciBsZW5ndGggKi8KLQl1aW50CXNwaV9yc3RhdGU7CS8qIEludGVybmFsICovCi0JdWludAlzcGlfcmRwOwkvKiBJbnRlcm5hbCAqLwotCXVzaG9ydAlzcGlfcmJwdHI7CS8qIEludGVybmFsICovCi0JdXNob3J0CXNwaV9yYmM7CS8qIEludGVybmFsICovCi0JdWludAlzcGlfcnh0bXA7CS8qIEludGVybmFsICovCi0JdWludAlzcGlfdHN0YXRlOwkvKiBJbnRlcm5hbCAqLwotCXVpbnQJc3BpX3RkcDsJLyogSW50ZXJuYWwgKi8KLQl1c2hvcnQJc3BpX3RicHRyOwkvKiBJbnRlcm5hbCAqLwotCXVzaG9ydAlzcGlfdGJjOwkvKiBJbnRlcm5hbCAqLwotCXVpbnQJc3BpX3R4dG1wOwkvKiBJbnRlcm5hbCAqLwotCXVpbnQJc3BpX3JlczsJLyogVHggdGVtcC4gKi8KLQl1aW50CXNwaV9yZXMxWzRdOwkvKiBTRE1BIHRlbXAuICovCi19IHNwaV90OwotCi0vKiBTUEkgTW9kZSByZWdpc3Rlci4KLSovCi0jZGVmaW5lIFNQTU9ERV9MT09QCSgodXNob3J0KTB4NDAwMCkJLyogTG9vcGJhY2sgKi8KLSNkZWZpbmUgU1BNT0RFX0NJCSgodXNob3J0KTB4MjAwMCkJLyogQ2xvY2sgSW52ZXJ0ICovCi0jZGVmaW5lIFNQTU9ERV9DUAkoKHVzaG9ydCkweDEwMDApCS8qIENsb2NrIFBoYXNlICovCi0jZGVmaW5lIFNQTU9ERV9ESVYxNgkoKHVzaG9ydCkweDA4MDApCS8qIEJSRy8xNiBtb2RlICovCi0jZGVmaW5lIFNQTU9ERV9SRVYJKCh1c2hvcnQpMHgwNDAwKQkvKiBSZXZlcnNlZCBEYXRhICovCi0jZGVmaW5lIFNQTU9ERV9NU1RSCSgodXNob3J0KTB4MDIwMCkJLyogU1BJIE1hc3RlciAqLwotI2RlZmluZSBTUE1PREVfRU4JKCh1c2hvcnQpMHgwMTAwKQkvKiBFbmFibGUgKi8KLSNkZWZpbmUgU1BNT0RFX0xFTk1TSwkoKHVzaG9ydCkweDAwZjApCS8qIGNoYXJhY3RlciBsZW5ndGggKi8KLSNkZWZpbmUgU1BNT0RFX1BNTVNLCSgodXNob3J0KTB4MDAwZikJLyogcHJlc2NhbGUgbW9kdWx1cyAqLwotCi0jZGVmaW5lIFNQTU9ERV9MRU4oeCkJKCgoKHgpLTEpJjB4Rik8PDQpCi0jZGVmaW5lIFNQTU9ERV9QTSh4KQkoKHgpICYweEYpCi0KLSNkZWZpbmUgU1BJX0VCCQkoKHVfY2hhcikweDEwKQkJLyogYmlnIGVuZGlhbiBieXRlIG9yZGVyICovCi0KIC8qIElETUEgcGFyYW1ldGVyIFJBTQogKi8KIHR5cGVkZWYgc3RydWN0IGlkbWEgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGNyLXJlZ3MuaAppbmRleCA4MjhlM2FhLi4zODAyNzRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGNyLXJlZ3MuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGNyLXJlZ3MuaApAQCAtMTU3LDQgKzE1NywyNyBAQAogI2RlZmluZSAgTDJDX1NOUF9TU1JfMzJHCTB4MDAwMGYwMDAKICNkZWZpbmUgIEwyQ19TTlBfRVNSCQkweDAwMDAwODAwCiAKKy8qCisgKiBEQ1IgcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgNDQwU1AvNDQwU1BlIEkyTy9ETUEgY29udHJvbGxlci4KKyAqIFRoZSBiYXNlIGFkZHJlc3MgaXMgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKi8KKyNkZWZpbmUgRENSTl9JMk8wX0lCQUwJCTB4MDA2CisjZGVmaW5lIERDUk5fSTJPMF9JQkFICQkweDAwNworI2RlZmluZSBJMk9fUkVHX0VOQUJMRQkJMHgwMDAwMDAwMQkvKiBFbmFibGUgSTJPL0RNQSBhY2Nlc3MgKi8KKworLyogNDQwU1AvNDQwU1BlIFNvZnR3YXJlIFJlc2V0IERDUiAqLworI2RlZmluZSBEQ1JOX1NEUjBfU1JTVAkJMHgwMjAwCisjZGVmaW5lIERDUk5fU0RSMF9TUlNUX0kyT0RNQQkoMHg4MDAwMDAwMCA+PiAxNSkJLyogUmVzZXQgSTJPL0RNQSAqLworCisvKiA0NDBTUC80NDBTUGUgTWVtb3J5IFF1ZXVlIERDUiBvZmZzZXRzICovCisjZGVmaW5lIERDUk5fTVEwX1hPUkJBCQkweDA0CisjZGVmaW5lIERDUk5fTVEwX0NGMkgJCTB4MDYKKyNkZWZpbmUgRENSTl9NUTBfQ0ZCSEwJCTB4MGYKKyNkZWZpbmUgRENSTl9NUTBfQkFVSAkJMHgxMAorCisvKiBIQi9MTCBQYXRocyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1RMF9DRkJITF9UUExNCQkyOAorI2RlZmluZSBNUTBfQ0ZCSExfSEJDTAkJMjMKKyNkZWZpbmUgTVEwX0NGQkhMX1BPTFkJCTE1CisKICNlbmRpZiAvKiBfX0RDUl9SRUdTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBlMjgxZGFlLi44MGE5NzNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTk3LDcgKzE5Nyw3IEBACiAJaWYgKCFkZXYtPmRtYV9tYXNrKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBhZGRyICsgc2l6ZSA8PSAqZGV2LT5kbWFfbWFzazsKKwlyZXR1cm4gYWRkciArIHNpemUgLSAxIDw9ICpkZXYtPmRtYV9tYXNrOwogfQogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGh5c190b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAwMTRhNjI0Li4xNzgyOGFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xNzAsNyArMTcwLDYgQEAKICNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVMRl9BUkNIKQogI2RlZmluZSBjb21wYXRfZWxmX2NoZWNrX2FyY2goeCkJKCh4KS0+ZV9tYWNoaW5lID09IEVNX1BQQykKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQlQQUdFX1NJWkUKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi02NHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRzLmgKaW5kZXggYTk4NjUzYi4uNTdjNDAwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi02NHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLTY0cy5oCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQlcCiBsYWJlbCMjX3BTZXJpZXM6CQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCVwKKwlET19LVk0JbjsJCQkJCVwKIAltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkJLyogc2F2ZSByMTMgKi8JXAogCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbikKIApAQCAtMTcwLDYgKzE3MSw3IEBACiAJLmdsb2JsIGxhYmVsIyNfcFNlcmllczsJCQkJCQlcCiBsYWJlbCMjX3BTZXJpZXM6CQkJCQkJCVwKIAlITVRfTUVESVVNOwkJCQkJCQlcCisJRE9fS1ZNCW47CQkJCQkJCVwKIAltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkvKiBzYXZlIHIxMyAqLwkJCVwKIAltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0E7CS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8JXAogCXN0ZAlyOSxQQUNBX0VYR0VOK0VYX1I5KHIxMyk7CS8qIHNhdmUgcjksIHIxMCAqLwlcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggZjFmNGUyMy4uNWMyYzAyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNDQsNiArNDQsOSBAQAogICovCiBlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CiAJRklYX0hPTEUsCisJLyogcmVzZXJ2ZSB0aGUgdG9wIDEyOEsgZm9yIGVhcmx5IGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCUZJWF9FQVJMWV9ERUJVR19UT1AgPSBGSVhfSE9MRSwKKwlGSVhfRUFSTFlfREVCVUdfQkFTRSA9IEZJWF9FQVJMWV9ERUJVR19UT1ArKCgxMjgqMTAyNCkvUEFHRV9TSVpFKS0xLAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJRklYX0tNQVBfQkVHSU4sCS8qIHJlc2VydmVkIHB0ZSdzIGZvciB0ZW1wb3Jhcnkga2VybmVsIG1hcHBpbmdzICovCiAJRklYX0tNQVBfRU5EID0gRklYX0tNQVBfQkVHSU4rKEtNX1RZUEVfTlIqTlJfQ1BVUyktMSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IGVhMDQ2MzIuLjM4NzYyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ncGlvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMzgsMTIgKzM4LDkgQEAKIAlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOwogfQogCi0vKgotICogTm90IGltcGxlbWVudGVkLCB5ZXQuCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGludCBncGlvKQogewotCXJldHVybiAtRU5PU1lTOworCXJldHVybiBfX2dwaW9fdG9faXJxKGdwaW8pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggYjFkYWZiNi4uNTg1NmE2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBAIC0zLDYgKzMsMTAgQEAKIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKK3B0ZV90ICpodWdlX3B0ZV9vZmZzZXRfYW5kX3NoaWZ0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkICpzaGlmdCk7CisKK3ZvaWQgZmx1c2hfZGNhY2hlX2ljYWNoZV9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGludCBpc19odWdlcGFnZV9vbmx5X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICB1bnNpZ25lZCBsb25nIGxlbik7CkBAIC0xMSwxMiArMTUsNiBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgY2VpbGluZyk7CiAKLXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7Ci0KLXB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCk7Ci0KIC8qCiAgKiBUaGUgdmVyc2lvbiBvZiB2bWFfbW11X3BhZ2VzaXplKCkgaW4gYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgbmVlZHMKICAqIHRvIG92ZXJyaWRlIHRoZSB2ZXJzaW9uIGluIG1tL2h1Z2V0bGIuYwpAQCAtNDIsOSArNDAsMjYgQEAKIHsKIH0KIAorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIH4wVUwsIDEpOworCXJldHVybiBfX3B0ZShvbGQpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKKwlwdGVfdCBwdGU7CisJcHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLT52bV9tbSwgYWRkciwgcHRlcCk7CisJZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVfbm9uZShwdGVfdCBwdGUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKaW5kZXggYzI3Y2FhYy4uZjAyNzU4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaApAQCAtMjEyLDYgKzIxMiwxOSBAQAogI2RlZmluZSBIX1FVRVJZX0lOVF9TVEFURSAgICAgICAweDFFNAogI2RlZmluZSBIX1BPTExfUEVORElORwkJMHgxRDgKICNkZWZpbmUgSF9JTExBTl9BVFRSSUJVVEVTCTB4MjQ0CisjZGVmaW5lIEhfTU9ESUZZX0hFQV9RUAkJMHgyNTAKKyNkZWZpbmUgSF9RVUVSWV9IRUFfUVAJCTB4MjU0CisjZGVmaW5lIEhfUVVFUllfSEVBCQkweDI1OAorI2RlZmluZSBIX1FVRVJZX0hFQV9QT1JUCTB4MjVDCisjZGVmaW5lIEhfTU9ESUZZX0hFQV9QT1JUCTB4MjYwCisjZGVmaW5lIEhfUkVHX0JDTUMJCTB4MjY0CisjZGVmaW5lIEhfREVSRUdfQkNNQwkJMHgyNjgKKyNkZWZpbmUgSF9SRUdJU1RFUl9IRUFfUlBBR0VTCTB4MjZDCisjZGVmaW5lIEhfRElTQUJMRV9BTkRfR0VUX0hFQQkweDI3MAorI2RlZmluZSBIX0dFVF9IRUFfSU5GTwkJMHgyNzQKKyNkZWZpbmUgSF9BTExPQ19IRUFfUkVTT1VSQ0UJMHgyNzgKKyNkZWZpbmUgSF9BRERfQ09OTgkJMHgyODQKKyNkZWZpbmUgSF9ERUxfQ09OTgkJMHgyODgKICNkZWZpbmUgSF9KT0lOCQkJMHgyOTgKICNkZWZpbmUgSF9WQVNJX1NUQVRFICAgICAgICAgICAgMHgyQTQKICNkZWZpbmUgSF9FTkFCTEVfQ1JRCQkweDJCMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGFiYmMyYWEuLjlmNGM5ZDRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC02NCwxMSArNjQsNiBAQAogCQlnZXRfcGFjYSgpLT5oYXJkX2VuYWJsZWQgPSAwOwlcCiAJfSB3aGlsZSgwKQogCi1zdGF0aWMgaW5saW5lIGludCBpcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcmV0dXJuIGZsYWdzID09IDA7Ci19Ci0KICNlbHNlCiAKICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF9jcG0yLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW1tYXBfY3BtMi5oCmluZGV4IGQ0ZjA2OWIuLjdjNjRmZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF9jcG0yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ltbWFwX2NwbTIuaApAQCAtNTQ5LDcgKzU0OSw3IEBACiAKIC8qIFVTQiBDb250cm9sbGVyLgogKi8KLXR5cGVkZWYgc3RydWN0IHVzYl9jdGxyIHsKK3R5cGVkZWYgc3RydWN0IGNwbV91c2JfY3RsciB7CiAJdTgJdXNiX3VzbW9kOwogCXU4CXVzYl91c2FkcjsKIAl1OAl1c2JfdXNjb207CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW1tYXBfcWUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF9xZS5oCmluZGV4IGMzNDZkMGIuLjRlMTBmNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF9xZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pbW1hcF9xZS5oCkBAIC0yMTAsNyArMjEwLDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBVU0IgQ29udHJvbGxlciAqLwotc3RydWN0IHVzYl9jdGxyIHsKK3N0cnVjdCBxZV91c2JfY3RsciB7CiAJdTgJdXNiX3VzbW9kOwogCXU4CXVzYl91c2FkcjsKIAl1OAl1c2JfdXNjb207CkBAIC0yMjksNyArMjI5LDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBNQ0MgKi8KLXN0cnVjdCBtY2Mgeworc3RydWN0IHFlX21jYyB7CiAJX19iZTMyCW1jY2U7CQkvKiBNQ0MgZXZlbnQgcmVnaXN0ZXIgKi8KIAlfX2JlMzIJbWNjbTsJCS8qIE1DQyBtYXNrIHJlZ2lzdGVyICovCiAJX19iZTMyCW1jY2Y7CQkvKiBNQ0MgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwpAQCAtNDMxLDkgKzQzMSw5IEBACiAJc3RydWN0IHFlX211eAkJcW14OwkJLyogUUUgTXVsdGlwbGV4ZXIgKi8KIAlzdHJ1Y3QgcWVfdGltZXJzCXFldDsJCS8qIFFFIFRpbWVycyAqLwogCXN0cnVjdCBzcGkJCXNwaVsweDJdOwkvKiBzcGkgKi8KLQlzdHJ1Y3QgbWNjCQltY2M7CQkvKiBtY2MgKi8KKwlzdHJ1Y3QgcWVfbWNjCQltY2M7CQkvKiBtY2MgKi8KIAlzdHJ1Y3QgcWVfYnJnCQlicmc7CQkvKiBicmcgKi8KLQlzdHJ1Y3QgdXNiX2N0bHIJCXVzYjsJCS8qIFVTQiAqLworCXN0cnVjdCBxZV91c2JfY3Rscgl1c2I7CQkvKiBVU0IgKi8KIAlzdHJ1Y3Qgc2kxCQlzaTE7CQkvKiBTSSAqLwogCXU4CQkJcmVzMTFbMHg4MDBdOwogCXN0cnVjdCBzaXIJCXNpcjsJCS8qIFNJIFJvdXRpbmcgVGFibGVzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggYmJjZDFhYS4uZTA1NGJhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMTcsOCArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogCi0jZGVmaW5lIGdldF9pcnFfZGVzYyhpcnEpICgmaXJxX2Rlc2NbKGlycSldKQotCiAvKiBEZWZpbmUgYSB3YXkgdG8gaXRlcmF0ZSBhY3Jvc3MgaXJxcy4gKi8KICNkZWZpbmUgZm9yX2VhY2hfaXJxKGkpIFwKIAlmb3IgKChpKSA9IDA7IChpKSA8IE5SX0lSUVM7ICsrKGkpKQpAQCAtMzQsMTIgKzMyLDE1IEBACiAgKi8KICNkZWZpbmUgTk9fSVJRX0lHTk9SRQkJKCh1bnNpZ25lZCBpbnQpLTEpCiAKLS8qIFRvdGFsIG51bWJlciBvZiB2aXJxIGluIHRoZSBwbGF0Zm9ybSAobWFrZSBpdCBhIENPTkZJR18qIG9wdGlvbiA/ICovCi0jZGVmaW5lIE5SX0lSUVMJCTUxMgorLyogVG90YWwgbnVtYmVyIG9mIHZpcnEgaW4gdGhlIHBsYXRmb3JtICovCisjZGVmaW5lIE5SX0lSUVMJCUNPTkZJR19OUl9JUlFTCiAKIC8qIE51bWJlciBvZiBpcnFzIHJlc2VydmVkIGZvciB0aGUgbGVnYWN5IGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgTlVNX0lTQV9JTlRFUlJVUFRTCTE2CiAKKy8qIFNhbWUgdGhpbmcsIHVzZWQgYnkgdGhlIGdlbmVyaWMgSVJRIGNvZGUgKi8KKyNkZWZpbmUgTlJfSVJRU19MRUdBQ1kJCU5VTV9JU0FfSU5URVJSVVBUUworCiAvKiBUaGlzIHR5cGUgaXMgdGhlIHBsYWNlaG9sZGVyIGZvciBhIGhhcmR3YXJlIGludGVycnVwdCBudW1iZXIuIEl0IGhhcyB0bwogICogYmUgYmlnIGVub3VnaCB0byBlbmNsb3NlIHdoYXRldmVyIHJlcHJlc2VudGF0aW9uIGlzIHVzZWQgYnkgYSBnaXZlbgogICogcGxhdGZvcm0uCkBAIC05OSw3ICsxMDAsNyBAQAogCSAqIGludGVycnVwdCBjb250cm9sbGVyIGhhcyBmb3IgdGhhdCBsaW5lKQogCSAqLwogCWludCAoKnhsYXRlKShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3RybGVyLAotCQkgICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCSAgICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJICAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfdHlwZSk7CiB9OwogCkBAIC0zMTMsNyArMzE0LDcgQEAKICAqIG9mIHRoZSBvZl9pcnFfbWFwXyooKSBmdW5jdGlvbnMuCiAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29udHJvbGxlciwKLQkJCQkJICB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplKTsKKwkJCQkJICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplKTsKIAogLyoqCiAgKiBpcnFfb2ZfcGFyc2VfYW5kX21hcCAtIFBhcnNlIGFuZCBNYXAgYW4gaW50ZXJydXB0IGludG8gbGludXggdmlycSBzcGFjZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGJiMmRlNmEuLjgxZjNiMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTQ2LDYgKzQ2LDI0IEBACiB9OwogCiBzdHJ1Y3Qga3ZtX3NyZWdzIHsKKwlfX3UzMiBwdnI7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191NjQgc2RyMTsKKwkJCXN0cnVjdCB7CisJCQkJc3RydWN0IHsKKwkJCQkJX191NjQgc2xiZTsKKwkJCQkJX191NjQgc2xidjsKKwkJCQl9IHNsYls2NF07CisJCQl9IHBwYzY0OworCQkJc3RydWN0IHsKKwkJCQlfX3UzMiBzclsxNl07CisJCQkJX191NjQgaWJhdFs4XTsgCisJCQkJX191NjQgZGJhdFs4XTsgCisJCQl9IHBwYzMyOworCQl9IHM7CisJCV9fdTggcGFkWzEwMjBdOworCX0gdTsKIH07CiAKIHN0cnVjdCBrdm1fZnB1IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCmluZGV4IDU2YmZhZTUuLmFmMmFiZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaApAQCAtNDksNiArNDksNDYgQEAKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9ST1VORCAzNAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfUEVSRk9STUFOQ0VfTU9OSVRPUiAzNQogCisvKiBib29rM3MgKi8KKworI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX1NZU1RFTV9SRVNFVAkweDEwMAorI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0sJMHgyMDAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UJMHgzMDAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NFR01FTlQJMHgzODAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NUT1JBR0UJMHg0MDAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NFR01FTlQJMHg0ODAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTAkweDUwMAorI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX0FMSUdOTUVOVAkweDYwMAorI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX1BST0dSQU0JMHg3MDAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMCTB4ODAwCisjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfREVDUkVNRU5URVIJMHg5MDAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMCTB4YzAwCisjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfVFJBQ0UJCTB4ZDAwCisjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfUEVSRk1PTgkweGYwMAorI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX0FMVElWRUMJMHhmMjAKKyNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9WU1gJCTB4ZjQwCisKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fU1lTVEVNX1JFU0VUCQkwCisjZGVmaW5lIEJPT0szU19JUlFQUklPX0RBVEFfU0VHTUVOVAkJMQorI2RlZmluZSBCT09LM1NfSVJRUFJJT19JTlNUX1NFR01FTlQJCTIKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fREFUQV9TVE9SQUdFCQkzCisjZGVmaW5lIEJPT0szU19JUlFQUklPX0lOU1RfU1RPUkFHRQkJNAorI2RlZmluZSBCT09LM1NfSVJRUFJJT19BTElHTk1FTlQJCTUKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fUFJPR1JBTQkJCTYKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fRlBfVU5BVkFJTAkJNworI2RlZmluZSBCT09LM1NfSVJRUFJJT19BTFRJVkVDCQkJOAorI2RlZmluZSBCT09LM1NfSVJRUFJJT19WU1gJCQk5CisjZGVmaW5lIEJPT0szU19JUlFQUklPX1NZU0NBTEwJCQkxMAorI2RlZmluZSBCT09LM1NfSVJRUFJJT19NQUNISU5FX0NIRUNLCQkxMQorI2RlZmluZSBCT09LM1NfSVJRUFJJT19ERUJVRwkJCTEyCisjZGVmaW5lIEJPT0szU19JUlFQUklPX0VYVEVSTkFMCQkJMTMKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVIJCTE0CisjZGVmaW5lIEJPT0szU19JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1IJMTUKKyNkZWZpbmUgQk9PSzNTX0lSUVBSSU9fTUFYCQkJMTYKKworI2RlZmluZSBCT09LM1NfSEZMQUdfRENCWjMyCQkJMHgxCisjZGVmaW5lIEJPT0szU19IRkxBR19TTEIJCQkweDIKKwogI2RlZmluZSBSRVNVTUVfRkxBR19OViAgICAgICAgICAoMTw8MCkgIC8qIFJlbG9hZCBndWVzdCBub252b2xhdGlsZSBzdGF0ZT8gKi8KICNkZWZpbmUgUkVTVU1FX0ZMQUdfSE9TVCAgICAgICAgKDE8PDEpICAvKiBSZXN1bWUgaG9zdD8gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNzM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgU1VTRSBMaW51eCBQcm9kdWN0cyBHbWJIIDIwMDkKKyAqCisgKiBBdXRob3JzOiBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KKyAqLworCisjaWZuZGVmIF9fQVNNX0tWTV9CT09LM1NfSF9fCisjZGVmaW5lIF9fQVNNX0tWTV9CT09LM1NfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKworc3RydWN0IGt2bXBwY19zbGIgeworCXU2NCBlc2lkOworCXU2NCB2c2lkOworCXU2NCBvcmlnZTsKKwl1NjQgb3JpZ3Y7CisJYm9vbCB2YWxpZDsKKwlib29sIEtzOworCWJvb2wgS3A7CisJYm9vbCBueDsKKwlib29sIGxhcmdlOworCWJvb2wgY2xhc3M7Cit9OworCitzdHJ1Y3Qga3ZtcHBjX3NyIHsKKwl1MzIgcmF3OworCXUzMiB2c2lkOworCWJvb2wgS3M7CisJYm9vbCBLcDsKKwlib29sIG54OworfTsKKworc3RydWN0IGt2bXBwY19iYXQgeworCXU2NCByYXc7CisJdTMyIGJlcGk7CisJdTMyIGJlcGlfbWFzazsKKwlib29sIHZzOworCWJvb2wgdnA7CisJdTMyIGJycG47CisJdTggd2ltZzsKKwl1OCBwcDsKK307CisKK3N0cnVjdCBrdm1wcGNfc2lkX21hcCB7CisJdTY0IGd1ZXN0X3ZzaWQ7CisJdTY0IGd1ZXN0X2VzaWQ7CisJdTY0IGhvc3RfdnNpZDsKKwlib29sIHZhbGlkOworfTsKKworI2RlZmluZSBTSURfTUFQX0JJVFMgICAgOQorI2RlZmluZSBTSURfTUFQX05VTSAgICAgKDEgPDwgU0lEX01BUF9CSVRTKQorI2RlZmluZSBTSURfTUFQX01BU0sgICAgKFNJRF9NQVBfTlVNIC0gMSkKKworc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyB7CisJc3RydWN0IGt2bV92Y3B1IHZjcHU7CisJc3RydWN0IGt2bXBwY19zaWRfbWFwIHNpZF9tYXBbU0lEX01BUF9OVU1dOworCXN0cnVjdCBrdm1wcGNfc2xiIHNsYls2NF07CisJc3RydWN0IHsKKwkJdTY0IGVzaWQ7CisJCXU2NCB2c2lkOworCX0gc2xiX3NoYWRvd1s2NF07CisJdTggc2xiX3NoYWRvd19tYXg7CisJc3RydWN0IGt2bXBwY19zciBzclsxNl07CisJc3RydWN0IGt2bXBwY19iYXQgaWJhdFs4XTsKKwlzdHJ1Y3Qga3ZtcHBjX2JhdCBkYmF0WzhdOworCXU2NCBoaWRbNl07CisJaW50IHNsYl9ucjsKKwl1NjQgc2RyMTsKKwl1NjQgZHNpc3I7CisJdTY0IGhpb3I7CisJdTY0IG1zcl9tYXNrOworCXU2NCB2c2lkX2ZpcnN0OworCXU2NCB2c2lkX25leHQ7CisJdTY0IHZzaWRfbWF4OworCWludCBjb250ZXh0X2lkOworfTsKKworI2RlZmluZSBDT05URVhUX0hPU1QJCTAKKyNkZWZpbmUgQ09OVEVYVF9HVUVTVAkJMQorI2RlZmluZSBDT05URVhUX0dVRVNUX0VORAkyCisKKyNkZWZpbmUgVlNJRF9SRUFMCTB4ZmZmZmZmZmZmZmYwMDAwMAorI2RlZmluZSBWU0lEX1JFQUxfRFIJMHhmZmZmZmZmZmZmZTAwMDAwCisjZGVmaW5lIFZTSURfUkVBTF9JUgkweGZmZmZmZmZmZmZkMDAwMDAKKyNkZWZpbmUgVlNJRF9CQVQJMHhmZmZmZmZmZmZmYzAwMDAwCisjZGVmaW5lIFZTSURfUFIJCTB4ODAwMDAwMDAwMDAwMDAwMAorCitleHRlcm4gdm9pZCBrdm1wcGNfbW11X3B0ZV9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlYSwgdTY0IGVhX21hc2spOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9wdGVfdmZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZwLCB1NjQgdnBfbWFzayk7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X3B0ZV9wZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFfc3RhcnQsIHU2NCBwYV9lbmQpOworZXh0ZXJuIHZvaWQga3ZtcHBjX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbmV3X21zcik7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2Jvb2szc182NF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2Jvb2szc18zMl9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gaW50IGt2bXBwY19tbXVfbWFwX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKTsKK2V4dGVybiBpbnQga3ZtcHBjX21tdV9tYXBfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGVhZGRyKTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfZmx1c2hfc2VnbWVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqa3ZtcHBjX21tdV9maW5kX3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlYSwgYm9vbCBkYXRhKTsKK2V4dGVybiBpbnQga3ZtcHBjX2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZWFkZHIsIGludCBzaXplLCB2b2lkICpwdHIsIGJvb2wgZGF0YSk7CitleHRlcm4gaW50IGt2bXBwY19zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGVhZGRyLCBpbnQgc2l6ZSwgdm9pZCAqcHRyKTsKK2V4dGVybiB2b2lkIGt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCB2ZWMpOworZXh0ZXJuIHZvaWQga3ZtcHBjX3NldF9iYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX2JhdCAqYmF0LAorCQkJICAgYm9vbCB1cHBlciwgdTMyIHZhbCk7CisKK2V4dGVybiB1MzIga3ZtcHBjX3RyYW1wb2xpbmVfbG93bWVtOworZXh0ZXJuIHUzMiBrdm1wcGNfdHJhbXBvbGluZV9lbnRlcjsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp0b19ib29rM3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBjb250YWluZXJfb2YodmNwdSwgc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcywgdmNwdSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWxvbmcgZHNpc3Iodm9pZCkKK3sKKwl1bG9uZyByOworCWFzbSAoICJtZmRzaXNyICUwICIgOiAiPXIiIChyKSApOworCXJldHVybiByOworfQorCitleHRlcm4gdm9pZCBrdm1fcmV0dXJuX3BvaW50KHZvaWQpOworCisjZGVmaW5lIElOU19EQ0JaCQkJMHg3YzAwMDdlYworCisjZW5kaWYgLyogX19BU01fS1ZNX0JPT0szU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzXzY0X2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfNjRfYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwNmVlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzXzY0X2FzbS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgU1VTRSBMaW51eCBQcm9kdWN0cyBHbWJIIDIwMDkKKyAqCisgKiBBdXRob3JzOiBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KKyAqLworCisjaWZuZGVmIF9fQVNNX0tWTV9CT09LM1NfQVNNX0hfXworI2RlZmluZSBfX0FTTV9LVk1fQk9PSzNTX0FTTV9IX18KKworI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIKKworI2luY2x1ZGUgPGFzbS9rdm1fYXNtLmg+CisKKy5tYWNybyBET19LVk0gaW50bm8KKwkuaWYgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX1NZU1RFTV9SRVNFVCkgfHwgXAorCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfTUFDSElORV9DSEVDSykgfHwgXAorCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfREFUQV9TVE9SQUdFKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NUT1JBR0UpIHx8IFwKKwkgICAgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX0RBVEFfU0VHTUVOVCkgfHwgXAorCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfSU5TVF9TRUdNRU5UKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTCkgfHwgXAorCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfQUxJR05NRU5UKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9ERUNSRU1FTlRFUikgfHwgXAorCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfU1lTQ0FMTCkgfHwgXAorCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfVFJBQ0UpIHx8IFwKKwkgICAgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX1BFUkZNT04pIHx8IFwKKwkgICAgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX0FMVElWRUMpIHx8IFwKKwkgICAgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX1ZTWCkKKworCWIJa3ZtcHBjX3RyYW1wb2xpbmVfXGludG5vCitrdm1wcGNfcmVzdW1lX1xpbnRubzoKKworCS5lbmRpZgorLmVuZG0KKworI2Vsc2UKKworLm1hY3JvIERPX0tWTSBpbnRubworLmVuZG0KKworI2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIgKi8KKworI2VuZGlmIC8qIF9fQVNNX0tWTV9CT09LM1NfQVNNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBjOWM5MzBlLi4xMjAxZjYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjEsNyArMjEsOCBAQAogI2RlZmluZSBfX1BPV0VSUENfS1ZNX0hPU1RfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2t2bV9hc20uaD4KQEAgLTM3LDYgKzM4LDggQEAKICNkZWZpbmUgS1ZNX05SX1BBR0VfU0laRVMJMQogI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCSgxVUw8PDMxKQogCisjZGVmaW5lIEhQVEVHX0NBQ0hFX05VTSAxMDI0CisKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3J1bjsKIHN0cnVjdCBrdm1fdmNwdTsKQEAgLTYzLDYgKzY2LDE3IEBACiAJdTMyIGRlY19leGl0czsKIAl1MzIgZXh0X2ludHJfZXhpdHM7CiAJdTMyIGhhbHRfd2FrZXVwOworI2lmZGVmIENPTkZJR19QUEM2NAorCXUzMiBwZl9zdG9yYWdlOworCXUzMiBwZl9pbnN0cnVjOworCXUzMiBzcF9zdG9yYWdlOworCXUzMiBzcF9pbnN0cnVjOworCXUzMiBxdWV1ZV9pbnRyOworCXUzMiBsZDsKKwl1MzIgbGRfc2xvdzsKKwl1MzIgc3Q7CisJdTMyIHN0X3Nsb3c7CisjZW5kaWYKIH07CiAKIGVudW0ga3ZtX2V4aXRfdHlwZXMgewpAQCAtMTA5LDkgKzEyMyw1MyBAQAogc3RydWN0IGt2bV9hcmNoIHsKIH07CiAKK3N0cnVjdCBrdm1wcGNfcHRlIHsKKwl1NjQgZWFkZHI7CisJdTY0IHZwYWdlOworCXU2NCByYWRkcjsKKwlib29sIG1heV9yZWFkOworCWJvb2wgbWF5X3dyaXRlOworCWJvb2wgbWF5X2V4ZWN1dGU7Cit9OworCitzdHJ1Y3Qga3ZtcHBjX21tdSB7CisJLyogYm9vazNzXzY0IG9ubHkgKi8KKwl2b2lkICgqc2xibXRlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByYiwgdTY0IHJzKTsKKwl1NjQgICgqc2xibWZlZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2xiX25yKTsKKwl1NjQgICgqc2xibWZldikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2xiX25yKTsKKwl2b2lkICgqc2xiaWUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNsYl9ucik7CisJdm9pZCAoKnNsYmlhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCS8qIGJvb2szcyAqLworCXZvaWQgKCptdHNyaW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHNybnVtLCB1bG9uZyB2YWx1ZSk7CisJdTMyICAoKm1mc3Jpbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc3JudW0pOworCWludCAgKCp4bGF0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSwgYm9vbCBkYXRhKTsKKwl2b2lkICgqcmVzZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCp0bGJpZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBhZGRyLCBib29sIGxhcmdlKTsKKwlpbnQgICgqZXNpZF90b192c2lkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlc2lkLCB1NjQgKnZzaWQpOworCXU2NCAgKCplYV90b192cCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwgYm9vbCBkYXRhKTsKKwlib29sICgqaXNfZGNiejMyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworfTsKKworc3RydWN0IGhwdGVfY2FjaGUgeworCXU2NCBob3N0X3ZhOworCXU2NCBwZm47CisJdWxvbmcgc2xvdDsKKwlzdHJ1Y3Qga3ZtcHBjX3B0ZSBwdGU7Cit9OworCiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7Ci0JdTMyIGhvc3Rfc3RhY2s7CisJdWxvbmcgaG9zdF9zdGFjazsKIAl1MzIgaG9zdF9waWQ7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdWxvbmcgaG9zdF9tc3I7CisJdWxvbmcgaG9zdF9yMjsKKwl2b2lkICpob3N0X3JldGlwOworCXVsb25nIHRyYW1wb2xpbmVfbG93bWVtOworCXVsb25nIHRyYW1wb2xpbmVfZW50ZXI7CisJdWxvbmcgaGlnaG1lbV9oYW5kbGVyOworCXVsb25nIGhvc3RfcGFjYV9waHlzOworCXN0cnVjdCBrdm1wcGNfbW11IG1tdTsKKyNlbmRpZgogCiAJdTY0IGZwclszMl07CiAJdWxvbmcgZ3ByWzMyXTsKQEAgLTEyMyw2ICsxODEsMTAgQEAKIAl1bG9uZyB4ZXI7CiAKIAl1bG9uZyBtc3I7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdWxvbmcgc2hhZG93X21zcjsKKwl1bG9uZyBoZmxhZ3M7CisjZW5kaWYKIAl1MzIgbW11Y3I7CiAJdWxvbmcgc3ByZzA7CiAJdWxvbmcgc3ByZzE7CkBAIC0xNDksNiArMjExLDcgQEAKIAl1MzIgaXZvcls2NF07CiAJdWxvbmcgaXZwcjsKIAl1MzIgcGlyOworCXUzMiBwdnI7CiAKIAl1MzIgc2hhZG93X3BpZDsKIAl1MzIgcGlkOwpAQCAtMTc0LDYgKzIzNyw5IEBACiAjZW5kaWYKIAogCXUzMiBsYXN0X2luc3Q7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdWxvbmcgZmF1bHRfZHNpc3I7CisjZW5kaWYKIAl1bG9uZyBmYXVsdF9kZWFyOwogCXVsb25nIGZhdWx0X2VzcjsKIAlncGFfdCBwYWRkcl9hY2Nlc3NlZDsKQEAgLTE4NSw4ICsyNTEsMTUgQEAKIAogCXUzMiBjcHIwX2NmZ2FkZHI7IC8qIGhvbGRzIHRoZSBsYXN0IHNldCBjcHIwX2NmZ2FkZHIgKi8KIAotCXN0cnVjdCB0aW1lcl9saXN0IGRlY190aW1lcjsKKwlzdHJ1Y3QgaHJ0aW1lciBkZWNfdGltZXI7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJdTY0IGRlY19qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19leGNlcHRpb25zOworCisjaWZkZWYgQ09ORklHX1BQQzY0CisJc3RydWN0IGhwdGVfY2FjaGUgaHB0ZV9jYWNoZVtIUFRFR19DQUNIRV9OVU1dOworCWludCBocHRlX2NhY2hlX29mZnNldDsKKyNlbmRpZgogfTsKIAogI2VuZGlmIC8qIF9fUE9XRVJQQ19LVk1fSE9TVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmluZGV4IDJjNmVlMzQ5Li4yNjllZTQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKQEAgLTM5LDYgKzM5LDcgQEAKIGV4dGVybiBpbnQgX19rdm1wcGNfdmNwdV9ydW4oc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gY2hhciBrdm1wcGNfaGFuZGxlcnNfc3RhcnRbXTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGt2bXBwY19oYW5kbGVyX2xlbjsKK2V4dGVybiB2b2lkIGt2bXBwY19oYW5kbGVyX2hpZ2htZW0odm9pZCk7CiAKIGV4dGVybiB2b2lkIGt2bXBwY19kdW1wX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiBpbnQga3ZtcHBjX2hhbmRsZV9sb2FkKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaAppbmRleCBmNzhmNjVjLi4xNGI1OTJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCkBAIC0xMDAsNyArMTAwLDE0IEBACiAJLy8gVXNlZCB0byBwYXNzIHBhcm1zIGZyb20gdGhlIE9TIHRvIFBMSUMgZm9yIFNldEFzckFuZFJmaWQKIAl1NjQJc2F2ZWRfZ3ByMzsJCS8vIFNhdmVkIEdQUjMgICAgICAgICAgICAgICAgICAgeDIwLXgyNwogCXU2NAlzYXZlZF9ncHI0OwkJLy8gU2F2ZWQgR1BSNCAgICAgICAgICAgICAgICAgICB4MjgteDJGCi0JdTY0CXNhdmVkX2dwcjU7CQkvLyBTYXZlZCBHUFI1ICAgICAgICAgICAgICAgICAgIHgzMC14MzcKKwl1bmlvbiB7CisJCXU2NAlzYXZlZF9ncHI1OwkvKiBTYXZlZCBHUFI1ICAgICAgICAgICAgICAgeDMwLXgzNyAqLworCQlzdHJ1Y3QgeworCQkJdTgJY2VkZV9sYXRlbmN5X2hpbnQ7ICAvKgkJCXgzMCAqLworCQkJdTgJcmVzZXJ2ZWRbN107ICAgICAgICAvKgkJICAgIHgzMS14MzYgKi8KKwkJfSBmaWVsZHM7CisJfSBncHI1X2R3b3JkOworCiAKIAl1OAlkdGxfZW5hYmxlX21hc2s7CS8vIERpc3BhdGNoIFRyYWNlIExvZyBtYXNrCXgzOC14MzgKIAl1OAlkb25hdGVfZGVkaWNhdGVkX2NwdTsJLy8gRG9uYXRlIGRlZGljYXRlZCBDUFUgY3ljbGVzICB4MzkteDM5CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAppbmRleCA5ZWZhMmJlLi45ZjBmYzllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKQEAgLTI2Niw2ICsyNjYsMTEgQEAKIAl2b2lkICgqc3VzcGVuZF9kaXNhYmxlX2lycXMpKHZvaWQpOwogCXZvaWQgKCpzdXNwZW5kX2VuYWJsZV9pcnFzKSh2b2lkKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfQ1BVX1BST0JFX1JFTEVBU0UKKwlzc2l6ZV90ICgqY3B1X3Byb2JlKShjb25zdCBjaGFyICosIHNpemVfdCk7CisJc3NpemVfdCAoKmNwdV9yZWxlYXNlKShjb25zdCBjaGFyICosIHNpemVfdCk7CisjZW5kaWYKIH07CiAKIGV4dGVybiB2b2lkIGU1MDBfaWRsZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNpby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2lvLmgKaW5kZXggMDc5YzA2ZS4uYTA2MmM1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2lvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2lvLmgKQEAgLTM5LDYgKzM5LDcgQEAKIAlzdHJ1Y3QgbWFjaW9fYnVzCSpidXM7CQkvKiBtYWNpbyBidXMgdGhpcyBkZXZpY2UgaXMgb24gKi8KIAlzdHJ1Y3QgbWFjaW9fZGV2CSptZWRpYV9iYXk7CS8qIERldmljZSBpcyBwYXJ0IG9mIGEgbWVkaWEgYmF5ICovCiAJc3RydWN0IG9mX2RldmljZQlvZmRldjsKKwlzdHJ1Y3QgZGV2aWNlX2RtYV9wYXJhbWV0ZXJzIGRtYV9wYXJtczsgLyogaWRlIG5lZWRzIHRoYXQgKi8KIAlpbnQJCQluX3Jlc291cmNlczsKIAlzdHJ1Y3QgcmVzb3VyY2UJCXJlc291cmNlW01BQ0lPX0RFVl9DT1VOVF9SRVNPVVJDRVNdOwogCWludAkJCW5faW50ZXJydXB0czsKQEAgLTc4LDYgKzc5LDggQEAKIAlyZXR1cm4gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIH0KIAorZXh0ZXJuIGludCBtYWNpb19lbmFibGVfZGV2cmVzKHN0cnVjdCBtYWNpb19kZXYgKmRldik7CisKIGV4dGVybiBpbnQgbWFjaW9fcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYsIGludCByZXNvdXJjZV9ubywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBtYWNpb19yZWxlYXNlX3Jlc291cmNlKHN0cnVjdCBtYWNpb19kZXYgKmRldiwgaW50IHJlc291cmNlX25vKTsKIGV4dGVybiBpbnQgbWFjaW9fcmVxdWVzdF9yZXNvdXJjZXMoc3RydWN0IG1hY2lvX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKQEAgLTEzMSw2ICsxMzQsOSBAQAogCWludAkoKnJlc3VtZSkoc3RydWN0IG1hY2lvX2RldiogZGV2KTsKIAlpbnQJKCpzaHV0ZG93bikoc3RydWN0IG1hY2lvX2RldiogZGV2KTsKIAorI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCisJdm9pZAkoKm1lZGlhYmF5X2V2ZW50KShzdHJ1Y3QgbWFjaW9fZGV2KiBkZXYsIGludCBtYl9zdGF0ZSk7CisjZW5kaWYKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7CiB9OwogI2RlZmluZQl0b19tYWNpb19kcml2ZXIoZHJ2KSBjb250YWluZXJfb2YoZHJ2LHN0cnVjdCBtYWNpb19kcml2ZXIsIGRyaXZlcikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tZWRpYWJheS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21lZGlhYmF5LmgKaW5kZXggYjJlZmIzMy4uMTEwMzdhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21lZGlhYmF5LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21lZGlhYmF5LmgKQEAgLTE3LDI2ICsxNywzMSBAQAogI2RlZmluZSBNQl9QT1dFUgk2CS8qIG1lZGlhIGJheSBjb250YWlucyBhIFBvd2VyIGRldmljZSAoPz8/KSAqLwogI2RlZmluZSBNQl9OTwkJNwkvKiBtZWRpYSBiYXkgY29udGFpbnMgbm90aGluZyAqLwogCi0vKiBOdW1iZXIgb2YgYmF5cyBpbiB0aGUgbWFjaGluZSBvciAwICovCi1leHRlcm4gaW50IG1lZGlhX2JheV9jb3VudDsKK3N0cnVjdCBtYWNpb19kZXY7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQwotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCiAKLWludCBjaGVja19tZWRpYV9iYXlfYnlfYmFzZSh1bnNpZ25lZCBsb25nIGJhc2UsIGludCB3aGF0KTsKLS8qIGNhbGxlZCBieSBJREUgUE1BQyBob3N0IGRyaXZlciB0byByZWdpc3RlciBJREUgY29udHJvbGxlciBmb3IgbWVkaWEgYmF5ICovCi1pbnQgbWVkaWFfYmF5X3NldF9pZGVfaW5mb3Moc3RydWN0IGRldmljZV9ub2RlICp3aGljaF9iYXksIHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCSAgICBpbnQgaXJxLCBpZGVfaHdpZl90ICpod2lmKTsKKy8qIENoZWNrIHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIGJheSwgcmV0dXJucyBNQl9OTyBpZiB0aGUgYmF5IGlzIHN0aWxsCisgKiB0cmFuc2l0aW9ubmluZworICovCitleHRlcm4gaW50IGNoZWNrX21lZGlhX2JheShzdHJ1Y3QgbWFjaW9fZGV2ICpiYXkpOwogCi1pbnQgY2hlY2tfbWVkaWFfYmF5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqd2hpY2hfYmF5LCBpbnQgd2hhdCk7CisvKiBUaGUgQVRBIGRyaXZlciB1c2VzIHRoZSBjYWxscyBiZWxvdyB0byB0ZW1wb3JhcmlseSBob2xkIG9uIHRoZQorICogbWVkaWEgYmF5IGNhbGxiYWNrcyB3aGlsZSBpbml0aWFsaXppbmcgdGhlIGludGVyZmFjZQorICovCitleHRlcm4gdm9pZCBsb2NrX21lZGlhX2JheShzdHJ1Y3QgbWFjaW9fZGV2ICpiYXkpOworZXh0ZXJuIHZvaWQgdW5sb2NrX21lZGlhX2JheShzdHJ1Y3QgbWFjaW9fZGV2ICpiYXkpOwogCiAjZWxzZQogCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19tZWRpYV9iYXkoc3RydWN0IGRldmljZV9ub2RlICp3aGljaF9iYXksIGludCB3aGF0KQorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfbWVkaWFfYmF5KHN0cnVjdCBtYWNpb19kZXYgKmJheSkKIHsKLQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gTUJfTk87CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX21lZGlhX2JheShzdHJ1Y3QgbWFjaW9fZGV2ICpiYXkpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19tZWRpYV9iYXkoc3RydWN0IG1hY2lvX2RldiAqYmF5KSB7IH0KKwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCBiZWJlMzFjLi4yMTAyYjIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTE3MywxNCArMTczLDYgQEAKICAqLwogZXh0ZXJuIGludCBtbXVfY2lfcmVzdHJpY3Rpb25zOwogCi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotLyoKLSAqIFRoZSBwYWdlIHNpemUgaW5kZXhlcyBvZiB0aGUgaHVnZSBwYWdlcyBmb3IgdXNlIGJ5IGh1Z2V0bGJmcwotICovCi1leHRlcm4gdW5zaWduZWQgaW50IG1tdV9odWdlX3BzaXplc1tNTVVfUEFHRV9DT1VOVF07Ci0KLSNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCi0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIEFWUE4gYW5kIEwgZmllbGRzIG9mIHRoZSBIUFRFICBhcHByb3ByaWF0ZWx5CiAgKiBmb3IgdGhlIHBhZ2Ugc2l6ZQpAQCAtMjUzLDEwICsyNDUsMTEgQEAKIAkJCSAgIHVuc2lnbmVkIGxvbmcgdnNpZCwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgdHJhcCwKIAkJCSAgIHVuc2lnbmVkIGludCBsb2NhbCwgaW50IHNzaXplKTsKIHN0cnVjdCBtbV9zdHJ1Y3Q7Cit1bnNpZ25lZCBpbnQgaGFzaF9wYWdlX2RvX2xhenlfaWNhY2hlKHVuc2lnbmVkIGludCBwcCwgcHRlX3QgcHRlLCBpbnQgdHJhcCk7CiBleHRlcm4gaW50IGhhc2hfcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIGFjY2VzcywgdW5zaWduZWQgbG9uZyB0cmFwKTsKLWV4dGVybiBpbnQgaGFzaF9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWNjZXNzLAotCQkJICB1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHZzaWQsIGludCBsb2NhbCwKLQkJCSAgdW5zaWduZWQgbG9uZyB0cmFwKTsKK2ludCBfX2hhc2hfcGFnZV9odWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgYWNjZXNzLCB1bnNpZ25lZCBsb25nIHZzaWQsCisJCSAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgdHJhcCwgaW50IGxvY2FsLCBpbnQgc3NpemUsCisJCSAgICAgdW5zaWduZWQgaW50IHNoaWZ0LCB1bnNpZ25lZCBpbnQgbW11X3BzaXplKTsKIAogZXh0ZXJuIGludCBodGFiX2JvbHRfbWFwcGluZyh1bnNpZ25lZCBsb25nIHZzdGFydCwgdW5zaWduZWQgbG9uZyB2ZW5kLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBzdGFydCwgdW5zaWduZWQgbG9uZyBwcm90LApAQCAtMzgwLDYgKzM3MywzOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaWZkZWYgQ09ORklHX1BQQ19TVUJQQUdFX1BST1QKKy8qCisgKiBGb3IgdGhlIHN1Yi1wYWdlIHByb3RlY3Rpb24gb3B0aW9uLCB3ZSBleHRlbmQgdGhlIFBHRCB3aXRoIG9uZSBvZgorICogdGhlc2UuICBCYXNpY2FsbHkgd2UgaGF2ZSBhIDMtbGV2ZWwgdHJlZSwgd2l0aCB0aGUgdG9wIGxldmVsIGJlaW5nCisgKiB0aGUgcHJvdHB0cnMgYXJyYXkuICBUbyBvcHRpbWl6ZSBzcGVlZCBhbmQgbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4KKyAqIG9ubHkgYWRkcmVzc2VzIDwgNEdCIGFyZSBiZWluZyBwcm90ZWN0ZWQsIHBvaW50ZXJzIHRvIHRoZSBmaXJzdAorICogZm91ciBwYWdlcyBvZiBzdWItcGFnZSBwcm90ZWN0aW9uIHdvcmRzIGFyZSBzdG9yZWQgaW4gdGhlIGxvd19wcm90CisgKiBhcnJheS4KKyAqIEVhY2ggcGFnZSBvZiBzdWItcGFnZSBwcm90ZWN0aW9uIHdvcmRzIHByb3RlY3RzIDFHQiAoNCBieXRlcworICogcHJvdGVjdHMgNjRrKS4gIEZvciB0aGUgMy1sZXZlbCB0cmVlLCBlYWNoIHBhZ2Ugb2YgcG9pbnRlcnMgdGhlbgorICogcHJvdGVjdHMgOFRCLgorICovCitzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlIHsKKwl1bnNpZ25lZCBsb25nIG1heGFkZHI7CS8qIG9ubHkgYWRkcmVzc2VzIDwgdGhpcyBhcmUgcHJvdGVjdGVkICovCisJdW5zaWduZWQgaW50ICoqcHJvdHB0cnNbMl07CisJdW5zaWduZWQgaW50ICpsb3dfcHJvdFs0XTsKK307CisKKyNkZWZpbmUgU0JQX0wxX0JJVFMJCShQQUdFX1NISUZUIC0gMikKKyNkZWZpbmUgU0JQX0wyX0JJVFMJCShQQUdFX1NISUZUIC0gMykKKyNkZWZpbmUgU0JQX0wxX0NPVU5UCQkoMSA8PCBTQlBfTDFfQklUUykKKyNkZWZpbmUgU0JQX0wyX0NPVU5UCQkoMSA8PCBTQlBfTDJfQklUUykKKyNkZWZpbmUgU0JQX0wyX1NISUZUCQkoUEFHRV9TSElGVCArIFNCUF9MMV9CSVRTKQorI2RlZmluZSBTQlBfTDNfU0hJRlQJCShTQlBfTDJfU0hJRlQgKyBTQlBfTDJfQklUUykKKworZXh0ZXJuIHZvaWQgc3VicGFnZV9wcm90X2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgc3VicGFnZV9wcm90X2luaXRfbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWJwYWdlX3Byb3RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWJwYWdlX3Byb3RfaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9CisjZW5kaWYgLyogQ09ORklHX1BQQ19TVUJQQUdFX1BST1QgKi8KKwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfaWRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMzkzLDYgKzQxOCw5IEBACiAJdTE2IHNsbHA7CQkvKiBTTEIgcGFnZSBzaXplIGVuY29kaW5nICovCiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKKyNpZmRlZiBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVAorCXN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUgc3B0OworI2VuZGlmIC8qIENPTkZJR19QUENfU1VCUEFHRV9QUk9UICovCiB9IG1tX2NvbnRleHRfdDsKIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGIzNGU5NGQuLjI2MzgzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0yMyw2ICsyMyw4IEBACiBleHRlcm4gdm9pZCBzZXRfY29udGV4dCh1bnNpZ25lZCBsb25nIGlkLCBwZ2RfdCAqcGdkKTsKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CitleHRlcm4gaW50IF9faW5pdF9uZXdfY29udGV4dCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZGVzdHJveV9jb250ZXh0KGludCBjb250ZXh0X2lkKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbXVfY29udGV4dF9pbml0KHZvaWQpIHsgfQogI2Vsc2UKIGV4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggMDg0NTQ4OC4uMDE5MmE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtODcsNSArODcsMTAgQEAKIHZvaWQgc29ydF9leF90YWJsZShzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpzdGFydCwKIAkJICAgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZmluaXNoKTsKIAorI2lmZGVmIENPTkZJR19NT0RWRVJTSU9OUworI2RlZmluZSBBUkNIX1JFTE9DQVRFU19LQ1JDVEFCCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHJlbG9jX3N0YXJ0W107CisjZW5kaWYKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaAppbmRleCAxYjRmNjk3Li5iNjY0Y2U3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmgKQEAgLTI3Niw2ICsyNzYsNTMgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbXBjNTJ4eF9nZXRfeHRhbF9mcmVxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBtcGM1Mnh4X3Jlc3RhcnQoY2hhciAqY21kKTsKIAorLyogbXBjNTJ4eF9ncHQuYyAqLworc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXY7CitleHRlcm4gc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKm1wYzUyeHhfZ3B0X2Zyb21faXJxKGludCBpcnEpOworZXh0ZXJuIGludCBtcGM1Mnh4X2dwdF9zdGFydF90aW1lcihzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0LCB1NjQgcGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250aW51b3VzKTsKK2V4dGVybiB1NjQgbXBjNTJ4eF9ncHRfdGltZXJfcGVyaW9kKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQpOworZXh0ZXJuIGludCBtcGM1Mnh4X2dwdF9zdG9wX3RpbWVyKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQpOworCisvKiBtcGM1Mnh4X2xwYmZpZm8uYyAqLworI2RlZmluZSBNUEM1MlhYX0xQQkZJRk9fRkxBR19SRUFECQkoMCkKKyNkZWZpbmUgTVBDNTJYWF9MUEJGSUZPX0ZMQUdfV1JJVEUJCSgxPDwwKQorI2RlZmluZSBNUEM1MlhYX0xQQkZJRk9fRkxBR19OT19JTkNSRU1FTlQJKDE8PDEpCisjZGVmaW5lIE1QQzUyWFhfTFBCRklGT19GTEFHX05PX0RNQQkJKDE8PDIpCisjZGVmaW5lIE1QQzUyWFhfTFBCRklGT19GTEFHX1BPTExfRE1BCQkoMTw8MykKKworc3RydWN0IG1wYzUyeHhfbHBiZmlmb19yZXF1ZXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBsb2NhbHBsdXMgYnVzIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgY3M7CisJc2l6ZV90IG9mZnNldDsKKworCS8qIE1lbW9yeSBhZGRyZXNzICovCisJdm9pZCAqZGF0YTsKKwlwaHlzX2FkZHJfdCBkYXRhX3BoeXM7CisKKwkvKiBEZXRhaWxzIG9mIHRyYW5zZmVyICovCisJc2l6ZV90IHNpemU7CisJc2l6ZV90IHBvczsJLyogY3VycmVudCBwb3NpdGlvbiBvZiB0cmFuc2ZlciAqLworCWludCBmbGFnczsKKworCS8qIFdoYXQgdG8gZG8gd2hlbiBmaW5pc2hlZCAqLworCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IG1wYzUyeHhfbHBiZmlmb19yZXF1ZXN0ICopOworCisJdm9pZCAqcHJpdjsJCS8qIERyaXZlciBwcml2YXRlIGRhdGEgKi8KKworCS8qIHN0YXRpc3RpY3MgKi8KKwlpbnQgaXJxX2NvdW50OworCWludCBpcnFfdGlja3M7CisJdTggbGFzdF9ieXRlOworCWludCBidWZmZXJfbm90X2RvbmVfY250OworfTsKKworZXh0ZXJuIGludCBtcGM1Mnh4X2xwYmZpZm9fc3VibWl0KHN0cnVjdCBtcGM1Mnh4X2xwYmZpZm9fcmVxdWVzdCAqcmVxKTsKK2V4dGVybiB2b2lkIG1wYzUyeHhfbHBiZmlmb19hYm9ydChzdHJ1Y3QgbXBjNTJ4eF9scGJmaWZvX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gdm9pZCBtcGM1Mnh4X2xwYmZpZm9fcG9sbCh2b2lkKTsKKwogLyogbXBjNTJ4eF9waWMuYyAqLwogZXh0ZXJuIHZvaWQgbXBjNTJ4eF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbXBjNTJ4eF9nZXRfaXJxKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL252cmFtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaAppbmRleCA2YzU4N2VkLi44NTBiNzJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaApAQCAtNzMsNyArNzMsNiBAQAogZXh0ZXJuIGludCBudnJhbV9yZWFkX2Vycm9yX2xvZyhjaGFyICogYnVmZiwgaW50IGxlbmd0aCwKIAkJCQkJIHVuc2lnbmVkIGludCAqIGVycl90eXBlLCB1bnNpZ25lZCBpbnQgKmVycl9zZXEpOwogZXh0ZXJuIGludCBudnJhbV9jbGVhcl9lcnJvcl9sb2codm9pZCk7Ci1leHRlcm4gc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqbnZyYW1fZmluZF9wYXJ0aXRpb24oaW50IHNpZywgY29uc3QgY2hhciAqbmFtZSk7CiAKIGV4dGVybiBpbnQgcFNlcmllc19udnJhbV9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcFNlcmllc19yZWNvbmZpZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BTZXJpZXNfcmVjb25maWcuaAppbmRleCBlNDgyZTUzLi5kNGI0YmZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcFNlcmllc19yZWNvbmZpZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wU2VyaWVzX3JlY29uZmlnLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIGV4dGVybiBpbnQgcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CiBleHRlcm4gdm9pZCBwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOworZXh0ZXJuIHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIHBTZXJpZXNfcmVjb25maWdfY2hhaW47CiAjZWxzZSAvKiAhQ09ORklHX1BQQ19QU0VSSUVTICovCiBzdGF0aWMgaW5saW5lIGludCBwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAppbmRleCA3ZDg1MTRjLi41ZTliNGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKQEAgLTEyOSw2ICsxMjksMTUgQEAKIAl1NjQgc3lzdGVtX3RpbWU7CQkvKiBhY2N1bXVsYXRlZCBzeXN0ZW0gVEIgdGlja3MgKi8KIAl1NjQgc3RhcnRwdXJyOwkJCS8qIFBVUlIvVEIgdmFsdWUgc25hcHNob3QgKi8KIAl1NjQgc3RhcnRzcHVycjsJCQkvKiBTUFVSUiB2YWx1ZSBzbmFwc2hvdCAqLworCisjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUgorCXN0cnVjdCAgeworCQl1NjQgICAgIGVzaWQ7CisJCXU2NCAgICAgdnNpZDsKKwl9IGt2bV9zbGJbNjRdOwkJCS8qIGd1ZXN0IFNMQiAqLworCXU4IGt2bV9zbGJfbWF4OwkJCS8qIGhpZ2hlc3QgdXNlZCBndWVzdCBzbGIgZW50cnkgKi8KKwl1OCBrdm1faW5fZ3Vlc3Q7CQkvKiBhcmUgd2UgaW5zaWRlIHRoZSBndWVzdD8gKi8KKyNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCBwYWNhX3N0cnVjdCBwYWNhW107CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBmZjI0MjU0Li5lOTZkNTJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTIyOSw2ICsyMjksMjAgQEAKIAogI2VuZGlmCiAKK3R5cGVkZWYgc3RydWN0IHsgc2lnbmVkIGxvbmcgcGQ7IH0gaHVnZXBkX3Q7CisjZGVmaW5lIEhVR0VQRF9TSElGVF9NQVNLICAgICAweDNmCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCitzdGF0aWMgaW5saW5lIGludCBodWdlcGRfb2soaHVnZXBkX3QgaHBkKQoreworCXJldHVybiAoaHBkLnBkID4gMCk7Cit9CisKKyNkZWZpbmUgaXNfaHVnZXBkKHBkZXApICAgICAgICAgICAgICAgKGh1Z2VwZF9vaygqKChodWdlcGRfdCAqKShwZGVwKSkpKQorI2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLworI2RlZmluZSBpc19odWdlcGQocGRlcCkJCQkwCisjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLworCiBzdHJ1Y3QgcGFnZTsKIGV4dGVybiB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3QgcGFnZSAqcGcpOwogZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaAppbmRleCAzZjE3YjgzLi5iZmM0ZTAyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKQEAgLTkwLDcgKzkwLDcgQEAKICNkZWZpbmUgSFBBR0VfU0laRQkJKCgxVUwpIDw8IEhQQUdFX1NISUZUKQogI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMSkpCiAjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQotI2RlZmluZSBIVUdFX01BWF9IU1RBVEUJCTMKKyNkZWZpbmUgSFVHRV9NQVhfSFNUQVRFCQkoTU1VX1BBR0VfQ09VTlQtMSkKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy0zMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MtMzIuaAppbmRleCBjOTUwMGQ2Li41ODBjZjczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy0zMi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLTMyLmgKQEAgLTMsNyArMyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKLSNkZWZpbmUgUFRFX05PTkNBQ0hFX05VTQkwICAvKiBkdW1teSBmb3Igbm93IHRvIHNoYXJlIGNvZGUgdy9wcGM2NCAqLworLyogRm9yIDMyLWJpdCwgYWxsIGxldmVscyBvZiBwYWdlIHRhYmxlcyBhcmUganVzdCBkcmF3biBmcm9tIGdldF9mcmVlX3BhZ2UoKSAqLworI2RlZmluZSBNQVhfUEdUQUJMRV9JTkRFWF9TSVpFCTAKIAogZXh0ZXJuIHZvaWQgX19iYWRfcHRlKHBtZF90ICpwbWQpOwogCkBAIC0zNiwxMSArMzcsMTAgQEAKIGV4dGVybiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWUocGd0YWJsZV9mcmVlX3QgcGdmKQorc3RhdGljIGlubGluZSB2b2lkIHBndGFibGVfZnJlZSh2b2lkICp0YWJsZSwgdW5zaWduZWQgaW5kZXhfc2l6ZSkKIHsKLQl2b2lkICpwID0gKHZvaWQgKikocGdmLnZhbCAmIH5QR0ZfQ0FDSEVOVU1fTUFTSyk7Ci0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcCk7CisJQlVHX09OKGluZGV4X3NpemUpOyAvKiAzMi1iaXQgZG9lc24ndCB1c2UgdGhpcyAqLworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YWJsZSk7CiB9CiAKICNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MtNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLTY0LmgKaW5kZXggZTZmMDY5Yy4uNjA1ZjVjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MtNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy02NC5oCkBAIC0xMSwyNyArMTEsMzQgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKLSNpZm5kZWYgQ09ORklHX1BQQ19TVUJQQUdFX1BST1QKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdWJwYWdlX3Byb3RfZnJlZShwZ2RfdCAqcGdkKSB7fQotI2VuZGlmCisvKgorICogRnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIHBhZ2V0YWJsZXMgdGhhdCBjb3VsZCBiZSBhdCBhbnkgbGV2ZWwgb2YKKyAqIHRoZSB0YWJsZSBuZWVkIHRvIGJlIHBhc3NlZCBhbiAiaW5kZXhfc2l6ZSIgc28gdGhleSBrbm93IGhvdyB0bworICogaGFuZGxlIGFsbG9jYXRpb24uICBGb3IgUFRFIHBhZ2VzICh3aGljaCBhcmUgbGlua2VkIHRvIGEgc3RydWN0CisgKiBwYWdlIGZvciBub3csIGFuZCBkcmF3biBmcm9tIHRoZSBtYWluIGdldF9mcmVlX3BhZ2VzKCkgcG9vbCksIHRoZQorICogYWxsb2NhdGlvbiBzaXplIHdpbGwgYmUgKDJeaW5kZXhfc2l6ZSAqIHNpemVvZihwb2ludGVyKSkgYW5kCisgKiBhbGxvY2F0aW9ucyBhcmUgZHJhd24gZnJvbSB0aGUga21lbV9jYWNoZSBpbiBQR1RfQ0FDSEUoaW5kZXhfc2l6ZSkuCisgKgorICogVGhlIG1heGltdW0gaW5kZXggc2l6ZSBuZWVkcyB0byBiZSBiaWcgZW5vdWdoIHRvIGFsbG93IGFueQorICogcGFnZXRhYmxlIHNpemVzIHdlIG5lZWQsIGJ1dCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIHRoZSBsb3cgYml0cyBvZgorICogYW55IHBhZ2UgdGFibGUgcG9pbnRlci4gIEluIG90aGVyIHdvcmRzIGFsbCBwYWdldGFibGVzLCBldmVuIHRpbnkKKyAqIG9uZXMsIG11c3QgYmUgYWxpZ25lZCB0byBhbGxvdyBhdCBsZWFzdCBlbm91Z2ggbG93IDAgYml0cyB0bworICogY29udGFpbiB0aGlzIHZhbHVlLiAgVGhpcyB2YWx1ZSBpcyBhbHNvIHVzZWQgYXMgYSBtYXNrLCBzbyBpdCBtdXN0CisgKiBiZSBvbmUgbGVzcyB0aGFuIGEgcG93ZXIgb2YgdHdvLgorICovCisjZGVmaW5lIE1BWF9QR1RBQkxFX0lOREVYX1NJWkUJMHhmCiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZVtdOwotCi0jZGVmaW5lIFBHRF9DQUNIRV9OVU0JCTAKLSNkZWZpbmUgUFVEX0NBQ0hFX05VTQkJMQotI2RlZmluZSBQTURfQ0FDSEVfTlVNCQkxCi0jZGVmaW5lIEhVR0VQVEVfQ0FDSEVfTlVNCTIKLSNkZWZpbmUgUFRFX05PTkNBQ0hFX05VTQk3ICAvKiBmcm9tIEdGUCByYXRoZXIgdGhhbiBrbWVtX2NhY2hlICovCisjZGVmaW5lIFBHVF9DQUNIRShzaGlmdCkgKHBndGFibGVfY2FjaGVbKHNoaWZ0KS0xXSkKIAogc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGVbUEdEX0NBQ0hFX05VTV0sIEdGUF9LRVJORUwpOworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKFBHVF9DQUNIRShQR0RfSU5ERVhfU0laRSksIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCiB7Ci0Jc3VicGFnZV9wcm90X2ZyZWUocGdkKTsKLQlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZVtQR0RfQ0FDSEVfTlVNXSwgcGdkKTsKKwlrbWVtX2NhY2hlX2ZyZWUoUEdUX0NBQ0hFKFBHRF9JTkRFWF9TSVpFKSwgcGdkKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwpAQCAtNDAsMTMgKzQ3LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwZ3RhYmxlX2NhY2hlW1BVRF9DQUNIRV9OVU1dLAorCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKFBHVF9DQUNIRShQVURfSU5ERVhfU0laRSksCiAJCQkJR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGVbUFVEX0NBQ0hFX05VTV0sIHB1ZCk7CisJa21lbV9jYWNoZV9mcmVlKFBHVF9DQUNIRShQVURfSU5ERVhfU0laRSksIHB1ZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCkBAIC03OCwxMyArODUsMTMgQEAKIAogc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGVbUE1EX0NBQ0hFX05VTV0sCisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoUEdUX0NBQ0hFKFBNRF9JTkRFWF9TSVpFKSwKIAkJCQlHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZVtQTURfQ0FDSEVfTlVNXSwgcG1kKTsKKwlrbWVtX2NhY2hlX2ZyZWUoUEdUX0NBQ0hFKFBNRF9JTkRFWF9TSVpFKSwgcG1kKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCkBAIC0xMDcsMjQgKzExNCwyMiBAQAogCXJldHVybiBwYWdlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlKHBndGFibGVfZnJlZV90IHBnZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWUodm9pZCAqdGFibGUsIHVuc2lnbmVkIGluZGV4X3NpemUpCiB7Ci0Jdm9pZCAqcCA9ICh2b2lkICopKHBnZi52YWwgJiB+UEdGX0NBQ0hFTlVNX01BU0spOwotCWludCBjYWNoZW51bSA9IHBnZi52YWwgJiBQR0ZfQ0FDSEVOVU1fTUFTSzsKLQotCWlmIChjYWNoZW51bSA9PSBQVEVfTk9OQ0FDSEVfTlVNKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcCk7Ci0JZWxzZQotCQlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZVtjYWNoZW51bV0sIHApOworCWlmICghaW5kZXhfc2l6ZSkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRhYmxlKTsKKwllbHNlIHsKKwkJQlVHX09OKGluZGV4X3NpemUgPiBNQVhfUEdUQUJMRV9JTkRFWF9TSVpFKTsKKwkJa21lbV9jYWNoZV9mcmVlKFBHVF9DQUNIRShpbmRleF9zaXplKSwgdGFibGUpOworCX0KIH0KIAotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCxhZGRyKQkJICAgICAgXAotCXBndGFibGVfZnJlZV90bGIodGxiLCBwZ3RhYmxlX2ZyZWVfY2FjaGUocG1kLCBcCi0JCVBNRF9DQUNIRV9OVU0sIFBNRF9UQUJMRV9TSVpFLTEpKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJCSAgICAgIFwKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcG1kLCBQTURfSU5ERVhfU0laRSkKICNpZm5kZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKICNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwdWQsIGFkZHIpCQkgICAgICBcCi0JcGd0YWJsZV9mcmVlX3RsYih0bGIsIHBndGFibGVfZnJlZV9jYWNoZShwdWQsIFwKLQkJUFVEX0NBQ0hFX05VTSwgUFVEX1RBQkxFX1NJWkUtMSkpCisJcGd0YWJsZV9mcmVlX3RsYih0bGIsIHB1ZCwgUFVEX0lOREVYX1NJWkUpCisKICNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwogCiAjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGYyZTgxMmQuLmFiZTg1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMjQsMjUgKzI0LDYgQEAKIAlfX2ZyZWVfcGFnZShwdGVwYWdlKTsKIH0KIAotdHlwZWRlZiBzdHJ1Y3QgcGd0YWJsZV9mcmVlIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLX0gcGd0YWJsZV9mcmVlX3Q7Ci0KLS8qIFRoaXMgbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBhbGxvdyBmb3IgTU1VX1BBR0VfQ09VTlQgKyAyIHRvIGJlIHN0b3JlZAotICogYW5kIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gdGhlIGxvdyBiaXRzIG9mIGFueSBuYXR1cmFsbHkgYWxpZ25lZCBwYWdlCi0gKiB0YWJsZSBjYWNoZSBlbnRyeS4gQXJiaXRyYXJpbHkgc2V0IHRvIDB4MWYsIHRoYXQgc2hvdWxkIGdpdmUgdXMgc29tZQotICogcm9vbSB0byBncm93Ci0gKi8KLSNkZWZpbmUgUEdGX0NBQ0hFTlVNX01BU0sJMHgxZgotCi1zdGF0aWMgaW5saW5lIHBndGFibGVfZnJlZV90IHBndGFibGVfZnJlZV9jYWNoZSh2b2lkICpwLCBpbnQgY2FjaGVudW0sCi0JCQkJCQl1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0JQlVHX09OKGNhY2hlbnVtID4gUEdGX0NBQ0hFTlVNX01BU0spOwotCi0JcmV0dXJuIChwZ3RhYmxlX2ZyZWVfdCl7LnZhbCA9ICgodW5zaWduZWQgbG9uZykgcCAmIH5tYXNrKSB8IGNhY2hlbnVtfTsKLX0KLQogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLTY0Lmg+CiAjZWxzZQpAQCAtNTAsMTIgKzMxLDEyIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIHBndGFibGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV9mcmVlX3QgcGdmKTsKK2V4dGVybiB2b2lkIHBndGFibGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUsIHVuc2lnbmVkIHNoaWZ0KTsKIGV4dGVybiB2b2lkIHB0ZV9mcmVlX2ZpbmlzaCh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfZnJlZV90IHBnZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlLCB1bnNpZ25lZCBzaGlmdCkKIHsKLQlwZ3RhYmxlX2ZyZWUocGdmKTsKKwlwZ3RhYmxlX2ZyZWUodGFibGUsIHNoaWZ0KTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9maW5pc2godm9pZCkgeyB9CiAjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KQEAgLTYzLDEyICs0NCw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnB0ZXBhZ2UsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JcGd0YWJsZV9mcmVlX3QgcGdmID0gcGd0YWJsZV9mcmVlX2NhY2hlKHBhZ2VfYWRkcmVzcyhwdGVwYWdlKSwKLQkJCQkJCVBURV9OT05DQUNIRV9OVU0sCi0JCQkJCQlQVEVfVEFCTEVfU0laRS0xKTsKIAl0bGJfZmx1c2hfcGd0YWJsZSh0bGIsIGFkZHJlc3MpOwogCXBndGFibGVfcGFnZV9kdG9yKHB0ZXBhZ2UpOwotCXBndGFibGVfZnJlZV90bGIodGxiLCBwZ2YpOworCXBndGFibGVfZnJlZV90bGIodGxiLCBwYWdlX2FkZHJlc3MocHRlcGFnZSksIDApOwogfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKaW5kZXggODA2YWJlNy4uNDk4NjUwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCkBAIC0zNTQsNiArMzU0LDcgQEAKICNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeygob2ZmKSA8PCBQVEVfUlBOX1NISUZUKXxfUEFHRV9GSUxFfSkKICNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKEJJVFNfUEVSX0xPTkcgLSBQVEVfUlBOX1NISUZUKQogCit2b2lkIHBndGFibGVfY2FjaGVfYWRkKHVuc2lnbmVkIHNoaWZ0LCB2b2lkICgqY3Rvcikodm9pZCAqKSk7CiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKIAogLyoKQEAgLTM3OCw3ICszNzksMTggQEAKIAlyZXR1cm4gcHQ7CiB9CiAKLXB0ZV90ICpodWdlX3B0ZV9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorcHRlX3QgKmZpbmRfbGludXhfcHRlX29yX2h1Z2VwdGUocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGVhLAorCQkJCSB1bnNpZ25lZCAqc2hpZnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKmZpbmRfbGludXhfcHRlX29yX2h1Z2VwdGUocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGVhLAorCQkJCQkgICAgICAgdW5zaWduZWQgKnNoaWZ0KQoreworCWlmIChzaGlmdCkKKwkJKnNoaWZ0ID0gMDsKKwlyZXR1cm4gZmluZF9saW51eF9wdGUocGdkaXIsIGVhKTsKK30KKyNlbmRpZiAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDJhNWRhMDYuLjIxMjA3ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjExLDYgKzIxMSw5IEBACiAgKi8KIGV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKIAorZXh0ZXJuIGludCBndXBfaHVnZXBkKGh1Z2VwZF90ICpodWdlcGQsIHVuc2lnbmVkIHBkc2hpZnQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCB3cml0ZSwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucik7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCmluZGV4IGRkNWVhOTUuLmQ0NDgyNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaApAQCAtMzMsMjEgKzMzLDIxIEBACiAjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMgkvKiBJOiBjYWNoZSBpbmhpYml0ICovCiAjZGVmaW5lIF9QQUdFX1NIQVJFRAkweDAwMDQJLyogTm8gQVNJRCAoY29udGV4dCkgY29tcGFyZSAqLwogI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwOAkvKiBTVyBlbnRyeSwgZm9yY2VkIHRvIDAgYnkgdGhlIFRMQiBtaXNzICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDEwMAkvKiBDOiBwYWdlIGNoYW5nZWQgKi8KIAotLyogVGhlc2UgZml2ZSBzb2Z0d2FyZSBiaXRzIG11c3QgYmUgbWFza2VkIG91dCB3aGVuIHRoZSBlbnRyeSBpcyBsb2FkZWQKLSAqIGludG8gdGhlIFRMQi4KKy8qIFRoZXNlIDQgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCisgKiBpbnRvIHRoZSBUTEIsIDEgU1cgYml0IGxlZnQoMHgwMDgwKS4KICAqLwogI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAxMAkvKiBzb2Z0d2FyZTogZ3VhcmRlZCBhY2Nlc3MgKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDIwCS8qIHNvZnR3YXJlOiBwYWdlIGNoYW5nZWQgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHgwMDQwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDA4MAkvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAyMAkvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwNDAJLyogc29mdHdhcmU6IGNhY2hpbmcgaXMgd3JpdGUgdGhyb3VnaCAqLwogCiAvKiBTZXR0aW5nIGFueSBiaXRzIGluIHRoZSBuaWJibGUgd2l0aCB0aGUgZm9sbG93IHR3byBjb250cm9scyB3aWxsCiAgKiByZXF1aXJlIGEgVExCIGV4Y2VwdGlvbiBoYW5kbGVyIGNoYW5nZS4gIEl0IGlzIGFzc3VtZWQgdW51c2VkIGJpdHMKICAqIGFyZSBhbHdheXMgemVyby4KICAqLwotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDEwMAkvKiBoL3cgd3JpdGUgZW5hYmxlOiBuZXZlciBzZXQgaW4gTGludXggUFRFICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwODAwCS8qIE9uZSBvZiB0aGUgUFAgYml0cywgdGhlIG90aGVyIGlzIFVTRVImflJXICovCisjZGVmaW5lIF9QQUdFX1JXCTB4MDQwMAkvKiBsc2IgUFAgYml0cywgaW52ZXJ0ZWQgaW4gSFcgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA4MDAJLyogbXNiIFBQIGJpdHMgKi8KIAogI2RlZmluZSBfUE1EX1BSRVNFTlQJMHgwMDAxCiAjZGVmaW5lIF9QTURfQkFECTB4MGZmMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaAppbmRleCA4MmI3MjIwLi5jNDQ5MGY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaApAQCAtNzYsNDEgKzc2LDQgQEAKIAlyZW1hcF9wZm5fcmFuZ2UoKHZtYSksIChhZGRyKSwgKHBmbiksIFBBR0VfU0laRSwJCVwKIAkJCV9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFXzRLX1BGTikpCiAKLQotI2lmZGVmIENPTkZJR19QUENfU1VCUEFHRV9QUk9UCi0vKgotICogRm9yIHRoZSBzdWItcGFnZSBwcm90ZWN0aW9uIG9wdGlvbiwgd2UgZXh0ZW5kIHRoZSBQR0Qgd2l0aCBvbmUgb2YKLSAqIHRoZXNlLiAgQmFzaWNhbGx5IHdlIGhhdmUgYSAzLWxldmVsIHRyZWUsIHdpdGggdGhlIHRvcCBsZXZlbCBiZWluZwotICogdGhlIHByb3RwdHJzIGFycmF5LiAgVG8gb3B0aW1pemUgc3BlZWQgYW5kIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuCi0gKiBvbmx5IGFkZHJlc3NlcyA8IDRHQiBhcmUgYmVpbmcgcHJvdGVjdGVkLCBwb2ludGVycyB0byB0aGUgZmlyc3QKLSAqIGZvdXIgcGFnZXMgb2Ygc3ViLXBhZ2UgcHJvdGVjdGlvbiB3b3JkcyBhcmUgc3RvcmVkIGluIHRoZSBsb3dfcHJvdAotICogYXJyYXkuCi0gKiBFYWNoIHBhZ2Ugb2Ygc3ViLXBhZ2UgcHJvdGVjdGlvbiB3b3JkcyBwcm90ZWN0cyAxR0IgKDQgYnl0ZXMKLSAqIHByb3RlY3RzIDY0aykuICBGb3IgdGhlIDMtbGV2ZWwgdHJlZSwgZWFjaCBwYWdlIG9mIHBvaW50ZXJzIHRoZW4KLSAqIHByb3RlY3RzIDhUQi4KLSAqLwotc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSB7Ci0JdW5zaWduZWQgbG9uZyBtYXhhZGRyOwkvKiBvbmx5IGFkZHJlc3NlcyA8IHRoaXMgYXJlIHByb3RlY3RlZCAqLwotCXVuc2lnbmVkIGludCAqKnByb3RwdHJzWzJdOwotCXVuc2lnbmVkIGludCAqbG93X3Byb3RbNF07Ci19OwotCi0jdW5kZWYgUEdEX1RBQkxFX1NJWkUKLSNkZWZpbmUgUEdEX1RBQkxFX1NJWkUJCSgoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkgKyBcCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKSkKLQotI2RlZmluZSBTQlBfTDFfQklUUwkJKFBBR0VfU0hJRlQgLSAyKQotI2RlZmluZSBTQlBfTDJfQklUUwkJKFBBR0VfU0hJRlQgLSAzKQotI2RlZmluZSBTQlBfTDFfQ09VTlQJCSgxIDw8IFNCUF9MMV9CSVRTKQotI2RlZmluZSBTQlBfTDJfQ09VTlQJCSgxIDw8IFNCUF9MMl9CSVRTKQotI2RlZmluZSBTQlBfTDJfU0hJRlQJCShQQUdFX1NISUZUICsgU0JQX0wxX0JJVFMpCi0jZGVmaW5lIFNCUF9MM19TSElGVAkJKFNCUF9MMl9TSElGVCArIFNCUF9MMl9CSVRTKQotCi1leHRlcm4gdm9pZCBzdWJwYWdlX3Byb3RfZnJlZShwZ2RfdCAqcGdkKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlICpwZ2Rfc3VicGFnZV9wcm90KHBnZF90ICpwZ2QpCi17Ci0JcmV0dXJuIChzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlICopKHBnZCArIFBUUlNfUEVSX1BHRCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19TVUJQQUdFX1BST1QgKi8KICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA4YzM0MTQ5Li5jYmQ3NTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xNDAsNiArMTQwLDggQEAKIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX2Jsb2NrX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAorI2RlZmluZSBBUkNIX0hBU19VU0VSX1NJTkdMRV9TVEVQX0lORk8KKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcWUuaAppbmRleCBmMzg4ZjBhLi4wOTQ3YjM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcWUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcWUuaApAQCAtODcsNyArODcsNyBAQAogCiAvKiBFeHBvcnQgUUUgY29tbW9uIG9wZXJhdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCi1leHRlcm4gdm9pZCBfX2luaXQgcWVfcmVzZXQodm9pZCk7CitleHRlcm4gdm9pZCBxZV9yZXNldCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcWVfcmVzZXQodm9pZCkge30KICNlbmRpZgpAQCAtMTQ1LDggKzE0NSwxNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHFlX3Bpbl9zZXRfZGVkaWNhdGVkKHN0cnVjdCBxZV9waW4gKnBpbikge30KICNlbmRpZiAvKiBDT05GSUdfUUVfR1BJTyAqLwogCi0vKiBRRSBpbnRlcm5hbCBBUEkgKi8KKyNpZmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCiBpbnQgcWVfaXNzdWVfY21kKHUzMiBjbWQsIHUzMiBkZXZpY2UsIHU4IG1jbl9wcm90b2NvbCwgdTMyIGNtZF9pbnB1dCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcWVfaXNzdWVfY21kKHUzMiBjbWQsIHUzMiBkZXZpY2UsIHU4IG1jbl9wcm90b2NvbCwKKwkJCSAgICAgICB1MzIgY21kX2lucHV0KQoreworCXJldHVybiAtRU5PU1lTOworfQorI2VuZGlmIC8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KKworLyogUUUgaW50ZXJuYWwgQVBJICovCiBlbnVtIHFlX2Nsb2NrIHFlX2Nsb2NrX3NvdXJjZShjb25zdCBjaGFyICpzb3VyY2UpOwogdW5zaWduZWQgaW50IHFlX2dldF9icmdfY2xrKHZvaWQpOwogaW50IHFlX3NldGJyZyhlbnVtIHFlX2Nsb2NrIGJyZywgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKTsKQEAgLTE1NCw3ICsxNjMsMjggQEAKIHZvaWQgcWVfcHV0X3NudW0odTggc251bSk7CiB1bnNpZ25lZCBpbnQgcWVfZ2V0X251bV9vZl9yaXNjKHZvaWQpOwogdW5zaWduZWQgaW50IHFlX2dldF9udW1fb2Zfc251bXModm9pZCk7Ci1pbnQgcWVfYWxpdmVfZHVyaW5nX3NsZWVwKHZvaWQpOworCitzdGF0aWMgaW5saW5lIGludCBxZV9hbGl2ZV9kdXJpbmdfc2xlZXAodm9pZCkKK3sKKwkvKgorCSAqIE1QQzg1NjhFIHJlZmVyZW5jZSBtYW51YWwgc2F5czoKKwkgKgorCSAqICIuLi5wb3dlciBkb3duIHNlcXVlbmNlIHdhaXRzIGZvciBhbGwgSS9PIGludGVyZmFjZXMgdG8gYmVjb21lIGlkbGUuCisJICogIEluIHNvbWUgYXBwbGljYXRpb25zIHRoaXMgbWF5IGhhcHBlbiBldmVudHVhbGx5IHdpdGhvdXQgYWN0aXZlbHkKKwkgKiAgc2h1dHRpbmcgZG93biBpbnRlcmZhY2VzLCBidXQgbW9zdCBsaWtlbHksIHNvZnR3YXJlIHdpbGwgaGF2ZSB0bworCSAqICB0YWtlIHN0ZXBzIHRvIHNodXQgZG93biB0aGUgZVRTRUMsIFFVSUNDIEVuZ2luZSBCbG9jaywgYW5kIFBDSQorCSAqICBpbnRlcmZhY2VzIGJlZm9yZSBpc3N1aW5nIHRoZSBjb21tYW5kIChlaXRoZXIgdGhlIHdyaXRlIHRvIHRoZSBjb3JlCisJICogIE1TUltXRV0gYXMgZGVzY3JpYmVkIGFib3ZlIG9yIHdyaXRpbmcgdG8gUE9XTUdUQ1NSKSB0byBwdXQgdGhlCisJICogIGRldmljZSBpbnRvIHNsZWVwIHN0YXRlLiIKKwkgKgorCSAqIE1QQzg1NjlFIHJlZmVyZW5jZSBtYW51YWwgaGFzIGEgc2ltaWxhciBwYXJhZ3JhcGguCisJICovCisjaWZkZWYgQ09ORklHX1BQQ184NXh4CisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CiAKIC8qIHdlIGFjdHVhbGx5IHVzZSBjcG1fbXVyYW0gaW1wbGVtZW50YXRpb24sIGRlZmluZSB0aGlzIGZvciBjb252ZW5pZW5jZSAqLwogI2RlZmluZSBxZV9tdXJhbV9pbml0IGNwbV9tdXJhbV9pbml0CkBAIC0yMTAsOCArMjQwLDE1IEBACiAJdTY0IGV4dGVuZGVkX21vZGVzOwkvKiBFeHRlbmRlZCBtb2RlcyAqLwogfTsKIAorI2lmZGVmIENPTkZJR19RVUlDQ19FTkdJTkUKIC8qIFVwbG9hZCBhIGZpcm13YXJlIHRvIHRoZSBRRSAqLwogaW50IHFlX3VwbG9hZF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgcWVfZmlybXdhcmUgKmZpcm13YXJlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBxZV91cGxvYWRfZmlybXdhcmUoY29uc3Qgc3RydWN0IHFlX2Zpcm13YXJlICpmaXJtd2FyZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbmRpZiAvKiBDT05GSUdfUVVJQ0NfRU5HSU5FICovCiAKIC8qIE9idGFpbiBpbmZvcm1hdGlvbiBvbiB0aGUgdXBsb2FkZWQgZmlybXdhcmUgKi8KIHN0cnVjdCBxZV9maXJtd2FyZV9pbmZvICpxZV9nZXRfZmlybXdhcmVfaW5mbyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oCmluZGV4IDE2OGZjZTcuLjIwZGU3M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3J0YXMuaApAQCAtNTgsNyArNTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgZW50cnk7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHBvaW50ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGJhc2U7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHBvaW50ZXIgKi8KIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JcmF3X3NwaW5sb2NrX3QgbG9jazsKKwlhcmNoX3NwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgcnRhc19hcmdzIGFyZ3M7CiAJc3RydWN0IGRldmljZV9ub2RlICpkZXY7CS8qIHZpcnR1YWwgYWRkcmVzcyBwb2ludGVyICovCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IGQ5ZWE4ZDMuLjFkM2IyNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKQEAgLTM3LDcgKzM3LDcgQEAKIGV4dGVybiB2b2lkIHNtcF9zZW5kX2RlYnVnZ2VyX2JyZWFrKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgc21wX21lc3NhZ2VfcmVjdihpbnQpOwogCi1ERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCBwdnIpOworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X3B2cik7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiB2b2lkIGZpeHVwX2lycXMoY3B1bWFza190IG1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDE5ODI2NmMuLjc2NDA5NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vc3luY2guaD4KIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+c2xvY2sgIT0gMCkKKyNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+c2xvY2sgIT0gMCkKIAogI2lmZGVmIENPTkZJR19QUEM2NAogLyogdXNlIDB4ODAwMDAweXkgd2hlbiBsb2NrZWQsIHdoZXJlIHl5ID09IENQVSBudW1iZXIgKi8KQEAgLTU0LDcgKzU0LDcgQEAKICAqIFRoaXMgcmV0dXJucyB0aGUgb2xkIHZhbHVlIGluIHRoZSBsb2NrLCBzbyB3ZSBzdWNjZWVkZWQKICAqIGluIGdldHRpbmcgdGhlIGxvY2sgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyAwLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19hcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAsIHRva2VuOwogCkBAIC03MywxMCArNzMsMTAgQEAKIAlyZXR1cm4gdG1wOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJQ0xFQVJfSU9fU1lOQzsKLQlyZXR1cm4gYXJjaF9zcGluX3RyeWxvY2sobG9jaykgPT0gMDsKKwlyZXR1cm4gX19hcmNoX3NwaW5fdHJ5bG9jayhsb2NrKSA9PSAwOwogfQogCiAvKgpAQCAtOTYsMTkgKzk2LDE5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUFBDX1NQTFBBUikgfHwgZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpCiAvKiBXZSBvbmx5IHlpZWxkIHRvIHRoZSBoeXBlcnZpc29yIGlmIHdlIGFyZSBpbiBzaGFyZWQgcHJvY2Vzc29yIG1vZGUgKi8KICNkZWZpbmUgU0hBUkVEX1BST0NFU1NPUiAoZ2V0X2xwcGFjYSgpLT5zaGFyZWRfcHJvYykKLWV4dGVybiB2b2lkIF9fc3Bpbl95aWVsZChyYXdfc3BpbmxvY2tfdCAqbG9jayk7Ci1leHRlcm4gdm9pZCBfX3J3X3lpZWxkKHJhd19yd2xvY2tfdCAqbG9jayk7CitleHRlcm4gdm9pZCBfX3NwaW5feWllbGQoYXJjaF9zcGlubG9ja190ICpsb2NrKTsKK2V4dGVybiB2b2lkIF9fcndfeWllbGQoYXJjaF9yd2xvY2tfdCAqbG9jayk7CiAjZWxzZSAvKiBTUExQQVIgfHwgSVNFUklFUyAqLwogI2RlZmluZSBfX3NwaW5feWllbGQoeCkJYmFycmllcigpCiAjZGVmaW5lIF9fcndfeWllbGQoeCkJYmFycmllcigpCiAjZGVmaW5lIFNIQVJFRF9QUk9DRVNTT1IJMAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCUNMRUFSX0lPX1NZTkM7CiAJd2hpbGUgKDEpIHsKLQkJaWYgKGxpa2VseShhcmNoX3NwaW5fdHJ5bG9jayhsb2NrKSA9PSAwKSkKKwkJaWYgKGxpa2VseShfX2FyY2hfc3Bpbl90cnlsb2NrKGxvY2spID09IDApKQogCQkJYnJlYWs7CiAJCWRvIHsKIAkJCUhNVF9sb3coKTsKQEAgLTEyMCwxMyArMTIwLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUKLXZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQordm9pZCBhcmNoX3NwaW5fbG9ja19mbGFncyhhcmNoX3NwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19kaXM7CiAKIAlDTEVBUl9JT19TWU5DOwogCXdoaWxlICgxKSB7Ci0JCWlmIChsaWtlbHkoYXJjaF9zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCisJCWlmIChsaWtlbHkoX19hcmNoX3NwaW5fdHJ5bG9jayhsb2NrKSA9PSAwKSkKIAkJCWJyZWFrOwogCQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzX2Rpcyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTE0MCwxOSArMTQwLDE5IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJU1lOQ19JTzsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIyBfX3Jhd19zcGluX3VubG9ja1xuXHQiCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgYXJjaF9zcGluX3VubG9ja1xuXHQiCiAJCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOwogCWxvY2stPnNsb2NrID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QUEM2NAotZXh0ZXJuIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jayk7CitleHRlcm4gdm9pZCBhcmNoX3NwaW5fdW5sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpsb2NrKTsKICNlbHNlCi0jZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQobG9jaykgXAotCWRvIHsgd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKSBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KGxvY2spIFwKKwlkbyB7IHdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKSBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKgpAQCAtMTY2LDggKzE2Niw4IEBACiAgKiByZWFkLWxvY2tzLgogICovCiAKLSNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgocncpLT5sb2NrID49IDApCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJ3KQkoIShydyktPmxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9jYW5fbG9jayhydykJCSgocncpLT5sb2NrID49IDApCisjZGVmaW5lIGFyY2hfd3JpdGVfY2FuX2xvY2socncpCSghKHJ3KS0+bG9jaykKIAogI2lmZGVmIENPTkZJR19QUEM2NAogI2RlZmluZSBfX0RPX1NJR05fRVhURU5ECSJleHRzdwklMCwlMFxuIgpAQCAtMTgxLDcgKzE4MSw3IEBACiAgKiBUaGlzIHJldHVybnMgdGhlIG9sZCB2YWx1ZSBpbiB0aGUgbG9jayArIDEsCiAgKiBzbyB3ZSBnb3QgYSByZWFkIGxvY2sgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyA+IDAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBhcmNoX3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBsb25nIF9fYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJbG9uZyB0bXA7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQAogICogVGhpcyByZXR1cm5zIHRoZSBvbGQgdmFsdWUgaW4gdGhlIGxvY2ssCiAgKiBzbyB3ZSBnb3QgdGhlIHdyaXRlIGxvY2sgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyAwLgogICovCi1zdGF0aWMgaW5saW5lIGxvbmcgYXJjaF93cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGxvbmcgX19hcmNoX3dyaXRlX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJbG9uZyB0bXAsIHRva2VuOwogCkBAIC0yMjUsMTAgKzIyNSwxMCBAQAogCXJldHVybiB0bXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl3aGlsZSAoMSkgewotCQlpZiAobGlrZWx5KGFyY2hfcmVhZF90cnlsb2NrKHJ3KSA+IDApKQorCQlpZiAobGlrZWx5KF9fYXJjaF9yZWFkX3RyeWxvY2socncpID4gMCkpCiAJCQlicmVhazsKIAkJZG8gewogCQkJSE1UX2xvdygpOwpAQCAtMjM5LDEwICsyMzksMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXdoaWxlICgxKSB7Ci0JCWlmIChsaWtlbHkoYXJjaF93cml0ZV90cnlsb2NrKHJ3KSA9PSAwKSkKKwkJaWYgKGxpa2VseShfX2FyY2hfd3JpdGVfdHJ5bG9jayhydykgPT0gMCkpCiAJCQlicmVhazsKIAkJZG8gewogCQkJSE1UX2xvdygpOwpAQCAtMjUzLDE3ICsyNTMsMTcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JcmV0dXJuIGFyY2hfcmVhZF90cnlsb2NrKHJ3KSA+IDA7CisJcmV0dXJuIF9fYXJjaF9yZWFkX3RyeWxvY2socncpID4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCXJldHVybiBhcmNoX3dyaXRlX3RyeWxvY2socncpID09IDA7CisJcmV0dXJuIF9fYXJjaF93cml0ZV90cnlsb2NrKHJ3KSA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfdW5sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCWxvbmcgdG1wOwogCkBAIC0yODAsMTkgKzI4MCwxOSBAQAogCTogImNyMCIsICJ4ZXIiLCAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIyB3cml0ZV91bmxvY2tcblx0IgogCQkJCUxXU1lOQ19PTl9TTVA6IDogOiJtZW1vcnkiKTsKIAlydy0+bG9jayA9IDA7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3dyaXRlX2xvY2sobG9jaykKIAotI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJX19zcGluX3lpZWxkKGxvY2spCi0jZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQlfX3J3X3lpZWxkKGxvY2spCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJX19yd195aWVsZChsb2NrKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJX19zcGluX3lpZWxkKGxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9yZWxheChsb2NrKQlfX3J3X3lpZWxkKGxvY2spCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJX19yd195aWVsZChsb2NrKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggNzQyMzZjOS4uMjM1MWFkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTcsMTQgKzcsMTQgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzbG9jazsKLX0gcmF3X3NwaW5sb2NrX3Q7Cit9IGFyY2hfc3BpbmxvY2tfdDsKIAotI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgc2lnbmVkIGludCBsb2NrOwotfSByYXdfcndsb2NrX3Q7Cit9IGFyY2hfcndsb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgMCB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCmluZGV4IGM3ZDY3MWEuLjA3ZDJkMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKQEAgLTE0NSw3ICsxNDUsNyBAQAogU1lTQ0FMTF9TUFUoc2V0ZnNnaWQpCiBTWVNDQUxMX1NQVShsbHNlZWspCiBDT01QQVRfU1lTX1NQVShnZXRkZW50cykKLVNZU1hfU1BVKHN5c19zZWxlY3QscHBjMzJfc2VsZWN0LHBwY19zZWxlY3QpCitTWVNYX1NQVShzeXNfc2VsZWN0LHBwYzMyX3NlbGVjdCxzeXNfc2VsZWN0KQogU1lTQ0FMTF9TUFUoZmxvY2spCiBTWVNDQUxMX1NQVShtc3luYykKIENPTVBBVF9TWVNfU1BVKHJlYWR2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKaW5kZXggY2QyMWU1ZS4uMTFhZTY5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCkBAIC01MSw2ICs1MSw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgdWRiZ19pbml0XzQ0eF9hczEodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgdWRiZ19pbml0XzQweF9yZWFsbW9kZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfY3BtKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF91c2JnZWNrbyh2b2lkKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVURCR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCBiMjM2NjRhLi5jMDAyYjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTQyLDEwICs0MiwxMSBAQAogb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCiBvYmotJChDT05GSUdfUFBDX09GKQkJKz0gb2ZfZGV2aWNlLm8gb2ZfcGxhdGZvcm0ubyBwcm9tX3BhcnNlLm8KIG9iai0kKENPTkZJR19QUENfQ0xPQ0spCQkrPSBjbG9jay5vCi1wcm9jZnMtJChDT05GSUdfUFBDNjQpCQk6PSBwcm9jX3BwYzY0Lm8KK3Byb2Nmcy15CQkJOj0gcHJvY19wb3dlcnBjLm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gJChwcm9jZnMteSkKIHJ0YXNwY2ktJChDT05GSUdfUFBDNjQpLSQoQ09ORklHX1BDSSkJOj0gcnRhc19wY2kubwogb2JqLSQoQ09ORklHX1BQQ19SVEFTKQkJKz0gcnRhcy5vIHJ0YXMtcnRjLm8gJChydGFzcGNpLXkteSkKK29iai0kKENPTkZJR19QUENfUlRBU19EQUVNT04pCSs9IHJ0YXNkLm8KIG9iai0kKENPTkZJR19SVEFTX0ZMQVNIKQkrPSBydGFzX2ZsYXNoLm8KIG9iai0kKENPTkZJR19SVEFTX1BST0MpCQkrPSBydGFzLXByb2Mubwogb2JqLSQoQ09ORklHX0xQQVJDRkcpCQkrPSBscGFyY2ZnLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwppbmRleCAzODM5ODM5Li5iODc2ZTk4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwpAQCAtNjQyLDEwICs2NDIsMTQgQEAKICAqLwogc3RhdGljIGludCBlbXVsYXRlX3ZzeCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqYWRkciwgdW5zaWduZWQgaW50IHJlZywKIAkJICAgICAgIHVuc2lnbmVkIGludCBhcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGxlbmd0aCkKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBlbHNpemUpCiB7CiAJY2hhciAqcHRyOworCXVuc2lnbmVkIGxvbmcgKmxwdHI7CiAJaW50IHJldCA9IDA7CisJaW50IHN3ID0gMDsKKwlpbnQgaSwgajsKIAogCWZsdXNoX3ZzeF90b190aHJlYWQoY3VycmVudCk7CiAKQEAgLTY1NCwxOSArNjU4LDM1IEBACiAJZWxzZQogCQlwdHIgPSAoY2hhciAqKSAmY3VycmVudC0+dGhyZWFkLnZyW3JlZyAtIDMyXTsKIAotCWlmIChmbGFncyAmIFNUKQotCQlyZXQgPSBfX2NvcHlfdG9fdXNlcihhZGRyLCBwdHIsIGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotCQlpZiAoZmxhZ3MgJiBTUExUKXsKLQkJCXJldCA9IF9fY29weV9mcm9tX3VzZXIocHRyLCBhZGRyLCBsZW5ndGgpOwotCQkJcHRyICs9IGxlbmd0aDsKKwlscHRyID0gKHVuc2lnbmVkIGxvbmcgKikgcHRyOworCisJaWYgKGZsYWdzICYgU1cpCisJCXN3ID0gZWxzaXplLTE7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuZ3RoOyBqICs9IGVsc2l6ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZWxzaXplOyArK2kpIHsKKwkJCWlmIChmbGFncyAmIFNUKQorCQkJCXJldCB8PSBfX3B1dF91c2VyKHB0cltpXnN3XSwgYWRkciArIGkpOworCQkJZWxzZQorCQkJCXJldCB8PSBfX2dldF91c2VyKHB0cltpXnN3XSwgYWRkciArIGkpOwogCQl9Ci0JCXJldCB8PSBfX2NvcHlfZnJvbV91c2VyKHB0ciwgYWRkciwgbGVuZ3RoKTsKKwkJcHRyICArPSBlbHNpemU7CisJCWFkZHIgKz0gZWxzaXplOwogCX0KLQlpZiAoZmxhZ3MgJiBVKQotCQlyZWdzLT5ncHJbYXJlZ10gPSByZWdzLT5kYXI7Ci0JaWYgKHJldCkKKworCWlmICghcmV0KSB7CisJCWlmIChmbGFncyAmIFUpCisJCQlyZWdzLT5ncHJbYXJlZ10gPSByZWdzLT5kYXI7CisKKwkJLyogU3BsYXQgbG9hZCBjb3BpZXMgdGhlIHNhbWUgZGF0YSB0byB0b3AgYW5kIGJvdHRvbSA4IGJ5dGVzICovCisJCWlmIChmbGFncyAmIFNQTFQpCisJCQlscHRyWzFdID0gbHB0clswXTsKKwkJLyogRm9yIDggYnl0ZSBsb2FkcywgemVybyB0aGUgdG9wIDggYnl0ZXMgKi8KKwkJZWxzZSBpZiAoIShmbGFncyAmIFNUKSAmJiAoOCA9PSBsZW5ndGgpKQorCQkJbHB0clsxXSA9IDA7CisJfSBlbHNlCiAJCXJldHVybiAtRUZBVUxUOworCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKQEAgLTc2NywxNiArNzg3LDI1IEBACiAKICNpZmRlZiBDT05GSUdfVlNYCiAJaWYgKChpbnN0cnVjdGlvbiAmIDB4ZmMwMDAwM2UpID09IDB4N2MwMDAwMTgpIHsKLQkJLyogQWRkaXRpb25hbCByZWdpc3RlciBhZGRyZXNzaW5nIGJpdCAoNjQgVlNYIHZzIDMyIEZQUi9HUFIgKi8KKwkJdW5zaWduZWQgaW50IGVsc2l6ZTsKKworCQkvKiBBZGRpdGlvbmFsIHJlZ2lzdGVyIGFkZHJlc3NpbmcgYml0ICg2NCBWU1ggdnMgMzIgRlBSL0dQUikgKi8KIAkJcmVnIHw9IChpbnN0cnVjdGlvbiAmIDB4MSkgPDwgNTsKIAkJLyogU2ltcGxlIGlubGluZSBkZWNvZGVyIGluc3RlYWQgb2YgYSB0YWJsZSAqLworCQkvKiBWU1ggaGFzIG9ubHkgOCBhbmQgMTYgYnl0ZSBtZW1vcnkgYWNjZXNzZXMgKi8KKwkJbmIgPSA4OwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDIwMCkKIAkJCW5iID0gMTY7Ci0JCWVsc2UgaWYgKGluc3RydWN0aW9uICYgMHgwODApCi0JCQluYiA9IDg7Ci0JCWVsc2UKLQkJCW5iID0gNDsKKworCQkvKiBWZWN0b3Igc3RvcmVzIGluIGxpdHRsZS1lbmRpYW4gbW9kZSBzd2FwIGluZGl2aWR1YWwKKwkJICAgZWxlbWVudHMsIHNvIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5ICovCisJCWVsc2l6ZSA9IDQ7CisJCWlmIChpbnN0cnVjdGlvbiAmIDB4ODApCisJCQllbHNpemUgPSA4OworCiAJCWZsYWdzID0gMDsKKwkJaWYgKHJlZ3MtPm1zciAmIE1TUl9MRSkKKwkJCWZsYWdzIHw9IFNXOwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDEwMCkKIAkJCWZsYWdzIHw9IFNUOwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDA0MCkKQEAgLTc4Nyw3ICs4MTYsNyBAQAogCQkJbmIgPSA4OwogCQl9CiAJCVBQQ19XQVJOX0FMSUdOTUVOVCh2c3gsIHJlZ3MpOwotCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIpOworCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIsIGVsc2l6ZSk7CiAJfQogI2VuZGlmCiAJLyogQSBzaXplIG9mIDAgaW5kaWNhdGVzIGFuIGluc3RydWN0aW9uIHdlIGRvbid0IHN1cHBvcnQsIHdpdGgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAwODEyYjBmLi5hNmMyYjYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xOTAsNiArMTkwLDExIEBACiAJREVGSU5FKFBBQ0FfU1lTVEVNX1RJTUUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc3lzdGVtX3RpbWUpKTsKIAlERUZJTkUoUEFDQV9EQVRBX09GRlNFVCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBkYXRhX29mZnNldCkpOwogCURFRklORShQQUNBX1RSQVBfU0FWRSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCB0cmFwX3NhdmUpKTsKKyNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSCisJREVGSU5FKFBBQ0FfS1ZNX0lOX0dVRVNULCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGt2bV9pbl9ndWVzdCkpOworCURFRklORShQQUNBX0tWTV9TTEIsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga3ZtX3NsYikpOworCURFRklORShQQUNBX0tWTV9TTEJfTUFYLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGt2bV9zbGJfbWF4KSk7CisjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCS8qIFJUQVMgKi8KQEAgLTM5OCwxNCArNDAzLDI0IEBACiAJREVGSU5FKFZDUFVfTEFTVF9JTlNULCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gubGFzdF9pbnN0KSk7CiAJREVGSU5FKFZDUFVfRkFVTFRfREVBUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmZhdWx0X2RlYXIpKTsKIAlERUZJTkUoVkNQVV9GQVVMVF9FU1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5mYXVsdF9lc3IpKTsKKworCS8qIGJvb2szc182NCAqLworI2lmZGVmIENPTkZJR19QUEM2NAorCURFRklORShWQ1BVX0ZBVUxUX0RTSVNSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZmF1bHRfZHNpc3IpKTsKKwlERUZJTkUoVkNQVV9IT1NUX1JFVElQLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9yZXRpcCkpOworCURFRklORShWQ1BVX0hPU1RfUjIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3IyKSk7CisJREVGSU5FKFZDUFVfSE9TVF9NU1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X21zcikpOworCURFRklORShWQ1BVX1NIQURPV19NU1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFkb3dfbXNyKSk7CisJREVGSU5FKFZDUFVfVFJBTVBPTElORV9MT1dNRU0sIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC50cmFtcG9saW5lX2xvd21lbSkpOworCURFRklORShWQ1BVX1RSQU1QT0xJTkVfRU5URVIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC50cmFtcG9saW5lX2VudGVyKSk7CisJREVGSU5FKFZDUFVfSElHSE1FTV9IQU5ETEVSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaGlnaG1lbV9oYW5kbGVyKSk7CisJREVGSU5FKFZDUFVfSEZMQUdTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaGZsYWdzKSk7CisjZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR180NHgKIAlERUZJTkUoUEdEX1RfTE9HMiwgUEdEX1RfTE9HMik7CiAJREVGSU5FKFBURV9UX0xPRzIsIFBURV9UX0xPRzIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0ZTTF9CT09LRQotCURFRklORShUTEJDQU1fU0laRSwgc2l6ZW9mKHN0cnVjdCB0bGJjYW0pKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tWTV9FWElUX1RJTUlORwogCURFRklORShWQ1BVX1RJTUlOR19FWElUX1RCVSwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDAzYzg2MmIuLjJmYzgyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTY5Nyw5ICs2OTcsOSBAQAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKIAl9LAotCXsJLyogNzUwQ0wgKi8KLQkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwZjAsCi0JCS5wdnJfdmFsdWUJCT0gMHgwMDA4NzAxMCwKKwl7CS8qIDc1MENMIChhbmQgIkJyb2Fkd2F5IikgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwZTAsCisJCS5wdnJfdmFsdWUJCT0gMHgwMDA4NzAwMCwKIAkJLmNwdV9uYW1lCQk9ICI3NTBDTCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfNzUwQ0wsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSIHwgUFBDX0ZFQVRVUkVfUFBDX0xFLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCmluZGV4IDBhODQzOWEuLjZmNDYxM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKQEAgLTM3Myw3ICszNzMsNyBAQAogCWhhcmRfaXJxX2Rpc2FibGUoKTsKIAogCWZvcl9lYWNoX2lycShpKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CiAKIAkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKQogCQkJZGVzYy0+Y2hpcC0+ZW9pKGkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtc3dpb3RsYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtc3dpb3RsYi5jCmluZGV4IGU5NmNiYmQuLjU5YzkyODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLXN3aW90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1zd2lvdGxiLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAKLWludCBzd2lvdGxiIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBpbnQgcHBjX3N3aW90bGJfZW5hYmxlOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IGM3ZWI0ZTAuLmUzYmU5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTQxLDYgKzQxLDcgQEAKIAkuID0gMHgyMDAKIF9tYWNoaW5lX2NoZWNrX3BTZXJpZXM6CiAJSE1UX01FRElVTQorCURPX0tWTQkweDIwMAogCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMJCS8qIHNhdmUgcjEzICovCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCiAKQEAgLTQ4LDYgKzQ5LDcgQEAKIAkuZ2xvYmwgZGF0YV9hY2Nlc3NfcFNlcmllcwogZGF0YV9hY2Nlc3NfcFNlcmllczoKIAlITVRfTUVESVVNCisJRE9fS1ZNCTB4MzAwCiAJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMwogQkVHSU5fRlRSX1NFQ1RJT04KIAltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EKQEAgLTc3LDYgKzc5LDcgQEAKIAkuZ2xvYmwgZGF0YV9hY2Nlc3Nfc2xiX3BTZXJpZXMKIGRhdGFfYWNjZXNzX3NsYl9wU2VyaWVzOgogCUhNVF9NRURJVU0KKwlET19LVk0JMHgzODAKIAltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCiAJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCiAJc3RkCXIzLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQpAQCAtMTE1LDYgKzExOCw3IEBACiAJLmdsb2JsIGluc3RydWN0aW9uX2FjY2Vzc19zbGJfcFNlcmllcwogaW5zdHJ1Y3Rpb25fYWNjZXNzX3NsYl9wU2VyaWVzOgogCUhNVF9NRURJVU0KKwlET19LVk0JMHg0ODAKIAltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCiAJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCiAJc3RkCXIzLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQpAQCAtMTU0LDYgKzE1OCw3IEBACiAJLmdsb2JsCXN5c3RlbV9jYWxsX3BTZXJpZXMKIHN5c3RlbV9jYWxsX3BTZXJpZXM6CiAJSE1UX01FRElVTQorCURPX0tWTQkweGMwMAogQkVHSU5fRlRSX1NFQ1RJT04KIAljbXBkaQlyMCwweDFlYmUKIAliZXEtCTFmCkBAIC0xODcsMTQgKzE5MiwxNyBAQAogCSAqLwogcGVyZm9ybWFuY2VfbW9uaXRvcl9wU2VyaWVzXzE6CiAJLiA9IDB4ZjAwCisJRE9fS1ZNCTB4ZjAwCiAJYglwZXJmb3JtYW5jZV9tb25pdG9yX3BTZXJpZXMKIAogYWx0aXZlY191bmF2YWlsYWJsZV9wU2VyaWVzXzE6CiAJLiA9IDB4ZjIwCisJRE9fS1ZNCTB4ZjIwCiAJYglhbHRpdmVjX3VuYXZhaWxhYmxlX3BTZXJpZXMKIAogdnN4X3VuYXZhaWxhYmxlX3BTZXJpZXNfMToKIAkuID0gMHhmNDAKKwlET19LVk0JMHhmNDAKIAliCXZzeF91bmF2YWlsYWJsZV9wU2VyaWVzCiAKICNpZmRlZiBDT05GSUdfQ0JFX1JBUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCA4MjljM2ZlLi5lMDI1ZTg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTY0LDYgKzE2NCw5IEBACiAjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19DUE0KIAlibAlzZXR1cF9jcG1fYmF0CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPCisJYmwJc2V0dXBfdXNiZ2Vja29fYmF0CisjZW5kaWYKIAogLyoKICAqIENhbGwgc2V0dXBfY3B1IGZvciBDUFUgMCBhbmQgaW5pdGlhbGl6ZSA2eHggSWRsZQpAQCAtMTIwMyw2ICsxMjA2LDI4IEBACiAJYmxyCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfVVNCR0VDS08KK3NldHVwX3VzYmdlY2tvX2JhdDoKKwkvKiBwcmVwYXJlIGEgQkFUIGZvciBlYXJseSBpbyAqLworI2lmIGRlZmluZWQoQ09ORklHX0dBTUVDVUJFKQorCWxpcwlyOCwgMHgwYzAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19XSUkpCisJbGlzCXI4LCAweDBkMDAKKyNlbHNlCisjZXJyb3IgSW52YWxpZCBwbGF0Zm9ybSBmb3IgVVNCIEdlY2tvIGJhc2VkIGVhcmx5IGRlYnVnZ2luZy4KKyNlbmRpZgorCS8qCisJICogVGhlIHZpcnR1YWwgYWRkcmVzcyB1c2VkIG11c3QgbWF0Y2ggdGhlIHZpcnR1YWwgYWRkcmVzcworCSAqIGFzc29jaWF0ZWQgdG8gdGhlIGZpeG1hcCBlbnRyeSBGSVhfRUFSTFlfREVCVUdfQkFTRS4KKwkgKi8KKwlsaXMJcjExLCAweGZmZmUJLyogdG9wIDEyOEsgKi8KKwlvcmkJcjgsIHI4LCAweDAwMmEJLyogdW5jYWNoZWQsIGd1YXJkZWQgLHJ3ICovCisJb3JpCXIxMSwgcjExLCAweDIJLyogMTI4SywgVnM9MSwgVnA9MCAqLworCW10c3ByCVNQUk5fREJBVDFMLCByOAorCW10c3ByCVNQUk5fREJBVDFVLCByMTEKKwlibHIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHXzgyNjAKIC8qIEp1bXAgaW50byB0aGUgc3lzdGVtIHJlc2V0IGZvciB0aGUgcm9tLgogICogV2UgZmlyc3QgZGlzYWJsZSB0aGUgTU1VLCBhbmQgdGhlbiBqdW1wIHRvIHRoZSBST00gcmVzZXQgYWRkcmVzcy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggYzM4YWZkYi4uOTI1ODA3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vcGFnZV82NC5oPgogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzXzY0X2FzbS5oPgogCiAvKiBUaGUgcGh5c2ljYWwgbWVtb3J5IGlzIGxheWVkIG91dCBzdWNoIHRoYXQgdGhlIHNlY29uZGFyeSBwcm9jZXNzb3IKICAqIHNwaW4gY29kZSBzaXRzIGF0IDB4MDAwMC4uLjB4MDBmZi4gT24gc2VydmVyLCB0aGUgdmVjdG9ycyBmb2xsb3cKQEAgLTE2NSw2ICsxNjYsMTIgQEAKICNpbmNsdWRlICJleGNlcHRpb25zLTY0cy5TIgogI2VuZGlmCiAKKy8qIEtWTSB0cmFtcG9saW5lIGNvZGUgbmVlZHMgdG8gYmUgY2xvc2UgdG8gdGhlIGludGVycnVwdCBoYW5kbGVycyAqLworCisjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUgorI2luY2x1ZGUgIi4uL2t2bS9ib29rM3NfNjRfcm1oYW5kbGVycy5TIgorI2VuZGlmCisKIF9HTE9CQUwoZ2VuZXJpY19zZWNvbmRhcnlfdGhyZWFkX2luaXQpCiAJbXIJcjI0LHIzCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUwppbmRleCA2ZGVkMTlkLi42NzhmOThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCkBAIC0yMDYsNiArMjA2LDggQEAKIAlFWENFUFRJT05fUFJPTE9HCiAJbWZzcHIgcjQsU1BSTl9EQVIKIAlzdHcgcjQsX0RBUihyMTEpCisJbGkgcjUsMHgwMGYwCisJbXRzcHIgU1BSTl9EQVIscjUJLyogVGFnIERBUiwgdG8gYmUgdXNlZCBpbiBEVExCIEVycm9yICovCiAJbWZzcHIgcjUsU1BSTl9EU0lTUgogCXN0dyByNSxfRFNJU1IocjExKQogCWFkZGkgcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKQEAgLTIyMiw2ICsyMjQsOCBAQAogCXN0dwlyMTAsX0RTSVNSKHIxMSkKIAltcglyNSxyMTAKIAltZnNwcglyNCxTUFJOX0RBUgorCWxpCXIxMCwweDAwZjAKKwltdHNwcglTUFJOX0RBUixyMTAJLyogVGFnIERBUiwgdG8gYmUgdXNlZCBpbiBEVExCIEVycm9yICovCiAJRVhDX1hGRVJfRUVfTElURSgweDMwMCwgaGFuZGxlX3BhZ2VfZmF1bHQpCiAKIC8qIEluc3RydWN0aW9uIGFjY2VzcyBleGNlcHRpb24uCkBAIC0yNDQsNiArMjQ4LDggQEAKIAlFWENFUFRJT05fUFJPTE9HCiAJbWZzcHIJcjQsU1BSTl9EQVIKIAlzdHcJcjQsX0RBUihyMTEpCisJbGkJcjUsMHgwMGYwCisJbXRzcHIJU1BSTl9EQVIscjUJLyogVGFnIERBUiwgdG8gYmUgdXNlZCBpbiBEVExCIEVycm9yICovCiAJbWZzcHIJcjUsU1BSTl9EU0lTUgogCXN0dwlyNSxfRFNJU1IocjExKQogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKQEAgLTMzMywyNiArMzM5LDIwIEBACiAJbWZzcHIJcjExLCBTUFJOX01EX1RXQwkvKiAuLi4uYW5kIGdldCB0aGUgcHRlIGFkZHJlc3MgKi8KIAlsd3oJcjEwLCAwKHIxMSkJLyogR2V0IHRoZSBwdGUgKi8KIAotI2lmZGVmIENPTkZJR19TV0FQCi0JLyogZG8gbm90IHNldCB0aGUgX1BBR0VfQUNDRVNTRUQgYml0IG9mIGEgbm9uLXByZXNlbnQgcGFnZSAqLwotCWFuZGkuCXIxMSwgcjEwLCBfUEFHRV9QUkVTRU5UCi0JYmVxCTRmCi0Jb3JpCXIxMCwgcjEwLCBfUEFHRV9BQ0NFU1NFRAotCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogZ2V0IHRoZSBwdGUgYWRkcmVzcyBhZ2FpbiAqLwotCXN0dwlyMTAsIDAocjExKQotNDoKLSNlbHNlCi0Jb3JpCXIxMCwgcjEwLCBfUEFHRV9BQ0NFU1NFRAotCXN0dwlyMTAsIDAocjExKQotI2VuZGlmCisJYW5kaS4JcjExLCByMTAsIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUFJFU0VOVAorCWNtcHdpCWNyMCwgcjExLCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1BSRVNFTlQKKwlibmUtCWNyMCwgMmYKKworCS8qIENsZWFyIFBQIGxzYiwgMHg0MDAgKi8KKwlybHdpbm0gCXIxMCwgcjEwLCAwLCAyMiwgMjAKIAogCS8qIFRoZSBMaW51eCBQVEUgd29uJ3QgZ28gZXhhY3RseSBpbnRvIHRoZSBNTVUgVExCLgotCSAqIFNvZnR3YXJlIGluZGljYXRvciBiaXRzIDIxLCAyMiBhbmQgMjggbXVzdCBiZSBjbGVhci4KKwkgKiBTb2Z0d2FyZSBpbmRpY2F0b3IgYml0cyAyMiBhbmQgMjggbXVzdCBiZSBjbGVhci4KIAkgKiBTb2Z0d2FyZSBpbmRpY2F0b3IgYml0cyAyNCwgMjUsIDI2LCBhbmQgMjcgbXVzdCBiZQogCSAqIHNldC4gIEFsbCBvdGhlciBMaW51eCBQVEUgYml0cyBjb250cm9sIHRoZSBiZWhhdmlvcgogCSAqIG9mIHRoZSBNTVUuCiAJICovCi0yOglsaQlyMTEsIDB4MDBmMAorCWxpCXIxMSwgMHgwMGYwCiAJcmx3aW1pCXIxMCwgcjExLCAwLCAyNCwgMjgJLyogU2V0IDI0LTI3LCBjbGVhciAyOCAqLwogCURPXzh4eF9DUFU2KDB4MmQ4MCwgcjMpCiAJbXRzcHIJU1BSTl9NSV9SUE4sIHIxMAkvKiBVcGRhdGUgVExCIGVudHJ5ICovCkBAIC0zNjUsNiArMzY1LDIyIEBACiAJbHd6CXIzLCA4KHIwKQogI2VuZGlmCiAJcmZpCisyOgorCW1mc3ByCXIxMSwgU1BSTl9TUlIxCisJLyogY2xlYXIgYWxsIGVycm9yIGJpdHMgYXMgVExCIE1pc3MKKwkgKiBzZXRzIGEgZmV3IHVuY29uZGl0aW9uYWxseQorCSovCisJcmx3aW5tCXIxMSwgcjExLCAwLCAweGZmZmYKKwltdHNwcglTUFJOX1NSUjEsIHIxMQorCisJbWZzcHIJcjEwLCBTUFJOX01fVFcJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KKwlsd3oJcjExLCAwKHIwKQorCW10Y3IJcjExCisJbHd6CXIxMSwgNChyMCkKKyNpZmRlZiBDT05GSUdfOHh4X0NQVTYKKwlsd3oJcjMsIDgocjApCisjZW5kaWYKKwliCUluc3RydWN0aW9uQWNjZXNzCiAKIAkuID0gMHgxMjAwCiBEYXRhU3RvcmVUTEJNaXNzOgpAQCAtNDA2LDI5ICs0MjIsNDUgQEAKIAkgKiBhYm92ZS4KIAkgKi8KIAlybHdpbWkJcjExLCByMTAsIDAsIDI3LCAyNworCS8qIEluc2VydCB0aGUgV3JpdGVUaHJ1IGZsYWcgaW50byB0aGUgVFdDIGZyb20gdGhlIExpbnV4IFBURS4KKwkgKiBJdCBpcyBiaXQgMjUgaW4gdGhlIExpbnV4IFBURSBhbmQgYml0IDMwIGluIHRoZSBUV0MKKwkgKi8KKwlybHdpbWkJcjExLCByMTAsIDMyLTUsIDMwLCAzMAogCURPXzh4eF9DUFU2KDB4M2I4MCwgcjMpCiAJbXRzcHIJU1BSTl9NRF9UV0MsIHIxMQogCi0jaWZkZWYgQ09ORklHX1NXQVAKLQkvKiBkbyBub3Qgc2V0IHRoZSBfUEFHRV9BQ0NFU1NFRCBiaXQgb2YgYSBub24tcHJlc2VudCBwYWdlICovCi0JYW5kaS4JcjExLCByMTAsIF9QQUdFX1BSRVNFTlQKLQliZXEJNGYKLQlvcmkJcjEwLCByMTAsIF9QQUdFX0FDQ0VTU0VECi00OgotCS8qIGFuZCB1cGRhdGUgcHRlIGluIHRhYmxlICovCi0jZWxzZQotCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKLSNlbmRpZgotCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogZ2V0IHRoZSBwdGUgYWRkcmVzcyBhZ2FpbiAqLwotCXN0dwlyMTAsIDAocjExKQorCS8qIEJvdGggX1BBR0VfQUNDRVNTRUQgYW5kIF9QQUdFX1BSRVNFTlQgaGFzIHRvIGJlIHNldC4KKwkgKiBXZSBhbHNvIG5lZWQgdG8ga25vdyBpZiB0aGUgaW5zbiBpcyBhIGxvYWQvc3RvcmUsIHNvOgorCSAqIENsZWFyIF9QQUdFX1BSRVNFTlQgYW5kIGxvYWQgdGhhdCB3aGljaCB3aWxsCisJICogdHJhcCBpbnRvIERUTEIgRXJyb3Igd2l0aCBzdG9yZSBiaXQgc2V0IGFjY29yZGlubHkuCisJICovCisJLyogUFJFU0VOVD0weDEsIEFDQ0VTU0VEPTB4MjAKKwkgKiByMTEgPSAoKHIxMCAmIFBSRVNFTlQpICYgKChyMTAgJiBBQ0NFU1NFRCkgPj4gNSkpOworCSAqIHIxMCA9IChyMTAgJiB+UFJFU0VOVCkgfCByMTE7CisJICovCisJcmx3aW5tCXIxMSwgcjEwLCAzMi01LCBfUEFHRV9QUkVTRU5UCisJYW5kCXIxMSwgcjExLCByMTAKKwlybHdpbWkJcjEwLCByMTEsIDAsIF9QQUdFX1BSRVNFTlQKKworCS8qIEhvbm91ciBrZXJuZWwgUk8sIFVzZXIgTkEgKi8KKwkvKiAweDIwMCA9PSBFeHRlbmRlZCBlbmNvZGluZywgYml0IDIyICovCisJLyogcjExID0gIChyMTAgJiBfUEFHRV9VU0VSKSA+PiAyICovCisJcmx3aW5tCXIxMSwgcjEwLCAzMi0yLCAweDIwMAorCW9yCXIxMCwgcjExLCByMTAKKwkvKiByMTEgPSAgKHIxMCAmIF9QQUdFX1JXKSA+PiAxICovCisJcmx3aW5tCXIxMSwgcjEwLCAzMi0xLCAweDIwMAorCW9yCXIxMCwgcjExLCByMTAKKwkvKiBpbnZlcnQgUlcgYW5kIDB4MjAwIGJpdHMgKi8KKwl4b3JpCXIxMCwgcjEwLCBfUEFHRV9SVyB8IDB4MjAwCiAKIAkvKiBUaGUgTGludXggUFRFIHdvbid0IGdvIGV4YWN0bHkgaW50byB0aGUgTU1VIFRMQi4KLQkgKiBTb2Z0d2FyZSBpbmRpY2F0b3IgYml0cyAyMSwgMjIgYW5kIDI4IG11c3QgYmUgY2xlYXIuCisJICogU29mdHdhcmUgaW5kaWNhdG9yIGJpdHMgMjIgYW5kIDI4IG11c3QgYmUgY2xlYXIuCiAJICogU29mdHdhcmUgaW5kaWNhdG9yIGJpdHMgMjQsIDI1LCAyNiwgYW5kIDI3IG11c3QgYmUKIAkgKiBzZXQuICBBbGwgb3RoZXIgTGludXggUFRFIGJpdHMgY29udHJvbCB0aGUgYmVoYXZpb3IKIAkgKiBvZiB0aGUgTU1VLgogCSAqLwogMjoJbGkJcjExLCAweDAwZjAKKwltdHNwcglTUFJOX0RBUixyMTEJLyogVGFnIERBUiAqLwogCXJsd2ltaQlyMTAsIHIxMSwgMCwgMjQsIDI4CS8qIFNldCAyNC0yNywgY2xlYXIgMjggKi8KIAlET184eHhfQ1BVNigweDNkODAsIHIzKQogCW10c3ByCVNQUk5fTURfUlBOLCByMTAJLyogVXBkYXRlIFRMQiBlbnRyeSAqLwpAQCAtNDY5LDk3ICs1MDEsMTAgQEAKIAlzdHcJcjEwLCAwKHIwKQogCXN0dwlyMTEsIDQocjApCiAKLQkvKiBGaXJzdCwgbWFrZSBzdXJlIHRoaXMgd2FzIGEgc3RvcmUgb3BlcmF0aW9uLgotCSovCi0JbWZzcHIJcjEwLCBTUFJOX0RTSVNSCi0JYW5kaXMuCXIxMSwgcjEwLCAweDAyMDAJLyogSWYgc2V0LCBpbmRpY2F0ZXMgc3RvcmUgb3AgKi8KLQliZXEJMmYKLQotCS8qIFRoZSBFQSBvZiBhIGRhdGEgVExCIG1pc3MgaXMgYXV0b21hdGljYWxseSBzdG9yZWQgaW4gdGhlIE1EX0VQTgotCSAqIHJlZ2lzdGVyLiAgVGhlIEVBIG9mIGEgZGF0YSBUTEIgZXJyb3IgaXMgYXV0b21hdGljYWxseSBzdG9yZWQgaW4KLQkgKiB0aGUgREFSLCBidXQgbm90IHRoZSBNRF9FUE4gcmVnaXN0ZXIuICBXZSBtdXN0IGNvcHkgdGhlIDIwIG1vc3QKLQkgKiBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBFQSBmcm9tIHRoZSBEQVIgdG8gTURfRVBOIGJlZm9yZSB3ZQotCSAqIHN0YXJ0IHdhbGtpbmcgdGhlIHBhZ2UgdGFibGVzLiAgV2UgYWxzbyBuZWVkIHRvIGNvcHkgdGhlIENBU0lECi0JICogdmFsdWUgZnJvbSB0aGUgTV9DQVNJRCByZWdpc3Rlci4KLQkgKiBBZGRlbmR1bTogIFRoZSBFQSBvZiBhIGRhdGEgVExCIGVycm9yIGlzIF9zdXBwb3NlZF8gdG8gYmUgc3RvcmVkCi0JICogaW4gREFSLCBidXQgaXQgc2VlbXMgdGhhdCB0aGlzIGRvZXNuJ3QgaGFwcGVuIGluIHNvbWUgY2FzZXMsIHN1Y2gKLQkgKiBhcyB3aGVuIHRoZSBlcnJvciBpcyBkdWUgdG8gYSBkY2JpIGluc3RydWN0aW9uIHRvIGEgcGFnZSB3aXRoIGEKLQkgKiBUTEIgdGhhdCBkb2Vzbid0IGhhdmUgdGhlIGNoYW5nZWQgYml0IHNldC4gIEluIHN1Y2ggY2FzZXMsIHRoZXJlCi0JICogZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFueSB3YXkgIHRvIHJlY292ZXIgdGhlIEVBIG9mIHRoZSBlcnJvcgotCSAqIHNpbmNlIGl0IGlzIG5laXRoZXIgaW4gREFSIG5vciBNRF9FUE4uICBBcyBhIHdvcmthcm91bmQsIHRoZQotCSAqIF9QQUdFX0hXV1JJVEUgYml0IGlzIHNldCBmb3IgYWxsIGtlcm5lbCBkYXRhIHBhZ2VzIHdoZW4gdGhlIFBURXMKLQkgKiBhcmUgaW5pdGlhbGl6ZWQgaW4gbWFwaW5fcmFtKCkuICBUaGlzIHdpbGwgYXZvaWQgdGhlIHByb2JsZW0sCi0JICogYXNzdW1pbmcgd2Ugb25seSB1c2UgdGhlIGRjYmkgaW5zdHJ1Y3Rpb24gb24ga2VybmVsIGFkZHJlc3Nlcy4KLQkgKi8KIAltZnNwcglyMTAsIFNQUk5fREFSCi0Jcmx3aW5tCXIxMSwgcjEwLCAwLCAwLCAxOQotCW9yaQlyMTEsIHIxMSwgTURfRVZBTElECi0JbWZzcHIJcjEwLCBTUFJOX01fQ0FTSUQKLQlybHdpbWkJcjExLCByMTAsIDAsIDI4LCAzMQotCURPXzh4eF9DUFU2KDB4Mzc4MCwgcjMpCi0JbXRzcHIJU1BSTl9NRF9FUE4sIHIxMQotCi0JbWZzcHIJcjEwLCBTUFJOX01fVFdCCS8qIEdldCBsZXZlbCAxIHRhYmxlIGVudHJ5IGFkZHJlc3MgKi8KLQotCS8qIElmIHdlIGFyZSBmYXVsdGluZyBhIGtlcm5lbCBhZGRyZXNzLCB3ZSBoYXZlIHRvIHVzZSB0aGUKLQkgKiBrZXJuZWwgcGFnZSB0YWJsZXMuCi0JICovCi0JYW5kaS4JcjExLCByMTAsIDB4MDgwMAotCWJlcQkzZgotCWxpcwlyMTEsIHN3YXBwZXJfcGdfZGlyQGgKLQlvcmkJcjExLCByMTEsIHN3YXBwZXJfcGdfZGlyQGwKLQlybHdpbWkJcjEwLCByMTEsIDAsIDIsIDE5Ci0zOgotCWx3eglyMTEsIDAocjEwKQkvKiBHZXQgdGhlIGxldmVsIDEgZW50cnkgKi8KLQlybHdpbm0uCXIxMCwgcjExLDAsMCwxOQkvKiBFeHRyYWN0IHBhZ2UgZGVzY3JpcHRvciBwYWdlIGFkZHJlc3MgKi8KLQliZXEJMmYJCS8qIElmIHplcm8sIGJhaWwgKi8KLQotCS8qIFdlIGhhdmUgYSBwdGUgdGFibGUsIHNvIGZldGNoIHRoZSBwdGUgZnJvbSB0aGUgdGFibGUuCi0JICovCi0Jb3JpCXIxMSwgcjExLCAxCQkvKiBTZXQgdmFsaWQgYml0IGluIHBoeXNpY2FsIEwyIHBhZ2UgKi8KLQlET184eHhfQ1BVNigweDNiODAsIHIzKQotCW10c3ByCVNQUk5fTURfVFdDLCByMTEJCS8qIExvYWQgcHRlIHRhYmxlIGJhc2UgYWRkcmVzcyAqLwotCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJCS8qIC4uLi5hbmQgZ2V0IHRoZSBwdGUgYWRkcmVzcyAqLwotCWx3eglyMTAsIDAocjExKQkJLyogR2V0IHRoZSBwdGUgKi8KLQotCWFuZGkuCXIxMSwgcjEwLCBfUEFHRV9SVwkvKiBJcyBpdCB3cml0ZWFibGU/ICovCi0JYmVxCTJmCQkJLyogQmFpbCBvdXQgaWYgbm90ICovCi0KLQkvKiBVcGRhdGUgJ2NoYW5nZWQnLCBhbW9uZyBvdGhlcnMuCi0JKi8KLSNpZmRlZiBDT05GSUdfU1dBUAotCW9yaQlyMTAsIHIxMCwgX1BBR0VfRElSVFl8X1BBR0VfSFdXUklURQotCS8qIGRvIG5vdCBzZXQgdGhlIF9QQUdFX0FDQ0VTU0VEIGJpdCBvZiBhIG5vbi1wcmVzZW50IHBhZ2UgKi8KLQlhbmRpLglyMTEsIHIxMCwgX1BBR0VfUFJFU0VOVAotCWJlcQk0ZgotCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKLTQ6Ci0jZWxzZQotCW9yaQlyMTAsIHIxMCwgX1BBR0VfRElSVFl8X1BBR0VfQUNDRVNTRUR8X1BBR0VfSFdXUklURQotI2VuZGlmCi0JbWZzcHIJcjExLCBTUFJOX01EX1RXQwkJLyogR2V0IHB0ZSBhZGRyZXNzIGFnYWluICovCi0Jc3R3CXIxMCwgMChyMTEpCQkvKiBhbmQgdXBkYXRlIHB0ZSBpbiB0YWJsZSAqLwotCi0JLyogVGhlIExpbnV4IFBURSB3b24ndCBnbyBleGFjdGx5IGludG8gdGhlIE1NVSBUTEIuCi0JICogU29mdHdhcmUgaW5kaWNhdG9yIGJpdHMgMjEsIDIyIGFuZCAyOCBtdXN0IGJlIGNsZWFyLgotCSAqIFNvZnR3YXJlIGluZGljYXRvciBiaXRzIDI0LCAyNSwgMjYsIGFuZCAyNyBtdXN0IGJlCi0JICogc2V0LiAgQWxsIG90aGVyIExpbnV4IFBURSBiaXRzIGNvbnRyb2wgdGhlIGJlaGF2aW9yCi0JICogb2YgdGhlIE1NVS4KLQkgKi8KLQlsaQlyMTEsIDB4MDBmMAotCXJsd2ltaQlyMTAsIHIxMSwgMCwgMjQsIDI4CS8qIFNldCAyNC0yNywgY2xlYXIgMjggKi8KLQlET184eHhfQ1BVNigweDNkODAsIHIzKQotCW10c3ByCVNQUk5fTURfUlBOLCByMTAJLyogVXBkYXRlIFRMQiBlbnRyeSAqLwotCi0JbWZzcHIJcjEwLCBTUFJOX01fVFcJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KLQlsd3oJcjExLCAwKHIwKQotCW10Y3IJcjExCi0JbHd6CXIxMSwgNChyMCkKLSNpZmRlZiBDT05GSUdfOHh4X0NQVTYKLQlsd3oJcjMsIDgocjApCi0jZW5kaWYKLQlyZmkKLTI6CisJY21wd2kJY3IwLCByMTAsIDB4MDBmMAorCWJlcS0JRml4dXBEQVIJLyogbXVzdCBiZSBhIGJ1Z2d5IGRjYlgsIGljYmkgaW5zbi4gKi8KK0RBUkZpeGVkOi8qIFJldHVybiBmcm9tIGRjYnggaW5zdHJ1Y3Rpb24gYnVnIHdvcmthcm91bmQsIHIxMCBob2xkcyB2YWx1ZSBvZiBEQVIgKi8KIAltZnNwcglyMTAsIFNQUk5fTV9UVwkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwogCWx3eglyMTEsIDAocjApCiAJbXRjcglyMTEKQEAgLTU4OCw2ICs1MzMsMTQwIEBACiAKIAkuID0gMHgyMDAwCiAKKy8qIFRoaXMgaXMgdGhlIHByb2NlZHVyZSB0byBjYWxjdWxhdGUgdGhlIGRhdGEgRUEgZm9yIGJ1Z2d5IGRjYngsZGNiaSBpbnN0cnVjdGlvbnMKKyAqIGJ5IGRlY29kaW5nIHRoZSByZWdpc3RlcnMgdXNlZCBieSB0aGUgZGNieCBpbnN0cnVjdGlvbiBhbmQgYWRkaW5nIHRoZW0uCisgKiBEQVIgaXMgc2V0IHRvIHRoZSBjYWxjdWxhdGVkIGFkZHJlc3MgYW5kIHIxMCBhbHNvIGhvbGRzIHRoZSBFQSBvbiBleGl0LgorICovCisgLyogZGVmaW5lIGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBzZWxmIG1vZGlmeWluZyBjb2RlICovCisjZGVmaW5lIE5PX1NFTEZfTU9ESUZZSU5HX0NPREUKK0ZpeHVwREFSOi8qIEVudHJ5IHBvaW50IGZvciBkY2J4IHdvcmthcm91bmQuICovCisJLyogZmV0Y2ggaW5zdHJ1Y3Rpb24gZnJvbSBtZW1vcnkuICovCisJbWZzcHIJcjEwLCBTUFJOX1NSUjAKKwlET184eHhfQ1BVNigweDM3ODAsIHIzKQorCW10c3ByCVNQUk5fTURfRVBOLCByMTAKKwltZnNwcglyMTEsIFNQUk5fTV9UV0IJLyogR2V0IGxldmVsIDEgdGFibGUgZW50cnkgYWRkcmVzcyAqLworCWNtcGx3aQljcjAsIHIxMSwgMHgwODAwCisJYmx0LQkzZgkJLyogQnJhbmNoIGlmIHVzZXIgc3BhY2UgKi8KKwlsaXMJcjExLCAoc3dhcHBlcl9wZ19kaXItUEFHRV9PRkZTRVQpQGgKKwlvcmkJcjExLCByMTEsIChzd2FwcGVyX3BnX2Rpci1QQUdFX09GRlNFVClAbAorCXJsd2ltaQlyMTEsIHIxMCwgMzItMjAsIDB4ZmZjIC8qIHIxMSA9IHIxMSZ+MHhmZmN8KHIxMD4+MjApJjB4ZmZjICovCiszOglsd3oJcjExLCAwKHIxMSkJLyogR2V0IHRoZSBsZXZlbCAxIGVudHJ5ICovCisJRE9fOHh4X0NQVTYoMHgzYjgwLCByMykKKwltdHNwcglTUFJOX01EX1RXQywgcjExCS8qIExvYWQgcHRlIHRhYmxlIGJhc2UgYWRkcmVzcyAqLworCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogLi4uLmFuZCBnZXQgdGhlIHB0ZSBhZGRyZXNzICovCisJbHd6CXIxMSwgMChyMTEpCS8qIEdldCB0aGUgcHRlICovCisJLyogY29uY2F0IHBoeXNpY2FsIHBhZ2UgYWRkcmVzcyhyMTEpIGFuZCBwYWdlIG9mZnNldChyMTApICovCisJcmx3aW1pCXIxMSwgcjEwLCAwLCAyMCwgMzEKKwlsd3oJcjExLDAocjExKQorLyogQ2hlY2sgaWYgaXQgcmVhbGx5IGlzIGEgZGNieCBpbnN0cnVjdGlvbi4gKi8KKy8qIGRjYnQgYW5kIGRjYnRzdCBkb2VzIG5vdCBnZW5lcmF0ZSBEVExCIE1pc3Nlcy9FcnJvcnMsCisgKiBubyBuZWVkIHRvIGluY2x1ZGUgdGhlbSBoZXJlICovCisJc3J3aQlyMTAsIHIxMSwgMjYJLyogY2hlY2sgaWYgbWFqb3IgT1AgY29kZSBpcyAzMSAqLworCWNtcHdpCWNyMCwgcjEwLCAzMQorCWJuZS0JMTQxZgorCXJsd2lubQlyMTAsIHIxMSwgMCwgMjEsIDMwCisJY21wd2kJY3IwLCByMTAsIDIwMjgJLyogSXMgZGNiej8gKi8KKwliZXErCTE0MmYKKwljbXB3aQljcjAsIHIxMCwgOTQwCS8qIElzIGRjYmk/ICovCisJYmVxKwkxNDJmCisJY21wd2kJY3IwLCByMTAsIDEwOAkvKiBJcyBkY2JzdD8gKi8KKwliZXErCTE0NGYJCS8qIEZpeCB1cCBzdG9yZSBiaXQhICovCisJY21wd2kJY3IwLCByMTAsIDE3MgkvKiBJcyBkY2JmPyAqLworCWJlcSsJMTQyZgorCWNtcHdpCWNyMCwgcjEwLCAxOTY0CS8qIElzIGljYmk/ICovCisJYmVxKwkxNDJmCisxNDE6CW1mc3ByCXIxMCwgU1BSTl9EQVIJLyogcjEwIG11c3QgaG9sZCBEQVIgYXQgZXhpdCAqLworCWIJREFSRml4ZWQJLyogTm9wZSwgZ28gYmFjayB0byBub3JtYWwgVExCIHByb2Nlc3NpbmcgKi8KKworMTQ0OgltZnNwcglyMTAsIFNQUk5fRFNJU1IKKwlybHdpbm0JcjEwLCByMTAsMCw3LDUJLyogQ2xlYXIgc3RvcmUgYml0IGZvciBidWdneSBkY2JzdCBpbnNuICovCisJbXRzcHIJU1BSTl9EU0lTUiwgcjEwCisxNDI6CS8qIGNvbnRpbnVlLCBpdCB3YXMgYSBkY2J4LCBkY2JpIGluc3RydWN0aW9uLiAqLworI2lmZGVmIENPTkZJR184eHhfQ1BVNgorCWx3eglyMywgOChyMCkJLyogcmVzdG9yZSByMyBmcm9tIG1lbW9yeSAqLworI2VuZGlmCisjaWZuZGVmIE5PX1NFTEZfTU9ESUZZSU5HX0NPREUKKwlhbmRpcy4JcjEwLHIxMSwweDFmCS8qIHRlc3QgaWYgcmVnIFJBIGlzIHIwICovCisJbGkJcjEwLG1vZGlmaWVkX2luc3RyQGwKKwlkY2J0c3QJcjAscjEwCQkvKiB0b3VjaCBmb3Igc3RvcmUgKi8KKwlybHdpbm0JcjExLHIxMSwwLDAsMjAJLyogWmVybyBsb3dlciAxMCBiaXRzICovCisJb3JpcwlyMTEscjExLDY0MAkvKiBUcmFuc2Zvcm0gaW5zdHIuIHRvIGEgImFkZCByMTAsUkEsUkIiICovCisJb3JpCXIxMSxyMTEsNTMyCisJc3R3CXIxMSwwKHIxMCkJLyogc3RvcmUgYWRkL2FuZCBpbnN0cnVjdGlvbiAqLworCWRjYmYJMCxyMTAJCS8qIGZsdXNoIG5ldyBpbnN0ci4gdG8gbWVtb3J5LiAqLworCWljYmkJMCxyMTAJCS8qIGludmFsaWRhdGUgaW5zdHIuIGNhY2hlIGxpbmUgKi8KKwlsd3oJcjExLCA0KHIwKQkvKiByZXN0b3JlIHIxMSBmcm9tIG1lbW9yeSAqLworCW1mc3ByCXIxMCwgU1BSTl9NX1RXCS8qIHJlc3RvcmUgcjEwIGZyb20gTV9UVyAqLworCWlzeW5jCQkJLyogV2FpdCB1bnRpbCBuZXcgaW5zdHIgaXMgbG9hZGVkIGZyb20gbWVtb3J5ICovCittb2RpZmllZF9pbnN0cjoKKwkuc3BhY2UJNAkJLyogdGhpcyBpcyB3aGVyZSB0aGUgYWRkIGluc3RyLiBpcyBzdG9yZWQgKi8KKwlibmUrCTE0M2YKKwlzdWJmCXIxMCxyMCxyMTAJLyogcjEwPXIxMC1yMCwgb25seSBpZiByZWcgUkEgaXMgcjAgKi8KKzE0MzoJbXRkYXIJcjEwCQkvKiBzdG9yZSBmYXVsdGluZyBFQSBpbiBEQVIgKi8KKwliCURBUkZpeGVkCS8qIEdvIGJhY2sgdG8gbm9ybWFsIFRMQiBoYW5kbGluZyAqLworI2Vsc2UKKwltZmN0cglyMTAKKwltdGRhcglyMTAJCQkvKiBzYXZlIGN0ciByZWcgaW4gREFSICovCisJcmx3aW5tCXIxMCwgcjExLCAyNCwgMjQsIDI4CS8qIG9mZnNldCBpbnRvIGp1bXAgdGFibGUgZm9yIHJlZyBSQiAqLworCWFkZGkJcjEwLCByMTAsIDE1MGZAbAkvKiBhZGQgc3RhcnQgb2YgdGFibGUgKi8KKwltdGN0cglyMTAJCQkvKiBsb2FkIGN0ciB3aXRoIGp1bXAgYWRkcmVzcyAqLworCXhvcglyMTAsIHIxMCwgcjEwCQkvKiBzdW0gc3RhcnRzIGF0IHplcm8gKi8KKwliY3RyCQkJCS8qIGp1bXAgaW50byB0YWJsZSAqLworMTUwOgorCWFkZAlyMTAsIHIxMCwgcjAJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjEJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjIJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjMJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjQJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjUJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjYJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjcJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjgJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjkJO2IJMTUxZgorCW10Y3RyCXIxMQk7YgkxNTRmCS8qIHIxMCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nICovCisJbXRjdHIJcjExCTtiCTE1M2YJLyogcjExIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgKi8KKwlhZGQJcjEwLCByMTAsIHIxMgk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMTMJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjE0CTtiCTE1MWYKKwlhZGQJcjEwLCByMTAsIHIxNQk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMTYJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjE3CTtiCTE1MWYKKwlhZGQJcjEwLCByMTAsIHIxOAk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMTkJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjIwCTtiCTE1MWYKKwlhZGQJcjEwLCByMTAsIHIyMQk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMjIJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjIzCTtiCTE1MWYKKwlhZGQJcjEwLCByMTAsIHIyNAk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMjUJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjI2CTtiCTE1MWYKKwlhZGQJcjEwLCByMTAsIHIyNwk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMjgJO2IJMTUxZgorCWFkZAlyMTAsIHIxMCwgcjI5CTtiCTE1MWYKKwlhZGQJcjEwLCByMTAsIHIzMAk7YgkxNTFmCisJYWRkCXIxMCwgcjEwLCByMzEKKzE1MToKKwlybHdpbm0uIHIxMSxyMTEsMTksMjQsMjgJLyogb2Zmc2V0IGludG8ganVtcCB0YWJsZSBmb3IgcmVnIFJBICovCisJYmVxCTE1MmYJCQkvKiBpZiByZWcgUkEgaXMgemVybywgZG9uJ3QgYWRkIGl0ICovCisJYWRkaQlyMTEsIHIxMSwgMTUwYkBsCS8qIGFkZCBzdGFydCBvZiB0YWJsZSAqLworCW10Y3RyCXIxMQkJCS8qIGxvYWQgY3RyIHdpdGgganVtcCBhZGRyZXNzICovCisJcmx3aW5tCXIxMSxyMTEsMCwxNiwxMAkJLyogbWFrZSBzdXJlIHdlIGRvbid0IGV4ZWN1dGUgdGhpcyBtb3JlIHRoYW4gb25jZSAqLworCWJjdHIJCQkJLyoganVtcCBpbnRvIHRhYmxlICovCisxNTI6CisJbWZkYXIJcjExCisJbXRjdHIJcjExCQkJLyogcmVzdG9yZSBjdHIgcmVnIGZyb20gREFSICovCisJbXRkYXIJcjEwCQkJLyogc2F2ZSBmYXVsdCBFQSB0byBEQVIgKi8KKwliCURBUkZpeGVkCQkvKiBHbyBiYWNrIHRvIG5vcm1hbCBUTEIgaGFuZGxpbmcgKi8KKworCS8qIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHIxMCxyMTEgc2luY2UgdGhlc2UgYXJlIG1vZGlmaWVkIGFscmVhZHkgKi8KKzE1MzoJbHd6CXIxMSwgNChyMCkJLyogbG9hZCByMTEgZnJvbSBtZW1vcnkgKi8KKwliCTE1NWYKKzE1NDoJbWZzcHIJcjExLCBTUFJOX01fVFcJLyogbG9hZCByMTAgZnJvbSBNX1RXICovCisxNTU6CWFkZAlyMTAsIHIxMCwgcjExCS8qIGFkZCBpdCAqLworCW1mY3RyCXIxMQkJLyogcmVzdG9yZSByMTEgKi8KKwliCTE1MWIKKyNlbmRpZgorCiAJLmdsb2JsCWdpdmV1cF9mcHUKIGdpdmV1cF9mcHU6CiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKaW5kZXggOTc1Nzg4Yy4uN2Y0YmQ3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwpAQCAtOTQ0LDI4ICs5NDQsNiBAQAogCWJscgogCiAvKgotICogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpCi0gKgotICogTG9hZCBUTEJDQU1baW5kZXhdIGVudHJ5IGluIHRvIHRoZSBMMiBDQU0gTU1VCi0gKi8KLV9HTE9CQUwobG9hZGNhbV9lbnRyeSkKLQlsaXMJcjQsVExCQ0FNQGhhCi0JYWRkaQlyNCxyNCxUTEJDQU1AbAotCW11bGxpCXI1LHIzLFRMQkNBTV9TSVpFCi0JYWRkCXIzLHI1LHI0Ci0JbHd6CXI0LDAocjMpCi0JbXRzcHIJU1BSTl9NQVMwLHI0Ci0JbHd6CXI0LDQocjMpCi0JbXRzcHIJU1BSTl9NQVMxLHI0Ci0JbHd6CXI0LDgocjMpCi0JbXRzcHIJU1BSTl9NQVMyLHI0Ci0JbHd6CXI0LDEyKHIzKQotCW10c3ByCVNQUk5fTUFTMyxyNAotCXRsYndlCi0JaXN5bmMKLQlibHIKLQotLyoKICAqIGV4dGVybiB2b2lkIGdpdmV1cF9hbHRpdmVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKICAqCiAgKiBUaGUgZTUwMCBjb3JlIGRvZXMgbm90IGhhdmUgYW4gQWx0aVZlYyB1bml0LgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby5jCmluZGV4IDE4ODJiZjQuLjhkYzc1NDdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJZGVzdCsrOwogCQluLS07CiAJfQotCXdoaWxlKG4gPiA0KSB7CisJd2hpbGUobiA+PSA0KSB7CiAJCSooKHUzMiAqKWRlc3QpID0gKigodm9sYXRpbGUgdTMyICopdnNyYyk7CiAJCWVpZWlvKCk7CiAJCXZzcmMgKz0gNDsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQl2ZGVzdCsrOwogCQluLS07CiAJfQotCXdoaWxlKG4gPiA0KSB7CisJd2hpbGUobiA+PSA0KSB7CiAJCSooKHZvbGF0aWxlIHUzMiAqKXZkZXN0KSA9ICooKHZvbGF0aWxlIHUzMiAqKXNyYyk7CiAJCXNyYyArPSA0OwogCQl2ZGVzdCArPSA0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCmluZGV4IGZkNTE1NzguLjU1NDdhZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMjUxLDcgKzI1MSw3IEBACiAJfQogCiAJcHBjX21kLnRjZV9mcmVlKHRibCwgZW50cnksIG5wYWdlcyk7Ci0JaW9tbXVfYXJlYV9mcmVlKHRibC0+aXRfbWFwLCBmcmVlX2VudHJ5LCBucGFnZXMpOworCWJpdG1hcF9jbGVhcih0YmwtPml0X21hcCwgZnJlZV9lbnRyeSwgbnBhZ2VzKTsKIH0KIAogc3RhdGljIHZvaWQgaW9tbXVfZnJlZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgZG1hX2FkZHJfdCBkbWFfYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IDAyYTMzNDYuLjkwNDAzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtODcsNyArODcsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KIAogI2lmZGVmIENPTkZJR19QUEM2NAorCisjaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKKyNlbmRpZgogCiBpbnQgZGlzdHJpYnV0ZV9pcnFzID0gMTsKIApAQCAtMTg5LDMzICsxOTIsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLCBqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfQotCi0JaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCWRlc2MgPSBnZXRfaXJxX2Rlc2MoaSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlcikKLQkJCWdvdG8gc2tpcDsKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwotI2Vsc2UKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JCWlmIChkZXNjLT5jaGlwKQotCQkJc2VxX3ByaW50ZihwLCAiICVzICIsIGRlc2MtPmNoaXAtPnR5cGVuYW1lKTsKLQkJZWxzZQotCQkJc2VxX3B1dHMocCwgIiAgTm9uZSAgICAgICIpOwotCQlzZXFfcHJpbnRmKHAsICIlcyIsIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsICIgOiAiRWRnZSAgIik7Ci0JCXNlcV9wcmludGYocCwgIiAgICAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKLQkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLXNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgeworCX0gZWxzZSBpZiAoaSA9PSBucl9pcnFzKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1RBVV9JTlQpCiAJCWlmICh0YXVfaW5pdGlhbGl6ZWQpewogCQkJc2VxX3B1dHMocCwgIlRBVTogIik7CkBAIC0yMjUsMzAgKzIwMiw2OCBAQAogCQl9CiAjZW5kaWYgLyogQ09ORklHX1BQQzMyICYmIENPTkZJR19UQVVfSU5UKi8KIAkJc2VxX3ByaW50ZihwLCAiQkFEOiAlMTB1XG4iLCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0cyk7CisKKwkJcmV0dXJuIDA7CiAJfQorCisJZGVzYyA9IGlycV90b19kZXNjKGkpOworCWlmICghZGVzYykKKwkJcmV0dXJuIDA7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLT5oYW5kbGVyKQorCQlnb3RvIHNraXA7CisKKwlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOworI2lmZGVmIENPTkZJR19TTVAKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOworI2Vsc2UKKwlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworCWlmIChkZXNjLT5jaGlwKQorCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CisJZWxzZQorCQlzZXFfcHV0cyhwLCAiICBOb25lICAgICAgIik7CisKKwlzZXFfcHJpbnRmKHAsICIlcyIsIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsICIgOiAiRWRnZSAgIik7CisJc2VxX3ByaW50ZihwLCAiICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKKworCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKKwkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CisJc2VxX3B1dGMocCwgJ1xuJyk7CisKK3NraXA6CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIGZpeHVwX2lycXMoY3B1bWFza190IG1hcCkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdGF0aWMgaW50IHdhcm5lZDsKIAogCWZvcl9lYWNoX2lycShpcnEpIHsKIAkJY3B1bWFza190IG1hc2s7CiAKLQkJaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1BFUl9DUFUpCisJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQlpZiAoZGVzYyAmJiBkZXNjLT5zdGF0dXMgJiBJUlFfUEVSX0NQVSkKIAkJCWNvbnRpbnVlOwogCi0JCWNwdW1hc2tfYW5kKCZtYXNrLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCAmbWFwKTsKKwkJY3B1bWFza19hbmQoJm1hc2ssIGRlc2MtPmFmZmluaXR5LCAmbWFwKTsKIAkJaWYgKGFueV9vbmxpbmVfY3B1KG1hc2spID09IE5SX0NQVVMpIHsKIAkJCXByaW50aygiQnJlYWtpbmcgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAkJCW1hc2sgPSBtYXA7CiAJCX0KLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCAmbWFzayk7Ci0JCWVsc2UgaWYgKGlycV9kZXNjW2lycV0uYWN0aW9uICYmICEod2FybmVkKyspKQorCQlpZiAoZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQorCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgJm1hc2spOworCQllbHNlIGlmIChkZXNjLT5hY3Rpb24gJiYgISh3YXJuZWQrKykpCiAJCQlwcmludGsoIkNhbm5vdCBzZXQgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAl9CiAKQEAgLTI3NSw3ICsyOTAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXNhdmVkX3NwX2xpbWl0ID0gY3VycmVudC0+dGhyZWFkLmtzcF9saW1pdDsKIAogCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7CkBAIC01NDEsNyArNTU2LDcgQEAKIAkJCXNtcF93bWIoKTsKIAogCQkJLyogQ2xlYXIgbm9yZXF1ZXN0IGZsYWdzICovCi0JCQlnZXRfaXJxX2Rlc2MoaSktPnN0YXR1cyAmPSB+SVJRX05PUkVRVUVTVDsKKwkJCWlycV90b19kZXNjKGkpLT5zdGF0dXMgJj0gfklSUV9OT1JFUVVFU1Q7CiAKIAkJCS8qIExlZ2FjeSBmbGFncyBhcmUgbGVmdCB0byBkZWZhdWx0IGF0IHRoaXMgcG9pbnQsCiAJCQkgKiBvbmUgY2FuIHRoZW4gdXNlIGlycV9jcmVhdGVfbWFwcGluZygpIHRvCkBAIC02MDcsOCArNjIyLDE2IEBACiBzdGF0aWMgaW50IGlycV9zZXR1cF92aXJxKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKHZpcnEsIDApOworCWlmICghZGVzYykgeworCQlwcl9kZWJ1ZygiaXJxOiAtPiBhbGxvY2F0aW5nIGRlc2MgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKIAkvKiBDbGVhciBJUlFfTk9SRVFVRVNUIGZsYWcgKi8KLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyAmPSB+SVJRX05PUkVRVUVTVDsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9OT1JFUVVFU1Q7CiAKIAkvKiBtYXAgaXQgKi8KIAlzbXBfd21iKCk7CkBAIC02MTcsMTEgKzY0MCwxNCBAQAogCiAJaWYgKGhvc3QtPm9wcy0+bWFwKGhvc3QsIHZpcnEsIGh3aXJxKSkgewogCQlwcl9kZWJ1ZygiaXJxOiAtPiBtYXBwaW5nIGZhaWxlZCwgZnJlZWluZ1xuIik7Ci0JCWlycV9mcmVlX3ZpcnQodmlycSwgMSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAKIAlyZXR1cm4gMDsKKworZXJyb3I6CisJaXJxX2ZyZWVfdmlydCh2aXJxLCAxKTsKKwlyZXR1cm4gLTE7CiB9CiAKIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX2RpcmVjdF9tYXBwaW5nKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCkKQEAgLTcwNSw3ICs3MzEsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2NyZWF0ZV9tYXBwaW5nKTsKIAogdW5zaWduZWQgaW50IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnRyb2xsZXIsCi0JCQkJICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSkKKwkJCQkgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplKQogewogCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CkBAIC03MzgsNyArNzY0LDcgQEAKIAogCS8qIFNldCB0eXBlIGlmIHNwZWNpZmllZCBhbmQgZGlmZmVyZW50IHRoYW4gdGhlIGN1cnJlbnQgb25lICovCiAJaWYgKHR5cGUgIT0gSVJRX1RZUEVfTk9ORSAmJgotCSAgICB0eXBlICE9IChnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyAmIElSUUZfVFJJR0dFUl9NQVNLKSkKKwkgICAgdHlwZSAhPSAoaXJxX3RvX2Rlc2ModmlycSktPnN0YXR1cyAmIElSUUZfVFJJR0dFUl9NQVNLKSkKIAkJc2V0X2lycV90eXBlKHZpcnEsIHR5cGUpOwogCXJldHVybiB2aXJxOwogfQpAQCAtODEwLDcgKzgzNiw3IEBACiAJaXJxX21hcFt2aXJxXS5od2lycSA9IGhvc3QtPmludmFsX2lycTsKIAogCS8qIFNldCBzb21lIGZsYWdzICovCi0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1Q7CiAKIAkvKiBGcmVlIGl0ICovCiAJaXJxX2ZyZWVfdmlydCh2aXJxLCAxKTsKQEAgLTEwMDIsMTIgKzEwMjgsMjQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCBpcnFfZWFybHlfaW5pdCh2b2lkKQoraW50IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlnZXRfaXJxX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUOworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJZGVzYyA9IGlycV90b19kZXNjKGkpOworCQlpZiAoZGVzYykKKwkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgYXJjaF9pbml0X2NoaXBfZGF0YShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBub2RlKQoreworCWRlc2MtPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUOworCXJldHVybiAwOwogfQogCiAvKiBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgcmFkaXggdHJlZXMgbGF0ZSAqLwpAQCAtMTA2OSwxNiArMTEwNywxOSBAQAogCXNlcV9wcmludGYobSwgIiUtNXMgICUtN3MgICUtMTVzICAlc1xuIiwgInZpcnEiLCAiaHdpcnEiLAogCQkgICAgICAiY2hpcCBuYW1lIiwgImhvc3QgbmFtZSIpOwogCi0JZm9yIChpID0gMTsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlkZXNjID0gZ2V0X2lycV9kZXNjKGkpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDE7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJZGVzYyA9IGlycV90b19kZXNjKGkpOworCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCQlpZiAoZGVzYy0+YWN0aW9uICYmIGRlc2MtPmFjdGlvbi0+aGFuZGxlcikgewogCQkJc2VxX3ByaW50ZihtLCAiJTVkICAiLCBpKTsKIAkJCXNlcV9wcmludGYobSwgIjB4JTA1bHggICIsIHZpcnFfdG9faHcoaSkpOwogCi0JCQlpZiAoZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT50eXBlbmFtZSkKLQkJCQlwID0gZGVzYy0+Y2hpcC0+dHlwZW5hbWU7CisJCQlpZiAoZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5uYW1lKQorCQkJCXAgPSBkZXNjLT5jaGlwLT5uYW1lOwogCQkJZWxzZQogCQkJCXAgPSBub25lOwogCQkJc2VxX3ByaW50ZihtLCAiJS0xNXMgICIsIHApOwpAQCAtMTA5MCw3ICsxMTMxLDcgQEAKIAkJCXNlcV9wcmludGYobSwgIiVzXG4iLCBwKTsKIAkJfQogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggZWQwYWM0ZS4uNzlhMDBiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTc4MSw5ICs3ODEsOSBAQAogCQkJIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCiAJCW1vZGUgfD0gU19JV1VTUjsKIAotCWVudCA9IHByb2NfY3JlYXRlKCJwcGM2NC9scGFyY2ZnIiwgbW9kZSwgTlVMTCwgJmxwYXJjZmdfZm9wcyk7CisJZW50ID0gcHJvY19jcmVhdGUoInBvd2VycGMvbHBhcmNmZyIsIG1vZGUsIE5VTEwsICZscGFyY2ZnX2ZvcHMpOwogCWlmICghZW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBwcGM2NC9scGFyY2ZnXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIHBvd2VycGMvbHBhcmNmZ1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCBkYTljMGM0Li44NjQ5ZjUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtNTAyLDE1ICs1MDIsNyBAQAogCWxpCXIwLFBBR0VfU0laRS9MMV9DQUNIRV9CWVRFUwogCXNsdwlyMCxyMCxyNAogCW10Y3RyCXIwCi0jaWZkZWYgQ09ORklHXzh4eAotCWxpCXI0LCAwCi0xOglzdHcJcjQsIDAocjMpCi0Jc3R3CXI0LCA0KHIzKQotCXN0dwlyNCwgOChyMykKLQlzdHcJcjQsIDEyKHIzKQotI2Vsc2UKIDE6CWRjYnoJMCxyMwotI2VuZGlmCiAJYWRkaQlyMyxyMyxMMV9DQUNIRV9CWVRFUwogCWJkbnoJMWIKIAlibHIKQEAgLTUzNSwxNSArNTI3LDYgQEAKIAlhZGRpCXIzLHIzLC00CiAJYWRkaQlyNCxyNCwtNAogCi0jaWZkZWYgQ09ORklHXzh4eAotCS8qIGRvbid0IHVzZSBwcmVmZXRjaCBvbiA4eHggKi8KLSAgICAJbGkJcjAsNDA5Ni9MMV9DQUNIRV9CWVRFUwotCW10Y3RyCXIwCi0xOglDT1BZXzE2X0JZVEVTCi0JYmRuegkxYgotCWJscgotCi0jZWxzZQkvKiBub3QgOHh4LCB3ZSBjYW4gcHJlZmV0Y2ggKi8KIAlsaQlyNSw0CiAKICNpZiBNQVhfQ09QWV9QUkVGRVRDSCA+IDEKQEAgLTU4NCw3ICs1NjcsNiBAQAogCWxpCXIwLE1BWF9DT1BZX1BSRUZFVENICiAJbGkJcjExLDQKIAliCTJiCi0jZW5kaWYJLyogQ09ORklHXzh4eCAqLwogCiAvKgogICogdm9pZCBhdG9taWNfY2xlYXJfbWFzayhhdG9taWNfdCBtYXNrLCBhdG9taWNfdCAqYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYwppbmRleCAwZWQzMWYyLi5hZDQ2MWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCkBAIC0xMzksOCArMTM5LDggQEAKIAogfQogCi1zdGF0aWMgaW50IGRldl9udnJhbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGRldl9udnJhbV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2goY21kKSB7CiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCkBAIC0xNjksMTEgKzE2OSwxMSBAQAogfQogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG52cmFtX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CWRldl9udnJhbV9sbHNlZWssCi0JLnJlYWQgPQkJZGV2X252cmFtX3JlYWQsCi0JLndyaXRlID0JZGV2X252cmFtX3dyaXRlLAotCS5pb2N0bCA9CWRldl9udnJhbV9pb2N0bCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmxsc2VlawkJPSBkZXZfbnZyYW1fbGxzZWVrLAorCS5yZWFkCQk9IGRldl9udnJhbV9yZWFkLAorCS53cml0ZQkJPSBkZXZfbnZyYW1fd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsCT0gZGV2X252cmFtX2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG52cmFtX2RldiA9IHsKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAKICNpZmRlZiBERUJVR19OVlJBTQotc3RhdGljIHZvaWQgbnZyYW1fcHJpbnRfcGFydGl0aW9ucyhjaGFyICogbGFiZWwpCitzdGF0aWMgdm9pZCBfX2luaXQgbnZyYW1fcHJpbnRfcGFydGl0aW9ucyhjaGFyICogbGFiZWwpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqIHA7CiAJc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqIHRtcF9wYXJ0OwpAQCAtMjAyLDcgKzIwMiw3IEBACiAjZW5kaWYKIAogCi1zdGF0aWMgaW50IG52cmFtX3dyaXRlX2hlYWRlcihzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICogcGFydCkKK3N0YXRpYyBpbnQgX19pbml0IG52cmFtX3dyaXRlX2hlYWRlcihzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICogcGFydCkKIHsKIAlsb2ZmX3QgdG1wX2luZGV4OwogCWludCByYzsKQEAgLTIxNCw3ICsyMTQsNyBAQAogfQogCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG52cmFtX2NoZWNrc3VtKHN0cnVjdCBudnJhbV9oZWFkZXIgKnApCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2luaXQgbnZyYW1fY2hlY2tzdW0oc3RydWN0IG52cmFtX2hlYWRlciAqcCkKIHsKIAl1bnNpZ25lZCBpbnQgY19zdW0sIGNfc3VtMjsKIAl1bnNpZ25lZCBzaG9ydCAqc3AgPSAodW5zaWduZWQgc2hvcnQgKilwLT5uYW1lOyAvKiBhc3N1bWUgNiBzaG9ydHMgKi8KQEAgLTIyOCwzMiArMjI4LDcgQEAKIAlyZXR1cm4gY19zdW07CiB9CiAKLQotLyoKLSAqIEZpbmQgYW4gbnZyYW0gcGFydGl0aW9uLCBzaWcgY2FuIGJlIDAgZm9yIGFueQotICogcGFydGl0aW9uIG9yIG5hbWUgY2FuIGJlIE5VTEwgZm9yIGFueSBuYW1lLCBlbHNlCi0gKiB0cmllcyB0byBtYXRjaCBib3RoCi0gKi8KLXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKm52cmFtX2ZpbmRfcGFydGl0aW9uKGludCBzaWcsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqIHBhcnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHA7Ci0KLQlsaXN0X2Zvcl9lYWNoKHAsICZudnJhbV9wYXJ0LT5wYXJ0aXRpb24pIHsKLQkJcGFydCA9IGxpc3RfZW50cnkocCwgc3RydWN0IG52cmFtX3BhcnRpdGlvbiwgcGFydGl0aW9uKTsKLQotCQlpZiAoc2lnICYmIHBhcnQtPmhlYWRlci5zaWduYXR1cmUgIT0gc2lnKQotCQkJY29udGludWU7Ci0JCWlmIChuYW1lICYmIDAgIT0gc3RybmNtcChuYW1lLCBwYXJ0LT5oZWFkZXIubmFtZSwgMTIpKQotCQkJY29udGludWU7Ci0JCXJldHVybiBwYXJ0OyAKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKG52cmFtX2ZpbmRfcGFydGl0aW9uKTsKLQotCi1zdGF0aWMgaW50IG52cmFtX3JlbW92ZV9vc19wYXJ0aXRpb24odm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG52cmFtX3JlbW92ZV9vc19wYXJ0aXRpb24odm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCXN0cnVjdCBsaXN0X2hlYWQgKmo7CkBAIC0zMTksNyArMjk0LDcgQEAKICAqIFdpbGwgY3JlYXRlIGEgcGFydGl0aW9uIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBmcmVlCiAgKiBzcGFjZSBmb3VuZCBpZiBzcGFjZSBoYXMgZW5vdWdoIHJvb20uCiAgKi8KLXN0YXRpYyBpbnQgbnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbih2b2lkKQorc3RhdGljIGludCBfX2luaXQgbnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbih2b2lkKQogewogCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnBhcnQ7CiAJc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqbmV3X3BhcnQ7CkBAIC00MjIsNyArMzk3LDcgQEAKICAqIDUuKSBJZiB0aGUgbWF4IGNodW5rIGNhbm5vdCBiZSBhbGxvY2F0ZWQgdGhlbiB0cnkgZmluZGluZyBhIGNodW5rCiAgKiB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgbWludW0gbmVlZGVkIChOVlJBTV9NSU5fUkVRKS4KICAqLwotc3RhdGljIGludCBudnJhbV9zZXR1cF9wYXJ0aXRpb24odm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG52cmFtX3NldHVwX3BhcnRpdGlvbih2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKiBwOwogCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKiBwYXJ0OwpAQCAtNDgwLDcgKzQ1NSw3IEBACiB9CiAKIAotc3RhdGljIGludCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKQogewogCWxvZmZfdCBjdXJfaW5kZXggPSAwOwogCXN0cnVjdCBudnJhbV9oZWFkZXIgcGhlYWQ7CkBAIC03MDYsNiArNjgxLDkgQEAKIAlpbnQgY2xlYXJfd29yZCA9IEVSUl9GTEFHX0FMUkVBRFlfTE9HR0VEOwogCWludCByYzsKIAorCWlmIChudnJhbV9lcnJvcl9sb2dfaW5kZXggPT0gLTEpCisJCXJldHVybiAtMTsKKwogCXRtcF9pbmRleCA9IG52cmFtX2Vycm9yX2xvZ19pbmRleDsKIAkKIAlyYyA9IHBwY19tZC5udnJhbV93cml0ZSgoY2hhciAqKSZjbGVhcl93b3JkLCBzaXplb2YoaW50KSwgJnRtcF9pbmRleCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggMGEwM2NmNy4uYTNjMTFjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtMTE5LDEzICsxMTksNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0jZGVmaW5lIGlzX2h1Z2VfcHNpemUocGFnZXNpemUpCShIUEFHRV9TSElGVCAmJiBtbXVfaHVnZV9wc2l6ZXNbcGFnZXNpemVdKQotI2Vsc2UKLSNkZWZpbmUgaXNfaHVnZV9wc2l6ZShwYWdlc2l6ZSkJMAotI2VuZGlmCi0KIC8qCiAgKiBPbiA2NC1iaXQgd2UgZG9uJ3Qgd2FudCB0byBpbnZva2UgaGFzaF9wYWdlIG9uIHVzZXIgYWRkcmVzc2VzIGZyb20KICAqIGludGVycnVwdCBjb250ZXh0LCBzbyBpZiB0aGUgYWNjZXNzIGZhdWx0cywgd2UgcmVhZCB0aGUgcGFnZSB0YWJsZXMKQEAgLTEzNSw3ICsxMjgsNyBAQAogewogCXBnZF90ICpwZ2RpcjsKIAlwdGVfdCAqcHRlcCwgcHRlOwotCWludCBwYWdlc2l6ZTsKKwl1bnNpZ25lZCBzaGlmdDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgcGZuOwpAQCAtMTQ1LDE3ICsxMzgsMTQgQEAKIAlpZiAoIXBnZGlyKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXBhZ2VzaXplID0gZ2V0X3NsaWNlX3BzaXplKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwlwdGVwID0gZmluZF9saW51eF9wdGVfb3JfaHVnZXB0ZShwZ2RpciwgYWRkciwgJnNoaWZ0KTsKKwlpZiAoIXNoaWZ0KQorCQlzaGlmdCA9IFBBR0VfU0hJRlQ7CiAKIAkvKiBhbGlnbiBhZGRyZXNzIHRvIHBhZ2UgYm91bmRhcnkgKi8KLQlvZmZzZXQgPSBhZGRyICYgKCgxdWwgPDwgbW11X3BzaXplX2RlZnNbcGFnZXNpemVdLnNoaWZ0KSAtIDEpOworCW9mZnNldCA9IGFkZHIgJiAoKDFVTCA8PCBzaGlmdCkgLSAxKTsKIAlhZGRyIC09IG9mZnNldDsKIAotCWlmIChpc19odWdlX3BzaXplKHBhZ2VzaXplKSkKLQkJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChjdXJyZW50LT5tbSwgYWRkcik7Ci0JZWxzZQotCQlwdGVwID0gZmluZF9saW51eF9wdGUocGdkaXIsIGFkZHIpOwotCiAJaWYgKHB0ZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcHRlID0gKnB0ZXA7CkBAIC00OTcsMTEgKzQ4NywxMSBAQAogICogU2luY2Ugd2UgY2FuJ3QgZ2V0IFBNVSBpbnRlcnJ1cHRzIGluc2lkZSBhIFBNVSBpbnRlcnJ1cHQgaGFuZGxlciwKICAqIHdlIGRvbid0IG5lZWQgc2VwYXJhdGUgaXJxIGFuZCBubWkgZW50cmllcyBoZXJlLgogICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBjYWxsY2hhaW4pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgY3B1X3BlcmZfY2FsbGNoYWluKTsKIAogc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICpwZXJmX2NhbGxjaGFpbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gJl9fZ2V0X2NwdV92YXIoY2FsbGNoYWluKTsKKwlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gJl9fZ2V0X2NwdV92YXIoY3B1X3BlcmZfY2FsbGNoYWluKTsKIAogCWVudHJ5LT5uciA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGM4YjI3YmIuLjQyNTQ1MTQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTk2LDggKzk2LDYgQEAKIEVYUE9SVF9TWU1CT0woaXNhX2lvX2Jhc2UpOwogRVhQT1JUX1NZTUJPTChpc2FfbWVtX2Jhc2UpOwogRVhQT1JUX1NZTUJPTChwY2lfZHJhbV9vZmZzZXQpOwotRVhQT1JUX1NZTUJPTChwY2lfYWxsb2NfY29uc2lzdGVudCk7Ci1FWFBPUlRfU1lNQk9MKHBjaV9mcmVlX2NvbnNpc3RlbnQpOwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogRVhQT1JUX1NZTUJPTChzdGFydF90aHJlYWQpOwpAQCAtMTYyLDcgKzE2MCw2IEBACiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIEVYUE9SVF9TWU1CT0wodGltZXJfaW50ZXJydXB0KTsKLUVYUE9SVF9TWU1CT0woaXJxX2Rlc2MpOwogRVhQT1JUX1NZTUJPTCh0Yl90aWNrc19wZXJfamlmZnkpOwogRVhQT1JUX1NZTUJPTChjYWNoZWFibGVfbWVtY3B5KTsKIEVYUE9SVF9TWU1CT0woY2FjaGVhYmxlX21lbXplcm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jX3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wb3dlcnBjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkM2I4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wb3dlcnBjLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWlrZSBDb3JyaWdhbiAmIERhdmUgRW5nZWJyZXRzZW4gSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworc3RhdGljIGxvZmZfdCBwYWdlX21hcF9zZWVrKCBzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKK3sKKwlsb2ZmX3QgbmV3OworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisKKwlzd2l0Y2god2hlbmNlKSB7CisJY2FzZSAwOgorCQluZXcgPSBvZmY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmV3ID0gZmlsZS0+Zl9wb3MgKyBvZmY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbmV3ID0gZHAtPnNpemUgKyBvZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIG5ldyA8IDAgfHwgbmV3ID4gZHAtPnNpemUgKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gKGZpbGUtPmZfcG9zID0gbmV3KTsKK30KKworc3RhdGljIHNzaXplX3QgcGFnZV9tYXBfcmVhZCggc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJCQkgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGRwLT5kYXRhLCBkcC0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFnZV9tYXBfbW1hcCggc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hICkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCisJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gZHAtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgX19wYShkcC0+ZGF0YSkgPj4gUEFHRV9TSElGVCwKKwkJCQkJCWRwLT5zaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2VfbWFwX2ZvcHMgPSB7CisJLmxsc2Vlawk9IHBhZ2VfbWFwX3NlZWssCisJLnJlYWQJPSBwYWdlX21hcF9yZWFkLAorCS5tbWFwCT0gcGFnZV9tYXBfbW1hcAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX3BwYzY0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKworCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEoInBvd2VycGMvc3lzdGVtY2ZnIiwgU19JRlJFR3xTX0lSVUdPLCBOVUxMLAorCQkJICAgICAgICZwYWdlX21hcF9mb3BzLCB2ZHNvX2RhdGEpOworCWlmICghcGRlKQorCQlyZXR1cm4gMTsKKwlwZGUtPnNpemUgPSBQQUdFX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KK19faW5pdGNhbGwocHJvY19wcGM2NF9pbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisvKgorICogQ3JlYXRlIHRoZSBwcGM2NCBhbmQgcHBjNjQvcnRhcyBkaXJlY3RvcmllcyBlYXJseS4gVGhpcyBhbGxvd3MgdXMgdG8KKyAqIGFzc3VtZSB0aGF0IHRoZXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY3JlYXRlZCBpbiBkcml2ZXJzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX3BwYzY0X2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdDsKKworCXJvb3QgPSBwcm9jX21rZGlyKCJwb3dlcnBjIiwgTlVMTCk7CisJaWYgKCFyb290KQorCQlyZXR1cm4gMTsKKworI2lmZGVmIENPTkZJR19QUEM2NAorCWlmICghcHJvY19zeW1saW5rKCJwcGM2NCIsIE5VTEwsICJwb3dlcnBjIikpCisJCXByX2VycigiRmFpbGVkIHRvIGNyZWF0ZSBsaW5rIC9wcm9jL3BwYzY0IC0+IC9wcm9jL3Bvd2VycGNcbiIpOworI2VuZGlmCisKKwlpZiAoIW9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpKQorCQlyZXR1cm4gMDsKKworCWlmICghcHJvY19ta2RpcigicnRhcyIsIHJvb3QpKQorCQlyZXR1cm4gMTsKKworCWlmICghcHJvY19zeW1saW5rKCJydGFzIiwgTlVMTCwgInBvd2VycGMvcnRhcyIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChwcm9jX3BwYzY0X2NyZWF0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjQ3ZGRlLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWlrZSBDb3JyaWdhbiAmIERhdmUgRW5nZWJyZXRzZW4gSUJNIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3J0YXMuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0KLXN0YXRpYyBsb2ZmX3QgIHBhZ2VfbWFwX3NlZWsoIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKTsKLXN0YXRpYyBzc2l6ZV90IHBhZ2VfbWFwX3JlYWQoIHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLAotCQkJICAgICAgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBpbnQgICAgIHBhZ2VfbWFwX21tYXAoIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSApOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX21hcF9mb3BzID0gewotCS5sbHNlZWsJPSBwYWdlX21hcF9zZWVrLAotCS5yZWFkCT0gcGFnZV9tYXBfcmVhZCwKLQkubW1hcAk9IHBhZ2VfbWFwX21tYXAKLX07Ci0KLS8qCi0gKiBDcmVhdGUgdGhlIHBwYzY0IGFuZCBwcGM2NC9ydGFzIGRpcmVjdG9yaWVzIGVhcmx5LiBUaGlzIGFsbG93cyB1cyB0bwotICogYXNzdW1lIHRoYXQgdGhleSBoYXZlIGJlZW4gcHJldmlvdXNseSBjcmVhdGVkIGluIGRyaXZlcnMuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHByb2NfcHBjNjRfY3JlYXRlKHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290OwotCi0Jcm9vdCA9IHByb2NfbWtkaXIoInBwYzY0IiwgTlVMTCk7Ci0JaWYgKCFyb290KQotCQlyZXR1cm4gMTsKLQotCWlmICghb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIikpCi0JCXJldHVybiAwOwotCi0JaWYgKCFwcm9jX21rZGlyKCJydGFzIiwgcm9vdCkpCi0JCXJldHVybiAxOwotCi0JaWYgKCFwcm9jX3N5bWxpbmsoInJ0YXMiLCBOVUxMLCAicHBjNjQvcnRhcyIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotY29yZV9pbml0Y2FsbChwcm9jX3BwYzY0X2NyZWF0ZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHByb2NfcHBjNjRfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwotCi0JcGRlID0gcHJvY19jcmVhdGVfZGF0YSgicHBjNjQvc3lzdGVtY2ZnIiwgU19JRlJFR3xTX0lSVUdPLCBOVUxMLAotCQkJICAgICAgICZwYWdlX21hcF9mb3BzLCB2ZHNvX2RhdGEpOwotCWlmICghcGRlKQotCQlyZXR1cm4gMTsKLQlwZGUtPnNpemUgPSBQQUdFX1NJWkU7Ci0KLQlyZXR1cm4gMDsKLX0KLV9faW5pdGNhbGwocHJvY19wcGM2NF9pbml0KTsKLQotc3RhdGljIGxvZmZfdCBwYWdlX21hcF9zZWVrKCBzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKLXsKLQlsb2ZmX3QgbmV3OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0KLQlzd2l0Y2god2hlbmNlKSB7Ci0JY2FzZSAwOgotCQluZXcgPSBvZmY7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJbmV3ID0gZmlsZS0+Zl9wb3MgKyBvZmY7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbmV3ID0gZHAtPnNpemUgKyBvZmY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoIG5ldyA8IDAgfHwgbmV3ID4gZHAtPnNpemUgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gKGZpbGUtPmZfcG9zID0gbmV3KTsKLX0KLQotc3RhdGljIHNzaXplX3QgcGFnZV9tYXBfcmVhZCggc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCi0JCQkgICAgICBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGRwLT5kYXRhLCBkcC0+c2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFnZV9tYXBfbW1hcCggc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hICkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCi0JaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gZHAtPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgX19wYShkcC0+ZGF0YSkgPj4gUEFHRV9TSElGVCwKLQkJCQkJCWRwLT5zaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggYmY5MDM2MS4uZmQwZDI5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIHN0cnVjdCBydGFzX3QgcnRhcyA9IHsKLQkubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAorCS5sb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAogfTsKIEVYUE9SVF9TWU1CT0wocnRhcyk7CiAKQEAgLTgwLDEzICs4MCwxMyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXByZWVtcHRfZGlzYWJsZSgpOwotCV9fcmF3X3NwaW5fbG9ja19mbGFncygmcnRhcy5sb2NrLCBmbGFncyk7CisJYXJjaF9zcGluX2xvY2tfZmxhZ3MoJnJ0YXMubG9jaywgZmxhZ3MpOwogCXJldHVybiBmbGFnczsKIH0KIAogc3RhdGljIHZvaWQgdW5sb2NrX3J0YXModW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlfX3Jhd19zcGluX3VubG9jaygmcnRhcy5sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZydGFzLmxvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpAQCAtOTc4LDcgKzk3OCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyByYXdfc3BpbmxvY2tfdCB0aW1lYmFzZV9sb2NrOworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCB0aW1lYmFzZV9sb2NrOwogc3RhdGljIHU2NCB0aW1lYmFzZSA9IDA7CiAKIHZvaWQgX19jcHVpbml0IHJ0YXNfZ2l2ZV90aW1lYmFzZSh2b2lkKQpAQCAtOTg3LDEwICs5ODcsMTAgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAloYXJkX2lycV9kaXNhYmxlKCk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZ0aW1lYmFzZV9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmdGltZWJhc2VfbG9jayk7CiAJcnRhc19jYWxsKHJ0YXNfdG9rZW4oImZyZWV6ZS10aW1lLWJhc2UiKSwgMCwgMSwgTlVMTCk7CiAJdGltZWJhc2UgPSBnZXRfdGIoKTsKLQlfX3Jhd19zcGluX3VubG9jaygmdGltZWJhc2VfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmdGltZWJhc2VfbG9jayk7CiAKIAl3aGlsZSAodGltZWJhc2UpCiAJCWJhcnJpZXIoKTsKQEAgLTEwMDIsOCArMTAwMiw4IEBACiB7CiAJd2hpbGUgKCF0aW1lYmFzZSkKIAkJYmFycmllcigpOwotCV9fcmF3X3NwaW5fbG9jaygmdGltZWJhc2VfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJnRpbWViYXNlX2xvY2spOwogCXNldF90Yih0aW1lYmFzZSA+PiAzMiwgdGltZWJhc2UgJiAweGZmZmZmZmZmKTsKIAl0aW1lYmFzZSA9IDA7Ci0JX19yYXdfc3Bpbl91bmxvY2soJnRpbWViYXNlX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnRpbWViYXNlX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwppbmRleCAxMzAxMWE5Li5hODUxMTdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogL3Byb2MvcHBjNjQvcnRhcy9maXJtd2FyZV9mbGFzaCBpbnRlcmZhY2UKKyAqIC9wcm9jL3Bvd2VycGMvcnRhcy9maXJtd2FyZV9mbGFzaCBpbnRlcmZhY2UKICAqCiAgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIGZpcm13YXJlX2ZsYXNoIGludGVyZmFjZSB0byBwdW1wIGEgZmlybXdhcmUKICAqIGltYWdlIGludG8gdGhlIGtlcm5lbC4gIEF0IHJlYm9vdCB0aW1lIHJ0YXNfcmVzdGFydCgpIHdpbGwgc2VlIHRoZQpAQCAtNzQwLDcgKzc0MCw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWZpcm13YXJlX2ZsYXNoX3BkZSA9IGNyZWF0ZV9mbGFzaF9wZGUoInBwYzY0L3J0YXMvIgorCWZpcm13YXJlX2ZsYXNoX3BkZSA9IGNyZWF0ZV9mbGFzaF9wZGUoInBvd2VycGMvcnRhcy8iCiAJCQkJCSAgICAgIEZJUk1XQVJFX0ZMQVNIX05BTUUsCiAJCQkJCSAgICAgICZydGFzX2ZsYXNoX29wZXJhdGlvbnMpOwogCWlmIChmaXJtd2FyZV9mbGFzaF9wZGUgPT0gTlVMTCkgewpAQCAtNzU0LDcgKzc1NCw3IEBACiAJaWYgKHJjICE9IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCWZpcm13YXJlX3VwZGF0ZV9wZGUgPSBjcmVhdGVfZmxhc2hfcGRlKCJwcGM2NC9ydGFzLyIKKwlmaXJtd2FyZV91cGRhdGVfcGRlID0gY3JlYXRlX2ZsYXNoX3BkZSgicG93ZXJwYy9ydGFzLyIKIAkJCQkJICAgICAgIEZJUk1XQVJFX1VQREFURV9OQU1FLAogCQkJCQkgICAgICAgJnJ0YXNfZmxhc2hfb3BlcmF0aW9ucyk7CiAJaWYgKGZpcm13YXJlX3VwZGF0ZV9wZGUgPT0gTlVMTCkgewpAQCAtNzY4LDcgKzc2OCw3IEBACiAJaWYgKHJjICE9IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCXZhbGlkYXRlX3BkZSA9IGNyZWF0ZV9mbGFzaF9wZGUoInBwYzY0L3J0YXMvIiBWQUxJREFURV9GTEFTSF9OQU1FLAorCXZhbGlkYXRlX3BkZSA9IGNyZWF0ZV9mbGFzaF9wZGUoInBvd2VycGMvcnRhcy8iIFZBTElEQVRFX0ZMQVNIX05BTUUsCiAJCQkgICAgICAJCSZ2YWxpZGF0ZV9mbGFzaF9vcGVyYXRpb25zKTsKIAlpZiAodmFsaWRhdGVfcGRlID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtNzgxLDcgKzc4MSw3IEBACiAJaWYgKHJjICE9IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCW1hbmFnZV9wZGUgPSBjcmVhdGVfZmxhc2hfcGRlKCJwcGM2NC9ydGFzLyIgTUFOQUdFX0ZMQVNIX05BTUUsCisJbWFuYWdlX3BkZSA9IGNyZWF0ZV9mbGFzaF9wZGUoInBvd2VycGMvcnRhcy8iIE1BTkFHRV9GTEFTSF9OQU1FLAogCQkJCSAgICAgICZtYW5hZ2VfZmxhc2hfb3BlcmF0aW9ucyk7CiAJaWYgKG1hbmFnZV9wZGUgPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0ODMyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc2QuYwpAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQGF1LmlibS5jb20+LCBJQk0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIENvbW11bmljYXRpb24gdG8gdXNlcnNwYWNlIGJhc2VkIG9uIGtlcm5lbC9wcmludGsuYworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9udnJhbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socnRhc2RfbG9nX2xvY2spOworCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocnRhc19sb2dfd2FpdCk7CisKK3N0YXRpYyBjaGFyICpydGFzX2xvZ19idWY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBydGFzX2xvZ19zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0YXNfbG9nX3NpemU7CisKK3N0YXRpYyBpbnQgc3VydmVpbGxhbmNlX3RpbWVvdXQgPSAtMTsKKworc3RhdGljIHVuc2lnbmVkIGludCBydGFzX2Vycm9yX2xvZ19tYXg7CitzdGF0aWMgdW5zaWduZWQgaW50IHJ0YXNfZXJyb3JfbG9nX2J1ZmZlcl9tYXg7CisKKy8qIFJUQVMgc2VydmljZSB0b2tlbnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZlbnRfc2NhbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRhc19ldmVudF9zY2FuX3JhdGU7CisKK3N0YXRpYyBpbnQgZnVsbF9ydGFzX21zZ3MgPSAwOworCisvKiBTdG9wIGxvZ2dpbmcgdG8gbnZyYW0gYWZ0ZXIgZmlyc3QgZmF0YWwgZXJyb3IgKi8KK3N0YXRpYyBpbnQgbG9nZ2luZ19lbmFibGVkOyAvKiBVbnRpbCB3ZSBpbml0aWFsaXplIGV2ZXJ5dGhpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWFrZSBzdXJlIHdlIGRvbid0IHRyeSBsb2dnaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYW55dGhpbmcgKi8KK3N0YXRpYyBpbnQgZXJyb3JfbG9nX2NudDsKKworLyoKKyAqIFNpbmNlIHdlIHVzZSAzMiBiaXQgUlRBUywgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBtdXN0IGJlIGJlbG93CisgKiA0RyBvciBlbHNlIGJhZCB0aGluZ3MgaGFwcGVuLiBBbGxvY2F0ZSB0aGlzIGluIHRoZSBrZXJuZWwgZGF0YSBhbmQKKyAqIG1ha2UgaXQgYmlnIGVub3VnaC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9nZGF0YVtSVEFTX0VSUk9SX0xPR19NQVhdOworCitzdGF0aWMgY2hhciAqcnRhc190eXBlW10gPSB7CisJIlVua25vd24iLCAiUmV0cnkiLCAiVENFIEVycm9yIiwgIkludGVybmFsIERldmljZSBGYWlsdXJlIiwKKwkiVGltZW91dCIsICJEYXRhIFBhcml0eSIsICJBZGRyZXNzIFBhcml0eSIsICJDYWNoZSBQYXJpdHkiLAorCSJBZGRyZXNzIEludmFsaWQiLCAiRUNDIFVuY29ycmVjdGVkIiwgIkVDQyBDb3JydXB0ZWQiLAorfTsKKworc3RhdGljIGNoYXIgKnJ0YXNfZXZlbnRfdHlwZShpbnQgdHlwZSkKK3sKKwlpZiAoKHR5cGUgPiAwKSAmJiAodHlwZSA8IDExKSkKKwkJcmV0dXJuIHJ0YXNfdHlwZVt0eXBlXTsKKworCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFJUQVNfVFlQRV9FUE9XOgorCQkJcmV0dXJuICJFUE9XIjsKKwkJY2FzZSBSVEFTX1RZUEVfUExBVEZPUk06CisJCQlyZXR1cm4gIlBsYXRmb3JtIEVycm9yIjsKKwkJY2FzZSBSVEFTX1RZUEVfSU86CisJCQlyZXR1cm4gIkkvTyBFdmVudCI7CisJCWNhc2UgUlRBU19UWVBFX0lORk86CisJCQlyZXR1cm4gIlBsYXRmb3JtIEluZm9ybWF0aW9uIEV2ZW50IjsKKwkJY2FzZSBSVEFTX1RZUEVfREVBTExPQzoKKwkJCXJldHVybiAiUmVzb3VyY2UgRGVhbGxvY2F0aW9uIEV2ZW50IjsKKwkJY2FzZSBSVEFTX1RZUEVfRFVNUDoKKwkJCXJldHVybiAiRHVtcCBOb3RpZmljYXRpb24gRXZlbnQiOworCX0KKworCXJldHVybiBydGFzX3R5cGVbMF07Cit9CisKKy8qIFRvIHNlZSB0aGlzIGluZm8sIGdyZXAgUlRBUyAvdmFyL2xvZy9tZXNzYWdlcyBhbmQgZWFjaCBlbnRyeQorICogd2lsbCBiZSBjb2xsZWN0ZWQgdG9nZXRoZXIgd2l0aCBvYnZpb3VzIGJlZ2luL2VuZC4KKyAqIFRoZXJlIHdpbGwgYmUgYSB1bmlxdWUgaWRlbnRpZmllciBvbiB0aGUgYmVnaW4gYW5kIGVuZCBsaW5lcy4KKyAqIFRoaXMgd2lsbCBwZXJzaXN0IGFjcm9zcyByZWJvb3RzLgorICoKKyAqIGZvcm1hdCBvZiBlcnJvciBsb2dzIHJldHVybmVkIGZyb20gUlRBUzoKKyAqIGJ5dGVzCShzaXplKQk6IGNvbnRlbnRzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMC03CQkoOCkJOiBydGFzX2Vycm9yX2xvZworICogOC00NwkJKDQwKQk6IGV4dGVuZGVkIGluZm8KKyAqIDQ4LTUxCSg0KQk6IHZlbmRvciBpZAorICogNTItMTAyMyAodmVuZG9yIHNwZWNpZmljKSA6IGxvY2F0aW9uIGNvZGUgYW5kIGRlYnVnIGRhdGEKKyAqLworc3RhdGljIHZvaWQgcHJpbnRrX2xvZ19ydGFzKGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKworCWludCBpLGosbiA9IDA7CisJaW50IHBlcmxpbmUgPSAxNjsKKwljaGFyIGJ1ZmZlcls2NF07CisJY2hhciAqIHN0ciA9ICJSVEFTIGV2ZW50IjsKKworCWlmIChmdWxsX3J0YXNfbXNncykgeworCQlwcmludGsoUlRBU19ERUJVRyAiJWQgLS0tLS0tLS0gJXMgYmVnaW4gLS0tLS0tLS1cbiIsCisJCSAgICAgICBlcnJvcl9sb2dfY250LCBzdHIpOworCisJCS8qCisJCSAqIFByaW50IHBlcmxpbmUgYnl0ZXMgb24gZWFjaCBsaW5lLCBlYWNoIGxpbmUgd2lsbCBzdGFydAorCQkgKiB3aXRoIFJUQVMgYW5kIGEgY2hhbmdpbmcgbnVtYmVyLCBzbyBzeXNsb2dkIHdpbGwKKwkJICogcHJpbnQgbGluZXMgdGhhdCBhcmUgb3RoZXJ3aXNlIHRoZSBzYW1lLiAgU2VwYXJhdGUgZXZlcnkKKwkJICogNCBieXRlcyB3aXRoIGEgc3BhY2UuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWogPSBpICUgcGVybGluZTsKKwkJCWlmIChqID09IDApIHsKKwkJCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisJCQkJbiA9IHNwcmludGYoYnVmZmVyLCAiUlRBUyAlZDoiLCBpL3BlcmxpbmUpOworCQkJfQorCisJCQlpZiAoKGkgJSA0KSA9PSAwKQorCQkJCW4gKz0gc3ByaW50ZihidWZmZXIrbiwgIiAiKTsKKworCQkJbiArPSBzcHJpbnRmKGJ1ZmZlcituLCAiJTAyeCIsICh1bnNpZ25lZCBjaGFyKWJ1ZltpXSk7CisKKwkJCWlmIChqID09IChwZXJsaW5lLTEpKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgYnVmZmVyKTsKKwkJfQorCQlpZiAoKGkgJSBwZXJsaW5lKSAhPSAwKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBidWZmZXIpOworCisJCXByaW50ayhSVEFTX0RFQlVHICIlZCAtLS0tLS0tLSAlcyBlbmQgLS0tLS0tLS0tLVxuIiwKKwkJICAgICAgIGVycm9yX2xvZ19jbnQsIHN0cik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHJ0YXNfZXJyb3JfbG9nICplcnJsb2cgPSAoc3RydWN0IHJ0YXNfZXJyb3JfbG9nICopYnVmOworCisJCXByaW50ayhSVEFTX0RFQlVHICJldmVudDogJWQsIFR5cGU6ICVzLCBTZXZlcml0eTogJWRcbiIsCisJCSAgICAgICBlcnJvcl9sb2dfY250LCBydGFzX2V2ZW50X3R5cGUoZXJybG9nLT50eXBlKSwKKwkJICAgICAgIGVycmxvZy0+c2V2ZXJpdHkpOworCX0KK30KKworc3RhdGljIGludCBsb2dfcnRhc19sZW4oY2hhciAqIGJ1ZikKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBydGFzX2Vycm9yX2xvZyAqZXJyOworCisJLyogcnRhcyBmaXhlZCBoZWFkZXIgKi8KKwlsZW4gPSA4OworCWVyciA9IChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKilidWY7CisJaWYgKGVyci0+ZXh0ZW5kZWRfbG9nX2xlbmd0aCkgeworCisJCS8qIGV4dGVuZGVkIGhlYWRlciAqLworCQlsZW4gKz0gZXJyLT5leHRlbmRlZF9sb2dfbGVuZ3RoOworCX0KKworCWlmIChydGFzX2Vycm9yX2xvZ19tYXggPT0gMCkKKwkJcnRhc19lcnJvcl9sb2dfbWF4ID0gcnRhc19nZXRfZXJyb3JfbG9nX21heCgpOworCisJaWYgKGxlbiA+IHJ0YXNfZXJyb3JfbG9nX21heCkKKwkJbGVuID0gcnRhc19lcnJvcl9sb2dfbWF4OworCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIEZpcnN0IHdyaXRlIHRvIG52cmFtLCBpZiBmYXRhbCBlcnJvciwgdGhhdCBpcyB0aGUgb25seQorICogcGxhY2Ugd2UgbG9nIHRoZSBpbmZvLiAgVGhlIGVycm9yIHdpbGwgYmUgcGlja2VkIHVwCisgKiBvbiB0aGUgbmV4dCByZWJvb3QgYnkgcnRhc2QuICBJZiBub3QgZmF0YWwsIHJ1biB0aGUKKyAqIG1ldGhvZCBmb3IgdGhlIHR5cGUgb2YgZXJyb3IuICBDdXJyZW50bHksIG9ubHkgUlRBUworICogZXJyb3JzIGhhdmUgbWV0aG9kcyBpbXBsZW1lbnRlZCwgYnV0IGluIHRoZSBmdXR1cmUKKyAqIHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCB0byBzdG9yZSBkYXRhIGluIG52cmFtIGJlZm9yZSBhCisgKiBjYWxsIHRvIHBhbmljKCkuCisgKgorICogWFhYIFdlIHdyaXRlIHRvIG52cmFtIHBlcmlvZGljYWxseSwgdG8gaW5kaWNhdGUgZXJyb3IgaGFzCisgKiBiZWVuIHdyaXR0ZW4gYW5kIHN5bmMnZCwgYnV0IHRoZXJlIGlzIGEgcG9zc2liaWxpdHkKKyAqIHRoYXQgaWYgd2UgZG9uJ3Qgc2h1dGRvd24gY29ycmVjdGx5LCBhIGR1cGxpY2F0ZSBlcnJvcgorICogcmVjb3JkIHdpbGwgYmUgY3JlYXRlZCBvbiBuZXh0IHJlYm9vdC4KKyAqLwordm9pZCBwU2VyaWVzX2xvZ19lcnJvcihjaGFyICpidWYsIHVuc2lnbmVkIGludCBlcnJfdHlwZSwgaW50IGZhdGFsKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgczsKKwlpbnQgbGVuID0gMDsKKworCXByX2RlYnVnKCJydGFzZDogbG9nZ2luZyBldmVudFxuIik7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCisJLyogZ2V0IGxlbmd0aCBhbmQgaW5jcmVhc2UgY291bnQgKi8KKwlzd2l0Y2ggKGVycl90eXBlICYgRVJSX1RZUEVfTUFTSykgeworCWNhc2UgRVJSX1RZUEVfUlRBU19MT0c6CisJCWxlbiA9IGxvZ19ydGFzX2xlbihidWYpOworCQlpZiAoIShlcnJfdHlwZSAmIEVSUl9GTEFHX0JPT1QpKQorCQkJZXJyb3JfbG9nX2NudCsrOworCQlicmVhazsKKwljYXNlIEVSUl9UWVBFX0tFUk5FTF9QQU5JQzoKKwlkZWZhdWx0OgorCQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7IC8qIEBAQCBERUJVRyBAQEAgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX1BQQzY0CisJLyogV3JpdGUgZXJyb3IgdG8gTlZSQU0gKi8KKwlpZiAobG9nZ2luZ19lbmFibGVkICYmICEoZXJyX3R5cGUgJiBFUlJfRkxBR19CT09UKSkKKwkJbnZyYW1fd3JpdGVfZXJyb3JfbG9nKGJ1ZiwgbGVuLCBlcnJfdHlwZSwgZXJyb3JfbG9nX2NudCk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwkvKgorCSAqIHJ0YXMgZXJyb3JzIGNhbiBvY2N1ciBkdXJpbmcgYm9vdCwgYW5kIHdlIGRvIHdhbnQgdG8gY2FwdHVyZQorCSAqIHRob3NlIHNvbWV3aGVyZSwgZXZlbiBpZiBudnJhbSBpc24ndCByZWFkeSAod2h5IG5vdD8pLCBhbmQgZXZlbgorCSAqIGlmIHJ0YXNkIGlzbid0IHJlYWR5LiBQdXQgdGhlbSBpbnRvIHRoZSBib290IGxvZywgYXQgbGVhc3QuCisJICovCisJaWYgKChlcnJfdHlwZSAmIEVSUl9UWVBFX01BU0spID09IEVSUl9UWVBFX1JUQVNfTE9HKQorCQlwcmludGtfbG9nX3J0YXMoYnVmLCBsZW4pOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gb3IgaGF2ZSBzdG9wcGVkIGxvZ2dpbmcgKi8KKwlpZiAoZmF0YWwgfHwgIWxvZ2dpbmdfZW5hYmxlZCkgeworCQlsb2dnaW5nX2VuYWJsZWQgPSAwOworCQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7IC8qIEBAQCBERUJVRyBAQEAgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQlyZXR1cm47CisJfQorCisJLyogY2FsbCB0eXBlIHNwZWNpZmljIG1ldGhvZCBmb3IgZXJyb3IgKi8KKwlzd2l0Y2ggKGVycl90eXBlICYgRVJSX1RZUEVfTUFTSykgeworCWNhc2UgRVJSX1RZUEVfUlRBU19MT0c6CisJCW9mZnNldCA9IHJ0YXNfZXJyb3JfbG9nX2J1ZmZlcl9tYXggKgorCQkJKChydGFzX2xvZ19zdGFydCtydGFzX2xvZ19zaXplKSAmIExPR19OVU1CRVJfTUFTSyk7CisKKwkJLyogRmlyc3QgY29weSBvdmVyIHNlcXVlbmNlIG51bWJlciAqLworCQltZW1jcHkoJnJ0YXNfbG9nX2J1ZltvZmZzZXRdLCAodm9pZCAqKSAmZXJyb3JfbG9nX2NudCwgc2l6ZW9mKGludCkpOworCisJCS8qIFNlY29uZCBjb3B5IG92ZXIgZXJyb3IgbG9nIGRhdGEgKi8KKwkJb2Zmc2V0ICs9IHNpemVvZihpbnQpOworCQltZW1jcHkoJnJ0YXNfbG9nX2J1ZltvZmZzZXRdLCBidWYsIGxlbik7CisKKwkJaWYgKHJ0YXNfbG9nX3NpemUgPCBMT0dfTlVNQkVSKQorCQkJcnRhc19sb2dfc2l6ZSArPSAxOworCQllbHNlCisJCQlydGFzX2xvZ19zdGFydCArPSAxOworCisJCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsgLyogQEBAIERFQlVHIEBAQCAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnRhc19sb2dfd2FpdCk7CisJCWJyZWFrOworCWNhc2UgRVJSX1RZUEVfS0VSTkVMX1BBTklDOgorCWRlZmF1bHQ6CisJCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsgLyogQEBAIERFQlVHIEBAQCAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJCXJldHVybjsKKwl9CisKK30KKworc3RhdGljIGludCBydGFzX2xvZ19vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRhc19sb2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQoreworCXJldHVybiAwOworfQorCisvKiBUaGlzIHdpbGwgY2hlY2sgaWYgYWxsIGV2ZW50cyBhcmUgbG9nZ2VkLCBpZiB0aGV5IGFyZSB0aGVuLCB3ZQorICoga25vdyB0aGF0IHdlIGNhbiBzYWZlbHkgY2xlYXIgdGhlIGV2ZW50cyBpbiBOVlJBTS4KKyAqIE5leHQgd2UnbGwgc2l0IGFuZCB3YWl0IGZvciBzb21ldGhpbmcgZWxzZSB0byBsb2cuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHJ0YXNfbG9nX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgZXJyb3I7CisJY2hhciAqdG1wOworCXVuc2lnbmVkIGxvbmcgczsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCWlmICghYnVmIHx8IGNvdW50IDwgcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb3VudCA9IHJ0YXNfZXJyb3JfbG9nX2J1ZmZlcl9tYXg7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXRtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdG1wKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CisKKwkvKiBpZiBpdCdzIDAsIHRoZW4gd2Uga25vdyB3ZSBnb3QgdGhlIGxhc3Qgb25lICh0aGUgb25lIGluIE5WUkFNKSAqLworCXdoaWxlIChydGFzX2xvZ19zaXplID09IDApIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJCQllcnJvciA9IC1FQUdBSU47CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICghbG9nZ2luZ19lbmFibGVkKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJCQllcnJvciA9IC1FTk9EQVRBOworCQkJZ290byBvdXQ7CisJCX0KKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkJbnZyYW1fY2xlYXJfZXJyb3JfbG9nKCk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShydGFzX2xvZ193YWl0LCBydGFzX2xvZ19zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJfQorCisJb2Zmc2V0ID0gcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heCAqIChydGFzX2xvZ19zdGFydCAmIExPR19OVU1CRVJfTUFTSyk7CisJbWVtY3B5KHRtcCwgJnJ0YXNfbG9nX2J1ZltvZmZzZXRdLCBjb3VudCk7CisKKwlydGFzX2xvZ19zdGFydCArPSAxOworCXJ0YXNfbG9nX3NpemUgLT0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CisKKwllcnJvciA9IGNvcHlfdG9fdXNlcihidWYsIHRtcCwgY291bnQpID8gLUVGQVVMVCA6IGNvdW50Oworb3V0OgorCWtmcmVlKHRtcCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJ0YXNfbG9nX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCXBvbGxfd2FpdChmaWxlLCAmcnRhc19sb2dfd2FpdCwgd2FpdCk7CisJaWYgKHJ0YXNfbG9nX3NpemUpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3J0YXNfbG9nX29wZXJhdGlvbnMgPSB7CisJLnJlYWQgPQkJcnRhc19sb2dfcmVhZCwKKwkucG9sbCA9CQlydGFzX2xvZ19wb2xsLAorCS5vcGVuID0JCXJ0YXNfbG9nX29wZW4sCisJLnJlbGVhc2UgPQlydGFzX2xvZ19yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBlbmFibGVfc3VydmVpbGxhbmNlKGludCB0aW1lb3V0KQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gcnRhc19zZXRfaW5kaWNhdG9yKFNVUlZFSUxMQU5DRV9UT0tFTiwgMCwgdGltZW91dCk7CisKKwlpZiAoZXJyb3IgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXJyb3IgPT0gLUVJTlZBTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAicnRhc2Q6IHN1cnZlaWxsYW5jZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJydGFzZDogY291bGQgbm90IHVwZGF0ZSBzdXJ2ZWlsbGFuY2VcbiIpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgZG9fZXZlbnRfc2Nhbih2b2lkKQoreworCWludCBlcnJvcjsKKwlkbyB7CisJCW1lbXNldChsb2dkYXRhLCAwLCBydGFzX2Vycm9yX2xvZ19tYXgpOworCQllcnJvciA9IHJ0YXNfY2FsbChldmVudF9zY2FuLCA0LCAxLCBOVUxMLAorCQkJCSAgUlRBU19FVkVOVF9TQ0FOX0FMTF9FVkVOVFMsIDAsCisJCQkJICBfX3BhKGxvZ2RhdGEpLCBydGFzX2Vycm9yX2xvZ19tYXgpOworCQlpZiAoZXJyb3IgPT0gLTEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZXZlbnQtc2NhbiBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyb3IgPT0gMCkKKwkJCXBTZXJpZXNfbG9nX2Vycm9yKGxvZ2RhdGEsIEVSUl9UWVBFX1JUQVNfTE9HLCAwKTsKKworCX0gd2hpbGUoZXJyb3IgPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0YXNfZXZlbnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOworREVDTEFSRV9ERUxBWUVEX1dPUksoZXZlbnRfc2Nhbl93b3JrLCBydGFzX2V2ZW50X3NjYW4pOworCisvKgorICogRGVsYXkgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBzZWNvbmQgc2luY2Ugc29tZSBtYWNoaW5lcyBoYXZlIHByb2JsZW1zIGlmCisgKiB3ZSBjYWxsIGV2ZW50LXNjYW4gdG9vIHF1aWNrbHkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV2ZW50X3NjYW5fZGVsYXkgPSAxKkhaOworc3RhdGljIGludCBmaXJzdF9wYXNzID0gMTsKKworc3RhdGljIHZvaWQgcnRhc19ldmVudF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZG9fZXZlbnRfc2NhbigpOworCisJZ2V0X29ubGluZV9jcHVzKCk7CisKKwljcHUgPSBuZXh0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1ID09IE5SX0NQVVMpIHsKKwkJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKKworCQlpZiAoZmlyc3RfcGFzcykgeworCQkJZmlyc3RfcGFzcyA9IDA7CisJCQlldmVudF9zY2FuX2RlbGF5ID0gMzAqSFovcnRhc19ldmVudF9zY2FuX3JhdGU7CisKKwkJCWlmIChzdXJ2ZWlsbGFuY2VfdGltZW91dCAhPSAtMSkgeworCQkJCXByX2RlYnVnKCJydGFzZDogZW5hYmxpbmcgc3VydmVpbGxhbmNlXG4iKTsKKwkJCQllbmFibGVfc3VydmVpbGxhbmNlKHN1cnZlaWxsYW5jZV90aW1lb3V0KTsKKwkJCQlwcl9kZWJ1ZygicnRhc2Q6IHN1cnZlaWxsYW5jZSBlbmFibGVkXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsICZldmVudF9zY2FuX3dvcmssCisJCV9fcm91bmRfamlmZmllc19yZWxhdGl2ZShldmVudF9zY2FuX2RlbGF5LCBjcHUpKTsKKworCXB1dF9vbmxpbmVfY3B1cygpOworfQorCisjaWZkZWYgQ09ORklHX1BQQzY0CitzdGF0aWMgdm9pZCByZXRyZWl2ZV9udnJhbV9lcnJvcl9sb2codm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZXJyX3R5cGUgOworCWludCByYyA7CisKKwkvKiBTZWUgaWYgd2UgaGF2ZSBhbnkgZXJyb3Igc3RvcmVkIGluIE5WUkFNICovCisJbWVtc2V0KGxvZ2RhdGEsIDAsIHJ0YXNfZXJyb3JfbG9nX21heCk7CisJcmMgPSBudnJhbV9yZWFkX2Vycm9yX2xvZyhsb2dkYXRhLCBydGFzX2Vycm9yX2xvZ19tYXgsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX3R5cGUsICZlcnJvcl9sb2dfY250KTsKKwkvKiBXZSBjYW4gdXNlIHJ0YXNfbG9nX2J1ZiBub3cgKi8KKwlsb2dnaW5nX2VuYWJsZWQgPSAxOworCWlmICghcmMpIHsKKwkJaWYgKGVycl90eXBlICE9IEVSUl9GTEFHX0FMUkVBRFlfTE9HR0VEKSB7CisJCQlwU2VyaWVzX2xvZ19lcnJvcihsb2dkYXRhLCBlcnJfdHlwZSB8IEVSUl9GTEFHX0JPT1QsIDApOworCQl9CisJfQorfQorI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCitzdGF0aWMgdm9pZCByZXRyZWl2ZV9udnJhbV9lcnJvcl9sb2codm9pZCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworc3RhdGljIHZvaWQgc3RhcnRfZXZlbnRfc2Nhbih2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJSVEFTIGRhZW1vbiBzdGFydGVkXG4iKTsKKwlwcl9kZWJ1ZygicnRhc2Q6IHdpbGwgc2xlZXAgZm9yICVkIG1pbGxpc2Vjb25kc1xuIiwKKwkJICgzMDAwMCAvIHJ0YXNfZXZlbnRfc2Nhbl9yYXRlKSk7CisKKwkvKiBSZXRyZWl2ZSBlcnJvcnMgZnJvbSBudnJhbSBpZiBhbnkgKi8KKwlyZXRyZWl2ZV9udnJhbV9lcnJvcl9sb2coKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApLCAmZXZlbnRfc2Nhbl93b3JrLAorCQkJCSBldmVudF9zY2FuX2RlbGF5KTsKK30KKworc3RhdGljIGludCBfX2luaXQgcnRhc19pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCWlmICghbWFjaGluZV9pcyhwc2VyaWVzKSAmJiAhbWFjaGluZV9pcyhjaHJwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBObyBSVEFTICovCisJZXZlbnRfc2NhbiA9IHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKTsKKwlpZiAoZXZlbnRfc2NhbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgeworCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogTm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlydGFzX2V2ZW50X3NjYW5fcmF0ZSA9IHJ0YXNfdG9rZW4oInJ0YXMtZXZlbnQtc2Nhbi1yYXRlIik7CisJaWYgKHJ0YXNfZXZlbnRfc2Nhbl9yYXRlID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CisJCXByaW50ayhLRVJOX0VSUiAicnRhc2Q6IG5vIHJ0YXMtZXZlbnQtc2Nhbi1yYXRlIG9uIHN5c3RlbVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1ha2Ugcm9vbSBmb3IgdGhlIHNlcXVlbmNlIG51bWJlciAqLworCXJ0YXNfZXJyb3JfbG9nX21heCA9IHJ0YXNfZ2V0X2Vycm9yX2xvZ19tYXgoKTsKKwlydGFzX2Vycm9yX2xvZ19idWZmZXJfbWF4ID0gcnRhc19lcnJvcl9sb2dfbWF4ICsgc2l6ZW9mKGludCk7CisKKwlydGFzX2xvZ19idWYgPSB2bWFsbG9jKHJ0YXNfZXJyb3JfbG9nX2J1ZmZlcl9tYXgqTE9HX05VTUJFUik7CisJaWYgKCFydGFzX2xvZ19idWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJydGFzZDogbm8gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZW50cnkgPSBwcm9jX2NyZWF0ZSgicG93ZXJwYy9ydGFzL2Vycm9yX2xvZyIsIFNfSVJVU1IsIE5VTEwsCisJCQkgICAgJnByb2NfcnRhc19sb2dfb3BlcmF0aW9ucyk7CisJaWYgKCFlbnRyeSkKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIGVycm9yX2xvZyBwcm9jIGVudHJ5XG4iKTsKKworCXN0YXJ0X2V2ZW50X3NjYW4oKTsKKworCXJldHVybiAwOworfQorX19pbml0Y2FsbChydGFzX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBzdXJ2ZWlsbGFuY2Vfc2V0dXAoY2hhciAqc3RyKQoreworCWludCBpOworCisJLyogV2Ugb25seSBkbyBzdXJ2ZWlsbGFuY2Ugb24gcHNlcmllcyAqLworCWlmICghbWFjaGluZV9pcyhwc2VyaWVzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2V0X29wdGlvbigmc3RyLCZpKSkgeworCQlpZiAoaSA+PSAwICYmIGkgPD0gMjU1KQorCQkJc3VydmVpbGxhbmNlX3RpbWVvdXQgPSBpOworCX0KKworCXJldHVybiAxOworfQorX19zZXR1cCgic3VydmVpbGxhbmNlPSIsIHN1cnZlaWxsYW5jZV9zZXR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0YXNtc2dzX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoc3RyY21wKHN0ciwgIm9uIikgPT0gMCkKKwkJZnVsbF9ydGFzX21zZ3MgPSAxOworCWVsc2UgaWYgKHN0cmNtcChzdHIsICJvZmYiKSA9PSAwKQorCQlmdWxsX3J0YXNfbXNncyA9IDA7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInJ0YXNtc2dzPSIsIHJ0YXNtc2dzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDg0NWM3MmEuLjAzZGQ2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAjZW5kaWYgLyogQ09ORklHX1RBVSAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBwdnIpOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBjcHVfcHZyKTsKICNlbmRpZgogCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCkBAIC0yMDksNyArMjA5LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU01QCi0JcHZyID0gcGVyX2NwdShwdnIsIGNwdV9pZCk7CisJcHZyID0gcGVyX2NwdShjcHVfcHZyLCBjcHVfaWQpOwogI2Vsc2UKIAlwdnIgPSBtZnNwcihTUFJOX1BWUik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCBkZjJjOWU5Li42NTY4NDA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0zNTYsMTEgKzM1Niw2IEBACiAJICovCiAJaW5pdGlhbGl6ZV9jYWNoZV9pbmZvKCk7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgaXJxIHJlbWFwcGluZyBzdWJzeXN0ZW0KLQkgKi8KLQlpcnFfZWFybHlfaW5pdCgpOwotCiAjaWZkZWYgQ09ORklHX1BQQ19SVEFTCiAJLyoKIAkgKiBJbml0aWFsaXplIFJUQVMgaWYgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwppbmRleCA5Yjg2YTc0Li5hNTIxZmI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTIxOCw2ICsyMTgsOSBAQAogCiBzdGF0aWMgdm9pZCBzdG9wX3RoaXNfY3B1KHZvaWQgKmR1bW15KQogeworCS8qIFJlbW92ZSB0aGlzIENQVSAqLworCXNldF9jcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSwgZmFsc2UpOworCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAl3aGlsZSAoMSkKIAkJOwpAQCAtMjMyLDcgKzIzNSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQogewotCXBlcl9jcHUocHZyLCBpZCkgPSBtZnNwcihTUFJOX1BWUik7CisJcGVyX2NwdShjcHVfcHZyLCBpZCkgPSBtZnNwcihTUFJOX1BWUik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfY3JlYXRlX2lkbGUodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCA5NTZhYjMzLi5lMjM1ZTUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCkBAIC00NjEsNiArNDYxLDI1IEBACiAKIAljYWNoZWluZm9fY3B1X29mZmxpbmUoY3B1KTsKIH0KKworI2lmZGVmIENPTkZJR19BUkNIX0NQVV9QUk9CRV9SRUxFQVNFCitzc2l6ZV90IGFyY2hfY3B1X3Byb2JlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWlmIChwcGNfbWQuY3B1X3Byb2JlKQorCQlyZXR1cm4gcHBjX21kLmNwdV9wcm9iZShidWYsIGNvdW50KTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzc2l6ZV90IGFyY2hfY3B1X3JlbGVhc2UoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaWYgKHBwY19tZC5jcHVfcmVsZWFzZSkKKwkJcmV0dXJuIHBwY19tZC5jcHVfcmVsZWFzZShidWYsIGNvdW50KTsKKworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qIENPTkZJR19BUkNIX0NQVV9QUk9CRV9SRUxFQVNFICovCisKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIGludCBfX2NwdWluaXQgc3lzZnNfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDY3NDgwMGIuLjliYTJjYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC0yNjksNiArMjY5LDcgQEAKIAlwZXJfY3B1KGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBkZWx0YXNjYWxlZDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChhY2NvdW50X3N5c3RlbV92dGltZSk7CiAKIC8qCiAgKiBUcmFuc2ZlciB0aGUgdXNlciBhbmQgc3lzdGVtIHRpbWVzIGFjY3VtdWxhdGVkIGluIHRoZSBwYWNhCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggOWQxZjkzNS4uZDA2OWZmOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMTc0LDYgKzE3NCwxNSBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHVzZXJfc2luZ2xlX3N0ZXBfc2lnaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2lnaW5mb190ICppbmZvKQoreworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5zaV9zaWdubyA9IFNJR1RSQVA7CisJaW5mby0+c2lfY29kZSA9IFRSQVBfVFJBQ0U7CisJaW5mby0+c2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKXJlZ3MtPm5pcDsKK30KKwogdm9pZCBfZXhjZXB0aW9uKGludCBzaWduciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJc2lnaW5mb190IGluZm87CkBAIC0xOTgsMjggKzIwNyw2IEBACiAJaW5mby5zaV9jb2RlID0gY29kZTsKIAlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgYWRkcjsKIAlmb3JjZV9zaWdfaW5mbyhzaWduciwgJmluZm8sIGN1cnJlbnQpOwotCi0JLyoKLQkgKiBJbml0IGdldHMgbm8gc2lnbmFscyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZm9yLgotCSAqIFRoYXQncyBhbGwgdmVyeSB3ZWxsLCBidXQgaWYgaXQgaGFzIGNhdXNlZCBhIHN5bmNocm9ub3VzCi0JICogZXhjZXB0aW9uIGFuZCB3ZSBpZ25vcmUgdGhlIHJlc3VsdGluZyBzaWduYWwsIGl0IHdpbGwganVzdAotCSAqIGdlbmVyYXRlIHRoZSBzYW1lIGV4Y2VwdGlvbiBvdmVyIGFuZCBvdmVyIGFnYWluIGFuZCB3ZSBnZXQKLQkgKiBub3doZXJlLiAgQmV0dGVyIHRvIGtpbGwgaXQgYW5kIGxldCB0aGUga2VybmVsIHBhbmljLgotCSAqLwotCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewotCQlfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyOwotCi0JCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQloYW5kbGVyID0gY3VycmVudC0+c2lnaGFuZC0+YWN0aW9uW3NpZ25yLTFdLnNhLnNhX2hhbmRsZXI7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWlmIChoYW5kbGVyID09IFNJR19ERkwpIHsKLQkJCS8qIGluaXQgaGFzIGdlbmVyYXRlZCBhIHN5bmNocm9ub3VzIGV4Y2VwdGlvbgotCQkJICAgYW5kIGl0IGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZm9yIHRoZSBzaWduYWwgKi8KLQkJCXByaW50ayhLRVJOX0NSSVQgImluaXQgaGFzIGdlbmVyYXRlZCBzaWduYWwgJWQgIgotCQkJICAgICAgICJidXQgaGFzIG5vIGhhbmRsZXIgZm9yIGl0XG4iLCBzaWducik7Ci0JCQlkb19leGl0KHNpZ25yKTsKLQkJfQotCX0KIH0KIAogI2lmZGVmIENPTkZJR19QUEM2NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwppbmRleCBmYzlhZjQ3Li5lMzljYWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwpAQCAtNjAsNiArNjAsOCBAQAogCXVkYmdfaW5pdF80MHhfcmVhbG1vZGUoKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19FQVJMWV9ERUJVR19DUE0pCiAJdWRiZ19pbml0X2NwbSgpOworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPKQorCXVkYmdfaW5pdF91c2JnZWNrbygpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUwppbmRleCA2N2I2OTE2Li5mZTQ2MDQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMKQEAgLTU4LDcgKzU4LDcgQEAKIAkgKiBhbGwgMSdzCiAJICovCiAJbWZzcHIJcjQsU1BSTl9WUlNBVkUKLQljbXBkaQkwLHI0LDAKKwljbXB3aQkwLHI0LDAKIAlibmUrCTFmCiAJbGkJcjQsLTEKIAltdHNwcglTUFJOX1ZSU0FWRSxyNApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDI3NzM1YTcuLmRjZDAxYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTM4LDYgKzM4LDkgQEAKICNlbmRpZgogU0VDVElPTlMKIHsKKwkuID0gMDsKKwlyZWxvY19zdGFydCA9IC47CisKIAkuID0gS0VSTkVMQkFTRTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCBjMjk5MjY4Li4wNzcwM2Y3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCkBAIC0yMSw2ICsyMSwyMyBAQAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBBTk9OX0lOT0RFUwogCitjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSCisJYm9vbAorCitjb25maWcgS1ZNX0JPT0szU182NAorCXRyaXN0YXRlICJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29ycyIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQUEM2NAorCXNlbGVjdCBLVk0KKwlzZWxlY3QgS1ZNX0JPT0szU182NF9IQU5ETEVSCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGFuZCBib29rM3NfMzIgZ3Vlc3Qga2VybmVscworCSAgaW4gdmlydHVhbCBtYWNoaW5lcyBvbiBib29rM3NfNjQgaG9zdCBwcm9jZXNzb3JzLgorCisJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoCisJICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEtWTV80NDAKIAlib29sICJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyA0NDAgcHJvY2Vzc29ycyIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiA0NHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCmluZGV4IDM3NjU1ZmUuLjU2NDg0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQpAQCAtMTIsMjYgKzEyLDQ1IEBACiBDRkxBR1NfZTUwMF90bGIubyA6PSAtSS4KIENGTEFHU19lbXVsYXRlLm8gIDo9IC1JLgogCi1rdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzLXkpIHBvd2VycGMubyBlbXVsYXRlLm8KK2NvbW1vbi1vYmpzLXkgKz0gcG93ZXJwYy5vIGVtdWxhdGUubwogb2JqLSQoQ09ORklHX0tWTV9FWElUX1RJTUlORykgKz0gdGltaW5nLm8KLW9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vCitvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSArPSBib29rM3NfNjRfZXhwb3J0cy5vCiAKIEFGTEFHU19ib29rZV9pbnRlcnJ1cHRzLm8gOj0gLUkkKG9iaikKIAoga3ZtLTQ0MC1vYmpzIDo9IFwKKwkkKGNvbW1vbi1vYmpzLXkpIFwKIAlib29rZS5vIFwKIAlib29rZV9lbXVsYXRlLm8gXAogCWJvb2tlX2ludGVycnVwdHMubyBcCiAJNDR4Lm8gXAogCTQ0eF90bGIubyBcCiAJNDR4X2VtdWxhdGUubwotb2JqLSQoQ09ORklHX0tWTV80NDApICs9IGt2bS00NDAubwora3ZtLW9ianMtJChDT05GSUdfS1ZNXzQ0MCkgOj0gJChrdm0tNDQwLW9ianMpCiAKIGt2bS1lNTAwLW9ianMgOj0gXAorCSQoY29tbW9uLW9ianMteSkgXAogCWJvb2tlLm8gXAogCWJvb2tlX2VtdWxhdGUubyBcCiAJYm9va2VfaW50ZXJydXB0cy5vIFwKIAllNTAwLm8gXAogCWU1MDBfdGxiLm8gXAogCWU1MDBfZW11bGF0ZS5vCi1vYmotJChDT05GSUdfS1ZNX0U1MDApICs9IGt2bS1lNTAwLm8KK2t2bS1vYmpzLSQoQ09ORklHX0tWTV9FNTAwKSA6PSAkKGt2bS1lNTAwLW9ianMpCisKK2t2bS1ib29rM3NfNjQtb2JqcyA6PSBcCisJJChjb21tb24tb2Jqcy15KSBcCisJYm9vazNzLm8gXAorCWJvb2szc182NF9lbXVsYXRlLm8gXAorCWJvb2szc182NF9pbnRlcnJ1cHRzLm8gXAorCWJvb2szc182NF9tbXVfaG9zdC5vIFwKKwlib29rM3NfNjRfbW11Lm8gXAorCWJvb2szc18zMl9tbXUubwora3ZtLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NCkgOj0gJChrdm0tYm9vazNzXzY0LW9ianMpCisKK2t2bS1vYmpzIDo9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KQorCitvYmotJChDT05GSUdfS1ZNXzQ0MCkgKz0ga3ZtLm8KK29iai0kKENPTkZJR19LVk1fRTUwMCkgKz0ga3ZtLm8KK29iai0kKENPTkZJR19LVk1fQk9PSzNTXzY0KSArPSBrdm0ubworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTI5NGJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwpAQCAtMCwwICsxLDk3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS4gU1VTRSBMaW51eCBQcm9kdWN0cyBHbWJILiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KKyAqICAgIEtldmluIFdvbGYgPG1haWxAa2V2aW4td29sZi5kZT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYXJjaC9wb3dlcnBjL2t2bS80NHguYywKKyAqIGJ5IEhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNkZWZpbmUgVkNQVV9TVEFUKHgpIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgc3RhdC54KSwgS1ZNX1NUQVRfVkNQVQorCisvKiAjZGVmaW5lIEVYSVRfREVCVUcgKi8KKy8qICNkZWZpbmUgRVhJVF9ERUJVR19TSU1QTEUgKi8KKworLyogV2l0aG91dCBBR0dSRVNTSVZFX0RFQyB3ZSBvbmx5IGZpcmUgb2ZmIGEgREVDIGludGVycnVwdCB3aGVuIERFQyB0dXJucyAwLgorICogV2hlbiBzZXQsIHdlIHJldHJpZ2dlciBhIERFQyBpbnRlcnJ1cHQgYWZ0ZXIgdGhhdCBpZiBERUMgPD0gMC4KKyAqIFBQQzMyIExpbnV4IHJ1bnMgZmFzdGVyIHdpdGhvdXQgQUdHUkVTU0lWRV9ERUMsIFBQQzY0IExpbnV4IHJlcXVpcmVzIGl0LiAqLworCisvKiAjZGVmaW5lIEFHR1JFU1NJVkVfREVDICovCisKK3N0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtIGRlYnVnZnNfZW50cmllc1tdID0geworCXsgImV4aXRzIiwgICAgICAgVkNQVV9TVEFUKHN1bV9leGl0cykgfSwKKwl7ICJtbWlvIiwgICAgICAgIFZDUFVfU1RBVChtbWlvX2V4aXRzKSB9LAorCXsgInNpZyIsICAgICAgICAgVkNQVV9TVEFUKHNpZ25hbF9leGl0cykgfSwKKwl7ICJzeXNjIiwgICAgICAgIFZDUFVfU1RBVChzeXNjYWxsX2V4aXRzKSB9LAorCXsgImluc3RfZW11IiwgICAgVkNQVV9TVEFUKGVtdWxhdGVkX2luc3RfZXhpdHMpIH0sCisJeyAiZGVjIiwgICAgICAgICBWQ1BVX1NUQVQoZGVjX2V4aXRzKSB9LAorCXsgImV4dF9pbnRyIiwgICAgVkNQVV9TVEFUKGV4dF9pbnRyX2V4aXRzKSB9LAorCXsgInF1ZXVlX2ludHIiLCAgVkNQVV9TVEFUKHF1ZXVlX2ludHIpIH0sCisJeyAiaGFsdF93YWtldXAiLCBWQ1BVX1NUQVQoaGFsdF93YWtldXApIH0sCisJeyAicGZfc3RvcmFnZSIsICBWQ1BVX1NUQVQocGZfc3RvcmFnZSkgfSwKKwl7ICJzcF9zdG9yYWdlIiwgIFZDUFVfU1RBVChzcF9zdG9yYWdlKSB9LAorCXsgInBmX2luc3RydWMiLCAgVkNQVV9TVEFUKHBmX2luc3RydWMpIH0sCisJeyAic3BfaW5zdHJ1YyIsICBWQ1BVX1NUQVQoc3BfaW5zdHJ1YykgfSwKKwl7ICJsZCIsICAgICAgICAgIFZDUFVfU1RBVChsZCkgfSwKKwl7ICJsZF9zbG93IiwgICAgIFZDUFVfU1RBVChsZF9zbG93KSB9LAorCXsgInN0IiwgICAgICAgICAgVkNQVV9TVEFUKHN0KSB9LAorCXsgInN0X3Nsb3ciLCAgICAgVkNQVV9TVEFUKHN0X3Nsb3cpIH0sCisJeyBOVUxMIH0KK307CisKK3ZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworfQorCit2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKK3sKKwltZW1jcHkoZ2V0X3BhY2EoKS0+a3ZtX3NsYiwgdG9fYm9vazNzKHZjcHUpLT5zbGJfc2hhZG93LCBzaXplb2YoZ2V0X3BhY2EoKS0+a3ZtX3NsYikpOworCWdldF9wYWNhKCktPmt2bV9zbGJfbWF4ID0gdG9fYm9vazNzKHZjcHUpLT5zbGJfc2hhZG93X21heDsKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbWVtY3B5KHRvX2Jvb2szcyh2Y3B1KS0+c2xiX3NoYWRvdywgZ2V0X3BhY2EoKS0+a3ZtX3NsYiwgc2l6ZW9mKGdldF9wYWNhKCktPmt2bV9zbGIpKTsKKwl0b19ib29rM3ModmNwdSktPnNsYl9zaGFkb3dfbWF4ID0gZ2V0X3BhY2EoKS0+a3ZtX3NsYl9tYXg7Cit9CisKKyNpZiBkZWZpbmVkKEFHR1JFU1NJVkVfREVDKSB8fCBkZWZpbmVkKEVYSVRfREVCVUcpCitzdGF0aWMgdTMyIGt2bXBwY19nZXRfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1NjQgamQgPSBtZnRiKCkgLSB2Y3B1LT5hcmNoLmRlY19qaWZmaWVzOworCXJldHVybiB2Y3B1LT5hcmNoLmRlYyAtIGpkOworfQorI2VuZGlmCisKK3ZvaWQga3ZtcHBjX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbXNyKQoreworCXVsb25nIG9sZF9tc3IgPSB2Y3B1LT5hcmNoLm1zcjsKKworI2lmZGVmIEVYSVRfREVCVUcKKwlwcmludGsoS0VSTl9JTkZPICJLVk06IFNldCBNU1IgdG8gMHglbGx4XG4iLCBtc3IpOworI2VuZGlmCisJbXNyICY9IHRvX2Jvb2szcyh2Y3B1KS0+bXNyX21hc2s7CisJdmNwdS0+YXJjaC5tc3IgPSBtc3I7CisJdmNwdS0+YXJjaC5zaGFkb3dfbXNyID0gbXNyIHwgTVNSX1VTRVIzMjsKKwl2Y3B1LT5hcmNoLnNoYWRvd19tc3IgJj0gKCBNU1JfVkVDIHwgTVNSX1ZTWCB8IE1TUl9GUCB8IE1TUl9GRTAgfAorCQkJCSAgIE1TUl9VU0VSNjQgfCBNU1JfU0UgfCBNU1JfQkUgfCBNU1JfREUgfAorCQkJCSAgIE1TUl9GRTEpOworCisJaWYgKG1zciAmIChNU1JfV0V8TVNSX1BPVykpIHsKKwkJaWYgKCF2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucykgeworCQkJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7CisJCQl2Y3B1LT5zdGF0LmhhbHRfd2FrZXVwKys7CisJCX0KKwl9CisKKwlpZiAoKCh2Y3B1LT5hcmNoLm1zciAmIChNU1JfSVJ8TVNSX0RSKSkgIT0gKG9sZF9tc3IgJiAoTVNSX0lSfE1TUl9EUikpKSB8fAorCSAgICAodmNwdS0+YXJjaC5tc3IgJiBNU1JfUFIpICE9IChvbGRfbXNyICYgTVNSX1BSKSkgeworCQlrdm1wcGNfbW11X2ZsdXNoX3NlZ21lbnRzKHZjcHUpOworCQlrdm1wcGNfbW11X21hcF9zZWdtZW50KHZjcHUsIHZjcHUtPmFyY2gucGMpOworCX0KK30KKwordm9pZCBrdm1wcGNfaW5qZWN0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWMsIHU2NCBmbGFncykKK3sKKwl2Y3B1LT5hcmNoLnNycjAgPSB2Y3B1LT5hcmNoLnBjOworCXZjcHUtPmFyY2guc3JyMSA9IHZjcHUtPmFyY2gubXNyIHwgZmxhZ3M7CisJdmNwdS0+YXJjaC5wYyA9IHRvX2Jvb2szcyh2Y3B1KS0+aGlvciArIHZlYzsKKwl2Y3B1LT5hcmNoLm1tdS5yZXNldF9tc3IodmNwdSk7Cit9CisKK3ZvaWQga3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IHZlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJpbzsKKworCXZjcHUtPnN0YXQucXVldWVfaW50cisrOworCXN3aXRjaCAodmVjKSB7CisJY2FzZSAweDEwMDogcHJpbyA9IEJPT0szU19JUlFQUklPX1NZU1RFTV9SRVNFVDsJCWJyZWFrOworCWNhc2UgMHgyMDA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19NQUNISU5FX0NIRUNLOwlicmVhazsKKwljYXNlIDB4MzAwOiBwcmlvID0gQk9PSzNTX0lSUVBSSU9fREFUQV9TVE9SQUdFOwkJYnJlYWs7CisJY2FzZSAweDM4MDogcHJpbyA9IEJPT0szU19JUlFQUklPX0RBVEFfU0VHTUVOVDsJCWJyZWFrOworCWNhc2UgMHg0MDA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19JTlNUX1NUT1JBR0U7CQlicmVhazsKKwljYXNlIDB4NDgwOiBwcmlvID0gQk9PSzNTX0lSUVBSSU9fSU5TVF9TRUdNRU5UOwkJYnJlYWs7CisJY2FzZSAweDUwMDogcHJpbyA9IEJPT0szU19JUlFQUklPX0VYVEVSTkFMOwkJYnJlYWs7CisJY2FzZSAweDYwMDogcHJpbyA9IEJPT0szU19JUlFQUklPX0FMSUdOTUVOVDsJCWJyZWFrOworCWNhc2UgMHg3MDA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19QUk9HUkFNOwkJYnJlYWs7CisJY2FzZSAweDgwMDogcHJpbyA9IEJPT0szU19JUlFQUklPX0ZQX1VOQVZBSUw7CQlicmVhazsKKwljYXNlIDB4OTAwOiBwcmlvID0gQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVI7CQlicmVhazsKKwljYXNlIDB4YzAwOiBwcmlvID0gQk9PSzNTX0lSUVBSSU9fU1lTQ0FMTDsJCWJyZWFrOworCWNhc2UgMHhkMDA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19ERUJVRzsJCWJyZWFrOworCWNhc2UgMHhmMjA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19BTFRJVkVDOwkJYnJlYWs7CisJY2FzZSAweGY0MDogcHJpbyA9IEJPT0szU19JUlFQUklPX1ZTWDsJCQlicmVhazsKKwlkZWZhdWx0OiAgICBwcmlvID0gQk9PSzNTX0lSUVBSSU9fTUFYOwkJCWJyZWFrOworCX0KKworCXNldF9iaXQocHJpbywgJnZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKKyNpZmRlZiBFWElUX0RFQlVHCisJcHJpbnRrKEtFUk5fSU5GTyAiUXVldWVpbmcgaW50ZXJydXB0ICV4XG4iLCB2ZWMpOworI2VuZGlmCit9CisKKwordm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNKTsKK30KKwordm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSKTsKK30KKworaW50IGt2bXBwY19jb3JlX3BlbmRpbmdfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoQk9PSzNTX0lOVEVSUlVQVF9ERUNSRU1FTlRFUiA+PiA3LCAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOworfQorCit2b2lkIGt2bXBwY19jb3JlX3F1ZXVlX2V4dGVybmFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSkKK3sKKwlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTCk7Cit9CisKK2ludCBrdm1wcGNfYm9vazNzX2lycXByaW9fZGVsaXZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwlpbnQgZGVsaXZlciA9IDE7CisJaW50IHZlYyA9IDA7CisKKwlzd2l0Y2ggKHByaW9yaXR5KSB7CisJY2FzZSBCT09LM1NfSVJRUFJJT19ERUNSRU1FTlRFUjoKKwkJZGVsaXZlciA9IHZjcHUtPmFyY2gubXNyICYgTVNSX0VFOworCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSOworCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX0VYVEVSTkFMOgorCQlkZWxpdmVyID0gdmNwdS0+YXJjaC5tc3IgJiBNU1JfRUU7CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfRVhURVJOQUw7CisJCWJyZWFrOworCWNhc2UgQk9PSzNTX0lSUVBSSU9fU1lTVEVNX1JFU0VUOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX1NZU1RFTV9SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSVJRUFJJT19NQUNISU5FX0NIRUNLOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0s7CisJCWJyZWFrOworCWNhc2UgQk9PSzNTX0lSUVBSSU9fREFUQV9TVE9SQUdFOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0RBVEFfU1RPUkFHRTsKKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSVJRUFJJT19JTlNUX1NUT1JBR0U6CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfSU5TVF9TVE9SQUdFOworCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX0RBVEFfU0VHTUVOVDoKKwkJdmVjID0gQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NFR01FTlQ7CisJCWJyZWFrOworCWNhc2UgQk9PSzNTX0lSUVBSSU9fSU5TVF9TRUdNRU5UOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0lOU1RfU0VHTUVOVDsKKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSVJRUFJJT19BTElHTk1FTlQ6CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfQUxJR05NRU5UOworCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX1BST0dSQU06CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfUFJPR1JBTTsKKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSVJRUFJJT19WU1g6CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfVlNYOworCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX0FMVElWRUM6CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfQUxUSVZFQzsKKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSVJRUFJJT19GUF9VTkFWQUlMOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0ZQX1VOQVZBSUw7CisJCWJyZWFrOworCWNhc2UgQk9PSzNTX0lSUVBSSU9fU1lTQ0FMTDoKKwkJdmVjID0gQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMOworCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX0RFQlVHOgorCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX1RSQUNFOworCQlicmVhazsKKwljYXNlIEJPT0szU19JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1I6CisJCXZlYyA9IEJPT0szU19JTlRFUlJVUFRfUEVSRk1PTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGVsaXZlciA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAiS1ZNOiBVbmtub3duIGludGVycnVwdDogMHgleFxuIiwgcHJpb3JpdHkpOworCQlicmVhazsKKwl9CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fSU5GTyAiRGVsaXZlciBpbnRlcnJ1cHQgMHgleD8gJXhcbiIsIHZlYywgZGVsaXZlcik7CisjZW5kaWYKKworCWlmIChkZWxpdmVyKQorCQlrdm1wcGNfaW5qZWN0X2ludGVycnVwdCh2Y3B1LCB2ZWMsIDBVTEwpOworCisJcmV0dXJuIGRlbGl2ZXI7Cit9CisKK3ZvaWQga3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nICpwZW5kaW5nID0gJnZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zOworCXVuc2lnbmVkIGludCBwcmlvcml0eTsKKworCS8qIFhYWCBiZSBtb3JlIGNsZXZlciBoZXJlIC0gbm8gbmVlZCB0byBtZnRiKCkgb24gZXZlcnkgZW50cnkgKi8KKwkvKiBJc3N1ZSBERUMgYWdhaW4gaWYgaXQncyBzdGlsbCBhY3RpdmUgKi8KKyNpZmRlZiBBR0dSRVNTSVZFX0RFQworCWlmICh2Y3B1LT5hcmNoLm1zciAmIE1TUl9FRSkKKwkJaWYgKGt2bXBwY19nZXRfZGVjKHZjcHUpICYgMHg4MDAwMDAwMCkKKwkJCWt2bXBwY19jb3JlX3F1ZXVlX2RlYyh2Y3B1KTsKKyNlbmRpZgorCisjaWZkZWYgRVhJVF9ERUJVRworCWlmICh2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucykKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIktWTTogQ2hlY2sgcGVuZGluZzogJWx4XG4iLCB2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7CisjZW5kaWYKKwlwcmlvcml0eSA9IF9fZmZzKCpwZW5kaW5nKTsKKwl3aGlsZSAocHJpb3JpdHkgPD0gKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCkpIHsKKwkJaWYgKGt2bXBwY19ib29rM3NfaXJxcHJpb19kZWxpdmVyKHZjcHUsIHByaW9yaXR5KSkgeworCQkJY2xlYXJfYml0KHByaW9yaXR5LCAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOworCQkJYnJlYWs7CisJCX0KKworCQlwcmlvcml0eSA9IGZpbmRfbmV4dF9iaXQocGVuZGluZywKKwkJCQkJIEJJVFNfUEVSX0JZVEUgKiBzaXplb2YoKnBlbmRpbmcpLAorCQkJCQkgcHJpb3JpdHkgKyAxKTsKKwl9Cit9CisKK3ZvaWQga3ZtcHBjX3NldF9wdnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKQoreworCXZjcHUtPmFyY2guaGZsYWdzICY9IH5CT09LM1NfSEZMQUdfU0xCOworCXZjcHUtPmFyY2gucHZyID0gcHZyOworCWlmICgocHZyID49IDB4MzMwMDAwKSAmJiAocHZyIDwgMHg3MDMzMDAwMCkpIHsKKwkJa3ZtcHBjX21tdV9ib29rM3NfNjRfaW5pdCh2Y3B1KTsKKwkJdG9fYm9vazNzKHZjcHUpLT5oaW9yID0gMHhmZmYwMDAwMDsKKwkJdG9fYm9vazNzKHZjcHUpLT5tc3JfbWFzayA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTDsKKwl9IGVsc2UgeworCQlrdm1wcGNfbW11X2Jvb2szc18zMl9pbml0KHZjcHUpOworCQl0b19ib29rM3ModmNwdSktPmhpb3IgPSAwOworCQl0b19ib29rM3ModmNwdSktPm1zcl9tYXNrID0gMHhmZmZmZmZmZlVMTDsKKwl9CisKKwkvKiBJZiB3ZSBhcmUgaW4gaHlwZXJ2aXNvciBsZXZlbCBvbiA5NzAsIHdlIGNhbiB0ZWxsIHRoZSBDUFUgdG8KKwkgKiB0cmVhdCBEQ0JaIGFzIDMyIGJ5dGVzIHN0b3JlICovCisJdmNwdS0+YXJjaC5oZmxhZ3MgJj0gfkJPT0szU19IRkxBR19EQ0JaMzI7CisJaWYgKHZjcHUtPmFyY2gubW11LmlzX2RjYnozMih2Y3B1KSAmJiAobWZtc3IoKSAmIE1TUl9IVikgJiYKKwkgICAgIXN0cmNtcChjdXJfY3B1X3NwZWMtPnBsYXRmb3JtLCAicHBjOTcwIikpCisJCXZjcHUtPmFyY2guaGZsYWdzIHw9IEJPT0szU19IRkxBR19EQ0JaMzI7CisKK30KKworLyogQm9vazNzXzMyIENQVXMgYWx3YXlzIGhhdmUgMzIgYnl0ZXMgY2FjaGUgbGluZSBzaXplLCB3aGljaCBMaW51eCBhc3N1bWVzLiBUbworICogbWFrZSBCb29rM3NfMzIgTGludXggd29yayBvbiBCb29rM3NfNjQsIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHdlIHRyYXAgZGNieiB0bworICogZW11bGF0ZSAzMiBieXRlcyBkY2J6IGxlbmd0aC4KKyAqCisgKiBUaGUgQm9vazNzXzY0IGludmVudG9ycyBhbHNvIHJlYWxpemVkIHRoaXMgY2FzZSBhbmQgaW1wbGVtZW50ZWQgYSBzcGVjaWFsIGJpdAorICogaW4gdGhlIEhJRDUgcmVnaXN0ZXIsIHdoaWNoIGlzIGEgaHlwZXJ2aXNvciByZXNzb3VyY2UuIFRodXMgd2UgY2FuJ3QgdXNlIGl0LgorICoKKyAqIE15IGFwcHJvYWNoIGhlcmUgaXMgdG8gcGF0Y2ggdGhlIGRjYnogaW5zdHJ1Y3Rpb24gb24gZXhlY3V0aW5nIHBhZ2VzLgorICovCitzdGF0aWMgdm9pZCBrdm1wcGNfcGF0Y2hfZGNieihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1wcGNfcHRlICpwdGUpCit7CisJYm9vbCB0b3VjaGVkID0gZmFsc2U7CisJaHZhX3QgaHBhZ2U7CisJdTMyICpwYWdlOworCWludCBpOworCisJaHBhZ2UgPSBnZm5fdG9faHZhKHZjcHUtPmt2bSwgcHRlLT5yYWRkciA+PiBQQUdFX1NISUZUKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShocGFnZSkpCisJCXJldHVybjsKKworCWhwYWdlIHw9IHB0ZS0+cmFkZHIgJiB+UEFHRV9NQVNLOworCWhwYWdlICY9IH4weEZGRlVMTDsKKworCXBhZ2UgPSB2bWFsbG9jKEhXX1BBR0VfU0laRSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIocGFnZSwgKHZvaWQgX191c2VyICopaHBhZ2UsIEhXX1BBR0VfU0laRSkpCisJCWdvdG8gb3V0OworCisJZm9yIChpPTA7IGkgPCBIV19QQUdFX1NJWkUgLyA0OyBpKyspCisJCWlmICgocGFnZVtpXSAmIDB4ZmYwMDA3ZmYpID09IElOU19EQ0JaKSB7CisJCQlwYWdlW2ldICY9IDB4ZmZmZmZmZjc7IC8vIHJlc2VydmVkIGluc3RydWN0aW9uLCBzbyB3ZSB0cmFwCisJCQl0b3VjaGVkID0gdHJ1ZTsKKwkJfQorCisJaWYgKHRvdWNoZWQpCisJCWNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilocGFnZSwgcGFnZSwgSFdfUEFHRV9TSVpFKTsKKworb3V0OgorCXZmcmVlKHBhZ2UpOworfQorCitzdGF0aWMgaW50IGt2bXBwY194bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGVhZGRyLCBib29sIGRhdGEsCisJCQkgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSkKK3sKKwlpbnQgcmVsb2NhdGVkID0gKHZjcHUtPmFyY2gubXNyICYgKGRhdGEgPyBNU1JfRFIgOiBNU1JfSVIpKTsKKwlpbnQgcjsKKworCWlmIChyZWxvY2F0ZWQpIHsKKwkJciA9IHZjcHUtPmFyY2gubW11LnhsYXRlKHZjcHUsIGVhZGRyLCBwdGUsIGRhdGEpOworCX0gZWxzZSB7CisJCXB0ZS0+ZWFkZHIgPSBlYWRkcjsKKwkJcHRlLT5yYWRkciA9IGVhZGRyICYgMHhmZmZmZmZmZjsKKwkJcHRlLT52cGFnZSA9IGVhZGRyID4+IDEyOworCQlzd2l0Y2ggKHZjcHUtPmFyY2gubXNyICYgKE1TUl9EUnxNU1JfSVIpKSB7CisJCWNhc2UgMDoKKwkJCXB0ZS0+dnBhZ2UgfD0gVlNJRF9SRUFMOworCQljYXNlIE1TUl9EUjoKKwkJCXB0ZS0+dnBhZ2UgfD0gVlNJRF9SRUFMX0RSOworCQljYXNlIE1TUl9JUjoKKwkJCXB0ZS0+dnBhZ2UgfD0gVlNJRF9SRUFMX0lSOworCQl9CisJCXB0ZS0+bWF5X3JlYWQgPSB0cnVlOworCQlwdGUtPm1heV93cml0ZSA9IHRydWU7CisJCXB0ZS0+bWF5X2V4ZWN1dGUgPSB0cnVlOworCQlyID0gMDsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGh2YV90IGt2bXBwY19iYWRfaHZhKHZvaWQpCit7CisJcmV0dXJuIFBBR0VfT0ZGU0VUOworfQorCitzdGF0aWMgaHZhX3Qga3ZtcHBjX3B0ZV90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlLAorCQkJICAgICAgIGJvb2wgcmVhZCkKK3sKKwlodmFfdCBocGFnZTsKKworCWlmIChyZWFkICYmICFwdGUtPm1heV9yZWFkKQorCQlnb3RvIGVycjsKKworCWlmICghcmVhZCAmJiAhcHRlLT5tYXlfd3JpdGUpCisJCWdvdG8gZXJyOworCisJaHBhZ2UgPSBnZm5fdG9faHZhKHZjcHUtPmt2bSwgcHRlLT5yYWRkciA+PiBQQUdFX1NISUZUKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShocGFnZSkpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIGhwYWdlIHwgKHB0ZS0+cmFkZHIgJiB+UEFHRV9NQVNLKTsKK2VycjoKKwlyZXR1cm4ga3ZtcHBjX2JhZF9odmEoKTsKK30KKworaW50IGt2bXBwY19zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGVhZGRyLCBpbnQgc2l6ZSwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBrdm1wcGNfcHRlIHB0ZTsKKwlodmFfdCBodmEgPSBlYWRkcjsKKworCXZjcHUtPnN0YXQuc3QrKzsKKworCWlmIChrdm1wcGNfeGxhdGUodmNwdSwgZWFkZHIsIGZhbHNlLCAmcHRlKSkKKwkJZ290byBlcnI7CisKKwlodmEgPSBrdm1wcGNfcHRlX3RvX2h2YSh2Y3B1LCAmcHRlLCBmYWxzZSk7CisJaWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSkKKwkJZ290byBlcnI7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWh2YSwgcHRyLCBzaXplKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJrdm1wcGNfc3QgYXQgMHglbHggZmFpbGVkXG4iLCBodmEpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiAtRU5PRU5UOworfQorCitpbnQga3ZtcHBjX2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZWFkZHIsIGludCBzaXplLCB2b2lkICpwdHIsCisJCSAgICAgIGJvb2wgZGF0YSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3B0ZSBwdGU7CisJaHZhX3QgaHZhID0gZWFkZHI7CisKKwl2Y3B1LT5zdGF0LmxkKys7CisKKwlpZiAoa3ZtcHBjX3hsYXRlKHZjcHUsIGVhZGRyLCBkYXRhLCAmcHRlKSkKKwkJZ290byBlcnI7CisKKwlodmEgPSBrdm1wcGNfcHRlX3RvX2h2YSh2Y3B1LCAmcHRlLCB0cnVlKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQorCQlnb3RvIGVycjsKKworCWlmIChjb3B5X2Zyb21fdXNlcihwdHIsICh2b2lkIF9fdXNlciAqKWh2YSwgc2l6ZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtcHBjX2xkIGF0IDB4JWx4IGZhaWxlZFxuIiwgaHZhKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBrdm1wcGNfdmlzaWJsZV9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pCit7CisJcmV0dXJuIGt2bV9pc192aXNpYmxlX2dmbih2Y3B1LT5rdm0sIGdmbik7Cit9CisKK2ludCBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgdWxvbmcgZWFkZHIsIGludCB2ZWMpCit7CisJYm9vbCBkYXRhID0gKHZlYyA9PSBCT09LM1NfSU5URVJSVVBUX0RBVEFfU1RPUkFHRSk7CisJaW50IHIgPSBSRVNVTUVfR1VFU1Q7CisJaW50IHJlbG9jYXRlZDsKKwlpbnQgcGFnZV9mb3VuZCA9IDA7CisJc3RydWN0IGt2bXBwY19wdGUgcHRlOworCWJvb2wgaXNfbW1pbyA9IGZhbHNlOworCisJaWYgKCB2ZWMgPT0gQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UgKSB7CisJCXJlbG9jYXRlZCA9ICh2Y3B1LT5hcmNoLm1zciAmIE1TUl9EUik7CisJfSBlbHNlIHsKKwkJcmVsb2NhdGVkID0gKHZjcHUtPmFyY2gubXNyICYgTVNSX0lSKTsKKwl9CisKKwkvKiBSZXNvbHZlIHJlYWwgYWRkcmVzcyBpZiB0cmFuc2xhdGlvbiB0dXJuZWQgb24gKi8KKwlpZiAocmVsb2NhdGVkKSB7CisJCXBhZ2VfZm91bmQgPSB2Y3B1LT5hcmNoLm1tdS54bGF0ZSh2Y3B1LCBlYWRkciwgJnB0ZSwgZGF0YSk7CisJfSBlbHNlIHsKKwkJcHRlLm1heV9leGVjdXRlID0gdHJ1ZTsKKwkJcHRlLm1heV9yZWFkID0gdHJ1ZTsKKwkJcHRlLm1heV93cml0ZSA9IHRydWU7CisJCXB0ZS5yYWRkciA9IGVhZGRyICYgMHhmZmZmZmZmZjsKKwkJcHRlLmVhZGRyID0gZWFkZHI7CisJCXB0ZS52cGFnZSA9IGVhZGRyID4+IDEyOworCQlzd2l0Y2ggKHZjcHUtPmFyY2gubXNyICYgKE1TUl9EUnxNU1JfSVIpKSB7CisJCWNhc2UgMDoKKwkJCXB0ZS52cGFnZSB8PSBWU0lEX1JFQUw7CisJCWNhc2UgTVNSX0RSOgorCQkJcHRlLnZwYWdlIHw9IFZTSURfUkVBTF9EUjsKKwkJY2FzZSBNU1JfSVI6CisJCQlwdGUudnBhZ2UgfD0gVlNJRF9SRUFMX0lSOworCQl9CisJfQorCisJaWYgKHZjcHUtPmFyY2gubW11LmlzX2RjYnozMih2Y3B1KSAmJgorCSAgICghKHZjcHUtPmFyY2guaGZsYWdzICYgQk9PSzNTX0hGTEFHX0RDQlozMikpKSB7CisJCS8qCisJCSAqIElmIHdlIGRvIHRoZSBkY2J6IGhhY2ssIHdlIGhhdmUgdG8gTlggb24gZXZlcnkgZXhlY3V0aW9uLAorCQkgKiBzbyB3ZSBjYW4gcGF0Y2ggdGhlIGV4ZWN1dGluZyBjb2RlLiBUaGlzIHJlbmRlcnMgb3VyIGd1ZXN0CisJCSAqIE5YLWxlc3MuCisJCSAqLworCQlwdGUubWF5X2V4ZWN1dGUgPSAhZGF0YTsKKwl9CisKKwlpZiAocGFnZV9mb3VuZCA9PSAtRU5PRU5UKSB7CisJCS8qIFBhZ2Ugbm90IGZvdW5kIGluIGd1ZXN0IFBURSBlbnRyaWVzICovCisJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKKwkJdG9fYm9vazNzKHZjcHUpLT5kc2lzciA9IHZjcHUtPmFyY2guZmF1bHRfZHNpc3I7CisJCXZjcHUtPmFyY2gubXNyIHw9ICh2Y3B1LT5hcmNoLnNoYWRvd19tc3IgJiAweDAwMDAwMDAwZjgwMDAwMDBVTEwpOworCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgdmVjKTsKKwl9IGVsc2UgaWYgKHBhZ2VfZm91bmQgPT0gLUVQRVJNKSB7CisJCS8qIFN0b3JhZ2UgcHJvdGVjdGlvbiAqLworCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7CisJCXRvX2Jvb2szcyh2Y3B1KS0+ZHNpc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2RzaXNyICYgfkRTSVNSX05PSFBURTsKKwkJdG9fYm9vazNzKHZjcHUpLT5kc2lzciB8PSBEU0lTUl9QUk9URkFVTFQ7CisJCXZjcHUtPmFyY2gubXNyIHw9ICh2Y3B1LT5hcmNoLnNoYWRvd19tc3IgJiAweDAwMDAwMDAwZjgwMDAwMDBVTEwpOworCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgdmVjKTsKKwl9IGVsc2UgaWYgKHBhZ2VfZm91bmQgPT0gLUVJTlZBTCkgeworCQkvKiBQYWdlIG5vdCBmb3VuZCBpbiBndWVzdCBTTEIgKi8KKwkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOworCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgdmVjICsgMHg4MCk7CisJfSBlbHNlIGlmICghaXNfbW1pbyAmJgorCQkgICBrdm1wcGNfdmlzaWJsZV9nZm4odmNwdSwgcHRlLnJhZGRyID4+IFBBR0VfU0hJRlQpKSB7CisJCS8qIFRoZSBndWVzdCdzIFBURSBpcyBub3QgbWFwcGVkIHlldC4gTWFwIG9uIHRoZSBob3N0ICovCisJCWt2bXBwY19tbXVfbWFwX3BhZ2UodmNwdSwgJnB0ZSk7CisJCWlmIChkYXRhKQorCQkJdmNwdS0+c3RhdC5zcF9zdG9yYWdlKys7CisJCWVsc2UgaWYgKHZjcHUtPmFyY2gubW11LmlzX2RjYnozMih2Y3B1KSAmJgorCQkJKCEodmNwdS0+YXJjaC5oZmxhZ3MgJiBCT09LM1NfSEZMQUdfRENCWjMyKSkpCisJCQlrdm1wcGNfcGF0Y2hfZGNieih2Y3B1LCAmcHRlKTsKKwl9IGVsc2UgeworCQkvKiBNTUlPICovCisJCXZjcHUtPnN0YXQubW1pb19leGl0cysrOworCQl2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkID0gcHRlLnJhZGRyOworCQlyID0ga3ZtcHBjX2VtdWxhdGVfbW1pbyhydW4sIHZjcHUpOworCQlpZiAoIHIgPT0gUkVTVU1FX0hPU1RfTlYgKQorCQkJciA9IFJFU1VNRV9IT1NUOworCQlpZiAoIHIgPT0gUkVTVU1FX0dVRVNUX05WICkKKwkJCXIgPSBSRVNVTUVfR1VFU1Q7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK2ludCBrdm1wcGNfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhpdF9ucikKK3sKKwlpbnQgciA9IFJFU1VNRV9IT1NUOworCisJdmNwdS0+c3RhdC5zdW1fZXhpdHMrKzsKKworCXJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9VTktOT1dOOworCXJ1bi0+cmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb24gPSAxOworI2lmZGVmIEVYSVRfREVCVUcKKwlwcmludGsoS0VSTl9FTUVSRyAiZXhpdF9ucj0weCV4IHwgcGM9MHglbHggfCBkYXI9MHglbHggfCBkZWM9MHgleCB8IG1zcj0weCVseFxuIiwKKwkJZXhpdF9uciwgdmNwdS0+YXJjaC5wYywgdmNwdS0+YXJjaC5mYXVsdF9kZWFyLAorCQlrdm1wcGNfZ2V0X2RlYyh2Y3B1KSwgdmNwdS0+YXJjaC5tc3IpOworI2VsaWYgZGVmaW5lZCAoRVhJVF9ERUJVR19TSU1QTEUpCisJaWYgKChleGl0X25yICE9IDB4OTAwKSAmJiAoZXhpdF9uciAhPSAweDUwMCkpCisJCXByaW50ayhLRVJOX0VNRVJHICJleGl0X25yPTB4JXggfCBwYz0weCVseCB8IGRhcj0weCVseCB8IG1zcj0weCVseFxuIiwKKwkJCWV4aXRfbnIsIHZjcHUtPmFyY2gucGMsIHZjcHUtPmFyY2guZmF1bHRfZGVhciwKKwkJCXZjcHUtPmFyY2gubXNyKTsKKyNlbmRpZgorCWt2bV9yZXNjaGVkKHZjcHUpOworCXN3aXRjaCAoZXhpdF9ucikgeworCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NUT1JBR0U6CisJCXZjcHUtPnN0YXQucGZfaW5zdHJ1YysrOworCQkvKiBvbmx5IGNhcmUgYWJvdXQgUFRFRyBub3QgZm91bmQgZXJyb3JzLCBidXQgbGVhdmUgTlggYWxvbmUgKi8KKwkJaWYgKHZjcHUtPmFyY2guc2hhZG93X21zciAmIDB4NDAwMDAwMDApIHsKKwkJCXIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChydW4sIHZjcHUsIHZjcHUtPmFyY2gucGMsIGV4aXRfbnIpOworCQkJdmNwdS0+c3RhdC5zcF9pbnN0cnVjKys7CisJCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5tbXUuaXNfZGNiejMyKHZjcHUpICYmCisJCQkgICghKHZjcHUtPmFyY2guaGZsYWdzICYgQk9PSzNTX0hGTEFHX0RDQlozMikpKSB7CisJCQkvKgorCQkJICogWFhYIElmIHdlIGRvIHRoZSBkY2J6IGhhY2sgd2UgdXNlIHRoZSBOWCBiaXQgdG8gZmx1c2gmcGF0Y2ggdGhlIHBhZ2UsCisJCQkgKiAgICAgc28gd2UgY2FuJ3QgdXNlIHRoZSBOWCBiaXQgaW5zaWRlIHRoZSBndWVzdC4gTGV0J3MgY3Jvc3Mgb3VyIGZpbmdlcnMsCisJCQkgKiAgICAgdGhhdCBubyBndWVzdCB0aGF0IG5lZWRzIHRoZSBkY2J6IGhhY2sgZG9lcyBOWC4KKwkJCSAqLworCQkJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgdmNwdS0+YXJjaC5wYywgfjB4RkZGVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXZjcHUtPmFyY2gubXNyIHw9ICh2Y3B1LT5hcmNoLnNoYWRvd19tc3IgJiAweDU4MDAwMDAwKTsKKwkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKKwkJCWt2bXBwY19tbXVfcHRlX2ZsdXNoKHZjcHUsIHZjcHUtPmFyY2gucGMsIH4weEZGRlVMTCk7CisJCQlyID0gUkVTVU1FX0dVRVNUOworCQl9CisJCWJyZWFrOworCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0U6CisJCXZjcHUtPnN0YXQucGZfc3RvcmFnZSsrOworCQkvKiBUaGUgb25seSBjYXNlIHdlIG5lZWQgdG8gaGFuZGxlIGlzIG1pc3Npbmcgc2hhZG93IFBURXMgKi8KKwkJaWYgKHZjcHUtPmFyY2guZmF1bHRfZHNpc3IgJiBEU0lTUl9OT0hQVEUpIHsKKwkJCXIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChydW4sIHZjcHUsIHZjcHUtPmFyY2guZmF1bHRfZGVhciwgZXhpdF9ucik7CisJCX0gZWxzZSB7CisJCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7CisJCQl0b19ib29rM3ModmNwdSktPmRzaXNyID0gdmNwdS0+YXJjaC5mYXVsdF9kc2lzcjsKKwkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKKwkJCWt2bXBwY19tbXVfcHRlX2ZsdXNoKHZjcHUsIHZjcHUtPmFyY2guZGVhciwgfjB4RkZGVUxMKTsKKwkJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSU5URVJSVVBUX0RBVEFfU0VHTUVOVDoKKwkJaWYgKGt2bXBwY19tbXVfbWFwX3NlZ21lbnQodmNwdSwgdmNwdS0+YXJjaC5mYXVsdF9kZWFyKSA8IDApIHsKKwkJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKKwkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LAorCQkJCUJPT0szU19JTlRFUlJVUFRfREFUQV9TRUdNRU5UKTsKKwkJfQorCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKwljYXNlIEJPT0szU19JTlRFUlJVUFRfSU5TVF9TRUdNRU5UOgorCQlpZiAoa3ZtcHBjX21tdV9tYXBfc2VnbWVudCh2Y3B1LCB2Y3B1LT5hcmNoLnBjKSA8IDApIHsKKwkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LAorCQkJCUJPT0szU19JTlRFUlJVUFRfSU5TVF9TRUdNRU5UKTsKKwkJfQorCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKwkvKiBXZSdyZSBnb29kIG9uIHRoZXNlIC0gdGhlIGhvc3QgbWVyZWx5IHdhbnRlZCB0byBnZXQgb3VyIGF0dGVudGlvbiAqLworCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9ERUNSRU1FTlRFUjoKKwkJdmNwdS0+c3RhdC5kZWNfZXhpdHMrKzsKKwkJciA9IFJFU1VNRV9HVUVTVDsKKwkJYnJlYWs7CisJY2FzZSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMOgorCQl2Y3B1LT5zdGF0LmV4dF9pbnRyX2V4aXRzKys7CisJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCWJyZWFrOworCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNOgorCXsKKwkJZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOworCisJCWlmICh2Y3B1LT5hcmNoLm1zciAmIE1TUl9QUikgeworI2lmZGVmIEVYSVRfREVCVUcKKwkJCXByaW50ayhLRVJOX0lORk8gIlVzZXJzcGFjZSB0cmlnZ2VyZWQgMHg3MDAgZXhjZXB0aW9uIGF0IDB4JWx4ICgweCV4KVxuIiwgdmNwdS0+YXJjaC5wYywgdmNwdS0+YXJjaC5sYXN0X2luc3QpOworI2VuZGlmCisJCQlpZiAoKHZjcHUtPmFyY2gubGFzdF9pbnN0ICYgMHhmZjAwMDdmZikgIT0KKwkJCSAgICAoSU5TX0RDQlogJiAweGZmZmZmZmY3KSkgeworCQkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKKwkJCQlyID0gUkVTVU1FX0dVRVNUOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJdmNwdS0+c3RhdC5lbXVsYXRlZF9pbnN0X2V4aXRzKys7CisJCWVyID0ga3ZtcHBjX2VtdWxhdGVfaW5zdHJ1Y3Rpb24ocnVuLCB2Y3B1KTsKKwkJc3dpdGNoIChlcikgeworCQljYXNlIEVNVUxBVEVfRE9ORToKKwkJCXIgPSBSRVNVTUVfR1VFU1Q7CisJCQlicmVhazsKKwkJY2FzZSBFTVVMQVRFX0ZBSUw6CisJCQlwcmludGsoS0VSTl9DUklUICIlczogZW11bGF0aW9uIGF0ICVseCBmYWlsZWQgKCUwOHgpXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB2Y3B1LT5hcmNoLnBjLCB2Y3B1LT5hcmNoLmxhc3RfaW5zdCk7CisJCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgZXhpdF9ucik7CisJCQlyID0gUkVTVU1FX0dVRVNUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBCT09LM1NfSU5URVJSVVBUX1NZU0NBTEw6CisjaWZkZWYgRVhJVF9ERUJVRworCQlwcmludGsoS0VSTl9JTkZPICJTeXNjYWxsIE5yICVkXG4iLCAoaW50KXZjcHUtPmFyY2guZ3ByWzBdKTsKKyNlbmRpZgorCQl2Y3B1LT5zdGF0LnN5c2NhbGxfZXhpdHMrKzsKKwkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIGV4aXRfbnIpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKwljYXNlIEJPT0szU19JTlRFUlJVUFRfTUFDSElORV9DSEVDSzoKKwljYXNlIEJPT0szU19JTlRFUlJVUFRfRlBfVU5BVkFJTDoKKwljYXNlIEJPT0szU19JTlRFUlJVUFRfVFJBQ0U6CisJY2FzZSBCT09LM1NfSU5URVJSVVBUX0FMVElWRUM6CisJY2FzZSBCT09LM1NfSU5URVJSVVBUX1ZTWDoKKwkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIGV4aXRfbnIpOworCQlyID0gUkVTVU1FX0dVRVNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVZ2ggLSBib3JrIGhlcmUhIFdoYXQgZGlkIHdlIGdldD8gKi8KKwkJcHJpbnRrKEtFUk5fRU1FUkcgImV4aXRfbnI9MHgleCB8IHBjPTB4JWx4IHwgbXNyPTB4JWx4XG4iLCBleGl0X25yLCB2Y3B1LT5hcmNoLnBjLCB2Y3B1LT5hcmNoLnNoYWRvd19tc3IpOworCQlyID0gUkVTVU1FX0hPU1Q7CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKworCWlmICghKHIgJiBSRVNVTUVfSE9TVCkpIHsKKwkJLyogVG8gYXZvaWQgY2xvYmJlcmluZyBleGl0X3JlYXNvbiwgb25seSBjaGVjayBmb3Igc2lnbmFscyBpZgorCQkgKiB3ZSBhcmVuJ3QgYWxyZWFkeSBleGl0aW5nIHRvIHVzZXJzcGFjZSBmb3Igc29tZSBvdGhlcgorCQkgKiByZWFzb24uICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworI2lmZGVmIEVYSVRfREVCVUcKKwkJCXByaW50ayhLRVJOX0VNRVJHICJLVk06IEdvaW5nIGJhY2sgdG8gaG9zdFxuIik7CisjZW5kaWYKKwkJCXZjcHUtPnN0YXQuc2lnbmFsX2V4aXRzKys7CisJCQlydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKKwkJCXIgPSAtRUlOVFI7CisJCX0gZWxzZSB7CisJCQkvKiBJbiBjYXNlIGFuIGludGVycnVwdCBjYW1lIGluIHRoYXQgd2FzIHRyaWdnZXJlZAorCQkJICogZnJvbSB1c2Vyc3BhY2UgKGxpa2UgREVDKSwgd2UgbmVlZCB0byBjaGVjayB3aGF0CisJCQkgKiB0byBpbmplY3Qgbm93ISAqLworCQkJa3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHZjcHUpOworCQl9CisJfQorCisjaWZkZWYgRVhJVF9ERUJVRworCXByaW50ayhLRVJOX0VNRVJHICJLVk0gZXhpdDogdmNwdT0weCVwIHBjPTB4JWx4IHI9MHgleFxuIiwgdmNwdSwgdmNwdS0+YXJjaC5wYywgcik7CisjZW5kaWYKKworCXJldHVybiByOworfQorCitpbnQga3ZtX2FyY2hfdmNwdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKQoreworCWludCBpOworCisJcmVncy0+cGMgPSB2Y3B1LT5hcmNoLnBjOworCXJlZ3MtPmNyID0gdmNwdS0+YXJjaC5jcjsKKwlyZWdzLT5jdHIgPSB2Y3B1LT5hcmNoLmN0cjsKKwlyZWdzLT5sciA9IHZjcHUtPmFyY2gubHI7CisJcmVncy0+eGVyID0gdmNwdS0+YXJjaC54ZXI7CisJcmVncy0+bXNyID0gdmNwdS0+YXJjaC5tc3I7CisJcmVncy0+c3JyMCA9IHZjcHUtPmFyY2guc3JyMDsKKwlyZWdzLT5zcnIxID0gdmNwdS0+YXJjaC5zcnIxOworCXJlZ3MtPnBpZCA9IHZjcHUtPmFyY2gucGlkOworCXJlZ3MtPnNwcmcwID0gdmNwdS0+YXJjaC5zcHJnMDsKKwlyZWdzLT5zcHJnMSA9IHZjcHUtPmFyY2guc3ByZzE7CisJcmVncy0+c3ByZzIgPSB2Y3B1LT5hcmNoLnNwcmcyOworCXJlZ3MtPnNwcmczID0gdmNwdS0+YXJjaC5zcHJnMzsKKwlyZWdzLT5zcHJnNSA9IHZjcHUtPmFyY2guc3ByZzQ7CisJcmVncy0+c3ByZzYgPSB2Y3B1LT5hcmNoLnNwcmc1OworCXJlZ3MtPnNwcmc3ID0gdmNwdS0+YXJjaC5zcHJnNjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MtPmdwcik7IGkrKykKKwkJcmVncy0+Z3ByW2ldID0gdmNwdS0+YXJjaC5ncHJbaV07CisKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisKKwl2Y3B1LT5hcmNoLnBjID0gcmVncy0+cGM7CisJdmNwdS0+YXJjaC5jciA9IHJlZ3MtPmNyOworCXZjcHUtPmFyY2guY3RyID0gcmVncy0+Y3RyOworCXZjcHUtPmFyY2gubHIgPSByZWdzLT5scjsKKwl2Y3B1LT5hcmNoLnhlciA9IHJlZ3MtPnhlcjsKKwlrdm1wcGNfc2V0X21zcih2Y3B1LCByZWdzLT5tc3IpOworCXZjcHUtPmFyY2guc3JyMCA9IHJlZ3MtPnNycjA7CisJdmNwdS0+YXJjaC5zcnIxID0gcmVncy0+c3JyMTsKKwl2Y3B1LT5hcmNoLnNwcmcwID0gcmVncy0+c3ByZzA7CisJdmNwdS0+YXJjaC5zcHJnMSA9IHJlZ3MtPnNwcmcxOworCXZjcHUtPmFyY2guc3ByZzIgPSByZWdzLT5zcHJnMjsKKwl2Y3B1LT5hcmNoLnNwcmczID0gcmVncy0+c3ByZzM7CisJdmNwdS0+YXJjaC5zcHJnNSA9IHJlZ3MtPnNwcmc0OworCXZjcHUtPmFyY2guc3ByZzYgPSByZWdzLT5zcHJnNTsKKwl2Y3B1LT5hcmNoLnNwcmc3ID0gcmVncy0+c3ByZzY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2Y3B1LT5hcmNoLmdwcik7IGkrKykKKwkJdmNwdS0+YXJjaC5ncHJbaV0gPSByZWdzLT5ncHJbaV07CisKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp2Y3B1M3MgPSB0b19ib29rM3ModmNwdSk7CisJaW50IGk7CisKKwlzcmVncy0+cHZyID0gdmNwdS0+YXJjaC5wdnI7CisKKwlzcmVncy0+dS5zLnNkcjEgPSB0b19ib29rM3ModmNwdSktPnNkcjE7CisJaWYgKHZjcHUtPmFyY2guaGZsYWdzICYgQk9PSzNTX0hGTEFHX1NMQikgeworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQkJc3JlZ3MtPnUucy5wcGM2NC5zbGJbaV0uc2xiZSA9IHZjcHUzcy0+c2xiW2ldLm9yaWdlIHwgaTsKKwkJCXNyZWdzLT51LnMucHBjNjQuc2xiW2ldLnNsYnYgPSB2Y3B1M3MtPnNsYltpXS5vcmlndjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQlzcmVncy0+dS5zLnBwYzMyLnNyW2ldID0gdmNwdTNzLT5zcltpXS5yYXc7CisJCQlzcmVncy0+dS5zLnBwYzMyLnNyW2ldID0gdmNwdTNzLT5zcltpXS5yYXc7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJc3JlZ3MtPnUucy5wcGMzMi5pYmF0W2ldID0gdmNwdTNzLT5pYmF0W2ldLnJhdzsKKwkJCXNyZWdzLT51LnMucHBjMzIuZGJhdFtpXSA9IHZjcHUzcy0+ZGJhdFtpXS5yYXc7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdTNzID0gdG9fYm9vazNzKHZjcHUpOworCWludCBpOworCisJa3ZtcHBjX3NldF9wdnIodmNwdSwgc3JlZ3MtPnB2cik7CisKKwl2Y3B1M3MtPnNkcjEgPSBzcmVncy0+dS5zLnNkcjE7CisJaWYgKHZjcHUtPmFyY2guaGZsYWdzICYgQk9PSzNTX0hGTEFHX1NMQikgeworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQkJdmNwdS0+YXJjaC5tbXUuc2xibXRlKHZjcHUsIHNyZWdzLT51LnMucHBjNjQuc2xiW2ldLnNsYnYsCisJCQkJCQkgICAgc3JlZ3MtPnUucy5wcGM2NC5zbGJbaV0uc2xiZSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJdmNwdS0+YXJjaC5tbXUubXRzcmluKHZjcHUsIGksIHNyZWdzLT51LnMucHBjMzIuc3JbaV0pOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCWt2bXBwY19zZXRfYmF0KHZjcHUsICYodmNwdTNzLT5pYmF0W2ldKSwgZmFsc2UsCisJCQkJICAgICAgICh1MzIpc3JlZ3MtPnUucy5wcGMzMi5pYmF0W2ldKTsKKwkJCWt2bXBwY19zZXRfYmF0KHZjcHUsICYodmNwdTNzLT5pYmF0W2ldKSwgdHJ1ZSwKKwkJCQkgICAgICAgKHUzMikoc3JlZ3MtPnUucy5wcGMzMi5pYmF0W2ldID4+IDMyKSk7CisJCQlrdm1wcGNfc2V0X2JhdCh2Y3B1LCAmKHZjcHUzcy0+ZGJhdFtpXSksIGZhbHNlLAorCQkJCSAgICAgICAodTMyKXNyZWdzLT51LnMucHBjMzIuZGJhdFtpXSk7CisJCQlrdm1wcGNfc2V0X2JhdCh2Y3B1LCAmKHZjcHUzcy0+ZGJhdFtpXSksIHRydWUsCisJCQkJICAgICAgICh1MzIpKHNyZWdzLT51LnMucHBjMzIuZGJhdFtpXSA+PiAzMikpOworCQl9CisJfQorCisJLyogRmx1c2ggdGhlIE1NVSBhZnRlciBtZXNzaW5nIHdpdGggdGhlIHNlZ21lbnRzICovCisJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV90cmFuc2xhdGlvbiAqdHIpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgKGFuZCBjbGVhcikgdGhlIGRpcnR5IG1lbW9yeSBsb2cgZm9yIGEgbWVtb3J5IHNsb3QuCisgKi8KK2ludCBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICAgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKK3sKKwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwl1bG9uZyBnYSwgZ2FfZW5kOworCWludCBpc19kaXJ0eSA9IDA7CisJaW50IHIsIG47CisKKwlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCisJciA9IGt2bV9nZXRfZGlydHlfbG9nKGt2bSwgbG9nLCAmaXNfZGlydHkpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCS8qIElmIG5vdGhpbmcgaXMgZGlydHksIGRvbid0IGJvdGhlciBtZXNzaW5nIHdpdGggcGFnZSB0YWJsZXMuICovCisJaWYgKGlzX2RpcnR5KSB7CisJCW1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1tsb2ctPnNsb3RdOworCisJCWdhID0gbWVtc2xvdC0+YmFzZV9nZm4gPDwgUEFHRV9TSElGVDsKKwkJZ2FfZW5kID0gZ2EgKyAobWVtc2xvdC0+bnBhZ2VzIDw8IFBBR0VfU0hJRlQpOworCisJCWt2bV9mb3JfZWFjaF92Y3B1KG4sIHZjcHUsIGt2bSkKKwkJCWt2bXBwY19tbXVfcHRlX3BmbHVzaCh2Y3B1LCBnYSwgZ2FfZW5kKTsKKworCQluID0gQUxJR04obWVtc2xvdC0+bnBhZ2VzLCBCSVRTX1BFUl9MT05HKSAvIDg7CisJCW1lbXNldChtZW1zbG90LT5kaXJ0eV9iaXRtYXAsIDAsIG4pOworCX0KKworCXIgPSAwOworb3V0OgorCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCXJldHVybiByOworfQorCitpbnQga3ZtcHBjX2NvcmVfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgZXJyOworCisJdmNwdV9ib29rM3MgPSAoc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqKV9fZ2V0X2ZyZWVfcGFnZXMoIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLAorCQkJZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzKSkpOworCWlmICghdmNwdV9ib29rM3MpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJdmNwdSA9ICZ2Y3B1X2Jvb2szcy0+dmNwdTsKKwllcnIgPSBrdm1fdmNwdV9pbml0KHZjcHUsIGt2bSwgaWQpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV92Y3B1OworCisJdmNwdS0+YXJjaC5ob3N0X3JldGlwID0ga3ZtX3JldHVybl9wb2ludDsKKwl2Y3B1LT5hcmNoLmhvc3RfbXNyID0gbWZtc3IoKTsKKwkvKiBkZWZhdWx0IHRvIGJvb2szc182NCAoOTcwZngpICovCisJdmNwdS0+YXJjaC5wdnIgPSAweDNDMDMwMTsKKwlrdm1wcGNfc2V0X3B2cih2Y3B1LCB2Y3B1LT5hcmNoLnB2cik7CisJdmNwdV9ib29rM3MtPnNsYl9uciA9IDY0OworCisJLyogcmVtZW1iZXIgd2hlcmUgc29tZSByZWFsLW1vZGUgaGFuZGxlcnMgYXJlICovCisJdmNwdS0+YXJjaC50cmFtcG9saW5lX2xvd21lbSA9IGt2bXBwY190cmFtcG9saW5lX2xvd21lbTsKKwl2Y3B1LT5hcmNoLnRyYW1wb2xpbmVfZW50ZXIgPSBrdm1wcGNfdHJhbXBvbGluZV9lbnRlcjsKKwl2Y3B1LT5hcmNoLmhpZ2htZW1faGFuZGxlciA9ICh1bG9uZylrdm1wcGNfaGFuZGxlcl9oaWdobWVtOworCisJdmNwdS0+YXJjaC5zaGFkb3dfbXNyID0gTVNSX1VTRVI2NDsKKworCWVyciA9IF9faW5pdF9uZXdfY29udGV4dCgpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZyZWVfdmNwdTsKKwl2Y3B1X2Jvb2szcy0+Y29udGV4dF9pZCA9IGVycjsKKworCXZjcHVfYm9vazNzLT52c2lkX21heCA9ICgodmNwdV9ib29rM3MtPmNvbnRleHRfaWQgKyAxKSA8PCBVU0VSX0VTSURfQklUUykgLSAxOworCXZjcHVfYm9vazNzLT52c2lkX2ZpcnN0ID0gdmNwdV9ib29rM3MtPmNvbnRleHRfaWQgPDwgVVNFUl9FU0lEX0JJVFM7CisJdmNwdV9ib29rM3MtPnZzaWRfbmV4dCA9IHZjcHVfYm9vazNzLT52c2lkX2ZpcnN0OworCisJcmV0dXJuIHZjcHU7CisKK2ZyZWVfdmNwdToKKwlmcmVlX3BhZ2VzKChsb25nKXZjcHVfYm9vazNzLCBnZXRfb3JkZXIoc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MpKSk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBrdm1wcGNfY29yZV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzID0gdG9fYm9vazNzKHZjcHUpOworCisJX19kZXN0cm95X2NvbnRleHQodmNwdV9ib29rM3MtPmNvbnRleHRfaWQpOworCWt2bV92Y3B1X3VuaW5pdCh2Y3B1KTsKKwlmcmVlX3BhZ2VzKChsb25nKXZjcHVfYm9vazNzLCBnZXRfb3JkZXIoc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MpKSk7Cit9CisKK2V4dGVybiBpbnQgX19rdm1wcGNfdmNwdV9lbnRyeShzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBfX2t2bXBwY192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCByZXQ7CisKKwkvKiBObyBuZWVkIHRvIGdvIGludG8gdGhlIGd1ZXN0IHdoZW4gYWxsIHdlIGRvIGlzIGdvaW5nIG91dCAqLworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7CisJCXJldHVybiAtRUlOVFI7CisJfQorCisJLyogWFhYIHdlIGdldCBjYWxsZWQgd2l0aCBpcnEgZGlzYWJsZWQgLSBjaGFuZ2UgdGhhdCEgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlyZXQgPSBfX2t2bXBwY192Y3B1X2VudHJ5KGt2bV9ydW4sIHZjcHUpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGt2bV9pbml0KE5VTEwsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzKSwgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfYm9vazNzX2V4aXQodm9pZCkKK3sKKwlrdm1fZXhpdCgpOworfQorCittb2R1bGVfaW5pdChrdm1wcGNfYm9vazNzX2luaXQpOworbW9kdWxlX2V4aXQoa3ZtcHBjX2Jvb2szc19leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzMyX21tdS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfMzJfbW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmOTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzMyX21tdS5jCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKgorICogQ29weXJpZ2h0IFNVU0UgTGludXggUHJvZHVjdHMgR21iSCAyMDA5CisgKgorICogQXV0aG9yczogQWxleGFuZGVyIEdyYWYgPGFncmFmQHN1c2UuZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva3ZtLmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzLmg+CisKKy8qICNkZWZpbmUgREVCVUdfTU1VICovCisvKiAjZGVmaW5lIERFQlVHX01NVV9QVEUgKi8KKy8qICNkZWZpbmUgREVCVUdfTU1VX1BURV9JUCAweGZmZjE0YzQwICovCisKKyNpZmRlZiBERUJVR19NTVUKKyNkZWZpbmUgZHByaW50ayhYLi4uKSBwcmludGsoS0VSTl9JTkZPIFgpCisjZWxzZQorI2RlZmluZSBkcHJpbnRrKFguLi4pIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZmRlZiBERUJVR19QVEUKKyNkZWZpbmUgZHByaW50a19wdGUoWC4uLikgcHJpbnRrKEtFUk5fSU5GTyBYKQorI2Vsc2UKKyNkZWZpbmUgZHByaW50a19wdGUoWC4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBQVEVHX0ZMQUdfQUNDRVNTRUQJMHgwMDAwMDEwMAorI2RlZmluZSBQVEVHX0ZMQUdfRElSVFkJCTB4MDAwMDAwODAKKworc3RhdGljIGlubGluZSBib29sIGNoZWNrX2RlYnVnX2lwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKyNpZmRlZiBERUJVR19NTVVfUFRFX0lQCisJcmV0dXJuIHZjcHUtPmFyY2gucGMgPT0gREVCVUdfTU1VX1BURV9JUDsKKyNlbHNlCisJcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKworc3RhdGljIGludCBrdm1wcGNfbW11X2Jvb2szc18zMl94bGF0ZV9iYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKKwkJCQkJICBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlLCBib29sIGRhdGEpOworCitzdGF0aWMgc3RydWN0IGt2bXBwY19zciAqZmluZF9zcihzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp2Y3B1X2Jvb2szcywgZ3ZhX3QgZWFkZHIpCit7CisJcmV0dXJuICZ2Y3B1X2Jvb2szcy0+c3JbKGVhZGRyID4+IDI4KSAmIDB4Zl07Cit9CisKK3N0YXRpYyB1NjQga3ZtcHBjX21tdV9ib29rM3NfMzJfZWFfdG9fdnAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKKwkJCQkJIGJvb2wgZGF0YSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3NyICpzcmUgPSBmaW5kX3NyKHRvX2Jvb2szcyh2Y3B1KSwgZWFkZHIpOworCXN0cnVjdCBrdm1wcGNfcHRlIHB0ZTsKKworCWlmICgha3ZtcHBjX21tdV9ib29rM3NfMzJfeGxhdGVfYmF0KHZjcHUsIGVhZGRyLCAmcHRlLCBkYXRhKSkKKwkJcmV0dXJuIHB0ZS52cGFnZTsKKworCXJldHVybiAoKCh1NjQpZWFkZHIgPj4gMTIpICYgMHhmZmZmKSB8ICgoKHU2NClzcmUtPnZzaWQpIDw8IDE2KTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX21tdV9ib29rM3NfMzJfcmVzZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfc2V0X21zcih2Y3B1LCAwKTsKK30KKworc3RhdGljIGh2YV90IGt2bXBwY19tbXVfYm9vazNzXzMyX2dldF9wdGVnKHN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzLAorCQkJCSAgICAgIHN0cnVjdCBrdm1wcGNfc3IgKnNyZSwgZ3ZhX3QgZWFkZHIsCisJCQkJICAgICAgYm9vbCBwcmltYXJ5KQoreworCXUzMiBwYWdlLCBoYXNoLCBwdGVnLCBodGFibWFzazsKKwlodmFfdCByOworCisJcGFnZSA9IChlYWRkciAmIDB4MEZGRkZGRkYpID4+IDEyOworCWh0YWJtYXNrID0gKCh2Y3B1X2Jvb2szcy0+c2RyMSAmIDB4MUZGKSA8PCAxNikgfCAweEZGQzA7CisKKwloYXNoID0gKChzcmUtPnZzaWQgXiBwYWdlKSA8PCA2KTsKKwlpZiAoIXByaW1hcnkpCisJCWhhc2ggPSB+aGFzaDsKKwloYXNoICY9IGh0YWJtYXNrOworCisJcHRlZyA9ICh2Y3B1X2Jvb2szcy0+c2RyMSAmIDB4ZmZmZjAwMDApIHwgaGFzaDsKKworCWRwcmludGsoIk1NVTogcGM9MHglbHggZWFkZHI9MHglbHggc2RyMT0weCVsbHggcHRlZz0weCV4IHZzaWQ9MHgleFxuIiwKKwkJdmNwdV9ib29rM3MtPnZjcHUuYXJjaC5wYywgZWFkZHIsIHZjcHVfYm9vazNzLT5zZHIxLCBwdGVnLAorCQlzcmUtPnZzaWQpOworCisJciA9IGdmbl90b19odmEodmNwdV9ib29rM3MtPnZjcHUua3ZtLCBwdGVnID4+IFBBR0VfU0hJRlQpOworCWlmIChrdm1faXNfZXJyb3JfaHZhKHIpKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gciB8IChwdGVnICYgflBBR0VfTUFTSyk7Cit9CisKK3N0YXRpYyB1MzIga3ZtcHBjX21tdV9ib29rM3NfMzJfZ2V0X3B0ZW0oc3RydWN0IGt2bXBwY19zciAqc3JlLCBndmFfdCBlYWRkciwKKwkJCQkgICAgYm9vbCBwcmltYXJ5KQoreworCXJldHVybiAoKGVhZGRyICYgMHgwZmZmZmZmZikgPj4gMjIpIHwgKHNyZS0+dnNpZCA8PCA3KSB8CisJICAgICAgIChwcmltYXJ5ID8gMCA6IDB4NDApIHwgMHg4MDAwMDAwMDsKK30KKworc3RhdGljIGludCBrdm1wcGNfbW11X2Jvb2szc18zMl94bGF0ZV9iYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKKwkJCQkJICBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlLCBib29sIGRhdGEpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdV9ib29rM3MgPSB0b19ib29rM3ModmNwdSk7CisJc3RydWN0IGt2bXBwY19iYXQgKmJhdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKGRhdGEpCisJCQliYXQgPSAmdmNwdV9ib29rM3MtPmRiYXRbaV07CisJCWVsc2UKKwkJCWJhdCA9ICZ2Y3B1X2Jvb2szcy0+aWJhdFtpXTsKKworCQlpZiAodmNwdS0+YXJjaC5tc3IgJiBNU1JfUFIpIHsKKwkJCWlmICghYmF0LT52cCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICghYmF0LT52cykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjaGVja19kZWJ1Z19pcCh2Y3B1KSkKKwkJeworCQkJZHByaW50a19wdGUoIiVjQkFUICUwMmQ6IDB4JWx4IC0gMHgleCAoMHgleClcbiIsCisJCQkJICAgIGRhdGEgPyAnZCcgOiAnaScsIGksIGVhZGRyLCBiYXQtPmJlcGksCisJCQkJICAgIGJhdC0+YmVwaV9tYXNrKTsKKwkJfQorCQlpZiAoKGVhZGRyICYgYmF0LT5iZXBpX21hc2spID09IGJhdC0+YmVwaSkgeworCQkJcHRlLT5yYWRkciA9IGJhdC0+YnJwbiB8IChlYWRkciAmIH5iYXQtPmJlcGlfbWFzayk7CisJCQlwdGUtPnZwYWdlID0gKGVhZGRyID4+IDEyKSB8IFZTSURfQkFUOworCQkJcHRlLT5tYXlfcmVhZCA9IGJhdC0+cHA7CisJCQlwdGUtPm1heV93cml0ZSA9IGJhdC0+cHAgPiAxOworCQkJcHRlLT5tYXlfZXhlY3V0ZSA9IHRydWU7CisJCQlpZiAoIXB0ZS0+bWF5X3JlYWQpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJCQVQgaXMgbm90IHJlYWRhYmxlIVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXB0ZS0+bWF5X3dyaXRlKSB7CisJCQkJLyogbGV0J3MgdHJlYXQgci9vIEJBVHMgYXMgbm90LXJlYWRhYmxlIGZvciBub3cgKi8KKwkJCQlkcHJpbnRrX3B0ZSgiQkFUIGlzIHJlYWQtb25seSFcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGt2bXBwY19tbXVfYm9vazNzXzMyX3hsYXRlX3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyLAorCQkJCSAgICAgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSwgYm9vbCBkYXRhLAorCQkJCSAgICAgYm9vbCBwcmltYXJ5KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzID0gdG9fYm9vazNzKHZjcHUpOworCXN0cnVjdCBrdm1wcGNfc3IgKnNyZTsKKwlodmFfdCBwdGVncDsKKwl1MzIgcHRlZ1sxNl07CisJdTY0IHB0ZW0gPSAwOworCWludCBpOworCWludCBmb3VuZCA9IDA7CisKKwlzcmUgPSBmaW5kX3NyKHZjcHVfYm9vazNzLCBlYWRkcik7CisKKwlkcHJpbnRrX3B0ZSgiU1IgMHglbHg6IHZzaWQ9MHgleCwgcmF3PTB4JXhcbiIsIGVhZGRyID4+IDI4LAorCQkgICAgc3JlLT52c2lkLCBzcmUtPnJhdyk7CisKKwlwdGUtPnZwYWdlID0ga3ZtcHBjX21tdV9ib29rM3NfMzJfZWFfdG9fdnAodmNwdSwgZWFkZHIsIGRhdGEpOworCisJcHRlZ3AgPSBrdm1wcGNfbW11X2Jvb2szc18zMl9nZXRfcHRlZyh2Y3B1X2Jvb2szcywgc3JlLCBlYWRkciwgcHJpbWFyeSk7CisJaWYgKGt2bV9pc19lcnJvcl9odmEocHRlZ3ApKSB7CisJCXByaW50ayhLRVJOX0lORk8gIktWTTogSW52YWxpZCBQVEVHIVxuIik7CisJCWdvdG8gbm9fcGFnZV9mb3VuZDsKKwl9CisKKwlwdGVtID0ga3ZtcHBjX21tdV9ib29rM3NfMzJfZ2V0X3B0ZW0oc3JlLCBlYWRkciwgcHJpbWFyeSk7CisKKwlpZihjb3B5X2Zyb21fdXNlcihwdGVnLCAodm9pZCBfX3VzZXIgKilwdGVncCwgc2l6ZW9mKHB0ZWcpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIktWTTogQ2FuJ3QgY29weSBkYXRhIGZyb20gMHglbHghXG4iLCBwdGVncCk7CisJCWdvdG8gbm9fcGFnZV9mb3VuZDsKKwl9CisKKwlmb3IgKGk9MDsgaTwxNjsgaSs9MikgeworCQlpZiAocHRlbSA9PSBwdGVnW2ldKSB7CisJCQl1OCBwcDsKKworCQkJcHRlLT5yYWRkciA9IChwdGVnW2krMV0gJiB+KDB4RkZGVUxMKSkgfCAoZWFkZHIgJiAweEZGRik7CisJCQlwcCA9IHB0ZWdbaSsxXSAmIDM7CisKKwkJCWlmICgoc3JlLT5LcCAmJiAgKHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKSkgfHwKKwkJCSAgICAoc3JlLT5LcyAmJiAhKHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKSkpCisJCQkJcHAgfD0gNDsKKworCQkJcHRlLT5tYXlfd3JpdGUgPSBmYWxzZTsKKwkJCXB0ZS0+bWF5X3JlYWQgPSBmYWxzZTsKKwkJCXB0ZS0+bWF5X2V4ZWN1dGUgPSB0cnVlOworCQkJc3dpdGNoIChwcCkgeworCQkJCWNhc2UgMDoKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNjoKKwkJCQkJcHRlLT5tYXlfd3JpdGUgPSB0cnVlOworCQkJCWNhc2UgMzoKKwkJCQljYXNlIDU6CisJCQkJY2FzZSA3OgorCQkJCQlwdGUtPm1heV9yZWFkID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICggIXB0ZS0+bWF5X3JlYWQgKQorCQkJCWNvbnRpbnVlOworCisJCQlkcHJpbnRrX3B0ZSgiTU1VOiBGb3VuZCBQVEUgLT4gJXggJXggLSAleFxuIiwKKwkJCQkgICAgcHRlZ1tpXSwgcHRlZ1tpKzFdLCBwcCk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFVwZGF0ZSBQVEUgQyBhbmQgQSBiaXRzLCBzbyB0aGUgZ3Vlc3QncyBzd2FwcGVyIGtub3dzIHdlIHVzZWQgdGhlCisJICAgcGFnZSAqLworCWlmIChmb3VuZCkgeworCQl1MzIgb2xkcHRlID0gcHRlZ1tpKzFdOworCisJCWlmIChwdGUtPm1heV9yZWFkKQorCQkJcHRlZ1tpKzFdIHw9IFBURUdfRkxBR19BQ0NFU1NFRDsKKwkJaWYgKHB0ZS0+bWF5X3dyaXRlKQorCQkJcHRlZ1tpKzFdIHw9IFBURUdfRkxBR19ESVJUWTsKKwkJZWxzZQorCQkJZHByaW50a19wdGUoIktWTTogTWFwcGluZyByZWFkLW9ubHkgcGFnZSFcbiIpOworCisJCS8qIFdyaXRlIGJhY2sgaW50byB0aGUgUFRFRyAqLworCQlpZiAocHRlZ1tpKzFdICE9IG9sZHB0ZSkKKwkJCWNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilwdGVncCwgcHRlZywgc2l6ZW9mKHB0ZWcpKTsKKworCQlyZXR1cm4gMDsKKwl9CisKK25vX3BhZ2VfZm91bmQ6CisKKwlpZiAoY2hlY2tfZGVidWdfaXAodmNwdSkpIHsKKwkJZHByaW50a19wdGUoIktWTSBNTVU6IE5vIFBURSBmb3VuZCAoc2RyMT0weCVsbHggcHRlZ3A9MHglbHgpXG4iLAorCQkJICAgIHRvX2Jvb2szcyh2Y3B1KS0+c2RyMSwgcHRlZ3ApOworCQlmb3IgKGk9MDsgaTwxNjsgaSs9MikgeworCQkJZHByaW50a19wdGUoIiAgICUwMmQ6IDB4JXggLSAweCV4ICgweCVsbHgpXG4iLAorCQkJCSAgICBpLCBwdGVnW2ldLCBwdGVnW2krMV0sIHB0ZW0pOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX21tdV9ib29rM3NfMzJfeGxhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlLCBib29sIGRhdGEpCit7CisJaW50IHI7CisKKwlwdGUtPmVhZGRyID0gZWFkZHI7CisJciA9IGt2bXBwY19tbXVfYm9vazNzXzMyX3hsYXRlX2JhdCh2Y3B1LCBlYWRkciwgcHRlLCBkYXRhKTsKKwlpZiAociA8IDApCisJICAgICAgIHIgPSBrdm1wcGNfbW11X2Jvb2szc18zMl94bGF0ZV9wdGUodmNwdSwgZWFkZHIsIHB0ZSwgZGF0YSwgdHJ1ZSk7CisJaWYgKHIgPCAwKQorCSAgICAgICByID0ga3ZtcHBjX21tdV9ib29rM3NfMzJfeGxhdGVfcHRlKHZjcHUsIGVhZGRyLCBwdGUsIGRhdGEsIGZhbHNlKTsKKworCXJldHVybiByOworfQorCisKK3N0YXRpYyB1MzIga3ZtcHBjX21tdV9ib29rM3NfMzJfbWZzcmluKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHNybnVtKQoreworCXJldHVybiB0b19ib29rM3ModmNwdSktPnNyW3NybnVtXS5yYXc7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfYm9vazNzXzMyX210c3JpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzcm51bSwKKwkJCQkJdWxvbmcgdmFsdWUpCit7CisJc3RydWN0IGt2bXBwY19zciAqc3JlOworCisJc3JlID0gJnRvX2Jvb2szcyh2Y3B1KS0+c3Jbc3JudW1dOworCisJLyogRmx1c2ggYW55IGxlZnQtb3ZlciBzaGFkb3dzIGZyb20gdGhlIHByZXZpb3VzIFNSICovCisKKwkvKiBYWFggTm90IG5lY2Vzc2FyeT8gKi8KKwkvKiBrdm1wcGNfbW11X3B0ZV9mbHVzaCh2Y3B1LCAoKHU2NClzcmUtPnZzaWQpIDw8IDI4LCAweGYwMDAwMDAwVUxMKTsgKi8KKworCS8qIEFuZCB0aGVuIHB1dCBpbiB0aGUgbmV3IFNSICovCisJc3JlLT5yYXcgPSB2YWx1ZTsKKwlzcmUtPnZzaWQgPSAodmFsdWUgJiAweDBmZmZmZmZmKTsKKwlzcmUtPktzID0gKHZhbHVlICYgMHg0MDAwMDAwMCkgPyB0cnVlIDogZmFsc2U7CisJc3JlLT5LcCA9ICh2YWx1ZSAmIDB4MjAwMDAwMDApID8gdHJ1ZSA6IGZhbHNlOworCXNyZS0+bnggPSAodmFsdWUgJiAweDEwMDAwMDAwKSA/IHRydWUgOiBmYWxzZTsKKworCS8qIE1hcCB0aGUgbmV3IHNlZ21lbnQgKi8KKwlrdm1wcGNfbW11X21hcF9zZWdtZW50KHZjcHUsIHNybnVtIDw8IFNJRF9TSElGVCk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfYm9vazNzXzMyX3RsYmllKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZWEsIGJvb2wgbGFyZ2UpCit7CisJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgZWEsIH4weEZGRlVMTCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX21tdV9ib29rM3NfMzJfZXNpZF90b192c2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVzaWQsCisJCQkJCSAgICAgdTY0ICp2c2lkKQoreworCS8qIEluIGNhc2Ugd2Ugb25seSBoYXZlIG9uZSBvZiBNU1JfSVIgb3IgTVNSX0RSIHNldCwgbGV0J3MgcHV0CisJICAgdGhhdCBpbiB0aGUgcmVhbC1tb2RlIGNvbnRleHQgKGFuZCBob3BlIFJNIGRvZXNuJ3QgYWNjZXNzCisJICAgaGlnaCBtZW1vcnkpICovCisJc3dpdGNoICh2Y3B1LT5hcmNoLm1zciAmIChNU1JfRFJ8TVNSX0lSKSkgeworCWNhc2UgMDoKKwkJKnZzaWQgPSAoVlNJRF9SRUFMID4+IDE2KSB8IGVzaWQ7CisJCWJyZWFrOworCWNhc2UgTVNSX0lSOgorCQkqdnNpZCA9IChWU0lEX1JFQUxfSVIgPj4gMTYpIHwgZXNpZDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfRFI6CisJCSp2c2lkID0gKFZTSURfUkVBTF9EUiA+PiAxNikgfCBlc2lkOworCQlicmVhazsKKwljYXNlIE1TUl9EUnxNU1JfSVI6CisJeworCQl1bG9uZyBlYTsKKwkJZWEgPSBlc2lkIDw8IFNJRF9TSElGVDsKKwkJKnZzaWQgPSBmaW5kX3NyKHRvX2Jvb2szcyh2Y3B1KSwgZWEpLT52c2lkOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGt2bXBwY19tbXVfYm9vazNzXzMyX2lzX2RjYnozMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBrdm1wcGNfbW11X2Jvb2szc18zMl9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX21tdSAqbW11ID0gJnZjcHUtPmFyY2gubW11OworCisJbW11LT5tdHNyaW4gPSBrdm1wcGNfbW11X2Jvb2szc18zMl9tdHNyaW47CisJbW11LT5tZnNyaW4gPSBrdm1wcGNfbW11X2Jvb2szc18zMl9tZnNyaW47CisJbW11LT54bGF0ZSA9IGt2bXBwY19tbXVfYm9vazNzXzMyX3hsYXRlOworCW1tdS0+cmVzZXRfbXNyID0ga3ZtcHBjX21tdV9ib29rM3NfMzJfcmVzZXRfbXNyOworCW1tdS0+dGxiaWUgPSBrdm1wcGNfbW11X2Jvb2szc18zMl90bGJpZTsKKwltbXUtPmVzaWRfdG9fdnNpZCA9IGt2bXBwY19tbXVfYm9vazNzXzMyX2VzaWRfdG9fdnNpZDsKKwltbXUtPmVhX3RvX3ZwID0ga3ZtcHBjX21tdV9ib29rM3NfMzJfZWFfdG9fdnA7CisJbW11LT5pc19kY2J6MzIgPSBrdm1wcGNfbW11X2Jvb2szc18zMl9pc19kY2J6MzI7CisKKwltbXUtPnNsYm10ZSA9IE5VTEw7CisJbW11LT5zbGJtZmVlID0gTlVMTDsKKwltbXUtPnNsYm1mZXYgPSBOVUxMOworCW1tdS0+c2xiaWUgPSBOVUxMOworCW1tdS0+c2xiaWEgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW11bGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjdlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbXVsYXRlLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgU1VTRSBMaW51eCBQcm9kdWN0cyBHbWJIIDIwMDkKKyAqCisgKiBBdXRob3JzOiBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KKyAqLworCisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2Jvb2szcy5oPgorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKworI2RlZmluZSBPUF8xOV9YT1BfUkZJRAkJMTgKKyNkZWZpbmUgT1BfMTlfWE9QX1JGSQkJNTAKKworI2RlZmluZSBPUF8zMV9YT1BfTUZNU1IJCTgzCisjZGVmaW5lIE9QXzMxX1hPUF9NVE1TUgkJMTQ2CisjZGVmaW5lIE9QXzMxX1hPUF9NVE1TUkQJMTc4CisjZGVmaW5lIE9QXzMxX1hPUF9NVFNSSU4JMjQyCisjZGVmaW5lIE9QXzMxX1hPUF9UTEJJRUwJMjc0CisjZGVmaW5lIE9QXzMxX1hPUF9UTEJJRQkJMzA2CisjZGVmaW5lIE9QXzMxX1hPUF9TTEJNVEUJNDAyCisjZGVmaW5lIE9QXzMxX1hPUF9TTEJJRQkJNDM0CisjZGVmaW5lIE9QXzMxX1hPUF9TTEJJQQkJNDk4CisjZGVmaW5lIE9QXzMxX1hPUF9NRlNSSU4JNjU5CisjZGVmaW5lIE9QXzMxX1hPUF9TTEJNRkVWCTg1MQorI2RlZmluZSBPUF8zMV9YT1BfRUlPSU8JCTg1NAorI2RlZmluZSBPUF8zMV9YT1BfU0xCTUZFRQk5MTUKKworLyogRENCWiBpcyBhY3R1YWxseSAxMDE0LCBidXQgd2UgcGF0Y2ggaXQgdG8gMTAxMCBzbyB3ZSBnZXQgYSB0cmFwICovCisjZGVmaW5lIE9QXzMxX1hPUF9EQ0JaCQkxMDEwCisKK2ludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnN0LCBpbnQgKmFkdmFuY2UpCit7CisJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCisJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKKwljYXNlIDE5OgorCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKKwkJY2FzZSBPUF8xOV9YT1BfUkZJRDoKKwkJY2FzZSBPUF8xOV9YT1BfUkZJOgorCQkJdmNwdS0+YXJjaC5wYyA9IHZjcHUtPmFyY2guc3JyMDsKKwkJCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guc3JyMSk7CisJCQkqYWR2YW5jZSA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIDMxOgorCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKKwkJY2FzZSBPUF8zMV9YT1BfTUZNU1I6CisJCQl2Y3B1LT5hcmNoLmdwcltnZXRfcnQoaW5zdCldID0gdmNwdS0+YXJjaC5tc3I7CisJCQlicmVhazsKKwkJY2FzZSBPUF8zMV9YT1BfTVRNU1JEOgorCQl7CisJCQl1bG9uZyBycyA9IHZjcHUtPmFyY2guZ3ByW2dldF9ycyhpbnN0KV07CisJCQlpZiAoaW5zdCAmIDB4MTAwMDApIHsKKwkJCQl2Y3B1LT5hcmNoLm1zciAmPSB+KE1TUl9SSSB8IE1TUl9FRSk7CisJCQkJdmNwdS0+YXJjaC5tc3IgfD0gcnMgJiAoTVNSX1JJIHwgTVNSX0VFKTsKKwkJCX0gZWxzZQorCQkJCWt2bXBwY19zZXRfbXNyKHZjcHUsIHJzKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgT1BfMzFfWE9QX01UTVNSOgorCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5ncHJbZ2V0X3JzKGluc3QpXSk7CisJCQlicmVhazsKKwkJY2FzZSBPUF8zMV9YT1BfTUZTUklOOgorCQl7CisJCQlpbnQgc3JudW07CisKKwkJCXNybnVtID0gKHZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV0gPj4gMjgpICYgMHhmOworCQkJaWYgKHZjcHUtPmFyY2gubW11Lm1mc3JpbikgeworCQkJCXUzMiBzcjsKKwkJCQlzciA9IHZjcHUtPmFyY2gubW11Lm1mc3Jpbih2Y3B1LCBzcm51bSk7CisJCQkJdmNwdS0+YXJjaC5ncHJbZ2V0X3J0KGluc3QpXSA9IHNyOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBPUF8zMV9YT1BfTVRTUklOOgorCQkJdmNwdS0+YXJjaC5tbXUubXRzcmluKHZjcHUsCisJCQkJKHZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV0gPj4gMjgpICYgMHhmLAorCQkJCXZjcHUtPmFyY2guZ3ByW2dldF9ycyhpbnN0KV0pOworCQkJYnJlYWs7CisJCWNhc2UgT1BfMzFfWE9QX1RMQklFOgorCQljYXNlIE9QXzMxX1hPUF9UTEJJRUw6CisJCXsKKwkJCWJvb2wgbGFyZ2UgPSAoaW5zdCAmIDB4MDAyMDAwMDApID8gdHJ1ZSA6IGZhbHNlOworCQkJdWxvbmcgYWRkciA9IHZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV07CisJCQl2Y3B1LT5hcmNoLm1tdS50bGJpZSh2Y3B1LCBhZGRyLCBsYXJnZSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIE9QXzMxX1hPUF9FSU9JTzoKKwkJCWJyZWFrOworCQljYXNlIE9QXzMxX1hPUF9TTEJNVEU6CisJCQlpZiAoIXZjcHUtPmFyY2gubW11LnNsYm10ZSkKKwkJCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCisJCQl2Y3B1LT5hcmNoLm1tdS5zbGJtdGUodmNwdSwgdmNwdS0+YXJjaC5ncHJbZ2V0X3JzKGluc3QpXSwKKwkJCQkJCXZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV0pOworCQkJYnJlYWs7CisJCWNhc2UgT1BfMzFfWE9QX1NMQklFOgorCQkJaWYgKCF2Y3B1LT5hcmNoLm1tdS5zbGJpZSkKKwkJCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCisJCQl2Y3B1LT5hcmNoLm1tdS5zbGJpZSh2Y3B1LCB2Y3B1LT5hcmNoLmdwcltnZXRfcmIoaW5zdCldKTsKKwkJCWJyZWFrOworCQljYXNlIE9QXzMxX1hPUF9TTEJJQToKKwkJCWlmICghdmNwdS0+YXJjaC5tbXUuc2xiaWEpCisJCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKworCQkJdmNwdS0+YXJjaC5tbXUuc2xiaWEodmNwdSk7CisJCQlicmVhazsKKwkJY2FzZSBPUF8zMV9YT1BfU0xCTUZFRToKKwkJCWlmICghdmNwdS0+YXJjaC5tbXUuc2xibWZlZSkgeworCQkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCQkJfSBlbHNlIHsKKwkJCQl1bG9uZyB0LCByYjsKKworCQkJCXJiID0gdmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXTsKKwkJCQl0ID0gdmNwdS0+YXJjaC5tbXUuc2xibWZlZSh2Y3B1LCByYik7CisJCQkJdmNwdS0+YXJjaC5ncHJbZ2V0X3J0KGluc3QpXSA9IHQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPUF8zMV9YT1BfU0xCTUZFVjoKKwkJCWlmICghdmNwdS0+YXJjaC5tbXUuc2xibWZldikgeworCQkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCQkJfSBlbHNlIHsKKwkJCQl1bG9uZyB0LCByYjsKKworCQkJCXJiID0gdmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXTsKKwkJCQl0ID0gdmNwdS0+YXJjaC5tbXUuc2xibWZldih2Y3B1LCByYik7CisJCQkJdmNwdS0+YXJjaC5ncHJbZ2V0X3J0KGluc3QpXSA9IHQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPUF8zMV9YT1BfRENCWjoKKwkJeworCQkJdWxvbmcgcmIgPSAgdmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXTsKKwkJCXVsb25nIHJhID0gMDsKKwkJCXVsb25nIGFkZHI7CisJCQl1MzIgemVyb3NbOF0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworCQkJaWYgKGdldF9yYShpbnN0KSkKKwkJCQlyYSA9IHZjcHUtPmFyY2guZ3ByW2dldF9yYShpbnN0KV07CisKKwkJCWFkZHIgPSAocmEgKyByYikgJiB+MzFVTEw7CisJCQlpZiAoISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9TRikpCisJCQkJYWRkciAmPSAweGZmZmZmZmZmOworCisJCQlpZiAoa3ZtcHBjX3N0KHZjcHUsIGFkZHIsIDMyLCB6ZXJvcykpIHsKKwkJCQl2Y3B1LT5hcmNoLmRlYXIgPSBhZGRyOworCQkJCXZjcHUtPmFyY2guZmF1bHRfZGVhciA9IGFkZHI7CisJCQkJdG9fYm9vazNzKHZjcHUpLT5kc2lzciA9IERTSVNSX1BST1RGQVVMVCB8CisJCQkJCQkgICAgICBEU0lTUl9JU1NUT1JFOworCQkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LAorCQkJCQlCT09LM1NfSU5URVJSVVBUX0RBVEFfU1RPUkFHRSk7CisJCQkJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgYWRkciwgfjB4RkZGVUxMKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVtdWxhdGVkID0gRU1VTEFURV9GQUlMOworCX0KKworCXJldHVybiBlbXVsYXRlZDsKK30KKwordm9pZCBrdm1wcGNfc2V0X2JhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1wcGNfYmF0ICpiYXQsIGJvb2wgdXBwZXIsCisgICAgICAgICAgICAgICAgICAgIHUzMiB2YWwpCit7CisJaWYgKHVwcGVyKSB7CisJCS8qIFVwcGVyIEJBVCAqLworCQl1MzIgYmwgPSAodmFsID4+IDIpICYgMHg3ZmY7CisJCWJhdC0+YmVwaV9tYXNrID0gKH5ibCA8PCAxNyk7CisJCWJhdC0+YmVwaSA9IHZhbCAmIDB4ZmZmZTAwMDA7CisJCWJhdC0+dnMgPSAodmFsICYgMikgPyAxIDogMDsKKwkJYmF0LT52cCA9ICh2YWwgJiAxKSA/IDEgOiAwOworCQliYXQtPnJhdyA9IChiYXQtPnJhdyAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgfCB2YWw7CisJfSBlbHNlIHsKKwkJLyogTG93ZXIgQkFUICovCisJCWJhdC0+YnJwbiA9IHZhbCAmIDB4ZmZmZTAwMDA7CisJCWJhdC0+d2ltZyA9ICh2YWwgPj4gMykgJiAweGY7CisJCWJhdC0+cHAgPSB2YWwgJiAzOworCQliYXQtPnJhdyA9IChiYXQtPnJhdyAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkgfCAoKHU2NCl2YWwgPDwgMzIpOworCX0KK30KKworc3RhdGljIHZvaWQga3ZtcHBjX3dyaXRlX2JhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCB1MzIgdmFsKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzID0gdG9fYm9vazNzKHZjcHUpOworCXN0cnVjdCBrdm1wcGNfYmF0ICpiYXQ7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fSUJBVDBVIC4uLiBTUFJOX0lCQVQzTDoKKwkJYmF0ID0gJnZjcHVfYm9vazNzLT5pYmF0WyhzcHJuIC0gU1BSTl9JQkFUMFUpIC8gMl07CisJCWJyZWFrOworCWNhc2UgU1BSTl9JQkFUNFUgLi4uIFNQUk5fSUJBVDdMOgorCQliYXQgPSAmdmNwdV9ib29rM3MtPmliYXRbKHNwcm4gLSBTUFJOX0lCQVQ0VSkgLyAyXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0RCQVQwVSAuLi4gU1BSTl9EQkFUM0w6CisJCWJhdCA9ICZ2Y3B1X2Jvb2szcy0+ZGJhdFsoc3BybiAtIFNQUk5fREJBVDBVKSAvIDJdOworCQlicmVhazsKKwljYXNlIFNQUk5fREJBVDRVIC4uLiBTUFJOX0RCQVQ3TDoKKwkJYmF0ID0gJnZjcHVfYm9vazNzLT5kYmF0WyhzcHJuIC0gU1BSTl9EQkFUNFUpIC8gMl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWt2bXBwY19zZXRfYmF0KHZjcHUsIGJhdCwgIShzcHJuICUgMiksIHZhbCk7Cit9CisKK2ludCBrdm1wcGNfY29yZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fU0RSMToKKwkJdG9fYm9vazNzKHZjcHUpLT5zZHIxID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fRFNJU1I6CisJCXRvX2Jvb2szcyh2Y3B1KS0+ZHNpc3IgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9EQVI6CisJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0hJT1I6CisJCXRvX2Jvb2szcyh2Y3B1KS0+aGlvciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0lCQVQwVSAuLi4gU1BSTl9JQkFUM0w6CisJY2FzZSBTUFJOX0lCQVQ0VSAuLi4gU1BSTl9JQkFUN0w6CisJY2FzZSBTUFJOX0RCQVQwVSAuLi4gU1BSTl9EQkFUM0w6CisJY2FzZSBTUFJOX0RCQVQ0VSAuLi4gU1BSTl9EQkFUN0w6CisJCWt2bXBwY193cml0ZV9iYXQodmNwdSwgc3BybiwgKHUzMil2Y3B1LT5hcmNoLmdwcltyc10pOworCQkvKiBCQVQgd3JpdGVzIGhhcHBlbiBzbyByYXJlbHkgdGhhdCB3ZSdyZSBvayB0byBmbHVzaAorCQkgKiBldmVyeXRoaW5nIGhlcmUgKi8KKwkJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgU1BSTl9ISUQwOgorCQl0b19ib29rM3ModmNwdSktPmhpZFswXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0hJRDE6CisJCXRvX2Jvb2szcyh2Y3B1KS0+aGlkWzFdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQlicmVhazsKKwljYXNlIFNQUk5fSElEMjoKKwkJdG9fYm9vazNzKHZjcHUpLT5oaWRbMl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCWJyZWFrOworCWNhc2UgU1BSTl9ISUQ0OgorCQl0b19ib29rM3ModmNwdSktPmhpZFs0XSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0hJRDU6CisJCXRvX2Jvb2szcyh2Y3B1KS0+aGlkWzVdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQkvKiBndWVzdCBISUQ1IHNldCBjYW4gY2hhbmdlIGlzX2RjYnozMiAqLworCQlpZiAodmNwdS0+YXJjaC5tbXUuaXNfZGNiejMyKHZjcHUpICYmCisJCSAgICAobWZtc3IoKSAmIE1TUl9IVikpCisJCQl2Y3B1LT5hcmNoLmhmbGFncyB8PSBCT09LM1NfSEZMQUdfRENCWjMyOworCQlicmVhazsKKwljYXNlIFNQUk5fSUNUQzoKKwljYXNlIFNQUk5fVEhSTTE6CisJY2FzZSBTUFJOX1RIUk0yOgorCWNhc2UgU1BSTl9USFJNMzoKKwljYXNlIFNQUk5fQ1RSTEY6CisJY2FzZSBTUFJOX0NUUkxUOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJLVk06IGludmFsaWQgU1BSIHdyaXRlOiAlZFxuIiwgc3Bybik7CisjaWZuZGVmIERFQlVHX1NQUgorCQllbXVsYXRlZCA9IEVNVUxBVEVfRkFJTDsKKyNlbmRpZgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZW11bGF0ZWQ7Cit9CisKK2ludCBrdm1wcGNfY29yZV9lbXVsYXRlX21mc3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBydCkKK3sKKwlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisKKwlzd2l0Y2ggKHNwcm4pIHsKKwljYXNlIFNQUk5fU0RSMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5zZHIxOworCQlicmVhazsKKwljYXNlIFNQUk5fRFNJU1I6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+ZHNpc3I7CisJCWJyZWFrOworCWNhc2UgU1BSTl9EQVI6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVhcjsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0hJT1I6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+aGlvcjsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0hJRDA6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+aGlkWzBdOworCQlicmVhazsKKwljYXNlIFNQUk5fSElEMToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5oaWRbMV07CisJCWJyZWFrOworCWNhc2UgU1BSTl9ISUQyOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB0b19ib29rM3ModmNwdSktPmhpZFsyXTsKKwkJYnJlYWs7CisJY2FzZSBTUFJOX0hJRDQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+aGlkWzRdOworCQlicmVhazsKKwljYXNlIFNQUk5fSElENToKKwkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5oaWRbNV07CisJCWJyZWFrOworCWNhc2UgU1BSTl9USFJNMToKKwljYXNlIFNQUk5fVEhSTTI6CisJY2FzZSBTUFJOX1RIUk0zOgorCWNhc2UgU1BSTl9DVFJMRjoKKwljYXNlIFNQUk5fQ1RSTFQ6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIktWTTogaW52YWxpZCBTUFIgcmVhZDogJWRcbiIsIHNwcm4pOworI2lmbmRlZiBERUJVR19TUFIKKwkJZW11bGF0ZWQgPSBFTVVMQVRFX0ZBSUw7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVtdWxhdGVkOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9leHBvcnRzLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9leHBvcnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyZGIzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2V4cG9ydHMuYwpAQCAtMCwwICsxLDI0IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKgorICogQ29weXJpZ2h0IFNVU0UgTGludXggUHJvZHVjdHMgR21iSCAyMDA5CisgKgorICogQXV0aG9yczogQWxleGFuZGVyIEdyYWYgPGFncmFmQHN1c2UuZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzLmg+CisKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY190cmFtcG9saW5lX2VudGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY190cmFtcG9saW5lX2xvd21lbSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9pbnRlcnJ1cHRzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9pbnRlcnJ1cHRzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1NWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2ludGVycnVwdHMuUwpAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqIENvcHlyaWdodCBTVVNFIExpbnV4IFByb2R1Y3RzIEdtYkggMjAwOQorICoKKyAqIEF1dGhvcnM6IEFsZXhhbmRlciBHcmFmIDxhZ3JhZkBzdXNlLmRlPgorICovCisKKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYXNtLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NHMuaD4KKworI2RlZmluZSBLVk1QUENfSEFORExFX0VYSVQgLmt2bXBwY19oYW5kbGVfZXhpdAorI2RlZmluZSBVTE9OR19TSVpFIDgKKyNkZWZpbmUgVkNQVV9HUFIobikgICAgIChWQ1BVX0dQUlMgKyAobiAqIFVMT05HX1NJWkUpKQorCisubWFjcm8gbWZwYWNhIHRtcF9yZWcsIHNyY19yZWcsIG9mZnNldCwgdmNwdV9yZWcKKwlsZAlcdG1wX3JlZywgKFBBQ0FfRVhNQytcb2Zmc2V0KShyMTMpCisJc3RkCVx0bXBfcmVnLCBWQ1BVX0dQUihcc3JjX3JlZykoXHZjcHVfcmVnKQorLmVuZG0KKworLm1hY3JvIERJU0FCTEVfSU5URVJSVVBUUworICAgICAgIG1mbXNyICAgcjAKKyAgICAgICBybGRpY2wgIHIwLHIwLDQ4LDEKKyAgICAgICByb3RsZGkgIHIwLHIwLDE2CisgICAgICAgbXRtc3JkICByMCwxCisuZW5kbQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIEd1ZXN0IGVudHJ5IC8gZXhpdCBjb2RlIHRoYXQgaXMgaW4ga2VybmVsIG1vZHVsZSBtZW1vcnkgKGhpZ2htZW0pICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZWdpc3RlcnM6CisgKiAgcjM6IGt2bV9ydW4gcG9pbnRlcgorICogIHI0OiB2Y3B1IHBvaW50ZXIKKyAqLworX0dMT0JBTChfX2t2bXBwY192Y3B1X2VudHJ5KQorCitrdm1fc3RhcnRfZW50cnk6CisJLyogV3JpdGUgY29ycmVjdCBzdGFjayBmcmFtZSAqLworCW1mbHIgICAgcjAKKwlzdGQgICAgIHIwLDE2KHIxKQorCisJLyogU2F2ZSBob3N0IHN0YXRlIHRvIHRoZSBzdGFjayAqLworCXN0ZHUJcjEsIC1TV0lUQ0hfRlJBTUVfU0laRShyMSkKKworCS8qIFNhdmUgcjMgKGt2bV9ydW4pIGFuZCByNCAodmNwdSkgKi8KKwlTQVZFXzJHUFJTKDMsIHIxKQorCisJLyogU2F2ZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJzIChyMTQgLSByMzEpICovCisJU0FWRV9OVkdQUlMocjEpCisKKwkvKiBTYXZlIExSICovCisJbWZscglyMTQKKwlzdGQJcjE0LCBfTElOSyhyMSkKKworLyogWFhYIG9wdGltaXplIG5vbi12b2xhdGlsZSBsb2FkaW5nIGF3YXkgKi8KK2t2bV9zdGFydF9saWdodHdlaWdodDoKKworCURJU0FCTEVfSU5URVJSVVBUUworCisJLyogU2F2ZSBSMS9SMiBpbiB0aGUgUEFDQSAqLworCXN0ZAlyMSwgUEFDQVIxKHIxMykKKwlzdGQJcjIsIChQQUNBX0VYTUMrRVhfU1JSMCkocjEzKQorCWxkCXIzLCBWQ1BVX0hJR0hNRU1fSEFORExFUihyNCkKKwlzdGQJcjMsIFBBQ0FTQVZFRE1TUihyMTMpCisKKwkvKiBMb2FkIG5vbi12b2xhdGlsZSBndWVzdCBzdGF0ZSBmcm9tIHRoZSB2Y3B1ICovCisJbGQJcjE0LCBWQ1BVX0dQUihyMTQpKHI0KQorCWxkCXIxNSwgVkNQVV9HUFIocjE1KShyNCkKKwlsZAlyMTYsIFZDUFVfR1BSKHIxNikocjQpCisJbGQJcjE3LCBWQ1BVX0dQUihyMTcpKHI0KQorCWxkCXIxOCwgVkNQVV9HUFIocjE4KShyNCkKKwlsZAlyMTksIFZDUFVfR1BSKHIxOSkocjQpCisJbGQJcjIwLCBWQ1BVX0dQUihyMjApKHI0KQorCWxkCXIyMSwgVkNQVV9HUFIocjIxKShyNCkKKwlsZAlyMjIsIFZDUFVfR1BSKHIyMikocjQpCisJbGQJcjIzLCBWQ1BVX0dQUihyMjMpKHI0KQorCWxkCXIyNCwgVkNQVV9HUFIocjI0KShyNCkKKwlsZAlyMjUsIFZDUFVfR1BSKHIyNSkocjQpCisJbGQJcjI2LCBWQ1BVX0dQUihyMjYpKHI0KQorCWxkCXIyNywgVkNQVV9HUFIocjI3KShyNCkKKwlsZAlyMjgsIFZDUFVfR1BSKHIyOCkocjQpCisJbGQJcjI5LCBWQ1BVX0dQUihyMjkpKHI0KQorCWxkCXIzMCwgVkNQVV9HUFIocjMwKShyNCkKKwlsZAlyMzEsIFZDUFVfR1BSKHIzMSkocjQpCisKKwlsZAlyOSwgVkNQVV9QQyhyNCkJCQkvKiByOSA9IHZjcHUtPmFyY2gucGMgKi8KKwlsZAlyMTAsIFZDUFVfU0hBRE9XX01TUihyNCkJLyogcjEwID0gdmNwdS0+YXJjaC5zaGFkb3dfbXNyICovCisKKwlsZAlyMywgVkNQVV9UUkFNUE9MSU5FX0VOVEVSKHI0KQorCW10c3JyMAlyMworCisJTE9BRF9SRUdfSU1NRURJQVRFKHIzLCBNU1JfS0VSTkVMICYgfihNU1JfSVIgfCBNU1JfRFIpKQorCW10c3JyMQlyMworCisJLyogTG9hZCBndWVzdCBzdGF0ZSBpbiB0aGUgcmVzcGVjdGl2ZSByZWdpc3RlcnMgKi8KKwlsd3oJcjMsIFZDUFVfQ1IocjQpCQkvKiByMyA9IHZjcHUtPmFyY2guY3IgKi8KKwlzdHcJcjMsIChQQUNBX0VYTUMgKyBFWF9DQ1IpKHIxMykKKworCWxkCXIzLCBWQ1BVX0NUUihyNCkJLyogcjMgPSB2Y3B1LT5hcmNoLmN0ciAqLworCW10Y3RyCXIzCQkJLyogQ1RSID0gcjMgKi8KKworCWxkCXIzLCBWQ1BVX0xSKHI0KQkJLyogcjMgPSB2Y3B1LT5hcmNoLmxyICovCisJbXRscglyMwkJCS8qIExSID0gcjMgKi8KKworCWxkCXIzLCBWQ1BVX1hFUihyNCkJLyogcjMgPSB2Y3B1LT5hcmNoLnhlciAqLworCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IzKShyMTMpCisKKwkvKiBTb21lIGd1ZXN0cyBtYXkgbmVlZCB0byBoYXZlIGRjYnogc2V0IHRvIDMyIGJ5dGUgbGVuZ3RoLgorCSAqCisJICogVXN1YWxseSB3ZSBlbnN1cmUgdGhhdCBieSBwYXRjaGluZyB0aGUgZ3Vlc3QncyBpbnN0cnVjdGlvbnMKKwkgKiB0byB0cmFwIG9uIGRjYnogYW5kIGVtdWxhdGUgaXQgaW4gdGhlIGh5cGVydmlzb3IuCisJICoKKwkgKiBJZiB3ZSBjYW4sIHdlIHNob3VsZCB0ZWxsIHRoZSBDUFUgdG8gdXNlIDMyIGJ5dGUgZGNieiB0aG91Z2gsCisJICogYmVjYXVzZSB0aGF0J3MgYSBsb3QgZmFzdGVyLgorCSAqLworCisJbGQJcjMsIFZDUFVfSEZMQUdTKHI0KQorCXJsZGljbC4JcjMsIHIzLCAwLCA2MwkJLyogQ1IgPSAoKHIzICYgMSkgPT0gMCkgKi8KKwliZXEJbm9fZGNiejMyX29uCisKKwltZnNwciAgIHIzLFNQUk5fSElENQorCW9yaSAgICAgcjMsIHIzLCAweDgwCQkvKiBYWFggSElENV9kY2J6MzIgPSAweDgwICovCisJbXRzcHIgICBTUFJOX0hJRDUscjMKKworbm9fZGNiejMyX29uOgorCS8qCUxvYWQgZ3Vlc3QgR1BScyAqLworCisJbGQJcjMsIFZDUFVfR1BSKHI5KShyNCkKKwlzdGQJcjMsIChQQUNBX0VYTUMgKyBFWF9SOSkocjEzKQorCWxkCXIzLCBWQ1BVX0dQUihyMTApKHI0KQorCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMCkocjEzKQorCWxkCXIzLCBWQ1BVX0dQUihyMTEpKHI0KQorCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMSkocjEzKQorCWxkCXIzLCBWQ1BVX0dQUihyMTIpKHI0KQorCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMikocjEzKQorCWxkCXIzLCBWQ1BVX0dQUihyMTMpKHI0KQorCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMykocjEzKQorCisJbGQJcjAsIFZDUFVfR1BSKHIwKShyNCkKKwlsZAlyMSwgVkNQVV9HUFIocjEpKHI0KQorCWxkCXIyLCBWQ1BVX0dQUihyMikocjQpCisJbGQJcjMsIFZDUFVfR1BSKHIzKShyNCkKKwlsZAlyNSwgVkNQVV9HUFIocjUpKHI0KQorCWxkCXI2LCBWQ1BVX0dQUihyNikocjQpCisJbGQJcjcsIFZDUFVfR1BSKHI3KShyNCkKKwlsZAlyOCwgVkNQVV9HUFIocjgpKHI0KQorCWxkCXI0LCBWQ1BVX0dQUihyNCkocjQpCisKKwkvKiBUaGlzIHNldHMgdGhlIE1hZ2ljIHZhbHVlIGZvciB0aGUgdHJhbXBvbGluZSAqLworCisJbGkJcjExLCAxCisJc3RiCXIxMSwgUEFDQV9LVk1fSU5fR1VFU1QocjEzKQorCisJLyogSnVtcCB0byBTTEIgcGF0Y2hpbmcgaGFuZGxkZXIgYW5kIGludG8gb3VyIGd1ZXN0ICovCisJUkZJCisKKy8qCisgKiBUaGlzIGlzIHRoZSBoYW5kbGVyIGluIG1vZHVsZSBtZW1vcnkuIEl0IGdldHMganVtcGVkIGF0IGZyb20gdGhlCisgKiBsb3dtZW0gdHJhbXBvbGluZSBjb2RlLCBzbyBpdCdzIGJhc2ljYWxseSB0aGUgZ3Vlc3QgZXhpdCBjb2RlLgorICoKKyAqLworCisuZ2xvYmFsIGt2bXBwY19oYW5kbGVyX2hpZ2htZW0KK2t2bXBwY19oYW5kbGVyX2hpZ2htZW06CisKKwkvKgorCSAqIFJlZ2lzdGVyIHVzYWdlIGF0IHRoaXMgcG9pbnQ6CisJICoKKwkgKiBSMDAgICA9IGd1ZXN0IFIxMworCSAqIFIwMSAgID0gaG9zdCBSMQorCSAqIFIwMiAgID0gaG9zdCBSMgorCSAqIFIxMCAgID0gZ3Vlc3QgUEMKKwkgKiBSMTEgICA9IGd1ZXN0IE1TUgorCSAqIFIxMiAgID0gZXhpdCBoYW5kbGVyIGlkCisJICogUjEzICAgPSBQQUNBCisJICogUEFDQS5leG1jLlI5ICAgID0gZ3Vlc3QgUjEKKwkgKiBQQUNBLmV4bWMuUjEwICAgPSBndWVzdCBSMTAKKwkgKiBQQUNBLmV4bWMuUjExICAgPSBndWVzdCBSMTEKKwkgKiBQQUNBLmV4bWMuUjEyICAgPSBndWVzdCBSMTIKKwkgKiBQQUNBLmV4bWMuUjEzICAgPSBndWVzdCBSMgorCSAqIFBBQ0EuZXhtYy5EQVIgICA9IGd1ZXN0IERBUgorCSAqIFBBQ0EuZXhtYy5EU0lTUiA9IGd1ZXN0IERTSVNSCisJICogUEFDQS5leG1jLkxSICAgID0gZ3Vlc3QgaW5zdHJ1Y3Rpb24KKwkgKiBQQUNBLmV4bWMuQ0NSICAgPSBndWVzdCBDUgorCSAqIFBBQ0EuZXhtYy5TUlIwICA9IGd1ZXN0IFIwCisJICoKKwkgKi8KKworCXN0ZAlyMywgKFBBQ0FfRVhNQytFWF9SMykocjEzKQorCisJLyogc2F2ZSB0aGUgZXhpdCBpZCBpbiBSMyAqLworCW1yCXIzLCByMTIKKworCS8qIFIxMiA9IHZjcHUgKi8KKwlsZAlyMTIsIEdQUjQocjEpCisKKwkvKiBOb3cgc2F2ZSB0aGUgZ3Vlc3Qgc3RhdGUgKi8KKworCXN0ZAlyMCwgVkNQVV9HUFIocjEzKShyMTIpCisJc3RkCXI0LCBWQ1BVX0dQUihyNCkocjEyKQorCXN0ZAlyNSwgVkNQVV9HUFIocjUpKHIxMikKKwlzdGQJcjYsIFZDUFVfR1BSKHI2KShyMTIpCisJc3RkCXI3LCBWQ1BVX0dQUihyNykocjEyKQorCXN0ZAlyOCwgVkNQVV9HUFIocjgpKHIxMikKKwlzdGQJcjksIFZDUFVfR1BSKHI5KShyMTIpCisKKwkvKiBnZXQgcmVnaXN0ZXJzIGZyb20gUEFDQSAqLworCW1mcGFjYQlyNSwgcjAsIEVYX1NSUjAsIHIxMgorCW1mcGFjYQlyNSwgcjMsIEVYX1IzLCByMTIKKwltZnBhY2EJcjUsIHIxLCBFWF9SOSwgcjEyCisJbWZwYWNhCXI1LCByMTAsIEVYX1IxMCwgcjEyCisJbWZwYWNhCXI1LCByMTEsIEVYX1IxMSwgcjEyCisJbWZwYWNhCXI1LCByMTIsIEVYX1IxMiwgcjEyCisJbWZwYWNhCXI1LCByMiwgRVhfUjEzLCByMTIKKworCWx3eglyNSwgKFBBQ0FfRVhNQytFWF9MUikocjEzKQorCXN0dwlyNSwgVkNQVV9MQVNUX0lOU1QocjEyKQorCisJbHd6CXI1LCAoUEFDQV9FWE1DK0VYX0NDUikocjEzKQorCXN0dwlyNSwgVkNQVV9DUihyMTIpCisKKwlsZAlyNSwgVkNQVV9IRkxBR1MocjEyKQorCXJsZGljbC4JcjUsIHI1LCAwLCA2MwkJLyogQ1IgPSAoKHI1ICYgMSkgPT0gMCkgKi8KKwliZXEJbm9fZGNiejMyX29mZgorCisJbWZzcHIgICByNSxTUFJOX0hJRDUKKwlybGRpbWkgIHI1LHI1LDYsNTYKKwltdHNwciAgIFNQUk5fSElENSxyNQorCitub19kY2J6MzJfb2ZmOgorCisJLyogWFhYIG1heWJlIHNraXAgb24gbGlnaHR3ZWlnaHQ/ICovCisJc3RkCXIxNCwgVkNQVV9HUFIocjE0KShyMTIpCisJc3RkCXIxNSwgVkNQVV9HUFIocjE1KShyMTIpCisJc3RkCXIxNiwgVkNQVV9HUFIocjE2KShyMTIpCisJc3RkCXIxNywgVkNQVV9HUFIocjE3KShyMTIpCisJc3RkCXIxOCwgVkNQVV9HUFIocjE4KShyMTIpCisJc3RkCXIxOSwgVkNQVV9HUFIocjE5KShyMTIpCisJc3RkCXIyMCwgVkNQVV9HUFIocjIwKShyMTIpCisJc3RkCXIyMSwgVkNQVV9HUFIocjIxKShyMTIpCisJc3RkCXIyMiwgVkNQVV9HUFIocjIyKShyMTIpCisJc3RkCXIyMywgVkNQVV9HUFIocjIzKShyMTIpCisJc3RkCXIyNCwgVkNQVV9HUFIocjI0KShyMTIpCisJc3RkCXIyNSwgVkNQVV9HUFIocjI1KShyMTIpCisJc3RkCXIyNiwgVkNQVV9HUFIocjI2KShyMTIpCisJc3RkCXIyNywgVkNQVV9HUFIocjI3KShyMTIpCisJc3RkCXIyOCwgVkNQVV9HUFIocjI4KShyMTIpCisJc3RkCXIyOSwgVkNQVV9HUFIocjI5KShyMTIpCisJc3RkCXIzMCwgVkNQVV9HUFIocjMwKShyMTIpCisJc3RkCXIzMSwgVkNQVV9HUFIocjMxKShyMTIpCisKKwkvKiBSZXN0b3JlIG5vbi12b2xhdGlsZSBob3N0IHJlZ2lzdGVycyAocjE0IC0gcjMxKSAqLworCVJFU1RfTlZHUFJTKHIxKQorCisJLyogU2F2ZSBndWVzdCBQQyAoUjEwKSAqLworCXN0ZAlyMTAsIFZDUFVfUEMocjEyKQorCisJLyogU2F2ZSBndWVzdCBtc3IgKFIxMSkgKi8KKwlzdGQJcjExLCBWQ1BVX1NIQURPV19NU1IocjEyKQorCisJLyogU2F2ZSBndWVzdCBDVFIgKGluIFIxMikgKi8KKwltZmN0cglyNQorCXN0ZAlyNSwgVkNQVV9DVFIocjEyKQorCisJLyogU2F2ZSBndWVzdCBMUiAqLworCW1mbHIJcjUKKwlzdGQJcjUsIFZDUFVfTFIocjEyKQorCisJLyogU2F2ZSBndWVzdCBYRVIgKi8KKwltZnhlcglyNQorCXN0ZAlyNSwgVkNQVV9YRVIocjEyKQorCisJLyogU2F2ZSBndWVzdCBEQVIgKi8KKwlsZAlyNSwgKFBBQ0FfRVhNQytFWF9EQVIpKHIxMykKKwlzdGQJcjUsIFZDUFVfRkFVTFRfREVBUihyMTIpCisKKwkvKiBTYXZlIGd1ZXN0IERTSVNSICovCisJbHd6CXI1LCAoUEFDQV9FWE1DK0VYX0RTSVNSKShyMTMpCisJc3RkCXI1LCBWQ1BVX0ZBVUxUX0RTSVNSKHIxMikKKworCS8qIFJlc3RvcmUgaG9zdCBtc3IgLT4gU1JSMSAqLworCWxkCXI3LCBWQ1BVX0hPU1RfTVNSKHIxMikKKwltdHNycjEJcjcKKworCS8qIFJlc3RvcmUgaG9zdCBJUCAtPiBTUlIwICovCisJbGQJcjYsIFZDUFVfSE9TVF9SRVRJUChyMTIpCisJbXRzcnIwCXI2CisKKwkvKgorCSAqIEZvciBzb21lIGludGVycnVwdHMsIHdlIG5lZWQgdG8gY2FsbCB0aGUgcmVhbCBMaW51eAorCSAqIGhhbmRsZXIsIHNvIGl0IGNhbiBkbyB3b3JrIGZvciB1cy4gVGhpcyBoYXMgdG8gaGFwcGVuCisJICogYXMgaWYgdGhlIGludGVycnVwdCBhcnJpdmVkIGZyb20gdGhlIGtlcm5lbCB0aG91Z2gsCisJICogc28gbGV0J3MgZmFrZSBpdCBoZXJlIHdoZXJlIG1vc3Qgc3RhdGUgaXMgcmVzdG9yZWQuCisJICoKKwkgKiBDYWxsIExpbnV4IGZvciBoYXJkd2FyZSBpbnRlcnJ1cHRzL2RlY3JlbWVudGVyCisJICogcjMgPSBhZGRyZXNzIG9mIGludGVycnVwdCBoYW5kbGVyIChleGl0IHJlYXNvbikKKwkgKi8KKworCWNtcHdpCXIzLCBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMCisJYmVxCWNhbGxfbGludXhfaGFuZGxlcgorCWNtcHdpCXIzLCBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSCisJYmVxCWNhbGxfbGludXhfaGFuZGxlcgorCisJLyogQmFjayB0byBJbnRlcnJ1cHRhYmxlIE1vZGUhIChnb3RvIGt2bV9yZXR1cm5fcG9pbnQpICovCisJUkZJCisKK2NhbGxfbGludXhfaGFuZGxlcjoKKworCS8qCisJICogSWYgd2UgbGFuZCBoZXJlIHdlIG5lZWQgdG8ganVtcCBiYWNrIHRvIHRoZSBoYW5kbGVyIHdlCisJICogY2FtZSBmcm9tLgorCSAqCisJICogV2UgaGF2ZSBhIHBhZ2UgdGhhdCB3ZSBjYW4gYWNjZXNzIGZyb20gcmVhbCBtb2RlLCBzbyBsZXQncworCSAqIGp1bXAgYmFjayB0byB0aGF0IGFuZCB1c2UgaXQgYXMgYSB0cmFtcG9saW5lIHRvIGdldCBiYWNrIGludG8gdGhlCisJICogaW50ZXJydXB0IGhhbmRsZXIhCisJICoKKwkgKiBSMyBzdGlsbCBjb250YWlucyB0aGUgZXhpdCBjb2RlLAorCSAqIFI2IFZDUFVfSE9TVF9SRVRJUCBhbmQKKwkgKiBSNyBWQ1BVX0hPU1RfTVNSCisJICovCisKKwltdGxyCXIzCisKKwlsZAlyNSwgVkNQVV9UUkFNUE9MSU5FX0xPV01FTShyMTIpCisJbXRzcnIwCXI1CisJTE9BRF9SRUdfSU1NRURJQVRFKHI1LCBNU1JfS0VSTkVMICYgfihNU1JfSVIgfCBNU1JfRFIpKQorCW10c3JyMQlyNQorCisJUkZJCisKKy5nbG9iYWwga3ZtX3JldHVybl9wb2ludAora3ZtX3JldHVybl9wb2ludDoKKworCS8qIEp1bXAgYmFjayB0byBsaWdodHdlaWdodCBlbnRyeSBpZiB3ZSdyZSBzdXBwb3NlZCB0byAqLworCS8qIGdvIGJhY2sgaW50byB0aGUgZ3Vlc3QgKi8KKwltcglyNSwgcjMKKwkvKiBSZXN0b3JlIHIzIChrdm1fcnVuKSBhbmQgcjQgKHZjcHUpICovCisJUkVTVF8yR1BSUygzLCByMSkKKwlibAlLVk1QUENfSEFORExFX0VYSVQKKworI2lmIDAgLyogWFhYIGdldCBsaWdodHdlaWdodCBleGl0cyBiYWNrICovCisJY21wd2kJcjMsIFJFU1VNRV9HVUVTVAorCWJuZQlrdm1fZXhpdF9oZWF2eXdlaWdodAorCisJLyogcHV0IFZDUFUgYW5kIEtWTV9SVU4gYmFjayBpbnRvIHBsYWNlIGFuZCByb2xsIGFnYWluISAqLworCVJFU1RfMkdQUlMoMywgcjEpCisJYglrdm1fc3RhcnRfbGlnaHR3ZWlnaHQKKwora3ZtX2V4aXRfaGVhdnl3ZWlnaHQ6CisJLyogUmVzdG9yZSBub24tdm9sYXRpbGUgaG9zdCByZWdpc3RlcnMgKi8KKwlsZAlyMTQsIF9MSU5LKHIxKQorCW10bHIJcjE0CisJUkVTVF9OVkdQUlMocjEpCisKKwlhZGRpICAgIHIxLCByMSwgU1dJVENIX0ZSQU1FX1NJWkUKKyNlbHNlCisJbGQJcjQsIF9MSU5LKHIxKQorCW10bHIJcjQKKworCWNtcHdpCXIzLCBSRVNVTUVfR1VFU1QKKwlibmUJa3ZtX2V4aXRfaGVhdnl3ZWlnaHQKKworCVJFU1RfMkdQUlMoMywgcjEpCisKKwlhZGRpICAgIHIxLCByMSwgU1dJVENIX0ZSQU1FX1NJWkUKKworCWIJa3ZtX3N0YXJ0X2VudHJ5CisKK2t2bV9leGl0X2hlYXZ5d2VpZ2h0OgorCisJYWRkaSAgICByMSwgcjEsIFNXSVRDSF9GUkFNRV9TSVpFCisjZW5kaWYKKworCWJscgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk4Zjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11LmMKQEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgU1VTRSBMaW51eCBQcm9kdWN0cyBHbWJIIDIwMDkKKyAqCisgKiBBdXRob3JzOiBBbGV4YW5kZXIgR3JhZiA8YWdyYWZAc3VzZS5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm0uaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9ib29rM3MuaD4KKworLyogI2RlZmluZSBERUJVR19NTVUgKi8KKworI2lmZGVmIERFQlVHX01NVQorI2RlZmluZSBkcHJpbnRrKFguLi4pIHByaW50ayhLRVJOX0lORk8gWCkKKyNlbHNlCisjZGVmaW5lIGRwcmludGsoWC4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQga3ZtcHBjX21tdV9ib29rM3NfNjRfcmVzZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfc2V0X21zcih2Y3B1LCBNU1JfU0YpOworfQorCitzdGF0aWMgc3RydWN0IGt2bXBwY19zbGIgKmt2bXBwY19tbXVfYm9vazNzXzY0X2ZpbmRfc2xiZSgKKwkJCQlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp2Y3B1X2Jvb2szcywKKwkJCQlndmFfdCBlYWRkcikKK3sKKwlpbnQgaTsKKwl1NjQgZXNpZCA9IEdFVF9FU0lEKGVhZGRyKTsKKwl1NjQgZXNpZF8xdCA9IEdFVF9FU0lEXzFUKGVhZGRyKTsKKworCWZvciAoaSA9IDA7IGkgPCB2Y3B1X2Jvb2szcy0+c2xiX25yOyBpKyspIHsKKwkJdTY0IGNtcF9lc2lkID0gZXNpZDsKKworCQlpZiAoIXZjcHVfYm9vazNzLT5zbGJbaV0udmFsaWQpCisJCQljb250aW51ZTsKKworCQlpZiAodmNwdV9ib29rM3MtPnNsYltpXS5sYXJnZSkKKwkJCWNtcF9lc2lkID0gZXNpZF8xdDsKKworCQlpZiAodmNwdV9ib29rM3MtPnNsYltpXS5lc2lkID09IGNtcF9lc2lkKQorCQkJcmV0dXJuICZ2Y3B1X2Jvb2szcy0+c2xiW2ldOworCX0KKworCWRwcmludGsoIktWTTogTm8gU0xCIGVudHJ5IGZvdW5kIGZvciAweCVseCBbJWxseCB8ICVsbHhdXG4iLAorCQllYWRkciwgZXNpZCwgZXNpZF8xdCk7CisJZm9yIChpID0gMDsgaSA8IHZjcHVfYm9vazNzLT5zbGJfbnI7IGkrKykgeworCSAgICBpZiAodmNwdV9ib29rM3MtPnNsYltpXS52c2lkKQorCQlkcHJpbnRrKCIgICVkOiAlYyVjICVsbHggJWxseFxuIiwgaSwKKwkJCXZjcHVfYm9vazNzLT5zbGJbaV0udmFsaWQgPyAndicgOiAnICcsCisJCQl2Y3B1X2Jvb2szcy0+c2xiW2ldLmxhcmdlID8gJ2wnIDogJyAnLAorCQkJdmNwdV9ib29rM3MtPnNsYltpXS5lc2lkLAorCQkJdmNwdV9ib29rM3MtPnNsYltpXS52c2lkKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHU2NCBrdm1wcGNfbW11X2Jvb2szc182NF9lYV90b192cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyLAorCQkJCQkgYm9vbCBkYXRhKQoreworCXN0cnVjdCBrdm1wcGNfc2xiICpzbGI7CisKKwlzbGIgPSBrdm1wcGNfbW11X2Jvb2szc182NF9maW5kX3NsYmUodG9fYm9vazNzKHZjcHUpLCBlYWRkcik7CisJaWYgKCFzbGIpCisJCXJldHVybiAwOworCisJaWYgKHNsYi0+bGFyZ2UpCisJCXJldHVybiAoKCh1NjQpZWFkZHIgPj4gMTIpICYgMHhmZmZmZmZmKSB8CisJCSAgICAgICAoKCh1NjQpc2xiLT52c2lkKSA8PCAyOCk7CisKKwlyZXR1cm4gKCgodTY0KWVhZGRyID4+IDEyKSAmIDB4ZmZmZikgfCAoKCh1NjQpc2xiLT52c2lkKSA8PCAxNik7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX21tdV9ib29rM3NfNjRfZ2V0X3BhZ2VzaXplKHN0cnVjdCBrdm1wcGNfc2xiICpzbGJlKQoreworCXJldHVybiBzbGJlLT5sYXJnZSA/IDI0IDogMTI7Cit9CisKK3N0YXRpYyB1MzIga3ZtcHBjX21tdV9ib29rM3NfNjRfZ2V0X3BhZ2Uoc3RydWN0IGt2bXBwY19zbGIgKnNsYmUsIGd2YV90IGVhZGRyKQoreworCWludCBwID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfZ2V0X3BhZ2VzaXplKHNsYmUpOworCXJldHVybiAoKGVhZGRyICYgMHhmZmZmZmZmKSA+PiBwKTsKK30KKworc3RhdGljIGh2YV90IGt2bXBwY19tbXVfYm9vazNzXzY0X2dldF9wdGVnKAorCQkJCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzLAorCQkJCXN0cnVjdCBrdm1wcGNfc2xiICpzbGJlLCBndmFfdCBlYWRkciwKKwkJCQlib29sIHNlY29uZCkKK3sKKwl1NjQgaGFzaCwgcHRlZywgaHRhYnNpemU7CisJdTMyIHBhZ2U7CisJaHZhX3QgcjsKKworCXBhZ2UgPSBrdm1wcGNfbW11X2Jvb2szc182NF9nZXRfcGFnZShzbGJlLCBlYWRkcik7CisJaHRhYnNpemUgPSAoKDEgPDwgKCh2Y3B1X2Jvb2szcy0+c2RyMSAmIDB4MWYpICsgMTEpKSAtIDEpOworCisJaGFzaCA9IHNsYmUtPnZzaWQgXiBwYWdlOworCWlmIChzZWNvbmQpCisJCWhhc2ggPSB+aGFzaDsKKwloYXNoICY9ICgoMVVMTCA8PCAzOVVMTCkgLSAxVUxMKTsKKwloYXNoICY9IGh0YWJzaXplOworCWhhc2ggPDw9IDdVTEw7CisKKwlwdGVnID0gdmNwdV9ib29rM3MtPnNkcjEgJiAweGZmZmZmZmZmZmZmYzAwMDBVTEw7CisJcHRlZyB8PSBoYXNoOworCisJZHByaW50aygiTU1VOiBwYWdlPTB4JXggc2RyMT0weCVsbHggcHRlZz0weCVsbHggdnNpZD0weCVsbHhcbiIsCisJCXBhZ2UsIHZjcHVfYm9vazNzLT5zZHIxLCBwdGVnLCBzbGJlLT52c2lkKTsKKworCXIgPSBnZm5fdG9faHZhKHZjcHVfYm9vazNzLT52Y3B1Lmt2bSwgcHRlZyA+PiBQQUdFX1NISUZUKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShyKSkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHIgfCAocHRlZyAmIH5QQUdFX01BU0spOworfQorCitzdGF0aWMgdTY0IGt2bXBwY19tbXVfYm9vazNzXzY0X2dldF9hdnBuKHN0cnVjdCBrdm1wcGNfc2xiICpzbGJlLCBndmFfdCBlYWRkcikKK3sKKwlpbnQgcCA9IGt2bXBwY19tbXVfYm9vazNzXzY0X2dldF9wYWdlc2l6ZShzbGJlKTsKKwl1NjQgYXZwbjsKKworCWF2cG4gPSBrdm1wcGNfbW11X2Jvb2szc182NF9nZXRfcGFnZShzbGJlLCBlYWRkcik7CisJYXZwbiB8PSBzbGJlLT52c2lkIDw8ICgyOCAtIHApOworCisJaWYgKHAgPCAyNCkKKwkJYXZwbiA+Pj0gKCg4MCAtIHApIC0gNTYpIC0gODsKKwllbHNlCisJCWF2cG4gPDw9IDg7CisKKwlyZXR1cm4gYXZwbjsKK30KKworc3RhdGljIGludCBrdm1wcGNfbW11X2Jvb2szc182NF94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyLAorCQkJCXN0cnVjdCBrdm1wcGNfcHRlICpncHRlLCBib29sIGRhdGEpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdV9ib29rM3MgPSB0b19ib29rM3ModmNwdSk7CisJc3RydWN0IGt2bXBwY19zbGIgKnNsYmU7CisJaHZhX3QgcHRlZ3A7CisJdTY0IHB0ZWdbMTZdOworCXU2NCBhdnBuID0gMDsKKwlpbnQgaTsKKwl1OCBrZXkgPSAwOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwlib29sIHBlcm1fZXJyID0gZmFsc2U7CisJaW50IHNlY29uZCA9IDA7CisKKwlzbGJlID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfZmluZF9zbGJlKHZjcHVfYm9vazNzLCBlYWRkcik7CisJaWYgKCFzbGJlKQorCQlnb3RvIG5vX3NlZ19mb3VuZDsKKworZG9fc2Vjb25kOgorCXB0ZWdwID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfZ2V0X3B0ZWcodmNwdV9ib29rM3MsIHNsYmUsIGVhZGRyLCBzZWNvbmQpOworCWlmIChrdm1faXNfZXJyb3JfaHZhKHB0ZWdwKSkKKwkJZ290byBub19wYWdlX2ZvdW5kOworCisJYXZwbiA9IGt2bXBwY19tbXVfYm9vazNzXzY0X2dldF9hdnBuKHNsYmUsIGVhZGRyKTsKKworCWlmKGNvcHlfZnJvbV91c2VyKHB0ZWcsICh2b2lkIF9fdXNlciAqKXB0ZWdwLCBzaXplb2YocHRlZykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiS1ZNIGNhbid0IGNvcHkgZGF0YSBmcm9tIDB4JWx4IVxuIiwgcHRlZ3ApOworCQlnb3RvIG5vX3BhZ2VfZm91bmQ7CisJfQorCisJaWYgKCh2Y3B1LT5hcmNoLm1zciAmIE1TUl9QUikgJiYgc2xiZS0+S3ApCisJCWtleSA9IDQ7CisJZWxzZSBpZiAoISh2Y3B1LT5hcmNoLm1zciAmIE1TUl9QUikgJiYgc2xiZS0+S3MpCisJCWtleSA9IDQ7CisKKwlmb3IgKGk9MDsgaTwxNjsgaSs9MikgeworCQl1NjQgdiA9IHB0ZWdbaV07CisJCXU2NCByID0gcHRlZ1tpKzFdOworCisJCS8qIFZhbGlkIGNoZWNrICovCisJCWlmICghKHYgJiBIUFRFX1ZfVkFMSUQpKQorCQkJY29udGludWU7CisJCS8qIEhhc2ggY2hlY2sgKi8KKwkJaWYgKCh2ICYgSFBURV9WX1NFQ09OREFSWSkgIT0gc2Vjb25kKQorCQkJY29udGludWU7CisKKwkJLyogQVZQTiBjb21wYXJlICovCisJCWlmIChIUFRFX1ZfQVZQTl9WQUwoYXZwbikgPT0gSFBURV9WX0FWUE5fVkFMKHYpKSB7CisJCQl1OCBwcCA9IChyICYgSFBURV9SX1BQKSB8IGtleTsKKwkJCWludCBlYWRkcl9tYXNrID0gMHhGRkY7CisKKwkJCWdwdGUtPmVhZGRyID0gZWFkZHI7CisJCQlncHRlLT52cGFnZSA9IGt2bXBwY19tbXVfYm9vazNzXzY0X2VhX3RvX3ZwKHZjcHUsCisJCQkJCQkJCSAgICBlYWRkciwKKwkJCQkJCQkJICAgIGRhdGEpOworCQkJaWYgKHNsYmUtPmxhcmdlKQorCQkJCWVhZGRyX21hc2sgPSAweEZGRkZGRjsKKwkJCWdwdGUtPnJhZGRyID0gKHIgJiBIUFRFX1JfUlBOKSB8IChlYWRkciAmIGVhZGRyX21hc2spOworCQkJZ3B0ZS0+bWF5X2V4ZWN1dGUgPSAoKHIgJiBIUFRFX1JfTikgPyBmYWxzZSA6IHRydWUpOworCQkJZ3B0ZS0+bWF5X3JlYWQgPSBmYWxzZTsKKwkJCWdwdGUtPm1heV93cml0ZSA9IGZhbHNlOworCisJCQlzd2l0Y2ggKHBwKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDE6CisJCQljYXNlIDI6CisJCQljYXNlIDY6CisJCQkJZ3B0ZS0+bWF5X3dyaXRlID0gdHJ1ZTsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWNhc2UgMzoKKwkJCWNhc2UgNToKKwkJCWNhc2UgNzoKKwkJCQlncHRlLT5tYXlfcmVhZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICghZ3B0ZS0+bWF5X3JlYWQpIHsKKwkJCQlwZXJtX2VyciA9IHRydWU7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWRwcmludGsoIktWTSBNTVU6IFRyYW5zbGF0ZWQgMHglbHggWzB4JWxseF0gLT4gMHglbGx4ICIKKwkJCQkiLT4gMHglbGx4XG4iLAorCQkJCWVhZGRyLCBhdnBuLCBncHRlLT52cGFnZSwgZ3B0ZS0+cmFkZHIpOworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgUFRFIFIgYW5kIEMgYml0cywgc28gdGhlIGd1ZXN0J3Mgc3dhcHBlciBrbm93cyB3ZSB1c2VkIHRoZQorCSAqIHBhZ2UgKi8KKwlpZiAoZm91bmQpIHsKKwkJdTMyIG9sZHIgPSBwdGVnW2krMV07CisKKwkJaWYgKGdwdGUtPm1heV9yZWFkKSB7CisJCQkvKiBTZXQgdGhlIGFjY2Vzc2VkIGZsYWcgKi8KKwkJCXB0ZWdbaSsxXSB8PSBIUFRFX1JfUjsKKwkJfQorCQlpZiAoZ3B0ZS0+bWF5X3dyaXRlKSB7CisJCQkvKiBTZXQgdGhlIGRpcnR5IGZsYWcgKi8KKwkJCXB0ZWdbaSsxXSB8PSBIUFRFX1JfQzsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoIktWTTogTWFwcGluZyByZWFkLW9ubHkgcGFnZSFcbiIpOworCQl9CisKKwkJLyogV3JpdGUgYmFjayBpbnRvIHRoZSBQVEVHICovCisJCWlmIChwdGVnW2krMV0gIT0gb2xkcikKKwkJCWNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilwdGVncCwgcHRlZywgc2l6ZW9mKHB0ZWcpKTsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlkcHJpbnRrKCJLVk0gTU1VOiBObyBQVEUgZm91bmQgKGVhPTB4JWx4IHNkcjE9MHglbGx4ICIKKwkJCSJwdGVncD0weCVseClcbiIsCisJCQllYWRkciwgdG9fYm9vazNzKHZjcHUpLT5zZHIxLCBwdGVncCk7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAyKQorCQkJZHByaW50aygiICAgJTAyZDogMHglbGx4IC0gMHglbGx4ICgweCVsbHgpXG4iLAorCQkJCWksIHB0ZWdbaV0sIHB0ZWdbaSsxXSwgYXZwbik7CisKKwkJaWYgKCFzZWNvbmQpIHsKKwkJCXNlY29uZCA9IEhQVEVfVl9TRUNPTkRBUlk7CisJCQlnb3RvIGRvX3NlY29uZDsKKwkJfQorCX0KKworCitub19wYWdlX2ZvdW5kOgorCisKKwlpZiAocGVybV9lcnIpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gLUVOT0VOVDsKKworbm9fc2VnX2ZvdW5kOgorCisJZHByaW50aygiS1ZNIE1NVTogVHJpZ2dlciBzZWdtZW50IGZhdWx0XG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX21tdV9ib29rM3NfNjRfc2xibXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJzLCB1NjQgcmIpCit7CisJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdV9ib29rM3M7CisJdTY0IGVzaWQsIGVzaWRfMXQ7CisJaW50IHNsYl9ucjsKKwlzdHJ1Y3Qga3ZtcHBjX3NsYiAqc2xiZTsKKworCWRwcmludGsoIktWTSBNTVU6IHNsYm10ZSgweCVsbHgsIDB4JWxseClcbiIsIHJzLCByYik7CisKKwl2Y3B1X2Jvb2szcyA9IHRvX2Jvb2szcyh2Y3B1KTsKKworCWVzaWQgPSBHRVRfRVNJRChyYik7CisJZXNpZF8xdCA9IEdFVF9FU0lEXzFUKHJiKTsKKwlzbGJfbnIgPSByYiAmIDB4ZmZmOworCisJaWYgKHNsYl9uciA+IHZjcHVfYm9vazNzLT5zbGJfbnIpCisJCXJldHVybjsKKworCXNsYmUgPSAmdmNwdV9ib29rM3MtPnNsYltzbGJfbnJdOworCisJc2xiZS0+bGFyZ2UgPSAocnMgJiBTTEJfVlNJRF9MKSA/IDEgOiAwOworCXNsYmUtPmVzaWQgID0gc2xiZS0+bGFyZ2UgPyBlc2lkXzF0IDogZXNpZDsKKwlzbGJlLT52c2lkICA9IHJzID4+IDEyOworCXNsYmUtPnZhbGlkID0gKHJiICYgU0xCX0VTSURfVikgPyAxIDogMDsKKwlzbGJlLT5LcyAgICA9IChycyAmIFNMQl9WU0lEX0tTKSA/IDEgOiAwOworCXNsYmUtPktwICAgID0gKHJzICYgU0xCX1ZTSURfS1ApID8gMSA6IDA7CisJc2xiZS0+bnggICAgPSAocnMgJiBTTEJfVlNJRF9OKSA/IDEgOiAwOworCXNsYmUtPmNsYXNzID0gKHJzICYgU0xCX1ZTSURfQykgPyAxIDogMDsKKworCXNsYmUtPm9yaWdlID0gcmIgJiAoRVNJRF9NQVNLIHwgU0xCX0VTSURfVik7CisJc2xiZS0+b3JpZ3YgPSByczsKKworCS8qIE1hcCB0aGUgbmV3IHNlZ21lbnQgKi8KKwlrdm1wcGNfbW11X21hcF9zZWdtZW50KHZjcHUsIGVzaWQgPDwgU0lEX1NISUZUKTsKK30KKworc3RhdGljIHU2NCBrdm1wcGNfbW11X2Jvb2szc182NF9zbGJtZmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNsYl9ucikKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp2Y3B1X2Jvb2szcyA9IHRvX2Jvb2szcyh2Y3B1KTsKKwlzdHJ1Y3Qga3ZtcHBjX3NsYiAqc2xiZTsKKworCWlmIChzbGJfbnIgPiB2Y3B1X2Jvb2szcy0+c2xiX25yKQorCQlyZXR1cm4gMDsKKworCXNsYmUgPSAmdmNwdV9ib29rM3MtPnNsYltzbGJfbnJdOworCisJcmV0dXJuIHNsYmUtPm9yaWdlOworfQorCitzdGF0aWMgdTY0IGt2bXBwY19tbXVfYm9vazNzXzY0X3NsYm1mZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc2xiX25yKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzID0gdG9fYm9vazNzKHZjcHUpOworCXN0cnVjdCBrdm1wcGNfc2xiICpzbGJlOworCisJaWYgKHNsYl9uciA+IHZjcHVfYm9vazNzLT5zbGJfbnIpCisJCXJldHVybiAwOworCisJc2xiZSA9ICZ2Y3B1X2Jvb2szcy0+c2xiW3NsYl9ucl07CisKKwlyZXR1cm4gc2xiZS0+b3JpZ3Y7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfYm9vazNzXzY0X3NsYmllKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVhKQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzID0gdG9fYm9vazNzKHZjcHUpOworCXN0cnVjdCBrdm1wcGNfc2xiICpzbGJlOworCisJZHByaW50aygiS1ZNIE1NVTogc2xiaWUoMHglbGx4KVxuIiwgZWEpOworCisJc2xiZSA9IGt2bXBwY19tbXVfYm9vazNzXzY0X2ZpbmRfc2xiZSh2Y3B1X2Jvb2szcywgZWEpOworCisJaWYgKCFzbGJlKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCJLVk0gTU1VOiBzbGJpZSgweCVsbHgsIDB4JWxseClcbiIsIGVhLCBzbGJlLT5lc2lkKTsKKworCXNsYmUtPnZhbGlkID0gZmFsc2U7CisKKwlrdm1wcGNfbW11X21hcF9zZWdtZW50KHZjcHUsIGVhKTsKK30KKworc3RhdGljIHZvaWQga3ZtcHBjX21tdV9ib29rM3NfNjRfc2xiaWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfdmNwdV9ib29rM3MgKnZjcHVfYm9vazNzID0gdG9fYm9vazNzKHZjcHUpOworCWludCBpOworCisJZHByaW50aygiS1ZNIE1NVTogc2xiaWEoKVxuIik7CisKKwlmb3IgKGkgPSAxOyBpIDwgdmNwdV9ib29rM3MtPnNsYl9ucjsgaSsrKQorCQl2Y3B1X2Jvb2szcy0+c2xiW2ldLnZhbGlkID0gZmFsc2U7CisKKwlpZiAodmNwdS0+YXJjaC5tc3IgJiBNU1JfSVIpIHsKKwkJa3ZtcHBjX21tdV9mbHVzaF9zZWdtZW50cyh2Y3B1KTsKKwkJa3ZtcHBjX21tdV9tYXBfc2VnbWVudCh2Y3B1LCB2Y3B1LT5hcmNoLnBjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfYm9vazNzXzY0X210c3JpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzcm51bSwKKwkJCQkJdWxvbmcgdmFsdWUpCit7CisJdTY0IHJiID0gMCwgcnMgPSAwOworCisJLyogRVNJRCA9IHNybnVtICovCisJcmIgfD0gKHNybnVtICYgMHhmKSA8PCAyODsKKwkvKiBTZXQgdGhlIHZhbGlkIGJpdCAqLworCXJiIHw9IDEgPDwgMjc7CisJLyogSW5kZXggPSBFU0lEICovCisJcmIgfD0gc3JudW07CisKKwkvKiBWU0lEID0gVlNJRCAqLworCXJzIHw9ICh2YWx1ZSAmIDB4ZmZmZmZmZikgPDwgMTI7CisJLyogZmxhZ3MgPSBmbGFncyAqLworCXJzIHw9ICgodmFsdWUgPj4gMjcpICYgMHhmKSA8PCA5OworCisJa3ZtcHBjX21tdV9ib29rM3NfNjRfc2xibXRlKHZjcHUsIHJzLCByYik7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19tbXVfYm9vazNzXzY0X3RsYmllKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgdmEsCisJCQkJICAgICAgIGJvb2wgbGFyZ2UpCit7CisJdTY0IG1hc2sgPSAweEZGRkZGRkZGRlVMTDsKKworCWRwcmludGsoIktWTSBNTVU6IHRsYmllKDB4JWx4KVxuIiwgdmEpOworCisJaWYgKGxhcmdlKQorCQltYXNrID0gMHhGRkZGRkYwMDBVTEw7CisJa3ZtcHBjX21tdV9wdGVfdmZsdXNoKHZjcHUsIHZhID4+IDEyLCBtYXNrKTsKK30KKworc3RhdGljIGludCBrdm1wcGNfbW11X2Jvb2szc182NF9lc2lkX3RvX3ZzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXNpZCwKKwkJCQkJICAgICB1NjQgKnZzaWQpCit7CisJc3dpdGNoICh2Y3B1LT5hcmNoLm1zciAmIChNU1JfRFJ8TVNSX0lSKSkgeworCWNhc2UgMDoKKwkJKnZzaWQgPSAoVlNJRF9SRUFMID4+IDE2KSB8IGVzaWQ7CisJCWJyZWFrOworCWNhc2UgTVNSX0lSOgorCQkqdnNpZCA9IChWU0lEX1JFQUxfSVIgPj4gMTYpIHwgZXNpZDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfRFI6CisJCSp2c2lkID0gKFZTSURfUkVBTF9EUiA+PiAxNikgfCBlc2lkOworCQlicmVhazsKKwljYXNlIE1TUl9EUnxNU1JfSVI6CisJeworCQl1bG9uZyBlYTsKKwkJc3RydWN0IGt2bXBwY19zbGIgKnNsYjsKKwkJZWEgPSBlc2lkIDw8IFNJRF9TSElGVDsKKwkJc2xiID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfZmluZF9zbGJlKHRvX2Jvb2szcyh2Y3B1KSwgZWEpOworCQlpZiAoc2xiKQorCQkJKnZzaWQgPSBzbGItPnZzaWQ7CisJCWVsc2UKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGt2bXBwY19tbXVfYm9vazNzXzY0X2lzX2RjYnozMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuICh0b19ib29rM3ModmNwdSktPmhpZFs1XSAmIDB4ODApOworfQorCit2b2lkIGt2bXBwY19tbXVfYm9vazNzXzY0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1wcGNfbW11ICptbXUgPSAmdmNwdS0+YXJjaC5tbXU7CisKKwltbXUtPm1mc3JpbiA9IE5VTEw7CisJbW11LT5tdHNyaW4gPSBrdm1wcGNfbW11X2Jvb2szc182NF9tdHNyaW47CisJbW11LT5zbGJtdGUgPSBrdm1wcGNfbW11X2Jvb2szc182NF9zbGJtdGU7CisJbW11LT5zbGJtZmVlID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfc2xibWZlZTsKKwltbXUtPnNsYm1mZXYgPSBrdm1wcGNfbW11X2Jvb2szc182NF9zbGJtZmV2OworCW1tdS0+c2xiaWUgPSBrdm1wcGNfbW11X2Jvb2szc182NF9zbGJpZTsKKwltbXUtPnNsYmlhID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfc2xiaWE7CisJbW11LT54bGF0ZSA9IGt2bXBwY19tbXVfYm9vazNzXzY0X3hsYXRlOworCW1tdS0+cmVzZXRfbXNyID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfcmVzZXRfbXNyOworCW1tdS0+dGxiaWUgPSBrdm1wcGNfbW11X2Jvb2szc182NF90bGJpZTsKKwltbXUtPmVzaWRfdG9fdnNpZCA9IGt2bXBwY19tbXVfYm9vazNzXzY0X2VzaWRfdG9fdnNpZDsKKwltbXUtPmVhX3RvX3ZwID0ga3ZtcHBjX21tdV9ib29rM3NfNjRfZWFfdG9fdnA7CisJbW11LT5pc19kY2J6MzIgPSBrdm1wcGNfbW11X2Jvb2szc182NF9pc19kY2J6MzI7CisKKwl2Y3B1LT5hcmNoLmhmbGFncyB8PSBCT09LM1NfSEZMQUdfU0xCOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X2hvc3QuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9ob3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4OTliMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9ob3N0LmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1VTRSBMaW51eCBQcm9kdWN0cyBHbWJILiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQWxleGFuZGVyIEdyYWYgPGFncmFmQHN1c2UuZGU+CisgKiAgICAgS2V2aW4gV29sZiA8bWFpbEBrZXZpbi13b2xmLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2Jvb2szcy5oPgorI2luY2x1ZGUgPGFzbS9tbXUtaGFzaDY0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisKKyNkZWZpbmUgUFRFX1NJWkUgMTIKKyNkZWZpbmUgVlNJRF9BTEwgMAorCisvKiAjZGVmaW5lIERFQlVHX01NVSAqLworLyogI2RlZmluZSBERUJVR19TTEIgKi8KKworI2lmZGVmIERFQlVHX01NVQorI2RlZmluZSBkcHJpbnRrX21tdShhLCAuLi4pIHByaW50ayhLRVJOX0lORk8gYSwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBkcHJpbnRrX21tdShhLCAuLi4pIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZmRlZiBERUJVR19TTEIKKyNkZWZpbmUgZHByaW50a19zbGIoYSwgLi4uKSBwcmludGsoS0VSTl9JTkZPIGEsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgZHByaW50a19zbGIoYSwgLi4uKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3B0ZShzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlKQoreworCWRwcmludGtfbW11KCJLVk06IEZsdXNoaW5nIFNQVCAlZDogMHglbGx4ICgweCVsbHgpIC0+IDB4JWxseFxuIiwKKwkJICAgIGksIHB0ZS0+cHRlLmVhZGRyLCBwdGUtPnB0ZS52cGFnZSwgcHRlLT5ob3N0X3ZhKTsKKworCXBwY19tZC5ocHRlX2ludmFsaWRhdGUocHRlLT5zbG90LCBwdGUtPmhvc3RfdmEsCisJCQkgICAgICAgTU1VX1BBR0VfNEssIE1NVV9TRUdTSVpFXzI1Nk0sCisJCQkgICAgICAgZmFsc2UpOworCXB0ZS0+aG9zdF92YSA9IDA7CisJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHB0ZS0+cGZuKTsKK30KKwordm9pZCBrdm1wcGNfbW11X3B0ZV9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF9lYSwgdTY0IGVhX21hc2spCit7CisJaW50IGk7CisKKwlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyAlZCBTaGFkb3cgUFRFczogMHglbGx4ICYgMHglbGx4XG4iLAorCQkgICAgdmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCwgZ3Vlc3RfZWEsIGVhX21hc2spOworCUJVR19PTih2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0ID4gSFBURUdfQ0FDSEVfTlVNKTsKKworCWd1ZXN0X2VhICY9IGVhX21hc2s7CisJZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQ7IGkrKykgeworCQlzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlOworCisJCXB0ZSA9ICZ2Y3B1LT5hcmNoLmhwdGVfY2FjaGVbaV07CisJCWlmICghcHRlLT5ob3N0X3ZhKQorCQkJY29udGludWU7CisKKwkJaWYgKChwdGUtPnB0ZS5lYWRkciAmIGVhX21hc2spID09IGd1ZXN0X2VhKSB7CisJCQlpbnZhbGlkYXRlX3B0ZShwdGUpOworCQl9CisJfQorCisJLyogRG9pbmcgYSBjb21wbGV0ZSBmbHVzaCAtPiBzdGFydCBmcm9tIHNjcmF0Y2ggKi8KKwlpZiAoIWVhX21hc2spCisJCXZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQgPSAwOworfQorCit2b2lkIGt2bXBwY19tbXVfcHRlX3ZmbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF92cCwgdTY0IHZwX21hc2spCit7CisJaW50IGk7CisKKwlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyAlZCBTaGFkb3cgdlBURXM6IDB4JWxseCAmIDB4JWxseFxuIiwKKwkJICAgIHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQsIGd1ZXN0X3ZwLCB2cF9tYXNrKTsKKwlCVUdfT04odmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCA+IEhQVEVHX0NBQ0hFX05VTSk7CisKKwlndWVzdF92cCAmPSB2cF9tYXNrOworCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmhwdGVfY2FjaGVfb2Zmc2V0OyBpKyspIHsKKwkJc3RydWN0IGhwdGVfY2FjaGUgKnB0ZTsKKworCQlwdGUgPSAmdmNwdS0+YXJjaC5ocHRlX2NhY2hlW2ldOworCQlpZiAoIXB0ZS0+aG9zdF92YSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgocHRlLT5wdGUudnBhZ2UgJiB2cF9tYXNrKSA9PSBndWVzdF92cCkgeworCQkJaW52YWxpZGF0ZV9wdGUocHRlKTsKKwkJfQorCX0KK30KKwordm9pZCBrdm1wcGNfbW11X3B0ZV9wZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFfc3RhcnQsIHU2NCBwYV9lbmQpCit7CisJaW50IGk7CisKKwlkcHJpbnRrX21tdSgiS1ZNOiBGbHVzaGluZyAlZCBTaGFkb3cgcFBURXM6IDB4JWxseCAmIDB4JWxseFxuIiwKKwkJICAgIHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQsIGd1ZXN0X3BhLCBwYV9tYXNrKTsKKwlCVUdfT04odmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCA+IEhQVEVHX0NBQ0hFX05VTSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldDsgaSsrKSB7CisJCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7CisKKwkJcHRlID0gJnZjcHUtPmFyY2guaHB0ZV9jYWNoZVtpXTsKKwkJaWYgKCFwdGUtPmhvc3RfdmEpCisJCQljb250aW51ZTsKKworCQlpZiAoKHB0ZS0+cHRlLnJhZGRyID49IHBhX3N0YXJ0KSAmJgorCQkgICAgKHB0ZS0+cHRlLnJhZGRyIDwgcGFfZW5kKSkgeworCQkJaW52YWxpZGF0ZV9wdGUocHRlKTsKKwkJfQorCX0KK30KKworc3RydWN0IGt2bXBwY19wdGUgKmt2bXBwY19tbXVfZmluZF9wdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWEsIGJvb2wgZGF0YSkKK3sKKwlpbnQgaTsKKwl1NjQgZ3Vlc3RfdnA7CisKKwlndWVzdF92cCA9IHZjcHUtPmFyY2gubW11LmVhX3RvX3ZwKHZjcHUsIGVhLCBmYWxzZSk7CisJZm9yIChpPTA7IGk8dmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldDsgaSsrKSB7CisJCXN0cnVjdCBocHRlX2NhY2hlICpwdGU7CisKKwkJcHRlID0gJnZjcHUtPmFyY2guaHB0ZV9jYWNoZVtpXTsKKwkJaWYgKCFwdGUtPmhvc3RfdmEpCisJCQljb250aW51ZTsKKworCQlpZiAocHRlLT5wdGUudnBhZ2UgPT0gZ3Vlc3RfdnApCisJCQlyZXR1cm4gJnB0ZS0+cHRlOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGt2bXBwY19tbXVfaHB0ZV9jYWNoZV9uZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpZiAodmNwdS0+YXJjaC5ocHRlX2NhY2hlX29mZnNldCA9PSBIUFRFR19DQUNIRV9OVU0pCisJCWt2bXBwY19tbXVfcHRlX2ZsdXNoKHZjcHUsIDAsIDApOworCisJcmV0dXJuIHZjcHUtPmFyY2guaHB0ZV9jYWNoZV9vZmZzZXQrKzsKK30KKworLyogV2Uga2VlcCA1MTIgZ3ZzaWQtPmh2c2lkIGVudHJpZXMsIG1hcHBpbmcgdGhlIGd1ZXN0IG9uZXMgdG8gdGhlIGFycmF5IHVzaW5nCisgKiBhIGhhc2gsIHNvIHdlIGRvbid0IHdhc3RlIGN5Y2xlcyBvbiBsb29waW5nICovCitzdGF0aWMgdTE2IGt2bXBwY19zaWRfaGFzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndnNpZCkKK3sKKwlyZXR1cm4gKHUxNikoKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogNykpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogNikpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogNSkpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogNCkpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogMykpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogMikpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogMSkpICYgU0lEX01BUF9NQVNLKSBeCisJCSAgICAgKChndnNpZCA+PiAoU0lEX01BUF9CSVRTICogMCkpICYgU0lEX01BUF9NQVNLKSk7Cit9CisKKworc3RhdGljIHN0cnVjdCBrdm1wcGNfc2lkX21hcCAqZmluZF9zaWRfdnNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndnNpZCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3NpZF9tYXAgKm1hcDsKKwl1MTYgc2lkX21hcF9tYXNrOworCisJaWYgKHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKQorCQlndnNpZCB8PSBWU0lEX1BSOworCisJc2lkX21hcF9tYXNrID0ga3ZtcHBjX3NpZF9oYXNoKHZjcHUsIGd2c2lkKTsKKwltYXAgPSAmdG9fYm9vazNzKHZjcHUpLT5zaWRfbWFwW3NpZF9tYXBfbWFza107CisJaWYgKG1hcC0+Z3Vlc3RfdnNpZCA9PSBndnNpZCkgeworCQlkcHJpbnRrX3NsYigiU0xCOiBTZWFyY2hpbmcgMHglbGx4IC0+IDB4JWxseFxuIiwKKwkJCSAgICBndnNpZCwgbWFwLT5ob3N0X3ZzaWQpOworCQlyZXR1cm4gbWFwOworCX0KKworCW1hcCA9ICZ0b19ib29rM3ModmNwdSktPnNpZF9tYXBbU0lEX01BUF9NQVNLIC0gc2lkX21hcF9tYXNrXTsKKwlpZiAobWFwLT5ndWVzdF92c2lkID09IGd2c2lkKSB7CisJCWRwcmludGtfc2xiKCJTTEI6IFNlYXJjaGluZyAweCVsbHggLT4gMHglbGx4XG4iLAorCQkJICAgIGd2c2lkLCBtYXAtPmhvc3RfdnNpZCk7CisJCXJldHVybiBtYXA7CisJfQorCisJZHByaW50a19zbGIoIlNMQjogU2VhcmNoaW5nIDB4JWxseCAtPiBub3QgZm91bmRcbiIsIGd2c2lkKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGt2bXBwY19tbXVfbWFwX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqb3JpZ19wdGUpCit7CisJcGZuX3QgaHBhZGRyOworCXVsb25nIGhhc2gsIGhwdGVnLCB2YTsKKwl1NjQgdnNpZDsKKwlpbnQgcmV0OworCWludCByZmxhZ3MgPSAweDE5MjsKKwlpbnQgdmZsYWdzID0gMDsKKwlpbnQgYXR0ZW1wdCA9IDA7CisJc3RydWN0IGt2bXBwY19zaWRfbWFwICptYXA7CisKKwkvKiBHZXQgaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZvciBncGEgKi8KKwlocGFkZHIgPSBnZm5fdG9fcGZuKHZjcHUtPmt2bSwgb3JpZ19wdGUtPnJhZGRyID4+IFBBR0VfU0hJRlQpOworCWlmIChrdm1faXNfZXJyb3JfaHZhKGhwYWRkcikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbGx4IVxuIiwgb3JpZ19wdGUtPmVhZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWhwYWRkciA8PD0gUEFHRV9TSElGVDsKKyNpZiBQQUdFX1NISUZUID09IDEyCisjZWxpZiBQQUdFX1NISUZUID09IDE2CisJaHBhZGRyIHw9IG9yaWdfcHRlLT5yYWRkciAmIDB4ZjAwMDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBwYWdlIHNpemUKKyNlbmRpZgorCisJLyogYW5kIHdyaXRlIHRoZSBtYXBwaW5nIGVhIC0+IGhwYSBpbnRvIHRoZSBwdCAqLworCXZjcHUtPmFyY2gubW11LmVzaWRfdG9fdnNpZCh2Y3B1LCBvcmlnX3B0ZS0+ZWFkZHIgPj4gU0lEX1NISUZULCAmdnNpZCk7CisJbWFwID0gZmluZF9zaWRfdnNpZCh2Y3B1LCB2c2lkKTsKKwlpZiAoIW1hcCkgeworCQlrdm1wcGNfbW11X21hcF9zZWdtZW50KHZjcHUsIG9yaWdfcHRlLT5lYWRkcik7CisJCW1hcCA9IGZpbmRfc2lkX3ZzaWQodmNwdSwgdnNpZCk7CisJfQorCUJVR19PTighbWFwKTsKKworCXZzaWQgPSBtYXAtPmhvc3RfdnNpZDsKKwl2YSA9IGhwdF92YShvcmlnX3B0ZS0+ZWFkZHIsIHZzaWQsIE1NVV9TRUdTSVpFXzI1Nk0pOworCisJaWYgKCFvcmlnX3B0ZS0+bWF5X3dyaXRlKQorCQlyZmxhZ3MgfD0gSFBURV9SX1BQOworCWVsc2UKKwkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgb3JpZ19wdGUtPnJhZGRyID4+IFBBR0VfU0hJRlQpOworCisJaWYgKCFvcmlnX3B0ZS0+bWF5X2V4ZWN1dGUpCisJCXJmbGFncyB8PSBIUFRFX1JfTjsKKworCWhhc2ggPSBocHRfaGFzaCh2YSwgUFRFX1NJWkUsIE1NVV9TRUdTSVpFXzI1Nk0pOworCittYXBfYWdhaW46CisJaHB0ZWcgPSAoKGhhc2ggJiBodGFiX2hhc2hfbWFzaykgKiBIUFRFU19QRVJfR1JPVVApOworCisJLyogSW4gY2FzZSB3ZSB0cmllZCBub3JtYWwgbWFwcGluZyBhbHJlYWR5LCBsZXQncyBudWtlIG9sZCBlbnRyaWVzICovCisJaWYgKGF0dGVtcHQgPiAxKQorCQlpZiAocHBjX21kLmhwdGVfcmVtb3ZlKGhwdGVnKSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBwcGNfbWQuaHB0ZV9pbnNlcnQoaHB0ZWcsIHZhLCBocGFkZHIsIHJmbGFncywgdmZsYWdzLCBNTVVfUEFHRV80SywgTU1VX1NFR1NJWkVfMjU2TSk7CisKKwlpZiAocmV0IDwgMCkgeworCQkvKiBJZiB3ZSBjb3VsZG4ndCBtYXAgYSBwcmltYXJ5IFBURSwgdHJ5IGEgc2Vjb25kYXJ5ICovCisjaWZkZWYgVVNFX1NFQ09OREFSWQorCQloYXNoID0gfmhhc2g7CisJCWF0dGVtcHQrKzsKKwkJaWYgKGF0dGVtcHQgJSAyKQorCQkJdmZsYWdzID0gSFBURV9WX1NFQ09OREFSWTsKKwkJZWxzZQorCQkJdmZsYWdzID0gMDsKKyNlbHNlCisJCWF0dGVtcHQgPSAyOworI2VuZGlmCisJCWdvdG8gbWFwX2FnYWluOworCX0gZWxzZSB7CisJCWludCBocHRlX2lkID0ga3ZtcHBjX21tdV9ocHRlX2NhY2hlX25leHQodmNwdSk7CisJCXN0cnVjdCBocHRlX2NhY2hlICpwdGUgPSAmdmNwdS0+YXJjaC5ocHRlX2NhY2hlW2hwdGVfaWRdOworCisJCWRwcmludGtfbW11KCJLVk06ICVjJWMgTWFwIDB4JWxseDogWyVseF0gMHglbHggKDB4JWxseCkgLT4gJWx4XG4iLAorCQkJICAgICgocmZsYWdzICYgSFBURV9SX1BQKSA9PSAzKSA/ICctJyA6ICd3JywKKwkJCSAgICAocmZsYWdzICYgSFBURV9SX04pID8gJy0nIDogJ3gnLAorCQkJICAgIG9yaWdfcHRlLT5lYWRkciwgaHB0ZWcsIHZhLCBvcmlnX3B0ZS0+dnBhZ2UsIGhwYWRkcik7CisKKwkJcHRlLT5zbG90ID0gaHB0ZWcgKyAocmV0ICYgNyk7CisJCXB0ZS0+aG9zdF92YSA9IHZhOworCQlwdGUtPnB0ZSA9ICpvcmlnX3B0ZTsKKwkJcHRlLT5wZm4gPSBocGFkZHIgPj4gUEFHRV9TSElGVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBrdm1wcGNfc2lkX21hcCAqY3JlYXRlX3NpZF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZzaWQpCit7CisJc3RydWN0IGt2bXBwY19zaWRfbWFwICptYXA7CisJc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdmNwdV9ib29rM3MgPSB0b19ib29rM3ModmNwdSk7CisJdTE2IHNpZF9tYXBfbWFzazsKKwlzdGF0aWMgaW50IGJhY2t3YXJkc19tYXAgPSAwOworCisJaWYgKHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKQorCQlndnNpZCB8PSBWU0lEX1BSOworCisJLyogV2UgbWlnaHQgZ2V0IGNvbGxpc2lvbnMgdGhhdCB0cmFwIGluIHByZWNlZGluZyBvcmRlciwgc28gbGV0J3MKKwkgICBtYXAgdGhlbSBkaWZmZXJlbnRseSAqLworCisJc2lkX21hcF9tYXNrID0ga3ZtcHBjX3NpZF9oYXNoKHZjcHUsIGd2c2lkKTsKKwlpZiAoYmFja3dhcmRzX21hcCkKKwkJc2lkX21hcF9tYXNrID0gU0lEX01BUF9NQVNLIC0gc2lkX21hcF9tYXNrOworCisJbWFwID0gJnRvX2Jvb2szcyh2Y3B1KS0+c2lkX21hcFtzaWRfbWFwX21hc2tdOworCisJLyogTWFrZSBzdXJlIHdlJ3JlIHRha2luZyB0aGUgb3RoZXIgbWFwIG5leHQgdGltZSAqLworCWJhY2t3YXJkc19tYXAgPSAhYmFja3dhcmRzX21hcDsKKworCS8qIFVoLW9oIC4uLiBvdXQgb2YgbWFwcGluZ3MuIExldCdzIGZsdXNoISAqLworCWlmICh2Y3B1X2Jvb2szcy0+dnNpZF9uZXh0ID09IHZjcHVfYm9vazNzLT52c2lkX21heCkgeworCQl2Y3B1X2Jvb2szcy0+dnNpZF9uZXh0ID0gdmNwdV9ib29rM3MtPnZzaWRfZmlyc3Q7CisJCW1lbXNldCh2Y3B1X2Jvb2szcy0+c2lkX21hcCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtcHBjX3NpZF9tYXApICogU0lEX01BUF9OVU0pOworCQlrdm1wcGNfbW11X3B0ZV9mbHVzaCh2Y3B1LCAwLCAwKTsKKwkJa3ZtcHBjX21tdV9mbHVzaF9zZWdtZW50cyh2Y3B1KTsKKwl9CisJbWFwLT5ob3N0X3ZzaWQgPSB2Y3B1X2Jvb2szcy0+dnNpZF9uZXh0Kys7CisKKwltYXAtPmd1ZXN0X3ZzaWQgPSBndnNpZDsKKwltYXAtPnZhbGlkID0gdHJ1ZTsKKworCXJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQga3ZtcHBjX21tdV9uZXh0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBlc2lkKQoreworCWludCBpOworCWludCBtYXhfc2xiX3NpemUgPSA2NDsKKwlpbnQgZm91bmRfaW52YWwgPSAtMTsKKwlpbnQgcjsKKworCWlmICghZ2V0X3BhY2EoKS0+a3ZtX3NsYl9tYXgpCisJCWdldF9wYWNhKCktPmt2bV9zbGJfbWF4ID0gMTsKKworCS8qIEFyZSB3ZSBvdmVyd3JpdGluZz8gKi8KKwlmb3IgKGkgPSAxOyBpIDwgZ2V0X3BhY2EoKS0+a3ZtX3NsYl9tYXg7IGkrKykgeworCQlpZiAoIShnZXRfcGFjYSgpLT5rdm1fc2xiW2ldLmVzaWQgJiBTTEJfRVNJRF9WKSkKKwkJCWZvdW5kX2ludmFsID0gaTsKKwkJZWxzZSBpZiAoKGdldF9wYWNhKCktPmt2bV9zbGJbaV0uZXNpZCAmIEVTSURfTUFTSykgPT0gZXNpZCkKKwkJCXJldHVybiBpOworCX0KKworCS8qIEZvdW5kIGEgc3BhcmUgZW50cnkgdGhhdCB3YXMgaW52YWxpZGF0ZWQgYmVmb3JlICovCisJaWYgKGZvdW5kX2ludmFsID4gMCkKKwkJcmV0dXJuIGZvdW5kX2ludmFsOworCisJLyogTm8gc3BhcmUgaW52YWxpZCBlbnRyeSwgc28gY3JlYXRlIG9uZSAqLworCisJaWYgKG1tdV9zbGJfc2l6ZSA8IDY0KQorCQltYXhfc2xiX3NpemUgPSBtbXVfc2xiX3NpemU7CisKKwkvKiBPdmVyZmxvd2luZyAtPiBwdXJnZSAqLworCWlmICgoZ2V0X3BhY2EoKS0+a3ZtX3NsYl9tYXgpID09IG1heF9zbGJfc2l6ZSkKKwkJa3ZtcHBjX21tdV9mbHVzaF9zZWdtZW50cyh2Y3B1KTsKKworCXIgPSBnZXRfcGFjYSgpLT5rdm1fc2xiX21heDsKKwlnZXRfcGFjYSgpLT5rdm1fc2xiX21heCsrOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBrdm1wcGNfbW11X21hcF9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZWFkZHIpCit7CisJdTY0IGVzaWQgPSBlYWRkciA+PiBTSURfU0hJRlQ7CisJdTY0IHNsYl9lc2lkID0gKGVhZGRyICYgRVNJRF9NQVNLKSB8IFNMQl9FU0lEX1Y7CisJdTY0IHNsYl92c2lkID0gU0xCX1ZTSURfVVNFUjsKKwl1NjQgZ3ZzaWQ7CisJaW50IHNsYl9pbmRleDsKKwlzdHJ1Y3Qga3ZtcHBjX3NpZF9tYXAgKm1hcDsKKworCXNsYl9pbmRleCA9IGt2bXBwY19tbXVfbmV4dF9zZWdtZW50KHZjcHUsIGVhZGRyICYgRVNJRF9NQVNLKTsKKworCWlmICh2Y3B1LT5hcmNoLm1tdS5lc2lkX3RvX3ZzaWQodmNwdSwgZXNpZCwgJmd2c2lkKSkgeworCQkvKiBJbnZhbGlkYXRlIGFuIGVudHJ5ICovCisJCWdldF9wYWNhKCktPmt2bV9zbGJbc2xiX2luZGV4XS5lc2lkID0gMDsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJbWFwID0gZmluZF9zaWRfdnNpZCh2Y3B1LCBndnNpZCk7CisJaWYgKCFtYXApCisJCW1hcCA9IGNyZWF0ZV9zaWRfbWFwKHZjcHUsIGd2c2lkKTsKKworCW1hcC0+Z3Vlc3RfZXNpZCA9IGVzaWQ7CisKKwlzbGJfdnNpZCB8PSAobWFwLT5ob3N0X3ZzaWQgPDwgMTIpOworCXNsYl92c2lkICY9IH5TTEJfVlNJRF9LUDsKKwlzbGJfZXNpZCB8PSBzbGJfaW5kZXg7CisKKwlnZXRfcGFjYSgpLT5rdm1fc2xiW3NsYl9pbmRleF0uZXNpZCA9IHNsYl9lc2lkOworCWdldF9wYWNhKCktPmt2bV9zbGJbc2xiX2luZGV4XS52c2lkID0gc2xiX3ZzaWQ7CisKKwlkcHJpbnRrX3NsYigic2xibXRlICUjbGx4LCAlI2xseFxuIiwgc2xiX3ZzaWQsIHNsYl9lc2lkKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGt2bXBwY19tbXVfZmx1c2hfc2VnbWVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWdldF9wYWNhKCktPmt2bV9zbGJfbWF4ID0gMTsKKwlnZXRfcGFjYSgpLT5rdm1fc2xiWzBdLmVzaWQgPSAwOworfQorCit2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgMCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9ybWhhbmRsZXJzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9ybWhhbmRsZXJzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3ZGQyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X3JtaGFuZGxlcnMuUwpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqIENvcHlyaWdodCBTVVNFIExpbnV4IFByb2R1Y3RzIEdtYkggMjAwOQorICoKKyAqIEF1dGhvcnM6IEFsZXhhbmRlciBHcmFmIDxhZ3JhZkBzdXNlLmRlPgorICovCisKKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYXNtLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NHMuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICBSZWFsIE1vZGUgaGFuZGxlcnMgdGhhdCBuZWVkIHRvIGJlIGluIGxvdyBwaHlzaWNhbCBtZW1vcnkgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisubWFjcm8gSU5URVJSVVBUX1RSQU1QT0xJTkUgaW50bm8KKworLmdsb2JhbCBrdm1wcGNfdHJhbXBvbGluZV9caW50bm8KK2t2bXBwY190cmFtcG9saW5lX1xpbnRubzoKKworCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCwgcjEzCQkvKiBTYXZlIHIxMyAqLworCisJLyoKKwkgKiBGaXJzdCB0aGluZyB0byBkbyBpcyB0byBmaW5kIG91dCBpZiB3ZSdyZSBjb21pbmcKKwkgKiBmcm9tIGEgS1ZNIGd1ZXN0IG9yIGEgTGludXggcHJvY2Vzcy4KKwkgKgorCSAqIFRvIGRpc3Rpbmd1aXNoLCB3ZSBjaGVjayBhIG1hZ2ljIGJ5dGUgaW4gdGhlIFBBQ0EKKwkgKi8KKwltZnNwcglyMTMsIFNQUk5fU1BSR19QQUNBCQkvKiByMTMgPSBQQUNBICovCisJc3RkCXIxMiwgKFBBQ0FfRVhNQyArIEVYX1IxMikocjEzKQorCW1mY3IJcjEyCisJc3R3CXIxMiwgKFBBQ0FfRVhNQyArIEVYX0NDUikocjEzKQorCWxieglyMTIsIFBBQ0FfS1ZNX0lOX0dVRVNUKHIxMykKKwljbXB3aQlyMTIsIDAKKwlibmUJLi5rdm1wcGNfaGFuZGxlcl9oYXNtYWdpY19caW50bm8KKwkvKiBObyBLVk0gZ3Vlc3Q/IFRoZW4ganVtcCBiYWNrIHRvIHRoZSBMaW51eCBoYW5kbGVyISAqLworCWx3eglyMTIsIChQQUNBX0VYTUMgKyBFWF9DQ1IpKHIxMykKKwltdGNyCXIxMgorCWxkCXIxMiwgKFBBQ0FfRVhNQyArIEVYX1IxMikocjEzKQorCW1mc3ByCXIxMywgU1BSTl9TUFJHX1NDUkFUQ0gwCQkvKiByMTMgPSBvcmlnaW5hbCByMTMgKi8KKwliCWt2bXBwY19yZXN1bWVfXGludG5vCQkvKiBHZXQgYmFjayBvcmlnaW5hbCBoYW5kbGVyICovCisKKwkvKiBOb3cgd2Uga25vdyB3ZSdyZSBoYW5kbGluZyBhIEtWTSBndWVzdCAqLworLi5rdm1wcGNfaGFuZGxlcl9oYXNtYWdpY19caW50bm86CisJLyogVW5zZXQgZ3Vlc3Qgc3RhdGUgKi8KKwlsaQlyMTIsIDAKKwlzdGIJcjEyLCBQQUNBX0tWTV9JTl9HVUVTVChyMTMpCisKKwlzdGQJcjEsIChQQUNBX0VYTUMrRVhfUjkpKHIxMykKKwlzdGQJcjEwLCAoUEFDQV9FWE1DK0VYX1IxMCkocjEzKQorCXN0ZAlyMTEsIChQQUNBX0VYTUMrRVhfUjExKShyMTMpCisJc3RkCXIyLCAoUEFDQV9FWE1DK0VYX1IxMykocjEzKQorCisJbWZzcnIwCXIxMAorCW1mc3JyMQlyMTEKKworCS8qIFJlc3RvcmUgUjEvUjIgc28gd2UgY2FuIGhhbmRsZSBmYXVsdHMgKi8KKwlsZAlyMSwgUEFDQVIxKHIxMykKKwlsZAlyMiwgKFBBQ0FfRVhNQytFWF9TUlIwKShyMTMpCisKKwkvKiBMZXQncyBzdG9yZSB3aGljaCBpbnRlcnJ1cHQgd2UncmUgaGFuZGxpbmcgKi8KKwlsaQlyMTIsIFxpbnRubworCisJLyogSnVtcCBpbnRvIHRoZSBTTEIgZXhpdCBjb2RlIHRoYXQgZ29lcyB0byB0aGUgaGlnaG1lbSBoYW5kbGVyICovCisJYglrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2V4aXQKKworLmVuZG0KKworSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9TWVNURU1fUkVTRVQKK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfTUFDSElORV9DSEVDSworSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UKK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfREFUQV9TRUdNRU5UCitJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX0lOU1RfU1RPUkFHRQorSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NFR01FTlQKK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfRVhURVJOQUwKK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfQUxJR05NRU5UCitJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX1BST0dSQU0KK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfRlBfVU5BVkFJTAorSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9ERUNSRU1FTlRFUgorSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMCitJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX1RSQUNFCitJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX1BFUkZNT04KK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfQUxUSVZFQworSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9WU1gKKworLyoKKyAqIFRoaXMgdHJhbXBvbGluZSBicmluZ3MgdXMgYmFjayB0byBhIHJlYWwgbW9kZSBoYW5kbGVyCisgKgorICogSW5wdXQgUmVnaXN0ZXJzOgorICoKKyAqIFI2ID0gU1JSMAorICogUjcgPSBTUlIxCisgKiBMUiA9IHJlYWwtbW9kZSBJUAorICoKKyAqLworLmdsb2JhbCBrdm1wcGNfaGFuZGxlcl9sb3dtZW1fdHJhbXBvbGluZQora3ZtcHBjX2hhbmRsZXJfbG93bWVtX3RyYW1wb2xpbmU6CisKKwltdHNycjAJcjYKKwltdHNycjEJcjcKKwlibHIKK2t2bXBwY19oYW5kbGVyX2xvd21lbV90cmFtcG9saW5lX2VuZDoKKworLmdsb2JhbCBrdm1wcGNfdHJhbXBvbGluZV9sb3dtZW0KK2t2bXBwY190cmFtcG9saW5lX2xvd21lbToKKwkubG9uZyBrdm1wcGNfaGFuZGxlcl9sb3dtZW1fdHJhbXBvbGluZSAtIF9zdGV4dAorCisuZ2xvYmFsIGt2bXBwY190cmFtcG9saW5lX2VudGVyCitrdm1wcGNfdHJhbXBvbGluZV9lbnRlcjoKKwkubG9uZyBrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2VudGVyIC0gX3N0ZXh0CisKKyNpbmNsdWRlICJib29rM3NfNjRfc2xiLlMiCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X3NsYi5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfc2xiLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkMjM3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X3NsYi5TCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKgorICogQ29weXJpZ2h0IFNVU0UgTGludXggUHJvZHVjdHMgR21iSCAyMDA5CisgKgorICogQXV0aG9yczogQWxleGFuZGVyIEdyYWYgPGFncmFmQHN1c2UuZGU+CisgKi8KKworI2RlZmluZSBTSEFET1dfU0xCX0VTSUQobnVtKQkoU0xCU0hBRE9XX1NBVkVBUkVBICsgKG51bSAqIDB4MTApKQorI2RlZmluZSBTSEFET1dfU0xCX1ZTSUQobnVtKQkoU0xCU0hBRE9XX1NBVkVBUkVBICsgKG51bSAqIDB4MTApICsgMHg4KQorI2RlZmluZSBVTkJPTFRfU0xCX0VOVFJZKG51bSkgXAorCWxkCXI5LCBTSEFET1dfU0xCX0VTSUQobnVtKShyMTIpOyBcCisJLyogSW52YWxpZD8gU2tpcC4gKi87IFwKKwlybGRpY2wuIHIwLCByOSwgMzcsIDYzOyBcCisJYmVxCXNsYl9lbnRyeV9za2lwXyAjIyBudW07IFwKKwl4b3JpcwlyOSwgcjksIFNMQl9FU0lEX1ZAaDsgXAorCXN0ZAlyOSwgU0hBRE9XX1NMQl9FU0lEKG51bSkocjEyKTsgXAorICBzbGJfZW50cnlfc2tpcF8gIyMgbnVtOgorCisjZGVmaW5lIFJFQk9MVF9TTEJfRU5UUlkobnVtKSBcCisJbGQJcjEwLCBTSEFET1dfU0xCX0VTSUQobnVtKShyMTEpOyBcCisJY21wZGkJcjEwLCAwOyBcCisJYmVxCXNsYl9leGl0X3NraXBfMTsgXAorCW9yaXMJcjEwLCByMTAsIFNMQl9FU0lEX1ZAaDsgXAorCWxkCXI5LCBTSEFET1dfU0xCX1ZTSUQobnVtKShyMTEpOyBcCisJc2xibXRlCXI5LCByMTA7IFwKKwlzdGQJcjEwLCBTSEFET1dfU0xCX0VTSUQobnVtKShyMTEpOyBcCitzbGJfZXhpdF9za2lwXyAjIyBudW06CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5IGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLmdsb2JhbCBrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2VudGVyCitrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2VudGVyOgorCisJLyogUmVxdWlyZWQgc3RhdGU6CisJICoKKwkgKiBNU1IgPSB+SVJ8RFIKKwkgKiBSMTMgPSBQQUNBCisJICogUjkgPSBndWVzdCBJUAorCSAqIFIxMCA9IGd1ZXN0IE1TUgorCSAqIFIxMSA9IGZyZWUKKwkgKiBSMTIgPSBmcmVlCisJICogUEFDQVtQQUNBX0VYTUMgKyBFWF9SOV0gPSBndWVzdCBSOQorCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjEwXSA9IGd1ZXN0IFIxMAorCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjExXSA9IGd1ZXN0IFIxMQorCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjEyXSA9IGd1ZXN0IFIxMgorCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjEzXSA9IGd1ZXN0IFIxMworCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfQ0NSXSA9IGd1ZXN0IENSCisJICogUEFDQVtQQUNBX0VYTUMgKyBFWF9SM10gPSBndWVzdCBYRVIKKwkgKi8KKworCW10c3JyMAlyOQorCW10c3JyMQlyMTAKKworCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCwgcjAKKworCS8qIFJlbW92ZSBMUEFSIHNoYWRvdyBlbnRyaWVzICovCisKKyNpZiBTTEJfTlVNX0JPTFRFRCA9PSAzCisKKwlsZAlyMTIsIFBBQ0FfU0xCU0hBRE9XUFRSKHIxMykKKworCS8qIFNhdmUgb2ZmIHRoZSBmaXJzdCBlbnRyeSBzbyB3ZSBjYW4gc2xiaWUgaXQgbGF0ZXIgKi8KKwlsZAlyMTAsIFNIQURPV19TTEJfRVNJRCgwKShyMTIpCisJbGQJcjExLCBTSEFET1dfU0xCX1ZTSUQoMCkocjEyKQorCisJLyogUmVtb3ZlIGJvbHRlZCBlbnRyaWVzICovCisJVU5CT0xUX1NMQl9FTlRSWSgwKQorCVVOQk9MVF9TTEJfRU5UUlkoMSkKKwlVTkJPTFRfU0xCX0VOVFJZKDIpCisJCisjZWxzZQorI2Vycm9yIHVua25vd24gbnVtYmVyIG9mIGJvbHRlZCBlbnRyaWVzCisjZW5kaWYKKworCS8qIEZsdXNoIFNMQiAqLworCisJc2xiaWEKKworCS8qIHIwID0gZXNpZCAmIEVTSURfTUFTSyAqLworCXJsZGljciAgcjEwLCByMTAsIDAsIDM1CisJLyogcjAgfD0gQ0xBU1NfQklUKFZTSUQpICovCisJcmxkaWMgICByMTIsIHIxMSwgNTYgLSAzNiwgMzYKKwlvciAgICAgIHIxMCwgcjEwLCByMTIKKwlzbGJpZQlyMTAKKworCWlzeW5jCisKKwkvKiBGaWxsIFNMQiB3aXRoIG91ciBzaGFkb3cgKi8KKworCWxieglyMTIsIFBBQ0FfS1ZNX1NMQl9NQVgocjEzKQorCW11bGxpCXIxMiwgcjEyLCAxNgorCWFkZGkJcjEyLCByMTIsIFBBQ0FfS1ZNX1NMQgorCWFkZAlyMTIsIHIxMiwgcjEzCisKKwkvKiBmb3IgKHIxMSA9IGt2bV9zbGI7IHIxMSA8IGt2bV9zbGIgKyBrdm1fc2xiX3NpemU7IHIxMSs9c2xiX2VudHJ5KSAqLworCWxpCXIxMSwgUEFDQV9LVk1fU0xCCisJYWRkCXIxMSwgcjExLCByMTMKKworc2xiX2xvb3BfZW50ZXI6CisKKwlsZAlyMTAsIDAocjExKQorCisJcmxkaWNsLiByMCwgcjEwLCAzNywgNjMKKwliZXEJc2xiX2xvb3BfZW50ZXJfc2tpcAorCisJbGQJcjksIDgocjExKQorCXNsYm10ZQlyOSwgcjEwCisKK3NsYl9sb29wX2VudGVyX3NraXA6CisJYWRkaQlyMTEsIHIxMSwgMTYKKwljbXBkCWNyMCwgcjExLCByMTIKKwlibHQJc2xiX2xvb3BfZW50ZXIKKworc2xiX2RvX2VudGVyOgorCisJLyogRW50ZXIgZ3Vlc3QgKi8KKworCW1mc3ByCXIwLCBTUFJOX1NQUkdfU0NSQVRDSDAKKworCWxkCXI5LCAoUEFDQV9FWE1DK0VYX1I5KShyMTMpCisJbGQJcjEwLCAoUEFDQV9FWE1DK0VYX1IxMCkocjEzKQorCWxkCXIxMiwgKFBBQ0FfRVhNQytFWF9SMTIpKHIxMykKKworCWx3eglyMTEsIChQQUNBX0VYTUMrRVhfQ0NSKShyMTMpCisJbXRjcglyMTEKKworCWxkCXIxMSwgKFBBQ0FfRVhNQytFWF9SMykocjEzKQorCW10eGVyCXIxMQorCisJbGQJcjExLCAoUEFDQV9FWE1DK0VYX1IxMSkocjEzKQorCWxkCXIxMywgKFBBQ0FfRVhNQytFWF9SMTMpKHIxMykKKworCVJGSQora3ZtcHBjX2hhbmRsZXJfdHJhbXBvbGluZV9lbnRlcl9lbmQ6CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGl0IGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy5nbG9iYWwga3ZtcHBjX2hhbmRsZXJfdHJhbXBvbGluZV9leGl0Citrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2V4aXQ6CisKKwkvKiBSZWdpc3RlciB1c2FnZSBhdCB0aGlzIHBvaW50OgorCSAqCisJICogU1BSR19TQ1JBVENIMCA9IGd1ZXN0IFIxMworCSAqIFIwMSAgICAgICAgICAgPSBob3N0IFIxCisJICogUjAyICAgICAgICAgICA9IGhvc3QgUjIKKwkgKiBSMTAgICAgICAgICAgID0gZ3Vlc3QgUEMKKwkgKiBSMTEgICAgICAgICAgID0gZ3Vlc3QgTVNSCisJICogUjEyICAgICAgICAgICA9IGV4aXQgaGFuZGxlciBpZAorCSAqIFIxMyAgICAgICAgICAgPSBQQUNBCisJICogUEFDQS5leG1jLkNDUiAgPSBndWVzdCBDUgorCSAqIFBBQ0EuZXhtYy5SOSAgPSBndWVzdCBSMQorCSAqIFBBQ0EuZXhtYy5SMTAgPSBndWVzdCBSMTAKKwkgKiBQQUNBLmV4bWMuUjExID0gZ3Vlc3QgUjExCisJICogUEFDQS5leG1jLlIxMiA9IGd1ZXN0IFIxMgorCSAqIFBBQ0EuZXhtYy5SMTMgPSBndWVzdCBSMgorCSAqCisJICovCisKKwkvKiBTYXZlIHJlZ2lzdGVycyAqLworCisJc3RkCXIwLCAoUEFDQV9FWE1DK0VYX1NSUjApKHIxMykKKwlzdGQJcjksIChQQUNBX0VYTUMrRVhfUjMpKHIxMykKKwlzdGQJcjEwLCAoUEFDQV9FWE1DK0VYX0xSKShyMTMpCisJc3RkCXIxMSwgKFBBQ0FfRVhNQytFWF9EQVIpKHIxMykKKworCS8qCisJICogSW4gb3JkZXIgZm9yIHVzIHRvIGVhc2lseSBnZXQgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24sCisJICogd2UgZ290IHRoZSAjdm1leGl0IGF0LCB3ZSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgdGhlCisJICogdmlydHVhbCBsYXlvdXQgaXMgc3RpbGwgdGhlIHNhbWUgaGVyZSwgc28gd2UgY2FuIGp1c3QKKwkgKiBsZCBmcm9tIHRoZSBndWVzdCdzIFBDIGFkZHJlc3MKKwkgKi8KKworCS8qIFdlIG9ubHkgbG9hZCB0aGUgbGFzdCBpbnN0cnVjdGlvbiB3aGVuIGl0J3Mgc2FmZSAqLworCWNtcHdpCXIxMiwgQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UKKwliZXEJbGRfbGFzdF9pbnN0CisJY21wd2kJcjEyLCBCT09LM1NfSU5URVJSVVBUX1BST0dSQU0KKwliZXEJbGRfbGFzdF9pbnN0CisKKwliCW5vX2xkX2xhc3RfaW5zdAorCitsZF9sYXN0X2luc3Q6CisJLyogU2F2ZSBvZmYgdGhlIGd1ZXN0IGluc3RydWN0aW9uIHdlJ3JlIGF0ICovCisJLyogICAgMSkgZW5hYmxlIHBhZ2luZyBmb3IgZGF0YSAqLworCW1mbXNyCXI5CisJb3JpCXIxMSwgcjksIE1TUl9EUgkJCS8qIEVuYWJsZSBwYWdpbmcgZm9yIGRhdGEgKi8KKwltdG1zcglyMTEKKwkvKiAgICAyKSBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gKi8KKwlsd3oJcjAsIDAocjEwKQorCS8qICAgIDMpIGRpc2FibGUgcGFnaW5nIGFnYWluICovCisJbXRtc3IJcjkKKworbm9fbGRfbGFzdF9pbnN0OgorCisJLyogUmVzdG9yZSBib2x0ZWQgZW50cmllcyBmcm9tIHRoZSBzaGFkb3cgYW5kIGZpeCBpdCBhbG9uZyB0aGUgd2F5ICovCisKKwkvKiBXZSBkb24ndCBzdG9yZSBhbnl0aGluZyBpbiBlbnRyeSAwLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiBpdCAqLworCXNsYmlhCisJaXN5bmMKKworI2lmIFNMQl9OVU1fQk9MVEVEID09IDMKKworCWxkCXIxMSwgUEFDQV9TTEJTSEFET1dQVFIocjEzKQorCisJUkVCT0xUX1NMQl9FTlRSWSgwKQorCVJFQk9MVF9TTEJfRU5UUlkoMSkKKwlSRUJPTFRfU0xCX0VOVFJZKDIpCisJCisjZWxzZQorI2Vycm9yIHVua25vd24gbnVtYmVyIG9mIGJvbHRlZCBlbnRyaWVzCisjZW5kaWYKKworc2xiX2RvX2V4aXQ6CisKKwkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLworCisJbGQJcjExLCAoUEFDQV9FWE1DK0VYX0RBUikocjEzKQorCWxkCXIxMCwgKFBBQ0FfRVhNQytFWF9MUikocjEzKQorCWxkCXI5LCAoUEFDQV9FWE1DK0VYX1IzKShyMTMpCisKKwkvKiBTYXZlIGxhc3QgaW5zdCAqLworCXN0dwlyMCwgKFBBQ0FfRVhNQytFWF9MUikocjEzKQorCisJLyogU2F2ZSBEQVIgYW5kIERTSVNSIGJlZm9yZSBnb2luZyB0byBwYWdlZCBtb2RlICovCisJbWZkYXIJcjAKKwlzdGQJcjAsIChQQUNBX0VYTUMrRVhfREFSKShyMTMpCisJbWZkc2lzcglyMAorCXN0dwlyMCwgKFBBQ0FfRVhNQytFWF9EU0lTUikocjEzKQorCisJLyogUkZJIGludG8gdGhlIGhpZ2htZW0gaGFuZGxlciAqLworCW1mbXNyCXIwCisJb3JpCXIwLCByMCwgTVNSX0lSfE1TUl9EUnxNU1JfUkkJLyogRW5hYmxlIHBhZ2luZyAqLworCW10c3JyMQlyMAorCWxkCXIwLCBQQUNBU0FWRURNU1IocjEzKQkJLyogSGlnaG1lbSBoYW5kbGVyIGFkZHJlc3MgKi8KKwltdHNycjAJcjAKKworCW1mc3ByCXIwLCBTUFJOX1NQUkdfU0NSQVRDSDAKKworCVJGSQora3ZtcHBjX2hhbmRsZXJfdHJhbXBvbGluZV9leGl0X2VuZDoKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCmluZGV4IGU3YmY0ZDAuLjA2ZjVhOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKQEAgLTUyMCw2ICs1MjAsMTEgQEAKIAlyZXR1cm4ga3ZtcHBjX2NvcmVfdmNwdV90cmFuc2xhdGUodmNwdSwgdHIpOwogfQogCitpbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKIGludCBfX2luaXQga3ZtcHBjX2Jvb2tlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGl2b3JbMTZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwppbmRleCA3NzM3MTQ2Li40YTlhYzY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwpAQCAtMTgsNyArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgInRyYWNlLmgiCiAKICNkZWZpbmUgT1BfVFJBUCAzCisjZGVmaW5lIE9QX1RSQVBfNjQgMgogCiAjZGVmaW5lIE9QXzMxX1hPUF9MV1pYICAgICAgMjMKICNkZWZpbmUgT1BfMzFfWE9QX0xCWlggICAgICA4NwpAQCAtNjQsMTkgKzY1LDQ1IEBACiAjZGVmaW5lIE9QX1NUSCAgNDQKICNkZWZpbmUgT1BfU1RIVSA0NQogCisjaWZkZWYgQ09ORklHX1BQQzY0CitzdGF0aWMgaW50IGt2bXBwY19kZWNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIDE7Cit9CisjZWxzZQorc3RhdGljIGludCBrdm1wcGNfZGVjX2VuYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLnRjciAmIFRDUl9ESUU7Cit9CisjZW5kaWYKKwogdm9pZCBrdm1wcGNfZW11bGF0ZV9kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWlmICh2Y3B1LT5hcmNoLnRjciAmIFRDUl9ESUUpIHsKKwl1bnNpZ25lZCBsb25nIGRlY19uc2VjOworCisJcHJfZGVidWcoIm10REVDOiAleFxuIiwgdmNwdS0+YXJjaC5kZWMpOworI2lmZGVmIENPTkZJR19QUEM2NAorCS8qIFBPV0VSNCsgdHJpZ2dlcnMgYSBkZWMgaW50ZXJydXB0IGlmIHRoZSB2YWx1ZSBpcyA8IDAgKi8KKwlpZiAodmNwdS0+YXJjaC5kZWMgJiAweDgwMDAwMDAwKSB7CisJCWhydGltZXJfdHJ5X3RvX2NhbmNlbCgmdmNwdS0+YXJjaC5kZWNfdGltZXIpOworCQlrdm1wcGNfY29yZV9xdWV1ZV9kZWModmNwdSk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoa3ZtcHBjX2RlY19lbmFibGVkKHZjcHUpKSB7CiAJCS8qIFRoZSBkZWNyZW1lbnRlciB0aWNrcyBhdCB0aGUgc2FtZSByYXRlIGFzIHRoZSB0aW1lYmFzZSwgc28KIAkJICogdGhhdCdzIGhvdyB3ZSBjb252ZXJ0IHRoZSBndWVzdCBERUMgdmFsdWUgdG8gdGhlIG51bWJlciBvZgogCQkgKiBob3N0IHRpY2tzLiAqLwotCQl1bnNpZ25lZCBsb25nIG5yX2ppZmZpZXM7CiAKLQkJbnJfamlmZmllcyA9IHZjcHUtPmFyY2guZGVjIC8gdGJfdGlja3NfcGVyX2ppZmZ5OwotCQltb2RfdGltZXIoJnZjcHUtPmFyY2guZGVjX3RpbWVyLAotCQkgICAgICAgICAgZ2V0X2ppZmZpZXNfNjQoKSArIG5yX2ppZmZpZXMpOworCQlocnRpbWVyX3RyeV90b19jYW5jZWwoJnZjcHUtPmFyY2guZGVjX3RpbWVyKTsKKwkJZGVjX25zZWMgPSB2Y3B1LT5hcmNoLmRlYzsKKwkJZGVjX25zZWMgKj0gMTAwMDsKKwkJZGVjX25zZWMgLz0gdGJfdGlja3NfcGVyX3VzZWM7CisJCWhydGltZXJfc3RhcnQoJnZjcHUtPmFyY2guZGVjX3RpbWVyLCBrdGltZV9zZXQoMCwgZGVjX25zZWMpLAorCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CisJCXZjcHUtPmFyY2guZGVjX2ppZmZpZXMgPSBnZXRfdGIoKTsKIAl9IGVsc2UgewotCQlkZWxfdGltZXIoJnZjcHUtPmFyY2guZGVjX3RpbWVyKTsKKwkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZ2Y3B1LT5hcmNoLmRlY190aW1lcik7CiAJfQogfQogCkBAIC0xMTEsOSArMTM4LDE1IEBACiAJLyogdGhpcyBkZWZhdWx0IHR5cGUgbWlnaHQgYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2F0ZWdvcmllcyAqLwogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX0lOU1RfRVhJVFMpOwogCisJcHJfZGVidWcoS0VSTl9JTkZPICJFbXVsYXRpbmcgb3Bjb2RlICVkIC8gJWRcbiIsIGdldF9vcChpbnN0KSwgZ2V0X3hvcChpbnN0KSk7CisKIAlzd2l0Y2ggKGdldF9vcChpbnN0KSkgewogCWNhc2UgT1BfVFJBUDoKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwljYXNlIE9QX1RSQVBfNjQ6CisjZWxzZQogCQl2Y3B1LT5hcmNoLmVzciB8PSBFU1JfUFRSOworI2VuZGlmCiAJCWt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0odmNwdSk7CiAJCWFkdmFuY2UgPSAwOwogCQlicmVhazsKQEAgLTE4OCwxNyArMjIxLDE5IEBACiAJCQljYXNlIFNQUk5fU1JSMToKIAkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnNycjE7IGJyZWFrOwogCQkJY2FzZSBTUFJOX1BWUjoKLQkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1BWUik7IGJyZWFrOworCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gucHZyOyBicmVhazsKIAkJCWNhc2UgU1BSTl9QSVI6Ci0JCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZzcHIoU1BSTl9QSVIpOyBicmVhazsKKwkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT52Y3B1X2lkOyBicmVhazsKKwkJCWNhc2UgU1BSTl9NU1NTUjA6CisJCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gMDsgYnJlYWs7CiAKIAkJCS8qIE5vdGU6IG1mdGIgYW5kIFRCUkwvVEJXTCBhcmUgdXNlci1hY2Nlc3NpYmxlLCBzbwogCQkJICogdGhlIGd1ZXN0IGNhbiBhbHdheXMgYWNjZXNzIHRoZSByZWFsIFRCIGFueXdheXMuCiAJCQkgKiBJbiBmYWN0LCB3ZSBwcm9iYWJseSB3aWxsIG5ldmVyIHNlZSB0aGVzZSB0cmFwcy4gKi8KIAkJCWNhc2UgU1BSTl9UQldMOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IG1mdGJsKCk7IGJyZWFrOworCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IGdldF90YigpID4+IDMyOyBicmVhazsKIAkJCWNhc2UgU1BSTl9UQldVOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IG1mdGJ1KCk7IGJyZWFrOworCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IGdldF90YigpOyBicmVhazsKIAogCQkJY2FzZSBTUFJOX1NQUkcwOgogCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guc3ByZzA7IGJyZWFrOwpAQCAtMjExLDYgKzI0NiwxMyBAQAogCQkJLyogTm90ZTogU1BSRzQtNyBhcmUgdXNlci1yZWFkYWJsZSwgc28gd2UgZG9uJ3QgZ2V0CiAJCQkgKiBhIHRyYXAuICovCiAKKwkJCWNhc2UgU1BSTl9ERUM6CisJCQl7CisJCQkJdTY0IGpkID0gZ2V0X3RiKCkgLSB2Y3B1LT5hcmNoLmRlY19qaWZmaWVzOworCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVjIC0gamQ7CisJCQkJcHJfZGVidWcoS0VSTl9JTkZPICJtZkRFQzogJXggLSAlbGx4ID0gJWx4XG4iLCB2Y3B1LT5hcmNoLmRlYywgamQsIHZjcHUtPmFyY2guZ3ByW3J0XSk7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlkZWZhdWx0OgogCQkJCWVtdWxhdGVkID0ga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcih2Y3B1LCBzcHJuLCBydCk7CiAJCQkJaWYgKGVtdWxhdGVkID09IEVNVUxBVEVfRkFJTCkgewpAQCAtMjYwLDYgKzMwMiw4IEBACiAJCQljYXNlIFNQUk5fVEJXTDogYnJlYWs7CiAJCQljYXNlIFNQUk5fVEJXVTogYnJlYWs7CiAKKwkJCWNhc2UgU1BSTl9NU1NTUjA6IGJyZWFrOworCiAJCQljYXNlIFNQUk5fREVDOgogCQkJCXZjcHUtPmFyY2guZGVjID0gdmNwdS0+YXJjaC5ncHJbcnNdOwogCQkJCWt2bXBwY19lbXVsYXRlX2RlYyh2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggNTkwMmJiYy4uZjA2Y2Y5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTQ0LDYgKzE0NSw5IEBACiAJaW50IHI7CiAKIAlzd2l0Y2ggKGV4dCkgeworCWNhc2UgS1ZNX0NBUF9QUENfU0VHU1RBVEU6CisJCXIgPSAxOworCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CiAJCXIgPSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQ7CiAJCWJyZWFrOwpAQCAtMjA5LDEwICsyMTMsMjUgQEAKIAl9CiB9CiAKKy8qCisgKiBsb3cgbGV2ZWwgaHJ0aW1lciB3YWtlIHJvdXRpbmUuIEJlY2F1c2UgdGhpcyBydW5zIGluIGhhcmRpcnEgY29udGV4dAorICogd2Ugc2NoZWR1bGUgYSB0YXNrbGV0IHRvIGRvIHRoZSByZWFsIHdvcmsuCisgKi8KK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bXBwY19kZWNyZW1lbnRlcl93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKworCXZjcHUgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5kZWNfdGltZXIpOworCXRhc2tsZXRfc2NoZWR1bGUoJnZjcHUtPmFyY2gudGFza2xldCk7CisKKwlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Cit9CisKIGludCBrdm1fYXJjaF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXNldHVwX3RpbWVyKCZ2Y3B1LT5hcmNoLmRlY190aW1lciwga3ZtcHBjX2RlY3JlbWVudGVyX2Z1bmMsCi0JICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpdmNwdSk7CisJaHJ0aW1lcl9pbml0KCZ2Y3B1LT5hcmNoLmRlY190aW1lciwgQ0xPQ0tfUkVBTFRJTUUsIEhSVElNRVJfTU9ERV9BQlMpOworCXRhc2tsZXRfaW5pdCgmdmNwdS0+YXJjaC50YXNrbGV0LCBrdm1wcGNfZGVjcmVtZW50ZXJfZnVuYywgKHVsb25nKXZjcHUpOworCXZjcHUtPmFyY2guZGVjX3RpbWVyLmZ1bmN0aW9uID0ga3ZtcHBjX2RlY3JlbWVudGVyX3dha2V1cDsKIAogCXJldHVybiAwOwogfQpAQCAtNDEwLDExICs0MjksNiBAQAogCXJldHVybiByOwogfQogCi1pbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKQotewotCXJldHVybiAtRU5PVFNVUFA7Ci19Ci0KIGxvbmcga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYwppbmRleCAyYWEzNzFlLi43MDM3ODU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RyYWNlLmggYi9hcmNoL3Bvd2VycGMva3ZtL3RyYWNlLmgKaW5kZXggNjdmMjE5ZC4uYThlODQwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90cmFjZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdHJhY2UuaApAQCAtMTIsOCArMTIsOCBAQAogICogVHJhY2Vwb2ludCBmb3IgZ3Vlc3QgbW9kZSBlbnRyeS4KICAqLwogVFJBQ0VfRVZFTlQoa3ZtX3BwY19pbnN0ciwKLQlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaW5zdCwgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgaW50IGVtdWxhdGUpLAotCVRQX0FSR1MoaW5zdCwgcGMsIGVtdWxhdGUpLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBpbnN0LCB1bnNpZ25lZCBsb25nIF9wYywgdW5zaWduZWQgaW50IGVtdWxhdGUpLAorCVRQX0FSR1MoaW5zdCwgX3BjLCBlbXVsYXRlKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJaW5zdAkJKQpAQCAtMjMsNyArMjMsNyBAQAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fZW50cnktPmluc3QJCT0gaW5zdDsKLQkJX19lbnRyeS0+cGMJCT0gcGM7CisJCV9fZW50cnktPnBjCQk9IF9wYzsKIAkJX19lbnRyeS0+ZW11bGF0ZQk9IGVtdWxhdGU7CiAJKSwKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5XzMyLlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlfMzIuUwppbmRleCBjNjU3ZGU1Li43NGE3ZjQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlfMzIuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlfMzIuUwpAQCAtOTgsMjAgKzk4LDcgQEAKIAliZG56CTRiCiAzOgltdGN0cglyOQogCWxpCXI3LDQKLSNpZiAhZGVmaW5lZChDT05GSUdfOHh4KQogMTA6CWRjYnoJcjcscjYKLSNlbHNlCi0xMDoJc3R3CXI0LCA0KHI2KQotCXN0dwlyNCwgOChyNikKLQlzdHcJcjQsIDEyKHI2KQotCXN0dwlyNCwgMTYocjYpCi0jaWYgQ0FDSEVfTElORV9TSVpFID49IDMyCi0Jc3R3CXI0LCAyMChyNikKLQlzdHcJcjQsIDI0KHI2KQotCXN0dwlyNCwgMjgocjYpCi0Jc3R3CXI0LCAzMihyNikKLSNlbmRpZiAvKiBDQUNIRV9MSU5FX1NJWkUgKi8KLSNlbmRpZgogCWFkZGkJcjYscjYsQ0FDSEVMSU5FX0JZVEVTCiAJYmRuegkxMGIKIAljbHJsd2kJcjUscjgsMzItTEdfQ0FDSEVMSU5FX0JZVEVTCkBAIC0yMDAsOSArMTg3LDcgQEAKIAltdGN0cglyMAogCWJlcQk2M2YKIDUzOgotI2lmICFkZWZpbmVkKENPTkZJR184eHgpCiAJZGNieglyMTEscjYKLSNlbmRpZgogCUNPUFlfMTZfQllURVMKICNpZiBMMV9DQUNIRV9CWVRFUyA+PSAzMgogCUNPUFlfMTZfQllURVMKQEAgLTM1NiwxNCArMzQxLDYgQEAKIAlsaQlyMTEsNAogCWJlcQk2M2YKIAotI2lmZGVmIENPTkZJR184eHgKLQkvKiBEb24ndCB1c2UgcHJlZmV0Y2ggb24gOHh4ICovCi0JbXRjdHIJcjAKLQlsaQlyMCwwCi01MzoJQ09QWV8xNl9CWVRFU19XSVRIRVgoMCkKLQliZG56CTUzYgotCi0jZWxzZSAvKiBub3QgQ09ORklHXzh4eCAqLwogCS8qIEhlcmUgd2UgZGVjaWRlIGhvdyBmYXIgYWhlYWQgdG8gcHJlZmV0Y2ggdGhlIHNvdXJjZSAqLwogCWxpCXIzLDQKIAljbXB3aQlyMCwxCkBAIC00MTYsNyArMzkzLDYgQEAKIAlsaQlyMyw0CiAJbGkJcjcsMAogCWJuZQkxMTRiCi0jZW5kaWYgLyogQ09ORklHXzh4eCAqLwogCiA2MzoJc3J3aS4JcjAscjUsMgogCW10Y3RyCXIwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2xvY2tzLmMgYi9hcmNoL3Bvd2VycGMvbGliL2xvY2tzLmMKaW5kZXggNzlkMGZhMy4uNThlMTRmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9sb2Nrcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvbG9ja3MuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAotdm9pZCBfX3NwaW5feWllbGQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit2b2lkIF9fc3Bpbl95aWVsZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgaW50IGxvY2tfdmFsdWUsIGhvbGRlcl9jcHUsIHlpZWxkX2NvdW50OwogCkBAIC01NSw3ICs1NSw3IEBACiAgKiBUaGlzIHR1cm5zIG91dCB0byBiZSB0aGUgc2FtZSBmb3IgcmVhZCBhbmQgd3JpdGUgbG9ja3MsIHNpbmNlCiAgKiB3ZSBvbmx5IGtub3cgdGhlIGhvbGRlciBpZiBpdCBpcyB3cml0ZS1sb2NrZWQuCiAgKi8KLXZvaWQgX19yd195aWVsZChyYXdfcndsb2NrX3QgKnJ3KQordm9pZCBfX3J3X3lpZWxkKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCWludCBsb2NrX3ZhbHVlOwogCXVuc2lnbmVkIGludCBob2xkZXJfY3B1LCB5aWVsZF9jb3VudDsKQEAgLTgyLDcgKzgyLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit2b2lkIGFyY2hfc3Bpbl91bmxvY2tfd2FpdChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJd2hpbGUgKGxvY2stPnNsb2NrKSB7CiAJCUhNVF9sb3coKTsKQEAgLTkyLDQgKzkyLDQgQEAKIAlITVRfbWVkaXVtKCk7CiB9CiAKLUVYUE9SVF9TWU1CT0woX19yYXdfc3Bpbl91bmxvY2tfd2FpdCk7CitFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl91bmxvY2tfd2FpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwppbmRleCBmNWU3YjljLi4wOGRmYThlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgTEFSR0VfUEFHRV9TSVpFXzE2TQkoMTw8MjQpCiAjZGVmaW5lIExBUkdFX1BBR0VfU0laRV80TQkoMTw8MjIpCiAKLXVuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKK3Vuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odW5zaWduZWQgbG9uZyB0b3ApCiB7CiAJdW5zaWduZWQgbG9uZyB2LCBzLCBtYXBwZWQ7CiAJcGh5c19hZGRyX3QgcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDR4X21tdS5jCmluZGV4IDk4MDUyYWMuLjM5ODYyNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQ0eF9tbXUuYwpAQCAtODgsNyArODgsNyBAQAogCWZsdXNoX2luc3RydWN0aW9uX2NhY2hlKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKK3Vuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odW5zaWduZWQgbG9uZyB0b3ApCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKaW5kZXggNmZiOGZjOC4uY2U2ODcwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQpAQCAtMjgsNyArMjgsMTAgQEAKIG9iai0kKENPTkZJR19GU0xfQk9PS0UpCQkrPSBmc2xfYm9va2VfbW11Lm8KIG9iai0kKENPTkZJR19ORUVEX01VTFRJUExFX05PREVTKSArPSBudW1hLm8KIG9iai0kKENPTkZJR19QUENfTU1fU0xJQ0VTKQkrPSBzbGljZS5vCi1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCitpZmVxICgkKENPTkZJR19IVUdFVExCX1BBR0UpLHkpCitvYmoteQkJCQkrPSBodWdldGxicGFnZS5vCitvYmotJChDT05GSUdfUFBDX1NURF9NTVVfNjQpCSs9IGh1Z2V0bGJwYWdlLWhhc2g2NC5vCitlbmRpZgogb2JqLSQoQ09ORklHX1BQQ19TVUJQQUdFX1BST1QpCSs9IHN1YnBhZ2UtcHJvdC5vCiBvYmotJChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKSArPSBkbWEtbm9uY29oZXJlbnQubwogb2JqLSQoQ09ORklHX0hJR0hNRU0pCQkrPSBoaWdobWVtLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggZTdkYWU4Mi4uMjZmYjZiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+Ci0KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKIHN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjQ2LDYgKzI0NiwxMiBAQAogCQlnb3RvIGJhZF9hcmVhOwogI2VuZGlmIC8qIENPTkZJR182eHggKi8KICNpZiBkZWZpbmVkKENPTkZJR184eHgpCisJLyogOHh4IHNvbWV0aW1lcyBuZWVkIHRvIGxvYWQgYSBpbnZhbGlkL25vbi1wcmVzZW50IFRMQnMuCisJICogVGhlc2UgbXVzdCBiZSBpbnZhbGlkYXRlZCBzZXBhcmF0ZWx5IGFzIGxpbnV4IG1tIGRvbid0LgorCSAqLworCWlmIChlcnJvcl9jb2RlICYgMHg0MDAwMDAwMCkgLyogbm8gdHJhbnNsYXRpb24/ICovCisJCV90bGJpbF92YShhZGRyZXNzLCAwLCAwLCAwKTsKKwogICAgICAgICAvKiBUaGUgTVBDOHh4IHNlZW1zIHRvIGFsd2F5cyBzZXQgMHg4MDAwMDAwMCwgd2hpY2ggaXMKICAgICAgICAgICogInVuZGVmaW5lZCIuICBPZiB0aG9zZSB0aGF0IGNhbiBiZSBzZXQsIHRoaXMgaXMgdGhlIG9ubHkKICAgICAgICAgICogb25lIHdoaWNoIHNlZW1zIGJhZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IGRjOTNlOTUuLmM1Mzk0NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtNTQsMjYgKzU0LDM1IEBACiAKICNpbmNsdWRlICJtbXVfZGVjbC5oIgogCi1leHRlcm4gdm9pZCBsb2FkY2FtX2VudHJ5KHVuc2lnbmVkIGludCBpbmRleCk7CiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FtW0NPTkZJR19MT1dNRU1fQ0FNX05VTV07CiAKLSNkZWZpbmUgTlVNX1RMQkNBTVMJKDE2KQorI2RlZmluZSBOVU1fVExCQ0FNUwkoNjQpCiAKICNpZiBkZWZpbmVkKENPTkZJR19MT1dNRU1fQ0FNX05VTV9CT09MKSAmJiAoQ09ORklHX0xPV01FTV9DQU1fTlVNID49IE5VTV9UTEJDQU1TKQogI2Vycm9yICJMT1dNRU1fQ0FNX05VTSBtdXN0IGJlIGxlc3MgdGhhbiBOVU1fVExCQ0FNUyIKICNlbmRpZgogCi1zdHJ1Y3QgdGxiY2FtIFRMQkNBTVtOVU1fVExCQ0FNU107CitzdHJ1Y3QgdGxiY2FtIHsKKwl1MzIJTUFTMDsKKwl1MzIJTUFTMTsKKwl1bnNpZ25lZCBsb25nCU1BUzI7CisJdTMyCU1BUzM7CisJdTMyCU1BUzc7Cit9IFRMQkNBTVtOVU1fVExCQ0FNU107CiAKIHN0cnVjdCB0bGJjYW1yYW5nZSB7Ci0gICAJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgbGltaXQ7CiAJcGh5c19hZGRyX3QgcGh5czsKIH0gdGxiY2FtX2FkZHJzW05VTV9UTEJDQU1TXTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7CiAKK3Vuc2lnbmVkIGxvbmcgdGxiY2FtX3N6KGludCBpZHgpCit7CisJcmV0dXJuIHRsYmNhbV9hZGRyc1tpZHhdLmxpbWl0IC0gdGxiY2FtX2FkZHJzW2lkeF0uc3RhcnQgKyAxOworfQorCiAvKgogICogUmV0dXJuIFBBIGZvciB0aGlzIFZBIGlmIGl0IGlzIG1hcHBlZCBieSBhIENBTSwgb3IgMAogICovCkBAIC05NCwyMyArMTAzLDM2IEBACiAJaW50IGI7CiAJZm9yIChiID0gMDsgYiA8IHRsYmNhbV9pbmRleDsgKytiKQogCQlpZiAocGEgPj0gdGxiY2FtX2FkZHJzW2JdLnBoeXMKLQkgICAgCSAgICAmJiBwYSA8ICh0bGJjYW1fYWRkcnNbYl0ubGltaXQtdGxiY2FtX2FkZHJzW2JdLnN0YXJ0KQorCQkJJiYgcGEgPCAodGxiY2FtX2FkZHJzW2JdLmxpbWl0LXRsYmNhbV9hZGRyc1tiXS5zdGFydCkKIAkJICAgICAgICAgICAgICArdGxiY2FtX2FkZHJzW2JdLnBoeXMpCiAJCQlyZXR1cm4gdGxiY2FtX2FkZHJzW2JdLnN0YXJ0KyhwYS10bGJjYW1fYWRkcnNbYl0ucGh5cyk7CiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgbG9hZGNhbV9lbnRyeShpbnQgaWR4KQoreworCW10c3ByKFNQUk5fTUFTMCwgVExCQ0FNW2lkeF0uTUFTMCk7CisJbXRzcHIoU1BSTl9NQVMxLCBUTEJDQU1baWR4XS5NQVMxKTsKKwltdHNwcihTUFJOX01BUzIsIFRMQkNBTVtpZHhdLk1BUzIpOworCW10c3ByKFNQUk5fTUFTMywgVExCQ0FNW2lkeF0uTUFTMyk7CisKKwlpZiAoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJiBNTVVfRlRSX0JJR19QSFlTKQorCQltdHNwcihTUFJOX01BUzcsIFRMQkNBTVtpZHhdLk1BUzcpOworCisJYXNtIHZvbGF0aWxlKCJpc3luYzt0bGJ3ZTtpc3luYyIgOiA6IDogIm1lbW9yeSIpOworfQorCiAvKgogICogU2V0IHVwIG9uZSBvZiB0aGUgSS9EIEJBVCAoYmxvY2sgYWRkcmVzcyB0cmFuc2xhdGlvbikgcmVnaXN0ZXIgcGFpcnMuCiAgKiBUaGUgcGFyYW1ldGVycyBhcmUgbm90IGNoZWNrZWQ7IGluIHBhcnRpY3VsYXIgc2l6ZSBtdXN0IGJlIGEgcG93ZXIKICAqIG9mIDQgYmV0d2VlbiA0ayBhbmQgMjU2TS4KICAqLwotdm9pZCBzZXR0bGJjYW0oaW50IGluZGV4LCB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHBoeXMsCi0JCXVuc2lnbmVkIGludCBzaXplLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBwaWQpCitzdGF0aWMgdm9pZCBzZXR0bGJjYW0oaW50IGluZGV4LCB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHBoeXMsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgaW50IHBpZCkKIHsKIAl1bnNpZ25lZCBpbnQgdHNpemUsIGx6OwogCi0JYXNtICgiY250bHp3ICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoc2l6ZSkpOworCWFzbSAoUFBDX0NOVExaTCAiJTAsJTEiIDogIj1yIiAobHopIDogInIiIChzaXplKSk7CiAJdHNpemUgPSAyMSAtIGx6OwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTI4LDggKzE1MCwxMCBAQAogCVRMQkNBTVtpbmRleF0uTUFTMiB8PSAoZmxhZ3MgJiBfUEFHRV9HVUFSREVEKSA/IE1BUzJfRyA6IDA7CiAJVExCQ0FNW2luZGV4XS5NQVMyIHw9IChmbGFncyAmIF9QQUdFX0VORElBTikgPyBNQVMyX0UgOiAwOwogCi0JVExCQ0FNW2luZGV4XS5NQVMzID0gKHBoeXMgJiBQQUdFX01BU0spIHwgTUFTM19TWCB8IE1BUzNfU1I7CisJVExCQ0FNW2luZGV4XS5NQVMzID0gKHBoeXMgJiBNQVMzX1JQTikgfCBNQVMzX1NYIHwgTUFTM19TUjsKIAlUTEJDQU1baW5kZXhdLk1BUzMgfD0gKChmbGFncyAmIF9QQUdFX1JXKSA/IE1BUzNfU1cgOiAwKTsKKwlpZiAoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJiBNTVVfRlRSX0JJR19QSFlTKQorCQlUTEJDQU1baW5kZXhdLk1BUzcgPSAodTY0KXBoeXMgPj4gMzI7CiAKICNpZm5kZWYgQ09ORklHX0tHREIgLyogd2FudCB1c2VyIGFjY2VzcyBmb3IgYnJlYWtwb2ludHMgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9VU0VSKSB7CkBAIC0xNDgsMjcgKzE3Miw0NCBAQAogCWxvYWRjYW1fZW50cnkoaW5kZXgpOwogfQogCi12b2lkIGludmFsaWRhdGVfdGxiY2FtX2VudHJ5KGludCBpbmRleCkKK3Vuc2lnbmVkIGxvbmcgbWFwX21lbV9pbl9jYW1zKHVuc2lnbmVkIGxvbmcgcmFtLCBpbnQgbWF4X2NhbV9pZHgpCiB7Ci0JVExCQ0FNW2luZGV4XS5NQVMwID0gTUFTMF9UTEJTRUwoMSkgfCBNQVMwX0VTRUwoaW5kZXgpOwotCVRMQkNBTVtpbmRleF0uTUFTMSA9IH5NQVMxX1ZBTElEOwotCi0JbG9hZGNhbV9lbnRyeShpbmRleCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKLXsKKwlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHZpcnQgPSBQQUdFX09GRlNFVDsKIAlwaHlzX2FkZHJfdCBwaHlzID0gbWVtc3RhcnRfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFtb3VudF9tYXBwZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgbWF4X2NhbSA9IChtZnNwcihTUFJOX1RMQjFDRkcpID4+IDE2KSAmIDB4ZjsKIAotCXdoaWxlICh0bGJjYW1faW5kZXggPCBBUlJBWV9TSVpFKGNhbSkgJiYgY2FtW3RsYmNhbV9pbmRleF0pIHsKLQkJc2V0dGxiY2FtKHRsYmNhbV9pbmRleCwgdmlydCwgcGh5cywgY2FtW3RsYmNhbV9pbmRleF0sIFBBR0VfS0VSTkVMX1gsIDApOwotCQl2aXJ0ICs9IGNhbVt0bGJjYW1faW5kZXhdOwotCQlwaHlzICs9IGNhbVt0bGJjYW1faW5kZXhdOwotCQl0bGJjYW1faW5kZXgrKzsKKwkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLworCW1heF9jYW0gPSBtYXhfY2FtICogMiArIDEwOworCisJLyogQ2FsY3VsYXRlIENBTSB2YWx1ZXMgKi8KKwlmb3IgKGkgPSAwOyByYW0gJiYgaSA8IG1heF9jYW1faWR4OyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGNhbXNpemUgPSBfX2lsb2cyKHJhbSkgJiB+MVU7CisJCXVuc2lnbmVkIGludCBhbGlnbiA9IF9fZmZzKHZpcnQgfCBwaHlzKSAmIH4xVTsKKwkJdW5zaWduZWQgbG9uZyBjYW1fc3o7CisKKwkJaWYgKGNhbXNpemUgPiBhbGlnbikKKwkJCWNhbXNpemUgPSBhbGlnbjsKKwkJaWYgKGNhbXNpemUgPiBtYXhfY2FtKQorCQkJY2Ftc2l6ZSA9IG1heF9jYW07CisKKwkJY2FtX3N6ID0gMVVMIDw8IGNhbXNpemU7CisJCXNldHRsYmNhbShpLCB2aXJ0LCBwaHlzLCBjYW1fc3osIFBBR0VfS0VSTkVMX1gsIDApOworCisJCXJhbSAtPSBjYW1fc3o7CisJCWFtb3VudF9tYXBwZWQgKz0gY2FtX3N6OworCQl2aXJ0ICs9IGNhbV9zejsKKwkJcGh5cyArPSBjYW1fc3o7CiAJfQorCXRsYmNhbV9pbmRleCA9IGk7CiAKLQlyZXR1cm4gdmlydCAtIFBBR0VfT0ZGU0VUOworCXJldHVybiBhbW91bnRfbWFwcGVkOworfQorCit1bnNpZ25lZCBsb25nIF9faW5pdCBtbXVfbWFwaW5fcmFtKHVuc2lnbmVkIGxvbmcgdG9wKQoreworCXJldHVybiB0bGJjYW1fYWRkcnNbdGxiY2FtX2luZGV4IC0gMV0ubGltaXQgLSBQQUdFX09GRlNFVCArIDE7CiB9CiAKIC8qCkBAIC0xNzksNDYgKzIyMCwyMSBAQAogCWZsdXNoX2luc3RydWN0aW9uX2NhY2hlKCk7CiB9CiAKLXZvaWQgX19pbml0Ci1hZGp1c3RfdG90YWxfbG93bWVtKHZvaWQpCit2b2lkIF9faW5pdCBhZGp1c3RfdG90YWxfbG93bWVtKHZvaWQpCiB7Ci0JcGh5c19hZGRyX3QgcmFtOwotCXVuc2lnbmVkIGludCBtYXhfY2FtID0gKG1mc3ByKFNQUk5fVExCMUNGRykgPj4gMTYpICYgMHhmZjsKLQljaGFyIGJ1ZltBUlJBWV9TSVpFKGNhbSkgKiA1ICsgMV0sICpwID0gYnVmOworCXVuc2lnbmVkIGxvbmcgcmFtOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgdmlydCA9IFBBR0VfT0ZGU0VUICYgMHhmZmZmZmZmZlVMOwotCXVuc2lnbmVkIGxvbmcgcGh5cyA9IG1lbXN0YXJ0X2FkZHIgJiAweGZmZmZmZmZmVUw7Ci0KLQkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLwotCW1heF9jYW0gPSBtYXhfY2FtICogMiArIDEwOwogCiAJLyogYWRqdXN0IGxvd21lbSBzaXplIHRvIF9fbWF4X2xvd19tZW1vcnkgKi8KIAlyYW0gPSBtaW4oKHBoeXNfYWRkcl90KV9fbWF4X2xvd19tZW1vcnksIChwaHlzX2FkZHJfdCl0b3RhbF9sb3dtZW0pOwogCi0JLyogQ2FsY3VsYXRlIENBTSB2YWx1ZXMgKi8KLQlfX21heF9sb3dfbWVtb3J5ID0gMDsKLQlmb3IgKGkgPSAwOyByYW0gJiYgaSA8IEFSUkFZX1NJWkUoY2FtKTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBjYW1zaXplID0gX19pbG9nMihyYW0pICYgfjFVOwotCQl1bnNpZ25lZCBpbnQgYWxpZ24gPSBfX2Zmcyh2aXJ0IHwgcGh5cykgJiB+MVU7CisJX19tYXhfbG93X21lbW9yeSA9IG1hcF9tZW1faW5fY2FtcyhyYW0sIENPTkZJR19MT1dNRU1fQ0FNX05VTSk7CiAKLQkJaWYgKGNhbXNpemUgPiBhbGlnbikKLQkJCWNhbXNpemUgPSBhbGlnbjsKLQkJaWYgKGNhbXNpemUgPiBtYXhfY2FtKQotCQkJY2Ftc2l6ZSA9IG1heF9jYW07Ci0KLQkJY2FtW2ldID0gMVVMIDw8IGNhbXNpemU7Ci0JCXJhbSAtPSBjYW1baV07Ci0JCV9fbWF4X2xvd19tZW1vcnkgKz0gY2FtW2ldOwotCQl2aXJ0ICs9IGNhbVtpXTsKLQkJcGh5cyArPSBjYW1baV07Ci0KLQkJcCArPSBzcHJpbnRmKHAsICIlbHUvIiwgY2FtW2ldID4+IDIwKTsKLQl9Ci0JZm9yICg7IGkgPCBBUlJBWV9TSVpFKGNhbSk7IGkrKykKLQkJcCArPSBzcHJpbnRmKHAsICIwLyIpOwotCXBbLTFdID0gJ1wwJzsKLQotCXByX2luZm8oIk1lbW9yeSBDQU0gbWFwcGluZzogJXMgTWIsIHJlc2lkdWFsOiAlZE1iXG4iLCBidWYsCisJcHJfaW5mbygiTWVtb3J5IENBTSBtYXBwaW5nOiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGxiY2FtX2luZGV4IC0gMTsgaSsrKQorCQlwcl9jb250KCIlbHUvIiwgdGxiY2FtX3N6KGkpID4+IDIwKTsKKwlwcl9jb250KCIlbHUgTWIsIHJlc2lkdWFsOiAlZE1iXG4iLCB0bGJjYW1fc3oodGxiY2FtX2luZGV4IC0gMSkgPj4gMjAsCiAJICAgICAgICAodW5zaWduZWQgaW50KSgodG90YWxfbG93bWVtIC0gX19tYXhfbG93X21lbW9yeSkgPj4gMjApKTsKKwogCV9faW5pdGlhbF9tZW1vcnlfbGltaXRfYWRkciA9IG1lbXN0YXJ0X2FkZHIgKyBfX21heF9sb3dfbWVtb3J5OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2d1cC5jIGIvYXJjaC9wb3dlcnBjL21tL2d1cC5jCmluZGV4IGJjMTIyYTEuLmQ3ZWZkYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ndXAuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKQEAgLTU1LDU3ICs1NSw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi1zdGF0aWMgbm9pbmxpbmUgaW50IGd1cF9odWdlX3B0ZShwdGVfdCAqcHRlcCwgc3RydWN0IGhzdGF0ZSAqaHN0YXRlLAotCQkJCSB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQkgaW50IHdyaXRlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1bnNpZ25lZCBsb25nIHB0ZV9lbmQ7Ci0Jc3RydWN0IHBhZ2UgKmhlYWQsICpwYWdlOwotCXB0ZV90IHB0ZTsKLQlpbnQgcmVmczsKLQotCXB0ZV9lbmQgPSAoKmFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoc3RhdGUpKSAmIGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZSk7Ci0JaWYgKHB0ZV9lbmQgPCBlbmQpCi0JCWVuZCA9IHB0ZV9lbmQ7Ci0KLQlwdGUgPSAqcHRlcDsKLQltYXNrID0gX1BBR0VfUFJFU0VOVHxfUEFHRV9VU0VSOwotCWlmICh3cml0ZSkKLQkJbWFzayB8PSBfUEFHRV9SVzsKLQlpZiAoKHB0ZV92YWwocHRlKSAmIG1hc2spICE9IG1hc2spCi0JCXJldHVybiAwOwotCS8qIGh1Z2VwYWdlcyBhcmUgbmV2ZXIgInNwZWNpYWwiICovCi0JVk1fQlVHX09OKCFwZm5fdmFsaWQocHRlX3BmbihwdGUpKSk7Ci0KLQlyZWZzID0gMDsKLQloZWFkID0gcHRlX3BhZ2UocHRlKTsKLQlwYWdlID0gaGVhZCArICgoKmFkZHIgJiB+aHVnZV9wYWdlX21hc2soaHN0YXRlKSkgPj4gUEFHRV9TSElGVCk7Ci0JZG8gewotCQlWTV9CVUdfT04oY29tcG91bmRfaGVhZChwYWdlKSAhPSBoZWFkKTsKLQkJcGFnZXNbKm5yXSA9IHBhZ2U7Ci0JCSgqbnIpKys7Ci0JCXBhZ2UrKzsKLQkJcmVmcysrOwotCX0gd2hpbGUgKCphZGRyICs9IFBBR0VfU0laRSwgKmFkZHIgIT0gZW5kKTsKLQotCWlmICghcGFnZV9jYWNoZV9hZGRfc3BlY3VsYXRpdmUoaGVhZCwgcmVmcykpIHsKLQkJKm5yIC09IHJlZnM7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodW5saWtlbHkocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwoKnB0ZXApKSkgewotCQkvKiBDb3VsZCBiZSBvcHRpbWl6ZWQgYmV0dGVyICovCi0JCXdoaWxlICgqbnIpIHsKLQkJCXB1dF9wYWdlKHBhZ2UpOwotCQkJKCpuciktLTsKLQkJfQotCX0KLQotCXJldHVybiAxOwotfQotI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KLQogc3RhdGljIGludCBndXBfcG1kX3JhbmdlKHB1ZF90IHB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJaW50IHdyaXRlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQogewpAQCAtMTE5LDcgKzY4LDExIEBACiAJCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKHBtZF9ub25lKHBtZCkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKCFndXBfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgd3JpdGUsIHBhZ2VzLCBucikpCisJCWlmIChpc19odWdlcGQocG1kcCkpIHsKKwkJCWlmICghZ3VwX2h1Z2VwZCgoaHVnZXBkX3QgKilwbWRwLCBQTURfU0hJRlQsCisJCQkJCWFkZHIsIG5leHQsIHdyaXRlLCBwYWdlcywgbnIpKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKCFndXBfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgd3JpdGUsIHBhZ2VzLCBucikpCiAJCQlyZXR1cm4gMDsKIAl9IHdoaWxlIChwbWRwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKQEAgLTEzOSw3ICs5MiwxMSBAQAogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWlmIChwdWRfbm9uZShwdWQpKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghZ3VwX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHdyaXRlLCBwYWdlcywgbnIpKQorCQlpZiAoaXNfaHVnZXBkKHB1ZHApKSB7CisJCQlpZiAoIWd1cF9odWdlcGQoKGh1Z2VwZF90ICopcHVkcCwgUFVEX1NISUZULAorCQkJCQlhZGRyLCBuZXh0LCB3cml0ZSwgcGFnZXMsIG5yKSkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICghZ3VwX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHdyaXRlLCBwYWdlcywgbnIpKQogCQkJcmV0dXJuIDA7CiAJfSB3aGlsZSAocHVkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCkBAIC0xNTQsMTAgKzExMSw2IEBACiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXBnZF90ICpwZ2RwOwogCWludCBuciA9IDA7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JdW5zaWduZWQgaW50IHNoaWZ0OwotCWludCBwc2l6ZTsKLSNlbmRpZgogCiAJcHJfZGV2ZWwoIiVzKCVseCwleCwlcylcbiIsIF9fZnVuY19fLCBzdGFydCwgbnJfcGFnZXMsIHdyaXRlID8gIndyaXRlIiA6ICJyZWFkIik7CiAKQEAgLTE3MiwyNSArMTI1LDYgQEAKIAogCXByX2RldmVsKCIgIGFsaWduZWQ6ICVseCAuLiAlbHhcbiIsIHN0YXJ0LCBlbmQpOwogCi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotCS8qIFdlIGJhaWwgb3V0IG9uIHNsaWNlIGJvdW5kYXJ5IGNyb3NzaW5nIHdoZW4gaHVnZXRsYiBpcwotCSAqIGVuYWJsZWQgaW4gb3JkZXIgdG8gbm90IGhhdmUgdG8gZGVhbCB3aXRoIHR3byBkaWZmZXJlbnQKLQkgKiBwYWdlIHRhYmxlIGZvcm1hdHMKLQkgKi8KLQlpZiAoYWRkciA8IFNMSUNFX0xPV19UT1ApIHsKLQkJaWYgKGVuZCA+IFNMSUNFX0xPV19UT1ApCi0JCQlnb3RvIHNsb3dfaXJxb247Ci0KLQkJaWYgKHVubGlrZWx5KEdFVF9MT1dfU0xJQ0VfSU5ERVgoYWRkcikgIT0KLQkJCSAgICAgR0VUX0xPV19TTElDRV9JTkRFWChlbmQgLSAxKSkpCi0JCQlnb3RvIHNsb3dfaXJxb247Ci0JfSBlbHNlIHsKLQkJaWYgKHVubGlrZWx5KEdFVF9ISUdIX1NMSUNFX0lOREVYKGFkZHIpICE9Ci0JCQkgICAgIEdFVF9ISUdIX1NMSUNFX0lOREVYKGVuZCAtIDEpKSkKLQkJCWdvdG8gc2xvd19pcnFvbjsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwotCiAJLyoKIAkgKiBYWFg6IGJhdGNoIC8gbGltaXQgJ25yJywgdG8gYXZvaWQgbGFyZ2UgaXJxIG9mZiBsYXRlbmN5CiAJICogbmVlZHMgc29tZSBpbnN0cnVtZW50aW5nIHRvIGRldGVybWluZSB0aGUgY29tbW9uIHNpemVzIHVzZWQgYnkKQEAgLTIxMCw1NCArMTQ0LDIzIEBACiAJICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAotCS8qIFRob3NlIGJpdHMgYXJlIHJlbGF0ZWQgdG8gaHVnZXRsYmZzIGltcGxlbWVudGF0aW9uIGFuZCBvbmx5IGV4aXN0Ci0JICogb24gNjQtYml0IGZvciBub3cKLQkgKi8KLQlwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcik7Ci0Jc2hpZnQgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQ7Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisJcGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOworCWRvIHsKKwkJcGdkX3QgcGdkID0gKnBnZHA7CiAKLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0JaWYgKHVubGlrZWx5KG1tdV9odWdlX3BzaXplc1twc2l6ZV0pKSB7Ci0JCXB0ZV90ICpwdGVwOwotCQl1bnNpZ25lZCBsb25nIGEgPSBhZGRyOwotCQl1bnNpZ25lZCBsb25nIHN6ID0gKCgxVUwpIDw8IHNoaWZ0KTsKLQkJc3RydWN0IGhzdGF0ZSAqaHN0YXRlID0gc2l6ZV90b19oc3RhdGUoc3opOwotCi0JCUJVR19PTighaHN0YXRlKTsKLQkJLyoKLQkJICogWFhYOiBjb3VsZCBiZSBvcHRpbWl6ZWQgdG8gYXZvaWQgaHN0YXRlCi0JCSAqIGxvb2t1cCBlbnRpcmVseSAoanVzdCB1c2Ugc2hpZnQpCi0JCSAqLwotCi0JCWRvIHsKLQkJCVZNX0JVR19PTihzaGlmdCAhPSBtbXVfcHNpemVfZGVmc1tnZXRfc2xpY2VfcHNpemUobW0sIGEpXS5zaGlmdCk7Ci0JCQlwdGVwID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCBhKTsKLQkJCXByX2RldmVsKCIgJTAxNmx4OiBodWdlIHB0ZXAgJXBcbiIsIGEsIHB0ZXApOwotCQkJaWYgKCFwdGVwIHx8ICFndXBfaHVnZV9wdGUocHRlcCwgaHN0YXRlLCAmYSwgZW5kLCB3cml0ZSwgcGFnZXMsCi0JCQkJCQkgICAmbnIpKQorCQlwcl9kZXZlbCgiICAlMDE2bHg6IG5vcm1hbCBwZ2QgJXBcbiIsIGFkZHIsCisJCQkgKHZvaWQgKilwZ2RfdmFsKHBnZCkpOworCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwZ2Rfbm9uZShwZ2QpKQorCQkJZ290byBzbG93OworCQlpZiAoaXNfaHVnZXBkKHBnZHApKSB7CisJCQlpZiAoIWd1cF9odWdlcGQoKGh1Z2VwZF90ICopcGdkcCwgUEdESVJfU0hJRlQsCisJCQkJCWFkZHIsIG5leHQsIHdyaXRlLCBwYWdlcywgJm5yKSkKIAkJCQlnb3RvIHNsb3c7Ci0JCX0gd2hpbGUgKGEgIT0gZW5kKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCi0JewotCQlwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JCWRvIHsKLQkJCXBnZF90IHBnZCA9ICpwZ2RwOworCQl9IGVsc2UgaWYgKCFndXBfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgd3JpdGUsIHBhZ2VzLCAmbnIpKQorCQkJZ290byBzbG93OworCX0gd2hpbGUgKHBnZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAotCQkJVk1fQlVHX09OKHNoaWZ0ICE9IG1tdV9wc2l6ZV9kZWZzW2dldF9zbGljZV9wc2l6ZShtbSwgYWRkcildLnNoaWZ0KTsKLSNlbmRpZgotCQkJcHJfZGV2ZWwoIiAgJTAxNmx4OiBub3JtYWwgcGdkICVwXG4iLCBhZGRyLAotCQkJCSAodm9pZCAqKXBnZF92YWwocGdkKSk7Ci0JCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCQlpZiAocGdkX25vbmUocGdkKSkKLQkJCQlnb3RvIHNsb3c7Ci0JCQlpZiAoIWd1cF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCB3cml0ZSwgcGFnZXMsICZucikpCi0JCQkJZ290byBzbG93OwotCQl9IHdoaWxlIChwZ2RwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JfQogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCVZNX0JVR19PTihuciAhPSAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggMWFkZTdlYi4uM2VjZGNlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC05Miw2ICs5Miw3IEBACiBzdHJ1Y3QgaGFzaF9wdGUgKmh0YWJfYWRkcmVzczsKIHVuc2lnbmVkIGxvbmcgaHRhYl9zaXplX2J5dGVzOwogdW5zaWduZWQgbG9uZyBodGFiX2hhc2hfbWFzazsKK0VYUE9SVF9TWU1CT0xfR1BMKGh0YWJfaGFzaF9tYXNrKTsKIGludCBtbXVfbGluZWFyX3BzaXplID0gTU1VX1BBR0VfNEs7CiBpbnQgbW11X3ZpcnR1YWxfcHNpemUgPSBNTVVfUEFHRV80SzsKIGludCBtbXVfdm1hbGxvY19wc2l6ZSA9IE1NVV9QQUdFXzRLOwpAQCAtMTAyLDYgKzEwMyw3IEBACiBpbnQgbW11X2tlcm5lbF9zc2l6ZSA9IE1NVV9TRUdTSVpFXzI1Nk07CiBpbnQgbW11X2hpZ2h1c2VyX3NzaXplID0gTU1VX1NFR1NJWkVfMjU2TTsKIHUxNiBtbXVfc2xiX3NpemUgPSA2NDsKK0VYUE9SVF9TWU1CT0xfR1BMKG1tdV9zbGJfc2l6ZSk7CiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogdW5zaWduZWQgaW50IEhQQUdFX1NISUZUOwogI2VuZGlmCkBAIC0zMzgsNyArMzQwLDcgQEAKIAkJCWVsc2UKIAkJCQlkZWYtPnRsYmllbCA9IDA7CiAKLQkJCURCRygiICVkOiBzaGlmdD0lMDJ4LCBzbGxwPSUwNHgsIGF2cG5tPSUwOHgsICIKKwkJCURCRygiICVkOiBzaGlmdD0lMDJ4LCBzbGxwPSUwNGx4LCBhdnBubT0lMDhseCwgIgogCQkJICAgICJ0bGJpZWw9JWQsIHBlbmM9JWRcbiIsCiAJCQkgICAgaWR4LCBzaGlmdCwgZGVmLT5zbGxwLCBkZWYtPmF2cG5tLCBkZWYtPnRsYmllbCwKIAkJCSAgICBkZWYtPnBlbmMpOwpAQCAtNDgxLDE2ICs0ODMsNiBAQAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAkvKiBSZXNlcnZlIDE2RyBodWdlIHBhZ2UgbWVtb3J5IHNlY3Rpb25zIGZvciBodWdlIHBhZ2VzICovCiAJb2Zfc2Nhbl9mbGF0X2R0KGh0YWJfZHRfc2Nhbl9odWdlcGFnZV9ibG9ja3MsIE5VTEwpOwotCi0vKiBTZXQgZGVmYXVsdCBsYXJnZSBwYWdlIHNpemUuIEN1cnJlbnRseSwgd2UgcGljayAxNk0gb3IgMU0gZGVwZW5kaW5nCi0JICogb24gd2hhdCBpcyBhdmFpbGFibGUKLQkgKi8KLQlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMTZNXS5zaGlmdCkKLQkJSFBBR0VfU0hJRlQgPSBtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xNk1dLnNoaWZ0OwotCS8qIFdpdGggNGsvNGxldmVsIHBhZ2V0YWJsZXMsIHdlIGNhbid0IChmb3Igbm93KSBjb3BlIHdpdGggYQotCSAqIGh1Z2UgcGFnZSBzaXplIDwgUE1EX1NJWkUgKi8KLQllbHNlIGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xTV0uc2hpZnQpCi0JCUhQQUdFX1NISUZUID0gbW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMU1dLnNoaWZ0OwogI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KIH0KIApAQCAtNjcxLDcgKzY2Myw3IEBACiAJCWJhc2UgPSAodW5zaWduZWQgbG9uZylfX3ZhKGxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UpOwogCQlzaXplID0gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKIAotCQlEQkcoImNyZWF0aW5nIG1hcHBpbmcgZm9yIHJlZ2lvbjogJWx4Li4lbHggKHByb3Q6ICV4KVxuIiwKKwkJREJHKCJjcmVhdGluZyBtYXBwaW5nIGZvciByZWdpb246ICVseC4uJWx4IChwcm90OiAlbHgpXG4iLAogCQkgICAgYmFzZSwgc2l6ZSwgcHJvdCk7CiAKICNpZmRlZiBDT05GSUdfVTNfREFSVApAQCAtNzg1LDcgKzc3Nyw3IEBACiAJLyogcGFnZSBpcyBkaXJ0eSAqLwogCWlmICghdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpICYmICFQYWdlUmVzZXJ2ZWQocGFnZSkpIHsKIAkJaWYgKHRyYXAgPT0gMHg0MDApIHsKLQkJCV9fZmx1c2hfZGNhY2hlX2ljYWNoZShwYWdlX2FkZHJlc3MocGFnZSkpOworCQkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBhZ2UpOwogCQkJc2V0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncyk7CiAJCX0gZWxzZQogCQkJcHAgfD0gSFBURV9SX047CkBAIC04NDMsOSArODM1LDkgQEAKICAqIFJlc3VsdCBpcyAwOiBmdWxsIHBlcm1pc3Npb25zLCBfUEFHRV9SVzogcmVhZC1vbmx5LAogICogX1BBR0VfVVNFUiBvciBfUEFHRV9VU0VSfF9QQUdFX1JXOiBubyBhY2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgc3VicGFnZV9wcm90ZWN0aW9uKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBlYSkKK3N0YXRpYyBpbnQgc3VicGFnZV9wcm90ZWN0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGVhKQogewotCXN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUgKnNwdCA9IHBnZF9zdWJwYWdlX3Byb3QocGdkaXIpOworCXN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUgKnNwdCA9ICZtbS0+Y29udGV4dC5zcHQ7CiAJdTMyIHNwcCA9IDA7CiAJdTMyICoqc2JwbSwgKnNicHA7CiAKQEAgLTg3Myw3ICs4NjUsNyBAQAogfQogCiAjZWxzZSAvKiBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCAqLwotc3RhdGljIGlubGluZSBpbnQgc3VicGFnZV9wcm90ZWN0aW9uKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBlYSkKK3N0YXRpYyBpbmxpbmUgaW50IHN1YnBhZ2VfcHJvdGVjdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBlYSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTg4NywxMCArODc5LDExIEBACiAgKi8KIGludCBoYXNoX3BhZ2UodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBhY2Nlc3MsIHVuc2lnbmVkIGxvbmcgdHJhcCkKIHsKLQl2b2lkICpwZ2RpcjsKKwlwZ2RfdCAqcGdkaXI7CiAJdW5zaWduZWQgbG9uZyB2c2lkOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXB0ZV90ICpwdGVwOworCXVuc2lnbmVkIGh1Z2VzaGlmdDsKIAljb25zdCBzdHJ1Y3QgY3B1bWFzayAqdG1wOwogCWludCByYywgdXNlcl9yZWdpb24gPSAwLCBsb2NhbCA9IDA7CiAJaW50IHBzaXplLCBzc2l6ZTsKQEAgLTk0MywzMCArOTM2LDMxIEBACiAJaWYgKHVzZXJfcmVnaW9uICYmIGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIHRtcCkpCiAJCWxvY2FsID0gMTsKIAotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLQkvKiBIYW5kbGUgaHVnZXBhZ2UgcmVnaW9ucyAqLwotCWlmIChIUEFHRV9TSElGVCAmJiBtbXVfaHVnZV9wc2l6ZXNbcHNpemVdKSB7Ci0JCURCR19MT1coIiAtPiBodWdlIHBhZ2UgIVxuIik7Ci0JCXJldHVybiBoYXNoX2h1Z2VfcGFnZShtbSwgYWNjZXNzLCBlYSwgdnNpZCwgbG9jYWwsIHRyYXApOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCi0KICNpZm5kZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQkvKiBJZiB3ZSB1c2UgNEsgcGFnZXMgYW5kIG91ciBwc2l6ZSBpcyBub3QgNEssIHRoZW4gd2UgYXJlIGhpdHRpbmcKLQkgKiBhIHNwZWNpYWwgZHJpdmVyIG1hcHBpbmcsIHdlIG5lZWQgdG8gYWxpZ24gdGhlIGFkZHJlc3MgYmVmb3JlCi0JICogd2UgZmV0Y2ggdGhlIFBURQorCS8qIElmIHdlIHVzZSA0SyBwYWdlcyBhbmQgb3VyIHBzaXplIGlzIG5vdCA0SywgdGhlbiB3ZSBtaWdodAorCSAqIGJlIGhpdHRpbmcgYSBzcGVjaWFsIGRyaXZlciBtYXBwaW5nLCBhbmQgbmVlZCB0byBhbGlnbiB0aGUKKwkgKiBhZGRyZXNzIGJlZm9yZSB3ZSBmZXRjaCB0aGUgUFRFLgorCSAqCisJICogSXQgY291bGQgYWxzbyBiZSBhIGh1Z2VwYWdlIG1hcHBpbmcsIGluIHdoaWNoIGNhc2UgdGhpcyBpcworCSAqIG5vdCBuZWNlc3NhcnksIGJ1dCBpdCdzIG5vdCBoYXJtZnVsLCBlaXRoZXIuCiAJICovCiAJaWYgKHBzaXplICE9IE1NVV9QQUdFXzRLKQogCQllYSAmPSB+KCgxdWwgPDwgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0KSAtIDEpOwogI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCiAKIAkvKiBHZXQgUFRFIGFuZCBwYWdlIHNpemUgZnJvbSBwYWdlIHRhYmxlcyAqLwotCXB0ZXAgPSBmaW5kX2xpbnV4X3B0ZShwZ2RpciwgZWEpOworCXB0ZXAgPSBmaW5kX2xpbnV4X3B0ZV9vcl9odWdlcHRlKHBnZGlyLCBlYSwgJmh1Z2VzaGlmdCk7CiAJaWYgKHB0ZXAgPT0gTlVMTCB8fCAhcHRlX3ByZXNlbnQoKnB0ZXApKSB7CiAJCURCR19MT1coIiBubyBQVEUgIVxuIik7CiAJCXJldHVybiAxOwogCX0KIAorI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwlpZiAoaHVnZXNoaWZ0KQorCQlyZXR1cm4gX19oYXNoX3BhZ2VfaHVnZShlYSwgYWNjZXNzLCB2c2lkLCBwdGVwLCB0cmFwLCBsb2NhbCwKKwkJCQkJc3NpemUsIGh1Z2VzaGlmdCwgcHNpemUpOworI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KKwogI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwogCURCR19MT1coIiBpLXB0ZTogJTAxNmx4XG4iLCBwdGVfdmFsKCpwdGVwKSk7CiAjZWxzZQpAQCAtMTAzMSw3ICsxMDI1LDcgQEAKIAllbHNlCiAjZW5kaWYgLyogQ09ORklHX1BQQ19IQVNfSEFTSF82NEsgKi8KIAl7Ci0JCWludCBzcHAgPSBzdWJwYWdlX3Byb3RlY3Rpb24ocGdkaXIsIGVhKTsKKwkJaW50IHNwcCA9IHN1YnBhZ2VfcHJvdGVjdGlvbihtbSwgZWEpOwogCQlpZiAoYWNjZXNzICYgc3BwKQogCQkJcmMgPSAtMjsKIAkJZWxzZQpAQCAtMTEyMSw3ICsxMTE1LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGhhc2gsIGluZGV4LCBzaGlmdCwgaGlkeCwgc2xvdDsKIAotCURCR19MT1coImZsdXNoX2hhc2hfcGFnZSh2YT0lMDE2eClcbiIsIHZhKTsKKwlEQkdfTE9XKCJmbHVzaF9oYXNoX3BhZ2UodmE9JTAxNmx4KVxuIiwgdmEpOwogCXB0ZV9pdGVyYXRlX2hhc2hlZF9zdWJwYWdlcyhwdGUsIHBzaXplLCB2YSwgaW5kZXgsIHNoaWZ0KSB7CiAJCWhhc2ggPSBocHRfaGFzaCh2YSwgc2hpZnQsIHNzaXplKTsKIAkJaGlkeCA9IF9fcnB0ZV90b19oaWR4KHB0ZSwgaW5kZXgpOwpAQCAtMTEyOSw3ICsxMTIzLDcgQEAKIAkJCWhhc2ggPSB+aGFzaDsKIAkJc2xvdCA9IChoYXNoICYgaHRhYl9oYXNoX21hc2spICogSFBURVNfUEVSX0dST1VQOwogCQlzbG90ICs9IGhpZHggJiBfUFRFSURYX0dST1VQX0lYOwotCQlEQkdfTE9XKCIgc3ViICVkOiBoYXNoPSV4LCBoaWR4PSV4XG4iLCBpbmRleCwgc2xvdCwgaGlkeCk7CisJCURCR19MT1coIiBzdWIgJWxkOiBoYXNoPSVseCwgaGlkeD0lbHhcbiIsIGluZGV4LCBzbG90LCBoaWR4KTsKIAkJcHBjX21kLmhwdGVfaW52YWxpZGF0ZShzbG90LCB2YSwgcHNpemUsIHNzaXplLCBsb2NhbCk7CiAJfSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UtaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UtaGFzaDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5NTM5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS1oYXNoNjQuYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIFBQQzY0IEh1Z2UgVExCIFBhZ2UgU3VwcG9ydCBmb3IgaGFzaCBiYXNlZCBNTVVzIChQT1dFUjQgYW5kIGxhdGVyKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBCYXNlZCBvbiB0aGUgSUEtMzIgdmVyc2lvbjoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgUm9oaXQgU2V0aCA8cm9oaXQuc2V0aEBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKK2ludCBfX2hhc2hfcGFnZV9odWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgYWNjZXNzLCB1bnNpZ25lZCBsb25nIHZzaWQsCisJCSAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgdHJhcCwgaW50IGxvY2FsLCBpbnQgc3NpemUsCisJCSAgICAgdW5zaWduZWQgaW50IHNoaWZ0LCB1bnNpZ25lZCBpbnQgbW11X3BzaXplKQoreworCXVuc2lnbmVkIGxvbmcgb2xkX3B0ZSwgbmV3X3B0ZTsKKwl1bnNpZ25lZCBsb25nIHZhLCByZmxhZ3MsIHBhLCBzejsKKwlsb25nIHNsb3Q7CisJaW50IGVyciA9IDE7CisKKwlCVUdfT04oc2hpZnQgIT0gbW11X3BzaXplX2RlZnNbbW11X3BzaXplXS5zaGlmdCk7CisKKwkvKiBTZWFyY2ggdGhlIExpbnV4IHBhZ2UgdGFibGUgZm9yIGEgbWF0Y2ggd2l0aCB2YSAqLworCXZhID0gaHB0X3ZhKGVhLCB2c2lkLCBzc2l6ZSk7CisKKwkvKgorCSAqIENoZWNrIHRoZSB1c2VyJ3MgYWNjZXNzIHJpZ2h0cyB0byB0aGUgcGFnZS4gIElmIGFjY2VzcyBzaG91bGQgYmUKKwkgKiBwcmV2ZW50ZWQgdGhlbiBzZW5kIHRoZSBwcm9ibGVtIHVwIHRvIGRvX3BhZ2VfZmF1bHQuCisJICovCisJaWYgKHVubGlrZWx5KGFjY2VzcyAmIH5wdGVfdmFsKCpwdGVwKSkpCisJCWdvdG8gb3V0OworCS8qCisJICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHB0ZSAob2xkX3B0ZSkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYnVpbGQKKwkgKiBvciB1cGRhdGUgYW4gSFBURS4gVGhlcmUgYXJlIDIgY2FzZXM6CisJICoKKwkgKiAxLiBUaGVyZSBpcyBhIHZhbGlkIChwcmVzZW50KSBwdGUgd2l0aCBubyBhc3NvY2lhdGVkIEhQVEUgKHRoaXMgaXMKKwkgKgl0aGUgbW9zdCBjb21tb24gY2FzZSkKKwkgKiAyLiBUaGVyZSBpcyBhIHZhbGlkIChwcmVzZW50KSBwdGUgd2l0aCBhbiBhc3NvY2lhdGVkIEhQVEUuIFRoZQorCSAqCWN1cnJlbnQgdmFsdWVzIG9mIHRoZSBwcCBiaXRzIGluIHRoZSBIUFRFIHByZXZlbnQgYWNjZXNzCisJICoJYmVjYXVzZSB3ZSBhcmUgZG9pbmcgc29mdHdhcmUgRElSVFkgYml0IG1hbmFnZW1lbnQgYW5kIHRoZQorCSAqCXBhZ2UgaXMgY3VycmVudGx5IG5vdCBESVJUWS4KKwkgKi8KKworCisJZG8geworCQlvbGRfcHRlID0gcHRlX3ZhbCgqcHRlcCk7CisJCWlmIChvbGRfcHRlICYgX1BBR0VfQlVTWSkKKwkJCWdvdG8gb3V0OworCQluZXdfcHRlID0gb2xkX3B0ZSB8IF9QQUdFX0JVU1kgfCBfUEFHRV9BQ0NFU1NFRDsKKwl9IHdoaWxlKG9sZF9wdGUgIT0gX19jbXB4Y2hnX3U2NCgodW5zaWduZWQgbG9uZyAqKXB0ZXAsCisJCQkJCSBvbGRfcHRlLCBuZXdfcHRlKSk7CisKKwlyZmxhZ3MgPSAweDIgfCAoIShuZXdfcHRlICYgX1BBR0VfUlcpKTsKKwkvKiBfUEFHRV9FWEVDIC0+IEhXX05PX0VYRUMgc2luY2UgaXQncyBpbnZlcnRlZCAqLworCXJmbGFncyB8PSAoKG5ld19wdGUgJiBfUEFHRV9FWEVDKSA/IDAgOiBIUFRFX1JfTik7CisJc3ogPSAoKDFVTCkgPDwgc2hpZnQpOworCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSkKKwkJLyogTm8gQ1BVIGhhcyBodWdlcGFnZXMgYnV0IGxhY2tzIG5vIGV4ZWN1dGUsIHNvIHdlCisJCSAqIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdCBjYXNlICovCisJCXJmbGFncyA9IGhhc2hfcGFnZV9kb19sYXp5X2ljYWNoZShyZmxhZ3MsIF9fcHRlKG9sZF9wdGUpLCB0cmFwKTsKKworCS8qIENoZWNrIGlmIHB0ZSBhbHJlYWR5IGhhcyBhbiBocHRlIChjYXNlIDIpICovCisJaWYgKHVubGlrZWx5KG9sZF9wdGUgJiBfUEFHRV9IQVNIUFRFKSkgeworCQkvKiBUaGVyZSBNSUdIVCBiZSBhbiBIUFRFIGZvciB0aGlzIHB0ZSAqLworCQl1bnNpZ25lZCBsb25nIGhhc2gsIHNsb3Q7CisKKwkJaGFzaCA9IGhwdF9oYXNoKHZhLCBzaGlmdCwgc3NpemUpOworCQlpZiAob2xkX3B0ZSAmIF9QQUdFX0ZfU0VDT05EKQorCQkJaGFzaCA9IH5oYXNoOworCQlzbG90ID0gKGhhc2ggJiBodGFiX2hhc2hfbWFzaykgKiBIUFRFU19QRVJfR1JPVVA7CisJCXNsb3QgKz0gKG9sZF9wdGUgJiBfUEFHRV9GX0dJWCkgPj4gMTI7CisKKwkJaWYgKHBwY19tZC5ocHRlX3VwZGF0ZXBwKHNsb3QsIHJmbGFncywgdmEsIG1tdV9wc2l6ZSwKKwkJCQkJIHNzaXplLCBsb2NhbCkgPT0gLTEpCisJCQlvbGRfcHRlICY9IH5fUEFHRV9IUFRFRkxBR1M7CisJfQorCisJaWYgKGxpa2VseSghKG9sZF9wdGUgJiBfUEFHRV9IQVNIUFRFKSkpIHsKKwkJdW5zaWduZWQgbG9uZyBoYXNoID0gaHB0X2hhc2godmEsIHNoaWZ0LCBzc2l6ZSk7CisJCXVuc2lnbmVkIGxvbmcgaHB0ZV9ncm91cDsKKworCQlwYSA9IHB0ZV9wZm4oX19wdGUob2xkX3B0ZSkpIDw8IFBBR0VfU0hJRlQ7CisKK3JlcGVhdDoKKwkJaHB0ZV9ncm91cCA9ICgoaGFzaCAmIGh0YWJfaGFzaF9tYXNrKSAqCisJCQkgICAgICBIUFRFU19QRVJfR1JPVVApICYgfjB4N1VMOworCisJCS8qIGNsZWFyIEhQVEUgc2xvdCBpbmZvcm1hdGlvbnMgaW4gbmV3IFBURSAqLworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJCW5ld19wdGUgPSAobmV3X3B0ZSAmIH5fUEFHRV9IUFRFRkxBR1MpIHwgX1BBR0VfSFBURV9TVUIwOworI2Vsc2UKKwkJbmV3X3B0ZSA9IChuZXdfcHRlICYgfl9QQUdFX0hQVEVGTEFHUykgfCBfUEFHRV9IQVNIUFRFOworI2VuZGlmCisJCS8qIEFkZCBpbiBXSU1HIGJpdHMgKi8KKwkJcmZsYWdzIHw9IChuZXdfcHRlICYgKF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX05PX0NBQ0hFIHwKKwkJCQkgICAgICBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX0dVQVJERUQpKTsKKworCQkvKiBJbnNlcnQgaW50byB0aGUgaGFzaCB0YWJsZSwgcHJpbWFyeSBzbG90ICovCisJCXNsb3QgPSBwcGNfbWQuaHB0ZV9pbnNlcnQoaHB0ZV9ncm91cCwgdmEsIHBhLCByZmxhZ3MsIDAsCisJCQkJCSAgbW11X3BzaXplLCBzc2l6ZSk7CisKKwkJLyogUHJpbWFyeSBpcyBmdWxsLCB0cnkgdGhlIHNlY29uZGFyeSAqLworCQlpZiAodW5saWtlbHkoc2xvdCA9PSAtMSkpIHsKKwkJCWhwdGVfZ3JvdXAgPSAoKH5oYXNoICYgaHRhYl9oYXNoX21hc2spICoKKwkJCQkgICAgICBIUFRFU19QRVJfR1JPVVApICYgfjB4N1VMOworCQkJc2xvdCA9IHBwY19tZC5ocHRlX2luc2VydChocHRlX2dyb3VwLCB2YSwgcGEsIHJmbGFncywKKwkJCQkJCSAgSFBURV9WX1NFQ09OREFSWSwKKwkJCQkJCSAgbW11X3BzaXplLCBzc2l6ZSk7CisJCQlpZiAoc2xvdCA9PSAtMSkgeworCQkJCWlmIChtZnRiKCkgJiAweDEpCisJCQkJCWhwdGVfZ3JvdXAgPSAoKGhhc2ggJiBodGFiX2hhc2hfbWFzaykgKgorCQkJCQkJICAgICAgSFBURVNfUEVSX0dST1VQKSZ+MHg3VUw7CisKKwkJCQlwcGNfbWQuaHB0ZV9yZW1vdmUoaHB0ZV9ncm91cCk7CisJCQkJZ290byByZXBlYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCX0KKworCQlpZiAodW5saWtlbHkoc2xvdCA9PSAtMikpCisJCQlwYW5pYygiaGFzaF9odWdlX3BhZ2U6IHB0ZV9pbnNlcnQgZmFpbGVkXG4iKTsKKworCQluZXdfcHRlIHw9IChzbG90IDw8IDEyKSAmIChfUEFHRV9GX1NFQ09ORCB8IF9QQUdFX0ZfR0lYKTsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gdXNlIGxkYXJ4L3N0ZGN4IGhlcmUKKwkgKi8KKwkqcHRlcCA9IF9fcHRlKG5ld19wdGUgJiB+X1BBR0VfQlVTWSk7CisKKwllcnIgPSAwOworCisgb3V0OgorCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IDkwZGY2ZmYuLjEyM2Y3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC03LDI5ICs3LDE3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIFJvaGl0IFNldGggPHJvaGl0LnNldGhAaW50ZWwuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL21tYW4uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NwdS5oPgogCiAjZGVmaW5lIFBBR0VfU0hJRlRfNjRLCTE2CiAjZGVmaW5lIFBBR0VfU0hJRlRfMTZNCTI0CiAjZGVmaW5lIFBBR0VfU0hJRlRfMTZHCTM0CiAKLSNkZWZpbmUgTlVNX0xPV19BUkVBUwkoMHgxMDAwMDAwMDBVTCA+PiBTSURfU0hJRlQpCi0jZGVmaW5lIE5VTV9ISUdIX0FSRUFTCShQR1RBQkxFX1JBTkdFID4+IEhUTEJfQVJFQV9TSElGVCkKICNkZWZpbmUgTUFYX05VTUJFUl9HUEFHRVMJMTAyNAogCiAvKiBUcmFja3MgdGhlIDE2RyBwYWdlcyBhZnRlciB0aGUgZGV2aWNlIHRyZWUgaXMgc2Nhbm5lZCBhbmQgYmVmb3JlIHRoZQpAQCAtMzcsNTMgKzI1LDE3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBncGFnZV9mcmVlYXJyYXlbTUFYX05VTUJFUl9HUEFHRVNdOwogc3RhdGljIHVuc2lnbmVkIG5yX2dwYWdlczsKIAotLyogQXJyYXkgb2YgdmFsaWQgaHVnZSBwYWdlIHNpemVzIC0gbm9uLXplcm8gdmFsdWUoaHVnZXB0ZV9zaGlmdCkgaXMKLSAqIHN0b3JlZCBmb3IgdGhlIGh1Z2UgcGFnZSBzaXplcyB0aGF0IGFyZSB2YWxpZC4KLSAqLwotdW5zaWduZWQgaW50IG1tdV9odWdlX3BzaXplc1tNTVVfUEFHRV9DT1VOVF0gPSB7IH07IC8qIGluaXRpYWxpemUgYWxsIHRvIDAgKi8KLQotI2RlZmluZSBodWdlcHRlX3NoaWZ0CQkJbW11X2h1Z2VfcHNpemVzCi0jZGVmaW5lIFBUUlNfUEVSX0hVR0VQVEUocHNpemUpCQkoMSA8PCBodWdlcHRlX3NoaWZ0W3BzaXplXSkKLSNkZWZpbmUgSFVHRVBURV9UQUJMRV9TSVpFKHBzaXplKQkoc2l6ZW9mKHB0ZV90KSA8PCBodWdlcHRlX3NoaWZ0W3BzaXplXSkKLQotI2RlZmluZSBIVUdFUERfU0hJRlQocHNpemUpCQkobW11X3BzaXplX3RvX3NoaWZ0KHBzaXplKSBcCi0JCQkJCQkrIGh1Z2VwdGVfc2hpZnRbcHNpemVdKQotI2RlZmluZSBIVUdFUERfU0laRShwc2l6ZSkJCSgxVUwgPDwgSFVHRVBEX1NISUZUKHBzaXplKSkKLSNkZWZpbmUgSFVHRVBEX01BU0socHNpemUpCQkofihIVUdFUERfU0laRShwc2l6ZSktMSkpCi0KLS8qIFN1YnRyYWN0IG9uZSBmcm9tIGFycmF5IHNpemUgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIGEgY2FjaGUgZm9yIDRLIHNpbmNlCi0gKiBpcyBub3QgYSBodWdlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBIVUdFX1BHVEFCTEVfSU5ERVgocHNpemUpCShIVUdFUFRFX0NBQ0hFX05VTSArIHBzaXplIC0gMSkKLSNkZWZpbmUgSFVHRVBURV9DQUNIRV9OQU1FKHBzaXplKQkoaHVnZV9wZ3RhYmxlX2NhY2hlX25hbWVbcHNpemVdKQotCi1zdGF0aWMgY29uc3QgY2hhciAqaHVnZV9wZ3RhYmxlX2NhY2hlX25hbWVbTU1VX1BBR0VfQ09VTlRdID0gewotCVtNTVVfUEFHRV82NEtdCT0gImh1Z2VwdGVfY2FjaGVfNjRLIiwKLQlbTU1VX1BBR0VfMU1dCT0gImh1Z2VwdGVfY2FjaGVfMU0iLAotCVtNTVVfUEFHRV8xNk1dCT0gImh1Z2VwdGVfY2FjaGVfMTZNIiwKLQlbTU1VX1BBR0VfMTZHXQk9ICJodWdlcHRlX2NhY2hlXzE2RyIsCi19OwotCiAvKiBGbGFnIHRvIG1hcmsgaHVnZSBQRCBwb2ludGVycy4gIFRoaXMgbWVhbnMgcG1kX2JhZCgpIGFuZCBwdWRfYmFkKCkKICAqIHdpbGwgY2hva2Ugb24gcG9pbnRlcnMgdG8gaHVnZXB0ZSB0YWJsZXMsIHdoaWNoIGlzIGhhbmR5IGZvcgogICogY2F0Y2hpbmcgc2NyZXd1cHMgZWFybHkuICovCi0jZGVmaW5lIEhVR0VQRF9PSwkweDEKLQotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBkOyB9IGh1Z2VwZF90OwotCi0jZGVmaW5lIGh1Z2VwZF9ub25lKGhwZCkJKChocGQpLnBkID09IDApCiAKIHN0YXRpYyBpbmxpbmUgaW50IHNoaWZ0X3RvX21tdV9wc2l6ZSh1bnNpZ25lZCBpbnQgc2hpZnQpCiB7Ci0Jc3dpdGNoIChzaGlmdCkgewotI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotCWNhc2UgUEFHRV9TSElGVF82NEs6Ci0JICAgIHJldHVybiBNTVVfUEFHRV82NEs7Ci0jZW5kaWYKLQljYXNlIFBBR0VfU0hJRlRfMTZNOgotCSAgICByZXR1cm4gTU1VX1BBR0VfMTZNOwotCWNhc2UgUEFHRV9TSElGVF8xNkc6Ci0JICAgIHJldHVybiBNTVVfUEFHRV8xNkc7Ci0JfQorCWludCBwc2l6ZTsKKworCWZvciAocHNpemUgPSAwOyBwc2l6ZSA8IE1NVV9QQUdFX0NPVU5UOyArK3BzaXplKQorCQlpZiAobW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0ID09IHNoaWZ0KQorCQkJcmV0dXJuIHBzaXplOwogCXJldHVybiAtMTsKIH0KIApAQCAtOTQsNzEgKzQ2LDEyNiBAQAogCUJVRygpOwogfQogCisjZGVmaW5lIGh1Z2VwZF9ub25lKGhwZCkJKChocGQpLnBkID09IDApCisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgKmh1Z2VwZF9wYWdlKGh1Z2VwZF90IGhwZCkKIHsKLQlCVUdfT04oIShocGQucGQgJiBIVUdFUERfT0spKTsKLQlyZXR1cm4gKHB0ZV90ICopKGhwZC5wZCAmIH5IVUdFUERfT0spOworCUJVR19PTighaHVnZXBkX29rKGhwZCkpOworCXJldHVybiAocHRlX3QgKikoKGhwZC5wZCAmIH5IVUdFUERfU0hJRlRfTUFTSykgfCAweGMwMDAwMDAwMDAwMDAwMDApOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcHRlX29mZnNldChodWdlcGRfdCAqaHBkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdlcGRfc2hpZnQoaHVnZXBkX3QgaHBkKQogewotCXVuc2lnbmVkIGludCBzaGlmdCA9IGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpOwotCWludCBwc2l6ZSA9IHNoaWZ0X3RvX21tdV9wc2l6ZShzaGlmdCk7Ci0JdW5zaWduZWQgbG9uZyBpZHggPSAoKGFkZHIgPj4gc2hpZnQpICYgKFBUUlNfUEVSX0hVR0VQVEUocHNpemUpLTEpKTsKKwlyZXR1cm4gaHBkLnBkICYgSFVHRVBEX1NISUZUX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKmh1Z2VwdGVfb2Zmc2V0KGh1Z2VwZF90ICpocGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIHBkc2hpZnQpCit7CisJdW5zaWduZWQgbG9uZyBpZHggPSAoYWRkciAmICgoMVVMIDw8IHBkc2hpZnQpIC0gMSkpID4+IGh1Z2VwZF9zaGlmdCgqaHBkcCk7CiAJcHRlX3QgKmRpciA9IGh1Z2VwZF9wYWdlKCpocGRwKTsKIAogCXJldHVybiBkaXIgKyBpZHg7CiB9CiAKLXN0YXRpYyBpbnQgX19odWdlcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBodWdlcGRfdCAqaHBkcCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IHBzaXplKQorcHRlX3QgKmZpbmRfbGludXhfcHRlX29yX2h1Z2VwdGUocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCAqc2hpZnQpCiB7Ci0JcHRlX3QgKm5ldyA9IGttZW1fY2FjaGVfemFsbG9jKHBndGFibGVfY2FjaGVbSFVHRV9QR1RBQkxFX0lOREVYKHBzaXplKV0sCi0JCQkJICAgICAgR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCXBnZF90ICpwZzsKKwlwdWRfdCAqcHU7CisJcG1kX3QgKnBtOworCWh1Z2VwZF90ICpocGRwID0gTlVMTDsKKwl1bnNpZ25lZCBwZHNoaWZ0ID0gUEdESVJfU0hJRlQ7CisKKwlpZiAoc2hpZnQpCisJCSpzaGlmdCA9IDA7CisKKwlwZyA9IHBnZGlyICsgcGdkX2luZGV4KGVhKTsKKwlpZiAoaXNfaHVnZXBkKHBnKSkgeworCQlocGRwID0gKGh1Z2VwZF90ICopcGc7CisJfSBlbHNlIGlmICghcGdkX25vbmUoKnBnKSkgeworCQlwZHNoaWZ0ID0gUFVEX1NISUZUOworCQlwdSA9IHB1ZF9vZmZzZXQocGcsIGVhKTsKKwkJaWYgKGlzX2h1Z2VwZChwdSkpCisJCQlocGRwID0gKGh1Z2VwZF90ICopcHU7CisJCWVsc2UgaWYgKCFwdWRfbm9uZSgqcHUpKSB7CisJCQlwZHNoaWZ0ID0gUE1EX1NISUZUOworCQkJcG0gPSBwbWRfb2Zmc2V0KHB1LCBlYSk7CisJCQlpZiAoaXNfaHVnZXBkKHBtKSkKKwkJCQlocGRwID0gKGh1Z2VwZF90ICopcG07CisJCQllbHNlIGlmICghcG1kX25vbmUoKnBtKSkgeworCQkJCXJldHVybiBwdGVfb2Zmc2V0X21hcChwbSwgZWEpOworCQkJfQorCQl9CisJfQorCisJaWYgKCFocGRwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzaGlmdCkKKwkJKnNoaWZ0ID0gaHVnZXBkX3NoaWZ0KCpocGRwKTsKKwlyZXR1cm4gaHVnZXB0ZV9vZmZzZXQoaHBkcCwgZWEsIHBkc2hpZnQpOworfQorCitwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGZpbmRfbGludXhfcHRlX29yX2h1Z2VwdGUobW0tPnBnZCwgYWRkciwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgX19odWdlcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBodWdlcGRfdCAqaHBkcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgcGRzaGlmdCwgdW5zaWduZWQgcHNoaWZ0KQoreworCXB0ZV90ICpuZXcgPSBrbWVtX2NhY2hlX3phbGxvYyhQR1RfQ0FDSEUocGRzaGlmdCAtIHBzaGlmdCksCisJCQkJICAgICAgIEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKworCUJVR19PTihwc2hpZnQgPiBIVUdFUERfU0hJRlRfTUFTSyk7CisJQlVHX09OKCh1bnNpZ25lZCBsb25nKW5ldyAmIEhVR0VQRF9TSElGVF9NQVNLKTsKIAogCWlmICghIG5ldykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCWlmICghaHVnZXBkX25vbmUoKmhwZHApKQotCQlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZVtIVUdFX1BHVEFCTEVfSU5ERVgocHNpemUpXSwgbmV3KTsKKwkJa21lbV9jYWNoZV9mcmVlKFBHVF9DQUNIRShwZHNoaWZ0IC0gcHNoaWZ0KSwgbmV3KTsKIAllbHNlCi0JCWhwZHAtPnBkID0gKHVuc2lnbmVkIGxvbmcpbmV3IHwgSFVHRVBEX09LOworCQlocGRwLT5wZCA9ICgodW5zaWduZWQgbG9uZyluZXcgJiB+MHg4MDAwMDAwMDAwMDAwMDAwKSB8IHBzaGlmdDsKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKK3B0ZV90ICpodWdlX3B0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHN6KQoreworCXBnZF90ICpwZzsKKwlwdWRfdCAqcHU7CisJcG1kX3QgKnBtOworCWh1Z2VwZF90ICpocGRwID0gTlVMTDsKKwl1bnNpZ25lZCBwc2hpZnQgPSBfX2Zmcyhzeik7CisJdW5zaWduZWQgcGRzaGlmdCA9IFBHRElSX1NISUZUOwogCi1zdGF0aWMgcHVkX3QgKmhwdWRfb2Zmc2V0KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQotewotCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA8IFBVRF9TSElGVCkKLQkJcmV0dXJuIHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKLQllbHNlCi0JCXJldHVybiAocHVkX3QgKikgcGdkOwotfQotc3RhdGljIHB1ZF90ICpocHVkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQotewotCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA8IFBVRF9TSElGVCkKLQkJcmV0dXJuIHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKLQllbHNlCi0JCXJldHVybiAocHVkX3QgKikgcGdkOwotfQotc3RhdGljIHBtZF90ICpocG1kX29mZnNldChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKLXsKLQlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPCBQTURfU0hJRlQpCi0JCXJldHVybiBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gKHBtZF90ICopIHB1ZDsKLX0KLXN0YXRpYyBwbWRfdCAqaHBtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKLXsKLQlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPCBQTURfU0hJRlQpCi0JCXJldHVybiBwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gKHBtZF90ICopIHB1ZDsKKwlhZGRyICY9IH4oc3otMSk7CisKKwlwZyA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOworCWlmIChwc2hpZnQgPj0gUFVEX1NISUZUKSB7CisJCWhwZHAgPSAoaHVnZXBkX3QgKilwZzsKKwl9IGVsc2UgeworCQlwZHNoaWZ0ID0gUFVEX1NISUZUOworCQlwdSA9IHB1ZF9hbGxvYyhtbSwgcGcsIGFkZHIpOworCQlpZiAocHNoaWZ0ID49IFBNRF9TSElGVCkgeworCQkJaHBkcCA9IChodWdlcGRfdCAqKXB1OworCQl9IGVsc2UgeworCQkJcGRzaGlmdCA9IFBNRF9TSElGVDsKKwkJCXBtID0gcG1kX2FsbG9jKG1tLCBwdSwgYWRkcik7CisJCQlocGRwID0gKGh1Z2VwZF90ICopcG07CisJCX0KKwl9CisKKwlpZiAoIWhwZHApCisJCXJldHVybiBOVUxMOworCisJQlVHX09OKCFodWdlcGRfbm9uZSgqaHBkcCkgJiYgIWh1Z2VwZF9vaygqaHBkcCkpOworCisJaWYgKGh1Z2VwZF9ub25lKCpocGRwKSAmJiBfX2h1Z2VwdGVfYWxsb2MobW0sIGhwZHAsIGFkZHIsIHBkc2hpZnQsIHBzaGlmdCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGh1Z2VwdGVfb2Zmc2V0KGhwZHAsIGFkZHIsIHBkc2hpZnQpOwogfQogCiAvKiBCdWlsZCBsaXN0IG9mIGFkZHJlc3NlcyBvZiBnaWdhbnRpYyBwYWdlcy4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBlYXJseQpAQCAtMTkyLDk0ICsxOTksMzggQEAKIAlyZXR1cm4gMTsKIH0KIAotCi0vKiBNb2RlbGxlZCBhZnRlciBmaW5kX2xpbnV4X3B0ZSgpICovCi1wdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcGdkX3QgKnBnOwotCXB1ZF90ICpwdTsKLQlwbWRfdCAqcG07Ci0KLQl1bnNpZ25lZCBpbnQgcHNpemU7Ci0JdW5zaWduZWQgaW50IHNoaWZ0OwotCXVuc2lnbmVkIGxvbmcgc3o7Ci0Jc3RydWN0IGhzdGF0ZSAqaHN0YXRlOwotCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKTsKLQlzaGlmdCA9IG1tdV9wc2l6ZV90b19zaGlmdChwc2l6ZSk7Ci0Jc3ogPSAoKDFVTCkgPDwgc2hpZnQpOwotCWhzdGF0ZSA9IHNpemVfdG9faHN0YXRlKHN6KTsKLQotCWFkZHIgJj0gaHN0YXRlLT5tYXNrOwotCi0JcGcgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKLQlpZiAoIXBnZF9ub25lKCpwZykpIHsKLQkJcHUgPSBocHVkX29mZnNldChwZywgYWRkciwgaHN0YXRlKTsKLQkJaWYgKCFwdWRfbm9uZSgqcHUpKSB7Ci0JCQlwbSA9IGhwbWRfb2Zmc2V0KHB1LCBhZGRyLCBoc3RhdGUpOwotCQkJaWYgKCFwbWRfbm9uZSgqcG0pKQotCQkJCXJldHVybiBodWdlcHRlX29mZnNldCgoaHVnZXBkX3QgKilwbSwgYWRkciwKLQkJCQkJCSAgICAgIGhzdGF0ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotcHRlX3QgKmh1Z2VfcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHN6KQotewotCXBnZF90ICpwZzsKLQlwdWRfdCAqcHU7Ci0JcG1kX3QgKnBtOwotCWh1Z2VwZF90ICpocGRwID0gTlVMTDsKLQlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7Ci0JdW5zaWduZWQgaW50IHBzaXplOwotCWhzdGF0ZSA9IHNpemVfdG9faHN0YXRlKHN6KTsKLQotCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKTsKLQlCVUdfT04oIW1tdV9odWdlX3BzaXplc1twc2l6ZV0pOwotCi0JYWRkciAmPSBoc3RhdGUtPm1hc2s7Ci0KLQlwZyA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwotCXB1ID0gaHB1ZF9hbGxvYyhtbSwgcGcsIGFkZHIsIGhzdGF0ZSk7Ci0KLQlpZiAocHUpIHsKLQkJcG0gPSBocG1kX2FsbG9jKG1tLCBwdSwgYWRkciwgaHN0YXRlKTsKLQkJaWYgKHBtKQotCQkJaHBkcCA9IChodWdlcGRfdCAqKXBtOwotCX0KLQotCWlmICghIGhwZHApCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGh1Z2VwZF9ub25lKCpocGRwKSAmJiBfX2h1Z2VwdGVfYWxsb2MobW0sIGhwZHAsIGFkZHIsIHBzaXplKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gaHVnZXB0ZV9vZmZzZXQoaHBkcCwgYWRkciwgaHN0YXRlKTsKLX0KLQogaW50IGh1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKmFkZHIsIHB0ZV90ICpwdGVwKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2h1Z2VwdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgaHVnZXBkX3QgKmhwZHAsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHBzaXplKQorc3RhdGljIHZvaWQgZnJlZV9odWdlcGRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgaHVnZXBkX3QgKmhwZHAsIGludCBwZHNoaWZ0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsb29yLCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCiB7CiAJcHRlX3QgKmh1Z2VwdGUgPSBodWdlcGRfcGFnZSgqaHBkcCk7CisJdW5zaWduZWQgc2hpZnQgPSBodWdlcGRfc2hpZnQoKmhwZHApOworCXVuc2lnbmVkIGxvbmcgcGRtYXNrID0gfigoMVVMIDw8IHBkc2hpZnQpIC0gMSk7CisKKwlzdGFydCAmPSBwZG1hc2s7CisJaWYgKHN0YXJ0IDwgZmxvb3IpCisJCXJldHVybjsKKwlpZiAoY2VpbGluZykgeworCQljZWlsaW5nICY9IHBkbWFzazsKKwkJaWYgKCEgY2VpbGluZykKKwkJCXJldHVybjsKKwl9CisJaWYgKGVuZCAtIDEgPiBjZWlsaW5nIC0gMSkKKwkJcmV0dXJuOwogCiAJaHBkcC0+cGQgPSAwOwogCXRsYi0+bmVlZF9mbHVzaCA9IDE7Ci0JcGd0YWJsZV9mcmVlX3RsYih0bGIsIHBndGFibGVfZnJlZV9jYWNoZShodWdlcHRlLAotCQkJCQkJIEhVR0VQVEVfQ0FDSEVfTlVNK3BzaXplLTEsCi0JCQkJCQkgUEdGX0NBQ0hFTlVNX01BU0spKTsKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgaHVnZXB0ZSwgcGRzaGlmdCAtIHNoaWZ0KTsKIH0KIAogc3RhdGljIHZvaWQgaHVnZXRsYl9mcmVlX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdWRfdCAqcHVkLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nLAotCQkJCSAgIHVuc2lnbmVkIGludCBwc2l6ZSkKKwkJCQkgICB1bnNpZ25lZCBsb25nIGZsb29yLCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCiB7CiAJcG1kX3QgKnBtZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC0yOTEsNyArMjQyLDggQEAKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocG1kX25vbmUoKnBtZCkpCiAJCQljb250aW51ZTsKLQkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcG1kLCBwc2l6ZSk7CisJCWZyZWVfaHVnZXBkX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcG1kLCBQTURfU0hJRlQsCisJCQkJICBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CiAJfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKIAlzdGFydCAmPSBQVURfTUFTSzsKQEAgLTMxNywyMyArMjY5LDE5IEBACiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBpbnQgc2hpZnQ7Ci0JdW5zaWduZWQgaW50IHBzaXplID0gZ2V0X3NsaWNlX3BzaXplKHRsYi0+bW0sIGFkZHIpOwotCXNoaWZ0ID0gbW11X3BzaXplX3RvX3NoaWZ0KHBzaXplKTsKIAogCXN0YXJ0ID0gYWRkcjsKIAlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CiAJZG8gewogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmIChzaGlmdCA8IFBNRF9TSElGVCkgeworCQlpZiAoIWlzX2h1Z2VwZChwdWQpKSB7CiAJCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCiAJCQkJY29udGludWU7CiAJCQlodWdldGxiX2ZyZWVfcG1kX3JhbmdlKHRsYiwgcHVkLCBhZGRyLCBuZXh0LCBmbG9vciwKLQkJCQkJICAgICAgIGNlaWxpbmcsIHBzaXplKTsKKwkJCQkJICAgICAgIGNlaWxpbmcpOwogCQl9IGVsc2UgewotCQkJaWYgKHB1ZF9ub25lKCpwdWQpKQotCQkJCWNvbnRpbnVlOwotCQkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcHVkLCBwc2l6ZSk7CisJCQlmcmVlX2h1Z2VwZF9yYW5nZSh0bGIsIChodWdlcGRfdCAqKXB1ZCwgUFVEX1NISUZULAorCQkJCQkgIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKIAkJfQogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCkBAIC0zNjQsMTIxICszMTIsNTYgQEAKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCiAJLyoKLQkgKiBDb21tZW50cyBiZWxvdyB0YWtlIGZyb20gdGhlIG5vcm1hbCBmcmVlX3BnZF9yYW5nZSgpLiAgVGhleQotCSAqIGFwcGx5IGhlcmUgdG9vLiAgVGhlIHRlc3RzIGFnYWluc3QgSFVHRVBEX01BU0sgYmVsb3cgYXJlCi0JICogZXNzZW50aWFsLCBiZWNhdXNlIHdlICpkb24ndCogdGVzdCBmb3IgdGhpcyBhdCB0aGUgYm90dG9tCi0JICogbGV2ZWwuICBXaXRob3V0IHRoZW0gd2UnbGwgYXR0ZW1wdCB0byBmcmVlIGEgaHVnZXB0ZSB0YWJsZQotCSAqIHdoZW4gd2UgdW5tYXAganVzdCBwYXJ0IG9mIGl0LCBldmVuIGlmIHRoZXJlIGFyZSBvdGhlcgotCSAqIGFjdGl2ZSBtYXBwaW5ncyB1c2luZyBpdC4KKwkgKiBCZWNhdXNlIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgcG9zc2libGUgcGFnZXRhYmxlCisJICogbGF5b3V0cyBmb3IgaHVnZXBhZ2UgcmFuZ2VzLCB3ZSBsaW1pdCBrbm93bGVkZ2Ugb2YgaG93CisJICogdGhpbmdzIHNob3VsZCBiZSBsYWlkIG91dCB0byB0aGUgYWxsb2NhdGlvbiBwYXRoCisJICogKGh1Z2VfcHRlX2FsbG9jKCksIGFib3ZlKS4gIEV2ZXJ5dGhpbmcgZWxzZSB3b3JrcyBvdXQgdGhlCisJICogc3RydWN0dXJlIGFzIGl0IGdvZXMgZnJvbSBpbmZvcm1hdGlvbiBpbiB0aGUgaHVnZXBkCisJICogcG9pbnRlcnMuICBUaGF0IG1lYW5zIHRoYXQgd2UgY2FuJ3QgaGVyZSB1c2UgdGhlCisJICogb3B0aW1pemF0aW9uIHVzZWQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVfcGdkX3JhbmdlKCksIG9mCisJICogY2hlY2tpbmcgd2hldGhlciB3ZSdyZSBhY3R1YWxseSBjb3ZlcmluZyBhIGxhcmdlIGVub3VnaAorCSAqIHJhbmdlIHRvIGhhdmUgdG8gZG8gYW55dGhpbmcgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgd2FsaworCSAqIGluc3RlYWQgb2YgYXQgdGhlIGJvdHRvbS4KIAkgKgotCSAqIFRoZSBuZXh0IGZldyBsaW5lcyBoYXZlIGdpdmVuIHVzIGxvdHMgb2YgZ3JpZWYuLi4KLQkgKgotCSAqIFdoeSBhcmUgd2UgdGVzdGluZyBIVUdFUEQqIGF0IHRoaXMgdG9wIGxldmVsPyAgQmVjYXVzZQotCSAqIG9mdGVuIHRoZXJlIHdpbGwgYmUgbm8gd29yayB0byBkbyBhdCBhbGwsIGFuZCB3ZSdkIHByZWZlcgotCSAqIG5vdCB0byBnbyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZSBib3R0b20ganVzdCB0byBkaXNjb3ZlcgotCSAqIHRoYXQuCi0JICoKLQkgKiBXaHkgYWxsIHRoZXNlICItIDEicz8gIEJlY2F1c2UgMCByZXByZXNlbnRzIGJvdGggdGhlIGJvdHRvbQotCSAqIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGFuZCB0aGUgdG9wIG9mIGl0ICh1c2luZyAtMSBmb3IgdGhlCi0JICogdG9wIHdvdWxkbid0IGhlbHAgbXVjaDogdGhlIG1hc2tzIHdvdWxkIGRvIHRoZSB3cm9uZyB0aGluZykuCi0JICogVGhlIHJ1bGUgaXMgdGhhdCBhZGRyIDAgYW5kIGZsb29yIDAgcmVmZXIgdG8gdGhlIGJvdHRvbSBvZgotCSAqIHRoZSBhZGRyZXNzIHNwYWNlLCBidXQgZW5kIDAgYW5kIGNlaWxpbmcgMCByZWZlciB0byB0aGUgdG9wCi0JICogQ29tcGFyaXNvbnMgbmVlZCB0byB1c2UgImVuZCAtIDEiIGFuZCAiY2VpbGluZyAtIDEiICh0aG91Z2gKLQkgKiB0aGF0IGVuZCAwIGNhc2Ugc2hvdWxkIGJlIG15dGhpY2FsKS4KLQkgKgotCSAqIFdoZXJldmVyIGFkZHIgaXMgYnJvdWdodCB1cCBvciBjZWlsaW5nIGJyb3VnaHQgZG93biwgd2UKLQkgKiBtdXN0IGJlIGNhcmVmdWwgdG8gcmVqZWN0ICJ0aGUgb3Bwb3NpdGUgMCIgYmVmb3JlIGl0Ci0JICogY29uZnVzZXMgdGhlIHN1YnNlcXVlbnQgdGVzdHMuICBCdXQgd2hhdCBhYm91dCB3aGVyZSBlbmQgaXMKLQkgKiBicm91Z2h0IGRvd24gYnkgSFVHRVBEX1NJWkUgYmVsb3c/IG5vLCBlbmQgY2FuJ3QgZ28gZG93biB0bwotCSAqIDAgdGhlcmUuCi0JICoKLQkgKiBXaGVyZWFzIHdlIHJvdW5kIHN0YXJ0IChhZGRyKSBhbmQgY2VpbGluZyBkb3duLCBieSBkaWZmZXJlbnQKLQkgKiBtYXNrcyBhdCBkaWZmZXJlbnQgbGV2ZWxzLCBpbiBvcmRlciB0byB0ZXN0IHdoZXRoZXIgYSB0YWJsZQotCSAqIG5vdyBoYXMgbm8gb3RoZXIgdm1hcyB1c2luZyBpdCwgc28gY2FuIGJlIGZyZWVkLCB3ZSBkb24ndAotCSAqIGJvdGhlciB0byByb3VuZCBmbG9vciBvciBlbmQgdXAgLSB0aGUgdGVzdHMgZG9uJ3QgbmVlZCB0aGF0LgorCSAqIFRvIG1ha2Ugc2Vuc2Ugb2YgdGhpcywgeW91IHNob3VsZCBwcm9iYWJseSBnbyByZWFkIHRoZSBiaWcKKwkgKiBibG9jayBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIG5vcm1hbCBmcmVlX3BnZF9yYW5nZSgpLAorCSAqIHRvby4KIAkgKi8KLQl1bnNpZ25lZCBpbnQgcHNpemUgPSBnZXRfc2xpY2VfcHNpemUodGxiLT5tbSwgYWRkcik7CiAKLQlhZGRyICY9IEhVR0VQRF9NQVNLKHBzaXplKTsKLQlpZiAoYWRkciA8IGZsb29yKSB7Ci0JCWFkZHIgKz0gSFVHRVBEX1NJWkUocHNpemUpOwotCQlpZiAoIWFkZHIpCi0JCQlyZXR1cm47Ci0JfQotCWlmIChjZWlsaW5nKSB7Ci0JCWNlaWxpbmcgJj0gSFVHRVBEX01BU0socHNpemUpOwotCQlpZiAoIWNlaWxpbmcpCi0JCQlyZXR1cm47Ci0JfQotCWlmIChlbmQgLSAxID4gY2VpbGluZyAtIDEpCi0JCWVuZCAtPSBIVUdFUERfU0laRShwc2l6ZSk7Ci0JaWYgKGFkZHIgPiBlbmQgLSAxKQotCQlyZXR1cm47Ci0KLQlzdGFydCA9IGFkZHI7CiAJcGdkID0gcGdkX29mZnNldCh0bGItPm1tLCBhZGRyKTsKIAlkbyB7Ci0JCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKHRsYi0+bW0sIGFkZHIpOwotCQlCVUdfT04oIW1tdV9odWdlX3BzaXplc1twc2l6ZV0pOwogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmIChtbXVfcHNpemVfdG9fc2hpZnQocHNpemUpIDwgUFVEX1NISUZUKSB7CisJCWlmICghaXNfaHVnZXBkKHBnZCkpIHsKIAkJCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKIAkJCQljb250aW51ZTsKIAkJCWh1Z2V0bGJfZnJlZV9wdWRfcmFuZ2UodGxiLCBwZ2QsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChwZ2Rfbm9uZSgqcGdkKSkKLQkJCQljb250aW51ZTsKLQkJCWZyZWVfaHVnZXB0ZV9yYW5nZSh0bGIsIChodWdlcGRfdCAqKXBnZCwgcHNpemUpOworCQkJZnJlZV9odWdlcGRfcmFuZ2UodGxiLCAoaHVnZXBkX3QgKilwZ2QsIFBHRElSX1NISUZULAorCQkJCQkgIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKIAkJfQogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCi12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkgewotCQkvKiBXZSBvcGVuLWNvZGUgcHRlX2NsZWFyIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHRoZSByaWdodAotCQkgKiBhcmd1bWVudCB0byBocHRlX25lZWRfZmx1c2ggKGh1Z2UgLyAhaHVnZSkuIE1pZ2h0IG5vdCBiZQotCQkgKiBuZWNlc3NhcnkgYW55bW9yZSBpZiB3ZSBtYWtlIGhwdGVfbmVlZF9mbHVzaCgpIGdldCB0aGUKLQkJICogcGFnZSBzaXplIGZyb20gdGhlIHNsaWNlcwotCQkgKi8KLQkJdW5zaWduZWQgaW50IHBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKTsKLQkJdW5zaWduZWQgaW50IHNoaWZ0ID0gbW11X3BzaXplX3RvX3NoaWZ0KHBzaXplKTsKLQkJdW5zaWduZWQgbG9uZyBzeiA9ICgoMVVMKSA8PCBzaGlmdCk7Ci0JCXN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IHNpemVfdG9faHN0YXRlKHN6KTsKLQkJcHRlX3VwZGF0ZShtbSwgYWRkciAmIGhzdGF0ZS0+bWFzaywgcHRlcCwgfjBVTCwgMSk7Ci0JfQotCSpwdGVwID0gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUyk7Ci19Ci0KLXB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCkKLXsKLQl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIH4wVUwsIDEpOwotCXJldHVybiBfX3B0ZShvbGQpOwotfQotCiBzdHJ1Y3QgcGFnZSAqCiBmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKIHsKIAlwdGVfdCAqcHRlcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBpbnQgbW11X3BzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyZXNzKTsKKwl1bnNpZ25lZCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlwdGVwID0gZmluZF9saW51eF9wdGVfb3JfaHVnZXB0ZShtbS0+cGdkLCBhZGRyZXNzLCAmc2hpZnQpOwogCiAJLyogVmVyaWZ5IGl0IGlzIGEgaHVnZSBwYWdlIGVsc2UgYmFpbC4gKi8KLQlpZiAoIW1tdV9odWdlX3BzaXplc1ttbXVfcHNpemVdKQorCWlmICghcHRlcCB8fCAhc2hpZnQpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JcHRlcCA9IGh1Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcyk7CisJbWFzayA9ICgxVUwgPDwgc2hpZnQpIC0gMTsKIAlwYWdlID0gcHRlX3BhZ2UoKnB0ZXApOwotCWlmIChwYWdlKSB7Ci0JCXVuc2lnbmVkIGludCBzaGlmdCA9IG1tdV9wc2l6ZV90b19zaGlmdChtbXVfcHNpemUpOwotCQl1bnNpZ25lZCBsb25nIHN6ID0gKCgxVUwpIDw8IHNoaWZ0KTsKLQkJcGFnZSArPSAoYWRkcmVzcyAlIHN6KSAvIFBBR0VfU0laRTsKLQl9CisJaWYgKHBhZ2UpCisJCXBhZ2UgKz0gKGFkZHJlc3MgJiBtYXNrKSAvIFBBR0VfU0laRTsKIAogCXJldHVybiBwYWdlOwogfQpAQCAtNTAxLDYgKzM4NCw4MiBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgbm9pbmxpbmUgaW50IGd1cF9odWdlcHRlKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6LCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IHdyaXRlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nIHB0ZV9lbmQ7CisJc3RydWN0IHBhZ2UgKmhlYWQsICpwYWdlOworCXB0ZV90IHB0ZTsKKwlpbnQgcmVmczsKKworCXB0ZV9lbmQgPSAoYWRkciArIHN6KSAmIH4oc3otMSk7CisJaWYgKHB0ZV9lbmQgPCBlbmQpCisJCWVuZCA9IHB0ZV9lbmQ7CisKKwlwdGUgPSAqcHRlcDsKKwltYXNrID0gX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVI7CisJaWYgKHdyaXRlKQorCQltYXNrIHw9IF9QQUdFX1JXOworCisJaWYgKChwdGVfdmFsKHB0ZSkgJiBtYXNrKSAhPSBtYXNrKQorCQlyZXR1cm4gMDsKKworCS8qIGh1Z2VwYWdlcyBhcmUgbmV2ZXIgInNwZWNpYWwiICovCisJVk1fQlVHX09OKCFwZm5fdmFsaWQocHRlX3BmbihwdGUpKSk7CisKKwlyZWZzID0gMDsKKwloZWFkID0gcHRlX3BhZ2UocHRlKTsKKworCXBhZ2UgPSBoZWFkICsgKChhZGRyICYgKHN6LTEpKSA+PiBQQUdFX1NISUZUKTsKKwlkbyB7CisJCVZNX0JVR19PTihjb21wb3VuZF9oZWFkKHBhZ2UpICE9IGhlYWQpOworCQlwYWdlc1sqbnJdID0gcGFnZTsKKwkJKCpucikrKzsKKwkJcGFnZSsrOworCQlyZWZzKys7CisJfSB3aGlsZSAoYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKKworCWlmICghcGFnZV9jYWNoZV9hZGRfc3BlY3VsYXRpdmUoaGVhZCwgcmVmcykpIHsKKwkJKm5yIC09IHJlZnM7CisJCXJldHVybiAwOworCX0KKworCWlmICh1bmxpa2VseShwdGVfdmFsKHB0ZSkgIT0gcHRlX3ZhbCgqcHRlcCkpKSB7CisJCS8qIENvdWxkIGJlIG9wdGltaXplZCBiZXR0ZXIgKi8KKwkJd2hpbGUgKCpucikgeworCQkJcHV0X3BhZ2UocGFnZSk7CisJCQkoKm5yKS0tOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2VwdGVfYWRkcl9lbmQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN6KQoreworCXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9IChhZGRyICsgc3opICYgfihzei0xKTsKKwlyZXR1cm4gKF9fYm91bmRhcnkgLSAxIDwgZW5kIC0gMSkgPyBfX2JvdW5kYXJ5IDogZW5kOworfQorCitpbnQgZ3VwX2h1Z2VwZChodWdlcGRfdCAqaHVnZXBkLCB1bnNpZ25lZCBwZHNoaWZ0LAorCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCSAgICAgICBpbnQgd3JpdGUsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCit7CisJcHRlX3QgKnB0ZXA7CisJdW5zaWduZWQgbG9uZyBzeiA9IDFVTCA8PCBodWdlcGRfc2hpZnQoKmh1Z2VwZCk7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCisJcHRlcCA9IGh1Z2VwdGVfb2Zmc2V0KGh1Z2VwZCwgYWRkciwgcGRzaGlmdCk7CisJZG8geworCQluZXh0ID0gaHVnZXB0ZV9hZGRyX2VuZChhZGRyLCBlbmQsIHN6KTsKKwkJaWYgKCFndXBfaHVnZXB0ZShwdGVwLCBzeiwgYWRkciwgZW5kLCB3cml0ZSwgcGFnZXMsIG5yKSkKKwkJCXJldHVybiAwOworCX0gd2hpbGUgKHB0ZXArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKworCXJldHVybiAxOworfQogCiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCkBAIC01MDksOCArNDY4LDYgQEAKIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfZmlsZShmaWxlKTsKIAlpbnQgbW11X3BzaXplID0gc2hpZnRfdG9fbW11X3BzaXplKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpKTsKIAotCWlmICghbW11X2h1Z2VfcHNpemVzW21tdV9wc2l6ZV0pCi0JCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBzbGljZV9nZXRfdW5tYXBwZWRfYXJlYShhZGRyLCBsZW4sIGZsYWdzLCBtbXVfcHNpemUsIDEsIDApOwogfQogCkBAIC01MjEsMjI5ICs0NzgsNDYgQEAKIAlyZXR1cm4gMVVMIDw8IG1tdV9wc2l6ZV90b19zaGlmdChwc2l6ZSk7CiB9CiAKLS8qCi0gKiBDYWxsZWQgYnkgYXNtIGhhc2h0YWJsZS5TIGZvciBkb2luZyBsYXp5IGljYWNoZSBmbHVzaAotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfaHVnZV9wYWdlX2RvX2xhenlfaWNhY2hlKHVuc2lnbmVkIGxvbmcgcmZsYWdzLAotCQkJCQlwdGVfdCBwdGUsIGludCB0cmFwLCB1bnNpZ25lZCBsb25nIHN6KQorc3RhdGljIGludCBfX2luaXQgYWRkX2h1Z2VfcGFnZV9zaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQogewotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBpOworCWludCBzaGlmdCA9IF9fZmZzKHNpemUpOworCWludCBtbXVfcHNpemU7CiAKLQlpZiAoIXBmbl92YWxpZChwdGVfcGZuKHB0ZSkpKQotCQlyZXR1cm4gcmZsYWdzOwotCi0JcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7Ci0KLQkvKiBwYWdlIGlzIGRpcnR5ICovCi0JaWYgKCF0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykgJiYgIVBhZ2VSZXNlcnZlZChwYWdlKSkgewotCQlpZiAodHJhcCA9PSAweDQwMCkgewotCQkJZm9yIChpID0gMDsgaSA8IChzeiAvIFBBR0VfU0laRSk7IGkrKykKLQkJCQlfX2ZsdXNoX2RjYWNoZV9pY2FjaGUocGFnZV9hZGRyZXNzKHBhZ2UraSkpOwotCQkJc2V0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZmxhZ3MgfD0gSFBURV9SX047Ci0JCX0KLQl9Ci0JcmV0dXJuIHJmbGFnczsKLX0KLQotaW50IGhhc2hfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFjY2VzcywKLQkJICAgdW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyB2c2lkLCBpbnQgbG9jYWwsCi0JCSAgIHVuc2lnbmVkIGxvbmcgdHJhcCkKLXsKLQlwdGVfdCAqcHRlcDsKLQl1bnNpZ25lZCBsb25nIG9sZF9wdGUsIG5ld19wdGU7Ci0JdW5zaWduZWQgbG9uZyB2YSwgcmZsYWdzLCBwYSwgc3o7Ci0JbG9uZyBzbG90OwotCWludCBlcnIgPSAxOwotCWludCBzc2l6ZSA9IHVzZXJfc2VnbWVudF9zaXplKGVhKTsKLQl1bnNpZ25lZCBpbnQgbW11X3BzaXplOwotCWludCBzaGlmdDsKLQltbXVfcHNpemUgPSBnZXRfc2xpY2VfcHNpemUobW0sIGVhKTsKLQotCWlmICghbW11X2h1Z2VfcHNpemVzW21tdV9wc2l6ZV0pCi0JCWdvdG8gb3V0OwotCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGVhKTsKLQotCS8qIFNlYXJjaCB0aGUgTGludXggcGFnZSB0YWJsZSBmb3IgYSBtYXRjaCB3aXRoIHZhICovCi0JdmEgPSBocHRfdmEoZWEsIHZzaWQsIHNzaXplKTsKLQotCS8qCi0JICogSWYgbm8gcHRlIGZvdW5kIG9yIG5vdCBwcmVzZW50LCBzZW5kIHRoZSBwcm9ibGVtIHVwIHRvCi0JICogZG9fcGFnZV9mYXVsdAotCSAqLwotCWlmICh1bmxpa2VseSghcHRlcCB8fCBwdGVfbm9uZSgqcHRlcCkpKQotCQlnb3RvIG91dDsKLQotCS8qIAotCSAqIENoZWNrIHRoZSB1c2VyJ3MgYWNjZXNzIHJpZ2h0cyB0byB0aGUgcGFnZS4gIElmIGFjY2VzcyBzaG91bGQgYmUKLQkgKiBwcmV2ZW50ZWQgdGhlbiBzZW5kIHRoZSBwcm9ibGVtIHVwIHRvIGRvX3BhZ2VfZmF1bHQuCi0JICovCi0JaWYgKHVubGlrZWx5KGFjY2VzcyAmIH5wdGVfdmFsKCpwdGVwKSkpCi0JCWdvdG8gb3V0OwotCS8qCi0JICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHB0ZSAob2xkX3B0ZSkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYnVpbGQKLQkgKiBvciB1cGRhdGUgYW4gSFBURS4gVGhlcmUgYXJlIDIgY2FzZXM6Ci0JICoKLQkgKiAxLiBUaGVyZSBpcyBhIHZhbGlkIChwcmVzZW50KSBwdGUgd2l0aCBubyBhc3NvY2lhdGVkIEhQVEUgKHRoaXMgaXMgCi0JICoJdGhlIG1vc3QgY29tbW9uIGNhc2UpCi0JICogMi4gVGhlcmUgaXMgYSB2YWxpZCAocHJlc2VudCkgcHRlIHdpdGggYW4gYXNzb2NpYXRlZCBIUFRFLiBUaGUKLQkgKgljdXJyZW50IHZhbHVlcyBvZiB0aGUgcHAgYml0cyBpbiB0aGUgSFBURSBwcmV2ZW50IGFjY2VzcwotCSAqCWJlY2F1c2Ugd2UgYXJlIGRvaW5nIHNvZnR3YXJlIERJUlRZIGJpdCBtYW5hZ2VtZW50IGFuZCB0aGUKLQkgKglwYWdlIGlzIGN1cnJlbnRseSBub3QgRElSVFkuIAotCSAqLwotCi0KLQlkbyB7Ci0JCW9sZF9wdGUgPSBwdGVfdmFsKCpwdGVwKTsKLQkJaWYgKG9sZF9wdGUgJiBfUEFHRV9CVVNZKQotCQkJZ290byBvdXQ7Ci0JCW5ld19wdGUgPSBvbGRfcHRlIHwgX1BBR0VfQlVTWSB8IF9QQUdFX0FDQ0VTU0VEOwotCX0gd2hpbGUob2xkX3B0ZSAhPSBfX2NtcHhjaGdfdTY0KCh1bnNpZ25lZCBsb25nICopcHRlcCwKLQkJCQkJIG9sZF9wdGUsIG5ld19wdGUpKTsKLQotCXJmbGFncyA9IDB4MiB8ICghKG5ld19wdGUgJiBfUEFHRV9SVykpOwotIAkvKiBfUEFHRV9FWEVDIC0+IEhXX05PX0VYRUMgc2luY2UgaXQncyBpbnZlcnRlZCAqLwotCXJmbGFncyB8PSAoKG5ld19wdGUgJiBfUEFHRV9FWEVDKSA/IDAgOiBIUFRFX1JfTik7Ci0Jc2hpZnQgPSBtbXVfcHNpemVfdG9fc2hpZnQobW11X3BzaXplKTsKLQlzeiA9ICgoMVVMKSA8PCBzaGlmdCk7Ci0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpKQotCQkvKiBObyBDUFUgaGFzIGh1Z2VwYWdlcyBidXQgbGFja3Mgbm8gZXhlY3V0ZSwgc28gd2UKLQkJICogZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IGNhc2UgKi8KLQkJcmZsYWdzID0gaGFzaF9odWdlX3BhZ2VfZG9fbGF6eV9pY2FjaGUocmZsYWdzLCBfX3B0ZShvbGRfcHRlKSwKLQkJCQkJCSAgICAgICB0cmFwLCBzeik7Ci0KLQkvKiBDaGVjayBpZiBwdGUgYWxyZWFkeSBoYXMgYW4gaHB0ZSAoY2FzZSAyKSAqLwotCWlmICh1bmxpa2VseShvbGRfcHRlICYgX1BBR0VfSEFTSFBURSkpIHsKLQkJLyogVGhlcmUgTUlHSFQgYmUgYW4gSFBURSBmb3IgdGhpcyBwdGUgKi8KLQkJdW5zaWduZWQgbG9uZyBoYXNoLCBzbG90OwotCi0JCWhhc2ggPSBocHRfaGFzaCh2YSwgc2hpZnQsIHNzaXplKTsKLQkJaWYgKG9sZF9wdGUgJiBfUEFHRV9GX1NFQ09ORCkKLQkJCWhhc2ggPSB+aGFzaDsKLQkJc2xvdCA9IChoYXNoICYgaHRhYl9oYXNoX21hc2spICogSFBURVNfUEVSX0dST1VQOwotCQlzbG90ICs9IChvbGRfcHRlICYgX1BBR0VfRl9HSVgpID4+IDEyOwotCi0JCWlmIChwcGNfbWQuaHB0ZV91cGRhdGVwcChzbG90LCByZmxhZ3MsIHZhLCBtbXVfcHNpemUsCi0JCQkJCSBzc2l6ZSwgbG9jYWwpID09IC0xKQotCQkJb2xkX3B0ZSAmPSB+X1BBR0VfSFBURUZMQUdTOwotCX0KLQotCWlmIChsaWtlbHkoIShvbGRfcHRlICYgX1BBR0VfSEFTSFBURSkpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaGFzaCA9IGhwdF9oYXNoKHZhLCBzaGlmdCwgc3NpemUpOwotCQl1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXA7Ci0KLQkJcGEgPSBwdGVfcGZuKF9fcHRlKG9sZF9wdGUpKSA8PCBQQUdFX1NISUZUOwotCi1yZXBlYXQ6Ci0JCWhwdGVfZ3JvdXAgPSAoKGhhc2ggJiBodGFiX2hhc2hfbWFzaykgKgotCQkJICAgICAgSFBURVNfUEVSX0dST1VQKSAmIH4weDdVTDsKLQotCQkvKiBjbGVhciBIUFRFIHNsb3QgaW5mb3JtYXRpb25zIGluIG5ldyBQVEUgKi8KLSNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotCQluZXdfcHRlID0gKG5ld19wdGUgJiB+X1BBR0VfSFBURUZMQUdTKSB8IF9QQUdFX0hQVEVfU1VCMDsKLSNlbHNlCi0JCW5ld19wdGUgPSAobmV3X3B0ZSAmIH5fUEFHRV9IUFRFRkxBR1MpIHwgX1BBR0VfSEFTSFBURTsKLSNlbmRpZgotCQkvKiBBZGQgaW4gV0lNRyBiaXRzICovCi0JCXJmbGFncyB8PSAobmV3X3B0ZSAmIChfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9OT19DQUNIRSB8Ci0JCQkJICAgICAgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9HVUFSREVEKSk7Ci0KLQkJLyogSW5zZXJ0IGludG8gdGhlIGhhc2ggdGFibGUsIHByaW1hcnkgc2xvdCAqLwotCQlzbG90ID0gcHBjX21kLmhwdGVfaW5zZXJ0KGhwdGVfZ3JvdXAsIHZhLCBwYSwgcmZsYWdzLCAwLAotCQkJCQkgIG1tdV9wc2l6ZSwgc3NpemUpOwotCi0JCS8qIFByaW1hcnkgaXMgZnVsbCwgdHJ5IHRoZSBzZWNvbmRhcnkgKi8KLQkJaWYgKHVubGlrZWx5KHNsb3QgPT0gLTEpKSB7Ci0JCQlocHRlX2dyb3VwID0gKCh+aGFzaCAmIGh0YWJfaGFzaF9tYXNrKSAqCi0JCQkJICAgICAgSFBURVNfUEVSX0dST1VQKSAmIH4weDdVTDsgCi0JCQlzbG90ID0gcHBjX21kLmhwdGVfaW5zZXJ0KGhwdGVfZ3JvdXAsIHZhLCBwYSwgcmZsYWdzLAotCQkJCQkJICBIUFRFX1ZfU0VDT05EQVJZLAotCQkJCQkJICBtbXVfcHNpemUsIHNzaXplKTsKLQkJCWlmIChzbG90ID09IC0xKSB7Ci0JCQkJaWYgKG1mdGIoKSAmIDB4MSkKLQkJCQkJaHB0ZV9ncm91cCA9ICgoaGFzaCAmIGh0YWJfaGFzaF9tYXNrKSAqCi0JCQkJCQkgICAgICBIUFRFU19QRVJfR1JPVVApJn4weDdVTDsKLQotCQkJCXBwY19tZC5ocHRlX3JlbW92ZShocHRlX2dyb3VwKTsKLQkJCQlnb3RvIHJlcGVhdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkJfQotCi0JCWlmICh1bmxpa2VseShzbG90ID09IC0yKSkKLQkJCXBhbmljKCJoYXNoX2h1Z2VfcGFnZTogcHRlX2luc2VydCBmYWlsZWRcbiIpOwotCi0JCW5ld19wdGUgfD0gKHNsb3QgPDwgMTIpICYgKF9QQUdFX0ZfU0VDT05EIHwgX1BBR0VfRl9HSVgpOwotCX0KLQotCS8qCi0JICogTm8gbmVlZCB0byB1c2UgbGRhcngvc3RkY3ggaGVyZQotCSAqLwotCSpwdGVwID0gX19wdGUobmV3X3B0ZSAmIH5fUEFHRV9CVVNZKTsKLQotCWVyciA9IDA7Ci0KLSBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNldF9odWdlX3BzaXplKGludCBwc2l6ZSkKLXsKIAkvKiBDaGVjayB0aGF0IGl0IGlzIGEgcGFnZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgYW5kCi0JICogdGhhdCBpdCBmaXRzIHdpdGhpbiBwYWdldGFibGUgbGltaXRzLiAqLwotCWlmIChtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQgJiYKLQkJbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0IDwgU0lEX1NISUZUXzFUICYmCi0JCShtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQgPiBNSU5fSFVHRVBURV9TSElGVCB8fAotCQkgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0ID09IFBBR0VfU0hJRlRfNjRLIHx8Ci0JCSBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQgPT0gUEFHRV9TSElGVF8xNkcpKSB7Ci0JCS8qIFJldHVybiBpZiBodWdlIHBhZ2Ugc2l6ZSBoYXMgYWxyZWFkeSBiZWVuIHNldHVwIG9yIGlzIHRoZQotCQkgKiBzYW1lIGFzIHRoZSBiYXNlIHBhZ2Ugc2l6ZS4gKi8KLQkJaWYgKG1tdV9odWdlX3BzaXplc1twc2l6ZV0gfHwKLQkJICAgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0ID09IFBBR0VfU0hJRlQpCi0JCQlyZXR1cm47Ci0JCWlmIChXQVJOX09OKEhVR0VQVEVfQ0FDSEVfTkFNRShwc2l6ZSkgPT0gTlVMTCkpCi0JCQlyZXR1cm47Ci0JCWh1Z2V0bGJfYWRkX2hzdGF0ZShtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQgLSBQQUdFX1NISUZUKTsKKwkgKiB0aGF0IGl0IGZpdHMgd2l0aGluIHBhZ2V0YWJsZSBhbmQgc2xpY2UgbGltaXRzLiAqLworCWlmICghaXNfcG93ZXJfb2ZfMihzaXplKQorCSAgICB8fCAoc2hpZnQgPiBTTElDRV9ISUdIX1NISUZUKSB8fCAoc2hpZnQgPD0gUEFHRV9TSElGVCkpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCXN3aXRjaCAobW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0KSB7Ci0JCWNhc2UgUEFHRV9TSElGVF82NEs6Ci0JCSAgICAvKiBXZSBvbmx5IGFsbG93IDY0ayBocGFnZXMgd2l0aCA0ayBiYXNlIHBhZ2UsCi0JCSAgICAgKiB3aGljaCB3YXMgY2hlY2tlZCBhYm92ZSwgYW5kIGFsd2F5cyBwdXQgdGhlbQotCQkgICAgICogYXQgdGhlIFBNRCAqLwotCQkgICAgaHVnZXB0ZV9zaGlmdFtwc2l6ZV0gPSBQTURfU0hJRlQ7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBQQUdFX1NISUZUXzE2TToKLQkJICAgIC8qIDE2TSBwYWdlcyBjYW4gYmUgYXQgdHdvIGRpZmZlcmVudCBsZXZlbHMKLQkJICAgICAqIG9mIHBhZ2VzdGFibGVzIGJhc2VkIG9uIGJhc2UgcGFnZSBzaXplICovCi0JCSAgICBpZiAoUEFHRV9TSElGVCA9PSBQQUdFX1NISUZUXzY0SykKLQkJCSAgICBodWdlcHRlX3NoaWZ0W3BzaXplXSA9IFBNRF9TSElGVDsKLQkJICAgIGVsc2UgLyogNGsgYmFzZSBwYWdlICovCi0JCQkgICAgaHVnZXB0ZV9zaGlmdFtwc2l6ZV0gPSBQVURfU0hJRlQ7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBQQUdFX1NISUZUXzE2RzoKLQkJICAgIC8qIDE2RyBwYWdlcyBhcmUgYWx3YXlzIGF0IFBHRCBsZXZlbCAqLwotCQkgICAgaHVnZXB0ZV9zaGlmdFtwc2l6ZV0gPSBQR0RJUl9TSElGVDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JCWh1Z2VwdGVfc2hpZnRbcHNpemVdIC09IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsKLQl9IGVsc2UKLQkJaHVnZXB0ZV9zaGlmdFtwc2l6ZV0gPSAwOworCWlmICgobW11X3BzaXplID0gc2hpZnRfdG9fbW11X3BzaXplKHNoaWZ0KSkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmIENPTkZJR19TUFVfRlNfNjRLX0xTCisJLyogRGlzYWJsZSBzdXBwb3J0IGZvciA2NEsgaHVnZSBwYWdlcyB3aGVuIDY0SyBTUFUgbG9jYWwgc3RvcmUKKwkgKiBzdXBwb3J0IGlzIGVuYWJsZWQgYXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gY29uZmxpY3RzLgorCSAqLworCWlmIChzaGlmdCA9PSBQQUdFX1NISUZUXzY0SykKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYgLyogQ09ORklHX1NQVV9GU182NEtfTFMgKi8KKworCUJVR19PTihtbXVfcHNpemVfZGVmc1ttbXVfcHNpemVdLnNoaWZ0ICE9IHNoaWZ0KTsKKworCS8qIFJldHVybiBpZiBodWdlIHBhZ2Ugc2l6ZSBoYXMgYWxyZWFkeSBiZWVuIHNldHVwICovCisJaWYgKHNpemVfdG9faHN0YXRlKHNpemUpKQorCQlyZXR1cm4gMDsKKworCWh1Z2V0bGJfYWRkX2hzdGF0ZShzaGlmdCAtIFBBR0VfU0hJRlQpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX3NldHVwX3N6KGNoYXIgKnN0cikKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKLQlpbnQgbW11X3BzaXplOwotCWludCBzaGlmdDsKIAogCXNpemUgPSBtZW1wYXJzZShzdHIsICZzdHIpOwogCi0Jc2hpZnQgPSBfX2ZmcyhzaXplKTsKLQltbXVfcHNpemUgPSBzaGlmdF90b19tbXVfcHNpemUoc2hpZnQpOwotCWlmIChtbXVfcHNpemUgPj0gMCAmJiBtbXVfcHNpemVfZGVmc1ttbXVfcHNpemVdLnNoaWZ0KQotCQlzZXRfaHVnZV9wc2l6ZShtbXVfcHNpemUpOwotCWVsc2UKKwlpZiAoYWRkX2h1Z2VfcGFnZV9zaXplKHNpemUpICE9IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgaHVnZSBwYWdlIHNpemUgc3BlY2lmaWVkKCVsbHUpXG4iLCBzaXplKTsKIAogCXJldHVybiAxOwpAQCAtNzUyLDQxICs1MjYsNTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgaHVnZXRsYnBhZ2VfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCBwc2l6ZTsKKwlpbnQgcHNpemU7CiAKIAlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzE2TV9QQUdFKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBBZGQgc3VwcG9ydGVkIGh1Z2UgcGFnZSBzaXplcy4gIE5lZWQgdG8gY2hhbmdlIEhVR0VfTUFYX0hTVEFURQotCSAqIGFuZCBhZGp1c3QgUFRFX05PTkNBQ0hFX05VTSBpZiB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBodWdlIHBhZ2UKLQkgKiBzaXplcyBjaGFuZ2VzLgotCSAqLwotCXNldF9odWdlX3BzaXplKE1NVV9QQUdFXzE2TSk7Ci0Jc2V0X2h1Z2VfcHNpemUoTU1VX1BBR0VfMTZHKTsKLQotCS8qIFRlbXBvcmFyaWx5IGRpc2FibGUgc3VwcG9ydCBmb3IgNjRLIGh1Z2UgcGFnZXMgd2hlbiA2NEsgU1BVIGxvY2FsCi0JICogc3RvcmUgc3VwcG9ydCBpcyBlbmFibGVkIGFzIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGNvbmZsaWN0cy4KLQkgKi8KLSNpZm5kZWYgQ09ORklHX1NQVV9GU182NEtfTFMKLQlzZXRfaHVnZV9wc2l6ZShNTVVfUEFHRV82NEspOwotI2VuZGlmCi0KIAlmb3IgKHBzaXplID0gMDsgcHNpemUgPCBNTVVfUEFHRV9DT1VOVDsgKytwc2l6ZSkgewotCQlpZiAobW11X2h1Z2VfcHNpemVzW3BzaXplXSkgewotCQkJcGd0YWJsZV9jYWNoZVtIVUdFX1BHVEFCTEVfSU5ERVgocHNpemUpXSA9Ci0JCQkJa21lbV9jYWNoZV9jcmVhdGUoCi0JCQkJCUhVR0VQVEVfQ0FDSEVfTkFNRShwc2l6ZSksCi0JCQkJCUhVR0VQVEVfVEFCTEVfU0laRShwc2l6ZSksCi0JCQkJCUhVR0VQVEVfVEFCTEVfU0laRShwc2l6ZSksCi0JCQkJCTAsCi0JCQkJCU5VTEwpOwotCQkJaWYgKCFwZ3RhYmxlX2NhY2hlW0hVR0VfUEdUQUJMRV9JTkRFWChwc2l6ZSldKQotCQkJCXBhbmljKCJodWdldGxicGFnZV9pbml0KCk6IGNvdWxkIG5vdCBjcmVhdGUgJXMiXAotCQkJCSAgICAgICJcbiIsIEhVR0VQVEVfQ0FDSEVfTkFNRShwc2l6ZSkpOwotCQl9CisJCXVuc2lnbmVkIHNoaWZ0OworCQl1bnNpZ25lZCBwZHNoaWZ0OworCisJCWlmICghbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0KQorCQkJY29udGludWU7CisKKwkJc2hpZnQgPSBtbXVfcHNpemVfdG9fc2hpZnQocHNpemUpOworCisJCWlmIChhZGRfaHVnZV9wYWdlX3NpemUoMVVMTCA8PCBzaGlmdCkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHNoaWZ0IDwgUE1EX1NISUZUKQorCQkJcGRzaGlmdCA9IFBNRF9TSElGVDsKKwkJZWxzZSBpZiAoc2hpZnQgPCBQVURfU0hJRlQpCisJCQlwZHNoaWZ0ID0gUFVEX1NISUZUOworCQllbHNlCisJCQlwZHNoaWZ0ID0gUEdESVJfU0hJRlQ7CisKKwkJcGd0YWJsZV9jYWNoZV9hZGQocGRzaGlmdCAtIHNoaWZ0LCBOVUxMKTsKKwkJaWYgKCFQR1RfQ0FDSEUocGRzaGlmdCAtIHNoaWZ0KSkKKwkJCXBhbmljKCJodWdldGxicGFnZV9pbml0KCk6IGNvdWxkIG5vdCBjcmVhdGUgIgorCQkJICAgICAgInBndGFibGUgY2FjaGUgZm9yICVkIGJpdCBwYWdlc2l6ZVxuIiwgc2hpZnQpOwogCX0KIAorCS8qIFNldCBkZWZhdWx0IGxhcmdlIHBhZ2Ugc2l6ZS4gQ3VycmVudGx5LCB3ZSBwaWNrIDE2TSBvciAxTQorCSAqIGRlcGVuZGluZyBvbiB3aGF0IGlzIGF2YWlsYWJsZQorCSAqLworCWlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xNk1dLnNoaWZ0KQorCQlIUEFHRV9TSElGVCA9IG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzE2TV0uc2hpZnQ7CisJZWxzZSBpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMU1dLnNoaWZ0KQorCQlIUEFHRV9TSElGVCA9IG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFNXS5zaGlmdDsKKwogCXJldHVybiAwOwogfQogCiBtb2R1bGVfaW5pdChodWdldGxicGFnZV9pbml0KTsKKwordm9pZCBmbHVzaF9kY2FjaGVfaWNhY2hlX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCBpOworCisJQlVHX09OKCFQYWdlQ29tcG91bmQocGFnZSkpOworCisJZm9yIChpID0gMDsgaSA8ICgxVUwgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpOyBpKyspCisJCV9fZmx1c2hfZGNhY2hlX2ljYWNoZShwYWdlX2FkZHJlc3MocGFnZStpKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwppbmRleCA5ZGRjZmI0Li40ZWM5MDBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKQEAgLTgyLDYgKzgyLDExIEBACiBpbnQgX19tYXBfd2l0aG91dF9iYXRzOwogaW50IF9fbWFwX3dpdGhvdXRfbHRsYnM7CiAKKy8qCisgKiBUaGlzIHRlbGxzIHRoZSBzeXN0ZW0gdG8gYWxsb3cgaW9yZW1hcHBpbmcgbWVtb3J5IG1hcmtlZCBhcyByZXNlcnZlZC4KKyAqLworaW50IF9fYWxsb3dfaW9yZW1hcF9yZXNlcnZlZDsKKwogLyogbWF4IGFtb3VudCBvZiBsb3cgUkFNIHRvIG1hcCBpbiAqLwogdW5zaWduZWQgbG9uZyBfX21heF9sb3dfbWVtb3J5ID0gTUFYX0xPV19NRU07CiAKQEAgLTEzMSw5ICsxMzYsMTMgQEAKIAlNTVVfc2V0dXAoKTsKIAogCWlmIChsbWIubWVtb3J5LmNudCA+IDEpIHsKKyNpZm5kZWYgQ09ORklHX1dJSQogCQlsbWIubWVtb3J5LmNudCA9IDE7CiAJCWxtYl9hbmFseXplKCk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9ubHkgdXNpbmcgZmlyc3QgY29udGlndW91cyBtZW1vcnkgcmVnaW9uIik7CisjZWxzZQorCQl3aWlfbWVtb3J5X2ZpeHVwcygpOworI2VuZGlmCiAJfQogCiAJdG90YWxfbG93bWVtID0gdG90YWxfbWVtb3J5ID0gbG1iX2VuZF9vZl9EUkFNKCkgLSBtZW1zdGFydF9hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggMzM1YzU3OC4uNzc2ZjI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAjaW5jbHVkZSA8bGludXgvbG1iLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogCiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTE5LDMwICsxMjAsNjMgQEAKIAltZW1zZXQoYWRkciwgMCwgUE1EX1RBQkxFX1NJWkUpOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKLQlQR0RfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUKLX07Ci1zdGF0aWMgY29uc3QgY2hhciAqcGd0YWJsZV9jYWNoZV9uYW1lW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKV0gPSB7Ci0jaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQkicGdkX2NhY2hlIiwgInBtZF9jYWNoZSIsCi0jZWxzZQotCSJwZ2RfY2FjaGUiLCAicHVkX3BtZF9jYWNoZSIsCi0jZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KLX07CitzdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZVtNQVhfUEdUQUJMRV9JTkRFWF9TSVpFXTsKIAotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLS8qIEh1Z2VwYWdlcyBuZWVkIGFuIGV4dHJhIGNhY2hlIHBlciBodWdlcGFnZXNpemUsIGluaXRpYWxpemVkIGluCi0gKiBodWdldGxicGFnZS5jLiAgV2UgY2FuJ3QgcHV0IGludG8gdGhlIHRhYmxlcyBhYm92ZSwgYmVjYXVzZSBIUEFHRV9TSElGVAotICogaXMgbm90IGNvbXBpbGUgdGltZSBjb25zdGFudC4gKi8KLXN0cnVjdCBrbWVtX2NhY2hlICpwZ3RhYmxlX2NhY2hlW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKStNTVVfUEFHRV9DT1VOVF07Ci0jZWxzZQotc3RydWN0IGttZW1fY2FjaGUgKnBndGFibGVfY2FjaGVbQVJSQVlfU0laRShwZ3RhYmxlX2NhY2hlX3NpemUpXTsKLSNlbmRpZgorLyoKKyAqIENyZWF0ZSBhIGttZW1fY2FjaGUoKSBmb3IgcGFnZXRhYmxlcy4gIFRoaXMgaXMgbm90IHVzZWQgZm9yIFBURQorICogcGFnZXMgLSB0aGV5J3JlIGxpbmtlZCB0byBzdHJ1Y3QgcGFnZSwgY29tZSBmcm9tIHRoZSBub3JtYWwgZnJlZQorICogcGFnZXMgcG9vbCBhbmQgaGF2ZSBhIGRpZmZlcmVudCBlbnRyeSBzaXplIChzZWUgcmVhbF9wdGVfdCkgdG8KKyAqIGV2ZXJ5dGhpbmcgZWxzZS4gIENhY2hlcyBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQgZm9yIGFsbAorICogdGhlIGhpZ2hlciBsZXZlbCBwYWdldGFibGVzLCBhbmQgZm9yIGh1Z2VwYWdlIHBhZ2V0YWJsZXMuCisgKi8KK3ZvaWQgcGd0YWJsZV9jYWNoZV9hZGQodW5zaWduZWQgc2hpZnQsIHZvaWQgKCpjdG9yKSh2b2lkICopKQoreworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplID0gc2l6ZW9mKHZvaWQgKikgPDwgc2hpZnQ7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IHRhYmxlX3NpemU7CisKKwkvKiBXaGVuIGJhdGNoaW5nIHBndGFibGUgcG9pbnRlcnMgZm9yIFJDVSBmcmVlaW5nLCB3ZSBzdG9yZQorCSAqIHRoZSBpbmRleCBzaXplIGluIHRoZSBsb3cgYml0cy4gIFRhYmxlIGFsaWdubWVudCBtdXN0IGJlCisJICogYmlnIGVub3VnaCB0byBmaXQgaXQuCisJICoKKwkgKiBMaWtld2lzZSwgaHVnZWFwZ2UgcGFnZXRhYmxlIHBvaW50ZXJzIGNvbnRhaW4gYSAoZGlmZmVyZW50KQorCSAqIHNoaWZ0IHZhbHVlIGluIHRoZSBsb3cgYml0cy4gIEFsbCB0YWJsZXMgbXVzdCBiZSBhbGlnbmVkIHNvCisJICogYXMgdG8gbGVhdmUgZW5vdWdoIDAgYml0cyBpbiB0aGUgYWRkcmVzcyB0byBjb250YWluIGl0LiAqLworCXVuc2lnbmVkIGxvbmcgbWluYWxpZ24gPSBtYXgoTUFYX1BHVEFCTEVfSU5ERVhfU0laRSArIDEsCisJCQkJICAgICBIVUdFUERfU0hJRlRfTUFTSyArIDEpOworCXN0cnVjdCBrbWVtX2NhY2hlICpuZXc7CisKKwkvKiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoaXMgd2FzIGEgQlVJTERfQlVHX09OKCksIGJ1dCBhdCB0aGUKKwkgKiBtb21lbnQsIGdjYyBkb2Vzbid0IHNlZW0gdG8gcmVjb2duaXplIGlzX3Bvd2VyX29mXzIgYXMgYQorCSAqIGNvbnN0YW50IGV4cHJlc3Npb24sIHNvIHNvIG11Y2ggZm9yIHRoYXQuICovCisJQlVHX09OKCFpc19wb3dlcl9vZl8yKG1pbmFsaWduKSk7CisJQlVHX09OKChzaGlmdCA8IDEpIHx8IChzaGlmdCA+IE1BWF9QR1RBQkxFX0lOREVYX1NJWkUpKTsKKworCWlmIChQR1RfQ0FDSEUoc2hpZnQpKQorCQlyZXR1cm47IC8qIEFscmVhZHkgaGF2ZSBhIGNhY2hlIG9mIHRoaXMgc2l6ZSAqLworCisJYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBhbGlnbiwgbWluYWxpZ24pOworCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInBndGFibGUtMl4lZCIsIHNoaWZ0KTsKKwluZXcgPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLCB0YWJsZV9zaXplLCBhbGlnbiwgMCwgY3Rvcik7CisJUEdUX0NBQ0hFKHNoaWZ0KSA9IG5ldzsKKworCXByX2RlYnVnKCJBbGxvY2F0ZWQgcGd0YWJsZSBjYWNoZSBmb3Igb3JkZXIgJWRcbiIsIHNoaWZ0KTsKK30KKwogCiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQogewotCXBndGFibGVfY2FjaGVbMF0gPSBrbWVtX2NhY2hlX2NyZWF0ZShwZ3RhYmxlX2NhY2hlX25hbWVbMF0sIFBHRF9UQUJMRV9TSVpFLCBQR0RfVEFCTEVfU0laRSwgU0xBQl9QQU5JQywgcGdkX2N0b3IpOwotCXBndGFibGVfY2FjaGVbMV0gPSBrbWVtX2NhY2hlX2NyZWF0ZShwZ3RhYmxlX2NhY2hlX25hbWVbMV0sIFBNRF9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSwgU0xBQl9QQU5JQywgcG1kX2N0b3IpOworCXBndGFibGVfY2FjaGVfYWRkKFBHRF9JTkRFWF9TSVpFLCBwZ2RfY3Rvcik7CisJcGd0YWJsZV9jYWNoZV9hZGQoUE1EX0lOREVYX1NJWkUsIHBtZF9jdG9yKTsKKwlpZiAoIVBHVF9DQUNIRShQR0RfSU5ERVhfU0laRSkgfHwgIVBHVF9DQUNIRShQTURfSU5ERVhfU0laRSkpCisJCXBhbmljKCJDb3VsZG4ndCBhbGxvY2F0ZSBwZ3RhYmxlIGNhY2hlcyIpOworCisJLyogSW4gYWxsIGN1cnJlbnQgY29uZmlncywgd2hlbiB0aGUgUFVEIGluZGV4IGV4aXN0cyBpdCdzIHRoZQorCSAqIHNhbWUgc2l6ZSBhcyBlaXRoZXIgdGhlIHBnZCBvciBwbWQgaW5kZXguICBWZXJpZnkgdGhhdCB0aGUKKwkgKiBpbml0aWFsaXphdGlvbiBhYm92ZSBoYXMgYWxzbyBjcmVhdGVkIGEgUFVEIGNhY2hlLiAgVGhpcworCSAqIHdpbGwgbmVlZCByZS1leGFtaW5pYXRpb24gaWYgd2UgYWRkIG5ldyBwb3NzaWJpbGl0aWVzIGZvcgorCSAqIHRoZSBwYWdldGFibGUgbGF5b3V0LiAqLworCUJVR19PTihQVURfSU5ERVhfU0laRSAmJiAhUEdUX0NBQ0hFKFBVRF9JTkRFWF9TSVpFKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCA1OTczNjMxLi5iOWIxNTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC00MTcsMTggKzQxOCwyNiBAQAogCiB2b2lkIGZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJaWYgKFBhZ2VDb21wb3VuZChwYWdlKSkgeworCQlmbHVzaF9kY2FjaGVfaWNhY2hlX2h1Z2VwYWdlKHBhZ2UpOworCQlyZXR1cm47CisJfQorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JPT0tFCi0Jdm9pZCAqc3RhcnQgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9QUENfU1lOQ19JQ0FDSEUpOwotCV9fZmx1c2hfZGNhY2hlX2ljYWNoZShzdGFydCk7Ci0Ja3VubWFwX2F0b21pYyhzdGFydCwgS01fUFBDX1NZTkNfSUNBQ0hFKTsKKwl7CisJCXZvaWQgKnN0YXJ0ID0ga21hcF9hdG9taWMocGFnZSwgS01fUFBDX1NZTkNfSUNBQ0hFKTsKKwkJX19mbHVzaF9kY2FjaGVfaWNhY2hlKHN0YXJ0KTsKKwkJa3VubWFwX2F0b21pYyhzdGFydCwgS01fUFBDX1NZTkNfSUNBQ0hFKTsKKwl9CiAjZWxpZiBkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQogCS8qIE9uIDh4eCB0aGVyZSBpcyBubyBuZWVkIHRvIGttYXAgc2luY2UgaGlnaG1lbSBpcyBub3Qgc3VwcG9ydGVkICovCiAJX19mbHVzaF9kY2FjaGVfaWNhY2hlKHBhZ2VfYWRkcmVzcyhwYWdlKSk7IAogI2Vsc2UKIAlfX2ZsdXNoX2RjYWNoZV9pY2FjaGVfcGh5cyhwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKTsKICNlbmRpZgotCiB9CisKIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCBwYWdlICpwZykKIHsKIAljbGVhcl9wYWdlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCmluZGV4IGRiZWI4NmEuLmI5MTBkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIApAQCAtMzIsNyArMzMsNyBAQAogI2RlZmluZSBOT19DT05URVhUCTAKICNkZWZpbmUgTUFYX0NPTlRFWFQJKCgxVUwgPDwgMTkpIC0gMSkKIAotaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoraW50IF9faW5pdF9uZXdfY29udGV4dCh2b2lkKQogewogCWludCBpbmRleDsKIAlpbnQgZXJyOwpAQCAtNTcsMjIgKzU4LDQxIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXJldHVybiBpbmRleDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9uZXdfY29udGV4dCk7CisKK2ludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IF9faW5pdF9uZXdfY29udGV4dCgpOworCWlmIChpbmRleCA8IDApCisJCXJldHVybiBpbmRleDsKKwogCS8qIFRoZSBvbGQgY29kZSB3b3VsZCByZS1wcm9tb3RlIG9uIGZvcmssIHdlIGRvbid0IGRvIHRoYXQKIAkgKiB3aGVuIHVzaW5nIHNsaWNlcyBhcyBpdCBjb3VsZCBjYXVzZSBwcm9ibGVtIHByb21vdGluZyBzbGljZXMKIAkgKiB0aGF0IGhhdmUgYmVlbiBmb3JjZWQgZG93biB0byA0SwogCSAqLwogCWlmIChzbGljZV9tbV9uZXdfY29udGV4dChtbSkpCiAJCXNsaWNlX3NldF91c2VyX3BzaXplKG1tLCBtbXVfdmlydHVhbF9wc2l6ZSk7CisJc3VicGFnZV9wcm90X2luaXRfbmV3X2NvbnRleHQobW0pOwogCW1tLT5jb250ZXh0LmlkID0gaW5kZXg7CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit2b2lkIF9fZGVzdHJveV9jb250ZXh0KGludCBjb250ZXh0X2lkKQogewogCXNwaW5fbG9jaygmbW11X2NvbnRleHRfbG9jayk7Ci0JaWRyX3JlbW92ZSgmbW11X2NvbnRleHRfaWRyLCBtbS0+Y29udGV4dC5pZCk7CisJaWRyX3JlbW92ZSgmbW11X2NvbnRleHRfaWRyLCBjb250ZXh0X2lkKTsKIAlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Rlc3Ryb3lfY29udGV4dCk7CiAKK3ZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCV9fZGVzdHJveV9jb250ZXh0KG1tLT5jb250ZXh0LmlkKTsKKwlzdWJwYWdlX3Byb3RfZnJlZShtbSk7CiAJbW0tPmNvbnRleHQuaWQgPSBOT19DT05URVhUOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IGJlNGYzNGMuLjEwNDRhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKIAkJCWlmIChwLT5tbSkKLQkJCQljcHVfbWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHAtPm1tKSk7CisJCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHAtPm1tKSk7CiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmggYi9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaAppbmRleCBkMmU1MzIxLi5kNDlhNzc1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaAorKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaApAQCAtOTgsMjMgKzk4LDEzIEBACiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIAotc3RydWN0IHRsYmNhbSB7Ci0JdTMyCU1BUzA7Ci0JdTMyCU1BUzE7Ci0JdTMyCU1BUzI7Ci0JdTMyCU1BUzM7Ci0JdTMyCU1BUzc7Ci19OwotCiBleHRlcm4gdm9pZCBtYXBpbl9yYW0odm9pZCk7CiBleHRlcm4gaW50IG1hcF9wYWdlKHVuc2lnbmVkIGxvbmcgdmEsIHBoeXNfYWRkcl90IHBhLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgc2V0YmF0KGludCBpbmRleCwgdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBwaHlzLAogCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGZsYWdzKTsKLWV4dGVybiB2b2lkIHNldHRsYmNhbShpbnQgaW5kZXgsIHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3QgcGh5cywKLQkJICAgICAgdW5zaWduZWQgaW50IHNpemUsIGludCBmbGFncywgdW5zaWduZWQgaW50IHBpZCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX3RsYmNhbV9lbnRyeShpbnQgaW5kZXgpOwogCiBleHRlcm4gaW50IF9fbWFwX3dpdGhvdXRfYmF0czsKK2V4dGVybiBpbnQgX19hbGxvd19pb3JlbWFwX3Jlc2VydmVkOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9yZW1hcF9iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGludCBydGFzX2RhdGEsIHJ0YXNfc2l6ZTsKIApAQCAtMTM2LDI0ICsxMjYsMzIgQEAKIGV4dGVybiBwaHlzX2FkZHJfdCBtZW1zdGFydF9hZGRyOwogZXh0ZXJuIHBoeXNfYWRkcl90IGxvd21lbV9lbmRfYWRkcjsKIAorI2lmZGVmIENPTkZJR19XSUkKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdpaV9ob2xlX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2lpX2hvbGVfc2l6ZTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2lpX21tdV9tYXBpbl9tZW0yKHVuc2lnbmVkIGxvbmcgdG9wKTsKK2V4dGVybiB2b2lkIHdpaV9tZW1vcnlfZml4dXBzKHZvaWQpOworI2VuZGlmCisKIC8qIC4uLmFuZCBub3cgdGhvc2UgdGhpbmdzIHRoYXQgbWF5IGJlIHNsaWdodGx5IGRpZmZlcmVudCBiZXR3ZWVuIHByb2Nlc3NvcgogICogYXJjaGl0ZWN0dXJlcy4gIC0tIERhbgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfOHh4KQogI2RlZmluZSBNTVVfaW5pdF9odygpCQlkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgbW11X21hcGluX3JhbSgpCQkoMFVMKQorI2RlZmluZSBtbXVfbWFwaW5fcmFtKHRvcCkJKDBVTCkKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfNHh4KQogZXh0ZXJuIHZvaWQgTU1VX2luaXRfaHcodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfbWFwaW5fcmFtKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X21hcGluX3JhbSh1bnNpZ25lZCBsb25nIHRvcCk7CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKIGV4dGVybiB2b2lkIE1NVV9pbml0X2h3KHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X21hcGluX3JhbSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1tdV9tYXBpbl9yYW0odW5zaWduZWQgbG9uZyB0b3ApOwogZXh0ZXJuIHZvaWQgYWRqdXN0X3RvdGFsX2xvd21lbSh2b2lkKTsKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiAvKiBhbnl0aGluZyAzMi1iaXQgZXhjZXB0IDR4eCBvciA4eHggKi8KIGV4dGVybiB2b2lkIE1NVV9pbml0X2h3KHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X21hcGluX3JhbSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1tdV9tYXBpbl9yYW0odW5zaWduZWQgbG9uZyB0b3ApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwppbmRleCA1MzA0MDkzLi45OWRmNjk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKQEAgLTQ5LDEyICs0OSwxMiBAQAogewogCXN0cnVjdCByY3VfaGVhZAlyY3U7CiAJdW5zaWduZWQgaW50CWluZGV4OwotCXBndGFibGVfZnJlZV90CXRhYmxlc1swXTsKKwl1bnNpZ25lZCBsb25nCXRhYmxlc1swXTsKIH07CiAKICNkZWZpbmUgUFRFX0ZSRUVMSVNUX1NJWkUgXAogCSgoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBwdGVfZnJlZWxpc3RfYmF0Y2gpKSBcCi0JICAvIHNpemVvZihwZ3RhYmxlX2ZyZWVfdCkpCisJICAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKIAogc3RhdGljIHZvaWQgcHRlX2ZyZWVfc21wX3N5bmModm9pZCAqYXJnKQogewpAQCAtNjQsMTMgKzY0LDEzIEBACiAvKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UgYXJlIGNyaXRpY2FsbHkgb3V0IG9mIG1lbW9yeQogICogKGFuZCBmYWlsIHRvIGdldCBhIHBhZ2UgaW4gcHRlX2ZyZWVfdGxiKS4KICAqLwotc3RhdGljIHZvaWQgcGd0YWJsZV9mcmVlX25vdyhwZ3RhYmxlX2ZyZWVfdCBwZ2YpCitzdGF0aWMgdm9pZCBwZ3RhYmxlX2ZyZWVfbm93KHZvaWQgKnRhYmxlLCB1bnNpZ25lZCBzaGlmdCkKIHsKIAlwdGVfZnJlZWxpc3RfZm9yY2VkX2ZyZWUrKzsKIAogCXNtcF9jYWxsX2Z1bmN0aW9uKHB0ZV9mcmVlX3NtcF9zeW5jLCBOVUxMLCAxKTsKIAotCXBndGFibGVfZnJlZShwZ2YpOworCXBndGFibGVfZnJlZSh0YWJsZSwgc2hpZnQpOwogfQogCiBzdGF0aWMgdm9pZCBwdGVfZnJlZV9yY3VfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtNzksOCArNzksMTIgQEAKIAkJY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwdGVfZnJlZWxpc3RfYmF0Y2gsIHJjdSk7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYmF0Y2gtPmluZGV4OyBpKyspCi0JCXBndGFibGVfZnJlZShiYXRjaC0+dGFibGVzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmF0Y2gtPmluZGV4OyBpKyspIHsKKwkJdm9pZCAqdGFibGUgPSAodm9pZCAqKShiYXRjaC0+dGFibGVzW2ldICYgfk1BWF9QR1RBQkxFX0lOREVYX1NJWkUpOworCQl1bnNpZ25lZCBzaGlmdCA9IGJhdGNoLT50YWJsZXNbaV0gJiBNQVhfUEdUQUJMRV9JTkRFWF9TSVpFOworCisJCXBndGFibGVfZnJlZSh0YWJsZSwgc2hpZnQpOworCX0KIAogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyliYXRjaCk7CiB9CkBAIC05MSwyNSArOTUsMjggQEAKIAljYWxsX3JjdSgmYmF0Y2gtPnJjdSwgcHRlX2ZyZWVfcmN1X2NhbGxiYWNrKTsKIH0KIAotdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfZnJlZV90IHBnZikKK3ZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgdW5zaWduZWQgc2hpZnQpCiB7CiAJLyogVGhpcyBpcyBzYWZlIHNpbmNlIHRsYl9nYXRoZXJfbW11IGhhcyBkaXNhYmxlZCBwcmVlbXB0aW9uICovCiAJc3RydWN0IHB0ZV9mcmVlbGlzdF9iYXRjaCAqKmJhdGNocCA9ICZfX2dldF9jcHVfdmFyKHB0ZV9mcmVlbGlzdF9jdXIpOworCXVuc2lnbmVkIGxvbmcgcGdmOwogCiAJaWYgKGF0b21pY19yZWFkKCZ0bGItPm1tLT5tbV91c2VycykgPCAyIHx8CiAJICAgIGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayh0bGItPm1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSl7Ci0JCXBndGFibGVfZnJlZShwZ2YpOworCQlwZ3RhYmxlX2ZyZWUodGFibGUsIHNoaWZ0KTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICgqYmF0Y2hwID09IE5VTEwpIHsKIAkJKmJhdGNocCA9IChzdHJ1Y3QgcHRlX2ZyZWVsaXN0X2JhdGNoICopX19nZXRfZnJlZV9wYWdlKEdGUF9BVE9NSUMpOwogCQlpZiAoKmJhdGNocCA9PSBOVUxMKSB7Ci0JCQlwZ3RhYmxlX2ZyZWVfbm93KHBnZik7CisJCQlwZ3RhYmxlX2ZyZWVfbm93KHRhYmxlLCBzaGlmdCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJKCpiYXRjaHApLT5pbmRleCA9IDA7CiAJfQorCUJVR19PTihzaGlmdCA+IE1BWF9QR1RBQkxFX0lOREVYX1NJWkUpOworCXBnZiA9ICh1bnNpZ25lZCBsb25nKXRhYmxlIHwgc2hpZnQ7CiAJKCpiYXRjaHApLT50YWJsZXNbKCpiYXRjaHApLT5pbmRleCsrXSA9IHBnZjsKIAlpZiAoKCpiYXRjaHApLT5pbmRleCA9PSBQVEVfRlJFRUxJU1RfU0laRSkgewogCQlwdGVfZnJlZV9zdWJtaXQoKmJhdGNocCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCBjYjk2Y2IyLi41NzNiM2JkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KQEAgLTE5MSw3ICsxOTIsOCBAQAogCSAqIERvbid0IGFsbG93IGFueWJvZHkgdG8gcmVtYXAgbm9ybWFsIFJBTSB0aGF0IHdlJ3JlIHVzaW5nLgogCSAqIG1lbV9pbml0KCkgc2V0cyBoaWdoX21lbW9yeSBzbyBvbmx5IGRvIHRoZSBjaGVjayBhZnRlciB0aGF0LgogCSAqLwotCWlmIChtZW1faW5pdF9kb25lICYmIChwIDwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSkpIHsKKwlpZiAobWVtX2luaXRfZG9uZSAmJiAocCA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpICYmCisJICAgICEoX19hbGxvd19pb3JlbWFwX3Jlc2VydmVkICYmIGxtYl9pc19yZWdpb25fcmVzZXJ2ZWQocCwgc2l6ZSkpKSB7CiAJCXByaW50aygiX19pb3JlbWFwKCk6IHBoeXMgYWRkciAweCVsbHggaXMgUkFNIGxyICVwXG4iLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTI4MywxOCArMjg1LDE4IEBACiB9CiAKIC8qCi0gKiBNYXAgaW4gYSBiaWcgY2h1bmsgb2YgcGh5c2ljYWwgbWVtb3J5IHN0YXJ0aW5nIGF0IFBBR0VfT0ZGU0VULgorICogTWFwIGluIGEgY2h1bmsgb2YgcGh5c2ljYWwgbWVtb3J5IHN0YXJ0aW5nIGF0IHN0YXJ0LgogICovCi12b2lkIF9faW5pdCBtYXBpbl9yYW0odm9pZCkKK3ZvaWQgX19pbml0IF9fbWFwaW5fcmFtX2NodW5rKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHRvcCkKIHsKIAl1bnNpZ25lZCBsb25nIHYsIHMsIGY7CiAJcGh5c19hZGRyX3QgcDsKIAlpbnQga3RleHQ7CiAKLQlzID0gbW11X21hcGluX3JhbSgpOworCXMgPSBvZmZzZXQ7CiAJdiA9IFBBR0VfT0ZGU0VUICsgczsKIAlwID0gbWVtc3RhcnRfYWRkciArIHM7Ci0JZm9yICg7IHMgPCB0b3RhbF9sb3dtZW07IHMgKz0gUEFHRV9TSVpFKSB7CisJZm9yICg7IHMgPCB0b3A7IHMgKz0gUEFHRV9TSVpFKSB7CiAJCWt0ZXh0ID0gKChjaGFyICopIHYgPj0gX3N0ZXh0ICYmIChjaGFyICopIHYgPCBldGV4dCk7CiAJCWYgPSBrdGV4dCA/IFBBR0VfS0VSTkVMX1RFWFQgOiBQQUdFX0tFUk5FTDsKIAkJbWFwX3BhZ2UodiwgcCwgZik7CkBAIC0zMDcsNiArMzA5LDMwIEBACiAJfQogfQogCit2b2lkIF9faW5pdCBtYXBpbl9yYW0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHMsIHRvcDsKKworI2lmbmRlZiBDT05GSUdfV0lJCisJdG9wID0gdG90YWxfbG93bWVtOworCXMgPSBtbXVfbWFwaW5fcmFtKHRvcCk7CisJX19tYXBpbl9yYW1fY2h1bmsocywgdG9wKTsKKyNlbHNlCisJaWYgKCF3aWlfaG9sZV9zaXplKSB7CisJCXMgPSBtbXVfbWFwaW5fcmFtKHRvdGFsX2xvd21lbSk7CisJCV9fbWFwaW5fcmFtX2NodW5rKHMsIHRvdGFsX2xvd21lbSk7CisJfSBlbHNlIHsKKwkJdG9wID0gd2lpX2hvbGVfc3RhcnQ7CisJCXMgPSBtbXVfbWFwaW5fcmFtKHRvcCk7CisJCV9fbWFwaW5fcmFtX2NodW5rKHMsIHRvcCk7CisKKwkJdG9wID0gbG1iX2VuZF9vZl9EUkFNKCk7CisJCXMgPSB3aWlfbW11X21hcGluX21lbTIodG9wKTsKKwkJX19tYXBpbl9yYW1fY2h1bmsocywgdG9wKTsKKwl9CisjZW5kaWYKK30KKwogLyogU2NhbiB0aGUgcmVhbCBMaW51eCBwYWdlIHRhYmxlcyBhbmQgcmV0dXJuIGEgUFRFIHBvaW50ZXIgZm9yCiAgKiBhIHZpcnR1YWwgYWRkcmVzcyBpbiBhIGNvbnRleHQuCiAgKiBSZXR1cm5zIHRydWUgKDEpIGlmIFBURSB3YXMgZm91bmQsIHplcm8gb3RoZXJ3aXNlLiAgVGhlIHBvaW50ZXIgdG8KQEAgLTM1Niw3ICszODIsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAoIWdldF9wdGVwdHIoJmluaXRfbW0sIGFkZHJlc3MsICZrcHRlLCAma3BtZCkpCiAJCXJldHVybiAtRUlOVkFMOwotCXNldF9wdGVfYXQoJmluaXRfbW0sIGFkZHJlc3MsIGtwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7CisJX19zZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyZXNzLCBrcHRlLCBta19wdGUocGFnZSwgcHJvdCksIDApOwogCXdtYigpOwogI2lmZGVmIENPTkZJR19QUENfU1REX01NVQogCWZsdXNoX2hhc2hfcGFnZXMoMCwgYWRkcmVzcywgcG1kX3ZhbCgqa3BtZCksIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKaW5kZXggMmQyYTg3ZS4uZjExYzJjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCkBAIC03Miw3ICs3Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKK3Vuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odW5zaWduZWQgbG9uZyB0b3ApCiB7CiAJdW5zaWduZWQgbG9uZyB0b3QsIGJsLCBkb25lOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUgPSAoMjU2PDwyMCk7CkBAIC04Niw3ICs4Niw3IEBACiAKIAkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgbWFwIGEgYmxvY2sgbGFyZ2VyIHRoYW4gdGhlCiAJICAgc21hbGxlc3QgYWxpZ25tZW50IG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzLiAqLwotCXRvdCA9IHRvdGFsX2xvd21lbTsKKwl0b3QgPSB0b3A7CiAJZm9yIChibCA9IDEyODw8MTA7IGJsIDwgbWF4X3NpemU7IGJsIDw8PSAxKSB7CiAJCWlmIChibCAqIDIgPiB0b3QpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdWJwYWdlLXByb3QuYyBiL2FyY2gvcG93ZXJwYy9tbS9zdWJwYWdlLXByb3QuYwppbmRleCA0Y2FmYzBjLi5hMDQwYjgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3VicGFnZS1wcm90LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N1YnBhZ2UtcHJvdC5jCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgc3VicGFnZV9wcm90X3RhYmxlIHN0cnVjdHVyZSBpcwogICogcmVpbml0aWFsaXplZCBmb3IgdGhlIG5leHQgdXNlci4KICAqLwotdm9pZCBzdWJwYWdlX3Byb3RfZnJlZShwZ2RfdCAqcGdkKQordm9pZCBzdWJwYWdlX3Byb3RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlICpzcHQgPSBwZ2Rfc3VicGFnZV9wcm90KHBnZCk7CisJc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSAqc3B0ID0gJm1tLT5jb250ZXh0LnNwdDsKIAl1bnNpZ25lZCBsb25nIGksIGosIGFkZHI7CiAJdTMyICoqcDsKIApAQCAtNTEsNiArNTEsMTMgQEAKIAlzcHQtPm1heGFkZHIgPSAwOwogfQogCit2b2lkIHN1YnBhZ2VfcHJvdF9pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUgKnNwdCA9ICZtbS0+Y29udGV4dC5zcHQ7CisKKwltZW1zZXQoc3B0LCAwLCBzaXplb2YoKnNwdCkpOworfQorCiBzdGF0aWMgdm9pZCBocHRlX2ZsdXNoX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgIGludCBucGFnZXMpCiB7CkBAIC04Nyw3ICs5NCw3IEBACiBzdGF0aWMgdm9pZCBzdWJwYWdlX3Byb3RfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUgKnNwdCA9IHBnZF9zdWJwYWdlX3Byb3QobW0tPnBnZCk7CisJc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSAqc3B0ID0gJm1tLT5jb250ZXh0LnNwdDsKIAl1MzIgKipzcG0sICpzcHA7CiAJaW50IGksIG53OwogCXVuc2lnbmVkIGxvbmcgbmV4dCwgbGltaXQ7CkBAIC0xMzYsNyArMTQzLDcgQEAKIGxvbmcgc3lzX3N1YnBhZ2VfcHJvdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1MzIgX191c2VyICptYXApCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQlzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlICpzcHQgPSBwZ2Rfc3VicGFnZV9wcm90KG1tLT5wZ2QpOworCXN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUgKnNwdCA9ICZtbS0+Y29udGV4dC5zcHQ7CiAJdTMyICoqc3BtLCAqc3BwOwogCWludCBpLCBudzsKIAl1bnNpZ25lZCBsb25nIG5leHQsIGxpbWl0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKaW5kZXggMmIyZjM1Zi4uMjgyZDkzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCkBAIC01MywxMSArNTMsNiBAQAogCiAJaSA9IGJhdGNoLT5pbmRleDsKIAotCS8qIFdlIG1hc2sgdGhlIGFkZHJlc3MgZm9yIHRoZSBiYXNlIHBhZ2Ugc2l6ZS4gSHVnZSBwYWdlcyB3aWxsCi0JICogaGF2ZSBhcHBsaWVkIHRoZWlyIG93biBtYXNraW5nIGFscmVhZHkKLQkgKi8KLQlhZGRyICY9IFBBR0VfTUFTSzsKLQogCS8qIEdldCBwYWdlIHNpemUgKG1heWJlIG1vdmUgYmFjayB0byBjYWxsZXIpLgogCSAqCiAJICogTk9URTogd2hlbiB1c2luZyBzcGVjaWFsIDY0SyBtYXBwaW5ncyBpbiA0SyBlbnZpcm9ubWVudCBsaWtlCkBAIC03NSw2ICs3MCw5IEBACiAJfSBlbHNlCiAJCXBzaXplID0gcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpOwogCisJLyogTWFzayB0aGUgYWRkcmVzcyBmb3IgdGhlIGNvcnJlY3QgcGFnZSBzaXplICovCisJYWRkciAmPSB+KCgxVUwgPDwgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0KSAtIDEpOworCiAJLyogQnVpbGQgZnVsbCB2YWRkciAqLwogCWlmICghaXNfa2VybmVsX2FkZHIoYWRkcikpIHsKIAkJc3NpemUgPSB1c2VyX3NlZ21lbnRfc2l6ZShhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCmluZGV4IGE2Y2U4MDUuLmRhOWIyMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwpAQCAtNzksNyArNzksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbGRfcGljID0gewotCS50eXBlbmFtZSA9ICIgQ1BMRCBQSUMgIiwKKwkubmFtZSA9ICIgQ1BMRCBQSUMgIiwKIAkubWFzayA9IGNwbGRfbWFza19pcnEsCiAJLmFjayA9IGNwbGRfbWFza19pcnEsCiAJLnVubWFzayA9IGNwbGRfdW5tYXNrX2lycSwKQEAgLTEzMiw3ICsxMzIsNyBAQAogY3BsZF9waWNfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKIAkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3KQogewotCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmNwbGRfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKaW5kZXggOGI4ZTk1Ni4uNDdlYTFiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKQEAgLTYyLDMgKzYyLDggQEAKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJaGVscAogCSAgRW5hYmxlIGdwaW9saWIgc3VwcG9ydCBmb3IgbXBjNTIwMCBiYXNlZCBib2FyZHMKKworY29uZmlnIFBQQ19NUEM1MjAwX0xQQkZJRk8KKwl0cmlzdGF0ZSAiTVBDNTIwMCBMb2NhbFBsdXMgYnVzIEZJRk8gZHJpdmVyIgorCWRlcGVuZHMgb24gUFBDX01QQzUyeHgKKwlzZWxlY3QgUFBDX0JFU1RDT01NX0dFTl9CRApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlCmluZGV4IGJmZDRmNTIuLjJiYzhjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUKQEAgLTE1LDMgKzE1LDQgQEAKIGVuZGlmCiAKIG9iai0kKENPTkZJR19QUENfTVBDNTIwMF9HUElPKQkrPSBtcGM1Mnh4X2dwaW8ubworb2JqLSQoQ09ORklHX1BQQ19NUEM1MjAwX0xQQkZJRk8pCSs9IG1wYzUyeHhfbHBiZmlmby5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvZWZpa2EuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9lZmlrYS5jCmluZGV4IGJjYzY5ZTEuLjQ1YzBjYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9lZmlrYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9lZmlrYS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMKaW5kZXggNjhlNGYxNi4uMGJhYzNhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYwpAQCAtNzQsNyArNzQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1lZGlhNTIwMF9pcnFfY2hpcCA9IHsKLQkudHlwZW5hbWUgPSAiTWVkaWE1MjAwIEZQR0EiLAorCS5uYW1lID0gIk1lZGlhNTIwMCBGUEdBIiwKIAkudW5tYXNrID0gbWVkaWE1MjAwX2lycV91bm1hc2ssCiAJLm1hc2sgPSBtZWRpYTUyMDBfaXJxX21hc2ssCiAJLm1hc2tfYWNrID0gbWVkaWE1MjAwX2lycV9tYXNrLApAQCAtODYsOSArODYsOSBAQAogCXUzMiBzdGF0dXMsIGVuYWJsZTsKIAogCS8qIE1hc2sgb2ZmIHRoZSBjYXNjYWRlZCBJUlEgKi8KLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPmNoaXAtPm1hc2sodmlycSk7Ci0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAkvKiBBc2sgdGhlIEZQR0EgZm9yIElSUSBzdGF0dXMuICBJZiAndmFsJyBpcyAwLCB0aGVuIG5vIGlycXMKIAkgKiBhcmUgcGVuZGluZy4gICdmZnMoKScgaXMgMSBiYXNlZCAqLwpAQCAtMTA0LDE3ICsxMDQsMTcgQEAKIAl9CiAKIAkvKiBQcm9jZXNzaW5nIGRvbmU7IGNhbiByZWVuYWJsZSB0aGUgY2FzY2FkZSBub3cgKi8KLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPmNoaXAtPmFjayh2aXJxKTsKIAlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKQogCQlkZXNjLT5jaGlwLT51bm1hc2sodmlycSk7Ci0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgbWVkaWE1MjAwX2lycV9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKIAkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3KQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKIAogCXByX2RlYnVnKCIlczogaD0lcCwgdmlycT0laSwgaHdpcnE9JWlcbiIsIF9fZnVuY19fLCBoLCB2aXJxLCAoaW50KWh3KTsKIAlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCAmbWVkaWE1MjAwX2lycSk7CkBAIC0xMjcsNyArMTI3LDcgQEAKIH0KIAogc3RhdGljIGludCBtZWRpYTUyMDBfaXJxX3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKLQkJCQkgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCQkgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCQkgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsCiAJCQkJIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3B0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwppbmRleCBiZmJjZDQxLi42ZjhlYmUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwpAQCAtMTYsOCArMTYsMTQgQEAKICAqIG91dHB1dCBzaWduYWxzIG9yIG1lYXN1cmUgaW5wdXQgc2lnbmFscy4KICAqCiAgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgR1BJTyBhbmQgSVJRIGNvbnRyb2xsZXIgZnVuY3Rpb25zIG9mIHRoZSBHUFQKLSAqIGRldmljZS4gIFRpbWVyIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIG5vciBpcyB0aGUgd2F0Y2hkb2cKLSAqIHRpbWVyLgorICogZGV2aWNlLiAgVGltZXIgZnVuY3Rpb25zIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4KKyAqCisgKiBUaGUgdGltZXIgZ3B0MCBjYW4gYmUgdXNlZCBhcyB3YXRjaGRvZyAod2R0KS4gIElmIHRoZSB3ZHQgbW9kZSBpcyB1c2VkLAorICogdGhpcyBwcmV2ZW50cyB0aGUgdXNlIG9mIGFueSBncHQwIGdwdCBmdW5jdGlvbiAoaS5lLiB0aGV5IHdpbGwgZmFpbCB3aXRoCisgKiAtRUJVU1kpLiAgVGh1cywgdGhlIHNhZmV0eSB3ZHQgZnVuY3Rpb24gYWx3YXlzIGhhcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGdwdAorICogZnVuY3Rpb24uICBJZiB0aGUga2VybmVsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggQ09ORklHX1dBVENIRE9HX05PV0FZT1VULAorICogdGhpcyBtZWFucyB0aGF0IGdwdDAgaXMgbG9ja2VkIGluIHdkdCBtb2RlIHVudGlsIHRoZSBuZXh0IHJlYm9vdCAtIHRoaXMKKyAqIG1heSBiZSBhIHJlcXVpcmVtZW50IGluIHNhZmV0eSBhcHBsaWNhdGlvbnMuCiAgKgogICogVG8gdXNlIHRoZSBHUElPIGZ1bmN0aW9uLCB0aGUgZm9sbG93aW5nIHR3byBwcm9wZXJ0aWVzIG11c3QgYmUgYWRkZWQKICAqIHRvIHRoZSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgZ3B0IGRldmljZSAodHlwaWNhbGx5IGluIHRoZSAuZHRzIGZpbGUKQEAgLTQ2LDE3ICs1MiwyNCBAQAogICogdGhlIG91dHB1dCBtb2RlLiAgVGhpcyBkcml2ZXIgZG9lcyBub3QgY2hhbmdlIHRoZSBvdXRwdXQgbW9kZSBzZXR0aW5nLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1QQzUyeHggZ3B0IGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBHcmFudCBMaWtlbHkiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgR3JhbnQgTGlrZWx5LCBBbGJyZWNodCBEcmXDnyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKioKQEAgLTY2LDE4ICs3OSwyNyBAQAogICogQGxvY2s6IHNwaW5sb2NrIHRvIGNvb3JkaW5hdGUgYmV0d2VlbiBkaWZmZXJlbnQgZnVuY3Rpb25zLgogICogQG9mX2djOiBvZl9ncGlvX2NoaXAgaW5zdGFuY2Ugc3RydWN0dXJlOyB1c2VkIHdoZW4gR1BJTyBpcyBlbmFibGVkCiAgKiBAaXJxaG9zdDogUG9pbnRlciB0byBpcnFfaG9zdCBpbnN0YW5jZTsgdXNlZCB3aGVuIElSUSBtb2RlIGlzIHN1cHBvcnRlZAorICogQHdkdF9tb2RlOiBvbmx5IHJlbGV2YW50IGZvciBncHQwOiBiaXQgMCAoTVBDNTJ4eF9HUFRfQ0FOX1dEVCkgaW5kaWNhdGVzCisgKiAgIGlmIHRoZSBncHQgbWF5IGJlIHVzZWQgYXMgd2R0LCBiaXQgMSAoTVBDNTJ4eF9HUFRfSVNfV0RUKSBpbmRpY2F0ZXMKKyAqICAgaWYgdGhlIHRpbWVyIGlzIGFjdGl2ZWx5IHVzZWQgYXMgd2R0IHdoaWNoIGJsb2NrcyBncHQgZnVuY3Rpb25zCiAgKi8KIHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBMaXN0IG9mIGFsbCBHUFQgZGV2aWNlcyAqLwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbXBjNTJ4eF9ncHQgX19pb21lbSAqcmVnczsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGlycV9ob3N0ICppcnFob3N0OworCXUzMiBpcGJfZnJlcTsKKwl1OCB3ZHRfbW9kZTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCiAJc3RydWN0IG9mX2dwaW9fY2hpcCBvZl9nYzsKICNlbmRpZgogfTsKIAorTElTVF9IRUFEKG1wYzUyeHhfZ3B0X2xpc3QpOworREVGSU5FX01VVEVYKG1wYzUyeHhfZ3B0X2xpc3RfbXV0ZXgpOworCiAjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfTUFTSwkoMHgwNykKICNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19JQwkJKDB4MDEpCiAjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfT0MJCSgweDAyKQpAQCAtODgsMTUgKzExMCwyNSBAQAogI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0xPVwkoMHgyMCkKICNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX09VVF9ISUdICSgweDMwKQogCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfQ09VTlRFUl9FTkFCTEUJKDB4MTAwMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9DT05USU5VT1VTCSgweDA0MDApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfT1BFTl9EUkFJTgkoMHgwMjAwKQogI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTgkJKDB4MDEwMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9XRFRfRU4JCSgweDgwMDApCiAKICNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfTUFTSwkoMHgwMzAwMDApCiAjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX1JJU0lORwkoMHgwMTAwMDApCiAjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX0ZBTExJTkcJKDB4MDIwMDAwKQogI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9UT0dHTEUJKDB4MDMwMDAwKQogCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfV0RUX1BJTkcJKDB4YTUpCisKICNkZWZpbmUgTVBDNTJ4eF9HUFRfU1RBVFVTX0lSUU1BU0sJKDB4MDAwZikKIAorI2RlZmluZSBNUEM1Mnh4X0dQVF9DQU5fV0RUCQkoMSA8PCAwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9JU19XRFQJCSgxIDw8IDEpCisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDYXNjYWRlZCBpbnRlcnJ1cHQgY29udHJvbGxlciBob29rcwogICovCkBAIC0xNDksNyArMTgxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM1Mnh4X2dwdF9pcnFfY2hpcCA9IHsKLQkudHlwZW5hbWUgPSAiTVBDNTJ4eCBHUFQiLAorCS5uYW1lID0gIk1QQzUyeHggR1BUIiwKIAkudW5tYXNrID0gbXBjNTJ4eF9ncHRfaXJxX3VubWFzaywKIAkubWFzayA9IG1wYzUyeHhfZ3B0X2lycV9tYXNrLAogCS5hY2sgPSBtcGM1Mnh4X2dwdF9pcnFfYWNrLApAQCAtMTgyLDcgKzIxNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfaXJxX3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKLQkJCQkgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCQkgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCQkgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsCiAJCQkJIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQogewpAQCAtMTkwLDcgKzIyMiw3IEBACiAKIAlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGZsYWdzPSVpXG4iLCBfX2Z1bmNfXywgaW50c3BlY1swXSk7CiAKLQlpZiAoKGludHNpemUgPCAxKSB8fCAoaW50c3BlY1swXSA8IDEpIHx8IChpbnRzcGVjWzBdID4gMykpIHsKKwlpZiAoKGludHNpemUgPCAxKSB8fCAoaW50c3BlY1swXSA+IDMpKSB7CiAJCWRldl9lcnIoZ3B0LT5kZXYsICJiYWQgaXJxIHNwZWNpZmllciBpbiAlc1xuIiwgY3QtPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIxMSwxMyArMjQzLDExIEBACiB7CiAJaW50IGNhc2NhZGVfdmlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogT25seSBzZXR1cCBjYXNjYWRlZCBJUlEgaWYgZGV2aWNlIHRyZWUgY2xhaW1zIHRoZSBHUFQgaXMKLQkgKiBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCWlmICghb2ZfZmluZF9wcm9wZXJ0eShub2RlLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBOVUxMKSkKLQkJcmV0dXJuOworCXUzMiBtb2RlOwogCiAJY2FzY2FkZV92aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CisJaWYgKCFjYXNjYWRlX3ZpcnEpCisJCXJldHVybjsKIAogCWdwdC0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KG5vZGUsIElSUV9IT1NUX01BUF9MSU5FQVIsIDEsCiAJCQkJICAgICAgJm1wYzUyeHhfZ3B0X2lycV9vcHMsIC0xKTsKQEAgLTIyNywxNCArMjU3LDE2IEBACiAJfQogCiAJZ3B0LT5pcnFob3N0LT5ob3N0X2RhdGEgPSBncHQ7Ci0KIAlzZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxLCBncHQpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfdmlycSwgbXBjNTJ4eF9ncHRfaXJxX2Nhc2NhZGUpOwogCi0JLyogU2V0IHRvIElucHV0IENhcHR1cmUgbW9kZSAqLworCS8qIElmIHRoZSBHUFQgaXMgY3VycmVudGx5IGRpc2FibGVkLCB0aGVuIGNoYW5nZSBpdCB0byBiZSBpbiBJbnB1dAorCSAqIENhcHR1cmUgbW9kZS4gIElmIHRoZSBtb2RlIGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBwaW4gY291bGQgYmUKKwkgKiBhbHJlYWR5IGluIHVzZSBmb3Igc29tZXRoaW5nLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKLQljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLLAotCQkJTVBDNTJ4eF9HUFRfTU9ERV9NU19JQyk7CisJbW9kZSA9IGluX2JlMzIoJmdwdC0+cmVncy0+bW9kZSk7CisJaWYgKChtb2RlICYgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLKSA9PSAwKQorCQlvdXRfYmUzMigmZ3B0LT5yZWdzLT5tb2RlLCBtb2RlIHwgTVBDNTJ4eF9HUFRfTU9ERV9NU19JQyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CiAKIAlkZXZfZGJnKGdwdC0+ZGV2LCAiJXMoKSBjb21wbGV0ZS4gdmlycT0laVxuIiwgX19mdW5jX18sIGNhc2NhZGVfdmlycSk7CkBAIC0zMzUsNiArMzY3LDM1NCBAQAogbXBjNTJ4eF9ncHRfZ3Bpb19zZXR1cChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqcCwgc3RydWN0IGRldmljZV9ub2RlICpucCkgeyB9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfR1BJT0xJQikgKi8KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaW1lciBBUEkKKyAqLworCisvKioKKyAqIG1wYzUyeHhfZ3B0X2Zyb21faXJxIC0gUmV0dXJuIHRoZSBHUFQgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhbiBJUlEgbnVtYmVyCisgKiBAaXJxOiBpcnEgb2YgdGltZXIuCisgKi8KK3N0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICptcGM1Mnh4X2dwdF9mcm9tX2lycShpbnQgaXJxKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCisJLyogSXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIHRpbWVycyBsb29raW5nIGZvciBhIG1hdGNoaW5nIGRldmljZSAqLworCW11dGV4X2xvY2soJm1wYzUyeHhfZ3B0X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2gocG9zLCAmbXBjNTJ4eF9ncHRfbGlzdCkgeworCQlncHQgPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiwgbGlzdCk7CisJCWlmIChncHQtPmlycWhvc3QgJiYgaXJxID09IGlycV9saW5lYXJfcmV2bWFwKGdwdC0+aXJxaG9zdCwgMCkpIHsKKwkJCW11dGV4X3VubG9jaygmbXBjNTJ4eF9ncHRfbGlzdF9tdXRleCk7CisJCQlyZXR1cm4gZ3B0OworCQl9CisJfQorCW11dGV4X3VubG9jaygmbXBjNTJ4eF9ncHRfbGlzdF9tdXRleCk7CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wobXBjNTJ4eF9ncHRfZnJvbV9pcnEpOworCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2RvX3N0YXJ0KHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQsIHU2NCBwZXJpb2QsCisJCQkJaW50IGNvbnRpbnVvdXMsIGludCBhc193ZHQpCit7CisJdTMyIGNsZWFyLCBzZXQ7CisJdTY0IGNsb2NrczsKKwl1MzIgcHJlc2NhbGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNsZWFyID0gTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLIHwgTVBDNTJ4eF9HUFRfTU9ERV9DT05USU5VT1VTOworCXNldCA9IE1QQzUyeHhfR1BUX01PREVfTVNfR1BJTyB8IE1QQzUyeHhfR1BUX01PREVfQ09VTlRFUl9FTkFCTEU7CisJaWYgKGFzX3dkdCkgeworCQljbGVhciB8PSBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTjsKKwkJc2V0IHw9IE1QQzUyeHhfR1BUX01PREVfV0RUX0VOOworCX0gZWxzZSBpZiAoY29udGludW91cykKKwkJc2V0IHw9IE1QQzUyeHhfR1BUX01PREVfQ09OVElOVU9VUzsKKworCS8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb2NrcyBpbiB0aGUgcmVxdWVzdGVkIHBlcmlvZC4gIDY0IGJpdAorCSAqIGFyaXRobWF0aWMgaXMgZG9uZSBoZXJlIHRvIHByZXNlcnZlIHRoZSBwcmVjaXNpb24gdW50aWwgdGhlIHZhbHVlCisJICogaXMgc2NhbGVkIGJhY2sgZG93biBpbnRvIHRoZSB1MzIgcmFuZ2UuICBQZXJpb2QgaXMgaW4gJ25zJywgYnVzCisJICogZnJlcXVlbmN5IGlzIGluIEh6LiAqLworCWNsb2NrcyA9IHBlcmlvZCAqICh1NjQpZ3B0LT5pcGJfZnJlcTsKKwlkb19kaXYoY2xvY2tzLCAxMDAwMDAwMDAwKTsgLyogU2NhbGUgaXQgZG93biB0byBucyByYW5nZSAqLworCisJLyogVGhpcyBkZXZpY2UgY2Fubm90IGhhbmRsZSBhIGNsb2NrIGNvdW50IGdyZWF0ZXIgdGhhbiAzMiBiaXRzICovCisJaWYgKGNsb2NrcyA+IDB4ZmZmZmZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2FsY3VsYXRlIHRoZSBwcmVzY2FsZXIgYW5kIGNvdW50IHZhbHVlcyBmcm9tIHRoZSBjbG9ja3MgdmFsdWUuCisJICogJ2Nsb2NrcycgaXMgdGhlIG51bWJlciBvZiBjbG9jayB0aWNrcyBpbiB0aGUgcGVyaW9kLiAgVGhlIHRpbWVyCisJICogaGFzIDE2IGJpdCBwcmVjaXNpb24gYW5kIGEgMTYgYml0IHByZXNjYWxlci4gIFByZXNjYWxlciBpcworCSAqIGNhbGN1bGF0ZWQgYnkgaW50ZWdlciBkaXZpZGluZyB0aGUgY2xvY2tzIGJ5IDB4MTAwMDAgKHNoaWZ0aW5nCisJICogZG93biAxNiBiaXRzKSB0byBvYnRhaW4gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpdmlzb3IgZm9yIGNsb2NrcworCSAqIHRvIGdldCBhIDE2IGJpdCBjb3VudCB2YWx1ZS4KKwkgKgorCSAqIE5vdGU6IHRoZSBwcmVzY2FsZSByZWdpc3RlciBpcyAnMScgYmFzZWQsIG5vdCAnMCcgYmFzZWQuICBpZS4gYQorCSAqIHZhbHVlIG9mICcxJyBtZWFucyBkaXZpZGUgdGhlIGNsb2NrIGJ5IG9uZS4gIDB4ZmZmZiBkaXZpZGVzIHRoZQorCSAqIGNsb2NrIGJ5IDB4ZmZmZi4gICcweDAwMDAnIGRvZXMgbm90IGRpdmlkZSBieSB6ZXJvLCBidXQgd3JhcHMKKwkgKiBhcm91bmQgYW5kIGRpdmlkZXMgYnkgMHgxMDAwMC4gIFRoYXQgaXMgd2h5IHByZXNjYWxlIG11c3QgYmUKKwkgKiBhIHUzMiB2YXJpYWJsZSwgbm90IGEgdTE2LCBmb3IgdGhpcyBjYWxjdWxhdGlvbi4gKi8KKwlwcmVzY2FsZSA9IChjbG9ja3MgPj4gMTYpICsgMTsKKwlkb19kaXYoY2xvY2tzLCBwcmVzY2FsZSk7CisJaWYgKGNsb2NrcyA+IDB4ZmZmZikgeworCQlwcl9lcnIoImNhbGN1bGF0aW9uIGVycm9yOyBwcmVzY2FsZToleCBjbG9ja3M6JWxseFxuIiwKKwkJICAgICAgIHByZXNjYWxlLCBjbG9ja3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTZXQgYW5kIGVuYWJsZSB0aGUgdGltZXIsIHJlamVjdCBhbiBhdHRlbXB0IHRvIHVzZSBhIHdkdCBhcyBncHQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJaWYgKGFzX3dkdCkKKwkJZ3B0LT53ZHRfbW9kZSB8PSBNUEM1Mnh4X0dQVF9JU19XRFQ7CisJZWxzZSBpZiAoKGdwdC0+d2R0X21vZGUgJiBNUEM1Mnh4X0dQVF9JU19XRFQpICE9IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW91dF9iZTMyKCZncHQtPnJlZ3MtPmNvdW50LCBwcmVzY2FsZSA8PCAxNiB8IGNsb2Nrcyk7CisJY2xyc2V0Yml0c19iZTMyKCZncHQtPnJlZ3MtPm1vZGUsIGNsZWFyLCBzZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbXBjNTJ4eF9ncHRfc3RhcnRfdGltZXIgLSBTZXQgYW5kIGVuYWJsZSB0aGUgR1BUIHRpbWVyCisgKiBAZ3B0OiBQb2ludGVyIHRvIGdwdCBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKiBAcGVyaW9kOiBwZXJpb2Qgb2YgdGltZXIgaW4gbnM7IG1heC4gfjEzMHMgQCAzM01IeiBJUEIgY2xvY2sKKyAqIEBjb250aW51b3VzOiBzZXQgdG8gMSB0byBtYWtlIHRpbWVyIGNvbnRpbnVvdXMgZnJlZSBydW5uaW5nCisgKgorICogQW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIGV2ZXJ5IHRpbWUgdGhlIHRpbWVyIGZpcmVzCisgKi8KK2ludCBtcGM1Mnh4X2dwdF9zdGFydF90aW1lcihzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0LCB1NjQgcGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250aW51b3VzKQoreworCXJldHVybiBtcGM1Mnh4X2dwdF9kb19zdGFydChncHQsIHBlcmlvZCwgY29udGludW91cywgMCk7Cit9CitFWFBPUlRfU1lNQk9MKG1wYzUyeHhfZ3B0X3N0YXJ0X3RpbWVyKTsKKworLyoqCisgKiBtcGM1Mnh4X2dwdF9zdG9wX3RpbWVyIC0gU3RvcCBhIGdwdAorICogQGdwdDogUG9pbnRlciB0byBncHQgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgYW4gZXJyb3IgaWYgYXR0ZW1wdGluZyB0byBzdG9wIGEgd2R0CisgKi8KK2ludCBtcGM1Mnh4X2dwdF9zdG9wX3RpbWVyKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHJlamVjdCB0aGUgb3BlcmF0aW9uIGlmIHRoZSB0aW1lciBpcyB1c2VkIGFzIHdhdGNoZG9nIChncHQgMCBvbmx5KSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwlpZiAoKGdwdC0+d2R0X21vZGUgJiBNUEM1Mnh4X0dQVF9JU19XRFQpICE9IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY2xyYml0czMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfQ09VTlRFUl9FTkFCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtcGM1Mnh4X2dwdF9zdG9wX3RpbWVyKTsKKworLyoqCisgKiBtcGM1Mnh4X2dwdF90aW1lcl9wZXJpb2QgLSBSZWFkIHRoZSB0aW1lciBwZXJpb2QKKyAqIEBncHQ6IFBvaW50ZXIgdG8gZ3B0IHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIHRoZSB0aW1lciBwZXJpb2QgaW4gbnMKKyAqLwordTY0IG1wYzUyeHhfZ3B0X3RpbWVyX3BlcmlvZChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0KQoreworCXU2NCBwZXJpb2Q7CisJdTY0IHByZXNjYWxlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJcGVyaW9kID0gaW5fYmUzMigmZ3B0LT5yZWdzLT5jb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisKKwlwcmVzY2FsZSA9IHBlcmlvZCA+PiAxNjsKKwlwZXJpb2QgJj0gMHhmZmZmOworCWlmIChwcmVzY2FsZSA9PSAwKQorCQlwcmVzY2FsZSA9IDB4MTAwMDA7CisJcGVyaW9kID0gcGVyaW9kICogcHJlc2NhbGUgKiAxMDAwMDAwMDAwVUxMOworCWRvX2RpdihwZXJpb2QsICh1NjQpZ3B0LT5pcGJfZnJlcSk7CisJcmV0dXJuIHBlcmlvZDsKK30KK0VYUE9SVF9TWU1CT0wobXBjNTJ4eF9ncHRfdGltZXJfcGVyaW9kKTsKKworI2lmIGRlZmluZWQoQ09ORklHX01QQzUyMDBfV0RUKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXYXRjaGRvZyBBUEkgZm9yIGdwdDAKKyAqLworCisjZGVmaW5lIFdEVF9JREVOVElUWQkgICAgIm1wYzUyeHggd2F0Y2hkb2cgb24gR1BUMCIKKworLyogd2R0X2lzX2FjdGl2ZSBzdG9yZXMgd2V0aGVyIG9yIG5vdCB0aGUgL2Rldi93YXRjaGRvZyBkZXZpY2UgaXMgb3BlbmVkICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfaXNfYWN0aXZlOworCisvKiB3ZHQtY2FwYWJsZSBncHQgKi8KK3N0YXRpYyBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqbXBjNTJ4eF9ncHRfd2R0OworCisvKiBsb3ctbGV2ZWwgd2R0IGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSB2b2lkIG1wYzUyeHhfZ3B0X3dkdF9waW5nKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHRfd2R0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0X3dkdC0+bG9jaywgZmxhZ3MpOworCW91dF84KCh1OCAqKSAmZ3B0X3dkdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9XRFRfUElORyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0X3dkdC0+bG9jaywgZmxhZ3MpOworfQorCisvKiB3ZHQgbWlzYyBkZXZpY2UgYXBpICovCitzdGF0aWMgc3NpemVfdCBtcGM1Mnh4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkJIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0X3dkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwltcGM1Mnh4X2dwdF93ZHRfcGluZyhncHRfd2R0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIG1wYzUyMDBfd2R0X2luZm8gPSB7CisJLm9wdGlvbnMJPSBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKKwkuaWRlbnRpdHkJPSBXRFRfSURFTlRJVFksCit9OworCitzdGF0aWMgbG9uZyBtcGM1Mnh4X3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHRfd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBfX3VzZXIgKmRhdGEgPSAoaW50IF9fdXNlciAqKWFyZzsKKwlpbnQgdGltZW91dDsKKwl1NjQgcmVhbF90aW1lb3V0OworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldCA9IGNvcHlfdG9fdXNlcihkYXRhLCAmbXBjNTIwMF93ZHRfaW5mbywKKwkJCQkgICBzaXplb2YobXBjNTIwMF93ZHRfaW5mbykpOworCQlpZiAocmV0KQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCXJldCA9IHB1dF91c2VyKDAsIGRhdGEpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQltcGM1Mnh4X2dwdF93ZHRfcGluZyhncHRfd2R0KTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCXJldCA9IGdldF91c2VyKHRpbWVvdXQsIGRhdGEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXJlYWxfdGltZW91dCA9ICh1NjQpIHRpbWVvdXQgKiAxMDAwMDAwMDAwVUxMOworCQlyZXQgPSBtcGM1Mnh4X2dwdF9kb19zdGFydChncHRfd2R0LCByZWFsX3RpbWVvdXQsIDAsIDEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCBhbmQgcmV0dXJuIHRoZSB0aW1lb3V0ICovCisKKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCS8qIHdlIG5lZWQgdG8gcm91bmQgaGVyZSBhcyB0byBhdm9pZCBlLmcuIHRoZSBmb2xsb3dpbmcKKwkJICogc2l0dWF0aW9uOgorCQkgKiAtIHRpbWVvdXQgcmVxdWVzdGVkIGlzIDEgc2Vjb25kOworCQkgKiAtIHJlYWwgdGltZW91dCBAMzNNSHogaXMgOTk5OTk3MDkwbnMKKwkJICogLSB0aGUgaW50IGRpdmlkZSBieSAxMF45IHdpbGwgcmV0dXJuIDAuCisJCSAqLworCQlyZWFsX3RpbWVvdXQgPQorCQkJbXBjNTJ4eF9ncHRfdGltZXJfcGVyaW9kKGdwdF93ZHQpICsgNTAwMDAwMDAwVUxMOworCQlkb19kaXYocmVhbF90aW1lb3V0LCAxMDAwMDAwMDAwVUxMKTsKKwkJdGltZW91dCA9IChpbnQpIHJlYWxfdGltZW91dDsKKwkJcmV0ID0gcHV0X3VzZXIodGltZW91dCwgZGF0YSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1RUWTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQ7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoIW1wYzUyeHhfZ3B0X3dkdCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJndkdF9pc19hY3RpdmUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogU2V0IGFuZCBhY3RpdmF0ZSB0aGUgd2F0Y2hkb2cgd2l0aCAzMCBzZWNvbmRzIHRpbWVvdXQgKi8KKwlyZXQgPSBtcGM1Mnh4X2dwdF9kb19zdGFydChtcGM1Mnh4X2dwdF93ZHQsIDMwVUxMICogMTAwMDAwMDAwMFVMTCwKKwkJCQkgICAwLCAxKTsKKwlpZiAocmV0KSB7CisJCWNsZWFyX2JpdCgwLCAmd2R0X2lzX2FjdGl2ZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbXBjNTJ4eF9ncHRfd2R0OworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCS8qIG5vdGU6IHJlbGVhc2luZyB0aGUgd2R0IGluIE5PV0FZT1VULW1vZGUgZG9lcyBub3Qgc3RvcCBpdCAqLworI2lmICFkZWZpbmVkKENPTkZJR19XQVRDSERPR19OT1dBWU9VVCkKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0X3dkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdF93ZHQtPmxvY2ssIGZsYWdzKTsKKwljbHJiaXRzMzIoJmdwdF93ZHQtPnJlZ3MtPm1vZGUsCisJCSAgTVBDNTJ4eF9HUFRfTU9ERV9DT1VOVEVSX0VOQUJMRSB8IE1QQzUyeHhfR1BUX01PREVfV0RUX0VOKTsKKwlncHRfd2R0LT53ZHRfbW9kZSAmPSB+TVBDNTJ4eF9HUFRfSVNfV0RUOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdF93ZHQtPmxvY2ssIGZsYWdzKTsKKyNlbmRpZgorCWNsZWFyX2JpdCgwLCAmd2R0X2lzX2FjdGl2ZSk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXBjNTJ4eF93ZHRfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLndyaXRlCQk9IG1wYzUyeHhfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bCA9IG1wYzUyeHhfd2R0X2lvY3RsLAorCS5vcGVuCQk9IG1wYzUyeHhfd2R0X29wZW4sCisJLnJlbGVhc2UJPSBtcGM1Mnh4X3dkdF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1wYzUyeHhfd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJCT0gJm1wYzUyeHhfd2R0X2ZvcHMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1Mnh4X2dwdF93ZHRfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwkvKiB0cnkgdG8gcmVnaXN0ZXIgdGhlIHdhdGNoZG9nIG1pc2MgZGV2aWNlICovCisJZXJyID0gbWlzY19yZWdpc3RlcigmbXBjNTJ4eF93ZHRfbWlzY2Rldik7CisJaWYgKGVycikKKwkJcHJfZXJyKCIlczogY2Fubm90IHJlZ2lzdGVyIHdhdGNoZG9nIGRldmljZVxuIiwgV0RUX0lERU5USVRZKTsKKwllbHNlCisJCXByX2luZm8oIiVzOiB3YXRjaGRvZyBkZXZpY2UgcmVnaXN0ZXJlZFxuIiwgV0RUX0lERU5USVRZKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X3dkdF9zZXR1cChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0LAorCQkJCSBjb25zdCB1MzIgKnBlcmlvZCkKK3sKKwl1NjQgcmVhbF90aW1lb3V0OworCisJLyogcmVtZW1iZXIgdGhlIGdwdCBmb3IgdGhlIHdkdCBvcGVyYXRpb24gKi8KKwltcGM1Mnh4X2dwdF93ZHQgPSBncHQ7CisKKwkvKiBjb25maWd1cmUgdGhlIHdkdCBpZiB0aGUgZGV2aWNlIHRyZWUgY29udGFpbmVkIGEgdGltZW91dCAqLworCWlmICghcGVyaW9kIHx8ICpwZXJpb2QgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZWFsX3RpbWVvdXQgPSAodTY0KSAqcGVyaW9kICogMTAwMDAwMDAwMFVMTDsKKwlpZiAobXBjNTJ4eF9ncHRfZG9fc3RhcnQoZ3B0LCByZWFsX3RpbWVvdXQsIDAsIDEpKQorCQlkZXZfd2FybihncHQtPmRldiwgInN0YXJ0aW5nIGFzIHdkdCBmYWlsZWRcbiIpOworCWVsc2UKKwkJZGV2X2luZm8oZ3B0LT5kZXYsICJ3YXRjaGRvZyBzZXQgdG8gJXVzIHRpbWVvdXRcbiIsICpwZXJpb2QpOworCXJldHVybiAwOworfQorCisjZWxzZQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1Mnh4X2dwdF93ZHRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIG1wYzUyeHhfZ3B0X3dkdF9zZXR1cCh4LCB5KQkJKDApCisKKyNlbmRpZgkvKiAgQ09ORklHX01QQzUyMDBfV0RUCSovCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogb2ZfcGxhdGZvcm0gYnVzIGJpbmRpbmcgY29kZQogICovCkBAIC0zNDksNiArNzI5LDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZncHQtPmxvY2spOwogCWdwdC0+ZGV2ID0gJm9mZGV2LT5kZXY7CisJZ3B0LT5pcGJfZnJlcSA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kob2ZkZXYtPm5vZGUpOwogCWdwdC0+cmVncyA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKIAlpZiAoIWdwdC0+cmVncykgewogCQlrZnJlZShncHQpOwpAQCAtMzYwLDYgKzc0MSwyNiBAQAogCW1wYzUyeHhfZ3B0X2dwaW9fc2V0dXAoZ3B0LCBvZmRldi0+bm9kZSk7CiAJbXBjNTJ4eF9ncHRfaXJxX3NldHVwKGdwdCwgb2ZkZXYtPm5vZGUpOwogCisJbXV0ZXhfbG9jaygmbXBjNTJ4eF9ncHRfbGlzdF9tdXRleCk7CisJbGlzdF9hZGQoJmdwdC0+bGlzdCwgJm1wYzUyeHhfZ3B0X2xpc3QpOworCW11dGV4X3VubG9jaygmbXBjNTJ4eF9ncHRfbGlzdF9tdXRleCk7CisKKwkvKiBjaGVjayBpZiB0aGlzIGRldmljZSBjb3VsZCBiZSBhIHdhdGNoZG9nICovCisJaWYgKG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImZzbCxoYXMtd2R0IiwgTlVMTCkgfHwKKwkgICAgb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiaGFzLXdkdCIsIE5VTEwpKSB7CisJCWNvbnN0IHUzMiAqb25fYm9vdF93ZHQ7CisKKwkJZ3B0LT53ZHRfbW9kZSA9IE1QQzUyeHhfR1BUX0NBTl9XRFQ7CisJCW9uX2Jvb3Rfd2R0ID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiZnNsLHdkdC1vbi1ib290IiwKKwkJCQkJICAgICAgTlVMTCk7CisJCWlmIChvbl9ib290X3dkdCkgeworCQkJZGV2X2luZm8oZ3B0LT5kZXYsICJ1c2VkIGFzIHdhdGNoZG9nXG4iKTsKKwkJCWdwdC0+d2R0X21vZGUgfD0gTVBDNTJ4eF9HUFRfSVNfV0RUOworCQl9IGVsc2UKKwkJCWRldl9pbmZvKGdwdC0+ZGV2LCAiY2FuIGZ1bmN0aW9uIGFzIHdhdGNoZG9nXG4iKTsKKwkJbXBjNTJ4eF9ncHRfd2R0X3NldHVwKGdwdCwgb25fYm9vdF93ZHQpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zOTQsMyArNzk1LDQgQEAKIAogLyogTWFrZSBzdXJlIEdQSU9zIGFuZCBJUlFzIGdldCBzZXQgdXAgYmVmb3JlIGFueW9uZSB0cmllcyB0byB1c2UgdGhlbSAqLwogc3Vic3lzX2luaXRjYWxsKG1wYzUyeHhfZ3B0X2luaXQpOworZGV2aWNlX2luaXRjYWxsKG1wYzUyeHhfZ3B0X3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjlkMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfbHBiZmlmby5jCkBAIC0wLDAgKzEsNTYwIEBACisvKgorICogTG9jYWxQbHVzIEJ1cyBGSUZPIGRyaXZlciBmb3IgdGhlIEZyZWVzY2FsZSBNUEM1Mnh4LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgorICoKKyAqIFRvZG86CisgKiAtIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSByZXF1ZXN0cyB0byBiZSBxdWV1ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmg+CisjaW5jbHVkZSA8c3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tX3ByaXYuaD4KKyNpbmNsdWRlIDxzeXNkZXYvYmVzdGNvbW0vZ2VuX2JkLmg+CisKK01PRFVMRV9BVVRIT1IoIkdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTVBDNTIwMCBMb2NhbFBsdXMgRklGTyBkZXZpY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgTFBCRklGT19SRUdfUEFDS0VUX1NJWkUJCSgweDAwKQorI2RlZmluZSBMUEJGSUZPX1JFR19TVEFSVF9BRERSRVNTCSgweDA0KQorI2RlZmluZSBMUEJGSUZPX1JFR19DT05UUk9MCQkoMHgwOCkKKyNkZWZpbmUgTFBCRklGT19SRUdfRU5BQkxFCQkoMHgwQykKKyNkZWZpbmUgTFBCRklGT19SRUdfQllURVNfRE9ORV9TVEFUVVMJKDB4MTQpCisjZGVmaW5lIExQQkZJRk9fUkVHX0ZJRk9fREFUQQkJKDB4NDApCisjZGVmaW5lIExQQkZJRk9fUkVHX0ZJRk9fU1RBVFVTCQkoMHg0NCkKKyNkZWZpbmUgTFBCRklGT19SRUdfRklGT19DT05UUk9MCSgweDQ4KQorI2RlZmluZSBMUEJGSUZPX1JFR19GSUZPX0FMQVJNCQkoMHg0QykKKworc3RydWN0IG1wYzUyeHhfbHBiZmlmbyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXBoeXNfYWRkcl90IHJlZ3NfcGh5czsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsKKwlzcGlubG9ja190IGxvY2s7CisKKwlzdHJ1Y3QgYmNvbV90YXNrICpiY29tX3R4X3Rhc2s7CisJc3RydWN0IGJjb21fdGFzayAqYmNvbV9yeF90YXNrOworCXN0cnVjdCBiY29tX3Rhc2sgKmJjb21fY3VyX3Rhc2s7CisKKwkvKiBDdXJyZW50IHN0YXRlIGRhdGEgKi8KKwlzdHJ1Y3QgbXBjNTJ4eF9scGJmaWZvX3JlcXVlc3QgKnJlcTsKKwlpbnQgZG1hX2lycXNfZW5hYmxlZDsKK307CisKKy8qIFRoZSBNUEM1MjAwIGhhcyBvbmx5IG9uZSBmaWZvLCBzbyBvbmx5IG5lZWQgb25lIGluc3RhbmNlIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBtcGM1Mnh4X2xwYmZpZm8gbHBiZmlmbzsKKworLyoqCisgKiBtcGM1Mnh4X2xwYmZpZm9fa2ljayAtIFRyaWdnZXIgdGhlIG5leHQgYmxvY2sgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcmVkCisgKi8KK3N0YXRpYyB2b2lkIG1wYzUyeHhfbHBiZmlmb19raWNrKHN0cnVjdCBtcGM1Mnh4X2xwYmZpZm9fcmVxdWVzdCAqcmVxKQoreworCXNpemVfdCB0cmFuc2Zlcl9zaXplID0gcmVxLT5zaXplIC0gcmVxLT5wb3M7CisJc3RydWN0IGJjb21fYmQgKmJkOworCXZvaWQgX19pb21lbSAqcmVnOworCXUzMiAqZGF0YTsKKwlpbnQgaTsKKwlpbnQgYml0X2ZpZWxkczsKKwlpbnQgZG1hID0gIShyZXEtPmZsYWdzICYgTVBDNTJYWF9MUEJGSUZPX0ZMQUdfTk9fRE1BKTsKKwlpbnQgd3JpdGUgPSByZXEtPmZsYWdzICYgTVBDNTJYWF9MUEJGSUZPX0ZMQUdfV1JJVEU7CisJaW50IHBvbGxfZG1hID0gcmVxLT5mbGFncyAmIE1QQzUyWFhfTFBCRklGT19GTEFHX1BPTExfRE1BOworCisJLyogU2V0IGFuZCBjbGVhciB0aGUgcmVzZXQgYml0czsgaXMgZ29vZCBwcmFjdGljZSBpbiBVc2VyIE1hbnVhbCAqLworCW91dF9iZTMyKGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX0VOQUJMRSwgMHgwMTAxMDAwMCk7CisKKwkvKiBzZXQgbWFzdGVyIGVuYWJsZSBiaXQgKi8KKwlvdXRfYmUzMihscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19FTkFCTEUsIDB4MDAwMDAwMDEpOworCWlmICghZG1hKSB7CisJCS8qIFdoaWxlIHRoZSBGSUZPIGNhbiBiZSBzZXR1cCBmb3IgdHJhbnNmZXIgc2l6ZXMgYXMgbGFyZ2UgYXMKKwkJICogMTZNLTEsIHRoZSBGSUZPIGl0c2VsZiBpcyBvbmx5IDUxMiBieXRlcyBkZWVwIGFuZCBpdCBkb2VzCisJCSAqIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGZvciBGSUZPIGZ1bGwgZXZlbnRzIChvbmx5IHRyYW5zZmVyCisJCSAqIGNvbXBsZXRlIHdpbGwgcmFpc2UgYW4gSVJRKS4gIFRoZXJlZm9yZSB3aGVuIG5vdCB1c2luZworCQkgKiBCZXN0Y29tbSB0byBkcml2ZSB0aGUgRklGTyBpdCBuZWVkcyB0byBlaXRoZXIgYmUgcG9sbGVkLCBvcgorCQkgKiB0cmFuc2ZlcnMgbmVlZCB0byBjb25zdHJhaW5lZCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlmby4KKwkJICoKKwkJICogVGhpcyBkcml2ZXIgcmVzdHJpY3RzIHRoZSBzaXplIG9mIHRoZSB0cmFuc2ZlcgorCQkgKi8KKwkJaWYgKHRyYW5zZmVyX3NpemUgPiA1MTIpCisJCQl0cmFuc2Zlcl9zaXplID0gNTEyOworCisJCS8qIExvYWQgdGhlIEZJRk8gd2l0aCBkYXRhICovCisJCWlmICh3cml0ZSkgeworCQkJcmVnID0gbHBiZmlmby5yZWdzICsgTFBCRklGT19SRUdfRklGT19EQVRBOworCQkJZGF0YSA9IHJlcS0+ZGF0YSArIHJlcS0+cG9zOworCQkJZm9yIChpID0gMDsgaSA8IHRyYW5zZmVyX3NpemU7IGkgKz0gNCkKKwkJCQlvdXRfYmUzMihyZWcsICpkYXRhKyspOworCQl9CisKKwkJLyogVW5tYXNrIGJvdGggZXJyb3IgYW5kIGNvbXBsZXRpb24gaXJxcyAqLworCQlvdXRfYmUzMihscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19FTkFCTEUsIDB4MDAwMDAzMDEpOworCX0gZWxzZSB7CisJCS8qIENob29zZSB0aGUgY29ycmVjdCBkaXJlY3Rpb24KKwkJICoKKwkJICogQ29uZmlndXJlIHRoZSB3YXRlcm1hcmtzIHNvIERNQSB3aWxsIGFsd2F5cyBjb21wbGV0ZSBjb3JyZWN0bHkuCisJCSAqIEl0IG1heSBiZSB3b3J0aCBleHBlcmltZW50aW5nIHdpdGggdGhlIEFMQVJNIHZhbHVlIHRvIHNlZSBpZgorCQkgKiB0aGVyZSBpcyBhIHBlcmZvcm1hbmNlIGltcGFjaXQuICBIb3dldmVyLCBpZiBpdCBpcyB3cm9uZyB0aGVyZQorCQkgKiBpcyBhIHJpc2sgb2YgRE1BIG5vdCB0cmFuc2ZlcnJpbmcgdGhlIGxhc3QgY2h1bmsgb2YgZGF0YQorCQkgKi8KKwkJaWYgKHdyaXRlKSB7CisJCQlvdXRfYmUzMihscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19GSUZPX0FMQVJNLCAweDFlNCk7CisJCQlvdXRfOChscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19GSUZPX0NPTlRST0wsIDcpOworCQkJbHBiZmlmby5iY29tX2N1cl90YXNrID0gbHBiZmlmby5iY29tX3R4X3Rhc2s7CisJCX0gZWxzZSB7CisJCQlvdXRfYmUzMihscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19GSUZPX0FMQVJNLCAweDFmZik7CisJCQlvdXRfOChscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19GSUZPX0NPTlRST0wsIDApOworCQkJbHBiZmlmby5iY29tX2N1cl90YXNrID0gbHBiZmlmby5iY29tX3J4X3Rhc2s7CisKKwkJCWlmIChwb2xsX2RtYSkgeworCQkJCWlmIChscGJmaWZvLmRtYV9pcnFzX2VuYWJsZWQpIHsKKwkJCQkJZGlzYWJsZV9pcnEoYmNvbV9nZXRfdGFza19pcnEobHBiZmlmby5iY29tX3J4X3Rhc2spKTsKKwkJCQkJbHBiZmlmby5kbWFfaXJxc19lbmFibGVkID0gMDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICghbHBiZmlmby5kbWFfaXJxc19lbmFibGVkKSB7CisJCQkJCWVuYWJsZV9pcnEoYmNvbV9nZXRfdGFza19pcnEobHBiZmlmby5iY29tX3J4X3Rhc2spKTsKKwkJCQkJbHBiZmlmby5kbWFfaXJxc19lbmFibGVkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQliZCA9IGJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihscGJmaWZvLmJjb21fY3VyX3Rhc2spOworCQliZC0+c3RhdHVzID0gdHJhbnNmZXJfc2l6ZTsKKwkJaWYgKCF3cml0ZSkgeworCQkJLyoKKwkJCSAqIEluIHRoZSBETUEgcmVhZCBjYXNlLCB0aGUgRE1BIGRvZXNuJ3QgY29tcGxldGUsCisJCQkgKiBwb3NzaWJseSBkdWUgdG8gaW5jb3JyZWN0IHdhdGVybWFya3MgaW4gdGhlIEFMQVJNCisJCQkgKiBhbmQgQ09OVFJPTCByZWdzLiBGb3Igbm93IGluc3RlYWQgb2YgdHJ5aW5nIHRvCisJCQkgKiBkZXRlcm1pbmUgdGhlIHJpZ2h0IHdhdGVybWFya3MgdGhhdCB3aWxsIG1ha2UgdGhpcworCQkJICogd29yaywganVzdCBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBGSUZPIGlzCisJCQkgKiBleHBlY3RpbmcuCisJCQkgKgorCQkJICogV2hlbiBzdWJtaXR0aW5nIGFub3RoZXIgb3BlcmF0aW9uLCB0aGUgRklGTyB3aWxsIGdldAorCQkJICogcmVzZXQsIHNvIHRoZSBjb25kaXRpb24gb2YgdGhlIEZJRk8gd2FpdGluZyBmb3IgYQorCQkJICogbm9uLWV4aXN0ZW50IDQgYnl0ZXMgd2lsbCBnZXQgY2xlYXJlZC4KKwkJCSAqLworCQkJdHJhbnNmZXJfc2l6ZSArPSA0OyAvKiBCTEVDSCEgKi8KKwkJfQorCQliZC0+ZGF0YVswXSA9IHJlcS0+ZGF0YV9waHlzICsgcmVxLT5wb3M7CisJCWJjb21fc3VibWl0X25leHRfYnVmZmVyKGxwYmZpZm8uYmNvbV9jdXJfdGFzaywgTlVMTCk7CisKKwkJLyogZXJyb3IgaXJxICYgbWFzdGVyIGVuYWJsZWQgYml0ICovCisJCWJpdF9maWVsZHMgPSAweDAwMDAwMjAxOworCisJCS8qIFVubWFzayBpcnFzICovCisJCWlmICh3cml0ZSAmJiAoIXBvbGxfZG1hKSkKKwkJCWJpdF9maWVsZHMgfD0gMHgwMDAwMDEwMDsgLyogY29tcGxldGlvbiBpcnEgdG9vICovCisJCW91dF9iZTMyKGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX0VOQUJMRSwgYml0X2ZpZWxkcyk7CisJfQorCisJLyogU2V0IHRyYW5zZmVyIHNpemUsIHdpZHRoLCBjaGlwIHNlbGVjdCBhbmQgUkVBRCBtb2RlICovCisJb3V0X2JlMzIobHBiZmlmby5yZWdzICsgTFBCRklGT19SRUdfU1RBUlRfQUREUkVTUywKKwkJIHJlcS0+b2Zmc2V0ICsgcmVxLT5wb3MpOworCW91dF9iZTMyKGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX1BBQ0tFVF9TSVpFLCB0cmFuc2Zlcl9zaXplKTsKKworCWJpdF9maWVsZHMgPSByZXEtPmNzIDw8IDI0IHwgMHgwMDAwMDg7CisJaWYgKCF3cml0ZSkKKwkJYml0X2ZpZWxkcyB8PSAweDAxMDAwMDsgLyogcmVhZCBtb2RlICovCisJb3V0X2JlMzIobHBiZmlmby5yZWdzICsgTFBCRklGT19SRUdfQ09OVFJPTCwgYml0X2ZpZWxkcyk7CisKKwkvKiBLaWNrIGl0IG9mZiAqLworCW91dF84KGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX1BBQ0tFVF9TSVpFLCAweDAxKTsKKwlpZiAoZG1hKQorCQliY29tX2VuYWJsZShscGJmaWZvLmJjb21fY3VyX3Rhc2spOworfQorCisvKioKKyAqIG1wYzUyeHhfbHBiZmlmb19pcnEgLSBJUlEgaGFuZGxlciBmb3IgTFBCIEZJRk8KKyAqCisgKiBPbiB0cmFuc21pdCwgdGhlIGRtYSBjb21wbGV0aW9uIGlycSB0cmlnZ2VycyBiZWZvcmUgdGhlIGZpZm8gY29tcGxldGlvbgorICogdHJpZ2dlcnMuICBIYW5kbGUgdGhlIGRtYSBjb21wbGV0aW9uIGhlcmUgaW5zdGVhZCBvZiB0aGUgTFBCIEZJRk8gQmVzdGNvbW0KKyAqIHRhc2sgY29tcGxldGlvbiBpcnEgYmVjdWFzZSBldmVyeXRpbmcgaXMgbm90IHJlYWxseSBkb25lIHVudGlsIHRoZSBMUEIgRklGTworICogY29tcGxldGlvbiBpcnEgdHJpZ2dlcnMuCisgKgorICogSW4gb3RoZXIgd29yZHM6CisgKiBGb3IgRE1BLCBvbiByZWNlaXZlLCB0aGUgIkZhdCBMYWR5IiBpcyB0aGUgYmVzdGNvbSBjb21wbGV0aW9uIGlycS4gb24KKyAqIHRyYW5zbWl0LCB0aGUgZmlmbyBjb21wbGV0aW9uIGlycSBpcyB0aGUgIkZhdCBMYWR5Ii4gVGhlIG9wZXJhIChvciBpbiB0aGlzCisgKiBjYXNlIHRoZSBETUEvRklGTyBvcGVyYXRpb24pIGlzIG5vdCBmaW5pc2hlZCB1bnRpbCB0aGUgIkZhdCBMYWR5IiBzaW5ncy4KKyAqCisgKiBSZWFzb25zIGZvciBlbnRlcmluZyB0aGlzIHJvdXRpbmU6CisgKiAxKSBQSU8gbW9kZSByeCBhbmQgdHggY29tcGxldGlvbiBpcnEKKyAqIDIpIERNQSBpbnRlcnJ1cHQgbW9kZSB0eCBjb21wbGV0aW9uIGlycQorICogMykgRE1BIHBvbGxlZCBtb2RlIHR4CisgKgorICogRXhpdCBjb25kaXRpb25zOgorICogMSkgVHJhbnNmZXIgYWJvcnRlZAorICogMikgRklGTyBjb21wbGV0ZSB3aXRob3V0IERNQTsgbW9yZSBkYXRhIHRvIGRvCisgKiAzKSBGSUZPIGNvbXBsZXRlIHdpdGhvdXQgRE1BOyBhbGwgZGF0YSB0cmFuc2ZlcmVkCisgKiA0KSBGSUZPIGNvbXBsZXRlIHVzaW5nIERNQQorICoKKyAqIENvbmRpdGlvbiAxIGNhbiBvY2N1ciByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IERNQSBpcyB1c2VkLgorICogSXQgcmVxdWlyZXMgZXhlY3V0aW5nIHRoZSBjYWxsYmFjayB0byByZXBvcnQgdGhlIGVycm9yIGFuZCBleGl0aW5nCisgKiBpbW1lZGlhdGVseS4KKyAqCisgKiBDb25kaXRpb24gMiByZXF1aXJlcyBwcm9ncmFtbWluZyB0aGUgRklGTyB3aXRoIHRoZSBuZXh0IGJsb2NrIG9mIGRhdGEKKyAqCisgKiBDb25kaXRpb24gMyByZXF1aXJlcyBleGVjdXRpbmcgdGhlIGNhbGxiYWNrIHRvIHJlcG9ydCBjb21wbGV0aW9uCisgKgorICogQ29uZGl0aW9uIDQgbWVhbnMgdGhlIHNhbWUgYXMgMywgZXhjZXB0IHRoYXQgd2UgYWxzbyByZXRyaWV2ZSB0aGUgYmNvbQorICogYnVmZmVyIHNvIERNQSBkb2Vzbid0IGdldCBjbG9nZ2VkIHVwLgorICoKKyAqIFRvIG1ha2UgdGhpbmdzIHRyaWNraWVyLCB0aGUgc3BpbmxvY2sgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZQorICogZXhlY3V0aW5nIHRoZSBjYWxsYmFjaywgb3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCB3aXRoIGEgZGVhZGxvY2sKKyAqIG9yIG5lc3RlZCBzcGlubG9jayBjb25kaXRpb24uICBUaGUgb3V0IHBhdGggaXMgbm9uLXRyaXZpYWwsIHNvCisgKiBleHRyYSBmaWRkbGluZyBpcyBkb25lIHRvIG1ha2Ugc3VyZSBhbGwgcGF0aHMgbGVhZCB0byB0aGUgc2FtZQorICogb3V0Ym91bmQgY29kZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IG1wYzUyeHhfbHBiZmlmb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtcGM1Mnh4X2xwYmZpZm9fcmVxdWVzdCAqcmVxOworCXUzMiBzdGF0dXMgPSBpbl84KGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX0JZVEVTX0RPTkVfU1RBVFVTKTsKKwl2b2lkIF9faW9tZW0gKnJlZzsKKwl1MzIgKmRhdGE7CisJaW50IGNvdW50LCBpOworCWludCBkb19jYWxsYmFjayA9IDA7CisJdTMyIHRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRtYSwgd3JpdGUsIHBvbGxfZG1hOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCXRzID0gZ2V0X3RibCgpOworCisJcmVxID0gbHBiZmlmby5yZXE7CisJaWYgKCFyZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHBiZmlmby5sb2NrLCBmbGFncyk7CisJCXByX2VycigiYm9ndXMgTFBCRklGTyBJUlFcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJZG1hID0gIShyZXEtPmZsYWdzICYgTVBDNTJYWF9MUEJGSUZPX0ZMQUdfTk9fRE1BKTsKKwl3cml0ZSA9IHJlcS0+ZmxhZ3MgJiBNUEM1MlhYX0xQQkZJRk9fRkxBR19XUklURTsKKwlwb2xsX2RtYSA9IHJlcS0+ZmxhZ3MgJiBNUEM1MlhYX0xQQkZJRk9fRkxBR19QT0xMX0RNQTsKKworCWlmIChkbWEgJiYgIXdyaXRlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCQlwcl9lcnIoImJvZ3VzIExQQkZJRk8gSVJRIChkbWEgYW5kIG5vdCB3cml0dGluZylcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKChzdGF0dXMgJiAweDAxKSA9PSAwKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGFib3J0IGJpdCAqLworCWlmIChzdGF0dXMgJiAweDEwKSB7CisJCW91dF9iZTMyKGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX0VOQUJMRSwgMHgwMTAxMDAwMCk7CisJCWRvX2NhbGxiYWNrID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUmVhZCByZXN1bHQgZnJvbSBoYXJkd2FyZSAqLworCWNvdW50ID0gaW5fYmUzMihscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19CWVRFU19ET05FX1NUQVRVUyk7CisJY291bnQgJj0gMHgwMGZmZmZmZjsKKworCWlmICghZG1hICYmICF3cml0ZSkgeworCQkvKiBjb3B5IHRoZSBkYXRhIG91dCBvZiB0aGUgRklGTyAqLworCQlyZWcgPSBscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19GSUZPX0RBVEE7CisJCWRhdGEgPSByZXEtPmRhdGEgKyByZXEtPnBvczsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpICs9IDQpCisJCQkqZGF0YSsrID0gaW5fYmUzMihyZWcpOworCX0KKworCS8qIFVwZGF0ZSB0cmFuc2ZlciBwb3NpdGlvbiBhbmQgY291bnQgKi8KKwlyZXEtPnBvcyArPSBjb3VudDsKKworCS8qIERlY2lkZSB3aGF0IHRvIGRvIG5leHQgKi8KKwlpZiAocmVxLT5zaXplIC0gcmVxLT5wb3MpCisJCW1wYzUyeHhfbHBiZmlmb19raWNrKHJlcSk7IC8qIG1vcmUgd29yayB0byBkbyAqLworCWVsc2UKKwkJZG9fY2FsbGJhY2sgPSAxOworCisgb3V0OgorCS8qIENsZWFyIHRoZSBJUlEgKi8KKwlvdXRfOChscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19CWVRFU19ET05FX1NUQVRVUywgMHgwMSk7CisKKwlpZiAoZG1hICYmIChzdGF0dXMgJiAweDExKSkgeworCQkvKgorCQkgKiBDb3VudCB0aGUgRE1BIGFzIGNvbXBsZXRlIG9ubHkgd2hlbiB0aGUgRklGTyBjb21wbGV0aW9uCisJCSAqIHN0YXR1cyBvciBhYm9ydCBiaXRzIGFyZSBzZXQuCisJCSAqCisJCSAqIChzdGF0dXMgJiAweDAxKSBzaG91bGQgYWx3YXlzIGJlIHRoZSBjYXNlIGV4Y2VwdCBzb21ldGltZXMKKwkJICogd2hlbiB1c2luZyBwb2xsZWQgRE1BLgorCQkgKgorCQkgKiAoc3RhdHVzICYgMHgxMCkge3RyYW5zZmVyIGFib3J0ZWR9OiBUaGlzIGNhc2UgbmVlZHMgbW9yZQorCQkgKiB0ZXN0aW5nLgorCQkgKi8KKwkJYmNvbV9yZXRyaWV2ZV9idWZmZXIobHBiZmlmby5iY29tX2N1cl90YXNrLCAmc3RhdHVzLCBOVUxMKTsKKwl9CisJcmVxLT5sYXN0X2J5dGUgPSAoKHU4ICopcmVxLT5kYXRhKVtyZXEtPnNpemUgLSAxXTsKKworCS8qIFdoZW4gdGhlIGRvX2NhbGxiYWNrIGZsYWcgaXMgc2V0OyBpdCBtZWFucyB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQKKwkgKiBzbyBzZXQgdGhlIEZJRk8gYXMgaWRsZSAqLworCWlmIChkb19jYWxsYmFjaykKKwkJbHBiZmlmby5yZXEgPSBOVUxMOworCisJaWYgKGlycSAhPSAwKSAvKiBkb24ndCBpbmNyZW1lbnQgb24gcG9sbGVkIGNhc2UgKi8KKwkJcmVxLT5pcnFfY291bnQrKzsKKworCXJlcS0+aXJxX3RpY2tzICs9IGdldF90YmwoKSAtIHRzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCisJLyogU3BpbmxvY2sgaXMgcmVsZWFzZWQ7IGl0IGlzIG5vdyBzYWZlIHRvIGNhbGwgdGhlIGNhbGxiYWNrICovCisJaWYgKGRvX2NhbGxiYWNrICYmIHJlcS0+Y2FsbGJhY2spCisJCXJlcS0+Y2FsbGJhY2socmVxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBtcGM1Mnh4X2xwYmZpZm9fYmNvbV9pcnEgLSBJUlEgaGFuZGxlciBmb3IgTFBCIEZJRk8gQmVzdGNvbW0gdGFzaworICoKKyAqIE9ubHkgdXNlZCB3aGVuIHJlY2VpdmluZyBkYXRhLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTJ4eF9scGJmaWZvX2Jjb21faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9scGJmaWZvX3JlcXVlc3QgKnJlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGF0dXM7CisJdTMyIHRzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCXRzID0gZ2V0X3RibCgpOworCisJcmVxID0gbHBiZmlmby5yZXE7CisJaWYgKCFyZXEgfHwgKHJlcS0+ZmxhZ3MgJiBNUEM1MlhYX0xQQkZJRk9fRkxBR19OT19ETUEpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycSAhPSAwKSAvKiBkb24ndCBpbmNyZW1lbnQgb24gcG9sbGVkIGNhc2UgKi8KKwkJcmVxLT5pcnFfY291bnQrKzsKKworCWlmICghYmNvbV9idWZmZXJfZG9uZShscGJmaWZvLmJjb21fY3VyX3Rhc2spKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCisJCXJlcS0+YnVmZmVyX25vdF9kb25lX2NudCsrOworCQlpZiAoKHJlcS0+YnVmZmVyX25vdF9kb25lX2NudCAlIDEwMDApID09IDApCisJCQlwcl9lcnIoInRyYW5zZmVyIHN0YWxsZWRcbiIpOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwliY29tX3JldHJpZXZlX2J1ZmZlcihscGJmaWZvLmJjb21fY3VyX3Rhc2ssICZzdGF0dXMsIE5VTEwpOworCisJcmVxLT5sYXN0X2J5dGUgPSAoKHU4ICopcmVxLT5kYXRhKVtyZXEtPnNpemUgLSAxXTsKKworCXJlcS0+cG9zID0gc3RhdHVzICYgMHgwMGZmZmZmZjsKKworCS8qIE1hcmsgdGhlIEZJRk8gYXMgaWRsZSAqLworCWxwYmZpZm8ucmVxID0gTlVMTDsKKworCS8qIFJlbGVhc2UgdGhlIGxvY2sgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIHRoZSBjYWxsYmFjay4gKi8KKwlyZXEtPmlycV90aWNrcyArPSBnZXRfdGJsKCkgLSB0czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscGJmaWZvLmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXEtPmNhbGxiYWNrKQorCQlyZXEtPmNhbGxiYWNrKHJlcSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogbXBjNTJ4eF9scGJmaWZvX2Jjb21fcG9sbCAtIFBvbGwgZm9yIERNQSBjb21wbGV0aW9uCisgKi8KK3ZvaWQgbXBjNTJ4eF9scGJmaWZvX3BvbGwodm9pZCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9scGJmaWZvX3JlcXVlc3QgKnJlcSA9IGxwYmZpZm8ucmVxOworCWludCBkbWEgPSAhKHJlcS0+ZmxhZ3MgJiBNUEM1MlhYX0xQQkZJRk9fRkxBR19OT19ETUEpOworCWludCB3cml0ZSA9IHJlcS0+ZmxhZ3MgJiBNUEM1MlhYX0xQQkZJRk9fRkxBR19XUklURTsKKworCS8qCisJICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBjb21tZW50cyBvbiB0aGUgIkZhdCBMYWR5IiAKKwkgKi8KKwlpZiAoZG1hICYmIHdyaXRlKQorCQltcGM1Mnh4X2xwYmZpZm9faXJxKDAsIE5VTEwpOworCWVsc2UgCisJCW1wYzUyeHhfbHBiZmlmb19iY29tX2lycSgwLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0wobXBjNTJ4eF9scGJmaWZvX3BvbGwpOworCisvKioKKyAqIG1wYzUyeHhfbHBiZmlmb19zdWJtaXQgLSBTdWJtaXQgYW4gTFBCIEZJRk8gdHJhbnNmZXIgcmVxdWVzdC4KKyAqIEByZXE6IFBvaW50ZXIgdG8gcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqLworaW50IG1wYzUyeHhfbHBiZmlmb19zdWJtaXQoc3RydWN0IG1wYzUyeHhfbHBiZmlmb19yZXF1ZXN0ICpyZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbHBiZmlmby5yZWdzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscGJmaWZvLmxvY2ssIGZsYWdzKTsKKworCS8qIElmIHRoZSByZXEgcG9pbnRlciBpcyBhbHJlYWR5IHNldCwgdGhlbiBhIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzICovCisJaWYgKGxwYmZpZm8ucmVxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFNldHVwIHRoZSB0cmFuc2ZlciAqLworCWxwYmZpZm8ucmVxID0gcmVxOworCXJlcS0+aXJxX2NvdW50ID0gMDsKKwlyZXEtPmlycV90aWNrcyA9IDA7CisJcmVxLT5idWZmZXJfbm90X2RvbmVfY250ID0gMDsKKwlyZXEtPnBvcyA9IDA7CisKKwltcGM1Mnh4X2xwYmZpZm9fa2ljayhyZXEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwYmZpZm8ubG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtcGM1Mnh4X2xwYmZpZm9fc3VibWl0KTsKKwordm9pZCBtcGM1Mnh4X2xwYmZpZm9fYWJvcnQoc3RydWN0IG1wYzUyeHhfbHBiZmlmb19yZXF1ZXN0ICpyZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscGJmaWZvLmxvY2ssIGZsYWdzKTsKKwlpZiAobHBiZmlmby5yZXEgPT0gcmVxKSB7CisJCS8qIFB1dCBpdCBpbnRvIHJlc2V0IGFuZCBjbGVhciB0aGUgc3RhdGUgKi8KKwkJYmNvbV9nZW5fYmRfcnhfcmVzZXQobHBiZmlmby5iY29tX3J4X3Rhc2spOworCQliY29tX2dlbl9iZF90eF9yZXNldChscGJmaWZvLmJjb21fdHhfdGFzayk7CisJCW91dF9iZTMyKGxwYmZpZm8ucmVncyArIExQQkZJRk9fUkVHX0VOQUJMRSwgMHgwMTAxMDAwMCk7CisJCWxwYmZpZm8ucmVxID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHBiZmlmby5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG1wYzUyeHhfbHBiZmlmb19hYm9ydCk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CittcGM1Mnh4X2xwYmZpZm9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJaW50IHJjID0gLUVOT01FTTsKKworCWlmIChscGJmaWZvLmRldiAhPSBOVUxMKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWxwYmZpZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCWlmICghbHBiZmlmby5pcnEpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uob3AtPm5vZGUsIDAsICZyZXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlscGJmaWZvLnJlZ3NfcGh5cyA9IHJlcy5zdGFydDsKKwlscGJmaWZvLnJlZ3MgPSBvZl9pb21hcChvcC0+bm9kZSwgMCk7CisJaWYgKCFscGJmaWZvLnJlZ3MpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmxwYmZpZm8ubG9jayk7CisKKwkvKiBQdXQgRklGTyBpbnRvIHJlc2V0ICovCisJb3V0X2JlMzIobHBiZmlmby5yZWdzICsgTFBCRklGT19SRUdfRU5BQkxFLCAweDAxMDEwMDAwKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXJjID0gcmVxdWVzdF9pcnEobHBiZmlmby5pcnEsIG1wYzUyeHhfbHBiZmlmb19pcnEsIDAsCisJCQkgIm1wYzUyeHgtbHBiZmlmbyIsICZscGJmaWZvKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2lycTsKKworCS8qIFJlcXVlc3QgdGhlIEJlc3Rjb21tIHJlY2VpdmUgKGZpZm8gLS0+IG1lbW9yeSkgdGFzayBhbmQgSVJRICovCisJbHBiZmlmby5iY29tX3J4X3Rhc2sgPQorCQliY29tX2dlbl9iZF9yeF9pbml0KDIsIHJlcy5zdGFydCArIExQQkZJRk9fUkVHX0ZJRk9fREFUQSwKKwkJCQkgICAgQkNPTV9JTklUSUFUT1JfU0NMUEMsIEJDT01fSVBSX1NDTFBDLAorCQkJCSAgICAxNioxMDI0KjEwMjQpOworCWlmICghbHBiZmlmby5iY29tX3J4X3Rhc2spCisJCWdvdG8gZXJyX2Jjb21fcng7CisKKwlyYyA9IHJlcXVlc3RfaXJxKGJjb21fZ2V0X3Rhc2tfaXJxKGxwYmZpZm8uYmNvbV9yeF90YXNrKSwKKwkJCSBtcGM1Mnh4X2xwYmZpZm9fYmNvbV9pcnEsIDAsCisJCQkgIm1wYzUyeHgtbHBiZmlmby1yeCIsICZscGJmaWZvKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2Jjb21fcnhfaXJxOworCisJLyogUmVxdWVzdCB0aGUgQmVzdGNvbW0gdHJhbnNtaXQgKG1lbW9yeSAtLT4gZmlmbykgdGFzayBhbmQgSVJRICovCisJbHBiZmlmby5iY29tX3R4X3Rhc2sgPQorCQliY29tX2dlbl9iZF90eF9pbml0KDIsIHJlcy5zdGFydCArIExQQkZJRk9fUkVHX0ZJRk9fREFUQSwKKwkJCQkgICAgQkNPTV9JTklUSUFUT1JfU0NMUEMsIEJDT01fSVBSX1NDTFBDKTsKKwlpZiAoIWxwYmZpZm8uYmNvbV90eF90YXNrKQorCQlnb3RvIGVycl9iY29tX3R4OworCisJbHBiZmlmby5kZXYgPSAmb3AtPmRldjsKKwlyZXR1cm4gMDsKKworIGVycl9iY29tX3R4OgorCWZyZWVfaXJxKGJjb21fZ2V0X3Rhc2tfaXJxKGxwYmZpZm8uYmNvbV9yeF90YXNrKSwgJmxwYmZpZm8pOworIGVycl9iY29tX3J4X2lycToKKwliY29tX2dlbl9iZF9yeF9yZWxlYXNlKGxwYmZpZm8uYmNvbV9yeF90YXNrKTsKKyBlcnJfYmNvbV9yeDoKKyBlcnJfaXJxOgorCWlvdW5tYXAobHBiZmlmby5yZWdzKTsKKwlscGJmaWZvLnJlZ3MgPSBOVUxMOworCisJZGV2X2Vycigmb3AtPmRldiwgIm1wYzUyeHhfbHBiZmlmb19wcm9iZSgpIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKworc3RhdGljIGludCBfX2RldmV4aXQgbXBjNTJ4eF9scGJmaWZvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlpZiAobHBiZmlmby5kZXYgIT0gJm9wLT5kZXYpCisJCXJldHVybiAwOworCisJLyogUHV0IEZJRk8gaW4gcmVzZXQgKi8KKwlvdXRfYmUzMihscGJmaWZvLnJlZ3MgKyBMUEJGSUZPX1JFR19FTkFCTEUsIDB4MDEwMTAwMDApOworCisJLyogUmVsZWFzZSB0aGUgYmVzdGNvbW0gdHJhbnNtaXQgdGFzayAqLworCWZyZWVfaXJxKGJjb21fZ2V0X3Rhc2tfaXJxKGxwYmZpZm8uYmNvbV90eF90YXNrKSwgJmxwYmZpZm8pOworCWJjb21fZ2VuX2JkX3R4X3JlbGVhc2UobHBiZmlmby5iY29tX3R4X3Rhc2spOworCQorCS8qIFJlbGVhc2UgdGhlIGJlc3Rjb21tIHJlY2VpdmUgdGFzayAqLworCWZyZWVfaXJxKGJjb21fZ2V0X3Rhc2tfaXJxKGxwYmZpZm8uYmNvbV9yeF90YXNrKSwgJmxwYmZpZm8pOworCWJjb21fZ2VuX2JkX3J4X3JlbGVhc2UobHBiZmlmby5iY29tX3J4X3Rhc2spOworCisJZnJlZV9pcnEobHBiZmlmby5pcnEsICZscGJmaWZvKTsKKwlpb3VubWFwKGxwYmZpZm8ucmVncyk7CisJbHBiZmlmby5yZWdzID0gTlVMTDsKKwlscGJmaWZvLmRldiA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9scGJmaWZvX21hdGNoW10gX19kZXZpbml0Y29uc3QgPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1scGJmaWZvIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfbHBiZmlmb19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibXBjNTJ4eC1scGJmaWZvIiwKKwkubWF0Y2hfdGFibGUgPSBtcGM1Mnh4X2xwYmZpZm9fbWF0Y2gsCisJLnByb2JlID0gbXBjNTJ4eF9scGJmaWZvX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtcGM1Mnh4X2xwYmZpZm9fcmVtb3ZlKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTW9kdWxlIGluaXQvZXhpdAorICovCitzdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X2xwYmZpZm9faW5pdCh2b2lkKQoreworCXByX2RlYnVnKCJSZWdpc3RlcmluZyBMb2NhbFBsdXMgYnVzIEZJRk8gZHJpdmVyXG4iKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X2xwYmZpZm9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1wYzUyeHhfbHBiZmlmb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUyeHhfbHBiZmlmb19leGl0KHZvaWQpCit7CisJcHJfZGVidWcoIlVucmVnaXN0ZXJpbmcgTG9jYWxQbHVzIGJ1cyBGSUZPIGRyaXZlclxuIik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfbHBiZmlmb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXBjNTJ4eF9scGJmaWZvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwppbmRleCA0ODBmODA2Li40YmY0YmY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBjNTJ4eF9leHRpcnFfaXJxY2hpcCA9IHsKLQkudHlwZW5hbWUgPSAiTVBDNTJ4eCBFeHRlcm5hbCIsCisJLm5hbWUgPSAiTVBDNTJ4eCBFeHRlcm5hbCIsCiAJLm1hc2sgPSBtcGM1Mnh4X2V4dGlycV9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X2V4dGlycV91bm1hc2ssCiAJLmFjayA9IG1wYzUyeHhfZXh0aXJxX2FjaywKQEAgLTI1OCw3ICsyNTgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzUyeHhfbWFpbl9pcnFjaGlwID0gewotCS50eXBlbmFtZSA9ICJNUEM1Mnh4IE1haW4iLAorCS5uYW1lID0gIk1QQzUyeHggTWFpbiIsCiAJLm1hc2sgPSBtcGM1Mnh4X21haW5fbWFzaywKIAkubWFza19hY2sgPSBtcGM1Mnh4X21haW5fbWFzaywKIAkudW5tYXNrID0gbXBjNTJ4eF9tYWluX3VubWFzaywKQEAgLTI5MSw3ICsyOTEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzUyeHhfcGVyaXBoX2lycWNoaXAgPSB7Ci0JLnR5cGVuYW1lID0gIk1QQzUyeHggUGVyaXBoZXJhbHMiLAorCS5uYW1lID0gIk1QQzUyeHggUGVyaXBoZXJhbHMiLAogCS5tYXNrID0gbXBjNTJ4eF9wZXJpcGhfbWFzaywKIAkubWFza19hY2sgPSBtcGM1Mnh4X3BlcmlwaF9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X3BlcmlwaF91bm1hc2ssCkBAIC0zMzUsNyArMzM1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM1Mnh4X3NkbWFfaXJxY2hpcCA9IHsKLQkudHlwZW5hbWUgPSAiTVBDNTJ4eCBTRE1BIiwKKwkubmFtZSA9ICJNUEM1Mnh4IFNETUEiLAogCS5tYXNrID0gbXBjNTJ4eF9zZG1hX21hc2ssCiAJLnVubWFzayA9IG1wYzUyeHhfc2RtYV91bm1hc2ssCiAJLmFjayA9IG1wYzUyeHhfc2RtYV9hY2ssCkBAIC0zNTUsNyArMzU1LDcgQEAKICAqIG1wYzUyeHhfaXJxaG9zdF94bGF0ZSAtIHRyYW5zbGF0ZSB2aXJxIyBmcm9tIGRldmljZSB0cmVlIGludGVycnVwdHMgcHJvcGVydHkKICAqLwogc3RhdGljIGludCBtcGM1Mnh4X2lycWhvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJCSB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJCSBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJCSBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKIAkJCQkgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9wcTJhZHMtcGNpLXBpYy5jCmluZGV4IDdlZTk3OWYuLjlkOTYyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9wcTJhZHMtcGNpLXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9wcTJhZHMtcGNpLXBpYy5jCkBAIC02OSw3ICs2OSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHEyYWRzX3BjaV9pYyA9IHsKLQkudHlwZW5hbWUgPSAiUFEyIEFEUyBQQ0kiLAogCS5uYW1lID0gIlBRMiBBRFMgUENJIiwKIAkuZW5kID0gcHEyYWRzX3BjaV91bm1hc2tfaXJxLAogCS5tYXNrID0gcHEyYWRzX3BjaV9tYXNrX2lycSwKQEAgLTEwNyw3ICsxMDYsNyBAQAogc3RhdGljIGludCBwY2lfcGljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQkgICAgaXJxX2h3X251bWJlcl90IGh3KQogewotCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBoLT5ob3N0X2RhdGEpOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmcHEyYWRzX3BjaV9pYywgaGFuZGxlX2xldmVsX2lycSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X3JkYi5jCmluZGV4IDU2N2RlZDcuLjE3Zjk5NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X3JkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X3JkYi5jCkBAIC03NCw3ICs3NCw3IEBACiAKIAkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKIAkJaWYgKHByb3AgJiYgIXN0cmNtcChwcm9wLCAiY3B1LXFlIikpCi0JCQlwZGF0YS5xZV9tb2RlID0gMTsKKwkJCXBkYXRhLmZsYWdzID0gU1BJX1FFX0NQVV9NT0RFOwogCiAJCWZvciAoaiA9IDA7IGogPCBudW1fYm9hcmRfaW5mb3M7IGorKykgewogCQkJaWYgKGJvYXJkX2luZm9zW2pdLmJ1c19udW0gPT0gcGRhdGEuYnVzX251bSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCmluZGV4IDA4ZTY1ZmMuLjQzODA1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBQTUNDUjFfTkVYVF9TVEFURSAgICAgICAweDBDIC8qIE5leHQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgUE1DQ1IxX05FWFRfU1RBVEVfU0hJRlQgMgogI2RlZmluZSBQTUNDUjFfQ1VSUl9TVEFURSAgICAgICAweDAzIC8qIEN1cnJlbnQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQqLworI2RlZmluZSBJTU1SX1NZU0NSX09GRlNFVCAgICAgICAweDEwMAogI2RlZmluZSBJTU1SX1JDV19PRkZTRVQgICAgICAgICAweDkwMAogI2RlZmluZSBSQ1dfUENJX0hPU1QgICAgICAgICAgICAweDgwMDAwMDAwCiAKQEAgLTc4LDYgKzc5LDIyIEBACiAJdTMyIHNjY3I7CiB9OwogCitzdHJ1Y3QgbXBjODN4eF9zeXNjciB7CisJX19iZTMyIHNncHJsOworCV9fYmUzMiBzZ3ByaDsKKwlfX2JlMzIgc3ByaWRyOworCV9fYmUzMiA6MzI7CisJX19iZTMyIHNwY3I7CisJX19iZTMyIHNpY3JsOworCV9fYmUzMiBzaWNyaDsKK307CisKK3N0cnVjdCBtcGM4M3h4X3NhdmVkIHsKKwl1MzIgc2ljcmw7CisJdTMyIHNpY3JoOworCXUzMiBzY2NyOworfTsKKwogc3RydWN0IHBtY190eXBlIHsKIAlpbnQgaGFzX2RlZXBfc2xlZXA7CiB9OwpAQCAtODcsNiArMTA0LDggQEAKIHN0YXRpYyBpbnQgcG1jX2lycTsKIHN0YXRpYyBzdHJ1Y3QgbXBjODN4eF9wbWMgX19pb21lbSAqcG1jX3JlZ3M7CiBzdGF0aWMgc3RydWN0IG1wYzgzeHhfY2xvY2sgX19pb21lbSAqY2xvY2tfcmVnczsKK3N0YXRpYyBzdHJ1Y3QgbXBjODN4eF9zeXNjciBfX2lvbWVtICpzeXNjcl9yZWdzOworc3RhdGljIHN0cnVjdCBtcGM4M3h4X3NhdmVkIHNhdmVkX3JlZ3M7CiBzdGF0aWMgaW50IGlzX3BjaV9hZ2VudCwgd2FrZV9mcm9tX3BjaTsKIHN0YXRpYyBwaHlzX2FkZHJfdCBpbW1yYmFzZTsKIHN0YXRpYyBpbnQgcGNpX3BtX3N0YXRlOwpAQCAtOTYsNiArMTE1LDcgQEAKIHsKIAlyZXR1cm4gZGVlcF9zbGVlcGluZzsKIH0KK0VYUE9SVF9TWU1CT0woZnNsX2RlZXBfc2xlZXApOwogCiBzdGF0aWMgaW50IG1wYzgzeHhfY2hhbmdlX3N0YXRlKHZvaWQpCiB7CkBAIC0xMzYsNiArMTU2LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgbXBjODN4eF9zdXNwZW5kX3Jlc3RvcmVfcmVncyh2b2lkKQoreworCW91dF9iZTMyKCZzeXNjcl9yZWdzLT5zaWNybCwgc2F2ZWRfcmVncy5zaWNybCk7CisJb3V0X2JlMzIoJnN5c2NyX3JlZ3MtPnNpY3JoLCBzYXZlZF9yZWdzLnNpY3JoKTsKKwlvdXRfYmUzMigmY2xvY2tfcmVncy0+c2Njciwgc2F2ZWRfcmVncy5zY2NyKTsKK30KKworc3RhdGljIHZvaWQgbXBjODN4eF9zdXNwZW5kX3NhdmVfcmVncyh2b2lkKQoreworCXNhdmVkX3JlZ3Muc2ljcmwgPSBpbl9iZTMyKCZzeXNjcl9yZWdzLT5zaWNybCk7CisJc2F2ZWRfcmVncy5zaWNyaCA9IGluX2JlMzIoJnN5c2NyX3JlZ3MtPnNpY3JoKTsKKwlzYXZlZF9yZWdzLnNjY3IgPSBpbl9iZTMyKCZjbG9ja19yZWdzLT5zY2NyKTsKK30KKwogc3RhdGljIGludCBtcGM4M3h4X3N1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewogCWludCByZXQgPSAtRUFHQUlOOwpAQCAtMTY1LDYgKzE5OSw4IEBACiAJICovCiAKIAlpZiAoZGVlcF9zbGVlcGluZykgeworCQltcGM4M3h4X3N1c3BlbmRfc2F2ZV9yZWdzKCk7CisKIAkJb3V0X2JlMzIoJnBtY19yZWdzLT5tYXNrLCBQTUNFUl9BTEwpOwogCiAJCW91dF9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSwKQEAgLTE3OCw2ICsyMTQsOCBAQAogCQkgICAgICAgICBpbl9iZTMyKCZwbWNfcmVncy0+Y29uZmlnMSkgJiB+UE1DQ1IxX1BPV0VSX09GRik7CiAKIAkJb3V0X2JlMzIoJnBtY19yZWdzLT5tYXNrLCBQTUNFUl9QTUNJKTsKKworCQltcGM4M3h4X3N1c3BlbmRfcmVzdG9yZV9yZWdzKCk7CiAJfSBlbHNlIHsKIAkJb3V0X2JlMzIoJnBtY19yZWdzLT5tYXNrLCBQTUNFUl9QTUNJKTsKIApAQCAtMTkzLDcgKzIzMSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbXBjODN4eF9zdXNwZW5kX2ZpbmlzaCh2b2lkKQorc3RhdGljIHZvaWQgbXBjODN4eF9zdXNwZW5kX2VuZCh2b2lkKQogewogCWRlZXBfc2xlZXBpbmcgPSAwOwogfQpAQCAtMjc3LDcgKzMxNSw3IEBACiAJLnZhbGlkID0gbXBjODN4eF9zdXNwZW5kX3ZhbGlkLAogCS5iZWdpbiA9IG1wYzgzeHhfc3VzcGVuZF9iZWdpbiwKIAkuZW50ZXIgPSBtcGM4M3h4X3N1c3BlbmRfZW50ZXIsCi0JLmZpbmlzaCA9IG1wYzgzeHhfc3VzcGVuZF9maW5pc2gsCisJLmVuZCA9IG1wYzgzeHhfc3VzcGVuZF9lbmQsCiB9OwogCiBzdGF0aWMgaW50IHBtY19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKQEAgLTMzMiwxMiArMzcwLDIzIEBACiAJCWdvdG8gb3V0X3BtYzsKIAl9CiAKKwlpZiAoaGFzX2RlZXBfc2xlZXApIHsKKwkJc3lzY3JfcmVncyA9IGlvcmVtYXAoaW1tcmJhc2UgKyBJTU1SX1NZU0NSX09GRlNFVCwKKwkJCQkgICAgIHNpemVvZigqc3lzY3JfcmVncykpOworCQlpZiAoIXN5c2NyX3JlZ3MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9zeXNjcjsKKwkJfQorCX0KKwogCWlmIChpc19wY2lfYWdlbnQpCiAJCW1wYzgzeHhfc2V0X2FnZW50KCk7CiAKIAlzdXNwZW5kX3NldF9vcHMoJm1wYzgzeHhfc3VzcGVuZF9vcHMpOwogCXJldHVybiAwOwogCitvdXRfc3lzY3I6CisJaW91bm1hcChjbG9ja19yZWdzKTsKIG91dF9wbWM6CiAJaW91bm1hcChwbWNfcmVncyk7CiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IGQzYTk3NWUuLmQ5NTEyMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAotbWVudWNvbmZpZyBNUEM4NXh4Ci0JYm9vbCAiTWFjaGluZSBUeXBlIgotCWRlcGVuZHMgb24gUFBDXzg1eHgKK21lbnVjb25maWcgRlNMX1NPQ19CT09LRQorCWJvb2wgIkZyZWVzY2FsZSBCb29rLUUgTWFjaGluZSBUeXBlIgorCWRlcGVuZHMgb24gUFBDXzg1eHggfHwgUFBDX0JPT0szRQorCXNlbGVjdCBGU0xfU09DCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKQEAgLTgsNyArOSw3IEBACiAJc2VsZWN0IFNFUklBTF84MjUwX1NIQVJFX0lSUSBpZiBTRVJJQUxfODI1MAogCWRlZmF1bHQgeQogCi1pZiBNUEM4NXh4CitpZiBGU0xfU09DX0JPT0tFCiAKIGNvbmZpZyBNUEM4NTQwX0FEUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4NTQwIEFEUyIKQEAgLTE0NCw3ICsxNDUsMTkgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBXaW5kIFJpdmVyIFNCQzg1NjAgYm9hcmQKIAotZW5kaWYgIyBNUEM4NXh4Citjb25maWcgUDQwODBfRFMKKwlib29sICJGcmVlc2NhbGUgUDQwODAgRFMiCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IFBQQ19GU0xfQk9PSzNFCisJc2VsZWN0IFBQQ19FNTAwTUMKKwlzZWxlY3QgUEhZU182NEJJVAorCXNlbGVjdCBTV0lPVExCCisJc2VsZWN0IE1QQzh4eHhfR1BJTworCXNlbGVjdCBIQVNfUkFQSURJTworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFA0MDgwIERTIGJvYXJkCisKK2VuZGlmICMgRlNMX1NPQ19CT09LRQogCiBjb25maWcgVFFNODV4eAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQppbmRleCA5MDk4YWVhLi4zODdjMTI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfTVBDODV4eF9EUykgICs9IG1wYzg1eHhfZHMubwogb2JqLSQoQ09ORklHX01QQzg1eHhfTURTKSArPSBtcGM4NXh4X21kcy5vCiBvYmotJChDT05GSUdfTVBDODV4eF9SREIpICs9IG1wYzg1eHhfcmRiLm8KK29iai0kKENPTkZJR19QNDA4MF9EUykgICAgKz0gcDQwODBfZHMubyBjb3JlbmV0X2RzLm8KIG9iai0kKENPTkZJR19TVFhfR1AzKQkgICs9IHN0eF9ncDMubwogb2JqLSQoQ09ORklHX1RRTTg1eHgpCSAgKz0gdHFtODV4eC5vCiBvYmotJChDT05GSUdfU0JDODU2MCkgICAgICs9IHNiYzg1NjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2NvcmVuZXRfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb3JlbmV0X2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0YzJlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb3JlbmV0X2RzLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3JlbmV0IGJhc2VkIFNvQyBEUyBTZXR1cAorICoKKyAqIE1haW50YWluZWQgYnkgS3VtYXIgR2FsYSAoc2VlIE1BSU5UQUlORVJTIGZvciBjb250YWN0IGluZm9ybWF0aW9uKQorICoKKyAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9tcGljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKwordm9pZCBfX2luaXQgY29yZW5ldF9kc19waWNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCXVuc2lnbmVkIGludCBmbGFncyA9IE1QSUNfUFJJTUFSWSB8IE1QSUNfQklHX0VORElBTiB8CisJCQkJTVBJQ19CUk9LRU5fRlJSX05JUlFTIHwgTVBJQ19TSU5HTEVfREVTVF9DUFU7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5wLCAib3Blbi1waWMiKTsKKworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJaWYgKHBwY19tZC5nZXRfaXJxID09IG1waWNfZ2V0X2NvcmVpbnRfaXJxKQorCQlmbGFncyB8PSBNUElDX0VOQUJMRV9DT1JFSU5UOworCisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsIGZsYWdzLCAwLCAyNTYsICIgT3BlblBJQyAgIik7CisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisKKwltcGljX2luaXQobXBpYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW50IHByaW1hcnlfcGhiX2FkZHI7CisjZW5kaWYKKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgX19pbml0IG1wYzg1eHhfc21wX2luaXQodm9pZCk7CisjZW5kaWYKKwordm9pZCBfX2luaXQgY29yZW5ldF9kc19zZXR1cF9hcmNoKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworI2VuZGlmCisJZG1hX2FkZHJfdCBtYXggPSAweGZmZmZmZmZmOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg1eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSQorCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wscDQwODAtcGNpZSIpIHsKKwkJc3RydWN0IHJlc291cmNlIHJzcmM7CisJCW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyc3JjKTsKKwkJaWYgKChyc3JjLnN0YXJ0ICYgMHhmZmZmZikgPT0gcHJpbWFyeV9waGJfYWRkcikKKwkJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKwkJZWxzZQorCQkJZnNsX2FkZF9icmlkZ2UobnAsIDApOworCisJCWhvc2UgPSBwY2lfZmluZF9ob3NlX2Zvcl9PRl9kZXZpY2UobnApOworCQltYXggPSBtaW4obWF4LCBob3NlLT5kbWFfd2luZG93X2Jhc2VfY3VyICsKKwkJCQlob3NlLT5kbWFfd2luZG93X3NpemUpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NXSU9UTEIKKwlpZiAobG1iX2VuZF9vZl9EUkFNKCkgPiBtYXgpIHsKKwkJcHBjX3N3aW90bGJfZW5hYmxlID0gMTsKKwkJc2V0X3BjaV9kbWFfb3BzKCZzd2lvdGxiX2RtYV9vcHMpOworCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBwY2lfZG1hX2Rldl9zZXR1cF9zd2lvdGxiOworCX0KKyNlbmRpZgorCXByX2luZm8oIiVzIGJvYXJkIGZyb20gRnJlZXNjYWxlIFNlbWljb25kdWN0b3JcbiIsIHBwY19tZC5uYW1lKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZGV2aWNlX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworCXsKKwkJLmNvbXBhdGlibGUJPSAic2ltcGxlLWJ1cyIKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUJPSAiZnNsLHJhcGlkaW8tZGVsdGEiLAorCX0sCisJe30KK307CisKK2ludCBfX2luaXQgY29yZW5ldF9kc19wdWJsaXNoX2RldmljZXModm9pZCkKK3sKKwlyZXR1cm4gb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2RldmljZV9pZHMsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2NvcmVuZXRfZHMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb3JlbmV0X2RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkNzAwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb3JlbmV0X2RzLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcmVuZXQgYmFzZWQgU29DIERTIFNldHVwCisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgQ09SRU5FVF9EU19ICisjZGVmaW5lIENPUkVORVRfRFNfSAorCitleHRlcm4gdm9pZCBfX2luaXQgY29yZW5ldF9kc19waWNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBjb3JlbmV0X2RzX3NldHVwX2FyY2godm9pZCk7CitleHRlcm4gaW50IF9faW5pdCBjb3JlbmV0X2RzX3B1Ymxpc2hfZGV2aWNlcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IDM5MDlkNTcuLjIxZjYxYjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC04Niw3ICs4Niw3IEBACiAJc2NyID0gcGh5X3JlYWQocGh5ZGV2LCBNVjg4RTExMTFfU0NSKTsKIAogCWlmIChzY3IgPCAwKQotCQlyZXR1cm4gZXJyOworCQlyZXR1cm4gc2NyOwogCiAJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTVY4OEUxMTExX1NDUiwgc2NyIHwgMHgwMDA4KTsKIApAQCAtMzAxLDYgKzMwMSw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscWUiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscmFwaWRpby1kZWx0YSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfcmRiLmMKaW5kZXggYzg0NjhkZS4uMDg4ZjMwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfcmRiLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlzdHJ1Y3QgbXBpYyAqbXBpYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgcjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKIAogCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIm9wZW4tcGljIik7CiAJaWYgKG5wID09IE5VTEwpIHsKQEAgLTU3LDExICs1OCwxOCBAQAogCQlyZXR1cm47CiAJfQogCi0JbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZnNsLDg1WFhSREItQ0FNUCIpKSB7CisJCW1waWMgPSBtcGljX2FsbG9jKG5wLCByLnN0YXJ0LAorCQkJTVBJQ19QUklNQVJZIHwKKwkJCU1QSUNfQklHX0VORElBTiB8IE1QSUNfQlJPS0VOX0ZSUl9OSVJRUywKKwkJCTAsIDI1NiwgIiBPcGVuUElDICAiKTsKKwl9IGVsc2UgeworCQltcGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKIAkJICBNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwKIAkJICBNUElDX0JJR19FTkRJQU4gfCBNUElDX0JST0tFTl9GUlJfTklSUVMgfAogCQkgIE1QSUNfU0lOR0xFX0RFU1RfQ1BVLAogCQkgIDAsIDI1NiwgIiBPcGVuUElDICAiKTsKKwl9CiAKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CkBAIC0xMTMsNiArMTIxLDcgQEAKIAlyZXR1cm4gb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG1wYzg1eHhyZGJfaWRzLCBOVUxMKTsKIH0KIG1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHAyMDIwX3JkYiwgbXBjODV4eHJkYl9wdWJsaXNoX2RldmljZXMpOworbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwocDEwMjBfcmRiLCBtcGM4NXh4cmRiX3B1Ymxpc2hfZGV2aWNlcyk7CiAKIC8qCiAgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKQEAgLTEyNiw2ICsxMzUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2luaXQgcDEwMjBfcmRiX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZnNsLFAxMDIwUkRCIikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBkZWZpbmVfbWFjaGluZShwMjAyMF9yZGIpIHsKIAkubmFtZQkJCT0gIlAyMDIwIFJEQiIsCiAJLnByb2JlCQkJPSBwMjAyMF9yZGJfcHJvYmUsCkBAIC0xMzksMyArMTU3LDE3IEBACiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCiB9OworCitkZWZpbmVfbWFjaGluZShwMTAyMF9yZGIpIHsKKwkubmFtZQkJCT0gIlAxMDIwIFJEQiIsCisJLnByb2JlCQkJPSBwMTAyMF9yZGJfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gbXBjODV4eF9yZGJfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gbXBjODV4eF9yZGJfcGljX2luaXQsCisjaWZkZWYgQ09ORklHX1BDSQorCS5wY2liaW9zX2ZpeHVwX2J1cwk9IGZzbF9wY2liaW9zX2ZpeHVwX2J1cywKKyNlbmRpZgorCS5nZXRfaXJxCQk9IG1waWNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBmc2xfcnN0Y3JfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvcDQwODBfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wNDA4MF9kcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTcwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvcDQwODBfZHMuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogUDQwODAgRFMgU2V0dXAKKyAqCisgKiBNYWludGFpbmVkIGJ5IEt1bWFyIEdhbGEgKHNlZSBNQUlOVEFJTkVSUyBmb3IgY29udGFjdCBpbmZvcm1hdGlvbikKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorCisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisKKyNpbmNsdWRlICJjb3JlbmV0X2RzLmgiCisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW50IHByaW1hcnlfcGhiX2FkZHI7CisjZW5kaWYKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBwNDA4MF9kc19wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImZzbCxQNDA4MERTIikpIHsKKyNpZmRlZiBDT05GSUdfUENJCisJCS8qIHRyZWF0IFBDSWUxIGFzIHByaW1hcnksCisJCSAqIHNob3VsZG4ndCBtYXR0ZXIgYXMgd2UgaGF2ZSBubyBJU0Egb24gdGhlIGJvYXJkCisJCSAqLworCQlwcmltYXJ5X3BoYl9hZGRyID0gMHgwMDAwOworI2VuZGlmCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworZGVmaW5lX21hY2hpbmUocDQwODBfZHMpIHsKKwkubmFtZQkJCT0gIlA0MDgwIERTIiwKKwkucHJvYmUJCQk9IHA0MDgwX2RzX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IGNvcmVuZXRfZHNfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gY29yZW5ldF9kc19waWNfaW5pdCwKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCisJLmdldF9pcnEJCT0gbXBpY19nZXRfY29yZWludF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OworCittYWNoaW5lX2RldmljZV9pbml0Y2FsbChwNDA4MF9kcywgY29yZW5ldF9kc19wdWJsaXNoX2RldmljZXMpOworbWFjaGluZV9hcmNoX2luaXRjYWxsKHA0MDgwX2RzLCBzd2lvdGxiX3NldHVwX2J1c19ub3RpZmllcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCmluZGV4IDYwZWRmNjMuLmU1ZGE1ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzb2NyYXRlc19mcGdhX3BpY19jaGlwID0gewotCS50eXBlbmFtZSAgICAgICA9ICIgRlBHQS1QSUMgIiwKKwkubmFtZQkJPSAiIEZQR0EtUElDICIsCiAJLmFjawkJPSBzb2NyYXRlc19mcGdhX3BpY19hY2ssCiAJLm1hc2sgICAgICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFzaywKIAkubWFza19hY2sgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrX2FjaywKQEAgLTI0NSw3ICsyNDUsNyBAQAogCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CiAJLyogQWxsIGludGVycnVwdHMgYXJlIExFVkVMIHNlbnNpdGl2ZSAqLwotCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnNvY3JhdGVzX2ZwZ2FfcGljX2NoaXAsCiAJCQloYW5kbGVfZmFzdGVvaV9pcnEpOwogCkBAIC0yNTMsNyArMjUzLDcgQEAKIH0KIAogc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwKLQkJc3RydWN0IGRldmljZV9ub2RlICpjdCwJdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJc3RydWN0IGRldmljZV9ub2RlICpjdCwJY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQogewogCXN0cnVjdCBzb2NyYXRlc19mcGdhX2lycV9pbmZvICpmcGdhX2lycSA9ICZmcGdhX2lycXNbaW50c3BlY1swXV07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCmluZGV4IDljN2I2NGEuLjJiYmZkNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCkBAIC0zNSw2ICszNSw3IEBACiBjb25maWcgR0VGX1BQQzlBCiAJYm9vbCAiR0UgRmFudWMgUFBDOUEiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscApAQCAtNDMsNiArNDQsNyBAQAogY29uZmlnIEdFRl9TQkMzMTAKIAlib29sICJHRSBGYW51YyBTQkMzMTAiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscApAQCAtNTEsNiArNTMsNyBAQAogY29uZmlnIEdFRl9TQkM2MTAKIAlib29sICJHRSBGYW51YyBTQkM2MTAiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEhBU19SQVBJRElPCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwppbmRleCA1MGQwYTJiLi4wMTEwYTg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdlZl9waWNfY2hpcCA9IHsKLQkudHlwZW5hbWUJPSAiZ2VmcCIsCisJLm5hbWUJCT0gImdlZnAiLAogCS5tYXNrCQk9IGdlZl9waWNfbWFzaywKIAkubWFza19hY2sJPSBnZWZfcGljX21hc2tfYWNrLAogCS51bm1hc2sJCT0gZ2VmX3BpY191bm1hc2ssCkBAIC0xNjMsMTQgKzE2MywxNCBAQAogCQkJICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CiAJLyogQWxsIGludGVycnVwdHMgYXJlIExFVkVMIHNlbnNpdGl2ZSAqLwotCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmdlZl9waWNfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBnZWZfcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCSAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiB7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYwppbmRleCAyODdmN2JkLi5hNzkyZTVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BwYzlhLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KIAogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL252cmFtLmg+CiAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CkBAIC05NSw2ICs5NiwxMCBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIG1hcCBib2FyZCByZWdpc3RlcnNcbiIpOwogCQlvZl9ub2RlX3B1dChyZWdzKTsKIAl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUlPX05WUkFNKQorCW1taW9fbnZyYW1faW5pdCgpOworI2VuZGlmCiB9CiAKIC8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmMzMTAuYwppbmRleCA5MDc1NGU3Li42YTFhNjEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vdWRiZy5oPgogCiAjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vbnZyYW0uaD4KIAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KQEAgLTk1LDYgKzk2LDEwIEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gbWFwIGJvYXJkIHJlZ2lzdGVyc1xuIik7CiAJCW9mX25vZGVfcHV0KHJlZ3MpOwogCX0KKworI2lmIGRlZmluZWQoQ09ORklHX01NSU9fTlZSQU0pCisJbW1pb19udnJhbV9pbml0KCk7CisjZW5kaWYKIH0KIAogLyogUmV0dXJuIHRoZSBQQ0IgcmV2aXNpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCmluZGV4IDcyYjMxYTYuLmUxMDY4OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKICNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS9udnJhbS5oPgogCiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgpAQCAtOTUsNiArOTYsMTAgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBtYXAgYm9hcmQgcmVnaXN0ZXJzXG4iKTsKIAkJb2Zfbm9kZV9wdXQocmVncyk7CiAJfQorCisjaWYgZGVmaW5lZChDT05GSUdfTU1JT19OVlJBTSkKKwltbWlvX252cmFtX2luaXQoKTsKKyNlbmRpZgogfQogCiAvKiBSZXR1cm4gdGhlIFBDQiByZXZpc2lvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IDYyNzkwOGEuLjVhYmUxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC00MSwxMCArNDIsNDYgQEAKIAogI2luY2x1ZGUgIm1wYzg2eHguaCIKIAorc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGl4aXNfbm9kZTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpwaXhpc19iZGNmZzAsICpwaXhpc19hcmNoOwogCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM4NjEwX3N3OV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlwcl9kZWJ1ZygiJXM6IFBJWElTJyBldmVudCAoc3c5L3dha2V1cCkgSVJRIGhhbmRsZWRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4NjEwX3N1c3BlbmRfaW5pdCh2b2lkKQoreworCWludCBpcnE7CisJaW50IHJldDsKKworCWlmICghcGl4aXNfbm9kZSkKKwkJcmV0dXJuOworCisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocGl4aXNfbm9kZSwgMCk7CisJaWYgKCFpcnEpIHsKKwkJcHJfZXJyKCIlczogY2FuJ3QgbWFwIHBpeGlzIGV2ZW50IElSUS5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbXBjODYxMF9zdzlfaXJxLCAwLCAic3c5L3dha2V1cCIsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogY2FuJ3QgcmVxdWVzdCBwaXhpcyBldmVudCBJUlE6ICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHJldCk7CisJCWlycV9kaXNwb3NlX21hcHBpbmcoaXJxKTsKKwl9CisKKwllbmFibGVfaXJxX3dha2UoaXJxKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbXBjODYxMF9zdXNwZW5kX2luaXQodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBtcGM4NjEwX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtaW1tciIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1ndXRzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30KQEAgLTU1LDYgKzkyLDkgQEAKIAkvKiBGaXJzdGx5LCByZWdpc3RlciBQSVhJUyBHUElPcy4gKi8KIAlzaW1wbGVfZ3Bpb2NoaXBfaW5pdCgiZnNsLGZwZ2EtcGl4aXMtZ3Bpby1iYW5rIik7CiAKKwkvKiBFbmFibGUgd2FrZXVwIG9uIFBJWElTJyBldmVudCBJUlEuICovCisJbXBjODYxMF9zdXNwZW5kX2luaXQoKTsKKwogCS8qIFdpdGhvdXQgdGhpcyBjYWxsLCB0aGUgU1NJIGRldmljZSBkcml2ZXIgd29uJ3QgZ2V0IHByb2JlZC4gKi8KIAlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgbXBjODYxMF9pZHMsIE5VTEwpOwogCkBAIC0yNTAsMTAgKzI5MCwxMCBAQAogCWRpdV9vcHMuc2V0X3N5c2ZzX21vbml0b3JfcG9ydAk9IG1wYzg2MTBocGNkX3NldF9zeXNmc19tb25pdG9yX3BvcnQ7CiAjZW5kaWYKIAotCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxmcGdhLXBpeGlzIik7Ci0JaWYgKG5wKSB7Ci0JCW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKTsKLQkJb2Zfbm9kZV9wdXQobnApOworCXBpeGlzX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLGZwZ2EtcGl4aXMiKTsKKwlpZiAocGl4aXNfbm9kZSkgeworCQlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHBpeGlzX25vZGUsIDAsICZyKTsKKwkJb2Zfbm9kZV9wdXQocGl4aXNfbm9kZSk7CiAJCXBpeGlzID0gaW9yZW1hcChyLnN0YXJ0LCAzMik7CiAJCWlmICghcGl4aXMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyOiBjYW4ndCBtYXAgRlBHQSBjZmcgcmVnaXN0ZXIhXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYwppbmRleCAzODVhY2ZjLi4yNDI5NTRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlpbnQgY2FzY2FkZV9pcnE7CiAKIAlpZiAoKGNhc2NhZGVfaXJxID0gY3BtX2dldF9pcnEoKSkgPj0gMCkgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmNkZXNjID0gaXJxX2Rlc2MgKyBjYXNjYWRlX2lycTsKKwkJc3RydWN0IGlycV9kZXNjICpjZGVzYyA9IGlycV90b19kZXNjKGNhc2NhZGVfaXJxKTsKIAogCQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEpOwogCQljZGVzYy0+Y2hpcC0+ZW9pKGNhc2NhZGVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCAwNGE4MDYxLi5kMTY2M2RiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC04Niw2ICs4NiwxMSBAQAogCWRlcGVuZHMgb24gUFBDX1JUQVMKIAlkZWZhdWx0IG4KIAorY29uZmlnIFBQQ19SVEFTX0RBRU1PTgorCWJvb2wKKwlkZXBlbmRzIG9uIFBQQ19SVEFTCisJZGVmYXVsdCBuCisKIGNvbmZpZyBSVEFTX1BST0MKIAlib29sICJQcm9jIGludGVyZmFjZSB0byBSVEFTIgogCWRlcGVuZHMgb24gUFBDX1JUQVMKQEAgLTI1NSw3ICsyNjAsNyBAQAogCiBjb25maWcgQ1BNMgogCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQ1BNMiAoQ29tbXVuaWNhdGlvbnMgUHJvY2Vzc29yIE1vZHVsZSkiCi0JZGVwZW5kcyBvbiBNUEM4NXh4IHx8IDgyNjAKKwlkZXBlbmRzIG9uIChGU0xfU09DX0JPT0tFICYmIFBQQzMyKSB8fCA4MjYwCiAJc2VsZWN0IENQTQogCXNlbGVjdCBQUENfTElCX1JIRUFQCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCkBAIC0zMDAsNyArMzA1LDcgQEAKIAogY29uZmlnIE1QQzh4eHhfR1BJTwogCWJvb2wgIk1QQzh4eHggR1BJTyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDX01QQzgzMXggfHwgUFBDX01QQzgzNHggfHwgUFBDX01QQzgzN3ggfHwgUFBDXzg1eHggfHwgUFBDXzg2eHgKKwlkZXBlbmRzIG9uIFBQQ19NUEM4MzF4IHx8IFBQQ19NUEM4MzR4IHx8IFBQQ19NUEM4Mzd4IHx8IEZTTF9TT0NfQk9PS0UgfHwgUFBDXzg2eHgKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCBlMzgyY2FlLi5mYTBmNjkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtMjgsOCArMjgsNiBAQAogY29uZmlnIFBQQ184NXh4CiAJYm9vbCAiRnJlZXNjYWxlIDg1eHgiCiAJc2VsZWN0IEU1MDAKLQlzZWxlY3QgRlNMX1NPQwotCXNlbGVjdCBNUEM4NXh4CiAKIGNvbmZpZyBQUENfOHh4CiAJYm9vbCAiRnJlZXNjYWxlIDh4eCIKQEAgLTEzOCw2ICsxMzYsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5IGlmIFBQQzY0CiAKK2NvbmZpZyBGU0xfRU1CX1BFUkZNT04KKwlib29sICJGcmVlc2NhbGUgRW1iZWRkZWQgUGVyZm1vbiIKKwlkZXBlbmRzIG9uIEU1MDAgfHwgUFBDXzgzeHgKKwloZWxwCisJICBUaGlzIGlzIHRoZSBQZXJmb3JtYW5jZSBNb25pdG9yIHN1cHBvcnQgZm91bmQgb24gdGhlIGU1MDAgY29yZQorCSAgYW5kIHNvbWUgZTMwMCBjb3JlcyAoYzMgYW5kIGM0KS4gIFNlbGVjdCB0aGlzIG9ubHkgaWYgeW91cgorCSAgY29yZSBzdXBwb3J0cyB0aGUgRW1iZWRkZWQgUGVyZm9ybWFuY2UgTW9uaXRvciBBUFUKKwogY29uZmlnIDR4eAogCWJvb2wKIAlkZXBlbmRzIG9uIDQweCB8fCA0NHgKQEAgLTE1MywxMyArMTU5LDYgQEAKIAlkZXBlbmRzIG9uIEUyMDAgfHwgRTUwMAogCWRlZmF1bHQgeQogCi1jb25maWcgRlNMX0VNQl9QRVJGTU9OCi0JYm9vbCAiRnJlZXNjYWxlIEVtYmVkZGVkIFBlcmZtb24iCi0JZGVwZW5kcyBvbiBFNTAwIHx8IFBQQ184M3h4Ci0JaGVscAotCSAgVGhpcyBpcyB0aGUgUGVyZm9ybWFuY2UgTW9uaXRvciBzdXBwb3J0IGZvdW5kIG9uIHRoZSBlNTAwIGNvcmUKLQkgIGFuZCBzb21lIGUzMDAgY29yZXMgKGMzIGFuZCBjNCkuICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIKLQkgIGNvcmUgc3VwcG9ydHMgdGhlIEVtYmVkZGVkIFBlcmZvcm1hbmNlIE1vbml0b3IgQVBVCiAKIGNvbmZpZyBQVEVfNjRCSVQKIAlib29sCkBAIC0zMTIsNyArMzExLDcgQEAKIAogY29uZmlnIE5PVF9DT0hFUkVOVF9DQUNIRQogCWJvb2wKLQlkZXBlbmRzIG9uIDR4eCB8fCA4eHggfHwgRTIwMCB8fCBQUENfTVBDNTEyeAorCWRlcGVuZHMgb24gNHh4IHx8IDh4eCB8fCBFMjAwIHx8IFBQQ19NUEM1MTJ4IHx8IEdBTUVDVUJFX0NPTU1PTgogCWRlZmF1bHQgeQogCiBjb25maWcgQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQppbmRleCBhNjgxMmVlLi5mZGI5ZjBiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIG9iai0kKENPTkZJR19QUENfOHh4KQkJKz0gOHh4Lwogb2JqLSQoQ09ORklHX1BQQ184Mnh4KQkJKz0gODJ4eC8KIG9iai0kKENPTkZJR19QUENfODN4eCkJCSs9IDgzeHgvCi1vYmotJChDT05GSUdfUFBDXzg1eHgpCQkrPSA4NXh4Lworb2JqLSQoQ09ORklHX0ZTTF9TT0NfQk9PS0UpCSs9IDg1eHgvCiBvYmotJChDT05GSUdfUFBDXzg2eHgpCQkrPSA4Nnh4Lwogb2JqLSQoQ09ORklHX1BQQ19QU0VSSUVTKQkrPSBwc2VyaWVzLwogb2JqLSQoQ09ORklHX1BQQ19JU0VSSUVTKQkrPSBpc2VyaWVzLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jCmluZGV4IDkyOTBhN2EuLmZiNGViMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYwppbmRleCBhODZjMzRiLi45NmZlODk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLnNodXRkb3duCT0gdW5tYXNrX21zaV9pcnEsCi0JLnR5cGVuYW1lCT0gIkFYT04tTVNJIiwKKwkubmFtZQkJPSAiQVhPTi1NU0kiLAogfTsKIAogc3RhdGljIGludCBtc2ljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCmluZGV4IDcyMjU0ODQuLjM2MDUyYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZWF0aWNfcGljID0gewotCS50eXBlbmFtZSA9ICIgQ0VMTC1CRUFUICIsCisJLm5hbWUgPSAiIENFTEwtQkVBVCAiLAogCS51bm1hc2sgPSBiZWF0aWNfdW5tYXNrX2lycSwKIAkubWFzayA9IGJlYXRpY19tYXNrX2lycSwKIAkuZW9pID0gYmVhdGljX2VuZF9pcnEsCkBAIC0xMzYsNyArMTM2LDcgQEAKIHN0YXRpYyBpbnQgYmVhdGljX3BpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJICAgICAgIGlycV9od19udW1iZXJfdCBodykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CiAJaW50NjRfdAllcnI7CiAKIAllcnIgPSBiZWF0X2NvbnN0cnVjdF9hbmRfY29ubmVjdF9pcnFfcGx1Zyh2aXJxLCBodyk7CkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogICogTm90ZTogV2UgaGF2ZSBvbmx5IDEgZW50cnkgdG8gdHJhbnNsYXRlLgogICovCiBzdGF0aWMgaW50IGJlYXRpY19waWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkJIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkJIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCQkJIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLAogCQkJCSB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIHsKLQl1NjQgKmludHNwZWMyID0gKHU2NCAqKWludHNwZWM7CisJY29uc3QgdTY0ICppbnRzcGVjMiA9IChjb25zdCB1NjQgKilpbnRzcGVjOwogCiAJKm91dF9od2lycSA9ICppbnRzcGVjMjsKIAkqb3V0X2ZsYWdzIHw9IElSUV9UWVBFX0xFVkVMX0xPVzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCA4ODJlNDcwLi42ODI5Y2Y3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC01NCw3ICs1NCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpaWMsIGlpYyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlpYywgY3B1X2lpYyk7CiAjZGVmaW5lIElJQ19OT0RFX0NPVU5UCTIKIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKmlpY19ob3N0OwogCkBAIC04MiwxMyArODIsMTMgQEAKIAogc3RhdGljIHZvaWQgaWljX2VvaSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpaWMgKmlpYyA9ICZfX2dldF9jcHVfdmFyKGlpYyk7CisJc3RydWN0IGlpYyAqaWljID0gJl9fZ2V0X2NwdV92YXIoY3B1X2lpYyk7CiAJb3V0X2JlNjQoJmlpYy0+cmVncy0+cHJpbywgaWljLT5lb2lfc3RhY2tbLS1paWMtPmVvaV9wdHJdKTsKIAlCVUdfT04oaWljLT5lb2lfcHRyIDwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWljX2NoaXAgPSB7Ci0JLnR5cGVuYW1lID0gIiBDRUxMLUlJQyAiLAorCS5uYW1lID0gIiBDRUxMLUlJQyAiLAogCS5tYXNrID0gaWljX21hc2ssCiAJLnVubWFzayA9IGlpY191bm1hc2ssCiAJLmVvaSA9IGlpY19lb2ksCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19pb2V4Y19jaGlwID0gewotCS50eXBlbmFtZSA9ICIgQ0VMTC1JT0VYIiwKKwkubmFtZSA9ICIgQ0VMTC1JT0VYIiwKIAkubWFzayA9IGlpY19tYXNrLAogCS51bm1hc2sgPSBpaWNfdW5tYXNrLAogCS5lb2kgPSBpaWNfaW9leGNfZW9pLApAQCAtMTQ2LDcgKzE0Niw3IEBACiAJc3RydWN0IGlpYyAqaWljOwogCXVuc2lnbmVkIGludCB2aXJxOwogCi0JaWljID0gJl9fZ2V0X2NwdV92YXIoaWljKTsKKwlpaWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaWljKTsKIAkqKHVuc2lnbmVkIGxvbmcgKikgJnBlbmRpbmcgPQogCQlpbl9iZTY0KCh1NjQgX19pb21lbSAqKSAmaWljLT5yZWdzLT5wZW5kaW5nX2Rlc3RyKTsKIAlpZiAoIShwZW5kaW5nLmZsYWdzICYgQ0JFX0lJQ19JUlFfVkFMSUQpKQpAQCAtMTYxLDEyICsxNjEsMTIgQEAKIAogdm9pZCBpaWNfc2V0dXBfY3B1KHZvaWQpCiB7Ci0Jb3V0X2JlNjQoJl9fZ2V0X2NwdV92YXIoaWljKS5yZWdzLT5wcmlvLCAweGZmKTsKKwlvdXRfYmU2NCgmX19nZXRfY3B1X3ZhcihjcHVfaWljKS5yZWdzLT5wcmlvLCAweGZmKTsKIH0KIAogdTggaWljX2dldF90YXJnZXRfaWQoaW50IGNwdSkKIHsKLQlyZXR1cm4gcGVyX2NwdShpaWMsIGNwdSkudGFyZ2V0X2lkOworCXJldHVybiBwZXJfY3B1KGNwdV9paWMsIGNwdSkudGFyZ2V0X2lkOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpaWNfZ2V0X3RhcmdldF9pZCk7CkBAIC0xODEsNyArMTgxLDcgQEAKIAogdm9pZCBpaWNfY2F1c2VfSVBJKGludCBjcHUsIGludCBtZXNnKQogewotCW91dF9iZTY0KCZwZXJfY3B1KGlpYywgY3B1KS5yZWdzLT5nZW5lcmF0ZSwgKDB4ZiAtIG1lc2cpIDw8IDQpOworCW91dF9iZTY0KCZwZXJfY3B1KGNwdV9paWMsIGNwdSkucmVncy0+Z2VuZXJhdGUsICgweGYgLSBtZXNnKSA8PCA0KTsKIH0KIAogc3RydWN0IGlycV9ob3N0ICppaWNfZ2V0X2lycV9ob3N0KGludCBub2RlKQpAQCAtMjM3LDcgKzIzNyw3IEBACiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9paWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKIApAQCAtMjY1LDE4ICsyNjUsMTggQEAKIAkJCWdvdG8gb3V0X2VvaTsKIAogCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOwotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgYWN0aW9uKTsKIAkJaWYgKCFub2lycWRlYnVnKQogCQkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKLQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAKIAl9IHdoaWxlICgoZGVzYy0+c3RhdHVzICYgKElSUV9QRU5ESU5HIHwgSVJRX0RJU0FCTEVEKSkgPT0gSVJRX1BFTkRJTkcpOwogCiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKIG91dF9lb2k6CiAJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7Ci0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgaWljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCkBAIC0yOTcsNyArMjk3LDcgQEAKIH0KIAogc3RhdGljIGludCBpaWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkgICB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIAogewpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJLyogWFhYIEZJWE1FOiBzaG91bGQgbG9jYXRlIHRoZSBsaW51eCBDUFUgbnVtYmVyIGZyb20gdGhlIEhXIGNwdQogCSAqIG51bWJlciBwcm9wZXJseS4gV2UgYXJlIGx1Y2t5IGZvciBub3cKIAkgKi8KLQlzdHJ1Y3QgaWljICppaWMgPSAmcGVyX2NwdShpaWMsIGh3X2NwdSk7CisJc3RydWN0IGlpYyAqaWljID0gJnBlcl9jcHUoY3B1X2lpYywgaHdfY3B1KTsKIAogCWlpYy0+cmVncyA9IGlvcmVtYXAoYWRkciwgc2l6ZW9mKHN0cnVjdCBjYmVfaWljX3RocmVhZF9yZWdzKSk7CiAJQlVHX09OKGlpYy0+cmVncyA9PSBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IDRlNTY1NTYuLjAxMjQ0ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKIAkvKiBSZXNldCBlZGdlIGRldGVjdGlvbiBsb2dpYyBpZiBuZWNlc3NhcnkKIAkgKi8KLQlpZiAoZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpCisJaWYgKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpCiAJCXJldHVybjsKIAogCS8qIE9ubHkgaW50ZXJydXB0cyA0NyB0byA1MCBjYW4gYmUgc2V0IHRvIGVkZ2UgKi8KQEAgLTExOSw3ICsxMTksNyBAQAogCXN0cnVjdCBzcGlkZXJfcGljICpwaWMgPSBzcGlkZXJfdmlycV90b19waWModmlycSk7CiAJdW5zaWduZWQgaW50IGh3ID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGh3KTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CiAJdTMyIG9sZF9tYXNrOwogCXUzMiBpYzsKIApAQCAtMTY4LDcgKzE2OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3BpZGVyX3BpYyA9IHsKLQkudHlwZW5hbWUgPSAiIFNQSURFUiAgICIsCisJLm5hbWUgPSAiIFNQSURFUiAgICIsCiAJLnVubWFzayA9IHNwaWRlcl91bm1hc2tfaXJxLAogCS5tYXNrID0gc3BpZGVyX21hc2tfaXJxLAogCS5hY2sgPSBzcGlkZXJfYWNrX2lycSwKQEAgLTE4Nyw3ICsxODcsNyBAQAogfQogCiBzdGF0aWMgaW50IHNwaWRlcl9ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKLQkJCSAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQogCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKaW5kZXggYjkzZjg3Ny4uYjlkNWQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQpAQCAtMTMsMTAgKzEzLDggQEAKIFNQVV9BUwkJOj0gJChTUFVfQ1JPU1MpZ2NjCiBTUFVfTEQJCTo9ICQoU1BVX0NST1NTKWxkCiBTUFVfT0JKQ09QWQk6PSAkKFNQVV9DUk9TUylvYmpjb3B5Ci1TUFVfQ0ZMQUdTCTo9IC1PMiAtV2FsbCAtSSQoc3JjdHJlZSkvaW5jbHVkZSBcCi0JCSAgIC1JJChvYmp0cmVlKS9pbmNsdWRlMiAtRF9fS0VSTkVMX18KLVNQVV9BRkxBR1MJOj0gLWMgLURfX0FTU0VNQkxZX18gLUkkKHNyY3RyZWUpL2luY2x1ZGUgXAotCQkgICAtSSQob2JqdHJlZSkvaW5jbHVkZTIgLURfX0tFUk5FTF9fCitTUFVfQ0ZMQUdTCTo9IC1PMiAtV2FsbCAtSSQoc3JjdHJlZSkvaW5jbHVkZSAtRF9fS0VSTkVMX18KK1NQVV9BRkxBR1MJOj0gLWMgLURfX0FTU0VNQkxZX18gLUkkKHNyY3RyZWUpL2luY2x1ZGUgLURfX0tFUk5FTF9fCiBTUFVfTERGTEFHUwk6PSAtTiAtVHRleHQ9MHgwCiAKICQob2JqKS9zd2l0Y2gubzogJChvYmopL3NwdV9zYXZlX2R1bXAuaCAkKG9iaikvc3B1X3Jlc3RvcmVfZHVtcC5oCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCA4ODRlOGJjLi42NGE0YzJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTI0OTQsNyArMjQ5NCw3IEBACiAJc3RydWN0IHNwdV9jb250ZXh0ICpjdHggPSBTUFVGU19JKGlub2RlKS0+aV9jdHg7CiAJaW50IGVycm9yID0gMCwgY250ID0gMDsKIAotCWlmICghYnVmIHx8IGxlbiA8IDApCisJaWYgKCFidWYpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyb3IgPSBzcHVfYWNxdWlyZShjdHgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvS2NvbmZpZwppbmRleCAzN2Q0MzhiLi5iYzBiMGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvS2NvbmZpZwpAQCAtNSw2ICs1LDggQEAKIAlzZWxlY3QgUFBDX0k4MjU5CiAJc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kKIAlzZWxlY3QgUFBDX1JUQVMKKwlzZWxlY3QgUFBDX1JUQVNfREFFTU9OCisJc2VsZWN0IFJUQVNfRVJST1JfTE9HR0lORwogCXNlbGVjdCBQUENfTVBDMTA2CiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IFBQQ19OQVRJVkUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKaW5kZXggY2Q0YWQ5YS4uOGY0MTY4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvYWRiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTM2NCwxOSArMzY0LDYgQEAKIAlpZiAocHBjX21kLnByb2dyZXNzKSBwcGNfbWQucHJvZ3Jlc3MoIkxpbnV4L1BQQyAiVVRTX1JFTEVBU0UiXG4iLCAweDApOwogfQogCi12b2lkCi1jaHJwX2V2ZW50X3NjYW4odW5zaWduZWQgbG9uZyB1bnVzZWQpCi17Ci0JdW5zaWduZWQgY2hhciBsb2dbMTAyNF07Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBYWFg6IHdlIHNob3VsZCBsb29wIHVudGlsIHRoZSBoYXJkd2FyZSBzYXlzIG5vIG1vcmUgZXJyb3IgbG9ncyAtLSBDb3J0ICovCi0JcnRhc19jYWxsKHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKSwgNCwgMSwgJnJldCwgMHhmZmZmZmZmZiwgMCwKLQkJICBfX3BhKGxvZyksIDEwMjQpOwotCW1vZF90aW1lcigmX19nZXRfY3B1X3ZhcihoZWFydGJlYXRfdGltZXIpLAotCQkgIGppZmZpZXMgKyBldmVudF9zY2FuX2ludGVydmFsKTsKLX0KLQogc3RhdGljIHZvaWQgY2hycF84MjU5X2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IGk4MjU5X2lycSgpOwpAQCAtNTY4LDkgKzU1NSw2IEBACiB2b2lkIF9faW5pdAogY2hycF9pbml0Mih2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlOwotCWNvbnN0IHVuc2lnbmVkIGludCAqcCA9IE5VTEw7Ci0KICNpZmRlZiBDT05GSUdfTlZSQU0KIAljaHJwX252cmFtX2luaXQoKTsKICNlbmRpZgpAQCAtNTgyLDQwICs1NjYsNiBAQAogCXJlcXVlc3RfcmVnaW9uKDB4ODAsMHgxMCwiZG1hIHBhZ2UgcmVnIik7CiAJcmVxdWVzdF9yZWdpb24oMHhjMCwweDIwLCJkbWEyIik7CiAKLQkvKiBHZXQgdGhlIGV2ZW50IHNjYW4gcmF0ZSBmb3IgdGhlIHJ0YXMgc28gd2Uga25vdyBob3cKLQkgKiBvZnRlbiBpdCBleHBlY3RzIGEgaGVhcnRiZWF0LiAtLSBDb3J0Ci0JICovCi0JZGV2aWNlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInJ0YXMiKTsKLQlpZiAoZGV2aWNlKQotCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgInJ0YXMtZXZlbnQtc2Nhbi1yYXRlIiwgTlVMTCk7Ci0JaWYgKHAgJiYgKnApIHsKLQkJLyoKLQkJICogQXJyYW5nZSB0byBjYWxsIGNocnBfZXZlbnRfc2NhbiBhdCBsZWFzdCAqcCB0aW1lcwotCQkgKiBwZXIgbWludXRlLiAgV2UgdXNlIDU5IHJhdGhlciB0aGFuIDYwIGhlcmUgc28gdGhhdAotCQkgKiB0aGUgcmF0ZSB3aWxsIGJlIHNsaWdodGx5IGhpZ2hlciB0aGFuIHRoZSBtaW5pbXVtLgotCQkgKiBUaGlzIGFsbCBhc3N1bWVzIHdlIGRvbid0IGRvIGhvdHBsdWcgQ1BVIG9uIGFueQotCQkgKiBtYWNoaW5lIHRoYXQgbmVlZHMgdGhlIGV2ZW50IHNjYW5zIGRvbmUuCi0JCSAqLwotCQl1bnNpZ25lZCBsb25nIGludGVydmFsLCBvZmZzZXQ7Ci0JCWludCBjcHUsIG5jcHVzOwotCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXI7Ci0KLQkJaW50ZXJ2YWwgPSBIWiAqIDU5IC8gKnA7Ci0JCW9mZnNldCA9IEhaOwotCQluY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwotCQlldmVudF9zY2FuX2ludGVydmFsID0gbmNwdXMgKiBpbnRlcnZhbDsKLQkJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgKytjcHUpIHsKLQkJCXRpbWVyID0gJnBlcl9jcHUoaGVhcnRiZWF0X3RpbWVyLCBjcHUpOwotCQkJc2V0dXBfdGltZXIodGltZXIsIGNocnBfZXZlbnRfc2NhbiwgMCk7Ci0JCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBvZmZzZXQ7Ci0JCQlhZGRfdGltZXJfb24odGltZXIsIGNwdSk7Ci0JCQlvZmZzZXQgKz0gaW50ZXJ2YWw7Ci0JCX0KLQkJcHJpbnRrKCJSVEFTIEV2ZW50IFNjYW4gUmF0ZTogJXUgKCVsdSBqaWZmaWVzKVxuIiwKLQkJICAgICAgICpwLCBpbnRlcnZhbCk7Ci0JfQotCW9mX25vZGVfcHV0KGRldmljZSk7Ci0KIAlpZiAocHBjX21kLnByb2dyZXNzKQogCQlwcGNfbWQucHJvZ3Jlc3MoIiAgSGF2ZSBmdW4hICAgICIsIDB4Nzc3Nyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKaW5kZXggMjkxYWM5ZC4uNTI0ZDk3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZwpAQCAtOTAsMyArOTAsMzYgQEAKIGNvbmZpZyBNUEMxMFhfU1RPUkVfR0FUSEVSSU5HCiAJYm9vbCAiRW5hYmxlIE1QQzEweCBzdG9yZSBnYXRoZXJpbmciCiAJZGVwZW5kcyBvbiBNUEMxMFhfQlJJREdFCisKK2NvbmZpZyBHQU1FQ1VCRV9DT01NT04KKwlib29sCisKK2NvbmZpZyBVU0JHRUNLT19VREJHCisJYm9vbCAiVVNCIEdlY2tvIHVkYmcgY29uc29sZSBmb3IgdGhlIE5pbnRlbmRvIEdhbWVDdWJlL1dpaSIKKwlkZXBlbmRzIG9uIEdBTUVDVUJFX0NPTU1PTgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZQorCSAgVVNCIEdlY2tvIGFkYXB0ZXIgYXMgYW4gdWRiZyBjb25zb2xlLgorCSAgVGhlIFVTQiBHZWNrbyBpcyBhIEVYSSB0byBVU0IgU2VyaWFsIGNvbnZlcnRlciB0aGF0IGNhbiBiZSBwbHVnZ2VkCisJICBpbnRvIGEgbWVtY2FyZCBzbG90IGluIHRoZSBOaW50ZW5kbyBHYW1lQ3ViZS9XaWkuCisKKwkgIFRoaXMgZHJpdmVyIGJ5cGFzc2VzIHRoZSBFWEkgbGF5ZXIgY29tcGxldGVseS4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuCisKK2NvbmZpZyBHQU1FQ1VCRQorCWJvb2wgIk5pbnRlbmRvLUdhbWVDdWJlIgorCWRlcGVuZHMgb24gRU1CRURERUQ2eHgKKwlzZWxlY3QgR0FNRUNVQkVfQ09NTU9OCisJaGVscAorCSAgU2VsZWN0IEdBTUVDVUJFIGlmIGNvbmZpZ3VyaW5nIGZvciB0aGUgTmludGVuZG8gR2FtZUN1YmUuCisJICBNb3JlIGluZm9ybWF0aW9uIGF0OiA8aHR0cDovL2djLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC8+CisKK2NvbmZpZyBXSUkKKwlib29sICJOaW50ZW5kby1XaWkiCisJZGVwZW5kcyBvbiBFTUJFRERFRDZ4eAorCXNlbGVjdCBHQU1FQ1VCRV9DT01NT04KKwloZWxwCisJICBTZWxlY3QgV0lJIGlmIGNvbmZpZ3VyaW5nIGZvciB0aGUgTmludGVuZG8gV2lpLgorCSAgTW9yZSBpbmZvcm1hdGlvbiBhdDogPGh0dHA6Ly9nYy1saW51eC5zb3VyY2Vmb3JnZS5uZXQvPgorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9NYWtlZmlsZQppbmRleCAwNzczYzA4Li42NmMyM2U0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvTWFrZWZpbGUKQEAgLTcsMyArNyw3IEBACiBvYmotJChDT05GSUdfUFBDX0hPTExZKQkJKz0gaG9sbHkubwogb2JqLSQoQ09ORklHX1BQQ19QUlBNQzI4MDApCSs9IHBycG1jMjgwMC5vCiBvYmotJChDT05GSUdfUFBDX0MySykJCSs9IGMyay5vCitvYmotJChDT05GSUdfVVNCR0VDS09fVURCRykJKz0gdXNiZ2Vja29fdWRiZy5vCitvYmotJChDT05GSUdfR0FNRUNVQkVfQ09NTU9OKQkrPSBmbGlwcGVyLXBpYy5vCitvYmotJChDT05GSUdfR0FNRUNVQkUpCQkrPSBnYW1lY3ViZS5vCitvYmotJChDT05GSUdfV0lJKQkJKz0gd2lpLm8gaGx3ZC1waWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzhiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKKyAqCisgKiBOaW50ZW5kbyBHYW1lQ3ViZS9XaWkgIkZsaXBwZXIiIGludGVycnVwdCBjb250cm9sbGVyIHN1cHBvcnQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSBBbGJlcnQgSGVycmFuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAiZmxpcHBlci1waWMiCisjZGVmaW5lIHByX2ZtdChmbXQpIERSVl9NT0RVTEVfTkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJmbGlwcGVyLXBpYy5oIgorCisjZGVmaW5lIEZMSVBQRVJfTlJfSVJRUwkJMzIKKworLyoKKyAqIEVhY2ggaW50ZXJydXB0IGhhcyBhIGNvcnJlc3BvbmRpbmcgYml0IGluIGJvdGgKKyAqIHRoZSBJbnRlcnJ1cHQgQ2F1c2UgKElDUikgYW5kIEludGVycnVwdCBNYXNrIChJTVIpIHJlZ2lzdGVycy4KKyAqCisgKiBFbmFibGluZy9kaXNhYmxpbmcgYW4gaW50ZXJydXB0IGxpbmUgaW52b2x2ZXMgc2V0dGluZy9jbGVhcmluZworICogdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIElNUi4KKyAqIEV4Y2VwdCBmb3IgdGhlIFJTVyBpbnRlcnJ1cHQsIGFsbCBpbnRlcnJ1cHRzIGdldCBkZWFzc2VydGVkIGF1dG9tYXRpY2FsbHkKKyAqIHdoZW4gdGhlIHNvdXJjZSBkZWFzc2VydHMgdGhlIGludGVycnVwdC4KKyAqLworI2RlZmluZSBGTElQUEVSX0lDUgkJMHgwMAorI2RlZmluZSBGTElQUEVSX0lDUl9SU1MJCSgxPDwxNikgLyogcmVzZXQgc3dpdGNoIHN0YXRlICovCisKKyNkZWZpbmUgRkxJUFBFUl9JTVIJCTB4MDQKKworI2RlZmluZSBGTElQUEVSX1JFU0VUCQkweDI0CisKKworLyoKKyAqIElSUSBjaGlwIGhvb2tzLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBmbGlwcGVyX3BpY19tYXNrX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJdTMyIG1hc2sgPSAxIDw8IGlycTsKKworCWNscmJpdHMzMihpb19iYXNlICsgRkxJUFBFUl9JTVIsIG1hc2spOworCS8qIHRoaXMgaXMgYXQgbGVhc3QgbmVlZGVkIGZvciBSU1cgKi8KKwlvdXRfYmUzMihpb19iYXNlICsgRkxJUFBFUl9JQ1IsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBmbGlwcGVyX3BpY19hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisKKwkvKiB0aGlzIGlzIGF0IGxlYXN0IG5lZWRlZCBmb3IgUlNXICovCisJb3V0X2JlMzIoaW9fYmFzZSArIEZMSVBQRVJfSUNSLCAxIDw8IGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBwZXJfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisKKwljbHJiaXRzMzIoaW9fYmFzZSArIEZMSVBQRVJfSU1SLCAxIDw8IGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBwZXJfcGljX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlpbnQgaXJxID0gdmlycV90b19odyh2aXJxKTsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKworCXNldGJpdHMzMihpb19iYXNlICsgRkxJUFBFUl9JTVIsIDEgPDwgaXJxKTsKK30KKworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGZsaXBwZXJfcGljID0geworCS5uYW1lCQk9ICJmbGlwcGVyLXBpYyIsCisJLmFjawkJPSBmbGlwcGVyX3BpY19hY2ssCisJLm1hc2tfYWNrCT0gZmxpcHBlcl9waWNfbWFza19hbmRfYWNrLAorCS5tYXNrCQk9IGZsaXBwZXJfcGljX21hc2ssCisJLnVubWFzawkJPSBmbGlwcGVyX3BpY191bm1hc2ssCit9OworCisvKgorICogSVJRIGhvc3QgaG9va3MuCisgKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKmZsaXBwZXJfaXJxX2hvc3Q7CisKK3N0YXRpYyBpbnQgZmxpcHBlcl9waWNfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmZsaXBwZXJfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfdW5tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgTlVMTCk7CisJc2V0X2lycV9jaGlwKGlycSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZmxpcHBlcl9waWNfbWF0Y2goc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXJldHVybiAxOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIGZsaXBwZXJfaXJxX2hvc3Rfb3BzID0geworCS5tYXAgPSBmbGlwcGVyX3BpY19tYXAsCisJLnVubWFwID0gZmxpcHBlcl9waWNfdW5tYXAsCisJLm1hdGNoID0gZmxpcHBlcl9waWNfbWF0Y2gsCit9OworCisvKgorICogUGxhdGZvcm0gaG9va3MuCisgKgorICovCisKK3N0YXRpYyB2b2lkIF9fZmxpcHBlcl9xdWllc2NlKHZvaWQgX19pb21lbSAqaW9fYmFzZSkKK3sKKwkvKiBtYXNrIGFuZCBhY2sgYWxsIElSUXMgKi8KKwlvdXRfYmUzMihpb19iYXNlICsgRkxJUFBFUl9JTVIsIDB4MDAwMDAwMDApOworCW91dF9iZTMyKGlvX2Jhc2UgKyBGTElQUEVSX0lDUiwgMHhmZmZmZmZmZik7Cit9CisKK3N0cnVjdCBpcnFfaG9zdCAqIF9faW5pdCBmbGlwcGVyX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwaTsKKwlzdHJ1Y3QgaXJxX2hvc3QgKmlycV9ob3N0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKKwlpbnQgcmV0dmFsOworCisJcGkgPSBvZl9nZXRfcGFyZW50KG5wKTsKKwlpZiAoIXBpKSB7CisJCXByX2Vycigibm8gcGFyZW50IGZvdW5kXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGksICJuaW50ZW5kbyxmbGlwcGVyLXBpIikpIHsKKwkJcHJfZXJyKCJ1bmV4cGVjdGVkIHBhcmVudCBjb21wYXRpYmxlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dmFsID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShwaSwgMCwgJnJlcyk7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoIm5vIGlvIG1lbW9yeSByYW5nZSBmb3VuZFxuIik7CisJCWdvdG8gb3V0OworCX0KKwlpb19iYXNlID0gaW9yZW1hcChyZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJnJlcykpOworCisJcHJfaW5mbygiY29udHJvbGxlciBhdCAweCUwOHggbWFwcGVkIHRvIDB4JXBcbiIsIHJlcy5zdGFydCwgaW9fYmFzZSk7CisKKwlfX2ZsaXBwZXJfcXVpZXNjZShpb19iYXNlKTsKKworCWlycV9ob3N0ID0gaXJxX2FsbG9jX2hvc3QobnAsIElSUV9IT1NUX01BUF9MSU5FQVIsIEZMSVBQRVJfTlJfSVJRUywKKwkJCQkgICZmbGlwcGVyX2lycV9ob3N0X29wcywgLTEpOworCWlmICghaXJxX2hvc3QpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgaXJxX2hvc3RcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpcnFfaG9zdC0+aG9zdF9kYXRhID0gaW9fYmFzZTsKKworb3V0OgorCXJldHVybiBpcnFfaG9zdDsKK30KKwordW5zaWduZWQgaW50IGZsaXBwZXJfcGljX2dldF9pcnEodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBmbGlwcGVyX2lycV9ob3N0LT5ob3N0X2RhdGE7CisJaW50IGlycTsKKwl1MzIgaXJxX3N0YXR1czsKKworCWlycV9zdGF0dXMgPSBpbl9iZTMyKGlvX2Jhc2UgKyBGTElQUEVSX0lDUikgJgorCQkgICAgIGluX2JlMzIoaW9fYmFzZSArIEZMSVBQRVJfSU1SKTsKKwlpZiAoaXJxX3N0YXR1cyA9PSAwKQorCQlyZXR1cm4gTk9fSVJROwkvKiBubyBtb3JlIElSUXMgcGVuZGluZyAqLworCisJaXJxID0gX19mZnMoaXJxX3N0YXR1cyk7CisJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKGZsaXBwZXJfaXJxX2hvc3QsIGlycSk7Cit9CisKKy8qCisgKiBQcm9iZSBmdW5jdGlvbi4KKyAqCisgKi8KKwordm9pZCBfX2luaXQgZmxpcHBlcl9waWNfcHJvYmUodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibmludGVuZG8sZmxpcHBlci1waWMiKTsKKwlCVUdfT04oIW5wKTsKKworCWZsaXBwZXJfaXJxX2hvc3QgPSBmbGlwcGVyX3BpY19pbml0KG5wKTsKKwlCVUdfT04oIWZsaXBwZXJfaXJxX2hvc3QpOworCisJaXJxX3NldF9kZWZhdWx0X2hvc3QoZmxpcHBlcl9pcnFfaG9zdCk7CisKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKKy8qCisgKiBNaXNjIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBmbGlwcGVyIGNoaXBzZXQuCisgKgorICovCisKKy8qKgorICogZmxpcHBlcl9xdWllc2NlKCkgLSBxdWllc2NlIGZsaXBwZXIgaXJxIGNvbnRyb2xsZXIKKyAqCisgKiBNYXNrIGFuZCBhY2sgYWxsIGludGVycnVwdCBzb3VyY2VzLgorICoKKyAqLwordm9pZCBmbGlwcGVyX3F1aWVzY2Uodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBmbGlwcGVyX2lycV9ob3N0LT5ob3N0X2RhdGE7CisKKwlfX2ZsaXBwZXJfcXVpZXNjZShpb19iYXNlKTsKK30KKworLyoKKyAqIFJlc2V0cyB0aGUgcGxhdGZvcm0uCisgKi8KK3ZvaWQgZmxpcHBlcl9wbGF0Zm9ybV9yZXNldCh2b2lkKQoreworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKKworCWlmIChmbGlwcGVyX2lycV9ob3N0ICYmIGZsaXBwZXJfaXJxX2hvc3QtPmhvc3RfZGF0YSkgeworCQlpb19iYXNlID0gZmxpcHBlcl9pcnFfaG9zdC0+aG9zdF9kYXRhOworCQlvdXRfOChpb19iYXNlICsgRkxJUFBFUl9SRVNFVCwgMHgwMCk7CisJfQorfQorCisvKgorICogUmV0dXJucyBub24temVybyBpZiB0aGUgcmVzZXQgYnV0dG9uIGlzIHByZXNzZWQuCisgKi8KK2ludCBmbGlwcGVyX2lzX3Jlc2V0X2J1dHRvbl9wcmVzc2VkKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOworCXUzMiBpY3I7CisKKwlpZiAoZmxpcHBlcl9pcnFfaG9zdCAmJiBmbGlwcGVyX2lycV9ob3N0LT5ob3N0X2RhdGEpIHsKKwkJaW9fYmFzZSA9IGZsaXBwZXJfaXJxX2hvc3QtPmhvc3RfZGF0YTsKKwkJaWNyID0gaW5fYmUzMihpb19iYXNlICsgRkxJUFBFUl9JQ1IpOworCQlyZXR1cm4gIShpY3IgJiBGTElQUEVSX0lDUl9SU1MpOworCX0KKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzkxODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuaAorICoKKyAqIE5pbnRlbmRvIEdhbWVDdWJlL1dpaSAiRmxpcHBlciIgaW50ZXJydXB0IGNvbnRyb2xsZXIgc3VwcG9ydC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFRoZSBHYW1lQ3ViZSBMaW51eCBUZWFtCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0ZMSVBQRVJfUElDX0gKKyNkZWZpbmUgX19GTElQUEVSX1BJQ19ICisKK3Vuc2lnbmVkIGludCBmbGlwcGVyX3BpY19nZXRfaXJxKHZvaWQpOwordm9pZCBfX2luaXQgZmxpcHBlcl9waWNfcHJvYmUodm9pZCk7CisKK3ZvaWQgZmxpcHBlcl9xdWllc2NlKHZvaWQpOwordm9pZCBmbGlwcGVyX3BsYXRmb3JtX3Jlc2V0KHZvaWQpOworaW50IGZsaXBwZXJfaXNfcmVzZXRfYnV0dG9uX3ByZXNzZWQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9nYW1lY3ViZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9nYW1lY3ViZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDZmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2dhbWVjdWJlLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2dhbWVjdWJlLmMKKyAqCisgKiBOaW50ZW5kbyBHYW1lQ3ViZSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSBBbGJlcnQgSGVycmFuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSAiZmxpcHBlci1waWMuaCIKKyNpbmNsdWRlICJ1c2JnZWNrb191ZGJnLmgiCisKKworc3RhdGljIHZvaWQgZ2FtZWN1YmVfc3Bpbih2b2lkKQoreworCS8qIHNwaW4gdW50aWwgcG93ZXIgYnV0dG9uIHByZXNzZWQgKi8KKwlmb3IgKDs7KQorCQljcHVfcmVsYXgoKTsKK30KKworc3RhdGljIHZvaWQgZ2FtZWN1YmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlmbGlwcGVyX3BsYXRmb3JtX3Jlc2V0KCk7CisJZ2FtZWN1YmVfc3BpbigpOworfQorCitzdGF0aWMgdm9pZCBnYW1lY3ViZV9wb3dlcl9vZmYodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWdhbWVjdWJlX3NwaW4oKTsKK30KKworc3RhdGljIHZvaWQgZ2FtZWN1YmVfaGFsdCh2b2lkKQoreworCWdhbWVjdWJlX3Jlc3RhcnQoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnYW1lY3ViZV9pbml0X2Vhcmx5KHZvaWQpCit7CisJdWdfdWRiZ19pbml0KCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGdhbWVjdWJlX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkdF9yb290OworCisJZHRfcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShkdF9yb290LCAibmludGVuZG8sZ2FtZWN1YmUiKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZ2FtZWN1YmVfc2h1dGRvd24odm9pZCkKK3sKKwlmbGlwcGVyX3F1aWVzY2UoKTsKK30KKworI2lmZGVmIENPTkZJR19LRVhFQworc3RhdGljIGludCBnYW1lY3ViZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19LRVhFQyAqLworCisKK2RlZmluZV9tYWNoaW5lKGdhbWVjdWJlKSB7CisJLm5hbWUJCQk9ICJnYW1lY3ViZSIsCisJLnByb2JlCQkJPSBnYW1lY3ViZV9wcm9iZSwKKwkuaW5pdF9lYXJseQkJPSBnYW1lY3ViZV9pbml0X2Vhcmx5LAorCS5yZXN0YXJ0CQk9IGdhbWVjdWJlX3Jlc3RhcnQsCisJLnBvd2VyX29mZgkJPSBnYW1lY3ViZV9wb3dlcl9vZmYsCisJLmhhbHQJCQk9IGdhbWVjdWJlX2hhbHQsCisJLmluaXRfSVJRCQk9IGZsaXBwZXJfcGljX3Byb2JlLAorCS5nZXRfaXJxCQk9IGZsaXBwZXJfcGljX2dldF9pcnEsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCisJLm1hY2hpbmVfc2h1dGRvd24JPSBnYW1lY3ViZV9zaHV0ZG93biwKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwkubWFjaGluZV9rZXhlY19wcmVwYXJlCT0gZ2FtZWN1YmVfa2V4ZWNfcHJlcGFyZSwKKyNlbmRpZgorfTsKKworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBnYW1lY3ViZV9vZl9idXNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm5pbnRlbmRvLGZsaXBwZXIiLCB9LAorCXsgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdhbWVjdWJlX2RldmljZV9wcm9iZSh2b2lkKQoreworCWlmICghbWFjaGluZV9pcyhnYW1lY3ViZSkpCisJCXJldHVybiAwOworCisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIGdhbWVjdWJlX29mX2J1cywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoZ2FtZWN1YmVfZGV2aWNlX3Byb2JlKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzFmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKKyAqCisgKiBOaW50ZW5kbyBXaWkgIkhvbGx5d29vZCIgaW50ZXJydXB0IGNvbnRyb2xsZXIgc3VwcG9ydC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICJobHdkLXBpYyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgRFJWX01PRFVMRV9OQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgImhsd2QtcGljLmgiCisKKyNkZWZpbmUgSExXRF9OUl9JUlFTCTMyCisKKy8qCisgKiBFYWNoIGludGVycnVwdCBoYXMgYSBjb3JyZXNwb25kaW5nIGJpdCBpbiBib3RoCisgKiB0aGUgSW50ZXJydXB0IENhdXNlIChJQ1IpIGFuZCBJbnRlcnJ1cHQgTWFzayAoSU1SKSByZWdpc3RlcnMuCisgKgorICogRW5hYmxpbmcvZGlzYWJsaW5nIGFuIGludGVycnVwdCBsaW5lIGludm9sdmVzIGFzc2VydGluZy9jbGVhcmluZworICogdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIElNUi4gQUNLJ2luZyBhIHJlcXVlc3Qgc2ltcGx5IGludm9sdmVzCisgKiBhc3NlcnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIElDUi4KKyAqLworI2RlZmluZSBIV19CUk9BRFdBWV9JQ1IJCTB4MDAKKyNkZWZpbmUgSFdfQlJPQURXQVlfSU1SCQkweDA0CisKKworLyoKKyAqIElSUSBjaGlwIGhvb2tzLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBobHdkX3BpY19tYXNrX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGlycSA9IHZpcnFfdG9faHcodmlycSk7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJdTMyIG1hc2sgPSAxIDw8IGlycTsKKworCWNscmJpdHMzMihpb19iYXNlICsgSFdfQlJPQURXQVlfSU1SLCBtYXNrKTsKKwlvdXRfYmUzMihpb19iYXNlICsgSFdfQlJPQURXQVlfSUNSLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgaGx3ZF9waWNfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCWludCBpcnEgPSB2aXJxX3RvX2h3KHZpcnEpOworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCisJb3V0X2JlMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lDUiwgMSA8PCBpcnEpOworfQorCitzdGF0aWMgdm9pZCBobHdkX3BpY19tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCWludCBpcnEgPSB2aXJxX3RvX2h3KHZpcnEpOworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCisJY2xyYml0czMyKGlvX2Jhc2UgKyBIV19CUk9BRFdBWV9JTVIsIDEgPDwgaXJxKTsKK30KKworc3RhdGljIHZvaWQgaGx3ZF9waWNfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCWludCBpcnEgPSB2aXJxX3RvX2h3KHZpcnEpOworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCisJc2V0Yml0czMyKGlvX2Jhc2UgKyBIV19CUk9BRFdBWV9JTVIsIDEgPDwgaXJxKTsKK30KKworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGhsd2RfcGljID0geworCS5uYW1lCQk9ICJobHdkLXBpYyIsCisJLmFjawkJPSBobHdkX3BpY19hY2ssCisJLm1hc2tfYWNrCT0gaGx3ZF9waWNfbWFza19hbmRfYWNrLAorCS5tYXNrCQk9IGhsd2RfcGljX21hc2ssCisJLnVubWFzawkJPSBobHdkX3BpY191bm1hc2ssCit9OworCisvKgorICogSVJRIGhvc3QgaG9va3MuCisgKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKmhsd2RfaXJxX2hvc3Q7CisKK3N0YXRpYyBpbnQgaGx3ZF9waWNfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmhsd2RfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGx3ZF9waWNfdW5tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgTlVMTCk7CisJc2V0X2lycV9jaGlwKGlycSwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIGhsd2RfaXJxX2hvc3Rfb3BzID0geworCS5tYXAgPSBobHdkX3BpY19tYXAsCisJLnVubWFwID0gaGx3ZF9waWNfdW5tYXAsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IF9faGx3ZF9waWNfZ2V0X2lycShzdHJ1Y3QgaXJxX2hvc3QgKmgpCit7CisJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaC0+aG9zdF9kYXRhOworCWludCBpcnE7CisJdTMyIGlycV9zdGF0dXM7CisKKwlpcnFfc3RhdHVzID0gaW5fYmUzMihpb19iYXNlICsgSFdfQlJPQURXQVlfSUNSKSAmCisJCSAgICAgaW5fYmUzMihpb19iYXNlICsgSFdfQlJPQURXQVlfSU1SKTsKKwlpZiAoaXJxX3N0YXR1cyA9PSAwKQorCQlyZXR1cm4gTk9fSVJROwkvKiBubyBtb3JlIElSUXMgcGVuZGluZyAqLworCisJaXJxID0gX19mZnMoaXJxX3N0YXR1cyk7CisJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKGgsIGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGhsd2RfcGljX2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCBjYXNjYWRlX3ZpcnEsCisJCQkJICAgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBpcnFfaG9zdCAqaXJxX2hvc3QgPSBnZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxKTsKKwl1bnNpZ25lZCBpbnQgdmlycTsKKworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOworCWRlc2MtPmNoaXAtPm1hc2soY2FzY2FkZV92aXJxKTsgLyogSVJRX0xFVkVMICovCisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCXZpcnEgPSBfX2hsd2RfcGljX2dldF9pcnEoaXJxX2hvc3QpOworCWlmICh2aXJxICE9IE5PX0lSUSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCWVsc2UKKwkJcHJfZXJyKCJzcHVyaW91cyBpbnRlcnJ1cHQhXG4iKTsKKworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOworCWRlc2MtPmNoaXAtPmFjayhjYXNjYWRlX3ZpcnEpOyAvKiBJUlFfTEVWRUwgKi8KKwlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpICYmIGRlc2MtPmNoaXAtPnVubWFzaykKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKGNhc2NhZGVfdmlycSk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKK30KKworLyoKKyAqIFBsYXRmb3JtIGhvb2tzLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBfX2hsd2RfcXVpZXNjZSh2b2lkIF9faW9tZW0gKmlvX2Jhc2UpCit7CisJLyogbWFzayBhbmQgYWNrIGFsbCBJUlFzICovCisJb3V0X2JlMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lNUiwgMCk7CisJb3V0X2JlMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lDUiwgMHhmZmZmZmZmZik7Cit9CisKK3N0cnVjdCBpcnFfaG9zdCAqaGx3ZF9waWNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBpcnFfaG9zdCAqaXJxX2hvc3Q7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOworCWlmIChyZXR2YWwpIHsKKwkJcHJfZXJyKCJubyBpbyBtZW1vcnkgcmFuZ2UgZm91bmRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaW9fYmFzZSA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpKTsKKwlpZiAoIWlvX2Jhc2UpIHsKKwkJcHJfZXJyKCJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXByX2luZm8oImNvbnRyb2xsZXIgYXQgMHglMDh4IG1hcHBlZCB0byAweCVwXG4iLCByZXMuc3RhcnQsIGlvX2Jhc2UpOworCisJX19obHdkX3F1aWVzY2UoaW9fYmFzZSk7CisKKwlpcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KG5wLCBJUlFfSE9TVF9NQVBfTElORUFSLCBITFdEX05SX0lSUVMsCisJCQkJICAmaGx3ZF9pcnFfaG9zdF9vcHMsIC0xKTsKKwlpZiAoIWlycV9ob3N0KSB7CisJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGlycV9ob3N0XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlycV9ob3N0LT5ob3N0X2RhdGEgPSBpb19iYXNlOworCisJcmV0dXJuIGlycV9ob3N0OworfQorCit1bnNpZ25lZCBpbnQgaGx3ZF9waWNfZ2V0X2lycSh2b2lkKQoreworCXJldHVybiBfX2hsd2RfcGljX2dldF9pcnEoaGx3ZF9pcnFfaG9zdCk7Cit9CisKKy8qCisgKiBQcm9iZSBmdW5jdGlvbi4KKyAqCisgKi8KKwordm9pZCBobHdkX3BpY19wcm9iZSh2b2lkKQoreworCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWNvbnN0IHUzMiAqaW50ZXJydXB0czsKKwlpbnQgY2FzY2FkZV92aXJxOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAibmludGVuZG8saG9sbHl3b29kLXBpYyIpIHsKKwkJaW50ZXJydXB0cyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImludGVycnVwdHMiLCBOVUxMKTsKKwkJaWYgKGludGVycnVwdHMpIHsKKwkJCWhvc3QgPSBobHdkX3BpY19pbml0KG5wKTsKKwkJCUJVR19PTighaG9zdCk7CisJCQljYXNjYWRlX3ZpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCQlzZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxLCBob3N0KTsKKwkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfdmlycSwKKwkJCQkJCWhsd2RfcGljX2lycV9jYXNjYWRlKTsKKwkJCWhsd2RfaXJxX2hvc3QgPSBob3N0OworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qKgorICogaGx3ZF9xdWllc2NlKCkgLSBxdWllc2NlIGhvbGx5d29vZCBpcnEgY29udHJvbGxlcgorICoKKyAqIE1hc2sgYW5kIGFjayBhbGwgaW50ZXJydXB0IHNvdXJjZXMuCisgKgorICovCit2b2lkIGhsd2RfcXVpZXNjZSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGhsd2RfaXJxX2hvc3QtPmhvc3RfZGF0YTsKKworCV9faGx3ZF9xdWllc2NlKGlvX2Jhc2UpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlNWEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5oCisgKgorICogTmludGVuZG8gV2lpICJIb2xseXdvb2QiIGludGVycnVwdCBjb250cm9sbGVyIHN1cHBvcnQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGJlcnQgSGVycmFuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19ITFdEX1BJQ19ICisjZGVmaW5lIF9fSExXRF9QSUNfSAorCitleHRlcm4gdW5zaWduZWQgaW50IGhsd2RfcGljX2dldF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBobHdkX3BpY19wcm9iZSh2b2lkKTsKK2V4dGVybiB2b2lkIGhsd2RfcXVpZXNjZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3VzYmdlY2tvX3VkYmcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYThlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3VzYmdlY2tvX3VkYmcuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jCisgKgorICogdWRiZyBzZXJpYWwgaW5wdXQvb3V0cHV0IHJvdXRpbmVzIGZvciB0aGUgVVNCIEdlY2tvIGFkYXB0ZXIuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUaGUgR2FtZUN1YmUgTGludXggVGVhbQorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgQWxiZXJ0IEhlcnJhbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisKKyNpbmNsdWRlICJ1c2JnZWNrb191ZGJnLmgiCisKKworI2RlZmluZSBFWElfQ0xLXzMyTUhaICAgICAgICAgICA1CisKKyNkZWZpbmUgRVhJX0NTUiAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSAgIEVYSV9DU1JfQ0xLTUFTSyAgICAgICAoMHg3PDw0KQorI2RlZmluZSAgICAgRVhJX0NTUl9DTEtfMzJNSFogICAoRVhJX0NMS18zMk1IWjw8NCkKKyNkZWZpbmUgICBFWElfQ1NSX0NTTUFTSyAgICAgICAgKDB4Nzw8NykKKyNkZWZpbmUgICAgIEVYSV9DU1JfQ1NfMCAgICAgICAgKDB4MTw8NykgIC8qIENoaXAgU2VsZWN0IDAwMSAqLworCisjZGVmaW5lIEVYSV9DUiAgICAgICAgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgICBFWElfQ1JfVFNUQVJUICAgICAgICAgKDE8PDApCisjZGVmaW5lICAgRVhJX0NSX1dSSVRFCQkoMTw8MikKKyNkZWZpbmUgICBFWElfQ1JfUkVBRF9XUklURSAgICAgKDI8PDIpCisjZGVmaW5lICAgRVhJX0NSX1RMRU4obGVuKSAgICAgICgoKGxlbiktMSk8PDQpCisKKyNkZWZpbmUgRVhJX0RBVEEgICAgICAgICAgICAgICAgMHgxMAorCisjZGVmaW5lIFVHX1JFQURfQVRURU1QVFMJMTAwCisjZGVmaW5lIFVHX1dSSVRFX0FUVEVNUFRTCTEwMAorCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnVnX2lvX2Jhc2U7CisKKy8qCisgKiBQZXJmb3JtcyBvbmUgaW5wdXQvb3V0cHV0IHRyYW5zYWN0aW9uIGJldHdlZW4gdGhlIGV4aSBob3N0IGFuZCB0aGUgdXNiZ2Vja28uCisgKi8KK3N0YXRpYyB1MzIgdWdfaW9fdHJhbnNhY3Rpb24odTMyIGluKQoreworCXUzMiBfX2lvbWVtICpjc3JfcmVnID0gdWdfaW9fYmFzZSArIEVYSV9DU1I7CisJdTMyIF9faW9tZW0gKmRhdGFfcmVnID0gdWdfaW9fYmFzZSArIEVYSV9EQVRBOworCXUzMiBfX2lvbWVtICpjcl9yZWcgPSB1Z19pb19iYXNlICsgRVhJX0NSOworCXUzMiBjc3IsIGRhdGEsIGNyOworCisJLyogc2VsZWN0ICovCisJY3NyID0gRVhJX0NTUl9DTEtfMzJNSFogfCBFWElfQ1NSX0NTXzA7CisJb3V0X2JlMzIoY3NyX3JlZywgY3NyKTsKKworCS8qIHJlYWQvd3JpdGUgKi8KKwlkYXRhID0gaW47CisJb3V0X2JlMzIoZGF0YV9yZWcsIGRhdGEpOworCWNyID0gRVhJX0NSX1RMRU4oMikgfCBFWElfQ1JfUkVBRF9XUklURSB8IEVYSV9DUl9UU1RBUlQ7CisJb3V0X2JlMzIoY3JfcmVnLCBjcik7CisKKwl3aGlsZSAoaW5fYmUzMihjcl9yZWcpICYgRVhJX0NSX1RTVEFSVCkKKwkJYmFycmllcigpOworCisJLyogZGVzZWxlY3QgKi8KKwlvdXRfYmUzMihjc3JfcmVnLCAwKTsKKworCS8qIHJlc3VsdCAqLworCWRhdGEgPSBpbl9iZTMyKGRhdGFfcmVnKTsKKworCXJldHVybiBkYXRhOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIGFuIHVzYmdlY2tvIGFkYXB0ZXIgaXMgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgdWdfaXNfYWRhcHRlcl9wcmVzZW50KHZvaWQpCit7CisJaWYgKCF1Z19pb19iYXNlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB1Z19pb190cmFuc2FjdGlvbigweDkwMDAwMDAwKSA9PSAweDA0NzAwMDAwOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBUWCBmaWZvIGlzIHJlYWR5IGZvciB0cmFuc21pc3Npb24uCisgKi8KK3N0YXRpYyBpbnQgdWdfaXNfdHhmaWZvX3JlYWR5KHZvaWQpCit7CisJcmV0dXJuIHVnX2lvX3RyYW5zYWN0aW9uKDB4YzAwMDAwMDApICYgMHgwNDAwMDAwMDsKK30KKworLyoKKyAqIFRyaWVzIHRvIHRyYW5zbWl0IGEgY2hhcmFjdGVyLgorICogSWYgdGhlIFRYIGZpZm8gaXMgbm90IHJlYWR5IHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorICovCitzdGF0aWMgdm9pZCB1Z19yYXdfcHV0YyhjaGFyIGNoKQoreworCXVnX2lvX3RyYW5zYWN0aW9uKDB4YjAwMDAwMDAgfCAoY2ggPDwgMjApKTsKK30KKworLyoKKyAqIFRyYW5zbWl0cyBhIGNoYXJhY3Rlci4KKyAqIEl0IHNpbGVudGx5IGZhaWxzIGlmIHRoZSBUWCBmaWZvIGlzIG5vdCByZWFkeSBhZnRlciBhIG51bWJlciBvZiByZXRyaWVzLgorICovCitzdGF0aWMgdm9pZCB1Z19wdXRjKGNoYXIgY2gpCit7CisJaW50IGNvdW50ID0gVUdfV1JJVEVfQVRURU1QVFM7CisKKwlpZiAoIXVnX2lvX2Jhc2UpCisJCXJldHVybjsKKworCWlmIChjaCA9PSAnXG4nKQorCQl1Z19wdXRjKCdccicpOworCisJd2hpbGUgKCF1Z19pc190eGZpZm9fcmVhZHkoKSAmJiBjb3VudC0tKQorCQliYXJyaWVyKCk7CisJaWYgKGNvdW50ID49IDApCisJCXVnX3Jhd19wdXRjKGNoKTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUlggZmlmbyBpcyByZWFkeSBmb3IgdHJhbnNtaXNzaW9uLgorICovCitzdGF0aWMgaW50IHVnX2lzX3J4Zmlmb19yZWFkeSh2b2lkKQoreworCXJldHVybiB1Z19pb190cmFuc2FjdGlvbigweGQwMDAwMDAwKSAmIDB4MDQwMDAwMDA7Cit9CisKKy8qCisgKiBUcmllcyB0byByZWNlaXZlIGEgY2hhcmFjdGVyLgorICogSWYgYSBjaGFyYWN0ZXIgaXMgdW5hdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHJldHVybnMgLTEuCisgKi8KK3N0YXRpYyBpbnQgdWdfcmF3X2dldGModm9pZCkKK3sKKwl1MzIgZGF0YSA9IHVnX2lvX3RyYW5zYWN0aW9uKDB4YTAwMDAwMDApOworCWlmIChkYXRhICYgMHgwODAwMDAwMCkKKwkJcmV0dXJuIChkYXRhID4+IDE2KSAmIDB4ZmY7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBSZWNlaXZlcyBhIGNoYXJhY3Rlci4KKyAqIEl0IGZhaWxzIGlmIHRoZSBSWCBmaWZvIGlzIG5vdCByZWFkeSBhZnRlciBhIG51bWJlciBvZiByZXRyaWVzLgorICovCitzdGF0aWMgaW50IHVnX2dldGModm9pZCkKK3sKKwlpbnQgY291bnQgPSBVR19SRUFEX0FUVEVNUFRTOworCisJaWYgKCF1Z19pb19iYXNlKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoIXVnX2lzX3J4Zmlmb19yZWFkeSgpICYmIGNvdW50LS0pCisJCWJhcnJpZXIoKTsKKwlyZXR1cm4gdWdfcmF3X2dldGMoKTsKK30KKworLyoKKyAqIHVkYmcgZnVuY3Rpb25zLgorICoKKyAqLworCisvKgorICogVHJhbnNtaXRzIGEgY2hhcmFjdGVyLgorICovCit2b2lkIHVnX3VkYmdfcHV0YyhjaGFyIGNoKQoreworCXVnX3B1dGMoY2gpOworfQorCisvKgorICogUmVjZWl2ZXMgYSBjaGFyYWN0ZXIuIFdhaXRzIHVudGlsIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGludCB1Z191ZGJnX2dldGModm9pZCkKK3sKKwlpbnQgY2g7CisKKwl3aGlsZSAoKGNoID0gdWdfZ2V0YygpKSA9PSAtMSkKKwkJYmFycmllcigpOworCXJldHVybiBjaDsKK30KKworLyoKKyAqIFJlY2VpdmVzIGEgY2hhcmFjdGVyLiBJZiBhIGNoYXJhY3RlciBpcyBub3QgYXZhaWxhYmxlLCByZXR1cm5zIC0xLgorICovCitzdGF0aWMgaW50IHVnX3VkYmdfZ2V0Y19wb2xsKHZvaWQpCit7CisJaWYgKCF1Z19pc19yeGZpZm9fcmVhZHkoKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiB1Z19nZXRjKCk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZXMgYW5kIHByZXBhcmVzIHRoZSB2aXJ0dWFsIGFkZHJlc3MgbmVlZGVkIHRvIGFjY2VzcyB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIF9faW9tZW0gKnVnX3VkYmdfc2V0dXBfZXhpX2lvX2Jhc2Uoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwl2b2lkIF9faW9tZW0gKmV4aV9pb19iYXNlID0gTlVMTDsKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnJlZzsKKworCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCWlmIChyZWcpIHsKKwkJcGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgcmVnKTsKKwkJaWYgKHBhZGRyKQorCQkJZXhpX2lvX2Jhc2UgPSBpb3JlbWFwKHBhZGRyLCByZWdbMV0pOworCX0KKwlyZXR1cm4gZXhpX2lvX2Jhc2U7Cit9CisKKy8qCisgKiBDaGVja3MgaWYgYSBVU0IgR2Vja28gYWRhcHRlciBpcyBpbnNlcnRlZCBpbiBhbnkgbWVtb3J5IGNhcmQgc2xvdC4KKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqdWdfdWRiZ19wcm9iZSh2b2lkIF9faW9tZW0gKmV4aV9pb19iYXNlKQoreworCWludCBpOworCisJLyogbG9vayBmb3IgYSB1c2JnZWNrbyBvbiBtZW1jYXJkIHNsb3RzIEEgYW5kIEIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXVnX2lvX2Jhc2UgPSBleGlfaW9fYmFzZSArIDB4MTQgKiBpOworCQlpZiAodWdfaXNfYWRhcHRlcl9wcmVzZW50KCkpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gMikKKwkJdWdfaW9fYmFzZSA9IE5VTEw7CisJcmV0dXJuIHVnX2lvX2Jhc2U7CisKK30KKworLyoKKyAqIFVTQiBHZWNrbyB1ZGJnIHN1cHBvcnQgaW5pdGlhbGl6YXRpb24uCisgKi8KK3ZvaWQgX19pbml0IHVnX3VkYmdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCBfX2lvbWVtICpleGlfaW9fYmFzZTsKKworCWlmICh1Z19pb19iYXNlKQorCQl1ZGJnX3ByaW50ZigiJXM6IGVhcmx5IC0+IGZpbmFsXG4iLCBfX2Z1bmNfXyk7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJuaW50ZW5kbyxmbGlwcGVyLWV4aSIpOworCWlmICghbnApIHsKKwkJdWRiZ19wcmludGYoIiVzOiBFWEkgbm9kZSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBkb25lOworCX0KKworCWV4aV9pb19iYXNlID0gdWdfdWRiZ19zZXR1cF9leGlfaW9fYmFzZShucCk7CisJaWYgKCFleGlfaW9fYmFzZSkgeworCQl1ZGJnX3ByaW50ZigiJXM6IGZhaWxlZCB0byBzZXR1cCBFWEkgaW8gYmFzZVxuIiwgX19mdW5jX18pOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCF1Z191ZGJnX3Byb2JlKGV4aV9pb19iYXNlKSkgeworCQl1ZGJnX3ByaW50ZigidXNiZ2Vja29fdWRiZzogbm90IGZvdW5kXG4iKTsKKwkJaW91bm1hcChleGlfaW9fYmFzZSk7CisJfSBlbHNlIHsKKwkJdWRiZ19wdXRjID0gdWdfdWRiZ19wdXRjOworCQl1ZGJnX2dldGMgPSB1Z191ZGJnX2dldGM7CisJCXVkYmdfZ2V0Y19wb2xsID0gdWdfdWRiZ19nZXRjX3BvbGw7CisJCXVkYmdfcHJpbnRmKCJ1c2JnZWNrb191ZGJnOiByZWFkeVxuIik7CisJfQorCitkb25lOgorCWlmIChucCkKKwkJb2Zfbm9kZV9wdXQobnApOworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfVVNCR0VDS08KKworc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCB1Z19lYXJseV9ncmFiX2lvX2FkZHIodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19HQU1FQ1VCRSkKKwlyZXR1cm4gMHgwYzAwMDAwMDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1dJSSkKKwlyZXR1cm4gMHgwZDAwMDAwMDsKKyNlbHNlCisjZXJyb3IgSW52YWxpZCBwbGF0Zm9ybSBmb3IgVVNCIEdlY2tvIGJhc2VkIGVhcmx5IGRlYnVnZ2luZy4KKyNlbmRpZgorfQorCisvKgorICogVVNCIEdlY2tvIGVhcmx5IGRlYnVnIHN1cHBvcnQgaW5pdGlhbGl6YXRpb24gZm9yIHVkYmcuCisgKi8KK3ZvaWQgX19pbml0IHVkYmdfaW5pdF91c2JnZWNrbyh2b2lkKQoreworCXZvaWQgX19pb21lbSAqZWFybHlfZGVidWdfYXJlYTsKKwl2b2lkIF9faW9tZW0gKmV4aV9pb19iYXNlOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSBCQVQgYWxyZWFkeSBzZXR1cCB0aGF0IGVuYWJsZXMgSS9PCisJICogdG8gdGhlIEVYSSBoYXJkd2FyZS4KKwkgKgorCSAqIFRoZSBCQVQgdXNlcyBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZSByZXNlcnZlZCBhdCB0aGUgZml4bWFwLgorCSAqIFRoaXMgbXVzdCBtYXRjaCB0aGUgdmlydHVhbCBhZGRyZXNzIGNvbmZpZ3VyZWQgaW4KKwkgKiBoZWFkXzMyLlM6c2V0dXBfdXNiZ2Vja29fYmF0KCkuCisJICovCisJZWFybHlfZGVidWdfYXJlYSA9ICh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9FQVJMWV9ERUJVR19CQVNFKTsKKwlleGlfaW9fYmFzZSA9IGVhcmx5X2RlYnVnX2FyZWEgKyAweDAwMDA2ODAwOworCisJLyogdHJ5IHRvIGRldGVjdCBhIFVTQiBHZWNrbyAqLworCWlmICghdWdfdWRiZ19wcm9iZShleGlfaW9fYmFzZSkpCisJCXJldHVybjsKKworCS8qIHdlIGZvdW5kIGEgVVNCIEdlY2tvLCBsb2FkIHVkYmcgaG9va3MgKi8KKwl1ZGJnX3B1dGMgPSB1Z191ZGJnX3B1dGM7CisJdWRiZ19nZXRjID0gdWdfdWRiZ19nZXRjOworCXVkYmdfZ2V0Y19wb2xsID0gdWdfdWRiZ19nZXRjX3BvbGw7CisKKwkvKgorCSAqIFByZXBhcmUgYWdhaW4gdGhlIHNhbWUgQkFUIGZvciBNTVVfaW5pdC4KKwkgKiBUaGlzIGFsbG93cyB1ZGJnIEkvTyB0byBjb250aW51ZSB3b3JraW5nIGFmdGVyIHRoZSBNTVUgaXMKKwkgKiB0dXJuZWQgb24gZm9yIHJlYWwuCisJICogSXQgaXMgc2FmZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2FtZSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgaXMKKwkgKiBhIHJlc2VydmVkIGZpeG1hcCBhcmVhLgorCSAqLworCXNldGJhdCgxLCAodW5zaWduZWQgbG9uZyllYXJseV9kZWJ1Z19hcmVhLAorCSAgICAgICB1Z19lYXJseV9ncmFiX2lvX2FkZHIoKSwgMTI4KjEwMjQsIFBBR0VfS0VSTkVMX05DRyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPICovCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2Y2RlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3VzYmdlY2tvX3VkYmcuaAorICoKKyAqIHVkYmcgc2VyaWFsIGlucHV0L291dHB1dCByb3V0aW5lcyBmb3IgdGhlIFVTQiBHZWNrbyBhZGFwdGVyLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1VTQkdFQ0tPX1VEQkdfSAorI2RlZmluZSBfX1VTQkdFQ0tPX1VEQkdfSAorCisjaWZkZWYgQ09ORklHX1VTQkdFQ0tPX1VEQkcKKworZXh0ZXJuIHZvaWQgX19pbml0IHVnX3VkYmdfaW5pdCh2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1Z191ZGJnX2luaXQodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19VU0JHRUNLT19VREJHICovCisKK3ZvaWQgX19pbml0IHVkYmdfaW5pdF91c2JnZWNrbyh2b2lkKTsKKworI2VuZGlmIC8qIF9fVVNCR0VDS09fVURCR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3dpaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC93aWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U1YjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC93aWkuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvd2lpLmMKKyAqCisgKiBOaW50ZW5kbyBXaWkgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEFsYmVydCBIZXJyYW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICJ3aWkiCisjZGVmaW5lIHByX2ZtdChmbXQpIERSVl9NT0RVTEVfTkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSAiZmxpcHBlci1waWMuaCIKKyNpbmNsdWRlICJobHdkLXBpYy5oIgorI2luY2x1ZGUgInVzYmdlY2tvX3VkYmcuaCIKKworLyogY29udHJvbCBibG9jayAqLworI2RlZmluZSBIV19DVFJMX0NPTVBBVElCTEUJIm5pbnRlbmRvLGhvbGx5d29vZC1jb250cm9sIgorCisjZGVmaW5lIEhXX0NUUkxfUkVTRVRTCQkweDk0CisjZGVmaW5lIEhXX0NUUkxfUkVTRVRTX1NZUwkoMTw8MCkKKworLyogZ3BpbyAqLworI2RlZmluZSBIV19HUElPX0NPTVBBVElCTEUJIm5pbnRlbmRvLGhvbGx5d29vZC1ncGlvIgorCisjZGVmaW5lIEhXX0dQSU9fQkFTRShpZHgpCShpZHggKiAweDIwKQorI2RlZmluZSBIV19HUElPX09VVChpZHgpCShIV19HUElPX0JBU0UoaWR4KSArIDApCisjZGVmaW5lIEhXX0dQSU9fRElSKGlkeCkJKEhXX0dQSU9fQkFTRShpZHgpICsgNCkKKworI2RlZmluZSBIV19HUElPX1NIVVRET1dOCSgxPDwxKQorI2RlZmluZSBIV19HUElPX1NMT1RfTEVECSgxPDw1KQorI2RlZmluZSBIV19HUElPX1NFTlNPUl9CQVIJKDE8PDgpCisKKworc3RhdGljIHZvaWQgX19pb21lbSAqaHdfY3RybDsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmh3X2dwaW87CisKK3Vuc2lnbmVkIGxvbmcgd2lpX2hvbGVfc3RhcnQ7Cit1bnNpZ25lZCBsb25nIHdpaV9ob2xlX3NpemU7CisKKworc3RhdGljIGludCBfX2luaXQgcGFnZV9hbGlnbmVkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlyZXR1cm4gISh4ICYgKFBBR0VfU0laRS0xKSk7Cit9CisKK3ZvaWQgX19pbml0IHdpaV9tZW1vcnlfZml4dXBzKHZvaWQpCit7CisJc3RydWN0IGxtYl9wcm9wZXJ0eSAqcCA9IGxtYi5tZW1vcnkucmVnaW9uOworCisJLyoKKwkgKiBUaGlzIGlzIHBhcnQgb2YgYSB3b3JrYXJvdW5kIHRvIGFsbG93IHRoZSB1c2Ugb2YgdHdvCisJICogZGlzY29udGlndW91cyBSQU0gcmFuZ2VzIG9uIHRoZSBXaWksIGV2ZW4gaWYgdGhpcyBpcworCSAqIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBvbiAzMi1iaXQgUG93ZXJQQyBMaW51eC4KKwkgKgorCSAqIFdlIGNvZWFsZXNjZSB0aGUgdHdvIG1lbW9yeSByYW5nZXMgb2YgdGhlIFdpaSBpbnRvIGEKKwkgKiBzaW5nbGUgcmFuZ2UsIHRoZW4gY3JlYXRlIGEgcmVzZXJ2YXRpb24gZm9yIHRoZSAiaG9sZSIKKwkgKiBiZXR3ZWVuIGJvdGggcmFuZ2VzLgorCSAqLworCisJQlVHX09OKGxtYi5tZW1vcnkuY250ICE9IDIpOworCUJVR19PTighcGFnZV9hbGlnbmVkKHBbMF0uYmFzZSkgfHwgIXBhZ2VfYWxpZ25lZChwWzFdLmJhc2UpKTsKKworCXBbMF0uc2l6ZSA9IF9BTElHTl9ET1dOKHBbMF0uc2l6ZSwgUEFHRV9TSVpFKTsKKwlwWzFdLnNpemUgPSBfQUxJR05fRE9XTihwWzFdLnNpemUsIFBBR0VfU0laRSk7CisKKwl3aWlfaG9sZV9zdGFydCA9IHBbMF0uYmFzZSArIHBbMF0uc2l6ZTsKKwl3aWlfaG9sZV9zaXplID0gcFsxXS5iYXNlIC0gd2lpX2hvbGVfc3RhcnQ7CisKKwlwcl9pbmZvKCJNRU0xOiA8JTA4bGx4ICUwOGxseD5cbiIsIHBbMF0uYmFzZSwgcFswXS5zaXplKTsKKwlwcl9pbmZvKCJIT0xFOiA8JTA4bHggJTA4bHg+XG4iLCB3aWlfaG9sZV9zdGFydCwgd2lpX2hvbGVfc2l6ZSk7CisJcHJfaW5mbygiTUVNMjogPCUwOGxseCAlMDhsbHg+XG4iLCBwWzFdLmJhc2UsIHBbMV0uc2l6ZSk7CisKKwlwWzBdLnNpemUgKz0gd2lpX2hvbGVfc2l6ZSArIHBbMV0uc2l6ZTsKKworCWxtYi5tZW1vcnkuY250ID0gMTsKKwlsbWJfYW5hbHl6ZSgpOworCisJLyogcmVzZXJ2ZSB0aGUgaG9sZSAqLworCWxtYl9yZXNlcnZlKHdpaV9ob2xlX3N0YXJ0LCB3aWlfaG9sZV9zaXplKTsKKworCS8qIGFsbG93IGlvcmVtYXBwaW5nIHRoZSBhZGRyZXNzIHNwYWNlIGluIHRoZSBob2xlICovCisJX19hbGxvd19pb3JlbWFwX3Jlc2VydmVkID0gMTsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXQgd2lpX21tdV9tYXBpbl9tZW0yKHVuc2lnbmVkIGxvbmcgdG9wKQoreworCXVuc2lnbmVkIGxvbmcgZGVsdGEsIHNpemUsIGJsOworCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUgPSAoMjU2PDwyMCk7CisKKwkvKiBNRU0yIDY0TUJAMHgxMDAwMDAwMCAqLworCWRlbHRhID0gd2lpX2hvbGVfc3RhcnQgKyB3aWlfaG9sZV9zaXplOworCXNpemUgPSB0b3AgLSBkZWx0YTsKKwlmb3IgKGJsID0gMTI4PDwxMDsgYmwgPCBtYXhfc2l6ZTsgYmwgPDw9IDEpIHsKKwkJaWYgKGJsICogMiA+IHNpemUpCisJCQlicmVhazsKKwl9CisJc2V0YmF0KDQsIFBBR0VfT0ZGU0VUK2RlbHRhLCBkZWx0YSwgYmwsIFBBR0VfS0VSTkVMX1gpOworCXJldHVybiBkZWx0YSArIGJsOworfQorCitzdGF0aWMgdm9pZCB3aWlfc3Bpbih2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZm9yICg7OykKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKndpaV9pb3JlbWFwX2h3X3JlZ3MoY2hhciAqbmFtZSwgY2hhciAqY29tcGF0aWJsZSkKK3sKKwl2b2lkIF9faW9tZW0gKmh3X3JlZ3MgPSBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlpbnQgZXJyb3IgPSAtRU5PREVWOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCBjb21wYXRpYmxlKTsKKwlpZiAoIW5wKSB7CisJCXByX2Vycigibm8gY29tcGF0aWJsZSBub2RlIGZvdW5kIGZvciAlc1xuIiwgY29tcGF0aWJsZSk7CisJCWdvdG8gb3V0OworCX0KKwllcnJvciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOworCWlmIChlcnJvcikgeworCQlwcl9lcnIoIm5vIHZhbGlkIHJlZyBmb3VuZCBmb3IgJXNcbiIsIG5wLT5uYW1lKTsKKwkJZ290byBvdXRfcHV0OworCX0KKworCWh3X3JlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CisJaWYgKGh3X3JlZ3MpIHsKKwkJcHJfaW5mbygiJXMgYXQgMHglMDh4IG1hcHBlZCB0byAweCVwXG4iLCBuYW1lLAorCQkJcmVzLnN0YXJ0LCBod19yZWdzKTsKKwl9CisKK291dF9wdXQ6CisJb2Zfbm9kZV9wdXQobnApOworb3V0OgorCXJldHVybiBod19yZWdzOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgd2lpX3NldHVwX2FyY2godm9pZCkKK3sKKwlod19jdHJsID0gd2lpX2lvcmVtYXBfaHdfcmVncygiaHdfY3RybCIsIEhXX0NUUkxfQ09NUEFUSUJMRSk7CisJaHdfZ3BpbyA9IHdpaV9pb3JlbWFwX2h3X3JlZ3MoImh3X2dwaW8iLCBIV19HUElPX0NPTVBBVElCTEUpOworCWlmIChod19ncGlvKSB7CisJCS8qIHR1cm4gb2ZmIHRoZSBmcm9udCBibHVlIGxlZCBhbmQgSVIgbGlnaHQgKi8KKwkJY2xyYml0czMyKGh3X2dwaW8gKyBIV19HUElPX09VVCgwKSwKKwkJCSAgSFdfR1BJT19TTE9UX0xFRCB8IEhXX0dQSU9fU0VOU09SX0JBUik7CisJfQorfQorCitzdGF0aWMgdm9pZCB3aWlfcmVzdGFydChjaGFyICpjbWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCWlmIChod19jdHJsKSB7CisJCS8qIGNsZWFyIHRoZSBzeXN0ZW0gcmVzZXQgcGluIHRvIGNhdXNlIGEgcmVzZXQgKi8KKwkJY2xyYml0czMyKGh3X2N0cmwgKyBIV19DVFJMX1JFU0VUUywgSFdfQ1RSTF9SRVNFVFNfU1lTKTsKKwl9CisJd2lpX3NwaW4oKTsKK30KKworc3RhdGljIHZvaWQgd2lpX3Bvd2VyX29mZih2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlpZiAoaHdfZ3BpbykgeworCQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgcG93ZXJvZmYgR1BJTyBpcyBjb25maWd1cmVkIGFzIG91dHB1dCAqLworCQlzZXRiaXRzMzIoaHdfZ3BpbyArIEhXX0dQSU9fRElSKDEpLCBIV19HUElPX1NIVVRET1dOKTsKKworCQkvKiBkcml2ZSB0aGUgcG93ZXJvZmYgR1BJTyBoaWdoICovCisJCXNldGJpdHMzMihod19ncGlvICsgSFdfR1BJT19PVVQoMSksIEhXX0dQSU9fU0hVVERPV04pOworCX0KKwl3aWlfc3BpbigpOworfQorCitzdGF0aWMgdm9pZCB3aWlfaGFsdCh2b2lkKQoreworCWlmIChwcGNfbWQucmVzdGFydCkKKwkJcHBjX21kLnJlc3RhcnQoTlVMTCk7CisJd2lpX3NwaW4oKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHdpaV9pbml0X2Vhcmx5KHZvaWQpCit7CisJdWdfdWRiZ19pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB3aWlfcGljX3Byb2JlKHZvaWQpCit7CisJZmxpcHBlcl9waWNfcHJvYmUoKTsKKwlobHdkX3BpY19wcm9iZSgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3aWlfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGR0X3Jvb3Q7CisKKwlkdF9yb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKGR0X3Jvb3QsICJuaW50ZW5kbyx3aWkiKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgd2lpX3NodXRkb3duKHZvaWQpCit7CisJaGx3ZF9xdWllc2NlKCk7CisJZmxpcHBlcl9xdWllc2NlKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfS0VYRUMKK3N0YXRpYyBpbnQgd2lpX21hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KKworZGVmaW5lX21hY2hpbmUod2lpKSB7CisJLm5hbWUJCQk9ICJ3aWkiLAorCS5wcm9iZQkJCT0gd2lpX3Byb2JlLAorCS5pbml0X2Vhcmx5CQk9IHdpaV9pbml0X2Vhcmx5LAorCS5zZXR1cF9hcmNoCQk9IHdpaV9zZXR1cF9hcmNoLAorCS5yZXN0YXJ0CQk9IHdpaV9yZXN0YXJ0LAorCS5wb3dlcl9vZmYJCT0gd2lpX3Bvd2VyX29mZiwKKwkuaGFsdAkJCT0gd2lpX2hhbHQsCisJLmluaXRfSVJRCQk9IHdpaV9waWNfcHJvYmUsCisJLmdldF9pcnEJCT0gZmxpcHBlcl9waWNfZ2V0X2lycSwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKwkubWFjaGluZV9zaHV0ZG93bgk9IHdpaV9zaHV0ZG93biwKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwkubWFjaGluZV9rZXhlY19wcmVwYXJlCT0gd2lpX21hY2hpbmVfa2V4ZWNfcHJlcGFyZSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgd2lpX29mX2J1c1tdID0geworCXsgLmNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kIiwgfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aWlfZGV2aWNlX3Byb2JlKHZvaWQpCit7CisJaWYgKCFtYWNoaW5lX2lzKHdpaSkpCisJCXJldHVybiAwOworCisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHdpaV9vZl9idXMsIE5VTEwpOworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHdpaV9kZXZpY2VfcHJvYmUpOworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaHRhYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2h0YWIuYwppbmRleCBmOTljNmM0Li4zYWU2NmFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9odGFiLmMKQEAgLTE5LDggKzE5LDcgQEAKIAogI2luY2x1ZGUgImNhbGxfaHB0LmgiCiAKLXN0YXRpYyBzcGlubG9ja190IGlTZXJpZXNfaGxvY2tzWzY0XSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9Ci0JeyBbMCAuLi4gNjNdID0gU1BJTl9MT0NLX1VOTE9DS0VEfTsKK3N0YXRpYyBzcGlubG9ja190IGlTZXJpZXNfaGxvY2tzWzY0XSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogLyoKICAqIFZlcnkgcHJpbWl0aXZlIGFsZ29yaXRobSBmb3IgcGlja2luZyB1cCBhIGxvY2sKQEAgLTI0NSw2ICsyNDQsMTEgQEAKIAogdm9pZCBfX2luaXQgaHB0ZV9pbml0X2lTZXJpZXModm9pZCkKIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlTZXJpZXNfaGxvY2tzKTsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmaVNlcmllc19obG9ja3NbaV0pOworCiAJcHBjX21kLmhwdGVfaW52YWxpZGF0ZQk9IGlTZXJpZXNfaHB0ZV9pbnZhbGlkYXRlOwogCXBwY19tZC5ocHRlX3VwZGF0ZXBwCT0gaVNlcmllc19ocHRlX3VwZGF0ZXBwOwogCXBwY19tZC5ocHRlX3VwZGF0ZWJvbHRlZHBwID0gaVNlcmllc19ocHRlX3VwZGF0ZWJvbHRlZHBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCmluZGV4IDk0ZjQ0NDcuLjg2YzRiMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKQEAgLTIxNCwxMiArMjE0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZvcl9lYWNoX2lycSAoaXJxKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyhpcnEpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJCWlmIChkZXNjICYmIGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+c3RhcnR1cCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQkJZGVzYy0+Y2hpcC0+c3RhcnR1cChpcnEpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJfQogCX0KIH0KQEAgLTI3Myw3ICsyNzMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlzZXJpZXNfcGljID0gewotCS50eXBlbmFtZQk9ICJpU2VyaWVzIGlycSBjb250cm9sbGVyIiwKKwkubmFtZQk9ICJpU2VyaWVzIGlycSBjb250cm9sbGVyIiwKIAkuc3RhcnR1cAk9IGlzZXJpZXNfc3RhcnR1cF9JUlEsCiAJLnNodXRkb3duCT0gaXNlcmllc19zaHV0ZG93bl9JUlEsCiAJLnVubWFzawkJPSBpc2VyaWVzX2VuYWJsZV9JUlEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCmluZGV4IDBkOTM0M2QuLjY2MTc5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCkBAIC04NTUsNTkgKzg1NSw1OCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQotc3RhdGljIGludCBwcm9jX21mX2R1bXBfY21kbGluZShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWZfY21kbGluZV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW47Ci0JY2hhciAqcDsKKwljaGFyICpwYWdlLCAqcDsKIAlzdHJ1Y3QgdnNwX2NtZF9kYXRhIHZzcF9jbWQ7CiAJaW50IHJjOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAKIAkvKiBUaGUgSFYgYXBwZWFycyB0byByZXR1cm4gbm8gbW9yZSB0aGFuIDI1NiBieXRlcyBvZiBjb21tYW5kIGxpbmUgKi8KLQlpZiAob2ZmID49IDI1NikKLQkJcmV0dXJuIDA7Ci0JaWYgKChvZmYgKyBjb3VudCkgPiAyNTYpCi0JCWNvdW50ID0gMjU2IC0gb2ZmOwotCi0JZG1hX2FkZHIgPSBpc2VyaWVzX2h2X21hcChwYWdlLCBvZmYgKyBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAoZG1hX2FkZHIgPT0gRE1BX0VSUk9SX0NPREUpCisJcGFnZSA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwYWdlLCAwLCBvZmYgKyBjb3VudCk7CisKKwlkbWFfYWRkciA9IGlzZXJpZXNfaHZfbWFwKHBhZ2UsIDI1NiwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX2FkZHIgPT0gRE1BX0VSUk9SX0NPREUpIHsKKwkJa2ZyZWUocGFnZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocGFnZSwgMCwgMjU2KTsKIAltZW1zZXQoJnZzcF9jbWQsIDAsIHNpemVvZih2c3BfY21kKSk7CiAJdnNwX2NtZC5jbWQgPSAzMzsKIAl2c3BfY21kLnN1Yl9kYXRhLmtlcm4udG9rZW4gPSBkbWFfYWRkcjsKIAl2c3BfY21kLnN1Yl9kYXRhLmtlcm4uYWRkcmVzc190eXBlID0gSHZMcERtYV9BZGRyZXNzVHlwZV9UY2VJbmRleDsKLQl2c3BfY21kLnN1Yl9kYXRhLmtlcm4uc2lkZSA9ICh1NjQpZGF0YTsKLQl2c3BfY21kLnN1Yl9kYXRhLmtlcm4ubGVuZ3RoID0gb2ZmICsgY291bnQ7CisJdnNwX2NtZC5zdWJfZGF0YS5rZXJuLnNpZGUgPSAodTY0KW0tPnByaXZhdGU7CisJdnNwX2NtZC5zdWJfZGF0YS5rZXJuLmxlbmd0aCA9IDI1NjsKIAltYigpOwogCXJjID0gc2lnbmFsX3ZzcF9pbnN0cnVjdGlvbigmdnNwX2NtZCk7Ci0JaXNlcmllc19odl91bm1hcChkbWFfYWRkciwgb2ZmICsgY291bnQsIERNQV9GUk9NX0RFVklDRSk7Ci0JaWYgKHJjKQorCWlzZXJpZXNfaHZfdW5tYXAoZG1hX2FkZHIsIDI1NiwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAocmMpIHsKKwkJa2ZyZWUocGFnZSk7CiAJCXJldHVybiByYzsKLQlpZiAodnNwX2NtZC5yZXN1bHRfY29kZSAhPSAwKQorCX0KKwlpZiAodnNwX2NtZC5yZXN1bHRfY29kZSAhPSAwKSB7CisJCWtmcmVlKHBhZ2UpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJcCA9IHBhZ2U7Ci0JbGVuID0gMDsKLQl3aGlsZSAobGVuIDwgKG9mZiArIGNvdW50KSkgewotCQlpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAnXG4nKSkgewotCQkJaWYgKCpwID09ICdcMCcpCi0JCQkJKnAgPSAnXG4nOwotCQkJcCsrOwotCQkJbGVuKys7Ci0JCQkqZW9mID0gMTsKKwl3aGlsZSAocCAtIHBhZ2UgPCAyNTYpIHsKKwkJaWYgKCpwID09ICdcMCcgfHwgKnAgPT0gJ1xuJykgeworCQkJKnAgPSAnXG4nOwogCQkJYnJlYWs7CiAJCX0KIAkJcCsrOwotCQlsZW4rKzsKLQl9CiAKLQlpZiAobGVuIDwgb2ZmKSB7Ci0JCSplb2YgPSAxOwotCQlsZW4gPSAwOwogCX0KLQlyZXR1cm4gbGVuOworCXNlcV93cml0ZShtLCBwYWdlLCBwIC0gcGFnZSk7CisJa2ZyZWUocGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWZfY21kbGluZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1mX2NtZGxpbmVfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAogI2lmIDAKQEAgLTk2MiwxMCArOTYxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHByb2NfbWZfZHVtcF9zaWRlKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zaWRlX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbjsKIAljaGFyIG1mX2N1cnJlbnRfc2lkZSA9ICcgJzsKIAlzdHJ1Y3QgdnNwX2NtZF9kYXRhIHZzcF9jbWQ7CiAKQEAgLTk4OSwyMSArOTg2LDE3IEBACiAJCX0KIAl9CiAKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlY1xuIiwgbWZfY3VycmVudF9zaWRlKTsKLQotCWlmIChsZW4gPD0gKG9mZiArIGNvdW50KSkKLQkJKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlsZW4gLT0gb2ZmOwotCWlmIChsZW4gPiBjb3VudCkKLQkJbGVuID0gY291bnQ7Ci0JaWYgKGxlbiA8IDApCi0JCWxlbiA9IDA7Ci0JcmV0dXJuIGxlbjsKKwlzZXFfcHJpbnRmKG0sICIlY1xuIiwgbWZfY3VycmVudF9zaWRlKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX21mX2NoYW5nZV9zaWRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zaWRlX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWZfc2lkZV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBtZl9zaWRlX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgc2lkZTsKIAl1NjQgbmV3U2lkZTsKQEAgLTEwNDEsNiArMTAzNCwxNSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWZfc2lkZV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1mX3NpZGVfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IG1mX3NpZGVfcHJvY193cml0ZSwKK307CisKICNpZiAwCiBzdGF0aWMgdm9pZCBtZl9nZXRTcmNIaXN0b3J5KGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpCiB7CkBAIC0xMDg3LDggKzEwODksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHJvY19tZl9kdW1wX3NyYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWZfc3JjX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAjaWYgMAogCWludCBsZW47CkBAIC0xMTA5LDggKzExMTAsMTMgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IHByb2NfbWZfY2hhbmdlX3NyYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWZfc3JjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWZfc3JjX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1mX3NyY19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgc3RrYnVmWzEwXTsKIApAQCAtMTEzNSw5ICsxMTQxLDE5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IHByb2NfbWZfY2hhbmdlX2NtZGxpbmUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZl9zcmNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtZl9zcmNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IG1mX3NyY19wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIHNzaXplX3QgbWZfY21kbGluZV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKKwl2b2lkICpkYXRhID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCXN0cnVjdCB2c3BfY21kX2RhdGEgdnNwX2NtZDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWNoYXIgKnBhZ2U7CkBAIC0xMTcyLDYgKzExODgsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZl9jbWRsaW5lX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbWZfY21kbGluZV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbWZfY21kbGluZV9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIHNzaXplX3QgcHJvY19tZl9jaGFuZ2Vfdm1saW51eChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMTI0NiwxMiArMTI3MSwxMCBAQAogCQlpZiAoIW1mKQogCQkJcmV0dXJuIDE7CiAKLQkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImNtZGxpbmUiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWYpOworCQllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKCJjbWRsaW5lIiwgU19JUlVTUnxTX0lXVVNSLCBtZiwKKwkJCQkgICAgICAgJm1mX2NtZGxpbmVfcHJvY19mb3BzLCAodm9pZCAqKShsb25nKWkpOwogCQlpZiAoIWVudCkKIAkJCXJldHVybiAxOwotCQllbnQtPmRhdGEgPSAodm9pZCAqKShsb25nKWk7Ci0JCWVudC0+cmVhZF9wcm9jID0gcHJvY19tZl9kdW1wX2NtZGxpbmU7Ci0JCWVudC0+d3JpdGVfcHJvYyA9IHByb2NfbWZfY2hhbmdlX2NtZGxpbmU7CiAKIAkJaWYgKGkgPT0gMykJLyogbm8gdm1saW51eCBlbnRyeSBmb3IgJ0QnICovCiAJCQljb250aW51ZTsKQEAgLTEyNjMsMTkgKzEyODYsMTUgQEAKIAkJCXJldHVybiAxOwogCX0KIAotCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzaWRlIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsIG1mX3Byb2Nfcm9vdCk7CisJZW50ID0gcHJvY19jcmVhdGUoInNpZGUiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWZfcHJvY19yb290LAorCQkJICAmbWZfc2lkZV9wcm9jX2ZvcHMpOwogCWlmICghZW50KQogCQlyZXR1cm4gMTsKLQllbnQtPmRhdGEgPSAodm9pZCAqKTA7Ci0JZW50LT5yZWFkX3Byb2MgPSBwcm9jX21mX2R1bXBfc2lkZTsKLQllbnQtPndyaXRlX3Byb2MgPSBwcm9jX21mX2NoYW5nZV9zaWRlOwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInNyYyIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZl9wcm9jX3Jvb3QpOworCWVudCA9IHByb2NfY3JlYXRlKCJzcmMiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWZfcHJvY19yb290LAorCQkJICAmbWZfc3JjX3Byb2NfZm9wcyk7CiAJaWYgKCFlbnQpCiAJCXJldHVybiAxOwotCWVudC0+ZGF0YSA9ICh2b2lkICopMDsKLQllbnQtPnJlYWRfcHJvYyA9IHByb2NfbWZfZHVtcF9zcmM7Ci0JZW50LT53cml0ZV9wcm9jID0gcHJvY19tZl9jaGFuZ2Vfc3JjOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwppbmRleCA0OWZmNGRjLi41YWVhOTRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCXUxNiB2bGFuTWFwOwogCWRtYV9hZGRyX3QgaGFuZGxlOwogCUh2THBFdmVudF9SYyBodnJjOwotCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CiAJY29uc3QgY2hhciAqc3lzaWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9zZXR1cC5jCmluZGV4IGE0NjE5MzQuLjI0MmY4MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvc2V0dXAuYwpAQCAtNzEsNyArNzEsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHJhd19zcGlubG9ja190IHRpbWViYXNlX2xvY2s7CitzdGF0aWMgYXJjaF9zcGlubG9ja190IHRpbWViYXNlX2xvY2s7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lYmFzZTsKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBhc19naXZlX3RpbWViYXNlKHZvaWQpCkBAIC04MCwxMSArODAsMTEgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAloYXJkX2lycV9kaXNhYmxlKCk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZ0aW1lYmFzZV9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmdGltZWJhc2VfbG9jayk7CiAJbXRzcHIoU1BSTl9UQkNUTCwgVEJDVExfRlJFRVpFKTsKIAlpc3luYygpOwogCXRpbWViYXNlID0gZ2V0X3RiKCk7Ci0JX19yYXdfc3Bpbl91bmxvY2soJnRpbWViYXNlX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnRpbWViYXNlX2xvY2spOwogCiAJd2hpbGUgKHRpbWViYXNlKQogCQliYXJyaWVyKCk7CkBAIC05NywxMCArOTcsMTAgQEAKIAl3aGlsZSAoIXRpbWViYXNlKQogCQlzbXBfcm1iKCk7CiAKLQlfX3Jhd19zcGluX2xvY2soJnRpbWViYXNlX2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZ0aW1lYmFzZV9sb2NrKTsKIAlzZXRfdGIodGltZWJhc2UgPj4gMzIsIHRpbWViYXNlICYgMHhmZmZmZmZmZik7CiAJdGltZWJhc2UgPSAwOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZ0aW1lYmFzZV9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZ0aW1lYmFzZV9sb2NrKTsKIH0KIAogc3RydWN0IHNtcF9vcHNfdCBwYXNfc21wX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKaW5kZXggY2Y2NjA5MS4uOWRkNzg5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKaW5kZXggZDIxMjAwNi4uMDllODI3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCkBAIC0xNTIsMTIgKzE1MiwxMiBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7Ci0JaWYgKChpcnFfZGVzY1t2aXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlpZiAoKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICBfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwotICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTk1LDcgKzE5NSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG1hY19waWMgPSB7Ci0JLnR5cGVuYW1lCT0gIiBQTUFDLVBJQyAiLAorCS5uYW1lCQk9ICIgUE1BQy1QSUMgIiwKIAkuc3RhcnR1cAk9IHBtYWNfc3RhcnR1cF9pcnEsCiAJLm1hc2sJCT0gcG1hY19tYXNrX2lycSwKIAkuYWNrCQk9IHBtYWNfYWNrX2lycSwKQEAgLTI4NSw3ICsyODUsNyBAQAogc3RhdGljIGludCBwbWFjX3BpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHcpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOwogCWludCBsZXZlbDsKIAogCWlmIChodyA+PSBtYXhfaXJxcykKQEAgLTMwMyw3ICszMDMsNyBAQAogfQogCiBzdGF0aWMgaW50IHBtYWNfcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICAgICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYwppbmRleCA4ZWM1Y2NmLi41OWQ5NzEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwczNfaXJxX2NoaXAgPSB7Ci0JLnR5cGVuYW1lID0gInBzMyIsCisJLm5hbWUgPSAicHMzIiwKIAkubWFzayA9IHBzM19jaGlwX21hc2ssCiAJLnVubWFzayA9IHBzM19jaGlwX3VubWFzaywKIAkuZW9pID0gcHMzX2NoaXBfZW9pLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKaW5kZXggMTg5YTI1Yi4uZTgxYjAyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCkBAIC0zNCw3ICszNCw3IEBACiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgREJHIHVkYmdfcHJpbnRmCiAjZWxzZQotI2RlZmluZSBEQkcgcHJfZGVidWcKKyNkZWZpbmUgREJHIHByX2RldmVsCiAjZW5kaWYKIAogZW51bSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCmluZGV4IGYwZTZmMjguLmM2NjdmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCkBAIC0yLDggKzIsMTEgQEAKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJJQk0gcFNlcmllcyAmIG5ldyAoUE9XRVI1LWJhc2VkKSBpU2VyaWVzIgogCXNlbGVjdCBNUElDCisJc2VsZWN0IFBDSV9NU0kKKwlzZWxlY3QgWElDUwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX1JUQVMKKwlzZWxlY3QgUFBDX1JUQVNfREFFTU9OCiAJc2VsZWN0IFJUQVNfRVJST1JfTE9HR0lORwogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNlbGVjdCBQUENfTkFUSVZFCkBAIC01OSw3ICs2Miw3IEBACiAKIGNvbmZpZyBDTU0KIAl0cmlzdGF0ZSAiQ29sbGFib3JhdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCIKLQlkZXBlbmRzIG9uIFBQQ19TTUxQQVIgJiYgIUNSQVNIX0RVTVAKKwlkZXBlbmRzIG9uIFBQQ19TTUxQQVIKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24sIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUga2VybmVsIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCmluZGV4IDc5MGMwYjguLjBmZjUxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKQEAgLTcsOCArNyw4IEBACiBlbmRpZgogCiBvYmoteQkJCTo9IGxwYXIubyBodkNhbGwubyBudnJhbS5vIHJlY29uZmlnLm8gXAotCQkJICAgc2V0dXAubyBpb21tdS5vIHJhcy5vIHJ0YXNkLm8gXAotCQkJICAgZmlybXdhcmUubyBwb3dlci5vCisJCQkgICBzZXR1cC5vIGlvbW11Lm8gcmFzLm8gXAorCQkJICAgZmlybXdhcmUubyBwb3dlci5vIGRscGFyLm8KIG9iai0kKENPTkZJR19TTVApCSs9IHNtcC5vCiBvYmotJChDT05GSUdfWElDUykJKz0geGljcy5vCiBvYmotJChDT05GSUdfU0NBTkxPRykJKz0gc2NhbmxvZy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKaW5kZXggNjU2NzQzOS4uYTI3N2YyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYwpAQCAtMzgsMTkgKzM4LDI4IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKICNkZWZpbmUgQ01NX0RSSVZFUl9WRVJTSU9OCSIxLjAuMCIKICNkZWZpbmUgQ01NX0RFRkFVTFRfREVMQVkJMQorI2RlZmluZSBDTU1fSE9UUExVR19ERUxBWQk1CiAjZGVmaW5lIENNTV9ERUJVRwkJCTAKICNkZWZpbmUgQ01NX0RJU0FCTEUJCTAKICNkZWZpbmUgQ01NX09PTV9LQgkJMTAyNAogI2RlZmluZSBDTU1fTUlOX01FTV9NQgkJMjU2CiAjZGVmaW5lIEtCMlBBR0VTKF9wKQkJKChfcCk+PihQQUdFX1NISUZULTEwKSkKICNkZWZpbmUgUEFHRVMyS0IoX3ApCQkoKF9wKTw8KFBBR0VfU0hJRlQtMTApKQorLyoKKyAqIFRoZSBwcmlvcml0eSBsZXZlbCB0cmllcyB0byBlbnN1cmUgdGhhdCB0aGlzIG5vdGlmaWVyIGlzIGNhbGxlZCBhcworICogbGF0ZSBhcyBwb3NzaWJsZSB0byByZWR1Y2UgdGhyYXNoaW5nIGluIHRoZSBzaGFyZWQgbWVtb3J5IHBvb2wuCisgKi8KKyNkZWZpbmUgQ01NX01FTV9IT1RQTFVHX1BSSQkxCisjZGVmaW5lIENNTV9NRU1fSVNPTEFURV9QUkkJMTUKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWxheSA9IENNTV9ERUZBVUxUX0RFTEFZOworc3RhdGljIHVuc2lnbmVkIGludCBob3RwbHVnX2RlbGF5ID0gQ01NX0hPVFBMVUdfREVMQVk7CiBzdGF0aWMgdW5zaWduZWQgaW50IG9vbV9rYiA9IENNTV9PT01fS0I7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNtbV9kZWJ1ZyA9IENNTV9ERUJVRzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY21tX2Rpc2FibGVkID0gQ01NX0RJU0FCTEU7CkBAIC02NSw2ICs3NCwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGRlbGF5LCBkZWxheSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgIkRlbGF5IChpbiBzZWNvbmRzKSBiZXR3ZWVuIHBvbGxzIHRvIHF1ZXJ5IGh5cGVydmlzb3IgcGFnaW5nIHJlcXVlc3RzLiAiCiAJCSAiW0RlZmF1bHQ9IiBfX3N0cmluZ2lmeShDTU1fREVGQVVMVF9ERUxBWSkgIl0iKTsKK21vZHVsZV9wYXJhbV9uYW1lZChob3RwbHVnX2RlbGF5LCBob3RwbHVnX2RlbGF5LCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiRGVsYXkgKGluIHNlY29uZHMpIGFmdGVyIG1lbW9yeSBob3RwbHVnIHJlbW92ZSAiCisJCSAiYmVmb3JlIGxvYW5pbmcgcmVzdW1lcy4gIgorCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX0hPVFBMVUdfREVMQVkpICJdIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQob29tX2tiLCBvb21fa2IsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0Mob29tX2tiLCAiQW1vdW50IG9mIG1lbW9yeSBpbiBrYiB0byBmcmVlIG9uIE9PTS4gIgogCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX09PTV9LQikgIl0iKTsKQEAgLTkyLDYgKzEwNSw5IEBACiBzdGF0aWMgc3RydWN0IGNtbV9wYWdlX2FycmF5ICpjbW1fcGFnZV9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhjbW1fbG9jayk7CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaG90cGx1Z19tdXRleCk7CitzdGF0aWMgaW50IGhvdHBsdWdfb2NjdXJyZWQ7IC8qIHByb3RlY3RlZCBieSB0aGUgaG90cGx1ZyBtdXRleCAqLworCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjbW1fdGhyZWFkX3B0cjsKIAogLyoqCkBAIC0xMTAsNiArMTI2LDE3IEBACiAJY21tX2RiZygiQmVnaW4gcmVxdWVzdCBmb3IgJWxkIHBhZ2VzXG4iLCBucik7CiAKIAl3aGlsZSAobnIpIHsKKwkJLyogRXhpdCBpZiBhIGhvdHBsdWcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIG9yIG9jY3VycmVkICovCisJCWlmIChtdXRleF90cnlsb2NrKCZob3RwbHVnX211dGV4KSkgeworCQkJaWYgKGhvdHBsdWdfb2NjdXJyZWQpIHsKKwkJCQltdXRleF91bmxvY2soJmhvdHBsdWdfbXV0ZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisKIAkJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8CiAJCQkJICAgICAgIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DKTsKIAkJaWYgKCFhZGRyKQpAQCAtMTE5LDggKzE0Niw5IEBACiAJCWlmICghcGEgfHwgcGEtPmluZGV4ID49IENNTV9OUl9QQUdFUykgewogCQkJLyogTmVlZCBhIG5ldyBwYWdlIGZvciB0aGUgcGFnZSBsaXN0LiAqLwogCQkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKLQkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJCQkJCQkgICAgICAgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOworCQkJbnBhID0gKHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqKV9fZ2V0X2ZyZWVfcGFnZSgKKwkJCQkJR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAorCQkJCQlfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9NRU1BTExPQyk7CiAJCQlpZiAoIW5wYSkgewogCQkJCXByX2luZm8oIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldyBwYWdlIGxpc3RcbiIsIF9fZnVuY19fKTsKIAkJCQlmcmVlX3BhZ2UoYWRkcik7CkBAIC0yMjksOCArMjU3LDkgQEAKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGh2Y2FsbF9tcHBfZGF0YSBtcHBfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9wYWdlc190YXJnZXQ7Ci0Jc2lnbmVkIGxvbmcgcGFnZV9sb2FuX3JlcXVlc3Q7CisJc2lnbmVkIGxvbmcgYWN0aXZlX3BhZ2VzX3RhcmdldCwgcGFnZV9sb2FuX3JlcXVlc3QsIHRhcmdldDsKKwlzaWduZWQgbG9uZyB0b3RhbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzICsgbG9hbmVkX3BhZ2VzOworCXNpZ25lZCBsb25nIG1pbl9tZW1fcGFnZXMgPSAobWluX21lbV9tYiAqIDEwMjQgKiAxMDI0KSAvIFBBR0VfU0laRTsKIAogCXJjID0gaF9nZXRfbXBwKCZtcHBfZGF0YSk7CiAKQEAgLTIzOCwxNyArMjY3LDI1IEBACiAJCXJldHVybjsKIAogCXBhZ2VfbG9hbl9yZXF1ZXN0ID0gZGl2X3M2NCgoczY0KW1wcF9kYXRhLmxvYW5fcmVxdWVzdCwgUEFHRV9TSVpFKTsKLQlsb2FuZWRfcGFnZXNfdGFyZ2V0ID0gcGFnZV9sb2FuX3JlcXVlc3QgKyBsb2FuZWRfcGFnZXM7Ci0JaWYgKGxvYW5lZF9wYWdlc190YXJnZXQgPiBvb21fZnJlZWRfcGFnZXMpCi0JCWxvYW5lZF9wYWdlc190YXJnZXQgLT0gb29tX2ZyZWVkX3BhZ2VzOworCXRhcmdldCA9IHBhZ2VfbG9hbl9yZXF1ZXN0ICsgKHNpZ25lZCBsb25nKWxvYW5lZF9wYWdlczsKKworCWlmICh0YXJnZXQgPCAwIHx8IHRvdGFsX3BhZ2VzIDwgbWluX21lbV9wYWdlcykKKwkJdGFyZ2V0ID0gMDsKKworCWlmICh0YXJnZXQgPiBvb21fZnJlZWRfcGFnZXMpCisJCXRhcmdldCAtPSBvb21fZnJlZWRfcGFnZXM7CiAJZWxzZQotCQlsb2FuZWRfcGFnZXNfdGFyZ2V0ID0gMDsKKwkJdGFyZ2V0ID0gMDsKIAotCWFjdGl2ZV9wYWdlc190YXJnZXQgPSB0b3RhbHJhbV9wYWdlcyArIGxvYW5lZF9wYWdlcyAtIGxvYW5lZF9wYWdlc190YXJnZXQ7CisJYWN0aXZlX3BhZ2VzX3RhcmdldCA9IHRvdGFsX3BhZ2VzIC0gdGFyZ2V0OwogCi0JaWYgKChtaW5fbWVtX21iICogMTAyNCAqIDEwMjQpID4gKGFjdGl2ZV9wYWdlc190YXJnZXQgKiBQQUdFX1NJWkUpKQotCQlsb2FuZWRfcGFnZXNfdGFyZ2V0ID0gdG90YWxyYW1fcGFnZXMgKyBsb2FuZWRfcGFnZXMgLQotCQkJKChtaW5fbWVtX21iICogMTAyNCAqIDEwMjQpIC8gUEFHRV9TSVpFKTsKKwlpZiAobWluX21lbV9wYWdlcyA+IGFjdGl2ZV9wYWdlc190YXJnZXQpCisJCXRhcmdldCA9IHRvdGFsX3BhZ2VzIC0gbWluX21lbV9wYWdlczsKKworCWlmICh0YXJnZXQgPCAwKQorCQl0YXJnZXQgPSAwOworCisJbG9hbmVkX3BhZ2VzX3RhcmdldCA9IHRhcmdldDsKIAogCWNtbV9kYmcoImRlbHRhID0gJWxkLCBsb2FuZWQgPSAlbHUsIHRhcmdldCA9ICVsdSwgb29tID0gJWx1LCB0b3RhbHJhbSA9ICVsdVxuIiwKIAkJcGFnZV9sb2FuX3JlcXVlc3QsIGxvYW5lZF9wYWdlcywgbG9hbmVkX3BhZ2VzX3RhcmdldCwKQEAgLTI3Myw5ICszMTAsMjggQEAKIAl3aGlsZSAoMSkgewogCQl0aW1lbGVmdCA9IG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRlbGF5ICogMTAwMCk7CiAKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB0aW1lbGVmdCkgewotCQkJbG9hbmVkX3BhZ2VzX3RhcmdldCA9IGxvYW5lZF9wYWdlczsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB0aW1lbGVmdCkKIAkJCWJyZWFrOworCisJCWlmIChtdXRleF90cnlsb2NrKCZob3RwbHVnX211dGV4KSkgeworCQkJaWYgKGhvdHBsdWdfb2NjdXJyZWQpIHsKKwkJCQlob3RwbHVnX29jY3VycmVkID0gMDsKKwkJCQltdXRleF91bmxvY2soJmhvdHBsdWdfbXV0ZXgpOworCQkJCWNtbV9kYmcoIkhvdHBsdWcgb3BlcmF0aW9uIGhhcyBvY2N1cnJlZCwgIgorCQkJCQkJImxvYW5pbmcgYWN0aXZpdHkgc3VzcGVuZGVkICIKKwkJCQkJCSJmb3IgJWQgc2Vjb25kcy5cbiIsCisJCQkJCQlob3RwbHVnX2RlbGF5KTsKKwkJCQl0aW1lbGVmdCA9IG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGhvdHBsdWdfZGVsYXkgKgorCQkJCQkJMTAwMCk7CisJCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB0aW1lbGVmdCkKKwkJCQkJYnJlYWs7CisJCQkJY29udGludWU7CisJCQl9CisJCQltdXRleF91bmxvY2soJmhvdHBsdWdfbXV0ZXgpOworCQl9IGVsc2UgeworCQkJY21tX2RiZygiSG90cGx1ZyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MsIGFjdGl2aXR5ICIKKwkJCQkJInN1c3BlbmRlZFxuIik7CisJCQljb250aW51ZTsKIAkJfQogCiAJCWNtbV9nZXRfbXBwKCk7CkBAIC00MDUsNiArNDYxLDE5MyBAQAogfTsKIAogLyoqCisgKiBjbW1fY291bnRfcGFnZXMgLSBDb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGxvYW5lZCBpbiBhIHBhcnRpY3VsYXIgcmFuZ2UuCisgKgorICogQGFyZzogbWVtb3J5X2lzb2xhdGVfbm90aWZ5IHN0cnVjdHVyZSB3aXRoIGFkZHJlc3MgcmFuZ2UgYW5kIGNvdW50CisgKgorICogUmV0dXJuIHZhbHVlOgorICogICAgICAwIG9uIHN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtbV9jb3VudF9wYWdlcyh2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9pc29sYXRlX25vdGlmeSAqbWFyZyA9IGFyZzsKKwlzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKnBhOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIobWFyZy0+c3RhcnRfcGZuKTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgKG1hcmctPm5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOworCXVuc2lnbmVkIGxvbmcgaWR4OworCisJc3Bpbl9sb2NrKCZjbW1fbG9jayk7CisJcGEgPSBjbW1fcGFnZV9saXN0OworCXdoaWxlIChwYSkgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpcGEgPj0gc3RhcnQgJiYgKHVuc2lnbmVkIGxvbmcpcGEgPCBlbmQpCisJCQltYXJnLT5wYWdlc19mb3VuZCsrOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHBhLT5pbmRleDsgaWR4KyspCisJCQlpZiAocGEtPnBhZ2VbaWR4XSA+PSBzdGFydCAmJiBwYS0+cGFnZVtpZHhdIDwgZW5kKQorCQkJCW1hcmctPnBhZ2VzX2ZvdW5kKys7CisJCXBhID0gcGEtPm5leHQ7CisJfQorCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY21tX21lbW9yeV9pc29sYXRlX2NiIC0gSGFuZGxlIG1lbW9yeSBpc29sYXRpb24gbm90aWZpZXIgY2FsbHMKKyAqIEBzZWxmOglub3RpZmllciBibG9jayBzdHJ1Y3QKKyAqIEBhY3Rpb246CWFjdGlvbiB0byB0YWtlCisgKiBAYXJnOglzdHJ1Y3QgbWVtb3J5X2lzb2xhdGVfbm90aWZ5IGRhdGEgZm9yIGhhbmRsZXIKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKglOT1RJRllfT0sgb3Igbm90aWZpZXIgZXJyb3IgYmFzZWQgb24gc3ViZnVuY3Rpb24gcmV0dXJuIHZhbHVlCisgKiovCitzdGF0aWMgaW50IGNtbV9tZW1vcnlfaXNvbGF0ZV9jYihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYWN0aW9uID09IE1FTV9JU09MQVRFX0NPVU5UKQorCQlyZXQgPSBjbW1fY291bnRfcGFnZXMoYXJnKTsKKworCWlmIChyZXQpCisJCXJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKKwllbHNlCisJCXJldCA9IE5PVElGWV9PSzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY21tX21lbV9pc29sYXRlX25iID0geworCS5ub3RpZmllcl9jYWxsID0gY21tX21lbW9yeV9pc29sYXRlX2NiLAorCS5wcmlvcml0eSA9IENNTV9NRU1fSVNPTEFURV9QUkkKK307CisKKy8qKgorICogY21tX21lbV9nb2luZ19vZmZsaW5lIC0gVW5sb2FuIHBhZ2VzIHdoZXJlIG1lbW9yeSBpcyB0byBiZSByZW1vdmVkCisgKiBAYXJnOiBtZW1vcnlfbm90aWZ5IHN0cnVjdHVyZSB3aXRoIHBhZ2UgcmFuZ2UgdG8gYmUgb2ZmbGluZWQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkwIG9uIHN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyBpbnQgY21tX21lbV9nb2luZ19vZmZsaW5lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWVtb3J5X25vdGlmeSAqbWFyZyA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UgPSAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIobWFyZy0+c3RhcnRfcGZuKTsKKwl1bnNpZ25lZCBsb25nIGVuZF9wYWdlID0gc3RhcnRfcGFnZSArIChtYXJnLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwlzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKnBhX2N1cnIsICpwYV9sYXN0LCAqbnBhOworCXVuc2lnbmVkIGxvbmcgaWR4OworCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSAwOworCisJY21tX2RiZygiTWVtb3J5IGdvaW5nIG9mZmxpbmUsIHNlYXJjaGluZyAweCVseCAoJWxkIHBhZ2VzKS5cbiIsCisJCQlzdGFydF9wYWdlLCBtYXJnLT5ucl9wYWdlcyk7CisJc3Bpbl9sb2NrKCZjbW1fbG9jayk7CisKKwkvKiBTZWFyY2ggdGhlIHBhZ2UgbGlzdCBmb3IgcGFnZXMgaW4gdGhlIHJhbmdlIHRvIGJlIG9mZmxpbmVkICovCisJcGFfbGFzdCA9IHBhX2N1cnIgPSBjbW1fcGFnZV9saXN0OworCXdoaWxlIChwYV9jdXJyKSB7CisJCWZvciAoaWR4ID0gKHBhX2N1cnItPmluZGV4IC0gMSk7IChpZHggKyAxKSA+IDA7IGlkeC0tKSB7CisJCQlpZiAoKHBhX2N1cnItPnBhZ2VbaWR4XSA8IHN0YXJ0X3BhZ2UpIHx8CisJCQkgICAgKHBhX2N1cnItPnBhZ2VbaWR4XSA+PSBlbmRfcGFnZSkpCisJCQkJY29udGludWU7CisKKwkJCXBscGFyX3BhZ2Vfc2V0X2FjdGl2ZShfX3BhKHBhX2N1cnItPnBhZ2VbaWR4XSkpOworCQkJZnJlZV9wYWdlKHBhX2N1cnItPnBhZ2VbaWR4XSk7CisJCQlmcmVlZCsrOworCQkJbG9hbmVkX3BhZ2VzLS07CisJCQl0b3RhbHJhbV9wYWdlcysrOworCQkJcGFfY3Vyci0+cGFnZVtpZHhdID0gcGFfbGFzdC0+cGFnZVstLXBhX2xhc3QtPmluZGV4XTsKKwkJCWlmIChwYV9sYXN0LT5pbmRleCA9PSAwKSB7CisJCQkJaWYgKHBhX2N1cnIgPT0gcGFfbGFzdCkKKwkJCQkJcGFfY3VyciA9IHBhX2xhc3QtPm5leHQ7CisJCQkJcGFfbGFzdCA9IHBhX2xhc3QtPm5leHQ7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNtbV9wYWdlX2xpc3QpOworCQkJCWNtbV9wYWdlX2xpc3QgPSBwYV9sYXN0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXBhX2N1cnIgPSBwYV9jdXJyLT5uZXh0OworCX0KKworCS8qIFNlYXJjaCBmb3IgcGFnZSBsaXN0IHN0cnVjdHVyZXMgaW4gdGhlIHJhbmdlIHRvIGJlIG9mZmxpbmVkICovCisJcGFfbGFzdCA9IE5VTEw7CisJcGFfY3VyciA9IGNtbV9wYWdlX2xpc3Q7CisJd2hpbGUgKHBhX2N1cnIpIHsKKwkJaWYgKCgodW5zaWduZWQgbG9uZylwYV9jdXJyID49IHN0YXJ0X3BhZ2UpICYmCisJCQkJKCh1bnNpZ25lZCBsb25nKXBhX2N1cnIgPCBlbmRfcGFnZSkpIHsKKwkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoCisJCQkJCUdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHwKKwkJCQkJX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOworCQkJaWYgKCFucGEpIHsKKwkJCQlzcGluX3VubG9jaygmY21tX2xvY2spOworCQkJCWNtbV9kYmcoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGxpc3QgIgorCQkJCQkJIm1hbmFnZW1lbnQuIE1lbW9yeSBob3RwbHVnICIKKwkJCQkJCSJmYWlsZWQuXG4iKTsKKwkJCQlyZXR1cm4gRU5PTUVNOworCQkJfQorCQkJbWVtY3B5KG5wYSwgcGFfY3VyciwgUEFHRV9TSVpFKTsKKwkJCWlmIChwYV9jdXJyID09IGNtbV9wYWdlX2xpc3QpCisJCQkJY21tX3BhZ2VfbGlzdCA9IG5wYTsKKwkJCWlmIChwYV9sYXN0KQorCQkJCXBhX2xhc3QtPm5leHQgPSBucGE7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhX2N1cnIpOworCQkJZnJlZWQrKzsKKwkJCXBhX2N1cnIgPSBucGE7CisJCX0KKworCQlwYV9sYXN0ID0gcGFfY3VycjsKKwkJcGFfY3VyciA9IHBhX2N1cnItPm5leHQ7CisJfQorCisJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKKwljbW1fZGJnKCJSZWxlYXNlZCAlbGQgcGFnZXMgaW4gdGhlIHNlYXJjaCByYW5nZS5cbiIsIGZyZWVkKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNtbV9tZW1vcnlfY2IgLSBIYW5kbGUgbWVtb3J5IGhvdHBsdWcgbm90aWZpZXIgY2FsbHMKKyAqIEBzZWxmOglub3RpZmllciBibG9jayBzdHJ1Y3QKKyAqIEBhY3Rpb246CWFjdGlvbiB0byB0YWtlCisgKiBAYXJnOglzdHJ1Y3QgbWVtb3J5X25vdGlmeSBkYXRhIGZvciBoYW5kbGVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJTk9USUZZX09LIG9yIG5vdGlmaWVyIGVycm9yIGJhc2VkIG9uIHN1YmZ1bmN0aW9uIHJldHVybiB2YWx1ZQorICoKKyAqKi8KK3N0YXRpYyBpbnQgY21tX21lbW9yeV9jYihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgorCQltdXRleF9sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJaG90cGx1Z19vY2N1cnJlZCA9IDE7CisJCXJldCA9IGNtbV9tZW1fZ29pbmdfb2ZmbGluZShhcmcpOworCQlicmVhazsKKwljYXNlIE1FTV9PRkZMSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PRkZMSU5FOgorCQltdXRleF91bmxvY2soJmhvdHBsdWdfbXV0ZXgpOworCQljbW1fZGJnKCJNZW1vcnkgb2ZmbGluZSBvcGVyYXRpb24gY29tcGxldGUuXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fR09JTkdfT05MSU5FOgorCWNhc2UgTUVNX09OTElORToKKwljYXNlIE1FTV9DQU5DRUxfT05MSU5FOgorCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7CisJZWxzZQorCQlyZXQgPSBOT1RJRllfT0s7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNtbV9tZW1fbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjbW1fbWVtb3J5X2NiLAorCS5wcmlvcml0eSA9IENNTV9NRU1fSE9UUExVR19QUkkKK307CisKKy8qKgogICogY21tX2luaXQgLSBNb2R1bGUgaW5pdGlhbGl6YXRpb24KICAqCiAgKiBSZXR1cm4gdmFsdWU6CkBAIC00MjYsMTggKzY2OSwyNCBAQAogCWlmICgocmMgPSBjbW1fc3lzZnNfcmVnaXN0ZXIoJmNtbV9zeXNkZXYpKSkKIAkJZ290byBvdXRfcmVib290X25vdGlmaWVyOwogCisJaWYgKHJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcigmY21tX21lbV9uYikgfHwKKwkgICAgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoJmNtbV9tZW1faXNvbGF0ZV9uYikpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfbm90aWZpZXI7CisKIAlpZiAoY21tX2Rpc2FibGVkKQogCQlyZXR1cm4gcmM7CiAKIAljbW1fdGhyZWFkX3B0ciA9IGt0aHJlYWRfcnVuKGNtbV90aHJlYWQsIE5VTEwsICJjbW10aHJlYWQiKTsKIAlpZiAoSVNfRVJSKGNtbV90aHJlYWRfcHRyKSkgewogCQlyYyA9IFBUUl9FUlIoY21tX3RocmVhZF9wdHIpOwotCQlnb3RvIG91dF91bnJlZ2lzdGVyX3N5c2ZzOworCQlnb3RvIG91dF91bnJlZ2lzdGVyX25vdGlmaWVyOwogCX0KIAogCXJldHVybiByYzsKIAotb3V0X3VucmVnaXN0ZXJfc3lzZnM6CitvdXRfdW5yZWdpc3Rlcl9ub3RpZmllcjoKKwl1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcigmY21tX21lbV9uYik7CisJdW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcigmY21tX21lbV9pc29sYXRlX25iKTsKIAljbW1fdW5yZWdpc3Rlcl9zeXNmcygmY21tX3N5c2Rldik7CiBvdXRfcmVib290X25vdGlmaWVyOgogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZjbW1fcmVib290X25iKTsKQEAgLTQ1OCw2ICs3MDcsOCBAQAogCQlrdGhyZWFkX3N0b3AoY21tX3RocmVhZF9wdHIpOwogCXVucmVnaXN0ZXJfb29tX25vdGlmaWVyKCZjbW1fb29tX25iKTsKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmY21tX3JlYm9vdF9uYik7CisJdW5yZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmNtbV9tZW1fbmIpOworCXVucmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoJmNtbV9tZW1faXNvbGF0ZV9uYik7CiAJY21tX2ZyZWVfcGFnZXMobG9hbmVkX3BhZ2VzKTsKIAljbW1fdW5yZWdpc3Rlcl9zeXNmcygmY21tX3N5c2Rldik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjdhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwpAQCAtMCwwICsxLDU2MCBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGZvciBQQ0ksIE1lbW9yeSwgYW5kIENQVQorICogSG90cGx1ZyBhbmQgRHluYW1pYyBMb2dpY2FsIFBhcnRpdGlvbmluZyBvbiBSUEEgcGxhdGZvcm1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOYXRoYW4gRm9udGVub3QKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlICJvZmZsaW5lX3N0YXRlcy5oIgorCisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKyNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgorCitzdHJ1Y3QgY2Nfd29ya2FyZWEgeworCXUzMglkcmNfaW5kZXg7CisJdTMyCXplcm87CisJdTMyCW5hbWVfb2Zmc2V0OworCXUzMglwcm9wX2xlbmd0aDsKKwl1MzIJcHJvcF9vZmZzZXQ7Cit9OworCitzdGF0aWMgdm9pZCBkbHBhcl9mcmVlX2NjX3Byb3BlcnR5KHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlrZnJlZShwcm9wLT5uYW1lKTsKKwlrZnJlZShwcm9wLT52YWx1ZSk7CisJa2ZyZWUocHJvcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKmRscGFyX3BhcnNlX2NjX3Byb3BlcnR5KHN0cnVjdCBjY193b3JrYXJlYSAqY2N3YSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKworCXByb3AgPSBremFsbG9jKHNpemVvZigqcHJvcCksIEdGUF9LRVJORUwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuIE5VTEw7CisKKwluYW1lID0gKGNoYXIgKiljY3dhICsgY2N3YS0+bmFtZV9vZmZzZXQ7CisJcHJvcC0+bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CisKKwlwcm9wLT5sZW5ndGggPSBjY3dhLT5wcm9wX2xlbmd0aDsKKwl2YWx1ZSA9IChjaGFyICopY2N3YSArIGNjd2EtPnByb3Bfb2Zmc2V0OworCXByb3AtPnZhbHVlID0ga3phbGxvYyhwcm9wLT5sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghcHJvcC0+dmFsdWUpIHsKKwkJZGxwYXJfZnJlZV9jY19wcm9wZXJ0eShwcm9wKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtY3B5KHByb3AtPnZhbHVlLCB2YWx1ZSwgcHJvcC0+bGVuZ3RoKTsKKwlyZXR1cm4gcHJvcDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGxwYXJfcGFyc2VfY2Nfbm9kZShzdHJ1Y3QgY2Nfd29ya2FyZWEgKmNjd2EpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwljaGFyICpuYW1lOworCisJZG4gPSBremFsbG9jKHNpemVvZigqZG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFRoZSBjb25maWd1cmUgY29ubmVjdG9yIHJlcG9ydGVkIG5hbWUgZG9lcyBub3QgY29udGFpbiBhCisJICogcHJlY2VlZGluZyAnLycsIHNvIHdlIGFsbG9jYXRlIGEgYnVmZmVyIGxhcmdlIGVub3VnaCB0bworCSAqIHByZXBlbmQgdGhpcyB0byB0aGUgZnVsbF9uYW1lLgorCSAqLworCW5hbWUgPSAoY2hhciAqKWNjd2EgKyBjY3dhLT5uYW1lX29mZnNldDsKKwlkbi0+ZnVsbF9uYW1lID0ga21hbGxvYyhzdHJsZW4obmFtZSkgKyAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRuLT5mdWxsX25hbWUpIHsKKwkJa2ZyZWUoZG4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzcHJpbnRmKGRuLT5mdWxsX25hbWUsICIvJXMiLCBuYW1lKTsKKwlyZXR1cm4gZG47Cit9CisKK3N0YXRpYyB2b2lkIGRscGFyX2ZyZWVfb25lX2NjX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwl3aGlsZSAoZG4tPnByb3BlcnRpZXMpIHsKKwkJcHJvcCA9IGRuLT5wcm9wZXJ0aWVzOworCQlkbi0+cHJvcGVydGllcyA9IHByb3AtPm5leHQ7CisJCWRscGFyX2ZyZWVfY2NfcHJvcGVydHkocHJvcCk7CisJfQorCisJa2ZyZWUoZG4tPmZ1bGxfbmFtZSk7CisJa2ZyZWUoZG4pOworfQorCitzdGF0aWMgdm9pZCBkbHBhcl9mcmVlX2NjX25vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJaWYgKGRuLT5jaGlsZCkKKwkJZGxwYXJfZnJlZV9jY19ub2Rlcyhkbi0+Y2hpbGQpOworCisJaWYgKGRuLT5zaWJsaW5nKQorCQlkbHBhcl9mcmVlX2NjX25vZGVzKGRuLT5zaWJsaW5nKTsKKworCWRscGFyX2ZyZWVfb25lX2NjX25vZGUoZG4pOworfQorCisjZGVmaW5lIE5FWFRfU0lCTElORyAgICAxCisjZGVmaW5lIE5FWFRfQ0hJTEQgICAgICAyCisjZGVmaW5lIE5FWFRfUFJPUEVSVFkgICAzCisjZGVmaW5lIFBSRVZfUEFSRU5UICAgICA0CisjZGVmaW5lIE1PUkVfTUVNT1JZICAgICA1CisjZGVmaW5lIENBTExfQUdBSU4JLTIKKyNkZWZpbmUgRVJSX0NGR19VU0UgICAgIC05MDAzCisKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqZGxwYXJfY29uZmlndXJlX2Nvbm5lY3Rvcih1MzIgZHJjX2luZGV4KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IGRldmljZV9ub2RlICpmaXJzdF9kbiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9ub2RlICpsYXN0X2RuID0gTlVMTDsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3BlcnR5OworCXN0cnVjdCBwcm9wZXJ0eSAqbGFzdF9wcm9wZXJ0eSA9IE5VTEw7CisJc3RydWN0IGNjX3dvcmthcmVhICpjY3dhOworCWludCBjY190b2tlbjsKKwlpbnQgcmM7CisKKwljY190b2tlbiA9IHJ0YXNfdG9rZW4oImlibSxjb25maWd1cmUtY29ubmVjdG9yIik7CisJaWYgKGNjX3Rva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQorCQlyZXR1cm4gTlVMTDsKKworCXNwaW5fbG9jaygmcnRhc19kYXRhX2J1Zl9sb2NrKTsKKwljY3dhID0gKHN0cnVjdCBjY193b3JrYXJlYSAqKSZydGFzX2RhdGFfYnVmWzBdOworCWNjd2EtPmRyY19pbmRleCA9IGRyY19pbmRleDsKKwljY3dhLT56ZXJvID0gMDsKKworCXJjID0gcnRhc19jYWxsKGNjX3Rva2VuLCAyLCAxLCBOVUxMLCBydGFzX2RhdGFfYnVmLCBOVUxMKTsKKwl3aGlsZSAocmMpIHsKKwkJc3dpdGNoIChyYykgeworCQljYXNlIE5FWFRfU0lCTElORzoKKwkJCWRuID0gZGxwYXJfcGFyc2VfY2Nfbm9kZShjY3dhKTsKKwkJCWlmICghZG4pCisJCQkJZ290byBjY19lcnJvcjsKKworCQkJZG4tPnBhcmVudCA9IGxhc3RfZG4tPnBhcmVudDsKKwkJCWxhc3RfZG4tPnNpYmxpbmcgPSBkbjsKKwkJCWxhc3RfZG4gPSBkbjsKKwkJCWJyZWFrOworCisJCWNhc2UgTkVYVF9DSElMRDoKKwkJCWRuID0gZGxwYXJfcGFyc2VfY2Nfbm9kZShjY3dhKTsKKwkJCWlmICghZG4pCisJCQkJZ290byBjY19lcnJvcjsKKworCQkJaWYgKCFmaXJzdF9kbikKKwkJCQlmaXJzdF9kbiA9IGRuOworCQkJZWxzZSB7CisJCQkJZG4tPnBhcmVudCA9IGxhc3RfZG47CisJCQkJaWYgKGxhc3RfZG4pCisJCQkJCWxhc3RfZG4tPmNoaWxkID0gZG47CisJCQl9CisKKwkJCWxhc3RfZG4gPSBkbjsKKwkJCWJyZWFrOworCisJCWNhc2UgTkVYVF9QUk9QRVJUWToKKwkJCXByb3BlcnR5ID0gZGxwYXJfcGFyc2VfY2NfcHJvcGVydHkoY2N3YSk7CisJCQlpZiAoIXByb3BlcnR5KQorCQkJCWdvdG8gY2NfZXJyb3I7CisKKwkJCWlmICghbGFzdF9kbi0+cHJvcGVydGllcykKKwkJCQlsYXN0X2RuLT5wcm9wZXJ0aWVzID0gcHJvcGVydHk7CisJCQllbHNlCisJCQkJbGFzdF9wcm9wZXJ0eS0+bmV4dCA9IHByb3BlcnR5OworCisJCQlsYXN0X3Byb3BlcnR5ID0gcHJvcGVydHk7CisJCQlicmVhazsKKworCQljYXNlIFBSRVZfUEFSRU5UOgorCQkJbGFzdF9kbiA9IGxhc3RfZG4tPnBhcmVudDsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0FMTF9BR0FJTjoKKwkJCWJyZWFrOworCisJCWNhc2UgTU9SRV9NRU1PUlk6CisJCWNhc2UgRVJSX0NGR19VU0U6CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgRXJyb3IgKCVkKSAiCisJCQkgICAgICAgInJldHVybmVkIGZyb20gY29uZmlndXJlLWNvbm5lY3RvclxuIiwgcmMpOworCQkJZ290byBjY19lcnJvcjsKKwkJfQorCisJCXJjID0gcnRhc19jYWxsKGNjX3Rva2VuLCAyLCAxLCBOVUxMLCBydGFzX2RhdGFfYnVmLCBOVUxMKTsKKwl9CisKKwlzcGluX3VubG9jaygmcnRhc19kYXRhX2J1Zl9sb2NrKTsKKwlyZXR1cm4gZmlyc3RfZG47CisKK2NjX2Vycm9yOgorCWlmIChmaXJzdF9kbikKKwkJZGxwYXJfZnJlZV9jY19ub2RlcyhmaXJzdF9kbik7CisJc3Bpbl91bmxvY2soJnJ0YXNfZGF0YV9idWZfbG9jayk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRlcml2ZV9wYXJlbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKKwljaGFyICpsYXN0X3NsYXNoOworCisJbGFzdF9zbGFzaCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwlpZiAobGFzdF9zbGFzaCA9PSBwYXRoKSB7CisJCXBhcmVudCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJfSBlbHNlIHsKKwkJY2hhciAqcGFyZW50X3BhdGg7CisJCWludCBwYXJlbnRfcGF0aF9sZW4gPSBsYXN0X3NsYXNoIC0gcGF0aCArIDE7CisJCXBhcmVudF9wYXRoID0ga21hbGxvYyhwYXJlbnRfcGF0aF9sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoIXBhcmVudF9wYXRoKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3RybGNweShwYXJlbnRfcGF0aCwgcGF0aCwgcGFyZW50X3BhdGhfbGVuKTsKKwkJcGFyZW50ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgocGFyZW50X3BhdGgpOworCQlrZnJlZShwYXJlbnRfcGF0aCk7CisJfQorCisJcmV0dXJuIHBhcmVudDsKK30KKworaW50IGRscGFyX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisJaW50IHJjOworCisJb2Zfbm9kZV9zZXRfZmxhZyhkbiwgT0ZfRFlOQU1JQyk7CisJa3JlZl9pbml0KCZkbi0+a3JlZik7CisJZG4tPnBhcmVudCA9IGRlcml2ZV9wYXJlbnQoZG4tPmZ1bGxfbmFtZSk7CisJaWYgKCFkbi0+cGFyZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJjID0gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcFNlcmllc19yZWNvbmZpZ19jaGFpbiwKKwkJCQkJICBQU0VSSUVTX1JFQ09ORklHX0FERCwgZG4pOworCWlmIChyYyA9PSBOT1RJRllfQkFEKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFkZCBkZXZpY2Ugbm9kZSAlc1xuIiwKKwkJICAgICAgIGRuLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT01FTTsgLyogRm9yIG5vdywgc2FmZSB0byBhc3N1bWUga21hbGxvYyBmYWlsdXJlICovCisJfQorCisJb2ZfYXR0YWNoX25vZGUoZG4pOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCWVudCA9IHByb2NfbWtkaXIoc3RycmNocihkbi0+ZnVsbF9uYW1lLCAnLycpICsgMSwgZG4tPnBhcmVudC0+cGRlKTsKKwlpZiAoZW50KQorCQlwcm9jX2RldmljZV90cmVlX2FkZF9ub2RlKGRuLCBlbnQpOworI2VuZGlmCisKKwlvZl9ub2RlX3B1dChkbi0+cGFyZW50KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRscGFyX2RldGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBkbi0+cGFyZW50OworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IGRuLT5wcm9wZXJ0aWVzOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCXdoaWxlIChwcm9wKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHByb3AtPm5hbWUsIGRuLT5wZGUpOworCQlwcm9wID0gcHJvcC0+bmV4dDsKKwl9CisKKwlpZiAoZG4tPnBkZSkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoZG4tPnBkZS0+bmFtZSwgcGFyZW50LT5wZGUpOworI2VuZGlmCisKKwlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZwU2VyaWVzX3JlY29uZmlnX2NoYWluLAorCQkJICAgIFBTRVJJRVNfUkVDT05GSUdfUkVNT1ZFLCBkbik7CisJb2ZfZGV0YWNoX25vZGUoZG4pOworCW9mX25vZGVfcHV0KGRuKTsgLyogTXVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50ICovCisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBEUl9FTlRJVFlfU0VOU0UJCTkwMDMKKyNkZWZpbmUgRFJfRU5USVRZX1BSRVNFTlQJMQorI2RlZmluZSBEUl9FTlRJVFlfVU5VU0FCTEUJMgorI2RlZmluZSBBTExPQ0FUSU9OX1NUQVRFCTkwMDMKKyNkZWZpbmUgQUxMT0NfVU5VU0FCTEUJCTAKKyNkZWZpbmUgQUxMT0NfVVNBQkxFCQkxCisjZGVmaW5lIElTT0xBVElPTl9TVEFURQkJOTAwMQorI2RlZmluZSBJU09MQVRFCQkJMAorI2RlZmluZSBVTklTT0xBVEUJCTEKKworaW50IGRscGFyX2FjcXVpcmVfZHJjKHUzMiBkcmNfaW5kZXgpCit7CisJaW50IGRyX3N0YXR1cywgcmM7CisKKwlyYyA9IHJ0YXNfY2FsbChydGFzX3Rva2VuKCJnZXQtc2Vuc29yLXN0YXRlIiksIDIsIDIsICZkcl9zdGF0dXMsCisJCSAgICAgICBEUl9FTlRJVFlfU0VOU0UsIGRyY19pbmRleCk7CisJaWYgKHJjIHx8IGRyX3N0YXR1cyAhPSBEUl9FTlRJVFlfVU5VU0FCTEUpCisJCXJldHVybiAtMTsKKworCXJjID0gcnRhc19zZXRfaW5kaWNhdG9yKEFMTE9DQVRJT05fU1RBVEUsIGRyY19pbmRleCwgQUxMT0NfVVNBQkxFKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcnRhc19zZXRfaW5kaWNhdG9yKElTT0xBVElPTl9TVEFURSwgZHJjX2luZGV4LCBVTklTT0xBVEUpOworCWlmIChyYykgeworCQlydGFzX3NldF9pbmRpY2F0b3IoQUxMT0NBVElPTl9TVEFURSwgZHJjX2luZGV4LCBBTExPQ19VTlVTQUJMRSk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRscGFyX3JlbGVhc2VfZHJjKHUzMiBkcmNfaW5kZXgpCit7CisJaW50IGRyX3N0YXR1cywgcmM7CisKKwlyYyA9IHJ0YXNfY2FsbChydGFzX3Rva2VuKCJnZXQtc2Vuc29yLXN0YXRlIiksIDIsIDIsICZkcl9zdGF0dXMsCisJCSAgICAgICBEUl9FTlRJVFlfU0VOU0UsIGRyY19pbmRleCk7CisJaWYgKHJjIHx8IGRyX3N0YXR1cyAhPSBEUl9FTlRJVFlfUFJFU0VOVCkKKwkJcmV0dXJuIC0xOworCisJcmMgPSBydGFzX3NldF9pbmRpY2F0b3IoSVNPTEFUSU9OX1NUQVRFLCBkcmNfaW5kZXgsIElTT0xBVEUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBydGFzX3NldF9pbmRpY2F0b3IoQUxMT0NBVElPTl9TVEFURSwgZHJjX2luZGV4LCBBTExPQ19VTlVTQUJMRSk7CisJaWYgKHJjKSB7CisJCXJ0YXNfc2V0X2luZGljYXRvcihJU09MQVRJT05fU1RBVEUsIGRyY19pbmRleCwgVU5JU09MQVRFKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfQ1BVX1BST0JFX1JFTEVBU0UKKworc3RhdGljIERFRklORV9NVVRFWChwc2VyaWVzX2NwdV9ob3RwbHVnX211dGV4KTsKKwordm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfbG9jayh2b2lkKQorX19hY3F1aXJlcyhwc2VyaWVzX2NwdV9ob3RwbHVnX211dGV4KQoreworCW11dGV4X2xvY2soJnBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpOworfQorCit2b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl91bmxvY2sodm9pZCkKK19fcmVsZWFzZXMocHNlcmllc19jcHVfaG90cGx1Z19tdXRleCkKK3sKKwltdXRleF91bmxvY2soJnBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IGRscGFyX29ubGluZV9jcHUoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3sKKwlpbnQgcmMgPSAwOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGxlbiwgbnRocmVhZHMsIGk7CisJY29uc3QgdTMyICppbnRzZXJ2OworCisJaW50c2VydiA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7CisJaWYgKCFpbnRzZXJ2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW50aHJlYWRzID0gbGVuIC8gc2l6ZW9mKHUzMik7CisKKwljcHVfbWFwc191cGRhdGVfYmVnaW4oKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykgeworCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJCWlmIChnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSkgIT0gaW50c2VydltpXSkKKwkJCQljb250aW51ZTsKKwkJCUJVR19PTihnZXRfY3B1X2N1cnJlbnRfc3RhdGUoY3B1KQorCQkJCQkhPSBDUFVfU1RBVEVfT0ZGTElORSk7CisJCQljcHVfbWFwc191cGRhdGVfZG9uZSgpOworCQkJcmMgPSBjcHVfdXAoY3B1KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIG91dDsKKwkJCWNwdV9tYXBzX3VwZGF0ZV9iZWdpbigpOworCisJCQlicmVhazsKKwkJfQorCQlpZiAoY3B1ID09IG51bV9wb3NzaWJsZV9jcHVzKCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgZmluZCBjcHUgdG8gb25saW5lICIKKwkJCSAgICAgICAid2l0aCBwaHlzaWNhbCBpZCAweCV4XG4iLCBpbnRzZXJ2W2ldKTsKKwl9CisJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKKworb3V0OgorCXJldHVybiByYzsKKworfQorCitzdGF0aWMgc3NpemVfdCBkbHBhcl9jcHVfcHJvYmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwl1bnNpZ25lZCBsb25nIGRyY19pbmRleDsKKwljaGFyICpjcHVfbmFtZTsKKwlpbnQgcmM7CisKKwljcHVfaG90cGx1Z19kcml2ZXJfbG9jaygpOworCXJjID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZHJjX2luZGV4KTsKKwlpZiAocmMpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlkbiA9IGRscGFyX2NvbmZpZ3VyZV9jb25uZWN0b3IoZHJjX2luZGV4KTsKKwlpZiAoIWRuKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY29uZmlndXJlLWNvbm5lY3RvciByZXBvcnRzIGNwdXMgYXMgbGl2aW5nIGluIHRoZSBiYXNlCisJICogZGlyZWN0b3J5IG9mIHRoZSBkZXZpY2UgdHJlZS4gIENQVXMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUKKwkgKiBjcHVzIGRpcmVjdG9yeSBzbyB3ZSBuZWVkIHRvIGZpeHVwIHRoZSBmdWxsX25hbWUuCisJICovCisJY3B1X25hbWUgPSBremFsbG9jKHN0cmxlbihkbi0+ZnVsbF9uYW1lKSArIHN0cmxlbigiL2NwdXMiKSArIDEsCisJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNwdV9uYW1lKSB7CisJCWRscGFyX2ZyZWVfY2Nfbm9kZXMoZG4pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXNwcmludGYoY3B1X25hbWUsICIvY3B1cyVzIiwgZG4tPmZ1bGxfbmFtZSk7CisJa2ZyZWUoZG4tPmZ1bGxfbmFtZSk7CisJZG4tPmZ1bGxfbmFtZSA9IGNwdV9uYW1lOworCisJcmMgPSBkbHBhcl9hY3F1aXJlX2RyYyhkcmNfaW5kZXgpOworCWlmIChyYykgeworCQlkbHBhcl9mcmVlX2NjX25vZGVzKGRuKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IGRscGFyX2F0dGFjaF9ub2RlKGRuKTsKKwlpZiAocmMpIHsKKwkJZGxwYXJfcmVsZWFzZV9kcmMoZHJjX2luZGV4KTsKKwkJZGxwYXJfZnJlZV9jY19ub2Rlcyhkbik7CisJfQorCisJcmMgPSBkbHBhcl9vbmxpbmVfY3B1KGRuKTsKK291dDoKKwljcHVfaG90cGx1Z19kcml2ZXJfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmMgPyByYyA6IGNvdW50OworfQorCitzdGF0aWMgaW50IGRscGFyX29mZmxpbmVfY3B1KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCWludCBsZW4sIG50aHJlYWRzLCBpOworCWNvbnN0IHUzMiAqaW50c2VydjsKKworCWludHNlcnYgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIsICZsZW4pOworCWlmICghaW50c2VydikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwludGhyZWFkcyA9IGxlbiAvIHNpemVvZih1MzIpOworCisJY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7CisJZm9yIChpID0gMDsgaSA8IG50aHJlYWRzOyBpKyspIHsKKwkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CisJCQlpZiAoZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpICE9IGludHNlcnZbaV0pCisJCQkJY29udGludWU7CisKKwkJCWlmIChnZXRfY3B1X2N1cnJlbnRfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfT0ZGTElORSkKKwkJCQlicmVhazsKKworCQkJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShjcHUpID09IENQVV9TVEFURV9PTkxJTkUpIHsKKwkJCQljcHVfbWFwc191cGRhdGVfZG9uZSgpOworCQkJCXJjID0gY3B1X2Rvd24oY3B1KTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gb3V0OworCQkJCWNwdV9tYXBzX3VwZGF0ZV9iZWdpbigpOworCQkJCWJyZWFrOworCisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGUgY3B1IGlzIGluIENQVV9TVEFURV9JTkFDVElWRS4KKwkJCSAqIFVwZ3JhZGUgaXQncyBzdGF0ZSB0byBDUFVfU1RBVEVfT0ZGTElORS4KKwkJCSAqLworCQkJc2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGNwdSwgQ1BVX1NUQVRFX09GRkxJTkUpOworCQkJQlVHX09OKHBscGFyX2hjYWxsX25vcmV0cyhIX1BST0QsIGludHNlcnZbaV0pCisJCQkJCQkJCSE9IEhfU1VDQ0VTUyk7CisJCQlfX2NwdV9kaWUoY3B1KTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjcHUgPT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvdWxkIG5vdCBmaW5kIGNwdSB0byBvZmZsaW5lICIKKwkJCSAgICAgICAid2l0aCBwaHlzaWNhbCBpZCAweCV4XG4iLCBpbnRzZXJ2W2ldKTsKKwl9CisJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKKworb3V0OgorCXJldHVybiByYzsKKworfQorCitzdGF0aWMgc3NpemVfdCBkbHBhcl9jcHVfcmVsZWFzZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCWNvbnN0IHUzMiAqZHJjX2luZGV4OworCWludCByYzsKKworCWRuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoYnVmKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRyY19pbmRleCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxteS1kcmMtaW5kZXgiLCBOVUxMKTsKKwlpZiAoIWRyY19pbmRleCkgeworCQlvZl9ub2RlX3B1dChkbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNwdV9ob3RwbHVnX2RyaXZlcl9sb2NrKCk7CisJcmMgPSBkbHBhcl9vZmZsaW5lX2NwdShkbik7CisJaWYgKHJjKSB7CisJCW9mX25vZGVfcHV0KGRuKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IGRscGFyX3JlbGVhc2VfZHJjKCpkcmNfaW5kZXgpOworCWlmIChyYykgeworCQlvZl9ub2RlX3B1dChkbik7CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gZGxwYXJfZGV0YWNoX25vZGUoZG4pOworCWlmIChyYykgeworCQlkbHBhcl9hY3F1aXJlX2RyYygqZHJjX2luZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCisJb2Zfbm9kZV9wdXQoZG4pOworb3V0OgorCWNwdV9ob3RwbHVnX2RyaXZlcl91bmxvY2soKTsKKwlyZXR1cm4gcmMgPyByYyA6IGNvdW50OworfQorCitzdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX2RscGFyX2luaXQodm9pZCkKK3sKKwlwcGNfbWQuY3B1X3Byb2JlID0gZGxwYXJfY3B1X3Byb2JlOworCXBwY19tZC5jcHVfcmVsZWFzZSA9IGRscGFyX2NwdV9yZWxlYXNlOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChwc2VyaWVzLCBwc2VyaWVzX2RscGFyX2luaXQpOworCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfQ1BVX1BST0JFX1JFTEVBU0UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwppbmRleCA5MzdhNTQ0Li5jNWYzMTE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCkBAIC01NCw3ICs1NCw3IEBACiAJaW50CQkJYnVmX2VudHJpZXM7CiAJdTY0CQkJbGFzdF9pZHg7CiB9Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkdGwsIGR0bCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGR0bCwgY3B1X2R0bCk7CiAKIC8qCiAgKiBEaXNwYXRjaCB0cmFjZSBsb2cgZXZlbnQgbWFzazoKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiAJLyogc2V0IHVwIHRoZSBwZXItY3B1IGxvZyBzdHJ1Y3R1cmVzICovCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc3RydWN0IGR0bCAqZHRsID0gJnBlcl9jcHUoZHRsLCBpKTsKKwkJc3RydWN0IGR0bCAqZHRsID0gJnBlcl9jcHUoY3B1X2R0bCwgaSk7CiAJCWR0bC0+Y3B1ID0gaTsKIAogCQlyYyA9IGR0bF9zZXR1cF9maWxlKGR0bCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwppbmRleCAwZThkYjY3Li5lZjhlNDU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKQEAgLTYzLDIyICs2Myw2IEBACiB9CiAjZW5kaWYKIAotLyoqIAotICogaXJxX2luX3VzZSAtIHJldHVybiB0cnVlIGlmIHRoaXMgaXJxIGlzIGJlaW5nIHVzZWQgCi0gKi8KLXN0YXRpYyBpbnQgaXJxX2luX3VzZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQlpZiAoZGVzYy0+YWN0aW9uKQotCQlyYyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLX0KLQogLyoqCiAgKiBlZWhfZGlzYWJsZV9pcnEgLSBkaXNhYmxlIGludGVycnVwdCBmb3IgdGhlIHJlY292ZXJpbmcgZGV2aWNlCiAgKi8KQEAgLTkzLDcgKzc3LDcgQEAKIAlpZiAoZGV2LT5tc2lfZW5hYmxlZCB8fCBkZXYtPm1zaXhfZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0JaWYgKCFpcnFfaW5fdXNlKGRldi0+aXJxKSkKKwlpZiAoIWlycV9oYXNfYWN0aW9uKGRldi0+aXJxKSkKIAkJcmV0dXJuOwogCiAJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVJRX0RJU0FCTEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYwppbmRleCBlYmZmNmQ5Li42ZWE0Njk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9wU2VyaWVzX3JlY29uZmlnLmg+CiAjaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCisjaW5jbHVkZSAib2ZmbGluZV9zdGF0ZXMuaCIKIAogLyogVGhpcyB2ZXJzaW9uIGNhbid0IHRha2UgdGhlIHNwaW5sb2NrLCBiZWNhdXNlIGl0IG5ldmVyIHJldHVybnMgKi8KIHN0YXRpYyBzdHJ1Y3QgcnRhc19hcmdzIHJ0YXNfc3RvcF9zZWxmX2FyZ3MgPSB7CkBAIC0zOSw2ICs0MCw1NSBAQAogCS5yZXRzID0gJnJ0YXNfc3RvcF9zZWxmX2FyZ3MuYXJnc1swXSwKIH07CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShlbnVtIGNwdV9zdGF0ZV92YWxzLCBwcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZSkgPQorCQkJCQkJCUNQVV9TVEFURV9PRkZMSU5FOworc3RhdGljIERFRklORV9QRVJfQ1BVKGVudW0gY3B1X3N0YXRlX3ZhbHMsIGN1cnJlbnRfc3RhdGUpID0gQ1BVX1NUQVRFX09GRkxJTkU7CisKK3N0YXRpYyBlbnVtIGNwdV9zdGF0ZV92YWxzIGRlZmF1bHRfb2ZmbGluZV9zdGF0ZSA9IENQVV9TVEFURV9PRkZMSU5FOworCitzdGF0aWMgaW50IGNlZGVfb2ZmbGluZV9lbmFibGVkIF9fcmVhZF9tb3N0bHkgPSAxOworCisvKgorICogRW5hYmxlL2Rpc2FibGUgY2VkZV9vZmZsaW5lIHdoZW4gYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9jZWRlX29mZmxpbmUoY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgIm9mZiIpKQorCQljZWRlX29mZmxpbmVfZW5hYmxlZCA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJvbiIpKQorCQljZWRlX29mZmxpbmVfZW5hYmxlZCA9IDE7CisJZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiY2VkZV9vZmZsaW5lPSIsIHNldHVwX2NlZGVfb2ZmbGluZSk7CisKK2VudW0gY3B1X3N0YXRlX3ZhbHMgZ2V0X2NwdV9jdXJyZW50X3N0YXRlKGludCBjcHUpCit7CisJcmV0dXJuIHBlcl9jcHUoY3VycmVudF9zdGF0ZSwgY3B1KTsKK30KKwordm9pZCBzZXRfY3B1X2N1cnJlbnRfc3RhdGUoaW50IGNwdSwgZW51bSBjcHVfc3RhdGVfdmFscyBzdGF0ZSkKK3sKKwlwZXJfY3B1KGN1cnJlbnRfc3RhdGUsIGNwdSkgPSBzdGF0ZTsKK30KKworZW51bSBjcHVfc3RhdGVfdmFscyBnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoaW50IGNwdSkKK3sKKwlyZXR1cm4gcGVyX2NwdShwcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZSwgY3B1KTsKK30KKwordm9pZCBzZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoaW50IGNwdSwgZW51bSBjcHVfc3RhdGVfdmFscyBzdGF0ZSkKK3sKKwlwZXJfY3B1KHByZWZlcnJlZF9vZmZsaW5lX3N0YXRlLCBjcHUpID0gc3RhdGU7Cit9CisKK3ZvaWQgc2V0X2RlZmF1bHRfb2ZmbGluZV9zdGF0ZShpbnQgY3B1KQoreworCXBlcl9jcHUocHJlZmVycmVkX29mZmxpbmVfc3RhdGUsIGNwdSkgPSBkZWZhdWx0X29mZmxpbmVfc3RhdGU7Cit9CisKIHN0YXRpYyB2b2lkIHJ0YXNfc3RvcF9zZWxmKHZvaWQpCiB7CiAJc3RydWN0IHJ0YXNfYXJncyAqYXJncyA9ICZydGFzX3N0b3Bfc2VsZl9hcmdzOwpAQCAtNTYsMTEgKzEwNiw2MSBAQAogCiBzdGF0aWMgdm9pZCBwc2VyaWVzX21hY2hfY3B1X2RpZSh2b2lkKQogeworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IGh3Y3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdTggY2VkZV9sYXRlbmN5X2hpbnQgPSAwOworCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlpZGxlX3Rhc2tfZXhpdCgpOwogCXhpY3NfdGVhcmRvd25fY3B1KCk7Ci0JdW5yZWdpc3Rlcl9zbGJfc2hhZG93KGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX3BhKGdldF9zbGJfc2hhZG93KCkpKTsKLQlydGFzX3N0b3Bfc2VsZigpOworCisJaWYgKGdldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShjcHUpID09IENQVV9TVEFURV9JTkFDVElWRSkgeworCQlzZXRfY3B1X2N1cnJlbnRfc3RhdGUoY3B1LCBDUFVfU1RBVEVfSU5BQ1RJVkUpOworCQljZWRlX2xhdGVuY3lfaGludCA9IDI7CisKKwkJZ2V0X2xwcGFjYSgpLT5pZGxlID0gMTsKKwkJaWYgKCFnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKQorCQkJZ2V0X2xwcGFjYSgpLT5kb25hdGVfZGVkaWNhdGVkX2NwdSA9IDE7CisKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImNwdSAldSAoaHdpZCAldSkgY2VkaW5nIGZvciBvZmZsaW5lIHdpdGggaGludCAlZFxuIiwKKwkJCWNwdSwgaHdjcHUsIGNlZGVfbGF0ZW5jeV9oaW50KTsKKwkJd2hpbGUgKGdldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShjcHUpID09IENQVV9TVEFURV9JTkFDVElWRSkgeworCQkJZXh0ZW5kZWRfY2VkZV9wcm9jZXNzb3IoY2VkZV9sYXRlbmN5X2hpbnQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3B1ICV1IChod2lkICV1KSByZXR1cm5lZCBmcm9tIGNlZGUuXG4iLAorCQkJCWNwdSwgaHdjcHUpOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkRlY3JlbWVudGVyIHZhbHVlID0gJXggVGltZWJhc2UgdmFsdWUgPSAlbGx4XG4iLAorCQkJZ2V0X2RlYygpLCBnZXRfdGIoKSk7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICJjcHUgJXUgKGh3aWQgJXUpIGdvdCBwcm9kZGVkIHRvIGdvIG9ubGluZVxuIiwKKwkJCWNwdSwgaHdjcHUpOworCisJCWlmICghZ2V0X2xwcGFjYSgpLT5zaGFyZWRfcHJvYykKKwkJCWdldF9scHBhY2EoKS0+ZG9uYXRlX2RlZGljYXRlZF9jcHUgPSAwOworCQlnZXRfbHBwYWNhKCktPmlkbGUgPSAwOworCX0KKworCWlmIChnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfT05MSU5FKSB7CisJCXVucmVnaXN0ZXJfc2xiX3NoYWRvdyhod2NwdSwgX19wYShnZXRfc2xiX3NoYWRvdygpKSk7CisKKwkJLyoKKwkJICogTk9URTogQ2FsbGluZyBzdGFydF9zZWNvbmRhcnkoKSBoZXJlIGZvciBub3cgdG8KKwkJICogc3RhcnQgbmV3IGNvbnRleHQuCisJCSAqIEhvd2V2ZXIsIG5lZWQgdG8gZG8gaXQgY2xlYW5seSBieSByZXNldHRpbmcgdGhlCisJCSAqIHN0YWNrIHBvaW50ZXIuCisJCSAqLworCQlzdGFydF9zZWNvbmRhcnkoKTsKKworCX0gZWxzZSBpZiAoZ2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGNwdSkgPT0gQ1BVX1NUQVRFX09GRkxJTkUpIHsKKworCQlzZXRfY3B1X2N1cnJlbnRfc3RhdGUoY3B1LCBDUFVfU1RBVEVfT0ZGTElORSk7CisJCXVucmVnaXN0ZXJfc2xiX3NoYWRvdyhoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwKKwkJCQkJX19wYShnZXRfc2xiX3NoYWRvdygpKSk7CisJCXJ0YXNfc3RvcF9zZWxmKCk7CisJfQorCiAJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCiAJQlVHKCk7CiAJZm9yKDs7KTsKQEAgLTEwNiwxOCArMjA2LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBwc2VyaWVzX2NwdV9kaWU6IFdhaXQgZm9yIHRoZSBjcHUgdG8gZGllLgorICogQGNwdTogbG9naWNhbCBwcm9jZXNzb3IgaWQgb2YgdGhlIENQVSB3aG9zZSBkZWF0aCB3ZSdyZSBhd2FpdGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSB0aHJlYWQgd2hpY2ggaXMgcGVyZm9ybWluZworICogdGhlIGNwdS1vZmZsaW5lLiBIZXJlIHdlIHdhaXQgZm9yIGxvbmcgZW5vdWdoIHRvIGFsbG93IHRoZSBjcHUgaW4gcXVlc3Rpb24KKyAqIHRvIHNlbGYtZGVzdHJveSBzbyB0aGF0IHRoZSBjcHUtb2ZmbGluZSB0aHJlYWQgY2FuIHNlbmQgdGhlIENQVV9ERUFECisgKiBub3RpZmljYXRpb25zLgorICoKKyAqIE9UT0gsIHBzZXJpZXNfbWFjaF9jcHVfZGllKCkgaXMgY2FsbGVkIGJ5IHRoZSBAY3B1IHdoZW4gaXQgd2FudHMgdG8KKyAqIHNlbGYtZGVzdHJ1Y3QuCisgKi8KIHN0YXRpYyB2b2lkIHBzZXJpZXNfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWludCB0cmllczsKLQlpbnQgY3B1X3N0YXR1czsKKwlpbnQgY3B1X3N0YXR1cyA9IDE7CiAJdW5zaWduZWQgaW50IHBjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CiAKLQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCAyNTsgdHJpZXMrKykgewotCQljcHVfc3RhdHVzID0gcXVlcnlfY3B1X3N0b3BwZWQocGNwdSk7Ci0JCWlmIChjcHVfc3RhdHVzID09IDAgfHwgY3B1X3N0YXR1cyA9PSAtMSkKLQkJCWJyZWFrOwotCQljcHVfcmVsYXgoKTsKKwlpZiAoZ2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGNwdSkgPT0gQ1BVX1NUQVRFX0lOQUNUSVZFKSB7CisJCWNwdV9zdGF0dXMgPSAxOworCQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCAxMDAwOyB0cmllcysrKSB7CisJCQlpZiAoZ2V0X2NwdV9jdXJyZW50X3N0YXRlKGNwdSkgPT0gQ1BVX1NUQVRFX0lOQUNUSVZFKSB7CisJCQkJY3B1X3N0YXR1cyA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQljcHVfcmVsYXgoKTsKKwkJfQorCX0gZWxzZSBpZiAoZ2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGNwdSkgPT0gQ1BVX1NUQVRFX09GRkxJTkUpIHsKKworCQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCAyNTsgdHJpZXMrKykgeworCQkJY3B1X3N0YXR1cyA9IHF1ZXJ5X2NwdV9zdG9wcGVkKHBjcHUpOworCQkJaWYgKGNwdV9zdGF0dXMgPT0gMCB8fCBjcHVfc3RhdHVzID09IC0xKQorCQkJCWJyZWFrOworCQkJY3B1X3JlbGF4KCk7CisJCX0KIAl9CisKIAlpZiAoY3B1X3N0YXR1cyAhPSAwKSB7CiAJCXByaW50aygiUXVlcnlpbmcgREVBRD8gY3B1ICVpICglaSkgc2hvd3MgJWlcbiIsCiAJCSAgICAgICBjcHUsIHBjcHUsIGNwdV9zdGF0dXMpOwpAQCAtMjUyLDEwICszNzcsNDEgQEAKIAkubm90aWZpZXJfY2FsbCA9IHBzZXJpZXNfc21wX25vdGlmaWVyLAogfTsKIAorI2RlZmluZSBNQVhfQ0VERV9MQVRFTkNZX0xFVkVMUwkJNAorI2RlZmluZQlDRURFX0xBVEVOQ1lfUEFSQU1fTEVOR1RICTEwCisjZGVmaW5lIENFREVfTEFURU5DWV9QQVJBTV9NQVhfTEVOR1RICVwKKwkoTUFYX0NFREVfTEFURU5DWV9MRVZFTFMgKiBDRURFX0xBVEVOQ1lfUEFSQU1fTEVOR1RIICogc2l6ZW9mKGNoYXIpKQorI2RlZmluZSBDRURFX0xBVEVOQ1lfVE9LRU4JCTQ1CisKK3N0YXRpYyBjaGFyIGNlZGVfcGFyYW1ldGVyc1tDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSF07CisKK3N0YXRpYyBpbnQgcGFyc2VfY2VkZV9wYXJhbWV0ZXJzKHZvaWQpCit7CisJaW50IGNhbGxfc3RhdHVzOworCisJbWVtc2V0KGNlZGVfcGFyYW1ldGVycywgMCwgQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOworCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAorCQkJCU5VTEwsCisJCQkJQ0VERV9MQVRFTkNZX1RPS0VOLAorCQkJCV9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKKwkJCQlDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7CisKKwlpZiAoY2FsbF9zdGF0dXMgIT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ0VERV9MQVRFTkNZOiBcCisJCQklcyAlcyBFcnJvciBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyKDB4JXgpXG4iLAorCQkJX19GSUxFX18sIF9fZnVuY19fLCBjYWxsX3N0YXR1cyk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJDRURFX0xBVEVOQ1k6IFwKKwkJCWdldC1zeXN0ZW0tcGFyYW1ldGVyIHN1Y2Nlc3NmdWwuXG4iKTsKKworCXJldHVybiBjYWxsX3N0YXR1czsKK30KKwogc3RhdGljIGludCBfX2luaXQgcHNlcmllc19jcHVfaG90cGx1Z19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAljb25zdCBjaGFyICp0eXBlcDsKKwlpbnQgY3B1OwogCiAJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKSB7CiAJCXR5cGVwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY29tcGF0aWJsZSIsIE5VTEwpOwpAQCAtMjgzLDggKzQzOSwxNiBAQAogCXNtcF9vcHMtPmNwdV9kaWUgPSBwc2VyaWVzX2NwdV9kaWU7CiAKIAkvKiBQcm9jZXNzb3JzIGNhbiBiZSBhZGRlZC9yZW1vdmVkIG9ubHkgb24gTFBBUiAqLwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKSB7CiAJCXBTZXJpZXNfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoJnBzZXJpZXNfc21wX25iKTsKKwkJY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7CisJCWlmIChjZWRlX29mZmxpbmVfZW5hYmxlZCAmJiBwYXJzZV9jZWRlX3BhcmFtZXRlcnMoKSA9PSAwKSB7CisJCQlkZWZhdWx0X29mZmxpbmVfc3RhdGUgPSBDUFVfU1RBVEVfSU5BQ1RJVkU7CisJCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJCQlzZXRfZGVmYXVsdF9vZmZsaW5lX3N0YXRlKGNwdSk7CisJCX0KKwkJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9vZmZsaW5lX3N0YXRlcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL29mZmxpbmVfc3RhdGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1NzRlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9vZmZsaW5lX3N0YXRlcy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX09GRkxJTkVfU1RBVEVTX0hfCisjZGVmaW5lIF9PRkZMSU5FX1NUQVRFU19IXworCisvKiBDcHUgb2ZmbGluZSBzdGF0ZXMgZ28gaGVyZSAqLworZW51bSBjcHVfc3RhdGVfdmFscyB7CisJQ1BVX1NUQVRFX09GRkxJTkUsCisJQ1BVX1NUQVRFX0lOQUNUSVZFLAorCUNQVV9TVEFURV9PTkxJTkUsCisJQ1BVX01BWF9PRkZMSU5FX1NUQVRFUworfTsKKworZXh0ZXJuIGVudW0gY3B1X3N0YXRlX3ZhbHMgZ2V0X2NwdV9jdXJyZW50X3N0YXRlKGludCBjcHUpOworZXh0ZXJuIHZvaWQgc2V0X2NwdV9jdXJyZW50X3N0YXRlKGludCBjcHUsIGVudW0gY3B1X3N0YXRlX3ZhbHMgc3RhdGUpOworZXh0ZXJuIGVudW0gY3B1X3N0YXRlX3ZhbHMgZ2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGludCBjcHUpOworZXh0ZXJuIHZvaWQgc2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGludCBjcHUsIGVudW0gY3B1X3N0YXRlX3ZhbHMgc3RhdGUpOworZXh0ZXJuIHZvaWQgc2V0X2RlZmF1bHRfb2ZmbGluZV9zdGF0ZShpbnQgY3B1KTsKK2V4dGVybiBpbnQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCmluZGV4IGEyNGE2YjIzLi4wNjAzYzkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaApAQCAtOSwxMSArOSwzMyBAQAogCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9QT0xMX1BFTkRJTkcpOwogfQogCitzdGF0aWMgaW5saW5lIHU4IGdldF9jZWRlX2xhdGVuY3lfaGludCh2b2lkKQoreworCXJldHVybiBnZXRfbHBwYWNhKCktPmdwcjVfZHdvcmQuZmllbGRzLmNlZGVfbGF0ZW5jeV9oaW50OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NlZGVfbGF0ZW5jeV9oaW50KHU4IGxhdGVuY3lfaGludCkKK3sKKwlnZXRfbHBwYWNhKCktPmdwcjVfZHdvcmQuZmllbGRzLmNlZGVfbGF0ZW5jeV9oaW50ID0gbGF0ZW5jeV9oaW50OworfQorCiBzdGF0aWMgaW5saW5lIGxvbmcgY2VkZV9wcm9jZXNzb3Iodm9pZCkKIHsKIAlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ0VERSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgbG9uZyBleHRlbmRlZF9jZWRlX3Byb2Nlc3Nvcih1bnNpZ25lZCBsb25nIGxhdGVuY3lfaGludCkKK3sKKwlsb25nIHJjOworCXU4IG9sZF9sYXRlbmN5X2hpbnQgPSBnZXRfY2VkZV9sYXRlbmN5X2hpbnQoKTsKKworCXNldF9jZWRlX2xhdGVuY3lfaGludChsYXRlbmN5X2hpbnQpOworCXJjID0gY2VkZV9wcm9jZXNzb3IoKTsKKwlzZXRfY2VkZV9sYXRlbmN5X2hpbnQob2xkX2xhdGVuY3lfaGludCk7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbmxpbmUgbG9uZyB2cGFfY2FsbCh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGNwdSwKIAkJdW5zaWduZWQgbG9uZyB2cGEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCmluZGV4IDJlMmJiZTEuLmEyMzA1ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCkBAIC05Niw3ICs5Niw3IEBACiAJcmV0dXJuIHBhcmVudDsKIH0KIAotc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocFNlcmllc19yZWNvbmZpZ19jaGFpbik7CitCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBTZXJpZXNfcmVjb25maWdfY2hhaW4pOwogCiBpbnQgcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewpAQCAtMTg0LDcgKzE4NCw3IEBACiB9CiAKIC8qCi0gKiAvcHJvYy9wcGM2NC9vZmR0IC0geXVja3kgYmluYXJ5IGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZworICogL3Byb2MvcG93ZXJwYy9vZmR0IC0geXVja3kgYmluYXJ5IGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZwogICogT0YgZGV2aWNlIG5vZGVzLiAgU2hvdWxkIGJlIGRlcHJlY2F0ZWQgYXMgc29vbiBhcyB3ZSBnZXQgYW4KICAqIGluLWtlcm5lbCB3cmFwcGVyIGZvciB0aGUgUlRBUyBpYm0sY29uZmlndXJlLWNvbm5lY3RvciBjYWxsLgogICovCkBAIC01NDMsNyArNTQzLDcgQEAKIAkud3JpdGUgPSBvZmR0X3dyaXRlCiB9OwogCi0vKiBjcmVhdGUgL3Byb2MvcHBjNjQvb2ZkdCB3cml0ZS1vbmx5IGJ5IHJvb3QgKi8KKy8qIGNyZWF0ZSAvcHJvYy9wb3dlcnBjL29mZHQgd3JpdGUtb25seSBieSByb290ICovCiBzdGF0aWMgaW50IHByb2NfcHBjNjRfY3JlYXRlX29mZHQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKQEAgLTU1MSw3ICs1NTEsNyBAQAogCWlmICghbWFjaGluZV9pcyhwc2VyaWVzKSkKIAkJcmV0dXJuIDA7CiAKLQllbnQgPSBwcm9jX2NyZWF0ZSgicHBjNjQvb2ZkdCIsIFNfSVdVU1IsIE5VTEwsICZvZmR0X2ZvcHMpOworCWVudCA9IHByb2NfY3JlYXRlKCJwb3dlcnBjL29mZHQiLCBTX0lXVVNSLCBOVUxMLCAmb2ZkdF9mb3BzKTsKIAlpZiAoZW50KQogCQllbnQtPnNpemUgPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2NiYWM4Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBhdS5pYm0uY29tPiwgSUJNCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBDb21tdW5pY2F0aW9uIHRvIHVzZXJzcGFjZSBiYXNlZCBvbiBrZXJuZWwvcHJpbnRrLmMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ydGFzLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vbnZyYW0uaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLQotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJ0YXNkX2xvZ19sb2NrKTsKLQotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJ0YXNfbG9nX3dhaXQpOwotCi1zdGF0aWMgY2hhciAqcnRhc19sb2dfYnVmOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRhc19sb2dfc3RhcnQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBydGFzX2xvZ19zaXplOwotCi1zdGF0aWMgaW50IHN1cnZlaWxsYW5jZV90aW1lb3V0ID0gLTE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJ0YXNfZXJyb3JfbG9nX21heDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heDsKLQotLyogUlRBUyBzZXJ2aWNlIHRva2VucyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBldmVudF9zY2FuOwotc3RhdGljIHVuc2lnbmVkIGludCBydGFzX2V2ZW50X3NjYW5fcmF0ZTsKLQotc3RhdGljIGludCBmdWxsX3J0YXNfbXNncyA9IDA7Ci0KLS8qIFN0b3AgbG9nZ2luZyB0byBudnJhbSBhZnRlciBmaXJzdCBmYXRhbCBlcnJvciAqLwotc3RhdGljIGludCBsb2dnaW5nX2VuYWJsZWQ7IC8qIFVudGlsIHdlIGluaXRpYWxpemUgZXZlcnl0aGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IGxvZ2dpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbnl0aGluZyAqLwotc3RhdGljIGludCBlcnJvcl9sb2dfY250OwotCi0vKgotICogU2luY2Ugd2UgdXNlIDMyIGJpdCBSVEFTLCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIG11c3QgYmUgYmVsb3cKLSAqIDRHIG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIEFsbG9jYXRlIHRoaXMgaW4gdGhlIGtlcm5lbCBkYXRhIGFuZAotICogbWFrZSBpdCBiaWcgZW5vdWdoLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBsb2dkYXRhW1JUQVNfRVJST1JfTE9HX01BWF07Ci0KLXN0YXRpYyBjaGFyICpydGFzX3R5cGVbXSA9IHsKLQkiVW5rbm93biIsICJSZXRyeSIsICJUQ0UgRXJyb3IiLCAiSW50ZXJuYWwgRGV2aWNlIEZhaWx1cmUiLAotCSJUaW1lb3V0IiwgIkRhdGEgUGFyaXR5IiwgIkFkZHJlc3MgUGFyaXR5IiwgIkNhY2hlIFBhcml0eSIsCi0JIkFkZHJlc3MgSW52YWxpZCIsICJFQ0MgVW5jb3JyZWN0ZWQiLCAiRUNDIENvcnJ1cHRlZCIsCi19OwotCi1zdGF0aWMgY2hhciAqcnRhc19ldmVudF90eXBlKGludCB0eXBlKQotewotCWlmICgodHlwZSA+IDApICYmICh0eXBlIDwgMTEpKQotCQlyZXR1cm4gcnRhc190eXBlW3R5cGVdOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgUlRBU19UWVBFX0VQT1c6Ci0JCQlyZXR1cm4gIkVQT1ciOwotCQljYXNlIFJUQVNfVFlQRV9QTEFURk9STToKLQkJCXJldHVybiAiUGxhdGZvcm0gRXJyb3IiOwotCQljYXNlIFJUQVNfVFlQRV9JTzoKLQkJCXJldHVybiAiSS9PIEV2ZW50IjsKLQkJY2FzZSBSVEFTX1RZUEVfSU5GTzoKLQkJCXJldHVybiAiUGxhdGZvcm0gSW5mb3JtYXRpb24gRXZlbnQiOwotCQljYXNlIFJUQVNfVFlQRV9ERUFMTE9DOgotCQkJcmV0dXJuICJSZXNvdXJjZSBEZWFsbG9jYXRpb24gRXZlbnQiOwotCQljYXNlIFJUQVNfVFlQRV9EVU1QOgotCQkJcmV0dXJuICJEdW1wIE5vdGlmaWNhdGlvbiBFdmVudCI7Ci0JfQotCi0JcmV0dXJuIHJ0YXNfdHlwZVswXTsKLX0KLQotLyogVG8gc2VlIHRoaXMgaW5mbywgZ3JlcCBSVEFTIC92YXIvbG9nL21lc3NhZ2VzIGFuZCBlYWNoIGVudHJ5Ci0gKiB3aWxsIGJlIGNvbGxlY3RlZCB0b2dldGhlciB3aXRoIG9idmlvdXMgYmVnaW4vZW5kLgotICogVGhlcmUgd2lsbCBiZSBhIHVuaXF1ZSBpZGVudGlmaWVyIG9uIHRoZSBiZWdpbiBhbmQgZW5kIGxpbmVzLgotICogVGhpcyB3aWxsIHBlcnNpc3QgYWNyb3NzIHJlYm9vdHMuCi0gKgotICogZm9ybWF0IG9mIGVycm9yIGxvZ3MgcmV0dXJuZWQgZnJvbSBSVEFTOgotICogYnl0ZXMJKHNpemUpCTogY29udGVudHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAwLTcJCSg4KQk6IHJ0YXNfZXJyb3JfbG9nCi0gKiA4LTQ3CQkoNDApCTogZXh0ZW5kZWQgaW5mbwotICogNDgtNTEJKDQpCTogdmVuZG9yIGlkCi0gKiA1Mi0xMDIzICh2ZW5kb3Igc3BlY2lmaWMpIDogbG9jYXRpb24gY29kZSBhbmQgZGVidWcgZGF0YQotICovCi1zdGF0aWMgdm9pZCBwcmludGtfbG9nX3J0YXMoY2hhciAqYnVmLCBpbnQgbGVuKQotewotCi0JaW50IGksaixuID0gMDsKLQlpbnQgcGVybGluZSA9IDE2OwotCWNoYXIgYnVmZmVyWzY0XTsKLQljaGFyICogc3RyID0gIlJUQVMgZXZlbnQiOwotCi0JaWYgKGZ1bGxfcnRhc19tc2dzKSB7Ci0JCXByaW50ayhSVEFTX0RFQlVHICIlZCAtLS0tLS0tLSAlcyBiZWdpbiAtLS0tLS0tLVxuIiwKLQkJICAgICAgIGVycm9yX2xvZ19jbnQsIHN0cik7Ci0KLQkJLyoKLQkJICogUHJpbnQgcGVybGluZSBieXRlcyBvbiBlYWNoIGxpbmUsIGVhY2ggbGluZSB3aWxsIHN0YXJ0Ci0JCSAqIHdpdGggUlRBUyBhbmQgYSBjaGFuZ2luZyBudW1iZXIsIHNvIHN5c2xvZ2Qgd2lsbAotCQkgKiBwcmludCBsaW5lcyB0aGF0IGFyZSBvdGhlcndpc2UgdGhlIHNhbWUuICBTZXBhcmF0ZSBldmVyeQotCQkgKiA0IGJ5dGVzIHdpdGggYSBzcGFjZS4KLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJaiA9IGkgJSBwZXJsaW5lOwotCQkJaWYgKGogPT0gMCkgewotCQkJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKLQkJCQluID0gc3ByaW50ZihidWZmZXIsICJSVEFTICVkOiIsIGkvcGVybGluZSk7Ci0JCQl9Ci0KLQkJCWlmICgoaSAlIDQpID09IDApCi0JCQkJbiArPSBzcHJpbnRmKGJ1ZmZlcituLCAiICIpOwotCi0JCQluICs9IHNwcmludGYoYnVmZmVyK24sICIlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2ldKTsKLQotCQkJaWYgKGogPT0gKHBlcmxpbmUtMSkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBidWZmZXIpOwotCQl9Ci0JCWlmICgoaSAlIHBlcmxpbmUpICE9IDApCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIGJ1ZmZlcik7Ci0KLQkJcHJpbnRrKFJUQVNfREVCVUcgIiVkIC0tLS0tLS0tICVzIGVuZCAtLS0tLS0tLS0tXG4iLAotCQkgICAgICAgZXJyb3JfbG9nX2NudCwgc3RyKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmVycmxvZyA9IChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKilidWY7Ci0KLQkJcHJpbnRrKFJUQVNfREVCVUcgImV2ZW50OiAlZCwgVHlwZTogJXMsIFNldmVyaXR5OiAlZFxuIiwKLQkJICAgICAgIGVycm9yX2xvZ19jbnQsIHJ0YXNfZXZlbnRfdHlwZShlcnJsb2ctPnR5cGUpLAotCQkgICAgICAgZXJybG9nLT5zZXZlcml0eSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGxvZ19ydGFzX2xlbihjaGFyICogYnVmKQotewotCWludCBsZW47Ci0Jc3RydWN0IHJ0YXNfZXJyb3JfbG9nICplcnI7Ci0KLQkvKiBydGFzIGZpeGVkIGhlYWRlciAqLwotCWxlbiA9IDg7Ci0JZXJyID0gKHN0cnVjdCBydGFzX2Vycm9yX2xvZyAqKWJ1ZjsKLQlpZiAoZXJyLT5leHRlbmRlZF9sb2dfbGVuZ3RoKSB7Ci0KLQkJLyogZXh0ZW5kZWQgaGVhZGVyICovCi0JCWxlbiArPSBlcnItPmV4dGVuZGVkX2xvZ19sZW5ndGg7Ci0JfQotCi0JaWYgKHJ0YXNfZXJyb3JfbG9nX21heCA9PSAwKQotCQlydGFzX2Vycm9yX2xvZ19tYXggPSBydGFzX2dldF9lcnJvcl9sb2dfbWF4KCk7Ci0KLQlpZiAobGVuID4gcnRhc19lcnJvcl9sb2dfbWF4KQotCQlsZW4gPSBydGFzX2Vycm9yX2xvZ19tYXg7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0vKgotICogRmlyc3Qgd3JpdGUgdG8gbnZyYW0sIGlmIGZhdGFsIGVycm9yLCB0aGF0IGlzIHRoZSBvbmx5Ci0gKiBwbGFjZSB3ZSBsb2cgdGhlIGluZm8uICBUaGUgZXJyb3Igd2lsbCBiZSBwaWNrZWQgdXAKLSAqIG9uIHRoZSBuZXh0IHJlYm9vdCBieSBydGFzZC4gIElmIG5vdCBmYXRhbCwgcnVuIHRoZQotICogbWV0aG9kIGZvciB0aGUgdHlwZSBvZiBlcnJvci4gIEN1cnJlbnRseSwgb25seSBSVEFTCi0gKiBlcnJvcnMgaGF2ZSBtZXRob2RzIGltcGxlbWVudGVkLCBidXQgaW4gdGhlIGZ1dHVyZQotICogdGhlcmUgbWlnaHQgYmUgYSBuZWVkIHRvIHN0b3JlIGRhdGEgaW4gbnZyYW0gYmVmb3JlIGEKLSAqIGNhbGwgdG8gcGFuaWMoKS4KLSAqCi0gKiBYWFggV2Ugd3JpdGUgdG8gbnZyYW0gcGVyaW9kaWNhbGx5LCB0byBpbmRpY2F0ZSBlcnJvciBoYXMKLSAqIGJlZW4gd3JpdHRlbiBhbmQgc3luYydkLCBidXQgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eQotICogdGhhdCBpZiB3ZSBkb24ndCBzaHV0ZG93biBjb3JyZWN0bHksIGEgZHVwbGljYXRlIGVycm9yCi0gKiByZWNvcmQgd2lsbCBiZSBjcmVhdGVkIG9uIG5leHQgcmVib290LgotICovCi12b2lkIHBTZXJpZXNfbG9nX2Vycm9yKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGVycl90eXBlLCBpbnQgZmF0YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBzOwotCWludCBsZW4gPSAwOwotCi0JcHJfZGVidWcoInJ0YXNkOiBsb2dnaW5nIGV2ZW50XG4iKTsKLQlpZiAoYnVmID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7Ci0KLQkvKiBnZXQgbGVuZ3RoIGFuZCBpbmNyZWFzZSBjb3VudCAqLwotCXN3aXRjaCAoZXJyX3R5cGUgJiBFUlJfVFlQRV9NQVNLKSB7Ci0JY2FzZSBFUlJfVFlQRV9SVEFTX0xPRzoKLQkJbGVuID0gbG9nX3J0YXNfbGVuKGJ1Zik7Ci0JCWlmICghKGVycl90eXBlICYgRVJSX0ZMQUdfQk9PVCkpCi0JCQllcnJvcl9sb2dfY250Kys7Ci0JCWJyZWFrOwotCWNhc2UgRVJSX1RZUEVfS0VSTkVMX1BBTklDOgotCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsgLyogQEBAIERFQlVHIEBAQCAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBXcml0ZSBlcnJvciB0byBOVlJBTSAqLwotCWlmIChsb2dnaW5nX2VuYWJsZWQgJiYgIShlcnJfdHlwZSAmIEVSUl9GTEFHX0JPT1QpKQotCQludnJhbV93cml0ZV9lcnJvcl9sb2coYnVmLCBsZW4sIGVycl90eXBlLCBlcnJvcl9sb2dfY250KTsKLQotCS8qCi0JICogcnRhcyBlcnJvcnMgY2FuIG9jY3VyIGR1cmluZyBib290LCBhbmQgd2UgZG8gd2FudCB0byBjYXB0dXJlCi0JICogdGhvc2Ugc29tZXdoZXJlLCBldmVuIGlmIG52cmFtIGlzbid0IHJlYWR5ICh3aHkgbm90PyksIGFuZCBldmVuCi0JICogaWYgcnRhc2QgaXNuJ3QgcmVhZHkuIFB1dCB0aGVtIGludG8gdGhlIGJvb3QgbG9nLCBhdCBsZWFzdC4KLQkgKi8KLQlpZiAoKGVycl90eXBlICYgRVJSX1RZUEVfTUFTSykgPT0gRVJSX1RZUEVfUlRBU19MT0cpCi0JCXByaW50a19sb2dfcnRhcyhidWYsIGxlbik7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBvciBoYXZlIHN0b3BwZWQgbG9nZ2luZyAqLwotCWlmIChmYXRhbCB8fCAhbG9nZ2luZ19lbmFibGVkKSB7Ci0JCWxvZ2dpbmdfZW5hYmxlZCA9IDA7Ci0JCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsgLyogQEBAIERFQlVHIEBAQCAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjYWxsIHR5cGUgc3BlY2lmaWMgbWV0aG9kIGZvciBlcnJvciAqLwotCXN3aXRjaCAoZXJyX3R5cGUgJiBFUlJfVFlQRV9NQVNLKSB7Ci0JY2FzZSBFUlJfVFlQRV9SVEFTX0xPRzoKLQkJb2Zmc2V0ID0gcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heCAqCi0JCQkoKHJ0YXNfbG9nX3N0YXJ0K3J0YXNfbG9nX3NpemUpICYgTE9HX05VTUJFUl9NQVNLKTsKLQotCQkvKiBGaXJzdCBjb3B5IG92ZXIgc2VxdWVuY2UgbnVtYmVyICovCi0JCW1lbWNweSgmcnRhc19sb2dfYnVmW29mZnNldF0sICh2b2lkICopICZlcnJvcl9sb2dfY250LCBzaXplb2YoaW50KSk7Ci0KLQkJLyogU2Vjb25kIGNvcHkgb3ZlciBlcnJvciBsb2cgZGF0YSAqLwotCQlvZmZzZXQgKz0gc2l6ZW9mKGludCk7Ci0JCW1lbWNweSgmcnRhc19sb2dfYnVmW29mZnNldF0sIGJ1ZiwgbGVuKTsKLQotCQlpZiAocnRhc19sb2dfc2l6ZSA8IExPR19OVU1CRVIpCi0JCQlydGFzX2xvZ19zaXplICs9IDE7Ci0JCWVsc2UKLQkJCXJ0YXNfbG9nX3N0YXJ0ICs9IDE7Ci0KLQkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOyAvKiBAQEAgREVCVUcgQEBAICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZydGFzX2xvZ193YWl0KTsKLQkJYnJlYWs7Ci0JY2FzZSBFUlJfVFlQRV9LRVJORUxfUEFOSUM6Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOyAvKiBAQEAgREVCVUcgQEBAICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKLQkJcmV0dXJuOwotCX0KLQotfQotCi0KLXN0YXRpYyBpbnQgcnRhc19sb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0YXNfbG9nX3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyB3aWxsIGNoZWNrIGlmIGFsbCBldmVudHMgYXJlIGxvZ2dlZCwgaWYgdGhleSBhcmUgdGhlbiwgd2UKLSAqIGtub3cgdGhhdCB3ZSBjYW4gc2FmZWx5IGNsZWFyIHRoZSBldmVudHMgaW4gTlZSQU0uCi0gKiBOZXh0IHdlJ2xsIHNpdCBhbmQgd2FpdCBmb3Igc29tZXRoaW5nIGVsc2UgdG8gbG9nLgotICovCi1zdGF0aWMgc3NpemVfdCBydGFzX2xvZ19yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IGVycm9yOwotCWNoYXIgKnRtcDsKLQl1bnNpZ25lZCBsb25nIHM7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0KLQlpZiAoIWJ1ZiB8fCBjb3VudCA8IHJ0YXNfZXJyb3JfbG9nX2J1ZmZlcl9tYXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY291bnQgPSBydGFzX2Vycm9yX2xvZ19idWZmZXJfbWF4OwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl0bXAgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRhc2RfbG9nX2xvY2ssIHMpOwotCS8qIGlmIGl0J3MgMCwgdGhlbiB3ZSBrbm93IHdlIGdvdCB0aGUgbGFzdCBvbmUgKHRoZSBvbmUgaW4gTlZSQU0pICovCi0Jd2hpbGUgKHJ0YXNfbG9nX3NpemUgPT0gMCkgewotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKLQkJCWVycm9yID0gLUVBR0FJTjsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKCFsb2dnaW5nX2VuYWJsZWQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKLQkJCWVycm9yID0gLUVOT0RBVEE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQludnJhbV9jbGVhcl9lcnJvcl9sb2coKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7Ci0JCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJ0YXNfbG9nX3dhaXQsIHJ0YXNfbG9nX3NpemUpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKLQl9Ci0KLQlvZmZzZXQgPSBydGFzX2Vycm9yX2xvZ19idWZmZXJfbWF4ICogKHJ0YXNfbG9nX3N0YXJ0ICYgTE9HX05VTUJFUl9NQVNLKTsKLQltZW1jcHkodG1wLCAmcnRhc19sb2dfYnVmW29mZnNldF0sIGNvdW50KTsKLQotCXJ0YXNfbG9nX3N0YXJ0ICs9IDE7Ci0JcnRhc19sb2dfc2l6ZSAtPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKLQotCWVycm9yID0gY29weV90b191c2VyKGJ1ZiwgdG1wLCBjb3VudCkgPyAtRUZBVUxUIDogY291bnQ7Ci1vdXQ6Ci0Ja2ZyZWUodG1wKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnRhc19sb2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCi17Ci0JcG9sbF93YWl0KGZpbGUsICZydGFzX2xvZ193YWl0LCB3YWl0KTsKLQlpZiAocnRhc19sb2dfc2l6ZSkKLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcnRhc19sb2dfb3BlcmF0aW9ucyA9IHsKLQkucmVhZCA9CQlydGFzX2xvZ19yZWFkLAotCS5wb2xsID0JCXJ0YXNfbG9nX3BvbGwsCi0JLm9wZW4gPQkJcnRhc19sb2dfb3BlbiwKLQkucmVsZWFzZSA9CXJ0YXNfbG9nX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IGVuYWJsZV9zdXJ2ZWlsbGFuY2UoaW50IHRpbWVvdXQpCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBydGFzX3NldF9pbmRpY2F0b3IoU1VSVkVJTExBTkNFX1RPS0VOLCAwLCB0aW1lb3V0KTsKLQotCWlmIChlcnJvciA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChlcnJvciA9PSAtRUlOVkFMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJydGFzZDogc3VydmVpbGxhbmNlIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwcmludGsoS0VSTl9FUlIgInJ0YXNkOiBjb3VsZCBub3QgdXBkYXRlIHN1cnZlaWxsYW5jZVxuIik7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgdm9pZCBkb19ldmVudF9zY2FuKHZvaWQpCi17Ci0JaW50IGVycm9yOwotCWRvIHsKLQkJbWVtc2V0KGxvZ2RhdGEsIDAsIHJ0YXNfZXJyb3JfbG9nX21heCk7Ci0JCWVycm9yID0gcnRhc19jYWxsKGV2ZW50X3NjYW4sIDQsIDEsIE5VTEwsCi0JCQkJICBSVEFTX0VWRU5UX1NDQU5fQUxMX0VWRU5UUywgMCwKLQkJCQkgIF9fcGEobG9nZGF0YSksIHJ0YXNfZXJyb3JfbG9nX21heCk7Ci0JCWlmIChlcnJvciA9PSAtMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJldmVudC1zY2FuIGZhaWxlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChlcnJvciA9PSAwKQotCQkJcFNlcmllc19sb2dfZXJyb3IobG9nZGF0YSwgRVJSX1RZUEVfUlRBU19MT0csIDApOwotCi0JfSB3aGlsZShlcnJvciA9PSAwKTsKLX0KLQotc3RhdGljIHZvaWQgcnRhc19ldmVudF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7Ci1ERUNMQVJFX0RFTEFZRURfV09SSyhldmVudF9zY2FuX3dvcmssIHJ0YXNfZXZlbnRfc2Nhbik7Ci0KLS8qCi0gKiBEZWxheSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIHNlY29uZCBzaW5jZSBzb21lIG1hY2hpbmVzIGhhdmUgcHJvYmxlbXMgaWYKLSAqIHdlIGNhbGwgZXZlbnQtc2NhbiB0b28gcXVpY2tseS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZXZlbnRfc2Nhbl9kZWxheSA9IDEqSFo7Ci1zdGF0aWMgaW50IGZpcnN0X3Bhc3MgPSAxOwotCi1zdGF0aWMgdm9pZCBydGFzX2V2ZW50X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3KQotewotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQlkb19ldmVudF9zY2FuKCk7Ci0KLQlnZXRfb25saW5lX2NwdXMoKTsKLQotCWNwdSA9IG5leHRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHUgPT0gTlJfQ1BVUykgewotCQljcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOwotCi0JCWlmIChmaXJzdF9wYXNzKSB7Ci0JCQlmaXJzdF9wYXNzID0gMDsKLQkJCWV2ZW50X3NjYW5fZGVsYXkgPSAzMCpIWi9ydGFzX2V2ZW50X3NjYW5fcmF0ZTsKLQotCQkJaWYgKHN1cnZlaWxsYW5jZV90aW1lb3V0ICE9IC0xKSB7Ci0JCQkJcHJfZGVidWcoInJ0YXNkOiBlbmFibGluZyBzdXJ2ZWlsbGFuY2VcbiIpOwotCQkJCWVuYWJsZV9zdXJ2ZWlsbGFuY2Uoc3VydmVpbGxhbmNlX3RpbWVvdXQpOwotCQkJCXByX2RlYnVnKCJydGFzZDogc3VydmVpbGxhbmNlIGVuYWJsZWRcbiIpOwotCQkJfQotCQl9Ci0JfQotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJmV2ZW50X3NjYW5fd29yaywKLQkJX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGV2ZW50X3NjYW5fZGVsYXksIGNwdSkpOwotCi0JcHV0X29ubGluZV9jcHVzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X2V2ZW50X3NjYW4odm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgZXJyX3R5cGU7Ci0JaW50IHJjOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJUQVMgZGFlbW9uIHN0YXJ0ZWRcbiIpOwotCXByX2RlYnVnKCJydGFzZDogd2lsbCBzbGVlcCBmb3IgJWQgbWlsbGlzZWNvbmRzXG4iLAotCQkgKDMwMDAwIC8gcnRhc19ldmVudF9zY2FuX3JhdGUpKTsKLQotCS8qIFNlZSBpZiB3ZSBoYXZlIGFueSBlcnJvciBzdG9yZWQgaW4gTlZSQU0gKi8KLQltZW1zZXQobG9nZGF0YSwgMCwgcnRhc19lcnJvcl9sb2dfbWF4KTsKLQlyYyA9IG52cmFtX3JlYWRfZXJyb3JfbG9nKGxvZ2RhdGEsIHJ0YXNfZXJyb3JfbG9nX21heCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfdHlwZSwgJmVycm9yX2xvZ19jbnQpOwotCS8qIFdlIGNhbiB1c2UgcnRhc19sb2dfYnVmIG5vdyAqLwotCWxvZ2dpbmdfZW5hYmxlZCA9IDE7Ci0KLQlpZiAoIXJjKSB7Ci0JCWlmIChlcnJfdHlwZSAhPSBFUlJfRkxBR19BTFJFQURZX0xPR0dFRCkgewotCQkJcFNlcmllc19sb2dfZXJyb3IobG9nZGF0YSwgZXJyX3R5cGUgfCBFUlJfRkxBR19CT09ULCAwKTsKLQkJfQotCX0KLQotCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApLCAmZXZlbnRfc2Nhbl93b3JrLAotCQkJCSBldmVudF9zY2FuX2RlbGF5KTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgcnRhc19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKLQotCWlmICghbWFjaGluZV9pcyhwc2VyaWVzKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBObyBSVEFTICovCi0JZXZlbnRfc2NhbiA9IHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKTsKLQlpZiAoZXZlbnRfc2NhbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAicnRhc2Q6IG5vIGV2ZW50LXNjYW4gb24gc3lzdGVtXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcnRhc19ldmVudF9zY2FuX3JhdGUgPSBydGFzX3Rva2VuKCJydGFzLWV2ZW50LXNjYW4tcmF0ZSIpOwotCWlmIChydGFzX2V2ZW50X3NjYW5fcmF0ZSA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgewotCQlwcmludGsoS0VSTl9FUlIgInJ0YXNkOiBubyBydGFzLWV2ZW50LXNjYW4tcmF0ZSBvbiBzeXN0ZW1cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBNYWtlIHJvb20gZm9yIHRoZSBzZXF1ZW5jZSBudW1iZXIgKi8KLQlydGFzX2Vycm9yX2xvZ19tYXggPSBydGFzX2dldF9lcnJvcl9sb2dfbWF4KCk7Ci0JcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heCA9IHJ0YXNfZXJyb3JfbG9nX21heCArIHNpemVvZihpbnQpOwotCi0JcnRhc19sb2dfYnVmID0gdm1hbGxvYyhydGFzX2Vycm9yX2xvZ19idWZmZXJfbWF4KkxPR19OVU1CRVIpOwotCWlmICghcnRhc19sb2dfYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRhc2Q6IG5vIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWVudHJ5ID0gcHJvY19jcmVhdGUoInBwYzY0L3J0YXMvZXJyb3JfbG9nIiwgU19JUlVTUiwgTlVMTCwKLQkJCSAgICAmcHJvY19ydGFzX2xvZ19vcGVyYXRpb25zKTsKLQlpZiAoIWVudHJ5KQotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUgZXJyb3JfbG9nIHByb2MgZW50cnlcbiIpOwotCi0Jc3RhcnRfZXZlbnRfc2NhbigpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHN1cnZlaWxsYW5jZV9zZXR1cChjaGFyICpzdHIpCi17Ci0JaW50IGk7Ci0KLQlpZiAoZ2V0X29wdGlvbigmc3RyLCZpKSkgewotCQlpZiAoaSA+PSAwICYmIGkgPD0gMjU1KQotCQkJc3VydmVpbGxhbmNlX3RpbWVvdXQgPSBpOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBydGFzbXNnc19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKHN0cmNtcChzdHIsICJvbiIpID09IDApCi0JCWZ1bGxfcnRhc19tc2dzID0gMTsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAib2ZmIikgPT0gMCkKLQkJZnVsbF9ydGFzX21zZ3MgPSAwOwotCi0JcmV0dXJuIDE7Ci19Ci1fX2luaXRjYWxsKHJ0YXNfaW5pdCk7Ci1fX3NldHVwKCJzdXJ2ZWlsbGFuY2U9Iiwgc3VydmVpbGxhbmNlX3NldHVwKTsKLV9fc2V0dXAoInJ0YXNtc2dzPSIsIHJ0YXNtc2dzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2NhbmxvZy5jCmluZGV4IDQxN2VjYTcuLjFiNDVjNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYwpAQCAtMTMsNyArMTMsNyBAQAogICogb2YgdGhpcyBkYXRhIHVzaW5nIHRoaXMgZHJpdmVyLiAgQSBkdW1wIGV4aXN0cyBpZiB0aGUgZGV2aWNlLXRyZWUKICAqIC9jaG9zZW4vaWJtLHNjYW4tbG9nLWRhdGEgcHJvcGVydHkgZXhpc3RzLgogICoKLSAqIFRoaXMgZHJpdmVyIGV4cG9ydHMgL3Byb2MvcHBjNjQvc2Nhbi1sb2ctZHVtcCB3aGljaCBjYW4gYmUgcmVhZC4KKyAqIFRoaXMgZHJpdmVyIGV4cG9ydHMgL3Byb2MvcG93ZXJwYy9zY2FuLWxvZy1kdW1wIHdoaWNoIGNhbiBiZSByZWFkLgogICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IHNlcXVlbnRpYWwgcmVhZHMuCiAgKgogICogVGhlIGRyaXZlciBsb29rcyBhdCBhIHdyaXRlIHRvIHRoZSBkcml2ZXIgZm9yIHRoZSBzaW5nbGUgd29yZCAicmVzZXQiLgpAQCAtMTg2LDcgKzE4Niw3IEBACiAJaWYgKCFkYXRhKQogCQlnb3RvIGVycjsKIAotCWVudCA9IHByb2NfY3JlYXRlX2RhdGEoInBwYzY0L3J0YXMvc2Nhbi1sb2ctZHVtcCIsIFNfSVJVU1IsIE5VTEwsCisJZW50ID0gcHJvY19jcmVhdGVfZGF0YSgicG93ZXJwYy9ydGFzL3NjYW4tbG9nLWR1bXAiLCBTX0lSVVNSLCBOVUxMLAogCQkJICAgICAgICZzY2FubG9nX2ZvcHMsIGRhdGEpOwogCWlmICghZW50KQogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCA0NDAwMDBjLi5iNDg4NjYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKICNpbmNsdWRlICJwc2VyaWVzLmgiCiAjaW5jbHVkZSAieGljcy5oIgorI2luY2x1ZGUgIm9mZmxpbmVfc3RhdGVzLmgiCiAKIAogLyoKQEAgLTg0LDYgKzg1LDkgQEAKIAkvKiBGaXh1cCBhdG9taWMgY291bnQ6IGl0IGV4aXRlZCBpbnNpZGUgSVJRIGhhbmRsZXIuICovCiAJdGFza190aHJlYWRfaW5mbyhwYWNhW2xjcHVdLl9fY3VycmVudCktPnByZWVtcHRfY291bnQJPSAwOwogCisJaWYgKGdldF9jcHVfY3VycmVudF9zdGF0ZShsY3B1KSA9PSBDUFVfU1RBVEVfSU5BQ1RJVkUpCisJCWdvdG8gb3V0OworCiAJLyogCiAJICogSWYgdGhlIFJUQVMgc3RhcnQtY3B1IHRva2VuIGRvZXMgbm90IGV4aXN0IHRoZW4gcHJlc3VtZSB0aGUKIAkgKiBjcHUgaXMgYWxyZWFkeSBzcGlubmluZy4KQEAgLTk4LDYgKzEwMiw3IEBACiAJCXJldHVybiAwOwogCX0KIAorb3V0OgogCXJldHVybiAxOwogfQogCkBAIC0xMTEsMTIgKzExNiwxNiBAQAogCQl2cGFfaW5pdChjcHUpOwogCiAJY3B1X2NsZWFyKGNwdSwgb2Zfc3Bpbl9tYXApOworCXNldF9jcHVfY3VycmVudF9zdGF0ZShjcHUsIENQVV9TVEFURV9PTkxJTkUpOworCXNldF9kZWZhdWx0X29mZmxpbmVfc3RhdGUoY3B1KTsKIAogfQogI2VuZGlmIC8qIENPTkZJR19YSUNTICovCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfcFNlcmllc19raWNrX2NwdShpbnQgbnIpCiB7CisJbG9uZyByYzsKKwl1bnNpZ25lZCBsb25nIGhjcHVpZDsKIAlCVUdfT04obnIgPCAwIHx8IG5yID49IE5SX0NQVVMpOwogCiAJaWYgKCFzbXBfc3RhcnR1cF9jcHUobnIpKQpAQCAtMTI4LDYgKzEzNywxNiBAQAogCSAqIHRoZSBwcm9jZXNzb3Igd2lsbCBjb250aW51ZSBvbiB0byBzZWNvbmRhcnlfc3RhcnQKIAkgKi8KIAlwYWNhW25yXS5jcHVfc3RhcnQgPSAxOworCisJc2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKG5yLCBDUFVfU1RBVEVfT05MSU5FKTsKKworCWlmIChnZXRfY3B1X2N1cnJlbnRfc3RhdGUobnIpID09IENQVV9TVEFURV9JTkFDVElWRSkgeworCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKKwkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOworCQlpZiAocmMgIT0gSF9TVUNDRVNTKQorCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZFwKKwkJCQkJCVJldD0gJWxkXG4iLCBuciwgcmMpOworCX0KIH0KIAogc3RhdGljIGludCBzbXBfcFNlcmllc19jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggYjliZjBlZS4uYjliOWUxMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNDYsNiArNDcsMTIgQEAKICAqLwogI2RlZmluZSBJUElfUFJJT1JJVFkJCTQKIAorLyogVGhlIGxlYXN0IGZhdm9yZWQgcHJpb3JpdHkgKi8KKyNkZWZpbmUgTE9XRVNUX1BSSU9SSVRZCQkweEZGCisKKy8qIFRoZSBudW1iZXIgb2YgcHJpb3JpdGllcyBkZWZpbmVkIGFib3ZlICovCisjZGVmaW5lIE1BWF9OVU1fUFJJT1JJVElFUwkzCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zZXJ2ZXIgPSAweEZGOwogc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplID0gODsKQEAgLTU2LDYgKzYzLDEyIEBACiBzdGF0aWMgaW50IGlibV9pbnRfb247CiBzdGF0aWMgaW50IGlibV9pbnRfb2ZmOwogCitzdHJ1Y3QgeGljc19jcHByIHsKKwl1bnNpZ25lZCBjaGFyIHN0YWNrW01BWF9OVU1fUFJJT1JJVElFU107CisJaW50IGluZGV4OworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB4aWNzX2NwcHIsIHhpY3NfY3Bwcik7CiAKIC8qIERpcmVjdCBoYXJkd2FyZSBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCiAKQEAgLTE1Nyw3ICsxNzAsNyBAQAogCWNwdW1hc2tfdCBjcHVtYXNrOwogCWNwdW1hc2tfdCB0bXAgPSBDUFVfTUFTS19OT05FOwogCi0JY3B1bWFza19jb3B5KCZjcHVtYXNrLCBpcnFfZGVzY1t2aXJxXS5hZmZpbml0eSk7CisJY3B1bWFza19jb3B5KCZjcHVtYXNrLCBpcnFfdG9fZGVzYyh2aXJxKS0+YWZmaW5pdHkpOwogCWlmICghZGlzdHJpYnV0ZV9pcnFzKQogCQlyZXR1cm4gZGVmYXVsdF9zZXJ2ZXI7CiAKQEAgLTI4NCw2ICsyOTcsMTkgQEAKIAlyZXR1cm4geGlyciAmIDB4MDBmZmZmZmY7CiB9CiAKK3N0YXRpYyB2b2lkIHB1c2hfY3Bwcih1bnNpZ25lZCBpbnQgdmVjKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJaWYgKFdBUk5fT04ob3NfY3Bwci0+aW5kZXggPj0gTUFYX05VTV9QUklPUklUSUVTIC0gMSkpCisJCXJldHVybjsKKworCWlmICh2ZWMgPT0gWElDU19JUEkpCisJCW9zX2NwcHItPnN0YWNrWysrb3NfY3Bwci0+aW5kZXhdID0gSVBJX1BSSU9SSVRZOworCWVsc2UKKwkJb3NfY3Bwci0+c3RhY2tbKytvc19jcHByLT5pbmRleF0gPSBERUZBVUxUX1BSSU9SSVRZOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IHhpY3NfZ2V0X2lycV9kaXJlY3Qodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgeGlyciA9IGRpcmVjdF94aXJyX2luZm9fZ2V0KCk7CkBAIC0yOTQsOCArMzIwLDEwIEBACiAJCXJldHVybiBOT19JUlE7CiAKIAlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCh4aWNzX2hvc3QsIHZlYyk7Ci0JaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkKKwlpZiAobGlrZWx5KGlycSAhPSBOT19JUlEpKSB7CisJCXB1c2hfY3Bwcih2ZWMpOwogCQlyZXR1cm4gaXJxOworCX0KIAogCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIHJ0YXMgbWFzayBpdC4gKi8KIAl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKQEAgLTMxNSw4ICszNDMsMTAgQEAKIAkJcmV0dXJuIE5PX0lSUTsKIAogCWlycSA9IGlycV9yYWRpeF9yZXZtYXBfbG9va3VwKHhpY3NfaG9zdCwgdmVjKTsKLQlpZiAobGlrZWx5KGlycSAhPSBOT19JUlEpKQorCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpIHsKKwkJcHVzaF9jcHByKHZlYyk7CiAJCXJldHVybiBpcnE7CisJfQogCiAJLyogV2UgZG9uJ3QgaGF2ZSBhIGxpbnV4IG1hcHBpbmcsIHNvIGhhdmUgUlRBUyBtYXNrIGl0LiAqLwogCXhpY3NfbWFza191bmtub3duX3ZlYyh2ZWMpOwpAQCAtMzI2LDEyICszNTYsMjIgQEAKIAlyZXR1cm4gTk9fSVJROwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciBwb3BfY3Bwcih2b2lkKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJaWYgKFdBUk5fT04ob3NfY3Bwci0+aW5kZXggPCAxKSkKKwkJcmV0dXJuIExPV0VTVF9QUklPUklUWTsKKworCXJldHVybiBvc19jcHByLT5zdGFja1stLW9zX2NwcHItPmluZGV4XTsKK30KKwogc3RhdGljIHZvaWQgeGljc19lb2lfZGlyZWN0KHVuc2lnbmVkIGludCB2aXJxKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnE7CiAKIAlpb3N5bmMoKTsKLQlkaXJlY3RfeGlycl9pbmZvX3NldCgoMHhmZiA8PCAyNCkgfCBpcnEpOworCWRpcmVjdF94aXJyX2luZm9fc2V0KChwb3BfY3BwcigpIDw8IDI0KSB8IGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIHhpY3NfZW9pX2xwYXIodW5zaWduZWQgaW50IHZpcnEpCkBAIC0zMzksNyArMzc5LDcgQEAKIAl1bnNpZ25lZCBpbnQgaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCiAJaW9zeW5jKCk7Ci0JbHBhcl94aXJyX2luZm9fc2V0KCgweGZmIDw8IDI0KSB8IGlycSk7CisJbHBhcl94aXJyX2luZm9fc2V0KChwb3BfY3BwcigpIDw8IDI0KSB8IGlycSk7CiB9CiAKIHN0YXRpYyBpbnQgeGljc19zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IHZpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQpAQCAtMzg4LDcgKzQyOCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGljc19waWNfZGlyZWN0ID0gewotCS50eXBlbmFtZSA9ICIgWElDUyAgICAgIiwKKwkubmFtZSA9ICIgWElDUyAgICAgIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKIAkubWFzayA9IHhpY3NfbWFza19pcnEsCiAJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKQEAgLTM5Nyw3ICs0MzcsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewotCS50eXBlbmFtZSA9ICIgWElDUyAgICAgIiwKKwkubmFtZSA9ICIgWElDUyAgICAgIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKIAkubWFzayA9IHhpY3NfbWFza19pcnEsCiAJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKQEAgLTQyOCwxMyArNDY4LDEzIEBACiAJLyogSW5zZXJ0IHRoZSBpbnRlcnJ1cHQgbWFwcGluZyBpbnRvIHRoZSByYWRpeCB0cmVlIGZvciBmYXN0IGxvb2t1cCAqLwogCWlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHhpY3NfaG9zdCwgdmlycSwgaHcpOwogCi0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCB4aWNzX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHhpY3NfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkgICB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIAogewpAQCAtNzQ2LDYgKzc4NiwxMiBAQAogCiBzdGF0aWMgdm9pZCB4aWNzX3NldF9jcHVfcHJpb3JpdHkodW5zaWduZWQgY2hhciBjcHByKQogeworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJQlVHX09OKG9zX2NwcHItPmluZGV4ICE9IDApOworCisJb3NfY3Bwci0+c3RhY2tbb3NfY3Bwci0+aW5kZXhdID0gY3BwcjsKKwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlscGFyX2NwcHJfaW5mbyhjcHByKTsKIAllbHNlCkBAIC03NzIsNyArODE4LDcgQEAKIAogdm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKQogewotCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgweGZmKTsKKwl4aWNzX3NldF9jcHVfcHJpb3JpdHkoTE9XRVNUX1BSSU9SSVRZKTsKIAogCXhpY3Nfc2V0X2NwdV9naXEoZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMSk7CiB9CkBAIC04NTIsNyArODk4LDcgQEAKIAkJLyogV2UgbmVlZCB0byBnZXQgSVBJcyBzdGlsbC4gKi8KIAkJaWYgKGlycSA9PSBYSUNTX0lQSSB8fCBpcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCiAJCQljb250aW51ZTsKLQkJZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKwkJZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOwogCiAJCS8qIFdlIG9ubHkgbmVlZCB0byBtaWdyYXRlIGVuYWJsZWQgSVJRUyAqLwogCQlpZiAoZGVzYyA9PSBOVUxMIHx8IGRlc2MtPmNoaXAgPT0gTlVMTApAQCAtODYwLDcgKzkwNiw3IEBACiAJCSAgICB8fCBkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJCXN0YXR1cyA9IHJ0YXNfY2FsbChpYm1fZ2V0X3hpdmUsIDEsIDMsIHhpY3Nfc3RhdHVzLCBpcnEpOwogCQlpZiAoc3RhdHVzKSB7CkBAIC04ODEsMTAgKzkyNywxMCBAQAogCQkgICAgICAgdmlycSwgY3B1KTsKIAogCQkvKiBSZXNldCBhZmZpbml0eSB0byBhbGwgY3B1cyAqLwotCQljcHVtYXNrX3NldGFsbChpcnFfZGVzY1t2aXJxXS5hZmZpbml0eSk7CisJCWNwdW1hc2tfc2V0YWxsKGlycV90b19kZXNjKHZpcnEpLT5hZmZpbml0eSk7CiAJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSh2aXJxLCBjcHVfYWxsX21hc2spOwogdW5sb2NrOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQppbmRleCA5ZDRiMTc0Li41NjQyOTI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIG9iai0kKENPTkZJR19NTUlPX05WUkFNKQkrPSBtbWlvX252cmFtLm8KIG9iai0kKENPTkZJR19GU0xfU09DKQkJKz0gZnNsX3NvYy5vCiBvYmotJChDT05GSUdfRlNMX1BDSSkJCSs9IGZzbF9wY2kubyAkKGZzbC1tc2ktb2JqLXkpCitvYmotJChDT05GSUdfRlNMX1BNQykJCSs9IGZzbF9wbWMubwogb2JqLSQoQ09ORklHX0ZTTF9MQkMpCQkrPSBmc2xfbGJjLm8KIG9iai0kKENPTkZJR19GU0xfR1RNKQkJKz0gZnNsX2d0bS5vCiBvYmotJChDT05GSUdfTVBDOHh4eF9HUElPKQkrPSBtcGM4eHh4X2dwaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwppbmRleCA4MjQyNGNkLi5hNGI0MWRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwpAQCAtNzcsNyArNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbV9waWMgPSB7Ci0JLnR5cGVuYW1lID0gIiBDUE0gUElDICIsCisJLm5hbWUgPSAiIENQTSBQSUMgIiwKIAkubWFzayA9IGNwbV9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BtX3VubWFza19pcnEsCiAJLmVvaSA9IGNwbV9lbmRfaXJxLApAQCAtMTAyLDcgKzEwMiw3IEBACiB7CiAJcHJfZGVidWcoImNwbV9waWNfaG9zdF9tYXAoJWQsIDB4JWx4KVxuIiwgdmlycSwgaHcpOwogCi0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmY3BtX3BpYywgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYwppbmRleCA3OGYxZjdjLi4xNzA5YWM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCkBAIC0xMTUsMTEgKzExNSwxMyBAQAogCiBzdGF0aWMgdm9pZCBjcG0yX2VuZF9pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludAliaXQsIHdvcmQ7CiAJdW5zaWduZWQgaW50IGlycV9uciA9IHZpcnFfdG9faHcodmlycSk7CiAKLQlpZiAoIShpcnFfZGVzY1tpcnFfbnJdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKQotCQkJJiYgaXJxX2Rlc2NbaXJxX25yXS5hY3Rpb24pIHsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxX25yKTsKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkKKwkJCSYmIGRlc2MtPmFjdGlvbikgewogCiAJCWJpdCA9IGlycV90b19zaXViaXRbaXJxX25yXTsKIAkJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTEzOCwxNiArMTQwLDI2IEBACiBzdGF0aWMgaW50IGNwbTJfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KHZpcnEpOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgdm9sZCwgdm5ldywgZWRpYml0OwogCi0JaWYgKGZsb3dfdHlwZSA9PSBJUlFfVFlQRV9OT05FKQotCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJLyogUG9ydCBDIGludGVycnVwdHMgYXJlIGVpdGhlciBJUlFfVFlQRV9FREdFX0ZBTExJTkcgb3IKKwkgKiBJUlFfVFlQRV9FREdFX0JPVEggKGRlZmF1bHQpLiAgQWxsIG90aGVycyBhcmUgSVJRX1RZUEVfRURHRV9GQUxMSU5HCisJICogb3IgSVJRX1RZUEVfTEVWRUxfTE9XIChkZWZhdWx0KQorCSAqLworCWlmIChzcmMgPj0gQ1BNMl9JUlFfUE9SVEMxNSAmJiBzcmMgPD0gQ1BNMl9JUlFfUE9SVEMwKSB7CisJCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJCWZsb3dfdHlwZSA9IElSUV9UWVBFX0VER0VfQk9USDsKIAotCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykgewotCQlwcmludGsoS0VSTl9FUlIgIkNQTTIgUElDOiBzZW5zZSB0eXBlIDB4JXggbm90IHN1cHBvcnRlZFxuIiwKLQkJCWZsb3dfdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmxvd190eXBlICE9IElSUV9UWVBFX0VER0VfQk9USCAmJgorCQkgICAgZmxvd190eXBlICE9IElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJCWdvdG8gZXJyX3NlbnNlOworCX0gZWxzZSB7CisJCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJCWZsb3dfdHlwZSA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKworCQlpZiAoZmxvd190eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfTEVWRUxfSElHSCkpCisJCQlnb3RvIGVycl9zZW5zZTsKIAl9CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKQEAgLTE3OSwxMCArMTkxLDE0IEBACiAJaWYgKHZvbGQgIT0gdm5ldykKIAkJb3V0X2JlMzIoJmNwbTJfaW50Y3RsLT5pY19zaWV4ciwgdm5ldyk7CiAJcmV0dXJuIDA7CisKK2Vycl9zZW5zZToKKwlwcl9lcnIoIkNQTTIgUElDOiBzZW5zZSB0eXBlIDB4JXggbm90IHN1cHBvcnRlZFxuIiwgZmxvd190eXBlKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcG0yX3BpYyA9IHsKLQkudHlwZW5hbWUgPSAiIENQTTIgU0lVICIsCisJLm5hbWUgPSAiIENQTTIgU0lVICIsCiAJLm1hc2sgPSBjcG0yX21hc2tfaXJxLAogCS51bm1hc2sgPSBjcG0yX3VubWFza19pcnEsCiAJLmFjayA9IGNwbTJfYWNrLApAQCAtMjEwLDEzICsyMjYsMTMgQEAKIHsKIAlwcl9kZWJ1ZygiY3BtMl9waWNfaG9zdF9tYXAoJWQsIDB4JWx4KVxuIiwgdmlycSwgaHcpOwogCi0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmY3BtMl9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNwbTJfcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCSAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiB7CiAJKm91dF9od2lycSA9IGludHNwZWNbMF07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCmluZGV4IGU0YjZkNjYuLjlkZTcyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCkBAIC03Miw3ICs3Miw3IEBACiAvKiBNYXggYWRkcmVzcyBzaXplIHdlIGRlYWwgd2l0aCAqLwogI2RlZmluZSBPRl9NQVhfQUREUl9DRUxMUwk0CiAKLWludCBfX2luaXQgY3BtX211cmFtX2luaXQodm9pZCkKK2ludCBjcG1fbXVyYW1faW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJc3RydWN0IHJlc291cmNlIHI7CkBAIC04MSw2ICs4MSw5IEBACiAJaW50IGkgPSAwOwogCWludCByZXQgPSAwOwogCisJaWYgKG11cmFtX3BiYXNlKQorCQlyZXR1cm4gMDsKKwogCXNwaW5fbG9ja19pbml0KCZjcG1fbXVyYW1fbG9jayk7CiAJLyogaW5pdGlhbGl6ZSB0aGUgaW5mbyBoZWFkZXIgKi8KIAlyaF9pbml0KCZjcG1fbXVyYW1faW5mbywgMSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKaW5kZXggZGEzOGExZi4uYzZlMTFiMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkubWFzawkJPSBtYXNrX21zaV9pcnEsCiAJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKIAkuYWNrCQk9IGZzbF9tc2lfZW5kX2lycSwKLQkudHlwZW5hbWUJPSAiIEZTTC1NU0kgICIsCisJLm5hbWUJPSAiIEZTTC1NU0kgICIsCiB9OwogCiBzdGF0aWMgaW50IGZzbF9tc2lfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKQEAgLTU1LDcgKzU1LDcgQEAKIHsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSAmZnNsX21zaV9jaGlwOwogCi0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX1RZUEVfRURHRV9GQUxMSU5HOworCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX1RZUEVfRURHRV9GQUxMSU5HOwogCiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIGNoaXAsIGhhbmRsZV9lZGdlX2lycSk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCXUzMiBpbnRyX2luZGV4OwogCXUzMiBoYXZlX3NoaWZ0ID0gMDsKIAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJaWYgKChtc2lfZGF0YS0+ZmVhdHVyZSAmICBGU0xfUElDX0lQX01BU0spID09IEZTTF9QSUNfSVBfSVBJQykgewogCQlpZiAoZGVzYy0+Y2hpcC0+bWFza19hY2spCiAJCQlkZXNjLT5jaGlwLT5tYXNrX2FjayhpcnEpOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJCWJyZWFrOwogCX0KIHVubG9jazoKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZnNsX29mX21zaV9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCmluZGV4IGFlODhiMTQuLmUxYTAyOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCkBAIC01Niw3ICs1Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfODV4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDXzg2eHgpCisjaWYgZGVmaW5lZChDT05GSUdfRlNMX1NPQ19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfUFBDXzg2eHgpCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9vbmVfYXRtdShzdHJ1Y3QgY2Nzcl9wY2kgX19pb21lbSAqcGNpLAogCXVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCkKQEAgLTM5Miw5ICszOTIsMjMgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODY0MSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODY0MUQsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzg2MTAsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1AxMDExRSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfUDEwMTEsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1AxMDEzRSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfUDEwMTMsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1AxMDIwRSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfUDEwMjAsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1AxMDIyRSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfUDEwMjIsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1AyMDEwRSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfUDIwMTAsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1AyMDIwRSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfUDIwMjAsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7Ci0jZW5kaWYgLyogQ09ORklHX1BQQ184NXh4IHx8IENPTkZJR19QUENfODZ4eCAqLworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9QNDA0MEUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1A0MDQwLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9QNDA4MEUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX1A0MDgwLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworI2VuZGlmIC8qIENPTkZJR19GU0xfU09DX0JPT0tFIHx8IENPTkZJR19QUENfODZ4eCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDXzgzeHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ19NUEM1MTJ4KQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE0RSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKQEAgLTQ1MCw4ICs0NjQsNyBAQAogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXN0cnVjdCBtcGM4M3h4X3BjaWVfcHJpdiAqcGNpZSA9IGhvc2UtPmRuLT5kYXRhOwotCXU4IGJ1c19ubyA9IGJ1cy0+bnVtYmVyIC0gaG9zZS0+Zmlyc3RfYnVzbm87Ci0JdTMyIGRldl9iYXNlID0gYnVzX25vIDw8IDI0IHwgZGV2Zm4gPDwgMTY7CisJdTMyIGRldl9iYXNlID0gYnVzLT5udW1iZXIgPDwgMjQgfCBkZXZmbiA8PCAxNjsKIAlpbnQgcmV0OwogCiAJcmV0ID0gbXBjODN4eF9wY2llX2V4Y2x1ZGVfZGV2aWNlKGJ1cywgZGV2Zm4pOwpAQCAtNTAxLDEyICs1MTQsMTcgQEAKIHN0YXRpYyBpbnQgbXBjODN4eF9wY2llX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJCQkJICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgdmFsKQogeworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXZvaWQgX19pb21lbSAqY2ZnX2FkZHI7CiAKIAljZmdfYWRkciA9IG1wYzgzeHhfcGNpZV9yZW1hcF9jZmcoYnVzLCBkZXZmbiwgb2Zmc2V0KTsKIAlpZiAoIWNmZ19hZGRyKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCisJLyogUFBDX0lORElSRUNUX1RZUEVfU1VSUFJFU1NfUFJJTUFSWV9CVVMgKi8KKwlpZiAob2Zmc2V0ID09IFBDSV9QUklNQVJZX0JVUyAmJiBidXMtPm51bWJlciA9PSBob3NlLT5maXJzdF9idXNubykKKwkJdmFsICY9IDB4ZmZmZmZmMDA7CisKIAlzd2l0Y2ggKGxlbikgewogCWNhc2UgMToKIAkJb3V0XzgoY2ZnX2FkZHIsIHZhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjM1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wbWMuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDA5ICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQXV0aG9yOiBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKK3N0cnVjdCBwbWNfcmVncyB7CisJX19iZTMyIGRldmRpc3I7CisJX19iZTMyIGRldmRpc3IyOworCV9fYmUzMiA6MzI7CisJX19iZTMyIDozMjsKKwlfX2JlMzIgcG1jc3I7CisjZGVmaW5lIFBNQ1NSX1NMUAkoMSA8PCAxNykKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpwbWNfZGV2Oworc3RhdGljIHN0cnVjdCBwbWNfcmVncyBfX2lvbWVtICpwbWNfcmVnczsKKworc3RhdGljIGludCBwbWNfc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaW50IHJldDsKKworCXNldGJpdHMzMigmcG1jX3JlZ3MtPnBtY3NyLCBQTUNTUl9TTFApOworCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBDUFUgaXMgYXNsZWVwLiAqLworCisJLyogVXBvbiByZXN1bWUsIHdhaXQgZm9yIFNMUCBiaXQgdG8gYmUgY2xlYXIuICovCisJcmV0ID0gc3Bpbl9ldmVudF90aW1lb3V0KChpbl9iZTMyKCZwbWNfcmVncy0+cG1jc3IpICYgUE1DU1JfU0xQKSA9PSAwLAorCQkJCSAxMDAwMCwgMTApID8gMCA6IC1FVElNRURPVVQ7CisJaWYgKHJldCkKKwkJZGV2X2VycihwbWNfZGV2LCAidGlyZWQgd2FpdGluZyBmb3IgU0xQIGJpdCB0byBjbGVhclxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbWNfc3VzcGVuZF92YWxpZChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfU1RBTkRCWSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgcG1jX3N1c3BlbmRfb3BzID0geworCS52YWxpZCA9IHBtY19zdXNwZW5kX3ZhbGlkLAorCS5lbnRlciA9IHBtY19zdXNwZW5kX2VudGVyLAorfTsKKworc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkKQoreworCXBtY19yZWdzID0gb2ZfaW9tYXAob2ZkZXYtPm5vZGUsIDApOworCWlmICghcG1jX3JlZ3MpCisJCXJldHVybiAtRU5PTUVNOworCisJcG1jX2RldiA9ICZvZmRldi0+ZGV2OworCXN1c3BlbmRfc2V0X29wcygmcG1jX3N1c3BlbmRfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcG1jX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcG1jIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NjQxZC1wbWMiLCB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHBtY19kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gImZzbC1wbWMiLAorCS5tYXRjaF90YWJsZSA9IHBtY19pZHMsCisJLnByb2JlID0gcG1jX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG1jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZwbWNfZHJpdmVyKTsKK30KK2RldmljZV9pbml0Y2FsbChwbWNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IGFkY2E0YWYuLmI5MWY3YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAogYXJjaF9pbml0Y2FsbChmc2xfdXNiX29mX2luaXQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQorI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9TT0NfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQogc3RhdGljIF9fYmUzMiBfX2lvbWVtICpyc3RjcjsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcnN0Y3Iodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwppbmRleCBhOTY1ODRhLi4wYTU1ZGI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OV9waWMgPSB7Ci0JLnR5cGVuYW1lCT0gIiBpODI1OSAgICAiLAorCS5uYW1lCQk9ICIgaTgyNTkgICAgIiwKIAkubWFzawkJPSBpODI1OV9tYXNrX2lycSwKIAkuZGlzYWJsZQk9IGk4MjU5X21hc2tfaXJxLAogCS51bm1hc2sJCT0gaTgyNTlfdW5tYXNrX2lycSwKQEAgLTE3NSwxMiArMTc1LDEyIEBACiAKIAkvKiBXZSBibG9jayB0aGUgaW50ZXJuYWwgY2FzY2FkZSAqLwogCWlmIChodyA9PSAyKQotCQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUOworCQlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1Q7CiAKIAkvKiBXZSB1c2UgdGhlIGxldmVsIGhhbmRsZXIgb25seSBmb3Igbm93LCB3ZSBtaWdodCB3YW50IHRvCiAJICogYmUgbW9yZSBjYXV0aW91cyBoZXJlIGJ1dCB0aGF0IHdvcmtzIGZvciBub3cKIAkgKi8KLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJaXJxX3RvX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZpODI1OV9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXJldHVybiAwOwogfQpAQCAtMTk4LDcgKzE5OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaTgyNTlfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkgICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJICAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBtYXBfaXNhX3NlbnNlc1s0XSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKaW5kZXggY2I3Njg5Yy4uMjhjZGRkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKQEAgLTYwNSw3ICs2MDUsNyBAQAogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycSh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcodmlycSk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOwogCXVuc2lnbmVkIGludCB2b2xkLCB2bmV3LCBlZGliaXQ7CiAKIAlpZiAoZmxvd190eXBlID09IElSUV9UWVBFX05PTkUpCkBAIC02NjAsNyArNjYwLDcgQEAKIAogLyogbGV2ZWwgaW50ZXJydXB0cyBhbmQgZWRnZSBpbnRlcnJ1cHRzIGhhdmUgZGlmZmVyZW50IGFjayBvcGVyYXRpb25zICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfbGV2ZWxfaXJxX2NoaXAgPSB7Ci0JLnR5cGVuYW1lCT0gIiBJUElDICAiLAorCS5uYW1lCQk9ICIgSVBJQyAgIiwKIAkudW5tYXNrCQk9IGlwaWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSBpcGljX21hc2tfaXJxLAogCS5tYXNrX2Fjawk9IGlwaWNfbWFza19pcnEsCkBAIC02NjgsNyArNjY4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19lZGdlX2lycV9jaGlwID0gewotCS50eXBlbmFtZQk9ICIgSVBJQyAgIiwKKwkubmFtZQkJPSAiIElQSUMgICIsCiAJLnVubWFzawkJPSBpcGljX3VubWFza19pcnEsCiAJLm1hc2sJCT0gaXBpY19tYXNrX2lycSwKIAkubWFza19hY2sJPSBpcGljX21hc2tfaXJxX2FuZF9hY2ssCkBAIC02OTcsNyArNjk3LDcgQEAKIH0KIAogc3RhdGljIGludCBpcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCQkgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiAKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKaW5kZXggNWQyZDU1Mi4uNjliZDZmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAogc3RhdGljIGludCBtcGM4eHhfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9UWVBFX1NFTlNFX01BU0sgfCBJUlFfTEVWRUwpOwogCWRlc2MtPnN0YXR1cyB8PSBmbG93X3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwpAQCAtOTQsNyArOTQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzh4eF9waWMgPSB7Ci0JLnR5cGVuYW1lID0gIiBNUEM4WFggU0lVICIsCisJLm5hbWUgPSAiIE1QQzhYWCBTSVUgIiwKIAkudW5tYXNrID0gbXBjOHh4X3VubWFza19pcnEsCiAJLm1hc2sgPSBtcGM4eHhfbWFza19pcnEsCiAJLmFjayA9IG1wYzh4eF9hY2ssCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogCiBzdGF0aWMgaW50IG1wYzh4eF9waWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkgICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJICAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBtYXBfcGljX3NlbnNlc1s0XSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCmluZGV4IDEwM2VhY2UuLmVlMWMwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwpAQCAtNTQsNiArNTQsMjIgQEAKIAltcGM4eHh4X2djLT5kYXRhID0gaW5fYmUzMihtbS0+cmVncyArIEdQSU9fREFUKTsKIH0KIAorLyogV29ya2Fyb3VuZCBHUElPIDEgZXJyYXRhIG9uIE1QQzg1NzIvTVBDODUzNi4gVGhlIHN0YXR1cyBvZiBHUElPcworICogZGVmaW5lZCBhcyBvdXRwdXQgY2Fubm90IGJlIGRldGVybWluZWQgYnkgcmVhZGluZyBHUERBVCByZWdpc3RlciwKKyAqIHNvIHdlIHVzZSBzaGFkb3cgZGF0YSByZWdpc3RlciBpbnN0ZWFkLiBUaGUgc3RhdHVzIG9mIGlucHV0IHBpbnMKKyAqIGlzIGRldGVybWluZWQgYnkgcmVhZGluZyBHUERBVCByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBtcGM4NTcyX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwl1MzIgdmFsOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisKKwl2YWwgPSBpbl9iZTMyKG1tLT5yZWdzICsgR1BJT19EQVQpICYgfmluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RJUik7CisKKwlyZXR1cm4gKHZhbCB8IG1wYzh4eHhfZ2MtPmRhdGEpICYgbXBjOHh4eF9ncGlvMm1hc2soZ3Bpbyk7Cit9CisKIHN0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwpAQCAtMTM2LDcgKzE1MiwxMCBAQAogCWdjLT5uZ3BpbyA9IE1QQzhYWFhfR1BJT19QSU5TOwogCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBtcGM4eHh4X2dwaW9fZGlyX2luOwogCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjOHh4eF9ncGlvX2Rpcl9vdXQ7Ci0JZ2MtPmdldCA9IG1wYzh4eHhfZ3Bpb19nZXQ7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NzItZ3BpbyIpKQorCQlnYy0+Z2V0ID0gbXBjODU3Ml9ncGlvX2dldDsKKwllbHNlCisJCWdjLT5nZXQgPSBtcGM4eHh4X2dwaW9fZ2V0OwogCWdjLT5zZXQgPSBtcGM4eHh4X2dwaW9fc2V0OwogCiAJcmV0ID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBtbV9nYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IDMwYzQ0ZTYuLjQ3MGRjNmMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtNTY3LDEzICs1NjcsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfTVBJQ19VM19IVF9JUlFTICovCiAKICNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKK3N0YXRpYyBpbnQgaXJxX2Nob29zZV9jcHUoY29uc3QgY3B1bWFza190ICptYXNrKQogewotCWNwdW1hc2tfdCBtYXNrOwogCWludCBjcHVpZDsKIAotCWNwdW1hc2tfY29weSgmbWFzaywgaXJxX2Rlc2NbdmlydF9pcnFdLmFmZmluaXR5KTsKLQlpZiAoY3B1c19lcXVhbChtYXNrLCBDUFVfTUFTS19BTEwpKSB7CisJaWYgKGNwdW1hc2tfZXF1YWwobWFzaywgY3B1X2FsbF9tYXNrKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01OTQsMjAgKzU5MiwxNSBAQAogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkJY3B1bWFza190IHRtcDsKLQotCQljcHVzX2FuZCh0bXAsIGNwdV9vbmxpbmVfbWFwLCBtYXNrKTsKLQotCQlpZiAoY3B1c19lbXB0eSh0bXApKQorCQljcHVpZCA9IGNwdW1hc2tfZmlyc3RfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJCWlmIChjcHVpZCA+PSBucl9jcHVfaWRzKQogCQkJZ290byBkb19yb3VuZF9yb2JpbjsKLQotCQljcHVpZCA9IGZpcnN0X2NwdSh0bXApOwogCX0KIAogCXJldHVybiBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdWlkKTsKIH0KICNlbHNlCi1zdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKK3N0YXRpYyBpbnQgaXJxX2Nob29zZV9jcHUoY29uc3QgY3B1bWFza190ICptYXNrKQogewogCXJldHVybiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIH0KQEAgLTYyMSw3ICs2MTQsNyBAQAogCWlmIChpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXJldHVybiBpcnFfdG9fZGVzYyhpcnEpLT5jaGlwX2RhdGE7CiB9CiAKIC8qIERldGVybWluZSBpZiB0aGUgbGludXggaXJxIGlzIGFuIElQSSAqLwpAQCAtNjQ4LDE0ICs2NDEsMTQgQEAKIC8qIEdldCB0aGUgbXBpYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgSVBJIG51bWJlciAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBpYyAqIG1waWNfZnJvbV9pcGkodW5zaWduZWQgaW50IGlwaSkKIHsKLQlyZXR1cm4gaXJxX2Rlc2NbaXBpXS5jaGlwX2RhdGE7CisJcmV0dXJuIGlycV90b19kZXNjKGlwaSktPmNoaXBfZGF0YTsKIH0KICNlbmRpZgogCiAvKiBHZXQgdGhlIG1waWMgc3RydWN0dXJlIGZyb20gdGhlIGlycSBudW1iZXIgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1waWMgKiBtcGljX2Zyb21faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXJldHVybiBpcnFfdG9fZGVzYyhpcnEpLT5jaGlwX2RhdGE7CiB9CiAKIC8qIFNlbmQgYW4gRU9JICovCkBAIC03MzUsNyArNzI4LDcgQEAKIAogCW1waWNfdW5tYXNrX2lycShpcnEpOwogCi0JaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKQorCWlmIChpcnFfdG9fZGVzYyhpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpCiAJCW1waWNfaHRfZW5kX2lycShtcGljLCBzcmMpOwogfQogCkBAIC03NDUsNyArNzM4LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKIAogCW1waWNfdW5tYXNrX2lycShpcnEpOwotCW1waWNfc3RhcnR1cF9odF9pbnRlcnJ1cHQobXBpYywgc3JjLCBpcnFfZGVzY1tpcnFdLnN0YXR1cyk7CisJbXBpY19zdGFydHVwX2h0X2ludGVycnVwdChtcGljLCBzcmMsIGlycV90b19kZXNjKGlycSktPnN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc1NSw3ICs3NDgsNyBAQAogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwogCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOwogCi0JbXBpY19zaHV0ZG93bl9odF9pbnRlcnJ1cHQobXBpYywgc3JjLCBpcnFfZGVzY1tpcnFdLnN0YXR1cyk7CisJbXBpY19zaHV0ZG93bl9odF9pbnRlcnJ1cHQobXBpYywgc3JjLCBpcnFfdG9fZGVzYyhpcnEpLT5zdGF0dXMpOwogCW1waWNfbWFza19pcnEoaXJxKTsKIH0KIApAQCAtNzcyLDcgKzc2NSw3IEBACiAJICogbGF0Y2hlZCBhbm90aGVyIGVkZ2UgaW50ZXJydXB0IGNvbWluZyBpbiBhbnl3YXkKIAkgKi8KIAotCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9MRVZFTCkKKwlpZiAoaXJxX3RvX2Rlc2MoaXJxKS0+c3RhdHVzICYgSVJRX0xFVkVMKQogCQltcGljX2h0X2VuZF9pcnEobXBpYywgc3JjKTsKIAltcGljX2VvaShtcGljKTsKIH0KQEAgLTgxNiw3ICs4MDksNyBAQAogCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOwogCiAJaWYgKG1waWMtPmZsYWdzICYgTVBJQ19TSU5HTEVfREVTVF9DUFUpIHsKLQkJaW50IGNwdWlkID0gaXJxX2Nob29zZV9jcHUoaXJxKTsKKwkJaW50IGNwdWlkID0gaXJxX2Nob29zZV9jcHUoY3B1bWFzayk7CiAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwgMSA8PCBjcHVpZCk7CiAJfSBlbHNlIHsKQEAgLTg1Niw3ICs4NDksNyBAQAogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycSh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcodmlycSk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOwogCXVuc2lnbmVkIGludCB2ZWNwcmksIHZvbGQsIHZuZXc7CiAKIAlEQkcoIm1waWM6IHNldF9pcnFfdHlwZShtcGljOkAlcCx2aXJxOiVkLHNyYzoweCV4LHR5cGU6MHgleClcbiIsCkBAIC05OTQsNyArOTg3LDcgQEAKIH0KIAogc3RhdGljIGludCBtcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCQkgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiAKIHsKQEAgLTEwNjIsMTkgKzEwNTUsMTkgQEAKIAltcGljLT5uYW1lID0gbmFtZTsKIAogCW1waWMtPmhjX2lycSA9IG1waWNfaXJxX2NoaXA7Ci0JbXBpYy0+aGNfaXJxLnR5cGVuYW1lID0gbmFtZTsKKwltcGljLT5oY19pcnEubmFtZSA9IG5hbWU7CiAJaWYgKGZsYWdzICYgTVBJQ19QUklNQVJZKQogCQltcGljLT5oY19pcnEuc2V0X2FmZmluaXR5ID0gbXBpY19zZXRfYWZmaW5pdHk7CiAjaWZkZWYgQ09ORklHX01QSUNfVTNfSFRfSVJRUwogCW1waWMtPmhjX2h0X2lycSA9IG1waWNfaXJxX2h0X2NoaXA7Ci0JbXBpYy0+aGNfaHRfaXJxLnR5cGVuYW1lID0gbmFtZTsKKwltcGljLT5oY19odF9pcnEubmFtZSA9IG5hbWU7CiAJaWYgKGZsYWdzICYgTVBJQ19QUklNQVJZKQogCQltcGljLT5oY19odF9pcnEuc2V0X2FmZmluaXR5ID0gbXBpY19zZXRfYWZmaW5pdHk7CiAjZW5kaWYgLyogQ09ORklHX01QSUNfVTNfSFRfSVJRUyAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAogCW1waWMtPmhjX2lwaSA9IG1waWNfaXBpX2NoaXA7Ci0JbXBpYy0+aGNfaXBpLnR5cGVuYW1lID0gbmFtZTsKKwltcGljLT5oY19pcGkubmFtZSA9IG5hbWU7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAJbXBpYy0+ZmxhZ3MgPSBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwppbmRleCAxZDQ0ZWVlLi4wZjY3Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCkBAIC0zOSw3ICszOSwxMiBAQAogCiAJcHJfZGVidWcoIm1waWM6IGZvdW5kIFUzLCBndWVzc2luZyBtc2kgYWxsb2NhdG9yIHNldHVwXG4iKTsKIAotCS8qIFJlc2VydmUgc291cmNlIG51bWJlcnMgd2Uga25vdyBhcmUgcmVzZXJ2ZWQgaW4gdGhlIEhXICovCisJLyogUmVzZXJ2ZSBzb3VyY2UgbnVtYmVycyB3ZSBrbm93IGFyZSByZXNlcnZlZCBpbiB0aGUgSFcuCisJICoKKwkgKiBUaGlzIGlzIGEgYml0IG9mIGEgbWl4IG9mIFUzIGFuZCBVNCByZXNlcnZlcyBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gd29yayBmaW5lLCB3ZSBoYXZlIHBsZW50eSBlbnVnaCBudW1iZXJzIGxlZnQgc28gbGV0J3MganVzdAorCSAqIG1hcmsgYW55dGhpbmcgd2UgZG9uJ3QgbGlrZSByZXNlcnZlZC4KKwkgKi8KIAlmb3IgKGkgPSAwOyAgIGkgPCA4OyAgIGkrKykKIAkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIApAQCAtNDksNiArNTQsMTAgQEAKIAlmb3IgKGkgPSAxMDA7IGkgPCAxMDU7IGkrKykKIAkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIAorCWZvciAoaSA9IDEyNDsgaSA8IG1waWMtPmlycV9jb3VudDsgaSsrKQorCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOworCisKIAlucCA9IE5VTEw7CiAJd2hpbGUgKChucCA9IG9mX2ZpbmRfYWxsX25vZGVzKG5wKSkpIHsKIAkJcHJfZGVidWcoIm1waWM6IG1hcHBpbmcgaHdpcnFzIGZvciAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwppbmRleCA2NTZjYjc3Li4wZjZhYjA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkuZW9pCQk9IG1waWNfZW5kX2lycSwKIAkuc2V0X3R5cGUJPSBtcGljX3NldF9pcnFfdHlwZSwKIAkuc2V0X2FmZmluaXR5CT0gbXBpY19zZXRfYWZmaW5pdHksCi0JLnR5cGVuYW1lCT0gIlBBU0VNSS1NU0kgIiwKKwkubmFtZQkJPSAiUEFTRU1JLU1TSSAiLAogfTsKIAogc3RhdGljIGludCBwYXNlbWlfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwppbmRleCAwYThmNWE5Li5iY2JmZTc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwpAQCAtNDIsNyArNDIsNyBAQAogCS5lb2kJCT0gbXBpY19lbmRfaXJxLAogCS5zZXRfdHlwZQk9IG1waWNfc2V0X2lycV90eXBlLAogCS5zZXRfYWZmaW5pdHkJPSBtcGljX3NldF9hZmZpbml0eSwKLQkudHlwZW5hbWUJPSAiTVBJQy1VM01TSSIsCisJLm5hbWUJCT0gIk1QSUMtVTNNU0kiLAogfTsKIAogc3RhdGljIHU2NCByZWFkX2h0X21hZ2ljX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBwb3MpCkBAIC02NCwxMiArNjQsMTIgQEAKIAlyZXR1cm4gYWRkcjsKIH0KIAotc3RhdGljIHU2NCBmaW5kX2h0X21hZ2ljX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdTY0IGZpbmRfaHRfbWFnaWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGh3aXJxKQogewogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJdW5zaWduZWQgaW50IHBvczsKIAotCWZvciAoYnVzID0gcGRldi0+YnVzOyBidXM7IGJ1cyA9IGJ1cy0+cGFyZW50KSB7CisJZm9yIChidXMgPSBwZGV2LT5idXM7IGJ1cyAmJiBidXMtPnNlbGY7IGJ1cyA9IGJ1cy0+cGFyZW50KSB7CiAJCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoYnVzLT5zZWxmLCBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKIAkJaWYgKHBvcykKIAkJCXJldHVybiByZWFkX2h0X21hZ2ljX2FkZHIoYnVzLT5zZWxmLCBwb3MpOwpAQCAtNzgsMTMgKzc4LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgZmluZF91NF9tYWdpY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KHBkZXYtPmJ1cyk7CisKKwkvKiBVNCBQQ0llIE1TSXMgbmVlZCB0byB3cml0ZSB0byB0aGUgc3BlY2lhbCByZWdpc3RlciBpbgorCSAqIHRoZSBicmlkZ2UgdGhhdCBnZW5lcmF0ZXMgaW50ZXJydXB0cy4gVGhlcmUgc2hvdWxkIGJlCisJICogdGhlb3JpY2FsbHkgYSByZWdpc3RlciBhdCAweGY4MDA1MDAwIHdoZXJlIHlvdSBqdXN0IHdyaXRlCisJICogdGhlIE1TSSBudW1iZXIgYW5kIHRoYXQgdHJpZ2dlcnMgdGhlIHJpZ2h0IGludGVycnVwdCwgYnV0CisJICogdW5mb3J0dW5hdGVseSwgdGhpcyBpcyBidXN0ZWQgaW4gSFcsIHRoZSBicmlkZ2UgZW5kaWFuIHN3YXBzCisJICogdGhlIHZhbHVlIGFuZCBoaXRzIHRoZSB3cm9uZyBuaWJibGUgaW4gdGhlIHJlZ2lzdGVyLgorCSAqCisJICogU28gaW5zdGVhZCB3ZSB1c2UgYW5vdGhlciByZWdpc3RlciBzZXQgd2hpY2ggaXMgdXNlZCBub3JtYWxseQorCSAqIGZvciBjb252ZXJ0aW5nIEhUIGludGVycnVwdHMgdG8gTVBJQyBpbnRlcnJ1cHRzLCB3aGljaCBkZWNvZGVzCisJICogdGhlIGludGVycnVwdCBudW1iZXIgYXMgcGFydCBvZiB0aGUgbG93IGFkZHJlc3MgYml0cworCSAqCisJICogVGhpcyB3aWxsIG5vdCB3b3JrIGlmIHdlIGV2ZXIgdXNlIG1vcmUgdGhhbiBvbmUgbGVnYWN5IE1TSSBpbgorCSAqIGEgYmxvY2sgYnV0IHdlIG5ldmVyIGRvLiBGb3Igb25lIE1TSSBvciBtdWx0aXBsZSBNU0ktWCB3aGVyZQorCSAqIGVhY2ggaW50ZXJydXB0IGFkZHJlc3MgY2FuIGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LCBpdCB3b3JrcworCSAqIGp1c3QgZmluZS4KKwkgKi8KKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaG9zZS0+ZG4sICJ1NC1wY2llIikgfHwKKwkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaG9zZS0+ZG4sICJVNC1wY2llIikpCisJCXJldHVybiAweGY4MDA0MDAwIHwgKGh3aXJxIDw8IDQpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdTNtc2lfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewogCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKIAkJcHJfZGVidWcoInUzbXNpOiBNU0ktWCB1bnRlc3RlZCwgdHJ5aW5nIGFueXdheS5cbiIpOwogCiAJLyogSWYgd2UgY2FuJ3QgZmluZCBhIG1hZ2ljIGFkZHJlc3MgdGhlbiBNU0kgYWluJ3QgZ29ubmEgd29yayAqLwotCWlmIChmaW5kX2h0X21hZ2ljX2FkZHIocGRldikgPT0gMCkgeworCWlmIChmaW5kX2h0X21hZ2ljX2FkZHIocGRldiwgMCkgPT0gMCAmJgorCSAgICBmaW5kX3U0X21hZ2ljX2FkZHIocGRldiwgMCkgPT0gMCkgewogCQlwcl9kZWJ1ZygidTNtc2k6IG5vIG1hZ2ljIGFkZHJlc3MgZm91bmQgZm9yICVzXG4iLAogCQkJIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTExOCwxMCArMTQ2LDYgQEAKIAl1NjQgYWRkcjsKIAlpbnQgaHdpcnE7CiAKLQlhZGRyID0gZmluZF9odF9tYWdpY19hZGRyKHBkZXYpOwotCW1zZy5hZGRyZXNzX2xvID0gYWRkciAmIDB4RkZGRkZGRkY7Ci0JbXNnLmFkZHJlc3NfaGkgPSBhZGRyID4+IDMyOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCWh3aXJxID0gbXNpX2JpdG1hcF9hbGxvY19od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLCAxKTsKIAkJaWYgKGh3aXJxIDwgMCkgewpAQCAtMTI5LDYgKzE1MywxMiBAQAogCQkJcmV0dXJuIGh3aXJxOwogCQl9CiAKKwkJYWRkciA9IGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2LCBod2lycSk7CisJCWlmIChhZGRyID09IDApCisJCQlhZGRyID0gZmluZF91NF9tYWdpY19hZGRyKHBkZXYsIGh3aXJxKTsKKwkJbXNnLmFkZHJlc3NfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKKwkJbXNnLmFkZHJlc3NfaGkgPSBhZGRyID4+IDMyOworCiAJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcobXNpX21waWMtPmlycWhvc3QsIGh3aXJxKTsKIAkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7CiAJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsIGh3aXJxKTsKQEAgLTE0Myw2ICsxNzMsOCBAQAogCQlwcl9kZWJ1ZygidTNtc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JXgpIGFkZHIgMHglbHhcbiIsCiAJCQkgIHZpcnEsIGh3aXJxLCAodW5zaWduZWQgbG9uZylhZGRyKTsKIAorCQlwcmludGsoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSBhZGRyIDB4JWx4XG4iLAorCQkJICB2aXJxLCBod2lycSwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAJCW1zZy5kYXRhID0gaHdpcnE7CiAJCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYwppbmRleCAyYWE0ZWQwLi40ODViOTI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIHsKIAlpbnQgbGV2ZWwxOwogCi0JZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCWlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCiAJbGV2ZWwxID0gKGh3aXJxICYgTVY2NHg2MF9MRVZFTDFfTUFTSykgPj4gTVY2NHg2MF9MRVZFTDFfT0ZGU0VUOwogCUJVR19PTihsZXZlbDEgPiBNVjY0eDYwX0xFVkVMMV9HUFApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKaW5kZXggNDY0MjcxYi4uMTQ5MzkzYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTY1LDE5ICs2Nyw2IEBACiAKIHN0YXRpYyBwaHlzX2FkZHJfdCBxZWJhc2UgPSAtMTsKIAotaW50IHFlX2FsaXZlX2R1cmluZ19zbGVlcCh2b2lkKQotewotCXN0YXRpYyBpbnQgcmV0ID0gLTE7Ci0KLQlpZiAocmV0ICE9IC0xKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gIW9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjODU2OS1wbWMiKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHFlX2FsaXZlX2R1cmluZ19zbGVlcCk7Ci0KIHBoeXNfYWRkcl90IGdldF9xZV9iYXNlKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpxZTsKQEAgLTEwNCw3ICs5Myw3IEBACiAKIEVYUE9SVF9TWU1CT0woZ2V0X3FlX2Jhc2UpOwogCi12b2lkIF9faW5pdCBxZV9yZXNldCh2b2lkKQordm9pZCBxZV9yZXNldCh2b2lkKQogewogCWlmIChxZV9pbW1yID09IE5VTEwpCiAJCXFlX2ltbXIgPSBpb3JlbWFwKGdldF9xZV9iYXNlKCksIFFFX0lNTUFQX1NJWkUpOwpAQCAtMzMwLDE2ICszMTksMTggQEAKIHN0YXRpYyBpbnQgcWVfc2RtYV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHNkbWEgX19pb21lbSAqc2RtYSA9ICZxZV9pbW1yLT5zZG1hOwotCXVuc2lnbmVkIGxvbmcgc2RtYV9idWZfb2Zmc2V0OworCXN0YXRpYyB1bnNpZ25lZCBsb25nIHNkbWFfYnVmX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKS1FTk9NRU07CiAKIAlpZiAoIXNkbWEpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgMiBpbnRlcm5hbCB0ZW1wb3JhcnkgYnVmZmVycyAoNTEyIGJ5dGVzIHNpemUgZWFjaCkgZm9yCiAJICogdGhlIFNETUEgKi8KLSAJc2RtYV9idWZfb2Zmc2V0ID0gcWVfbXVyYW1fYWxsb2MoNTEyICogMiwgNDA5Nik7Ci0JaWYgKElTX0VSUl9WQUxVRShzZG1hX2J1Zl9vZmZzZXQpKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoSVNfRVJSX1ZBTFVFKHNkbWFfYnVmX29mZnNldCkpIHsKKwkJc2RtYV9idWZfb2Zmc2V0ID0gcWVfbXVyYW1fYWxsb2MoNTEyICogMiwgNDA5Nik7CisJCWlmIChJU19FUlJfVkFMVUUoc2RtYV9idWZfb2Zmc2V0KSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW91dF9iZTMyKCZzZG1hLT5zZGViY3IsICh1MzIpIHNkbWFfYnVmX29mZnNldCAmIFFFX1NERUJDUl9CQV9NQVNLKTsKICAJb3V0X2JlMzIoJnNkbWEtPnNkbXIsIChRRV9TRE1SX0dMQl8xX01TSyB8CkBAIC0zNDksNyArMzQwLDcgQEAKIH0KIAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIFJJU0NzIHdlIHN1cHBvcnQgKi8KLSNkZWZpbmUgTUFYX1FFX1JJU0MgICAgIDIKKyNkZWZpbmUgTUFYX1FFX1JJU0MgICAgIDQKIAogLyogRmlybXdhcmUgaW5mb3JtYXRpb24gc3RvcmVkIGhlcmUgZm9yIHFlX2dldF9maXJtd2FyZV9pbmZvKCkgKi8KIHN0YXRpYyBzdHJ1Y3QgcWVfZmlybXdhcmVfaW5mbyBxZV9maXJtd2FyZV9pbmZvOwpAQCAtNjU4LDMgKzY0OSwzNSBAQAogCXJldHVybiBudW1fb2Zfc251bXM7CiB9CiBFWFBPUlRfU1lNQk9MKHFlX2dldF9udW1fb2Zfc251bXMpOworCisjaWYgZGVmaW5lZChDT05GSUdfU1VTUEVORCkgJiYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgpCitzdGF0aWMgaW50IHFlX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlpZiAoIXFlX2FsaXZlX2R1cmluZ19zbGVlcCgpKQorCQlxZV9yZXNldCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcWVfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wscWUiLCB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHFlX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUgPSAiZnNsLXFlIiwKKwkubWF0Y2hfdGFibGUgPSBxZV9pZHMsCisJLnByb2JlID0gcWVfcHJvYmUsCisJLnJlc3VtZSA9IHFlX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFlX2Rydl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcWVfZHJpdmVyKTsKK30KK2RldmljZV9pbml0Y2FsbChxZV9kcnZfaW5pdCk7CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfU1VTUEVORCkgJiYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgpICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwppbmRleCAzZmFhNDJlLi4yYWNjOTI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBxZV9pYyAqcWVfaWNfZnJvbV9pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7Ci0JcmV0dXJuIGlycV9kZXNjW3ZpcnFdLmNoaXBfZGF0YTsKKwlyZXR1cm4gaXJxX3RvX2Rlc2ModmlycSktPmNoaXBfZGF0YTsKIH0KIAogI2RlZmluZSB2aXJxX3RvX2h3KHZpcnEpCSgodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnEpCkBAIC0yMzcsNyArMjM3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBxZV9pY19pcnFfY2hpcCA9IHsKLQkudHlwZW5hbWUgPSAiIFFFSUMgICIsCisJLm5hbWUgPSAiIFFFSUMgICIsCiAJLnVubWFzayA9IHFlX2ljX3VubWFza19pcnEsCiAJLm1hc2sgPSBxZV9pY19tYXNrX2lycSwKIAkubWFza19hY2sgPSBxZV9pY19tYXNrX2lycSwKQEAgLTI2Myw3ICsyNjMsNyBAQAogCWNoaXAgPSAmcWVfaWMtPmhjX2lycTsKIAogCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIHFlX2ljKTsKLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJaXJxX3RvX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CiAKQEAgLTI3MSw3ICsyNzEsNyBAQAogfQogCiBzdGF0aWMgaW50IHFlX2ljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgIHUzMiAqIGludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJICAgIGNvbnN0IHUzMiAqIGludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJICAgIGlycV9od19udW1iZXJfdCAqIG91dF9od2lycSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKaW5kZXggY2YyNDRhNC4uNTk1MDM0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdHNpMTA4X3BjaV9pcnEgPSB7Ci0JLnR5cGVuYW1lID0gInRzaTEwOF9QQ0lfaW50IiwKKwkubmFtZSA9ICJ0c2kxMDhfUENJX2ludCIsCiAJLm1hc2sgPSB0c2kxMDhfcGNpX2lycV9kaXNhYmxlLAogCS5hY2sgPSB0c2kxMDhfcGNpX2lycV9hY2ssCiAJLmVuZCA9IHRzaTEwOF9wY2lfaXJxX2VuZCwKQEAgLTM4NCw3ICszODQsNyBAQAogfTsKIAogc3RhdGljIGludCBwY2lfaXJxX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCSAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiB7CiAJKm91dF9od2lycSA9IGludHNwZWNbMF07CkBAIC0zOTgsNyArMzk4LDcgQEAKIAlEQkcoIiVzKCVkLCAweCVseClcbiIsIF9fZnVuY19fLCB2aXJxLCBodyk7CiAJaWYgKCh2aXJxID49IDEpICYmICh2aXJxIDw9IDQpKXsKIAkJaXJxID0gdmlycSArIElSUV9QQ0lfSU5UQURfQkFTRSAtIDE7Ci0JCWdldF9pcnFfZGVzYyhpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCQlpcnFfdG9fZGVzYyhpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXAoaXJxLCAmdHNpMTA4X3BjaV9pcnEpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCmluZGV4IDQ2NmNlOWEuLjZmMjIwYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwpAQCAtNTcsNyArNTcsNyBAQAogCiBzdGF0aWMgdm9pZCB1aWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CiAJc3RydWN0IHVpYyAqdWljID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CiAJdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcodmlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiBzdGF0aWMgdm9pZCB1aWNfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKIAlzdHJ1Y3QgdWljICp1aWMgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyh2aXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTI5LDcgKzEyOSw3IEBACiB7CiAJc3RydWN0IHVpYyAqdWljID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CiAJdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcodmlycSk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRyaWdnZXIsIHBvbGFyaXR5OwogCXUzMiB0ciwgcHIsIG1hc2s7CkBAIC0xNzcsNyArMTc3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB1aWNfaXJxX2NoaXAgPSB7Ci0JLnR5cGVuYW1lCT0gIiBVSUMgICIsCisJLm5hbWUJCT0gIiBVSUMgICIsCiAJLnVubWFzawkJPSB1aWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSB1aWNfbWFza19pcnEsCiAgCS5tYXNrX2Fjawk9IHVpY19tYXNrX2Fja19pcnEsCkBAIC0yMDIsNyArMjAyLDcgQEAKIH0KIAogc3RhdGljIGludCB1aWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCQkgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF90eXBlKQogCiB7CkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogCWludCBzcmM7CiAJaW50IHN1YnZpcnE7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpCiAJCWRlc2MtPmNoaXAtPm1hc2sodmlycSk7CiAJZWxzZQogCQlkZXNjLT5jaGlwLT5tYXNrX2Fjayh2aXJxKTsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCW1zciA9IG1mZGNyKHVpYy0+ZGNyYmFzZSArIFVJQ19NU1IpOwogCWlmICghbXNyKSAvKiBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KQEAgLTI0MiwxMiArMjQyLDEyIEBACiAJZ2VuZXJpY19oYW5kbGVfaXJxKHN1YnZpcnEpOwogCiB1aWNfaXJxX3JldDoKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpCiAJCWRlc2MtPmNoaXAtPmFjayh2aXJxKTsKIAlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpICYmIGRlc2MtPmNoaXAtPnVubWFzaykKIAkJZGVzYy0+Y2hpcC0+dW5tYXNrKHZpcnEpOwotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogfQogCiBzdGF0aWMgc3RydWN0IHVpYyAqIF9faW5pdCB1aWNfaW5pdF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWxpbnhfaW50Yy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWxpbnhfaW50Yy5jCmluZGV4IDQwZWRhZDUuLjFlMGNjZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGlsaW54X2ludGMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpbGlueF9pbnRjLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAogc3RhdGljIGludCB4aWxpbnhfaW50Y19zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKIAlkZXNjLT5zdGF0dXMgfD0gZmxvd190eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKQEAgLTEwNiw3ICsxMDYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpbGlueF9pbnRjX2xldmVsX2lycWNoaXAgPSB7Ci0JLnR5cGVuYW1lID0gIlhpbGlueCBMZXZlbCBJTlRDIiwKKwkubmFtZSA9ICJYaWxpbnggTGV2ZWwgSU5UQyIsCiAJLm1hc2sgPSB4aWxpbnhfaW50Y19tYXNrLAogCS5tYXNrX2FjayA9IHhpbGlueF9pbnRjX21hc2ssCiAJLnVubWFzayA9IHhpbGlueF9pbnRjX2xldmVsX3VubWFzaywKQEAgLTEzMyw3ICsxMzMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpbGlueF9pbnRjX2VkZ2VfaXJxY2hpcCA9IHsKLQkudHlwZW5hbWUgPSAiWGlsaW54IEVkZ2UgIElOVEMiLAorCS5uYW1lID0gIlhpbGlueCBFZGdlICBJTlRDIiwKIAkubWFzayA9IHhpbGlueF9pbnRjX21hc2ssCiAJLnVubWFzayA9IHhpbGlueF9pbnRjX2VkZ2VfdW5tYXNrLAogCS5hY2sgPSB4aWxpbnhfaW50Y19lZGdlX2FjaywKQEAgLTE0OCw3ICsxNDgsNyBAQAogICogeGlsaW54X2ludGNfeGxhdGUgLSB0cmFuc2xhdGUgdmlycSMgZnJvbSBkZXZpY2UgdHJlZSBpbnRlcnJ1cHRzIHByb3BlcnR5CiAgKi8KIHN0YXRpYyBpbnQgeGlsaW54X2ludGNfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJCXUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkJY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKIAkJCQlpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKIAkJCQl1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCBiZGJlOTZjLi40ZTYxNTJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0xNjQxLDcgKzE2NDEsOCBAQAogCQkJICAgICAgIHB0ckxwUGFjYS0+c2F2ZWRfc3JyMCwgcHRyTHBQYWNhLT5zYXZlZF9zcnIxKTsKIAkJCXByaW50ZigiICAgIFNhdmVkIEdwcjM9JS4xNmx4ICBTYXZlZCBHcHI0PSUuMTZseCBcbiIsCiAJCQkgICAgICAgcHRyTHBQYWNhLT5zYXZlZF9ncHIzLCBwdHJMcFBhY2EtPnNhdmVkX2dwcjQpOwotCQkJcHJpbnRmKCIgICAgU2F2ZWQgR3ByNT0lLjE2bHggXG4iLCBwdHJMcFBhY2EtPnNhdmVkX2dwcjUpOworCQkJcHJpbnRmKCIgICAgU2F2ZWQgR3ByNT0lLjE2bHggXG4iLAorCQkJCXB0ckxwUGFjYS0+Z3ByNV9kd29yZC5zYXZlZF9ncHI1KTsKIAkJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCmluZGV4IDQ5NTU4OTkuLjVjOTE5OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwpAQCAtNTUxLDcgKzU1MSw3IEBACiAJcmV0dXJuIGFwcGxkYXRhX3Jlc3RvcmUoZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGFwcGxkYXRhX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhcHBsZGF0YV9wbV9vcHMgPSB7CiAJLmZyZWV6ZQkJPSBhcHBsZGF0YV9mcmVlemUsCiAJLnRoYXcJCT0gYXBwbGRhdGFfdGhhdywKIAkucmVzdG9yZQk9IGFwcGxkYXRhX3Jlc3RvcmUsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNjExODg5MC4uNmJlNDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKElTX0VSUihzY3R4LT5mYWxsYmFjay5jaXApKSB7CiAJCXByX2VycigiQWxsb2NhdGluZyBBRVMgZmFsbGJhY2sgYWxnb3JpdGhtICVzIGZhaWxlZFxuIiwKIAkJICAgICAgIG5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihzY3R4LT5mYWxsYmFjay5ibGspOworCQlyZXR1cm4gUFRSX0VSUihzY3R4LT5mYWxsYmFjay5jaXApOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggNzdkZjcyNi4uMmI5MmQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJICAgICAgIExQQVJfTkFNRV9MRU4pOwogCUVCQ0FTQyhuYW1lLCBMUEFSX05BTUVfTEVOKTsKIAluYW1lW0xQQVJfTkFNRV9MRU5dID0gMDsKLQlzdHJzdHJpcChuYW1lKTsKKwlzdHJpbShuYW1lKTsKIH0KIAogc3RydWN0IGNwdV9pbmZvIHsKQEAgLTUyMyw3ICs1MjMsNyBAQAogCW1lbWNweShuYW1lLCBkaWFnMjI0X2NwdV9uYW1lcyArICgoaW5kZXggKyAxKSAqIENQVV9OQU1FX0xFTiksCiAJCUNQVV9OQU1FX0xFTik7CiAJbmFtZVtDUFVfTkFNRV9MRU5dID0gMDsKLQlzdHJzdHJpcChuYW1lKTsKKwlzdHJpbShuYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYwppbmRleCBkMDFmYzhmNy4uZjBiMGQzMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCS8qIGd1ZXN0IGRpciAqLwogCW1lbWNweShndWVzdF9uYW1lLCBkYXRhLT5ndWVzdF9uYW1lLCBOQU1FX0xFTik7CiAJRUJDQVNDKGd1ZXN0X25hbWUsIE5BTUVfTEVOKTsKLQlzdHJzdHJpcChndWVzdF9uYW1lKTsKKwlzdHJpbShndWVzdF9uYW1lKTsKIAlndWVzdF9kaXIgPSBoeXBmc19ta2RpcihzYiwgc3lzdGVtc19kaXIsIGd1ZXN0X25hbWUpOwogCWlmIChJU19FUlIoZ3Vlc3RfZGlyKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ3Vlc3RfZGlyKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MGVlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBlODg1NDQyLi4zNTRkNDI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xNTUsNyArMTU1LDYgQEAKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIENPUkVfRFVNUF9VU0VfUkVHU0VUCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKIAogLyogVGhpcyBpcyB0aGUgbG9jYXRpb24gdGhhdCBhbiBFVF9EWU4gcHJvZ3JhbSBpcyBsb2FkZWQgaWYgZXhlYydlZC4gIFR5cGljYWwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggYzlhZjBkMTkuLmE1ODc5MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC01MiwyNyArNTIsMjcgQEAKICAqICh0aGUgdHlwZSBkZWZpbml0aW9ucyBhcmUgaW4gYXNtL3NwaW5sb2NrX3R5cGVzLmgpCiAgKi8KIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSAoKHgpLT5vd25lcl9jcHUgIT0gMCkKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCi0JZG8geyB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpIFwKLQkJIF9yYXdfc3Bpbl9yZWxheChsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KSAoKHgpLT5vd25lcl9jcHUgIT0gMCkKKyNkZWZpbmUgYXJjaF9zcGluX3VubG9ja193YWl0KGxvY2spIFwKKwlkbyB7IHdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKSBcCisJCSBhcmNoX3NwaW5fcmVsYXgobG9jayk7IH0gd2hpbGUgKDApCiAKLWV4dGVybiB2b2lkIF9yYXdfc3Bpbl9sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKik7Ci1leHRlcm4gdm9pZCBfcmF3X3NwaW5fbG9ja193YWl0X2ZsYWdzKHJhd19zcGlubG9ja190ICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9ja19yZXRyeShyYXdfc3BpbmxvY2tfdCAqKTsKLWV4dGVybiB2b2lkIF9yYXdfc3Bpbl9yZWxheChyYXdfc3BpbmxvY2tfdCAqbG9jayk7CitleHRlcm4gdm9pZCBhcmNoX3NwaW5fbG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqKTsKK2V4dGVybiB2b2lkIGFyY2hfc3Bpbl9sb2NrX3dhaXRfZmxhZ3MoYXJjaF9zcGlubG9ja190ICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIGludCBhcmNoX3NwaW5fdHJ5bG9ja19yZXRyeShhcmNoX3NwaW5sb2NrX3QgKik7CitleHRlcm4gdm9pZCBhcmNoX3NwaW5fcmVsYXgoYXJjaF9zcGlubG9ja190ICpsb2NrKTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbHApCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICpscCkKIHsKIAlpbnQgb2xkOwogCiAJb2xkID0gX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCB+c21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpZiAobGlrZWx5KG9sZCA9PSAwKSkKIAkJcmV0dXJuOwotCV9yYXdfc3Bpbl9sb2NrX3dhaXQobHApOworCWFyY2hfc3Bpbl9sb2NrX3dhaXQobHApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpscCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9ja19mbGFncyhhcmNoX3NwaW5sb2NrX3QgKmxwLAogCQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlpbnQgb2xkOwpAQCAtODAsMjAgKzgwLDIwIEBACiAJb2xkID0gX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCB+c21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpZiAobGlrZWx5KG9sZCA9PSAwKSkKIAkJcmV0dXJuOwotCV9yYXdfc3Bpbl9sb2NrX3dhaXRfZmxhZ3MobHAsIGZsYWdzKTsKKwlhcmNoX3NwaW5fbG9ja193YWl0X2ZsYWdzKGxwLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbHApCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxwKQogewogCWludCBvbGQ7CiAKIAlvbGQgPSBfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsIH5zbXBfcHJvY2Vzc29yX2lkKCkpOwogCWlmIChsaWtlbHkob2xkID09IDApKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gX3Jhd19zcGluX3RyeWxvY2tfcmV0cnkobHApOworCXJldHVybiBhcmNoX3NwaW5fdHJ5bG9ja19yZXRyeShscCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbHApCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxwKQogewogCV9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgbHAtPm93bmVyX2NwdSwgMCk7CiB9CkBAIC0xMTMsMjIgKzExMywyMiBAQAogICogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/CiAgKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlvbi4KICAqLwotI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHgpICgoaW50KSh4KS0+bG9jayA+PSAwKQorI2RlZmluZSBhcmNoX3JlYWRfY2FuX2xvY2soeCkgKChpbnQpKHgpLT5sb2NrID49IDApCiAKIC8qKgogICogd3JpdGVfY2FuX2xvY2sgLSB3b3VsZCB3cml0ZV90cnlsb2NrKCkgc3VjY2VlZD8KICAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgogICovCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHgpICgoeCktPmxvY2sgPT0gMCkKKyNkZWZpbmUgYXJjaF93cml0ZV9jYW5fbG9jayh4KSAoKHgpLT5sb2NrID09IDApCiAKLWV4dGVybiB2b2lkIF9yYXdfcmVhZF9sb2NrX3dhaXQocmF3X3J3bG9ja190ICpscCk7Ci1leHRlcm4gdm9pZCBfcmF3X3JlYWRfbG9ja193YWl0X2ZsYWdzKHJhd19yd2xvY2tfdCAqbHAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotZXh0ZXJuIGludCBfcmF3X3JlYWRfdHJ5bG9ja19yZXRyeShyYXdfcndsb2NrX3QgKmxwKTsKLWV4dGVybiB2b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0KHJhd19yd2xvY2tfdCAqbHApOwotZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV9sb2NrX3dhaXRfZmxhZ3MocmF3X3J3bG9ja190ICpscCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci1leHRlcm4gaW50IF9yYXdfd3JpdGVfdHJ5bG9ja19yZXRyeShyYXdfcndsb2NrX3QgKmxwKTsKK2V4dGVybiB2b2lkIF9yYXdfcmVhZF9sb2NrX3dhaXQoYXJjaF9yd2xvY2tfdCAqbHApOworZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX2xvY2tfd2FpdF9mbGFncyhhcmNoX3J3bG9ja190ICpscCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gaW50IF9yYXdfcmVhZF90cnlsb2NrX3JldHJ5KGFyY2hfcndsb2NrX3QgKmxwKTsKK2V4dGVybiB2b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0KGFyY2hfcndsb2NrX3QgKmxwKTsKK2V4dGVybiB2b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0X2ZsYWdzKGFyY2hfcndsb2NrX3QgKmxwLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiBpbnQgX3Jhd193cml0ZV90cnlsb2NrX3JldHJ5KGFyY2hfcndsb2NrX3QgKmxwKTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGludCBvbGQ7CiAJb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQlfcmF3X3JlYWRfbG9ja193YWl0KHJ3KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9ja19mbGFncyhyYXdfcndsb2NrX3QgKnJ3LCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKGFyY2hfcndsb2NrX3QgKnJ3LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXVuc2lnbmVkIGludCBvbGQ7CiAJb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlfcmF3X3JlYWRfbG9ja193YWl0X2ZsYWdzKHJ3LCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgaW50IG9sZCwgY21wOwogCkBAIC0xNTUsMjQgKzE1NSwyNCBAQAogCX0gd2hpbGUgKGNtcCAhPSBvbGQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlpZiAodW5saWtlbHkoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkgIT0gMCkpCiAJCV9yYXdfd3JpdGVfbG9ja193YWl0KHJ3KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocmF3X3J3bG9ja190ICpydywgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MoYXJjaF9yd2xvY2tfdCAqcncsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJaWYgKHVubGlrZWx5KF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIDAsIDB4ODAwMDAwMDApICE9IDApKQogCQlfcmF3X3dyaXRlX2xvY2tfd2FpdF9mbGFncyhydywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMHg4MDAwMDAwMCwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgaW50IG9sZDsKIAlvbGQgPSBydy0+bG9jayAmIDB4N2ZmZmZmZmZVOwpAQCAtMTgxLDE0ICsxODEsMTQgQEAKIAlyZXR1cm4gX3Jhd19yZWFkX3RyeWxvY2tfcmV0cnkocncpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd193cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3dyaXRlX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJaWYgKGxpa2VseShfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCAwLCAweDgwMDAwMDAwKSA9PSAwKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIF9yYXdfd3JpdGVfdHJ5bG9ja19yZXRyeShydyk7CiB9CiAKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggNjU0YWJjNC4uOWM3NjY1NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTcsMTQgKzcsMTQgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBvd25lcl9jcHU7Ci19IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpIHJhd19zcGlubG9ja190OworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKSBhcmNoX3NwaW5sb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CisjZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwotfSByYXdfcndsb2NrX3Q7Cit9IGFyY2hfcndsb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgMCB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGNiNTIzMmQuLjE5MmE3MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTI2OSw3ICsyNjksOCBAQAogI2RlZmluZQlfX05SX3B3cml0ZXYJCTMyOQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzMAogI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzEKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzMyCisjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCTMzMgorI2RlZmluZSBOUl9zeXNjYWxscyAzMzMKIAogLyogCiAgKiBUaGVyZSBhcmUgc29tZSBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbm90IHByZXNlbnQgb24gNjQgYml0LCBzb21lCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggMzBkZTJkMC4uZmFlYWNjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtMTg1MywzICsxODUzLDEyIEBACiAJbGxndHIJJXIzLCVyMwkJCSMgY29tcGF0X3VwdHJfdCAqCiAJbGxndHIJJXI0LCVyNAkJCSMgY29tcGF0X3VwdHJfdCAqCiAJamcJc3lzMzJfZXhlY3ZlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAorCisJLmdsb2JsCWNvbXBhdF9zeXNfcmVjdm1tc2dfd3JhcHBlcgorY29tcGF0X3N5c19yZWN2bW1zZ193cmFwcGVyOgorCWxnZnIJJXIyLCVyMgkJCSMgaW50CisJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IGNvbXBhdF9tbXNnaGRyICoKKwlsbGdmcgklcjQsJXI0CQkJIyB1bnNpZ25lZCBpbnQKKwlsbGdmcgklcjUsJXI1CQkJIyB1bnNpZ25lZCBpbnQKKwlsbGd0cgklcjYsJXI2CQkJIyBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjICoKKwlqZwljb21wYXRfc3lzX3JlY3ZtbXNnCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKaW5kZXggMDcxYzgxZi4uMDE2ODQ3MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTExNzgsNyArMTE3OSw3IEBACiB7CiAJaW50IHJjOwogCi0JZm9yKDsgaXNzcGFjZSgqYnVmKTsgYnVmKyspOworCWJ1ZiA9IHNraXBfc3BhY2VzKGJ1Zik7CiAJcmMgPSBzaW1wbGVfc3RydG91bChidWYsICZidWYsIDEwKTsKIAlpZigqYnVmKXsKIAkJcmMgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggNDg5MGFjNi4uNGQ3MzI5NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cm5jcHkoX3ZhbHVlLCBidWYsIHNpemVvZihfdmFsdWUpIC0gMSk7CQkJXAotCXN0cnN0cmlwKF92YWx1ZSk7CQkJCQkJXAorCXN0cmltKF92YWx1ZSk7CQkJCQkJCVwKIAlyZXR1cm4gbGVuOwkJCQkJCQlcCiB9CQkJCQkJCQkJXAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX2F0dHIgPQkJXApAQCAtNDcyLDcgKzQ3Miw3IEBACiAJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIjdW5rbm93biNcbiIpOwogCW1lbWNweShsb2FkcGFybSwgJnNjbHBfaXBsX2luZm8ubG9hZHBhcm0sIExPQURQQVJNX0xFTik7CiAJRUJDQVNDKGxvYWRwYXJtLCBMT0FEUEFSTV9MRU4pOwotCXN0cnN0cmlwKGxvYWRwYXJtKTsKKwlzdHJpbShsb2FkcGFybSk7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBsb2FkcGFybSk7CiB9CiAKQEAgLTc3Niw3ICs3NzYsNyBAQAogCW1lbWNweShsb2FkcGFybSwgaWJwLT5pcGxfaW5mby5jY3cubG9hZF9wYXJtLCBMT0FEUEFSTV9MRU4pOwogCUVCQ0FTQyhsb2FkcGFybSwgTE9BRFBBUk1fTEVOKTsKIAlsb2FkcGFybVtMT0FEUEFSTV9MRU5dID0gMDsKLQlzdHJzdHJpcChsb2FkcGFybSk7CisJc3RyaW0obG9hZHBhcm0pOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWlwbF9nZW5lcmljX2xvYWRwYXJtX3Nob3coc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwYiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDY1M2M2YTEuLjEzODE1ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJCS5zZXQgPSBzMzkwX2ZwcmVnc19zZXQsCiAJfSwKIAlbUkVHU0VUX0dFTkVSQUxfRVhURU5ERURdID0gewotCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlhTVEFUVVMsCisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1MzOTBfSElHSF9HUFJTLAogCQkubiA9IHNpemVvZihzMzkwX2NvbXBhdF9yZWdzX2hpZ2gpIC8gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAogCQkuc2l6ZSA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKIAkJLmFsaWduID0gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDMwZWNhMDcuLjRmMjkyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTM0MCwzICszNDAsNCBAQAogU1lTQ0FMTChzeXNfcHdyaXRldixzeXNfcHdyaXRldixjb21wYXRfc3lzX3B3cml0ZXZfd3JhcHBlcikKIFNZU0NBTEwoc3lzX3J0X3Rnc2lncXVldWVpbmZvLHN5c19ydF90Z3NpZ3F1ZXVlaW5mbyxjb21wYXRfc3lzX3J0X3Rnc2lncXVldWVpbmZvX3dyYXBwZXIpIC8qIDMzMCAqLwogU1lTQ0FMTChzeXNfcGVyZl9ldmVudF9vcGVuLHN5c19wZXJmX2V2ZW50X29wZW4sc3lzX3BlcmZfZXZlbnRfb3Blbl93cmFwcGVyKQorU1lTQ0FMTChzeXNfcmVjdm1tc2csc3lzX3JlY3ZtbXNnLGNvbXBhdF9zeXNfcmVjdm1tc2dfd3JhcHBlcikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCBjMmU0MmNjLi42ZTdhZDYzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC0zODIsNyArMzgyLDcgQEAKIAkJCQkJU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApewogCQlyZXR1cm47CiAJfQotCWlmICgoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgIT0gMCkKKwlpZiAodHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQKSkKIAkJZm9yY2Vfc2lnKFNJR1RSQVAsIGN1cnJlbnQpOwogfQogCkBAIC00ODMsNyArNDgzLDcgQEAKIAkJaWYgKGdldF91c2VyKCooKF9fdTE2ICopIG9wY29kZSksIChfX3UxNiBfX3VzZXIgKikgbG9jYXRpb24pKQogCQkJcmV0dXJuOwogCQlpZiAoKigoX191MTYgKikgb3Bjb2RlKSA9PSBTMzkwX0JSRUFLUE9JTlRfVTE2KSB7Ci0JCQlpZiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkKKwkJCWlmICh0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKGN1cnJlbnQsIFNJR1RSQVApKQogCQkJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIAkJCWVsc2UKIAkJCQlzaWduYWwgPSBTSUdJTEw7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKaW5kZXggZjdlMGQzMC4uMTA3NTRhMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCisrKyBiL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYwpAQCAtMzksNyArMzksNyBAQAogCQlfcmF3X3lpZWxkKCk7CiB9CiAKLXZvaWQgX3Jhd19zcGluX2xvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbHApCit2b2lkIGFyY2hfc3Bpbl9sb2NrX3dhaXQoYXJjaF9zcGlubG9ja190ICpscCkKIHsKIAlpbnQgY291bnQgPSBzcGluX3JldHJ5OwogCXVuc2lnbmVkIGludCBjcHUgPSB+c21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtNTEsMTUgKzUxLDE1IEBACiAJCQkJX3Jhd195aWVsZF9jcHUofm93bmVyKTsKIAkJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJfQotCQlpZiAoX19yYXdfc3Bpbl9pc19sb2NrZWQobHApKQorCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCiAJCQljb250aW51ZTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKQogCQkJcmV0dXJuOwogCX0KIH0KLUVYUE9SVF9TWU1CT0woX3Jhd19zcGluX2xvY2tfd2FpdCk7CitFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl9sb2NrX3dhaXQpOwogCi12b2lkIF9yYXdfc3Bpbl9sb2NrX3dhaXRfZmxhZ3MocmF3X3NwaW5sb2NrX3QgKmxwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQordm9pZCBhcmNoX3NwaW5fbG9ja193YWl0X2ZsYWdzKGFyY2hfc3BpbmxvY2tfdCAqbHAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gfnNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwogCQkJY291bnQgPSBzcGluX3JldHJ5OwogCQl9Ci0JCWlmIChfX3Jhd19zcGluX2lzX2xvY2tlZChscCkpCisJCWlmIChhcmNoX3NwaW5faXNfbG9ja2VkKGxwKSkKIAkJCWNvbnRpbnVlOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApCkBAIC04MCwzMiArODAsMzIgQEAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIH0KLUVYUE9SVF9TWU1CT0woX3Jhd19zcGluX2xvY2tfd2FpdF9mbGFncyk7CitFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl9sb2NrX3dhaXRfZmxhZ3MpOwogCi1pbnQgX3Jhd19zcGluX3RyeWxvY2tfcmV0cnkocmF3X3NwaW5sb2NrX3QgKmxwKQoraW50IGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KGFyY2hfc3BpbmxvY2tfdCAqbHApCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IH5zbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGNvdW50OwogCiAJZm9yIChjb3VudCA9IHNwaW5fcmV0cnk7IGNvdW50ID4gMDsgY291bnQtLSkgewotCQlpZiAoX19yYXdfc3Bpbl9pc19sb2NrZWQobHApKQorCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCiAJCQljb250aW51ZTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKQogCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fdHJ5bG9ja19yZXRyeSk7CitFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KTsKIAotdm9pZCBfcmF3X3NwaW5fcmVsYXgocmF3X3NwaW5sb2NrX3QgKmxvY2spCit2b2lkIGFyY2hfc3Bpbl9yZWxheChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IGxvY2stPm93bmVyX2NwdTsKIAlpZiAoY3B1ICE9IDApCiAJCV9yYXdfeWllbGRfY3B1KH5jcHUpOwogfQotRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fcmVsYXgpOworRVhQT1JUX1NZTUJPTChhcmNoX3NwaW5fcmVsYXgpOwogCi12b2lkIF9yYXdfcmVhZF9sb2NrX3dhaXQocmF3X3J3bG9ja190ICpydykKK3ZvaWQgX3Jhd19yZWFkX2xvY2tfd2FpdChhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCV9yYXdfeWllbGQoKTsKIAkJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJfQotCQlpZiAoIV9fcmF3X3JlYWRfY2FuX2xvY2socncpKQorCQlpZiAoIWFyY2hfcmVhZF9jYW5fbG9jayhydykpCiAJCQljb250aW51ZTsKIAkJb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkgPT0gb2xkKQpAQCAtMTI0LDcgKzEyNCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfcmVhZF9sb2NrX3dhaXQpOwogCi12b2lkIF9yYXdfcmVhZF9sb2NrX3dhaXRfZmxhZ3MocmF3X3J3bG9ja190ICpydywgdW5zaWduZWQgbG9uZyBmbGFncykKK3ZvaWQgX3Jhd19yZWFkX2xvY2tfd2FpdF9mbGFncyhhcmNoX3J3bG9ja190ICpydywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJCV9yYXdfeWllbGQoKTsKIAkJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJfQotCQlpZiAoIV9fcmF3X3JlYWRfY2FuX2xvY2socncpKQorCQlpZiAoIWFyY2hfcmVhZF9jYW5fbG9jayhydykpCiAJCQljb250aW51ZTsKIAkJb2xkID0gcnctPmxvY2sgJiAweDdmZmZmZmZmVTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTE0NSwxMyArMTQ1LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfcmVhZF9sb2NrX3dhaXRfZmxhZ3MpOwogCi1pbnQgX3Jhd19yZWFkX3RyeWxvY2tfcmV0cnkocmF3X3J3bG9ja190ICpydykKK2ludCBfcmF3X3JlYWRfdHJ5bG9ja19yZXRyeShhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKLQkJaWYgKCFfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KSkKKwkJaWYgKCFhcmNoX3JlYWRfY2FuX2xvY2socncpKQogCQkJY29udGludWU7CiAJCW9sZCA9IHJ3LT5sb2NrICYgMHg3ZmZmZmZmZlU7CiAJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCBvbGQsIG9sZCArIDEpID09IG9sZCkKQEAgLTE2MSw3ICsxNjEsNyBAQAogfQogRVhQT1JUX1NZTUJPTChfcmF3X3JlYWRfdHJ5bG9ja19yZXRyeSk7CiAKLXZvaWQgX3Jhd193cml0ZV9sb2NrX3dhaXQocmF3X3J3bG9ja190ICpydykKK3ZvaWQgX3Jhd193cml0ZV9sb2NrX3dhaXQoYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIApAQCAtMTcwLDcgKzE3MCw3IEBACiAJCQlfcmF3X3lpZWxkKCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KLQkJaWYgKCFfX3Jhd193cml0ZV9jYW5fbG9jayhydykpCisJCWlmICghYXJjaF93cml0ZV9jYW5fbG9jayhydykpCiAJCQljb250aW51ZTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIDAsIDB4ODAwMDAwMDApID09IDApCiAJCQlyZXR1cm47CkBAIC0xNzgsNyArMTc4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woX3Jhd193cml0ZV9sb2NrX3dhaXQpOwogCi12b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0X2ZsYWdzKHJhd19yd2xvY2tfdCAqcncsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit2b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0X2ZsYWdzKGFyY2hfcndsb2NrX3QgKnJ3LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKQEAgLTE4OCw3ICsxODgsNyBAQAogCQkJX3Jhd195aWVsZCgpOwogCQkJY291bnQgPSBzcGluX3JldHJ5OwogCQl9Ci0JCWlmICghX19yYXdfd3JpdGVfY2FuX2xvY2socncpKQorCQlpZiAoIWFyY2hfd3JpdGVfY2FuX2xvY2socncpKQogCQkJY29udGludWU7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCAwLCAweDgwMDAwMDAwKSA9PSAwKQpAQCAtMTk3LDEyICsxOTcsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woX3Jhd193cml0ZV9sb2NrX3dhaXRfZmxhZ3MpOwogCi1pbnQgX3Jhd193cml0ZV90cnlsb2NrX3JldHJ5KHJhd19yd2xvY2tfdCAqcncpCitpbnQgX3Jhd193cml0ZV90cnlsb2NrX3JldHJ5KGFyY2hfcndsb2NrX3QgKnJ3KQogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKLQkJaWYgKCFfX3Jhd193cml0ZV9jYW5fbG9jayhydykpCisJCWlmICghYXJjaF93cml0ZV9jYW5fbG9jayhydykpCiAJCQljb250aW51ZTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIDAsIDB4ODAwMDAwMDApID09IDApCiAJCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcwZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggY2FhYmEyNC4uMWQ1NDVkMCAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE0LDEwICsxNCwxMiBAQAogZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisjZGVmaW5lIFBHX2RjYWNoZV9kaXJ0eSAgICAgICAgIFBHX2FyY2hfMQogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDAKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8ge30gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2RlbGF5LmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2RlbGF5LmgKaW5kZXggNjcyNmVjMS4uNTI5ZTQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9kZWxheS5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vZGVsYXkuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FTTV9TQ09SRV9ERUxBWV9ICiAjZGVmaW5lIF9BU01fU0NPUkVfREVMQVlfSAogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KKwogc3RhdGljIGlubGluZSB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKIHsKIAkvKiAzIGN5Y2xlcyBwZXIgbG9vcC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDQzNTI2ZDkuLmY0NzhjZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNjEsNyArNjEsNiBAQAogc3RydWN0IHB0X3JlZ3M7CiAKICNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJUEFHRV9TSVpFCiAKIC8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggZDkyYTVhMi4uMWU5YWRlOCAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTc0LDcgKzc0LDcgQEAKICNkZWZpbmUgcGFnZV90b19idXMocGFnZSkJKHBhZ2VfdG9fcGh5cyhwYWdlKSkKICNkZWZpbmUgcGh5c190b19wYWdlKHBhZGRyKQkocGZuX3RvX3BhZ2UocGh5c190b19wZm4ocGFkZHIpKSkKIAotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IG1pbl9sb3dfcGZuICYmIChwZm4pIDwgbWF4X21hcG5yKQorI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKCgocGZuKSA+PSBtaW5fbG93X3BmbikgJiYgKChwZm4pIDwgbWF4X2xvd19wZm4pKQogCiAjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJKFBBR0VfT0ZGU0VUID4+IFBBR0VfU0hJRlQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUva2VybmVsL3NldHVwLmMgYi9hcmNoL3Njb3JlL2tlcm5lbC9zZXR1cC5jCmluZGV4IDZhMjUwM2MuLjZmODk4YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zY29yZS9rZXJuZWwvc2V0dXAuYwpAQCAtNDksNiArNDksNyBAQAogCiAJbWluX2xvd19wZm4gPSBQRk5fVVAoTUVNT1JZX1NUQVJUKTsKIAltYXhfbG93X3BmbiA9IFBGTl9VUChNRU1PUllfU1RBUlQgKyBNRU1PUllfU0laRSk7CisJbWF4X21hcG5yID0gbWF4X2xvd19wZm4gLSBtaW5fbG93X3BmbjsKIAogCS8qIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3Igd2l0aCBsb3cgbWVtb3J5IG9ubHkuICovCiAJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBzdGFydF9wZm4sCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL21tL2NhY2hlLmMgYi9hcmNoL3Njb3JlL21tL2NhY2hlLmMKaW5kZXggZGJhYzlkOS4uYjI1ZTk1NyAxMDA2NDQKLS0tIGEvYXJjaC9zY29yZS9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2NvcmUvbW0vY2FjaGUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKQEAgLTUxLDYgKzUyLDI3IEBACiAJfQogfQogCit2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKKwkJcmV0dXJuOworCWlmIChtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkgeworCQlzZXRfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJihwYWdlKS0+ZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBjb3VsZCBkZWxheSB0aGUgZmx1c2ggZm9yIHRoZSAhcGFnZV9tYXBwaW5nIGNhc2UgdG9vLiAgQnV0IHRoYXQKKwkgKiBjYXNlIGlzIGZvciBleGVjIGVudi9hcmcgcGFnZXMgYW5kIHRob3NlIGFyZSAlOTkgY2VydGFpbmx5IGdvaW5nIHRvCisJICogZ2V0IGZhdWx0ZWQgaW50byB0aGUgdGxiIChhbmQgdGh1cyBmbHVzaGVkKSBhbnl3YXlzLgorCSAqLworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCWZsdXNoX2RhdGFfY2FjaGVfcGFnZShhZGRyKTsKK30KKwogLyogY2FsbGVkIGJ5IHVwZGF0ZV9tbXVfY2FjaGUuICovCiB2b2lkIF9fdXBkYXRlX2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCXB0ZV90IHB0ZSkKQEAgLTYzLDExICs4NSwxMSBAQAogCWlmICh1bmxpa2VseSghcGZuX3ZhbGlkKHBmbikpKQogCQlyZXR1cm47CiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JaWYgKHBhZ2VfbWFwcGluZyhwYWdlKSAmJiB0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykpIHsKKwlpZiAocGFnZV9tYXBwaW5nKHBhZ2UpICYmIHRlc3RfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJihwYWdlKS0+ZmxhZ3MpKSB7CiAJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlpZiAoZXhlYykKIAkJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZShhZGRyKTsKLQkJY2xlYXJfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsKKwkJY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJihwYWdlKS0+ZmxhZ3MpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9tbS9pbml0LmMgYi9hcmNoL3Njb3JlL21tL2luaXQuYwppbmRleCA0ZTNkY2QwLi44YzE1YjJjIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL21tL2luaXQuYworKysgYi9hcmNoL3Njb3JlL21tL2luaXQuYwpAQCAtODMsNyArODMsNiBAQAogCXVuc2lnbmVkIGxvbmcgY29kZXNpemUsIHJlc2VydmVkcGFnZXMsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAl1bnNpZ25lZCBsb25nIHRtcCwgcmFtID0gMDsKIAotCW1heF9tYXBuciA9IG1heF9sb3dfcGZuOwogCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKikgX192YShtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsKIAl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtKCk7CiAJdG90YWxyYW1fcGFnZXMgLT0gc2V0dXBfemVyb19wYWdlKCk7CS8qIFNldHVwIHplcm9lZCBwYWdlcy4gKi8KQEAgLTEwMSwxMCArMTAwLDYgQEAKIAlkYXRhc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CiAJaW5pdHNpemUgPSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbjsKIAotCWtjbGlzdF9hZGQoJmtjb3JlX21lbSwgX192YSgwKSwgbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCk7Ci0Ja2NsaXN0X2FkZCgma2NvcmVfdm1hbGxvYywgKHZvaWQgKikgVk1BTExPQ19TVEFSVCwKLQkJCVZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCk7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVsZGsga2VybmVsIGNvZGUsICIKIAkJCSIlbGRrIHJlc2VydmVkLCAlbGRrIGRhdGEsICVsZGsgaW5pdCwgJWxkayBoaWdobWVtKVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nKSBucl9mcmVlX3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zaC9LY29uZmlnLmRlYnVnCmluZGV4IDU1OTA3YWYuLjEyZmVjNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKQEAgLTE5LDUwICsxOSw2IEBACiAJICBtYXNrIFJPTSBhbmQgbm8gZmxhc2ggKFdpbmRvd3NDRSBtYWNoaW5lcyBmYWxsIGluIHRoaXMgY2F0ZWdvcnkpLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEVBUkxZX1NDSUZfQ09OU09MRQotCWJvb2wgIlVzZSBlYXJseSBTQ0lGIGNvbnNvbGUiCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFuIGVhcmx5IGNvbnNvbGUgdXNpbmcgYSBmaXhlZCBTQ0lGIHBvcnQuIFRoaXMgY2FuCi0JICBiZSB1c2VkIGJ5IHBsYXRmb3JtcyB0aGF0IGFyZSBlaXRoZXIgbm90IHJ1bm5pbmcgdGhlIFNICi0JICBzdGFuZGFyZCBCSU9TLCBvciBkbyBub3Qgd2lzaCB0byB1c2UgdGhlIEJJT1MgY2FsbGJhY2tzIGZvciB0aGUKLQkgIHNlcmlhbCBJL08uCi0KLWNvbmZpZyBFQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVAotCWhleAotCWRlcGVuZHMgb24gRUFSTFlfU0NJRl9DT05TT0xFCi0JZGVmYXVsdCAiMHhhNDQwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzEyIHx8IENQVV9TVUJUWVBFX1NINzcwNQotCWRlZmF1bHQgIjB4YTQ0MzAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzcyMCB8fCBDUFVfU1VCVFlQRV9TSDc3MjEKLQlkZWZhdWx0ICIweGY4NDIwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKLQlkZWZhdWx0ICIweGZmODA0MDAwIiBpZiBDUFVfU1VCVFlQRV9NWEcKLQlkZWZhdWx0ICIweGZmYzMwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSFgzCi0JZGVmYXVsdCAiMHhmZmUwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc2MyB8fCBcCi0JCQkJQ1BVX1NVQlRZUEVfU0g3NzIyIHx8IENQVV9TVUJUWVBFX1NINzM2NiB8fCBcCi0JCQkJQ1BVX1NVQlRZUEVfU0g3MzQzCi0JZGVmYXVsdCAiMHhmZTRjMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzU3Ci0JZGVmYXVsdCAiMHhmZmViMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3Nzg1Ci0JZGVmYXVsdCAiMHhmZmViMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3Nzg2Ci0JZGVmYXVsdCAiMHhmZmZlODAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzCi0JZGVmYXVsdCAiMHhmZmZlOTgwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IENQVV9TVUJUWVBFX1NINzI2MwotCWRlZmF1bHQgIjB4ZmZlODAwMDAiIGlmIENQVV9TSDQKLQlkZWZhdWx0ICIweGE0MDAwMTUwIiBpZiBDUFVfU0gzCi0JZGVmYXVsdCAiMHgwMDAwMDAwMCIKLQotY29uZmlnIEVBUkxZX1BSSU5USwotCWJvb2wgIkVhcmx5IHByaW50ayBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0hfU1RBTkRBUkRfQklPUyB8fCBFQVJMWV9TQ0lGX0NPTlNPTEUKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIHJlZGlyZWN0IGtlcm5lbCBwcmludGsgbWVzc2FnZXMgdG8gdGhlIHNlcmlhbCBwb3J0Ci0JICB1c2VkIGJ5IHRoZSBTSC1JUEwgYm9vdGxvYWRlciwgc3RhcnRpbmcgdmVyeSBlYXJseSBpbiB0aGUgYm9vdAotCSAgcHJvY2VzcyBhbmQgZW5kaW5nIHdoZW4gdGhlIGtlcm5lbCdzIHNlcmlhbCBjb25zb2xlIGlzIGluaXRpYWxpc2VkLgotCSAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgcG9ydGluZyB0aGUga2VybmVsIHRvIGEgbmV3IG1hY2hpbmUsCi0JICB3aGVuIHRoZSBrZXJuZWwgbWF5IGNyYXNoIG9yIGhhbmcgYmVmb3JlIHRoZSBzZXJpYWwgY29uc29sZSBpcwotCSAgaW5pdGlhbGlzZWQuIElmIHVuc3VyZSwgc2F5IE4uCi0KLQkgIE9uIGRldmljZXMgdGhhdCBhcmUgcnVubmluZyBTSC1JUEwgYW5kIHdhbnQgdG8ga2VlcCB0aGUgcG9ydAotCSAgaW5pdGlhbGl6YXRpb24gY29uc2lzdGVudCB3aGlsZSBub3QgdXNpbmcgdGhlIEJJT1MgY2FsbGJhY2tzLAotCSAgc2VsZWN0IGJvdGggdGhlIEVBUkxZX1NDSUZfQ09OU09MRSBhbmQgU0hfU1RBTkRBUkRfQklPUywgdXNpbmcKLQkgIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiB0byB0b2dnbGUgYmFjayBhbmQgZm9ydGguCi0KIGNvbmZpZyBTVEFDS19ERUJVRwogCWJvb2wgIkNoZWNrIGZvciBzdGFjayBvdmVyZmxvd3MiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgU1VQRVJIMzIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGFjMTdjNWEuLmRiOTE5MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMjA1LDEwICsyMDUsNyBAQAogCiBCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgdUltYWdlLmJpbiBcCiAJICAgICAgIHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UKLVBIT05ZICs9IG1ha2V0b29scyAkKEJPT1RfVEFSR0VUUykgRk9SQ0UKLQotbWFrZXRvb2xzOiAgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggRk9SQ0UKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL3NoL3Rvb2xzIGluY2x1ZGUvYXNtLXNoL21hY2h0eXBlcy5oCitQSE9OWSArPSAkKEJPT1RfVEFSR0VUUykKIAogYWxsOiAkKEtCVUlMRF9JTUFHRSkKIApAQCAtMjE3LDcgKzIxNCw4IEBACiAKIGNvbXByZXNzZWQ6IHpJbWFnZQogCi1hcmNocHJlcGFyZTogbWFrZXRvb2xzCithcmNocHJlcGFyZToKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL3NoL3Rvb2xzIGluY2x1ZGUvZ2VuZXJhdGVkL21hY2h0eXBlcy5oCiAKIGFyY2hjbGVhbjoKIAkkKFEpJChNQUtFKSAkKGNsZWFuKT0kKGJvb3QpCkBAIC0yMzQsNSArMjMyLDMgQEAKIAlAZWNobyAnICB1SW1hZ2UuYnoyCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiemlwMiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bWEJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGx6bWEpJwogZW5kZWYKLQotQ0xFQU5fRklMRVMgKz0gaW5jbHVkZS9hc20tc2gvbWFjaHR5cGVzLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwppbmRleCBjZjlkYzEyLi4xZjVmYTVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCkBAIC0zMTYsMjAgKzMxNiwyNCBAQAogCS5mb3JtYXRfbmFtZSA9ICJVWVZZIiwKIAkuZm9ybWF0X2RlcHRoID0gMTYsCiAJLmZvcm1hdCA9IHsKLQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCS5jb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FLAogCQkud2lkdGggPSA2NDAsCiAJCS5oZWlnaHQgPSA0ODAsCiAJfSwKIAkuYnVzX3BhcmFtID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzgsCisJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCB8CisJU09DQU1fREFUQV9BQ1RJVkVfSElHSCwKIAkuc2V0X2NhcHR1cmUgPSBjYW1lcmFfc2V0X2NhcHR1cmUsCi0JLmxpbmsgPSB7Ci0JCS5idXNfaWQJCT0gMCwKLQkJLmFkZF9kZXZpY2UJPSBhcDMyNXJ4YV9jYW1lcmFfYWRkLAotCQkuZGVsX2RldmljZQk9IGFwMzI1cnhhX2NhbWVyYV9kZWwsCi0JCS5tb2R1bGVfbmFtZQk9ICJzb2NfY2FtZXJhX3BsYXRmb3JtIiwKLQl9LAorfTsKKworc3RydWN0IHNvY19jYW1lcmFfbGluayBjYW1lcmFfbGluayA9IHsKKwkuYnVzX2lkCQk9IDAsCisJLmFkZF9kZXZpY2UJPSBhcDMyNXJ4YV9jYW1lcmFfYWRkLAorCS5kZWxfZGV2aWNlCT0gYXAzMjVyeGFfY2FtZXJhX2RlbCwKKwkubW9kdWxlX25hbWUJPSAic29jX2NhbWVyYV9wbGF0Zm9ybSIsCisJLnByaXYJCT0gJmNhbWVyYV9pbmZvLAogfTsKIAogc3RhdGljIHZvaWQgZHVtbXlfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0zNDcsNyArMzUxLDcgQEAKIHN0YXRpYyBpbnQgYXAzMjVyeGFfY2FtZXJhX2FkZChzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wsCiAJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChpY2wgIT0gJmNhbWVyYV9pbmZvLmxpbmsgfHwgY2FtZXJhX3Byb2JlKCkgPD0gMCkKKwlpZiAoaWNsICE9ICZjYW1lcmFfbGluayB8fCBjYW1lcmFfcHJvYmUoKSA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNhbWVyYV9pbmZvLmRldiA9IGRldjsKQEAgLTM1Nyw3ICszNjEsNyBAQAogCiBzdGF0aWMgdm9pZCBhcDMyNXJ4YV9jYW1lcmFfZGVsKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKIHsKLQlpZiAoaWNsICE9ICZjYW1lcmFfaW5mby5saW5rKQorCWlmIChpY2wgIT0gJmNhbWVyYV9saW5rKQogCQlyZXR1cm47CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmY2FtZXJhX2RldmljZSk7CkBAIC00NzAsMTMgKzQ3NCwxNSBAQAogCS5idXN3aWR0aAk9IFNPQ0FNX0RBVEFXSURUSF84LAogCS5mbGFncwkJPSBPVjc3MlhfRkxBR19WRkxJUCB8IE9WNzcyWF9GTEFHX0hGTElQLAogCS5lZGdlY3RybAk9IE9WNzcyWF9BVVRPX0VER0VDVFJMKDB4ZiwgMCksCi0JLmxpbmsgPSB7Ci0JCS5idXNfaWQJCT0gMCwKLQkJLnBvd2VyCQk9IG92NzcyNV9wb3dlciwKLQkJLmJvYXJkX2luZm8JPSAmYXAzMjVyeGFfaTJjX2NhbWVyYVswXSwKLQkJLmkyY19hZGFwdGVyX2lkCT0gMCwKLQkJLm1vZHVsZV9uYW1lCT0gIm92NzcyeCIsCi0JfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIG92NzcyNV9saW5rID0geworCS5idXNfaWQJCT0gMCwKKwkucG93ZXIJCT0gb3Y3NzI1X3Bvd2VyLAorCS5ib2FyZF9pbmZvCT0gJmFwMzI1cnhhX2kyY19jYW1lcmFbMF0sCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkubW9kdWxlX25hbWUJPSAib3Y3NzJ4IiwKKwkucHJpdgkJPSAmb3Y3NzI1X2luZm8sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcDMyNXJ4YV9jYW1lcmFbXSA9IHsKQEAgLTQ4NCwxMyArNDkwLDEzIEBACiAJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCiAJCS5pZAk9IDAsCiAJCS5kZXYJPSB7Ci0JCQkucGxhdGZvcm1fZGF0YSA9ICZvdjc3MjVfaW5mby5saW5rLAorCQkJLnBsYXRmb3JtX2RhdGEgPSAmb3Y3NzI1X2xpbmssCiAJCX0sCiAJfSwgewogCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAogCQkuaWQJPSAxLAogCQkuZGV2CT0gewotCQkJLnBsYXRmb3JtX2RhdGEgPSAmY2FtZXJhX2luZm8ubGluaywKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmNhbWVyYV9saW5rLAogCQl9LAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCmluZGV4IDgyNmU2MjMuLjE5NGFhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKQEAgLTE5LDExICsxOSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zaF9tc2lvZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9tbWNfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L3NoX2tleXNjLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NoX21vYmlsZV9zZGhpLmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8bWVkaWEvdHc5OTEwLmg+CisjaW5jbHVkZSA8bWVkaWEvbXQ5dDExMi5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KICNpbmNsdWRlIDxhc20vc2hfZXRoLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CkBAIC0zMzgsNiArMzQ1LDEyIEBACiB9OwogCiAvKiBJMkMgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyYzBfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImRhNzIxMCIsIDB4MWEpLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyYzFfZGV2aWNlc1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oInIyMDI1c2QiLCAweDMyKSwKQEAgLTQyMSw2ICs0MzQsNyBAQAogCS5pcnEJCT0gSVJRMCwKIH07CiAKKyNpZmRlZiBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJCiAvKiBTSERJMCAqLwogc3RhdGljIHZvaWQgc2RoaTBfc2V0X3B3cihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgc3RhdGUpCiB7CkBAIC00OTMsNiArNTA3LDI0OCBAQAogCX0sCiB9OwogCisjZWxzZQorCitzdGF0aWMgaW50IG1tY19zcGlfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QVFk2KTsKK30KKworc3RhdGljIGludCBtbWNfc3BpX2dldF9jZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPX1BUWTcpOworfQorCitzdGF0aWMgdm9pZCBtbWNfc3BpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG1hc2t2YWwpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEI2LCBtYXNrdmFsID8gMSA6IDApOworfQorCitzdGF0aWMgc3RydWN0IG1tY19zcGlfcGxhdGZvcm1fZGF0YSBtbWNfc3BpX2luZm8gPSB7CisJLmdldF9ybyA9IG1tY19zcGlfZ2V0X3JvLAorCS5nZXRfY2QgPSBtbWNfc3BpX2dldF9jZCwKKwkuY2FwcyA9IE1NQ19DQVBfTkVFRFNfUE9MTCwKKwkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwgLyogMy4zViBvbmx5ICovCisJLnNldHBvd2VyID0gbW1jX3NwaV9zZXRwb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpX2J1c1tdID0geworCXsKKwkJLm1vZGFsaWFzCT0gIm1tY19zcGkiLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtbWNfc3BpX2luZm8sCisJCS5tYXhfc3BlZWRfaHoJPSA1MDAwMDAwLAorCQkubW9kZQkJPSBTUElfTU9ERV8wLAorCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgR1BJT19QVE00LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21zaW9mX3NwaV9pbmZvIG1zaW9mMF9kYXRhID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1zaW9mMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk1TSU9GMCIsCisJCS5zdGFydAk9IDB4YTRjNDAwMDAsCisJCS5lbmQJPSAweGE0YzQwMDYzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gODQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc2lvZjBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzcGlfc2hfbXNpb2YiLAorCS5pZAkJPSAwLCAvKiBNU0lPRjAgKi8KKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZtc2lvZjBfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtc2lvZjBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtc2lvZjBfcmVzb3VyY2VzLAorCS5hcmNoZGF0YSA9IHsKKwkJLmh3YmxrX2lkID0gSFdCTEtfTVNJT0YwLAorCX0sCit9OworCisjZW5kaWYKKworLyogSTJDIFZpZGVvL0NhbWVyYSAqLworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfY2FtZXJhW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHc5OTEwIiwgMHg0NSksCisJfSwKKwl7CisJCS8qIDFzdCBjYW1lcmEgKi8KKwkJSTJDX0JPQVJEX0lORk8oIm10OXQxMTIiLCAweDNjKSwKKwl9LAorCXsKKwkJLyogMm5kIGNhbWVyYSAqLworCQlJMkNfQk9BUkRfSU5GTygibXQ5dDExMiIsIDB4M2MpLAorCX0sCit9OworCisvKiB0dzk5MTAgKi8KK3N0YXRpYyBpbnQgdHc5OTEwX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJaW50IHZhbCA9IG1vZGUgPyAwIDogMTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRVMiwgdmFsKTsKKwlpZiAobW9kZSkKKwkJbWRlbGF5KDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbyB0dzk5MTBfaW5mbyA9IHsKKwkuYnVzd2lkdGgJPSBTT0NBTV9EQVRBV0lEVEhfOCwKKwkubXBvdXQJCT0gVFc5OTEwX01QT19GSUVMRCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIHR3OTkxMF9saW5rID0geworCS5pMmNfYWRhcHRlcl9pZAk9IDAsCisJLmJ1c19pZAkJPSAxLAorCS5wb3dlcgkJPSB0dzk5MTBfcG93ZXIsCisJLmJvYXJkX2luZm8JPSAmaTJjX2NhbWVyYVswXSwKKwkubW9kdWxlX25hbWUJPSAidHc5OTEwIiwKKwkucHJpdgkJPSAmdHc5OTEwX2luZm8sCit9OworCisvKiBtdDl0MTEyICovCitzdGF0aWMgaW50IG10OXQxMTJfcG93ZXIxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEEzLCBtb2RlKTsKKwlpZiAobW9kZSkKKwkJbWRlbGF5KDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtdDl0MTEyX2NhbWVyYV9pbmZvIG10OXQxMTJfaW5mbzEgPSB7CisJLmZsYWdzID0gTVQ5VDExMl9GTEFHX1BDTEtfUklTSU5HX0VER0UgfCBNVDlUMTEyX0ZMQUdfREFUQVdJRFRIXzgsCisJLmRpdmlkZXIgPSB7IDB4NDksIDB4NiwgMCwgNiwgMCwgOSwgOSwgNiwgMCB9LCAvKiBmb3IgMjRNSHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIG10OXQxMTJfbGluazEgPSB7CisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkucG93ZXIJCT0gbXQ5dDExMl9wb3dlcjEsCisJLmJ1c19pZAkJPSAwLAorCS5ib2FyZF9pbmZvCT0gJmkyY19jYW1lcmFbMV0sCisJLm1vZHVsZV9uYW1lCT0gIm10OXQxMTIiLAorCS5wcml2CQk9ICZtdDl0MTEyX2luZm8xLAorfTsKKworc3RhdGljIGludCBtdDl0MTEyX3Bvd2VyMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRBNCwgbW9kZSk7CisJaWYgKG1vZGUpCisJCW1kZWxheSgxMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXQ5dDExMl9jYW1lcmFfaW5mbyBtdDl0MTEyX2luZm8yID0geworCS5mbGFncyA9IE1UOVQxMTJfRkxBR19QQ0xLX1JJU0lOR19FREdFIHwgTVQ5VDExMl9GTEFHX0RBVEFXSURUSF84LAorCS5kaXZpZGVyID0geyAweDQ5LCAweDYsIDAsIDYsIDAsIDksIDksIDYsIDAgfSwgLyogZm9yIDI0TUh6ICovCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBtdDl0MTEyX2xpbmsyID0geworCS5pMmNfYWRhcHRlcl9pZAk9IDEsCisJLnBvd2VyCQk9IG10OXQxMTJfcG93ZXIyLAorCS5idXNfaWQJCT0gMSwKKwkuYm9hcmRfaW5mbwk9ICZpMmNfY2FtZXJhWzJdLAorCS5tb2R1bGVfbmFtZQk9ICJtdDl0MTEyIiwKKwkucHJpdgkJPSAmbXQ5dDExMl9pbmZvMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNhbWVyYV9kZXZpY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmdHc5OTEwX2xpbmssCisJCX0sCisJfSwKKwl7CisJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJCS5pZAk9IDEsCisJCS5kZXYJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZtdDl0MTEyX2xpbmsxLAorCQl9LAorCX0sCisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAyLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmbXQ5dDExMl9saW5rMiwKKwkJfSwKKwl9LAorfTsKKworLyogRlNJICovCisvKgorICogRlNJLUIgdXNlIGV4dGVybmFsIGNsb2NrIHdoaWNoIGNhbWUgZnJvbSBkYTcyMTAuCisgKiBTbywgd2Ugc2hvdWxkIGNoYW5nZSBwYXJlbnQgb2YgZnNpCisgKi8KKyNkZWZpbmUgRkNMS0JDUgkJMHhhNDE1MDAwYworc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCisJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCisJc3RhdHVzICY9IH4weDAwMDAwMGZmOworCXN0YXR1cyB8PSAweDAwMDAwMDgwOworCisJY3RybF9vdXRsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0geworCS5pbml0ID0gZnNpbWNrX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmc2ltY2tiX2NsayA9IHsKKwkubmFtZQkJPSAiZnNpbWNrYl9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZmc2ltY2tfY2xrX29wcywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilGQ0xLQkNSLAorCS5yYXRlCQk9IDAsIC8qIHVua25vd24gKi8KK307CisKK3N0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyBmc2lfaW5mbyA9IHsKKwkucG9ydGJfZmxhZ3MgPSBTSF9GU0lfQlJTX0lOViB8CisJCSAgICAgICBTSF9GU0lfT1VUX1NMQVZFX01PREUgfAorCQkgICAgICAgU0hfRlNJX0lOX1NMQVZFX01PREUgfAorCQkgICAgICAgU0hfRlNJX09GTVQoSTJTKSB8CisJCSAgICAgICBTSF9GU0lfSUZNVChJMlMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmc2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJGU0kiLAorCQkuc3RhcnQJPSAweEZFM0MwMDAwLAorCQkuZW5kCT0gMHhGRTNDMDIxZCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAxMDgsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfZnNpIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZnNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZnNpX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZmc2lfaW5mbywKKwl9LAorCS5hcmNoZGF0YSA9IHsKKwkJLmh3YmxrX2lkID0gSFdCTEtfU1BVLCAvKiBGU0kgbmVlZHMgU1BVIGh3YmxrICovCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplY292ZWNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJm5vcl9mbGFzaF9kZXZpY2UsCkBAIC01MDMsOCArNzU5LDE2IEBACiAJJmNldTBfZGV2aWNlLAogCSZjZXUxX2RldmljZSwKIAkma2V5c2NfZGV2aWNlLAorI2lmZGVmIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkKIAkmc2RoaTBfZGV2aWNlLAogCSZzZGhpMV9kZXZpY2UsCisjZWxzZQorCSZtc2lvZjBfZGV2aWNlLAorI2VuZGlmCisJJmNhbWVyYV9kZXZpY2VzWzBdLAorCSZjYW1lcmFfZGV2aWNlc1sxXSwKKwkmY2FtZXJhX2RldmljZXNbMl0sCisJJmZzaV9kZXZpY2UsCiB9OwogCiAjZGVmaW5lIEVFUFJPTV9BRERSIDB4NTAKQEAgLTU2MCw2ICs4MjQsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX3NldHVwKHZvaWQpCiB7CisJc3RydWN0IGNsayAqY2xrOworCiAJLyogcmVnaXN0ZXIgYm9hcmQgc3BlY2lmaWMgc2VsZi1yZWZyZXNoIGNvZGUgKi8KIAlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YsCiAJCQkJCSZlY292ZWMyNF9zZHJhbV9lbnRlcl9zdGFydCwKQEAgLTc3Myw3ICsxMDM5LDggQEAKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BUUjUpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRSNik7CiAKLQkvKiBlbmFibGUgU0RISTAgKG5lZWRzIERTMi40IHNldCB0byBPTikgKi8KKyNpZmRlZiBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJCisJLyogZW5hYmxlIFNESEkwIG9uIENOMTEgKG5lZWRzIERTMi40IHNldCB0byBPTikgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMENELCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTBXUCwgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESEkwQ01ELCBOVUxMKTsKQEAgLTc4NSw3ICsxMDUyLDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19QVEI2LCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI2LCAwKTsKIAotCS8qIGVuYWJsZSBTREhJMSAobmVlZHMgRFMyLjYsNyBzZXQgdG8gT04sT0ZGKSAqLworCS8qIGVuYWJsZSBTREhJMSBvbiBDTjEyIChuZWVkcyBEUzIuNiw3IHNldCB0byBPTixPRkYpICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTFDRCwgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESEkxV1AsICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMUNNRCwgTlVMTCk7CkBAIC03OTksOCArMTA2Niw1OSBAQAogCiAJLyogSS9PIGJ1ZmZlciBkcml2ZSBhYmlsaXR5IGlzIGhpZ2ggZm9yIFNESEkxICovCiAJY3RybF9vdXR3KChjdHJsX2ludyhJT0RSSVZFQSkgJiB+MHgzMDAwKSB8IDB4MjAwMCAsIElPRFJJVkVBKTsKKyNlbHNlCisJLyogZW5hYmxlIE1TSU9GMCBvbiBDTjExIChuZWVkcyBEUzIuNCBzZXQgdG8gT0ZGKSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01TSU9GMF9UWEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01TSU9GMF9SWEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01TSU9GMF9UU0NLLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVE00LCBOVUxMKTsgLyogc29mdHdhcmUgQ1MgY29udHJvbCBvZiBUU1lOQyBwaW4gKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVE00LCAxKTsgLyogYWN0aXZlIGxvdyBDUyAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUQjYsIE5VTEwpOyAvKiAzLjNWIHBvd2VyIGNvbnRyb2wgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI2LCAwKTsgLyogZGlzYWJsZSBwb3dlciBieSBkZWZhdWx0ICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRZNiwgTlVMTCk7IC8qIHdyaXRlIHByb3RlY3QgKi8KKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BUWTYpOworCWdwaW9fcmVxdWVzdChHUElPX1BUWTcsIE5VTEwpOyAvKiBjYXJkIGRldGVjdCAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRZNyk7CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYnVzLCBBUlJBWV9TSVpFKHNwaV9idXMpKTsKKyNlbmRpZgorCisJLyogZW5hYmxlIFZpZGVvICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRVMiwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRVMiwgMSk7CisKKwkvKiBlbmFibGUgQ2FtZXJhICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBNCwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRBMywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRBNCwgMCk7CisKKwkvKiBlbmFibGUgRlNJICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJTUNLQiwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUJTRCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JTRCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUJCQ0ssICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUJMUkNLLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JCQ0ssICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JMUkNLLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CisKKwkvKiBjaGFuZ2UgcGFyZW50IG9mIEZTSSBCICovCisJY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYl9jbGsiKTsKKwljbGtfcmVnaXN0ZXIoJmZzaW1ja2JfY2xrKTsKKwljbGtfc2V0X3BhcmVudChjbGssICZmc2ltY2tiX2Nsayk7CisJY2xrX3NldF9yYXRlKGNsaywgMTEwMDApOworCWNsa19zZXRfcmF0ZSgmZnNpbWNrYl9jbGssIDExMDAwKTsKKwljbGtfcHV0KGNsayk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QVFUwLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFUwLCAwKTsKKwltZGVsYXkoMjApOwogCiAJLyogZW5hYmxlIEkyQyBkZXZpY2UgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmMwX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShpMmMwX2RldmljZXMpKTsKKwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyYzFfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGkyYzFfZGV2aWNlcykpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvbGNkX3dxdmdhLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvbGNkX3dxdmdhLmMKaW5kZXggOGNjYjFjYy4uZTliOTcwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9sY2Rfd3F2Z2EuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvbGNkX3dxdmdhLmMKQEAgLTI3Myw2ICsyNzMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBrZnIycjA5X2xjZF9zdGFydCh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzb2hhbmRsZSwKKwkJICAgICAgIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc28pCit7CisJd3JpdGVfbWVtb3J5X3N0YXJ0KHNvaGFuZGxlLCBzbyk7Cit9CisKICNkZWZpbmUgQ1RSTF9DS1NXICAgICAgIDB4MTAKICNkZWZpbmUgQ1RSTF9DMTAgICAgICAgIDB4MjAKICNkZWZpbmUgQ1RSTF9DUFNXICAgICAgIDB4ODAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKaW5kZXggODc0MzhkNi4uNWQ3YjVkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC9zaF9rZXlzYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgorI2luY2x1ZGUgPG1lZGlhL3JqNTRuMWNiMGMuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CkBAIC0xNDksNiArMTUwLDcgQEAKIAkJfSwKIAkJLmJvYXJkX2NmZyA9IHsKIAkJCS5zZXR1cF9zeXMgPSBrZnIycjA5X2xjZF9zZXR1cCwKKwkJCS5zdGFydF90cmFuc2ZlciA9IGtmcjJyMDlfbGNkX3N0YXJ0LAogCQkJLmRpc3BsYXlfb24gPSBrZnIycjA5X2xjZF9vbiwKIAkJCS5kaXNwbGF5X29mZiA9IGtmcjJyMDlfbGNkX29mZiwKIAkJfSwKQEAgLTI1NSw2ICsyNTcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayAqY2FtZXJhX2NsazsKIAorLyogc2V0IFZJT19DS08gY2xvY2sgdG8gMjVNSHogKi8KKyNkZWZpbmUgQ0VVX01DTEtfRlJFUSAyNTAwMDAwMAorCiAjZGVmaW5lIERSVkNSQiAweEE0MDUwMThDCiBzdGF0aWMgaW50IGNhbWVyYV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQogewpAQCAtMjY3LDggKzI3Miw3IEBACiAJCWlmIChJU19FUlIoY2FtZXJhX2NsaykpCiAJCQlyZXR1cm4gUFRSX0VSUihjYW1lcmFfY2xrKTsKIAotCQkvKiBzZXQgVklPX0NLTyBjbG9jayB0byAyNU1IeiAqLwotCQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2FtZXJhX2NsaywgMjUwMDAwMDApOworCQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2FtZXJhX2NsaywgQ0VVX01DTEtfRlJFUSk7CiAJCXJldCA9IGNsa19zZXRfcmF0ZShjYW1lcmFfY2xrLCByYXRlKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVjbGtyYXRlOwpAQCAtMzE4LDExICszMjIsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IHJqNTRuMV9wZGF0YSByajU0bjFfcHJpdiA9IHsKKwkubWNsa19mcmVxCT0gQ0VVX01DTEtfRlJFUSwKKwkuaW9jdGxfaGlnaAk9IGZhbHNlLAorfTsKKwogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgcmo1NG4xX2xpbmsgPSB7CiAJLnBvd2VyCQk9IGNhbWVyYV9wb3dlciwKIAkuYm9hcmRfaW5mbwk9ICZrZnIycjA5X2kyY19jYW1lcmEsCiAJLmkyY19hZGFwdGVyX2lkCT0gMSwKIAkubW9kdWxlX25hbWUJPSAicmo1NG4xY2IwYyIsCisJLnByaXYJCT0gJnJqNTRuMV9wcml2LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga2ZyMnIwOV9jYW1lcmEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKaW5kZXggOTA5OWI2ZC4uNTA3Yzc3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwpAQCAtNDMyLDIzICs0MzIsMjcgQEAKIAogc3RhdGljIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gb3Y3NzI1X2luZm8gPSB7CiAJLmJ1c3dpZHRoCT0gU09DQU1fREFUQVdJRFRIXzgsCi0JLmxpbmsgPSB7Ci0JCS5wb3dlcgkJPSBvdjc3MjVfcG93ZXIsCi0JCS5ib2FyZF9pbmZvCT0gJm1pZ29yX2kyY19jYW1lcmFbMF0sCi0JCS5pMmNfYWRhcHRlcl9pZAk9IDAsCi0JCS5tb2R1bGVfbmFtZQk9ICJvdjc3MngiLAotCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBvdjc3MjVfbGluayA9IHsKKwkucG93ZXIJCT0gb3Y3NzI1X3Bvd2VyLAorCS5ib2FyZF9pbmZvCT0gJm1pZ29yX2kyY19jYW1lcmFbMF0sCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkubW9kdWxlX25hbWUJPSAib3Y3NzJ4IiwKKwkucHJpdgkJPSAmb3Y3NzI1X2luZm8sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR3OTkxMF92aWRlb19pbmZvIHR3OTkxMF9pbmZvID0gewogCS5idXN3aWR0aAk9IFNPQ0FNX0RBVEFXSURUSF84LAogCS5tcG91dAkJPSBUVzk5MTBfTVBPX0ZJRUxELAotCS5saW5rID0gewotCQkucG93ZXIJCT0gdHc5OTEwX3Bvd2VyLAotCQkuYm9hcmRfaW5mbwk9ICZtaWdvcl9pMmNfY2FtZXJhWzFdLAotCQkuaTJjX2FkYXB0ZXJfaWQJPSAwLAotCQkubW9kdWxlX25hbWUJPSAidHc5OTEwIiwKLQl9Cit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayB0dzk5MTBfbGluayA9IHsKKwkucG93ZXIJCT0gdHc5OTEwX3Bvd2VyLAorCS5ib2FyZF9pbmZvCT0gJm1pZ29yX2kyY19jYW1lcmFbMV0sCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkubW9kdWxlX25hbWUJPSAidHc5OTEwIiwKKwkucHJpdgkJPSAmdHc5OTEwX2luZm8sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWdvcl9jYW1lcmFbXSA9IHsKQEAgLTQ1NiwxMyArNDYwLDEzIEBACiAJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCiAJCS5pZAk9IDAsCiAJCS5kZXYJPSB7Ci0JCQkucGxhdGZvcm1fZGF0YSA9ICZvdjc3MjVfaW5mby5saW5rLAorCQkJLnBsYXRmb3JtX2RhdGEgPSAmb3Y3NzI1X2xpbmssCiAJCX0sCiAJfSwgewogCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAogCQkuaWQJPSAxLAogCQkuZGV2CT0gewotCQkJLnBsYXRmb3JtX2RhdGEgPSAmdHc5OTEwX2luZm8ubGluaywKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJnR3OTkxMF9saW5rLAogCQl9LAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCmluZGV4IDRlYjMxYWMuLmIyMjFiNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKQEAgLTU3LDE1ICs1NywxNiBAQAogICovCiB2b2lkIF9faW5pdCBpbml0X3NlNzcyMl9JUlEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgaXJxOwogCiAJY3RybF9vdXR3KDAsIElSUTAxX01BU0spOyAgICAgICAvKiBkaXNhYmxlIGFsbCBpcnFzICovCiAJY3RybF9vdXR3KDB4MjAwMCwgMHhiMDNmZmZlYyk7ICAvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogCiAJZm9yIChpID0gMDsgaSA8IFNFNzcyMl9GUEdBX0lSUV9OUjsgaSsrKSB7Ci0JCXNlNzcyMl9mcGdhX2lycVtpXSA9IGNyZWF0ZV9pcnEoKTsKLQkJaWYgKHNlNzcyMl9mcGdhX2lycVtpXSA8IDApCisJCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwkJaWYgKGlycSA8IDApCiAJCQlyZXR1cm47CisJCXNlNzcyMl9mcGdhX2lycVtpXSA9IGlycTsKIAogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShzZTc3MjJfZnBnYV9pcnFbaV0sCiAJCQkJCSAgICAgICZzZTc3MjJfaXJxX2NoaXAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDRiMGYwYzAuLjVkMGY3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC01MTQsNiArNTE0LDEzIEBACiAJJnNkaGkxX2NuOF9kZXZpY2UsCiB9OwogCisvKiBJMkMgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyYzBfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImFrNDY0MiIsIDB4MTIpLAorCX0sCit9OworCiAjZGVmaW5lIEVFUFJPTV9PUCAgIDB4QkEyMDYwMDAKICNkZWZpbmUgRUVQUk9NX0FEUiAgMHhCQTIwNjAwNAogI2RlZmluZSBFRVBST01fREFUQSAweEJBMjA2MDBDCkBAIC01NzUsNiArNTgyLDE2IEBACiBleHRlcm4gY2hhciBtczc3MjRzZV9zZHJhbV9sZWF2ZV9zdGFydDsKIGV4dGVybiBjaGFyIG1zNzcyNHNlX3NkcmFtX2xlYXZlX2VuZDsKIAorCitzdGF0aWMgaW50IF9faW5pdCBhcmNoX3NldHVwKHZvaWQpCit7CisJLyogZW5hYmxlIEkyQyBkZXZpY2UgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmMwX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShpMmMwX2RldmljZXMpKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYXJjaF9zZXR1cCk7CisKIHN0YXRpYyBpbnQgX19pbml0IGRldmljZXNfc2V0dXAodm9pZCkKIHsKIAl1MTYgc3cgPSBjdHJsX2ludyhTVzQxNDApOyAvKiBzZWxlY3QgY2FtZXJhLCBtb25pdG9yICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZwppbmRleCAwNzc0OTI0Li40Njg3NDcwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKQEAgLTIwMyw3ICsyMDMsNyBAQAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKLUNPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMAogQ09ORklHXzI5QklUPXkKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZwppbmRleCBhYzY0Njk3Li5jYWQ5MTg0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKQEAgLTIwNCw3ICsyMDQsNyBAQAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKLUNPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMAogQ09ORklHXzI5QklUPXkKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwppbmRleCBmNTIxZTgyLi42ZjExMjZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKQEAgLTMyNCw3ICszMjQsNyBAQAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgZWFybHlwcmludGs9c2VyaWFsIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKICMgQnVzIG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCmluZGV4IGExNTZjZDEuLjkyMTViYmIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKQEAgLTMyNCw3ICszMjQsNyBAQAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgZWFybHlwcmludGs9c2VyaWFsIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKICMgQnVzIG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYwppbmRleCAwNTJiMzU0Li43ODk4ZjE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAjaW5jbHVkZSA8bWFjaC9yMmQuaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCi0jaW5jbHVkZSA8YXNtL21hY2h0eXBlcy5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC9tYWNodHlwZXMuaD4KIAogI2RlZmluZSBQQ0lNQ1JfTVJTRVRfT0ZGCTB4QkZGRkZGRkYKICNkZWZpbmUgUENJTUNSX1JGU0hfT0ZGCQkweEZGRkZGRkZCCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtLy5naXRpZ25vcmUgYi9hcmNoL3NoL2luY2x1ZGUvYXNtLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OGRiNzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotbWFjaHR5cGVzLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcwZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGNjYjFkOTMuLmFjMDQyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTE0LDcgKzExNCw2IEBACiAgKi8KICNkZWZpbmUgQ09SRV9EVU1QX1VTRV9SRUdTRVQKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRkRQSUNfQ09SRV9FRkxBR1MJRUZfU0hfRkRQSUMKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJUEFHRV9TSVpFCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCA1MTJjZDNlLi4wMjZkZDY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMzMsMTEgKzIzMywxNyBAQAogICogZG9lc24ndCBleGlzdCwgc28gZXZlcnl0aGluZyBtdXN0IGdvIHRocm91Z2ggcGFnZSB0YWJsZXMuCiAgKi8KICNpZmRlZiBDT05GSUdfTU1VCi12b2lkIF9faW9tZW0gKl9faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7Cit2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOwogdm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIob2Zmc2V0LCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgogX19pb3JlbWFwX21vZGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkgJiYgIWRlZmluZWQoQ09ORklHX1BNQikKQEAgLTI3MSw2ICsyNzcsNyBAQAogCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncyk7CiB9CiAjZWxzZQorI2RlZmluZSBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCiAjZGVmaW5lIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCiAjZGVmaW5lIF9faW91bm1hcChhZGRyKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWNodmVjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaAppbmRleCA4NGRkMzc3Li45YzMwOTU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaApAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h0eXBlcy5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC9tYWNodHlwZXMuaD4KIAogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIHsKIAl2b2lkICgqbXZfc2V0dXApKGNoYXIgKipjbWRsaW5lX3ApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAppbmRleCBiMzU0MzU1Li41MDAzZWU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApAQCAtMzQ0LDcgKzM0NCw4IEBACiAjZGVmaW5lIHB0ZV9zcGVjaWFsKHB0ZSkJKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9TUEVDSUFMKQogCiAjaWZkZWYgQ09ORklHX1gyVExCCi0jZGVmaW5lIHB0ZV93cml0ZShwdGUpCQkoKHB0ZSkucHRlX2hpZ2ggJiBfUEFHRV9FWFRfVVNFUl9XUklURSkKKyNkZWZpbmUgcHRlX3dyaXRlKHB0ZSkgXAorCSgocHRlKS5wdGVfaGlnaCAmIChfUEFHRV9FWFRfVVNFUl9XUklURSB8IF9QQUdFX0VYVF9LRVJOX1dSSVRFKSkKICNlbHNlCiAjZGVmaW5lIHB0ZV93cml0ZShwdGUpCQkoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1JXKQogI2VuZGlmCkBAIC0zNTgsNyArMzU5LDcgQEAKICAqIGluZGl2aWR1YWxseSB0b2dnbGVkIChhbmQgdXNlciBwZXJtaXNzaW9ucyBhcmUgZW50aXJlbHkgZGVjb3VwbGVkIGZyb20KICAqIGtlcm5lbCBwZXJtaXNzaW9ucyksIHdlIGF0dGVtcHQgdG8gY291cGxlIHRoZW0gYSBiaXQgbW9yZSBzYW5lbHkgaGVyZS4KICAqLwotUFRFX0JJVF9GVU5DKGhpZ2gsIHdycHJvdGVjdCwgJj0gfl9QQUdFX0VYVF9VU0VSX1dSSVRFKTsKK1BURV9CSVRfRlVOQyhoaWdoLCB3cnByb3RlY3QsICY9IH4oX1BBR0VfRVhUX1VTRVJfV1JJVEUgfCBfUEFHRV9FWFRfS0VSTl9XUklURSkpOwogUFRFX0JJVF9GVU5DKGhpZ2gsIG1rd3JpdGUsIHw9IF9QQUdFX0VYVF9VU0VSX1dSSVRFIHwgX1BBR0VfRVhUX0tFUk5fV1JJVEUpOwogUFRFX0JJVF9GVU5DKGhpZ2gsIG1raHVnZSwgfD0gX1BBR0VfU1pIVUdFKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggYTI4YzlmMC4uYmRjMGYzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBZb3VyIGJhc2ljIFNNUCBzcGlubG9ja3MsIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgQ1BVIGFueXdoZXJlCiAgKi8KIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+bG9jayA8PSAwKQotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KHgpIFwKLQlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQoeCkJCSgoeCktPmxvY2sgPD0gMCkKKyNkZWZpbmUgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfc3Bpbl91bmxvY2tfd2FpdCh4KSBcCisJZG8geyB3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZCh4KSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCiAKIC8qCiAgKiBTaW1wbGUgc3BpbiBsb2NrIG9wZXJhdGlvbnMuICBUaGVyZSBhcmUgdHdvIHZhcmlhbnRzLCBvbmUgY2xlYXJzIElSUSdzCkBAIC0zNCwxNCArMzQsMTQgQEAKICAqCiAgKiBXZSBtYWtlIG5vIGZhaXJuZXNzIGFzc3VtcHRpb25zLiAgVGhleSBoYXZlIGEgY29zdC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJdW5zaWduZWQgbG9uZyBvbGR2YWw7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMiwgJTAJISBfX3Jhd19zcGluX2xvY2sJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIGFyY2hfc3Bpbl9sb2NrCVxuXHQiCiAJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgogCQkibW92CQkjMCwgJTAJCQkJXG5cdCIKIAkJIm1vdmNvLmwJJTAsIEAlMgkJCQlcblx0IgpAQCAtNTQsMTIgKzU0LDEyIEBACiAJKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl91bmxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkibW92CQkjMSwgJTAgISBfX3Jhd19zcGluX3VubG9jawlcblx0IgorCQkibW92CQkjMSwgJTAgISBhcmNoX3NwaW5fdW5sb2NrCVxuXHQiCiAJCSJtb3YubAkJJTAsIEAlMQkJCQlcblx0IgogCQk6ICI9JnoiICh0bXApCiAJCTogInIiICgmbG9jay0+bG9jaykKQEAgLTY3LDEzICs2NywxMyBAQAogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcCwgb2xkdmFsOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTIsICUwCSEgX19yYXdfc3Bpbl90cnlsb2NrCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISBhcmNoX3NwaW5fdHJ5bG9jawlcblx0IgogCQkibW92CQklMCwgJTEJCQkJXG5cdCIKIAkJIm1vdgkJIzAsICUwCQkJCVxuXHQiCiAJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKQEAgLTEwMCwyMSArMTAwLDIxIEBACiAgKiByZWFkX2Nhbl9sb2NrIC0gd291bGQgcmVhZF90cnlsb2NrKCkgc3VjY2VlZD8KICAqIEBsb2NrOiB0aGUgcndsb2NrIGluIHF1ZXN0aW9uLgogICovCi0jZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkJKCh4KS0+bG9jayA+IDApCisjZGVmaW5lIGFyY2hfcmVhZF9jYW5fbG9jayh4KQkoKHgpLT5sb2NrID4gMCkKIAogLyoqCiAgKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPwogICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCiAgKi8KLSNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2soeCkJKCh4KS0+bG9jayA9PSBSV19MT0NLX0JJQVMpCisjZGVmaW5lIGFyY2hfd3JpdGVfY2FuX2xvY2soeCkJKCh4KS0+bG9jayA9PSBSV19MT0NLX0JJQVMpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIF9fcmF3X3JlYWRfbG9jawlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgYXJjaF9yZWFkX2xvY2sJXG5cdCIKIAkJImNtcC9wbAkJJTAJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgogCQkiYWRkCQkjLTEsICUwCQkJCVxuXHQiCkBAIC0xMjYsMTMgKzEyNiwxMyBAQAogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISBfX3Jhd19yZWFkX3VubG9jawlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgYXJjaF9yZWFkX3VubG9jawlcblx0IgogCQkiYWRkCQkjMSwgJTAJCQkJXG5cdCIKIAkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCkBAIC0xNDIsMTMgKzE0MiwxMyBAQAogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgX19yYXdfd3JpdGVfbG9jawlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgYXJjaF93cml0ZV9sb2NrCVxuXHQiCiAJCSJjbXAvaHMJCSUyLCAlMAkJCQlcblx0IgogCQkiYmYJCTFiCQkJCVxuXHQiCiAJCSJzdWIJCSUyLCAlMAkJCQlcblx0IgpAQCAtMTYwLDIzICsxNjAsMjMgQEAKIAkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkibW92LmwJCSUxLCBAJTAgISBfX3Jhd193cml0ZV91bmxvY2sJXG5cdCIKKwkJIm1vdi5sCQklMSwgQCUwICEgYXJjaF93cml0ZV91bmxvY2sJXG5cdCIKIAkJOgogCQk6ICJyIiAoJnJ3LT5sb2NrKSwgInIiIChSV19MT0NLX0JJQVMpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAsIG9sZHZhbDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUyLCAlMAkhIF9fcmF3X3JlYWRfdHJ5bG9jawlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgYXJjaF9yZWFkX3RyeWxvY2sJXG5cdCIKIAkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCiAJCSJjbXAvcGwJCSUwCQkJCVxuXHQiCiAJCSJiZgkJMmYJCQkJXG5cdCIKQEAgLTE5MywxMyArMTkzLDEzIEBACiAJcmV0dXJuIChvbGR2YWwgPiAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCXVuc2lnbmVkIGxvbmcgdG1wLCBvbGR2YWw7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMiwgJTAJISBfX3Jhd193cml0ZV90cnlsb2NrCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISBhcmNoX3dyaXRlX3RyeWxvY2sJXG5cdCIKIAkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCiAJCSJjbXAvaHMJCSUzLCAlMAkJCQlcblx0IgogCQkiYmYJCTJmCQkJCVxuXHQiCkBAIC0yMTYsMTEgKzIxNiwxMSBAQAogCXJldHVybiAob2xkdmFsID4gKFJXX0xPQ0tfQklBUyAtIDEpKTsKIH0KIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfd3JpdGVfbG9jayhsb2NrKQogCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBiNGQyNDRlLi45Yjc1NjBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC03LDE1ICs3LDE1IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3NwaW5sb2NrX3Q7Cit9IGFyY2hfc3BpbmxvY2tfdDsKIAotI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJCXsgMSB9CisjZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJCXsgMSB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCiAjZGVmaW5lIFJXX0xPQ0tfQklBUwkJCTB4MDEwMDAwMDAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyBSV19MT0NLX0JJQVMgfQorI2RlZmluZSBfX0FSQ0hfUldfTE9DS19VTkxPQ0tFRAkJeyBSV19MT0NLX0JJQVMgfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IGYzZmQxYjkuLmYxOGM0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaApAQCAtMzQ1LDggKzM0NSw5IEBACiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzM0CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzM1CiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzNgorI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkzMzcKIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMzcKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzM4CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IDM0M2NlOGYuLjNlNzY0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaApAQCAtMzg1LDEwICszODUsMTEgQEAKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzNjIKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzNjMKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JMzY0CisjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCTM2NQogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDM2NQorI2RlZmluZSBOUl9zeXNjYWxscyAzNjYKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL2tmcjJyMDkuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWtmcjJyMDkvbWFjaC9rZnIycjA5LmgKaW5kZXggMTc0Mzc0ZS4uNDg0ZWY0MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL2tmcjJyMDkuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1rZnIycjA5L21hY2gva2ZyMnIwOS5oCkBAIC04LDYgKzgsOCBAQAogdm9pZCBrZnIycjA5X2xjZF9vZmYodm9pZCAqYm9hcmRfZGF0YSk7CiBpbnQga2ZyMnIwOV9sY2Rfc2V0dXAodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCiAJCSAgICAgIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7Cit2b2lkIGtmcjJyMDlfbGNkX3N0YXJ0KHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAorCQkgICAgICAgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQga2ZyMnIwOV9sY2Rfb24odm9pZCAqYm9hcmRfZGF0YSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrZnIycjA5X2xjZF9vZmYodm9pZCAqYm9hcmRfZGF0YSkge30KQEAgLTE2LDYgKzE4LDEwIEBACiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQga2ZyMnIwOV9sY2Rfc3RhcnQodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkJICAgICBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpCit7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0tGUjJSMDlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwNDcxYTNlLi4wZDU4N2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjIsMTEgKzIyLDEwIEBACiBvYmoteQkJCQkrPSBjcHUvCiBvYmotJChDT05GSUdfVlNZU0NBTEwpCQkrPSB2c3lzY2FsbC8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubwotb2JqLSQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCSs9IHNoX2Jpb3Mubworb2JqLSQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCSs9IHNoX2Jpb3MubyBlYXJseV9wcmludGsubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIG9iai0kKENPTkZJR19TSF9DUFVfRlJFUSkJKz0gY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHNoX2tzeW1zXyQoQklUUykubyBtb2R1bGUubwotb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWMubyByZWxvY2F0ZV9rZXJuZWwubwogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKaW5kZXggYzE1MDhhOS4uOTI4MmQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCkBAIC0xNywxNiArMTcsMTcgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwcl9kZXNjICpnZXRfaXByX2Rlc2ModW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKLQlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljaGlwIC0gb2Zmc2V0b2Yoc3RydWN0IGlwcl9kZXNjLCBjaGlwKSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaXByX2Rlc2MsIGNoaXApOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCmluZGV4IDg1NTVjMDUuLjExNGM3Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwpAQCAtNTksMzIgKzU5LDQ4IEBACiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NjE5IiwgdmVjdG9ycywgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGY4NDAwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA4OCwgODgsIDg4LCA4OCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGY4NDEwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA5MiwgOTIsIDkyLCA5MiB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGY4NDIwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA5NiwgOTYsIDk2LCA5NiB9LAotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4Zjg0MDAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDg4LCA4OCwgODgsIDg4IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaC1zY2kiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGY4NDEwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA5MiwgOTIsIDkyLCA5MiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4Zjg0MjAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDk2LCA5NiwgOTYsIDk2IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CiAKQEAgLTE3Niw3ICsxOTIsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzYxOV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc2NpX2RldmljZSwKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKIAkmZXRoX2RldmljZSwKIAkmY210MF9kZXZpY2UsCiAJJmNtdDFfZGV2aWNlLApAQCAtMTk1LDYgKzIxMyw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc2MTlfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCiAJJmNtdDBfZGV2aWNlLAogCSZjbXQxX2RldmljZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCmluZGV4IGI2NzM3NjQuLjhmNjY5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCkBAIC0yMDcsMjcgKzIwNywyMyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdHUyXzJfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmODA0MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMjAsIDIyMCwgMjIwLCAyMjAgfSwKLQl9LCB7Ci0JCS5mbGFncyA9IDAsCi0JfQorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmODA0MDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAyMjAsIDIyMCwgMjIwLCAyMjAgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXhnX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzY2lfZGV2aWNlLAorCSZzY2lmMF9kZXZpY2UsCiAJJm10dTJfMF9kZXZpY2UsCiAJJm10dTJfMV9kZXZpY2UsCiAJJm10dTJfMl9kZXZpY2UsCkBAIC0yNDYsNiArMjQyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm14Z19lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAogCSZtdHUyXzBfZGV2aWNlLAogCSZtdHUyXzFfZGV2aWNlLAogCSZtdHUyXzJfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwppbmRleCBmYmRlNWI3Li40Y2NmZWI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwpAQCAtMTc3LDU3ICsxNzcsMTIzIEBACiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3MjAxIiwgdmVjdG9ycywgZ3JvdXBzLAogCQkJIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZmU4MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODAsIDE4MCwgMTgwLCAxODAgfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODQsIDE4NCwgMTg0LCAxODQgfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODgsIDE4OCwgMTg4LCAxODggfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxOTIsIDE5MiwgMTkyLCAxOTIgfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmVhMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmVhODAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDAsIDIwMCwgMjAwLCAyMDAgfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmViMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDQsIDIwNCwgMjA0LCAyMDQgfQotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmViODAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDgsIDIwOCwgMjA4LCAyMDggfQotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDE4MCwgMTgwLCAxODAsIDE4MCB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaC1zY2kiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAxODQsIDE4NCwgMTg0LCAxODQgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDE4OCwgMTg4LCAxODgsIDE4OCB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgMTkyLCAxOTIsIDE5MiwgMTkyIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjNfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY0X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmVhMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA0LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjVfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZmZWE4MDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDIwMCwgMjAwLCAyMDAsIDIwMCB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDUsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY1X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmZlYjAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgMjA0LCAyMDQsIDIwNCwgMjA0IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY2X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjZfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY3X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmViODAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAyMDgsIDIwOCwgMjA4LCAyMDggfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjdfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA3LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmN19wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC0zNDUsNyArNDExLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MjAxX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzY2lfZGV2aWNlLAorCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAorCSZzY2lmNl9kZXZpY2UsCisJJnNjaWY3X2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmbXR1Ml8wX2RldmljZSwKIAkmbXR1Ml8xX2RldmljZSwKQEAgLTM2NSw2ICs0MzgsMTQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzIwMV9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAorCSZzY2lmNF9kZXZpY2UsCisJJnNjaWY1X2RldmljZSwKKwkmc2NpZjZfZGV2aWNlLAorCSZzY2lmN19kZXZpY2UsCiAJJm10dTJfMF9kZXZpY2UsCiAJJm10dTJfMV9kZXZpY2UsCiAJJm10dTJfMl9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCmluZGV4IGQzZmQ1MzYuLjMxMzY5NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCkBAIC0xNzMsMzcgKzE3Myw2MyBAQAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzIwMyIsIHZlY3RvcnMsIGdyb3VwcywKIAkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0JCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5MiwgMTkyLCAxOTIsIDE5MiB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMTk2LCAxOTYsIDE5NiwgMTk2IH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZmZTkwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyMDAsIDIwMCwgMjAwLCAyMDAgfSwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwNCwgMjA0LCAyMDQsIDIwNCB9LAotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSAgeyAxOTIsIDE5MiwgMTkyLCAxOTIgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSAgeyAxOTYsIDE5NiwgMTk2LCAxOTYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0gIHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9ICB7IDIwNCwgMjA0LCAyMDQsIDIwNCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC0zNTQsNyArMzgwLDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MjAzX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzY2lfZGV2aWNlLAorCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCiAJJmNtdDBfZGV2aWNlLAogCSZjbXQxX2RldmljZSwKIAkmbXR1Ml8wX2RldmljZSwKQEAgLTM3NSw2ICs0MDQsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzIwM19lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAogCSZjbXQwX2RldmljZSwKIAkmY210MV9kZXZpY2UsCiAJJm10dTJfMF9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCmluZGV4IGE5Y2NjNWUuLjA2NDg3MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCkBAIC0xMzMsMzcgKzEzMyw2MyBAQAogc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzIwNiIsIHZlY3RvcnMsIGdyb3VwcywKIAkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0JCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjQwLCAyNDAsIDI0MCwgMjQwIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDI0NCwgMjQ0LCAyNDQsIDI0NCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyNDgsIDI0OCwgMjQ4LCAyNDggfSwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjUyLCAyNTIsIDI1MiwgMjUyIH0sCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgMjQwLCAyNDAsIDI0MCwgMjQwIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaC1zY2kiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmU4ODAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAyNDQsIDI0NCwgMjQ0LCAyNDQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAyNDgsIDI0OCwgMjQ4LCAyNDggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjJfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYzX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZmU5ODAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAyNTIsIDI1MiwgMjUyLCAyNTIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjNfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtMzI1LDcgKzM1MSwxMCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzIwNl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc2NpX2RldmljZSwKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAogCSZjbXQwX2RldmljZSwKIAkmY210MV9kZXZpY2UsCiAJJm10dTJfMF9kZXZpY2UsCkBAIC0zNDYsNiArMzc1LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDcyMDZfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCisJJnNjaWYzX2RldmljZSwKIAkmY210MF9kZXZpY2UsCiAJJmNtdDFfZGV2aWNlLAogCSZtdHUyXzBfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKaW5kZXggYzIzMTA1OS4uN2I4OTJkNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCkBAIC02NywyNyArNjcsMzMgQEAKIHN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZQk9IDB4YTQ0MTAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYgfSwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiB9LAotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4YTQ0MTAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDU2LCA1NiwgNTYgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4YTQ0MDAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDUyLCA1MiwgNTIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtMjEwLDEwICsyMTYsMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MDVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLAotCSZzY2lfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogfTsKIApAQCAtMjI1LDYgKzIzMiw4IEBACiBhcmNoX2luaXRjYWxsKHNoNzcwNV9kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcwNV9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwppbmRleCAzNDdhYjM1Li5iYzBjNGY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKQEAgLTEwNiw0NCArMTA2LDU1IEBACiAJLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZmZmZTgwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0ksCisJLmlycXMJCT0geyAyMywgMjMsIDIzLCAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCiAJfSwKK307CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotCXsKLQkJLm1hcGJhc2UJPSAweGE0MDAwMTUwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGE0MDAwMTUwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAogCX0sCit9OwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotCXsKLQkJLm1hcGJhc2UJPSAweGE0MDAwMTQwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfSVJEQSwKLQkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAotCX0sCi0jZW5kaWYKLQl7Ci0JCS5mbGFncyA9IDAsCi0JfQorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGE0MDAwMTQwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX0lSREEsCisJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2gtc2NpIiwKLQkuaWQJCT0gLTEsCisJLmlkCQk9IDIsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewogCS5uYW1lID0gIlRNVTAiLApAQCAtMjM4LDEwICsyNDksMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MHhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCisJJnNjaWYxX2RldmljZSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKKwkmc2NpZjJfZGV2aWNlLAorI2VuZGlmCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCi0JJnNjaV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiB9OwogCkBAIC0yNTMsNiArMjczLDE2IEBACiBhcmNoX2luaXRjYWxsKHNoNzcweF9kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcweF9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKKwkmc2NpZjFfZGV2aWNlLAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQorCSZzY2lmMl9kZXZpY2UsCisjZW5kaWYKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCmluZGV4IDcxN2U5MGEuLjA4NDVhM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYwpAQCAtOTYsMjggKzk2LDMzIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTYsIDU2LCA1NiB9LAotCX0sIHsKLQotCQkuZmxhZ3MgPSAwLAotCX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiwgNTIgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4YTQ0MTAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDU2LCA1NiwgNTYsIDU2IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CiAKQEAgLTIxNCwxMCArMjE5LDExIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzEwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKLQkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIH07CiAKQEAgLTIyOSw2ICsyMzUsOCBAQAogYXJjaF9pbml0Y2FsbChzaDc3MTBfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MTBfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKaW5kZXggNzRkOGJhYS4uYTcxOGE2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCkBAIC00OCwyOCArNDgsMzMgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZQk9IDB4YTQ0MzAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDgwLCA4MCwgODAsIDgwIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4YTQ0MzgwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCi0JfSwgewotCi0JCS5mbGFncyA9IDAsCi0JfQorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGE0NDMwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA4MCwgODAsIDgwLCA4MCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2gtc2NpIiwKLQkuaWQJCT0gLTEsCisJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhhNDQzODAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtMzY5LDYgKzM3NCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKIAkmY210MF9kZXZpY2UsCiAJJmNtdDFfZGV2aWNlLAogCSZjbXQyX2RldmljZSwKQEAgLTM3OCw3ICszODUsNiBAQAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCi0JJnNjaV9kZXZpY2UsCiAJJnVzYl9vaGNpX2RldmljZSwKIAkmdXNiZl9kZXZpY2UsCiB9OwpAQCAtMzkxLDYgKzM5Nyw4IEBACiBhcmNoX2luaXRjYWxsKHNoNzcyMF9kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyMF9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCiAJJmNtdDBfZGV2aWNlLAogCSZjbXQxX2RldmljZSwKIAkmY210Ml9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jCmluZGV4IGRlNDgyN2QuLjRiNzMzNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jCkBAIC0xNSwyMiArMTUsMTggQEAKICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZTgwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaC1zY2kiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtMTI3LDcgKzEyMyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g0MjAyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzY2lfZGV2aWNlLAorCSZzY2lmMF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCkBAIC0xNDEsNiArMTM3LDcgQEAKIGFyY2hfaW5pdGNhbGwoc2g0MjAyX2RldmljZXNfc2V0dXApOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g0MjAyX2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCAxYjhiMTIyLi5iMmE5ZGYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTM1LDI5ICszNSwzMyBAQAogCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0jaWZuZGVmIENPTkZJR19TSF9SVFM3NzUxUjJECi0JCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjMsIDIzLCAwIH0sCi0JfSwgewotI2VuZGlmCi0JCS5tYXBiYXNlCT0gMHhmZmU4MDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKLQl9LCB7Ci0JCS5mbGFncyA9IDAsCi0JfQorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSSwKKwkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CiAKQEAgLTIyMSw4ICsyMjUsOSBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAogCSZydGNfZGV2aWNlLAotCSZzY2lfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLApAQCAtMjQyLDYgKzI0Nyw4IEBACiBhcmNoX2luaXRjYWxsKHNoNzc1MF9kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc1MF9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwppbmRleCA3ZmJiN2JlLi41Yjc0Y2MwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKQEAgLTEyNiwzNyArMTI2LDYzIEBACiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2lycSwgInNoNzc2MC1pcnEiLCB2ZWN0b3JzX2lycSwgZ3JvdXBzLAogCQkJIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZlNjAwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZlNjEwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3MiwgNzMsIDc1LCA3NCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZlNjIwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZlNDgwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSB7IDgwLCA4MSwgODIsIDAgfSwKLQl9LCB7Ci0JCS5mbGFncyA9IDAsCi0JfQorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZlNjAwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2gtc2NpIiwKLQkuaWQJCT0gLTEsCisJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZTYxMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNzIsIDczLCA3NSwgNzQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZlNjIwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmU0ODAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJLAorCS5pcnFzCQk9IHsgODAsIDgxLCA4MiwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC0yNTQsNyArMjgwLDEwIEBACiAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc2NpX2RldmljZSwKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLApAQCAtMjY4LDYgKzI5NywxMCBAQAogYXJjaF9pbml0Y2FsbChzaDc3NjBfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NjBfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCisJJnNjaWYzX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKaW5kZXggYWM0ZDU2Ny4uNDVlYjFiZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKQEAgLTE1LDYgKzE1LDcxIEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAorLyogU2VyaWFsICovCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTAwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgwLCA4MCwgODAsIDgwIH0sCisJLmNsawkJPSAic2NpZjAiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTEwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCisJLmNsawkJPSAic2NpZjEiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTIwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgyLCA4MiwgODIsIDgyIH0sCisJLmNsawkJPSAic2NpZjIiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTMwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgzLCA4MywgODMsIDgzIH0sCisJLmNsawkJPSAic2NpZjMiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpYzBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkubmFtZQk9ICJJSUMwIiwKQEAgLTI2NSw1MiArMzMwLDE3IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA4MCwgODAsIDgwLCA4MCB9LAotCQkuY2xrCQk9ICJzY2lmMCIsCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDgxLCA4MSwgODEsIDgxIH0sCi0JCS5jbGsJCT0gInNjaWYxIiwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmUyMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgODIsIDgyLCA4MiwgODIgfSwKLQkJLmNsawkJPSAic2NpZjIiLAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZTMwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA4MywgODMsIDgzLCA4MyB9LAotCQkuY2xrCQk9ICJzY2lmMyIsCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzQzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCiAJJmlpYzBfZGV2aWNlLAogCSZpaWMxX2RldmljZSwKLQkmc2NpX2RldmljZSwKIAkmdnB1X2RldmljZSwKIAkmdmV1X2RldmljZSwKIAkmanB1X2RldmljZSwKQEAgLTMyOCw2ICszNTgsMTAgQEAKIGFyY2hfaW5pdGNhbGwoc2g3MzQzX2RldmljZXNfc2V0dXApOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzQzX2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKaW5kZXggNGE5MDEwYi4uYzQ5NGMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKQEAgLTE4LDYgKzE4LDIyIEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgODAsIDgwLCA4MCwgODAgfSwKKwkuY2xrCQk9ICJzY2lmMCIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWljX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLm5hbWUJPSAiSUlDIiwKQEAgLTI3NiwzMyArMjkyLDEzIEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTJfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA4MCwgODAsIDgwLCA4MCB9LAotCQkuY2xrCQk9ICJzY2lmMCIsCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzY2X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKIAkmdG11Ml9kZXZpY2UsCiAJJmlpY19kZXZpY2UsCi0JJnNjaV9kZXZpY2UsCiAJJnVzYl9ob3N0X2RldmljZSwKIAkmdnB1X2RldmljZSwKIAkmdmV1MF9kZXZpY2UsCkBAIC0zMjEsNiArMzE3LDcgQEAKIGFyY2hfaW5pdGNhbGwoc2g3MzY2X2RldmljZXNfc2V0dXApOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzY2X2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggNTQ5MWIwOS4uYjUzMzViNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTIwLDYgKzIwLDU1IEBACiAjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KIAorLyogU2VyaWFsICovCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTAwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgwLCA4MCwgODAsIDgwIH0sCisJLmNsawkJPSAic2NpZjAiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTEwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCisJLmNsawkJPSAic2NpZjEiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTIwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgyLCA4MiwgODIsIDgyIH0sCisJLmNsawkJPSAic2NpZjIiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IDB4YTQ2NWZlYzAsCkBAIC0zMzksNDEgKzM4OCw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA4MCwgODAsIDgwLCA4MCB9LAotCQkuY2xrCQk9ICJzY2lmMCIsCi0JfSwKLQl7Ci0JCS5tYXBiYXNlCT0gMHhmZmUxMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgODEsIDgxLCA4MSwgODEgfSwKLQkJLmNsawkJPSAic2NpZjEiLAotCX0sCi0JewotCQkubWFwYmFzZQk9IDB4ZmZlMjAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDgyLCA4MiwgODIsIDgyIH0sCi0JCS5jbGsJCT0gInNjaWYyIiwKLQl9LAotCXsKLQkJLmZsYWdzID0gMCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaC1zY2kiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0gewogCS5tb2RlID0gMCwKIH07CkBAIC0zODcsNiArNDAxLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKQEAgLTM5NCw3ICs0MTEsNiBAQAogCSZydGNfZGV2aWNlLAogCSZ1c2JmX2RldmljZSwKIAkmaWljX2RldmljZSwKLQkmc2NpX2RldmljZSwKIAkmdnB1X2RldmljZSwKIAkmdmV1X2RldmljZSwKIAkmanB1X2RldmljZSwKQEAgLTQxMyw2ICs0MjksOSBAQAogYXJjaF9pbml0Y2FsbChzaDc3MjJfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKaW5kZXggNGNhYTVhNy4uNzcyYjkyNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKQEAgLTIwLDYgKzIwLDEwMyBAQAogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KICNpbmNsdWRlIDxjcHUvc2g3NzIzLmg+CiAKKy8qIFNlcmlhbCAqLworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKKwkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4MCwgODAsIDgwLCA4MCB9LAorCS5jbGsJCT0gInNjaWYwIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UgICAgICAgID0gMHhmZmUxMDAwMCwKKwkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4MSwgODEsIDgxLCA4MSB9LAorCS5jbGsJCT0gInNjaWYxIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UgICAgICAgID0gMHhmZmUyMDAwMCwKKwkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4MiwgODIsIDgyLCA4MiB9LAorCS5jbGsJCT0gInNjaWYyIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjJfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYzX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UgICAgICAgID0gMHhhNGUzMDAwMCwKKwkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUZBLAorCS5pcnFzICAgICAgICAgICA9IHsgNTYsIDU2LCA1NiwgNTYgfSwKKwkuY2xrCQk9ICJzY2lmMyIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmM19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYzX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlICAgICAgICA9IDB4YTRlNDAwMDAsCisJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGQSwKKwkuaXJxcyAgICAgICAgICAgPSB7IDg4LCA4OCwgODgsIDg4IH0sCisJLmNsawkJPSAic2NpZjQiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA0LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjVfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGE0ZTUwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRkEsCisJLmlycXMgICAgICAgICAgID0geyAxMDksIDEwOSwgMTA5LCAxMDkgfSwKKwkuY2xrCQk9ICJzY2lmNSIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDUsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY1X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdWlvX2luZm8gdnB1X3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUgPSAiVlBVNSIsCiAJLnZlcnNpb24gPSAiMCIsCkBAIC0zNDgsNTYgKzQ0NSw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKLQkJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKLQkJLmlycXMgICAgICAgICAgID0geyA4MCwgODAsIDgwLCA4MCB9LAotCQkuY2xrCQk9ICJzY2lmMCIsCi0JfSx7Ci0JCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMTAwMDAsCi0JCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCi0JCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKLQkJLmNsawkJPSAic2NpZjEiLAotCX0sewotCQkubWFwYmFzZSAgICAgICAgPSAweGZmZTIwMDAwLAotCQkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGLAotCQkuaXJxcyAgICAgICAgICAgPSB7IDgyLCA4MiwgODIsIDgyIH0sCi0JCS5jbGsJCT0gInNjaWYyIiwKLQl9LHsKLQkJLm1hcGJhc2UJPSAweGE0ZTMwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRkEsCi0JCS5pcnFzCQk9IHsgNTYsIDU2LCA1NiwgNTYgfSwKLQkJLmNsawkJPSAic2NpZjMiLAotCX0sewotCQkubWFwYmFzZQk9IDB4YTRlNDAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKLQkJLmlycXMJCT0geyA4OCwgODgsIDg4LCA4OCB9LAotCQkuY2xrCQk9ICJzY2lmNCIsCi0JfSx7Ci0JCS5tYXBiYXNlCT0gMHhhNGU1MDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUZBLAotCQkuaXJxcwkJPSB7IDEwOSwgMTA5LCAxMDksIDEwOSB9LAotCQkuY2xrCQk9ICJzY2lmNSIsCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IDB4YTQ2NWZlYzAsCkBAIC00ODgsNiArNTM1LDEyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCkBAIC00OTUsNyArNTQ4LDYgQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKLQkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljX2RldmljZSwKIAkmc2g3NzIzX3VzYl9ob3N0X2RldmljZSwKQEAgLTUxNiw2ICs1NjgsMTIgQEAKIGFyY2hfaW5pdGNhbGwoc2g3NzIzX2RldmljZXNfc2V0dXApOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIzX2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCmluZGV4IDg0NWU4OWMuLmE1MmYzNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCkBAIC0yNyw1MyArMjcsOTkgQEAKICNpbmNsdWRlIDxjcHUvc2g3NzI0Lmg+CiAKIC8qIFNlcmlhbCAqLwotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZSAgICAgICAgPSAweGZmZTAwMDAwLAotCQkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGLAotCQkuaXJxcyAgICAgICAgICAgPSB7IDgwLCA4MCwgODAsIDgwIH0sCi0JCS5jbGsJCT0gInNjaWYwIiwKLQl9LCB7Ci0JCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMTAwMDAsCi0JCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCi0JCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKLQkJLmNsawkJPSAic2NpZjEiLAotCX0sIHsKLQkJLm1hcGJhc2UgICAgICAgID0gMHhmZmUyMDAwMCwKLQkJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKLQkJLmlycXMgICAgICAgICAgID0geyA4MiwgODIsIDgyLCA4MiB9LAotCQkuY2xrCQk9ICJzY2lmMiIsCi0JfSwgewotCQkubWFwYmFzZQk9IDB4YTRlMzAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKLQkJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAotCQkuY2xrCQk9ICJzY2lmMyIsCi0JfSwgewotCQkubWFwYmFzZQk9IDB4YTRlNDAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKLQkJLmlycXMJCT0geyA4OCwgODgsIDg4LCA4OCB9LAotCQkuY2xrCQk9ICJzY2lmNCIsCi0JfSwgewotCQkubWFwYmFzZQk9IDB4YTRlNTAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKLQkJLmlycXMJCT0geyAxMDksIDEwOSwgMTA5LCAxMDkgfSwKLQkJLmNsawkJPSAic2NpZjUiLAotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGZmZTAwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgwLCA4MCwgODAsIDgwIH0sCisJLmNsawkJPSAic2NpZjAiLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2gtc2NpIiwKLQkuaWQJCT0gLTEsCisJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMTAwMDAsCisJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKKwkuY2xrCQk9ICJzY2lmMSIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMjAwMDAsCisJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODIsIDgyLCA4MiwgODIgfSwKKwkuY2xrCQk9ICJzY2lmMiIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlICAgICAgICA9IDB4YTRlMzAwMDAsCisJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGQSwKKwkuaXJxcyAgICAgICAgICAgPSB7IDU2LCA1NiwgNTYsIDU2IH0sCisJLmNsawkJPSAic2NpZjMiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZSAgICAgICAgPSAweGE0ZTQwMDAwLAorCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRkEsCisJLmlycXMgICAgICAgICAgID0geyA4OCwgODgsIDg4LCA4OCB9LAorCS5jbGsJCT0gInNjaWY0IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY1X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UgICAgICAgID0gMHhhNGU1MDAwMCwKKwkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUZBLAorCS5pcnFzICAgICAgICAgICA9IHsgMTA5LCAxMDksIDEwOSwgMTA5IH0sCisJLmNsawkJPSAic2NpZjUiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjVfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA1LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNV9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC01OTAsNiArNjM2LDEyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzI0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCkBAIC01OTcsNyArNjQ5LDYgQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKLQkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLApAQCAtNjI0LDYgKzY3NSwxMiBAQAogYXJjaF9pbml0Y2FsbChzaDc3MjRfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjRfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCisJJnNjaWYzX2RldmljZSwKKwkmc2NpZjRfZGV2aWNlLAorCSZzY2lmNV9kZXZpY2UsCiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc1Ny5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKaW5kZXggYzQ3MGUxNS4uMzdlMzJlZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMKQEAgLTE3LDYgKzE3LDUxIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmU0YjAwMDAsCQkvKiBTQ0lGMiAqLworCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmU0YzAwMDAsCQkvKiBTQ0lGMyAqLworCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmU0ZDAwMDAsCQkvKiBTQ0lGNCAqLworCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyAxMDQsIDEwNCwgMTA0LCAxMDQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewogCS5uYW1lID0gIlRNVTAiLAogCS5jaGFubmVsX29mZnNldCA9IDB4MDQsCkBAIC03OSwzOSArMTI0LDEyIEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTFfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZlNGIwMDAwLAkJLyogU0NJRjIgKi8KLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZTRjMDAwMCwJCS8qIFNDSUYzICovCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmU0ZDAwMDAsCQkvKiBTQ0lGNCAqLwotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxMDQsIDEwNCwgMTA0LCAxMDQgfSwKLQl9LCB7Ci0JCS5mbGFncyA9IDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2gtc2NpIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NTdfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAorCSZzY2lmNF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKLQkmc2NpX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc1N19kZXZpY2VzX3NldHVwKHZvaWQpCkBAIC0xMjEsNiArMTM5LDIwIEBACiB9CiBhcmNoX2luaXRjYWxsKHNoNzc1N19kZXZpY2VzX3NldHVwKTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc1N19lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmdG11MF9kZXZpY2UsCisJJnRtdTFfZGV2aWNlLAorfTsKKwordm9pZCBfX2luaXQgcGxhdF9lYXJseV9kZXZpY2Vfc2V0dXAodm9pZCkKK3sKKwllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3NTdfZWFybHlfZGV2aWNlcywKKwkJCQkgICBBUlJBWV9TSVpFKHNoNzc1N19lYXJseV9kZXZpY2VzKSk7Cit9CisKIGVudW0gewogCVVOVVNFRCA9IDAsCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKaW5kZXggNDY1OWZmZi4uNmFiYTI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKQEAgLTE2LDYgKzE2LDUxIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZTA4MDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDEwNCwgMTA0LCAxMDQsIDEwNCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IDB4ZmZlODAwMDAsCkBAIC0zNiwzNSArODEsNiBAQAogCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0JCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmUwODAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNzYsIDc2LCA3NiwgNzYgfSwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmUxMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTA0LCAxMDQsIDEwNCwgMTA0IH0sCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9vaGNpX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gMHhmZmVjODAwMCwKQEAgLTI5Nyw2ICszMTMsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc2M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKQEAgLTMwNCw3ICszMjMsNiBAQAogCSZ0bXU0X2RldmljZSwKIAkmdG11NV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCi0JJnNjaV9kZXZpY2UsCiAJJnVzYl9vaGNpX2RldmljZSwKIAkmdXNiZl9kZXZpY2UsCiB9OwpAQCAtMzE3LDYgKzMzNSw5IEBACiBhcmNoX2luaXRjYWxsKHNoNzc2M19kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc2M19lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKaW5kZXggZWVhZDA4ZC4uYzE2NDNiYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKQEAgLTE0LDY3ICsxNCwxNTMgQEAKICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmOTIzMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2MSwgNjEsIDYxLCA2MSB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTI0MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2MiwgNjIsIDYyLCA2MiB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTI1MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2MywgNjMsIDYzLCA2MyB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTI2MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2NCwgNjQsIDY0LCA2NCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTI3MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2NSwgNjUsIDY1LCA2NSB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTI4MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2NiwgNjYsIDY2LCA2NiB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTI5MDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2NywgNjcsIDY3LCA2NyB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTJhMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2OCwgNjgsIDY4LCA2OCB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTJiMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2OSwgNjksIDY5LCA2OSB9LAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmOTJjMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3MCwgNzAsIDcwLCA3MCB9LAotCX0sIHsKLQkJLmZsYWdzID0gMCwKLQl9CitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmY5MjMwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDYxLCA2MSwgNjEsIDYxIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaC1zY2kiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmOTI0MDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA2MiwgNjIsIDYyLCA2MiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmY5MjUwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDYzLCA2MywgNjMsIDYzIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZjkyNjAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNjQsIDY0LCA2NCwgNjQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjNfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY0X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmOTI3MDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA2NSwgNjUsIDY1LCA2NSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA0LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjVfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmY5MjgwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDY2LCA2NiwgNjYsIDY2IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDUsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY1X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZjkyOTAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNjcsIDY3LCA2NywgNjcgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY2X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjZfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY3X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmOTJhMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA2OCwgNjgsIDY4LCA2OCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjdfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA3LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmN19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjhfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmY5MmIwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDY5LCA2OSwgNjksIDY5IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmOF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDgsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY4X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmOV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZjkyYzAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNzAsIDcwLCA3MCwgNzAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY5X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gOSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjlfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtMzUxLDYgKzQzNywxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc3MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAorCSZzY2lmNF9kZXZpY2UsCisJJnNjaWY1X2RldmljZSwKKwkmc2NpZjZfZGV2aWNlLAorCSZzY2lmN19kZXZpY2UsCisJJnNjaWY4X2RldmljZSwKKwkmc2NpZjlfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLApAQCAtMzYwLDcgKzQ1Niw2IEBACiAJJnRtdTZfZGV2aWNlLAogCSZ0bXU3X2RldmljZSwKIAkmdG11OF9kZXZpY2UsCi0JJnNjaV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3NzBfZGV2aWNlc19zZXR1cCh2b2lkKQpAQCAtMzcxLDYgKzQ2NiwxNiBAQAogYXJjaF9pbml0Y2FsbChzaDc3NzBfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NzBfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCisJJnNjaWYzX2RldmljZSwKKwkmc2NpZjRfZGV2aWNlLAorCSZzY2lmNV9kZXZpY2UsCisJJnNjaWY2X2RldmljZSwKKwkmc2NpZjdfZGV2aWNlLAorCSZzY2lmOF9kZXZpY2UsCisJJnNjaWY5X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggMTJmZjU2Zi4uYzMxMDU1OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTE1LDYgKzE1LDM2IEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZTEwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUgPSAiVE1VMCIsCiAJLmNoYW5uZWxfb2Zmc2V0ID0gMHgwNCwKQEAgLTIxNywzMCArMjQ3LDYgQEAKIAkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1vZGUgPSAoU0hETUFfTUlYX0lSUSB8IFNIRE1BX0RNQU9SMSksCiB9OwpAQCAtMjU0LDYgKzI2MCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzgwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKQEAgLTI2MSw3ICsyNjksNiBAQAogCSZ0bXU0X2RldmljZSwKIAkmdG11NV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCi0JJnNjaV9kZXZpY2UsCiAJJmRtYV9kZXZpY2UsCiB9OwogCkBAIC0yNzEsOCArMjc4LDkgQEAKIAkJCQkgICAgQVJSQVlfU0laRShzaDc3ODBfZGV2aWNlcykpOwogfQogYXJjaF9pbml0Y2FsbChzaDc3ODBfZGV2aWNlc19zZXR1cCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODBfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCA3ZjZjNzE4Li5lZjI2ZWJkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMTYsNiArMTYsMTAyIEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKKwkuY2xrCQk9ICJzY2lmX2ZjayIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmViMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKKwkuY2xrCQk9ICJzY2lmX2ZjayIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVjMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNjAsIDYwLCA2MCwgNjAgfSwKKwkuY2xrCQk9ICJzY2lmX2ZjayIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVkMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNjEsIDYxLCA2MSwgNjEgfSwKKwkuY2xrCQk9ICJzY2lmX2ZjayIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmM19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYzX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVlMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNjIsIDYyLCA2MiwgNjIgfSwKKwkuY2xrCQk9ICJzY2lmX2ZjayIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDQsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY0X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVmMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNjMsIDYzLCA2MywgNjMgfSwKKwkuY2xrCQk9ICJzY2lmX2ZjayIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDUsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY1X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKIAkubmFtZSA9ICJUTVUwIiwKIAkuY2hhbm5lbF9vZmZzZXQgPSAweDA0LApAQCAtMTk4LDY0ICsyOTQsMTkgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NV9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZQk9IDB4ZmZlYTAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCi0JCS5jbGsJCT0gInNjaWZfZmNrIiwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmViMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKLQkJLmNsawkJPSAic2NpZl9mY2siLAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2MCwgNjAsIDYwLCA2MCB9LAotCQkuY2xrCQk9ICJzY2lmX2ZjayIsCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlZDAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDYxLCA2MSwgNjEsIDYxIH0sCi0JCS5jbGsJCT0gInNjaWZfZmNrIiwKLQl9LCB7Ci0JCS5tYXBiYXNlCT0gMHhmZmVlMDAwMCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNjIsIDYyLCA2MiwgNjIgfSwKLQkJLmNsawkJPSAic2NpZl9mY2siLAotCX0sIHsKLQkJLm1hcGJhc2UJPSAweGZmZWYwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA2MywgNjMsIDYzLCA2MyB9LAotCQkuY2xrCQk9ICJzY2lmX2ZjayIsCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3Nzg1X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAotCSZzY2lfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3Nzg1X2RldmljZXNfc2V0dXAodm9pZCkKQEAgLTI2Niw2ICszMTcsMTIgQEAKIGFyY2hfaW5pdGNhbGwoc2g3Nzg1X2RldmljZXNfc2V0dXApOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3Nzg1X2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwppbmRleCAwMTA0YThlLi43MTY3MzQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpAQCAtMjMsNTEgKzIzLDk2IEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAotCX0sCi0JLyoKLQkgKiBUaGUgcmVzdCBvZiB0aGVzZSBhbGwgaGF2ZSBtdWx0aXBsZXhlZCBJUlFzCi0JICovCi0JewotCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlYzAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUwLCA1MCwgNTAsIDUwIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlZDAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUxLCA1MSwgNTEsIDUxIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlZTAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZlZjAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUzLCA1MywgNTMsIDUzIH0sCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCisvKgorICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcworICovCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVjMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNTAsIDUwLCA1MCwgNTAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjJfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYzX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGZmZWQwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA1MSwgNTEsIDUxLCA1MSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZlZTAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDQsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY0X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmVmMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNTMsIDUzLCA1MywgNTMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY1X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjVfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtNDU5LDYgKzUwNCwxMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAorCSZzY2lmNF9kZXZpY2UsCisJJnNjaWY1X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKQEAgLTQ3NCw3ICs1MjUsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc2NpX2RldmljZSwKIAkmdXNiX29oY2lfZGV2aWNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2h4My5jCmluZGV4IGM3YmE5MTYuLjc4MGJhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoeDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaHgzLmMKQEAgLTI0LDMyICsyNCw0OCBAQAogICogc2lsaWNvbiBpbiB0aGUgZmlyc3QgcGxhY2UsIHdlIGp1c3QgcmVmdXNlIHRvIGRlYWwgd2l0aCB0aGUgcG9ydCBhdAogICogYWxsIHJhdGhlciB0aGFuIGFkZGluZyBpbmZyYXN0cnVjdHVyZSB0byBoYWNrIGFyb3VuZCBpdC4KICAqLwotc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZQk9IDB4ZmZjMzAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZjNDAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQ0LCA0NSwgNDcsIDQ2IH0sCi0JfSwgewotCQkubWFwYmFzZQk9IDB4ZmZjNjAwMDAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCi0JfSwgewotCQkuZmxhZ3MgPSAwLAotCX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmMzMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZmZjNDAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDQ0LCA0NSwgNDcsIDQ2IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhmZmM2MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjJfcGxhdGZvcm1fZGF0YSwKIAl9LAogfTsKIApAQCAtMjM2LDYgKzI1Miw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2h4M19lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLAogCSZ0bXUyX2RldmljZSwKQEAgLTI0NCwyMSArMjYzLDEwIEBACiAJJnRtdTVfZGV2aWNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoeDNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnNjaV9kZXZpY2UsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBzaHgzX2RldmljZXNfc2V0dXAodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoc2h4M19lYXJseV9kZXZpY2VzLAorCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaHgzX2Vhcmx5X2RldmljZXMsCiAJCQkJICAgQVJSQVlfU0laRShzaHgzX2Vhcmx5X2RldmljZXMpKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoeDNfZGV2aWNlcywKLQkJCQkgICAgQVJSQVlfU0laRShzaHgzX2RldmljZXMpKTsKIH0KIGFyY2hfaW5pdGNhbGwoc2h4M19kZXZpY2VzX3NldHVwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKaW5kZXggZGQ0ZjUxZi4uNDY0OGNjZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCkBAIC0zNCw3ICszNCw3IEBACiAJfQogfTsKIAotdm9pZCBzYXZlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCWFzbSB2b2xhdGlsZSgiZnN0LnAgICAgICUwLCAoMCo4KSwgZnAwXG5cdCIKIAkJICAgICAiZnN0LnAgICAgICUwLCAoMSo4KSwgZnAyXG5cdCIKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWVuYWJsZV9mcHUoKTsKIAlpZiAobGFzdF90YXNrX3VzZWRfbWF0aCAhPSBOVUxMKQogCQkvKiBPdGhlciBwcm9jZXNzZXMgZnB1IHN0YXRlLCBzYXZlIGF3YXkgKi8KLQkJc2F2ZV9mcHUobGFzdF90YXNrX3VzZWRfbWF0aCwgcmVncyk7CisJCXNhdmVfZnB1KGxhc3RfdGFza191c2VkX21hdGgpOwogCiAgICAgICAgIGxhc3RfdGFza191c2VkX21hdGggPSBjdXJyZW50OwogICAgICAgICBpZiAodXNlZF9tYXRoKCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvc2V0dXAtc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L3NldHVwLXNoNS5jCmluZGV4IDZhMGY4MmYuLmU3YTNjMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvc2V0dXAtc2g1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9zZXR1cC1zaDUuYwpAQCAtMTYsMjIgKzE2LDE4IEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1hcGJhc2UJPSBQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyAweDAxMDMwMDAwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDM5LCA0MCwgNDIsIDAgfSwKLQl9LCB7Ci0JCS5mbGFncyA9IDAsCi0JfQorc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSBQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyAweDAxMDMwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDM5LCA0MCwgNDIsIDAgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoLXNjaSIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC0xNjQsMTMgKzE2MCwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNV9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCiAJJnRtdTJfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggODFhNDYxNC4uZjhiYjUwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwogI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CiAKIC8qCkBAIC01NywxNDkgKzU2LDggQEAKIAkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAogCS5pbmRleAkJPSAtMSwKIH07Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUKLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotI2RlZmluZSBFUEtfU0NTTVJfVkFMVUUgMHgwMDAKLSNkZWZpbmUgRVBLX1NDQlJSX1ZBTFVFIDB4MDBDCi0jZGVmaW5lIEVQS19GSUZPX1NJWkUgNjQKLSNkZWZpbmUgRVBLX0ZJRk9fQklUUyAoMHg3ZjAwID4+IDgpCi0jZWxzZQotI2RlZmluZSBFUEtfRklGT19TSVpFIDE2Ci0jZGVmaW5lIEVQS19GSUZPX0JJVFMgKDB4MWYwMCA+PiA4KQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHNjaWZfcG9ydCA9IHsKLQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JLm1hcGJhc2UJPSBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQsCi0JLm1lbWJhc2UJPSAoY2hhciBfX2lvbWVtICopQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JULAotfTsKLQotc3RhdGljIHZvaWQgc2NpZl9zZXJjb25fcHV0YyhpbnQgYykKLXsKLQl3aGlsZSAoKChzY2lfaW4oJnNjaWZfcG9ydCwgU0NGRFIpICYgRVBLX0ZJRk9fQklUUykgPj0gRVBLX0ZJRk9fU0laRSkpCi0JCTsKLQotCXNjaV9pbigmc2NpZl9wb3J0LCBTQ3hTUik7Ci0Jc2NpX291dCgmc2NpZl9wb3J0LCBTQ3hTUiwgMHhmMyAmIH4oMHgyMCB8IDB4NDApKTsKLQlzY2lfb3V0KCZzY2lmX3BvcnQsIFNDeFREUiwgYyk7Ci0KLQl3aGlsZSAoKHNjaV9pbigmc2NpZl9wb3J0LCBTQ3hTUikgJiAweDQwKSA9PSAwKQotCQk7Ci0KLQlpZiAoYyA9PSAnXG4nKQotCQlzY2lmX3NlcmNvbl9wdXRjKCdccicpOwotfQotCi1zdGF0aWMgdm9pZCBzY2lmX3NlcmNvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLAotCQkJICAgICAgdW5zaWduZWQgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0gPiAwKQotCQlzY2lmX3NlcmNvbl9wdXRjKCpzKyspOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzY2lmX3NlcmNvbl9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY29uLCBjaGFyICpvcHRpb25zKQotewotCWNvbi0+Y2ZsYWcgPSBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMIHwgQjExNTIwMCB8IENTODsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgc2NpZl9jb25zb2xlID0gewotCS5uYW1lCQk9ICJzZXJjb24iLAotCS53cml0ZQkJPSBzY2lmX3NlcmNvbl93cml0ZSwKLQkuc2V0dXAJCT0gc2NpZl9zZXJjb25fc2V0dXAsCi0JLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKLQkuaW5kZXgJCT0gLTEsCi19OwotCi0jaWYgIWRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotc3RhdGljIHZvaWQgc2NpZl9zZXJjb25faW5pdChjaGFyICpzKQotewotCXNjaV9vdXQoJnNjaWZfcG9ydCwgU0NTQ1IsIDB4MDAwMCk7CS8qIGNsZWFyIFRFIGFuZCBSRSAqLwotCXNjaV9vdXQoJnNjaWZfcG9ydCwgU0NGQ1IsIDB4NDAwNik7CS8qIHJlc2V0ICovCi0Jc2NpX291dCgmc2NpZl9wb3J0LCBTQ1NDUiwgMHgwMDAwKTsJLyogc2VsZWN0IGludGVybmFsIGNsb2NrICovCi0Jc2NpX291dCgmc2NpZl9wb3J0LCBTQ1NNUiwgRVBLX1NDU01SX1ZBTFVFKTsKLQlzY2lfb3V0KCZzY2lmX3BvcnQsIFNDQlJSLCBFUEtfU0NCUlJfVkFMVUUpOwotCi0JbWRlbGF5KDEpOwkvKiB3YWl0IDEtYml0IHRpbWUgKi8KLQotCXNjaV9vdXQoJnNjaWZfcG9ydCwgU0NGQ1IsIDB4MDAzMCk7CS8qIFRUUkc9YicxMSAqLwotCXNjaV9vdXQoJnNjaWZfcG9ydCwgU0NTQ1IsIDB4MDAzMCk7CS8qIFRFLCBSRSAqLwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykKLSNkZWZpbmUgREVGQVVMVF9CQVVEIDExNTIwMAotLyoKLSAqIFNpbXBsZSBTQ0lGIGluaXQsIHByaW1hcmlseSBhaW1lZCBhdCBTSDc3NTAgYW5kIG90aGVyIHNpbWlsYXIgU0gtNAotICogZGV2aWNlcyB0aGF0IGFyZW4ndCB1c2luZyBzaC1pcGwrZy4KLSAqLwotc3RhdGljIHZvaWQgc2NpZl9zZXJjb25faW5pdChjaGFyICpzKQotewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2NpZl9wb3J0OwotCXVuc2lnbmVkIGJhdWQgPSBERUZBVUxUX0JBVUQ7Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKLQljaGFyICplOwotCi0JaWYgKCpzID09ICcsJykKLQkJKytzOwotCi0JaWYgKCpzKSB7Ci0JCS8qIGlnbm9yZSBpb3BvcnQvZGV2aWNlIG5hbWUgKi8KLQkJcyArPSBzdHJjc3BuKHMsICIsIik7Ci0JCWlmICgqcyA9PSAnLCcpCi0JCQlzKys7Ci0JfQotCi0JaWYgKCpzKSB7Ci0JCWJhdWQgPSBzaW1wbGVfc3RydG91bChzLCAmZSwgMCk7Ci0JCWlmIChiYXVkID09IDAgfHwgcyA9PSBlKQotCQkJYmF1ZCA9IERFRkFVTFRfQkFVRDsKLQl9Ci0KLQlkbyB7Ci0JCXN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7Ci0JfSB3aGlsZSAoIShzdGF0dXMgJiBTQ3hTUl9URU5EKHBvcnQpKSk7Ci0KLQlzY2lfb3V0KHBvcnQsIFNDU0NSLCAwKTsJIC8qIFRFPTAsIFJFPTAgKi8KLQlzY2lfb3V0KHBvcnQsIFNDRkNSLCBTQ0ZDUl9SRlJTVCB8IFNDRkNSX1RGUlNUKTsKLQlzY2lfb3V0KHBvcnQsIFNDU01SLCAwKTsKLQotCS8qIFNldCBiYXVkIHJhdGUgKi8KLQlzY2lfb3V0KHBvcnQsIFNDQlJSLCAoQ09ORklHX1NIX1BDTEtfRlJFUSArIDE2ICogYmF1ZCkgLwotCQkoMzIgKiBiYXVkKSAtIDEpOwotCXVkZWxheSgoMTAwMDAwMCsoYmF1ZC0xKSkgLyBiYXVkKTsgLyogV2FpdCBvbmUgYml0IGludGVydmFsICovCi0KLQlzY2lfb3V0KHBvcnQsIFNDU1BUUiwgMCk7Ci0Jc2NpX291dChwb3J0LCBTQ3hTUiwgMHg2MCk7Ci0Jc2NpX291dChwb3J0LCBTQ0xTUiwgMCk7Ci0KLQlzY2lfb3V0KHBvcnQsIFNDRkNSLCAwKTsKLQlzY2lfb3V0KHBvcnQsIFNDU0NSLCAweDMwKTsJIC8qIFRFPTEsIFJFPTEgKi8KLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApICovCi0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpICovCi0jZW5kaWYgLyogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSAqLwotCi0vKgotICogU2V0dXAgYSBkZWZhdWx0IGNvbnNvbGUsIGlmIG1vcmUgdGhhbiBvbmUgaXMgY29tcGlsZWQgaW4sIHJlbHkgb24gdGhlCi0gKiBlYXJseXByaW50az0gcGFyc2luZyB0byBnaXZlIHByaW9yaXR5LgotICovCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGUgPQotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JJmJpb3NfY29uc29sZQotI2VsaWYgZGVmaW5lZChDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFKQotCSZzY2lmX2NvbnNvbGUKLSNlbHNlCi0JTlVMTAotI2VuZGlmCi0JOworc3RhdGljIHN0cnVjdCBjb25zb2xlICplYXJseV9jb25zb2xlOwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqYnVmKQogewpAQCAtMjExLDIxICs2OSw4IEBACiAJaWYgKHN0cnN0cihidWYsICJrZWVwIikpCiAJCWtlZXBfZWFybHkgPSAxOwogCi0jaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKIAlpZiAoIXN0cm5jbXAoYnVmLCAiYmlvcyIsIDQpKQogCQllYXJseV9jb25zb2xlID0gJmJpb3NfY29uc29sZTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSkKLQlpZiAoIXN0cm5jbXAoYnVmLCAic2VyaWFsIiwgNikpIHsKLQkJZWFybHlfY29uc29sZSA9ICZzY2lmX2NvbnNvbGU7Ci0KLSNpZiAhZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0gzKQotCQlzY2lmX3NlcmNvbl9pbml0KGJ1ZiArIDYpOwotI2VuZGlmCi0jZW5kaWYKLQl9Ci0jZW5kaWYKIAogCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpIHsKIAkJaWYgKGtlZXBfZWFybHkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCmluZGV4IGI2ZjQxYzEuLmE0OGNkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCkBAIC00MDEsODIgKzQwMSwxMCBAQAogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CiBleHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOwotCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgKnN5c2NhbGwpCit1bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCiB7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0YXJ0OwotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdG9wOwotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07Ci0KLQotCXN0YXJ0ID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YTsKLQlzdG9wID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhOwotCWthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZykgc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQotCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7Ci0JCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lLCBzdHIpKQotCQkJcmV0dXJuIHN0YXJ0OwotCX0KLQotCXJldHVybiBOVUxMOworCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07CiB9Ci0KLXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNjYWxsX25yX3RvX21ldGEoaW50IG5yKQotewotCWlmICghc3lzY2FsbHNfbWV0YWRhdGEgfHwgbnIgPj0gRlRSQUNFX1NZU0NBTExfTUFYIHx8IG5yIDwgMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOwotfQotCi1pbnQgc3lzY2FsbF9uYW1lX3RvX25yKGNoYXIgKm5hbWUpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKQotCQlyZXR1cm4gLTE7Ci0JZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspCi0JCWlmIChzeXNjYWxsc19tZXRhZGF0YVtpXSkKLQkJCWlmICghc3RyY21wKHN5c2NhbGxzX21ldGFkYXRhW2ldLT5uYW1lLCBuYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXZvaWQgc2V0X3N5c2NhbGxfZW50ZXJfaWQoaW50IG51bSwgaW50IGlkKQotewotCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmVudGVyX2lkID0gaWQ7Ci19Ci0KLXZvaWQgc2V0X3N5c2NhbGxfZXhpdF9pZChpbnQgbnVtLCBpbnQgaWQpCi17Ci0Jc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZXhpdF9pZCA9IGlkOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7Ci0JdW5zaWduZWQgbG9uZyAqKnBzeXNfc3lzY2FsbF90YWJsZSA9ICZzeXNfY2FsbF90YWJsZTsKLQotCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCi0JCQkJCUZUUkFDRV9TWVNDQUxMX01BWCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NZU0NBTExfTUFYOyBpKyspIHsKLQkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKHBzeXNfc3lzY2FsbF90YWJsZVtpXSk7Ci0JCXN5c2NhbGxzX21ldGFkYXRhW2ldID0gbWV0YTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLWFyY2hfaW5pdGNhbGwoYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwppbmRleCBlMTkxM2YyLi5kMmQ0MWQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwpAQCAtNzYsNyArNzYsNyBAQAogCWlmICghZGVzYykKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJYW55X2NvdW50IHw9IGtzdGF0X2lycXNfY3B1KGksIGopOwogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKQEAgLTk3LDcgKzk3LDcgQEAKIAogCXNlcV9wdXRjKHAsICdcbicpOwogb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggMzU5YjhhMi4uMzFmODBjNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJaWYgKGZwdmFsaWQpIHsKIAkJaWYgKGN1cnJlbnQgPT0gbGFzdF90YXNrX3VzZWRfbWF0aCkgewogCQkJZW5hYmxlX2ZwdSgpOwotCQkJc2F2ZV9mcHUodHNrLCByZWdzKTsKKwkJCXNhdmVfZnB1KHRzayk7CiAJCQlkaXNhYmxlX2ZwdSgpOwogCQkJbGFzdF90YXNrX3VzZWRfbWF0aCA9IDA7CiAJCQlyZWdzLT5zciB8PSBTUl9GRDsKQEAgLTQzMSw3ICs0MzEsNyBAQAogI2lmZGVmIENPTkZJR19TSF9GUFUKIAlpZihsYXN0X3Rhc2tfdXNlZF9tYXRoID09IGN1cnJlbnQpIHsKIAkJZW5hYmxlX2ZwdSgpOwotCQlzYXZlX2ZwdShjdXJyZW50LCByZWdzKTsKKwkJc2F2ZV9mcHUoY3VycmVudCk7CiAJCWRpc2FibGVfZnB1KCk7CiAJCWxhc3RfdGFza191c2VkX21hdGggPSBOVUxMOwogCQlyZWdzLT5zciB8PSBTUl9GRDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKaW5kZXggOTUyZGE4My4uODczZWJkYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKQEAgLTgyLDcgKzgyLDcgQEAKIAogCWlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IHRhc2spIHsKIAkJZW5hYmxlX2ZwdSgpOwotCQlzYXZlX2ZwdSh0YXNrLCByZWdzKTsKKwkJc2F2ZV9mcHUodGFzayk7CiAJCWRpc2FibGVfZnB1KCk7CiAJCWxhc3RfdGFza191c2VkX21hdGggPSAwOwogCQlyZWdzLT5zciB8PSBTUl9GRDsKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFzayk7CiAJfSBlbHNlIGlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IHRhc2spIHsKIAkJZW5hYmxlX2ZwdSgpOwotCQlzYXZlX2ZwdSh0YXNrLCByZWdzKTsKKwkJc2F2ZV9mcHUodGFzayk7CiAJCWRpc2FibGVfZnB1KCk7CiAJCWxhc3RfdGFza191c2VkX21hdGggPSAwOwogCQlyZWdzLT5zciB8PSBTUl9GRDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDVhOTQ3YTIuLjhiMGU2OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDIzLDYgKzQyMyw5IEBACiAKIAlwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCgpOwogCisJLyogTGV0IGVhcmx5cHJpbnRrIG91dHB1dCBlYXJseSBjb25zb2xlIG1lc3NhZ2VzICovCisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCJlYXJseXByaW50ayIsIDEsIDEpOworCiAJc2hfbXZfc2V0dXAoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IGZlYjNkZGQuLmNlNzZkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAogCWlmIChjdXJyZW50ID09IGxhc3RfdGFza191c2VkX21hdGgpIHsKIAkJZW5hYmxlX2ZwdSgpOwotCQlzYXZlX2ZwdShjdXJyZW50LCByZWdzKTsKKwkJc2F2ZV9mcHUoY3VycmVudCk7CiAJCWRpc2FibGVfZnB1KCk7CiAJCWxhc3RfdGFza191c2VkX21hdGggPSBOVUxMOwogCQlyZWdzLT5zciB8PSBTUl9GRDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzMyLlMgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc18zMi5TCmluZGV4IDE5ZmQxMWQuLjRiZDVhMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzMyLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfMzIuUwpAQCAtMzUzLDMgKzM1Myw0IEBACiAJLmxvbmcgc3lzX3B3cml0ZXYKIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogMzM1ICovCiAJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgorCS5sb25nIHN5c19yZWN2bW1zZwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggM2RhNWExMi4uODY2MzliZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC00NTIsMTIgKzQ1MiwxOCBAQAogCXJtID0gcmVncy0+cmVnc1tpbmRleF07CiAKIAkvKiBzaG91dCBhYm91dCBmaXh1cHMgKi8KLQlpZiAoIWV4cGVjdGVkICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJGaXhpbmcgdXAgdW5hbGlnbmVkICVzIGFjY2VzcyAiCi0JCSAgICAgICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkgICAgICAgdXNlcl9tb2RlKHJlZ3MpID8gInVzZXJzcGFjZSIgOiAia2VybmVsIiwKLQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAotCQkgICAgICAgKHZvaWQgKilyZWdzLT5wYywgaW5zdHJ1Y3Rpb24pOworCWlmICghZXhwZWN0ZWQpIHsKKwkJaWYgKHVzZXJfbW9kZShyZWdzKSAmJiAoc2VfdXNlcm1vZGUgJiAxKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQgdXNlcnNwYWNlIGFjY2VzcyAiCisJCQkJICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAorCQkJCSAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksCisJCQkJICAodm9pZCAqKXJlZ3MtPnBjLCBpbnN0cnVjdGlvbik7CisJCWVsc2UgaWYgKHNlX2tlcm5tb2RlX3dhcm4gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJfbm90aWNlKCJGaXhpbmcgdXAgdW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgorCQkJCSAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKKwkJCQkgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQkJCSAgKHZvaWQgKilyZWdzLT5wYywgaW5zdHJ1Y3Rpb24pOworCX0KIAogCXJldCA9IC1FRkFVTFQ7CiAJc3dpdGNoIChpbnN0cnVjdGlvbiYweEYwMDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jCmluZGV4IDc1YzBjYmUuLmQ4NmY1MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJCSAgIGluZGV4ZWQgYnkgcmVnaXN0ZXIgbnVtYmVyLiAqLwogCQlpZiAobGFzdF90YXNrX3VzZWRfbWF0aCA9PSBjdXJyZW50KSB7CiAJCQllbmFibGVfZnB1KCk7Ci0JCQlzYXZlX2ZwdShjdXJyZW50LCByZWdzKTsKKwkJCXNhdmVfZnB1KGN1cnJlbnQpOwogCQkJZGlzYWJsZV9mcHUoKTsKIAkJCWxhc3RfdGFza191c2VkX21hdGggPSBOVUxMOwogCQkJcmVncy0+c3IgfD0gU1JfRkQ7CkBAIC02NzMsNyArNjczLDcgQEAKIAkJICAgaW5kZXhlZCBieSByZWdpc3RlciBudW1iZXIuICovCiAJCWlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IGN1cnJlbnQpIHsKIAkJCWVuYWJsZV9mcHUoKTsKLQkJCXNhdmVfZnB1KGN1cnJlbnQsIHJlZ3MpOworCQkJc2F2ZV9mcHUoY3VycmVudCk7CiAJCQlkaXNhYmxlX2ZwdSgpOwogCQkJbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7CiAJCQlyZWdzLT5zciB8PSBTUl9GRDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IGYzNmEwOGIuLjU2MGRkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMjU2LDggKzI1Niw3IEBACiAJCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKIAl9CiAKLQlpZiAocGFnZXNfZG9fYWxpYXMoYWRkcmVzcywgcGh5cykpCi0JCWZsdXNoX2NhY2hlX29uZShDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwKKwlmbHVzaF9jYWNoZV9vbmUoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8CiAJCQkoYWRkcmVzcyAmIHNobV9hbGlnbl9tYXNrKSwgcGh5cyk7CiAKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IGE4NmVhYTkuLjIxNDFiZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC0zMywxMCArMzMsMTAgQEAKICAqIGhhdmUgdG8gY29udmVydCB0aGVtIGludG8gYW4gb2Zmc2V0IGluIGEgcGFnZS1hbGlnbmVkIG1hcHBpbmcsIGJ1dCB0aGUKICAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgogICovCi12b2lkIF9faW9tZW0gKl9faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJdW5zaWduZWQgbG9uZyBmbGFncykKK3ZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKIHsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICogYXJlYTsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHIsIGFkZHIsIG9yaWdfYWRkcjsKIAlwZ3Byb3RfdCBwZ3Byb3Q7CiAKQEAgLTY3LDcgKzY3LDcgQEAKIAkvKgogCSAqIE9rLCBnbyBmb3IgaXQuLgogCSAqLwotCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CiAJaWYgKCFhcmVhKQogCQlyZXR1cm4gTlVMTDsKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CkBAIC0xMDMsNyArMTAzLDcgQEAKIAogCXJldHVybiAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIChjaGFyICopb3JpZ19hZGRyKTsKIH0KLUVYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwX2NhbGxlcik7CiAKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF82NC5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKaW5kZXggYjE2ODQzZC4uZWY0MzQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKQEAgLTI1OCwxNSArMjU4LDE1IEBACiAJcHRlX2NsZWFyKCZpbml0X21tLCB2YWRkciwgcHRlcCk7CiB9CiAKLXZvaWQgX19pb21lbSAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQl1bnNpZ25lZCBsb25nIGZsYWdzKQordm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQogewogCWNoYXIgbmFtZVsxNF07CiAKIAlzcHJpbnRmKG5hbWUsICJwaHlzXyUwOHgiLCAodTMyKW9mZnNldCk7CiAJcmV0dXJuIHNobWVkaWFfYWxsb2NfaW8ob2Zmc2V0LCBzaXplLCBuYW1lLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CitFWFBPUlRfU1lNQk9MKF9faW9yZW1hcF9jYWxsZXIpOwogCiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKnZpcnR1YWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL251bWEuYyBiL2FyY2gvc2gvbW0vbnVtYS5jCmluZGV4IDZjNTI0NDQuLjQyMmU5MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vbnVtYS5jCisrKyBiL2FyY2gvc2gvbW0vbnVtYS5jCkBAIC0yOCw3ICsyOCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmcmVlX3BmbiA9IFBGTl9VUChfX3BhKF9lbmQpKTsKIAl1NjQgYmFzZSA9IG1pbl9sb3dfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JdTY0IHNpemUgPSAobWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCkgLSBtaW5fbG93X3BmbjsKKwl1NjQgc2l6ZSA9IChtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKSAtIGJhc2U7CiAKIAlsbWJfYWRkKGJhc2UsIHNpemUpOwogCkBAIC0zOCw2ICszOCwxNSBAQAogCQkgICAgKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpKTsKIAogCS8qCisJICogUmVzZXJ2ZSBwaHlzaWNhbCBwYWdlcyBiZWxvdyBDT05GSUdfWkVST19QQUdFX09GRlNFVC4KKwkgKi8KKwlpZiAoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQgIT0gMCkKKwkJbG1iX3Jlc2VydmUoX19NRU1PUllfU1RBUlQsIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKTsKKworCWxtYl9hbmFseXplKCk7CisJbG1iX2R1bXBfYWxsKCk7CisKKwkvKgogCSAqIE5vZGUgMCBzZXRzIHVwIGl0cyBwZ2RhdCBhdCB0aGUgZmlyc3QgYXZhaWxhYmxlIHBmbiwKIAkgKiBhbmQgYnVtcHMgaXQgdXAgYmVmb3JlIHNldHRpbmcgdXAgdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgogCSAqLwpAQCAtNzEsNyArODAsNyBAQAogCiAJLyogTm9kZS1sb2NhbCBwZ2RhdCAqLwogCU5PREVfREFUQShuaWQpID0gX192YShsbWJfYWxsb2NfYmFzZShzaXplb2Yoc3RydWN0IHBnbGlzdF9kYXRhKSwKLQkJCQkJICAgICBTTVBfQ0FDSEVfQllURVMsIGVuZF9wZm4pKTsKKwkJCQkJICAgICBTTVBfQ0FDSEVfQllURVMsIGVuZCkpOwogCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOwogCiAJTk9ERV9EQVRBKG5pZCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhW25pZF07CkBAIC04MSw3ICs5MCw3IEBACiAJLyogTm9kZS1sb2NhbCBib290bWFwICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuKTsKIAlib290bWVtX3BhZGRyID0gbG1iX2FsbG9jX2Jhc2UoYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZULAotCQkJCSAgICAgICBQQUdFX1NJWkUsIGVuZF9wZm4pOworCQkJCSAgICAgICBQQUdFX1NJWkUsIGVuZCk7CiAJaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIGJvb3RtZW1fcGFkZHIgPj4gUEFHRV9TSElGVCwKIAkJCSAgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9NYWtlZmlsZSBiL2FyY2gvc2gvdG9vbHMvTWFrZWZpbGUKaW5kZXggNTY3NTE2Yi4uNTU4YTU2YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL3Rvb2xzL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiAjIFNoYW1lbGVzc2x5IGNsb25lZCBmcm9tIEFSTS4KICMKIAotaW5jbHVkZS9hc20tc2gvbWFjaHR5cGVzLmg6ICQoc3JjKS9nZW4tbWFjaC10eXBlcyAkKHNyYykvbWFjaC10eXBlcworaW5jbHVkZS9nZW5lcmF0ZWQvbWFjaHR5cGVzLmg6ICQoc3JjKS9nZW4tbWFjaC10eXBlcyAkKHNyYykvbWFjaC10eXBlcwogCUBlY2hvICcgIEdlbmVyYXRpbmcgJEAnCi0JJChRKWlmIFsgISAtZCBpbmNsdWRlL2FzbS1zaCBdOyB0aGVuIG1rZGlyIC1wIGluY2x1ZGUvYXNtLXNoOyBmaQorCSQoUSlta2RpciAtcCAkKGRpciAkQCkKIAkkKFEpJChBV0spIC1mICReID4gJEAgfHwgeyBybSAtZiAkQDsgL2Jpbi9mYWxzZTsgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9nZW4tbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvZ2VuLW1hY2gtdHlwZXMKaW5kZXggNjUxNjFlMy4uZjVmZjdjNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9nZW4tbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL2dlbi1tYWNoLXR5cGVzCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL2F3awogIwotIyBBd2sgc2NyaXB0IHRvIGdlbmVyYXRlIGluY2x1ZGUvYXNtLXNoL21hY2h0eXBlcy5oCisjIEF3ayBzY3JpcHQgdG8gZ2VuZXJhdGUgaW5jbHVkZS9nZW5lcmF0ZWQvbWFjaHR5cGVzLmgKICMgSGVhdmlseSBiYXNlZCBvbiBhcmNoL2FybS90b29scy9nZW4tbWFjaC10eXBlcwogIwogQkVHSU4JeyBuciA9IDAgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDMzYWMxYTkuLjEwODE5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTQzLDYgKzQzLDcgQEAKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1dSQVBQRVJTCiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAorCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCiAJc2VsZWN0IFJUQ19EUlZfQ01PUwogCXNlbGVjdCBSVENfRFJWX0JRNDgwMgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnCmluZGV4IDkwZDVmZTIuLjlkM2M4ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcKQEAgLTMzLDQgKzMzLDE4IEBACiAJZGVwZW5kcyBvbiBNQ09VTlQKIAlkZWZhdWx0IHkKIAorY29uZmlnIERFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTCisJYm9vbCAiU3RyaWN0IGNvcHkgc2l6ZSBjaGVja3MiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIVRSQUNFX0JSQU5DSF9QUk9GSUxJTkcKKwktLS1oZWxwLS0tCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB0dXJucyBhIGNlcnRhaW4gc2V0IG9mIHNhbml0eSBjaGVja3MgZm9yIHVzZXIKKwkgIGNvcHkgb3BlcmF0aW9ucyBpbnRvIGNvbXBpbGUgdGltZSBmYWlsdXJlcy4KKworCSAgVGhlIGNvcHlfZnJvbV91c2VyKCkgZXRjIGNoZWNrcyBhcmUgdGhlcmUgdG8gaGVscCB0ZXN0IGlmIHRoZXJlCisJICBhcmUgc3VmZmljaWVudCBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGxlbmd0aCBhcmd1bWVudCBvZgorCSAgdGhlIGNvcHkgb3BlcmF0aW9uLCBieSBoYXZpbmcgZ2NjIHByb3ZlIHRoYXQgdGhlIGFyZ3VtZW50IGlzCisJICB3aXRoaW4gYm91bmRzLgorCisJICBJZiB1bnN1cmUsIG9yIGlmIHlvdSBydW4gYW4gb2xkZXIgKHByZSA0LjQpIGdjYywgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcwZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl8zMi5oCmluZGV4IDM4MWExYjUuLjQyNjljYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfMzIuaApAQCAtMTA0LDggKzEwNCw2IEBACiAjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCiAjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLQogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmgKaW5kZXggZDQyZTM5My4uZmY2NmJiOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oCkBAIC0xNTIsNyArMTUyLDYgQEAKIAkJCQkJICh4KS0+ZV9tYWNoaW5lID09IEVNX1NQQVJDMzJQTFVTKQogI2RlZmluZSBjb21wYXRfc3RhcnRfdGhyZWFkCQlzdGFydF90aHJlYWQzMgogCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQogCiAvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IDNiOWNmYjMuLjM4ZjM3YjMzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0xOSw3ICsxOSw3IEBACiAjZGVmaW5lIE9fTk9BVElNRQkweDIwMDAwMAogI2RlZmluZSBPX0NMT0VYRUMJMHg0MDAwMDAKIC8qCi0gKiBCZWZvcmUgTGludXggMi42LjMyIG9ubHkgT19EU1lOQyBzZW1hbnRpY3Mgd2VyZSBpbXBsZW1lbnRlZCwgYnV0IHVzaW5nCisgKiBCZWZvcmUgTGludXggMi42LjMzIG9ubHkgT19EU1lOQyBzZW1hbnRpY3Mgd2VyZSBpbXBsZW1lbnRlZCwgYnV0IHVzaW5nCiAgKiB0aGUgT19TWU5DIGZsYWcuICBXZSBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIG51bWVyaWNhbCB2YWx1ZQogICogZm9yIE9fRFNZTkMgc2VtYW50aWNzIG5vdywgYnV0IHVzaW5nIHRoZSBjb3JyZWN0IHN5bWJvbGljIG5hbWUgZm9yIGl0LgogICogVGhpcyBuZXcgdmFsdWUgaXMgdXNlZCB0byByZXF1ZXN0IHRydWUgUG9zaXggT19TWU5DIHNlbWFudGljcy4gIEl0IGlzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKaW5kZXggODU3NjMwYy4uN2Y5YjlkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaApAQCAtMTAsMTIgKzEwLDEyIEBACiAKICNpbmNsdWRlIDxhc20vcHNyLmg+CiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikobG9jaykpICE9IDApCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikobG9jaykpICE9IDApCiAKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCi0JZG8geyB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpIGNwdV9yZWxheCgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBhcmNoX3NwaW5fdW5sb2NrX3dhaXQobG9jaykgXAorCWRvIHsgd2hpbGUgKGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykpIGNwdV9yZWxheCgpOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkiXG4xOlxuXHQiCkBAIC0zNSw3ICszNSw3IEBACiAJOiAiZzIiLCAibWVtb3J5IiwgImNjIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0OwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHN0dWIgWyUxXSwgJTAiCkBAIC00NSw3ICs0NSw3IEBACiAJcmV0dXJuIChyZXN1bHQgPT0gMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiICUlZzAsIFslMF0iIDogOiAiciIgKGxvY2spIDogIm1lbW9yeSIpOwogfQpAQCAtNjUsNyArNjUsNyBAQAogICogU29ydCBvZiBsaWtlIGF0b21pY190J3Mgb24gU3BhcmMsIGJ1dCBldmVuIG1vcmUgY2xldmVyLgogICoKICAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJfCAyNC1iaXQgY291bnRlciAgICAgICAgICAgfCB3bG9jayB8ICByYXdfcndsb2NrX3QKKyAqCXwgMjQtYml0IGNvdW50ZXIgICAgICAgICAgIHwgd2xvY2sgfCAgYXJjaF9yd2xvY2tfdAogICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkgMzEgICAgICAgICAgICAgICAgICAgICAgIDggNyAgICAgMAogICoKQEAgLTc2LDkgKzc2LDkgQEAKICAqCiAgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgc2NoZW1lIGxpbWl0cyB1cyB0byB+MTYsMDAwLDAwMCBjcHVzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewotCXJlZ2lzdGVyIHJhd19yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOworCXJlZ2lzdGVyIGFyY2hfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKIAlscCA9IHJ3OwogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSJtb3YJJSVvNywgJSVnNFxuXHQiCkBAIC04OSwxNiArODksMTYgQEAKIAk6ICJnMiIsICJnNCIsICJtZW1vcnkiLCAiY2MiKTsKIH0KIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2sobG9jaykgXAorI2RlZmluZSBhcmNoX3JlYWRfbG9jayhsb2NrKSBcCiBkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLQlhcmNoX3JlYWRfbG9jayhsb2NrKTsgXAorCV9fYXJjaF9yZWFkX2xvY2sobG9jayk7IFwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIH0gd2hpbGUoMCkKIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FyY2hfcmVhZF91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JcmVnaXN0ZXIgcmF3X3J3bG9ja190ICpscCBhc20oImcxIik7CisJcmVnaXN0ZXIgYXJjaF9yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOwogCWxwID0gcnc7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIm1vdgklJW83LCAlJWc0XG5cdCIKQEAgLTEwOSwxNiArMTA5LDE2IEBACiAJOiAiZzIiLCAiZzQiLCAibWVtb3J5IiwgImNjIik7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2sobG9jaykgXAorI2RlZmluZSBhcmNoX3JlYWRfdW5sb2NrKGxvY2spIFwKIGRvIHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAotCWFyY2hfcmVhZF91bmxvY2sobG9jayk7IFwKKwlfX2FyY2hfcmVhZF91bmxvY2sobG9jayk7IFwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIH0gd2hpbGUoMCkKIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JcmVnaXN0ZXIgcmF3X3J3bG9ja190ICpscCBhc20oImcxIik7CisJcmVnaXN0ZXIgYXJjaF9yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOwogCWxwID0gcnc7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIm1vdgklJW83LCAlJWc0XG5cdCIKQEAgLTEzMCw3ICsxMzAsNyBAQAogCSoodm9sYXRpbGUgX191MzIgKikmbHAtPmxvY2sgPSB+MFU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfd3JpdGVfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCkBAIC0xNTAsOSArMTUwLDkgQEAKIAlyZXR1cm4gKHZhbCA9PSAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7Ci0JcmVnaXN0ZXIgcmF3X3J3bG9ja190ICpscCBhc20oImcxIik7CisJcmVnaXN0ZXIgYXJjaF9yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOwogCXJlZ2lzdGVyIGludCByZXMgYXNtKCJvMCIpOwogCWxwID0gcnc7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCkBAIC0xNjUsMjcgKzE2NSwyNyBAQAogCXJldHVybiByZXM7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF90cnlsb2NrKGxvY2spIFwKKyNkZWZpbmUgYXJjaF9yZWFkX3RyeWxvY2sobG9jaykgXAogKHsJdW5zaWduZWQgbG9uZyBmbGFnczsgXAogCWludCByZXM7IFwKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLQlyZXMgPSBhcmNoX3JlYWRfdHJ5bG9jayhsb2NrKTsgXAorCXJlcyA9IF9fYXJjaF9yZWFkX3RyeWxvY2sobG9jayk7IFwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIAlyZXM7IFwKIH0pCiAKLSNkZWZpbmUgX19yYXdfd3JpdGVfdW5sb2NrKHJ3KQlkbyB7IChydyktPmxvY2sgPSAwOyB9IHdoaWxlKDApCisjZGVmaW5lIGFyY2hfd3JpdGVfdW5sb2NrKHJ3KQlkbyB7IChydyktPmxvY2sgPSAwOyB9IHdoaWxlKDApCiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19zcGluX2xvY2sobG9jaykKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgICBfX3Jhd19yZWFkX2xvY2socncpCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocncsIGZsYWdzKSAgX19yYXdfd3JpdGVfbG9jayhydykKKyNkZWZpbmUgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgICBhcmNoX3JlYWRfbG9jayhydykKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgIGFyY2hfd3JpdGVfbG9jayhydykKIAotI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAKLSNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykgKCEoKHJ3KS0+bG9jayAmIDB4ZmYpKQotI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykgKCEocncpLT5sb2NrKQorI2RlZmluZSBhcmNoX3JlYWRfY2FuX2xvY2socncpICghKChydyktPmxvY2sgJiAweGZmKSkKKyNkZWZpbmUgYXJjaF93cml0ZV9jYW5fbG9jayhydykgKCEocncpLT5sb2NrKQogCiAjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaAppbmRleCA0M2U1MTQ3Li4wNzM5MzZhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqIHRoZSBzcGlubmVyIHNlY3Rpb25zIG11c3QgYmUgcHJlLVY5IGJyYW5jaGVzLgogICovCiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQobHApCSgobHApLT5sb2NrICE9IDApCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQobHApCSgobHApLT5sb2NrICE9IDApCiAKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChscCkJXAorI2RlZmluZSBhcmNoX3NwaW5fdW5sb2NrX3dhaXQobHApCVwKIAlkbyB7CXJtYigpOwkJCVwKIAl9IHdoaWxlKChscCktPmxvY2spCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC00Niw3ICs0Niw3IEBACiAJOiAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIApAQCAtNTksNyArNTksNyBAQAogCXJldHVybiAocmVzdWx0ID09IDBVTCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKICIJc3RiCQklJWcwLCBbJTBdIgpAQCAtNjgsNyArNjgsNyBAQAogCTogIm1lbW9yeSIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrX2ZsYWdzKGFyY2hfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CiAKQEAgLTkyLDcgKzkyLDcgQEAKIAogLyogTXVsdGktcmVhZGVyIGxvY2tzLCB0aGVzZSBhcmUgbXVjaCBzYW5lciB0aGFuIHRoZSAzMi1iaXQgU3BhcmMgb25lcy4uLiAqLwogCi1zdGF0aWMgdm9pZCBpbmxpbmUgYXJjaF9yZWFkX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIHZvaWQgaW5saW5lIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgYXJjaF9yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGludCBpbmxpbmUgYXJjaF9yZWFkX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqbG9jaykKIHsKIAlpbnQgdG1wMSwgdG1wMjsKIApAQCAtMTM2LDcgKzEzNiw3IEBACiAJcmV0dXJuIHRtcDE7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBhcmNoX3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyB2b2lkIGlubGluZSBhcmNoX3JlYWRfdW5sb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIHZvaWQgaW5saW5lIGFyY2hfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKmxvY2spCitzdGF0aWMgdm9pZCBpbmxpbmUgYXJjaF93cml0ZV9sb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCB0bXAxLCB0bXAyOwogCkBAIC0xNzcsNyArMTc3LDcgQEAKIAk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIHZvaWQgaW5saW5lIGFyY2hfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyB2b2lkIGlubGluZSBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpsb2NrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogIglzdHcJCSUlZzAsIFslMF0iCkBAIC0xODYsNyArMTg2LDcgQEAKIAk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgYXJjaF93cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyBpbnQgaW5saW5lIGFyY2hfd3JpdGVfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wMSwgdG1wMiwgcmVzdWx0OwogCkBAIC0yMTAsMjEgKzIxMCwyMSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrKHApCWFyY2hfcmVhZF9sb2NrKHApCi0jZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhwLCBmKSBhcmNoX3JlYWRfbG9jayhwKQotI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2socCkJYXJjaF9yZWFkX3RyeWxvY2socCkKLSNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2socCkJYXJjaF9yZWFkX3VubG9jayhwKQotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKHApCWFyY2hfd3JpdGVfbG9jayhwKQotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKHAsIGYpIGFyY2hfd3JpdGVfbG9jayhwKQotI2RlZmluZSBfX3Jhd193cml0ZV91bmxvY2socCkJYXJjaF93cml0ZV91bmxvY2socCkKLSNkZWZpbmUgX19yYXdfd3JpdGVfdHJ5bG9jayhwKQlhcmNoX3dyaXRlX3RyeWxvY2socCkKKyNkZWZpbmUgYXJjaF9yZWFkX2xvY2socCkJYXJjaF9yZWFkX2xvY2socCkKKyNkZWZpbmUgYXJjaF9yZWFkX2xvY2tfZmxhZ3MocCwgZikgYXJjaF9yZWFkX2xvY2socCkKKyNkZWZpbmUgYXJjaF9yZWFkX3RyeWxvY2socCkJYXJjaF9yZWFkX3RyeWxvY2socCkKKyNkZWZpbmUgYXJjaF9yZWFkX3VubG9jayhwKQlhcmNoX3JlYWRfdW5sb2NrKHApCisjZGVmaW5lIGFyY2hfd3JpdGVfbG9jayhwKQlhcmNoX3dyaXRlX2xvY2socCkKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKHAsIGYpIGFyY2hfd3JpdGVfbG9jayhwKQorI2RlZmluZSBhcmNoX3dyaXRlX3VubG9jayhwKQlhcmNoX3dyaXRlX3VubG9jayhwKQorI2RlZmluZSBhcmNoX3dyaXRlX3RyeWxvY2socCkJYXJjaF93cml0ZV90cnlsb2NrKHApCiAKLSNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSghKChydyktPmxvY2sgJiAweDgwMDAwMDAwVUwpKQotI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykJKCEocncpLT5sb2NrKQorI2RlZmluZSBhcmNoX3JlYWRfY2FuX2xvY2socncpCQkoISgocncpLT5sb2NrICYgMHg4MDAwMDAwMFVMKSkKKyNkZWZpbmUgYXJjaF93cml0ZV9jYW5fbG9jayhydykJKCEocncpLT5sb2NrKQogCi0jZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQotI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggMzdjYmUwMS4uOWM0NTRmZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNywxNCArNywxNCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKK30gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQJCXsgMCB9CisjZGVmaW5lIF9fQVJDSF9SV19MT0NLX1VOTE9DS0VECQl7IDAgfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0cmluZ18zMi5oCmluZGV4IDZjNWZkZGIuLmVkZjE5NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdHJpbmdfMzIuaApAQCAtMTYsOCArMTYsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogZXh0ZXJuIHZvaWQgX19tZW1tb3ZlKHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKLWV4dGVybiBfX2tlcm5lbF9zaXplX3QgX19tZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwotZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX21lbXNldCh2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CiAKICNpZm5kZWYgRVhQT1JUX1NZTVRBQl9TVFJPUFMKIApAQCAtMzIsODIgKzMwLDEwIEBACiB9KQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBfX2tlcm5lbF9zaXplX3QgbikKLXsKLQlleHRlcm4gdm9pZCBfX2NvcHlfMXBhZ2Uodm9pZCAqLCBjb25zdCB2b2lkICopOwotCi0JaWYobiA8PSAzMikgewotCQlfX2J1aWx0aW5fbWVtY3B5KHRvLCBmcm9tLCBuKTsKLQl9IGVsc2UgaWYgKCgodW5zaWduZWQgaW50KSB0byAmIDcpICE9IDApIHsKLQkJLyogRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gdGhlIGRvdWJsZS13b3JkIGJvdW5kYXJ5ICovCi0JCV9fbWVtY3B5KHRvLCBmcm9tLCBuKTsKLQl9IGVsc2UgewotCQlzd2l0Y2gobikgewotCQljYXNlIFBBR0VfU0laRToKLQkJCV9fY29weV8xcGFnZSh0bywgZnJvbSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCV9fbWVtY3B5KHRvLCBmcm9tLCBuKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpfX25vbmNvbnN0YW50X21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgX19rZXJuZWxfc2l6ZV90IG4pCi17Ci0JX19tZW1jcHkodG8sIGZyb20sIG4pOwotCXJldHVybiB0bzsKLX0KLQotI3VuZGVmIG1lbWNweQotI2RlZmluZSBtZW1jcHkodCwgZiwgbikgXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAotIF9fY29uc3RhbnRfbWVtY3B5KCh0KSwoZiksKG4pKSA6IFwKLSBfX25vbmNvbnN0YW50X21lbWNweSgodCksKGYpLChuKSkpCisjZGVmaW5lIG1lbWNweSh0LCBmLCBuKSBfX2J1aWx0aW5fbWVtY3B5KHQsIGYsIG4pCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQodm9pZCAqcywgY2hhciBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCi17Ci0JZXh0ZXJuIHZvaWQgYnplcm9fMXBhZ2Uodm9pZCAqKTsKLQlleHRlcm4gX19rZXJuZWxfc2l6ZV90IF9fYnplcm8odm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOwotCi0JaWYoIWMpIHsKLQkJaWYoY291bnQgPT0gUEFHRV9TSVpFKQotCQkJYnplcm9fMXBhZ2Uocyk7Ci0JCWVsc2UKLQkJCV9fYnplcm8ocywgY291bnQpOwotCX0gZWxzZSB7Ci0JCV9fbWVtc2V0KHMsIGMsIGNvdW50KTsKLQl9Ci0JcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19jb25zdGFudF9jX21lbXNldCh2b2lkICpzLCBjaGFyIGMsIF9fa2VybmVsX3NpemVfdCBjb3VudCkKLXsKLQlleHRlcm4gX19rZXJuZWxfc2l6ZV90IF9fYnplcm8odm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOwotCi0JaWYoIWMpCi0JCV9fYnplcm8ocywgY291bnQpOwotCWVsc2UKLQkJX19tZW1zZXQocywgYywgY291bnQpOwotCXJldHVybiBzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fbm9uY29uc3RhbnRfbWVtc2V0KHZvaWQgKnMsIGNoYXIgYywgX19rZXJuZWxfc2l6ZV90IGNvdW50KQotewotCV9fbWVtc2V0KHMsIGMsIGNvdW50KTsKLQlyZXR1cm4gczsKLX0KLQotI3VuZGVmIG1lbXNldAotI2RlZmluZSBtZW1zZXQocywgYywgY291bnQpIFwKLShfX2J1aWx0aW5fY29uc3RhbnRfcChjKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcChjb3VudCkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3RhbnRfY19tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogX19ub25jb25zdGFudF9tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKQorI2RlZmluZSBtZW1zZXQocywgYywgY291bnQpIF9fYnVpbHRpbl9tZW1zZXQocywgYywgY291bnQpCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0NBTgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0MzE2MWYyLi45NjIzYmMyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKQEAgLTE1LDggKzE1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9hc2kuaD4KIAotZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKLQogI2lmbmRlZiBFWFBPUlRfU1lNVEFCX1NUUk9QUwogCiAvKiBGaXJzdCB0aGUgbWVtKigpIHRoaW5ncy4gKi8KQEAgLTI0LDI5ICsyMiwxMCBAQAogZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCi1leHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworI2RlZmluZSBtZW1jcHkodCwgZiwgbikgX19idWlsdGluX21lbWNweSh0LCBmLCBuKQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAotZXh0ZXJuIHZvaWQgKl9fYnVpbHRpbl9tZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fY29uc3RhbnRfbWVtc2V0KHZvaWQgKnMsIGludCBjLCBfX2tlcm5lbF9zaXplX3QgY291bnQpCi17Ci0JZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBfX2J6ZXJvKHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKLQotCWlmICghYykgewotCQlfX2J6ZXJvKHMsIGNvdW50KTsKLQkJcmV0dXJuIHM7Ci0JfSBlbHNlCi0JCXJldHVybiBfX21lbXNldChzLCBjLCBjb3VudCk7Ci19Ci0KLSN1bmRlZiBtZW1zZXQKLSNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBcCi0oKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSAmJiAoY291bnQpIDw9IDMyKSA/IFwKLSBfX2J1aWx0aW5fbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKLSAoX19idWlsdGluX2NvbnN0YW50X3AoYykgPyBcCi0gIF9fY29uc3RhbnRfbWVtc2V0KChzKSwgKGMpLCAoY291bnQpKSA6IFwKLSAgX19tZW1zZXQoKHMpLCAoYyksIChjb3VudCkpKSkKKyNkZWZpbmUgbWVtc2V0KHMsIGMsIGNvdW50KSBfX2J1aWx0aW5fbWVtc2V0KHMsIGMsIGNvdW50KQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNDQU4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCmluZGV4IDFiNDVhN2IuLjcyNTdlYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKQEAgLTIyNyw2ICsyMjcsNyBAQAogLyogZmxhZyBiaXQgOCBpcyBhdmFpbGFibGUgKi8KICNkZWZpbmUgVElGX1NFQ0NPTVAJCTkJLyogc2VjdXJlIGNvbXB1dGluZyAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAkxMAkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UCTExCS8qIHN5c2NhbGwgdHJhY2Vwb2ludCBpbnN0cnVtZW50YXRpb24gKi8KIC8qIGZsYWcgYml0IDExIGlzIGF2YWlsYWJsZSAqLwogLyogTk9URTogVGhyZWFkIGZsYWdzID49IDEyIHNob3VsZCBiZSBvbmVzIHdlIGhhdmUgbm8gaW50ZXJlc3QKICAqICAgICAgIGluIHVzaW5nIGluIGFzc2VtYmx5LCBlbHNlIHdlIGNhbid0IHVzZSB0aGUgbWFzayBhcwpAQCAtMjQ2LDYgKzI0Nyw3IEBACiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxPDxUSUZfMzJCSVQpCiAjZGVmaW5lIF9USUZfU0VDQ09NUAkJKDE8PFRJRl9TRUNDT01QKQogI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDE8PFRJRl9TWVNDQUxMX0FVRElUKQorI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVAkoMTw8VElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKICNkZWZpbmUgX1RJRl9BQklfUEVORElORwkoMTw8VElGX0FCSV9QRU5ESU5HKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKaW5kZXggODMwM2FjNC4uNDg5ZDJiYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKQEAgLTI2MCw4ICsyNjAsMjMgQEAKIAlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4pOwogfQogCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworCV9fY29tcGlsZXRpbWVfZXJyb3IoImNvcHlfZnJvbV91c2VyKCkgYnVmZmVyIHNpemUgaXMgbm90IHByb3ZhYmx5IGNvcnJlY3QiKQorI2Vsc2UKKwlfX2NvbXBpbGV0aW1lX3dhcm5pbmcoImNvcHlfZnJvbV91c2VyKCkgYnVmZmVyIHNpemUgaXMgbm90IHByb3ZhYmx5IGNvcnJlY3QiKQorI2VuZGlmCis7CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKKwlpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKworCWlmICh1bmxpa2VseShzeiAhPSAtMSAmJiBzeiA8IG4pKSB7CisJCWNvcHlfZnJvbV91c2VyX292ZXJmbG93KCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwogCWlmIChuICYmIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKSBmcm9tLCBuKSkKIAkJcmV0dXJuIF9fY29weV91c2VyKChfX2ZvcmNlIHZvaWQgX191c2VyICopIHRvLCBmcm9tLCBuKTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDllYTI3MWUuLmRiYzE0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC02LDYgKzYsNyBAQAogICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CkBAIC0yMDQsNiArMjA1LDE0IEBACiAKIGV4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CiAKK2V4dGVybiB2b2lkIGNvcHlfZnJvbV91c2VyX292ZXJmbG93KHZvaWQpCisjaWZkZWYgQ09ORklHX0RFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTCisJX19jb21waWxldGltZV9lcnJvcigiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCisjZWxzZQorCV9fY29tcGlsZXRpbWVfd2FybmluZygiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCisjZW5kaWYKKzsKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAogCQkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CkBAIC0yMTIsMTAgKzIyMSwxNiBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawogY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBfX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgc2l6ZSk7CisJdW5zaWduZWQgbG9uZyByZXQgPSAodW5zaWduZWQgbG9uZykgLUVGQVVMVDsKKwlpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKIAotCWlmICh1bmxpa2VseShyZXQpKQotCQlyZXQgPSBjb3B5X2Zyb21fdXNlcl9maXh1cCh0bywgZnJvbSwgc2l6ZSk7CisJaWYgKGxpa2VseShzeiA9PSAtMSB8fCBzeiA+PSBzaXplKSkgeworCQlyZXQgPSBfX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgc2l6ZSk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0ID0gY29weV9mcm9tX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOworCX0gZWxzZSB7CisJCWNvcHlfZnJvbV91c2VyX292ZXJmbG93KCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAjZGVmaW5lIF9fY29weV9mcm9tX3VzZXIgY29weV9mcm9tX3VzZXIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGQ4ZDI1YmQuLmNiNGI5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzk4LDcgKzM5OCw3IEBACiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMyNwogI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkzMjgKIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJMzI5CisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzMjkKIAogI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KIC8qIFNwYXJjIDMyLWJpdCBvbmx5IGhhcyB0aGUgInNldHJlc3VpZDMyIiwgImdldHJlc3VpZDMyIiB2YXJpYW50cywKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCmluZGV4IGVjOWM3YmMuLjE1MDRkZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKIAlzZXRoaQklaGkoUFNSX1NZU0NBTEwpLCAlbDQKIAlvcgklbDAsICVsNCwgJWwwCiAJLyogRGlyZWN0IGFjY2VzcyB0byB1c2VyIHJlZ3MsIG11c3QgZmFzdGVyLiAqLwotCWNtcAklZzEsIE5SX1NZU0NBTExTCisJY21wCSVnMSwgTlJfc3lzY2FsbHMKIAliZ2V1CWxpbnV4X3NwYXJjX25pX3N5c2NhbGwKIAkgc2xsCSVnMSwgMiwgJWw0CiAJbGQJWyVsNyArICVsNF0sICVsNwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwppbmRleCBkM2IxYTMwLi4yOTk3M2RhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPHRyYWNlL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIApAQCAtOTEsMyArOTIsMTMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworCitleHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CisKK3Vuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCmluZGV4IDc2OTBjYzIuLjVmYWQ5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb21tdS1oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTE2OSw3ICsxNzAsNyBAQAogCiAJZW50cnkgPSAoZG1hX2FkZHIgLSBpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSkgPj4gSU9fUEFHRV9TSElGVDsKIAotCWlvbW11X2FyZWFfZnJlZShhcmVuYS0+bWFwLCBlbnRyeSwgbnBhZ2VzKTsKKwliaXRtYXBfY2xlYXIoYXJlbmEtPm1hcCwgZW50cnksIG5wYWdlcyk7CiB9CiAKIGludCBpb21tdV90YWJsZV9pbml0KHN0cnVjdCBpb21tdSAqaW9tbXUsIGludCB0c2JzaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwppbmRleCBjZTk5NmY5Li44ZDY4ODJiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJfQogCiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CiAJCWlmICghYWN0aW9uKQogCQkJZ290byBza2lwOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiBza2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKIAkJc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQpAQCAtNzg1LDE0ICs3ODUsMTQgQEAKIAlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2lycV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2lycV0ubG9jaywgZmxhZ3MpOwogCQlpZiAoaXJxX2Rlc2NbaXJxXS5hY3Rpb24gJiYKIAkJICAgICEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfUEVSX0NQVSkpIHsKIAkJCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSkKIAkJCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsCiAJCQkJCWlycV9kZXNjW2lycV0uYWZmaW5pdHkpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2lycV0ubG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaXJxXS5sb2NrLCBmbGFncyk7CiAJfQogCiAJdGlja19vcHMtPmRpc2FibGVfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggM2JjNjUyNy4uNjcxNjU4NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2twcm9iZXMuYwpAQCAtNDYsNiArNDYsOSBAQAogCiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKKwlpZiAoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIgJiAweDNVTCkKKwkJcmV0dXJuIC1FSUxTRVE7CisKIAlwLT5haW5zbi5pbnNuWzBdID0gKnAtPmFkZHI7CiAJZmx1c2hpKCZwLT5haW5zbi5pbnNuWzBdKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwppbmRleCBjYjNjNzJjLi5kZjM5YTBmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgpAQCAtMTI0MiwxMyArMTI0MywxMyBAQAogCXNucHJpbnRmKGxwLT50eF9pcnFfbmFtZSwgTERDX0lSUV9OQU1FX01BWCwgIiVzIFRYIiwgbmFtZSk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShscC0+Y2ZnLnJ4X2lycSwgbGRjX3J4LAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQsCiAJCQkgIGxwLT5yeF9pcnFfbmFtZSwgbHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSByZXF1ZXN0X2lycShscC0+Y2ZnLnR4X2lycSwgbGRjX3R4LAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQsCiAJCQkgIGxwLT50eF9pcnFfbmFtZSwgbHApOwogCWlmIChlcnIpIHsKIAkJZnJlZV9pcnEobHAtPmNmZy5yeF9pcnEsIGxwKTsKQEAgLTE4NzUsNyArMTg3Niw3IEBACiBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvYyhzdHJ1Y3QgbGRjX2lvbW11ICppb21tdSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCiB7CiAJc3RydWN0IGlvbW11X2FyZW5hICphcmVuYSA9ICZpb21tdS0+YXJlbmE7Ci0JdW5zaWduZWQgbG9uZyBuLCBpLCBzdGFydCwgZW5kLCBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIG4sIHN0YXJ0LCBlbmQsIGxpbWl0OwogCWludCBwYXNzOwogCiAJbGltaXQgPSBhcmVuYS0+bGltaXQ7CkBAIC0xODgzLDcgKzE4ODQsNyBAQAogCXBhc3MgPSAwOwogCiBhZ2FpbjoKLQluID0gZmluZF9uZXh0X3plcm9fYml0KGFyZW5hLT5tYXAsIGxpbWl0LCBzdGFydCk7CisJbiA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGFyZW5hLT5tYXAsIGxpbWl0LCBzdGFydCwgbnBhZ2VzLCAwKTsKIAllbmQgPSBuICsgbnBhZ2VzOwogCWlmICh1bmxpa2VseShlbmQgPj0gbGltaXQpKSB7CiAJCWlmIChsaWtlbHkocGFzcyA8IDEpKSB7CkBAIC0xODk2LDE2ICsxODk3LDcgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KLQotCWZvciAoaSA9IG47IGkgPCBlbmQ7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgYXJlbmEtPm1hcCkpIHsKLQkJCXN0YXJ0ID0gaSArIDE7Ci0JCQlnb3RvIGFnYWluOwotCQl9Ci0JfQotCi0JZm9yIChpID0gbjsgaSA8IGVuZDsgaSsrKQotCQlfX3NldF9iaXQoaSwgYXJlbmEtPm1hcCk7CisJYml0bWFwX3NldChhcmVuYS0+bWFwLCBuLCBucGFnZXMpOwogCiAJYXJlbmEtPmhpbnQgPSBlbmQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tZGVzYy5jCmluZGV4IDkzOGRhMTkuLmNkYzkxZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CkBAIC0xMDgsMjUgKzEwOSwxNSBAQAogCiBzdGF0aWMgdm9pZCBtZGVzY19sbWJfZnJlZShzdHJ1Y3QgbWRlc2NfaGFuZGxlICpocCkKIHsKLQl1bnNpZ25lZCBpbnQgYWxsb2Nfc2l6ZSwgaGFuZGxlX3NpemUgPSBocC0+aGFuZGxlX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCXVuc2lnbmVkIGludCBhbGxvY19zaXplOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJmhwLT5yZWZjbnQpICE9IDApOwogCUJVR19PTighbGlzdF9lbXB0eSgmaHAtPmxpc3QpKTsKIAotCWFsbG9jX3NpemUgPSBQQUdFX0FMSUdOKGhhbmRsZV9zaXplKTsKLQotCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGhwOwotCWVuZCA9IHN0YXJ0ICsgYWxsb2Nfc2l6ZTsKLQotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQlzdHJ1Y3QgcGFnZSAqcDsKLQotCQlwID0gdmlydF90b19wYWdlKHN0YXJ0KTsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7Ci0JCV9fZnJlZV9wYWdlKHApOwotCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JfQorCWFsbG9jX3NpemUgPSBQQUdFX0FMSUdOKGhwLT5oYW5kbGVfc2l6ZSk7CisJc3RhcnQgPSBfX3BhKGhwKTsKKwlmcmVlX2Jvb3RtZW1fbGF0ZShzdGFydCwgYWxsb2Nfc2l6ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWRlc2NfbWVtX29wcyBsbWJfbWRlc2Nfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwppbmRleCBiMTI5NjExLi5mMzBmNGExIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwpAQCAtNDcsNyArNDcsNyBAQAogc3RhdGljIGludCBlbmRmbGFnIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGxhc3RfaXJxX3N1bSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUobG9jYWxfdCwgYWxlcnRfY291bnRlcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUobG9uZywgYWxlcnRfY291bnRlcik7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBubWlfdG91Y2gpOwogCiB2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKQpAQCAtMTEyLDEzICsxMTIsMTMgQEAKIAkJdG91Y2hlZCA9IDE7CiAJfQogCWlmICghdG91Y2hlZCAmJiBfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPT0gc3VtKSB7Ci0JCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihhbGVydF9jb3VudGVyKSk7Ci0JCWlmIChsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpKSA9PSAzMCAqIG5taV9oeikKKwkJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIoYWxlcnRfY291bnRlcikpOworCQlpZiAoX190aGlzX2NwdV9yZWFkKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpKSA9PSAzMCAqIG5taV9oeikKIAkJCWRpZV9ubWkoIkJVRzogTk1JIFdhdGNoZG9nIGRldGVjdGVkIExPQ0tVUCIsCiAJCQkJcmVncywgcGFuaWNfb25fdGltZW91dCk7CiAJfSBlbHNlIHsKIAkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwotCQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOworCQlfX3RoaXNfY3B1X3dyaXRlKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpLCAwKTsKIAl9CiAJaWYgKF9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkpIHsKIAkJd3JpdGVfcGljKHBpY2xfdmFsdWUobm1pX2h6KSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDg4MTk0N2UuLjBhNmYyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCkBAIC0xMDQsOSArMTA0LDE5IEBACiAJaW50IGk7CiAKIAkvKiBDaGVjayBhZGRyZXNzIHR5cGUgbWF0Y2ggKi8KLQlpZiAoKGFkZHJbMF0gXiByYW5nZVswXSkgJiAweDAzMDAwMDAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISgoYWRkclswXSBeIHJhbmdlWzBdKSAmIDB4MDMwMDAwMDApKQorCQlnb3RvIHR5cGVfbWF0Y2g7CiAKKwkvKiBTcGVjaWFsIGV4Y2VwdGlvbiwgd2UgY2FuIG1hcCBhIDY0LWJpdCBhZGRyZXNzIGludG8KKwkgKiBhIDMyLWJpdCByYW5nZS4KKwkgKi8KKwlpZiAoKGFkZHJbMF0gJiAweDAzMDAwMDAwKSA9PSAweDAzMDAwMDAwICYmCisJICAgIChyYW5nZVswXSAmIDB4MDMwMDAwMDApID09IDB4MDIwMDAwMDApCisJCWdvdG8gdHlwZV9tYXRjaDsKKworCXJldHVybiAtRUlOVkFMOworCit0eXBlX21hdGNoOgogCWlmIChvZl9vdXRfb2ZfcmFuZ2UoYWRkciArIDEsIHJhbmdlICsgMSwgcmFuZ2UgKyBuYSArIHBuYSwKIAkJCSAgICBuYSAtIDEsIG5zKSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCmluZGV4IGI4NTM3NGYuLjUzOWU4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCkBAIC0xMDY0LDcgKzEwNjQsNiBAQAogCiAJcmV0dXJuIChkZXZpY2VfbWFzayAmIGRtYV9hZGRyX21hc2spID09IGRtYV9hZGRyX21hc2s7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV9kbWFfc3VwcG9ydGVkKTsKIAogdm9pZCBwY2lfcmVzb3VyY2VfdG9fdXNlcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwKIAkJCSAgY29uc3Qgc3RydWN0IHJlc291cmNlICpycCwgcmVzb3VyY2Vfc2l6ZV90ICpzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3B0cmFjZV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlXzY0LmMKaW5kZXggNGFlOTFkYy4uMmY2NTI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlXzY0LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDx0cmFjZS9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAKQEAgLTM3LDYgKzM4LDkgQEAKICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zeXNjYWxscy5oPgorCiAjaW5jbHVkZSAiZW50cnkuaCIKIAogLyogI2RlZmluZSBBTExPV19JTklUX1RSQUNJTkcgKi8KQEAgLTEwNTksNiArMTA2Myw5IEBACiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQogCQlyZXQgPSB0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncyk7CiAKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSkpCisJCXRyYWNlX3N5c19lbnRlcihyZWdzLCByZWdzLT51X3JlZ3NbVVJFR19HMV0pOworCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpICYmICFyZXQpCiAJCWF1ZGl0X3N5c2NhbGxfZW50cnkoKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CiAJCQkJICAgICBBVURJVF9BUkNIX1NQQVJDIDoKQEAgLTEwODQsNiArMTA5MSw5IEBACiAJCWF1ZGl0X3N5c2NhbGxfZXhpdChyZXN1bHQsIHJlZ3MtPnVfcmVnc1tVUkVHX0kwXSk7CiAJfQogCisJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKQorCQl0cmFjZV9zeXNfZXhpdChyZWdzLCByZWdzLT51X3JlZ3NbVVJFR19HMV0pOworCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQogCQl0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltc182NC5jCmluZGV4IDBmMjYwNjYuLjM3MmFkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXNfNjQuYwpAQCAtMzgsMTcgKzM4LDUgQEAKIEVYUE9SVF9TWU1CT0woc3VuNHZfbmlhZ2FyYTJfZ2V0cGVyZik7CiBFWFBPUlRfU1lNQk9MKHN1bjR2X25pYWdhcmEyX3NldHBlcmYpOwogCi0jaWZkZWYgQ09ORklHX1BDSQotLyogaW5saW5lIGZ1bmN0aW9ucyBpbiBhc20vcGNpXzY0LmggKi8KLUVYUE9SVF9TWU1CT0wocGNpX2FsbG9jX2NvbnNpc3RlbnQpOwotRVhQT1JUX1NZTUJPTChwY2lfZnJlZV9jb25zaXN0ZW50KTsKLUVYUE9SVF9TWU1CT0wocGNpX21hcF9zaW5nbGUpOwotRVhQT1JUX1NZTUJPTChwY2lfdW5tYXBfc2luZ2xlKTsKLUVYUE9SVF9TWU1CT0wocGNpX21hcF9zZyk7Ci1FWFBPUlRfU1lNQk9MKHBjaV91bm1hcF9zZyk7Ci1FWFBPUlRfU1lNQk9MKHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSk7Ci1FWFBPUlRfU1lNQk9MKHBjaV9kbWFfc3luY19zZ19mb3JfY3B1KTsKLSNlbmRpZgotCiAvKiBFeHBvcnRpbmcgYSBzeW1ib2wgZnJvbSAvaW5pdC9tYWluLmMgKi8KIEVYUE9SVF9TWU1CT0woc2F2ZWRfY29tbWFuZF9saW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IGQxNTBjMmEuLmRjNGE0NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtNjIsNyArNjIsNyBAQAogI2VuZGlmCiAJLmFsaWduCTMyCiAxOglsZHgJWyVnNiArIFRJX0ZMQUdTXSwgJWw1Ci0JYW5kY2MJJWw1LCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVQpLCAlZzAKKwlhbmRjYwklbDUsIChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCksICVnMAogCWJlLHB0CSVpY2MsIHJ0cmFwCiAJIG5vcAogCWNhbGwJc3lzY2FsbF90cmFjZV9sZWF2ZQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLmdsb2JsCWxpbnV4X3NwYXJjX3N5c2NhbGwzMgogbGludXhfc3BhcmNfc3lzY2FsbDMyOgogCS8qIERpcmVjdCBhY2Nlc3MgdG8gdXNlciByZWdzLCBtdWNoIGZhc3Rlci4gKi8KLQljbXAJJWcxLCBOUl9TWVNDQUxMUwkJCSEgSUVVMQlHcm91cAorCWNtcAklZzEsIE5SX3N5c2NhbGxzCQkJISBJRVUxCUdyb3VwCiAJYmdldSxwbgkleGNjLCBsaW51eF9zcGFyY19uaV9zeXNjYWxsCQkhIENUSQogCSBzcmwJJWkwLCAwLCAlbzAJCQkJISBJRVUwCiAJc2xsCSVnMSwgMiwgJWw0CQkJCSEgSUVVMAlHcm91cApAQCAtMTk4LDcgKzE5OCw3IEBACiAKIAlzcmwJJWk1LCAwLCAlbzUJCQkJISBJRVUxCiAJc3JsCSVpMiwgMCwgJW8yCQkJCSEgSUVVMAlHcm91cAotCWFuZGNjCSVsMCwgKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0FVRElUKSwgJWcwCisJYW5kY2MJJWwwLCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpLCAlZzAKIAlibmUscG4JJWljYywgbGludXhfc3lzY2FsbF90cmFjZTMyCQkhIENUSQogCSBtb3YJJWkwLCAlbDUJCQkJISBJRVUxCiAJY2FsbAklbDcJCQkJCSEgQ1RJCUdyb3VwIGJyayBmb3JjZWQKQEAgLTIxMCw3ICsyMTAsNyBAQAogCS5nbG9ibAlsaW51eF9zcGFyY19zeXNjYWxsCiBsaW51eF9zcGFyY19zeXNjYWxsOgogCS8qIERpcmVjdCBhY2Nlc3MgdG8gdXNlciByZWdzLCBtdWNoIGZhc3Rlci4gKi8KLQljbXAJJWcxLCBOUl9TWVNDQUxMUwkJCSEgSUVVMQlHcm91cAorCWNtcAklZzEsIE5SX3N5c2NhbGxzCQkJISBJRVUxCUdyb3VwCiAJYmdldSxwbgkleGNjLCBsaW51eF9zcGFyY19uaV9zeXNjYWxsCQkhIENUSQogCSBtb3YJJWkwLCAlbzAJCQkJISBJRVUwCiAJc2xsCSVnMSwgMiwgJWw0CQkJCSEgSUVVMAlHcm91cApAQCAtMjIxLDcgKzIyMSw3IEBACiAKIAltb3YJJWkzLCAlbzMJCQkJISBJRVUxCiAJbW92CSVpNCwgJW80CQkJCSEgSUVVMAlHcm91cAotCWFuZGNjCSVsMCwgKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0FVRElUKSwgJWcwCisJYW5kY2MJJWwwLCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpLCAlZzAKIAlibmUscG4JJWljYywgbGludXhfc3lzY2FsbF90cmFjZQkJISBDVEkJR3JvdXAKIAkgbW92CSVpMCwgJWw1CQkJCSEgSUVVMAogMjoJY2FsbAklbDcJCQkJCSEgQ1RJCUdyb3VwIGJyayBmb3JjZWQKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAJY21wCSVvMCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSwogCWJnZXUscG4JJXhjYywgMWYKLQkgYW5kY2MJJWwwLCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVQpLCAlbDYKKwkgYW5kY2MJJWwwLCAoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpLCAlbDYKIDgwOgogCS8qIFN5c3RlbSBjYWxsIHN1Y2Nlc3MsIGNsZWFyIENhcnJ5IGNvbmRpdGlvbiBjb2RlLiAqLwogCWFuZG4JJWczLCAlZzIsICVnMwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJLyogU3lzdGVtIGNhbGwgZmFpbHVyZSwgc2V0IENhcnJ5IGNvbmRpdGlvbiBjb2RlLgogCSAqIEFsc28sIGdldCBhYnMoZXJybm8pIHRvIHJldHVybiB0byB0aGUgcHJvY2Vzcy4KIAkgKi8KLQlhbmRjYwklbDAsIChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9BVURJVCksICVsNgkKKwlhbmRjYwklbDAsIChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCksICVsNgkKIAlzdWIJJWcwLCAlbzAsICVvMAogCW9yCSVnMywgJWcyLCAlZzMKIAlzdHgJJW8wLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kwXQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCmluZGV4IDYzZjczYWUuLjY3ZTE2NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKQEAgLTc3NCwyNiArNzc0LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfdGljayA9IHsKIAkucmF0aW5nCQk9IDEwMCwKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKLQkuc2hpZnQJCT0gMTYsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Nsb2NrZXZlbnRfbXVsdGlwbGllcih1bnNpZ25lZCBsb25nIGh6KQotewotCXVuc2lnbmVkIGxvbmcgbXVsdCwgc2hpZnQgPSAzMjsKLQotCXdoaWxlICgxKSB7Ci0JCW11bHQgPSBkaXZfc2MoaHosIE5TRUNfUEVSX1NFQywgc2hpZnQpOwotCQlpZiAobXVsdCAmJiAobXVsdCA+PiAzMlVMKSA9PSAwVUwpCi0JCQlicmVhazsKLQotCQlzaGlmdC0tOwotCX0KLQotCXNwYXJjNjRfY2xvY2tldmVudC5zaGlmdCA9IHNoaWZ0OwotCXNwYXJjNjRfY2xvY2tldmVudC5tdWx0ID0gbXVsdDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGJfdGlja3NfcGVyX3VzZWMgX19yZWFkX21vc3RseTsKIAogdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCkBAIC04MjgsOSArODExLDcgQEAKIAkJY2xvY2tzb3VyY2VfaHoybXVsdChmcmVxLCBTUEFSQzY0X05TRUNfUEVSX0NZQ19TSElGVCk7CiAKIAljbG9ja3NvdXJjZV90aWNrLm5hbWUgPSB0aWNrX29wcy0+bmFtZTsKLQljbG9ja3NvdXJjZV90aWNrLm11bHQgPQotCQljbG9ja3NvdXJjZV9oejJtdWx0KGZyZXEsCi0JCQkJICAgIGNsb2Nrc291cmNlX3RpY2suc2hpZnQpOworCWNsb2Nrc291cmNlX2NhbGNfbXVsdF9zaGlmdCgmY2xvY2tzb3VyY2VfdGljaywgZnJlcSwgNCk7CiAJY2xvY2tzb3VyY2VfdGljay5yZWFkID0gY2xvY2tzb3VyY2VfdGlja19yZWFkOwogCiAJcHJpbnRrKCJjbG9ja3NvdXJjZTogbXVsdFsleF0gc2hpZnRbJWRdXG4iLApAQCAtODM5LDE1ICs4MjAsMTQgQEAKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfdGljayk7CiAKIAlzcGFyYzY0X2Nsb2NrZXZlbnQubmFtZSA9IHRpY2tfb3BzLT5uYW1lOwotCi0Jc2V0dXBfY2xvY2tldmVudF9tdWx0aXBsaWVyKGZyZXEpOworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdCgmc3BhcmM2NF9jbG9ja2V2ZW50LCBmcmVxLCA0KTsKIAogCXNwYXJjNjRfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmZmZmZmZmZmZlVMLCAmc3BhcmM2NF9jbG9ja2V2ZW50KTsKIAlzcGFyYzY0X2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KIAkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZzcGFyYzY0X2Nsb2NrZXZlbnQpOwogCi0JcHJpbnRrKCJjbG9ja2V2ZW50OiBtdWx0WyV1eF0gc2hpZnRbJWRdXG4iLAorCXByaW50aygiY2xvY2tldmVudDogbXVsdFsleF0gc2hpZnRbJWRdXG4iLAogCSAgICAgICBzcGFyYzY0X2Nsb2NrZXZlbnQubXVsdCwgc3BhcmM2NF9jbG9ja2V2ZW50LnNoaWZ0KTsKIAogCXNldHVwX3NwYXJjNjRfdGltZXIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzMyLmMKaW5kZXggNmIxZTZjZC4uZjg1MTRlMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzMyLmMKQEAgLTE3LDggKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0KLS8qICNkZWZpbmUgREVCVUdfTU5BICovCisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiBlbnVtIGRpcmVjdGlvbiB7CiAJbG9hZCwgICAgLyogbGQsIGxkZCwgbGRoLCBsZHNoICovCkBAIC0yOSwxMiArMjgsNiBAQAogCWludmFsaWQsCiB9OwogCi0jaWZkZWYgREVCVUdfTU5BCi1zdGF0aWMgY2hhciAqZGlyc3RyaW5nc1tdID0gewotICAibG9hZCIsICJzdG9yZSIsICJib3RoIiwgImZwbG9hZCIsICJmcHN0b3JlIiwgImludmFsaWQiCi19OwotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgZW51bSBkaXJlY3Rpb24gZGVjb2RlX2RpcmVjdGlvbih1bnNpZ25lZCBpbnQgaW5zbikKIHsKIAl1bnNpZ25lZCBsb25nIHRtcCA9IChpbnNuID4+IDIxKSAmIDE7CkBAIC0yNTUsMTAgKzI0OCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbik7CiAJCWludCBlcnI7CiAKLSNpZmRlZiBERUJVR19NTkEKLQkJcHJpbnRrKCJLTU5BOiBwYz0lMDhseCBbZGlyPSVzIGFkZHI9JTA4bHggc2l6ZT0lZF0gcmV0cGNbJTA4bHhdXG4iLAotCQkgICAgICAgcmVncy0+cGMsIGRpcnN0cmluZ3NbZGlyXSwgYWRkciwgc2l6ZSwgcmVncy0+dV9yZWdzW1VSRUdfUkVUUENdKTsKLSNlbmRpZgorCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcik7CiAJCXN3aXRjaCAoZGlyKSB7CiAJCWNhc2UgbG9hZDoKIAkJCWVyciA9IGRvX2ludF9sb2FkKGZldGNoX3JlZ19hZGRyKCgoaW5zbj4+MjUpJjB4MWYpLApAQCAtMzUwLDYgKzM0MCw3IEBACiAJCX0KIAogCQlhZGRyID0gY29tcHV0ZV9lZmZlY3RpdmVfYWRkcmVzcyhyZWdzLCBpbnNuKTsKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHIpOwogCQlzd2l0Y2goZGlyKSB7CiAJCWNhc2UgbG9hZDoKIAkJCWVyciA9IGRvX2ludF9sb2FkKGZldGNoX3JlZ19hZGRyKCgoaW5zbj4+MjUpJjB4MWYpLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwppbmRleCAzNzkyMDk5Li4zNzhjYTgyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwpAQCAtMjAsMTAgKzIwLDkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KIAotLyogI2RlZmluZSBERUJVR19NTkEgKi8KLQogZW51bSBkaXJlY3Rpb24gewogCWxvYWQsICAgIC8qIGxkLCBsZGQsIGxkaCwgbGRzaCAqLwogCXN0b3JlLCAgIC8qIHN0LCBzdGQsIHN0aCwgc3RzaCAqLwpAQCAtMzMsMTIgKzMyLDYgQEAKIAlpbnZhbGlkLAogfTsKIAotI2lmZGVmIERFQlVHX01OQQotc3RhdGljIGNoYXIgKmRpcnN0cmluZ3NbXSA9IHsKLSAgImxvYWQiLCAic3RvcmUiLCAiYm90aCIsICJmcGxvYWQiLCAiZnBzdG9yZSIsICJpbnZhbGlkIgotfTsKLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIGVudW0gZGlyZWN0aW9uIGRlY29kZV9kaXJlY3Rpb24odW5zaWduZWQgaW50IGluc24pCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAgPSAoaW5zbiA+PiAyMSkgJiAxOwpAQCAtMzI3LDEyICszMjAsNyBAQAogCiAJCWFkZHIgPSBjb21wdXRlX2VmZmVjdGl2ZV9hZGRyZXNzKHJlZ3MsIGluc24sCiAJCQkJCQkgKChpbnNuID4+IDI1KSAmIDB4MWYpKTsKLSNpZmRlZiBERUJVR19NTkEKLQkJcHJpbnRrKCJLTU5BOiBwYz0lMDE2bHggW2Rpcj0lcyBhZGRyPSUwMTZseCBzaXplPSVkXSAiCi0JCSAgICAgICAicmV0cGNbJTAxNmx4XVxuIiwKLQkJICAgICAgIHJlZ3MtPnRwYywgZGlyc3RyaW5nc1tkaXJdLCBhZGRyLCBzaXplLAotCQkgICAgICAgcmVncy0+dV9yZWdzW1VSRUdfUkVUUENdKTsKLSNlbmRpZgorCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUywgMSwgMCwgcmVncywgYWRkcik7CiAJCXN3aXRjaCAoYXNpKSB7CiAJCWNhc2UgQVNJX05MOgogCQljYXNlIEFTSV9BSVVQTDoKQEAgLTM5OSw2ICszODcsNyBAQAogCWludCByZXQsIGksIHJkID0gKChpbnNuID4+IDI1KSAmIDB4MWYpOwogCWludCBmcm9tX2tlcm5lbCA9IChyZWdzLT50c3RhdGUgJiBUU1RBVEVfUFJJVikgIT0gMDsKIAkgICAgICAgICAgICAgICAgICAgICAgICAKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgMCwgcmVncywgMCk7CiAJaWYgKGluc24gJiAweDIwMDApIHsKIAkJbWF5YmVfZmx1c2hfd2luZG93cygwLCAwLCByZCwgZnJvbV9rZXJuZWwpOwogCQl2YWx1ZSA9IHNpZ25fZXh0ZW5kX2ltbTEzKGluc24pOwpAQCAtNDQ1LDYgKzQzNCw4IEBACiAJaW50IGFzaSA9IGRlY29kZV9hc2koaW5zbiwgcmVncyk7CiAJaW50IGZsYWcgPSAoZnJlZyA8IDMyKSA/IEZQUlNfREwgOiBGUFJTX0RVOwogCisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFMsIDEsIDAsIHJlZ3MsIDApOworCiAJc2F2ZV9hbmRfY2xlYXJfZnB1KCk7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdICY9IH4weDFjMDAwOwogCWlmIChmcmVnICYgMykgewpAQCAtNTY2LDYgKzU1Nyw4IEBACiAJaW50IGZyb21fa2VybmVsID0gKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKSAhPSAwOwogCXVuc2lnbmVkIGxvbmcgKnJlZzsKIAkgICAgICAgICAgICAgICAgICAgICAgICAKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgMCwgcmVncywgMCk7CisKIAltYXliZV9mbHVzaF93aW5kb3dzKDAsIDAsIHJkLCBmcm9tX2tlcm5lbCk7CiAJcmVnID0gZmV0Y2hfcmVnX2FkZHIocmQsIHJlZ3MpOwogCWlmIChmcm9tX2tlcm5lbCB8fCByZCA8IDE2KSB7CkBAIC01OTYsNiArNTg5LDcgQEAKIAogCWlmICh0c3RhdGUgJiBUU1RBVEVfUFJJVikKIAkJZGllX2lmX2tlcm5lbCgibGRkZm1uYSBmcm9tIGtlcm5lbCIsIHJlZ3MpOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTLCAxLCAwLCByZWdzLCBzZmFyKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQogCQlwYyA9ICh1MzIpcGM7CiAJaWYgKGdldF91c2VyKGluc24sICh1MzIgX191c2VyICopIHBjKSAhPSAtRUZBVUxUKSB7CkBAIC02NTcsNiArNjUxLDcgQEAKIAogCWlmICh0c3RhdGUgJiBUU1RBVEVfUFJJVikKIAkJZGllX2lmX2tlcm5lbCgic3RkZm1uYSBmcm9tIGtlcm5lbCIsIHJlZ3MpOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTLCAxLCAwLCByZWdzLCBzZmFyKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQogCQlwYyA9ICh1MzIpcGM7CiAJaWYgKGdldF91c2VyKGluc24sICh1MzIgX191c2VyICopIHBjKSAhPSAtRUZBVUxUKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKaW5kZXggZDIzMWNiZC4uOWRmZDJlYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KQEAgLTgwMSw2ICs4MDIsOCBAQAogCiAJQlVHX09OKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKTsKIAorCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLCAxLCAwLCByZWdzLCAwKTsKKwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpCiAJCXBjID0gKHUzMilwYzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL2xpYi9NYWtlZmlsZQppbmRleCBlNzVmYWYwLi5jNGI1ZTAzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL2xpYi9NYWtlZmlsZQpAQCAtNDQsMyArNDQsNCBAQAogb2JqLSQoQ09ORklHX1NQQVJDMzIpICs9IGF0b21pYzMyLm8KIG9iai15ICAgICAgICAgICAgICAgICArPSBrc3ltcy5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkgKz0gUGVlQ2VlSS5vCitvYmoteSAgICAgICAgICAgICAgICAgKz0gdXNlcmNvcHkubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYnplcm8uUyBiL2FyY2gvc3BhcmMvbGliL2J6ZXJvLlMKaW5kZXggYjY1NTcyOS4uNjE1ZjQwMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvYnplcm8uUworKysgYi9hcmNoL3NwYXJjL2xpYi9iemVyby5TCkBAIC02LDEwICs2LDYgQEAKIAogCS50ZXh0CiAKLQkuZ2xvYmwJX19tZW1zZXQKLQkudHlwZQlfX21lbXNldCwgI2Z1bmN0aW9uCi1fX21lbXNldDoJCS8qICVvMD1idWYsICVvMT1wYXQsICVvMj1sZW4gKi8KLQogCS5nbG9ibAltZW1zZXQKIAkudHlwZQltZW1zZXQsICNmdW5jdGlvbgogbWVtc2V0OgkJCS8qICVvMD1idWYsICVvMT1wYXQsICVvMj1sZW4gKi8KQEAgLTgzLDcgKzc5LDYgQEAKIAlyZXRsCiAJIG1vdgkJJW8zLCAlbzAKIAkuc2l6ZQkJX19iemVybywgLi1fX2J6ZXJvCi0JLnNpemUJCV9fbWVtc2V0LCAuLV9fbWVtc2V0CiAJLnNpemUJCW1lbXNldCwgLi1tZW1zZXQKIAogI2RlZmluZSBFWF9TVCh4LHkpCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TIGIvYXJjaC9zcGFyYy9saWIvY2hlY2tzdW1fMzIuUwppbmRleCA3N2YyMjg1Li4zNjMyY2IzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TCisrKyBiL2FyY2gvc3BhcmMvbGliL2NoZWNrc3VtXzMyLlMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCSBtb3YJJWkwLCAlbzEKIAltb3YJJWkxLCAlbzAKIDU6Ci0JY2FsbAlfX21lbWNweQorCWNhbGwJbWVtY3B5CiAJIG1vdgklaTIsICVvMgogCXRzdAklbzAKIAlibmUsYQkyZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIva3N5bXMuYyBiL2FyY2gvc3BhcmMvbGliL2tzeW1zLmMKaW5kZXggNzA0YjEyNi4uMWIzMGJiMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIva3N5bXMuYworKysgYi9hcmNoL3NwYXJjL2xpYi9rc3ltcy5jCkBAIC0zMCw3ICszMCw2IEBACiBFWFBPUlRfU1lNQk9MKG1lbWNtcCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7Ci1FWFBPUlRfU1lNQk9MKF9fbWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7CiBFWFBPUlRfU1lNQk9MKF9fYnplcm8pOwogCkBAIC04MSw3ICs4MCw2IEBACiAKIC8qIFNwZWNpYWwgaW50ZXJuYWwgdmVyc2lvbnMgb2YgbGlicmFyeSBmdW5jdGlvbnMuICovCiBFWFBPUlRfU1lNQk9MKF9fY29weV8xcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKF9fbWVtY3B5KTsKIEVYUE9SVF9TWU1CT0woX19tZW1tb3ZlKTsKIEVYUE9SVF9TWU1CT0woYnplcm9fMXBhZ2UpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9tY291bnQuUyBiL2FyY2gvc3BhcmMvbGliL21jb3VudC5TCmluZGV4IDdjZTljNjUuLjI0YjhiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL21jb3VudC5TCisrKyBiL2FyY2gvc3BhcmMvbGliL21jb3VudC5TCkBAIC02NCw4ICs2NCw5IEBACiAyOgkgc2V0aGkJCSVoaShzb2Z0aXJxX3N0YWNrKSwgJWczCiAJb3IJCSVnMywgJWxvKHNvZnRpcnFfc3RhY2spLCAlZzMKIAlsZHgJCVslZzMgKyAlZzFdLCAlZzcKKwlzdWIJCSVnNywgU1RBQ0tfQklBUywgJWc3CiAJY21wCQklc3AsICVnNwotCWJsZXUscHQJCSV4Y2MsIDJmCisJYmxldSxwdAkJJXhjYywgM2YKIAkgc2V0aGkJCSVoaShUSFJFQURfU0laRSksICVnMwogCWFkZAkJJWc3LCAlZzMsICVnNwogCWNtcAkJJXNwLCAlZzcKQEAgLTc1LDcgKzc2LDcgQEAKIAkgKiBhZ2Fpbiwgd2UgYXJlIGFscmVhZHkgdHJ5aW5nIHRvIG91dHB1dCB0aGUgc3RhY2sgb3ZlcmZsb3cKIAkgKiBtZXNzYWdlLgogCSAqLwotCXNldGhpCQklaGkob3ZzdGFjayksICVnNwkJISBjYW50IG1vdmUgdG8gcGFuaWMgc3RhY2sgZmFzdCBlbm91Z2gKKzM6CXNldGhpCQklaGkob3ZzdGFjayksICVnNwkJISBjYW50IG1vdmUgdG8gcGFuaWMgc3RhY2sgZmFzdCBlbm91Z2gKIAkgb3IJCSVnNywgJWxvKG92c3RhY2spLCAlZzcKIAlhZGQJCSVnNywgT1ZTVEFDS1NJWkUsICVnMwogCXN1YgkJJWczLCBTVEFDS19CSUFTICsgMTkyLCAlZzMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL21lbWNweS5TIGIvYXJjaC9zcGFyYy9saWIvbWVtY3B5LlMKaW5kZXggY2UxMGJjOC4uMzRmZTY1NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvbWVtY3B5LlMKKysrIGIvYXJjaC9zcGFyYy9saWIvbWVtY3B5LlMKQEAgLTU0Myw5ICs1NDMsNiBAQAogCWIJCTNmCiAJIGFkZAkJJW8wLCAyLCAlbzAKIAotI2lmZGVmIF9fS0VSTkVMX18KLUZVTkMoX19tZW1jcHkpCi0jZW5kaWYKIEZVTkMobWVtY3B5KQkvKiAlbzA9ZHN0ICVvMT1zcmMgJW8yPWxlbiAqLwogCiAJc3ViCQklbzAsICVvMSwgJW80CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9tZW1zZXQuUyBiL2FyY2gvc3BhcmMvbGliL21lbXNldC5TCmluZGV4IDFjMzdlYTg5Li45OWMwMTdiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9tZW1zZXQuUworKysgYi9hcmNoL3NwYXJjL2xpYi9tZW1zZXQuUwpAQCAtNjAsMTEgKzYwLDEwIEBACiAgICAgICAgIC5nbG9ibCAgX19iemVyb19iZWdpbgogX19iemVyb19iZWdpbjoKIAotCS5nbG9ibAlfX2J6ZXJvLCBfX21lbXNldCwgCisJLmdsb2JsCV9fYnplcm8KIAkuZ2xvYmwJbWVtc2V0CiAJLmdsb2JsCV9fbWVtc2V0X3N0YXJ0LCBfX21lbXNldF9lbmQKIF9fbWVtc2V0X3N0YXJ0OgotX19tZW1zZXQ6CiBtZW1zZXQ6CiAJYW5kCSVvMSwgMHhmZiwgJWczCiAJc2xsCSVnMywgOCwgJWcyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi91c2VyY29weS5jIGIvYXJjaC9zcGFyYy9saWIvdXNlcmNvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzNjNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9saWIvdXNlcmNvcHkuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKwordm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQoreworCVdBUk4oMSwgIkJ1ZmZlciBvdmVyZmxvdyBkZXRlY3RlZCFcbiIpOworfQorRVhQT1JUX1NZTUJPTChjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21hdGgtZW11L21hdGhfMzIuYyBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvbWF0aF8zMi5jCmluZGV4IGUxM2Y2NWQuLmEzZmNjZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbWF0aC1lbXUvbWF0aF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvbWF0aF8zMi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJzZnAtdXRpbF8zMi5oIgpAQCAtMTYzLDYgKzE2NCw4IEBACiAJaW50IHJldGNvZGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhc3N1bWUgYWxsIHN1Y2NlZWQgKi8KIAl1bnNpZ25lZCBsb25nIGluc247CiAKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgMCwgcmVncywgMCk7CisKICNpZmRlZiBERUJVR19NQVRIRU1VCiAJcHJpbnRrKCJJbiBkb19tYXRoZW11KCkuLi4gcGMgaXMgJTA4bHhcbiIsIHJlZ3MtPnBjKTsKIAlwcmludGsoImZwcWRlcHRoIGlzICVsZFxuIiwgZnB0LT50aHJlYWQuZnBxZGVwdGgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9tYXRoXzY0LmMgYi9hcmNoL3NwYXJjL21hdGgtZW11L21hdGhfNjQuYwppbmRleCA2ODYzYzliLi41NmQyYzQ0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21hdGgtZW11L21hdGhfNjQuYworKysgYi9hcmNoL3NwYXJjL21hdGgtZW11L21hdGhfNjQuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgPGFzbS9mcHVtYWNyby5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTE4Myw2ICsxODQsNyBAQAogCiAJaWYgKHRzdGF0ZSAmIFRTVEFURV9QUklWKQogCQlkaWVfaWZfa2VybmVsKCJ1bmZpbmlzaGVkL3VuaW1wbGVtZW50ZWQgRlBvcCBmcm9tIGtlcm5lbCIsIHJlZ3MpOworCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLCAxLCAwLCByZWdzLCAwKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQogCQlwYyA9ICh1MzIpcGM7CiAJaWYgKGdldF91c2VyKGluc24sICh1MzIgX191c2VyICopIHBjKSAhPSAtRUZBVUxUKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMKaW5kZXggNDNiMGRhOS4uNjA4MTkzNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYwpAQCAtMzEsMTMgKzMxLDEyIEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKLSNpZmRlZiBDT05GSUdfS1BST0JFUwotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW5saW5lIF9fa3Byb2JlcyBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJaWYgKGtwcm9iZXNfYnVpbHRfaW4oKSAmJiAhdXNlcl9tb2RlKHJlZ3MpKSB7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAwKSkKIAkJCXJldCA9IDE7CkBAIC00NSwxMiArNDQsNiBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyB1bmhhbmRsZWRfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLApAQCAtNzMsNyArNjYsNyBAQAogCWRpZV9pZl9rZXJuZWwoIk9vcHMiLCByZWdzKTsKIH0KIAotc3RhdGljIHZvaWQgYmFkX2tlcm5lbF9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB2YWRkcikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBiYWRfa2VybmVsX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHZhZGRyKQogewogCXByaW50ayhLRVJOX0NSSVQgIk9PUFM6IEJvZ3VzIGtlcm5lbCBQQyBbJTAxNmx4XSBpbiBmYXVsdCBoYW5kbGVyXG4iLAogCSAgICAgICByZWdzLT50cGMpOwpAQCAtMTcwLDggKzE2Myw5IEBACiAJcmV0dXJuIGluc247CiB9CiAKLXN0YXRpYyB2b2lkIGRvX2tlcm5lbF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpX2NvZGUsIGludCBmYXVsdF9jb2RlLAotCQkJICAgIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgZG9fa2VybmVsX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lfY29kZSwKKwkJCQkgICAgICBpbnQgZmF1bHRfY29kZSwgdW5zaWduZWQgaW50IGluc24sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXVuc2lnbmVkIGNoYXIgYXNpID0gQVNJX1A7CiAgCkBAIC0yMjUsNyArMjE5LDcgQEAKIAl1bmhhbmRsZWRfZmF1bHQgKGFkZHJlc3MsIGN1cnJlbnQsIHJlZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBub2lubGluZSBib2d1c18zMmJpdF9mYXVsdF90cGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBub2lubGluZSBfX2twcm9iZXMgYm9ndXNfMzJiaXRfZmF1bHRfdHBjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YXRpYyBpbnQgdGltZXM7CiAKQEAgLTIzNyw4ICsyMzEsOCBAQAogCXNob3dfcmVncyhyZWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbm9pbmxpbmUgYm9ndXNfMzJiaXRfZmF1bHRfYWRkcmVzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyB2b2lkIG5vaW5saW5lIF9fa3Byb2JlcyBib2d1c18zMmJpdF9mYXVsdF9hZGRyZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJc3RhdGljIGludCB0aW1lczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IDJmZmFjZDYuLmE4OWJhZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xMDIxLDIwICsxMDIyLDEyIEBACiAJbnBhZ2VzID0gKCgodW5zaWduZWQgbG9uZyl2YWRkciAmIH5QQUdFX01BU0spICsKIAkJICBzaXplICsgKFBBR0VfU0laRS0xKSkgPj4gUEFHRV9TSElGVDsKIAotCXNjYW4gPSAwOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3IgKDs7KSB7Ci0JCXNjYW4gPSBmaW5kX25leHRfemVyb19iaXQoc3VuNGNfaW9idWZmZXJfbWFwLAotCQkJCQkgIGlvYnVmZmVyX21hcF9zaXplLCBzY2FuKTsKLQkJaWYgKChiYXNlID0gc2NhbikgKyBucGFnZXMgPiBpb2J1ZmZlcl9tYXBfc2l6ZSkgZ290byBhYmVuZDsKLQkJZm9yICg7OykgewotCQkJaWYgKHNjYW4gPj0gYmFzZSArIG5wYWdlcykgZ290byBmb3VuZDsKLQkJCWlmICh0ZXN0X2JpdChzY2FuLCBzdW40Y19pb2J1ZmZlcl9tYXApKSBicmVhazsKLQkJCXNjYW4rKzsKLQkJfQotCX0KKwliYXNlID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEoc3VuNGNfaW9idWZmZXJfbWFwLCBpb2J1ZmZlcl9tYXBfc2l6ZSwKKwkJCQkJCTAsIG5wYWdlcywgMCk7CisJaWYgKGJhc2UgPj0gaW9idWZmZXJfbWFwX3NpemUpCisJCWdvdG8gYWJlbmQ7CiAKLWZvdW5kOgogCWhpZ2ggPSAoKGJhc2UgKyBucGFnZXMpIDw8IFBBR0VfU0hJRlQpICsgc3VuNGNfaW9idWZmZXJfc3RhcnQ7CiAJaGlnaCA9IFNVTjRDX1JFQUxfUEdESVJfQUxJR04oaGlnaCk7CiAJd2hpbGUgKGhpZ2ggPiBzdW40Y19pb2J1ZmZlcl9oaWdoKSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlIGIvYXJjaC91bS9NYWtlZmlsZQppbmRleCBmYzYzM2RiLi5mYWI4MTIxIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlCisrKyBiL2FyY2gvdW0vTWFrZWZpbGUKQEAgLTE0OSw2ICsxNDksNiBAQAogCiAkKFNIQVJFRF9IRUFERVJTKS9rZXJuX2NvbnN0YW50cy5oOgogCSQoUSlta2RpciAtcCAkKGRpciAkQCkKLQkkKFEpZWNobyAnI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgiJyA+JEAKKwkkKFEpZWNobyAnI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvZ2VuZXJhdGVkL2FzbS1vZmZzZXRzLmgiJyA+JEAKIAogZXhwb3J0IFNVQkFSQ0ggVVNFUl9DRkxBR1MgQ0ZMQUdTX05PX0hBUkRFTklORyBPUyBIRUFERVJfQVJDSCBERVZfTlVMTF9QQVRICmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwppbmRleCBlMTQ2MjljLi41MTA2OTI0IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKQEAgLTYsNiArNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTEzMSw3ICsxMzIsNyBAQAogCWNoYXIgKnB0ciA9IHJlcS0+cmVxdWVzdC5kYXRhLCAqYnVmOwogCiAJcHRyICs9IHN0cmxlbigicHJvYyIpOwotCXdoaWxlIChpc3NwYWNlKCpwdHIpKSBwdHIrKzsKKwlwdHIgPSBza2lwX3NwYWNlcyhwdHIpOwogCiAJcHJvYyA9IGdldF9mc190eXBlKCJwcm9jIik7CiAJaWYgKHByb2MgPT0gTlVMTCkgewpAQCAtMjEyLDggKzIxMyw3IEBACiAJY2hhciAqcHRyID0gcmVxLT5yZXF1ZXN0LmRhdGE7CiAKIAlwdHIgKz0gc3RybGVuKCJwcm9jIik7Ci0Jd2hpbGUgKGlzc3BhY2UoKnB0cikpCi0JCXB0cisrOworCXB0ciA9IHNraXBfc3BhY2VzKHB0cik7CiAJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3Byb2MvJXMiLCBwdHIpOwogCiAJZmQgPSBzeXNfb3BlbihwYXRoLCAwLCAwKTsKQEAgLTU2MCw4ICs1NjAsNyBAQAogCWludCBlcnI7CiAKIAlwdHIgKz0gc3RybGVuKCJjb25maWciKTsKLQl3aGlsZSAoaXNzcGFjZSgqcHRyKSkKLQkJcHRyKys7CisJcHRyID0gc2tpcF9zcGFjZXMocHRyKTsKIAlkZXYgPSBtY29uc29sZV9maW5kX2RldihwdHIpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQltY29uc29sZV9yZXBseShyZXEsICJCYWQgY29uZmlndXJhdGlvbiBvcHRpb24iLCAxLCAwKTsKQEAgLTU4OCw3ICs1ODcsNyBAQAogCWludCBlcnIsIHN0YXJ0LCBlbmQsIG47CiAKIAlwdHIgKz0gc3RybGVuKCJyZW1vdmUiKTsKLQl3aGlsZSAoaXNzcGFjZSgqcHRyKSkgcHRyKys7CisJcHRyID0gc2tpcF9zcGFjZXMocHRyKTsKIAlkZXYgPSBtY29uc29sZV9maW5kX2RldihwdHIpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQltY29uc29sZV9yZXBseShyZXEsICJCYWQgcmVtb3ZlIG9wdGlvbiIsIDEsIDApOwpAQCAtNzEyLDcgKzcxMSw3IEBACiAJY2hhciAqcHRyID0gcmVxLT5yZXF1ZXN0LmRhdGE7CiAKIAlwdHIgKz0gc3RybGVuKCJzeXNycSIpOwotCXdoaWxlIChpc3NwYWNlKCpwdHIpKSBwdHIrKzsKKwlwdHIgPSBza2lwX3NwYWNlcyhwdHIpOwogCiAJLyoKIAkgKiBXaXRoICdiJywgdGhlIHN5c3RlbSB3aWxsIHNodXQgZG93biB3aXRob3V0IGEgY2hhbmNlIHRvIHJlcGx5LApAQCAtNzU3LDggKzc1Niw3IEBACiAJICovCiAKIAlwdHIgKz0gc3RybGVuKCJzdGFjayIpOwotCXdoaWxlIChpc3NwYWNlKCpwdHIpKQotCQlwdHIrKzsKKwlwdHIgPSBza2lwX3NwYWNlcyhwdHIpOwogCiAJLyoKIAkgKiBTaG91bGQgcmVhbGx5IGNoZWNrIGZvciBtdWx0aXBsZSBwaWRzIG9yIHJlamVjdCBiYWQgYXJncyBoZXJlCkBAIC04MzMsOCArODMxLDggQEAKIAogX19pbml0Y2FsbChtY29uc29sZV9pbml0KTsKIAotc3RhdGljIGludCB3cml0ZV9wcm9jX21jb25zb2xlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdCBtY29uc29sZV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgKmJ1ZjsKIApAQCAtODU1LDYgKzg1MywxMSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWNvbnNvbGVfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkud3JpdGUJCT0gbWNvbnNvbGVfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyBpbnQgY3JlYXRlX3Byb2NfbWNvbnNvbGUodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKQEAgLTg2MiwxNSArODY1LDEyIEBACiAJaWYgKG5vdGlmeV9zb2NrZXQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgibWNvbnNvbGUiLCBTX0lGUkVHIHwgMDIwMCwgTlVMTCk7CisJZW50ID0gcHJvY19jcmVhdGUoIm1jb25zb2xlIiwgMDIwMCwgTlVMTCwgJm1jb25zb2xlX3Byb2NfZm9wcyk7CiAJaWYgKGVudCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImNyZWF0ZV9wcm9jX21jb25zb2xlIDogY3JlYXRlX3Byb2NfZW50cnkgIgogCQkgICAgICAgImZhaWxlZFxuIik7CiAJCXJldHVybiAwOwogCX0KLQotCWVudC0+cmVhZF9wcm9jID0gTlVMTDsKLQllbnQtPndyaXRlX3Byb2MgPSB3cml0ZV9wcm9jX21jb25zb2xlOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IDYzNWQxNmQuLjVmZjU1NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAibGludXgvaW5pdC5oIgogI2luY2x1ZGUgImxpbnV4L2Nkcm9tLmgiCiAjaW5jbHVkZSAibGludXgvcHJvY19mcy5oIgorI2luY2x1ZGUgImxpbnV4L3NlcV9maWxlLmgiCiAjaW5jbHVkZSAibGludXgvY3R5cGUuaCIKICNpbmNsdWRlICJsaW51eC9jYXBhYmlsaXR5LmgiCiAjaW5jbHVkZSAibGludXgvbW0uaCIKQEAgLTIwMCwyMyArMjAxLDI1IEBACiAJcHJvY19pZGUgPSBwcm9jX21rZGlyKCJpZGUwIiwgcHJvY19pZGVfcm9vdCk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVfcmVhZF9tZWRpYShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkJICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBmYWtlX2lkZV9tZWRpYV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW47Ci0KLQlzdHJjcHkocGFnZSwgImRpc2tcbiIpOwotCWxlbiA9IHN0cmxlbigiZGlza1xuIik7Ci0JbGVuIC09IG9mZjsKLQlpZiAobGVuIDwgY291bnQpewotCQkqZW9mID0gMTsKLQkJaWYgKGxlbiA8PSAwKSByZXR1cm4gMDsKLQl9Ci0JZWxzZSBsZW4gPSBjb3VudDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiBsZW47CisJc2VxX3B1dHMobSwgImRpc2tcbiIpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZha2VfaWRlX21lZGlhX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZmFrZV9pZGVfbWVkaWFfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFrZV9pZGVfbWVkaWFfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBmYWtlX2lkZV9tZWRpYV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIHN0YXRpYyB2b2lkIG1ha2VfaWRlX2VudHJpZXMoY29uc3QgY2hhciAqZGV2X25hbWUpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXIsICplbnQ7CkBAIC0yMjcsMTEgKzIzMCw4IEBACiAJZGlyID0gcHJvY19ta2RpcihkZXZfbmFtZSwgcHJvY19pZGUpOwogCWlmKCFkaXIpIHJldHVybjsKIAotCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJtZWRpYSIsIFNfSUZSRUd8U19JUlVHTywgZGlyKTsKKwllbnQgPSBwcm9jX2NyZWF0ZSgibWVkaWEiLCBTX0lSVUdPLCBkaXIsICZmYWtlX2lkZV9tZWRpYV9wcm9jX2ZvcHMpOwogCWlmKCFlbnQpIHJldHVybjsKLQllbnQtPmRhdGEgPSBOVUxMOwotCWVudC0+cmVhZF9wcm9jID0gcHJvY19pZGVfcmVhZF9tZWRpYTsKLQllbnQtPndyaXRlX3Byb2MgPSBOVUxMOwogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImlkZTAvJXMiLCBkZXZfbmFtZSk7CiAJcHJvY19zeW1saW5rKGRldl9uYW1lLCBwcm9jX2lkZV9yb290LCBuYW1lKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcwZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2V4aXRjb2RlLmMgYi9hcmNoL3VtL2tlcm5lbC9leGl0Y29kZS5jCmluZGV4IDY1NDBkMmMuLjgyOWRmNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2V4aXRjb2RlLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvZXhpdGNvZGUuYwpAQCAtNiw3ICs2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTE2LDMwICsxOCwyNiBAQAogICovCiBpbnQgdW1sX2V4aXRjb2RlID0gMDsKIAotc3RhdGljIGludCByZWFkX3Byb2NfZXhpdGNvZGUoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBleGl0Y29kZV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4sIHZhbDsKKwlpbnQgdmFsOwogCiAJLyoKIAkgKiBTYXZlIHVtbF9leGl0Y29kZSBpbiBhIGxvY2FsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBndWFyYW50ZWUKIAkgKiB0aGF0IHNwcmludGYgYWNjZXNzZXMgaXQgYXRvbWljYWxseS4KIAkgKi8KIAl2YWwgPSB1bWxfZXhpdGNvZGU7Ci0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWRcbiIsIHZhbCk7Ci0JbGVuIC09IG9mZjsKLQlpZiAobGVuIDw9IG9mZitjb3VudCkKLQkJKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlpZiAobGVuID4gY291bnQpCi0JCWxlbiA9IGNvdW50OwotCWlmIChsZW4gPCAwKQotCQlsZW4gPSAwOwotCXJldHVybiBsZW47CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHZhbCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfcHJvY19leGl0Y29kZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBleGl0Y29kZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGV4aXRjb2RlX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV4aXRjb2RlX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciAqZW5kLCBidWZbc2l6ZW9mKCJubm5ublwwIildOwogCWludCB0bXA7CkBAIC01NSwyMCArNTMsMjUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4aXRjb2RlX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZXhpdGNvZGVfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGV4aXRjb2RlX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgaW50IG1ha2VfcHJvY19leGl0Y29kZSh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImV4aXRjb2RlIiwgMDYwMCwgTlVMTCk7CisJZW50ID0gcHJvY19jcmVhdGUoImV4aXRjb2RlIiwgMDYwMCwgTlVMTCwgJmV4aXRjb2RlX3Byb2NfZm9wcyk7CiAJaWYgKGVudCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1ha2VfcHJvY19leGl0Y29kZSA6IEZhaWxlZCB0byByZWdpc3RlciAiCiAJCSAgICAgICAiL3Byb2MvZXhpdGNvZGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KLQllbnQtPnJlYWRfcHJvYyA9IHJlYWRfcHJvY19leGl0Y29kZTsKLQllbnQtPndyaXRlX3Byb2MgPSB3cml0ZV9wcm9jX2V4aXRjb2RlOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2lycS5jIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKaW5kZXggMDM5MjcwYi4uODk0NzRiYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAl9CiAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHNraXA7CkBAIC01Myw3ICs1Myw3IEBACiAKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiBza2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChpID09IE5SX0lSUVMpCiAJCXNlcV9wdXRjKHAsICdcbicpOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNGEyOGExNS4uMmY5MTBhMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwpAQCAtOSwxMSArOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CkBAIC0zMzYsMTYgKzMzOCwxOSBAQAogCXJldHVybiBhdG9taWNfcmVhZCgmdXNpbmdfc3lzZW11KTsKIH0KIAotc3RhdGljIGludCBwcm9jX3JlYWRfc3lzZW11KGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBzaXplLGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzeXNlbXVfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpZiAoc25wcmludGYoYnVmLCBzaXplLCAiJWRcbiIsIGdldF91c2luZ19zeXNlbXUoKSkgPCBzaXplKQotCQkvKiBObyBvdmVyZmxvdyAqLwotCQkqZW9mID0gMTsKLQotCXJldHVybiBzdHJsZW4oYnVmKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgZ2V0X3VzaW5nX3N5c2VtdSgpKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX3dyaXRlX3N5c2VtdShzdHJ1Y3QgZmlsZSAqZmlsZSxjb25zdCBjaGFyIF9fdXNlciAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50LHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHN5c2VtdV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN5c2VtdV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBzeXNlbXVfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAljaGFyIHRtcFsyXTsKIApAQCAtMzU4LDEzICszNjMsMjIgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5c2VtdV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHN5c2VtdV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gc3lzZW11X3Byb2Nfd3JpdGUsCit9OworCiBpbnQgX19pbml0IG1ha2VfcHJvY19zeXNlbXUodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKIAlpZiAoIXN5c2VtdV9zdXBwb3J0ZWQpCiAJCXJldHVybiAwOwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInN5c2VtdSIsIDA2MDAsIE5VTEwpOworCWVudCA9IHByb2NfY3JlYXRlKCJzeXNlbXUiLCAwNjAwLCBOVUxMLCAmc3lzZW11X3Byb2NfZm9wcyk7CiAKIAlpZiAoZW50ID09IE5VTEwpCiAJewpAQCAtMzcyLDkgKzM4Niw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWVudC0+cmVhZF9wcm9jICA9IHByb2NfcmVhZF9zeXNlbXU7Ci0JZW50LT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9zeXNlbXU7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmggYi9hcmNoL3VtL3N5cy1pMzg2L2FzbS9lbGYuaAppbmRleCBkMGRhOWQ3Li43NzA4ODU0IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L2FzbS9lbGYuaAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L2FzbS9lbGYuaApAQCAtNDgsNyArNDgsNiBAQAogCVBUX1JFR1NfRUFYKHJlZ3MpID0gMDsgXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRSA0MDk2CiAKICNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICgyICogVEFTS19TSVpFIC8gMykKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXBwYy9hc20vZWxmLmggYi9hcmNoL3VtL3N5cy1wcGMvYXNtL2VsZi5oCmluZGV4IGFmOTQ2M2MuLjhhYWNhZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXBwYy9hc20vZWxmLmgKKysrIGIvYXJjaC91bS9zeXMtcHBjL2FzbS9lbGYuaApAQCAtMTcsOCArMTcsNiBAQAogI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1MzMgogI2VuZGlmCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLQogI2RlZmluZSBSXzM4Nl9OT05FCTAKICNkZWZpbmUgUl8zODZfMzIJMQogI2RlZmluZSBSXzM4Nl9QQzMyCTIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vZWxmLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL2VsZi5oCmluZGV4IDA0YjllODcuLjQ5NjU1YzggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vZWxmLmgKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9lbGYuaApAQCAtMTA0LDcgKzEwNCw2IEBACiAgICAgICAgIGNsZWFyX3RocmVhZF9mbGFnKFRJRl9JQTMyKTsKICNlbmRpZgogCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKIAogI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDIgKiBUQVNLX1NJWkUgLyAzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggMzJhMTkxOC4uNTUyOThlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC01MCw2ICs1MCw4IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKIAlzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UCisJc2VsZWN0IFBFUkZfRVZFTlRTCisJc2VsZWN0IEFOT05fSU5PREVTCiAJc2VsZWN0IEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlzZWxlY3QgSEFWRV9VU0VSX1JFVFVSTl9OT1RJRklFUgogCkBAIC0yMDEyLDE4ICsyMDE0LDkgQEAKIAkgIHByb2Nlc3NvciBnb2VzIGlkbGUgKGFzIGlzIGRvbmUgYnkgdGhlIHNjaGVkdWxlcikuICBUaGUKIAkgIG90aGVyIHdvcmthcm91bmQgaXMgaWRsZT1wb2xsIGJvb3Qgb3B0aW9uLgogCi1jb25maWcgR0VPREVfTUZHUFRfVElNRVIKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJHZW9kZSBNdWx0aS1GdW5jdGlvbiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKE1GR1BUKSBldmVudHMiCi0JZGVwZW5kcyBvbiBNR0VPREVfTFggJiYgR0VORVJJQ19USU1FICYmIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2NrIGV2ZW50IHNvdXJjZSBiYXNlZCBvbiB0aGUgTUZHUFQKLQkgIHRpbWVyKHMpIGluIHRoZSBDUzU1MzUgYW5kIENTNTUzNiBjb21wYW5pb24gY2hpcCBmb3IgdGhlIGdlb2RlLgotCSAgTUZHUFRzIGhhdmUgYSBiZXR0ZXIgcmVzb2x1dGlvbiBhbmQgbWF4IGludGVydmFsIHRoYW4gdGhlCi0JICBnZW5lcmljIFBJVCwgYW5kIGFyZSBzdWl0YWJsZSBmb3IgdXNlIGFzIGhpZ2gtcmVzIHRpbWVycy4KLQogY29uZmlnIE9MUEMKIAlib29sICJPbmUgTGFwdG9wIFBlciBDaGlsZCBzdXBwb3J0IgorCXNlbGVjdCBHUElPTElCCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyB0aGUgdW5pcXVlIGZlYXR1cmVzIG9mIHRoZSBPTFBDCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwppbmRleCA3MzEzMThlLi5iYzAxZTNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gveDg2L0tjb25maWcuZGVidWcKQEAgLTE4Nyw4ICsxODcsOCBAQAogCWRlZl9ib29sIHkKIAogY29uZmlnIFg4Nl9ERUNPREVSX1NFTEZURVNUCi0gICAgIGJvb2wgIng4NiBpbnN0cnVjdGlvbiBkZWNvZGVyIHNlbGZ0ZXN0IgotICAgICBkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWJvb2wgIng4NiBpbnN0cnVjdGlvbiBkZWNvZGVyIHNlbGZ0ZXN0IgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEtQUk9CRVMKIAktLS1oZWxwLS0tCiAJIFBlcmZvcm0geDg2IGluc3RydWN0aW9uIGRlY29kZXIgc2VsZnRlc3RzIGF0IGJ1aWxkIHRpbWUuCiAJIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgdGhlIHNhbml0eSBvZiB4ODYgaW5zdHJ1Y3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9yZWxvY3MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9yZWxvY3MuYwppbmRleCBiYmViMGMzLi44OWJiZjRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvcmVsb2NzLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3JlbG9jcy5jCkBAIC05LDYgKzksOSBAQAogI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAjZGVmaW5lIFVTRV9CU0QKICNpbmNsdWRlIDxlbmRpYW4uaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorCitzdGF0aWMgdm9pZCBkaWUoY2hhciAqZm10LCAuLi4pOwogCiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQogc3RhdGljIEVsZjMyX0VoZHIgZWhkcjsKQEAgLTMwLDI1ICszMyw0NyBAQAogICogdGhlIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGhhcyBiZWVuIGNvbXBpbGVkLiBEb24ndCB3YXJuIHVzZXIgYWJvdXQKICAqIGFic29sdXRlIHJlbG9jYXRpb25zIHByZXNlbnQgdy5yLnQgdGhlc2Ugc3ltYm9scy4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIqIHNhZmVfYWJzX3JlbG9jc1tdID0gewotCQkieGVuX2lycV9kaXNhYmxlX2RpcmVjdF9yZWxvYyIsCi0JCSJ4ZW5fc2F2ZV9mbF9kaXJlY3RfcmVsb2MiLAotfTsKLQotc3RhdGljIGludCBpc19zYWZlX2Fic19yZWxvYyhjb25zdCBjaGFyKiBzeW1fbmFtZSkKK3N0YXRpYyBjb25zdCBjaGFyIGFic19zeW1fcmVnZXhbXSA9CisJIl4oeGVuX2lycV9kaXNhYmxlX2RpcmVjdF9yZWxvYyR8IgorCSJ4ZW5fc2F2ZV9mbF9kaXJlY3RfcmVsb2MkfCIKKwkiVkRTT3wiCisJIl9fY3JjXykiOworc3RhdGljIHJlZ2V4X3QgYWJzX3N5bV9yZWdleF9jOworc3RhdGljIGludCBpc19hYnNfcmVsb2MoY29uc3QgY2hhciAqc3ltX25hbWUpCiB7Ci0JaW50IGk7CisJcmV0dXJuICFyZWdleGVjKCZhYnNfc3ltX3JlZ2V4X2MsIHN5bV9uYW1lLCAwLCBOVUxMLCAwKTsKK30KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhZmVfYWJzX3JlbG9jcyk7IGkrKykgewotCQlpZiAoIXN0cmNtcChzeW1fbmFtZSwgc2FmZV9hYnNfcmVsb2NzW2ldKSkKLQkJCS8qIE1hdGNoIGZvdW5kICovCi0JCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKHN0cm5jbXAoc3ltX25hbWUsICJWRFNPIiwgNCkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JaWYgKHN0cm5jbXAoc3ltX25hbWUsICJfX2NyY18iLCA2KSA9PSAwKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKy8qCisgKiBUaGVzZSBzeW1ib2xzIGFyZSBrbm93biB0byBiZSByZWxhdGl2ZSwgZXZlbiBpZiB0aGUgbGlua2VyIG1hcmtzIHRoZW0KKyAqIGFzIGFic29sdXRlICh0eXBpY2FsbHkgZGVmaW5lZCBvdXRzaWRlIGFueSBzZWN0aW9uIGluIHRoZSBsaW5rZXIgc2NyaXB0LikKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgcmVsX3N5bV9yZWdleFtdID0KKwkiXl9lbmQkIjsKK3N0YXRpYyByZWdleF90IHJlbF9zeW1fcmVnZXhfYzsKK3N0YXRpYyBpbnQgaXNfcmVsX3JlbG9jKGNvbnN0IGNoYXIgKnN5bV9uYW1lKQoreworCXJldHVybiAhcmVnZXhlYygmcmVsX3N5bV9yZWdleF9jLCBzeW1fbmFtZSwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2V4X2luaXQodm9pZCkKK3sKKyAgICAgICAgY2hhciBlcnJidWZbMTI4XTsKKyAgICAgICAgaW50IGVycjsKKwkKKyAgICAgICAgZXJyID0gcmVnY29tcCgmYWJzX3N5bV9yZWdleF9jLCBhYnNfc3ltX3JlZ2V4LAorICAgICAgICAgICAgICAgICAgICAgIFJFR19FWFRFTkRFRHxSRUdfTk9TVUIpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgcmVnZXJyb3IoZXJyLCAmYWJzX3N5bV9yZWdleF9jLCBlcnJidWYsIHNpemVvZiBlcnJidWYpOworICAgICAgICAgICAgICAgIGRpZSgiJXMiLCBlcnJidWYpOworICAgICAgICB9CisKKyAgICAgICAgZXJyID0gcmVnY29tcCgmcmVsX3N5bV9yZWdleF9jLCByZWxfc3ltX3JlZ2V4LAorICAgICAgICAgICAgICAgICAgICAgIFJFR19FWFRFTkRFRHxSRUdfTk9TVUIpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgcmVnZXJyb3IoZXJyLCAmcmVsX3N5bV9yZWdleF9jLCBlcnJidWYsIHNpemVvZiBlcnJidWYpOworICAgICAgICAgICAgICAgIGRpZSgiJXMiLCBlcnJidWYpOworICAgICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGRpZShjaGFyICpmbXQsIC4uLikKQEAgLTEzMSw3ICsxNTYsNyBAQAogI3VuZGVmIFJFTF9UWVBFCiAJfTsKIAljb25zdCBjaGFyICpuYW1lID0gInVua25vd24gdHlwZSByZWwgdHlwZSBuYW1lIjsKLQlpZiAodHlwZSA8IEFSUkFZX1NJWkUodHlwZV9uYW1lKSkgeworCWlmICh0eXBlIDwgQVJSQVlfU0laRSh0eXBlX25hbWUpICYmIHR5cGVfbmFtZVt0eXBlXSkgewogCQluYW1lID0gdHlwZV9uYW1lW3R5cGVdOwogCX0KIAlyZXR1cm4gbmFtZTsKQEAgLTQ0OCw3ICs0NzMsNyBAQAogCQkJICogQmVmb3JlIHdhcm5pbmcgY2hlY2sgaWYgdGhpcyBhYnNvbHV0ZSBzeW1ib2wKIAkJCSAqIHJlbG9jYXRpb24gaXMgaGFybWxlc3MuCiAJCQkgKi8KLQkJCWlmIChpc19zYWZlX2Fic19yZWxvYyhuYW1lKSkKKwkJCWlmIChpc19hYnNfcmVsb2MobmFtZSkgfHwgaXNfcmVsX3JlbG9jKG5hbWUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoIXByaW50ZWQpIHsKQEAgLTUwMSwyMSArNTI2LDI2IEBACiAJCQlzeW0gPSAmc2hfc3ltdGFiW0VMRjMyX1JfU1lNKHJlbC0+cl9pbmZvKV07CiAJCQlyX3R5cGUgPSBFTEYzMl9SX1RZUEUocmVsLT5yX2luZm8pOwogCQkJLyogRG9uJ3QgdmlzaXQgcmVsb2NhdGlvbnMgdG8gYWJzb2x1dGUgc3ltYm9scyAqLwotCQkJaWYgKHN5bS0+c3Rfc2huZHggPT0gU0hOX0FCUykgeworCQkJaWYgKHN5bS0+c3Rfc2huZHggPT0gU0hOX0FCUyAmJgorCQkJICAgICFpc19yZWxfcmVsb2Moc3ltX25hbWUoc3ltX3N0cnRhYiwgc3ltKSkpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChyX3R5cGUgPT0gUl8zODZfTk9ORSB8fCByX3R5cGUgPT0gUl8zODZfUEMzMikgeworCQkJc3dpdGNoIChyX3R5cGUpIHsKKwkJCWNhc2UgUl8zODZfTk9ORToKKwkJCWNhc2UgUl8zODZfUEMzMjoKIAkJCQkvKgogCQkJCSAqIE5PTkUgY2FuIGJlIGlnbm9yZWQgYW5kIGFuZCBQQyByZWxhdGl2ZQogCQkJCSAqIHJlbG9jYXRpb25zIGRvbid0IG5lZWQgdG8gYmUgYWRqdXN0ZWQuCiAJCQkJICovCi0JCQl9Ci0JCQllbHNlIGlmIChyX3R5cGUgPT0gUl8zODZfMzIpIHsKKwkJCQlicmVhazsKKwkJCWNhc2UgUl8zODZfMzI6CiAJCQkJLyogVmlzaXQgcmVsb2NhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkanVzdGVkICovCiAJCQkJdmlzaXQocmVsLCBzeW0pOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZGllKCJVbnN1cHBvcnRlZCByZWxvY2F0aW9uIHR5cGU6ICVkXG4iLCByX3R5cGUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkaWUoIlVuc3VwcG9ydGVkIHJlbG9jYXRpb24gdHlwZTogJXMgKCVkKVxuIiwKKwkJCQkgICAgcmVsX3R5cGUocl90eXBlKSwgcl90eXBlKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KQEAgLTU3MSwxNiArNjAxLDE1IEBACiAJfQogCWVsc2UgewogCQl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKLQkJYnVmWzBdID0gYnVmWzFdID0gYnVmWzJdID0gYnVmWzNdID0gMDsKIAkJLyogUHJpbnQgYSBzdG9wICovCi0JCXByaW50ZigiJWMlYyVjJWMiLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCQlmd3JpdGUoIlwwXDBcMFwwIiwgNCwgMSwgc3Rkb3V0KTsKIAkJLyogTm93IHByaW50IGVhY2ggcmVsb2NhdGlvbiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcmVsb2NfY291bnQ7IGkrKykgewogCQkJYnVmWzBdID0gKHJlbG9jc1tpXSA+PiAgMCkgJiAweGZmOwogCQkJYnVmWzFdID0gKHJlbG9jc1tpXSA+PiAgOCkgJiAweGZmOwogCQkJYnVmWzJdID0gKHJlbG9jc1tpXSA+PiAxNikgJiAweGZmOwogCQkJYnVmWzNdID0gKHJlbG9jc1tpXSA+PiAyNCkgJiAweGZmOwotCQkJcHJpbnRmKCIlYyVjJWMlYyIsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7CisJCQlmd3JpdGUoYnVmLCA0LCAxLCBzdGRvdXQpOwogCQl9CiAJfQogfQpAQCAtNTk4LDYgKzYyNyw4IEBACiAJRklMRSAqZnA7CiAJaW50IGk7CiAKKwlyZWdleF9pbml0KCk7CisKIAlzaG93X2Fic29sdXRlX3N5bXMgPSAwOwogCXNob3dfYWJzb2x1dGVfcmVsb2NzID0gMDsKIAlhc190ZXh0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCmluZGV4IGIzMWNjNTQuLjkzZTY4OWY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2hlYWRlci5TCisrKyBiL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKQEAgLTE2LDcgKzE2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxhc20vYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmVyc2lvbi5jIGIvYXJjaC94ODYvYm9vdC92ZXJzaW9uLmMKaW5kZXggMjcyM2Q5Yi4uMmIxNWFhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92ZXJzaW9uLmMKKysrIGIvYXJjaC94ODYvYm9vdC92ZXJzaW9uLmMKQEAgLTEzLDggKzEzLDggQEAKICAqLwogCiAjaW5jbHVkZSAiYm9vdC5oIgotI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvY29tcGlsZS5oPgogCiBjb25zdCBjaGFyIGtlcm5lbF92ZXJzaW9uW10gPQogCVVUU19SRUxFQVNFICIgKCIgTElOVVhfQ09NUElMRV9CWSAiQCIgTElOVVhfQ09NUElMRV9IT1NUICIpICIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKaW5kZXggODQ3ODZmYi4uNGQ4MTdmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKQEAgLTI4LDcgKzI4LDkgQEAKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKHUxNiBkZXZpZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfcmVzZXRfY21kX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSk7Ci0KK2V4dGVybiBpbnQgYW1kX2lvbW11X2luaXRfZGV2aWNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9pb21tdV91bmluaXRfZGV2aWNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9pb21tdV9pbml0X25vdGlmaWVyKHZvaWQpOwogI2lmbmRlZiBDT05GSUdfQU1EX0lPTU1VX1NUQVRTCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfc3RhdHNfaW5pdCh2b2lkKSB7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxnZW5lcmF0ZWQvYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA2MTM3MDBmLi42MzdlMWVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0xNTMsNiArMTUzLDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1NFNQkoNiozMisxMSkgLyogU1NFLTUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfU0tJTklUCSg2KjMyKzEyKSAvKiBTS0lOSVQvU1RHSSBpbnN0cnVjdGlvbnMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfV0RUCQkoNiozMisxMykgLyogV2F0Y2hkb2cgdGltZXIgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9ERUlEX01TUgkoNiozMisxOSkgLyogTm9kZUlkIE1TUiAqLwogCiAvKgogICogQXV4aWxpYXJ5IGZsYWdzOiBMaW51eCBkZWZpbmVkIC0gRm9yIGZlYXR1cmVzIHNjYXR0ZXJlZCBpbiB2YXJpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAwZjZjMDJmLi5hYzkxZWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAlpZiAoIWRldi0+ZG1hX21hc2spCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGFkZHIgKyBzaXplIDw9ICpkZXYtPmRtYV9tYXNrOworCXJldHVybiBhZGRyICsgc2l6ZSAtIDEgPD0gKmRldi0+ZG1hX21hc2s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwaHlzX3RvX2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IHBhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA4YTAyNGJhLi5iNDUwMWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMjM5LDcgKzIzOSw2IEBACiAjZW5kaWYgLyogIUNPTkZJR19YODZfMzIgKi8KIAogI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKIC8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW9kZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2VvZGUuaAppbmRleCBhZDNjMmVkLi43Y2Q3MzU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nZW9kZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dlb2RlLmgKQEAgLTEyLDE2MCArMTIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLS8qIEdlbmVyaWMgc291dGhicmlkZ2UgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgR0VPREVfREVWX1BNUyAwCi0jZGVmaW5lIEdFT0RFX0RFVl9BQ1BJIDEKLSNkZWZpbmUgR0VPREVfREVWX0dQSU8gMgotI2RlZmluZSBHRU9ERV9ERVZfTUZHUFQgMwotCi1leHRlcm4gaW50IGdlb2RlX2dldF9kZXZfYmFzZSh1bnNpZ25lZCBpbnQgZGV2KTsKLQotLyogVXNlZnVsIG1hY3JvcyAqLwotI2RlZmluZSBnZW9kZV9wbXNfYmFzZSgpCWdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfUE1TKQotI2RlZmluZSBnZW9kZV9hY3BpX2Jhc2UoKQlnZW9kZV9nZXRfZGV2X2Jhc2UoR0VPREVfREVWX0FDUEkpCi0jZGVmaW5lIGdlb2RlX2dwaW9fYmFzZSgpCWdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfR1BJTykKLSNkZWZpbmUgZ2VvZGVfbWZncHRfYmFzZSgpCWdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfTUZHUFQpCi0KLS8qIE1TUlMgKi8KLQotI2RlZmluZSBNU1JfR0xJVV9QMkRfUk8wCTB4MTAwMDAwMjkKLQotI2RlZmluZSBNU1JfTFhfR0xEX01TUl9DT05GSUcJMHg0ODAwMjAwMQotI2RlZmluZSBNU1JfTFhfTVNSX1BBRFNFTAkweDQ4MDAyMDExCS8qIE5PVCAweDQ4MDAwMDExOyB0aGUgZGF0YQotCQkJCQkJICogc2hlZXQgaGFzIHRoZSB3cm9uZyB2YWx1ZSAqLwotI2RlZmluZSBNU1JfR0xDUF9TWVNfUlNUUExMCTB4NEMwMDAwMTQKLSNkZWZpbmUgTVNSX0dMQ1BfRE9UUExMCQkweDRDMDAwMDE1Ci0KLSNkZWZpbmUgTVNSX0xCQVJfU01CCQkweDUxNDAwMDBCCi0jZGVmaW5lIE1TUl9MQkFSX0dQSU8JCTB4NTE0MDAwMEMKLSNkZWZpbmUgTVNSX0xCQVJfTUZHUFQJCTB4NTE0MDAwMEQKLSNkZWZpbmUgTVNSX0xCQVJfQUNQSQkJMHg1MTQwMDAwRQotI2RlZmluZSBNU1JfTEJBUl9QTVMJCTB4NTE0MDAwMEYKLQotI2RlZmluZSBNU1JfRElWSUxfU09GVF9SRVNFVAkweDUxNDAwMDE3Ci0KLSNkZWZpbmUgTVNSX1BJQ19ZU0VMX0xPVwkweDUxNDAwMDIwCi0jZGVmaW5lIE1TUl9QSUNfWVNFTF9ISUdICTB4NTE0MDAwMjEKLSNkZWZpbmUgTVNSX1BJQ19aU0VMX0xPVwkweDUxNDAwMDIyCi0jZGVmaW5lIE1TUl9QSUNfWlNFTF9ISUdICTB4NTE0MDAwMjMKLSNkZWZpbmUgTVNSX1BJQ19JUlFNX0xQQwkweDUxNDAwMDI1Ci0KLSNkZWZpbmUgTVNSX01GR1BUX0lSUQkJMHg1MTQwMDAyOAotI2RlZmluZSBNU1JfTUZHUFRfTlIJCTB4NTE0MDAwMjkKLSNkZWZpbmUgTVNSX01GR1BUX1NFVFVQCQkweDUxNDAwMDJCCi0KLSNkZWZpbmUgTVNSX0xYX1NQQVJFX01TUgkweDgwMDAwMDExCS8qIERDLXNwZWNpZmljICovCi0KLSNkZWZpbmUgTVNSX0dYX0dMRF9NU1JfQ09ORklHCTB4QzAwMDIwMDEKLSNkZWZpbmUgTVNSX0dYX01TUl9QQURTRUwJMHhDMDAwMjAxMQotCi0vKiBSZXNvdXJjZSBTaXplcyAqLwotCi0jZGVmaW5lIExCQVJfR1BJT19TSVpFCQkweEZGCi0jZGVmaW5lIExCQVJfTUZHUFRfU0laRQkJMHg0MAotI2RlZmluZSBMQkFSX0FDUElfU0laRQkJMHg0MAotI2RlZmluZSBMQkFSX1BNU19TSVpFCQkweDgwCi0KLS8qIEFDUEkgcmVnaXN0ZXJzIChQTVMgYmxvY2spICovCi0KLS8qCi0gKiBQTTFfRU4gaXMgb25seSB2YWxpZCB3aGVuIFZTQSBpcyBlbmFibGVkIGZvciAxNiBiaXQgcmVhZHMuCi0gKiBXaGVuIFZTQSBpcyBub3QgZW5hYmxlZCwgKmFsd2F5cyogcmVhZCBib3RoIFBNMV9TVFMgYW5kIFBNMV9FTgotICogd2l0aCBhIDMyIGJpdCByZWFkIGF0IG9mZnNldCAweDAKLSAqLwotCi0jZGVmaW5lIFBNMV9TVFMJCQkweDAwCi0jZGVmaW5lIFBNMV9FTgkJCTB4MDIKLSNkZWZpbmUgUE0xX0NOVAkJCTB4MDgKLSNkZWZpbmUgUE0yX0NOVAkJCTB4MEMKLSNkZWZpbmUgUE1fVE1SCQkJMHgxMAotI2RlZmluZSBQTV9HUEUwX1NUUwkJMHgxOAotI2RlZmluZSBQTV9HUEUwX0VOCQkweDFDCi0KLS8qIFBNQyByZWdpc3RlcnMgKFBNUyBibG9jaykgKi8KLQotI2RlZmluZSBQTV9TU0QJCQkweDAwCi0jZGVmaW5lIFBNX1NDWEEJCQkweDA0Ci0jZGVmaW5lIFBNX1NDWUEJCQkweDA4Ci0jZGVmaW5lIFBNX09VVF9TTFBDVEwJCTB4MEMKLSNkZWZpbmUgUE1fU0NMSwkJCTB4MTAKLSNkZWZpbmUgUE1fU0VECQkJMHgxCi0jZGVmaW5lIFBNX1NDWEQJCQkweDE4Ci0jZGVmaW5lIFBNX1NDWUQJCQkweDFDCi0jZGVmaW5lIFBNX0lOX1NMUENUTAkJMHgyMAotI2RlZmluZSBQTV9XS0QJCQkweDMwCi0jZGVmaW5lIFBNX1dLWEQJCQkweDM0Ci0jZGVmaW5lIFBNX1JECQkJMHgzOAotI2RlZmluZSBQTV9XS1hBCQkJMHgzQwotI2RlZmluZSBQTV9GU0QJCQkweDQwCi0jZGVmaW5lIFBNX1RTRAkJCTB4NDQKLSNkZWZpbmUgUE1fUFNECQkJMHg0OAotI2RlZmluZSBQTV9OV0tECQkJMHg0QwotI2RlZmluZSBQTV9BV0tECQkJMHg1MAotI2RlZmluZSBQTV9TU0MJCQkweDU0Ci0KLS8qIFZTQTIgbWFnaWMgdmFsdWVzICovCi0KLSNkZWZpbmUgVlNBX1ZSQ19JTkRFWAkJMHhBQzFDCi0jZGVmaW5lIFZTQV9WUkNfREFUQQkJMHhBQzFFCi0jZGVmaW5lIFZTQV9WUl9VTkxPQ0sJCTB4RkM1MwkvKiB1bmxvY2sgdmlydHVhbCByZWdpc3RlciAqLwotI2RlZmluZSBWU0FfVlJfU0lHTkFUVVJFCTB4MDAwMwotI2RlZmluZSBWU0FfVlJfTUVNX1NJWkUJCTB4MDIwMAotI2RlZmluZSBBTURfVlNBX1NJRwkJMHg0MTMyCS8qIHNpZ25hdHVyZSBpcyBhc2NpaSAnVlNBMicgKi8KLSNkZWZpbmUgR1NXX1ZTQV9TSUcJCTB4NTM0ZCAgLyogR2VuZXJhbCBTb2Z0d2FyZSBzaWduYXR1cmUgKi8KLS8qIEdQSU8gKi8KLQotI2RlZmluZSBHUElPX09VVFBVVF9WQUwJCTB4MDAKLSNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFCTB4MDQKLSNkZWZpbmUgR1BJT19PVVRQVVRfT1BFTl9EUkFJTgkweDA4Ci0jZGVmaW5lIEdQSU9fT1VUUFVUX0lOVkVSVAkweDBDCi0jZGVmaW5lIEdQSU9fT1VUUFVUX0FVWDEJMHgxMAotI2RlZmluZSBHUElPX09VVFBVVF9BVVgyCTB4MTQKLSNkZWZpbmUgR1BJT19QVUxMX1VQCQkweDE4Ci0jZGVmaW5lIEdQSU9fUFVMTF9ET1dOCQkweDFDCi0jZGVmaW5lIEdQSU9fSU5QVVRfRU5BQkxFCTB4MjAKLSNkZWZpbmUgR1BJT19JTlBVVF9JTlZFUlQJMHgyNAotI2RlZmluZSBHUElPX0lOUFVUX0ZJTFRFUgkweDI4Ci0jZGVmaW5lIEdQSU9fSU5QVVRfRVZFTlRfQ09VTlQJMHgyQwotI2RlZmluZSBHUElPX1JFQURfQkFDSwkJMHgzMAotI2RlZmluZSBHUElPX0lOUFVUX0FVWDEJCTB4MzQKLSNkZWZpbmUgR1BJT19FVkVOVFNfRU5BQkxFCTB4MzgKLSNkZWZpbmUgR1BJT19MT0NLX0VOQUJMRQkweDNDCi0jZGVmaW5lIEdQSU9fUE9TSVRJVkVfRURHRV9FTgkweDQwCi0jZGVmaW5lIEdQSU9fTkVHQVRJVkVfRURHRV9FTgkweDQ0Ci0jZGVmaW5lIEdQSU9fUE9TSVRJVkVfRURHRV9TVFMJMHg0OAotI2RlZmluZSBHUElPX05FR0FUSVZFX0VER0VfU1RTCTB4NEMKLQotI2RlZmluZSBHUElPX01BUF9YCQkweEUwCi0jZGVmaW5lIEdQSU9fTUFQX1kJCTB4RTQKLSNkZWZpbmUgR1BJT19NQVBfWgkJMHhFOAotI2RlZmluZSBHUElPX01BUF9XCQkweEVDCi0KLXN0YXRpYyBpbmxpbmUgdTMyIGdlb2RlX2dwaW8odW5zaWduZWQgaW50IG5yKQotewotCUJVR19PTihuciA+IDI4KTsKLQlyZXR1cm4gMSA8PCBucjsKLX0KLQotZXh0ZXJuIHZvaWQgZ2VvZGVfZ3Bpb19zZXQodTMyLCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZ2VvZGVfZ3Bpb19jbGVhcih1MzIsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IGdlb2RlX2dwaW9faXNzZXQodTMyLCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgZ2VvZGVfZ3Bpb19zZXR1cF9ldmVudCh1bnNpZ25lZCBpbnQsIGludCwgaW50KTsKLWV4dGVybiB2b2lkIGdlb2RlX2dwaW9fc2V0X2lycSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW9kZV9ncGlvX2V2ZW50X2lycSh1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHBhaXIpCi17Ci0JZ2VvZGVfZ3Bpb19zZXR1cF9ldmVudChncGlvLCBwYWlyLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdlb2RlX2dwaW9fZXZlbnRfcG1lKHVuc2lnbmVkIGludCBncGlvLCBpbnQgcGFpcikKLXsKLQlnZW9kZV9ncGlvX3NldHVwX2V2ZW50KGdwaW8sIHBhaXIsIDEpOwotfQotCi0vKiBTcGVjaWZpYyBnZW9kZSB0ZXN0cyAqLworI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgogCiBzdGF0aWMgaW5saW5lIGludCBpc19nZW9kZV9neCh2b2lkKQogewpAQCAtMTg2LDY4ICszMyw0IEBACiAJcmV0dXJuIChpc19nZW9kZV9neCgpIHx8IGlzX2dlb2RlX2x4KCkpOwogfQogCi0jaWZkZWYgQ09ORklHX01HRU9ERV9MWAotZXh0ZXJuIGludCBnZW9kZV9oYXNfdnNhMih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBnZW9kZV9oYXNfdnNhMih2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qIE1GR1BUcyAqLwotCi0jZGVmaW5lIE1GR1BUX01BWF9USU1FUlMJOAotI2RlZmluZSBNRkdQVF9USU1FUl9BTlkJCSgtMSkKLQotI2RlZmluZSBNRkdQVF9ET01BSU5fV09SS0lORwkxCi0jZGVmaW5lIE1GR1BUX0RPTUFJTl9TVEFOREJZCTIKLSNkZWZpbmUgTUZHUFRfRE9NQUlOX0FOWQkoTUZHUFRfRE9NQUlOX1dPUktJTkcgfCBNRkdQVF9ET01BSU5fU1RBTkRCWSkKLQotI2RlZmluZSBNRkdQVF9DTVAxCQkwCi0jZGVmaW5lIE1GR1BUX0NNUDIJCTEKLQotI2RlZmluZSBNRkdQVF9FVkVOVF9JUlEJCTAKLSNkZWZpbmUgTUZHUFRfRVZFTlRfTk1JCQkxCi0jZGVmaW5lIE1GR1BUX0VWRU5UX1JFU0VUCTMKLQotI2RlZmluZSBNRkdQVF9SRUdfQ01QMQkJMAotI2RlZmluZSBNRkdQVF9SRUdfQ01QMgkJMgotI2RlZmluZSBNRkdQVF9SRUdfQ09VTlRFUgk0Ci0jZGVmaW5lIE1GR1BUX1JFR19TRVRVUAkJNgotCi0jZGVmaW5lIE1GR1BUX1NFVFVQX0NOVEVOCSgxIDw8IDE1KQotI2RlZmluZSBNRkdQVF9TRVRVUF9DTVAyCSgxIDw8IDE0KQotI2RlZmluZSBNRkdQVF9TRVRVUF9DTVAxCSgxIDw8IDEzKQotI2RlZmluZSBNRkdQVF9TRVRVUF9TRVRVUAkoMSA8PCAxMikKLSNkZWZpbmUgTUZHUFRfU0VUVVBfU1RPUEVOCSgxIDw8IDExKQotI2RlZmluZSBNRkdQVF9TRVRVUF9FWFRFTgkoMSA8PCAxMCkKLSNkZWZpbmUgTUZHUFRfU0VUVVBfUkVWRU4JKDEgPDwgNSkKLSNkZWZpbmUgTUZHUFRfU0VUVVBfQ0xLU0VMCSgxIDw8IDQpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW9kZV9tZmdwdF93cml0ZShpbnQgdGltZXIsIHUxNiByZWcsIHUxNiB2YWx1ZSkKLXsKLQl1MzIgYmFzZSA9IGdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfTUZHUFQpOwotCW91dHcodmFsdWUsIGJhc2UgKyByZWcgKyAodGltZXIgKiA4KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGdlb2RlX21mZ3B0X3JlYWQoaW50IHRpbWVyLCB1MTYgcmVnKQotewotCXUzMiBiYXNlID0gZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9NRkdQVCk7Ci0JcmV0dXJuIGludyhiYXNlICsgcmVnICsgKHRpbWVyICogOCkpOwotfQotCi1leHRlcm4gaW50IGdlb2RlX21mZ3B0X3RvZ2dsZV9ldmVudChpbnQgdGltZXIsIGludCBjbXAsIGludCBldmVudCwgaW50IGVuYWJsZSk7Ci1leHRlcm4gaW50IGdlb2RlX21mZ3B0X3NldF9pcnEoaW50IHRpbWVyLCBpbnQgY21wLCBpbnQgKmlycSwgaW50IGVuYWJsZSk7Ci1leHRlcm4gaW50IGdlb2RlX21mZ3B0X2FsbG9jX3RpbWVyKGludCB0aW1lciwgaW50IGRvbWFpbik7Ci0KLSNkZWZpbmUgZ2VvZGVfbWZncHRfc2V0dXBfaXJxKHQsIGMsIGkpIGdlb2RlX21mZ3B0X3NldF9pcnEoKHQpLCAoYyksIChpKSwgMSkKLSNkZWZpbmUgZ2VvZGVfbWZncHRfcmVsZWFzZV9pcnEodCwgYywgaSkgZ2VvZGVfbWZncHRfc2V0X2lycSgodCksIChjKSwgKGkpLCAwKQotCi0jaWZkZWYgQ09ORklHX0dFT0RFX01GR1BUX1RJTUVSCi1leHRlcm4gaW50IF9faW5pdCBtZmdwdF90aW1lcl9zZXR1cCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtZmdwdF90aW1lcl9zZXR1cCh2b2lkKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fWDg2X0dFT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggMDhjNDhhOC4uZWVhYzgyOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTEwMyw3ICsxMDMsOCBAQAogZXh0ZXJuIHZvaWQgc2VuZF9jbGVhbnVwX3ZlY3RvcihzdHJ1Y3QgaXJxX2NmZyAqKTsKIAogc3RydWN0IGlycV9kZXNjOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzZXRfZGVzY19hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKiwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKik7CitleHRlcm4gdW5zaWduZWQgaW50IHNldF9kZXNjX2FmZmluaXR5KHN0cnVjdCBpcnFfZGVzYyAqLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGVzdF9pZCk7CiBleHRlcm4gaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBkZXZmbiwgaW50IHBpbiwgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmlycV9hdHRyKTsKIGV4dGVybiB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAppbmRleCA2YTYzNWJkLi40NjExZjA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKQEAgLTExMyw3ICsxMTMsNyBAQAogICovCiAjZGVmaW5lIExPQ0FMX1BFTkRJTkdfVkVDVE9SCQkweGVjCiAKLSNkZWZpbmUgVVZfQkFVX01FU1NBR0UJCQkweGVjCisjZGVmaW5lIFVWX0JBVV9NRVNTQUdFCQkJMHhlYQogCiAvKgogICogU2VsZiBJUEkgdmVjdG9yIGZvciBtYWNoaW5lIGNoZWNrcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCA0ZmZlMDliLi4xY2Q1OGNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBNU1JfRlNfQkFTRQkJMHhjMDAwMDEwMCAvKiA2NGJpdCBGUyBiYXNlICovCiAjZGVmaW5lIE1TUl9HU19CQVNFCQkweGMwMDAwMTAxIC8qIDY0Yml0IEdTIGJhc2UgKi8KICNkZWZpbmUgTVNSX0tFUk5FTF9HU19CQVNFCTB4YzAwMDAxMDIgLyogU3dhcEdTIEdTIHNoYWRvdyAqLworI2RlZmluZSBNU1JfVFNDX0FVWAkJMHhjMDAwMDEwMyAvKiBBdXhpbGlhcnkgVFNDICovCiAKIC8qIEVGRVIgYml0czogKi8KICNkZWZpbmUgX0VGRVJfU0NFCQkwICAvKiBTWVNDQUxML1NZU1JFVCAqLwpAQCAtMTIzLDYgKzEyNCw3IEBACiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFOR0VfU0hJRlQgMgogI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JBU0VfTUFTSwkweGZmZmZmZmYKICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CQVNFX1NISUZUCTIwCisjZGVmaW5lIE1TUl9GQU0xMEhfTk9ERV9JRAkJMHhjMDAxMTAwYwogCiAvKiBLOCBNU1JzICovCiAjZGVmaW5lIE1TUl9LOF9UT1BfTUVNMQkJCTB4YzAwMTAwMWEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKaW5kZXggNWJlZjkzMS4uYzViYzRjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKQEAgLTI3LDYgKzI3LDE4IEBACiAJfTsKIH07CiAKK3N0cnVjdCBtc3JfaW5mbyB7CisJdTMyIG1zcl9ubzsKKwlzdHJ1Y3QgbXNyIHJlZzsKKwlzdHJ1Y3QgbXNyICptc3JzOworCWludCBlcnI7Cit9OworCitzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyB7CisJdTMyICpyZWdzOworCWludCBlcnI7Cit9OworCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF90c2NwKHVuc2lnbmVkIGludCAqYXV4KQogewogCXVuc2lnbmVkIGxvbmcgbG93LCBoaWdoOwpAQCAtMjQwLDkgKzI1MiwxMiBAQAogI2RlZmluZSBjaGVja2luZ193cm1zcmwobXNyLCB2YWwpIHdybXNyX3NhZmUoKG1zciksICh1MzIpKHZhbCksCQlcCiAJCQkJCSAgICAgKHUzMikoKHZhbCkgPj4gMzIpKQogCi0jZGVmaW5lIHdyaXRlX3RzYyh2YWwxLCB2YWwyKSB3cm1zcigweDEwLCAodmFsMSksICh2YWwyKSkKKyNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsIHZhbDIpIHdybXNyKE1TUl9JQTMyX1RTQywgKHZhbDEpLCAodmFsMikpCiAKLSNkZWZpbmUgd3JpdGVfcmR0c2NwX2F1eCh2YWwpIHdybXNyKDB4YzAwMDAxMDMsICh2YWwpLCAwKQorI2RlZmluZSB3cml0ZV9yZHRzY3BfYXV4KHZhbCkgd3Jtc3IoTVNSX1RTQ19BVVgsICh2YWwpLCAwKQorCitzdHJ1Y3QgbXNyICptc3JzX2FsbG9jKHZvaWQpOwordm9pZCBtc3JzX2ZyZWUoc3RydWN0IG1zciAqbXNycyk7CiAKICNpZmRlZiBDT05GSUdfU01QCiBpbnQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaAppbmRleCA4MzRhMzAyLi4zYTU3Mzg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogLyogR1BJTyBhc3NpZ25tZW50cyAqLwogCi0jZGVmaW5lIE9MUENfR1BJT19NSUNfQUMJZ2VvZGVfZ3BpbygxKQorI2RlZmluZSBPTFBDX0dQSU9fTUlDX0FDCTEKICNkZWZpbmUgT0xQQ19HUElPX0RDT05fSVJRCWdlb2RlX2dwaW8oNykKICNkZWZpbmUgT0xQQ19HUElPX1RIUk1fQUxSTQlnZW9kZV9ncGlvKDEwKQogI2RlZmluZSBPTFBDX0dQSU9fU01CX0NMSwlnZW9kZV9ncGlvKDE0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggZWZiMzg5OS4uZGQ1OWE4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC03MzEsMzQgKzczMSwzNCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MpCiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfbG9ja2VkKHN0cnVjdCBhcmNoX3NwaW5sb2NrICpsb2NrKQogewogCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfbG9ja19vcHMuc3Bpbl9pc19sb2NrZWQsIGxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2NvbnRlbmRlZChzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jaykKIHsKIAlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X2xvY2tfb3BzLnNwaW5faXNfY29udGVuZGVkLCBsb2NrKTsKIH0KLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQJX19yYXdfc3Bpbl9pc19jb250ZW5kZWQKKyNkZWZpbmUgYXJjaF9zcGluX2lzX2NvbnRlbmRlZAlhcmNoX3NwaW5faXNfY29udGVuZGVkCiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3NwaW5fbG9jayhzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jaykKIHsKIAlQVk9QX1ZDQUxMMShwdl9sb2NrX29wcy5zcGluX2xvY2ssIGxvY2spOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2ssCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2tfZmxhZ3Moc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2ssCiAJCQkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJUFZPUF9WQ0FMTDIocHZfbG9ja19vcHMuc3Bpbl9sb2NrX2ZsYWdzLCBsb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2soc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2spCiB7CiAJcmV0dXJuIFBWT1BfQ0FMTDEoaW50LCBwdl9sb2NrX29wcy5zcGluX3RyeWxvY2ssIGxvY2spOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKHN0cnVjdCBhcmNoX3NwaW5sb2NrICpsb2NrKQogewogCVBWT1BfVkNBTEwxKHB2X2xvY2tfb3BzLnNwaW5fdW5sb2NrLCBsb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCmluZGV4IDkzNTc0NzMuLmIxZTcwZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaApAQCAtMzE4LDE0ICszMTgsMTQgQEAKIAkJCSAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IGZsYWdzKTsKIH07CiAKLXN0cnVjdCByYXdfc3BpbmxvY2s7CitzdHJ1Y3QgYXJjaF9zcGlubG9jazsKIHN0cnVjdCBwdl9sb2NrX29wcyB7Ci0JaW50ICgqc3Bpbl9pc19sb2NrZWQpKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotCWludCAoKnNwaW5faXNfY29udGVuZGVkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLQl2b2lkICgqc3Bpbl9sb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLQl2b2lkICgqc3Bpbl9sb2NrX2ZsYWdzKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQlpbnQgKCpzcGluX3RyeWxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotCXZvaWQgKCpzcGluX3VubG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7CisJaW50ICgqc3Bpbl9pc19sb2NrZWQpKHN0cnVjdCBhcmNoX3NwaW5sb2NrICpsb2NrKTsKKwlpbnQgKCpzcGluX2lzX2NvbnRlbmRlZCkoc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2spOworCXZvaWQgKCpzcGluX2xvY2spKHN0cnVjdCBhcmNoX3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl9sb2NrX2ZsYWdzKShzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJaW50ICgqc3Bpbl90cnlsb2NrKShzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jayk7CisJdm9pZCAoKnNwaW5fdW5sb2NrKShzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jayk7CiB9OwogCiAvKiBUaGlzIGNvbnRhaW5zIGFsbCB0aGUgcGFyYXZpcnQgc3RydWN0dXJlczogd2UgZ2V0IGEgY29udmVuaWVudApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCBiNjVhMzZkLi4wYzQ0MTk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNzQsMzEgKzc0LDMxIEBACiAKICNkZWZpbmUgcGVyY3B1X3RvX29wKG9wLCB2YXIsIHZhbCkJCQlcCiBkbyB7CQkJCQkJCVwKLQl0eXBlZGVmIHR5cGVvZih2YXIpIFRfXzsJCQlcCisJdHlwZWRlZiB0eXBlb2YodmFyKSBwdG9fVF9fOwkJCVwKIAlpZiAoMCkgewkJCQkJXAotCQlUX18gdG1wX187CQkJCVwKLQkJdG1wX18gPSAodmFsKTsJCQkJXAorCQlwdG9fVF9fIHB0b190bXBfXzsJCQlcCisJCXB0b190bXBfXyA9ICh2YWwpOwkJCVwKIAl9CQkJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAogCWNhc2UgMToJCQkJCQlcCiAJCWFzbShvcCAiYiAlMSwiX19wZXJjcHVfYXJnKDApCQlcCiAJCSAgICA6ICIrbSIgKHZhcikJCQlcCi0JCSAgICA6ICJxaSIgKChUX18pKHZhbCkpKTsJCVwKKwkJICAgIDogInFpIiAoKHB0b19UX18pKHZhbCkpKTsJCVwKIAkJYnJlYWs7CQkJCQlcCiAJY2FzZSAyOgkJCQkJCVwKIAkJYXNtKG9wICJ3ICUxLCJfX3BlcmNwdV9hcmcoMCkJCVwKIAkJICAgIDogIittIiAodmFyKQkJCVwKLQkJICAgIDogInJpIiAoKFRfXykodmFsKSkpOwkJXAorCQkgICAgOiAicmkiICgocHRvX1RfXykodmFsKSkpOwkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDQ6CQkJCQkJXAogCQlhc20ob3AgImwgJTEsIl9fcGVyY3B1X2FyZygwKQkJXAogCQkgICAgOiAiK20iICh2YXIpCQkJXAotCQkgICAgOiAicmkiICgoVF9fKSh2YWwpKSk7CQlcCisJCSAgICA6ICJyaSIgKChwdG9fVF9fKSh2YWwpKSk7CQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgODoJCQkJCQlcCiAJCWFzbShvcCAicSAlMSwiX19wZXJjcHVfYXJnKDApCQlcCiAJCSAgICA6ICIrbSIgKHZhcikJCQlcCi0JCSAgICA6ICJyZSIgKChUX18pKHZhbCkpKTsJCVwKKwkJICAgIDogInJlIiAoKHB0b19UX18pKHZhbCkpKTsJCVwKIAkJYnJlYWs7CQkJCQlcCiAJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCiAJfQkJCQkJCVwKQEAgLTEwNiwzMSArMTA2LDMxIEBACiAKICNkZWZpbmUgcGVyY3B1X2Zyb21fb3Aob3AsIHZhciwgY29uc3RyYWludCkJCVwKICh7CQkJCQkJCVwKLQl0eXBlb2YodmFyKSByZXRfXzsJCQkJXAorCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAogCWNhc2UgMToJCQkJCQlcCiAJCWFzbShvcCAiYiAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKLQkJICAgIDogIj1xIiAocmV0X18pCQkJXAorCQkgICAgOiAiPXEiIChwZm9fcmV0X18pCQkJXAogCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgMjoJCQkJCQlcCiAJCWFzbShvcCAidyAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKLQkJICAgIDogIj1yIiAocmV0X18pCQkJXAorCQkgICAgOiAiPXIiIChwZm9fcmV0X18pCQkJXAogCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCiAJCWFzbShvcCAibCAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKLQkJICAgIDogIj1yIiAocmV0X18pCQkJXAorCQkgICAgOiAiPXIiIChwZm9fcmV0X18pCQkJXAogCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgODoJCQkJCQlcCiAJCWFzbShvcCAicSAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKLQkJICAgIDogIj1yIiAocmV0X18pCQkJXAorCQkgICAgOiAiPXIiIChwZm9fcmV0X18pCQkJXAogCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAogCX0JCQkJCQlcCi0JcmV0X187CQkJCQkJXAorCXBmb19yZXRfXzsJCQkJCVwKIH0pCiAKIC8qCkBAIC0xNTMsNiArMTUzLDg0IEBACiAjZGVmaW5lIHBlcmNwdV9vcih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCiAjZGVmaW5lIHBlcmNwdV94b3IodmFyLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKIAorI2RlZmluZSBfX3RoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSBfX3RoaXNfY3B1X3JlYWRfMihwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSBfX3RoaXNfY3B1X3JlYWRfNChwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorCisjZGVmaW5lIF9fdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2FkZF80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9hbmRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2FuZF80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfb3JfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfb3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfb3JfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfeG9yXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV94b3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X3hvcl80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCisKKyNkZWZpbmUgdGhpc19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSB0aGlzX2NwdV9yZWFkXzQocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV93cml0ZV8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfb3JfMShwY3AsIHZhbCkJCXBlcmNwdV90b19vcCgib3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X29yXzQocGNwLCB2YWwpCQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeG9yXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeG9yXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeG9yXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKworI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hbmRfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hbmRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hbmRfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9vcl8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfb3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X29yXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgib3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorCisvKgorICogUGVyIGNwdSBhdG9taWMgNjQgYml0IG9wZXJhdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIHVuZGVyIDY0IGJpdC4KKyAqIDMyIGJpdCBtdXN0IGZhbGwgYmFjayB0byBnZW5lcmljIG9wZXJhdGlvbnMuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIF9fdGhpc19jcHVfcmVhZF84KHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCisjZGVmaW5lIF9fdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2FkZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYW5kXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9vcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV94b3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQorI2RlZmluZSB0aGlzX2NwdV93cml0ZV84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X29yXzgocGNwLCB2YWwpCQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeG9yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKworI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9hbmRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9vcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm9yIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfeG9yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKworI2VuZGlmCisKIC8qIFRoaXMgaXMgbm90IGF0b21pYyBhZ2FpbnN0IG90aGVyIENQVXMgLS0gQ1BVIHByZWVtcHRpb24gbmVlZHMgdG8gYmUgb2ZmICovCiAjZGVmaW5lIHg4Nl90ZXN0X2FuZF9jbGVhcl9iaXRfcGVyY3B1KGJpdCwgdmFyKQkJCQlcCiAoewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggNmY4ZWMxYy4uZmM4MDFiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE4MSw3ICsxODEsNyBAQAogCQkJCXVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKIHsKIAkvKiBlY3ggaXMgb2Z0ZW4gYW4gaW5wdXQgYXMgd2VsbCBhcyBhbiBvdXRwdXQuICovCi0JYXNtKCJjcHVpZCIKKwlhc20gdm9sYXRpbGUoImNwdWlkIgogCSAgICA6ICI9YSIgKCplYXgpLAogCSAgICAgICI9YiIgKCplYngpLAogCSAgICAgICI9YyIgKCplY3gpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAzZDExZmQwLi45ZDM2OWY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMjkyLDYgKzI5Miw4IEBACiAjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKQkoYm9vdF9jcHVfZGF0YS54ODYgPj0gNikKICNlbmRpZgogCisjZGVmaW5lIEFSQ0hfSEFTX1VTRVJfU0lOR0xFX1NURVBfSU5GTworCiBzdHJ1Y3QgdXNlcl9kZXNjOwogZXh0ZXJuIGludCBkb19nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgaWR4LAogCQkJICAgICAgc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggNGU3Nzg1My4uMzA4OWY3MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC01OCw3ICs1OCw3IEBACiAjaWYgKE5SX0NQVVMgPCAyNTYpCiAjZGVmaW5lIFRJQ0tFVF9TSElGVCA4CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzaG9ydCBpbmMgPSAweDAxMDA7CiAKQEAgLTc3LDcgKzc3LDcgQEAKIAkJOiAibWVtb3J5IiwgImNjIik7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCwgbmV3OwogCkBAIC05Niw3ICs5Niw3IEBACiAJcmV0dXJuIHRtcDsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlhc20gdm9sYXRpbGUoVU5MT0NLX0xPQ0tfUFJFRklYICJpbmNiICUwIgogCQkgICAgIDogIittIiAobG9jay0+c2xvY2spCkBAIC0xMDYsNyArMTA2LDcgQEAKICNlbHNlCiAjZGVmaW5lIFRJQ0tFVF9TSElGVCAxNgogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fbG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IGluYyA9IDB4MDAwMTAwMDA7CiAJaW50IHRtcDsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3RpY2tldF9zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3RpY2tldF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXA7CiAJaW50IG5ldzsKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiB0bXA7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJYXNtIHZvbGF0aWxlKFVOTE9DS19MT0NLX1BSRUZJWCAiaW5jdyAlMCIKIAkJICAgICA6ICIrbSIgKGxvY2stPnNsb2NrKQpAQCAtMTU4LDE0ICsxNTgsMTQgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+c2xvY2spOwogCiAJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgKCgxIDw8IFRJQ0tFVF9TSElGVCkgLSAxKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5zbG9jayk7CiAKQEAgLTE3NCw0MyArMTc0LDQzIEBACiAKICNpZm5kZWYgQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUwogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19sb2NrZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfY29udGVuZGVkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlyZXR1cm4gX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQobG9jayk7CiB9Ci0jZGVmaW5lIF9fcmF3X3NwaW5faXNfY29udGVuZGVkCV9fcmF3X3NwaW5faXNfY29udGVuZGVkCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19jb250ZW5kZWQJYXJjaF9zcGluX2lzX2NvbnRlbmRlZAogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX3RpY2tldF9zcGluX2xvY2sobG9jayk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFyY2hfc3Bpbl90cnlsb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlyZXR1cm4gX190aWNrZXRfc3Bpbl90cnlsb2NrKGxvY2spOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJX190aWNrZXRfc3Bpbl91bmxvY2sobG9jayk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2tfZmxhZ3MocmF3X3NwaW5sb2NrX3QgKmxvY2ssCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2tfZmxhZ3MoYXJjaF9zcGlubG9ja190ICpsb2NrLAogCQkJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCV9fcmF3X3NwaW5fbG9jayhsb2NrKTsKKwlhcmNoX3NwaW5fbG9jayhsb2NrKTsKIH0KIAogI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpCisJd2hpbGUgKGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykpCiAJCWNwdV9yZWxheCgpOwogfQogCkBAIC0yMzIsNyArMjMyLDcgQEAKICAqIHJlYWRfY2FuX2xvY2sgLSB3b3VsZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPwogICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfY2FuX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9yZWFkX2Nhbl9sb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJcmV0dXJuIChpbnQpKGxvY2spLT5sb2NrID4gMDsKIH0KQEAgLTI0MSwxMiArMjQxLDEyIEBACiAgKiB3cml0ZV9jYW5fbG9jayAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPwogICogQGxvY2s6IHRoZSByd2xvY2sgaW4gcXVlc3Rpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfd3JpdGVfY2FuX2xvY2soYXJjaF9yd2xvY2tfdCAqbG9jaykKIHsKIAlyZXR1cm4gKGxvY2spLT5sb2NrID09IFJXX0xPQ0tfQklBUzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVhZF9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiIHN1YmwgJDEsKCUwKVxuXHQiCiAJCSAgICAgImpucyAxZlxuIgpAQCAtMjU1LDcgKzI1NSw3IEBACiAJCSAgICAgOjpMT0NLX1BUUl9SRUcgKHJ3KSA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX2xvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgc3VibCAlMSwoJTApXG5cdCIKIAkJICAgICAianogMWZcbiIKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQkgICAgIDo6TE9DS19QVFJfUkVHIChydyksICJpIiAoUldfTE9DS19CSUFTKSA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKIApAQCAtMjc0LDcgKzI3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF93cml0ZV90cnlsb2NrKGFyY2hfcndsb2NrX3QgKmxvY2spCiB7CiAJYXRvbWljX3QgKmNvdW50ID0gKGF0b21pY190ICopbG9jazsKIApAQCAtMjg0LDIzICsyODQsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiIDoiK20iIChydy0+bG9jaykgOiA6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfdW5sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwgJTAiCiAJCSAgICAgOiAiK20iIChydy0+bG9jaykgOiAiaSIgKFJXX0xPQ0tfQklBUykgOiAibWVtb3J5Iik7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKLSNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3dyaXRlX2xvY2sobG9jaykKIAotI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKLSNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCi0jZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgYXJjaF9zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIGFyY2hfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBhcmNoX3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAKIC8qIFRoZSB7cmVhZHx3cml0ZXxzcGlufV9sb2NrKCkgb24geDg2IGFyZSBmdWxsIG1lbW9yeSBiYXJyaWVycy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfbWJfX2FmdGVyX2xvY2sodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCA4NDVmODFjLi5kY2I0OGIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTUsMTYgKzUsMTYgQEAKICMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCByYXdfc3BpbmxvY2sgewordHlwZWRlZiBzdHJ1Y3QgYXJjaF9zcGlubG9jayB7CiAJdW5zaWduZWQgaW50IHNsb2NrOwotfSByYXdfc3BpbmxvY2tfdDsKK30gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgMCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbG9jazsKLX0gcmF3X3J3bG9ja190OworfSBhcmNoX3J3bG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQJCXsgUldfTE9DS19CSUFTIH0KKyNkZWZpbmUgX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQJCXsgUldfTE9DS19CSUFTIH0KIAogI2VuZGlmIC8qIF9BU01fWDg2X1NQSU5MT0NLX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAppbmRleCBjZjg2YTVlLi4zNWU4OTEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCkBAIC01LDYgKzUsMjkgQEAKIAogaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpOwogCitzdHJ1Y3QgdGhyZWFkX2luZm87CitzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHM7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoKndhbGtfc3RhY2tfdCkoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLAorCQkJCSAgICAgIHZvaWQgKmRhdGEsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLAorCQkJCSAgICAgIGludCAqZ3JhcGgpOworCitleHRlcm4gdW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCSAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nCitwcmludF9jb250ZXh0X3N0YWNrX2JwKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kLCBpbnQgKmdyYXBoKTsKKwogLyogR2VuZXJpYyBzdGFjayB0cmFjZXIgd2l0aCBjYWxsYmFja3MgKi8KIAogc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHsKQEAgLTE0LDYgKzM3LDcgQEAKIAl2b2lkICgqYWRkcmVzcykodm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpOwogCS8qIE9uIG5lZ2F0aXZlIHJldHVybiBzdG9wIGR1bXBpbmcgKi8KIAlpbnQgKCpzdGFjaykodm9pZCAqZGF0YSwgY2hhciAqbmFtZSk7CisJd2Fsa19zdGFja190CXdhbGtfc3RhY2s7CiB9OwogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3dpb3RsYi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3dpb3RsYi5oCmluZGV4IDg3ZmZjYjEuLjgwODUyNzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aW90bGIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKQEAgLTUsMTMgKzUsMTcgQEAKIAogI2lmZGVmIENPTkZJR19TV0lPVExCCiBleHRlcm4gaW50IHN3aW90bGI7Ci1leHRlcm4gaW50IHBjaV9zd2lvdGxiX2luaXQodm9pZCk7CitleHRlcm4gaW50IF9faW5pdCBwY2lfc3dpb3RsYl9kZXRlY3Qodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN3aW90bGIgMAotc3RhdGljIGlubGluZSBpbnQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgcGNpX3N3aW90bGJfZGV0ZWN0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWFya19jbGVhbih2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkge30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCmluZGV4IDRhNWEwODllLi5kNWY2OTA0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmgKQEAgLTMwLDcgKzMwLDYgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9tbWFwKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICopOwogYXNtbGlua2FnZSBsb25nIHN5czMyX21wcm90ZWN0KHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9waXBlKGludCBfX3VzZXIgKik7CiBzdHJ1Y3Qgc2lnYWN0aW9uMzI7CiBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyOwogYXNtbGlua2FnZSBsb25nIHN5czMyX3J0X3NpZ2FjdGlvbihpbnQsIHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCmluZGV4IDFiYjZlMzkuLjg4NjhiOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApAQCAtMTgsMTYgKzE4LDI0IEBACiAvKiBDb21tb24gaW4gWDg2XzMyIGFuZCBYODZfNjQgKi8KIC8qIGtlcm5lbC9pb3BvcnQuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5c19pb3Blcm0odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KTsKK2xvbmcgc3lzX2lvcGwodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL3Byb2Nlc3MuYyAqLwogaW50IHN5c19mb3JrKHN0cnVjdCBwdF9yZWdzICopOwogaW50IHN5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyAqKTsKK2xvbmcgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLAorCQljaGFyIF9fdXNlciAqIF9fdXNlciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2xvbmcgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgX191c2VyICosCisJICAgICAgIHZvaWQgX191c2VyICosIHN0cnVjdCBwdF9yZWdzICopOwogCiAvKiBrZXJuZWwvbGR0LmMgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19tb2RpZnlfbGR0KGludCwgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIGtlcm5lbC9zaWduYWwuYyAqLwogbG9uZyBzeXNfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICopOworbG9uZyBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKiwgc3RhY2tfdCBfX3VzZXIgKiwKKwkJICAgICBzdHJ1Y3QgcHRfcmVncyAqKTsKKwogCiAvKiBrZXJuZWwvdGxzLmMgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKik7CkBAIC0zNSwxOCArNDMsMTEgQEAKIAogLyogWDg2XzMyIG9ubHkgKi8KICNpZmRlZiBDT05GSUdfWDg2XzMyCi0vKiBrZXJuZWwvaW9wb3J0LmMgKi8KLWxvbmcgc3lzX2lvcGwoc3RydWN0IHB0X3JlZ3MgKik7Ci0KLS8qIGtlcm5lbC9wcm9jZXNzXzMyLmMgKi8KLWludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MgKik7Ci1pbnQgc3lzX2V4ZWN2ZShzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL3NpZ25hbC5jICovCiBhc21saW5rYWdlIGludCBzeXNfc2lnc3VzcGVuZChpbnQsIGludCwgb2xkX3NpZ3NldF90KTsKIGFzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50LCBjb25zdCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKiwKIAkJCSAgICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICopOwotaW50IHN5c19zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqKTsKIHVuc2lnbmVkIGxvbmcgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqKTsKIAogLyoga2VybmVsL3N5c19pMzg2XzMyLmMgKi8KQEAgLTYyLDI4ICs2MywxNSBAQAogYXNtbGlua2FnZSBpbnQgc3lzX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiAKIC8qIGtlcm5lbC92bTg2XzMyLmMgKi8KLWludCBzeXNfdm04Nm9sZChzdHJ1Y3QgcHRfcmVncyAqKTsKLWludCBzeXNfdm04NihzdHJ1Y3QgcHRfcmVncyAqKTsKK2ludCBzeXNfdm04Nm9sZChzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICosIHN0cnVjdCBwdF9yZWdzICopOworaW50IHN5c192bTg2KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBwdF9yZWdzICopOwogCiAjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCiAKIC8qIFg4Nl82NCBvbmx5ICovCi0vKiBrZXJuZWwvaW9wb3J0LmMgKi8KLWFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICopOwotCiAvKiBrZXJuZWwvcHJvY2Vzc182NC5jICovCi1hc21saW5rYWdlIGxvbmcgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCi0JCQkgIHZvaWQgX191c2VyICosIHZvaWQgX191c2VyICosCi0JCQkgIHN0cnVjdCBwdF9yZWdzICopOwotYXNtbGlua2FnZSBsb25nIHN5c19leGVjdmUoY2hhciBfX3VzZXIgKiwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKiwKLQkJCSAgIGNoYXIgX191c2VyICogX191c2VyICosCi0JCQkgICBzdHJ1Y3QgcHRfcmVncyAqKTsKIGxvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKIAotLyoga2VybmVsL3NpZ25hbC5jICovCi1hc21saW5rYWdlIGxvbmcgc3lzX3NpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QgX191c2VyICosIHN0YWNrX3QgX191c2VyICosCi0JCQkJc3RydWN0IHB0X3JlZ3MgKik7Ci0KIC8qIGtlcm5lbC9zeXNfeDg2XzY0LmMgKi8KIHN0cnVjdCBuZXdfdXRzbmFtZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwMjJhODQzLi5lY2I1NDRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMjMsNiArMjMsNyBAQAogc3RydWN0IHRzc19zdHJ1Y3Q7CiB2b2lkIF9fc3dpdGNoX3RvX3h0cmEoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2X3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF9wLAogCQkgICAgICBzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzKTsKK2V4dGVybiB2b2lkIHNob3dfcmVnc19jb21tb24odm9pZCk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDQwZTM3YjEwLi5jNTA4N2Q3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTM1LDExICszNSwxNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLS8qIE5vZGUgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgTlVNQV9OT19OT0RFCSgtMSkKKy8qCisgKiB0byBwcmVzZXJ2ZSB0aGUgdmlzaWJpbGl0eSBvZiBOVU1BX05PX05PREUgZGVmaW5pdGlvbiwKKyAqIG1vdmVkIHRvIHRoZXJlIGZyb20gaGVyZS4gIE1heSBiZSB1c2VkIGluZGVwZW5kZW50IG9mCisgKiBDT05GSUdfTlVNQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KIAogI2lmZGVmIENPTkZJR19OVU1BCiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhbXBvbGluZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhbXBvbGluZS5oCmluZGV4IDkwZjA2YzIuLmNiNTA3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYW1wb2xpbmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFtcG9saW5lLmgKQEAgLTE2LDcgKzE2LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRpYWxfZ3M7CiAKICNkZWZpbmUgVFJBTVBPTElORV9TSVpFIHJvdW5kdXAodHJhbXBvbGluZV9lbmQgLSB0cmFtcG9saW5lX2RhdGEsIFBBR0VfU0laRSkKLSNkZWZpbmUgVFJBTVBPTElORV9CQVNFIDB4NjAwMAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzZXR1cF90cmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmgKaW5kZXggN2VkMTdmZi4uMjc1MWYzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaApAQCAtNzYsMTUgKzc2LDYgQEAKIAl9OwogfTsKIAotdW5pb24gdXZfd2F0Y2hsaXN0X3UgewotCXU2NAl2YWw7Ci0Jc3RydWN0IHsKLQkJdTY0CWJsYWRlCTogMTYsCi0JCQlzaXplCTogMzIsCi0JCQlmaWxsZXIJOiAxNjsKLQl9OwotfTsKLQogZW51bSB1dl9tZW1wcm90ZWN0IHsKIAlVVl9NRU1QUk9UX1JFU1RSSUNUX0FDQ0VTUywKIAlVVl9NRU1QUk9UX0FMTE9XX0FNTywKQEAgLTEwMCw3ICs5MSw3IEBACiAKIGV4dGVybiBzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQsIGludCAqLCBsb25nICosIGxvbmcgKiwgbG9uZyAqKTsKIGV4dGVybiBzNjQgdXZfYmlvc19mcmVxX2Jhc2UodTY0LCB1NjQgKik7Ci1leHRlcm4gaW50IHV2X2Jpb3NfbXFfd2F0Y2hsaXN0X2FsbG9jKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LAorZXh0ZXJuIGludCB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gaW50IHV2X2Jpb3NfbXFfd2F0Y2hsaXN0X2ZyZWUoaW50LCBpbnQpOwogZXh0ZXJuIHM2NCB1dl9iaW9zX2NoYW5nZV9tZW1wcm90ZWN0KHU2NCwgdTY0LCBlbnVtIHV2X21lbXByb3RlY3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCBkMTQxNGFmLi44MTFiZmFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTcyLDYgKzE3Miw4IEBACiAjZGVmaW5lIFVWX0xPQ0FMX01NUl9TSVpFCQkoNjRVTCAqIDEwMjQgKiAxMDI0KQogI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfU0laRQkJKDY0VUwgKiAxMDI0ICogMTAyNCkKIAorI2RlZmluZSBVVl9HTE9CQUxfR1JVX01NUl9CQVNFCQkweDQwMDAwMDAKKwogI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfUE5PREVfU0hJRlQJMTUKICNkZWZpbmUgVVZfR0xPQkFMX01NUjY0X1BOT0RFX1NISUZUCTI2CiAKQEAgLTIzMiw2ICsyMzQsMjYgQEAKIAlyZXR1cm4gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShfX3BhKHYpKTsKIH0KIAorLyogVG9wIHR3byBiaXRzIGluZGljYXRlIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyBpcyBpbiBNTVIgc3BhY2UuICAqLworc3RhdGljIGlubGluZSBpbnQKK3V2X2dwYV9pbl9tbXJfc3BhY2UodW5zaWduZWQgbG9uZyBncGEpCit7CisJcmV0dXJuIChncGEgPj4gNjIpID09IDB4M1VMOworfQorCisvKiBVViBnbG9iYWwgcGh5c2ljYWwgYWRkcmVzcyAtLT4gc29ja2V0IHBoeXMgUkFNICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ3BhX3RvX3NvY19waHlzX3JhbSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZGRyID0gZ3BhICYgdXZfaHViX2luZm8tPmdwYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmVtYXBfYmFzZSA9IHV2X2h1Yl9pbmZvLT5sb3dtZW1fcmVtYXBfYmFzZTsKKwl1bnNpZ25lZCBsb25nIHJlbWFwX3RvcCA9ICB1dl9odWJfaW5mby0+bG93bWVtX3JlbWFwX3RvcDsKKworCWlmIChwYWRkciA+PSByZW1hcF9iYXNlICYmIHBhZGRyIDwgcmVtYXBfYmFzZSArIHJlbWFwX3RvcCkKKwkJcGFkZHIgLT0gcmVtYXBfYmFzZTsKKwlyZXR1cm4gcGFkZHI7Cit9CisKKwogLyogZ25vZGUgLT4gcG5vZGUgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9ncGFfdG9fZ25vZGUodW5zaWduZWQgbG9uZyBncGEpCiB7CkBAIC0zMDgsNiArMzMwLDE1IEBACiB9CiAKIC8qCisgKiBHbG9iYWwgTU1SIHNwYWNlIGFkZHJlc3NlcyB3aGVuIHJlZmVyZW5jZWQgYnkgdGhlIEdSVS4gKEdSVSBkb2VzCisgKiBOT1QgdXNlIHNvY2tldCBhZGRyZXNzaW5nKS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X2dsb2JhbF9ncnVfbW1yX2FkZHJlc3MoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gVVZfR0xPQkFMX0dSVV9NTVJfQkFTRSB8IG9mZnNldCB8IChwbm9kZSA8PCB1dl9odWJfaW5mby0+bV92YWwpOworfQorCisvKgogICogQWNjZXNzIGh1YiBsb2NhbCBNTVJzLiBGYXN0ZXIgdGhhbiB1c2luZyBnbG9iYWwgc3BhY2UgYnV0IG9ubHkgbG9jYWwgTU1ScwogICogYXJlIGFjY2Vzc2libGUuCiAgKi8KQEAgLTQzNCw2ICs0NjUsMTQgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHV2X2h1Yl9pcGlfdmFsdWUoaW50IGFwaWNpZCwgaW50IHZlY3RvciwgaW50IG1vZGUpCit7CisJcmV0dXJuICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CisJCQkoKGFwaWNpZCkgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJCQkobW9kZSA8PCBVVkhfSVBJX0lOVF9ERUxJVkVSWV9NT0RFX1NIRlQpIHwKKwkJCSh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfaHViX3NlbmRfaXBpKGludCBwbm9kZSwgaW50IGFwaWNpZCwgaW50IHZlY3RvcikKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTQ0MiwxMCArNDgxLDcgQEAKIAlpZiAodmVjdG9yID09IE5NSV9WRUNUT1IpCiAJCWRtb2RlID0gZGVzdF9OTUk7CiAKLQl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAotCQkJKChhcGljaWQpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAotCQkJKGRtb2RlIDw8IFVWSF9JUElfSU5UX0RFTElWRVJZX01PREVfU0hGVCkgfAotCQkJKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CisJdmFsID0gdXZfaHViX2lwaV92YWx1ZShhcGljaWQsIHZlY3RvciwgZG1vZGUpOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA0ZjJlNjZlLi5kODdmMDliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC04OSw3ICs4OSw2IEBACiBvYmotJChDT05GSUdfSFBFVF9USU1FUikgCSs9IGhwZXQubwogCiBvYmotJChDT05GSUdfSzhfTkIpCQkrPSBrOC5vCi1vYmotJChDT05GSUdfTUdFT0RFX0xYKQkJKz0gZ2VvZGVfMzIubyBtZmdwdF8zMi5vCiBvYmotJChDT05GSUdfREVCVUdfUk9EQVRBX1RFU1QpCSs9IHRlc3Rfcm9kYXRhLm8KIG9iai0kKENPTkZJR19ERUJVR19OWF9URVNUKQkrPSB0ZXN0X254Lm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwppbmRleCA1OWNkZmE0Li4yZTgzN2Y1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwpAQCAtNDgsNyArNDgsNyBAQAogCSAqIFA0LCBDb3JlIGFuZCBiZXlvbmQgQ1BVcwogCSAqLwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgKGMtPng4NiA+IDB4ZiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE0KSkpCisJICAgIChjLT54ODYgPiAweGYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAweDBmKSkpCiAJCQlmbGFncy0+Ym1fY29udHJvbCA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXRfYm1fY2hlY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IDFjMGZiNGQuLjIzODI0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC0xNjYsNiArMTY2LDQzIEBACiB7CiAJa2ZyZWUoZGV2LT5hcmNoZGF0YS5pb21tdSk7CiB9CisKK3ZvaWQgX19pbml0IGFtZF9pb21tdV91bmluaXRfZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKworCWZvcl9lYWNoX3BjaV9kZXYocGRldikgeworCisJCWlmICghY2hlY2tfZGV2aWNlKCZwZGV2LT5kZXYpKQorCQkJY29udGludWU7CisKKwkJaW9tbXVfdW5pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKKwl9Cit9CisKK2ludCBfX2luaXQgYW1kX2lvbW11X2luaXRfZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWZvcl9lYWNoX3BjaV9kZXYocGRldikgeworCisJCWlmICghY2hlY2tfZGV2aWNlKCZwZGV2LT5kZXYpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gaW9tbXVfaW5pdF9kZXZpY2UoJnBkZXYtPmRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldHVybiAwOworCitvdXRfZnJlZToKKworCWFtZF9pb21tdV91bmluaXRfZGV2aWNlcygpOworCisJcmV0dXJuIHJldDsKK30KICNpZmRlZiBDT05GSUdfQU1EX0lPTU1VX1NUQVRTCiAKIC8qCkBAIC0xMTI1LDcgKzExNjIsNyBAQAogCiAJYWRkcmVzcyA9IChhZGRyZXNzICUgQVBFUlRVUkVfUkFOR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKIAotCWlvbW11X2FyZWFfZnJlZShyYW5nZS0+Yml0bWFwLCBhZGRyZXNzLCBwYWdlcyk7CisJYml0bWFwX2NsZWFyKHJhbmdlLT5iaXRtYXAsIGFkZHJlc3MsIHBhZ2VzKTsKIAogfQogCkBAIC0xNTg3LDYgKzE2MjQsMTEgQEAKIAkubm90aWZpZXJfY2FsbCA9IGRldmljZV9jaGFuZ2Vfbm90aWZpZXIsCiB9OwogCit2b2lkIGFtZF9pb21tdV9pbml0X25vdGlmaWVyKHZvaWQpCit7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwY2lfYnVzX3R5cGUsICZkZXZpY2VfbmIpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBUaGUgbmV4dCBmdW5jdGlvbnMgYmVsb25nIHRvIHRoZSBkbWFfb3BzIG1hcHBpbmcvdW5tYXBwaW5nIGNvZGUuCkBAIC0yMTQ1LDggKzIxODcsNiBAQAogCQlpZiAoIWNoZWNrX2RldmljZSgmZGV2LT5kZXYpKQogCQkJY29udGludWU7CiAKLQkJaW9tbXVfaW5pdF9kZXZpY2UoJmRldi0+ZGV2KTsKLQogCQkvKiBJcyB0aGVyZSBhbHJlYWR5IGFueSBkb21haW4gZm9yIGl0PyAqLwogCQlpZiAoZG9tYWluX2Zvcl9kZXZpY2UoJmRldi0+ZGV2KSkKIAkJCWNvbnRpbnVlOwpAQCAtMjIxNSw4ICsyMjU1LDYgQEAKIAogCXJlZ2lzdGVyX2lvbW11KCZhbWRfaW9tbXVfb3BzKTsKIAotCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGNpX2J1c190eXBlLCAmZGV2aWNlX25iKTsKLQogCWFtZF9pb21tdV9zdGF0c19pbml0KCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKaW5kZXggOWM0YTZmNy4uMWRjYTljMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKQEAgLTEyNzQsNiArMTI3NCwxMCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZnJlZTsKIAorCXJldCA9IGFtZF9pb21tdV9pbml0X2RldmljZXMoKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKIAlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQogCQlyZXQgPSBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCgpOwogCWVsc2UKQEAgLTEyODEsNiArMTI4NSw4IEBACiAJaWYgKHJldCkKIAkJZ290byBmcmVlOwogCisJYW1kX2lvbW11X2luaXRfbm90aWZpZXIoKTsKKwogCWVuYWJsZV9pb21tdXMoKTsKIAogCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCkBAIC0xMjk2LDYgKzEzMDIsOSBAQAogCXJldHVybiByZXQ7CiAKIGZyZWU6CisKKwlhbWRfaW9tbXVfdW5pbml0X2RldmljZXMoKTsKKwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcCwKIAkJICAgZ2V0X29yZGVyKE1BWF9ET01BSU5fSUQvOCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCmluZGV4IGUwZGZiNjguLjM3MDQ5OTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCkBAIC0yODAsNyArMjgwLDggQEAKIAkgKiBvciBCSU9TIGZvcmdldCB0byBwdXQgdGhhdCBpbiByZXNlcnZlZC4KIAkgKiB0cnkgdG8gdXBkYXRlIGU4MjAgdG8gbWFrZSB0aGF0IHJlZ2lvbiBhcyByZXNlcnZlZC4KIAkgKi8KLQlpbnQgaSwgZml4LCBzbG90OworCXUzMiBhZ3BfYXBlcl9iYXNlID0gMCwgYWdwX2FwZXJfb3JkZXIgPSAwOworCWludCBpLCBmaXgsIHNsb3QsIHZhbGlkX2FncCA9IDA7CiAJdTMyIGN0bDsKIAl1MzIgYXBlcl9zaXplID0gMCwgYXBlcl9vcmRlciA9IDAsIGxhc3RfYXBlcl9vcmRlciA9IDA7CiAJdTY0IGFwZXJfYmFzZSA9IDAsIGxhc3RfYXBlcl9iYXNlID0gMDsKQEAgLTI5MCw2ICsyOTEsOCBAQAogCQlyZXR1cm47CiAKIAkvKiBUaGlzIGlzIG1vc3RseSBkdXBsaWNhdGUgb2YgaW9tbXVfaG9sZV9pbml0ICovCisJYWdwX2FwZXJfYmFzZSA9IHNlYXJjaF9hZ3BfYnJpZGdlKCZhZ3BfYXBlcl9vcmRlciwgJnZhbGlkX2FncCk7CisKIAlmaXggPSAwOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1c19kZXZfcmFuZ2VzKTsgaSsrKSB7CiAJCWludCBidXM7CkBAIC0zNDIsMTAgKzM0NSwxMCBAQAogCQl9CiAJfQogCi0JaWYgKCFmaXgpCisJaWYgKHZhbGlkX2FncCkKIAkJcmV0dXJuOwogCi0JLyogZGlmZmVyZW50IG5vZGVzIGhhdmUgZGlmZmVyZW50IHNldHRpbmcsIGRpc2FibGUgdGhlbSBhbGwgYXQgZmlyc3QqLworCS8qIGRpc2FibGUgdGhlbSBhbGwgYXQgZmlyc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXNfZGV2X3Jhbmdlcyk7IGkrKykgewogCQlpbnQgYnVzOwogCQlpbnQgZGV2X2Jhc2UsIGRldl9saW1pdDsKQEAgLTQ1OCw4ICs0NjEsNiBAQAogCiAJaWYgKGFwZXJfYWxsb2MpIHsKIAkJLyogR290IHRoZSBhcGVydHVyZSBmcm9tIHRoZSBBR1AgYnJpZGdlICovCi0JfSBlbHNlIGlmICghdmFsaWRfYWdwKSB7Ci0JCS8qIERvIG5vdGhpbmcgKi8KIAl9IGVsc2UgaWYgKCghbm9faW9tbXUgJiYgbWF4X3BmbiA+IE1BWF9ETUEzMl9QRk4pIHx8CiAJCSAgIGZvcmNlX2lvbW11IHx8CiAJCSAgIHZhbGlkX2FncCB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IGVmYjJiOWMuLmFhNTdjMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTEzNDEsNyArMTM0MSw3IEBACiAKIAlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKIAlpZiAoIShtc3IgJiBYMkFQSUNfRU5BQkxFKSkgewotCQlwcl9pbmZvKCJFbmFibGluZyB4MmFwaWNcbiIpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gIkVuYWJsaW5nIHgyYXBpY1xuIik7CiAJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IgfCBYMkFQSUNfRU5BQkxFLCAwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCmluZGV4IGQwYzk5YWIuLmVhY2JkMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCkBAIC0zMDYsMTAgKzMwNiw3IEBACiAJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKIH0KIAogc3RydWN0IGFwaWMgYXBpY19waHlzZmxhdCA9ICB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX25vb3AuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jCmluZGV4IGQ5YWNjM2IuLmUzMWI5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogc3RhdGljIHZvaWQgbm9vcF9hcGljX3dyaXRlKHUzMiByZWcsIHUzMiB2KQogewotCVdBUk5fT05fT05DRSgoY3B1X2hhc19hcGljIHx8ICFkaXNhYmxlX2FwaWMpKTsKKwlXQVJOX09OX09OQ0UoY3B1X2hhc19hcGljICYmICFkaXNhYmxlX2FwaWMpOwogfQogCiBzdHJ1Y3QgYXBpYyBhcGljX25vb3AgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCmluZGV4IDM4ZGNlY2YuLmNiODA0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCkBAIC0xMzEsMTAgKzEzMSw3IEBACiAJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBiaWdzbXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CiB9CiAKIHN0YXRpYyBpbnQgYmlnc21wX3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYwppbmRleCBlODVmOGZiLi5kZDJiNWYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYwpAQCAtMjcsNiArMjcsOSBAQAogICoKICAqIGh0dHA6Ly93d3cudW5pc3lzLmNvbQogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CkBAIC0yMjMsOSArMjI2LDkgQEAKIAkJCW1pcF9hZGRyID0gdmFsOwogCQkJbWlwID0gKHN0cnVjdCBtaXBfcmVnICopdmFsOwogCQkJbWlwX3JlZyA9IF9fdmEobWlwKTsKLQkJCXByX2RlYnVnKCJlczcwMDBfbWlwY2ZnOiBob3N0X3JlZyA9IDB4JWx4IFxuIiwKKwkJCXByX2RlYnVnKCJob3N0X3JlZyA9IDB4JWx4XG4iLAogCQkJCSAodW5zaWduZWQgbG9uZylob3N0X3JlZyk7Ci0JCQlwcl9kZWJ1ZygiZXM3MDAwX21pcGNmZzogbWlwX3JlZyA9IDB4JWx4IFxuIiwKKwkJCXByX2RlYnVnKCJtaXBfcmVnID0gMHglbHhcbiIsCiAJCQkJICh1bnNpZ25lZCBsb25nKW1pcF9yZWcpOwogCQkJc3VjY2VzcysrOwogCQkJYnJlYWs7CkBAIC00MDEsNyArNDA0LDcgQEAKIAlpZiAoIWVzNzAwMF9wbGF0KQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9JTkZPICJFUzcwMDA6IEVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOworCXByX2luZm8oIkVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOwogCW1lbXNldCgmZXM3MDAwX21pcF9yZWcsIDAsIHNpemVvZihzdHJ1Y3QgbWlwX3JlZykpOwogCWVzNzAwMF9taXBfcmVnLm9mZl8weDAwID0gTUlQX1NXX0FQSUM7CiAJZXM3MDAwX21pcF9yZWcub2ZmXzB4MzggPSBNSVBfVkFMSUQ7CkBAIC01MTQsOCArNTE3LDcgQEAKIHsKIAlpbnQgYXBpYyA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCXByaW50ayhLRVJOX0lORk8KLQkgICJFbmFibGluZyBBUElDIG1vZGU6ICAlcy4gVXNpbmcgJWQgSS9PIEFQSUNzLCB0YXJnZXQgY3B1cyAlbHhcbiIsCisJcHJfaW5mbygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAogCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8KIAkJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLAogCQlucl9pb2FwaWNzLCBjcHVtYXNrX2JpdHMoZXM3MDAwX3RhcmdldF9jcHVzKCkpWzBdKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCBkNWQ0OThmLi5kZTAwYzQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0yMjc2LDI2ICsyMjc2LDI4IEBACiAKIC8qCiAgKiBFaXRoZXIgc2V0cyBkZXNjLT5hZmZpbml0eSB0byBhIHZhbGlkIHZhbHVlLCBhbmQgcmV0dXJucwotICogLT5jcHVfbWFza190b19hcGljaWQgb2YgdGhhdCwgb3IgcmV0dXJucyBCQURfQVBJQ0lEIGFuZAorICogLT5jcHVfbWFza190b19hcGljaWQgb2YgdGhhdCBpbiBkZXN0X2lkLCBvciByZXR1cm5zIC0xIGFuZAogICogbGVhdmVzIGRlc2MtPmFmZmluaXR5IHVudG91Y2hlZC4KICAqLwogdW5zaWduZWQgaW50Ci1zZXRfZGVzY19hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQorc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJICB1bnNpZ25lZCBpbnQgKmRlc3RfaWQpCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMobWFzaywgY3B1X29ubGluZV9tYXNrKSkKLQkJcmV0dXJuIEJBRF9BUElDSUQ7CisJCXJldHVybiAtMTsKIAogCWlycSA9IGRlc2MtPmlycTsKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKSkKLQkJcmV0dXJuIEJBRF9BUElDSUQ7CisJCXJldHVybiAtMTsKIAogCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiAKLQlyZXR1cm4gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4pOworCSpkZXN0X2lkID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzExLDEyICsyMzEzLDExIEBACiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ICE9IEJBRF9BUElDSUQpIHsKKwlyZXQgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCk7CisJaWYgKCFyZXQpIHsKIAkJLyogT25seSB0aGUgaGlnaCA4IGJpdHMgYXJlIHZhbGlkLiAqLwogCQlkZXN0ID0gU0VUX0FQSUNfTE9HSUNBTF9JRChkZXN0KTsKIAkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmcpOwotCQlyZXQgPSAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCkBAIC0yNDMxLDcgKzI0MzIsNyBAQAogCQkJY29udGludWU7CiAKIAkJY2ZnID0gaXJxX2NmZyhpcnEpOwotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCQlpZiAodmVjdG9yID09IGNmZy0+dmVjdG9yICYmIGNwdW1hc2tfdGVzdF9jcHUobWUsIGNmZy0+ZG9tYWluKSkKIAkJCWdvdG8gdW5sb2NrOwpAQCAtMjQ1MCw3ICsyNDUxLDcgQEAKIAkJfQogCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKIHVubG9jazoKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCX0KIAogCWlycV9leGl0KCk7CkBAIC0zMzUxLDggKzMzNTIsNyBAQAogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKQEAgLTMzODQsOCArMzM4NCw3IEBACiAJaWYgKGdldF9pcnRlKGlycSwgJmlydGUpKQogCQlyZXR1cm4gLTE7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwpAQCAtMzU2Nyw4ICszNTY2LDcgQEAKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CkBAIC0zNjIzLDggKzM2MjEsNyBAQAogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKQEAgLTM3MzAsOCArMzcyNyw3IEBACiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKaW5kZXggNjM4OTQzMi4uMDE1OWE2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogICovCiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgbGFzdF9pcnFfc3VtKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBhbGVydF9jb3VudGVyKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShsb25nLCBhbGVydF9jb3VudGVyKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIG5taV90b3VjaCk7CiAKIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpCkBAIC00MzgsOCArNDM4LDggQEAKIAkJICogQXlpZWUsIGxvb2tzIGxpa2UgdGhpcyBDUFUgaXMgc3R1Y2sgLi4uCiAJCSAqIHdhaXQgYSBmZXcgSVJRcyAoNSBzZWNvbmRzKSBiZWZvcmUgZG9pbmcgdGhlIG9vcHMgLi4uCiAJCSAqLwotCQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlcikpOwotCQlpZiAobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihhbGVydF9jb3VudGVyKSkgPT0gNSAqIG5taV9oeikKKwkJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIoYWxlcnRfY291bnRlcikpOworCQlpZiAoX190aGlzX2NwdV9yZWFkKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpKSA9PSA1ICogbm1pX2h6KQogCQkJLyoKIAkJCSAqIGRpZV9ubWkgd2lsbCByZXR1cm4gT05MWSBpZiBOT1RJRllfU1RPUCBoYXBwZW5zLi4KIAkJCSAqLwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJCQkJcmVncywgcGFuaWNfb25fdGltZW91dCk7CiAJfSBlbHNlIHsKIAkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwotCQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOworCQlfX3RoaXNfY3B1X3dyaXRlKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpLCAwKTsKIAl9CiAKIAkvKiBzZWUgaWYgdGhlIG5taSB3YXRjaGRvZyB3ZW50IG9mZiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKaW5kZXggYTUzNzFlYy4uY2Y2OWM1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCkBAIC0xNDgsMTAgKzE0OCw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX2NsdXN0ZXJfcGh5c19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYwppbmRleCBhODk4OWFhLi44OTcyZjM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKQEAgLTE0NiwxMCArMTQ2LDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19waHlzX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IGI2ODRiYjMuLmQ1NmIwZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMjI1LDEwICsyMjUsNyBAQAogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwotCi0JcmV0dXJuIEJBRF9BUElDSUQ7CisJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeDJhcGljX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IDYzYTg4ZTEuLmIwMjA2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMTAxLDIxICsxMDEsMTcgQEAKIH0KIAogaW50Ci11dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyhpbnQgYmxhZGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG1xX3NpemUsCit1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBtcV9zaXplLAogCQkJICAgdW5zaWduZWQgbG9uZyAqaW50cl9tbXJfb2Zmc2V0KQogewotCXVuaW9uIHV2X3dhdGNobGlzdF91IHNpemVfYmxhZGU7CiAJdTY0IHdhdGNobGlzdDsKIAlzNjQgcmV0OwogCi0Jc2l6ZV9ibGFkZS5zaXplID0gbXFfc2l6ZTsKLQlzaXplX2JsYWRlLmJsYWRlID0gYmxhZGU7Ci0KIAkvKgogCSAqIGJpb3MgcmV0dXJucyB3YXRjaGxpc3QgbnVtYmVyIG9yIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KIAkgKi8KIAlyZXQgPSAoaW50KXV2X2Jpb3NfY2FsbF9pcnFzYXZlKFVWX0JJT1NfV0FUQ0hMSVNUX0FMTE9DLCBhZGRyLAotCQkJc2l6ZV9ibGFkZS52YWwsICh1NjQpaW50cl9tbXJfb2Zmc2V0LAorCQkJbXFfc2l6ZSwgKHU2NClpbnRyX21tcl9vZmZzZXQsCiAJCQkodTY0KSZ3YXRjaGxpc3QsIDApOwogCWlmIChyZXQgPCBCSU9TX1NUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCmluZGV4IGM5NjVlNTIuLjQ2ODQ4OWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKQEAgLTc0LDYgKzc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4LCBzdWJfaW5kZXg7CiAJdW5zaWduZWQgaW50IGh0X21hc2tfd2lkdGgsIGNvcmVfcGx1c19tYXNrX3dpZHRoOwogCXVuc2lnbmVkIGludCBjb3JlX3NlbGVjdF9tYXNrLCBjb3JlX2xldmVsX3NpYmxpbmdzOworCXN0YXRpYyBib29sIHByaW50ZWQ7CiAKIAlpZiAoYy0+Y3B1aWRfbGV2ZWwgPCAweGIpCiAJCXJldHVybjsKQEAgLTEyNywxMiArMTI4LDE0IEBACiAKIAljLT54ODZfbWF4X2NvcmVzID0gKGNvcmVfbGV2ZWxfc2libGluZ3MgLyBzbXBfbnVtX3NpYmxpbmdzKTsKIAotCi0JcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUGh5c2ljYWwgUHJvY2Vzc29yIElEOiAlZFxuIiwKLQkgICAgICAgYy0+cGh5c19wcm9jX2lkKTsKLQlpZiAoYy0+eDg2X21heF9jb3JlcyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFByb2Nlc3NvciBDb3JlIElEOiAlZFxuIiwKLQkJICAgICAgIGMtPmNwdV9jb3JlX2lkKTsKKwlpZiAoIXByaW50ZWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUGh5c2ljYWwgUHJvY2Vzc29yIElEOiAlZFxuIiwKKwkJICAgICAgIGMtPnBoeXNfcHJvY19pZCk7CisJCWlmIChjLT54ODZfbWF4X2NvcmVzID4gMSkKKwkJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFByb2Nlc3NvciBDb3JlIElEOiAlZFxuIiwKKwkJCSAgICAgICBjLT5jcHVfY29yZV9pZCk7CisJCXByaW50ZWQgPSAxOworCX0KIAlyZXR1cm47CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDcxMjhiMzcuLmU0ODU4MjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMjU0LDU5ICsyNTQsMzYgQEAKIAogLyoKICAqIEZpeHVwIGNvcmUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gZm9yIEFNRCBtdWx0aS1ub2RlIHByb2Nlc3NvcnMuCi0gKiBBc3N1bXB0aW9uIDE6IE51bWJlciBvZiBjb3JlcyBpbiBlYWNoIGludGVybmFsIG5vZGUgaXMgdGhlIHNhbWUuCi0gKiBBc3N1bXB0aW9uIDI6IE1peGVkIHN5c3RlbXMgd2l0aCBib3RoIHNpbmdsZS1ub2RlIGFuZCBkdWFsLW5vZGUKLSAqICAgICAgICAgICAgICAgcHJvY2Vzc29ycyBhcmUgbm90IHN1cHBvcnRlZC4KKyAqIEFzc3VtcHRpb246IE51bWJlciBvZiBjb3JlcyBpbiBlYWNoIGludGVybmFsIG5vZGUgaXMgdGhlIHNhbWUuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2X0hUCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgYW1kX2ZpeHVwX2RjbShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0jaWZkZWYgQ09ORklHX1BDSQotCXUzMiB0LCBjcG47Ci0JdTggbiwgbl9pZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdTMyIG5vZGVzLCBjb3Jlc19wZXJfbm9kZTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX05PREVJRF9NU1IpKQorCQlyZXR1cm47CisKIAkvKiBmaXh1cCB0b3BvbG9neSBpbmZvcm1hdGlvbiBvbmx5IG9uY2UgZm9yIGEgY29yZSAqLwogCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FNRF9EQ00pKQogCQlyZXR1cm47CiAKLQkvKiBjaGVjayBmb3IgbXVsdGktbm9kZSBwcm9jZXNzb3Igb24gYm9vdCBjcHUgKi8KLQl0ID0gcmVhZF9wY2lfY29uZmlnKDAsIDI0LCAzLCAweGU4KTsKLQlpZiAoISh0ICYgKDEgPDwgMjkpKSkKKwlyZG1zcmwoTVNSX0ZBTTEwSF9OT0RFX0lELCB2YWx1ZSk7CisKKwlub2RlcyA9ICgodmFsdWUgPj4gMykgJiA3KSArIDE7CisJaWYgKG5vZGVzID09IDEpCiAJCXJldHVybjsKIAogCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FNRF9EQ00pOworCWNvcmVzX3Blcl9ub2RlID0gYy0+eDg2X21heF9jb3JlcyAvIG5vZGVzOwogCi0JLyogY29yZXMgcGVyIG5vZGU6IGVhY2ggaW50ZXJuYWwgbm9kZSBoYXMgaGFsZiB0aGUgbnVtYmVyIG9mIGNvcmVzICovCi0JY3BuID0gYy0+eDg2X21heF9jb3JlcyA+PiAxOworCS8qIHN0b3JlIE5vZGVJRCwgdXNlIGxsY19zaGFyZWRfbWFwIHRvIHN0b3JlIHNpYmxpbmcgaW5mbyAqLworCXBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9IHZhbHVlICYgNzsKIAotCS8qIGV2ZW4tbnVtYmVyZWQgTkJfaWQgb2YgdGhpcyBkdWFsLW5vZGUgcHJvY2Vzc29yICovCi0JbiA9IGMtPnBoeXNfcHJvY19pZCA8PCAxOwotCi0JLyoKLQkgKiBkZXRlcm1pbmUgaW50ZXJuYWwgbm9kZSBpZCBhbmQgYXNzaWduIGNvcmVzIGZpZnR5LWZpZnR5IHRvCi0JICogZWFjaCBub2RlIG9mIHRoZSBkdWFsLW5vZGUgcHJvY2Vzc29yCi0JICovCi0JdCA9IHJlYWRfcGNpX2NvbmZpZygwLCAyNCArIG4sIDMsIDB4ZTgpOwotCW4gPSAodD4+MzApICYgMHgzOwotCWlmIChuID09IDApIHsKLQkJaWYgKGMtPmNwdV9jb3JlX2lkIDwgY3BuKQotCQkJbl9pZCA9IDA7Ci0JCWVsc2UKLQkJCW5faWQgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChjLT5jcHVfY29yZV9pZCA8IGNwbikKLQkJCW5faWQgPSAxOwotCQllbHNlCi0JCQluX2lkID0gMDsKLQl9Ci0KLQkvKiBjb21wdXRlIGVudGlyZSBOb2RlSUQsIHVzZSBsbGNfc2hhcmVkX21hcCB0byBzdG9yZSBzaWJsaW5nIGluZm8gKi8KLQlwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPSAoYy0+cGh5c19wcm9jX2lkIDw8IDEpICsgbl9pZDsKLQotCS8qIGZpeHVwIGNvcmUgaWQgdG8gYmUgaW4gcmFuZ2UgZnJvbSAwIHRvIGNwbiAqLwotCWMtPmNwdV9jb3JlX2lkID0gYy0+Y3B1X2NvcmVfaWQgJSBjcG47Ci0jZW5kaWYKKwkvKiBmaXh1cCBjb3JlIGlkIHRvIGJlIGluIHJhbmdlIGZyb20gMCB0byAoY29yZXNfcGVyX25vZGUgLSAxKSAqLworCWMtPmNwdV9jb3JlX2lkID0gYy0+Y3B1X2NvcmVfaWQgJSBjb3Jlc19wZXJfbm9kZTsKIH0KICNlbmRpZgogCkBAIC0zNzUsOCArMzUyLDYgQEAKIAkJCW5vZGUgPSBuZWFyYnlfbm9kZShhcGljaWQpOwogCX0KIAludW1hX3NldF9ub2RlKGNwdSwgbm9kZSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQvMHgleCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYzFhZmE5OS4uNDg2OGU0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC00MjcsNiArNDI3LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2X0hUCiAJdTMyIGVheCwgZWJ4LCBlY3gsIGVkeDsKIAlpbnQgaW5kZXhfbXNiLCBjb3JlX2JpdHM7CisJc3RhdGljIGJvb2wgcHJpbnRlZDsKIAogCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IVCkpCiAJCXJldHVybjsKQEAgLTQ0Miw3ICs0NDMsNyBAQAogCXNtcF9udW1fc2libGluZ3MgPSAoZWJ4ICYgMHhmZjAwMDApID4+IDE2OwogCiAJaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMSkgewotCQlwcmludGsoS0VSTl9JTkZPICAiQ1BVOiBIeXBlci1UaHJlYWRpbmcgaXMgZGlzYWJsZWRcbiIpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gIkNQVTA6IEh5cGVyLVRocmVhZGluZyBpcyBkaXNhYmxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDY5LDExICs0NzAsMTIgQEAKIAkJCQkgICAgICAgKCgxIDw8IGNvcmVfYml0cykgLSAxKTsKIAogb3V0OgotCWlmICgoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MpID4gMSkgeworCWlmICghcHJpbnRlZCAmJiAoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MpID4gMSkgewogCQlwcmludGsoS0VSTl9JTkZPICAiQ1BVOiBQaHlzaWNhbCBQcm9jZXNzb3IgSUQ6ICVkXG4iLAogCQkgICAgICAgYy0+cGh5c19wcm9jX2lkKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUHJvY2Vzc29yIENvcmUgSUQ6ICVkXG4iLAogCQkgICAgICAgYy0+Y3B1X2NvcmVfaWQpOworCQlwcmludGVkID0gMTsKIAl9CiAjZW5kaWYKIH0KQEAgLTEwOTMsNyArMTA5NSw3IEBACiAKIHZvaWQgX19jcHVpbml0IGNwdV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IG9yaWdfaXN0ICpvcmlnX2lzdDsKKwlzdHJ1Y3Qgb3JpZ19pc3QgKm9pc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0ICptZTsKIAlzdHJ1Y3QgdHNzX3N0cnVjdCAqdDsKIAl1bnNpZ25lZCBsb25nIHY7CkBAIC0xMTAyLDcgKzExMDQsNyBAQAogCiAJY3B1ID0gc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXQgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKLQlvcmlnX2lzdCA9ICZwZXJfY3B1KG9yaWdfaXN0LCBjcHUpOworCW9pc3QgPSAmcGVyX2NwdShvcmlnX2lzdCwgY3B1KTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAJaWYgKGNwdSAhPSAwICYmIHBlcmNwdV9yZWFkKG5vZGVfbnVtYmVyKSA9PSAwICYmCkBAIC0xMTE1LDcgKzExMTcsNyBAQAogCWlmIChjcHVtYXNrX3Rlc3RfYW5kX3NldF9jcHUoY3B1LCBjcHVfaW5pdGlhbGl6ZWRfbWFzaykpCiAJCXBhbmljKCJDUFUjJWQgYWxyZWFkeSBpbml0aWFsaXplZCFcbiIsIGNwdSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgQ1BVIyVkXG4iLCBjcHUpOworCXByX2RlYnVnKCJJbml0aWFsaXppbmcgQ1BVIyVkXG4iLCBjcHUpOwogCiAJY2xlYXJfaW5fY3I0KFg4Nl9DUjRfVk1FfFg4Nl9DUjRfUFZJfFg4Nl9DUjRfVFNEfFg4Nl9DUjRfREUpOwogCkBAIC0xMTQzLDEyICsxMTQ1LDEyIEBACiAJLyoKIAkgKiBzZXQgdXAgYW5kIGxvYWQgdGhlIHBlci1DUFUgVFNTCiAJICovCi0JaWYgKCFvcmlnX2lzdC0+aXN0WzBdKSB7CisJaWYgKCFvaXN0LT5pc3RbMF0pIHsKIAkJY2hhciAqZXN0YWNrcyA9IHBlcl9jcHUoZXhjZXB0aW9uX3N0YWNrcywgY3B1KTsKIAogCQlmb3IgKHYgPSAwOyB2IDwgTl9FWENFUFRJT05fU1RBQ0tTOyB2KyspIHsKIAkJCWVzdGFja3MgKz0gZXhjZXB0aW9uX3N0YWNrX3NpemVzW3ZdOwotCQkJb3JpZ19pc3QtPmlzdFt2XSA9IHQtPng4Nl90c3MuaXN0W3ZdID0KKwkJCW9pc3QtPmlzdFt2XSA9IHQtPng4Nl90c3MuaXN0W3ZdID0KIAkJCQkJKHVuc2lnbmVkIGxvbmcpZXN0YWNrczsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdV9kZWJ1Zy5jCmluZGV4IGRjYTMyNWMuLmIzNjhjZDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVfZGVidWcuYwpAQCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfY3B1WF9iYXNlIFtDUFVfUkVHX0FMTF9CSVRdLCBjcHVfYXJyKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3ByaXZhdGUgKiBbTUFYX0NQVV9GSUxFU10sIHByaXZfYXJyKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9wcml2X2NvdW50KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2NwdVhfYmFzZSBbQ1BVX1JFR19BTExfQklUXSwgY3B1ZF9hcnIpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfcHJpdmF0ZSAqIFtNQVhfQ1BVX0ZJTEVTXSwgY3B1ZF9wcml2X2Fycik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjcHVkX3ByaXZfY291bnQpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGNwdV9kZWJ1Z19sb2NrKTsKIApAQCAtNTMxLDcgKzUzMSw3IEBACiAKIAkvKiBBbHJlYWR5IGludGlhbGl6ZWQgKi8KIAlpZiAoZmlsZSA9PSBDUFVfSU5ERVhfQklUKQotCQlpZiAocGVyX2NwdShjcHVfYXJyW3R5cGVdLmluaXQsIGNwdSkpCisJCWlmIChwZXJfY3B1KGNwdWRfYXJyW3R5cGVdLmluaXQsIGNwdSkpCiAJCQlyZXR1cm4gMDsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwpAQCAtNTQzLDggKzU0Myw4IEBACiAJcHJpdi0+cmVnID0gcmVnOwogCXByaXYtPmZpbGUgPSBmaWxlOwogCW11dGV4X2xvY2soJmNwdV9kZWJ1Z19sb2NrKTsKLQlwZXJfY3B1KHByaXZfYXJyW3R5cGVdLCBjcHUpID0gcHJpdjsKLQlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpKys7CisJcGVyX2NwdShjcHVkX3ByaXZfYXJyW3R5cGVdLCBjcHUpID0gcHJpdjsKKwlwZXJfY3B1KGNwdWRfcHJpdl9jb3VudCwgY3B1KSsrOwogCW11dGV4X3VubG9jaygmY3B1X2RlYnVnX2xvY2spOwogCiAJaWYgKGZpbGUpCkBAIC01NTIsMTAgKzU1MiwxMCBAQAogCQkJCSAgICBkZW50cnksICh2b2lkICopcHJpdiwgJmNwdV9mb3BzKTsKIAllbHNlIHsKIAkJZGVidWdmc19jcmVhdGVfZmlsZShjcHVfYmFzZVt0eXBlXS5uYW1lLCBTX0lSVUdPLAotCQkJCSAgICBwZXJfY3B1KGNwdV9hcnJbdHlwZV0uZGVudHJ5LCBjcHUpLAorCQkJCSAgICBwZXJfY3B1KGNwdWRfYXJyW3R5cGVdLmRlbnRyeSwgY3B1KSwKIAkJCQkgICAgKHZvaWQgKilwcml2LCAmY3B1X2ZvcHMpOwogCQltdXRleF9sb2NrKCZjcHVfZGVidWdfbG9jayk7Ci0JCXBlcl9jcHUoY3B1X2Fyclt0eXBlXS5pbml0LCBjcHUpID0gMTsKKwkJcGVyX2NwdShjcHVkX2Fyclt0eXBlXS5pbml0LCBjcHUpID0gMTsKIAkJbXV0ZXhfdW5sb2NrKCZjcHVfZGVidWdfbG9jayk7CiAJfQogCkBAIC02MTUsNyArNjE1LDcgQEAKIAkJaWYgKCFpc190eXBlZmxhZ192YWxpZChjcHUsIGNwdV9iYXNlW3R5cGVdLmZsYWcpKQogCQkJY29udGludWU7CiAJCWNwdV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY3B1X2Jhc2VbdHlwZV0ubmFtZSwgZGVudHJ5KTsKLQkJcGVyX2NwdShjcHVfYXJyW3R5cGVdLmRlbnRyeSwgY3B1KSA9IGNwdV9kZW50cnk7CisJCXBlcl9jcHUoY3B1ZF9hcnJbdHlwZV0uZGVudHJ5LCBjcHUpID0gY3B1X2RlbnRyeTsKIAogCQlpZiAodHlwZSA8IENQVV9UU1NfQklUKQogCQkJZXJyID0gY3B1X2luaXRfbXNyKGNwdSwgdHlwZSwgY3B1X2RlbnRyeSk7CkBAIC02NDcsMTEgKzY0NywxMSBAQAogCQllcnIgPSBjcHVfaW5pdF9hbGxyZWcoY3B1LCBjcHVfZGVudHJ5KTsKIAogCQlwcl9pbmZvKCJjcHUlZCglZCkgZGVidWcgZmlsZXMgJWRcbiIsCi0JCQljcHUsIG5yX2NwdV9pZHMsIHBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkpOwotCQlpZiAocGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSA+IE1BWF9DUFVfRklMRVMpIHsKKwkJCWNwdSwgbnJfY3B1X2lkcywgcGVyX2NwdShjcHVkX3ByaXZfY291bnQsIGNwdSkpOworCQlpZiAocGVyX2NwdShjcHVkX3ByaXZfY291bnQsIGNwdSkgPiBNQVhfQ1BVX0ZJTEVTKSB7CiAJCQlwcl9lcnIoIlJlZ2lzdGVyIGZpbGVzIGNvdW50ICVkIGV4Y2VlZHMgbGltaXQgJWRcbiIsCi0JCQkJcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSwgTUFYX0NQVV9GSUxFUyk7Ci0JCQlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpID0gTUFYX0NQVV9GSUxFUzsKKwkJCQlwZXJfY3B1KGNwdWRfcHJpdl9jb3VudCwgY3B1KSwgTUFYX0NQVV9GSUxFUyk7CisJCQlwZXJfY3B1KGNwdWRfcHJpdl9jb3VudCwgY3B1KSA9IE1BWF9DUFVfRklMRVM7CiAJCQllcnIgPSAtRU5GSUxFOwogCQl9CiAJCWlmIChlcnIpCkBAIC02NzYsOCArNjc2LDggQEAKIAkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNwdV9kZWJ1Z2ZzX2Rpcik7CiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8ICBucl9jcHVfaWRzOyBjcHUrKykKLQkJZm9yIChpID0gMDsgaSA8IHBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSk7IGkrKykKLQkJCWtmcmVlKHBlcl9jcHUocHJpdl9hcnJbaV0sIGNwdSkpOworCQlmb3IgKGkgPSAwOyBpIDwgcGVyX2NwdShjcHVkX3ByaXZfY291bnQsIGNwdSk7IGkrKykKKwkJCWtmcmVlKHBlcl9jcHUoY3B1ZF9wcml2X2FycltpXSwgY3B1KSk7CiB9CiAKIG1vZHVsZV9pbml0KGNwdV9kZWJ1Z19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCBkMmU3Yzc3Li5mMjhkZWNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC02OCw5ICs2OCw5IEBACiAJdW5zaWduZWQgaW50IGNwdV9mZWF0dXJlOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqLCBkcnZfZGF0YSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICosIGFjZnJlcV9kYXRhKTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhcGVyZm1wZXJmLCBvbGRfcGVyZik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGFwZXJmbXBlcmYsIGFjZnJlcV9vbGRfcGVyZik7CiAKIC8qIGFjcGlfcGVyZl9kYXRhIGlzIGEgcG9pbnRlciB0byBwZXJjcHUgZGF0YS4gKi8KIHN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKmFjcGlfcGVyZl9kYXRhOwpAQCAtMjE0LDE0ICsyMTQsMTQgQEAKIAlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShtYXNrKSkpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChwZXJfY3B1KGRydl9kYXRhLCBjcHVtYXNrX2ZpcnN0KG1hc2spKS0+Y3B1X2ZlYXR1cmUpIHsKKwlzd2l0Y2ggKHBlcl9jcHUoYWNmcmVxX2RhdGEsIGNwdW1hc2tfZmlyc3QobWFzaykpLT5jcHVfZmVhdHVyZSkgewogCWNhc2UgU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOgogCQljbWQudHlwZSA9IFNZU1RFTV9JTlRFTF9NU1JfQ0FQQUJMRTsKIAkJY21kLmFkZHIubXNyLnJlZyA9IE1TUl9JQTMyX1BFUkZfU1RBVFVTOwogCQlicmVhazsKIAljYXNlIFNZU1RFTV9JT19DQVBBQkxFOgogCQljbWQudHlwZSA9IFNZU1RFTV9JT19DQVBBQkxFOwotCQlwZXJmID0gcGVyX2NwdShkcnZfZGF0YSwgY3B1bWFza19maXJzdChtYXNrKSktPmFjcGlfZGF0YTsKKwkJcGVyZiA9IHBlcl9jcHUoYWNmcmVxX2RhdGEsIGNwdW1hc2tfZmlyc3QobWFzaykpLT5hY3BpX2RhdGE7CiAJCWNtZC5hZGRyLmlvLnBvcnQgPSBwZXJmLT5jb250cm9sX3JlZ2lzdGVyLmFkZHJlc3M7CiAJCWNtZC5hZGRyLmlvLmJpdF93aWR0aCA9IHBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuYml0X3dpZHRoOwogCQlicmVhazsKQEAgLTI2OCw4ICsyNjgsOCBAQAogCWlmIChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCByZWFkX21lYXN1cmVkX3BlcmZfY3RycywgJnBlcmYsIDEpKQogCQlyZXR1cm4gMDsKIAotCXJhdGlvID0gY2FsY19hcGVyZm1wZXJmX3JhdGlvKCZwZXJfY3B1KG9sZF9wZXJmLCBjcHUpLCAmcGVyZik7Ci0JcGVyX2NwdShvbGRfcGVyZiwgY3B1KSA9IHBlcmY7CisJcmF0aW8gPSBjYWxjX2FwZXJmbXBlcmZfcmF0aW8oJnBlcl9jcHUoYWNmcmVxX29sZF9wZXJmLCBjcHUpLCAmcGVyZik7CisJcGVyX2NwdShhY2ZyZXFfb2xkX3BlcmYsIGNwdSkgPSBwZXJmOwogCiAJcmV0dmFsID0gKHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSAqIHJhdGlvKSA+PiBBUEVSRk1QRVJGX1NISUZUOwogCkBAIC0yNzgsNyArMjc4LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY3VyX2ZyZXFfb25fY3B1KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShkcnZfZGF0YSwgY3B1KTsKKwlzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBwZXJfY3B1KGFjZnJlcV9kYXRhLCBjcHUpOwogCXVuc2lnbmVkIGludCBmcmVxOwogCXVuc2lnbmVkIGludCBjYWNoZWRfZnJlcTsKIApAQCAtMzIyLDcgKzMyMiw3IEBACiBzdGF0aWMgaW50IGFjcGlfY3B1ZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLCB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7Ci0Jc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShkcnZfZGF0YSwgcG9saWN5LT5jcHUpOworCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IHBlcl9jcHUoYWNmcmVxX2RhdGEsIHBvbGljeS0+Y3B1KTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJc3RydWN0IGRydl9jbWQgY21kOwpAQCAtNDE2LDcgKzQxNiw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9jcHVmcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBwZXJfY3B1KGRydl9kYXRhLCBwb2xpY3ktPmNwdSk7CisJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShhY2ZyZXFfZGF0YSwgcG9saWN5LT5jcHUpOwogCiAJZHByaW50aygiYWNwaV9jcHVmcmVxX3ZlcmlmeVxuIik7CiAKQEAgLTU3NCw3ICs1NzQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEtPmFjcGlfZGF0YSA9IHBlcl9jcHVfcHRyKGFjcGlfcGVyZl9kYXRhLCBjcHUpOwotCXBlcl9jcHUoZHJ2X2RhdGEsIGNwdSkgPSBkYXRhOworCXBlcl9jcHUoYWNmcmVxX2RhdGEsIGNwdSkgPSBkYXRhOwogCiAJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkKIAkJYWNwaV9jcHVmcmVxX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwpAQCAtNzI1LDIwICs3MjUsMjAgQEAKIAlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKHBlcmYsIGNwdSk7CiBlcnJfZnJlZToKIAlrZnJlZShkYXRhKTsKLQlwZXJfY3B1KGRydl9kYXRhLCBjcHUpID0gTlVMTDsKKwlwZXJfY3B1KGFjZnJlcV9kYXRhLCBjcHUpID0gTlVMTDsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9jcHVmcmVxX2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IHBlcl9jcHUoZHJ2X2RhdGEsIHBvbGljeS0+Y3B1KTsKKwlzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBwZXJfY3B1KGFjZnJlcV9kYXRhLCBwb2xpY3ktPmNwdSk7CiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2V4aXRcbiIpOwogCiAJaWYgKGRhdGEpIHsKIAkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIocG9saWN5LT5jcHUpOwotCQlwZXJfY3B1KGRydl9kYXRhLCBwb2xpY3ktPmNwdSkgPSBOVUxMOworCQlwZXJfY3B1KGFjZnJlcV9kYXRhLCBwb2xpY3ktPmNwdSkgPSBOVUxMOwogCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKGRhdGEtPmFjcGlfZGF0YSwKIAkJCQkJCSAgICAgIHBvbGljeS0+Y3B1KTsKIAkJa2ZyZWUoZGF0YSk7CkBAIC03NDksNyArNzQ5LDcgQEAKIAogc3RhdGljIGludCBhY3BpX2NwdWZyZXFfcmVzdW1lKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IHBlcl9jcHUoZHJ2X2RhdGEsIHBvbGljeS0+Y3B1KTsKKwlzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBwZXJfY3B1KGFjZnJlcV9kYXRhLCBwb2xpY3ktPmNwdSk7CiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfcmVzdW1lXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCBhOWRmOTQ0Li5mMTI1ZTVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZvbGRtYXNrLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljcHVtYXNrX2NvcHkob2xkbWFzaywgdHNrX2NwdW1hc2soY3VycmVudCkpOworCWNwdW1hc2tfY29weShvbGRtYXNrLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKHBvbC0+Y3B1KSk7CiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggYzkwMGI3My4uODc5NjY2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtNzAsNyArNzAsNiBAQAogCWlmIChjLT54ODZfcG93ZXIgJiAoMSA8PCA4KSkgewogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9OT05TVE9QX1RTQyk7Ci0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CiAJCXNjaGVkX2Nsb2NrX3N0YWJsZSA9IDE7CiAJfQogCkBAIC0yNzAsOCArMjY5LDYgQEAKIAkJbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CiAJfQogCW51bWFfc2V0X25vZGUoY3B1LCBub2RlKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZC8weCV4IC0+IE5vZGUgJWRcbiIsIGNwdSwgYXBpY2lkLCBub2RlKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCA2YzQwZjZiLi5mYzZjOGVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKQEAgLTQ5OSwyNiArNDk5LDI3IEBACiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAKIC8qIHBvaW50ZXIgdG8gX2NwdWlkNF9pbmZvIGFycmF5IChmb3IgZWFjaCBjYWNoZSBsZWFmKSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY3B1aWQ0X2luZm8pOwotI2RlZmluZSBDUFVJRDRfSU5GT19JRFgoeCwgeSkJKCYoKHBlcl9jcHUoY3B1aWQ0X2luZm8sIHgpKVt5XSkpCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBpY2lfY3B1aWQ0X2luZm8pOworI2RlZmluZSBDUFVJRDRfSU5GT19JRFgoeCwgeSkJKCYoKHBlcl9jcHUoaWNpX2NwdWlkNF9pbmZvLCB4KSlbeV0pKQogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNhY2hlX3NoYXJlZF9jcHVfbWFwX3NldHVwKHVuc2lnbmVkIGludCBjcHUsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgX2NwdWlkNF9pbmZvCSp0aGlzX2xlYWYsICpzaWJsaW5nX2xlYWY7CiAJdW5zaWduZWQgbG9uZyBudW1fdGhyZWFkc19zaGFyaW5nOwotCWludCBpbmRleF9tc2IsIGk7CisJaW50IGluZGV4X21zYiwgaSwgc2libGluZzsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAogCWlmICgoaW5kZXggPT0gMykgJiYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpKSB7Ci0JCXN0cnVjdCBjcHVpbmZvX3g4NiAqZDsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCQlpZiAoIXBlcl9jcHUoY3B1aWQ0X2luZm8sIGkpKQorCQlmb3JfZWFjaF9jcHUoaSwgYy0+bGxjX3NoYXJlZF9tYXApIHsKKwkJCWlmICghcGVyX2NwdShpY2lfY3B1aWQ0X2luZm8sIGkpKQogCQkJCWNvbnRpbnVlOwotCQkJZCA9ICZjcHVfZGF0YShpKTsKIAkJCXRoaXNfbGVhZiA9IENQVUlENF9JTkZPX0lEWChpLCBpbmRleCk7Ci0JCQljcHVtYXNrX2NvcHkodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSwKLQkJCQkgICAgIGQtPmxsY19zaGFyZWRfbWFwKTsKKwkJCWZvcl9lYWNoX2NwdShzaWJsaW5nLCBjLT5sbGNfc2hhcmVkX21hcCkgeworCQkJCWlmICghY3B1X29ubGluZShzaWJsaW5nKSkKKwkJCQkJY29udGludWU7CisJCQkJc2V0X2JpdChzaWJsaW5nLCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKKwkJCX0KIAkJfQogCQlyZXR1cm47CiAJfQpAQCAtNTM1LDcgKzUzNiw3IEBACiAJCQkgICAgYy0+YXBpY2lkID4+IGluZGV4X21zYikgewogCQkJCWNwdW1hc2tfc2V0X2NwdShpLAogCQkJCQl0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKLQkJCQlpZiAoaSAhPSBjcHUgJiYgcGVyX2NwdShjcHVpZDRfaW5mbywgaSkpICB7CisJCQkJaWYgKGkgIT0gY3B1ICYmIHBlcl9jcHUoaWNpX2NwdWlkNF9pbmZvLCBpKSkgIHsKIAkJCQkJc2libGluZ19sZWFmID0KIAkJCQkJCUNQVUlENF9JTkZPX0lEWChpLCBpbmRleCk7CiAJCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHRvX2NwdW1hc2soCkBAIC01NzQsOCArNTc1LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhY2hlX2xlYXZlczsgaSsrKQogCQljYWNoZV9yZW1vdmVfc2hhcmVkX2NwdV9tYXAoY3B1LCBpKTsKIAotCWtmcmVlKHBlcl9jcHUoY3B1aWQ0X2luZm8sIGNwdSkpOwotCXBlcl9jcHUoY3B1aWQ0X2luZm8sIGNwdSkgPSBOVUxMOworCWtmcmVlKHBlcl9jcHUoaWNpX2NwdWlkNF9pbmZvLCBjcHUpKTsKKwlwZXJfY3B1KGljaV9jcHVpZDRfaW5mbywgY3B1KSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTYxNCwxNSArNjE1LDE1IEBACiAJaWYgKG51bV9jYWNoZV9sZWF2ZXMgPT0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID0ga3phbGxvYygKKwlwZXJfY3B1KGljaV9jcHVpZDRfaW5mbywgY3B1KSA9IGt6YWxsb2MoCiAJICAgIHNpemVvZihzdHJ1Y3QgX2NwdWlkNF9pbmZvKSAqIG51bV9jYWNoZV9sZWF2ZXMsIEdGUF9LRVJORUwpOwotCWlmIChwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID09IE5VTEwpCisJaWYgKHBlcl9jcHUoaWNpX2NwdWlkNF9pbmZvLCBjcHUpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZ2V0X2NwdV9sZWF2ZXMsICZyZXR2YWwsIHRydWUpOwogCWlmIChyZXR2YWwpIHsKLQkJa2ZyZWUocGVyX2NwdShjcHVpZDRfaW5mbywgY3B1KSk7Ci0JCXBlcl9jcHUoY3B1aWQ0X2luZm8sIGNwdSkgPSBOVUxMOworCQlrZnJlZShwZXJfY3B1KGljaV9jcHVpZDRfaW5mbywgY3B1KSk7CisJCXBlcl9jcHUoaWNpX2NwdWlkNF9pbmZvLCBjcHUpID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNjM0LDcgKzYzNSw3IEBACiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBjcHVfc3lzZGV2X2NsYXNzOyAvKiBmcm9tIGRyaXZlcnMvYmFzZS9jcHUuYyAqLwogCiAvKiBwb2ludGVyIHRvIGtvYmplY3QgZm9yIGNwdVgvY2FjaGUgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga29iamVjdCAqLCBjYWNoZV9rb2JqZWN0KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga29iamVjdCAqLCBpY2lfY2FjaGVfa29iamVjdCk7CiAKIHN0cnVjdCBfaW5kZXhfa29iamVjdCB7CiAJc3RydWN0IGtvYmplY3Qga29iajsKQEAgLTY0Myw4ICs2NDQsOCBAQAogfTsKIAogLyogcG9pbnRlciB0byBhcnJheSBvZiBrb2JqZWN0cyBmb3IgY3B1WC9jYWNoZS9pbmRleFkgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgX2luZGV4X2tvYmplY3QgKiwgaW5kZXhfa29iamVjdCk7Ci0jZGVmaW5lIElOREVYX0tPQkpFQ1RfUFRSKHgsIHkpCQkoJigocGVyX2NwdShpbmRleF9rb2JqZWN0LCB4KSlbeV0pKQorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBfaW5kZXhfa29iamVjdCAqLCBpY2lfaW5kZXhfa29iamVjdCk7CisjZGVmaW5lIElOREVYX0tPQkpFQ1RfUFRSKHgsIHkpCQkoJigocGVyX2NwdShpY2lfaW5kZXhfa29iamVjdCwgeCkpW3ldKSkKIAogI2RlZmluZSBzaG93X29uZV9wbHVzKGZpbGVfbmFtZSwgb2JqZWN0LCB2YWwpCQkJCVwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNmaWxlX25hbWUJCQkJCQlcCkBAIC04NjMsMTAgKzg2NCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlrZnJlZShwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSkpOwotCWtmcmVlKHBlcl9jcHUoaW5kZXhfa29iamVjdCwgY3B1KSk7Ci0JcGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpID0gTlVMTDsKLQlwZXJfY3B1KGluZGV4X2tvYmplY3QsIGNwdSkgPSBOVUxMOworCWtmcmVlKHBlcl9jcHUoaWNpX2NhY2hlX2tvYmplY3QsIGNwdSkpOworCWtmcmVlKHBlcl9jcHUoaWNpX2luZGV4X2tvYmplY3QsIGNwdSkpOworCXBlcl9jcHUoaWNpX2NhY2hlX2tvYmplY3QsIGNwdSkgPSBOVUxMOworCXBlcl9jcHUoaWNpX2luZGV4X2tvYmplY3QsIGNwdSkgPSBOVUxMOwogCWZyZWVfY2FjaGVfYXR0cmlidXRlcyhjcHUpOwogfQogCkBAIC04ODIsMTQgKzg4MywxNCBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogQWxsb2NhdGUgYWxsIHJlcXVpcmVkIG1lbW9yeSAqLwotCXBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSA9CisJcGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSA9CiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkocGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSA9PSBOVUxMKSkKIAkJZ290byBlcnJfb3V0OwogCi0JcGVyX2NwdShpbmRleF9rb2JqZWN0LCBjcHUpID0ga3phbGxvYygKKwlwZXJfY3B1KGljaV9pbmRleF9rb2JqZWN0LCBjcHUpID0ga3phbGxvYygKIAkgICAgc2l6ZW9mKHN0cnVjdCBfaW5kZXhfa29iamVjdCkgKiBudW1fY2FjaGVfbGVhdmVzLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkocGVyX2NwdShpbmRleF9rb2JqZWN0LCBjcHUpID09IE5VTEwpKQorCWlmICh1bmxpa2VseShwZXJfY3B1KGljaV9pbmRleF9rb2JqZWN0LCBjcHUpID09IE5VTEwpKQogCQlnb3RvIGVycl9vdXQ7CiAKIAlyZXR1cm4gMDsKQEAgLTkxMyw3ICs5MTQsNyBAQAogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHZhbCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSwKKwlyZXR2YWwgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChwZXJfY3B1KGljaV9jYWNoZV9rb2JqZWN0LCBjcHUpLAogCQkJCSAgICAgICZrdHlwZV9wZXJjcHVfZW50cnksCiAJCQkJICAgICAgJnN5c19kZXYtPmtvYmosICIlcyIsICJjYWNoZSIpOwogCWlmIChyZXR2YWwgPCAwKSB7CkBAIC05MjcsMTIgKzkyOCwxMiBAQAogCQl0aGlzX29iamVjdC0+aW5kZXggPSBpOwogCQlyZXR2YWwgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmKHRoaXNfb2JqZWN0LT5rb2JqKSwKIAkJCQkJICAgICAgJmt0eXBlX2NhY2hlLAotCQkJCQkgICAgICBwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSksCisJCQkJCSAgICAgIHBlcl9jcHUoaWNpX2NhY2hlX2tvYmplY3QsIGNwdSksCiAJCQkJCSAgICAgICJpbmRleCUxbHUiLCBpKTsKIAkJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKIAkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCiAJCQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsIGopLT5rb2JqKSk7Ci0JCQlrb2JqZWN0X3B1dChwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSkpOworCQkJa29iamVjdF9wdXQocGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSk7CiAJCQljcHVpZDRfY2FjaGVfc3lzZnNfZXhpdChjcHUpOwogCQkJcmV0dXJuIHJldHZhbDsKIAkJfQpAQCAtOTQwLDcgKzk0MSw3IEBACiAJfQogCWNwdW1hc2tfc2V0X2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpOwogCi0Ja29iamVjdF91ZXZlbnQocGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpLCBLT0JKX0FERCk7CisJa29iamVjdF91ZXZlbnQocGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSwgS09CSl9BREQpOwogCXJldHVybiAwOwogfQogCkBAIC05NDksNyArOTUwLDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCi0JaWYgKHBlcl9jcHUoY3B1aWQ0X2luZm8sIGNwdSkgPT0gTlVMTCkKKwlpZiAocGVyX2NwdShpY2lfY3B1aWQ0X2luZm8sIGNwdSkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpKQogCQlyZXR1cm47CkBAIC05NTcsNyArOTU4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2FjaGVfbGVhdmVzOyBpKyspCiAJCWtvYmplY3RfcHV0KCYoSU5ERVhfS09CSkVDVF9QVFIoY3B1LCBpKS0+a29iaikpOwotCWtvYmplY3RfcHV0KHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSk7CisJa29iamVjdF9wdXQocGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSk7CiAJY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQoY3B1KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCmluZGV4IDQ3Mjc2M2QuLjczNzM0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKQEAgLTc0LDcgKzc0LDcgQEAKIAltLT5maW5pc2hlZCA9IDA7CiB9CiAKLXN0YXRpYyBjcHVtYXNrX3QgbWNlX2luamVjdF9jcHVtYXNrOworc3RhdGljIGNwdW1hc2tfdmFyX3QgbWNlX2luamVjdF9jcHVtYXNrOwogCiBzdGF0aWMgaW50IG1jZV9yYWlzZV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQpAQCAtODIsOSArODIsOSBAQAogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IChzdHJ1Y3QgZGllX2FyZ3MgKilkYXRhOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IG1jZSAqbSA9ICZfX2dldF9jcHVfdmFyKGluamVjdG0pOwotCWlmICh2YWwgIT0gRElFX05NSV9JUEkgfHwgIWNwdV9pc3NldChjcHUsIG1jZV9pbmplY3RfY3B1bWFzaykpCisJaWYgKHZhbCAhPSBESUVfTk1JX0lQSSB8fCAhY3B1bWFza190ZXN0X2NwdShjcHUsIG1jZV9pbmplY3RfY3B1bWFzaykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKLQljcHVfY2xlYXIoY3B1LCBtY2VfaW5qZWN0X2NwdW1hc2spOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbWNlX2luamVjdF9jcHVtYXNrKTsKIAlpZiAobS0+aW5qZWN0X2ZsYWdzICYgTUNKX0VYQ0VQVElPTikKIAkJcmFpc2VfZXhjZXB0aW9uKG0sIGFyZ3MtPnJlZ3MpOwogCWVsc2UgaWYgKG0tPnN0YXR1cykKQEAgLTE0OCwyMiArMTQ4LDIyIEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJCWludCBjcHU7CiAJCWdldF9vbmxpbmVfY3B1cygpOwotCQltY2VfaW5qZWN0X2NwdW1hc2sgPSBjcHVfb25saW5lX21hcDsKLQkJY3B1X2NsZWFyKGdldF9jcHUoKSwgbWNlX2luamVjdF9jcHVtYXNrKTsKKwkJY3B1bWFza19jb3B5KG1jZV9pbmplY3RfY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoZ2V0X2NwdSgpLCBtY2VfaW5qZWN0X2NwdW1hc2spOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQkJc3RydWN0IG1jZSAqbWNwdSA9ICZwZXJfY3B1KGluamVjdG0sIGNwdSk7CiAJCQlpZiAoIW1jcHUtPmZpbmlzaGVkIHx8CiAJCQkgICAgTUNKX0NUWChtY3B1LT5pbmplY3RfZmxhZ3MpICE9IE1DSl9DVFhfUkFORE9NKQotCQkJCWNwdV9jbGVhcihjcHUsIG1jZV9pbmplY3RfY3B1bWFzayk7CisJCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtY2VfaW5qZWN0X2NwdW1hc2spOwogCQl9Ci0JCWlmICghY3B1c19lbXB0eShtY2VfaW5qZWN0X2NwdW1hc2spKQotCQkJYXBpYy0+c2VuZF9JUElfbWFzaygmbWNlX2luamVjdF9jcHVtYXNrLCBOTUlfVkVDVE9SKTsKKwkJaWYgKCFjcHVtYXNrX2VtcHR5KG1jZV9pbmplY3RfY3B1bWFzaykpCisJCQlhcGljLT5zZW5kX0lQSV9tYXNrKG1jZV9pbmplY3RfY3B1bWFzaywgTk1JX1ZFQ1RPUik7CiAJCXN0YXJ0ID0gamlmZmllczsKLQkJd2hpbGUgKCFjcHVzX2VtcHR5KG1jZV9pbmplY3RfY3B1bWFzaykpIHsKKwkJd2hpbGUgKCFjcHVtYXNrX2VtcHR5KG1jZV9pbmplY3RfY3B1bWFzaykpIHsKIAkJCWlmICghdGltZV9iZWZvcmUoamlmZmllcywgc3RhcnQgKyAyKkhaKSkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJUaW1lb3V0IHdhaXRpbmcgZm9yIG1jZSBpbmplY3QgTk1JICVseFxuIiwKLQkJCQkJKmNwdXNfYWRkcihtY2VfaW5qZWN0X2NwdW1hc2spKTsKKwkJCQkJKmNwdW1hc2tfYml0cyhtY2VfaW5qZWN0X2NwdW1hc2spKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWNwdV9yZWxheCgpOwpAQCAtMjEwLDYgKzIxMCw4IEBACiAKIHN0YXRpYyBpbnQgaW5qZWN0X2luaXQodm9pZCkKIHsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZtY2VfaW5qZWN0X2NwdW1hc2ssIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKIAlwcmludGsoS0VSTl9JTkZPICJNYWNoaW5lIGNoZWNrIGluamVjdG9yIGluaXRpYWxpemVkXG4iKTsKIAltY2VfY2hyZGV2X29wcy53cml0ZSA9IG1jZV93cml0ZTsKIAlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJm1jZV9yYWlzZV9uYik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IGQ3ZWJmMjUuLmE4YWFjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC0xMzg4LDEzICsxMzg4LDE0IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpOwogCWludCAqbiA9ICZfX2dldF9jcHVfdmFyKG1jZV9uZXh0X2ludGVydmFsKTsKIAorCXNldHVwX3RpbWVyKHQsIG1jZV9zdGFydF90aW1lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwogCWlmIChtY2VfaWdub3JlX2NlKQogCQlyZXR1cm47CiAKIAkqbiA9IGNoZWNrX2ludGVydmFsICogSFo7CiAJaWYgKCEqbikKIAkJcmV0dXJuOwotCXNldHVwX3RpbWVyKHQsIG1jZV9zdGFydF90aW1lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl0LT5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgKm4pOwogCWFkZF90aW1lcl9vbih0LCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQpAQCAtMTkyOCw3ICsxOTI5LDcgQEAKIAkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KG1jZV9kZXYsIGNwdSksICZtY2VfYmFua3Nbal0uYXR0cik7CiBlcnJvcjoKIAl3aGlsZSAoLS1pID49IDApCi0JCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShtY2VfZGV2LCBjcHUpLCAmbWNlX2JhbmtzW2ldLmF0dHIpOworCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUobWNlX2RldiwgY3B1KSwgbWNlX2F0dHJzW2ldKTsKIAogCXN5c2Rldl91bnJlZ2lzdGVyKCZwZXJfY3B1KG1jZV9kZXYsIGNwdSkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwppbmRleCA0ZmVmOTg1Li44MWM0OTllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKQEAgLTI1Niw2ICsyNTYsMTYgQEAKIAlhY2tfQVBJQ19pcnEoKTsKIH0KIAorLyogVGhlcm1hbCBtb25pdG9yaW5nIGRlcGVuZHMgb24gQVBJQywgQUNQSSBhbmQgY2xvY2sgbW9kdWxhdGlvbiAqLworc3RhdGljIGludCBpbnRlbF90aGVybWFsX3N1cHBvcnRlZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAwOworCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BQ1BJKSB8fCAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BQ0MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwogdm9pZCBfX2luaXQgbWNoZWNrX2ludGVsX3RoZXJtX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMjYzLDggKzI3Myw3IEBACiAJICogTFZUIHZhbHVlIG9uIEJTUCBhbmQgdXNlIHRoYXQgdmFsdWUgdG8gcmVzdG9yZSBBUHMnIHRoZXJtYWwgTFZUCiAJICogZW50cnkgQklPUyBwcm9ncmFtbWVkIGxhdGVyCiAJICovCi0JaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FDUEkpICYmCi0JCWNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FDQykpCisJaWYgKGludGVsX3RoZXJtYWxfc3VwcG9ydGVkKCZib290X2NwdV9kYXRhKSkKIAkJbHZ0dGhtcl9pbml0ID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7CiB9CiAKQEAgLTI3NCw4ICsyODMsNyBAQAogCWludCB0bTIgPSAwOwogCXUzMiBsLCBoOwogCi0JLyogVGhlcm1hbCBtb25pdG9yaW5nIGRlcGVuZHMgb24gQUNQSSBhbmQgY2xvY2sgbW9kdWxhdGlvbiovCi0JaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDUEkpIHx8ICFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDQykpCisJaWYgKCFpbnRlbF90aGVybWFsX3N1cHBvcnRlZChjKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTMzOSw4ICszNDcsOCBAQAogCWwgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbCAmIH5BUElDX0xWVF9NQVNLRUQpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRoZXJtYWwgbW9uaXRvcmluZyBlbmFibGVkICglcylcbiIsCi0JICAgICAgIGNwdSwgdG0yID8gIlRNMiIgOiAiVE0xIik7CisJcHJpbnRrX29uY2UoS0VSTl9JTkZPICJDUFUwOiBUaGVybWFsIG1vbml0b3JpbmcgZW5hYmxlZCAoJXMpXG4iLAorCQkgICAgICAgdG0yID8gIlRNMiIgOiAiVE0xIik7CiAKIAkvKiBlbmFibGUgdGhlcm1hbCB0aHJvdHRsZSBwcm9jZXNzaW5nICovCiAJYXRvbWljX3NldCgmdGhlcm1fdGhyb3RfZW4sIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwppbmRleCAzYzFiMTJkLi5lMDA2ZTU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNkZWZpbmUgTElORV9TSVpFIDgwCkBAIC0xMzMsOCArMTM0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYXNlID0gc2ltcGxlX3N0cnRvdWxsKGxpbmUgKyA1LCAmcHRyLCAwKTsKLQl3aGlsZSAoaXNzcGFjZSgqcHRyKSkKLQkJcHRyKys7CisJcHRyID0gc2tpcF9zcGFjZXMocHRyKTsKIAogCWlmIChzdHJuY21wKHB0ciwgInNpemU9IiwgNSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQyLDE0ICsxNDIsMTEgQEAKIAlzaXplID0gc2ltcGxlX3N0cnRvdWxsKHB0ciArIDUsICZwdHIsIDApOwogCWlmICgoYmFzZSAmIDB4ZmZmKSB8fCAoc2l6ZSAmIDB4ZmZmKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jd2hpbGUgKGlzc3BhY2UoKnB0cikpCi0JCXB0cisrOworCXB0ciA9IHNraXBfc3BhY2VzKHB0cik7CiAKIAlpZiAoc3RybmNtcChwdHIsICJ0eXBlPSIsIDUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlwdHIgKz0gNTsKLQl3aGlsZSAoaXNzcGFjZSgqcHRyKSkKLQkJcHRyKys7CisJcHRyID0gc2tpcF9zcGFjZXMocHRyICsgNSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTVRSUl9OVU1fVFlQRVM7ICsraSkgewogCQlpZiAoc3RyY21wKHB0ciwgbXRycl9zdHJpbmdzW2ldKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggYWIxYThhOC4uYzIyM2I3ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTE2MzIsNiArMTYzMiw3IEBACiAKIAlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKIAlkYXRhLmFkZHIJPSAwOworCWRhdGEucmF3CT0gTlVMTDsKIAlyZWdzLmlwCQk9IDA7CiAKIAkvKgpAQCAtMTc0OSw2ICsxNzUwLDcgQEAKIAl1NjQgdmFsOwogCiAJZGF0YS5hZGRyID0gMDsKKwlkYXRhLnJhdyA9IE5VTEw7CiAKIAljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKQEAgLTE3OTQsNiArMTc5Niw3IEBACiAJdTY0IGFjaywgc3RhdHVzOwogCiAJZGF0YS5hZGRyID0gMDsKKwlkYXRhLnJhdyA9IE5VTEw7CiAKIAljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKQEAgLTE4NTcsNiArMTg2MCw3IEBACiAJdTY0IHZhbDsKIAogCWRhdGEuYWRkciA9IDA7CisJZGF0YS5yYXcgPSBOVUxMOwogCiAJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCkBAIC0yMDYyLDEyICsyMDY2LDYgQEAKIAogCXg4Nl9wbXUgPSBwNl9wbXU7CiAKLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQlwcl9pbmZvKCJubyBBUElDLCBib290IHdpdGggdGhlIFwibGFwaWNcIiBib290IHBhcmFtZXRlciB0byBmb3JjZS1lbmFibGUgaXQuXG4iKTsKLQkJcHJfaW5mbygibm8gaGFyZHdhcmUgc2FtcGxpbmcgaW50ZXJydXB0IGF2YWlsYWJsZS5cbiIpOwotCQl4ODZfcG11LmFwaWMgPSAwOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0yMTU5LDYgKzIxNTcsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHBtdV9jaGVja19hcGljKHZvaWQpCit7CisJaWYgKGNwdV9oYXNfYXBpYykKKwkJcmV0dXJuOworCisJeDg2X3BtdS5hcGljID0gMDsKKwlwcl9pbmZvKCJubyBBUElDLCBib290IHdpdGggdGhlIFwibGFwaWNcIiBib290IHBhcmFtZXRlciB0byBmb3JjZS1lbmFibGUgaXQuXG4iKTsKKwlwcl9pbmZvKCJubyBoYXJkd2FyZSBzYW1wbGluZyBpbnRlcnJ1cHQgYXZhaWxhYmxlLlxuIik7Cit9CisKIHZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMjE4MCw2ICsyMTg4LDggQEAKIAkJcmV0dXJuOwogCX0KIAorCXBtdV9jaGVja19hcGljKCk7CisKIAlwcl9jb250KCIlcyBQTVUgZHJpdmVyLlxuIiwgeDg2X3BtdS5uYW1lKTsKIAogCWlmICh4ODZfcG11Lm51bV9ldmVudHMgPiBYODZfUE1DX01BWF9HRU5FUklDKSB7CkBAIC0yMjg3LDcgKzIyOTcsNyBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19ubWlfZW50cnkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgaW5fbm1pX2ZyYW1lKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGluX2lnbm9yZWRfZnJhbWUpOwogCiAKIHN0YXRpYyB2b2lkCkBAIC0yMzAzLDggKzIzMTMsOSBAQAogCiBzdGF0aWMgaW50IGJhY2t0cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQogewotCXBlcl9jcHUoaW5fbm1pX2ZyYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0KLQkJCXg4Nl9pc19zdGFja19pZChOTUlfU1RBQ0ssIG5hbWUpOworCXBlcl9jcHUoaW5faWdub3JlZF9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9CisJCQl4ODZfaXNfc3RhY2tfaWQoTk1JX1NUQUNLLCBuYW1lKSB8fAorCQkJeDg2X2lzX3N0YWNrX2lkKERFQlVHX1NUQUNLLCBuYW1lKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMxMyw3ICsyMzI0LDcgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gZGF0YTsKIAotCWlmIChwZXJfY3B1KGluX25taV9mcmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKwlpZiAocGVyX2NwdShpbl9pZ25vcmVkX2ZyYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCkpKQogCQlyZXR1cm47CiAKIAlpZiAocmVsaWFibGUpCkBAIC0yMzI1LDYgKzIzMzYsNyBAQAogCS53YXJuaW5nX3N5bWJvbAkJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQkJPSBiYWNrdHJhY2Vfc3RhY2ssCiAJLmFkZHJlc3MJCT0gYmFja3RyYWNlX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFja19icCwKIH07CiAKICNpbmNsdWRlICIuLi9kdW1wc3RhY2suaCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKaW5kZXggN2VmMjRhNy4uY2IyN2ZkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKQEAgLTE4Nyw3ICsxODcsOCBAQAogCWludCBpLCBlcnIgPSAwOwogCWkgPSAwOwogCi0JaWYgKHJlZ2lzdGVyX2NocmRldihDUFVJRF9NQUpPUiwgImNwdS9jcHVpZCIsICZjcHVpZF9mb3BzKSkgeworCWlmIChfX3JlZ2lzdGVyX2NocmRldihDUFVJRF9NQUpPUiwgMCwgTlJfQ1BVUywKKwkJCSAgICAgICJjcHUvY3B1aWQiLCAmY3B1aWRfZm9wcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHVpZDogdW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgY3B1aWRcbiIsCiAJCSAgICAgICBDUFVJRF9NQUpPUik7CiAJCWVyciA9IC1FQlVTWTsKQEAgLTIxNiw3ICsyMTcsNyBAQAogCX0KIAljbGFzc19kZXN0cm95KGNwdWlkX2NsYXNzKTsKIG91dF9jaHJkZXY6Ci0JdW5yZWdpc3Rlcl9jaHJkZXYoQ1BVSURfTUFKT1IsICJjcHUvY3B1aWQiKTsKKwlfX3VucmVnaXN0ZXJfY2hyZGV2KENQVUlEX01BSk9SLCAwLCBOUl9DUFVTLCAiY3B1L2NwdWlkIik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kcy5jIGIvYXJjaC94ODYva2VybmVsL2RzLmMKaW5kZXggZWY0MmEwMy4uMWM0NzM5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2RzLmMKQEAgLTI2NSwxMyArMjY1LDEzIEBACiAJaW50CQkJY3B1OwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkc19jb250ZXh0ICosIGNwdV9jb250ZXh0KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZHNfY29udGV4dCAqLCBjcHVfZHNfY29udGV4dCk7CiAKIAogc3RhdGljIHN0cnVjdCBkc19jb250ZXh0ICpkc19nZXRfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCiB7CiAJc3RydWN0IGRzX2NvbnRleHQgKipwX2NvbnRleHQgPQotCQkodGFzayA/ICZ0YXNrLT50aHJlYWQuZHNfY3R4IDogJnBlcl9jcHUoY3B1X2NvbnRleHQsIGNwdSkpOworCQkodGFzayA/ICZ0YXNrLT50aHJlYWQuZHNfY3R4IDogJnBlcl9jcHUoY3B1X2RzX2NvbnRleHQsIGNwdSkpOwogCXN0cnVjdCBkc19jb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKIAlzdHJ1Y3QgZHNfY29udGV4dCAqbmV3X2NvbnRleHQgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggYjhjZTE2NS4uYzU2YmMyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTA5LDYgKzEwOSwzMCBAQAogCX0KIAlyZXR1cm4gYnA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwcmludF9jb250ZXh0X3N0YWNrKTsKKwordW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFja19icChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKWJwOworCXVuc2lnbmVkIGxvbmcgKnJldF9hZGRyID0gJmZyYW1lLT5yZXR1cm5fYWRkcmVzczsKKworCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sIHJldF9hZGRyLCBzaXplb2YoKnJldF9hZGRyKSwgZW5kKSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcmV0X2FkZHI7CisKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworCQkJb3BzLT5hZGRyZXNzKGRhdGEsIGFkZHIsIDEpOworCQkJZnJhbWUgPSBmcmFtZS0+bmV4dF9mcmFtZTsKKwkJCXJldF9hZGRyID0gJmZyYW1lLT5yZXR1cm5fYWRkcmVzczsKKwkJCXByaW50X2Z0cmFjZV9ncmFwaF9hZGRyKGFkZHIsIGRhdGEsIG9wcywgdGluZm8sIGdyYXBoKTsKKwkJfQorCX0KKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnJhbWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwcmludF9jb250ZXh0X3N0YWNrX2JwKTsKIAogCiBzdGF0aWMgdm9pZApAQCAtMTQxLDEwICsxNjUsMTEgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBwcmludF90cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcgPSBwcmludF90cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbCA9IHByaW50X3RyYWNlX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IHByaW50X3RyYWNlX3N0YWNrLAotCS5hZGRyZXNzID0gcHJpbnRfdHJhY2VfYWRkcmVzcywKKwkud2FybmluZwkJPSBwcmludF90cmFjZV93YXJuaW5nLAorCS53YXJuaW5nX3N5bWJvbAkJPSBwcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCQk9IHByaW50X3RyYWNlX3N0YWNrLAorCS5hZGRyZXNzCQk9IHByaW50X3RyYWNlX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIHZvaWQKQEAgLTE4OCw3ICsyMTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKIAotc3RhdGljIHJhd19zcGlubG9ja190IGRpZV9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBkaWVfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiBzdGF0aWMgaW50IGRpZV9vd25lciA9IC0xOwogc3RhdGljIHVuc2lnbmVkIGludCBkaWVfbmVzdF9jb3VudDsKIApAQCAtMjA3LDExICsyMzIsMTEgQEAKIAkvKiByYWN5LCBidXQgYmV0dGVyIHRoYW4gcmlza2luZyBkZWFkbG9jay4gKi8KIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoIV9fcmF3X3NwaW5fdHJ5bG9jaygmZGllX2xvY2spKSB7CisJaWYgKCFhcmNoX3NwaW5fdHJ5bG9jaygmZGllX2xvY2spKSB7CiAJCWlmIChjcHUgPT0gZGllX293bmVyKQogCQkJLyogbmVzdGVkIG9vcHMuIHNob3VsZCBzdG9wIGV2ZW50dWFsbHkgKi87CiAJCWVsc2UKLQkJCV9fcmF3X3NwaW5fbG9jaygmZGllX2xvY2spOworCQkJYXJjaF9zcGluX2xvY2soJmRpZV9sb2NrKTsKIAl9CiAJZGllX25lc3RfY291bnQrKzsKIAlkaWVfb3duZXIgPSBjcHU7CkBAIC0yMzEsNyArMjU2LDcgQEAKIAlkaWVfbmVzdF9jb3VudC0tOwogCWlmICghZGllX25lc3RfY291bnQpCiAJCS8qIE5lc3QgY291bnQgcmVhY2hlcyB6ZXJvLCByZWxlYXNlIHRoZSBsb2NrLiAqLwotCQlfX3Jhd19zcGluX3VubG9jaygmZGllX2xvY2spOworCQlhcmNoX3NwaW5fdW5sb2NrKCZkaWVfbG9jayk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlvb3BzX2V4aXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oCmluZGV4IDgxMDg2YzIuLjRmZDE0MjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmgKQEAgLTE0LDEyICsxNCw2IEBACiAjZGVmaW5lIGdldF9icChicCkgYXNtKCJtb3ZxICUlcmJwLCAlMCIgOiAiPXIiIChicCkgOikKICNlbmRpZgogCi1leHRlcm4gdW5zaWduZWQgbG9uZwotcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKLQkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEsCi0JCXVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCk7Ci0KIGV4dGVybiB2b2lkCiBzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCmluZGV4IGUwZWQ0YzcuLmFlNzc1Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCQljb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQogCQkJKCh1bnNpZ25lZCBsb25nKXN0YWNrICYgKH4oVEhSRUFEX1NJWkUgLSAxKSkpOwotCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2soY29udGV4dCwgc3RhY2ssIGJwLCBvcHMsIGRhdGEsIE5VTEwsICZncmFwaCk7CisJCWJwID0gb3BzLT53YWxrX3N0YWNrKGNvbnRleHQsIHN0YWNrLCBicCwgb3BzLCBkYXRhLCBOVUxMLCAmZ3JhcGgpOwogCiAJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKiljb250ZXh0LT5wcmV2aW91c19lc3A7CiAJCWlmICghc3RhY2spCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggOGU3NDA5My4uMGFkOTU5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMTAzLDYgKzEwMywzNSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIGludAoraW5faXJxX3N0YWNrKHVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nICppcnFfc3RhY2ssCisJICAgICB1bnNpZ25lZCBsb25nICppcnFfc3RhY2tfZW5kKQoreworCXJldHVybiAoc3RhY2sgPj0gaXJxX3N0YWNrICYmIHN0YWNrIDwgaXJxX3N0YWNrX2VuZCk7Cit9CisKKy8qCisgKiBXZSBhcmUgcmV0dXJuaW5nIGZyb20gdGhlIGlycSBzdGFjayBhbmQgZ28gdG8gdGhlIHByZXZpb3VzIG9uZS4KKyAqIElmIHRoZSBwcmV2aW91cyBzdGFjayBpcyBhbHNvIGluIHRoZSBpcnEgc3RhY2ssIHRoZW4gYnAgaW4gdGhlIGZpcnN0CisgKiBmcmFtZSBvZiB0aGUgaXJxIHN0YWNrIHBvaW50cyB0byB0aGUgcHJldmlvdXMsIGludGVycnVwdGVkIG9uZS4KKyAqIE90aGVyd2lzZSB3ZSBoYXZlIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb246IFdlIGZpcnN0IHNhdmUKKyAqIHRoZSBicCBvZiB0aGUgcHJldmlvdXMgc3RhY2ssIHRoZW4gd2Ugc3dpdGNoIHRoZSBzdGFjayB0byB0aGUgaXJxIG9uZQorICogYW5kIHNhdmUgYSBuZXcgYnAgdGhhdCBsaW5rcyB0byB0aGUgcHJldmlvdXMgb25lLgorICogKFNlZSBzYXZlX2FyZ3MoKSkKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitmaXh1cF9icF9pcnFfbGluayh1bnNpZ25lZCBsb25nIGJwLCB1bnNpZ25lZCBsb25nICpzdGFjaywKKwkJICB1bnNpZ25lZCBsb25nICppcnFfc3RhY2ssIHVuc2lnbmVkIGxvbmcgKmlycV9zdGFja19lbmQpCit7CisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKWJwOworCisJaWYgKCFpbl9pcnFfc3RhY2soc3RhY2ssIGlycV9zdGFjaywgaXJxX3N0YWNrX2VuZCkpCisJCXJldHVybiAodW5zaWduZWQgbG9uZylmcmFtZS0+bmV4dF9mcmFtZTsKKyNlbmRpZgorCXJldHVybiBicDsKK30KKwogLyoKICAqIHg4Ni02NCBjYW4gaGF2ZSB1cCB0byB0aHJlZSBrZXJuZWwgc3RhY2tzOgogICogcHJvY2VzcyBzdGFjawpAQCAtMTU5LDggKzE4OCw4IEBACiAJCQlpZiAob3BzLT5zdGFjayhkYXRhLCBpZCkgPCAwKQogCQkJCWJyZWFrOwogCi0JCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2sodGluZm8sIHN0YWNrLCBicCwgb3BzLAotCQkJCQkJIGRhdGEsIGVzdGFja19lbmQsICZncmFwaCk7CisJCQlicCA9IG9wcy0+d2Fsa19zdGFjayh0aW5mbywgc3RhY2ssIGJwLCBvcHMsCisJCQkJCSAgICAgZGF0YSwgZXN0YWNrX2VuZCwgJmdyYXBoKTsKIAkJCW9wcy0+c3RhY2soZGF0YSwgIjxFT0U+Iik7CiAJCQkvKgogCQkJICogV2UgbGluayB0byB0aGUgbmV4dCBzdGFjayB2aWEgdGhlCkBAIC0xNzUsNyArMjA0LDcgQEAKIAkJCWlycV9zdGFjayA9IGlycV9zdGFja19lbmQgLQogCQkJCShJUlFfU1RBQ0tfU0laRSAtIDY0KSAvIHNpemVvZigqaXJxX3N0YWNrKTsKIAotCQkJaWYgKHN0YWNrID49IGlycV9zdGFjayAmJiBzdGFjayA8IGlycV9zdGFja19lbmQpIHsKKwkJCWlmIChpbl9pcnFfc3RhY2soc3RhY2ssIGlycV9zdGFjaywgaXJxX3N0YWNrX2VuZCkpIHsKIAkJCQlpZiAob3BzLT5zdGFjayhkYXRhLCAiSVJRIikgPCAwKQogCQkJCQlicmVhazsKIAkJCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2sodGluZm8sIHN0YWNrLCBicCwKQEAgLTE4Niw2ICsyMTUsOCBAQAogCQkJCSAqIHBvaW50ZXIgKGluZGV4IC0xIHRvIGVuZCkgaW4gdGhlIElSUSBzdGFjazoKIAkJCQkgKi8KIAkJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIChpcnFfc3RhY2tfZW5kWy0xXSk7CisJCQkJYnAgPSBmaXh1cF9icF9pcnFfbGluayhicCwgc3RhY2ssIGlycV9zdGFjaywKKwkJCQkJCSAgICAgICBpcnFfc3RhY2tfZW5kKTsKIAkJCQlpcnFfc3RhY2tfZW5kID0gTlVMTDsKIAkJCQlvcHMtPnN0YWNrKGRhdGEsICJFT0kiKTsKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGQxN2Q0ODIuLjA1ZWQ3YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAvKgogICogRWFybHkgcmVzZXJ2ZWQgbWVtb3J5IGFyZWFzLgogICovCi0jZGVmaW5lIE1BWF9FQVJMWV9SRVMgMjAKKyNkZWZpbmUgTUFYX0VBUkxZX1JFUyAzMgogCiBzdHJ1Y3QgZWFybHlfcmVzIHsKIAl1NjQgc3RhcnQsIGVuZDsKQEAgLTczMiw3ICs3MzIsMTYgQEAKIAljaGFyIG92ZXJsYXBfb2s7CiB9Owogc3RhdGljIHN0cnVjdCBlYXJseV9yZXMgZWFybHlfcmVzW01BWF9FQVJMWV9SRVNdIF9faW5pdGRhdGEgPSB7Ci0JeyAwLCBQQUdFX1NJWkUsICJCSU9TIGRhdGEgcGFnZSIgfSwJLyogQklPUyBkYXRhIHBhZ2UgKi8KKwl7IDAsIFBBR0VfU0laRSwgIkJJT1MgZGF0YSBwYWdlIiwgMSB9LAkvKiBCSU9TIGRhdGEgcGFnZSAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIEJ1dCBmaXJzdCBwaW5jaCBhIGZldyBmb3IgdGhlIHN0YWNrL3RyYW1wb2xpbmUgc3R1ZmYKKwkgKiBGSVhNRTogRG9uJ3QgbmVlZCB0aGUgZXh0cmEgcGFnZSBhdCA0SywgYnV0IG5lZWQgdG8gZml4CisJICogdHJhbXBvbGluZSBiZWZvcmUgcmVtb3ZpbmcgaXQuIChzZWUgdGhlIEdEVCBzdHVmZikKKwkgKi8KKwl7IFBBR0VfU0laRSwgUEFHRV9TSVpFLCAiRVggVFJBTVBPTElORSIsIDEgfSwKKyNlbmRpZgorCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggNTBiOWMyMi4uNDRhOGUwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKQEAgLTcyNSwyMiArNzI1LDYxIEBACiAvKgogICogU3lzdGVtIGNhbGxzIHRoYXQgbmVlZCBhIHB0X3JlZ3MgcG9pbnRlci4KICAqLwotI2RlZmluZSBQVFJFR1NDQUxMKG5hbWUpIFwKKyNkZWZpbmUgUFRSRUdTQ0FMTDAobmFtZSkgXAogCUFMSUdOOyBcCiBwdHJlZ3NfIyNuYW1lOiBcCiAJbGVhbCA0KCVlc3ApLCVlYXg7IFwKIAlqbXAgc3lzXyMjbmFtZTsKIAotUFRSRUdTQ0FMTChpb3BsKQotUFRSRUdTQ0FMTChmb3JrKQotUFRSRUdTQ0FMTChjbG9uZSkKLVBUUkVHU0NBTEwodmZvcmspCi1QVFJFR1NDQUxMKGV4ZWN2ZSkKLVBUUkVHU0NBTEwoc2lnYWx0c3RhY2spCi1QVFJFR1NDQUxMKHNpZ3JldHVybikKLVBUUkVHU0NBTEwocnRfc2lncmV0dXJuKQotUFRSRUdTQ0FMTCh2bTg2KQotUFRSRUdTQ0FMTCh2bTg2b2xkKQorI2RlZmluZSBQVFJFR1NDQUxMMShuYW1lKSBcCisJQUxJR047IFwKK3B0cmVnc18jI25hbWU6IFwKKwlsZWFsIDQoJWVzcCksJWVkeDsgXAorCW1vdmwgKFBUX0VCWCs0KSglZXNwKSwlZWF4OyBcCisJam1wIHN5c18jI25hbWU7CisKKyNkZWZpbmUgUFRSRUdTQ0FMTDIobmFtZSkgXAorCUFMSUdOOyBcCitwdHJlZ3NfIyNuYW1lOiBcCisJbGVhbCA0KCVlc3ApLCVlY3g7IFwKKwltb3ZsIChQVF9FQ1grNCkoJWVzcCksJWVkeDsgXAorCW1vdmwgKFBUX0VCWCs0KSglZXNwKSwlZWF4OyBcCisJam1wIHN5c18jI25hbWU7CisKKyNkZWZpbmUgUFRSRUdTQ0FMTDMobmFtZSkgXAorCUFMSUdOOyBcCitwdHJlZ3NfIyNuYW1lOiBcCisJbGVhbCA0KCVlc3ApLCVlYXg7IFwKKwlwdXNobCAlZWF4OyBcCisJbW92bCBQVF9FRFgoJWVheCksJWVjeDsgXAorCW1vdmwgUFRfRUNYKCVlYXgpLCVlZHg7IFwKKwltb3ZsIFBUX0VCWCglZWF4KSwlZWF4OyBcCisJY2FsbCBzeXNfIyNuYW1lOyBcCisJYWRkbCAkNCwlZXNwOyBcCisJcmV0CisKK1BUUkVHU0NBTEwxKGlvcGwpCitQVFJFR1NDQUxMMChmb3JrKQorUFRSRUdTQ0FMTDAodmZvcmspCitQVFJFR1NDQUxMMyhleGVjdmUpCitQVFJFR1NDQUxMMihzaWdhbHRzdGFjaykKK1BUUkVHU0NBTEwwKHNpZ3JldHVybikKK1BUUkVHU0NBTEwwKHJ0X3NpZ3JldHVybikKK1BUUkVHU0NBTEwyKHZtODYpCitQVFJFR1NDQUxMMSh2bTg2b2xkKQorCisvKiBDbG9uZSBpcyBhbiBvZGRiYWxsLiAgVGhlIDR0aCBhcmcgaXMgaW4gJWVkaSAqLworCUFMSUdOOworcHRyZWdzX2Nsb25lOgorCWxlYWwgNCglZXNwKSwlZWF4CisJcHVzaGwgJWVheAorCXB1c2hsIFBUX0VESSglZWF4KQorCW1vdmwgUFRfRURYKCVlYXgpLCVlY3gKKwltb3ZsIFBUX0VDWCglZWF4KSwlZWR4CisJbW92bCBQVF9FQlgoJWVheCksJWVheAorCWNhbGwgc3lzX2Nsb25lCisJYWRkbCAkOCwlZXNwCisJcmV0CiAKIC5tYWNybyBGSVhVUF9FU1BGSVhfU1RBQ0sKIC8qCkBAIC0xMDA4LDEyICsxMDQ3LDggQEAKIEVOVFJZKGtlcm5lbF90aHJlYWRfaGVscGVyKQogCXB1c2hsICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MgZm9yIHVud2luZGVyCiAJQ0ZJX1NUQVJUUFJPQwotCW1vdmwgJWVkeCwlZWF4Ci0JcHVzaCAlZWR4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQljYWxsIColZWJ4Ci0JcHVzaCAlZWF4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwltb3ZsICVlZGksJWVheAorCWNhbGwgKiVlc2kKIAljYWxsIGRvX2V4aXQKIAl1ZDIJCQkjIHBhZGRpbmcgZm9yIGNhbGwgdHJhY2UKIAlDRklfRU5EUFJPQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwppbmRleCA2M2JjYTc5Li4wNjk3ZmYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwpAQCAtMTA3NiwxMCArMTA3NiwxMCBAQAogCVRSQUNFX0lSUVNfT0ZGCiAJbW92cSAlcnNwLCVyZGkJCS8qIHB0X3JlZ3MgcG9pbnRlciAqLwogCXhvcmwgJWVzaSwlZXNpCQkvKiBubyBlcnJvciBjb2RlICovCi0JUEVSX0NQVShpbml0X3RzcywgJXJicCkKLQlzdWJxICRFWENFUFRJT05fU1RLU1osIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQorCVBFUl9DUFUoaW5pdF90c3MsICVyMTIpCisJc3VicSAkRVhDRVBUSU9OX1NUS1NaLCBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXIxMikKIAljYWxsIFxkb19zeW0KLQlhZGRxICRFWENFUFRJT05fU1RLU1osIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQorCWFkZHEgJEVYQ0VQVElPTl9TVEtTWiwgVFNTX2lzdCArIChcaXN0IC0gMSkgKiA4KCVyMTIpCiAJam1wIHBhcmFub2lkX2V4aXQJLyogJWVieDogbm8gc3dhcGdzIGZsYWcgKi8KIAlDRklfRU5EUFJPQwogRU5EKFxzeW0pCkBAIC0xMTY2LDYzICsxMTY2LDIwIEBACiAJam1wICAyYgogCS5wcmV2aW91cwogCi0vKgotICogQ3JlYXRlIGEga2VybmVsIHRocmVhZC4KLSAqCi0gKiBDIGV4dGVybiBpbnRlcmZhY2U6Ci0gKglleHRlcm4gbG9uZyBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotICoKLSAqIGFzbSBpbnB1dCBhcmd1bWVudHM6Ci0gKglyZGk6IGZuLCByc2k6IGFyZywgcmR4OiBmbGFncwotICovCi1FTlRSWShrZXJuZWxfdGhyZWFkKQotCUNGSV9TVEFSVFBST0MKLQlGQUtFX1NUQUNLX0ZSQU1FICRjaGlsZF9yaXAKLQlTQVZFX0FMTAotCi0JIyByZGk6IGZsYWdzLCByc2k6IHVzcCwgcmR4OiB3aWxsIGJlICZwdF9yZWdzCi0JbW92cSAlcmR4LCVyZGkKLQlvcnEgIGtlcm5lbF90aHJlYWRfZmxhZ3MoJXJpcCksJXJkaQotCW1vdnEgJC0xLCAlcnNpCi0JbW92cSAlcnNwLCAlcmR4Ci0KLQl4b3JsICVyOGQsJXI4ZAotCXhvcmwgJXI5ZCwlcjlkCi0KLQkjIGNsb25lIG5vdwotCWNhbGwgZG9fZm9yawotCW1vdnEgJXJheCxSQVgoJXJzcCkKLQl4b3JsICVlZGksJWVkaQotCi0JLyoKLQkgKiBJdCBpc24ndCB3b3J0aCB0byBjaGVjayBmb3IgcmVzY2hlZHVsZSBoZXJlLAotCSAqIHNvIGludGVybmFsbHkgdG8gdGhlIHg4Nl82NCBwb3J0IHlvdSBjYW4gcmVseSBvbiBrZXJuZWxfdGhyZWFkKCkKLQkgKiBub3QgdG8gcmVzY2hlZHVsZSB0aGUgY2hpbGQgYmVmb3JlIHJldHVybmluZywgdGhpcyBhdm9pZHMgdGhlIG5lZWQKLQkgKiBvZiBoYWNrcyBmb3IgZXhhbXBsZSB0byBmb3JrIG9mZiB0aGUgcGVyLUNQVSBpZGxlIHRhc2tzLgotCSAqIFtIb3BlZnVsbHkgbm8gZ2VuZXJpYyBjb2RlIHJlbGllcyBvbiB0aGUgcmVzY2hlZHVsZSAtQUtdCi0JICovCi0JUkVTVE9SRV9BTEwKLQlVTkZBS0VfU1RBQ0tfRlJBTUUKLQlyZXQKLQlDRklfRU5EUFJPQwotRU5EKGtlcm5lbF90aHJlYWQpCi0KLUVOVFJZKGNoaWxkX3JpcCkKK0VOVFJZKGtlcm5lbF90aHJlYWRfaGVscGVyKQogCXB1c2hxICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MKIAlDRklfU1RBUlRQUk9DCiAJLyoKIAkgKiBIZXJlIHdlIGFyZSBpbiB0aGUgY2hpbGQgYW5kIHRoZSByZWdpc3RlcnMgYXJlIHNldCBhcyB0aGV5IHdlcmUKIAkgKiBhdCBrZXJuZWxfdGhyZWFkKCkgaW52b2NhdGlvbiBpbiB0aGUgcGFyZW50LgogCSAqLwotCW1vdnEgJXJkaSwgJXJheAotCW1vdnEgJXJzaSwgJXJkaQotCWNhbGwgKiVyYXgKKwljYWxsIColcnNpCiAJIyBleGl0CiAJbW92ICVlYXgsICVlZGkKIAljYWxsIGRvX2V4aXQKIAl1ZDIJCQkjIHBhZGRpbmcgZm9yIGNhbGwgdHJhY2UKIAlDRklfRU5EUFJPQwotRU5EKGNoaWxkX3JpcCkKK0VORChrZXJuZWxfdGhyZWFkX2hlbHBlcikKIAogLyoKICAqIGV4ZWN2ZSgpLiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHVzZSBJUkVULCBub3QgU1lTUkVULCB0byBzZXQgdXAgYWxsIHN0YXRlIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlb2RlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VvZGVfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIwOGU4NS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VvZGVfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQU1EIEdlb2RlIHNvdXRoYnJpZGdlIHN1cHBvcnQgY29kZQotICogQ29weXJpZ2h0IChDKSAyMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBkZWJpYW4ub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgotCi1zdGF0aWMgc3RydWN0IHsKLQljaGFyICpuYW1lOwotCXUzMiBtc3I7Ci0JaW50IHNpemU7Ci0JdTMyIGJhc2U7Ci19IGxiYXJzW10gPSB7Ci0JeyAiZ2VvZGUtcG1zIiwgICBNU1JfTEJBUl9QTVMsIExCQVJfUE1TX1NJWkUsIDAgfSwKLQl7ICJnZW9kZS1hY3BpIiwgIE1TUl9MQkFSX0FDUEksIExCQVJfQUNQSV9TSVpFLCAwIH0sCi0JeyAiZ2VvZGUtZ3BpbyIsICBNU1JfTEJBUl9HUElPLCBMQkFSX0dQSU9fU0laRSwgMCB9LAotCXsgImdlb2RlLW1mZ3B0IiwgTVNSX0xCQVJfTUZHUFQsIExCQVJfTUZHUFRfU0laRSwgMCB9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9sYmFycyh2b2lkKQotewotCXUzMiBsbywgaGk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYmFycyk7IGkrKykgewotCQlyZG1zcihsYmFyc1tpXS5tc3IsIGxvLCBoaSk7Ci0JCWlmIChoaSAmIDB4MDEpCi0JCQlsYmFyc1tpXS5iYXNlID0gbG8gJiAweDAwMDBmZmZmOwotCi0JCWlmIChsYmFyc1tpXS5iYXNlID09IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImdlb2RlOiAgQ291bGRuJ3QgaW5pdGlhbGl6ZSAnJXMnXG4iLAotCQkJCQlsYmFyc1tpXS5uYW1lKTsKLQl9Ci19Ci0KLWludCBnZW9kZV9nZXRfZGV2X2Jhc2UodW5zaWduZWQgaW50IGRldikKLXsKLQlCVUdfT04oZGV2ID49IEFSUkFZX1NJWkUobGJhcnMpKTsKLQlyZXR1cm4gbGJhcnNbZGV2XS5iYXNlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2VvZGVfZ2V0X2Rldl9iYXNlKTsKLQotLyogPT09IEdQSU8gQVBJID09PSAqLwotCi12b2lkIGdlb2RlX2dwaW9fc2V0KHUzMiBncGlvLCB1bnNpZ25lZCBpbnQgcmVnKQotewotCXUzMiBiYXNlID0gZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9HUElPKTsKLQotCWlmICghYmFzZSkKLQkJcmV0dXJuOwotCi0JLyogbG93IGJhbmsgcmVnaXN0ZXIgKi8KLQlpZiAoZ3BpbyAmIDB4RkZGRikKLQkJb3V0bChncGlvICYgMHhGRkZGLCBiYXNlICsgcmVnKTsKLQkvKiBoaWdoIGJhbmsgcmVnaXN0ZXIgKi8KLQlncGlvID4+PSAxNjsKLQlpZiAoZ3BpbykKLQkJb3V0bChncGlvLCBiYXNlICsgMHg4MCArIHJlZyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZW9kZV9ncGlvX3NldCk7Ci0KLXZvaWQgZ2VvZGVfZ3Bpb19jbGVhcih1MzIgZ3BpbywgdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MzIgYmFzZSA9IGdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfR1BJTyk7Ci0KLQlpZiAoIWJhc2UpCi0JCXJldHVybjsKLQotCS8qIGxvdyBiYW5rIHJlZ2lzdGVyICovCi0JaWYgKGdwaW8gJiAweEZGRkYpCi0JCW91dGwoKGdwaW8gJiAweEZGRkYpIDw8IDE2LCBiYXNlICsgcmVnKTsKLQkvKiBoaWdoIGJhbmsgcmVnaXN0ZXIgKi8KLQlncGlvICY9ICgweEZGRkYgPDwgMTYpOwotCWlmIChncGlvKQotCQlvdXRsKGdwaW8sIGJhc2UgKyAweDgwICsgcmVnKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdlb2RlX2dwaW9fY2xlYXIpOwotCi1pbnQgZ2VvZGVfZ3Bpb19pc3NldCh1MzIgZ3BpbywgdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MzIgYmFzZSA9IGdlb2RlX2dldF9kZXZfYmFzZShHRU9ERV9ERVZfR1BJTyk7Ci0JdTMyIHZhbDsKLQotCWlmICghYmFzZSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBsb3cgYmFuayByZWdpc3RlciAqLwotCWlmIChncGlvICYgMHhGRkZGKSB7Ci0JCXZhbCA9IGlubChiYXNlICsgcmVnKSAmIChncGlvICYgMHhGRkZGKTsKLQkJaWYgKChncGlvICYgMHhGRkZGKSA9PSB2YWwpCi0JCQlyZXR1cm4gMTsKLQl9Ci0JLyogaGlnaCBiYW5rIHJlZ2lzdGVyICovCi0JZ3BpbyA+Pj0gMTY7Ci0JaWYgKGdwaW8pIHsKLQkJdmFsID0gaW5sKGJhc2UgKyAweDgwICsgcmVnKSAmIGdwaW87Ci0JCWlmIChncGlvID09IHZhbCkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdlb2RlX2dwaW9faXNzZXQpOwotCi12b2lkIGdlb2RlX2dwaW9fc2V0X2lycSh1bnNpZ25lZCBpbnQgZ3JvdXAsIHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIGxvLCBoaTsKLQotCWlmIChncm91cCA+IDcgfHwgaXJxID4gMTUpCi0JCXJldHVybjsKLQotCXJkbXNyKE1TUl9QSUNfWlNFTF9ISUdILCBsbywgaGkpOwotCi0JbG8gJj0gfigweEYgPDwgKGdyb3VwICogNCkpOwotCWxvIHw9IChpcnEgJiAweEYpIDw8IChncm91cCAqIDQpOwotCi0Jd3Jtc3IoTVNSX1BJQ19aU0VMX0hJR0gsIGxvLCBoaSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZW9kZV9ncGlvX3NldF9pcnEpOwotCi12b2lkIGdlb2RlX2dwaW9fc2V0dXBfZXZlbnQodW5zaWduZWQgaW50IGdwaW8sIGludCBwYWlyLCBpbnQgcG1lKQotewotCXUzMiBiYXNlID0gZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9HUElPKTsKLQl1MzIgb2Zmc2V0LCBzaGlmdCwgdmFsOwotCi0JaWYgKGdwaW8gPj0gMjQpCi0JCW9mZnNldCA9IEdQSU9fTUFQX1c7Ci0JZWxzZSBpZiAoZ3BpbyA+PSAxNikKLQkJb2Zmc2V0ID0gR1BJT19NQVBfWjsKLQllbHNlIGlmIChncGlvID49IDgpCi0JCW9mZnNldCA9IEdQSU9fTUFQX1k7Ci0JZWxzZQotCQlvZmZzZXQgPSBHUElPX01BUF9YOwotCi0Jc2hpZnQgPSAoZ3BpbyAlIDgpICogNDsKLQotCXZhbCA9IGlubChiYXNlICsgb2Zmc2V0KTsKLQotCS8qIENsZWFyIHdoYXRldmVyIHdhcyB0aGVyZSBiZWZvcmUgKi8KLQl2YWwgJj0gfigweEYgPDwgc2hpZnQpOwotCi0JLyogQW5kIHNldCB0aGUgbmV3IHZhbHVlICovCi0KLQl2YWwgfD0gKChwYWlyICYgNykgPDwgc2hpZnQpOwotCi0JLyogU2V0IHRoZSBQTUUgYml0IGlmIHRoaXMgaXMgYSBQTUUgZXZlbnQgKi8KLQotCWlmIChwbWUpCi0JCXZhbCB8PSAoMSA8PCAoc2hpZnQgKyAzKSk7Ci0KLQlvdXRsKHZhbCwgYmFzZSArIG9mZnNldCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZW9kZV9ncGlvX3NldHVwX2V2ZW50KTsKLQotaW50IGdlb2RlX2hhc192c2EyKHZvaWQpCi17Ci0Jc3RhdGljIGludCBoYXNfdnNhMiA9IC0xOwotCi0JaWYgKGhhc192c2EyID09IC0xKSB7Ci0JCXUxNiB2YWw7Ci0KLQkJLyoKLQkJICogVGhlIFZTQSBoYXMgdmlydHVhbCByZWdpc3RlcnMgdGhhdCB3ZSBjYW4gcXVlcnkgZm9yIGEKLQkJICogc2lnbmF0dXJlLgotCQkgKi8KLQkJb3V0dyhWU0FfVlJfVU5MT0NLLCBWU0FfVlJDX0lOREVYKTsKLQkJb3V0dyhWU0FfVlJfU0lHTkFUVVJFLCBWU0FfVlJDX0lOREVYKTsKLQotCQl2YWwgPSBpbncoVlNBX1ZSQ19EQVRBKTsKLQkJaGFzX3ZzYTIgPSAodmFsID09IEFNRF9WU0FfU0lHIHx8IHZhbCA9PSBHU1dfVlNBX1NJRyk7Ci0JfQotCi0JcmV0dXJuIGhhc192c2EyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2VvZGVfaGFzX3ZzYTIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBnZW9kZV9zb3V0aGJyaWRnZV9pbml0KHZvaWQpCi17Ci0JaWYgKCFpc19nZW9kZSgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWluaXRfbGJhcnMoKTsKLQkodm9pZCkgbWZncHRfdGltZXJfc2V0dXAoKTsKLQlyZXR1cm4gMDsKLX0KLQotcG9zdGNvcmVfaW5pdGNhbGwoZ2VvZGVfc291dGhicmlkZ2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKaW5kZXggNGY4ZTI1MC4uNTA1MWI5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpAQCAtMjksOCArMjksNiBAQAogCiB2b2lkIF9faW5pdCBpMzg2X3N0YXJ0X2tlcm5lbCh2b2lkKQogewotCXJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkoKTsKLQogCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9fYnNzX3N0b3ApLCAiVEVYVCBEQVRBIEJTUyIpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKaW5kZXggMGIwNmNkNy4uYjVhOTg5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYwpAQCAtOTgsOCArOTgsNiBAQAogewogCWNvcHlfYm9vdGRhdGEoX192YShyZWFsX21vZGVfZGF0YSkpOwogCi0JcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSgpOwotCiAJcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX19ic3Nfc3RvcCksICJURVhUIERBVEEgQlNTIik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGQ0MmY2NWEuLjA1ZDVmZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMzYyLDggKzM2Miw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGJwLT5jYWxsYmFjaykKLQkJcmV0ID0gYXJjaF9zdG9yZV9pbmZvKGJwKTsKKwlyZXQgPSBhcmNoX3N0b3JlX2luZm8oYnApOwogCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC01MTksNyArNTE4LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJKGJwLT5jYWxsYmFjaykoYnAsIGFyZ3MtPnJlZ3MpOworCQlwZXJmX2JwX2V2ZW50KGJwLCBhcmdzLT5yZWdzKTsKIAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9wb3J0LmMKaW5kZXggOTljNGQzMC4uOGVlYzBlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb3BvcnQuYwpAQCAtMTAzLDkgKzEwMywxMCBAQAogICogb24gc3lzdGVtLWNhbGwgZW50cnkgLSBzZWUgYWxzbyBmb3JrKCkgYW5kIHRoZSBzaWduYWwgaGFuZGxpbmcKICAqIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgZG9faW9wbCh1bnNpZ25lZCBpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBvbGQgPSAocmVncy0+ZmxhZ3MgPj4gMTIpICYgMzsKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZjdXJyZW50LT50aHJlYWQ7CiAKIAlpZiAobGV2ZWwgPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNSwyOSArMTE2LDggQEAKIAkJCXJldHVybiAtRVBFUk07CiAJfQogCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgflg4Nl9FRkxBR1NfSU9QTCkgfCAobGV2ZWwgPDwgMTIpOworCXQtPmlvcGwgPSBsZXZlbCA8PCAxMjsKKwlzZXRfaW9wbF9tYXNrKHQtPmlvcGwpOwogCiAJcmV0dXJuIDA7CiB9Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1sb25nIHN5c19pb3BsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGludCBsZXZlbCA9IHJlZ3MtPmJ4OwotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJmN1cnJlbnQtPnRocmVhZDsKLQlpbnQgcmM7Ci0KLQlyYyA9IGRvX2lvcGwobGV2ZWwsIHJlZ3MpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gb3V0OwotCi0JdC0+aW9wbCA9IGxldmVsIDw8IDEyOwotCXNldF9pb3BsX21hc2sodC0+aW9wbCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotI2Vsc2UKLWFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJldHVybiBkb19pb3BsKGxldmVsLCByZWdzKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDY2NGJjYjcuLjkxZmQwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCWlmICghZGVzYykKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJYW55X2NvdW50IHw9IGtzdGF0X2lycXNfY3B1KGksIGopOwogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiAJc2VxX3B1dGMocCwgJ1xuJyk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NCwxMiArMjk0LDEyIEBACiAJCQljb250aW51ZTsKIAogCQkvKiBpbnRlcnJ1cHQncyBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCAqLwotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCQlhZmZpbml0eSA9IGRlc2MtPmFmZmluaXR5OwogCQlpZiAoIWlycV9oYXNfYWN0aW9uKGlycSkgfHwKIAkJICAgIGNwdW1hc2tfZXF1YWwoYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykpIHsKLQkJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUENOVFhUKSAmJiBkZXNjLT5jaGlwLT51bm1hc2spCiAJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKIAotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAkJaWYgKGJyZWFrX2FmZmluaXR5ICYmIHNldF9hZmZpbml0eSkKIAkJCXByaW50aygiQnJva2UgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKQEAgLTM1NiwxMCArMzU2LDEwIEBACiAJCQlpcnEgPSBfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl07CiAKIAkJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCQkJaWYgKGRlc2MtPmNoaXAtPnJldHJpZ2dlcikKIAkJCQlkZXNjLT5jaGlwLT5yZXRyaWdnZXIoaXJxKTsKLQkJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9tZmdwdF8zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTYyZDg0Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9tZmdwdF8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8qCi0gKiBEcml2ZXIvQVBJIGZvciBBTUQgR2VvZGUgTXVsdGktRnVuY3Rpb24gR2VuZXJhbCBQdXJwb3NlIFRpbWVycyAoTUZHUFQpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBkZWJpYW4ub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhlIE1GR1BUcyBhcmUgZG9jdW1lbnRlZCBpbiBBTUQgR2VvZGUgQ1M1NTM2IENvbXBhbmlvbiBEZXZpY2UgRGF0YSBCb29rLgotICovCi0KLS8qCi0gKiBXZSBhcmUgdXNpbmcgdGhlIDMyLjc2OGtIeiBpbnB1dCBjbG9jayAtIGl0J3MgdGhlIG9ubHkgb25lIHRoYXQgaGFzIHRoZQotICogcmFuZ2VzIHdlIGZpbmQgZGVzaXJhYmxlLiAgVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgc3VpdGFibGUKLSAqIGRpdmlzb3JzIGFuZCB0aGUgYXNzb2NpYXRlZCBIeiwgbWluaW11bSBpbnRlcnZhbCBhbmQgdGhlIG1heGltdW0gaW50ZXJ2YWw6Ci0gKgotICogIERpdmlzb3IgICBIeiAgICAgIE1pbiBEZWx0YSAocykgIE1heCBEZWx0YSAocykKLSAqICAgMSAgICAgICAgMzI3NjggICAuMDAwNDg4MjgxMjUgICAgICAyLjAwMAotICogICAyICAgICAgICAxNjM4NCAgIC4wMDA5NzY1NjI1ICAgICAgIDQuMDAwCi0gKiAgIDQgICAgICAgICA4MTkyICAgLjAwMTk1MzEyNSAgICAgICAgOC4wMDAKLSAqICAgOCAgICAgICAgIDQwOTYgICAuMDAzOTA2MjUgICAgICAgIDE2LjAwMAotICogICAxNiAgICAgICAgMjA0OCAgIC4wMDc4MTI1ICAgICAgICAgMzIuMDAwCi0gKiAgIDMyICAgICAgICAxMDI0ICAgLjAxNTYyNSAgICAgICAgICA2NC4wMDAKLSAqICAgNjQgICAgICAgICA1MTIgICAuMDMxMjUgICAgICAgICAgMTI4LjAwMAotICogIDEyOCAgICAgICAgIDI1NiAgIC4wNjI1ICAgICAgICAgICAyNTYuMDAwCi0gKiAgMjU2ICAgICAgICAgMTI4ICAgLjEyNSAgICAgICAgICAgIDUxMi4wMDAKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2dlb2RlLmg+Ci0KLSNkZWZpbmUgTUZHUFRfREVGQVVMVF9JUlEJNwotCi1zdGF0aWMgc3RydWN0IG1mZ3B0X3RpbWVyX3QgewotCXVuc2lnbmVkIGludCBhdmFpbDoxOwotfSBtZmdwdF90aW1lcnNbTUZHUFRfTUFYX1RJTUVSU107Ci0KLS8qIFNlbGVjdGVkIGZyb20gdGhlIHRhYmxlIGFib3ZlICovCi0KLSNkZWZpbmUgTUZHUFRfRElWSVNPUiAxNgotI2RlZmluZSBNRkdQVF9TQ0FMRSAgNCAgICAgLyogZGl2aXNvciA9IDJeKHNjYWxlKSAqLwotI2RlZmluZSBNRkdQVF9IWiAgKDMyNzY4IC8gTUZHUFRfRElWSVNPUikKLSNkZWZpbmUgTUZHUFRfUEVSSU9ESUMgKE1GR1BUX0haIC8gSFopCi0KLS8qIEFsbG93IGZvciBkaXNhYmxpbmcgb2YgTUZHUFRzICovCi1zdGF0aWMgaW50IGRpc2FibGU7Ci1zdGF0aWMgaW50IF9faW5pdCBtZmdwdF9kaXNhYmxlKGNoYXIgKnMpCi17Ci0JZGlzYWJsZSA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJub21mZ3B0IiwgbWZncHRfZGlzYWJsZSk7Ci0KLS8qIFJlc2V0IHRoZSBNRkdQVCB0aW1lcnMuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZSBicm9rZW4gQklPU2VzIHdoaWNoIGFscmVhZHkKLSAqIGRvIHRoZSBzYW1lIGFuZCBsZWF2ZSB0aGUgc3lzdGVtIGluIGFuIHVuc3RhYmxlIHN0YXRlLiBUaW55QklPUyAwLjk4IGlzCi0gKiBhZmZlY3RlZCBhdCBsZWFzdCAoMC45OSBpcyBPSyB3aXRoIE1GR1BUIHdvcmthcm91bmQgbGVmdCB0byBvZmYpLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBtZmdwdF9maXgoY2hhciAqcykKLXsKLQl1MzIgdmFsLCBkdW1teTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgdWRvY3VtZW50ZWQgYml0IHJlc2V0cyB0aGUgTUZHUFQgdGltZXJzICovCi0JdmFsID0gMHhGRjsgZHVtbXkgPSAwOwotCXdybXNyKE1TUl9NRkdQVF9TRVRVUCwgdmFsLCBkdW1teSk7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJtZmdwdGZpeCIsIG1mZ3B0X2ZpeCk7Ci0KLS8qCi0gKiBDaGVjayB3aGV0aGVyIGFueSBNRkdQVHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGtlcm5lbCB0byB1c2UuICBJbiBtb3N0Ci0gKiBjYXNlcywgZmlybXdhcmUgdGhhdCB1c2VzIEFNRCdzIFZTQSBjb2RlIHdpbGwgY2xhaW0gYWxsIHRpbWVycyBkdXJpbmcKLSAqIGJvb3R1cDsgd2UgY2VydGFpbmx5IGRvbid0IHdhbnQgdG8gdGFrZSB0aGVtIGlmIHRoZXkncmUgYWxyZWFkeSBpbiB1c2UuCi0gKiBJbiBvdGhlciBjYXNlcyAoc3VjaCBhcyB3aXRoIFZTQWxlc3MgT3BlbkZpcm13YXJlKSwgdGhlIHN5c3RlbSBmaXJtd2FyZQotICogbGVhdmVzIHRpbWVycyBhdmFpbGFibGUgZm9yIHVzIHRvIHVzZS4KLSAqLwotCi0KLXN0YXRpYyBpbnQgdGltZXJzID0gLTE7Ci0KLXN0YXRpYyB2b2lkIGdlb2RlX21mZ3B0X2RldGVjdCh2b2lkKQotewotCWludCBpOwotCXUxNiB2YWw7Ci0KLQl0aW1lcnMgPSAwOwotCi0JaWYgKGRpc2FibGUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZ2VvZGUtbWZncHQ6ICBNRkdQVCBzdXBwb3J0IGlzIGRpc2FibGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICghZ2VvZGVfZ2V0X2Rldl9iYXNlKEdFT0RFX0RFVl9NRkdQVCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZ2VvZGUtbWZncHQ6ICBNRkdQVCBMQkFSIGlzIG5vdCBzZXQgdXBcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE1GR1BUX01BWF9USU1FUlM7IGkrKykgewotCQl2YWwgPSBnZW9kZV9tZmdwdF9yZWFkKGksIE1GR1BUX1JFR19TRVRVUCk7Ci0JCWlmICghKHZhbCAmIE1GR1BUX1NFVFVQX1NFVFVQKSkgewotCQkJbWZncHRfdGltZXJzW2ldLmF2YWlsID0gMTsKLQkJCXRpbWVycysrOwotCQl9Ci0JfQotCi1kb25lOgotCXByaW50ayhLRVJOX0lORk8gImdlb2RlLW1mZ3B0OiAgJWQgTUZHUFQgdGltZXJzIGF2YWlsYWJsZS5cbiIsIHRpbWVycyk7Ci19Ci0KLWludCBnZW9kZV9tZmdwdF90b2dnbGVfZXZlbnQoaW50IHRpbWVyLCBpbnQgY21wLCBpbnQgZXZlbnQsIGludCBlbmFibGUpCi17Ci0JdTMyIG1zciwgbWFzaywgdmFsdWUsIGR1bW15OwotCWludCBzaGlmdCA9IChjbXAgPT0gTUZHUFRfQ01QMSkgPyAwIDogODsKLQotCWlmICh0aW1lciA8IDAgfHwgdGltZXIgPj0gTUZHUFRfTUFYX1RJTUVSUykKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKgotCSAqIFRoZSByZWdpc3RlciBtYXBzIGZvciB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHNlY3Rpb25zIDYuMTcuMS54IG9mCi0JICogdGhlIEFNRCBHZW9kZSBDUzU1MzYgQ29tcGFuaW9uIERldmljZSBEYXRhIEJvb2suCi0JICovCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgTUZHUFRfRVZFTlRfUkVTRVQ6Ci0JCS8qCi0JCSAqIFhYWDogQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCB3ZSBjYW5ub3QgcmVzZXQgdGltZXJzIGFib3ZlCi0JCSAqIDY7IHRoYXQgaXMsIHJlc2V0cyBmb3IgNyBhbmQgOCB3aWxsIGJlIGlnbm9yZWQuICBJcyB0aGlzCi0JCSAqIGEgcHJvYmxlbT8gICAtZGlsaW5nZXIKLQkJICovCi0JCW1zciA9IE1TUl9NRkdQVF9OUjsKLQkJbWFzayA9IDEgPDwgKHRpbWVyICsgMjQpOwotCQlicmVhazsKLQotCWNhc2UgTUZHUFRfRVZFTlRfTk1JOgotCQltc3IgPSBNU1JfTUZHUFRfTlI7Ci0JCW1hc2sgPSAxIDw8ICh0aW1lciArIHNoaWZ0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1GR1BUX0VWRU5UX0lSUToKLQkJbXNyID0gTVNSX01GR1BUX0lSUTsKLQkJbWFzayA9IDEgPDwgKHRpbWVyICsgc2hpZnQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJkbXNyKG1zciwgdmFsdWUsIGR1bW15KTsKLQotCWlmIChlbmFibGUpCi0JCXZhbHVlIHw9IG1hc2s7Ci0JZWxzZQotCQl2YWx1ZSAmPSB+bWFzazsKLQotCXdybXNyKG1zciwgdmFsdWUsIGR1bW15KTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdlb2RlX21mZ3B0X3RvZ2dsZV9ldmVudCk7Ci0KLWludCBnZW9kZV9tZmdwdF9zZXRfaXJxKGludCB0aW1lciwgaW50IGNtcCwgaW50ICppcnEsIGludCBlbmFibGUpCi17Ci0JdTMyIHpzZWwsIGxwYywgZHVtbXk7Ci0JaW50IHNoaWZ0OwotCi0JaWYgKHRpbWVyIDwgMCB8fCB0aW1lciA+PSBNRkdQVF9NQVhfVElNRVJTKQotCQlyZXR1cm4gLUVJTzsKLQotCS8qCi0JICogVW5mb3J0dW5hdGVseSwgTUZHUFRzIGNvbWUgaW4gcGFpcnMgc2hhcmluZyB0aGVpciBJUlEgbGluZXMuIElmIFZTQQotCSAqIGlzIHVzaW5nIHRoZSBzYW1lIENNUCBvZiB0aGUgdGltZXIncyBTaWFtZXNlIHR3aW4sIHRoZSBJUlEgaXMgc2V0IHRvCi0JICogMiwgYW5kIHdlIG11c3RuJ3QgdXNlIG5vciBjaGFuZ2UgaXQuCi0JICogWFhYOiBMaWtld2lzZSwgMiBMaW51eCBkcml2ZXJzIG1pZ2h0IGNsYXNoIGlmIHRoZSAybmQgb3ZlcndyaXRlcyB0aGUKLQkgKiBJUlEgb2YgdGhlIDFzdC4gVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgZm9yY2luZyBhbiBJUlEsIGNhbGxpbmcgdGhpcwotCSAqIHdpdGggKmlycT09MCBpcyBzYWZlLiBDdXJyZW50bHkgdGhlcmUgX2FyZV8gbm8gMiBkcml2ZXJzLgotCSAqLwotCXJkbXNyKE1TUl9QSUNfWlNFTF9MT1csIHpzZWwsIGR1bW15KTsKLQlzaGlmdCA9ICgoY21wID09IE1GR1BUX0NNUDEgPyAwIDogNCkgKyB0aW1lciAlIDQpICogNDsKLQlpZiAoKCh6c2VsID4+IHNoaWZ0KSAmIDB4RikgPT0gMikKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBDaG9vc2UgSVJROiBpZiBub25lIHN1cHBsaWVkLCBrZWVwIElSUSBhbHJlYWR5IHNldCBvciB1c2UgZGVmYXVsdCAqLwotCWlmICghKmlycSkKLQkJKmlycSA9ICh6c2VsID4+IHNoaWZ0KSAmIDB4RjsKLQlpZiAoISppcnEpCi0JCSppcnEgPSBNRkdQVF9ERUZBVUxUX0lSUTsKLQotCS8qIENhbid0IHVzZSBJUlEgaWYgaXQncyAwICg9ZGlzYWJsZWQpLCAyLCBvciByb3V0ZWQgdG8gTFBDICovCi0JaWYgKCppcnEgPCAxIHx8ICppcnEgPT0gMiB8fCAqaXJxID4gMTUpCi0JCXJldHVybiAtRUlPOwotCXJkbXNyKE1TUl9QSUNfSVJRTV9MUEMsIGxwYywgZHVtbXkpOwotCWlmIChscGMgJiAoMSA8PCAqaXJxKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBBbGwgY2hvc2VuIGFuZCBjaGVja2VkIC0gZ28gZm9yIGl0ICovCi0JaWYgKGdlb2RlX21mZ3B0X3RvZ2dsZV9ldmVudCh0aW1lciwgY21wLCBNRkdQVF9FVkVOVF9JUlEsIGVuYWJsZSkpCi0JCXJldHVybiAtRUlPOwotCWlmIChlbmFibGUpIHsKLQkJenNlbCA9ICh6c2VsICYgfigweEYgPDwgc2hpZnQpKSB8ICgqaXJxIDw8IHNoaWZ0KTsKLQkJd3Jtc3IoTVNSX1BJQ19aU0VMX0xPVywgenNlbCwgZHVtbXkpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1mZ3B0X2dldChpbnQgdGltZXIpCi17Ci0JbWZncHRfdGltZXJzW3RpbWVyXS5hdmFpbCA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZ2VvZGUtbWZncHQ6ICBSZWdpc3RlcmVkIHRpbWVyICVkXG4iLCB0aW1lcik7Ci0JcmV0dXJuIHRpbWVyOwotfQotCi1pbnQgZ2VvZGVfbWZncHRfYWxsb2NfdGltZXIoaW50IHRpbWVyLCBpbnQgZG9tYWluKQotewotCWludCBpOwotCi0JaWYgKHRpbWVycyA9PSAtMSkgewotCQkvKiB0aW1lcnMgaGF2ZW4ndCBiZWVuIGRldGVjdGVkIHlldCAqLwotCQlnZW9kZV9tZmdwdF9kZXRlY3QoKTsKLQl9Ci0KLQlpZiAoIXRpbWVycykKLQkJcmV0dXJuIC0xOwotCi0JaWYgKHRpbWVyID49IE1GR1BUX01BWF9USU1FUlMpCi0JCXJldHVybiAtMTsKLQotCWlmICh0aW1lciA8IDApIHsKLQkJLyogVHJ5IHRvIGZpbmQgYW4gYXZhaWxhYmxlIHRpbWVyICovCi0JCWZvciAoaSA9IDA7IGkgPCBNRkdQVF9NQVhfVElNRVJTOyBpKyspIHsKLQkJCWlmIChtZmdwdF90aW1lcnNbaV0uYXZhaWwpCi0JCQkJcmV0dXJuIG1mZ3B0X2dldChpKTsKLQotCQkJaWYgKGkgPT0gNSAmJiBkb21haW4gPT0gTUZHUFRfRE9NQUlOX1dPUktJTkcpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJZiB0aGV5IHJlcXVlc3RlZCBhIHNwZWNpZmljIHRpbWVyLCB0cnkgdG8gaG9ub3IgdGhhdCAqLwotCQlpZiAobWZncHRfdGltZXJzW3RpbWVyXS5hdmFpbCkKLQkJCXJldHVybiBtZmdwdF9nZXQodGltZXIpOwotCX0KLQotCS8qIE5vIHRpbWVycyBhdmFpbGFibGUgLSB0b28gYmFkICovCi0JcmV0dXJuIC0xOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2VvZGVfbWZncHRfYWxsb2NfdGltZXIpOwotCi0KLSNpZmRlZiBDT05GSUdfR0VPREVfTUZHUFRfVElNRVIKLQotLyoKLSAqIFRoZSBNRlBHVCB0aW1lcnMgb24gdGhlIENTNTUzNiBwcm92aWRlIHVzIHdpdGggc3VpdGFibGUgdGltZXJzIHRvIHVzZQotICogYXMgY2xvY2sgZXZlbnQgc291cmNlcyAtIG5vdCBhcyBnb29kIGFzIGEgSFBFVCBvciBBUElDLCBidXQgY2VydGFpbmx5Ci0gKiBiZXR0ZXIgdGhhbiB0aGUgUElULiAgVGhpcyBpc24ndCBhIGdlbmVyYWwgcHVycG9zZSBNRkdQVCBkcml2ZXIsIGJ1dAotICogYSBzaW1wbGlmaWVkIG9uZSBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8gYWN0IGFzIGEgY2xvY2sgZXZlbnQgc291cmNlLgotICogRm9yIGZ1bGwgZGV0YWlscyBhYm91dCB0aGUgTUZHUFQsIHBsZWFzZSBjb25zdWx0IHRoZSBDUzU1MzYgZGF0YSBzaGVldC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWZncHRfdGlja19tb2RlID0gQ0xPQ0tfRVZUX01PREVfU0hVVERPV047Ci1zdGF0aWMgdTE2IG1mZ3B0X2V2ZW50X2Nsb2NrOwotCi1zdGF0aWMgaW50IGlycTsKLXN0YXRpYyBpbnQgX19pbml0IG1mZ3B0X3NldHVwKGNoYXIgKnN0cikKLXsKLQlnZXRfb3B0aW9uKCZzdHIsICZpcnEpOwotCXJldHVybiAxOwotfQotX19zZXR1cCgibWZncHRfaXJxPSIsIG1mZ3B0X3NldHVwKTsKLQotc3RhdGljIHZvaWQgbWZncHRfZGlzYWJsZV90aW1lcih1MTYgY2xvY2spCi17Ci0JLyogYXZvaWQgcmFjZXMgYnkgY2xlYXJpbmcgQ01QMSBhbmQgQ01QMiB1bmNvbmRpdGlvbmFsbHkgKi8KLQlnZW9kZV9tZmdwdF93cml0ZShjbG9jaywgTUZHUFRfUkVHX1NFVFVQLCAodTE2KSB+TUZHUFRfU0VUVVBfQ05URU4gfAotCQkJTUZHUFRfU0VUVVBfQ01QMSB8IE1GR1BUX1NFVFVQX0NNUDIpOwotfQotCi1zdGF0aWMgaW50IG1mZ3B0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZywgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIG1mZ3B0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbWZncHRfY2xvY2tldmVudCA9IHsKLQkubmFtZSA9ICJtZmdwdC10aW1lciIsCi0JLmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAotCS5zZXRfbW9kZSA9IG1mZ3B0X3NldF9tb2RlLAotCS5zZXRfbmV4dF9ldmVudCA9IG1mZ3B0X25leHRfZXZlbnQsCi0JLnJhdGluZyA9IDI1MCwKLQkuY3B1bWFzayA9IGNwdV9hbGxfbWFzaywKLQkuc2hpZnQgPSAzMgotfTsKLQotc3RhdGljIHZvaWQgbWZncHRfc3RhcnRfdGltZXIodTE2IGRlbHRhKQotewotCWdlb2RlX21mZ3B0X3dyaXRlKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfQ01QMiwgKHUxNikgZGVsdGEpOwotCWdlb2RlX21mZ3B0X3dyaXRlKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7Ci0KLQlnZW9kZV9tZmdwdF93cml0ZShtZmdwdF9ldmVudF9jbG9jaywgTUZHUFRfUkVHX1NFVFVQLAotCQkJICBNRkdQVF9TRVRVUF9DTlRFTiB8IE1GR1BUX1NFVFVQX0NNUDIpOwotfQotCi1zdGF0aWMgdm9pZCBtZmdwdF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQltZmdwdF9kaXNhYmxlX3RpbWVyKG1mZ3B0X2V2ZW50X2Nsb2NrKTsKLQotCWlmIChtb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQotCQltZmdwdF9zdGFydF90aW1lcihNRkdQVF9QRVJJT0RJQyk7Ci0KLQltZmdwdF90aWNrX21vZGUgPSBtb2RlOwotfQotCi1zdGF0aWMgaW50IG1mZ3B0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCW1mZ3B0X3N0YXJ0X3RpbWVyKGRlbHRhKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IG1mZ3B0X3RpY2soaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXUxNiB2YWwgPSBnZW9kZV9tZmdwdF9yZWFkKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfU0VUVVApOwotCi0JLyogU2VlIGlmIHRoZSBpbnRlcnJ1cHQgd2FzIGZvciB1cyAqLwotCWlmICghKHZhbCAmIChNRkdQVF9TRVRVUF9TRVRVUCAgfCBNRkdQVF9TRVRVUF9DTVAyIHwgTUZHUFRfU0VUVVBfQ01QMSkpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQkvKiBUdXJuIG9mZiB0aGUgY2xvY2sgKGFuZCBjbGVhciB0aGUgZXZlbnQpICovCi0JbWZncHRfZGlzYWJsZV90aW1lcihtZmdwdF9ldmVudF9jbG9jayk7Ci0KLQlpZiAobWZncHRfdGlja19tb2RlID09IENMT0NLX0VWVF9NT0RFX1NIVVRET1dOKQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQkvKiBDbGVhciB0aGUgY291bnRlciAqLwotCWdlb2RlX21mZ3B0X3dyaXRlKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7Ci0KLQkvKiBSZXN0YXJ0IHRoZSBjbG9jayBpbiBwZXJpb2RpYyBtb2RlICovCi0KLQlpZiAobWZncHRfdGlja19tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKSB7Ci0JCWdlb2RlX21mZ3B0X3dyaXRlKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfU0VUVVAsCi0JCQkJICBNRkdQVF9TRVRVUF9DTlRFTiB8IE1GR1BUX1NFVFVQX0NNUDIpOwotCX0KLQotCW1mZ3B0X2Nsb2NrZXZlbnQuZXZlbnRfaGFuZGxlcigmbWZncHRfY2xvY2tldmVudCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtZmdwdGlycSAgPSB7Ci0JLmhhbmRsZXIgPSBtZmdwdF90aWNrLAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9USU1FUiwKLQkubmFtZSA9ICJtZmdwdC10aW1lciIKLX07Ci0KLWludCBfX2luaXQgbWZncHRfdGltZXJfc2V0dXAodm9pZCkKLXsKLQlpbnQgdGltZXIsIHJldDsKLQl1MTYgdmFsOwotCi0JdGltZXIgPSBnZW9kZV9tZmdwdF9hbGxvY190aW1lcihNRkdQVF9USU1FUl9BTlksIE1GR1BUX0RPTUFJTl9XT1JLSU5HKTsKLQlpZiAodGltZXIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm1mZ3B0LXRpbWVyOiAgQ291bGQgbm90IGFsbG9jYXRlIGEgTUZQR1QgdGltZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltZmdwdF9ldmVudF9jbG9jayA9IHRpbWVyOwotCi0JLyogU2V0IHVwIHRoZSBJUlEgb24gdGhlIE1GR1BUIHNpZGUgKi8KLQlpZiAoZ2VvZGVfbWZncHRfc2V0dXBfaXJxKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9DTVAyLCAmaXJxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1mZ3B0LXRpbWVyOiAgQ291bGQgbm90IHNldCB1cCBJUlEgJWRcbiIsIGlycSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIEFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBrZXJuZWwgKi8KLQlyZXQgPSBzZXR1cF9pcnEoaXJxLCAmbWZncHRpcnEpOwotCi0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJtZmdwdC10aW1lcjogIFVuYWJsZSB0byBzZXQgdXAgdGhlIGludGVycnVwdC5cbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQkvKiBTZXQgdGhlIGNsb2NrIHNjYWxlIGFuZCBlbmFibGUgdGhlIGV2ZW50IG1vZGUgZm9yIENNUDIgKi8KLQl2YWwgPSBNRkdQVF9TQ0FMRSB8ICgzIDw8IDgpOwotCi0JZ2VvZGVfbWZncHRfd3JpdGUobWZncHRfZXZlbnRfY2xvY2ssIE1GR1BUX1JFR19TRVRVUCwgdmFsKTsKLQotCS8qIFNldCB1cCB0aGUgY2xvY2sgZXZlbnQgKi8KLQltZmdwdF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoTUZHUFRfSFosIE5TRUNfUEVSX1NFQywKLQkJCQkgICAgICAgbWZncHRfY2xvY2tldmVudC5zaGlmdCk7Ci0JbWZncHRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwKLQkJCSZtZmdwdF9jbG9ja2V2ZW50KTsKLQltZmdwdF9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhGRkZFLAotCQkJJm1mZ3B0X2Nsb2NrZXZlbnQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAibWZncHQtdGltZXI6ICBSZWdpc3RlcmluZyBNRkdQVCB0aW1lciAlZCBhcyBhIGNsb2NrIGV2ZW50LCB1c2luZyBJUlEgJWRcbiIsCi0JICAgICAgIHRpbWVyLCBpcnEpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmbWZncHRfY2xvY2tldmVudCk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyOgotCWdlb2RlX21mZ3B0X3JlbGVhc2VfaXJxKG1mZ3B0X2V2ZW50X2Nsb2NrLCBNRkdQVF9DTVAyLCAmaXJxKTsKLQlwcmludGsoS0VSTl9FUlIKLQkgICAgICAgIm1mZ3B0LXRpbWVyOiAgVW5hYmxlIHRvIHNldCB1cCB0aGUgTUZHUFQgY2xvY2sgc291cmNlXG4iKTsKLQlyZXR1cm4gLUVJTzsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCA2MzEyM2Q5Li4zNzU0MmI2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlIHZlcnNpb24gMi4gU2VlIGZpbGUgQ09QWUlORyBmb3IgZGV0YWlscy4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CkBAIC04MSw3ICs4NCw3IEBACiAKIAltZW1zZXQoY3NpZywgMCwgc2l6ZW9mKCpjc2lnKSk7CiAJcmRtc3IoTVNSX0FNRDY0X1BBVENIX0xFVkVMLCBjc2lnLT5yZXYsIGR1bW15KTsKLQlwcl9pbmZvKCJtaWNyb2NvZGU6IENQVSVkOiBwYXRjaF9sZXZlbD0weCV4XG4iLCBjcHUsIGNzaWctPnJldik7CisJcHJfaW5mbygiQ1BVJWQ6IHBhdGNoX2xldmVsPTB4JXhcbiIsIGNwdSwgY3NpZy0+cmV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTExLDggKzExNCw4IEBACiAKIAkvKiB1Y29kZSBtaWdodCBiZSBjaGlwc2V0IHNwZWNpZmljIC0tIGN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgKi8KIAlpZiAobWNfaGVhZGVyLT5uYl9kZXZfaWQgfHwgbWNfaGVhZGVyLT5zYl9kZXZfaWQpIHsKLQkJcHJfZXJyKEtFUk5fRVJSICJtaWNyb2NvZGU6IENQVSVkOiBsb2FkaW5nIG9mIGNoaXBzZXQgIgotCQkgICAgICAgInNwZWNpZmljIGNvZGUgbm90IHlldCBzdXBwb3J0ZWRcbiIsIGNwdSk7CisJCXByX2VycigiQ1BVJWQ6IGxvYWRpbmcgb2YgY2hpcHNldCBzcGVjaWZpYyBjb2RlIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCQkgICAgICAgY3B1KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNDEsMTIgKzE0NCwxMiBAQAogCiAJLyogY2hlY2sgY3VycmVudCBwYXRjaCBpZCBhbmQgcGF0Y2gncyBpZCBmb3IgbWF0Y2ggKi8KIAlpZiAocmV2ICE9IG1jX2FtZC0+aGRyLnBhdGNoX2lkKSB7Ci0JCXByX2VycigibWljcm9jb2RlOiBDUFUlZDogdXBkYXRlIGZhaWxlZCAiCi0JCSAgICAgICAiKGZvciBwYXRjaF9sZXZlbD0weCV4KVxuIiwgY3B1LCBtY19hbWQtPmhkci5wYXRjaF9pZCk7CisJCXByX2VycigiQ1BVJWQ6IHVwZGF0ZSBmYWlsZWQgKGZvciBwYXRjaF9sZXZlbD0weCV4KVxuIiwKKwkJICAgICAgIGNwdSwgbWNfYW1kLT5oZHIucGF0Y2hfaWQpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcHJfaW5mbygibWljcm9jb2RlOiBDUFUlZDogdXBkYXRlZCAobmV3IHBhdGNoX2xldmVsPTB4JXgpXG4iLCBjcHUsIHJldik7CisJcHJfaW5mbygiQ1BVJWQ6IHVwZGF0ZWQgKG5ldyBwYXRjaF9sZXZlbD0weCV4KVxuIiwgY3B1LCByZXYpOwogCXVjaS0+Y3B1X3NpZy5yZXYgPSByZXY7CiAKIAlyZXR1cm4gMDsKQEAgLTE2OSwxNSArMTcyLDE0IEBACiAJCXJldHVybiBOVUxMOwogCiAJaWYgKHNlY3Rpb25faGRyWzBdICE9IFVDT0RFX1VDT0RFX1RZUEUpIHsKLQkJcHJfZXJyKCJtaWNyb2NvZGU6IGVycm9yOiBpbnZhbGlkIHR5cGUgZmllbGQgaW4gIgotCQkgICAgICAgImNvbnRhaW5lciBmaWxlIHNlY3Rpb24gaGVhZGVyXG4iKTsKKwkJcHJfZXJyKCJlcnJvcjogaW52YWxpZCB0eXBlIGZpZWxkIGluIGNvbnRhaW5lciBmaWxlIHNlY3Rpb24gaGVhZGVyXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJdG90YWxfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSAoc2VjdGlvbl9oZHJbNF0gKyAoc2VjdGlvbl9oZHJbNV0gPDwgOCkpOwogCiAJaWYgKHRvdGFsX3NpemUgPiBzaXplIHx8IHRvdGFsX3NpemUgPiBVQ09ERV9NQVhfU0laRSkgewotCQlwcl9lcnIoIm1pY3JvY29kZTogZXJyb3I6IHNpemUgbWlzbWF0Y2hcbiIpOworCQlwcl9lcnIoImVycm9yOiBzaXplIG1pc21hdGNoXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMDYsMTQgKzIwOCwxMyBAQAogCXNpemUgPSBidWZfcG9zWzJdOwogCiAJaWYgKGJ1Zl9wb3NbMV0gIT0gVUNPREVfRVFVSVZfQ1BVX1RBQkxFX1RZUEUgfHwgIXNpemUpIHsKLQkJcHJfZXJyKCJtaWNyb2NvZGU6IGVycm9yOiBpbnZhbGlkIHR5cGUgZmllbGQgaW4gIgotCQkgICAgICAgImNvbnRhaW5lciBmaWxlIHNlY3Rpb24gaGVhZGVyXG4iKTsKKwkJcHJfZXJyKCJlcnJvcjogaW52YWxpZCB0eXBlIGZpZWxkIGluIGNvbnRhaW5lciBmaWxlIHNlY3Rpb24gaGVhZGVyXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZXF1aXZfY3B1X3RhYmxlID0gKHN0cnVjdCBlcXVpdl9jcHVfZW50cnkgKikgdm1hbGxvYyhzaXplKTsKIAlpZiAoIWVxdWl2X2NwdV90YWJsZSkgewotCQlwcl9lcnIoIm1pY3JvY29kZTogZmFpbGVkIHRvIGFsbG9jYXRlIGVxdWl2YWxlbnQgQ1BVIHRhYmxlXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgZXF1aXZhbGVudCBDUFUgdGFibGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI0Niw3ICsyNDcsNyBAQAogCiAJb2Zmc2V0ID0gaW5zdGFsbF9lcXVpdl9jcHVfdGFibGUodWNvZGVfcHRyKTsKIAlpZiAoIW9mZnNldCkgewotCQlwcl9lcnIoIm1pY3JvY29kZTogZmFpbGVkIHRvIGNyZWF0ZSBlcXVpdmFsZW50IGNwdSB0YWJsZVxuIik7CisJCXByX2VycigiZmFpbGVkIHRvIGNyZWF0ZSBlcXVpdmFsZW50IGNwdSB0YWJsZVxuIik7CiAJCXJldHVybiBVQ09ERV9FUlJPUjsKIAl9CiAKQEAgLTI3Nyw4ICsyNzgsNyBAQAogCQlpZiAoIWxlZnRvdmVyKSB7CiAJCQl2ZnJlZSh1Y2ktPm1jKTsKIAkJCXVjaS0+bWMgPSBuZXdfbWM7Ci0JCQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBmb3VuZCBhIG1hdGNoaW5nIG1pY3JvY29kZSAiCi0JCQkJICJ1cGRhdGUgd2l0aCB2ZXJzaW9uIDB4JXggKGN1cnJlbnQ9MHgleClcbiIsCisJCQlwcl9kZWJ1ZygiQ1BVJWQgZm91bmQgYSBtYXRjaGluZyBtaWNyb2NvZGUgdXBkYXRlIHdpdGggdmVyc2lvbiAweCV4IChjdXJyZW50PTB4JXgpXG4iLAogCQkJCSBjcHUsIG5ld19yZXYsIHVjaS0+Y3B1X3NpZy5yZXYpOwogCQl9IGVsc2UgewogCQkJdmZyZWUobmV3X21jKTsKQEAgLTMwMCw3ICszMDAsNyBAQAogCQlyZXR1cm4gVUNPREVfTkZPVU5EOwogCiAJaWYgKCoodTMyICopZmlybXdhcmUtPmRhdGEgIT0gVUNPREVfTUFHSUMpIHsKLQkJcHJfZXJyKCJtaWNyb2NvZGU6IGludmFsaWQgVUNPREVfTUFHSUMgKDB4JTA4eClcbiIsCisJCXByX2VycigiaW52YWxpZCBVQ09ERV9NQUdJQyAoMHglMDh4KVxuIiwKIAkJICAgICAgICoodTMyICopZmlybXdhcmUtPmRhdGEpOwogCQlyZXR1cm4gVUNPREVfRVJST1I7CiAJfQpAQCAtMzEzLDggKzMxMyw3IEBACiBzdGF0aWMgZW51bSB1Y29kZV9zdGF0ZQogcmVxdWVzdF9taWNyb2NvZGVfdXNlcihpbnQgY3B1LCBjb25zdCB2b2lkIF9fdXNlciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKLQlwcl9pbmZvKCJtaWNyb2NvZGU6IEFNRCBtaWNyb2NvZGUgdXBkYXRlIHZpYSAiCi0JCSIvZGV2L2NwdS9taWNyb2NvZGUgbm90IHN1cHBvcnRlZFxuIik7CisJcHJfaW5mbygiQU1EIG1pY3JvY29kZSB1cGRhdGUgdmlhIC9kZXYvY3B1L21pY3JvY29kZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAlyZXR1cm4gVUNPREVfRVJST1I7CiB9CiAKQEAgLTMzNCwxNCArMzMzLDEzIEBACiAJV0FSTl9PTihjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKTsKIAogCWlmIChjLT54ODYgPCAweDEwKSB7Ci0JCXByX3dhcm5pbmcoIm1pY3JvY29kZTogQU1EIENQVSBmYW1pbHkgMHgleCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJICAgYy0+eDg2KTsKKwkJcHJfd2FybmluZygiQU1EIENQVSBmYW1pbHkgMHgleCBub3Qgc3VwcG9ydGVkXG4iLCBjLT54ODYpOwogCQlyZXR1cm47CiAJfQogCXN1cHBvcnRlZF9jcHUgPSAxOwogCiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBmd19uYW1lLCBkZXZpY2UpKQotCQlwcl9lcnIoIm1pY3JvY29kZTogZmFpbGVkIHRvIGxvYWQgZmlsZSAlc1xuIiwgZndfbmFtZSk7CisJCXByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlsZSAlc1xuIiwgZndfbmFtZSk7CiB9CiAKIHZvaWQgZmluaV9taWNyb2NvZGVfYW1kKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCmluZGV4IGU2OGFhZTMuLjg0NGMwMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCkBAIC03MCw2ICs3MCw5IEBACiAgKgkJRml4IHNpZ21hdGNoKCkgbWFjcm8gdG8gaGFuZGxlIG9sZCBDUFVzIHdpdGggcGYgPT0gMC4KICAqCQlUaGFua3MgdG8gU3R1YXJ0IFN3YWxlcyBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgYnVnLgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CkBAIC0yMDksNyArMjEyLDcgQEAKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoKGxlbiA+PiBQQUdFX1NISUZUKSA+IHRvdGFscmFtX3BhZ2VzKSB7Ci0JCXByX2VycigibWljcm9jb2RlOiB0b28gbXVjaCBkYXRhIChtYXggJWxkIHBhZ2VzKVxuIiwgdG90YWxyYW1fcGFnZXMpOworCQlwcl9lcnIoInRvbyBtdWNoIGRhdGEgKG1heCAlbGQgcGFnZXMpXG4iLCB0b3RhbHJhbV9wYWdlcyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNDQsNyArMjQ3LDcgQEAKIAogCWVycm9yID0gbWlzY19yZWdpc3RlcigmbWljcm9jb2RlX2Rldik7CiAJaWYgKGVycm9yKSB7Ci0JCXByX2VycigibWljcm9jb2RlOiBjYW4ndCBtaXNjX3JlZ2lzdGVyIG9uIG1pbm9yPSVkXG4iLCBNSUNST0NPREVfTUlOT1IpOworCQlwcl9lcnIoImNhbid0IG1pc2NfcmVnaXN0ZXIgb24gbWlub3I9JWRcbiIsIE1JQ1JPQ09ERV9NSU5PUik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKQEAgLTM1OSw3ICszNjIsNyBAQAogCWlmICghdWNpLT5tYykKIAkJcmV0dXJuIFVDT0RFX05GT1VORDsKIAotCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIHVwZGF0ZWQgdXBvbiByZXN1bWVcbiIsIGNwdSk7CisJcHJfZGVidWcoIkNQVSVkIHVwZGF0ZWQgdXBvbiByZXN1bWVcbiIsIGNwdSk7CiAJYXBwbHlfbWljcm9jb2RlX29uX3RhcmdldChjcHUpOwogCiAJcmV0dXJuIFVDT0RFX09LOwpAQCAtMzc5LDcgKzM4Miw3IEBACiAJdXN0YXRlID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfZncoY3B1LCAmbWljcm9jb2RlX3BkZXYtPmRldik7CiAKIAlpZiAodXN0YXRlID09IFVDT0RFX09LKSB7Ci0JCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIHVwZGF0ZWQgdXBvbiBpbml0XG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiQ1BVJWQgdXBkYXRlZCB1cG9uIGluaXRcbiIsIGNwdSk7CiAJCWFwcGx5X21pY3JvY29kZV9vbl90YXJnZXQoY3B1KTsKIAl9CiAKQEAgLTQwNiw3ICs0MDksNyBAQAogCWlmICghY3B1X29ubGluZShjcHUpKQogCQlyZXR1cm4gMDsKIAotCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIGFkZGVkXG4iLCBjcHUpOworCXByX2RlYnVnKCJDUFUlZCBhZGRlZFxuIiwgY3B1KTsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOwogCWlmIChlcnIpCkBAIC00MjUsNyArNDI4LDcgQEAKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuIDA7CiAKLQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCByZW1vdmVkXG4iLCBjcHUpOworCXByX2RlYnVnKCJDUFUlZCByZW1vdmVkXG4iLCBjcHUpOwogCW1pY3JvY29kZV9maW5pX2NwdShjcHUpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOwogCXJldHVybiAwOwpAQCAtNDczLDE1ICs0NzYsMTUgQEAKIAkJbWljcm9jb2RlX3VwZGF0ZV9jcHUoY3B1KTsKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKIAljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46Ci0JCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIGFkZGVkXG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiQ1BVJWQgYWRkZWRcbiIsIGNwdSk7CiAJCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZtY19hdHRyX2dyb3VwKSkKLQkJCXByX2VycigibWljcm9jb2RlOiBGYWlsZWQgdG8gY3JlYXRlIGdyb3VwIGZvciBDUFUlZFxuIiwgY3B1KTsKKwkJCXByX2VycigiRmFpbGVkIHRvIGNyZWF0ZSBncm91cCBmb3IgQ1BVJWRcbiIsIGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKIAljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgogCQkvKiBTdXNwZW5kIGlzIGluIHByb2dyZXNzLCBvbmx5IHJlbW92ZSB0aGUgaW50ZXJmYWNlICovCiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOwotCQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCByZW1vdmVkXG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiQ1BVJWQgcmVtb3ZlZFxuIiwgY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CkBAIC01MDcsNyArNTEwLDcgQEAKIAkJbWljcm9jb2RlX29wcyA9IGluaXRfYW1kX21pY3JvY29kZSgpOwogCiAJaWYgKCFtaWNyb2NvZGVfb3BzKSB7Ci0JCXByX2VycigibWljcm9jb2RlOiBubyBzdXBwb3J0IGZvciB0aGlzIENQVSB2ZW5kb3JcbiIpOworCQlwcl9lcnIoIm5vIHN1cHBvcnQgZm9yIHRoaXMgQ1BVIHZlbmRvclxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNTQxLDggKzU0NCw3IEBACiAJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtY19jcHVfbm90aWZpZXIpOwogCiAJcHJfaW5mbygiTWljcm9jb2RlIFVwZGF0ZSBEcml2ZXI6IHYiIE1JQ1JPQ09ERV9WRVJTSU9OCi0JICAgICAgICIgPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4sIgotCSAgICAgICAiIFBldGVyIE9ydWJhXG4iKTsKKwkJIiA8dGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrPiwgUGV0ZXIgT3J1YmFcbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKaW5kZXggMGQzMzRkZC4uZWJkMTkzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwpAQCAtNzAsNiArNzAsOSBAQAogICoJCUZpeCBzaWdtYXRjaCgpIG1hY3JvIHRvIGhhbmRsZSBvbGQgQ1BVcyB3aXRoIHBmID09IDAuCiAgKgkJVGhhbmtzIHRvIFN0dWFydCBTd2FsZXMgZm9yIHBvaW50aW5nIG91dCB0aGlzIGJ1Zy4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0Niw4ICsxNDksNyBAQAogCiAJaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fCBjLT54ODYgPCA2IHx8CiAJICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSUE2NCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IENQVSVkIG5vdCBhIGNhcGFibGUgSW50ZWwgIgotCQkJInByb2Nlc3NvclxuIiwgY3B1X251bSk7CisJCXByX2VycigiQ1BVJWQgbm90IGEgY2FwYWJsZSBJbnRlbCBwcm9jZXNzb3JcbiIsIGNwdV9udW0pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNjUsOCArMTY3LDggQEAKIAkvKiBnZXQgdGhlIGN1cnJlbnQgcmV2aXNpb24gZnJvbSBNU1IgMHg4QiAqLwogCXJkbXNyKE1TUl9JQTMyX1VDT0RFX1JFViwgdmFsWzBdLCBjc2lnLT5yZXYpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAibWljcm9jb2RlOiBDUFUlZCBzaWc9MHgleCwgcGY9MHgleCwgcmV2aXNpb249MHgleFxuIiwKLQkJCWNwdV9udW0sIGNzaWctPnNpZywgY3NpZy0+cGYsIGNzaWctPnJldik7CisJcHJfaW5mbygiQ1BVJWQgc2lnPTB4JXgsIHBmPTB4JXgsIHJldmlzaW9uPTB4JXhcbiIsCisJCWNwdV9udW0sIGNzaWctPnNpZywgY3NpZy0+cGYsIGNzaWctPnJldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NCwyOCArMTk2LDI0IEBACiAJZGF0YV9zaXplID0gZ2V0X2RhdGFzaXplKG1jX2hlYWRlcik7CiAKIAlpZiAoZGF0YV9zaXplICsgTUNfSEVBREVSX1NJWkUgPiB0b3RhbF9zaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgotCQkJCSJCYWQgZGF0YSBzaXplIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOworCQlwcl9lcnIoImVycm9yISBCYWQgZGF0YSBzaXplIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAobWNfaGVhZGVyLT5sZHJ2ZXIgIT0gMSB8fCBtY19oZWFkZXItPmhkcnZlciAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgotCQkJCSJVbmtub3duIG1pY3JvY29kZSB1cGRhdGUgZm9ybWF0XG4iKTsKKwkJcHJfZXJyKCJlcnJvciEgVW5rbm93biBtaWNyb2NvZGUgdXBkYXRlIGZvcm1hdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlleHRfdGFibGVfc2l6ZSA9IHRvdGFsX3NpemUgLSAoTUNfSEVBREVSX1NJWkUgKyBkYXRhX3NpemUpOwogCWlmIChleHRfdGFibGVfc2l6ZSkgewogCQlpZiAoKGV4dF90YWJsZV9zaXplIDwgRVhUX0hFQURFUl9TSVpFKQogCQkgfHwgKChleHRfdGFibGVfc2l6ZSAtIEVYVF9IRUFERVJfU0laRSkgJSBFWFRfU0lHTkFUVVJFX1NJWkUpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhICIKLQkJCQkiU21hbGwgZXh0dGFibGUgc2l6ZSBpbiBtaWNyb2NvZGUgZGF0YSBmaWxlXG4iKTsKKwkJCXByX2VycigiZXJyb3IhIFNtYWxsIGV4dHRhYmxlIHNpemUgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlleHRfaGVhZGVyID0gbWMgKyBNQ19IRUFERVJfU0laRSArIGRhdGFfc2l6ZTsKIAkJaWYgKGV4dF90YWJsZV9zaXplICE9IGV4dHRhYmxlX3NpemUoZXh0X2hlYWRlcikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgotCQkJCSJCYWQgZXh0dGFibGUgc2l6ZSBpbiBtaWNyb2NvZGUgZGF0YSBmaWxlXG4iKTsKKwkJCXByX2VycigiZXJyb3IhIEJhZCBleHR0YWJsZSBzaXplIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJZXh0X3NpZ2NvdW50ID0gZXh0X2hlYWRlci0+Y291bnQ7CkBAIC0yMzAsOCArMjI4LDcgQEAKIAkJd2hpbGUgKGktLSkKIAkJCWV4dF90YWJsZV9zdW0gKz0gZXh0X3RhYmxlcFtpXTsKIAkJaWYgKGV4dF90YWJsZV9zdW0pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1pY3JvY29kZTogYWJvcnRpbmcsICIKLQkJCQkiYmFkIGV4dGVuZGVkIHNpZ25hdHVyZSB0YWJsZSBjaGVja3N1bVxuIik7CisJCQlwcl93YXJuaW5nKCJhYm9ydGluZywgYmFkIGV4dGVuZGVkIHNpZ25hdHVyZSB0YWJsZSBjaGVja3N1bVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTI0Miw3ICsyMzksNyBAQAogCXdoaWxlIChpLS0pCiAJCW9yaWdfc3VtICs9ICgoaW50ICopbWMpW2ldOwogCWlmIChvcmlnX3N1bSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogYWJvcnRpbmcsIGJhZCBjaGVja3N1bVxuIik7CisJCXByX2VycigiYWJvcnRpbmcsIGJhZCBjaGVja3N1bVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIWV4dF90YWJsZV9zaXplKQpAQCAtMjU1LDcgKzI1Miw3IEBACiAJCQktIChtY19oZWFkZXItPnNpZyArIG1jX2hlYWRlci0+cGYgKyBtY19oZWFkZXItPmNrc3VtKQogCQkJKyAoZXh0X3NpZy0+c2lnICsgZXh0X3NpZy0+cGYgKyBleHRfc2lnLT5ja3N1bSk7CiAJCWlmIChzdW0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBhYm9ydGluZywgYmFkIGNoZWNrc3VtXG4iKTsKKwkJCXByX2VycigiYWJvcnRpbmcsIGJhZCBjaGVja3N1bVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTMyNywxMyArMzI0LDExIEBACiAJcmRtc3IoTVNSX0lBMzJfVUNPREVfUkVWLCB2YWxbMF0sIHZhbFsxXSk7CiAKIAlpZiAodmFsWzFdICE9IG1jX2ludGVsLT5oZHIucmV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBDUFUlZCB1cGRhdGUgIgotCQkJCSJ0byByZXZpc2lvbiAweCV4IGZhaWxlZFxuIiwKLQkJCWNwdV9udW0sIG1jX2ludGVsLT5oZHIucmV2KTsKKwkJcHJfZXJyKCJDUFUlZCB1cGRhdGUgdG8gcmV2aXNpb24gMHgleCBmYWlsZWRcbiIsCisJCSAgICAgICBjcHVfbnVtLCBtY19pbnRlbC0+aGRyLnJldik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWljcm9jb2RlOiBDUFUlZCB1cGRhdGVkIHRvIHJldmlzaW9uICIKLQkJCSAiMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4IFxuIiwKKwlwcl9pbmZvKCJDUFUlZCB1cGRhdGVkIHRvIHJldmlzaW9uIDB4JXgsIGRhdGUgPSAlMDR4LSUwMngtJTAyeCBcbiIsCiAJCWNwdV9udW0sIHZhbFsxXSwKIAkJbWNfaW50ZWwtPmhkci5kYXRlICYgMHhmZmZmLAogCQltY19pbnRlbC0+aGRyLmRhdGUgPj4gMjQsCkBAIC0zNjIsOCArMzU3LDcgQEAKIAogCQltY19zaXplID0gZ2V0X3RvdGFsc2l6ZSgmbWNfaGVhZGVyKTsKIAkJaWYgKCFtY19zaXplIHx8IG1jX3NpemUgPiBsZWZ0b3ZlcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISIKLQkJCQkJIkJhZCBkYXRhIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOworCQkJcHJfZXJyKCJlcnJvciEgQmFkIGRhdGEgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC00MDUsOSArMzk5LDggQEAKIAkJdmZyZWUodWNpLT5tYyk7CiAJdWNpLT5tYyA9IChzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICopbmV3X21jOwogCi0JcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVJWQgZm91bmQgYSBtYXRjaGluZyBtaWNyb2NvZGUgdXBkYXRlIHdpdGgiCi0JCSAiIHZlcnNpb24gMHgleCAoY3VycmVudD0weCV4KVxuIiwKLQkJCWNwdSwgbmV3X3JldiwgdWNpLT5jcHVfc2lnLnJldik7CisJcHJfZGVidWcoIkNQVSVkIGZvdW5kIGEgbWF0Y2hpbmcgbWljcm9jb2RlIHVwZGF0ZSB3aXRoIHZlcnNpb24gMHgleCAoY3VycmVudD0weCV4KVxuIiwKKwkJIGNwdSwgbmV3X3JldiwgdWNpLT5jcHVfc2lnLnJldik7CiBvdXQ6CiAJcmV0dXJuIHN0YXRlOwogfQpAQCAtNDI5LDcgKzQyMiw3IEBACiAJCWMtPng4NiwgYy0+eDg2X21vZGVsLCBjLT54ODZfbWFzayk7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsIG5hbWUsIGRldmljZSkpIHsKLQkJcHJfZGVidWcoIm1pY3JvY29kZTogZGF0YSBmaWxlICVzIGxvYWQgZmFpbGVkXG4iLCBuYW1lKTsKKwkJcHJfZGVidWcoImRhdGEgZmlsZSAlcyBsb2FkIGZhaWxlZFxuIiwgbmFtZSk7CiAJCXJldHVybiBVQ09ERV9ORk9VTkQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwppbmRleCAzNWE1N2M5Li40MGI1NGNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTk0NSw5ICs5NDUsNiBAQAogewogCWlmIChlbmFibGVfdXBkYXRlX21wdGFibGUgJiYgYWxsb2NfbXB0YWJsZSkgewogCQl1NjQgc3RhcnR0ID0gMDsKLSNpZmRlZiBDT05GSUdfWDg2X1RSQU1QT0xJTkUKLQkJc3RhcnR0ID0gVFJBTVBPTElORV9CQVNFOwotI2VuZGlmCiAJCW1wY19uZXdfcGh5cyA9IGVhcmx5X3Jlc2VydmVfZTgyMChzdGFydHQsIG1wY19uZXdfbGVuZ3RoLCA0KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKaW5kZXggNTUzNDQ5OS4uNGJkOTNjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21zci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwpAQCAtMTcyLDExICsxNzIsMTAgQEAKIAogc3RhdGljIGludCBtc3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOworCXVuc2lnbmVkIGludCBjcHU7CisJc3RydWN0IGNwdWluZm9feDg2ICpjOwogCiAJY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCiAJaWYgKGNwdSA+PSBucl9jcHVfaWRzIHx8ICFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAtRU5YSU87CS8qIE5vIHN1Y2ggQ1BVICovCiAKQEAgLTI0Nyw3ICsyNDYsNyBAQAogCWludCBpLCBlcnIgPSAwOwogCWkgPSAwOwogCi0JaWYgKHJlZ2lzdGVyX2NocmRldihNU1JfTUFKT1IsICJjcHUvbXNyIiwgJm1zcl9mb3BzKSkgeworCWlmIChfX3JlZ2lzdGVyX2NocmRldihNU1JfTUFKT1IsIDAsIE5SX0NQVVMsICJjcHUvbXNyIiwgJm1zcl9mb3BzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1zcjogdW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgbXNyXG4iLAogCQkgICAgICAgTVNSX01BSk9SKTsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMjc1LDcgKzI3NCw3IEBACiAJCW1zcl9kZXZpY2VfZGVzdHJveShpKTsKIAljbGFzc19kZXN0cm95KG1zcl9jbGFzcyk7CiBvdXRfY2hyZGV2OgotCXVucmVnaXN0ZXJfY2hyZGV2KE1TUl9NQUpPUiwgImNwdS9tc3IiKTsKKwlfX3VucmVnaXN0ZXJfY2hyZGV2KE1TUl9NQUpPUiwgMCwgTlJfQ1BVUywgImNwdS9tc3IiKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL29scGMuYyBiL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMKaW5kZXggNDAwNmM1Mi4uOWQxZDI2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL29scGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAl1bnNpZ25lZCBjaGFyICpyb21zaWc7CiAKIAkvKiBUaGUgaW9yZW1hcCBjaGVjayBpcyBkYW5nZXJvdXM7IGxpbWl0IHdoYXQgd2UgcnVuIGl0IG9uICovCi0JaWYgKCFpc19nZW9kZSgpIHx8IGdlb2RlX2hhc192c2EyKCkpCisJaWYgKCFpc19nZW9kZSgpIHx8IGNzNTUzNV9oYXNfdnNhMigpKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pbml0KCZlY19sb2NrKTsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQkJKHVuc2lnbmVkIGNoYXIgKikgJm9scGNfcGxhdGZvcm1faW5mby5lY3ZlciwgMSk7CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlIFZTQSBleGlzdHMgKi8KLQlpZiAoZ2VvZGVfaGFzX3ZzYTIoKSkKKwlpZiAoY3M1NTM1X2hhc192c2EyKCkpCiAJCW9scGNfcGxhdGZvcm1faW5mby5mbGFncyB8PSBPTFBDX0ZfVlNBOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiT0xQQyBib2FyZCByZXZpc2lvbiAlcyVYIChFQz0leClcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQtc3BpbmxvY2tzLmMKaW5kZXggM2E3YzVhNC4uNjc2YjhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LXNwaW5sb2Nrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC1zcGlubG9ja3MuYwpAQCAtOCw5ICs4LDkgQEAKICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KIAogc3RhdGljIGlubGluZSB2b2lkCi1kZWZhdWx0X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK2RlZmF1bHRfc3Bpbl9sb2NrX2ZsYWdzKGFyY2hfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlfX3Jhd19zcGluX2xvY2sobG9jayk7CisJYXJjaF9zcGluX2xvY2sobG9jayk7CiB9CiAKIHN0cnVjdCBwdl9sb2NrX29wcyBwdl9sb2NrX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggYzU2M2U0Yy4uMmJiZGU2MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTIxMiw3ICsyMTIsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRibC0+aXRfbG9jaywgZmxhZ3MpOwogCi0JaW9tbXVfYXJlYV9yZXNlcnZlKHRibC0+aXRfbWFwLCBpbmRleCwgbnBhZ2VzKTsKKwliaXRtYXBfc2V0KHRibC0+aXRfbWFwLCBpbmRleCwgbnBhZ2VzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRibC0+aXRfbG9jaywgZmxhZ3MpOwogfQpAQCAtMzAzLDcgKzMwMyw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGJsLT5pdF9sb2NrLCBmbGFncyk7CiAKLQlpb21tdV9hcmVhX2ZyZWUodGJsLT5pdF9tYXAsIGVudHJ5LCBucGFnZXMpOworCWJpdG1hcF9jbGVhcih0YmwtPml0X21hcCwgZW50cnksIG5wYWdlcyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YmwtPml0X2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IGFmY2M1OGIuLjc1ZTE0ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMTI0LDggKzEyNCw4IEBACiAJLyogZnJlZSB0aGUgcmFuZ2Ugc28gaW9tbXUgY291bGQgZ2V0IHNvbWUgcmFuZ2UgbGVzcyB0aGFuIDRHICovCiAJZG1hMzJfZnJlZV9ib290bWVtKCk7CiAjZW5kaWYKLQlpZiAocGNpX3N3aW90bGJfaW5pdCgpKQotCQlyZXR1cm47CisJaWYgKHBjaV9zd2lvdGxiX2RldGVjdCgpKQorCQlnb3RvIG91dDsKIAogCWdhcnRfaW9tbXVfaG9sZV9pbml0KCk7CiAKQEAgLTEzNSw2ICsxMzUsOCBAQAogCiAJLyogbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGdhcnRfaW9tbXVfaG9sZV9pbml0ICovCiAJYW1kX2lvbW11X2RldGVjdCgpOworb3V0OgorCXBjaV9zd2lvdGxiX2luaXQoKTsKIH0KIAogdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggZTZhMGQ0MC4uMzRkZTUzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+CkBAIC0xMjYsNyArMTI2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11X2JpdG1hcF9sb2NrLCBmbGFncyk7Ci0JaW9tbXVfYXJlYV9mcmVlKGlvbW11X2dhcnRfYml0bWFwLCBvZmZzZXQsIHNpemUpOworCWJpdG1hcF9jbGVhcihpb21tdV9nYXJ0X2JpdG1hcCwgb2Zmc2V0LCBzaXplKTsKIAlpZiAob2Zmc2V0ID49IG5leHRfYml0KQogCQluZXh0X2JpdCA9IG9mZnNldCArIHNpemU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXVfYml0bWFwX2xvY2ssIGZsYWdzKTsKQEAgLTcxMCw3ICs3MTAsOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJaW50IGk7CiAKLQlpZiAobm9fYWdwKQorCS8qIGRvbid0IHNodXRkb3duIGl0IGlmIHRoZXJlIGlzIEFHUCBpbnN0YWxsZWQgKi8KKwlpZiAoIW5vX2FncCkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9rOF9ub3J0aGJyaWRnZXM7IGkrKykgewpAQCAtNzkxLDcgKzc5Miw3IEBACiAJICogT3V0IG9mIElPTU1VIHNwYWNlIGhhbmRsaW5nLgogCSAqIFJlc2VydmUgc29tZSBpbnZhbGlkIHBhZ2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdBUlQuCiAJICovCi0JaW9tbXVfYXJlYV9yZXNlcnZlKGlvbW11X2dhcnRfYml0bWFwLCAwLCBFTUVSR0VOQ1lfUEFHRVMpOworCWJpdG1hcF9zZXQoaW9tbXVfZ2FydF9iaXRtYXAsIDAsIEVNRVJHRU5DWV9QQUdFUyk7CiAKIAlwcl9pbmZvKCJQQ0ktRE1BOiBSZXNlcnZpbmcgJWx1TUIgb2YgSU9NTVUgYXJlYSBpbiB0aGUgQUdQIGFwZXJ0dXJlXG4iLAogCSAgICAgICBpb21tdV9zaXplID4+IDIwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKaW5kZXggZTNjMGE2Ni4uN2QyODI5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKQEAgLTQzLDEyICs0MywxMiBAQAogfTsKIAogLyoKLSAqIHBjaV9zd2lvdGxiX2luaXQgLSBpbml0aWFsaXplIHN3aW90bGIgaWYgbmVjZXNzYXJ5CisgKiBwY2lfc3dpb3RsYl9kZXRlY3QgLSBzZXQgc3dpb3RsYiB0byAxIGlmIG5lY2Vzc2FyeQogICoKICAqIFRoaXMgcmV0dXJucyBub24temVybyBpZiB3ZSBhcmUgZm9yY2VkIHRvIHVzZSBzd2lvdGxiIChieSB0aGUgYm9vdAogICogb3B0aW9uKS4KICAqLwotaW50IF9faW5pdCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpCitpbnQgX19pbml0IHBjaV9zd2lvdGxiX2RldGVjdCh2b2lkKQogewogCWludCB1c2Vfc3dpb3RsYiA9IHN3aW90bGIgfCBzd2lvdGxiX2ZvcmNlOwogCkBAIC02MCwxMCArNjAsMTMgQEAKIAlpZiAoc3dpb3RsYl9mb3JjZSkKIAkJc3dpb3RsYiA9IDE7CiAKKwlyZXR1cm4gdXNlX3N3aW90bGI7Cit9CisKK3ZvaWQgX19pbml0IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKK3sKIAlpZiAoc3dpb3RsYikgewogCQlzd2lvdGxiX2luaXQoMCk7CiAJCWRtYV9vcHMgPSAmc3dpb3RsYl9kbWFfb3BzOwogCX0KLQotCXJldHVybiB1c2Vfc3dpb3RsYjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDVlMmJhNjMuLjk4YzJjZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLXJldHVybi1ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtOTAsNiArOTIsMjUgQEAKIAl9CiB9CiAKK3ZvaWQgc2hvd19yZWdzX2NvbW1vbih2b2lkKQoreworCWNvbnN0IGNoYXIgKmJvYXJkLCAqcHJvZHVjdDsKKworCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7CisJaWYgKCFib2FyZCkKKwkJYm9hcmQgPSAiIjsKKwlwcm9kdWN0ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKKwlpZiAoIXByb2R1Y3QpCisJCXByb2R1Y3QgPSAiIjsKKworCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzICVzLyVzXG4iLAorCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKKwkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCisJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKKwkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24sIGJvYXJkLCBwcm9kdWN0KTsKK30KKwogdm9pZCBmbHVzaF90aHJlYWQodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC0yMzQsNiArMjU1LDc2IEBACiAJCSAgICAgICBOVUxMLCBOVUxMKTsKIH0KIAorbG9uZworc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJICB2b2lkIF9fdXNlciAqcGFyZW50X3RpZCwgdm9pZCBfX3VzZXIgKmNoaWxkX3RpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKCFuZXdzcCkKKwkJbmV3c3AgPSByZWdzLT5zcDsKKwlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsIHJlZ3MsIDAsIHBhcmVudF90aWQsIGNoaWxkX3RpZCk7Cit9CisKKy8qCisgKiBUaGlzIGdldHMgcnVuIHdpdGggJXNpIGNvbnRhaW5pbmcgdGhlCisgKiBmdW5jdGlvbiB0byBjYWxsLCBhbmQgJWRpIGNvbnRhaW5pbmcKKyAqIHRoZSAiYXJncyIuCisgKi8KK2V4dGVybiB2b2lkIGtlcm5lbF90aHJlYWRfaGVscGVyKHZvaWQpOworCisvKgorICogQ3JlYXRlIGEga2VybmVsIHRocmVhZAorICovCitpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwltZW1zZXQoJnJlZ3MsIDAsIHNpemVvZihyZWdzKSk7CisKKwlyZWdzLnNpID0gKHVuc2lnbmVkIGxvbmcpIGZuOworCXJlZ3MuZGkgPSAodW5zaWduZWQgbG9uZykgYXJnOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXJlZ3MuZHMgPSBfX1VTRVJfRFM7CisJcmVncy5lcyA9IF9fVVNFUl9EUzsKKwlyZWdzLmZzID0gX19LRVJORUxfUEVSQ1BVOworCXJlZ3MuZ3MgPSBfX0tFUk5FTF9TVEFDS19DQU5BUlk7CisjZW5kaWYKKworCXJlZ3Mub3JpZ19heCA9IC0xOworCXJlZ3MuaXAgPSAodW5zaWduZWQgbG9uZykga2VybmVsX3RocmVhZF9oZWxwZXI7CisJcmVncy5jcyA9IF9fS0VSTkVMX0NTIHwgZ2V0X2tlcm5lbF9ycGwoKTsKKwlyZWdzLmZsYWdzID0gWDg2X0VGTEFHU19JRiB8IDB4MjsKKworCS8qIE9rLCBjcmVhdGUgdGhlIG5ldyBwcm9jZXNzLi4gKi8KKwlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CisKKy8qCisgKiBzeXNfZXhlY3ZlKCkgZXhlY3V0ZXMgYSBuZXcgcHJvZ3JhbS4KKyAqLworbG9uZyBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICpuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqYXJndiwKKwkJY2hhciBfX3VzZXIgKiBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWxvbmcgZXJyb3I7CisJY2hhciAqZmlsZW5hbWU7CisKKwlmaWxlbmFtZSA9IGdldG5hbWUobmFtZSk7CisJZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKKwlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKKwkJcmV0dXJuIGVycm9yOworCWVycm9yID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmV0dXJuIHVzaW5nIHN5c2VudGVyLi4gKi8KKyAgICAgICAgICAgICAgICBzZXRfdGhyZWFkX2ZsYWcoVElGX0lSRVQpOworICAgICAgICB9CisjZW5kaWYKKworCXB1dG5hbWUoZmlsZW5hbWUpOworCXJldHVybiBlcnJvcjsKK30KIAogLyoKICAqIElkbGUgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggMDc1NTgwYi4uOWM1MTdiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNSw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0xMjgsNyArMTI2LDYgQEAKIAl1bnNpZ25lZCBsb25nIGQwLCBkMSwgZDIsIGQzLCBkNiwgZDc7CiAJdW5zaWduZWQgbG9uZyBzcDsKIAl1bnNpZ25lZCBzaG9ydCBzcywgZ3M7Ci0JY29uc3QgY2hhciAqYm9hcmQ7CiAKIAlpZiAodXNlcl9tb2RlX3ZtKHJlZ3MpKSB7CiAJCXNwID0gcmVncy0+c3A7CkBAIC0xNDAsMTYgKzEzNyw3IEBACiAJCXNhdmVzZWdtZW50KGdzLCBncyk7CiAJfQogCi0JcHJpbnRrKCJcbiIpOwotCi0JYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX05BTUUpOwotCWlmICghYm9hcmQpCi0JCWJvYXJkID0gIiI7Ci0JcHJpbnRrKCJQaWQ6ICVkLCBjb21tOiAlcyAlcyAoJXMgJS4qcykgJXNcbiIsCi0JCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwKLQkJCXByaW50X3RhaW50ZWQoKSwgaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCi0JCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCi0JCQlpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgYm9hcmQpOworCXNob3dfcmVnc19jb21tb24oKTsKIAogCXByaW50aygiRUlQOiAlMDR4Ols8JTA4bHg+XSBFRkxBR1M6ICUwOGx4IENQVTogJWRcbiIsCiAJCQkodTE2KXJlZ3MtPmNzLCByZWdzLT5pcCwgcmVncy0+ZmxhZ3MsCkBAIC0xOTIsMzkgKzE4MCw2IEBACiAJc2hvd190cmFjZShOVUxMLCByZWdzLCAmcmVncy0+c3AsIHJlZ3MtPmJwKTsKIH0KIAotLyoKLSAqIFRoaXMgZ2V0cyBydW4gd2l0aCAlYnggY29udGFpbmluZyB0aGUKLSAqIGZ1bmN0aW9uIHRvIGNhbGwsIGFuZCAlZHggY29udGFpbmluZwotICogdGhlICJhcmdzIi4KLSAqLwotZXh0ZXJuIHZvaWQga2VybmVsX3RocmVhZF9oZWxwZXIodm9pZCk7Ci0KLS8qCi0gKiBDcmVhdGUgYSBrZXJuZWwgdGhyZWFkCi0gKi8KLWludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgcmVnczsKLQotCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKLQotCXJlZ3MuYnggPSAodW5zaWduZWQgbG9uZykgZm47Ci0JcmVncy5keCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7Ci0KLQlyZWdzLmRzID0gX19VU0VSX0RTOwotCXJlZ3MuZXMgPSBfX1VTRVJfRFM7Ci0JcmVncy5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKLQlyZWdzLmdzID0gX19LRVJORUxfU1RBQ0tfQ0FOQVJZOwotCXJlZ3Mub3JpZ19heCA9IC0xOwotCXJlZ3MuaXAgPSAodW5zaWduZWQgbG9uZykga2VybmVsX3RocmVhZF9oZWxwZXI7Ci0JcmVncy5jcyA9IF9fS0VSTkVMX0NTIHwgZ2V0X2tlcm5lbF9ycGwoKTsKLQlyZWdzLmZsYWdzID0gWDg2X0VGTEFHU19JRiB8IFg4Nl9FRkxBR1NfU0YgfCBYODZfRUZMQUdTX1BGIHwgMHgyOwotCi0JLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLwotCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlCVUdfT04oZGVhZF90YXNrLT5tbSk7CkBAIC00MzYsNDYgKzM5MSw2IEBACiAJcmV0dXJuIHByZXZfcDsKIH0KIAotaW50IHN5c19jbG9uZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbmV3c3A7Ci0JaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwgKmNoaWxkX3RpZHB0cjsKLQotCWNsb25lX2ZsYWdzID0gcmVncy0+Yng7Ci0JbmV3c3AgPSByZWdzLT5jeDsKLQlwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5keDsKLQljaGlsZF90aWRwdHIgPSAoaW50IF9fdXNlciAqKXJlZ3MtPmRpOwotCWlmICghbmV3c3ApCi0JCW5ld3NwID0gcmVncy0+c3A7Ci0JcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLCBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOwotfQotCi0vKgotICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCi0gKi8KLWludCBzeXNfZXhlY3ZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWludCBlcnJvcjsKLQljaGFyICpmaWxlbmFtZTsKLQotCWZpbGVuYW1lID0gZ2V0bmFtZSgoY2hhciBfX3VzZXIgKikgcmVncy0+YngpOwotCWVycm9yID0gUFRSX0VSUihmaWxlbmFtZSk7Ci0JaWYgKElTX0VSUihmaWxlbmFtZSkpCi0JCWdvdG8gb3V0OwotCWVycm9yID0gZG9fZXhlY3ZlKGZpbGVuYW1lLAotCQkJKGNoYXIgX191c2VyICogX191c2VyICopIHJlZ3MtPmN4LAotCQkJKGNoYXIgX191c2VyICogX191c2VyICopIHJlZ3MtPmR4LAotCQkJcmVncyk7Ci0JaWYgKGVycm9yID09IDApIHsKLQkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHJldHVybiB1c2luZyBzeXNlbnRlci4uICovCi0JCXNldF90aHJlYWRfZmxhZyhUSUZfSVJFVCk7Ci0JfQotCXB1dG5hbWUoZmlsZW5hbWUpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQogI2RlZmluZSB0b3BfZXNwICAgICAgICAgICAgICAgIChUSFJFQURfU0laRSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkKICNkZWZpbmUgdG9wX2VicCAgICAgICAgICAgICAgICAoVEhSRUFEX1NJWkUgLSAyKnNpemVvZih1bnNpZ25lZCBsb25nKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYzk1YzhmNC4uNTJmYmQwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTM4LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTksOCArNTcsNiBAQAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgb2xkX3JzcCk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgY2hhciwgaXNfaWRsZSk7CiAKLXVuc2lnbmVkIGxvbmcga2VybmVsX3RocmVhZF9mbGFncyA9IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQ7Ci0KIHN0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChpZGxlX25vdGlmaWVyKTsKIAogdm9pZCBpZGxlX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKQEAgLTE2MywxOCArMTU5LDggQEAKIAl1bnNpZ25lZCBsb25nIGQwLCBkMSwgZDIsIGQzLCBkNiwgZDc7CiAJdW5zaWduZWQgaW50IGZzaW5kZXgsIGdzaW5kZXg7CiAJdW5zaWduZWQgaW50IGRzLCBjcywgZXM7Ci0JY29uc3QgY2hhciAqYm9hcmQ7CiAKLQlwcmludGsoIlxuIik7Ci0JcHJpbnRfbW9kdWxlcygpOwotCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKLQlpZiAoIWJvYXJkKQotCQlib2FyZCA9ICIiOwotCXByaW50ayhLRVJOX0lORk8gIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzICUuKnMgJXNcbiIsCi0JCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgcHJpbnRfdGFpbnRlZCgpLAotCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKLQkJKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAotCQlpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgYm9hcmQpOworCXNob3dfcmVnc19jb21tb24oKTsKIAlwcmludGsoS0VSTl9JTkZPICJSSVA6ICUwNGx4Ols8JTAxNmx4Pl0gIiwgcmVncy0+Y3MgJiAweGZmZmYsIHJlZ3MtPmlwKTsKIAlwcmludGtfYWRkcmVzcyhyZWdzLT5pcCwgMSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiUlNQOiAlMDRseDolMDE2bHggIEVGTEFHUzogJTA4bHhcbiIsIHJlZ3MtPnNzLApAQCAtMjg1LDggKzI3MSw5IEBACiAJKmNoaWxkcmVncyA9ICpyZWdzOwogCiAJY2hpbGRyZWdzLT5heCA9IDA7Ci0JY2hpbGRyZWdzLT5zcCA9IHNwOwotCWlmIChzcCA9PSB+MFVMKQorCWlmICh1c2VyX21vZGUocmVncykpCisJCWNoaWxkcmVncy0+c3AgPSBzcDsKKwllbHNlCiAJCWNoaWxkcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZyljaGlsZHJlZ3M7CiAKIAlwLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRyZWdzOwpAQCAtNTIwLDI1ICs1MDcsNiBAQAogCXJldHVybiBwcmV2X3A7CiB9CiAKLS8qCi0gKiBzeXNfZXhlY3ZlKCkgZXhlY3V0ZXMgYSBuZXcgcHJvZ3JhbS4KLSAqLwotYXNtbGlua2FnZQotbG9uZyBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICpuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqYXJndiwKLQkJY2hhciBfX3VzZXIgKiBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWxvbmcgZXJyb3I7Ci0JY2hhciAqZmlsZW5hbWU7Ci0KLQlmaWxlbmFtZSA9IGdldG5hbWUobmFtZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKLQlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKLQkJcmV0dXJuIGVycm9yOwotCWVycm9yID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKLQlwdXRuYW1lKGZpbGVuYW1lKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIHZvaWQgc2V0X3BlcnNvbmFsaXR5XzY0Yml0KHZvaWQpCiB7CiAJLyogaW5oZXJpdCBwZXJzb25hbGl0eSBmcm9tIHBhcmVudCAqLwpAQCAtNTUzLDE1ICs1MjEsNiBAQAogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5SRUFEX0lNUExJRVNfRVhFQzsKIH0KIAotYXNtbGlua2FnZSBsb25nCi1zeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKLQkgIHZvaWQgX191c2VyICpwYXJlbnRfdGlkLCB2b2lkIF9fdXNlciAqY2hpbGRfdGlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpZiAoIW5ld3NwKQotCQluZXdzcCA9IHJlZ3MtPnNwOwotCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwgcGFyZW50X3RpZCwgY2hpbGRfdGlkKTsKLX0KLQogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXVuc2lnbmVkIGxvbmcgc3RhY2s7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMDRkMTgyYS4uMDE3ZDkzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtNTA5LDE0ICs1MDksMTQgQEAKIHsKIAlpZiAoa2J1ZikgewogCQl1bnNpZ25lZCBsb25nICprID0ga2J1ZjsKLQkJd2hpbGUgKGNvdW50ID4gMCkgeworCQl3aGlsZSAoY291bnQgPj0gc2l6ZW9mKCprKSkgewogCQkJKmsrKyA9IGdldHJlZyh0YXJnZXQsIHBvcyk7CiAJCQljb3VudCAtPSBzaXplb2YoKmspOwogCQkJcG9zICs9IHNpemVvZigqayk7CiAJCX0KIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIF9fdXNlciAqdSA9IHVidWY7Ci0JCXdoaWxlIChjb3VudCA+IDApIHsKKwkJd2hpbGUgKGNvdW50ID49IHNpemVvZigqdSkpIHsKIAkJCWlmIChfX3B1dF91c2VyKGdldHJlZyh0YXJnZXQsIHBvcyksIHUrKykpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQljb3VudCAtPSBzaXplb2YoKnUpOwpAQCAtNTM1LDE0ICs1MzUsMTQgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoa2J1ZikgewogCQljb25zdCB1bnNpZ25lZCBsb25nICprID0ga2J1ZjsKLQkJd2hpbGUgKGNvdW50ID4gMCAmJiAhcmV0KSB7CisJCXdoaWxlIChjb3VudCA+PSBzaXplb2YoKmspICYmICFyZXQpIHsKIAkJCXJldCA9IHB1dHJlZyh0YXJnZXQsIHBvcywgKmsrKyk7CiAJCQljb3VudCAtPSBzaXplb2YoKmspOwogCQkJcG9zICs9IHNpemVvZigqayk7CiAJCX0KIAl9IGVsc2UgewogCQljb25zdCB1bnNpZ25lZCBsb25nICBfX3VzZXIgKnUgPSB1YnVmOwotCQl3aGlsZSAoY291bnQgPiAwICYmICFyZXQpIHsKKwkJd2hpbGUgKGNvdW50ID49IHNpemVvZigqdSkgJiYgIXJldCkgewogCQkJdW5zaWduZWQgbG9uZyB3b3JkOwogCQkJcmV0ID0gX19nZXRfdXNlcih3b3JkLCB1KyspOwogCQkJaWYgKHJldCkKQEAgLTU1NSw3ICs1NTUsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgcHRyYWNlX3RyaWdnZXJlZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIGludCBubWksCisJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkID0gJihjdXJyZW50LT50aHJlYWQpOwpAQCAtNTkzLDEzICs1OTUsMTMgQEAKIAlyZXR1cm4gZHI3OwogfQogCi1zdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKgorc3RhdGljIGludAogcHRyYWNlX21vZGlmeV9icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IGxlbiwgaW50IHR5cGUsCiAJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBkaXNhYmxlZCkKIHsKIAlpbnQgZXJyOwogCWludCBnZW5fbGVuLCBnZW5fdHlwZTsKLQlERUZJTkVfQlJFQUtQT0lOVF9BVFRSKGF0dHIpOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAogCS8qCiAJICogV2Ugc2hvdWQgaGF2ZSBhdCBsZWFzdCBhbiBpbmFjdGl2ZSBicmVha3BvaW50IGF0IHRoaXMKQEAgLTYwNywxOCArNjA5LDE4IEBACiAJICogd3JpdHRlbiB0aGUgYWRkcmVzcyByZWdpc3RlciBmaXJzdAogCSAqLwogCWlmICghYnApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGFyY2hfYnBfZ2VuZXJpY19maWVsZHMobGVuLCB0eXBlLCAmZ2VuX2xlbiwgJmdlbl90eXBlKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQlyZXR1cm4gZXJyOwogCiAJYXR0ciA9IGJwLT5hdHRyOwogCWF0dHIuYnBfbGVuID0gZ2VuX2xlbjsKIAlhdHRyLmJwX3R5cGUgPSBnZW5fdHlwZTsKIAlhdHRyLmRpc2FibGVkID0gZGlzYWJsZWQ7CiAKLQlyZXR1cm4gbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIsIGJwLT5jYWxsYmFjaywgdHNrKTsKKwlyZXR1cm4gbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIpOwogfQogCiAvKgpAQCAtNjU2LDI4ICs2NTgsMTcgQEAKIAkJCQlpZiAoIXNlY29uZF9wYXNzKQogCQkJCQljb250aW51ZTsKIAotCQkJCXRocmVhZC0+cHRyYWNlX2Jwc1tpXSA9IE5VTEw7Ci0JCQkJYnAgPSBwdHJhY2VfbW9kaWZ5X2JyZWFrcG9pbnQoYnAsIGxlbiwgdHlwZSwKKwkJCQlyYyA9IHB0cmFjZV9tb2RpZnlfYnJlYWtwb2ludChicCwgbGVuLCB0eXBlLAogCQkJCQkJCSAgICAgIHRzaywgMSk7Ci0JCQkJaWYgKElTX0VSUihicCkpIHsKLQkJCQkJcmMgPSBQVFJfRVJSKGJwKTsKLQkJCQkJdGhyZWFkLT5wdHJhY2VfYnBzW2ldID0gTlVMTDsKKwkJCQlpZiAocmMpCiAJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQl0aHJlYWQtPnB0cmFjZV9icHNbaV0gPSBicDsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJYnAgPSBwdHJhY2VfbW9kaWZ5X2JyZWFrcG9pbnQoYnAsIGxlbiwgdHlwZSwgdHNrLCAwKTsKLQotCQkvKiBJbmNvcnJlY3QgYnAsIG9yIHdlIGhhdmUgYSBidWcgaW4gYnAgQVBJICovCi0JCWlmIChJU19FUlIoYnApKSB7Ci0JCQlyYyA9IFBUUl9FUlIoYnApOwotCQkJdGhyZWFkLT5wdHJhY2VfYnBzW2ldID0gTlVMTDsKKwkJcmMgPSBwdHJhY2VfbW9kaWZ5X2JyZWFrcG9pbnQoYnAsIGxlbiwgdHlwZSwgdHNrLCAwKTsKKwkJaWYgKHJjKQogCQkJYnJlYWs7Ci0JCX0KLQkJdGhyZWFkLT5wdHJhY2VfYnBzW2ldID0gYnA7CiAJfQogCS8qCiAJICogTWFrZSBhIHNlY29uZCBwYXNzIHRvIGZyZWUgdGhlIHJlbWFpbmluZyB1bnVzZWQgYnJlYWtwb2ludHMKQEAgLTcyMSw5ICs3MTIsMTAgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CiAJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmdHNrLT50aHJlYWQ7Ci0JREVGSU5FX0JSRUFLUE9JTlRfQVRUUihhdHRyKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CiAKIAlpZiAoIXQtPnB0cmFjZV9icHNbbnJdKSB7CisJCWh3X2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CiAJCS8qCiAJCSAqIFB1dCBzdHViIGxlbiBhbmQgdHlwZSB0byByZWdpc3RlciAocmVzZXJ2ZSkgYW4gaW5hY3RpdmUgYnV0CiAJCSAqIGNvcnJlY3QgYnAKQEAgLTczNCwyNiArNzI2LDMyIEBACiAJCWF0dHIuZGlzYWJsZWQgPSAxOwogCiAJCWJwID0gcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KCZhdHRyLCBwdHJhY2VfdHJpZ2dlcmVkLCB0c2spOworCisJCS8qCisJCSAqIENIRUNLTUU6IHRoZSBwcmV2aW91cyBjb2RlIHJldHVybmVkIC1FSU8gaWYgdGhlIGFkZHIgd2Fzbid0CisJCSAqIGEgdmFsaWQgdGFzayB2aXJ0dWFsIGFkZHIuIFRoZSBuZXcgb25lIHdpbGwgcmV0dXJuIC1FSU5WQUwgaW4KKwkJICogIHRoaXMgY2FzZS4KKwkJICogLUVJTlZBTCBtYXkgYmUgd2hhdCB3ZSB3YW50IGZvciBpbi1rZXJuZWwgYnJlYWtwb2ludHMgdXNlcnMsCisJCSAqIGJ1dCAtRUlPIGxvb2tzIGJldHRlciBmb3IgcHRyYWNlLCBzaW5jZSB3ZSByZWZ1c2UgYSByZWdpc3RlcgorCQkgKiB3cml0aW5nIGZvciB0aGUgdXNlci4gQW5kIGFueXdheSB0aGlzIGlzIHRoZSBwcmV2aW91cworCQkgKiBiZWhhdmlvdXIuCisJCSAqLworCQlpZiAoSVNfRVJSKGJwKSkKKwkJCXJldHVybiBQVFJfRVJSKGJwKTsKKworCQl0LT5wdHJhY2VfYnBzW25yXSA9IGJwOwogCX0gZWxzZSB7CisJCWludCBlcnI7CisKIAkJYnAgPSB0LT5wdHJhY2VfYnBzW25yXTsKLQkJdC0+cHRyYWNlX2Jwc1tucl0gPSBOVUxMOwogCiAJCWF0dHIgPSBicC0+YXR0cjsKIAkJYXR0ci5icF9hZGRyID0gYWRkcjsKLQkJYnAgPSBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0ciwgYnAtPmNhbGxiYWNrLCB0c2spOworCQllcnIgPSBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwogCX0KLQkvKgotCSAqIENIRUNLTUU6IHRoZSBwcmV2aW91cyBjb2RlIHJldHVybmVkIC1FSU8gaWYgdGhlIGFkZHIgd2Fzbid0IGEKLQkgKiB2YWxpZCB0YXNrIHZpcnR1YWwgYWRkci4gVGhlIG5ldyBvbmUgd2lsbCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzCi0JICogY2FzZS4KLQkgKiAtRUlOVkFMIG1heSBiZSB3aGF0IHdlIHdhbnQgZm9yIGluLWtlcm5lbCBicmVha3BvaW50cyB1c2VycywgYnV0Ci0JICogLUVJTyBsb29rcyBiZXR0ZXIgZm9yIHB0cmFjZSwgc2luY2Ugd2UgcmVmdXNlIGEgcmVnaXN0ZXIgd3JpdGluZwotCSAqIGZvciB0aGUgdXNlci4gQW5kIGFueXdheSB0aGlzIGlzIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIuCi0JICovCi0JaWYgKElTX0VSUihicCkpCi0JCXJldHVybiBQVFJfRVJSKGJwKTsKIAotCXQtPnB0cmFjZV9icHNbbnJdID0gYnA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NjAsMTQgKzE0NTgsMTQgQEAKIHsKIAlpZiAoa2J1ZikgewogCQljb21wYXRfdWxvbmdfdCAqayA9IGtidWY7Ci0JCXdoaWxlIChjb3VudCA+IDApIHsKKwkJd2hpbGUgKGNvdW50ID49IHNpemVvZigqaykpIHsKIAkJCWdldHJlZzMyKHRhcmdldCwgcG9zLCBrKyspOwogCQkJY291bnQgLT0gc2l6ZW9mKCprKTsKIAkJCXBvcyArPSBzaXplb2YoKmspOwogCQl9CiAJfSBlbHNlIHsKIAkJY29tcGF0X3Vsb25nX3QgX191c2VyICp1ID0gdWJ1ZjsKLQkJd2hpbGUgKGNvdW50ID4gMCkgeworCQl3aGlsZSAoY291bnQgPj0gc2l6ZW9mKCp1KSkgewogCQkJY29tcGF0X3Vsb25nX3Qgd29yZDsKIAkJCWdldHJlZzMyKHRhcmdldCwgcG9zLCAmd29yZCk7CiAJCQlpZiAoX19wdXRfdXNlcih3b3JkLCB1KyspKQpAQCAtMTQ4OCwxNCArMTQ4NiwxNCBAQAogCWludCByZXQgPSAwOwogCWlmIChrYnVmKSB7CiAJCWNvbnN0IGNvbXBhdF91bG9uZ190ICprID0ga2J1ZjsKLQkJd2hpbGUgKGNvdW50ID4gMCAmJiAhcmV0KSB7CisJCXdoaWxlIChjb3VudCA+PSBzaXplb2YoKmspICYmICFyZXQpIHsKIAkJCXJldCA9IHB1dHJlZzMyKHRhcmdldCwgcG9zLCAqaysrKTsKIAkJCWNvdW50IC09IHNpemVvZigqayk7CiAJCQlwb3MgKz0gc2l6ZW9mKCprKTsKIAkJfQogCX0gZWxzZSB7CiAJCWNvbnN0IGNvbXBhdF91bG9uZ190IF9fdXNlciAqdSA9IHVidWY7Ci0JCXdoaWxlIChjb3VudCA+IDAgJiYgIXJldCkgeworCQl3aGlsZSAoY291bnQgPj0gc2l6ZW9mKCp1KSAmJiAhcmV0KSB7CiAJCQljb21wYXRfdWxvbmdfdCB3b3JkOwogCQkJcmV0ID0gX19nZXRfdXNlcih3b3JkLCB1KyspOwogCQkJaWYgKHJldCkKQEAgLTE2NzgsMjEgKzE2NzYsMzMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBmaWxsX3NpZ3RyYXBfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQlpbnQgZXJyb3JfY29kZSwgaW50IHNpX2NvZGUsCisJCQkJc3RydWN0IHNpZ2luZm8gKmluZm8pCit7CisJdHNrLT50aHJlYWQudHJhcF9ubyA9IDE7CisJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaW5mby0+c2lfc2lnbm8gPSBTSUdUUkFQOworCWluZm8tPnNpX2NvZGUgPSBzaV9jb2RlOworCWluZm8tPnNpX2FkZHIgPSB1c2VyX21vZGVfdm0ocmVncykgPyAodm9pZCBfX3VzZXIgKilyZWdzLT5pcCA6IE5VTEw7Cit9CisKK3ZvaWQgdXNlcl9zaW5nbGVfc3RlcF9zaWdpbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCXN0cnVjdCBzaWdpbmZvICppbmZvKQoreworCWZpbGxfc2lndHJhcF9pbmZvKHRzaywgcmVncywgMCwgVFJBUF9CUktQVCwgaW5mbyk7Cit9CisKIHZvaWQgc2VuZF9zaWd0cmFwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkJIGludCBlcnJvcl9jb2RlLCBpbnQgc2lfY29kZSkKIHsKIAlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogCi0JdHNrLT50aHJlYWQudHJhcF9ubyA9IDE7Ci0JdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0JaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7Ci0JaW5mby5zaV9jb2RlID0gc2lfY29kZTsKLQotCS8qIFVzZXItbW9kZSBpcD8gKi8KLQlpbmZvLnNpX2FkZHIgPSB1c2VyX21vZGVfdm0ocmVncykgPyAodm9pZCBfX3VzZXIgKikgcmVncy0+aXAgOiBOVUxMOwotCisJZmlsbF9zaWd0cmFwX2luZm8odHNrLCByZWdzLCBlcnJvcl9jb2RlLCBzaV9jb2RlLCAmaW5mbyk7CiAJLyogU2VuZCB1cyB0aGUgZmFrZSBTSUdUUkFQICovCiAJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJmluZm8sIHRzayk7CiB9CkBAIC0xNzU3LDI5ICsxNzY3LDIyIEBACiAKIGFzbXJlZ3Bhcm0gdm9pZCBzeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWJvb2wgc3RlcDsKKwogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKIAkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPmF4KSwgcmVncy0+YXgpOwogCiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKQogCQl0cmFjZV9zeXNfZXhpdChyZWdzLCByZWdzLT5heCk7CiAKLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCi0JCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDApOwotCiAJLyoKIAkgKiBJZiBUSUZfU1lTQ0FMTF9FTVUgaXMgc2V0LCB3ZSBvbmx5IGdldCBoZXJlIGJlY2F1c2Ugb2YKIAkgKiBUSUZfU0lOR0xFU1RFUCAoaS5lLiB0aGlzIGlzIFBUUkFDRV9TWVNFTVVfU0lOR0xFU1RFUCkuCiAJICogV2UgYWxyZWFkeSByZXBvcnRlZCB0aGlzIHN5c2NhbGwgaW5zdHJ1Y3Rpb24gaW4KLQkgKiBzeXNjYWxsX3RyYWNlX2VudGVyKCksIHNvIGRvbid0IGRvIGFueSBtb3JlIG5vdy4KKwkgKiBzeXNjYWxsX3RyYWNlX2VudGVyKCkuCiAJICovCi0JaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfRU1VKSkpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgd2UgYXJlIHNpbmdsZS1zdGVwcGluZywgc3ludGhlc2l6ZSBhIHRyYXAgdG8gZm9sbG93IHRoZQotCSAqIHN5c3RlbSBjYWxsIGluc3RydWN0aW9uLgotCSAqLwotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSAmJgotCSAgICB0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKGN1cnJlbnQsIFNJR1RSQVApKQotCQlzZW5kX3NpZ3RyYXAoY3VycmVudCwgcmVncywgMCwgVFJBUF9CUktQVCk7CisJc3RlcCA9IHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKSAmJgorCQkJIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfRU1VKTsKKwlpZiAoc3RlcCB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgc3RlcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggMmI5N2ZjNS4uMTU0NWJjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMjU5LDYgKzI1OSwxNCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTQkMtRklUUEMyIiksCiAJCX0sCiAJfSwKKwl7ICAgICAgIC8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBBU1VTIFA0UzgwMCAqLworCQkuY2FsbGJhY2sgPSBzZXRfYmlvc19yZWJvb3QsCisJCS5pZGVudCA9ICJBU1VTIFA0UzgwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlA0UzgwMCIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290X2ZpeHVwc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF9maXh1cHNfMzIuYwppbmRleCAyMDFlYWI2Li5mZGEzMTNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290X2ZpeHVwc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfZml4dXBzXzMyLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vcmVib290X2ZpeHVwcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jczU1MzUuaD4KIAogc3RhdGljIHZvaWQgY3M1NTMwYV93YXJtX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDk0NmEzMTEuLmY3YjhiOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC03Myw2ICs3Myw3IEBACiAKICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTg3NSw2ICs4NzYsMTMgQEAKIAogCXJlc2VydmVfYnJrKCk7CiAKKwkvKgorCSAqIEZpbmQgYW5kIHJlc2VydmUgcG9zc2libGUgYm9vdC10aW1lIFNNUCBjb25maWd1cmF0aW9uOgorCSAqLworCWZpbmRfc21wX2NvbmZpZygpOworCisJcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSgpOworCiAjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKIAkvKgogCSAqIFJlc2VydmUgbG93IG1lbW9yeSByZWdpb24gZm9yIHNsZWVwIHN1cHBvcnQuCkBAIC05MjEsMTEgKzkyOSw2IEBACiAKIAllYXJseV9hY3BpX2Jvb3RfaW5pdCgpOwogCi0JLyoKLQkgKiBGaW5kIGFuZCByZXNlcnZlIHBvc3NpYmxlIGJvb3QtdGltZSBTTVAgY29uZmlndXJhdGlvbjoKLQkgKi8KLQlmaW5kX3NtcF9jb25maWcoKTsKLQogI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKIAkvKgogCSAqIFBhcnNlIFNSQVQgdG8gZGlzY292ZXIgbm9kZXMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKaW5kZXggZDU1OWFmOS4uMzVhYmNiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpAQCAtMSwzICsxLDUgQEAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIwLDkgKzIyLDkgQEAKICNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKLSMgZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorIyBkZWZpbmUgREJHKGZtdCwgLi4uKSBwcl9kYmcoZm10LCAjI19fVkFfQVJHU19fKQogI2Vsc2UKLSMgZGVmaW5lIERCRyh4Li4uKQorIyBkZWZpbmUgREJHKGZtdCwgLi4uKSBkbyB7IGlmICgwKSBwcl9kYmcoZm10LCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9udW1iZXIpOwpAQCAtMTE2LDggKzExOCw4IEBACiAJfSBlbHNlIHsKIAkJcHRyID0gX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhOT0RFX0RBVEEobm9kZSksCiAJCQkJCQkgICBzaXplLCBhbGlnbiwgZ29hbCk7Ci0JCXByX2RlYnVnKCJwZXIgY3B1IGRhdGEgZm9yIGNwdSVkICVsdSBieXRlcyBvbiBub2RlJWQgYXQgIgotCQkJICIlMDE2bHhcbiIsIGNwdSwgc2l6ZSwgbm9kZSwgX19wYShwdHIpKTsKKwkJcHJfZGVidWcoInBlciBjcHUgZGF0YSBmb3IgY3B1JWQgJWx1IGJ5dGVzIG9uIG5vZGUlZCBhdCAlMDE2bHhcbiIsCisJCQkgY3B1LCBzaXplLCBub2RlLCBfX3BhKHB0cikpOwogCX0KIAlyZXR1cm4gcHRyOwogI2Vsc2UKQEAgLTE5OCw4ICsyMDAsNyBAQAogCQkJCQkgICAgcGNwdV9jcHVfZGlzdGFuY2UsCiAJCQkJCSAgICBwY3B1X2ZjX2FsbG9jLCBwY3B1X2ZjX2ZyZWUpOwogCQlpZiAocmMgPCAwKQotCQkJcHJfd2FybmluZygiUEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksICIKLQkJCQkgICAiZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuIiwKKwkJCXByX3dhcm5pbmcoIiVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuIiwKIAkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOwogCX0KIAlpZiAocmMgPCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCmluZGV4IDc0ZmU2ZDguLjRmZDE3M2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKQEAgLTU0NSwyMiArNTQ1LDEyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotaW50IHN5c19zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQljb25zdCBzdGFja190IF9fdXNlciAqdXNzID0gKGNvbnN0IHN0YWNrX3QgX191c2VyICopcmVncy0+Yng7Ci0Jc3RhY2tfdCBfX3VzZXIgKnVvc3MgPSAoc3RhY2tfdCBfX3VzZXIgKilyZWdzLT5jeDsKLQotCXJldHVybiBkb19zaWdhbHRzdGFjayh1c3MsIHVvc3MsIHJlZ3MtPnNwKTsKLX0KLSNlbHNlIC8qICFDT05GSUdfWDg2XzMyICovCi1hc21saW5rYWdlIGxvbmcKK2xvbmcKIHN5c19zaWdhbHRzdGFjayhjb25zdCBzdGFja190IF9fdXNlciAqdXNzLCBzdGFja190IF9fdXNlciAqdW9zcywKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmV0dXJuIGRvX3NpZ2FsdHN0YWNrKHVzcywgdW9zcywgcmVncy0+c3ApOwogfQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyoKICAqIERvIGEgc2lnbmFsIHJldHVybjsgdW5kbyB0aGUgc2lnbmFsIHN0YWNrLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggMjllNjc0NC4uNjc4ZDBiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC02NzEsNiArNjcxLDI2IEBACiAJY29tcGxldGUoJmNfaWRsZS0+ZG9uZSk7CiB9CiAKKy8qIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxpbmVzIHByaW50ZWQgd2hlbiBib290aW5nIGEgbGFyZ2UgY3B1IGNvdW50IHN5c3RlbSAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IGFubm91bmNlX2NwdShpbnQgY3B1LCBpbnQgYXBpY2lkKQoreworCXN0YXRpYyBpbnQgY3VycmVudF9ub2RlID0gLTE7CisJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCisJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgeworCQlpZiAobm9kZSAhPSBjdXJyZW50X25vZGUpIHsKKwkJCWlmIChjdXJyZW50X25vZGUgPiAoLTEpKQorCQkJCXByX2NvbnQoIiBPay5cbiIpOworCQkJY3VycmVudF9ub2RlID0gbm9kZTsKKwkJCXByX2luZm8oIkJvb3RpbmcgTm9kZSAlM2QsIFByb2Nlc3NvcnMgIiwgbm9kZSk7CisJCX0KKwkJcHJfY29udCgiICMlZCVzIiwgY3B1LCBjcHUgPT0gKG5yX2NwdV9pZHMgLSAxKSA/ICIgT2suXG4iIDogIiIpOworCQlyZXR1cm47CisJfSBlbHNlCisJCXByX2luZm8oIkJvb3RpbmcgTm9kZSAlZCBQcm9jZXNzb3IgJWQgQVBJQyAweCV4XG4iLAorCQkJbm9kZSwgY3B1LCBhcGljaWQpOworfQorCiAvKgogICogTk9URSAtIG9uIG1vc3Qgc3lzdGVtcyB0aGlzIGlzIGEgUEhZU0lDQUwgYXBpYyBJRCwgYnV0IG9uIG11bHRpcXVhZAogICogKGllIGNsdXN0ZXJlZCBhcGljIGFkZHJlc3NpbmcgbW9kZSksIHRoaXMgaXMgYSBMT0dJQ0FMIGFwaWMgSUQuCkBAIC03MzcsOSArNzU3LDggQEAKIAkvKiBzdGFydF9pcCBoYWQgYmV0dGVyIGJlIHBhZ2UtYWxpZ25lZCEgKi8KIAlzdGFydF9pcCA9IHNldHVwX3RyYW1wb2xpbmUoKTsKIAotCS8qIFNvIHdlIHNlZSB3aGF0J3MgdXAgICAqLwotCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcHJvY2Vzc29yICVkIEFQSUMgMHgleCBpcCAweCVseFxuIiwKLQkJCSAgY3B1LCBhcGljaWQsIHN0YXJ0X2lwKTsKKwkvKiBTbyB3ZSBzZWUgd2hhdCdzIHVwICovCisJYW5ub3VuY2VfY3B1KGNwdSwgYXBpY2lkKTsKIAogCS8qCiAJICogVGhpcyBncnVuZ2UgcnVucyB0aGUgc3RhcnR1cCBwcm9jZXNzIGZvcgpAQCAtNzg4LDIxICs4MDcsMTcgQEAKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfY2FsbGluX21hc2spKSB7Ci0JCQkvKiBudW1iZXIgQ1BVcyBsb2dpY2FsbHksIHN0YXJ0aW5nIGZyb20gMSAoQlNQIGlzIDApICovCi0JCQlwcl9kZWJ1ZygiT0suXG4iKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiAiLCBjcHUpOwotCQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGNwdSkpOwotCQkJcHJfZGVidWcoIkNQVSBoYXMgYm9vdGVkLlxuIik7Ci0JCX0gZWxzZSB7CisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X2NhbGxpbl9tYXNrKSkKKwkJCXByX2RlYnVnKCJDUFUlZDogaGFzIGJvb3RlZC5cbiIsIGNwdSk7CisJCWVsc2UgewogCQkJYm9vdF9lcnJvciA9IDE7CiAJCQlpZiAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXRyYW1wb2xpbmVfYmFzZSkKIAkJCQkJPT0gMHhBNSkKIAkJCQkvKiB0cmFtcG9saW5lIHN0YXJ0ZWQgYnV0Li4uPyAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiU3R1Y2sgPz9cbiIpOworCQkJCXByX2VycigiQ1BVJWQ6IFN0dWNrID8/XG4iLCBjcHUpOwogCQkJZWxzZQogCQkJCS8qIHRyYW1wb2xpbmUgY29kZSBub3QgcnVuICovCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJOb3QgcmVzcG9uZGluZy5cbiIpOworCQkJCXByX2VycigiQ1BVJWQ6IE5vdCByZXNwb25kaW5nLlxuIiwgY3B1KTsKIAkJCWlmIChhcGljLT5pbnF1aXJlX3JlbW90ZV9hcGljKQogCQkJCWFwaWMtPmlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKIAkJfQpAQCAtMTI5MywxNCArMTMwOCwxNiBAQAogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCS8qIFRoZXkgYWNrIHRoaXMgaW4gcGxheV9kZWFkIGJ5IHNldHRpbmcgQ1BVX0RFQUQgKi8KIAkJaWYgKHBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID09IENQVV9ERUFEKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQgaXMgbm93IG9mZmxpbmVcbiIsIGNwdSk7CisJCQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQorCQkJCXByX2luZm8oIkNQVSAldSBpcyBub3cgb2ZmbGluZVxuIiwgY3B1KTsKKwogCQkJaWYgKDEgPT0gbnVtX29ubGluZV9jcHVzKCkpCiAJCQkJYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goMCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbXNsZWVwKDEwMCk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAiQ1BVICV1IGRpZG4ndCBkaWUuLi5cbiIsIGNwdSk7CisJcHJfZXJyKCJDUFUgJXUgZGlkbid0IGRpZS4uLlxuIiwgY3B1KTsKIH0KIAogdm9pZCBwbGF5X2RlYWRfY29tbW9uKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCBjM2ViMjA3Li45MjJlZWZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTUzLDE3ICs1MywxOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHNhdmVfc3RhY2tfb3BzID0gewotCS53YXJuaW5nID0gc2F2ZV9zdGFja193YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbCA9IHNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrID0gc2F2ZV9zdGFja19zdGFjaywKLQkuYWRkcmVzcyA9IHNhdmVfc3RhY2tfYWRkcmVzcywKKwkud2FybmluZwk9IHNhdmVfc3RhY2tfd2FybmluZywKKwkud2FybmluZ19zeW1ib2wJPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJPSBzYXZlX3N0YWNrX3N0YWNrLAorCS5hZGRyZXNzCT0gc2F2ZV9zdGFja19hZGRyZXNzLAorCS53YWxrX3N0YWNrCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgc2F2ZV9zdGFja19vcHNfbm9zY2hlZCA9IHsKLQkud2FybmluZyA9IHNhdmVfc3RhY2tfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wgPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IHNhdmVfc3RhY2tfc3RhY2ssCi0JLmFkZHJlc3MgPSBzYXZlX3N0YWNrX2FkZHJlc3Nfbm9zY2hlZCwKKwkud2FybmluZwk9IHNhdmVfc3RhY2tfd2FybmluZywKKwkud2FybmluZ19zeW1ib2wJPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJPSBzYXZlX3N0YWNrX3N0YWNrLAorCS5hZGRyZXNzCT0gc2F2ZV9zdGFja19hZGRyZXNzX25vc2NoZWQsCisJLndhbGtfc3RhY2sJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCmluZGV4IGNkMDIyMTIuLmM2NTJlZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwpAQCAtMTIsMjEgKzEyLDE5IEBACiAjZW5kaWYKIAogLyogcmVhZHkgZm9yIHg4Nl82NCBhbmQgeDg2ICovCi11bnNpZ25lZCBjaGFyICpfX3RyYW1waW5pdGRhdGEgdHJhbXBvbGluZV9iYXNlID0gX192YShUUkFNUE9MSU5FX0JBU0UpOwordW5zaWduZWQgY2hhciAqX190cmFtcGluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZTsKIAogdm9pZCBfX2luaXQgcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIEJ1dCBmaXJzdCBwaW5jaCBhIGZldyBmb3IgdGhlIHN0YWNrL3RyYW1wb2xpbmUgc3R1ZmYKLQkgKiBGSVhNRTogRG9uJ3QgbmVlZCB0aGUgZXh0cmEgcGFnZSBhdCA0SywgYnV0IG5lZWQgdG8gZml4Ci0JICogdHJhbXBvbGluZSBiZWZvcmUgcmVtb3ZpbmcgaXQuIChzZWUgdGhlIEdEVCBzdHVmZikKLQkgKi8KLQlyZXNlcnZlX2Vhcmx5KFBBR0VfU0laRSwgUEFHRV9TSVpFICsgUEFHRV9TSVpFLCAiRVggVFJBTVBPTElORSIpOwotI2VuZGlmCisJdW5zaWduZWQgbG9uZyBtZW07CisKIAkvKiBIYXMgdG8gYmUgaW4gdmVyeSBsb3cgbWVtb3J5IHNvIHdlIGNhbiBleGVjdXRlIHJlYWwtbW9kZSBBUCBjb2RlLiAqLwotCXJlc2VydmVfZWFybHkoVFJBTVBPTElORV9CQVNFLCBUUkFNUE9MSU5FX0JBU0UgKyBUUkFNUE9MSU5FX1NJWkUsCi0JCQkiVFJBTVBPTElORSIpOworCW1lbSA9IGZpbmRfZTgyMF9hcmVhKDAsIDE8PDIwLCBUUkFNUE9MSU5FX1NJWkUsIFBBR0VfU0laRSk7CisJaWYgKG1lbSA9PSAtMUwpCisJCXBhbmljKCJDYW5ub3QgYWxsb2NhdGUgdHJhbXBvbGluZVxuIik7CisKKwl0cmFtcG9saW5lX2Jhc2UgPSBfX3ZhKG1lbSk7CisJcmVzZXJ2ZV9lYXJseShtZW0sIG1lbSArIFRSQU1QT0xJTkVfU0laRSwgIlRSQU1QT0xJTkUiKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwppbmRleCBjZDk4MmY0Li41OTc2ODNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC03NjMsNiArNzYzLDcgQEAKIHsKIAlpZiAoIXRzY191bnN0YWJsZSkgewogCQl0c2NfdW5zdGFibGUgPSAxOworCQlzY2hlZF9jbG9ja19zdGFibGUgPSAwOwogCQlwcmludGsoS0VSTl9JTkZPICJNYXJraW5nIFRTQyB1bnN0YWJsZSBkdWUgdG8gJXNcbiIsIHJlYXNvbik7CiAJCS8qIENoYW5nZSBvbmx5IHRoZSByYXRpbmcsIHdoZW4gbm90IHJlZ2lzdGVyZWQgKi8KIAkJaWYgKGNsb2Nrc291cmNlX3RzYy5tdWx0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwppbmRleCBlZWQxNTY4Li4wYWE1ZmVkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKQEAgLTMzLDcgKzMzLDcgQEAKICAqIHdlIHdhbnQgdG8gaGF2ZSB0aGUgZmFzdGVzdCwgaW5saW5lZCwgbm9uLWRlYnVnIHZlcnNpb24KICAqIG9mIGEgY3JpdGljYWwgc2VjdGlvbiwgdG8gYmUgYWJsZSB0byBwcm92ZSBUU0MgdGltZS13YXJwczoKICAqLwotc3RhdGljIF9fY3B1aW5pdGRhdGEgcmF3X3NwaW5sb2NrX3Qgc3luY19sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIF9fY3B1aW5pdGRhdGEgYXJjaF9zcGlubG9ja190IHN5bmNfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIHN0YXRpYyBfX2NwdWluaXRkYXRhIGN5Y2xlc190IGxhc3RfdHNjOwogc3RhdGljIF9fY3B1aW5pdGRhdGEgY3ljbGVzX3QgbWF4X3dhcnA7CkBAIC02MiwxMyArNjIsMTMgQEAKIAkJICogcHJldmlvdXMgVFNDIHRoYXQgd2FzIG1lYXN1cmVkIChwb3NzaWJseSBvbgogCQkgKiBhbm90aGVyIENQVSkgYW5kIHVwZGF0ZSB0aGUgcHJldmlvdXMgVFNDIHRpbWVzdGFtcC4KIAkJICovCi0JCV9fcmF3X3NwaW5fbG9jaygmc3luY19sb2NrKTsKKwkJYXJjaF9zcGluX2xvY2soJnN5bmNfbG9jayk7CiAJCXByZXYgPSBsYXN0X3RzYzsKIAkJcmR0c2NfYmFycmllcigpOwogCQlub3cgPSBnZXRfY3ljbGVzKCk7CiAJCXJkdHNjX2JhcnJpZXIoKTsKIAkJbGFzdF90c2MgPSBub3c7Ci0JCV9fcmF3X3NwaW5fdW5sb2NrKCZzeW5jX2xvY2spOworCQlhcmNoX3NwaW5fdW5sb2NrKCZzeW5jX2xvY2spOwogCiAJCS8qCiAJCSAqIEJlIG5pY2UgZXZlcnkgbm93IGFuZCB0aGVuIChhbmQgYWxzbyBjaGVjayB3aGV0aGVyCkBAIC04NywxMCArODcsMTAgQEAKIAkJICogd2Ugc2F3IGEgdGltZS13YXJwIG9mIHRoZSBUU0MgZ29pbmcgYmFja3dhcmRzOgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHByZXYgPiBub3cpKSB7Ci0JCQlfX3Jhd19zcGluX2xvY2soJnN5bmNfbG9jayk7CisJCQlhcmNoX3NwaW5fbG9jaygmc3luY19sb2NrKTsKIAkJCW1heF93YXJwID0gbWF4KG1heF93YXJwLCBwcmV2IC0gbm93KTsKIAkJCW5yX3dhcnBzKys7Ci0JCQlfX3Jhd19zcGluX3VubG9jaygmc3luY19sb2NrKTsKKwkJCWFyY2hfc3Bpbl91bmxvY2soJnN5bmNfbG9jayk7CiAJCX0KIAl9CiAJV0FSTighKG5vdy1zdGFydCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKaW5kZXggNjFkODA1ZC4uZWNlNzNkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3V2X2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwpAQCAtMjE1LDggKzIxNSw3IEBACiAJdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0OwogCXVuc2lnbmVkIG1tcl9wbm9kZTsKIAotCWRlc3QgPSBzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrKTsKLQlpZiAoZGVzdCA9PSBCQURfQVBJQ0lEKQorCWlmIChzZXRfZGVzY19hZmZpbml0eShkZXNjLCBtYXNrLCAmZGVzdCkpCiAJCXJldHVybiAtMTsKIAogCW1tcl92YWx1ZSA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm04Nl8zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtODZfMzIuYwppbmRleCA5YzRlNjI1Li41ZmZiNTYyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtODZfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm04Nl8zMi5jCkBAIC0xOTcsOSArMTk3LDggQEAKIHN0YXRpYyBpbnQgZG9fdm04Nl9pcnFfaGFuZGxpbmcoaW50IHN1YmZ1bmN0aW9uLCBpbnQgaXJxbnVtYmVyKTsKIHN0YXRpYyB2b2lkIGRvX3N5c192bTg2KHN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAotaW50IHN5c192bTg2b2xkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraW50IHN5c192bTg2b2xkKHN0cnVjdCB2bTg2X3N0cnVjdCBfX3VzZXIgKnY4Niwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqdjg2ID0gKHN0cnVjdCB2bTg2X3N0cnVjdCBfX3VzZXIgKilyZWdzLT5ieDsKIAlzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0IGluZm87IC8qIGRlY2xhcmUgdGhpcyBfb24gdG9wXywKIAkJCQkJICogdGhpcyBhdm9pZHMgd2FzdGluZyBvZiBzdGFjayBzcGFjZS4KIAkJCQkJICogVGhpcyByZW1haW5zIG9uIHRoZSBzdGFjayB1bnRpbCB3ZQpAQCAtMjI3LDcgKzIyNiw3IEBACiB9CiAKIAotaW50IHN5c192bTg2KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraW50IHN5c192bTg2KHVuc2lnbmVkIGxvbmcgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtlcm5lbF92bTg2X3N0cnVjdCBpbmZvOyAvKiBkZWNsYXJlIHRoaXMgX29uIHRvcF8sCiAJCQkJCSAqIHRoaXMgYXZvaWRzIHdhc3Rpbmcgb2Ygc3RhY2sgc3BhY2UuCkBAIC0yMzksMTIgKzIzOCwxMiBAQAogCXN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgX191c2VyICp2ODY7CiAKIAl0c2sgPSBjdXJyZW50OwotCXN3aXRjaCAocmVncy0+YngpIHsKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVk04Nl9SRVFVRVNUX0lSUToKIAljYXNlIFZNODZfRlJFRV9JUlE6CiAJY2FzZSBWTTg2X0dFVF9JUlFfQklUUzoKIAljYXNlIFZNODZfR0VUX0FORF9SRVNFVF9JUlE6Ci0JCXJldCA9IGRvX3ZtODZfaXJxX2hhbmRsaW5nKHJlZ3MtPmJ4LCAoaW50KXJlZ3MtPmN4KTsKKwkJcmV0ID0gZG9fdm04Nl9pcnFfaGFuZGxpbmcoY21kLCAoaW50KWFyZyk7CiAJCWdvdG8gb3V0OwogCWNhc2UgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0s6CiAJCS8qCkBAIC0yNjEsNyArMjYwLDcgQEAKIAlyZXQgPSAtRVBFUk07CiAJaWYgKHRzay0+dGhyZWFkLnNhdmVkX3NwMCkKIAkJZ290byBvdXQ7Ci0Jdjg2ID0gKHN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgX191c2VyICopcmVncy0+Y3g7CisJdjg2ID0gKHN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgX191c2VyICopYXJnOwogCXRtcCA9IGNvcHlfdm04Nl9yZWdzX2Zyb21fdXNlcigmaW5mby5yZWdzLCAmdjg2LT5yZWdzLAogCQkJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0LCByZWdzMzIpIC0KIAkJCQkgICAgICAgc2l6ZW9mKGluZm8ucmVncykpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmM2YyMTA0Li5mOTJhMGRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMzE5LDkgKzMxOSw3IEBACiAJCV9fYnJrX2xpbWl0ID0gLjsKIAl9CiAKLQkuZW5kIDogQVQoQUREUiguZW5kKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9lbmQgPSAuOwotCX0KKwlfZW5kID0gLjsKIAogICAgICAgICBTVEFCU19ERUJVRwogICAgICAgICBEV0FSRl9ERUJVRwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwppbmRleCBhMTAyOTc2Li42MTlmN2Y4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwpAQCAtMTcsOCArMTcsNiBAQAogRVhQT1JUX1NZTUJPTChtY291bnQpOwogI2VuZGlmCiAKLUVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7Ci0KIEVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8xKTsKIEVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8yKTsKIEVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl80KTsKQEAgLTU2LDQgKzU0LDYgQEAKIAogRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogRVhQT1JUX1NZTUJPTChpbml0X2xldmVsNF9wZ3QpOwotRVhQT1JUX1NZTUJPTChsb2FkX2dzX2luZGV4KTsKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCitFWFBPUlRfU1lNQk9MKG5hdGl2ZV9sb2FkX2dzX2luZGV4KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCBmYWI3NDQwLi4yOTZhYmE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjksNiArMjksOCBAQAogICogICBCYXNlZCBvbiBRRU1VIGFuZCBYZW4uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAicGl0OiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KIAogI2luY2x1ZGUgImlycS5oIgpAQCAtMjYyLDcgKzI2NCw3IEBACiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcGl0X3RpbWVyKHN0cnVjdCBrdm1fdGltZXIgKnB0KQogewotCXByX2RlYnVnKCJwaXQ6IGV4ZWN1dGUgZGVsIHRpbWVyIVxuIik7CisJcHJfZGVidWcoImV4ZWN1dGUgZGVsIHRpbWVyIVxuIik7CiAJaHJ0aW1lcl9jYW5jZWwoJnB0LT50aW1lcik7CiB9CiAKQEAgLTI4NCw3ICsyODYsNyBAQAogCiAJaW50ZXJ2YWwgPSBtdWxkaXY2NCh2YWwsIE5TRUNfUEVSX1NFQywgS1ZNX1BJVF9GUkVRKTsKIAotCXByX2RlYnVnKCJwaXQ6IGNyZWF0ZSBwaXQgdGltZXIsIGludGVydmFsIGlzICVsbHUgbnNlY1xuIiwgaW50ZXJ2YWwpOworCXByX2RlYnVnKCJjcmVhdGUgcGl0IHRpbWVyLCBpbnRlcnZhbCBpcyAlbGx1IG5zZWNcbiIsIGludGVydmFsKTsKIAogCS8qIFRPRE8gVGhlIG5ldyB2YWx1ZSBvbmx5IGFmZmVjdGVkIGFmdGVyIHRoZSByZXRyaWdnZXJlZCAqLwogCWhydGltZXJfY2FuY2VsKCZwdC0+dGltZXIpOwpAQCAtMzA5LDcgKzMxMSw3IEBACiAKIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnBzLT5sb2NrKSk7CiAKLQlwcl9kZWJ1ZygicGl0OiBsb2FkX2NvdW50IHZhbCBpcyAlZCwgY2hhbm5lbCBpcyAlZFxuIiwgdmFsLCBjaGFubmVsKTsKKwlwcl9kZWJ1ZygibG9hZF9jb3VudCB2YWwgaXMgJWQsIGNoYW5uZWwgaXMgJWRcbiIsIHZhbCwgY2hhbm5lbCk7CiAKIAkvKgogCSAqIFRoZSBsYXJnZXN0IHBvc3NpYmxlIGluaXRpYWwgY291bnQgaXMgMDsgdGhpcyBpcyBlcXVpdmFsZW50CkBAIC0zOTUsOCArMzk3LDggQEAKIAltdXRleF9sb2NrKCZwaXRfc3RhdGUtPmxvY2spOwogCiAJaWYgKHZhbCAhPSAwKQotCQlwcl9kZWJ1ZygicGl0OiB3cml0ZSBhZGRyIGlzIDB4JXgsIGxlbiBpcyAlZCwgdmFsIGlzIDB4JXhcbiIsCi0JCQkgICh1bnNpZ25lZCBpbnQpYWRkciwgbGVuLCB2YWwpOworCQlwcl9kZWJ1Zygid3JpdGUgYWRkciBpcyAweCV4LCBsZW4gaXMgJWQsIHZhbCBpcyAweCV4XG4iLAorCQkJICh1bnNpZ25lZCBpbnQpYWRkciwgbGVuLCB2YWwpOwogCiAJaWYgKGFkZHIgPT0gMykgewogCQljaGFubmVsID0gdmFsID4+IDY7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggM2RlMGIzNy4uMWQ5YjMzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtMzE2LDcgKzMxNiw3IEBACiBzdGF0aWMgaW50IHN2bV9oYXJkd2FyZV9lbmFibGUodm9pZCAqZ2FyYmFnZSkKIHsKIAotCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkOwogCXVpbnQ2NF90IGVmZXI7CiAJc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgZ2R0X2Rlc2NyOwogCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0OwpAQCAtMzMxLDYzICszMzEsNjEgQEAKIAkJICAgICAgIG1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN2bV9kYXRhID0gcGVyX2NwdShzdm1fZGF0YSwgbWUpOworCXNkID0gcGVyX2NwdShzdm1fZGF0YSwgbWUpOwogCi0JaWYgKCFzdm1fZGF0YSkgeworCWlmICghc2QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzdm1faGFyZHdhcmVfZW5hYmxlOiBzdm1fZGF0YSBpcyBOVUxMIG9uICVkXG4iLAogCQkgICAgICAgbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzdm1fZGF0YS0+YXNpZF9nZW5lcmF0aW9uID0gMTsKLQlzdm1fZGF0YS0+bWF4X2FzaWQgPSBjcHVpZF9lYngoU1ZNX0NQVUlEX0ZVTkMpIC0gMTsKLQlzdm1fZGF0YS0+bmV4dF9hc2lkID0gc3ZtX2RhdGEtPm1heF9hc2lkICsgMTsKKwlzZC0+YXNpZF9nZW5lcmF0aW9uID0gMTsKKwlzZC0+bWF4X2FzaWQgPSBjcHVpZF9lYngoU1ZNX0NQVUlEX0ZVTkMpIC0gMTsKKwlzZC0+bmV4dF9hc2lkID0gc2QtPm1heF9hc2lkICsgMTsKIAogCWt2bV9nZXRfZ2R0KCZnZHRfZGVzY3IpOwogCWdkdCA9IChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilnZHRfZGVzY3IuYmFzZTsKLQlzdm1fZGF0YS0+dHNzX2Rlc2MgPSAoc3RydWN0IGt2bV9sZHR0c3NfZGVzYyAqKShnZHQgKyBHRFRfRU5UUllfVFNTKTsKKwlzZC0+dHNzX2Rlc2MgPSAoc3RydWN0IGt2bV9sZHR0c3NfZGVzYyAqKShnZHQgKyBHRFRfRU5UUllfVFNTKTsKIAogCXdybXNybChNU1JfRUZFUiwgZWZlciB8IEVGRVJfU1ZNRSk7CiAKLQl3cm1zcmwoTVNSX1ZNX0hTQVZFX1BBLAotCSAgICAgICBwYWdlX3RvX3Bmbihzdm1fZGF0YS0+c2F2ZV9hcmVhKSA8PCBQQUdFX1NISUZUKTsKKwl3cm1zcmwoTVNSX1ZNX0hTQVZFX1BBLCBwYWdlX3RvX3BmbihzZC0+c2F2ZV9hcmVhKSA8PCBQQUdFX1NISUZUKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fY3B1X3VuaW5pdChpbnQgY3B1KQogewotCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhCi0JCT0gcGVyX2NwdShzdm1fZGF0YSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1KHN2bV9kYXRhLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCWlmICghc3ZtX2RhdGEpCisJaWYgKCFzZCkKIAkJcmV0dXJuOwogCiAJcGVyX2NwdShzdm1fZGF0YSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgPSBOVUxMOwotCV9fZnJlZV9wYWdlKHN2bV9kYXRhLT5zYXZlX2FyZWEpOwotCWtmcmVlKHN2bV9kYXRhKTsKKwlfX2ZyZWVfcGFnZShzZC0+c2F2ZV9hcmVhKTsKKwlrZnJlZShzZCk7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX2NwdV9pbml0KGludCBjcHUpCiB7Ci0Jc3RydWN0IHN2bV9jcHVfZGF0YSAqc3ZtX2RhdGE7CisJc3RydWN0IHN2bV9jcHVfZGF0YSAqc2Q7CiAJaW50IHI7CiAKLQlzdm1fZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdm1fY3B1X2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN2bV9kYXRhKQorCXNkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN2bV9jcHVfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghc2QpCiAJCXJldHVybiAtRU5PTUVNOwotCXN2bV9kYXRhLT5jcHUgPSBjcHU7Ci0Jc3ZtX2RhdGEtPnNhdmVfYXJlYSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJc2QtPmNwdSA9IGNwdTsKKwlzZC0+c2F2ZV9hcmVhID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAlyID0gLUVOT01FTTsKLQlpZiAoIXN2bV9kYXRhLT5zYXZlX2FyZWEpCisJaWYgKCFzZC0+c2F2ZV9hcmVhKQogCQlnb3RvIGVycl8xOwogCi0JcGVyX2NwdShzdm1fZGF0YSwgY3B1KSA9IHN2bV9kYXRhOworCXBlcl9jcHUoc3ZtX2RhdGEsIGNwdSkgPSBzZDsKIAogCXJldHVybiAwOwogCiBlcnJfMToKLQlrZnJlZShzdm1fZGF0YSk7CisJa2ZyZWUoc2QpOwogCXJldHVybiByOwogCiB9CkBAIC0xMDkyLDE2ICsxMDkwLDE2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgbmV3X2FzaWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhKQorc3RhdGljIHZvaWQgbmV3X2FzaWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkKQogewotCWlmIChzdm1fZGF0YS0+bmV4dF9hc2lkID4gc3ZtX2RhdGEtPm1heF9hc2lkKSB7Ci0JCSsrc3ZtX2RhdGEtPmFzaWRfZ2VuZXJhdGlvbjsKLQkJc3ZtX2RhdGEtPm5leHRfYXNpZCA9IDE7CisJaWYgKHNkLT5uZXh0X2FzaWQgPiBzZC0+bWF4X2FzaWQpIHsKKwkJKytzZC0+YXNpZF9nZW5lcmF0aW9uOworCQlzZC0+bmV4dF9hc2lkID0gMTsKIAkJc3ZtLT52bWNiLT5jb250cm9sLnRsYl9jdGwgPSBUTEJfQ09OVFJPTF9GTFVTSF9BTExfQVNJRDsKIAl9CiAKLQlzdm0tPmFzaWRfZ2VuZXJhdGlvbiA9IHN2bV9kYXRhLT5hc2lkX2dlbmVyYXRpb247Ci0Jc3ZtLT52bWNiLT5jb250cm9sLmFzaWQgPSBzdm1fZGF0YS0+bmV4dF9hc2lkKys7CisJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSBzZC0+YXNpZF9nZW5lcmF0aW9uOworCXN2bS0+dm1jYi0+Y29udHJvbC5hc2lkID0gc2QtPm5leHRfYXNpZCsrOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKQpAQCAtMjQyOSw4ICsyNDI3LDggQEAKIHsKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAotCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhID0gcGVyX2NwdShzdm1fZGF0YSwgY3B1KTsKLQlzdm1fZGF0YS0+dHNzX2Rlc2MtPnR5cGUgPSA5OyAvKiBhdmFpbGFibGUgMzIvNjQtYml0IFRTUyAqLworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkID0gcGVyX2NwdShzdm1fZGF0YSwgY3B1KTsKKwlzZC0+dHNzX2Rlc2MtPnR5cGUgPSA5OyAvKiBhdmFpbGFibGUgMzIvNjQtYml0IFRTUyAqLwogCWxvYWRfVFJfZGVzYygpOwogfQogCkBAIC0yNDM4LDEyICsyNDM2LDEyIEBACiB7CiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YSA9IHBlcl9jcHUoc3ZtX2RhdGEsIGNwdSk7CisJc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1KHN2bV9kYXRhLCBjcHUpOwogCiAJc3ZtLT52bWNiLT5jb250cm9sLnRsYl9jdGwgPSBUTEJfQ09OVFJPTF9ET19OT1RISU5HOwogCS8qIEZJWE1FOiBoYW5kbGUgd3JhcGFyb3VuZCBvZiBhc2lkX2dlbmVyYXRpb24gKi8KLQlpZiAoc3ZtLT5hc2lkX2dlbmVyYXRpb24gIT0gc3ZtX2RhdGEtPmFzaWRfZ2VuZXJhdGlvbikKLQkJbmV3X2FzaWQoc3ZtLCBzdm1fZGF0YSk7CisJaWYgKHN2bS0+YXNpZF9nZW5lcmF0aW9uICE9IHNkLT5hc2lkX2dlbmVyYXRpb24pCisJCW5ld19hc2lkKHN2bSwgc2QpOwogfQogCiBzdGF0aWMgdm9pZCBzdm1faW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKaW5kZXggYTJkNjQ3Mi4uY2ZmZDc1NGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiBpbmF0X3RhYmxlc19zY3JpcHQgPSAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3awogaW5hdF90YWJsZXNfbWFwcyA9ICQoc3JjdHJlZSkvYXJjaC94ODYvbGliL3g4Ni1vcGNvZGUtbWFwLnR4dAogcXVpZXRfY21kX2luYXRfdGFibGVzID0gR0VOICAgICAkQAotICAgICAgY21kX2luYXRfdGFibGVzID0gJChBV0spIC1mICQoaW5hdF90YWJsZXNfc2NyaXB0KSAkKGluYXRfdGFibGVzX21hcHMpID4gJEAKKyAgICAgIGNtZF9pbmF0X3RhYmxlcyA9ICQoQVdLKSAtZiAkKGluYXRfdGFibGVzX3NjcmlwdCkgJChpbmF0X3RhYmxlc19tYXBzKSA+ICRAIHx8IHJtIC1mICRACiAKICQob2JqKS9pbmF0LXRhYmxlcy5jOiAkKGluYXRfdGFibGVzX3NjcmlwdCkgJChpbmF0X3RhYmxlc19tYXBzKQogCSQoY2FsbCBjbWQsaW5hdF90YWJsZXMpCkBAIC0xNCwxNSArMTQsMTUgQEAKIAogY2xlYW4tZmlsZXMgOj0gaW5hdC10YWJsZXMuYwogCi1vYmotJChDT05GSUdfU01QKSA6PSBtc3Iubworb2JqLSQoQ09ORklHX1NNUCkgKz0gbXNyLXNtcC5vCiAKIGxpYi15IDo9IGRlbGF5Lm8KIGxpYi15ICs9IHRodW5rXyQoQklUUykubwogbGliLXkgKz0gdXNlcmNvcHlfJChCSVRTKS5vIGdldHVzZXIubyBwdXR1c2VyLm8KIGxpYi15ICs9IG1lbWNweV8kKEJJVFMpLm8KLWxpYi15ICs9IGluc24ubyBpbmF0Lm8KK2xpYi0kKENPTkZJR19LUFJPQkVTKSArPSBpbnNuLm8gaW5hdC5vCiAKLW9iai15ICs9IG1zci1yZWcubyBtc3ItcmVnLWV4cG9ydC5vCitvYmoteSArPSBtc3IubyBtc3ItcmVnLm8gbXNyLXJlZy1leHBvcnQubwogCiBpZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiAgICAgICAgIG9iai15ICs9IGF0b21pYzY0XzMyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3Itc21wLmMgYi9hcmNoL3g4Ni9saWIvbXNyLXNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjFiODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvbXNyLXNtcC5jCkBAIC0wLDAgKzEsMjA0IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKworc3RhdGljIHZvaWQgX19yZG1zcl9vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKKwlzdHJ1Y3QgbXNyICpyZWc7CisJaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChydi0+bXNycykKKwkJcmVnID0gcGVyX2NwdV9wdHIocnYtPm1zcnMsIHRoaXNfY3B1KTsKKwllbHNlCisJCXJlZyA9ICZydi0+cmVnOworCisJcmRtc3IocnYtPm1zcl9ubywgcmVnLT5sLCByZWctPmgpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX29uX2NwdSh2b2lkICppbmZvKQoreworCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOworCXN0cnVjdCBtc3IgKnJlZzsKKwlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHJ2LT5tc3JzKQorCQlyZWcgPSBwZXJfY3B1X3B0cihydi0+bXNycywgdGhpc19jcHUpOworCWVsc2UKKwkJcmVnID0gJnJ2LT5yZWc7CisKKwl3cm1zcihydi0+bXNyX25vLCByZWctPmwsIHJlZy0+aCk7Cit9CisKK2ludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX2luZm8gcnY7CisKKwltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKKworCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3JkbXNyX29uX2NwdSwgJnJ2LCAxKTsKKwkqbCA9IHJ2LnJlZy5sOworCSpoID0gcnYucmVnLmg7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChyZG1zcl9vbl9jcHUpOworCitpbnQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfaW5mbyBydjsKKworCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOworCisJcnYubXNyX25vID0gbXNyX25vOworCXJ2LnJlZy5sID0gbDsKKwlydi5yZWcuaCA9IGg7CisJZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX193cm1zcl9vbl9jcHUsICZydiwgMSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh3cm1zcl9vbl9jcHUpOworCitzdGF0aWMgdm9pZCBfX3J3bXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUzMiBtc3Jfbm8sCisJCQkgICAgc3RydWN0IG1zciAqbXNycywKKwkJCSAgICB2b2lkICgqbXNyX2Z1bmMpICh2b2lkICppbmZvKSkKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gcnY7CisJaW50IHRoaXNfY3B1OworCisJbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7CisKKwlydi5tc3JzCSAgPSBtc3JzOworCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKKworCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIG1hc2spKQorCQltc3JfZnVuYygmcnYpOworCisJc21wX2NhbGxfZnVuY3Rpb25fbWFueShtYXNrLCBtc3JfZnVuYywgJnJ2LCAxKTsKKwlwdXRfY3B1KCk7Cit9CisKKy8qIHJkbXNyIG9uIGEgYnVuY2ggb2YgQ1BVcworICoKKyAqIEBtYXNrOiAgICAgICB3aGljaCBDUFVzCisgKiBAbXNyX25vOiAgICAgd2hpY2ggTVNSCisgKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcworICoKKyAqLwordm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLCBzdHJ1Y3QgbXNyICptc3JzKQoreworCV9fcndtc3Jfb25fY3B1cyhtYXNrLCBtc3Jfbm8sIG1zcnMsIF9fcmRtc3Jfb25fY3B1KTsKK30KK0VYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1cyk7CisKKy8qCisgKiB3cm1zciBvbiBhIGJ1bmNoIG9mIENQVXMKKyAqCisgKiBAbWFzazogICAgICAgd2hpY2ggQ1BVcworICogQG1zcl9ubzogICAgIHdoaWNoIE1TUgorICogQG1zcnM6ICAgICAgIGFycmF5IG9mIE1TUiB2YWx1ZXMKKyAqCisgKi8KK3ZvaWQgd3Jtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKK3sKKwlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3dybXNyX29uX2NwdSk7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX29uX2NwdXMpOworCisvKiBUaGVzZSAic2FmZSIgdmFyaWFudHMgYXJlIHNsb3dlciBhbmQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGFyZ2V0IE1TUgorICAgbWF5IG5vdCBhY3R1YWxseSBleGlzdC4gKi8KK3N0YXRpYyB2b2lkIF9fcmRtc3Jfc2FmZV9vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSByZG1zcl9zYWZlKHJ2LT5tc3Jfbm8sICZydi0+cmVnLmwsICZydi0+cmVnLmgpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87CisKKwlydi0+ZXJyID0gd3Jtc3Jfc2FmZShydi0+bXNyX25vLCBydi0+cmVnLmwsIHJ2LT5yZWcuaCk7Cit9CisKK2ludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfaW5mbyBydjsKKworCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOworCisJcnYubXNyX25vID0gbXNyX25vOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9vbl9jcHUsICZydiwgMSk7CisJKmwgPSBydi5yZWcubDsKKwkqaCA9IHJ2LnJlZy5oOworCisJcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKK30KK0VYUE9SVF9TWU1CT0wocmRtc3Jfc2FmZV9vbl9jcHUpOworCitpbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKQoreworCWludCBlcnI7CisJc3RydWN0IG1zcl9pbmZvIHJ2OworCisJbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7CisKKwlydi5tc3Jfbm8gPSBtc3Jfbm87CisJcnYucmVnLmwgPSBsOworCXJ2LnJlZy5oID0gaDsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3dybXNyX3NhZmVfb25fY3B1LCAmcnYsIDEpOworCisJcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKK30KK0VYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9vbl9jcHUpOworCisvKgorICogVGhlc2UgdmFyaWFudHMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlcgorICogdGhlIGVudGlyZSAzMi1iaXQgR1BSIHNldC4KKyAqLworc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSByZG1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOworCisJcnYtPmVyciA9IHdybXNyX3NhZmVfcmVncyhydi0+cmVncyk7Cit9CisKK2ludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OworCisJcnYucmVncyAgID0gcmVnczsKKwlydi5lcnIgICAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfcmVnc19vbl9jcHUpOworCitpbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKKworCXJ2LnJlZ3MgPSByZWdzOworCXJ2LmVyciAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfcmVnc19vbl9jcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21zci5jIGIvYXJjaC94ODYvbGliL21zci5jCmluZGV4IDQxNjI4YjEuLjhmOGVlYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tc3IuYworKysgYi9hcmNoL3g4Ni9saWIvbXNyLmMKQEAgLTEsMjE4ICsxLDIzIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAotc3RydWN0IG1zcl9pbmZvIHsKLQl1MzIgbXNyX25vOwotCXN0cnVjdCBtc3IgcmVnOwotCXN0cnVjdCBtc3IgKm1zcnM7Ci0JaW50IG9mZjsKLQlpbnQgZXJyOwotfTsKLQotc3RhdGljIHZvaWQgX19yZG1zcl9vbl9jcHUodm9pZCAqaW5mbykKK3N0cnVjdCBtc3IgKm1zcnNfYWxsb2Modm9pZCkKIHsKLQlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKLQlzdHJ1Y3QgbXNyICpyZWc7Ci0JaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgbXNyICptc3JzID0gTlVMTDsKIAotCWlmIChydi0+bXNycykKLQkJcmVnID0gJnJ2LT5tc3JzW3RoaXNfY3B1IC0gcnYtPm9mZl07Ci0JZWxzZQotCQlyZWcgPSAmcnYtPnJlZzsKKwltc3JzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtc3IpOworCWlmICghbXNycykgeworCQlwcl93YXJuaW5nKCIlczogZXJyb3IgYWxsb2NhdGluZyBtc3JzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KIAotCXJkbXNyKHJ2LT5tc3Jfbm8sIHJlZy0+bCwgcmVnLT5oKTsKKwlyZXR1cm4gbXNyczsKIH0KK0VYUE9SVF9TWU1CT0wobXNyc19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fd3Jtc3Jfb25fY3B1KHZvaWQgKmluZm8pCit2b2lkIG1zcnNfZnJlZShzdHJ1Y3QgbXNyICptc3JzKQogewotCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOwotCXN0cnVjdCBtc3IgKnJlZzsKLQlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKHJ2LT5tc3JzKQotCQlyZWcgPSAmcnYtPm1zcnNbdGhpc19jcHUgLSBydi0+b2ZmXTsKLQllbHNlCi0JCXJlZyA9ICZydi0+cmVnOwotCi0Jd3Jtc3IocnYtPm1zcl9ubywgcmVnLT5sLCByZWctPmgpOworCWZyZWVfcGVyY3B1KG1zcnMpOwogfQotCi1pbnQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQotewotCWludCBlcnI7Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0JZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9vbl9jcHUsICZydiwgMSk7Ci0JKmwgPSBydi5yZWcubDsKLQkqaCA9IHJ2LnJlZy5oOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1KTsKLQotaW50IHdybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXNyX2luZm8gcnY7Ci0KLQltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKLQotCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKLQlydi5yZWcubCA9IGw7Ci0JcnYucmVnLmggPSBoOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfb25fY3B1LCAmcnYsIDEpOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0wod3Jtc3Jfb25fY3B1KTsKLQotc3RhdGljIHZvaWQgX19yd21zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLAotCQkJICAgIHN0cnVjdCBtc3IgKm1zcnMsCi0JCQkgICAgdm9pZCAoKm1zcl9mdW5jKSAodm9pZCAqaW5mbykpCi17Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCWludCB0aGlzX2NwdTsKLQotCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOwotCi0JcnYub2ZmICAgID0gY3B1bWFza19maXJzdChtYXNrKTsKLQlydi5tc3JzCSAgPSBtc3JzOwotCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKLQotCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOwotCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIG1hc2spKQotCQltc3JfZnVuYygmcnYpOwotCi0Jc21wX2NhbGxfZnVuY3Rpb25fbWFueShtYXNrLCBtc3JfZnVuYywgJnJ2LCAxKTsKLQlwdXRfY3B1KCk7Ci19Ci0KLS8qIHJkbXNyIG9uIGEgYnVuY2ggb2YgQ1BVcwotICoKLSAqIEBtYXNrOiAgICAgICB3aGljaCBDUFVzCi0gKiBAbXNyX25vOiAgICAgd2hpY2ggTVNSCi0gKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcwotICoKLSAqLwotdm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLCBzdHJ1Y3QgbXNyICptc3JzKQotewotCV9fcndtc3Jfb25fY3B1cyhtYXNrLCBtc3Jfbm8sIG1zcnMsIF9fcmRtc3Jfb25fY3B1KTsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1cyk7Ci0KLS8qCi0gKiB3cm1zciBvbiBhIGJ1bmNoIG9mIENQVXMKLSAqCi0gKiBAbWFzazogICAgICAgd2hpY2ggQ1BVcwotICogQG1zcl9ubzogICAgIHdoaWNoIE1TUgotICogQG1zcnM6ICAgICAgIGFycmF5IG9mIE1TUiB2YWx1ZXMKLSAqCi0gKi8KLXZvaWQgd3Jtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKLXsKLQlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3dybXNyX29uX2NwdSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHdybXNyX29uX2NwdXMpOwotCi0vKiBUaGVzZSAic2FmZSIgdmFyaWFudHMgYXJlIHNsb3dlciBhbmQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGFyZ2V0IE1TUgotICAgbWF5IG5vdCBhY3R1YWxseSBleGlzdC4gKi8KLXN0YXRpYyB2b2lkIF9fcmRtc3Jfc2FmZV9vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKLQotCXJ2LT5lcnIgPSByZG1zcl9zYWZlKHJ2LT5tc3Jfbm8sICZydi0+cmVnLmwsICZydi0+cmVnLmgpOwotfQotCi1zdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfb25fY3B1KHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87Ci0KLQlydi0+ZXJyID0gd3Jtc3Jfc2FmZShydi0+bXNyX25vLCBydi0+cmVnLmwsIHJ2LT5yZWcuaCk7Ci19Ci0KLWludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBtc3JfaW5mbyBydjsKLQotCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOwotCi0JcnYubXNyX25vID0gbXNyX25vOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9vbl9jcHUsICZydiwgMSk7Ci0JKmwgPSBydi5yZWcubDsKLQkqaCA9IHJ2LnJlZy5oOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfc2FmZV9vbl9jcHUpOwotCi1pbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKQotewotCWludCBlcnI7Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0JcnYucmVnLmwgPSBsOwotCXJ2LnJlZy5oID0gaDsKLQllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3dybXNyX3NhZmVfb25fY3B1LCAmcnYsIDEpOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKLX0KLUVYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9vbl9jcHUpOwotCi0vKgotICogVGhlc2UgdmFyaWFudHMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlcgotICogdGhlIGVudGlyZSAzMi1iaXQgR1BSIHNldC4KLSAqLwotc3RydWN0IG1zcl9yZWdzX2luZm8gewotCXUzMiAqcmVnczsKLQlpbnQgZXJyOwotfTsKLQotc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKLQotCXJ2LT5lcnIgPSByZG1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOwotCi0JcnYtPmVyciA9IHdybXNyX3NhZmVfcmVncyhydi0+cmVncyk7Ci19Ci0KLWludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OwotCi0JcnYucmVncyAgID0gcmVnczsKLQlydi5lcnIgICAgPSAtRUlPOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKLQotCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfcmVnc19vbl9jcHUpOwotCi1pbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKLQotCXJ2LnJlZ3MgPSByZWdzOwotCXJ2LmVyciAgPSAtRUlPOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKLQotCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfcmVnc19vbl9jcHUpOworRVhQT1JUX1NZTUJPTChtc3JzX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21taW8uYyBiL2FyY2gveDg2L21tL2ttbWlvLmMKaW5kZXggMDdiY2MzMC4uYzBmNjE5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21taW8uYworKysgYi9hcmNoL3g4Ni9tbS9rbW1pby5jCkBAIC01LDYgKzUsOCBAQAogICogICAgIDIwMDggUGVra2EgUGFhbGFuZW4gPHBxQGlraS5maT4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0xMzYsNyArMTM4LDcgQEAKIAlwdGVfdCAqcHRlID0gbG9va3VwX2FkZHJlc3MoZi0+cGFnZSwgJmxldmVsKTsKIAogCWlmICghcHRlKSB7Ci0JCXByX2Vycigia21taW86IG5vIHB0ZSBmb3IgcGFnZSAweCUwOGx4XG4iLCBmLT5wYWdlKTsKKwkJcHJfZXJyKCJubyBwdGUgZm9yIHBhZ2UgMHglMDhseFxuIiwgZi0+cGFnZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0OCw3ICsxNTAsNyBAQAogCQljbGVhcl9wdGVfcHJlc2VuY2UocHRlLCBjbGVhciwgJmYtPm9sZF9wcmVzZW5jZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX2Vycigia21taW86IHVuZXhwZWN0ZWQgcGFnZSBsZXZlbCAweCV4LlxuIiwgbGV2ZWwpOworCQlwcl9lcnIoInVuZXhwZWN0ZWQgcGFnZSBsZXZlbCAweCV4LlxuIiwgbGV2ZWwpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNzAsMTMgKzE3MiwxNCBAQAogc3RhdGljIGludCBhcm1fa21taW9fZmF1bHRfcGFnZShzdHJ1Y3Qga21taW9fZmF1bHRfcGFnZSAqZikKIHsKIAlpbnQgcmV0OwotCVdBUk5fT05DRShmLT5hcm1lZCwgS0VSTl9FUlIgImttbWlvIHBhZ2UgYWxyZWFkeSBhcm1lZC5cbiIpOworCVdBUk5fT05DRShmLT5hcm1lZCwgS0VSTl9FUlIgcHJfZm10KCJrbW1pbyBwYWdlIGFscmVhZHkgYXJtZWQuXG4iKSk7CiAJaWYgKGYtPmFybWVkKSB7Ci0JCXByX3dhcm5pbmcoImttbWlvIGRvdWJsZS1hcm06IHBhZ2UgMHglMDhseCwgcmVmICVkLCBvbGQgJWRcbiIsCi0JCQkJCWYtPnBhZ2UsIGYtPmNvdW50LCAhIWYtPm9sZF9wcmVzZW5jZSk7CisJCXByX3dhcm5pbmcoImRvdWJsZS1hcm06IHBhZ2UgMHglMDhseCwgcmVmICVkLCBvbGQgJWRcbiIsCisJCQkgICBmLT5wYWdlLCBmLT5jb3VudCwgISFmLT5vbGRfcHJlc2VuY2UpOwogCX0KIAlyZXQgPSBjbGVhcl9wYWdlX3ByZXNlbmNlKGYsIHRydWUpOwotCVdBUk5fT05DRShyZXQgPCAwLCBLRVJOX0VSUiAia21taW8gYXJtaW5nIDB4JTA4bHggZmFpbGVkLlxuIiwgZi0+cGFnZSk7CisJV0FSTl9PTkNFKHJldCA8IDAsIEtFUk5fRVJSIHByX2ZtdCgiYXJtaW5nIDB4JTA4bHggZmFpbGVkLlxuIiksCisJCSAgZi0+cGFnZSk7CiAJZi0+YXJtZWQgPSB0cnVlOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNDAsMjQgKzI0MywyMSBAQAogCQkJICogY29uZGl0aW9uIG5lZWRzIGhhbmRsaW5nIGJ5IGRvX3BhZ2VfZmF1bHQoKSwgdGhlCiAJCQkgKiBwYWdlIHJlYWxseSBub3QgYmVpbmcgcHJlc2VudCBpcyB0aGUgbW9zdCBjb21tb24uCiAJCQkgKi8KLQkJCXByX2RlYnVnKCJrbW1pbzogc2Vjb25kYXJ5IGhpdCBmb3IgMHglMDhseCBDUFUgJWQuXG4iLAotCQkJCQlhZGRyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJcHJfZGVidWcoInNlY29uZGFyeSBoaXQgZm9yIDB4JTA4bHggQ1BVICVkLlxuIiwKKwkJCQkgYWRkciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCQkJaWYgKCFmYXVsdHBhZ2UtPm9sZF9wcmVzZW5jZSkKLQkJCQlwcl9pbmZvKCJrbW1pbzogdW5leHBlY3RlZCBzZWNvbmRhcnkgaGl0IGZvciAiCi0JCQkJCSJhZGRyZXNzIDB4JTA4bHggb24gQ1BVICVkLlxuIiwgYWRkciwKLQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJCQlwcl9pbmZvKCJ1bmV4cGVjdGVkIHNlY29uZGFyeSBoaXQgZm9yIGFkZHJlc3MgMHglMDhseCBvbiBDUFUgJWQuXG4iLAorCQkJCQlhZGRyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFByZXZlbnQgb3ZlcndyaXRpbmcgYWxyZWFkeSBpbi1mbGlnaHQgY29udGV4dC4KIAkJCSAqIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGhvcGUgZGlzYXJtaW5nIGF0CiAJCQkgKiBsZWFzdCBwcmV2ZW50cyBhIHBhbmljLgogCQkJICovCi0JCQlwcl9lbWVyZygia21taW86IHJlY3Vyc2l2ZSBwcm9iZSBoaXQgb24gQ1BVICVkLCAiCi0JCQkJCSJmb3IgYWRkcmVzcyAweCUwOGx4LiBJZ25vcmluZy5cbiIsCi0JCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgYWRkcik7Ci0JCQlwcl9lbWVyZygia21taW86IHByZXZpb3VzIGhpdCB3YXMgYXQgMHglMDhseC5cbiIsCi0JCQkJCQljdHgtPmFkZHIpOworCQkJcHJfZW1lcmcoInJlY3Vyc2l2ZSBwcm9iZSBoaXQgb24gQ1BVICVkLCBmb3IgYWRkcmVzcyAweCUwOGx4LiBJZ25vcmluZy5cbiIsCisJCQkJIHNtcF9wcm9jZXNzb3JfaWQoKSwgYWRkcik7CisJCQlwcl9lbWVyZygicHJldmlvdXMgaGl0IHdhcyBhdCAweCUwOGx4LlxuIiwgY3R4LT5hZGRyKTsKIAkJCWRpc2FybV9rbW1pb19mYXVsdF9wYWdlKGZhdWx0cGFnZSk7CiAJCX0KIAkJZ290byBub19rbW1pb19jdHg7CkBAIC0zMTYsOCArMzE2LDggQEAKIAkJICogc29tZXRoaW5nIGV4dGVybmFsIGNhdXNpbmcgdGhlbSAoZi5lLiB1c2luZyBhIGRlYnVnZ2VyIHdoaWxlCiAJCSAqIG1taW8gdHJhY2luZyBlbmFibGVkKSwgb3IgZXJyb25lb3VzIGJlaGF2aW91cgogCQkgKi8KLQkJcHJfd2FybmluZygia21taW86IHVuZXhwZWN0ZWQgZGVidWcgdHJhcCBvbiBDUFUgJWQuXG4iLAotCQkJCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCXByX3dhcm5pbmcoInVuZXhwZWN0ZWQgZGVidWcgdHJhcCBvbiBDUFUgJWQuXG4iLAorCQkJICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MjUsNyArNDI1LDcgQEAKIAlsaXN0X2FkZF9yY3UoJnAtPmxpc3QsICZrbW1pb19wcm9iZXMpOwogCXdoaWxlIChzaXplIDwgc2l6ZV9saW0pIHsKIAkJaWYgKGFkZF9rbW1pb19mYXVsdF9wYWdlKHAtPmFkZHIgKyBzaXplKSkKLQkJCXByX2Vycigia21taW86IFVuYWJsZSB0byBzZXQgcGFnZSBmYXVsdC5cbiIpOworCQkJcHJfZXJyKCJVbmFibGUgdG8gc2V0IHBhZ2UgZmF1bHQuXG4iKTsKIAkJc2l6ZSArPSBQQUdFX1NJWkU7CiAJfQogb3V0OgpAQCAtNDkwLDcgKzQ5MCw3IEBACiAgKiAyLiByZW1vdmVfa21taW9fZmF1bHRfcGFnZXMoKQogICogICAgUmVtb3ZlIHRoZSBwYWdlcyBmcm9tIGttbWlvX3BhZ2VfdGFibGUuCiAgKiAzLiByY3VfZnJlZV9rbW1pb19mYXVsdF9wYWdlcygpCi0gKiAgICBBY3RhbGx5IGZyZWUgdGhlIGttbWlvX2ZhdWx0X3BhZ2Ugc3RydWN0cyBhcyB3aXRoIFJDVS4KKyAqICAgIEFjdHVhbGx5IGZyZWUgdGhlIGttbWlvX2ZhdWx0X3BhZ2Ugc3RydWN0cyBhcyB3aXRoIFJDVS4KICAqLwogdm9pZCB1bnJlZ2lzdGVyX2ttbWlvX3Byb2JlKHN0cnVjdCBrbW1pb19wcm9iZSAqcCkKIHsKQEAgLTUxMSw3ICs1MTEsNyBAQAogCiAJZHJlbGVhc2UgPSBrbWFsbG9jKHNpemVvZigqZHJlbGVhc2UpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWRyZWxlYXNlKSB7Ci0JCXByX2NyaXQoImttbWlvOiBsZWFraW5nIGttbWlvX2ZhdWx0X3BhZ2Ugb2JqZWN0cy5cbiIpOworCQlwcl9jcml0KCJsZWFraW5nIGttbWlvX2ZhdWx0X3BhZ2Ugb2JqZWN0cy5cbiIpOwogCQlyZXR1cm47CiAJfQogCWRyZWxlYXNlLT5yZWxlYXNlX2xpc3QgPSByZWxlYXNlX2xpc3Q7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jIGIvYXJjaC94ODYvbW0vbW1pby1tb2QuYwppbmRleCAxMzI3NzJhLi4zNGEzMjkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jCisrKyBiL2FyY2gveDg2L21tL21taW8tbW9kLmMKQEAgLTE5LDYgKzE5LDkgQEAKICAqCiAgKiBEZXJpdmVkIGZyb20gdGhlIHJlYWQtbW9kIGV4YW1wbGUgZnJvbSByZWxheS1leGFtcGxlcyBieSBUb20gWmFudXNzaS4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJtbWlvdHJhY2U6ICIgZm10CisKICNkZWZpbmUgREVCVUcgMQogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zNiw4ICszOSw2IEBACiAKICNpbmNsdWRlICJwZl9pbi5oIgogCi0jZGVmaW5lIE5BTUUgIm1taW90cmFjZTogIgotCiBzdHJ1Y3QgdHJhcF9yZWFzb24gewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBsb25nIGlwOwpAQCAtOTYsMTcgKzk3LDE4IEBACiAJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7CiAKIAlpZiAoIXB0ZSkgewotCQlwcl9lcnIoTkFNRSAiRXJyb3IgaW4gJXM6IG5vIHB0ZSBmb3IgcGFnZSAweCUwOGx4XG4iLAotCQkJCQkJCV9fZnVuY19fLCBhZGRyZXNzKTsKKwkJcHJfZXJyKCJFcnJvciBpbiAlczogbm8gcHRlIGZvciBwYWdlIDB4JTA4bHhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAobGV2ZWwgPT0gUEdfTEVWRUxfMk0pIHsKLQkJcHJfZW1lcmcoTkFNRSAiNE1CIHBhZ2VzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZDogIgotCQkJCQkJCSIweCUwOGx4XG4iLCBhZGRyZXNzKTsKKwkJcHJfZW1lcmcoIjRNQiBwYWdlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQ6IDB4JTA4bHhcbiIsCisJCQkgYWRkcmVzcyk7CiAJCUJVRygpOwogCX0KLQlwcl9pbmZvKE5BTUUgInB0ZSBmb3IgMHglbHg6IDB4JWxseCAweCVsbHhcbiIsIGFkZHJlc3MsCisJcHJfaW5mbygicHRlIGZvciAweCVseDogMHglbGx4IDB4JWxseFxuIiwKKwkJYWRkcmVzcywKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwdGVfdmFsKCpwdGUpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXB0ZV92YWwoKnB0ZSkgJiBfUEFHRV9QUkVTRU5UKTsKIH0KQEAgLTExOCwyMiArMTIwLDIxIEBACiBzdGF0aWMgdm9pZCBkaWVfa21taW9fbmVzdGluZ19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCWNvbnN0IHN0cnVjdCB0cmFwX3JlYXNvbiAqbXlfcmVhc29uID0gJmdldF9jcHVfdmFyKHBmX3JlYXNvbik7Ci0JcHJfZW1lcmcoTkFNRSAidW5leHBlY3RlZCBmYXVsdCBmb3IgYWRkcmVzczogMHglMDhseCwgIgotCQkJCQkibGFzdCBmYXVsdCBmb3IgYWRkcmVzczogMHglMDhseFxuIiwKLQkJCQkJYWRkciwgbXlfcmVhc29uLT5hZGRyKTsKKwlwcl9lbWVyZygidW5leHBlY3RlZCBmYXVsdCBmb3IgYWRkcmVzczogMHglMDhseCwgbGFzdCBmYXVsdCBmb3IgYWRkcmVzczogMHglMDhseFxuIiwKKwkJIGFkZHIsIG15X3JlYXNvbi0+YWRkcik7CiAJcHJpbnRfcHRlKGFkZHIpOwogCXByaW50X3N5bWJvbChLRVJOX0VNRVJHICJmYXVsdGluZyBJUCBpcyBhdCAlc1xuIiwgcmVncy0+aXApOwogCXByaW50X3N5bWJvbChLRVJOX0VNRVJHICJsYXN0IGZhdWx0aW5nIElQIHdhcyBhdCAlc1xuIiwgbXlfcmVhc29uLT5pcCk7CiAjaWZkZWYgX19pMzg2X18KIAlwcl9lbWVyZygiZWF4OiAlMDhseCAgIGVieDogJTA4bHggICBlY3g6ICUwOGx4ICAgZWR4OiAlMDhseFxuIiwKLQkJCXJlZ3MtPmF4LCByZWdzLT5ieCwgcmVncy0+Y3gsIHJlZ3MtPmR4KTsKKwkJIHJlZ3MtPmF4LCByZWdzLT5ieCwgcmVncy0+Y3gsIHJlZ3MtPmR4KTsKIAlwcl9lbWVyZygiZXNpOiAlMDhseCAgIGVkaTogJTA4bHggICBlYnA6ICUwOGx4ICAgZXNwOiAlMDhseFxuIiwKLQkJCXJlZ3MtPnNpLCByZWdzLT5kaSwgcmVncy0+YnAsIHJlZ3MtPnNwKTsKKwkJIHJlZ3MtPnNpLCByZWdzLT5kaSwgcmVncy0+YnAsIHJlZ3MtPnNwKTsKICNlbHNlCiAJcHJfZW1lcmcoInJheDogJTAxNmx4ICAgcmN4OiAlMDE2bHggICByZHg6ICUwMTZseFxuIiwKLQkJCQkJcmVncy0+YXgsIHJlZ3MtPmN4LCByZWdzLT5keCk7CisJCSByZWdzLT5heCwgcmVncy0+Y3gsIHJlZ3MtPmR4KTsKIAlwcl9lbWVyZygicnNpOiAlMDE2bHggICByZGk6ICUwMTZseCAgIHJicDogJTAxNmx4ICAgcnNwOiAlMDE2bHhcbiIsCi0JCQkJcmVncy0+c2ksIHJlZ3MtPmRpLCByZWdzLT5icCwgcmVncy0+c3ApOworCQkgcmVncy0+c2ksIHJlZ3MtPmRpLCByZWdzLT5icCwgcmVncy0+c3ApOwogI2VuZGlmCiAJcHV0X2NwdV92YXIocGZfcmVhc29uKTsKIAlCVUcoKTsKQEAgLTIxMyw3ICsyMTQsNyBAQAogCS8qIHRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIGFjdGl2ZV90cmFjZSBjb3VudCB0byAwICovCiAJbXlfcmVhc29uLT5hY3RpdmVfdHJhY2VzLS07CiAJaWYgKG15X3JlYXNvbi0+YWN0aXZlX3RyYWNlcykgewotCQlwcl9lbWVyZyhOQU1FICJ1bmV4cGVjdGVkIHBvc3QgaGFuZGxlciIpOworCQlwcl9lbWVyZygidW5leHBlY3RlZCBwb3N0IGhhbmRsZXIiKTsKIAkJQlVHKCk7CiAJfQogCkBAIC0yNDQsNyArMjQ1LDcgQEAKIAl9OwogCiAJaWYgKCF0cmFjZSkgewotCQlwcl9lcnIoTkFNRSAia21hbGxvYyBmYWlsZWQgaW4gaW9yZW1hcFxuIik7CisJCXByX2Vycigia21hbGxvYyBmYWlsZWQgaW4gaW9yZW1hcFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI4Miw4ICsyODMsOCBAQAogCWlmICghaXNfZW5hYmxlZCgpKSAvKiByZWNoZWNrIGFuZCBwcm9wZXIgbG9ja2luZyBpbiAqX2NvcmUoKSAqLwogCQlyZXR1cm47CiAKLQlwcl9kZWJ1ZyhOQU1FICJpb3JlbWFwXyooMHglbGx4LCAweCVseCkgPSAlcFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwgc2l6ZSwgYWRkcik7CisJcHJfZGVidWcoImlvcmVtYXBfKigweCVsbHgsIDB4JWx4KSA9ICVwXG4iLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQsIHNpemUsIGFkZHIpOwogCWlmICgoZmlsdGVyX29mZnNldCkgJiYgKG9mZnNldCAhPSBmaWx0ZXJfb2Zmc2V0KSkKIAkJcmV0dXJuOwogCWlvcmVtYXBfdHJhY2VfY29yZShvZmZzZXQsIHNpemUsIGFkZHIpOwpAQCAtMzAxLDcgKzMwMiw3IEBACiAJc3RydWN0IHJlbWFwX3RyYWNlICp0bXA7CiAJc3RydWN0IHJlbWFwX3RyYWNlICpmb3VuZF90cmFjZSA9IE5VTEw7CiAKLQlwcl9kZWJ1ZyhOQU1FICJVbm1hcHBpbmcgJXAuXG4iLCBhZGRyKTsKKwlwcl9kZWJ1ZygiVW5tYXBwaW5nICVwLlxuIiwgYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxKCZ0cmFjZV9sb2NrKTsKIAlpZiAoIWlzX2VuYWJsZWQoKSkKQEAgLTM2Myw5ICszNjQsOCBAQAogCSAqIENhbGxlciBhbHNvIGVuc3VyZXMgaXNfZW5hYmxlZCgpIGNhbm5vdCBjaGFuZ2UuCiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFjZSwgJnRyYWNlX2xpc3QsIGxpc3QpIHsKLQkJcHJfbm90aWNlKE5BTUUgInB1cmdpbmcgbm9uLWlvdW5tYXBwZWQgIgotCQkJCQkidHJhY2UgQDB4JTA4bHgsIHNpemUgMHglbHguXG4iLAotCQkJCQl0cmFjZS0+cHJvYmUuYWRkciwgdHJhY2UtPnByb2JlLmxlbik7CisJCXByX25vdGljZSgicHVyZ2luZyBub24taW91bm1hcHBlZCB0cmFjZSBAMHglMDhseCwgc2l6ZSAweCVseC5cbiIsCisJCQkgIHRyYWNlLT5wcm9iZS5hZGRyLCB0cmFjZS0+cHJvYmUubGVuKTsKIAkJaWYgKCFub21taW90cmFjZSkKIAkJCXVucmVnaXN0ZXJfa21taW9fcHJvYmUoJnRyYWNlLT5wcm9iZSk7CiAJfQpAQCAtMzg3LDcgKzM4Nyw3IEBACiAKIAlpZiAoZG93bmVkX2NwdXMgPT0gTlVMTCAmJgogCSAgICAhYWxsb2NfY3B1bWFza192YXIoJmRvd25lZF9jcHVzLCBHRlBfS0VSTkVMKSkgewotCQlwcl9ub3RpY2UoTkFNRSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1hc2tcbiIpOworCQlwcl9ub3RpY2UoIkZhaWxlZCB0byBhbGxvY2F0ZSBtYXNrXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zOTUsMjAgKzM5NSwxOSBAQAogCWNwdW1hc2tfY29weShkb3duZWRfY3B1cywgY3B1X29ubGluZV9tYXNrKTsKIAljcHVtYXNrX2NsZWFyX2NwdShjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayksIGRvd25lZF9jcHVzKTsKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQotCQlwcl9ub3RpY2UoTkFNRSAiRGlzYWJsaW5nIG5vbi1ib290IENQVXMuLi5cbiIpOworCQlwcl9ub3RpY2UoIkRpc2FibGluZyBub24tYm9vdCBDUFVzLi4uXG4iKTsKIAlwdXRfb25saW5lX2NwdXMoKTsKIAogCWZvcl9lYWNoX2NwdShjcHUsIGRvd25lZF9jcHVzKSB7CiAJCWVyciA9IGNwdV9kb3duKGNwdSk7CiAJCWlmICghZXJyKQotCQkJcHJfaW5mbyhOQU1FICJDUFUlZCBpcyBkb3duLlxuIiwgY3B1KTsKKwkJCXByX2luZm8oIkNQVSVkIGlzIGRvd24uXG4iLCBjcHUpOwogCQllbHNlCi0JCQlwcl9lcnIoTkFNRSAiRXJyb3IgdGFraW5nIENQVSVkIGRvd246ICVkXG4iLCBjcHUsIGVycik7CisJCQlwcl9lcnIoIkVycm9yIHRha2luZyBDUFUlZCBkb3duOiAlZFxuIiwgY3B1LCBlcnIpOwogCX0KIG91dDoKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQotCQlwcl93YXJuaW5nKE5BTUUgIm11bHRpcGxlIENQVXMgc3RpbGwgb25saW5lLCAiCi0JCQkJCQkibWF5IG1pc3MgZXZlbnRzLlxuIik7CisJCXByX3dhcm5pbmcoIm11bHRpcGxlIENQVXMgc3RpbGwgb25saW5lLCBtYXkgbWlzcyBldmVudHMuXG4iKTsKIH0KIAogLyogX19yZWYgYmVjYXVzZSBsZWF2ZV91bmlwcm9jZXNzb3IgY2FsbHMgY3B1X3VwIHdoaWNoIGlzIF9fY3B1aW5pdCwKQEAgLTQyMCwxMyArNDE5LDEzIEBACiAKIAlpZiAoZG93bmVkX2NwdXMgPT0gTlVMTCB8fCBjcHVtYXNrX3dlaWdodChkb3duZWRfY3B1cykgPT0gMCkKIAkJcmV0dXJuOwotCXByX25vdGljZShOQU1FICJSZS1lbmFibGluZyBDUFVzLi4uXG4iKTsKKwlwcl9ub3RpY2UoIlJlLWVuYWJsaW5nIENQVXMuLi5cbiIpOwogCWZvcl9lYWNoX2NwdShjcHUsIGRvd25lZF9jcHVzKSB7CiAJCWVyciA9IGNwdV91cChjcHUpOwogCQlpZiAoIWVycikKLQkJCXByX2luZm8oTkFNRSAiZW5hYmxlZCBDUFUlZC5cbiIsIGNwdSk7CisJCQlwcl9pbmZvKCJlbmFibGVkIENQVSVkLlxuIiwgY3B1KTsKIAkJZWxzZQotCQkJcHJfZXJyKE5BTUUgImNhbm5vdCByZS1lbmFibGUgQ1BVJWQ6ICVkXG4iLCBjcHUsIGVycik7CisJCQlwcl9lcnIoImNhbm5vdCByZS1lbmFibGUgQ1BVJWQ6ICVkXG4iLCBjcHUsIGVycik7CiAJfQogfQogCkBAIC00MzQsOCArNDMzLDggQEAKIHN0YXRpYyB2b2lkIGVudGVyX3VuaXByb2Nlc3Nvcih2b2lkKQogewogCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpCi0JCXByX3dhcm5pbmcoTkFNRSAibXVsdGlwbGUgQ1BVcyBhcmUgb25saW5lLCBtYXkgbWlzcyBldmVudHMuICIKLQkJCSJTdWdnZXN0IGJvb3Rpbmcgd2l0aCBtYXhjcHVzPTEga2VybmVsIGFyZ3VtZW50LlxuIik7CisJCXByX3dhcm5pbmcoIm11bHRpcGxlIENQVXMgYXJlIG9ubGluZSwgbWF5IG1pc3MgZXZlbnRzLiAiCisJCQkgICAiU3VnZ2VzdCBib290aW5nIHdpdGggbWF4Y3B1cz0xIGtlcm5lbCBhcmd1bWVudC5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCBsZWF2ZV91bmlwcm9jZXNzb3Iodm9pZCkKQEAgLTQ1MCwxMyArNDQ5LDEzIEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKG5vbW1pb3RyYWNlKQotCQlwcl9pbmZvKE5BTUUgIk1NSU8gdHJhY2luZyBkaXNhYmxlZC5cbiIpOworCQlwcl9pbmZvKCJNTUlPIHRyYWNpbmcgZGlzYWJsZWQuXG4iKTsKIAlrbW1pb19pbml0KCk7CiAJZW50ZXJfdW5pcHJvY2Vzc29yKCk7CiAJc3Bpbl9sb2NrX2lycSgmdHJhY2VfbG9jayk7CiAJYXRvbWljX2luYygmbW1pb3RyYWNlX2VuYWJsZWQpOwogCXNwaW5fdW5sb2NrX2lycSgmdHJhY2VfbG9jayk7Ci0JcHJfaW5mbyhOQU1FICJlbmFibGVkLlxuIik7CisJcHJfaW5mbygiZW5hYmxlZC5cbiIpOwogb3V0OgogCW11dGV4X3VubG9jaygmbW1pb3RyYWNlX211dGV4KTsKIH0KQEAgLTQ3NSw3ICs0NzQsNyBAQAogCWNsZWFyX3RyYWNlX2xpc3QoKTsgLyogZ3VhcmFudGVlczogbm8gbW9yZSBrbW1pbyBjYWxsYmFja3MgKi8KIAlsZWF2ZV91bmlwcm9jZXNzb3IoKTsKIAlrbW1pb19jbGVhbnVwKCk7Ci0JcHJfaW5mbyhOQU1FICJkaXNhYmxlZC5cbiIpOworCXByX2luZm8oImRpc2FibGVkLlxuIik7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZtbWlvdHJhY2VfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCmluZGV4IDZmOGFhMzMuLjkzMjRmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKQEAgLTI2Nyw2ICsyNjcsOCBAQAogCQllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKGNodW5rLT5uaWQsIGNodW5rLT5zdGFydF9wZm4sCiAJCQkJCSAgICAgbWluKGNodW5rLT5lbmRfcGZuLCBtYXhfcGZuKSk7CiAJfQorCS8qIGZvciBvdXQgb2Ygb3JkZXIgZW50cmllcyBpbiBTUkFUICovCisJc29ydF9ub2RlX21hcCgpOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBub2RlX3N0YXJ0X3BmbltuaWRdOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF82NC5jIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCmluZGV4IGQ4OTA3NTQuLmEyNzEyNDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCQl1bnNpZ25lZCBsb25nIHMgPSBub2Rlc1tpXS5zdGFydCA+PiBQQUdFX1NISUZUOwogCQl1bnNpZ25lZCBsb25nIGUgPSBub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVDsKIAkJcHhtcmFtICs9IGUgLSBzOwotCQlweG1yYW0gLT0gYWJzZW50X3BhZ2VzX2luX3JhbmdlKHMsIGUpOworCQlweG1yYW0gLT0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoaSwgcywgZSk7CiAJCWlmICgobG9uZylweG1yYW0gPCAwKQogCQkJcHhtcmFtID0gMDsKIAl9CkBAIC0zNzMsNiArMzczLDggQEAKIAlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKQogCQllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKGksIG5vZGVzW2ldLnN0YXJ0ID4+IFBBR0VfU0hJRlQsCiAJCQkJCQlub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCk7CisJLyogZm9yIG91dCBvZiBvcmRlciBlbnRyaWVzIGluIFNSQVQgKi8KKwlzb3J0X25vZGVfbWFwKCk7CiAJaWYgKCFub2Rlc19jb3Zlcl9tZW1vcnkobm9kZXMpKSB7CiAJCWJhZF9zcmF0KCk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMKaW5kZXggMDQ0ODk3Yi4uMzg1NTA5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMKQEAgLTQxLDEwICs0MSwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIGJhY2t0cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcgPSBiYWNrdHJhY2Vfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wgPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrID0gYmFja3RyYWNlX3N0YWNrLAotCS5hZGRyZXNzID0gYmFja3RyYWNlX2FkZHJlc3MsCisJLndhcm5pbmcJPSBiYWNrdHJhY2Vfd2FybmluZywKKwkud2FybmluZ19zeW1ib2wJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCisJLnN0YWNrCQk9IGJhY2t0cmFjZV9zdGFjaywKKwkuYWRkcmVzcwk9IGJhY2t0cmFjZV9hZGRyZXNzLAorCS53YWxrX3N0YWNrCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIHN0cnVjdCBmcmFtZV9oZWFkIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL2Noa29iamR1bXAuYXdrIGIvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sKaW5kZXggMGQxM2NkOS4uNWJiYjVhMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sKKysrIGIvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sKQEAgLTksNyArOSw3IEBACiB9CiAKIC9eR05VLyB7Ci0Jc3BsaXQoJDQsIHZlciwgIi4iKTsKKwlzcGxpdCgkMywgdmVyLCAiLiIpOwogCWlmICh2ZXJbMV0gPiBvZF92ZXIgfHwKIAkgICAgKHZlclsxXSA9PSBvZF92ZXIgJiYgdmVyWzJdID49IG9kX3N2ZXIpKSB7CiAJCWV4aXQgMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3ayBiL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3awppbmRleCBlMzRlOTJhLi5lYWYxMWY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy9nZW4taW5zbi1hdHRyLXg4Ni5hd2sKKysrIGIvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrCkBAIC02LDggKzYsNiBAQAogCiAjIEF3ayBpbXBsZW1lbnRhdGlvbiBzYW5pdHkgY2hlY2sKIGZ1bmN0aW9uIGNoZWNrX2F3a19pbXBsZW1lbnQoKSB7Ci0JaWYgKCFtYXRjaCgiYWJjIiwgIltbOmxvd2VyOl1dKyIpKQotCQlyZXR1cm4gIllvdXIgYXdrIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0b3ItY2xhc3MuIgogCWlmIChzcHJpbnRmKCIleCIsIDApICE9ICIwIikKIAkJcmV0dXJuICJZb3VyIGF3ayBoYXMgYSBwcmludGYtZm9ybWF0IHByb2JsZW0uIgogCXJldHVybiAiIgpAQCAtNDQsMTIgKzQyLDEyIEBACiAJZGVsZXRlIGd0YWJsZQogCWRlbGV0ZSBhdGFibGUKIAotCW9wbmRfZXhwciA9ICJeW1s6YWxwaGE6XS9dIgorCW9wbmRfZXhwciA9ICJeW0EtWmEtei9dIgogCWV4dF9leHByID0gIl5cXCgiCiAJc2VwX2V4cHIgPSAiXlxcfCQiCi0JZ3JvdXBfZXhwciA9ICJeR3JwW1s6YWxudW06XV0rIgorCWdyb3VwX2V4cHIgPSAiXkdycFswLTlBLVphLXpdKyIKIAotCWltbV9leHByID0gIl5bSUpBT11bWzpsb3dlcjpdXSIKKwlpbW1fZXhwciA9ICJeW0lKQU9dW2Etel0iCiAJaW1tX2ZsYWdbIkliIl0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9CWVRFKSIKIAlpbW1fZmxhZ1siSmIiXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX0JZVEUpIgogCWltbV9mbGFnWyJJdyJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fV09SRCkiCkBAIC02Miw3ICs2MCw3IEBACiAJaW1tX2ZsYWdbIk9iIl0gPSAiSU5BVF9NT0ZGU0VUIgogCWltbV9mbGFnWyJPdiJdID0gIklOQVRfTU9GRlNFVCIKIAotCW1vZHJtX2V4cHIgPSAiXihbQ0RFR01OUFFSU1VWVy9dW1s6bG93ZXI6XV0rfE5UQXxUWzAxMl0pIgorCW1vZHJtX2V4cHIgPSAiXihbQ0RFR01OUFFSU1VWVy9dW2Etel0rfE5UQXxUWzAxMl0pIgogCWZvcmNlNjRfZXhwciA9ICJcXChbZGZdNjRcXCkiCiAJcmV4X2V4cHIgPSAiXlJFWChcXC5bWFJXQl0rKSoiCiAJZnB1X2V4cHIgPSAiXkVTQyIgIyBUT0RPCkBAIC0yMjYsMTIgKzIyNCwxMiBAQAogfQogCiAjIGNvbnZlcnQgb3BlcmFuZHMgdG8gZmxhZ3MuCi1mdW5jdGlvbiBjb252ZXJ0X29wZXJhbmRzKG9wbmQsICAgICAgIGksaW1tLG1vZCkKK2Z1bmN0aW9uIGNvbnZlcnRfb3BlcmFuZHMoY291bnQsb3BuZCwgICAgICAgaSxqLGltbSxtb2QpCiB7CiAJaW1tID0gbnVsbAogCW1vZCA9IG51bGwKLQlmb3IgKGkgaW4gb3BuZCkgewotCQlpICA9IG9wbmRbaV0KKwlmb3IgKGogPSAxOyBqIDw9IGNvdW50OyBqKyspIHsKKwkJaSA9IG9wbmRbal0KIAkJaWYgKG1hdGNoKGksIGltbV9leHByKSA9PSAxKSB7CiAJCQlpZiAoIWltbV9mbGFnW2ldKQogCQkJCXNlbWFudGljX2Vycm9yKCJVbmtub3duIGltbSBvcG5kOiAiIGkpCkBAIC0yODIsOCArMjgwLDggQEAKIAkJIyBwYXJzZSBvbmUgb3Bjb2RlCiAJCWlmIChtYXRjaCgkaSwgb3BuZF9leHByKSkgewogCQkJb3BuZCA9ICRpCi0JCQlzcGxpdCgkKGkrKyksIG9wbmRzLCAiLCIpCi0JCQlmbGFncyA9IGNvbnZlcnRfb3BlcmFuZHMob3BuZHMpCisJCQljb3VudCA9IHNwbGl0KCQoaSsrKSwgb3BuZHMsICIsIikKKwkJCWZsYWdzID0gY29udmVydF9vcGVyYW5kcyhjb3VudCwgb3BuZHMpCiAJCX0KIAkJaWYgKG1hdGNoKCRpLCBleHRfZXhwcikpCiAJCQlleHQgPSAkKGkrKykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKaW5kZXggZDgyMTRkYy4uYmVlOGQ2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKKysrIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCWNoYXIgbGluZVtCVUZTSVpFXSwgc3ltW0JVRlNJWkVdID0gIjx1bmtub3duPiI7CiAJdW5zaWduZWQgY2hhciBpbnNuX2J1ZlsxNl07CiAJc3RydWN0IGluc24gaW5zbjsKLQlpbnQgaW5zbnMgPSAwLCBjOworCWludCBpbnNucyA9IDA7CiAJaW50IHdhcm5pbmdzID0gMDsKIAogCXBhcnNlX2FyZ3MoYXJnYywgYXJndik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc21wLmMgYi9hcmNoL3g4Ni94ZW4vc21wLmMKaW5kZXggNjQ3NTdjMC4uNTYzZDIwNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NtcC5jCisrKyBiL2FyY2gveDg2L3hlbi9zbXAuYwpAQCAtMzUsMTAgKzM1LDEwIEBACiAKIGNwdW1hc2tfdmFyX3QgeGVuX2NwdV9pbml0aWFsaXplZF9tYXA7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHJlc2NoZWRfaXJxKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGNhbGxmdW5jX2lycSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjYWxsZnVuY3NpbmdsZV9pcnEpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgZGVidWdfaXJxKSA9IC0xOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgeGVuX3Jlc2NoZWRfaXJxKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHhlbl9jYWxsZnVuY19pcnEpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgeGVuX2NhbGxmdW5jc2luZ2xlX2lycSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCB4ZW5fZGVidWdfaXJxKSA9IC0xOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGVuX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgeGVuX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCQkJICAgIE5VTEwpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKLQlwZXJfY3B1KHJlc2NoZWRfaXJxLCBjcHUpID0gcmM7CisJcGVyX2NwdSh4ZW5fcmVzY2hlZF9pcnEsIGNwdSkgPSByYzsKIAogCWNhbGxmdW5jX25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImNhbGxmdW5jJWQiLCBjcHUpOwogCXJjID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fQ0FMTF9GVU5DVElPTl9WRUNUT1IsCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJCQkgICAgTlVMTCk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwotCXBlcl9jcHUoY2FsbGZ1bmNfaXJxLCBjcHUpID0gcmM7CisJcGVyX2NwdSh4ZW5fY2FsbGZ1bmNfaXJxLCBjcHUpID0gcmM7CiAKIAlkZWJ1Z19uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJkZWJ1ZyVkIiwgY3B1KTsKIAlyYyA9IGJpbmRfdmlycV90b19pcnFoYW5kbGVyKFZJUlFfREVCVUcsIGNwdSwgeGVuX2RlYnVnX2ludGVycnVwdCwKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkJCSAgICAgZGVidWdfbmFtZSwgTlVMTCk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwotCXBlcl9jcHUoZGVidWdfaXJxLCBjcHUpID0gcmM7CisJcGVyX2NwdSh4ZW5fZGVidWdfaXJxLCBjcHUpID0gcmM7CiAKIAljYWxsZnVuY19uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJjYWxsZnVuY3NpbmdsZSVkIiwgY3B1KTsKIAlyYyA9IGJpbmRfaXBpX3RvX2lycWhhbmRsZXIoWEVOX0NBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUiwKQEAgLTEzMywxOSArMTMzLDIwIEBACiAJCQkJICAgIE5VTEwpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKLQlwZXJfY3B1KGNhbGxmdW5jc2luZ2xlX2lycSwgY3B1KSA9IHJjOworCXBlcl9jcHUoeGVuX2NhbGxmdW5jc2luZ2xlX2lycSwgY3B1KSA9IHJjOwogCiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWlmIChwZXJfY3B1KHJlc2NoZWRfaXJxLCBjcHUpID49IDApCi0JCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShyZXNjaGVkX2lycSwgY3B1KSwgTlVMTCk7Ci0JaWYgKHBlcl9jcHUoY2FsbGZ1bmNfaXJxLCBjcHUpID49IDApCi0JCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShjYWxsZnVuY19pcnEsIGNwdSksIE5VTEwpOwotCWlmIChwZXJfY3B1KGRlYnVnX2lycSwgY3B1KSA+PSAwKQotCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoZGVidWdfaXJxLCBjcHUpLCBOVUxMKTsKLQlpZiAocGVyX2NwdShjYWxsZnVuY3NpbmdsZV9pcnEsIGNwdSkgPj0gMCkKLQkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KGNhbGxmdW5jc2luZ2xlX2lycSwgY3B1KSwgTlVMTCk7CisJaWYgKHBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpID49IDApCisJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdSh4ZW5fcmVzY2hlZF9pcnEsIGNwdSksIE5VTEwpOworCWlmIChwZXJfY3B1KHhlbl9jYWxsZnVuY19pcnEsIGNwdSkgPj0gMCkKKwkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9jYWxsZnVuY19pcnEsIGNwdSksIE5VTEwpOworCWlmIChwZXJfY3B1KHhlbl9kZWJ1Z19pcnEsIGNwdSkgPj0gMCkKKwkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9kZWJ1Z19pcnEsIGNwdSksIE5VTEwpOworCWlmIChwZXJfY3B1KHhlbl9jYWxsZnVuY3NpbmdsZV9pcnEsIGNwdSkgPj0gMCkKKwkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9jYWxsZnVuY3NpbmdsZV9pcnEsIGNwdSksCisJCQkJICAgICAgIE5VTEwpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzQ5LDEwICszNTAsMTAgQEAKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKIAkJc2NoZWR1bGVfdGltZW91dChIWi8xMCk7CiAJfQotCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdShyZXNjaGVkX2lycSwgY3B1KSwgTlVMTCk7Ci0JdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KGNhbGxmdW5jX2lycSwgY3B1KSwgTlVMTCk7Ci0JdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KGRlYnVnX2lycSwgY3B1KSwgTlVMTCk7Ci0JdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KGNhbGxmdW5jc2luZ2xlX2lycSwgY3B1KSwgTlVMTCk7CisJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9yZXNjaGVkX2lycSwgY3B1KSwgTlVMTCk7CisJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1KHhlbl9jYWxsZnVuY19pcnEsIGNwdSksIE5VTEwpOworCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdSh4ZW5fZGVidWdfaXJxLCBjcHUpLCBOVUxMKTsKKwl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoeGVuX2NhbGxmdW5jc2luZ2xlX2lycSwgY3B1KSwgTlVMTCk7CiAJeGVuX3VuaW5pdF9sb2NrX2NwdShjcHUpOwogCXhlbl90ZWFyZG93bl90aW1lcihjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYyBiL2FyY2gveDg2L3hlbi9zcGlubG9jay5jCmluZGV4IDM2YTUxNDEuLjI0ZGVkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zcGlubG9jay5jCisrKyBiL2FyY2gveDg2L3hlbi9zcGlubG9jay5jCkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogCXVuc2lnbmVkIHNob3J0IHNwaW5uZXJzOwkvKiBjb3VudCBvZiB3YWl0aW5nIGNwdXMgKi8KIH07CiAKLXN0YXRpYyBpbnQgeGVuX3NwaW5faXNfbG9ja2VkKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCitzdGF0aWMgaW50IHhlbl9zcGluX2lzX2xvY2tlZChzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jaykKIHsKIAlzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCA9IChzdHJ1Y3QgeGVuX3NwaW5sb2NrICopbG9jazsKIAogCXJldHVybiB4bC0+bG9jayAhPSAwOwogfQogCi1zdGF0aWMgaW50IHhlbl9zcGluX2lzX2NvbnRlbmRlZChzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQorc3RhdGljIGludCB4ZW5fc3Bpbl9pc19jb250ZW5kZWQoc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2spCiB7CiAJc3RydWN0IHhlbl9zcGlubG9jayAqeGwgPSAoc3RydWN0IHhlbl9zcGlubG9jayAqKWxvY2s7CiAKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXJldHVybiB4bC0+c3Bpbm5lcnMgIT0gMDsKIH0KIAotc3RhdGljIGludCB4ZW5fc3Bpbl90cnlsb2NrKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCitzdGF0aWMgaW50IHhlbl9zcGluX3RyeWxvY2soc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2spCiB7CiAJc3RydWN0IHhlbl9zcGlubG9jayAqeGwgPSAoc3RydWN0IHhlbl9zcGlubG9jayAqKWxvY2s7CiAJdTggb2xkID0gMTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCV9fZ2V0X2NwdV92YXIobG9ja19zcGlubmVycykgPSBwcmV2OwogfQogCi1zdGF0aWMgbm9pbmxpbmUgaW50IHhlbl9zcGluX2xvY2tfc2xvdyhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLCBib29sIGlycV9lbmFibGUpCitzdGF0aWMgbm9pbmxpbmUgaW50IHhlbl9zcGluX2xvY2tfc2xvdyhzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jaywgYm9vbCBpcnFfZW5hYmxlKQogewogCXN0cnVjdCB4ZW5fc3BpbmxvY2sgKnhsID0gKHN0cnVjdCB4ZW5fc3BpbmxvY2sgKilsb2NrOwogCXN0cnVjdCB4ZW5fc3BpbmxvY2sgKnByZXY7CkBAIC0yNTQsNyArMjU0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX194ZW5fc3Bpbl9sb2NrKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2ssIGJvb2wgaXJxX2VuYWJsZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3hlbl9zcGluX2xvY2soc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2ssIGJvb2wgaXJxX2VuYWJsZSkKIHsKIAlzdHJ1Y3QgeGVuX3NwaW5sb2NrICp4bCA9IChzdHJ1Y3QgeGVuX3NwaW5sb2NrICopbG9jazsKIAl1bnNpZ25lZCB0aW1lb3V0OwpAQCAtMjkxLDEyICsyOTEsMTIgQEAKIAlzcGluX3RpbWVfYWNjdW1fdG90YWwoc3RhcnRfc3Bpbik7CiB9CiAKLXN0YXRpYyB2b2lkIHhlbl9zcGluX2xvY2soc3RydWN0IHJhd19zcGlubG9jayAqbG9jaykKK3N0YXRpYyB2b2lkIHhlbl9zcGluX2xvY2soc3RydWN0IGFyY2hfc3BpbmxvY2sgKmxvY2spCiB7CiAJX194ZW5fc3Bpbl9sb2NrKGxvY2ssIGZhbHNlKTsKIH0KIAotc3RhdGljIHZvaWQgeGVuX3NwaW5fbG9ja19mbGFncyhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIHZvaWQgeGVuX3NwaW5fbG9ja19mbGFncyhzdHJ1Y3QgYXJjaF9zcGlubG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlfX3hlbl9zcGluX2xvY2sobG9jaywgIXJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSk7CiB9CkBAIC0zMTcsNyArMzE3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHhlbl9zcGluX3VubG9jayhzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQorc3RhdGljIHZvaWQgeGVuX3NwaW5fdW5sb2NrKHN0cnVjdCBhcmNoX3NwaW5sb2NrICpsb2NrKQogewogCXN0cnVjdCB4ZW5fc3BpbmxvY2sgKnhsID0gKHN0cnVjdCB4ZW5fc3BpbmxvY2sgKilsb2NrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vdGltZS5jIGIvYXJjaC94ODYveGVuL3RpbWUuYwppbmRleCA5ZDFmODUzLi4wZDNmMDdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vdGltZS5jCisrKyBiL2FyY2gveDg2L3hlbi90aW1lLmMKQEAgLTMxLDE0ICszMSwxNCBAQAogI2RlZmluZSBOU19QRVJfVElDSwkoMTAwMDAwMDAwMExMIC8gSFopCiAKIC8qIHJ1bnN0YXRlIGluZm8gdXBkYXRlZCBieSBYZW4gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCBydW5zdGF0ZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywgeGVuX3J1bnN0YXRlKTsKIAogLyogc25hcHNob3RzIG9mIHJ1bnN0YXRlIGluZm8gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCBydW5zdGF0ZV9zbmFwc2hvdCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywgeGVuX3J1bnN0YXRlX3NuYXBzaG90KTsKIAogLyogdW51c2VkIG5zIG9mIHN0b2xlbiBhbmQgYmxvY2tlZCB0aW1lICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCByZXNpZHVhbF9zdG9sZW4pOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCwgcmVzaWR1YWxfYmxvY2tlZCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCB4ZW5fcmVzaWR1YWxfc3RvbGVuKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQsIHhlbl9yZXNpZHVhbF9ibG9ja2VkKTsKIAogLyogcmV0dXJuIGFuIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgNjQtYml0IHRpbWUvY291bnRlciB2YWx1ZSAqLwogc3RhdGljIHU2NCBnZXQ2NChjb25zdCB1NjQgKnApCkBAIC03OSw3ICs3OSw3IEBACiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7CiAKLQlzdGF0ZSA9ICZfX2dldF9jcHVfdmFyKHJ1bnN0YXRlKTsKKwlzdGF0ZSA9ICZfX2dldF9jcHVfdmFyKHhlbl9ydW5zdGF0ZSk7CiAKIAkvKgogCSAqIFRoZSBydW5zdGF0ZSBpbmZvIGlzIGFsd2F5cyB1cGRhdGVkIGJ5IHRoZSBoeXBlcnZpc29yIG9uCkBAIC05NywxNCArOTcsMTQgQEAKIC8qIHJldHVybiB0cnVlIHdoZW4gYSB2Y3B1IGNvdWxkIHJ1biBidXQgaGFzIG5vIHJlYWwgY3B1IHRvIHJ1biBvbiAqLwogYm9vbCB4ZW5fdmNwdV9zdG9sZW4oaW50IHZjcHUpCiB7Ci0JcmV0dXJuIHBlcl9jcHUocnVuc3RhdGUsIHZjcHUpLnN0YXRlID09IFJVTlNUQVRFX3J1bm5hYmxlOworCXJldHVybiBwZXJfY3B1KHhlbl9ydW5zdGF0ZSwgdmNwdSkuc3RhdGUgPT0gUlVOU1RBVEVfcnVubmFibGU7CiB9CiAKIHZvaWQgeGVuX3NldHVwX3J1bnN0YXRlX2luZm8oaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9yZWdpc3Rlcl9ydW5zdGF0ZV9tZW1vcnlfYXJlYSBhcmVhOwogCi0JYXJlYS5hZGRyLnYgPSAmcGVyX2NwdShydW5zdGF0ZSwgY3B1KTsKKwlhcmVhLmFkZHIudiA9ICZwZXJfY3B1KHhlbl9ydW5zdGF0ZSwgY3B1KTsKIAogCWlmIChIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX3JlZ2lzdGVyX3J1bnN0YXRlX21lbW9yeV9hcmVhLAogCQkJICAgICAgIGNwdSwgJmFyZWEpKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAlXQVJOX09OKHN0YXRlLnN0YXRlICE9IFJVTlNUQVRFX3J1bm5pbmcpOwogCi0Jc25hcCA9ICZfX2dldF9jcHVfdmFyKHJ1bnN0YXRlX3NuYXBzaG90KTsKKwlzbmFwID0gJl9fZ2V0X2NwdV92YXIoeGVuX3J1bnN0YXRlX3NuYXBzaG90KTsKIAogCS8qIHdvcmsgb3V0IGhvdyBtdWNoIHRpbWUgdGhlIFZDUFUgaGFzIG5vdCBiZWVuIHJ1bm4qaW5nKiAgKi8KIAlibG9ja2VkID0gc3RhdGUudGltZVtSVU5TVEFURV9ibG9ja2VkXSAtIHNuYXAtPnRpbWVbUlVOU1RBVEVfYmxvY2tlZF07CkBAIC0xMzMsMjQgKzEzMywyNCBAQAogCiAJLyogQWRkIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgdGlja3Mgb2Ygc3RvbGVuIHRpbWUsCiAJICAgaW5jbHVkaW5nIGFueSBsZWZ0LW92ZXJzIGZyb20gbGFzdCB0aW1lLiAqLwotCXN0b2xlbiA9IHJ1bm5hYmxlICsgb2ZmbGluZSArIF9fZ2V0X2NwdV92YXIocmVzaWR1YWxfc3RvbGVuKTsKKwlzdG9sZW4gPSBydW5uYWJsZSArIG9mZmxpbmUgKyBfX2dldF9jcHVfdmFyKHhlbl9yZXNpZHVhbF9zdG9sZW4pOwogCiAJaWYgKHN0b2xlbiA8IDApCiAJCXN0b2xlbiA9IDA7CiAKIAl0aWNrcyA9IGl0ZXJfZGl2X3U2NF9yZW0oc3RvbGVuLCBOU19QRVJfVElDSywgJnN0b2xlbik7Ci0JX19nZXRfY3B1X3ZhcihyZXNpZHVhbF9zdG9sZW4pID0gc3RvbGVuOworCV9fZ2V0X2NwdV92YXIoeGVuX3Jlc2lkdWFsX3N0b2xlbikgPSBzdG9sZW47CiAJYWNjb3VudF9zdGVhbF90aWNrcyh0aWNrcyk7CiAKIAkvKiBBZGQgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiB0aWNrcyBvZiBibG9ja2VkIHRpbWUsCiAJICAgaW5jbHVkaW5nIGFueSBsZWZ0LW92ZXJzIGZyb20gbGFzdCB0aW1lLiAqLwotCWJsb2NrZWQgKz0gX19nZXRfY3B1X3ZhcihyZXNpZHVhbF9ibG9ja2VkKTsKKwlibG9ja2VkICs9IF9fZ2V0X2NwdV92YXIoeGVuX3Jlc2lkdWFsX2Jsb2NrZWQpOwogCiAJaWYgKGJsb2NrZWQgPCAwKQogCQlibG9ja2VkID0gMDsKIAogCXRpY2tzID0gaXRlcl9kaXZfdTY0X3JlbShibG9ja2VkLCBOU19QRVJfVElDSywgJmJsb2NrZWQpOwotCV9fZ2V0X2NwdV92YXIocmVzaWR1YWxfYmxvY2tlZCkgPSBibG9ja2VkOworCV9fZ2V0X2NwdV92YXIoeGVuX3Jlc2lkdWFsX2Jsb2NrZWQpID0gYmxvY2tlZDsKIAlhY2NvdW50X2lkbGVfdGlja3ModGlja3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcwZWUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGMzZjUzZTcuLjVlYjZkNjkgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMjMsNyArMTIzLDYgQEAKICNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKICNkZWZpbmUgRUxGX0FSQ0gJRU1fWFRFTlNBCiAKLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJUEFHRV9TSVpFCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggNDM1MmRiZS4uZWZjZjMzYiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMTIsNyArMTIsNiBAQAogc3RydWN0IHNpZ2FjdGlvbjsKIGFzbWxpbmthZ2UgbG9uZyB4dGVuc2FfZXhlY3ZlKGNoYXIqLCBjaGFyKiosIGNoYXIqKiwgc3RydWN0IHB0X3JlZ3MqKTsKIGFzbWxpbmthZ2UgbG9uZyB4dGVuc2FfY2xvbmUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHB0X3JlZ3MqKTsKLWFzbWxpbmthZ2UgbG9uZyB4dGVuc2FfcGlwZShpbnQgX191c2VyICopOwogYXNtbGlua2FnZSBsb25nIHh0ZW5zYV9wdHJhY2UobG9uZywgbG9uZywgbG9uZywgbG9uZyk7CiBhc21saW5rYWdlIGxvbmcgeHRlbnNhX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyopOwogYXNtbGlua2FnZSBsb25nIHh0ZW5zYV9ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MqKTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggZmJmMzE4Yi4uNTI4MDQyYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTk0LDcgKzk0LDcgQEAKICNkZWZpbmUgX19OUl9ta25vZCAJCQkJIDM2CiBfX1NZU0NBTEwoIDM2LCBzeXNfbWtub2QsIDMpCiAjZGVmaW5lIF9fTlJfcGlwZSAJCQkJIDM3Ci1fX1NZU0NBTEwoIDM3LCB4dGVuc2FfcGlwZSwgMSkKK19fU1lTQ0FMTCggMzcsIHN5c19waXBlLCAxKQogI2RlZmluZSBfX05SX3VubGluayAJCQkJIDM4CiBfX1NZU0NBTEwoIDM4LCBzeXNfdW5saW5rLCAxKQogI2RlZmluZSBfX05SX3JtZGlyIAkJCQkgMzkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwppbmRleCBhMWJhZGIzLi44Y2QzODQ4IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCkBAIC05MCw3ICs5MCw3IEBACiAJfQogCiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CiAJCWlmICghYWN0aW9uKQogCQkJZ290byBza2lwOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiBza2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKIAkJc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGwuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMWU2N2JhYi4uODE2ZTZkMCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbC5jCkBAIC0zOSwyNCArMzksNiBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIH07CiAKLS8qCi0gKiB4dGVuc2FfcGlwZSgpIGlzIHRoZSBub3JtYWwgQyBjYWxsaW5nIHN0YW5kYXJkIGZvciBjcmVhdGluZyBhIHBpcGUuIEl0J3Mgbm90Ci0gKiB0aGUgd2F5IHVuaXggdHJhZGl0aW9uYWwgZG9lcyB0aGlzLCB0aG91Z2guCi0gKi8KLQotYXNtbGlua2FnZSBsb25nIHh0ZW5zYV9waXBlKGludCBfX3VzZXIgKnVzZXJmZHMpCi17Ci0JaW50IGZkWzJdOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZG9fcGlwZV9mbGFncyhmZCwgMCk7Ci0JaWYgKCFlcnJvcikgewotCQlpZiAoY29weV90b191c2VyKHVzZXJmZHMsIGZkLCAyICogc2l6ZW9mKGludCkpKQotCQkJZXJyb3IgPSAtRUZBVUxUOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyB4dGVuc2Ffc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZykKIHsKIAl1bnNpZ25lZCBsb25nIHJldDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggZGQxZjFlMC4uNmFlMTE4ZCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTU1NCwxMSArNTU0LDE4IEBACiAJCXJldCA9IC0xOwogCX0KIAorCS8qCisJICogVGVtcG9yYXJpbHkgZGlzYWJsZSBkaXNjYXJkIGdyYW51bGFyaXR5LiBJdCdzIGN1cnJlbnRseSBidWdneQorCSAqIHNpbmNlIHdlIGRlZmF1bHQgdG8gMCBmb3IgZGlzY2FyZF9ncmFudWxhcml0eSwgaGVuY2UgdGhpcworCSAqICJmYWlsdXJlIiB3aWxsIGFsd2F5cyB0cmlnZ2VyIGZvciBub24temVybyBvZmZzZXRzLgorCSAqLworI2lmIDAKIAlpZiAob2Zmc2V0ICYmCiAJICAgIChvZmZzZXQgJiAoYi0+ZGlzY2FyZF9ncmFudWxhcml0eSAtIDEpKSAhPSBiLT5kaXNjYXJkX2FsaWdubWVudCkgewogCQl0LT5kaXNjYXJkX21pc2FsaWduZWQgPSAxOwogCQlyZXQgPSAtMTsKIAl9CisjZW5kaWYKIAogCS8qIElmIHRvcCBoYXMgbm8gYWxpZ25tZW50IG9mZnNldCwgaW5oZXJpdCBmcm9tIGJvdHRvbSAqLwogCWlmICghdC0+YWxpZ25tZW50X29mZnNldCkKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IGNmYjBiMmYuLmUyZjgwNDYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJICovCiAJc3RydWN0IGNmcV9xdWV1ZSBvb21fY2ZxcTsKIAotCXVuc2lnbmVkIGxvbmcgbGFzdF9lbmRfc3luY19ycTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZGVsYXllZF9zeW5jOwogCiAJLyogTGlzdCBvZiBjZnEgZ3JvdXBzIGJlaW5nIG1hbmFnZWQgb24gdGhpcyBkZXZpY2UqLwogCXN0cnVjdCBobGlzdF9oZWFkIGNmcWdfbGlzdDsKQEAgLTMxOSw3ICszMTksNiBAQAogCUNGUV9DRlFRX0ZMQUdfY29vcCwJCS8qIGNmcXEgaXMgc2hhcmVkICovCiAJQ0ZRX0NGUVFfRkxBR19kZWVwLAkJLyogc3luYyBjZnFxIGV4cGVyaWVuY2VkIGxhcmdlIGRlcHRoICovCiAJQ0ZRX0NGUVFfRkxBR193YWl0X2J1c3ksCS8qIFdhaXRpbmcgZm9yIG5leHQgcmVxdWVzdCAqLwotCUNGUV9DRlFRX0ZMQUdfd2FpdF9idXN5X2RvbmUsCS8qIEdvdCBuZXcgcmVxdWVzdC4gRXhwaXJlIHRoZSBxdWV1ZSAqLwogfTsKIAogI2RlZmluZSBDRlFfQ0ZRUV9GTlMobmFtZSkJCQkJCQlcCkBAIC0zNDgsNyArMzQ3LDYgQEAKIENGUV9DRlFRX0ZOUyhjb29wKTsKIENGUV9DRlFRX0ZOUyhkZWVwKTsKIENGUV9DRlFRX0ZOUyh3YWl0X2J1c3kpOwotQ0ZRX0NGUVFfRk5TKHdhaXRfYnVzeV9kb25lKTsKICN1bmRlZiBDRlFfQ0ZRUV9GTlMKIAogI2lmZGVmIENPTkZJR19ERUJVR19DRlFfSU9TQ0hFRApAQCAtMTU3NCw3ICsxNTcyLDYgQEAKIAogCWNmcV9jbGVhcl9jZnFxX3dhaXRfcmVxdWVzdChjZnFxKTsKIAljZnFfY2xlYXJfY2ZxcV93YWl0X2J1c3koY2ZxcSk7Ci0JY2ZxX2NsZWFyX2NmcXFfd2FpdF9idXN5X2RvbmUoY2ZxcSk7CiAKIAkvKgogCSAqIHN0b3JlIHdoYXQgd2FzIGxlZnQgb2YgdGhpcyBzbGljZSwgaWYgdGhlIHF1ZXVlIGlkbGVkL3RpbWVkIG91dApAQCAtMTc1MCw2ICsxNzQ3LDEyIEBACiAJCXJldHVybiBOVUxMOwogCiAJLyoKKwkgKiBEb24ndCBzZWFyY2ggcHJpb3JpdHkgdHJlZSBpZiBpdCdzIHRoZSBvbmx5IHF1ZXVlIGluIHRoZSBncm91cC4KKwkgKi8KKwlpZiAoY3VyX2NmcXEtPmNmcWctPm5yX2NmcXEgPT0gMSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgogCSAqIFdlIHNob3VsZCBub3RpY2UgaWYgc29tZSBvZiB0aGUgcXVldWVzIGFyZSBjb29wZXJhdGluZywgZWcKIAkgKiB3b3JraW5nIGNsb3NlbHkgb24gdGhlIHNhbWUgYXJlYSBvZiB0aGUgZGlzay4gSW4gdGhhdCBjYXNlLAogCSAqIHdlIGNhbiBncm91cCB0aGVtIHRvZ2V0aGVyIGFuZCBkb24ndCB3YXN0ZSB0aW1lIGlkbGluZy4KQEAgLTIxMTAsNyArMjExMyw5IEBACiAJCWNmcWQtPndvcmtsb2FkX2V4cGlyZXMgPSBqaWZmaWVzICsgY2ZxZy0+c2F2ZWRfd29ya2xvYWRfc2xpY2U7CiAJCWNmcWQtPnNlcnZpbmdfdHlwZSA9IGNmcWctPnNhdmVkX3dvcmtsb2FkOwogCQljZnFkLT5zZXJ2aW5nX3ByaW8gPSBjZnFnLT5zYXZlZF9zZXJ2aW5nX3ByaW87Ci0JfQorCX0gZWxzZQorCQljZnFkLT53b3JrbG9hZF9leHBpcmVzID0gamlmZmllcyAtIDE7CisKIAljaG9vc2Vfc2VydmljZV90cmVlKGNmcWQsIGNmcWcpOwogfQogCkBAIC0yMTI4LDEyICsyMTMzLDMzIEBACiAKIAlpZiAoIWNmcWQtPnJxX3F1ZXVlZCkKIAkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFdlIHdlcmUgd2FpdGluZyBmb3IgZ3JvdXAgdG8gZ2V0IGJhY2tsb2dnZWQuIEV4cGlyZSB0aGUgcXVldWUKKwkgKi8KKwlpZiAoY2ZxX2NmcXFfd2FpdF9idXN5KGNmcXEpICYmICFSQl9FTVBUWV9ST09UKCZjZnFxLT5zb3J0X2xpc3QpKQorCQlnb3RvIGV4cGlyZTsKKwogCS8qCiAJICogVGhlIGFjdGl2ZSBxdWV1ZSBoYXMgcnVuIG91dCBvZiB0aW1lLCBleHBpcmUgaXQgYW5kIHNlbGVjdCBuZXcuCiAJICovCi0JaWYgKChjZnFfc2xpY2VfdXNlZChjZnFxKSB8fCBjZnFfY2ZxcV93YWl0X2J1c3lfZG9uZShjZnFxKSkKLQkgICAgICYmICFjZnFfY2ZxcV9tdXN0X2Rpc3BhdGNoKGNmcXEpKQotCQlnb3RvIGV4cGlyZTsKKwlpZiAoY2ZxX3NsaWNlX3VzZWQoY2ZxcSkgJiYgIWNmcV9jZnFxX211c3RfZGlzcGF0Y2goY2ZxcSkpIHsKKwkJLyoKKwkJICogSWYgc2xpY2UgaGFkIG5vdCBleHBpcmVkIGF0IHRoZSBjb21wbGV0aW9uIG9mIGxhc3QgcmVxdWVzdAorCQkgKiB3ZSBtaWdodCBub3QgaGF2ZSB0dXJuZWQgb24gd2FpdF9idXN5IGZsYWcuIERvbid0IGV4cGlyZQorCQkgKiB0aGUgcXVldWUgeWV0LiBBbGxvdyB0aGUgZ3JvdXAgdG8gZ2V0IGJhY2tsb2dnZWQuCisJCSAqCisJCSAqIFRoZSB2ZXJ5IGZhY3QgdGhhdCB3ZSBoYXZlIHVzZWQgdGhlIHNsaWNlLCB0aGF0IG1lYW5zIHdlCisJCSAqIGhhdmUgYmVlbiBpZGxpbmcgYWxsIGFsb25nIG9uIHRoaXMgcXVldWUgYW5kIGl0IHNob3VsZCBiZQorCQkgKiBvayB0byB3YWl0IGZvciB0aGlzIHJlcXVlc3QgdG8gY29tcGxldGUuCisJCSAqLworCQlpZiAoY2ZxcS0+Y2ZxZy0+bnJfY2ZxcSA9PSAxICYmIFJCX0VNUFRZX1JPT1QoJmNmcXEtPnNvcnRfbGlzdCkKKwkJICAgICYmIGNmcXEtPmRpc3BhdGNoZWQgJiYgY2ZxX3Nob3VsZF9pZGxlKGNmcWQsIGNmcXEpKSB7CisJCQljZnFxID0gTlVMTDsKKwkJCWdvdG8ga2VlcF9xdWV1ZTsKKwkJfSBlbHNlCisJCQlnb3RvIGV4cGlyZTsKKwl9CiAKIAkvKgogCSAqIFRoZSBhY3RpdmUgcXVldWUgaGFzIHJlcXVlc3RzIGFuZCBpc24ndCBleHBpcmVkLCBhbGxvdyBpdCB0bwpAQCAtMjI2NCw3ICsyMjkwLDcgQEAKIAkgKiBiYXNlZCBvbiB0aGUgbGFzdCBzeW5jIElPIHdlIHNlcnZpY2VkCiAJICovCiAJaWYgKCFjZnFfY2ZxcV9zeW5jKGNmcXEpICYmIGNmcWQtPmNmcV9sYXRlbmN5KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbGFzdF9zeW5jID0gamlmZmllcyAtIGNmcWQtPmxhc3RfZW5kX3N5bmNfcnE7CisJCXVuc2lnbmVkIGxvbmcgbGFzdF9zeW5jID0gamlmZmllcyAtIGNmcWQtPmxhc3RfZGVsYXllZF9zeW5jOwogCQl1bnNpZ25lZCBpbnQgZGVwdGg7CiAKIAkJZGVwdGggPSBsYXN0X3N5bmMgLyBjZnFkLT5jZnFfc2xpY2VbMV07CkBAIC0zMTY1LDEwICszMTkxLDYgQEAKIAljZnFxLT5sYXN0X3JlcXVlc3RfcG9zID0gYmxrX3JxX3BvcyhycSkgKyBibGtfcnFfc2VjdG9ycyhycSk7CiAKIAlpZiAoY2ZxcSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpIHsKLQkJaWYgKGNmcV9jZnFxX3dhaXRfYnVzeShjZnFxKSkgewotCQkJY2ZxX2NsZWFyX2NmcXFfd2FpdF9idXN5KGNmcXEpOwotCQkJY2ZxX21hcmtfY2ZxcV93YWl0X2J1c3lfZG9uZShjZnFxKTsKLQkJfQogCQkvKgogCQkgKiBSZW1lbWJlciB0aGF0IHdlIHNhdyBhIHJlcXVlc3QgZnJvbSB0aGlzIHByb2Nlc3MsIGJ1dAogCQkgKiBkb24ndCBzdGFydCBxdWV1aW5nIGp1c3QgeWV0LiBPdGhlcndpc2Ugd2UgcmlzayBzZWVpbmcgbG90cwpAQCAtMzE4Myw2ICszMjA1LDcgQEAKIAkJCWlmIChibGtfcnFfYnl0ZXMocnEpID4gUEFHRV9DQUNIRV9TSVpFIHx8CiAJCQkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKSB7CiAJCQkJZGVsX3RpbWVyKCZjZnFkLT5pZGxlX3NsaWNlX3RpbWVyKTsKKwkJCQljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7CiAJCQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKIAkJCX0gZWxzZQogCQkJCWNmcV9tYXJrX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKQEAgLTMyNTEsNiArMzI3NCwzNSBAQAogCQljZnFkLT5od190YWcgPSAwOwogfQogCitzdGF0aWMgYm9vbCBjZnFfc2hvdWxkX3dhaXRfYnVzeShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCit7CisJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBjZnFkLT5hY3RpdmVfY2ljOworCisJLyogSWYgdGhlcmUgYXJlIG90aGVyIHF1ZXVlcyBpbiB0aGUgZ3JvdXAsIGRvbid0IHdhaXQgKi8KKwlpZiAoY2ZxcS0+Y2ZxZy0+bnJfY2ZxcSA+IDEpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjZnFfc2xpY2VfdXNlZChjZnFxKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBpZiBzbGljZSBsZWZ0IGlzIGxlc3MgdGhhbiB0aGluayB0aW1lLCB3YWl0IGJ1c3kgKi8KKwlpZiAoY2ljICYmIHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpCisJICAgICYmIChjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzIDwgY2ljLT50dGltZV9tZWFuKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIHRoaW5rIHRpbWVzIGlzIGxlc3MgdGhhbiBhIGppZmZ5IHRoYW4gdHRpbWVfbWVhbj0wIGFuZCBhYm92ZQorCSAqIHdpbGwgbm90IGJlIHRydWUuIEl0IG1pZ2h0IGhhcHBlbiB0aGF0IHNsaWNlIGhhcyBub3QgZXhwaXJlZCB5ZXQKKwkgKiBidXQgd2lsbCBleHBpcmUgc29vbiAoNC01IG5zKSBkdXJpbmcgc2VsZWN0X3F1ZXVlKCkuIFRvIGNvdmVyIHRoZQorCSAqIGNhc2Ugd2hlcmUgdGhpbmsgdGltZSBpcyBsZXNzIHRoYW4gYSBqaWZmeSwgbWFyayB0aGUgcXVldWUgd2FpdAorCSAqIGJ1c3kgaWYgb25seSAxIGppZmZ5IGlzIGxlZnQgaW4gdGhlIHNsaWNlLgorCSAqLworCWlmIChjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzID09IDEpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdm9pZCBjZnFfY29tcGxldGVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gUlFfQ0ZRUShycSk7CkBAIC0zMjczLDcgKzMzMjUsOCBAQAogCiAJaWYgKHN5bmMpIHsKIAkJUlFfQ0lDKHJxKS0+bGFzdF9lbmRfcmVxdWVzdCA9IG5vdzsKLQkJY2ZxZC0+bGFzdF9lbmRfc3luY19ycSA9IG5vdzsKKwkJaWYgKCF0aW1lX2FmdGVyKHJxLT5zdGFydF90aW1lICsgY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzFdLCBub3cpKQorCQkJY2ZxZC0+bGFzdF9kZWxheWVkX3N5bmMgPSBub3c7CiAJfQogCiAJLyoKQEAgLTMyODksMTEgKzMzNDIsMTAgQEAKIAkJfQogCiAJCS8qCi0JCSAqIElmIHRoaXMgcXVldWUgY29uc3VtZWQgaXRzIHNsaWNlIGFuZCB0aGlzIGlzIGxhc3QgcXVldWUKLQkJICogaW4gdGhlIGdyb3VwLCB3YWl0IGZvciBuZXh0IHJlcXVlc3QgYmVmb3JlIHdlIGV4cGlyZQotCQkgKiB0aGUgcXVldWUKKwkJICogU2hvdWxkIHdlIHdhaXQgZm9yIG5leHQgcmVxdWVzdCB0byBjb21lIGluIGJlZm9yZSB3ZSBleHBpcmUKKwkJICogdGhlIHF1ZXVlLgogCQkgKi8KLQkJaWYgKGNmcV9zbGljZV91c2VkKGNmcXEpICYmIGNmcXEtPmNmcWctPm5yX2NmcXEgPT0gMSkgeworCQlpZiAoY2ZxX3Nob3VsZF93YWl0X2J1c3koY2ZxZCwgY2ZxcSkpIHsKIAkJCWNmcXEtPnNsaWNlX2VuZCA9IGppZmZpZXMgKyBjZnFkLT5jZnFfc2xpY2VfaWRsZTsKIAkJCWNmcV9tYXJrX2NmcXFfd2FpdF9idXN5KGNmcXEpOwogCQl9CkBAIC0zNzExLDcgKzM3NjMsMTEgQEAKIAljZnFkLT5jZnFfbGF0ZW5jeSA9IDE7CiAJY2ZxZC0+Y2ZxX2dyb3VwX2lzb2xhdGlvbiA9IDA7CiAJY2ZxZC0+aHdfdGFnID0gLTE7Ci0JY2ZxZC0+bGFzdF9lbmRfc3luY19ycSA9IGppZmZpZXM7CisJLyoKKwkgKiB3ZSBvcHRpbWlzdGljYWxseSBzdGFydCBhc3N1bWluZyBzeW5jIG9wcyB3ZXJlbid0IGRlbGF5ZWQgaW4gbGFzdAorCSAqIHNlY29uZCwgaW4gb3JkZXIgdG8gaGF2ZSBsYXJnZXIgZGVwdGggZm9yIGFzeW5jIG9wZXJhdGlvbnMuCisJICovCisJY2ZxZC0+bGFzdF9kZWxheWVkX3N5bmMgPSBqaWZmaWVzIC0gSFo7CiAJSU5JVF9SQ1VfSEVBRCgmY2ZxZC0+cmN1KTsKIAlyZXR1cm4gY2ZxZDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdGQuYyBiL2NyeXB0by9jcnlwdGQuYwppbmRleCBmOGFlMGQ5Li43MDRjMTQxIDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRkLmMKKysrIGIvY3J5cHRvL2NyeXB0ZC5jCkBAIC05OSw3ICs5OSw3IEBACiAJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKIAogCWNwdSA9IGdldF9jcHUoKTsKLQljcHVfcXVldWUgPSBwZXJfY3B1X3B0cihxdWV1ZS0+Y3B1X3F1ZXVlLCBjcHUpOworCWNwdV9xdWV1ZSA9IHRoaXNfY3B1X3B0cihxdWV1ZS0+Y3B1X3F1ZXVlKTsKIAllcnIgPSBjcnlwdG9fZW5xdWV1ZV9yZXF1ZXN0KCZjcHVfcXVldWUtPnF1ZXVlLCByZXF1ZXN0KTsKIAlxdWV1ZV93b3JrX29uKGNwdSwga2NyeXB0b193cSwgJmNwdV9xdWV1ZS0+d29yayk7CiAJcHV0X2NwdSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDI2ZTQzNGEuLjhhMDczNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTk2LDYgKzk2LDggQEAKIAogc291cmNlICJkcml2ZXJzL3J0Yy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2RtYS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZGNhL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2Vzc2liaWxpdHkvYnJhaWxsZS9icmFpbGxlX2NvbnNvbGUuYyBiL2RyaXZlcnMvYWNjZXNzaWJpbGl0eS9icmFpbGxlL2JyYWlsbGVfY29uc29sZS5jCmluZGV4IGQ2NzJjZmUuLmNiNDIzZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNjZXNzaWJpbGl0eS9icmFpbGxlL2JyYWlsbGVfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvYWNjZXNzaWJpbGl0eS9icmFpbGxlL2JyYWlsbGVfY29uc29sZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwppbmRleCAwZDJjZGI4Li45Nzk5MWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAJc3RydWN0IGNwdW1hc2sgKnBhZF9idXN5X2NwdXMgPSB0b19jcHVtYXNrKHBhZF9idXN5X2NwdXNfYml0cyk7CiAJY3B1bWFza192YXJfdCB0bXA7CiAJaW50IGNwdTsKLQl1bnNpZ25lZCBsb25nIG1pbl93ZWlnaHQgPSAtMSwgcHJlZmVycmVkX2NwdTsKKwl1bnNpZ25lZCBsb25nIG1pbl93ZWlnaHQgPSAtMTsKKwl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKHByZWZlcnJlZF9jcHUpOwogCiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCmluZGV4IGFiODM5MTkuLjYxZWRiMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKQEAgLTI5Niw2ICsyOTYsMTEgQEAKIAkJCWFjcGlfc3RhdHVzIHZhbGlkYXRlX3N0YXR1cywKIAkJCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0cik7CiAKK3ZvaWQKK2FjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkJICAgICB1OCBwYWNrYWdlX3R5cGUsCisJCQkgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKTsKKwogLyoKICAqIG5zc2VhcmNoIC0gTmFtZXNwYWNlIHNlYXJjaGluZyBhbmQgZW50cnkKICAqLwpAQCAtMzU0LDkgKzM1OSw3IEBACiAJCQkgY29uc3QgY2hhciAqaW50ZXJuYWxfbmFtZSwKIAkJCSB1MzIgKiBjb252ZXJ0ZWRfbmFtZV9sZW5ndGgsIGNoYXIgKipjb252ZXJ0ZWRfbmFtZSk7CiAKLXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShhY3BpX2hhbmRsZSBoYW5kbGUpOwotCi1hY3BpX2hhbmRsZSBhY3BpX25zX2NvbnZlcnRfZW50cnlfdG9faGFuZGxlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKTsKK3N0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShhY3BpX2hhbmRsZSBoYW5kbGUpOwogCiB2b2lkIGFjcGlfbnNfdGVybWluYXRlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKaW5kZXggYjM5ZDY4Mi4uNjQwNjJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaApAQCAtMTgwLDcgKzE4MCwxMSBAQAogCXU4IHN5bmNfbGV2ZWw7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbXV0ZXg7CiAJdTggKmFtbF9zdGFydDsKLQlBQ1BJX0lOVEVSTkFMX01FVEhPRCBpbXBsZW1lbnRhdGlvbjsKKwl1bmlvbiB7CisJCUFDUElfSU5URVJOQUxfTUVUSE9EIGltcGxlbWVudGF0aW9uOworCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpoYW5kbGVyOworCX0gZXh0cmE7CisKIAl1MzIgYW1sX2xlbmd0aDsKIAl1OCB0aHJlYWRfY291bnQ7CiAJYWNwaV9vd25lcl9pZCBvd25lcl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwppbmRleCA1NjdhNDg5Li5lNzg2ZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCkBAIC00MTQsNyArNDE0LDcgQEAKIAkvKiBJbnZva2UgYW4gaW50ZXJuYWwgbWV0aG9kIGlmIG5lY2Vzc2FyeSAqLwogCiAJaWYgKG9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9JTlRFUk5BTF9PTkxZKSB7Ci0JCXN0YXR1cyA9IG9ial9kZXNjLT5tZXRob2QuaW1wbGVtZW50YXRpb24obmV4dF93YWxrX3N0YXRlKTsKKwkJc3RhdHVzID0gb2JqX2Rlc2MtPm1ldGhvZC5leHRyYS5pbXBsZW1lbnRhdGlvbihuZXh0X3dhbGtfc3RhdGUpOwogCQlpZiAoc3RhdHVzID09IEFFX09LKSB7CiAJCQlzdGF0dXMgPSBBRV9DVFJMX1RFUk1JTkFURTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYwppbmRleCAxMGZjNzg1Li5iNDA1MTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQuYwpAQCAtMjEyLDE4ICsyMTIsMTkgQEAKIAkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCQkvKgotCQkJICogVGhlc2UgdHlwZXMgd2Ugd2lsbCBhbGxvdywgYnV0IHdlIHdpbGwgY2hhbmdlIHRoZSB0eXBlLiBUaGlzCi0JCQkgKiBlbmFibGVzIHNvbWUgZXhpc3RpbmcgY29kZSBvZiB0aGUgZm9ybToKKwkJCSAqIFRoZXNlIHR5cGVzIHdlIHdpbGwgYWxsb3csIGJ1dCB3ZSB3aWxsIGNoYW5nZSB0aGUgdHlwZS4KKwkJCSAqIFRoaXMgZW5hYmxlcyBzb21lIGV4aXN0aW5nIGNvZGUgb2YgdGhlIGZvcm06CiAJCQkgKgogCQkJICogIE5hbWUgKERFQiwgMCkKIAkJCSAqICBTY29wZSAoREVCKSB7IC4uLiB9CiAJCQkgKgotCQkJICogTm90ZTogc2lsZW50bHkgY2hhbmdlIHRoZSB0eXBlIGhlcmUuIE9uIHRoZSBzZWNvbmQgcGFzcywgd2Ugd2lsbCByZXBvcnQKLQkJCSAqIGEgd2FybmluZworCQkJICogTm90ZTogc2lsZW50bHkgY2hhbmdlIHRoZSB0eXBlIGhlcmUuIE9uIHRoZSBzZWNvbmQgcGFzcywKKwkJCSAqIHdlIHdpbGwgcmVwb3J0IGEgd2FybmluZwogCQkJICovCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJCSAgIlR5cGUgb3ZlcnJpZGUgLSBbJTQuNHNdIGhhZCBpbnZhbGlkIHR5cGUgKCVzKSBmb3IgU2NvcGUgb3BlcmF0b3IsIGNoYW5nZWQgdG8gKFNjb3BlKVxuIiwKLQkJCQkJICBwYXRoLAorCQkJCQkgICJUeXBlIG92ZXJyaWRlIC0gWyU0LjRzXSBoYWQgaW52YWxpZCB0eXBlICglcykgIgorCQkJCQkgICJmb3IgU2NvcGUgb3BlcmF0b3IsIGNoYW5nZWQgdG8gdHlwZSBBTllcbiIsCisJCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLAogCQkJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShub2RlLT50eXBlKSkpOwogCiAJCQlub2RlLT50eXBlID0gQUNQSV9UWVBFX0FOWTsKQEAgLTIzNSw4ICsyMzYsMTAgQEAKIAkJCS8qIEFsbCBvdGhlciB0eXBlcyBhcmUgYW4gZXJyb3IgKi8KIAogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkludmFsaWQgdHlwZSAoJXMpIGZvciB0YXJnZXQgb2YgU2NvcGUgb3BlcmF0b3IgWyU0LjRzXSAoQ2Fubm90IG92ZXJyaWRlKSIsCi0JCQkJICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShub2RlLT50eXBlKSwgcGF0aCkpOworCQkJCSAgICAiSW52YWxpZCB0eXBlICglcykgZm9yIHRhcmdldCBvZiAiCisJCQkJICAgICJTY29wZSBvcGVyYXRvciBbJTQuNHNdIChDYW5ub3Qgb3ZlcnJpZGUpIiwKKwkJCQkgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKG5vZGUtPnR5cGUpLAorCQkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSkpKTsKIAogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwogCQl9CkBAIC02OTcsMTUgKzcwMCwxNiBAQAogCQljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKIAkJCS8qCi0JCQkgKiBUaGVzZSB0eXBlcyB3ZSB3aWxsIGFsbG93LCBidXQgd2Ugd2lsbCBjaGFuZ2UgdGhlIHR5cGUuIFRoaXMKLQkJCSAqIGVuYWJsZXMgc29tZSBleGlzdGluZyBjb2RlIG9mIHRoZSBmb3JtOgorCQkJICogVGhlc2UgdHlwZXMgd2Ugd2lsbCBhbGxvdywgYnV0IHdlIHdpbGwgY2hhbmdlIHRoZSB0eXBlLgorCQkJICogVGhpcyBlbmFibGVzIHNvbWUgZXhpc3RpbmcgY29kZSBvZiB0aGUgZm9ybToKIAkJCSAqCiAJCQkgKiAgTmFtZSAoREVCLCAwKQogCQkJICogIFNjb3BlIChERUIpIHsgLi4uIH0KIAkJCSAqLwogCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCSAgICAgICJUeXBlIG92ZXJyaWRlIC0gWyU0LjRzXSBoYWQgaW52YWxpZCB0eXBlICglcykgZm9yIFNjb3BlIG9wZXJhdG9yLCBjaGFuZ2VkIHRvIChTY29wZSkiLAotCQkJCSAgICAgIGJ1ZmZlcl9wdHIsCisJCQkJICAgICAgIlR5cGUgb3ZlcnJpZGUgLSBbJTQuNHNdIGhhZCBpbnZhbGlkIHR5cGUgKCVzKSAiCisJCQkJICAgICAgImZvciBTY29wZSBvcGVyYXRvciwgY2hhbmdlZCB0byB0eXBlIEFOWVxuIiwKKwkJCQkgICAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSksCiAJCQkJICAgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKG5vZGUtPnR5cGUpKSk7CiAKIAkJCW5vZGUtPnR5cGUgPSBBQ1BJX1RZUEVfQU5ZOwpAQCAtNzE3LDkgKzcyMSwxMCBAQAogCQkJLyogQWxsIG90aGVyIHR5cGVzIGFyZSBhbiBlcnJvciAqLwogCiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiSW52YWxpZCB0eXBlICglcykgZm9yIHRhcmdldCBvZiBTY29wZSBvcGVyYXRvciBbJTQuNHNdIiwKKwkJCQkgICAgIkludmFsaWQgdHlwZSAoJXMpIGZvciB0YXJnZXQgb2YgIgorCQkJCSAgICAiU2NvcGUgb3BlcmF0b3IgWyU0LjRzXSAoQ2Fubm90IG92ZXJyaWRlKSIsCiAJCQkJICAgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShub2RlLT50eXBlKSwKLQkJCQkgICAgYnVmZmVyX3B0cikpOworCQkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSkpKTsKIAogCQkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKIAkJfQpAQCAtMTA0Nyw5ICsxMDUyLDIyIEBACiAJCQl9CiAKIAkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUgZXhlY3V0aW5nIGEgbWV0aG9kLCBpbml0aWFsaXplIHRoZSByZWdpb24KKwkJCSAqIFRoZSBvcF9yZWdpb24gaXMgbm90IGZ1bGx5IHBhcnNlZCBhdCB0aGlzIHRpbWUuIFRoZSBvbmx5IHZhbGlkCisJCQkgKiBhcmd1bWVudCBpcyB0aGUgc3BhY2VfaWQuIChXZSBtdXN0IHNhdmUgdGhlIGFkZHJlc3Mgb2YgdGhlCisJCQkgKiBBTUwgb2YgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBvcGVyYW5kcykKKwkJCSAqCisJCQkgKiBJZiB3ZSBoYXZlIGEgdmFsaWQgcmVnaW9uLCBpbml0aWFsaXplIGl0LiBUaGUgbmFtZXNwYWNlIGlzCisJCQkgKiB1bmxvY2tlZCBhdCB0aGlzIHBvaW50LgorCQkJICoKKwkJCSAqIE5lZWQgdG8gdW5sb2NrIGludGVycHJldGVyIGlmIGl0IGlzIGxvY2tlZCAoaWYgd2UgYXJlIHJ1bm5pbmcKKwkJCSAqIGEgY29udHJvbCBtZXRob2QpLCBpbiBvcmRlciB0byBhbGxvdyBfUkVHIG1ldGhvZHMgdG8gYmUgcnVuCisJCQkgKiBkdXJpbmcgYWNwaV9ldl9pbml0aWFsaXplX3JlZ2lvbi4KIAkJCSAqLwogCQkJaWYgKHdhbGtfc3RhdGUtPm1ldGhvZF9ub2RlKSB7CisJCQkJLyoKKwkJCQkgKiBFeGVjdXRpbmcgYSBtZXRob2Q6IGluaXRpYWxpemUgdGhlIHJlZ2lvbiBhbmQgdW5sb2NrCisJCQkJICogdGhlIGludGVycHJldGVyCisJCQkJICovCiAJCQkJc3RhdHVzID0KIAkJCQkgICAgYWNwaV9leF9jcmVhdGVfcmVnaW9uKG9wLT5uYW1lZC5kYXRhLAogCQkJCQkJCSAgb3AtPm5hbWVkLmxlbmd0aCwKQEAgLTEwNTgsMjEgKzEwNzYsMTcgQEAKIAkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQkJcmV0dXJuIChzdGF0dXMpOwogCQkJCX0KKworCQkJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwogCQkJfQogCi0JCQkvKgotCQkJICogVGhlIG9wX3JlZ2lvbiBpcyBub3QgZnVsbHkgcGFyc2VkIGF0IHRoaXMgdGltZS4gT25seSB2YWxpZAotCQkJICogYXJndW1lbnQgaXMgdGhlIHNwYWNlX2lkLiAoV2UgbXVzdCBzYXZlIHRoZSBhZGRyZXNzIG9mIHRoZQotCQkJICogQU1MIG9mIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb3BlcmFuZHMpCi0JCQkgKi8KLQotCQkJLyoKLQkJCSAqIElmIHdlIGhhdmUgYSB2YWxpZCByZWdpb24sIGluaXRpYWxpemUgaXQKLQkJCSAqIE5hbWVzcGFjZSBpcyBOT1QgbG9ja2VkIGF0IHRoaXMgcG9pbnQuCi0JCQkgKi8KIAkJCXN0YXR1cyA9CiAJCQkgICAgYWNwaV9ldl9pbml0aWFsaXplX3JlZ2lvbgogCQkJICAgIChhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSksIEZBTFNFKTsKKwkJCWlmICh3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZSkgeworCQkJCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKKwkJCX0KKwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJLyoKIAkJCQkgKiAgSWYgQUVfTk9UX0VYSVNUIGlzIHJldHVybmVkLCBpdCBpcyBub3QgZmF0YWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYwppbmRleCAwYmM4MDdjLi41MzM2ZDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCkBAIC03MTgsNyArNzE4LDcgQEAKIAogCS8qIENvbnZlcnQgYW5kIHZhbGlkYXRlIHRoZSBkZXZpY2UgaGFuZGxlICovCiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUob2JqX2hhbmRsZSk7CisJbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKG9ial9oYW5kbGUpOwogCWlmICghbm9kZSkgewogCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KQEAgLTEwODcsNyArMTA4Nyw3IEBACiAKIAkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgZGV2aWNlIGhhbmRsZSAqLwogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKG9ial9oYW5kbGUpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShvYmpfaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKaW5kZXggY2YyOWM0OS4uZmYxNjgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwpAQCAtNTc1LDYgKzU3NSwyMSBAQAogCQkJCWhhbmRsZXJfb2JqID0gb2JqX2Rlc2MtPnRoZXJtYWxfem9uZS5oYW5kbGVyOwogCQkJCWJyZWFrOwogCisJCQljYXNlIEFDUElfVFlQRV9NRVRIT0Q6CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBhcmUgZXhlY3V0aW5nIG1vZHVsZSBsZXZlbCBjb2RlLCB0aGUgb3JpZ2luYWwKKwkJCQkgKiBOb2RlJ3Mgb2JqZWN0IHdhcyByZXBsYWNlZCBieSB0aGlzIE1ldGhvZCBvYmplY3QgYW5kIHdlCisJCQkJICogc2F2ZWQgdGhlIGhhbmRsZXIgaW4gdGhlIG1ldGhvZCBvYmplY3QuCisJCQkJICoKKwkJCQkgKiBTZWUgYWNwaV9uc19leGVjX21vZHVsZV9jb2RlCisJCQkJICovCisJCQkJaWYgKG9ial9kZXNjLT5tZXRob2QuCisJCQkJICAgIGZsYWdzICYgQU9QT0JKX01PRFVMRV9MRVZFTCkgeworCQkJCQloYW5kbGVyX29iaiA9CisJCQkJCSAgICBvYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmhhbmRsZXI7CisJCQkJfQorCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCS8qIElnbm9yZSBvdGhlciBvYmplY3RzICovCiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCmluZGV4IDEwYjg1NDMuLjJmZTA4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAogCS8qIENvbnZlcnQgYW5kIHZhbGlkYXRlIHRoZSBkZXZpY2UgaGFuZGxlICovCiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUoZGV2aWNlKTsKKwlub2RlID0gYWNwaV9uc192YWxpZGF0ZV9oYW5kbGUoZGV2aWNlKTsKIAlpZiAoIW5vZGUpIHsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CkBAIC00MjUsNyArNDI1LDcgQEAKIAogCS8qIENvbnZlcnQgYW5kIHZhbGlkYXRlIHRoZSBkZXZpY2UgaGFuZGxlICovCiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUoZGV2aWNlKTsKKwlub2RlID0gYWNwaV9uc192YWxpZGF0ZV9oYW5kbGUoZGV2aWNlKTsKIAlpZiAoIW5vZGUpIHsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggNDcyMWY1OC4uZWVkN2EzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtNjEwLDcgKzYxMCw3IEBACiAJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUoZ3BlX2RldmljZSk7CisJbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKGdwZV9kZXZpY2UpOwogCWlmICghbm9kZSkgewogCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKQEAgLTY5OCw3ICs2OTgsNyBAQAogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGdwZV9kZXZpY2UpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShncGVfZGV2aWNlKTsKIAlpZiAoIW5vZGUpIHsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKaW5kZXggN2MzZDJkMy4uYzk4YWE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYwpAQCAtODksNyArODksNyBAQAogCiAJLyogQ29udmVydCBhbmQgdmFsaWRhdGUgdGhlIGRldmljZSBoYW5kbGUgKi8KIAotCW5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShkZXZpY2UpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShkZXZpY2UpOwogCWlmICghbm9kZSkgewogCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiAJLyogQ29udmVydCBhbmQgdmFsaWRhdGUgdGhlIGRldmljZSBoYW5kbGUgKi8KIAotCW5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShkZXZpY2UpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShkZXZpY2UpOwogCWlmICghbm9kZSB8fAogCSAgICAoKG5vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgJiYKIAkgICAgIChub2RlLT50eXBlICE9IEFDUElfVFlQRV9QUk9DRVNTT1IpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bXV0ZXguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCmluZGV4IDJmMDExNDIuLjNjNDU2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtdXRleC5jCkBAIC0zNzUsNiArMzc1LDE1IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTVVURVhfTk9UX0FDUVVJUkVEKTsKIAl9CiAKKwkvKiBNdXN0IGhhdmUgYSB2YWxpZCB0aHJlYWQgSUQgKi8KKworCWlmICghd2Fsa19zdGF0ZS0+dGhyZWFkKSB7CisJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkgICAgIkNhbm5vdCByZWxlYXNlIE11dGV4IFslNC40c10sIG51bGwgdGhyZWFkIGluZm8iLAorCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfZGVzYy0+bXV0ZXgubm9kZSkpKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTlRFUk5BTCk7CisJfQorCiAJLyoKIAkgKiBUaGUgTXV0ZXggaXMgb3duZWQsIGJ1dCB0aGlzIHRocmVhZCBtdXN0IGJlIHRoZSBvd25lci4KIAkgKiBTcGVjaWFsIGNhc2UgZm9yIEdsb2JhbCBMb2NrLCBhbnkgdGhyZWFkIGNhbiByZWxlYXNlCkBAIC0zOTIsMTUgKzQwMSw2IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfTk9UX09XTkVSKTsKIAl9CiAKLQkvKiBNdXN0IGhhdmUgYSB2YWxpZCB0aHJlYWQgSUQgKi8KLQotCWlmICghd2Fsa19zdGF0ZS0+dGhyZWFkKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkNhbm5vdCByZWxlYXNlIE11dGV4IFslNC40c10sIG51bGwgdGhyZWFkIGluZm8iLAotCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfZGVzYy0+bXV0ZXgubm9kZSkpKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTlRFUk5BTCk7Ci0JfQotCiAJLyoKIAkgKiBUaGUgc3luYyBsZXZlbCBvZiB0aGUgbXV0ZXggbXVzdCBiZSBlcXVhbCB0byB0aGUgY3VycmVudCBzeW5jIGxldmVsLiBJbgogCSAqIG90aGVyIHdvcmRzLCB0aGUgY3VycmVudCBsZXZlbCBtZWFucyB0aGF0IGF0IGxlYXN0IG9uZSBtdXRleCBhdCB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKaW5kZXggOWMzY2RiZS4uZDYyMmJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKIAkJCQlvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyA9CiAJCQkJICAgIEFNTF9NRVRIT0RfSU5URVJOQUxfT05MWTsKLQkJCQlvYmpfZGVzYy0+bWV0aG9kLmltcGxlbWVudGF0aW9uID0KKwkJCQlvYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmltcGxlbWVudGF0aW9uID0KIAkJCQkgICAgYWNwaV91dF9vc2lfaW1wbGVtZW50YXRpb247CiAjZW5kaWYKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCmluZGV4IDJkZWI5ODYuLmUzNzgzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCXJldHVybiAoQUVfT0spOwogCX0KIAotCXRoaXNfbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKG9ial9oYW5kbGUpOworCXRoaXNfbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKG9ial9oYW5kbGUpOwogCWlmICghdGhpc19ub2RlKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkludmFsaWQgb2JqZWN0IGhhbmRsZSAlcFxuIiwKIAkJCQkgIG9ial9oYW5kbGUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IGY3NzFlOTcuLmFmOWZlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtMzgxLDYgKzM4MSwxOCBAQAogCQkJCSAgICBtZXRob2Rfb2JqLT5tZXRob2QubmV4dF9vYmplY3QpOwogCXR5cGUgPSBhY3BpX25zX2dldF90eXBlKHBhcmVudF9ub2RlKTsKIAorCS8qCisJICogR2V0IHRoZSByZWdpb24gaGFuZGxlciBhbmQgc2F2ZSBpdCBpbiB0aGUgbWV0aG9kIG9iamVjdC4gV2UgbWF5IG5lZWQKKwkgKiB0aGlzIGlmIGFuIG9wZXJhdGlvbiByZWdpb24gZGVjbGFyYXRpb24gY2F1c2VzIGEgX1JFRyBtZXRob2QgdG8gYmUgcnVuLgorCSAqCisJICogV2UgY2FuJ3QgZG8gdGhpcyBpbiBhY3BpX3BzX2xpbmtfbW9kdWxlX2NvZGUgYmVjYXVzZQorCSAqIGFjcGlfZ2JsX3Jvb3Rfbm9kZS0+T2JqZWN0IGlzIE5VTEwgYXQgUEFTUzEuCisJICovCisJaWYgKCh0eXBlID09IEFDUElfVFlQRV9ERVZJQ0UpICYmIHBhcmVudF9ub2RlLT5vYmplY3QpIHsKKwkJbWV0aG9kX29iai0+bWV0aG9kLmV4dHJhLmhhbmRsZXIgPQorCQkgICAgcGFyZW50X25vZGUtPm9iamVjdC0+ZGV2aWNlLmhhbmRsZXI7CisJfQorCiAJLyogTXVzdCBjbGVhciBuZXh0X29iamVjdCAoYWNwaV9uc19hdHRhY2hfb2JqZWN0IG5lZWRzIHRoZSBmaWVsZCkgKi8KIAogCW1ldGhvZF9vYmotPm1ldGhvZC5uZXh0X29iamVjdCA9IE5VTEw7CkBAIC00MTUsNiArNDI3LDEyIEBACiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTklULCAiRXhlY3V0ZWQgbW9kdWxlLWxldmVsIGNvZGUgYXQgJXBcbiIsCiAJCQkgIG1ldGhvZF9vYmotPm1ldGhvZC5hbWxfc3RhcnQpKTsKIAorCS8qIERlbGV0ZSBhIHBvc3NpYmxlIGltcGxpY2l0IHJldHVybiB2YWx1ZSAoaW4gc2xhY2sgbW9kZSkgKi8KKworCWlmIChpbmZvLT5yZXR1cm5fb2JqZWN0KSB7CisJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShpbmZvLT5yZXR1cm5fb2JqZWN0KTsKKwl9CisKIAkvKiBEZXRhY2ggdGhlIHRlbXBvcmFyeSBtZXRob2Qgb2JqZWN0ICovCiAKIAlhY3BpX25zX2RldGFjaF9vYmplY3QocGFyZW50X25vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc25hbWVzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYwppbmRleCBhZjhlNmJjLi44ZjlhNDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihuc19oYW5kbGVfdG9fcGF0aG5hbWUsIHRhcmdldF9oYW5kbGUpOwogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKHRhcmdldF9oYW5kbGUpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZSh0YXJnZXRfaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwppbmRleCBiMDVmNDI5Li5kMzRmYTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCkBAIC0yMTYsMjkgKzIxNiwzOCBAQAogCWRhdGEtPnBhdGhuYW1lID0gcGF0aG5hbWU7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybiBvYmplY3QgaXMgd2hhdCBpcyBleHBlY3RlZCBmb3IKLQkgKiB0aGlzIHByZWRlZmluZWQgbmFtZQorCSAqIENoZWNrIHRoYXQgdGhlIHR5cGUgb2YgdGhlIG1haW4gcmV0dXJuIG9iamVjdCBpcyB3aGF0IGlzIGV4cGVjdGVkCisJICogZm9yIHRoaXMgcHJlZGVmaW5lZCBuYW1lCiAJICovCiAJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShkYXRhLCByZXR1cm5fb2JqZWN0X3B0ciwKIAkJCQkJICAgcHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMsCiAJCQkJCSAgIEFDUElfTk9UX1BBQ0tBR0VfRUxFTUVOVCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2hlY2tfdmFsaWRhdGlvbl9zdGF0dXM7Ci0JfQotCi0JLyogRm9yIHJldHVybmVkIFBhY2thZ2Ugb2JqZWN0cywgY2hlY2sgdGhlIHR5cGUgb2YgYWxsIHN1Yi1vYmplY3RzICovCi0KLQlpZiAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlKGRhdGEsIHJldHVybl9vYmplY3RfcHRyKTsKKwkJZ290byBleGl0OwogCX0KIAogCS8qCi0JICogUGVyZm9ybSBhZGRpdGlvbmFsLCBtb3JlIGNvbXBsaWNhdGVkIHJlcGFpcnMgb24gYSBwZXItbmFtZQotCSAqIGJhc2lzLgorCSAqIEZvciByZXR1cm5lZCBQYWNrYWdlIG9iamVjdHMsIGNoZWNrIHRoZSB0eXBlIG9mIGFsbCBzdWItb2JqZWN0cy4KKwkgKiBOb3RlOiBQYWNrYWdlIG1heSBoYXZlIGJlZW4gbmV3bHkgY3JlYXRlZCBieSBjYWxsIGFib3ZlLgorCSAqLworCWlmICgoKnJldHVybl9vYmplY3RfcHRyKS0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwkJc3RhdHVzID0gYWNwaV9uc19jaGVja19wYWNrYWdlKGRhdGEsIHJldHVybl9vYmplY3RfcHRyKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSByZXR1cm4gb2JqZWN0IHdhcyBPSywgb3IgaXQgd2FzIHN1Y2Nlc3NmdWxseSByZXBhaXJlZCBhYm92ZS4KKwkgKiBOb3cgbWFrZSBzb21lIGFkZGl0aW9uYWwgY2hlY2tzIHN1Y2ggYXMgdmVyaWZ5aW5nIHRoYXQgcGFja2FnZQorCSAqIG9iamVjdHMgYXJlIHNvcnRlZCBjb3JyZWN0bHkgKGlmIHJlcXVpcmVkKSBvciBidWZmZXIgb2JqZWN0cyBoYXZlCisJICogdGhlIGNvcnJlY3QgZGF0YSB3aWR0aCAoYnl0ZXMgdnMuIGR3b3JkcykuIFRoZXNlIHJlcGFpcnMgYXJlCisJICogcGVyZm9ybWVkIG9uIGEgcGVyLW5hbWUgYmFzaXMsIGkuZS4sIHRoZSBjb2RlIGlzIHNwZWNpZmljIHRvCisJICogcGFydGljdWxhciBwcmVkZWZpbmVkIG5hbWVzLgogCSAqLwogCXN0YXR1cyA9IGFjcGlfbnNfY29tcGxleF9yZXBhaXJzKGRhdGEsIG5vZGUsIHN0YXR1cywgcmV0dXJuX29iamVjdF9wdHIpOwogCi1jaGVja192YWxpZGF0aW9uX3N0YXR1czoKK2V4aXQ6CiAJLyoKIAkgKiBJZiB0aGUgb2JqZWN0IHZhbGlkYXRpb24gZmFpbGVkIG9yIGlmIHdlIHN1Y2Nlc3NmdWxseSByZXBhaXJlZCBvbmUKIAkgKiBvciBtb3JlIG9iamVjdHMsIG1hcmsgdGhlIHBhcmVudCBub2RlIHRvIHN1cHByZXNzIGZ1cnRoZXIgd2FybmluZwpAQCAtNDI3LDYgKzQzNiwxMyBAQAogCQkJICBkYXRhLT5wYXRobmFtZSwgcGFja2FnZS0+cmV0X2luZm8udHlwZSwKIAkJCSAgcmV0dXJuX29iamVjdC0+cGFja2FnZS5jb3VudCkpOwogCisJLyoKKwkgKiBGb3IgdmFyaWFibGUtbGVuZ3RoIFBhY2thZ2VzLCB3ZSBjYW4gc2FmZWx5IHJlbW92ZSBhbGwgZW1iZWRkZWQKKwkgKiBhbmQgdHJhaWxpbmcgTlVMTCBwYWNrYWdlIGVsZW1lbnRzCisJICovCisJYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhkYXRhLCBwYWNrYWdlLT5yZXRfaW5mby50eXBlLAorCQkJCSAgICAgcmV0dXJuX29iamVjdCk7CisKIAkvKiBFeHRyYWN0IHBhY2thZ2UgY291bnQgYW5kIGVsZW1lbnRzIGFycmF5ICovCiAKIAllbGVtZW50cyA9IHJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHM7CkBAIC00NjEsMTEgKzQ3NywxMSBAQAogCQlpZiAoY291bnQgPCBleHBlY3RlZF9jb3VudCkgewogCQkJZ290byBwYWNrYWdlX3Rvb19zbWFsbDsKIAkJfSBlbHNlIGlmIChjb3VudCA+IGV4cGVjdGVkX2NvdW50KSB7Ci0JCQlBQ1BJX1dBUk5fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsCi0JCQkJCSAgICAgIGRhdGEtPm5vZGVfZmxhZ3MsCi0JCQkJCSAgICAgICJSZXR1cm4gUGFja2FnZSBpcyBsYXJnZXIgdGhhbiBuZWVkZWQgLSAiCi0JCQkJCSAgICAgICJmb3VuZCAldSwgZXhwZWN0ZWQgJXUiLCBjb3VudCwKLQkJCQkJICAgICAgZXhwZWN0ZWRfY291bnQpKTsKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAorCQkJCQkgICIlczogUmV0dXJuIFBhY2thZ2UgaXMgbGFyZ2VyIHRoYW4gbmVlZGVkIC0gIgorCQkJCQkgICJmb3VuZCAldSwgZXhwZWN0ZWQgJXVcbiIsCisJCQkJCSAgZGF0YS0+cGF0aG5hbWUsIGNvdW50LAorCQkJCQkgIGV4cGVjdGVkX2NvdW50KSk7CiAJCX0KIAogCQkvKiBWYWxpZGF0ZSBhbGwgZWxlbWVudHMgb2YgdGhlIHJldHVybmVkIHBhY2thZ2UgKi8KQEAgLTY4MCw1MyArNjk2LDE4IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqc3ViX3BhY2thZ2U7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnN1Yl9lbGVtZW50czsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTggbm9uX3RyYWlsaW5nX251bGwgPSBGQUxTRTsKIAl1MzIgZXhwZWN0ZWRfY291bnQ7CiAJdTMyIGk7CiAJdTMyIGo7CiAKLQkvKiBWYWxpZGF0ZSBlYWNoIHN1Yi1QYWNrYWdlIGluIHRoZSBwYXJlbnQgUGFja2FnZSAqLwotCisJLyoKKwkgKiBWYWxpZGF0ZSBlYWNoIHN1Yi1QYWNrYWdlIGluIHRoZSBwYXJlbnQgUGFja2FnZQorCSAqCisJICogTk9URTogYXNzdW1lcyBsaXN0IG9mIHN1Yi1wYWNrYWdlcyBjb250YWlucyBubyBOVUxMIGVsZW1lbnRzLgorCSAqIEFueSBOVUxMIGVsZW1lbnRzIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBieSBlYXJsaWVyIGNhbGwKKwkgKiB0byBhY3BpX25zX3JlbW92ZV9udWxsX2VsZW1lbnRzLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCS8qCi0JCSAqIEhhbmRsaW5nIGZvciBOVUxMIHBhY2thZ2UgZWxlbWVudHMuIEZvciBub3csIHdlIHdpbGwgc2ltcGx5IGFsbG93Ci0JCSAqIGEgcGFyZW50IHBhY2thZ2Ugd2l0aCB0cmFpbGluZyBOVUxMIGVsZW1lbnRzLiBUaGlzIGNhbiBoYXBwZW4gaWYKLQkJICogdGhlIHBhY2thZ2Ugd2FzIGRlZmluZWQgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIGluaXRpYWxpemVyIGxpc3QuCi0JCSAqIFRoaXMgaXMgbGVnYWwgYXMgcGVyIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24uIEl0IGlzIG9mdGVuIHVzZWQKLQkJICogdG8gYWxsb3cgZm9yIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gb2YgYSBQYWNrYWdlLgotCQkgKgotCQkgKiBBIGZ1dHVyZSBlbmhhbmNlbWVudCBtYXkgYmUgdG8gc2ltcGx5IHRydW5jYXRlIHRoZSBwYWNrYWdlIHRvCi0JCSAqIHJlbW92ZSB0aGUgdHJhaWxpbmcgTlVMTCBlbGVtZW50cy4KLQkJICovCi0JCWlmICghKCplbGVtZW50cykpIHsKLQkJCWlmICghbm9uX3RyYWlsaW5nX251bGwpIHsKLQotCQkJCS8qIEVuc3VyZSB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSBhbGwgTlVMTCAqLwotCi0JCQkJZm9yIChqID0gMTsgaiA8IChjb3VudCAtIGkgKyAxKTsgaisrKSB7Ci0JCQkJCWlmIChlbGVtZW50c1tqXSkgewotCQkJCQkJbm9uX3RyYWlsaW5nX251bGwgPSBUUlVFOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKCFub25fdHJhaWxpbmdfbnVsbCkgewotCi0JCQkJCS8qIElnbm9yZSB0aGUgdHJhaWxpbmcgTlVMTCBlbGVtZW50cyAqLwotCi0JCQkJCXJldHVybiAoQUVfT0spOwotCQkJCX0KLQkJCX0KLQotCQkJLyogVGhlcmUgYXJlIHRyYWlsaW5nIG5vbi1udWxsIGVsZW1lbnRzLCBpc3N1ZSB3YXJuaW5nICovCi0KLQkJCUFDUElfV0FSTl9QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwKLQkJCQkJICAgICAgZGF0YS0+bm9kZV9mbGFncywKLQkJCQkJICAgICAgIkZvdW5kIE5VTEwgZWxlbWVudCBhdCBwYWNrYWdlIGluZGV4ICV1IiwKLQkJCQkJICAgICAgaSkpOwotCQkJZWxlbWVudHMrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJc3ViX3BhY2thZ2UgPSAqZWxlbWVudHM7CiAJCXN1Yl9lbGVtZW50cyA9IHN1Yl9wYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKaW5kZXggZDU2M2YxYS4uNGZkMWJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwpAQCAtNDUsMTMgKzQ1LDUyIEBACiAjaW5jbHVkZSAiYWNjb21tb24uaCIKICNpbmNsdWRlICJhY25hbWVzcC5oIgogI2luY2x1ZGUgImFjaW50ZXJwLmgiCi0jaW5jbHVkZSAiYWNwcmVkZWYuaCIKIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfTkFNRVNQQUNFCiBBQ1BJX01PRFVMRV9OQU1FKCJuc3JlcGFpciIpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogVGhpcyBtb2R1bGUgYXR0ZW1wdHMgdG8gcmVwYWlyIG9yIGNvbnZlcnQgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUKKyAqIHByZWRlZmluZWQgbWV0aG9kcyB0byBhbiBvYmplY3QgdHlwZSB0aGF0IGlzIGV4cGVjdGVkLCBhcyBwZXIgdGhlIEFDUEkKKyAqIHNwZWNpZmljYXRpb24uIFRoZSBuZWVkIGZvciB0aGlzIGNvZGUgaXMgZGljdGF0ZWQgYnkgdGhlIG1hbnkgbWFjaGluZXMgdGhhdAorICogcmV0dXJuIGluY29ycmVjdCB0eXBlcyBmb3IgdGhlIHN0YW5kYXJkIHByZWRlZmluZWQgbWV0aG9kcy4gUGVyZm9ybWluZyB0aGVzZQorICogY29udmVyc2lvbnMgaGVyZSwgaW4gb25lIHBsYWNlLCBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBpbmRpdmlkdWFsIEFDUEkKKyAqIGRldmljZSBkcml2ZXJzIHRvIGRvIHRoZSBzYW1lLiBOb3RlOiBNb3N0IG9mIHRoZXNlIGNvbnZlcnNpb25zIGFyZSBkaWZmZXJlbnQKKyAqIHRoYW4gdGhlIGludGVybmFsIG9iamVjdCBjb252ZXJzaW9uIHJvdXRpbmVzIHVzZWQgZm9yIGltcGxpY2l0IG9iamVjdAorICogY29udmVyc2lvbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIGNhbiBiZSBwZXJmb3JtZWQgYXMgbmVjZXNzYXJ5OgorICoKKyAqIEludGVnZXIgLT4gU3RyaW5nCisgKiBJbnRlZ2VyIC0+IEJ1ZmZlcgorICogU3RyaW5nICAtPiBJbnRlZ2VyCisgKiBTdHJpbmcgIC0+IEJ1ZmZlcgorICogQnVmZmVyICAtPiBJbnRlZ2VyCisgKiBCdWZmZXIgIC0+IFN0cmluZworICogQnVmZmVyICAtPiBQYWNrYWdlIG9mIEludGVnZXJzCisgKiBQYWNrYWdlIC0+IFBhY2thZ2Ugb2Ygb25lIFBhY2thZ2UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2NvbnZlcnRfdG9faW50ZWdlcih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcmlnaW5hbF9vYmplY3QsCisJCQkgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdCk7CisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9uc19jb252ZXJ0X3RvX3N0cmluZyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcmlnaW5hbF9vYmplY3QsCisJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0KTsKKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2NvbnZlcnRfdG9fYnVmZmVyKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9yaWdpbmFsX29iamVjdCwKKwkJCSAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3QpOworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY29udmVydF90b19wYWNrYWdlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9yaWdpbmFsX29iamVjdCwKKwkJCSAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfb2JqZWN0CiAgKgogICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKQEAgLTY4LDYgKzEwNyw3IEBACiAgKiAgICAgICAgICAgICAgbm90IGV4cGVjdGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIGFjcGlfc3RhdHVzCiBhY3BpX25zX3JlcGFpcl9vYmplY3Qoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAogCQkgICAgICB1MzIgZXhwZWN0ZWRfYnR5cGVzLApAQCAtNzYsOTggKzExNiw0NiBAQAogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9vYmplY3QgPSAqcmV0dXJuX29iamVjdF9wdHI7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKLQlhY3BpX3NpemUgbGVuZ3RoOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAorCUFDUElfRlVOQ1RJT05fTkFNRShuc19yZXBhaXJfb2JqZWN0KTsKKwogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgd2Uga25vdyB0aGF0IHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBvYmplY3Qgd2FzIG5vdAogCSAqIG9uZSBvZiB0aGUgZXhwZWN0ZWQgdHlwZXMgZm9yIHRoaXMgcHJlZGVmaW5lZCBuYW1lLiBBdHRlbXB0IHRvCi0JICogcmVwYWlyIHRoZSBvYmplY3QuIE9ubHkgYSBsaW1pdGVkIG51bWJlciBvZiByZXBhaXJzIGFyZSBwb3NzaWJsZS4KKwkgKiByZXBhaXIgdGhlIG9iamVjdCBieSBjb252ZXJ0aW5nIGl0IHRvIG9uZSBvZiB0aGUgZXhwZWN0ZWQgb2JqZWN0CisJICogdHlwZXMgZm9yIHRoaXMgcHJlZGVmaW5lZCBuYW1lLgogCSAqLwotCXN3aXRjaCAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUpIHsKLQljYXNlIEFDUElfVFlQRV9CVUZGRVI6Ci0KLQkJLyogRG9lcyB0aGUgbWV0aG9kL29iamVjdCBsZWdhbGx5IHJldHVybiBhIHN0cmluZz8gKi8KLQotCQlpZiAoIShleHBlY3RlZF9idHlwZXMgJiBBQ1BJX1JUWVBFX1NUUklORykpIHsKLQkJCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CisJaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfSU5URUdFUikgeworCQlzdGF0dXMgPSBhY3BpX25zX2NvbnZlcnRfdG9faW50ZWdlcihyZXR1cm5fb2JqZWN0LCAmbmV3X29iamVjdCk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJZ290byBvYmplY3RfcmVwYWlyZWQ7CiAJCX0KLQotCQkvKgotCQkgKiBIYXZlIGEgQnVmZmVyLCBleHBlY3RlZCBhIFN0cmluZywgY29udmVydC4gVXNlIGEgdG9fc3RyaW5nCi0JCSAqIGNvbnZlcnNpb24sIG5vIHRyYW5zZm9ybSBwZXJmb3JtZWQgb24gdGhlIGJ1ZmZlciBkYXRhLiBUaGUgYmVzdAotCQkgKiBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIF9CSUYgbWV0aG9kLCB3aGVyZSB0aGUgc3RyaW5nIGRhdGEgZnJvbQotCQkgKiB0aGUgYmF0dGVyeSBpcyBvZnRlbiAoaW5jb3JyZWN0bHkpIHJldHVybmVkIGFzIGJ1ZmZlciBvYmplY3QocykuCi0JCSAqLwotCQlsZW5ndGggPSAwOwotCQl3aGlsZSAoKGxlbmd0aCA8IHJldHVybl9vYmplY3QtPmJ1ZmZlci5sZW5ndGgpICYmCi0JCSAgICAgICAocmV0dXJuX29iamVjdC0+YnVmZmVyLnBvaW50ZXJbbGVuZ3RoXSkpIHsKLQkJCWxlbmd0aCsrOwotCQl9Ci0KLQkJLyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLwotCi0JCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9zdHJpbmdfb2JqZWN0KGxlbmd0aCk7Ci0JCWlmICghbmV3X29iamVjdCkgewotCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwotCQl9Ci0KLQkJLyoKLQkJICogQ29weSB0aGUgcmF3IGJ1ZmZlciBkYXRhIHdpdGggbm8gdHJhbnNmb3JtLiBTdHJpbmcgaXMgYWxyZWFkeSBOVUxMCi0JCSAqIHRlcm1pbmF0ZWQgYXQgTGVuZ3RoKzEuCi0JCSAqLwotCQlBQ1BJX01FTUNQWShuZXdfb2JqZWN0LT5zdHJpbmcucG9pbnRlciwKLQkJCSAgICByZXR1cm5fb2JqZWN0LT5idWZmZXIucG9pbnRlciwgbGVuZ3RoKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgotCi0JCS8qIDEpIERvZXMgdGhlIG1ldGhvZC9vYmplY3QgbGVnYWxseSByZXR1cm4gYSBidWZmZXI/ICovCi0KLQkJaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfQlVGRkVSKSB7Ci0JCQkvKgotCQkJICogQ29udmVydCB0aGUgSW50ZWdlciB0byBhIHBhY2tlZC1ieXRlIGJ1ZmZlci4gX01BVCBuZWVkcwotCQkJICogdGhpcyBzb21ldGltZXMsIGlmIGEgcmVhZCBoYXMgYmVlbiBwZXJmb3JtZWQgb24gYSBGaWVsZAotCQkJICogb2JqZWN0IHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnbG9iYWwgaW50ZWdlcgotCQkJICogc2l6ZSAoMzIgb3IgNjQgYml0cykuCi0JCQkgKi8KLQkJCXN0YXR1cyA9Ci0JCQkgICAgYWNwaV9leF9jb252ZXJ0X3RvX2J1ZmZlcihyZXR1cm5fb2JqZWN0LAotCQkJCQkJICAgICAgJm5ld19vYmplY3QpOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuIChzdGF0dXMpOwotCQkJfQotCQl9Ci0KLQkJLyogMikgRG9lcyB0aGUgbWV0aG9kL29iamVjdCBsZWdhbGx5IHJldHVybiBhIHN0cmluZz8gKi8KLQotCQllbHNlIGlmIChleHBlY3RlZF9idHlwZXMgJiBBQ1BJX1JUWVBFX1NUUklORykgewotCQkJLyoKLQkJCSAqIFRoZSBvbmx5IHN1cHBvcnRlZCBJbnRlZ2VyLXRvLVN0cmluZyBjb252ZXJzaW9uIGlzIHRvIGNvbnZlcnQKLQkJCSAqIGFuIGludGVnZXIgb2YgdmFsdWUgMCB0byBhIE5VTEwgc3RyaW5nLiBUaGUgbGFzdCBlbGVtZW50IG9mCi0JCQkgKiBfQklGIGFuZCBfQklYIHBhY2thZ2VzIG9jY2FzaW9uYWxseSBuZWVkIHRoaXMgZml4LgotCQkJICovCi0JCQlpZiAocmV0dXJuX29iamVjdC0+aW50ZWdlci52YWx1ZSAhPSAwKSB7Ci0JCQkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKLQkJCX0KLQotCQkJLyogQWxsb2NhdGUgYSBuZXcgTlVMTCBzdHJpbmcgb2JqZWN0ICovCi0KLQkJCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9zdHJpbmdfb2JqZWN0KDApOwotCQkJaWYgKCFuZXdfb2JqZWN0KSB7Ci0JCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0KLQkJLyogV2UgY2Fubm90IHJlcGFpciB0aGlzIG9iamVjdCAqLwotCi0JCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CiAJfQorCWlmIChleHBlY3RlZF9idHlwZXMgJiBBQ1BJX1JUWVBFX1NUUklORykgeworCQlzdGF0dXMgPSBhY3BpX25zX2NvbnZlcnRfdG9fc3RyaW5nKHJldHVybl9vYmplY3QsICZuZXdfb2JqZWN0KTsKKwkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCQlnb3RvIG9iamVjdF9yZXBhaXJlZDsKKwkJfQorCX0KKwlpZiAoZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9CVUZGRVIpIHsKKwkJc3RhdHVzID0gYWNwaV9uc19jb252ZXJ0X3RvX2J1ZmZlcihyZXR1cm5fb2JqZWN0LCAmbmV3X29iamVjdCk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJZ290byBvYmplY3RfcmVwYWlyZWQ7CisJCX0KKwl9CisJaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfUEFDS0FHRSkgeworCQlzdGF0dXMgPSBhY3BpX25zX2NvbnZlcnRfdG9fcGFja2FnZShyZXR1cm5fb2JqZWN0LCAmbmV3X29iamVjdCk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJZ290byBvYmplY3RfcmVwYWlyZWQ7CisJCX0KKwl9CisKKwkvKiBXZSBjYW5ub3QgcmVwYWlyIHRoaXMgb2JqZWN0ICovCisKKwlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworCisgICAgICBvYmplY3RfcmVwYWlyZWQ6CiAKIAkvKiBPYmplY3Qgd2FzIHN1Y2Nlc3NmdWxseSByZXBhaXJlZCAqLwogCkBAIC0xODUsMTkgKzE3MywxOCBAQAogCQkJcmV0dXJuX29iamVjdC0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudC0tOwogCQl9CiAKLQkJQUNQSV9JTkZPX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAotCQkJCSAgICAgICJDb252ZXJ0ZWQgJXMgdG8gZXhwZWN0ZWQgJXMgYXQgaW5kZXggJXUiLAotCQkJCSAgICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKLQkJCQkgICAgICAocmV0dXJuX29iamVjdCksCi0JCQkJICAgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShuZXdfb2JqZWN0KSwKLQkJCQkgICAgICBwYWNrYWdlX2luZGV4KSk7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAorCQkJCSAgIiVzOiBDb252ZXJ0ZWQgJXMgdG8gZXhwZWN0ZWQgJXMgYXQgaW5kZXggJXVcbiIsCisJCQkJICBkYXRhLT5wYXRobmFtZSwKKwkJCQkgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUocmV0dXJuX29iamVjdCksCisJCQkJICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKG5ld19vYmplY3QpLAorCQkJCSAgcGFja2FnZV9pbmRleCkpOwogCX0gZWxzZSB7Ci0JCUFDUElfSU5GT19QUkVERUZJTkVEKChBRV9JTkZPLCBkYXRhLT5wYXRobmFtZSwgZGF0YS0+bm9kZV9mbGFncywKLQkJCQkgICAgICAiQ29udmVydGVkICVzIHRvIGV4cGVjdGVkICVzIiwKLQkJCQkgICAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lCi0JCQkJICAgICAgKHJldHVybl9vYmplY3QpLAotCQkJCSAgICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKLQkJCQkgICAgICAobmV3X29iamVjdCkpKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9SRVBBSVIsCisJCQkJICAiJXM6IENvbnZlcnRlZCAlcyB0byBleHBlY3RlZCAlc1xuIiwKKwkJCQkgIGRhdGEtPnBhdGhuYW1lLAorCQkJCSAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShyZXR1cm5fb2JqZWN0KSwKKwkJCQkgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUobmV3X29iamVjdCkpKTsKIAl9CiAKIAkvKiBEZWxldGUgb2xkIG9iamVjdCwgaW5zdGFsbCB0aGUgbmV3IHJldHVybiBvYmplY3QgKi8KQEAgLTIxMCw2ICsxOTcsMzE1IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY29udmVydF90b19pbnRlZ2VyCisgKgorICogUEFSQU1FVEVSUzogIG9yaWdpbmFsX29iamVjdCAgICAgLSBPYmplY3QgdG8gYmUgY29udmVydGVkCisgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgICAgICAtIFdoZXJlIHRoZSBuZXcgY29udmVydGVkIG9iamVjdCBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMuIEFFX09LIGlmIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogREVTQ1JJUFRJT046IEF0dGVtcHQgdG8gY29udmVydCBhIFN0cmluZy9CdWZmZXIgb2JqZWN0IHRvIGFuIEludGVnZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX2NvbnZlcnRfdG9faW50ZWdlcih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcmlnaW5hbF9vYmplY3QsCisJCQkgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXdfb2JqZWN0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1NjQgdmFsdWUgPSAwOworCXUzMiBpOworCisJc3dpdGNoIChvcmlnaW5hbF9vYmplY3QtPmNvbW1vbi50eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgorCisJCS8qIFN0cmluZy10by1JbnRlZ2VyIGNvbnZlcnNpb24gKi8KKworCQlzdGF0dXMgPSBhY3BpX3V0X3N0cnRvdWw2NChvcmlnaW5hbF9vYmplY3QtPnN0cmluZy5wb2ludGVyLAorCQkJCQkgICBBQ1BJX0FOWV9CQVNFLCAmdmFsdWUpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKKworCQkvKiBCdWZmZXItdG8tSW50ZWdlciBjb252ZXJzaW9uLiBNYXggYnVmZmVyIHNpemUgaXMgNjQgYml0cy4gKi8KKworCQlpZiAob3JpZ2luYWxfb2JqZWN0LT5idWZmZXIubGVuZ3RoID4gOCkgeworCQkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwkJfQorCisJCS8qIEV4dHJhY3QgZWFjaCBidWZmZXIgYnl0ZSB0byBjcmVhdGUgdGhlIGludGVnZXIgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgb3JpZ2luYWxfb2JqZWN0LT5idWZmZXIubGVuZ3RoOyBpKyspIHsKKwkJCXZhbHVlIHw9CisJCQkgICAgKCh1NjQpIG9yaWdpbmFsX29iamVjdC0+YnVmZmVyLgorCQkJICAgICBwb2ludGVyW2ldIDw8IChpICogOCkpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwl9CisKKwluZXdfb2JqZWN0ID0gYWNwaV91dF9jcmVhdGVfaW50ZWdlcl9vYmplY3QodmFsdWUpOworCWlmICghbmV3X29iamVjdCkgeworCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJfQorCisJKnJldHVybl9vYmplY3QgPSBuZXdfb2JqZWN0OworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NvbnZlcnRfdG9fc3RyaW5nCisgKgorICogUEFSQU1FVEVSUzogIG9yaWdpbmFsX29iamVjdCAgICAgLSBPYmplY3QgdG8gYmUgY29udmVydGVkCisgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgICAgICAtIFdoZXJlIHRoZSBuZXcgY29udmVydGVkIG9iamVjdCBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMuIEFFX09LIGlmIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogREVTQ1JJUFRJT046IEF0dGVtcHQgdG8gY29udmVydCBhIEludGVnZXIvQnVmZmVyIG9iamVjdCB0byBhIFN0cmluZy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY29udmVydF90b19zdHJpbmcodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb3JpZ2luYWxfb2JqZWN0LAorCQkJICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXdfb2JqZWN0OworCWFjcGlfc2l6ZSBsZW5ndGg7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3dpdGNoIChvcmlnaW5hbF9vYmplY3QtPmNvbW1vbi50eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKKwkJLyoKKwkJICogSW50ZWdlci10by1TdHJpbmcgY29udmVyc2lvbi4gQ29tbW9ubHksIGNvbnZlcnQKKwkJICogYW4gaW50ZWdlciBvZiB2YWx1ZSAwIHRvIGEgTlVMTCBzdHJpbmcuIFRoZSBsYXN0IGVsZW1lbnQgb2YKKwkJICogX0JJRiBhbmQgX0JJWCBwYWNrYWdlcyBvY2Nhc2lvbmFsbHkgbmVlZCB0aGlzIGZpeC4KKwkJICovCisJCWlmIChvcmlnaW5hbF9vYmplY3QtPmludGVnZXIudmFsdWUgPT0gMCkgeworCisJCQkvKiBBbGxvY2F0ZSBhIG5ldyBOVUxMIHN0cmluZyBvYmplY3QgKi8KKworCQkJbmV3X29iamVjdCA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QoMCk7CisJCQlpZiAoIW5ld19vYmplY3QpIHsKKwkJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGFjcGlfZXhfY29udmVydF90b19zdHJpbmcob3JpZ2luYWxfb2JqZWN0LAorCQkJCQkJICAgICAgJm5ld19vYmplY3QsCisJCQkJCQkgICAgICBBQ1BJX0lNUExJQ0lUX0NPTlZFUlRfSEVYKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKKwkJLyoKKwkJICogQnVmZmVyLXRvLVN0cmluZyBjb252ZXJzaW9uLiBVc2UgYSB0b19zdHJpbmcKKwkJICogY29udmVyc2lvbiwgbm8gdHJhbnNmb3JtIHBlcmZvcm1lZCBvbiB0aGUgYnVmZmVyIGRhdGEuIFRoZSBiZXN0CisJCSAqIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgX0JJRiBtZXRob2QsIHdoZXJlIHRoZSBzdHJpbmcgZGF0YSBmcm9tCisJCSAqIHRoZSBiYXR0ZXJ5IGlzIG9mdGVuIChpbmNvcnJlY3RseSkgcmV0dXJuZWQgYXMgYnVmZmVyIG9iamVjdChzKS4KKwkJICovCisJCWxlbmd0aCA9IDA7CisJCXdoaWxlICgobGVuZ3RoIDwgb3JpZ2luYWxfb2JqZWN0LT5idWZmZXIubGVuZ3RoKSAmJgorCQkgICAgICAgKG9yaWdpbmFsX29iamVjdC0+YnVmZmVyLnBvaW50ZXJbbGVuZ3RoXSkpIHsKKwkJCWxlbmd0aCsrOworCQl9CisKKwkJLyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLworCisJCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9zdHJpbmdfb2JqZWN0KGxlbmd0aCk7CisJCWlmICghbmV3X29iamVjdCkgeworCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOworCQl9CisKKwkJLyoKKwkJICogQ29weSB0aGUgcmF3IGJ1ZmZlciBkYXRhIHdpdGggbm8gdHJhbnNmb3JtLiBTdHJpbmcgaXMgYWxyZWFkeSBOVUxMCisJCSAqIHRlcm1pbmF0ZWQgYXQgTGVuZ3RoKzEuCisJCSAqLworCQlBQ1BJX01FTUNQWShuZXdfb2JqZWN0LT5zdHJpbmcucG9pbnRlciwKKwkJCSAgICBvcmlnaW5hbF9vYmplY3QtPmJ1ZmZlci5wb2ludGVyLCBsZW5ndGgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CisJfQorCisJKnJldHVybl9vYmplY3QgPSBuZXdfb2JqZWN0OworCXJldHVybiAoQUVfT0spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2NvbnZlcnRfdG9fYnVmZmVyCisgKgorICogUEFSQU1FVEVSUzogIG9yaWdpbmFsX29iamVjdCAgICAgLSBPYmplY3QgdG8gYmUgY29udmVydGVkCisgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgICAgICAtIFdoZXJlIHRoZSBuZXcgY29udmVydGVkIG9iamVjdCBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMuIEFFX09LIGlmIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogREVTQ1JJUFRJT046IEF0dGVtcHQgdG8gY29udmVydCBhIEludGVnZXIvU3RyaW5nL1BhY2thZ2Ugb2JqZWN0IHRvIGEgQnVmZmVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9uc19jb252ZXJ0X3RvX2J1ZmZlcih1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvcmlnaW5hbF9vYmplY3QsCisJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0KQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5ld19vYmplY3Q7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50czsKKwl1MzIgKmR3b3JkX2J1ZmZlcjsKKwl1MzIgY291bnQ7CisJdTMyIGk7CisKKwlzd2l0Y2ggKG9yaWdpbmFsX29iamVjdC0+Y29tbW9uLnR5cGUpIHsKKwljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgorCQkvKgorCQkgKiBJbnRlZ2VyLXRvLUJ1ZmZlciBjb252ZXJzaW9uLgorCQkgKiBDb252ZXJ0IHRoZSBJbnRlZ2VyIHRvIGEgcGFja2VkLWJ5dGUgYnVmZmVyLiBfTUFUIGFuZCBvdGhlcgorCQkgKiBvYmplY3RzIG5lZWQgdGhpcyBzb21ldGltZXMsIGlmIGEgcmVhZCBoYXMgYmVlbiBwZXJmb3JtZWQgb24gYQorCQkgKiBGaWVsZCBvYmplY3QgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdsb2JhbCBpbnRlZ2VyCisJCSAqIHNpemUgKDMyIG9yIDY0IGJpdHMpLgorCQkgKi8KKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfZXhfY29udmVydF90b19idWZmZXIob3JpZ2luYWxfb2JqZWN0LCAmbmV3X29iamVjdCk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgorCisJCS8qIFN0cmluZy10by1CdWZmZXIgY29udmVyc2lvbi4gU2ltcGxlIGRhdGEgY29weSAqLworCisJCW5ld19vYmplY3QgPQorCQkgICAgYWNwaV91dF9jcmVhdGVfYnVmZmVyX29iamVjdChvcmlnaW5hbF9vYmplY3QtPnN0cmluZy4KKwkJCQkJCSBsZW5ndGgpOworCQlpZiAoIW5ld19vYmplY3QpIHsKKwkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKKwkJfQorCisJCUFDUElfTUVNQ1BZKG5ld19vYmplY3QtPmJ1ZmZlci5wb2ludGVyLAorCQkJICAgIG9yaWdpbmFsX29iamVjdC0+c3RyaW5nLnBvaW50ZXIsCisJCQkgICAgb3JpZ2luYWxfb2JqZWN0LT5zdHJpbmcubGVuZ3RoKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgorCQkvKgorCQkgKiBUaGlzIGNhc2UgaXMgb2Z0ZW4gc2VlbiBmb3IgcHJlZGVmaW5lZCBuYW1lcyB0aGF0IG11c3QgcmV0dXJuIGEKKwkJICogQnVmZmVyIG9iamVjdCB3aXRoIG11bHRpcGxlIERXT1JEIGludGVnZXJzIHdpdGhpbi4gRm9yIGV4YW1wbGUsCisJCSAqIF9GREUgYW5kIF9HVE0uIFRoZSBQYWNrYWdlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBCdWZmZXIuCisJCSAqLworCisJCS8qIEFsbCBlbGVtZW50cyBvZiB0aGUgUGFja2FnZSBtdXN0IGJlIGludGVnZXJzICovCisKKwkJZWxlbWVudHMgPSBvcmlnaW5hbF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHM7CisJCWNvdW50ID0gb3JpZ2luYWxfb2JqZWN0LT5wYWNrYWdlLmNvdW50OworCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlpZiAoKCEqZWxlbWVudHMpIHx8CisJCQkgICAgKCgqZWxlbWVudHMpLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKKwkJCQlyZXR1cm4gKEFFX0FNTF9PUEVSQU5EX1RZUEUpOworCQkJfQorCQkJZWxlbWVudHMrKzsKKwkJfQorCisJCS8qIENyZWF0ZSB0aGUgbmV3IGJ1ZmZlciBvYmplY3QgdG8gcmVwbGFjZSB0aGUgUGFja2FnZSAqLworCisJCW5ld19vYmplY3QgPSBhY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0KEFDUElfTVVMXzQoY291bnQpKTsKKwkJaWYgKCFuZXdfb2JqZWN0KSB7CisJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJCX0KKworCQkvKiBDb3B5IHRoZSBwYWNrYWdlIGVsZW1lbnRzIChpbnRlZ2VycykgdG8gdGhlIGJ1ZmZlciBhcyBEV09SRHMgKi8KKworCQllbGVtZW50cyA9IG9yaWdpbmFsX29iamVjdC0+cGFja2FnZS5lbGVtZW50czsKKwkJZHdvcmRfYnVmZmVyID0gQUNQSV9DQVNUX1BUUih1MzIsIG5ld19vYmplY3QtPmJ1ZmZlci5wb2ludGVyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJKmR3b3JkX2J1ZmZlciA9ICh1MzIpICgqZWxlbWVudHMpLT5pbnRlZ2VyLnZhbHVlOworCQkJZHdvcmRfYnVmZmVyKys7CisJCQllbGVtZW50cysrOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwl9CisKKwkqcmV0dXJuX29iamVjdCA9IG5ld19vYmplY3Q7CisJcmV0dXJuIChBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY29udmVydF90b19wYWNrYWdlCisgKgorICogUEFSQU1FVEVSUzogIG9yaWdpbmFsX29iamVjdCAgICAgLSBPYmplY3QgdG8gYmUgY29udmVydGVkCisgKiAgICAgICAgICAgICAgcmV0dXJuX29iamVjdCAgICAgICAtIFdoZXJlIHRoZSBuZXcgY29udmVydGVkIG9iamVjdCBpcyByZXR1cm5lZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMuIEFFX09LIGlmIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogREVTQ1JJUFRJT046IEF0dGVtcHQgdG8gY29udmVydCBhIEJ1ZmZlciBvYmplY3QgdG8gYSBQYWNrYWdlLiBFYWNoIGJ5dGUgb2YKKyAqICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGNvbnZlcnRlZCB0byBhIHNpbmdsZSBpbnRlZ2VyIHBhY2thZ2UgZWxlbWVudC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfY29udmVydF90b19wYWNrYWdlKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9yaWdpbmFsX29iamVjdCwKKwkJCSAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0KQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5ld19vYmplY3Q7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKmVsZW1lbnRzOworCXUzMiBsZW5ndGg7CisJdTggKmJ1ZmZlcjsKKworCXN3aXRjaCAob3JpZ2luYWxfb2JqZWN0LT5jb21tb24udHlwZSkgeworCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKKworCQkvKiBCdWZmZXItdG8tUGFja2FnZSBjb252ZXJzaW9uICovCisKKwkJbGVuZ3RoID0gb3JpZ2luYWxfb2JqZWN0LT5idWZmZXIubGVuZ3RoOworCQluZXdfb2JqZWN0ID0gYWNwaV91dF9jcmVhdGVfcGFja2FnZV9vYmplY3QobGVuZ3RoKTsKKwkJaWYgKCFuZXdfb2JqZWN0KSB7CisJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJCX0KKworCQkvKiBDb252ZXJ0IGVhY2ggYnVmZmVyIGJ5dGUgdG8gYW4gaW50ZWdlciBwYWNrYWdlIGVsZW1lbnQgKi8KKworCQllbGVtZW50cyA9IG5ld19vYmplY3QtPnBhY2thZ2UuZWxlbWVudHM7CisJCWJ1ZmZlciA9IG9yaWdpbmFsX29iamVjdC0+YnVmZmVyLnBvaW50ZXI7CisKKwkJd2hpbGUgKGxlbmd0aC0tKSB7CisJCQkqZWxlbWVudHMgPQorCQkJICAgIGFjcGlfdXRfY3JlYXRlX2ludGVnZXJfb2JqZWN0KCh1NjQpICpidWZmZXIpOworCQkJaWYgKCEqZWxlbWVudHMpIHsKKwkJCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UobmV3X29iamVjdCk7CisJCQkJcmV0dXJuIChBRV9OT19NRU1PUlkpOworCQkJfQorCQkJZWxlbWVudHMrKzsKKwkJCWJ1ZmZlcisrOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwl9CisKKwkqcmV0dXJuX29iamVjdCA9IG5ld19vYmplY3Q7CisJcmV0dXJuIChBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVwYWlyX3BhY2thZ2VfbGlzdAogICoKICAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCkBAIC0yMzgsNiArNTM0LDggQEAKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwa2dfb2JqX2Rlc2M7CiAKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfcmVwYWlyX3BhY2thZ2VfbGlzdCk7CisKIAkvKgogCSAqIENyZWF0ZSB0aGUgbmV3IG91dGVyIHBhY2thZ2UgYW5kIHBvcHVsYXRlIGl0LiBUaGUgbmV3IHBhY2thZ2Ugd2lsbAogCSAqIGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgdGhlIGxvbmUgc3VicGFja2FnZS4KQEAgLTI1NCw4ICs1NTIsOSBAQAogCSpvYmpfZGVzY19wdHIgPSBwa2dfb2JqX2Rlc2M7CiAJZGF0YS0+ZmxhZ3MgfD0gQUNQSV9PQkpFQ1RfUkVQQUlSRUQ7CiAKLQlBQ1BJX0lORk9fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsIGRhdGEtPm5vZGVfZmxhZ3MsCi0JCQkgICAgICAiUmVwYWlyZWQgSW5jb3JyZWN0bHkgZm9ybWVkIFBhY2thZ2UiKSk7CisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9SRVBBSVIsCisJCQkgICIlczogUmVwYWlyZWQgaW5jb3JyZWN0bHkgZm9ybWVkIFBhY2thZ2VcbiIsCisJCQkgIGRhdGEtPnBhdGhuYW1lKSk7CiAKIAlyZXR1cm4gKEFFX09LKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCmluZGV4IGQwN2I2ODYuLmYxMzY5MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgImFjY29tbW9uLmgiCiAjaW5jbHVkZSAiYWNuYW1lc3AuaCIKKyNpbmNsdWRlICJhY3ByZWRlZi5oIgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zcmVwYWlyMiIpCkBAIC03NCw2ICs3NSwxMCBAQAogCQkgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIpOwogCiBzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfbnNfcmVwYWlyX0ZERShzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCSAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKipyZXR1cm5fb2JqZWN0X3B0cik7CisKK3N0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19yZXBhaXJfUFNTKHN0cnVjdCBhY3BpX3ByZWRlZmluZWRfZGF0YSAqZGF0YSwKIAkJICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnJldHVybl9vYmplY3RfcHRyKTsKIApAQCAtODksOSArOTQsNiBAQAogCQkJICB1OCBzb3J0X2RpcmVjdGlvbiwgY2hhciAqc29ydF9rZXlfbmFtZSk7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cwotYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwYWNrYWdlKTsKLQotc3RhdGljIGFjcGlfc3RhdHVzCiBhY3BpX25zX3NvcnRfbGlzdCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZWxlbWVudHMsCiAJCSAgdTMyIGNvdW50LCB1MzIgaW5kZXgsIHU4IHNvcnRfZGlyZWN0aW9uKTsKIApAQCAtMTA0LDE3ICsxMDYsMjcgQEAKICAqIFRoaXMgdGFibGUgY29udGFpbnMgdGhlIG5hbWVzIG9mIHRoZSBwcmVkZWZpbmVkIG1ldGhvZHMgZm9yIHdoaWNoIHdlIGNhbgogICogcGVyZm9ybSBtb3JlIGNvbXBsZXggcmVwYWlycy4KICAqCi0gKiBfQUxSOiBTb3J0IHRoZSBsaXN0IGFzY2VuZGluZyBieSBhbWJpZW50X2lsbHVtaW5hbmNlIGlmIG5lY2Vzc2FyeQotICogX1BTUzogU29ydCB0aGUgbGlzdCBkZXNjZW5kaW5nIGJ5IFBvd2VyIGlmIG5lY2Vzc2FyeQotICogX1RTUzogU29ydCB0aGUgbGlzdCBkZXNjZW5kaW5nIGJ5IFBvd2VyIGlmIG5lY2Vzc2FyeQorICogQXMgbmVjZXNzYXJ5OgorICoKKyAqIF9BTFI6IFNvcnQgdGhlIGxpc3QgYXNjZW5kaW5nIGJ5IGFtYmllbnRfaWxsdW1pbmFuY2UKKyAqIF9GREU6IENvbnZlcnQgQnVmZmVyIG9mIEJZVEVzIHRvIGEgQnVmZmVyIG9mIERXT1JEcworICogX0dUTTogQ29udmVydCBCdWZmZXIgb2YgQllURXMgdG8gYSBCdWZmZXIgb2YgRFdPUkRzCisgKiBfUFNTOiBTb3J0IHRoZSBsaXN0IGRlc2NlbmRpbmcgYnkgUG93ZXIKKyAqIF9UU1M6IFNvcnQgdGhlIGxpc3QgZGVzY2VuZGluZyBieSBQb3dlcgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfcmVwYWlyX2luZm8gYWNwaV9uc19yZXBhaXJhYmxlX25hbWVzW10gPSB7CiAJeyJfQUxSIiwgYWNwaV9uc19yZXBhaXJfQUxSfSwKKwl7Il9GREUiLCBhY3BpX25zX3JlcGFpcl9GREV9LAorCXsiX0dUTSIsIGFjcGlfbnNfcmVwYWlyX0ZERX0sCS8qIF9HVE0gaGFzIHNhbWUgcmVwYWlyIGFzIF9GREUgKi8KIAl7Il9QU1MiLCBhY3BpX25zX3JlcGFpcl9QU1N9LAogCXsiX1RTUyIsIGFjcGlfbnNfcmVwYWlyX1RTU30sCiAJe3swLCAwLCAwLCAwfSwgTlVMTH0JLyogVGFibGUgdGVybWluYXRvciAqLwogfTsKIAorI2RlZmluZSBBQ1BJX0ZERV9GSUVMRF9DT1VOVCAgICAgICAgNQorI2RlZmluZSBBQ1BJX0ZERV9CWVRFX0JVRkZFUl9TSVpFICAgNQorI2RlZmluZSBBQ1BJX0ZERV9EV09SRF9CVUZGRVJfU0laRSAgKEFDUElfRkRFX0ZJRUxEX0NPVU5UICogc2l6ZW9mICh1MzIpKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY29tcGxleF9yZXBhaXJzCkBAIC0yMTUsNiArMjI3LDk0IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfRkRFCisgKgorICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICByZXR1cm5fb2JqZWN0X3B0ciAgIC0gUG9pbnRlciB0byB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb24gb2YgYSBtZXRob2Qgb3Igb2JqZWN0CisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cy4gQUVfT0sgaWYgb2JqZWN0IGlzIE9LIG9yIHdhcyByZXBhaXJlZCBzdWNjZXNzZnVsbHkKKyAqCisgKiBERVNDUklQVElPTjogUmVwYWlyIGZvciB0aGUgX0ZERSBhbmQgX0dUTSBvYmplY3RzLiBUaGUgZXhwZWN0ZWQgcmV0dXJuCisgKiAgICAgICAgICAgICAgdmFsdWUgaXMgYSBCdWZmZXIgb2YgNSBEV09SRHMuIFRoaXMgZnVuY3Rpb24gcmVwYWlycyBhIGNvbW1vbgorICogICAgICAgICAgICAgIHByb2JsZW0gd2hlcmUgdGhlIHJldHVybiB2YWx1ZSBpcyBhIEJ1ZmZlciBvZiBCWVRFcywgbm90CisgKiAgICAgICAgICAgICAgRFdPUkRzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX25zX3JlcGFpcl9GREUoc3RydWN0IGFjcGlfcHJlZGVmaW5lZF9kYXRhICpkYXRhLAorCQkgICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iamVjdF9wdHIpCit7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcmV0dXJuX29iamVjdCA9ICpyZXR1cm5fb2JqZWN0X3B0cjsKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpidWZmZXJfb2JqZWN0OworCXU4ICpieXRlX2J1ZmZlcjsKKwl1MzIgKmR3b3JkX2J1ZmZlcjsKKwl1MzIgaTsKKworCUFDUElfRlVOQ1RJT05fTkFNRShuc19yZXBhaXJfRkRFKTsKKworCXN3aXRjaCAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUpIHsKKwljYXNlIEFDUElfVFlQRV9CVUZGRVI6CisKKwkJLyogVGhpcyBpcyB0aGUgZXhwZWN0ZWQgdHlwZS4gTGVuZ3RoIHNob3VsZCBiZSAoYXQgbGVhc3QpIDUgRFdPUkRzICovCisKKwkJaWYgKHJldHVybl9vYmplY3QtPmJ1ZmZlci5sZW5ndGggPj0gQUNQSV9GREVfRFdPUkRfQlVGRkVSX1NJWkUpIHsKKwkJCXJldHVybiAoQUVfT0spOworCQl9CisKKwkJLyogV2UgY2FuIG9ubHkgcmVwYWlyIGlmIHdlIGhhdmUgZXhhY3RseSA1IEJZVEVzICovCisKKwkJaWYgKHJldHVybl9vYmplY3QtPmJ1ZmZlci5sZW5ndGggIT0gQUNQSV9GREVfQllURV9CVUZGRVJfU0laRSkgeworCQkJQUNQSV9XQVJOX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLAorCQkJCQkgICAgICBkYXRhLT5ub2RlX2ZsYWdzLAorCQkJCQkgICAgICAiSW5jb3JyZWN0IHJldHVybiBidWZmZXIgbGVuZ3RoICV1LCBleHBlY3RlZCAldSIsCisJCQkJCSAgICAgIHJldHVybl9vYmplY3QtPmJ1ZmZlci5sZW5ndGgsCisJCQkJCSAgICAgIEFDUElfRkRFX0RXT1JEX0JVRkZFUl9TSVpFKSk7CisKKwkJCXJldHVybiAoQUVfQU1MX09QRVJBTkRfVFlQRSk7CisJCX0KKworCQkvKiBDcmVhdGUgdGhlIG5ldyAobGFyZ2VyKSBidWZmZXIgb2JqZWN0ICovCisKKwkJYnVmZmVyX29iamVjdCA9CisJCSAgICBhY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0KEFDUElfRkRFX0RXT1JEX0JVRkZFUl9TSVpFKTsKKwkJaWYgKCFidWZmZXJfb2JqZWN0KSB7CisJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CisJCX0KKworCQkvKiBFeHBhbmQgZWFjaCBieXRlIHRvIGEgRFdPUkQgKi8KKworCQlieXRlX2J1ZmZlciA9IHJldHVybl9vYmplY3QtPmJ1ZmZlci5wb2ludGVyOworCQlkd29yZF9idWZmZXIgPQorCQkgICAgQUNQSV9DQVNUX1BUUih1MzIsIGJ1ZmZlcl9vYmplY3QtPmJ1ZmZlci5wb2ludGVyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9GREVfRklFTERfQ09VTlQ7IGkrKykgeworCQkJKmR3b3JkX2J1ZmZlciA9ICh1MzIpICpieXRlX2J1ZmZlcjsKKwkJCWR3b3JkX2J1ZmZlcisrOworCQkJYnl0ZV9idWZmZXIrKzsKKwkJfQorCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAorCQkJCSAgIiVzIEV4cGFuZGVkIEJ5dGUgQnVmZmVyIHRvIGV4cGVjdGVkIERXb3JkIEJ1ZmZlclxuIiwKKwkJCQkgIGRhdGEtPnBhdGhuYW1lKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIChBRV9BTUxfT1BFUkFORF9UWVBFKTsKKwl9CisKKwkvKiBEZWxldGUgdGhlIG9yaWdpbmFsIHJldHVybiBvYmplY3QsIHJldHVybiB0aGUgbmV3IGJ1ZmZlciBvYmplY3QgKi8KKworCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShyZXR1cm5fb2JqZWN0KTsKKwkqcmV0dXJuX29iamVjdF9wdHIgPSBidWZmZXJfb2JqZWN0OworCisJZGF0YS0+ZmxhZ3MgfD0gQUNQSV9PQkpFQ1RfUkVQQUlSRUQ7CisJcmV0dXJuIChBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9uc19yZXBhaXJfVFNTCiAgKgogICogUEFSQU1FVEVSUzogIERhdGEgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHZhbGlkYXRpb24gZGF0YSBzdHJ1Y3R1cmUKQEAgLTM0NSw2ICs0NDUsOCBAQAogCXUzMiBwcmV2aW91c192YWx1ZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKKwlBQ1BJX0ZVTkNUSU9OX05BTUUobnNfY2hlY2tfc29ydGVkX2xpc3QpOworCiAJLyogVGhlIHRvcC1sZXZlbCBvYmplY3QgbXVzdCBiZSBhIHBhY2thZ2UgKi8KIAogCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgewpAQCAtMzUyLDI0ICs0NTQsMTAgQEAKIAl9CiAKIAkvKgotCSAqIERldGVjdCBhbnkgTlVMTCBwYWNrYWdlIGVsZW1lbnRzIGFuZCByZW1vdmUgdGhlbSBmcm9tIHRoZQotCSAqIHBhY2thZ2UuCi0JICoKLQkgKiBUQkQ6IFdlIG1heSB3YW50IHRvIGRvIHRoaXMgZm9yIGFsbCBwcmVkZWZpbmVkIG5hbWVzIHRoYXQKLQkgKiByZXR1cm4gYSB2YXJpYWJsZS1sZW5ndGggcGFja2FnZSBvZiBwYWNrYWdlcy4KKwkgKiBOT1RFOiBhc3N1bWVzIGxpc3Qgb2Ygc3ViLXBhY2thZ2VzIGNvbnRhaW5zIG5vIE5VTEwgZWxlbWVudHMuCisJICogQW55IE5VTEwgZWxlbWVudHMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJ5IGVhcmxpZXIgY2FsbAorCSAqIHRvIGFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMuCiAJICovCi0Jc3RhdHVzID0gYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhyZXR1cm5fb2JqZWN0KTsKLQlpZiAoc3RhdHVzID09IEFFX05VTExfRU5UUlkpIHsKLQkJQUNQSV9JTkZPX1BSRURFRklORUQoKEFFX0lORk8sIGRhdGEtPnBhdGhuYW1lLCBkYXRhLT5ub2RlX2ZsYWdzLAotCQkJCSAgICAgICJOVUxMIGVsZW1lbnRzIHJlbW92ZWQgZnJvbSBwYWNrYWdlIikpOwotCi0JCS8qIEV4aXQgaWYgcGFja2FnZSBpcyBub3cgemVybyBsZW5ndGggKi8KLQotCQlpZiAoIXJldHVybl9vYmplY3QtPnBhY2thZ2UuY291bnQpIHsKLQkJCXJldHVybiAoQUVfTlVMTF9FTlRSWSk7Ci0JCX0KLQl9Ci0KIAlvdXRlcl9lbGVtZW50cyA9IHJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHM7CiAJb3V0ZXJfZWxlbWVudF9jb3VudCA9IHJldHVybl9vYmplY3QtPnBhY2thZ2UuY291bnQ7CiAJaWYgKCFvdXRlcl9lbGVtZW50X2NvdW50KSB7CkBAIC00MjIsMTAgKzUxMCw5IEBACiAKIAkJCWRhdGEtPmZsYWdzIHw9IEFDUElfT0JKRUNUX1JFUEFJUkVEOwogCi0JCQlBQ1BJX0lORk9fUFJFREVGSU5FRCgoQUVfSU5GTywgZGF0YS0+cGF0aG5hbWUsCi0JCQkJCSAgICAgIGRhdGEtPm5vZGVfZmxhZ3MsCi0JCQkJCSAgICAgICJSZXBhaXJlZCB1bnNvcnRlZCBsaXN0IC0gbm93IHNvcnRlZCBieSAlcyIsCi0JCQkJCSAgICAgIHNvcnRfa2V5X25hbWUpKTsKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUkVQQUlSLAorCQkJCQkgICIlczogUmVwYWlyZWQgdW5zb3J0ZWQgbGlzdCAtIG5vdyBzb3J0ZWQgYnkgJXNcbiIsCisJCQkJCSAgZGF0YS0+cGF0aG5hbWUsIHNvcnRfa2V5X25hbWUpKTsKIAkJCXJldHVybiAoQUVfT0spOwogCQl9CiAKQEAgLTQ0MCwzNiArNTI3LDYzIEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfcmVtb3ZlX251bGxfZWxlbWVudHMKICAqCi0gKiBQQVJBTUVURVJTOiAgb2JqX2Rlc2MgICAgICAgICAgICAtIEEgUGFja2FnZSBvYmplY3QKKyAqIFBBUkFNRVRFUlM6ICBEYXRhICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB2YWxpZGF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgcGFja2FnZV90eXBlICAgICAgICAtIEFuIGFjcGlfcmV0dXJuX3BhY2thZ2VfdHlwZXMgdmFsdWUKKyAqICAgICAgICAgICAgICBvYmpfZGVzYyAgICAgICAgICAgIC0gQSBQYWNrYWdlIG9iamVjdAogICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMuIEFFX05VTExfRU5UUlkgbWVhbnMgdGhhdCBvbmUgb3IgbW9yZSBlbGVtZW50cyB3ZXJlCi0gKiAgICAgICAgICAgICAgcmVtb3ZlZC4KKyAqIFJFVFVSTjogICAgICBOb25lLgogICoKLSAqIERFU0NSSVBUSU9OOiBSZW1vdmUgYWxsIE5VTEwgcGFja2FnZSBlbGVtZW50cyBhbmQgdXBkYXRlIHRoZSBwYWNrYWdlIGNvdW50LgorICogREVTQ1JJUFRJT046IFJlbW92ZSBhbGwgTlVMTCBwYWNrYWdlIGVsZW1lbnRzIGZyb20gcGFja2FnZXMgdGhhdCBjb250YWluCisgKiAgICAgICAgICAgICAgYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX25zX3JlbW92ZV9udWxsX2VsZW1lbnRzKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKQordm9pZAorYWNwaV9uc19yZW1vdmVfbnVsbF9lbGVtZW50cyhzdHJ1Y3QgYWNwaV9wcmVkZWZpbmVkX2RhdGEgKmRhdGEsCisJCQkgICAgIHU4IHBhY2thZ2VfdHlwZSwKKwkJCSAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpCiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnNvdXJjZTsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqZGVzdDsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1MzIgY291bnQ7CiAJdTMyIG5ld19jb3VudDsKIAl1MzIgaTsKIAorCUFDUElfRlVOQ1RJT05fTkFNRShuc19yZW1vdmVfbnVsbF9lbGVtZW50cyk7CisKKwkvKgorCSAqIFBUWVBFMSBwYWNrYWdlcyBjb250YWluIG5vIHN1YnBhY2thZ2VzLgorCSAqIFBUWVBFMiBwYWNrYWdlcyBjb250YWluIGEgdmFyaWFibGUgbnVtYmVyIG9mIHN1Yi1wYWNrYWdlcy4gV2UgY2FuCisJICogc2FmZWx5IHJlbW92ZSBhbGwgTlVMTCBlbGVtZW50cyBmcm9tIHRoZSBQVFlQRTIgcGFja2FnZXMuCisJICovCisJc3dpdGNoIChwYWNrYWdlX3R5cGUpIHsKKwljYXNlIEFDUElfUFRZUEUxX0ZJWEVEOgorCWNhc2UgQUNQSV9QVFlQRTFfVkFSOgorCWNhc2UgQUNQSV9QVFlQRTFfT1BUSU9OOgorCQlyZXR1cm47CisKKwljYXNlIEFDUElfUFRZUEUyOgorCWNhc2UgQUNQSV9QVFlQRTJfQ09VTlQ6CisJY2FzZSBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6CisJY2FzZSBBQ1BJX1BUWVBFMl9GSVhFRDoKKwljYXNlIEFDUElfUFRZUEUyX01JTjoKKwljYXNlIEFDUElfUFRZUEUyX1JFVl9GSVhFRDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCiAJY291bnQgPSBvYmpfZGVzYy0+cGFja2FnZS5jb3VudDsKIAluZXdfY291bnQgPSBjb3VudDsKIAogCXNvdXJjZSA9IG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzOwogCWRlc3QgPSBzb3VyY2U7CiAKLQkvKiBFeGFtaW5lIGFsbCBlbGVtZW50cyBvZiB0aGUgcGFja2FnZSBvYmplY3QgKi8KKwkvKiBFeGFtaW5lIGFsbCBlbGVtZW50cyBvZiB0aGUgcGFja2FnZSBvYmplY3QsIHJlbW92ZSBudWxscyAqLwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKCEqc291cmNlKSB7Ci0JCQlzdGF0dXMgPSBBRV9OVUxMX0VOVFJZOwogCQkJbmV3X2NvdW50LS07CiAJCX0gZWxzZSB7CiAJCQkqZGVzdCA9ICpzb3VyY2U7CkBAIC00NzgsMTUgKzU5MiwxOCBAQAogCQlzb3VyY2UrKzsKIAl9CiAKLQlpZiAoc3RhdHVzID09IEFFX05VTExfRU5UUlkpIHsKKwkvKiBVcGRhdGUgcGFyZW50IHBhY2thZ2UgaWYgYW55IG51bGwgZWxlbWVudHMgd2VyZSByZW1vdmVkICovCisKKwlpZiAobmV3X2NvdW50IDwgY291bnQpIHsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9SRVBBSVIsCisJCQkJICAiJXM6IEZvdW5kIGFuZCByZW1vdmVkICV1IE5VTEwgZWxlbWVudHNcbiIsCisJCQkJICBkYXRhLT5wYXRobmFtZSwgKGNvdW50IC0gbmV3X2NvdW50KSkpOwogCiAJCS8qIE5VTEwgdGVybWluYXRlIGxpc3QgYW5kIHVwZGF0ZSB0aGUgcGFja2FnZSBjb3VudCAqLwogCiAJCSpkZXN0ID0gTlVMTDsKIAkJb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQgPSBuZXdfY291bnQ7CiAJfQotCi0JcmV0dXJuIChzdGF0dXMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCmluZGV4IGVhNTVhYjQuLjQ3ZDkxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCkBAIC02NzEsMjQgKzY3MSwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZQorICogRlVOQ1RJT046ICAgIGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlCiAgKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIEhhbmRsZSB0byBiZSBjb252ZXJ0ZWQgdG8gYW4gTm9kZQorICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIEhhbmRsZSB0byBiZSB2YWxpZGF0ZWQgYW5kIHR5cGVjYXN0IHRvIGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2Ugbm9kZS4KICAqCi0gKiBSRVRVUk46ICAgICAgQSBOYW1lIHRhYmxlIGVudHJ5IHBvaW50ZXIKKyAqIFJFVFVSTjogICAgICBBIHBvaW50ZXIgdG8gYSBuYW1lc3BhY2Ugbm9kZQogICoKLSAqIERFU0NSSVBUSU9OOiBDb252ZXJ0IGEgbmFtZXNwYWNlIGhhbmRsZSB0byBhIHJlYWwgTm9kZQorICogREVTQ1JJUFRJT046IENvbnZlcnQgYSBuYW1lc3BhY2UgaGFuZGxlIHRvIGEgbmFtZXNwYWNlIG5vZGUuIEhhbmRsZXMgc3BlY2lhbAorICogICAgICAgICAgICAgIGNhc2VzIGZvciB0aGUgcm9vdCBub2RlLgogICoKLSAqIE5vdGU6IFJlYWwgaW50ZWdlciBoYW5kbGVzIHdvdWxkIGFsbG93IGZvciBtb3JlIHZlcmlmaWNhdGlvbgorICogTk9URTogUmVhbCBpbnRlZ2VyIGhhbmRsZXMgd291bGQgYWxsb3cgZm9yIG1vcmUgdmVyaWZpY2F0aW9uCiAgKiAgICAgICBhbmQga2VlcCBhbGwgcG9pbnRlcnMgd2l0aGluIHRoaXMgc3Vic3lzdGVtIC0gaG93ZXZlciB0aGlzIGludHJvZHVjZXMKLSAqICAgICAgIG1vcmUgKGFuZCBwZXJoYXBzIHVubmVjZXNzYXJ5KSBvdmVyaGVhZC4KLSAqCi0gKiBUaGUgY3VycmVudCBpbXBsZW1lbmF0aW9uIGlzIGJhc2ljYWxseSBhIHBsYWNlaG9sZGVyIHVudGlsIHN1Y2ggdGltZSBjb21lcwotICogdGhhdCBpdCBpcyBuZWVkZWQuCisgKiAgICAgICBtb3JlIG92ZXJoZWFkIGFuZCBoYXMgbm90IGJlZW4gbmVjZXNzYXJ5IHRvIHRoaXMgcG9pbnQuIERyaXZlcnMKKyAqICAgICAgIGhvbGRpbmcgaGFuZGxlcyBhcmUgdHlwaWNhbGx5IG5vdGlmaWVkIGJlZm9yZSBhIG5vZGUgYmVjb21lcyBpbnZhbGlkCisgKiAgICAgICBkdWUgdG8gYSB0YWJsZSB1bmxvYWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3N0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CkBAIC03MTAsNDIgKzcxMSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfY29udmVydF9lbnRyeV90b19oYW5kbGUKLSAqCi0gKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAgICAtIE5vZGUgdG8gYmUgY29udmVydGVkIHRvIGEgSGFuZGxlCi0gKgotICogUkVUVVJOOiAgICAgIEEgdXNlciBoYW5kbGUKLSAqCi0gKiBERVNDUklQVElPTjogQ29udmVydCBhIHJlYWwgTm9kZSB0byBhIG5hbWVzcGFjZSBoYW5kbGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX2hhbmRsZSBhY3BpX25zX2NvbnZlcnRfZW50cnlfdG9faGFuZGxlKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlKQotewotCi0JLyoKLQkgKiBTaW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIG5vdzsKLQkgKi8KLQlyZXR1cm4gKChhY3BpX2hhbmRsZSkgbm9kZSk7Ci0KLS8qIEV4YW1wbGUgZnV0dXJlIGltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JaWYgKCFOb2RlKQotCXsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlpZiAoTm9kZSA9PSBhY3BpX2dibF9yb290X25vZGUpCi0JewotCQlyZXR1cm4gKEFDUElfUk9PVF9PQkpFQ1QpOwotCX0KLQotCXJldHVybiAoKGFjcGlfaGFuZGxlKSBOb2RlKTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfbnNfdGVybWluYXRlCiAgKgogICogUEFSQU1FVEVSUzogIG5vbmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYwppbmRleCBmMmJkMWRhLi5mMGMwODkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAogCS8qIENvbnZlcnQgYW5kIHZhbGlkYXRlIHRoZSBkZXZpY2UgaGFuZGxlICovCiAKLQlpbmZvLT5wcmVmaXhfbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGhhbmRsZSk7CisJaW5mby0+cHJlZml4X25vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShoYW5kbGUpOwogCWlmICghaW5mby0+cHJlZml4X25vZGUpIHsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJZ290byBjbGVhbnVwOwpAQCAtNTUyLDcgKzU1Miw3IEBACiAJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUob2JqX2hhbmRsZSk7CisJbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKG9ial9oYW5kbGUpOwogCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm4gKHN0YXR1cyk7CkBAIC03MjksNyArNzI5LDcgQEAKIAogCS8qIENvbnZlcnQgYW5kIHZhbGlkYXRlIHRoZSBoYW5kbGUgKi8KIAotCW5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShvYmpfaGFuZGxlKTsKKwlub2RlID0gYWNwaV9uc192YWxpZGF0ZV9oYW5kbGUob2JqX2hhbmRsZSk7CiAJaWYgKCFub2RlKSB7CiAJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwpAQCAtNzc1LDcgKzc3NSw3IEBACiAKIAkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgaGFuZGxlICovCiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUob2JqX2hhbmRsZSk7CisJbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKG9ial9oYW5kbGUpOwogCWlmICghbm9kZSkgewogCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKQEAgLTgyMiw3ICs4MjIsNyBAQAogCiAJLyogQ29udmVydCBhbmQgdmFsaWRhdGUgdGhlIGhhbmRsZSAqLwogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKG9ial9oYW5kbGUpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShvYmpfaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKaW5kZXggZGRjODRhZi4uZTYxMWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYwpAQCAtOTMsNyArOTMsNyBAQAogCS8qIENvbnZlcnQgYSBwYXJlbnQgaGFuZGxlIHRvIGEgcHJlZml4IG5vZGUgKi8KIAogCWlmIChwYXJlbnQpIHsKLQkJcHJlZml4X25vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShwYXJlbnQpOworCQlwcmVmaXhfbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKHBhcmVudCk7CiAJCWlmICghcHJlZml4X25vZGUpIHsKIAkJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJCX0KQEAgLTExNCw3ICsxMTQsNyBAQAogCiAJCWlmICghQUNQSV9TVFJDTVAocGF0aG5hbWUsIEFDUElfTlNfUk9PVF9QQVRIKSkgewogCQkJKnJldF9oYW5kbGUgPQotCQkJICAgIGFjcGlfbnNfY29udmVydF9lbnRyeV90b19oYW5kbGUoYWNwaV9nYmxfcm9vdF9ub2RlKTsKKwkJCSAgICBBQ1BJX0NBU1RfUFRSKGFjcGlfaGFuZGxlLCBhY3BpX2dibF9yb290X25vZGUpOwogCQkJcmV0dXJuIChBRV9PSyk7CiAJCX0KIAl9IGVsc2UgaWYgKCFwcmVmaXhfbm9kZSkgewpAQCAtMTI5LDcgKzEyOSw3IEBACiAJc3RhdHVzID0KIAkgICAgYWNwaV9uc19nZXRfbm9kZShwcmVmaXhfbm9kZSwgcGF0aG5hbWUsIEFDUElfTlNfTk9fVVBTRUFSQ0gsICZub2RlKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJKnJldF9oYW5kbGUgPSBhY3BpX25zX2NvbnZlcnRfZW50cnlfdG9faGFuZGxlKG5vZGUpOworCQkqcmV0X2hhbmRsZSA9IEFDUElfQ0FTVF9QVFIoYWNwaV9oYW5kbGUsIG5vZGUpOwogCX0KIAogCXJldHVybiAoc3RhdHVzKTsKQEAgLTE4Niw3ICsxODYsNyBAQAogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGhhbmRsZSk7CisJbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKGhhbmRsZSk7CiAJaWYgKCFub2RlKSB7CiAJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUoaGFuZGxlKTsKKwlub2RlID0gYWNwaV9uc192YWxpZGF0ZV9oYW5kbGUoaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKIAkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCmluZGV4IDQwNzFiYWQuLjBjYzZiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgaGFuZGxlICovCiAKLQlub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUoaGFuZGxlKTsKKwlub2RlID0gYWNwaV9uc192YWxpZGF0ZV9oYW5kbGUoaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKIAkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CkBAIC0xMzIsNyArMTMyLDcgQEAKIAogCS8qIENvbnZlcnQgYW5kIHZhbGlkYXRlIHRoZSBoYW5kbGUgKi8KIAotCW5vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShoYW5kbGUpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShoYW5kbGUpOwogCWlmICghbm9kZSkgewogCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJLyogQ29udmVydCBhbmQgdmFsaWRhdGUgdGhlIGhhbmRsZSAqLwogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGhhbmRsZSk7CisJbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKGhhbmRsZSk7CiAJaWYgKCFub2RlKSB7CiAJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJLyogR2V0IHRoZSBwYXJlbnQgZW50cnkgKi8KIAogCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSk7Ci0JKnJldF9oYW5kbGUgPSBhY3BpX25zX2NvbnZlcnRfZW50cnlfdG9faGFuZGxlKHBhcmVudF9ub2RlKTsKKwkqcmV0X2hhbmRsZSA9IEFDUElfQ0FTVF9QVFIoYWNwaV9oYW5kbGUsIHBhcmVudF9ub2RlKTsKIAogCS8qIFJldHVybiBleGNlcHRpb24gaWYgcGFyZW50IGlzIG51bGwgKi8KIApAQCAtMjUxLDcgKzI1MSw3IEBACiAKIAkJLyogU3RhcnQgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmllZCBzY29wZSAqLwogCi0JCXBhcmVudF9ub2RlID0gYWNwaV9uc19tYXBfaGFuZGxlX3RvX25vZGUocGFyZW50KTsKKwkJcGFyZW50X25vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShwYXJlbnQpOwogCQlpZiAoIXBhcmVudF9ub2RlKSB7CiAJCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CkBAIC0yNjAsNyArMjYwLDcgQEAKIAkJLyogTm9uLW51bGwgaGFuZGxlLCBpZ25vcmUgdGhlIHBhcmVudCAqLwogCQkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgaGFuZGxlICovCiAKLQkJY2hpbGRfbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGNoaWxkKTsKKwkJY2hpbGRfbm9kZSA9IGFjcGlfbnNfdmFsaWRhdGVfaGFuZGxlKGNoaWxkKTsKIAkJaWYgKCFjaGlsZF9ub2RlKSB7CiAJCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CkBAIC0yNzYsNyArMjc2LDcgQEAKIAl9CiAKIAlpZiAocmV0X2hhbmRsZSkgewotCQkqcmV0X2hhbmRsZSA9IGFjcGlfbnNfY29udmVydF9lbnRyeV90b19oYW5kbGUobm9kZSk7CisJCSpyZXRfaGFuZGxlID0gQUNQSV9DQVNUX1BUUihhY3BpX2hhbmRsZSwgbm9kZSk7CiAJfQogCiAgICAgICB1bmxvY2tfYW5kX2V4aXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzeGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCmluZGV4IDEyOTM0YWQuLmQwYzFiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCkBAIC0yODcsNyArMjg3LDggQEAKIAkvKiBJbnZva2UgYW4gaW50ZXJuYWwgbWV0aG9kIGlmIG5lY2Vzc2FyeSAqLwogCiAJaWYgKGluZm8tPm9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzICYgQU1MX01FVEhPRF9JTlRFUk5BTF9PTkxZKSB7Ci0JCXN0YXR1cyA9IGluZm8tPm9ial9kZXNjLT5tZXRob2QuaW1wbGVtZW50YXRpb24od2Fsa19zdGF0ZSk7CisJCXN0YXR1cyA9CisJCSAgICBpbmZvLT5vYmpfZGVzYy0+bWV0aG9kLmV4dHJhLmltcGxlbWVudGF0aW9uKHdhbGtfc3RhdGUpOwogCQlpbmZvLT5yZXR1cm5fb2JqZWN0ID0gd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2M7CiAKIAkJLyogQ2xlYW51cCBzdGF0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMKaW5kZXggMzk1MjEyYi4uZjI3ZmViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3hmYWNlLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0Jbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGRldmljZV9oYW5kbGUpOworCW5vZGUgPSBhY3BpX25zX3ZhbGlkYXRlX2hhbmRsZShkZXZpY2VfaGFuZGxlKTsKIAlpZiAoIW5vZGUpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCmluZGV4IDBmMGM2NGIuLmY4NTdjNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYwpAQCAtMzIzLDExICszMjMsMTEgQEAKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcGxhY2UgYSBwYWNrYWdlIG9iamVjdCBpbiBhIHVzZXIKLSAqICAgICAgICAgICAgICBidWZmZXIuICBBIHBhY2thZ2Ugb2JqZWN0IGJ5IGRlZmluaXRpb24gY29udGFpbnMgb3RoZXIgb2JqZWN0cy4KKyAqICAgICAgICAgICAgICBidWZmZXIuIEEgcGFja2FnZSBvYmplY3QgYnkgZGVmaW5pdGlvbiBjb250YWlucyBvdGhlciBvYmplY3RzLgogICoKICAqICAgICAgICAgICAgICBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gaGF2ZSBzdWZmaWNpZW50IHNwYWNlIGZvciB0aGUgb2JqZWN0LgotICogICAgICAgICAgICAgIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHZlcmlmaWVkIHRoZSBidWZmZXIgbGVuZ3RoIG5lZWRlZCB1c2luZyB0aGUKLSAqICAgICAgICAgICAgICBhY3BpX3V0X2dldF9vYmplY3Rfc2l6ZSBmdW5jdGlvbiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICogICAgICAgICAgICAgIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHZlcmlmaWVkIHRoZSBidWZmZXIgbGVuZ3RoIG5lZWRlZCB1c2luZworICogICAgICAgICAgICAgIHRoZSBhY3BpX3V0X2dldF9vYmplY3Rfc2l6ZSBmdW5jdGlvbiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTM4MiwxMiArMzgyLDEyIEBACiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9jb3B5X2lvYmplY3RfdG9fZW9iamVjdAogICoKICAqIFBBUkFNRVRFUlM6ICBpbnRlcm5hbF9vYmplY3QgICAgIC0gVGhlIGludGVybmFsIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQKLSAqICAgICAgICAgICAgICBidWZmZXJfcHRyICAgICAgICAgIC0gV2hlcmUgdGhlIG9iamVjdCBpcyByZXR1cm5lZAorICogICAgICAgICAgICAgIHJldF9idWZmZXIgICAgICAgICAgLSBXaGVyZSB0aGUgb2JqZWN0IGlzIHJldHVybmVkCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBidWlsZCBhbiBBUEkgb2JqZWN0IHRvIGJlIHJldHVybmVkIHRvCi0gKiAgICAgICAgICAgICAgdGhlIGNhbGxlci4KKyAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBidWlsZCBhbiBBUEkgb2JqZWN0IHRvIGJlIHJldHVybmVkCisgKiAgICAgICAgICAgICAgdG8gdGhlIGNhbGxlci4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC02MjYsNyArNjI2LDcgQEAKICAqIFBBUkFNRVRFUlM6ICBleHRlcm5hbF9vYmplY3QgICAgIC0gVGhlIGV4dGVybmFsIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQKICAqICAgICAgICAgICAgICBpbnRlcm5hbF9vYmplY3QgICAgIC0gV2hlcmUgdGhlIGludGVybmFsIG9iamVjdCBpcyByZXR1cm5lZAogICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMgICAgICAgICAgICAgIC0gdGhlIHN0YXR1cyBvZiB0aGUgY2FsbAorICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBDb252ZXJ0cyBhbiBleHRlcm5hbCBvYmplY3QgdG8gYW4gaW50ZXJuYWwgb2JqZWN0LgogICoKQEAgLTY2NSw3ICs2NjUsNyBAQAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogU2ltcGxlIGNvcHkgb2Ygb25lIGludGVybmFsIG9iamVjdCB0byBhbm90aGVyLiAgUmVmZXJlbmNlIGNvdW50CisgKiBERVNDUklQVElPTjogU2ltcGxlIGNvcHkgb2Ygb25lIGludGVybmFsIG9iamVjdCB0byBhbm90aGVyLiBSZWZlcmVuY2UgY291bnQKICAqICAgICAgICAgICAgICBvZiB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGlzIHByZXNlcnZlZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODk3LDEwICs4OTcsMTEgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9jb3B5X2lwYWNrYWdlX3RvX2lwYWNrYWdlCiAgKgotICogUEFSQU1FVEVSUzogICpzb3VyY2Vfb2JqICAgICAtIFBvaW50ZXIgdG8gdGhlIHNvdXJjZSBwYWNrYWdlIG9iamVjdAotICogICAgICAgICAgICAgICpkZXN0X29iaiAgICAgICAtIFdoZXJlIHRoZSBpbnRlcm5hbCBvYmplY3QgaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBzb3VyY2Vfb2JqICAgICAgLSBQb2ludGVyIHRvIHRoZSBzb3VyY2UgcGFja2FnZSBvYmplY3QKKyAqICAgICAgICAgICAgICBkZXN0X29iaiAgICAgICAgLSBXaGVyZSB0aGUgaW50ZXJuYWwgb2JqZWN0IGlzIHJldHVybmVkCisgKiAgICAgICAgICAgICAgd2Fsa19zdGF0ZSAgICAgIC0gQ3VycmVudCBXYWxrIHN0YXRlIGRlc2NyaXB0b3IKICAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzICAgICAgICAgIC0gdGhlIHN0YXR1cyBvZiB0aGUgY2FsbAorICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBjb3B5IGFuIGludGVybmFsIHBhY2thZ2Ugb2JqZWN0CiAgKiAgICAgICAgICAgICAgaW50byBhbm90aGVyIGludGVybmFsIHBhY2thZ2Ugb2JqZWN0LgpAQCAtOTUzLDkgKzk1NCw5IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdXRfY29weV9pb2JqZWN0X3RvX2lvYmplY3QKICAqCi0gKiBQQVJBTUVURVJTOiAgd2Fsa19zdGF0ZSAgICAgICAgICAtIEN1cnJlbnQgd2FsayBzdGF0ZQotICogICAgICAgICAgICAgIHNvdXJjZV9kZXNjICAgICAgICAgLSBUaGUgaW50ZXJuYWwgb2JqZWN0IHRvIGJlIGNvcGllZAorICogUEFSQU1FVEVSUzogIHNvdXJjZV9kZXNjICAgICAgICAgLSBUaGUgaW50ZXJuYWwgb2JqZWN0IHRvIGJlIGNvcGllZAogICogICAgICAgICAgICAgIGRlc3RfZGVzYyAgICAgICAgICAgLSBXaGVyZSB0aGUgY29waWVkIG9iamVjdCBpcyByZXR1cm5lZAorICogICAgICAgICAgICAgIHdhbGtfc3RhdGUgICAgICAgICAgLSBDdXJyZW50IHdhbGsgc3RhdGUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggM2Y0NjAyYi4uY2FkYTczZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC04MzEsNyArODMxLDcgQEAKIAkJCQkJZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsCiAJCQkJCWFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKTsKICNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgotCS8qIGFjcGlfYmF0dGVyX3VwZGF0ZSBjb3VsZCByZW1vdmUgcG93ZXJfc3VwcGx5IG9iamVjdCAqLworCS8qIGFjcGlfYmF0dGVyeV91cGRhdGUgY291bGQgcmVtb3ZlIHBvd2VyX3N1cHBseSBvYmplY3QgKi8KIAlpZiAoYmF0dGVyeS0+YmF0LmRldikKIAkJa29iamVjdF91ZXZlbnQoJmJhdHRlcnktPmJhdC5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDc0MTE5MTUuLjY1ZjdlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTM0NCw2ICszNDQsMTUyIEBACiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfY2FuX3dha2V1cCk7CiAKK3N0YXRpYyB2b2lkIGFjcGlfcHJpbnRfb3NjX2Vycm9yKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwlzdHJ1Y3QgYWNwaV9vc2NfY29udGV4dCAqY29udGV4dCwgY2hhciAqZXJyb3IpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUn07CisJaW50IGk7CisKKwlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBlcnJvcik7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczolc1xuIiwgKGNoYXIgKilidWZmZXIucG9pbnRlciwgZXJyb3IpOworCQlrZnJlZShidWZmZXIucG9pbnRlcik7CisJfQorCXByaW50ayhLRVJOX0RFQlVHIl9PU0MgcmVxdWVzdCBkYXRhOiIpOworCWZvciAoaSA9IDA7IGkgPCBjb250ZXh0LT5jYXAubGVuZ3RoOyBpICs9IHNpemVvZih1MzIpKQorCQlwcmludGsoIiV4ICIsICooKHUzMiAqKShjb250ZXh0LT5jYXAucG9pbnRlciArIGkpKSk7CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgdTggaGV4X3ZhbCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGlzZGlnaXQoYykgPyBjIC0gJzAnIDogdG91cHBlcihjKSAtICdBJyArIDEwOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9zdHJfdG9fdXVpZChjaGFyICpzdHIsIHU4ICp1dWlkKQoreworCWludCBpOworCXN0YXRpYyBpbnQgb3BjX21hcF90b191dWlkWzE2XSA9IHs2LCA0LCAyLCAwLCAxMSwgOSwgMTYsIDE0LCAxOSwgMjEsCisJCTI0LCAyNiwgMjgsIDMwLCAzMiwgMzR9OworCisJaWYgKHN0cmxlbihzdHIpICE9IDM2KQorCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKKwlmb3IgKGkgPSAwOyBpIDwgMzY7IGkrKykgeworCQlpZiAoaSA9PSA4IHx8IGkgPT0gMTMgfHwgaSA9PSAxOCB8fCBpID09IDIzKSB7CisJCQlpZiAoc3RyW2ldICE9ICctJykKKwkJCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKKwkJfSBlbHNlIGlmICghaXN4ZGlnaXQoc3RyW2ldKSkKKwkJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl1dWlkW2ldID0gaGV4X3ZhbChzdHJbb3BjX21hcF90b191dWlkW2ldXSkgPDwgNDsKKwkJdXVpZFtpXSB8PSBoZXhfdmFsKHN0cltvcGNfbWFwX3RvX3V1aWRbaV0gKyAxXSk7CisJfQorCXJldHVybiBBRV9PSzsKK30KKworYWNwaV9zdGF0dXMgYWNwaV9ydW5fb3NjKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfb3NjX2NvbnRleHQgKmNvbnRleHQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCXVuaW9uIGFjcGlfb2JqZWN0IGluX3BhcmFtc1s0XTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb3V0X29iajsKKwl1OCB1dWlkWzE2XTsKKwl1MzIgZXJyb3JzOworCisJaWYgKCFjb250ZXh0KQorCQlyZXR1cm4gQUVfRVJST1I7CisJaWYgKEFDUElfRkFJTFVSRShhY3BpX3N0cl90b191dWlkKGNvbnRleHQtPnV1aWRfc3RyLCB1dWlkKSkpCisJCXJldHVybiBBRV9FUlJPUjsKKwljb250ZXh0LT5yZXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJY29udGV4dC0+cmV0LnBvaW50ZXIgPSBOVUxMOworCisJLyogU2V0dGluZyB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCisJaW5wdXQuY291bnQgPSA0OworCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CisJaW5fcGFyYW1zWzBdLnR5cGUgCQk9IEFDUElfVFlQRV9CVUZGRVI7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggCT0gMTY7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyCT0gdXVpZDsKKwlpbl9wYXJhbXNbMV0udHlwZSAJCT0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fcGFyYW1zWzFdLmludGVnZXIudmFsdWUgCT0gY29udGV4dC0+cmV2OworCWluX3BhcmFtc1syXS50eXBlIAkJPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbl9wYXJhbXNbMl0uaW50ZWdlci52YWx1ZQk9IGNvbnRleHQtPmNhcC5sZW5ndGgvc2l6ZW9mKHUzMik7CisJaW5fcGFyYW1zWzNdLnR5cGUJCT0gQUNQSV9UWVBFX0JVRkZFUjsKKwlpbl9wYXJhbXNbM10uYnVmZmVyLmxlbmd0aCAJPSBjb250ZXh0LT5jYXAubGVuZ3RoOworCWluX3BhcmFtc1szXS5idWZmZXIucG9pbnRlciAJPSBjb250ZXh0LT5jYXAucG9pbnRlcjsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9PU0MiLCAmaW5wdXQsICZjb250ZXh0LT5yZXQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIHJldHVybiBidWZmZXIgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIGNhcCBidWZmZXIgKi8KKwlpZiAoY29udGV4dC0+cmV0Lmxlbmd0aCAhPSBjb250ZXh0LT5jYXAubGVuZ3RoKQorCQlyZXR1cm4gQUVfTlVMTF9PQkpFQ1Q7CisKKwlvdXRfb2JqID0gY29udGV4dC0+cmV0LnBvaW50ZXI7CisJaWYgKG91dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlhY3BpX3ByaW50X29zY19lcnJvcihoYW5kbGUsIGNvbnRleHQsCisJCQkiX09TQyBldmFsdWF0aW9uIHJldHVybmVkIHdyb25nIHR5cGUiKTsKKwkJc3RhdHVzID0gQUVfVFlQRTsKKwkJZ290byBvdXRfa2ZyZWU7CisJfQorCS8qIE5lZWQgdG8gaWdub3JlIHRoZSBiaXQwIGluIHJlc3VsdCBjb2RlICovCisJZXJyb3JzID0gKigodTMyICopb3V0X29iai0+YnVmZmVyLnBvaW50ZXIpICYgfigxIDw8IDApOworCWlmIChlcnJvcnMpIHsKKwkJaWYgKGVycm9ycyAmIE9TQ19SRVFVRVNUX0VSUk9SKQorCQkJYWNwaV9wcmludF9vc2NfZXJyb3IoaGFuZGxlLCBjb250ZXh0LAorCQkJCSJfT1NDIHJlcXVlc3QgZmFpbGVkIik7CisJCWlmIChlcnJvcnMgJiBPU0NfSU5WQUxJRF9VVUlEX0VSUk9SKQorCQkJYWNwaV9wcmludF9vc2NfZXJyb3IoaGFuZGxlLCBjb250ZXh0LAorCQkJCSJfT1NDIGludmFsaWQgVVVJRCIpOworCQlpZiAoZXJyb3JzICYgT1NDX0lOVkFMSURfUkVWSVNJT05fRVJST1IpCisJCQlhY3BpX3ByaW50X29zY19lcnJvcihoYW5kbGUsIGNvbnRleHQsCisJCQkJIl9PU0MgaW52YWxpZCByZXZpc2lvbiIpOworCQlpZiAoZXJyb3JzICYgT1NDX0NBUEFCSUxJVElFU19NQVNLX0VSUk9SKSB7CisJCQlpZiAoKCh1MzIgKiljb250ZXh0LT5jYXAucG9pbnRlcilbT1NDX1FVRVJZX1RZUEVdCisJCQkgICAgJiBPU0NfUVVFUllfRU5BQkxFKQorCQkJCWdvdG8gb3V0X3N1Y2Nlc3M7CisJCQlzdGF0dXMgPSBBRV9TVVBQT1JUOworCQkJZ290byBvdXRfa2ZyZWU7CisJCX0KKwkJc3RhdHVzID0gQUVfRVJST1I7CisJCWdvdG8gb3V0X2tmcmVlOworCX0KK291dF9zdWNjZXNzOgorCXJldHVybiBBRV9PSzsKKworb3V0X2tmcmVlOgorCWtmcmVlKGNvbnRleHQtPnJldC5wb2ludGVyKTsKKwljb250ZXh0LT5yZXQucG9pbnRlciA9IE5VTEw7CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0woYWNwaV9ydW5fb3NjKTsKKworc3RhdGljIHU4IHNiX3V1aWRfc3RyW10gPSAiMDgxMUIwNkUtNEEyNy00NEY5LThENjAtM0NCQkMyMkU3QjQ4IjsKK3N0YXRpYyB2b2lkIGFjcGlfYnVzX29zY19zdXBwb3J0KHZvaWQpCit7CisJdTMyIGNhcGJ1ZlsyXTsKKwlzdHJ1Y3QgYWNwaV9vc2NfY29udGV4dCBjb250ZXh0ID0geworCQkudXVpZF9zdHIgPSBzYl91dWlkX3N0ciwKKwkJLnJldiA9IDEsCisJCS5jYXAubGVuZ3RoID0gOCwKKwkJLmNhcC5wb2ludGVyID0gY2FwYnVmLAorCX07CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCisJY2FwYnVmW09TQ19RVUVSWV9UWVBFXSA9IE9TQ19RVUVSWV9FTkFCTEU7CisJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdID0gT1NDX1NCX1BSM19TVVBQT1JUOyAvKiBfUFIzIGlzIGluIHVzZSAqLworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SCisJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdIHw9IE9TQ19TQl9QQURfU1VQUE9SVDsKKyNlbmRpZgorCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfaGFuZGxlKE5VTEwsICJcXF9TQiIsICZoYW5kbGUpKSkKKwkJcmV0dXJuOworCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9ydW5fb3NjKGhhbmRsZSwgJmNvbnRleHQpKSkKKwkJa2ZyZWUoY29udGV4dC5yZXQucG9pbnRlcik7CisJLyogZG8gd2UgbmVlZCB0byBjaGVjayB0aGUgcmV0dXJuZWQgY2FwPyBTb3VuZHMgbm8gKi8KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgTWFuYWdlbWVudAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTczNCw2ICs4ODAsOCBAQAogCXN0YXR1cyA9IGFjcGlfZWNfZWNkdF9wcm9iZSgpOwogCS8qIElnbm9yZSByZXN1bHQuIE5vdCBoYXZpbmcgYW4gRUNEVCBpcyBub3QgZmF0YWwuICovCiAKKwlhY3BpX2J1c19vc2Nfc3VwcG9ydCgpOworCiAJc3RhdHVzID0gYWNwaV9pbml0aWFsaXplX29iamVjdHMoQUNQSV9GVUxMX0lOSVRJQUxJWkFUSU9OKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5hYmxlIHRvIGluaXRpYWxpemUgQUNQSSBvYmplY3RzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCAwYzljNmE5Li44YTk1ZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0yODIsNiArMjgyLDEzIEBACiAJaWYgKHJldCA9PSBOT1RJRllfRE9ORSkKIAkJcmV0ID0gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmYWNwaV9saWRfbm90aWZpZXIsIHN0YXRlLAogCQkJCQkJICAgZGV2aWNlKTsKKwlpZiAocmV0ID09IE5PVElGWV9ET05FIHx8IHJldCA9PSBOT1RJRllfT0spIHsKKwkJLyoKKwkJICogSXQgaXMgYWxzbyByZWdhcmRlZCBhcyBzdWNjZXNzIGlmIHRoZSBub3RpZmllcl9jaGFpbgorCQkgKiByZXR1cm5zIE5PVElGWV9PSyBvciBOT1RJRllfRE9ORS4KKwkJICovCisJCXJldCA9IDA7CisJfQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKaW5kZXggOGE2OTBjMy4uY2M0MjFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCkBAIC0xOTYsNiArMTk3LDgwIEBACiAJCSAgTlVMTCwgMDY0NCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJRGVidWdGUyBJbnRlcmZhY2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzc2l6ZV90IGNtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdGF0aWMgY2hhciAqYnVmOworCXN0YXRpYyBpbnQgdW5jb3BpZWRfYnl0ZXM7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIHRhYmxlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWlmICghKCpwcG9zKSkgeworCQkvKiBwYXJzZSB0aGUgdGFibGUgaGVhZGVyIHRvIGdldCB0aGUgdGFibGUgbGVuZ3RoICovCisJCWlmIChjb3VudCA8PSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnRhYmxlLCB1c2VyX2J1ZiwKKwkJCXNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl1bmNvcGllZF9ieXRlcyA9IHRhYmxlLmxlbmd0aDsKKwkJYnVmID0ga3phbGxvYyh1bmNvcGllZF9ieXRlcywgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHVuY29waWVkX2J5dGVzIDwgY291bnQpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiArICgqcHBvcyksIHVzZXJfYnVmLCBjb3VudCkpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJdW5jb3BpZWRfYnl0ZXMgLT0gY291bnQ7CisJKnBwb3MgKz0gY291bnQ7CisKKwlpZiAoIXVuY29waWVkX2J5dGVzKSB7CisJCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9tZXRob2QoYnVmKTsKKwkJa2ZyZWUoYnVmKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWFkZF90YWludChUQUlOVF9PVkVSUklEREVOX0FDUElfVEFCTEUpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY21fZm9wcyA9IHsKKwkud3JpdGUgPSBjbV93cml0ZSwKK307CisKK3N0YXRpYyBpbnQgYWNwaV9kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICphY3BpX2RpciwgKmNtX2RlbnRyeTsKKworCWFjcGlfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJhY3BpIiwgTlVMTCk7CisJaWYgKCFhY3BpX2RpcikKKwkJZ290byBlcnI7CisKKwljbV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjdXN0b21fbWV0aG9kIiwgU19JV1VHTywKKwkJCQkJYWNwaV9kaXIsIE5VTEwsICZjbV9mb3BzKTsKKwlpZiAoIWNtX2RlbnRyeSkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmIChhY3BpX2RpcikKKwkJZGVidWdmc19yZW1vdmUoYWNwaV9kaXIpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlMgSW50ZXJmYWNlICgvcHJvYykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCkBAIC0yODYsNyArMzYxLDcgQEAKIH07CiAjZW5kaWYKIAotaW50IF9faW5pdCBhY3BpX2RlYnVnX2luaXQodm9pZCkKK2ludCBfX2luaXQgYWNwaV9wcm9jZnNfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CkBAIC0zMjEsMyArMzk2LDEwIEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworaW50IF9faW5pdCBhY3BpX2RlYnVnX2luaXQodm9pZCkKK3sKKwlhY3BpX2RlYnVnZnNfaW5pdCgpOworCWFjcGlfcHJvY2ZzX2luaXQoKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDMwYmUzYzEuLmJiYzJjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtNTAsNyArNTAsNiBAQAogCSIgYmVmb3JlIHVuZG9ja2luZyIpOwogCiBzdGF0aWMgc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIGRvY2tfbm90aWZpZXJfbGlzdDsKLXN0YXRpYyBjaGFyIGRvY2tfZGV2aWNlX25hbWVbXSA9ICJkb2NrIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBkb2NrX2RldmljZV9pZHNbXSA9IHsKIAl7IkxOWERPQ0siLCAwfSwKQEAgLTkzLDQwICs5MiwzMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgRG9jayBEZXBlbmRlbnQgZGV2aWNlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKLSAqICBhbGxvY19kb2NrX2RlcGVuZGVudF9kZXZpY2UgLSBhbGxvY2F0ZSBhbmQgaW5pdCBhIGRlcGVuZGVudCBkZXZpY2UKLSAqICBAaGFuZGxlOiB0aGUgYWNwaV9oYW5kbGUgb2YgdGhlIGRlcGVuZGVudCBkZXZpY2UKKyAqIGFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UgLSBhc3NvY2lhdGUgYSBkZXZpY2Ugd2l0aCB0aGUgZG9jayBzdGF0aW9uCisgKiBAZHM6IFRoZSBkb2NrIHN0YXRpb24KKyAqIEBoYW5kbGU6IGhhbmRsZSBvZiB0aGUgZGVwZW5kZW50IGRldmljZQogICoKLSAqICBBbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZGVwZW5kZW50IGRldmljZSBzdHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIHJlZmVyZW5jZWQKLSAqICBieSB0aGUgYWNwaSBoYW5kbGUKKyAqIEFkZCB0aGUgZGVwZW5kZW50IGRldmljZSB0byB0aGUgZG9jaydzIGRlcGVuZGVudCBkZXZpY2UgbGlzdC4KICAqLwotc3RhdGljIHN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKgotYWxsb2NfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3N0YXRpYyBpbnQKK2FkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2Uoc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMsIGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZDsKIAogCWRkID0ga3phbGxvYyhzaXplb2YoKmRkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRkKSB7Ci0JCWRkLT5oYW5kbGUgPSBoYW5kbGU7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZC0+bGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZC0+aG90cGx1Z19saXN0KTsKLQl9Ci0JcmV0dXJuIGRkOwotfQorCWlmICghZGQpCisJCXJldHVybiAtRU5PTUVNOwogCi0vKioKLSAqIGFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UgLSBhc3NvY2lhdGUgYSBkZXZpY2Ugd2l0aCB0aGUgZG9jayBzdGF0aW9uCi0gKiBAZHM6IFRoZSBkb2NrIHN0YXRpb24KLSAqIEBkZDogVGhlIGRlcGVuZGVudCBkZXZpY2UKLSAqCi0gKiBBZGQgdGhlIGRlcGVuZGVudCBkZXZpY2UgdG8gdGhlIGRvY2sncyBkZXBlbmRlbnQgZGV2aWNlIGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkCi1hZGRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzLAotCQkJICBzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZCkKLXsKKwlkZC0+aGFuZGxlID0gaGFuZGxlOworCUlOSVRfTElTVF9IRUFEKCZkZC0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRkLT5ob3RwbHVnX2xpc3QpOworCiAJc3Bpbl9sb2NrKCZkcy0+ZGRfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZGQtPmxpc3QsICZkcy0+ZGVwZW5kZW50X2RldmljZXMpOwogCXNwaW5fdW5sb2NrKCZkcy0+ZGRfbG9jayk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNDksNiArMjM4LDcgQEAKIHN0YXRpYyBpbnQgaXNfZWplY3RhYmxlX2JheShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJYWNwaV9oYW5kbGUgcGhhbmRsZTsKKwogCWlmICghaXNfZWplY3RhYmxlKGhhbmRsZSkpCiAJCXJldHVybiAwOwogCWlmIChpc19iYXR0ZXJ5KGhhbmRsZSkgfHwgaXNfYXRhKGhhbmRsZSkpCkBAIC0yNzUsMTQgKzI2NSwxMyBAQAogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJcmV0dXJuIDE7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpCiAJCWlmIChmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSkpCiAJCQlyZXR1cm4gMTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaXNfZG9ja19kZXZpY2UpOwogCiAvKioKQEAgLTMwNSw4ICsyOTQsNiBAQAogCXJldHVybiAwOwogfQogCi0KLQogLyoqCiAgKiBkb2NrX2NyZWF0ZV9hY3BpX2RldmljZSAtIGFkZCBuZXcgZGV2aWNlcyB0byBhY3BpCiAgKiBAaGFuZGxlIC0gaGFuZGxlIG9mIHRoZSBkZXZpY2UgdG8gYWRkCkBAIC0zMjAsNyArMzA3LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqIGRvY2tfY3JlYXRlX2FjcGlfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnRfZGV2aWNlOwogCWFjcGlfaGFuZGxlIHBhcmVudDsKIAlpbnQgcmV0OwpAQCAtMzM3LDggKzMyNCw3IEBACiAJCXJldCA9IGFjcGlfYnVzX2FkZCgmZGV2aWNlLCBwYXJlbnRfZGV2aWNlLCBoYW5kbGUsCiAJCQlBQ1BJX0JVU19UWVBFX0RFVklDRSk7CiAJCWlmIChyZXQpIHsKLQkJCXByX2RlYnVnKCJlcnJvciBhZGRpbmcgYnVzLCAleFxuIiwKLQkJCQktcmV0KTsKKwkJCXByX2RlYnVnKCJlcnJvciBhZGRpbmcgYnVzLCAleFxuIiwgLXJldCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KQEAgLTM2NCw3ICszNTAsNiBAQAogCX0KIH0KIAotCiAvKioKICAqIGhvdHBsdWdfZG9ja19kZXZpY2VzIC0gaW5zZXJ0IG9yIHJlbW92ZSBkZXZpY2VzIG9uIHRoZSBkb2NrIHN0YXRpb24KICAqIEBkczogdGhlIGRvY2sgc3RhdGlvbgpAQCAtMzg0LDEwICszNjksOSBAQAogCS8qCiAJICogRmlyc3QgY2FsbCBkcml2ZXIgc3BlY2lmaWMgaG90cGx1ZyBmdW5jdGlvbnMKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRkLCAmZHMtPmhvdHBsdWdfZGV2aWNlcywgaG90cGx1Z19saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmRzLT5ob3RwbHVnX2RldmljZXMsIGhvdHBsdWdfbGlzdCkKIAkJaWYgKGRkLT5vcHMgJiYgZGQtPm9wcy0+aGFuZGxlcikKIAkJCWRkLT5vcHMtPmhhbmRsZXIoZGQtPmhhbmRsZSwgZXZlbnQsIGRkLT5jb250ZXh0KTsKLQl9CiAKIAkvKgogCSAqIE5vdyBtYWtlIHN1cmUgdGhhdCBhbiBhY3BpX2RldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoCkBAIC00MjYsNiArNDEwLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRkLCAmZHMtPmhvdHBsdWdfZGV2aWNlcywgaG90cGx1Z19saXN0KQogCQlpZiAoZGQtPm9wcyAmJiBkZC0+b3BzLT51ZXZlbnQpCiAJCQlkZC0+b3BzLT51ZXZlbnQoZGQtPmhhbmRsZSwgZXZlbnQsIGRkLT5jb250ZXh0KTsKKwogCWlmIChudW0gIT0gRE9DS19FVkVOVCkKIAkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KQEAgLTQ1Niw4ICs0NDEsOCBAQAogCWFyZy50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CiAJYXJnLmludGVnZXIudmFsdWUgPSAxOwogCi0JaWYgKEFDUElfRkFJTFVSRShhY3BpX2V2YWx1YXRlX29iamVjdChkcy0+aGFuZGxlLCAiX0VKMCIsCi0JCQkJCSAgICAgICZhcmdfbGlzdCwgTlVMTCkpKQorCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGRzLT5oYW5kbGUsICJfRUowIiwgJmFyZ19saXN0LCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByX2RlYnVnKCJGYWlsZWQgdG8gZXZhbHVhdGUgX0VKMCFcbiIpOwogfQogCkBAIC01NzcsNyArNTYyLDYgQEAKIAogCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmRvY2tfbm90aWZpZXJfbGlzdCwgbmIpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kb2NrX25vdGlmaWVyKTsKIAogLyoqCkBAIC01OTEsNyArNTc1LDYgQEAKIAogCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZkb2NrX25vdGlmaWVyX2xpc3QsIG5iKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kb2NrX25vdGlmaWVyKTsKIAogLyoqCkBAIC02MzYsNyArNjE5LDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UpOwogCiAvKioKQEAgLTY1Nyw3ICs2MzksNiBAQAogCQkJZG9ja19kZWxfaG90cGx1Z19kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CiAJfQogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UpOwogCiAvKioKQEAgLTc3Miw3ICs3NTMsNyBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2RvY2tfZGVmZXJyZWRfY2Iodm9pZCAqY29udGV4dCkKIHsKLQlzdHJ1Y3QgZG9ja19kYXRhICpkYXRhID0gKHN0cnVjdCBkb2NrX2RhdGEgKiljb250ZXh0OworCXN0cnVjdCBkb2NrX2RhdGEgKmRhdGEgPSBjb250ZXh0OwogCiAJZG9ja19ub3RpZnkoZGF0YS0+aGFuZGxlLCBkYXRhLT5ldmVudCwgZGF0YS0+ZHMpOwogCWtmcmVlKGRhdGEpOwpAQCAtNzgyLDIzICs3NjMsMjIgQEAKIAl1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbjsKLQlhY3BpX2hhbmRsZSBoYW5kbGUgPSAoYWNwaV9oYW5kbGUpZGF0YTsKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkYXRhOwogCiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSyAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0sKIAkgICAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKQogCQlyZXR1cm4gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJaWYgKGRvY2tfc3RhdGlvbi0+aGFuZGxlID09IGhhbmRsZSkgewotCQkJc3RydWN0IGRvY2tfZGF0YSAqZG9ja19kYXRhOworCQkJc3RydWN0IGRvY2tfZGF0YSAqZGQ7CiAKLQkJCWRvY2tfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkb2NrX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghZG9ja19kYXRhKQorCQkJZGQgPSBrbWFsbG9jKHNpemVvZigqZGQpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZGQpCiAJCQkJcmV0dXJuIDA7Ci0JCQlkb2NrX2RhdGEtPmhhbmRsZSA9IGhhbmRsZTsKLQkJCWRvY2tfZGF0YS0+ZXZlbnQgPSBldmVudDsKLQkJCWRvY2tfZGF0YS0+ZHMgPSBkb2NrX3N0YXRpb247Ci0JCQlhY3BpX29zX2hvdHBsdWdfZXhlY3V0ZShhY3BpX2RvY2tfZGVmZXJyZWRfY2IsCi0JCQkJZG9ja19kYXRhKTsKKwkJCWRkLT5oYW5kbGUgPSBoYW5kbGU7CisJCQlkZC0+ZXZlbnQgPSBldmVudDsKKwkJCWRkLT5kcyA9IGRvY2tfc3RhdGlvbjsKKwkJCWFjcGlfb3NfaG90cGx1Z19leGVjdXRlKGFjcGlfZG9ja19kZWZlcnJlZF9jYiwgZGQpOwogCQkJcmV0dXJuIDAgOwogCQl9CiAJfQpAQCAtODI2LDcgKzgwNiw2IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfaGFuZGxlIHRtcCwgcGFyZW50OwogCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRzID0gY29udGV4dDsKLQlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZDsKIAogCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9lamQoaGFuZGxlLCAmdG1wKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTg0MCwxMSArODE5LDkgQEAKIAkJCWdvdG8gZmRkX291dDsKIAl9CiAKLQlpZiAodG1wID09IGRzLT5oYW5kbGUpIHsKLQkJZGQgPSBhbGxvY19kb2NrX2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKTsKLQkJaWYgKGRkKQotCQkJYWRkX2RvY2tfZGVwZW5kZW50X2RldmljZShkcywgZGQpOwotCX0KKwlpZiAodG1wID09IGRzLT5oYW5kbGUpCisJCWFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZHMsIGhhbmRsZSk7CisKIGZkZF9vdXQ6CiAJcmV0dXJuIEFFX09LOwogfQpAQCAtODU3LDggKzgzNCw3IEBACiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICp0bXA7CiAKLQlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24gPSAqKChzdHJ1Y3QgZG9ja19zdGF0aW9uICoqKQotCQlkZXYtPnBsYXRmb3JtX2RhdGEpOworCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9idXNfZ2V0X2RldmljZShkb2NrX3N0YXRpb24tPmhhbmRsZSwgJnRtcCkpKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIxXG4iKTsKQEAgLTg3Miw4ICs4NDgsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19mbGFncyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uID0gKigoc3RydWN0IGRvY2tfc3RhdGlvbiAqKikKLQkJZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGRvY2tfc3RhdGlvbi0+ZmxhZ3MpOwogCiB9CkBAIC04ODYsOCArODYxLDcgQEAKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWludCByZXQ7Ci0Jc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uID0gKigoc3RydWN0IGRvY2tfc3RhdGlvbiAqKikKLQkJZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkwNSw4ICs4NzksNyBAQAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBsYnVmOwotCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbiA9ICooKHN0cnVjdCBkb2NrX3N0YXRpb24gKiopCi0JCWRldi0+cGxhdGZvcm1fZGF0YSk7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkb2NrX3N0YXRpb24tPmhhbmRsZSwKIAkJCQkJIl9VSUQiLCBOVUxMLCAmbGJ1Zik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpAQCAtOTE5LDggKzg5Miw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2RvY2tfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uID0gKigoc3RydWN0IGRvY2tfc3RhdGlvbiAqKikKLQkJZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb24gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJY2hhciAqdHlwZTsKIAogCWlmIChkb2NrX3N0YXRpb24tPmZsYWdzICYgRE9DS19JU19ET0NLKQpAQCAtOTM2LDYgKzkwOCwxOSBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKHR5cGUsIFNfSVJVR08sIHNob3dfZG9ja190eXBlLCBOVUxMKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRvY2tfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9kb2NrZWQuYXR0ciwKKwkmZGV2X2F0dHJfZmxhZ3MuYXR0ciwKKwkmZGV2X2F0dHJfdW5kb2NrLmF0dHIsCisJJmRldl9hdHRyX3VpZC5hdHRyLAorCSZkZXZfYXR0cl90eXBlLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZG9ja19hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gZG9ja19hdHRyaWJ1dGVzCit9OworCiAvKioKICAqIGRvY2tfYWRkIC0gYWRkIGEgbmV3IGRvY2sgc3RhdGlvbgogICogQGhhbmRsZTogdGhlIGRvY2sgc3RhdGlvbiBoYW5kbGUKQEAgLTk0NSwzOSArOTMwLDMwIEBACiAgKi8KIHN0YXRpYyBpbnQgZG9ja19hZGQoYWNwaV9oYW5kbGUgaGFuZGxlKQogewotCWludCByZXQ7Ci0Jc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7Ci0Jc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRvY2tfZGV2aWNlOworCWludCByZXQsIGlkOworCXN0cnVjdCBkb2NrX3N0YXRpb24gZHMsICpkb2NrX3N0YXRpb247CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGQ7CiAKLQkvKiBhbGxvY2F0ZSAmIGluaXRpYWxpemUgdGhlIGRvY2tfc3RhdGlvbiBwcml2YXRlIGRhdGEgKi8KLQlkb2NrX3N0YXRpb24gPSBremFsbG9jKHNpemVvZigqZG9ja19zdGF0aW9uKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkb2NrX3N0YXRpb24pCi0JCXJldHVybiAtRU5PTUVNOworCWlkID0gZG9ja19zdGF0aW9uX2NvdW50OworCWRkID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoTlVMTCwgImRvY2siLCBpZCwgJmRzLCBzaXplb2YoZHMpKTsKKwlpZiAoSVNfRVJSKGRkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGQpOworCisJZG9ja19zdGF0aW9uID0gZGQtPmRldi5wbGF0Zm9ybV9kYXRhOworCiAJZG9ja19zdGF0aW9uLT5oYW5kbGUgPSBoYW5kbGU7CisJZG9ja19zdGF0aW9uLT5kb2NrX2RldmljZSA9IGRkOwogCWRvY2tfc3RhdGlvbi0+bGFzdF9kb2NrX3RpbWUgPSBqaWZmaWVzIC0gSFo7Ci0JSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMpOwotCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmhvdHBsdWdfZGV2aWNlcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+c2libGluZyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+ZGRfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmZG9ja19zdGF0aW9uLT5ocF9sb2NrKTsKLQlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZkb2NrX25vdGlmaWVyX2xpc3QpOwogCi0JLyogaW5pdGlhbGl6ZSBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYgKi8KLQlkb2NrX3N0YXRpb24tPmRvY2tfZGV2aWNlID0KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShkb2NrX2RldmljZV9uYW1lLAotCQkJZG9ja19zdGF0aW9uX2NvdW50LCBOVUxMLCAwKTsKLQlkb2NrX2RldmljZSA9IGRvY2tfc3RhdGlvbi0+ZG9ja19kZXZpY2U7Ci0JaWYgKElTX0VSUihkb2NrX2RldmljZSkpIHsKLQkJa2ZyZWUoZG9ja19zdGF0aW9uKTsKLQkJZG9ja19zdGF0aW9uID0gTlVMTDsKLQkJcmV0dXJuIFBUUl9FUlIoZG9ja19kZXZpY2UpOwotCX0KLQlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoZG9ja19kZXZpY2UsICZkb2NrX3N0YXRpb24sCi0JCXNpemVvZihzdHJ1Y3QgZG9ja19zdGF0aW9uICopKTsKKwltdXRleF9pbml0KCZkb2NrX3N0YXRpb24tPmhwX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkb2NrX3N0YXRpb24tPmRkX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPnNpYmxpbmcpOworCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmhvdHBsdWdfZGV2aWNlcyk7CisJQVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRCgmZG9ja19ub3RpZmllcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5kZXBlbmRlbnRfZGV2aWNlcyk7CiAKIAkvKiB3ZSB3YW50IHRoZSBkb2NrIGRldmljZSB0byBzZW5kIHVldmVudHMgKi8KLQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmZG9ja19kZXZpY2UtPmRldiwgMCk7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJmRkLT5kZXYsIDApOwogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJZG9ja19zdGF0aW9uLT5mbGFncyB8PSBET0NLX0lTX0RPQ0s7CkBAIC05ODYsNDcgKzk2Miw5IEBACiAJaWYgKGlzX2JhdHRlcnkoaGFuZGxlKSkKIAkJZG9ja19zdGF0aW9uLT5mbGFncyB8PSBET0NLX0lTX0JBVDsKIAotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX2RvY2tlZCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVkIGFkZGluZyBzeXNmcyBmaWxlXG4iLCByZXQpOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihkb2NrX2RldmljZSk7Ci0JCWtmcmVlKGRvY2tfc3RhdGlvbik7Ci0JCWRvY2tfc3RhdGlvbiA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VuZG9jayk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVkIGFkZGluZyBzeXNmcyBmaWxlXG4iLCByZXQpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9kb2NrZWQpOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihkb2NrX2RldmljZSk7Ci0JCWtmcmVlKGRvY2tfc3RhdGlvbik7Ci0JCWRvY2tfc3RhdGlvbiA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VpZCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVkIGFkZGluZyBzeXNmcyBmaWxlXG4iLCByZXQpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9kb2NrZWQpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl91bmRvY2spOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihkb2NrX2RldmljZSk7Ci0JCWtmcmVlKGRvY2tfc3RhdGlvbik7Ci0JCWRvY2tfc3RhdGlvbiA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX2ZsYWdzKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgYWRkaW5nIHN5c2ZzIGZpbGVcbiIsIHJldCk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX2RvY2tlZCk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VuZG9jayk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VpZCk7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRvY2tfZGV2aWNlKTsKLQkJa2ZyZWUoZG9ja19zdGF0aW9uKTsKLQkJZG9ja19zdGF0aW9uID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfdHlwZSk7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZC0+ZGV2LmtvYmosICZkb2NrX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSIkVycm9yICVkIGFkZGluZyBzeXNmcyBmaWxlXG4iLCByZXQpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCiAJLyogRmluZCBkZXBlbmRlbnQgZGV2aWNlcyAqLwogCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKQEAgLTEwMzQsNTggKzk3Miw0MyBAQAogCQkJICAgIGRvY2tfc3RhdGlvbiwgTlVMTCk7CiAKIAkvKiBhZGQgdGhlIGRvY2sgc3RhdGlvbiBhcyBhIGRldmljZSBkZXBlbmRlbnQgb24gaXRzZWxmICovCi0JZGQgPSBhbGxvY19kb2NrX2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKTsKLQlpZiAoIWRkKSB7Ci0JCWtmcmVlKGRvY2tfc3RhdGlvbik7Ci0JCWRvY2tfc3RhdGlvbiA9IE5VTEw7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZG9ja19hZGRfZXJyX3VucmVnaXN0ZXI7Ci0JfQotCWFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CisJcmV0ID0gYWRkX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcm1ncm91cDsKIAogCWRvY2tfc3RhdGlvbl9jb3VudCsrOwogCWxpc3RfYWRkKCZkb2NrX3N0YXRpb24tPnNpYmxpbmcsICZkb2NrX3N0YXRpb25zKTsKIAlyZXR1cm4gMDsKIAotZG9ja19hZGRfZXJyX3VucmVnaXN0ZXI6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfdHlwZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfZG9ja2VkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl91bmRvY2spOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VpZCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfZmxhZ3MpOwotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRvY2tfZGV2aWNlKTsKLQlrZnJlZShkb2NrX3N0YXRpb24pOwotCWRvY2tfc3RhdGlvbiA9IE5VTEw7CitlcnJfcm1ncm91cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRkLT5kZXYua29iaiwgJmRvY2tfYXR0cmlidXRlX2dyb3VwKTsKK2Vycl91bnJlZ2lzdGVyOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRkKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzIGVuY291bnRlcmVkIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKICAqIGRvY2tfcmVtb3ZlIC0gZnJlZSB1cCByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgZG9jayBzdGF0aW9uCiAgKi8KLXN0YXRpYyBpbnQgZG9ja19yZW1vdmUoc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uKQorc3RhdGljIGludCBkb2NrX3JlbW92ZShzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcykKIHsKIAlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZCwgKnRtcDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkb2NrX2RldmljZSA9IGRvY2tfc3RhdGlvbi0+ZG9ja19kZXZpY2U7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZG9ja19kZXZpY2UgPSBkcy0+ZG9ja19kZXZpY2U7CiAKIAlpZiAoIWRvY2tfc3RhdGlvbl9jb3VudCkKIAkJcmV0dXJuIDA7CiAKIAkvKiByZW1vdmUgZGVwZW5kZW50IGRldmljZXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGQsIHRtcCwgJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMsCi0JCQkJIGxpc3QpCi0JICAgIGtmcmVlKGRkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGQsIHRtcCwgJmRzLT5kZXBlbmRlbnRfZGV2aWNlcywgbGlzdCkKKwkJa2ZyZWUoZGQpOworCisJbGlzdF9kZWwoJmRzLT5zaWJsaW5nKTsKIAogCS8qIGNsZWFudXAgc3lzZnMgKi8KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl90eXBlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9kb2NrZWQpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UtPmRldiwgJmRldl9hdHRyX3VuZG9jayk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfdWlkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9mbGFncyk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkb2NrX2RldmljZS0+ZGV2LmtvYmosICZkb2NrX2F0dHJpYnV0ZV9ncm91cCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZG9ja19kZXZpY2UpOwogCi0JLyogZnJlZSBkb2NrIHN0YXRpb24gbWVtb3J5ICovCi0Ja2ZyZWUoZG9ja19zdGF0aW9uKTsKLQlkb2NrX3N0YXRpb24gPSBOVUxMOwogCXJldHVybiAwOwogfQogCkBAIC0xMTAzLDExICsxMDI2LDEwIEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlpZiAoaXNfZG9jayhoYW5kbGUpKSB7Ci0JCWlmIChkb2NrX2FkZChoYW5kbGUpID49IDApIHsKKwlpZiAoaXNfZG9jayhoYW5kbGUpKQorCQlpZiAoZG9ja19hZGQoaGFuZGxlKSA+PSAwKQogCQkJc3RhdHVzID0gQUVfQ1RSTF9URVJNSU5BVEU7Ci0JCX0KLQl9CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMTQ1LDggKzEwNjcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG9ja19leGl0KHZvaWQpCiB7Ci0Jc3RydWN0IGRvY2tfc3RhdGlvbiAqZG9ja19zdGF0aW9uOwotCXN0cnVjdCBkb2NrX3N0YXRpb24gKnRtcDsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICp0bXAsICpkb2NrX3N0YXRpb247CiAKIAl1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKCZkb2NrX2FjcGlfbm90aWZpZXIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkb2NrX3N0YXRpb24sIHRtcCwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZmFuLmMgYi9kcml2ZXJzL2FjcGkvZmFuLmMKaW5kZXggZjQxOTg0OS4uYWNmMmFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Zhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9mYW4uYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJCWdvdG8gZW5kOwogCX0KIAotCWRldl9pbmZvKCZkZXZpY2UtPmRldiwgInJlZ2lzdGVyZWQgYXMgY29vbGluZ19kZXZpY2UlZFxuIiwgY2Rldi0+aWQpOworCWRldl9kYmcoJmRldmljZS0+ZGV2LCAicmVnaXN0ZXJlZCBhcyBjb29saW5nX2RldmljZSVkXG4iLCBjZGV2LT5pZCk7CiAKIAlkZXZpY2UtPmRyaXZlcl9kYXRhID0gY2RldjsKIAlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5kZXYua29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hLmMgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCmluZGV4IDJiZTJmYjYuLjdhZDQ4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9udW1hLmMKKysrIGIvZHJpdmVycy9hY3BpL251bWEuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKQEAgLTQwLDE0ICs0MSwxNCBAQAogCiAvKiBtYXBzIHRvIGNvbnZlcnQgYmV0d2VlbiBwcm94aW1pdHkgZG9tYWluIGFuZCBsb2dpY2FsIG5vZGUgSUQgKi8KIHN0YXRpYyBpbnQgcHhtX3RvX25vZGVfbWFwW01BWF9QWE1fRE9NQUlOU10KLQkJCQk9IHsgWzAgLi4uIE1BWF9QWE1fRE9NQUlOUyAtIDFdID0gTklEX0lOVkFMIH07CisJCQk9IHsgWzAgLi4uIE1BWF9QWE1fRE9NQUlOUyAtIDFdID0gTlVNQV9OT19OT0RFIH07CiBzdGF0aWMgaW50IG5vZGVfdG9fcHhtX21hcFtNQVhfTlVNTk9ERVNdCi0JCQkJPSB7IFswIC4uLiBNQVhfTlVNTk9ERVMgLSAxXSA9IFBYTV9JTlZBTCB9OworCQkJPSB7IFswIC4uLiBNQVhfTlVNTk9ERVMgLSAxXSA9IFBYTV9JTlZBTCB9OwogCiBpbnQgcHhtX3RvX25vZGUoaW50IHB4bSkKIHsKIAlpZiAocHhtIDwgMCkKLQkJcmV0dXJuIE5JRF9JTlZBTDsKKwkJcmV0dXJuIE5VTUFfTk9fTk9ERTsKIAlyZXR1cm4gcHhtX3RvX25vZGVfbWFwW3B4bV07CiB9CiAKQEAgLTY4LDkgKzY5LDkgQEAKIHsKIAlpbnQgbm9kZSA9IHB4bV90b19ub2RlX21hcFtweG1dOwogCi0JaWYgKG5vZGUgPCAwKXsKKwlpZiAobm9kZSA8IDApIHsKIAkJaWYgKG5vZGVzX3dlaWdodChub2Rlc19mb3VuZF9tYXApID49IE1BWF9OVU1OT0RFUykKLQkJCXJldHVybiBOSURfSU5WQUw7CisJCQlyZXR1cm4gTlVNQV9OT19OT0RFOwogCQlub2RlID0gZmlyc3RfdW5zZXRfbm9kZShub2Rlc19mb3VuZF9tYXApOwogCQlfX2FjcGlfbWFwX3B4bV90b19ub2RlKHB4bSwgbm9kZSk7CiAJCW5vZGVfc2V0KG5vZGUsIG5vZGVzX2ZvdW5kX21hcCk7CkBAIC03OSwxNiArODAsNiBAQAogCXJldHVybiBub2RlOwogfQogCi0jaWYgMAotdm9pZCBfX2NwdWluaXQgYWNwaV91bm1hcF9weG1fdG9fbm9kZShpbnQgbm9kZSkKLXsKLQlpbnQgcHhtID0gbm9kZV90b19weG1fbWFwW25vZGVdOwotCXB4bV90b19ub2RlX21hcFtweG1dID0gTklEX0lOVkFMOwotCW5vZGVfdG9fcHhtX21hcFtub2RlXSA9IFBYTV9JTlZBTDsKLQlub2RlX2NsZWFyKG5vZGUsIG5vZGVzX2ZvdW5kX21hcCk7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiBzdGF0aWMgdm9pZCBfX2luaXQKIGFjcGlfdGFibGVfcHJpbnRfc3JhdF9lbnRyeShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCA3YzFjNTllLi4wMmU4NDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC0xMTE4LDcgKzExMTgsNyBAQAogCiAvKiBDaGVjayBmb3IgcmVzb3VyY2UgY29uZmxpY3RzIGJldHdlZW4gQUNQSSBPcGVyYXRpb25SZWdpb25zIGFuZCBuYXRpdmUKICAqIGRyaXZlcnMgKi8KLWludCBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KHN0cnVjdCByZXNvdXJjZSAqcmVzKQoraW50IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IGFjcGlfcmVzX2xpc3QgKnJlc19saXN0X2VsZW07CiAJaW50IGlvcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggMWFmODA4MS4uMTAxY2NlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTIwMiw3MiArMjAyLDI0IEBACiAJCX0KIH0KIAotc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDVCLCAweDRELCAweERCLCAweDMzLCAweEY3LCAweDFGLCAweDFDLCAweDQwLAotCQkJICAweDk2LCAweDU3LCAweDc0LCAweDQxLCAweEMwLCAweDNELCAweEQ3LCAweDY2fTsKK3N0YXRpYyB1OCBwY2lfb3NjX3V1aWRfc3RyW10gPSAiMzNEQjRENUItMUZGNy00MDFDLTk2NTctNzQ0MUMwM0RENzY2IjsKIAogc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcGNpX3J1bl9vc2MoYWNwaV9oYW5kbGUgaGFuZGxlLAogCQkJCSAgICBjb25zdCB1MzIgKmNhcGJ1ZiwgdTMyICpyZXR2YWwpCiB7CisJc3RydWN0IGFjcGlfb3NjX2NvbnRleHQgY29udGV4dCA9IHsKKwkJLnV1aWRfc3RyID0gcGNpX29zY191dWlkX3N0ciwKKwkJLnJldiA9IDEsCisJCS5jYXAubGVuZ3RoID0gMTIsCisJCS5jYXAucG9pbnRlciA9ICh2b2lkICopY2FwYnVmLAorCX07CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IGluX3BhcmFtc1s0XTsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKLQl1bmlvbiBhY3BpX29iamVjdCAqb3V0X29iajsKLQl1MzIgZXJyb3JzOwogCi0JLyogU2V0dGluZyB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCi0JaW5wdXQuY291bnQgPSA0OwotCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7Ci0JaW5fcGFyYW1zWzBdLnR5cGUgCQk9IEFDUElfVFlQRV9CVUZGRVI7Ci0JaW5fcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggCT0gMTY7Ci0JaW5fcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyCT0gT1NDX1VVSUQ7Ci0JaW5fcGFyYW1zWzFdLnR5cGUgCQk9IEFDUElfVFlQRV9JTlRFR0VSOwotCWluX3BhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlIAk9IDE7Ci0JaW5fcGFyYW1zWzJdLnR5cGUgCQk9IEFDUElfVFlQRV9JTlRFR0VSOwotCWluX3BhcmFtc1syXS5pbnRlZ2VyLnZhbHVlCT0gMzsKLQlpbl9wYXJhbXNbM10udHlwZQkJPSBBQ1BJX1RZUEVfQlVGRkVSOwotCWluX3BhcmFtc1szXS5idWZmZXIubGVuZ3RoIAk9IDEyOwotCWluX3BhcmFtc1szXS5idWZmZXIucG9pbnRlciAJPSAodTggKiljYXBidWY7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAoIW91dHB1dC5sZW5ndGgpCi0JCXJldHVybiBBRV9OVUxMX09CSkVDVDsKLQotCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKLQlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIGV2YWx1YXRpb24gcmV0dXJuZWQgd3JvbmcgdHlwZVxuIik7Ci0JCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCWdvdG8gb3V0X2tmcmVlOworCXN0YXR1cyA9IGFjcGlfcnVuX29zYyhoYW5kbGUsICZjb250ZXh0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJKnJldHZhbCA9ICooKHUzMiAqKShjb250ZXh0LnJldC5wb2ludGVyICsgOCkpOworCQlrZnJlZShjb250ZXh0LnJldC5wb2ludGVyKTsKIAl9Ci0JLyogTmVlZCB0byBpZ25vcmUgdGhlIGJpdDAgaW4gcmVzdWx0IGNvZGUgKi8KLQllcnJvcnMgPSAqKCh1MzIgKilvdXRfb2JqLT5idWZmZXIucG9pbnRlcikgJiB+KDEgPDwgMCk7Ci0JaWYgKGVycm9ycykgewotCQlpZiAoZXJyb3JzICYgT1NDX1JFUVVFU1RfRVJST1IpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyByZXF1ZXN0IGZhaWxlZFxuIik7Ci0JCWlmIChlcnJvcnMgJiBPU0NfSU5WQUxJRF9VVUlEX0VSUk9SKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgaW52YWxpZCBVVUlEXG4iKTsKLQkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1JFVklTSU9OX0VSUk9SKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgaW52YWxpZCByZXZpc2lvblxuIik7Ci0JCWlmIChlcnJvcnMgJiBPU0NfQ0FQQUJJTElUSUVTX01BU0tfRVJST1IpIHsKLQkJCWlmIChjYXBidWZbT1NDX1FVRVJZX1RZUEVdICYgT1NDX1FVRVJZX0VOQUJMRSkKLQkJCQlnb3RvIG91dF9zdWNjZXNzOwotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAiRmlybXdhcmUgZGlkIG5vdCBncmFudCByZXF1ZXN0ZWQgX09TQyBjb250cm9sXG4iKTsKLQkJCXN0YXR1cyA9IEFFX1NVUFBPUlQ7Ci0JCQlnb3RvIG91dF9rZnJlZTsKLQkJfQotCQlzdGF0dXMgPSBBRV9FUlJPUjsKLQkJZ290byBvdXRfa2ZyZWU7Ci0JfQotb3V0X3N1Y2Nlc3M6Ci0JKnJldHZhbCA9ICooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlciArIDgpKTsKLQlzdGF0dXMgPSBBRV9PSzsKLQotb3V0X2tmcmVlOgotCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yNzcsMTAgKzIyOSwxMCBAQAogCXUzMiBzdXBwb3J0X3NldCwgcmVzdWx0LCBjYXBidWZbM107CiAKIAkvKiBkbyBfT1NDIHF1ZXJ5IGZvciBhbGwgcG9zc2libGUgY29udHJvbHMgKi8KLQlzdXBwb3J0X3NldCA9IHJvb3QtPm9zY19zdXBwb3J0X3NldCB8IChmbGFncyAmIE9TQ19TVVBQT1JUX01BU0tTKTsKKwlzdXBwb3J0X3NldCA9IHJvb3QtPm9zY19zdXBwb3J0X3NldCB8IChmbGFncyAmIE9TQ19QQ0lfU1VQUE9SVF9NQVNLUyk7CiAJY2FwYnVmW09TQ19RVUVSWV9UWVBFXSA9IE9TQ19RVUVSWV9FTkFCTEU7CiAJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdID0gc3VwcG9ydF9zZXQ7Ci0JY2FwYnVmW09TQ19DT05UUk9MX1RZUEVdID0gT1NDX0NPTlRST0xfTUFTS1M7CisJY2FwYnVmW09TQ19DT05UUk9MX1RZUEVdID0gT1NDX1BDSV9DT05UUk9MX01BU0tTOwogCiAJc3RhdHVzID0gYWNwaV9wY2lfcnVuX29zYyhyb290LT5kZXZpY2UtPmhhbmRsZSwgY2FwYnVmLCAmcmVzdWx0KTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTQyNyw3ICszNzksNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIHN0YXR1czsKIAotCWNvbnRyb2xfcmVxID0gKGZsYWdzICYgT1NDX0NPTlRST0xfTUFTS1MpOworCWNvbnRyb2xfcmVxID0gKGZsYWdzICYgT1NDX1BDSV9DT05UUk9MX01BU0tTKTsKIAlpZiAoIWNvbnRyb2xfcmVxKQogCQlyZXR1cm4gQUVfVFlQRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBjYjQyODNmLi40MTczMTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCQkgICBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9hZGRfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBhY3BpX3Byb2Nlc3Nvcl9hZGRfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAKQEAgLTcyMiw3ICs3MjIsNyBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfUFJPQ0VTU09SX05PVElGWV9QRVJGT1JNQU5DRToKIAkJc2F2ZWQgPSBwci0+cGVyZm9ybWFuY2VfcGxhdGZvcm1fbGltaXQ7Ci0JCWFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChwcik7CisJCWFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChwciwgMSk7CiAJCWlmIChzYXZlZCA9PSBwci0+cGVyZm9ybWFuY2VfcGxhdGZvcm1fbGltaXQpCiAJCQlicmVhazsKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChkZXZpY2UsIGV2ZW50LApAQCAtNzU4LDcgKzc1OCw3IEBACiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IHBlcl9jcHUocHJvY2Vzc29ycywgY3B1KTsKIAogCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSAmJiBwcikgewotCQlhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQocHIpOworCQlhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQocHIsIDApOwogCQlhY3BpX3Byb2Nlc3Nvcl9jc3RfaGFzX2NoYW5nZWQocHIpOwogCQlhY3BpX3Byb2Nlc3Nvcl90c3RhdGVfaGFzX2NoYW5nZWQocHIpOwogCX0KQEAgLTgzMCw3ICs4MzAsNyBAQAogCWFyY2hfYWNwaV9wcm9jZXNzb3JfY2xlYW51cF9wZGMocHIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCi0JYWNwaV9wcm9jZXNzb3JfcHBjX2hhc19jaGFuZ2VkKHByKTsKKwlhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQocHIsIDApOwogI2VuZGlmCiAJYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyhwcik7CiAJYWNwaV9wcm9jZXNzb3JfZ2V0X2xpbWl0X2luZm8ocHIpOwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJCWdvdG8gZXJyX3Bvd2VyX2V4aXQ7CiAJfQogCi0JZGV2X2luZm8oJmRldmljZS0+ZGV2LCAicmVnaXN0ZXJlZCBhcyBjb29saW5nX2RldmljZSVkXG4iLAorCWRldl9kYmcoJmRldmljZS0+ZGV2LCAicmVnaXN0ZXJlZCBhcyBjb29saW5nX2RldmljZSVkXG4iLAogCQkgcHItPmNkZXYtPmlkKTsKIAogCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCBiYmQwNjZlLi5kMTY3NmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCXByLT5wb3dlci50aW1lcl9icm9hZGNhc3Rfb25fc3RhdGUgPSBzdGF0ZTsKIH0KIAotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfcHJvcGFnYXRlX2Jyb2FkY2FzdCh2b2lkICphcmcpCitzdGF0aWMgdm9pZCBfX2xhcGljX3RpbWVyX3Byb3BhZ2F0ZV9icm9hZGNhc3Qodm9pZCAqYXJnKQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopIGFyZzsKIAl1bnNpZ25lZCBsb25nIHJlYXNvbjsKQEAgLTE3NSw2ICsxNzUsMTIgQEAKIAljbG9ja2V2ZW50c19ub3RpZnkocmVhc29uLCAmcHItPmlkKTsKIH0KIAorc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfcHJvcGFnYXRlX2Jyb2FkY2FzdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQoreworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwci0+aWQsIF9fbGFwaWNfdGltZXJfcHJvcGFnYXRlX2Jyb2FkY2FzdCwKKwkJCQkgKHZvaWQgKilwciwgMSk7Cit9CisKIC8qIFBvd2VyKEMpIFN0YXRlIHRpbWVyIGJyb2FkY2FzdCBjb250cm9sICovCiBzdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zdGF0ZV9icm9hZGNhc3Qoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwKIAkJCQkgICAgICAgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCwKQEAgLTYzOCw4ICs2NDQsNyBAQAogCQl3b3JraW5nKys7CiAJfQogCi0Jc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByLT5pZCwgbGFwaWNfdGltZXJfcHJvcGFnYXRlX2Jyb2FkY2FzdCwKLQkJCQkgcHIsIDEpOworCWxhcGljX3RpbWVyX3Byb3BhZ2F0ZV9icm9hZGNhc3QocHIpOwogCiAJcmV0dXJuICh3b3JraW5nKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggMDFlMzY2ZC4uMmNhYmFkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTE1MiwxNSArMTUyLDU5IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfTk9USUZZX1BFUkZPUk1BTkNFCTB4ODAKKy8qCisgKiBhY3BpX3Byb2Nlc3Nvcl9wcGNfb3N0OiBOb3RpZnkgZmlybXdhcmUgdGhlIF9QUEMgZXZhbHVhdGlvbiBzdGF0dXMKKyAqIEBoYW5kbGU6IEFDUEkgcHJvY2Vzc29yIGhhbmRsZQorICogQHN0YXR1czogdGhlIHN0YXR1cyBjb2RlIG9mIF9QUEMgZXZhbHVhdGlvbgorICoJMDogc3VjY2Vzcy4gT1NQTSBpcyBub3cgdXNpbmcgdGhlIHBlcmZvcm1hbmNlIHN0YXRlIHNwZWNpZmljZWQuCisgKgkxOiBmYWlsdXJlLiBPU1BNIGhhcyBub3QgY2hhbmdlZCB0aGUgbnVtYmVyIG9mIFAtc3RhdGVzIGluIHVzZQorICovCitzdGF0aWMgdm9pZCBhY3BpX3Byb2Nlc3Nvcl9wcGNfb3N0KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHN0YXR1cykKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbXNbMl0gPSB7CisJCXsudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSLH0sCisJCXsudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSLH0sCisJfTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdCA9IHsyLCBwYXJhbXN9OworCWFjcGlfaGFuZGxlIHRlbXA7CisKKwlwYXJhbXNbMF0uaW50ZWdlci52YWx1ZSA9IEFDUElfUFJPQ0VTU09SX05PVElGWV9QRVJGT1JNQU5DRTsKKwlwYXJhbXNbMV0uaW50ZWdlci52YWx1ZSA9ICBzdGF0dXM7CisKKwkvKiB3aGVuIHRoZXJlIGlzIG5vIF9PU1QgLCBza2lwIGl0ICovCisJaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX09TVCIsICZ0ZW1wKSkpCisJCXJldHVybjsKKworCWFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9PU1QiLCAmYXJnX2xpc3QsIE5VTEwpOworCXJldHVybjsKK30KKworaW50IGFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBpbnQgZXZlbnRfZmxhZykKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGlnbm9yZV9wcGMpCisJaWYgKGlnbm9yZV9wcGMpIHsKKwkJLyoKKwkJICogT25seSB3aGVuIGl0IGlzIG5vdGlmaWNhdGlvbiBldmVudCwgdGhlIF9PU1Qgb2JqZWN0CisJCSAqIHdpbGwgYmUgZXZhbHVhdGVkLiBPdGhlcndpc2UgaXQgaXMgc2tpcHBlZC4KKwkJICovCisJCWlmIChldmVudF9mbGFnKQorCQkJYWNwaV9wcm9jZXNzb3JfcHBjX29zdChwci0+aGFuZGxlLCAxKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJcmV0ID0gYWNwaV9wcm9jZXNzb3JfZ2V0X3BsYXRmb3JtX2xpbWl0KHByKTsKLQorCS8qCisJICogT25seSB3aGVuIGl0IGlzIG5vdGlmaWNhdGlvbiBldmVudCwgdGhlIF9PU1Qgb2JqZWN0CisJICogd2lsbCBiZSBldmFsdWF0ZWQuIE90aGVyd2lzZSBpdCBpcyBza2lwcGVkLgorCSAqLworCWlmIChldmVudF9mbGFnKSB7CisJCWlmIChyZXQgPCAwKQorCQkJYWNwaV9wcm9jZXNzb3JfcHBjX29zdChwci0+aGFuZGxlLCAxKTsKKwkJZWxzZQorCQkJYWNwaV9wcm9jZXNzb3JfcHBjX29zdChwci0+aGFuZGxlLCAwKTsKKwl9CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAocmV0KTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCA2NWY2NzgxLi45MDczYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTEwNTIsNiArMTA1MiwxMyBAQAogCQkJCSAgIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKTsKIAkJfQogCQlzZXFfcHV0cyhzZXEsICJcbiIpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYoc2VxLCAicGFzc2l2ZSAoZm9yY2VkKToiKTsKKwkJaWYgKHR6LT50aGVybWFsX3pvbmUtPmZvcmNlZF9wYXNzaXZlKQorCQkJc2VxX3ByaW50ZihzZXEsICIgICAgICAgICVpIENcbiIsCisJCQkJICAgdHotPnRoZXJtYWxfem9uZS0+Zm9yY2VkX3Bhc3NpdmUgLyAxMDAwKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihzZXEsICI8bm90IHNldD5cbiIpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCA2NzZmMDhiLi44NTg0NGQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC03OTAsNSArNzkwLDE1IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBQQVRBX01BQ0lPCisJdHJpc3RhdGUgIkFwcGxlIFBvd2VyTWFjL1Bvd2VyQm9vayBpbnRlcm5hbCAnTWFjSU8nIElERSIKKwlkZXBlbmRzIG9uIFBQQ19QTUFDCisJaGVscAorCSAgTW9zdCBJREUgY2FwYWJsZSBQb3dlck1hY3MgaGF2ZSBJREUgYnVzc2VzIGRyaXZlbiBieSBhIHZhcmlhbnQKKyAgICAgICAgICBvZiB0aGlzIGNvbnRyb2xsZXIgd2hpY2ggaXMgcGFydCBvZiB0aGUgQXBwbGUgY2hpcHNldCB1c2VkIG9uCisgICAgICAgICAgbW9zdCBQb3dlck1hYyBtb2RlbHMuIFNvbWUgbW9kZWxzIGhhdmUgbXVsdGlwbGUgYnVzc2VzIHVzaW5nCisgICAgICAgICAgZGlmZmVyZW50IGNoaXBzZXRzLCB0aG91Z2ggZ2VuZXJhbGx5LCBNYWNJTyBpcyBvbmUgb2YgdGhlbS4KKworCiBlbmRpZiAjIEFUQV9TRkYKIGVuZGlmICMgQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9NYWtlZmlsZSBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCmluZGV4IGQ5MDk0MzUuLmZjOTM2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBACiBvYmotJChDT05GSUdfU0FUQV9JTklDMTYyWCkJKz0gc2F0YV9pbmljMTYyeC5vCiBvYmotJChDT05GSUdfUERDX0FETUEpCQkrPSBwZGNfYWRtYS5vCiBvYmotJChDT05GSUdfU0FUQV9GU0wpCQkrPSBzYXRhX2ZzbC5vCitvYmotJChDT05GSUdfUEFUQV9NQUNJTykJKz0gcGF0YV9tYWNpby5vCiAKIG9iai0kKENPTkZJR19QQVRBX0FMSSkJCSs9IHBhdGFfYWxpLm8KIG9iai0kKENPTkZJR19QQVRBX0FNRCkJCSs9IHBhdGFfYW1kLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDE2ODNlYmQuLmY0ZWE1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMzAyMiw3ICszMDIyLDcgQEAKIAljYXNlIFdSSVRFXzE2OgogCQlyZXR1cm4gYXRhX3Njc2lfcndfeGxhdDsKIAotCWNhc2UgMHg5MyAvKldSSVRFX1NBTUVfMTYqLzoKKwljYXNlIFdSSVRFX1NBTUVfMTY6CiAJCXJldHVybiBhdGFfc2NzaV93cml0ZV9zYW1lX3hsYXQ7CiAKIAljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IGVmYTg3NzMuLjc0MTA2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTIyNzUsNyArMjI3NSw3IEBACiAJYXAgPSBxYy0+YXA7CiAJLyogRHJhaW4gdXAgdG8gNjRLIG9mIGRhdGEgYmVmb3JlIHdlIGdpdmUgdXAgdGhpcyByZWNvdmVyeSBtZXRob2QgKi8KIAlmb3IgKGNvdW50ID0gMDsgKGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApICYgQVRBX0RSUSkKLQkJCQkJCSYmIGNvdW50IDwgMzI3Njg7IGNvdW50KyspCisJCQkJCQkmJiBjb3VudCA8IDY1NTM2OyBjb3VudCArPSAyKQogCQlpb3JlYWQxNihhcC0+aW9hZGRyLmRhdGFfYWRkcik7CiAKIAkvKiBDYW4gYmVjb21lIERFQlVHIGxhdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggYzRiNDdhMy4uMDJjODFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMTU1Nyw2ICsxNTU3LDI1IEBACiAJUF9BVEFQSV9ETUFSUSwKIAlQX0FUQVBJX0lOVFJRLAogCVBfQVRBUElfSU9SRFksCisJUF9BVEFQSV9EMEEsCisJUF9BVEFQSV9EMUEsCisJUF9BVEFQSV9EMkEsCisJUF9BVEFQSV9EM0EsCisJUF9BVEFQSV9ENEEsCisJUF9BVEFQSV9ENUEsCisJUF9BVEFQSV9ENkEsCisJUF9BVEFQSV9EN0EsCisJUF9BVEFQSV9EOEEsCisJUF9BVEFQSV9EOUEsCisJUF9BVEFQSV9EMTBBLAorCVBfQVRBUElfRDExQSwKKwlQX0FUQVBJX0QxMkEsCisJUF9BVEFQSV9EMTNBLAorCVBfQVRBUElfRDE0QSwKKwlQX0FUQVBJX0QxNUEsCisJUF9BVEFQSV9BMEEsCisJUF9BVEFQSV9BMUEsCisJUF9BVEFQSV9BMkEsCiAJMAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKaW5kZXggZGFkZmMzNS4uMGVmYjFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfY21kNjR4IgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuNSIKIAogLyoKICAqIENNRDY0eCBzcGVjaWZpYyByZWdpc3RlcnMgZGVmaW5pdGlvbi4KQEAgLTIxOSw3ICsyMTksNyBAQAogCQlyZWdVIHw9IHVkbWFfZGF0YVthZGV2LT5kbWFfbW9kZSAtIFhGRVJfVURNQV8wXSA8PCBzaGlmdDsKIAkJLyogTWVyZ2UgdGhlIGNvbnRyb2wgYml0cyAqLwogCQlyZWdVIHw9IDEgPDwgYWRldi0+ZGV2bm87IC8qIFVETUEgb24gKi8KLQkJaWYgKGFkZXYtPmRtYV9tb2RlID4gMikJLyogMTVuUyB0aW1pbmcgKi8KKwkJaWYgKGFkZXYtPmRtYV9tb2RlID4gWEZFUl9VRE1BXzIpIC8qIDE1blMgdGltaW5nICovCiAJCQlyZWdVIHw9IDQgPDwgYWRldi0+ZGV2bm87CiAJfSBlbHNlIHsKIAkJcmVnVSAmPSB+ICgxIDw8IGFkZXYtPmRldm5vKTsJLyogVURNQSBvZmYgKi8KQEAgLTI1NCwxMDkgKzI1NCwxNyBAQAogfQogCiAvKioKLSAqCWNtZDY0eF9ibWRtYV9zdG9wCS0JRE1BIHN0b3AgY2FsbGJhY2sKKyAqCWNtZDY0NnIxX2RtYV9zdG9wCS0JRE1BIHN0b3AgY2FsbGJhY2sKICAqCUBxYzogQ29tbWFuZCBpbiBwcm9ncmVzcwogICoKLSAqCVRyYWNrIHRoZSBjb21wbGV0aW9uIG9mIGxpdmUgRE1BIGNvbW1hbmRzIGFuZCBjbGVhciB0aGUKLSAqCWhvc3QtPnByaXZhdGVfZGF0YSBETUEgdHJhY2tpbmcgZmxhZyBhcyB3ZSBkby4KKyAqCVN0dWIgZm9yIG5vdyB3aGlsZSBpbnZlc3RpZ2F0aW5nIHRoZSByMSBxdWlyayBpbiB0aGUgb2xkIGRyaXZlci4KICAqLwogCi1zdGF0aWMgdm9pZCBjbWQ2NHhfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHZvaWQgY21kNjQ2cjFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJYXRhX2JtZG1hX3N0b3AocWMpOwotCVdBUk5fT04oYXAtPmhvc3QtPnByaXZhdGVfZGF0YSAhPSBhcCk7Ci0JYXAtPmhvc3QtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiB9CiAKLS8qKgotICoJY21kNjR4X3FjX2RlZmVyCQktCURlZmVyIGxvZ2ljIGZvciBjaGlwIGxpbWl0cwotICoJQHFjOiBxdWV1ZWQgY29tbWFuZAotICoKLSAqCURlY2lkZSB3aGV0aGVyIHdlIGNhbiBpc3N1ZSB0aGUgY29tbWFuZC4gQ2FsbGVkIHVuZGVyIHRoZSBob3N0IGxvY2suCi0gKi8KLQotc3RhdGljIGludCBjbWQ2NHhfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7Ci0Jc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKLQlpbnQgcmM7Ci0JaW50IGRtYSA9IDA7Ci0KLQkvKiBBcHBseSB0aGUgQVRBIHJ1bGVzIGZpcnN0ICovCi0JcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBUElfUFJPVF9ETUEgfHwKLQkJCXFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9ETUEpCi0JCWRtYSA9IDE7Ci0KLQkvKiBJZiB0aGUgb3RoZXIgcG9ydCBpcyBub3QgbGl2ZSB0aGVuIGlzc3VlIHRoZSBjb21tYW5kICovCi0JaWYgKGFsdCA9PSBOVUxMIHx8ICFhbHQtPnFjX2FjdGl2ZSkgewotCQlpZiAoZG1hKQotCQkJaG9zdC0+cHJpdmF0ZV9kYXRhID0gcWMtPmFwOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogSWYgdGhlcmUgaXMgYSBsaXZlIERNQSBjb21tYW5kIHRoZW4gd2FpdCAqLwotCWlmIChob3N0LT5wcml2YXRlX2RhdGEgIT0gTlVMTCkKLQkJcmV0dXJuIAlBVEFfREVGRVJfUE9SVDsKLQlpZiAoZG1hKQotCQkvKiBDYW5ub3Qgb3ZlcmxhcCBvdXIgRE1BIGNvbW1hbmQgKi8KLQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWNtZDY0eF9pbnRlcnJ1cHQgLSBBVEEgaG9zdCBpbnRlcnJ1cHQgaGFuZGxlcgotICoJQGlycTogaXJxIGxpbmUgKHVudXNlZCkKLSAqCUBkZXZfaW5zdGFuY2U6IHBvaW50ZXIgdG8gb3VyIGF0YV9ob3N0IGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICoKLSAqCU91ciBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgUENJIElERSBkZXZpY2VzLiAgQ2FsbHMKLSAqCWF0YV9zZmZfaG9zdF9pbnRyKCkgZm9yIGVhY2ggcG9ydCB0aGF0IGlzIGZsYWdnaW5nIGFuIElSUS4gV2UgY2Fubm90Ci0gKgl1c2UgdGhlIGRlZmF1bHRzIGFzIHdlIG5lZWQgdG8gYXZvaWQgdG91Y2hpbmcgc3RhdHVzL2FsdHN0YXR1cyBkdXJpbmcKLSAqCWEgRE1BLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglPYnRhaW5zIGhvc3QgbG9jayBkdXJpbmcgb3BlcmF0aW9uLgotICoKLSAqCVJFVFVSTlM6Ci0gKglJUlFfTk9ORSBvciBJUlFfSEFORExFRC4KLSAqLwotaXJxcmV0dXJuX3QgY21kNjR4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0LT5kZXYpOwotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBjb25zdCB1OCBpcnFfcmVnWzJdID0geyBDRlIsIEFSVFRJTTIzIH07Ci0Jc3RhdGljIGNvbnN0IHU4IGlycV9tYXNrWzJdID0geyAxIDw8IDIsIDEgPDwgNCB9OwotCi0JLyogVE9ETzogbWFrZSBfaXJxc2F2ZSBjb25kaXRpb25hbCBvbiB4ODYgUENJIElERSBsZWdhY3kgbW9kZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7Ci0JCXN0cnVjdCBhdGFfcG9ydCAqYXA7Ci0JCXU4IHJlZzsKLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBpcnFfcmVnW2ldLCAmcmVnKTsKLQkJYXAgPSBob3N0LT5wb3J0c1tpXTsKLQkJaWYgKGFwICYmIChyZWcgJiBpcnFfbWFza1tpXSkgJiYKLQkJICAgICEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRElTQUJMRUQpKSB7Ci0JCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwotCi0JCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7Ci0JCQlpZiAocWMgJiYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSAmJgotCQkJICAgIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCi0JCQkJaGFuZGxlZCB8PSBhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Ci19CiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjbWQ2NHhfc2h0ID0gewogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKQEAgLTM2NSw4ICsyNzMsNiBAQAogCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLnNldF9waW9tb2RlCT0gY21kNjR4X3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGNtZDY0eF9zZXRfZG1hbW9kZSwKLQkuYm1kbWFfc3RvcAk9IGNtZDY0eF9ibWRtYV9zdG9wLAotCS5xY19kZWZlcgk9IGNtZDY0eF9xY19kZWZlciwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjbWQ2NHhfcG9ydF9vcHMgPSB7CkBAIC0zNzYsNiArMjgyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNtZDY0NnIxX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwk9ICZjbWQ2NHhfYmFzZV9vcHMsCisJLmJtZG1hX3N0b3AJPSBjbWQ2NDZyMV9ibWRtYV9zdG9wLAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogfTsKIApAQCAtMzgzLDcgKzI5MCw2IEBACiAJLmluaGVyaXRzCT0gJmNtZDY0eF9iYXNlX29wcywKIAkuYm1kbWFfc3RvcAk9IGNtZDY0OF9ibWRtYV9zdG9wLAogCS5jYWJsZV9kZXRlY3QJPSBjbWQ2NDhfY2FibGVfZGV0ZWN0LAotCS5xY19kZWZlcgk9IGF0YV9zdGRfcWNfZGVmZXIKIH07CiAKIHN0YXRpYyBpbnQgY21kNjR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC00MzIsNyArMzM4LDYgQEAKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZjbWRfaW5mb1tpZC0+ZHJpdmVyX2RhdGFdLCBOVUxMIH07CiAJdTggbXJkbW9kZTsKIAlpbnQgcmM7Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCiAJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKQpAQCAtNDUwLDI1ICszNTUsMjAgQEAKIAkJCXBwaVswXSA9ICZjbWRfaW5mb1szXTsKIAl9CiAKLQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE1SRE1PREUsICZtcmRtb2RlKTsKIAltcmRtb2RlICY9IH4gMHgzMDsJLyogSVJRIHNldCB1cCAqLwogCW1yZG1vZGUgfD0gMHgwMjsJLyogTWVtb3J5IHJlYWQgbGluZSBlbmFibGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgTVJETU9ERSwgbXJkbW9kZSk7CiAKKwkvKiBGb3JjZSBQSU8gMCBoZXJlLi4gKi8KKwogCS8qIFBQQyBzcGVjaWZpYyBmaXh1cCBjb3BpZWQgZnJvbSBvbGQgZHJpdmVyICovCiAjaWZkZWYgQ09ORklHX1BQQwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBVRElERVRDUjAsIDB4RjApOwogI2VuZGlmCi0JcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JLyogV2UgdXNlIHRoaXMgcG9pbnRlciB0byB0cmFjayB0aGUgQVAgd2hpY2ggaGFzIERNQSBydW5uaW5nICovCi0JaG9zdC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCXJldHVybiBhdGFfcGNpX3NmZl9hY3RpdmF0ZV9ob3N0KGhvc3QsIGNtZDY0eF9pbnRlcnJ1cHQsICZjbWQ2NHhfc2h0KTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY21kNjR4X3NodCwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggOWEwOWExYi4uZGQyNmJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMwkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA3CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA5CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKgogICogVE9ETwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4Mm4iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuNyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMy44IgogCiBlbnVtIHsKIAlIUFRfUENJX0ZBU1QJPQkoMSA8PCAzMSksCkBAIC0yNjQsNyArMjY0LDcgQEAKIAogc3RhdGljIHZvaWQgaHB0M3gybl9zZXRfY2xvY2soc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHNvdXJjZSkKIHsKLQl2b2lkIF9faW9tZW0gKmJtZG1hID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyOworCXZvaWQgX19pb21lbSAqYm1kbWEgPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHIgLSBhcC0+cG9ydF9ubyAqIDg7CiAKIAkvKiBUcmlzdGF0ZSB0aGUgYnVzICovCiAJaW93cml0ZTgoMHg4MCwgYm1kbWErMHg3Myk7CkBAIC0yNzQsOSArMjc0LDkgQEAKIAlpb3dyaXRlOChzb3VyY2UsIGJtZG1hKzB4N0IpOwogCWlvd3JpdGU4KDB4QzAsIGJtZG1hKzB4NzkpOwogCi0JLyogUmVzZXQgc3RhdGUgbWFjaGluZXMgKi8KLQlpb3dyaXRlOCgweDM3LCBibWRtYSsweDcwKTsKLQlpb3dyaXRlOCgweDM3LCBibWRtYSsweDc0KTsKKwkvKiBSZXNldCBzdGF0ZSBtYWNoaW5lcywgYXZvaWQgZW5hYmxpbmcgdGhlIGRpc2FibGVkIGNoYW5uZWxzICovCisJaW93cml0ZTgoaW9yZWFkOChibWRtYSsweDcwKSB8IDB4MzIsIGJtZG1hKzB4NzApOworCWlvd3JpdGU4KGlvcmVhZDgoYm1kbWErMHg3NCkgfCAweDMyLCBibWRtYSsweDc0KTsKIAogCS8qIENvbXBsZXRlIHJlc2V0ICovCiAJaW93cml0ZTgoMHgwMCwgYm1kbWErMHg3OSk7CkBAIC0yODYsMjEgKzI4NiwxMCBAQAogCWlvd3JpdGU4KDB4MDAsIGJtZG1hKzB4NzcpOwogfQogCi0vKiBDaGVjayBpZiBvdXIgcGFydG5lciBpbnRlcmZhY2UgaXMgYnVzeSAqLwotCi1zdGF0aWMgaW50IGhwdDN4Mm5fcGFpcl9pZGxlKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IGF0YV9wb3J0ICpwYWlyID0gaG9zdC0+cG9ydHNbYXAtPnBvcnRfbm8gXiAxXTsKLQotCWlmIChwYWlyLT5oc21fdGFza19zdGF0ZSA9PSBIU01fU1RfSURMRSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaHB0M3gybl91c2VfZHBsbChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd3JpdGluZykKIHsKIAlsb25nIGZsYWdzID0gKGxvbmcpYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwogCS8qIFNlZSBpZiB3ZSBzaG91bGQgdXNlIHRoZSBEUExMICovCiAJaWYgKHdyaXRpbmcpCiAJCXJldHVybiBVU0VfRFBMTDsJLyogTmVlZGVkIGZvciB3cml0ZSAqLwpAQCAtMzA5LDIwICsyOTgsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBocHQzeDJuX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFsdCA9IGFwLT5ob3N0LT5wb3J0c1thcC0+cG9ydF9ubyBeIDFdOworCWludCByYywgZmxhZ3MgPSAobG9uZylhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCBkcGxsID0gaHB0M3gybl91c2VfZHBsbChhcCwgcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKKworCS8qIEZpcnN0IGFwcGx5IHRoZSB1c3VhbCBydWxlcyAqLworCXJjID0gYXRhX3N0ZF9xY19kZWZlcihxYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCWlmICgoZmxhZ3MgJiBVU0VfRFBMTCkgIT0gZHBsbCAmJiBhbHQtPnFjX2FjdGl2ZSkKKwkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGhwdDN4Mm5fcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiA9ICZxYy0+dGY7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlpbnQgZmxhZ3MgPSAobG9uZylhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCBkcGxsID0gaHB0M3gybl91c2VfZHBsbChhcCwgcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKIAotCWlmIChocHQzeDJuX3BhaXJfaWRsZShhcCkpIHsKLQkJaW50IGRwbGwgPSBocHQzeDJuX3VzZV9kcGxsKGFwLCAodGYtPmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSk7Ci0JCWlmICgoZmxhZ3MgJiBVU0VfRFBMTCkgIT0gZHBsbCkgewotCQkJaWYgKGRwbGwgPT0gMSkKLQkJCQlocHQzeDJuX3NldF9jbG9jayhhcCwgMHgyMSk7Ci0JCQllbHNlCi0JCQkJaHB0M3gybl9zZXRfY2xvY2soYXAsIDB4MjMpOwotCQl9CisJaWYgKChmbGFncyAmIFVTRV9EUExMKSAhPSBkcGxsKSB7CisJCWZsYWdzICY9IH5VU0VfRFBMTDsKKwkJZmxhZ3MgfD0gZHBsbDsKKwkJYXAtPmhvc3QtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopKGxvbmcpZmxhZ3M7CisKKwkJaHB0M3gybl9zZXRfY2xvY2soYXAsIGRwbGwgPyAweDIxIDogMHgyMyk7CiAJfQogCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KQEAgLTMzOSw2ICszNDMsOCBAQAogCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKIAkuYm1kbWFfc3RvcAk9IGhwdDN4Mm5fYm1kbWFfc3RvcCwKKworCS5xY19kZWZlcgk9IGhwdDN4Mm5fcWNfZGVmZXIsCiAJLnFjX2lzc3VlCT0gaHB0M3gybl9xY19pc3N1ZSwKIAogCS5jYWJsZV9kZXRlY3QJPSBocHQzeDJuX2NhYmxlX2RldGVjdCwKQEAgLTQ1NCw3ICs0NjAsNyBAQAogCXVuc2lnbmVkIGludCBmX2xvdywgZl9oaWdoOwogCWludCBhZGp1c3Q7CiAJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQl2b2lkICpocHJpdiA9IE5VTEw7CisJdm9pZCAqaHByaXYgPSAodm9pZCAqKVVTRV9EUExMOwogCWludCByYzsKIAogCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC01MzksNyArNTQ1LDcgQEAKIAkvKiBTZXQgb3VyIHByaXZhdGUgZGF0YSB1cC4gV2Ugb25seSBuZWVkIGEgZmV3IGZsYWdzIHNvIHdlIHVzZQogCSAgIGl0IGRpcmVjdGx5ICovCiAJaWYgKHBjaV9taHogPiA2MCkgewotCQlocHJpdiA9ICh2b2lkICopUENJNjY7CisJCWhwcml2ID0gKHZvaWQgKikoUENJNjYgfCBVU0VfRFBMTCk7CiAJCS8qCiAJCSAqIE9uICBIUFQzNzFOLCBpZiBBVEEgY2xvY2sgaXMgNjYgTUh6IHdlIG11c3Qgc2V0IGJpdCAyIGluCiAJCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tYWNpby5jIGIvZHJpdmVycy9hdGEvcGF0YV9tYWNpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzdiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9wYXRhX21hY2lvLmMKQEAgLTAsMCArMSwxNDI3IEBACisvKgorICogTGliYXRhIGJhc2VkIGRyaXZlciBmb3IgQXBwbGUgIm1hY2lvIiBmYW1pbHkgb2YgUEFUQSBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAyMDA4LzIwMDkgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAKKyAqICAgICAgICAgICAgICAgICAgICAgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBTb21lIGJpdHMgYW5kIHBpZWNlcyBmcm9tIGRyaXZlcnMvaWRlL3BwYy9wbWFjLmMKKyAqCisgKi8KKworI3VuZGVmIERFQlVHCisjdW5kZWYgREVCVUdfRE1BCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8bGludXgvYWRiLmg+CisjaW5jbHVkZSA8bGludXgvcG11Lmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaW8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGJkbWEuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9tZWRpYWJheS5oPgorCisjaWZkZWYgREVCVUdfRE1BCisjZGVmaW5lIGRldl9kYmdkbWEoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkZXZfZGJnZG1hKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJKHsgaWYgKDApIGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCBmb3JtYXQsICMjYXJnKTsgMDsgfSkKKyNlbmRpZgorCisjZGVmaW5lIERSVl9OQU1FCSJwYXRhX21hY2lvIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC45IgorCisvKiBNb2RlbHMgb2YgbWFjaW8gQVRBIGNvbnRyb2xsZXIgKi8KK2VudW0geworCWNvbnRyb2xsZXJfb2hhcmUsCS8qIE9IYXJlIGJhc2VkICovCisJY29udHJvbGxlcl9oZWF0aHJvdywJLyogSGVhdGhyb3cvUGFkZGluZ3RvbiAqLworCWNvbnRyb2xsZXJfa2xfYXRhMywJLyogS2V5TGFyZ28gQVRBLTMgKi8KKwljb250cm9sbGVyX2tsX2F0YTQsCS8qIEtleUxhcmdvIEFUQS00ICovCisJY29udHJvbGxlcl91bl9hdGE2LAkvKiBVbmlOb3J0aDIgQVRBLTYgKi8KKwljb250cm9sbGVyX2syX2F0YTYsCS8qIEsyIEFUQS02ICovCisJY29udHJvbGxlcl9zaF9hdGE2LAkvKiBTaGFzdGEgQVRBLTYgKi8KK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBtYWNpb19hdGFfbmFtZXNbXSA9IHsKKwkiT0hhcmUgQVRBIiwJCS8qIE9IYXJlIGJhc2VkICovCisJIkhlYXRocm93IEFUQSIsCQkvKiBIZWF0aHJvdy9QYWRkaW5ndG9uICovCisJIktleUxhcmdvIEFUQS0zIiwJLyogS2V5TGFyZ28gQVRBLTMgKE1ETUEgb25seSkgKi8KKwkiS2V5TGFyZ28gQVRBLTQiLAkvKiBLZXlMYXJnbyBBVEEtNCAoVURNQS82NikgKi8KKwkiVW5pTm9ydGggQVRBLTYiLAkvKiBVbmlOb3J0aDIgQVRBLTYgKFVETUEvMTAwKSAqLworCSJLMiBBVEEtNiIsCQkvKiBLMiBBVEEtNiAoVURNQS8xMDApICovCisJIlNoYXN0YSBBVEEtNiIsCQkvKiBTaGFzdGEgQVRBLTYgKFVETUEvMTMzKSAqLworfTsKKworLyoKKyAqIEV4dHJhIHJlZ2lzdGVycywgYm90aCAzMi1iaXQgbGl0dGxlLWVuZGlhbgorICovCisjZGVmaW5lIElERV9USU1JTkdfQ09ORklHCTB4MjAwCisjZGVmaW5lIElERV9JTlRFUlJVUFQJCTB4MzAwCisKKy8qIEthdWFpIChVMikgQVRBIGhhcyBkaWZmZXJlbnQgcmVnaXN0ZXIgc2V0dXAgKi8KKyNkZWZpbmUgSURFX0tBVUFJX1BJT19DT05GSUcJMHgyMDAKKyNkZWZpbmUgSURFX0tBVUFJX1VMVFJBX0NPTkZJRwkweDIxMAorI2RlZmluZSBJREVfS0FVQUlfUE9MTF9DT05GSUcJMHgyMjAKKworLyoKKyAqIFRpbWluZyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKworLyogTnVtYmVyIG9mIElERV9TWVNDTEtfTlMgdGlja3MsIGFyZ3VtZW50IGlzIGluIG5hbm9zZWNvbmRzICovCisjZGVmaW5lIFNZU0NMS19USUNLUyh0KQkJKCgodCkgKyBJREVfU1lTQ0xLX05TIC0gMSkgLyBJREVfU1lTQ0xLX05TKQorI2RlZmluZSBTWVNDTEtfVElDS1NfNjYodCkJKCgodCkgKyBJREVfU1lTQ0xLXzY2X05TIC0gMSkgLyBJREVfU1lTQ0xLXzY2X05TKQorI2RlZmluZSBJREVfU1lTQ0xLX05TCQkzMAkvKiAzM01oeiBjZWxsICovCisjZGVmaW5lIElERV9TWVNDTEtfNjZfTlMJMTUJLyogNjZNaHogY2VsbCAqLworCisvKiAxMzNNaHogY2VsbCwgZm91bmQgaW4gc2hhc3RhLgorICogU2VlIGNvbW1lbnRzIGFib3V0IDEwMCBNaHogVW5pbm9ydGggMi4uLgorICogTm90ZSB0aGF0IFBJT19NQVNLIGFuZCBNRE1BX01BU0sgc2VlbSB0byBvdmVybGFwLCB0aGF0J3MganVzdAorICogd2VpcmQgYW5kIEkgZG9uJ3Qgbm93IHdoeSAuLiBhdCB0aGlzIHN0YWdlCisgKi8KKyNkZWZpbmUgVFJfMTMzX1BJT1JFR19QSU9fTUFTSwkJMHhmZjAwMGZmZgorI2RlZmluZSBUUl8xMzNfUElPUkVHX01ETUFfTUFTSwkJMHgwMGZmZjgwMAorI2RlZmluZSBUUl8xMzNfVURNQVJFR19VRE1BX01BU0sJMHgwMDAzZmZmZgorI2RlZmluZSBUUl8xMzNfVURNQVJFR19VRE1BX0VOCQkweDAwMDAwMDAxCisKKy8qIDEwME1oeiBjZWxsLCBmb3VuZCBpbiBVbmlub3J0aCAyIGFuZCBLMi4gSXQgYXBwZWFycyBhcyBhIHBjaSBkZXZpY2UKKyAqICgxMDZiLzAwMzMpIG9uIHVuaW5vcnRoIG9yIEsyIGludGVybmFsIFBDSSBidXMgYW5kIGl0J3MgY2xvY2sgaXMKKyAqIGNvbnRyb2xsZWQgbGlrZSBnZW0gb3IgZncuIEl0IGFwcGVhcnMgdG8gYmUgYW4gZXZvbHV0aW9uIG9mIGtleWxhcmdvCisgKiBBVEE0IHdpdGggYSB0aW1pbmcgcmVnaXN0ZXIgZXh0ZW5kZWQgdG8gMngzMmJpdHMgcmVnaXN0ZXJzIChvbmUKKyAqIGZvciBQSU8gJiBNV0RNQSBhbmQgb25lIGZvciBVRE1BLCBhbmQgYSBzaW1pbGFyIERCRE1BIGNoYW5uZWwuCisgKiBJdCBoYXMgaXQncyBvd24gbG9jYWwgZmVhdHVyZSBjb250cm9sIHJlZ2lzdGVyIGFzIHdlbGwuCisgKgorICogQWZ0ZXIgc2NyYXRjaGluZyBteSBtaW5kIG92ZXIgdGhlIHRpbWluZyB2YWx1ZXMsIGF0IGxlYXN0IGZvciBQSU8KKyAqIGFuZCBNRE1BLCBJIHRoaW5rIEkndmUgZmlndXJlZCB0aGUgZm9ybWF0IG9mIHRoZSB0aW1pbmcgcmVnaXN0ZXIsCisgKiB0aG91Z2ggSSB1c2UgcHJlLWNhbGN1bGF0ZWQgdGFibGVzIGZvciBVRE1BIGFzIHVzdWFsLi4uCisgKi8KKyNkZWZpbmUgVFJfMTAwX1BJT19BRERSU0VUVVBfTUFTSwkweGZmMDAwMDAwIC8qIFNpemUgb2YgZmllbGQgdW5rbm93biAqLworI2RlZmluZSBUUl8xMDBfUElPX0FERFJTRVRVUF9TSElGVAkyNAorI2RlZmluZSBUUl8xMDBfTURNQV9NQVNLCQkweDAwZmZmMDAwCisjZGVmaW5lIFRSXzEwMF9NRE1BX1JFQ09WRVJZX01BU0sJMHgwMGZjMDAwMAorI2RlZmluZSBUUl8xMDBfTURNQV9SRUNPVkVSWV9TSElGVAkxOAorI2RlZmluZSBUUl8xMDBfTURNQV9BQ0NFU1NfTUFTSwkJMHgwMDAzZjAwMAorI2RlZmluZSBUUl8xMDBfTURNQV9BQ0NFU1NfU0hJRlQJMTIKKyNkZWZpbmUgVFJfMTAwX1BJT19NQVNLCQkJMHhmZjAwMGZmZgorI2RlZmluZSBUUl8xMDBfUElPX1JFQ09WRVJZX01BU0sJMHgwMDAwMGZjMAorI2RlZmluZSBUUl8xMDBfUElPX1JFQ09WRVJZX1NISUZUCTYKKyNkZWZpbmUgVFJfMTAwX1BJT19BQ0NFU1NfTUFTSwkJMHgwMDAwMDAzZgorI2RlZmluZSBUUl8xMDBfUElPX0FDQ0VTU19TSElGVAkJMAorCisjZGVmaW5lIFRSXzEwMF9VRE1BUkVHX1VETUFfTUFTSwkweDAwMDBmZmZmCisjZGVmaW5lIFRSXzEwMF9VRE1BUkVHX1VETUFfRU4JCTB4MDAwMDAwMDEKKworCisvKiA2Nk1oeiBjZWxsLCBmb3VuZCBpbiBLZXlMYXJnby4gQ2FuIGRvIHVsdHJhIG1vZGUgMCB0byAyIG9uCisgKiA0MCBjb25uZWN0b3IgY2FibGUgYW5kIHRvIDQgb24gODAgY29ubmVjdG9yIG9uZS4KKyAqIENsb2NrIHVuaXQgaXMgMTVucyAoNjZNaHopCisgKgorICogMyBWYWx1ZXMgY2FuIGJlIHByb2dyYW1tZWQ6CisgKiAgLSBXcml0ZSBkYXRhIHNldHVwLCB3aGljaCBhcHBlYXJzIHRvIG1hdGNoIHRoZSBjeWNsZSB0aW1lLiBUaGV5CisgKiAgICBhbHNvIGNhbGwgaXQgRElPVyBzZXR1cC4KKyAqICAtIFJlYWR5IHRvIHBhdXNlIHRpbWUgKGZyb20gc3BlYykKKyAqICAtIEFkZHJlc3Mgc2V0dXAuIFRoYXQgb25lIGlzIHdlaXJkLiBJIGRvbid0IHNlZSB3aGVyZSBleGFjdGx5CisgKiAgICBpdCBmaXRzIGluIFVETUEgY3ljbGVzLCBJIGdvdCBpdCdzIG5hbWUgZnJvbSBhbiBvYnNjdXJlIHBpZWNlCisgKiAgICBvZiBjb21tZW50ZWQgb3V0IGNvZGUgaW4gRGFyd2luLiBUaGV5IGxlYXZlIGl0IHRvIDAsIHdlIGRvIGFzCisgKiAgICB3ZWxsLCBkZXNwaXRlIGEgY29tbWVudCB0aGF0IHdvdWxkIGxlYWQgdG8gdGhpbmsgaXQgaGFzIGEKKyAqICAgIG1pbiB2YWx1ZSBvZiA0NW5zLgorICogQXBwbGUgYWxzbyBhZGQgNjBucyB0byB0aGUgd3JpdGUgZGF0YSBzZXR1cCAob3IgY3ljbGUgdGltZSA/KSBvbgorICogcmVhZHMuCisgKi8KKyNkZWZpbmUgVFJfNjZfVURNQV9NQVNLCQkJMHhmZmYwMDAwMAorI2RlZmluZSBUUl82Nl9VRE1BX0VOCQkJMHgwMDEwMDAwMCAvKiBFbmFibGUgVWx0cmEgbW9kZSBmb3IgRE1BICovCisjZGVmaW5lIFRSXzY2X1BJT19BRERSU0VUVVBfTUFTSwkweGUwMDAwMDAwIC8qIEFkZHJlc3Mgc2V0dXAgKi8KKyNkZWZpbmUgVFJfNjZfUElPX0FERFJTRVRVUF9TSElGVAkyOQorI2RlZmluZSBUUl82Nl9VRE1BX1JEWTJQQVVTX01BU0sJMHgxZTAwMDAwMCAvKiBSZWFkeSAyIHBhdXNlIHRpbWUgKi8KKyNkZWZpbmUgVFJfNjZfVURNQV9SRFkyUEFVU19TSElGVAkyNQorI2RlZmluZSBUUl82Nl9VRE1BX1dSREFUQVNFVFVQX01BU0sJMHgwMWUwMDAwMCAvKiBXcml0ZSBkYXRhIHNldHVwIHRpbWUgKi8KKyNkZWZpbmUgVFJfNjZfVURNQV9XUkRBVEFTRVRVUF9TSElGVAkyMQorI2RlZmluZSBUUl82Nl9NRE1BX01BU0sJCQkweDAwMGZmYzAwCisjZGVmaW5lIFRSXzY2X01ETUFfUkVDT1ZFUllfTUFTSwkweDAwMGY4MDAwCisjZGVmaW5lIFRSXzY2X01ETUFfUkVDT1ZFUllfU0hJRlQJMTUKKyNkZWZpbmUgVFJfNjZfTURNQV9BQ0NFU1NfTUFTSwkJMHgwMDAwN2MwMAorI2RlZmluZSBUUl82Nl9NRE1BX0FDQ0VTU19TSElGVAkJMTAKKyNkZWZpbmUgVFJfNjZfUElPX01BU0sJCQkweGUwMDAwM2ZmCisjZGVmaW5lIFRSXzY2X1BJT19SRUNPVkVSWV9NQVNLCQkweDAwMDAwM2UwCisjZGVmaW5lIFRSXzY2X1BJT19SRUNPVkVSWV9TSElGVAk1CisjZGVmaW5lIFRSXzY2X1BJT19BQ0NFU1NfTUFTSwkJMHgwMDAwMDAxZgorI2RlZmluZSBUUl82Nl9QSU9fQUNDRVNTX1NISUZUCQkwCisKKy8qIDMzTWh6IGNlbGwsIGZvdW5kIGluIE9IYXJlLCBIZWF0aHJvdyAoJiBQYWRkaW5ndG9uKSBhbmQgS2V5TGFyZ28KKyAqIENhbiBkbyBwaW8gJiBtZG1hIG1vZGVzLCBjbG9jayB1bml0IGlzIDMwbnMgKDMzTWh6KQorICoKKyAqIFRoZSBhY2Nlc3MgdGltZSBhbmQgcmVjb3ZlcnkgdGltZSBjYW4gYmUgcHJvZ3JhbW1lZC4gU29tZSBvbGRlcgorICogRGFyd2luIGNvZGUgYmFzZSBsaW1pdCBPSGFyZSB0byAxNTBucyBjeWNsZSB0aW1lLiBJIGRlY2lkZWQgdG8gZG8KKyAqIHRoZSBzYW1lIGhlcmUgZm9yZSBzYWZldHkgYWdhaW5zdCBicm9rZW4gb2xkIGhhcmR3YXJlIDspCisgKiBUaGUgSGFsZlRpY2sgYml0LCB3aGVuIHNldCwgYWRkcyBoYWxmIGEgY2xvY2sgKDE1bnMpIHRvIHRoZSBhY2Nlc3MKKyAqIHRpbWUgYW5kIHJlbW92ZXMgb25lIGZyb20gcmVjb3ZlcnkuIEl0J3Mgbm90IHN1cHBvcnRlZCBvbiBLZXlMYXJnbworICogaW1wbGVtZW50YXRpb24gYWZhaWsuIFRoZSBFIGJpdCBhcHBlYXJzIHRvIGJlIHNldCBmb3IgUElPIG1vZGUgMCBhbmQKKyAqIGlzIHVzZWQgdG8gcmVhY2ggbG9uZyB0aW1pbmdzIHVzZWQgaW4gdGhpcyBtb2RlLgorICovCisjZGVmaW5lIFRSXzMzX01ETUFfTUFTSwkJCTB4MDAzZmY4MDAKKyNkZWZpbmUgVFJfMzNfTURNQV9SRUNPVkVSWV9NQVNLCTB4MDAxZjAwMDAKKyNkZWZpbmUgVFJfMzNfTURNQV9SRUNPVkVSWV9TSElGVAkxNgorI2RlZmluZSBUUl8zM19NRE1BX0FDQ0VTU19NQVNLCQkweDAwMDBmODAwCisjZGVmaW5lIFRSXzMzX01ETUFfQUNDRVNTX1NISUZUCQkxMQorI2RlZmluZSBUUl8zM19NRE1BX0hBTEZUSUNLCQkweDAwMjAwMDAwCisjZGVmaW5lIFRSXzMzX1BJT19NQVNLCQkJMHgwMDAwMDdmZgorI2RlZmluZSBUUl8zM19QSU9fRQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgVFJfMzNfUElPX1JFQ09WRVJZX01BU0sJCTB4MDAwMDAzZTAKKyNkZWZpbmUgVFJfMzNfUElPX1JFQ09WRVJZX1NISUZUCTUKKyNkZWZpbmUgVFJfMzNfUElPX0FDQ0VTU19NQVNLCQkweDAwMDAwMDFmCisjZGVmaW5lIFRSXzMzX1BJT19BQ0NFU1NfU0hJRlQJCTAKKworLyoKKyAqIEludGVycnVwdCByZWdpc3RlciBkZWZpbml0aW9ucy4gT25seSBwcmVzZW50IG9uIG5ld2VyIGNlbGxzCisgKiAoS2V5bGFyZ28gYW5kIGxhdGVyIGFmYWlrKSBzbyB3ZSBkb24ndCB1c2UgaXQuCisgKi8KKyNkZWZpbmUgSURFX0lOVFJfRE1BCQkJMHg4MDAwMDAwMAorI2RlZmluZSBJREVfSU5UUl9ERVZJQ0UJCQkweDQwMDAwMDAwCisKKy8qCisgKiBGQ1IgUmVnaXN0ZXIgb24gS2F1YWkuIE5vdCBzdXJlIHdoYXQgYml0IDB4NCBpcyAgLi4uCisgKi8KKyNkZWZpbmUgS0FVQUlfRkNSX1VBVEFfTUFHSUMJCTB4MDAwMDAwMDQKKyNkZWZpbmUgS0FVQUlfRkNSX1VBVEFfUkVTRVRfTgkJMHgwMDAwMDAwMgorI2RlZmluZSBLQVVBSV9GQ1JfVUFUQV9FTkFCTEUJCTB4MDAwMDAwMDEKKworCisvKiBBbGxvdyB1cCB0byAyNTYgREJETUEgY29tbWFuZHMgcGVyIHhmZXIgKi8KKyNkZWZpbmUgTUFYX0RDTURTCQkyNTYKKworLyogRG9uJ3QgbGV0IGEgRE1BIHNlZ21lbnQgZ28gYWxsIHRoZSB3YXkgdG8gNjRLICovCisjZGVmaW5lIE1BWF9EQkRNQV9TRUcJCTB4ZmYwMAorCisKKy8qCisgKiBXYWl0IDFzIGZvciBkaXNrIHRvIGFuc3dlciBvbiBJREUgYnVzIGFmdGVyIGEgaGFyZCByZXNldAorICogb2YgdGhlIGRldmljZSAodmlhIEdQSU8vRkNSKS4KKyAqCisgKiBTb21lIGRldmljZXMgc2VlbSB0byAicG9sbHV0ZSIgdGhlIGJ1cyBldmVuIGFmdGVyIGRyb3BwaW5nCisgKiB0aGUgQlNZIGJpdCAodHlwaWNhbGx5IHNvbWUgY29tYm8gZHJpdmVzIHNsYXZlIG9uIHRoZSBVRE1BCisgKiBidXMpIGFmdGVyIGEgaGFyZCByZXNldC4gU2luY2Ugd2UgaGFyZCByZXNldCBhbGwgZHJpdmVzIG9uCisgKiBLZXlMYXJnbyBBVEE2Niwgd2UgaGF2ZSB0byBrZWVwIHRoYXQgZGVsYXkgYXJvdW5kLiBJIG1heSBlbmQKKyAqIHVwIG5vdCBoYXJkIHJlc2V0dGluZyBhbnltb3JlIG9uIHRoZXNlIGFuZCBrZWVwIHRoZSBkZWxheSBvbmx5CisgKiBmb3Igb2xkZXIgaW50ZXJmYWNlcyBpbnN0ZWFkICh3ZSBoYXZlIHRvIHJlc2V0IHdoZW4gY29taW5nCisgKiBmcm9tIE1hY09TLi4uKSAtLUJlbkguCisgKi8KKyNkZWZpbmUgSURFX1dBS0VVUF9ERUxBWV9NUwkxMDAwCisKK3N0cnVjdCBwYXRhX21hY2lvX3RpbWluZzsKKworc3RydWN0IHBhdGFfbWFjaW9fcHJpdiB7CisJaW50CQkJCWtpbmQ7CisJaW50CQkJCWFhcGxfYnVzX2lkOworCWludAkJCQltZWRpYWJheSA6IDE7CisJc3RydWN0IGRldmljZV9ub2RlCQkqbm9kZTsKKwlzdHJ1Y3QgbWFjaW9fZGV2CQkqbWRldjsKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCWludAkJCQlpcnE7CisJdTMyCQkJCXRyZWdbMl1bMl07CisJdm9pZCBfX2lvbWVtCQkJKnRmcmVnczsKKwl2b2lkIF9faW9tZW0JCQkqa2F1YWlfZmNyOworCXN0cnVjdCBkYmRtYV9jbWQgKgkJZG1hX3RhYmxlX2NwdTsKKwlkbWFfYWRkcl90CQkJZG1hX3RhYmxlX2RtYTsKKwlzdHJ1Y3QgYXRhX2hvc3QJCQkqaG9zdDsKKwljb25zdCBzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcJKnRpbWluZ3M7Cit9OworCisvKiBQcmV2aW91cyB2YXJpYW50cyBvZiB0aGlzIGRyaXZlciB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1pbmdzCisgKiBmb3IgdmFyaW91cyB2YXJpYW50cyBvZiB0aGUgY2hpcCBhbmQgdXNlIHRhYmxlcyBmb3Igb3RoZXJzLgorICoKKyAqIE5vdCBvbmx5IHdhcyB0aGlzIGNvbmZ1c2luZywgYnV0IGluIGFkZGl0aW9uLCBpdCBpc24ndCBjbGVhcgorICogd2hldGhlciBvdXIgY2FsY3VsYXRpb24gY29kZSB3YXMgY29ycmVjdC4gSXQgZGlkbid0IGVudGlyZWx5CisgKiBtYXRjaCB0aGUgZGFyd2luIGNvZGUgYW5kIHdoYXRldmVyIGRvY3VtZW50YXRpb24gSSBjb3VsZCBmaW5kCisgKiBvbiB0aGVzZSBjZWxscworICoKKyAqIEkgZGVjaWRlZCB0byBlbnRpcmVseSByZWx5IG9uIGEgdGFibGUgaW5zdGVhZCBmb3IgdGhpcyB2ZXJzaW9uCisgKiBvZiB0aGUgZHJpdmVyLiBBbHNvLCBiZWNhdXNlIEkgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgZGVyYXRlZAorICogbW9kZXMgYW5kIHJlYWxseSBvbGQgSFcgb3RoZXIgdGhhbiBtYWtpbmcgaXQgd29yaywgSSdtIG5vdCBnb2luZworICogdG8gY2FsY3VsYXRlIC8gc25vb3AgdGltaW5nIHZhbHVlcyBmb3Igc29tZXRoaW5nIGVsc2UgdGhhbiB0aGUKKyAqIHN0YW5kYXJkIG1vZGVzLgorICovCitzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcgeworCWludAltb2RlOworCXUzMglyZWcxOwkvKiBCaXRzIHRvIHNldCBpbiBmaXJzdCB0aW1pbmcgcmVnICovCisJdTMyCXJlZzI7CS8qIEJpdHMgdG8gc2V0IGluIHNlY29uZCB0aW1pbmcgcmVnICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhdGFfbWFjaW9fdGltaW5nIHBhdGFfbWFjaW9fb2hhcmVfdGltaW5nc1tdID0geworCXsgWEZFUl9QSU9fMCwJCTB4MDAwMDA1MjYsCTAsIH0sCisJeyBYRkVSX1BJT18xLAkJMHgwMDAwMDA4NSwJMCwgfSwKKwl7IFhGRVJfUElPXzIsCQkweDAwMDAwMDI1LAkwLCB9LAorCXsgWEZFUl9QSU9fMywJCTB4MDAwMDAwMjUsCTAsIH0sCisJeyBYRkVSX1BJT180LAkJMHgwMDAwMDAyNSwJMCwgfSwKKwl7IFhGRVJfTVdfRE1BXzAsCTB4MDAwNzQwMDAsCTAsIH0sCisJeyBYRkVSX01XX0RNQV8xLAkweDAwMjIxMDAwLAkwLCB9LAorCXsgWEZFUl9NV19ETUFfMiwJMHgwMDIxMTAwMCwJMCwgfSwKKwl7IC0xLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcgcGF0YV9tYWNpb19oZWF0aHJvd190aW1pbmdzW10gPSB7CisJeyBYRkVSX1BJT18wLAkJMHgwMDAwMDUyNiwJMCwgfSwKKwl7IFhGRVJfUElPXzEsCQkweDAwMDAwMDg1LAkwLCB9LAorCXsgWEZFUl9QSU9fMiwJCTB4MDAwMDAwMjUsCTAsIH0sCisJeyBYRkVSX1BJT18zLAkJMHgwMDAwMDAyNSwJMCwgfSwKKwl7IFhGRVJfUElPXzQsCQkweDAwMDAwMDI1LAkwLCB9LAorCXsgWEZFUl9NV19ETUFfMCwJMHgwMDA3NDAwMCwJMCwgfSwKKwl7IFhGRVJfTVdfRE1BXzEsCTB4MDAyMjEwMDAsCTAsIH0sCisJeyBYRkVSX01XX0RNQV8yLAkweDAwMjExMDAwLAkwLCB9LAorCXsgLTEsIDAsIDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYXRhX21hY2lvX3RpbWluZyBwYXRhX21hY2lvX2tsMzNfdGltaW5nc1tdID0geworCXsgWEZFUl9QSU9fMCwJCTB4MDAwMDA1MjYsCTAsIH0sCisJeyBYRkVSX1BJT18xLAkJMHgwMDAwMDA4NSwJMCwgfSwKKwl7IFhGRVJfUElPXzIsCQkweDAwMDAwMDI1LAkwLCB9LAorCXsgWEZFUl9QSU9fMywJCTB4MDAwMDAwMjUsCTAsIH0sCisJeyBYRkVSX1BJT180LAkJMHgwMDAwMDAyNSwJMCwgfSwKKwl7IFhGRVJfTVdfRE1BXzAsCTB4MDAwODQwMDAsCTAsIH0sCisJeyBYRkVSX01XX0RNQV8xLAkweDAwMDIxODAwLAkwLCB9LAorCXsgWEZFUl9NV19ETUFfMiwJMHgwMDAxMTgwMCwJMCwgfSwKKwl7IC0xLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcgcGF0YV9tYWNpb19rbDY2X3RpbWluZ3NbXSA9IHsKKwl7IFhGRVJfUElPXzAsCQkweDAwMDAwMzhjLAkwLCB9LAorCXsgWEZFUl9QSU9fMSwJCTB4MDAwMDAyMGEsCTAsIH0sCisJeyBYRkVSX1BJT18yLAkJMHgwMDAwMDEyNywJMCwgfSwKKwl7IFhGRVJfUElPXzMsCQkweDAwMDAwMGM2LAkwLCB9LAorCXsgWEZFUl9QSU9fNCwJCTB4MDAwMDAwNjUsCTAsIH0sCisJeyBYRkVSX01XX0RNQV8wLAkweDAwMDg0MDAwLAkwLCB9LAorCXsgWEZFUl9NV19ETUFfMSwJMHgwMDAyOTgwMCwJMCwgfSwKKwl7IFhGRVJfTVdfRE1BXzIsCTB4MDAwMTk0MDAsCTAsIH0sCisJeyBYRkVSX1VETUFfMCwJCTB4MTkxMDAwMDAsCTAsIH0sCisJeyBYRkVSX1VETUFfMSwJCTB4MTRkMDAwMDAsCTAsIH0sCisJeyBYRkVSX1VETUFfMiwJCTB4MTA5MDAwMDAsCTAsIH0sCisJeyBYRkVSX1VETUFfMywJCTB4MGM3MDAwMDAsCTAsIH0sCisJeyBYRkVSX1VETUFfNCwJCTB4MGM1MDAwMDAsCTAsIH0sCisJeyAtMSwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhdGFfbWFjaW9fdGltaW5nIHBhdGFfbWFjaW9fa2F1YWlfdGltaW5nc1tdID0geworCXsgWEZFUl9QSU9fMCwJCTB4MDgwMDBhOTIsCTAsIH0sCisJeyBYRkVSX1BJT18xLAkJMHgwODAwMDYwZiwJMCwgfSwKKwl7IFhGRVJfUElPXzIsCQkweDA4MDAwMzhiLAkwLCB9LAorCXsgWEZFUl9QSU9fMywJCTB4MDUwMDAyNDksCTAsIH0sCisJeyBYRkVSX1BJT180LAkJMHgwNDAwMDE0OCwJMCwgfSwKKwl7IFhGRVJfTVdfRE1BXzAsCTB4MDA2MTgwMDAsCTAsIH0sCisJeyBYRkVSX01XX0RNQV8xLAkweDAwMjA5MDAwLAkwLCB9LAorCXsgWEZFUl9NV19ETUFfMiwJMHgwMDE0ODAwMCwJMCwgfSwKKwl7IFhGRVJfVURNQV8wLAkJICAgICAgICAgMCwJMHgwMDAwNzBjMSwgfSwKKwl7IFhGRVJfVURNQV8xLAkJICAgICAgICAgMCwJMHgwMDAwNWQ4MSwgfSwKKwl7IFhGRVJfVURNQV8yLAkJICAgICAgICAgMCwJMHgwMDAwNGE2MSwgfSwKKwl7IFhGRVJfVURNQV8zLAkJICAgICAgICAgMCwJMHgwMDAwM2E1MSwgfSwKKwl7IFhGRVJfVURNQV80LAkJICAgICAgICAgMCwJMHgwMDAwMmEzMSwgfSwKKwl7IFhGRVJfVURNQV81LAkJICAgICAgICAgMCwJMHgwMDAwMjkyMSwgfSwKKwl7IC0xLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcgcGF0YV9tYWNpb19zaGFzdGFfdGltaW5nc1tdID0geworCXsgWEZFUl9QSU9fMCwJCTB4MGEwMDBjOTcsCTAsIH0sCisJeyBYRkVSX1BJT18xLAkJMHgwNzAwMDcxMiwJMCwgfSwKKwl7IFhGRVJfUElPXzIsCQkweDA0MDAwM2NkLAkwLCB9LAorCXsgWEZFUl9QSU9fMywJCTB4MDUwMDAyOGIsCTAsIH0sCisJeyBYRkVSX1BJT180LAkJMHgwNDAwMDEwYSwJMCwgfSwKKwl7IFhGRVJfTVdfRE1BXzAsCTB4MDA4MjA4MDAsCTAsIH0sCisJeyBYRkVSX01XX0RNQV8xLAkweDAwMjhiMDAwLAkwLCB9LAorCXsgWEZFUl9NV19ETUFfMiwJMHgwMDFjYTAwMCwJMCwgfSwKKwl7IFhGRVJfVURNQV8wLAkJICAgICAgICAgMCwJMHgwMDAzNTkwMSwgfSwKKwl7IFhGRVJfVURNQV8xLAkJICAgICAgICAgMCwJMHgwMDAzNDhiMSwgfSwKKwl7IFhGRVJfVURNQV8yLAkJICAgICAgICAgMCwJMHgwMDAzMzg4MSwgfSwKKwl7IFhGRVJfVURNQV8zLAkJICAgICAgICAgMCwJMHgwMDAzMzg2MSwgfSwKKwl7IFhGRVJfVURNQV80LAkJICAgICAgICAgMCwJMHgwMDAzMzg0MSwgfSwKKwl7IFhGRVJfVURNQV81LAkJICAgICAgICAgMCwJMHgwMDAzMzAzMSwgfSwKKwl7IFhGRVJfVURNQV82LAkJICAgICAgICAgMCwJMHgwMDAzMzAyMSwgfSwKKwl7IC0xLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcgKnBhdGFfbWFjaW9fZmluZF90aW1pbmcoCisJCQkJCSAgICBzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2LAorCQkJCQkgICAgaW50IG1vZGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBwcml2LT50aW1pbmdzW2ldLm1vZGUgPiAwOyBpKyspIHsKKwkJaWYgKHByaXYtPnRpbWluZ3NbaV0ubW9kZSA9PSBtb2RlKQorCQkJcmV0dXJuICZwcml2LT50aW1pbmdzW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZCBwYXRhX21hY2lvX2FwcGx5X3RpbWluZ3Moc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gYXAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKnJiYXNlID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKworCWlmIChwcml2LT5raW5kID09IGNvbnRyb2xsZXJfc2hfYXRhNiB8fAorCSAgICBwcml2LT5raW5kID09IGNvbnRyb2xsZXJfdW5fYXRhNiB8fAorCSAgICBwcml2LT5raW5kID09IGNvbnRyb2xsZXJfazJfYXRhNikgeworCQl3cml0ZWwocHJpdi0+dHJlZ1tkZXZpY2VdWzBdLCByYmFzZSArIElERV9LQVVBSV9QSU9fQ09ORklHKTsKKwkJd3JpdGVsKHByaXYtPnRyZWdbZGV2aWNlXVsxXSwgcmJhc2UgKyBJREVfS0FVQUlfVUxUUkFfQ09ORklHKTsKKwl9IGVsc2UKKwkJd3JpdGVsKHByaXYtPnRyZWdbZGV2aWNlXVswXSwgcmJhc2UgKyBJREVfVElNSU5HX0NPTkZJRyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9fZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlKQoreworCWF0YV9zZmZfZGV2X3NlbGVjdChhcCwgZGV2aWNlKTsKKworCS8qIEFwcGx5IHRpbWluZ3MgKi8KKwlwYXRhX21hY2lvX2FwcGx5X3RpbWluZ3MoYXAsIGRldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9fc2V0X3RpbWluZ3Moc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkgICBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gYXAtPnByaXZhdGVfZGF0YTsKKwljb25zdCBzdHJ1Y3QgcGF0YV9tYWNpb190aW1pbmcgKnQ7CisKKwlkZXZfZGJnKHByaXYtPmRldiwgIlNldCB0aW1pbmdzOiBERVY9JWQsUElPPTB4JXggKCVzKSxETUE9MHgleCAoJXMpXG4iLAorCQlhZGV2LT5kZXZubywKKwkJYWRldi0+cGlvX21vZGUsCisJCWF0YV9tb2RlX3N0cmluZyhhdGFfeGZlcl9tb2RlMm1hc2soYWRldi0+cGlvX21vZGUpKSwKKwkJYWRldi0+ZG1hX21vZGUsCisJCWF0YV9tb2RlX3N0cmluZyhhdGFfeGZlcl9tb2RlMm1hc2soYWRldi0+ZG1hX21vZGUpKSk7CisKKwkvKiBGaXJzdCBjbGVhciB0aW1pbmdzICovCisJcHJpdi0+dHJlZ1thZGV2LT5kZXZub11bMF0gPSBwcml2LT50cmVnW2FkZXYtPmRldm5vXVsxXSA9IDA7CisKKwkvKiBOb3cgZ2V0IHRoZSBQSU8gdGltaW5ncyAqLworCXQgPSBwYXRhX21hY2lvX2ZpbmRfdGltaW5nKHByaXYsIGFkZXYtPnBpb19tb2RlKTsKKwlpZiAodCA9PSBOVUxMKSB7CisJCWRldl93YXJuKHByaXYtPmRldiwgIkludmFsaWQgUElPIHRpbWluZyByZXF1ZXN0ZWQ6IDB4JXhcbiIsCisJCQkgYWRldi0+cGlvX21vZGUpOworCQl0ID0gcGF0YV9tYWNpb19maW5kX3RpbWluZyhwcml2LCBYRkVSX1BJT18wKTsKKwl9CisJQlVHX09OKHQgPT0gTlVMTCk7CisKKwkvKiBQSU8gdGltaW5ncyBvbmx5IGV2ZXIgdXNlIHRoZSBmaXJzdCB0cmVnICovCisJcHJpdi0+dHJlZ1thZGV2LT5kZXZub11bMF0gfD0gdC0+cmVnMTsKKworCS8qIE5vdyBnZXQgRE1BIHRpbWluZ3MgKi8KKwl0ID0gcGF0YV9tYWNpb19maW5kX3RpbWluZyhwcml2LCBhZGV2LT5kbWFfbW9kZSk7CisJaWYgKHQgPT0gTlVMTCB8fCAodC0+cmVnMSA9PSAwICYmIHQtPnJlZzIgPT0gMCkpIHsKKwkJZGV2X2RiZyhwcml2LT5kZXYsICJETUEgdGltaW5nIG5vdCBzZXQgeWV0LCB1c2luZyBNV19ETUFfMFxuIik7CisJCXQgPSBwYXRhX21hY2lvX2ZpbmRfdGltaW5nKHByaXYsIFhGRVJfTVdfRE1BXzApOworCX0KKwlCVUdfT04odCA9PSBOVUxMKTsKKworCS8qIERNQSB0aW1pbmdzIGNhbiB1c2UgYm90aCB0cmVncyAqLworCXByaXYtPnRyZWdbYWRldi0+ZGV2bm9dWzBdIHw9IHQtPnJlZzE7CisJcHJpdi0+dHJlZ1thZGV2LT5kZXZub11bMV0gfD0gdC0+cmVnMjsKKworCWRldl9kYmcocHJpdi0+ZGV2LCAiIC0+ICUwOHggJTA4eFxuIiwKKwkJcHJpdi0+dHJlZ1thZGV2LT5kZXZub11bMF0sCisJCXByaXYtPnRyZWdbYWRldi0+ZGV2bm9dWzFdKTsKKworCS8qIEFwcGx5IHRvIGhhcmR3YXJlICovCisJcGF0YV9tYWNpb19hcHBseV90aW1pbmdzKGFwLCBhZGV2LT5kZXZubyk7Cit9CisKKy8qCisgKiBCbGFzdCBzb21lIHdlbGwga25vd24gInNhZmUiIHZhbHVlcyB0byB0aGUgdGltaW5nIHJlZ2lzdGVycyBhdCBpbml0IG9yCisgKiB3YWtldXAgZnJvbSBzbGVlcCB0aW1lLCBiZWZvcmUgd2UgZG8gcmVhbCBjYWxjdWxhdGlvbgorICovCitzdGF0aWMgdm9pZCBwYXRhX21hY2lvX2RlZmF1bHRfdGltaW5ncyhzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCB2YWx1ZSwgdmFsdWUyID0gMDsKKworCXN3aXRjaChwcml2LT5raW5kKSB7CisJCWNhc2UgY29udHJvbGxlcl9zaF9hdGE2OgorCQkJdmFsdWUgPSAweDBhODIwYzk3OworCQkJdmFsdWUyID0gMHgwMDAzMzAzMTsKKwkJCWJyZWFrOworCQljYXNlIGNvbnRyb2xsZXJfdW5fYXRhNjoKKwkJY2FzZSBjb250cm9sbGVyX2syX2F0YTY6CisJCQl2YWx1ZSA9IDB4MDg2MThhOTI7CisJCQl2YWx1ZTIgPSAweDAwMDAyOTIxOworCQkJYnJlYWs7CisJCWNhc2UgY29udHJvbGxlcl9rbF9hdGE0OgorCQkJdmFsdWUgPSAweDAwMDg0MzhjOworCQkJYnJlYWs7CisJCWNhc2UgY29udHJvbGxlcl9rbF9hdGEzOgorCQkJdmFsdWUgPSAweDAwMDg0NTI2OworCQkJYnJlYWs7CisJCWNhc2UgY29udHJvbGxlcl9oZWF0aHJvdzoKKwkJY2FzZSBjb250cm9sbGVyX29oYXJlOgorCQlkZWZhdWx0OgorCQkJdmFsdWUgPSAweDAwMDc0NTI2OworCQkJYnJlYWs7CisJfQorCXByaXYtPnRyZWdbMF1bMF0gPSBwcml2LT50cmVnWzFdWzBdID0gdmFsdWU7CisJcHJpdi0+dHJlZ1swXVsxXSA9IHByaXYtPnRyZWdbMV1bMV0gPSB2YWx1ZTI7Cit9CisKK3N0YXRpYyBpbnQgcGF0YV9tYWNpb19jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gYXAtPnByaXZhdGVfZGF0YTsKKworCS8qIEdldCBjYWJsZSB0eXBlIGZyb20gZGV2aWNlLXRyZWUgKi8KKwlpZiAocHJpdi0+a2luZCA9PSBjb250cm9sbGVyX2tsX2F0YTQgfHwKKwkgICAgcHJpdi0+a2luZCA9PSBjb250cm9sbGVyX3VuX2F0YTYgfHwKKwkgICAgcHJpdi0+a2luZCA9PSBjb250cm9sbGVyX2syX2F0YTYgfHwKKwkgICAgcHJpdi0+a2luZCA9PSBjb250cm9sbGVyX3NoX2F0YTYpIHsKKwkJY29uc3QgY2hhciogY2FibGUgPSBvZl9nZXRfcHJvcGVydHkocHJpdi0+bm9kZSwgImNhYmxlLXR5cGUiLAorCQkJCQkJICAgIE5VTEwpOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOworCQljb25zdCBjaGFyICptb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShyb290LCAibW9kZWwiLCBOVUxMKTsKKworCQlpZiAoY2FibGUgJiYgIXN0cm5jbXAoY2FibGUsICI4MC0iLCAzKSkgeworCQkJLyogU29tZSBkcml2ZXMgZmFpbCB0byBkZXRlY3QgODBjIGNhYmxlIGluIFBvd2VyQm9vaworCQkJICogVGhlc2UgbWFjaGluZSB1c2UgcHJvcHJpZXRhcnkgc2hvcnQgSURFIGNhYmxlCisJCQkgKiBhbnl3YXkKKwkJCSAqLworCQkJaWYgKCFzdHJuY21wKG1vZGVsLCAiUG93ZXJCb29rIiwgOSkpCisJCQkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOworCQkJZWxzZQorCQkJCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKKwkJfQorCX0KKworCS8qIEc1J3Mgc2VlbSB0byBoYXZlIGluY29ycmVjdCBjYWJsZSB0eXBlIGluIGRldmljZS10cmVlLgorCSAqIExldCdzIGFzc3VtZSB0aGV5IGFsd2F5cyBoYXZlIGEgODAgY29uZHVjdG9yIGNhYmxlLCB0aGlzIHNlZW0gdG8KKwkgKiBiZSBhbHdheXMgdGhlIGNhc2UgdW5sZXNzIHRoZSB1c2VyIG11Y2tlZCBhcm91bmQKKwkgKi8KKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocHJpdi0+bm9kZSwgIksyLVVBVEEiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwcml2LT5ub2RlLCAic2hhc3RhLWF0YSIpKQorCQlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CisKKwkvKiBBbnl0aGluZyBlbHNlIGlzIDQwIGNvbm5lY3RvcnMgKi8KKwlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9fcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXVuc2lnbmVkIGludCB3cml0ZSA9IChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IHBhdGFfbWFjaW9fcHJpdiAqcHJpdiA9IGFwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3QgZGJkbWFfY21kICp0YWJsZTsKKwl1bnNpZ25lZCBpbnQgc2ksIHBpOworCisJZGV2X2RiZ2RtYShwcml2LT5kZXYsICIlczogcWMgJXAgZmxhZ3MgJWx4LCB3cml0ZSAlZCBkZXYgJWRcbiIsCisJCSAgIF9fZnVuY19fLCBxYywgcWMtPmZsYWdzLCB3cml0ZSwgcWMtPmRldi0+ZGV2bm8pOworCisJaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKQorCQlyZXR1cm47CisKKwl0YWJsZSA9IChzdHJ1Y3QgZGJkbWFfY21kICopIHByaXYtPmRtYV90YWJsZV9jcHU7CisKKwlwaSA9IDA7CisJZm9yX2VhY2hfc2cocWMtPnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpIHsKKwkJdTMyIGFkZHIsIHNnX2xlbiwgbGVuOworCisJCS8qIGRldGVybWluZSBpZiBwaHlzaWNhbCBETUEgYWRkciBzcGFucyA2NEsgYm91bmRhcnkuCisJCSAqIE5vdGUgaC93IGRvZXNuJ3Qgc3VwcG9ydCA2NC1iaXQsIHNvIHdlIHVuY29uZGl0aW9uYWxseQorCQkgKiB0cnVuY2F0ZSBkbWFfYWRkcl90IHRvIHUzMi4KKwkJICovCisJCWFkZHIgPSAodTMyKSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJCXdoaWxlIChzZ19sZW4pIHsKKwkJCS8qIHRhYmxlIG92ZXJmbG93IHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJCUJVR19PTiAocGkrKyA+PSBNQVhfRENNRFMpOworCisJCQlsZW4gPSAoc2dfbGVuIDwgTUFYX0RCRE1BX1NFRykgPyBzZ19sZW4gOiBNQVhfREJETUFfU0VHOworCQkJc3RfbGUxNigmdGFibGUtPmNvbW1hbmQsIHdyaXRlID8gT1VUUFVUX01PUkU6IElOUFVUX01PUkUpOworCQkJc3RfbGUxNigmdGFibGUtPnJlcV9jb3VudCwgbGVuKTsKKwkJCXN0X2xlMzIoJnRhYmxlLT5waHlfYWRkciwgYWRkcik7CisJCQl0YWJsZS0+Y21kX2RlcCA9IDA7CisJCQl0YWJsZS0+eGZlcl9zdGF0dXMgPSAwOworCQkJdGFibGUtPnJlc19jb3VudCA9IDA7CisJCQlhZGRyICs9IGxlbjsKKwkJCXNnX2xlbiAtPSBsZW47CisJCQkrK3RhYmxlOworCQl9CisJfQorCisJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiBhY2NvcmRpbmcgdG8gVGVqdW4gKi8KKwlCVUdfT04oIXBpKTsKKworCS8qIENvbnZlcnQgdGhlIGxhc3QgY29tbWFuZCB0byBhbiBpbnB1dC9vdXRwdXQgKi8KKwl0YWJsZS0tOworCXN0X2xlMTYoJnRhYmxlLT5jb21tYW5kLCB3cml0ZSA/IE9VVFBVVF9MQVNUOiBJTlBVVF9MQVNUKTsKKwl0YWJsZSsrOworCisJLyogQWRkIHRoZSBzdG9wIGNvbW1hbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCAqLworCW1lbXNldCh0YWJsZSwgMCwgc2l6ZW9mKHN0cnVjdCBkYmRtYV9jbWQpKTsKKwlzdF9sZTE2KCZ0YWJsZS0+Y29tbWFuZCwgREJETUFfU1RPUCk7CisKKwlkZXZfZGJnZG1hKHByaXYtPmRldiwgIiVzOiAlZCBETUEgbGlzdCBlbnRyaWVzXG4iLCBfX2Z1bmNfXywgcGkpOworfQorCisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9fZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hX3JlZ3MgPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CisKKwlpZiAoZG1hX3JlZ3MpIHsKKwkJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDAwMDAwOworCisJCS8qIE1ha2Ugc3VyZSBETUEgY29udHJvbGxlciBpcyBzdG9wcGVkICovCisJCXdyaXRlbCgoUlVOfFBBVVNFfEZMVVNIfFdBS0V8REVBRCkgPDwgMTYsICZkbWFfcmVncy0+Y29udHJvbCk7CisJCXdoaWxlICgtLXRpbWVvdXQgJiYgKHJlYWRsKCZkbWFfcmVncy0+c3RhdHVzKSAmIFJVTikpCisJCQl1ZGVsYXkoMSk7CisJfQorCisJYXRhX3NmZl9mcmVlemUoYXApOworfQorCisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9fYm1kbWFfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBwYXRhX21hY2lvX3ByaXYgKnByaXYgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYV9yZWdzID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyOworCWludCBkZXYgPSBxYy0+ZGV2LT5kZXZubzsKKworCWRldl9kYmdkbWEocHJpdi0+ZGV2LCAiJXM6IHFjICVwXG4iLCBfX2Z1bmNfXywgcWMpOworCisJLyogTWFrZSBzdXJlIERNQSBjb21tYW5kcyB1cGRhdGVzIGFyZSB2aXNpYmxlICovCisJd3JpdGVsKHByaXYtPmRtYV90YWJsZV9kbWEsICZkbWFfcmVncy0+Y21kcHRyKTsKKworCS8qIE9uIEtleUxhcmdvIDY2TWh6IGNlbGwsIHdlIG5lZWQgdG8gYWRkIDYwbnMgdG8gd3JEYXRhU2V0dXAgb24KKwkgKiBVRE1BIHJlYWRzCisJICovCisJaWYgKHByaXYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0ICYmCisJICAgIChwcml2LT50cmVnW2Rldl1bMF0gJiBUUl82Nl9VRE1BX0VOKSkgeworCQl2b2lkIF9faW9tZW0gKnJiYXNlID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwkJdTMyIHJlZyA9IHByaXYtPnRyZWdbZGV2XVswXTsKKworCQlpZiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpKQorCQkJcmVnICs9IDB4MDA4MDAwMDA7CisJCXdyaXRlbChyZWcsIHJiYXNlICsgSURFX1RJTUlOR19DT05GSUcpOworCX0KKworCS8qIGlzc3VlIHIvdyBjb21tYW5kICovCisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9fYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBwYXRhX21hY2lvX3ByaXYgKnByaXYgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYV9yZWdzID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyOworCisJZGV2X2RiZ2RtYShwcml2LT5kZXYsICIlczogcWMgJXBcbiIsIF9fZnVuY19fLCBxYyk7CisKKwl3cml0ZWwoKFJVTiA8PCAxNikgfCBSVU4sICZkbWFfcmVncy0+Y29udHJvbCk7CisJLyogTWFrZSBzdXJlIGl0IGdldHMgdG8gdGhlIGNvbnRyb2xsZXIgcmlnaHQgbm93ICovCisJKHZvaWQpcmVhZGwoJmRtYV9yZWdzLT5jb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgcGF0YV9tYWNpb19ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWFfcmVncyA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDEwMDAwMDA7CisKKwlkZXZfZGJnZG1hKHByaXYtPmRldiwgIiVzOiBxYyAlcFxuIiwgX19mdW5jX18sIHFjKTsKKworCS8qIFN0b3AgdGhlIERNQSBlbmdpbmUgYW5kIHdhaXQgZm9yIGl0IHRvIGZ1bGwgaGFsdCAqLworCXdyaXRlbCAoKChSVU58V0FLRXxERUFEKSA8PCAxNiksICZkbWFfcmVncy0+Y29udHJvbCk7CisJd2hpbGUgKC0tdGltZW91dCAmJiAocmVhZGwoJmRtYV9yZWdzLT5zdGF0dXMpICYgUlVOKSkKKwkJdWRlbGF5KDEpOworfQorCitzdGF0aWMgdTggcGF0YV9tYWNpb19ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWFfcmVncyA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKwl1MzIgZHN0YXQsIHJzdGF0ID0gQVRBX0RNQV9JTlRSOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisKKwlkc3RhdCA9IHJlYWRsKCZkbWFfcmVncy0+c3RhdHVzKTsKKworCWRldl9kYmdkbWEocHJpdi0+ZGV2LCAiJXM6IGRzdGF0PSV4XG4iLCBfX2Z1bmNfXywgZHN0YXQpOworCisJLyogV2UgaGF2ZSB0d28gdGhpbmdzIHRvIGRlYWwgd2l0aCBoZXJlOgorCSAqCisJICogLSBUaGUgZGJkbWEgd29uJ3Qgc3RvcCBpZiB0aGUgY29tbWFuZCB3YXMgc3RhcnRlZAorCSAqIGJ1dCBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciB3aXRob3V0IHRyYW5zZmVycmluZyBhbGwKKwkgKiBkYXRhcy4gVGhpcyBoYXBwZW5zIHdoZW4gYmFkIGJsb2NrcyBhcmUgbWV0IGR1cmluZworCSAqIGEgbXVsdGktYmxvY2sgdHJhbnNmZXIuCisJICoKKwkgKiAtIFRoZSBkYmRtYSBmaWZvIGhhc24ndCB5ZXQgZmluaXNoZWQgZmx1c2hpbmcgdG8KKwkgKiB0byBzeXN0ZW0gbWVtb3J5IHdoZW4gdGhlIGRpc2sgaW50ZXJydXB0IG9jY3Vycy4KKwkgKgorCSAqLworCisJLyogRmlyc3QgY2hlY2sgZm9yIGVycm9ycyAqLworCWlmICgoZHN0YXQgJiAoUlVOfERFQUQpKSAhPSBSVU4pCisJCXJzdGF0IHw9IEFUQV9ETUFfRVJSOworCisJLyogSWYgQUNUSVZFIGlzIGNsZWFyZWQsIHRoZSBTVE9QIGNvbW1hbmQgaGFzIGJlZW4gaGl0IGFuZAorCSAqIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gSWYgbm90LCB3ZSBoYXZlIHRvIGZsdXNoIHRoZQorCSAqIGNoYW5uZWwuCisJICovCisJaWYgKChkc3RhdCAmIEFDVElWRSkgPT0gMCkKKwkJcmV0dXJuIHJzdGF0OworCisJZGV2X2RiZ2RtYShwcml2LT5kZXYsICIlczogRE1BIHN0aWxsIGFjdGl2ZSwgZmx1c2hpbmcuLi5cbiIsIF9fZnVuY19fKTsKKworCS8qIElmIGRiZG1hIGRpZG4ndCBleGVjdXRlIHRoZSBTVE9QIGNvbW1hbmQgeWV0LCB0aGUKKwkgKiBhY3RpdmUgYml0IGlzIHN0aWxsIHNldC4gV2UgY29uc2lkZXIgdGhhdCB3ZSBhcmVuJ3QKKwkgKiBzaGFyaW5nIGludGVycnVwdHMgKHdoaWNoIGlzIGhvcGVmdWxseSB0aGUgY2FzZSB3aXRoCisJICogdGhvc2UgY29udHJvbGxlcnMpIGFuZCBzbyB3ZSBqdXN0IHRyeSB0byBmbHVzaCB0aGUKKwkgKiBjaGFubmVsIGZvciBwZW5kaW5nIGRhdGEgaW4gdGhlIGZpZm8KKwkgKi8KKwl1ZGVsYXkoMSk7CisJd3JpdGVsKChGTFVTSCA8PCAxNikgfCBGTFVTSCwgJmRtYV9yZWdzLT5jb250cm9sKTsKKwlmb3IgKDs7KSB7CisJCXVkZWxheSgxKTsKKwkJZHN0YXQgPSByZWFkbCgmZG1hX3JlZ3MtPnN0YXR1cyk7CisJCWlmICgoZHN0YXQgJiBGTFVTSCkgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoKyt0aW1lb3V0ID4gMTAwMCkgeworCQkJZGV2X3dhcm4ocHJpdi0+ZGV2LCAidGltZW91dCBmbHVzaGluZyBETUFcbiIpOworCQkJcnN0YXQgfD0gQVRBX0RNQV9FUlI7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcnN0YXQ7Cit9CisKKy8qIHBvcnRfc3RhcnQgaXMgd2hlbiB3ZSBhbGxvY2F0ZSB0aGUgRE1BIGNvbW1hbmQgbGlzdCAqLworc3RhdGljIGludCBwYXRhX21hY2lvX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gYXAtPnByaXZhdGVfZGF0YTsKKworCWlmIChhcC0+aW9hZGRyLmJtZG1hX2FkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIERCRE1BIGNvbW1hbmRzLgorCSAqCisJICogVGhlICsyIGlzICsxIGZvciB0aGUgc3RvcCBjb21tYW5kIGFuZCArMSB0byBhbGxvdyBmb3IKKwkgKiBhbGlnbmluZyB0aGUgc3RhcnQgYWRkcmVzcyB0byBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorCSAqLworCXByaXYtPmRtYV90YWJsZV9jcHUgPQorCQlkbWFtX2FsbG9jX2NvaGVyZW50KHByaXYtPmRldiwKKwkJCQkgICAgKE1BWF9EQ01EUyArIDIpICogc2l6ZW9mKHN0cnVjdCBkYmRtYV9jbWQpLAorCQkJCSAgICAmcHJpdi0+ZG1hX3RhYmxlX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYtPmRtYV90YWJsZV9jcHUgPT0gTlVMTCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBETUEgY29tbWFuZCBsaXN0XG4iKTsKKwkJYXAtPmlvYWRkci5ibWRtYV9hZGRyID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfbWFjaW9faXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IHBhdGFfbWFjaW9fcHJpdiAqcHJpdiA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKworCWRldl9kYmdkbWEocHJpdi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgcGF0YV9tYWNpb19yZXNldF9odyhzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2LCBpbnQgcmVzdW1lKQoreworCWRldl9kYmcocHJpdi0+ZGV2LCAiRW5hYmxpbmcgJiByZXNldHRpbmcuLi4gXG4iKTsKKworCWlmIChwcml2LT5tZWRpYWJheSkKKwkJcmV0dXJuOworCisJaWYgKHByaXYtPmtpbmQgPT0gY29udHJvbGxlcl9vaGFyZSAmJiAhcmVzdW1lKSB7CisJCS8qIFRoZSBjb2RlIGJlbG93IGlzIGhhdmluZyB0cm91YmxlIG9uIHNvbWUgb2hhcmUgbWFjaGluZXMKKwkJICogKHRpbWluZyByZWxhdGVkID8pLiBVbnRpbCBJIGNhbiBwdXQgbXkgaGFuZCBvbiBvbmUgb2YgdGhlc2UKKwkJICogdW5pdHMsIEkga2VlcCB0aGUgb2xkIHdheQorCQkgKi8KKwkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfRU5BQkxFLCBwcml2LT5ub2RlLCAwLCAxKTsKKwl9IGVsc2UgeworCQlpbnQgcmM7CisKKyAJCS8qIFJlc2V0IGFuZCBlbmFibGUgY29udHJvbGxlciAqLworCQlyYyA9IHBwY19tZC5mZWF0dXJlX2NhbGwoUE1BQ19GVFJfSURFX1JFU0VULAorCQkJCQkgcHJpdi0+bm9kZSwgcHJpdi0+YWFwbF9idXNfaWQsIDEpOworCQlwcGNfbWQuZmVhdHVyZV9jYWxsKFBNQUNfRlRSX0lERV9FTkFCTEUsCisJCQkJICAgIHByaXYtPm5vZGUsIHByaXYtPmFhcGxfYnVzX2lkLCAxKTsKKwkJbXNsZWVwKDEwKTsKKwkJLyogT25seSBib3RoZXIgd2FpdGluZyBpZiB0aGVyZSdzIGEgcmVzZXQgY29udHJvbCAqLworCQlpZiAocmMgPT0gMCkgeworCQkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfUkVTRVQsCisJCQkJCSAgICBwcml2LT5ub2RlLCBwcml2LT5hYXBsX2J1c19pZCwgMCk7CisJCQltc2xlZXAoSURFX1dBS0VVUF9ERUxBWV9NUyk7CisJCX0KKwl9CisKKwkvKiBJZiByZXN1bWluZyBhIFBDSSBkZXZpY2UsIHJlc3RvcmUgdGhlIGNvbmZpZyBzcGFjZSBoZXJlICovCisJaWYgKHByaXYtPnBkZXYgJiYgcmVzdW1lKSB7CisJCWludCByYzsKKworCQlwY2lfcmVzdG9yZV9zdGF0ZShwcml2LT5wZGV2KTsKKwkJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocHJpdi0+cGRldik7CisJCWlmIChyYykKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZwcml2LT5wZGV2LT5kZXYsCisJCQkJICAgIkZhaWxlZCB0byBlbmFibGUgZGV2aWNlIGFmdGVyIHJlc3VtZSAoJWQpXG4iLCByYyk7CisJCWVsc2UKKwkJCXBjaV9zZXRfbWFzdGVyKHByaXYtPnBkZXYpOworCX0KKworCS8qIE9uIEthdWFpLCBpbml0aWFsaXplIHRoZSBGQ1IuIFdlIGRvbid0IHBlcmZvcm0gYSByZXNldCwgZG9lc24ndCByZWFsbHkKKwkgKiBzZWVtIG5lY2Vzc2FyeSBhbmQgc3BlZWRzIHVwIHRoZSBib290IHByb2Nlc3MKKwkgKi8KKwlpZiAocHJpdi0+a2F1YWlfZmNyKQorCQl3cml0ZWwoS0FVQUlfRkNSX1VBVEFfTUFHSUMgfAorCQkgICAgICAgS0FVQUlfRkNSX1VBVEFfUkVTRVRfTiB8CisJCSAgICAgICBLQVVBSV9GQ1JfVUFUQV9FTkFCTEUsIHByaXYtPmthdWFpX2Zjcik7Cit9CisKKy8qIEhvb2sgdGhlIHN0YW5kYXJkIHNsYXZlIGNvbmZpZyB0byBmaXh1cCBzb21lIEhXIHJlbGF0ZWQgYWxpZ25tZW50CisgKiByZXN0cmljdGlvbnMKKyAqLworc3RhdGljIGludCBwYXRhX21hY2lvX3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNkZXYtPmhvc3QpOworCXN0cnVjdCBwYXRhX21hY2lvX3ByaXYgKnByaXYgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CisJdTE2IGNtZDsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBjYWxsIG9yaWdpbmFsICovCisJcmMgPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcoc2Rldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBUaGlzIGlzIGxpZnRlZCBmcm9tIHNhdGFfbnYgKi8KKwlkZXYgPSAmYXAtPmxpbmsuZGV2aWNlW3NkZXYtPmlkXTsKKworCS8qIE9IYXJlIGhhcyBpc3N1ZXMgd2l0aCBub24gY2FjaGUgYWxpZ25lZCBETUEgb24gc29tZSBjaGlwc2V0cyAqLworCWlmIChwcml2LT5raW5kID09IGNvbnRyb2xsZXJfb2hhcmUpIHsKKwkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsIDMxKTsKKwkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfcGFkKHNkZXYtPnJlcXVlc3RfcXVldWUsIDMxKTsKKworCQkvKiBUZWxsIHRoZSB3b3JsZCBhYm91dCBpdCAqLworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgIk9IYXJlIGFsaWdubWVudCBsaW1pdHMgYXBwbGllZFxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFdlIG9ubHkgaGF2ZSBpc3N1ZXMgd2l0aCBBVEFQSSAqLworCWlmIChkZXYtPmNsYXNzICE9IEFUQV9ERVZfQVRBUEkpCisJCXJldHVybiAwOworCisJLyogU2hhc3RhIGFuZCBLMiBzZWVtIHRvIGhhdmUgImlzc3VlcyIgd2l0aCByZWFkcyAuLi4gKi8KKwlpZiAocHJpdi0+a2luZCA9PSBjb250cm9sbGVyX3NoX2F0YTYgfHwgcHJpdi0+a2luZCA9PSBjb250cm9sbGVyX2syX2F0YTYpIHsKKwkJLyogQWxscmlnaHQgdGhlc2UgYXJlIGJhZCwgYXBwbHkgcmVzdHJpY3Rpb25zICovCisJCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAxNSk7CisJCWJsa19xdWV1ZV91cGRhdGVfZG1hX3BhZChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAxNSk7CisKKwkJLyogV2UgZW5hYmxlIE1XSSBhbmQgaGFjayBjYWNoZSBsaW5lIHNpemUgZGlyZWN0bHkgaGVyZSwgdGhpcworCQkgKiBpcyBzcGVjaWZpYyB0byB0aGlzIGNoaXBzZXQgYW5kIG5vdCBub3JtYWwgdmFsdWVzLCB3ZSBoYXBwZW4KKwkJICogdG8gc29tZXdoYXQga25vdyB3aGF0IHdlIGFyZSBkb2luZyBoZXJlICh3aGljaCBpcyBiYXNpY2FsbHkKKwkJICogdG8gZG8gdGhlIHNhbWUgQXBwbGUgZG9lcyBhbmQgcHJheSB0aGV5IGRpZCBub3QgZ2V0IGl0IHdyb25nIDotKQorCQkgKi8KKwkJQlVHX09OKCFwcml2LT5wZGV2KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHByaXYtPnBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIDB4MDgpOworCQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwcml2LT5wZGV2LCBQQ0lfQ09NTUFORCwKKwkJCQkgICAgICBjbWQgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFKTsKKworCQkvKiBUZWxsIHRoZSB3b3JsZCBhYm91dCBpdCAqLworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywKKwkJCSAgICAgICAiSzIvU2hhc3RhIGFsaWdubWVudCBsaW1pdHMgYXBwbGllZFxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBwYXRhX21hY2lvX2RvX3N1c3BlbmQoc3RydWN0IHBhdGFfbWFjaW9fcHJpdiAqcHJpdiwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJaW50IHJjOworCisJLyogRmlyc3QsIGNvcmUgbGliYXRhIHN1c3BlbmQgdG8gZG8gbW9zdCBvZiB0aGUgd29yayAqLworCXJjID0gYXRhX2hvc3Rfc3VzcGVuZChwcml2LT5ob3N0LCBtZXNnKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIFJlc3RvcmUgdG8gZGVmYXVsdCB0aW1pbmdzICovCisJcGF0YV9tYWNpb19kZWZhdWx0X3RpbWluZ3MocHJpdik7CisKKwkvKiBNYXNrIGludGVycnVwdC4gTm90IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgb2xkIGRyaXZlciBkaWQKKwkgKiBpdCBhbmQgSSdkIHJhdGhlciBub3QgY2hhbmdlIHRoYXQgaGVyZSAqLworCWRpc2FibGVfaXJxKHByaXYtPmlycSk7CisKKwkvKiBUaGUgbWVkaWEgYmF5IHdpbGwgaGFuZGxlIGl0c2VsZiBqdXN0IGZpbmUgKi8KKwlpZiAocHJpdi0+bWVkaWFiYXkpCisJCXJldHVybiAwOworCisJLyogS2F1YWkgaGFzIGJ1cyBjb250cm9sIEZDUnMgZGlyZWN0bHkgaGVyZSAqLworCWlmIChwcml2LT5rYXVhaV9mY3IpIHsKKwkJdTMyIGZjciA9IHJlYWRsKHByaXYtPmthdWFpX2Zjcik7CisJCWZjciAmPSB+KEtBVUFJX0ZDUl9VQVRBX1JFU0VUX04gfCBLQVVBSV9GQ1JfVUFUQV9FTkFCTEUpOworCQl3cml0ZWwoZmNyLCBwcml2LT5rYXVhaV9mY3IpOworCX0KKworCS8qIEZvciBQQ0ksIHNhdmUgc3RhdGUgYW5kIGRpc2FibGUgRE1BLiBObyBuZWVkIHRvIGNhbGwKKwkgKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKCksIHRoZSBIVyBkb2Vzbid0IGRvIEQgc3RhdGVzIHRoYXQKKwkgKiB3YXksIHRoZSBwbGF0Zm9ybSBjb2RlIHdpbGwgdGFrZSBjYXJlIG9mIHN1c3BlbmRpbmcgdGhlCisJICogQVNJQyBwcm9wZXJseQorCSAqLworCWlmIChwcml2LT5wZGV2KSB7CisJCXBjaV9zYXZlX3N0YXRlKHByaXYtPnBkZXYpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGRldik7CisJfQorCisJLyogRGlzYWJsZSB0aGUgYnVzIG9uIG9sZGVyIG1hY2hpbmVzIGFuZCB0aGUgY2VsbCBvbiBrYXVhaSAqLworCXBwY19tZC5mZWF0dXJlX2NhbGwoUE1BQ19GVFJfSURFX0VOQUJMRSwgcHJpdi0+bm9kZSwKKwkJCSAgICBwcml2LT5hYXBsX2J1c19pZCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRhX21hY2lvX2RvX3Jlc3VtZShzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2KQoreworCS8qIFJlc2V0IGFuZCByZS1lbmFibGUgdGhlIEhXICovCisJcGF0YV9tYWNpb19yZXNldF9odyhwcml2LCAxKTsKKworCS8qIFNhbml0aXplIGRyaXZlIHRpbWluZ3MgKi8KKwlwYXRhX21hY2lvX2FwcGx5X3RpbWluZ3MocHJpdi0+aG9zdC0+cG9ydHNbMF0sIDApOworCisJLyogV2Ugd2FudCBvdXIgSVJRIGJhY2sgISAqLworCWVuYWJsZV9pcnEocHJpdi0+aXJxKTsKKworCS8qIExldCB0aGUgbGliYXRhIGNvcmUgdGFrZSBpdCBmcm9tIHRoZXJlICovCisJYXRhX2hvc3RfcmVzdW1lKHByaXYtPmhvc3QpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGF0YV9tYWNpb19zaHQgPSB7CisJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKKwkuc2dfdGFibGVzaXplCQk9IE1BWF9EQ01EUywKKwkvKiBXZSBtYXkgbm90IG5lZWQgdGhhdCBzdHJpY3Qgb25lICovCisJLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAorCS5zbGF2ZV9jb25maWd1cmUJPSBwYXRhX21hY2lvX3NsYXZlX2NvbmZpZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwYXRhX21hY2lvX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisKKwkuZnJlZXplCQkJPSBwYXRhX21hY2lvX2ZyZWV6ZSwKKwkuc2V0X3Bpb21vZGUJCT0gcGF0YV9tYWNpb19zZXRfdGltaW5ncywKKwkuc2V0X2RtYW1vZGUJCT0gcGF0YV9tYWNpb19zZXRfdGltaW5ncywKKwkuY2FibGVfZGV0ZWN0CQk9IHBhdGFfbWFjaW9fY2FibGVfZGV0ZWN0LAorCS5zZmZfZGV2X3NlbGVjdAkJPSBwYXRhX21hY2lvX2Rldl9zZWxlY3QsCisJLnFjX3ByZXAJCT0gcGF0YV9tYWNpb19xY19wcmVwLAorCS5tb2RlX2ZpbHRlcgkJPSBhdGFfYm1kbWFfbW9kZV9maWx0ZXIsCisJLmJtZG1hX3NldHVwCQk9IHBhdGFfbWFjaW9fYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0CQk9IHBhdGFfbWFjaW9fYm1kbWFfc3RhcnQsCisJLmJtZG1hX3N0b3AJCT0gcGF0YV9tYWNpb19ibWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gcGF0YV9tYWNpb19ibWRtYV9zdGF0dXMsCisJLnBvcnRfc3RhcnQJCT0gcGF0YV9tYWNpb19wb3J0X3N0YXJ0LAorCS5zZmZfaXJxX2NsZWFyCQk9IHBhdGFfbWFjaW9faXJxX2NsZWFyLAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBhdGFfbWFjaW9faW52YXJpYW50cyhzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2KQoreworCWNvbnN0IGludCAqYmlkcDsKKworCS8qIElkZW50aWZ5IHRoZSB0eXBlIG9mIGNvbnRyb2xsZXIgKi8KKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocHJpdi0+bm9kZSwgInNoYXN0YS1hdGEiKSkgeworCQlwcml2LT5raW5kID0gY29udHJvbGxlcl9zaF9hdGE2OworCSAgICAgICAgcHJpdi0+dGltaW5ncyA9IHBhdGFfbWFjaW9fc2hhc3RhX3RpbWluZ3M7CisJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwcml2LT5ub2RlLCAia2F1YWktYXRhIikpIHsKKwkJcHJpdi0+a2luZCA9IGNvbnRyb2xsZXJfdW5fYXRhNjsKKwkgICAgICAgIHByaXYtPnRpbWluZ3MgPSBwYXRhX21hY2lvX2thdWFpX3RpbWluZ3M7CisJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwcml2LT5ub2RlLCAiSzItVUFUQSIpKSB7CisJCXByaXYtPmtpbmQgPSBjb250cm9sbGVyX2syX2F0YTY7CisJICAgICAgICBwcml2LT50aW1pbmdzID0gcGF0YV9tYWNpb19rYXVhaV90aW1pbmdzOworCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocHJpdi0+bm9kZSwgImtleWxhcmdvLWF0YSIpKSB7CisJCWlmIChzdHJjbXAocHJpdi0+bm9kZS0+bmFtZSwgImF0YS00IikgPT0gMCkgeworCQkJcHJpdi0+a2luZCA9IGNvbnRyb2xsZXJfa2xfYXRhNDsKKwkJCXByaXYtPnRpbWluZ3MgPSBwYXRhX21hY2lvX2tsNjZfdGltaW5nczsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmtpbmQgPSBjb250cm9sbGVyX2tsX2F0YTM7CisJCQlwcml2LT50aW1pbmdzID0gcGF0YV9tYWNpb19rbDMzX3RpbWluZ3M7CisJCX0KKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHByaXYtPm5vZGUsICJoZWF0aHJvdy1hdGEiKSkgeworCQlwcml2LT5raW5kID0gY29udHJvbGxlcl9oZWF0aHJvdzsKKwkJcHJpdi0+dGltaW5ncyA9IHBhdGFfbWFjaW9faGVhdGhyb3dfdGltaW5nczsKKwl9IGVsc2UgeworCQlwcml2LT5raW5kID0gY29udHJvbGxlcl9vaGFyZTsKKwkJcHJpdi0+dGltaW5ncyA9IHBhdGFfbWFjaW9fb2hhcmVfdGltaW5nczsKKwl9CisKKwkvKiBYWFggRklYTUUgLS0tIHNldHVwIHByaXYtPm1lZGlhYmF5IGhlcmUgKi8KKworCS8qIEdldCBBcHBsZSBidXMgSUQgKGZvciBjbG9jayBhbmQgQVNJQyBjb250cm9sKSAqLworCWJpZHAgPSBvZl9nZXRfcHJvcGVydHkocHJpdi0+bm9kZSwgIkFBUEwsYnVzLWlkIiwgTlVMTCk7CisJcHJpdi0+YWFwbF9idXNfaWQgPSAgYmlkcCA/ICpiaWRwIDogMDsKKworCS8qIEZpeHVwIG1pc3NpbmcgQXBwbGUgYnVzIElEIGluIGNhc2Ugb2YgbWVkaWEtYmF5ICovCisJaWYgKHByaXYtPm1lZGlhYmF5ICYmIGJpZHAgPT0gMCkKKwkJcHJpdi0+YWFwbF9idXNfaWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGF0YV9tYWNpb19zZXR1cF9pb3Moc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIsCisJCQkJCSAgIHZvaWQgX19pb21lbSAqIGJhc2UsCisJCQkJCSAgIHZvaWQgX19pb21lbSAqIGRtYSkKK3sKKwkvKiBjbWRfYWRkciBpcyB0aGUgYmFzZSBvZiByZWdzIGZvciB0aGF0IHBvcnQgKi8KKwlpb2FkZHItPmNtZF9hZGRyCT0gYmFzZTsKKworCS8qIHRhc2tmaWxlIHJlZ2lzdGVycyAqLworCWlvYWRkci0+ZGF0YV9hZGRyCT0gYmFzZSArIChBVEFfUkVHX0RBVEEgICAgPDwgNCk7CisJaW9hZGRyLT5lcnJvcl9hZGRyCT0gYmFzZSArIChBVEFfUkVHX0VSUiAgICAgPDwgNCk7CisJaW9hZGRyLT5mZWF0dXJlX2FkZHIJPSBiYXNlICsgKEFUQV9SRUdfRkVBVFVSRSA8PCA0KTsKKwlpb2FkZHItPm5zZWN0X2FkZHIJPSBiYXNlICsgKEFUQV9SRUdfTlNFQ1QgICA8PCA0KTsKKwlpb2FkZHItPmxiYWxfYWRkcgk9IGJhc2UgKyAoQVRBX1JFR19MQkFMICAgIDw8IDQpOworCWlvYWRkci0+bGJhbV9hZGRyCT0gYmFzZSArIChBVEFfUkVHX0xCQU0gICAgPDwgNCk7CisJaW9hZGRyLT5sYmFoX2FkZHIJPSBiYXNlICsgKEFUQV9SRUdfTEJBSCAgICA8PCA0KTsKKwlpb2FkZHItPmRldmljZV9hZGRyCT0gYmFzZSArIChBVEFfUkVHX0RFVklDRSAgPDwgNCk7CisJaW9hZGRyLT5zdGF0dXNfYWRkcgk9IGJhc2UgKyAoQVRBX1JFR19TVEFUVVMgIDw8IDQpOworCWlvYWRkci0+Y29tbWFuZF9hZGRyCT0gYmFzZSArIChBVEFfUkVHX0NNRCAgICAgPDwgNCk7CisJaW9hZGRyLT5hbHRzdGF0dXNfYWRkcgk9IGJhc2UgKyAweDE2MDsKKwlpb2FkZHItPmN0bF9hZGRyCT0gYmFzZSArIDB4MTYwOworCWlvYWRkci0+Ym1kbWFfYWRkcgk9IGRtYTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBtYWNfbWFjaW9fY2FsY190aW1pbmdfbWFza3Moc3RydWN0IHBhdGFfbWFjaW9fcHJpdiAqcHJpdiwKKwkJCQkJCSAgIHN0cnVjdCBhdGFfcG9ydF9pbmZvICAgKnBpbmZvKQoreworCWludCBpID0gMDsKKworCXBpbmZvLT5waW9fbWFzawkJPSAwOworCXBpbmZvLT5td2RtYV9tYXNrCT0gMDsKKwlwaW5mby0+dWRtYV9tYXNrCT0gMDsKKworCXdoaWxlIChwcml2LT50aW1pbmdzW2ldLm1vZGUgPiAwKSB7CisJCXVuc2lnbmVkIGludCBtYXNrID0gMVUgPDwgKHByaXYtPnRpbWluZ3NbaV0ubW9kZSAmIDB4MGYpOworCQlzd2l0Y2gocHJpdi0+dGltaW5nc1tpXS5tb2RlICYgMHhmMCkgeworCQljYXNlIDB4MDA6IC8qIFBJTyAqLworCQkJcGluZm8tPnBpb19tYXNrIHw9IChtYXNrID4+IDgpOworCQkJYnJlYWs7CisJCWNhc2UgMHgyMDogLyogTVdETUEgKi8KKwkJCXBpbmZvLT5td2RtYV9tYXNrIHw9IG1hc2s7CisJCQlicmVhazsKKwkJY2FzZSAweDQwOiAvKiBVRE1BICovCisJCQlwaW5mby0+dWRtYV9tYXNrIHw9IG1hc2s7CisJCQlicmVhazsKKwkJfQorCQlpKys7CisJfQorCWRldl9kYmcocHJpdi0+ZGV2LCAiU3VwcG9ydGVkIG1hc2tzOiBQSU89JWx4LCBNV0RNQT0lbHgsIFVETUE9JWx4XG4iLAorCQlwaW5mby0+cGlvX21hc2ssIHBpbmZvLT5td2RtYV9tYXNrLCBwaW5mby0+dWRtYV9tYXNrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGF0YV9tYWNpb19jb21tb25faW5pdChzdHJ1Y3QgcGF0YV9tYWNpb19wcml2CSpwcml2LAorCQkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90CQl0ZnJlZ3MsCisJCQkJCSAgICByZXNvdXJjZV9zaXplX3QJCWRtYXJlZ3MsCisJCQkJCSAgICByZXNvdXJjZV9zaXplX3QJCWZjcmVncywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcJCWlycSkKK3sKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbwkJcGluZm87CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8JKnBwaVtdID0geyAmcGluZm8sIE5VTEwgfTsKKwl2b2lkIF9faW9tZW0JCQkqZG1hX3JlZ3MgPSBOVUxMOworCisJLyogRmlsbCB1cCBwcml2YXRlcyB3aXRoIHZhcmlvdXMgaW52YXJpYW50cyBjb2xsZWN0ZWQgZnJvbSB0aGUKKwkgKiBkZXZpY2UtdHJlZQorCSAqLworCXBhdGFfbWFjaW9faW52YXJpYW50cyhwcml2KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHNhbmUgaW5pdGlhbCB0aW1pbmdzIGluIHRoZSBjYWNoZSAqLworCXBhdGFfbWFjaW9fZGVmYXVsdF90aW1pbmdzKHByaXYpOworCisJLyogTm90IHN1cmUgd2hhdCB0aGUgcmVhbCBtYXggaXMgYnV0IHdlIGtub3cgaXQncyBsZXNzIHRoYW4gNjRLLCBsZXQncworCSAqIHVzZSA2NEsgbWludXMgMjU2CisJICovCisJZG1hX3NldF9tYXhfc2VnX3NpemUocHJpdi0+ZGV2LCBNQVhfREJETUFfU0VHKTsKKworCS8qIEFsbG9jYXRlIGxpYmF0YSBob3N0IGZvciAxIHBvcnQgKi8KKwltZW1zZXQoJnBpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGF0YV9wb3J0X2luZm8pKTsKKwlwbWFjX21hY2lvX2NhbGNfdGltaW5nX21hc2tzKHByaXYsICZwaW5mbyk7CisJcGluZm8uZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX01NSU8gfAorCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZOworCXBpbmZvLnBvcnRfb3BzCQk9ICZwYXRhX21hY2lvX29wczsKKwlwaW5mby5wcml2YXRlX2RhdGEJPSBwcml2OworCisJcHJpdi0+aG9zdCA9IGF0YV9ob3N0X2FsbG9jX3BpbmZvKHByaXYtPmRldiwgcHBpLCAxKTsKKwlpZiAocHJpdi0+aG9zdCA9PSBOVUxMKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIEFUQSBwb3J0IHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNldHVwIHRoZSBwcml2YXRlIGRhdGEgaW4gaG9zdCB0b28gKi8KKwlwcml2LT5ob3N0LT5wcml2YXRlX2RhdGEgPSBwcml2OworCisJLyogTWFwIGJhc2UgcmVnaXN0ZXJzICovCisJcHJpdi0+dGZyZWdzID0gZGV2bV9pb3JlbWFwKHByaXYtPmRldiwgdGZyZWdzLCAweDEwMCk7CisJaWYgKHByaXYtPnRmcmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiRmFpbGVkIHRvIG1hcCBBVEEgcG9ydHNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcHJpdi0+aG9zdC0+aW9tYXAgPSAmcHJpdi0+dGZyZWdzOworCisJLyogTWFwIERNQSByZWdzICovCisJaWYgKGRtYXJlZ3MgIT0gMCkgeworCQlkbWFfcmVncyA9IGRldm1faW9yZW1hcChwcml2LT5kZXYsIGRtYXJlZ3MsCisJCQkJCXNpemVvZihzdHJ1Y3QgZGJkbWFfcmVncykpOworCQlpZiAoZG1hX3JlZ3MgPT0gTlVMTCkKKwkJCWRldl93YXJuKHByaXYtPmRldiwgIkZhaWxlZCB0byBtYXAgQVRBIERNQSByZWdpc3RlcnNcbiIpOworCX0KKworCS8qIElmIGNoaXAgaGFzIGxvY2FsIGZlYXR1cmUgY29udHJvbCwgbWFwIHRob3NlIHJlZ3MgdG9vICovCisJaWYgKGZjcmVncyAhPSAwKSB7CisJCXByaXYtPmthdWFpX2ZjciA9IGRldm1faW9yZW1hcChwcml2LT5kZXYsIGZjcmVncywgNCk7CisJCWlmIChwcml2LT5rYXVhaV9mY3IgPT0gTlVMTCkgeworCQkJZGV2X2Vycihwcml2LT5kZXYsICJGYWlsZWQgdG8gbWFwIEFUQSBGQ1IgcmVnaXN0ZXJcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKiBTZXR1cCBwb3J0IGRhdGEgc3RydWN0dXJlICovCisJcGF0YV9tYWNpb19zZXR1cF9pb3MoJnByaXYtPmhvc3QtPnBvcnRzWzBdLT5pb2FkZHIsCisJCQkgICAgIHByaXYtPnRmcmVncywgZG1hX3JlZ3MpOworCXByaXYtPmhvc3QtPnBvcnRzWzBdLT5wcml2YXRlX2RhdGEgPSBwcml2OworCisJLyogaGFyZC1yZXNldCB0aGUgY29udHJvbGxlciAqLworCXBhdGFfbWFjaW9fcmVzZXRfaHcocHJpdiwgMCk7CisJcGF0YV9tYWNpb19hcHBseV90aW1pbmdzKHByaXYtPmhvc3QtPnBvcnRzWzBdLCAwKTsKKworCS8qIEVuYWJsZSBidXMgbWFzdGVyIGlmIG5lY2Vzc2FyeSAqLworCWlmIChwcml2LT5wZGV2ICYmIGRtYV9yZWdzKQorCQlwY2lfc2V0X21hc3Rlcihwcml2LT5wZGV2KTsKKworCWRldl9pbmZvKHByaXYtPmRldiwgIkFjdGl2YXRpbmcgcGF0YS1tYWNpbyBjaGlwc2V0ICVzLCBBcHBsZSBidXMgSUQgJWRcbiIsCisJCSBtYWNpb19hdGFfbmFtZXNbcHJpdi0+a2luZF0sIHByaXYtPmFhcGxfYnVzX2lkKTsKKworCS8qIFN0YXJ0IGl0IHVwICovCisJcHJpdi0+aXJxID0gaXJxOworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShwcml2LT5ob3N0LCBpcnEsIGF0YV9zZmZfaW50ZXJydXB0LCAwLAorCQkJCSAmcGF0YV9tYWNpb19zaHQpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXRhX21hY2lvX2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2CSpwcml2OworCXJlc291cmNlX3NpemVfdAkJdGZyZWdzLCBkbWFyZWdzID0gMDsKKwl1bnNpZ25lZCBsb25nCQlpcnE7CisJaW50CQkJcmM7CisKKwkvKiBDaGVjayBmb3IgYnJva2VuIGRldmljZS10cmVlcyAqLworCWlmIChtYWNpb19yZXNvdXJjZV9jb3VudChtZGV2KSA9PSAwKSB7CisJCWRldl9lcnIoJm1kZXYtPm9mZGV2LmRldiwKKwkJCSJObyBhZGRyZXNzZXMgZm9yIGNvbnRyb2xsZXJcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIEVuYWJsZSBtYW5hZ2VkIHJlc291cmNlcyAqLworCW1hY2lvX2VuYWJsZV9kZXZyZXMobWRldik7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdCBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJcHJpdiA9IGRldm1fa3phbGxvYygmbWRldi0+b2ZkZXYuZGV2LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgcGF0YV9tYWNpb19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZtZGV2LT5vZmRldi5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHByaXZhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXByaXYtPm5vZGUgPSBvZl9ub2RlX2dldChtZGV2LT5vZmRldi5ub2RlKTsKKwlwcml2LT5tZGV2ID0gbWRldjsKKwlwcml2LT5kZXYgPSAmbWRldi0+b2ZkZXYuZGV2OworCisJLyogUmVxdWVzdCBtZW1vcnkgcmVzb3VyY2UgZm9yIHRhc2tmaWxlIHJlZ2lzdGVycyAqLworCWlmIChtYWNpb19yZXF1ZXN0X3Jlc291cmNlKG1kZXYsIDAsICJwYXRhLW1hY2lvIikpIHsKKwkJZGV2X2VycigmbWRldi0+b2ZkZXYuZGV2LAorCQkJIkNhbm5vdCBvYnRhaW4gdGFza2ZpbGUgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwl0ZnJlZ3MgPSBtYWNpb19yZXNvdXJjZV9zdGFydChtZGV2LCAwKTsKKworCS8qIFJlcXVlc3QgcmVzb3VyY2VzIGZvciBETUEgcmVnaXN0ZXJzIGlmIGFueSAqLworCWlmIChtYWNpb19yZXNvdXJjZV9jb3VudChtZGV2KSA+PSAyKSB7CisJCWlmIChtYWNpb19yZXF1ZXN0X3Jlc291cmNlKG1kZXYsIDEsICJwYXRhLW1hY2lvLWRtYSIpKQorCQkJZGV2X2VycigmbWRldi0+b2ZkZXYuZGV2LAorCQkJCSJDYW5ub3Qgb2J0YWluIERNQSByZXNvdXJjZVxuIik7CisJCWVsc2UKKwkJCWRtYXJlZ3MgPSBtYWNpb19yZXNvdXJjZV9zdGFydChtZGV2LCAxKTsKKwl9CisKKwkvKgorCSAqIEZpeHVwIG1pc3NpbmcgSVJRIGZvciBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgd2l0aCBicm9rZW4KKwkgKiBkZXZpY2UtdHJlZXMuCisJICoKKwkgKiBUaGlzIGlzIGEgYml0IGJvZ3VzLCBpdCBzaG91bGQgYmUgZml4ZWQgaW4gdGhlIGRldmljZS10cmVlIGl0c2VsZiwKKwkgKiB2aWEgdGhlIGV4aXN0aW5nIG1hY2lvIGZpeHVwcywgYmFzZWQgb24gdGhlIHR5cGUgb2YgaW50ZXJydXB0CisJICogY29udHJvbGxlciBpbiB0aGUgbWFjaGluZS4gSG93ZXZlciwgSSBoYXZlIG5vIHRlc3QgSFcgZm9yIHRoaXMgY2FzZSwKKwkgKiBhbmQgdGhpcyB0cmljayB3b3JrcyB3ZWxsIGVub3VnaCBvbiB0aG9zZSBvbGQgbWFjaGluZXMuLi4KKwkgKi8KKwlpZiAobWFjaW9faXJxX2NvdW50KG1kZXYpID09IDApIHsKKwkJZGV2X3dhcm4oJm1kZXYtPm9mZGV2LmRldiwKKwkJCSAiTm8gaW50ZXJydXB0cyBmb3IgY29udHJvbGxlciwgdXNpbmcgMTNcbiIpOworCQlpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgMTMpOworCX0gZWxzZQorCQlpcnEgPSBtYWNpb19pcnEobWRldiwgMCk7CisKKwkvKiBQcmV2dmVudCBtZWRpYSBiYXkgY2FsbGJhY2tzIHVudGlsIGZ1bGx5IHJlZ2lzdGVyZWQgKi8KKwlsb2NrX21lZGlhX2JheShwcml2LT5tZGV2LT5tZWRpYV9iYXkpOworCisJLyogR2V0IHJlZ2lzdGVyIGFkZHJlc3NlcyBhbmQgY2FsbCBjb21tb24gaW5pdGlhbGl6YXRpb24gKi8KKwlyYyA9IHBhdGFfbWFjaW9fY29tbW9uX2luaXQocHJpdiwKKwkJCQkgICAgdGZyZWdzLAkJLyogVGFza2ZpbGUgcmVncyAqLworCQkJCSAgICBkbWFyZWdzLAkJLyogREJETUEgcmVncyAqLworCQkJCSAgICAwLAkJCS8qIEZlYXR1cmUgY29udHJvbCAqLworCQkJCSAgICBpcnEpOworCXVubG9ja19tZWRpYV9iYXkocHJpdi0+bWRldi0+bWVkaWFfYmF5KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcGF0YV9tYWNpb19kZXRhY2goc3RydWN0IG1hY2lvX2RldiAqbWRldikKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBtYWNpb19nZXRfZHJ2ZGF0YShtZGV2KTsKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2ICpwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCisJbG9ja19tZWRpYV9iYXkocHJpdi0+bWRldi0+bWVkaWFfYmF5KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgbWVkaWFiYXkgY2FsbGJhY2sgZG9lc24ndCB0cnkgdG8gYWNjZXNzCisJICogZGVhZCBzdHVmZgorCSAqLworCXByaXYtPmhvc3QtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKwl1bmxvY2tfbWVkaWFfYmF5KHByaXYtPm1kZXYtPm1lZGlhX2JheSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IHBhdGFfbWFjaW9fc3VzcGVuZChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBtYWNpb19nZXRfZHJ2ZGF0YShtZGV2KTsKKworCXJldHVybiBwYXRhX21hY2lvX2RvX3N1c3BlbmQoaG9zdC0+cHJpdmF0ZV9kYXRhLCBtZXNnKTsKK30KKworc3RhdGljIGludCBwYXRhX21hY2lvX3Jlc3VtZShzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IG1hY2lvX2dldF9kcnZkYXRhKG1kZXYpOworCisJcmV0dXJuIHBhdGFfbWFjaW9fZG9fcmVzdW1lKGhvc3QtPnByaXZhdGVfZGF0YSk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCitzdGF0aWMgdm9pZCBwYXRhX21hY2lvX21iX2V2ZW50KHN0cnVjdCBtYWNpb19kZXYqIG1kZXYsIGludCBtYl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBtYWNpb19nZXRfZHJ2ZGF0YShtZGV2KTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpOworCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaG9zdCB8fCAhaG9zdC0+cHJpdmF0ZV9kYXRhKQorCQlyZXR1cm47CisJYXAgPSBob3N0LT5wb3J0c1swXTsKKwlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCWVoaSA9ICZhcC0+bGluay5laF9pbmZvOworCWlmIChtYl9zdGF0ZSA9PSBNQl9DRCkgeworCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJtZWRpYWJheSBwbHVnIik7CisJCWF0YV9laGlfaG90cGx1Z2dlZChlaGkpOworCQlhdGFfcG9ydF9mcmVlemUoYXApOworCX0gZWxzZSB7CisJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIm1lZGlhYmF5IHVucGx1ZyIpOworCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBBTEwpCisJCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19ERVRBQ0g7CisJCWF0YV9wb3J0X2Fib3J0KGFwKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOworCit9CisjZW5kaWYgLyogQ09ORklHX1BNQUNfTUVESUFCQVkgKi8KKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXRhX21hY2lvX3BjaV9hdHRhY2goc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgcGF0YV9tYWNpb19wcml2CSpwcml2OworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbnA7CisJcmVzb3VyY2Vfc2l6ZV90CQlyYmFzZTsKKworCS8qIFdlIGNhbm5vdCB1c2UgYSBNYWNJTyBjb250cm9sbGVyIHdpdGhvdXQgaXRzIE9GIGRldmljZSBub2RlICovCisJbnAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkNhbm5vdCBmaW5kIE9GIGRldmljZSBub2RlIGZvciBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQ2hlY2sgdGhhdCBpdCBjYW4gYmUgZW5hYmxlZCAqLworCWlmIChwY2ltX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkNhbm5vdCBlbmFibGUgY29udHJvbGxlciBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdCBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgcGF0YV9tYWNpb19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHByaXZhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXByaXYtPm5vZGUgPSBvZl9ub2RlX2dldChucCk7CisJcHJpdi0+cGRldiA9IHBkZXY7CisJcHJpdi0+ZGV2ID0gJnBkZXYtPmRldjsKKworCS8qIEdldCBNTUlPIHJlZ2lvbnMgKi8KKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAicGF0YS1tYWNpbyIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEdldCByZWdpc3RlciBhZGRyZXNzZXMgYW5kIGNhbGwgY29tbW9uIGluaXRpYWxpemF0aW9uICovCisJcmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaWYgKHBhdGFfbWFjaW9fY29tbW9uX2luaXQocHJpdiwKKwkJCQkgICByYmFzZSArIDB4MjAwMCwJLyogVGFza2ZpbGUgcmVncyAqLworCQkJCSAgIHJiYXNlICsgMHgxMDAwLAkvKiBEQkRNQSByZWdzICovCisJCQkJICAgcmJhc2UsCQkvKiBGZWF0dXJlIGNvbnRyb2wgKi8KKwkJCQkgICBwZGV2LT5pcnEpKQorCQlyZXR1cm4gLUVOWElPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwYXRhX21hY2lvX3BjaV9kZXRhY2goc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJYXRhX2hvc3RfZGV0YWNoKGhvc3QpOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgcGF0YV9tYWNpb19wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIHBhdGFfbWFjaW9fZG9fc3VzcGVuZChob3N0LT5wcml2YXRlX2RhdGEsIG1lc2cpOworfQorCitzdGF0aWMgaW50IHBhdGFfbWFjaW9fcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gcGF0YV9tYWNpb19kb19yZXN1bWUoaG9zdC0+cHJpdmF0ZV9kYXRhKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwYXRhX21hY2lvX21hdGNoW10gPQoreworCXsKKwkubmFtZSAJCT0gIklERSIsCisJfSwKKwl7CisJLm5hbWUgCQk9ICJBVEEiLAorCX0sCisJeworCS50eXBlCQk9ICJpZGUiLAorCX0sCisJeworCS50eXBlCQk9ICJhdGEiLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBwYXRhX21hY2lvX2RyaXZlciA9Cit7CisJLm5hbWUgCQk9ICJwYXRhLW1hY2lvIiwKKwkubWF0Y2hfdGFibGUJPSBwYXRhX21hY2lvX21hdGNoLAorCS5wcm9iZQkJPSBwYXRhX21hY2lvX2F0dGFjaCwKKwkucmVtb3ZlCQk9IHBhdGFfbWFjaW9fZGV0YWNoLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gcGF0YV9tYWNpb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGF0YV9tYWNpb19yZXN1bWUsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUE1BQ19NRURJQUJBWQorCS5tZWRpYWJheV9ldmVudAk9IHBhdGFfbWFjaW9fbWJfZXZlbnQsCisjZW5kaWYKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYXRhX21hY2lvX3BjaV9tYXRjaFtdID0geworCXsgUENJX1ZERVZJQ0UoQVBQTEUsIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQVRBKSwJMCB9LAorCXsgUENJX1ZERVZJQ0UoQVBQTEUsIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRF9BVEExMDApLAkwIH0sCisJeyBQQ0lfVkRFVklDRShBUFBMRSwgUENJX0RFVklDRV9JRF9BUFBMRV9LMl9BVEExMDApLAkwIH0sCisJeyBQQ0lfVkRFVklDRShBUFBMRSwgUENJX0RFVklDRV9JRF9BUFBMRV9TSF9BVEEpLAkwIH0sCisJeyBQQ0lfVkRFVklDRShBUFBMRSwgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9BVEEpLAkwIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGF0YV9tYWNpb19wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJwYXRhLXBjaS1tYWNpbyIsCisJLmlkX3RhYmxlCT0gcGF0YV9tYWNpb19wY2lfbWF0Y2gsCisJLnByb2JlCQk9IHBhdGFfbWFjaW9fcGNpX2F0dGFjaCwKKwkucmVtb3ZlCQk9IHBhdGFfbWFjaW9fcGNpX2RldGFjaCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHBhdGFfbWFjaW9fcGNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwYXRhX21hY2lvX3BjaV9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyID0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGF0YV9tYWNpb19wY2lfbWF0Y2gpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHBhdGFfbWFjaW9faW5pdCh2b2lkKQoreworCWludCByYzsKKworCWlmICghbWFjaGluZV9pcyhwb3dlcm1hYykpCisJCXJldHVybiAtRU5PREVWOworCisJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwYXRhX21hY2lvX3BjaV9kcml2ZXIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gbWFjaW9fcmVnaXN0ZXJfZHJpdmVyKCZwYXRhX21hY2lvX2RyaXZlcik7CisJaWYgKHJjKSB7CisJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGF0YV9tYWNpb19wY2lfZHJpdmVyKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBhdGFfbWFjaW9fZXhpdCh2b2lkKQoreworCW1hY2lvX3VucmVnaXN0ZXJfZHJpdmVyKCZwYXRhX21hY2lvX2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwYXRhX21hY2lvX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwYXRhX21hY2lvX2luaXQpOworbW9kdWxlX2V4aXQocGF0YV9tYWNpb19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmVuamFtaW4gSGVycmVuc2NobWlkdCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBcHBsZSBNYWNJTyBQQVRBIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKaW5kZXggZDZmNjk1Ni4uMzdlZjQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCkBAIC04NTMsNyArODUzLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNzMSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlc19jczEtPnN0YXJ0LAotCQkJCQkgICByZXNfY3MwLT5lbmQgLSByZXNfY3MxLT5zdGFydCArIDEpOworCQkJCQkgICByZXNvdXJjZV9zaXplKHJlc19jczEpKTsKIAogCQlpZiAoIWNzMSkKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IGE4YTdiZTAuLmRmOGVlMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CkBAIC01MzgsNiArNTM5LDcgQEAKIAogc3RydWN0IG12X2hvc3RfcHJpdiB7CiAJdTMyCQkJaHBfZmxhZ3M7CisJdW5zaWduZWQgaW50IAkJYm9hcmRfaWR4OwogCXUzMgkJCW1haW5faXJxX21hc2s7CiAJc3RydWN0IG12X3BvcnRfc2lnbmFsCXNpZ25hbFs4XTsKIAljb25zdCBzdHJ1Y3QgbXZfaHdfb3BzCSpvcHM7CkBAIC01NDgsNiArNTUwLDEwIEBACiAJdTMyCQkJaXJxX2NhdXNlX29mZnNldDsKIAl1MzIJCQlpcnFfbWFza19vZmZzZXQ7CiAJdTMyCQkJdW5tYXNrX2FsbF9pcnFzOworCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJc3RydWN0IGNsawkJKmNsazsKKyNlbmRpZgogCS8qCiAJICogVGhlc2UgY29uc2lzdGVudCBETUEgbWVtb3J5IHBvb2xzIGdpdmUgdXMgZ3VhcmFudGVlZAogCSAqIGFsaWdubWVudCBmb3IgaGFyZHdhcmUtYWNjZXNzZWQgZGF0YSBzdHJ1Y3R1cmVzLApAQCAtMjc3NSw3ICsyNzgxLDcgQEAKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcDsKIAlpbnQgZWRtYV93YXNfZW5hYmxlZDsKIAotCWlmICghYXAgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkgeworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkgewogCQltdl91bmV4cGVjdGVkX2ludHIoYXAsIDApOwogCQlyZXR1cm47CiAJfQpAQCAtMzM5Myw3ICszMzk5LDcgQEAKIAlaRVJPKDB4MDI0KTsJCS8qIHJlc3BxIG91dHAgKi8KIAlaRVJPKDB4MDIwKTsJCS8qIHJlc3BxIGlucCAqLwogCVpFUk8oMHgwMmMpOwkJLyogdGVzdCBjb250cm9sICovCi0Jd3JpdGVsKDB4YmMsIHBvcnRfbW1pbyArIEVETUFfSU9SRFlfVE1PVVQpOworCXdyaXRlbCgweDgwMCwgcG9ydF9tbWlvICsgRURNQV9JT1JEWV9UTU9VVCk7CiB9CiAKICN1bmRlZiBaRVJPCkBAIC0zODU0LDcgKzM4NjAsNiBAQAogLyoqCiAgKiAgICAgIG12X2luaXRfaG9zdCAtIFBlcmZvcm0gc29tZSBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaG9zdC4KICAqCUBob3N0OiBBVEEgaG9zdCB0byBpbml0aWFsaXplCi0gKiAgICAgIEBib2FyZF9pZHg6IGNvbnRyb2xsZXIgaW5kZXgKICAqCiAgKiAgICAgIElmIHBvc3NpYmxlLCBkbyBhbiBlYXJseSBnbG9iYWwgcmVzZXQgb2YgdGhlIGhvc3QuICBUaGVuIGRvCiAgKiAgICAgIG91ciBwb3J0IGluaXQgYW5kIGNsZWFyL3VubWFzayBhbGwvcmVsZXZhbnQgaG9zdCBpbnRlcnJ1cHRzLgpAQCAtMzg2MiwxMyArMzg2NywxMyBAQAogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXN0YXRpYyBpbnQgbXZfaW5pdF9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGJvYXJkX2lkeCkKK3N0YXRpYyBpbnQgbXZfaW5pdF9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKIHsKIAlpbnQgcmMgPSAwLCBuX2hjLCBwb3J0LCBoYzsKIAlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+YmFzZTsKIAotCXJjID0gbXZfY2hpcF9pZChob3N0LCBib2FyZF9pZHgpOworCXJjID0gbXZfY2hpcF9pZChob3N0LCBocHJpdi0+Ym9hcmRfaWR4KTsKIAlpZiAocmMpCiAJCWdvdG8gZG9uZTsKIApAQCAtMzkwNSwxNCArMzkxMCw2IEBACiAJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfcG9ydF9iYXNlKG1taW8sIHBvcnQpOwogCiAJCW12X3BvcnRfaW5pdCgmYXAtPmlvYWRkciwgcG9ydF9tbWlvKTsKLQotI2lmZGVmIENPTkZJR19QQ0kKLQkJaWYgKCFJU19TT0MoaHByaXYpKSB7Ci0JCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcG9ydF9tbWlvIC0gbW1pbzsKLQkJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgTVZfUFJJTUFSWV9CQVIsIC0xLCAibW1pbyIpOwotCQkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNVl9QUklNQVJZX0JBUiwgb2Zmc2V0LCAicG9ydCIpOwotCQl9Ci0jZW5kaWYKIAl9CiAKIAlmb3IgKGhjID0gMDsgaGMgPCBuX2hjOyBoYysrKSB7CkBAIC00MDM1LDEyICs0MDMyLDIxIEBACiAJCXJldHVybiAtRU5PTUVNOwogCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhwcml2OwogCWhwcml2LT5uX3BvcnRzID0gbl9wb3J0czsKKwlocHJpdi0+Ym9hcmRfaWR4ID0gY2hpcF9zb2M7CiAKIAlob3N0LT5pb21hcCA9IE5VTEw7CiAJaHByaXYtPmJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKIAkJCQkgICByZXNvdXJjZV9zaXplKHJlcykpOwogCWhwcml2LT5iYXNlIC09IFNBVEFIQzBfUkVHX0JBU0U7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlocHJpdi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGhwcml2LT5jbGspKQorCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGNsa2RldlxuIik7CisJZWxzZQorCQljbGtfZW5hYmxlKGhwcml2LT5jbGspOworI2VuZGlmCisKIAkvKgogCSAqIChSZS0pcHJvZ3JhbSBNQlVTIHJlbWFwcGluZyB3aW5kb3dzIGlmIHdlIGFyZSBhc2tlZCB0by4KIAkgKi8KQEAgLTQwNDksMTIgKzQwNTUsMTIgQEAKIAogCXJjID0gbXZfY3JlYXRlX2RtYV9wb29scyhocHJpdiwgJnBkZXYtPmRldik7CiAJaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJCWdvdG8gZXJyOwogCiAJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCi0JcmMgPSBtdl9pbml0X2hvc3QoaG9zdCwgY2hpcF9zb2MpOworCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOworCQlnb3RvIGVycjsKIAogCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAogCQkgICAic2xvdHMgJXUgcG9ydHMgJWRcbiIsICh1bnNpZ25lZClNVl9NQVhfUV9ERVBUSCwKQEAgLTQwNjIsNiArNDA2OCwxNSBAQAogCiAJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIG12X2ludGVycnVwdCwKIAkJCQkgSVJRRl9TSEFSRUQsICZtdjZfc2h0KTsKK2VycjoKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlpZiAoIUlTX0VSUihocHJpdi0+Y2xrKSkgeworCQljbGtfZGlzYWJsZShocHJpdi0+Y2xrKTsKKwkJY2xrX3B1dChocHJpdi0+Y2xrKTsKKwl9CisjZW5kaWYKKworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTQwNzYsMTQgKzQwOTEsNjYgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisjZW5kaWYKIAlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlpZiAoIUlTX0VSUihocHJpdi0+Y2xrKSkgeworCQljbGtfZGlzYWJsZShocHJpdi0+Y2xrKTsKKwkJY2xrX3B1dChocHJpdi0+Y2xrKTsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdl9wbGF0Zm9ybV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaWYgKGhvc3QpCisJCXJldHVybiBhdGFfaG9zdF9zdXNwZW5kKGhvc3QsIHN0YXRlKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12X3BsYXRmb3JtX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKGhvc3QpIHsKKwkJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJCWNvbnN0IHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgKm12X3BsYXRmb3JtX2RhdGEgPSBcCisJCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJLyoKKwkJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgorCQkgKi8KKwkJaWYgKG12X3BsYXRmb3JtX2RhdGEtPmRyYW0gIT0gTlVMTCkKKwkJCW12X2NvbmZfbWJ1c193aW5kb3dzKGhwcml2LCBtdl9wbGF0Zm9ybV9kYXRhLT5kcmFtKTsKKworCQkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KKwkJcmV0ID0gbXZfaW5pdF9ob3N0KGhvc3QpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogRXJyb3IgZHVyaW5nIEhXIGluaXRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBtdl9wbGF0Zm9ybV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgbXZfcGxhdGZvcm1fcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdl9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLnByb2JlCQkJPSBtdl9wbGF0Zm9ybV9wcm9iZSwKIAkucmVtb3ZlCQkJPSBfX2RldmV4aXRfcChtdl9wbGF0Zm9ybV9yZW1vdmUpLAorCS5zdXNwZW5kCQk9IG12X3BsYXRmb3JtX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gbXZfcGxhdGZvcm1fcmVzdW1lLAogCS5kcml2ZXIJCQk9IHsKIAkJCQkgICAubmFtZSA9IERSVl9OQU1FLAogCQkJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNDA5NCw2ICs0MTYxLDkgQEAKICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IG12X3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdl9wY2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXZfcGNpX2RyaXZlciA9IHsKQEAgLTQxMDEsNiArNDE3MSwxMSBAQAogCS5pZF90YWJsZQkJPSBtdl9wY2lfdGJsLAogCS5wcm9iZQkJCT0gbXZfcGNpX2luaXRfb25lLAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAkJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IG12X3BjaV9kZXZpY2VfcmVzdW1lLAorI2VuZGlmCisKIH07CiAKIC8qIG1vdmUgdG8gUENJIGxheWVyIG9yIGxpYmF0YSBjb3JlPyAqLwpAQCAtNDE5NCw3ICs0MjY5LDcgQEAKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZtdl9wb3J0X2luZm9bYm9hcmRfaWR4XSwgTlVMTCB9OwogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdjsKLQlpbnQgbl9wb3J0cywgcmM7CisJaW50IG5fcG9ydHMsIHBvcnQsIHJjOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CkBAIC00MjA4LDYgKzQyODMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlob3N0LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKIAlocHJpdi0+bl9wb3J0cyA9IG5fcG9ydHM7CisJaHByaXYtPmJvYXJkX2lkeCA9IGJvYXJkX2lkeDsKIAogCS8qIGFjcXVpcmUgcmVzb3VyY2VzICovCiAJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC00MjMwLDggKzQzMDYsMTcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCWZvciAocG9ydCA9IDA7IHBvcnQgPCBob3N0LT5uX3BvcnRzOyBwb3J0KyspIHsKKwkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW3BvcnRdOworCQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X3BvcnRfYmFzZShocHJpdi0+YmFzZSwgcG9ydCk7CisJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwb3J0X21taW8gLSBocHJpdi0+YmFzZTsKKworCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIE1WX1BSSU1BUllfQkFSLCAtMSwgIm1taW8iKTsKKwkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNVl9QUklNQVJZX0JBUiwgb2Zmc2V0LCAicG9ydCIpOworCX0KKwogCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLwotCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QsIGJvYXJkX2lkeCk7CisJcmMgPSBtdl9pbml0X2hvc3QoaG9zdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTQyNDcsNiArNDMzMiwyNyBAQAogCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIG12X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJIElTX0dFTl9JKGhwcml2KSA/ICZtdjVfc2h0IDogJm12Nl9zaHQpOwogfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG12X3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLworCXJjID0gbXZfaW5pdF9ob3N0KGhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKICNlbmRpZgogCiBzdGF0aWMgaW50IG12X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggYmM1M2ZlZC4uZjdkNmViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0yMDY0LDEyICsyMDY0LDEwIEBACiAJcmV0dXJuIC1FQlVTWTsKICAgICB9CiAJCi0gICAgcHJpbnRrKEZPUkUyMDBFICJkZXZpY2UgJXMsIHJldi4gJWMsIFMvTjogJWQsIEVTSTogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIAorICAgIHByaW50ayhGT1JFMjAwRSAiZGV2aWNlICVzLCByZXYuICVjLCBTL046ICVkLCBFU0k6ICVwTVxuIiwKIAkgICBmb3JlMjAwZS0+bmFtZSwgCiAJICAgKHByb20tPmh3X3JldmlzaW9uICYgMHhGRikgKyAnQCcsICAgIC8qIHByb2JhYmx5IG1lYW5pbmdsZXNzIHdpdGggU0JBIGJvYXJkcyAqLwotCSAgIHByb20tPnNlcmlhbF9udW1iZXIgJiAweEZGRkYsCi0JICAgcHJvbS0+bWFjX2FkZHJbIDIgXSwgcHJvbS0+bWFjX2FkZHJbIDMgXSwgcHJvbS0+bWFjX2FkZHJbIDQgXSwKLQkgICBwcm9tLT5tYWNfYWRkclsgNSBdLCBwcm9tLT5tYWNfYWRkclsgNiBdLCBwcm9tLT5tYWNfYWRkclsgNyBdKTsKKwkgICBwcm9tLT5zZXJpYWxfbnVtYmVyICYgMHhGRkZGLCAmcHJvbS0+bWFjX2FkZHJbMl0pOwogCQogICAgIGZvciAoaSA9IDA7IGkgPCBFU0lfTEVOOyBpKyspIHsKIAlmb3JlMjAwZS0+ZXNpWyBpIF0gPSBmb3JlMjAwZS0+YXRtX2Rldi0+ZXNpWyBpIF0gPSBwcm9tLT5tYWNfYWRkclsgaSArIDIgXTsKQEAgLTI4NDUsMTMgKzI4NDMsMTIgQEAKIAkJIiAgIGludGVycnVwdCBsaW5lOlx0XHQlc1xuIgogCQkiICAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzOlx0MHglcFxuIgogCQkiICAgdmlydHVhbCBiYXNlIGFkZHJlc3M6XHQweCVwXG4iCi0JCSIgICBmYWN0b3J5IGFkZHJlc3MgKEVTSSk6XHQlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIgorCQkiICAgZmFjdG9yeSBhZGRyZXNzIChFU0kpOlx0JXBNXG4iCiAJCSIgICBib2FyZCBzZXJpYWwgbnVtYmVyOlx0XHQlZFxuXG4iLAogCQlmb3JlMjAwZV9pcnFfaXRvYShmb3JlMjAwZS0+aXJxKSwKIAkJKHZvaWQqKWZvcmUyMDBlLT5waHlzX2Jhc2UsCiAJCWZvcmUyMDBlLT52aXJ0X2Jhc2UsCi0JCWZvcmUyMDBlLT5lc2lbMF0sIGZvcmUyMDBlLT5lc2lbMV0sIGZvcmUyMDBlLT5lc2lbMl0sCi0JCWZvcmUyMDBlLT5lc2lbM10sIGZvcmUyMDBlLT5lc2lbNF0sIGZvcmUyMDBlLT5lc2lbNV0sCisJCWZvcmUyMDBlLT5lc2ksCiAJCWZvcmUyMDBlLT5lc2lbNF0gKiAyNTYgKyBmb3JlMjAwZS0+ZXNpWzVdKTsKIAogCXJldHVybiBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwppbmRleCBlMzNhZTAwLi4wMWYzNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKQEAgLTM1NTcsMTAgKzM1NTcsNyBAQAogCWlmICh0bXApIHsKIAkJbWVtY3B5KGNhcmQtPmF0bWRldi0+ZXNpLCB0bXAtPmRldl9hZGRyLCA2KTsKIAotCQlwcmludGsoIiVzOiBFU0kgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSAgICAgICBjYXJkLT5uYW1lLCBjYXJkLT5hdG1kZXYtPmVzaVswXSwgY2FyZC0+YXRtZGV2LT5lc2lbMV0sCi0JCSAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVsyXSwgY2FyZC0+YXRtZGV2LT5lc2lbM10sCi0JCSAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVs0XSwgY2FyZC0+YXRtZGV2LT5lc2lbNV0pOworCQlwcmludGsoIiVzOiBFU0kgJXBNXG4iLCBjYXJkLT5uYW1lLCBjYXJkLT5hdG1kZXYtPmVzaSk7CiAJfQogCS8qCiAJICogWFhYOiA8L2hhY2s+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9sYW5haS5jIGIvZHJpdmVycy9hdG0vbGFuYWkuYwppbmRleCBjZjk3YzM0Li43ZmU3YzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9sYW5haS5jCisrKyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKQEAgLTk5OCw5ICs5OTgsNyBAQAogCQkJICAgICh1bnNpZ25lZCBpbnQpIGVbRUVQUk9NX01BQ19SRVYgKyBpXSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCURQUklOVEsoImVlcHJvbTogTUFDIGFkZHJlc3MgPSAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkJZVtFRVBST01fTUFDICsgMF0sIGVbRUVQUk9NX01BQyArIDFdLCBlW0VFUFJPTV9NQUMgKyAyXSwKLQkJZVtFRVBST01fTUFDICsgM10sIGVbRUVQUk9NX01BQyArIDRdLCBlW0VFUFJPTV9NQUMgKyA1XSk7CisJRFBSSU5USygiZWVwcm9tOiBNQUMgYWRkcmVzcyA9ICVwTVxuIiwgJmVbRUVQUk9NX01BQ10pOwogCS8qIFZlcmlmeSBzZXJpYWwgbnVtYmVyICovCiAJbGFuYWktPnNlcmlhbG5vID0gZWVwcm9tX2JlNChsYW5haSwgRUVQUk9NX1NFUklBTCk7CiAJdiA9IGVlcHJvbV9iZTQobGFuYWksIEVFUFJPTV9TRVJJQUxfUkVWKTsKQEAgLTI0ODMsMTQgKzI0ODEsOCBAQAogCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAicmV2aXNpb246IGJvYXJkPSVkLCBwY2lfaWY9JWRcbiIsCiAJCSAgICBsYW5haS0+Ym9hcmRfcmV2LCAoaW50KSBsYW5haS0+cGNpLT5yZXZpc2lvbik7CiAJaWYgKGxlZnQtLSA9PSAwKQotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiRUVQUk9NIEVTSTogIgotCQkgICAgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCQkgICAgbGFuYWktPmVlcHJvbVtFRVBST01fTUFDICsgMF0sCi0JCSAgICBsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUMgKyAxXSwKLQkJICAgIGxhbmFpLT5lZXByb21bRUVQUk9NX01BQyArIDJdLAotCQkgICAgbGFuYWktPmVlcHJvbVtFRVBST01fTUFDICsgM10sCi0JCSAgICBsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUMgKyA0XSwKLQkJICAgIGxhbmFpLT5lZXByb21bRUVQUk9NX01BQyArIDVdKTsKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIkVFUFJPTSBFU0k6ICVwTVxuIiwKKwkJICAgICZsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUNdKTsKIAlpZiAobGVmdC0tID09IDApCiAJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJzdGF0dXM6IFNPT0w9JWQsIExPQ0Q9JWQsIExFRD0lZCwgIgogCQkgICAgIkdQSU49JWRcbiIsIChsYW5haS0+c3RhdHVzICYgU1RBVFVTX1NPT0wpID8gMSA6IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9uaWNzdGFyLmMgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKaW5kZXggM2RhODA0Yi4uNTA4Mzg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbmljc3Rhci5jCisrKyBiL2RyaXZlcnMvYXRtL25pY3N0YXIuYwpAQCAtODA3LDkgKzgwNyw3IEBACiAgICAgICB9CiAgICB9CiAKLSAgIHByaW50aygibmljc3RhciVkOiBNQUMgYWRkcmVzcyAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwgaSwKLSAgICAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVswXSwgY2FyZC0+YXRtZGV2LT5lc2lbMV0sIGNhcmQtPmF0bWRldi0+ZXNpWzJdLAotICAgICAgICAgIGNhcmQtPmF0bWRldi0+ZXNpWzNdLCBjYXJkLT5hdG1kZXYtPmVzaVs0XSwgY2FyZC0+YXRtZGV2LT5lc2lbNV0pOworICAgcHJpbnRrKCJuaWNzdGFyJWQ6IE1BQyBhZGRyZXNzICVwTVxuIiwgaSwgY2FyZC0+YXRtZGV2LT5lc2kpOwogCiAgICBjYXJkLT5hdG1kZXYtPmRldl9kYXRhID0gY2FyZDsKICAgIGNhcmQtPmF0bWRldi0+Y2lfcmFuZ2UudnBpX2JpdHMgPSBjYXJkLT52cGliaXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IDYzYzE0M2UuLmMwYzVhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTcwMyw5ICs3MDMsOSBAQAogCXJldHVybiAwOwogCiBvdXRfdW5yZWdpc3RlcjoKKwlrb2JqZWN0X3B1dCgmcHJpdi0+a29iaik7CiAJa2ZyZWUoZHJ2LT5wKTsKIAlkcnYtPnAgPSBOVUxMOwotCWtvYmplY3RfcHV0KCZwcml2LT5rb2JqKTsKIG91dF9wdXRfYnVzOgogCWJ1c19wdXQoYnVzKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCBmMTI5MGNiLi4yODIwMjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTQ0Niw3ICs0NDYsOCBAQAogICogQGRldjogZGV2aWNlLgogICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQoraW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWlmIChkZXYpCkBAIC00NTksNyArNDYwLDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLXZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCit2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpZiAoZGV2KQogCQlzeXNmc19yZW1vdmVfZmlsZSgmZGV2LT5rb2JqLCAmYXR0ci0+YXR0cik7CkBAIC00NzAsNyArNDcyLDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYmluYXJ5IGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCi1pbnQgZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQoraW50IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIAlpZiAoZGV2KQpAQCAtNDg0LDcgKzQ4Nyw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGJpbmFyeSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotdm9pZCBkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCit2b2lkIGRldmljZV9yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCWlmIChkZXYpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCBhdHRyKTsKQEAgLTkwNSw4ICs5MDksMTAgQEAKIAkJZGV2LT5pbml0X25hbWUgPSBOVUxMOwogCX0KIAotCWlmICghZGV2X25hbWUoZGV2KSkKKwlpZiAoIWRldl9uYW1lKGRldikpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIG5hbWVfZXJyb3I7CisJfQogCiAJcHJfZGVidWcoImRldmljZTogJyVzJzogJXNcbiIsIGRldl9uYW1lKGRldiksIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NwdS5jIGIvZHJpdmVycy9iYXNlL2NwdS5jCmluZGV4IGU2MmE0Y2MuLjk1OGJkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jcHUuYworKysgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKQEAgLTM1LDYgKzM1LDcgQEAKIAlzdHJ1Y3QgY3B1ICpjcHUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY3B1LCBzeXNkZXYpOwogCXNzaXplX3QgcmV0OwogCisJY3B1X2hvdHBsdWdfZHJpdmVyX2xvY2soKTsKIAlzd2l0Y2ggKGJ1ZlswXSkgewogCWNhc2UgJzAnOgogCQlyZXQgPSBjcHVfZG93bihjcHUtPnN5c2Rldi5pZCk7CkBAIC00OSw2ICs1MCw3IEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CisJY3B1X2hvdHBsdWdfZHJpdmVyX3VubG9jaygpOwogCiAJaWYgKHJldCA+PSAwKQogCQlyZXQgPSBjb3VudDsKQEAgLTcyLDYgKzc0LDM4IEBACiAJcGVyX2NwdShjcHVfc3lzX2RldmljZXMsIGxvZ2ljYWxfY3B1KSA9IE5VTEw7CiAJcmV0dXJuOwogfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfQ1BVX1BST0JFX1JFTEVBU0UKK3N0YXRpYyBzc2l6ZV90IGNwdV9wcm9iZV9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhcmNoX2NwdV9wcm9iZShidWYsIGNvdW50KTsKK30KKworc3RhdGljIHNzaXplX3QgY3B1X3JlbGVhc2Vfc3RvcmUoc3RydWN0IGNsYXNzICpjbGFzcywgY29uc3QgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFyY2hfY3B1X3JlbGVhc2UoYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBDTEFTU19BVFRSKHByb2JlLCBTX0lXVVNSLCBOVUxMLCBjcHVfcHJvYmVfc3RvcmUpOworc3RhdGljIENMQVNTX0FUVFIocmVsZWFzZSwgU19JV1VTUiwgTlVMTCwgY3B1X3JlbGVhc2Vfc3RvcmUpOworCitpbnQgX19pbml0IGNwdV9wcm9iZV9yZWxlYXNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZjcHVfc3lzZGV2X2NsYXNzLmtzZXQua29iaiwKKwkJCSAgICAgICAmY2xhc3NfYXR0cl9wcm9iZS5hdHRyKTsKKwlpZiAoIXJjKQorCQlyYyA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZjcHVfc3lzZGV2X2NsYXNzLmtzZXQua29iaiwKKwkJCQkgICAgICAgJmNsYXNzX2F0dHJfcmVsZWFzZS5hdHRyKTsKKworCXJldHVybiByYzsKK30KK2RldmljZV9pbml0Y2FsbChjcHVfcHJvYmVfcmVsZWFzZV9pbml0KTsKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9DUFVfUFJPQkVfUkVMRUFTRSAqLworCiAjZWxzZSAvKiAuLi4gIUNPTkZJR19IT1RQTFVHX0NQVSAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2NwdV9jb250cm9sKHN0cnVjdCBjcHUgKmNwdSkKIHsKQEAgLTk3LDcgKzEzMSw3IEBACiAJICogYm9vdCB1cCBhbmQgdGhpcyBkYXRhIGRvZXMgbm90IGNoYW5nZSB0aGVyZSBhZnRlci4gSGVuY2UgdGhpcwogCSAqIG9wZXJhdGlvbiBzaG91bGQgYmUgc2FmZS4gTm8gbG9ja2luZyByZXF1aXJlZC4KIAkgKi8KLQlhZGRyID0gX19wYShwZXJfY3B1X3B0cihjcmFzaF9ub3RlcywgY3B1bnVtKSk7CisJYWRkciA9IHBlcl9jcHVfcHRyX3RvX3BoeXMocGVyX2NwdV9wdHIoY3Jhc2hfbm90ZXMsIGNwdW51bSkpOwogCXJjID0gc3ByaW50ZihidWYsICIlTHhcbiIsIGFkZHIpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKaW5kZXggNTAzNzViYi4uMDkwZGQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKKysrIGIvZHJpdmVycy9iYXNlL2RldnRtcGZzLmMKQEAgLTMyLDcgKzMyLDcgQEAKIHN0YXRpYyBpbnQgZGV2X21vdW50OwogI2VuZGlmCiAKLXN0YXRpYyByd2xvY2tfdCBkaXJsb2NrOworc3RhdGljIERFRklORV9NVVRFWChkaXJsb2NrKTsKIAogc3RhdGljIGludCBfX2luaXQgbW91bnRfcGFyYW0oY2hhciAqc3RyKQogewpAQCAtOTMsNyArOTMsNyBAQAogewogCWludCBlcnI7CiAKLQlyZWFkX2xvY2soJmRpcmxvY2spOworCW11dGV4X2xvY2soJmRpcmxvY2spOwogCWVyciA9IGRldl9ta2Rpcihub2RlcGF0aCwgMDc1NSk7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7CiAJCWNoYXIgKnBhdGg7CkBAIC0xMDEsOCArMTAxLDEwIEBACiAKIAkJLyogcGFyZW50IGRpcmVjdG9yaWVzIGRvIG5vdCBleGlzdCwgY3JlYXRlIHRoZW0gKi8KIAkJcGF0aCA9IGtzdHJkdXAobm9kZXBhdGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBhdGgpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKCFwYXRoKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KIAkJcyA9IHBhdGg7CiAJCWZvciAoOzspIHsKIAkJCXMgPSBzdHJjaHIocywgJy8nKTsKQEAgLTExNyw3ICsxMTksOCBAQAogCQl9CiAJCWtmcmVlKHBhdGgpOwogCX0KLQlyZWFkX3VubG9jaygmZGlybG9jayk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkaXJsb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMjksNyArMjMyLDcgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jd3JpdGVfbG9jaygmZGlybG9jayk7CisJbXV0ZXhfbG9jaygmZGlybG9jayk7CiAJZm9yICg7OykgewogCQljaGFyICpiYXNlOwogCkBAIC0yNDEsNyArMjQ0LDcgQEAKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KLQl3cml0ZV91bmxvY2soJmRpcmxvY2spOworCW11dGV4X3VubG9jaygmZGlybG9jayk7CiAKIAlrZnJlZShwYXRoKTsKIAlyZXR1cm4gZXJyOwpAQCAtMzUyLDggKzM1NSw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAotCXJ3bG9ja19pbml0KCZkaXJsb2NrKTsKLQogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRldl9mc190eXBlKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGV2dG1wZnM6IHVuYWJsZSB0byByZWdpc3RlciBkZXZ0bXBmcyAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZjM2Nzg4NS4uOTBjOWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtOTgsNyArOTgsNyBAQAogICogQGF0dHI6IGRyaXZlciBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogaW50IGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAotCQkgICAgICAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpbnQgZXJyb3I7CiAJaWYgKGRydikKQEAgLTExNSw3ICsxMTUsNyBAQAogICogQGF0dHI6IGRyaXZlciBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKLQkJCXN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKQorCQkJY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGRydikKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRydi0+cC0+a29iaiwgJmF0dHItPmF0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IDk4OTQyOWMuLmQ3ZDc3ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTYzLDYgKzYzLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKTsKIAorc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKG1lbW9yeV9pc29sYXRlX2NoYWluKTsKKworaW50IHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbWVtb3J5X2lzb2xhdGVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIpOworCit2b2lkIHVucmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbWVtb3J5X2lzb2xhdGVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcik7CisKIC8qCiAgKiByZWdpc3Rlcl9tZW1vcnkgLSBTZXR1cCBhIHN5c2ZzIGRldmljZSBmb3IgYSBtZW1vcnkgYmxvY2sKICAqLwpAQCAtMTU3LDYgKzE3MSwxMSBAQAogCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZtZW1vcnlfY2hhaW4sIHZhbCwgdik7CiB9CiAKK2ludCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkodW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZtZW1vcnlfaXNvbGF0ZV9jaGFpbiwgdmFsLCB2KTsKK30KKwogLyoKICAqIE1FTU9SWV9IT1RQTFVHIGRlcGVuZHMgb24gU1BBUlNFTUVNIGluIG1tL0tjb25maWcsIHNvIGl0IGlzCiAgKiBPSyB0byBoYXZlIGRpcmVjdCByZWZlcmVuY2VzIHRvIHNwYXJzZW1lbSB2YXJpYWJsZXMgaW4gaGVyZS4KQEAgLTM0MSw2ICszNjAsNjQgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCisvKgorICogU3VwcG9ydCBmb3Igb2ZmbGluaW5nIHBhZ2VzIG9mIG1lbW9yeQorICovCisKKy8qIFNvZnQgb2ZmbGluZSBhIHBhZ2UgKi8KK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9zb2Z0X29mZmxpbmVfcGFnZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgcmV0OworCXU2NCBwZm47CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAwLCAmcGZuKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCXBmbiA+Pj0gUEFHRV9TSElGVDsKKwlpZiAoIXBmbl92YWxpZChwZm4pKQorCQlyZXR1cm4gLUVOWElPOworCXJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIDApOworCXJldHVybiByZXQgPT0gMCA/IGNvdW50IDogcmV0OworfQorCisvKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqLworc3RhdGljIHNzaXplX3QKK3N0b3JlX2hhcmRfb2ZmbGluZV9wYWdlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJdTY0IHBmbjsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDAsICZwZm4pIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGZuID4+PSBQQUdFX1NISUZUOworCXJldCA9IF9fbWVtb3J5X2ZhaWx1cmUocGZuLCAwLCAwKTsKKwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7Cit9CisKK3N0YXRpYyBDTEFTU19BVFRSKHNvZnRfb2ZmbGluZV9wYWdlLCAwNjQ0LCBOVUxMLCBzdG9yZV9zb2Z0X29mZmxpbmVfcGFnZSk7CitzdGF0aWMgQ0xBU1NfQVRUUihoYXJkX29mZmxpbmVfcGFnZSwgMDY0NCwgTlVMTCwgc3RvcmVfaGFyZF9vZmZsaW5lX3BhZ2UpOworCitzdGF0aWMgX19pbml0IGludCBtZW1vcnlfZmFpbF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZtZW1vcnlfc3lzZGV2X2NsYXNzLmtzZXQua29iaiwKKwkJCQkmY2xhc3NfYXR0cl9zb2Z0X29mZmxpbmVfcGFnZS5hdHRyKTsKKwlpZiAoIWVycikKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJm1lbW9yeV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAorCQkJCSZjbGFzc19hdHRyX2hhcmRfb2ZmbGluZV9wYWdlLmF0dHIpOworCXJldHVybiBlcnI7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbWVtb3J5X2ZhaWxfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qCiAgKiBOb3RlIHRoYXQgcGh5c19kZXZpY2UgaXMgb3B0aW9uYWwuICBJdCBpcyBoZXJlIHRvIGFsbG93IGZvcgogICogZGlmZmVyZW50aWF0aW9uIGJldHdlZW4gd2hpY2ggKnBoeXNpY2FsKiBkZXZpY2VzIGVhY2gKQEAgLTQ3Myw2ICs1NTAsOSBAQAogCWVyciA9IG1lbW9yeV9wcm9iZV9pbml0KCk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IGVycjsKKwllcnIgPSBtZW1vcnlfZmFpbF9pbml0KCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGVycjsKIAllcnIgPSBibG9ja19zaXplX2luaXQoKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggMWZlNTUzNi4uNzAxMjI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0xNzMsNiArMTczLDQ3IEBACiB9CiBzdGF0aWMgU1lTREVWX0FUVFIoZGlzdGFuY2UsIFNfSVJVR08sIG5vZGVfcmVhZF9kaXN0YW5jZSwgTlVMTCk7CiAKKyNpZmRlZiBDT05GSUdfSFVHRVRMQkZTCisvKgorICogaHVnZXRsYmZzIHBlciBub2RlIGF0dHJpYnV0ZXMgcmVnaXN0cmF0aW9uIGludGVyZmFjZToKKyAqIFdoZW4vaWYgaHVnZXRsYltmc10gc3Vic3lzdGVtIGluaXRpYWxpemVzIFtzb21ldGltZSBhZnRlciB0aGlzIG1vZHVsZV0sCisgKiBpdCB3aWxsIHJlZ2lzdGVyIGl0cyBwZXIgbm9kZSBhdHRyaWJ1dGVzIGZvciBhbGwgb25saW5lIG5vZGVzIHdpdGgKKyAqIG1lbW9yeS4gIEl0IHdpbGwgYWxzbyBjYWxsIHJlZ2lzdGVyX2h1Z2V0bGJmc193aXRoX25vZGUoKSwgYmVsb3csIHRvCisgKiByZWdpc3RlciBpdHMgYXR0cmlidXRlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgd2l0aCB0aGlzIG5vZGUgZHJpdmVyLgorICogT25jZSB0aGVzZSBob29rcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHRoZSBub2RlIGRyaXZlciB3aWxsIGNhbGwgaW50bworICogdGhlIGh1Z2V0bGIgbW9kdWxlIHRvIFt1bl1yZWdpc3RlciBhdHRyaWJ1dGVzIGZvciBob3QtcGx1Z2dlZCBub2Rlcy4KKyAqLworc3RhdGljIG5vZGVfcmVnaXN0cmF0aW9uX2Z1bmNfdCBfX2h1Z2V0bGJfcmVnaXN0ZXJfbm9kZTsKK3N0YXRpYyBub2RlX3JlZ2lzdHJhdGlvbl9mdW5jX3QgX19odWdldGxiX3VucmVnaXN0ZXJfbm9kZTsKKworc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkKK3sKKwlpZiAoX19odWdldGxiX3JlZ2lzdGVyX25vZGUgJiYKKwkJCW5vZGVfc3RhdGUobm9kZS0+c3lzZGV2LmlkLCBOX0hJR0hfTUVNT1JZKSkgeworCQlfX2h1Z2V0bGJfcmVnaXN0ZXJfbm9kZShub2RlKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQoreworCWlmIChfX2h1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKQorCQlfX2h1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKG5vZGUpOworfQorCit2b2lkIHJlZ2lzdGVyX2h1Z2V0bGJmc193aXRoX25vZGUobm9kZV9yZWdpc3RyYXRpb25fZnVuY190IGRvcmVnaXN0ZXIsCisJCQkJICBub2RlX3JlZ2lzdHJhdGlvbl9mdW5jX3QgdW5yZWdpc3RlcikKK3sKKwlfX2h1Z2V0bGJfcmVnaXN0ZXJfbm9kZSAgID0gZG9yZWdpc3RlcjsKKwlfX2h1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlID0gdW5yZWdpc3RlcjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKSB7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpIHt9CisjZW5kaWYKKwogCiAvKgogICogcmVnaXN0ZXJfbm9kZSAtIFNldHVwIGEgc3lzZnMgZGV2aWNlIGZvciBhIG5vZGUuCkBAIC0xOTYsNiArMjM3LDggQEAKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX2Rpc3RhbmNlKTsKIAogCQlzY2FuX3VuZXZpY3RhYmxlX3JlZ2lzdGVyX25vZGUobm9kZSk7CisKKwkJaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKG5vZGUpOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yMTYsNiArMjU5LDcgQEAKIAlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfZGlzdGFuY2UpOwogCiAJc2Nhbl91bmV2aWN0YWJsZV91bnJlZ2lzdGVyX25vZGUobm9kZSk7CisJaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUobm9kZSk7CQkvKiBuby1vcCwgaWYgbWVtb3J5bGVzcyBub2RlICovCiAKIAlzeXNkZXZfdW5yZWdpc3Rlcigmbm9kZS0+c3lzZGV2KTsKIH0KQEAgLTIyNywyNiArMjcxLDQzIEBACiAgKi8KIGludCByZWdpc3Rlcl9jcHVfdW5kZXJfbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbmlkKQogewotCWlmIChub2RlX29ubGluZShuaWQpKSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICpvYmogPSBnZXRfY3B1X3N5c2RldihjcHUpOwotCQlpZiAoIW9iaikKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gc3lzZnNfY3JlYXRlX2xpbmsoJm5vZGVfZGV2aWNlc1tuaWRdLnN5c2Rldi5rb2JqLAotCQkJCQkgJm9iai0+a29iaiwKLQkJCQkJIGtvYmplY3RfbmFtZSgmb2JqLT5rb2JqKSk7Ci0JIH0KKwlpbnQgcmV0OworCXN0cnVjdCBzeXNfZGV2aWNlICpvYmo7CiAKLQlyZXR1cm4gMDsKKwlpZiAoIW5vZGVfb25saW5lKG5pZCkpCisJCXJldHVybiAwOworCisJb2JqID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmbm9kZV9kZXZpY2VzW25pZF0uc3lzZGV2LmtvYmosCisJCQkJJm9iai0+a29iaiwKKwkJCQlrb2JqZWN0X25hbWUoJm9iai0+a29iaikpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2xpbmsoJm9iai0+a29iaiwKKwkJCQkgJm5vZGVfZGV2aWNlc1tuaWRdLnN5c2Rldi5rb2JqLAorCQkJCSBrb2JqZWN0X25hbWUoJm5vZGVfZGV2aWNlc1tuaWRdLnN5c2Rldi5rb2JqKSk7CiB9CiAKIGludCB1bnJlZ2lzdGVyX2NwdV91bmRlcl9ub2RlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBuaWQpCiB7Ci0JaWYgKG5vZGVfb25saW5lKG5pZCkpIHsKLQkJc3RydWN0IHN5c19kZXZpY2UgKm9iaiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7Ci0JCWlmIChvYmopCi0JCQlzeXNmc19yZW1vdmVfbGluaygmbm9kZV9kZXZpY2VzW25pZF0uc3lzZGV2LmtvYmosCi0JCQkJCSBrb2JqZWN0X25hbWUoJm9iai0+a29iaikpOwotCX0KKwlzdHJ1Y3Qgc3lzX2RldmljZSAqb2JqOworCisJaWYgKCFub2RlX29ubGluZShuaWQpKQorCQlyZXR1cm4gMDsKKworCW9iaiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCisJc3lzZnNfcmVtb3ZlX2xpbmsoJm5vZGVfZGV2aWNlc1tuaWRdLnN5c2Rldi5rb2JqLAorCQkJICBrb2JqZWN0X25hbWUoJm9iai0+a29iaikpOworCXN5c2ZzX3JlbW92ZV9saW5rKCZvYmotPmtvYmosCisJCQkgIGtvYmplY3RfbmFtZSgmbm9kZV9kZXZpY2VzW25pZF0uc3lzZGV2LmtvYmopKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjgsNiArMzI5LDcgQEAKIC8qIHJlZ2lzdGVyIG1lbW9yeSBzZWN0aW9uIHVuZGVyIHNwZWNpZmllZCBub2RlIGlmIGl0IHNwYW5zIHRoYXQgbm9kZSAqLwogaW50IHJlZ2lzdGVyX21lbV9zZWN0X3VuZGVyX25vZGUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtX2JsaywgaW50IG5pZCkKIHsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgcGZuLCBzZWN0X3N0YXJ0X3Bmbiwgc2VjdF9lbmRfcGZuOwogCiAJaWYgKCFtZW1fYmxrKQpAQCAtMjg0LDkgKzM0NiwxNSBAQAogCQkJY29udGludWU7CiAJCWlmIChwYWdlX25pZCAhPSBuaWQpCiAJCQljb250aW51ZTsKLQkJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9saW5rX25vd2Fybigmbm9kZV9kZXZpY2VzW25pZF0uc3lzZGV2LmtvYmosCisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rX25vd2Fybigmbm9kZV9kZXZpY2VzW25pZF0uc3lzZGV2LmtvYmosCiAJCQkJCSZtZW1fYmxrLT5zeXNkZXYua29iaiwKIAkJCQkJa29iamVjdF9uYW1lKCZtZW1fYmxrLT5zeXNkZXYua29iaikpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXR1cm4gc3lzZnNfY3JlYXRlX2xpbmtfbm93YXJuKCZtZW1fYmxrLT5zeXNkZXYua29iaiwKKwkJCQkmbm9kZV9kZXZpY2VzW25pZF0uc3lzZGV2LmtvYmosCisJCQkJa29iamVjdF9uYW1lKCZub2RlX2RldmljZXNbbmlkXS5zeXNkZXYua29iaikpOwogCX0KIAkvKiBtZW0gc2VjdGlvbiBkb2VzIG5vdCBzcGFuIHRoZSBzcGVjaWZpZWQgbm9kZSAqLwogCXJldHVybiAwOwpAQCAtMjk1LDEyICszNjMsMTYgQEAKIC8qIHVucmVnaXN0ZXIgbWVtb3J5IHNlY3Rpb24gdW5kZXIgYWxsIG5vZGVzIHRoYXQgaXQgc3BhbnMgKi8KIGludCB1bnJlZ2lzdGVyX21lbV9zZWN0X3VuZGVyX25vZGVzKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbV9ibGspCiB7Ci0Jbm9kZW1hc2tfdCB1bmxpbmtlZF9ub2RlczsKKwlOT0RFTUFTS19BTExPQyhub2RlbWFza190LCB1bmxpbmtlZF9ub2RlcywgR0ZQX0tFUk5FTCk7CiAJdW5zaWduZWQgbG9uZyBwZm4sIHNlY3Rfc3RhcnRfcGZuLCBzZWN0X2VuZF9wZm47CiAKLQlpZiAoIW1lbV9ibGspCisJaWYgKCFtZW1fYmxrKSB7CisJCU5PREVNQVNLX0ZSRUUodW5saW5rZWRfbm9kZXMpOwogCQlyZXR1cm4gLUVGQVVMVDsKLQlub2Rlc19jbGVhcih1bmxpbmtlZF9ub2Rlcyk7CisJfQorCWlmICghdW5saW5rZWRfbm9kZXMpCisJCXJldHVybiAtRU5PTUVNOworCW5vZGVzX2NsZWFyKCp1bmxpbmtlZF9ub2Rlcyk7CiAJc2VjdF9zdGFydF9wZm4gPSBzZWN0aW9uX25yX3RvX3BmbihtZW1fYmxrLT5waHlzX2luZGV4KTsKIAlzZWN0X2VuZF9wZm4gPSBzZWN0X3N0YXJ0X3BmbiArIFBBR0VTX1BFUl9TRUNUSU9OIC0gMTsKIAlmb3IgKHBmbiA9IHNlY3Rfc3RhcnRfcGZuOyBwZm4gPD0gc2VjdF9lbmRfcGZuOyBwZm4rKykgewpAQCAtMzExLDExICszODMsMTQgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoIW5vZGVfb25saW5lKG5pZCkpCiAJCQljb250aW51ZTsKLQkJaWYgKG5vZGVfdGVzdF9hbmRfc2V0KG5pZCwgdW5saW5rZWRfbm9kZXMpKQorCQlpZiAobm9kZV90ZXN0X2FuZF9zZXQobmlkLCAqdW5saW5rZWRfbm9kZXMpKQogCQkJY29udGludWU7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZub2RlX2RldmljZXNbbmlkXS5zeXNkZXYua29iaiwKIAkJCSBrb2JqZWN0X25hbWUoJm1lbV9ibGstPnN5c2Rldi5rb2JqKSk7CisJCXN5c2ZzX3JlbW92ZV9saW5rKCZtZW1fYmxrLT5zeXNkZXYua29iaiwKKwkJCSBrb2JqZWN0X25hbWUoJm5vZGVfZGV2aWNlc1tuaWRdLnN5c2Rldi5rb2JqKSk7CiAJfQorCU5PREVNQVNLX0ZSRUUodW5saW5rZWRfbm9kZXMpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDUsOSArNDIwLDc3IEBACiAJfQogCXJldHVybiBlcnI7CiB9Ci0jZWxzZQorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJGUworLyoKKyAqIEhhbmRsZSBwZXIgbm9kZSBoc3RhdGUgYXR0cmlidXRlIFt1bl1yZWdpc3RyYXRpb24gb24gdHJhbnNpc3Rpb25zCisgKiB0by9mcm9tIG1lbW9yeWxlc3Mgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIG5vZGVfaHVnZXRsYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgbm9kZSAqbm9kZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgbm9kZSwgbm9kZV93b3JrKTsKKworCS8qCisJICogV2Ugb25seSBnZXQgaGVyZSB3aGVuIGEgbm9kZSB0cmFuc2l0aW9ucyB0by9mcm9tIG1lbW9yeWxlc3Mgc3RhdGUuCisJICogV2UgY2FuIGRldGVjdCB3aGljaCB0cmFuc2l0aW9uIG9jY3VycmVkIGJ5IGV4YW1pbmluZyB3aGV0aGVyIHRoZQorCSAqIG5vZGUgaGFzIG1lbW9yeSBub3cuICBodWdldGxiX3JlZ2lzdGVyX25vZGUoKSBhbHJlYWR5IGNoZWNrIHRoaXMKKwkgKiBzbyB3ZSB0cnkgdG8gcmVnaXN0ZXIgdGhlIGF0dHJpYnV0ZXMuICBJZiB0aGF0IGZhaWxzLCB0aGVuIHRoZQorCSAqIG5vZGUgaGFzIHRyYW5zaXRpb25lZCB0byBtZW1vcnlsZXNzLCB0cnkgdG8gdW5yZWdpc3RlciB0aGUKKwkgKiBhdHRyaWJ1dGVzLgorCSAqLworCWlmICghaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKG5vZGUpKQorCQlodWdldGxiX3VucmVnaXN0ZXJfbm9kZShub2RlKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9ub2RlX2h1Z2V0bGJfd29yayhpbnQgbmlkKQoreworCUlOSVRfV09SSygmbm9kZV9kZXZpY2VzW25pZF0ubm9kZV93b3JrLCBub2RlX2h1Z2V0bGJfd29yayk7Cit9CisKK3N0YXRpYyBpbnQgbm9kZV9tZW1vcnlfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKm1uYiA9IGFyZzsKKwlpbnQgbmlkID0gbW5iLT5zdGF0dXNfY2hhbmdlX25pZDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX09GRkxJTkU6CisJCS8qCisJCSAqIG9mZmxvYWQgcGVyIG5vZGUgaHN0YXRlIFt1bl1yZWdpc3RyYXRpb24gdG8gYSB3b3JrIHRocmVhZAorCQkgKiB3aGVuIHRyYW5zaXRpb25pbmcgdG8vZnJvbSBtZW1vcnlsZXNzIHN0YXRlLgorCQkgKi8KKwkJaWYgKG5pZCAhPSBOVU1BX05PX05PREUpCisJCQlzY2hlZHVsZV93b3JrKCZub2RlX2RldmljZXNbbmlkXS5ub2RlX3dvcmspOworCQlicmVhazsKKworCWNhc2UgTUVNX0dPSU5HX09OTElORToKKwljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJY2FzZSBNRU1fQ0FOQ0VMX09GRkxJTkU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKyNlbmRpZgkvKiBDT05GSUdfSFVHRVRMQkZTICovCisjZWxzZQkvKiAhQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRSAqLworCiBzdGF0aWMgaW50IGxpbmtfbWVtX3NlY3Rpb25zKGludCBuaWQpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFICovCisjZW5kaWYJLyogQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRSAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRSkgfHwgXAorICAgICFkZWZpbmVkKENPTkZJR19IVUdFVExCRlMpCitzdGF0aWMgaW5saW5lIGludCBub2RlX21lbW9yeV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgdm9pZCBpbml0X25vZGVfaHVnZXRsYl93b3JrKGludCBuaWQpIHsgfQorCisjZW5kaWYKIAogaW50IHJlZ2lzdGVyX29uZV9ub2RlKGludCBuaWQpCiB7CkBAIC0zNzEsNiArNTE0LDkgQEAKIAogCQkvKiBsaW5rIG1lbW9yeSBzZWN0aW9ucyB1bmRlciB0aGlzIG5vZGUgKi8KIAkJZXJyb3IgPSBsaW5rX21lbV9zZWN0aW9ucyhuaWQpOworCisJCS8qIGluaXRpYWxpemUgd29yayBxdWV1ZSBmb3IgbWVtb3J5IGhvdCBwbHVnICovCisJCWluaXRfbm9kZV9odWdldGxiX3dvcmsobmlkKTsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC00NjAsMTMgKzYwNiwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNkZWZpbmUgTk9ERV9DQUxMQkFDS19QUkkJMgkvKiBsb3dlciB0aGFuIFNMQUIgKi8KIHN0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX25vZGVfdHlwZSh2b2lkKQogewogCWludCByZXQ7CiAKIAlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm5vZGVfY2xhc3MpOwotCWlmICghcmV0KQorCWlmICghcmV0KSB7CiAJCXJldCA9IG5vZGVfc3RhdGVzX2luaXQoKTsKKwkJaG90cGx1Z19tZW1vcnlfbm90aWZpZXIobm9kZV9tZW1vcnlfY2FsbGJhY2ssCisJCQkJCU5PREVfQ0FMTEJBQ0tfUFJJKTsKKwl9CiAKIAkvKgogCSAqIE5vdGU6ICB3ZSdyZSBub3QgZ29pbmcgdG8gdW5yZWdpc3RlciB0aGUgbm9kZSBjbGFzcyBpZiB3ZSBmYWlsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDlkMmVlMjUuLjU4ZWZhZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC00NDEsNiArNDQxLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSk7CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCA4YWEyNDQzLi40OGFkZjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKQEAgLTE2MSw2ICsxNjEsMzIgQEAKIAlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9saXN0KTsKIH0KIAorc3RhdGljIGt0aW1lX3QgaW5pdGNhbGxfZGVidWdfc3RhcnQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWt0aW1lX3QgY2FsbHRpbWUgPSBrdGltZV9zZXQoMCwgMCk7CisKKwlpZiAoaW5pdGNhbGxfZGVidWcpIHsKKwkJcHJfaW5mbygiY2FsbGluZyAgJXMrIEAgJWlcbiIsCisJCQkJZGV2X25hbWUoZGV2KSwgdGFza19waWRfbnIoY3VycmVudCkpOworCQljYWxsdGltZSA9IGt0aW1lX2dldCgpOworCX0KKworCXJldHVybiBjYWxsdGltZTsKK30KKworc3RhdGljIHZvaWQgaW5pdGNhbGxfZGVidWdfcmVwb3J0KHN0cnVjdCBkZXZpY2UgKmRldiwga3RpbWVfdCBjYWxsdGltZSwKKwkJCQkgIGludCBlcnJvcikKK3sKKwlrdGltZV90IGRlbHRhLCByZXR0aW1lOworCisJaWYgKGluaXRjYWxsX2RlYnVnKSB7CisJCXJldHRpbWUgPSBrdGltZV9nZXQoKTsKKwkJZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOworCQlwcl9pbmZvKCJjYWxsICVzKyByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsIGRldl9uYW1lKGRldiksCisJCQllcnJvciwgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhkZWx0YSkgPj4gMTApOworCX0KK30KKwogLyoqCiAgKiBwbV9vcCAtIEV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgpAQCAtMTcyLDYgKzE5OCw5IEBACiAJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yID0gMDsKKwlrdGltZV90IGNhbGx0aW1lOworCisJY2FsbHRpbWUgPSBpbml0Y2FsbF9kZWJ1Z19zdGFydChkZXYpOwogCiAJc3dpdGNoIChzdGF0ZS5ldmVudCkgewogI2lmZGVmIENPTkZJR19TVVNQRU5ECkBAIC0yMTksNiArMjQ4LDkgQEAKIAlkZWZhdWx0OgogCQllcnJvciA9IC1FSU5WQUw7CiAJfQorCisJaW5pdGNhbGxfZGVidWdfcmVwb3J0KGRldiwgY2FsbHRpbWUsIGVycm9yKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjM2LDYgKzI2OCwxMyBAQAogCQkJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBlcnJvciA9IDA7CisJa3RpbWVfdCBjYWxsdGltZSwgZGVsdGEsIHJldHRpbWU7CisKKwlpZiAoaW5pdGNhbGxfZGVidWcpIHsKKwkJcHJfaW5mbygiY2FsbGluZyAgJXNfaSsgQCAlaVxuIiwKKwkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CisJfQogCiAJc3dpdGNoIChzdGF0ZS5ldmVudCkgewogI2lmZGVmIENPTkZJR19TVVNQRU5ECkBAIC0yODMsNiArMzIyLDE1IEBACiAJZGVmYXVsdDoKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KKworCWlmIChpbml0Y2FsbF9kZWJ1ZykgeworCQlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7CisJCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKKwkJcHJpbnRrKCJpbml0Y2FsbCAlc19pKyByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsCisJCQlkZXZfbmFtZShkZXYpLCBlcnJvciwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwKTsKKwl9CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTMyNCw2ICszNzIsMjMgQEAKIAkJa29iamVjdF9uYW1lKCZkZXYtPmtvYmopLCBwbV92ZXJiKHN0YXRlLmV2ZW50KSwgaW5mbywgZXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBkcG1fc2hvd190aW1lKGt0aW1lX3Qgc3RhcnR0aW1lLCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGNoYXIgKmluZm8pCit7CisJa3RpbWVfdCBjYWxsdGltZTsKKwlzNjQgdXNlY3M2NDsKKwlpbnQgdXNlY3M7CisKKwljYWxsdGltZSA9IGt0aW1lX2dldCgpOworCXVzZWNzNjQgPSBrdGltZV90b19ucyhrdGltZV9zdWIoY2FsbHRpbWUsIHN0YXJ0dGltZSkpOworCWRvX2Rpdih1c2VjczY0LCBOU0VDX1BFUl9VU0VDKTsKKwl1c2VjcyA9IHVzZWNzNjQ7CisJaWYgKHVzZWNzID09IDApCisJCXVzZWNzID0gMTsKKwlwcl9pbmZvKCJQTTogJXMlcyVzIG9mIGRldmljZXMgY29tcGxldGUgYWZ0ZXIgJWxkLiUwM2xkIG1zZWNzXG4iLAorCQlpbmZvID86ICIiLCBpbmZvID8gIiAiIDogIiIsIHBtX3ZlcmIoc3RhdGUuZXZlbnQpLAorCQl1c2VjcyAvIFVTRUNfUEVSX01TRUMsIHVzZWNzICUgVVNFQ19QRVJfTVNFQyk7Cit9CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXN1bWUgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKgpAQCAtMzQxLDE0ICs0MDYsMTEgQEAKIAlUUkFDRV9ERVZJQ0UoZGV2KTsKIAlUUkFDRV9SRVNVTUUoMCk7CiAKLQlpZiAoIWRldi0+YnVzKQotCQlnb3RvIEVuZDsKLQotCWlmIChkZXYtPmJ1cy0+cG0pIHsKKwlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgIkVBUkxZICIpOwogCQllcnJvciA9IHBtX25vaXJxX29wKGRldiwgZGV2LT5idXMtPnBtLCBzdGF0ZSk7CiAJfQotIEVuZDoKKwogCVRSQUNFX1JFU1VNRShlcnJvcik7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzYzLDYgKzQyNSw3IEBACiB2b2lkIGRwbV9yZXN1bWVfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKQEAgLTM3NiwxMSArNDM5LDMyIEBACiAJCQkJcG1fZGV2X2VycihkZXYsIHN0YXRlLCAiIGVhcmx5IiwgZXJyb3IpOwogCQl9CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWRwbV9zaG93X3RpbWUoc3RhcnR0aW1lLCBzdGF0ZSwgImVhcmx5Iik7CiAJcmVzdW1lX2RldmljZV9pcnFzKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkcG1fcmVzdW1lX25vaXJxKTsKIAogLyoqCisgKiBsZWdhY3lfcmVzdW1lIC0gRXhlY3V0ZSBhIGxlZ2FjeSAoYnVzIG9yIGNsYXNzKSByZXN1bWUgY2FsbGJhY2sgZm9yIGRldmljZS4KKyAqIGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqIGNiOiBSZXN1bWUgY2FsbGJhY2sgdG8gZXhlY3V0ZS4KKyAqLworc3RhdGljIGludCBsZWdhY3lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50ICgqY2IpKHN0cnVjdCBkZXZpY2UgKmRldikpCit7CisJaW50IGVycm9yOworCWt0aW1lX3QgY2FsbHRpbWU7CisKKwljYWxsdGltZSA9IGluaXRjYWxsX2RlYnVnX3N0YXJ0KGRldik7CisKKwllcnJvciA9IGNiKGRldik7CisJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGNiLCBlcnJvcik7CisKKwlpbml0Y2FsbF9kZWJ1Z19yZXBvcnQoZGV2LCBjYWxsdGltZSwgZXJyb3IpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKICAqIGRldmljZV9yZXN1bWUgLSBFeGVjdXRlICJyZXN1bWUiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNDAwLDcgKzQ4NCw3IEBACiAJCQllcnJvciA9IHBtX29wKGRldiwgZGV2LT5idXMtPnBtLCBzdGF0ZSk7CiAJCX0gZWxzZSBpZiAoZGV2LT5idXMtPnJlc3VtZSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5ICIpOwotCQkJZXJyb3IgPSBkZXYtPmJ1cy0+cmVzdW1lKGRldik7CisJCQllcnJvciA9IGxlZ2FjeV9yZXN1bWUoZGV2LCBkZXYtPmJ1cy0+cmVzdW1lKTsKIAkJfQogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIEVuZDsKQEAgLTQyMSw3ICs1MDUsNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+Y2xhc3MtPnBtLCBzdGF0ZSk7CiAJCX0gZWxzZSBpZiAoZGV2LT5jbGFzcy0+cmVzdW1lKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJsZWdhY3kgY2xhc3MgIik7Ci0JCQllcnJvciA9IGRldi0+Y2xhc3MtPnJlc3VtZShkZXYpOworCQkJZXJyb3IgPSBsZWdhY3lfcmVzdW1lKGRldiwgZGV2LT5jbGFzcy0+cmVzdW1lKTsKIAkJfQogCX0KICBFbmQ6CkBAIC00NDEsNiArNTI1LDcgQEAKIHN0YXRpYyB2b2lkIGRwbV9yZXN1bWUocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CkBAIC00NjksNiArNTU0LDcgQEAKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsICZkcG1fbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWRwbV9zaG93X3RpbWUoc3RhcnR0aW1lLCBzdGF0ZSwgTlVMTCk7CiB9CiAKIC8qKgpAQCAtNTIxLDcgKzYwNyw3IEBACiAJCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKIAkJCWRldmljZV9jb21wbGV0ZShkZXYsIHN0YXRlKTsKLQkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCiAJCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQl9CkBAIC01ODQsMTAgKzY3MCw3IEBACiB7CiAJaW50IGVycm9yID0gMDsKIAotCWlmICghZGV2LT5idXMpCi0JCXJldHVybiAwOwotCi0JaWYgKGRldi0+YnVzLT5wbSkgeworCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiTEFURSAiKTsKIAkJZXJyb3IgPSBwbV9ub2lycV9vcChkZXYsIGRldi0+YnVzLT5wbSwgc3RhdGUpOwogCX0KQEAgLTYwNCw2ICs2ODcsNyBAQAogaW50IGRwbV9zdXNwZW5kX25vaXJxKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAlpbnQgZXJyb3IgPSAwOwogCiAJc3VzcGVuZF9kZXZpY2VfaXJxcygpOwpAQCAtNjE5LDExICs3MDMsMzQgQEAKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAJaWYgKGVycm9yKQogCQlkcG1fcmVzdW1lX25vaXJxKHJlc3VtZV9ldmVudChzdGF0ZSkpOworCWVsc2UKKwkJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCAibGF0ZSIpOwogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRwbV9zdXNwZW5kX25vaXJxKTsKIAogLyoqCisgKiBsZWdhY3lfc3VzcGVuZCAtIEV4ZWN1dGUgYSBsZWdhY3kgKGJ1cyBvciBjbGFzcykgc3VzcGVuZCBjYWxsYmFjayBmb3IgZGV2aWNlLgorICogZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqIGNiOiBTdXNwZW5kIGNhbGxiYWNrIHRvIGV4ZWN1dGUuCisgKi8KK3N0YXRpYyBpbnQgbGVnYWN5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsCisJCQkgIGludCAoKmNiKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkpCit7CisJaW50IGVycm9yOworCWt0aW1lX3QgY2FsbHRpbWU7CisKKwljYWxsdGltZSA9IGluaXRjYWxsX2RlYnVnX3N0YXJ0KGRldik7CisKKwllcnJvciA9IGNiKGRldiwgc3RhdGUpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChjYiwgZXJyb3IpOworCisJaW5pdGNhbGxfZGVidWdfcmVwb3J0KGRldiwgY2FsbHRpbWUsIGVycm9yKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCiAgKiBkZXZpY2Vfc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNjQwLDggKzc0Nyw3IEBACiAJCQllcnJvciA9IHBtX29wKGRldiwgZGV2LT5jbGFzcy0+cG0sIHN0YXRlKTsKIAkJfSBlbHNlIGlmIChkZXYtPmNsYXNzLT5zdXNwZW5kKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJsZWdhY3kgY2xhc3MgIik7Ci0JCQllcnJvciA9IGRldi0+Y2xhc3MtPnN1c3BlbmQoZGV2LCBzdGF0ZSk7Ci0JCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LT5jbGFzcy0+c3VzcGVuZCwgZXJyb3IpOworCQkJZXJyb3IgPSBsZWdhY3lfc3VzcGVuZChkZXYsIHN0YXRlLCBkZXYtPmNsYXNzLT5zdXNwZW5kKTsKIAkJfQogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIEVuZDsKQEAgLTY2Miw4ICs3NjgsNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+YnVzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+YnVzLT5zdXNwZW5kKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJsZWdhY3kgIik7Ci0JCQllcnJvciA9IGRldi0+YnVzLT5zdXNwZW5kKGRldiwgc3RhdGUpOwotCQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+YnVzLT5zdXNwZW5kLCBlcnJvcik7CisJCQllcnJvciA9IGxlZ2FjeV9zdXNwZW5kKGRldiwgc3RhdGUsIGRldi0+YnVzLT5zdXNwZW5kKTsKIAkJfQogCX0KICBFbmQ6CkBAIC02NzksNiArNzg0LDcgQEAKIHN0YXRpYyBpbnQgZHBtX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCWludCBlcnJvciA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CkBAIC03MDQsNiArODEwLDggQEAKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsIGRwbV9saXN0LnByZXYpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlpZiAoIWVycm9yKQorCQlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNzcyLDcgKzg4MCw3IEBACiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7CiAJCWlmIChwbV9ydW50aW1lX2JhcnJpZXIoZGV2KSAmJiBkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CiAJCQkvKiBXYWtlLXVwIHJlcXVlc3RlZCBkdXJpbmcgc3lzdGVtIHNsZWVwIHRyYW5zaXRpb24uICovCi0JCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAkJCWVycm9yID0gLUVCVVNZOwogCQl9IGVsc2UgewogCQkJZXJyb3IgPSBkZXZpY2VfcHJlcGFyZShkZXYsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDVhMDFlY2UuLmY4YjA0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtODUsNiArODUsMTkgQEAKIAkJZGV2LT5idXMtPnBtLT5ydW50aW1lX2lkbGUoZGV2KTsKIAogCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0gJiYgZGV2LT50eXBlLT5wbS0+cnVudGltZV9pZGxlKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlkZXYtPnR5cGUtPnBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCX0gZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbQorCSAgICAmJiBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9pZGxlKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9pZGxlKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAl9CiAKIAlkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uID0gZmFsc2U7CkBAIC0xOTQsNiArMjA3LDIyIEBACiAKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0KKwkgICAgJiYgZGV2LT50eXBlLT5wbS0+cnVudGltZV9zdXNwZW5kKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlyZXR2YWwgPSBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CisJfSBlbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtCisJICAgICYmIGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3N1c3BlbmQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CiAJfSBlbHNlIHsKIAkJcmV0dmFsID0gLUVOT1NZUzsKIAl9CkBAIC0zNTksNiArMzg4LDIyIEBACiAKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0KKwkgICAgJiYgZGV2LT50eXBlLT5wbS0+cnVudGltZV9yZXN1bWUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbQorCSAgICAmJiBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9yZXN1bWUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKIAl9IGVsc2UgewogCQlyZXR2YWwgPSAtRU5PU1lTOwogCX0KQEAgLTcwMSwxNSArNzQ2LDE1IEBACiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgogICogQHN5bmM6IElmIHNldCBhbmQgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQsIHJlc3VtZSBpdCBzeW5jaHJvbm91c2x5LgogICoKLSAqIEluY3JlbWVudCB0aGUgdXNhZ2UgY291bnQgb2YgdGhlIGRldmljZSBhbmQgaWYgaXQgd2FzIHplcm8gcHJldmlvdXNseSwKLSAqIHJlc3VtZSBpdCBvciBzdWJtaXQgYSByZXN1bWUgcmVxdWVzdCBmb3IgaXQsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgQHN5bmMuCisgKiBJbmNyZW1lbnQgdGhlIHVzYWdlIGNvdW50IG9mIHRoZSBkZXZpY2UgYW5kIHJlc3VtZSBpdCBvciBzdWJtaXQgYSByZXN1bWUKKyAqIHJlcXVlc3QgZm9yIGl0LCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIEBzeW5jLgogICovCiBpbnQgX19wbV9ydW50aW1lX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgc3luYykKIHsKLQlpbnQgcmV0dmFsID0gMTsKKwlpbnQgcmV0dmFsOwogCi0JaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA9PSAxKQotCQlyZXR2YWwgPSBzeW5jID8gcG1fcnVudGltZV9yZXN1bWUoZGV2KSA6IHBtX3JlcXVlc3RfcmVzdW1lKGRldik7CisJYXRvbWljX2luYygmZGV2LT5wb3dlci51c2FnZV9jb3VudCk7CisJcmV0dmFsID0gc3luYyA/IHBtX3J1bnRpbWVfcmVzdW1lKGRldikgOiBwbV9yZXF1ZXN0X3Jlc3VtZShkZXYpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCmluZGV4IDQzNmEwOTAuLjRlMDcyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwpAQCAtMTI3MSw4ICsxMjcxLDcgQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCi0JCWlmIChjcnlwdG9fdGZtX2FsZ190eXBlKGNyeXB0b19oYXNoX3RmbSh0Zm0pKQotCQkJCQkJIT0gQ1JZUFRPX0FMR19UWVBFX0hBU0gpIHsKKwkJaWYgKGNyeXB0b190Zm1fYWxnX3R5cGUoY3J5cHRvX2hhc2hfdGZtKHRmbSkpICE9IENSWVBUT19BTEdfVFlQRV9TSEFTSCkgewogCQkJcmV0Y29kZSA9IEVSUl9BVVRIX0FMR19ORDsKIAkJCWdvdG8gZmFpbDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggNWMwMWY3NC4uMzI2NmI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zNDk3LDYgKzM0OTcsOSBAQAogCSAgICAoKGNtZCAmIDB4ODApICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAorCWlmIChXQVJOX09OKHNpemUgPCAwIHx8IHNpemUgPiBzaXplb2YoaW5wYXJhbSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIGNvcHlpbiAqLwogCUNMRUFSU1RSVUNUKCZpbnBhcmFtKTsKIAlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpCkBAIC00MTYyLDcgKzQxNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZmxvcHB5X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBmbG9wcHlfcG1fb3BzID0gewogCS5yZXN1bWUgPSBmbG9wcHlfcmVzdW1lLAogCS5yZXN0b3JlID0gZmxvcHB5X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKaW5kZXggNjM4MGFkOC4uNTljYTJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltMy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJaW50CWVqZWN0ZWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlpbnQJd2FudGVkOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSoJbWVkaWFfYmF5OyAvKiBOVUxMIHdoZW4gbm90IGluIGJheSAqLworCXN0cnVjdCBtYWNpb19kZXYgKm1kZXY7CiAJY2hhcglkYmRtYV9jbWRfc3BhY2VbNSAqIHNpemVvZihzdHJ1Y3QgZGJkbWFfY21kKV07CiB9OwogCkBAIC0zMDMsMTQgKzMwMywxMyBAQAogc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpCiB7CiAJaW50IGk7Ci0JZm9yKGk9MDtpPGZsb3BweV9jb3VudDtpKyspCi0JewotI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCi0JCWlmIChmbG9wcHlfc3RhdGVzW2ldLm1lZGlhX2JheSAmJgotCQkJY2hlY2tfbWVkaWFfYmF5KGZsb3BweV9zdGF0ZXNbaV0ubWVkaWFfYmF5LCBNQl9GRCkpCisKKwlmb3IoaT0wOyBpPGZsb3BweV9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gJmZsb3BweV9zdGF0ZXNbaV07CisJCWlmIChmcy0+bWRldi0+bWVkaWFfYmF5ICYmCisJCSAgICBjaGVja19tZWRpYV9iYXkoZnMtPm1kZXYtPm1lZGlhX2JheSkgIT0gTUJfRkQpCiAJCQljb250aW51ZTsKLSNlbmRpZiAvKiBDT05GSUdfUE1BQ19NRURJQUJBWSAqLwotCQlzdGFydF9yZXF1ZXN0KCZmbG9wcHlfc3RhdGVzW2ldKTsKKwkJc3RhcnRfcmVxdWVzdChmcyk7CiAJfQogfQogCkBAIC04NDksMTAgKzg0OCw5IEBACiAJaWYgKChjbWQgJiAweDgwKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCi0JaWYgKGZzLT5tZWRpYV9iYXkgJiYgY2hlY2tfbWVkaWFfYmF5KGZzLT5tZWRpYV9iYXksIE1CX0ZEKSkKKwlpZiAoZnMtPm1kZXYtPm1lZGlhX2JheSAmJgorCSAgICBjaGVja19tZWRpYV9iYXkoZnMtPm1kZXYtPm1lZGlhX2JheSkgIT0gTUJfRkQpCiAJCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGREVKRUNUOgpAQCAtODc2LDEwICs4NzQsOSBAQAogCWludCBuLCBlcnIgPSAwOwogCiAJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkgewotI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCi0JCWlmIChmcy0+bWVkaWFfYmF5ICYmIGNoZWNrX21lZGlhX2JheShmcy0+bWVkaWFfYmF5LCBNQl9GRCkpCisJCWlmIChmcy0+bWRldi0+bWVkaWFfYmF5ICYmCisJCSAgICBjaGVja19tZWRpYV9iYXkoZnMtPm1kZXYtPm1lZGlhX2JheSkgIT0gTUJfRkQpCiAJCQlyZXR1cm4gLUVOWElPOwotI2VuZGlmCiAJCW91dF84KCZzdy0+c2V0dXAsIFNfSUJNX0RSSVZFIHwgU19GQ0xLX0RJVjIpOwogCQlvdXRfOCgmc3ctPmNvbnRyb2xfYmljLCAweGZmKTsKIAkJb3V0XzgoJnN3LT5tb2RlLCAweDk1KTsKQEAgLTk2MywxMCArOTYwLDkgQEAKIAlzdHJ1Y3Qgc3dpbTMgX19pb21lbSAqc3c7CiAJaW50IHJldCwgbjsKIAotI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCi0JaWYgKGZzLT5tZWRpYV9iYXkgJiYgY2hlY2tfbWVkaWFfYmF5KGZzLT5tZWRpYV9iYXksIE1CX0ZEKSkKKwlpZiAoZnMtPm1kZXYtPm1lZGlhX2JheSAmJgorCSAgICBjaGVja19tZWRpYV9iYXkoZnMtPm1kZXYtPm1lZGlhX2JheSkgIT0gTUJfRkQpCiAJCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIAogCXN3ID0gZnMtPnN3aW0zOwogCWdyYWJfZHJpdmUoZnMsIHJldmFsaWRhdGluZywgMCk7CkBAIC0xMDA5LDcgKzEwMDUsNiBAQAogc3RhdGljIGludCBzd2ltM19hZGRfZGV2aWNlKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN3aW0gPSBtZGV2LT5vZmRldi5ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVkaWFiYXk7CiAJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSAmZmxvcHB5X3N0YXRlc1tpbmRleF07CiAJaW50IHJjID0gLUVCVVNZOwogCkBAIC0xMDM2LDkgKzEwMzEsNyBAQAogCX0KIAlkZXZfc2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldiwgZnMpOwogCi0JbWVkaWFiYXkgPSAoc3RyY2FzZWNtcChzd2ltLT5wYXJlbnQtPnR5cGUsICJtZWRpYS1iYXkiKSA9PSAwKSA/Ci0JCXN3aW0tPnBhcmVudCA6IE5VTEw7Ci0JaWYgKG1lZGlhYmF5ID09IE5VTEwpCisJaWYgKG1kZXYtPm1lZGlhX2JheSA9PSBOVUxMKQogCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9TV0lNM19FTkFCTEUsIHN3aW0sIDAsIDEpOwogCQogCW1lbXNldChmcywgMCwgc2l6ZW9mKCpmcykpOwpAQCAtMTA2OCw3ICsxMDYxLDcgQEAKIAlmcy0+c2VjcGVyY3lsID0gMzY7CiAJZnMtPnNlY3BlcnRyYWNrID0gMTg7CiAJZnMtPnRvdGFsX3NlY3MgPSAyODgwOwotCWZzLT5tZWRpYV9iYXkgPSBtZWRpYWJheTsKKwlmcy0+bWRldiA9IG1kZXY7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnMtPndhaXQpOwogCiAJZnMtPmRtYV9jbWQgPSAoc3RydWN0IGRiZG1hX2NtZCAqKSBEQkRNQV9BTElHTihmcy0+ZGJkbWFfY21kX3NwYWNlKTsKQEAgLTEwOTMsNyArMTA4Niw3IEBACiAJaW5pdF90aW1lcigmZnMtPnRpbWVvdXQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmQlZDogU1dJTTMgZmxvcHB5IGNvbnRyb2xsZXIgJXNcbiIsIGZsb3BweV9jb3VudCwKLQkJbWVkaWFiYXkgPyAiaW4gbWVkaWEgYmF5IiA6ICIiKTsKKwkJbWRldi0+bWVkaWFfYmF5ID8gImluIG1lZGlhIGJheSIgOiAiIik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZC5jIGIvZHJpdmVycy9ibG9jay94ZC5jCmluZGV4IDA4NzdkMzYuLmQxZmQwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hkLmMKQEAgLTE2OSwxMyArMTY5LDYgQEAKIAogCWluaXRfdGltZXIgKCZ4ZF93YXRjaGRvZ19pbnQpOyB4ZF93YXRjaGRvZ19pbnQuZnVuY3Rpb24gPSB4ZF93YXRjaGRvZzsKIAotCWlmICgheGRfZG1hX2J1ZmZlcikKLQkJeGRfZG1hX2J1ZmZlciA9IChjaGFyICopeGRfZG1hX21lbV9hbGxvYyh4ZF9tYXhzZWN0b3JzICogMHgyMDApOwotCWlmICgheGRfZG1hX2J1ZmZlcikgewotCQlwcmludGsoS0VSTl9FUlIgInhkOiBPdXQgb2YgbWVtb3J5LlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCWVyciA9IC1FQlVTWTsKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KFhUX0RJU0tfTUFKT1IsICJ4ZCIpKQogCQlnb3RvIG91dDE7CkBAIC0yMDIsNiArMTk1LDE5IEBACiAJCQl4ZF9kcml2ZXMseGRfZHJpdmVzID09IDEgPyAiIiA6ICJzIix4ZF9pcnEseGRfZG1hKTsKIAl9CiAKKwkvKgorCSAqIFdpdGggdGhlIGRyaXZlIGRldGVjdGVkLCB4ZF9tYXhzZWN0b3JzIHNob3VsZCBub3cgYmUga25vd24uCisJICogSWYgeGRfbWF4c2VjdG9ycyBpcyAwLCBub3RoaW5nIHdhcyBkZXRlY3RlZCBhbmQgd2UgZmFsbCB0aHJvdWdoCisJICogdG8gcmV0dXJuIC1FTk9ERVYKKwkgKi8KKwlpZiAoIXhkX2RtYV9idWZmZXIgJiYgeGRfbWF4c2VjdG9ycykgeworCQl4ZF9kbWFfYnVmZmVyID0gKGNoYXIgKil4ZF9kbWFfbWVtX2FsbG9jKHhkX21heHNlY3RvcnMgKiAweDIwMCk7CisJCWlmICgheGRfZG1hX2J1ZmZlcikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ4ZDogT3V0IG9mIG1lbW9yeS5cbiIpOworCQkJZ290byBvdXQzOworCQl9CisJfQorCiAJZXJyID0gLUVOT0RFVjsKIAlpZiAoIXhkX2RyaXZlcykKIAkJZ290byBvdXQzOwpAQCAtMjQ5LDE1ICsyNTUsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgeGRfZHJpdmVzOyBpKyspCiAJCXB1dF9kaXNrKHhkX2dlbmRpc2tbaV0pOwogb3V0MzoKLQlyZWxlYXNlX3JlZ2lvbih4ZF9pb2Jhc2UsNCk7CisJaWYgKHhkX21heHNlY3RvcnMpCisJCXJlbGVhc2VfcmVnaW9uKHhkX2lvYmFzZSw0KTsKKworCWlmICh4ZF9kbWFfYnVmZmVyKQorCQl4ZF9kbWFfbWVtX2ZyZWUoKHVuc2lnbmVkIGxvbmcpeGRfZG1hX2J1ZmZlciwKKwkJCQl4ZF9tYXhzZWN0b3JzICogMHgyMDApOwogb3V0MjoKIAlibGtfY2xlYW51cF9xdWV1ZSh4ZF9xdWV1ZSk7CiBvdXQxYToKIAl1bnJlZ2lzdGVyX2Jsa2RldihYVF9ESVNLX01BSk9SLCAieGQiKTsKIG91dDE6Ci0JaWYgKHhkX2RtYV9idWZmZXIpCi0JCXhkX2RtYV9tZW1fZnJlZSgodW5zaWduZWQgbG9uZyl4ZF9kbWFfYnVmZmVyLAotCQkJCXhkX21heHNlY3RvcnMgKiAweDIwMCk7CiAJcmV0dXJuIGVycjsKIEVub21lbToKIAllcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCA2ZjMxYzk0Li4zMWJlM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtNTAyLDcgKzUwMiw3IEBACiAKIGNvbmZpZyBCRklOX09UUAogCXRyaXN0YXRlICJCbGFja2ZpbiBPbi1DaGlwIE9UUCBNZW1vcnkgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEJMQUNLRklOICYmIChCRjUyeCB8fCBCRjU0eCkKKwlkZXBlbmRzIG9uIEJMQUNLRklOICYmIChCRjUxeCB8fCBCRjUyeCB8fCBCRjU0eCkKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIGEgY2hhcmFjdGVyIGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKaW5kZXggNzAzOTU5ZS4uZDg5ZGE0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCkBAIC0xNDQsNTkgKzE0NCwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVuaW5vcnRoX2luc2VydF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsCi0JCQkJaW50IHR5cGUpCi17Ci0JaW50IGksIGosIG51bV9lbnRyaWVzOwotCXZvaWQgKnRlbXA7Ci0JaW50IG1hc2tfdHlwZTsKLQotCXRlbXAgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemU7Ci0JbnVtX2VudHJpZXMgPSBBX1NJWkVfMzIodGVtcCktPm51bV9lbnRyaWVzOwotCi0JaWYgKHR5cGUgIT0gbWVtLT50eXBlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1hc2tfdHlwZSA9IGFncF9icmlkZ2UtPmRyaXZlci0+YWdwX3R5cGVfdG9fbWFza190eXBlKGFncF9icmlkZ2UsIHR5cGUpOwotCWlmIChtYXNrX3R5cGUgIT0gMCkgewotCQkvKiBXZSBrbm93IG5vdGhpbmcgb2YgbWVtb3J5IHR5cGVzICovCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4gbnVtX2VudHJpZXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaiA9IHBnX3N0YXJ0OwotCi0Jd2hpbGUgKGogPCAocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpKSB7Ci0JCWlmIChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlW2pdKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJaisrOwotCX0KLQotCWZvciAoaSA9IDAsIGogPSBwZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrLCBqKyspIHsKLQkJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZVtqXSA9Ci0JCQljcHVfdG9fbGUzMigocGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pICYgMHhGRkZGRjAwMFVMKSB8IDB4MVVMKTsKLQkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKV9fdmEocGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pKSwKLQkJCQkgICAodW5zaWduZWQgbG9uZylfX3ZhKHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSkrMHgxMDAwKTsKLQl9Ci0JKHZvaWQpaW5fbGUzMigodm9sYXRpbGUgdTMyKikmYWdwX2JyaWRnZS0+Z2F0dF90YWJsZVtwZ19zdGFydF0pOwotCW1iKCk7Ci0KLQl1bmlub3J0aF90bGJmbHVzaChtZW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHUzX2luc2VydF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsIGludCB0eXBlKQorc3RhdGljIGludCB1bmlub3J0aF9pbnNlcnRfbWVtb3J5KHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0sIG9mZl90IHBnX3N0YXJ0LCBpbnQgdHlwZSkKIHsKIAlpbnQgaSwgbnVtX2VudHJpZXM7CiAJdm9pZCAqdGVtcDsKIAl1MzIgKmdwOwogCWludCBtYXNrX3R5cGU7CiAKLQl0ZW1wID0gYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplOwotCW51bV9lbnRyaWVzID0gQV9TSVpFXzMyKHRlbXApLT5udW1fZW50cmllczsKLQogCWlmICh0eXBlICE9IG1lbS0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTIwNiw2ICsxNjAsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXRlbXAgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemU7CisJbnVtX2VudHJpZXMgPSBBX1NJWkVfMzIodGVtcCktPm51bV9lbnRyaWVzOworCiAJaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTIxMywxNCArMTczLDE4IEBACiAJZm9yIChpID0gMDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgKytpKSB7CiAJCWlmIChncFtpXSkgewogCQkJZGV2X2luZm8oJmFncF9icmlkZ2UtPmRldi0+ZGV2LAotCQkJCSAidTNfaW5zZXJ0X21lbW9yeTogZW50cnkgMHgleCBvY2N1cGllZCAoJXgpXG4iLAorCQkJCSAidW5pbm9ydGhfaW5zZXJ0X21lbW9yeTogZW50cnkgMHgleCBvY2N1cGllZCAoJXgpXG4iLAogCQkJCSBpLCBncFtpXSk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrKSB7Ci0JCWdwW2ldID0gKHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSA+PiBQQUdFX1NISUZUKSB8IDB4ODAwMDAwMDBVTDsKKwkJaWYgKGlzX3UzKQorCQkJZ3BbaV0gPSAocGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pID4+IFBBR0VfU0hJRlQpIHwgMHg4MDAwMDAwMFVMOworCQllbHNlCisJCQlncFtpXSA9CWNwdV90b19sZTMyKChwYWdlX3RvX3BoeXMobWVtLT5wYWdlc1tpXSkgJiAweEZGRkZGMDAwVUwpIHwKKwkJCQkJICAgIDB4MVVMKTsKIAkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKV9fdmEocGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pKSwKIAkJCQkgICAodW5zaWduZWQgbG9uZylfX3ZhKHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSkrMHgxMDAwKTsKIAl9CkBAIC0yMzAsMTQgKzE5NCwyMyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdTNfcmVtb3ZlX21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCwgaW50IHR5cGUpCitpbnQgdW5pbm9ydGhfcmVtb3ZlX21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCwgaW50IHR5cGUpCiB7CiAJc2l6ZV90IGk7CiAJdTMyICpncDsKKwlpbnQgbWFza190eXBlOwogCi0JaWYgKHR5cGUgIT0gMCB8fCBtZW0tPnR5cGUgIT0gMCkKKwlpZiAodHlwZSAhPSBtZW0tPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJbWFza190eXBlID0gYWdwX2JyaWRnZS0+ZHJpdmVyLT5hZ3BfdHlwZV90b19tYXNrX3R5cGUoYWdwX2JyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwKSB7CiAJCS8qIFdlIGtub3cgbm90aGluZyBvZiBtZW1vcnkgdHlwZXMgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKIAogCWdwID0gKHUzMiAqKSAmYWdwX2JyaWRnZS0+Z2F0dF90YWJsZVtwZ19zdGFydF07CiAJZm9yIChpID0gMDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgKytpKQpAQCAtNTM2LDcgKzUwOSw3IEBACiAJLmNyZWF0ZV9nYXR0X3RhYmxlCT0gdW5pbm9ydGhfY3JlYXRlX2dhdHRfdGFibGUsCiAJLmZyZWVfZ2F0dF90YWJsZQk9IHVuaW5vcnRoX2ZyZWVfZ2F0dF90YWJsZSwKIAkuaW5zZXJ0X21lbW9yeQkJPSB1bmlub3J0aF9pbnNlcnRfbWVtb3J5LAotCS5yZW1vdmVfbWVtb3J5CQk9IGFncF9nZW5lcmljX3JlbW92ZV9tZW1vcnksCisJLnJlbW92ZV9tZW1vcnkJCT0gdW5pbm9ydGhfcmVtb3ZlX21lbW9yeSwKIAkuYWxsb2NfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19ieV90eXBlLAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLApAQCAtNTYyLDggKzUzNSw4IEBACiAJLmFncF9lbmFibGUJCT0gdW5pbm9ydGhfYWdwX2VuYWJsZSwKIAkuY3JlYXRlX2dhdHRfdGFibGUJPSB1bmlub3J0aF9jcmVhdGVfZ2F0dF90YWJsZSwKIAkuZnJlZV9nYXR0X3RhYmxlCT0gdW5pbm9ydGhfZnJlZV9nYXR0X3RhYmxlLAotCS5pbnNlcnRfbWVtb3J5CQk9IHUzX2luc2VydF9tZW1vcnksCi0JLnJlbW92ZV9tZW1vcnkJCT0gdTNfcmVtb3ZlX21lbW9yeSwKKwkuaW5zZXJ0X21lbW9yeQkJPSB1bmlub3J0aF9pbnNlcnRfbWVtb3J5LAorCS5yZW1vdmVfbWVtb3J5CQk9IHVuaW5vcnRoX3JlbW92ZV9tZW1vcnksCiAJLmFsbG9jX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfYWxsb2NfYnlfdHlwZSwKIAkuZnJlZV9ieV90eXBlCQk9IGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UJCT0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lZmlydGMuYyBiL2RyaXZlcnMvY2hhci9lZmlydGMuYwppbmRleCAyNmE0N2RjLi41M2M1MjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZWZpcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2VmaXJ0Yy5jCkBAIC0yODUsNiArMjg1LDcgQEAKIAkudW5sb2NrZWRfaW9jdGwJPSBlZmlfcnRjX2lvY3RsLAogCS5vcGVuCQk9IGVmaV9ydGNfb3BlbiwKIAkucmVsZWFzZQk9IGVmaV9ydGNfY2xvc2UsCisJLmxsc2VlawkJPSBub19sbHNlZWssCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZWZpX3J0Y19kZXY9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggYTYzMmYyNS4uNDE2ZDM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTgzMiw2ICs4MzIsNyBAQAogCQl0dHlfaGFuZ3VwKHR0eSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChodmNfcmVtb3ZlKTsKIAogLyogRHJpdmVyIGluaXRpYWxpemF0aW9uOiBjYWxsZWQgYXMgc29vbiBhcyBzb21lb25lIHVzZXMgaHZjX2FsbG9jKCkuICovCiBzdGF0aWMgaW50IGh2Y19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCmluZGV4IGI4YTVkNjUuLmZlNjJiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCkBAIC05MzEsNyArOTMxLDcgQEAKIH07CiAKIC8qIFN1c3BlbmQgLyByZXN1bWUgZGV2aWNlIG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBodmNfaXVjdl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaHZjX2l1Y3ZfcG1fb3BzID0gewogCS5mcmVlemUJICA9IGh2Y19pdWN2X3BtX2ZyZWV6ZSwKIAkudGhhdwkgID0gaHZjX2l1Y3ZfcG1fcmVzdG9yZV90aGF3LAogCS5yZXN0b3JlICA9IGh2Y19pdWN2X3BtX3Jlc3RvcmVfdGhhdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfa2NzX3NtLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2tjc19zbS5jCmluZGV4IDgwNzA0ODcuLmNmODJmZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfa2NzX3NtLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9rY3Nfc20uYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJCQlyZXR1cm4gU0lfU01fSURMRTsKIAogCWNhc2UgS0NTX1NUQVJUX09QOgotCQlpZiAoc3RhdGUgIT0gS0NTX0lETEUpIHsKKwkJaWYgKHN0YXRlICE9IEtDU19JRExFX1NUQVRFKSB7CiAJCQlzdGFydF9lcnJvcl9yZWNvdmVyeShrY3MsCiAJCQkJCSAgICAgIlN0YXRlIG1hY2hpbmUgbm90IGlkbGUgYXQgc3RhcnQiKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwppbmRleCBkMmU2OTgwLi42NzljZDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAKICNpZmRlZiBDT05GSUdfUFBDX09GCiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CkBAIC0xOTE5LDcgKzE5MjAsNyBAQAogCXM4ICAgICAgc3BtaV9pZFsxXTsgLyogQSAnXDAnIHRlcm1pbmF0ZWQgYXJyYXkgc3RhcnRzIGhlcmUuICovCiB9OwogCi1zdGF0aWMgX19kZXZpbml0IGludCB0cnlfaW5pdF9hY3BpKHN0cnVjdCBTUE1JVGFibGUgKnNwbWkpCitzdGF0aWMgX19kZXZpbml0IGludCB0cnlfaW5pdF9zcG1pKHN0cnVjdCBTUE1JVGFibGUgKnNwbWkpCiB7CiAJc3RydWN0IHNtaV9pbmZvICAqaW5mbzsKIAl1OCAJCSBhZGRyX3NwYWNlOwpAQCAtMTk0MCw3ICsxOTQxLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW5mby0+YWRkcl9zb3VyY2UgPSAiQUNQSSI7CisJaW5mby0+YWRkcl9zb3VyY2UgPSAiU1BNSSI7CiAKIAkvKiBGaWd1cmUgb3V0IHRoZSBpbnRlcmZhY2UgdHlwZS4gKi8KIAlzd2l0Y2ggKHNwbWktPkludGVyZmFjZVR5cGUpIHsKQEAgLTIwMDIsNyArMjAwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2RldmluaXQgdm9pZCBhY3BpX2ZpbmRfYm1jKHZvaWQpCitzdGF0aWMgX19kZXZpbml0IHZvaWQgc3BtaV9maW5kX2JtYyh2b2lkKQogewogCWFjcGlfc3RhdHVzICAgICAgc3RhdHVzOwogCXN0cnVjdCBTUE1JVGFibGUgKnNwbWk7CkBAIC0yMDIwLDkgKzIwMjEsMTA2IEBACiAJCWlmIChzdGF0dXMgIT0gQUVfT0spCiAJCQlyZXR1cm47CiAKLQkJdHJ5X2luaXRfYWNwaShzcG1pKTsKKwkJdHJ5X2luaXRfc3BtaShzcG1pKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlwbWlfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldjsKKwlzdHJ1Y3Qgc21pX2luZm8gKmluZm87CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOworCisJYWNwaV9kZXYgPSBwbnBfYWNwaV9kZXZpY2UoZGV2KTsKKwlpZiAoIWFjcGlfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvLT5hZGRyX3NvdXJjZSA9ICJBQ1BJIjsKKworCWhhbmRsZSA9IGFjcGlfZGV2LT5oYW5kbGU7CisKKwkvKiBfSUZUIHRlbGxzIHVzIHRoZSBpbnRlcmZhY2UgdHlwZTogS0NTLCBCVCwgZXRjICovCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9JRlQiLCBOVUxMLCAmdG1wKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlzd2l0Y2ggKHRtcCkgeworCWNhc2UgMToKKwkJaW5mby0+c2lfdHlwZSA9IFNJX0tDUzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpbmZvLT5zaV90eXBlID0gU0lfU01JQzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpbmZvLT5zaV90eXBlID0gU0lfQlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKCZkZXYtPmRldiwgInVua25vd24gaW50ZXJmYWNlIHR5cGUgJWxsZFxuIiwgdG1wKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAocG5wX3BvcnRfdmFsaWQoZGV2LCAwKSkgeworCQlpbmZvLT5pb19zZXR1cCA9IHBvcnRfc2V0dXA7CisJCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfSU9fQUREUl9TUEFDRTsKKwkJaW5mby0+aW8uYWRkcl9kYXRhID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKKwl9IGVsc2UgaWYgKHBucF9tZW1fdmFsaWQoZGV2LCAwKSkgeworCQlpbmZvLT5pb19zZXR1cCA9IG1lbV9zZXR1cDsKKwkJaW5mby0+aW8uYWRkcl90eXBlID0gSVBNSV9NRU1fQUREUl9TUEFDRTsKKwkJaW5mby0+aW8uYWRkcl9kYXRhID0gcG5wX21lbV9zdGFydChkZXYsIDApOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gSS9PIG9yIG1lbW9yeSBhZGRyZXNzXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpbmZvLT5pby5yZWdzcGFjaW5nID0gREVGQVVMVF9SRUdTUEFDSU5HOworCWluZm8tPmlvLnJlZ3NpemUgPSBERUZBVUxUX1JFR1NQQUNJTkc7CisJaW5mby0+aW8ucmVnc2hpZnQgPSAwOworCisJLyogSWYgX0dQRSBleGlzdHMsIHVzZSBpdDsgb3RoZXJ3aXNlIHVzZSBzdGFuZGFyZCBpbnRlcnJ1cHRzICovCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9HUEUiLCBOVUxMLCAmdG1wKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJaW5mby0+aXJxID0gdG1wOworCQlpbmZvLT5pcnFfc2V0dXAgPSBhY3BpX2dwZV9pcnFfc2V0dXA7CisJfSBlbHNlIGlmIChwbnBfaXJxX3ZhbGlkKGRldiwgMCkpIHsKKwkJaW5mby0+aXJxID0gcG5wX2lycShkZXYsIDApOworCQlpbmZvLT5pcnFfc2V0dXAgPSBzdGRfaXJxX3NldHVwOworCX0KKworCWluZm8tPmRldiA9ICZhY3BpX2Rldi0+ZGV2OworCXBucF9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJcmV0dXJuIHRyeV9zbWlfaW5pdChpbmZvKTsKKworZXJyX2ZyZWU6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcG1pX3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc21pX2luZm8gKmluZm8gPSBwbnBfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsZWFudXBfb25lX3NpKGluZm8pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgcG5wX2Rldl90YWJsZVtdID0geworCXsiSVBJMDAwMSIsIDB9LAorCXsiIiwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgaXBtaV9wbnBfZHJpdmVyID0geworCS5uYW1lCQk9IERFVklDRV9OQU1FLAorCS5wcm9iZQkJPSBpcG1pX3BucF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlwbWlfcG5wX3JlbW92ZSksCisJLmlkX3RhYmxlCT0gcG5wX2Rldl90YWJsZSwKK307CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ETUkKQEAgLTIyMDIsNyArMjMwMCw2IEBACiAJaW50IHJ2OwogCWludCBjbGFzc190eXBlID0gcGRldi0+Y2xhc3MgJiBQQ0lfRVJNQ19DTEFTU0NPREVfVFlQRV9NQVNLOwogCXN0cnVjdCBzbWlfaW5mbyAqaW5mbzsKLQlpbnQgZmlyc3RfcmVnX29mZnNldCA9IDA7CiAKIAlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCkBAIC0yMjQxLDkgKzIzMzgsNiBAQAogCWluZm8tPmFkZHJfc291cmNlX2NsZWFudXAgPSBpcG1pX3BjaV9jbGVhbnVwOwogCWluZm8tPmFkZHJfc291cmNlX2RhdGEgPSBwZGV2OwogCi0JaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX0hQX1ZFTkRPUl9JRCkKLQkJZmlyc3RfcmVnX29mZnNldCA9IDE7Ci0KIAlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9JTykgewogCQlpbmZvLT5pb19zZXR1cCA9IHBvcnRfc2V0dXA7CiAJCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfSU9fQUREUl9TUEFDRTsKQEAgLTMxMDgsNyArMzIwMiwxMCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQUNQSQotCWFjcGlfZmluZF9ibWMoKTsKKwlzcG1pX2ZpbmRfYm1jKCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUE5QCisJcG5wX3JlZ2lzdGVyX2RyaXZlcigmaXBtaV9wbnBfZHJpdmVyKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtMzIzMyw2ICszMzMwLDkgQEAKICNpZmRlZiBDT05GSUdfUENJCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpcG1pX3BjaV9kcml2ZXIpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BOUAorCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmaXBtaV9wbnBfZHJpdmVyKTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BQQ19PRgogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpcG1pX29mX3BsYXRmb3JtX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCmluZGV4IDU2MTkwMDcuLmY3MDZiMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCkBAIC0yMzMsNyArMjMzLDggQEAKIH0KIAogLyoKLSAqIE1ha2luZyBiZWVwcyBhbmQgYmVsbHMuCisgKiBNYWtpbmcgYmVlcHMgYW5kIGJlbGxzLiBOb3RlIHRoYXQgd2UgcHJlZmVyIGJlZXBzIHRvIGJlbGxzLCBidXQgd2hlbgorICogc2h1dHRpbmcgdGhlIHNvdW5kIG9mZiB3ZSBkbyBib3RoLgogICovCiAKIHN0YXRpYyBpbnQga2Rfc291bmRfaGVscGVyKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwgdm9pZCAqZGF0YSkKQEAgLTI0Miw5ICsyNDMsMTIgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoYW5kbGUtPmRldjsKIAogCWlmICh0ZXN0X2JpdChFVl9TTkQsIGRldi0+ZXZiaXQpKSB7Ci0JCWlmICh0ZXN0X2JpdChTTkRfVE9ORSwgZGV2LT5zbmRiaXQpKQorCQlpZiAodGVzdF9iaXQoU05EX1RPTkUsIGRldi0+c25kYml0KSkgewogCQkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfU05ELCBTTkRfVE9ORSwgKmh6KTsKLQkJaWYgKHRlc3RfYml0KFNORF9CRUxMLCBoYW5kbGUtPmRldi0+c25kYml0KSkKKwkJCWlmICgqaHopCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHRlc3RfYml0KFNORF9CRUxMLCBkZXYtPnNuZGJpdCkpCiAJCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9TTkQsIFNORF9CRUxMLCAqaHogPyAxIDogMCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbHAuYyBiL2RyaXZlcnMvY2hhci9scC5jCmluZGV4IGU0NDRjMmQuLjkzOGEzYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9scC5jCisrKyBiL2RyaXZlcnMvY2hhci9scC5jCkBAIC0xMjcsNiArMTI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CiAjdW5kZWYgTFBfU1RBVFMKQEAgLTU3MSwxMyArNTcyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbHBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbHBfZG9faW9jdGwodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgY21kLAorCXVuc2lnbmVkIGxvbmcgYXJnLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCWludCBzdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7Ci0Jdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKICNpZmRlZiBMUF9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICJscCVkIGlvY3RsLCBjbWQ6IDB4JXgsIGFyZzogMHglbHhcbiIsIG1pbm9yLCBjbWQsIGFyZyk7CkBAIC01ODcsOSArNTg2LDYgQEAKIAlpZiAoKExQX0YobWlub3IpICYgTFBfRVhJU1QpID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCXN3aXRjaCAoIGNtZCApIHsKLQkJc3RydWN0IHRpbWV2YWwgcGFyX3RpbWVvdXQ7Ci0JCWxvbmcgdG9famlmZmllczsKLQogCQljYXNlIExQVElNRToKIAkJCUxQX1RJTUUobWlub3IpID0gYXJnICogSFovMTAwOwogCQkJYnJlYWs7CkBAIC02NTIsMzQgKzY0OCwxMDEgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTFBTRVRUSU1FT1VUOgotCQkJaWYgKGNvcHlfZnJvbV91c2VyICgmcGFyX3RpbWVvdXQsIGFyZ3AsCi0JCQkJCSAgICBzaXplb2YgKHN0cnVjdCB0aW1ldmFsKSkpIHsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCS8qIENvbnZlcnQgdG8gamlmZmllcywgcGxhY2UgaW4gbHBfdGFibGUgKi8KLQkJCWlmICgocGFyX3RpbWVvdXQudHZfc2VjIDwgMCkgfHwKLQkJCSAgICAocGFyX3RpbWVvdXQudHZfdXNlYyA8IDApKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQl0b19qaWZmaWVzID0gRElWX1JPVU5EX1VQKHBhcl90aW1lb3V0LnR2X3VzZWMsIDEwMDAwMDAvSFopOwotCQkJdG9famlmZmllcyArPSBwYXJfdGltZW91dC50dl9zZWMgKiAobG9uZykgSFo7Ci0JCQlpZiAodG9famlmZmllcyA8PSAwKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlscF90YWJsZVttaW5vcl0udGltZW91dCA9IHRvX2ppZmZpZXM7Ci0JCQlicmVhazsKLQogCQlkZWZhdWx0OgogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludCBscF9zZXRfdGltZW91dCh1bnNpZ25lZCBpbnQgbWlub3IsIHN0cnVjdCB0aW1ldmFsICpwYXJfdGltZW91dCkKK3sKKwlsb25nIHRvX2ppZmZpZXM7CisKKwkvKiBDb252ZXJ0IHRvIGppZmZpZXMsIHBsYWNlIGluIGxwX3RhYmxlICovCisJaWYgKChwYXJfdGltZW91dC0+dHZfc2VjIDwgMCkgfHwKKwkgICAgKHBhcl90aW1lb3V0LT50dl91c2VjIDwgMCkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRvX2ppZmZpZXMgPSBESVZfUk9VTkRfVVAocGFyX3RpbWVvdXQtPnR2X3VzZWMsIDEwMDAwMDAvSFopOworCXRvX2ppZmZpZXMgKz0gcGFyX3RpbWVvdXQtPnR2X3NlYyAqIChsb25nKSBIWjsKKwlpZiAodG9famlmZmllcyA8PSAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlscF90YWJsZVttaW5vcl0udGltZW91dCA9IHRvX2ppZmZpZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGxwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgaW50IG1pbm9yOworCXN0cnVjdCB0aW1ldmFsIHBhcl90aW1lb3V0OworCWludCByZXQ7CisKKwltaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlsb2NrX2tlcm5lbCgpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBMUFNFVFRJTUVPVVQ6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyX3RpbWVvdXQsICh2b2lkIF9fdXNlciAqKWFyZywKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdGltZXZhbCkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gbHBfc2V0X3RpbWVvdXQobWlub3IsICZwYXJfdGltZW91dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IGxwX2RvX2lvY3RsKG1pbm9yLCBjbWQsIGFyZywgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJfQorCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyBscF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3I7CisJc3RydWN0IHRpbWV2YWwgcGFyX3RpbWVvdXQ7CisJc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdGM7CisJaW50IHJldDsKKworCW1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWxvY2tfa2VybmVsKCk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIExQU0VUVElNRU9VVDoKKwkJdGMgPSBjb21wYXRfcHRyKGFyZyk7CisJCWlmIChnZXRfdXNlcihwYXJfdGltZW91dC50dl9zZWMsICZ0Yy0+dHZfc2VjKSB8fAorCQkgICAgZ2V0X3VzZXIocGFyX3RpbWVvdXQudHZfdXNlYywgJnRjLT50dl91c2VjKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IGxwX3NldF90aW1lb3V0KG1pbm9yLCAmcGFyX3RpbWVvdXQpOworCQlicmVhazsKKyNpZmRlZiBMUF9TVEFUUworCWNhc2UgTFBHRVRTVEFUUzoKKwkJLyogRklYTUU6IGFkZCBhbiBpbXBsZW1lbnRhdGlvbiBpZiB5b3Ugc2V0IExQX1NUQVRTICovCisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0ID0gbHBfZG9faW9jdGwobWlub3IsIGNtZCwgYXJnLCBjb21wYXRfcHRyKGFyZykpOworCQlicmVhazsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkud3JpdGUJCT0gbHBfd3JpdGUsCi0JLmlvY3RsCQk9IGxwX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGxwX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gbHBfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJLm9wZW4JCT0gbHBfb3BlbiwKIAkucmVsZWFzZQk9IGxwX3JlbGVhc2UsCiAjaWZkZWYgQ09ORklHX1BBUlBPUlRfMTI4NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IGZiYTc2ZmIuLmJlODMyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTM0LDYgKzM0LDE2IEBACiAjIGluY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaXplX2luc2lkZV9wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3o7CisKKwlzeiA9IFBBR0VfU0laRSAtIChzdGFydCAmIChQQUdFX1NJWkUgLSAxKSk7CisKKwlyZXR1cm4gbWluKHN6LCBzaXplKTsKK30KKwogLyoKICAqIEFyY2hpdGVjdHVyZXMgdmFyeSBpbiBob3cgdGhleSBoYW5kbGUgY2FjaGluZyBmb3IgYWRkcmVzc2VzCiAgKiBvdXRzaWRlIG9mIG1haW4gbWVtb3J5LgpAQCAtMTI2LDkgKzEzNiw3IEBACiAjaWZkZWYgX19BUkNIX0hBU19OT19QQUdFX1pFUk9fTUFQUEVECiAJLyogd2UgZG9uJ3QgaGF2ZSBwYWdlIDAgbWFwcGVkIG9uIHNwYXJjIGFuZCBtNjhrLi4gKi8KIAlpZiAocCA8IFBBR0VfU0laRSkgewotCQlzeiA9IFBBR0VfU0laRSAtIHA7Ci0JCWlmIChzeiA+IGNvdW50KSAKLQkJCXN6ID0gY291bnQ7IAorCQlzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgY291bnQpOwogCQlpZiAoc3ogPiAwKSB7CiAJCQlpZiAoY2xlYXJfdXNlcihidWYsIHN6KSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE0MSwxNSArMTQ5LDkgQEAKICNlbmRpZgogCiAJd2hpbGUgKGNvdW50ID4gMCkgewotCQkvKgotCQkgKiBIYW5kbGUgZmlyc3QgcGFnZSBpbiBjYXNlIGl0J3Mgbm90IGFsaWduZWQKLQkJICovCi0JCWlmICgtcCAmIChQQUdFX1NJWkUgLSAxKSkKLQkJCXN6ID0gLXAgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCWVsc2UKLQkJCXN6ID0gUEFHRV9TSVpFOworCQl1bnNpZ25lZCBsb25nIHJlbWFpbmluZzsKIAotCQlzeiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHN6LCBjb3VudCk7CisJCXN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBjb3VudCk7CiAKIAkJaWYgKCFyYW5nZV9pc19hbGxvd2VkKHAgPj4gUEFHRV9TSElGVCwgY291bnQpKQogCQkJcmV0dXJuIC1FUEVSTTsKQEAgLTE2MywxMiArMTY1LDEwIEBACiAJCWlmICghcHRyKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHB0ciwgc3opKSB7Ci0JCQl1bnhsYXRlX2Rldl9tZW1fcHRyKHAsIHB0cik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCisJCXJlbWFpbmluZyA9IGNvcHlfdG9fdXNlcihidWYsIHB0ciwgc3opOwogCQl1bnhsYXRlX2Rldl9tZW1fcHRyKHAsIHB0cik7CisJCWlmIChyZW1haW5pbmcpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlidWYgKz0gc3o7CiAJCXAgKz0gc3o7CkBAIC0xOTYsOSArMTk2LDcgQEAKICNpZmRlZiBfX0FSQ0hfSEFTX05PX1BBR0VfWkVST19NQVBQRUQKIAkvKiB3ZSBkb24ndCBoYXZlIHBhZ2UgMCBtYXBwZWQgb24gc3BhcmMgYW5kIG02OGsuLiAqLwogCWlmIChwIDwgUEFHRV9TSVpFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3ogPSBQQUdFX1NJWkUgLSBwOwotCQlpZiAoc3ogPiBjb3VudCkKLQkJCXN6ID0gY291bnQ7CisJCXN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBjb3VudCk7CiAJCS8qIEhtbS4gRG8gc29tZXRoaW5nPyAqLwogCQlidWYgKz0gc3o7CiAJCXAgKz0gc3o7CkBAIC0yMDgsMTUgKzIwNiw3IEBACiAjZW5kaWYKIAogCXdoaWxlIChjb3VudCA+IDApIHsKLQkJLyoKLQkJICogSGFuZGxlIGZpcnN0IHBhZ2UgaW4gY2FzZSBpdCdzIG5vdCBhbGlnbmVkCi0JCSAqLwotCQlpZiAoLXAgJiAoUEFHRV9TSVpFIC0gMSkpCi0JCQlzeiA9IC1wICYgKFBBR0VfU0laRSAtIDEpOwotCQllbHNlCi0JCQlzeiA9IFBBR0VfU0laRTsKLQotCQlzeiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHN6LCBjb3VudCk7CisJCXN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBjb3VudCk7CiAKIAkJaWYgKCFyYW5nZV9pc19hbGxvd2VkKHAgPj4gUEFHRV9TSElGVCwgc3opKQogCQkJcmV0dXJuIC1FUEVSTTsKQEAgLTIzNCwxNiArMjI0LDE0IEBACiAJCX0KIAogCQljb3BpZWQgPSBjb3B5X2Zyb21fdXNlcihwdHIsIGJ1Ziwgc3opOworCQl1bnhsYXRlX2Rldl9tZW1fcHRyKHAsIHB0cik7CiAJCWlmIChjb3BpZWQpIHsKIAkJCXdyaXR0ZW4gKz0gc3ogLSBjb3BpZWQ7Ci0JCQl1bnhsYXRlX2Rldl9tZW1fcHRyKHAsIHB0cik7CiAJCQlpZiAod3JpdHRlbikKIAkJCQlicmVhazsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKLQkJdW54bGF0ZV9kZXZfbWVtX3B0cihwLCBwdHIpOwotCiAJCWJ1ZiArPSBzejsKIAkJcCArPSBzejsKIAkJY291bnQgLT0gc3o7CkBAIC00MTcsMjcgKzQwNSwxOCBAQAogI2lmZGVmIF9fQVJDSF9IQVNfTk9fUEFHRV9aRVJPX01BUFBFRAogCQkvKiB3ZSBkb24ndCBoYXZlIHBhZ2UgMCBtYXBwZWQgb24gc3BhcmMgYW5kIG02OGsuLiAqLwogCQlpZiAocCA8IFBBR0VfU0laRSAmJiBsb3dfY291bnQgPiAwKSB7Ci0JCQlzaXplX3QgdG1wID0gUEFHRV9TSVpFIC0gcDsKLQkJCWlmICh0bXAgPiBsb3dfY291bnQpIHRtcCA9IGxvd19jb3VudDsKLQkJCWlmIChjbGVhcl91c2VyKGJ1ZiwgdG1wKSkKKwkJCXN6ID0gc2l6ZV9pbnNpZGVfcGFnZShwLCBsb3dfY291bnQpOworCQkJaWYgKGNsZWFyX3VzZXIoYnVmLCBzeikpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlidWYgKz0gdG1wOwotCQkJcCArPSB0bXA7Ci0JCQlyZWFkICs9IHRtcDsKLQkJCWxvd19jb3VudCAtPSB0bXA7Ci0JCQljb3VudCAtPSB0bXA7CisJCQlidWYgKz0gc3o7CisJCQlwICs9IHN6OworCQkJcmVhZCArPSBzejsKKwkJCWxvd19jb3VudCAtPSBzejsKKwkJCWNvdW50IC09IHN6OwogCQl9CiAjZW5kaWYKIAkJd2hpbGUgKGxvd19jb3VudCA+IDApIHsKLQkJCS8qCi0JCQkgKiBIYW5kbGUgZmlyc3QgcGFnZSBpbiBjYXNlIGl0J3Mgbm90IGFsaWduZWQKLQkJCSAqLwotCQkJaWYgKC1wICYgKFBBR0VfU0laRSAtIDEpKQotCQkJCXN6ID0gLXAgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCQllbHNlCi0JCQkJc3ogPSBQQUdFX1NJWkU7Ci0KLQkJCXN6ID0gbWluX3QodW5zaWduZWQgbG9uZywgc3osIGxvd19jb3VudCk7CisJCQlzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgbG93X2NvdW50KTsKIAogCQkJLyoKIAkJCSAqIE9uIGlhNjQgaWYgYSBwYWdlIGhhcyBiZWVuIG1hcHBlZCBzb21ld2hlcmUgYXMKQEAgLTQ2MSwyMSArNDQwLDE4IEBACiAJCWlmICgha2J1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCQlpbnQgbGVuID0gY291bnQ7Ci0KLQkJCWlmIChsZW4gPiBQQUdFX1NJWkUpCi0JCQkJbGVuID0gUEFHRV9TSVpFOwotCQkJbGVuID0gdnJlYWQoa2J1ZiwgKGNoYXIgKilwLCBsZW4pOwotCQkJaWYgKCFsZW4pCisJCQlzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgY291bnQpOworCQkJc3ogPSB2cmVhZChrYnVmLCAoY2hhciAqKXAsIHN6KTsKKwkJCWlmICghc3opCiAJCQkJYnJlYWs7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1Ziwga2J1ZiwgbGVuKSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtidWYsIHN6KSkgewogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrYnVmKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KLQkJCWNvdW50IC09IGxlbjsKLQkJCWJ1ZiArPSBsZW47Ci0JCQlyZWFkICs9IGxlbjsKLQkJCXAgKz0gbGVuOworCQkJY291bnQgLT0gc3o7CisJCQlidWYgKz0gc3o7CisJCQlyZWFkICs9IHN6OworCQkJcCArPSBzejsKIAkJfQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2J1Zik7CiAJfQpAQCAtNDg1LDcgKzQ2MSw3IEBACiAKIAogc3RhdGljIGlubGluZSBzc2l6ZV90Ci1kb193cml0ZV9rbWVtKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgcmVhbHAsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAorZG9fd3JpdGVfa21lbSh1bnNpZ25lZCBsb25nIHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3NpemVfdCB3cml0dGVuLCBzejsKQEAgLTQ5NCwxNCArNDcwLDExIEBACiAJd3JpdHRlbiA9IDA7CiAjaWZkZWYgX19BUkNIX0hBU19OT19QQUdFX1pFUk9fTUFQUEVECiAJLyogd2UgZG9uJ3QgaGF2ZSBwYWdlIDAgbWFwcGVkIG9uIHNwYXJjIGFuZCBtNjhrLi4gKi8KLQlpZiAocmVhbHAgPCBQQUdFX1NJWkUpIHsKLQkJdW5zaWduZWQgbG9uZyBzeiA9IFBBR0VfU0laRSAtIHJlYWxwOwotCQlpZiAoc3ogPiBjb3VudCkKLQkJCXN6ID0gY291bnQ7CisJaWYgKHAgPCBQQUdFX1NJWkUpIHsKKwkJc3ogPSBzaXplX2luc2lkZV9wYWdlKHAsIGNvdW50KTsKIAkJLyogSG1tLiBEbyBzb21ldGhpbmc/ICovCiAJCWJ1ZiArPSBzejsKIAkJcCArPSBzejsKLQkJcmVhbHAgKz0gc3o7CiAJCWNvdW50IC09IHN6OwogCQl3cml0dGVuICs9IHN6OwogCX0KQEAgLTUwOSwyMiArNDgyLDE1IEBACiAKIAl3aGlsZSAoY291bnQgPiAwKSB7CiAJCWNoYXIgKnB0cjsKLQkJLyoKLQkJICogSGFuZGxlIGZpcnN0IHBhZ2UgaW4gY2FzZSBpdCdzIG5vdCBhbGlnbmVkCi0JCSAqLwotCQlpZiAoLXJlYWxwICYgKFBBR0VfU0laRSAtIDEpKQotCQkJc3ogPSAtcmVhbHAgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCWVsc2UKLQkJCXN6ID0gUEFHRV9TSVpFOwogCi0JCXN6ID0gbWluX3QodW5zaWduZWQgbG9uZywgc3osIGNvdW50KTsKKwkJc3ogPSBzaXplX2luc2lkZV9wYWdlKHAsIGNvdW50KTsKIAogCQkvKgogCQkgKiBPbiBpYTY0IGlmIGEgcGFnZSBoYXMgYmVlbiBtYXBwZWQgc29tZXdoZXJlIGFzCiAJCSAqIHVuY2FjaGVkLCB0aGVuIGl0IG11c3QgYWxzbyBiZSBhY2Nlc3NlZCB1bmNhY2hlZAogCQkgKiBieSB0aGUga2VybmVsIG9yIGRhdGEgY29ycnVwdGlvbiBtYXkgb2NjdXIKIAkJICovCi0JCXB0ciA9IHhsYXRlX2Rldl9rbWVtX3B0cihwKTsKKwkJcHRyID0geGxhdGVfZGV2X2ttZW1fcHRyKChjaGFyICopcCk7CiAKIAkJY29waWVkID0gY29weV9mcm9tX3VzZXIocHRyLCBidWYsIHN6KTsKIAkJaWYgKGNvcGllZCkgewpAQCAtNTM1LDcgKzUwMSw2IEBACiAJCX0KIAkJYnVmICs9IHN6OwogCQlwICs9IHN6OwotCQlyZWFscCArPSBzejsKIAkJY291bnQgLT0gc3o7CiAJCXdyaXR0ZW4gKz0gc3o7CiAJfQpAQCAtNTU0LDE5ICs1MTksMTQgQEAKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKIAlzc2l6ZV90IHdyb3RlID0gMDsKIAlzc2l6ZV90IHZpcnRyID0gMDsKLQlzc2l6ZV90IHdyaXR0ZW47CiAJY2hhciAqIGtidWY7IC8qIGstYWRkciBiZWNhdXNlIHZ3cml0ZSgpIHRha2VzIHZtbGlzdF9sb2NrIHJ3bG9jayAqLwogCiAJaWYgKHAgPCAodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkpIHsKLQotCQl3cm90ZSA9IGNvdW50OwotCQlpZiAoY291bnQgPiAodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgLSBwKQotCQkJd3JvdGUgPSAodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgLSBwOwotCi0JCXdyaXR0ZW4gPSBkb193cml0ZV9rbWVtKCh2b2lkKilwLCBwLCBidWYsIHdyb3RlLCBwcG9zKTsKLQkJaWYgKHdyaXR0ZW4gIT0gd3JvdGUpCi0JCQlyZXR1cm4gd3JpdHRlbjsKLQkJd3JvdGUgPSB3cml0dGVuOworCQl1bnNpZ25lZCBsb25nIHRvX3dyaXRlID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsCisJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtIHApOworCQl3cm90ZSA9IGRvX3dyaXRlX2ttZW0ocCwgYnVmLCB0b193cml0ZSwgcHBvcyk7CisJCWlmICh3cm90ZSAhPSB0b193cml0ZSkKKwkJCXJldHVybiB3cm90ZTsKIAkJcCArPSB3cm90ZTsKIAkJYnVmICs9IHdyb3RlOwogCQljb3VudCAtPSB3cm90ZTsKQEAgLTU3NywyNCArNTM3LDIxIEBACiAJCWlmICgha2J1ZikKIAkJCXJldHVybiB3cm90ZSA/IHdyb3RlIDogLUVOT01FTTsKIAkJd2hpbGUgKGNvdW50ID4gMCkgewotCQkJaW50IGxlbiA9IGNvdW50OworCQkJdW5zaWduZWQgbG9uZyBzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgY291bnQpOworCQkJdW5zaWduZWQgbG9uZyBuOwogCi0JCQlpZiAobGVuID4gUEFHRV9TSVpFKQotCQkJCWxlbiA9IFBBR0VfU0laRTsKLQkJCWlmIChsZW4pIHsKLQkJCQl3cml0dGVuID0gY29weV9mcm9tX3VzZXIoa2J1ZiwgYnVmLCBsZW4pOwotCQkJCWlmICh3cml0dGVuKSB7Ci0JCQkJCWlmICh3cm90ZSArIHZpcnRyKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrYnVmKTsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQorCQkJbiA9IGNvcHlfZnJvbV91c2VyKGtidWYsIGJ1Ziwgc3opOworCQkJaWYgKG4pIHsKKwkJCQlpZiAod3JvdGUgKyB2aXJ0cikKKwkJCQkJYnJlYWs7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOworCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQotCQkJbGVuID0gdndyaXRlKGtidWYsIChjaGFyICopcCwgbGVuKTsKLQkJCWNvdW50IC09IGxlbjsKLQkJCWJ1ZiArPSBsZW47Ci0JCQl2aXJ0ciArPSBsZW47Ci0JCQlwICs9IGxlbjsKKwkJCXN6ID0gdndyaXRlKGtidWYsIChjaGFyICopcCwgc3opOworCQkJY291bnQgLT0gc3o7CisJCQlidWYgKz0gc3o7CisJCQl2aXJ0ciArPSBzejsKKwkJCXAgKz0gc3o7CiAJCX0KIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9taXNjLmMgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCmluZGV4IDk2ZjFjZDAuLjk0YTEzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9taXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL21pc2MuYwpAQCAtNjAsOSArNjAsNyBAQAogICogQXNzaWduZWQgbnVtYmVycywgdXNlZCBmb3IgZHluYW1pYyBtaW5vcnMKICAqLwogI2RlZmluZSBEWU5BTUlDX01JTk9SUyA2NCAvKiBsaWtlIGR5bmFtaWMgbWFqb3JzICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBtaXNjX21pbm9yc1tEWU5BTUlDX01JTk9SUyAvIDhdOwotCi1leHRlcm4gaW50IHBtdV9kZXZpY2VfaW5pdCh2b2lkKTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChtaXNjX21pbm9ycywgRFlOQU1JQ19NSU5PUlMpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkICptaXNjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCkBAIC0xOTgsMjQgKzE5NiwyMyBAQAogCX0KIAogCWlmIChtaXNjLT5taW5vciA9PSBNSVNDX0RZTkFNSUNfTUlOT1IpIHsKLQkJaW50IGkgPSBEWU5BTUlDX01JTk9SUzsKLQkJd2hpbGUgKC0taSA+PSAwKQotCQkJaWYgKCAobWlzY19taW5vcnNbaT4+M10gJiAoMSA8PCAoaSY3KSkpID09IDApCi0JCQkJYnJlYWs7Ci0JCWlmIChpPDApIHsKKwkJaW50IGkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1pc2NfbWlub3JzLCBEWU5BTUlDX01JTk9SUyk7CisJCWlmIChpID49IERZTkFNSUNfTUlOT1JTKSB7CiAJCQltdXRleF91bmxvY2soJm1pc2NfbXR4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQkJbWlzYy0+bWlub3IgPSBpOworCQltaXNjLT5taW5vciA9IERZTkFNSUNfTUlOT1JTIC0gaSAtIDE7CisJCXNldF9iaXQoaSwgbWlzY19taW5vcnMpOwogCX0KIAotCWlmIChtaXNjLT5taW5vciA8IERZTkFNSUNfTUlOT1JTKQotCQltaXNjX21pbm9yc1ttaXNjLT5taW5vciA+PiAzXSB8PSAxIDw8IChtaXNjLT5taW5vciAmIDcpOwogCWRldiA9IE1LREVWKE1JU0NfTUFKT1IsIG1pc2MtPm1pbm9yKTsKIAogCW1pc2MtPnRoaXNfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShtaXNjX2NsYXNzLCBtaXNjLT5wYXJlbnQsIGRldiwKIAkJCQkJICBtaXNjLCAiJXMiLCBtaXNjLT5uYW1lKTsKIAlpZiAoSVNfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKSkgeworCQlpbnQgaSA9IERZTkFNSUNfTUlOT1JTIC0gbWlzYy0+bWlub3IgLSAxOworCQlpZiAoaSA8IERZTkFNSUNfTUlOT1JTICYmIGkgPj0gMCkKKwkJCWNsZWFyX2JpdChpLCBtaXNjX21pbm9ycyk7CiAJCWVyciA9IFBUUl9FUlIobWlzYy0+dGhpc19kZXZpY2UpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNDIsNyArMjM5LDcgQEAKIAogaW50IG1pc2NfZGVyZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqbWlzYykKIHsKLQlpbnQgaSA9IG1pc2MtPm1pbm9yOworCWludCBpID0gRFlOQU1JQ19NSU5PUlMgLSBtaXNjLT5taW5vciAtIDE7CiAKIAlpZiAobGlzdF9lbXB0eSgmbWlzYy0+bGlzdCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjUwLDkgKzI0Nyw4IEBACiAJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCWxpc3RfZGVsKCZtaXNjLT5saXN0KTsKIAlkZXZpY2VfZGVzdHJveShtaXNjX2NsYXNzLCBNS0RFVihNSVNDX01BSk9SLCBtaXNjLT5taW5vcikpOwotCWlmIChpIDwgRFlOQU1JQ19NSU5PUlMgJiYgaT4wKSB7Ci0JCW1pc2NfbWlub3JzW2k+PjNdICY9IH4oMSA8PCAobWlzYy0+bWlub3IgJiA3KSk7Ci0JfQorCWlmIChpIDwgRFlOQU1JQ19NSU5PUlMgJiYgaSA+PSAwKQorCQljbGVhcl9iaXQoaSwgbWlzY19taW5vcnMpOwogCW11dGV4X3VubG9jaygmbWlzY19tdHgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25vem9taS5jIGIvZHJpdmVycy9jaGFyL25vem9taS5jCmluZGV4IGQzNDAwYjIuLjdkNzNjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYworKysgYi9kcml2ZXJzL2NoYXIvbm96b21pLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCXU4IHVwZGF0ZV9mbG93X2NvbnRyb2w7CiAJc3RydWN0IGN0cmxfdWwgY3RybF91bDsKIAlzdHJ1Y3QgY3RybF9kbCBjdHJsX2RsOwotCXN0cnVjdCBrZmlmbyAqZmlmb191bDsKKwlzdHJ1Y3Qga2ZpZm8gZmlmb191bDsKIAl2b2lkIF9faW9tZW0gKmRsX2FkZHJbMl07CiAJdTMyIGRsX3NpemVbMl07CiAJdTggdG9nZ2xlX2RsOwpAQCAtNjg1LDggKzY4NSw2IEBACiAJCWR1bXBfdGFibGUoZGMpOwogCiAJCWZvciAoaSA9IFBPUlRfTURNOyBpIDwgTUFYX1BPUlQ7IGkrKykgewotCQkJZGMtPnBvcnRbaV0uZmlmb191bCA9Ci0JCQkgICAga2ZpZm9fYWxsb2MoRklGT19CVUZGRVJfU0laRV9VTCwgR0ZQX0FUT01JQywgTlVMTCk7CiAJCQltZW1zZXQoJmRjLT5wb3J0W2ldLmN0cmxfZGwsIDAsIHNpemVvZihzdHJ1Y3QgY3RybF9kbCkpOwogCQkJbWVtc2V0KCZkYy0+cG9ydFtpXS5jdHJsX3VsLCAwLCBzaXplb2Yoc3RydWN0IGN0cmxfdWwpKTsKIAkJfQpAQCAtNzk4LDcgKzc5Niw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCiAJLyogR2V0IGRhdGEgZnJvbSB0dHkgYW5kIHBsYWNlIGluIGJ1ZiBmb3Igbm93ICovCi0Jc2l6ZSA9IF9fa2ZpZm9fZ2V0KHBvcnQtPmZpZm9fdWwsIGRjLT5zZW5kX2J1ZiwKKwlzaXplID0ga2ZpZm9fb3V0KCZwb3J0LT5maWZvX3VsLCBkYy0+c2VuZF9idWYsCiAJCQkgICB1bF9zaXplIDwgU0VORF9CVUZfTUFYID8gdWxfc2l6ZSA6IFNFTkRfQlVGX01BWCk7CiAKIAlpZiAoc2l6ZSA9PSAwKSB7CkBAIC05ODgsMTEgKzk4NiwxMSBAQAogCiAJfSBlbHNlIGlmIChvbGRfY3RybC5DVFMgPT0gMCAmJiBjdHJsX2RsLkNUUyA9PSAxKSB7CiAKLQkJaWYgKF9fa2ZpZm9fbGVuKGRjLT5wb3J0W3BvcnRdLmZpZm9fdWwpKSB7CisJCWlmIChrZmlmb19sZW4oJmRjLT5wb3J0W3BvcnRdLmZpZm9fdWwpKSB7CiAJCQlEQkcxKCJFbmFibGUgaW50ZXJydXB0ICgweCUwNFgpIG9uIHBvcnQ6ICVkIiwKIAkJCQllbmFibGVfaWVyLCBwb3J0KTsKIAkJCURCRzEoIkRhdGEgaW4gYnVmZmVyIFslZF0sIGVuYWJsZSB0cmFuc21pdCEgIiwKLQkJCQlfX2tmaWZvX2xlbihkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSk7CisJCQkJa2ZpZm9fbGVuKCZkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSk7CiAJCQllbmFibGVfdHJhbnNtaXRfdWwocG9ydCwgZGMpOwogCQl9IGVsc2UgewogCQkJREJHMSgiTm8gZGF0YSBpbiBidWZmZXIuLi4iKTsKQEAgLTE0MzMsNiArMTQzMSwxNiBAQAogCQlnb3RvIGVycl9mcmVlX3NidWY7CiAJfQogCisJZm9yIChpID0gUE9SVF9NRE07IGkgPCBNQVhfUE9SVDsgaSsrKSB7CisJCWlmIChrZmlmb19hbGxvYygmZGMtPnBvcnRbaV0uZmlmb191bCwKKwkJICAgICAgRklGT19CVUZGRVJfU0laRV9VTCwgR0ZQX0FUT01JQykpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkJIkNvdWxkIG5vdCBhbGxvY2F0ZSBrZmlmbyBidWZmZXJcbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2ZyZWVfa2ZpZm87CisJCX0KKwl9CisKIAlzcGluX2xvY2tfaW5pdCgmZGMtPnNwaW5fbXV0ZXgpOwogCiAJbm96b21pX3NldHVwX3ByaXZhdGVfZGF0YShkYyk7CkBAIC0xNDQ1LDcgKzE0NTMsNyBAQAogCQkJTk9aT01JX05BTUUsIGRjKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgcGRldi0+aXJxKTsKLQkJZ290byBlcnJfZnJlZV9zYnVmOworCQlnb3RvIGVycl9mcmVlX2tmaWZvOwogCX0KIAogCURCRzEoImJhc2VfYWRkcjogJXAiLCBkYy0+YmFzZV9hZGRyKTsKQEAgLTE0NjQsMTMgKzE0NzIsMjggQEAKIAlkYy0+c3RhdGUgPSBOT1pPTUlfU1RBVEVfRU5BQkxFRDsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfUE9SVDsgaSsrKSB7CisJCXN0cnVjdCBkZXZpY2UgKnR0eV9kZXY7CisKIAkJbXV0ZXhfaW5pdCgmZGMtPnBvcnRbaV0udHR5X3NlbSk7CiAJCXR0eV9wb3J0X2luaXQoJmRjLT5wb3J0W2ldLnBvcnQpOwotCQl0dHlfcmVnaXN0ZXJfZGV2aWNlKG50dHlfZHJpdmVyLCBkYy0+aW5kZXhfc3RhcnQgKyBpLAorCQl0dHlfZGV2ID0gdHR5X3JlZ2lzdGVyX2RldmljZShudHR5X2RyaXZlciwgZGMtPmluZGV4X3N0YXJ0ICsgaSwKIAkJCQkJCQkmcGRldi0+ZGV2KTsKKworCQlpZiAoSVNfRVJSKHR0eV9kZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHR0eV9kZXYpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIHR0eT9cbiIpOworCQkJZ290byBlcnJfZnJlZV90dHk7CisJCX0KIAl9CisKIAlyZXR1cm4gMDsKIAorZXJyX2ZyZWVfdHR5OgorCWZvciAoaSA9IGRjLT5pbmRleF9zdGFydDsgaSA8IGRjLT5pbmRleF9zdGFydCArIE1BWF9QT1JUOyArK2kpCisJCXR0eV91bnJlZ2lzdGVyX2RldmljZShudHR5X2RyaXZlciwgaSk7CitlcnJfZnJlZV9rZmlmbzoKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BPUlQ7IGkrKykKKwkJa2ZpZm9fZnJlZSgmZGMtPnBvcnRbaV0uZmlmb191bCk7CiBlcnJfZnJlZV9zYnVmOgogCWtmcmVlKGRjLT5zZW5kX2J1Zik7CiAJaW91bm1hcChkYy0+YmFzZV9hZGRyKTsKQEAgLTE1MzYsOCArMTU1OSw3IEBACiAJZnJlZV9pcnEocGRldi0+aXJxLCBkYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BPUlQ7IGkrKykKLQkJaWYgKGRjLT5wb3J0W2ldLmZpZm9fdWwpCi0JCQlrZmlmb19mcmVlKGRjLT5wb3J0W2ldLmZpZm9fdWwpOworCQlrZmlmb19mcmVlKCZkYy0+cG9ydFtpXS5maWZvX3VsKTsKIAogCWtmcmVlKGRjLT5zZW5kX2J1Zik7CiAKQEAgLTE2NzMsNyArMTY5NSw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlydmFsID0gX19rZmlmb19wdXQocG9ydC0+Zmlmb191bCwgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIGNvdW50KTsKKwlydmFsID0ga2ZpZm9faW4oJnBvcnQtPmZpZm9fdWwsICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCBjb3VudCk7CiAKIAkvKiBub3RpZnkgY2FyZCAqLwogCWlmICh1bmxpa2VseShkYyA9PSBOVUxMKSkgewpAQCAtMTcyMSw3ICsxNzQzLDcgQEAKIAlpZiAoIXBvcnQtPnBvcnQuY291bnQpCiAJCWdvdG8gZXhpdDsKIAotCXJvb20gPSBwb3J0LT5maWZvX3VsLT5zaXplIC0gX19rZmlmb19sZW4ocG9ydC0+Zmlmb191bCk7CisJcm9vbSA9IHBvcnQtPmZpZm9fdWwuc2l6ZSAtIGtmaWZvX2xlbigmcG9ydC0+Zmlmb191bCk7CiAKIGV4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT50dHlfc2VtKTsKQEAgLTE4NzgsNyArMTkwMCw3IEBACiAJCWdvdG8gZXhpdF9pbl9idWZmZXI7CiAJfQogCi0JcnZhbCA9IF9fa2ZpZm9fbGVuKHBvcnQtPmZpZm9fdWwpOworCXJ2YWwgPSBrZmlmb19sZW4oJnBvcnQtPmZpZm9fdWwpOwogCiBleGl0X2luX2J1ZmZlcjoKIAlyZXR1cm4gcnZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9udnJhbS5jIGIvZHJpdmVycy9jaGFyL252cmFtLmMKaW5kZXggNDAwOGUyYy4uZmRiY2M5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL252cmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL252cmFtLmMKQEAgLTI2NCwxMCArMjY0LDE2IEBACiAJdW5zaWduZWQgY2hhciBjb250ZW50c1tOVlJBTV9CWVRFU107CiAJdW5zaWduZWQgaSA9ICpwcG9zOwogCXVuc2lnbmVkIGNoYXIgKnRtcDsKLQlpbnQgbGVuOwogCi0JbGVuID0gKE5WUkFNX0JZVEVTIC0gaSkgPCBjb3VudCA/IChOVlJBTV9CWVRFUyAtIGkpIDogY291bnQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGNvbnRlbnRzLCBidWYsIGxlbikpCisJaWYgKGkgPj0gTlZSQU1fQllURVMpCisJCXJldHVybiAwOwkvKiBQYXN0IEVPRiAqLworCisJaWYgKGNvdW50ID4gTlZSQU1fQllURVMgLSBpKQorCQljb3VudCA9IE5WUkFNX0JZVEVTIC0gaTsKKwlpZiAoY291bnQgPiBOVlJBTV9CWVRFUykKKwkJcmV0dXJuIC1FRkFVTFQ7CS8qIENhbid0IGhhcHBlbiwgYnV0IHByb3ZlIGl0IHRvIGdjYyAqLworCisJaWYgKGNvcHlfZnJvbV91c2VyKGNvbnRlbnRzLCBidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CkBAIC0yNzUsNyArMjgxLDcgQEAKIAlpZiAoIV9fbnZyYW1fY2hlY2tfY2hlY2tzdW0oKSkKIAkJZ290byBjaGVja3N1bV9lcnI7CiAKLQlmb3IgKHRtcCA9IGNvbnRlbnRzOyBjb3VudC0tID4gMCAmJiBpIDwgTlZSQU1fQllURVM7ICsraSwgKyt0bXApCisJZm9yICh0bXAgPSBjb250ZW50czsgY291bnQtLTsgKytpLCArK3RtcCkKIAkJX19udnJhbV93cml0ZV9ieXRlKCp0bXAsIGkpOwogCiAJX19udnJhbV9zZXRfY2hlY2tzdW0oKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCBkY2QwODYzNS4uODI1ODk4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTI0NSwxMiArMTI0NSw4IEBACiAJaWYgKHV1aWRbOF0gPT0gMCkKIAkJZ2VuZXJhdGVfcmFuZG9tX3V1aWQodXVpZCk7CiAKLQlzcHJpbnRmKGJ1ZiwgIiUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtIgotCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKLQkJdXVpZFswXSwgIHV1aWRbMV0sICB1dWlkWzJdLCAgdXVpZFszXSwKLQkJdXVpZFs0XSwgIHV1aWRbNV0sICB1dWlkWzZdLCAgdXVpZFs3XSwKLQkJdXVpZFs4XSwgIHV1aWRbOV0sICB1dWlkWzEwXSwgdXVpZFsxMV0sCi0JCXV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1aWRbMTVdKTsKKwlzcHJpbnRmKGJ1ZiwgIiVwVSIsIHV1aWQpOworCiAJZmFrZV90YWJsZS5kYXRhID0gYnVmOwogCWZha2VfdGFibGUubWF4bGVuID0gc2l6ZW9mKGJ1Zik7CiAKQEAgLTEzMTAsNyArMTMwNiw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIFJhbmRvbSBmdW50aW9ucyBmb3IgbmV0d29ya2luZworICogUmFuZG9tIGZ1bmN0aW9ucyBmb3IgbmV0d29ya2luZwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IDhjMjYyYWFmNy4uMDc5ODc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJaW50IGNhbWVyYV9wb3dlcjsKIAlpbnQgYmx1ZXRvb3RoX3Bvd2VyOwogCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVjdCBrZmlmbyAqZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gZmlmbzsKIAlzcGlubG9ja190IGZpZm9fbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmaWZvX3Byb2NfbGlzdDsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmlmb19hc3luYzsKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2pvZ19kZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfa2V5X2RldjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5wdXRfd29yazsKLQlzdHJ1Y3Qga2ZpZm8gKmlucHV0X2ZpZm87CisJc3RydWN0IGtmaWZvIGlucHV0X2ZpZm87CiAJc3BpbmxvY2tfdCBpbnB1dF9maWZvX2xvY2s7CiB9IHNvbnlwaV9kZXZpY2U7CiAKQEAgLTc3Nyw4ICs3NzcsOSBAQAogewogCXN0cnVjdCBzb255cGlfa2V5cHJlc3Mga3A7CiAKLQl3aGlsZSAoa2ZpZm9fZ2V0KHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikma3AsCi0JCQkgc2l6ZW9mKGtwKSkgPT0gc2l6ZW9mKGtwKSkgeworCXdoaWxlIChrZmlmb19vdXRfbG9ja2VkKCZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8sICh1bnNpZ25lZCBjaGFyICopJmtwLAorCQkJIHNpemVvZihrcCksICZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm9fbG9jaykKKwkJCT09IHNpemVvZihrcCkpIHsKIAkJbXNsZWVwKDEwKTsKIAkJaW5wdXRfcmVwb3J0X2tleShrcC5kZXYsIGtwLmtleSwgMCk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKQEAgLTgyNyw4ICs4MjgsOSBAQAogCWlmIChrcC5kZXYpIHsKIAkJaW5wdXRfcmVwb3J0X2tleShrcC5kZXYsIGtwLmtleSwgMSk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKLQkJa2ZpZm9fcHV0KHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywKLQkJCSAgKHVuc2lnbmVkIGNoYXIgKikma3AsIHNpemVvZihrcCkpOworCQlrZmlmb19pbl9sb2NrZWQoJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywKKwkJCSh1bnNpZ25lZCBjaGFyICopJmtwLCBzaXplb2Yoa3ApLAorCQkJJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmb19sb2NrKTsKIAkJc2NoZWR1bGVfd29yaygmc29ueXBpX2RldmljZS5pbnB1dF93b3JrKTsKIAl9CiB9CkBAIC04ODAsNyArODgyLDggQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChzb255cGlfYWNwaV9kZXZpY2UsIDEsIGV2ZW50KTsKICNlbmRpZgogCi0Ja2ZpZm9fcHV0KHNvbnlwaV9kZXZpY2UuZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmZXZlbnQsIHNpemVvZihldmVudCkpOworCWtmaWZvX2luX2xvY2tlZCgmc29ueXBpX2RldmljZS5maWZvLCAodW5zaWduZWQgY2hhciAqKSZldmVudCwKKwkJCXNpemVvZihldmVudCksICZzb255cGlfZGV2aWNlLmZpZm9fbG9jayk7CiAJa2lsbF9mYXN5bmMoJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYywgU0lHSU8sIFBPTExfSU4pOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc29ueXBpX2RldmljZS5maWZvX3Byb2NfbGlzdCk7CiAKQEAgLTkwNiw3ICs5MDksNyBAQAogCW11dGV4X2xvY2soJnNvbnlwaV9kZXZpY2UubG9jayk7CiAJLyogRmx1c2ggaW5wdXQgcXVldWUgb24gZmlyc3Qgb3BlbiAqLwogCWlmICghc29ueXBpX2RldmljZS5vcGVuX2NvdW50KQotCQlrZmlmb19yZXNldChzb255cGlfZGV2aWNlLmZpZm8pOworCQlrZmlmb19yZXNldCgmc29ueXBpX2RldmljZS5maWZvKTsKIAlzb255cGlfZGV2aWNlLm9wZW5fY291bnQrKzsKIAltdXRleF91bmxvY2soJnNvbnlwaV9kZXZpY2UubG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtOTE5LDE3ICs5MjIsMTggQEAKIAlzc2l6ZV90IHJldDsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlpZiAoKGtmaWZvX2xlbihzb255cGlfZGV2aWNlLmZpZm8pID09IDApICYmCisJaWYgKChrZmlmb19sZW4oJnNvbnlwaV9kZXZpY2UuZmlmbykgPT0gMCkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc29ueXBpX2RldmljZS5maWZvX3Byb2NfbGlzdCwKLQkJCQkgICAgICAga2ZpZm9fbGVuKHNvbnlwaV9kZXZpY2UuZmlmbykgIT0gMCk7CisJCQkJICAgICAgIGtmaWZvX2xlbigmc29ueXBpX2RldmljZS5maWZvKSAhPSAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd2hpbGUgKHJldCA8IGNvdW50ICYmCi0JICAgICAgIChrZmlmb19nZXQoc29ueXBpX2RldmljZS5maWZvLCAmYywgc2l6ZW9mKGMpKSA9PSBzaXplb2YoYykpKSB7CisJICAgICAgIChrZmlmb19vdXRfbG9ja2VkKCZzb255cGlfZGV2aWNlLmZpZm8sICZjLCBzaXplb2YoYyksCisJCQkJICZzb255cGlfZGV2aWNlLmZpZm9fbG9jaykgPT0gc2l6ZW9mKGMpKSkgewogCQlpZiAocHV0X3VzZXIoYywgYnVmKyspKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldCsrOwpAQCAtOTQ2LDcgKzk1MCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNvbnlwaV9taXNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJcG9sbF93YWl0KGZpbGUsICZzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0LCB3YWl0KTsKLQlpZiAoa2ZpZm9fbGVuKHNvbnlwaV9kZXZpY2UuZmlmbykpCisJaWYgKGtmaWZvX2xlbigmc29ueXBpX2RldmljZS5maWZvKSkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzEzLDExICsxMzE3LDEwIEBACiAJCQkiaHR0cDovL3d3dy5saW51eC5pdC9+bWFsYXR0aWEvd2lraS9pbmRleC5waHAvU29ueV9kcml2ZXJzXG4iKTsKIAogCXNwaW5fbG9ja19pbml0KCZzb255cGlfZGV2aWNlLmZpZm9fbG9jayk7Ci0Jc29ueXBpX2RldmljZS5maWZvID0ga2ZpZm9fYWxsb2MoU09OWVBJX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJCQkgJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHNvbnlwaV9kZXZpY2UuZmlmbykpIHsKKwllcnJvciA9IGtmaWZvX2FsbG9jKCZzb255cGlfZGV2aWNlLmZpZm8sIFNPTllQSV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic29ueXBpOiBrZmlmb19hbGxvYyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihzb255cGlfZGV2aWNlLmZpZm8pOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc29ueXBpX2RldmljZS5maWZvX3Byb2NfbGlzdCk7CkBAIC0xMzkzLDEyICsxMzk2LDEwIEBACiAJCX0KIAogCQlzcGluX2xvY2tfaW5pdCgmc29ueXBpX2RldmljZS5pbnB1dF9maWZvX2xvY2spOwotCQlzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8gPQotCQkJa2ZpZm9fYWxsb2MoU09OWVBJX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAmc29ueXBpX2RldmljZS5pbnB1dF9maWZvX2xvY2spOwotCQlpZiAoSVNfRVJSKHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbykpIHsKKwkJZXJyb3IgPSBrZmlmb19hbGxvYygmc29ueXBpX2RldmljZS5pbnB1dF9maWZvLCBTT05ZUElfQlVGX1NJWkUsCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChlcnJvcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzb255cGk6IGtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCQllcnJvciA9IFBUUl9FUlIoc29ueXBpX2RldmljZS5pbnB1dF9maWZvKTsKIAkJCWdvdG8gZXJyX2lucGRldl91bnJlZ2lzdGVyOwogCQl9CiAKQEAgLTE0MjMsNyArMTQyNCw3IEBACiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOwogIGVycl9wdXRfcGNpZGV2OgogCXBjaV9kZXZfcHV0KHBjaWRldik7Ci0Ja2ZpZm9fZnJlZShzb255cGlfZGV2aWNlLmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9kZXZpY2UuZmlmbyk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xNDM4LDcgKzE0MzksNyBAQAogCWlmICh1c2VpbnB1dCkgewogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzb255cGlfZGV2aWNlLmlucHV0X2tleV9kZXYpOwogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzb255cGlfZGV2aWNlLmlucHV0X2pvZ19kZXYpOwotCQlrZmlmb19mcmVlKHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbyk7CisJCWtmaWZvX2ZyZWUoJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbyk7CiAJfQogCiAJbWlzY19kZXJlZ2lzdGVyKCZzb255cGlfbWlzY19kZXZpY2UpOwpAQCAtMTQ1MSw3ICsxNDUyLDcgQEAKIAkJcGNpX2Rldl9wdXQoc29ueXBpX2RldmljZS5kZXYpOwogCX0KIAotCWtmaWZvX2ZyZWUoc29ueXBpX2RldmljZS5maWZvKTsKKwlrZmlmb19mcmVlKCZzb255cGlfZGV2aWNlLmZpZm8pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDQ0MjAzZmYuLjFhZTJkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0zMzksNyArMzM5LDcgQEAKIAogc3RhdGljIHZvaWQgbW9vbV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7Ci0Jb3V0X29mX21lbW9yeShub2RlX3pvbmVsaXN0KDAsIEdGUF9LRVJORUwpLCBHRlBfS0VSTkVMLCAwKTsKKwlvdXRfb2ZfbWVtb3J5KG5vZGVfem9uZWxpc3QoMCwgR0ZQX0tFUk5FTCksIEdGUF9LRVJORUwsIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgREVDTEFSRV9XT1JLKG1vb21fd29yaywgbW9vbV9jYWxsYmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggNjg0ZjBlMC4uZjE1ZGY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtNTE2LDcgKzUxNiw2IEBACiAJLyogaW51c2VfZmlscHMgaXMgcHJvdGVjdGVkIGJ5IHRoZSBzaW5nbGUga2VybmVsIGxvY2sgKi8KIAlsb2NrX2tlcm5lbCgpOwogCWNoZWNrX3R0eV9jb3VudCh0dHksICJkb190dHlfaGFuZ3VwIik7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJZmlsZV9saXN0X2xvY2soKTsKIAkvKiBUaGlzIGJyZWFrcyBmb3IgZmlsZSBoYW5kbGVzIGJlaW5nIHNlbnQgb3ZlciBBRl9VTklYIHNvY2tldHMgPyAqLwpAQCAtNTMxLDcgKzUzMCw2IEBACiAJfQogCWZpbGVfbGlzdF91bmxvY2soKTsKIAotCWxvY2tfa2VybmVsKCk7CiAJdHR5X2xkaXNjX2hhbmd1cCh0dHkpOwogCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggMWUzZDcyOC4uNTBmYWExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTE2NCw2ICsxNjQsOSBAQAogaW50IGdsb2JhbF9jdXJzb3JfZGVmYXVsdCA9IC0xOwogbW9kdWxlX3BhcmFtKGdsb2JhbF9jdXJzb3JfZGVmYXVsdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiAKK3N0YXRpYyBpbnQgY3VyX2RlZmF1bHQgPSBDVVJfREVGQVVMVDsKK21vZHVsZV9wYXJhbShjdXJfZGVmYXVsdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisKIC8qCiAgKiBpZ25vcmVfcG9rZTogZG9uJ3QgdW5ibGFuayB0aGUgc2NyZWVuIHdoZW4gdGhpbmdzIGFyZSB0eXBlZC4gIFRoaXMgaXMKICAqIG1haW5seSBmb3IgdGhlIHByaXZhY3kgb2YgYnJhaWxsZSB0ZXJtaW5hbCB1c2Vycy4KQEAgLTE4NCwxMiArMTg3LDEwIEBACiAgKiBmZ19jb25zb2xlIGlzIHRoZSBjdXJyZW50IHZpcnR1YWwgY29uc29sZSwKICAqIGxhc3RfY29uc29sZSBpcyB0aGUgbGFzdCB1c2VkIG9uZSwKICAqIHdhbnRfY29uc29sZSBpcyB0aGUgY29uc29sZSB3ZSB3YW50IHRvIHN3aXRjaCB0bywKLSAqIGttc2dfcmVkaXJlY3QgaXMgdGhlIGNvbnNvbGUgZm9yIGtlcm5lbCBtZXNzYWdlcywKICAqLwogaW50IGZnX2NvbnNvbGU7CiBpbnQgbGFzdF9jb25zb2xlOwogaW50IHdhbnRfY29uc29sZSA9IC0xOwotaW50IGttc2dfcmVkaXJlY3Q7CiAKIC8qCiAgKiBGb3IgZWFjaCBleGlzdGluZyBkaXNwbGF5LCB3ZSBoYXZlIGEgcG9pbnRlciB0byBjb25zb2xlIGN1cnJlbnRseSB2aXNpYmxlCkBAIC0xNjM4LDcgKzE2MzksNyBAQAogCS8qIGRvIG5vdCBkbyBzZXRfbGVkcyBoZXJlIGJlY2F1c2UgdGhpcyBjYXVzZXMgYW4gZW5kbGVzcyB0YXNrbGV0IGxvb3AKIAkgICB3aGVuIHRoZSBrZXlib2FyZCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCB5ZXQgKi8KIAotCXZjLT52Y19jdXJzb3JfdHlwZSA9IENVUl9ERUZBVUxUOworCXZjLT52Y19jdXJzb3JfdHlwZSA9IGN1cl9kZWZhdWx0OwogCXZjLT52Y19jb21wbGVtZW50X21hc2sgPSB2Yy0+dmNfc19jb21wbGVtZW50X21hc2s7CiAKIAlkZWZhdWx0X2F0dHIodmMpOwpAQCAtMTg0MCw3ICsxODQxLDcgQEAKIAkJCQlpZiAodmMtPnZjX3BhclswXSkKIAkJCQkJdmMtPnZjX2N1cnNvcl90eXBlID0gdmMtPnZjX3BhclswXSB8ICh2Yy0+dmNfcGFyWzFdIDw8IDgpIHwgKHZjLT52Y19wYXJbMl0gPDwgMTYpOwogCQkJCWVsc2UKLQkJCQkJdmMtPnZjX2N1cnNvcl90eXBlID0gQ1VSX0RFRkFVTFQ7CisJCQkJCXZjLT52Y19jdXJzb3JfdHlwZSA9IGN1cl9kZWZhdWx0OwogCQkJCXJldHVybjsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjQzNCw2ICsyNDM1LDM3IEBACiAKICNpZmRlZiBDT05GSUdfVlRfQ09OU09MRQogCisvKioKKyAqIHZ0X2ttc2dfcmVkaXJlY3QoKSAtIFNldHMvZ2V0cyB0aGUga2VybmVsIG1lc3NhZ2UgY29uc29sZQorICogQG5ldzoJVGhlIG5ldyB2aXJ0dWFsIHRlcm1pbmFsIG51bWJlciBvciAtMSBpZiB0aGUgY29uc29sZSBzaG91bGQgc3RheQorICogCQl1bmNoYW5nZWQKKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUga2VybmVsIG1lc3NhZ2VzIGFyZSBhbHdheXMgcHJpbnRlZCBvbiB0aGUgY3VycmVudCB2aXJ0dWFsCisgKiBjb25zb2xlLiBIb3dldmVyLCB0aGUgdXNlciBtYXkgbW9kaWZ5IHRoYXQgZGVmYXVsdCB3aXRoIHRoZQorICogVElPQ0xfU0VUS01TR1JFRElSRUNUIGlvY3RsIGNhbGwuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBrZXJuZWwgbWVzc2FnZSBjb25zb2xlIHRvIGJlIEBuZXcuIEl0IHJldHVybnMgdGhlIG9sZAorICogdmlydHVhbCBjb25zb2xlIG51bWJlci4gVGhlIHZpcnR1YWwgdGVybWluYWwgbnVtYmVyIDAgKGJvdGggYXMgcGFyYW1ldGVyIGFuZAorICogcmV0dXJuIHZhbHVlKSBtZWFucyBubyByZWRpcmVjdGlvbiAoaS5lLiBhbHdheXMgcHJpbnRlZCBvbiB0aGUgY3VycmVudGx5CisgKiBhY3RpdmUgY29uc29sZSkuCisgKgorICogVGhlIHBhcmFtZXRlciAtMSBtZWFucyB0aGF0IG9ubHkgdGhlIGN1cnJlbnQgY29uc29sZSBpcyByZXR1cm5lZCwgYnV0IHRoZQorICogdmFsdWUgaXMgbm90IG1vZGlmaWVkLiBZb3UgbWF5IHVzZSB0aGUgbWFjcm8gdnRfZ2V0X2ttc2dfcmVkaXJlY3QoKSBpbiB0aGF0CisgKiBjYXNlIHRvIG1ha2UgdGhlIGNvZGUgbW9yZSB1bmRlcnN0YW5kYWJsZS4KKyAqCisgKiBXaGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aG91dCBDT05GSUdfVlRfQ09OU09MRSwgdGhpcyBmdW5jdGlvbiBpZ25vcmVzCisgKiB0aGUgcGFyYW1ldGVyIGFuZCBhbHdheXMgcmV0dXJucyAwLgorICovCitpbnQgdnRfa21zZ19yZWRpcmVjdChpbnQgbmV3KQoreworCXN0YXRpYyBpbnQga21zZ19jb247CisKKwlpZiAobmV3ICE9IC0xKQorCQlyZXR1cm4geGNoZygma21zZ19jb24sIG5ldyk7CisJZWxzZQorCQlyZXR1cm4ga21zZ19jb247Cit9CisKIC8qCiAgKglDb25zb2xlIG9uIHZpcnR1YWwgdGVybWluYWwKICAqCkBAIC0yNDQ4LDYgKzI0ODAsNyBAQAogCWNvbnN0IHVzaG9ydCAqc3RhcnQ7CiAJdXNob3J0IGNudCA9IDA7CiAJdXNob3J0IG15eDsKKwlpbnQga21zZ19jb25zb2xlOwogCiAJLyogY29uc29sZSBidXN5IG9yIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KIAlpZiAoIXByaW50YWJsZSkKQEAgLTI0NTUsOCArMjQ4OCw5IEBACiAJaWYgKCFzcGluX3RyeWxvY2soJnByaW50aW5nX2xvY2spKQogCQlyZXR1cm47CiAKLQlpZiAoa21zZ19yZWRpcmVjdCAmJiB2Y19jb25zX2FsbG9jYXRlZChrbXNnX3JlZGlyZWN0IC0gMSkpCi0JCXZjID0gdmNfY29uc1trbXNnX3JlZGlyZWN0IC0gMV0uZDsKKwlrbXNnX2NvbnNvbGUgPSB2dF9nZXRfa21zZ19yZWRpcmVjdCgpOworCWlmIChrbXNnX2NvbnNvbGUgJiYgdmNfY29uc19hbGxvY2F0ZWQoa21zZ19jb25zb2xlIC0gMSkpCisJCXZjID0gdmNfY29uc1trbXNnX2NvbnNvbGUgLSAxXS5kOwogCiAJLyogcmVhZCBgeCcgb25seSBhZnRlciBzZXR0aW5nIGN1cnJjb25zIHByb3Blcmx5IChvdGhlcndpc2UKIAkgICB0aGUgYHgnIG1hY3JvIHdpbGwgcmVhZCB0aGUgeCBvZiB0aGUgZm9yZWdyb3VuZCBjb25zb2xlKS4gKi8KQEAgLTI2MTMsNyArMjY0Nyw3IEBACiAJCQlyZXQgPSBzZXRfdmVzYV9ibGFua2luZyhwKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX0dFVEtNU0dSRURJUkVDVDoKLQkJCWRhdGEgPSBrbXNnX3JlZGlyZWN0OworCQkJZGF0YSA9IHZ0X2dldF9rbXNnX3JlZGlyZWN0KCk7CiAJCQlyZXQgPSBfX3B1dF91c2VyKGRhdGEsIHApOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfU0VUS01TR1JFRElSRUNUOgpAQCAtMjYyMyw3ICsyNjU3LDcgQEAKIAkJCQlpZiAoZ2V0X3VzZXIoZGF0YSwgcCsxKSkKIAkJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQllbHNlCi0JCQkJCWttc2dfcmVkaXJlY3QgPSBkYXRhOworCQkJCQl2dF9rbXNnX3JlZGlyZWN0KGRhdGEpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfR0VURkdDT05TT0xFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZjcyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgQ1M1NTM1X0NMT0NLX0VWRU5UX1NSQworCXRyaXN0YXRlICJDUzU1MzUvQ1M1NTM2IGhpZ2gtcmVzIHRpbWVyIChNRkdQVCkgZXZlbnRzIgorCWRlcGVuZHMgb24gR0VORVJJQ19USU1FICYmIEdFTkVSSUNfQ0xPQ0tFVkVOVFMgJiYgQ1M1NTM1X01GR1BUCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjbG9jayBldmVudCBzb3VyY2UgYmFzZWQgb24gdGhlIE1GR1BUCisJICB0aW1lcihzKSBpbiB0aGUgQ1M1NTM1IGFuZCBDUzU1MzYgY29tcGFuaW9uIGNoaXBzLgorCSAgTUZHUFRzIGhhdmUgYSBiZXR0ZXIgcmVzb2x1dGlvbiBhbmQgbWF4IGludGVydmFsIHRoYW4gdGhlCisJICBnZW5lcmljIFBJVCwgYW5kIGFyZSBzdWl0YWJsZSBmb3IgdXNlIGFzIGhpZ2gtcmVzIHRpbWVycy4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggZWVmMjE2Zi4uYmU2MWVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogb2JqLSQoQ09ORklHX1g4Nl9DWUNMT05FX1RJTUVSKQkrPSBjeWNsb25lLm8KIG9iai0kKENPTkZJR19YODZfUE1fVElNRVIpCSs9IGFjcGlfcG0ubwogb2JqLSQoQ09ORklHX1NDeDIwMEhSX1RJTUVSKQkrPSBzY3gyMDBfaHJ0Lm8KK29iai0kKENPTkZJR19DUzU1MzVfQ0xPQ0tfRVZFTlRfU1JDKQkrPSBjczU1MzUtY2xvY2tldnQubwogb2JqLSQoQ09ORklHX1NIX1RJTUVSX0NNVCkJKz0gc2hfY210Lm8KIG9iai0kKENPTkZJR19TSF9USU1FUl9NVFUyKQkrPSBzaF9tdHUyLm8KIG9iai0kKENPTkZJR19TSF9USU1FUl9UTVUpCSs9IHNoX3RtdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2NzNTUzNS1jbG9ja2V2dC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2QyMGZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9jczU1MzUtY2xvY2tldnQuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENsb2NrIGV2ZW50IGRyaXZlciBmb3IgdGhlIENTNTUzNS9DUzU1MzYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyAgQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGRlYmlhbi5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBjb2xsYWJvcmEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgTUZHUFRzIGFyZSBkb2N1bWVudGVkIGluIEFNRCBHZW9kZSBDUzU1MzYgQ29tcGFuaW9uIERldmljZSBEYXRhIEJvb2suCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2RlZmluZSBEUlZfTkFNRSAiY3M1NTM1LWNsb2NrZXZ0IgorCitzdGF0aWMgaW50IHRpbWVyX2lycSA9IENPTkZJR19DUzU1MzVfTUZHUFRfREVGQVVMVF9JUlE7Cittb2R1bGVfcGFyYW1fbmFtZWQoaXJxLCB0aW1lcl9pcnEsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIldoaWNoIElSUSB0byB1c2UgZm9yIHRoZSBjbG9jayBzb3VyY2UgTUZHUFQgdGlja3MuIik7CisKKy8qCisgKiBXZSBhcmUgdXNpbmcgdGhlIDMyLjc2OGtIeiBpbnB1dCBjbG9jayAtIGl0J3MgdGhlIG9ubHkgb25lIHRoYXQgaGFzIHRoZQorICogcmFuZ2VzIHdlIGZpbmQgZGVzaXJhYmxlLiAgVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgc3VpdGFibGUKKyAqIGRpdmlzb3JzIGFuZCB0aGUgYXNzb2NpYXRlZCBIeiwgbWluaW11bSBpbnRlcnZhbCBhbmQgdGhlIG1heGltdW0gaW50ZXJ2YWw6CisgKgorICogIERpdmlzb3IgICBIeiAgICAgIE1pbiBEZWx0YSAocykgIE1heCBEZWx0YSAocykKKyAqICAgMSAgICAgICAgMzI3NjggICAuMDAwNDg4MjgxMjUgICAgICAyLjAwMAorICogICAyICAgICAgICAxNjM4NCAgIC4wMDA5NzY1NjI1ICAgICAgIDQuMDAwCisgKiAgIDQgICAgICAgICA4MTkyICAgLjAwMTk1MzEyNSAgICAgICAgOC4wMDAKKyAqICAgOCAgICAgICAgIDQwOTYgICAuMDAzOTA2MjUgICAgICAgIDE2LjAwMAorICogICAxNiAgICAgICAgMjA0OCAgIC4wMDc4MTI1ICAgICAgICAgMzIuMDAwCisgKiAgIDMyICAgICAgICAxMDI0ICAgLjAxNTYyNSAgICAgICAgICA2NC4wMDAKKyAqICAgNjQgICAgICAgICA1MTIgICAuMDMxMjUgICAgICAgICAgMTI4LjAwMAorICogIDEyOCAgICAgICAgIDI1NiAgIC4wNjI1ICAgICAgICAgICAyNTYuMDAwCisgKiAgMjU2ICAgICAgICAgMTI4ICAgLjEyNSAgICAgICAgICAgIDUxMi4wMDAKKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUzNV90aWNrX21vZGUgPSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjsKK3N0YXRpYyBzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICpjczU1MzVfZXZlbnRfY2xvY2s7CisKKy8qIFNlbGVjdGVkIGZyb20gdGhlIHRhYmxlIGFib3ZlICovCisKKyNkZWZpbmUgTUZHUFRfRElWSVNPUiAxNgorI2RlZmluZSBNRkdQVF9TQ0FMRSAgNCAgICAgLyogZGl2aXNvciA9IDJeKHNjYWxlKSAqLworI2RlZmluZSBNRkdQVF9IWiAgKDMyNzY4IC8gTUZHUFRfRElWSVNPUikKKyNkZWZpbmUgTUZHUFRfUEVSSU9ESUMgKE1GR1BUX0haIC8gSFopCisKKy8qCisgKiBUaGUgTUZQR1QgdGltZXJzIG9uIHRoZSBDUzU1MzYgcHJvdmlkZSB1cyB3aXRoIHN1aXRhYmxlIHRpbWVycyB0byB1c2UKKyAqIGFzIGNsb2NrIGV2ZW50IHNvdXJjZXMgLSBub3QgYXMgZ29vZCBhcyBhIEhQRVQgb3IgQVBJQywgYnV0IGNlcnRhaW5seQorICogYmV0dGVyIHRoYW4gdGhlIFBJVC4gIFRoaXMgaXNuJ3QgYSBnZW5lcmFsIHB1cnBvc2UgTUZHUFQgZHJpdmVyLCBidXQKKyAqIGEgc2ltcGxpZmllZCBvbmUgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIGFjdCBhcyBhIGNsb2NrIGV2ZW50IHNvdXJjZS4KKyAqIEZvciBmdWxsIGRldGFpbHMgYWJvdXQgdGhlIE1GR1BULCBwbGVhc2UgY29uc3VsdCB0aGUgQ1M1NTM2IGRhdGEgc2hlZXQuCisgKi8KKworc3RhdGljIHZvaWQgZGlzYWJsZV90aW1lcihzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICp0aW1lcikKK3sKKwkvKiBhdm9pZCByYWNlcyBieSBjbGVhcmluZyBDTVAxIGFuZCBDTVAyIHVuY29uZGl0aW9uYWxseSAqLworCWNzNTUzNV9tZmdwdF93cml0ZSh0aW1lciwgTUZHUFRfUkVHX1NFVFVQLAorCQkJKHVpbnQxNl90KSB+TUZHUFRfU0VUVVBfQ05URU4gfCBNRkdQVF9TRVRVUF9DTVAxIHwKKwkJCQlNRkdQVF9TRVRVUF9DTVAyKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfdGltZXIoc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqdGltZXIsIHVpbnQxNl90IGRlbHRhKQoreworCWNzNTUzNV9tZmdwdF93cml0ZSh0aW1lciwgTUZHUFRfUkVHX0NNUDIsIGRlbHRhKTsKKwljczU1MzVfbWZncHRfd3JpdGUodGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKKworCWNzNTUzNV9tZmdwdF93cml0ZSh0aW1lciwgTUZHUFRfUkVHX1NFVFVQLAorCQkJTUZHUFRfU0VUVVBfQ05URU4gfCBNRkdQVF9TRVRVUF9DTVAyKTsKK30KKworc3RhdGljIHZvaWQgbWZncHRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlkaXNhYmxlX3RpbWVyKGNzNTUzNV9ldmVudF9jbG9jayk7CisKKwlpZiAobW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQykKKwkJc3RhcnRfdGltZXIoY3M1NTM1X2V2ZW50X2Nsb2NrLCBNRkdQVF9QRVJJT0RJQyk7CisKKwljczU1MzVfdGlja19tb2RlID0gbW9kZTsKK30KKworc3RhdGljIGludCBtZmdwdF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzdGFydF90aW1lcihjczU1MzVfZXZlbnRfY2xvY2ssIGRlbHRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY3M1NTM1X2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9tb2RlID0gbWZncHRfc2V0X21vZGUsCisJLnNldF9uZXh0X2V2ZW50ID0gbWZncHRfbmV4dF9ldmVudCwKKwkucmF0aW5nID0gMjUwLAorCS5jcHVtYXNrID0gY3B1X2FsbF9tYXNrLAorCS5zaGlmdCA9IDMyCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbWZncHRfdGljayhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdWludDE2X3QgdmFsID0gY3M1NTM1X21mZ3B0X3JlYWQoY3M1NTM1X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfU0VUVVApOworCisJLyogU2VlIGlmIHRoZSBpbnRlcnJ1cHQgd2FzIGZvciB1cyAqLworCWlmICghKHZhbCAmIChNRkdQVF9TRVRVUF9TRVRVUCB8IE1GR1BUX1NFVFVQX0NNUDIgfCBNRkdQVF9TRVRVUF9DTVAxKSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIFR1cm4gb2ZmIHRoZSBjbG9jayAoYW5kIGNsZWFyIHRoZSBldmVudCkgKi8KKwlkaXNhYmxlX3RpbWVyKGNzNTUzNV9ldmVudF9jbG9jayk7CisKKwlpZiAoY3M1NTM1X3RpY2tfbW9kZSA9PSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTikKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJLyogQ2xlYXIgdGhlIGNvdW50ZXIgKi8KKwljczU1MzVfbWZncHRfd3JpdGUoY3M1NTM1X2V2ZW50X2Nsb2NrLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CisKKwkvKiBSZXN0YXJ0IHRoZSBjbG9jayBpbiBwZXJpb2RpYyBtb2RlICovCisKKwlpZiAoY3M1NTM1X3RpY2tfbW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQykKKwkJY3M1NTM1X21mZ3B0X3dyaXRlKGNzNTUzNV9ldmVudF9jbG9jaywgTUZHUFRfUkVHX1NFVFVQLAorCQkJCU1GR1BUX1NFVFVQX0NOVEVOIHwgTUZHUFRfU0VUVVBfQ01QMik7CisKKwljczU1MzVfY2xvY2tldmVudC5ldmVudF9oYW5kbGVyKCZjczU1MzVfY2xvY2tldmVudCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtZmdwdGlycSAgPSB7CisJLmhhbmRsZXIgPSBtZmdwdF90aWNrLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9USU1FUiwKKwkubmFtZSA9IERSVl9OQU1FLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3M1NTM1X21mZ3B0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICp0aW1lcjsKKwlpbnQgcmV0OworCXVpbnQxNl90IHZhbDsKKworCXRpbWVyID0gY3M1NTM1X21mZ3B0X2FsbG9jX3RpbWVyKE1GR1BUX1RJTUVSX0FOWSwgTUZHUFRfRE9NQUlOX1dPUktJTkcpOworCWlmICghdGltZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IENvdWxkIG5vdCBhbGxvY2F0ZSBNRlBHVCB0aW1lclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwljczU1MzVfZXZlbnRfY2xvY2sgPSB0aW1lcjsKKworCS8qIFNldCB1cCB0aGUgSVJRIG9uIHRoZSBNRkdQVCBzaWRlICovCisJaWYgKGNzNTUzNV9tZmdwdF9zZXR1cF9pcnEodGltZXIsIE1GR1BUX0NNUDIsICZ0aW1lcl9pcnEpKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBDb3VsZCBub3Qgc2V0IHVwIElSUSAlZFxuIiwKKwkJCQl0aW1lcl9pcnEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBBbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUga2VybmVsICovCisJcmV0ID0gc2V0dXBfaXJxKHRpbWVyX2lycSwgJm1mZ3B0aXJxKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBVbmFibGUgdG8gc2V0IHVwIHRoZSBpbnRlcnJ1cHQuXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogU2V0IHRoZSBjbG9jayBzY2FsZSBhbmQgZW5hYmxlIHRoZSBldmVudCBtb2RlIGZvciBDTVAyICovCisJdmFsID0gTUZHUFRfU0NBTEUgfCAoMyA8PCA4KTsKKworCWNzNTUzNV9tZmdwdF93cml0ZShjczU1MzVfZXZlbnRfY2xvY2ssIE1GR1BUX1JFR19TRVRVUCwgdmFsKTsKKworCS8qIFNldCB1cCB0aGUgY2xvY2sgZXZlbnQgKi8KKwljczU1MzVfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKE1GR1BUX0haLCBOU0VDX1BFUl9TRUMsCisJCQljczU1MzVfY2xvY2tldmVudC5zaGlmdCk7CisJY3M1NTM1X2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweEYsCisJCQkmY3M1NTM1X2Nsb2NrZXZlbnQpOworCWNzNTUzNV9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhGRkZFLAorCQkJJmNzNTUzNV9jbG9ja2V2ZW50KTsKKworCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJIjogUmVnaXN0ZXJpbmcgTUZHUFQgdGltZXIgYXMgYSBjbG9jayBldmVudCwgdXNpbmcgSVJRICVkXG4iLAorCQl0aW1lcl9pcnEpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY3M1NTM1X2Nsb2NrZXZlbnQpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwljczU1MzVfbWZncHRfcmVsZWFzZV9pcnEoY3M1NTM1X2V2ZW50X2Nsb2NrLCBNRkdQVF9DTVAyLCAmdGltZXJfaXJxKTsKKwlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogVW5hYmxlIHRvIHNldCB1cCB0aGUgTUZHUFQgY2xvY2sgc291cmNlXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworbW9kdWxlX2luaXQoY3M1NTM1X21mZ3B0X2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAY29sbGFib3JhLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUzU1MzUvQ1M1NTM2IE1GR1BUIGNsb2NrIGV2ZW50IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggZjIwNjY4Yy4uNjdiYzJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC02NCwxNCArNjQsMTQgQEAKICAqIC0gTG9jayBzaG91bGQgbm90IGJlIGhlbGQgYWNyb3NzCiAgKiAgICAgX19jcHVmcmVxX2dvdmVybm9yKGRhdGEsIENQVUZSRVFfR09WX1NUT1ApOwogICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwb2xpY3lfY3B1KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGNwdWZyZXFfcG9saWN5X2NwdSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJ3X3NlbWFwaG9yZSwgY3B1X3BvbGljeV9yd3NlbSk7CiAKICNkZWZpbmUgbG9ja19wb2xpY3lfcndzZW0obW9kZSwgY3B1KQkJCQkJXAogaW50IGxvY2tfcG9saWN5X3J3c2VtXyMjbW9kZQkJCQkJCVwKIChpbnQgY3B1KQkJCQkJCQkJXAogewkJCQkJCQkJCVwKLQlpbnQgcG9saWN5X2NwdSA9IHBlcl9jcHUocG9saWN5X2NwdSwgY3B1KTsJCQlcCisJaW50IHBvbGljeV9jcHUgPSBwZXJfY3B1KGNwdWZyZXFfcG9saWN5X2NwdSwgY3B1KTsJCVwKIAlCVUdfT04ocG9saWN5X2NwdSA9PSAtMSk7CQkJCQlcCiAJZG93bl8jI21vZGUoJnBlcl9jcHUoY3B1X3BvbGljeV9yd3NlbSwgcG9saWN5X2NwdSkpOwkJXAogCWlmICh1bmxpa2VseSghY3B1X29ubGluZShjcHUpKSkgewkJCQlcCkBAIC05MCw3ICs5MCw3IEBACiAKIHZvaWQgdW5sb2NrX3BvbGljeV9yd3NlbV9yZWFkKGludCBjcHUpCiB7Ci0JaW50IHBvbGljeV9jcHUgPSBwZXJfY3B1KHBvbGljeV9jcHUsIGNwdSk7CisJaW50IHBvbGljeV9jcHUgPSBwZXJfY3B1KGNwdWZyZXFfcG9saWN5X2NwdSwgY3B1KTsKIAlCVUdfT04ocG9saWN5X2NwdSA9PSAtMSk7CiAJdXBfcmVhZCgmcGVyX2NwdShjcHVfcG9saWN5X3J3c2VtLCBwb2xpY3lfY3B1KSk7CiB9CkBAIC05OCw3ICs5OCw3IEBACiAKIHZvaWQgdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShpbnQgY3B1KQogewotCWludCBwb2xpY3lfY3B1ID0gcGVyX2NwdShwb2xpY3lfY3B1LCBjcHUpOworCWludCBwb2xpY3lfY3B1ID0gcGVyX2NwdShjcHVmcmVxX3BvbGljeV9jcHUsIGNwdSk7CiAJQlVHX09OKHBvbGljeV9jcHUgPT0gLTEpOwogCXVwX3dyaXRlKCZwZXJfY3B1KGNwdV9wb2xpY3lfcndzZW0sIHBvbGljeV9jcHUpKTsKIH0KQEAgLTgxOCw3ICs4MTgsNyBAQAogCiAJCQkvKiBTZXQgcHJvcGVyIHBvbGljeV9jcHUgKi8KIAkJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKLQkJCXBlcl9jcHUocG9saWN5X2NwdSwgY3B1KSA9IG1hbmFnZWRfcG9saWN5LT5jcHU7CisJCQlwZXJfY3B1KGNwdWZyZXFfcG9saWN5X2NwdSwgY3B1KSA9IG1hbmFnZWRfcG9saWN5LT5jcHU7CiAKIAkJCWlmIChsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpIDwgMCkgewogCQkJCS8qIFNob3VsZCBub3QgZ28gdGhyb3VnaCBwb2xpY3kgdW5sb2NrIHBhdGggKi8KQEAgLTkzMiw3ICs5MzIsNyBAQAogCWlmICghY3B1X29ubGluZShqKSkKIAkJY29udGludWU7CiAJCXBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgaikgPSBwb2xpY3k7Ci0JCXBlcl9jcHUocG9saWN5X2NwdSwgaikgPSBwb2xpY3ktPmNwdTsKKwkJcGVyX2NwdShjcHVmcmVxX3BvbGljeV9jcHUsIGopID0gcG9saWN5LT5jcHU7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIApAQCAtMTAyMCw3ICsxMDIwLDcgQEAKIAljcHVtYXNrX2NvcHkocG9saWN5LT5jcHVzLCBjcHVtYXNrX29mKGNwdSkpOwogCiAJLyogSW5pdGlhbGx5IHNldCBDUFUgaXRzZWxmIGFzIHRoZSBwb2xpY3lfY3B1ICovCi0JcGVyX2NwdShwb2xpY3lfY3B1LCBjcHUpID0gY3B1OworCXBlcl9jcHUoY3B1ZnJlcV9wb2xpY3lfY3B1LCBjcHUpID0gY3B1OwogCXJldCA9IChsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpIDwgMCk7CiAJV0FSTl9PTihyZXQpOwogCkBAIC0yMDAyLDcgKzIwMDIsNyBAQAogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXBlcl9jcHUocG9saWN5X2NwdSwgY3B1KSA9IC0xOworCQlwZXJfY3B1KGNwdWZyZXFfcG9saWN5X2NwdSwgY3B1KSA9IC0xOwogCQlpbml0X3J3c2VtKCZwZXJfY3B1KGNwdV9wb2xpY3lfcndzZW0sIGNwdSkpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKaW5kZXggYTliZDNhMC4uMDU0MzIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldCk7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKiwgc2hvd190YWJsZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICosIGNwdWZyZXFfc2hvd190YWJsZSk7CiAvKioKICAqIHNob3dfYXZhaWxhYmxlX2ZyZXFzIC0gc2hvdyBhdmFpbGFibGUgZnJlcXVlbmNpZXMgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVCiAgKi8KQEAgLTE4NSwxMCArMTg1LDEwIEBACiAJc3NpemVfdCBjb3VudCA9IDA7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZTsKIAotCWlmICghcGVyX2NwdShzaG93X3RhYmxlLCBjcHUpKQorCWlmICghcGVyX2NwdShjcHVmcmVxX3Nob3dfdGFibGUsIGNwdSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdGFibGUgPSBwZXJfY3B1KHNob3dfdGFibGUsIGNwdSk7CisJdGFibGUgPSBwZXJfY3B1KGNwdWZyZXFfc2hvd190YWJsZSwgY3B1KTsKIAogCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJaWYgKHRhYmxlW2ldLmZyZXF1ZW5jeSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCkBAIC0yMTcsMjAgKzIxNywyMCBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUpCiB7CiAJZHByaW50aygic2V0dGluZyBzaG93X3RhYmxlIGZvciBjcHUgJXUgdG8gJXBcbiIsIGNwdSwgdGFibGUpOwotCXBlcl9jcHUoc2hvd190YWJsZSwgY3B1KSA9IHRhYmxlOworCXBlcl9jcHUoY3B1ZnJlcV9zaG93X3RhYmxlLCBjcHUpID0gdGFibGU7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cik7CiAKIHZvaWQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIodW5zaWduZWQgaW50IGNwdSkKIHsKIAlkcHJpbnRrKCJjbGVhcmluZyBzaG93X3RhYmxlIGZvciBjcHUgJXVcbiIsIGNwdSk7Ci0JcGVyX2NwdShzaG93X3RhYmxlLCBjcHUpID0gTlVMTDsKKwlwZXJfY3B1KGNwdWZyZXFfc2hvd190YWJsZSwgY3B1KSA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cik7CiAKIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JcmV0dXJuIHBlcl9jcHUoc2hvd190YWJsZSwgY3B1KTsKKwlyZXR1cm4gcGVyX2NwdShjcHVmcmVxX3Nob3dfdGFibGUsIGNwdSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9sYWRkZXIuYwppbmRleCBhNGJlYzNmLi4xYzFjZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMKQEAgLTY5LDkgKzY5LDYgQEAKIAlpbnQgbGFzdF9yZXNpZGVuY3ksIGxhc3RfaWR4ID0gbGRldi0+bGFzdF9zdGF0ZV9pZHg7CiAJaW50IGxhdGVuY3lfcmVxID0gcG1fcW9zX3JlcXVpcmVtZW50KFBNX1FPU19DUFVfRE1BX0xBVEVOQ1kpOwogCi0JaWYgKHVubGlrZWx5KCFsZGV2KSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBTcGVjaWFsIGNhc2Ugd2hlbiB1c2VyIGhhcyBzZXQgdmVyeSBzdHJpY3QgbGF0ZW5jeSByZXF1aXJlbWVudCAqLwogCWlmICh1bmxpa2VseShsYXRlbmN5X3JlcSA9PSAwKSkgewogCQlsYWRkZXJfZG9fc2VsZWN0aW9uKGxkZXYsIGxhc3RfaWR4LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCmluZGV4IDg0YzUxZTEuLjhjMmYzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwpAQCAtNjQsNyArNjQsNyBAQAogCXUzMiAqRDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3dvcmQgKiwgbGFzdF9jd29yZCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGN3b3JkICosIHBhZXNfbGFzdF9jd29yZCk7CiAKIC8qIFRlbGxzIHdoZXRoZXIgdGhlIEFDRSBpcyBjYXBhYmxlIHRvIGdlbmVyYXRlCiAgICB0aGUgZXh0ZW5kZWQga2V5IGZvciBhIGdpdmVuIGtleV9sZW4uICovCkBAIC0xNTIsOSArMTUyLDkgQEAKIAogb2s6CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCWlmICgmY3R4LT5jd29yZC5lbmNyeXB0ID09IHBlcl9jcHUobGFzdF9jd29yZCwgY3B1KSB8fAotCQkgICAgJmN0eC0+Y3dvcmQuZGVjcnlwdCA9PSBwZXJfY3B1KGxhc3RfY3dvcmQsIGNwdSkpCi0JCQlwZXJfY3B1KGxhc3RfY3dvcmQsIGNwdSkgPSBOVUxMOworCQlpZiAoJmN0eC0+Y3dvcmQuZW5jcnlwdCA9PSBwZXJfY3B1KHBhZXNfbGFzdF9jd29yZCwgY3B1KSB8fAorCQkgICAgJmN0eC0+Y3dvcmQuZGVjcnlwdCA9PSBwZXJfY3B1KHBhZXNfbGFzdF9jd29yZCwgY3B1KSkKKwkJCXBlcl9jcHUocGFlc19sYXN0X2N3b3JkLCBjcHUpID0gTlVMTDsKIAogCXJldHVybiAwOwogfQpAQCAtMTY2LDcgKzE2Niw3IEBACiB7CiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlpZiAoY3dvcmQgIT0gcGVyX2NwdShsYXN0X2N3b3JkLCBjcHUpKQorCWlmIChjd29yZCAhPSBwZXJfY3B1KHBhZXNfbGFzdF9jd29yZCwgY3B1KSkKICNpZm5kZWYgQ09ORklHX1g4Nl82NAogCQlhc20gdm9sYXRpbGUgKCJwdXNoZmw7IHBvcGZsIik7CiAjZWxzZQpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWRsb2NrX3N0b3JlX2N3b3JkKHN0cnVjdCBjd29yZCAqY3dvcmQpCiB7Ci0JcGVyX2NwdShsYXN0X2N3b3JkLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGN3b3JkOworCXBlcl9jcHUocGFlc19sYXN0X2N3b3JkLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGN3b3JkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggZWIxNDBmZi4uZTAyZDc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0xMTEsNiArMTExLDI0IEBACiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBSZW5lc2FzIFN1cGVySCBETUEgY29udHJvbGxlcnMuCiAKK2NvbmZpZyBDT0g5MDEzMTgKKwlib29sICJTVC1Fcmljc3NvbiBDT0g5MDEzMTggRE1BIHN1cHBvcnQiCisJc2VsZWN0IERNQV9FTkdJTkUKKwlkZXBlbmRzIG9uIEFSQ0hfVTMwMAorCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBTVC1Fcmljc3NvbiBDT0ggOTAxIDMxOCBETUEuCisKK2NvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BCisJdHJpc3RhdGUgIkFNQ0MgUFBDNDQwU1BlIEFETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIDQ0MFNQZSB8fCA0NDBTUAorCXNlbGVjdCBETUFfRU5HSU5FCisJc2VsZWN0IEFSQ0hfSEFTX0FTWU5DX1RYX0ZJTkRfQ0hBTk5FTAorCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQU1DQyBQUEM0NDBTUGUgUkFJRCBlbmdpbmVzLgorCitjb25maWcgQVJDSF9IQVNfQVNZTkNfVFhfRklORF9DSEFOTkVMCisJYm9vbAorCiBjb25maWcgRE1BX0VOR0lORQogCWJvb2wKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCBlY2E3MWJhLi44MDcwNTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMTAsMyArMTAsNSBAQAogb2JqLSQoQ09ORklHX01YM19JUFUpICs9IGlwdS8KIG9iai0kKENPTkZJR19UWFg5X0RNQUMpICs9IHR4eDlkbWFjLm8KIG9iai0kKENPTkZJR19TSF9ETUFFKSArPSBzaGRtYS5vCitvYmotJChDT05GSUdfQ09IOTAxMzE4KSArPSBjb2g5MDEzMTgubyBjb2g5MDEzMThfbGxpLm8KK29iai0kKENPTkZJR19BTUNDX1BQQzQ0MFNQRV9BRE1BKSArPSBwcGM0eHgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwppbmRleCBjNTJhYzllLi5mMTUxMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKQEAgLTExODgsNyArMTE4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhdF9kbWFfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdF9kbWFfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZF9ub2lycSA9IGF0X2RtYV9zdXNwZW5kX25vaXJxLAogCS5yZXN1bWVfbm9pcnEgPSBhdF9kbWFfcmVzdW1lX25vaXJxLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5OWNkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCkBAIC0wLDAgKzEsMTMyNSBAQAorLyoKKyAqIGRyaXZlci9kbWEvY29oOTAxMzE4LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBETUEgZHJpdmVyIGZvciBDT0ggOTAxIDMxOAorICogQXV0aG9yOiBQZXIgRnJpZGVuIDxwZXIuZnJpZGVuQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIHByaW50aygpICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4gLyogZXZlcnl0aGluZy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4gLyoga21hbGxvYygpICovCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPG1hY2gvY29oOTAxMzE4Lmg+CisKKyNpbmNsdWRlICJjb2g5MDEzMThfbGxpLmgiCisKKyNkZWZpbmUgQ09IQ18yX0RFVihjb2hjKSAoJmNvaGMtPmNoYW4uZGV2LT5kZXZpY2UpCisKKyNpZmRlZiBWRVJCT1NFX0RFQlVHCisjZGVmaW5lIENPSF9EQkcoeCkgKHsgaWYgKDEpIHg7IDA7IH0pCisjZWxzZQorI2RlZmluZSBDT0hfREJHKHgpICh7IGlmICgwKSB4OyAwOyB9KQorI2VuZGlmCisKK3N0cnVjdCBjb2g5MDEzMThfZGVzYyB7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yIGRlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IHNnX2xlbjsKKwlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqZGF0YTsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CisJaW50IHBlbmRpbmdfaXJxczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IGNvaDkwMTMxOF9iYXNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZTsKKwlzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgcG9vbDsKKwlzdHJ1Y3QgcG93ZXJzYXZlIHBtOworCXN0cnVjdCBkbWFfZGV2aWNlIGRtYV9zbGF2ZTsKKwlzdHJ1Y3QgZG1hX2RldmljZSBkbWFfbWVtY3B5OworCXN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY2hhbnM7CisJc3RydWN0IGNvaDkwMTMxOF9wbGF0Zm9ybSAqcGxhdGZvcm07Cit9OworCitzdHJ1Y3QgY29oOTAxMzE4X2NoYW4geworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgYWxsb2NhdGVkOworCWludCBjb21wbGV0ZWQ7CisJaW50IGlkOworCWludCBzdG9wcGVkOworCisJc3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yazsKKwlzdHJ1Y3QgZG1hX2NoYW4gY2hhbjsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCisJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmU7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWU7CisKKwl1bnNpZ25lZCBsb25nIG5icl9hY3RpdmVfZG9uZTsKKwl1bnNpZ25lZCBsb25nIGJ1c3k7CisJaW50IHBlbmRpbmdfaXJxczsKKworCXN0cnVjdCBjb2g5MDEzMThfYmFzZSAqYmFzZTsKK307CisKK3N0YXRpYyB2b2lkIGNvaDkwMTMxOF9saXN0X3ByaW50KHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYywKKwkJCQkgc3RydWN0IGNvaDkwMTMxOF9sbGkgKmxsaSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqbDsKKwlkbWFfYWRkcl90IGFkZHIgPSAgdmlydF90b19waHlzKGxsaSk7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGFkZHIpIHsKKwkJbCA9IHBoeXNfdG9fdmlydChhZGRyKTsKKwkJZGV2X3ZkYmcoQ09IQ18yX0RFVihjb2hjKSwgImkgJWQsIGxsaSAlcCwgY3RybCAweCV4LCBzcmMgMHgleCIKKwkJCSAiLCBkc3QgMHgleCwgbGluayAweCV4IGxpbmtfdmlydCAweCVwXG4iLAorCQkJIGksIGwsIGwtPmNvbnRyb2wsIGwtPnNyY19hZGRyLCBsLT5kc3RfYWRkciwKKwkJCSBsLT5saW5rX2FkZHIsIHBoeXNfdG9fdmlydChsLT5saW5rX2FkZHIpKTsKKwkJaSsrOworCQlhZGRyID0gbC0+bGlua19hZGRyOworCX0KK30KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCisjZGVmaW5lIENPSDkwMTMxOF9ERUJVR0ZTX0FTU0lHTih4LCB5KSAoeCA9IHkpCisKK3N0YXRpYyBzdHJ1Y3QgY29oOTAxMzE4X2Jhc2UgKmRlYnVnZnNfZG1hX2Jhc2U7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZG1hX2RlbnRyeTsKKworc3RhdGljIGludCBjb2g5MDEzMThfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2g5MDEzMThfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCXU2NCBzdGFydGVkX2NoYW5uZWxzID0gZGVidWdmc19kbWFfYmFzZS0+cG0uc3RhcnRlZF9jaGFubmVsczsKKwlpbnQgcG9vbF9jb3VudCA9IGRlYnVnZnNfZG1hX2Jhc2UtPnBvb2wuZGVidWdmc19wb29sX2NvdW50ZXI7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisJY2hhciAqZGV2X2J1ZjsKKwljaGFyICp0bXA7CisJaW50IGRldl9zaXplOworCisJZGV2X2J1ZiA9IGttYWxsb2MoNCoxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2X2J1ZiA9PSBOVUxMKQorCQlnb3RvIGVycl9rbWFsbG9jOworCXRtcCA9IGRldl9idWY7CisKKwl0bXAgKz0gc3ByaW50Zih0bXAsICJETUEgLS0gZW5hYmxlIGRtYSBjaGFubmVsc1xuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVidWdmc19kbWFfYmFzZS0+cGxhdGZvcm0tPm1heF9jaGFubmVsczsgaSsrKQorCQlpZiAoc3RhcnRlZF9jaGFubmVscyAmICgxIDw8IGkpKQorCQkJdG1wICs9IHNwcmludGYodG1wLCAiY2hhbm5lbCAlZFxuIiwgaSk7CisKKwl0bXAgKz0gc3ByaW50Zih0bXAsICJQb29sIGFsbG9jIG5iciAlZFxuIiwgcG9vbF9jb3VudCk7CisJZGV2X3NpemUgPSB0bXAgIC0gZGV2X2J1ZjsKKworCS8qIE5vIG1vcmUgdG8gcmVhZCBpZiBvZmZzZXQgIT0gMCAqLworCWlmICgqZl9wb3MgPiBkZXZfc2l6ZSkKKwkJZ290byBvdXQ7CisKKwlpZiAoY291bnQgPiBkZXZfc2l6ZSAtICpmX3BvcykKKwkJY291bnQgPSBkZXZfc2l6ZSAtICpmX3BvczsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkZXZfYnVmICsgKmZfcG9zLCBjb3VudCkpCisJCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gY291bnQ7CisJKmZfcG9zICs9IGNvdW50OworCisgb3V0OgorCWtmcmVlKGRldl9idWYpOworCXJldHVybiByZXQ7CisKKyBlcnJfa21hbGxvYzoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29oOTAxMzE4X2RlYnVnZnNfc3RhdHVzX29wZXJhdGlvbnMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNvaDkwMTMxOF9kZWJ1Z2ZzX29wZW4sCisJLnJlYWQJCT0gY29oOTAxMzE4X2RlYnVnZnNfcmVhZCwKK307CisKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9jb2g5MDEzMThfZGVidWdmcyh2b2lkKQoreworCisJZG1hX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZG1hIiwgTlVMTCk7CisKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdHVzIiwKKwkJCQkgICBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgICBkbWFfZGVudHJ5LCBOVUxMLAorCQkJCSAgICZjb2g5MDEzMThfZGVidWdmc19zdGF0dXNfb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2NvaDkwMTMxOF9kZWJ1Z2ZzKHZvaWQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRtYV9kZW50cnkpOworfQorCittb2R1bGVfaW5pdChpbml0X2NvaDkwMTMxOF9kZWJ1Z2ZzKTsKK21vZHVsZV9leGl0KGV4aXRfY29oOTAxMzE4X2RlYnVnZnMpOworI2Vsc2UKKworI2RlZmluZSBDT0g5MDEzMThfREVCVUdGU19BU1NJR04oeCwgeSkKKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqdG9fY29oOTAxMzE4X2NoYW4oc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGNvaDkwMTMxOF9jaGFuLCBjaGFuKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90Citjb2hjX2Rldl9hZGRyKHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYykKK3sKKwlyZXR1cm4gY29oYy0+YmFzZS0+cGxhdGZvcm0tPmNoYW5fY29uZltjb2hjLT5pZF0uZGV2X2FkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNvaDkwMTMxOF9wYXJhbXMgKgorY29oY19jaGFuX3BhcmFtKHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYykKK3sKKwlyZXR1cm4gJmNvaGMtPmJhc2UtPnBsYXRmb3JtLT5jaGFuX2NvbmZbY29oYy0+aWRdLnBhcmFtOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjb2hfZG1hX2NoYW5uZWwgKgorY29oY19jaGFuX2NvbmYoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXJldHVybiAmY29oYy0+YmFzZS0+cGxhdGZvcm0tPmNoYW5fY29uZltjb2hjLT5pZF07Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9wb3dlcnNhdmUoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBvd2Vyc2F2ZSAqcG0gPSAmY29oYy0+YmFzZS0+cG07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG0tPmxvY2ssIGZsYWdzKTsKKworCXBtLT5zdGFydGVkX2NoYW5uZWxzICY9IH4oMVVMTCA8PCBjb2hjLT5pZCk7CisKKwlpZiAoIXBtLT5zdGFydGVkX2NoYW5uZWxzKSB7CisJCS8qIERNQSBubyBsb25nZXIgaW50ZW5kcyB0byBhY2Nlc3MgbWVtb3J5ICovCisJCWNvaGMtPmJhc2UtPnBsYXRmb3JtLT5hY2Nlc3NfbWVtb3J5X3N0YXRlKGNvaGMtPmJhc2UtPmRldiwKKwkJCQkJCQkgIGZhbHNlKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbS0+bG9jaywgZmxhZ3MpOworfQorc3RhdGljIHZvaWQgZGlzYWJsZV9wb3dlcnNhdmUoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBvd2Vyc2F2ZSAqcG0gPSAmY29oYy0+YmFzZS0+cG07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG0tPmxvY2ssIGZsYWdzKTsKKworCWlmICghcG0tPnN0YXJ0ZWRfY2hhbm5lbHMpIHsKKwkJLyogRE1BIGludGVuZHMgdG8gYWNjZXNzIG1lbW9yeSAqLworCQljb2hjLT5iYXNlLT5wbGF0Zm9ybS0+YWNjZXNzX21lbW9yeV9zdGF0ZShjb2hjLT5iYXNlLT5kZXYsCisJCQkJCQkJICB0cnVlKTsKKwl9CisKKwlwbS0+c3RhcnRlZF9jaGFubmVscyB8PSAoMVVMTCA8PCBjb2hjLT5pZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjb2g5MDEzMThfc2V0X2N0cmwoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjLCB1MzIgY29udHJvbCkKK3sKKwlpbnQgY2hhbm5lbCA9IGNvaGMtPmlkOworCXZvaWQgX19pb21lbSAqdmlydGJhc2UgPSBjb2hjLT5iYXNlLT52aXJ0YmFzZTsKKworCXdyaXRlbChjb250cm9sLAorCSAgICAgICB2aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9DVFJMICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0NUUkxfU1BBQ0lORyAqIGNoYW5uZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjb2g5MDEzMThfc2V0X2NvbmYoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjLCB1MzIgY29uZikKK3sKKwlpbnQgY2hhbm5lbCA9IGNvaGMtPmlkOworCXZvaWQgX19pb21lbSAqdmlydGJhc2UgPSBjb2hjLT5iYXNlLT52aXJ0YmFzZTsKKworCXdyaXRlbChjb25mLAorCSAgICAgICB2aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9DRkcgKworCSAgICAgICBDT0g5MDEzMThfQ1hfQ0ZHX1NQQUNJTkcqY2hhbm5lbCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBjb2g5MDEzMThfc3RhcnQoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXUzMiB2YWw7CisJaW50IGNoYW5uZWwgPSBjb2hjLT5pZDsKKwl2b2lkIF9faW9tZW0gKnZpcnRiYXNlID0gY29oYy0+YmFzZS0+dmlydGJhc2U7CisKKwlkaXNhYmxlX3Bvd2Vyc2F2ZShjb2hjKTsKKworCXZhbCA9IHJlYWRsKHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX0NGRyArCisJCSAgICBDT0g5MDEzMThfQ1hfQ0ZHX1NQQUNJTkcgKiBjaGFubmVsKTsKKworCS8qIEVuYWJsZSBjaGFubmVsICovCisJdmFsIHw9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRU5BQkxFOworCXdyaXRlbCh2YWwsIHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX0NGRyArCisJICAgICAgIENPSDkwMTMxOF9DWF9DRkdfU1BBQ0lORyAqIGNoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29oOTAxMzE4X3ByZXBfbGlua2VkX2xpc3Qoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjLAorCQkJCSAgICAgIHN0cnVjdCBjb2g5MDEzMThfbGxpICpkYXRhKQoreworCWludCBjaGFubmVsID0gY29oYy0+aWQ7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZSA9IGNvaGMtPmJhc2UtPnZpcnRiYXNlOworCisJQlVHX09OKHJlYWRsKHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX1NUQVQgKworCQkgICAgIENPSDkwMTMxOF9DWF9TVEFUX1NQQUNJTkcqY2hhbm5lbCkgJgorCSAgICAgICBDT0g5MDEzMThfQ1hfU1RBVF9BQ1RJVkUpOworCisJd3JpdGVsKGRhdGEtPnNyY19hZGRyLAorCSAgICAgICB2aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9TUkNfQUREUiArCisJICAgICAgIENPSDkwMTMxOF9DWF9TUkNfQUREUl9TUEFDSU5HICogY2hhbm5lbCk7CisKKwl3cml0ZWwoZGF0YS0+ZHN0X2FkZHIsIHZpcnRiYXNlICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0RTVF9BRERSICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0RTVF9BRERSX1NQQUNJTkcgKiBjaGFubmVsKTsKKworCXdyaXRlbChkYXRhLT5saW5rX2FkZHIsIHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX0xOS19BRERSICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0xOS19BRERSX1NQQUNJTkcgKiBjaGFubmVsKTsKKworCXdyaXRlbChkYXRhLT5jb250cm9sLCB2aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9DVFJMICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0NUUkxfU1BBQ0lORyAqIGNoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgZG1hX2Nvb2tpZV90Citjb2g5MDEzMThfYXNzaWduX2Nvb2tpZShzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMsCisJCQlzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MgKmNvaGQpCit7CisJZG1hX2Nvb2tpZV90IGNvb2tpZSA9IGNvaGMtPmNoYW4uY29va2llOworCisJaWYgKCsrY29va2llIDwgMCkKKwkJY29va2llID0gMTsKKworCWNvaGMtPmNoYW4uY29va2llID0gY29va2llOworCWNvaGQtPmRlc2MuY29va2llID0gY29va2llOworCisJcmV0dXJuIGNvb2tpZTsKK30KKworc3RhdGljIHN0cnVjdCBjb2g5MDEzMThfZGVzYyAqCitjb2g5MDEzMThfZGVzY19nZXQoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXN0cnVjdCBjb2g5MDEzMThfZGVzYyAqZGVzYzsKKworCWlmIChsaXN0X2VtcHR5KCZjb2hjLT5mcmVlKSkgeworCQkvKiBhbGxvYyBuZXcgZGVzYyBiZWNhdXNlIHdlJ3JlIG91dCBvZiB1c2VkIG9uZXMKKwkJICogVE9ETzogYWxsb2MgYSBwaWxlIG9mIGRlc2NzIGluc3RlYWQgb2YganVzdCBvbmUsCisJCSAqIGF2b2lkIG1hbnkgc21hbGwgYWxsb2NhdGlvbnMuCisJCSAqLworCQlkZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvaDkwMTMxOF9kZXNjKSwgR0ZQX05PV0FJVCk7CisJCWlmIChkZXNjID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJSU5JVF9MSVNUX0hFQUQoJmRlc2MtPm5vZGUpOworCX0gZWxzZSB7CisJCS8qIFJldXNlIGFuIG9sZCBkZXNjLiAqLworCQlkZXNjID0gbGlzdF9maXJzdF9lbnRyeSgmY29oYy0+ZnJlZSwKKwkJCQkJc3RydWN0IGNvaDkwMTMxOF9kZXNjLAorCQkJCQlub2RlKTsKKwkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOworCX0KKworIG91dDoKKwlyZXR1cm4gZGVzYzsKK30KKworc3RhdGljIHZvaWQKK2NvaDkwMTMxOF9kZXNjX2ZyZWUoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjLCBzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MgKmNvaGQpCit7CisJbGlzdF9hZGRfdGFpbCgmY29oZC0+bm9kZSwgJmNvaGMtPmZyZWUpOworfQorCisvKiBjYWxsIHdpdGggaXJxIGxvY2sgaGVsZCAqLworc3RhdGljIHZvaWQKK2NvaDkwMTMxOF9kZXNjX3N1Ym1pdChzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMsIHN0cnVjdCBjb2g5MDEzMThfZGVzYyAqZGVzYykKK3sKKwlsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2RlLCAmY29oYy0+YWN0aXZlKTsKKworCUJVR19PTihjb2hjLT5wZW5kaW5nX2lycXMgIT0gMCk7CisKKwljb2hjLT5wZW5kaW5nX2lycXMgPSBkZXNjLT5wZW5kaW5nX2lycXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MgKgorY29oOTAxMzE4X2ZpcnN0X2FjdGl2ZV9nZXQoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXN0cnVjdCBjb2g5MDEzMThfZGVzYyAqZDsKKworCWlmIChsaXN0X2VtcHR5KCZjb2hjLT5hY3RpdmUpKQorCQlyZXR1cm4gTlVMTDsKKworCWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjb2hjLT5hY3RpdmUsCisJCQkgICAgIHN0cnVjdCBjb2g5MDEzMThfZGVzYywKKwkJCSAgICAgbm9kZSk7CisJcmV0dXJuIGQ7Cit9CisKK3N0YXRpYyB2b2lkCitjb2g5MDEzMThfZGVzY19yZW1vdmUoc3RydWN0IGNvaDkwMTMxOF9kZXNjICpjb2hkKQoreworCWxpc3RfZGVsKCZjb2hkLT5ub2RlKTsKK30KKworc3RhdGljIHZvaWQKK2NvaDkwMTMxOF9kZXNjX3F1ZXVlKHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYywgc3RydWN0IGNvaDkwMTMxOF9kZXNjICpkZXNjKQoreworCWxpc3RfYWRkX3RhaWwoJmRlc2MtPm5vZGUsICZjb2hjLT5xdWV1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MgKgorY29oOTAxMzE4X2ZpcnN0X3F1ZXVlZChzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMpCit7CisJc3RydWN0IGNvaDkwMTMxOF9kZXNjICpkOworCisJaWYgKGxpc3RfZW1wdHkoJmNvaGMtPnF1ZXVlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkID0gbGlzdF9maXJzdF9lbnRyeSgmY29oYy0+cXVldWUsCisJCQkgICAgIHN0cnVjdCBjb2g5MDEzMThfZGVzYywKKwkJCSAgICAgbm9kZSk7CisJcmV0dXJuIGQ7Cit9CisKKy8qCisgKiBETUEgc3RhcnQvc3RvcCBjb250cm9scworICovCit1MzIgY29oOTAxMzE4X2dldF9ieXRlc19sZWZ0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZXQ7CisJc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjID0gdG9fY29oOTAxMzE4X2NoYW4oY2hhbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJLyogUmVhZCB0cmFuc2ZlciBjb3VudCB2YWx1ZSAqLworCXJldCA9IHJlYWRsKGNvaGMtPmJhc2UtPnZpcnRiYXNlICsKKwkJICAgIENPSDkwMTMxOF9DWF9DVFJMK0NPSDkwMTMxOF9DWF9DVFJMX1NQQUNJTkcgKgorCQkgICAgY29oYy0+aWQpICYgQ09IOTAxMzE4X0NYX0NUUkxfVENfVkFMVUVfTUFTSzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvaGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNvaDkwMTMxOF9nZXRfYnl0ZXNfbGVmdCk7CisKKworLyogU3RvcHMgYSB0cmFuc2ZlciB3aXRob3V0IGxvc2luZyBkYXRhLiBFbmFibGVzIHBvd2VyIHNhdmUuCisgICBVc2UgdGhpcyBmdW5jdGlvbiBpbiBjb25qdW5jdGlvbiB3aXRoIGNvaDkwMTMxOF9jb250aW51ZSguLikKKyovCit2b2lkIGNvaDkwMTMxOF9zdG9wKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwl1MzIgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjID0gdG9fY29oOTAxMzE4X2NoYW4oY2hhbik7CisJaW50IGNoYW5uZWwgPSBjb2hjLT5pZDsKKwl2b2lkIF9faW9tZW0gKnZpcnRiYXNlID0gY29oYy0+YmFzZS0+dmlydGJhc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJLyogRGlzYWJsZSBjaGFubmVsIGluIEhXICovCisJdmFsID0gcmVhZGwodmlydGJhc2UgKyBDT0g5MDEzMThfQ1hfQ0ZHICsKKwkJICAgIENPSDkwMTMxOF9DWF9DRkdfU1BBQ0lORyAqIGNoYW5uZWwpOworCisJLyogU3RvcHBpbmcgaW5maW5pdCB0cmFuc2ZlciAqLworCWlmICgodmFsICYgQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFKSA9PSAwICYmCisJICAgICh2YWwgJiBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0VOQUJMRSkpCisJCWNvaGMtPnN0b3BwZWQgPSAxOworCisKKwl2YWwgJj0gfkNPSDkwMTMxOF9DWF9DRkdfQ0hfRU5BQkxFOworCS8qIEVuYWJsZSB0d2ljZSwgSFcgYnVnIHdvcmsgYXJvdW5kICovCisJd3JpdGVsKHZhbCwgdmlydGJhc2UgKyBDT0g5MDEzMThfQ1hfQ0ZHICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0NGR19TUEFDSU5HICogY2hhbm5lbCk7CisJd3JpdGVsKHZhbCwgdmlydGJhc2UgKyBDT0g5MDEzMThfQ1hfQ0ZHICsKKwkgICAgICAgQ09IOTAxMzE4X0NYX0NGR19TUEFDSU5HICogY2hhbm5lbCk7CisKKwkvKiBTcGluLXdhaXQgZm9yIGl0IHRvIGFjdHVhbGx5IGdvIGluYWN0aXZlICovCisJd2hpbGUgKHJlYWRsKHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX1NUQVQrQ09IOTAxMzE4X0NYX1NUQVRfU1BBQ0lORyAqCisJCSAgICAgY2hhbm5lbCkgJiBDT0g5MDEzMThfQ1hfU1RBVF9BQ1RJVkUpCisJCWNwdV9yZWxheCgpOworCisJLyogQ2hlY2sgaWYgd2Ugc3RvcHBlZCBhbiBhY3RpdmUgam9iICovCisJaWYgKChyZWFkbCh2aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9DVFJMK0NPSDkwMTMxOF9DWF9DVFJMX1NQQUNJTkcgKgorCQkgICBjaGFubmVsKSAmIENPSDkwMTMxOF9DWF9DVFJMX1RDX1ZBTFVFX01BU0spID4gMCkKKwkJY29oYy0+c3RvcHBlZCA9IDE7CisKKwllbmFibGVfcG93ZXJzYXZlKGNvaGMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29oYy0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjb2g5MDEzMThfc3RvcCk7CisKKy8qIENvbnRpbnVlcyBhIHRyYW5zZmVyIHRoYXQgaGFzIGJlZW4gc3RvcHBlZCB2aWEgMzAwX2RtYV9zdG9wKC4uKS4KKyAgIFBvd2VyIHNhdmUgaXMgaGFuZGxlZC4KKyovCit2b2lkIGNvaDkwMTMxOF9jb250aW51ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYyA9IHRvX2NvaDkwMTMxOF9jaGFuKGNoYW4pOworCWludCBjaGFubmVsID0gY29oYy0+aWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJZGlzYWJsZV9wb3dlcnNhdmUoY29oYyk7CisKKwlpZiAoY29oYy0+c3RvcHBlZCkgeworCQkvKiBFbmFibGUgY2hhbm5lbCBpbiBIVyAqLworCQl2YWwgPSByZWFkbChjb2hjLT5iYXNlLT52aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9DRkcgKworCQkJICAgIENPSDkwMTMxOF9DWF9DRkdfU1BBQ0lORyAqIGNoYW5uZWwpOworCisJCXZhbCB8PSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0VOQUJMRTsKKworCQl3cml0ZWwodmFsLCBjb2hjLT5iYXNlLT52aXJ0YmFzZSArIENPSDkwMTMxOF9DWF9DRkcgKworCQkgICAgICAgQ09IOTAxMzE4X0NYX0NGR19TUEFDSU5HKmNoYW5uZWwpOworCisJCWNvaGMtPnN0b3BwZWQgPSAwOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvaGMtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY29oOTAxMzE4X2NvbnRpbnVlKTsKKworYm9vbCBjb2g5MDEzMThfZmlsdGVyX2lkKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqY2hhbl9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hfbnIgPSAodW5zaWduZWQgaW50KSBjaGFuX2lkOworCisJaWYgKGNoX25yID09IHRvX2NvaDkwMTMxOF9jaGFuKGNoYW4pLT5pZCkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKGNvaDkwMTMxOF9maWx0ZXJfaWQpOworCisvKgorICogRE1BIGNoYW5uZWwgYWxsb2NhdGlvbgorICovCitzdGF0aWMgaW50IGNvaDkwMTMxOF9jb25maWcoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjLAorCQkJICAgIHN0cnVjdCBjb2g5MDEzMThfcGFyYW1zICpwYXJhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IHN0cnVjdCBjb2g5MDEzMThfcGFyYW1zICpwOworCWludCBjaGFubmVsID0gY29oYy0+aWQ7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZSA9IGNvaGMtPmJhc2UtPnZpcnRiYXNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvaGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwYXJhbSkKKwkJcCA9IHBhcmFtOworCWVsc2UKKwkJcCA9ICZjb2hjLT5iYXNlLT5wbGF0Zm9ybS0+Y2hhbl9jb25mW2NoYW5uZWxdLnBhcmFtOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgQkUgb3IgVEMgaW50ZXJydXB0ICovCisJaWYgKGNoYW5uZWwgPCAzMikgeworCQl3cml0ZWwoMSA8PCBjaGFubmVsLCB2aXJ0YmFzZSArIENPSDkwMTMxOF9CRV9JTlRfQ0xFQVIxKTsKKwkJd3JpdGVsKDEgPDwgY2hhbm5lbCwgdmlydGJhc2UgKyBDT0g5MDEzMThfVENfSU5UX0NMRUFSMSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDEgPDwgKGNoYW5uZWwgLSAzMiksIHZpcnRiYXNlICsKKwkJICAgICAgIENPSDkwMTMxOF9CRV9JTlRfQ0xFQVIyKTsKKwkJd3JpdGVsKDEgPDwgKGNoYW5uZWwgLSAzMiksIHZpcnRiYXNlICsKKwkJICAgICAgIENPSDkwMTMxOF9UQ19JTlRfQ0xFQVIyKTsKKwl9CisKKwljb2g5MDEzMThfc2V0X2NvbmYoY29oYywgcC0+Y29uZmlnKTsKKwljb2g5MDEzMThfc2V0X2N0cmwoY29oYywgcC0+Y3RybF9sbGlfbGFzdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogbXVzdCBsb2NrIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgKiBzdGFydCBxdWV1ZWQgam9icywgaWYgYW55CisgKiBUT0RPOiBzdGFydCBhbGwgcXVldWVkIGpvYnMgaW4gb25lIGdvCisgKgorICogUmV0dXJucyBkZXNjcmlwdG9yIGlmIHF1ZXVlZCBqb2IgaXMgc3RhcnRlZCBvdGhlcndpc2UgTlVMTC4KKyAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSBOVUxMIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgc3RydWN0IGNvaDkwMTMxOF9kZXNjICpjb2g5MDEzMThfcXVldWVfc3RhcnQoc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjKQoreworCXN0cnVjdCBjb2g5MDEzMThfZGVzYyAqY29oZF9xdWU7CisKKwkvKiBzdGFydCBxdWV1ZWQgam9icywgaWYgYW55CisJICogVE9ETzogdHJhbnNtaXQgYWxsIHF1ZXVlZCBqb2JzIGluIG9uZSBnbworCSAqLworCWNvaGRfcXVlID0gY29oOTAxMzE4X2ZpcnN0X3F1ZXVlZChjb2hjKTsKKworCWlmIChjb2hkX3F1ZSAhPSBOVUxMKSB7CisJCS8qIFJlbW92ZSBmcm9tIHF1ZXVlICovCisJCWNvaDkwMTMxOF9kZXNjX3JlbW92ZShjb2hkX3F1ZSk7CisJCS8qIGluaXRpYXRlIERNQSBqb2IgKi8KKwkJY29oYy0+YnVzeSA9IDE7CisKKwkJY29oOTAxMzE4X2Rlc2Nfc3VibWl0KGNvaGMsIGNvaGRfcXVlKTsKKworCQljb2g5MDEzMThfcHJlcF9saW5rZWRfbGlzdChjb2hjLCBjb2hkX3F1ZS0+ZGF0YSk7CisKKwkJLyogc3RhcnQgZG1hIGpvYiAqLworCQljb2g5MDEzMThfc3RhcnQoY29oYyk7CisKKwl9CisKKwlyZXR1cm4gY29oZF9xdWU7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMgPSAoc3RydWN0IGNvaDkwMTMxOF9jaGFuICopIGRhdGE7CisJc3RydWN0IGNvaDkwMTMxOF9kZXNjICpjb2hkX2ZpbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9hc3luY190eF9jYWxsYmFjayBjYWxsYmFjazsKKwl2b2lkICpjYWxsYmFja19wYXJhbTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb2hjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBnZXQgZmlyc3QgYWN0aXZlIGVudHJ5IGZyb20gbGlzdCAqLworCWNvaGRfZmluID0gY29oOTAxMzE4X2ZpcnN0X2FjdGl2ZV9nZXQoY29oYyk7CisKKwlCVUdfT04oY29oZF9maW4tPnBlbmRpbmdfaXJxcyA9PSAwKTsKKworCWlmIChjb2hkX2ZpbiA9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCWNvaGRfZmluLT5wZW5kaW5nX2lycXMtLTsKKwljb2hjLT5jb21wbGV0ZWQgPSBjb2hkX2Zpbi0+ZGVzYy5jb29raWU7CisKKwlCVUdfT04oY29oYy0+bmJyX2FjdGl2ZV9kb25lICYmIGNvaGRfZmluID09IE5VTEwpOworCisJaWYgKGNvaGMtPm5icl9hY3RpdmVfZG9uZSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIWNvaGRfZmluLT5wZW5kaW5nX2lycXMpIHsKKwkJLyogcmVsZWFzZSB0aGUgbGxpIGFsbG9jYXRpb24qLworCQljb2g5MDEzMThfbGxpX2ZyZWUoJmNvaGMtPmJhc2UtPnBvb2wsICZjb2hkX2Zpbi0+ZGF0YSk7CisJfQorCisJZGV2X3ZkYmcoQ09IQ18yX0RFVihjb2hjKSwgIlslc10gY2hhbl9pZCAlZCBwZW5kaW5nX2lycXMgJWQiCisJCSAiIG5icl9hY3RpdmVfZG9uZSAlbGRcbiIsIF9fZnVuY19fLAorCQkgY29oYy0+aWQsIGNvaGMtPnBlbmRpbmdfaXJxcywgY29oYy0+bmJyX2FjdGl2ZV9kb25lKTsKKworCS8qIGNhbGxiYWNrIHRvIGNsaWVudCAqLworCWNhbGxiYWNrID0gY29oZF9maW4tPmRlc2MuY2FsbGJhY2s7CisJY2FsbGJhY2tfcGFyYW0gPSBjb2hkX2Zpbi0+ZGVzYy5jYWxsYmFja19wYXJhbTsKKworCWlmICghY29oZF9maW4tPnBlbmRpbmdfaXJxcykgeworCQljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZF9maW4pOworCisJCS8qIHJldHVybiBkZXNjIHRvIGZyZWUtbGlzdCAqLworCQljb2g5MDEzMThfZGVzY19mcmVlKGNvaGMsIGNvaGRfZmluKTsKKwl9CisKKwlpZiAoY29oYy0+bmJyX2FjdGl2ZV9kb25lKQorCQljb2hjLT5uYnJfYWN0aXZlX2RvbmUtLTsKKworCWlmIChjb2hjLT5uYnJfYWN0aXZlX2RvbmUpIHsKKwkJaWYgKGNvaGNfY2hhbl9jb25mKGNvaGMpLT5wcmlvcml0eV9oaWdoKQorCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmY29oYy0+dGFza2xldCk7CisJCWVsc2UKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmNvaGMtPnRhc2tsZXQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY2FsbGJhY2spCisJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKworCXJldHVybjsKKworIGVycjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CisJZGV2X2VycihDT0hDXzJfREVWKGNvaGMpLCAiWyVzXSBObyBhY3RpdmUgZG1hIGRlc2NcbiIsIF9fZnVuY19fKTsKK30KKworCisvKiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLworc3RhdGljIHZvaWQgZG1hX3RjX2hhbmRsZShzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMpCit7CisJQlVHX09OKCFjb2hjLT5hbGxvY2F0ZWQgJiYgKGxpc3RfZW1wdHkoJmNvaGMtPmFjdGl2ZSkgfHwKKwkJCQkgICAgbGlzdF9lbXB0eSgmY29oYy0+cXVldWUpKSk7CisKKwlpZiAoIWNvaGMtPmFsbG9jYXRlZCkKKwkJcmV0dXJuOworCisJQlVHX09OKGNvaGMtPnBlbmRpbmdfaXJxcyA9PSAwKTsKKworCWNvaGMtPnBlbmRpbmdfaXJxcy0tOworCWNvaGMtPm5icl9hY3RpdmVfZG9uZSsrOworCisJaWYgKGNvaGMtPnBlbmRpbmdfaXJxcyA9PSAwICYmIGNvaDkwMTMxOF9xdWV1ZV9zdGFydChjb2hjKSA9PSBOVUxMKQorCQljb2hjLT5idXN5ID0gMDsKKworCUJVR19PTihsaXN0X2VtcHR5KCZjb2hjLT5hY3RpdmUpKTsKKworCWlmIChjb2hjX2NoYW5fY29uZihjb2hjKS0+cHJpb3JpdHlfaGlnaCkKKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmY29oYy0+dGFza2xldCk7CisJZWxzZQorCQl0YXNrbGV0X3NjaGVkdWxlKCZjb2hjLT50YXNrbGV0KTsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgc3RhdHVzMTsKKwl1MzIgc3RhdHVzMjsKKwlpbnQgaTsKKwlpbnQgY2g7CisJc3RydWN0IGNvaDkwMTMxOF9iYXNlICpiYXNlICA9IGRldl9pZDsKKwlzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGM7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZSA9IGJhc2UtPnZpcnRiYXNlOworCisJc3RhdHVzMSA9IHJlYWRsKHZpcnRiYXNlICsgQ09IOTAxMzE4X0lOVF9TVEFUVVMxKTsKKwlzdGF0dXMyID0gcmVhZGwodmlydGJhc2UgKyBDT0g5MDEzMThfSU5UX1NUQVRVUzIpOworCisJaWYgKHVubGlrZWx5KHN0YXR1czEgPT0gMCAmJiBzdGF0dXMyID09IDApKSB7CisJCWRldl93YXJuKGJhc2UtPmRldiwgInNwdXJpb3VzIERNQSBJUlEgZnJvbSBubyBjaGFubmVsIVxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKiBUT0RPOiBjb25zaWRlciBoYW5kbGUgSVJRIGluIHRhc2tsZXQgaGVyZSB0bworCSAqICAgICAgIG1pbmltaXplIGludGVycnVwdCBsYXRlbmN5ICovCisKKwkvKiBDaGVjayB0aGUgZmlyc3QgMzIgRE1BIGNoYW5uZWxzIGZvciBJUlEgKi8KKwl3aGlsZSAoc3RhdHVzMSkgeworCQkvKiBGaW5kIGZpcnN0IGJpdCBzZXQsIHJldHVybiBhcyBhIG51bWJlci4gKi8KKwkJaSA9IGZmcyhzdGF0dXMxKSAtIDE7CisJCWNoID0gaTsKKworCQljb2hjID0gJmJhc2UtPmNoYW5zW2NoXTsKKwkJc3Bpbl9sb2NrKCZjb2hjLT5sb2NrKTsKKworCQkvKiBNYXNrIG9mZiB0aGlzIGJpdCAqLworCQlzdGF0dXMxICY9IH4oMSA8PCBpKTsKKwkJLyogQ2hlY2sgdGhlIGluZGl2aWR1YWwgY2hhbm5lbCBiaXRzICovCisJCWlmICh0ZXN0X2JpdChpLCB2aXJ0YmFzZSArIENPSDkwMTMxOF9CRV9JTlRfU1RBVFVTMSkpIHsKKwkJCWRldl9jcml0KENPSENfMl9ERVYoY29oYyksCisJCQkJICJETUEgYnVzIGVycm9yIG9uIGNoYW5uZWwgJWQhXG4iLCBjaCk7CisJCQlCVUdfT04oMSk7CisJCQkvKiBDbGVhciBCRSBpbnRlcnJ1cHQgKi8KKwkJCV9fc2V0X2JpdChpLCB2aXJ0YmFzZSArIENPSDkwMTMxOF9CRV9JTlRfQ0xFQVIxKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENhdXNlZCBieSBUQywgcmVhbGx5PyAqLworCQkJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChpLCB2aXJ0YmFzZSArCisJCQkJCSAgICAgICBDT0g5MDEzMThfVENfSU5UX1NUQVRVUzEpKSkgeworCQkJCWRldl93YXJuKENPSENfMl9ERVYoY29oYyksCisJCQkJCSAiaWdub3JpbmcgaW50ZXJydXB0IG5vdCBjYXVzZWQgYnkgdGVybWluYWwgY291bnQgb24gY2hhbm5lbCAlZFxuIiwgY2gpOworCQkJCS8qIENsZWFyIFRDIGludGVycnVwdCAqLworCQkJCUJVR19PTigxKTsKKwkJCQlfX3NldF9iaXQoaSwgdmlydGJhc2UgKyBDT0g5MDEzMThfVENfSU5UX0NMRUFSMSk7CisJCQl9IGVsc2UgeworCQkJCS8qIEVuYWJsZSBwb3dlcnNhdmUgaWYgdHJhbnNmZXIgaGFzIGZpbmlzaGVkICovCisJCQkJaWYgKCEocmVhZGwodmlydGJhc2UgKyBDT0g5MDEzMThfQ1hfU1RBVCArCisJCQkJCSAgICBDT0g5MDEzMThfQ1hfU1RBVF9TUEFDSU5HKmNoKSAmCisJCQkJICAgICAgQ09IOTAxMzE4X0NYX1NUQVRfRU5BQkxFRCkpIHsKKwkJCQkJZW5hYmxlX3Bvd2Vyc2F2ZShjb2hjKTsKKwkJCQl9CisKKwkJCQkvKiBNdXN0IGNsZWFyIFRDIGludGVycnVwdCBiZWZvcmUgY2FsbGluZworCQkJCSAqIGRtYV90Y19oYW5kbGUKKwkJCQkgKiBpbiBjYXNlIHRjX2hhbmRsZSBpbml0YXRlIGEgbmV3IGRtYSBqb2IKKwkJCQkgKi8KKwkJCQlfX3NldF9iaXQoaSwgdmlydGJhc2UgKyBDT0g5MDEzMThfVENfSU5UX0NMRUFSMSk7CisKKwkJCQlkbWFfdGNfaGFuZGxlKGNvaGMpOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZjb2hjLT5sb2NrKTsKKwl9CisKKwkvKiBDaGVjayB0aGUgcmVtYWluaW5nIDMyIERNQSBjaGFubmVscyBmb3IgSVJRICovCisJd2hpbGUgKHN0YXR1czIpIHsKKwkJLyogRmluZCBmaXJzdCBiaXQgc2V0LCByZXR1cm4gYXMgYSBudW1iZXIuICovCisJCWkgPSBmZnMoc3RhdHVzMikgLSAxOworCQljaCA9IGkgKyAzMjsKKwkJY29oYyA9ICZiYXNlLT5jaGFuc1tjaF07CisJCXNwaW5fbG9jaygmY29oYy0+bG9jayk7CisKKwkJLyogTWFzayBvZmYgdGhpcyBiaXQgKi8KKwkJc3RhdHVzMiAmPSB+KDEgPDwgaSk7CisJCS8qIENoZWNrIHRoZSBpbmRpdmlkdWFsIGNoYW5uZWwgYml0cyAqLworCQlpZiAodGVzdF9iaXQoaSwgdmlydGJhc2UgKyBDT0g5MDEzMThfQkVfSU5UX1NUQVRVUzIpKSB7CisJCQlkZXZfY3JpdChDT0hDXzJfREVWKGNvaGMpLAorCQkJCSAiRE1BIGJ1cyBlcnJvciBvbiBjaGFubmVsICVkIVxuIiwgY2gpOworCQkJLyogQ2xlYXIgQkUgaW50ZXJydXB0ICovCisJCQlCVUdfT04oMSk7CisJCQlfX3NldF9iaXQoaSwgdmlydGJhc2UgKyBDT0g5MDEzMThfQkVfSU5UX0NMRUFSMik7CisJCX0gZWxzZSB7CisJCQkvKiBDYXVzZWQgYnkgVEMsIHJlYWxseT8gKi8KKwkJCWlmICh1bmxpa2VseSghdGVzdF9iaXQoaSwgdmlydGJhc2UgKworCQkJCQkgICAgICAgQ09IOTAxMzE4X1RDX0lOVF9TVEFUVVMyKSkpIHsKKwkJCQlkZXZfd2FybihDT0hDXzJfREVWKGNvaGMpLAorCQkJCQkgImlnbm9yaW5nIGludGVycnVwdCBub3QgY2F1c2VkIGJ5IHRlcm1pbmFsIGNvdW50IG9uIGNoYW5uZWwgJWRcbiIsIGNoKTsKKwkJCQkvKiBDbGVhciBUQyBpbnRlcnJ1cHQgKi8KKwkJCQlfX3NldF9iaXQoaSwgdmlydGJhc2UgKyBDT0g5MDEzMThfVENfSU5UX0NMRUFSMik7CisJCQkJQlVHX09OKDEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBFbmFibGUgcG93ZXJzYXZlIGlmIHRyYW5zZmVyIGhhcyBmaW5pc2hlZCAqLworCQkJCWlmICghKHJlYWRsKHZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX1NUQVQgKworCQkJCQkgICAgQ09IOTAxMzE4X0NYX1NUQVRfU1BBQ0lORypjaCkgJgorCQkJCSAgICAgIENPSDkwMTMxOF9DWF9TVEFUX0VOQUJMRUQpKSB7CisJCQkJCWVuYWJsZV9wb3dlcnNhdmUoY29oYyk7CisJCQkJfQorCQkJCS8qIE11c3QgY2xlYXIgVEMgaW50ZXJydXB0IGJlZm9yZSBjYWxsaW5nCisJCQkJICogZG1hX3RjX2hhbmRsZQorCQkJCSAqIGluIGNhc2UgdGNfaGFuZGxlIGluaXRhdGUgYSBuZXcgZG1hIGpvYgorCQkJCSAqLworCQkJCV9fc2V0X2JpdChpLCB2aXJ0YmFzZSArIENPSDkwMTMxOF9UQ19JTlRfQ0xFQVIyKTsKKworCQkJCWRtYV90Y19oYW5kbGUoY29oYyk7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmNvaGMtPmxvY2spOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBjb2g5MDEzMThfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBjb2g5MDEzMThfY2hhbgkqY29oYyA9IHRvX2NvaDkwMTMxOF9jaGFuKGNoYW4pOworCisJZGV2X3ZkYmcoQ09IQ18yX0RFVihjb2hjKSwgIlslc10gRE1BIGNoYW5uZWwgJWRcbiIsCisJCSBfX2Z1bmNfXywgY29oYy0+aWQpOworCisJaWYgKGNoYW4tPmNsaWVudF9jb3VudCA+IDEpCisJCXJldHVybiAtRUJVU1k7CisKKwljb2g5MDEzMThfY29uZmlnKGNvaGMsIE5VTEwpOworCisJY29oYy0+YWxsb2NhdGVkID0gMTsKKwljb2hjLT5jb21wbGV0ZWQgPSBjaGFuLT5jb29raWUgPSAxOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitjb2g5MDEzMThfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGNvaDkwMTMxOF9jaGFuCSpjb2hjID0gdG9fY29oOTAxMzE4X2NoYW4oY2hhbik7CisJaW50IGNoYW5uZWwgPSBjb2hjLT5pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvaGMtPmxvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgSFcgKi8KKwl3cml0ZWwoMHgwMDAwMDAwMFUsIGNvaGMtPmJhc2UtPnZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX0NGRyArCisJICAgICAgIENPSDkwMTMxOF9DWF9DRkdfU1BBQ0lORypjaGFubmVsKTsKKwl3cml0ZWwoMHgwMDAwMDAwMFUsIGNvaGMtPmJhc2UtPnZpcnRiYXNlICsgQ09IOTAxMzE4X0NYX0NUUkwgKworCSAgICAgICBDT0g5MDEzMThfQ1hfQ1RSTF9TUEFDSU5HKmNoYW5uZWwpOworCisJY29oYy0+YWxsb2NhdGVkID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvaGMtPmxvY2ssIGZsYWdzKTsKKworCWNoYW4tPmRldmljZS0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwoY2hhbik7Cit9CisKKworc3RhdGljIGRtYV9jb29raWVfdAorY29oOTAxMzE4X3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQoreworCXN0cnVjdCBjb2g5MDEzMThfZGVzYyAqY29oZCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGNvaDkwMTMxOF9kZXNjLAorCQkJCQkJICAgZGVzYyk7CisJc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjID0gdG9fY29oOTAxMzE4X2NoYW4odHgtPmNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJdHgtPmNvb2tpZSA9IGNvaDkwMTMxOF9hc3NpZ25fY29va2llKGNvaGMsIGNvaGQpOworCisJY29oOTAxMzE4X2Rlc2NfcXVldWUoY29oYywgY29oZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdHgtPmNvb2tpZTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCitjb2g5MDEzMThfcHJlcF9tZW1jcHkoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRlc3QsIGRtYV9hZGRyX3Qgc3JjLAorCQkgICAgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqZGF0YTsKKwlzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MgKmNvaGQ7CisJdW5zaWduZWQgbG9uZyBmbGc7CisJc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjID0gdG9fY29oOTAxMzE4X2NoYW4oY2hhbik7CisJaW50IGxsaV9sZW47CisJdTMyIGN0cmxfbGFzdCA9IGNvaGNfY2hhbl9wYXJhbShjb2hjKS0+Y3RybF9sbGlfbGFzdDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb2hjLT5sb2NrLCBmbGcpOworCisJZGV2X3ZkYmcoQ09IQ18yX0RFVihjb2hjKSwKKwkJICJbJXNdIGNoYW5uZWwgJWQgc3JjIDB4JXggZGVzdCAweCV4IHNpemUgJWRcbiIsCisJCSBfX2Z1bmNfXywgY29oYy0+aWQsIHNyYywgZGVzdCwgc2l6ZSk7CisKKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9JTlRFUlJVUFQpCisJCS8qIFRyaWdnZXIgaW50ZXJydXB0IGFmdGVyIGxhc3QgbGxpICovCisJCWN0cmxfbGFzdCB8PSBDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFOworCisJbGxpX2xlbiA9IHNpemUgPj4gTUFYX0RNQV9QQUNLRVRfU0laRV9TSElGVDsKKwlpZiAoKGxsaV9sZW4gPDwgTUFYX0RNQV9QQUNLRVRfU0laRV9TSElGVCkgPCBzaXplKQorCQlsbGlfbGVuKys7CisKKwlkYXRhID0gY29oOTAxMzE4X2xsaV9hbGxvYygmY29oYy0+YmFzZS0+cG9vbCwgbGxpX2xlbik7CisKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCWNvaGQgPSBjb2g5MDEzMThfZGVzY19nZXQoY29oYyk7CisJY29oZC0+c2cgPSBOVUxMOworCWNvaGQtPnNnX2xlbiA9IDA7CisJY29oZC0+ZGF0YSA9IGRhdGE7CisKKwljb2hkLT5wZW5kaW5nX2lycXMgPQorCQljb2g5MDEzMThfbGxpX2ZpbGxfbWVtY3B5KAorCQkJCSZjb2hjLT5iYXNlLT5wb29sLCBkYXRhLCBzcmMsIHNpemUsIGRlc3QsCisJCQkJY29oY19jaGFuX3BhcmFtKGNvaGMpLT5jdHJsX2xsaV9jaGFpbmVkLAorCQkJCWN0cmxfbGFzdCk7CisJY29oZC0+ZmxhZ3MgPSBmbGFnczsKKworCUNPSF9EQkcoY29oOTAxMzE4X2xpc3RfcHJpbnQoY29oYywgZGF0YSkpOworCisJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmY29oZC0+ZGVzYywgY2hhbik7CisKKwljb2hkLT5kZXNjLnR4X3N1Ym1pdCA9IGNvaDkwMTMxOF90eF9zdWJtaXQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGcpOworCisJcmV0dXJuICZjb2hkLT5kZXNjOworIGVycjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGcpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKK2NvaDkwMTMxOF9wcmVwX3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQl1bnNpZ25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYyA9IHRvX2NvaDkwMTMxOF9jaGFuKGNoYW4pOworCXN0cnVjdCBjb2g5MDEzMThfbGxpICpkYXRhOworCXN0cnVjdCBjb2g5MDEzMThfZGVzYyAqY29oZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBsZW4gPSAwOworCWludCBzaXplOworCWludCBpOworCXUzMiBjdHJsX2NoYWluZWQgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpX2NoYWluZWQ7CisJdTMyIGN0cmwgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpOworCXUzMiBjdHJsX2xhc3QgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpX2xhc3Q7CisJdW5zaWduZWQgbG9uZyBmbGc7CisKKwlpZiAoIXNnbCkKKwkJZ290byBvdXQ7CisJaWYgKHNnbC0+bGVuZ3RoID09IDApCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvaGMtPmxvY2ssIGZsZyk7CisKKwlkZXZfdmRiZyhDT0hDXzJfREVWKGNvaGMpLCAiWyVzXSBzZ19sZW4gJWQgZGlyICVkXG4iLAorCQkgX19mdW5jX18sIHNnX2xlbiwgZGlyZWN0aW9uKTsKKworCWlmIChmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCkKKwkJLyogVHJpZ2dlciBpbnRlcnJ1cHQgYWZ0ZXIgbGFzdCBsbGkgKi8KKwkJY3RybF9sYXN0IHw9IENPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEU7CisKKwljb2hkID0gY29oOTAxMzE4X2Rlc2NfZ2V0KGNvaGMpOworCWNvaGQtPnNnID0gTlVMTDsKKwljb2hkLT5zZ19sZW4gPSAwOworCWNvaGQtPmRpciA9IGRpcmVjdGlvbjsKKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgeworCQl1MzIgdHhfZmxhZ3MgPSBDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSB8CisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFOworCisJCWN0cmxfY2hhaW5lZCB8PSB0eF9mbGFnczsKKwkJY3RybF9sYXN0IHw9IHR4X2ZsYWdzOworCQljdHJsIHw9IHR4X2ZsYWdzOworCX0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgeworCQl1MzIgcnhfZmxhZ3MgPSBDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QgfAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRTsKKworCQljdHJsX2NoYWluZWQgfD0gcnhfZmxhZ3M7CisJCWN0cmxfbGFzdCB8PSByeF9mbGFnczsKKwkJY3RybCB8PSByeF9mbGFnczsKKwl9IGVsc2UKKwkJZ290byBlcnJfZGlyZWN0aW9uOworCisJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmY29oZC0+ZGVzYywgY2hhbik7CisKKwljb2hkLT5kZXNjLnR4X3N1Ym1pdCA9IGNvaDkwMTMxOF90eF9zdWJtaXQ7CisKKworCS8qIFRoZSBkbWEgb25seSBzdXBwb3J0cyB0cmFuc21pdHRpbmcgcGFja2FnZXMgdXAgdG8KKwkgKiBNQVhfRE1BX1BBQ0tFVF9TSVpFLiBDYWxjdWxhdGUgdG8gdG90YWwgbnVtYmVyIG9mCisJICogZG1hIGVsZW10cyByZXF1aXJlZCB0byBzZW5kIHRoZSBlbnRpcmUgc2cgbGlzdAorCSAqLworCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgeworCQl1bnNpZ25lZCBpbnQgZmFjdG9yOworCQlzaXplID0gc2dfZG1hX2xlbihzZyk7CisKKwkJaWYgKHNpemUgPD0gTUFYX0RNQV9QQUNLRVRfU0laRSkgeworCQkJbGVuKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZhY3RvciA9IHNpemUgPj4gTUFYX0RNQV9QQUNLRVRfU0laRV9TSElGVDsKKwkJaWYgKChmYWN0b3IgPDwgTUFYX0RNQV9QQUNLRVRfU0laRV9TSElGVCkgPCBzaXplKQorCQkJZmFjdG9yKys7CisKKwkJbGVuICs9IGZhY3RvcjsKKwl9CisKKwlkYXRhID0gY29oOTAxMzE4X2xsaV9hbGxvYygmY29oYy0+YmFzZS0+cG9vbCwgbGVuKTsKKworCWlmIChkYXRhID09IE5VTEwpCisJCWdvdG8gZXJyX2RtYV9hbGxvYzsKKworCS8qIGluaXRpYXRlIGFsbG9jYXRlZCBkYXRhIGxpc3QgKi8KKwljb2hkLT5wZW5kaW5nX2lycXMgPQorCQljb2g5MDEzMThfbGxpX2ZpbGxfc2coJmNvaGMtPmJhc2UtPnBvb2wsIGRhdGEsIHNnbCwgc2dfbGVuLAorCQkJCSAgICAgIGNvaGNfZGV2X2FkZHIoY29oYyksCisJCQkJICAgICAgY3RybF9jaGFpbmVkLAorCQkJCSAgICAgIGN0cmwsCisJCQkJICAgICAgY3RybF9sYXN0LAorCQkJCSAgICAgIGRpcmVjdGlvbiwgQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSk7CisJY29oZC0+ZGF0YSA9IGRhdGE7CisKKwljb2hkLT5mbGFncyA9IGZsYWdzOworCisJQ09IX0RCRyhjb2g5MDEzMThfbGlzdF9wcmludChjb2hjLCBkYXRhKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGcpOworCisJcmV0dXJuICZjb2hkLT5kZXNjOworIGVycl9kbWFfYWxsb2M6CisgZXJyX2RpcmVjdGlvbjoKKwljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZCk7CisJY29oOTAxMzE4X2Rlc2NfZnJlZShjb2hjLCBjb2hkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGcpOworIG91dDoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGVudW0gZG1hX3N0YXR1cworY29oOTAxMzE4X2lzX3R4X2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCSBkbWFfY29va2llX3QgY29va2llLCBkbWFfY29va2llX3QgKmRvbmUsCisJCQkgZG1hX2Nvb2tpZV90ICp1c2VkKQoreworCXN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYyA9IHRvX2NvaDkwMTMxOF9jaGFuKGNoYW4pOworCWRtYV9jb29raWVfdCBsYXN0X3VzZWQ7CisJZG1hX2Nvb2tpZV90IGxhc3RfY29tcGxldGU7CisJaW50IHJldDsKKworCWxhc3RfY29tcGxldGUgPSBjb2hjLT5jb21wbGV0ZWQ7CisJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCisJcmV0ID0gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKKworCWlmIChkb25lKQorCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CisJaWYgKHVzZWQpCisJCSp1c2VkID0gbGFzdF91c2VkOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2NvaDkwMTMxOF9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMgPSB0b19jb2g5MDEzMThfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvaGMtPmxvY2ssIGZsYWdzKTsKKworCS8qIEJ1c3kgbWVhbnMgdGhhdCBwZW5kaW5nIGpvYnMgYXJlIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkICovCisJaWYgKCFjb2hjLT5idXN5KQorCQljb2g5MDEzMThfcXVldWVfc3RhcnQoY29oYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitjb2g5MDEzMThfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMgPSB0b19jb2g5MDEzMThfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MgKmNvaGQ7CisJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZSA9IGNvaGMtPmJhc2UtPnZpcnRiYXNlOworCisJY29oOTAxMzE4X3N0b3AoY2hhbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgQkUgb3IgVEMgaW50ZXJydXB0ICovCisJaWYgKGNvaGMtPmlkIDwgMzIpIHsKKwkJd3JpdGVsKDEgPDwgY29oYy0+aWQsIHZpcnRiYXNlICsgQ09IOTAxMzE4X0JFX0lOVF9DTEVBUjEpOworCQl3cml0ZWwoMSA8PCBjb2hjLT5pZCwgdmlydGJhc2UgKyBDT0g5MDEzMThfVENfSU5UX0NMRUFSMSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDEgPDwgKGNvaGMtPmlkIC0gMzIpLCB2aXJ0YmFzZSArCisJCSAgICAgICBDT0g5MDEzMThfQkVfSU5UX0NMRUFSMik7CisJCXdyaXRlbCgxIDw8IChjb2hjLT5pZCAtIDMyKSwgdmlydGJhc2UgKworCQkgICAgICAgQ09IOTAxMzE4X1RDX0lOVF9DTEVBUjIpOworCX0KKworCWVuYWJsZV9wb3dlcnNhdmUoY29oYyk7CisKKwl3aGlsZSAoKGNvaGQgPSBjb2g5MDEzMThfZmlyc3RfYWN0aXZlX2dldChjb2hjKSkpIHsKKwkJLyogcmVsZWFzZSB0aGUgbGxpIGFsbG9jYXRpb24qLworCQljb2g5MDEzMThfbGxpX2ZyZWUoJmNvaGMtPmJhc2UtPnBvb2wsICZjb2hkLT5kYXRhKTsKKworCQljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZCk7CisKKwkJLyogcmV0dXJuIGRlc2MgdG8gZnJlZS1saXN0ICovCisJCWNvaDkwMTMxOF9kZXNjX2ZyZWUoY29oYywgY29oZCk7CisJfQorCisJd2hpbGUgKChjb2hkID0gY29oOTAxMzE4X2ZpcnN0X3F1ZXVlZChjb2hjKSkpIHsKKwkJLyogcmVsZWFzZSB0aGUgbGxpIGFsbG9jYXRpb24qLworCQljb2g5MDEzMThfbGxpX2ZyZWUoJmNvaGMtPmJhc2UtPnBvb2wsICZjb2hkLT5kYXRhKTsKKworCQljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZCk7CisKKwkJLyogcmV0dXJuIGRlc2MgdG8gZnJlZS1saXN0ICovCisJCWNvaDkwMTMxOF9kZXNjX2ZyZWUoY29oYywgY29oZCk7CisJfQorCisKKwljb2hjLT5uYnJfYWN0aXZlX2RvbmUgPSAwOworCWNvaGMtPmJ1c3kgPSAwOworCWNvaGMtPnBlbmRpbmdfaXJxcyA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7Cit9Cit2b2lkIGNvaDkwMTMxOF9iYXNlX2luaXQoc3RydWN0IGRtYV9kZXZpY2UgKmRtYSwgY29uc3QgaW50ICpwaWNrX2NoYW5zLAorCQkJIHN0cnVjdCBjb2g5MDEzMThfYmFzZSAqYmFzZSkKK3sKKwlpbnQgY2hhbnNfaTsKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjOworCisJSU5JVF9MSVNUX0hFQUQoJmRtYS0+Y2hhbm5lbHMpOworCisJZm9yIChjaGFuc19pID0gMDsgcGlja19jaGFuc1tjaGFuc19pXSAhPSAtMTsgY2hhbnNfaSArPSAyKSB7CisJCWZvciAoaSA9IHBpY2tfY2hhbnNbY2hhbnNfaV07IGkgPD0gcGlja19jaGFuc1tjaGFuc19pKzFdOyBpKyspIHsKKwkJCWNvaGMgPSAmYmFzZS0+Y2hhbnNbaV07CisKKwkJCWNvaGMtPmJhc2UgPSBiYXNlOworCQkJY29oYy0+Y2hhbi5kZXZpY2UgPSBkbWE7CisJCQljb2hjLT5pZCA9IGk7CisKKwkJCS8qIFRPRE86IGRvIHdlIHJlYWxseSBuZWVkIHRoaXMgbG9jayBpZiBvbmx5IG9uZQorCQkJICogY2xpZW50IGlzIGNvbm5lY3RlZCB0byBlYWNoIGNoYW5uZWw/CisJCQkgKi8KKworCQkJc3Bpbl9sb2NrX2luaXQoJmNvaGMtPmxvY2spOworCisJCQljb2hjLT5wZW5kaW5nX2lycXMgPSAwOworCQkJY29oYy0+bmJyX2FjdGl2ZV9kb25lID0gMDsKKwkJCWNvaGMtPmJ1c3kgPSAwOworCQkJSU5JVF9MSVNUX0hFQUQoJmNvaGMtPmZyZWUpOworCQkJSU5JVF9MSVNUX0hFQUQoJmNvaGMtPmFjdGl2ZSk7CisJCQlJTklUX0xJU1RfSEVBRCgmY29oYy0+cXVldWUpOworCisJCQl0YXNrbGV0X2luaXQoJmNvaGMtPnRhc2tsZXQsIGRtYV90YXNrbGV0LAorCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGNvaGMpOworCisJCQlsaXN0X2FkZF90YWlsKCZjb2hjLT5jaGFuLmRldmljZV9ub2RlLAorCQkJCSAgICAgICZkbWEtPmNoYW5uZWxzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBfX2luaXQgY29oOTAxMzE4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGNvaDkwMTMxOF9wbGF0Zm9ybSAqcGRhdGE7CisJc3RydWN0IGNvaDkwMTMxOF9iYXNlICpiYXNlOworCWludCBpcnE7CisJc3RydWN0IHJlc291cmNlICppbzsKKworCWlvID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWlvKQorCQlnb3RvIGVycl9nZXRfcmVzb3VyY2U7CisKKwkvKiBNYXAgRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHRvIHZpcnR1YWwgbWVtb3J5ICovCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihpby0+c3RhcnQsCisJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShpbyksCisJCQkgICAgICAgcGRldi0+ZGV2LmRyaXZlci0+bmFtZSkgPT0gTlVMTCkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlcXVlc3RfbWVtOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkKKwkJZ290byBlcnJfbm9fcGxhdGZvcm1kYXRhOworCisJYmFzZSA9IGttYWxsb2MoQUxJR04oc2l6ZW9mKHN0cnVjdCBjb2g5MDEzMThfYmFzZSksIDQpICsKKwkJICAgICAgIHBkYXRhLT5tYXhfY2hhbm5lbHMgKgorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjb2g5MDEzMThfY2hhbiksCisJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWJhc2UpCisJCWdvdG8gZXJyX2FsbG9jX2NvaF9kbWFfY2hhbm5lbHM7CisKKwliYXNlLT5jaGFucyA9ICgodm9pZCAqKWJhc2UpICsgQUxJR04oc2l6ZW9mKHN0cnVjdCBjb2g5MDEzMThfYmFzZSksIDQpOworCisJYmFzZS0+dmlydGJhc2UgPSBpb3JlbWFwKGlvLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpbykpOworCWlmICghYmFzZS0+dmlydGJhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfbm9faW9yZW1hcDsKKwl9CisKKwliYXNlLT5kZXYgPSAmcGRldi0+ZGV2OworCWJhc2UtPnBsYXRmb3JtID0gcGRhdGE7CisJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPnBtLmxvY2spOworCWJhc2UtPnBtLnN0YXJ0ZWRfY2hhbm5lbHMgPSAwOworCisJQ09IOTAxMzE4X0RFQlVHRlNfQVNTSUdOKGRlYnVnZnNfZG1hX2Jhc2UsIGJhc2UpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYmFzZSk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlnb3RvIGVycl9ub19pcnE7CisKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgImNvaDkwMTMxOCIsIGJhc2UpOworCWlmIChlcnIpIHsKKwkJZGV2X2NyaXQoJnBkZXYtPmRldiwKKwkJCSAiQ2Fubm90IGFsbG9jYXRlIElSUSBmb3IgRE1BIGNvbnRyb2xsZXIhXG4iKTsKKwkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJfQorCisJZXJyID0gY29oOTAxMzE4X3Bvb2xfY3JlYXRlKCZiYXNlLT5wb29sLCAmcGRldi0+ZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGNvaDkwMTMxOF9sbGkpLAorCQkJCSAgICAzMik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcG9vbF9jcmVhdGU7CisKKwkvKiBpbml0IGNoYW5uZWxzIGZvciBkZXZpY2UgdHJhbnNmZXJzICovCisJY29oOTAxMzE4X2Jhc2VfaW5pdCgmYmFzZS0+ZG1hX3NsYXZlLCAgYmFzZS0+cGxhdGZvcm0tPmNoYW5zX3NsYXZlLAorCQkJICAgIGJhc2UpOworCisJZG1hX2NhcF96ZXJvKGJhc2UtPmRtYV9zbGF2ZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBiYXNlLT5kbWFfc2xhdmUuY2FwX21hc2spOworCisJYmFzZS0+ZG1hX3NsYXZlLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IGNvaDkwMTMxOF9hbGxvY19jaGFuX3Jlc291cmNlczsKKwliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBjb2g5MDEzMThfZnJlZV9jaGFuX3Jlc291cmNlczsKKwliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBjb2g5MDEzMThfcHJlcF9zbGF2ZV9zZzsKKwliYXNlLT5kbWFfc2xhdmUuZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gY29oOTAxMzE4X2lzX3R4X2NvbXBsZXRlOworCWJhc2UtPmRtYV9zbGF2ZS5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGNvaDkwMTMxOF9pc3N1ZV9wZW5kaW5nOworCWJhc2UtPmRtYV9zbGF2ZS5kZXZpY2VfdGVybWluYXRlX2FsbCA9IGNvaDkwMTMxOF90ZXJtaW5hdGVfYWxsOworCWJhc2UtPmRtYV9zbGF2ZS5kZXYgPSAmcGRldi0+ZGV2OworCisJZXJyID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmYmFzZS0+ZG1hX3NsYXZlKTsKKworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlZ2lzdGVyX3NsYXZlOworCisJLyogaW5pdCBjaGFubmVscyBmb3IgbWVtY3B5ICovCisJY29oOTAxMzE4X2Jhc2VfaW5pdCgmYmFzZS0+ZG1hX21lbWNweSwgYmFzZS0+cGxhdGZvcm0tPmNoYW5zX21lbWNweSwKKwkJCSAgICBiYXNlKTsKKworCWRtYV9jYXBfemVybyhiYXNlLT5kbWFfbWVtY3B5LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBiYXNlLT5kbWFfbWVtY3B5LmNhcF9tYXNrKTsKKworCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gY29oOTAxMzE4X2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBjb2g5MDEzMThfZnJlZV9jaGFuX3Jlc291cmNlczsKKwliYXNlLT5kbWFfbWVtY3B5LmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBjb2g5MDEzMThfcHJlcF9tZW1jcHk7CisJYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfaXNfdHhfY29tcGxldGUgPSBjb2g5MDEzMThfaXNfdHhfY29tcGxldGU7CisJYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGNvaDkwMTMxOF9pc3N1ZV9wZW5kaW5nOworCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBjb2g5MDEzMThfdGVybWluYXRlX2FsbDsKKwliYXNlLT5kbWFfbWVtY3B5LmRldiA9ICZwZGV2LT5kZXY7CisJZXJyID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmYmFzZS0+ZG1hX21lbWNweSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZWdpc3Rlcl9tZW1jcHk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJJbml0aWFsaXplZCBDT0g5MDEzMTggRE1BIG9uIHZpcnR1YWwgYmFzZSAweCUwOHhcbiIsCisJCSh1MzIpIGJhc2UtPnZpcnRiYXNlKTsKKworCXJldHVybiBlcnI7CisKKyBlcnJfcmVnaXN0ZXJfbWVtY3B5OgorCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmYmFzZS0+ZG1hX3NsYXZlKTsKKyBlcnJfcmVnaXN0ZXJfc2xhdmU6CisJY29oOTAxMzE4X3Bvb2xfZGVzdHJveSgmYmFzZS0+cG9vbCk7CisgZXJyX3Bvb2xfY3JlYXRlOgorCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGJhc2UpOworIGVycl9yZXF1ZXN0X2lycToKKyBlcnJfbm9faXJxOgorCWlvdW5tYXAoYmFzZS0+dmlydGJhc2UpOworIGVycl9ub19pb3JlbWFwOgorCWtmcmVlKGJhc2UpOworIGVycl9hbGxvY19jb2hfZG1hX2NoYW5uZWxzOgorIGVycl9ub19wbGF0Zm9ybWRhdGE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlLT5zdGFydCwKKwkJCSAgIHJlc291cmNlX3NpemUocGRldi0+cmVzb3VyY2UpKTsKKyBlcnJfcmVxdWVzdF9tZW06CisgZXJyX2dldF9yZXNvdXJjZToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjb2g5MDEzMThfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNvaDkwMTMxOF9iYXNlICpiYXNlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmJhc2UtPmRtYV9tZW1jcHkpOworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmYmFzZS0+ZG1hX3NsYXZlKTsKKwljb2g5MDEzMThfcG9vbF9kZXN0cm95KCZiYXNlLT5wb29sKTsKKwlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBiYXNlKTsKKwlrZnJlZShiYXNlKTsKKwlpb3VubWFwKGJhc2UtPnZpcnRiYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2UtPnN0YXJ0LAorCQkJICAgcmVzb3VyY2Vfc2l6ZShwZGV2LT5yZXNvdXJjZSkpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvaDkwMTMxOF9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKGNvaDkwMTMxOF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImNvaDkwMTMxOCIsCisJfSwKK307CisKK2ludCBfX2luaXQgY29oOTAxMzE4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjb2g5MDEzMThfZHJpdmVyLCBjb2g5MDEzMThfcHJvYmUpOworfQorc3Vic3lzX2luaXRjYWxsKGNvaDkwMTMxOF9pbml0KTsKKwordm9pZCBfX2V4aXQgY29oOTAxMzE4X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29oOTAxMzE4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChjb2g5MDEzMThfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBlciBGcmlkZW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOF9sbGkuYyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOF9sbGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTEyMGYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5jCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogZHJpdmVyL2RtYS9jb2g5MDEzMThfbGxpLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgbGxpIGZvciBkbWEKKyAqIEF1dGhvcjogUGVyIEZyaWRlbiA8cGVyLmZyaWRlbkBzdGVyaWNzc29uLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxtYWNoL2NvaDkwMTMxOC5oPgorCisjaW5jbHVkZSAiY29oOTAxMzE4X2xsaS5oIgorCisjaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19VMzAwX0RFQlVHKSkKKyNkZWZpbmUgREVCVUdGU19QT09MX0NPVU5URVJfUkVTRVQocG9vbCkgKHBvb2wtPmRlYnVnZnNfcG9vbF9jb3VudGVyID0gMCkKKyNkZWZpbmUgREVCVUdGU19QT09MX0NPVU5URVJfQUREKHBvb2wsIGFkZCkgKHBvb2wtPmRlYnVnZnNfcG9vbF9jb3VudGVyICs9IGFkZCkKKyNlbHNlCisjZGVmaW5lIERFQlVHRlNfUE9PTF9DT1VOVEVSX1JFU0VUKHBvb2wpCisjZGVmaW5lIERFQlVHRlNfUE9PTF9DT1VOVEVSX0FERChwb29sLCBhZGQpCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjb2g5MDEzMThfbGxpICoKK2NvaDkwMTMxOF9sbGlfbmV4dChzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqZGF0YSkKK3sKKwlpZiAoZGF0YSA9PSBOVUxMIHx8IGRhdGEtPmxpbmtfYWRkciA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAoc3RydWN0IGNvaDkwMTMxOF9sbGkgKikgZGF0YS0+dmlydF9saW5rX2FkZHI7Cit9CisKK2ludCBjb2g5MDEzMThfcG9vbF9jcmVhdGUoc3RydWN0IGNvaDkwMTMxOF9wb29sICpwb29sLAorCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCit7CisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxvY2spOworCXBvb2wtPmRldiA9IGRldjsKKwlwb29sLT5kbWFwb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJsbGlfcG9vbCIsIGRldiwgc2l6ZSwgYWxpZ24sIDApOworCisJREVCVUdGU19QT09MX0NPVU5URVJfUkVTRVQocG9vbCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb2g5MDEzMThfcG9vbF9kZXN0cm95KHN0cnVjdCBjb2g5MDEzMThfcG9vbCAqcG9vbCkKK3sKKworCWRtYV9wb29sX2Rlc3Ryb3kocG9vbC0+ZG1hcG9vbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb2g5MDEzMThfbGxpICoKK2NvaDkwMTMxOF9sbGlfYWxsb2Moc3RydWN0IGNvaDkwMTMxOF9wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCBpOworCXN0cnVjdCBjb2g5MDEzMThfbGxpICpoZWFkOworCXN0cnVjdCBjb2g5MDEzMThfbGxpICpsbGk7CisJc3RydWN0IGNvaDkwMTMxOF9sbGkgKmxsaV9wcmV2OworCWRtYV9hZGRyX3QgcGh5OworCisJaWYgKGxlbiA9PSAwKQorCQlnb3RvIGVycjsKKworCXNwaW5fbG9jaygmcG9vbC0+bG9jayk7CisKKwloZWFkID0gZG1hX3Bvb2xfYWxsb2MocG9vbC0+ZG1hcG9vbCwgR0ZQX05PV0FJVCwgJnBoeSk7CisKKwlpZiAoaGVhZCA9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCURFQlVHRlNfUE9PTF9DT1VOVEVSX0FERChwb29sLCAxKTsKKworCWxsaSA9IGhlYWQ7CisJbGxpLT5waHlfdGhpcyA9IHBoeTsKKworCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgeworCQlsbGlfcHJldiA9IGxsaTsKKworCQlsbGkgPSBkbWFfcG9vbF9hbGxvYyhwb29sLT5kbWFwb29sLCBHRlBfTk9XQUlULCAmcGh5KTsKKworCQlpZiAobGxpID09IE5VTEwpCisJCQlnb3RvIGVycl9jbGVhbl91cDsKKworCQlERUJVR0ZTX1BPT0xfQ09VTlRFUl9BREQocG9vbCwgMSk7CisJCWxsaS0+cGh5X3RoaXMgPSBwaHk7CisKKwkJbGxpX3ByZXYtPmxpbmtfYWRkciA9IHBoeTsKKwkJbGxpX3ByZXYtPnZpcnRfbGlua19hZGRyID0gbGxpOworCX0KKworCWxsaS0+bGlua19hZGRyID0gMHgwMDAwMDAwMFU7CisKKwlzcGluX3VubG9jaygmcG9vbC0+bG9jayk7CisKKwlyZXR1cm4gaGVhZDsKKworIGVycjoKKwlzcGluX3VubG9jaygmcG9vbC0+bG9jayk7CisJcmV0dXJuIE5VTEw7CisKKyBlcnJfY2xlYW5fdXA6CisJbGxpX3ByZXYtPmxpbmtfYWRkciA9IDB4MDAwMDAwMDBVOworCXNwaW5fdW5sb2NrKCZwb29sLT5sb2NrKTsKKwljb2g5MDEzMThfbGxpX2ZyZWUocG9vbCwgJmhlYWQpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIGNvaDkwMTMxOF9sbGlfZnJlZShzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgKnBvb2wsCisJCQlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqKmxsaSkKK3sKKwlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqbDsKKwlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqbmV4dDsKKworCWlmIChsbGkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbCA9ICpsbGk7CisKKwlpZiAobCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJnBvb2wtPmxvY2spOworCisJd2hpbGUgKGwtPmxpbmtfYWRkcikgeworCQluZXh0ID0gbC0+dmlydF9saW5rX2FkZHI7CisJCWRtYV9wb29sX2ZyZWUocG9vbC0+ZG1hcG9vbCwgbCwgbC0+cGh5X3RoaXMpOworCQlERUJVR0ZTX1BPT0xfQ09VTlRFUl9BREQocG9vbCwgLTEpOworCQlsID0gbmV4dDsKKwl9CisJZG1hX3Bvb2xfZnJlZShwb29sLT5kbWFwb29sLCBsLCBsLT5waHlfdGhpcyk7CisJREVCVUdGU19QT09MX0NPVU5URVJfQUREKHBvb2wsIC0xKTsKKworCXNwaW5fdW5sb2NrKCZwb29sLT5sb2NrKTsKKwkqbGxpID0gTlVMTDsKK30KKworaW50Citjb2g5MDEzMThfbGxpX2ZpbGxfbWVtY3B5KHN0cnVjdCBjb2g5MDEzMThfcG9vbCAqcG9vbCwKKwkJCSAgc3RydWN0IGNvaDkwMTMxOF9sbGkgKmxsaSwKKwkJCSAgZG1hX2FkZHJfdCBzb3VyY2UsIHVuc2lnbmVkIGludCBzaXplLAorCQkJICBkbWFfYWRkcl90IGRlc3RpbmF0aW9uLCB1MzIgY3RybF9jaGFpbmVkLAorCQkJICB1MzIgY3RybF9lb20pCit7CisJaW50IHMgPSBzaXplOworCWRtYV9hZGRyX3Qgc3JjID0gc291cmNlOworCWRtYV9hZGRyX3QgZHN0ID0gZGVzdGluYXRpb247CisKKwlsbGktPnNyY19hZGRyID0gc3JjOworCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CisKKwl3aGlsZSAobGxpLT5saW5rX2FkZHIpIHsKKwkJbGxpLT5jb250cm9sID0gY3RybF9jaGFpbmVkIHwgTUFYX0RNQV9QQUNLRVRfU0laRTsKKwkJbGxpLT5zcmNfYWRkciA9IHNyYzsKKwkJbGxpLT5kc3RfYWRkciA9IGRzdDsKKworCQlzIC09IE1BWF9ETUFfUEFDS0VUX1NJWkU7CisJCWxsaSA9IGNvaDkwMTMxOF9sbGlfbmV4dChsbGkpOworCisJCXNyYyArPSBNQVhfRE1BX1BBQ0tFVF9TSVpFOworCQlkc3QgKz0gTUFYX0RNQV9QQUNLRVRfU0laRTsKKwl9CisKKwlsbGktPmNvbnRyb2wgPSBjdHJsX2VvbSB8IHM7CisJbGxpLT5zcmNfYWRkciA9IHNyYzsKKwlsbGktPmRzdF9hZGRyID0gZHN0OworCisJLyogT25lIGlycSBwZXIgc2luZ2xlIHRyYW5zZmVyICovCisJcmV0dXJuIDE7Cit9CisKK2ludAorY29oOTAxMzE4X2xsaV9maWxsX3NpbmdsZShzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgKnBvb2wsCisJCQkgIHN0cnVjdCBjb2g5MDEzMThfbGxpICpsbGksCisJCQkgIGRtYV9hZGRyX3QgYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCSAgZG1hX2FkZHJfdCBkZXZfYWRkciwgdTMyIGN0cmxfY2hhaW5lZCwgdTMyIGN0cmxfZW9tLAorCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IHMgPSBzaXplOworCWRtYV9hZGRyX3Qgc3JjOworCWRtYV9hZGRyX3QgZHN0OworCisKKwlpZiAoZGlyID09IERNQV9UT19ERVZJQ0UpIHsKKwkJc3JjID0gYnVmOworCQlkc3QgPSBkZXZfYWRkcjsKKworCX0gZWxzZSBpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCisJCXNyYyA9IGRldl9hZGRyOworCQlkc3QgPSBidWY7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2hpbGUgKGxsaS0+bGlua19hZGRyKSB7CisJCXNpemVfdCBibG9ja19zaXplID0gTUFYX0RNQV9QQUNLRVRfU0laRTsKKwkJbGxpLT5jb250cm9sID0gY3RybF9jaGFpbmVkIHwgTUFYX0RNQV9QQUNLRVRfU0laRTsKKworCQkvKiBJZiB3ZSBhcmUgb24gdGhlIG5leHQtdG8tZmluYWwgYmxvY2sgYW5kIHRoZXJlIHdpbGwKKwkJICogYmUgbGVzcyB0aGFuIGhhbGYgYSBETUEgcGFja2V0IGxlZnQgZm9yIHRoZSBsYXN0CisJCSAqIGJsb2NrLCB0aGVuIHdlIHdhbnQgdG8gbWFrZSB0aGlzIGJsb2NrIGEgbGl0dGxlCisJCSAqIHNtYWxsZXIgdG8gYmFsYW5jZSB0aGUgc2l6ZXMuIFRoaXMgaXMgbWVhbnQgdG8KKwkJICogYXZvaWQgdG9vIHNtYWxsIHRyYW5zZmVycyBpZiB0aGUgYnVmZmVyIHNpemUgaXMKKwkJICogKE1BWF9ETUFfUEFDS0VUX1NJWkUqTiArIDEpICovCisJCWlmIChzIDwgKE1BWF9ETUFfUEFDS0VUX1NJWkUgKyBNQVhfRE1BX1BBQ0tFVF9TSVpFLzIpKQorCQkJYmxvY2tfc2l6ZSA9IE1BWF9ETUFfUEFDS0VUX1NJWkUvMjsKKworCQlzIC09IGJsb2NrX3NpemU7CisJCWxsaS0+c3JjX2FkZHIgPSBzcmM7CisJCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CisKKwkJbGxpID0gY29oOTAxMzE4X2xsaV9uZXh0KGxsaSk7CisKKwkJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQorCQkJc3JjICs9IGJsb2NrX3NpemU7CisJCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCQlkc3QgKz0gYmxvY2tfc2l6ZTsKKwl9CisKKwlsbGktPmNvbnRyb2wgPSBjdHJsX2VvbSB8IHM7CisJbGxpLT5zcmNfYWRkciA9IHNyYzsKKwlsbGktPmRzdF9hZGRyID0gZHN0OworCisJLyogT25lIGlycSBwZXIgc2luZ2xlIHRyYW5zZmVyICovCisJcmV0dXJuIDE7Cit9CisKK2ludAorY29oOTAxMzE4X2xsaV9maWxsX3NnKHN0cnVjdCBjb2g5MDEzMThfcG9vbCAqcG9vbCwKKwkJICAgICAgc3RydWN0IGNvaDkwMTMxOF9sbGkgKmxsaSwKKwkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBuZW50cywKKwkJICAgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwgdTMyIGN0cmxfY2hhaW5lZCwgdTMyIGN0cmwsCisJCSAgICAgIHUzMiBjdHJsX2xhc3QsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgdTMyIGN0cmxfaXJxX21hc2spCit7CisJaW50IGk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1MzIgY3RybF9zZzsKKwlkbWFfYWRkcl90IHNyYyA9IDA7CisJZG1hX2FkZHJfdCBkc3QgPSAwOworCWludCBuYnJfb2ZfaXJxID0gMDsKKwl1MzIgYnl0ZXNfdG9fdHJhbnNmZXI7CisJdTMyIGVsZW1fc2l6ZTsKKworCWlmIChsbGkgPT0gTlVMTCkKKwkJZ290byBlcnI7CisKKwlzcGluX2xvY2soJnBvb2wtPmxvY2spOworCisJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQorCQlkc3QgPSBkZXZfYWRkcjsKKwllbHNlIGlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQlzcmMgPSBkZXZfYWRkcjsKKwllbHNlCisJCWdvdG8gZXJyOworCisJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIGkpIHsKKwkJaWYgKHNnX2lzX2NoYWluKHNnKSkgeworCQkJLyogc2cgY29udGludWVzIHRvIHRoZSBuZXh0IHNnLWVsZW1lbnQgZG9uJ3QKKwkJCSAqIHNlbmQgY3RybF9maW5pc2ggdW50aWwgdGhlIGxhc3QKKwkJCSAqIHNnLWVsZW1lbnQgaW4gdGhlIGNoYWluCisJCQkgKi8KKwkJCWN0cmxfc2cgPSBjdHJsX2NoYWluZWQ7CisJCX0gZWxzZSBpZiAoaSA9PSBuZW50cyAtIDEpCisJCQljdHJsX3NnID0gY3RybF9sYXN0OworCQllbHNlCisJCQljdHJsX3NnID0gY3RybCA/IGN0cmwgOiBjdHJsX2xhc3Q7CisKKworCQlpZiAoKGN0cmxfc2cgJiBjdHJsX2lycV9tYXNrKSkKKwkJCW5icl9vZl9pcnErKzsKKworCQlpZiAoZGlyID09IERNQV9UT19ERVZJQ0UpCisJCQkvKiBpbmNyZW1lbnQgc291cmNlIGFkZHJlc3MgKi8KKwkJCXNyYyA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJZWxzZQorCQkJLyogaW5jcmVtZW50IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwkJCWRzdCA9ICBzZ19kbWFfYWRkcmVzcyhzZyk7CisKKwkJYnl0ZXNfdG9fdHJhbnNmZXIgPSBzZ19kbWFfbGVuKHNnKTsKKworCQl3aGlsZSAoYnl0ZXNfdG9fdHJhbnNmZXIpIHsKKwkJCXUzMiB2YWw7CisKKwkJCWlmIChieXRlc190b190cmFuc2ZlciA+IE1BWF9ETUFfUEFDS0VUX1NJWkUpIHsKKwkJCQllbGVtX3NpemUgPSBNQVhfRE1BX1BBQ0tFVF9TSVpFOworCQkJCXZhbCA9IGN0cmxfY2hhaW5lZDsKKwkJCX0gZWxzZSB7CisJCQkJZWxlbV9zaXplID0gYnl0ZXNfdG9fdHJhbnNmZXI7CisJCQkJdmFsID0gY3RybF9zZzsKKwkJCX0KKworCQkJbGxpLT5jb250cm9sID0gdmFsIHwgZWxlbV9zaXplOworCQkJbGxpLT5zcmNfYWRkciA9IHNyYzsKKwkJCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CisKKwkJCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQkJCWRzdCArPSBlbGVtX3NpemU7CisJCQllbHNlCisJCQkJc3JjICs9IGVsZW1fc2l6ZTsKKworCQkJQlVHX09OKGxsaS0+bGlua19hZGRyICYgMyk7CisKKwkJCWJ5dGVzX3RvX3RyYW5zZmVyIC09IGVsZW1fc2l6ZTsKKwkJCWxsaSA9IGNvaDkwMTMxOF9sbGlfbmV4dChsbGkpOworCQl9CisKKwl9CisJc3Bpbl91bmxvY2soJnBvb2wtPmxvY2spOworCisJLyogVGhlcmUgY2FuIGJlIG1hbnkgSVJRcyBwZXIgc2cgdHJhbnNmZXIgKi8KKwlyZXR1cm4gbmJyX29mX2lycTsKKyBlcnI6CisJc3Bpbl91bmxvY2soJnBvb2wtPmxvY2spOworCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5oIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZjcxM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMThfbGxpLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBkcml2ZXIvZG1hL2NvaDkwMTMxOF9sbGkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBsbGkgZm9yIGNvaDkwMTMxOAorICogQXV0aG9yOiBQZXIgRnJpZGVuIDxwZXIuZnJpZGVuQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpZm5kZWYgQ09IOTAxMzE4X0xMSV9ICisjZGVmaW5lIENPSDkwMTMxOF9MTElfSAorCisjaW5jbHVkZSA8bWFjaC9jb2g5MDEzMTguaD4KKworc3RydWN0IGRldmljZTsKKworc3RydWN0IGNvaDkwMTMxOF9wb29sIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGRtYV9wb29sICpkbWFwb29sOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWludCBkZWJ1Z2ZzX3Bvb2xfY291bnRlcjsKKyNlbmRpZgorfTsKKworc3RydWN0IGRldmljZTsKKy8qKgorICogY29oOTAxMzE4X3Bvb2xfY3JlYXRlKCkgLSBDcmVhdGVzIGFuIGRtYSBwb29sIGZvciBsbGk6cworICogQHBvb2w6IHBvb2wgaGFuZGxlCisgKiBAZGV2OiBkbWEgZGV2aWNlCisgKiBAbGxpX25icjogbnVtYmVyIG9mIGxsaTpzIGluIHRoZSBwb29sCisgKiBAYWxnaW46IGFkcmVzcyBhbGlnbmVtdG4gb2YgbGxpOnMKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBub25lIHplcm8KKyAqLworaW50IGNvaDkwMTMxOF9wb29sX2NyZWF0ZShzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgKnBvb2wsCisJCQkgIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc2l6ZV90IGxsaV9uYnIsIHNpemVfdCBhbGlnbik7CisKKy8qKgorICogY29oOTAxMzE4X3Bvb2xfZGVzdHJveSgpIC0gRGVzdHJveXMgdGhlIGRtYSBwb29sCisgKiBAcG9vbDogcG9vbCBoYW5kbGUKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBub25lIHplcm8KKyAqLworaW50IGNvaDkwMTMxOF9wb29sX2Rlc3Ryb3koc3RydWN0IGNvaDkwMTMxOF9wb29sICpwb29sKTsKKworLyoqCisgKiBjb2g5MDEzMThfbGxpX2FsbG9jKCkgLSBBbGxvY2F0ZXMgYSBsaW5rZWQgbGlzdAorICoKKyAqIEBwb29sOiBwb29sIGhhbmRsZQorICogQGxlbjogbGVuZ3RoIHRvIGxpc3QKKyAqIHJldHVybjogbm9uZSBOVUxMIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIE5VTEwKKyAqLworc3RydWN0IGNvaDkwMTMxOF9sbGkgKgorY29oOTAxMzE4X2xsaV9hbGxvYyhzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgKnBvb2wsCisJCSAgICB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoqCisgKiBjb2g5MDEzMThfbGxpX2ZyZWUoKSAtIFJldHVybnMgdGhlIGxpbmtlZCBsaXN0IGl0ZW1zIHRvIHRoZSBwb29sCisgKiBAcG9vbDogcG9vbCBoYW5kbGUKKyAqIEBsbGk6IHJlZmVyZW5jZSB0byBsbGkgcG9pbnRlciB0byBiZSBmcmVlZAorICovCit2b2lkIGNvaDkwMTMxOF9sbGlfZnJlZShzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgKnBvb2wsCisJCQlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqKmxsaSk7CisKKy8qKgorICogY29oOTAxMzE4X2xsaV9maWxsX21lbWNweSgpIC0gUHJlcGFyZXMgdGhlIGxsaTpzIGZvciBkbWEgbWVtY3B5CisgKiBAcG9vbDogcG9vbCBoYW5kbGUKKyAqIEBsbGk6IGFsbG9jYXRlZCBsbGkKKyAqIEBzcmM6IHNyYyBhZGRyZXNzCisgKiBAc2l6ZTogdHJhbnNmZXIgc2l6ZQorICogQGRzdDogZGVzdGluYXRpb24gYWRkcmVzcworICogQGN0cmxfY2hhaW5lZDogY3RybCBmb3IgY2hhaW5lZCBsbGkKKyAqIEBjdHJsX2xhc3Q6IGN0cmwgZm9yIHRoZSBsYXN0IGxsaQorICogcmV0dXJucyBudW1iZXIgb2YgQ1BVIGludGVycnVwdHMgZm9yIHRoZSBsbGksIG5lZ2F0aXZlIG9uIGVycm9yLgorICovCitpbnQKK2NvaDkwMTMxOF9sbGlfZmlsbF9tZW1jcHkoc3RydWN0IGNvaDkwMTMxOF9wb29sICpwb29sLAorCQkJICBzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqbGxpLAorCQkJICBkbWFfYWRkcl90IHNyYywgdW5zaWduZWQgaW50IHNpemUsCisJCQkgIGRtYV9hZGRyX3QgZHN0LCB1MzIgY3RybF9jaGFpbmVkLCB1MzIgY3RybF9sYXN0KTsKKworLyoqCisgKiBjb2g5MDEzMThfbGxpX2ZpbGxfc2luZ2xlKCkgLSBQcmVwYXJlcyB0aGUgbGxpOnMgZm9yIGRtYSBzaW5nbGUgdHJhbnNmZXIKKyAqIEBwb29sOiBwb29sIGhhbmRsZQorICogQGxsaTogYWxsb2NhdGVkIGxsaQorICogQGJ1ZjogdHJhbnNmZXIgYnVmZmVyCisgKiBAc2l6ZTogdHJhbnNmZXIgc2l6ZQorICogQGRldl9hZGRyOiBhZGRyZXNzIG9mIHBlcmlwaGFsCisgKiBAY3RybF9jaGFpbmVkOiBjdHJsIGZvciBjaGFpbmVkIGxsaQorICogQGN0cmxfbGFzdDogY3RybCBmb3IgdGhlIGxhc3QgbGxpCisgKiBAZGlyOiBkaXJlY3Rpb24gb2YgdHJhbnNmZXIgKHRvIG9yIGZyb20gZGV2aWNlKQorICogcmV0dXJucyBudW1iZXIgb2YgQ1BVIGludGVycnVwdHMgZm9yIHRoZSBsbGksIG5lZ2F0aXZlIG9uIGVycm9yLgorICovCitpbnQKK2NvaDkwMTMxOF9sbGlfZmlsbF9zaW5nbGUoc3RydWN0IGNvaDkwMTMxOF9wb29sICpwb29sLAorCQkJICBzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqbGxpLAorCQkJICBkbWFfYWRkcl90IGJ1ZiwgdW5zaWduZWQgaW50IHNpemUsCisJCQkgIGRtYV9hZGRyX3QgZGV2X2FkZHIsIHUzMiBjdHJsX2NoYWluZWQsIHUzMiBjdHJsX2xhc3QsCisJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisKKy8qKgorICogY29oOTAxMzE4X2xsaV9maWxsX3NpbmdsZSgpIC0gUHJlcGFyZXMgdGhlIGxsaTpzIGZvciBkbWEgc2NhdHRlciBsaXN0IHRyYW5zZmVyCisgKiBAcG9vbDogcG9vbCBoYW5kbGUKKyAqIEBsbGk6IGFsbG9jYXRlZCBsbGkKKyAqIEBzZzogc2NhdHRlciBnYXRoZXIgbGlzdAorICogQG5lbnRzOiBudW1iZXIgb2YgZW50cmllcyBpbiBzZworICogQGRldl9hZGRyOiBhZGRyZXNzIG9mIHBlcmlwaGFsCisgKiBAY3RybF9jaGFpbmVkOiBjdHJsIGZvciBjaGFpbmVkIGxsaQorICogQGN0cmw6IGN0cmwgb2YgbWlkZGxlIGxsaQorICogQGN0cmxfbGFzdDogY3RybCBmb3IgdGhlIGxhc3QgbGxpCisgKiBAZGlyOiBkaXJlY3Rpb24gb2YgdHJhbnNmZXIgKHRvIG9yIGZyb20gZGV2aWNlKQorICogQGN0cmxfaXJxX21hc2s6IGN0cmwgbWFzayBmb3IgQ1BVIGludGVycnVwdAorICogcmV0dXJucyBudW1iZXIgb2YgQ1BVIGludGVycnVwdHMgZm9yIHRoZSBsbGksIG5lZ2F0aXZlIG9uIGVycm9yLgorICovCitpbnQKK2NvaDkwMTMxOF9sbGlfZmlsbF9zZyhzdHJ1Y3QgY29oOTAxMzE4X3Bvb2wgKnBvb2wsCisJCSAgICAgIHN0cnVjdCBjb2g5MDEzMThfbGxpICpsbGksCisJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cywKKwkJICAgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwgdTMyIGN0cmxfY2hhaW5lZCwKKwkJICAgICAgdTMyIGN0cmwsIHUzMiBjdHJsX2xhc3QsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgdTMyIGN0cmxfaXJxX21hc2spOworCisjZW5kaWYgLyogQ09IOTAxMzE4X0xMSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCmluZGV4IDhmOTkzNTQuLjZmNTFhMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC0zMjYsMTQgKzMyNiw3IEBACiAgKi8KIHN0cnVjdCBkbWFfY2hhbiAqZG1hX2ZpbmRfY2hhbm5lbChlbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlIHR4X3R5cGUpCiB7Ci0Jc3RydWN0IGRtYV9jaGFuICpjaGFuOwotCWludCBjcHU7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JY2hhbiA9IHBlcl9jcHVfcHRyKGNoYW5uZWxfdGFibGVbdHhfdHlwZV0sIGNwdSktPmNoYW47Ci0JcHV0X2NwdSgpOwotCi0JcmV0dXJuIGNoYW47CisJcmV0dXJuIHRoaXNfY3B1X3JlYWQoY2hhbm5lbF90YWJsZVt0eF90eXBlXS0+Y2hhbik7CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9maW5kX2NoYW5uZWwpOwogCkBAIC04NTcsNyArODUwLDYgQEAKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OwogCWRtYV9hZGRyX3QgZG1hX2Rlc3QsIGRtYV9zcmM7CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKLQlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIHNyYywgbGVuLCBETUFfVE9fREVWSUNFKTsKQEAgLTg3NiwxMCArODY4LDEwIEBACiAJdHgtPmNhbGxiYWNrID0gTlVMTDsKIAljb29raWUgPSB0eC0+dHhfc3VibWl0KHR4KTsKIAotCWNwdSA9IGdldF9jcHUoKTsKLQlwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgY3B1KS0+Ynl0ZXNfdHJhbnNmZXJyZWQgKz0gbGVuOwotCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5tZW1jcHlfY291bnQrKzsKLQlwdXRfY3B1KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX190aGlzX2NwdV9hZGQoY2hhbi0+bG9jYWwtPmJ5dGVzX3RyYW5zZmVycmVkLCBsZW4pOworCV9fdGhpc19jcHVfaW5jKGNoYW4tPmxvY2FsLT5tZW1jcHlfY291bnQpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlyZXR1cm4gY29va2llOwogfQpAQCAtOTA2LDcgKzg5OCw2IEBACiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKIAlkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfc3JjOwogCWRtYV9jb29raWVfdCBjb29raWU7Ci0JaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCBrZGF0YSwgbGVuLCBETUFfVE9fREVWSUNFKTsKQEAgLTkyMywxMCArOTE0LDEwIEBACiAJdHgtPmNhbGxiYWNrID0gTlVMTDsKIAljb29raWUgPSB0eC0+dHhfc3VibWl0KHR4KTsKIAotCWNwdSA9IGdldF9jcHUoKTsKLQlwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgY3B1KS0+Ynl0ZXNfdHJhbnNmZXJyZWQgKz0gbGVuOwotCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5tZW1jcHlfY291bnQrKzsKLQlwdXRfY3B1KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX190aGlzX2NwdV9hZGQoY2hhbi0+bG9jYWwtPmJ5dGVzX3RyYW5zZmVycmVkLCBsZW4pOworCV9fdGhpc19jcHVfaW5jKGNoYW4tPmxvY2FsLT5tZW1jcHlfY291bnQpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlyZXR1cm4gY29va2llOwogfQpAQCAtOTU1LDcgKzk0Niw2IEBACiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKIAlkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfc3JjOwogCWRtYV9jb29raWVfdCBjb29raWU7Ci0JaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZG1hX3NyYyA9IGRtYV9tYXBfcGFnZShkZXYtPmRldiwgc3JjX3BnLCBzcmNfb2ZmLCBsZW4sIERNQV9UT19ERVZJQ0UpOwpAQCAtOTczLDEwICs5NjMsMTAgQEAKIAl0eC0+Y2FsbGJhY2sgPSBOVUxMOwogCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOwogCi0JY3B1ID0gZ2V0X2NwdSgpOwotCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5ieXRlc190cmFuc2ZlcnJlZCArPSBsZW47Ci0JcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGNwdSktPm1lbWNweV9jb3VudCsrOwotCXB1dF9jcHUoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX3RoaXNfY3B1X2FkZChjaGFuLT5sb2NhbC0+Ynl0ZXNfdHJhbnNmZXJyZWQsIGxlbik7CisJX190aGlzX2NwdV9pbmMoY2hhbi0+bG9jYWwtPm1lbWNweV9jb3VudCk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAogCXJldHVybiBjb29raWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKaW5kZXggYTMyYTRjZi4uOGI5MDUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwpAQCAtMjk4LDEwICsyOTgsNiBAQAogCiAJCXRvdGFsX3Rlc3RzKys7CiAKLQkJbGVuID0gZG1hdGVzdF9yYW5kb20oKSAlIHRlc3RfYnVmX3NpemUgKyAxOwotCQlzcmNfb2ZmID0gZG1hdGVzdF9yYW5kb20oKSAlICh0ZXN0X2J1Zl9zaXplIC0gbGVuICsgMSk7Ci0JCWRzdF9vZmYgPSBkbWF0ZXN0X3JhbmRvbSgpICUgKHRlc3RfYnVmX3NpemUgLSBsZW4gKyAxKTsKLQogCQkvKiBob25vciBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zICovCiAJCWlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX01FTUNQWSkKIAkJCWFsaWduID0gZGV2LT5jb3B5X2FsaWduOwpAQCAtMzEwLDcgKzMwNiwxOSBAQAogCQllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1BRKQogCQkJYWxpZ24gPSBkZXYtPnBxX2FsaWduOwogCisJCWlmICgxIDw8IGFsaWduID4gdGVzdF9idWZfc2l6ZSkgeworCQkJcHJfZXJyKCIldS1ieXRlIGJ1ZmZlciB0b28gc21hbGwgZm9yICVkLWJ5dGUgYWxpZ25tZW50XG4iLAorCQkJICAgICAgIHRlc3RfYnVmX3NpemUsIDEgPDwgYWxpZ24pOworCQkJYnJlYWs7CisJCX0KKworCQlsZW4gPSBkbWF0ZXN0X3JhbmRvbSgpICUgdGVzdF9idWZfc2l6ZSArIDE7CiAJCWxlbiA9IChsZW4gPj4gYWxpZ24pIDw8IGFsaWduOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IDEgPDwgYWxpZ247CisJCXNyY19vZmYgPSBkbWF0ZXN0X3JhbmRvbSgpICUgKHRlc3RfYnVmX3NpemUgLSBsZW4gKyAxKTsKKwkJZHN0X29mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAodGVzdF9idWZfc2l6ZSAtIGxlbiArIDEpOworCiAJCXNyY19vZmYgPSAoc3JjX29mZiA+PiBhbGlnbikgPDwgYWxpZ247CiAJCWRzdF9vZmYgPSAoZHN0X29mZiA+PiBhbGlnbikgPDwgYWxpZ247CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCAyZWVhODIzLi4yODViZWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0xNDI3LDcgKzE0MjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZHdfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkd19kZXZfcG1fb3BzID0gewogCS5zdXNwZW5kX25vaXJxID0gZHdfc3VzcGVuZF9ub2lycSwKIAkucmVzdW1lX25vaXJxID0gZHdfcmVzdW1lX25vaXJxLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMgYi9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCmluZGV4IDY0NWNhOGQuLmNhNmU2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW9wLWFkbWEuYwpAQCAtMTQ3MCw3ICsxNDcwLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0LCBwZGV2LT5uYW1lKSkKKwkJCQlyZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJYWRldiA9IGt6YWxsb2Moc2l6ZW9mKCphZGV2KSwgR0ZQX0tFUk5FTCk7CkBAIC0xNTQyLDcgKzE1NDIsNyBAQAogCWlvcF9jaGFuLT5kZXZpY2UgPSBhZGV2OwogCiAJaW9wX2NoYW4tPm1tcl9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJCQkJCXJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFpb3BfY2hhbi0+bW1yX2Jhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9pb3BfY2hhbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3BwYzR4eC9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL3BwYzR4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QyNTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvcHBjNHh4L01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19BTUNDX1BQQzQ0MFNQRV9BRE1BKSArPSBhZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3BwYzR4eC9hZG1hLmMgYi9kcml2ZXJzL2RtYS9wcGM0eHgvYWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzQ3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9wcGM0eHgvYWRtYS5jCkBAIC0wLDAgKzEsNTAyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcuCisgKgorICogQXV0aG9yOiBZdXJpIFRpa2hvbm92IDx5dXJAZW1jcmFmdC5jb20+CisgKgorICogRnVydGhlciBwb3J0aW5nIHRvIGFyY2gvcG93ZXJwYyBieQorICogCUFuYXRvbGlqIEd1c3RzY2hpbiA8YWd1c3RAZGVueC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKworLyoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBhc3luY2hyb3Vub3VzIERNQSBjb3B5IGFuZCBSQUlEIGVuZ2luZXMgYXZhaWxhYmxlCisgKiBvbiB0aGUgQU1DQyBQUEM0NDBTUGUgUHJvY2Vzc29ycy4KKyAqIEJhc2VkIG9uIHRoZSBJbnRlbCBYc2NhbGUoUikgZmFtaWx5IG9mIEkvTyBQcm9jZXNzb3JzIChJT1AgMzJ4LCAzM3gsIDEzNHgpCisgKiBBRE1BIGRyaXZlciB3cml0dGVuIGJ5IEQuV2lsbGlhbXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vZGNyLXJlZ3MuaD4KKyNpbmNsdWRlICJhZG1hLmgiCisKK2VudW0gcHBjX2FkbWFfaW5pdF9jb2RlIHsKKwlQUENfQURNQV9JTklUX09LID0gMCwKKwlQUENfQURNQV9JTklUX01FTVJFUywKKwlQUENfQURNQV9JTklUX01FTVJFRywKKwlQUENfQURNQV9JTklUX0FMTE9DLAorCVBQQ19BRE1BX0lOSVRfQ09IRVJFTlQsCisJUFBDX0FETUFfSU5JVF9DSEFOTkVMLAorCVBQQ19BRE1BX0lOSVRfSVJRMSwKKwlQUENfQURNQV9JTklUX0lSUTIsCisJUFBDX0FETUFfSU5JVF9SRUdJU1RFUgorfTsKKworc3RhdGljIGNoYXIgKnBwY19hZG1hX2Vycm9yc1tdID0geworCVtQUENfQURNQV9JTklUX09LXSA9ICJvayIsCisJW1BQQ19BRE1BX0lOSVRfTUVNUkVTXSA9ICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZSIsCisJW1BQQ19BRE1BX0lOSVRfTUVNUkVHXSA9ICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVnaW9uIiwKKwlbUFBDX0FETUFfSU5JVF9BTExPQ10gPSAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWRldiAiCisJCQkJInN0cnVjdHVyZSIsCisJW1BQQ19BRE1BX0lOSVRfQ09IRVJFTlRdID0gImZhaWxlZCB0byBhbGxvY2F0ZSBjb2hlcmVudCBtZW1vcnkgZm9yICIKKwkJCQkgICAiaGFyZHdhcmUgZGVzY3JpcHRvcnMiLAorCVtQUENfQURNQV9JTklUX0NIQU5ORUxdID0gImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNoYW5uZWwiLAorCVtQUENfQURNQV9JTklUX0lSUTFdID0gImZhaWxlZCB0byByZXF1ZXN0IGZpcnN0IGlycSIsCisJW1BQQ19BRE1BX0lOSVRfSVJRMl0gPSAiZmFpbGVkIHRvIHJlcXVlc3Qgc2Vjb25kIGlycSIsCisJW1BQQ19BRE1BX0lOSVRfUkVHSVNURVJdID0gImZhaWxlZCB0byByZWdpc3RlciBkbWEgYXN5bmMgZGV2aWNlIiwKK307CisKK3N0YXRpYyBlbnVtIHBwY19hZG1hX2luaXRfY29kZQorcHBjNDQwc3BlX2FkbWFfZGV2aWNlc1tQUEM0NDBTUEVfQURNQV9FTkdJTkVTX05VTV07CisKK3N0cnVjdCBwcGNfZG1hX2NoYW5fcmVmIHsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworLyogVGhlIGxpc3Qgb2YgY2hhbm5lbHMgZXhwb3J0ZWQgYnkgcHBjNDQwc3BlIEFETUEgKi8KK3N0cnVjdCBsaXN0X2hlYWQKK3BwYzQ0MHNwZV9hZG1hX2NoYW5fbGlzdCA9IExJU1RfSEVBRF9JTklUKHBwYzQ0MHNwZV9hZG1hX2NoYW5fbGlzdCk7CisKKy8qIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB3YW50IHRvIHJlZmV0Y2ggdGhlIHhvciBjaGFpbiBpbiB0aGUgaW50ZXJydXB0CisgKiBoYW5kbGVyCisgKi8KK3N0YXRpYyB1MzIgZG9feG9yX3JlZmV0Y2g7CisKKy8qIFBvaW50ZXIgdG8gRE1BMCwgRE1BMSBDUC9DUyBGSUZPICovCitzdGF0aWMgdm9pZCAqcHBjNDQwc3BlX2RtYV9maWZvX2J1ZjsKKworLyogUG9pbnRlcnMgdG8gbGFzdCBzdWJtaXR0ZWQgdG8gRE1BMCwgRE1BMSBDREJzICovCitzdGF0aWMgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqY2hhbl9sYXN0X3N1YlszXTsKK3N0YXRpYyBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpjaGFuX2ZpcnN0X2NkYlszXTsKKworLyogUG9pbnRlciB0byBsYXN0IGxpbmtlZCBhbmQgc3VibWl0dGVkIHhvciBDQiAqLworc3RhdGljIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnhvcl9sYXN0X2xpbmtlZDsKK3N0YXRpYyBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICp4b3JfbGFzdF9zdWJtaXQ7CisKKy8qIFRoaXMgYXJyYXkgaXMgdXNlZCBpbiBkYXRhLWNoZWNrIG9wZXJhdGlvbnMgZm9yIHN0b3JpbmcgYSBwYXR0ZXJuICovCitzdGF0aWMgY2hhciBwcGM0NDBzcGVfcXdvcmRbMTZdOworCitzdGF0aWMgYXRvbWljX3QgcHBjNDQwc3BlX2FkbWFfZXJyX2lycV9yZWY7CitzdGF0aWMgZGNyX2hvc3RfdCBwcGM0NDBzcGVfbXFfZGNyX2hvc3Q7CitzdGF0aWMgdW5zaWduZWQgaW50IHBwYzQ0MHNwZV9tcV9kY3JfbGVuOworCisvKiBTaW5jZSBSWE9SIG9wZXJhdGlvbnMgdXNlIHRoZSBjb21tb24gcmVnaXN0ZXIgKE1RMF9DRjJIKSBmb3Igc2V0dGluZy11cAorICogdGhlIGJsb2NrIHNpemUgaW4gdHJhbnNhY3Rpb25zLCB0aGVuIHdlIGRvIG5vdCBhbGxvdyB0byBhY3RpdmF0ZSBtb3JlIHRoYW4KKyAqIG9ubHkgb25lIFJYT1IgdHJhbnNhY3Rpb25zIHNpbXVsdGFuZW91c2x5LiBTbyB1c2UgdGhpcyB2YXIgdG8gc3RvcmUKKyAqIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBpcyBSWE9SIGN1cnJlbnRseSBhY3RpdmUgKFBQQzQ0MFNQRV9SWE9SX1JVTiBiaXQgaXMKKyAqIHNldCkgb3Igbm90IChQUEM0NDBTUEVfUlhPUl9SVU4gaXMgY2xlYXIpLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGM0NDBzcGVfcnhvcl9zdGF0ZTsKKworLyogVGhlc2UgYXJlIHVzZWQgaW4gZW5hYmxlICYgY2hlY2sgcm91dGluZXMKKyAqLworc3RhdGljIHUzMiBwcGM0NDBzcGVfcjZfZW5hYmxlZDsKK3N0YXRpYyBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqcHBjNDQwc3BlX3I2X3RjaGFuOworc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHBwYzQ0MHNwZV9yNl90ZXN0X2NvbXA7CisKK3N0YXRpYyBpbnQgcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3JfcHJlcF9zcmMoCisJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCXN0cnVjdCBwcGM0NDBzcGVfcnhvciAqY3Vyc29yLCBpbnQgaW5kZXgsCisJCWludCBzcmNfY250LCB1MzIgYWRkcik7CitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9zZXRfc3JjKAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQlpbnQgaW5kZXgsIGRtYV9hZGRyX3QgYWRkcik7CitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9zZXRfbXVsdCgKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJaW50IGluZGV4LCB1OCBtdWx0KTsKKworI2lmZGVmIEFETUFfTExfREVCVUcKKyNkZWZpbmUgQURNQV9MTF9EQkcoeCkgKHsgaWYgKDEpIHg7IDA7IH0pCisjZWxzZQorI2RlZmluZSBBRE1BX0xMX0RCRyh4KSAoeyBpZiAoMCkgeDsgMDsgfSkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcmludF9jYihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwgdm9pZCAqYmxvY2spCit7CisJc3RydWN0IGRtYV9jZGIgKmNkYjsKKwlzdHJ1Y3QgeG9yX2NiICpjYjsKKwlpbnQgaTsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWNkYiA9IGJsb2NrOworCisJCXByX2RlYnVnKCJDREIgYXQgJXAgWyVkXTpcbiIKKwkJCSJcdCBhdHRyIDB4JTAyeCBvcGMgMHglMDJ4IGNudCAweCUwOHhcbiIKKwkJCSJcdCBzZzF1IDB4JTA4eCBzZzFsIDB4JTA4eFxuIgorCQkJIlx0IHNnMnUgMHglMDh4IHNnMmwgMHglMDh4XG4iCisJCQkiXHQgc2czdSAweCUwOHggc2czbCAweCUwOHhcbiIsCisJCQljZGIsIGNoYW4tPmRldmljZS0+aWQsCisJCQljZGItPmF0dHIsIGNkYi0+b3BjLCBsZTMyX3RvX2NwdShjZGItPmNudCksCisJCQlsZTMyX3RvX2NwdShjZGItPnNnMXUpLCBsZTMyX3RvX2NwdShjZGItPnNnMWwpLAorCQkJbGUzMl90b19jcHUoY2RiLT5zZzJ1KSwgbGUzMl90b19jcHUoY2RiLT5zZzJsKSwKKwkJCWxlMzJfdG9fY3B1KGNkYi0+c2czdSksIGxlMzJfdG9fY3B1KGNkYi0+c2czbCkKKwkJKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljYiA9IGJsb2NrOworCisJCXByX2RlYnVnKCJDQiBhdCAlcCBbJWRdOlxuIgorCQkJIlx0IGNiYyAweCUwOHggY2JiYyAweCUwOHggY2JzIDB4JTA4eFxuIgorCQkJIlx0IGNidGFoIDB4JTA4eCBjYnRhbCAweCUwOHhcbiIKKwkJCSJcdCBjYmxhaCAweCUwOHggY2JsYWwgMHglMDh4XG4iLAorCQkJY2IsIGNoYW4tPmRldmljZS0+aWQsCisJCQljYi0+Y2JjLCBjYi0+Y2JiYywgY2ItPmNicywKKwkJCWNiLT5jYnRhaCwgY2ItPmNidGFsLAorCQkJY2ItPmNibGFoLCBjYi0+Y2JsYWwpOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJaWYgKGkgJiYgIWNiLT5vcHNbaV0uaCAmJiAhY2ItPm9wc1tpXS5sKQorCQkJCWNvbnRpbnVlOworCQkJcHJfZGVidWcoIlx0IG9wc1slMmRdOiBoIDB4JTA4eCBsIDB4JTA4eFxuIiwKKwkJCQlpLCBjYi0+b3BzW2ldLmgsIGNiLT5vcHNbaV0ubCk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9jYl9saXN0KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLAorCQkJICBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICppdGVyKQoreworCWZvciAoOyBpdGVyOyBpdGVyID0gaXRlci0+aHdfbmV4dCkKKwkJcHJpbnRfY2IoY2hhbiwgaXRlci0+aHdfZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfZG1hX3hvcl9kYmcoaW50IGlkLCBkbWFfYWRkcl90IGRzdCwgZG1hX2FkZHJfdCAqc3JjLAorCQkJICAgICB1bnNpZ25lZCBpbnQgc3JjX2NudCkKK3sKKwlpbnQgaTsKKworCXByX2RlYnVnKCJcbiVzKCVkKTpcbnNyYzogIiwgX19mdW5jX18sIGlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKQorCQlwcl9kZWJ1ZygiXHQweCUwMTZsbHggIiwgc3JjW2ldKTsKKwlwcl9kZWJ1ZygiZHN0OlxuXHQweCUwMTZsbHhcbiIsIGRzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfZG1hX3BxX2RiZyhpbnQgaWQsIGRtYV9hZGRyX3QgKmRzdCwgZG1hX2FkZHJfdCAqc3JjLAorCQkJICAgIHVuc2lnbmVkIGludCBzcmNfY250KQoreworCWludCBpOworCisJcHJfZGVidWcoIlxuJXMoJWQpOlxuc3JjOiAiLCBfX2Z1bmNfXywgaWQpOworCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCisJCXByX2RlYnVnKCJcdDB4JTAxNmxseCAiLCBzcmNbaV0pOworCXByX2RlYnVnKCJkc3Q6ICIpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXByX2RlYnVnKCJcdDB4JTAxNmxseCAiLCBkc3RbaV0pOworfQorCitzdGF0aWMgdm9pZCBwcmVwX2RtYV9wcXplcm9fc3VtX2RiZyhpbnQgaWQsIGRtYV9hZGRyX3QgKnNyYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHNyY19jbnQsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNjZikKK3sKKwlpbnQgaTsKKworCXByX2RlYnVnKCJcbiVzKCVkKTpcbnNyYyhjb2VmKTogIiwgX19mdW5jX18sIGlkKTsKKwlpZiAoc2NmKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCisJCQlwcl9kZWJ1ZygiXHQweCUwMTZsbHgoMHglMDJ4KSAiLCBzcmNbaV0sIHNjZltpXSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKKwkJCXByX2RlYnVnKCJcdDB4JTAxNmxseChubykgIiwgc3JjW2ldKTsKKwl9CisKKwlwcl9kZWJ1ZygiZHN0OiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlwcl9kZWJ1ZygiXHQweCUwMTZsbHggIiwgc3JjW3NyY19jbnQgKyBpXSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmQgKERlc2NyaXB0b3IpIEJsb2NrcyBsb3ctbGV2ZWwgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX2luaXRfaW50ZXJydXB0IC0gaW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBmb3IgSU5URVJSVVBUCisgKiBwc2V1ZG8gb3BlcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX2luaXRfaW50ZXJydXB0KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJCSAgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHhvcl9jYiAqcDsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJcCA9IGRlc2MtPmh3X2Rlc2M7CisJCW1lbXNldChkZXNjLT5od19kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHhvcl9jYikpOworCQkvKiBOT1Agd2l0aCBDb21tYW5kIEJsb2NrIENvbXBsZXRlIEVuYWJsZSAqLworCQlwLT5jYmMgPSBYT1JfQ0JDUl9DQkNFX0JJVDsKKwkJYnJlYWs7CisJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwljYXNlIFBQQzQ0MFNQRV9ETUExX0lEOgorCQltZW1zZXQoZGVzYy0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisJCS8qIE5PUCB3aXRoIGludGVycnVwdCAqLworCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJmRlc2MtPmZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJVbnN1cHBvcnRlZCBpZCAlZCBpbiAlc1xuIiwgY2hhbi0+ZGV2aWNlLT5pZCwKKwkJCQlfX2Z1bmNfXyk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19pbml0X251bGxfeG9yIC0gaW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBmb3IgTlVMTCBYT1IKKyAqIHBzZXVkbyBvcGVyYXRpb24KKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2Rlc2NfaW5pdF9udWxsX3hvcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjKQoreworCW1lbXNldChkZXNjLT5od19kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHhvcl9jYikpOworCWRlc2MtPmh3X25leHQgPSBOVUxMOworCWRlc2MtPnNyY19jbnQgPSAwOworCWRlc2MtPmRzdF9jbnQgPSAxOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX2luaXRfeG9yIC0gaW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBmb3IgWE9SIG9wZXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfZGVzY19pbml0X3hvcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQkJCQkgaW50IHNyY19jbnQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHhvcl9jYiAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisKKwltZW1zZXQoZGVzYy0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCB4b3JfY2IpKTsKKwlkZXNjLT5od19uZXh0ID0gTlVMTDsKKwlkZXNjLT5zcmNfY250ID0gc3JjX2NudDsKKwlkZXNjLT5kc3RfY250ID0gMTsKKworCWh3X2Rlc2MtPmNiYyA9IFhPUl9DQkNSX1RHVF9CSVQgfCBzcmNfY250OworCWlmIChmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCkKKwkJLyogRW5hYmxlIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisJCWh3X2Rlc2MtPmNiYyB8PSBYT1JfQ0JDUl9DQkNFX0JJVDsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19pbml0X2RtYTJwcSAtIGluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgZm9yIFBRCisgKiBvcGVyYXRpb24gaW4gRE1BMiBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX2luaXRfZG1hMnBxKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCWludCBkc3RfY250LCBpbnQgc3JjX2NudCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgeG9yX2NiICpod19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKworCW1lbXNldChkZXNjLT5od19kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHhvcl9jYikpOworCWRlc2MtPmh3X25leHQgPSBOVUxMOworCWRlc2MtPnNyY19jbnQgPSBzcmNfY250OworCWRlc2MtPmRzdF9jbnQgPSBkc3RfY250OworCW1lbXNldChkZXNjLT5yZXZlcnNlX2ZsYWdzLCAwLCBzaXplb2YoZGVzYy0+cmV2ZXJzZV9mbGFncykpOworCWRlc2MtPmRlc2NzX3Blcl9vcCA9IDA7CisKKwlod19kZXNjLT5jYmMgPSBYT1JfQ0JDUl9UR1RfQklUOworCWlmIChmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCkKKwkJLyogRW5hYmxlIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisJCWh3X2Rlc2MtPmNiYyB8PSBYT1JfQ0JDUl9DQkNFX0JJVDsKK30KKworI2RlZmluZSBETUFfQ1RSTF9GTEFHU19MQVNUCURNQV9QUkVQX0ZFTkNFCisjZGVmaW5lIERNQV9QUkVQX1pFUk9fUAkJKERNQV9DVFJMX0ZMQUdTX0xBU1QgPDwgMSkKKyNkZWZpbmUgRE1BX1BSRVBfWkVST19RCQkoRE1BX1BSRVBfWkVST19QIDw8IDEpCisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2NfaW5pdF9kbWEwMXBxIC0gaW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvcnMgZm9yIFBRIG9wZXJhdGlvbgorICogd2l0aCBETUEwLzEKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2Rlc2NfaW5pdF9kbWEwMXBxKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJaW50IGRzdF9jbnQsIGludCBzcmNfY250LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCXVuc2lnbmVkIGxvbmcgb3ApCit7CisJc3RydWN0IGRtYV9jZGIgKmh3X2Rlc2M7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlcjsKKwl1OCBkb3BjOworCisJLyogQ29tbW9uIGluaXRpYWxpemF0aW9uIG9mIGEgUFEgZGVzY3JpcHRvcnMgY2hhaW4gKi8KKwlzZXRfYml0cyhvcCwgJmRlc2MtPmZsYWdzKTsKKwlkZXNjLT5zcmNfY250ID0gc3JjX2NudDsKKwlkZXNjLT5kc3RfY250ID0gZHN0X2NudDsKKworCS8qIFdYT1IgTVVMVElDQVNUIGlmIGJvdGggUCBhbmQgUSBhcmUgYmVpbmcgY29tcHV0ZWQKKwkgKiBNVl9TRzFfU0cyIGlmIFEgb25seQorCSAqLworCWRvcGMgPSAoZGVzYy0+ZHN0X2NudCA9PSBETUFfREVTVF9NQVhfTlVNKSA/CisJCURNQV9DREJfT1BDX01VTFRJQ0FTVCA6IERNQV9DREJfT1BDX01WX1NHMV9TRzI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZkZXNjLT5ncm91cF9saXN0LCBjaGFpbl9ub2RlKSB7CisJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQltZW1zZXQoaXRlci0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisKKwkJaWYgKGxpa2VseSghbGlzdF9pc19sYXN0KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCSZkZXNjLT5ncm91cF9saXN0KSkpIHsKKwkJCS8qIHNldCAnbmV4dCcgcG9pbnRlciAqLworCQkJaXRlci0+aHdfbmV4dCA9IGxpc3RfZW50cnkoaXRlci0+Y2hhaW5fbm9kZS5uZXh0LAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsIGNoYWluX25vZGUpOworCQkJY2xlYXJfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJml0ZXItPmZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHRoaXMgaXMgdGhlIGxhc3QgZGVzY3JpcHRvci4KKwkJCSAqIHRoaXMgc2xvdCB3aWxsIGJlIHBhc3RlZCBmcm9tIEFETUEgbGV2ZWwKKwkJCSAqIGVhY2ggdGltZSBpdCB3YW50cyB0byBjb25maWd1cmUgcGFyYW1ldGVycworCQkJICogb2YgdGhlIHRyYW5zYWN0aW9uIChzcmMsIGRzdCwgLi4uKQorCQkJICovCisJCQlpdGVyLT5od19uZXh0ID0gTlVMTDsKKwkJCWlmIChmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCkKKwkJCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJml0ZXItPmZsYWdzKTsKKwkJCWVsc2UKKwkJCQljbGVhcl9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmaXRlci0+ZmxhZ3MpOworCQl9CisJfQorCisJLyogU2V0IE9QUyBkZXBlbmRpbmcgb24gV1hPUi9SWE9SIHR5cGUgb2Ygb3BlcmF0aW9uICovCisJaWYgKCF0ZXN0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SLCAmZGVzYy0+ZmxhZ3MpKSB7CisJCS8qIFRoaXMgaXMgYSBXWE9SIG9ubHkgY2hhaW46CisJCSAqIC0gZmlyc3QgZGVzY3JpcHRvcnMgYXJlIGZvciB6ZXJvaW5nIGRlc3RpbmF0aW9ucworCQkgKiAgIGlmIFBQQzQ0MFNQRV9aRVJPX1AvUSBzZXQ7CisJCSAqIC0gZGVzY3JpcHRvcnMgcmVtYWluZWQgYXJlIGZvciBHRi1YT1Igb3BlcmF0aW9ucy4KKwkJICovCisJCWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXNjLT5ncm91cF9saXN0LAorCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQljaGFpbl9ub2RlKTsKKworCQlpZiAodGVzdF9iaXQoUFBDNDQwU1BFX1pFUk9fUCwgJmRlc2MtPmZsYWdzKSkgeworCQkJaHdfZGVzYyA9IGl0ZXItPmh3X2Rlc2M7CisJCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19NVl9TRzFfU0cyOworCQkJaXRlciA9IGxpc3RfZmlyc3RfZW50cnkoJml0ZXItPmNoYWluX25vZGUsCisJCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJCWNoYWluX25vZGUpOworCQl9CisKKwkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9aRVJPX1EsICZkZXNjLT5mbGFncykpIHsKKwkJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQkJaHdfZGVzYy0+b3BjID0gRE1BX0NEQl9PUENfTVZfU0cxX1NHMjsKKwkJCWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQljaGFpbl9ub2RlKTsKKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShpdGVyLCAmZGVzYy0+Z3JvdXBfbGlzdCwgY2hhaW5fbm9kZSkgeworCQkJaHdfZGVzYyA9IGl0ZXItPmh3X2Rlc2M7CisJCQlod19kZXNjLT5vcGMgPSBkb3BjOworCQl9CisJfSBlbHNlIHsKKwkJLyogVGhpcyBpcyBlaXRoZXIgUlhPUi1vbmx5IG9yIG1peGVkIFJYT1IvV1hPUiAqLworCisJCS8qIFRoZSBmaXJzdCAxIG9yIDIgc2xvdHMgaW4gY2hhaW4gYXJlIGFsd2F5cyBSWE9SLAorCQkgKiBpZiBuZWVkIHRvIGNhbGN1bGF0ZSBQICYgUSwgdGhlbiB0aGVyZSBhcmUgdHdvCisJCSAqIFJYT1Igc2xvdHM7IGlmIG9ubHkgUCBvciBvbmx5IFEsIHRoZW4gdGhlcmUgaXMgb25lCisJCSAqLworCQlpdGVyID0gbGlzdF9maXJzdF9lbnRyeSgmZGVzYy0+Z3JvdXBfbGlzdCwKKwkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJY2hhaW5fbm9kZSk7CisJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19NVl9TRzFfU0cyOworCisJCWlmIChkZXNjLT5kc3RfY250ID09IERNQV9ERVNUX01BWF9OVU0pIHsKKwkJCWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJCWNoYWluX25vZGUpOworCQkJaHdfZGVzYyA9IGl0ZXItPmh3X2Rlc2M7CisJCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19NVl9TRzFfU0cyOworCQl9CisKKwkJLyogVGhlIHJlbWFpbmluZyBkZXNjcyAoaWYgYW55KSBhcmUgV1hPUnMgKi8KKwkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1dYT1IsICZkZXNjLT5mbGFncykpIHsKKwkJCWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJCWNoYWluX25vZGUpOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGl0ZXIsICZkZXNjLT5ncm91cF9saXN0LAorCQkJCQkJY2hhaW5fbm9kZSkgeworCQkJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQkJCWh3X2Rlc2MtPm9wYyA9IGRvcGM7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2NfaW5pdF9kbWEwMXBxemVyb19zdW0gLSBpbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yCisgKiBmb3IgUFFfWkVST19TVU0gb3BlcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX2luaXRfZG1hMDFwcXplcm9fc3VtKAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJaW50IGRzdF9jbnQsIGludCBzcmNfY250KQoreworCXN0cnVjdCBkbWFfY2RiICpod19kZXNjOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKml0ZXI7CisJaW50IGkgPSAwOworCXU4IGRvcGMgPSAoZHN0X2NudCA9PSAyKSA/IERNQV9DREJfT1BDX01VTFRJQ0FTVCA6CisJCQkJICAgRE1BX0NEQl9PUENfTVZfU0cxX1NHMjsKKwkvKgorCSAqIEluaXRpYWxpemUgc3RhcnRpbmcgZnJvbSAybmQgb3IgM3JkIGRlc2NyaXB0b3IgZGVwZW5kZW50CisJICogb24gZHN0X2NudC4gRmlyc3Qgb25lIG9yIHR3byBzbG90cyBhcmUgZm9yIGNsb25pbmcgUAorCSAqIGFuZC9vciBRIHRvIGNoYW4tPnBkZXN0IGFuZC9vciBjaGFuLT5xZGVzdCBhcyB3ZSBoYXZlCisJICogdG8gcHJlc2VydmUgb3JpZ2luYWwgUC9RLgorCSAqLworCWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXNjLT5ncm91cF9saXN0LAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsIGNoYWluX25vZGUpOworCWl0ZXIgPSBsaXN0X2VudHJ5KGl0ZXItPmNoYWluX25vZGUubmV4dCwKKwkJCSAgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwgY2hhaW5fbm9kZSk7CisKKwlpZiAoZHN0X2NudCA+IDEpIHsKKwkJaXRlciA9IGxpc3RfZW50cnkoaXRlci0+Y2hhaW5fbm9kZS5uZXh0LAorCQkJCSAgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwgY2hhaW5fbm9kZSk7CisJfQorCS8qIGluaXRpYWxpemUgZWFjaCBzb3VyY2UgZGVzY3JpcHRvciBpbiBjaGFpbiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShpdGVyLCAmZGVzYy0+Z3JvdXBfbGlzdCwgY2hhaW5fbm9kZSkgeworCQlod19kZXNjID0gaXRlci0+aHdfZGVzYzsKKwkJbWVtc2V0KGl0ZXItPmh3X2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgZG1hX2NkYikpOworCQlpdGVyLT5zcmNfY250ID0gMDsKKwkJaXRlci0+ZHN0X2NudCA9IDA7CisKKwkJLyogVGhpcyBpcyBhIFpFUk9fU1VNIG9wZXJhdGlvbjoKKwkJICogLSA8c3JjX2NudD4gZGVzY3JpcHRvcnMgc3RhcnRpbmcgZnJvbSAybmQgb3IgM3JkCisJCSAqICAgZGVzY3JpcHRvciBhcmUgZm9yIEdGLVhPUiBvcGVyYXRpb25zOworCQkgKiAtIHJlbWFpbmluZyA8ZHN0X2NudD4gZGVzY3JpcHRvcnMgYXJlIGZvciBjaGVja2luZyB0aGUgcmVzdWx0CisJCSAqLworCQlpZiAoaSsrIDwgc3JjX2NudCkKKwkJCS8qIE1WX1NHMV9TRzIgaWYgb25seSBRIGlzIGJlaW5nIHZlcmlmaWVkCisJCQkgKiBNVUxUSUNBU1QgaWYgYm90aCBQIGFuZCBRIGFyZSBiZWluZyB2ZXJpZmllZAorCQkJICovCisJCQlod19kZXNjLT5vcGMgPSBkb3BjOworCQllbHNlCisJCQkvKiBETUFfQ0RCX09QQ19EQ0hFQ0sxMjggb3BlcmF0aW9uICovCisJCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19EQ0hFQ0sxMjg7CisKKwkJaWYgKGxpa2VseSghbGlzdF9pc19sYXN0KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCQkgJmRlc2MtPmdyb3VwX2xpc3QpKSkgeworCQkJLyogc2V0ICduZXh0JyBwb2ludGVyICovCisJCQlpdGVyLT5od19uZXh0ID0gbGlzdF9lbnRyeShpdGVyLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkJY2hhaW5fbm9kZSk7CisJCX0gZWxzZSB7CisJCQkvKiB0aGlzIGlzIHRoZSBsYXN0IGRlc2NyaXB0b3IuCisJCQkgKiB0aGlzIHNsb3Qgd2lsbCBiZSBwYXN0ZWQgZnJvbSBBRE1BIGxldmVsCisJCQkgKiBlYWNoIHRpbWUgaXQgd2FudHMgdG8gY29uZmlndXJlIHBhcmFtZXRlcnMKKwkJCSAqIG9mIHRoZSB0cmFuc2FjdGlvbiAoc3JjLCBkc3QsIC4uLikKKwkJCSAqLworCQkJaXRlci0+aHdfbmV4dCA9IE5VTEw7CisJCQkvKiBhbHdheXMgZW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIHNpbmNlIHdlIGdldAorCQkJICogdGhlIHN0YXR1cyBvZiBwcXplcm8gZnJvbSB0aGUgaGFuZGxlcgorCQkJICovCisJCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJml0ZXItPmZsYWdzKTsKKwkJfQorCX0KKwlkZXNjLT5zcmNfY250ID0gc3JjX2NudDsKKwlkZXNjLT5kc3RfY250ID0gZHN0X2NudDsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19pbml0X21lbWNweSAtIGluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgZm9yIE1FTUNQWSBvcGVyYXRpb24KKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2Rlc2NfaW5pdF9tZW1jcHkoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZG1hX2NkYiAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisKKwltZW1zZXQoZGVzYy0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisJZGVzYy0+aHdfbmV4dCA9IE5VTEw7CisJZGVzYy0+c3JjX2NudCA9IDE7CisJZGVzYy0+ZHN0X2NudCA9IDE7CisKKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9JTlRFUlJVUFQpCisJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmZGVzYy0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJmRlc2MtPmZsYWdzKTsKKworCWh3X2Rlc2MtPm9wYyA9IERNQV9DREJfT1BDX01WX1NHMV9TRzI7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2NfaW5pdF9tZW1zZXQgLSBpbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIGZvciBNRU1TRVQgb3BlcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX2luaXRfbWVtc2V0KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCQkJCWludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZG1hX2NkYiAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisKKwltZW1zZXQoZGVzYy0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisJZGVzYy0+aHdfbmV4dCA9IE5VTEw7CisJZGVzYy0+c3JjX2NudCA9IDE7CisJZGVzYy0+ZHN0X2NudCA9IDE7CisKKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9JTlRFUlJVUFQpCisJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmZGVzYy0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJmRlc2MtPmZsYWdzKTsKKworCWh3X2Rlc2MtPnNnMXUgPSBod19kZXNjLT5zZzFsID0gY3B1X3RvX2xlMzIoKHUzMil2YWx1ZSk7CisJaHdfZGVzYy0+c2czdSA9IGh3X2Rlc2MtPnNnM2wgPSBjcHVfdG9fbGUzMigodTMyKXZhbHVlKTsKKwlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19ERklMTDEyODsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIgLSBzZXQgc291cmNlIGFkZHJlc3MgaW50byB0aGUgZGVzY3JpcHRvcgorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4sCisJCQkJCWludCBzcmNfaWR4LCBkbWFfYWRkcl90IGFkZHJoLAorCQkJCQlkbWFfYWRkcl90IGFkZHJsKQoreworCXN0cnVjdCBkbWFfY2RiICpkbWFfaHdfZGVzYzsKKwlzdHJ1Y3QgeG9yX2NiICp4b3JfaHdfZGVzYzsKKwlwaHlzX2FkZHJfdCBhZGRyNjQsIHRtcGxvdywgdG1waGk7CisKKwlzd2l0Y2ggKGNoYW4tPmRldmljZS0+aWQpIHsKKwljYXNlIFBQQzQ0MFNQRV9ETUEwX0lEOgorCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCWlmICghYWRkcmgpIHsKKwkJCWFkZHI2NCA9IGFkZHJsOworCQkJdG1waGkgPSAoYWRkcjY0ID4+IDMyKTsKKwkJCXRtcGxvdyA9IChhZGRyNjQgJiAweEZGRkZGRkZGKTsKKwkJfSBlbHNlIHsKKwkJCXRtcGhpID0gYWRkcmg7CisJCQl0bXBsb3cgPSBhZGRybDsKKwkJfQorCQlkbWFfaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJCWRtYV9od19kZXNjLT5zZzFsID0gY3B1X3RvX2xlMzIoKHUzMil0bXBsb3cpOworCQlkbWFfaHdfZGVzYy0+c2cxdSB8PSBjcHVfdG9fbGUzMigodTMyKXRtcGhpKTsKKwkJYnJlYWs7CisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQl4b3JfaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJCXhvcl9od19kZXNjLT5vcHNbc3JjX2lkeF0ubCA9IGFkZHJsOworCQl4b3JfaHdfZGVzYy0+b3BzW3NyY19pZHhdLmggfD0gYWRkcmg7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19zZXRfc3JjX211bHQgLSBzZXQgc291cmNlIGFkZHJlc3MgbXVsdCBpbnRvIHRoZSBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfbXVsdChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4sIHUzMiBtdWx0X2luZGV4LAorCQkJaW50IHNnX2luZGV4LCB1bnNpZ25lZCBjaGFyIG11bHRfdmFsdWUpCit7CisJc3RydWN0IGRtYV9jZGIgKmRtYV9od19kZXNjOworCXN0cnVjdCB4b3JfY2IgKnhvcl9od19kZXNjOworCXUzMiAqcHNndTsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJZG1hX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCisJCXN3aXRjaCAoc2dfaW5kZXgpIHsKKwkJLyogZm9yIFJYT1Igb3BlcmF0aW9ucyBzZXQgbXVsdGlwbGllcgorCQkgKiBpbnRvIHNvdXJjZSBjdWVkIGFkZHJlc3MKKwkJICovCisJCWNhc2UgRE1BX0NEQl9TR19TUkM6CisJCQlwc2d1ID0gJmRtYV9od19kZXNjLT5zZzF1OworCQkJYnJlYWs7CisJCS8qIGZvciBXWE9SIG9wZXJhdGlvbnMgc2V0IG11bHRpcGxpZXIKKwkJICogaW50byBkZXN0aW5hdGlvbiBjdWVkIGFkZHJlc3MoZXMpCisJCSAqLworCQljYXNlIERNQV9DREJfU0dfRFNUMToKKwkJCXBzZ3UgPSAmZG1hX2h3X2Rlc2MtPnNnMnU7CisJCQlicmVhazsKKwkJY2FzZSBETUFfQ0RCX1NHX0RTVDI6CisJCQlwc2d1ID0gJmRtYV9od19kZXNjLT5zZzN1OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCSpwc2d1IHw9IGNwdV90b19sZTMyKG11bHRfdmFsdWUgPDwgbXVsdF9pbmRleCk7CisJCWJyZWFrOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJeG9yX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkciAtIHNldCBkZXN0aW5hdGlvbiBhZGRyZXNzIGludG8gdGhlIGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLAorCQkJCWRtYV9hZGRyX3QgYWRkcmgsIGRtYV9hZGRyX3QgYWRkcmwsCisJCQkJdTMyIGRzdF9pZHgpCit7CisJc3RydWN0IGRtYV9jZGIgKmRtYV9od19kZXNjOworCXN0cnVjdCB4b3JfY2IgKnhvcl9od19kZXNjOworCXBoeXNfYWRkcl90IGFkZHI2NCwgdG1waGksIHRtcGxvdzsKKwl1MzIgKnBzZ3UsICpwc2dsOworCisJc3dpdGNoIChjaGFuLT5kZXZpY2UtPmlkKSB7CisJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwljYXNlIFBQQzQ0MFNQRV9ETUExX0lEOgorCQlpZiAoIWFkZHJoKSB7CisJCQlhZGRyNjQgPSBhZGRybDsKKwkJCXRtcGhpID0gKGFkZHI2NCA+PiAzMik7CisJCQl0bXBsb3cgPSAoYWRkcjY0ICYgMHhGRkZGRkZGRik7CisJCX0gZWxzZSB7CisJCQl0bXBoaSA9IGFkZHJoOworCQkJdG1wbG93ID0gYWRkcmw7CisJCX0KKwkJZG1hX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCisJCXBzZ3UgPSBkc3RfaWR4ID8gJmRtYV9od19kZXNjLT5zZzN1IDogJmRtYV9od19kZXNjLT5zZzJ1OworCQlwc2dsID0gZHN0X2lkeCA/ICZkbWFfaHdfZGVzYy0+c2czbCA6ICZkbWFfaHdfZGVzYy0+c2cybDsKKworCQkqcHNnbCA9IGNwdV90b19sZTMyKCh1MzIpdG1wbG93KTsKKwkJKnBzZ3UgfD0gY3B1X3RvX2xlMzIoKHUzMil0bXBoaSk7CisJCWJyZWFrOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJeG9yX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCQl4b3JfaHdfZGVzYy0+Y2J0YWwgPSBhZGRybDsKKwkJeG9yX2h3X2Rlc2MtPmNidGFoIHw9IGFkZHJoOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQgLSBzZXQgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgaW52b2x2ZWQKKyAqIGludG8gdGhlIG9wZXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfZGVzY19zZXRfYnl0ZV9jb3VudChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLAorCQkJCXUzMiBieXRlX2NvdW50KQoreworCXN0cnVjdCBkbWFfY2RiICpkbWFfaHdfZGVzYzsKKwlzdHJ1Y3QgeG9yX2NiICp4b3JfaHdfZGVzYzsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJZG1hX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCQlkbWFfaHdfZGVzYy0+Y250ID0gY3B1X3RvX2xlMzIoYnl0ZV9jb3VudCk7CisJCWJyZWFrOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJeG9yX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCQl4b3JfaHdfZGVzYy0+Y2JiYyA9IGJ5dGVfY291bnQ7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19zZXRfcnhvcl9ibG9ja19zaXplIC0gc2V0IFJYT1IgYmxvY2sgc2l6ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHBjNDQwc3BlX2Rlc2Nfc2V0X3J4b3JfYmxvY2tfc2l6ZSh1MzIgYnl0ZV9jb3VudCkKK3sKKwkvKiBhc3N1bWUgdGhhdCBieXRlX2NvdW50IGlzIGFsaWduZWQgb24gdGhlIDUxMi1ib3VuZGFyeTsKKwkgKiB0aHVzIHdyaXRlIGl0IGRpcmVjdGx5IHRvIHRoZSByZWdpc3RlciAoYml0cyAyMzozMSBhcmUKKwkgKiByZXNlcnZlZCB0aGVyZSkuCisJICovCisJZGNyX3dyaXRlKHBwYzQ0MHNwZV9tcV9kY3JfaG9zdCwgRENSTl9NUTBfQ0YySCwgYnl0ZV9jb3VudCk7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2Nfc2V0X2RjaGVjayAtIHNldCBDSEVDSyBwYXR0ZXJuCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX3NldF9kY2hlY2soc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwgdTggKnF3b3JkKQoreworCXN0cnVjdCBkbWFfY2RiICpkbWFfaHdfZGVzYzsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJZG1hX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCQlpb3dyaXRlMzIocXdvcmRbMF0sICZkbWFfaHdfZGVzYy0+c2czbCk7CisJCWlvd3JpdGUzMihxd29yZFs0XSwgJmRtYV9od19kZXNjLT5zZzN1KTsKKwkJaW93cml0ZTMyKHF3b3JkWzhdLCAmZG1hX2h3X2Rlc2MtPnNnMmwpOworCQlpb3dyaXRlMzIocXdvcmRbMTJdLCAmZG1hX2h3X2Rlc2MtPnNnMnUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX3hvcl9zZXRfbGluayAtIHNldCBsaW5rIGFkZHJlc3MgaW4geG9yIENCCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV94b3Jfc2V0X2xpbmsoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqcHJldl9kZXNjLAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKm5leHRfZGVzYykKK3sKKwlzdHJ1Y3QgeG9yX2NiICp4b3JfaHdfZGVzYyA9IHByZXZfZGVzYy0+aHdfZGVzYzsKKworCWlmICh1bmxpa2VseSghbmV4dF9kZXNjIHx8ICEobmV4dF9kZXNjLT5waHlzKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbmV4dF9kZXNjPTB4JXA7IG5leHRfZGVzYy0+cGh5cz0weCVsbHhcbiIsCisJCQlfX2Z1bmNfXywgbmV4dF9kZXNjLAorCQkJbmV4dF9kZXNjID8gbmV4dF9kZXNjLT5waHlzIDogMCk7CisJCUJVRygpOworCX0KKworCXhvcl9od19kZXNjLT5jYnMgPSAwOworCXhvcl9od19kZXNjLT5jYmxhbCA9IG5leHRfZGVzYy0+cGh5czsKKwl4b3JfaHdfZGVzYy0+Y2JsYWggPSAwOworCXhvcl9od19kZXNjLT5jYmMgfD0gWE9SX0NCQ1JfTE5LX0JJVDsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19zZXRfbGluayAtIHNldCB0aGUgYWRkcmVzcyBvZiBkZXNjcmlwdG9yIGZvbGxvd2luZyB0aGlzCisgKiBkZXNjcmlwdG9yIGluIGNoYWluCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9kZXNjX3NldF9saW5rKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnByZXZfZGVzYywKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpuZXh0X2Rlc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICp0YWlsID0gbmV4dF9kZXNjOworCisJaWYgKHVubGlrZWx5KCFwcmV2X2Rlc2MgfHwgIW5leHRfZGVzYyB8fAorCQkocHJldl9kZXNjLT5od19uZXh0ICYmIHByZXZfZGVzYy0+aHdfbmV4dCAhPSBuZXh0X2Rlc2MpKSkgeworCQkvKiBJZiBwcmV2aW91cyBuZXh0IGlzIG92ZXJ3cml0dGVuIHNvbWV0aGluZyBpcyB3cm9uZy4KKwkJICogdGhvdWdoIHdlIG1heSByZWZldGNoIGZyb20gYXBwZW5kIHRvIGluaXRpYXRlIGxpc3QKKwkJICogcHJvY2Vzc2luZzsgaW4gdGhpcyBjYXNlIC0gaXQncyBvay4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHByZXZfZGVzYz0weCVwOyBuZXh0X2Rlc2M9MHglcDsgIgorCQkJInByZXYtPmh3X25leHQ9MHglcFxuIiwgX19mdW5jX18sIHByZXZfZGVzYywKKwkJCW5leHRfZGVzYywgcHJldl9kZXNjID8gcHJldl9kZXNjLT5od19uZXh0IDogMCk7CisJCUJVRygpOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGRvIHMvdyBjaGFpbmluZyBib3RoIGZvciBETUEgYW5kIFhPUiBkZXNjcmlwdG9ycyAqLworCXByZXZfZGVzYy0+aHdfbmV4dCA9IG5leHRfZGVzYzsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJYnJlYWs7CisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQkvKiBiaW5kIGRlc2NyaXB0b3IgdG8gdGhlIGNoYWluICovCisJCXdoaWxlICh0YWlsLT5od19uZXh0KQorCQkJdGFpbCA9IHRhaWwtPmh3X25leHQ7CisJCXhvcl9sYXN0X2xpbmtlZCA9IHRhaWw7CisKKwkJaWYgKHByZXZfZGVzYyA9PSB4b3JfbGFzdF9zdWJtaXQpCisJCQkvKiBkbyBub3QgbGluayB0byB0aGUgbGFzdCBzdWJtaXR0ZWQgQ0IgKi8KKwkJCWJyZWFrOworCQlwcGM0NDBzcGVfeG9yX3NldF9saW5rKHByZXZfZGVzYywgbmV4dF9kZXNjKTsKKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX2dldF9zcmNfYWRkciAtIGV4dHJhY3QgdGhlIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHUzMiBwcGM0NDBzcGVfZGVzY19nZXRfc3JjX2FkZHIoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwgaW50IHNyY19pZHgpCit7CisJc3RydWN0IGRtYV9jZGIgKmRtYV9od19kZXNjOworCXN0cnVjdCB4b3JfY2IgKnhvcl9od19kZXNjOworCisJc3dpdGNoIChjaGFuLT5kZXZpY2UtPmlkKSB7CisJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwljYXNlIFBQQzQ0MFNQRV9ETUExX0lEOgorCQlkbWFfaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJCS8qIE1heSBoYXZlIDAsIDEsIDIsIG9yIDMgc291cmNlcyAqLworCQlzd2l0Y2ggKGRtYV9od19kZXNjLT5vcGMpIHsKKwkJY2FzZSBETUFfQ0RCX09QQ19OT19PUDoKKwkJY2FzZSBETUFfQ0RCX09QQ19ERklMTDEyODoKKwkJCXJldHVybiAwOworCQljYXNlIERNQV9DREJfT1BDX0RDSEVDSzEyODoKKwkJCWlmICh1bmxpa2VseShzcmNfaWR4KSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyeSB0byBnZXQgJWQgc291cmNlIGZvciIKKwkJCQkgICAgIiBEQ0hFQ0sxMjhcbiIsIF9fZnVuY19fLCBzcmNfaWR4KTsKKwkJCQlCVUcoKTsKKwkJCX0KKwkJCXJldHVybiBsZTMyX3RvX2NwdShkbWFfaHdfZGVzYy0+c2cxbCk7CisJCWNhc2UgRE1BX0NEQl9PUENfTVVMVElDQVNUOgorCQljYXNlIERNQV9DREJfT1BDX01WX1NHMV9TRzI6CisJCQlpZiAodW5saWtlbHkoc3JjX2lkeCA+IDIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdHJ5IHRvIGdldCAlZCBzb3VyY2UgZnJvbSIKKwkJCQkgICAgIiBETUEgZGVzY3JcbiIsIF9fZnVuY19fLCBzcmNfaWR4KTsKKwkJCQlCVUcoKTsKKwkJCX0KKwkJCWlmIChzcmNfaWR4KSB7CisJCQkJaWYgKGxlMzJfdG9fY3B1KGRtYV9od19kZXNjLT5zZzF1KSAmCisJCQkJICAgIERNQV9DVUVEX1hPUl9XSU5fTVNLKSB7CisJCQkJCXU4IHJlZ2lvbjsKKworCQkJCQlpZiAoc3JjX2lkeCA9PSAxKQorCQkJCQkJcmV0dXJuIGxlMzJfdG9fY3B1KAorCQkJCQkJICAgIGRtYV9od19kZXNjLT5zZzFsKSArCisJCQkJCQkJZGVzYy0+dW5tYXBfbGVuOworCisJCQkJCXJlZ2lvbiA9IChsZTMyX3RvX2NwdSgKKwkJCQkJICAgIGRtYV9od19kZXNjLT5zZzF1KSkgPj4KKwkJCQkJCURNQV9DVUVEX1JFR0lPTl9PRkY7CisKKwkJCQkJcmVnaW9uICY9IERNQV9DVUVEX1JFR0lPTl9NU0s7CisJCQkJCXN3aXRjaCAocmVnaW9uKSB7CisJCQkJCWNhc2UgRE1BX1JYT1IxMjM6CisJCQkJCQlyZXR1cm4gbGUzMl90b19jcHUoCisJCQkJCQkgICAgZG1hX2h3X2Rlc2MtPnNnMWwpICsKKwkJCQkJCQkoZGVzYy0+dW5tYXBfbGVuIDw8IDEpOworCQkJCQljYXNlIERNQV9SWE9SMTI0OgorCQkJCQkJcmV0dXJuIGxlMzJfdG9fY3B1KAorCQkJCQkJICAgIGRtYV9od19kZXNjLT5zZzFsKSArCisJCQkJCQkJKGRlc2MtPnVubWFwX2xlbiAqIDMpOworCQkJCQljYXNlIERNQV9SWE9SMTI1OgorCQkJCQkJcmV0dXJuIGxlMzJfdG9fY3B1KAorCQkJCQkJICAgIGRtYV9od19kZXNjLT5zZzFsKSArCisJCQkJCQkJKGRlc2MtPnVubWFwX2xlbiA8PCAyKTsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJICAgICIlczogdHJ5IHRvIgorCQkJCQkJICAgICIgZ2V0IHNyYzMgZm9yIHJlZ2lvbiAlMDJ4IgorCQkJCQkJICAgICJQUEM0NDBTUEVfREVTQ19SWE9SMTI/XG4iLAorCQkJCQkJICAgIF9fZnVuY19fLCByZWdpb24pOworCQkJCQkJQlVHKCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSIlczogdHJ5IHRvIGdldCAlZCIKKwkJCQkJCSIgc291cmNlIGZvciBub24tY3VlZCBkZXNjclxuIiwKKwkJCQkJCV9fZnVuY19fLCBzcmNfaWR4KTsKKwkJCQkJQlVHKCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGxlMzJfdG9fY3B1KGRtYV9od19kZXNjLT5zZzFsKTsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gT1BDIDB4JTAyeFxuIiwKKwkJCQlfX2Z1bmNfXywgZG1hX2h3X2Rlc2MtPm9wYyk7CisJCQlCVUcoKTsKKwkJfQorCQlyZXR1cm4gbGUzMl90b19jcHUoZG1hX2h3X2Rlc2MtPnNnMWwpOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJLyogTWF5IGhhdmUgdXAgdG8gMTYgc291cmNlcyAqLworCQl4b3JfaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisJCXJldHVybiB4b3JfaHdfZGVzYy0+b3BzW3NyY19pZHhdLmw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX2dldF9kZXN0X2FkZHIgLSBleHRyYWN0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZyb20gdGhlCisgKiBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB1MzIgcHBjNDQwc3BlX2Rlc2NfZ2V0X2Rlc3RfYWRkcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLCBpbnQgaWR4KQoreworCXN0cnVjdCBkbWFfY2RiICpkbWFfaHdfZGVzYzsKKwlzdHJ1Y3QgeG9yX2NiICp4b3JfaHdfZGVzYzsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJZG1hX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCisJCWlmIChsaWtlbHkoIWlkeCkpCisJCQlyZXR1cm4gbGUzMl90b19jcHUoZG1hX2h3X2Rlc2MtPnNnMmwpOworCQlyZXR1cm4gbGUzMl90b19jcHUoZG1hX2h3X2Rlc2MtPnNnM2wpOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJeG9yX2h3X2Rlc2MgPSBkZXNjLT5od19kZXNjOworCQlyZXR1cm4geG9yX2h3X2Rlc2MtPmNidGFsOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19nZXRfc3JjX251bSAtIGV4dHJhY3QgdGhlIG51bWJlciBvZiBzb3VyY2UgYWRkcmVzc2VzIGZyb20KKyAqIHRoZSBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB1MzIgcHBjNDQwc3BlX2Rlc2NfZ2V0X3NyY19udW0oc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZG1hX2NkYiAqZG1hX2h3X2Rlc2M7CisJc3RydWN0IHhvcl9jYiAqeG9yX2h3X2Rlc2M7CisKKwlzd2l0Y2ggKGNoYW4tPmRldmljZS0+aWQpIHsKKwljYXNlIFBQQzQ0MFNQRV9ETUEwX0lEOgorCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCWRtYV9od19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKworCQlzd2l0Y2ggKGRtYV9od19kZXNjLT5vcGMpIHsKKwkJY2FzZSBETUFfQ0RCX09QQ19OT19PUDoKKwkJY2FzZSBETUFfQ0RCX09QQ19ERklMTDEyODoKKwkJCXJldHVybiAwOworCQljYXNlIERNQV9DREJfT1BDX0RDSEVDSzEyODoKKwkJCXJldHVybiAxOworCQljYXNlIERNQV9DREJfT1BDX01WX1NHMV9TRzI6CisJCWNhc2UgRE1BX0NEQl9PUENfTVVMVElDQVNUOgorCQkJLyoKKwkJCSAqIE9ubHkgZm9yIFJYT1Igb3BlcmF0aW9ucyB3ZSBoYXZlIG1vcmUgdGhhbgorCQkJICogb25lIHNvdXJjZQorCQkJICovCisJCQlpZiAobGUzMl90b19jcHUoZG1hX2h3X2Rlc2MtPnNnMXUpICYKKwkJCSAgICBETUFfQ1VFRF9YT1JfV0lOX01TSykgeworCQkJCS8qIFJYT1Igb3AsIHRoZXJlIGFyZSAyIG9yIDMgc291cmNlcyAqLworCQkJCWlmICgoKGxlMzJfdG9fY3B1KGRtYV9od19kZXNjLT5zZzF1KSA+PgorCQkJCSAgICBETUFfQ1VFRF9SRUdJT05fT0ZGKSAmCisJCQkJICAgICAgRE1BX0NVRURfUkVHSU9OX01TSykgPT0gRE1BX1JYT1IxMikgeworCQkJCQkvKiBSWE9SIDEtMiAqLworCQkJCQlyZXR1cm4gMjsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBSWE9SIDEtMi0zLzEtMi00LzEtMi01ICovCisJCQkJCXJldHVybiAzOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAxOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBPUEMgMHglMDJ4XG4iLAorCQkJCV9fZnVuY19fLCBkbWFfaHdfZGVzYy0+b3BjKTsKKwkJCUJVRygpOworCQl9CisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQkvKiB1cCB0byAxNiBzb3VyY2VzICovCisJCXhvcl9od19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKwkJcmV0dXJuIHhvcl9od19kZXNjLT5jYmMgJiBYT1JfQ0RDUl9PQUNfTVNLOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfZGVzY19nZXRfZHN0X251bSAtIGdldCB0aGUgbnVtYmVyIG9mIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBpbgorICogdGhpcyBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB1MzIgcHBjNDQwc3BlX2Rlc2NfZ2V0X2RzdF9udW0oc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZG1hX2NkYiAqZG1hX2h3X2Rlc2M7CisKKwlzd2l0Y2ggKGNoYW4tPmRldmljZS0+aWQpIHsKKwljYXNlIFBQQzQ0MFNQRV9ETUEwX0lEOgorCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCS8qIE1heSBiZSAxIG9yIDIgZGVzdGluYXRpb25zICovCisJCWRtYV9od19kZXNjID0gZGVzYy0+aHdfZGVzYzsKKwkJc3dpdGNoIChkbWFfaHdfZGVzYy0+b3BjKSB7CisJCWNhc2UgRE1BX0NEQl9PUENfTk9fT1A6CisJCWNhc2UgRE1BX0NEQl9PUENfRENIRUNLMTI4OgorCQkJcmV0dXJuIDA7CisJCWNhc2UgRE1BX0NEQl9PUENfTVZfU0cxX1NHMjoKKwkJY2FzZSBETUFfQ0RCX09QQ19ERklMTDEyODoKKwkJCXJldHVybiAxOworCQljYXNlIERNQV9DREJfT1BDX01VTFRJQ0FTVDoKKwkJCWlmIChkZXNjLT5kc3RfY250ID09IDIpCisJCQkJcmV0dXJuIDI7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIE9QQyAweCUwMnhcbiIsCisJCQkJX19mdW5jX18sIGRtYV9od19kZXNjLT5vcGMpOworCQkJQlVHKCk7CisJCX0KKwljYXNlIFBQQzQ0MFNQRV9YT1JfSUQ6CisJCS8qIEFsd2F5cyBvbmx5IDEgZGVzdGluYXRpb24gKi8KKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX2dldF9saW5rIC0gZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yIHRoYXQKKyAqIGZvbGxvd3MgdGhpcyBvbmUKKyAqLworc3RhdGljIGlubGluZSB1MzIgcHBjNDQwc3BlX2Rlc2NfZ2V0X2xpbmsoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4pCit7CisJaWYgKCFkZXNjLT5od19uZXh0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBkZXNjLT5od19uZXh0LT5waHlzOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX2lzX2FsaWduZWQgLSBjaGVjayBhbGlnbm1lbnQKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHBjNDQwc3BlX2Rlc2NfaXNfYWxpZ25lZCgKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLCBpbnQgbnVtX3Nsb3RzKQoreworCXJldHVybiAoZGVzYy0+aWR4ICYgKG51bV9zbG90cyAtIDEpKSA/IDAgOiAxOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9jaGFuX3hvcl9zbG90X2NvdW50IC0gZ2V0IHRoZSBudW1iZXIgb2Ygc2xvdHMgbmVjZXNzYXJ5IGZvcgorICogWE9SIG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IHBwYzQ0MHNwZV9jaGFuX3hvcl9zbG90X2NvdW50KHNpemVfdCBsZW4sIGludCBzcmNfY250LAorCQkJaW50ICpzbG90c19wZXJfb3ApCit7CisJaW50IHNsb3RfY250OworCisJLyogZWFjaCBYT1IgZGVzY3JpcHRvciBwcm92aWRlcyB1cCB0byAxNiBzb3VyY2Ugb3BlcmFuZHMgKi8KKwlzbG90X2NudCA9ICpzbG90c19wZXJfb3AgPSAoc3JjX2NudCArIFhPUl9NQVhfT1BTIC0gMSkvWE9SX01BWF9PUFM7CisKKwlpZiAobGlrZWx5KGxlbiA8PSBQUEM0NDBTUEVfQURNQV9YT1JfTUFYX0JZVEVfQ09VTlQpKQorCQlyZXR1cm4gc2xvdF9jbnQ7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBsZW4gJWQgPiBtYXggJWQgISFcbiIsCisJCV9fZnVuY19fLCBsZW4sIFBQQzQ0MFNQRV9BRE1BX1hPUl9NQVhfQllURV9DT1VOVCk7CisJQlVHKCk7CisJcmV0dXJuIHNsb3RfY250OworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kbWEyX3BxX3Nsb3RfY291bnQgLSBnZXQgdGhlIG51bWJlciBvZiBzbG90cyBuZWNlc3NhcnkgZm9yCisgKiBETUEyIFBRIG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IHBwYzQ0MHNwZV9kbWEyX3BxX3Nsb3RfY291bnQoZG1hX2FkZHJfdCAqc3JjcywKKwkJaW50IHNyY19jbnQsIHNpemVfdCBsZW4pCit7CisJc2lnbmVkIGxvbmcgbG9uZyBvcmRlciA9IDA7CisJaW50IHN0YXRlID0gMDsKKwlpbnQgYWRkcl9jb3VudCA9IDA7CisJaW50IGk7CisJZm9yIChpID0gMTsgaSA8IHNyY19jbnQ7IGkrKykgeworCQlkbWFfYWRkcl90IGN1cl9hZGRyID0gc3Jjc1tpXTsKKwkJZG1hX2FkZHJfdCBvbGRfYWRkciA9IHNyY3NbaS0xXTsKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIDA6CisJCQlpZiAoY3VyX2FkZHIgPT0gb2xkX2FkZHIgKyBsZW4pIHsKKwkJCQkvKiBkaXJlY3QgUlhPUiAqLworCQkJCW9yZGVyID0gMTsKKwkJCQlzdGF0ZSA9IDE7CisJCQkJaWYgKGkgPT0gc3JjX2NudC0xKQorCQkJCQlhZGRyX2NvdW50Kys7CisJCQl9IGVsc2UgaWYgKG9sZF9hZGRyID09IGN1cl9hZGRyICsgbGVuKSB7CisJCQkJLyogcmV2ZXJzZSBSWE9SICovCisJCQkJb3JkZXIgPSAtMTsKKwkJCQlzdGF0ZSA9IDE7CisJCQkJaWYgKGkgPT0gc3JjX2NudC0xKQorCQkJCQlhZGRyX2NvdW50Kys7CisJCQl9IGVsc2UgeworCQkJCXN0YXRlID0gMzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAoaSA9PSBzcmNfY250LTIgfHwgKG9yZGVyID09IC0xCisJCQkJJiYgY3VyX2FkZHIgIT0gb2xkX2FkZHIgLSBsZW4pKSB7CisJCQkJb3JkZXIgPSAwOworCQkJCXN0YXRlID0gMDsKKwkJCQlhZGRyX2NvdW50Kys7CisJCQl9IGVsc2UgaWYgKGN1cl9hZGRyID09IG9sZF9hZGRyICsgbGVuKm9yZGVyKSB7CisJCQkJc3RhdGUgPSAyOworCQkJCWlmIChpID09IHNyY19jbnQtMSkKKwkJCQkJYWRkcl9jb3VudCsrOworCQkJfSBlbHNlIGlmIChjdXJfYWRkciA9PSBvbGRfYWRkciArIDIqbGVuKSB7CisJCQkJc3RhdGUgPSAyOworCQkJCWlmIChpID09IHNyY19jbnQtMSkKKwkJCQkJYWRkcl9jb3VudCsrOworCQkJfSBlbHNlIGlmIChjdXJfYWRkciA9PSBvbGRfYWRkciArIDMqbGVuKSB7CisJCQkJc3RhdGUgPSAyOworCQkJCWlmIChpID09IHNyY19jbnQtMSkKKwkJCQkJYWRkcl9jb3VudCsrOworCQkJfSBlbHNlIHsKKwkJCQlvcmRlciA9IDA7CisJCQkJc3RhdGUgPSAwOworCQkJCWFkZHJfY291bnQrKzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlvcmRlciA9IDA7CisJCQlzdGF0ZSA9IDA7CisJCQlhZGRyX2NvdW50Kys7CisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0YXRlID09IDMpCisJCQlicmVhazsKKwl9CisJaWYgKHNyY19jbnQgPD0gMSB8fCAoc3RhdGUgIT0gMSAmJiBzdGF0ZSAhPSAyKSkgeworCQlwcl9lcnIoIiVzOiBzcmNfY250PSVkLCBzdGF0ZT0lZCwgYWRkcl9jb3VudD0lZCwgb3JkZXI9JWxsZFxuIiwKKwkJCV9fZnVuY19fLCBzcmNfY250LCBzdGF0ZSwgYWRkcl9jb3VudCwgb3JkZXIpOworCQlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKQorCQkJcHJfZXJyKCJcdFslZF0gMHglbGx4IFxuIiwgaSwgc3Jjc1tpXSk7CisJCUJVRygpOworCX0KKworCXJldHVybiAoYWRkcl9jb3VudCArIFhPUl9NQVhfT1BTIC0gMSkgLyBYT1JfTUFYX09QUzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBRE1BIGNoYW5uZWwgbG93LWxldmVsIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdTMyCitwcGM0NDBzcGVfY2hhbl9nZXRfY3VycmVudF9kZXNjcmlwdG9yKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuKTsKK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9jaGFuX2FwcGVuZChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbik7CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfZGV2aWNlX2NsZWFyX2VvdF9zdGF0dXMgLSBpbnRlcnJ1cHQgYWNrIHRvIFhPUiBvciBETUEgZW5naW5lCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX2RldmljZV9jbGVhcl9lb3Rfc3RhdHVzKAorCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZG1hX3JlZ3MgKmRtYV9yZWc7CisJc3RydWN0IHhvcl9yZWdzICp4b3JfcmVnOworCXU4ICpwID0gY2hhbi0+ZGV2aWNlLT5kbWFfZGVzY19wb29sX3ZpcnQ7CisJc3RydWN0IGRtYV9jZGIgKmNkYjsKKwl1MzIgcnYsIGk7CisKKwlzd2l0Y2ggKGNoYW4tPmRldmljZS0+aWQpIHsKKwljYXNlIFBQQzQ0MFNQRV9ETUEwX0lEOgorCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCS8qIHJlYWQgRklGTyB0byBhY2sgKi8KKwkJZG1hX3JlZyA9IGNoYW4tPmRldmljZS0+ZG1hX3JlZzsKKwkJd2hpbGUgKChydiA9IGlvcmVhZDMyKCZkbWFfcmVnLT5jc2ZwbCkpKSB7CisJCQlpID0gcnYgJiBETUFfQ0RCX0FERFJfTVNLOworCQkJY2RiID0gKHN0cnVjdCBkbWFfY2RiICopJnBbaSAtCisJCQkgICAgKHUzMiljaGFuLT5kZXZpY2UtPmRtYV9kZXNjX3Bvb2xdOworCisJCQkvKiBDbGVhciBvcGNvZGUgdG8gYWNrLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IKKwkJCSAqIFplcm9TdW0gb3BlcmF0aW9ucyBvbmx5CisJCQkgKi8KKwkJCWNkYi0+b3BjID0gMDsKKworCQkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9SWE9SX1JVTiwKKwkJCSAgICAmcHBjNDQwc3BlX3J4b3Jfc3RhdGUpKSB7CisJCQkJLyogcHJvYmFibHkgdGhpcyBpcyBhIGNvbXBsZXRlZCBSWE9SIG9wLAorCQkJCSAqIGdldCBwb2ludGVyIHRvIENEQiB1c2luZyB0aGUgZmFjdCB0aGF0CisJCQkJICogcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzIG9mIENEQgorCQkJCSAqIGluIHBvb2xzIGhhdmUgdGhlIHNhbWUgb2Zmc2V0cworCQkJCSAqLworCQkJCWlmIChsZTMyX3RvX2NwdShjZGItPnNnMXUpICYKKwkJCQkgICAgRE1BX0NVRURfWE9SX0JBU0UpIHsKKwkJCQkJLyogdGhpcyBpcyBhIFJYT1IgKi8KKwkJCQkJY2xlYXJfYml0KFBQQzQ0MFNQRV9SWE9SX1JVTiwKKwkJCQkJCSAgJnBwYzQ0MHNwZV9yeG9yX3N0YXRlKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChydiAmIERNQV9DREJfU1RBVFVTX01TSykgeworCQkJCS8qIFplcm9TdW0gY2hlY2sgZmFpbGVkCisJCQkJICovCisJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlcjsKKwkJCQlkbWFfYWRkcl90IHBoeXMgPSBydiAmIH5ETUFfQ0RCX01TSzsKKworCQkJCS8qCisJCQkJICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgY29ycmVzcG9uZGluZworCQkJCSAqIGRlc2NyaXB0b3IuCisJCQkJICovCisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmY2hhbi0+Y2hhaW4sCisJCQkJICAgIGNoYWluX25vZGUpIHsKKwkJCQkJaWYgKGl0ZXItPnBoeXMgPT0gcGh5cykKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKgorCQkJCSAqIGlmIGNhbm5vdCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJICogc2xvdCBpdCdzIGEgYnVnCisJCQkJICovCisJCQkJQlVHX09OKCZpdGVyLT5jaGFpbl9ub2RlID09ICZjaGFuLT5jaGFpbik7CisKKwkJCQlpZiAoaXRlci0+eG9yX2NoZWNrX3Jlc3VsdCkgeworCQkJCQlpZiAodGVzdF9iaXQoUFBDNDQwU1BFX0RFU0NfUENIRUNLLAorCQkJCQkJICAgICAmaXRlci0+ZmxhZ3MpKSB7CisJCQkJCQkqaXRlci0+eG9yX2NoZWNrX3Jlc3VsdCB8PQorCQkJCQkJCVNVTV9DSEVDS19QX1JFU1VMVDsKKwkJCQkJfSBlbHNlCisJCQkJCWlmICh0ZXN0X2JpdChQUEM0NDBTUEVfREVTQ19RQ0hFQ0ssCisJCQkJCQkgICAgICZpdGVyLT5mbGFncykpIHsKKwkJCQkJCSppdGVyLT54b3JfY2hlY2tfcmVzdWx0IHw9CisJCQkJCQkJU1VNX0NIRUNLX1FfUkVTVUxUOworCQkJCQl9IGVsc2UKKwkJCQkJCUJVRygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJ2ID0gaW9yZWFkMzIoJmRtYV9yZWctPmRzdHMpOworCQlpZiAocnYpIHsKKwkJCXByX2VycigiRE1BJWQgZXJyIHN0YXR1czogMHgleFxuIiwKKwkJCSAgICAgICBjaGFuLT5kZXZpY2UtPmlkLCBydik7CisJCQkvKiB3cml0ZSBiYWNrIHRvIGNsZWFyICovCisJCQlpb3dyaXRlMzIocnYsICZkbWFfcmVnLT5kc3RzKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBQQzQ0MFNQRV9YT1JfSUQ6CisJCS8qIHJlc2V0IHN0YXR1cyBiaXRzIHRvIGFjayAqLworCQl4b3JfcmVnID0gY2hhbi0+ZGV2aWNlLT54b3JfcmVnOworCQlydiA9IGlvcmVhZDMyYmUoJnhvcl9yZWctPnNyKTsKKwkJaW93cml0ZTMyYmUocnYsICZ4b3JfcmVnLT5zcik7CisKKwkJaWYgKHJ2ICYgKFhPUl9JRV9JQ0JJRV9CSVR8WE9SX0lFX0lDSUVfQklUfFhPUl9JRV9SUFRJRV9CSVQpKSB7CisJCQlpZiAocnYgJiBYT1JfSUVfUlBUSUVfQklUKSB7CisJCQkJLyogUmVhZCBQTEIgVGltZW91dCBFcnJvci4KKwkJCQkgKiBUcnkgdG8gcmVzdWJtaXQgdGhlIENCCisJCQkJICovCisJCQkJdTMyIHZhbCA9IGlvcmVhZDMyYmUoJnhvcl9yZWctPmNjYmFscik7CisKKwkJCQlpb3dyaXRlMzJiZSh2YWwsICZ4b3JfcmVnLT5jYmxhbHIpOworCisJCQkJdmFsID0gaW9yZWFkMzJiZSgmeG9yX3JlZy0+Y3Jzcik7CisJCQkJaW93cml0ZTMyYmUodmFsIHwgWE9SX0NSU1JfWEFFX0JJVCwKKwkJCQkJICAgICZ4b3JfcmVnLT5jcnNyKTsKKwkJCX0gZWxzZQorCQkJCXByX2VycigiWE9SIEVSUiAweCV4IHN0YXR1c1xuIiwgcnYpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiAgaWYgdGhlIFhPUmNvcmUgaXMgaWRsZSwgYnV0IHRoZXJlIGFyZSB1bnByb2Nlc3NlZCBDQnMKKwkJICogdGhlbiByZWZldGNoIHRoZSBzL3cgY2hhaW4gaGVyZQorCQkgKi8KKwkJaWYgKCEoaW9yZWFkMzJiZSgmeG9yX3JlZy0+c3IpICYgWE9SX1NSX1hDUF9CSVQpICYmCisJCSAgICBkb194b3JfcmVmZXRjaCkKKwkJCXBwYzQ0MHNwZV9jaGFuX2FwcGVuZChjaGFuKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9jaGFuX2lzX2J1c3kgLSBnZXQgdGhlIGNoYW5uZWwgc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgcHBjNDQwc3BlX2NoYW5faXNfYnVzeShzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZG1hX3JlZ3MgKmRtYV9yZWc7CisJc3RydWN0IHhvcl9yZWdzICp4b3JfcmVnOworCWludCBidXN5ID0gMDsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJZG1hX3JlZyA9IGNoYW4tPmRldmljZS0+ZG1hX3JlZzsKKwkJLyogIGlmIGNvbW1hbmQgRklGTydzIGhlYWQgYW5kIHRhaWwgcG9pbnRlcnMgYXJlIGVxdWFsIGFuZAorCQkgKiBzdGF0dXMgdGFpbCBpcyB0aGUgc2FtZSBhcyBjb21tYW5kLCB0aGVuIGNoYW5uZWwgaXMgZnJlZQorCQkgKi8KKwkJaWYgKGlvcmVhZDE2KCZkbWFfcmVnLT5jcGZocCkgIT0gaW9yZWFkMTYoJmRtYV9yZWctPmNwZnRwKSB8fAorCQkgICAgaW9yZWFkMTYoJmRtYV9yZWctPmNwZnRwKSAhPSBpb3JlYWQxNigmZG1hX3JlZy0+Y3NmdHApKQorCQkJYnVzeSA9IDE7CisJCWJyZWFrOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJLyogdXNlIHRoZSBzcGVjaWFsIHN0YXR1cyBiaXQgZm9yIHRoZSBYT1Jjb3JlCisJCSAqLworCQl4b3JfcmVnID0gY2hhbi0+ZGV2aWNlLT54b3JfcmVnOworCQlidXN5ID0gKGlvcmVhZDMyYmUoJnhvcl9yZWctPnNyKSAmIFhPUl9TUl9YQ1BfQklUKSA/IDEgOiAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYnVzeTsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfY2hhbl9zZXRfZmlyc3RfeG9yX2Rlc2NyaXB0b3IgLSAgaW5pdCBYT1Jjb3JlIGNoYWluCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9jaGFuX3NldF9maXJzdF94b3JfZGVzY3JpcHRvcigKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpuZXh0X2Rlc2MpCit7CisJc3RydWN0IHhvcl9yZWdzICp4b3JfcmVnID0gY2hhbi0+ZGV2aWNlLT54b3JfcmVnOworCisJaWYgKGlvcmVhZDMyYmUoJnhvcl9yZWctPnNyKSAmIFhPUl9TUl9YQ1BfQklUKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogV2FybjogWE9SY29yZSBpcyBydW5uaW5nICIKKwkJCSJ3aGVuIHRyeSB0byBzZXQgdGhlIGZpcnN0IENEQiFcbiIsCisJCQlfX2Z1bmNfXyk7CisKKwl4b3JfbGFzdF9zdWJtaXQgPSB4b3JfbGFzdF9saW5rZWQgPSBuZXh0X2Rlc2M7CisKKwlpb3dyaXRlMzJiZShYT1JfQ1JTUl82NEJBX0JJVCwgJnhvcl9yZWctPmNyc3IpOworCisJaW93cml0ZTMyYmUobmV4dF9kZXNjLT5waHlzLCAmeG9yX3JlZy0+Y2JsYWxyKTsKKwlpb3dyaXRlMzJiZSgwLCAmeG9yX3JlZy0+Y2JsYWhyKTsKKwlpb3dyaXRlMzJiZShpb3JlYWQzMmJlKCZ4b3JfcmVnLT5jYmNyKSB8IFhPUl9DQkNSX0xOS19CSVQsCisJCSAgICAmeG9yX3JlZy0+Y2Jjcik7CisKKwljaGFuLT5od19jaGFpbl9pbml0ZWQgPSAxOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kbWFfcHV0X2Rlc2MgLSBwdXQgRE1BMCwxIGRlc2NyaXB0b3IgdG8gRklGTy4KKyAqIGNhbGxlZCB3aXRoIGlycXMgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2RtYV9wdXRfZGVzYyhzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYykKK3sKKwl1MzIgcGNkYjsKKwlzdHJ1Y3QgZG1hX3JlZ3MgKmRtYV9yZWcgPSBjaGFuLT5kZXZpY2UtPmRtYV9yZWc7CisKKwlwY2RiID0gZGVzYy0+cGh5czsKKwlpZiAoIXRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX0lOVCwgJmRlc2MtPmZsYWdzKSkKKwkJcGNkYiB8PSBETUFfQ0RCX05PX0lOVDsKKworCWNoYW5fbGFzdF9zdWJbY2hhbi0+ZGV2aWNlLT5pZF0gPSBkZXNjOworCisJQURNQV9MTF9EQkcocHJpbnRfY2IoY2hhbiwgZGVzYy0+aHdfZGVzYykpOworCisJaW93cml0ZTMyKHBjZGIsICZkbWFfcmVnLT5jcGZwbCk7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2NoYW5fYXBwZW5kIC0gdXBkYXRlIHRoZSBoL3cgY2hhaW4gaW4gdGhlIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2NoYW5fYXBwZW5kKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCB4b3JfcmVncyAqeG9yX3JlZzsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICppdGVyOworCXN0cnVjdCB4b3JfY2IgKnhjYjsKKwl1MzIgY3VyX2Rlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJY3VyX2Rlc2MgPSBwcGM0NDBzcGVfY2hhbl9nZXRfY3VycmVudF9kZXNjcmlwdG9yKGNoYW4pOworCisJCWlmIChsaWtlbHkoY3VyX2Rlc2MpKSB7CisJCQlpdGVyID0gY2hhbl9sYXN0X3N1YltjaGFuLT5kZXZpY2UtPmlkXTsKKwkJCUJVR19PTighaXRlcik7CisJCX0gZWxzZSB7CisJCQkvKiBmaXJzdCBwZWVyICovCisJCQlpdGVyID0gY2hhbl9maXJzdF9jZGJbY2hhbi0+ZGV2aWNlLT5pZF07CisJCQlCVUdfT04oIWl0ZXIpOworCQkJcHBjNDQwc3BlX2RtYV9wdXRfZGVzYyhjaGFuLCBpdGVyKTsKKwkJCWNoYW4tPmh3X2NoYWluX2luaXRlZCA9IDE7CisJCX0KKworCQkvKiBpcyB0aGVyZSBzb21ldGhpbmcgbmV3IHRvIGFwcGVuZCAqLworCQlpZiAoIWl0ZXItPmh3X25leHQpCisJCQlicmVhazsKKworCQkvKiBmbHVzaCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBzL3cgcXVldWUgdG8gZmlmbyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGl0ZXIsICZjaGFuLT5jaGFpbiwgY2hhaW5fbm9kZSkgeworCQkJcHBjNDQwc3BlX2RtYV9wdXRfZGVzYyhjaGFuLCBpdGVyKTsKKwkJCWlmICghaXRlci0+aHdfbmV4dCkKKwkJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBQQzQ0MFNQRV9YT1JfSUQ6CisJCS8qIHVwZGF0ZSBoL3cgbGlua3MgYW5kIHJlZmV0Y2ggKi8KKwkJaWYgKCF4b3JfbGFzdF9zdWJtaXQtPmh3X25leHQpCisJCQlicmVhazsKKworCQl4b3JfcmVnID0gY2hhbi0+ZGV2aWNlLT54b3JfcmVnOworCQkvKiB0aGUgbGFzdCBsaW5rZWQgQ0RCIGhhcyB0byBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQKKwkJICogdGhhdCB3ZSdkIGJlIGFibGUgdG8gYXBwZW5kIHRoZSBuZXh0IGxpc3RzIHRvIGgvdworCQkgKiByZWdhcmRsZXNzIG9mIHRoZSBYT1IgZW5naW5lIHN0YXRlIGF0IHRoZSBtb21lbnQgb2YKKwkJICogYXBwZW5kaW5nIG9mIHRoZXNlIG5leHQgbGlzdHMKKwkJICovCisJCXhjYiA9IHhvcl9sYXN0X2xpbmtlZC0+aHdfZGVzYzsKKwkJeGNiLT5jYmMgfD0gWE9SX0NCQ1JfQ0JDRV9CSVQ7CisKKwkJaWYgKCEoaW9yZWFkMzJiZSgmeG9yX3JlZy0+c3IpICYgWE9SX1NSX1hDUF9CSVQpKSB7CisJCQkvKiBYT1Jjb3JlIGlzIGlkbGUuIFJlZmV0Y2ggbm93ICovCisJCQlkb194b3JfcmVmZXRjaCA9IDA7CisJCQlwcGM0NDBzcGVfeG9yX3NldF9saW5rKHhvcl9sYXN0X3N1Ym1pdCwKKwkJCQl4b3JfbGFzdF9zdWJtaXQtPmh3X25leHQpOworCisJCQlBRE1BX0xMX0RCRyhwcmludF9jYl9saXN0KGNoYW4sCisJCQkJeG9yX2xhc3Rfc3VibWl0LT5od19uZXh0KSk7CisKKwkJCXhvcl9sYXN0X3N1Ym1pdCA9IHhvcl9sYXN0X2xpbmtlZDsKKwkJCWlvd3JpdGUzMmJlKGlvcmVhZDMyYmUoJnhvcl9yZWctPmNyc3IpIHwKKwkJCQkgICAgWE9SX0NSU1JfUkNCRV9CSVQgfCBYT1JfQ1JTUl82NEJBX0JJVCwKKwkJCQkgICAgJnhvcl9yZWctPmNyc3IpOworCQl9IGVsc2UgeworCQkJLyogWE9SY29yZSBpcyBydW5uaW5nLiBSZWZldGNoIGxhdGVyIGluIHRoZSBoYW5kbGVyICovCisJCQlkb194b3JfcmVmZXRjaCA9IDE7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2NoYW5fZ2V0X2N1cnJlbnRfZGVzY3JpcHRvciAtIGdldCB0aGUgY3VycmVudGx5IGV4ZWN1dGVkIGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHUzMgorcHBjNDQwc3BlX2NoYW5fZ2V0X2N1cnJlbnRfZGVzY3JpcHRvcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZG1hX3JlZ3MgKmRtYV9yZWc7CisJc3RydWN0IHhvcl9yZWdzICp4b3JfcmVnOworCisJaWYgKHVubGlrZWx5KCFjaGFuLT5od19jaGFpbl9pbml0ZWQpKQorCQkvKiBoL3cgZGVzY3JpcHRvciBjaGFpbiBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0ICovCisJCXJldHVybiAwOworCisJc3dpdGNoIChjaGFuLT5kZXZpY2UtPmlkKSB7CisJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwljYXNlIFBQQzQ0MFNQRV9ETUExX0lEOgorCQlkbWFfcmVnID0gY2hhbi0+ZGV2aWNlLT5kbWFfcmVnOworCQlyZXR1cm4gaW9yZWFkMzIoJmRtYV9yZWctPmFjcGwpICYgKH5ETUFfQ0RCX01TSyk7CisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQl4b3JfcmVnID0gY2hhbi0+ZGV2aWNlLT54b3JfcmVnOworCQlyZXR1cm4gaW9yZWFkMzJiZSgmeG9yX3JlZy0+Y2NiYWxyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2NoYW5fcnVuIC0gZW5hYmxlIHRoZSBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9jaGFuX3J1bihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgeG9yX3JlZ3MgKnhvcl9yZWc7CisKKwlzd2l0Y2ggKGNoYW4tPmRldmljZS0+aWQpIHsKKwljYXNlIFBQQzQ0MFNQRV9ETUEwX0lEOgorCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCS8qIERNQXMgYXJlIGFsd2F5cyBlbmFibGVkLCBkbyBub3RoaW5nICovCisJCWJyZWFrOworCWNhc2UgUFBDNDQwU1BFX1hPUl9JRDoKKwkJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJCXhvcl9yZWcgPSBjaGFuLT5kZXZpY2UtPnhvcl9yZWc7CisKKwkJLyogZmV0Y2ggZGVzY3JpcHRvciBwb2ludGVkIHRvIGluIDxsaW5rPiAqLworCQlpb3dyaXRlMzJiZShYT1JfQ1JTUl82NEJBX0JJVCB8IFhPUl9DUlNSX1hBRV9CSVQsCisJCQkgICAgJnhvcl9yZWctPmNyc3IpOworCQlicmVhazsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFETUEgZGV2aWNlIGxldmVsCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfY2hhbl9zdGFydF9udWxsX3hvcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbik7CitzdGF0aWMgaW50IHBwYzQ0MHNwZV9hZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKK3N0YXRpYyBkbWFfY29va2llX3QKK3BwYzQ0MHNwZV9hZG1hX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KTsKKworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2FkbWFfc2V0X2Rlc3Qoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqdHgsCisJCQkJICAgIGRtYV9hZGRyX3QgYWRkciwgaW50IGluZGV4KTsKK3N0YXRpYyB2b2lkCitwcGM0NDBzcGVfYWRtYV9tZW1jcHlfeG9yX3NldF9zcmMoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqdHgsCisJCQkJICBkbWFfYWRkcl90IGFkZHIsIGludCBpbmRleCk7CisKK3N0YXRpYyB2b2lkCitwcGM0NDBzcGVfYWRtYV9wcV9zZXRfZGVzdChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICp0eCwKKwkJCSAgIGRtYV9hZGRyX3QgKnBhZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkCitwcGM0NDBzcGVfYWRtYV9wcV9zZXRfc3JjKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnR4LAorCQkJICBkbWFfYWRkcl90IGFkZHIsIGludCBpbmRleCk7CitzdGF0aWMgdm9pZAorcHBjNDQwc3BlX2FkbWFfcHFfc2V0X3NyY19tdWx0KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnR4LAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgbXVsdCwgaW50IGluZGV4LCBpbnQgZHN0X3Bvcyk7CitzdGF0aWMgdm9pZAorcHBjNDQwc3BlX2FkbWFfcHF6ZXJvX3N1bV9zZXRfZGVzdChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICp0eCwKKwkJCQkgICBkbWFfYWRkcl90IHBhZGRyLCBkbWFfYWRkcl90IHFhZGRyKTsKKworc3RhdGljIHN0cnVjdCBwYWdlICpwcGM0NDBzcGVfcnhvcl9zcmNzWzMyXTsKKworLyoqCisgKiBwcGM0NDBzcGVfY2FuX3J4b3IgLSBjaGVjayBpZiB0aGUgb3BlcmFuZHMgbWF5IGJlIHByb2Nlc3NlZCB3aXRoIFJYT1IKKyAqLworc3RhdGljIGludCBwcGM0NDBzcGVfY2FuX3J4b3Ioc3RydWN0IHBhZ2UgKipzcmNzLCBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaSwgb3JkZXIgPSAwLCBzdGF0ZSA9IDA7CisJaW50IGlkeCA9IDA7CisKKwlpZiAodW5saWtlbHkoIShzcmNfY250ID4gMSkpKQorCQlyZXR1cm4gMDsKKworCUJVR19PTihzcmNfY250ID4gQVJSQVlfU0laRShwcGM0NDBzcGVfcnhvcl9zcmNzKSk7CisKKwkvKiBTa2lwIGhvbGVzIGluIHRoZSBzb3VyY2UgbGlzdCBiZWZvcmUgY2hlY2tpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKSB7CisJCWlmICghc3Jjc1tpXSkKKwkJCWNvbnRpbnVlOworCQlwcGM0NDBzcGVfcnhvcl9zcmNzW2lkeCsrXSA9IHNyY3NbaV07CisJfQorCXNyY19jbnQgPSBpZHg7CisKKwlmb3IgKGkgPSAxOyBpIDwgc3JjX2NudDsgaSsrKSB7CisJCWNoYXIgKmN1cl9hZGRyID0gcGFnZV9hZGRyZXNzKHBwYzQ0MHNwZV9yeG9yX3NyY3NbaV0pOworCQljaGFyICpvbGRfYWRkciA9IHBhZ2VfYWRkcmVzcyhwcGM0NDBzcGVfcnhvcl9zcmNzW2kgLSAxXSk7CisKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIDA6CisJCQlpZiAoY3VyX2FkZHIgPT0gb2xkX2FkZHIgKyBsZW4pIHsKKwkJCQkvKiBkaXJlY3QgUlhPUiAqLworCQkJCW9yZGVyID0gMTsKKwkJCQlzdGF0ZSA9IDE7CisJCQl9IGVsc2UgaWYgKG9sZF9hZGRyID09IGN1cl9hZGRyICsgbGVuKSB7CisJCQkJLyogcmV2ZXJzZSBSWE9SICovCisJCQkJb3JkZXIgPSAtMTsKKwkJCQlzdGF0ZSA9IDE7CisJCQl9IGVsc2UKKwkJCQlnb3RvIG91dDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAoKGkgPT0gc3JjX2NudCAtIDIpIHx8CisJCQkgICAgKG9yZGVyID09IC0xICYmIGN1cl9hZGRyICE9IG9sZF9hZGRyIC0gbGVuKSkgeworCQkJCW9yZGVyID0gMDsKKwkJCQlzdGF0ZSA9IDA7CisJCQl9IGVsc2UgaWYgKChjdXJfYWRkciA9PSBvbGRfYWRkciArIGxlbiAqIG9yZGVyKSB8fAorCQkJCSAgIChjdXJfYWRkciA9PSBvbGRfYWRkciArIDIgKiBsZW4pIHx8CisJCQkJICAgKGN1cl9hZGRyID09IG9sZF9hZGRyICsgMyAqIGxlbikpIHsKKwkJCQlzdGF0ZSA9IDI7CisJCQl9IGVsc2UgeworCQkJCW9yZGVyID0gMDsKKwkJCQlzdGF0ZSA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJb3JkZXIgPSAwOworCQkJc3RhdGUgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKK291dDoKKwlpZiAoc3RhdGUgPT0gMSB8fCBzdGF0ZSA9PSAyKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX2RldmljZV9lc3RpbWF0ZSAtIGVzdGltYXRlIHRoZSBlZmZpY2llbmN5IG9mIHByb2Nlc3NpbmcKKyAqCXRoZSBvcGVyYXRpb24gZ2l2ZW4gb24gdGhpcyBjaGFubmVsLiBJdCdzIGFzc3VtZWQgdGhhdCAnY2hhbicgaXMKKyAqCWNhcGFibGUgdG8gcHJvY2VzcyAnY2FwJyB0eXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBjaGFuOiBjaGFubmVsIHRvIHVzZQorICogQGNhcDogdHlwZSBvZiB0cmFuc2FjdGlvbgorICogQGRzdF9sc3Q6IGFycmF5IG9mIGRlc3RpbmF0aW9uIHBvaW50ZXJzCisgKiBAZHN0X2NudDogbnVtYmVyIG9mIGRlc3RpbmF0aW9uIG9wZXJhbmRzCisgKiBAc3JjX2xzdDogYXJyYXkgb2Ygc291cmNlIHBvaW50ZXJzCisgKiBAc3JjX2NudDogbnVtYmVyIG9mIHNvdXJjZSBvcGVyYW5kcworICogQHNyY19zejogc2l6ZSBvZiBlYWNoIHNvdXJjZSBvcGVyYW5kCisgKi8KK3N0YXRpYyBpbnQgcHBjNDQwc3BlX2FkbWFfZXN0aW1hdGUoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCWVudW0gZG1hX3RyYW5zYWN0aW9uX3R5cGUgY2FwLCBzdHJ1Y3QgcGFnZSAqKmRzdF9sc3QsIGludCBkc3RfY250LAorCXN0cnVjdCBwYWdlICoqc3JjX2xzdCwgaW50IHNyY19jbnQsIHNpemVfdCBzcmNfc3opCit7CisJaW50IGVmID0gMTsKKworCWlmIChjYXAgPT0gRE1BX1BRIHx8IGNhcCA9PSBETUFfUFFfVkFMKSB7CisJCS8qIElmIFJBSUQtNiBjYXBhYmlsaXRpZXMgd2VyZSBub3QgYWN0aXZhdGVkIGRvbid0IHRyeQorCQkgKiB0byB1c2UgdGhlbQorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCFwcGM0NDBzcGVfcjZfZW5hYmxlZCkpCisJCQlyZXR1cm4gLTE7CisJfQorCS8qICBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBwcGM0NDBzcGUgQURNQSBkcml2ZXIgaXQKKwkgKiBtYWtlcyBzZW5zZSB0byBwaWNrIG91dCBvbmx5IHBxIGNhc2UsIGJlY2F1c2UgaXQgbWF5IGJlCisJICogcHJvY2Vzc2VkOgorCSAqICgxKSBlaXRoZXIgdXNpbmcgQmlza3VwIG1ldGhvZCBvbiBETUEyOworCSAqICgyKSBvciBvbiBETUEwLzEuCisJICogIFRodXMgd2UgZ2l2ZSBhIGZhdm91ciB0byAoMSkgaWYgdGhlIHNvdXJjZXMgYXJlIHN1aXRhYmxlOworCSAqIGVsc2UgbGV0IGl0IGJlIHByb2Nlc3NlZCBvbiBvbmUgb2YgdGhlIERNQTAvMSBlbmdpbmVzLgorCSAqICBJbiB0aGUgc3VtX3Byb2R1Y3QgY2FzZSB3aGVyZSBkZXN0aW5hdGlvbiBpcyBhbHNvIHRoZQorCSAqIHNvdXJjZSBwcm9jZXNzIGl0IG9uIERNQTAvMSBvbmx5LgorCSAqLworCWlmIChjYXAgPT0gRE1BX1BRICYmIGNoYW4tPmNoYW5faWQgPT0gUFBDNDQwU1BFX1hPUl9JRCkgeworCisJCWlmIChkc3RfY250ID09IDEgJiYgc3JjX2NudCA9PSAyICYmIGRzdF9sc3RbMF0gPT0gc3JjX2xzdFsxXSkKKwkJCWVmID0gMDsgLyogc3VtX3Byb2R1Y3QgY2FzZSwgcHJvY2VzcyBvbiBETUEwLzEgKi8KKwkJZWxzZSBpZiAocHBjNDQwc3BlX2Nhbl9yeG9yKHNyY19sc3QsIHNyY19jbnQsIHNyY19zeikpCisJCQllZiA9IDM7IC8qIG92ZXJyaWRlIChETUEwLzEgKyBpZGxlKSAqLworCQllbHNlCisJCQllZiA9IDA7IC8qIGNhbid0IHByb2Nlc3Mgb24gRE1BMiBpZiAhcnhvciAqLworCX0KKworCS8qIGNoYW5uZWwgaWRsZW5lc3MgaW5jcmVhc2VzIHRoZSBwcmlvcml0eSAqLworCWlmIChsaWtlbHkoZWYpICYmCisJICAgICFwcGM0NDBzcGVfY2hhbl9pc19idXN5KHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oY2hhbikpKQorCQllZisrOworCisJcmV0dXJuIGVmOworfQorCitzdHJ1Y3QgZG1hX2NoYW4gKgorcHBjNDQwc3BlX2FzeW5jX3R4X2ZpbmRfYmVzdF9jaGFubmVsKGVudW0gZG1hX3RyYW5zYWN0aW9uX3R5cGUgY2FwLAorCXN0cnVjdCBwYWdlICoqZHN0X2xzdCwgaW50IGRzdF9jbnQsIHN0cnVjdCBwYWdlICoqc3JjX2xzdCwKKwlpbnQgc3JjX2NudCwgc2l6ZV90IHNyY19zeikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmJlc3RfY2hhbiA9IE5VTEw7CisJc3RydWN0IHBwY19kbWFfY2hhbl9yZWYgKnJlZjsKKwlpbnQgYmVzdF9yYW5rID0gLTE7CisKKwlpZiAodW5saWtlbHkoIXNyY19zeikpCisJCXJldHVybiBOVUxMOworCWlmIChzcmNfc3ogPiBQQUdFX1NJWkUpIHsKKwkJLyoKKwkJICogc2hvdWxkIGEgdXNlciBvZiB0aGUgYXBpIGV2ZXIgcGFzcyA+IFBBR0VfU0laRSByZXF1ZXN0cworCQkgKiB3ZSBzb3J0IG91dCBjYXNlcyB3aGVyZSB0ZW1wb3JhcnkgcGFnZS1zaXplZCBidWZmZXJzCisJCSAqIGFyZSB1c2VkLgorCQkgKi8KKwkJc3dpdGNoIChjYXApIHsKKwkJY2FzZSBETUFfUFE6CisJCQlpZiAoc3JjX2NudCA9PSAxICYmIGRzdF9sc3RbMV0gPT0gc3JjX2xzdFswXSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChzcmNfY250ID09IDIgJiYgZHN0X2xzdFsxXSA9PSBzcmNfbHN0WzFdKQorCQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgRE1BX1BRX1ZBTDoKKwkJY2FzZSBETUFfWE9SX1ZBTDoKKwkJCXJldHVybiBOVUxMOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZiwgJnBwYzQ0MHNwZV9hZG1hX2NoYW5fbGlzdCwgbm9kZSkgeworCQlpZiAoZG1hX2hhc19jYXAoY2FwLCByZWYtPmNoYW4tPmRldmljZS0+Y2FwX21hc2spKSB7CisJCQlpbnQgcmFuazsKKworCQkJcmFuayA9IHBwYzQ0MHNwZV9hZG1hX2VzdGltYXRlKHJlZi0+Y2hhbiwgY2FwLCBkc3RfbHN0LAorCQkJCQlkc3RfY250LCBzcmNfbHN0LCBzcmNfY250LCBzcmNfc3opOworCQkJaWYgKHJhbmsgPiBiZXN0X3JhbmspIHsKKwkJCQliZXN0X3JhbmsgPSByYW5rOworCQkJCWJlc3RfY2hhbiA9IHJlZi0+Y2hhbjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBiZXN0X2NoYW47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwcGM0NDBzcGVfYXN5bmNfdHhfZmluZF9iZXN0X2NoYW5uZWwpOworCisvKioKKyAqIHBwYzQ0MHNwZV9nZXRfZ3JvdXBfZW50cnkgLSBnZXQgZ3JvdXAgZW50cnkgd2l0aCBpbmRleCBpZHgKKyAqIEB0ZGVzYzogaXMgdGhlIGxhc3QgYWxsb2NhdGVkIHNsb3QgaW4gdGhlIGdyb3VwLgorICovCitzdGF0aWMgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqCitwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnRkZXNjLCB1MzIgZW50cnlfaWR4KQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKml0ZXIgPSB0ZGVzYy0+Z3JvdXBfaGVhZDsKKwlpbnQgaSA9IDA7CisKKwlpZiAoZW50cnlfaWR4IDwgMCB8fCBlbnRyeV9pZHggPj0gKHRkZXNjLT5zcmNfY250ICsgdGRlc2MtPmRzdF9jbnQpKSB7CisJCXByaW50aygiJXM6IGVudHJ5X2lkeCAlZCwgc3JjX2NudCAlZCwgZHN0X2NudCAlZFxuIiwKKwkJCV9fZnVuY19fLCBlbnRyeV9pZHgsIHRkZXNjLT5zcmNfY250LCB0ZGVzYy0+ZHN0X2NudCk7CisJCUJVRygpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJnRkZXNjLT5ncm91cF9saXN0LCBjaGFpbl9ub2RlKSB7CisJCWlmIChpKysgPT0gZW50cnlfaWR4KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBpdGVyOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX2ZyZWVfc2xvdHMgLSBmbGFncyBkZXNjcmlwdG9yIHNsb3RzIGZvciByZXVzZQorICogQHNsb3Q6IFNsb3QgdG8gZnJlZQorICogQ2FsbGVyIG11c3QgaG9sZCAmcHBjNDQwc3BlX2NoYW4tPmxvY2sgd2hpbGUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX2ZyZWVfc2xvdHMoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqc2xvdCwKKwkJCQkgICAgICBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlpbnQgc3RyaWRlID0gc2xvdC0+c2xvdHNfcGVyX29wOworCisJd2hpbGUgKHN0cmlkZS0tKSB7CisJCXNsb3QtPnNsb3RzX3Blcl9vcCA9IDA7CisJCXNsb3QgPSBsaXN0X2VudHJ5KHNsb3QtPnNsb3Rfbm9kZS5uZXh0LAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJc2xvdF9ub2RlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3VubWFwKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLAorCQkJCSBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjKQoreworCXUzMiBzcmNfY250LCBkc3RfY250OworCWRtYV9hZGRyX3QgYWRkcjsKKworCS8qCisJICogZ2V0IHRoZSBudW1iZXIgb2Ygc291cmNlcyAmIGRlc3RpbmF0aW9uCisJICogaW5jbHVkZWQgaW4gdGhpcyBkZXNjcmlwdG9yIGFuZCB1bm1hcAorCSAqIHRoZW0gYWxsCisJICovCisJc3JjX2NudCA9IHBwYzQ0MHNwZV9kZXNjX2dldF9zcmNfbnVtKGRlc2MsIGNoYW4pOworCWRzdF9jbnQgPSBwcGM0NDBzcGVfZGVzY19nZXRfZHN0X251bShkZXNjLCBjaGFuKTsKKworCS8qIHVubWFwIGRlc3RpbmF0aW9ucyAqLworCWlmICghKGRlc2MtPmFzeW5jX3R4LmZsYWdzICYgRE1BX0NPTVBMX1NLSVBfREVTVF9VTk1BUCkpIHsKKwkJd2hpbGUgKGRzdF9jbnQtLSkgeworCQkJYWRkciA9IHBwYzQ0MHNwZV9kZXNjX2dldF9kZXN0X2FkZHIoCisJCQkJZGVzYywgY2hhbiwgZHN0X2NudCk7CisJCQlkbWFfdW5tYXBfcGFnZShjaGFuLT5kZXZpY2UtPmRldiwKKwkJCQkJYWRkciwgZGVzYy0+dW5tYXBfbGVuLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQl9CisJfQorCisJLyogdW5tYXAgc291cmNlcyAqLworCWlmICghKGRlc2MtPmFzeW5jX3R4LmZsYWdzICYgRE1BX0NPTVBMX1NLSVBfU1JDX1VOTUFQKSkgeworCQl3aGlsZSAoc3JjX2NudC0tKSB7CisJCQlhZGRyID0gcHBjNDQwc3BlX2Rlc2NfZ2V0X3NyY19hZGRyKAorCQkJCWRlc2MsIGNoYW4sIHNyY19jbnQpOworCQkJZG1hX3VubWFwX3BhZ2UoY2hhbi0+ZGV2aWNlLT5kZXYsCisJCQkJCWFkZHIsIGRlc2MtPnVubWFwX2xlbiwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJCX0KKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcnVuX3R4X2NvbXBsZXRlX2FjdGlvbnMgLSBjYWxsIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQKKyAqIHVwb24gY29tcGxldGlvbgorICovCitzdGF0aWMgZG1hX2Nvb2tpZV90IHBwYzQ0MHNwZV9hZG1hX3J1bl90eF9jb21wbGV0ZV9hY3Rpb25zKAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlpbnQgaTsKKworCUJVR19PTihkZXNjLT5hc3luY190eC5jb29raWUgPCAwKTsKKwlpZiAoZGVzYy0+YXN5bmNfdHguY29va2llID4gMCkgeworCQljb29raWUgPSBkZXNjLT5hc3luY190eC5jb29raWU7CisJCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IDA7CisKKwkJLyogY2FsbCB0aGUgY2FsbGJhY2sgKG11c3Qgbm90IHNsZWVwIG9yIHN1Ym1pdCBuZXcKKwkJICogb3BlcmF0aW9ucyB0byB0aGlzIGNoYW5uZWwpCisJCSAqLworCQlpZiAoZGVzYy0+YXN5bmNfdHguY2FsbGJhY2spCisJCQlkZXNjLT5hc3luY190eC5jYWxsYmFjaygKKwkJCQlkZXNjLT5hc3luY190eC5jYWxsYmFja19wYXJhbSk7CisKKwkJLyogdW5tYXAgZG1hIGFkZHJlc3NlcworCQkgKiAodW5tYXBfc2luZ2xlIHZzIHVubWFwX3BhZ2U/KQorCQkgKgorCQkgKiBhY3R1YWxseSwgcHBjJ3MgZG1hX3VubWFwX3BhZ2UoKSBmdW5jdGlvbnMgYXJlIGVtcHR5LCBzbworCQkgKiB0aGUgZm9sbG93aW5nIGNvZGUgaXMganVzdCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzCisJCSAqLworCQlpZiAoY2hhbiAmJiBjaGFuLT5uZWVkc191bm1hcCAmJiBkZXNjLT5ncm91cF9oZWFkICYmCisJCSAgICAgZGVzYy0+dW5tYXBfbGVuKSB7CisJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICp1bm1hcCA9CisJCQkJCQkJZGVzYy0+Z3JvdXBfaGVhZDsKKwkJCS8qIGFzc3VtZSAxIHNsb3QgcGVyIG9wIGFsd2F5cyAqLworCQkJdTMyIHNsb3RfY291bnQgPSB1bm1hcC0+c2xvdF9jbnQ7CisKKwkJCS8qIFJ1biB0aHJvdWdoIHRoZSBncm91cCBsaXN0IGFuZCB1bm1hcCBhZGRyZXNzZXMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBzbG90X2NvdW50OyBpKyspIHsKKwkJCQlCVUdfT04oIXVubWFwKTsKKwkJCQlwcGM0NDBzcGVfYWRtYV91bm1hcChjaGFuLCB1bm1hcCk7CisJCQkJdW5tYXAgPSB1bm1hcC0+aHdfbmV4dDsKKwkJCX0KKwkJfQorCX0KKworCS8qIHJ1biBkZXBlbmRlbnQgb3BlcmF0aW9ucyAqLworCWRtYV9ydW5fZGVwZW5kZW5jaWVzKCZkZXNjLT5hc3luY190eCk7CisKKwlyZXR1cm4gY29va2llOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX2NsZWFuX3Nsb3QgLSBjbGVhbiB1cCBDREIgc2xvdCAoaWYgYWNrIGlzIHNldCkKKyAqLworc3RhdGljIGludCBwcGM0NDBzcGVfYWRtYV9jbGVhbl9zbG90KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuKQoreworCS8qIHRoZSBjbGllbnQgaXMgYWxsb3dlZCB0byBhdHRhY2ggZGVwZW5kZW50IG9wZXJhdGlvbnMKKwkgKiB1bnRpbCAnYWNrJyBpcyBzZXQKKwkgKi8KKwlpZiAoIWFzeW5jX3R4X3Rlc3RfYWNrKCZkZXNjLT5hc3luY190eCkpCisJCXJldHVybiAwOworCisJLyogbGVhdmUgdGhlIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgY2hhaW4KKwkgKiBzbyB3ZSBjYW4gYXBwZW5kIHRvIGl0CisJICovCisJaWYgKGxpc3RfaXNfbGFzdCgmZGVzYy0+Y2hhaW5fbm9kZSwgJmNoYW4tPmNoYWluKSB8fAorCSAgICBkZXNjLT5waHlzID09IHBwYzQ0MHNwZV9jaGFuX2dldF9jdXJyZW50X2Rlc2NyaXB0b3IoY2hhbikpCisJCXJldHVybiAxOworCisJaWYgKGNoYW4tPmRldmljZS0+aWQgIT0gUFBDNDQwU1BFX1hPUl9JRCkgeworCQkvKiBvdXIgRE1BIGludGVycnVwdCBoYW5kbGVyIGNsZWFycyBvcGMgZmllbGQgb2YKKwkJICogZWFjaCBwcm9jZXNzZWQgZGVzY3JpcHRvci4gRm9yIGFsbCB0eXBlcyBvZgorCQkgKiBvcGVyYXRpb25zIGV4Y2VwdCBmb3IgWmVyb1N1bSB3ZSBkbyBub3QgYWN0dWFsbHkKKwkJICogbmVlZCBhY2sgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFplcm9TdW0gaXMgYQorCQkgKiBzcGVjaWFsIGNhc2Ugc2luY2UgdGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbgorCQkgKiBpcyBhdmFpbGFibGUgZnJvbSB0aGUgaGFuZGxlciBvbmx5LCBzbyBpZiB3ZSBzZWUKKwkJICogc3VjaCB0eXBlIG9mIGRlc2NyaXB0b3IgKHdoaWNoIGlzIHVucHJvY2Vzc2VkIHlldCkKKwkJICogdGhlbiBsZWF2ZSBpdCBpbiBjaGFpbi4KKwkJICovCisJCXN0cnVjdCBkbWFfY2RiICpjZGIgPSBkZXNjLT5od19kZXNjOworCQlpZiAoY2RiLT5vcGMgPT0gRE1BX0NEQl9PUENfRENIRUNLMTI4KQorCQkJcmV0dXJuIDE7CisJfQorCisJZGV2X2RiZyhjaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICJcdGZyZWUgc2xvdCAlbGx4OiAlZCBzdHJpZGU6ICVkXG4iLAorCQlkZXNjLT5waHlzLCBkZXNjLT5pZHgsIGRlc2MtPnNsb3RzX3Blcl9vcCk7CisKKwlsaXN0X2RlbCgmZGVzYy0+Y2hhaW5fbm9kZSk7CisJcHBjNDQwc3BlX2FkbWFfZnJlZV9zbG90cyhkZXNjLCBjaGFuKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX3BwYzQ0MHNwZV9hZG1hX3Nsb3RfY2xlYW51cCAtIHRoaXMgaXMgdGhlIGNvbW1vbiBjbGVhbi11cCByb3V0aW5lCisgKgl3aGljaCBydW5zIHRocm91Z2ggdGhlIGNoYW5uZWwgQ0RCcyBsaXN0IHVudGlsIHJlYWNoIHRoZSBkZXNjcmlwdG9yCisgKgljdXJyZW50bHkgcHJvY2Vzc2VkLiBXaGVuIHJvdXRpbmUgZGV0ZXJtaW5lcyB0aGF0IGFsbCBDREJzIG9mIGdyb3VwCisgKglhcmUgY29tcGxldGVkIHRoZW4gY29ycmVzcG9uZGluZyBjYWxsYmFja3MgKGlmIGFueSkgYXJlIGNhbGxlZCBhbmQgc2xvdHMKKyAqCWFyZSBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQgX19wcGM0NDBzcGVfYWRtYV9zbG90X2NsZWFudXAoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlciwgKl9pdGVyLCAqZ3JvdXBfc3RhcnQgPSBOVUxMOworCWRtYV9jb29raWVfdCBjb29raWUgPSAwOworCXUzMiBjdXJyZW50X2Rlc2MgPSBwcGM0NDBzcGVfY2hhbl9nZXRfY3VycmVudF9kZXNjcmlwdG9yKGNoYW4pOworCWludCBidXN5ID0gcHBjNDQwc3BlX2NoYW5faXNfYnVzeShjaGFuKTsKKwlpbnQgc2Vlbl9jdXJyZW50ID0gMCwgc2xvdF9jbnQgPSAwLCBzbG90c19wZXJfb3AgPSAwOworCisJZGV2X2RiZyhjaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICJwcGM0NDBzcGUgYWRtYSVkOiAlc1xuIiwKKwkJY2hhbi0+ZGV2aWNlLT5pZCwgX19mdW5jX18pOworCisJaWYgKCFjdXJyZW50X2Rlc2MpIHsKKwkJLyogIFRoZXJlIHdlcmUgbm8gdHJhbnNhY3Rpb25zIHlldCwgc28KKwkJICogbm90aGluZyB0byBjbGVhbgorCQkgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIGZyZWUgY29tcGxldGVkIHNsb3RzIGZyb20gdGhlIGNoYWluIHN0YXJ0aW5nIHdpdGgKKwkgKiB0aGUgb2xkZXN0IGRlc2NyaXB0b3IKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgX2l0ZXIsICZjaGFuLT5jaGFpbiwKKwkJCQkJY2hhaW5fbm9kZSkgeworCQlkZXZfZGJnKGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIlx0Y29va2llOiAlZCBzbG90OiAlZCAiCisJCSAgICAiYnVzeTogJWQgdGhpc19kZXNjOiAlI2xseCBuZXh0X2Rlc2M6ICUjeCAiCisJCSAgICAiY3VyOiAlI3ggYWNrOiAlZFxuIiwKKwkJICAgIGl0ZXItPmFzeW5jX3R4LmNvb2tpZSwgaXRlci0+aWR4LCBidXN5LCBpdGVyLT5waHlzLAorCQkgICAgcHBjNDQwc3BlX2Rlc2NfZ2V0X2xpbmsoaXRlciwgY2hhbiksIGN1cnJlbnRfZGVzYywKKwkJICAgIGFzeW5jX3R4X3Rlc3RfYWNrKCZpdGVyLT5hc3luY190eCkpOworCQlwcmVmZXRjaChfaXRlcik7CisJCXByZWZldGNoKCZfaXRlci0+YXN5bmNfdHgpOworCisJCS8qIGRvIG5vdCBhZHZhbmNlIHBhc3QgdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBsb2FkZWQgaW50byB0aGUKKwkJICogaGFyZHdhcmUgY2hhbm5lbCxzdWJzZXF1ZW50IGRlc2NyaXB0b3JzIGFyZSBlaXRoZXIgaW4gcHJvY2VzcworCQkgKiBvciBoYXZlIG5vdCBiZWVuIHN1Ym1pdHRlZAorCQkgKi8KKwkJaWYgKHNlZW5fY3VycmVudCkKKwkJCWJyZWFrOworCisJCS8qIHN0b3AgdGhlIHNlYXJjaCBpZiB3ZSByZWFjaCB0aGUgY3VycmVudCBkZXNjcmlwdG9yIGFuZCB0aGUKKwkJICogY2hhbm5lbCBpcyBidXN5LCBvciBpZiBpdCBhcHBlYXJzIHRoYXQgdGhlIGN1cnJlbnQgZGVzY3JpcHRvcgorCQkgKiBuZWVkcyB0byBiZSByZS1yZWFkIChpLmUuIGhhcyBiZWVuIGFwcGVuZGVkIHRvKQorCQkgKi8KKwkJaWYgKGl0ZXItPnBoeXMgPT0gY3VycmVudF9kZXNjKSB7CisJCQlCVUdfT04oc2Vlbl9jdXJyZW50KyspOworCQkJaWYgKGJ1c3kgfHwgcHBjNDQwc3BlX2Rlc2NfZ2V0X2xpbmsoaXRlciwgY2hhbikpIHsKKwkJCQkvKiBub3QgYWxsIGRlc2NyaXB0b3JzIG9mIHRoZSBncm91cCBoYXZlCisJCQkJICogYmVlbiBjb21wbGV0ZWQ7IGV4aXQuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBkZXRlY3QgdGhlIHN0YXJ0IG9mIGEgZ3JvdXAgdHJhbnNhY3Rpb24gKi8KKwkJaWYgKCFzbG90X2NudCAmJiAhc2xvdHNfcGVyX29wKSB7CisJCQlzbG90X2NudCA9IGl0ZXItPnNsb3RfY250OworCQkJc2xvdHNfcGVyX29wID0gaXRlci0+c2xvdHNfcGVyX29wOworCQkJaWYgKHNsb3RfY250IDw9IHNsb3RzX3Blcl9vcCkgeworCQkJCXNsb3RfY250ID0gMDsKKwkJCQlzbG90c19wZXJfb3AgPSAwOworCQkJfQorCQl9CisKKwkJaWYgKHNsb3RfY250KSB7CisJCQlpZiAoIWdyb3VwX3N0YXJ0KQorCQkJCWdyb3VwX3N0YXJ0ID0gaXRlcjsKKwkJCXNsb3RfY250IC09IHNsb3RzX3Blcl9vcDsKKwkJfQorCisJCS8qIGFsbCB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIGFyZSBjb21wbGV0ZSAqLworCQlpZiAoc2xvdHNfcGVyX29wICE9IDAgJiYgc2xvdF9jbnQgPT0gMCkgeworCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZ3JwX2l0ZXIsICpfZ3JwX2l0ZXI7CisJCQlpbnQgZW5kX29mX2NoYWluID0gMDsKKworCQkJLyogY2xlYW4gdXAgdGhlIGdyb3VwICovCisJCQlzbG90X2NudCA9IGdyb3VwX3N0YXJ0LT5zbG90X2NudDsKKwkJCWdycF9pdGVyID0gZ3JvdXBfc3RhcnQ7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbShncnBfaXRlciwgX2dycF9pdGVyLAorCQkJCSZjaGFuLT5jaGFpbiwgY2hhaW5fbm9kZSkgeworCisJCQkJY29va2llID0gcHBjNDQwc3BlX2FkbWFfcnVuX3R4X2NvbXBsZXRlX2FjdGlvbnMoCisJCQkJCWdycF9pdGVyLCBjaGFuLCBjb29raWUpOworCisJCQkJc2xvdF9jbnQgLT0gc2xvdHNfcGVyX29wOworCQkJCWVuZF9vZl9jaGFpbiA9IHBwYzQ0MHNwZV9hZG1hX2NsZWFuX3Nsb3QoCisJCQkJICAgIGdycF9pdGVyLCBjaGFuKTsKKwkJCQlpZiAoZW5kX29mX2NoYWluICYmIHNsb3RfY250KSB7CisJCQkJCS8qIFNob3VsZCB3YWl0IGZvciBaZXJvU3VtIGNvbXBsZXRpb24gKi8KKwkJCQkJaWYgKGNvb2tpZSA+IDApCisJCQkJCQljaGFuLT5jb21wbGV0ZWRfY29va2llID0gY29va2llOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJaWYgKHNsb3RfY250ID09IDAgfHwgZW5kX29mX2NoYWluKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogdGhlIGdyb3VwIHNob3VsZCBiZSBjb21wbGV0ZSBhdCB0aGlzIHBvaW50ICovCisJCQlCVUdfT04oc2xvdF9jbnQpOworCisJCQlzbG90c19wZXJfb3AgPSAwOworCQkJZ3JvdXBfc3RhcnQgPSBOVUxMOworCQkJaWYgKGVuZF9vZl9jaGFpbikKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzbG90c19wZXJfb3ApIC8qIHdhaXQgZm9yIGdyb3VwIGNvbXBsZXRpb24gKi8KKwkJCWNvbnRpbnVlOworCisJCWNvb2tpZSA9IHBwYzQ0MHNwZV9hZG1hX3J1bl90eF9jb21wbGV0ZV9hY3Rpb25zKGl0ZXIsIGNoYW4sCisJCSAgICBjb29raWUpOworCisJCWlmIChwcGM0NDBzcGVfYWRtYV9jbGVhbl9zbG90KGl0ZXIsIGNoYW4pKQorCQkJYnJlYWs7CisJfQorCisJQlVHX09OKCFzZWVuX2N1cnJlbnQpOworCisJaWYgKGNvb2tpZSA+IDApIHsKKwkJY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9IGNvb2tpZTsKKwkJcHJfZGVidWcoIlx0Y29tcGxldGVkIGNvb2tpZSAlZFxuIiwgY29va2llKTsKKwl9CisKK30KKworLyoqCisgKiBwcGM0NDBzcGVfYWRtYV90YXNrbGV0IC0gY2xlYW4gdXAgd2F0Y2gtZG9nIGluaXRpYXRvcgorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfYWRtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqKSBkYXRhOworCisJc3Bpbl9sb2NrX25lc3RlZCgmY2hhbi0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCV9fcHBjNDQwc3BlX2FkbWFfc2xvdF9jbGVhbnVwKGNoYW4pOworCXNwaW5fdW5sb2NrKCZjaGFuLT5sb2NrKTsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfYWRtYV9zbG90X2NsZWFudXAgLSBjbGVhbiB1cCBzY2hlZHVsZWQgaW5pdGlhdG9yCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3Nsb3RfY2xlYW51cChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzcGluX2xvY2tfYmgoJmNoYW4tPmxvY2spOworCV9fcHBjNDQwc3BlX2FkbWFfc2xvdF9jbGVhbnVwKGNoYW4pOworCXNwaW5fdW5sb2NrX2JoKCZjaGFuLT5sb2NrKTsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfYWRtYV9hbGxvY19zbG90cyAtIGFsbG9jYXRlIGZyZWUgc2xvdHMgKGlmIGFueSkKKyAqLworc3RhdGljIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnBwYzQ0MHNwZV9hZG1hX2FsbG9jX3Nsb3RzKAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiwgaW50IG51bV9zbG90cywKKwkJaW50IHNsb3RzX3Blcl9vcCkKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICppdGVyID0gTlVMTCwgKl9pdGVyOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmFsbG9jX3N0YXJ0ID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoYWluID0gTElTVF9IRUFEX0lOSVQoY2hhaW4pOworCWludCBzbG90c19mb3VuZCwgcmV0cnkgPSAwOworCisKKwlCVUdfT04oIW51bV9zbG90cyB8fCAhc2xvdHNfcGVyX29wKTsKKwkvKiBzdGFydCBzZWFyY2ggZnJvbSB0aGUgbGFzdCBhbGxvY2F0ZWQgZGVzY3J0aXB0b3IKKwkgKiBpZiBhIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBjYW4gbm90IGJlIGZvdW5kIHN0YXJ0IHNlYXJjaGluZworCSAqIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdAorCSAqLworcmV0cnk6CisJc2xvdHNfZm91bmQgPSAwOworCWlmIChyZXRyeSA9PSAwKQorCQlpdGVyID0gY2hhbi0+bGFzdF91c2VkOworCWVsc2UKKwkJaXRlciA9IGxpc3RfZW50cnkoJmNoYW4tPmFsbF9zbG90cywKKwkJCQkgIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJICBzbG90X25vZGUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZShpdGVyLCBfaXRlciwgJmNoYW4tPmFsbF9zbG90cywKKwkgICAgc2xvdF9ub2RlKSB7CisJCXByZWZldGNoKF9pdGVyKTsKKwkJcHJlZmV0Y2goJl9pdGVyLT5hc3luY190eCk7CisJCWlmIChpdGVyLT5zbG90c19wZXJfb3ApIHsKKwkJCXNsb3RzX2ZvdW5kID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc3RhcnQgdGhlIGFsbG9jYXRpb24gaWYgdGhlIHNsb3QgaXMgY29ycmVjdGx5IGFsaWduZWQgKi8KKwkJaWYgKCFzbG90c19mb3VuZCsrKQorCQkJYWxsb2Nfc3RhcnQgPSBpdGVyOworCisJCWlmIChzbG90c19mb3VuZCA9PSBudW1fc2xvdHMpIHsKKwkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmFsbG9jX3RhaWwgPSBOVUxMOworCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqbGFzdF91c2VkID0gTlVMTDsKKworCQkJaXRlciA9IGFsbG9jX3N0YXJ0OworCQkJd2hpbGUgKG51bV9zbG90cykgeworCQkJCWludCBpOworCQkJCS8qIHByZS1hY2sgYWxsIGJ1dCB0aGUgbGFzdCBkZXNjcmlwdG9yICovCisJCQkJaWYgKG51bV9zbG90cyAhPSBzbG90c19wZXJfb3ApCisJCQkJCWFzeW5jX3R4X2FjaygmaXRlci0+YXN5bmNfdHgpOworCisJCQkJbGlzdF9hZGRfdGFpbCgmaXRlci0+Y2hhaW5fbm9kZSwgJmNoYWluKTsKKwkJCQlhbGxvY190YWlsID0gaXRlcjsKKwkJCQlpdGVyLT5hc3luY190eC5jb29raWUgPSAwOworCQkJCWl0ZXItPmh3X25leHQgPSBOVUxMOworCQkJCWl0ZXItPmZsYWdzID0gMDsKKwkJCQlpdGVyLT5zbG90X2NudCA9IG51bV9zbG90czsKKwkJCQlpdGVyLT54b3JfY2hlY2tfcmVzdWx0ID0gTlVMTDsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgc2xvdHNfcGVyX29wOyBpKyspIHsKKwkJCQkJaXRlci0+c2xvdHNfcGVyX29wID0gc2xvdHNfcGVyX29wIC0gaTsKKwkJCQkJbGFzdF91c2VkID0gaXRlcjsKKwkJCQkJaXRlciA9IGxpc3RfZW50cnkoaXRlci0+c2xvdF9ub2RlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkJc2xvdF9ub2RlKTsKKwkJCQl9CisJCQkJbnVtX3Nsb3RzIC09IHNsb3RzX3Blcl9vcDsKKwkJCX0KKwkJCWFsbG9jX3RhaWwtPmdyb3VwX2hlYWQgPSBhbGxvY19zdGFydDsKKwkJCWFsbG9jX3RhaWwtPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKKwkJCWxpc3Rfc3BsaWNlKCZjaGFpbiwgJmFsbG9jX3RhaWwtPmdyb3VwX2xpc3QpOworCQkJY2hhbi0+bGFzdF91c2VkID0gbGFzdF91c2VkOworCQkJcmV0dXJuIGFsbG9jX3RhaWw7CisJCX0KKwl9CisJaWYgKCFyZXRyeSsrKQorCQlnb3RvIHJldHJ5OworCisJLyogdHJ5IHRvIGZyZWUgc29tZSBzbG90cyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyAqLworCXRhc2tsZXRfc2NoZWR1bGUoJmNoYW4tPmlycV90YXNrbGV0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfYWRtYV9hbGxvY19jaGFuX3Jlc291cmNlcyAtICBhbGxvY2F0ZSBwb29scyBmb3IgQ0RCIHNsb3RzCisgKi8KK3N0YXRpYyBpbnQgcHBjNDQwc3BlX2FkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpwcGM0NDBzcGVfY2hhbjsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzbG90ID0gTlVMTDsKKwljaGFyICpod19kZXNjOworCWludCBpLCBkYl9zejsKKwlpbnQgaW5pdDsKKworCXBwYzQ0MHNwZV9jaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihjaGFuKTsKKwlpbml0ID0gcHBjNDQwc3BlX2NoYW4tPnNsb3RzX2FsbG9jYXRlZCA/IDAgOiAxOworCWNoYW4tPmNoYW5faWQgPSBwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5pZDsKKworCS8qIEFsbG9jYXRlIGRlc2NyaXB0b3Igc2xvdHMgKi8KKwlpID0gcHBjNDQwc3BlX2NoYW4tPnNsb3RzX2FsbG9jYXRlZDsKKwlpZiAocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQgIT0gUFBDNDQwU1BFX1hPUl9JRCkKKwkJZGJfc3ogPSBzaXplb2Yoc3RydWN0IGRtYV9jZGIpOworCWVsc2UKKwkJZGJfc3ogPSBzaXplb2Yoc3RydWN0IHhvcl9jYik7CisKKwlmb3IgKDsgaSA8IChwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5wb29sX3NpemUgLyBkYl9zeik7IGkrKykgeworCQlzbG90ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghc2xvdCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiU1BFIEFETUEgQ2hhbm5lbCBvbmx5IGluaXRpYWxpemVkIgorCQkJCSIgJWQgZGVzY3JpcHRvciBzbG90cyIsIGktLSk7CisJCQlicmVhazsKKwkJfQorCisJCWh3X2Rlc2MgPSAoY2hhciAqKSBwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5kbWFfZGVzY19wb29sX3ZpcnQ7CisJCXNsb3QtPmh3X2Rlc2MgPSAodm9pZCAqKSAmaHdfZGVzY1tpICogZGJfc3pdOworCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZzbG90LT5hc3luY190eCwgY2hhbik7CisJCXNsb3QtPmFzeW5jX3R4LnR4X3N1Ym1pdCA9IHBwYzQ0MHNwZV9hZG1hX3R4X3N1Ym1pdDsKKwkJSU5JVF9MSVNUX0hFQUQoJnNsb3QtPmNoYWluX25vZGUpOworCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+c2xvdF9ub2RlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnNsb3QtPmdyb3VwX2xpc3QpOworCQlzbG90LT5waHlzID0gcHBjNDQwc3BlX2NoYW4tPmRldmljZS0+ZG1hX2Rlc2NfcG9vbCArIGkgKiBkYl9zejsKKwkJc2xvdC0+aWR4ID0gaTsKKworCQlzcGluX2xvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKwkJcHBjNDQwc3BlX2NoYW4tPnNsb3RzX2FsbG9jYXRlZCsrOworCQlsaXN0X2FkZF90YWlsKCZzbG90LT5zbG90X25vZGUsICZwcGM0NDBzcGVfY2hhbi0+YWxsX3Nsb3RzKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKwl9CisKKwlpZiAoaSAmJiAhcHBjNDQwc3BlX2NoYW4tPmxhc3RfdXNlZCkgeworCQlwcGM0NDBzcGVfY2hhbi0+bGFzdF91c2VkID0KKwkJCWxpc3RfZW50cnkocHBjNDQwc3BlX2NoYW4tPmFsbF9zbG90cy5uZXh0LAorCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJc2xvdF9ub2RlKTsKKwl9CisKKwlkZXZfZGJnKHBwYzQ0MHNwZV9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSJwcGM0NDBzcGUgYWRtYSVkOiBhbGxvY2F0ZWQgJWQgZGVzY3JpcHRvciBzbG90c1xuIiwKKwkJcHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsIGkpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgY2hhbm5lbCBhbmQgdGhlIGNoYWluIHdpdGggYSBudWxsIG9wZXJhdGlvbiAqLworCWlmIChpbml0KSB7CisJCXN3aXRjaCAocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQpIHsKKwkJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwkJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJCXBwYzQ0MHNwZV9jaGFuLT5od19jaGFpbl9pbml0ZWQgPSAwOworCQkJLyogVXNlIFdYT1IgZm9yIHNlbGYtdGVzdGluZyAqLworCQkJaWYgKCFwcGM0NDBzcGVfcjZfdGNoYW4pCisJCQkJcHBjNDQwc3BlX3I2X3RjaGFuID0gcHBjNDQwc3BlX2NoYW47CisJCQlicmVhazsKKwkJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQkJcHBjNDQwc3BlX2NoYW5fc3RhcnRfbnVsbF94b3IocHBjNDQwc3BlX2NoYW4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQlwcGM0NDBzcGVfY2hhbi0+bmVlZHNfdW5tYXAgPSAxOworCX0KKworCXJldHVybiAoaSA+IDApID8gaSA6IC1FTk9NRU07Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2Rlc2NfYXNzaWduX2Nvb2tpZSAtIGFzc2lnbiBhIGNvb2tpZQorICovCitzdGF0aWMgZG1hX2Nvb2tpZV90IHBwYzQ0MHNwZV9kZXNjX2Fzc2lnbl9jb29raWUoCisJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuLAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjKQoreworCWRtYV9jb29raWVfdCBjb29raWUgPSBjaGFuLT5jb21tb24uY29va2llOworCisJY29va2llKys7CisJaWYgKGNvb2tpZSA8IDApCisJCWNvb2tpZSA9IDE7CisJY2hhbi0+Y29tbW9uLmNvb2tpZSA9IGRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IGNvb2tpZTsKKwlyZXR1cm4gY29va2llOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9yeG9yX3NldF9yZWdpb25fZGF0YSAtCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9yeG9yX3NldF9yZWdpb24oc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwl1OCB4b3JfYXJnX25vLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgeG9yX2NiICp4Y2IgPSBkZXNjLT5od19kZXNjOworCisJeGNiLT5vcHNbeG9yX2FyZ19ub10uaCB8PSBtYXNrOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9yeG9yX3NldF9zcmMgLQorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfcnhvcl9zZXRfc3JjKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKmRlc2MsCisJdTggeG9yX2FyZ19ubywgZG1hX2FkZHJfdCBhZGRyKQoreworCXN0cnVjdCB4b3JfY2IgKnhjYiA9IGRlc2MtPmh3X2Rlc2M7CisKKwl4Y2ItPm9wc1t4b3JfYXJnX25vXS5oIHw9IERNQV9DVUVEX1hPUl9CQVNFOworCXhjYi0+b3BzW3hvcl9hcmdfbm9dLmwgPSBhZGRyOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9yeG9yX3NldF9tdWx0IC0KKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX3J4b3Jfc2V0X211bHQoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwl1OCB4b3JfYXJnX25vLCB1OCBpZHgsIHU4IG11bHQpCit7CisJc3RydWN0IHhvcl9jYiAqeGNiID0gZGVzYy0+aHdfZGVzYzsKKworCXhjYi0+b3BzW3hvcl9hcmdfbm9dLmggfD0gbXVsdCA8PCAoRE1BX0NVRURfTVVMVDFfT0ZGICsgaWR4ICogOCk7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfY2hlY2tfdGhyZXNob2xkIC0gYXBwZW5kIENEQnMgdG8gaC93IGNoYWluIGlmIHRocmVzaG9sZAorICoJaGFzIGJlZW4gYWNoaWV2ZWQKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2FkbWFfY2hlY2tfdGhyZXNob2xkKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuKQoreworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAicHBjNDQwc3BlIGFkbWElZDogcGVuZGluZzogJWRcbiIsCisJCWNoYW4tPmRldmljZS0+aWQsIGNoYW4tPnBlbmRpbmcpOworCisJaWYgKGNoYW4tPnBlbmRpbmcgPj0gUFBDNDQwU1BFX0FETUFfVEhSRVNIT0xEKSB7CisJCWNoYW4tPnBlbmRpbmcgPSAwOworCQlwcGM0NDBzcGVfY2hhbl9hcHBlbmQoY2hhbik7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX3R4X3N1Ym1pdCAtIHN1Ym1pdCBuZXcgZGVzY3JpcHRvciBncm91cCB0byB0aGUgY2hhbm5lbAorICoJKGl0J3Mgbm90IG5lY2Vzc2FyeSB0aGF0IGRlc2NyaXB0b3JzIHdpbGwgYmUgc3VibWl0dGVkIHRvIHRoZSBoL3cKKyAqCWNoYWlucyB0b28gcmlnaHQgbm93KQorICovCitzdGF0aWMgZG1hX2Nvb2tpZV90IHBwYzQ0MHNwZV9hZG1hX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2M7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4gPSB0b19wcGM0NDBzcGVfYWRtYV9jaGFuKHR4LT5jaGFuKTsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpncm91cF9zdGFydCwgKm9sZF9jaGFpbl90YWlsOworCWludCBzbG90X2NudDsKKwlpbnQgc2xvdHNfcGVyX29wOworCWRtYV9jb29raWVfdCBjb29raWU7CisKKwlzd19kZXNjID0gdHhfdG9fcHBjNDQwc3BlX2FkbWFfc2xvdCh0eCk7CisKKwlncm91cF9zdGFydCA9IHN3X2Rlc2MtPmdyb3VwX2hlYWQ7CisJc2xvdF9jbnQgPSBncm91cF9zdGFydC0+c2xvdF9jbnQ7CisJc2xvdHNfcGVyX29wID0gZ3JvdXBfc3RhcnQtPnNsb3RzX3Blcl9vcDsKKworCXNwaW5fbG9ja19iaCgmY2hhbi0+bG9jayk7CisKKwljb29raWUgPSBwcGM0NDBzcGVfZGVzY19hc3NpZ25fY29va2llKGNoYW4sIHN3X2Rlc2MpOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmNoYW4tPmNoYWluKSkpIHsKKwkJLyogZmlyc3QgcGVlciAqLworCQlsaXN0X3NwbGljZV9pbml0KCZzd19kZXNjLT5ncm91cF9saXN0LCAmY2hhbi0+Y2hhaW4pOworCQljaGFuX2ZpcnN0X2NkYltjaGFuLT5kZXZpY2UtPmlkXSA9IGdyb3VwX3N0YXJ0OworCX0gZWxzZSB7CisJCS8qIGlzbid0IGZpcnN0IHBlZXIsIGJpbmQgQ0RCcyB0byBjaGFpbiAqLworCQlvbGRfY2hhaW5fdGFpbCA9IGxpc3RfZW50cnkoY2hhbi0+Y2hhaW4ucHJldiwKKwkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJY2hhaW5fbm9kZSk7CisJCWxpc3Rfc3BsaWNlX2luaXQoJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCSAgICAmb2xkX2NoYWluX3RhaWwtPmNoYWluX25vZGUpOworCQkvKiBmaXggdXAgdGhlIGhhcmR3YXJlIGNoYWluICovCisJCXBwYzQ0MHNwZV9kZXNjX3NldF9saW5rKGNoYW4sIG9sZF9jaGFpbl90YWlsLCBncm91cF9zdGFydCk7CisJfQorCisJLyogaW5jcmVtZW50IHRoZSBwZW5kaW5nIGNvdW50IGJ5IHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyAqLworCWNoYW4tPnBlbmRpbmcgKz0gc2xvdF9jbnQgLyBzbG90c19wZXJfb3A7CisJcHBjNDQwc3BlX2FkbWFfY2hlY2tfdGhyZXNob2xkKGNoYW4pOworCXNwaW5fdW5sb2NrX2JoKCZjaGFuLT5sb2NrKTsKKworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkicHBjNDQwc3BlIGFkbWElZDogJXMgY29va2llOiAlZCBzbG90OiAlZCB0eCAlcFxuIiwKKwkJY2hhbi0+ZGV2aWNlLT5pZCwgX19mdW5jX18sCisJCXN3X2Rlc2MtPmFzeW5jX3R4LmNvb2tpZSwgc3dfZGVzYy0+aWR4LCBzd19kZXNjKTsKKworCXJldHVybiBjb29raWU7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfaW50ZXJydXB0IC0gcHJlcGFyZSBDREIgZm9yIGEgcHNldWRvIERNQSBvcGVyYXRpb24KKyAqLworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfaW50ZXJydXB0KAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MsICpncm91cF9zdGFydDsKKwlpbnQgc2xvdF9jbnQsIHNsb3RzX3Blcl9vcDsKKworCXBwYzQ0MHNwZV9jaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihjaGFuKTsKKworCWRldl9kYmcocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJInBwYzQ0MHNwZSBhZG1hJWQ6ICVzXG4iLCBwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5pZCwKKwkJX19mdW5jX18pOworCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisJc2xvdF9jbnQgPSBzbG90c19wZXJfb3AgPSAxOworCXN3X2Rlc2MgPSBwcGM0NDBzcGVfYWRtYV9hbGxvY19zbG90cyhwcGM0NDBzcGVfY2hhbiwgc2xvdF9jbnQsCisJCQlzbG90c19wZXJfb3ApOworCWlmIChzd19kZXNjKSB7CisJCWdyb3VwX3N0YXJ0ID0gc3dfZGVzYy0+Z3JvdXBfaGVhZDsKKwkJcHBjNDQwc3BlX2Rlc2NfaW5pdF9pbnRlcnJ1cHQoZ3JvdXBfc3RhcnQsIHBwYzQ0MHNwZV9jaGFuKTsKKwkJZ3JvdXBfc3RhcnQtPnVubWFwX2xlbiA9IDA7CisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisKKwlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfbWVtY3B5IC0gcHJlcGFyZSBDREIgZm9yIGEgTUVNQ1BZIG9wZXJhdGlvbgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpwcGM0NDBzcGVfYWRtYV9wcmVwX2RtYV9tZW1jcHkoCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfZGVzdCwKKwkJZG1hX2FkZHJfdCBkbWFfc3JjLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpwcGM0NDBzcGVfY2hhbjsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjLCAqZ3JvdXBfc3RhcnQ7CisJaW50IHNsb3RfY250LCBzbG90c19wZXJfb3A7CisKKwlwcGM0NDBzcGVfY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oY2hhbik7CisKKwlpZiAodW5saWtlbHkoIWxlbikpCisJCXJldHVybiBOVUxMOworCisJQlVHX09OKHVubGlrZWx5KGxlbiA+IFBQQzQ0MFNQRV9BRE1BX0RNQV9NQVhfQllURV9DT1VOVCkpOworCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisKKwlkZXZfZGJnKHBwYzQ0MHNwZV9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSJwcGM0NDBzcGUgYWRtYSVkOiAlcyBsZW46ICV1IGludF9lbiAlZFxuIiwKKwkJcHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsIF9fZnVuY19fLCBsZW4sCisJCWZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUID8gMSA6IDApOworCXNsb3RfY250ID0gc2xvdHNfcGVyX29wID0gMTsKKwlzd19kZXNjID0gcHBjNDQwc3BlX2FkbWFfYWxsb2Nfc2xvdHMocHBjNDQwc3BlX2NoYW4sIHNsb3RfY250LAorCQlzbG90c19wZXJfb3ApOworCWlmIChzd19kZXNjKSB7CisJCWdyb3VwX3N0YXJ0ID0gc3dfZGVzYy0+Z3JvdXBfaGVhZDsKKwkJcHBjNDQwc3BlX2Rlc2NfaW5pdF9tZW1jcHkoZ3JvdXBfc3RhcnQsIGZsYWdzKTsKKwkJcHBjNDQwc3BlX2FkbWFfc2V0X2Rlc3QoZ3JvdXBfc3RhcnQsIGRtYV9kZXN0LCAwKTsKKwkJcHBjNDQwc3BlX2FkbWFfbWVtY3B5X3hvcl9zZXRfc3JjKGdyb3VwX3N0YXJ0LCBkbWFfc3JjLCAwKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoZ3JvdXBfc3RhcnQsIHBwYzQ0MHNwZV9jaGFuLCBsZW4pOworCQlzd19kZXNjLT51bm1hcF9sZW4gPSBsZW47CisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisKKwlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfbWVtc2V0IC0gcHJlcGFyZSBDREIgZm9yIGEgTUVNU0VUIG9wZXJhdGlvbgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpwcGM0NDBzcGVfYWRtYV9wcmVwX2RtYV9tZW1zZXQoCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfZGVzdCwgaW50IHZhbHVlLAorCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpwcGM0NDBzcGVfY2hhbjsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjLCAqZ3JvdXBfc3RhcnQ7CisJaW50IHNsb3RfY250LCBzbG90c19wZXJfb3A7CisKKwlwcGM0NDBzcGVfY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oY2hhbik7CisKKwlpZiAodW5saWtlbHkoIWxlbikpCisJCXJldHVybiBOVUxMOworCisJQlVHX09OKHVubGlrZWx5KGxlbiA+IFBQQzQ0MFNQRV9BRE1BX0RNQV9NQVhfQllURV9DT1VOVCkpOworCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisKKwlkZXZfZGJnKHBwYzQ0MHNwZV9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSJwcGM0NDBzcGUgYWRtYSVkOiAlcyBjYWw6ICV1IGxlbjogJXUgaW50X2VuICVkXG4iLAorCQlwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5pZCwgX19mdW5jX18sIHZhbHVlLCBsZW4sCisJCWZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUID8gMSA6IDApOworCisJc2xvdF9jbnQgPSBzbG90c19wZXJfb3AgPSAxOworCXN3X2Rlc2MgPSBwcGM0NDBzcGVfYWRtYV9hbGxvY19zbG90cyhwcGM0NDBzcGVfY2hhbiwgc2xvdF9jbnQsCisJCXNsb3RzX3Blcl9vcCk7CisJaWYgKHN3X2Rlc2MpIHsKKwkJZ3JvdXBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOworCQlwcGM0NDBzcGVfZGVzY19pbml0X21lbXNldChncm91cF9zdGFydCwgdmFsdWUsIGZsYWdzKTsKKwkJcHBjNDQwc3BlX2FkbWFfc2V0X2Rlc3QoZ3JvdXBfc3RhcnQsIGRtYV9kZXN0LCAwKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoZ3JvdXBfc3RhcnQsIHBwYzQ0MHNwZV9jaGFuLCBsZW4pOworCQlzd19kZXNjLT51bm1hcF9sZW4gPSBsZW47CisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisKKwlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfeG9yIC0gcHJlcGFyZSBDREIgZm9yIGEgWE9SIG9wZXJhdGlvbgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpwcGM0NDBzcGVfYWRtYV9wcmVwX2RtYV94b3IoCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfZGVzdCwKKwkJZG1hX2FkZHJfdCAqZG1hX3NyYywgdTMyIHNyY19jbnQsIHNpemVfdCBsZW4sCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MsICpncm91cF9zdGFydDsKKwlpbnQgc2xvdF9jbnQsIHNsb3RzX3Blcl9vcDsKKworCXBwYzQ0MHNwZV9jaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihjaGFuKTsKKworCUFETUFfTExfREJHKHByZXBfZG1hX3hvcl9kYmcocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsCisJCQkJICAgICBkbWFfZGVzdCwgZG1hX3NyYywgc3JjX2NudCkpOworCWlmICh1bmxpa2VseSghbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisJQlVHX09OKHVubGlrZWx5KGxlbiA+IFBQQzQ0MFNQRV9BRE1BX1hPUl9NQVhfQllURV9DT1VOVCkpOworCisJZGV2X2RiZyhwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkicHBjNDQwc3BlIGFkbWElZDogJXMgc3JjX2NudDogJWQgbGVuOiAldSBpbnRfZW46ICVkXG4iLAorCQlwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5pZCwgX19mdW5jX18sIHNyY19jbnQsIGxlbiwKKwkJZmxhZ3MgJiBETUFfUFJFUF9JTlRFUlJVUFQgPyAxIDogMCk7CisKKwlzcGluX2xvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKwlzbG90X2NudCA9IHBwYzQ0MHNwZV9jaGFuX3hvcl9zbG90X2NvdW50KGxlbiwgc3JjX2NudCwgJnNsb3RzX3Blcl9vcCk7CisJc3dfZGVzYyA9IHBwYzQ0MHNwZV9hZG1hX2FsbG9jX3Nsb3RzKHBwYzQ0MHNwZV9jaGFuLCBzbG90X2NudCwKKwkJCXNsb3RzX3Blcl9vcCk7CisJaWYgKHN3X2Rlc2MpIHsKKwkJZ3JvdXBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOworCQlwcGM0NDBzcGVfZGVzY19pbml0X3hvcihncm91cF9zdGFydCwgc3JjX2NudCwgZmxhZ3MpOworCQlwcGM0NDBzcGVfYWRtYV9zZXRfZGVzdChncm91cF9zdGFydCwgZG1hX2Rlc3QsIDApOworCQl3aGlsZSAoc3JjX2NudC0tKQorCQkJcHBjNDQwc3BlX2FkbWFfbWVtY3B5X3hvcl9zZXRfc3JjKGdyb3VwX3N0YXJ0LAorCQkJCWRtYV9zcmNbc3JjX2NudF0sIHNyY19jbnQpOworCQlwcGM0NDBzcGVfZGVzY19zZXRfYnl0ZV9jb3VudChncm91cF9zdGFydCwgcHBjNDQwc3BlX2NoYW4sIGxlbik7CisJCXN3X2Rlc2MtPnVubWFwX2xlbiA9IGxlbjsKKwkJc3dfZGVzYy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKworCXJldHVybiBzd19kZXNjID8gJnN3X2Rlc2MtPmFzeW5jX3R4IDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwcGM0NDBzcGVfZGVzY19zZXRfeG9yX3NyY19jbnQoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJCQlpbnQgc3JjX2NudCk7CitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfaW5pdF9yeG9yX2N1cnNvcihzdHJ1Y3QgcHBjNDQwc3BlX3J4b3IgKmN1cnNvcik7CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfaW5pdF9kbWEycnhvcl9zbG90IC0KKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2FkbWFfaW5pdF9kbWEycnhvcl9zbG90KAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQlkbWFfYWRkcl90ICpzcmMsIGludCBzcmNfY250KQoreworCWludCBpOworCisJLyogaW5pdGlhbGl6ZSBDREIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKSB7CisJCXBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX3ByZXBfc3JjKGRlc2MsICZkZXNjLT5yeG9yX2N1cnNvciwgaSwKKwkJCQkJCSBkZXNjLT5zcmNfY250LCAodTMyKXNyY1tpXSk7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kbWEwMV9wcmVwX211bHQgLQorICogZm9yIFEgb3BlcmF0aW9uIHdoZXJlIGRlc3RpbmF0aW9uIGlzIGFsc28gdGhlIHNvdXJjZQorICovCitzdGF0aWMgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqcHBjNDQwc3BlX2RtYTAxX3ByZXBfbXVsdCgKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuLAorCQlkbWFfYWRkcl90ICpkc3QsIGludCBkc3RfY250LCBkbWFfYWRkcl90ICpzcmMsIGludCBzcmNfY250LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzY2YsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqc3dfZGVzYyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBvcCA9IDA7CisJaW50IHNsb3RfY250OworCisJc2V0X2JpdChQUEM0NDBTUEVfREVTQ19XWE9SLCAmb3ApOworCXNsb3RfY250ID0gMjsKKworCXNwaW5fbG9ja19iaCgmcHBjNDQwc3BlX2NoYW4tPmxvY2spOworCisJLyogdXNlIFdYT1IsIGVhY2ggZGVzY3JpcHRvciBvY2N1cGllcyBvbmUgc2xvdCAqLworCXN3X2Rlc2MgPSBwcGM0NDBzcGVfYWRtYV9hbGxvY19zbG90cyhwcGM0NDBzcGVfY2hhbiwgc2xvdF9jbnQsIDEpOworCWlmIChzd19kZXNjKSB7CisJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICppdGVyOworCQlzdHJ1Y3QgZG1hX2NkYiAqaHdfZGVzYzsKKworCQljaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihzd19kZXNjLT5hc3luY190eC5jaGFuKTsKKwkJc2V0X2JpdHMob3AsICZzd19kZXNjLT5mbGFncyk7CisJCXN3X2Rlc2MtPnNyY19jbnQgPSBzcmNfY250OworCQlzd19kZXNjLT5kc3RfY250ID0gZHN0X2NudDsKKwkJLyogRmlyc3QgZGVzY3JpcHRvciwgemVybyBkYXRhIGluIHRoZSBkZXN0aW5hdGlvbiBhbmQgY29weSBpdAorCQkgKiB0byBxIHBhZ2UgdXNpbmcgTVVMVElDQVNUIHRyYW5zZmVyLgorCQkgKi8KKwkJaXRlciA9IGxpc3RfZmlyc3RfZW50cnkoJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJCWNoYWluX25vZGUpOworCQltZW1zZXQoaXRlci0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisJCS8qIHNldCAnbmV4dCcgcG9pbnRlciAqLworCQlpdGVyLT5od19uZXh0ID0gbGlzdF9lbnRyeShpdGVyLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJCSAgIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJCSAgIGNoYWluX25vZGUpOworCQljbGVhcl9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmaXRlci0+ZmxhZ3MpOworCQlod19kZXNjID0gaXRlci0+aHdfZGVzYzsKKwkJaHdfZGVzYy0+b3BjID0gRE1BX0NEQl9PUENfTVVMVElDQVNUOworCisJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwgY2hhbiwKKwkJCQkJICAgICBETUFfQ1VFRF9YT1JfQkFTRSwgZHN0WzBdLCAwKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLCAwLCBkc3RbMV0sIDEpOworCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoaXRlciwgY2hhbiwgMCwgRE1BX0NVRURfWE9SX0hCLAorCQkJCQkgICAgc3JjWzBdKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoaXRlciwgcHBjNDQwc3BlX2NoYW4sIGxlbik7CisJCWl0ZXItPnVubWFwX2xlbiA9IGxlbjsKKworCQkvKgorCQkgKiBTZWNvbmQgZGVzY3JpcHRvciwgbXVsdGlwbHkgZGF0YSBmcm9tIHRoZSBxIHBhZ2UKKwkJICogYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gcmVhbCBkZXN0aW5hdGlvbi4KKwkJICovCisJCWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQljaGFpbl9ub2RlKTsKKwkJbWVtc2V0KGl0ZXItPmh3X2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgZG1hX2NkYikpOworCQlpdGVyLT5od19uZXh0ID0gTlVMTDsKKwkJaWYgKGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUKQorCQkJc2V0X2JpdChQUEM0NDBTUEVfREVTQ19JTlQsICZpdGVyLT5mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChQUEM0NDBTUEVfREVTQ19JTlQsICZpdGVyLT5mbGFncyk7CisKKwkJaHdfZGVzYyA9IGl0ZXItPmh3X2Rlc2M7CisJCWh3X2Rlc2MtPm9wYyA9IERNQV9DREJfT1BDX01WX1NHMV9TRzI7CisJCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfYWRkcihpdGVyLCBjaGFuLCAwLAorCQkJCQkgICAgRE1BX0NVRURfWE9SX0hCLCBkc3RbMV0pOworCQlwcGM0NDBzcGVfZGVzY19zZXRfZGVzdF9hZGRyKGl0ZXIsIGNoYW4sCisJCQkJCSAgICAgRE1BX0NVRURfWE9SX0JBU0UsIGRzdFswXSwgMCk7CisKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3NyY19tdWx0KGl0ZXIsIGNoYW4sIERNQV9DVUVEX01VTFQxX09GRiwKKwkJCQkJICAgIERNQV9DREJfU0dfRFNUMSwgc2NmWzBdKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoaXRlciwgcHBjNDQwc3BlX2NoYW4sIGxlbik7CisJCWl0ZXItPnVubWFwX2xlbiA9IGxlbjsKKwkJc3dfZGVzYy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcHBjNDQwc3BlX2NoYW4tPmxvY2spOworCisJcmV0dXJuIHN3X2Rlc2M7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2RtYTAxX3ByZXBfc3VtX3Byb2R1Y3QgLQorICogRHggPSBBKihQK1B4eSkgKyBCKihRK1F4eSkgb3BlcmF0aW9uIHdoZXJlIGRlc3RpbmF0aW9uIGlzIGFsc28KKyAqIHRoZSBzb3VyY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpwcGM0NDBzcGVfZG1hMDFfcHJlcF9zdW1fcHJvZHVjdCgKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuLAorCQlkbWFfYWRkcl90ICpkc3QsIGRtYV9hZGRyX3QgKnNyYywgaW50IHNyY19jbnQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNjZiwgc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG9wID0gMDsKKwlpbnQgc2xvdF9jbnQ7CisKKwlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX1dYT1IsICZvcCk7CisJc2xvdF9jbnQgPSAzOworCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisKKwkvKiBXWE9SLCBlYWNoIGRlc2NyaXB0b3Igb2NjdXBpZXMgb25lIHNsb3QgKi8KKwlzd19kZXNjID0gcHBjNDQwc3BlX2FkbWFfYWxsb2Nfc2xvdHMocHBjNDQwc3BlX2NoYW4sIHNsb3RfY250LCAxKTsKKwlpZiAoc3dfZGVzYykgeworCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbjsKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlcjsKKwkJc3RydWN0IGRtYV9jZGIgKmh3X2Rlc2M7CisKKwkJY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oc3dfZGVzYy0+YXN5bmNfdHguY2hhbik7CisJCXNldF9iaXRzKG9wLCAmc3dfZGVzYy0+ZmxhZ3MpOworCQlzd19kZXNjLT5zcmNfY250ID0gc3JjX2NudDsKKwkJc3dfZGVzYy0+ZHN0X2NudCA9IDE7CisJCS8qIDFzdCBkZXNjcmlwdG9yLCBzcmNbMV0gZGF0YSB0byBxIHBhZ2UgYW5kIHplcm8gZGVzdGluYXRpb24gKi8KKwkJaXRlciA9IGxpc3RfZmlyc3RfZW50cnkoJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJCWNoYWluX25vZGUpOworCQltZW1zZXQoaXRlci0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisJCWl0ZXItPmh3X25leHQgPSBsaXN0X2VudHJ5KGl0ZXItPmNoYWluX25vZGUubmV4dCwKKwkJCQkJICAgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJICAgY2hhaW5fbm9kZSk7CisJCWNsZWFyX2JpdChQUEM0NDBTUEVfREVTQ19JTlQsICZpdGVyLT5mbGFncyk7CisJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19NVUxUSUNBU1Q7CisKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLCBETUFfQ1VFRF9YT1JfQkFTRSwKKwkJCQkJICAgICAqZHN0LCAwKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLCAwLAorCQkJCQkgICAgIHBwYzQ0MHNwZV9jaGFuLT5xZGVzdCwgMSk7CisJCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfYWRkcihpdGVyLCBjaGFuLCAwLCBETUFfQ1VFRF9YT1JfSEIsCisJCQkJCSAgICBzcmNbMV0pOworCQlwcGM0NDBzcGVfZGVzY19zZXRfYnl0ZV9jb3VudChpdGVyLCBwcGM0NDBzcGVfY2hhbiwgbGVuKTsKKwkJaXRlci0+dW5tYXBfbGVuID0gbGVuOworCisJCS8qIDJuZCBkZXNjcmlwdG9yLCBtdWx0aXBseSBzcmNbMV0gZGF0YSBhbmQgc3RvcmUgdGhlCisJCSAqIHJlc3VsdCBpbiBkZXN0aW5hdGlvbiAqLworCQlpdGVyID0gbGlzdF9maXJzdF9lbnRyeSgmaXRlci0+Y2hhaW5fbm9kZSwKKwkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJY2hhaW5fbm9kZSk7CisJCW1lbXNldChpdGVyLT5od19kZXNjLCAwLCBzaXplb2Yoc3RydWN0IGRtYV9jZGIpKTsKKwkJLyogc2V0ICduZXh0JyBwb2ludGVyICovCisJCWl0ZXItPmh3X25leHQgPSBsaXN0X2VudHJ5KGl0ZXItPmNoYWluX25vZGUubmV4dCwKKwkJCQkJICAgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJICAgY2hhaW5fbm9kZSk7CisJCWlmIChmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCkKKwkJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmaXRlci0+ZmxhZ3MpOworCQllbHNlCisJCQljbGVhcl9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmaXRlci0+ZmxhZ3MpOworCisJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19NVl9TRzFfU0cyOworCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoaXRlciwgY2hhbiwgMCwgRE1BX0NVRURfWE9SX0hCLAorCQkJCQkgICAgcHBjNDQwc3BlX2NoYW4tPnFkZXN0KTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLCBETUFfQ1VFRF9YT1JfQkFTRSwKKwkJCQkJICAgICAqZHN0LCAwKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3NyY19tdWx0KGl0ZXIsIGNoYW4sCURNQV9DVUVEX01VTFQxX09GRiwKKwkJCQkJICAgIERNQV9DREJfU0dfRFNUMSwgc2NmWzFdKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoaXRlciwgcHBjNDQwc3BlX2NoYW4sIGxlbik7CisJCWl0ZXItPnVubWFwX2xlbiA9IGxlbjsKKworCQkvKgorCQkgKiAzcmQgZGVzY3JpcHRvciwgbXVsdGlwbHkgc3JjWzBdIGRhdGEgYW5kIHhvciBpdAorCQkgKiB3aXRoIGRlc3RpbmF0aW9uCisJCSAqLworCQlpdGVyID0gbGlzdF9maXJzdF9lbnRyeSgmaXRlci0+Y2hhaW5fbm9kZSwKKwkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJY2hhaW5fbm9kZSk7CisJCW1lbXNldChpdGVyLT5od19kZXNjLCAwLCBzaXplb2Yoc3RydWN0IGRtYV9jZGIpKTsKKwkJaXRlci0+aHdfbmV4dCA9IE5VTEw7CisJCWlmIChmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCkKKwkJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmaXRlci0+ZmxhZ3MpOworCQllbHNlCisJCQljbGVhcl9iaXQoUFBDNDQwU1BFX0RFU0NfSU5ULCAmaXRlci0+ZmxhZ3MpOworCisJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQlod19kZXNjLT5vcGMgPSBETUFfQ0RCX09QQ19NVl9TRzFfU0cyOworCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoaXRlciwgY2hhbiwgMCwgRE1BX0NVRURfWE9SX0hCLAorCQkJCQkgICAgc3JjWzBdKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLCBETUFfQ1VFRF9YT1JfQkFTRSwKKwkJCQkJICAgICAqZHN0LCAwKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3NyY19tdWx0KGl0ZXIsIGNoYW4sIERNQV9DVUVEX01VTFQxX09GRiwKKwkJCQkJICAgIERNQV9DREJfU0dfRFNUMSwgc2NmWzBdKTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoaXRlciwgcHBjNDQwc3BlX2NoYW4sIGxlbik7CisJCWl0ZXItPnVubWFwX2xlbiA9IGxlbjsKKwkJc3dfZGVzYy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcHBjNDQwc3BlX2NoYW4tPmxvY2spOworCisJcmV0dXJuIHN3X2Rlc2M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpwcGM0NDBzcGVfZG1hMDFfcHJlcF9wcSgKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuLAorCQlkbWFfYWRkcl90ICpkc3QsIGludCBkc3RfY250LCBkbWFfYWRkcl90ICpzcmMsIGludCBzcmNfY250LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzY2YsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaW50IHNsb3RfY250OworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MgPSBOVUxMLCAqaXRlcjsKKwl1bnNpZ25lZCBsb25nIG9wID0gMDsKKwl1bnNpZ25lZCBjaGFyIG11bHQgPSAxOworCisJcHJfZGVidWcoIiVzOiBkc3RfY250ICVkLCBzcmNfY250ICVkLCBsZW4gJWRcbiIsCisJCSBfX2Z1bmNfXywgZHN0X2NudCwgc3JjX2NudCwgbGVuKTsKKwkvKiAgc2VsZWN0IG9wZXJhdGlvbnMgV1hPUi9SWE9SIGRlcGVuZGluZyBvbiB0aGUKKwkgKiBzb3VyY2UgYWRkcmVzc2VzIG9mIG9wZXJhdG9ycyBhbmQgdGhlIG51bWJlcgorCSAqIG9mIGRlc3RpbmF0aW9ucyAoUlhPUiBzdXBwb3J0IG9ubHkgUS1wYXJpdHkgY2FsY3VsYXRpb25zKQorCSAqLworCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfV1hPUiwgJm9wKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUFBDNDQwU1BFX1JYT1JfUlVOLCAmcHBjNDQwc3BlX3J4b3Jfc3RhdGUpKSB7CisJCS8qIG5vIGFjdGl2ZSBSWE9SOworCQkgKiBkbyBSWE9SIGlmOgorCQkgKiAtIHRoZXJlIGFyZSBtb3JlIHRoYW4gMSBzb3VyY2UsCisJCSAqIC0gbGVuIGlzIGFsaWduZWQgb24gNTEyLWJ5dGUgYm91bmRhcnksCisJCSAqIC0gc291cmNlIGFkZHJlc3NlcyBmaXQgdG8gb25lIG9mIDQgcG9zc2libGUgcmVnaW9ucy4KKwkJICovCisJCWlmIChzcmNfY250ID4gMSAmJgorCQkgICAgIShsZW4gJiBNUTBfQ0YySF9SWE9SX0JTX01BU0spICYmCisJCSAgICAoc3JjWzBdICsgbGVuKSA9PSBzcmNbMV0pIHsKKwkJCS8qIG1heSBkbyBSWE9SIFIxIFIyICovCisJCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IsICZvcCk7CisJCQlpZiAoc3JjX2NudCAhPSAyKSB7CisJCQkJLyogbWF5IHRyeSB0byBlbmhhbmNlIHJlZ2lvbiBvZiBSWE9SICovCisJCQkJaWYgKChzcmNbMV0gKyBsZW4pID09IHNyY1syXSkgeworCQkJCQkvKiBkbyBSWE9SIFIxIFIyIFIzICovCisJCQkJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfUlhPUjEyMywKKwkJCQkJCSZvcCk7CisJCQkJfSBlbHNlIGlmICgoc3JjWzFdICsgbGVuICogMikgPT0gc3JjWzJdKSB7CisJCQkJCS8qIGRvIFJYT1IgUjEgUjIgUjQgKi8KKwkJCQkJc2V0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SMTI0LCAmb3ApOworCQkJCX0gZWxzZSBpZiAoKHNyY1sxXSArIGxlbiAqIDMpID09IHNyY1syXSkgeworCQkJCQkvKiBkbyBSWE9SIFIxIFIyIFI1ICovCisJCQkJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfUlhPUjEyNSwKKwkJCQkJCSZvcCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogZG8gUlhPUiBSMSBSMiAqLworCQkJCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IxMiwKKwkJCQkJCSZvcCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBkbyBSWE9SIFIxIFIyICovCisJCQkJc2V0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SMTIsICZvcCk7CisJCQl9CisJCX0KKworCQlpZiAoIXRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IsICZvcCkpIHsKKwkJCS8qIGNhbiBub3QgZG8gdGhpcyBvcGVyYXRpb24gd2l0aCBSWE9SICovCisJCQljbGVhcl9iaXQoUFBDNDQwU1BFX1JYT1JfUlVOLAorCQkJCSZwcGM0NDBzcGVfcnhvcl9zdGF0ZSk7CisJCX0gZWxzZSB7CisJCQkvKiBjYW4gZG87IHNldCBibG9jayBzaXplIHJpZ2h0IG5vdyAqLworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3J4b3JfYmxvY2tfc2l6ZShsZW4pOworCQl9CisJfQorCisJLyogTnVtYmVyIG9mIG5lY2Vzc2FyeSBzbG90cyBkZXBlbmRzIG9uIG9wZXJhdGlvbiB0eXBlIHNlbGVjdGVkICovCisJaWYgKCF0ZXN0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SLCAmb3ApKSB7CisJCS8qICBUaGlzIGlzIGEgV1hPUiBvbmx5IGNoYWluLiBOZWVkIGRlc2NyaXB0b3JzIGZvciBlYWNoCisJCSAqIHNvdXJjZSB0byBHRi1YT1IgdGhlbSB3aXRoIFdYT1IsIGFuZCBuZWVkIGRlc2NyaXB0b3JzCisJCSAqIGZvciBlYWNoIGRlc3RpbmF0aW9uIHRvIHplcm8gdGhlbSB3aXRoIFdYT1IKKwkJICovCisJCXNsb3RfY250ID0gc3JjX2NudDsKKworCQlpZiAoZmxhZ3MgJiBETUFfUFJFUF9aRVJPX1ApIHsKKwkJCXNsb3RfY250Kys7CisJCQlzZXRfYml0KFBQQzQ0MFNQRV9aRVJPX1AsICZvcCk7CisJCX0KKwkJaWYgKGZsYWdzICYgRE1BX1BSRVBfWkVST19RKSB7CisJCQlzbG90X2NudCsrOworCQkJc2V0X2JpdChQUEM0NDBTUEVfWkVST19RLCAmb3ApOworCQl9CisJfSBlbHNlIHsKKwkJLyogIE5lZWQgMS8yIGRlc2NyaXB0b3IgZm9yIFJYT1Igb3BlcmF0aW9uLCBhbmQKKwkJICogbmVlZCAoc3JjX2NudCAtICgyIG9yIDMpKSBmb3IgV1hPUiBvZiBzb3VyY2VzCisJCSAqIHJlbWFpbmVkIChpZiBhbnkpCisJCSAqLworCQlzbG90X2NudCA9IGRzdF9jbnQ7CisKKwkJaWYgKGZsYWdzICYgRE1BX1BSRVBfWkVST19QKQorCQkJc2V0X2JpdChQUEM0NDBTUEVfWkVST19QLCAmb3ApOworCQlpZiAoZmxhZ3MgJiBETUFfUFJFUF9aRVJPX1EpCisJCQlzZXRfYml0KFBQQzQ0MFNQRV9aRVJPX1EsICZvcCk7CisKKwkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IxMiwgJm9wKSkKKwkJCXNsb3RfY250ICs9IHNyY19jbnQgLSAyOworCQllbHNlCisJCQlzbG90X2NudCArPSBzcmNfY250IC0gMzsKKworCQkvKiAgVGh1cyB3ZSBoYXZlIGVpdGhlciBSWE9SIG9ubHkgY2hhaW4gb3IKKwkJICogbWl4ZWQgUlhPUi9XWE9SCisJCSAqLworCQlpZiAoc2xvdF9jbnQgPT0gZHN0X2NudCkKKwkJCS8qIFJYT1Igb25seSBjaGFpbiAqLworCQkJY2xlYXJfYml0KFBQQzQ0MFNQRV9ERVNDX1dYT1IsICZvcCk7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisJLyogZm9yIGJvdGggUlhPUi9XWE9SIGVhY2ggZGVzY3JpcHRvciBvY2N1cGllcyBvbmUgc2xvdCAqLworCXN3X2Rlc2MgPSBwcGM0NDBzcGVfYWRtYV9hbGxvY19zbG90cyhwcGM0NDBzcGVfY2hhbiwgc2xvdF9jbnQsIDEpOworCWlmIChzd19kZXNjKSB7CisJCXBwYzQ0MHNwZV9kZXNjX2luaXRfZG1hMDFwcShzd19kZXNjLCBkc3RfY250LCBzcmNfY250LAorCQkJCWZsYWdzLCBvcCk7CisKKwkJLyogc2V0dXAgZHN0L3NyYy9tdWx0ICovCisJCXByX2RlYnVnKCIlczogc2V0IGRzdCBkZXNjcmlwdG9yIDAsIDE6IDB4JTAxNmxseCwgMHglMDE2bGx4XG4iLAorCQkJIF9fZnVuY19fLCBkc3RbMF0sIGRzdFsxXSk7CisJCXBwYzQ0MHNwZV9hZG1hX3BxX3NldF9kZXN0KHN3X2Rlc2MsIGRzdCwgZmxhZ3MpOworCQl3aGlsZSAoc3JjX2NudC0tKSB7CisJCQlwcGM0NDBzcGVfYWRtYV9wcV9zZXRfc3JjKHN3X2Rlc2MsIHNyY1tzcmNfY250XSwKKwkJCQkJCSAgc3JjX2NudCk7CisKKwkJCS8qIE5PVEU6ICJNdWx0aSA9IDAgaXMgZXF1aXZhbGVudCB0byA9IDEiIGFzIGl0CisJCQkgKiBzdGF0ZWQgaW4gNDQwU1BTUGVfUkFJRDZfQWRkZW5kdW1fVU1fMV8xNy5wZGYKKwkJCSAqIGRvZXNuJ3Qgd29yayBmb3IgUlhPUiB3aXRoIERNQTAvMSEgSW5zdGVhZCwgbXVsdGk9MAorCQkJICogbGVhZHMgdG8gemVyb2luZyBzb3VyY2UgZGF0YSBhZnRlciBSWE9SLgorCQkJICogU28sIGZvciBQIGNhc2Ugc2V0LXVwIG11bHQ9MSBleHBsaWNpdGx5LgorCQkJICovCisJCQlpZiAoIShmbGFncyAmIERNQV9QUkVQX1BRX0RJU0FCTEVfUSkpCisJCQkJbXVsdCA9IHNjZltzcmNfY250XTsKKwkJCXBwYzQ0MHNwZV9hZG1hX3BxX3NldF9zcmNfbXVsdChzd19kZXNjLAorCQkJCW11bHQsIHNyY19jbnQsICBkc3RfY250IC0gMSk7CisJCX0KKworCQkvKiBTZXR1cCBieXRlIGNvdW50IGZvcmVhY2ggc2xvdCBqdXN0IGFsbG9jYXRlZCAqLworCQlzd19kZXNjLT5hc3luY190eC5mbGFncyA9IGZsYWdzOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZzd19kZXNjLT5ncm91cF9saXN0LAorCQkJCWNoYWluX25vZGUpIHsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9ieXRlX2NvdW50KGl0ZXIsCisJCQkJcHBjNDQwc3BlX2NoYW4sIGxlbik7CisJCQlpdGVyLT51bm1hcF9sZW4gPSBsZW47CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKworCXJldHVybiBzd19kZXNjOworfQorCitzdGF0aWMgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqcHBjNDQwc3BlX2RtYTJfcHJlcF9wcSgKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuLAorCQlkbWFfYWRkcl90ICpkc3QsIGludCBkc3RfY250LCBkbWFfYWRkcl90ICpzcmMsIGludCBzcmNfY250LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzY2YsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaW50IHNsb3RfY250LCBkZXNjc19wZXJfb3A7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqc3dfZGVzYyA9IE5VTEwsICppdGVyOworCXVuc2lnbmVkIGxvbmcgb3AgPSAwOworCXVuc2lnbmVkIGNoYXIgbXVsdCA9IDE7CisKKwlCVUdfT04oIWRzdF9jbnQpOworCS8qcHJfZGVidWcoIiVzOiBkc3RfY250ICVkLCBzcmNfY250ICVkLCBsZW4gJWRcbiIsCisJCSBfX2Z1bmNfXywgZHN0X2NudCwgc3JjX2NudCwgbGVuKTsqLworCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisJZGVzY3NfcGVyX29wID0gcHBjNDQwc3BlX2RtYTJfcHFfc2xvdF9jb3VudChzcmMsIHNyY19jbnQsIGxlbik7CisJaWYgKGRlc2NzX3Blcl9vcCA8IDApIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogZGVwZW5kaW5nIG9uIG51bWJlciBvZiBzb3VyY2VzIHdlIGhhdmUgMSBvciAyIFJYT1IgY2hhaW5zICovCisJc2xvdF9jbnQgPSBkZXNjc19wZXJfb3AgKiBkc3RfY250OworCisJc3dfZGVzYyA9IHBwYzQ0MHNwZV9hZG1hX2FsbG9jX3Nsb3RzKHBwYzQ0MHNwZV9jaGFuLCBzbG90X2NudCwgMSk7CisJaWYgKHN3X2Rlc2MpIHsKKwkJb3AgPSBzbG90X2NudDsKKwkJc3dfZGVzYy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmc3dfZGVzYy0+Z3JvdXBfbGlzdCwgY2hhaW5fbm9kZSkgeworCQkJcHBjNDQwc3BlX2Rlc2NfaW5pdF9kbWEycHEoaXRlciwgZHN0X2NudCwgc3JjX2NudCwKKwkJCQktLW9wID8gMCA6IGZsYWdzKTsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9ieXRlX2NvdW50KGl0ZXIsIHBwYzQ0MHNwZV9jaGFuLAorCQkJCWxlbik7CisJCQlpdGVyLT51bm1hcF9sZW4gPSBsZW47CisKKwkJCXBwYzQ0MHNwZV9pbml0X3J4b3JfY3Vyc29yKCYoaXRlci0+cnhvcl9jdXJzb3IpKTsKKwkJCWl0ZXItPnJ4b3JfY3Vyc29yLmxlbiA9IGxlbjsKKwkJCWl0ZXItPmRlc2NzX3Blcl9vcCA9IGRlc2NzX3Blcl9vcDsKKwkJfQorCQlvcCA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJnN3X2Rlc2MtPmdyb3VwX2xpc3QsIGNoYWluX25vZGUpIHsKKwkJCW9wKys7CisJCQlpZiAob3AgJSBkZXNjc19wZXJfb3AgPT0gMCkKKwkJCQlwcGM0NDBzcGVfYWRtYV9pbml0X2RtYTJyeG9yX3Nsb3QoaXRlciwgc3JjLAorCQkJCQkJCQkgIHNyY19jbnQpOworCQkJaWYgKGxpa2VseSghbGlzdF9pc19sYXN0KCZpdGVyLT5jaGFpbl9ub2RlLAorCQkJCQkJICZzd19kZXNjLT5ncm91cF9saXN0KSkpIHsKKwkJCQkvKiBzZXQgJ25leHQnIHBvaW50ZXIgKi8KKwkJCQlpdGVyLT5od19uZXh0ID0KKwkJCQkJbGlzdF9lbnRyeShpdGVyLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkJY2hhaW5fbm9kZSk7CisJCQkJcHBjNDQwc3BlX3hvcl9zZXRfbGluayhpdGVyLCBpdGVyLT5od19uZXh0KTsKKwkJCX0gZWxzZSB7CisJCQkJLyogdGhpcyBpcyB0aGUgbGFzdCBkZXNjcmlwdG9yLiAqLworCQkJCWl0ZXItPmh3X25leHQgPSBOVUxMOworCQkJfQorCQl9CisKKwkJLyogZml4dXAgaGVhZCBkZXNjcmlwdG9yICovCisJCXN3X2Rlc2MtPmRzdF9jbnQgPSBkc3RfY250OworCQlpZiAoZmxhZ3MgJiBETUFfUFJFUF9aRVJPX1ApCisJCQlzZXRfYml0KFBQQzQ0MFNQRV9aRVJPX1AsICZzd19kZXNjLT5mbGFncyk7CisJCWlmIChmbGFncyAmIERNQV9QUkVQX1pFUk9fUSkKKwkJCXNldF9iaXQoUFBDNDQwU1BFX1pFUk9fUSwgJnN3X2Rlc2MtPmZsYWdzKTsKKworCQkvKiBzZXR1cCBkc3Qvc3JjL211bHQgKi8KKwkJcHBjNDQwc3BlX2FkbWFfcHFfc2V0X2Rlc3Qoc3dfZGVzYywgZHN0LCBmbGFncyk7CisKKwkJd2hpbGUgKHNyY19jbnQtLSkgeworCQkJLyogaGFuZGxlIGRlc2NyaXB0b3JzIChpZiBkc3RfY250ID09IDIpIGluc2lkZQorCQkJICogdGhlIHBwYzQ0MHNwZV9hZG1hX3BxX3NldF9zcmN4eHgoKSBmdW5jdGlvbnMKKwkJCSAqLworCQkJcHBjNDQwc3BlX2FkbWFfcHFfc2V0X3NyYyhzd19kZXNjLCBzcmNbc3JjX2NudF0sCisJCQkJCQkgIHNyY19jbnQpOworCQkJaWYgKCEoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1EpKQorCQkJCW11bHQgPSBzY2Zbc3JjX2NudF07CisJCQlwcGM0NDBzcGVfYWRtYV9wcV9zZXRfc3JjX211bHQoc3dfZGVzYywKKwkJCQkJbXVsdCwgc3JjX2NudCwgZHN0X2NudCAtIDEpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisJcHBjNDQwc3BlX2Rlc2Nfc2V0X3J4b3JfYmxvY2tfc2l6ZShsZW4pOworCXJldHVybiBzd19kZXNjOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX3BxIC0gcHJlcGFyZSBDREIgKGdyb3VwKSBmb3IgYSBHRi1YT1Igb3BlcmF0aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX3BxKAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgKmRzdCwgZG1hX2FkZHJfdCAqc3JjLAorCQl1bnNpZ25lZCBpbnQgc3JjX2NudCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2NmLAorCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpwcGM0NDBzcGVfY2hhbjsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjID0gTlVMTDsKKwlpbnQgZHN0X2NudCA9IDA7CisKKwlwcGM0NDBzcGVfY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oY2hhbik7CisKKwlBRE1BX0xMX0RCRyhwcmVwX2RtYV9wcV9kYmcocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsCisJCQkJICAgIGRzdCwgc3JjLCBzcmNfY250KSk7CisJQlVHX09OKCFsZW4pOworCUJVR19PTih1bmxpa2VseShsZW4gPiBQUEM0NDBTUEVfQURNQV9YT1JfTUFYX0JZVEVfQ09VTlQpKTsKKwlCVUdfT04oIXNyY19jbnQpOworCisJaWYgKHNyY19jbnQgPT0gMSAmJiBkc3RbMV0gPT0gc3JjWzBdKSB7CisJCWRtYV9hZGRyX3QgZGVzdFsyXTsKKworCQkvKiBkc3RbMV0gaXMgcmVhbCBkZXN0aW5hdGlvbiAoUSkgKi8KKwkJZGVzdFswXSA9IGRzdFsxXTsKKwkJLyogdGhpcyBpcyB0aGUgcGFnZSB0byBtdWx0aWNhc3Qgc291cmNlIGRhdGEgdG8gKi8KKwkJZGVzdFsxXSA9IHBwYzQ0MHNwZV9jaGFuLT5xZGVzdDsKKwkJc3dfZGVzYyA9IHBwYzQ0MHNwZV9kbWEwMV9wcmVwX211bHQocHBjNDQwc3BlX2NoYW4sCisJCQkJZGVzdCwgMiwgc3JjLCBzcmNfY250LCBzY2YsIGxlbiwgZmxhZ3MpOworCQlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7CisJfQorCisJaWYgKHNyY19jbnQgPT0gMiAmJiBkc3RbMV0gPT0gc3JjWzFdKSB7CisJCXN3X2Rlc2MgPSBwcGM0NDBzcGVfZG1hMDFfcHJlcF9zdW1fcHJvZHVjdChwcGM0NDBzcGVfY2hhbiwKKwkJCQkJJmRzdFsxXSwgc3JjLCAyLCBzY2YsIGxlbiwgZmxhZ3MpOworCQlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7CisJfQorCisJaWYgKCEoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1ApKSB7CisJCUJVR19PTighZHN0WzBdKTsKKwkJZHN0X2NudCsrOworCQlmbGFncyB8PSBETUFfUFJFUF9aRVJPX1A7CisJfQorCisJaWYgKCEoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1EpKSB7CisJCUJVR19PTighZHN0WzFdKTsKKwkJZHN0X2NudCsrOworCQlmbGFncyB8PSBETUFfUFJFUF9aRVJPX1E7CisJfQorCisJQlVHX09OKCFkc3RfY250KTsKKworCWRldl9kYmcocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJInBwYzQ0MHNwZSBhZG1hJWQ6ICVzIHNyY19jbnQ6ICVkIGxlbjogJXUgaW50X2VuOiAlZFxuIiwKKwkJcHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsIF9fZnVuY19fLCBzcmNfY250LCBsZW4sCisJCWZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUID8gMSA6IDApOworCisJc3dpdGNoIChwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJc3dfZGVzYyA9IHBwYzQ0MHNwZV9kbWEwMV9wcmVwX3BxKHBwYzQ0MHNwZV9jaGFuLAorCQkJCWRzdCwgZHN0X2NudCwgc3JjLCBzcmNfY250LCBzY2YsCisJCQkJbGVuLCBmbGFncyk7CisJCWJyZWFrOworCisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQlzd19kZXNjID0gcHBjNDQwc3BlX2RtYTJfcHJlcF9wcShwcGM0NDBzcGVfY2hhbiwKKwkJCQlkc3QsIGRzdF9jbnQsIHNyYywgc3JjX2NudCwgc2NmLAorCQkJCWxlbiwgZmxhZ3MpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfcHF6ZXJvX3N1bSAtIHByZXBhcmUgQ0RCIGdyb3VwIGZvcgorICogYSBQUV9aRVJPX1NVTSBvcGVyYXRpb24KKyAqLworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfcHF6ZXJvX3N1bSgKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90ICpwcSwgZG1hX2FkZHJfdCAqc3JjLAorCQl1bnNpZ25lZCBpbnQgc3JjX2NudCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2NmLCBzaXplX3QgbGVuLAorCQllbnVtIHN1bV9jaGVja19mbGFncyAqcHFyZXMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MsICppdGVyOworCWRtYV9hZGRyX3QgcGRlc3QsIHFkZXN0OworCWludCBzbG90X2NudCwgc2xvdHNfcGVyX29wLCBpZHN0LCBkc3RfY250OworCisJcHBjNDQwc3BlX2NoYW4gPSB0b19wcGM0NDBzcGVfYWRtYV9jaGFuKGNoYW4pOworCisJaWYgKGZsYWdzICYgRE1BX1BSRVBfUFFfRElTQUJMRV9QKQorCQlwZGVzdCA9IDA7CisJZWxzZQorCQlwZGVzdCA9IHBxWzBdOworCisJaWYgKGZsYWdzICYgRE1BX1BSRVBfUFFfRElTQUJMRV9RKQorCQlxZGVzdCA9IDA7CisJZWxzZQorCQlxZGVzdCA9IHBxWzFdOworCisJQURNQV9MTF9EQkcocHJlcF9kbWFfcHF6ZXJvX3N1bV9kYmcocHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsCisJCQkJCSAgICBzcmMsIHNyY19jbnQsIHNjZikpOworCisJLyogQWx3YXlzIHVzZSBXWE9SIGZvciBQL1EgY2FsY3VsYXRpb25zICh0d28gZGVzdGluYXRpb25zKS4KKwkgKiBOZWVkIDEgb3IgMiBleHRyYSBzbG90cyB0byB2ZXJpZnkgcmVzdWx0cyBhcmUgemVyby4KKwkgKi8KKwlpZHN0ID0gZHN0X2NudCA9IChwZGVzdCAmJiBxZGVzdCkgPyAyIDogMTsKKworCS8qIE9uZSBhZGRpdGlvbmFsIHNsb3QgcGVyIGRlc3RpbmF0aW9uIHRvIGNsb25lIFAvUQorCSAqIGJlZm9yZSBjYWxjdWxhdGlvbiAod2UgaGF2ZSB0byBwcmVzZXJ2ZSBkZXN0aW5hdGlvbnMpLgorCSAqLworCXNsb3RfY250ID0gc3JjX2NudCArIGRzdF9jbnQgKiAyOworCXNsb3RzX3Blcl9vcCA9IDE7CisKKwlzcGluX2xvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKwlzd19kZXNjID0gcHBjNDQwc3BlX2FkbWFfYWxsb2Nfc2xvdHMocHBjNDQwc3BlX2NoYW4sIHNsb3RfY250LAorCQkJCQkgICAgIHNsb3RzX3Blcl9vcCk7CisJaWYgKHN3X2Rlc2MpIHsKKwkJcHBjNDQwc3BlX2Rlc2NfaW5pdF9kbWEwMXBxemVyb19zdW0oc3dfZGVzYywgZHN0X2NudCwgc3JjX2NudCk7CisKKwkJLyogU2V0dXAgYnl0ZSBjb3VudCBmb3IgZWFjaCBzbG90IGp1c3QgYWxsb2NhdGVkICovCisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJnN3X2Rlc2MtPmdyb3VwX2xpc3QsIGNoYWluX25vZGUpIHsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9ieXRlX2NvdW50KGl0ZXIsIHBwYzQ0MHNwZV9jaGFuLAorCQkJCQkJICAgICAgbGVuKTsKKwkJCWl0ZXItPnVubWFwX2xlbiA9IGxlbjsKKwkJfQorCisJCWlmIChwZGVzdCkgeworCQkJc3RydWN0IGRtYV9jZGIgKmh3X2Rlc2M7CisJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbjsKKworCQkJaXRlciA9IHN3X2Rlc2MtPmdyb3VwX2hlYWQ7CisJCQljaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihpdGVyLT5hc3luY190eC5jaGFuKTsKKwkJCW1lbXNldChpdGVyLT5od19kZXNjLCAwLCBzaXplb2Yoc3RydWN0IGRtYV9jZGIpKTsKKwkJCWl0ZXItPmh3X25leHQgPSBsaXN0X2VudHJ5KGl0ZXItPmNoYWluX25vZGUubmV4dCwKKwkJCQkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsCisJCQkJCQljaGFpbl9ub2RlKTsKKwkJCWh3X2Rlc2MgPSBpdGVyLT5od19kZXNjOworCQkJaHdfZGVzYy0+b3BjID0gRE1BX0NEQl9PUENfTVZfU0cxX1NHMjsKKwkJCWl0ZXItPnNyY19jbnQgPSAwOworCQkJaXRlci0+ZHN0X2NudCA9IDA7CisJCQlwcGM0NDBzcGVfZGVzY19zZXRfZGVzdF9hZGRyKGl0ZXIsIGNoYW4sIDAsCisJCQkJCQkgICAgIHBwYzQ0MHNwZV9jaGFuLT5wZGVzdCwgMCk7CisJCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoaXRlciwgY2hhbiwgMCwgMCwgcGRlc3QpOworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoaXRlciwgcHBjNDQwc3BlX2NoYW4sCisJCQkJCQkgICAgICBsZW4pOworCQkJaXRlci0+dW5tYXBfbGVuID0gMDsKKwkJCS8qIG92ZXJyaWRlIHBkZXN0IHRvIHByZXNlcnZlIG9yaWdpbmFsIFAgKi8KKwkJCXBkZXN0ID0gcHBjNDQwc3BlX2NoYW4tPnBkZXN0OworCQl9CisJCWlmIChxZGVzdCkgeworCQkJc3RydWN0IGRtYV9jZGIgKmh3X2Rlc2M7CisJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbjsKKworCQkJaXRlciA9IGxpc3RfZmlyc3RfZW50cnkoJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkJY2hhaW5fbm9kZSk7CisJCQljaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihpdGVyLT5hc3luY190eC5jaGFuKTsKKworCQkJaWYgKHBkZXN0KSB7CisJCQkJaXRlciA9IGxpc3RfZW50cnkoaXRlci0+Y2hhaW5fbm9kZS5uZXh0LAorCQkJCQkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCwKKwkJCQkJCWNoYWluX25vZGUpOworCQkJfQorCisJCQltZW1zZXQoaXRlci0+aHdfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSk7CisJCQlpdGVyLT5od19uZXh0ID0gbGlzdF9lbnRyeShpdGVyLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkJY2hhaW5fbm9kZSk7CisJCQlod19kZXNjID0gaXRlci0+aHdfZGVzYzsKKwkJCWh3X2Rlc2MtPm9wYyA9IERNQV9DREJfT1BDX01WX1NHMV9TRzI7CisJCQlpdGVyLT5zcmNfY250ID0gMDsKKwkJCWl0ZXItPmRzdF9jbnQgPSAwOworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLCAwLAorCQkJCQkJICAgICBwcGM0NDBzcGVfY2hhbi0+cWRlc3QsIDApOworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3NyY19hZGRyKGl0ZXIsIGNoYW4sIDAsIDAsIHFkZXN0KTsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9ieXRlX2NvdW50KGl0ZXIsIHBwYzQ0MHNwZV9jaGFuLAorCQkJCQkJICAgICAgbGVuKTsKKwkJCWl0ZXItPnVubWFwX2xlbiA9IDA7CisJCQkvKiBvdmVycmlkZSBxZGVzdCB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBRICovCisJCQlxZGVzdCA9IHBwYzQ0MHNwZV9jaGFuLT5xZGVzdDsKKwkJfQorCisJCS8qIFNldHVwIGRlc3RpbmF0aW9ucyBmb3IgUC9RIG9wcyAqLworCQlwcGM0NDBzcGVfYWRtYV9wcXplcm9fc3VtX3NldF9kZXN0KHN3X2Rlc2MsIHBkZXN0LCBxZGVzdCk7CisKKwkJLyogU2V0dXAgemVybyBRV09SRHMgaW50byBEQ0hFQ0sgQ0RCcyAqLworCQlpZHN0ID0gZHN0X2NudDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGl0ZXIsICZzd19kZXNjLT5ncm91cF9saXN0LAorCQkJCQkgICAgY2hhaW5fbm9kZSkgeworCQkJLyoKKwkJCSAqIFRoZSBsYXN0IENEQiBjb3JyZXNwb25kcyB0byBRLXBhcml0eSBjaGVjaywKKwkJCSAqIHRoZSBvbmUgYmVmb3JlIGxhc3QgQ0RCIGNvcnJlc3BvbmRzCisJCQkgKiBQLXBhcml0eSBjaGVjaworCQkJICovCisJCQlpZiAoaWRzdCA9PSBETUFfREVTVF9NQVhfTlVNKSB7CisJCQkJaWYgKGlkc3QgPT0gZHN0X2NudCkgeworCQkJCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX1FDSEVDSywKKwkJCQkJCSZpdGVyLT5mbGFncyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0X2JpdChQUEM0NDBTUEVfREVTQ19QQ0hFQ0ssCisJCQkJCQkmaXRlci0+ZmxhZ3MpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHFkZXN0KSB7CisJCQkJCXNldF9iaXQoUFBDNDQwU1BFX0RFU0NfUUNIRUNLLAorCQkJCQkJJml0ZXItPmZsYWdzKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX1BDSEVDSywKKwkJCQkJCSZpdGVyLT5mbGFncyk7CisJCQkJfQorCQkJfQorCQkJaXRlci0+eG9yX2NoZWNrX3Jlc3VsdCA9IHBxcmVzOworCisJCQkvKgorCQkJICogc2V0IGl0IHRvIHplcm8sIGlmIGNoZWNrIGZhaWwgdGhlbiByZXN1bHQgd2lsbAorCQkJICogYmUgdXBkYXRlZAorCQkJICovCisJCQkqaXRlci0+eG9yX2NoZWNrX3Jlc3VsdCA9IDA7CisJCQlwcGM0NDBzcGVfZGVzY19zZXRfZGNoZWNrKGl0ZXIsIHBwYzQ0MHNwZV9jaGFuLAorCQkJCXBwYzQ0MHNwZV9xd29yZCk7CisKKwkJCWlmICghKC0tZHN0X2NudCkpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBTZXR1cCBzb3VyY2VzIGFuZCBtdWx0cyBmb3IgUC9RIG9wcyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2UoaXRlciwgJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCQkJCQkgICAgIGNoYWluX25vZGUpIHsKKwkJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCQkJdTMyIG11bHRfZHN0OworCisJCQljaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihpdGVyLT5hc3luY190eC5jaGFuKTsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfYWRkcihpdGVyLCBjaGFuLCAwLAorCQkJCQkJICAgIERNQV9DVUVEX1hPUl9IQiwKKwkJCQkJCSAgICBzcmNbc3JjX2NudCAtIDFdKTsKKwkJCWlmIChxZGVzdCkgeworCQkJCW11bHRfZHN0ID0gKGRzdF9jbnQgLSAxKSA/IERNQV9DREJfU0dfRFNUMiA6CisJCQkJCQkJICAgRE1BX0NEQl9TR19EU1QxOworCQkJCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfbXVsdChpdGVyLCBjaGFuLAorCQkJCQkJCSAgICBETUFfQ1VFRF9NVUxUMV9PRkYsCisJCQkJCQkJICAgIG11bHRfZHN0LAorCQkJCQkJCSAgICBzY2Zbc3JjX2NudCAtIDFdKTsKKwkJCX0KKwkJCWlmICghKC0tc3JjX2NudCkpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnBwYzQ0MHNwZV9jaGFuLT5sb2NrKTsKKwlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfeG9yX3plcm9fc3VtIC0gcHJlcGFyZSBDREIgZ3JvdXAgZm9yCisgKiBYT1IgWkVST19TVU0gb3BlcmF0aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX3hvcl96ZXJvX3N1bSgKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90ICpzcmMsIHVuc2lnbmVkIGludCBzcmNfY250LAorCQlzaXplX3QgbGVuLCBlbnVtIHN1bV9jaGVja19mbGFncyAqcmVzdWx0LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHg7CisJZG1hX2FkZHJfdCBwcVsyXTsKKworCS8qIHZhbGlkYXRlIFAsIGRpc2FibGUgUSAqLworCXBxWzBdID0gc3JjWzBdOworCXBxWzFdID0gMDsKKwlmbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CisKKwl0eCA9IHBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX3BxemVyb19zdW0oY2hhbiwgcHEsICZzcmNbMV0sCisJCQkJCQlzcmNfY250IC0gMSwgMCwgbGVuLAorCQkJCQkJcmVzdWx0LCBmbGFncyk7CisJcmV0dXJuIHR4OworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX3NldF9kZXN0IC0gc2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW50byBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3NldF9kZXN0KHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MsCisJCWRtYV9hZGRyX3QgYWRkciwgaW50IGluZGV4KQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCisJQlVHX09OKGluZGV4ID49IHN3X2Rlc2MtPmRzdF9jbnQpOworCisJY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oc3dfZGVzYy0+YXN5bmNfdHguY2hhbik7CisKKwlzd2l0Y2ggKGNoYW4tPmRldmljZS0+aWQpIHsKKwljYXNlIFBQQzQ0MFNQRV9ETUEwX0lEOgorCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCS8qIHRvIGRvOiBzdXBwb3J0IHRyYW5zZmVycyBsZW5ndGhzID4KKwkJICogUFBDNDQwU1BFX0FETUFfRE1BL1hPUl9NQVhfQllURV9DT1VOVAorCQkgKi8KKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihzd19kZXNjLT5ncm91cF9oZWFkLAorCQkJY2hhbiwgMCwgYWRkciwgaW5kZXgpOworCQlicmVhazsKKwljYXNlIFBQQzQ0MFNQRV9YT1JfSUQ6CisJCXN3X2Rlc2MgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsIGluZGV4KTsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihzd19kZXNjLAorCQkJY2hhbiwgMCwgYWRkciwgaW5kZXgpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3BxX3plcm9fb3Aoc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlciwKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgYWRkcikKK3sKKwkvKiAgVG8gY2xlYXIgZGVzdGluYXRpb25zIHVwZGF0ZSB0aGUgZGVzY3JpcHRvcgorCSAqIChQIG9yIFEgZGVwZW5kaW5nIG9uIGluZGV4KSBhcyBmb2xsb3dzOgorCSAqIGFkZHIgaXMgZGVzdGluYXRpb24gKDAgY29ycmVzcG9uZHMgdG8gU0cyKToKKwkgKi8KKwlwcGM0NDBzcGVfZGVzY19zZXRfZGVzdF9hZGRyKGl0ZXIsIGNoYW4sIERNQV9DVUVEX1hPUl9CQVNFLCBhZGRyLCAwKTsKKworCS8qIC4uLiBhbmQgdGhlIGFkZHIgaXMgc291cmNlOiAqLworCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfYWRkcihpdGVyLCBjaGFuLCAwLCBETUFfQ1VFRF9YT1JfSEIsIGFkZHIpOworCisJLyogYWRkciBpcyBhbHdheXMgU0cyIHRoZW4gdGhlIG11bHQgaXMgYWx3YXlzIERTVDEgKi8KKwlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX211bHQoaXRlciwgY2hhbiwgRE1BX0NVRURfTVVMVDFfT0ZGLAorCQkJCSAgICBETUFfQ0RCX1NHX0RTVDEsIDEpOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX3BxX3NldF9kZXN0IC0gc2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW50byBkZXNjcmlwdG9yCisgKiBmb3IgdGhlIFBRWE9SIG9wZXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfYWRtYV9wcV9zZXRfZGVzdChzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjLAorCQlkbWFfYWRkcl90ICphZGRycywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICppdGVyOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCWRtYV9hZGRyX3QgcGFkZHIsIHFhZGRyOworCWRtYV9hZGRyX3QgYWRkciA9IDAsIHBwYXRoLCBxcGF0aDsKKwlpbnQgaW5kZXggPSAwLCBpOworCisJY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oc3dfZGVzYy0+YXN5bmNfdHguY2hhbik7CisKKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1ApCisJCXBhZGRyID0gMDsKKwllbHNlCisJCXBhZGRyID0gYWRkcnNbMF07CisKKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1EpCisJCXFhZGRyID0gMDsKKwllbHNlCisJCXFhZGRyID0gYWRkcnNbMV07CisKKwlpZiAoIXBhZGRyIHx8ICFxYWRkcikKKwkJYWRkciA9IHBhZGRyID8gcGFkZHIgOiBxYWRkcjsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJLyogd2FsayB0aHJvdWdoIHRoZSBXWE9SIHNvdXJjZSBsaXN0IGFuZCBzZXQgUC9RLWRlc3RpbmF0aW9ucworCQkgKiBmb3IgZWFjaCBzbG90OgorCQkgKi8KKwkJaWYgKCF0ZXN0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SLCAmc3dfZGVzYy0+ZmxhZ3MpKSB7CisJCQkvKiBUaGlzIGlzIFdYT1Itb25seSBjaGFpbjsgbWF5IGhhdmUgMS8yIHplcm8gZGVzY3MgKi8KKwkJCWlmICh0ZXN0X2JpdChQUEM0NDBTUEVfWkVST19QLCAmc3dfZGVzYy0+ZmxhZ3MpKQorCQkJCWluZGV4Kys7CisJCQlpZiAodGVzdF9iaXQoUFBDNDQwU1BFX1pFUk9fUSwgJnN3X2Rlc2MtPmZsYWdzKSkKKwkJCQlpbmRleCsrOworCisJCQlpdGVyID0gcHBjNDQwc3BlX2dldF9ncm91cF9lbnRyeShzd19kZXNjLCBpbmRleCk7CisJCQlpZiAoYWRkcikgeworCQkJCS8qIG9uZSBkZXN0aW5hdGlvbiAqLworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShpdGVyLAorCQkJCQkmc3dfZGVzYy0+Z3JvdXBfbGlzdCwgY2hhaW5fbm9kZSkKKwkJCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLAorCQkJCQkJRE1BX0NVRURfWE9SX0JBU0UsIGFkZHIsIDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiB0d28gZGVzdGluYXRpb25zICovCisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGl0ZXIsCisJCQkJCSZzd19kZXNjLT5ncm91cF9saXN0LCBjaGFpbl9ub2RlKSB7CisJCQkJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwgY2hhbiwKKwkJCQkJCURNQV9DVUVEX1hPUl9CQVNFLCBwYWRkciwgMCk7CisJCQkJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwgY2hhbiwKKwkJCQkJCURNQV9DVUVEX1hPUl9CQVNFLCBxYWRkciwgMSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaW5kZXgpIHsKKwkJCQkvKiAgVG8gY2xlYXIgZGVzdGluYXRpb25zIHVwZGF0ZSB0aGUgZGVzY3JpcHRvcgorCQkJCSAqICgxc3QsMm5kLCBvciBib3RoIGRlcGVuZGluZyBvbiBmbGFncykKKwkJCQkgKi8KKwkJCQlpbmRleCA9IDA7CisJCQkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9aRVJPX1AsCisJCQkJCQkmc3dfZGVzYy0+ZmxhZ3MpKSB7CisJCQkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KAorCQkJCQkJCXN3X2Rlc2MsIGluZGV4KyspOworCQkJCQlwcGM0NDBzcGVfYWRtYV9wcV96ZXJvX29wKGl0ZXIsIGNoYW4sCisJCQkJCQkJcGFkZHIpOworCQkJCX0KKworCQkJCWlmICh0ZXN0X2JpdChQUEM0NDBTUEVfWkVST19RLAorCQkJCQkJJnN3X2Rlc2MtPmZsYWdzKSkgeworCQkJCQlpdGVyID0gcHBjNDQwc3BlX2dldF9ncm91cF9lbnRyeSgKKwkJCQkJCQlzd19kZXNjLCBpbmRleCsrKTsKKwkJCQkJcHBjNDQwc3BlX2FkbWFfcHFfemVyb19vcChpdGVyLCBjaGFuLAorCQkJCQkJCXFhZGRyKTsKKwkJCQl9CisKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIGlzIFJYT1Itb25seSBvciBSWE9SL1dYT1IgbWl4ZWQgY2hhaW4gKi8KKworCQkJLyogSWYgd2Ugd2FudCB0byBpbmNsdWRlIGRlc3RpbmF0aW9uIGludG8gY2FsY3VsYXRpb25zLAorCQkJICogdGhlbiBtYWtlIGRlc3QgYWRkcmVzc2VzIGN1ZWQgd2l0aCBtdWx0PTEgKFhPUikuCisJCQkgKi8KKwkJCXBwYXRoID0gdGVzdF9iaXQoUFBDNDQwU1BFX1pFUk9fUCwgJnN3X2Rlc2MtPmZsYWdzKSA/CisJCQkJCURNQV9DVUVEX1hPUl9IQiA6CisJCQkJCURNQV9DVUVEX1hPUl9CQVNFIHwKKwkJCQkJCSgxIDw8IERNQV9DVUVEX01VTFQxX09GRik7CisJCQlxcGF0aCA9IHRlc3RfYml0KFBQQzQ0MFNQRV9aRVJPX1EsICZzd19kZXNjLT5mbGFncykgPworCQkJCQlETUFfQ1VFRF9YT1JfSEIgOgorCQkJCQlETUFfQ1VFRF9YT1JfQkFTRSB8CisJCQkJCQkoMSA8PCBETUFfQ1VFRF9NVUxUMV9PRkYpOworCisJCQkvKiBTZXR1cCBkZXN0aW5hdGlvbihzKSBpbiBSWE9SIHNsb3QocykgKi8KKwkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsIGluZGV4KyspOworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLAorCQkJCQkJcGFkZHIgPyBwcGF0aCA6IHFwYXRoLAorCQkJCQkJcGFkZHIgPyBwYWRkciA6IHFhZGRyLCAwKTsKKwkJCWlmICghYWRkcikgeworCQkJCS8qIHR3byBkZXN0aW5hdGlvbnMgKi8KKwkJCQlpdGVyID0gcHBjNDQwc3BlX2dldF9ncm91cF9lbnRyeShzd19kZXNjLAorCQkJCQkJCQkgaW5kZXgrKyk7CisJCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLAorCQkJCQkJcXBhdGgsIHFhZGRyLCAwKTsKKwkJCX0KKworCQkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1dYT1IsICZzd19kZXNjLT5mbGFncykpIHsKKwkJCQkvKiBTZXR1cCBkZXN0aW5hdGlvbihzKSBpbiByZW1haW5pbmcgV1hPUgorCQkJCSAqIHNsb3RzCisJCQkJICovCisJCQkJaXRlciA9IHBwYzQ0MHNwZV9nZXRfZ3JvdXBfZW50cnkoc3dfZGVzYywKKwkJCQkJCQkJIGluZGV4KTsKKwkJCQlpZiAoYWRkcikgeworCQkJCQkvKiBvbmUgZGVzdGluYXRpb24gKi8KKwkJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGl0ZXIsCisJCQkJCSAgICAmc3dfZGVzYy0+Z3JvdXBfbGlzdCwKKwkJCQkJICAgIGNoYWluX25vZGUpCisJCQkJCQlwcGM0NDBzcGVfZGVzY19zZXRfZGVzdF9hZGRyKAorCQkJCQkJCWl0ZXIsIGNoYW4sCisJCQkJCQkJRE1BX0NVRURfWE9SX0JBU0UsCisJCQkJCQkJYWRkciwgMCk7CisKKwkJCQl9IGVsc2UgeworCQkJCQkvKiB0d28gZGVzdGluYXRpb25zICovCisJCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShpdGVyLAorCQkJCQkgICAgJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCQkJCSAgICBjaGFpbl9ub2RlKSB7CisJCQkJCQlwcGM0NDBzcGVfZGVzY19zZXRfZGVzdF9hZGRyKAorCQkJCQkJCWl0ZXIsIGNoYW4sCisJCQkJCQkJRE1BX0NVRURfWE9SX0JBU0UsCisJCQkJCQkJcGFkZHIsIDApOworCQkJCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcigKKwkJCQkJCQlpdGVyLCBjaGFuLAorCQkJCQkJCURNQV9DVUVEX1hPUl9CQVNFLAorCQkJCQkJCXFhZGRyLCAxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQl9CisJCWJyZWFrOworCisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQkvKiBETUEyIGRlc2NyaXB0b3JzIGhhdmUgb25seSAxIGRlc3RpbmF0aW9uLCBzbyB0aGVyZSBhcmUKKwkJICogdHdvIGNoYWlucyAtIG9uZSBmb3IgZWFjaCBkZXN0LgorCQkgKiBJZiB3ZSB3YW50IHRvIGluY2x1ZGUgZGVzdGluYXRpb24gaW50byBjYWxjdWxhdGlvbnMsCisJCSAqIHRoZW4gbWFrZSBkZXN0IGFkZHJlc3NlcyBjdWVkIHdpdGggbXVsdD0xIChYT1IpLgorCQkgKi8KKwkJcHBhdGggPSB0ZXN0X2JpdChQUEM0NDBTUEVfWkVST19QLCAmc3dfZGVzYy0+ZmxhZ3MpID8KKwkJCQlETUFfQ1VFRF9YT1JfSEIgOgorCQkJCURNQV9DVUVEX1hPUl9CQVNFIHwKKwkJCQkJKDEgPDwgRE1BX0NVRURfTVVMVDFfT0ZGKTsKKworCQlxcGF0aCA9IHRlc3RfYml0KFBQQzQ0MFNQRV9aRVJPX1EsICZzd19kZXNjLT5mbGFncykgPworCQkJCURNQV9DVUVEX1hPUl9IQiA6CisJCQkJRE1BX0NVRURfWE9SX0JBU0UgfAorCQkJCQkoMSA8PCBETUFfQ1VFRF9NVUxUMV9PRkYpOworCisJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsIDApOworCQlmb3IgKGkgPSAwOyBpIDwgc3dfZGVzYy0+ZGVzY3NfcGVyX29wOyBpKyspIHsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwgY2hhbiwKKwkJCQlwYWRkciA/IHBwYXRoIDogcXBhdGgsCisJCQkJcGFkZHIgPyBwYWRkciA6IHFhZGRyLCAwKTsKKwkJCWl0ZXIgPSBsaXN0X2VudHJ5KGl0ZXItPmNoYWluX25vZGUubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkgIGNoYWluX25vZGUpOworCQl9CisKKwkJaWYgKCFhZGRyKSB7CisJCQkvKiBUd28gZGVzdGluYXRpb25zOyBzZXR1cCBRIGhlcmUgKi8KKwkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsCisJCQkJc3dfZGVzYy0+ZGVzY3NfcGVyX29wKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzd19kZXNjLT5kZXNjc19wZXJfb3A7IGkrKykgeworCQkJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwKKwkJCQkJY2hhbiwgcXBhdGgsIHFhZGRyLCAwKTsKKwkJCQlpdGVyID0gbGlzdF9lbnRyeShpdGVyLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkJY2hhaW5fbm9kZSk7CisJCQl9CisJCX0KKworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHFfemVyb19zdW1fc2V0X2Rlc3QgLSBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyBpbnRvIGRlc2NyaXB0b3IKKyAqIGZvciB0aGUgUFFfWkVST19TVU0gb3BlcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3BxemVyb19zdW1fc2V0X2Rlc3QoCisJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MsCisJCWRtYV9hZGRyX3QgcGFkZHIsIGRtYV9hZGRyX3QgcWFkZHIpCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlciwgKmVuZDsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbjsKKwlkbWFfYWRkcl90IGFkZHIgPSAwOworCWludCBpZHg7CisKKwljaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihzd19kZXNjLT5hc3luY190eC5jaGFuKTsKKworCS8qIHdhbGsgdGhyb3VnaCB0aGUgV1hPUiBzb3VyY2UgbGlzdCBhbmQgc2V0IFAvUS1kZXN0aW5hdGlvbnMKKwkgKiBmb3IgZWFjaCBzbG90CisJICovCisJaWR4ID0gKHBhZGRyICYmIHFhZGRyKSA/IDIgOiAxOworCS8qIHNldCBlbmQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoZW5kLCAmc3dfZGVzYy0+Z3JvdXBfbGlzdCwKKwkJCQkgICAgY2hhaW5fbm9kZSkgeworCQlpZiAoISgtLWlkeCkpCisJCQlicmVhazsKKwl9CisJLyogc2V0IHN0YXJ0ICovCisJaWR4ID0gKHBhZGRyICYmIHFhZGRyKSA/IDIgOiAxOworCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsIGlkeCk7CisKKwlpZiAocGFkZHIgJiYgcWFkZHIpIHsKKwkJLyogdHdvIGRlc3RpbmF0aW9ucyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oaXRlciwgJnN3X2Rlc2MtPmdyb3VwX2xpc3QsCisJCQkJCSBjaGFpbl9ub2RlKSB7CisJCQlpZiAodW5saWtlbHkoaXRlciA9PSBlbmQpKQorCQkJCWJyZWFrOworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2Rlc3RfYWRkcihpdGVyLCBjaGFuLAorCQkJCQkJRE1BX0NVRURfWE9SX0JBU0UsIHBhZGRyLCAwKTsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwgY2hhbiwKKwkJCQkJCURNQV9DVUVEX1hPUl9CQVNFLCBxYWRkciwgMSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBvbmUgZGVzdGluYXRpb24gKi8KKwkJYWRkciA9IHBhZGRyID8gcGFkZHIgOiBxYWRkcjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGl0ZXIsICZzd19kZXNjLT5ncm91cF9saXN0LAorCQkJCQkgY2hhaW5fbm9kZSkgeworCQkJaWYgKHVubGlrZWx5KGl0ZXIgPT0gZW5kKSkKKwkJCQlicmVhazsKKwkJCXBwYzQ0MHNwZV9kZXNjX3NldF9kZXN0X2FkZHIoaXRlciwgY2hhbiwKKwkJCQkJCURNQV9DVUVEX1hPUl9CQVNFLCBhZGRyLCAwKTsKKwkJfQorCX0KKworCS8qICBUaGUgcmVtYWluaW5nIGRlc2NyaXB0b3JzIGFyZSBEQVRBQ0hFQ0suIFRoZXNlIGhhdmUgbm8gbmVlZCBpbgorCSAqIGRlc3RpbmF0aW9uLiBBY3R1YWxseSwgdGhlc2UgZGVzdGluYXRpb25zIGFyZSB1c2VkIHRoZXJlCisJICogYXMgc291cmNlcyBmb3IgY2hlY2sgb3BlcmF0aW9uLiBTbywgc2V0IGFkZHIgYXMgc291cmNlLgorCSAqLworCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfYWRkcihlbmQsIGNoYW4sIDAsIDAsIGFkZHIgPyBhZGRyIDogcGFkZHIpOworCisJaWYgKCFhZGRyKSB7CisJCWVuZCA9IGxpc3RfZW50cnkoZW5kLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsIGNoYWluX25vZGUpOworCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoZW5kLCBjaGFuLCAwLCAwLCBxYWRkcik7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9kZXNjX3NldF94b3Jfc3JjX2NudCAtIHNldCBzb3VyY2UgY291bnQgaW50byBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcGM0NDBzcGVfZGVzY19zZXRfeG9yX3NyY19jbnQoCisJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQkJaW50IHNyY19jbnQpCit7CisJc3RydWN0IHhvcl9jYiAqaHdfZGVzYyA9IGRlc2MtPmh3X2Rlc2M7CisKKwlod19kZXNjLT5jYmMgJj0gflhPUl9DRENSX09BQ19NU0s7CisJaHdfZGVzYy0+Y2JjIHw9IHNyY19jbnQ7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHFfc2V0X3NyYyAtIHNldCBzb3VyY2UgYWRkcmVzcyBpbnRvIGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2FkbWFfcHFfc2V0X3NyYyhzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjLAorCQlkbWFfYWRkcl90IGFkZHIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbjsKKwlkbWFfYWRkcl90IGhhZGRyID0gMDsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICppdGVyID0gTlVMTDsKKworCWNoYW4gPSB0b19wcGM0NDBzcGVfYWRtYV9jaGFuKHN3X2Rlc2MtPmFzeW5jX3R4LmNoYW4pOworCisJc3dpdGNoIChjaGFuLT5kZXZpY2UtPmlkKSB7CisJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwljYXNlIFBQQzQ0MFNQRV9ETUExX0lEOgorCQkvKiBETUEwLDEgbWF5IGRvOiBXWE9SLCBSWE9SLCBSWE9SK1dYT1JzIGNoYWluCisJCSAqLworCQlpZiAodGVzdF9iaXQoUFBDNDQwU1BFX0RFU0NfUlhPUiwgJnN3X2Rlc2MtPmZsYWdzKSkgeworCQkJLyogUlhPUi1vbmx5IG9yIFJYT1IvV1hPUiBvcGVyYXRpb24gKi8KKwkJCWludCBpc2tpcCA9IHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IxMiwKKwkJCQkmc3dfZGVzYy0+ZmxhZ3MpID8gIDIgOiAzOworCisJCQlpZiAoaW5kZXggPT0gMCkgeworCQkJCS8qIDFzdCBzbG90IChSWE9SKSAqLworCQkJCS8qIHNldHVwIHNvdXJjZXMgcmVnaW9uIChSMS0yLTMsIFIxLTItNCwKKwkJCQkgKiBvciBSMS0yLTUpCisJCQkJICovCisJCQkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IxMiwKKwkJCQkJCSZzd19kZXNjLT5mbGFncykpCisJCQkJCWhhZGRyID0gRE1BX1JYT1IxMiA8PAorCQkJCQkJRE1BX0NVRURfUkVHSU9OX09GRjsKKwkJCQllbHNlIGlmICh0ZXN0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SMTIzLAorCQkJCSAgICAmc3dfZGVzYy0+ZmxhZ3MpKQorCQkJCQloYWRkciA9IERNQV9SWE9SMTIzIDw8CisJCQkJCQlETUFfQ1VFRF9SRUdJT05fT0ZGOworCQkJCWVsc2UgaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IxMjQsCisJCQkJICAgICZzd19kZXNjLT5mbGFncykpCisJCQkJCWhhZGRyID0gRE1BX1JYT1IxMjQgPDwKKwkJCQkJCURNQV9DVUVEX1JFR0lPTl9PRkY7CisJCQkJZWxzZSBpZiAodGVzdF9iaXQoUFBDNDQwU1BFX0RFU0NfUlhPUjEyNSwKKwkJCQkgICAgJnN3X2Rlc2MtPmZsYWdzKSkKKwkJCQkJaGFkZHIgPSBETUFfUlhPUjEyNSA8PAorCQkJCQkJRE1BX0NVRURfUkVHSU9OX09GRjsKKwkJCQllbHNlCisJCQkJCUJVRygpOworCQkJCWhhZGRyIHw9IERNQV9DVUVEX1hPUl9CQVNFOworCQkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsIDApOworCQkJfSBlbHNlIGlmIChpbmRleCA8IGlza2lwKSB7CisJCQkJLyogMXN0IHNsb3QgKFJYT1IpCisJCQkJICogc2hhbGwgYWN0dWFsbHkgc2V0IHNvdXJjZSBhZGRyZXNzIG9ubHkgb25jZQorCQkJCSAqIGluc3RlYWQgb2YgZmlyc3QgPGlza2lwPgorCQkJCSAqLworCQkJCWl0ZXIgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQkvKiAybmQvM2QgYW5kIG5leHQgc2xvdHMgKFdYT1IpOworCQkJCSAqIHNraXAgZmlyc3Qgc2xvdCB3aXRoIFJYT1IKKwkJCQkgKi8KKwkJCQloYWRkciA9IERNQV9DVUVEX1hPUl9IQjsKKwkJCQlpdGVyID0gcHBjNDQwc3BlX2dldF9ncm91cF9lbnRyeShzd19kZXNjLAorCQkJCSAgICBpbmRleCAtIGlza2lwICsgc3dfZGVzYy0+ZHN0X2NudCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpbnQgem51bSA9IDA7CisKKwkJCS8qIFdYT1Itb25seSBvcGVyYXRpb247IHNraXAgZmlyc3Qgc2xvdHMgd2l0aAorCQkJICogemVyb2luZyBkZXN0aW5hdGlvbnMKKwkJCSAqLworCQkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9aRVJPX1AsICZzd19kZXNjLT5mbGFncykpCisJCQkJem51bSsrOworCQkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9aRVJPX1EsICZzd19kZXNjLT5mbGFncykpCisJCQkJem51bSsrOworCisJCQloYWRkciA9IERNQV9DVUVEX1hPUl9IQjsKKwkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsCisJCQkJCWluZGV4ICsgem51bSk7CisJCX0KKworCQlpZiAobGlrZWx5KGl0ZXIpKSB7CisJCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoaXRlciwgY2hhbiwgMCwgaGFkZHIsIGFkZHIpOworCisJCQlpZiAoIWluZGV4ICYmCisJCQkgICAgdGVzdF9iaXQoUFBDNDQwU1BFX0RFU0NfUlhPUiwgJnN3X2Rlc2MtPmZsYWdzKSAmJgorCQkJICAgIHN3X2Rlc2MtPmRzdF9jbnQgPT0gMikgeworCQkJCS8qIGlmIHdlIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBmb3IgUlhPUiwgdGhlbgorCQkJCSAqIHNldHVwIHNvdXJjZSBpbiB0aGUgc2Vjb25kIGRlc2NyIHRvbworCQkJCSAqLworCQkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsIDEpOworCQkJCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfYWRkcihpdGVyLCBjaGFuLCAwLAorCQkJCQloYWRkciwgYWRkcik7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBQQzQ0MFNQRV9YT1JfSUQ6CisJCS8qIERNQTIgbWF5IGRvIEJpc2t1cCAqLworCQlpdGVyID0gc3dfZGVzYy0+Z3JvdXBfaGVhZDsKKwkJaWYgKGl0ZXItPmRzdF9jbnQgPT0gMikgeworCQkJLyogYm90aCBQICYgUSBjYWxjdWxhdGlvbnMgcmVxdWlyZWQ7IHNldCBQIHNyYyBoZXJlICovCisJCQlwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9zZXRfc3JjKGl0ZXIsIGluZGV4LCBhZGRyKTsKKworCQkJLyogdGhpcyBpcyBmb3IgUSAqLworCQkJaXRlciA9IHBwYzQ0MHNwZV9nZXRfZ3JvdXBfZW50cnkoc3dfZGVzYywKKwkJCQlzd19kZXNjLT5kZXNjc19wZXJfb3ApOworCQl9CisJCXBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX3NldF9zcmMoaXRlciwgaW5kZXgsIGFkZHIpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfbWVtY3B5X3hvcl9zZXRfc3JjIC0gc2V0IHNvdXJjZSBhZGRyZXNzIGludG8gZGVzY3JpcHRvcgorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfYWRtYV9tZW1jcHlfeG9yX3NldF9zcmMoCisJCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKnN3X2Rlc2MsCisJCWRtYV9hZGRyX3QgYWRkciwgaW50IGluZGV4KQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCisJY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oc3dfZGVzYy0+YXN5bmNfdHguY2hhbik7CisJc3dfZGVzYyA9IHN3X2Rlc2MtPmdyb3VwX2hlYWQ7CisKKwlpZiAobGlrZWx5KHN3X2Rlc2MpKQorCQlwcGM0NDBzcGVfZGVzY19zZXRfc3JjX2FkZHIoc3dfZGVzYywgY2hhbiwgaW5kZXgsIDAsIGFkZHIpOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX2luY19hZGRyICAtCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX2luY19hZGRyKAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQlzdHJ1Y3QgcHBjNDQwc3BlX3J4b3IgKmN1cnNvciwgaW50IGluZGV4LCBpbnQgc3JjX2NudCkKK3sKKwljdXJzb3ItPmFkZHJfY291bnQrKzsKKwlpZiAoaW5kZXggPT0gc3JjX2NudCAtIDEpIHsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3hvcl9zcmNfY250KGRlc2MsIGN1cnNvci0+YWRkcl9jb3VudCk7CisJfSBlbHNlIGlmIChjdXJzb3ItPmFkZHJfY291bnQgPT0gWE9SX01BWF9PUFMpIHsKKwkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3hvcl9zcmNfY250KGRlc2MsIGN1cnNvci0+YWRkcl9jb3VudCk7CisJCWN1cnNvci0+YWRkcl9jb3VudCA9IDA7CisJCWN1cnNvci0+ZGVzY19jb3VudCsrOworCX0KK30KKworLyoqCisgKiBwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9wcmVwX3NyYyAtIHNldHVwIFJYT1IgdHlwZXMgaW4gRE1BMiBDREIKKyAqLworc3RhdGljIGludCBwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9wcmVwX3NyYygKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaGRlc2MsCisJCXN0cnVjdCBwcGM0NDBzcGVfcnhvciAqY3Vyc29yLCBpbnQgaW5kZXgsCisJCWludCBzcmNfY250LCB1MzIgYWRkcikKK3sKKwlpbnQgcnZhbCA9IDA7CisJdTMyIHNpZ247CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYyA9IGhkZXNjOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN1cnNvci0+ZGVzY19jb3VudDsgaSsrKSB7CisJCWRlc2MgPSBsaXN0X2VudHJ5KGhkZXNjLT5jaGFpbl9ub2RlLm5leHQsCisJCQkJICBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCSAgY2hhaW5fbm9kZSk7CisJfQorCisJc3dpdGNoIChjdXJzb3ItPnN0YXRlKSB7CisJY2FzZSAwOgorCQlpZiAoYWRkciA9PSBjdXJzb3ItPmFkZHJsICsgY3Vyc29yLT5sZW4pIHsKKwkJCS8qIGRpcmVjdCBSWE9SICovCisJCQljdXJzb3ItPnN0YXRlID0gMTsKKwkJCWN1cnNvci0+eG9yX2NvdW50Kys7CisJCQlpZiAoaW5kZXggPT0gc3JjX2NudC0xKSB7CisJCQkJcHBjNDQwc3BlX3J4b3Jfc2V0X3JlZ2lvbihkZXNjLAorCQkJCQljdXJzb3ItPmFkZHJfY291bnQsCisJCQkJCURNQV9SWE9SMTIgPDwgRE1BX0NVRURfUkVHSU9OX09GRik7CisJCQkJcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3JfaW5jX2FkZHIoCisJCQkJCWRlc2MsIGN1cnNvciwgaW5kZXgsIHNyY19jbnQpOworCQkJfQorCQl9IGVsc2UgaWYgKGN1cnNvci0+YWRkcmwgPT0gYWRkciArIGN1cnNvci0+bGVuKSB7CisJCQkvKiByZXZlcnNlIFJYT1IgKi8KKwkJCWN1cnNvci0+c3RhdGUgPSAxOworCQkJY3Vyc29yLT54b3JfY291bnQrKzsKKwkJCXNldF9iaXQoY3Vyc29yLT5hZGRyX2NvdW50LCAmZGVzYy0+cmV2ZXJzZV9mbGFnc1swXSk7CisJCQlpZiAoaW5kZXggPT0gc3JjX2NudC0xKSB7CisJCQkJcHBjNDQwc3BlX3J4b3Jfc2V0X3JlZ2lvbihkZXNjLAorCQkJCQljdXJzb3ItPmFkZHJfY291bnQsCisJCQkJCURNQV9SWE9SMTIgPDwgRE1BX0NVRURfUkVHSU9OX09GRik7CisJCQkJcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3JfaW5jX2FkZHIoCisJCQkJCWRlc2MsIGN1cnNvciwgaW5kZXgsIHNyY19jbnQpOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgYnVpbGQgIgorCQkJCSJETUEyIFJYT1IgY29tbWFuZCBibG9jay5cbiIpOworCQkJQlVHKCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzaWduID0gdGVzdF9iaXQoY3Vyc29yLT5hZGRyX2NvdW50LAorCQkJCWRlc2MtPnJldmVyc2VfZmxhZ3MpCisJCQk/IC0xIDogMTsKKwkJaWYgKGluZGV4ID09IHNyY19jbnQtMiB8fCAoc2lnbiA9PSAtMQorCQkJJiYgYWRkciAhPSBjdXJzb3ItPmFkZHJsIC0gMipjdXJzb3ItPmxlbikpIHsKKwkJCWN1cnNvci0+c3RhdGUgPSAwOworCQkJY3Vyc29yLT54b3JfY291bnQgPSAxOworCQkJY3Vyc29yLT5hZGRybCA9IGFkZHI7CisJCQlwcGM0NDBzcGVfcnhvcl9zZXRfcmVnaW9uKGRlc2MsCisJCQkJY3Vyc29yLT5hZGRyX2NvdW50LAorCQkJCURNQV9SWE9SMTIgPDwgRE1BX0NVRURfUkVHSU9OX09GRik7CisJCQlwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9pbmNfYWRkcigKKwkJCQlkZXNjLCBjdXJzb3IsIGluZGV4LCBzcmNfY250KTsKKwkJfSBlbHNlIGlmIChhZGRyID09IGN1cnNvci0+YWRkcmwgKyAyKnNpZ24qY3Vyc29yLT5sZW4pIHsKKwkJCWN1cnNvci0+c3RhdGUgPSAyOworCQkJY3Vyc29yLT54b3JfY291bnQgPSAwOworCQkJcHBjNDQwc3BlX3J4b3Jfc2V0X3JlZ2lvbihkZXNjLAorCQkJCWN1cnNvci0+YWRkcl9jb3VudCwKKwkJCQlETUFfUlhPUjEyMyA8PCBETUFfQ1VFRF9SRUdJT05fT0ZGKTsKKwkJCWlmIChpbmRleCA9PSBzcmNfY250LTEpIHsKKwkJCQlwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9pbmNfYWRkcigKKwkJCQkJZGVzYywgY3Vyc29yLCBpbmRleCwgc3JjX2NudCk7CisJCQl9CisJCX0gZWxzZSBpZiAoYWRkciA9PSBjdXJzb3ItPmFkZHJsICsgMypjdXJzb3ItPmxlbikgeworCQkJY3Vyc29yLT5zdGF0ZSA9IDI7CisJCQljdXJzb3ItPnhvcl9jb3VudCA9IDA7CisJCQlwcGM0NDBzcGVfcnhvcl9zZXRfcmVnaW9uKGRlc2MsCisJCQkJY3Vyc29yLT5hZGRyX2NvdW50LAorCQkJCURNQV9SWE9SMTI0IDw8IERNQV9DVUVEX1JFR0lPTl9PRkYpOworCQkJaWYgKGluZGV4ID09IHNyY19jbnQtMSkgeworCQkJCXBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX2luY19hZGRyKAorCQkJCQlkZXNjLCBjdXJzb3IsIGluZGV4LCBzcmNfY250KTsKKwkJCX0KKwkJfSBlbHNlIGlmIChhZGRyID09IGN1cnNvci0+YWRkcmwgKyA0KmN1cnNvci0+bGVuKSB7CisJCQljdXJzb3ItPnN0YXRlID0gMjsKKwkJCWN1cnNvci0+eG9yX2NvdW50ID0gMDsKKwkJCXBwYzQ0MHNwZV9yeG9yX3NldF9yZWdpb24oZGVzYywKKwkJCQljdXJzb3ItPmFkZHJfY291bnQsCisJCQkJRE1BX1JYT1IxMjUgPDwgRE1BX0NVRURfUkVHSU9OX09GRik7CisJCQlpZiAoaW5kZXggPT0gc3JjX2NudC0xKSB7CisJCQkJcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3JfaW5jX2FkZHIoCisJCQkJCWRlc2MsIGN1cnNvciwgaW5kZXgsIHNyY19jbnQpOworCQkJfQorCQl9IGVsc2UgeworCQkJY3Vyc29yLT5zdGF0ZSA9IDA7CisJCQljdXJzb3ItPnhvcl9jb3VudCA9IDE7CisJCQljdXJzb3ItPmFkZHJsID0gYWRkcjsKKwkJCXBwYzQ0MHNwZV9yeG9yX3NldF9yZWdpb24oZGVzYywKKwkJCQljdXJzb3ItPmFkZHJfY291bnQsCisJCQkJRE1BX1JYT1IxMiA8PCBETUFfQ1VFRF9SRUdJT05fT0ZGKTsKKwkJCXBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX2luY19hZGRyKAorCQkJCWRlc2MsIGN1cnNvciwgaW5kZXgsIHNyY19jbnQpOworCQl9CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY3Vyc29yLT5zdGF0ZSA9IDA7CisJCWN1cnNvci0+YWRkcmwgPSBhZGRyOworCQljdXJzb3ItPnhvcl9jb3VudCsrOworCQlpZiAoaW5kZXgpIHsKKwkJCXBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX2luY19hZGRyKAorCQkJCWRlc2MsIGN1cnNvciwgaW5kZXgsIHNyY19jbnQpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiBydmFsOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX3NldF9zcmMgLSBzZXQgUlhPUiBzb3VyY2UgYWRkcmVzczsgaXQncyBhc3N1bWVkIHRoYXQKKyAqCXBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX3ByZXBfc3JjKCkgaGFzIGFscmVhZHkgZG9uZSBwcmlvciB0aGlzIGNhbGwKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3Jfc2V0X3NyYygKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZGVzYywKKwkJaW50IGluZGV4LCBkbWFfYWRkcl90IGFkZHIpCit7CisJc3RydWN0IHhvcl9jYiAqeGNiID0gZGVzYy0+aHdfZGVzYzsKKwlpbnQgayA9IDAsIG9wID0gMCwgbG9wID0gMDsKKworCS8qIGdldCB0aGUgUlhPUiBvcGVyYW5kIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGluZGV4IGFkZHIgKi8KKwl3aGlsZSAob3AgPD0gaW5kZXgpIHsKKwkJbG9wID0gb3A7CisJCWlmIChrID09IFhPUl9NQVhfT1BTKSB7CisJCQlrID0gMDsKKwkJCWRlc2MgPSBsaXN0X2VudHJ5KGRlc2MtPmNoYWluX25vZGUubmV4dCwKKwkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LCBjaGFpbl9ub2RlKTsKKwkJCXhjYiA9IGRlc2MtPmh3X2Rlc2M7CisKKwkJfQorCQlpZiAoKHhjYi0+b3BzW2srK10uaCAmIChETUFfUlhPUjEyIDw8IERNQV9DVUVEX1JFR0lPTl9PRkYpKSA9PQorCQkgICAgKERNQV9SWE9SMTIgPDwgRE1BX0NVRURfUkVHSU9OX09GRikpCisJCQlvcCArPSAyOworCQllbHNlCisJCQlvcCArPSAzOworCX0KKworCUJVR19PTihrIDwgMSk7CisKKwlpZiAodGVzdF9iaXQoay0xLCBkZXNjLT5yZXZlcnNlX2ZsYWdzKSkgeworCQkvKiByZXZlcnNlIG9wZXJhbmQgb3JkZXI7IHB1dCBsYXN0IG9wIGluIFJYT1IgZ3JvdXAgKi8KKwkJaWYgKGluZGV4ID09IG9wIC0gMSkKKwkJCXBwYzQ0MHNwZV9yeG9yX3NldF9zcmMoZGVzYywgayAtIDEsIGFkZHIpOworCX0gZWxzZSB7CisJCS8qIGRpcmVjdCBvcGVyYW5kIG9yZGVyOyBwdXQgZmlyc3Qgb3AgaW4gUlhPUiBncm91cCAqLworCQlpZiAoaW5kZXggPT0gbG9wKQorCQkJcHBjNDQwc3BlX3J4b3Jfc2V0X3NyYyhkZXNjLCBrIC0gMSwgYWRkcik7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX3NldF9tdWx0IC0gc2V0IFJYT1IgbXVsdGlwbGllcnM7IGl0J3MgYXNzdW1lZCB0aGF0CisgKglwcGM0NDBzcGVfYWRtYV9kbWEycnhvcl9wcmVwX3NyYygpIGhhcyBhbHJlYWR5IGRvbmUgcHJpb3IgdGhpcyBjYWxsCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX2RtYTJyeG9yX3NldF9tdWx0KAorCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpkZXNjLAorCQlpbnQgaW5kZXgsIHU4IG11bHQpCit7CisJc3RydWN0IHhvcl9jYiAqeGNiID0gZGVzYy0+aHdfZGVzYzsKKwlpbnQgayA9IDAsIG9wID0gMCwgbG9wID0gMDsKKworCS8qIGdldCB0aGUgUlhPUiBvcGVyYW5kIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGluZGV4IG11bHQgKi8KKwl3aGlsZSAob3AgPD0gaW5kZXgpIHsKKwkJbG9wID0gb3A7CisJCWlmIChrID09IFhPUl9NQVhfT1BTKSB7CisJCQlrID0gMDsKKwkJCWRlc2MgPSBsaXN0X2VudHJ5KGRlc2MtPmNoYWluX25vZGUubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90LAorCQkJCQkgIGNoYWluX25vZGUpOworCQkJeGNiID0gZGVzYy0+aHdfZGVzYzsKKworCQl9CisJCWlmICgoeGNiLT5vcHNbaysrXS5oICYgKERNQV9SWE9SMTIgPDwgRE1BX0NVRURfUkVHSU9OX09GRikpID09CisJCSAgICAoRE1BX1JYT1IxMiA8PCBETUFfQ1VFRF9SRUdJT05fT0ZGKSkKKwkJCW9wICs9IDI7CisJCWVsc2UKKwkJCW9wICs9IDM7CisJfQorCisJQlVHX09OKGsgPCAxKTsKKwlpZiAodGVzdF9iaXQoay0xLCBkZXNjLT5yZXZlcnNlX2ZsYWdzKSkgeworCQkvKiByZXZlcnNlIG9yZGVyICovCisJCXBwYzQ0MHNwZV9yeG9yX3NldF9tdWx0KGRlc2MsIGsgLSAxLCBvcCAtIGluZGV4IC0gMSwgbXVsdCk7CisJfSBlbHNlIHsKKwkJLyogZGlyZWN0IG9yZGVyICovCisJCXBwYzQ0MHNwZV9yeG9yX3NldF9tdWx0KGRlc2MsIGsgLSAxLCBpbmRleCAtIGxvcCwgbXVsdCk7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9pbml0X3J4b3JfY3Vyc29yIC0KKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2luaXRfcnhvcl9jdXJzb3Ioc3RydWN0IHBwYzQ0MHNwZV9yeG9yICpjdXJzb3IpCit7CisJbWVtc2V0KGN1cnNvciwgMCwgc2l6ZW9mKHN0cnVjdCBwcGM0NDBzcGVfcnhvcikpOworCWN1cnNvci0+c3RhdGUgPSAyOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX3BxX3NldF9zcmNfbXVsdCAtIHNldCBtdWx0aXBsaWNhdGlvbiBjb2VmZmljaWVudCBpbnRvCisgKiBkZXNjcmlwdG9yIGZvciB0aGUgUFFYT1Igb3BlcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3BxX3NldF9zcmNfbXVsdCgKKwkJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqc3dfZGVzYywKKwkJdW5zaWduZWQgY2hhciBtdWx0LCBpbnQgaW5kZXgsIGludCBkc3RfcG9zKQoreworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCXUzMiBtdWx0X2lkeCwgbXVsdF9kc3Q7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqaXRlciA9IE5VTEwsICppdGVyMSA9IE5VTEw7CisKKwljaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihzd19kZXNjLT5hc3luY190eC5jaGFuKTsKKworCXN3aXRjaCAoY2hhbi0+ZGV2aWNlLT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJaWYgKHRlc3RfYml0KFBQQzQ0MFNQRV9ERVNDX1JYT1IsICZzd19kZXNjLT5mbGFncykpIHsKKwkJCWludCByZWdpb24gPSB0ZXN0X2JpdChQUEM0NDBTUEVfREVTQ19SWE9SMTIsCisJCQkJCSZzd19kZXNjLT5mbGFncykgPyAyIDogMzsKKworCQkJaWYgKGluZGV4IDwgcmVnaW9uKSB7CisJCQkJLyogUlhPUiBtdWx0aXBsaWVycyAqLworCQkJCWl0ZXIgPSBwcGM0NDBzcGVfZ2V0X2dyb3VwX2VudHJ5KHN3X2Rlc2MsCisJCQkJCXN3X2Rlc2MtPmRzdF9jbnQgLSAxKTsKKwkJCQlpZiAoc3dfZGVzYy0+ZHN0X2NudCA9PSAyKQorCQkJCQlpdGVyMSA9IHBwYzQ0MHNwZV9nZXRfZ3JvdXBfZW50cnkoCisJCQkJCQkJc3dfZGVzYywgMCk7CisKKwkJCQltdWx0X2lkeCA9IERNQV9DVUVEX01VTFQxX09GRiArIChpbmRleCA8PCAzKTsKKwkJCQltdWx0X2RzdCA9IERNQV9DREJfU0dfU1JDOworCQkJfSBlbHNlIHsKKwkJCQkvKiBXWE9SIG11bHRpcGxpZXIgKi8KKwkJCQlpdGVyID0gcHBjNDQwc3BlX2dldF9ncm91cF9lbnRyeShzd19kZXNjLAorCQkJCQkJCWluZGV4IC0gcmVnaW9uICsKKwkJCQkJCQlzd19kZXNjLT5kc3RfY250KTsKKwkJCQltdWx0X2lkeCA9IERNQV9DVUVEX01VTFQxX09GRjsKKwkJCQltdWx0X2RzdCA9IGRzdF9wb3MgPyBETUFfQ0RCX1NHX0RTVDIgOgorCQkJCQkJICAgICBETUFfQ0RCX1NHX0RTVDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpbnQgem51bSA9IDA7CisKKwkJCS8qIFdYT1Itb25seTsKKwkJCSAqIHNraXAgZmlyc3Qgc2xvdHMgd2l0aCBkZXN0aW5hdGlvbnMgKGlmIFpFUk9fRFNUIGhhcworCQkJICogcGxhY2UpCisJCQkgKi8KKwkJCWlmICh0ZXN0X2JpdChQUEM0NDBTUEVfWkVST19QLCAmc3dfZGVzYy0+ZmxhZ3MpKQorCQkJCXpudW0rKzsKKwkJCWlmICh0ZXN0X2JpdChQUEM0NDBTUEVfWkVST19RLCAmc3dfZGVzYy0+ZmxhZ3MpKQorCQkJCXpudW0rKzsKKworCQkJaXRlciA9IHBwYzQ0MHNwZV9nZXRfZ3JvdXBfZW50cnkoc3dfZGVzYywgaW5kZXggKyB6bnVtKTsKKwkJCW11bHRfaWR4ID0gRE1BX0NVRURfTVVMVDFfT0ZGOworCQkJbXVsdF9kc3QgPSBkc3RfcG9zID8gRE1BX0NEQl9TR19EU1QyIDogRE1BX0NEQl9TR19EU1QxOworCQl9CisKKwkJaWYgKGxpa2VseShpdGVyKSkgeworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X3NyY19tdWx0KGl0ZXIsIGNoYW4sCisJCQkJbXVsdF9pZHgsIG11bHRfZHN0LCBtdWx0KTsKKworCQkJaWYgKHVubGlrZWx5KGl0ZXIxKSkgeworCQkJCS8qIGlmIHdlIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBmb3IgUlhPUiwgdGhlbgorCQkJCSAqIHdlJ3ZlIGp1c3Qgc2V0IFEgbXVsdC4gU2V0LXVwIFAgbm93LgorCQkJCSAqLworCQkJCXBwYzQ0MHNwZV9kZXNjX3NldF9zcmNfbXVsdChpdGVyMSwgY2hhbiwKKwkJCQkJbXVsdF9pZHgsIG11bHRfZHN0LCAxKTsKKwkJCX0KKworCQl9CisJCWJyZWFrOworCisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQlpdGVyID0gc3dfZGVzYy0+Z3JvdXBfaGVhZDsKKwkJaWYgKHN3X2Rlc2MtPmRzdF9jbnQgPT0gMikgeworCQkJLyogYm90aCBQICYgUSBjYWxjdWxhdGlvbnMgcmVxdWlyZWQ7IHNldCBQIG11bHQgaGVyZSAqLworCQkJcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3Jfc2V0X211bHQoaXRlciwgaW5kZXgsIDEpOworCisJCQkvKiBhbmQgdGhlbiBzZXQgUSBtdWx0ICovCisJCQlpdGVyID0gcHBjNDQwc3BlX2dldF9ncm91cF9lbnRyeShzd19kZXNjLAorCQkJICAgICAgIHN3X2Rlc2MtPmRlc2NzX3Blcl9vcCk7CisJCX0KKwkJcHBjNDQwc3BlX2FkbWFfZG1hMnJ4b3Jfc2V0X211bHQoaXRlciwgaW5kZXgsIG11bHQpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyAtIGZyZWUgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQKKyAqLworc3RhdGljIHZvaWQgcHBjNDQwc3BlX2FkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgKml0ZXIsICpfaXRlcjsKKwlpbnQgaW5fdXNlX2Rlc2NzID0gMDsKKworCXBwYzQ0MHNwZV9jaGFuID0gdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihjaGFuKTsKKwlwcGM0NDBzcGVfYWRtYV9zbG90X2NsZWFudXAocHBjNDQwc3BlX2NoYW4pOworCisJc3Bpbl9sb2NrX2JoKCZwcGM0NDBzcGVfY2hhbi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIF9pdGVyLCAmcHBjNDQwc3BlX2NoYW4tPmNoYWluLAorCQkJCQljaGFpbl9ub2RlKSB7CisJCWluX3VzZV9kZXNjcysrOworCQlsaXN0X2RlbCgmaXRlci0+Y2hhaW5fbm9kZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGl0ZXIsIF9pdGVyLAorCQkJJnBwYzQ0MHNwZV9jaGFuLT5hbGxfc2xvdHMsIHNsb3Rfbm9kZSkgeworCQlsaXN0X2RlbCgmaXRlci0+c2xvdF9ub2RlKTsKKwkJa2ZyZWUoaXRlcik7CisJCXBwYzQ0MHNwZV9jaGFuLT5zbG90c19hbGxvY2F0ZWQtLTsKKwl9CisJcHBjNDQwc3BlX2NoYW4tPmxhc3RfdXNlZCA9IE5VTEw7CisKKwlkZXZfZGJnKHBwYzQ0MHNwZV9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsCisJCSJwcGM0NDBzcGUgYWRtYSVkICVzIHNsb3RzX2FsbG9jYXRlZCAlZFxuIiwKKwkJcHBjNDQwc3BlX2NoYW4tPmRldmljZS0+aWQsCisJCV9fZnVuY19fLCBwcGM0NDBzcGVfY2hhbi0+c2xvdHNfYWxsb2NhdGVkKTsKKwlzcGluX3VubG9ja19iaCgmcHBjNDQwc3BlX2NoYW4tPmxvY2spOworCisJLyogb25lIGlzIG9rIHNpbmNlIHdlIGxlZnQgaXQgb24gdGhlcmUgb24gcHVycG9zZSAqLworCWlmIChpbl91c2VfZGVzY3MgPiAxKQorCQlwcmludGsoS0VSTl9FUlIgIlNQRTogRnJlZWluZyAlZCBpbiB1c2UgZGVzY3JpcHRvcnMhXG4iLAorCQkJaW5fdXNlX2Rlc2NzIC0gMSk7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfaXNfY29tcGxldGUgLSBwb2xsIHRoZSBzdGF0dXMgb2YgYW4gQURNQSB0cmFuc2FjdGlvbgorICogQGNoYW46IEFETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBjb29raWU6IEFETUEgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICovCitzdGF0aWMgZW51bSBkbWFfc3RhdHVzIHBwYzQ0MHNwZV9hZG1hX2lzX2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwlkbWFfY29va2llX3QgY29va2llLCBkbWFfY29va2llX3QgKmRvbmUsIGRtYV9jb29raWVfdCAqdXNlZCkKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqcHBjNDQwc3BlX2NoYW47CisJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKKwlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKKwllbnVtIGRtYV9zdGF0dXMgcmV0OworCisJcHBjNDQwc3BlX2NoYW4gPSB0b19wcGM0NDBzcGVfYWRtYV9jaGFuKGNoYW4pOworCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKKwlsYXN0X2NvbXBsZXRlID0gcHBjNDQwc3BlX2NoYW4tPmNvbXBsZXRlZF9jb29raWU7CisKKwlpZiAoZG9uZSkKKwkJKmRvbmUgPSBsYXN0X2NvbXBsZXRlOworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CisJaWYgKHJldCA9PSBETUFfU1VDQ0VTUykKKwkJcmV0dXJuIHJldDsKKworCXBwYzQ0MHNwZV9hZG1hX3Nsb3RfY2xlYW51cChwcGM0NDBzcGVfY2hhbik7CisKKwlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CisJbGFzdF9jb21wbGV0ZSA9IHBwYzQ0MHNwZV9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCisJaWYgKGRvbmUpCisJCSpkb25lID0gbGFzdF9jb21wbGV0ZTsKKwlpZiAodXNlZCkKKwkJKnVzZWQgPSBsYXN0X3VzZWQ7CisKKwlyZXR1cm4gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKK30KKworLyoqCisgKiBwcGM0NDBzcGVfYWRtYV9lb3RfaGFuZGxlciAtIGVuZCBvZiB0cmFuc2ZlciBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcHBjNDQwc3BlX2FkbWFfZW90X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiA9IGRhdGE7CisKKwlkZXZfZGJnKGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJInBwYzQ0MHNwZSBhZG1hJWQ6ICVzXG4iLCBjaGFuLT5kZXZpY2UtPmlkLCBfX2Z1bmNfXyk7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZjaGFuLT5pcnFfdGFza2xldCk7CisJcHBjNDQwc3BlX2FkbWFfZGV2aWNlX2NsZWFyX2VvdF9zdGF0dXMoY2hhbik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfZXJyX2hhbmRsZXIgLSBETUEgZXJyb3IgaW50ZXJydXB0IGhhbmRsZXI7CisgKglkbyB0aGUgc2FtZSB0aGluZ3MgYXMgYSBlb3QgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcHBjNDQwc3BlX2FkbWFfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbiA9IGRhdGE7CisKKwlkZXZfZGJnKGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwKKwkJInBwYzQ0MHNwZSBhZG1hJWQ6ICVzXG4iLCBjaGFuLT5kZXZpY2UtPmlkLCBfX2Z1bmNfXyk7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZjaGFuLT5pcnFfdGFza2xldCk7CisJcHBjNDQwc3BlX2FkbWFfZGV2aWNlX2NsZWFyX2VvdF9zdGF0dXMoY2hhbik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX3Rlc3RfY2FsbGJhY2sgLSBjYWxsZWQgd2hlbiB0ZXN0IG9wZXJhdGlvbiBoYXMgYmVlbiBkb25lCisgKi8KK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV90ZXN0X2NhbGxiYWNrKHZvaWQgKnVudXNlZCkKK3sKKwljb21wbGV0ZSgmcHBjNDQwc3BlX3I2X3Rlc3RfY29tcCk7Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfaXNzdWVfcGVuZGluZyAtIGZsdXNoIGFsbCBwZW5kaW5nIGRlc2NyaXB0b3JzIHRvIGgvdworICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfYWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqcHBjNDQwc3BlX2NoYW47CisKKwlwcGM0NDBzcGVfY2hhbiA9IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4oY2hhbik7CisJZGV2X2RiZyhwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkicHBjNDQwc3BlIGFkbWElZDogJXMgJWQgXG4iLCBwcGM0NDBzcGVfY2hhbi0+ZGV2aWNlLT5pZCwKKwkJX19mdW5jX18sIHBwYzQ0MHNwZV9jaGFuLT5wZW5kaW5nKTsKKworCWlmIChwcGM0NDBzcGVfY2hhbi0+cGVuZGluZykgeworCQlwcGM0NDBzcGVfY2hhbi0+cGVuZGluZyA9IDA7CisJCXBwYzQ0MHNwZV9jaGFuX2FwcGVuZChwcGM0NDBzcGVfY2hhbik7CisJfQorfQorCisvKioKKyAqIHBwYzQ0MHNwZV9jaGFuX3N0YXJ0X251bGxfeG9yIC0gaW5pdGlhdGUgdGhlIGZpcnN0IFhPUiBvcGVyYXRpb24gKERNQSBlbmdpbmVzCisgKgl1c2UgRklGT3MgKGFzIG9wcG9zaXRlIHRvIGNoYWlucyB1c2VkIGluIFhPUikgc28gdGhpcyBpcyBhIFhPUgorICoJc3BlY2lmaWMgb3BlcmF0aW9uKQorICovCitzdGF0aWMgdm9pZCBwcGM0NDBzcGVfY2hhbl9zdGFydF9udWxsX3hvcihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjLCAqZ3JvdXBfc3RhcnQ7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlpbnQgc2xvdF9jbnQsIHNsb3RzX3Blcl9vcDsKKworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAorCQkicHBjNDQwc3BlIGFkbWElZDogJXNcbiIsIGNoYW4tPmRldmljZS0+aWQsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19iaCgmY2hhbi0+bG9jayk7CisJc2xvdF9jbnQgPSBwcGM0NDBzcGVfY2hhbl94b3Jfc2xvdF9jb3VudCgwLCAyLCAmc2xvdHNfcGVyX29wKTsKKwlzd19kZXNjID0gcHBjNDQwc3BlX2FkbWFfYWxsb2Nfc2xvdHMoY2hhbiwgc2xvdF9jbnQsIHNsb3RzX3Blcl9vcCk7CisJaWYgKHN3X2Rlc2MpIHsKKwkJZ3JvdXBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOworCQlsaXN0X3NwbGljZV9pbml0KCZzd19kZXNjLT5ncm91cF9saXN0LCAmY2hhbi0+Y2hhaW4pOworCQlhc3luY190eF9hY2soJnN3X2Rlc2MtPmFzeW5jX3R4KTsKKwkJcHBjNDQwc3BlX2Rlc2NfaW5pdF9udWxsX3hvcihncm91cF9zdGFydCk7CisKKwkJY29va2llID0gY2hhbi0+Y29tbW9uLmNvb2tpZTsKKwkJY29va2llKys7CisJCWlmIChjb29raWUgPD0gMSkKKwkJCWNvb2tpZSA9IDI7CisKKwkJLyogaW5pdGlhbGl6ZSB0aGUgY29tcGxldGVkIGNvb2tpZSB0byBiZSBsZXNzIHRoYW4KKwkJICogdGhlIG1vc3QgcmVjZW50bHkgdXNlZCBjb29raWUKKwkJICovCisJCWNoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBjb29raWUgLSAxOworCQljaGFuLT5jb21tb24uY29va2llID0gc3dfZGVzYy0+YXN5bmNfdHguY29va2llID0gY29va2llOworCisJCS8qIGNoYW5uZWwgc2hvdWxkIG5vdCBiZSBidXN5ICovCisJCUJVR19PTihwcGM0NDBzcGVfY2hhbl9pc19idXN5KGNoYW4pKTsKKworCQkvKiBzZXQgdGhlIGRlc2NyaXB0b3IgYWRkcmVzcyAqLworCQlwcGM0NDBzcGVfY2hhbl9zZXRfZmlyc3RfeG9yX2Rlc2NyaXB0b3IoY2hhbiwgc3dfZGVzYyk7CisKKwkJLyogcnVuIHRoZSBkZXNjcmlwdG9yICovCisJCXBwYzQ0MHNwZV9jaGFuX3J1bihjaGFuKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJwcGM0NDBzcGUgYWRtYSVkIgorCQkJIiBmYWlsZWQgdG8gYWxsb2NhdGUgbnVsbCBkZXNjcmlwdG9yXG4iLAorCQkJY2hhbi0+ZGV2aWNlLT5pZCk7CisJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmxvY2spOworfQorCisvKioKKyAqIHBwYzQ0MHNwZV90ZXN0X3JhaWQ2IC0gdGVzdCBhcmUgUkFJRC02IGNhcGFiaWxpdGllcyBlbmFibGVkIHN1Y2Nlc3NmdWxseS4KKyAqCUZvciB0aGlzIHdlIGp1c3QgcGVyZm9ybSBvbmUgV1hPUiBvcGVyYXRpb24gd2l0aCB0aGUgc2FtZSBzb3VyY2UKKyAqCWFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHRoZSBHRi1tdWx0aXBsaWVyIGlzIDE7IHNvIGlmIFJBSUQtNgorICoJY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkIHRoZW4gd2UnbGwgZ2V0IHNyYy9kc3QgZmlsbGVkIHdpdGggemVyby4KKyAqLworc3RhdGljIGludCBwcGM0NDBzcGVfdGVzdF9yYWlkNihzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpzd19kZXNjLCAqaXRlcjsKKwlzdHJ1Y3QgcGFnZSAqcGc7CisJY2hhciAqYTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyLCBhZGRyc1syXTsKKwl1bnNpZ25lZCBsb25nIG9wID0gMDsKKwlpbnQgcnZhbCA9IDA7CisKKwlzZXRfYml0KFBQQzQ0MFNQRV9ERVNDX1dYT1IsICZvcCk7CisKKwlwZyA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFwZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfYmgoJmNoYW4tPmxvY2spOworCXN3X2Rlc2MgPSBwcGM0NDBzcGVfYWRtYV9hbGxvY19zbG90cyhjaGFuLCAxLCAxKTsKKwlpZiAoc3dfZGVzYykgeworCQkvKiAxIHNyYywgMSBkc3IsIGludF9lbmEsIFdYT1IgKi8KKwkJcHBjNDQwc3BlX2Rlc2NfaW5pdF9kbWEwMXBxKHN3X2Rlc2MsIDEsIDEsIDEsIG9wKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmc3dfZGVzYy0+Z3JvdXBfbGlzdCwgY2hhaW5fbm9kZSkgeworCQkJcHBjNDQwc3BlX2Rlc2Nfc2V0X2J5dGVfY291bnQoaXRlciwgY2hhbiwgUEFHRV9TSVpFKTsKKwkJCWl0ZXItPnVubWFwX2xlbiA9IFBBR0VfU0laRTsKKwkJfQorCX0gZWxzZSB7CisJCXJ2YWwgPSAtRUZBVUxUOworCQlzcGluX3VubG9ja19iaCgmY2hhbi0+bG9jayk7CisJCWdvdG8gZXhpdDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmxvY2spOworCisJLyogRmlsbCB0aGUgdGVzdCBwYWdlIHdpdGggb25lcyAqLworCW1lbXNldChwYWdlX2FkZHJlc3MocGcpLCAweEZGLCBQQUdFX1NJWkUpOworCWRtYV9hZGRyID0gZG1hX21hcF9wYWdlKGNoYW4tPmRldmljZS0+ZGV2LCBwZywgMCwKKwkJCQlQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKworCS8qIFNldHVwIGFkZHJlc3NlcyAqLworCXBwYzQ0MHNwZV9hZG1hX3BxX3NldF9zcmMoc3dfZGVzYywgZG1hX2FkZHIsIDApOworCXBwYzQ0MHNwZV9hZG1hX3BxX3NldF9zcmNfbXVsdChzd19kZXNjLCAxLCAwLCAwKTsKKwlhZGRyc1swXSA9IGRtYV9hZGRyOworCWFkZHJzWzFdID0gMDsKKwlwcGM0NDBzcGVfYWRtYV9wcV9zZXRfZGVzdChzd19kZXNjLCBhZGRycywgRE1BX1BSRVBfUFFfRElTQUJMRV9RKTsKKworCWFzeW5jX3R4X2Fjaygmc3dfZGVzYy0+YXN5bmNfdHgpOworCXN3X2Rlc2MtPmFzeW5jX3R4LmNhbGxiYWNrID0gcHBjNDQwc3BlX3Rlc3RfY2FsbGJhY2s7CisJc3dfZGVzYy0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW0gPSBOVUxMOworCisJaW5pdF9jb21wbGV0aW9uKCZwcGM0NDBzcGVfcjZfdGVzdF9jb21wKTsKKworCXBwYzQ0MHNwZV9hZG1hX3R4X3N1Ym1pdCgmc3dfZGVzYy0+YXN5bmNfdHgpOworCXBwYzQ0MHNwZV9hZG1hX2lzc3VlX3BlbmRpbmcoJmNoYW4tPmNvbW1vbik7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwcGM0NDBzcGVfcjZfdGVzdF9jb21wKTsKKworCS8qIE5vdyBjaGVjayBpZiB0aGUgdGVzdCBwYWdlIGlzIHplcm9lZCAqLworCWEgPSBwYWdlX2FkZHJlc3MocGcpOworCWlmICgoKih1MzIgKilhKSA9PSAwICYmIG1lbWNtcChhLCBhKzQsIFBBR0VfU0laRS00KSA9PSAwKSB7CisJCS8qIHBhZ2UgaXMgemVybyAtIFJBSUQtNiBlbmFibGVkICovCisJCXJ2YWwgPSAwOworCX0gZWxzZSB7CisJCS8qIFJBSUQtNiB3YXMgbm90IGVuYWJsZWQgKi8KKwkJcnZhbCA9IC1FSU5WQUw7CisJfQorZXhpdDoKKwlfX2ZyZWVfcGFnZShwZyk7CisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX2luaXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXZpY2UgKmFkZXYpCit7CisJc3dpdGNoIChhZGV2LT5pZCkgeworCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX0lOVEVSUlVQVCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX01FTVNFVCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwkJZG1hX2NhcF9zZXQoRE1BX1BRLCBhZGV2LT5jb21tb24uY2FwX21hc2spOworCQlkbWFfY2FwX3NldChETUFfUFFfVkFMLCBhZGV2LT5jb21tb24uY2FwX21hc2spOworCQlkbWFfY2FwX3NldChETUFfWE9SX1ZBTCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwkJYnJlYWs7CisJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQlkbWFfY2FwX3NldChETUFfWE9SLCBhZGV2LT5jb21tb24uY2FwX21hc2spOworCQlkbWFfY2FwX3NldChETUFfUFEsIGFkZXYtPmNvbW1vbi5jYXBfbWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9JTlRFUlJVUFQsIGFkZXYtPmNvbW1vbi5jYXBfbWFzayk7CisJCWFkZXYtPmNvbW1vbi5jYXBfbWFzayA9IGFkZXYtPmNvbW1vbi5jYXBfbWFzazsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IGJhc2Ugcm91dGluZXMgKi8KKwlhZGV2LT5jb21tb24uZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0KKwkJCQlwcGM0NDBzcGVfYWRtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKKwlhZGV2LT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPQorCQkJCXBwYzQ0MHNwZV9hZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJYWRldi0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZSA9IHBwYzQ0MHNwZV9hZG1hX2lzX2NvbXBsZXRlOworCWFkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IHBwYzQ0MHNwZV9hZG1hX2lzc3VlX3BlbmRpbmc7CisKKwkvKiBTZXQgcHJlcCByb3V0aW5lcyBiYXNlZCBvbiBjYXBhYmlsaXR5ICovCisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGFkZXYtPmNvbW1vbi5jYXBfbWFzaykpIHsKKwkJYWRldi0+Y29tbW9uLmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPQorCQkJcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfbWVtY3B5OworCX0KKwlpZiAoZG1hX2hhc19jYXAoRE1BX01FTVNFVCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKSkgeworCQlhZGV2LT5jb21tb24uZGV2aWNlX3ByZXBfZG1hX21lbXNldCA9CisJCQlwcGM0NDBzcGVfYWRtYV9wcmVwX2RtYV9tZW1zZXQ7CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfWE9SLCBhZGV2LT5jb21tb24uY2FwX21hc2spKSB7CisJCWFkZXYtPmNvbW1vbi5tYXhfeG9yID0gWE9SX01BWF9PUFM7CisJCWFkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfeG9yID0KKwkJCXBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX3hvcjsKKwl9CisJaWYgKGRtYV9oYXNfY2FwKERNQV9QUSwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKSkgeworCQlzd2l0Y2ggKGFkZXYtPmlkKSB7CisJCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJCQlkbWFfc2V0X21heHBxKCZhZGV2LT5jb21tb24sCisJCQkJRE1BMF9GSUZPX1NJWkUgLyBzaXplb2Yoc3RydWN0IGRtYV9jZGIpLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIFBQQzQ0MFNQRV9ETUExX0lEOgorCQkJZG1hX3NldF9tYXhwcSgmYWRldi0+Y29tbW9uLAorCQkJCURNQTFfRklGT19TSVpFIC8gc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBQUEM0NDBTUEVfWE9SX0lEOgorCQkJYWRldi0+Y29tbW9uLm1heF9wcSA9IFhPUl9NQVhfT1BTICogMzsKKwkJCWJyZWFrOworCQl9CisJCWFkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfcHEgPQorCQkJcHBjNDQwc3BlX2FkbWFfcHJlcF9kbWFfcHE7CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfUFFfVkFMLCBhZGV2LT5jb21tb24uY2FwX21hc2spKSB7CisJCXN3aXRjaCAoYWRldi0+aWQpIHsKKwkJY2FzZSBQUEM0NDBTUEVfRE1BMF9JRDoKKwkJCWFkZXYtPmNvbW1vbi5tYXhfcHEgPSBETUEwX0ZJRk9fU0laRSAvCisJCQkJCQlzaXplb2Yoc3RydWN0IGRtYV9jZGIpOworCQkJYnJlYWs7CisJCWNhc2UgUFBDNDQwU1BFX0RNQTFfSUQ6CisJCQlhZGV2LT5jb21tb24ubWF4X3BxID0gRE1BMV9GSUZPX1NJWkUgLworCQkJCQkJc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKTsKKwkJCWJyZWFrOworCQl9CisJCWFkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfcHFfdmFsID0KKwkJCXBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX3BxemVyb19zdW07CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfWE9SX1ZBTCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKSkgeworCQlzd2l0Y2ggKGFkZXYtPmlkKSB7CisJCWNhc2UgUFBDNDQwU1BFX0RNQTBfSUQ6CisJCQlhZGV2LT5jb21tb24ubWF4X3hvciA9IERNQTBfRklGT19TSVpFIC8KKwkJCQkJCXNpemVvZihzdHJ1Y3QgZG1hX2NkYik7CisJCQlicmVhazsKKwkJY2FzZSBQUEM0NDBTUEVfRE1BMV9JRDoKKwkJCWFkZXYtPmNvbW1vbi5tYXhfeG9yID0gRE1BMV9GSUZPX1NJWkUgLworCQkJCQkJc2l6ZW9mKHN0cnVjdCBkbWFfY2RiKTsKKwkJCWJyZWFrOworCQl9CisJCWFkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfeG9yX3ZhbCA9CisJCQlwcGM0NDBzcGVfYWRtYV9wcmVwX2RtYV94b3JfemVyb19zdW07CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfSU5URVJSVVBULCBhZGV2LT5jb21tb24uY2FwX21hc2spKSB7CisJCWFkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfaW50ZXJydXB0ID0KKwkJCXBwYzQ0MHNwZV9hZG1hX3ByZXBfZG1hX2ludGVycnVwdDsKKwl9CisJcHJfaW5mbygiJXM6IEFNQ0MoUikgUFBDNDQwU1AoRSkgQURNQSBFbmdpbmU6ICIKKwkgICIoICVzJXMlcyVzJXMlcyVzKVxuIiwKKwkgIGRldl9uYW1lKGFkZXYtPmRldiksCisJICBkbWFfaGFzX2NhcChETUFfUFEsIGFkZXYtPmNvbW1vbi5jYXBfbWFzaykgPyAicHEgIiA6ICIiLAorCSAgZG1hX2hhc19jYXAoRE1BX1BRX1ZBTCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKSA/ICJwcV92YWwgIiA6ICIiLAorCSAgZG1hX2hhc19jYXAoRE1BX1hPUiwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKSA/ICJ4b3IgIiA6ICIiLAorCSAgZG1hX2hhc19jYXAoRE1BX1hPUl9WQUwsIGFkZXYtPmNvbW1vbi5jYXBfbWFzaykgPyAieG9yX3ZhbCAiIDogIiIsCisJICBkbWFfaGFzX2NhcChETUFfTUVNQ1BZLCBhZGV2LT5jb21tb24uY2FwX21hc2spID8gIm1lbWNweSAiIDogIiIsCisJICBkbWFfaGFzX2NhcChETUFfTUVNU0VULCBhZGV2LT5jb21tb24uY2FwX21hc2spICA/ICJtZW1zZXQgIiA6ICIiLAorCSAgZG1hX2hhc19jYXAoRE1BX0lOVEVSUlVQVCwgYWRldi0+Y29tbW9uLmNhcF9tYXNrKSA/ICJpbnRyICIgOiAiIik7Cit9CisKK3N0YXRpYyBpbnQgcHBjNDQwc3BlX2FkbWFfc2V0dXBfaXJxcyhzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGV2aWNlICphZGV2LAorCQkJCSAgICAgc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKmNoYW4sCisJCQkJICAgICBpbnQgKmluaXRjb2RlKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCW5wID0gY29udGFpbmVyX29mKGFkZXYtPmRldiwgc3RydWN0IG9mX2RldmljZSwgZGV2KS0+bm9kZTsKKwlpZiAoYWRldi0+aWQgIT0gUFBDNDQwU1BFX1hPUl9JRCkgeworCQlhZGV2LT5lcnJfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDEpOworCQlpZiAoYWRldi0+ZXJyX2lycSA9PSBOT19JUlEpIHsKKwkJCWRldl93YXJuKGFkZXYtPmRldiwgIm5vIGVyciBpcnEgcmVzb3VyY2U/XG4iKTsKKwkJCSppbml0Y29kZSA9IFBQQ19BRE1BX0lOSVRfSVJRMjsKKwkJCWFkZXYtPmVycl9pcnEgPSAtRU5YSU87CisJCX0gZWxzZQorCQkJYXRvbWljX2luYygmcHBjNDQwc3BlX2FkbWFfZXJyX2lycV9yZWYpOworCX0gZWxzZSB7CisJCWFkZXYtPmVycl9pcnEgPSAtRU5YSU87CisJfQorCisJYWRldi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChhZGV2LT5pcnEgPT0gTk9fSVJRKSB7CisJCWRldl9lcnIoYWRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlXG4iKTsKKwkJKmluaXRjb2RlID0gUFBDX0FETUFfSU5JVF9JUlExOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX2lycV9tYXA7CisJfQorCWRldl9kYmcoYWRldi0+ZGV2LCAiaXJxICVkLCBlcnIgaXJxICVkXG4iLAorCQlhZGV2LT5pcnEsIGFkZXYtPmVycl9pcnEpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoYWRldi0+aXJxLCBwcGM0NDBzcGVfYWRtYV9lb3RfaGFuZGxlciwKKwkJCSAgMCwgZGV2X2RyaXZlcl9zdHJpbmcoYWRldi0+ZGV2KSwgY2hhbik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFkZXYtPmRldiwgImNhbid0IHJlcXVlc3QgaXJxICVkXG4iLAorCQkJYWRldi0+aXJxKTsKKwkJKmluaXRjb2RlID0gUFBDX0FETUFfSU5JVF9JUlExOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9yZXExOworCX0KKworCS8qIG9ubHkgRE1BIGVuZ2luZXMgaGF2ZSBhIHNlcGFyYXRlIGVycm9yIElSUQorCSAqIHNvIGl0J3MgT2sgaWYgZXJyX2lycSA8IDAgaW4gWE9SIGVuZ2luZSBjYXNlLgorCSAqLworCWlmIChhZGV2LT5lcnJfaXJxID4gMCkgeworCQkvKiBib3RoIERNQSBlbmdpbmVzIHNoYXJlIGNvbW1vbiBlcnJvciBJUlEgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEoYWRldi0+ZXJyX2lycSwKKwkJCQkgIHBwYzQ0MHNwZV9hZG1hX2Vycl9oYW5kbGVyLAorCQkJCSAgSVJRRl9TSEFSRUQsCisJCQkJICBkZXZfZHJpdmVyX3N0cmluZyhhZGV2LT5kZXYpLAorCQkJCSAgY2hhbik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoYWRldi0+ZGV2LCAiY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsCisJCQkJYWRldi0+ZXJyX2lycSk7CisJCQkqaW5pdGNvZGUgPSBQUENfQURNQV9JTklUX0lSUTI7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBlcnJfcmVxMjsKKwkJfQorCX0KKworCWlmIChhZGV2LT5pZCA9PSBQUEM0NDBTUEVfWE9SX0lEKSB7CisJCS8qIGVuYWJsZSBYT1IgZW5naW5lIGludGVycnVwdHMgKi8KKwkJaW93cml0ZTMyYmUoWE9SX0lFX0NCQ0lFX0JJVCB8IFhPUl9JRV9JQ0JJRV9CSVQgfAorCQkJICAgIFhPUl9JRV9JQ0lFX0JJVCB8IFhPUl9JRV9SUFRJRV9CSVQsCisJCQkgICAgJmFkZXYtPnhvcl9yZWctPmllcik7CisJfSBlbHNlIHsKKwkJdTMyIG1hc2ssIGVuYWJsZTsKKworCQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJpYm0saTJvLTQ0MHNwZSIpOworCQlpZiAoIW5wKSB7CisJCQlwcl9lcnIoIiVzOiBjYW4ndCBmaW5kIEkyTyBkZXZpY2UgdHJlZSBub2RlXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9yZXEyOworCQl9CisJCWFkZXYtPmkyb19yZWcgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghYWRldi0+aTJvX3JlZykgeworCQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIG1hcCBJMk8gcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJCQlvZl9ub2RlX3B1dChucCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfcmVxMjsKKwkJfQorCQlvZl9ub2RlX3B1dChucCk7CisJCS8qIFVubWFzayAnQ1MgRklGTyBBdHRlbnRpb24nIGludGVycnVwdHMgYW5kCisJCSAqIGVuYWJsZSBnZW5lcmF0aW5nIGludGVycnVwdHMgb24gZXJyb3JzCisJCSAqLworCQllbmFibGUgPSAoYWRldi0+aWQgPT0gUFBDNDQwU1BFX0RNQTBfSUQpID8KKwkJCSB+KEkyT19JT1BJTV9QMFNORSB8IEkyT19JT1BJTV9QMEVNKSA6CisJCQkgfihJMk9fSU9QSU1fUDFTTkUgfCBJMk9fSU9QSU1fUDFFTSk7CisJCW1hc2sgPSBpb3JlYWQzMigmYWRldi0+aTJvX3JlZy0+aW9waW0pICYgZW5hYmxlOworCQlpb3dyaXRlMzIobWFzaywgJmFkZXYtPmkyb19yZWctPmlvcGltKTsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9yZXEyOgorCWZyZWVfaXJxKGFkZXYtPmlycSwgY2hhbik7CitlcnJfcmVxMToKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGFkZXYtPmlycSk7CitlcnJfaXJxX21hcDoKKwlpZiAoYWRldi0+ZXJyX2lycSA+IDApIHsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBwYzQ0MHNwZV9hZG1hX2Vycl9pcnFfcmVmKSkKKwkJCWlycV9kaXNwb3NlX21hcHBpbmcoYWRldi0+ZXJyX2lycSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBwYzQ0MHNwZV9hZG1hX3JlbGVhc2VfaXJxcyhzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGV2aWNlICphZGV2LAorCQkJCQlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiAqY2hhbikKK3sKKwl1MzIgbWFzaywgZGlzYWJsZTsKKworCWlmIChhZGV2LT5pZCA9PSBQUEM0NDBTUEVfWE9SX0lEKSB7CisJCS8qIGRpc2FibGUgWE9SIGVuZ2luZSBpbnRlcnJ1cHRzICovCisJCW1hc2sgPSBpb3JlYWQzMmJlKCZhZGV2LT54b3JfcmVnLT5pZXIpOworCQltYXNrICY9IH4oWE9SX0lFX0NCQ0lFX0JJVCB8IFhPUl9JRV9JQ0JJRV9CSVQgfAorCQkJICBYT1JfSUVfSUNJRV9CSVQgfCBYT1JfSUVfUlBUSUVfQklUKTsKKwkJaW93cml0ZTMyYmUobWFzaywgJmFkZXYtPnhvcl9yZWctPmllcik7CisJfSBlbHNlIHsKKwkJLyogZGlzYWJsZSBETUF4IGVuZ2luZSBpbnRlcnJ1cHRzICovCisJCWRpc2FibGUgPSAoYWRldi0+aWQgPT0gUFBDNDQwU1BFX0RNQTBfSUQpID8KKwkJCSAgKEkyT19JT1BJTV9QMFNORSB8IEkyT19JT1BJTV9QMEVNKSA6CisJCQkgIChJMk9fSU9QSU1fUDFTTkUgfCBJMk9fSU9QSU1fUDFFTSk7CisJCW1hc2sgPSBpb3JlYWQzMigmYWRldi0+aTJvX3JlZy0+aW9waW0pIHwgZGlzYWJsZTsKKwkJaW93cml0ZTMyKG1hc2ssICZhZGV2LT5pMm9fcmVnLT5pb3BpbSk7CisJfQorCWZyZWVfaXJxKGFkZXYtPmlycSwgY2hhbik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhhZGV2LT5pcnEpOworCWlmIChhZGV2LT5lcnJfaXJxID4gMCkgeworCQlmcmVlX2lycShhZGV2LT5lcnJfaXJxLCBjaGFuKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBwYzQ0MHNwZV9hZG1hX2Vycl9pcnFfcmVmKSkgeworCQkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhhZGV2LT5lcnJfaXJxKTsKKwkJCWlvdW5tYXAoYWRldi0+aTJvX3JlZyk7CisJCX0KKwl9Cit9CisKKy8qKgorICogcHBjNDQwc3BlX2FkbWFfcHJvYmUgLSBwcm9iZSB0aGUgYXN5bmNoIGRldmljZQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwcGM0NDBzcGVfYWRtYV9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGV2aWNlICphZGV2OworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBwcGNfZG1hX2NoYW5fcmVmICpyZWYsICpfcmVmOworCWludCByZXQgPSAwLCBpbml0Y29kZSA9IFBQQ19BRE1BX0lOSVRfT0s7CisJY29uc3QgdTMyICppZHg7CisJaW50IGxlbjsKKwl2b2lkICpyZWdzOworCXUzMiBpZCwgcG9vbF9zaXplOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYW1jYyx4b3ItYWNjZWxlcmF0b3IiKSkgeworCQlpZCA9IFBQQzQ0MFNQRV9YT1JfSUQ7CisJCS8qIEFzIGZhciBhcyB0aGUgWE9SIGVuZ2luZSBpcyBjb25jZXJuZWQsIGl0IGRvZXMgbm90CisJCSAqIHVzZSBGSUZPcyBidXQgdXNlcyBsaW5rZWQgbGlzdC4gU28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeQorCQkgKiBiZXR3ZWVuIHBvb2wgc2l6ZSB0byBhbGxvY2F0ZSBhbmQgdGhlIGVuZ2luZSBjb25maWd1cmF0aW9uLgorCQkgKi8KKwkJcG9vbF9zaXplID0gUEFHRV9TSVpFIDw8IDE7CisJfSBlbHNlIHsKKwkJLyogaXQgaXMgRE1BMCBvciBETUExICovCisJCWlkeCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCAmbGVuKTsKKwkJaWYgKCFpZHggfHwgKGxlbiAhPSBzaXplb2YodTMyKSkpIHsKKwkJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJEZXZpY2Ugbm9kZSAlcyBoYXMgbWlzc2luZyAiCisJCQkJIm9yIGludmFsaWQgY2VsbC1pbmRleCBwcm9wZXJ0eVxuIiwKKwkJCQlucC0+ZnVsbF9uYW1lKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlkID0gKmlkeDsKKwkJLyogRE1BMCwxIGVuZ2luZXMgdXNlIEZJRk8gdG8gbWFpbnRhaW4gQ0RCcywgc28gd2UKKwkJICogc2hvdWxkIGFsbG9jYXRlIHRoZSBwb29sIGFjY29yZGluZ2x5IHRvIHNpemUgb2YgdGhpcworCQkgKiBGSUZPLiBUaHVzLCB0aGUgcG9vbCBzaXplIGRlcGVuZHMgb24gdGhlIEZJRk8gZGVwdGg6CisJCSAqIGhvdyBtdWNoIENEQnMgcG9pbnRlcnMgdGhlIEZJRk8gbWF5IGNvbnRhaW4gdGhlbiBzbworCQkgKiBtdWNoIENEQnMgd2Ugc2hvdWxkIHByb3ZpZGUgaW4gdGhlIHBvb2wuCisJCSAqIFRoYXQgaXMKKwkJICogICBDREIgc2l6ZSA9IDMyQjsKKwkJICogICBDREJzIG51bWJlciA9IChETUEwX0ZJRk9fU0laRSA+PiAzKTsKKwkJICogICBQb29sIHNpemUgPSBDREJzIG51bWJlciAqIENEQiBzaXplID0KKwkJICogICAgICA9IChETUEwX0ZJRk9fU0laRSA+PiAzKSA8PCA1ID0gRE1BMF9GSUZPX1NJWkUgPDwgMi4KKwkJICovCisJCXBvb2xfc2l6ZSA9IChpZCA9PSBQUEM0NDBTUEVfRE1BMF9JRCkgPworCQkJICAgIERNQTBfRklGT19TSVpFIDogRE1BMV9GSUZPX1NJWkU7CisJCXBvb2xfc2l6ZSA8PD0gMjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcykpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJaW5pdGNvZGUgPSBQUENfQURNQV9JTklUX01FTVJFUzsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpLAorCQkJCWRldl9kcml2ZXJfc3RyaW5nKCZvZmRldi0+ZGV2KSkpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb24gIgorCQkJIigweCUwMTZsbHgtMHglMDE2bGx4KVxuIiwKKwkJCSh1NjQpcmVzLnN0YXJ0LCAodTY0KXJlcy5lbmQpOworCQlpbml0Y29kZSA9IFBQQ19BRE1BX0lOSVRfTUVNUkVHOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNyZWF0ZSBhIGRldmljZSAqLworCWFkZXYgPSBremFsbG9jKHNpemVvZigqYWRldiksIEdGUF9LRVJORUwpOworCWlmICghYWRldikgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZVxuIik7CisJCWluaXRjb2RlID0gUFBDX0FETUFfSU5JVF9BTExPQzsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWRldl9hbGxvYzsKKwl9CisKKwlhZGV2LT5pZCA9IGlkOworCWFkZXYtPnBvb2xfc2l6ZSA9IHBvb2xfc2l6ZTsKKwkvKiBhbGxvY2F0ZSBjb2hlcmVudCBtZW1vcnkgZm9yIGhhcmR3YXJlIGRlc2NyaXB0b3JzICovCisJYWRldi0+ZG1hX2Rlc2NfcG9vbF92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZvZmRldi0+ZGV2LAorCQkJCQlhZGV2LT5wb29sX3NpemUsICZhZGV2LT5kbWFfZGVzY19wb29sLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoYWRldi0+ZG1hX2Rlc2NfcG9vbF92aXJ0ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBvZiBjb2hlcmVudCAiCisJCQkibWVtb3J5IGZvciBoYXJkd2FyZSBkZXNjcmlwdG9yc1xuIiwKKwkJCWFkZXYtPnBvb2xfc2l6ZSk7CisJCWluaXRjb2RlID0gUFBDX0FETUFfSU5JVF9DT0hFUkVOVDsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZG1hX2FsbG9jOworCX0KKwlkZXZfZGJnKCZvZmRldi0+ZGV2LCAiYWxsb2N0ZWQgZGVzY3JpcHRvciBwb29sIHZpcnQgMHglcCBwaHlzIDB4JWxseFxuIiwKKwkJYWRldi0+ZG1hX2Rlc2NfcG9vbF92aXJ0LCAodTY0KWFkZXYtPmRtYV9kZXNjX3Bvb2wpOworCisJcmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwIHJlZ3MhXG4iKTsKKwkJZ290byBlcnJfcmVnc19hbGxvYzsKKwl9CisKKwlpZiAoYWRldi0+aWQgPT0gUFBDNDQwU1BFX1hPUl9JRCkgeworCQlhZGV2LT54b3JfcmVnID0gcmVnczsKKwkJLyogUmVzZXQgWE9SICovCisJCWlvd3JpdGUzMmJlKFhPUl9DUlNSX1hBU1JfQklULCAmYWRldi0+eG9yX3JlZy0+Y3Jzcik7CisJCWlvd3JpdGUzMmJlKFhPUl9DUlNSXzY0QkFfQklULCAmYWRldi0+eG9yX3JlZy0+Y3Jycik7CisJfSBlbHNlIHsKKwkJc2l6ZV90IGZpZm9fc2l6ZSA9IChhZGV2LT5pZCA9PSBQUEM0NDBTUEVfRE1BMF9JRCkgPworCQkJCSAgIERNQTBfRklGT19TSVpFIDogRE1BMV9GSUZPX1NJWkU7CisJCWFkZXYtPmRtYV9yZWcgPSByZWdzOworCQkvKiBETUF4X0ZJRk9fU0laRSBpcyBkZWZpbmVkIGluIGJ5dGVzLAorCQkgKiA8ZnNpej4gLSBpcyBkZWZpbmVkIGluIG51bWJlciBvZiBDREIgcG9pbnRlcnMgKDhieXRlKS4KKwkJICogRE1BIEZJRk8gTGVuZ3RoID0gQ1NsZW5ndGggKyBDUGxlbmd0aCwgd2hlcmUKKwkJICogQ1NsZW5ndGggPSBDUGxlbmd0aCA9IChmc2l6ICsgMSkgKiA4LgorCQkgKi8KKwkJaW93cml0ZTMyKERNQV9GSUZPX0VOQUJMRSB8ICgoZmlmb19zaXplID4+IDMpIC0gMiksCisJCQkgICZhZGV2LT5kbWFfcmVnLT5mc2l6KTsKKwkJLyogQ29uZmlndXJlIERNQSBlbmdpbmUgKi8KKwkJaW93cml0ZTMyKERNQV9DRkdfRFhFUFJfSFAgfCBETUFfQ0ZHX0RGTVBQX0hQIHwgRE1BX0NGR19GQUxHTiwKKwkJCSAgJmFkZXYtPmRtYV9yZWctPmNmZyk7CisJCS8qIENsZWFyIFN0YXR1cyAqLworCQlpb3dyaXRlMzIofjAsICZhZGV2LT5kbWFfcmVnLT5kc3RzKTsKKwl9CisKKwlhZGV2LT5kZXYgPSAmb2ZkZXYtPmRldjsKKwlhZGV2LT5jb21tb24uZGV2ID0gJm9mZGV2LT5kZXY7CisJSU5JVF9MSVNUX0hFQUQoJmFkZXYtPmNvbW1vbi5jaGFubmVscyk7CisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBhZGV2KTsKKworCS8qIGNyZWF0ZSBhIGNoYW5uZWwgKi8KKwljaGFuID0ga3phbGxvYyhzaXplb2YoKmNoYW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoYW4pIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNhbid0IGFsbG9jYXRlIGNoYW5uZWwgc3RydWN0dXJlXG4iKTsKKwkJaW5pdGNvZGUgPSBQUENfQURNQV9JTklUX0NIQU5ORUw7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2NoYW5fYWxsb2M7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmNoYW4tPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5jaGFpbik7CisJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmFsbF9zbG90cyk7CisJY2hhbi0+ZGV2aWNlID0gYWRldjsKKwljaGFuLT5jb21tb24uZGV2aWNlID0gJmFkZXYtPmNvbW1vbjsKKwlsaXN0X2FkZF90YWlsKCZjaGFuLT5jb21tb24uZGV2aWNlX25vZGUsICZhZGV2LT5jb21tb24uY2hhbm5lbHMpOworCXRhc2tsZXRfaW5pdCgmY2hhbi0+aXJxX3Rhc2tsZXQsIHBwYzQ0MHNwZV9hZG1hX3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpY2hhbik7CisKKwkvKiBhbGxvY2F0ZSBhbmQgbWFwIGhlbHBlciBwYWdlcyBmb3IgYXN5bmMgdmFsaWRhdGlvbiBvcgorCSAqIGFzeW5jX211bHQvYXN5bmNfc3VtX3Byb2R1Y3Qgb3BlcmF0aW9ucyBvbiBETUEwLzEuCisJICovCisJaWYgKGFkZXYtPmlkICE9IFBQQzQ0MFNQRV9YT1JfSUQpIHsKKwkJY2hhbi0+cGRlc3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWNoYW4tPnFkZXN0X3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWNoYW4tPnBkZXN0X3BhZ2UgfHwKKwkJICAgICFjaGFuLT5xZGVzdF9wYWdlKSB7CisJCQlpZiAoY2hhbi0+cGRlc3RfcGFnZSkKKwkJCQlfX2ZyZWVfcGFnZShjaGFuLT5wZGVzdF9wYWdlKTsKKwkJCWlmIChjaGFuLT5xZGVzdF9wYWdlKQorCQkJCV9fZnJlZV9wYWdlKGNoYW4tPnFkZXN0X3BhZ2UpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3BhZ2VfYWxsb2M7CisJCX0KKwkJY2hhbi0+cGRlc3QgPSBkbWFfbWFwX3BhZ2UoJm9mZGV2LT5kZXYsIGNoYW4tPnBkZXN0X3BhZ2UsIDAsCisJCQkJCSAgIFBBR0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOworCQljaGFuLT5xZGVzdCA9IGRtYV9tYXBfcGFnZSgmb2ZkZXYtPmRldiwgY2hhbi0+cWRlc3RfcGFnZSwgMCwKKwkJCQkJICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisJfQorCisJcmVmID0ga21hbGxvYyhzaXplb2YoKnJlZiksIEdGUF9LRVJORUwpOworCWlmIChyZWYpIHsKKwkJcmVmLT5jaGFuID0gJmNoYW4tPmNvbW1vbjsKKwkJSU5JVF9MSVNUX0hFQUQoJnJlZi0+bm9kZSk7CisJCWxpc3RfYWRkX3RhaWwoJnJlZi0+bm9kZSwgJnBwYzQ0MHNwZV9hZG1hX2NoYW5fbGlzdCk7CisJfSBlbHNlIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBjaGFubmVsIHJlZmVyZW5jZSFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWZfYWxsb2M7CisJfQorCisJcmV0ID0gcHBjNDQwc3BlX2FkbWFfc2V0dXBfaXJxcyhhZGV2LCBjaGFuLCAmaW5pdGNvZGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2lycTsKKworCXBwYzQ0MHNwZV9hZG1hX2luaXRfY2FwYWJpbGl0aWVzKGFkZXYpOworCisJcmV0ID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmYWRldi0+Y29tbW9uKTsKKwlpZiAocmV0KSB7CisJCWluaXRjb2RlID0gUFBDX0FETUFfSU5JVF9SRUdJU1RFUjsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBkbWEgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZGV2X3JlZzsKKwl9CisKKwlnb3RvIG91dDsKKworZXJyX2Rldl9yZWc6CisJcHBjNDQwc3BlX2FkbWFfcmVsZWFzZV9pcnFzKGFkZXYsIGNoYW4pOworZXJyX2lycToKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmLCBfcmVmLCAmcHBjNDQwc3BlX2FkbWFfY2hhbl9saXN0LCBub2RlKSB7CisJCWlmIChjaGFuID09IHRvX3BwYzQ0MHNwZV9hZG1hX2NoYW4ocmVmLT5jaGFuKSkgeworCQkJbGlzdF9kZWwoJnJlZi0+bm9kZSk7CisJCQlrZnJlZShyZWYpOworCQl9CisJfQorZXJyX3JlZl9hbGxvYzoKKwlpZiAoYWRldi0+aWQgIT0gUFBDNDQwU1BFX1hPUl9JRCkgeworCQlkbWFfdW5tYXBfcGFnZSgmb2ZkZXYtPmRldiwgY2hhbi0+cGRlc3QsCisJCQkgICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWRtYV91bm1hcF9wYWdlKCZvZmRldi0+ZGV2LCBjaGFuLT5xZGVzdCwKKwkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJX19mcmVlX3BhZ2UoY2hhbi0+cGRlc3RfcGFnZSk7CisJCV9fZnJlZV9wYWdlKGNoYW4tPnFkZXN0X3BhZ2UpOworCX0KK2Vycl9wYWdlX2FsbG9jOgorCWtmcmVlKGNoYW4pOworZXJyX2NoYW5fYWxsb2M6CisJaWYgKGFkZXYtPmlkID09IFBQQzQ0MFNQRV9YT1JfSUQpCisJCWlvdW5tYXAoYWRldi0+eG9yX3JlZyk7CisJZWxzZQorCQlpb3VubWFwKGFkZXYtPmRtYV9yZWcpOworZXJyX3JlZ3NfYWxsb2M6CisJZG1hX2ZyZWVfY29oZXJlbnQoYWRldi0+ZGV2LCBhZGV2LT5wb29sX3NpemUsCisJCQkgIGFkZXYtPmRtYV9kZXNjX3Bvb2xfdmlydCwKKwkJCSAgYWRldi0+ZG1hX2Rlc2NfcG9vbCk7CitlcnJfZG1hX2FsbG9jOgorCWtmcmVlKGFkZXYpOworZXJyX2FkZXZfYWxsb2M6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CitvdXQ6CisJaWYgKGlkIDwgUFBDNDQwU1BFX0FETUFfRU5HSU5FU19OVU0pCisJCXBwYzQ0MHNwZV9hZG1hX2RldmljZXNbaWRdID0gaW5pdGNvZGU7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHBwYzQ0MHNwZV9hZG1hX3JlbW92ZSAtIHJlbW92ZSB0aGUgYXN5bmNoIGRldmljZQorICovCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwcGM0NDBzcGVfYWRtYV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2RldmljZSAqYWRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCAqX2NoYW47CisJc3RydWN0IHBwY19kbWFfY2hhbl9yZWYgKnJlZiwgKl9yZWY7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2NoYW4gKnBwYzQ0MHNwZV9jaGFuOworCisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoYWRldi0+aWQgPCBQUEM0NDBTUEVfQURNQV9FTkdJTkVTX05VTSkKKwkJcHBjNDQwc3BlX2FkbWFfZGV2aWNlc1thZGV2LT5pZF0gPSAtMTsKKworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmYWRldi0+Y29tbW9uKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwgJmFkZXYtPmNvbW1vbi5jaGFubmVscywKKwkJCQkgZGV2aWNlX25vZGUpIHsKKwkJcHBjNDQwc3BlX2NoYW4gPSB0b19wcGM0NDBzcGVfYWRtYV9jaGFuKGNoYW4pOworCQlwcGM0NDBzcGVfYWRtYV9yZWxlYXNlX2lycXMoYWRldiwgcHBjNDQwc3BlX2NoYW4pOworCQl0YXNrbGV0X2tpbGwoJnBwYzQ0MHNwZV9jaGFuLT5pcnFfdGFza2xldCk7CisJCWlmIChhZGV2LT5pZCAhPSBQUEM0NDBTUEVfWE9SX0lEKSB7CisJCQlkbWFfdW5tYXBfcGFnZSgmb2ZkZXYtPmRldiwgcHBjNDQwc3BlX2NoYW4tPnBkZXN0LAorCQkJCQlQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJCWRtYV91bm1hcF9wYWdlKCZvZmRldi0+ZGV2LCBwcGM0NDBzcGVfY2hhbi0+cWRlc3QsCisJCQkJCVBBR0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOworCQkJX19mcmVlX3BhZ2UocHBjNDQwc3BlX2NoYW4tPnBkZXN0X3BhZ2UpOworCQkJX19mcmVlX3BhZ2UocHBjNDQwc3BlX2NoYW4tPnFkZXN0X3BhZ2UpOworCQl9CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWYsIF9yZWYsICZwcGM0NDBzcGVfYWRtYV9jaGFuX2xpc3QsCisJCQkJCSBub2RlKSB7CisJCQlpZiAocHBjNDQwc3BlX2NoYW4gPT0KKwkJCSAgICB0b19wcGM0NDBzcGVfYWRtYV9jaGFuKHJlZi0+Y2hhbikpIHsKKwkJCQlsaXN0X2RlbCgmcmVmLT5ub2RlKTsKKwkJCQlrZnJlZShyZWYpOworCQkJfQorCQl9CisJCWxpc3RfZGVsKCZjaGFuLT5kZXZpY2Vfbm9kZSk7CisJCWtmcmVlKHBwYzQ0MHNwZV9jaGFuKTsKKwl9CisKKwlkbWFfZnJlZV9jb2hlcmVudChhZGV2LT5kZXYsIGFkZXYtPnBvb2xfc2l6ZSwKKwkJCSAgYWRldi0+ZG1hX2Rlc2NfcG9vbF92aXJ0LCBhZGV2LT5kbWFfZGVzY19wb29sKTsKKwlpZiAoYWRldi0+aWQgPT0gUFBDNDQwU1BFX1hPUl9JRCkKKwkJaW91bm1hcChhZGV2LT54b3JfcmVnKTsKKwllbHNlCisJCWlvdW5tYXAoYWRldi0+ZG1hX3JlZyk7CisJb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzKSk7CisJa2ZyZWUoYWRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAvc3lzIGRyaXZlciBpbnRlcmZhY2UgdG8gZW5hYmxlIGgvdyBSQUlELTYgY2FwYWJpbGl0aWVzCisgKiBGaWxlcyBjcmVhdGVkIGluIGUuZy4gL3N5cy9kZXZpY2VzL3BsYi4wLzQwMDEwMDEwMC5kbWEwL2RyaXZlci8KKyAqIGRpcmVjdG9yeSBhcmUgImRldmljZXMiLCAiZW5hYmxlIiBhbmQgInBvbHkiLgorICogImRldmljZXMiIHNob3dzIGF2YWlsYWJsZSBlbmdpbmVzLgorICogImVuYWJsZSIgaXMgdXNlZCB0byBlbmFibGUgUkFJRC02IGNhcGFiaWxpdGllcyBvciB0byBjaGVjaworICogd2hldGhlciB0aGVzZSBoYXMgYmVlbiBhY3RpdmF0ZWQuCisgKiAicG9seSIgYWxsb3dzIHNldHRpbmcvY2hlY2tpbmcgdXNlZCBwb2x5bm9taWFsIChmb3IgUFBDNDQwU1BlIG9ubHkpLgorICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHBjNDQwc3BlX2RldmljZXMoc3RydWN0IGRldmljZV9kcml2ZXIgKmRldiwgY2hhciAqYnVmKQoreworCXNzaXplX3Qgc2l6ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFBDNDQwU1BFX0FETUFfRU5HSU5FU19OVU07IGkrKykgeworCQlpZiAocHBjNDQwc3BlX2FkbWFfZGV2aWNlc1tpXSA9PSAtMSkKKwkJCWNvbnRpbnVlOworCQlzaXplICs9IHNucHJpbnRmKGJ1ZiArIHNpemUsIFBBR0VfU0laRSAtIHNpemUsCisJCQkJICJQUEM0NDBTUChFKS1BRE1BLiVkOiAlc1xuIiwgaSwKKwkJCQkgcHBjX2FkbWFfZXJyb3JzW3BwYzQ0MHNwZV9hZG1hX2RldmljZXNbaV1dKTsKKwl9CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHBjNDQwc3BlX3I2ZW5hYmxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCQkiUFBDNDQwU1AoZSkgUkFJRC02IGNhcGFiaWxpdGllcyBhcmUgJXNBQkxFRC5cbiIsCisJCQlwcGM0NDBzcGVfcjZfZW5hYmxlZCA/ICJFTiIgOiAiRElTIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3BwYzQ0MHNwZV9yNmVuYWJsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2LAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmICghY291bnQgfHwgY291bnQgPiAxMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBwYzQ0MHNwZV9yNl90Y2hhbikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBXcml0ZSBhIGtleSAqLworCXNzY2FuZihidWYsICIlbHgiLCAmdmFsKTsKKwlkY3Jfd3JpdGUocHBjNDQwc3BlX21xX2Rjcl9ob3N0LCBEQ1JOX01RMF9YT1JCQSwgdmFsKTsKKwlpc3luYygpOworCisJLyogVmVyaWZ5IHdoZXRoZXIgaXQgcmVhbGx5IHdvcmtzIG5vdyAqLworCWlmIChwcGM0NDBzcGVfdGVzdF9yYWlkNihwcGM0NDBzcGVfcjZfdGNoYW4pID09IDApIHsKKwkJcHJfaW5mbygiUFBDNDQwU1AoZSkgUkFJRC02IGhhcyBiZWVuIGFjdGl2YXRlZCAiCisJCQkic3VjY2Vzc2Z1bGx5XG4iKTsKKwkJcHBjNDQwc3BlX3I2X2VuYWJsZWQgPSAxOworCX0gZWxzZSB7CisJCXByX2luZm8oIlBQQzQ0MFNQKGUpIFJBSUQtNiBoYXNuJ3QgYmVlbiBhY3RpdmF0ZWQhIgorCQkJIiBFcnJvciBrZXkgP1xuIik7CisJCXBwYzQ0MHNwZV9yNl9lbmFibGVkID0gMDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3BwYzQ0MHNwZV9yNnBvbHkoc3RydWN0IGRldmljZV9kcml2ZXIgKmRldiwgY2hhciAqYnVmKQoreworCXNzaXplX3Qgc2l6ZSA9IDA7CisJdTMyIHJlZzsKKworI2lmZGVmIENPTkZJR180NDBTUAorCS8qIDQ0MFNQIGhhcyBmaXhlZCBwb2x5bm9taWFsICovCisJcmVnID0gMHg0ZDsKKyNlbHNlCisJcmVnID0gZGNyX3JlYWQocHBjNDQwc3BlX21xX2Rjcl9ob3N0LCBEQ1JOX01RMF9DRkJITCk7CisJcmVnID4+PSBNUTBfQ0ZCSExfUE9MWTsKKwlyZWcgJj0gMHhGRjsKKyNlbmRpZgorCisJc2l6ZSA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiUFBDNDQwU1AoZSkgUkFJRC02IGRyaXZlciAiCisJCQkidXNlcyAweDElMDJ4IHBvbHlub21pYWwuXG4iLCByZWcpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wcGM0NDBzcGVfcjZwb2x5KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyByZWcsIHZhbDsKKworI2lmZGVmIENPTkZJR180NDBTUAorCS8qIDQ0MFNQIHVzZXMgZGVmYXVsdCAweDE0RCBwb2x5bm9taWFsIG9ubHkgKi8KKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCisJaWYgKCFjb3VudCB8fCBjb3VudCA+IDYpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZS5nLiwgMHgxNEQgb3IgMHgxMUQgKi8KKwlzc2NhbmYoYnVmLCAiJWx4IiwgJnZhbCk7CisKKwlpZiAodmFsICYgfjB4MUZGKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCAmPSAweEZGOworCXJlZyA9IGRjcl9yZWFkKHBwYzQ0MHNwZV9tcV9kY3JfaG9zdCwgRENSTl9NUTBfQ0ZCSEwpOworCXJlZyAmPSB+KDB4RkYgPDwgTVEwX0NGQkhMX1BPTFkpOworCXJlZyB8PSB2YWwgPDwgTVEwX0NGQkhMX1BPTFk7CisJZGNyX3dyaXRlKHBwYzQ0MHNwZV9tcV9kY3JfaG9zdCwgRENSTl9NUTBfQ0ZCSEwsIHJlZyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUihkZXZpY2VzLCBTX0lSVUdPLCBzaG93X3BwYzQ0MHNwZV9kZXZpY2VzLCBOVUxMKTsKK3N0YXRpYyBEUklWRVJfQVRUUihlbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3BwYzQ0MHNwZV9yNmVuYWJsZSwKKwkJICAgc3RvcmVfcHBjNDQwc3BlX3I2ZW5hYmxlKTsKK3N0YXRpYyBEUklWRVJfQVRUUihwb2x5LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wcGM0NDBzcGVfcjZwb2x5LAorCQkgICBzdG9yZV9wcGM0NDBzcGVfcjZwb2x5KTsKKworLyoKKyAqIENvbW1vbiBpbml0aWFsaXNhdGlvbiBmb3IgUkFJRCBlbmdpbmVzOyBhbGxvY2F0ZSBtZW1vcnkgZm9yCisgKiBETUF4IEZJRk9zLCBwZXJmb3JtIGNvbmZpZ3VyYXRpb24gY29tbW9uIGZvciBhbGwgRE1BIGVuZ2luZXMuCisgKiBGdXJ0aGVyIERNQSBlbmdpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBkb25lIGF0IHByb2JlIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgcHBjNDQwc3BlX2NvbmZpZ3VyZV9yYWlkX2RldmljZXModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCByZXNvdXJjZSBpMm9fcmVzOworCXN0cnVjdCBpMm9fcmVncyBfX2lvbWVtICppMm9fcmVnOworCWRjcl9ob3N0X3QgaTJvX2Rjcl9ob3N0OworCXVuc2lnbmVkIGludCBkY3JfYmFzZSwgZGNyX2xlbjsKKwlpbnQgaSwgcmV0OworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiaWJtLGkyby00NDBzcGUiKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiJXM6IGNhbid0IGZpbmQgSTJPIGRldmljZSB0cmVlIG5vZGVcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmaTJvX3JlcykpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpMm9fcmVnID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghaTJvX3JlZykgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gbWFwIEkyTyByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBHZXQgSTJPIERDUnMgYmFzZSAqLworCWRjcl9iYXNlID0gZGNyX3Jlc291cmNlX3N0YXJ0KG5wLCAwKTsKKwlkY3JfbGVuID0gZGNyX3Jlc291cmNlX2xlbihucCwgMCk7CisJaWYgKCFkY3JfYmFzZSAmJiAhZGNyX2xlbikgeworCQlwcl9lcnIoIiVzOiBjYW4ndCBnZXQgRENSIHJlZ2lzdGVycyBiYXNlL2xlbiFcbiIsCisJCQlucC0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlpb3VubWFwKGkyb19yZWcpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpMm9fZGNyX2hvc3QgPSBkY3JfbWFwKG5wLCBkY3JfYmFzZSwgZGNyX2xlbik7CisJaWYgKCFEQ1JfTUFQX09LKGkyb19kY3JfaG9zdCkpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIG1hcCBEQ1JzIVxuIiwgbnAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJaW91bm1hcChpMm9fcmVnKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW9mX25vZGVfcHV0KG5wKTsKKworCS8qIFByb3ZpZGUgbWVtb3J5IHJlZ2lvbnMgZm9yIERNQSdzIEZJRk9zOiBJMk8sIERNQTAgYW5kIERNQTEgc2hhcmUKKwkgKiB0aGUgYmFzZSBhZGRyZXNzIG9mIEZJRk8gbWVtb3J5IHNwYWNlLgorCSAqIEFjdHVhbGx5IHdlIG5lZWQgdHdpY2UgbW9yZSBwaHlzaWNhbCBtZW1vcnkgdGhhbiBwcm9ncmFtbWVkIGluIHRoZQorCSAqIDxmc2l6PiByZWdpc3RlciAoYmVjYXVzZSB0aGVyZSBhcmUgdHdvIEZJRk9zIGZvciBlYWNoIERNQTogQ1AgYW5kIENTKQorCSAqLworCXBwYzQ0MHNwZV9kbWFfZmlmb19idWYgPSBrbWFsbG9jKChETUEwX0ZJRk9fU0laRSArIERNQTFfRklGT19TSVpFKSA8PCAxLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcGM0NDBzcGVfZG1hX2ZpZm9fYnVmKSB7CisJCXByX2VycigiJXM6IERNQSBGSUZPIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKKwkJaW91bm1hcChpMm9fcmVnKTsKKwkJZGNyX3VubWFwKGkyb19kY3JfaG9zdCwgZGNyX2xlbik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogQ29uZmlndXJlIGgvdworCSAqLworCS8qIFJlc2V0IEkyTy9ETUEgKi8KKwltdGRjcmkoU0RSMCwgRENSTl9TRFIwX1NSU1QsIERDUk5fU0RSMF9TUlNUX0kyT0RNQSk7CisJbXRkY3JpKFNEUjAsIERDUk5fU0RSMF9TUlNULCAwKTsKKworCS8qIFNldHVwIHRoZSBiYXNlIGFkZHJlc3Mgb2YgbW1hcGVkIHJlZ2lzdGVycyAqLworCWRjcl93cml0ZShpMm9fZGNyX2hvc3QsIERDUk5fSTJPMF9JQkFILCAodTMyKShpMm9fcmVzLnN0YXJ0ID4+IDMyKSk7CisJZGNyX3dyaXRlKGkyb19kY3JfaG9zdCwgRENSTl9JMk8wX0lCQUwsICh1MzIpKGkyb19yZXMuc3RhcnQpIHwKKwkJCQkJCUkyT19SRUdfRU5BQkxFKTsKKwlkY3JfdW5tYXAoaTJvX2Rjcl9ob3N0LCBkY3JfbGVuKTsKKworCS8qIFNldHVwIEZJRk8gbWVtb3J5IHNwYWNlIGJhc2UgYWRkcmVzcyAqLworCWlvd3JpdGUzMigwLCAmaTJvX3JlZy0+aWZiYWgpOworCWlvd3JpdGUzMigoKHUzMilfX3BhKHBwYzQ0MHNwZV9kbWFfZmlmb19idWYpKSwgJmkyb19yZWctPmlmYmFsKTsKKworCS8qIHNldCB6ZXJvIEZJRk8gc2l6ZSBmb3IgSTJPLCBzbyB0aGUgd2hvbGUKKwkgKiBwcGM0NDBzcGVfZG1hX2ZpZm9fYnVmIGlzIHVzZWQgYnkgRE1Bcy4KKwkgKiBETUF4X0ZJRk9zIHdpbGwgYmUgY29uZmlndXJlZCB3aGlsZSBwcm9iZS4KKwkgKi8KKwlpb3dyaXRlMzIoMCwgJmkyb19yZWctPmlmc2l6KTsKKwlpb3VubWFwKGkyb19yZWcpOworCisJLyogVG8gcHJlcGFyZSBXWE9SL1JYT1IgZnVuY3Rpb25hbGl0eSB3ZSBuZWVkIGFjY2VzcyB0bworCSAqIE1lbW9yeSBRdWV1ZSBNb2R1bGUgRENScyAoZmluYWxseSBpdCB3aWxsIGJlIGVuYWJsZWQKKwkgKiB2aWEgL3N5cyBpbnRlcmZhY2Ugb2YgdGhlIHBwYzQ0MHNwZSBBRE1BIGRyaXZlcikuCisJICovCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiaWJtLG1xLTQ0MHNwZSIpOworCWlmICghbnApIHsKKwkJcHJfZXJyKCIlczogY2FuJ3QgZmluZCBNUSBkZXZpY2UgdHJlZSBub2RlXG4iLAorCQkJX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCS8qIEdldCBNUSBEQ1JzIGJhc2UgKi8KKwlkY3JfYmFzZSA9IGRjcl9yZXNvdXJjZV9zdGFydChucCwgMCk7CisJZGNyX2xlbiA9IGRjcl9yZXNvdXJjZV9sZW4obnAsIDApOworCWlmICghZGNyX2Jhc2UgJiYgIWRjcl9sZW4pIHsKKwkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IERDUiByZWdpc3RlcnMgYmFzZS9sZW4hXG4iLAorCQkJbnAtPmZ1bGxfbmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X21xOworCX0KKworCXBwYzQ0MHNwZV9tcV9kY3JfaG9zdCA9IGRjcl9tYXAobnAsIGRjcl9iYXNlLCBkY3JfbGVuKTsKKwlpZiAoIURDUl9NQVBfT0socHBjNDQwc3BlX21xX2Rjcl9ob3N0KSkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gbWFwIERDUnMhXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfbXE7CisJfQorCW9mX25vZGVfcHV0KG5wKTsKKwlwcGM0NDBzcGVfbXFfZGNyX2xlbiA9IGRjcl9sZW47CisKKwkvKiBTZXQgSEIgYWxpYXMgKi8KKwlkY3Jfd3JpdGUocHBjNDQwc3BlX21xX2Rjcl9ob3N0LCBEQ1JOX01RMF9CQVVILCBETUFfQ1VFRF9YT1JfSEIpOworCisJLyogU2V0OgorCSAqIC0gTEwgdHJhbnNhY3Rpb24gcGFzc2luZyBsaW1pdCB0byAxOworCSAqIC0gTWVtb3J5IGNvbnRyb2xsZXIgY3ljbGUgbGltaXQgdG8gMTsKKwkgKiAtIEdhbG9pcyBQb2x5bm9taWFsIHRvIDB4MTRkIChkZWZhdWx0KQorCSAqLworCWRjcl93cml0ZShwcGM0NDBzcGVfbXFfZGNyX2hvc3QsIERDUk5fTVEwX0NGQkhMLAorCQkgICgxIDw8IE1RMF9DRkJITF9UUExNKSB8ICgxIDw8IE1RMF9DRkJITF9IQkNMKSB8CisJCSAgKFBQQzQ0MFNQRV9ERUZBVUxUX1BPTFkgPDwgTVEwX0NGQkhMX1BPTFkpKTsKKworCWF0b21pY19zZXQoJnBwYzQ0MHNwZV9hZG1hX2Vycl9pcnFfcmVmLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBDNDQwU1BFX0FETUFfRU5HSU5FU19OVU07IGkrKykKKwkJcHBjNDQwc3BlX2FkbWFfZGV2aWNlc1tpXSA9IC0xOworCisJcmV0dXJuIDA7CisKK291dF9tcToKKwlvZl9ub2RlX3B1dChucCk7CitvdXRfZnJlZToKKwlrZnJlZShwcGM0NDBzcGVfZG1hX2ZpZm9fYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2RldmluaXRkYXRhIHBwYzQ0MHNwZV9hZG1hX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZQk9ICJpYm0sZG1hLTQ0MHNwZSIsIH0sCisJeyAuY29tcGF0aWJsZQk9ICJhbWNjLHhvci1hY2NlbGVyYXRvciIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcHBjNDQwc3BlX2FkbWFfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBwcGM0NDBzcGVfYWRtYV9kcml2ZXIgPSB7CisJLm1hdGNoX3RhYmxlID0gcHBjNDQwc3BlX2FkbWFfb2ZfbWF0Y2gsCisJLnByb2JlID0gcHBjNDQwc3BlX2FkbWFfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBwYzQ0MHNwZV9hZG1hX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiUFBDNDQwU1AoRSktQURNQSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgX19pbml0IGludCBwcGM0NDBzcGVfYWRtYV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBwYzQ0MHNwZV9jb25maWd1cmVfcmFpZF9kZXZpY2VzKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcHBjNDQwc3BlX2FkbWFfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXJcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X3JlZzsKKwl9CisKKwkvKiBJbml0aWFsaXphdGlvbiBzdGF0dXMgKi8KKwlyZXQgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnBwYzQ0MHNwZV9hZG1hX2RyaXZlci5kcml2ZXIsCisJCQkJICZkcml2ZXJfYXR0cl9kZXZpY2VzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9kZXY7CisKKwkvKiBSQUlELTYgaC93IGVuYWJsZSBlbnRyeSAqLworCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmcHBjNDQwc3BlX2FkbWFfZHJpdmVyLmRyaXZlciwKKwkJCQkgJmRyaXZlcl9hdHRyX2VuYWJsZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZW47CisKKwkvKiBHRiBwb2x5bm9taWFsIHRvIHVzZSAqLworCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmcHBjNDQwc3BlX2FkbWFfZHJpdmVyLmRyaXZlciwKKwkJCQkgJmRyaXZlcl9hdHRyX3BvbHkpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCisJZHJpdmVyX3JlbW92ZV9maWxlKCZwcGM0NDBzcGVfYWRtYV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX2VuYWJsZSk7CitvdXRfZW46CisJZHJpdmVyX3JlbW92ZV9maWxlKCZwcGM0NDBzcGVfYWRtYV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX2RldmljZXMpOworb3V0X2RldjoKKwkvKiBVc2VyIHdpbGwgbm90IGJlIGFibGUgdG8gZW5hYmxlIGgvdyBSQUlELTYgKi8KKwlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gY3JlYXRlIFJBSUQtNiBkcml2ZXIgaW50ZXJmYWNlXG4iLAorCQlfX2Z1bmNfXyk7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzQ0MHNwZV9hZG1hX2RyaXZlcik7CitvdXRfcmVnOgorCWRjcl91bm1hcChwcGM0NDBzcGVfbXFfZGNyX2hvc3QsIHBwYzQ0MHNwZV9tcV9kY3JfbGVuKTsKKwlrZnJlZShwcGM0NDBzcGVfZG1hX2ZpZm9fYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHBjNDQwc3BlX2FkbWFfZXhpdCh2b2lkKQoreworCWRyaXZlcl9yZW1vdmVfZmlsZSgmcHBjNDQwc3BlX2FkbWFfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9wb2x5KTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnBwYzQ0MHNwZV9hZG1hX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfZW5hYmxlKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnBwYzQ0MHNwZV9hZG1hX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfZGV2aWNlcyk7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzQ0MHNwZV9hZG1hX2RyaXZlcik7CisJZGNyX3VubWFwKHBwYzQ0MHNwZV9tcV9kY3JfaG9zdCwgcHBjNDQwc3BlX21xX2Rjcl9sZW4pOworCWtmcmVlKHBwYzQ0MHNwZV9kbWFfZmlmb19idWYpOworfQorCithcmNoX2luaXRjYWxsKHBwYzQ0MHNwZV9hZG1hX2luaXQpOworbW9kdWxlX2V4aXQocHBjNDQwc3BlX2FkbWFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIll1cmkgVGlraG9ub3YgPHl1ckBlbWNyYWZ0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUFBDNDQwU1BFIEFETUEgRW5naW5lIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvcHBjNHh4L2FkbWEuaCBiL2RyaXZlcnMvZG1hL3BwYzR4eC9hZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkYTVhODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9wcGM0eHgvYWRtYS5oCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogMjAwNi0yMDA5IChDKSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLgorICoKKyAqIEF1dGhvcjogWXVyaSBUaWtob25vdiA8eXVyQGVtY3JhZnQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZgorICogYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX1BQQzQ0MFNQRV9BRE1BX0gKKyNkZWZpbmUgX1BQQzQ0MFNQRV9BRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSAieG9yLmgiCisKKyNkZWZpbmUgdG9fcHBjNDQwc3BlX2FkbWFfY2hhbihjaGFuKSBcCisJCWNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiwgY29tbW9uKQorI2RlZmluZSB0b19wcGM0NDBzcGVfYWRtYV9kZXZpY2UoZGV2KSBcCisJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXZpY2UsIGNvbW1vbikKKyNkZWZpbmUgdHhfdG9fcHBjNDQwc3BlX2FkbWFfc2xvdCh0eCkgXAorCQljb250YWluZXJfb2YodHgsIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QsIGFzeW5jX3R4KQorCisvKiBEZWZhdWx0IHBvbHlub21pYWwgKGZvciA0NDBTUCBpcyBvbmx5IGF2YWlsYWJsZSkgKi8KKyNkZWZpbmUgUFBDNDQwU1BFX0RFRkFVTFRfUE9MWQkweDRkCisKKyNkZWZpbmUgUFBDNDQwU1BFX0FETUFfRU5HSU5FU19OVU0JKFhPUl9FTkdJTkVTX05VTSArIERNQV9FTkdJTkVTX05VTSkKKworI2RlZmluZSBQUEM0NDBTUEVfQURNQV9XQVRDSERPR19NU0VDCTMKKyNkZWZpbmUgUFBDNDQwU1BFX0FETUFfVEhSRVNIT0xECTEKKworI2RlZmluZSBQUEM0NDBTUEVfRE1BMF9JRAkwCisjZGVmaW5lIFBQQzQ0MFNQRV9ETUExX0lECTEKKyNkZWZpbmUgUFBDNDQwU1BFX1hPUl9JRAkyCisKKyNkZWZpbmUgUFBDNDQwU1BFX0FETUFfRE1BX01BWF9CWVRFX0NPVU5UCTB4RkZGRkZGVUwKKy8qIHRoaXMgaXMgdGhlIFhPUl9DQkJDUiB3aWR0aCAqLworI2RlZmluZSBQUEM0NDBTUEVfQURNQV9YT1JfTUFYX0JZVEVfQ09VTlQJKDEgPDwgMzEpCisjZGVmaW5lIFBQQzQ0MFNQRV9BRE1BX1pFUk9fU1VNX01BWF9CWVRFX0NPVU5UIFBQQzQ0MFNQRV9BRE1BX1hPUl9NQVhfQllURV9DT1VOVAorCisjZGVmaW5lIFBQQzQ0MFNQRV9SWE9SX1JVTgkwCisKKyNkZWZpbmUgTVEwX0NGMkhfUlhPUl9CU19NQVNLCTB4MUZGCisKKyN1bmRlZiBBRE1BX0xMX0RFQlVHCisKKy8qKgorICogc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2RldmljZSAtIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIEFETUEgZGV2aWNlCisgKiBAZGV2OiBkZXZpY2UKKyAqIEBkbWFfcmVnOiBiYXNlIGZvciBETUF4IHJlZ2lzdGVyIGFjY2VzcworICogQHhvcl9yZWc6IGJhc2UgZm9yIFhPUiByZWdpc3RlciBhY2Nlc3MKKyAqIEBpMm9fcmVnOiBiYXNlIGZvciBJMk8gcmVnaXN0ZXIgYWNjZXNzCisgKiBAaWQ6IEhXIEFETUEgRGV2aWNlIHNlbGVjdG9yCisgKiBAZG1hX2Rlc2NfcG9vbF92aXJ0OiBiYXNlIG9mIERNQSBkZXNjcmlwdG9yIHJlZ2lvbiAoQ1BVIGFkZHJlc3MpCisgKiBAZG1hX2Rlc2NfcG9vbDogYmFzZSBvZiBETUEgZGVzY3JpcHRvciByZWdpb24gKERNQSBhZGRyZXNzKQorICogQHBvb2xfc2l6ZTogc2l6ZSBvZiB0aGUgcG9vbAorICogQGlycTogRE1BeCBvciBYT1IgaXJxIG51bWJlcgorICogQGVycl9pcnE6IERNQXggZXJyb3IgaXJxIG51bWJlcgorICogQGNvbW1vbjogZW1iZWRkZWQgc3RydWN0IGRtYV9kZXZpY2UKKyAqLworc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2RldmljZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkbWFfcmVncyBfX2lvbWVtICpkbWFfcmVnOworCXN0cnVjdCB4b3JfcmVncyBfX2lvbWVtICp4b3JfcmVnOworCXN0cnVjdCBpMm9fcmVncyBfX2lvbWVtICppMm9fcmVnOworCWludCBpZDsKKwl2b2lkICpkbWFfZGVzY19wb29sX3ZpcnQ7CisJZG1hX2FkZHJfdCBkbWFfZGVzY19wb29sOworCXNpemVfdCBwb29sX3NpemU7CisJaW50IGlycTsKKwlpbnQgZXJyX2lycTsKKwlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247Cit9OworCisvKioKKyAqIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9jaGFuIC0gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gQURNQSBjaGFubmVsCisgKiBAbG9jazogc2VyaWFsaXplcyBlbnF1ZXVlL2RlcXVldWUgb3BlcmF0aW9ucyB0byB0aGUgc2xvdCBwb29sCisgKiBAZGV2aWNlOiBwYXJlbnQgZGV2aWNlCisgKiBAY2hhaW46IGRldmljZSBjaGFpbiB2aWV3IG9mIHRoZSBkZXNjcmlwdG9ycworICogQGNvbW1vbjogY29tbW9uIGRtYWVuZ2luZSBjaGFubmVsIG9iamVjdCBtZW1iZXJzCisgKiBAYWxsX3Nsb3RzOiBjb21wbGV0ZSBkb21haW4gb2Ygc2xvdHMgdXNhYmxlIGJ5IHRoZSBjaGFubmVsCisgKiBAcGVuZGluZzogYWxsb3dzIGJhdGNoaW5nIG9mIGhhcmR3YXJlIG9wZXJhdGlvbnMKKyAqIEBjb21wbGV0ZWRfY29va2llOiBpZGVudGlmaWVyIGZvciB0aGUgbW9zdCByZWNlbnRseSBjb21wbGV0ZWQgb3BlcmF0aW9uCisgKiBAc2xvdHNfYWxsb2NhdGVkOiByZWNvcmRzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZGVzY3JpcHRvciBzbG90IHBvb2wKKyAqIEBod19jaGFpbl9pbml0ZWQ6IGgvdyBkZXNjcmlwdG9yIGNoYWluIGluaXRpYWxpemF0aW9uIGZsYWcKKyAqIEBpcnFfdGFza2xldDogYm90dG9tIGhhbGYgd2hlcmUgcHBjNDQwc3BlX2FkbWFfc2xvdF9jbGVhbnVwIHJ1bnMKKyAqIEBuZWVkc191bm1hcDogaWYgYnVmZmVycyBzaG91bGQgbm90IGJlIHVubWFwcGVkIHVwb24gZmluYWwgcHJvY2Vzc2luZworICogQHBkZXN0X3BhZ2U6IFAgZGVzdGluYXRpb24gcGFnZSBmb3IgYXN5bmMgdmFsaWRhdGUgb3BlcmF0aW9uCisgKiBAcWRlc3RfcGFnZTogUSBkZXN0aW5hdGlvbiBwYWdlIGZvciBhc3luYyB2YWxpZGF0ZSBvcGVyYXRpb24KKyAqIEBwZGVzdDogUCBkbWEgYWRkciBmb3IgYXN5bmMgdmFsaWRhdGUgb3BlcmF0aW9uCisgKiBAcWRlc3Q6IFEgZG1hIGFkZHIgZm9yIGFzeW5jIHZhbGlkYXRlIG9wZXJhdGlvbgorICovCitzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfY2hhbiB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoYWluOworCXN0cnVjdCBkbWFfY2hhbiBjb21tb247CisJc3RydWN0IGxpc3RfaGVhZCBhbGxfc2xvdHM7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqbGFzdF91c2VkOworCWludCBwZW5kaW5nOworCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOworCWludCBzbG90c19hbGxvY2F0ZWQ7CisJaW50IGh3X2NoYWluX2luaXRlZDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3Rhc2tsZXQ7CisJdTggbmVlZHNfdW5tYXA7CisJc3RydWN0IHBhZ2UgKnBkZXN0X3BhZ2U7CisJc3RydWN0IHBhZ2UgKnFkZXN0X3BhZ2U7CisJZG1hX2FkZHJfdCBwZGVzdDsKKwlkbWFfYWRkcl90IHFkZXN0OworfTsKKworc3RydWN0IHBwYzQ0MHNwZV9yeG9yIHsKKwl1MzIgYWRkcmw7CisJdTMyIGFkZHJoOworCWludCBsZW47CisJaW50IHhvcl9jb3VudDsKKwlpbnQgYWRkcl9jb3VudDsKKwlpbnQgZGVzY19jb3VudDsKKwlpbnQgc3RhdGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBwcGM0NDBzcGVfYWRtYV9kZXNjX3Nsb3QgLSBQUEM0NDBTUEUtQURNQSBzb2Z0d2FyZSBkZXNjcmlwdG9yCisgKiBAcGh5czogaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUgZGVzY3JpcHRvciBjaGFpbgorICogQGdyb3VwX2hlYWQ6IGZpcnN0IG9wZXJhdGlvbiBpbiBhIHRyYW5zYWN0aW9uCisgKiBAaHdfbmV4dDogcG9pbnRlciB0byB0aGUgbmV4dCBkZXNjcmlwdG9yIGluIGNoYWluCisgKiBAYXN5bmNfdHg6IHN1cHBvcnQgZm9yIHRoZSBhc3luY190eCBhcGkKKyAqIEBzbG90X25vZGU6IG5vZGUgb24gdGhlIGlvcF9hZG1hX2NoYW4uYWxsX3Nsb3RzIGxpc3QKKyAqIEBjaGFpbl9ub2RlOiBub2RlIG9uIHRoZSBvcF9hZG1hX2NoYW4uY2hhaW4gbGlzdAorICogQGdyb3VwX2xpc3Q6IGxpc3Qgb2Ygc2xvdHMgdGhhdCBtYWtlIHVwIGEgbXVsdGktZGVzY3JpcHRvciB0cmFuc2FjdGlvbgorICogICAgICAgICAgICAgIGZvciBleGFtcGxlIHRyYW5zZmVyIGxlbmd0aHMgbGFyZ2VyIHRoYW4gdGhlIHN1cHBvcnRlZCBodyBtYXgKKyAqIEB1bm1hcF9sZW46IHRyYW5zYWN0aW9uIGJ5dGVjb3VudAorICogQGh3X2Rlc2M6IHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUgZGVzY3JpcHRvciBjaGFpbgorICogQHN0cmlkZTogY3VycmVudGx5IGNoYWluZWQgb3Igbm90CisgKiBAaWR4OiBwb29sIGluZGV4CisgKiBAc2xvdF9jbnQ6IHRvdGFsIHNsb3RzIHVzZWQgaW4gYW4gdHJhbnNhY3Rpb24gKGdyb3VwIG9mIG9wZXJhdGlvbnMpCisgKiBAc3JjX2NudDogbnVtYmVyIG9mIHNvdXJjZXMgc2V0IGluIHRoaXMgZGVzY3JpcHRvcgorICogQGRzdF9jbnQ6IG51bWJlciBvZiBkZXN0aW5hdGlvbnMgc2V0IGluIHRoZSBkZXNjcmlwdG9yCisgKiBAc2xvdHNfcGVyX29wOiBudW1iZXIgb2Ygc2xvdHMgcGVyIG9wZXJhdGlvbgorICogQGRlc2NzX3Blcl9vcDogbnVtYmVyIG9mIHNsb3QgcGVyIFAvUSBvcGVyYXRpb24gc2VlIGNvbW1lbnQKKyAqICAgICAgICAgICAgICAgIGZvciBwcGM0NDBzcGVfcHJlcF9kbWFfcHF4b3IgZnVuY3Rpb24KKyAqIEBmbGFnczogZGVzYyBzdGF0ZS90eXBlCisgKiBAcmV2ZXJzZV9mbGFnczogMSBpZiBhIGNvcnJlc3BvbmRpbmcgcnhvciBhZGRyZXNzIHVzZXMgcmV2ZXJzZWQgYWRkcmVzcyBvcmRlcgorICogQHhvcl9jaGVja19yZXN1bHQ6IHJlc3VsdCBvZiB6ZXJvIHN1bQorICogQGNyYzMyX3Jlc3VsdDogcmVzdWx0IGNyYyBjYWxjdWxhdGlvbgorICovCitzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90IHsKKwlkbWFfYWRkcl90IHBoeXM7CisJc3RydWN0IHBwYzQ0MHNwZV9hZG1hX2Rlc2Nfc2xvdCAqZ3JvdXBfaGVhZDsKKwlzdHJ1Y3QgcHBjNDQwc3BlX2FkbWFfZGVzY19zbG90ICpod19uZXh0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciBhc3luY190eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3Rfbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoYWluX25vZGU7IC8qIG5vZGUgaW4gY2hhbm5lbCBvcHMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZ3JvdXBfbGlzdDsgLyogbGlzdCAqLworCXVuc2lnbmVkIGludCB1bm1hcF9sZW47CisJdm9pZCAqaHdfZGVzYzsKKwl1MTYgc3RyaWRlOworCXUxNiBpZHg7CisJdTE2IHNsb3RfY250OworCXU4IHNyY19jbnQ7CisJdTggZHN0X2NudDsKKwl1OCBzbG90c19wZXJfb3A7CisJdTggZGVzY3NfcGVyX29wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyByZXZlcnNlX2ZsYWdzWzhdOworCisjZGVmaW5lIFBQQzQ0MFNQRV9ERVNDX0lOVAkwCS8qIGdlbmVyYXRlIGludGVycnVwdCBvbiBjb21wbGV0ZSAqLworI2RlZmluZSBQUEM0NDBTUEVfWkVST19QCTEJLyogY2xlYXIgUCBkZXN0aW9uYWlvbiAqLworI2RlZmluZSBQUEM0NDBTUEVfWkVST19RCTIJLyogY2xlYXIgUSBkZXN0aW5hdGlvbiAqLworI2RlZmluZSBQUEM0NDBTUEVfQ09IRVJFTlQJMwkvKiBzcmMvZHN0IGFyZSBjb2hlcmVudCAqLworCisjZGVmaW5lIFBQQzQ0MFNQRV9ERVNDX1dYT1IJNAkvKiBXWE9ScyBhcmUgaW4gY2hhaW4gKi8KKyNkZWZpbmUgUFBDNDQwU1BFX0RFU0NfUlhPUgk1CS8qIFJYT1IgaXMgaW4gY2hhaW4gKi8KKworI2RlZmluZSBQUEM0NDBTUEVfREVTQ19SWE9SMTIzCTgJLyogQ0RCIGZvciBSWE9SMTIzIG9wZXJhdGlvbiAqLworI2RlZmluZSBQUEM0NDBTUEVfREVTQ19SWE9SMTI0CTkJLyogQ0RCIGZvciBSWE9SMTI0IG9wZXJhdGlvbiAqLworI2RlZmluZSBQUEM0NDBTUEVfREVTQ19SWE9SMTI1CTEwCS8qIENEQiBmb3IgUlhPUjEyNSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgUFBDNDQwU1BFX0RFU0NfUlhPUjEyCTExCS8qIENEQiBmb3IgUlhPUjEyIG9wZXJhdGlvbiAqLworI2RlZmluZSBQUEM0NDBTUEVfREVTQ19SWE9SX1JFVgkxMgkvKiBDREIgaGFzIHNyY3MgaW4gcmV2ZXJzZWQgb3JkZXIgKi8KKworI2RlZmluZSBQUEM0NDBTUEVfREVTQ19QQ0hFQ0sJMTMKKyNkZWZpbmUgUFBDNDQwU1BFX0RFU0NfUUNIRUNLCTE0CisKKyNkZWZpbmUgUFBDNDQwU1BFX0RFU0NfUlhPUl9NU0sJMHgzCisKKwlzdHJ1Y3QgcHBjNDQwc3BlX3J4b3Igcnhvcl9jdXJzb3I7CisKKwl1bmlvbiB7CisJCXUzMiAqeG9yX2NoZWNrX3Jlc3VsdDsKKwkJdTMyICpjcmMzMl9yZXN1bHQ7CisJfTsKK307CisKKyNlbmRpZiAvKiBfUFBDNDQwU1BFX0FETUFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvcHBjNHh4L2RtYS5oIGIvZHJpdmVycy9kbWEvcHBjNHh4L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGUyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9wcGM0eHgvZG1hLmgKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiA0NDBTUGUncyBETUEgZW5naW5lcyBzdXBwb3J0IGhlYWRlciBmaWxlCisgKgorICogMjAwNi0yMDA5IChDKSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLgorICoKKyAqIEF1dGhvcjogWXVyaSBUaWtob25vdiA8eXVyQGVtY3JhZnQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybSBvZiAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoZSBwcm9ncmFtIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmCV9QUEM0NDBTUEVfRE1BX0gKKyNkZWZpbmUgX1BQQzQ0MFNQRV9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSB3aXRoIHN0YXRpY2FsIENEQnMgKi8KKyNkZWZpbmUJTUFYX1NUQVRfRE1BX0NEQlMJMTYKKy8qIE51bWJlciBvZiBETUEgZW5naW5lcyBhdmFpbGFibGUgb24gdGhlIGNvbnRvbGxlciAqLworI2RlZmluZSBETUFfRU5HSU5FU19OVU0JCTIKKworLyogTWF4aW11bSBoL3cgc3VwcG9ydGVkIG51bWJlciBvZiBkZXN0aW5hdGlvbnMgKi8KKyNkZWZpbmUgRE1BX0RFU1RfTUFYX05VTQkyCisKKy8qIEZJRk8ncyBwYXJhbXMgKi8KKyNkZWZpbmUgRE1BMF9GSUZPX1NJWkUJCTB4MTAwMAorI2RlZmluZSBETUExX0ZJRk9fU0laRQkJMHgxMDAwCisjZGVmaW5lIERNQV9GSUZPX0VOQUJMRQkJKDE8PDEyKQorCisvKiBETUEgQ29uZmlndXJhdGlvbiBSZWdpc3Rlci4gRGF0YSBUcmFuc2ZlciBFbmdpbmUgUExCIFByaW9yaXR5OiAqLworI2RlZmluZSBETUFfQ0ZHX0RYRVBSX0xQCSgwPDwyNikKKyNkZWZpbmUgRE1BX0NGR19EWEVQUl9IUAkoMzw8MjYpCisjZGVmaW5lIERNQV9DRkdfRFhFUFJfSEhQCSgyPDwyNikKKyNkZWZpbmUgRE1BX0NGR19EWEVQUl9ISEhQCSgxPDwyNikKKworLyogRE1BIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIuIERNQSBGSUZPIE1hbmFnZXIgUExCIFByaW9yaXR5OiAqLworI2RlZmluZSBETUFfQ0ZHX0RGTVBQX0xQCSgwPDwyMykKKyNkZWZpbmUgRE1BX0NGR19ERk1QUF9IUAkoMzw8MjMpCisjZGVmaW5lIERNQV9DRkdfREZNUFBfSEhQCSgyPDwyMykKKyNkZWZpbmUgRE1BX0NGR19ERk1QUF9ISEhQCSgxPDwyMykKKworLyogRE1BIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIuIEZvcmNlIDY0LWJ5dGUgQWxpZ25tZW50ICovCisjZGVmaW5lIERNQV9DRkdfRkFMR04JCSgxIDw8IDE5KQorCisvKlVJQzA6Ki8KKyNkZWZpbmUgRDBDUEZfSU5UCQkoMTw8MTIpCisjZGVmaW5lIEQwQ1NGX0lOVAkJKDE8PDExKQorI2RlZmluZSBEMUNQRl9JTlQJCSgxPDwxMCkKKyNkZWZpbmUgRDFDU0ZfSU5UCQkoMTw8OSkKKy8qVUlDMToqLworI2RlZmluZSBETUFFX0lOVAkJKDE8PDkpCisKKy8qIEkyTyBJT1AgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJPX0lPUElNX1AwU05FCQkoMTw8MykKKyNkZWZpbmUgSTJPX0lPUElNX1AwRU0JCSgxPDw1KQorI2RlZmluZSBJMk9fSU9QSU1fUDFTTkUJCSgxPDw2KQorI2RlZmluZSBJMk9fSU9QSU1fUDFFTQkJKDE8PDgpCisKKy8qIERNQSBDREIgZmllbGRzICovCisjZGVmaW5lIERNQV9DREJfTVNLCQkoMHhGKQorI2RlZmluZSBETUFfQ0RCXzY0Ql9BRERSCSgxPDwyKQorI2RlZmluZSBETUFfQ0RCX05PX0lOVAkJKDE8PDMpCisjZGVmaW5lIERNQV9DREJfU1RBVFVTX01TSwkoMHgzKQorI2RlZmluZSBETUFfQ0RCX0FERFJfTVNLCSgweEZGRkZGRkYwKQorCisvKiBETUEgQ0RCIE9wQ29kZXMgKi8KKyNkZWZpbmUgRE1BX0NEQl9PUENfTk9fT1AJKDB4MDApCisjZGVmaW5lIERNQV9DREJfT1BDX01WX1NHMV9TRzIJKDB4MDEpCisjZGVmaW5lIERNQV9DREJfT1BDX01VTFRJQ0FTVAkoMHgwNSkKKyNkZWZpbmUgRE1BX0NEQl9PUENfREZJTEwxMjgJKDB4MjQpCisjZGVmaW5lIERNQV9DREJfT1BDX0RDSEVDSzEyOAkoMHgyMykKKworI2RlZmluZSBETUFfQ1VFRF9YT1JfQkFTRQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgRE1BX0NVRURfWE9SX0hCCQkoMHgwMDAwMDAwOCkKKworI2lmZGVmIENPTkZJR180NDBTUAorI2RlZmluZSBETUFfQ1VFRF9NVUxUMV9PRkYJMAorI2RlZmluZSBETUFfQ1VFRF9NVUxUMl9PRkYJOAorI2RlZmluZSBETUFfQ1VFRF9NVUxUM19PRkYJMTYKKyNkZWZpbmUgRE1BX0NVRURfUkVHSU9OX09GRgkyNAorI2RlZmluZSBETUFfQ1VFRF9YT1JfV0lOX01TSwkoMHhGQzAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIERNQV9DVUVEX01VTFQxX09GRgkyCisjZGVmaW5lIERNQV9DVUVEX01VTFQyX09GRgkxMAorI2RlZmluZSBETUFfQ1VFRF9NVUxUM19PRkYJMTgKKyNkZWZpbmUgRE1BX0NVRURfUkVHSU9OX09GRgkyNgorI2RlZmluZSBETUFfQ1VFRF9YT1JfV0lOX01TSwkoMHhGMDAwMDAwMCkKKyNlbmRpZgorCisjZGVmaW5lIERNQV9DVUVEX1JFR0lPTl9NU0sJMHgzCisjZGVmaW5lIERNQV9SWE9SMTIzCQkweDAKKyNkZWZpbmUgRE1BX1JYT1IxMjQJCTB4MQorI2RlZmluZSBETUFfUlhPUjEyNQkJMHgyCisjZGVmaW5lIERNQV9SWE9SMTIJCTB4MworCisvKiBTL0cgYWRkcmVzc2VzICovCisjZGVmaW5lIERNQV9DREJfU0dfU1JDCQkxCisjZGVmaW5lIERNQV9DREJfU0dfRFNUMQkJMgorI2RlZmluZSBETUFfQ0RCX1NHX0RTVDIJCTMKKworLyoKKyAqIERNQXggZW5naW5lcyBDb21tYW5kIERlc2NyaXB0b3IgQmxvY2sgVHlwZQorICovCitzdHJ1Y3QgZG1hX2NkYiB7CisJLyoKKwkgKiBCYXNpYyBDREIgc3RydWN0dXJlIChUYWJsZSAyMC0xNywgcC40OTksIDQ0MHNwZV91bV8xXzIyLnBkZikKKwkgKi8KKwl1OAlwYWQwWzJdOyAgICAgICAgLyogcmVzZXJ2ZWQgKi8KKwl1OAlhdHRyOwkJLyogYXR0cmlidXRlcyAqLworCXU4CW9wYzsJCS8qIG9wY29kZSAqLworCXUzMglzZzF1OwkJLyogdXBwZXIgU0cxIGFkZHJlc3MgKi8KKwl1MzIJc2cxbDsJCS8qIGxvd2VyIFNHMSBhZGRyZXNzICovCisJdTMyCWNudDsJCS8qIFNHIGNvdW50LCAzQiB1c2VkICovCisJdTMyCXNnMnU7CQkvKiB1cHBlciBTRzIgYWRkcmVzcyAqLworCXUzMglzZzJsOwkJLyogbG93ZXIgU0cyIGFkZHJlc3MgKi8KKwl1MzIJc2czdTsJCS8qIHVwcGVyIFNHMyBhZGRyZXNzICovCisJdTMyCXNnM2w7CQkvKiBsb3dlciBTRzMgYWRkcmVzcyAqLworfTsKKworLyoKKyAqIERNQXggaGFyZHdhcmUgcmVnaXN0ZXJzIChwLjUxNSBpbiA0NDBTUGUgVU0gMS4yMikKKyAqLworc3RydWN0IGRtYV9yZWdzIHsKKwl1MzIJY3BmcGw7CisJdTMyCWNwZnBoOworCXUzMgljc2ZwbDsKKwl1MzIJY3NmcGg7CisJdTMyCWRzdHM7CisJdTMyCWNmZzsKKwl1OAlwYWQwWzB4OF07CisJdTE2CWNwZmhwOworCXUxNgljcGZ0cDsKKwl1MTYJY3NmaHA7CisJdTE2CWNzZnRwOworCXU4CXBhZDFbMHg4XTsKKwl1MzIJYWNwbDsKKwl1MzIJYWNwaDsKKwl1MzIJczFicGw7CisJdTMyCXMxYnBoOworCXUzMglzMmJwbDsKKwl1MzIJczJicGg7CisJdTMyCXMzYnBsOworCXUzMglzM2JwaDsKKwl1OAlwYWQyWzB4MTBdOworCXUzMgllYXJsOworCXUzMgllYXJoOworCXU4CXBhZDNbMHg4XTsKKwl1MzIJc2VhdDsKKwl1MzIJc2VhZDsKKwl1MzIJb3A7CisJdTMyCWZzaXo7Cit9OworCisvKgorICogSTJPIGhhcmR3YXJlIHJlZ2lzdGVycyAocC41MjggaW4gNDQwU1BlIFVNIDEuMjIpCisgKi8KK3N0cnVjdCBpMm9fcmVncyB7CisJdTMyCWlzdHM7CisJdTMyCWlzZWF0OworCXUzMglpc2VhZDsKKwl1OAlwYWQwWzB4MTRdOworCXUzMglpZGJlbDsKKwl1OAlwYWQxWzB4Y107CisJdTMyCWloaXM7CisJdTMyCWloaW07CisJdTgJcGFkMlsweDhdOworCXUzMglpaGlxOworCXUzMglpaG9xOworCXU4CXBhZDNbMHg4XTsKKwl1MzIJaW9waXM7CisJdTMyCWlvcGltOworCXUzMglpb3BpcTsKKwl1OAlpb3BvcTsKKwl1OAlwYWQ0WzNdOworCXUxNglpaWZsaDsKKwl1MTYJaWlmbHQ7CisJdTE2CWlpcGxoOworCXUxNglpaXBsdDsKKwl1MTYJaW9mbGg7CisJdTE2CWlvZmx0OworCXUxNglpb3BsaDsKKwl1MTYJaW9wbHQ7CisJdTMyCWlpZGM7CisJdTMyCWljdGw7CisJdTMyCWlmY3BwOworCXU4CXBhZDVbMHg0XTsKKwl1MTYJbWZhYzA7CisJdTE2CW1mYWMxOworCXUxNgltZmFjMjsKKwl1MTYJbWZhYzM7CisJdTE2CW1mYWM0OworCXUxNgltZmFjNTsKKwl1MTYJbWZhYzY7CisJdTE2CW1mYWM3OworCXUxNglpZmNmaDsKKwl1MTYJaWZjaHQ7CisJdTgJcGFkNlsweDRdOworCXUzMglpaWZtYzsKKwl1MzIJaW9kYjsKKwl1MzIJaW9kYmM7CisJdTMyCWlmYmFsOworCXUzMglpZmJhaDsKKwl1MzIJaWZzaXo7CisJdTMyCWlzcGQwOworCXUzMglpc3BkMTsKKwl1MzIJaXNwZDI7CisJdTMyCWlzcGQzOworCXUzMglpaGlwbDsKKwl1MzIJaWhpcGg7CisJdTMyCWlob3BsOworCXUzMglpaG9waDsKKwl1MzIJaWlpcGw7CisJdTMyCWlpaXBoOworCXUzMglpaW9wbDsKKwl1MzIJaWlvcGg7CisJdTMyCWlmY3BsOworCXUzMglpZmNwaDsKKwl1OAlwYWQ3WzB4OF07CisJdTMyCWlvcHQ7Cit9OworCisjZW5kaWYgLyogX1BQQzQ0MFNQRV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvcHBjNHh4L3hvci5oIGIvZHJpdmVycy9kbWEvcHBjNHh4L3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWQ3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9wcGM0eHgveG9yLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiA0NDBTUGUncyBYT1IgZW5naW5lcyBzdXBwb3J0IGhlYWRlciBmaWxlCisgKgorICogMjAwNi0yMDA5IChDKSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLgorICoKKyAqIEF1dGhvcjogWXVyaSBUaWtob25vdiA8eXVyQGVtY3JhZnQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybSBvZiAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoZSBwcm9ncmFtIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9QUEM0NDBTUEVfWE9SX0gKKyNkZWZpbmUgX1BQQzQ0MFNQRV9YT1JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogTnVtYmVyIG9mIFhPUiBlbmdpbmVzIGF2YWlsYWJsZSBvbiB0aGUgY29udG9sbGVyICovCisjZGVmaW5lIFhPUl9FTkdJTkVTX05VTQkJMQorCisvKiBOdW1iZXIgb2Ygb3BlcmFuZHMgc3VwcG9ydGVkIGluIHRoZSBoL3cgKi8KKyNkZWZpbmUgWE9SX01BWF9PUFMJCTE2CisKKy8qCisgKiBYT1IgQ29tbWFuZCBCbG9jayBDb250cm9sIFJlZ2lzdGVyIGJpdHMKKyAqLworI2RlZmluZSBYT1JfQ0JDUl9MTktfQklUICAgICAgICAoMTw8MzEpIC8qIGxpbmsgcHJlc2VudCAqLworI2RlZmluZSBYT1JfQ0JDUl9UR1RfQklUICAgICAgICAoMTw8MzApIC8qIHRhcmdldCBwcmVzZW50ICovCisjZGVmaW5lIFhPUl9DQkNSX0NCQ0VfQklUICAgICAgICgxPDwyOSkgLyogY29tbWFuZCBibG9jayBjb21wZXRlIGVuYWJsZSAqLworI2RlZmluZSBYT1JfQ0JDUl9STlpFX0JJVCAgICAgICAoMTw8MjgpIC8qIHJlc3VsdCBub3QgemVybyBlbmFibGUgKi8KKyNkZWZpbmUgWE9SX0NCQ1JfWE5PUl9CSVQgICAgICAgKDE8PDE1KSAvKiBYT1IvWE5PUiAqLworI2RlZmluZSBYT1JfQ0RDUl9PQUNfTVNLICAgICAgICAoMHg3RikgIC8qIG9wZXJhbmQgYWRkcmVzcyBjb3VudCAqLworCisvKgorICogWE9SQ29yZSBTdGF0dXMgUmVnaXN0ZXIgYml0cworICovCisjZGVmaW5lIFhPUl9TUl9YQ1BfQklUCQkoMTw8MzEpCS8qIGNvcmUgcHJvY2Vzc2luZyAqLworI2RlZmluZSBYT1JfU1JfSUNCX0JJVAkJKDE8PDE3KQkvKiBpbnZhbGlkIENCICovCisjZGVmaW5lIFhPUl9TUl9JQ19CSVQJCSgxPDwxNikJLyogaW52YWxpZCBjb21tYW5kICovCisjZGVmaW5lIFhPUl9TUl9JUEVfQklUCQkoMTw8MTUpCS8qIGludGVybmFsIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBYT1JfU1JfUk5aX0JJVAkJKDE8PDIpCS8qIHJlc3VsdCBub3QgWmVybyAqLworI2RlZmluZSBYT1JfU1JfQ0JDX0JJVAkJKDE8PDEpCS8qIENCIGNvbXBsZXRlICovCisjZGVmaW5lIFhPUl9TUl9DQkxDX0JJVAkJKDE8PDApCS8qIENCIGxpc3QgY29tcGxldGUgKi8KKworLyoKKyAqIFhPUkNvcmUgQ29udHJvbCBTZXQgYW5kIFJlc2V0IFJlZ2lzdGVyIGJpdHMKKyAqLworI2RlZmluZSBYT1JfQ1JTUl9YQVNSX0JJVAkoMTw8MzEpCS8qIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgWE9SX0NSU1JfWEFFX0JJVAkoMTw8MzApCS8qIGVuYWJsZSAqLworI2RlZmluZSBYT1JfQ1JTUl9SQ0JFX0JJVAkoMTw8MjkpCS8qIHJlZmV0Y2ggQ0IgZW5hYmxlICovCisjZGVmaW5lIFhPUl9DUlNSX1BBVVNfQklUCSgxPDwyOCkJLyogcGF1c2UgKi8KKyNkZWZpbmUgWE9SX0NSU1JfNjRCQV9CSVQJKDE8PDI3KSAvKiA2NC8zMiBDQiBmb3JtYXQgKi8KKyNkZWZpbmUgWE9SX0NSU1JfQ0xQX0JJVAkoMTw8MjUpCS8qIGNvbnRpbnVlIGxpc3QgcHJvY2Vzc2luZyAqLworCisvKgorICogWE9SQ29yZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgWE9SX0lFX0lDQklFX0JJVAkoMTw8MTcpCS8qIEludmFsaWQgQ29tbWFuZCBCbG9jayBJUlEgRW5hYmxlICovCisjZGVmaW5lIFhPUl9JRV9JQ0lFX0JJVAkJKDE8PDE2KQkvKiBJbnZhbGlkIENvbW1hbmQgSVJRIEVuYWJsZSAqLworI2RlZmluZSBYT1JfSUVfUlBUSUVfQklUCSgxPDwxNCkJLyogUmVhZCBQTEIgVGltZW91dCBFcnJvciBJUlEgRW5hYmxlICovCisjZGVmaW5lIFhPUl9JRV9DQkNJRV9CSVQJKDE8PDEpCS8qIENCIGNvbXBsZXRlIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgWE9SX0lFX0NCTENJX0JJVAkoMTw8MCkJLyogQ0IgbGlzdCBjb21wbGV0ZSBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qCisgKiBYT1IgQWNjZWxlcmF0b3IgZW5naW5lIENvbW1hbmQgQmxvY2sgVHlwZQorICovCitzdHJ1Y3QgeG9yX2NiIHsKKwkvKgorCSAqIEJhc2ljIDY0LWJpdCBmb3JtYXQgWE9SIENCIChUYWJsZSAxOS0xLCBwLjQ2MywgNDQwc3BlX3VtXzFfMjIucGRmKQorCSAqLworCXUzMgljYmM7CQkvKiBjb250cm9sICovCisJdTMyCWNiYmM7CQkvKiBieXRlIGNvdW50ICovCisJdTMyCWNiczsJCS8qIHN0YXR1cyAqLworCXU4CXBhZDBbNF07CS8qIHJlc2VydmVkICovCisJdTMyCWNidGFoOwkJLyogdGFyZ2V0IGFkZHJlc3MgaGlnaCAqLworCXUzMgljYnRhbDsJCS8qIHRhcmdldCBhZGRyZXNzIGxvdyAqLworCXUzMgljYmxhaDsJCS8qIGxpbmsgYWRkcmVzcyBoaWdoICovCisJdTMyCWNibGFsOwkJLyogbGluayBhZGRyZXNzIGxvdyAqLworCXN0cnVjdCB7CisJCXUzMiBoOworCQl1MzIgbDsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBvcHNbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBYT1IgaGFyZHdhcmUgcmVnaXN0ZXJzIFRhYmxlIDE5LTMsIFVNIDEuMjIKKyAqLworc3RydWN0IHhvcl9yZWdzIHsKKwl1MzIJb3BfYXJbMTZdWzJdOwkvKiBvcGVyYW5kIGFkZHJlc3NbMF0taGlnaCxbMV0tbG93IHJlZ2lzdGVycyAqLworCXU4CXBhZDBbMzUyXTsJLyogcmVzZXJ2ZWQgKi8KKwl1MzIJY2JjcjsJCS8qIENCIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwl1MzIJY2JiY3I7CQkvKiBDQiBieXRlIGNvdW50IHJlZ2lzdGVyICovCisJdTMyCWNic3I7CQkvKiBDQiBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1OAlwYWQxWzRdOwkvKiByZXNlcnZlZCAqLworCXUzMgljYnRhaHI7CQkvKiBvcGVyYW5kIHRhcmdldCBhZGRyZXNzIGhpZ2ggcmVnaXN0ZXIgKi8KKwl1MzIJY2J0YWxyOwkJLyogb3BlcmFuZCB0YXJnZXQgYWRkcmVzcyBsb3cgcmVnaXN0ZXIgKi8KKwl1MzIJY2JsYWhyOwkJLyogQ0IgbGluayBhZGRyZXNzIGhpZ2ggcmVnaXN0ZXIgKi8KKwl1MzIJY2JsYWxyOwkJLyogQ0IgbGluayBhZGRyZXNzIGxvdyByZWdpc3RlciAqLworCXUzMgljcnNyOwkJLyogY29udHJvbCBzZXQgcmVnaXN0ZXIgKi8KKwl1MzIJY3JycjsJCS8qIGNvbnRyb2wgcmVzZXQgcmVnaXN0ZXIgKi8KKwl1MzIJY2NiYWhyOwkJLyogY3VycmVudCBDQiBhZGRyZXNzIGhpZ2ggcmVnaXN0ZXIgKi8KKwl1MzIJY2NiYWxyOwkJLyogY3VycmVudCBDQiBhZGRyZXNzIGxvdyByZWdpc3RlciAqLworCXUzMglwbGJyOwkJLyogUExCIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwl1MzIJaWVyOwkJLyogaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLworCXUzMglwZWNyOwkJLyogcGFyaXR5IGVycm9yIGNvdW50IHJlZ2lzdGVyICovCisJdTMyCXNyOwkJLyogc3RhdHVzIHJlZ2lzdGVyICovCisJdTMyCXJldmlkcjsJCS8qIHJldmlzaW9uIElEIHJlZ2lzdGVyICovCit9OworCisjZW5kaWYgLyogX1BQQzQ0MFNQRV9YT1JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggMDM0ZWNmMC4uMmU0YTU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC04MCwxNyArODAsMTcgQEAKIAl1bnNpZ25lZCBzaG9ydCBkbWFvcjsKIAogCXNoX2RtYWVfY3RsX3N0b3AoaWQpOwotCWRtYW9yID0gKGRtYW9yX3JlYWRfcmVnKGlkKXxETUFPUl9JTklUKTsKKwlkbWFvciA9IGRtYW9yX3JlYWRfcmVnKGlkKSB8IERNQU9SX0lOSVQ7CiAKIAlkbWFvcl93cml0ZV9yZWcoaWQsIGRtYW9yKTsKLQlpZiAoKGRtYW9yX3JlYWRfcmVnKGlkKSAmIChETUFPUl9BRSB8IERNQU9SX05NSUYpKSkgeworCWlmIChkbWFvcl9yZWFkX3JlZyhpZCkgJiAoRE1BT1JfQUUgfCBETUFPUl9OTUlGKSkgewogCQlwcl93YXJuaW5nKEtFUk5fRVJSICJkbWEtc2g6IENhbid0IGluaXRpYWxpemUgRE1BT1IuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtYWVfaXNfaWRsZShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIGludCBkbWFlX2lzX2J1c3koc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKIHsKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7CiAJaWYgKGNoY3IgJiBDSENSX0RFKSB7CkBAIC0xMTAsMTUgKzExMCwxNCBAQAogewogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LnNhciwgU0FSKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwKLQkJKGh3LnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbikpLCBUQ1IpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc3RhcnQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKIHsKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7CiAKLQljaGNyIHw9IChDSENSX0RFfENIQ1JfSUUpOworCWNoY3IgfD0gQ0hDUl9ERSB8IENIQ1JfSUU7CiAJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7CiB9CiAKQEAgLTEzMiw3ICsxMzEsNyBAQAogCiBzdGF0aWMgaW50IGRtYWVfc2V0X2NoY3Ioc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTMyIHZhbCkKIHsKLQlpbnQgcmV0ID0gZG1hZV9pc19pZGxlKHNoX2NoYW4pOworCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7CiAJLyogV2hlbiBETUEgd2FzIHdvcmtpbmcsIGNhbiBub3Qgc2V0IGRhdGEgdG8gQ0hDUiAqLwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNDksNyArMTQ4LDcgQEAKIHsKIAl1MzIgYWRkcjsKIAlpbnQgc2hpZnQgPSAwOwotCWludCByZXQgPSBkbWFlX2lzX2lkbGUoc2hfY2hhbik7CisJaW50IHJldCA9IGRtYWVfaXNfYnVzeShzaF9jaGFuKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAkJbmV3ID0gc2hfZG1hZV9nZXRfZGVzYyhzaF9jaGFuKTsKIAkJaWYgKCFuZXcpIHsKIAkJCWRldl9lcnIoc2hfY2hhbi0+ZGV2LAotCQkJCQkiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7CisJCQkJIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiIpOwogCQkJZ290byBlcnJfZ2V0X2Rlc2M7CiAJCX0KIApAQCAtMzg4LDcgKzM4Nyw3IEBACiAJc3RydWN0IHNoX2RtYWVfcmVncyBodzsKIAogCS8qIERNQSB3b3JrIGNoZWNrICovCi0JaWYgKGRtYWVfaXNfaWRsZShzaF9jaGFuKSkKKwlpZiAoZG1hZV9pc19idXN5KHNoX2NoYW4pKQogCQlyZXR1cm47CiAKIAkvKiBGaW5kIHRoZSBmaXJzdCB1bi10cmFuc2ZlciBkZXNjaXB0b3IgKi8KQEAgLTQ5Nyw4ICs0OTYsOSBAQAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSAoc3RydWN0IHNoX2RtYWVfY2hhbiAqKWRhdGE7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYywgKmN1cl9kZXNjID0gTlVMTDsKIAl1MzIgc2FyX2J1ZiA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgU0FSKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywKLQkJCQkJJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7CisJCQkJICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgewogCQlpZiAoKGRlc2MtPmh3LnNhciArIGRlc2MtPmh3LnRjcikgPT0gc2FyX2J1ZikgewogCQkJY3VyX2Rlc2MgPSBkZXNjOwogCQkJYnJlYWs7CkBAIC01NDMsOCArNTQzLDggQEAKIAkvKiBhbGxvYyBjaGFubmVsICovCiAJbmV3X3NoX2NoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfZG1hZV9jaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfc2hfY2hhbikgewotCQlkZXZfZXJyKHNoZGV2LT5jb21tb24uZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgIgotCQkJCSJkbWEgY2hhbm5lbHMhXG4iKTsKKwkJZGV2X2VycihzaGRldi0+Y29tbW9uLmRldiwKKwkJCSJObyBmcmVlIG1lbW9yeSBmb3IgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01ODYsOCArNTg2LDggQEAKIAkJCSJzaC1kbWFlJWQiLCBuZXdfc2hfY2hhbi0+aWQpOwogCiAJLyogc2V0IHVwIGNoYW5uZWwgaXJxICovCi0JZXJyID0gcmVxdWVzdF9pcnEoaXJxLCAmc2hfZG1hZV9pbnRlcnJ1cHQsCi0JCWlycWZsYWdzLCBuZXdfc2hfY2hhbi0+ZGV2X2lkLCBuZXdfc2hfY2hhbik7CisJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCAmc2hfZG1hZV9pbnRlcnJ1cHQsIGlycWZsYWdzLAorCQkJICBuZXdfc2hfY2hhbi0+ZGV2X2lkLCBuZXdfc2hfY2hhbik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKHNoZGV2LT5jb21tb24uZGV2LCAiRE1BIGNoYW5uZWwgJWQgcmVxdWVzdF9pcnEgZXJyb3IgIgogCQkJIndpdGggcmV0dXJuICVkXG4iLCBpZCwgZXJyKTsKQEAgLTY3Niw2ICs2NzYsOCBAQAogCXNoZGV2LT5jb21tb24uZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gc2hfZG1hZV9pc19jb21wbGV0ZTsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gc2hfZG1hZV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKIAlzaGRldi0+Y29tbW9uLmRldiA9ICZwZGV2LT5kZXY7CisJLyogRGVmYXVsdCB0cmFuc2ZlciBzaXplIG9mIDMyIGJ5dGVzIHJlcXVpcmVzIDMyLWJ5dGUgYWxpZ25tZW50ICovCisJc2hkZXYtPmNvbW1vbi5jb3B5X2FsaWduID0gNTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCiAJLyogTm9uIE1peCBJUlEgbW9kZSBTSDc3MjIvU0g3NzMwIGV0Yy4uLiAqLwpAQCAtNjg4LDggKzY5MCw4IEBACiAJfQogCiAJZm9yIChlY250ID0gMCA7IGVjbnQgPCBBUlJBWV9TSVpFKGVpcnEpOyBlY250KyspIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEoZWlycVtlY250XSwgc2hfZG1hZV9lcnIsCi0JCQlpcnFmbGFncywgIkRNQUMgQWRkcmVzcyBFcnJvciIsIHNoZGV2KTsKKwkJZXJyID0gcmVxdWVzdF9pcnEoZWlycVtlY250XSwgc2hfZG1hZV9lcnIsIGlycWZsYWdzLAorCQkJCSAgIkRNQUMgQWRkcmVzcyBFcnJvciIsIHNoZGV2KTsKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRE1BIGRldmljZSByZXF1ZXN0X2lycSIKIAkJCQkiZXJyb3IgKGlycSAlZCkgd2l0aCByZXR1cm4gJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCAyYjRiYzE1Li42MGI4MWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTM1LDE1ICszNSwxNSBAQAogCiBzdHJ1Y3Qgc2hfZG1hZV9jaGFuIHsKIAlkbWFfY29va2llX3QgY29tcGxldGVkX2Nvb2tpZTsJLyogVGhlIG1heGltdW0gY29va2llIGNvbXBsZXRlZCAqLwotCXNwaW5sb2NrX3QgZGVzY19sb2NrOwkJCS8qIERlc2NyaXB0b3Igb3BlcmF0aW9uIGxvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxkX3F1ZXVlOwkJLyogTGluayBkZXNjcmlwdG9ycyBxdWV1ZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGRfZnJlZTsJCS8qIExpbmsgZGVzY3JpcHRvcnMgZnJlZSAqLwotCXN0cnVjdCBkbWFfY2hhbiBjb21tb247CQkJLyogRE1BIGNvbW1vbiBjaGFubmVsICovCi0Jc3RydWN0IGRldmljZSAqZGV2OwkJCQkvKiBDaGFubmVsIGRldmljZSAqLworCXNwaW5sb2NrX3QgZGVzY19sb2NrOwkJLyogRGVzY3JpcHRvciBvcGVyYXRpb24gbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGRfcXVldWU7CS8qIExpbmsgZGVzY3JpcHRvcnMgcXVldWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxkX2ZyZWU7CS8qIExpbmsgZGVzY3JpcHRvcnMgZnJlZSAqLworCXN0cnVjdCBkbWFfY2hhbiBjb21tb247CQkvKiBETUEgY29tbW9uIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CQkvKiBDaGFubmVsIGRldmljZSAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwkvKiBUYXNrbGV0ICovCi0JaW50IGRlc2NzX2FsbG9jYXRlZDsJCQkvKiBkZXNjIGNvdW50ICovCisJaW50IGRlc2NzX2FsbG9jYXRlZDsJCS8qIGRlc2MgY291bnQgKi8KIAlpbnQgaWQ7CQkJCS8qIFJhdyBpZCBvZiB0aGlzIGNoYW5uZWwgKi8KLQljaGFyIGRldl9pZFsxNl07CS8qIHVuaXF1ZSBuYW1lIHBlciBETUFDIG9mIGNoYW5uZWwgKi8KKwljaGFyIGRldl9pZFsxNl07CQkvKiB1bmlxdWUgbmFtZSBwZXIgRE1BQyBvZiBjaGFubmVsICovCiAKIAkvKiBTZXQgY2hjciAqLwogCWludCAoKnNldF9jaGNyKShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90eHg5ZG1hYy5jIGIvZHJpdmVycy9kbWEvdHh4OWRtYWMuYwppbmRleCBmYjZiYjY0Li4zZWJjNjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90eHg5ZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL3R4eDlkbWFjLmMKQEAgLTEzMTMsNyArMTMxMyw3IEBACiAKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHR4eDlkbWFjX2Rldl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdHh4OWRtYWNfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZF9ub2lycSA9IHR4eDlkbWFjX3N1c3BlbmRfbm9pcnEsCiAJLnJlc3VtZV9ub2lycSA9IHR4eDlkbWFjX3Jlc3VtZV9ub2lycSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCA1ZmRkNmRhLi5kZjViNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTEzLDYgKzEzLDggQEAKIHN0YXRpYyBpbnQgZWNjX2VuYWJsZV9vdmVycmlkZTsKIG1vZHVsZV9wYXJhbShlY2NfZW5hYmxlX292ZXJyaWRlLCBpbnQsIDA2NDQpOwogCitzdGF0aWMgc3RydWN0IG1zciAqbXNyczsKKwogLyogTG9va3VwIHRhYmxlIGZvciBhbGwgcG9zc2libGUgTUMgY29udHJvbCBpbnN0YW5jZXMgKi8KIHN0cnVjdCBhbWQ2NF9wdnQ7CiBzdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpX2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CkBAIC0yNDk1LDggKzI0OTcsNyBAQAogc3RhdGljIGJvb2wgYW1kNjRfbmJfbWNlX2JhbmtfZW5hYmxlZF9vbl9ub2RlKGludCBuaWQpCiB7CiAJY3B1bWFza192YXJfdCBtYXNrOwotCXN0cnVjdCBtc3IgKm1zcnM7Ci0JaW50IGNwdSwgbmJlLCBpZHggPSAwOworCWludCBjcHUsIG5iZTsKIAlib29sIHJldCA9IGZhbHNlOwogCiAJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJm1hc2ssIEdGUF9LRVJORUwpKSB7CkBAIC0yNTA3LDMyICsyNTA4LDIyIEBACiAKIAlnZXRfY3B1c19vbl90aGlzX2RjdF9jcHVtYXNrKG1hc2ssIG5pZCk7CiAKLQltc3JzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1zcikgKiBjcHVtYXNrX3dlaWdodChtYXNrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtc3JzKSB7Ci0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICIlczogZXJyb3IgYWxsb2NhdGluZyBtc3JzXG4iLAotCQkJICAgICAgX19mdW5jX18pOwotCQlmcmVlX2NwdW1hc2tfdmFyKG1hc2spOwotCQkgcmV0dXJuIGZhbHNlOwotCX0KLQogCXJkbXNyX29uX2NwdXMobWFzaywgTVNSX0lBMzJfTUNHX0NUTCwgbXNycyk7CiAKIAlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKSB7Ci0JCW5iZSA9IG1zcnNbaWR4XS5sICYgSzhfTVNSX01DR0NUTF9OQkU7CisJCXN0cnVjdCBtc3IgKnJlZyA9IHBlcl9jcHVfcHRyKG1zcnMsIGNwdSk7CisJCW5iZSA9IHJlZy0+bCAmIEs4X01TUl9NQ0dDVExfTkJFOwogCiAJCWRlYnVnZjAoImNvcmU6ICV1LCBNQ0dfQ1RMOiAweCVsbHgsIE5CIE1TUiBpcyAlc1xuIiwKLQkJCWNwdSwgbXNyc1tpZHhdLnEsCisJCQljcHUsIHJlZy0+cSwKIAkJCShuYmUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CiAKIAkJaWYgKCFuYmUpCiAJCQlnb3RvIG91dDsKLQotCQlpZHgrKzsKIAl9CiAJcmV0ID0gdHJ1ZTsKIAogb3V0OgotCWtmcmVlKG1zcnMpOwogCWZyZWVfY3B1bWFza192YXIobWFzayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1NDAsOCArMjUzMSw3IEBACiBzdGF0aWMgaW50IGFtZDY0X3RvZ2dsZV9lY2NfZXJyX3JlcG9ydGluZyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGJvb2wgb24pCiB7CiAJY3B1bWFza192YXJfdCBjbWFzazsKLQlzdHJ1Y3QgbXNyICptc3JzID0gTlVMTDsKLQlpbnQgY3B1LCBpZHggPSAwOworCWludCBjcHU7CiAKIAlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmY21hc2ssIEdGUF9LRVJORUwpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICIlczogZXJyb3IgYWxsb2NhdGluZyBtYXNrXG4iLApAQCAtMjU1MSwzNCArMjU0MSwyNyBAQAogCiAJZ2V0X2NwdXNfb25fdGhpc19kY3RfY3B1bWFzayhjbWFzaywgcHZ0LT5tY19ub2RlX2lkKTsKIAotCW1zcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXNyKSAqIGNwdW1hc2tfd2VpZ2h0KGNtYXNrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtc3JzKSB7Ci0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICIlczogZXJyb3IgYWxsb2NhdGluZyBtc3JzXG4iLAotCQkJICAgICBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCXJkbXNyX29uX2NwdXMoY21hc2ssIE1TUl9JQTMyX01DR19DVEwsIG1zcnMpOwogCiAJZm9yX2VhY2hfY3B1KGNwdSwgY21hc2spIHsKIAorCQlzdHJ1Y3QgbXNyICpyZWcgPSBwZXJfY3B1X3B0cihtc3JzLCBjcHUpOworCiAJCWlmIChvbikgewotCQkJaWYgKG1zcnNbaWR4XS5sICYgSzhfTVNSX01DR0NUTF9OQkUpCisJCQlpZiAocmVnLT5sICYgSzhfTVNSX01DR0NUTF9OQkUpCiAJCQkJcHZ0LT5mbGFncy5lY2NfcmVwb3J0ID0gMTsKIAotCQkJbXNyc1tpZHhdLmwgfD0gSzhfTVNSX01DR0NUTF9OQkU7CisJCQlyZWctPmwgfD0gSzhfTVNSX01DR0NUTF9OQkU7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogVHVybiBvZmYgRUNDIHJlcG9ydGluZyBvbmx5IHdoZW4gaXQgd2FzIG9mZiBiZWZvcmUKIAkJCSAqLwogCQkJaWYgKCFwdnQtPmZsYWdzLmVjY19yZXBvcnQpCi0JCQkJbXNyc1tpZHhdLmwgJj0gfks4X01TUl9NQ0dDVExfTkJFOworCQkJCXJlZy0+bCAmPSB+SzhfTVNSX01DR0NUTF9OQkU7CiAJCX0KLQkJaWR4Kys7CiAJfQogCXdybXNyX29uX2NwdXMoY21hc2ssIE1TUl9JQTMyX01DR19DVEwsIG1zcnMpOwogCi0Ja2ZyZWUobXNycyk7CiAJZnJlZV9jcHVtYXNrX3ZhcihjbWFzayk7CiAKIAlyZXR1cm4gMDsKQEAgLTMwMzYsNiArMzAxOSw4IEBACiAJaWYgKGNhY2hlX2s4X25vcnRoYnJpZGdlcygpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCW1zcnMgPSBtc3JzX2FsbG9jKCk7CisKIAllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ2NF9wY2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMzA3MSw2ICszMDU2LDkgQEAKIAkJZWRhY19wY2lfcmVsZWFzZV9nZW5lcmljX2N0bChhbWQ2NF9jdGxfcGNpKTsKIAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CisKKwltc3JzX2ZyZWUobXNycyk7CisJbXNycyA9IE5VTEw7CiB9CiAKIG1vZHVsZV9pbml0KGFtZDY0X2VkYWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKaW5kZXggYzY5M2ZjYy4uOGZjOTFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwpAQCAtMjk5LDYgKzI5OSwxMiBAQAogCWlmICghaGFuZGxlX2Vycm9ycykKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBHQVJUIFRMQiBlcnJvciByZXBvcnRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gQmFpbCBvdXQgZWFybHkuCisJICovCisJaWYgKFRMQl9FUlJPUihlYykgJiYgIXJlcG9ydF9nYXJ0X2Vycm9ycykKKwkJcmV0dXJuOworCiAJcHJfZW1lcmcoIiBOb3J0aGJyaWRnZSBFcnJvciwgbm9kZSAlZCIsIG5vZGVfaWQpOwogCiAJLyoKQEAgLTMxMCwxMCArMzE2LDkgQEAKIAkJaWYgKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0VSUl9DUFVfVkFMKQogCQkJcHJfY29udCgiLCBjb3JlOiAldVxuIiwgKHU4KShyZWdzLT5uYnNoICYgMHhmKSk7CiAJfSBlbHNlIHsKLQkJcHJfY29udCgiLCBjb3JlOiAlZFxuIiwgaWxvZzIoKHJlZ3MtPm5ic2ggJiAweGYpKSk7CisJCXByX2NvbnQoIiwgY29yZTogJWRcbiIsIGZscygocmVncy0+bmJzaCAmIDB4ZikgLSAxKSk7CiAJfQogCi0KIAlwcl9lbWVyZygiJXMuXG4iLCBFWFRfRVJSX01TRyh4ZWMpKTsKIAogCWlmIChCVVNfRVJST1IoZWMpICYmIG5iX2J1c19kZWNvZGVyKQpAQCAtMzMzLDIxICszMzgsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGFtZF9kZWNvZGVfZXJyX2NvZGUodW5zaWduZWQgaW50IGVjKQogewogCWlmIChUTEJfRVJST1IoZWMpKSB7Ci0JCS8qCi0JCSAqIEdBUlQgZXJyb3JzIGFyZSBpbnRlbmRlZCB0byBoZWxwIGdyYXBoaWNzIGRyaXZlciBkZXZlbG9wZXJzCi0JCSAqIHRvIGRldGVjdCBiYWQgR0FSVCBQVEVzLiBJdCBpcyByZWNvbW1lbmRlZCBieSBBTUQgdG8gZGlzYWJsZQotCQkgKiBHQVJUIHRhYmxlIHdhbGsgZXJyb3IgcmVwb3J0aW5nIGJ5IGRlZmF1bHRbMV0gKGN1cnJlbnRseQotCQkgKiBiZWluZyBkaXNhYmxlZCBpbiBtY2VfY3B1X3F1aXJrcygpKSBhbmQgYWNjb3JkaW5nIHRvIHRoZQotCQkgKiBjb21tZW50IGluIG1jZV9jcHVfcXVpcmtzKCksIHN1Y2ggR0FSVCBlcnJvcnMgY2FuIGJlCi0JCSAqIGluY29ycmVjdGx5IHRyaWdnZXJlZC4gV2UgbWF5IHNlZSB0aGVzZSBlcnJvcnMgYW55d2F5IGFuZAotCQkgKiB1bmxlc3MgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLCB0aGV5IHdvbid0IGJlIHJlcG9ydGVkLgotCQkgKgotCQkgKiBbMV0gc2VjdGlvbiAxMy4xMC4xIG9uIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXJzIEd1aWRlIGZvcgotCQkgKiAgICAgQU1EIE5QVCBmYW1pbHkgMEZoIHByb2Nlc3NvcnMKLQkJICovCi0JCWlmICghcmVwb3J0X2dhcnRfZXJyb3JzKQotCQkJcmV0dXJuOwotCiAJCXByX2VtZXJnKCIgVHJhbnNhY3Rpb246ICVzLCBDYWNoZSBMZXZlbCAlc1xuIiwKIAkJCSBUVF9NU0coZWMpLCBMTF9NU0coZWMpKTsKIAl9IGVsc2UgaWYgKE1FTV9FUlJPUihlYykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jCmluZGV4IDIyZGIwNWEuLjc3ODVkOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYwpAQCAtOSw2ICs5LDExIEBACiAgKiBJbnRlbCA1MTAwWCBDaGlwc2V0IE1lbW9yeSBDb250cm9sbGVyIEh1YiAoTUNIKSAtIERhdGFzaGVldAogICogICAgICBodHRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9jaGlwc2V0cy9kYXRhc2h0cy8zMTgzNzgucGRmCiAgKgorICogVGhlIGludGVsIDUxMDAgaGFzIHR3byBpbmRlcGVuZGVudCBjaGFubmVscy4gRURBQyBjb3JlIGN1cnJlbnRseQorICogY2FuIG5vdCByZWZsZWN0IHRoaXMgY29uZmlndXJhdGlvbiBzbyBpbnN0ZWFkIHRoZSBjaGlwLXNlbGVjdAorICogcm93cyBmb3IgZWFjaCByZXNwZWN0aXZlIGNoYW5uZWwgYXJlIGxheWVkIG91dCBvbmUgYWZ0ZXIgYW5vdGhlciwKKyAqIHRoZSBmaXJzdCBoYWxmIGJlbG9uZ2luZyB0byBjaGFubmVsIDAsIHRoZSBzZWNvbmQgaGFsZiBiZWxvbmdpbmcKKyAqIHRvIGNoYW5uZWwgMS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI1LDYgKzMwLDggQEAKIAogLyogZGV2aWNlIDE2LCBmdW5jIDEgKi8KICNkZWZpbmUgSTUxMDBfTUMJCTB4NDAJLyogTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgCUk1MTAwX01DX1NDUkJFTl9NQVNLCSgxIDw8IDcpCisjZGVmaW5lIAlJNTEwMF9NQ19TQ1JCRE9ORV9NQVNLCSgxIDw8IDQpCiAjZGVmaW5lIEk1MTAwX01TCQkweDQ0CS8qIE1lbW9yeSBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgSTUxMDBfU1BEREFUQQkJMHg0OAkvKiBTZXJpYWwgUHJlc2VuY2UgRGV0ZWN0IFN0YXR1cyBSZWcgKi8KICNkZWZpbmUgSTUxMDBfU1BEQ01ECQkweDRjCS8qIFNlcmlhbCBQcmVzZW5jZSBEZXRlY3QgQ29tbWFuZCBSZWcgKi8KQEAgLTcyLDExICs3OSwyMSBAQAogCiAvKiBiaXQgZmllbGQgYWNjZXNzb3JzICovCiAKK3N0YXRpYyBpbmxpbmUgdTMyIGk1MTAwX21jX3NjcmJlbih1MzIgbWMpCit7CisJcmV0dXJuIG1jID4+IDcgJiAxOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBpNTEwMF9tY19lcnJkZXRlbih1MzIgbWMpCiB7CiAJcmV0dXJuIG1jID4+IDUgJiAxOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBpNTEwMF9tY19zY3JiZG9uZSh1MzIgbWMpCit7CisJcmV0dXJuIG1jID4+IDQgJiAxOworfQorCiBzdGF0aWMgaW5saW5lIHUxNiBpNTEwMF9zcGRkYXRhX3Jkbyh1MTYgYSkKIHsKIAlyZXR1cm4gYSA+PiAxNSAmIDE7CkBAIC0yNjUsNDIgKzI4Miw0MyBAQAogfQogCiAvKiBzb21lIGdlbmVyaWMgbGltaXRzICovCi0jZGVmaW5lIEk1MTAwX01BWF9SQU5LU19QRVJfQ1RMUgk2Ci0jZGVmaW5lIEk1MTAwX01BWF9DVExSUwkJCTIKKyNkZWZpbmUgSTUxMDBfTUFYX1JBTktTX1BFUl9DSEFOCTYKKyNkZWZpbmUgSTUxMDBfQ0hBTk5FTFMJCQkgICAgMgogI2RlZmluZSBJNTEwMF9NQVhfUkFOS1NfUEVSX0RJTU0JNAogI2RlZmluZSBJNTEwMF9ESU1NX0FERFJfTElORVMJCSg2IC0gMykJLyogNjQgYml0cyAvIDggYml0cyBwZXIgYnl0ZSAqLwotI2RlZmluZSBJNTEwMF9NQVhfRElNTV9TTE9UU19QRVJfQ1RMUgk0CisjZGVmaW5lIEk1MTAwX01BWF9ESU1NX1NMT1RTX1BFUl9DSEFOCTQKICNkZWZpbmUgSTUxMDBfTUFYX1JBTktfSU5URVJMRUFWRQk0CiAjZGVmaW5lIEk1MTAwX01BWF9ETUlSUwkJCTUKKyNkZWZpbmUgSTUxMDBfU0NSVUJfUkVGUkVTSF9SQVRFCSg1ICogNjAgKiBIWikKIAogc3RydWN0IGk1MTAwX3ByaXYgewogCS8qIHJhbmtzIG9uIGVhY2ggZGltbSAtLSAwIG1hcHMgdG8gbm90IHByZXNlbnQgLS0gb2J0YWluZWQgdmlhIFNQRCAqLwotCWludCBkaW1tX251bXJhbmtbSTUxMDBfTUFYX0NUTFJTXVtJNTEwMF9NQVhfRElNTV9TTE9UU19QRVJfQ1RMUl07CisJaW50IGRpbW1fbnVtcmFua1tJNTEwMF9DSEFOTkVMU11bSTUxMDBfTUFYX0RJTU1fU0xPVFNfUEVSX0NIQU5dOwogCiAJLyoKIAkgKiBtYWluYm9hcmQgY2hpcCBzZWxlY3QgbWFwIC0tIG1hcHMgaTUxMDAgY2hpcCBzZWxlY3RzIHRvCiAJICogRElNTSBzbG90IGNoaXAgc2VsZWN0cy4gIEluIHRoZSBjYXNlIG9mIG9ubHkgNCByYW5rcyBwZXIKLQkgKiBjb250cm9sbGVyLCB0aGUgbWFwcGluZyBpcyBmYWlybHkgb2J2aW91cyBidXQgbm90IHVuaXF1ZS4KLQkgKiB3ZSBtYXAgLTEgLT4gTkMgYW5kIGFzc3VtZSBib3RoIGNvbnRyb2xsZXJzIHVzZSB0aGUgc2FtZQorCSAqIGNoYW5uZWwsIHRoZSBtYXBwaW5nIGlzIGZhaXJseSBvYnZpb3VzIGJ1dCBub3QgdW5pcXVlLgorCSAqIHdlIG1hcCAtMSAtPiBOQyBhbmQgYXNzdW1lIGJvdGggY2hhbm5lbHMgdXNlIHRoZSBzYW1lCiAJICogbWFwLi4uCiAJICoKIAkgKi8KLQlpbnQgZGltbV9jc21hcFtJNTEwMF9NQVhfRElNTV9TTE9UU19QRVJfQ1RMUl1bSTUxMDBfTUFYX1JBTktTX1BFUl9ESU1NXTsKKwlpbnQgZGltbV9jc21hcFtJNTEwMF9NQVhfRElNTV9TTE9UU19QRVJfQ0hBTl1bSTUxMDBfTUFYX1JBTktTX1BFUl9ESU1NXTsKIAogCS8qIG1lbW9yeSBpbnRlcmxlYXZlIHJhbmdlICovCiAJc3RydWN0IHsKIAkJdTY0CSBsaW1pdDsKIAkJdW5zaWduZWQgd2F5WzJdOwotCX0gbWlyW0k1MTAwX01BWF9DVExSU107CisJfSBtaXJbSTUxMDBfQ0hBTk5FTFNdOwogCiAJLyogYWRqdXN0ZWQgbWVtb3J5IGludGVybGVhdmUgcmFuZ2UgcmVnaXN0ZXIgKi8KLQl1bnNpZ25lZCBhbWlyW0k1MTAwX01BWF9DVExSU107CisJdW5zaWduZWQgYW1pcltJNTEwMF9DSEFOTkVMU107CiAKIAkvKiBkaW1tIGludGVybGVhdmUgcmFuZ2UgKi8KIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCByYW5rW0k1MTAwX01BWF9SQU5LX0lOVEVSTEVBVkVdOwogCQl1NjQJIGxpbWl0OwotCX0gZG1pcltJNTEwMF9NQVhfQ1RMUlNdW0k1MTAwX01BWF9ETUlSU107CisJfSBkbWlyW0k1MTAwX0NIQU5ORUxTXVtJNTEwMF9NQVhfRE1JUlNdOwogCiAJLyogbWVtb3J5IHRlY2hub2xvZ3kgcmVnaXN0ZXJzLi4uICovCiAJc3RydWN0IHsKQEAgLTMxMCwzMCArMzI4LDMzIEBACiAJCXVuc2lnbmVkIG51bWJhbms7CS8qIDIgb3IgMyBsaW5lcyAqLwogCQl1bnNpZ25lZCBudW1yb3c7CS8qIDEzIC4uIDE2IGxpbmVzICovCiAJCXVuc2lnbmVkIG51bWNvbDsJLyogMTEgLi4gMTIgbGluZXMgKi8KLQl9IG10cltJNTEwMF9NQVhfQ1RMUlNdW0k1MTAwX01BWF9SQU5LU19QRVJfQ1RMUl07CisJfSBtdHJbSTUxMDBfQ0hBTk5FTFNdW0k1MTAwX01BWF9SQU5LU19QRVJfQ0hBTl07CiAKIAl1NjQgdG9sbTsJCS8qIHRvcCBvZiBsb3cgbWVtb3J5IGluIGJ5dGVzICovCi0JdW5zaWduZWQgcmFua3NwZXJjdGxyOwkvKiBudW1iZXIgb2YgcmFua3MgcGVyIGNvbnRyb2xsZXIgKi8KKwl1bnNpZ25lZCByYW5rc3BlcmNoYW47CS8qIG51bWJlciBvZiByYW5rcyBwZXIgY2hhbm5lbCAqLwogCiAJc3RydWN0IHBjaV9kZXYgKm1jOwkvKiBkZXZpY2UgMTYgZnVuYyAxICovCiAJc3RydWN0IHBjaV9kZXYgKmNoMG1tOwkvKiBkZXZpY2UgMjEgZnVuYyAwICovCiAJc3RydWN0IHBjaV9kZXYgKmNoMW1tOwkvKiBkZXZpY2UgMjIgZnVuYyAwICovCisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGk1MTAwX3NjcnViYmluZzsKKwlpbnQgc2NydWJfZW5hYmxlOwogfTsKIAotLyogbWFwIGEgcmFuay9jdGxyIHRvIGEgc2xvdCBudW1iZXIgb24gdGhlIG1haW5ib2FyZCAqLworLyogbWFwIGEgcmFuay9jaGFuIHRvIGEgc2xvdCBudW1iZXIgb24gdGhlIG1haW5ib2FyZCAqLwogc3RhdGljIGludCBpNTEwMF9yYW5rX3RvX3Nsb3QoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJICAgICAgaW50IGN0bHIsIGludCByYW5rKQorCQkJICAgICAgaW50IGNoYW4sIGludCByYW5rKQogewogCWNvbnN0IHN0cnVjdCBpNTEwMF9wcml2ICpwcml2ID0gbWNpLT5wdnRfaW5mbzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBJNTEwMF9NQVhfRElNTV9TTE9UU19QRVJfQ1RMUjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEk1MTAwX01BWF9ESU1NX1NMT1RTX1BFUl9DSEFOOyBpKyspIHsKIAkJaW50IGo7Ci0JCWNvbnN0IGludCBudW1yYW5rID0gcHJpdi0+ZGltbV9udW1yYW5rW2N0bHJdW2ldOworCQljb25zdCBpbnQgbnVtcmFuayA9IHByaXYtPmRpbW1fbnVtcmFua1tjaGFuXVtpXTsKIAogCQlmb3IgKGogPSAwOyBqIDwgbnVtcmFuazsgaisrKQogCQkJaWYgKHByaXYtPmRpbW1fY3NtYXBbaV1bal0gPT0gcmFuaykKLQkJCQlyZXR1cm4gaSAqIDIgKyBjdGxyOworCQkJCXJldHVybiBpICogMiArIGNoYW47CiAJfQogCiAJcmV0dXJuIC0xOwpAQCAtMzc0LDMyICszOTUsMzIgQEAKIAlyZXR1cm4gIm5vbmUiOwogfQogCi0vKiBjb252ZXJ0IGNzcm93IGluZGV4IGludG8gYSByYW5rIChwZXIgY29udHJvbGxlciAtLSAwLi41KSAqLworLyogY29udmVydCBjc3JvdyBpbmRleCBpbnRvIGEgcmFuayAocGVyIGNoYW5uZWwgLS0gMC4uNSkgKi8KIHN0YXRpYyBpbnQgaTUxMDBfY3Nyb3dfdG9fcmFuayhjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGludCBjc3JvdykKIHsKIAljb25zdCBzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CiAKLQlyZXR1cm4gY3Nyb3cgJSBwcml2LT5yYW5rc3BlcmN0bHI7CisJcmV0dXJuIGNzcm93ICUgcHJpdi0+cmFua3NwZXJjaGFuOwogfQogCi0vKiBjb252ZXJ0IGNzcm93IGluZGV4IGludG8gYSBjb250cm9sbGVyICgwLi4xKSAqLwotc3RhdGljIGludCBpNTEwMF9jc3Jvd190b19jbnRscihjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGludCBjc3JvdykKKy8qIGNvbnZlcnQgY3Nyb3cgaW5kZXggaW50byBhIGNoYW5uZWwgKDAuLjEpICovCitzdGF0aWMgaW50IGk1MTAwX2Nzcm93X3RvX2NoYW4oY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBpbnQgY3Nyb3cpCiB7CiAJY29uc3Qgc3RydWN0IGk1MTAwX3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOwogCi0JcmV0dXJuIGNzcm93IC8gcHJpdi0+cmFua3NwZXJjdGxyOworCXJldHVybiBjc3JvdyAvIHByaXYtPnJhbmtzcGVyY2hhbjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGk1MTAwX3JhbmtfdG9fY3Nyb3coY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSAgICBpbnQgY3RsciwgaW50IHJhbmspCisJCQkJICAgIGludCBjaGFuLCBpbnQgcmFuaykKIHsKIAljb25zdCBzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CiAKLQlyZXR1cm4gY3RsciAqIHByaXYtPnJhbmtzcGVyY3RsciArIHJhbms7CisJcmV0dXJuIGNoYW4gKiBwcml2LT5yYW5rc3BlcmNoYW4gKyByYW5rOwogfQogCiBzdGF0aWMgdm9pZCBpNTEwMF9oYW5kbGVfY2Uoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJICAgIGludCBjdGxyLAorCQkJICAgIGludCBjaGFuLAogCQkJICAgIHVuc2lnbmVkIGJhbmssCiAJCQkgICAgdW5zaWduZWQgcmFuaywKIAkJCSAgICB1bnNpZ25lZCBsb25nIHN5bmRyb21lLApAQCAtNDA3LDEyICs0MjgsMTIgQEAKIAkJCSAgICB1bnNpZ25lZCByYXMsCiAJCQkgICAgY29uc3QgY2hhciAqbXNnKQogewotCWNvbnN0IGludCBjc3JvdyA9IGk1MTAwX3JhbmtfdG9fY3Nyb3cobWNpLCBjdGxyLCByYW5rKTsKKwljb25zdCBpbnQgY3Nyb3cgPSBpNTEwMF9yYW5rX3RvX2Nzcm93KG1jaSwgY2hhbiwgcmFuayk7CiAKIAlwcmludGsoS0VSTl9FUlIKLQkJIkNFIGN0bHIgJWQsIGJhbmsgJXUsIHJhbmsgJXUsIHN5bmRyb21lIDB4JWx4LCAiCisJCSJDRSBjaGFuICVkLCBiYW5rICV1LCByYW5rICV1LCBzeW5kcm9tZSAweCVseCwgIgogCQkiY2FzICV1LCByYXMgJXUsIGNzcm93ICV1LCBsYWJlbCBcIiVzXCI6ICVzXG4iLAotCQljdGxyLCBiYW5rLCByYW5rLCBzeW5kcm9tZSwgY2FzLCByYXMsCisJCWNoYW4sIGJhbmssIHJhbmssIHN5bmRyb21lLCBjYXMsIHJhcywKIAkJY3Nyb3csIG1jaS0+Y3Nyb3dzW2Nzcm93XS5jaGFubmVsc1swXS5sYWJlbCwgbXNnKTsKIAogCW1jaS0+Y2VfY291bnQrKzsKQEAgLTQyMSw3ICs0NDIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBpNTEwMF9oYW5kbGVfdWUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJICAgIGludCBjdGxyLAorCQkJICAgIGludCBjaGFuLAogCQkJICAgIHVuc2lnbmVkIGJhbmssCiAJCQkgICAgdW5zaWduZWQgcmFuaywKIAkJCSAgICB1bnNpZ25lZCBsb25nIHN5bmRyb21lLApAQCAtNDI5LDIzICs0NTAsMjMgQEAKIAkJCSAgICB1bnNpZ25lZCByYXMsCiAJCQkgICAgY29uc3QgY2hhciAqbXNnKQogewotCWNvbnN0IGludCBjc3JvdyA9IGk1MTAwX3JhbmtfdG9fY3Nyb3cobWNpLCBjdGxyLCByYW5rKTsKKwljb25zdCBpbnQgY3Nyb3cgPSBpNTEwMF9yYW5rX3RvX2Nzcm93KG1jaSwgY2hhbiwgcmFuayk7CiAKIAlwcmludGsoS0VSTl9FUlIKLQkJIlVFIGN0bHIgJWQsIGJhbmsgJXUsIHJhbmsgJXUsIHN5bmRyb21lIDB4JWx4LCAiCisJCSJVRSBjaGFuICVkLCBiYW5rICV1LCByYW5rICV1LCBzeW5kcm9tZSAweCVseCwgIgogCQkiY2FzICV1LCByYXMgJXUsIGNzcm93ICV1LCBsYWJlbCBcIiVzXCI6ICVzXG4iLAotCQljdGxyLCBiYW5rLCByYW5rLCBzeW5kcm9tZSwgY2FzLCByYXMsCisJCWNoYW4sIGJhbmssIHJhbmssIHN5bmRyb21lLCBjYXMsIHJhcywKIAkJY3Nyb3csIG1jaS0+Y3Nyb3dzW2Nzcm93XS5jaGFubmVsc1swXS5sYWJlbCwgbXNnKTsKIAogCW1jaS0+dWVfY291bnQrKzsKIAltY2ktPmNzcm93c1tjc3Jvd10udWVfY291bnQrKzsKIH0KIAotc3RhdGljIHZvaWQgaTUxMDBfcmVhZF9sb2coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBpbnQgY3RsciwKK3N0YXRpYyB2b2lkIGk1MTAwX3JlYWRfbG9nKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgaW50IGNoYW4sCiAJCQkgICB1MzIgZmVyciwgdTMyIG5lcnIpCiB7CiAJc3RydWN0IGk1MTAwX3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gKGN0bHIpID8gcHJpdi0+Y2gxbW0gOiBwcml2LT5jaDBtbTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IChjaGFuKSA/IHByaXYtPmNoMW1tIDogcHJpdi0+Y2gwbW07CiAJdTMyIGR3OwogCXUzMiBkdzI7CiAJdW5zaWduZWQgc3luZHJvbWUgPSAwOwpAQCAtNDg0LDcgKzUwNSw3IEBACiAJCWVsc2UKIAkJCW1zZyA9IGk1MTAwX2Vycl9tc2cobmVycik7CiAKLQkJaTUxMDBfaGFuZGxlX2NlKG1jaSwgY3RsciwgYmFuaywgcmFuaywgc3luZHJvbWUsIGNhcywgcmFzLCBtc2cpOworCQlpNTEwMF9oYW5kbGVfY2UobWNpLCBjaGFuLCBiYW5rLCByYW5rLCBzeW5kcm9tZSwgY2FzLCByYXMsIG1zZyk7CiAJfQogCiAJaWYgKGk1MTAwX3ZhbGlkbG9nX25yZWNtZW12YWxpZChkdykpIHsKQEAgLTUwNiw3ICs1MjcsNyBAQAogCQllbHNlCiAJCQltc2cgPSBpNTEwMF9lcnJfbXNnKG5lcnIpOwogCi0JCWk1MTAwX2hhbmRsZV91ZShtY2ksIGN0bHIsIGJhbmssIHJhbmssIHN5bmRyb21lLCBjYXMsIHJhcywgbXNnKTsKKwkJaTUxMDBfaGFuZGxlX3VlKG1jaSwgY2hhbiwgYmFuaywgcmFuaywgc3luZHJvbWUsIGNhcywgcmFzLCBtc2cpOwogCX0KIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgSTUxMDBfVkFMSURMT0csIGR3KTsKQEAgLTUzNCw2ICs1NTUsODAgQEAKIAl9CiB9CiAKKy8qIFRoZSBpNTEwMCBjaGlwc2V0IHdpbGwgc2NydWIgdGhlIGVudGlyZSBtZW1vcnkgb25jZSwgdGhlbgorICogc2V0IGEgZG9uZSBiaXQuIENvbnRpbnVvdXMgc2NydWJiaW5nIGlzIGFjaGlldmVkIGJ5IGVucXVlaW5nCisgKiBkZWxheWVkIHdvcmsgdG8gYSB3b3JrcXVldWUsIGNoZWNraW5nIGV2ZXJ5IGZldyBtaW51dGVzIGlmCisgKiB0aGUgc2NydWJiaW5nIGhhcyBjb21wbGV0ZWQgYW5kIGlmIHNvIHJlaW5pdGlhdGluZyBpdC4KKyAqLworCitzdGF0aWMgdm9pZCBpNTEwMF9yZWZyZXNoX3NjcnViYmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqaTUxMDBfc2NydWJiaW5nID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkJICAgIHN0cnVjdCBkZWxheWVkX3dvcmssCisJCQkJCQkJICAgIHdvcmspOworCXN0cnVjdCBpNTEwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGk1MTAwX3NjcnViYmluZywKKwkJCQkJICAgICAgIHN0cnVjdCBpNTEwMF9wcml2LAorCQkJCQkgICAgICAgaTUxMDBfc2NydWJiaW5nKTsKKwl1MzIgZHc7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocHJpdi0+bWMsIEk1MTAwX01DLCAmZHcpOworCisJaWYgKHByaXYtPnNjcnViX2VuYWJsZSkgeworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwcml2LT5tYywgSTUxMDBfTUMsICZkdyk7CisKKwkJaWYgKGk1MTAwX21jX3NjcmJkb25lKGR3KSkgeworCQkJZHcgfD0gSTUxMDBfTUNfU0NSQkVOX01BU0s7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgZHcpOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgJmR3KTsKKwkJfQorCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmKHByaXYtPmk1MTAwX3NjcnViYmluZyksCisJCQkJICAgICAgSTUxMDBfU0NSVUJfUkVGUkVTSF9SQVRFKTsKKwl9Cit9CisvKgorICogVGhlIGJhbmR3aWR0aCBpcyBiYXNlZCBvbiBleHBlcmltZW50YXRpb24sIGZlZWwgZnJlZSB0byByZWZpbmUgaXQuCisgKi8KK3N0YXRpYyBpbnQgaTUxMDBfc2V0X3NjcnViX3JhdGUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSAgICAgICB1MzIgKmJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisJdTMyIGR3OworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgJmR3KTsKKwlpZiAoKmJhbmR3aWR0aCkgeworCQlwcml2LT5zY3J1Yl9lbmFibGUgPSAxOworCQlkdyB8PSBJNTEwMF9NQ19TQ1JCRU5fTUFTSzsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCYocHJpdi0+aTUxMDBfc2NydWJiaW5nKSwKKwkJCQkgICAgICBJNTEwMF9TQ1JVQl9SRUZSRVNIX1JBVEUpOworCX0gZWxzZSB7CisJCXByaXYtPnNjcnViX2VuYWJsZSA9IDA7CisJCWR3ICY9IH5JNTEwMF9NQ19TQ1JCRU5fTUFTSzsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmKHByaXYtPmk1MTAwX3NjcnViYmluZykpOworCX0KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgZHcpOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgJmR3KTsKKworCSpiYW5kd2lkdGggPSA1OTAwMDAwICogaTUxMDBfbWNfc2NyYmVuKGR3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk1MTAwX2dldF9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJCQl1MzIgKmJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisJdTMyIGR3OworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPm1jLCBJNTEwMF9NQywgJmR3KTsKKworCSpiYW5kd2lkdGggPSA1OTAwMDAwICogaTUxMDBfbWNfc2NyYmVuKGR3KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfZGV2aWNlX2Z1bmModW5zaWduZWQgdmVuZG9yLAogCQkJCQkgICB1bnNpZ25lZCBkZXZpY2UsCiAJCQkJCSAgIHVuc2lnbmVkIGZ1bmMpCkBAIC01NTcsMTkgKzY1MiwxOSBAQAogCQkJCQkgICAgaW50IGNzcm93KQogewogCXN0cnVjdCBpNTEwMF9wcml2ICpwcml2ID0gbWNpLT5wdnRfaW5mbzsKLQljb25zdCB1bnNpZ25lZCBjdGxyX3JhbmsgPSBpNTEwMF9jc3Jvd190b19yYW5rKG1jaSwgY3Nyb3cpOwotCWNvbnN0IHVuc2lnbmVkIGN0bHIgPSBpNTEwMF9jc3Jvd190b19jbnRscihtY2ksIGNzcm93KTsKKwljb25zdCB1bnNpZ25lZCBjaGFuX3JhbmsgPSBpNTEwMF9jc3Jvd190b19yYW5rKG1jaSwgY3Nyb3cpOworCWNvbnN0IHVuc2lnbmVkIGNoYW4gPSBpNTEwMF9jc3Jvd190b19jaGFuKG1jaSwgY3Nyb3cpOwogCXVuc2lnbmVkIGFkZHJfbGluZXM7CiAKIAkvKiBkaW1tIHByZXNlbnQ/ICovCi0JaWYgKCFwcml2LT5tdHJbY3Rscl1bY3Rscl9yYW5rXS5wcmVzZW50KQorCWlmICghcHJpdi0+bXRyW2NoYW5dW2NoYW5fcmFua10ucHJlc2VudCkKIAkJcmV0dXJuIDBVTEw7CiAKIAlhZGRyX2xpbmVzID0KIAkJSTUxMDBfRElNTV9BRERSX0xJTkVTICsKLQkJcHJpdi0+bXRyW2N0bHJdW2N0bHJfcmFua10ubnVtY29sICsKLQkJcHJpdi0+bXRyW2N0bHJdW2N0bHJfcmFua10ubnVtcm93ICsKLQkJcHJpdi0+bXRyW2N0bHJdW2N0bHJfcmFua10ubnVtYmFuazsKKwkJcHJpdi0+bXRyW2NoYW5dW2NoYW5fcmFua10ubnVtY29sICsKKwkJcHJpdi0+bXRyW2NoYW5dW2NoYW5fcmFua10ubnVtcm93ICsKKwkJcHJpdi0+bXRyW2NoYW5dW2NoYW5fcmFua10ubnVtYmFuazsKIAogCXJldHVybiAodW5zaWduZWQgbG9uZykKIAkJKCh1bnNpZ25lZCBsb25nIGxvbmcpICgxVUxMIDw8IGFkZHJfbGluZXMpIC8gUEFHRV9TSVpFKTsKQEAgLTU4MSwxMSArNjc2LDExIEBACiAJc3RydWN0IHBjaV9kZXYgKm1tc1syXSA9IHsgcHJpdi0+Y2gwbW0sIHByaXYtPmNoMW1tIH07CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSTUxMDBfTUFYX0NUTFJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSTUxMDBfQ0hBTk5FTFM7IGkrKykgewogCQlpbnQgajsKIAkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtbXNbaV07CiAKLQkJZm9yIChqID0gMDsgaiA8IEk1MTAwX01BWF9SQU5LU19QRVJfQ1RMUjsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBJNTEwMF9NQVhfUkFOS1NfUEVSX0NIQU47IGorKykgewogCQkJY29uc3QgdW5zaWduZWQgYWRkciA9CiAJCQkJKGogPCA0KSA/IEk1MTAwX01UUl8wICsgaiAqIDIgOgogCQkJCQkgIEk1MTAwX01UUl80ICsgKGogLSA0KSAqIDI7CkBAIC02NDQsNyArNzM5LDYgQEAKICAqIGZpbGwgZGltbSBjaGlwIHNlbGVjdCBtYXAKICAqCiAgKiBGSVhNRToKLSAqICAgbyBvbmx5IHZhbGlkIGZvciA0IHJhbmtzIHBlciBjb250cm9sbGVyCiAgKiAgIG8gbm90IHRoZSBvbmx5IHdheSB0byBtYXkgY2hpcCBzZWxlY3RzIHRvIGRpbW0gc2xvdHMKICAqICAgbyBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBpcyBzb21lIHdheSB0byBvYnRhaW4gdGhpcyBtYXAgZnJvbSB0aGUgYmlvcwogICovCkBAIC02NTMsOSArNzQ3LDcgQEAKIAlzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CiAJaW50IGk7CiAKLQlXQVJOX09OKHByaXYtPnJhbmtzcGVyY3RsciAhPSA0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBJNTEwMF9NQVhfRElNTV9TTE9UU19QRVJfQ1RMUjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEk1MTAwX01BWF9ESU1NX1NMT1RTX1BFUl9DSEFOOyBpKyspIHsKIAkJaW50IGo7CiAKIAkJZm9yIChqID0gMDsgaiA8IEk1MTAwX01BWF9SQU5LU19QRVJfRElNTTsgaisrKQpAQCAtNjYzLDEyICs3NTUsMjEgQEAKIAl9CiAKIAkvKiBvbmx5IDIgY2hpcCBzZWxlY3RzIHBlciBzbG90Li4uICovCi0JcHJpdi0+ZGltbV9jc21hcFswXVswXSA9IDA7Ci0JcHJpdi0+ZGltbV9jc21hcFswXVsxXSA9IDM7Ci0JcHJpdi0+ZGltbV9jc21hcFsxXVswXSA9IDE7Ci0JcHJpdi0+ZGltbV9jc21hcFsxXVsxXSA9IDI7Ci0JcHJpdi0+ZGltbV9jc21hcFsyXVswXSA9IDI7Ci0JcHJpdi0+ZGltbV9jc21hcFszXVswXSA9IDM7CisJaWYgKHByaXYtPnJhbmtzcGVyY2hhbiA9PSA0KSB7CisJCXByaXYtPmRpbW1fY3NtYXBbMF1bMF0gPSAwOworCQlwcml2LT5kaW1tX2NzbWFwWzBdWzFdID0gMzsKKwkJcHJpdi0+ZGltbV9jc21hcFsxXVswXSA9IDE7CisJCXByaXYtPmRpbW1fY3NtYXBbMV1bMV0gPSAyOworCQlwcml2LT5kaW1tX2NzbWFwWzJdWzBdID0gMjsKKwkJcHJpdi0+ZGltbV9jc21hcFszXVswXSA9IDM7CisJfSBlbHNlIHsKKwkJcHJpdi0+ZGltbV9jc21hcFswXVswXSA9IDA7CisJCXByaXYtPmRpbW1fY3NtYXBbMF1bMV0gPSAxOworCQlwcml2LT5kaW1tX2NzbWFwWzFdWzBdID0gMjsKKwkJcHJpdi0+ZGltbV9jc21hcFsxXVsxXSA9IDM7CisJCXByaXYtPmRpbW1fY3NtYXBbMl1bMF0gPSA0OworCQlwcml2LT5kaW1tX2NzbWFwWzJdWzFdID0gNTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpNTEwMF9pbml0X2RpbW1fbGF5b3V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtNjc3LDEwICs3NzgsMTAgQEAKIAlzdHJ1Y3QgaTUxMDBfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSTUxMDBfTUFYX0NUTFJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSTUxMDBfQ0hBTk5FTFM7IGkrKykgewogCQlpbnQgajsKIAotCQlmb3IgKGogPSAwOyBqIDwgSTUxMDBfTUFYX0RJTU1fU0xPVFNfUEVSX0NUTFI7IGorKykgeworCQlmb3IgKGogPSAwOyBqIDwgSTUxMDBfTUFYX0RJTU1fU0xPVFNfUEVSX0NIQU47IGorKykgewogCQkJdTggcmFuazsKIAogCQkJaWYgKGk1MTAwX3JlYWRfc3BkX2J5dGUobWNpLCBpLCBqLCA1LCAmcmFuaykgPCAwKQpAQCAtNzIwLDcgKzgyMSw3IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSTUxMDBfQU1JUl8xLCAmdyk7CiAJcHJpdi0+YW1pclsxXSA9IHc7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSTUxMDBfTUFYX0NUTFJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSTUxMDBfQ0hBTk5FTFM7IGkrKykgewogCQlpbnQgajsKIAogCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CkBAIC03NDcsNyArODQ4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBtY2ktPm5yX2Nzcm93czsgaSsrKSB7CiAJCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gaTUxMDBfbnBhZ2VzKG1jaSwgaSk7Ci0JCWNvbnN0IHVuc2lnbmVkIGNudGxyID0gaTUxMDBfY3Nyb3dfdG9fY250bHIobWNpLCBpKTsKKwkJY29uc3QgdW5zaWduZWQgY2hhbiA9IGk1MTAwX2Nzcm93X3RvX2NoYW4obWNpLCBpKTsKIAkJY29uc3QgdW5zaWduZWQgcmFuayA9IGk1MTAwX2Nzcm93X3RvX3JhbmsobWNpLCBpKTsKIAogCQlpZiAoIW5wYWdlcykKQEAgLTc2NSw3ICs4NjYsNyBAQAogCQltY2ktPmNzcm93c1tpXS5ncmFpbiA9IDMyOwogCQltY2ktPmNzcm93c1tpXS5jc3Jvd19pZHggPSBpOwogCQltY2ktPmNzcm93c1tpXS5kdHlwZSA9Ci0JCQkocHJpdi0+bXRyW2NudGxyXVtyYW5rXS53aWR0aCA9PSA0KSA/IERFVl9YNCA6IERFVl9YODsKKwkJCShwcml2LT5tdHJbY2hhbl1bcmFua10ud2lkdGggPT0gNCkgPyBERVZfWDQgOiBERVZfWDg7CiAJCW1jaS0+Y3Nyb3dzW2ldLnVlX2NvdW50ID0gMDsKIAkJbWNpLT5jc3Jvd3NbaV0uY2VfY291bnQgPSAwOwogCQltY2ktPmNzcm93c1tpXS5tdHlwZSA9IE1FTV9SRERSMjsKQEAgLTc3Nyw3ICs4NzgsNyBAQAogCQltY2ktPmNzcm93c1tpXS5jaGFubmVsc1swXS5jc3JvdyA9IG1jaS0+Y3Nyb3dzICsgaTsKIAkJc25wcmludGYobWNpLT5jc3Jvd3NbaV0uY2hhbm5lbHNbMF0ubGFiZWwsCiAJCQkgc2l6ZW9mKG1jaS0+Y3Nyb3dzW2ldLmNoYW5uZWxzWzBdLmxhYmVsKSwKLQkJCSAiRElNTSV1IiwgaTUxMDBfcmFua190b19zbG90KG1jaSwgY250bHIsIHJhbmspKTsKKwkJCSAiRElNTSV1IiwgaTUxMDBfcmFua190b19zbG90KG1jaSwgY2hhbiwgcmFuaykpOwogCiAJCXRvdGFsX3BhZ2VzICs9IG5wYWdlczsKIAl9CkBAIC04MTUsMTMgKzkxNiw2IEBACiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEk1MTAwX01TLCAmZHcpOwogCXJhbmtzcGVyY2ggPSAhIShkdyAmICgxIDw8IDgpKSAqIDIgKyA0OwogCi0JaWYgKHJhbmtzcGVyY2ggIT0gNCkgewotCQkvKiBGSVhNRTogZ2V0IDYgcmFua3MgLyBjb250cm9sbGVyIHRvIHdvcmsgLSBuZWVkIGh3Li4uICovCi0JCXByaW50ayhLRVJOX0lORk8gImk1MTAwX2VkYWM6IHVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24uXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBiYWlsX3BkZXY7Ci0JfQotCiAJLyogZW5hYmxlIGVycm9yIHJlcG9ydGluZy4uLiAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBJNTEwMF9FTUFTS19NRU0sICZkdyk7CiAJZHcgJj0gfkk1MTAwX0ZFUlJfTkZfTUVNX0FOWV9NQVNLOwpAQCAtODY0LDExICs5NTgsMjEgQEAKIAltY2ktPmRldiA9ICZwZGV2LT5kZXY7CiAKIAlwcml2ID0gbWNpLT5wdnRfaW5mbzsKLQlwcml2LT5yYW5rc3BlcmN0bHIgPSByYW5rc3BlcmNoOworCXByaXYtPnJhbmtzcGVyY2hhbiA9IHJhbmtzcGVyY2g7CiAJcHJpdi0+bWMgPSBwZGV2OwogCXByaXYtPmNoMG1tID0gY2gwbW07CiAJcHJpdi0+Y2gxbW0gPSBjaDFtbTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCYocHJpdi0+aTUxMDBfc2NydWJiaW5nKSwgaTUxMDBfcmVmcmVzaF9zY3J1YmJpbmcpOworCisJLyogSWYgc2NydWJiaW5nIHdhcyBhbHJlYWR5IGVuYWJsZWQgYnkgdGhlIGJpb3MsIHN0YXJ0IG1haW50YWluaW5nIGl0ICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEk1MTAwX01DLCAmZHcpOworCWlmIChpNTEwMF9tY19zY3JiZW4oZHcpKSB7CisJCXByaXYtPnNjcnViX2VuYWJsZSA9IDE7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmKHByaXYtPmk1MTAwX3NjcnViYmluZyksCisJCQkJICAgICAgSTUxMDBfU0NSVUJfUkVGUkVTSF9SQVRFKTsKKwl9CisKIAlpNTEwMF9pbml0X2RpbW1fbGF5b3V0KHBkZXYsIG1jaSk7CiAJaTUxMDBfaW5pdF9pbnRlcmxlYXZpbmcocGRldiwgbWNpKTsKIApAQCAtODgyLDYgKzk4Niw4IEBACiAJbWNpLT5jdGxfcGFnZV90b19waHlzID0gTlVMTDsKIAogCW1jaS0+ZWRhY19jaGVjayA9IGk1MTAwX2NoZWNrX2Vycm9yOworCW1jaS0+c2V0X3NkcmFtX3NjcnViX3JhdGUgPSBpNTEwMF9zZXRfc2NydWJfcmF0ZTsKKwltY2ktPmdldF9zZHJhbV9zY3J1Yl9yYXRlID0gaTUxMDBfZ2V0X3NjcnViX3JhdGU7CiAKIAlpNTEwMF9pbml0X2Nzcm93cyhtY2kpOwogCkBAIC04OTcsMTIgKzEwMDMsMTQgQEAKIAogCWlmIChlZGFjX21jX2FkZF9tYyhtY2kpKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFpbF9tYzsKKwkJZ290byBiYWlsX3NjcnViOwogCX0KIAogCXJldHVybiByZXQ7CiAKLWJhaWxfbWM6CitiYWlsX3NjcnViOgorCXByaXYtPnNjcnViX2VuYWJsZSA9IDA7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCYocHJpdi0+aTUxMDBfc2NydWJiaW5nKSk7CiAJZWRhY19tY19mcmVlKG1jaSk7CiAKIGJhaWxfZGlzYWJsZV9jaDE6CkBAIC05MzUsNiArMTA0MywxMCBAQAogCQlyZXR1cm47CiAKIAlwcml2ID0gbWNpLT5wdnRfaW5mbzsKKworCXByaXYtPnNjcnViX2VuYWJsZSA9IDA7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCYocHJpdi0+aTUxMDBfc2NydWJiaW5nKSk7CisKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPmNoMG1tKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+Y2gxbW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCmluZGV4IGViYjllNTEuLjFiMDNiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKQEAgLTcsNyArNyw3IEBACiAKIGNvbmZpZyBFREQKIAl0cmlzdGF0ZSAiQklPUyBFbmhhbmNlZCBEaXNrIERyaXZlIGNhbGxzIGRldGVybWluZSBib290IGRpc2siCi0JZGVwZW5kcyBvbiAhSUE2NAorCWRlcGVuZHMgb24gWDg2CiAJaGVscAogCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBCSU9TIEVuaGFuY2VkIERpc2sgRHJpdmUKIAkgIFNlcnZpY2VzIHJlYWwgbW9kZSBCSU9TIGNhbGxzIHRvIGRldGVybWluZSB3aGljaCBkaXNrCkBAIC0yOCw3ICsyOCw3IEBACiAKIGNvbmZpZyBGSVJNV0FSRV9NRU1NQVAKICAgICBib29sICJBZGQgZmlybXdhcmUtcHJvdmlkZWQgbWVtb3J5IG1hcCB0byBzeXNmcyIgaWYgRU1CRURERUQKLSAgICBkZWZhdWx0IChYODZfNjQgfHwgWDg2XzMyKQorICAgIGRlZmF1bHQgWDg2CiAgICAgaGVscAogICAgICAgQWRkIHRoZSBmaXJtd2FyZS1wcm92aWRlZCAodW5tb2RpZmllZCkgbWVtb3J5IG1hcCB0byAvc3lzL2Zpcm13YXJlL21lbW1hcC4KICAgICAgIFRoYXQgbWVtb3J5IG1hcCBpcyB1c2VkIGZvciBleGFtcGxlIGJ5IGtleGVjIHRvIHNldCB1cCBwYXJhbWV0ZXIgYXJlYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCmluZGV4IDNhMmNjYjAuLjMxYjk4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTE2OSwxMCArMTY5LDcgQEAKIAlpZiAoIXMpCiAJCXJldHVybjsKIAotCXNwcmludGYocywKLQkJIiUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKLQkJZFswXSwgZFsxXSwgZFsyXSwgZFszXSwgZFs0XSwgZFs1XSwgZFs2XSwgZFs3XSwKLQkJZFs4XSwgZFs5XSwgZFsxMF0sIGRbMTFdLCBkWzEyXSwgZFsxM10sIGRbMTRdLCBkWzE1XSk7CisJc3ByaW50ZihzLCAiJXBVQiIsIGQpOwogCiAgICAgICAgIGRtaV9pZGVudFtzbG90XSA9IHM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IDA1MWQxZWIuLjVhZWIzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC0zODAsNyArMzgwLDYgQEAKIAlzdHJ1Y3QgaWJmdF9uaWMgKm5pYyA9IGVudHJ5LT5uaWM7CiAJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOwogCWNoYXIgKnN0ciA9IGJ1ZjsKLQljaGFyICptYWM7CiAJaW50IHZhbDsKIAogCWlmICghbmljKQpAQCAtNDIxLDEwICs0MjAsNyBAQAogCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT52bGFuKTsKIAkJYnJlYWs7CiAJY2FzZSBpYmZ0X2V0aF9tYWM6Ci0JCW1hYyA9IG5pYy0+bWFjOwotCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCSAgICAgICAodTgpbWFjWzBdLCAodTgpbWFjWzFdLCAodTgpbWFjWzJdLAotCQkJICAgICAgICh1OCltYWNbM10sICh1OCltYWNbNF0sICh1OCltYWNbNV0pOworCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcE1cbiIsIG5pYy0+bWFjKTsKIAkJYnJlYWs7CiAJY2FzZSBpYmZ0X2V0aF9ob3N0bmFtZToKIAkJc3RyICs9IHNwcmludGZfc3RyaW5nKHN0ciwgbmljLT5ob3N0bmFtZV9sZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDJhZDAxMjguLmEwMTliNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC0xNzQsNiArMTc0LDE2IEBACiAKIGNvbW1lbnQgIlBDSSBHUElPIGV4cGFuZGVyczoiCiAKK2NvbmZpZyBHUElPX0NTNTUzNQorCXRyaXN0YXRlICJBTUQgQ1M1NTM1L0NTNTUzNiBHUElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgIUNTNTUzNV9HUElPCisJaGVscAorCSAgVGhlIEFNRCBDUzU1MzUgYW5kIENTNTUzNiBzb3V0aGJyaWRnZXMgc3VwcG9ydCAyOCBHUElPIHBpbnMgdGhhdAorCSAgY2FuIGJlIHVzZWQgZm9yIHF1aXRlIGEgbnVtYmVyIG9mIHRoaW5ncy4gIFRoZSBDUzU1MzUvNiBpcyBmb3VuZCBvbgorCSAgQU1EIEdlb2RlIGFuZCBMZW1vdGUgWWVlbG9vbmcgZGV2aWNlcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEdQSU9fQlQ4WFgKIAl0cmlzdGF0ZSAiQlQ4WFggR1BJTyBhYnVzZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fQlQ4NDg9bgpAQCAtMTk2LDYgKzIwNiwxMiBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtIEdQSU8uCiAKK2NvbmZpZyBHUElPX1RJTUJFUkRBTEUKKwlib29sICJTdXBwb3J0IGZvciB0aW1iZXJkYWxlIEdQSU8gSVAiCisJZGVwZW5kcyBvbiBNRkRfVElNQkVSREFMRSAmJiBHUElPTElCICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwlBZGQgc3VwcG9ydCBmb3IgdGhlIEdQSU8gSVAgaW4gdGhlIHRpbWJlcmRhbGUgRlBHQS4KKwogY29tbWVudCAiU1BJIEdQSU8gZXhwYW5kZXJzOiIKIAogY29uZmlnIEdQSU9fTUFYNzMwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IDAwYTUzMmMuLjUyZmU0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTEzLDkgKzEzLDExIEBACiBvYmotJChDT05GSUdfR1BJT19QQ0E5NTNYKQkrPSBwY2E5NTN4Lm8KIG9iai0kKENPTkZJR19HUElPX1BDRjg1N1gpCSs9IHBjZjg1N3gubwogb2JqLSQoQ09ORklHX0dQSU9fUEwwNjEpCSs9IHBsMDYxLm8KK29iai0kKENPTkZJR19HUElPX1RJTUJFUkRBTEUpCSs9IHRpbWJncGlvLm8KIG9iai0kKENPTkZJR19HUElPX1RXTDQwMzApCSs9IHR3bDQwMzAtZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19VQ0IxNDAwKQkrPSB1Y2IxNDAwX2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fWElMSU5YKQkrPSB4aWxpbnhfZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19DUzU1MzUpCSs9IGNzNTUzNS1ncGlvLm8KIG9iai0kKENPTkZJR19HUElPX0JUOFhYKQkrPSBidDh4eGdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fVlI0MVhYKQkrPSB2cjQxeHhfZ2l1Lm8KIG9iai0kKENPTkZJR19HUElPX1dNODMxWCkJKz0gd204MzF4LWdwaW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2FkcDU1MjAtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2FkcDU1MjAtZ3Bpby5jCmluZGV4IGFkMDViYmMuLjBmOTMxMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9hZHA1NTIwLWdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vYWRwNTUyMC1ncGlvLmMKQEAgLTM0LDkgKzM0LDkgQEAKIAkgKi8KIAogCWlmICh0ZXN0X2JpdChvZmYsICZkZXYtPm91dHB1dCkpCi0JCWFkcDU1MjBfcmVhZChkZXYtPm1hc3RlciwgR1BJT19PVVQsICZyZWdfdmFsKTsKKwkJYWRwNTUyMF9yZWFkKGRldi0+bWFzdGVyLCBBRFA1NTIwX0dQSU9fT1VULCAmcmVnX3ZhbCk7CiAJZWxzZQotCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEdQSU9fSU4sICZyZWdfdmFsKTsKKwkJYWRwNTUyMF9yZWFkKGRldi0+bWFzdGVyLCBBRFA1NTIwX0dQSU9fSU4sICZyZWdfdmFsKTsKIAogCXJldHVybiAhIShyZWdfdmFsICYgZGV2LT5sdXRbb2ZmXSk7CiB9CkBAIC00OCw5ICs0OCw5IEBACiAJZGV2ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTIwX2dwaW8sIGdwaW9fY2hpcCk7CiAKIAlpZiAodmFsKQotCQlhZHA1NTIwX3NldF9iaXRzKGRldi0+bWFzdGVyLCBHUElPX09VVCwgZGV2LT5sdXRbb2ZmXSk7CisJCWFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOwogCWVsc2UKLQkJYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOworCQlhZHA1NTIwX2Nscl9iaXRzKGRldi0+bWFzdGVyLCBBRFA1NTIwX0dQSU9fT1VULCBkZXYtPmx1dFtvZmZdKTsKIH0KIAogc3RhdGljIGludCBhZHA1NTIwX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZikKQEAgLTYwLDcgKzYwLDggQEAKIAogCWNsZWFyX2JpdChvZmYsICZkZXYtPm91dHB1dCk7CiAKLQlyZXR1cm4gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19DRkdfMiwgZGV2LT5sdXRbb2ZmXSk7CisJcmV0dXJuIGFkcDU1MjBfY2xyX2JpdHMoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfR1BJT19DRkdfMiwKKwkJCQlkZXYtPmx1dFtvZmZdKTsKIH0KIAogc3RhdGljIGludCBhZHA1NTIwX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLApAQCAtNzMsMTggKzc0LDIxIEBACiAJc2V0X2JpdChvZmYsICZkZXYtPm91dHB1dCk7CiAKIAlpZiAodmFsKQotCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOworCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgQURQNTUyMF9HUElPX09VVCwKKwkJCQkJZGV2LT5sdXRbb2ZmXSk7CiAJZWxzZQotCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgR1BJT19PVVQsIGRldi0+bHV0W29mZl0pOworCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgQURQNTUyMF9HUElPX09VVCwKKwkJCQkJZGV2LT5sdXRbb2ZmXSk7CiAKLQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgR1BJT19DRkdfMiwgZGV2LT5sdXRbb2ZmXSk7CisJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfR1BJT19DRkdfMiwKKwkJCQkJZGV2LT5sdXRbb2ZmXSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgYWRwNTUyMF9ncGlvX3BsYXRmcm9tX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkcDU1MjBfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBhZHA1NTIwX2dwaW8gKmRldjsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKIAlpbnQgcmV0LCBpLCBncGlvczsKQEAgLTEyOSwyMCArMTMzLDIwIEBACiAJZ2MtPmxhYmVsID0gcGRldi0+bmFtZTsKIAlnYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCXJldCA9IGFkcDU1MjBfY2xyX2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fQ0ZHXzEsCisJcmV0ID0gYWRwNTUyMF9jbHJfYml0cyhkZXYtPm1hc3RlciwgQURQNTUyMF9HUElPX0NGR18xLAogCQlwZGF0YS0+Z3Bpb19lbl9tYXNrKTsKIAotCWlmIChwZGF0YS0+Z3Bpb19lbl9tYXNrICYgR1BJT19DMykKLQkJY3RsX21hc2sgfD0gQzNfTU9ERTsKKwlpZiAocGRhdGEtPmdwaW9fZW5fbWFzayAmIEFEUDU1MjBfR1BJT19DMykKKwkJY3RsX21hc2sgfD0gQURQNTUyMF9DM19NT0RFOwogCi0JaWYgKHBkYXRhLT5ncGlvX2VuX21hc2sgJiBHUElPX1IzKQotCQljdGxfbWFzayB8PSBSM19NT0RFOworCWlmIChwZGF0YS0+Z3Bpb19lbl9tYXNrICYgQURQNTUyMF9HUElPX1IzKQorCQljdGxfbWFzayB8PSBBRFA1NTIwX1IzX01PREU7CiAKIAlpZiAoY3RsX21hc2spCi0JCXJldCA9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIExFRF9DT05UUk9MLAorCQlyZXQgPSBhZHA1NTIwX3NldF9iaXRzKGRldi0+bWFzdGVyLCBBRFA1NTIwX0xFRF9DT05UUk9MLAogCQkJY3RsX21hc2spOwogCi0JcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEdQSU9fUFVMTFVQLAorCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldi0+bWFzdGVyLCBBRFA1NTIwX0dQSU9fUFVMTFVQLAogCQlwZGF0YS0+Z3Bpb19wdWxsdXBfbWFzayk7CiAKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZGJlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIEFNRCBDUzU1MzUvQ1M1NTM2IEdQSU8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAY29sbGFib3JhLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CisKKyNkZWZpbmUgRFJWX05BTUUgImNzNTUzNS1ncGlvIgorI2RlZmluZSBHUElPX0JBUiAxCisKKy8qCisgKiBTb21lIEdQSU8gcGlucworICogIDMxLTI5LDIzIDogcmVzZXJ2ZWQgKGFsd2F5cyBtYXNrIG91dCkKKyAqICAyOCAgICAgICA6IFBvd2VyIEJ1dHRvbgorICogIDI2ICAgICAgIDogUE1FIworICogIDIyLTE2ICAgIDogTFBDCisgKiAgMTQsMTUgICAgOiBTTUJ1cworICogIDksOCAgICAgIDogVUFSVDEKKyAqICA3ICAgICAgICA6IFBDSSBJTlRCCisgKiAgMyw0ICAgICAgOiBVQVJUMi9EREMKKyAqICAyICAgICAgICA6IElERV9JUlEwCisgKiAgMSAgICAgICAgOiBBQ19CRUVQCisgKiAgMCAgICAgICAgOiBQQ0kgSU5UQQorICoKKyAqIElmIGEgbWFzayB3YXMgbm90IHNwZWNpZmllZCwgYWxsb3cgYWxsIGV4Y2VwdAorICogcmVzZXJ2ZWQgYW5kIFBvd2VyIEJ1dHRvbgorICovCisjZGVmaW5lIEdQSU9fREVGQVVMVF9NQVNLIDB4MEY3RkZGRkYKKworc3RhdGljIHVsb25nIG1hc2sgPSBHUElPX0RFRkFVTFRfTUFTSzsKK21vZHVsZV9wYXJhbV9uYW1lZChtYXNrLCBtYXNrLCB1bG9uZywgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1hc2ssICJHUElPIGNoYW5uZWwgbWFzay4iKTsKKworc3RhdGljIHN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJcmVzb3VyY2Vfc2l6ZV90IGJhc2U7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzcGlubG9ja190IGxvY2s7Cit9IGNzNTUzNV9ncGlvX2NoaXA7CisKKy8qCisgKiBUaGUgQ1M1NTM1L0NTNTUzNiBHUElPcyBzdXBwb3J0IGEgbnVtYmVyIG9mIGV4dHJhIGZlYXR1cmVzIG5vdCBkZWZpbmVkCisgKiBieSB0aGUgZ3Bpb19jaGlwIEFQSSwgc28gdGhlc2UgYXJlIGV4cG9ydGVkLiAgRm9yIGEgZnVsbCBsaXN0IG9mIHRoZQorICogcmVnaXN0ZXJzLCBzZWUgaW5jbHVkZS9saW51eC9jczU1MzUuaC4KKyAqLworCitzdGF0aWMgdm9pZCBfX2NzNTUzNV9ncGlvX3NldChzdHJ1Y3QgY3M1NTM1X2dwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQl1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChvZmZzZXQgPCAxNikKKwkJLyogbG93IGJhbmsgcmVnaXN0ZXIgKi8KKwkJb3V0bCgxIDw8IG9mZnNldCwgY2hpcC0+YmFzZSArIHJlZyk7CisJZWxzZQorCQkvKiBoaWdoIGJhbmsgcmVnaXN0ZXIgKi8KKwkJb3V0bCgxIDw8IChvZmZzZXQgLSAxNiksIGNoaXAtPmJhc2UgKyAweDgwICsgcmVnKTsKK30KKwordm9pZCBjczU1MzVfZ3Bpb19zZXQodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwICpjaGlwID0gJmNzNTUzNV9ncGlvX2NoaXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJX19jczU1MzVfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNzNTUzNV9ncGlvX3NldCk7CisKK3N0YXRpYyB2b2lkIF9fY3M1NTM1X2dwaW9fY2xlYXIoc3RydWN0IGNzNTUzNV9ncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJdW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAob2Zmc2V0IDwgMTYpCisJCS8qIGxvdyBiYW5rIHJlZ2lzdGVyICovCisJCW91dGwoMSA8PCAob2Zmc2V0ICsgMTYpLCBjaGlwLT5iYXNlICsgcmVnKTsKKwllbHNlCisJCS8qIGhpZ2ggYmFuayByZWdpc3RlciAqLworCQlvdXRsKDEgPDwgb2Zmc2V0LCBjaGlwLT5iYXNlICsgMHg4MCArIHJlZyk7Cit9CisKK3ZvaWQgY3M1NTM1X2dwaW9fY2xlYXIodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwICpjaGlwID0gJmNzNTUzNV9ncGlvX2NoaXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJX19jczU1MzVfZ3Bpb19jbGVhcihjaGlwLCBvZmZzZXQsIHJlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3M1NTM1X2dwaW9fY2xlYXIpOworCitpbnQgY3M1NTM1X2dwaW9faXNzZXQodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwICpjaGlwID0gJmNzNTUzNV9ncGlvX2NoaXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJaWYgKG9mZnNldCA8IDE2KQorCQkvKiBsb3cgYmFuayByZWdpc3RlciAqLworCQl2YWwgPSBpbmwoY2hpcC0+YmFzZSArIHJlZyk7CisJZWxzZSB7CisJCS8qIGhpZ2ggYmFuayByZWdpc3RlciAqLworCQl2YWwgPSBpbmwoY2hpcC0+YmFzZSArIDB4ODAgKyByZWcpOworCQlvZmZzZXQgLT0gMTY7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAodmFsICYgKDEgPDwgb2Zmc2V0KSkgPyAxIDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNzNTUzNV9ncGlvX2lzc2V0KTsKKworLyoKKyAqIEdlbmVyaWMgZ3Bpb19jaGlwIEFQSSBzdXBwb3J0LgorICovCisKK3N0YXRpYyBpbnQgY2hpcF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqYywgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwICpjaGlwID0gKHN0cnVjdCBjczU1MzVfZ3Bpb19jaGlwICopIGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBjaGVjayBpZiB0aGlzIHBpbiBpcyBhdmFpbGFibGUgKi8KKwlpZiAoKG1hc2sgJiAoMSA8PCBvZmZzZXQpKSA9PSAwKSB7CisJCWRldl9pbmZvKCZjaGlwLT5wZGV2LT5kZXYsCisJCQkicGluICV1IGlzIG5vdCBhdmFpbGFibGUgKGNoZWNrIG1hc2spXG4iLCBvZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGRpc2FibGUgb3V0cHV0IGF1eCAxICYgMiBvbiB0aGlzIHBpbiAqLworCV9fY3M1NTM1X2dwaW9fY2xlYXIoY2hpcCwgb2Zmc2V0LCBHUElPX09VVFBVVF9BVVgxKTsKKwlfX2NzNTUzNV9ncGlvX2NsZWFyKGNoaXAsIG9mZnNldCwgR1BJT19PVVRQVVRfQVVYMik7CisKKwkvKiBkaXNhYmxlIGlucHV0IGF1eCAxIG9uIHRoaXMgcGluICovCisJX19jczU1MzVfZ3Bpb19jbGVhcihjaGlwLCBvZmZzZXQsIEdQSU9fSU5QVVRfQVVYMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGlwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gY3M1NTM1X2dwaW9faXNzZXQob2Zmc2V0LCBHUElPX09VVFBVVF9WQUwpOworfQorCitzdGF0aWMgdm9pZCBjaGlwX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlpZiAodmFsKQorCQljczU1MzVfZ3Bpb19zZXQob2Zmc2V0LCBHUElPX09VVFBVVF9WQUwpOworCWVsc2UKKwkJY3M1NTM1X2dwaW9fY2xlYXIob2Zmc2V0LCBHUElPX09VVFBVVF9WQUwpOworfQorCitzdGF0aWMgaW50IGNoaXBfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmMsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgY3M1NTM1X2dwaW9fY2hpcCAqY2hpcCA9IChzdHJ1Y3QgY3M1NTM1X2dwaW9fY2hpcCAqKSBjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCV9fY3M1NTM1X2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgR1BJT19JTlBVVF9FTkFCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoaXBfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCit7CisJc3RydWN0IGNzNTUzNV9ncGlvX2NoaXAgKmNoaXAgPSAoc3RydWN0IGNzNTUzNV9ncGlvX2NoaXAgKikgYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCV9fY3M1NTM1X2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgR1BJT19PVVRQVVRfRU5BQkxFKTsKKwlpZiAodmFsKQorCQlfX2NzNTUzNV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIEdQSU9fT1VUUFVUX1ZBTCk7CisJZWxzZQorCQlfX2NzNTUzNV9ncGlvX2NsZWFyKGNoaXAsIG9mZnNldCwgR1BJT19PVVRQVVRfVkFMKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqY3M1NTM1X2dwaW9fbmFtZXNbXSA9IHsKKwkiR1BJTzAiLCAiR1BJTzEiLCAiR1BJTzIiLCAiR1BJTzMiLAorCSJHUElPNCIsICJHUElPNSIsICJHUElPNiIsICJHUElPNyIsCisJIkdQSU84IiwgIkdQSU85IiwgIkdQSU8xMCIsICJHUElPMTEiLAorCSJHUElPMTIiLCAiR1BJTzEzIiwgIkdQSU8xNCIsICJHUElPMTUiLAorCSJHUElPMTYiLCAiR1BJTzE3IiwgIkdQSU8xOCIsICJHUElPMTkiLAorCSJHUElPMjAiLCAiR1BJTzIxIiwgIkdQSU8yMiIsIE5VTEwsCisJIkdQSU8yNCIsICJHUElPMjUiLCAiR1BJTzI2IiwgIkdQSU8yNyIsCisJIkdQSU8yOCIsIE5VTEwsIE5VTEwsIE5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGNzNTUzNV9ncGlvX2NoaXAgY3M1NTM1X2dwaW9fY2hpcCA9IHsKKwkuY2hpcCA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5sYWJlbCA9IERSVl9OQU1FLAorCisJCS5iYXNlID0gMCwKKwkJLm5ncGlvID0gMzIsCisJCS5uYW1lcyA9IGNzNTUzNV9ncGlvX25hbWVzLAorCQkucmVxdWVzdCA9IGNoaXBfZ3Bpb19yZXF1ZXN0LAorCisJCS5nZXQgPSBjaGlwX2dwaW9fZ2V0LAorCQkuc2V0ID0gY2hpcF9ncGlvX3NldCwKKworCQkuZGlyZWN0aW9uX2lucHV0ID0gY2hpcF9kaXJlY3Rpb25faW5wdXQsCisJCS5kaXJlY3Rpb25fb3V0cHV0ID0gY2hpcF9kaXJlY3Rpb25fb3V0cHV0LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjczU1MzVfZ3Bpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwlpbnQgZXJyOworCXVsb25nIG1hc2tfb3JpZyA9IG1hc2s7CisKKwkvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZ2V0IHRoZSBHUElPIGJhc2UgYWRkcmVzczsgb25lIGlzIGJ5CisJICogZmV0Y2hpbmcgaXQgZnJvbSBNU1JfTEJBUl9HUElPLCB0aGUgb3RoZXIgaXMgYnkgcmVhZGluZyB0aGUKKwkgKiBQQ0kgQkFSIGluZm8uICBUaGUgbGF0dGVyIG1ldGhvZCBpcyBlYXNpZXIgKGVzcGVjaWFsbHkgYWNyb3NzCisJICogZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMpLCBzbyB3ZSdsbCBzdGljayB3aXRoIHRoYXQgZm9yIG5vdy4gIElmCisJICogaXQgdHVybnMgb3V0IHRvIGJlIHVucmVsaWFibGUgaW4gdGhlIGZhY2Ugb2YgY3JhcHB5IEJJT1Nlcywgd2UKKwkgKiBjYW4gYWx3YXlzIGdvIGJhY2sgdG8gdXNpbmcgTVNScy4uICovCisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9pbyhwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBkZXZpY2UgSU9cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIEdQSU9fQkFSLCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBQQ0kgQkFSICMlZFxuIiwgR1BJT19CQVIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc2V0IHVwIHRoZSBkcml2ZXItc3BlY2lmaWMgc3RydWN0ICovCisJY3M1NTM1X2dwaW9fY2hpcC5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIEdQSU9fQkFSKTsKKwljczU1MzVfZ3Bpb19jaGlwLnBkZXYgPSBwZGV2OworCXNwaW5fbG9ja19pbml0KCZjczU1MzVfZ3Bpb19jaGlwLmxvY2spOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImFsbG9jYXRlZCBQQ0kgQkFSICMlZDogYmFzZSAweCVsbHhcbiIsIEdQSU9fQkFSLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY3M1NTM1X2dwaW9fY2hpcC5iYXNlKTsKKworCS8qIG1hc2sgb3V0IHJlc2VydmVkIHBpbnMgKi8KKwltYXNrICY9IDB4MUY3RkZGRkY7CisKKwkvKiBkbyBub3QgYWxsb3cgcGluIDI4LCBQb3dlciBCdXR0b24sIGFzIHRoZXJlJ3Mgc3BlY2lhbCBoYW5kbGluZworCSAqIGluIHRoZSBQTUMgbmVlZGVkLiAobm90ZSAxMiwgcC4gNDgpICovCisJbWFzayAmPSB+KDEgPDwgMjgpOworCisJaWYgKG1hc2tfb3JpZyAhPSBtYXNrKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibWFzayBjaGFuZ2VkIGZyb20gMHglMDhsWCB0byAweCUwOGxYXG4iLAorCQkJCW1hc2tfb3JpZywgbWFzayk7CisKKwkvKiBmaW5hbGx5LCByZWdpc3RlciB3aXRoIHRoZSBnZW5lcmljIEdQSU8gQVBJICovCisJZXJyID0gZ3Bpb2NoaXBfYWRkKCZjczU1MzVfZ3Bpb19jaGlwLmNoaXApOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9yZWdpb247CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCBEUlZfTkFNRSAiOiBHUElPIHN1cHBvcnQgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOworCXJldHVybiAwOworCityZWxlYXNlX3JlZ2lvbjoKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgR1BJT19CQVIpOworZG9uZToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3M1NTM1X2dwaW9fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBncGlvY2hpcF9yZW1vdmUoJmNzNTUzNV9ncGlvX2NoaXAuY2hpcCk7CisJaWYgKGVycikgeworCQkvKiB1aGg/ICovCisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZW1vdmUgZ3Bpb19jaGlwP1xuIik7CisJfQorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCBHUElPX0JBUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjczU1MzVfZ3Bpb19wY2lfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0lTQSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EpIH0sCisJeyAwLCB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjczU1MzVfZ3Bpb19wY2lfdGJsKTsKKworLyoKKyAqIFdlIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgUENJIGRyaXZlciByZWdpc3RyYXRpb24gc3R1ZmYgaGVyZSwgc2luY2UKKyAqIHRoYXQgYWxsb3dzIG9ubHkgb25lIGRyaXZlciB0byBiaW5kIHRvIGVhY2ggUENJIGRldmljZSAoYW5kIHdlIHdhbnQKKyAqIG11bHRpcGxlIGRyaXZlcnMgdG8gYmUgYWJsZSB0byBiaW5kIHRvIHRoZSBkZXZpY2UpLiAgSW5zdGVhZCwgbWFudWFsbHkKKyAqIHNjYW4gZm9yIHRoZSBQQ0kgZGV2aWNlLCByZXF1ZXN0IGEgc2luZ2xlIHJlZ2lvbiwgYW5kIGtlZXAgdHJhY2sgb2YgdGhlCisgKiBkZXZpY2VzIHRoYXQgd2UncmUgdXNpbmcuCisgKi8KKworc3RhdGljIGludCBfX2luaXQgY3M1NTM1X2dwaW9fc2Nhbl9wY2kodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNzNTUzNV9ncGlvX3BjaV90YmwpOyBpKyspIHsKKwkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKGNzNTUzNV9ncGlvX3BjaV90YmxbaV0udmVuZG9yLAorCQkJCWNzNTUzNV9ncGlvX3BjaV90YmxbaV0uZGV2aWNlLCBOVUxMKTsKKwkJaWYgKHBkZXYpIHsKKwkJCWVyciA9IGNzNTUzNV9ncGlvX3Byb2JlKHBkZXYsICZjczU1MzVfZ3Bpb19wY2lfdGJsW2ldKTsKKwkJCWlmIChlcnIpCisJCQkJcGNpX2Rldl9wdXQocGRldik7CisKKwkJCS8qIHdlIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBDUzU1MzUvNiBzb3V0aGJyaWRnZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3M1NTM1X2dwaW9fZnJlZV9wY2kodm9pZCkKK3sKKwljczU1MzVfZ3Bpb19yZW1vdmUoY3M1NTM1X2dwaW9fY2hpcC5wZGV2KTsKKwlwY2lfZGV2X3B1dChjczU1MzVfZ3Bpb19jaGlwLnBkZXYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjczU1MzVfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIGNzNTUzNV9ncGlvX3NjYW5fcGNpKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjczU1MzVfZ3Bpb19leGl0KHZvaWQpCit7CisJY3M1NTM1X2dwaW9fZnJlZV9wY2koKTsKK30KKworbW9kdWxlX2luaXQoY3M1NTM1X2dwaW9faW5pdCk7Cittb2R1bGVfZXhpdChjczU1MzVfZ3Bpb19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGNvbGxhYm9yYS5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIENTNTUzNS9DUzU1MzYgR1BJTyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDUwZGUwZjUuLmEyNWFkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNTMsNiArNTMsNyBAQAogI2RlZmluZSBGTEFHX1NZU0ZTCTQJLyogZXhwb3J0ZWQgdmlhIC9zeXMvY2xhc3MvZ3Bpby9jb250cm9sICovCiAjZGVmaW5lIEZMQUdfVFJJR19GQUxMCTUJLyogdHJpZ2dlciBvbiBmYWxsaW5nIGVkZ2UgKi8KICNkZWZpbmUgRkxBR19UUklHX1JJU0UJNgkvKiB0cmlnZ2VyIG9uIHJpc2luZyBlZGdlICovCisjZGVmaW5lIEZMQUdfQUNUSVZFX0xPVwk3CS8qIHN5c2ZzIHZhbHVlIGhhcyBhY3RpdmUgbG93ICovCiAKICNkZWZpbmUgUERFU0NfSURfU0hJRlQJMTYJLyogYWRkIG5ldyBmbGFncyBiZWZvcmUgdGhpcyBvbmUgKi8KIApAQCAtMjEwLDYgKzIxMSwxMSBAQAogICogICAgICAqIGNvbmZpZ3VyZXMgYmVoYXZpb3Igb2YgcG9sbCgyKSBvbiAvdmFsdWUKICAqICAgICAgKiBhdmFpbGFibGUgb25seSBpZiBwaW4gY2FuIGdlbmVyYXRlIElSUXMgb24gaW5wdXQKICAqICAgICAgKiBpcyByZWFkL3dyaXRlIGFzICJub25lIiwgImZhbGxpbmciLCAicmlzaW5nIiwgb3IgImJvdGgiCisgKiAgIC9hY3RpdmVfbG93CisgKiAgICAgICogY29uZmlndXJlcyBwb2xhcml0eSBvZiAvdmFsdWUKKyAqICAgICAgKiBpcyByZWFkL3dyaXRlIGFzIHplcm8vbm9uemVybworICogICAgICAqIGFsc28gYWZmZWN0cyBleGlzdGluZyBhbmQgc3Vic2VxdWVudCAiZmFsbGluZyIgYW5kICJyaXNpbmciCisgKiAgICAgICAgL2VkZ2UgY29uZmlndXJhdGlvbgogICovCiAKIHN0YXRpYyBzc2l6ZV90IGdwaW9fZGlyZWN0aW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjU1LDcgKzI2MSw3IEBACiAJcmV0dXJuIHN0YXR1cyA/IDogc2l6ZTsKIH0KIAotc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKGRpcmVjdGlvbiwgMDY0NCwKK3N0YXRpYyAvKiBjb25zdCAqLyBERVZJQ0VfQVRUUihkaXJlY3Rpb24sIDA2NDQsCiAJCWdwaW9fZGlyZWN0aW9uX3Nob3csIGdwaW9fZGlyZWN0aW9uX3N0b3JlKTsKIAogc3RhdGljIHNzaXplX3QgZ3Bpb192YWx1ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI2NywxMCArMjczLDE3IEBACiAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAotCWlmICghdGVzdF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkgewogCQlzdGF0dXMgPSAtRUlPOwotCWVsc2UKLQkJc3RhdHVzID0gc3ByaW50ZihidWYsICIlZFxuIiwgISFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKSk7CisJfSBlbHNlIHsKKwkJaW50IHZhbHVlOworCisJCXZhbHVlID0gISFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKTsKKwkJaWYgKHRlc3RfYml0KEZMQUdfQUNUSVZFX0xPVywgJmRlc2MtPmZsYWdzKSkKKwkJCXZhbHVlID0gIXZhbHVlOworCisJCXN0YXR1cyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbHVlKTsKKwl9CiAKIAltdXRleF91bmxvY2soJnN5c2ZzX2xvY2spOwogCXJldHVybiBzdGF0dXM7CkBAIC0yOTQsNiArMzA3LDggQEAKIAogCQlzdGF0dXMgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMCwgJnZhbHVlKTsKIAkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlpZiAodGVzdF9iaXQoRkxBR19BQ1RJVkVfTE9XLCAmZGVzYy0+ZmxhZ3MpKQorCQkJCXZhbHVlID0gIXZhbHVlOwogCQkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZ3BpbywgdmFsdWUgIT0gMCk7CiAJCQlzdGF0dXMgPSBzaXplOwogCQl9CkBAIC0zMDMsNyArMzE4LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgLypjb25zdCovIERFVklDRV9BVFRSKHZhbHVlLCAwNjQ0LAorc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKHZhbHVlLCAwNjQ0LAogCQlncGlvX3ZhbHVlX3Nob3csIGdwaW9fdmFsdWVfc3RvcmUpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19zeXNmc19pcnEoaW50IGlycSwgdm9pZCAqcHJpdikKQEAgLTM1Miw5ICszNjcsMTEgQEAKIAogCWlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCWlmICh0ZXN0X2JpdChGTEFHX1RSSUdfRkFMTCwgJmdwaW9fZmxhZ3MpKQotCQlpcnFfZmxhZ3MgfD0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisJCWlycV9mbGFncyB8PSB0ZXN0X2JpdChGTEFHX0FDVElWRV9MT1csICZkZXNjLT5mbGFncykgPworCQkJSVJRRl9UUklHR0VSX1JJU0lORyA6IElSUUZfVFJJR0dFUl9GQUxMSU5HOwogCWlmICh0ZXN0X2JpdChGTEFHX1RSSUdfUklTRSwgJmdwaW9fZmxhZ3MpKQotCQlpcnFfZmxhZ3MgfD0gSVJRRl9UUklHR0VSX1JJU0lORzsKKwkJaXJxX2ZsYWdzIHw9IHRlc3RfYml0KEZMQUdfQUNUSVZFX0xPVywgJmRlc2MtPmZsYWdzKSA/CisJCQlJUlFGX1RSSUdHRVJfRkFMTElORyA6IElSUUZfVFJJR0dFUl9SSVNJTkc7CiAKIAlpZiAoIXBkZXNjKSB7CiAJCXBkZXNjID0ga21hbGxvYyhzaXplb2YoKnBkZXNjKSwgR0ZQX0tFUk5FTCk7CkBAIC00NzUsOSArNDkyLDc5IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihlZGdlLCAwNjQ0LCBncGlvX2VkZ2Vfc2hvdywgZ3Bpb19lZGdlX3N0b3JlKTsKIAorc3RhdGljIGludCBzeXNmc19zZXRfYWN0aXZlX2xvdyhzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJaW50IHZhbHVlKQoreworCWludAkJCXN0YXR1cyA9IDA7CisKKwlpZiAoISF0ZXN0X2JpdChGTEFHX0FDVElWRV9MT1csICZkZXNjLT5mbGFncykgPT0gISF2YWx1ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodmFsdWUpCisJCXNldF9iaXQoRkxBR19BQ1RJVkVfTE9XLCAmZGVzYy0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KEZMQUdfQUNUSVZFX0xPVywgJmRlc2MtPmZsYWdzKTsKKworCS8qIHJlY29uZmlndXJlIHBvbGwoMikgc3VwcG9ydCBpZiBlbmFibGVkIG9uIG9uZSBlZGdlIG9ubHkgKi8KKwlpZiAoZGV2ICE9IE5VTEwgJiYgKCEhdGVzdF9iaXQoRkxBR19UUklHX1JJU0UsICZkZXNjLT5mbGFncykgXgorCQkJCSEhdGVzdF9iaXQoRkxBR19UUklHX0ZBTEwsICZkZXNjLT5mbGFncykpKSB7CisJCXVuc2lnbmVkIGxvbmcgdHJpZ2dlcl9mbGFncyA9IGRlc2MtPmZsYWdzICYgR1BJT19UUklHR0VSX01BU0s7CisKKwkJZ3Bpb19zZXR1cF9pcnEoZGVzYywgZGV2LCAwKTsKKwkJc3RhdHVzID0gZ3Bpb19zZXR1cF9pcnEoZGVzYywgZGV2LCB0cmlnZ2VyX2ZsYWdzKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3NpemVfdCBncGlvX2FjdGl2ZV9sb3dfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJY29uc3Qgc3RydWN0IGdwaW9fZGVzYwkqZGVzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QJCQlzdGF0dXM7CisKKwltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKKworCWlmICghdGVzdF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncykpCisJCXN0YXR1cyA9IC1FSU87CisJZWxzZQorCQlzdGF0dXMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkJCSEhdGVzdF9iaXQoRkxBR19BQ1RJVkVfTE9XLCAmZGVzYy0+ZmxhZ3MpKTsKKworCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3NpemVfdCBncGlvX2FjdGl2ZV9sb3dfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdAkJCXN0YXR1czsKKworCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOworCisJaWYgKCF0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkgeworCQlzdGF0dXMgPSAtRUlPOworCX0gZWxzZSB7CisJCWxvbmcJCXZhbHVlOworCisJCXN0YXR1cyA9IHN0cmljdF9zdHJ0b2woYnVmLCAwLCAmdmFsdWUpOworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBzeXNmc19zZXRfYWN0aXZlX2xvdyhkZXNjLCBkZXYsIHZhbHVlICE9IDApOworCX0KKworCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzID8gOiBzaXplOworfQorCitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIoYWN0aXZlX2xvdywgMDY0NCwKKwkJZ3Bpb19hY3RpdmVfbG93X3Nob3csIGdwaW9fYWN0aXZlX2xvd19zdG9yZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpncGlvX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX2RpcmVjdGlvbi5hdHRyLAogCSZkZXZfYXR0cl92YWx1ZS5hdHRyLAorCSZkZXZfYXR0cl9hY3RpdmVfbG93LmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTY2MiwxMiArNzQ5LDEyIEBACiAJCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGRlc2MtPmNoaXAtPmRldiwgTUtERVYoMCwgMCksCiAJCQkJZGVzYywgaW9uYW1lID8gaW9uYW1lIDogImdwaW8lZCIsIGdwaW8pOwogCQlpZiAoIUlTX0VSUihkZXYpKSB7Ci0JCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCi0JCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKIAkJCQkJCSZncGlvX2F0dHJfZ3JvdXApOwotCQkJZWxzZQorCisJCQlpZiAoIXN0YXR1cyAmJiBkaXJlY3Rpb25fbWF5X2NoYW5nZSkKIAkJCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJCQkJJmRldl9hdHRyX3ZhbHVlKTsKKwkJCQkJCSZkZXZfYXR0cl9kaXJlY3Rpb24pOwogCiAJCQlpZiAoIXN0YXR1cyAmJiBncGlvX3RvX2lycShncGlvKSA+PSAwCiAJCQkJCSYmIChkaXJlY3Rpb25fbWF5X2NoYW5nZQpAQCAtNzQ0LDYgKzgzMSw1NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb19leHBvcnRfbGluayk7CiAKKworLyoqCisgKiBncGlvX3N5c2ZzX3NldF9hY3RpdmVfbG93IC0gc2V0IHRoZSBwb2xhcml0eSBvZiBncGlvIHN5c2ZzIHZhbHVlCisgKiBAZ3BpbzogZ3BpbyB0byBjaGFuZ2UKKyAqIEB2YWx1ZTogbm9uLXplcm8gdG8gdXNlIGFjdGl2ZSBsb3csIGkuZS4gaW52ZXJ0ZWQgdmFsdWVzCisgKgorICogU2V0IHRoZSBwb2xhcml0eSBvZiAvc3lzL2NsYXNzL2dwaW8vZ3Bpb04vdmFsdWUgc3lzZnMgYXR0cmlidXRlLgorICogVGhlIEdQSU8gZG9lcyBub3QgaGF2ZSB0byBiZSBleHBvcnRlZCB5ZXQuICBJZiBwb2xsKDIpIHN1cHBvcnQgaGFzCisgKiBiZWVuIGVuYWJsZWQgZm9yIGVpdGhlciByaXNpbmcgb3IgZmFsbGluZyBlZGdlLCBpdCB3aWxsIGJlCisgKiByZWNvbmZpZ3VyZWQgdG8gZm9sbG93IHRoZSBuZXcgcG9sYXJpdHkuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYW4gZXJyb3IuCisgKi8KK2ludCBncGlvX3N5c2ZzX3NldF9hY3RpdmVfbG93KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjOworCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSBOVUxMOworCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpCisJCWdvdG8gZG9uZTsKKworCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOworCisJZGVzYyA9ICZncGlvX2Rlc2NbZ3Bpb107CisKKwlpZiAodGVzdF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncykpIHsKKwkJc3RydWN0IGRldmljZSAqZGV2OworCisJCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZncGlvX2NsYXNzLCBOVUxMLCBkZXNjLCBtYXRjaF9leHBvcnQpOworCQlpZiAoZGV2ID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCX0KKworCXN0YXR1cyA9IHN5c2ZzX3NldF9hY3RpdmVfbG93KGRlc2MsIGRldiwgdmFsdWUpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKKworZG9uZToKKwlpZiAoc3RhdHVzKQorCQlwcl9kZWJ1ZygiJXM6IGdwaW8lZCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCBncGlvLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdwaW9fc3lzZnNfc2V0X2FjdGl2ZV9sb3cpOworCiAvKioKICAqIGdwaW9fdW5leHBvcnQgLSByZXZlcnNlIGVmZmVjdCBvZiBncGlvX2V4cG9ydCgpCiAgKiBAZ3BpbzogZ3BpbyB0byBtYWtlIHVuYXZhaWxhYmxlCkBAIC0xMDk0LDYgKzEyMzAsNyBAQAogCQl9CiAJCWRlc2Nfc2V0X2xhYmVsKGRlc2MsIE5VTEwpOwogCQltb2R1bGVfcHV0KGRlc2MtPmNoaXAtPm93bmVyKTsKKwkJY2xlYXJfYml0KEZMQUdfQUNUSVZFX0xPVywgJmRlc2MtPmZsYWdzKTsKIAkJY2xlYXJfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpOwogCX0gZWxzZQogCQlXQVJOX09OKGV4dHJhX2NoZWNrcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYwppbmRleCA0YmFmM2Q3Li42YzBlYmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCXZvaWQgX19pb21lbSAqZ3JlciA9ICh2b2lkIF9faW9tZW0gKikoJmxudy0+cmVnX2Jhc2UtPkdSRVJbcmVnXSk7CiAJdm9pZCBfX2lvbWVtICpnZmVyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R0ZFUltyZWddKTsKIAotCWlmIChncGlvIDwgMCB8fCBncGlvID4gbG53LT5jaGlwLm5ncGlvKQorCWlmIChncGlvID49IGxudy0+Y2hpcC5uZ3BpbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxudy0+bG9jaywgZmxhZ3MpOwogCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYyBiL2RyaXZlcnMvZ3Bpby90aW1iZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDM0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYwpAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIHRpbWJncGlvLmMgdGltYmVyZGFsZSBGUEdBIEdQSU8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIFRpbWJlcmRhbGUgRlBHQSBHUElPCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWJfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iLWdwaW8iCisKKyNkZWZpbmUgVEdQSU9WQUwJMHgwMAorI2RlZmluZSBUR1BJT0RJUgkweDA0CisjZGVmaW5lIFRHUElPX0lFUgkweDA4CisjZGVmaW5lIFRHUElPX0lTUgkweDBjCisjZGVmaW5lIFRHUElPX0lQUgkweDEwCisjZGVmaW5lIFRHUElPX0lDUgkweDE0CisjZGVmaW5lIFRHUElPX0ZMUgkweDE4CisjZGVmaW5lIFRHUElPX0xWUgkweDFjCisKK3N0cnVjdCB0aW1iZ3BpbyB7CisJdm9pZCBfX2lvbWVtCQkqbWVtYmFzZTsKKwlzcGlubG9ja190CQlsb2NrOyAvKiBtdXR1YWwgZXhjbHVzaW9uICovCisJc3RydWN0IGdwaW9fY2hpcAlncGlvOworCWludAkJCWlycV9iYXNlOworfTsKKworc3RhdGljIGludCB0aW1iZ3Bpb191cGRhdGVfYml0KHN0cnVjdCBncGlvX2NoaXAgKmdwaW8sIHVuc2lnbmVkIGluZGV4LAorCXVuc2lnbmVkIG9mZnNldCwgYm9vbCBlbmFibGVkKQoreworCXN0cnVjdCB0aW1iZ3BpbyAqdGdwaW8gPSBjb250YWluZXJfb2YoZ3Bpbywgc3RydWN0IHRpbWJncGlvLCBncGlvKTsKKwl1MzIgcmVnOworCisJc3Bpbl9sb2NrKCZ0Z3Bpby0+bG9jayk7CisJcmVnID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBvZmZzZXQpOworCisJaWYgKGVuYWJsZWQpCisJCXJlZyB8PSAoMSA8PCBpbmRleCk7CisJZWxzZQorCQlyZWcgJj0gfigxIDw8IGluZGV4KTsKKworCWlvd3JpdGUzMihyZWcsIHRncGlvLT5tZW1iYXNlICsgb2Zmc2V0KTsKKwlzcGluX3VubG9jaygmdGdwaW8tPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltYmdwaW9fZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqZ3BpbywgdW5zaWduZWQgbnIpCit7CisJcmV0dXJuIHRpbWJncGlvX3VwZGF0ZV9iaXQoZ3BpbywgbnIsIFRHUElPRElSLCB0cnVlKTsKK30KKworc3RhdGljIGludCB0aW1iZ3Bpb19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvLCB1bnNpZ25lZCBucikKK3sKKwlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gY29udGFpbmVyX29mKGdwaW8sIHN0cnVjdCB0aW1iZ3BpbywgZ3Bpbyk7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBpb3JlYWQzMih0Z3Bpby0+bWVtYmFzZSArIFRHUElPVkFMKTsKKwlyZXR1cm4gKHZhbHVlICYgKDEgPDwgbnIpKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IHRpbWJncGlvX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvLAorCQkJCQkJdW5zaWduZWQgbnIsIGludCB2YWwpCit7CisJcmV0dXJuIHRpbWJncGlvX3VwZGF0ZV9iaXQoZ3BpbywgbnIsIFRHUElPRElSLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWJncGlvX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdwaW8sCisJCQkJdW5zaWduZWQgbnIsIGludCB2YWwpCit7CisJdGltYmdwaW9fdXBkYXRlX2JpdChncGlvLCBuciwgVEdQSU9WQUwsIHZhbCAhPSAwKTsKK30KKworc3RhdGljIGludCB0aW1iZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqZ3BpbywgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB0aW1iZ3BpbyAqdGdwaW8gPSBjb250YWluZXJfb2YoZ3Bpbywgc3RydWN0IHRpbWJncGlvLCBncGlvKTsKKworCWlmICh0Z3Bpby0+aXJxX2Jhc2UgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdGdwaW8tPmlycV9iYXNlICsgb2Zmc2V0OworfQorCisvKgorICogR1BJTyBJUlEKKyAqLworc3RhdGljIHZvaWQgdGltYmdwaW9faXJxX2Rpc2FibGUodW5zaWduZWQgaXJxKQoreworCXN0cnVjdCB0aW1iZ3BpbyAqdGdwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWludCBvZmZzZXQgPSBpcnEgLSB0Z3Bpby0+aXJxX2Jhc2U7CisKKwl0aW1iZ3Bpb191cGRhdGVfYml0KCZ0Z3Bpby0+Z3Bpbywgb2Zmc2V0LCBUR1BJT19JRVIsIDApOworfQorCitzdGF0aWMgdm9pZCB0aW1iZ3Bpb19pcnFfZW5hYmxlKHVuc2lnbmVkIGlycSkKK3sKKwlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlpbnQgb2Zmc2V0ID0gaXJxIC0gdGdwaW8tPmlycV9iYXNlOworCisJdGltYmdwaW9fdXBkYXRlX2JpdCgmdGdwaW8tPmdwaW8sIG9mZnNldCwgVEdQSU9fSUVSLCAxKTsKK30KKworc3RhdGljIGludCB0aW1iZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBpcnEsIHVuc2lnbmVkIHRyaWdnZXIpCit7CisJc3RydWN0IHRpbWJncGlvICp0Z3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaW50IG9mZnNldCA9IGlycSAtIHRncGlvLT5pcnFfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsdnIsIGZscjsKKworCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHRncGlvLT5ncGlvLm5ncGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0Z3Bpby0+bG9jaywgZmxhZ3MpOworCisJbHZyID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19MVlIpOworCWZsciA9IGlvcmVhZDMyKHRncGlvLT5tZW1iYXNlICsgVEdQSU9fRkxSKTsKKworCWlmICh0cmlnZ2VyICYgKElSUV9UWVBFX0xFVkVMX0hJR0ggfCBJUlFfVFlQRV9MRVZFTF9MT1cpKSB7CisJCWZsciAmPSB+KDEgPDwgb2Zmc2V0KTsKKwkJaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9MRVZFTF9ISUdIKQorCQkJbHZyIHw9IDEgPDwgb2Zmc2V0OworCQllbHNlCisJCQlsdnIgJj0gfigxIDw8IG9mZnNldCk7CisJfQorCisJaWYgKCh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9CT1RIKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQlmbHIgfD0gMSA8PCBvZmZzZXQ7CisJCS8qIG9wcG9zaXRlIGNvbXBhcmVkIHRvIHRoZSBkYXRhc2hlZXQsIGJ1dCBpdCBtaXJyb3JzIHRoZQorCQkgKiByZWFsaXR5CisJCSAqLworCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJCWx2ciB8PSAxIDw8IG9mZnNldDsKKwkJZWxzZQorCQkJbHZyICY9IH4oMSA8PCBvZmZzZXQpOworCX0KKworCWlvd3JpdGUzMihsdnIsIHRncGlvLT5tZW1iYXNlICsgVEdQSU9fTFZSKTsKKwlpb3dyaXRlMzIoZmxyLCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0ZMUik7CisJaW93cml0ZTMyKDEgPDwgb2Zmc2V0LCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0lDUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGdwaW8tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0aW1iZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCB0aW1iZ3BpbyAqdGdwaW8gPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGlwcjsKKwlpbnQgb2Zmc2V0OworCisJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJaXByID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19JUFIpOworCWlvd3JpdGUzMihpcHIsIHRncGlvLT5tZW1iYXNlICsgVEdQSU9fSUNSKTsKKworCWZvcl9lYWNoX2JpdChvZmZzZXQsICZpcHIsIHRncGlvLT5ncGlvLm5ncGlvKQorCQlnZW5lcmljX2hhbmRsZV9pcnEodGltYmdwaW9fdG9faXJxKCZ0Z3Bpby0+Z3Bpbywgb2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdGltYmdwaW9faXJxY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTyIsCisJLmVuYWJsZQkJPSB0aW1iZ3Bpb19pcnFfZW5hYmxlLAorCS5kaXNhYmxlCT0gdGltYmdwaW9faXJxX2Rpc2FibGUsCisJLnNldF90eXBlCT0gdGltYmdwaW9faXJxX3R5cGUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0aW1iZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnIsIGk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2M7CisJc3RydWN0IHRpbWJncGlvICp0Z3BpbzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtOworCXN0cnVjdCB0aW1iZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKCFwZGF0YSB8fCBwZGF0YS0+bnJfcGlucyA+IDMyKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX21lbTsKKwl9CisKKwlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpb21lbSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9tZW07CisJfQorCisJdGdwaW8gPSBremFsbG9jKHNpemVvZigqdGdwaW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRncGlvKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX21lbTsKKwl9CisJdGdwaW8tPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOworCisJc3Bpbl9sb2NrX2luaXQoJnRncGlvLT5sb2NrKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSksCisJCURSSVZFUl9OQU1FKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlcXVlc3Q7CisJfQorCisJdGdwaW8tPm1lbWJhc2UgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOworCWlmICghdGdwaW8tPm1lbWJhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlnYyA9ICZ0Z3Bpby0+Z3BpbzsKKworCWdjLT5sYWJlbCA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOworCWdjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWdjLT5kZXYgPSAmcGRldi0+ZGV2OworCWdjLT5kaXJlY3Rpb25faW5wdXQgPSB0aW1iZ3Bpb19ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlnYy0+Z2V0ID0gdGltYmdwaW9fZ3Bpb19nZXQ7CisJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSB0aW1iZ3Bpb19ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJZ2MtPnNldCA9IHRpbWJncGlvX2dwaW9fc2V0OworCWdjLT50b19pcnEgPSAoaXJxID49IDAgJiYgdGdwaW8tPmlycV9iYXNlID4gMCkgPyB0aW1iZ3Bpb190b19pcnEgOiBOVUxMOworCWdjLT5kYmdfc2hvdyA9IE5VTEw7CisJZ2MtPmJhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCWdjLT5uZ3BpbyA9IHBkYXRhLT5ucl9waW5zOworCWdjLT5jYW5fc2xlZXAgPSAwOworCisJZXJyID0gZ3Bpb2NoaXBfYWRkKGdjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jaGlwYWRkOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdGdwaW8pOworCisJLyogbWFrZSBzdXJlIHRvIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMigweDAsIHRncGlvLT5tZW1iYXNlICsgVEdQSU9fSUVSKTsKKworCWlmIChpcnEgPCAwIHx8IHRncGlvLT5pcnFfYmFzZSA8PSAwKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnJfcGluczsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHRncGlvLT5pcnFfYmFzZSArIGksCisJCQkmdGltYmdwaW9faXJxY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEsICJtdXgiKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEodGdwaW8tPmlycV9iYXNlICsgaSwgdGdwaW8pOworI2lmZGVmIENPTkZJR19BUk0KKwkJc2V0X2lycV9mbGFncyh0Z3Bpby0+aXJxX2Jhc2UgKyBpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisjZW5kaWYKKwl9CisKKwlzZXRfaXJxX2RhdGEoaXJxLCB0Z3Bpbyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLCB0aW1iZ3Bpb19pcnEpOworCisJcmV0dXJuIDA7CisKK2Vycl9jaGlwYWRkOgorCWlvdW5tYXAodGdwaW8tPm1lbWJhc2UpOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOworZXJyX3JlcXVlc3Q6CisJa2ZyZWUodGdwaW8pOworZXJyX21lbToKKwlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUiOiBGYWlsZWQgdG8gcmVnaXN0ZXIgR1BJT3M6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGltYmdwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdGltYmdwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICppb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlpZiAoaXJxID49IDAgJiYgdGdwaW8tPmlycV9iYXNlID4gMCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9waW5zOyBpKyspIHsKKwkJCXNldF9pcnFfY2hpcCh0Z3Bpby0+aXJxX2Jhc2UgKyBpLCBOVUxMKTsKKwkJCXNldF9pcnFfY2hpcF9kYXRhKHRncGlvLT5pcnFfYmFzZSArIGksIE5VTEwpOworCQl9CisKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgTlVMTCk7CisJCXNldF9pcnFfZGF0YShpcnEsIE5VTEwpOworCX0KKworCWVyciA9IGdwaW9jaGlwX3JlbW92ZSgmdGdwaW8tPmdwaW8pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSI6IGZhaWxlZCB0byByZW1vdmUgZ3Bpb19jaGlwXG4iKTsKKworCWlvdW5tYXAodGdwaW8tPm1lbWJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpb21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9tZW0pKTsKKwlrZnJlZSh0Z3Bpbyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1iZ3Bpb19wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gdGltYmdwaW9fcHJvYmUsCisJLnJlbW92ZQkJPSB0aW1iZ3Bpb19yZW1vdmUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdGltYmdwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRpbWJncGlvX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aW1iZ3Bpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpbWJncGlvX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRpbWJncGlvX2luaXQpOworbW9kdWxlX2V4aXQodGltYmdwaW9fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVGltYmVyZGFsZSBHUElPIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiTW9jZWFuIExhYm9yYXRvcmllcyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKaW5kZXggNDkzODRhNy4uN2ZlODgxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAKIC8qCkBAIC04MCw3ICs4MCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdHdsNDAzMF93cml0ZSh1OCBhZGRyZXNzLCB1OCBkYXRhKQogewotCXJldHVybiB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCBkYXRhLCBhZGRyZXNzKTsKKwlyZXR1cm4gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCBkYXRhLCBhZGRyZXNzKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTExNyw3ICsxMTcsNyBAQAogCXU4IGRhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlyZXQgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0dQSU8sICZkYXRhLCBhZGRyZXNzKTsKKwlyZXQgPSB0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfR1BJTywgJmRhdGEsIGFkZHJlc3MpOwogCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBkYXRhOwogfQogCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJY2FjaGVkX2xlZGVuICY9IH5tYXNrOwogCWVsc2UKIAkJY2FjaGVkX2xlZGVuIHw9IG1hc2s7Ci0Jc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCBjYWNoZWRfbGVkZW4sCisJc3RhdHVzID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIGNhY2hlZF9sZWRlbiwKIAkJCVRXTDQwMzBfTEVEX0xFREVOKTsKIAltdXRleF91bmxvY2soJmdwaW9fbG9jayk7CiB9CkBAIC0yMjMsMjMgKzIyMywyMyBAQAogCQl9CiAKIAkJLyogaW5pdGlhbGl6ZSBQV00gdG8gYWx3YXlzLWRyaXZlICovCi0JCXN0YXR1cyA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KG1vZHVsZSwgMHg3ZiwKKwkJc3RhdHVzID0gdHdsX2kyY193cml0ZV91OChtb2R1bGUsIDB4N2YsCiAJCQkJVFdMNDAzMF9QV014X1BXTXhPRkYpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gZG9uZTsKLQkJc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgobW9kdWxlLCAweDdmLAorCQlzdGF0dXMgPSB0d2xfaTJjX3dyaXRlX3U4KG1vZHVsZSwgMHg3ZiwKIAkJCQlUV0w0MDMwX1BXTXhfUFdNeE9OKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlnb3RvIGRvbmU7CiAKIAkJLyogaW5pdCBMRUQgdG8gbm90LWRyaXZlbiAoaGlnaCkgKi8KIAkJbW9kdWxlID0gVFdMNDAzMF9NT0RVTEVfTEVEOwotCQlzdGF0dXMgPSB0d2w0MDMwX2kyY19yZWFkX3U4KG1vZHVsZSwgJmNhY2hlZF9sZWRlbiwKKwkJc3RhdHVzID0gdHdsX2kyY19yZWFkX3U4KG1vZHVsZSwgJmNhY2hlZF9sZWRlbiwKIAkJCQlUV0w0MDMwX0xFRF9MRURFTik7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBkb25lOwogCQljYWNoZWRfbGVkZW4gJj0gfmxlZGNscl9tYXNrOwotCQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZV91OChtb2R1bGUsIGNhY2hlZF9sZWRlbiwKKwkJc3RhdHVzID0gdHdsX2kyY193cml0ZV91OChtb2R1bGUsIGNhY2hlZF9sZWRlbiwKIAkJCQlUV0w0MDMwX0xFRF9MRURFTik7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBkb25lOwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJCW1lc3NhZ2VbaV0gPSBiaXRfbWFzazsKIAl9CiAKLQlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGUoVFdMNDAzMF9NT0RVTEVfR1BJTywgbWVzc2FnZSwKKwlyZXR1cm4gdHdsX2kyY193cml0ZShUV0w0MDMwX01PRFVMRV9HUElPLCBtZXNzYWdlLAogCQkJCVJFR19HUElPUFVQRENUUjEsIDUpOwogfQogCkBAIC0zODcsNyArMzg3LDcgQEAKIAlkZWJvdW5jZSA+Pj0gODsKIAltZXNzYWdlWzNdID0gKGRlYm91bmNlICYgMHgwMyk7CiAKLQlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGUoVFdMNDAzMF9NT0RVTEVfR1BJTywgbWVzc2FnZSwKKwlyZXR1cm4gdHdsX2kyY193cml0ZShUV0w0MDMwX01PRFVMRV9HUElPLCBtZXNzYWdlLAogCQkJCVJFR19HUElPX0RFQkVOMSwgMyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby93bTgzMXgtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3dtODMxeC1ncGlvLmMKaW5kZXggZjljMDlhNS4uYjQ0NjhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3dtODMxeC1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL3dtODMxeC1ncGlvLmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L3BkYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9ncGlvLmg+Ci0KLSNkZWZpbmUgV004MzFYX0dQSU9fTUFYIDE2CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9pcnEuaD4KIAogc3RydWN0IHdtODMxeF9ncGlvIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXg7CkBAIC04MCw2ICs3OSwxNyBAQAogCQkJdmFsdWUgPDwgb2Zmc2V0KTsKIH0KIAorc3RhdGljIGludCB3bTgzMXhfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB3bTgzMXhfZ3BpbyAqd204MzF4X2dwaW8gPSB0b193bTgzMXhfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfZ3Bpby0+d204MzF4OworCisJaWYgKCF3bTgzMXgtPmlycV9iYXNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB3bTgzMXgtPmlycV9iYXNlICsgV004MzFYX0lSUV9HUElPXzEgKyBvZmZzZXQ7Cit9CisKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyB2b2lkIHdtODMxeF9ncGlvX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKQEAgLTE3NSw2ICsxODUsNyBAQAogCS5nZXQJCQk9IHdtODMxeF9ncGlvX2dldCwKIAkuZGlyZWN0aW9uX291dHB1dAk9IHdtODMxeF9ncGlvX2RpcmVjdGlvbl9vdXQsCiAJLnNldAkJCT0gd204MzF4X2dwaW9fc2V0LAorCS50b19pcnEJCQk9IHdtODMxeF9ncGlvX3RvX2lycSwKIAkuZGJnX3Nob3cJCT0gd204MzF4X2dwaW9fZGJnX3Nob3csCiAJLmNhbl9zbGVlcAkJPSAxLAogfTsKQEAgLTE5Miw3ICsyMDMsNyBAQAogCiAJd204MzF4X2dwaW8tPndtODMxeCA9IHdtODMxeDsKIAl3bTgzMXhfZ3Bpby0+Z3Bpb19jaGlwID0gdGVtcGxhdGVfY2hpcDsKLQl3bTgzMXhfZ3Bpby0+Z3Bpb19jaGlwLm5ncGlvID0gV004MzFYX0dQSU9fTUFYOworCXdtODMxeF9ncGlvLT5ncGlvX2NoaXAubmdwaW8gPSB3bTgzMXgtPm51bV9ncGlvOwogCXdtODMxeF9ncGlvLT5ncGlvX2NoaXAuZGV2ID0gJnBkZXYtPmRldjsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmdwaW9fYmFzZSkKIAkJd204MzF4X2dwaW8tPmdwaW9fY2hpcC5iYXNlID0gcGRhdGEtPmdwaW9fYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA0NzBlZjY3Li4zOWM1YWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0zMCw2ICszMCw3IEBACiBvYmotJChDT05GSUdfRFJNX0k5MTUpICArPSBpOTE1Lwogb2JqLSQoQ09ORklHX0RSTV9TSVMpICAgKz0gc2lzLwogb2JqLSQoQ09ORklHX0RSTV9TQVZBR0UpKz0gc2F2YWdlLworb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpKz0gdm13Z2Z4Lwogb2JqLSQoQ09ORklHX0RSTV9WSUEpCSs9dmlhLwogb2JqLSQoQ09ORklHX0RSTV9OT1VWRUFVKSArPW5vdXZlYXUvCiBvYmoteQkJCSs9IGkyYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IGZmMmYxMDQuLjc2NmM0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtNDM0LDExICs0MzQsMTEgQEAKICAqIExvb2tzIHVwIHRoZSBpb2N0bCBmdW5jdGlvbiBpbiB0aGUgOjppb2N0bHMgdGFibGUsIGNoZWNraW5nIGZvciByb290CiAgKiBwcmV2aWxlZ2VzIGlmIHNvIHJlcXVpcmVkLCBhbmQgZGlzcGF0Y2hlcyB0byB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbi4KICAqLwotaW50IGRybV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2xvbmcgZHJtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgKmlvY3RsOwogCWRybV9pb2N0bF90ICpmdW5jOwogCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOwpAQCAtNDQ2LDYgKzQ0Niw3IEBACiAJY2hhciBzdGFja19rZGF0YVsxMjhdOwogCWNoYXIgKmtkYXRhID0gTlVMTDsKIAorCWRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKIAlhdG9taWNfaW5jKCZkZXYtPmlvY3RsX2NvdW50KTsKIAlhdG9taWNfaW5jKCZkZXYtPmNvdW50c1tfRFJNX1NUQVRfSU9DVExTXSk7CiAJKytmaWxlX3ByaXYtPmlvY3RsX2NvdW50OwpAQCAtNTAxLDcgKzUwMiwxMyBAQAogCQkJCWdvdG8gZXJyX2kxOwogCQkJfQogCQl9Ci0JCXJldGNvZGUgPSBmdW5jKGRldiwga2RhdGEsIGZpbGVfcHJpdik7CisJCWlmIChpb2N0bC0+ZmxhZ3MgJiBEUk1fVU5MT0NLRUQpCisJCQlyZXRjb2RlID0gZnVuYyhkZXYsIGtkYXRhLCBmaWxlX3ByaXYpOworCQllbHNlIHsKKwkJCWxvY2tfa2VybmVsKCk7CisJCQlyZXRjb2RlID0gZnVuYyhkZXYsIGtkYXRhLCBmaWxlX3ByaXYpOworCQkJdW5sb2NrX2tlcm5lbCgpOworCQl9CiAKIAkJaWYgKGNtZCAmIElPQ19PVVQpIHsKIAkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBrZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYzM5YjI2Zi4uNWM5Zjc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTkxMyw3ICs5MTMsNyBAQAogCWNvbnN0IGludCByYXRlc1tdID0geyA2MCwgODUsIDc1LCA2MCwgNTAgfTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaW50IHdpZHRoLCBoZWlnaHQ7CisJCWludCB1bmluaXRpYWxpemVkX3Zhcih3aWR0aCksIGhlaWdodDsKIAkJY3Z0ID0gJih0aW1pbmctPmRhdGEub3RoZXJfZGF0YS5kYXRhLmN2dFtpXSk7CiAKIAkJaGVpZ2h0ID0gKGN2dC0+Y29kZVswXSArICgoY3Z0LT5jb2RlWzFdICYgMHhmMCkgPDwgOCkgKyAxKSAqIDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKaW5kZXggMjgyZDlmZC4uZDYxZDE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkgICZ2ZXJzaW9uLT5kZXNjKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwKIAkJCURSTV9JT0NUTF9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyl2ZXJzaW9uKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTQ1LDggKzE0NSw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9VTklRVUUsICh1bnNpZ25lZCBsb25nKXUpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfR0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTc0LDggKzE3Myw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tYXAzMiB7CkBAIC0yMDUsOCArMjAzLDcgQEAKIAlpZiAoX19wdXRfdXNlcihpZHgsICZtYXAtPm9mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjQ2LDggKzI0Myw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobTMyLmZsYWdzLCAmbWFwLT5mbGFncykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUREX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FERF9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjg0LDggKzI4MCw3IEBACiAJaWYgKF9fcHV0X3VzZXIoKHZvaWQgKikodW5zaWduZWQgbG9uZyloYW5kbGUsICZtYXAtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9STV9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUk1fTUFQLCAodW5zaWduZWQgbG9uZyltYXApOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpZW50MzIgewpAQCAtMzE0LDggKzMwOSw3IEBACiAJaWYgKF9fcHV0X3VzZXIoaWR4LCAmY2xpZW50LT5pZHgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9DTElFTlQsICh1bnNpZ25lZCBsb25nKWNsaWVudCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfQ0xJRU5ULCAodW5zaWduZWQgbG9uZyljbGllbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM1MSw4ICszNDUsNyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgc3RhdHMsIHNpemVvZigqc3RhdHMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9HRVRfU1RBVFMsICh1bnNpZ25lZCBsb25nKXN0YXRzKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9TVEFUUywgKHVuc2lnbmVkIGxvbmcpc3RhdHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM5NSw4ICszODgsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGFncF9zdGFydCwgJmJ1Zi0+YWdwX3N0YXJ0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BRERfQlVGUywgKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FERF9CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQyNyw4ICs0MTksNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGIzMi5oaWdoX21hcmssICZidWYtPmhpZ2hfbWFyaykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NQVJLX0JVRlMsICh1bnNpZ25lZCBsb25nKWJ1Zik7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUFSS19CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8zMiB7CkBAIC00NjksOCArNDYwLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihsaXN0LCAmcmVxdWVzdC0+bGlzdCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfSU5GT19CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0lORk9fQlVGUywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTMxLDggKzUyMSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobGlzdCwgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NzgsOCArNTY3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfRlJFRV9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9GUkVFX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwMzIgewpAQCAtNjA1LDggKzU5Myw3IEBACiAJCQkgICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9nZXRzYXJlYWN0eChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTYyOCw4ICs2MTUsNyBAQAogCWlmIChfX3B1dF91c2VyKGN0eF9pZCwgJnJlcXVlc3QtPmN0eF9pZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC02NjQsOCArNjUwLDcgQEAKIAkJCSAgJnJlcy0+Y29udGV4dHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1JFU19DVFgsICh1bnNpZ25lZCBsb25nKXJlcyk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SRVNfQ1RYLCAodW5zaWduZWQgbG9uZylyZXMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTcxOCw4ICs3MDMsNyBAQAogCQkJICAmZC0+cmVxdWVzdF9zaXplcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfRE1BLCAodW5zaWduZWQgbG9uZylkKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0RNQSwgKHVuc2lnbmVkIGxvbmcpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNzUxLDggKzczNSw3IEBACiAJaWYgKHB1dF91c2VyKG0zMi5tb2RlLCAmbW9kZS0+bW9kZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfRU5BQkxFLCAodW5zaWduZWQgbG9uZyltb2RlKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRU5BQkxFLCAodW5zaWduZWQgbG9uZyltb2RlKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9pbmZvMzIgewpAQCAtNzgxLDggKzc2NCw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbmZvLCBzaXplb2YoKmluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtODI3LDE2ICs4MDksMTQgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi50eXBlLCAmcmVxdWVzdC0+dHlwZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUdQX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChfX2dldF91c2VyKHJlcTMyLmhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkKIAkgICAgfHwgX19nZXRfdXNlcihyZXEzMi5waHlzaWNhbCwgJnJlcXVlc3QtPnBoeXNpY2FsKQogCSAgICB8fCBjb3B5X3RvX3VzZXIoYXJncCwgJnJlcTMyLCBzaXplb2YocmVxMzIpKSkgewotCQlkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSAgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwkJZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtODU2LDggKzgzNiw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZzMyIHsKQEAgLTg4MSw4ICs4NjAsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLm9mZnNldCwgJnJlcXVlc3QtPm9mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfQklORCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfQUdQX0JJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fYWdwX3VuYmluZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTg5OCw4ICs4NzYsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KICNlbmRpZgkJCQkvKiBfX09TX0hBU19BR1AgKi8KIApAQCAtOTIzLDggKzkwMCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoeCwgJnJlcXVlc3QtPnNpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1NHX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1NHX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC05NTAsOCArOTI2LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcih4IDw8IFBBR0VfU0hJRlQsICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCkBAIC05ODEsOCArOTU2LDcgQEAKIAkgICAgX19wdXRfdXNlcih1cGRhdGUzMi5kYXRhLCAmcmVxdWVzdC0+ZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCXJldHVybiBlcnI7CiB9CiAjZW5kaWYKQEAgLTEwMjMsOCArOTk3LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5yZXF1ZXN0LnNpZ25hbCwgJnJlcXVlc3QtPnJlcXVlc3Quc2lnbmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9XQUlUX1ZCTEFOSywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA5NCwxNiArMTA2NywxNCBAQAogCSAqIHRoYW4gYWx3YXlzIGZhaWxpbmcuCiAJICovCiAJaWYgKG5yID49IEFSUkFZX1NJWkUoZHJtX2NvbXBhdF9pb2N0bHMpKQotCQlyZXR1cm4gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJCXJldHVybiBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJZm4gPSBkcm1fY29tcGF0X2lvY3Rsc1tucl07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwppbmRleCBkN2Q3ZWFjLi5jZGVjMzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQpIHsKIAkJCWlmICghYmVzdF9tYXRjaCkKIAkJCQlyZXR1cm4gZW50cnk7Ci0JCQlpZiAoc2l6ZSA8IGJlc3Rfc2l6ZSkgeworCQkJaWYgKGVudHJ5LT5zaXplIDwgYmVzdF9zaXplKSB7CiAJCQkJYmVzdCA9IGVudHJ5OwogCQkJCWJlc3Rfc2l6ZSA9IGVudHJ5LT5zaXplOwogCQkJfQpAQCAtNDA4LDcgKzQwOCw3IEBACiAJCWlmIChlbnRyeS0+c2l6ZSA+PSBzaXplICsgd2FzdGVkKSB7CiAJCQlpZiAoIWJlc3RfbWF0Y2gpCiAJCQkJcmV0dXJuIGVudHJ5OwotCQkJaWYgKHNpemUgPCBiZXN0X3NpemUpIHsKKwkJCWlmIChlbnRyeS0+c2l6ZSA8IGJlc3Rfc2l6ZSkgewogCQkJCWJlc3QgPSBlbnRyeTsKIAkJCQliZXN0X3NpemUgPSBlbnRyeS0+c2l6ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKaW5kZXggOTQyMmE3NC4uODE2ODFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKQEAgLTQwOCw2ICs0MDgsMTEgQEAKIAogCWNoNzAwNl9pbmZvKGNsaWVudCwgIkRldGVjdGVkIHZlcnNpb24gSUQ6ICV4XG4iLCB2YWwpOwogCisJLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIGJ1dCBvdGhlcndpc2UgSSBnZXQgbm8KKwkgKiBzaWduYWwuCisJICovCisJY2g3MDA2X3dyaXRlKGNsaWVudCwgMHgzZCwgMHgwKTsKKwogCXJldHVybiAwOwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jCmluZGV4IDg3ZjU0NDUuLmU0NDdkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X21vZGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL2NoNzAwNl9tb2RlLmMKQEAgLTQyNywxMSArNDI3LDYgQEAKIAljaDcwMDZfbG9hZF9yZWcoY2xpZW50LCBzdGF0ZSwgQ0g3MDA2X1NVQkNfSU5DNyk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9QTExfQ09OVFJPTCk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9DQUxDX1NVQkNfSU5DMCk7Ci0KLQkvKiBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGZvciwgYnV0IG90aGVyd2lzZSBJIGdldCBubwotCSAqIHNpZ25hbC4KLQkgKi8KLQljaDcwMDZfd3JpdGUoY2xpZW50LCAweDNkLCAweDApOwogfQogCiB2b2lkIGNoNzAwNl9zdGF0ZV9zYXZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kbWEuYwppbmRleCA3ZDFkODhjLi5kZTMyZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZG1hLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgxMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MTBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5jCmluZGV4IGZhYmI5YTguLmMxZTAyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuYwpAQCAtNTksNyArNTksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kbWEuYwppbmRleCA4NzdiZjZjLi4wNmJkNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZG1hLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgzMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MzBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5jCmluZGV4IDM4OTU5N2UuLjQ0Zjk5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyZmEyMTc4Li4yNDI4NmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTMyOSw3ICszMjksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX2dlbV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jCmluZGV4IDFmZTY4YTIuLjEzYjAyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lvYzMyLmMKQEAgLTY2LDggKzY2LDcgQEAKIAkJCSAgJmJhdGNoYnVmZmVyLT5jbGlwcmVjdHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9CQVRDSEJVRkZFUiwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSLAogCQkJICh1bnNpZ25lZCBsb25nKWJhdGNoYnVmZmVyKTsKIH0KIApAQCAtMTAyLDggKzEwMSw4IEBACiAJCQkgICZjbWRidWZmZXItPmNsaXByZWN0cykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwgKHVuc2lnbmVkIGxvbmcpY21kYnVmZmVyKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwKKwkJCSAodW5zaWduZWQgbG9uZyljbWRidWZmZXIpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfZW1pdDMyIHsKQEAgLTEyNSw4ICsxMjQsOCBAQAogCQkJICAmcmVxdWVzdC0+aXJxX3NlcSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0lSUV9FTUlULAorCQkJICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0zMiB7CiAJaW50IHBhcmFtOwpAQCAtMTQ5LDggKzE0OCw4IEBACiAJCQkgICZyZXF1ZXN0LT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLAorCQkJICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fYWxsb2MzMiB7CkBAIC0xNzgsOCArMTc3LDggQEAKIAkJCSAgJnJlcXVlc3QtPnJlZ2lvbl9vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9BTExPQywKKwkJCSAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogZHJtX2lvY3RsX2NvbXBhdF90ICppOTE1X2NvbXBhdF9pb2N0bHNbXSA9IHsKQEAgLTIxMSwxMiArMjEwLDEwIEBACiAJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKGk5MTVfY29tcGF0X2lvY3RscykpCiAJCWZuID0gaTkxNV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKaW5kZXggOTdlZTU2Ni4uZGRmZTE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5vcGVuID0gZHJtX29wZW4sCiAJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkubW1hcCA9IGRybV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pb2MzMi5jCmluZGV4IDMwZDAwNDcuLmMxZjg3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYwpAQCAtMTAwLDggKzEwMCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX01HQV9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfZ2V0cGFyYW0zMiB7CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCSAgJmdldHBhcmFtLT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9kcm1fYm9vdHN0cmFwMzIgewpAQCAtMTY2LDggKzE2NCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLmFncF9zaXplLCAmZG1hX2Jvb3RzdHJhcC0+YWdwX3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01HQV9ETUFfQk9PVFNUUkFQLAorCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAsCiAJCQkodW5zaWduZWQgbG9uZylkbWFfYm9vdHN0cmFwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjIwLDEyICsyMTcsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG1nYV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCmluZGV4IGQ4MjNlNjMuLmIxYmMxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwpAQCAtMzAsMTEgKzMwLDEyIEBACiAJICB2aWEgZGVidWdmcy4KIAogbWVudSAiSTJDIGVuY29kZXIgb3IgaGVscGVyIGNoaXBzIgotICAgICBkZXBlbmRzIG9uIERSTQorICAgICBkZXBlbmRzIG9uIERSTSAmJiBJMkMKIAogY29uZmlnIERSTV9JMkNfQ0g3MDA2CiAJdHJpc3RhdGUgIkNocm9udGVsIGNoNzAwNiBUViBlbmNvZGVyIgotCWRlZmF1bHQgbSBpZiBEUk1fTk9VVkVBVQorCWRlcGVuZHMgb24gRFJNX05PVVZFQVUKKwlkZWZhdWx0IG0KIAloZWxwCiAJICBTdXBwb3J0IGZvciBDaHJvbnRlbCBjaDcwMDYgYW5kIHNpbWlsYXIgVFYgZW5jb2RlcnMsIGZvdW5kCiAJICBvbiBzb21lIG5WaWRpYSB2aWRlbyBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKaW5kZXggMWQ5MGQ0ZC4uNDhjMjkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKQEAgLTgsMTQgKzgsMTUgQEAKICAgICAgICAgICAgICBub3V2ZWF1X3NnZG1hLm8gbm91dmVhdV9kbWEubyBcCiAgICAgICAgICAgICAgbm91dmVhdV9iby5vIG5vdXZlYXVfZmVuY2UubyBub3V2ZWF1X2dlbS5vIG5vdXZlYXVfdHRtLm8gXAogICAgICAgICAgICAgIG5vdXZlYXVfaHcubyBub3V2ZWF1X2NhbGMubyBub3V2ZWF1X2Jpb3MubyBub3V2ZWF1X2kyYy5vIFwKLQkgICAgIG5vdXZlYXVfZGlzcGxheS5vIG5vdXZlYXVfY29ubmVjdG9yLm8gbm91dmVhdV9mYmNvbi5vIFwKLQkgICAgIG5vdXZlYXVfZHAubyBcCisgICAgICAgICAgICAgbm91dmVhdV9kaXNwbGF5Lm8gbm91dmVhdV9jb25uZWN0b3IubyBub3V2ZWF1X2ZiY29uLm8gXAorICAgICAgICAgICAgIG5vdXZlYXVfZHAubyBub3V2ZWF1X2dyY3R4Lm8gXAogICAgICAgICAgICAgIG52MDRfdGltZXIubyBcCiAgICAgICAgICAgICAgbnYwNF9tYy5vIG52NDBfbWMubyBudjUwX21jLm8gXAogICAgICAgICAgICAgIG52MDRfZmIubyBudjEwX2ZiLm8gbnY0MF9mYi5vIFwKICAgICAgICAgICAgICBudjA0X2ZpZm8ubyBudjEwX2ZpZm8ubyBudjQwX2ZpZm8ubyBudjUwX2ZpZm8ubyBcCiAgICAgICAgICAgICAgbnYwNF9ncmFwaC5vIG52MTBfZ3JhcGgubyBudjIwX2dyYXBoLm8gXAogICAgICAgICAgICAgIG52NDBfZ3JhcGgubyBudjUwX2dyYXBoLm8gXAorICAgICAgICAgICAgIG52NDBfZ3JjdHgubyBcCiAgICAgICAgICAgICAgbnYwNF9pbnN0bWVtLm8gbnY1MF9pbnN0bWVtLm8gXAogICAgICAgICAgICAgIG52NTBfY3J0Yy5vIG52NTBfZGFjLm8gbnY1MF9zb3IubyBcCiAgICAgICAgICAgICAgbnY1MF9jdXJzb3IubyBudjUwX2Rpc3BsYXkubyBudjUwX2ZiY29uLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwppbmRleCA1ZWVjNWVkLi5iYTE0Mzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwpAQCAtMTgxLDQzICsxODEsNDIgQEAKIAljb25zdCBjaGFyIGRlc2NbOF07CiAJdm9pZCAoKmxvYWRiaW9zKShzdHJ1Y3QgZHJtX2RldmljZSAqLCB1aW50OF90ICopOwogCWNvbnN0IGJvb2wgcnc7Ci0JaW50IHNjb3JlOwogfTsKIAogc3RhdGljIHN0cnVjdCBtZXRob2RzIG52MDRfbWV0aG9kc1tdID0gewogCXsgIlBST00iLCBsb2FkX3ZiaW9zX3Byb20sIGZhbHNlIH0sCiAJeyAiUFJBTUlOIiwgbG9hZF92Ymlvc19wcmFtaW4sIHRydWUgfSwKIAl7ICJQQ0lST00iLCBsb2FkX3ZiaW9zX3BjaSwgdHJ1ZSB9LAotCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBtZXRob2RzIG52NTBfbWV0aG9kc1tdID0gewogCXsgIlBSQU1JTiIsIGxvYWRfdmJpb3NfcHJhbWluLCB0cnVlIH0sCiAJeyAiUFJPTSIsIGxvYWRfdmJpb3NfcHJvbSwgZmFsc2UgfSwKIAl7ICJQQ0lST00iLCBsb2FkX3ZiaW9zX3BjaSwgdHJ1ZSB9LAotCXsgfQogfTsKIAorI2RlZmluZSBNRVRIT0RDTlQgMworCiBzdGF0aWMgYm9vbCBOVlNoYWRvd1ZCSU9TKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ4X3QgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbWV0aG9kcyAqbWV0aG9kcywgKm1ldGhvZDsKKwlzdHJ1Y3QgbWV0aG9kcyAqbWV0aG9kczsKKwlpbnQgaTsKIAlpbnQgdGVzdHNjb3JlID0gMzsKKwlpbnQgc2NvcmVzW01FVEhPRENOVF07CiAKIAlpZiAobm91dmVhdV92YmlvcykgewotCQltZXRob2QgPSBudjA0X21ldGhvZHM7Ci0JCXdoaWxlIChtZXRob2QtPmxvYWRiaW9zKSB7Ci0JCQlpZiAoIXN0cmNhc2VjbXAobm91dmVhdV92YmlvcywgbWV0aG9kLT5kZXNjKSkKKwkJbWV0aG9kcyA9IG52MDRfbWV0aG9kczsKKwkJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKQorCQkJaWYgKCFzdHJjYXNlY21wKG5vdXZlYXVfdmJpb3MsIG1ldGhvZHNbaV0uZGVzYykpCiAJCQkJYnJlYWs7Ci0JCQltZXRob2QrKzsKLQkJfQogCi0JCWlmIChtZXRob2QtPmxvYWRiaW9zKSB7CisJCWlmIChpIDwgTUVUSE9EQ05UKSB7CiAJCQlOVl9JTkZPKGRldiwgIkF0dGVtcHRpbmcgdG8gdXNlIEJJT1MgaW1hZ2UgZnJvbSAlc1xuIiwKLQkJCQltZXRob2QtPmRlc2MpOworCQkJCW1ldGhvZHNbaV0uZGVzYyk7CiAKLQkJCW1ldGhvZC0+bG9hZGJpb3MoZGV2LCBkYXRhKTsKLQkJCWlmIChzY29yZV92YmlvcyhkZXYsIGRhdGEsIG1ldGhvZC0+cncpKQorCQkJbWV0aG9kc1tpXS5sb2FkYmlvcyhkZXYsIGRhdGEpOworCQkJaWYgKHNjb3JlX3ZiaW9zKGRldiwgZGF0YSwgbWV0aG9kc1tpXS5ydykpCiAJCQkJcmV0dXJuIHRydWU7CiAJCX0KIApAQCAtMjI5LDI4ICsyMjgsMjQgQEAKIAllbHNlCiAJCW1ldGhvZHMgPSBudjUwX21ldGhvZHM7CiAKLQltZXRob2QgPSBtZXRob2RzOwotCXdoaWxlIChtZXRob2QtPmxvYWRiaW9zKSB7CisJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKSB7CiAJCU5WX1RSQUNFKGRldiwgIkF0dGVtcHRpbmcgdG8gbG9hZCBCSU9TIGltYWdlIGZyb20gJXNcbiIsCi0JCQkgbWV0aG9kLT5kZXNjKTsKKwkJCSBtZXRob2RzW2ldLmRlc2MpOwogCQlkYXRhWzBdID0gZGF0YVsxXSA9IDA7CS8qIGF2b2lkIHJldXNlIG9mIHByZXZpb3VzIGltYWdlICovCi0JCW1ldGhvZC0+bG9hZGJpb3MoZGV2LCBkYXRhKTsKLQkJbWV0aG9kLT5zY29yZSA9IHNjb3JlX3ZiaW9zKGRldiwgZGF0YSwgbWV0aG9kLT5ydyk7Ci0JCWlmIChtZXRob2QtPnNjb3JlID09IHRlc3RzY29yZSkKKwkJbWV0aG9kc1tpXS5sb2FkYmlvcyhkZXYsIGRhdGEpOworCQlzY29yZXNbaV0gPSBzY29yZV92YmlvcyhkZXYsIGRhdGEsIG1ldGhvZHNbaV0ucncpOworCQlpZiAoc2NvcmVzW2ldID09IHRlc3RzY29yZSkKIAkJCXJldHVybiB0cnVlOwotCQltZXRob2QrKzsKIAl9CiAKIAl3aGlsZSAoLS10ZXN0c2NvcmUgPiAwKSB7Ci0JCW1ldGhvZCA9IG1ldGhvZHM7Ci0JCXdoaWxlIChtZXRob2QtPmxvYWRiaW9zKSB7Ci0JCQlpZiAobWV0aG9kLT5zY29yZSA9PSB0ZXN0c2NvcmUpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1FVEhPRENOVDsgaSsrKSB7CisJCQlpZiAoc2NvcmVzW2ldID09IHRlc3RzY29yZSkgewogCQkJCU5WX1RSQUNFKGRldiwgIlVzaW5nIEJJT1MgaW1hZ2UgZnJvbSAlc1xuIiwKLQkJCQkJIG1ldGhvZC0+ZGVzYyk7Ci0JCQkJbWV0aG9kLT5sb2FkYmlvcyhkZXYsIGRhdGEpOworCQkJCQkgbWV0aG9kc1tpXS5kZXNjKTsKKwkJCQltZXRob2RzW2ldLmxvYWRiaW9zKGRldiwgZGF0YSk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0JCQltZXRob2QrKzsKIAkJfQogCX0KIApAQCAtMjYxLDEwICsyNTYsNyBAQAogc3RydWN0IGluaXRfdGJsX2VudHJ5IHsKIAljaGFyICpuYW1lOwogCXVpbnQ4X3QgaWQ7Ci0JaW50IGxlbmd0aDsKLQlpbnQgbGVuZ3RoX29mZnNldDsKLQlpbnQgbGVuZ3RoX211bHRpcGxpZXI7Ci0JYm9vbCAoKmhhbmRsZXIpKHN0cnVjdCBudmJpb3MgKiwgdWludDE2X3QsIHN0cnVjdCBpbml0X2V4ZWMgKik7CisJaW50ICgqaGFuZGxlcikoc3RydWN0IG52YmlvcyAqLCB1aW50MTZfdCwgc3RydWN0IGluaXRfZXhlYyAqKTsKIH07CiAKIHN0cnVjdCBiaXRfZW50cnkgewpAQCAtODIwLDcgKzgxMiw3IEBACiAJfQogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19yZXN0cmljdF9wcm9nKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC04NTIsOSArODQ0LDEwIEBACiAJdWludDMyX3QgcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA3XSk7CiAJdWludDhfdCBjb25maWc7CiAJdWludDMyX3QgY29uZmlndmFsOworCWludCBsZW4gPSAxMSArIGNvdW50ICogNDsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiU2hpZnQ6IDB4JTAyWCwgQ291bnQ6IDB4JTAyWCwgUmVnOiAweCUwOFhcbiIsCkBAIC04NjUsNyArODU4LDcgQEAKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWNvbmZpZ3ZhbCA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTEgKyBjb25maWcgKiA0XSk7CkBAIC04NzQsMTAgKzg2NywxMCBAQAogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgY29uZmlndmFsKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3JlcGVhdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC05MTIsMTAgKzkwNSwxMCBAQAogCiAJaWV4ZWMtPnJlcGVhdCA9IGZhbHNlOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX3Jlc3RyaWN0X3BsbChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC05NTEsOSArOTQ0LDEwIEBACiAJdWludDMyX3QgcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA4XSk7CiAJdWludDhfdCBjb25maWc7CiAJdWludDE2X3QgZnJlcTsKKwlpbnQgbGVuID0gMTIgKyBjb3VudCAqIDI7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsICIKIAkJICAgICAgIlNoaWZ0OiAweCUwMlgsIElPIEZsYWcgQ29uZGl0aW9uOiAweCUwMlgsICIKQEAgLTk2Niw3ICs5NjAsNyBAQAogCQlOVl9FUlJPUihiaW9zLT5kZXYsCiAJCQkgIjB4JTA0WDogQ29uZmlnIDB4JTAyWCBleGNlZWRzIG1heGltYWwgYm91bmQgMHglMDJYXG4iLAogCQkJIG9mZnNldCwgY29uZmlnLCBjb3VudCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJZnJlcSA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTIgKyBjb25maWcgKiAyXSk7CkBAIC05ODYsMTAgKzk4MCwxMCBAQAogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSAqIDEwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2VuZF9yZXBlYXQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTAwNywxMiArMTAwMSwxMiBAQAogCSAqIHdlJ3JlIG5vdCBpbiByZXBlYXQgbW9kZQogCSAqLwogCWlmIChpZXhlYy0+cmVwZWF0KQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvcHkoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTA0MSw3ICsxMDM1LDcgQEAKIAl1aW50OF90IGNydGNkYXRhOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxMTsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUmVnOiAweCUwOFgsIFNoaWZ0OiAweCUwMlgsIFNyY01hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlhcbiIsCkBAIC0xMDYwLDEwICsxMDU0LDEwIEBACiAJY3J0Y2RhdGEgfD0gKHVpbnQ4X3QpZGF0YTsKIAliaW9zX2lkeHBydF93cihiaW9zLCBjcnRjcG9ydCwgY3J0Y2luZGV4LCBjcnRjZGF0YSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X25vdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMDc5LDEwICsxMDczLDEwIEBACiAJCUJJT1NMT0coYmlvcywgIjB4JTA0WDogLS0tLS0tIEV4ZWN1dGluZyBmb2xsb3dpbmcgY29tbWFuZHMgLS0tLS0tXG4iLCBvZmZzZXQpOwogCiAJaWV4ZWMtPmV4ZWN1dGUgPSAhaWV4ZWMtPmV4ZWN1dGU7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX2ZsYWdfY29uZGl0aW9uKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTEwMCw3ICsxMDk0LDcgQEAKIAl1aW50OF90IGNvbmQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJaWYgKGlvX2ZsYWdfY29uZGl0aW9uX21ldChiaW9zLCBvZmZzZXQsIGNvbmQpKQogCQlCSU9TTE9HKGJpb3MsICIweCUwNFg6IENvbmRpdGlvbiBmdWxmaWxsZWQgLS0gY29udGludWluZyB0byBleGVjdXRlXG4iLCBvZmZzZXQpOwpAQCAtMTEwOSwxMCArMTEwMywxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pZHhfYWRkcl9sYXRjaGVkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xMTQwLDExICsxMTM0LDEyIEBACiAJdWludDMyX3QgbWFzayA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgOV0pOwogCXVpbnQzMl90IGRhdGEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDEzXSk7CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMTddOworCWludCBsZW4gPSAxOCArIGNvdW50ICogMjsKIAl1aW50MzJfdCB2YWx1ZTsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBDb250cm9sUmVnOiAweCUwOFgsIERhdGFSZWc6IDB4JTA4WCwgIgogCQkgICAgICAiTWFzazogMHglMDhYLCBEYXRhOiAweCUwOFgsIENvdW50OiAweCUwMlhcbiIsCkBAIC0xMTY0LDEwICsxMTU5LDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCBjb250cm9scmVnLCB2YWx1ZSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW9fcmVzdHJpY3RfcGxsMihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTE5NiwyNSArMTE5MSwyNiBAQAogCXVpbnQ4X3Qgc2hpZnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDZdOwogCXVpbnQzMl90IHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgN10pOworCWludCBsZW4gPSAxMSArIGNvdW50ICogNDsKIAl1aW50OF90IGNvbmZpZzsKIAl1aW50MzJfdCBmcmVxOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJTaGlmdDogMHglMDJYLCBDb3VudDogMHglMDJYLCBSZWc6IDB4JTA4WFxuIiwKIAkJb2Zmc2V0LCBjcnRjcG9ydCwgY3J0Y2luZGV4LCBtYXNrLCBzaGlmdCwgY291bnQsIHJlZyk7CiAKIAlpZiAoIXJlZykKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAljb25maWcgPSAoYmlvc19pZHhwcnRfcmQoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCkgJiBtYXNrKSA+PiBzaGlmdDsKIAlpZiAoY29uZmlnID4gY291bnQpIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWZyZXEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDExICsgY29uZmlnICogNF0pOwpAQCAtMTIyNCwxMCArMTIyMCwxMCBAQAogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9wbGwyKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEyNDQsMTYgKzEyNDAsMTYgQEAKIAl1aW50MzJfdCBmcmVxID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDk7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFJlZzogMHglMDRYLCBGcmVxOiAlZGtIelxuIiwKIAkJb2Zmc2V0LCByZWcsIGZyZXEpOwogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDk7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2kyY19ieXRlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEyNzcsMTIgKzEyNzMsMTMgQEAKIAl1aW50OF90IGkyY19pbmRleCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBpMmNfYWRkcmVzcyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CisJaW50IGxlbiA9IDQgKyBjb3VudCAqIDM7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmNoYW47CiAJc3RydWN0IGkyY19tc2cgbXNnOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IERDQkkyQ0luZGV4OiAweCUwMlgsIEkyQ0FkZHJlc3M6IDB4JTAyWCwgIgogCQkgICAgICAiQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTEyOTAsNyArMTI4Nyw3IEBACiAKIAljaGFuID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoYmlvcy0+ZGV2LCBpMmNfaW5kZXgpOwogCWlmICghY2hhbikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCXVpbnQ4X3QgaTJjX3JlZyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNCArIGkgKiAzXTsKQEAgLTEzMDMsNyArMTMwMCw3IEBACiAJCW1zZy5sZW4gPSAxOwogCQltc2cuYnVmID0gJnZhbHVlOwogCQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAKIAkJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJMkNSZWc6IDB4JTAyWCwgVmFsdWU6IDB4JTAyWCwgIgogCQkJICAgICAgIk1hc2s6IDB4JTAyWCwgRGF0YTogMHglMDJYXG4iLApAQCAtMTMxNywxNCArMTMxNCwxNCBAQAogCQkJbXNnLmxlbiA9IDE7CiAJCQltc2cuYnVmID0gJnZhbHVlOwogCQkJaWYgKGkyY190cmFuc2ZlcigmY2hhbi0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9pMmNfYnl0ZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMzQ2LDEyICsxMzQzLDEzIEBACiAJdWludDhfdCBpMmNfaW5kZXggPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgaTJjX2FkZHJlc3MgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOworCWludCBsZW4gPSA0ICsgY291bnQgKiAyOwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBEQ0JJMkNJbmRleDogMHglMDJYLCBJMkNBZGRyZXNzOiAweCUwMlgsICIKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCkBAIC0xMzU5LDcgKzEzNTcsNyBAQAogCiAJY2hhbiA9IGluaXRfaTJjX2RldmljZV9maW5kKGJpb3MtPmRldiwgaTJjX2luZGV4KTsKIAlpZiAoIWNoYW4pCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50OF90IGkyY19yZWcgPSBiaW9zLT5kYXRhW29mZnNldCArIDQgKyBpICogMl07CkBAIC0xMzc0LDE0ICsxMzcyLDE0IEBACiAJCQltc2cubGVuID0gMTsKIAkJCW1zZy5idWYgPSAmZGF0YTsKIAkJCWlmIChpMmNfdHJhbnNmZXIoJmNoYW4tPmFkYXB0ZXIsICZtc2csIDEpICE9IDEpCi0JCQkJcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1faTJjKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE0MDEsMTMgKzEzOTksMTQgQEAKIAl1aW50OF90IGkyY19pbmRleCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBpMmNfYWRkcmVzcyA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CisJaW50IGxlbiA9IDQgKyBjb3VudDsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqY2hhbjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJdWludDhfdCBkYXRhWzI1Nl07CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRENCSTJDSW5kZXg6IDB4JTAyWCwgSTJDQWRkcmVzczogMHglMDJYLCAiCiAJCSAgICAgICJDb3VudDogMHglMDJYXG4iLApAQCAtMTQxNSw3ICsxNDE0LDcgQEAKIAogCWNoYW4gPSBpbml0X2kyY19kZXZpY2VfZmluZChiaW9zLT5kZXYsIGkyY19pbmRleCk7CiAJaWYgKCFjaGFuKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGF0YVtpXSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNCArIGldOwpAQCAtMTQyOSwxMyArMTQyOCwxMyBAQAogCQltc2cubGVuID0gY291bnQ7CiAJCW1zZy5idWYgPSBkYXRhOwogCQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfdG1kcyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNDYwLDcgKzE0NTksNyBAQAogCXVpbnQzMl90IHJlZywgdmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDU7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IE1hZ2ljTG9va3VwVmFsdWU6IDB4JTAyWCwgVE1EU0FkZHI6IDB4JTAyWCwgIgogCQkgICAgICAiTWFzazogMHglMDJYLCBEYXRhOiAweCUwMlhcbiIsCkBAIC0xNDY4LDcgKzE0NjcsNyBAQAogCiAJcmVnID0gZ2V0X3RtZHNfaW5kZXhfcmVnKGJpb3MtPmRldiwgbWx2KTsKIAlpZiAoIXJlZykKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsCiAJCSAgdG1kc2FkZHIgfCBOVl9QUkFNREFDX0ZQX1RNRFNfQ09OVFJPTF9XUklURV9ESVNBQkxFKTsKQEAgLTE0NzYsMTAgKzE0NzUsMTAgQEAKIAliaW9zX3dyMzIoYmlvcywgcmVnICsgNCwgdmFsdWUpOwogCWJpb3Nfd3IzMihiaW9zLCByZWcsIHRtZHNhZGRyKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA1OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV90bWRzX2dyb3VwKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xNTAwLDE4ICsxNDk5LDE5IEBACiAKIAl1aW50OF90IG1sdiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CisJaW50IGxlbiA9IDMgKyBjb3VudCAqIDI7CiAJdWludDMyX3QgcmVnOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IE1hZ2ljTG9va3VwVmFsdWU6IDB4JTAyWCwgQ291bnQ6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBtbHYsIGNvdW50KTsKIAogCXJlZyA9IGdldF90bWRzX2luZGV4X3JlZyhiaW9zLT5kZXYsIG1sdik7CiAJaWYgKCFyZWcpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50OF90IHRtZHNhZGRyID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzICsgaSAqIDJdOwpAQCAtMTUyMSwxMCArMTUyMSwxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgcmVnLCB0bWRzYWRkcik7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY3JfaWR4X2Fkcl9sYXRjaChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTU0NywxMSArMTU0NywxMiBAQAogCXVpbnQ4X3QgY3J0Y2luZGV4MiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMl07CiAJdWludDhfdCBiYXNlYWRkciA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgM107CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNF07CisJaW50IGxlbiA9IDUgKyBjb3VudDsKIAl1aW50OF90IG9sZGFkZHIsIGRhdGE7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSW5kZXgxOiAweCUwMlgsIEluZGV4MjogMHglMDJYLCAiCiAJCSAgICAgICJCYXNlQWRkcjogMHglMDJYLCBDb3VudDogMHglMDJYXG4iLApAQCAtMTU2OCwxMCArMTU2OSwxMCBAQAogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsIGNydGNpbmRleDEsIG9sZGFkZHIpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY3Ioc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTU5Miw3ICsxNTkzLDcgQEAKIAl1aW50OF90IHZhbHVlOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA0OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsIERhdGE6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBjcnRjaW5kZXgsIG1hc2ssIGRhdGEpOwpAQCAtMTYwMSwxMCArMTYwMiwxMCBAQAogCXZhbHVlIHw9IGRhdGE7CiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsIGNydGNpbmRleCwgdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDQ7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2NyKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE2MjEsMTQgKzE2MjIsMTQgQEAKIAl1aW50OF90IGRhdGEgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfQ0lPX0NSWF9fQ09MT1IsIGNydGNpbmRleCwgZGF0YSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fY3JfZ3JvdXAoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTY0NSwxOCArMTY0NiwxOSBAQAogCSAqLwogCiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CisJaW50IGxlbiA9IDIgKyBjb3VudCAqIDI7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCQlpbml0X3ptX2NyKGJpb3MsIG9mZnNldCArIDIgKyAyICogaSAtIDEsIGlleGVjKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbmRpdGlvbl90aW1lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTY4MCw3ICsxNjgyLDcgQEAKIAl1bnNpZ25lZCBjbnQ7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAlpZiAocmV0cmllcyA+IDEwMCkKIAkJcmV0cmllcyA9IDEwMDsKQEAgLTE3MTEsMTAgKzE3MTMsMTAgQEAKIAkJaWV4ZWMtPmV4ZWN1dGUgPSBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fcmVnX3NlcXVlbmNlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTE3MzQsMTAgKzE3MzYsMTEgQEAKIAogCXVpbnQzMl90IGJhc2VyZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKIAl1aW50MzJfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJaW50IGxlbiA9IDYgKyBjb3VudCAqIDQ7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQmFzZVJlZzogMHglMDhYLCBDb3VudDogMHglMDJYXG4iLAogCQlvZmZzZXQsIGJhc2VyZWcsIGNvdW50KTsKQEAgLTE3NDksMTAgKzE3NTIsMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgZGF0YSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfc3ViX2RpcmVjdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNzY4LDcgKzE3NzEsNyBAQAogCXVpbnQxNl90IHN1Yl9vZmZzZXQgPSBST00xNihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMzsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRXhlY3V0aW5nIHN1YnJvdXRpbmUgYXQgMHglMDRYXG4iLAogCQlvZmZzZXQsIHN1Yl9vZmZzZXQpOwpAQCAtMTc3NywxMCArMTc4MCwxMCBAQAogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBFbmQgb2YgMHglMDRYIHN1YnJvdXRpbmVcbiIsIG9mZnNldCwgc3ViX29mZnNldCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29weV9udl9yZWcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTgwOCw3ICsxODExLDcgQEAKIAl1aW50MzJfdCBzcmN2YWx1ZSwgZHN0dmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDIyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBTcmNSZWc6IDB4JTA4WCwgU2hpZnQ6IDB4JTAyWCwgU3JjTWFzazogMHglMDhYLCAiCiAJCSAgICAgICJYb3I6IDB4JTA4WCwgRHN0UmVnOiAweCUwOFgsIERzdE1hc2s6IDB4JTA4WFxuIiwKQEAgLTE4MjcsMTAgKzE4MzAsMTAgQEAKIAogCWJpb3Nfd3IzMihiaW9zLCBkc3RyZWcsIGRzdHZhbHVlIHwgc3JjdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDIyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9pbmRleF9pbyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xODQ4LDE0ICsxODUxLDE0IEBACiAJdWludDhfdCBkYXRhID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0XTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNTsKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIGNydGNwb3J0LCBjcnRjaW5kZXgsIGRhdGEpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDU7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbXB1dGVfbWVtKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE5MDQsNyArMTkwNyw3IEBACiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gYmlvcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDE7CiAKIAkvKgogCSAqIE9uIGV2ZXJ5IGNhcmQgSSd2ZSBzZWVuLCB0aGlzIHN0ZXAgZ2V0cyBkb25lIGZvciB1cyBlYXJsaWVyIGluCkBAIC0xOTIyLDEwICsxOTI1LDEwIEBACiAJLyogd3JpdGUgYmFjayB0aGUgc2F2ZWQgY29uZmlndXJhdGlvbiB2YWx1ZSAqLwogCWJpb3Nfd3IzMihiaW9zLCBOVl9QRkJfQ0ZHMCwgYmlvcy0+c3RhdGUuc2F2ZWRfbnZfcGZiX2NmZzApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3Jlc2V0KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE5NTksMTAgKzE5NjIsMTAgQEAKIAlwY2lfbnZfMjAgJj0gfk5WX1BCVVNfUENJX05WXzIwX1JPTV9TSEFET1dfRU5BQkxFRDsJLyogMHhmZmZmZmZmZSAqLwogCWJpb3Nfd3IzMihiaW9zLCBOVl9QQlVTX1BDSV9OVl8yMCwgcGNpX252XzIwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZmlndXJlX21lbShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTk4Myw3ICsxOTg2LDcgQEAKIAl1aW50MzJfdCByZWcsIGRhdGE7CiAKIAlpZiAoYmlvcy0+bWFqb3JfdmVyc2lvbiA+IDIpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9WSU9fU1JYLCBOVl9WSU9fU1JfQ0xPQ0tfSU5ERVgsIGJpb3NfaWR4cHJ0X3JkKAogCQkgICAgICAgYmlvcywgTlZfVklPX1NSWCwgTlZfVklPX1NSX0NMT0NLX0lOREVYKSB8IDB4MjApOwpAQCAtMjAxNSwxMCArMjAxOCwxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgcmVnLCBkYXRhKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZmlndXJlX2NsayhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjAzOCw3ICsyMDQxLDcgQEAKIAlpbnQgY2xvY2s7CiAKIAlpZiAoYmlvcy0+bWFqb3JfdmVyc2lvbiA+IDIpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAljbG9jayA9IFJPTTE2KGJpb3MtPmRhdGFbbWVtaW5pdG9mZnMgKyA0XSkgKiAxMDsKIAlzZXRQTEwoYmlvcywgTlZfUFJBTURBQ19OVlBMTF9DT0VGRiwgY2xvY2spOwpAQCAtMjA0OCwxMCArMjA1MSwxMCBAQAogCQljbG9jayAqPSAyOwogCXNldFBMTChiaW9zLCBOVl9QUkFNREFDX01QTExfQ09FRkYsIGNsb2NrKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25maWd1cmVfcHJlaW5pdChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTIwNzEsMTUgKzIwNzQsMTUgQEAKIAl1aW50OF90IGNyM2MgPSAoKHN0cmFwcyA8PCAyKSAmIDB4ZjApIHwgKHN0cmFwcyAmICgxIDw8IDYpKTsKIAogCWlmIChiaW9zLT5tYWpvcl92ZXJzaW9uID4gMikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIE5WX0NJT19DUlhfX0NPTE9SLAogCQkJICAgICBOVl9DSU9fQ1JFX1NDUkFUQ0g0X19JTkRFWCwgY3IzYyk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjA5OSw3ICsyMTAyLDcgQEAKIAl1aW50OF90IGRhdGEgPSBiaW9zLT5kYXRhW29mZnNldCArIDRdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA1OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIE1hc2s6IDB4JTAyWCwgRGF0YTogMHglMDJYXG4iLAogCQlvZmZzZXQsIGNydGNwb3J0LCBtYXNrLCBkYXRhKTsKQEAgLTIxNTgsMTUgKzIxNjEsMTUgQEAKIAkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJCWJpb3Nfd3IzMihiaW9zLCAweDYxNDEwOCArIChpKjB4ODAwKSwgYmlvc19yZDMyKAogCQkJCSAgYmlvcywgMHg2MTQxMDggKyAoaSoweDgwMCkpICYgMHgwZmZmZmZmZik7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNTsKIAl9CiAKIAliaW9zX3BvcnRfd3IoYmlvcywgY3J0Y3BvcnQsIChiaW9zX3BvcnRfcmQoYmlvcywgY3J0Y3BvcnQpICYgbWFzaykgfAogCQkJCQkJCQkJZGF0YSk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDU7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3N1YihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMTgxLDcgKzIxODQsNyBAQAogCXVpbnQ4X3Qgc3ViID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQ2FsbGluZyBzY3JpcHQgJWRcbiIsIG9mZnNldCwgc3ViKTsKIApAQCAtMjE5MSwxMCArMjE5NCwxMCBAQAogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBFbmQgb2Ygc2NyaXB0ICVkXG4iLCBvZmZzZXQsIHN1Yik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmFtX2NvbmRpdGlvbihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjIxNSw3ICsyMjE4LDcgQEAKIAl1aW50OF90IGRhdGE7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAlkYXRhID0gYmlvc19yZDMyKGJpb3MsIE5WX1BGQl9CT09UXzApICYgbWFzazsKIApAQCAtMjIyOSwxMCArMjIzMiwxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9udl9yZWcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjI1MSwxNyArMjI1NCwxNyBAQAogCXVpbnQzMl90IGRhdGEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDldKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTM7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFJlZzogMHglMDhYLCBNYXNrOiAweCUwOFgsIERhdGE6IDB4JTA4WFxuIiwKIAkJb2Zmc2V0LCByZWcsIG1hc2ssIGRhdGEpOwogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgKGJpb3NfcmQzMihiaW9zLCByZWcpICYgbWFzaykgfCBkYXRhKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfbWFjcm8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjI4NSw3ICsyMjg4LDcgQEAKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogTWFjcm86IDB4JTAyWCwgTWFjcm9UYWJsZUluZGV4OiAweCUwMlgsICIKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCkBAIC0yMzAwLDEwICsyMzAzLDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCByZWcsIGRhdGEpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9kb25lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIzMTUsMTAgKzIzMTgsMTAgQEAKIAkgKi8KIAogCS8qIG1pbGQgcmV0dmFsIGFidXNlIHRvIHN0b3AgcGFyc2luZyB0aGlzIHRhYmxlICovCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yZXN1bWUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjMzMCwxNSArMjMzMywxNSBAQAogCSAqLwogCiAJaWYgKGlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDE7CiAKIAlpZXhlYy0+ZXhlY3V0ZSA9IHRydWU7CiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiAtLS0tIEV4ZWN1dGluZyBmb2xsb3dpbmcgY29tbWFuZHMgLS0tLVxuIiwgb2Zmc2V0KTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF90aW1lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIzNTMsNyArMjM1Niw3IEBACiAJdW5zaWduZWQgdGltZSA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBTbGVlcGluZyBmb3IgMHglMDRYIG1pY3Jvc2Vjb25kc1xuIiwKIAkJb2Zmc2V0LCB0aW1lKTsKQEAgLTIzNjMsMTAgKzIzNjYsMTAgQEAKIAllbHNlCiAJCW1zbGVlcCgodGltZSArIDkwMCkgLyAxMDAwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25kaXRpb24oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjM4Myw3ICsyMzg2LDcgQEAKIAl1aW50OF90IGNvbmQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBDb25kaXRpb246IDB4JTAyWFxuIiwgb2Zmc2V0LCBjb25kKTsKIApAQCAtMjM5NCwxMCArMjM5NywxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19jb25kaXRpb24oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjQxNCw3ICsyNDE3LDcgQEAKIAl1aW50OF90IGNvbmQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBJTyBjb25kaXRpb246IDB4JTAyWFxuIiwgb2Zmc2V0LCBjb25kKTsKIApAQCAtMjQyNSwxMCArMjQyOCwxMCBAQAogCQlpZXhlYy0+ZXhlY3V0ZSA9IGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pbmRleF9pbyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNDUxLDcgKzI0NTQsNyBAQAogCXVpbnQ4X3QgdmFsdWU7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDY7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJEYXRhOiAweCUwMlhcbiIsCkBAIC0yNDYwLDEwICsyNDYzLDEwIEBACiAJdmFsdWUgPSAoYmlvc19pZHhwcnRfcmQoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCkgJiBtYXNrKSB8IGRhdGE7CiAJYmlvc19pZHhwcnRfd3IoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCwgdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDY7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3BsbChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNDgxLDE2ICsyNDg0LDE2IEBACiAJdWludDE2X3QgZnJlcSA9IFJPTTE2KGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA3OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBSZWc6IDB4JTA4WCwgRnJlcTogJWQwa0h6XG4iLCBvZmZzZXQsIHJlZywgZnJlcSk7CiAKIAlzZXRQTEwoYmlvcywgcmVnLCBmcmVxICogMTApOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDc7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX3JlZyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNTA3LDE3ICsyNTEwLDE3IEBACiAJdWludDMyX3QgdmFsdWUgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDVdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gOTsKIAogCWlmIChyZWcgPT0gMHgwMDAyMDApCiAJCXZhbHVlIHw9IDE7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCB2YWx1ZSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gOTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmFtX3Jlc3RyaWN0X3BsbChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMjU0MywxNCArMjU0NiwxNSBAQAogCXVpbnQ4X3QgdHlwZSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAJdWludDMyX3QgZnJlcSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMiArIChpbmRleCAqIDQpXSk7CiAJdWludDhfdCAqcGxsX2xpbWl0cyA9ICZiaW9zLT5kYXRhW2Jpb3MtPnBsbF9saW1pdF90YmxfcHRyXSwgKmVudHJ5OworCWludCBsZW4gPSAyICsgYmlvcy0+cmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50ICogNDsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJaWYgKCFiaW9zLT5wbGxfbGltaXRfdGJsX3B0ciB8fCAocGxsX2xpbWl0c1swXSAmIDB4ZjApICE9IDB4MzApIHsKIAkJTlZfRVJST1IoZGV2LCAiUExMIGxpbWl0cyB0YWJsZSBub3QgdmVyc2lvbiAzLnhcbiIpOwotCQlyZXR1cm4gdHJ1ZTsgLyogZGVsaWJlcmF0ZSwgYWxsb3cgZGVmYXVsdCBjbG9ja3MgdG8gcmVtYWluICovCisJCXJldHVybiBsZW47IC8qIGRlbGliZXJhdGUsIGFsbG93IGRlZmF1bHQgY2xvY2tzIHRvIHJlbWFpbiAqLwogCX0KIAogCWVudHJ5ID0gcGxsX2xpbWl0cyArIHBsbF9saW1pdHNbMV07CkBAIC0yNTYzLDE1ICsyNTY3LDE1IEBACiAJCQkJb2Zmc2V0LCB0eXBlLCByZWcsIGZyZXEpOwogCiAJCQlzZXRQTEwoYmlvcywgcmVnLCBmcmVxKTsKLQkJCXJldHVybiB0cnVlOworCQkJcmV0dXJuIGxlbjsKIAkJfQogCX0KIAogCU5WX0VSUk9SKGRldiwgIlBMTCB0eXBlIDB4JTAyeCBub3QgZm91bmQgaW4gUExMIGxpbWl0cyB0YWJsZSIsIHR5cGUpOwotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0XzhjKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI1ODEsMTAgKzI1ODUsMTAgQEAKIAkgKgogCSAqLwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0XzhkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI1OTQsMTAgKzI1OTgsMTAgQEAKIAkgKgogCSAqLwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2dwaW8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjYxNSwxNCArMjYxOSwxNyBAQAogCWNvbnN0IHVpbnQ4X3QgKmdwaW9fZW50cnk7CiAJaW50IGk7CiAKKwlpZiAoIWlleGVjLT5leGVjdXRlKQorCQlyZXR1cm4gMTsKKwogCWlmIChiaW9zLT5iZGNiLnZlcnNpb24gIT0gMHg0MCkgewogCQlOVl9FUlJPUihiaW9zLT5kZXYsICJEQ0IgdGFibGUgbm90IHZlcnNpb24gNC4wXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWJpb3MtPmJkY2IuZ3Bpb190YWJsZV9wdHIpIHsKIAkJTlZfV0FSTihiaW9zLT5kZXYsICJJbnZhbGlkIHBvaW50ZXIgdG8gSU5JVF84RSB0YWJsZVxuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJZ3Bpb19lbnRyeSA9IGdwaW9fdGFibGUgKyBncGlvX3RhYmxlWzFdOwpAQCAtMjY2MCwxMyArMjY2NywxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgciwgdik7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLS8qIGhhY2sgdG8gYXZvaWQgbW92aW5nIHRoZSBpdGJsX2VudHJ5IGFycmF5IGJlZm9yZSB0aGlzIGZ1bmN0aW9uICovCi1pbnQgaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwX2Jsb2NrbGVuOwotCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTI2OTIsMjEgKzI2OTYsMjEgQEAKIAl1aW50OF90IHJlZ2luY3JlbWVudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CiAJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNl07CiAJdWludDMyX3Qgc3RyYXBfcmFtY2ZnLCBkYXRhOwotCXVpbnQxNl90IGJsb2NrbGVuOworCS8qIHByZXZpb3VzbHkgc2V0IGJ5ICdNJyBCSVQgdGFibGUgKi8KKwl1aW50MTZfdCBibG9ja2xlbiA9IGJpb3MtPnJhbV9yZXN0cmljdF9ncm91cF9jb3VudCAqIDQ7CisJaW50IGxlbiA9IDcgKyBjb3VudCAqIGJsb2NrbGVuOwogCXVpbnQ4X3QgaW5kZXg7CiAJaW50IGk7CiAKLQkvKiBwcmV2aW91c2x5IHNldCBieSAnTScgQklUIHRhYmxlICovCi0JYmxvY2tsZW4gPSBpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXBfYmxvY2tsZW47CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWlmICghYmxvY2tsZW4pIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IFplcm8gYmxvY2sgbGVuZ3RoIC0gaGFzIHRoZSBNIHRhYmxlICIKIAkJCSAiYmVlbiBwYXJzZWQ/XG4iLCBvZmZzZXQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCXN0cmFwX3JhbWNmZyA9IChiaW9zX3JkMzIoYmlvcywgTlZfUEVYVERFVl9CT09UXzApID4+IDIpICYgMHhmOwpAQCAtMjcyNCwxMCArMjcyOCwxMCBAQAogCQlyZWcgKz0gcmVnaW5jcmVtZW50OwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvcHlfem1fcmVnKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI3NDQsMTQgKzI3NDgsMTQgQEAKIAl1aW50MzJfdCBkc3RyZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDVdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gOTsKIAogCWJpb3Nfd3IzMihiaW9zLCBkc3RyZWcsIGJpb3NfcmQzMihiaW9zLCBzcmNyZWcpKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA5OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9yZWdfZ3JvdXBfYWRkcl9sYXRjaGVkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwKIAkJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTI3NjksMjAgKzI3NzMsMjEgQEAKIAogCXVpbnQzMl90IHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCWludCBsZW4gPSA2ICsgY291bnQgKiA0OwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50MzJfdCBkYXRhID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA2ICsgNCAqIGldKTsKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgZGF0YSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmVzZXJ2ZWQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjc5MywxMCArMjc5OCwxMCBAQAogCSAqIFNlZW1pbmdseSBkb2VzIG5vdGhpbmcKIAkgKi8KIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF85NihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yODI5LDEzICsyODM0LDEzIEBACiAJdmFsIDw8PSBiaW9zLT5kYXRhW29mZnNldCArIDE2XTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTc7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCAoYmlvc19yZDMyKGJpb3MsIHJlZykgJiBtYXNrKSB8IHZhbCk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE3OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF85NyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yODU5LDEzICsyODY0LDEzIEBACiAJdmFsID0gKHZhbCAmIG1hc2spIHwgKCh2YWwgKyBhZGQpICYgfm1hc2spOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxMzsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsIHZhbCk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDEzOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9hdXhjaChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yODgzLDMyICsyODg4LDMzIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJpb3MtPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqYXV4Y2g7CiAJdWludDMyX3QgYWRkciA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0pOwotCXVpbnQ4X3QgbGVuID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwlpbnQgbGVuID0gNiArIGNvdW50ICogMjsKIAlpbnQgcmV0LCBpOwogCiAJaWYgKCFiaW9zLT5kaXNwbGF5Lm91dHB1dCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiBubyBhY3RpdmUgb3V0cHV0XG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlhdXhjaCA9IGluaXRfaTJjX2RldmljZV9maW5kKGRldiwgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7CiAJaWYgKCFhdXhjaCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiBjb3VsZG4ndCBnZXQgYXV4Y2ggJWRcbiIsCiAJCQkgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlvZmZzZXQgKz0gNjsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIG9mZnNldCArPSAyKSB7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIG9mZnNldCArPSAyKSB7CiAJCXVpbnQ4X3QgZGF0YTsKIAogCQlyZXQgPSBub3V2ZWF1X2RwX2F1eGNoKGF1eGNoLCA5LCBhZGRyLCAmZGF0YSwgMSk7CiAJCWlmIChyZXQpIHsKIAkJCU5WX0VSUk9SKGRldiwgIklOSVRfQVVYQ0g6IHJkIGF1eGNoIGZhaWwgJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWRhdGEgJj0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAwXTsKQEAgLTI5MTcsMTQgKzI5MjMsMTQgQEAKIAkJcmV0ID0gbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOCwgYWRkciwgJmRhdGEsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiB3ciBhdXhjaCBmYWlsICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9hdXhjaChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yOTQxLDEwNiArMjk0Nyw5OSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmF1eGNoOwogCXVpbnQzMl90IGFkZHIgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKLQl1aW50OF90IGxlbiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJaW50IGxlbiA9IDYgKyBjb3VudDsKIAlpbnQgcmV0LCBpOwogCiAJaWYgKCFiaW9zLT5kaXNwbGF5Lm91dHB1dCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiBubyBhY3RpdmUgb3V0cHV0XG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlhdXhjaCA9IGluaXRfaTJjX2RldmljZV9maW5kKGRldiwgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7CiAJaWYgKCFhdXhjaCkgewogCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiBjb3VsZG4ndCBnZXQgYXV4Y2ggJWRcbiIsCiAJCQkgYmlvcy0+ZGlzcGxheS5vdXRwdXQtPmkyY19pbmRleCk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlvZmZzZXQgKz0gNjsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIG9mZnNldCsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIG9mZnNldCsrKSB7CiAJCXJldCA9IG5vdXZlYXVfZHBfYXV4Y2goYXV4Y2gsIDgsIGFkZHIsICZiaW9zLT5kYXRhW29mZnNldF0sIDEpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJJTklUX1pNX0FVWENIOiB3ciBhdXhjaCBmYWlsICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgc3RydWN0IGluaXRfdGJsX2VudHJ5IGl0YmxfZW50cnlbXSA9IHsKIAkvKiBjb21tYW5kIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICwgaWQgICwgbGVuZ3RoICAsIG9mZnNldCAgLCBtdWx0ICAgICwgY29tbWFuZCBoYW5kbGVyICAgICAgICAgICAgICAgICAqLwogCS8qIElOSVRfUFJPRyAoMHgzMSwgMTUsIDEwLCA0KSByZW1vdmVkIGR1ZSB0byBubyBleGFtcGxlIG9mIHVzZSAqLwotCXsgIklOSVRfSU9fUkVTVFJJQ1RfUFJPRyIgICAgICAgICAgICAgLCAweDMyLCAxMSAgICAgICwgNiAgICAgICAsIDQgICAgICAgLCBpbml0X2lvX3Jlc3RyaWN0X3Byb2cgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SRVBFQVQiICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzMsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmVwZWF0ICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgICwgMHgzNCwgMTIgICAgICAsIDcgICAgICAgLCAyICAgICAgICwgaW5pdF9pb19yZXN0cmljdF9wbGwgICAgICAgICAgICB9LAotCXsgIklOSVRfRU5EX1JFUEVBVCIgICAgICAgICAgICAgICAgICAgLCAweDM2LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2VuZF9yZXBlYXQgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT1BZIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzcsIDExICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29weSAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX05PVCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzOCwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9ub3QgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSU9fRkxBR19DT05ESVRJT04iICAgICAgICAgICAgLCAweDM5LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2lvX2ZsYWdfY29uZGl0aW9uICAgICAgICAgIH0sCi0JeyAiSU5JVF9JTkRFWF9BRERSRVNTX0xBVENIRUQiICAgICAgICAsIDB4NDksIDE4ICAgICAgLCAxNyAgICAgICwgMiAgICAgICAsIGluaXRfaWR4X2FkZHJfbGF0Y2hlZCAgICAgICAgICAgfSwKLQl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTDIiICAgICAgICAgICAgICwgMHg0QSwgMTEgICAgICAsIDYgICAgICAgLCA0ICAgICAgICwgaW5pdF9pb19yZXN0cmljdF9wbGwyICAgICAgICAgICB9LAotCXsgIklOSVRfUExMMiIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDRCLCA5ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3BsbDIgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JMkNfQllURSIgICAgICAgICAgICAgICAgICAgICAsIDB4NEMsIDQgICAgICAgLCAzICAgICAgICwgMyAgICAgICAsIGluaXRfaTJjX2J5dGUgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0kyQ19CWVRFIiAgICAgICAgICAgICAgICAgICwgMHg0RCwgNCAgICAgICAsIDMgICAgICAgLCAyICAgICAgICwgaW5pdF96bV9pMmNfYnl0ZSAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fSTJDIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDRFLCA0ICAgICAgICwgMyAgICAgICAsIDEgICAgICAgLCBpbml0X3ptX2kyYyAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9UTURTIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEYsIDUgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfdG1kcyAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX1RNRFNfR1JPVVAiICAgICAgICAgICAgICAgICwgMHg1MCwgMyAgICAgICAsIDIgICAgICAgLCAyICAgICAgICwgaW5pdF96bV90bWRzX2dyb3VwICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ1JfSU5ERVhfQUREUkVTU19MQVRDSEVEIiAgICAgLCAweDUxLCA1ICAgICAgICwgNCAgICAgICAsIDEgICAgICAgLCBpbml0X2NyX2lkeF9hZHJfbGF0Y2ggICAgICAgICAgIH0sCi0JeyAiSU5JVF9DUiIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NTIsIDQgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY3IgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0NSIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg1MywgMyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF96bV9jciAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fQ1JfR1JPVVAiICAgICAgICAgICAgICAgICAgLCAweDU0LCAyICAgICAgICwgMSAgICAgICAsIDIgICAgICAgLCBpbml0X3ptX2NyX2dyb3VwICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05ESVRJT05fVElNRSIgICAgICAgICAgICAgICAsIDB4NTYsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZGl0aW9uX3RpbWUgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX1JFR19TRVFVRU5DRSIgICAgICAgICAgICAgICwgMHg1OCwgNiAgICAgICAsIDUgICAgICAgLCA0ICAgICAgICwgaW5pdF96bV9yZWdfc2VxdWVuY2UgICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fUkVTVFJJQ1RfUFJPRyIgICAgICAgICAgICAgLCAweDMyLCBpbml0X2lvX3Jlc3RyaWN0X3Byb2cgICAgICAgICAgIH0sCisJeyAiSU5JVF9SRVBFQVQiICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzMsIGluaXRfcmVwZWF0ICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgICwgMHgzNCwgaW5pdF9pb19yZXN0cmljdF9wbGwgICAgICAgICAgICB9LAorCXsgIklOSVRfRU5EX1JFUEVBVCIgICAgICAgICAgICAgICAgICAgLCAweDM2LCBpbml0X2VuZF9yZXBlYXQgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT1BZIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzcsIGluaXRfY29weSAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX05PVCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzOCwgaW5pdF9ub3QgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSU9fRkxBR19DT05ESVRJT04iICAgICAgICAgICAgLCAweDM5LCBpbml0X2lvX2ZsYWdfY29uZGl0aW9uICAgICAgICAgIH0sCisJeyAiSU5JVF9JTkRFWF9BRERSRVNTX0xBVENIRUQiICAgICAgICAsIDB4NDksIGluaXRfaWR4X2FkZHJfbGF0Y2hlZCAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX1JFU1RSSUNUX1BMTDIiICAgICAgICAgICAgICwgMHg0QSwgaW5pdF9pb19yZXN0cmljdF9wbGwyICAgICAgICAgICB9LAorCXsgIklOSVRfUExMMiIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDRCLCBpbml0X3BsbDIgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JMkNfQllURSIgICAgICAgICAgICAgICAgICAgICAsIDB4NEMsIGluaXRfaTJjX2J5dGUgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0kyQ19CWVRFIiAgICAgICAgICAgICAgICAgICwgMHg0RCwgaW5pdF96bV9pMmNfYnl0ZSAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fSTJDIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDRFLCBpbml0X3ptX2kyYyAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9UTURTIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NEYsIGluaXRfdG1kcyAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1RNRFNfR1JPVVAiICAgICAgICAgICAgICAgICwgMHg1MCwgaW5pdF96bV90bWRzX2dyb3VwICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ1JfSU5ERVhfQUREUkVTU19MQVRDSEVEIiAgICAgLCAweDUxLCBpbml0X2NyX2lkeF9hZHJfbGF0Y2ggICAgICAgICAgIH0sCisJeyAiSU5JVF9DUiIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NTIsIGluaXRfY3IgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0NSIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg1MywgaW5pdF96bV9jciAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fQ1JfR1JPVVAiICAgICAgICAgICAgICAgICAgLCAweDU0LCBpbml0X3ptX2NyX2dyb3VwICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05ESVRJT05fVElNRSIgICAgICAgICAgICAgICAsIDB4NTYsIGluaXRfY29uZGl0aW9uX3RpbWUgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1JFR19TRVFVRU5DRSIgICAgICAgICAgICAgICwgMHg1OCwgaW5pdF96bV9yZWdfc2VxdWVuY2UgICAgICAgICAgICB9LAogCS8qIElOSVRfSU5ESVJFQ1RfUkVHICgweDVBLCA3LCAwLCAwKSByZW1vdmVkIGR1ZSB0byBubyBleGFtcGxlIG9mIHVzZSAqLwotCXsgIklOSVRfU1VCX0RJUkVDVCIgICAgICAgICAgICAgICAgICAgLCAweDVCLCAzICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3N1Yl9kaXJlY3QgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT1BZX05WX1JFRyIgICAgICAgICAgICAgICAgICAsIDB4NUYsIDIyICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29weV9udl9yZWcgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0lOREVYX0lPIiAgICAgICAgICAgICAgICAgICwgMHg2MiwgNSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF96bV9pbmRleF9pbyAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09NUFVURV9NRU0iICAgICAgICAgICAgICAgICAgLCAweDYzLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbXB1dGVfbWVtICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SRVNFVCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NjUsIDEzICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmVzZXQgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkZJR1VSRV9NRU0iICAgICAgICAgICAgICAgICwgMHg2NiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25maWd1cmVfbWVtICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09ORklHVVJFX0NMSyIgICAgICAgICAgICAgICAgLCAweDY3LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbmZpZ3VyZV9jbGsgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05GSUdVUkVfUFJFSU5JVCIgICAgICAgICAgICAsIDB4NjgsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZmlndXJlX3ByZWluaXQgICAgICAgICAgfSwKLQl7ICJJTklUX0lPIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2OSwgNSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9pbyAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfU1VCIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZCLCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3N1YiAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SQU1fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAsIDB4NkQsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmFtX2NvbmRpdGlvbiAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX05WX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg2RSwgMTMgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9udl9yZWcgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfTUFDUk8iICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZGLCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X21hY3JvICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9ET05FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzEsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1JFU1VNRSIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3MiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yZXN1bWUgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfU1VCX0RJUkVDVCIgICAgICAgICAgICAgICAgICAgLCAweDVCLCBpbml0X3N1Yl9kaXJlY3QgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT1BZX05WX1JFRyIgICAgICAgICAgICAgICAgICAsIDB4NUYsIGluaXRfY29weV9udl9yZWcgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0lOREVYX0lPIiAgICAgICAgICAgICAgICAgICwgMHg2MiwgaW5pdF96bV9pbmRleF9pbyAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09NUFVURV9NRU0iICAgICAgICAgICAgICAgICAgLCAweDYzLCBpbml0X2NvbXB1dGVfbWVtICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SRVNFVCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NjUsIGluaXRfcmVzZXQgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTkZJR1VSRV9NRU0iICAgICAgICAgICAgICAgICwgMHg2NiwgaW5pdF9jb25maWd1cmVfbWVtICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09ORklHVVJFX0NMSyIgICAgICAgICAgICAgICAgLCAweDY3LCBpbml0X2NvbmZpZ3VyZV9jbGsgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05GSUdVUkVfUFJFSU5JVCIgICAgICAgICAgICAsIDB4NjgsIGluaXRfY29uZmlndXJlX3ByZWluaXQgICAgICAgICAgfSwKKwl7ICJJTklUX0lPIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2OSwgaW5pdF9pbyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfU1VCIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZCLCBpbml0X3N1YiAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SQU1fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAsIDB4NkQsIGluaXRfcmFtX2NvbmRpdGlvbiAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX05WX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg2RSwgaW5pdF9udl9yZWcgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfTUFDUk8iICAgICAgICAgICAgICAgICAgICAgICAgLCAweDZGLCBpbml0X21hY3JvICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9ET05FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzEsIGluaXRfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1JFU1VNRSIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3MiwgaW5pdF9yZXN1bWUgICAgICAgICAgICAgICAgICAgICB9LAogCS8qIElOSVRfUkFNX0NPTkRJVElPTjIgKDB4NzMsIDksIDAsIDApIHJlbW92ZWQgZHVlIHRvIG5vIGV4YW1wbGUgb2YgdXNlICovCi0JeyAiSU5JVF9USU1FIiAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzQsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfdGltZSAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgICAgICwgMHg3NSwgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25kaXRpb24gICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSU9fQ09ORElUSU9OIiAgICAgICAgICAgICAgICAgLCAweDc2LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2lvX2NvbmRpdGlvbiAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JTkRFWF9JTyIgICAgICAgICAgICAgICAgICAgICAsIDB4NzgsIDYgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfaW5kZXhfaW8gICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1BMTCIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3OSwgNyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9wbGwgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fUkVHIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDdBLCA5ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3ptX3JlZyAgICAgICAgICAgICAgICAgICAgIH0sCi0JLyogSU5JVF9SQU1fUkVTVFJJQ1RfUExMJ3MgbGVuZ3RoIGlzIGFkanVzdGVkIGJ5IHRoZSBCSVQgTSB0YWJsZSAqLwotCXsgIklOSVRfUkFNX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgLCAweDg3LCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3JhbV9yZXN0cmljdF9wbGwgICAgICAgICAgIH0sCi0JeyAiSU5JVF84QyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEMsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfOGMgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUXzhEIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4RCwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF84ZCAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfR1BJTyIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhFLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2dwaW8gICAgICAgICAgICAgICAgICAgICAgIH0sCi0JLyogSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQJ3MgbXVsdCBpcyBsb2FkZWQgYnkgTSB0YWJsZSBpbiBCSVQgKi8KLQl7ICJJTklUX1JBTV9SRVNUUklDVF9aTV9SRUdfR1JPVVAiICAgICwgMHg4RiwgNyAgICAgICAsIDYgICAgICAgLCAwICAgICAgICwgaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwICB9LAotCXsgIklOSVRfQ09QWV9aTV9SRUciICAgICAgICAgICAgICAgICAgLCAweDkwLCA5ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvcHlfem1fcmVnICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9SRUdfR1JPVVBfQUREUkVTU19MQVRDSEVEIiAsIDB4OTEsIDYgICAgICAgLCA1ICAgICAgICwgNCAgICAgICAsIGluaXRfem1fcmVnX2dyb3VwX2FkZHJfbGF0Y2hlZCAgfSwKLQl7ICJJTklUX1JFU0VSVkVEIiAgICAgICAgICAgICAgICAgICAgICwgMHg5MiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yZXNlcnZlZCAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfOTYiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk2LCAxNyAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0Xzk2ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF85NyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTcsIDEzICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfOTcgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0FVWENIIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5OCwgNiAgICAgICAsIDUgICAgICAgLCAyICAgICAgICwgaW5pdF9hdXhjaCAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fQVVYQ0giICAgICAgICAgICAgICAgICAgICAgLCAweDk5LCA2ICAgICAgICwgNSAgICAgICAsIDEgICAgICAgLCBpbml0X3ptX2F1eGNoICAgICAgICAgICAgICAgICAgIH0sCi0JeyBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAsIDAgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCXsgIklOSVRfVElNRSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDc0LCBpbml0X3RpbWUgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05ESVRJT04iICAgICAgICAgICAgICAgICAgICAsIDB4NzUsIGluaXRfY29uZGl0aW9uICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgICwgMHg3NiwgaW5pdF9pb19jb25kaXRpb24gICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgICAgLCAweDc4LCBpbml0X2luZGV4X2lvICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9QTEwiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzksIGluaXRfcGxsICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3QSwgaW5pdF96bV9yZWcgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUkFNX1JFU1RSSUNUX1BMTCIgICAgICAgICAgICAgLCAweDg3LCBpbml0X3JhbV9yZXN0cmljdF9wbGwgICAgICAgICAgIH0sCisJeyAiSU5JVF84QyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEMsIGluaXRfOGMgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUXzhEIiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4RCwgaW5pdF84ZCAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfR1BJTyIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhFLCBpbml0X2dwaW8gICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQIiAgICAsIDB4OEYsIGluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cCAgfSwKKwl7ICJJTklUX0NPUFlfWk1fUkVHIiAgICAgICAgICAgICAgICAgICwgMHg5MCwgaW5pdF9jb3B5X3ptX3JlZyAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfWk1fUkVHX0dST1VQX0FERFJFU1NfTEFUQ0hFRCIgLCAweDkxLCBpbml0X3ptX3JlZ19ncm91cF9hZGRyX2xhdGNoZWQgIH0sCisJeyAiSU5JVF9SRVNFUlZFRCIgICAgICAgICAgICAgICAgICAgICAsIDB4OTIsIGluaXRfcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUXzk2IiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5NiwgaW5pdF85NiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfOTciICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk3LCBpbml0Xzk3ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9BVVhDSCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTgsIGluaXRfYXV4Y2ggICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0FVWENIIiAgICAgICAgICAgICAgICAgICAgICwgMHg5OSwgaW5pdF96bV9hdXhjaCAgICAgICAgICAgICAgICAgICB9LAorCXsgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2luaXRfdGFibGVfZW50cnlfbGVuZ3RoKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBpKQotewotCS8qIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIGdpdmVuIGluaXQgdGFibGUgZW50cnkuICovCi0JcmV0dXJuIGl0YmxfZW50cnlbaV0ubGVuZ3RoICsgYmlvcy0+ZGF0YVtvZmZzZXQgKyBpdGJsX2VudHJ5W2ldLmxlbmd0aF9vZmZzZXRdKml0YmxfZW50cnlbaV0ubGVuZ3RoX211bHRpcGxpZXI7Ci19Ci0KICNkZWZpbmUgTUFYX1RBQkxFX09QUyAxMDAwCiAKIHN0YXRpYyBpbnQKQEAgLTMwNTYsNyArMzA1NSw3IEBACiAJICogaXMgY2hhbmdlZCBiYWNrIHRvIEVYRUNVVEUuCiAJICovCiAKLQlpbnQgY291bnQgPSAwLCBpOworCWludCBjb3VudCA9IDAsIGksIHJlczsKIAl1aW50OF90IGlkOwogCiAJLyoKQEAgLTMwNzYsMjIgKzMwNzUsMjEgQEAKIAkJCQlvZmZzZXQsIGl0YmxfZW50cnlbaV0uaWQsIGl0YmxfZW50cnlbaV0ubmFtZSk7CiAKIAkJCS8qIGV4ZWN1dGUgZXZlbnR1YWwgY29tbWFuZCBoYW5kbGVyICovCi0JCQlpZiAoaXRibF9lbnRyeVtpXS5oYW5kbGVyKQotCQkJCWlmICghKCppdGJsX2VudHJ5W2ldLmhhbmRsZXIpKGJpb3MsIG9mZnNldCwgaWV4ZWMpKQotCQkJCQlicmVhazsKKwkJCXJlcyA9ICgqaXRibF9lbnRyeVtpXS5oYW5kbGVyKShiaW9zLCBvZmZzZXQsIGlleGVjKTsKKwkJCWlmICghcmVzKQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIEFkZCB0aGUgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgaW5jbHVkaW5nIGFsbCBkYXRhCisJCQkgKiBvZiB0aGF0IGNvbW1hbmQuIFRoZSBvZmZzZXQgd2lsbCB0aGVuIGJlIHBvaW50aW5nIG9uIHRoZQorCQkJICogbmV4dCBvcCBjb2RlLgorCQkJICovCisJCQlvZmZzZXQgKz0gcmVzOwogCQl9IGVsc2UgewogCQkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJCSAiMHglMDRYOiBJbml0IHRhYmxlIGNvbW1hbmQgbm90IGZvdW5kOiAiCiAJCQkJICIweCUwMlhcbiIsIG9mZnNldCwgaWQpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KLQotCQkvKgotCQkgKiBBZGQgdGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBjb21tYW5kIGluY2x1ZGluZyBhbGwgZGF0YQotCQkgKiBvZiB0aGF0IGNvbW1hbmQuIFRoZSBvZmZzZXQgd2lsbCB0aGVuIGJlIHBvaW50aW5nIG9uIHRoZQotCQkgKiBuZXh0IG9wIGNvZGUuCi0JCSAqLwotCQlvZmZzZXQgKz0gZ2V0X2luaXRfdGFibGVfZW50cnlfbGVuZ3RoKGJpb3MsIG9mZnNldCwgaSk7CiAJfQogCiAJaWYgKG9mZnNldCA+PSBiaW9zLT5sZW5ndGgpCkBAIC0zODU0LDcgKzM4NTIsNyBAQAogCSAqIHNjcmlwdCB0YWJsZXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzY3JpcHQgdG8gZXhlY3V0ZS4KIAkgKi8KIAotCU5WX0RFQlVHKGRldiwgIlNlYXJjaGluZyBmb3Igb3V0cHV0IGVudHJ5IGZvciAlZCAlZCAlZFxuIiwKKwlOVl9ERUJVR19LTVMoZGV2LCAiU2VhcmNoaW5nIGZvciBvdXRwdXQgZW50cnkgZm9yICVkICVkICVkXG4iLAogCQkJZGNiZW50LT50eXBlLCBkY2JlbnQtPmxvY2F0aW9uLCBkY2JlbnQtPm9yKTsKIAlvdGFibGUgPSBiaW9zX291dHB1dF9jb25maWdfbWF0Y2goZGV2LCBkY2JlbnQsIHRhYmxlWzFdICsKIAkJCQkJICBiaW9zLT5kaXNwbGF5LnNjcmlwdF90YWJsZV9wdHIsCkBAIC0zODg0LDcgKzM4ODIsNyBAQAogCWlmIChweGNsayA9PSAwKSB7CiAJCXNjcmlwdCA9IFJPTTE2KG90YWJsZVs2XSk7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJvdXRwdXQgc2NyaXB0IDAgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJvdXRwdXQgc2NyaXB0IDAgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM4OTQsNyArMzg5Miw3IEBACiAJaWYgKHB4Y2xrID09IC0xKSB7CiAJCXNjcmlwdCA9IFJPTTE2KG90YWJsZVs4XSk7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJvdXRwdXQgc2NyaXB0IDEgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJvdXRwdXQgc2NyaXB0IDEgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM5MDcsNyArMzkwNSw3IEBACiAJCWVsc2UKIAkJCXNjcmlwdCA9IDA7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJvdXRwdXQgc2NyaXB0IDIgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJvdXRwdXQgc2NyaXB0IDIgbm90IGZvdW5kXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM5MzEsNyArMzkyOSw3IEBACiAJCWlmIChzY3JpcHQpCiAJCQlzY3JpcHQgPSBjbGtjbXB0YWJsZShiaW9zLCBzY3JpcHQsIC1weGNsayk7CiAJCWlmICghc2NyaXB0KSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJjbG9jayBzY3JpcHQgMSBub3QgZm91bmRcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgImNsb2NrIHNjcmlwdCAxIG5vdCBmb3VuZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC00NjA2LDEwICs0NjA0LDYgQEAKIAkgKiBzdHVmZiB0aGF0IHdlIGRvbid0IHVzZSAtIHRoZWlyIHVzZSBjdXJyZW50bHkgdW5rbm93bgogCSAqLwogCi0JdWludDE2X3QgcnJfc3RyYXBfeGxhdDsKLQl1aW50OF90IHJyX2dyb3VwX2NvdW50OwotCWludCBpOwotCiAJLyoKIAkgKiBPbGRlciBiaW9zIHZlcnNpb25zIGRvbid0IGhhdmUgYSBzdWZmaWNpZW50bHkgbG9uZyB0YWJsZSBmb3IKIAkgKiB3aGF0IHdlIHdhbnQKQEAgLTQ2MTgsMjQgKzQ2MTIsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYml0ZW50cnktPmlkWzFdIDwgMikgewotCQlycl9ncm91cF9jb3VudCA9IGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDJdOwotCQlycl9zdHJhcF94bGF0ID0gUk9NMTYoYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgM10pOworCQliaW9zLT5yYW1fcmVzdHJpY3RfZ3JvdXBfY291bnQgPSBiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAyXTsKKwkJYmlvcy0+cmFtX3Jlc3RyaWN0X3RibF9wdHIgPSBST00xNihiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAzXSk7CiAJfSBlbHNlIHsKLQkJcnJfZ3JvdXBfY291bnQgPSBiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAwXTsKLQkJcnJfc3RyYXBfeGxhdCA9IFJPTTE2KGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDFdKTsKKwkJYmlvcy0+cmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50ID0gYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMF07CisJCWJpb3MtPnJhbV9yZXN0cmljdF90YmxfcHRyID0gUk9NMTYoYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMV0pOwogCX0KIAotCS8qIGFkanVzdCBsZW5ndGggb2YgSU5JVF84NyAqLwotCWZvciAoaSA9IDA7IGl0YmxfZW50cnlbaV0ubmFtZSAmJiAoaXRibF9lbnRyeVtpXS5pZCAhPSAweDg3KTsgaSsrKTsKLQlpdGJsX2VudHJ5W2ldLmxlbmd0aCArPSBycl9ncm91cF9jb3VudCAqIDQ7Ci0KLQkvKiBzZXQgdXAgbXVsdGlwbGllciBmb3IgSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQICovCi0JZm9yICg7IGl0YmxfZW50cnlbaV0ubmFtZSAmJiAoaXRibF9lbnRyeVtpXS5pZCAhPSAweDhmKTsgaSsrKTsKLQlpdGJsX2VudHJ5W2ldLmxlbmd0aF9tdWx0aXBsaWVyID0gcnJfZ3JvdXBfY291bnQgKiA0OwotCi0JaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwX2Jsb2NrbGVuID0gaXRibF9lbnRyeVtpXS5sZW5ndGhfbXVsdGlwbGllcjsKLQliaW9zLT5yYW1fcmVzdHJpY3RfdGJsX3B0ciA9IHJyX3N0cmFwX3hsYXQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTIzNCw3ICs1MjE3LDcgQEAKIAlpbnQgaTsKIAogCWlmICghYmlvcy0+YmRjYi5jb25uZWN0b3JfdGFibGVfcHRyKSB7Ci0JCU5WX0RFQlVHKGRldiwgIk5vIERDQiBjb25uZWN0b3IgdGFibGUgcHJlc2VudFxuIik7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJObyBEQ0IgY29ubmVjdG9yIHRhYmxlIHByZXNlbnRcbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCmluZGV4IDFkNWYxMGIuLjA1OGU5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCkBAIC0yMjcsNiArMjI3LDcgQEAKIAogCXVpbnQxNl90IHBsbF9saW1pdF90YmxfcHRyOwogCXVpbnQxNl90IHJhbV9yZXN0cmljdF90YmxfcHRyOworCXVpbnQ4X3QgcmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50OwogCiAJdWludDE2X3Qgc29tZV9zY3JpcHRfcHRyOyAvKiBCSVQgSSArIDE0ICovCiAJdWludDE2X3QgaW5pdDk2X3RibF9wdHI7IC8qIEJJVCBJICsgMTYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwppbmRleCAzMjBhMTRiLi4wY2FkNmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCkBAIC0xNTQsNiArMTU0LDExIEBACiAJbnZiby0+cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50ID0gbnZiby0+cGxhY2VtZW50czsKIAludmJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IG47CiAJbnZiby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IG47CisKKwlpZiAobnZiby0+cGluX3JlZmNudCkgeworCQl3aGlsZSAobi0tKQorCQkJbnZiby0+cGxhY2VtZW50c1tuXSB8PSBUVE1fUExfRkxBR19OT19FVklDVDsKKwl9CiB9CiAKIGludApAQCAtMzExLDggKzMxNiwxMCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCiAJc3dpdGNoIChkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUpIHsKKyNpZiBfX09TX0hBU19BR1AKIAljYXNlIE5PVVZFQVVfR0FSVF9BR1A6CiAJCXJldHVybiB0dG1fYWdwX2JhY2tlbmRfaW5pdChiZGV2LCBkZXYtPmFncC0+YnJpZGdlKTsKKyNlbmRpZgogCWNhc2UgTk9VVkVBVV9HQVJUX1NHRE1BOgogCQlyZXR1cm4gbm91dmVhdV9zZ2RtYV9pbml0X3R0bShkZXYpOwogCWRlZmF1bHQ6CkBAIC0zOTgsMTAgKzQwNSwxNiBAQAogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9ibyhibyk7CiAKIAlzd2l0Y2ggKGJvLT5tZW0ubWVtX3R5cGUpIHsKKwljYXNlIFRUTV9QTF9WUkFNOgorCQlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgVFRNX1BMX0ZMQUdfVFQgfAorCQkJCQkgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CiAJCWJyZWFrOwogCX0KKworCSpwbCA9IG52Ym8tPnBsYWNlbWVudDsKIH0KIAogCkBAIC00NTMsMTEgKzQ2Niw4IEBACiAJaW50IHJldDsKIAogCWNoYW4gPSBudmJvLT5jaGFubmVsOwotCWlmICghY2hhbiB8fCBudmJvLT50aWxlX2ZsYWdzIHx8IG52Ym8tPm5vX3ZtKSB7CisJaWYgKCFjaGFuIHx8IG52Ym8tPnRpbGVfZmxhZ3MgfHwgbnZiby0+bm9fdm0pCiAJCWNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKLQkJaWYgKCFjaGFuKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJc3JjX29mZnNldCA9IG9sZF9tZW0tPm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJZHN0X29mZnNldCA9IG5ld19tZW0tPm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CkBAIC02MjMsNyArNjMzLDggQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUpCisJaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUgfHwKKwkgICAgIWRldl9wcml2LT5jaGFubmVsKQogCQlyZXR1cm4gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgbm9fd2FpdCwgbmV3X21lbSk7CiAKIAlpZiAob2xkX21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1NZU1RFTSAmJiAhYm8tPnR0bSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggMDMyY2YwOS4uNWExMGRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC04Niw3ICs4Niw3IEBACiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5lY3Rvcihkcm1fY29ubmVjdG9yKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNvbm5lY3RvcikKIAkJcmV0dXJuOwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJLyogVXNlIHByZWZlcnJlZCBtb2RlIGlmIHRoZXJlIGlzIG9uZS4uICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5iYXNlLnByb2JlZF9tb2RlcywgaGVhZCkgewogCQlpZiAobW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKSB7Ci0JCQlOVl9ERUJVRyhkZXYsICJuYXRpdmUgbW9kZSBmcm9tIHByZWZlcnJlZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAibmF0aXZlIG1vZGUgZnJvbSBwcmVmZXJyZWRcbiIpOwogCQkJcmV0dXJuIGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwogCQl9CiAJfQpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJCWxhcmdlc3QgPSBtb2RlOwogCX0KIAotCU5WX0RFQlVHKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gbGFyZ2VzdDogJWR4JWRAJWRcbiIsCisJTlZfREVCVUdfS01TKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gbGFyZ2VzdDogJWR4JWRAJWRcbiIsCiAJCSAgICAgIGhpZ2hfdywgaGlnaF9oLCBoaWdoX3YpOwogCXJldHVybiBsYXJnZXN0ID8gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbGFyZ2VzdCkgOiBOVUxMOwogfQpAQCAtNzI1LDcgKzcyNSw3IEBACiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2YoKm52X2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwogCWlmICghbnZfY29ubmVjdG9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCmluZGV4IGRlNjFmNDYuLjllMjkyNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CisJTlZfREVCVUdfS01TKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CiAKIAkvKiBLZWVwIGFsbCBsYW5lcyBhdCB0aGUgc2FtZSBsZXZlbC4uICovCiAJZm9yIChpID0gMDsgaSA8IG52X2VuY29kZXItPmRwLmxpbmtfbnI7IGkrKykgewpAQCAtMjI4LDcgKzIyOCw3IEBACiAJaW50IG9yID0gbnZfZW5jb2Rlci0+b3IsIGxpbmsgPSAhKG52X2VuY29kZXItPmRjYi0+c29yY29uZi5saW5rICYgMSk7CiAJaW50IGRwZV9oZWFkZXJsZW4sIHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRjb25maWcgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdFx0Y29uZmlnIDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkJIGNvbmZpZ1swXSwgY29uZmlnWzFdLCBjb25maWdbMl0sIGNvbmZpZ1szXSk7CiAKIAlkcGUgPSBub3V2ZWF1X2Jpb3NfZHBfdGFibGUoZGV2LCBudl9lbmNvZGVyLT5kY2IsICZkcGVfaGVhZGVybGVuKTsKQEAgLTI3NiwxMiArMjc2LDEyIEBACiAJYm9vbCBjcl9kb25lLCBjcl9tYXhfdnMsIGVxX2RvbmU7CiAJaW50IHJldCA9IDAsIGksIHRyaWVzLCB2b2x0YWdlOwogCi0JTlZfREVCVUcoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKIHRyYWluOgogCWNyX2RvbmUgPSBlcV9kb25lID0gZmFsc2U7CiAKIAkvKiBzZXQgbGluayBjb25maWd1cmF0aW9uICovCi0JTlZfREVCVUcoZGV2LCAiXHRiZWdpbiB0cmFpbjogYncgJWQsIGxhbmVzICVkXG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdGJlZ2luIHRyYWluOiBidyAlZCwgbGFuZXMgJWRcbiIsCiAJCSBudl9lbmNvZGVyLT5kcC5saW5rX2J3LCBudl9lbmNvZGVyLT5kcC5saW5rX25yKTsKIAogCXJldCA9IG5vdXZlYXVfZHBfbGlua19id19zZXQoZW5jb2RlciwgbnZfZW5jb2Rlci0+ZHAubGlua19idyk7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogY2xvY2sgcmVjb3ZlcnkgKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGNyXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBjclxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzEpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJY3JfZG9uZSA9IHRydWU7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAkJZ290byBzdG9wOwogCiAJLyogY2hhbm5lbCBlcXVhbGlzYXRpb24gKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGVxXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBlcVxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzIpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAzKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJZXFfZG9uZSA9IHRydWU7CkBAIC0zOTUsOSArMzk1LDkgQEAKIAogCS8qIHJldHJ5IGF0IGEgbG93ZXIgc2V0dGluZywgaWYgcG9zc2libGUgKi8KIAlpZiAoIXJldCAmJiAhKGVxX2RvbmUgJiYgY3JfZG9uZSkpIHsKLQkJTlZfREVCVUcoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOwogCQlpZiAobnZfZW5jb2Rlci0+ZHAubGlua19idyAhPSBEUF9MSU5LX0JXXzFfNjIpIHsKLQkJCU5WX0RFQlVHKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOwogCQkJbnZfZW5jb2Rlci0+ZHAubGlua19idyA9IERQX0xJTktfQldfMV82MjsKIAkJCWdvdG8gdHJhaW47CiAJCX0KQEAgLTQxOCw3ICs0MTgsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgImVuY29kZXI6IGxpbmtfYncgJWQsIGxpbmtfbnIgJWRcbiIKKwlOVl9ERUJVR19LTVMoZGV2LCAiZW5jb2RlcjogbGlua19idyAlZCwgbGlua19uciAlZFxuIgogCQkgICAgICAiZGlzcGxheTogbGlua19idyAlZCwgbGlua19uciAlZCB2ZXJzaW9uIDB4JTAyeFxuIiwKIAkJIG52X2VuY29kZXItPmRjYi0+ZHBjb25mLmxpbmtfYncsCiAJCSBudl9lbmNvZGVyLT5kY2ItPmRwY29uZi5saW5rX25yLApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJdWludDMyX3QgdG1wLCBjdHJsLCBzdGF0ID0gMCwgZGF0YTMyWzRdID0ge307CiAJaW50IHJldCA9IDAsIGksIGluZGV4ID0gYXV4Y2gtPnJkOwogCi0JTlZfREVCVUcoZGV2LCAiY2ggJWQgY21kICVkIGFkZHIgMHgleCBsZW4gJWRcbiIsIGluZGV4LCBjbWQsIGFkZHIsIGRhdGFfbnIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJjaCAlZCBjbWQgJWQgYWRkciAweCV4IGxlbiAlZFxuIiwgaW5kZXgsIGNtZCwgYWRkciwgZGF0YV9ucik7CiAKIAl0bXAgPSBudl9yZDMyKGRldiwgTlY1MF9BVVhDSF9DVFJMKGF1eGNoLT5yZCkpOwogCW52X3dyMzIoZGV2LCBOVjUwX0FVWENIX0NUUkwoYXV4Y2gtPnJkKSwgdG1wIHwgMHgwMDEwMDAwMCk7CkBAIC00NzIsNyArNDcyLDcgQEAKIAlpZiAoIShjbWQgJiAxKSkgewogCQltZW1jcHkoZGF0YTMyLCBkYXRhLCBkYXRhX25yKTsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJTlZfREVCVUcoZGV2LCAid3IgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJ3ciAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQkJbnZfd3IzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9PVVQoaW5kZXgsIGkpLCBkYXRhMzJbaV0pOwogCQl9CiAJfQpAQCAtNTA0LDcgKzUwNCw3IEBACiAJaWYgKGNtZCAmIDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJZGF0YTMyW2ldID0gbnZfcmQzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9JTihpbmRleCwgaSkpOwotCQkJTlZfREVCVUcoZGV2LCAicmQgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJyZCAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQl9CiAJCW1lbWNweShkYXRhLCBkYXRhMzIsIGRhdGFfbnIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCmluZGV4IDM1MjQ5YzMuLjA2ZWI5OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwpAQCAtMzUsNiArMzUsMTAgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAorTU9EVUxFX1BBUk1fREVTQyhjdHhmdywgIlVzZSBleHRlcm5hbCBmaXJtd2FyZSBibG9iIGZvciBncmN0eCBpbml0IChOVjQwKSIpOworaW50IG5vdXZlYXVfY3R4ZncgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGN0eGZ3LCBub3V2ZWF1X2N0eGZ3LCBpbnQsIDA0MDApOworCiBNT0RVTEVfUEFSTV9ERVNDKG5vYWdwLCAiRGlzYWJsZSBBR1AiKTsKIGludCBub3V2ZWF1X25vYWdwOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vYWdwLCBub3V2ZWF1X25vYWdwLCBpbnQsIDA0MDApOwpAQCAtMjczLDcgKzI3Nyw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7CiAJCQljaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOwotCQkJaWYgKCFjaGFuKQorCQkJaWYgKCFjaGFuIHx8ICFjaGFuLT5wdXNoYnVmX2JvKQogCQkJCWNvbnRpbnVlOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgTk9VVkVBVV9ETUFfU0tJUFM7IGorKykKQEAgLTM0MSw3ICszNDUsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gbm91dmVhdV90dG1fbW1hcCwKIAkJLnBvbGwgPSBkcm1fcG9sbCwKIAkJLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCA4OGI0YzdiLi41ZjhjYmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfcmVnLmgiCiAjaW5jbHVkZSAibm91dmVhdV9iaW9zLmgiCitzdHJ1Y3Qgbm91dmVhdV9ncmN0eDsKIAogI2RlZmluZSBNQVhfTlVNX0RDQl9FTlRSSUVTIDE2CiAKQEAgLTMxNyw2ICszMTgsNyBAQAogCWJvb2wgYWNjZWxfYmxvY2tlZDsKIAl2b2lkICpjdHhwcm9nOwogCXZvaWQgKmN0eHZhbHM7CisJaW50IGdyY3R4X3NpemU7CiAKIAlpbnQgICgqaW5pdCkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKnRha2Vkb3duKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTY0Nyw2ICs2NDksNyBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdHZfbm9ybTsKIGV4dGVybiBpbnQgbm91dmVhdV9yZWdfZGVidWc7CiBleHRlcm4gY2hhciAqbm91dmVhdV92YmlvczsKK2V4dGVybiBpbnQgbm91dmVhdV9jdHhmdzsKIAogLyogbm91dmVhdV9zdGF0ZS5jICovCiBleHRlcm4gdm9pZCBub3V2ZWF1X3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqKTsKQEAgLTk1OSw5ICs5NjIsNyBAQAogZXh0ZXJuIHZvaWQgbnY0MF9ncmFwaF9kZXN0cm95X2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52NDBfZ3JhcGhfbG9hZF9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjQwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIGludCAgbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF92YWxzX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICopOworZXh0ZXJuIHZvaWQgbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICopOwogCiAvKiBudjUwX2dyYXBoLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52NTBfZ3JhcGhfZ3JjbGFzc1tdOwpAQCAtOTc1LDYgKzk3NiwxMiBAQAogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CiAKKy8qIG5vdXZlYXVfZ3JjdHguYyAqLworZXh0ZXJuIGludCAgbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLAorCQkJCSAgICBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKik7CisKIC8qIG52MDRfaW5zdG1lbS5jICovCiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTEyMDcsMTQgKzEyMTQsMjQgQEAKIAkJCQkJcGNpX25hbWUoZC0+cGRldiksICMjYXJnKQogI2lmbmRlZiBOVl9ERUJVR19OT1RSQUNFCiAjZGVmaW5lIE5WX0RFQlVHKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChkcm1fZGVidWcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgIiVzOiVkIC0gIiBmbXQsIF9fZnVuY19fLCAgICAgICAgICAgICBcCisJCQkgIF9fTElORV9fLCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgTlZfREVCVUdfS01TKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRybV9kZWJ1ZyAmIERSTV9VVF9LTVMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCU5WX1BSSU5USyhLRVJOX0RFQlVHLCBkLCAiJXM6JWQgLSAiIGZtdCwgX19mdW5jX18sICAgICAgICAgICAgIFwKIAkJCSAgX19MSU5FX18sICMjYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgTlZfREVCVUcoZCwgZm10LCBhcmcuLi4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKGRybV9kZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU5WX1BSSU5USyhLRVJOX0RFQlVHLCBkLCBmbXQsICMjYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZGVmaW5lIE5WX0RFQlVHX0tNUyhkLCBmbXQsIGFyZy4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfS01TKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgZm10LCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKaW5kZXggMzZlOGM1ZS4uODRhZjI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwpAQCAtNTgsNyArNTgsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4gPSBkZXZfcHJpdi0+Y2hhbm5lbDsKIAlpbnQgcmV0LCBpOwogCi0JaWYgKCFjaGFuLT5hY2NlbF9kb25lIHx8CisJaWYgKCFjaGFuIHx8ICFjaGFuLT5hY2NlbF9kb25lIHx8CiAJICAgIGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8CiAJICAgIGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpCiAJCXJldHVybiAwOwpAQCAtMzE4LDE0ICszMTgsMTYgQEAKIAlwYXItPm5vdXZlYXVfZmIgPSBub3V2ZWF1X2ZiOwogCXBhci0+ZGV2ID0gZGV2OwogCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7Ci0JCWJyZWFrOwotCX07CisJaWYgKGRldl9wcml2LT5jaGFubmVsKSB7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgeworCQljYXNlIE5WXzUwOgorCQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCQlicmVhazsKKwkJfTsKKwl9CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsKGRldik7CiAKQEAgLTM0Nyw3ICszNDksNyBAQAogaW50CiBub3V2ZWF1X2ZiY29uX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldHVybiBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsIDMyLCBub3V2ZWF1X2ZiY29uX2NyZWF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKaW5kZXggMGNmZjdlYi4uZGFjYWM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCiAJCWlmIChpbnRyICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXQgPSAtRVJFU1RBUlQ7CisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCmluZGV4IDExZjgzMWYuLjE4ZmQ4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwpAQCAtMzQyLDggKzM0Miw2IEBACiAJCQl9CiAKIAkJCXJldCA9IHR0bV9ib193YWl0X2NwdSgmbnZiby0+Ym8sIGZhbHNlKTsKLQkJCWlmIChyZXQgPT0gLUVSRVNUQVJUKQotCQkJCXJldCA9IC1FQUdBSU47CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCQlnb3RvIHJldHJ5OwpAQCAtOTE1LDggKzkxMyw2IEBACiAJCQlnb3RvIG91dDsKIAogCQlyZXQgPSB0dG1fYm9fd2FpdF9jcHUoJm52Ym8tPmJvLCBub193YWl0KTsKLQkJaWYgKHJldCA9PSAtRVJFU1RBUlQpCi0JCQlyZXQgPSAtRUFHQUlOOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQpAQCAtOTI1LDkgKzkyMSw2IEBACiAJCXJldCA9IHR0bV9ib193YWl0KCZudmJvLT5ibywgZmFsc2UsIGZhbHNlLCBub193YWl0KTsKIAl9IGVsc2UgewogCQlyZXQgPSB0dG1fYm9fc3luY2NwdV93cml0ZV9ncmFiKCZudmJvLT5ibywgbm9fd2FpdCk7Ci0JCWlmIChyZXQgPT0gLUVSRVNUQVJUKQotCQkJcmV0ID0gLUVBR0FJTjsKLQkJZWxzZQogCQlpZiAocmV0ID09IDApCiAJCQludmJvLT5jcHVfZmlscCA9IGZpbGVfcHJpdjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5ZjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorCitzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nIHsKKwl1aW50MzJfdCBzaWduYXR1cmU7CisJdWludDhfdCAgdmVyc2lvbjsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDMyX3QgZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBub3V2ZWF1X2N0eHZhbHMgeworCXVpbnQzMl90IHNpZ25hdHVyZTsKKwl1aW50OF90ICB2ZXJzaW9uOworCXVpbnQzMl90IGxlbmd0aDsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBvZmZzZXQ7CisJCXVpbnQzMl90IHZhbHVlOworCX0gZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludAorbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCWNvbnN0IGludCBjaGlwc2V0ID0gZGV2X3ByaXYtPmNoaXBzZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nICpjcDsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdjsKKwljaGFyIG5hbWVbMzJdOworCWludCByZXQsIGk7CisKKwlpZiAocGdyYXBoLT5hY2NlbF9ibG9ja2VkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHByb2ciLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHByb2cgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcGdyYXBoLT5jdHhwcm9nID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHhwcm9nXG4iKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtY3B5KHBncmFwaC0+Y3R4cHJvZywgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCQljcCA9IHBncmFwaC0+Y3R4cHJvZzsKKwkJaWYgKGxlMzJfdG9fY3B1KGNwLT5zaWduYXR1cmUpICE9IDB4NTA0MzU2NGUgfHwKKwkJICAgIGNwLT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA3KSAvIDQpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHhwcm9nIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHZhbHMiLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHZhbHMgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwZ3JhcGgtPmN0eHZhbHMgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbWNweShwZ3JhcGgtPmN0eHZhbHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKKwkJaWYgKGxlMzJfdG9fY3B1KGN2LT5zaWduYXR1cmUpICE9IDB4NTY0MzU2NGUgfHwKKwkJICAgIGN2LT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWNwID0gcGdyYXBoLT5jdHhwcm9nOworCisJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwKKwkJCWxlMzJfdG9fY3B1KGNwLT5kYXRhW2ldKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbm91dmVhdV9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKworCWlmIChwZ3JhcGgtPmN0eHByb2cpIHsKKwkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKKwkJcGdyYXBoLT5jdHhwcm9nID0gTlVMTDsKKwl9CisKKwlpZiAocGdyYXBoLT5jdHh2YWxzKSB7CisJCWtmcmVlKHBncmFwaC0+Y3R4cHJvZyk7CisJCXBncmFwaC0+Y3R4dmFscyA9IE5VTEw7CisJfQorfQorCit2b2lkCitub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgKmN2ID0gcGdyYXBoLT5jdHh2YWxzOworCWludCBpOworCisJaWYgKCFjdikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpOyBpKyspCisJCW52X3dvMzIoZGV2LCBjdHgsIGxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLm9mZnNldCksCisJCQlsZTMyX3RvX2NwdShjdi0+ZGF0YVtpXS52YWx1ZSkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzljNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmgKQEAgLTAsMCArMSwxMzMgQEAKKyNpZm5kZWYgX19OT1VWRUFVX0dSQ1RYX0hfXworI2RlZmluZSBfX05PVVZFQVVfR1JDVFhfSF9fCisKK3N0cnVjdCBub3V2ZWF1X2dyY3R4IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJZW51bSB7CisJCU5PVVZFQVVfR1JDVFhfUFJPRywKKwkJTk9VVkVBVV9HUkNUWF9WQUxTCisJfSBtb2RlOworCXZvaWQgKmRhdGE7CisKKwl1aW50MzJfdCBjdHhwcm9nX21heDsKKwl1aW50MzJfdCBjdHhwcm9nX2xlbjsKKwl1aW50MzJfdCBjdHhwcm9nX3JlZzsKKwlpbnQgICAgICBjdHhwcm9nX2xhYmVsWzMyXTsKKwl1aW50MzJfdCBjdHh2YWxzX3BvczsKKwl1aW50MzJfdCBjdHh2YWxzX2Jhc2U7Cit9OworCisjaWZkZWYgQ1BfQ1RYCitzdGF0aWMgaW5saW5lIHZvaWQKK2NwX291dChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1aW50MzJfdCBpbnN0KQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCUJVR19PTihjdHgtPmN0eHByb2dfbGVuID09IGN0eC0+Y3R4cHJvZ19tYXgpOworCWN0eHByb2dbY3R4LT5jdHhwcm9nX2xlbisrXSA9IGluc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfbHNyKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIHVpbnQzMl90IHZhbCkKK3sKKwljcF9vdXQoY3R4LCBDUF9MT0FEX1NSIHwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9jdHgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBsZW5ndGgpCit7CisJY3R4LT5jdHhwcm9nX3JlZyA9IChyZWcgLSAweDAwNDAwMDAwKSA+PiAyOworCisJY3R4LT5jdHh2YWxzX2Jhc2UgPSBjdHgtPmN0eHZhbHNfcG9zOworCWN0eC0+Y3R4dmFsc19wb3MgPSBjdHgtPmN0eHZhbHNfYmFzZSArIGxlbmd0aDsKKworCWlmIChsZW5ndGggPiAoQ1BfQ1RYX0NPVU5UID4+IENQX0NUWF9DT1VOVF9TSElGVCkpIHsKKwkJY3BfbHNyKGN0eCwgbGVuZ3RoKTsKKwkJbGVuZ3RoID0gMDsKKwl9CisKKwljcF9vdXQoY3R4LCBDUF9DVFggfCAobGVuZ3RoIDw8IENQX0NUWF9DT1VOVF9TSElGVCkgfCBjdHgtPmN0eHByb2dfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9uYW1lKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBuYW1lKQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCWludCBpOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCWN0eC0+Y3R4cHJvZ19sYWJlbFtuYW1lXSA9IGN0eC0+Y3R4cHJvZ19sZW47CisJZm9yIChpID0gMDsgaSA8IGN0eC0+Y3R4cHJvZ19sZW47IGkrKykgeworCQlpZiAoKGN0eHByb2dbaV0gJiAweGZmZjAwMDAwKSAhPSAweGZmNDAwMDAwKQorCQkJY29udGludWU7CisJCWlmICgoY3R4cHJvZ1tpXSAmIENQX0JSQV9JUCkgIT0gKChuYW1lKSA8PCBDUF9CUkFfSVBfU0hJRlQpKQorCQkJY29udGludWU7CisJCWN0eHByb2dbaV0gPSAoY3R4cHJvZ1tpXSAmIDB4MDBmZjAwZmYpIHwKKwkJCSAgICAgKGN0eC0+Y3R4cHJvZ19sZW4gPDwgQ1BfQlJBX0lQX1NISUZUKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX2JyYShzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1MzIgbW9kLCBpbnQgZmxhZywgaW50IHN0YXRlLCBpbnQgbmFtZSkKK3sKKwlpbnQgaXAgPSAwOworCisJaWYgKG1vZCAhPSAyKSB7CisJCWlwID0gY3R4LT5jdHhwcm9nX2xhYmVsW25hbWVdIDw8IENQX0JSQV9JUF9TSElGVDsKKwkJaWYgKGlwID09IDApCisJCQlpcCA9IDB4ZmYwMDAwMDAgfCAobmFtZSA8PCBDUF9CUkFfSVBfU0hJRlQpOworCX0KKworCWNwX291dChjdHgsIENQX0JSQSB8IChtb2QgPDwgMTgpIHwgaXAgfCBmbGFnIHwKKwkJICAgIChzdGF0ZSA/IDAgOiBDUF9CUkFfSUZfQ0xFQVIpKTsKK30KKyNkZWZpbmUgY3BfYnJhKGMsZixzLG4pIF9jcF9icmEoKGMpLCAwLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MsIG4pCisjaWZkZWYgQ1BfQlJBX01PRAorI2RlZmluZSBjcF9jYWwoYyxmLHMsbikgX2NwX2JyYSgoYyksIDEsIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcywgbikKKyNkZWZpbmUgY3BfcmV0KGMsZixzKSBfY3BfYnJhKChjKSwgMiwgQ1BfRkxBR18jI2YsIENQX0ZMQUdfIyNmIyNfIyNzLCAwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX3dhaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgaW50IGZsYWcsIGludCBzdGF0ZSkKK3sKKwljcF9vdXQoY3R4LCBDUF9XQUlUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1dBSVRfU0VUIDogMCkpOworfQorI2RlZmluZSBjcF93YWl0KGMsZixzKSBfY3Bfd2FpdCgoYyksIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcykKKworc3RhdGljIGlubGluZSB2b2lkCitfY3Bfc2V0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBmbGFnLCBpbnQgc3RhdGUpCit7CisJY3Bfb3V0KGN0eCwgQ1BfU0VUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1NFVF8xIDogMCkpOworfQorI2RlZmluZSBjcF9zZXQoYyxmLHMpIF9jcF9zZXQoKGMpLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfcG9zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBvZmZzZXQpCit7CisJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwljdHgtPmN0eHZhbHNfYmFzZSA9IGN0eC0+Y3R4dmFsc19wb3M7CisKKwljcF9sc3IoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwljcF9vdXQoY3R4LCBDUF9TRVRfQ09OVEVYVF9QT0lOVEVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitncl9kZWYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpCit7CisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1ZBTFMpCisJCXJldHVybjsKKworCXJlZyA9IChyZWcgLSAweDAwNDAwMDAwKSAvIDQ7CisJcmVnID0gKHJlZyAtIGN0eC0+Y3R4cHJvZ19yZWcpICsgY3R4LT5jdHh2YWxzX2Jhc2U7CisKKwludl93bzMyKGN0eC0+ZGV2LCBjdHgtPmRhdGEsIHJlZywgdmFsKTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYwppbmRleCBhMmMzMGY0Li40NzViYTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pb2MzMi5jCkBAIC02MSwxMiArNjEsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG5vdXZlYXVfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogI2VuZGlmCi0JbG9ja19rZXJuZWwoKTsJICAvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggMDI3NTU3MS4uNTE1OGExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC00MDcsNiArNDA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmIF9fT1NfSEFTX0FHUAogc3RhdGljIHZvaWQgbm91dmVhdV9tZW1fcmVzZXRfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJdWludDMyX3Qgc2F2ZWRfcGNpX252XzEsIHNhdmVkX3BjaV9udl8xOSwgcG1jX2VuYWJsZTsKQEAgLTQzMiwxMCArNDMzLDEyIEBACiAJbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMTksIHNhdmVkX3BjaV9udl8xOSk7CiAJbnZfd3IzMihkZXYsIE5WMDRfUEJVU19QQ0lfTlZfMSwgc2F2ZWRfcGNpX252XzEpOwogfQorI2VuZGlmCiAKIGludAogbm91dmVhdV9tZW1faW5pdF9hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKyNpZiBfX09TX0hBU19BR1AKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fYWdwX2luZm8gaW5mbzsKIAlzdHJ1Y3QgZHJtX2FncF9tb2RlIG1vZGU7CkBAIC00NzEsNiArNDc0LDcgQEAKIAlkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUJPSBOT1VWRUFVX0dBUlRfQUdQOwogCWRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9iYXNlCT0gaW5mby5hcGVydHVyZV9iYXNlOwogCWRldl9wcml2LT5nYXJ0X2luZm8uYXBlcl9zaXplCT0gaW5mby5hcGVydHVyZV9zaXplOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCAyZWQ0MWQzLi5lNzZlYzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC0yOTksOTQgKzI5OSwxMyBAQAogCQlyZXR1cm4gVkdBX1JTUkNfTk9STUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKIH0KIAotaW50Ci1ub3V2ZWF1X2NhcmRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludAorbm91dmVhdV9jYXJkX2luaXRfY2hhbm5lbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZW5naW5lICplbmdpbmU7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgInByZXYgc3RhdGUgPSAlZFxuIiwgZGV2X3ByaXYtPmluaXRfc3RhdGUpOwotCi0JaWYgKGRldl9wcml2LT5pbml0X3N0YXRlID09IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUpCi0JCXJldHVybiAwOwotCi0JdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIGRldiwgTlVMTCwgbm91dmVhdV92Z2Ffc2V0X2RlY29kZSk7Ci0KLQkvKiBJbml0aWFsaXNlIGludGVybmFsIGRyaXZlciBBUEkgaG9va3MgKi8KLQlyZXQgPSBub3V2ZWF1X2luaXRfZW5naW5lX3B0cnMoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwotCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRkFJTEVEOwotCi0JLyogUGFyc2UgQklPUyB0YWJsZXMgLyBSdW4gaW5pdCB0YWJsZXMgaWYgY2FyZCBub3QgUE9TVGVkICovCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJcmV0ID0gbm91dmVhdV9iaW9zX2luaXQoZGV2KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfZWFybHlfaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBJbml0aWFsaXNlIGluc3RhbmNlIG1lbW9yeSwgbXVzdCBoYXBwZW4gYmVmb3JlIG1lbV9pbml0IHNvIHdlCi0JICoga25vdyBleGFjdGx5IGhvdyBtdWNoIFZSQU0gd2UncmUgYWJsZSB0byB1c2UgZm9yICJub3JtYWwiCi0JICogcHVycG9zZXMuCi0JICovCi0JcmV0ID0gZW5naW5lLT5pbnN0bWVtLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogU2V0dXAgdGhlIG1lbW9yeSBtYW5hZ2VyICovCi0JcmV0ID0gbm91dmVhdV9tZW1faW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBNQyAqLwotCXJldCA9IGVuZ2luZS0+bWMuaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBQVElNRVIgKi8KLQlyZXQgPSBlbmdpbmUtPnRpbWVyLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogUEZCICovCi0JcmV0ID0gZW5naW5lLT5mYi5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBHUkFQSCAqLwotCXJldCA9IGVuZ2luZS0+Z3JhcGguaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBQRklGTyAqLwotCXJldCA9IGVuZ2luZS0+Zmlmby5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHRoaXMgY2FsbCBpcnFfcHJlaW5zdGFsbCwgcmVnaXN0ZXIgaXJxIGhhbmRsZXIgYW5kCi0JICogY2FsbCBpcnFfcG9zdGluc3RhbGwKLQkgKi8KLQlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgMCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHdoYXQgYWJvdXQgUFZJREVPL1BDUlRDL1BSQU1EQUMgZXRjPyAqLwotCiAJcmV0ID0gbm91dmVhdV9jaGFubmVsX2FsbG9jKGRldiwgJmRldl9wcml2LT5jaGFubmVsLAogCQkJCSAgICAoc3RydWN0IGRybV9maWxlICopLTIsCiAJCQkJICAgIE52RG1hRkIsIE52RG1hVFQpOwpAQCAtMzk5LDM5ICszMTgsMTMzIEBACiAJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JXLCBOVl9ETUFfVEFSR0VUX1ZJRE1FTSwKIAkJCQkgICAgICZncHVvYmopOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2VycjsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBkZXZfcHJpdi0+Y2hhbm5lbCwgTnZEbWFWUkFNLAogCQkJCSAgICAgZ3B1b2JqLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCW5vdXZlYXVfZ3B1b2JqX2RlbChkZXYsICZncHVvYmopOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnI7CiAKIAlncHVvYmogPSBOVUxMOwogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2dhcnRfZG1hX25ldyhkZXZfcHJpdi0+Y2hhbm5lbCwgMCwKIAkJCQkJICBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSwKIAkJCQkJICBOVl9ETUFfQUNDRVNTX1JXLCAmZ3B1b2JqLCBOVUxMKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dF9lcnI7CiAKIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9yZWZfYWRkKGRldiwgZGV2X3ByaXYtPmNoYW5uZWwsIE52RG1hR0FSVCwKIAkJCQkgICAgIGdwdW9iaiwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmZ3B1b2JqKTsKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJbm91dmVhdV9ncHVvYmpfZGVsKGRldiwgJmdwdW9iaik7CisJbm91dmVhdV9jaGFubmVsX2ZyZWUoZGV2X3ByaXYtPmNoYW5uZWwpOworCWRldl9wcml2LT5jaGFubmVsID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK25vdXZlYXVfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZTsKKwlpbnQgcmV0OworCisJTlZfREVCVUcoZGV2LCAicHJldiBzdGF0ZSA9ICVkXG4iLCBkZXZfcHJpdi0+aW5pdF9zdGF0ZSk7CisKKwlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgPT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSkKKwkJcmV0dXJuIDA7CisKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKKworCS8qIEluaXRpYWxpc2UgaW50ZXJuYWwgZHJpdmVyIEFQSSBob29rcyAqLworCXJldCA9IG5vdXZlYXVfaW5pdF9lbmdpbmVfcHRycyhkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOworCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRkFJTEVEOworCisJLyogUGFyc2UgQklPUyB0YWJsZXMgLyBSdW4gaW5pdCB0YWJsZXMgaWYgY2FyZCBub3QgUE9TVGVkICovCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJcmV0ID0gbm91dmVhdV9iaW9zX2luaXQoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2Vhcmx5X2luaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9iaW9zOworCisJLyogSW5pdGlhbGlzZSBpbnN0YW5jZSBtZW1vcnksIG11c3QgaGFwcGVuIGJlZm9yZSBtZW1faW5pdCBzbyB3ZQorCSAqIGtub3cgZXhhY3RseSBob3cgbXVjaCBWUkFNIHdlJ3JlIGFibGUgdG8gdXNlIGZvciAibm9ybWFsIgorCSAqIHB1cnBvc2VzLgorCSAqLworCXJldCA9IGVuZ2luZS0+aW5zdG1lbS5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3B1b2JqX2Vhcmx5OworCisJLyogU2V0dXAgdGhlIG1lbW9yeSBtYW5hZ2VyICovCisJcmV0ID0gbm91dmVhdV9tZW1faW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2luc3RtZW07CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbWVtOworCisJLyogUE1DICovCisJcmV0ID0gZW5naW5lLT5tYy5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3B1b2JqOworCisJLyogUFRJTUVSICovCisJcmV0ID0gZW5naW5lLT50aW1lci5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbWM7CisKKwkvKiBQRkIgKi8KKwlyZXQgPSBlbmdpbmUtPmZiLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF90aW1lcjsKKworCS8qIFBHUkFQSCAqLworCXJldCA9IGVuZ2luZS0+Z3JhcGguaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZiOworCisJLyogUEZJRk8gKi8KKwlyZXQgPSBlbmdpbmUtPmZpZm8uaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2dyYXBoOworCisJLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKKwkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbAorCSAqLworCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZpZm87CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pcnE7CisKKwkvKiB3aGF0IGFib3V0IFBWSURFTy9QQ1JUQy9QUkFNREFDIGV0Yz8gKi8KKworCWlmICghZW5naW5lLT5ncmFwaC5hY2NlbF9ibG9ja2VkKSB7CisJCXJldCA9IG5vdXZlYXVfY2FyZF9pbml0X2NoYW5uZWwoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2lycTsKIAl9CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkKIAkJCXJldCA9IG52NTBfZGlzcGxheV9jcmVhdGUoZGV2KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcmV0ID0gbnYwNF9kaXNwbGF5X2NyZWF0ZShkZXYpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9pcnE7CiAJfQogCiAJcmV0ID0gbm91dmVhdV9iYWNrbGlnaHRfaW5pdChkZXYpOwpAQCAtNDQ0LDYgKzQ1NywzMiBAQAogCQlkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKGRldik7CiAKIAlyZXR1cm4gMDsKKworb3V0X2lycToKKwlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworb3V0X2ZpZm86CisJZW5naW5lLT5maWZvLnRha2Vkb3duKGRldik7CitvdXRfZ3JhcGg6CisJZW5naW5lLT5ncmFwaC50YWtlZG93bihkZXYpOworb3V0X2ZiOgorCWVuZ2luZS0+ZmIudGFrZWRvd24oZGV2KTsKK291dF90aW1lcjoKKwllbmdpbmUtPnRpbWVyLnRha2Vkb3duKGRldik7CitvdXRfbWM6CisJZW5naW5lLT5tYy50YWtlZG93bihkZXYpOworb3V0X2dwdW9iajoKKwlub3V2ZWF1X2dwdW9ial90YWtlZG93bihkZXYpOworb3V0X21lbToKKwlub3V2ZWF1X21lbV9jbG9zZShkZXYpOworb3V0X2luc3RtZW06CisJZW5naW5lLT5pbnN0bWVtLnRha2Vkb3duKGRldik7CitvdXRfZ3B1b2JqX2Vhcmx5OgorCW5vdXZlYXVfZ3B1b2JqX2xhdGVfdGFrZWRvd24oZGV2KTsKK291dF9iaW9zOgorCW5vdXZlYXVfYmlvc190YWtlZG93bihkZXYpOworb3V0OgorCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBub3V2ZWF1X2NhcmRfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKaW5kZXggYjkxMzYzNi4uZDJmMTQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKQEAgLTE0MywxMCArMTQzLDEwIEBACiAJc3RhdGUtPnBsbHNlbCB8PSBudl9jcnRjLT5pbmRleCA/IFBMTFNFTF9WUExMMl9NQVNLIDogUExMU0VMX1ZQTEwxX01BU0s7CiAKIAlpZiAocHYtPk5NMikKLQkJTlZfVFJBQ0UoZGV2LCAidnBsbDogbjEgJWQgbjIgJWQgbTEgJWQgbTIgJWQgbG9nMnAgJWRcbiIsCisJCU5WX0RFQlVHX0tNUyhkZXYsICJ2cGxsOiBuMSAlZCBuMiAlZCBtMSAlZCBtMiAlZCBsb2cycCAlZFxuIiwKIAkJCSBwdi0+TjEsIHB2LT5OMiwgcHYtPk0xLCBwdi0+TTIsIHB2LT5sb2cyUCk7CiAJZWxzZQotCQlOVl9UUkFDRShkZXYsICJ2cGxsOiBuICVkIG0gJWQgbG9nMnAgJWRcbiIsCisJCU5WX0RFQlVHX0tNUyhkZXYsICJ2cGxsOiBuICVkIG0gJWQgbG9nMnAgJWRcbiIsCiAJCQkgcHYtPk4xLCBwdi0+TTEsIHB2LT5sb2cyUCk7CiAKIAludl9jcnRjLT5jdXJzb3Iuc2V0X29mZnNldChudl9jcnRjLCBudl9jcnRjLT5jdXJzb3Iub2Zmc2V0KTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCXVuc2lnbmVkIGNoYXIgc2VxMSA9IDAsIGNydGMxNyA9IDA7CiAJdW5zaWduZWQgY2hhciBjcnRjMUE7CiAKLQlOVl9UUkFDRShkZXYsICJTZXR0aW5nIGRwbXMgbW9kZSAlZCBvbiBDUlRDICVkXG4iLCBtb2RlLAorCU5WX0RFQlVHX0tNUyhkZXYsICJTZXR0aW5nIGRwbXMgbW9kZSAlZCBvbiBDUlRDICVkXG4iLCBtb2RlLAogCQkJCQkJCW52X2NydGMtPmluZGV4KTsKIAogCWlmIChudl9jcnRjLT5sYXN0X2RwbXMgPT0gbW9kZSkgLyogRG9uJ3QgZG8gdW5uZWNlc2FyeSBtb2RlIGNoYW5nZXMuICovCkBAIC02MDMsNyArNjAzLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpudl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlOVl9ERUJVRyhkZXYsICJDVFJDIG1vZGUgb24gQ1JUQyAlZDpcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiQ1RSQyBtb2RlIG9uIENSVEMgJWQ6XG4iLCBudl9jcnRjLT5pbmRleCk7CiAJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGp1c3RlZF9tb2RlKTsKIAogCS8qIHVubG9jayBtdXN0IGNvbWUgYWZ0ZXIgdHVybmluZyBvZmYgRlBfVEdfQ09OVFJPTCBpbiBvdXRwdXRfcHJlcGFyZSAqLwpAQCAtNzAzLDcgKzcwMyw3IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAotCU5WX0RFQlVHKGNydGMtPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGNydGMtPmRldiwgIlxuIik7CiAKIAlpZiAoIW52X2NydGMpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCmluZGV4IGE1ZmE1MTcuLmQ5ZjMyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJTlZXcml0ZVZnYVNlcShkZXYsIDAsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCwgc2F2ZWRfc2VxMSk7CiAKIAlpZiAoYmx1ZSA9PSAweDE4KSB7Ci0JCU5WX1RSQUNFKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gaGVhZCBBXG4iKTsKKwkJTlZfSU5GTyhkZXYsICJMb2FkIGRldGVjdGVkIG9uIGhlYWQgQVxuIik7CiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAl9CiAKQEAgLTM1MCwxNCArMzUwLDEwIEBACiAJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBoZWFkID0gbm91dmVhdV9jcnRjKGVuY29kZXItPmNydGMpLT5pbmRleDsKIAotCU5WX1RSQUNFKGRldiwgIiVzIGNhbGxlZCBmb3IgZW5jb2RlciAlZFxuIiwgX19mdW5jX18sCi0JCSAgICAgIG52X2VuY29kZXItPmRjYi0+aW5kZXgpOwotCiAJaWYgKG52X2dmNF9kaXNwX2FyY2goZGV2KSkgewogCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKnJlYmluZDsKIAkJdWludDMyX3QgZGFjX29mZnNldCA9IG52MDRfZGFjX291dHB1dF9vZmZzZXQoZW5jb2Rlcik7CkBAIC00NjYsNyArNDYyLDcgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAiXG4iKTsKIAogCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CiAJa2ZyZWUobnZfZW5jb2Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwppbmRleCBlNWIzMzMzLi40ODNmODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvdXRwdXRfbW9kZSA9ICZudl9lbmNvZGVyLT5tb2RlOwogCXVpbnQzMl90IG1vZGVfcmF0aW8sIHBhbmVsX3JhdGlvOwogCi0JTlZfREVCVUcoZGV2LCAiT3V0cHV0IG1vZGUgb24gQ1JUQyAlZDpcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiT3V0cHV0IG1vZGUgb24gQ1JUQyAlZDpcbiIsIG52X2NydGMtPmluZGV4KTsKIAlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKG91dHB1dF9tb2RlKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIEZQIHJlZ2lzdGVycyBpbiB0aGlzIENSVEMuICovCkBAIC00MTMsNyArNDEzLDkgQEAKIAlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlID0gbnZfZW5jb2Rlci0+ZGNiOwogCWludCBoZWFkID0gbm91dmVhdV9jcnRjKGVuY29kZXItPmNydGMpLT5pbmRleDsKIAotCU5WX1RSQUNFKGRldiwgIiVzIGNhbGxlZCBmb3IgZW5jb2RlciAlZFxuIiwgX19mdW5jX18sIG52X2VuY29kZXItPmRjYi0+aW5kZXgpOworCU5WX0lORk8oZGV2LCAiT3V0cHV0ICVzIGlzIHJ1bm5pbmcgb24gQ1JUQyAlZCB1c2luZyBvdXRwdXQgJWNcbiIsCisJCWRybV9nZXRfY29ubmVjdG9yX25hbWUoJm5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpLT5iYXNlKSwKKwkJbnZfY3J0Yy0+aW5kZXgsICdAJyArIGZmcyhudl9lbmNvZGVyLT5kY2ItPm9yKSk7CiAKIAlpZiAoZGNiZS0+dHlwZSA9PSBPVVRQVVRfVE1EUykKIAkJcnVuX3RtZHNfdGFibGUoZGV2LCBkY2JlLCBoZWFkLCBudl9lbmNvZGVyLT5tb2RlLmNsb2NrKTsKQEAgLTU1MCw3ICs1NTIsNyBAQAogewogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlrZnJlZShudl9lbmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMKaW5kZXggYjQ3Yzc1Ny4uZWY3NzIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMKQEAgLTk5LDEwICs5OSwxMSBAQAogCXVpbnQxNl90IGNvbm5lY3RvclsxNl0gPSB7IDAgfTsKIAlpbnQgaSwgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWlmIChudl90d29faGVhZHMoZGV2KSkKIAkJbnYwNF9kaXNwbGF5X3N0b3JlX2luaXRpYWxfaGVhZF9vd25lcihkZXYpOworCW5vdXZlYXVfaHdfc2F2ZV92Z2FfZm9udHMoZGV2LCAxKTsKIAogCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7CiAJZHJtX21vZGVfY3JlYXRlX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eShkZXYpOwpAQCAtMjAzLDggKzIwNCw2IEBACiAJLyogU2F2ZSBwcmV2aW91cyBzdGF0ZSAqLwogCU5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwogCi0Jbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDEpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCiAJCWNydGMtPmZ1bmNzLT5zYXZlKGNydGMpOwogCkBAIC0yMjMsNyArMjIyLDcgQEAKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCS8qIFR1cm4gZXZlcnkgQ1JUQyBvZmYuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKQEAgLTI0Niw5ICsyNDUsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQogCQljcnRjLT5mdW5jcy0+cmVzdG9yZShjcnRjKTsKIAotCW5vdXZlYXVfaHdfc2F2ZV92Z2FfZm9udHMoZGV2LCAwKTsKLQogCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7CisKKwlub3V2ZWF1X2h3X3NhdmVfdmdhX2ZvbnRzKGRldiwgMCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYwppbmRleCAzOTZlZTkyLi5kNTYxZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jCkBAIC01NDMsNyArNTQzLDcgQEAKIAogCW52X3dpMzIoZGV2LCBpbnN0YW5jZSwgdG1wKTsKIAludl93cjMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX1NXSVRDSDEsIHRtcCk7Ci0JbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9DQUNIRTEgKyBzdWJjLCB0bXApOworCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfQ0FDSEUxICsgKHN1YmM8PDIpLCB0bXApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dyYXBoLmMKaW5kZXggNmJmNjgwNC4uNjg3MGUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYwpAQCAtMzg5LDQ5ICszODksNTAgQEAKIAlpbnQgbnYxMFtBUlJBWV9TSVpFKG52MTBfZ3JhcGhfY3R4X3JlZ3MpXTsKIAlpbnQgbnYxN1tBUlJBWV9TSVpFKG52MTdfZ3JhcGhfY3R4X3JlZ3MpXTsKIAlzdHJ1Y3QgcGlwZV9zdGF0ZSBwaXBlX3N0YXRlOworCXVpbnQzMl90IGxtYV93aW5kb3dbNF07CiB9OwogCisjZGVmaW5lIFBJUEVfU0FWRShkZXYsIHN0YXRlLCBhZGRyKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaW50IF9faTsJCQkJCQlcCisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIGFkZHIpOwkJXAorCQlmb3IgKF9faSA9IDA7IF9faSA8IEFSUkFZX1NJWkUoc3RhdGUpOyBfX2krKykJCVwKKwkJCXN0YXRlW19faV0gPSBudl9yZDMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgUElQRV9SRVNUT1JFKGRldiwgc3RhdGUsIGFkZHIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgX19pOwkJCQkJCVwKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgYWRkcik7CQlcCisJCWZvciAoX19pID0gMDsgX19pIDwgQVJSQVlfU0laRShzdGF0ZSk7IF9faSsrKQkJXAorCQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgc3RhdGVbX19pXSk7IFwKKwl9IHdoaWxlICgwKQorCiBzdGF0aWMgdm9pZCBudjEwX2dyYXBoX3NhdmVfcGlwZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGdyYXBoX3N0YXRlICpwZ3JhcGhfY3R4ID0gY2hhbi0+cGdyYXBoX2N0eDsKLQlzdHJ1Y3QgcGlwZV9zdGF0ZSAqZmlmb19waXBlX3N0YXRlID0gJnBncmFwaF9jdHgtPnBpcGVfc3RhdGU7Ci0JaW50IGk7Ci0jZGVmaW5lIFBJUEVfU0FWRShhZGRyKSBcCi0JZG8geyBcCi0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIGFkZHIpOyBcCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpZm9fcGlwZV9zdGF0ZS0+cGlwZV8jI2FkZHIpOyBpKyspIFwKLQkJCWZpZm9fcGlwZV9zdGF0ZS0+cGlwZV8jI2FkZHJbaV0gPSBudl9yZDMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBKTsgXAotCX0gd2hpbGUgKDApCisJc3RydWN0IHBpcGVfc3RhdGUgKnBpcGUgPSAmcGdyYXBoX2N0eC0+cGlwZV9zdGF0ZTsKIAotCVBJUEVfU0FWRSgweDQ0MDApOwotCVBJUEVfU0FWRSgweDAyMDApOwotCVBJUEVfU0FWRSgweDY0MDApOwotCVBJUEVfU0FWRSgweDY4MDApOwotCVBJUEVfU0FWRSgweDZjMDApOwotCVBJUEVfU0FWRSgweDcwMDApOwotCVBJUEVfU0FWRSgweDc0MDApOwotCVBJUEVfU0FWRSgweDc4MDApOwotCVBJUEVfU0FWRSgweDAwNDApOwotCVBJUEVfU0FWRSgweDAwMDApOwotCi0jdW5kZWYgUElQRV9TQVZFCisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDQ0MDAsIDB4NDQwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDAyMDAsIDB4MDIwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDY0MDAsIDB4NjQwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDY4MDAsIDB4NjgwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDZjMDAsIDB4NmMwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDcwMDAsIDB4NzAwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDc0MDAsIDB4NzQwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDc4MDAsIDB4NzgwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDAwNDAsIDB4MDA0MCk7CisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDAwMDAsIDB4MDAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIG52MTBfZ3JhcGhfbG9hZF9waXBlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZ3JhcGhfc3RhdGUgKnBncmFwaF9jdHggPSBjaGFuLT5wZ3JhcGhfY3R4OwotCXN0cnVjdCBwaXBlX3N0YXRlICpmaWZvX3BpcGVfc3RhdGUgPSAmcGdyYXBoX2N0eC0+cGlwZV9zdGF0ZTsKLQlpbnQgaTsKKwlzdHJ1Y3QgcGlwZV9zdGF0ZSAqcGlwZSA9ICZwZ3JhcGhfY3R4LT5waXBlX3N0YXRlOwogCXVpbnQzMl90IHhmbW9kZTAsIHhmbW9kZTE7Ci0jZGVmaW5lIFBJUEVfUkVTVE9SRShhZGRyKSBcCi0JZG8geyBcCi0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIGFkZHIpOyBcCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpZm9fcGlwZV9zdGF0ZS0+cGlwZV8jI2FkZHIpOyBpKyspIFwKLQkJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIGZpZm9fcGlwZV9zdGF0ZS0+cGlwZV8jI2FkZHJbaV0pOyBcCi0JfSB3aGlsZSAoMCkKLQorCWludCBpOwogCiAJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CiAJLyogWFhYIGNoZWNrIGhhaWt1IGNvbW1lbnRzICovCkBAIC00NTcsMjQgKzQ1OCwyMiBAQAogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4MDAwMDAwMDgpOwogCiAKLQlQSVBFX1JFU1RPUkUoMHgwMjAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKIAlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKIAogCS8qIHJlc3RvcmUgWEZNT0RFICovCiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTAsIHhmbW9kZTApOwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUxLCB4Zm1vZGUxKTsKLQlQSVBFX1JFU1RPUkUoMHg2NDAwKTsKLQlQSVBFX1JFU1RPUkUoMHg2ODAwKTsKLQlQSVBFX1JFU1RPUkUoMHg2YzAwKTsKLQlQSVBFX1JFU1RPUkUoMHg3MDAwKTsKLQlQSVBFX1JFU1RPUkUoMHg3NDAwKTsKLQlQSVBFX1JFU1RPUkUoMHg3ODAwKTsKLQlQSVBFX1JFU1RPUkUoMHg0NDAwKTsKLQlQSVBFX1JFU1RPUkUoMHgwMDAwKTsKLQlQSVBFX1JFU1RPUkUoMHgwMDQwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NjQwMCwgMHg2NDAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NjgwMCwgMHg2ODAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NmMwMCwgMHg2YzAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NzAwMCwgMHg3MDAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NzQwMCwgMHg3NDAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NzgwMCwgMHg3ODAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4NDQwMCwgMHg0NDAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4MDAwMCwgMHgwMDAwKTsKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4MDA0MCwgMHgwMDQwKTsKIAlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKLQotI3VuZGVmIFBJUEVfUkVTVE9SRQogfQogCiBzdGF0aWMgdm9pZCBudjEwX2dyYXBoX2NyZWF0ZV9waXBlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCkBAIC04MzIsNiArODMxLDkgQEAKIAkJCQkgICAgICAoMTw8MzEpKTsKIAlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgxNykgewogCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfREVCVUdfNCwgMHgxZjAwMDAwMCk7CisJCW52X3dyMzIoZGV2LCAweDQwMGExMCwgMHgzZmYzZmI2KTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwODM4LCAweDJmODY4NCk7CisJCW52X3dyMzIoZGV2LCAweDQwMDgzYywgMHgxMTVmM2YpOwogCQludl93cjMyKGRldiwgMHgwMDQwMDZiMCwgMHg0MDAwMDAyMCk7CiAJfSBlbHNlCiAJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9ERUJVR180LCAweDAwMDAwMDAwKTsKQEAgLTg2Nyw2ICs4NjksMTE1IEBACiB7CiB9CiAKK3N0YXRpYyBpbnQKK252MTdfZ3JhcGhfbXRoZF9sbWFfd2luZG93KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAorCQkJICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZ3JhcGhfc3RhdGUgKmN0eCA9IGNoYW4tPnBncmFwaF9jdHg7CisJc3RydWN0IHBpcGVfc3RhdGUgKnBpcGUgPSAmY3R4LT5waXBlX3N0YXRlOworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJdWludDMyX3QgcGlwZV8weDAwNDBbMV0sIHBpcGVfMHg2NGMwWzhdLCBwaXBlXzB4NmE4MFszXSwgcGlwZV8weDZhYjBbM107CisJdWludDMyX3QgeGZtb2RlMCwgeGZtb2RlMTsKKwlpbnQgaTsKKworCWN0eC0+bG1hX3dpbmRvd1sobXRoZCAtIDB4MTYzOCkgLyA0XSA9IGRhdGE7CisKKwlpZiAobXRoZCAhPSAweDE2NDQpCisJCXJldHVybiAwOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4MDA0MCwgMHgwMDQwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKKworCVBJUEVfUkVTVE9SRShkZXYsIGN0eC0+bG1hX3dpbmRvdywgMHg2NzkwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJeGZtb2RlMCA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwKTsKKwl4Zm1vZGUxID0gbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTEpOworCisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDQ0MDAsIDB4NDQwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZV8weDY0YzAsIDB4NjRjMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZV8weDZhYjAsIDB4NmFiMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZV8weDZhODAsIDB4NmE4MCk7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwLCAweDEwMDAwMDAwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgMHgwMDAwNjRjMCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgzZjgwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwMCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDA2YWIwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDNmODAwMDAwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIDB4MDAwMDZhODApOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4MDAwMDAwMDApOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgMHgwMDAwMDA0MCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwOCk7CisKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDAwNDAsIDB4MDA0MCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMCwgeGZtb2RlMCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTEsIHhmbW9kZTEpOworCisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDY0YzAsIDB4NjRjMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDZhYjAsIDB4NmFiMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDZhODAsIDB4NmE4MCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDQ0MDAsIDB4NDQwMCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDAwMGMwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDAwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK252MTdfZ3JhcGhfbXRoZF9sbWFfZW5hYmxlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAorCQkJICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfREVCVUdfNCwKKwkJbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX0RFQlVHXzQpIHwgMHgxIDw8IDgpOworCW52X3dyMzIoZGV2LCAweDAwNDAwNmIwLAorCQludl9yZDMyKGRldiwgMHgwMDQwMDZiMCkgfCAweDggPDwgMjQpOworCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjE3X2dyYXBoX2NlbHNpdXNfbXRoZHNbXSA9IHsKKwl7IDB4MTYzOCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTYzYywgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTY0MCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTY0NCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTY1OCwgbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUgfSwKKwl7fQorfTsKKwogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjEwX2dyYXBoX2dyY2xhc3NbXSA9IHsKIAl7IDB4MDAzMCwgZmFsc2UsIE5VTEwgfSwgLyogbnVsbCAqLwogCXsgMHgwMDM5LCBmYWxzZSwgTlVMTCB9LCAvKiBtMm1mICovCkBAIC04ODcsNiArOTk4LDYgQEAKIAl7IDB4MDA5NSwgZmFsc2UsIE5VTEwgfSwgLyogbXVsdGl0ZXhfdHJpICovCiAJeyAweDAwNTYsIGZhbHNlLCBOVUxMIH0sIC8qIGNlbGNpdXMgKG52MTApICovCiAJeyAweDAwOTYsIGZhbHNlLCBOVUxMIH0sIC8qIGNlbGNpdXMgKG52MTEpICovCi0JeyAweDAwOTksIGZhbHNlLCBOVUxMIH0sIC8qIGNlbGNpdXMgKG52MTcpICovCisJeyAweDAwOTksIGZhbHNlLCBudjE3X2dyYXBoX2NlbHNpdXNfbXRoZHMgfSwgLyogY2VsY2l1cyAobnYxNykgKi8KIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYwppbmRleCA0NmNmZDljLi44MWMwMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJcmV0dXJuOwogCW5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKS0+bGFzdF9kcG1zID0gbW9kZTsKIAotCU5WX1RSQUNFKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIFRWIGVuY29kZXIgKG91dHB1dCAlZClcbiIsCisJTlZfSU5GTyhkZXYsICJTZXR0aW5nIGRwbXMgbW9kZSAlZCBvbiBUViBlbmNvZGVyIChvdXRwdXQgJWQpXG4iLAogCQkgbW9kZSwgbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5kY2ItPmluZGV4KTsKIAogCXJlZ3MtPnB0dl8yMDAgJj0gfjE7CkBAIC02MTksNyArNjE5LDcgQEAKIHsKIAlzdHJ1Y3QgbnYxN190dl9lbmNvZGVyICp0dl9lbmMgPSB0b190dl9lbmMoZW5jb2Rlcik7CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlrZnJlZSh0dl9lbmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCmluZGV4IGQzZTBhMmEuLjJiMzMyYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKQEAgLTI0LDM2ICsyNCwxMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLQogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgotCi1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0MC5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0MC5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0MS5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0MS5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Mi5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Mi5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0My5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0My5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0NC5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0NC5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Ni5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Ni5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Ny5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Ny5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0OS5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0OS5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0YS5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0YS5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Yi5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Yi5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Yy5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0Yy5jdHh2YWxzIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0ZS5jdHhwcm9nIik7Ci1NT0RVTEVfRklSTVdBUkUoIm5vdXZlYXUvbnY0ZS5jdHh2YWxzIik7CisjaW5jbHVkZSAibm91dmVhdV9ncmN0eC5oIgogCiBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICoKIG52NDBfZ3JhcGhfY2hhbm5lbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtODMsMjcgKzU3LDMwIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqY3R4OworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCWludCByZXQ7CiAKLQkvKiBBbGxvY2F0ZSBhIDE3NUtpQiBibG9jayBvZiBQUkFNSU4gdG8gc3RvcmUgdGhlIGNvbnRleHQuICBUaGlzCi0JICogaXMgbWFzc2l2ZSBvdmVya2lsbCBmb3IgYSBsb3Qgb2YgY2hpcHNldHMsIGJ1dCBpdCBzaG91bGQgYmUgc2FmZQotCSAqIHVudGlsIHdlJ3JlIGFibGUgdG8gaW1wbGVtZW50IHRoaXMgcHJvcGVybHkgKHdpbGwgaGFwcGVuIGF0IG1vcmUKLQkgKiBvciBsZXNzIHRoZSBzYW1lIHRpbWUgd2UncmUgYWJsZSB0byB3cml0ZSBvdXIgb3duIGNvbnRleHQgcHJvZ3JhbXMuCi0JICovCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfbmV3X3JlZihkZXYsIGNoYW4sIE5VTEwsIDAsIDE3NSoxMDI0LCAxNiwKLQkJCQkJICBOVk9CSl9GTEFHX1pFUk9fQUxMT0MsCi0JCQkJCSAgJmNoYW4tPnJhbWluX2dyY3R4KTsKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgY2hhbiwgTlVMTCwgMCwgcGdyYXBoLT5ncmN0eF9zaXplLAorCQkJCSAgICAgMTYsIE5WT0JKX0ZMQUdfWkVST19BTExPQywKKwkJCQkgICAgICZjaGFuLT5yYW1pbl9ncmN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQljdHggPSBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqOwogCiAJLyogSW5pdGlhbGlzZSBkZWZhdWx0IGNvbnRleHQgdmFsdWVzICovCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JbnY0MF9ncmN0eF92YWxzX2xvYWQoZGV2LCBjdHgpOwotCW52X3dvMzIoZGV2LCBjdHgsIDAsIGN0eC0+aW1fcHJhbWluLT5zdGFydCk7Ci0JZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKKwlpZiAoIXBncmFwaC0+Y3R4cHJvZykgeworCQlzdHJ1Y3Qgbm91dmVhdV9ncmN0eCBjdHggPSB7fTsKIAorCQljdHguZGV2ID0gY2hhbi0+ZGV2OworCQljdHgubW9kZSA9IE5PVVZFQVVfR1JDVFhfVkFMUzsKKwkJY3R4LmRhdGEgPSBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqOworCQludjQwX2dyY3R4X2luaXQoJmN0eCk7CisJfSBlbHNlIHsKKwkJbm91dmVhdV9ncmN0eF92YWxzX2xvYWQoZGV2LCBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqKTsKKwl9CisJbnZfd28zMihkZXYsIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmosIDAsCisJCSAgICAgY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iai0+aW1fcHJhbWluLT5zdGFydCk7CisJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA0LDEzNSArMTgxLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nIHsKLQl1aW50MzJfdCBzaWduYXR1cmU7Ci0JdWludDhfdCAgdmVyc2lvbjsKLQl1aW50MTZfdCBsZW5ndGg7Ci0JdWludDMyX3QgZGF0YVtdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgewotCXVpbnQzMl90IHNpZ25hdHVyZTsKLQl1aW50OF90ICB2ZXJzaW9uOwotCXVpbnQzMl90IGxlbmd0aDsKLQlzdHJ1Y3QgewotCQl1aW50MzJfdCBvZmZzZXQ7Ci0JCXVpbnQzMl90IHZhbHVlOwotCX0gZGF0YVtdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWludAotbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQljb25zdCBpbnQgY2hpcHNldCA9IGRldl9wcml2LT5jaGlwc2V0OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY29uc3Qgc3RydWN0IG5vdXZlYXVfY3R4cHJvZyAqY3A7Ci0JY29uc3Qgc3RydWN0IG5vdXZlYXVfY3R4dmFscyAqY3Y7Ci0JY2hhciBuYW1lWzMyXTsKLQlpbnQgcmV0LCBpOwotCi0JcGdyYXBoLT5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKLQotCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7Ci0JCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHByb2ciLCBjaGlwc2V0KTsKLQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7Ci0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHByb2cgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcGdyYXBoLT5jdHhwcm9nID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHhwcm9nXG4iKTsKLQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJbWVtY3B5KHBncmFwaC0+Y3R4cHJvZywgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQotCQljcCA9IHBncmFwaC0+Y3R4cHJvZzsKLQkJaWYgKGNwLT5zaWduYXR1cmUgIT0gMHg1MDQzNTY0ZSB8fCBjcC0+dmVyc2lvbiAhPSAwIHx8Ci0JCSAgICBjcC0+bGVuZ3RoICE9ICgoZnctPnNpemUgLSA3KSAvIDQpKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJjdHhwcm9nIGludmFsaWRcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCX0KLQotCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7Ci0JCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHZhbHMiLCBjaGlwc2V0KTsKLQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7Ci0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHZhbHMgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlwZ3JhcGgtPmN0eHZhbHMgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCW1lbWNweShwZ3JhcGgtPmN0eHZhbHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7Ci0KLQkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKLQkJaWYgKGN2LT5zaWduYXR1cmUgIT0gMHg1NjQzNTY0ZSB8fCBjdi0+dmVyc2lvbiAhPSAwIHx8Ci0JCSAgICBjdi0+bGVuZ3RoICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCX0KLQotCWNwID0gcGdyYXBoLT5jdHhwcm9nOwotCi0JbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IGNwLT5sZW5ndGg7IGkrKykKLQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLCBjcC0+ZGF0YVtpXSk7Ci0KLQlwZ3JhcGgtPmFjY2VsX2Jsb2NrZWQgPSBmYWxzZTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotbnY0MF9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQotCWlmIChwZ3JhcGgtPmN0eHByb2cpIHsKLQkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKLQkJcGdyYXBoLT5jdHhwcm9nID0gTlVMTDsKLQl9Ci0KLQlpZiAocGdyYXBoLT5jdHh2YWxzKSB7Ci0JCWtmcmVlKHBncmFwaC0+Y3R4cHJvZyk7Ci0JCXBncmFwaC0+Y3R4dmFscyA9IE5VTEw7Ci0JfQotfQotCi12b2lkCi1udjQwX2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwotCXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgKmN2ID0gcGdyYXBoLT5jdHh2YWxzOwotCWludCBpOwotCi0JaWYgKCFjdikKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IGN2LT5sZW5ndGg7IGkrKykKLQkJbnZfd28zMihkZXYsIGN0eCwgY3YtPmRhdGFbaV0ub2Zmc2V0LCBjdi0+ZGF0YVtpXS52YWx1ZSk7Ci19Ci0KIC8qCiAgKiBHNzAJCTB4NDcKICAqIEc3MQkJMHg0OQpAQCAtMzU1LDcgKzIwMywyNiBAQAogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUsIG52X3JkMzIoZGV2LCBOVjAzX1BNQ19FTkFCTEUpIHwKIAkJCSBOVl9QTUNfRU5BQkxFX1BHUkFQSCk7CiAKLQludjQwX2dyY3R4X2luaXQoZGV2KTsKKwlpZiAobm91dmVhdV9jdHhmdykgeworCQlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSAxNzUgKiAxMDI0OworCX0KKworCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OworCQl1aW50MzJfdCBjcFsyNTZdOworCisJCWN0eC5kZXYgPSBkZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOworCQljdHguZGF0YSA9IGNwOworCQljdHguY3R4cHJvZ19tYXggPSAyNTY7CisJCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5ncmN0eF9zaXplID0gY3R4LmN0eHZhbHNfcG9zICogNDsKKworCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IGN0eC5jdHhwcm9nX2xlbjsgaSsrKQorCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9EQVRBLCBjcFtpXSk7CisJfQogCiAJLyogTm8gY29udGV4dCBwcmVzZW50IGN1cnJlbnRseSAqLwogCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfQ1VSLCAweDAwMDAwMDAwKTsKQEAgLTUzNSw2ICs0MDIsNyBAQAogCiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKIH0KIAogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWIxMWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmN0eC5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKy8qIE5WSURJQSBjb250ZXh0IHByb2dyYW1zIGhhbmRsZSBhIG51bWJlciBvZiBvdGhlciBjb25kaXRpb25zIHdoaWNoIGFyZQorICogbm90IGltcGxlbWVudGVkIGluIG91ciB2ZXJzaW9ucy4gIEl0J3Mgbm90IGNsZWFyIHdoeSBOVklESUEgY29udGV4dAorICogcHJvZ3JhbXMgaGF2ZSB0aGlzIGNvZGUsIG5vciB3aGV0aGVyIGl0J3Mgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvcgorICogY29ycmVjdCBvcGVyYXRpb24uICBXZSdsbCBpbXBsZW1lbnQgYWRkaXRpb25hbCBoYW5kbGluZyBpZi93aGVuIHdlCisgKiBkaXNjb3ZlciBpdCdzIG5lY2Vzc2FyeS4KKyAqCisgKiAtIE9uIGNvbnRleHQgc2F2ZSwgTlZJRElBIHNldCAweDQwMDMxNCBiaXQgMCB0byAxIGlmIHRoZSAiM0Qgc3RhdGUiCisgKiAgIGZsYWcgaXMgc2V0LCB0aGlzIGdldHMgc2F2ZWQgaW50byB0aGUgY29udGV4dC4KKyAqIC0gT24gY29udGV4dCBzYXZlLCB0aGUgY29udGV4dCBwcm9ncmFtIGZvciBhbGwgY2FyZHMgbG9hZCBuc291cmNlCisgKiAgIGludG8gYSBmbGFnIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgSUxMRUdBTF9NVEhELiAgSWYgaXQncyBzZXQsCisgKiAgIG9wY29kZSAweDYwMDAwZCBpcyBjYWxsZWQgYmVmb3JlIHJlc3VtaW5nIG5vcm1hbCBvcGVyYXRpb24uCisgKiAtIFNvbWUgY29udGV4dCBwcm9ncmFtcyBjaGVjayBtb3JlIGNvbmRpdGlvbnMgdGhhbiB0aGUgYWJvdmUuICBOVjQ0CisgKiAgIGNoZWNrczogKChuc291cmNlICYgMHgwODU3KSB8fCAoMHg0MDA3MTggJiAweDAxMDApIHx8IChpbnRyICYgMHgwMDAxKSkKKyAqICAgYW5kIGNhbGxzIDB4NjAwMDBkIGJlZm9yZSByZXN1bWluZyBub3JtYWwgb3BlcmF0aW9uLgorICogLSBBdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgTlZJRElBJ3MgY29udGV4dCBwcm9ncmFtcywgZmxhZyA5IGlzIGNoZWNrZWQKKyAqICAgYW5kIGlmIHRydWUgMHg4MDAwMDEgaXMgY2FsbGVkIHdpdGggY291bnQ9MCwgcG9zPTAsIHRoZSBmbGFnIGlzIGNsZWFyZWQKKyAqICAgYW5kIHRoZW4gdGhlIGN0eHByb2cgaXMgYWJvcnRlZC4gIEl0IGxvb2tzIGxpa2UgYSBjb21wbGljYXRlZCBOT1AsCisgKiAgIGl0cyBwdXJwb3NlIGlzIHVua25vd24uCisgKiAtIEluIHRoZSBzZWN0aW9uIG9mIGNvZGUgdGhhdCBsb2FkcyB0aGUgcGVyLXZzIHN0YXRlLCBOVklESUEgY2hlY2sKKyAqICAgZmxhZyAxMC4gIElmIGl0J3Mgc2V0LCB0aGV5IG9ubHkgdHJhbnNmZXIgdGhlIHNtYWxsIDB4MzAwIGJ5dGUgYmxvY2sKKyAqICAgb2Ygc3RhdGUgKyB0aGUgc3RhdGUgZm9yIGEgc2luZ2xlIHZzIGFzIG9wcG9zZWQgdG8gdGhlIHN0YXRlIGZvcgorICogICBhbGwgdnMgdW5pdHMuICBJdCBkb2Vzbid0IHNlZW0gbGlrZWx5IHRoYXQgaXQnbGwgb2NjdXIgaW4gbm9ybWFsCisgKiAgIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBzZWVpbmcgYXMgaXQgYXBwZWFycyBOVklESUEgbWF5IGhhdmUgc2NyZXdlZAorICogICB1cCB0aGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgYW5kIGhhdmUgYW4gaW52YWxpZCBpbnN0cnVjdGlvbgorICogICByYXRoZXIgdGhhbiBhIGNwX2xzcihjdHgsIGR3b3Jkc19mb3JfMV92c191bml0KSBpbnN0cnVjdGlvbi4KKyAqIC0gVGhlcmUncyBhIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29udGV4dCBvZmZzZXQgMCAod2hlcmUgd2UgcGxhY2UKKyAqICAgdGhlIFBSQU1JTiBvZmZzZXQgb2YgdGhlIGNvbnRleHQpIGlzIGxvYWRlZCBpbnRvIGVpdGhlciAweDQwODAwMCwKKyAqICAgMHg0MDgwMDQgb3IgMHg0MDgwMDguICBOb3Qgc3VyZSB3aGF0J3MgdXAgdGhlcmUgZWl0aGVyLgorICogLSBUaGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgc2F2ZSAweDQwMGEwMCBhZ2FpbiBkdXJpbmcgdGhlIGNsZWFudXAKKyAqICAgcGF0aCBmb3IgYXV0by1sb2FkY3R4LgorICovCisKKyNkZWZpbmUgQ1BfRkxBR19DTEVBUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1NFVCAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT04gICAgICAgICgoMCAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT05fTE9BRCAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTl9TQVZFICAgMQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRSAgICAgICAgICAgICAoKDAgKiAzMikgKyA1KQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQUQgICAgICAgICAgICAgKCgwICogMzIpICsgNikKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX1VTRVJfTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTX0lETEUgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TVEFUVVNfQlVTWSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRSAgICAgICAgICAgICAoKDMgKiAzMikgKyA0KQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfQVVUT19TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQUQgICAgICAgICAgICAgKCgzICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX0FVVE9fTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfVU5LNTQgICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDYpCisjZGVmaW5lIENQX0ZMQUdfVU5LNTRfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTks1NF9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FMV0FZUyAgICAgICAgICAgICAgICAoKDMgKiAzMikgKyA4KQorI2RlZmluZSBDUF9GTEFHX0FMV0FZU19GQUxTRSAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfQUxXQVlTX1RSVUUgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VTks1NyAgICAgICAgICAgICAgICAgKCgzICogMzIpICsgOSkKKyNkZWZpbmUgQ1BfRkxBR19VTks1N19DTEVBUiAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1VOSzU3X1NFVCAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQ1BfQ1RYICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UICAgICAgICAgICAgIDB4MDAwZmMwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BfQ1RYX1JFRyAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgQ1BfTE9BRF9TUiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BfTE9BRF9TUl9WQUxVRSAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgQ1BfQlJBICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BfQlJBX0lQICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQ1BfQlJBX0lQX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BfQlJBX0lGX0NMRUFSICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfQlJBX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfV0FJVCAgICAgICAgICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgQ1BfV0FJVF9TRVQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfV0FJVF9GTEFHICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfU0VUICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgQ1BfU0VUXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfU0VUX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfTkVYVF9UT19TV0FQICAgICAgICAgIDB4MDA2MDAwMDcKKyNkZWZpbmUgQ1BfTkVYVF9UT19DVVJSRU5UICAgICAgIDB4MDA2MDAwMDkKKyNkZWZpbmUgQ1BfU0VUX0NPTlRFWFRfUE9JTlRFUiAgIDB4MDA2MDAwMGEKKyNkZWZpbmUgQ1BfRU5EICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMGUKKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19VTkswMSAgICAgIDB4MDA4MDAwMDEgLyogdW5rbm93biAqLworI2RlZmluZSBDUF9MT0FEX01BR0lDX05WNDRUQ0wgICAgMHgwMDgwMDAyOSAvKiBwZXItdnMgc3RhdGUgKDB4NDQ5NykgKi8KKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19OVjQwVENMICAgIDB4MDA4MDAwNDEgLyogcGVyLXZzIHN0YXRlICgweDQwOTcpICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCisKKy8qIFRPRE86CisgKiAgLSBnZXQgdnMgY291bnQgZnJvbSAweDE1NDAKKyAqICAtIGRvY3VtZW50IHVuaW1wbGVtZW50ZWQgYml0cyBjb21wYXJlZCB0byBudmlkaWEKKyAqICAgIC0gbnNvdXJjZSBoYW5kbGluZworICogICAgLSBSMCAmIDB4MDIwMCBoYW5kbGluZworICogICAgLSBzaW5nbGUtdnMgaGFuZGxpbmcKKyAqICAgIC0gNDAwMzE0IGJpdCAwCisgKi8KKworc3RhdGljIGludAorbnY0MF9ncmFwaF80MDk3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDYwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAhISgweDBiYWYgJiAoMSA8PCBkZXZfcHJpdi0+Y2hpcHNldCkpOworfQorCitzdGF0aWMgaW50CitudjQwX2dyYXBoX3ZzX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJcmV0dXJuIDg7CisJY2FzZSAweDQwOgorCQlyZXR1cm4gNjsKKwljYXNlIDB4NDE6CisJY2FzZSAweDQyOgorCQlyZXR1cm4gNTsKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ0OgorCWNhc2UgMHg0NjoKKwljYXNlIDB4NGE6CisJCXJldHVybiAzOworCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworCitlbnVtIGNwX2xhYmVsIHsKKwljcF9jaGVja19sb2FkID0gMSwKKwljcF9zZXR1cF9hdXRvX2xvYWQsCisJY3Bfc2V0dXBfbG9hZCwKKwljcF9zZXR1cF9zYXZlLAorCWNwX3N3YXBfc3RhdGUsCisJY3Bfc3dhcF9zdGF0ZTNkXzNfaXNfc2F2ZSwKKwljcF9wcmVwYXJlX2V4aXQsCisJY3BfZXhpdCwKK307CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9nZW5lcmFsKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJY3BfY3R4KGN0eCwgMHg0MDAwYTQsIDEpOworCWdyX2RlZihjdHgsIDB4NDAwMGE0LCAweDAwMDAwMDA4KTsKKwljcF9jdHgoY3R4LCAweDQwMDE0NCwgNTgpOworCWdyX2RlZihjdHgsIDB4NDAwMTQ0LCAweDAwMDAwMDAxKTsKKwljcF9jdHgoY3R4LCAweDQwMDMxNCwgMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDAzMTQsIDB4MDAwMDAwMDApOworCWNwX2N0eChjdHgsIDB4NDAwNDAwLCAxMCk7CisJY3BfY3R4KGN0eCwgMHg0MDA0ODAsIDEwKTsKKwljcF9jdHgoY3R4LCAweDQwMDUwMCwgMTkpOworCWdyX2RlZihjdHgsIDB4NDAwNTE0LCAweDAwMDQwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMDUyNCwgMHg1NTU1NTU1NSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA1MjgsIDB4NTU1NTU1NTUpOworCWdyX2RlZihjdHgsIDB4NDAwNTJjLCAweDU1NTU1NTU1KTsKKwlncl9kZWYoY3R4LCAweDQwMDUzMCwgMHg1NTU1NTU1NSk7CisJY3BfY3R4KGN0eCwgMHg0MDA1NjAsIDYpOworCWdyX2RlZihjdHgsIDB4NDAwNTY4LCAweDAwMDBmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMDU2YywgMHgwMDAwZmZmZik7CisJY3BfY3R4KGN0eCwgMHg0MDA1N2MsIDUpOworCWNwX2N0eChjdHgsIDB4NDAwNzEwLCAzKTsKKwlncl9kZWYoY3R4LCAweDQwMDcxMCwgMHgyMDAxMDAwMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA3MTQsIDB4MGY3M2VmMDApOworCWNwX2N0eChjdHgsIDB4NDAwNzI0LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwMDcyNCwgMHgwMjAwODgyMSk7CisJY3BfY3R4KGN0eCwgMHg0MDA3NzAsIDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwKSB7CisJCWNwX2N0eChjdHgsIDB4NDAwODE0LCA0KTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4MjgsIDUpOworCQljcF9jdHgoY3R4LCAweDQwMDg0MCwgNSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODUwLCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NTgsIDQpOworCQlncl9kZWYoY3R4LCAweDQwMDg1OCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODVjLCAweDAwMDAwMDQwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NjQsIDB4ODAwMDAwMDApOworCQljcF9jdHgoY3R4LCAweDQwMDg2YywgOSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODZjLCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NzAsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDg3NCwgMHg4MDAwMDAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODc4LCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODgsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4YywgMHg4MDAwMDAwMCk7CisJCWNwX2N0eChjdHgsIDB4NDAwOWMwLCA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA5Y2MsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDlkYywgMHg4MDAwMDAwMCk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NDAsIDIwKTsKKwkJaWYgKCFudjQwX2dyYXBoXzQwOTcoY3R4LT5kZXYpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCWdyX2RlZihjdHgsIDB4NDAwODYwICsgKGkgKiA0KSwgMHgwMDAwMDAwMSk7CisJCX0KKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODAsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4NCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODg4LCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4OTQsIDExKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4OTQsIDB4MDAwMDAwNDApOworCQlpZiAobnY0MF9ncmFwaF80MDk3KGN0eC0+ZGV2KSkgeworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQlncl9kZWYoY3R4LCAweDQwMDhhMCArIChpICogNCksIDB4ODAwMDAwMDApOworCQl9CisJCWNwX2N0eChjdHgsIDB4NDAwOGUwLCAyKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4ZjgsIDIpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0YyB8fAorCQkgICAgKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHg2MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAwOWY4LCAxKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBhMDAsIDczKTsKKwlncl9kZWYoY3R4LCAweDQwMGIwYywgMHgwYjBiMGIwYyk7CisJY3BfY3R4KGN0eCwgMHg0MDEwMDAsIDQpOworCWNwX2N0eChjdHgsIDB4NDA1MDA0LCAxKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAzNDQ4LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDM0NDgsIDB4MDAwMDEwMTApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcF9jdHgoY3R4LCAweDQwMzQ0MCwgMSk7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDQwOgorCQkJZ3JfZGVmKGN0eCwgMHg0MDM0NDAsIDB4MDAwMDAwMTApOworCQkJYnJlYWs7CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDQ2OgorCQljYXNlIDB4NGE6CisJCQlncl9kZWYoY3R4LCAweDQwMzQ0MCwgMHgwMDAwMzAxMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDRjOgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg2NzoKKwkJZGVmYXVsdDoKKwkJCWdyX2RlZihjdHgsIDB4NDAzNDQwLCAweDAwMDAxMDEwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK252NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2Qoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTg4MCwgNTEpOworCQlncl9kZWYoY3R4LCAweDQwMTk0MCwgMHgwMDAwMDEwMCk7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDYgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NyB8fAorCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQ5IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4NGIpIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDE4ODAsIDMyKTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMTg4MCArIChpICogNCksIDB4MDAwMDAxMTEpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NikKKwkJCWNwX2N0eChjdHgsIDB4NDAxOTAwLCAxNik7CisJCWNwX2N0eChjdHgsIDB4NDAxOTQwLCAzKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDE5NGMsIDE4KTsKKwlncl9kZWYoY3R4LCAweDQwMTk1NCwgMHgwMDAwMDExMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5NTgsIDB4MDAwODAwNjApOworCWdyX2RlZihjdHgsIDB4NDAxOTc0LCAweDAwMDAwMDgwKTsKKwlncl9kZWYoY3R4LCAweDQwMTk3OCwgMHhmZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5N2MsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIDB4NDAxOTkwLCAweDQ2NDAwMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMik7CisJCWNwX2N0eChjdHgsIDB4NDAxOWFjLCA1KTsKKwl9IGVsc2UgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMSk7CisJCWNwX2N0eChjdHgsIDB4NDAxOWI0LCAzKTsKKwl9CisJZ3JfZGVmKGN0eCwgMHg0MDE5YmMsIDB4ZmZmZjAwMDApOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAxOWMwLCAxOCk7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDE5YzAgKyAoaSAqIDQpLCAweDg4ODg4ODg4KTsKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAxYTA4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWExMCwgMHgwZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhMTQsIDB4MGZmZjAwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYTFjLCAweDAwMDExMTAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWEyYywgNCk7CisJY3BfY3R4KGN0eCwgMHg0MDFhNDQsIDI2KTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJZ3JfZGVmKGN0eCwgMHg0MDFhNDQgKyAoaSAqIDQpLCAweDA3ZmYwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMWE4YywgMHg0YjdmZmZmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYjgsIDMpOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDAxYWI4LCAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYzAsIDEpOworCX0KKwljcF9jdHgoY3R4LCAweDQwMWFkMCwgOCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZDAsIDB4MzAyMDEwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYWQ0LCAweDcwNjA1MDQwKTsKKwlncl9kZWYoY3R4LCAweDQwMWFkOCwgMHhiOGE4OTg4OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZGMsIDB4ZjhlOGQ4YzgpOworCWNwX2N0eChjdHgsIDB4NDAxYjEwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMiA6IDEpOworCWdyX2RlZihjdHgsIDB4NDAxYjEwLCAweDQwMTAwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWIxOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDYgOiA1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIyOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/CisJCQkgICAgICAweDAwMDAwMDA0IDogMHgwMDAwMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiMzAsIDI1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIzNCwgMHgwMDAwZmZmZik7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNjgsIDB4NDM1MTg1ZDYpOworCWdyX2RlZihjdHgsIDB4NDAxYjZjLCAweDIxNTViNjk5KTsKKwlncl9kZWYoY3R4LCAweDQwMWI3MCwgMHhmZWRjYmE5OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNzQsIDB4MDAwMDAwOTgpOworCWdyX2RlZihjdHgsIDB4NDAxYjg0LCAweGZmZmZmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMWI4OCwgMHgwMGZmNzAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiOGMsIDB4MDAwMGZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ0ICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGEgJiYKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0ZSkKKwkJY3BfY3R4KGN0eCwgMHg0MDFiOTQsIDEpOworCWNwX2N0eChjdHgsIDB4NDAxYjk4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWI5YywgMHgwMGZmMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiYzAsIDkpOworCWdyX2RlZihjdHgsIDB4NDAxYmUwLCAweDAwZmZmZjAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWMwMCwgMTkyKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeyAvKiBmcmFnbWVudCB0ZXh0dXJlIHVuaXRzICovCisJCWdyX2RlZihjdHgsIDB4NDAxYzQwICsgKGkgKiA0KSwgMHgwMDAxODQ4OCk7CisJCWdyX2RlZihjdHgsIDB4NDAxYzgwICsgKGkgKiA0KSwgMHgwMDAyODIwMik7CisJCWdyX2RlZihjdHgsIDB4NDAxZDAwICsgKGkgKiA0KSwgMHgwMDAwYWFlNCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDQwICsgKGkgKiA0KSwgMHgwMTAxMjAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDgwICsgKGkgKiA0KSwgMHgwMDA4MDAwOCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZTAwICsgKGkgKiA0KSwgMHgwMDEwMDAwOCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsgLyogdmVydGV4IHRleHR1cmUgdW5pdHMgKi8KKwkJZ3JfZGVmKGN0eCwgMHg0MDFlOTAgKyAoaSAqIDQpLCAweDAwMDFiYzgwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYTAgKyAoaSAqIDQpLCAweDAwMDAwMjAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYzAgKyAoaSAqIDQpLCAweDAwMDAwMDA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlZTAgKyAoaSAqIDQpLCAweDAwMDgwMDA4KTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBmNWMsIDMpOworCWdyX2RlZihjdHgsIDB4NDAwZjVjLCAweDAwMDAwMDAyKTsKKwljcF9jdHgoY3R4LCAweDQwMGY4NCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zdGF0ZTNkXzIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwljcF9jdHgoY3R4LCAweDQwMjAwMCwgMSk7CisJY3BfY3R4KGN0eCwgMHg0MDI0MDQsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPyAxIDogMik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMDEpOworCQlicmVhazsKKwljYXNlIDB4NGM6CisJY2FzZSAweDRlOgorCWNhc2UgMHg2NzoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMjApOworCQlicmVhazsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDA0MjEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlncl9kZWYoY3R4LCAweDQwMjQwNCwgMHgwMDAwMDAyMSk7CisJfQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQlncl9kZWYoY3R4LCAweDQwMjQwOCwgMHgwMzBjMzBjMyk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NDoKKwljYXNlIDB4NDY6CisJY2FzZSAweDRhOgorCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCQljcF9jdHgoY3R4LCAweDQwMjQ0MCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyNDQwLCAweDAwMDExMDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAyNDgwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gOCA6IDkpOworCWdyX2RlZihjdHgsIDB4NDAyNDg4LCAweDNlMDIwMjAwKTsKKwlncl9kZWYoY3R4LCAweDQwMjQ4YywgMHgwMGZmZmZmZik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0OTAsIDB4NjAxMDNmMDApOworCQlicmVhazsKKwljYXNlIDB4NDc6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDQwMTAzZjAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDQxOgorCWNhc2UgMHg0MjoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQlncl9kZWYoY3R4LCAweDQwMjQ5MCwgMHgyMDEwM2YwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDBjMTAzZjAwKTsKKwkJYnJlYWs7CisJfQorCWdyX2RlZihjdHgsIDB4NDAyNDljLCBkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDQzID8KKwkJCSAgICAgIDB4MDAwMjAwMDAgOiAweDAwMDQwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMjUwMCwgMzEpOworCWdyX2RlZihjdHgsIDB4NDAyNTMwLCAweDAwMDA4MTAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJY3BfY3R4KGN0eCwgMHg0MDI1N2MsIDYpOworCWNwX2N0eChjdHgsIDB4NDAyNTk0LCAxNik7CisJY3BfY3R4KGN0eCwgMHg0MDI4MDAsIDE3KTsKKwlncl9kZWYoY3R4LCAweDQwMjgwMCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NzoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQljcF9jdHgoY3R4LCAweDQwMjg2NCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyODY0LCAweDAwMDAxMDAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NzAsIDMpOworCQlncl9kZWYoY3R4LCAweDQwMjg3OCwgMHgwMDAwMDAwMyk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ3KSB7IC8qIGJlbG9uZyBhdCBlbmQhISAqLworCQkJY3BfY3R4KGN0eCwgMHg0MDI5MDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5NDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5ODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5YzAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhMDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhNDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhYzAsIDEpOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg0MDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMTAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDI4NTQsIDB4MDAwMDAwMDMpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMmMwMCwgNCk7CisJZ3JfZGVmKGN0eCwgMHg0MDJjMDAsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPworCQkJICAgICAgMHg4MDgwMDAwMSA6IDB4MDA4ODgwMDEpOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDQwKTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMmM0MCArIChpICogNCksIDB4ZmZmZmZmZmYpOworCQljcF9jdHgoY3R4LCAweDQwMzBiOCwgMTMpOworCQlncl9kZWYoY3R4LCAweDQwMzBkYywgMHgwMDAwMDAwNSk7CisJCWdyX2RlZihjdHgsIDB4NDAzMGU4LCAweDAwMDBmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMTAsIDQpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAyYzIwLCAzNik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4NDIpCisJCQljcF9jdHgoY3R4LCAweDQwMmMyMCwgMjQpOworCQllbHNlCisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDRhKQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDE2KTsKKwkJZWxzZQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDgpOworCQljcF9jdHgoY3R4LCAweDQwMmNiMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDEyIDogMTMpOworCQlncl9kZWYoY3R4LCAweDQwMmNkNCwgMHgwMDAwMDAwNSk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDJjZTAsIDB4MDAwMGZmZmYpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMzQwMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQxMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQyMCwgbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldikpOworCWZvciAoaSA9IDA7IGkgPCBudjQwX2dyYXBoX3ZzX2NvdW50KGN0eC0+ZGV2KTsgaSsrKQorCQlncl9kZWYoY3R4LCAweDQwMzQyMCArIChpICogNCksIDB4MDAwMDU1NTUpOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDM2MDAsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMzYwMCwgMHgwMDAwMDAwMSk7CisJfQorCWNwX2N0eChjdHgsIDB4NDAzODAwLCAxKTsKKworCWNwX2N0eChjdHgsIDB4NDAzYzE4LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwM2MxOCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDUwMTgsIDEpOworCQlncl9kZWYoY3R4LCAweDQwNTAxOCwgMHgwOGUwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDA1YzI0LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDVjMjQsIDB4MDAwZTMwMDApOworCQlicmVhazsKKwl9CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGUpCisJCWNwX2N0eChjdHgsIDB4NDA1ODAwLCAxMSk7CisJY3BfY3R4KGN0eCwgMHg0MDcwMDAsIDEpOworfQorCitzdGF0aWMgdm9pZAorbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJaW50IGxlbiA9IG52NDBfZ3JhcGhfNDA5NyhjdHgtPmRldikgPyAweDA2ODQgOiAweDAwODQ7CisKKwljcF9vdXQgKGN0eCwgMHgzMDAwMDApOworCWNwX2xzciAoY3R4LCBsZW4gLSA0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX3N3YXBfc3RhdGUzZF8zX2lzX3NhdmUpOworCWNwX2xzciAoY3R4LCBsZW4pOworCWNwX25hbWUoY3R4LCBjcF9zd2FwX3N0YXRlM2RfM19pc19zYXZlKTsKKwljcF9vdXQgKGN0eCwgMHg4MDAwMDEpOworCisJY3R4LT5jdHh2YWxzX3BvcyArPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iaiA9IGN0eC0+ZGF0YTsKKwlpbnQgdnMsIHZzX25yLCB2c19sZW4sIHZzX25yX2IwLCB2c19ucl9iMSwgYjBfb2Zmc2V0LCBiMV9vZmZzZXQ7CisJaW50IG9mZnNldCwgaTsKKworCXZzX25yICAgID0gbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldik7CisJdnNfbnJfYjAgPSAzNjM7CisJdnNfbnJfYjEgPSBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMTI4IDogNjQ7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJYjBfb2Zmc2V0ID0gMHgyMjAwLzQ7IC8qIDMzYTAgKi8KKwkJYjFfb2Zmc2V0ID0gMHg1NWEwLzQ7IC8qIDE1MDAgKi8KKwkJdnNfbGVuID0gMHg2YWEwLzQ7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDEgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MikgeworCQliMF9vZmZzZXQgPSAweDIyMDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDQ0MDAvNDsgLyogMGIwMCAqLworCQl2c19sZW4gPSAweDRmMDAvNDsKKwl9IGVsc2UgeworCQliMF9vZmZzZXQgPSAweDFkNDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDNmNDAvNDsgLyogMGIwMCA6IDBhNDAgKi8KKwkJdnNfbGVuID0gbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDRhNDAvNCA6IDB4NDk4MC80OworCX0KKworCWNwX2xzcihjdHgsIHZzX2xlbiAqIHZzX25yICsgMHgzMDAvNCk7CisJY3Bfb3V0KGN0eCwgbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDgwMDA0MSA6IDB4ODAwMDI5KTsKKworCW9mZnNldCA9IGN0eC0+Y3R4dmFsc19wb3M7CisJY3R4LT5jdHh2YWxzX3BvcyArPSAoMHgwMzAwLzQgKyAodnNfbnIgKiB2c19sZW4pKTsKKworCWlmIChjdHgtPm1vZGUgIT0gTk9VVkVBVV9HUkNUWF9WQUxTKQorCQlyZXR1cm47CisKKwlvZmZzZXQgKz0gMHgwMjgwLzQ7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyssIG9mZnNldCArPSAyKQorCQludl93bzMyKGRldiwgb2JqLCBvZmZzZXQsIDB4M2Y4MDAwMDApOworCisJZm9yICh2cyA9IDA7IHZzIDwgdnNfbnI7IHZzKyssIG9mZnNldCArPSB2c19sZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IHZzX25yX2IwICogNjsgaSArPSA2KQorCQkJbnZfd28zMihkZXYsIG9iaiwgb2Zmc2V0ICsgYjBfb2Zmc2V0ICsgaSwgMHgwMDAwMDAwMSk7CisJCWZvciAoaSA9IDA7IGkgPCB2c19ucl9iMSAqIDQ7IGkgKz0gNCkKKwkJCW52X3dvMzIoZGV2LCBvYmosIG9mZnNldCArIGIxX29mZnNldCArIGksIDB4M2Y4MDAwMDApOworCX0KK30KKwordm9pZAorbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogZGVjaWRlIHdoZXRoZXIgd2UncmUgbG9hZGluZy91bmxvYWRpbmcgdGhlIGNvbnRleHQgKi8KKwljcF9icmEgKGN0eCwgQVVUT19TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKwljcF9icmEgKGN0eCwgVVNFUl9TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKworCWNwX25hbWUoY3R4LCBjcF9jaGVja19sb2FkKTsKKwljcF9icmEgKGN0eCwgQVVUT19MT0FELCBQRU5ESU5HLCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX0xPQUQsIFBFTkRJTkcsIGNwX3NldHVwX2xvYWQpOworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX2V4aXQpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgbG9hZCAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX1NXQVApOworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9sb2FkKTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIExPQUQpOworCWNwX291dCAoY3R4LCAweDAwOTEwODgwKTsgLyogPz8gKi8KKwljcF9vdXQgKGN0eCwgMHgwMDkwMWZmZSk7IC8qID8/ICovCisJY3Bfb3V0IChjdHgsIDB4MDE5NDAwMDApOyAvKiA/PyAqLworCWNwX2xzciAoY3R4LCAweDIwKTsKKwljcF9vdXQgKGN0eCwgMHgwMDYwMDAwYik7IC8qID8/ICovCisJY3Bfd2FpdChjdHgsIFVOSzU3LCBDTEVBUik7CisJY3Bfb3V0IChjdHgsIDB4MDA2MDAwMGMpOyAvKiA/PyAqLworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX3N3YXBfc3RhdGUpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgc2F2ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9zYXZlKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUpOworCisJLyogZ2VuZXJhbCBQR1JBUEggc3RhdGUgKi8KKwljcF9uYW1lKGN0eCwgY3Bfc3dhcF9zdGF0ZSk7CisJY3BfcG9zIChjdHgsIDB4MDAwMjAvNCk7CisJbnY0MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZXJhbChjdHgpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCisJLyogM0Qgc3RhdGUsIGJsb2NrIDEgKi8KKwljcF9icmEgKGN0eCwgVU5LNTQsIENMRUFSLCBjcF9wcmVwYXJlX2V4aXQpOworCW52NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2QoY3R4KTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKworCS8qIDNEIHN0YXRlLCBibG9jayAyICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8yKGN0eCk7CisKKwkvKiBTb21lIG90aGVyIGJsb2NrIG9mICJyYW5kb20iIHN0YXRlICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKGN0eCk7CisKKwkvKiBQZXItdmVydGV4IHNoYWRlciBzdGF0ZSAqLworCWNwX3BvcyAoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwludjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoY3R4KTsKKworCS8qIHByZS1leGl0IHN0YXRlIHVwZGF0ZXMgKi8KKwljcF9uYW1lKGN0eCwgY3BfcHJlcGFyZV9leGl0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX2NoZWNrX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX1NBVkUsIFBFTkRJTkcsIGNwX2V4aXQpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX0NVUlJFTlQpOworCisJY3BfbmFtZShjdHgsIGNwX2V4aXQpOworCWNwX3NldCAoY3R4LCBVU0VSX1NBVkUsIE5PVF9QRU5ESU5HKTsKKwljcF9zZXQgKGN0eCwgVVNFUl9MT0FELCBOT1RfUEVORElORyk7CisJY3Bfb3V0IChjdHgsIENQX0VORCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggZjhlMjhhMS4uMTE4ZDMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl2b2lkIF9faW9tZW0gKmx1dCA9IG52Ym9fa21hcF9vYmpfaW92aXJ0dWFsKG52X2NydGMtPmx1dC5udmJvKTsKIAlpbnQgaTsKIAotCU5WX0RFQlVHKGNydGMtPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGNydGMtPmRldiwgIlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJd3JpdGV3KG52X2NydGMtPmx1dC5yW2ldID4+IDIsIGx1dCArIDgqaSArIDApOwpAQCAtNjgsOCArNjgsOCBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IGluZGV4ID0gbnZfY3J0Yy0+aW5kZXgsIHJldDsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7Ci0JTlZfREVCVUcoZGV2LCAiJXNcbiIsIGJsYW5rZWQgPyAiYmxhbmtlZCIgOiAidW5ibGFua2VkIik7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgIiVzXG4iLCBibGFua2VkID8gImJsYW5rZWQiIDogInVuYmxhbmtlZCIpOwogCiAJaWYgKGJsYW5rZWQpIHsKIAkJbnZfY3J0Yy0+Y3Vyc29yLmhpZGUobnZfY3J0YywgZmFsc2UpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCAyICsgKHVwZGF0ZSA/IDIgOiAwKSk7CiAJaWYgKHJldCkgewpAQCAtMTkzLDcgKzE5Myw3IEBACiAJdWludDMyX3Qgb3V0WCwgb3V0WSwgaG9yaXosIHZlcnQ7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKHNjYWxpbmdfbW9kZSkgewogCWNhc2UgRFJNX01PREVfU0NBTEVfTk9ORToKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCS8qIERpc2Nvbm5lY3QgYWxsIHVudXNlZCBlbmNvZGVycy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCW52NTBfY3J0Y19ibGFuayhudl9jcnRjLCBmYWxzZSk7CiAKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2ZyYW1lYnVmZmVyICpmYiA9IG5vdXZlYXVfZnJhbWVidWZmZXIoZHJtX2ZiKTsKIAlpbnQgcmV0LCBmb3JtYXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCiAJc3dpdGNoIChkcm1fZmItPmRlcHRoKSB7CiAJY2FzZSAgODoKQEAgLTYxMiw3ICs2MTIsNyBAQAogCiAJKm52X2NydGMtPm1vZGUgPSAqYWRqdXN0ZWRfbW9kZTsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CiAKIAloc3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydDsKIAl2c3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydDsKQEAgLTcwNiw3ICs3MDYsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBOVUxMOwogCWludCByZXQsIGk7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKCpudl9jcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudl9jcnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3Vyc29yLmMKaW5kZXggZTJlNzlhOC4uNzUzZTcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2N1cnNvci5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKHVwZGF0ZSAmJiBudl9jcnRjLT5jdXJzb3IudmlzaWJsZSkKIAkJcmV0dXJuOwpAQCAtNzYsNyArNzYsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBudl9jcnRjLT5iYXNlLmRldjsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWlmICh1cGRhdGUgJiYgIW52X2NydGMtPmN1cnNvci52aXNpYmxlKQogCQlyZXR1cm47CkBAIC0xMTYsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkCiBudjUwX2N1cnNvcl9zZXRfb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMsIHVpbnQzMl90IG9mZnNldCkKIHsKLQlOVl9ERUJVRyhudl9jcnRjLT5iYXNlLmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKG52X2NydGMtPmJhc2UuZGV2LCAiXG4iKTsKIAlpZiAob2Zmc2V0ID09IG52X2NydGMtPmN1cnNvci5vZmZzZXQpCiAJCXJldHVybjsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCBpZHggPSBudl9jcnRjLT5pbmRleDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DVVJTT1JfQ1VSU09SX0NUUkwyKGlkeCksIDApOwogCWlmICghbnZfd2FpdChOVjUwX1BESVNQTEFZX0NVUlNPUl9DVVJTT1JfQ1RSTDIoaWR4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2RhYy5jCmluZGV4IGZiNTgzOGUuLmYwOGYwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtNDQsNyArNDQsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMik7CiAJaWYgKHJldCkgewpAQCAtODEsMTEgKzgxLDExIEBACiAJLyogVXNlIGJpb3MgcHJvdmlkZWQgdmFsdWUgaWYgcG9zc2libGUuICovCiAJaWYgKGRldl9wcml2LT52Ymlvcy0+ZGFjdGVzdHZhbCkgewogCQlsb2FkX3BhdHRlcm4gPSBkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWw7Ci0JCU5WX0RFQlVHKGRldiwgIlVzaW5nIGJpb3MgcHJvdmlkZWQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiVXNpbmcgYmlvcyBwcm92aWRlZCBsb2FkX3BhdHRlcm4gb2YgJWRcbiIsCiAJCQkgIGxvYWRfcGF0dGVybik7CiAJfSBlbHNlIHsKIAkJbG9hZF9wYXR0ZXJuID0gMzQwOwotCQlOVl9ERUJVRyhkZXYsICJVc2luZyBkZWZhdWx0IGxvYWRfcGF0dGVybiBvZiAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgIlVzaW5nIGRlZmF1bHQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAogCQkJIGxvYWRfcGF0dGVybik7CiAJfQogCkBAIC0xMDMsOSArMTAzLDkgQEAKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKIAlpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQlOVl9ERUJVRyhkZXYsICJMb2FkIHdhcyBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgZGV0ZWN0ZWQgb24gb3V0cHV0IHdpdGggb3IgJWRcbiIsIG9yKTsKIAllbHNlCi0JCU5WX0RFQlVHKGRldiwgIkxvYWQgd2FzIG5vdCBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgbm90IGRldGVjdGVkIG9uIG91dHB1dCB3aXRoIG9yICVkXG4iLCBvcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTE4LDcgKzExOCw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfREFDX0RQTVNfQ1RSTChvciksCkBAIC0xNzMsNyArMTczLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDAsIG1vZGVfY3RsMiA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEQUMgb3V0cHV0XG4iKTsKIAogCW52X2VuY29kZXIgPSBremFsbG9jKHNpemVvZigqbnZfZW5jb2RlciksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwppbmRleCAxMmM1ZWU2Li5hOTI2M2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJdWludDY0X3Qgc3RhcnQ7CiAJaW50IHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgMHgwMDYxMDE4NCwgbnZfcmQzMihkZXYsIDB4MDA2MTQwMDQpKTsKIAkvKgpAQCAtMjMyLDcgKzIzMiw3IEBACiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfVU5LXzM4MCwgMCk7CiAJLyogUkFNIGlzIGNsYW1wZWQgdG8gMjU2IE1pQi4gKi8KIAlyYW1fYW1vdW50ID0gbm91dmVhdV9tZW1fZmJfYW1vdW50KGRldik7Ci0JTlZfREVCVUcoZGV2LCAicmFtX2Ftb3VudCAlZFxuIiwgcmFtX2Ftb3VudCk7CisJTlZfREVCVUdfS01TKGRldiwgInJhbV9hbW91bnQgJWRcbiIsIHJhbV9hbW91bnQpOwogCWlmIChyYW1fYW1vdW50ID4gMjU2KjEwMjQqMTAyNCkKIAkJcmFtX2Ftb3VudCA9IDI1NioxMDI0KjEwMjQ7CiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfUkFNX0FNT1VOVCwgcmFtX2Ftb3VudCAtIDEpOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc3RydWN0IGRybV9jcnRjICpkcm1fY3J0YzsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJtX2NydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpjcnRjID0gbm91dmVhdV9jcnRjKGRybV9jcnRjKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVpbnQzMl90IGNvbm5lY3RvclsxNl0gPSB7fTsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCS8qIGluaXQgYmFzaWMga2VybmVsIG1vZGVzZXR0aW5nICovCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKIApAQCAtNjE3LDcgKzYxNyw3IEBACiAJICogQ1JUQyBzZXBhcmF0ZWx5LCBhbmQgc3VibWlzc2lvbiB3aWxsIGJlIGJsb2NrZWQgYnkgdGhlIEdQVQogCSAqIHVudGlsIHdlIGhhbmRsZSBlYWNoIGluIHR1cm4uCiAJICovCi0JTlZfREVCVUcoZGV2LCAiMHg2MTAwMzA6IDB4JTA4eFxuIiwgdW5rMzApOworCU5WX0RFQlVHX0tNUyhkZXYsICIweDYxMDAzMDogMHglMDh4XG4iLCB1bmszMCk7CiAJaGVhZCA9IGZmcygodW5rMzAgPj4gOSkgJiAzKSAtIDE7CiAJaWYgKGhlYWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQlvciA9IGk7CiAJfQogCi0JTlZfREVCVUcoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKIAlpZiAodHlwZSA9PSBPVVRQVVRfQU5ZKSB7CiAJCU5WX0VSUk9SKGRldiwgInVua25vd24gZW5jb2RlciEhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtODExLDcgKzgxMSw3IEBACiAJcGNsayA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0NSVENfUChoZWFkLCBDTE9DSykpICYgMHgzZmZmZmY7CiAJc2NyaXB0ID0gbnY1MF9kaXNwbGF5X3NjcmlwdF9zZWxlY3QoZGV2LCBkY2JlbnQsIHBjbGspOwogCi0JTlZfREVCVUcoZGV2LCAiaGVhZCAlZCBweGNsazogJWRLSHpcbiIsIGhlYWQsIHBjbGspOworCU5WX0RFQlVHX0tNUyhkZXYsICJoZWFkICVkIHB4Y2xrOiAlZEtIelxuIiwgaGVhZCwgcGNsayk7CiAKIAlpZiAoZGNiZW50LT50eXBlICE9IE9VVFBVVF9EUCkKIAkJbm91dmVhdV9iaW9zX3J1bl9kaXNwbGF5X3RhYmxlKGRldiwgZGNiZW50LCAwLCAtMik7CkBAIC04NzAsNyArODcwLDcgQEAKIAkJdWludDMyX3QgaW50cjAgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzApOwogCQl1aW50MzJfdCBpbnRyMSA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSk7CiAKLQkJTlZfREVCVUcoZGV2LCAiUERJU1BMQVlfSU5UUl9CSCAweCUwOHggMHglMDh4XG4iLCBpbnRyMCwgaW50cjEpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiUERJU1BMQVlfSU5UUl9CSCAweCUwOHggMHglMDh4XG4iLCBpbnRyMCwgaW50cjEpOwogCiAJCWlmIChpbnRyMSAmIE5WNTBfUERJU1BMQVlfSU5UUl8xX0NMS19VTksxMCkKIAkJCW52NTBfZGlzcGxheV91bmsxMF9oYW5kbGVyKGRldik7CkBAIC05NzQsNyArOTc0LDcgQEAKIAkJdWludDMyX3QgaW50cjEgPSBudl9yZDMyKGRldiwgTlY1MF9QRElTUExBWV9JTlRSXzEpOwogCQl1aW50MzJfdCBjbG9jazsKIAotCQlOVl9ERUJVRyhkZXYsICJQRElTUExBWV9JTlRSIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJQRElTUExBWV9JTlRSIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CiAKIAkJaWYgKCFpbnRyMCAmJiAhKGludHIxICYgfmRlbGF5ZWQpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCmluZGV4IDc3YWUxYWEuLmI3MjgyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCiAJY2hpZCA9IHBmaWZvLT5jaGFubmVsX2lkKGRldik7Ci0JaWYgKGNoaWQgPCAwIHx8IGNoaWQgPj0gZGV2X3ByaXYtPmVuZ2luZS5maWZvLmNoYW5uZWxzKQorCWlmIChjaGlkIDwgMSB8fCBjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscyAtIDEpCiAJCXJldHVybiAwOwogCiAJY2hhbiA9IGRldl9wcml2LT5maWZvc1tjaGlkXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCAxNzdkODIyLi5jYTc5ZjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0xMDcsOSArMTA3LDEzIEBACiBzdGF0aWMgaW50CiBudjUwX2dyYXBoX2luaXRfY3R4Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwogCU5WX0RFQlVHKGRldiwgIlxuIik7CiAKLQludjQwX2dyY3R4X2luaXQoZGV2KTsKKwlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOworCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKQorCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOwogCiAJbnZfd3IzMihkZXYsIDB4NDAwMzIwLCA0KTsKIAludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX0NVUiwgMCk7CkBAIC0xNDAsNyArMTQ0LDcgQEAKIG52NTBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwotCW52NDBfZ3JjdHhfZmluaShkZXYpOworCW5vdXZlYXVfZ3JjdHhfZmluaShkZXYpOwogfQogCiB2b2lkCkBAIC0yMDcsNyArMjExLDcgQEAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7Ci0JbnY0MF9ncmN0eF92YWxzX2xvYWQoZGV2LCBjdHgpOworCW5vdXZlYXVfZ3JjdHhfdmFsc19sb2FkKGRldiwgY3R4KTsKIAludl93bzMyKGRldiwgY3R4LCAweDAwMDAwLzQsIGNoYW4tPnJhbWluLT5pbnN0YW5jZSA+PiAxMik7CiAJaWYgKChkZXZfcHJpdi0+Y2hpcHNldCAmIDB4ZjApID09IDB4YTApCiAJCW52X3dvMzIoZGV2LCBjdHgsIDB4MDAwMDQvNCwgMHgwMDAwMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYwppbmRleCA4YzI4MDQ2Li5lMzk1YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBkZXZfcHJpdi0+ZXZvOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCU5WX0RFQlVHX0tNUyhkZXYsICJEaXNjb25uZWN0aW5nIFNPUiAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJcmV0ID0gUklOR19TUEFDRShldm8sIDIpOwogCWlmIChyZXQpIHsKQEAgLTcwLDcgKzcwLDcgQEAKIAl9CiAKIAlpZiAoZHBlLT5zY3JpcHQwKSB7Ci0JCU5WX0RFQlVHKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiU09SLSVkOiBydW5uaW5nIERQIHNjcmlwdCAwXG4iLCBudl9lbmNvZGVyLT5vcik7CiAJCW5vdXZlYXVfYmlvc19ydW5faW5pdF90YWJsZShkZXYsIGxlMTZfdG9fY3B1KGRwZS0+c2NyaXB0MCksCiAJCQkJCSAgICBudl9lbmNvZGVyLT5kY2IpOwogCX0KQEAgLTc5LDcgKzc5LDcgQEAKIAkJTlZfRVJST1IoZGV2LCAiU09SLSVkOiBsaW5rIHRyYWluaW5nIGZhaWxlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJaWYgKGRwZS0+c2NyaXB0MSkgewotCQlOVl9ERUJVRyhkZXYsICJTT1ItJWQ6IHJ1bm5pbmcgRFAgc2NyaXB0IDFcbiIsIG52X2VuY29kZXItPm9yKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMVxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBsZTE2X3RvX2NwdShkcGUtPnNjcmlwdDEpLAogCQkJCQkgICAgbnZfZW5jb2Rlci0+ZGNiKTsKIAl9CkBAIC05Myw3ICs5Myw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfU09SX0RQTVNfQ1RSTChvciksCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0xODIsNyArMTgyLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX3Nvcl9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlib29sIGR1bTsKIAlpbnQgdHlwZTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBPVVRQVVRfVE1EUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCmluZGV4IDYwMWY0YzAuLmI4MDZmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwpAQCAtNjQsNyArNjQsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jCmluZGV4IGQzY2I2NzYuLjUxYzk5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lvYzMyLmMKQEAgLTk1LDggKzk1LDcgQEAKIAkJCSAgJmluaXQtPmFncF90ZXh0dXJlc19vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9kZXB0aDMyIHsKQEAgLTEyOSw4ICsxMjgsNyBAQAogCQkJICAmZGVwdGgtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9ERVBUSCwgKHVuc2lnbmVkIGxvbmcpZGVwdGgpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1IxMjhfREVQVEgsICh1bnNpZ25lZCBsb25nKWRlcHRoKTsKIAogfQogCkBAIC0xNTMsOCArMTUxLDcgQEAKIAkJCSAgJnN0aXBwbGUtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9TVElQUExFLCAodW5zaWduZWQgbG9uZylzdGlwcGxlKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X1NUSVBQTEUsICh1bnNpZ25lZCBsb25nKXN0aXBwbGUpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9nZXRwYXJhbTMyIHsKQEAgLTE3OCw4ICsxNzUsNyBAQAogCQkJICAmZ2V0cGFyYW0tPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1IxMjhfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylnZXRwYXJhbSk7CiB9CiAKIGRybV9pb2N0bF9jb21wYXRfdCAqcjEyOF9jb21wYXRfaW9jdGxzW10gPSB7CkBAIC0yMTAsMTIgKzIwNiwxMCBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJSQVlfU0laRShyMTI4X2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IHIxMjhfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCi0JbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCiAJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCBmZWI1MmVlLi5iNWY1ZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlyYWRlb25fY3MubyByYWRlb25fYmlvcy5vIHJhZGVvbl9iZW5jaG1hcmsubyByMTAwLm8gcjMwMC5vIHI0MjAubyBcCiAJcnM0MDAubyByczYwMC5vIHJzNjkwLm8gcnY1MTUubyByNTIwLm8gcjYwMC5vIHJ2NzcwLm8gcmFkZW9uX3Rlc3QubyBcCiAJcjIwMC5vIHJhZGVvbl9sZWdhY3lfdHYubyByNjAwX2NzLm8gcjYwMF9ibGl0Lm8gcjYwMF9ibGl0X3NoYWRlcnMubyBcCi0JcjYwMF9ibGl0X2ttcy5vIHJhZGVvbl9wbS5vIGF0b21iaW9zX2RwLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8gYXRvbWJpb3NfZHAubyByNjAwX2F1ZGlvLm8gcjYwMF9oZG1pLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwppbmRleCA2NTc4ZDE5Li4zODgxNDBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKQEAgLTU4LDYgKzU4LDcgQEAKIH0gYXRvbV9leGVjX2NvbnRleHQ7CiAKIGludCBhdG9tX2RlYnVnID0gMDsKK3N0YXRpYyB2b2lkIGF0b21fZXhlY3V0ZV90YWJsZV9sb2NrZWQoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKTsKIHZvaWQgYXRvbV9leGVjdXRlX3RhYmxlKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGluZGV4LCB1aW50MzJfdCAqIHBhcmFtcyk7CiAKIHN0YXRpYyB1aW50MzJfdCBhdG9tX2FyZ19tYXNrWzhdID0KQEAgLTU3Myw3ICs1NzQsNyBAQAogCWVsc2UKIAkJU0RFQlVHKCIgICB0YWJsZTogJWRcbiIsIGlkeCk7CiAJaWYgKFUxNihjdHgtPmN0eC0+Y21kX3RhYmxlICsgNCArIDIgKiBpZHgpKQotCQlhdG9tX2V4ZWN1dGVfdGFibGUoY3R4LT5jdHgsIGlkeCwgY3R4LT5wcyArIGN0eC0+cHNfc2hpZnQpOworCQlhdG9tX2V4ZWN1dGVfdGFibGVfbG9ja2VkKGN0eC0+Y3R4LCBpZHgsIGN0eC0+cHMgKyBjdHgtPnBzX3NoaWZ0KTsKIH0KIAogc3RhdGljIHZvaWQgYXRvbV9vcF9jbGVhcihhdG9tX2V4ZWNfY29udGV4dCAqY3R4LCBpbnQgKnB0ciwgaW50IGFyZykKQEAgLTEwNDAsNyArMTA0MSw3IEBACiAJYXRvbV9vcF9zaHIsIEFUT01fQVJHX01DfSwgewogYXRvbV9vcF9kZWJ1ZywgMH0sfTsKIAotdm9pZCBhdG9tX2V4ZWN1dGVfdGFibGUoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKQorc3RhdGljIHZvaWQgYXRvbV9leGVjdXRlX3RhYmxlX2xvY2tlZChzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpCiB7CiAJaW50IGJhc2UgPSBDVTE2KGN0eC0+Y21kX3RhYmxlICsgNCArIDIgKiBpbmRleCk7CiAJaW50IGxlbiwgd3MsIHBzLCBwdHI7CkBAIC0xMDkyLDYgKzEwOTMsMTMgQEAKIAkJa2ZyZWUoZWN0eC53cyk7CiB9CiAKK3ZvaWQgYXRvbV9leGVjdXRlX3RhYmxlKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGluZGV4LCB1aW50MzJfdCAqIHBhcmFtcykKK3sKKwltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKKwlhdG9tX2V4ZWN1dGVfdGFibGVfbG9ja2VkKGN0eCwgaW5kZXgsIHBhcmFtcyk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKK30KKwogc3RhdGljIGludCBhdG9tX2lpb19sZW5bXSA9IHsgMSwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgMyB9OwogCiBzdGF0aWMgdm9pZCBhdG9tX2luZGV4X2lpbyhzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBiYXNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaAppbmRleCA2NjcxODQ4Li40N2ZkOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uaApAQCAtMTIwLDYgKzEyMCw3IEBACiAKIHN0cnVjdCBhdG9tX2NvbnRleHQgewogCXN0cnVjdCBjYXJkX2luZm8gKmNhcmQ7CisJc3RydWN0IG11dGV4IG11dGV4OwogCXZvaWQgKmJpb3M7CiAJdWludDMyX3QgY21kX3RhYmxlLCBkYXRhX3RhYmxlOwogCXVpbnQxNl90ICppaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKaW5kZXggNWY0ODUxNS4uOTFhZDBkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaApAQCAtNDY5MCw2ICs0NjkwLDIwNSBAQAogCUFUT01fUE9XRVJNT0RFX0lORk9fVjMgYXNQb3dlclBsYXlJbmZvW0FUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLXTsKIH0gQVRPTV9QT1dFUlBMQVlfSU5GT19WMzsKIAorLyogTmV3IFBQbGliICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9USEVSTUFMQ09OVFJPTExFUgorCit7CisgICAgVUNIQVIgdWNUeXBlOyAgICAgICAgICAgLy8gb25lIG9mIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfKgorICAgIFVDSEFSIHVjSTJjTGluZTsgICAgICAgIC8vIGFzIGludGVycHJldGVkIGJ5IERBTCBJMkMKKyAgICBVQ0hBUiB1Y0kyY0FkZHJlc3M7CisgICAgVUNIQVIgdWNGYW5QYXJhbWV0ZXJzOyAgLy8gRmFuIENvbnRyb2wgUGFyYW1ldGVycy4KKyAgICBVQ0hBUiB1Y0Zhbk1pblJQTTsgICAgICAvLyBGYW4gTWluaW11bSBSUE0gKGh1bmRyZWRzKSAtLSBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5LgorICAgIFVDSEFSIHVjRmFuTWF4UlBNOyAgICAgIC8vIEZhbiBNYXhpbXVtIFJQTSAoaHVuZHJlZHMpIC0tIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkuCisgICAgVUNIQVIgdWNSZXNlcnZlZDsgICAgICAgLy8gLS0tLQorICAgIFVDSEFSIHVjRmxhZ3M7ICAgICAgICAgIC8vIHRvIGJlIGRlZmluZWQKK30gQVRPTV9QUExJQl9USEVSTUFMQ09OVFJPTExFUjsKKworI2RlZmluZSBBVE9NX1BQX0ZBTlBBUkFNRVRFUlNfVEFDSE9NRVRFUl9QVUxTRVNfUEVSX1JFVk9MVVRJT05fTUFTSyAweDBmCisjZGVmaW5lIEFUT01fUFBfRkFOUEFSQU1FVEVSU19OT0ZBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgICAgLy8gTm8gZmFuIGlzIGNvbm5lY3RlZCB0byB0aGlzIGNvbnRyb2xsZXIuCisKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9OT05FICAgICAgMAorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0xNNjMgICAgICAxICAvLyBOb3QgdXNlZCBieSBQUExpYgorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0FETTEwMzIgICAyICAvLyBOb3QgdXNlZCBieSBQUExpYgorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0FETTEwMzAgICAzICAvLyBOb3QgdXNlZCBieSBQUExpYgorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX01VQTY2NDkgICA0ICAvLyBOb3QgdXNlZCBieSBQUExpYgorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0xNNjQgICAgICA1CisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfRjc1Mzc1ICAgIDYgIC8vIE5vdCB1c2VkIGJ5IFBQTGliCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfUlY2eHggICAgIDcKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9SVjc3MCAgICAgOAorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0FEVDc0NzMgICA5CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1NUQVRFCit7CisgICAgVUNIQVIgdWNOb25DbG9ja1N0YXRlSW5kZXg7CisgICAgVUNIQVIgdWNDbG9ja1N0YXRlSW5kaWNlc1sxXTsgLy8gdmFyaWFibGUtc2l6ZWQKK30gQVRPTV9QUExJQl9TVEFURTsKKworLy8vLyBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFOjp1bFBsYXRmb3JtQ2FwcworI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9CQUNLQklBUyAxCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1BPV0VSUExBWSAyCisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1NCSU9TUE9XRVJTT1VSQ0UgNAorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9BU1BNX0wwcyA4CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0FTUE1fTDEgMTYKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfSEFSRFdBUkVEQyAzMgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9HRU1JTklQUklNQVJZIDY0CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1NURVBWRERDIDEyOAorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9WT0xUQUdFQ09OVFJPTCAyNTYKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfU0lERVBPUlRDT05UUk9MIDUxMgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9UVVJOT0ZGUExMX0FTUE1MMSAxMDI0CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0hUTElOS0NPTlRST0wgMjA0OAorCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRQoreworICAgICAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisKKyAgICAgIFVDSEFSIHVjRGF0YVJldmlzaW9uOworCisgICAgICBVQ0hBUiB1Y051bVN0YXRlczsKKyAgICAgIFVDSEFSIHVjU3RhdGVFbnRyeVNpemU7CisgICAgICBVQ0hBUiB1Y0Nsb2NrSW5mb1NpemU7CisgICAgICBVQ0hBUiB1Y05vbkNsb2NrU2l6ZTsKKworICAgICAgLy8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyB0YWJsZSB0byBhcnJheSBvZiB1Y051bVN0YXRlcyBBVE9NX1BQTElCX1NUQVRFIHN0cnVjdHVyZXMKKyAgICAgIFVTSE9SVCB1c1N0YXRlQXJyYXlPZmZzZXQ7CisKKyAgICAgIC8vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHRoaXMgdGFibGUgdG8gYXJyYXkgb2YgQVNJQy1zcGVjaWZpYyBzdHJ1Y3R1cmVzLAorICAgICAgLy8gY3VycmVudGx5IEFUT01fUFBMSUJfQ0xPQ0tfSU5GTy4KKyAgICAgIFVTSE9SVCB1c0Nsb2NrSW5mb0FycmF5T2Zmc2V0OworCisgICAgICAvLyBvZmZzZXQgZnJvbSBzdGFydCBvZiB0aGlzIHRhYmxlIHRvIGFycmF5IG9mIEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTworICAgICAgVVNIT1JUIHVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQ7CisKKyAgICAgIFVTSE9SVCB1c0JhY2tiaWFzVGltZTsgICAgLy8gaW4gbWljcm9zZWNvbmRzCisgICAgICBVU0hPUlQgdXNWb2x0YWdlVGltZTsgICAgIC8vIGluIG1pY3Jvc2Vjb25kcworICAgICAgVVNIT1JUIHVzVGFibGVTaXplOyAgICAgICAvL3RoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlLCBvciB0aGUgZXh0ZW5kZWQgc3RydWN0dXJlCisKKyAgICAgIFVMT05HIHVsUGxhdGZvcm1DYXBzOyAgICAgICAgICAgIC8vIFNlZSBBVE9NX1BQTElCX0NBUFNfKgorCisgICAgICBBVE9NX1BQTElCX1RIRVJNQUxDT05UUk9MTEVSICAgIHNUaGVybWFsQ29udHJvbGxlcjsKKworICAgICAgVVNIT1JUIHVzQm9vdENsb2NrSW5mb09mZnNldDsKKyAgICAgIFVTSE9SVCB1c0Jvb3ROb25DbG9ja0luZm9PZmZzZXQ7CisKK30gQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTsKKworLy8vLyBBVE9NX1BQTElCX05PTkNMT0NLX0lORk86OnVzQ2xhc3NpZmljYXRpb24KKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9NQVNLICAgICAgICAgIDB4MDAwNworI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX1NISUZUICAgICAgICAgMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX05PTkUgICAgICAgICAgMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX0JBVFRFUlkgICAgICAgMQorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX0JBTEFOQ0VEICAgICAgMworI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX1BFUkZPUk1BTkNFICAgNQorLy8gMiwgNCwgNiwgNyBhcmUgcmVzZXJ2ZWQKKworI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0JPT1QgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVEhFUk1BTCAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9MSU1JVEVEUE9XRVJTT1VSQ0UgICAgIDB4MDAyMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1JFU1QgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fRk9SQ0VEICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl8zRFBFUkZPUk1BTkNFICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX09WRVJEUklWRVRFTVBMQVRFICAgICAgMHgwMjAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVVZEU1RBVEUgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl8zRExPVyAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0FDUEkgICAgICAgICAgICAgICAgICAgMHgxMDAwCisvLyByZW1haW5pbmcgMyBiaXRzIGFyZSByZXNlcnZlZAorCisvLy8vIEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTzo6dWxDYXBzQW5kU2V0dGluZ3MKKyNkZWZpbmUgQVRPTV9QUExJQl9TSU5HTEVfRElTUExBWV9PTkxZICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUT01fUFBMSUJfU1VQUE9SVFNfVklERU9fUExBWUJBQ0sgICAgICAgICAweDAwMDAwMDAyCisKKy8vIDAgaXMgMi41R2IvcywgMSBpcyA1R2IvcworI2RlZmluZSBBVE9NX1BQTElCX1BDSUVfTElOS19TUEVFRF9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVE9NX1BQTElCX1BDSUVfTElOS19TUEVFRF9TSElGVCAgICAgICAgICAgMgorCisvLyBsYW5lcyAtIDE6IDEsIDIsIDQsIDgsIDEyLCAxNiBwZXJtaXR0ZWQgYnkgUENJRSBzcGVjCisjZGVmaW5lIEFUT01fUFBMSUJfUENJRV9MSU5LX1dJRFRIX01BU0sgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFUT01fUFBMSUJfUENJRV9MSU5LX1dJRFRIX1NISUZUICAgICAgICAgICAzCisKKy8vIGxvb2t1cCBpbnRvIHJlZHVjZWQgcmVmcmVzaC1yYXRlIHRhYmxlCisjZGVmaW5lIEFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFURV9WQUxVRV9NQVNLICAweDAwMDAwRjAwCisjZGVmaW5lIEFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFURV9WQUxVRV9TSElGVCA4CisKKyNkZWZpbmUgQVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFX1VOTElNSVRFRCAgICAwCisjZGVmaW5lIEFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFURV81MEhaICAgICAgICAgMQorLy8gMi0xNSBUQkQgYXMgbmVlZGVkLgorCisjZGVmaW5lIEFUT01fUFBMSUJfU09GVFdBUkVfRElTQUJMRV9MT0FEQkFMQU5DSU5HICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFUT01fUFBMSUJfU09GVFdBUkVfRU5BQkxFX1NMRUVQX0ZPUl9USU1FU1RBTVBTICAweDAwMDAyMDAwCisjZGVmaW5lIEFUT01fUFBMSUJfRU5BQkxFX1ZBUklCUklHSFQgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisKKyNkZWZpbmUgQVRPTV9QUExJQl9ESVNBTExPV19PTl9EQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvLyBDb250YWluZWQgaW4gYW4gYXJyYXkgc3RhcnRpbmcgYXQgdGhlIG9mZnNldAorLy8gaW4gQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTo6dXNOb25DbG9ja0luZm9BcnJheU9mZnNldC4KKy8vIHJlZmVyZW5jZWQgZnJvbSBBVE9NX1BQTElCX1NUQVRFX0lORk86OnVjTm9uQ2xvY2tTdGF0ZUluZGV4Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9OT05DTE9DS19JTkZPCit7CisgICAgICBVU0hPUlQgdXNDbGFzc2lmaWNhdGlvbjsKKyAgICAgIFVDSEFSICB1Y01pblRlbXBlcmF0dXJlOworICAgICAgVUNIQVIgIHVjTWF4VGVtcGVyYXR1cmU7CisgICAgICBVTE9ORyAgdWxDYXBzQW5kU2V0dGluZ3M7CisgICAgICBVQ0hBUiAgdWNSZXF1aXJlZFBvd2VyOworICAgICAgVUNIQVIgIHVjVW51c2VkMVszXTsKK30gQVRPTV9QUExJQl9OT05DTE9DS19JTkZPOworCisvLyBDb250YWluZWQgaW4gYW4gYXJyYXkgc3RhcnRpbmcgYXQgdGhlIG9mZnNldAorLy8gaW4gQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTo6dXNDbG9ja0luZm9BcnJheU9mZnNldC4KKy8vIHJlZmVyZW5jZWQgZnJvbSBBVE9NX1BQTElCX1NUQVRFOjp1Y0Nsb2NrU3RhdGVJbmRpY2VzCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9SNjAwX0NMT0NLX0lORk8KK3sKKyAgICAgIFVTSE9SVCB1c0VuZ2luZUNsb2NrTG93OworICAgICAgVUNIQVIgdWNFbmdpbmVDbG9ja0hpZ2g7CisKKyAgICAgIFVTSE9SVCB1c01lbW9yeUNsb2NrTG93OworICAgICAgVUNIQVIgdWNNZW1vcnlDbG9ja0hpZ2g7CisKKyAgICAgIFVTSE9SVCB1c1ZEREM7CisgICAgICBVU0hPUlQgdXNVbnVzZWQxOworICAgICAgVVNIT1JUIHVzVW51c2VkMjsKKworICAgICAgVUxPTkcgdWxGbGFnczsgLy8gQVRPTV9QUExJQl9SNjAwX0ZMQUdTXyoKKworfSBBVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTzsKKworLy8gdWxGbGFncyBpbiBBVE9NX1BQTElCX1I2MDBfQ0xPQ0tfSU5GTworI2RlZmluZSBBVE9NX1BQTElCX1I2MDBfRkxBR1NfUENJRUdFTjIgICAgICAgICAgMQorI2RlZmluZSBBVE9NX1BQTElCX1I2MDBfRkxBR1NfVVZEU0FGRSAgICAgICAgICAgMgorI2RlZmluZSBBVE9NX1BQTElCX1I2MDBfRkxBR1NfQkFDS0JJQVNFTkFCTEUgICAgNAorI2RlZmluZSBBVE9NX1BQTElCX1I2MDBfRkxBR1NfTUVNT1JZX09EVF9PRkYgICAgOAorI2RlZmluZSBBVE9NX1BQTElCX1I2MDBfRkxBR1NfTUVNT1JZX0RMTF9PRkYgICAgMTYKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfUlM3ODBfQ0xPQ0tfSU5GTworCit7CisgICAgICBVU0hPUlQgdXNMb3dFbmdpbmVDbG9ja0xvdzsgICAgICAgICAvLyBMb3cgRW5naW5lIGNsb2NrIGluIE1IeiAodGhlIHNhbWUgd2F5IGFzIG9uIHRoZSBSNjAwKS4KKyAgICAgIFVDSEFSICB1Y0xvd0VuZ2luZUNsb2NrSGlnaDsKKyAgICAgIFVTSE9SVCB1c0hpZ2hFbmdpbmVDbG9ja0xvdzsgICAgICAgIC8vIEhpZ2ggRW5naW5lIGNsb2NrIGluIE1Iei4KKyAgICAgIFVDSEFSICB1Y0hpZ2hFbmdpbmVDbG9ja0hpZ2g7CisgICAgICBVU0hPUlQgdXNNZW1vcnlDbG9ja0xvdzsgICAgICAgICAgICAvLyBGb3Igbm93IG9uZSBvZiB0aGUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfWFhYWCBjb25zdGFudHMuCisgICAgICBVQ0hBUiAgdWNNZW1vcnlDbG9ja0hpZ2g7ICAgICAgICAgICAvLyBDdXJyZW50eWwgdW51c2VkLgorICAgICAgVUNIQVIgIHVjUGFkZGluZzsgICAgICAgICAgICAgICAgICAgLy8gRm9yIHByb3BlciBhbGlnbm1lbnQgYW5kIHNpemUuCisgICAgICBVU0hPUlQgdXNWRERDOyAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIDc4MCwgdXNlOiBOb25lLCBMb3csIEhpZ2gsIFZhcmlhYmxlCisgICAgICBVQ0hBUiAgdWNNYXhIVExpbmtXaWR0aDsgICAgICAgICAgICAvLyBGcm9tIFNCSU9TIC0gezIsIDQsIDgsIDE2fQorICAgICAgVUNIQVIgIHVjTWluSFRMaW5rV2lkdGg7ICAgICAgICAgICAgLy8gRnJvbSBTQklPUyAtIHsyLCA0LCA4LCAxNn0uIEVmZmVjdGl2ZSBvbmx5IGlmIENETFcgZW5hYmxlZC4gTWluaW11bSBkb3duIHN0cmVhbSB3aWR0aCBjb3VsZCBiZSBiaWdnZXIgYXMgZGlzcGxheSBCVyByZXF1cmllbWVudC4KKyAgICAgIFVTSE9SVCB1c0hUTGlua0ZyZXE7ICAgICAgICAgICAgICAgIC8vIFNlZSBkZWZpbml0aW9uIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV94eHggb3IgaW4gTUh6KD49MjAwKS4KKyAgICAgIFVMT05HICB1bEZsYWdzOworfSBBVE9NX1BQTElCX1JTNzgwX0NMT0NLX0lORk87CisKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX05PTkUgICAgICAgMAorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfTE9XICAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9ISUdIICAgICAgIDIKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX1ZBUklBQkxFICAgMworCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX05PTkUgICAgICAgIDAgICAvLyBXZSBjYW5ub3QgY2hhbmdlIHRoZSBzaWRlIHBvcnQgbWVtb3J5IGNsb2NrLCBsZWF2ZSBpdCBhcyBpdCBpcy4KKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfTE9XICAgICAgICAgMQorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19ISUdIICAgICAgICAyCisKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX05PTkUgICAgICAgMAorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTE9XICAgICAgICAxCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9ISUdIICAgICAgIDIKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiAgRm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgY29tcGF0aWJsaXR5IGlzc3VlIGluIGRpZmZlcmVudCBTVyBjb21wb25lbnRzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCA4MjRjYzY0Li43MTcyNzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtMTM3NCw3ICsxMzc0LDYgQEAKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfQVJHQjQ0NDQ6CiAJCWNhc2UgUkFERU9OX1RYRk9STUFUX1ZZVVk0MjI6CiAJCWNhc2UgUkFERU9OX1RYRk9STUFUX1lWWVU0MjI6Ci0JCWNhc2UgUkFERU9OX1RYRk9STUFUX0RYVDE6CiAJCWNhc2UgUkFERU9OX1RYRk9STUFUX1NIQURPVzE2OgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9MRFVEVjY1NToKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfRFVEVjg4OgpAQCAtMTM4MiwxMiArMTM4MSwxOSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUkFERU9OX1RYRk9STUFUX0FSR0I4ODg4OgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9SR0JBODg4ODoKLQkJY2FzZSBSQURFT05fVFhGT1JNQVRfRFhUMjM6Ci0JCWNhc2UgUkFERU9OX1RYRk9STUFUX0RYVDQ1OgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9TSEFET1czMjoKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfTERVRFVWODg4ODoKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CisJCWNhc2UgUkFERU9OX1RYRk9STUFUX0RYVDE6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfRFhUMTsKKwkJCWJyZWFrOworCQljYXNlIFJBREVPTl9UWEZPUk1BVF9EWFQyMzoKKwkJY2FzZSBSQURFT05fVFhGT1JNQVRfRFhUNDU6CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfRFhUMzU7CisJCQlicmVhazsKIAkJfQogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKQEAgLTI3MzEsNiArMjczNyw3IEBACiAJRFJNX0VSUk9SKCJjb29yZGluYXRlIHR5cGUgICAgICAgICAgICAlZFxuIiwgdC0+dGV4X2Nvb3JkX3R5cGUpOwogCURSTV9FUlJPUigid2lkdGggcm91bmQgdG8gcG93ZXIgb2YgMiAgJWRcbiIsIHQtPnJvdW5kdXBfdyk7CiAJRFJNX0VSUk9SKCJoZWlnaHQgcm91bmQgdG8gcG93ZXIgb2YgMiAlZFxuIiwgdC0+cm91bmR1cF9oKTsKKwlEUk1fRVJST1IoImNvbXByZXNzIGZvcm1hdCAgICAgICAgICAgICVkXG4iLCB0LT5jb21wcmVzc19mb3JtYXQpOwogfQogCiBzdGF0aWMgaW50IHIxMDBfY3NfdHJhY2tfY3ViZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTI3NjAsNiArMjc2NywzNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHIxMDBfdHJhY2tfY29tcHJlc3Nfc2l6ZShpbnQgY29tcHJlc3NfZm9ybWF0LCBpbnQgdywgaW50IGgpCit7CisJaW50IGJsb2NrX3dpZHRoLCBibG9ja19oZWlnaHQsIGJsb2NrX2J5dGVzOworCWludCB3YmxvY2tzLCBoYmxvY2tzOworCWludCBtaW5fd2Jsb2NrczsKKwlpbnQgc3o7CisKKwlibG9ja193aWR0aCA9IDQ7CisJYmxvY2tfaGVpZ2h0ID0gNDsKKworCXN3aXRjaCAoY29tcHJlc3NfZm9ybWF0KSB7CisJY2FzZSBSMTAwX1RSQUNLX0NPTVBfRFhUMToKKwkJYmxvY2tfYnl0ZXMgPSA4OworCQltaW5fd2Jsb2NrcyA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBSMTAwX1RSQUNLX0NPTVBfRFhUMzU6CisJCWJsb2NrX2J5dGVzID0gMTY7CisJCW1pbl93YmxvY2tzID0gMjsKKwkJYnJlYWs7CisJfQorCisJaGJsb2NrcyA9IChoICsgYmxvY2tfaGVpZ2h0IC0gMSkgLyBibG9ja19oZWlnaHQ7CisJd2Jsb2NrcyA9ICh3ICsgYmxvY2tfd2lkdGggLSAxKSAvIGJsb2NrX3dpZHRoOworCWlmICh3YmxvY2tzIDwgbWluX3dibG9ja3MpCisJCXdibG9ja3MgPSBtaW5fd2Jsb2NrczsKKwlzeiA9IHdibG9ja3MgKiBoYmxvY2tzICogYmxvY2tfYnl0ZXM7CisJcmV0dXJuIHN6OworfQorCiBzdGF0aWMgaW50IHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9jaGVjayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCQkgICAgICAgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKQogewpAQCAtMjc5Nyw5ICsyODM0LDE1IEBACiAJCQloID0gaCAvICgxIDw8IGkpOwogCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX2gpCiAJCQkJaCA9IHJvdW5kdXBfcG93X29mX3R3byhoKTsKLQkJCXNpemUgKz0gdyAqIGg7CisJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLmNvbXByZXNzX2Zvcm1hdCkgeworCisJCQkJc2l6ZSArPSByMTAwX3RyYWNrX2NvbXByZXNzX3NpemUodHJhY2stPnRleHR1cmVzW3VdLmNvbXByZXNzX2Zvcm1hdCwgdywgaCk7CisJCQkJLyogY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgYmxvY2sgYmFzZWQgKi8KKwkJCX0gZWxzZQorCQkJCXNpemUgKz0gdyAqIGg7CiAJCX0KIAkJc2l6ZSAqPSB0cmFjay0+dGV4dHVyZXNbdV0uY3BwOworCiAJCXN3aXRjaCAodHJhY2stPnRleHR1cmVzW3VdLnRleF9jb29yZF90eXBlKSB7CiAJCWNhc2UgMDoKIAkJCWJyZWFrOwpAQCAtMjgzOCw2ICsyODgxLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9jYjsgaSsrKSB7CiAJCWlmICh0cmFjay0+Y2JbaV0ucm9iaiA9PSBOVUxMKSB7CisJCQlpZiAoISh0cmFjay0+ZmFzdGZpbGwgfHwgdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayB8fAorCQkJICAgICAgdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIGNvbG9yIGJ1ZmZlciAlZCAhXG4iLCBpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0yOTY3LDYgKzMwMTQsNyBAQAogCQl0cmFjay0+YXJyYXlzW2ldLmVzaXplID0gMHg3RjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKSB7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfTk9ORTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gMTY1MzY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IDE2NTM2OwogCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMTY1MzY7CkBAIC0zMzk5LDYgKzM0NDcsOCBAQAogCXIxMDBfZXJyYXRhKHJkZXYpOwogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXIxMDBfdnJhbV9pbmZvKHJkZXYpOwogCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCmluZGV4IGNhNTA5MDMuLmIyN2E2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCkBAIC0yOCw2ICsyOCwxMCBAQAogCXVuc2lnbmVkCQloZWlnaHQ7CiB9OwogCisjZGVmaW5lIFIxMDBfVFJBQ0tfQ09NUF9OT05FICAgMAorI2RlZmluZSBSMTAwX1RSQUNLX0NPTVBfRFhUMSAgIDEKKyNkZWZpbmUgUjEwMF9UUkFDS19DT01QX0RYVDM1ICAyCisKIHN0cnVjdCByMTAwX2NzX3RyYWNrX3RleHR1cmUgewogCXN0cnVjdCByYWRlb25fYm8JKnJvYmo7CiAJc3RydWN0IHIxMDBfY3NfY3ViZV9pbmZvIGN1YmVfaW5mb1s1XTsgLyogaW5mbyBmb3IgNSBub24tcHJpbWFyeSBmYWNlcyAqLwpAQCAtNDQsNiArNDgsNyBAQAogCWJvb2wJCQllbmFibGVkOwogCWJvb2wJCQlyb3VuZHVwX3c7CiAJYm9vbAkJCXJvdW5kdXBfaDsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICBjb21wcmVzc19mb3JtYXQ7CiB9OwogCiBzdHJ1Y3QgcjEwMF9jc190cmFja19saW1pdHMgewpAQCAtNjIsMTMgKzY3LDE1IEBACiAJdW5zaWduZWQJCQlpbW1kX2R3b3JkczsKIAl1bnNpZ25lZAkJCW51bV9hcnJheXM7CiAJdW5zaWduZWQJCQltYXhfaW5keDsKKwl1bnNpZ25lZAkJCWNvbG9yX2NoYW5uZWxfbWFzazsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19hcnJheQlhcnJheXNbMTFdOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAljYltSMzAwX01BWF9DQl07CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCXpiOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX3RleHR1cmUJdGV4dHVyZXNbUjMwMF9UUkFDS19NQVhfVEVYVFVSRV07CiAJYm9vbAkJCQl6X2VuYWJsZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZV9jdWJlOwotCisJYm9vbAkJCQlmYXN0ZmlsbDsKKwlib29sCQkJCWJsZW5kX3JlYWRfZW5hYmxlOwogfTsKIAogaW50IHIxMDBfY3NfdHJhY2tfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCmluZGV4IGViNzQwZmMuLjIwOTQyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCkBAIC00MDEsNyArNDAxLDYgQEAKIAkJY2FzZSBSMjAwX1RYRk9STUFUX1k4OgogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CiAJCQlicmVhazsKLQkJY2FzZSBSMjAwX1RYRk9STUFUX0RYVDE6CiAJCWNhc2UgUjIwMF9UWEZPUk1BVF9BSTg4OgogCQljYXNlIFIyMDBfVFhGT1JNQVRfQVJHQjE1NTU6CiAJCWNhc2UgUjIwMF9UWEZPUk1BVF9SR0I1NjU6CkBAIC00MTgsOSArNDE3LDE2IEBACiAJCWNhc2UgUjIwMF9UWEZPUk1BVF9BQkdSODg4ODoKIAkJY2FzZSBSMjAwX1RYRk9STUFUX0JHUjExMTExMDoKIAkJY2FzZSBSMjAwX1RYRk9STUFUX0xEVkRVODg4ODoKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OworCQkJYnJlYWs7CisJCWNhc2UgUjIwMF9UWEZPUk1BVF9EWFQxOgorCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX0RYVDE7CisJCQlicmVhazsKIAkJY2FzZSBSMjAwX1RYRk9STUFUX0RYVDIzOgogCQljYXNlIFIyMDBfVFhGT1JNQVRfRFhUNDU6Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gNDsKKwkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSAxOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmNvbXByZXNzX2Zvcm1hdCA9IFIxMDBfVFJBQ0tfQ09NUF9EWFQxOwogCQkJYnJlYWs7CiAJCX0KIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMTYpICYgMHhmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggODMzNzhjMy4uM2YyY2M5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTY4Niw3ICs2ODYsMTUgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKworCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKKwkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9UWE9fTUFDUk9fVElMRTsKKwkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCisJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfVFhPX01JQ1JPX1RJTEU7CisKKwkJdG1wID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRtcCB8PSB0aWxlX2ZsYWdzOworCQlpYltpZHhdID0gdG1wOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAkvKiBUcmFja2VkIHJlZ2lzdGVycyAqLwpAQCAtODUyLDcgKzg2MCw2IEBACiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjZZNVg1OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1c0WjRZNFg0OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1cxWjVZNVg1OgotCQljYXNlIFIzMDBfVFhfRk9STUFUX0RYVDE6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRDNETUZUX0N4VjhVODoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9COEc4X0I4Rzg6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRzhSOF9HOEI4OgpAQCAtODY2LDggKzg3Myw2IEBACiAJCWNhc2UgMHgxNzoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9GTF9JMzI6CiAJCWNhc2UgMHgxZToKLQkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQzOgotCQljYXNlIFIzMDBfVFhfRk9STUFUX0RYVDU6CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gNDsKIAkJCWJyZWFrOwogCQljYXNlIFIzMDBfVFhfRk9STUFUX1cxNloxNlkxNlgxNjoKQEAgLTg3OCw2ICs4ODMsMjMgQEAKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9GTF9SMzJHMzJCMzJBMzI6CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTY7CiAJCQlicmVhazsKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQxOgorCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX0RYVDE7CisJCQlicmVhazsKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9BVEkyTjoKKwkJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1I0MjApIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCisJCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCS8qIFRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIGZvciBEWFQzLzUuICovCisJCQkvKiBQYXNzIHRocm91Z2guICovCisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRFhUMzoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQ1OgorCQkJdHJhY2stPnRleHR1cmVzW2ldLmNwcCA9IDE7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX0RYVDM1OworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCiAJCQkJICAoaWR4X3ZhbHVlICYgMHgxRikpOwpAQCAtOTM3LDYgKzk1OSwxNiBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoXzExID0gdG1wOwogCQkJdG1wID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMSkgPDwgMTE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0XzExID0gdG1wOworCisJCQkvKiBBVEkxTiAqLworCQkJaWYgKGlkeF92YWx1ZSAmICgxIDw8IDE0KSkgeworCQkJCS8qIFRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIGZvciBEWFQxLiAqLworCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPQorCQkJCQlSMTAwX1RSQUNLX0NPTVBfRFhUMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpZHhfdmFsdWUgJiAoMSA8PCAxNCkpIHsKKwkJCURSTV9FUlJPUigiRm9yYmlkZGVuIGJpdCBUWEZPUk1BVF9NU0JcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDQ0ODA6CkBAIC05NzgsNiArMTAxMCwxOCBAQAogCQl9CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CisJY2FzZSAweDRlMGM6CisJCS8qIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLICovCisJCXRyYWNrLT5jb2xvcl9jaGFubmVsX21hc2sgPSBpZHhfdmFsdWU7CisJCWJyZWFrOworCWNhc2UgMHg0ZDFjOgorCQkvKiBaQl9CV19DTlRMICovCisJCXRyYWNrLT5mYXN0ZmlsbCA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IDIpKTsKKwkJYnJlYWs7CisJY2FzZSAweDRlMDQ6CisJCS8qIFJCM0RfQkxFTkRDTlRMICovCisJCXRyYWNrLT5ibGVuZF9yZWFkX2VuYWJsZSA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IDIpKTsKKwkJYnJlYWs7CiAJY2FzZSAweDRiZTg6CiAJCS8qIHZhbGlkIHJlZ2lzdGVyIG9ubHkgb24gUlY1MzAgKi8KIAkJaWYgKHAtPnJkZXYtPmZhbWlseSA9PSBDSElQX1JWNTMwKQpAQCAtMTMyNCw2ICsxMzY4LDggQEAKIAlyMzAwX2VycmF0YShyZGV2KTsKIAkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKIAkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KIAlyMzAwX3ZyYW1faW5mbyhyZGV2KTsKIAkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IGNiMmU0NzAuLjM0YmZmYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCWludCBzejsKIAlpbnQgYWRkcjsKIAlpbnQgdHlwZTsKLQlpbnQgY2xhbXA7CisJaW50IGlzY2xhbXA7CiAJaW50IHN0cmlkZTsKIAlSSU5HX0xPQ0FMUzsKIApAQCAtOTk5LDEwICs5OTksMTAgQEAKIAlhZGRyID0gKChoZWFkZXIucjUwMGZwLmFkcmhpX2ZsYWdzICYgMSkgPDwgOCkgfCBoZWFkZXIucjUwMGZwLmFkcmxvOwogCiAJdHlwZSA9ICEhKGhlYWRlci5yNTAwZnAuYWRyaGlfZmxhZ3MgJiBSNTAwRlBfQ09OU1RBTlRfVFlQRSk7Ci0JY2xhbXAgPSAhIShoZWFkZXIucjUwMGZwLmFkcmhpX2ZsYWdzICYgUjUwMEZQX0NPTlNUQU5UX0NMQU1QKTsKKwlpc2NsYW1wID0gISEoaGVhZGVyLnI1MDBmcC5hZHJoaV9mbGFncyAmIFI1MDBGUF9DT05TVEFOVF9DTEFNUCk7CiAKIAlhZGRyIHw9ICh0eXBlIDw8IDE2KTsKLQlhZGRyIHw9IChjbGFtcCA8PCAxNyk7CisJYWRkciB8PSAoaXNjbGFtcCA8PCAxNyk7CiAKIAlzdHJpZGUgPSB0eXBlID8gNCA6IDY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAppbmRleCA0YjdhZmVmLi4xNzM1YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCkBAIC05MDAsNiArOTAwLDcgQEAKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0ZMX0kzMgkJICAgIDB4MUIKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0ZMX0kzMkEzMgkJICAgIDB4MUMKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0ZMX1IzMkczMkIzMkEzMgkgICAgMHgxRAorIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQVRJMk4JCSAgICAweDFGCiAJLyogYWxwaGEgbW9kZXMsIGNvbnZlbmllbmNlIG1vc3RseSAqLwogCS8qIGlmIHlvdSBoYXZlIGFscGhhLCBwaWNrIGNvbnN0YW50IGFwcHJvcHJpYXRlIHRvIHRoZQogCSAgIG51bWJlciBvZiBjaGFubmVscyAoMSBmb3IgSTgsIDIgZm9yIEk4QTgsIDQgZm9yIFI4RzhCOEE4LCBldGMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggMzY2NTZiZC4uYTBhYzNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTE4NjMsNiArMTg2MywxNCBAQAogCX0KIAlyNjAwX2dwdV9pbml0KHJkZXYpOwogCisJaWYgKCFyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaikgeworCQlyID0gcjYwMF9ibGl0X2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIGJsaXR0ZXIgKCVkKS5cbiIsIHIpOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisKIAlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKIAlpZiAodW5saWtlbHkociAhPSAwKSkKIAkJcmV0dXJuIHI7CkBAIC0yMDM4LDEyICsyMDQ2LDYgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlyID0gcjYwMF9ibGl0X2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCBibGl0dGVyICglZCkuXG4iLCByKTsKLQkJcmV0dXJuIHI7Ci0JfQotCiAJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewpAQCAtMjA2NSw2ICsyMDY3LDEwIEBACiAJCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJCX0KIAl9CisKKwlyID0gcjYwMF9hdWRpb19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsgLyogVE9ETyBlcnJvciBoYW5kbGluZyAqLwogCXJldHVybiAwOwogfQogCkBAIC0yMDczLDYgKzIwNzksNyBAQAogCS8qIFN1c3BlbmQgb3BlcmF0aW9ucyAqLwogCXI2MDBfc3VzcGVuZChyZGV2KTsKIAorCXI2MDBfYXVkaW9fZmluaShyZGV2KTsKIAlyNjAwX2JsaXRfZmluaShyZGV2KTsKIAlyNjAwX2lycV9maW5pKHJkZXYpOwogCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTJjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYwpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgQ2hyaXN0aWFuIEvDtm5pZy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBDaHJpc3RpYW4gS8O2bmlnCisgKi8KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgorI2luY2x1ZGUgImF0b20uaCIKKworI2RlZmluZSBBVURJT19USU1FUl9JTlRFUlZBTEwgMTAwIC8qIDEvMTAgc2VrdW5kIHNob3VsZCBiZSBlbm91Z2ggKi8KKworLyoKKyAqIGNoZWNrIGlmIHRoZSBjaGlwc2V0IGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgaW50IHI2MDBfYXVkaW9fY2hpcHNldF9zdXBwb3J0ZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmV0dXJuIHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDAKKwkJfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM2MDAKKwkJfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTAKKwkJfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM3NDA7Cit9CisKKy8qCisgKiBjdXJyZW50IG51bWJlciBvZiBjaGFubmVscworICovCitzdGF0aWMgaW50IHI2MDBfYXVkaW9fY2hhbm5lbHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcmV0dXJuIChSUkVHMzIoUjYwMF9BVURJT19SQVRFX0JQU19DSEFOTkVMKSAmIDB4NykgKyAxOworfQorCisvKgorICogY3VycmVudCBiaXRzIHBlciBzYW1wbGUKKyAqLworc3RhdGljIGludCByNjAwX2F1ZGlvX2JpdHNfcGVyX3NhbXBsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1aW50MzJfdCB2YWx1ZSA9IChSUkVHMzIoUjYwMF9BVURJT19SQVRFX0JQU19DSEFOTkVMKSAmIDB4RjApID4+IDQ7CisJc3dpdGNoICh2YWx1ZSkgeworCWNhc2UgMHgwOiByZXR1cm4gIDg7CisJY2FzZSAweDE6IHJldHVybiAxNjsKKwljYXNlIDB4MjogcmV0dXJuIDIwOworCWNhc2UgMHgzOiByZXR1cm4gMjQ7CisJY2FzZSAweDQ6IHJldHVybiAzMjsKKwl9CisKKwlEUk1fRVJST1IoIlVua25vd24gYml0cyBwZXIgc2FtcGxlIDB4JXggdXNpbmcgMTYgaW5zdGVhZC5cbiIsIChpbnQpdmFsdWUpOworCisJcmV0dXJuIDE2OworfQorCisvKgorICogY3VycmVudCBzYW1wbGluZyByYXRlIGluIEhaCisgKi8KK3N0YXRpYyBpbnQgcjYwMF9hdWRpb19yYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQzMl90IHZhbHVlID0gUlJFRzMyKFI2MDBfQVVESU9fUkFURV9CUFNfQ0hBTk5FTCk7CisJdWludDMyX3QgcmVzdWx0OworCisJaWYgKHZhbHVlICYgMHg0MDAwKQorCQlyZXN1bHQgPSA0NDEwMDsKKwllbHNlCisJCXJlc3VsdCA9IDQ4MDAwOworCisJcmVzdWx0ICo9ICgodmFsdWUgPj4gMTEpICYgMHg3KSArIDE7CisJcmVzdWx0IC89ICgodmFsdWUgPj4gOCkgJiAweDcpICsgMTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpZWMgNjA5NTggc3RhdHVzIGJpdHMKKyAqLworc3RhdGljIHVpbnQ4X3QgcjYwMF9hdWRpb19zdGF0dXNfYml0cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZXR1cm4gUlJFRzMyKFI2MDBfQVVESU9fU1RBVFVTX0JJVFMpICYgMHhmZjsKK30KKworLyoKKyAqIGllYyA2MDk1OCBjYXRlZ29yeSBjb2RlCisgKi8KK3N0YXRpYyB1aW50OF90IHI2MDBfYXVkaW9fY2F0ZWdvcnlfY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZXR1cm4gKFJSRUczMihSNjAwX0FVRElPX1NUQVRVU19CSVRTKSA+PiA4KSAmIDB4ZmY7Cit9CisKKy8qCisgKiB1cGRhdGUgYWxsIGhkbWkgaW50ZXJmYWNlcyB3aXRoIGN1cnJlbnQgYXVkaW8gcGFyYW1ldGVycworICovCitzdGF0aWMgdm9pZCByNjAwX2F1ZGlvX3VwZGF0ZV9oZG1pKHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKilwYXJhbTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmRldi0+ZGRldjsKKworCWludCBjaGFubmVscyA9IHI2MDBfYXVkaW9fY2hhbm5lbHMocmRldik7CisJaW50IHJhdGUgPSByNjAwX2F1ZGlvX3JhdGUocmRldik7CisJaW50IGJwcyA9IHI2MDBfYXVkaW9fYml0c19wZXJfc2FtcGxlKHJkZXYpOworCXVpbnQ4X3Qgc3RhdHVzX2JpdHMgPSByNjAwX2F1ZGlvX3N0YXR1c19iaXRzKHJkZXYpOworCXVpbnQ4X3QgY2F0ZWdvcnlfY29kZSA9IHI2MDBfYXVkaW9fY2F0ZWdvcnlfY29kZShyZGV2KTsKKworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlpbnQgY2hhbmdlcyA9IDA7CisKKwljaGFuZ2VzIHw9IGNoYW5uZWxzICE9IHJkZXYtPmF1ZGlvX2NoYW5uZWxzOworCWNoYW5nZXMgfD0gcmF0ZSAhPSByZGV2LT5hdWRpb19yYXRlOworCWNoYW5nZXMgfD0gYnBzICE9IHJkZXYtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZTsKKwljaGFuZ2VzIHw9IHN0YXR1c19iaXRzICE9IHJkZXYtPmF1ZGlvX3N0YXR1c19iaXRzOworCWNoYW5nZXMgfD0gY2F0ZWdvcnlfY29kZSAhPSByZGV2LT5hdWRpb19jYXRlZ29yeV9jb2RlOworCisJaWYgKGNoYW5nZXMpIHsKKwkJcmRldi0+YXVkaW9fY2hhbm5lbHMgPSBjaGFubmVsczsKKwkJcmRldi0+YXVkaW9fcmF0ZSA9IHJhdGU7CisJCXJkZXYtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA9IGJwczsKKwkJcmRldi0+YXVkaW9fc3RhdHVzX2JpdHMgPSBzdGF0dXNfYml0czsKKwkJcmRldi0+YXVkaW9fY2F0ZWdvcnlfY29kZSA9IGNhdGVnb3J5X2NvZGU7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGNoYW5nZXMgfHwgcjYwMF9oZG1pX2J1ZmZlcl9zdGF0dXNfY2hhbmdlZChlbmNvZGVyKSkKKwkJCXI2MDBfaGRtaV91cGRhdGVfYXVkaW9fc2V0dGluZ3MoCisJCQkJZW5jb2RlciwgY2hhbm5lbHMsCisJCQkJcmF0ZSwgYnBzLCBzdGF0dXNfYml0cywKKwkJCQljYXRlZ29yeV9jb2RlKTsKKwl9CisKKwltb2RfdGltZXIoJnJkZXYtPmF1ZGlvX3RpbWVyLAorCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVURJT19USU1FUl9JTlRFUlZBTEwpKTsKK30KKworLyoKKyAqIGluaXRpYWxpemUgdGhlIGF1ZGlvIHZhcnMgYW5kIHJlZ2lzdGVyIHRoZSB1cGRhdGUgdGltZXIKKyAqLworaW50IHI2MDBfYXVkaW9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAoIXI2MDBfYXVkaW9fY2hpcHNldF9zdXBwb3J0ZWQocmRldikpCisJCXJldHVybiAwOworCisJRFJNX0lORk8oIiVzIGF1ZGlvIHN1cHBvcnQiLCByYWRlb25fYXVkaW8gPyAiRW5hYmxpbmciIDogIkRpc2FibGluZyIpOworCVdSRUczMl9QKFI2MDBfQVVESU9fRU5BQkxFLCByYWRlb25fYXVkaW8gPyAweDgxMDAwMDAwIDogMHgwLCB+MHg4MTAwMDAwMCk7CisKKwlyZGV2LT5hdWRpb19jaGFubmVscyA9IC0xOworCXJkZXYtPmF1ZGlvX3JhdGUgPSAtMTsKKwlyZGV2LT5hdWRpb19iaXRzX3Blcl9zYW1wbGUgPSAtMTsKKwlyZGV2LT5hdWRpb19zdGF0dXNfYml0cyA9IDA7CisJcmRldi0+YXVkaW9fY2F0ZWdvcnlfY29kZSA9IDA7CisKKwlzZXR1cF90aW1lcigKKwkJJnJkZXYtPmF1ZGlvX3RpbWVyLAorCQlyNjAwX2F1ZGlvX3VwZGF0ZV9oZG1pLAorCQkodW5zaWduZWQgbG9uZylyZGV2KTsKKworCW1vZF90aW1lcigmcmRldi0+YXVkaW9fdGltZXIsIGppZmZpZXMgKyAxKTsKKworCXJldHVybiAwOworfQorCisvKgorICogZGV0ZXJtaW4gaG93IHRoZSBlbmNvZGVycyBhbmQgYXVkaW8gaW50ZXJmYWNlIGlzIHdpcmVkIHRvZ2V0aGVyCisgKi8KK2ludCByNjAwX2F1ZGlvX3RtZHNfaW5kZXgoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqb3RoZXI7CisKKwlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCQlyZXR1cm4gMDsKKworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZUTTE6CisJCS8qIHNwZWNpYWwgY2FzZSBjaGVjayBpZiBhbiBUTURTMSBpcyBwcmVzZW50ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkob3RoZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQkJaWYgKHRvX3JhZGVvbl9lbmNvZGVyKG90aGVyKS0+ZW5jb2Rlcl9pZCA9PQorCQkJCUVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMxKQorCQkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgorCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgZW5jb2RlciB0eXBlIDB4JTAyWFxuIiwKKwkJCSAgcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpOworCQlyZXR1cm4gLTE7CisJfQorfQorCisvKgorICogYXRhY2ggdGhlIGF1ZGlvIGNvZGVjIHRvIHRoZSBjbG9jayBzb3VyY2Ugb2YgdGhlIGVuY29kZXIKKyAqLwordm9pZCByNjAwX2F1ZGlvX3NldF9jbG9jayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBjbG9jaykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJaW50IGJhc2VfcmF0ZSA9IDQ4MDAwOworCisJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgeworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZUTTE6CisJCVdSRUczMl9QKFI2MDBfQVVESU9fVElNSU5HLCAwLCB+MHgzMDEpOworCQlicmVhazsKKworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJCVdSRUczMl9QKFI2MDBfQVVESU9fVElNSU5HLCAweDEwMCwgfjB4MzAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGVuY29kZXIgdHlwZSAweCUwMlhcbiIsCisJCQkgIHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAocjYwMF9hdWRpb190bWRzX2luZGV4KGVuY29kZXIpKSB7CisJY2FzZSAwOgorCQlXUkVHMzIoUjYwMF9BVURJT19QTEwxX01VTCwgYmFzZV9yYXRlKjUwKTsKKwkJV1JFRzMyKFI2MDBfQVVESU9fUExMMV9ESVYsIGNsb2NrKjEwMCk7CisJCVdSRUczMihSNjAwX0FVRElPX0NMS19TUkNTRUwsIDApOworCQlicmVhazsKKworCWNhc2UgMToKKwkJV1JFRzMyKFI2MDBfQVVESU9fUExMMl9NVUwsIGJhc2VfcmF0ZSo1MCk7CisJCVdSRUczMihSNjAwX0FVRElPX1BMTDJfRElWLCBjbG9jayoxMDApOworCQlXUkVHMzIoUjYwMF9BVURJT19DTEtfU1JDU0VMLCAxKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogcmVsZWFzZSB0aGUgYXVkaW8gdGltZXIKKyAqIFRPRE86IEhvdyB0byBkbyB0aGlzIGNvcnJlY3RseSBvbiBTTVAgc3lzdGVtcz8KKyAqLwordm9pZCByNjAwX2F1ZGlvX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKCFyNjAwX2F1ZGlvX2NoaXBzZXRfc3VwcG9ydGVkKHJkZXYpKQorCQlyZXR1cm47CisKKwlXUkVHMzJfUChSNjAwX0FVRElPX0VOQUJMRSwgMHgwLCB+MHg4MTAwMDAwMCk7CisKKwlkZWxfdGltZXIoJnJkZXYtPmF1ZGlvX3RpbWVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggMGQ4MjA3Ni4uNDQwNjBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCQkJICBpZHgsIHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCSpjc19yZWxvYyA9ICZwLT5yZWxvY3NbMF07CisJKmNzX3JlbG9jID0gcC0+cmVsb2NzOwogCSgqY3NfcmVsb2MpLT5sb2JqLmdwdV9vZmZzZXQgPSAodTY0KXJlbG9jc19jaHVuay0+a2RhdGFbaWR4ICsgM10gPDwgMzI7CiAJKCpjc19yZWxvYyktPmxvYmouZ3B1X29mZnNldCB8PSByZWxvY3NfY2h1bmstPmtkYXRhW2lkeCArIDBdOwogCXJldHVybiAwOwpAQCAtNzE3LDcgKzcxNyw3IEBACiAJaWYgKHAtPmNodW5rX3JlbG9jc19pZHggPT0gLTEpIHsKIAkJcmV0dXJuIDA7CiAJfQotCXAtPnJlbG9jcyA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByYWRlb25fY3NfcmVsb2MpLCBHRlBfS0VSTkVMKTsKKwlwLT5yZWxvY3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHAtPnJlbG9jcyA9PSBOVUxMKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzk0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBDaHJpc3RpYW4gS8O2bmlnLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IENocmlzdGlhbiBLw7ZuaWcKKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb25fZHJtLmgiCisjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorCisvKgorICogSERNSSBjb2xvciBmb3JtYXQKKyAqLworZW51bSByNjAwX2hkbWlfY29sb3JfZm9ybWF0IHsKKwlSR0IgPSAwLAorCVlDQ180MjIgPSAxLAorCVlDQ180NDQgPSAyCit9OworCisvKgorICogSUVDNjA5NTggc3RhdHVzIGJpdHMKKyAqLworZW51bSByNjAwX2hkbWlfaWVjX3N0YXR1c19iaXRzIHsKKwlBVURJT19TVEFUVVNfRElHX0VOQUJMRSAgID0gMHgwMSwKKwlBVURJT19TVEFUVVNfVgkgICAgPSAweDAyLAorCUFVRElPX1NUQVRVU19WQ0ZHCSA9IDB4MDQsCisJQVVESU9fU1RBVFVTX0VNUEhBU0lTICAgICA9IDB4MDgsCisJQVVESU9fU1RBVFVTX0NPUFlSSUdIVCAgICA9IDB4MTAsCisJQVVESU9fU1RBVFVTX05PTkFVRElPICAgICA9IDB4MjAsCisJQVVESU9fU1RBVFVTX1BST0ZFU1NJT05BTCA9IDB4NDAsCisJQVVESU9fU1RBVFVTX0xFVkVMCT0gMHg4MAorfTsKKworc3RydWN0IHsKKwl1aW50MzJfdCBDbG9jazsKKworCWludCBOXzMya0h6OworCWludCBDVFNfMzJrSHo7CisKKwlpbnQgTl80NF8xa0h6OworCWludCBDVFNfNDRfMWtIejsKKworCWludCBOXzQ4a0h6OworCWludCBDVFNfNDhrSHo7CisKK30gcjYwMF9oZG1pX0FDUltdID0geworICAgIC8qCSAgICAgMzJrSHoJICA0NC4xa0h6CTQ4a0h6ICAgICovCisgICAgLyogQ2xvY2sgICAgICBOICAgICBDVFMgICAgICBOICAgICBDVFMgICAgICBOICAgICBDVFMgKi8KKyAgICB7ICAyNTE3NCwgIDQ1NzYsICAyODEyNSwgIDcwMDcsICAzMTI1MCwgIDY4NjQsICAyODEyNSB9LCAvKiAgMjUsMjAvMS4wMDEgTUh6ICovCisgICAgeyAgMjUyMDAsICA0MDk2LCAgMjUyMDAsICA2MjcyLCAgMjgwMDAsICA2MTQ0LCAgMjUyMDAgfSwgLyogIDI1LjIwICAgICAgIE1IeiAqLworICAgIHsgIDI3MDAwLCAgNDA5NiwgIDI3MDAwLCAgNjI3MiwgIDMwMDAwLCAgNjE0NCwgIDI3MDAwIH0sIC8qICAyNy4wMCAgICAgICBNSHogKi8KKyAgICB7ICAyNzAyNywgIDQwOTYsICAyNzAyNywgIDYyNzIsICAzMDAzMCwgIDYxNDQsICAyNzAyNyB9LCAvKiAgMjcuMDAqMS4wMDEgTUh6ICovCisgICAgeyAgNTQwMDAsICA0MDk2LCAgNTQwMDAsICA2MjcyLCAgNjAwMDAsICA2MTQ0LCAgNTQwMDAgfSwgLyogIDU0LjAwICAgICAgIE1IeiAqLworICAgIHsgIDU0MDU0LCAgNDA5NiwgIDU0MDU0LCAgNjI3MiwgIDYwMDYwLCAgNjE0NCwgIDU0MDU0IH0sIC8qICA1NC4wMCoxLjAwMSBNSHogKi8KKyAgICB7ICA3NDE3NSwgMTE2NDgsIDIxMDkzNywgMTc4MzYsIDIzNDM3NSwgMTE2NDgsIDE0MDYyNSB9LCAvKiAgNzQuMjUvMS4wMDEgTUh6ICovCisgICAgeyAgNzQyNTAsICA0MDk2LCAgNzQyNTAsICA2MjcyLCAgODI1MDAsICA2MTQ0LCAgNzQyNTAgfSwgLyogIDc0LjI1ICAgICAgIE1IeiAqLworICAgIHsgMTQ4MzUxLCAxMTY0OCwgNDIxODc1LCAgODkxOCwgMjM0Mzc1LCAgNTgyNCwgMTQwNjI1IH0sIC8qIDE0OC41MC8xLjAwMSBNSHogKi8KKyAgICB7IDE0ODUwMCwgIDQwOTYsIDE0ODUwMCwgIDYyNzIsIDE2NTAwMCwgIDYxNDQsIDE0ODUwMCB9LCAvKiAxNDguNTAgICAgICAgTUh6ICovCisgICAgeyAgICAgIDAsICA0MDk2LCAgICAgIDAsICA2MjcyLCAgICAgIDAsICA2MTQ0LCAgICAgIDAgfSAgLyogT3RoZXIgKi8KK307CisKKy8qCisgKiBjYWxjdWxhdGUgQ1RTIHZhbHVlIGlmIGl0J3Mgbm90IGZvdW5kIGluIHRoZSB0YWJsZQorICovCitzdGF0aWMgdm9pZCByNjAwX2hkbWlfY2FsY19DVFModWludDMyX3QgY2xvY2ssIGludCAqQ1RTLCBpbnQgTiwgaW50IGZyZXEpCit7CisJaWYgKCpDVFMgPT0gMCkKKwkJKkNUUyA9IGNsb2NrKk4vKDEyOCpmcmVxKSoxMDAwOworCURSTV9ERUJVRygiVXNpbmcgQUNSIHRpbWluZyBOPSVkIENUUz0lZCBmb3IgZnJlcXVlbmN5ICVkXG4iLAorCQkgIE4sICpDVFMsIGZyZXEpOworfQorCisvKgorICogdXBkYXRlIHRoZSBOIGFuZCBDVFMgcGFyYW1ldGVycyBmb3IgYSBnaXZlbiBwaXhlbCBjbG9jayByYXRlCisgKi8KK3N0YXRpYyB2b2lkIHI2MDBfaGRtaV91cGRhdGVfQUNSKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgdWludDMyX3QgY2xvY2spCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgb2Zmc2V0ID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2RlciktPmhkbWlfb2Zmc2V0OworCWludCBDVFM7CisJaW50IE47CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByNjAwX2hkbWlfQUNSW2ldLkNsb2NrICE9IGNsb2NrICYmIHI2MDBfaGRtaV9BQ1JbaV0uQ2xvY2sgIT0gMDsgaSsrKTsKKworCUNUUyA9IHI2MDBfaGRtaV9BQ1JbaV0uQ1RTXzMya0h6OworCU4gPSByNjAwX2hkbWlfQUNSW2ldLk5fMzJrSHo7CisJcjYwMF9oZG1pX2NhbGNfQ1RTKGNsb2NrLCAmQ1RTLCBOLCAzMjAwMCk7CisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfMzJrSHpfQ1RTLCBDVFMgPDwgMTIpOworCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JXzMya0h6X04sIE4pOworCisJQ1RTID0gcjYwMF9oZG1pX0FDUltpXS5DVFNfNDRfMWtIejsKKwlOID0gcjYwMF9oZG1pX0FDUltpXS5OXzQ0XzFrSHo7CisJcjYwMF9oZG1pX2NhbGNfQ1RTKGNsb2NrLCAmQ1RTLCBOLCA0NDEwMCk7CisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfNDRfMWtIel9DVFMsIENUUyA8PCAxMik7CisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfNDRfMWtIel9OLCBOKTsKKworCUNUUyA9IHI2MDBfaGRtaV9BQ1JbaV0uQ1RTXzQ4a0h6OworCU4gPSByNjAwX2hkbWlfQUNSW2ldLk5fNDhrSHo7CisJcjYwMF9oZG1pX2NhbGNfQ1RTKGNsb2NrLCAmQ1RTLCBOLCA0ODAwMCk7CisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfNDhrSHpfQ1RTLCBDVFMgPDwgMTIpOworCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JXzQ4a0h6X04sIE4pOworfQorCisvKgorICogY2FsY3VsYXRlIHRoZSBjcmMgZm9yIGEgZ2l2ZW4gaW5mbyBmcmFtZQorICovCitzdGF0aWMgdm9pZCByNjAwX2hkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKHVpbnQ4X3QgcGFja2V0VHlwZSwKKwkJCQkJIHVpbnQ4X3QgdmVyc2lvbk51bWJlciwKKwkJCQkJIHVpbnQ4X3QgbGVuZ3RoLAorCQkJCQkgdWludDhfdCAqZnJhbWUpCit7CisgICAgaW50IGk7CisgICAgZnJhbWVbMF0gPSBwYWNrZXRUeXBlICsgdmVyc2lvbk51bWJlciArIGxlbmd0aDsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IGxlbmd0aDsgaSsrKQorCWZyYW1lWzBdICs9IGZyYW1lW2ldOworICAgIGZyYW1lWzBdID0gMHgxMDAgLSBmcmFtZVswXTsKK30KKworLyoKKyAqIGJ1aWxkIGEgSERNSSBWaWRlbyBJbmZvIEZyYW1lCisgKi8KK3N0YXRpYyB2b2lkIHI2MDBfaGRtaV92aWRlb2luZm9mcmFtZSgKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJZW51bSByNjAwX2hkbWlfY29sb3JfZm9ybWF0IGNvbG9yX2Zvcm1hdCwKKwlpbnQgYWN0aXZlX2luZm9ybWF0aW9uX3ByZXNlbnQsCisJdWludDhfdCBhY3RpdmVfZm9ybWF0X2FzcGVjdF9yYXRpbywKKwl1aW50OF90IHNjYW5faW5mb3JtYXRpb24sCisJdWludDhfdCBjb2xvcmltZXRyeSwKKwl1aW50OF90IGV4X2NvbG9yaW1ldHJ5LAorCXVpbnQ4X3QgcXVhbnRpemF0aW9uLAorCWludCBJVEMsCisJdWludDhfdCBwaWN0dXJlX2FzcGVjdF9yYXRpbywKKwl1aW50OF90IHZpZGVvX2Zvcm1hdF9pZGVudGlmaWNhdGlvbiwKKwl1aW50OF90IHBpeGVsX3JlcGV0aXRpb24sCisJdWludDhfdCBub25fdW5pZm9ybV9waWN0dXJlX3NjYWxpbmcsCisJdWludDhfdCBiYXJfaW5mb19kYXRhX3ZhbGlkLAorCXVpbnQxNl90IHRvcF9iYXIsCisJdWludDE2X3QgYm90dG9tX2JhciwKKwl1aW50MTZfdCBsZWZ0X2JhciwKKwl1aW50MTZfdCByaWdodF9iYXIKKykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBvZmZzZXQgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKS0+aGRtaV9vZmZzZXQ7CisKKwl1aW50OF90IGZyYW1lWzE0XTsKKworCWZyYW1lWzB4MF0gPSAwOworCWZyYW1lWzB4MV0gPQorCQkoc2Nhbl9pbmZvcm1hdGlvbiAmIDB4MykgfAorCQkoKGJhcl9pbmZvX2RhdGFfdmFsaWQgJiAweDMpIDw8IDIpIHwKKwkJKChhY3RpdmVfaW5mb3JtYXRpb25fcHJlc2VudCAmIDB4MSkgPDwgNCkgfAorCQkoKGNvbG9yX2Zvcm1hdCAmIDB4MykgPDwgNSk7CisJZnJhbWVbMHgyXSA9CisJCShhY3RpdmVfZm9ybWF0X2FzcGVjdF9yYXRpbyAmIDB4RikgfAorCQkoKHBpY3R1cmVfYXNwZWN0X3JhdGlvICYgMHgzKSA8PCA0KSB8CisJCSgoY29sb3JpbWV0cnkgJiAweDMpIDw8IDYpOworCWZyYW1lWzB4M10gPQorCQkobm9uX3VuaWZvcm1fcGljdHVyZV9zY2FsaW5nICYgMHgzKSB8CisJCSgocXVhbnRpemF0aW9uICYgMHgzKSA8PCAyKSB8CisJCSgoZXhfY29sb3JpbWV0cnkgJiAweDcpIDw8IDQpIHwKKwkJKChJVEMgJiAweDEpIDw8IDcpOworCWZyYW1lWzB4NF0gPSAodmlkZW9fZm9ybWF0X2lkZW50aWZpY2F0aW9uICYgMHg3Rik7CisJZnJhbWVbMHg1XSA9IChwaXhlbF9yZXBldGl0aW9uICYgMHhGKTsKKwlmcmFtZVsweDZdID0gKHRvcF9iYXIgJiAweEZGKTsKKwlmcmFtZVsweDddID0gKHRvcF9iYXIgPj4gOCk7CisJZnJhbWVbMHg4XSA9IChib3R0b21fYmFyICYgMHhGRik7CisJZnJhbWVbMHg5XSA9IChib3R0b21fYmFyID4+IDgpOworCWZyYW1lWzB4QV0gPSAobGVmdF9iYXIgJiAweEZGKTsKKwlmcmFtZVsweEJdID0gKGxlZnRfYmFyID4+IDgpOworCWZyYW1lWzB4Q10gPSAocmlnaHRfYmFyICYgMHhGRik7CisJZnJhbWVbMHhEXSA9IChyaWdodF9iYXIgPj4gOCk7CisKKwlyNjAwX2hkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKDB4ODIsIDB4MDIsIDB4MEQsIGZyYW1lKTsKKworCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JX1ZJREVPSU5GT0ZSQU1FXzAsCisJCWZyYW1lWzB4MF0gfCAoZnJhbWVbMHgxXSA8PCA4KSB8IChmcmFtZVsweDJdIDw8IDE2KSB8IChmcmFtZVsweDNdIDw8IDI0KSk7CisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfVklERU9JTkZPRlJBTUVfMSwKKwkJZnJhbWVbMHg0XSB8IChmcmFtZVsweDVdIDw8IDgpIHwgKGZyYW1lWzB4Nl0gPDwgMTYpIHwgKGZyYW1lWzB4N10gPDwgMjQpKTsKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9WSURFT0lORk9GUkFNRV8yLAorCQlmcmFtZVsweDhdIHwgKGZyYW1lWzB4OV0gPDwgOCkgfCAoZnJhbWVbMHhBXSA8PCAxNikgfCAoZnJhbWVbMHhCXSA8PCAyNCkpOworCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JX1ZJREVPSU5GT0ZSQU1FXzMsCisJCWZyYW1lWzB4Q10gfCAoZnJhbWVbMHhEXSA8PCA4KSk7Cit9CisKKy8qCisgKiBidWlsZCBhIEF1ZGlvIEluZm8gRnJhbWUKKyAqLworc3RhdGljIHZvaWQgcjYwMF9oZG1pX2F1ZGlvaW5mb2ZyYW1lKAorCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwl1aW50OF90IGNoYW5uZWxfY291bnQsCisJdWludDhfdCBjb2RpbmdfdHlwZSwKKwl1aW50OF90IHNhbXBsZV9zaXplLAorCXVpbnQ4X3Qgc2FtcGxlX2ZyZXF1ZW5jeSwKKwl1aW50OF90IGZvcm1hdCwKKwl1aW50OF90IGNoYW5uZWxfYWxsb2NhdGlvbiwKKwl1aW50OF90IGxldmVsX3NoaWZ0LAorCWludCBkb3dubWl4X2luaGliaXQKKykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBvZmZzZXQgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKS0+aGRtaV9vZmZzZXQ7CisKKwl1aW50OF90IGZyYW1lWzExXTsKKworCWZyYW1lWzB4MF0gPSAwOworCWZyYW1lWzB4MV0gPSAoY2hhbm5lbF9jb3VudCAmIDB4NykgfCAoKGNvZGluZ190eXBlICYgMHhGKSA8PCA0KTsKKwlmcmFtZVsweDJdID0gKHNhbXBsZV9zaXplICYgMHgzKSB8ICgoc2FtcGxlX2ZyZXF1ZW5jeSAmIDB4NykgPDwgMik7CisJZnJhbWVbMHgzXSA9IGZvcm1hdDsKKwlmcmFtZVsweDRdID0gY2hhbm5lbF9hbGxvY2F0aW9uOworCWZyYW1lWzB4NV0gPSAoKGxldmVsX3NoaWZ0ICYgMHhGKSA8PCAzKSB8ICgoZG93bm1peF9pbmhpYml0ICYgMHgxKSA8PCA3KTsKKwlmcmFtZVsweDZdID0gMDsKKwlmcmFtZVsweDddID0gMDsKKwlmcmFtZVsweDhdID0gMDsKKwlmcmFtZVsweDldID0gMDsKKwlmcmFtZVsweEFdID0gMDsKKworCXI2MDBfaGRtaV9pbmZvZnJhbWVfY2hlY2tzdW0oMHg4NCwgMHgwMSwgMHgwQSwgZnJhbWUpOworCisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfQVVESU9JTkZPRlJBTUVfMCwKKwkJZnJhbWVbMHgwXSB8IChmcmFtZVsweDFdIDw8IDgpIHwgKGZyYW1lWzB4Ml0gPDwgMTYpIHwgKGZyYW1lWzB4M10gPDwgMjQpKTsKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT0lORk9GUkFNRV8xLAorCQlmcmFtZVsweDRdIHwgKGZyYW1lWzB4NV0gPDwgOCkgfCAoZnJhbWVbMHg2XSA8PCAxNikgfCAoZnJhbWVbMHg4XSA8PCAyNCkpOworfQorCisvKgorICogdGVzdCBpZiBhdWRpbyBidWZmZXIgaXMgZmlsbGVkIGVub3VnaCB0byBzdGFydCBwbGF5aW5nCisgKi8KK3N0YXRpYyBpbnQgcjYwMF9oZG1pX2lzX2F1ZGlvX2J1ZmZlcl9maWxsZWQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IG9mZnNldCA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpLT5oZG1pX29mZnNldDsKKworCXJldHVybiAoUlJFRzMyKG9mZnNldCtSNjAwX0hETUlfU1RBVFVTKSAmIDB4MTApICE9IDA7Cit9CisKKy8qCisgKiBoYXZlIGJ1ZmZlciBzdGF0dXMgY2hhbmdlZCBzaW5jZSBsYXN0IGNhbGw/CisgKi8KK2ludCByNjAwX2hkbWlfYnVmZmVyX3N0YXR1c19jaGFuZ2VkKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJaW50IHN0YXR1cywgcmVzdWx0OworCisJaWYgKCFyYWRlb25fZW5jb2Rlci0+aGRtaV9vZmZzZXQpCisJCXJldHVybiAwOworCisJc3RhdHVzID0gcjYwMF9oZG1pX2lzX2F1ZGlvX2J1ZmZlcl9maWxsZWQoZW5jb2Rlcik7CisJcmVzdWx0ID0gcmFkZW9uX2VuY29kZXItPmhkbWlfYnVmZmVyX3N0YXR1cyAhPSBzdGF0dXM7CisJcmFkZW9uX2VuY29kZXItPmhkbWlfYnVmZmVyX3N0YXR1cyA9IHN0YXR1czsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiB3cml0ZSB0aGUgYXVkaW8gd29ya2Fyb3VuZCBzdGF0dXMgdG8gdGhlIGhhcmR3YXJlCisgKi8KK3ZvaWQgcjYwMF9oZG1pX2F1ZGlvX3dvcmthcm91bmQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwl1aW50MzJfdCBvZmZzZXQgPSByYWRlb25fZW5jb2Rlci0+aGRtaV9vZmZzZXQ7CisKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuOworCisJaWYgKHI2MDBfaGRtaV9pc19hdWRpb19idWZmZXJfZmlsbGVkKGVuY29kZXIpKSB7CisJCS8qIGRpc2FibGUgYXVkaW8gd29ya2Fyb3VuZCBhbmQgc3RhcnQgZGVsaXZlcmluZyBvZiBhdWRpbyBmcmFtZXMgKi8KKwkJV1JFRzMyX1Aob2Zmc2V0K1I2MDBfSERNSV9DTlRMLCAweDAwMDAwMDAxLCB+MHgwMDAwMTAwMSk7CisKKwl9IGVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5oZG1pX2F1ZGlvX3dvcmthcm91bmQpIHsKKwkJLyogZW5hYmxlIGF1ZGlvIHdvcmthcm91bmQgYW5kIHN0YXJ0IGRlbGl2ZXJpbmcgb2YgYXVkaW8gZnJhbWVzICovCisJCVdSRUczMl9QKG9mZnNldCtSNjAwX0hETUlfQ05UTCwgMHgwMDAwMTAwMSwgfjB4MDAwMDEwMDEpOworCisJfSBlbHNlIHsKKwkJLyogZGlzYWJsZSBhdWRpbyB3b3JrYXJvdW5kIGFuZCBzdG9wIGRlbGl2ZXJpbmcgb2YgYXVkaW8gZnJhbWVzICovCisJCVdSRUczMl9QKG9mZnNldCtSNjAwX0hETUlfQ05UTCwgMHgwMDAwMDAwMCwgfjB4MDAwMDEwMDEpOworCX0KK30KKworCisvKgorICogdXBkYXRlIHRoZSBpbmZvIGZyYW1lcyB3aXRoIHRoZSBkYXRhIGZyb20gdGhlIGN1cnJlbnQgZGlzcGxheSBtb2RlCisgKi8KK3ZvaWQgcjYwMF9oZG1pX3NldG1vZGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBvZmZzZXQgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKS0+aGRtaV9vZmZzZXQ7CisKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuOworCisJcjYwMF9hdWRpb19zZXRfY2xvY2soZW5jb2RlciwgbW9kZS0+Y2xvY2spOworCisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfVU5LTk9XTl8wLCAweDEwMDApOworCVdSRUczMihvZmZzZXQrUjYwMF9IRE1JX1VOS05PV05fMSwgMHgwKTsKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9VTktOT1dOXzIsIDB4MTAwMCk7CisKKwlyNjAwX2hkbWlfdXBkYXRlX0FDUihlbmNvZGVyLCBtb2RlLT5jbG9jayk7CisKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9WSURFT0NOVEwsIDB4MTMpOworCisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfVkVSU0lPTiwgMHgyMDIpOworCisJcjYwMF9oZG1pX3ZpZGVvaW5mb2ZyYW1lKGVuY29kZXIsIFJHQiwgMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwkvKiBpdCdzIHVua25vd24gd2hhdCB0aGVzZSBiaXRzIGRvIGV4Y2F0bHksIGJ1dCBpdCdzIGluZGVlZCBxdWl0ZSB1c2VmdWxsIGZvciBkZWJ1Z2dpbmcgKi8KKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18wLCAweDAwRkZGRkZGKTsKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18xLCAweDAwN0ZGRkZGKTsKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18yLCAweDAwMDAwMDAxKTsKKwlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18zLCAweDAwMDAwMDAxKTsKKworCXI2MDBfaGRtaV9hdWRpb193b3JrYXJvdW5kKGVuY29kZXIpOworCisJLyogYXVkaW8gcGFja2V0cyBwZXIgbGluZSwgZG9lcyBhbnlvbmUga25vdyBob3cgdG8gY2FsYyB0aGlzID8gKi8KKwlXUkVHMzJfUChvZmZzZXQrUjYwMF9IRE1JX0NOVEwsIDB4MDAwNDAwMDAsIH4weDAwMUYwMDAwKTsKKworCS8qIHVwZGF0ZT8gcmVzZXQ/IGRvbid0IHJlYWx5IGtub3cgKi8KKwlXUkVHMzJfUChvZmZzZXQrUjYwMF9IRE1JX0NOVEwsIDB4MTQwMDAwMDAsIH4weDE0MDAwMDAwKTsKK30KKworLyoKKyAqIHVwZGF0ZSBzZXR0aW5ncyB3aXRoIGN1cnJlbnQgcGFyYW1ldGVycyBmcm9tIGF1ZGlvIGVuZ2luZQorICovCit2b2lkIHI2MDBfaGRtaV91cGRhdGVfYXVkaW9fc2V0dGluZ3Moc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgaW50IGNoYW5uZWxzLAorCQkJCSAgICAgaW50IHJhdGUsCisJCQkJICAgICBpbnQgYnBzLAorCQkJCSAgICAgdWludDhfdCBzdGF0dXNfYml0cywKKwkJCQkgICAgIHVpbnQ4X3QgY2F0ZWdvcnlfY29kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBvZmZzZXQgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKS0+aGRtaV9vZmZzZXQ7CisKKwl1aW50MzJfdCBpZWM7CisKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuOworCisJRFJNX0RFQlVHKCIlcyB3aXRoICVkIGNoYW5uZWxzLCAlZCBIeiBzYW1wbGluZyByYXRlLCAlZCBiaXRzIHBlciBzYW1wbGUsXG4iLAorCQkgcjYwMF9oZG1pX2lzX2F1ZGlvX2J1ZmZlcl9maWxsZWQoZW5jb2RlcikgPyAicGxheWluZyIgOiAic3RvcHBlZCIsCisJCWNoYW5uZWxzLCByYXRlLCBicHMpOworCURSTV9ERUJVRygiMHglMDJYIElFQzYwOTU4IHN0YXR1cyBiaXRzIGFuZCAweCUwMlggY2F0ZWdvcnkgY29kZVxuIiwKKwkJICAoaW50KXN0YXR1c19iaXRzLCAoaW50KWNhdGVnb3J5X2NvZGUpOworCisJaWVjID0gMDsKKwlpZiAoc3RhdHVzX2JpdHMgJiBBVURJT19TVEFUVVNfUFJPRkVTU0lPTkFMKQorCQlpZWMgfD0gMSA8PCAwOworCWlmIChzdGF0dXNfYml0cyAmIEFVRElPX1NUQVRVU19OT05BVURJTykKKwkJaWVjIHw9IDEgPDwgMTsKKwlpZiAoc3RhdHVzX2JpdHMgJiBBVURJT19TVEFUVVNfQ09QWVJJR0hUKQorCQlpZWMgfD0gMSA8PCAyOworCWlmIChzdGF0dXNfYml0cyAmIEFVRElPX1NUQVRVU19FTVBIQVNJUykKKwkJaWVjIHw9IDEgPDwgMzsKKworCWllYyB8PSBjYXRlZ29yeV9jb2RlIDw8IDg7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlICAzMjAwMDogaWVjIHw9IDB4MyA8PCAyNDsgYnJlYWs7CisJY2FzZSAgNDQxMDA6IGllYyB8PSAweDAgPDwgMjQ7IGJyZWFrOworCWNhc2UgIDg4MjAwOiBpZWMgfD0gMHg4IDw8IDI0OyBicmVhazsKKwljYXNlIDE3NjQwMDogaWVjIHw9IDB4YyA8PCAyNDsgYnJlYWs7CisJY2FzZSAgNDgwMDA6IGllYyB8PSAweDIgPDwgMjQ7IGJyZWFrOworCWNhc2UgIDk2MDAwOiBpZWMgfD0gMHhhIDw8IDI0OyBicmVhazsKKwljYXNlIDE5MjAwMDogaWVjIHw9IDB4ZSA8PCAyNDsgYnJlYWs7CisJfQorCisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfSUVDNjA5NThfMSwgaWVjKTsKKworCWllYyA9IDA7CisJc3dpdGNoIChicHMpIHsKKwljYXNlIDE2OiBpZWMgfD0gMHgyOyBicmVhazsKKwljYXNlIDIwOiBpZWMgfD0gMHgzOyBicmVhazsKKwljYXNlIDI0OiBpZWMgfD0gMHhiOyBicmVhazsKKwl9CisJaWYgKHN0YXR1c19iaXRzICYgQVVESU9fU1RBVFVTX1YpCisJCWllYyB8PSAweDUgPDwgMTY7CisKKwlXUkVHMzJfUChvZmZzZXQrUjYwMF9IRE1JX0lFQzYwOTU4XzIsIGllYywgfjB4NTAwMGYpOworCisJLyogMHgwMjEgb3IgMHgwMzEgc2V0cyB0aGUgYXVkaW8gZnJhbWUgbGVuZ3RoICovCisJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfQVVESU9DTlRMLCAweDMxKTsKKwlyNjAwX2hkbWlfYXVkaW9pbmZvZnJhbWUoZW5jb2RlciwgY2hhbm5lbHMtMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwlyNjAwX2hkbWlfYXVkaW9fd29ya2Fyb3VuZChlbmNvZGVyKTsKKworCS8qIHVwZGF0ZT8gcmVzZXQ/IGRvbid0IHJlYWx5IGtub3cgKi8KKwlXUkVHMzJfUChvZmZzZXQrUjYwMF9IRE1JX0NOVEwsIDB4MDQwMDAwMDAsIH4weDA0MDAwMDAwKTsKK30KKworLyoKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBIRE1JIGVuZ2luZQorICovCit2b2lkIHI2MDBfaGRtaV9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwl1aW50MzJfdCBvZmZzZXQgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKS0+aGRtaV9vZmZzZXQ7CisKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuOworCisJRFJNX0RFQlVHKCIlcyBIRE1JIGludGVyZmFjZSBAIDB4JTA0WFxuIiwgZW5hYmxlID8gIkVuYWJsaW5nIiA6ICJEaXNhYmxpbmciLCBvZmZzZXQpOworCisJLyogc29tZSB2ZXJzaW9uIG9mIGF0b21iaW9zIGlnbm9yZSB0aGUgZW5hYmxlIEhETUkgZmxhZworCSAqIHNvIGVuYWJsaW5nL2Rpc2FibGluZyBIRE1JIHdhcyBtb3ZlZCBoZXJlIGZvciBUTURTMSsyICovCisJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgeworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOgorCQlXUkVHMzJfUChBVklWT19UTURTQV9DTlRMLCBlbmFibGUgPyAweDQgOiAweDAsIH4weDQpOworCQlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9FTkFCTEUsIGVuYWJsZSA/IDB4MTAxIDogMHgwKTsKKwkJYnJlYWs7CisKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0xWVE0xOgorCQlXUkVHMzJfUChBVklWT19MVlRNQV9DTlRMLCBlbmFibGUgPyAweDQgOiAweDAsIH4weDQpOworCQlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9FTkFCTEUsIGVuYWJsZSA/IDB4MTA1IDogMHgwKTsKKwkJYnJlYWs7CisKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgorCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgorCQkvKiBUaGlzIHBhcnQgaXMgZG91YnRmdWxsIGluIG15IG9waW5pb24gKi8KKwkJV1JFRzMyKG9mZnNldCtSNjAwX0hETUlfRU5BQkxFLCBlbmFibGUgPyAweDExMCA6IDB4MCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJ1bmtub3duIEhETUkgb3V0cHV0IHR5cGVcbiIpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBkZXRlcm1pbiBhdCB3aGljaCByZWdpc3RlciBvZmZzZXQgdGhlIEhETUkgZW5jb2RlciBpcworICovCit2b2lkIHI2MDBfaGRtaV9pbml0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisKKwlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzE6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCQlyYWRlb25fZW5jb2Rlci0+aGRtaV9vZmZzZXQgPSBSNjAwX0hETUlfVE1EUzE7CisJCWJyZWFrOworCisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVlRNMToKKwkJc3dpdGNoIChyNjAwX2F1ZGlvX3RtZHNfaW5kZXgoZW5jb2RlcikpIHsKKwkJY2FzZSAwOgorCQkJcmFkZW9uX2VuY29kZXItPmhkbWlfb2Zmc2V0ID0gUjYwMF9IRE1JX1RNRFMxOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9lbmNvZGVyLT5oZG1pX29mZnNldCA9IFI2MDBfSERNSV9UTURTMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmFkZW9uX2VuY29kZXItPmhkbWlfb2Zmc2V0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgorCQlyYWRlb25fZW5jb2Rlci0+aGRtaV9vZmZzZXQgPSBSNjAwX0hETUlfVE1EUzI7CisJCWJyZWFrOworCisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJCXJhZGVvbl9lbmNvZGVyLT5oZG1pX29mZnNldCA9IFI2MDBfSERNSV9ESUc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmFkZW9uX2VuY29kZXItPmhkbWlfb2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJRFJNX0RFQlVHKCJ1c2luZyBIRE1JIGVuZ2luZSBhdCBvZmZzZXQgMHglMDRYIGZvciBlbmNvZGVyIDB4JXhcbiIsCisJCSAgcmFkZW9uX2VuY29kZXItPmhkbWlfb2Zmc2V0LCByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCk7CisKKwkvKiBUT0RPOiBtYWtlIHRoaXMgY29uZmlndXJlYWJsZSAqLworCXJhZGVvbl9lbmNvZGVyLT5oZG1pX2F1ZGlvX3dvcmthcm91bmQgPSAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCmluZGV4IGUyZDFmNWYuLmQwZTI4ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKQEAgLTExMCw1ICsxMTAsNzkgQEAKICNkZWZpbmUgUjYwMF9CSU9TXzZfU0NSQVRDSCAgICAgICAgICAgICAgIDB4MTczYwogI2RlZmluZSBSNjAwX0JJT1NfN19TQ1JBVENIICAgICAgICAgICAgICAgMHgxNzQwCiAKKy8qIEF1ZGlvLCB0aGVzZSByZWdzIHdlcmUgcmV2ZXJzZSBlbmdpbmVyZWQsCisgKiBzbyB0aGUgY2hhbmNlIGlzIGhpZ2ggdGhhdCB0aGUgbmFtaW5nIGlzIHdyb25nCisgKiBSNnh4KyA/Pz8gKi8KKworLyogQXVkaW8gY2xvY2tzICovCisjZGVmaW5lIFI2MDBfQVVESU9fUExMMV9NVUwgICAgICAgICAgICAgICAweDA1MTQKKyNkZWZpbmUgUjYwMF9BVURJT19QTEwxX0RJViAgICAgICAgICAgICAgIDB4MDUxOAorI2RlZmluZSBSNjAwX0FVRElPX1BMTDJfTVVMICAgICAgICAgICAgICAgMHgwNTI0CisjZGVmaW5lIFI2MDBfQVVESU9fUExMMl9ESVYgICAgICAgICAgICAgICAweDA1MjgKKyNkZWZpbmUgUjYwMF9BVURJT19DTEtfU1JDU0VMICAgICAgICAgICAgIDB4MDUzNAorCisvKiBBdWRpbyBnZW5lcmFsICovCisjZGVmaW5lIFI2MDBfQVVESU9fRU5BQkxFICAgICAgICAgICAgICAgICAweDczMDAKKyNkZWZpbmUgUjYwMF9BVURJT19USU1JTkcgICAgICAgICAgICAgICAgIDB4NzM0NAorCisvKiBBdWRpbyBwYXJhbXMgKi8KKyNkZWZpbmUgUjYwMF9BVURJT19WRU5ET1JfSUQgICAgICAgICAgICAgIDB4NzM4MAorI2RlZmluZSBSNjAwX0FVRElPX1JFVklTSU9OX0lEICAgICAgICAgICAgMHg3Mzg0CisjZGVmaW5lIFI2MDBfQVVESU9fUk9PVF9OT0RFX0NPVU5UICAgICAgICAweDczODgKKyNkZWZpbmUgUjYwMF9BVURJT19OSUQxX05PREVfQ09VTlQgICAgICAgIDB4NzM4YworI2RlZmluZSBSNjAwX0FVRElPX05JRDFfVFlQRSAgICAgICAgICAgICAgMHg3MzkwCisjZGVmaW5lIFI2MDBfQVVESU9fU1VQUE9SVEVEX1NJWkVfUkFURSAgICAweDczOTQKKyNkZWZpbmUgUjYwMF9BVURJT19TVVBQT1JURURfQ09ERUMgICAgICAgIDB4NzM5OAorI2RlZmluZSBSNjAwX0FVRElPX1NVUFBPUlRFRF9QT1dFUl9TVEFURVMgMHg3MzljCisjZGVmaW5lIFI2MDBfQVVESU9fTklEMl9DQVBTICAgICAgICAgICAgICAweDczYTAKKyNkZWZpbmUgUjYwMF9BVURJT19OSUQzX0NBUFMgICAgICAgICAgICAgIDB4NzNhNAorI2RlZmluZSBSNjAwX0FVRElPX05JRDNfUElOX0NBUFMgICAgICAgICAgMHg3M2E4CisKKy8qIEF1ZGlvIGNvbm4gbGlzdCAqLworI2RlZmluZSBSNjAwX0FVRElPX0NPTk5fTElTVF9MRU4gICAgICAgICAgMHg3M2FjCisjZGVmaW5lIFI2MDBfQVVESU9fQ09OTl9MSVNUICAgICAgICAgICAgICAweDczYjAKKworLyogQXVkaW8gdmVyYnMgKi8KKyNkZWZpbmUgUjYwMF9BVURJT19SQVRFX0JQU19DSEFOTkVMICAgICAgIDB4NzNjMAorI2RlZmluZSBSNjAwX0FVRElPX1BMQVlJTkcgICAgICAgICAgICAgICAgMHg3M2M0CisjZGVmaW5lIFI2MDBfQVVESU9fSU1QTEVNRU5UQVRJT05fSUQgICAgICAweDczYzgKKyNkZWZpbmUgUjYwMF9BVURJT19DT05GSUdfREVGQVVMVCAgICAgICAgIDB4NzNjYworI2RlZmluZSBSNjAwX0FVRElPX1BJTl9TRU5TRSAgICAgICAgICAgICAgMHg3M2QwCisjZGVmaW5lIFI2MDBfQVVESU9fUElOX1dJREdFVF9DTlRMICAgICAgICAweDczZDQKKyNkZWZpbmUgUjYwMF9BVURJT19TVEFUVVNfQklUUyAgICAgICAgICAgIDB4NzNkOAorCisvKiBIRE1JIGJhc2UgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIFI2MDBfSERNSV9UTURTMSAgICAgICAgICAgICAgICAgICAweDc0MDAKKyNkZWZpbmUgUjYwMF9IRE1JX1RNRFMyICAgICAgICAgICAgICAgICAgIDB4NzcwMAorI2RlZmluZSBSNjAwX0hETUlfRElHICAgICAgICAgICAgICAgICAgICAgMHg3ODAwCisKKy8qIEhETUkgcmVnaXN0ZXJzICovCisjZGVmaW5lIFI2MDBfSERNSV9FTkFCTEUgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUjYwMF9IRE1JX1NUQVRVUyAgICAgICAgICAgMHgwNAorI2RlZmluZSBSNjAwX0hETUlfQ05UTCAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFI2MDBfSERNSV9VTktOT1dOXzAgICAgICAgIDB4MEMKKyNkZWZpbmUgUjYwMF9IRE1JX0FVRElPQ05UTCAgICAgICAgMHgxMAorI2RlZmluZSBSNjAwX0hETUlfVklERU9DTlRMICAgICAgICAweDE0CisjZGVmaW5lIFI2MDBfSERNSV9WRVJTSU9OICAgICAgICAgIDB4MTgKKyNkZWZpbmUgUjYwMF9IRE1JX1VOS05PV05fMSAgICAgICAgMHgyOAorI2RlZmluZSBSNjAwX0hETUlfVklERU9JTkZPRlJBTUVfMCAweDU0CisjZGVmaW5lIFI2MDBfSERNSV9WSURFT0lORk9GUkFNRV8xIDB4NTgKKyNkZWZpbmUgUjYwMF9IRE1JX1ZJREVPSU5GT0ZSQU1FXzIgMHg1YworI2RlZmluZSBSNjAwX0hETUlfVklERU9JTkZPRlJBTUVfMyAweDYwCisjZGVmaW5lIFI2MDBfSERNSV8zMmtIel9DVFMgICAgICAgIDB4YWMKKyNkZWZpbmUgUjYwMF9IRE1JXzMya0h6X04gICAgICAgICAgMHhiMAorI2RlZmluZSBSNjAwX0hETUlfNDRfMWtIel9DVFMgICAgICAweGI0CisjZGVmaW5lIFI2MDBfSERNSV80NF8xa0h6X04gICAgICAgIDB4YjgKKyNkZWZpbmUgUjYwMF9IRE1JXzQ4a0h6X0NUUyAgICAgICAgMHhiYworI2RlZmluZSBSNjAwX0hETUlfNDhrSHpfTiAgICAgICAgICAweGMwCisjZGVmaW5lIFI2MDBfSERNSV9BVURJT0lORk9GUkFNRV8wIDB4Y2MKKyNkZWZpbmUgUjYwMF9IRE1JX0FVRElPSU5GT0ZSQU1FXzEgMHhkMAorI2RlZmluZSBSNjAwX0hETUlfSUVDNjA5NThfMSAgICAgICAweGQ0CisjZGVmaW5lIFI2MDBfSERNSV9JRUM2MDk1OF8yICAgICAgIDB4ZDgKKyNkZWZpbmUgUjYwMF9IRE1JX1VOS05PV05fMiAgICAgICAgMHhkYworI2RlZmluZSBSNjAwX0hETUlfQVVESU9fREVCVUdfMCAgICAweGUwCisjZGVmaW5lIFI2MDBfSERNSV9BVURJT19ERUJVR18xICAgIDB4ZTQKKyNkZWZpbmUgUjYwMF9IRE1JX0FVRElPX0RFQlVHXzIgICAgMHhlOAorI2RlZmluZSBSNjAwX0hETUlfQVVESU9fREVCVUdfMyAgICAweGVjCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggYzkzOGJiNS4uNTNiNTU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC04OSw2ICs4OSw3IEBACiBleHRlcm4gaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGU7CiBleHRlcm4gaW50IHJhZGVvbl90djsKIGV4dGVybiBpbnQgcmFkZW9uX25ld19wbGw7CitleHRlcm4gaW50IHJhZGVvbl9hdWRpbzsKIAogLyoKICAqIENvcHkgZnJvbSByYWRlb25fZHJ2Lmggc28gd2UgZG9uJ3QgaGF2ZSB0byBpbmNsdWRlIGJvdGggYW5kIGhhdmUgY29uZmxpY3RpbmcKQEAgLTE2MSw2ICsxNjIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWNyZWF0ZWQ7CiAJc3RydWN0IGxpc3RfaGVhZAkJZW1pdGVkOwogCXN0cnVjdCBsaXN0X2hlYWQJCXNpZ25hbGVkOworCWJvb2wJCQkJaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2ZlbmNlIHsKQEAgLTIwMSw4ICsyMDMsOSBAQAogc3RydWN0IHJhZGVvbl9tbWFuIHsKIAlzdHJ1Y3QgdHRtX2JvX2dsb2JhbF9yZWYgICAgICAgIGJvX2dsb2JhbF9yZWY7CiAJc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlCW1lbV9nbG9iYWxfcmVmOwotCWJvb2wJCQkJbWVtX2dsb2JhbF9yZWZlcmVuY2VkOwogCXN0cnVjdCB0dG1fYm9fZGV2aWNlCQliZGV2OworCWJvb2wJCQkJbWVtX2dsb2JhbF9yZWZlcmVuY2VkOworCWJvb2wJCQkJaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2JvIHsKQEAgLTgxNCw2ICs4MTcsMTQgQEAKIAlzdHJ1Y3QgcjYwMF9paCBpaDsgLyogcjYvNzAwIGludGVycnVwdCByaW5nICovCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBob3RwbHVnX3dvcms7CisKKwkvKiBhdWRpbyBzdHVmZiAqLworCXN0cnVjdCB0aW1lcl9saXN0CWF1ZGlvX3RpbWVyOworCWludAkJCWF1ZGlvX2NoYW5uZWxzOworCWludAkJCWF1ZGlvX3JhdGU7CisJaW50CQkJYXVkaW9fYml0c19wZXJfc2FtcGxlOworCXVpbnQ4X3QJCQlhdWRpb19zdGF0dXNfYml0czsKKwl1aW50OF90CQkJYXVkaW9fY2F0ZWdvcnlfY29kZTsKIH07CiAKIGludCByYWRlb25fZGV2aWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC0xMDE2LDYgKzEwMjcsNyBAQAogZXh0ZXJuIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oc3RydWN0IHJhZGVvbl9ibyAqcmJvLCB1MzIgZG9tYWluKTsKK2V4dGVybiBib29sIHJhZGVvbl90dG1fYm9faXNfcmFkZW9uX2JvKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwogCiAvKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAgKi8KIHN0cnVjdCByMTAwX21jX3NhdmUgewpAQCAtMTE0Niw2ICsxMTU4LDIxIEBACiBleHRlcm4gdm9pZCByNjAwX2loX3JpbmdfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKIGV4dGVybiBpbnQgcjYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAorZXh0ZXJuIGludCByNjAwX2F1ZGlvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX2F1ZGlvX3RtZHNfaW5kZXgoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKK2V4dGVybiB2b2lkIHI2MDBfYXVkaW9fc2V0X2Nsb2NrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IGNsb2NrKTsKK2V4dGVybiB2b2lkIHI2MDBfYXVkaW9fZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX2hkbWlfaW5pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworZXh0ZXJuIHZvaWQgcjYwMF9oZG1pX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcjYwMF9oZG1pX3NldG1vZGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CitleHRlcm4gaW50IHI2MDBfaGRtaV9idWZmZXJfc3RhdHVzX2NoYW5nZWQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKK2V4dGVybiB2b2lkIHI2MDBfaGRtaV91cGRhdGVfYXVkaW9fc2V0dGluZ3Moc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgaW50IGNoYW5uZWxzLAorCQkJCQkgICAgaW50IHJhdGUsCisJCQkJCSAgICBpbnQgYnBzLAorCQkJCQkgICAgdWludDhfdCBzdGF0dXNfYml0cywKKwkJCQkJICAgIHVpbnQ4X3QgY2F0ZWdvcnlfY29kZSk7CisKICNpbmNsdWRlICJyYWRlb25fb2JqZWN0LmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCmluZGV4IDYzNjExNmIuLmViMjkyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTMzLDYgKzMzLDcgQEAKICAqLwogdWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBlbmdfY2xvY2spOwordWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAogdWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMDYsNyArMTA3LDcgQEAKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAotCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMTY2LDcgKzE2Nyw3IEBACiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKLQkuZ2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMjU5LDcgKzI2MCw3IEBACiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKLQkuZ2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDEyYTBjNzYuLjMyMTA0NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtNzQ1LDggKzc0NSw3IEBACiAJCWVsc2UKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LAotCQkJCQkJCQkJKDEgPDwKLQkJCQkJCQkJCSBpKSwKKwkJCQkJCQkJCSgxIDw8IGkpLAogCQkJCQkJCQkJZGFjKSwKIAkJCQkJCSAgKDEgPDwgaSkpOwogCX0KQEAgLTc1OCwzMiArNzU3LDMwIEBACiAJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tqXS52YWxpZCAmJiAoaSAhPSBqKSkgewogCQkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLmxpbmVfbXV4ID09CiAJCQkJCSAgICBiaW9zX2Nvbm5lY3RvcnNbal0ubGluZV9tdXgpIHsKLQkJCQkJCWlmICgoKGJpb3NfY29ubmVjdG9yc1tpXS4KLQkJCQkJCSAgICAgIGRldmljZXMgJgotCQkJCQkJICAgICAgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkKLQkJCQkJCSAgICAgJiYgKGJpb3NfY29ubmVjdG9yc1tqXS4KLQkJCQkJCQkgZGV2aWNlcyAmCi0JCQkJCQkJIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpKQotCQkJCQkJICAgIHx8Ci0JCQkJCQkgICAgKChiaW9zX2Nvbm5lY3RvcnNbal0uCi0JCQkJCQkgICAgICBkZXZpY2VzICYKLQkJCQkJCSAgICAgIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpCi0JCQkJCQkgICAgICYmIChiaW9zX2Nvbm5lY3RvcnNbaV0uCi0JCQkJCQkJIGRldmljZXMgJgotCQkJCQkJCSAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKSkpIHsKLQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0uCi0JCQkJCQkJICAgIGRldmljZXMgfD0KLQkJCQkJCQkgICAgYmlvc19jb25uZWN0b3JzW2pdLgotCQkJCQkJCSAgICBkZXZpY2VzOwotCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS4KLQkJCQkJCQkgICAgY29ubmVjdG9yX3R5cGUgPQotCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKLQkJCQkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJgotCQkJCQkJCSAgICAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKQorCQkJCQkJLyogbWFrZSBzdXJlIG5vdCB0byBjb21iaW5lIExWRFMgKi8KKwkJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0ubGluZV9tdXggPSA1MzsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0uZGRjX2J1cy52YWxpZCA9IGZhbHNlOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgeworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS5saW5lX211eCA9IDUzOworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS5kZGNfYnVzLnZhbGlkID0gZmFsc2U7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvKiBjb21iaW5lIGFuYWxvZyBhbmQgZGlnaXRhbCBmb3IgRFZJLUkgKi8KKwkJCQkJCWlmICgoKGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkgJiYKKwkJCQkJCSAgICAgKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkpIHx8CisJCQkJCQkgICAgKChiaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpICYmCisJCQkJCQkgICAgIChiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpKSkgeworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzIHw9CisJCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzOworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5jb25uZWN0b3JfdHlwZSA9CisJCQkJCQkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOworCQkJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpCiAJCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tpXS5ocGQgPQogCQkJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLmhwZDsKLQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0uCi0JCQkJCQkJICAgIHZhbGlkID0gZmFsc2U7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLnZhbGlkID0gZmFsc2U7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CkBAIC0xMjM0LDYgKzEyMzEsNjEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorZW51bSByYWRlb25fdHZfc3RkCityYWRlb25fYXRvbWJpb3NfZ2V0X3R2X2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgQW5hbG9nVFZfSW5mbyk7CisJdWludDE2X3QgZGF0YV9vZmZzZXQ7CisJdWludDhfdCBmcmV2LCBjcmV2OworCXN0cnVjdCBfQVRPTV9BTkFMT0dfVFZfSU5GTyAqdHZfaW5mbzsKKwllbnVtIHJhZGVvbl90dl9zdGQgdHZfc3RkID0gVFZfU1REX05UU0M7CisKKwlhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJdHZfaW5mbyA9IChzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlzd2l0Y2ggKHR2X2luZm8tPnVjVFZfQm9vdFVwRGVmYXVsdFN0YW5kYXJkKSB7CisJY2FzZSBBVE9NX1RWX05UU0M6CisJCXR2X3N0ZCA9IFRWX1NURF9OVFNDOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogTlRTQ1xuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9OVFNDSjoKKwkJdHZfc3RkID0gVFZfU1REX05UU0NfSjsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IE5UU0MtSlxuIik7CisJCWJyZWFrOworCWNhc2UgQVRPTV9UVl9QQUw6CisJCXR2X3N0ZCA9IFRWX1NURF9QQUw7CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUxcbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfUEFMTToKKwkJdHZfc3RkID0gVFZfU1REX1BBTF9NOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogUEFMLU1cbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfUEFMTjoKKwkJdHZfc3RkID0gVFZfU1REX1BBTF9OOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogUEFMLU5cbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfUEFMQ046CisJCXR2X3N0ZCA9IFRWX1NURF9QQUxfQ047CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUwtQ05cbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfUEFMNjA6CisJCXR2X3N0ZCA9IFRWX1NURF9QQUxfNjA7CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBQQUwtNjBcbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfU0VDQU06CisJCXR2X3N0ZCA9IFRWX1NURF9TRUNBTTsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFNFQ0FNXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdHZfc3RkID0gVFZfU1REX05UU0M7CisJCURSTV9JTkZPKCJVbmtub3duIFRWIHN0YW5kYXJkOyBkZWZhdWx0aW5nIHRvIE5UU0NcbiIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHR2X3N0ZDsKK30KKwogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3R2X2RhYyAqCiByYWRlb25fYXRvbWJpb3NfZ2V0X3R2X2RhY19pbmZvKHN0cnVjdCByYWRlb25fZW5jb2RlciAqZW5jb2RlcikKIHsKQEAgLTEyNjksNiArMTMyMSw3IEBACiAJCWRhYyA9IGRhY19pbmZvLT51Y0RBQzJfTlRTQ19EQUNfQWRqdXN0bWVudDsKIAkJdHZfZGFjLT5udHNjX3R2ZGFjX2FkaiA9IChiZyA8PCAxNikgfCAoZGFjIDw8IDIwKTsKIAorCQl0dl9kYWMtPnR2X3N0ZCA9IHJhZGVvbl9hdG9tYmlvc19nZXRfdHZfaW5mbyhyZGV2KTsKIAl9CiAJcmV0dXJuIHR2X2RhYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggYjA2MjEwOS4uODEyZjI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTYyLDcgKzYyLDcgQEAKIH0KIAogLyogMTAga2h6ICovCi1zdGF0aWMgdWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordWludDMyX3QgcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByYWRlb25fcGxsICptcGxsID0gJnJkZXYtPmNsb2NrLm1wbGw7CiAJdWludDMyX3QgZmJfZGl2LCByZWZfZGl2LCBwb3N0X2RpdiwgbWNsazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCBjNTAyMWEzLi5mZDk0ZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC02MzQsMTEgKzYzNCwxMCBAQAogCXJldHVybiBwX2RhYzsKIH0KIAotc3RhdGljIGVudW0gcmFkZW9uX3R2X3N0ZAotcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQorZW51bSByYWRlb25fdHZfc3RkCityYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+YmFzZS5kZXY7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZGV2LT5kZGV2OwogCXVpbnQxNl90IHR2X2luZm87CiAJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZCA9IFRWX1NURF9OVFNDOwogCkBAIC03NzksNyArNzc4LDcgQEAKIAkJCXR2X2RhYy0+bnRzY190dmRhY19hZGogPSAoYmcgPDwgMTYpIHwgKGRhYyA8PCAyMCk7CiAJCQlmb3VuZCA9IDE7CiAJCX0KLQkJdHZfZGFjLT50dl9zdGQgPSByYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhlbmNvZGVyKTsKKwkJdHZfZGFjLT50dl9zdGQgPSByYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhyZGV2KTsKIAl9CiAJaWYgKCFmb3VuZCkgewogCQkvKiB0aGVuIGNoZWNrIENSVCB0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IDVlZWNlMTguLjIwMTYxNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTIwOCw2ICsyMDgsMTggQEAKIAkJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKIAkJRFJNX0RFQlVHKCJBZGRpbmcgbmF0aXZlIHBhbmVsIG1vZGUgJXNcbiIsIG1vZGUtPm5hbWUpOworCX0gZWxzZSBpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ICE9IDAgJiYKKwkJICAgbmF0aXZlX21vZGUtPnZkaXNwbGF5ICE9IDApIHsKKwkJLyogbWFjIGxhcHRvcHMgd2l0aG91dCBhbiBlZGlkICovCisJCS8qIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgZXhhY3QgcGFuZWwgbW9kZSwKKwkJICogYnV0IGFuIGFwcHJveGltYXRpb24gYmFzZWQgb24gdGhlIGN2dCBmb3JtdWxhLiAgRm9yIHRoZXNlCisJCSAqIHN5c3RlbXMgd2Ugc2hvdWxkIGlkZWFsbHkgcmVhZCB0aGUgbW9kZSBpbmZvIG91dCBvZiB0aGUKKwkJICogcmVnaXN0ZXJzIG9yIGFkZCBhIG1vZGUgdGFibGUsIGJ1dCB0aGlzIHdvcmtzIGFuZCBpcyBtdWNoCisJCSAqIHNpbXBsZXIuCisJCSAqLworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgbmF0aXZlX21vZGUtPmhkaXNwbGF5LCBuYXRpdmVfbW9kZS0+dmRpc3BsYXksIDYwLCB0cnVlLCBmYWxzZSwgZmFsc2UpOworCQltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQgfCBEUk1fTU9ERV9UWVBFX0RSSVZFUjsKKwkJRFJNX0RFQlVHKCJBZGRpbmcgY3Z0IGFwcHJveGltYXRpb24gb2YgbmF0aXZlIHBhbmVsIG1vZGUgJXNcbiIsIG1vZGUtPm5hbWUpOwogCX0KIAlyZXR1cm4gbW9kZTsKIH0KQEAgLTExNzEsNyArMTE4Myw3IEBACiAJCQkJCQkgICAgICAxKTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLnR2X3N0ZF9wcm9wZXJ0eSwKLQkJCQkJCSAgICAgIDEpOworCQkJCQkJICAgICAgcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHJkZXYpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgpAQCAtMTMxNSw3ICsxMzI3LDcgQEAKIAkJCQkJCSAgICAgIDEpOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8udHZfc3RkX3Byb3BlcnR5LAotCQkJCQkJICAgICAgMSk7CisJCQkJCQkgICAgICByYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhyZGV2KSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggMDJiY2RiMS4uN2M2ODQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTM5MSw2ICszOTEsMTIgQEAKIAkJLyogRklYTUU6IG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJcmRldi0+YXNpYy0+Z2V0X21lbW9yeV9jbG9jayA9IE5VTEw7CisJCXJkZXYtPmFzaWMtPnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00ODEsNiArNDg3LDcgQEAKIAlhdG9tX2NhcmRfaW5mby0+cGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGU7CiAKIAlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZShhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CisJbXV0ZXhfaW5pdCgmcmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dC0+bXV0ZXgpOwogCXJhZGVvbl9hdG9tX2luaXRpYWxpemVfYmlvc19zY3JhdGNoX3JlZ3MocmRldi0+ZGRldik7CiAJYXRvbV9hbGxvY2F0ZV9mYl9zY3JhdGNoKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwogCXJldHVybiAwOwpAQCAtNTM5LDkgKzU0Niw3MiBAQAogCX0KIH0KIAotLyoKLSAqIFJhZGVvbiBkZXZpY2UuCi0gKi8KK3ZvaWQgcmFkZW9uX2NoZWNrX2FyZ3VtZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiB2cmFtbGltaXQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byAqLworCXN3aXRjaCAocmFkZW9uX3ZyYW1fbGltaXQpIHsKKwljYXNlIDA6CisJY2FzZSA0OgorCWNhc2UgODoKKwljYXNlIDE2OgorCWNhc2UgMzI6CisJY2FzZSA2NDoKKwljYXNlIDEyODoKKwljYXNlIDI1NjoKKwljYXNlIDUxMjoKKwljYXNlIDEwMjQ6CisJY2FzZSAyMDQ4OgorCWNhc2UgNDA5NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAidnJhbSBsaW1pdCAoJWQpIG11c3QgYmUgYSBwb3dlciBvZiAyXG4iLAorCQkJCXJhZGVvbl92cmFtX2xpbWl0KTsKKwkJcmFkZW9uX3ZyYW1fbGltaXQgPSAwOworCQlicmVhazsKKwl9CisJcmFkZW9uX3ZyYW1fbGltaXQgPSByYWRlb25fdnJhbV9saW1pdCA8PCAyMDsKKwkvKiBndHQgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIHR3byBhbmQgZ3JlYXRlciBvciBlcXVhbCB0byAzMk0gKi8KKwlzd2l0Y2ggKHJhZGVvbl9nYXJ0X3NpemUpIHsKKwljYXNlIDQ6CisJY2FzZSA4OgorCWNhc2UgMTY6CisJCWRldl93YXJuKHJkZXYtPmRldiwgImdhcnQgc2l6ZSAoJWQpIHRvbyBzbWFsbCBmb3JjaW5nIHRvIDUxMk1cbiIsCisJCQkJcmFkZW9uX2dhcnRfc2l6ZSk7CisJCXJhZGVvbl9nYXJ0X3NpemUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgMzI6CisJY2FzZSA2NDoKKwljYXNlIDEyODoKKwljYXNlIDI1NjoKKwljYXNlIDUxMjoKKwljYXNlIDEwMjQ6CisJY2FzZSAyMDQ4OgorCWNhc2UgNDA5NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZ2FydCBzaXplICglZCkgbXVzdCBiZSBhIHBvd2VyIG9mIDJcbiIsCisJCQkJcmFkZW9uX2dhcnRfc2l6ZSk7CisJCXJhZGVvbl9nYXJ0X3NpemUgPSA1MTI7CisJCWJyZWFrOworCX0KKwlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkvKiBBR1AgbW9kZSBjYW4gb25seSBiZSAtMSwgMSwgMiwgNCwgOCAqLworCXN3aXRjaCAocmFkZW9uX2FncG1vZGUpIHsKKwljYXNlIC0xOgorCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKHJkZXYtPmRldiwgImludmFsaWQgQUdQIG1vZGUgJWQgKHZhbGlkIG1vZGU6ICIKKwkJCQkiLTEsIDAsIDEsIDIsIDQsIDgpXG4iLCByYWRlb25fYWdwbW9kZSk7CisJCXJhZGVvbl9hZ3Btb2RlID0gMDsKKwkJYnJlYWs7CisJfQorfQorCiBpbnQgcmFkZW9uX2RldmljZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsCiAJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTU4MCw5ICs2NTAsOSBAQAogCiAJLyogU2V0IGFzaWMgZnVuY3Rpb25zICovCiAJciA9IHJhZGVvbl9hc2ljX2luaXQocmRldik7Ci0JaWYgKHIpIHsKKwlpZiAocikKIAkJcmV0dXJuIHI7Ci0JfQorCXJhZGVvbl9jaGVja19hcmd1bWVudHMocmRldik7CiAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQICYmIHJhZGVvbl9hZ3Btb2RlID09IC0xKSB7CiAJCXJhZGVvbl9hZ3BfZGlzYWJsZShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCBhMTMzYjgzLi45MWQ3MmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC03MzksNyArNzM5LDcgQEAKIAl7IFRWX1NURF9TRUNBTSwgInNlY2FtIiB9LAogfTsKIAotaW50IHJhZGVvbl9tb2Rlc2V0X2NyZWF0ZV9wcm9wcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcmFkZW9uX21vZGVzZXRfY3JlYXRlX3Byb3BzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCBpLCBzejsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBjNWM0NWU2Li44YmEzZGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtODcsNiArODcsNyBAQAogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwogaW50IHJhZGVvbl90diA9IDE7CiBpbnQgcmFkZW9uX25ld19wbGwgPSAxOworaW50IHJhZGVvbl9hdWRpbyA9IDE7CiAKIE1PRFVMRV9QQVJNX0RFU0Mobm9fd2IsICJEaXNhYmxlIEFHUCB3cml0ZWJhY2sgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9fd2IsIHJhZGVvbl9ub193YiwgaW50LCAwNDQ0KTsKQEAgLTEyNCw2ICsxMjUsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhuZXdfcGxsLCAiU2VsZWN0IG5ldyBQTEwgY29kZSBmb3IgQVZJVk8gY2hpcHMiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChuZXdfcGxsLCByYWRlb25fbmV3X3BsbCwgaW50LCAwNDQ0KTsKIAorTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoYXVkaW8sIHJhZGVvbl9hdWRpbywgaW50LCAwNDQ0KTsKKwogc3RhdGljIGludCByYWRlb25fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTE5Miw3ICsxOTYsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCkBAIC0yODAsNyArMjg0LDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IHJhZGVvbl9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKaW5kZXggYjRmMjNlYy4uY2NiYTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCkBAIC0yMzMsNiArMjMzLDggQEAKIAkJaWYgKCFBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OwogCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKKwkJCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKKwkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKIAkJfQogCQlhZGp1c3RlZF9tb2RlLT5iYXNlLmlkID0gbW9kZV9pZDsKIAl9CkBAIC00MzgsNiArNDQwLDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJdW5pb24gbHZkc19lbmNvZGVyX2NvbnRyb2wgYXJnczsKIAlpbnQgaW5kZXggPSAwOworCWludCBoZG1pX2RldGVjdGVkID0gMDsKIAl1aW50OF90IGZyZXYsIGNyZXY7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWc7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKQEAgLTQ1OCw2ICs0NjEsOSBAQAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpCiAJCXJldHVybjsKIAorCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKKwkJaGRtaV9kZXRlY3RlZCA9IDE7CisKIAlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7CiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CkBAIC00ODcsMTMgKzQ5MywxMyBAQAogCQljYXNlIDE6CiAJCQlhcmdzLnYxLnVjTWlzYyA9IDA7CiAJCQlhcmdzLnYxLnVjQWN0aW9uID0gYWN0aW9uOwotCQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQorCQkJaWYgKGhkbWlfZGV0ZWN0ZWQpCiAJCQkJYXJncy52MS51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0hETUlfVFlQRTsKIAkJCWFyZ3MudjEudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOwogCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDApKQorCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmIEFUT01fUEFORUxfTUlTQ19EVUFMKQogCQkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfRFVBTDsKLQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfODg4UkdCKQogCQkJCQlhcmdzLnYxLnVjTWlzYyB8PSAoMSA8PCAxKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQpAQCAtNTEyLDcgKzUxOCw3IEBACiAJCQkJaWYgKGRpZy0+Y29oZXJlbnRfbW9kZSkKIAkJCQkJYXJncy52Mi51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0NPSEVSRU5UOwogCQkJfQotCQkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQorCQkJaWYgKGhkbWlfZGV0ZWN0ZWQpCiAJCQkJYXJncy52Mi51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0hETUlfVFlQRTsKIAkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOwogCQkJYXJncy52Mi51Y1RydW5jYXRlID0gMDsKQEAgLTUyMCwxOCArNTI2LDE4IEBACiAJCQlhcmdzLnYyLnVjVGVtcG9yYWwgPSAwOwogCQkJYXJncy52Mi51Y0ZSQyA9IDA7CiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgMCkpCisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDX0RVQUwpCiAJCQkJCWFyZ3MudjIudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19EVUFMOwotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDUpKSB7CisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDX1NQQVRJQUwpIHsKIAkJCQkJYXJncy52Mi51Y1NwYXRpYWwgPSBQQU5FTF9FTkNPREVSX1NQQVRJQUxfRElUSEVSX0VOOwotCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDXzg4OFJHQikKIAkJCQkJCWFyZ3MudjIudWNTcGF0aWFsIHw9IFBBTkVMX0VOQ09ERVJfU1BBVElBTF9ESVRIRVJfREVQVEg7CiAJCQkJfQotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDYpKSB7CisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDX1RFTVBPUkFMKSB7CiAJCQkJCWFyZ3MudjIudWNUZW1wb3JhbCA9IFBBTkVMX0VOQ09ERVJfVEVNUE9SQUxfRElUSEVSX0VOOwotCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDXzg4OFJHQikKIAkJCQkJCWFyZ3MudjIudWNUZW1wb3JhbCB8PSBQQU5FTF9FTkNPREVSX1RFTVBPUkFMX0RJVEhFUl9ERVBUSDsKLQkJCQkJaWYgKCgoZGlnLT5sdmRzX21pc2MgPj4gMikgJiAweDMpID09IDIpCisJCQkJCWlmICgoKGRpZy0+bHZkc19taXNjID4+IEFUT01fUEFORUxfTUlTQ19HUkVZX0xFVkVMX1NISUZUKSAmIDB4MykgPT0gMikKIAkJCQkJCWFyZ3MudjIudWNUZW1wb3JhbCB8PSBQQU5FTF9FTkNPREVSX1RFTVBPUkFMX0xFVkVMXzQ7CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTU1Miw3ICs1NTgsNyBAQAogCX0KIAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwotCisJcjYwMF9oZG1pX2VuYWJsZShlbmNvZGVyLCBoZG1pX2RldGVjdGVkKTsKIH0KIAogaW50CkBAIC04OTMsNyArODk5LDYgQEAKIAl9CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLQogfQogCiBzdGF0aWMgdm9pZApAQCAtMTE2Miw3ICsxMTY3LDYgQEAKIAl9CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLQogfQogCiBzdGF0aWMgdm9pZApAQCAtMTI2NSw2ICsxMjY5LDggQEAKIAkJYnJlYWs7CiAJfQogCWF0b21iaW9zX2FwcGx5X2VuY29kZXJfcXVpcmtzKGVuY29kZXIsIGFkanVzdGVkX21vZGUpOworCisJcjYwMF9oZG1pX3NldG1vZGUoZW5jb2RlciwgYWRqdXN0ZWRfbW9kZSk7CiB9CiAKIHN0YXRpYyBib29sCkBAIC0xNTEwLDQgKzE1MTYsNiBAQAogCQlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZyYWRlb25fYXRvbV9kaWdfaGVscGVyX2Z1bmNzKTsKIAkJYnJlYWs7CiAJfQorCisJcjYwMF9oZG1pX2luaXQoZW5jb2Rlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwppbmRleCBjYjRjZDk3Li40Y2RkOGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CiAJciA9IHJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmcmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnKTsKIAlpZiAocikgewotCQlEUk1fRVJST1IoIkZlbmNlIGZhaWxlZCB0byBnZXQgYSBzY3JhdGNoIHJlZ2lzdGVyLiIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZlbmNlIGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWdpc3RlclxuIik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAkJcmV0dXJuIHI7CiAJfQpAQCAtMzM1LDkgKzMzNSwxMCBAQAogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5mZW5jZV9kcnYuc2lnbmFsZWQpOwogCXJkZXYtPmZlbmNlX2Rydi5jb3VudF90aW1lb3V0ID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZGV2LT5mZW5jZV9kcnYucXVldWUpOworCXJkZXYtPmZlbmNlX2Rydi5pbml0aWFsaXplZCA9IHRydWU7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwogCWlmIChyYWRlb25fZGVidWdmc19mZW5jZV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgZmVuY2UgIVxuIik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmVuY2UgZGVidWdmcyBmaWxlIGNyZWF0aW9uIGZhaWxlZFxuIik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzQ2LDExICszNDcsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAorCWlmICghcmRldi0+ZmVuY2VfZHJ2LmluaXRpYWxpemVkKQorCQlyZXR1cm47CiAJd2FrZV91cF9hbGwoJnJkZXYtPmZlbmNlX2Rydi5xdWV1ZSk7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwotCURSTV9JTkZPKCJyYWRlb246IGZlbmNlIGZpbmFsaXplZFxuIik7CisJcmRldi0+ZmVuY2VfZHJ2LmluaXRpYWxpemVkID0gZmFsc2U7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwppbmRleCAyOTQ0NDg2Li42MGRmMmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwpAQCAtNjYsOCArNjYsOSBAQAogCX0KIAlyID0gcmFkZW9uX2JvX2NyZWF0ZShyZGV2LCBnb2JqLCBzaXplLCBrZXJuZWwsIGluaXRpYWxfZG9tYWluLCAmcm9iaik7CiAJaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgR0VNIG9iamVjdCAoJWQsICVkLCAldSlcbiIsCi0JCQkgIHNpemUsIGluaXRpYWxfZG9tYWluLCBhbGlnbm1lbnQpOworCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBHRU0gb2JqZWN0ICglZCwgJWQsICV1LCAlZClcbiIsCisJCQkJICBzaXplLCBpbml0aWFsX2RvbWFpbiwgYWxpZ25tZW50LCByKTsKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ29iaik7CiAJCW11dGV4X3VubG9jaygmcmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKQEAgLTM1MCw5ICszNTEsMTAgQEAKIAlyYm8gPSBnb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmJvLCBmYWxzZSk7CiAJaWYgKHVubGlrZWx5KHIgIT0gMCkpCi0JCXJldHVybiByOworCQlnb3RvIG91dDsKIAlyYWRlb25fYm9fZ2V0X3RpbGluZ19mbGFncyhyYm8sICZhcmdzLT50aWxpbmdfZmxhZ3MsICZhcmdzLT5waXRjaCk7CiAJcmFkZW9uX2JvX3VucmVzZXJ2ZShyYm8pOworb3V0OgogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jCmluZGV4IGExYmYxMWQuLjQ4YjdjZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYwpAQCAtOTIsOCArOTIsNyBAQAogCQkJICAmaW5pdC0+Z2FydF90ZXh0dXJlc19vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NQX0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9jbGVhcjMyIHsKQEAgLTEyNSw4ICsxMjQsNyBAQAogCQkJICAmY2xyLT5kZXB0aF9ib3hlcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fQ0xFQVIsICh1bnNpZ25lZCBsb25nKWNscik7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0NMRUFSLCAodW5zaWduZWQgbG9uZyljbHIpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3N0aXBwbGUzMiB7CkBAIC0xNDksOCArMTQ3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX1NUSVBQTEUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl90ZXhfaW1hZ2UzMiB7CkBAIC0yMDQsOCArMjAxLDcgQEAKIAkJCSAgJmltYWdlLT5kYXRhKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fVEVYVFVSRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdmVydGV4Ml8zMiB7CkBAIC0yMzgsOCArMjM0LDcgQEAKIAkJCSAgJnJlcXVlc3QtPnByaW0pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX1ZFUlRFWDIsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVgyLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9jbWRfYnVmZmVyMzIgewpAQCAtMjY4LDggKzI2Myw3IEBACiAJCQkgICZyZXF1ZXN0LT5ib3hlcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fQ01EQlVGLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fQ01EQlVGLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9nZXRwYXJhbTMyIHsKQEAgLTI5Myw4ICsyODcsNyBAQAogCQkJICAmcmVxdWVzdC0+dmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX21lbV9hbGxvYzMyIHsKQEAgLTMyMiw4ICszMTUsNyBAQAogCQkJICAmcmVxdWVzdC0+cmVnaW9uX29mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25faXJxX2VtaXQzMiB7CkBAIC0zNDUsOCArMzM3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmlycV9zZXEpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fSVJRX0VNSVQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiAvKiBUaGUgdHdvIDY0LWJpdCBhcmNoZXMgd2hlcmUgYWxpZ25vZih1NjQpPT00IGluIDMyLWJpdCBjb2RlICovCkBAIC0zNzIsOCArMzYzLDcgQEAKIAkJCSAgJnJlcXVlc3QtPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fU0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fU0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKIH0KICNlbHNlCiAjZGVmaW5lIGNvbXBhdF9yYWRlb25fY3Bfc2V0cGFyYW0gTlVMTApAQCAtNDEzLDEyICs0MDMsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUocmFkZW9uX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IHJhZGVvbl9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQzMSw5ICs0MTksNyBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UpCiAJCXJldHVybiBkcm1fY29tcGF0X2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAotCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwotCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKaW5kZXggYjgyZWRlOS4uY2MyNzQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCkBAIC00Myw4ICs0Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTEwNTksNyArMTA1OCw3IEBACiAJcmFkZW9uX3NldF9wbGwoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJcmFkZW9uX292ZXJzY2FuX3NldHVwKGNydGMsIGFkanVzdGVkX21vZGUpOwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7Ci0JCXJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpOworCQlyYWRlb25fbGVnYWN5X3JteF9tb2RlX3NldChjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAl9IGVsc2UgewogCQlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IFJNWF9PRkYpIHsKIAkJCS8qIEZJWE1FOiBvbmx5IGZpcnN0IGNydGMgaGFzIHJteCB3aGF0IHNob3VsZCB3ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwppbmRleCBkZjAwNTE1Li45ODE1MDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYwpAQCAtMjA3LDYgKzIwNyw4IEBACiAJCSphZGp1c3RlZF9tb2RlID0gKm5hdGl2ZV9tb2RlOwogCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OwogCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IG1vZGUtPnZkaXNwbGF5OworCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ID0gbW9kZS0+aGRpc3BsYXk7CisJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKIAkJYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZCA9IG1vZGVfaWQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggNDRkNGI2NS4uNDAyMzY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtODgsNiArODgsNyBAQAogCVRWX1NURF9TQ0FSVF9QQUwsCiAJVFZfU1REX1NFQ0FNLAogCVRWX1NURF9QQUxfQ04sCisJVFZfU1REX1BBTF9OLAogfTsKIAogLyogcmFkZW9uIGdwaW8tYmFzZWQgaTJjCkBAIC0zMzQsNiArMzM1LDkgQEAKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIAl2b2lkICplbmNfcHJpdjsKKwlpbnQgaGRtaV9vZmZzZXQ7CisJaW50IGhkbWlfYXVkaW9fd29ya2Fyb3VuZDsKKwlpbnQgaGRtaV9idWZmZXJfc3RhdHVzOwogfTsKIAogc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgewpAQCAtMzkyLDYgKzM5NiwxMSBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogfTsKIAorZXh0ZXJuIGVudW0gcmFkZW9uX3R2X3N0ZAorcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGVudW0gcmFkZW9uX3R2X3N0ZAorcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogZXh0ZXJuIHZvaWQgcmFkZW9uX2Nvbm5lY3Rvcl9ob3RwbHVnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogZXh0ZXJuIGJvb2wgcmFkZW9uX2RwX25lZWRzX2xpbmtfdHJhaW4oc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOwogZXh0ZXJuIGludCByYWRlb25fZHBfbW9kZV92YWxpZF9oZWxwZXIoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IDU0NGUxOGYuLmQ5ZmZlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC01Niw2ICs1NiwxMyBAQAogCWtmcmVlKGJvKTsKIH0KIAorYm9vbCByYWRlb25fdHRtX2JvX2lzX3JhZGVvbl9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQoreworCWlmIChiby0+ZGVzdHJveSA9PSAmcmFkZW9uX3R0bV9ib19kZXN0cm95KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oc3RydWN0IHJhZGVvbl9ibyAqcmJvLCB1MzIgZG9tYWluKQogewogCXUzMiBjID0gMDsKQEAgLTcxLDYgKzc4LDggQEAKIAkJcmJvLT5wbGFjZW1lbnRzW2MrK10gPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfVFQ7CiAJaWYgKGRvbWFpbiAmIFJBREVPTl9HRU1fRE9NQUlOX0NQVSkKIAkJcmJvLT5wbGFjZW1lbnRzW2MrK10gPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNOworCWlmICghYykKKwkJcmJvLT5wbGFjZW1lbnRzW2MrK10gPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNOwogCXJiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgPSBjOwogCXJiby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IGM7CiB9CkBAIC00ODEsMTQgKzQ5MCwyMCBAQAogfQogCiB2b2lkIHJhZGVvbl9ib19tb3ZlX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJCXN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQorCQkJICAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCiB7Ci0Jc3RydWN0IHJhZGVvbl9ibyAqcmJvID0gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3QgcmFkZW9uX2JvLCB0Ym8pOworCXN0cnVjdCByYWRlb25fYm8gKnJibzsKKwlpZiAoIXJhZGVvbl90dG1fYm9faXNfcmFkZW9uX2JvKGJvKSkKKwkJcmV0dXJuOworCXJibyA9IGNvbnRhaW5lcl9vZihibywgc3RydWN0IHJhZGVvbl9ibywgdGJvKTsKIAlyYWRlb25fYm9fY2hlY2tfdGlsaW5nKHJibywgMCwgMSk7CiB9CiAKIHZvaWQgcmFkZW9uX2JvX2ZhdWx0X3Jlc2VydmVfbm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCiB7Ci0Jc3RydWN0IHJhZGVvbl9ibyAqcmJvID0gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3QgcmFkZW9uX2JvLCB0Ym8pOworCXN0cnVjdCByYWRlb25fYm8gKnJibzsKKwlpZiAoIXJhZGVvbl90dG1fYm9faXNfcmFkZW9uX2JvKGJvKSkKKwkJcmV0dXJuOworCXJibyA9IGNvbnRhaW5lcl9vZihibywgc3RydWN0IHJhZGVvbl9ibywgdGJvKTsKIAlyYWRlb25fYm9fY2hlY2tfdGlsaW5nKHJibywgMCwgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oCmluZGV4IGY2YjY5YzIuLmEwMmYxODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oCkBAIC01OSwxOSArNTksMTcgQEAKICAqCiAgKiBSZXR1cm5zOgogICogLUVCVVNZOiBidWZmZXIgaXMgYnVzeSBhbmQgQG5vX3dhaXQgaXMgdHJ1ZQotICogLUVSRVNUQVJUOiBBIHdhaXQgZm9yIHRoZSBidWZmZXIgdG8gYmVjb21lIHVucmVzZXJ2ZWQgd2FzIGludGVycnVwdGVkIGJ5CisgKiAtRVJFU1RBUlRTWVM6IEEgd2FpdCBmb3IgdGhlIGJ1ZmZlciB0byBiZWNvbWUgdW5yZXNlcnZlZCB3YXMgaW50ZXJydXB0ZWQgYnkKICAqIGEgc2lnbmFsLiBSZWxlYXNlIGFsbCBidWZmZXIgcmVzZXJ2YXRpb25zIGFuZCByZXR1cm4gdG8gdXNlci1zcGFjZS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgcmFkZW9uX2JvX3Jlc2VydmUoc3RydWN0IHJhZGVvbl9ibyAqYm8sIGJvb2wgbm9fd2FpdCkKIHsKIAlpbnQgcjsKIAotcmV0cnk6CiAJciA9IHR0bV9ib19yZXNlcnZlKCZiby0+dGJvLCB0cnVlLCBub193YWl0LCBmYWxzZSwgMCk7CiAJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKLQkJaWYgKHIgPT0gLUVSRVNUQVJUKQotCQkJZ290byByZXRyeTsKLQkJZGV2X2Vycihiby0+cmRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBmYWlsZWRcbiIsIGJvKTsKKwkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQorCQkJZGV2X2Vycihiby0+cmRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBmYWlsZWRcbiIsIGJvKTsKIAkJcmV0dXJuIHI7CiAJfQogCXJldHVybiAwOwpAQCAtMTI1LDEyICsxMjMsMTAgQEAKIHsKIAlpbnQgcjsKIAotcmV0cnk6CiAJciA9IHR0bV9ib19yZXNlcnZlKCZiby0+dGJvLCB0cnVlLCBub193YWl0LCBmYWxzZSwgMCk7CiAJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKLQkJaWYgKHIgPT0gLUVSRVNUQVJUKQotCQkJZ290byByZXRyeTsKLQkJZGV2X2Vycihiby0+cmRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBmYWlsZWQgZm9yIHdhaXRcbiIsIGJvKTsKKwkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQorCQkJZGV2X2Vycihiby0+cmRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBmYWlsZWQgZm9yIHdhaXRcbiIsIGJvKTsKIAkJcmV0dXJuIHI7CiAJfQogCXNwaW5fbG9jaygmYm8tPnRiby5sb2NrKTsKQEAgLTE0MCw4ICsxMzYsNiBAQAogCQlyID0gdHRtX2JvX3dhaXQoJmJvLT50Ym8sIHRydWUsIHRydWUsIG5vX3dhaXQpOwogCXNwaW5fdW5sb2NrKCZiby0+dGJvLmxvY2spOwogCXR0bV9ib191bnJlc2VydmUoJmJvLT50Ym8pOwotCWlmICh1bmxpa2VseShyID09IC1FUkVTVEFSVCkpCi0JCWdvdG8gcmV0cnk7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCmluZGV4IDM0YjA4ZDMuLjhiY2U2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtNDQsOCArNDQsMTEgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlzZXFfcHJpbnRmKG0sICJlbmdpbmUgY2xvY2s6ICV1MCBrSHpcbiIsIHJhZGVvbl9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpKTsKLQlzZXFfcHJpbnRmKG0sICJtZW1vcnkgY2xvY2s6ICV1MCBrSHpcbiIsIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpKTsKKwlzZXFfcHJpbnRmKG0sICJkZWZhdWx0IGVuZ2luZSBjbG9jazogJXUwIGtIelxuIiwgcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrKTsKKwlzZXFfcHJpbnRmKG0sICJjdXJyZW50IGVuZ2luZSBjbG9jazogJXUwIGtIelxuIiwgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikpOworCXNlcV9wcmludGYobSwgImRlZmF1bHQgbWVtb3J5IGNsb2NrOiAldTAga0h6XG4iLCByZGV2LT5jbG9jay5kZWZhdWx0X21jbGspOworCWlmIChyZGV2LT5hc2ljLT5nZXRfbWVtb3J5X2Nsb2NrKQorCQlzZXFfcHJpbnRmKG0sICJjdXJyZW50IG1lbW9yeSBjbG9jazogJXUwIGtIelxuIiwgcmFkZW9uX2dldF9tZW1vcnlfY2xvY2socmRldikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKaW5kZXggMzkxYzk3My4uOWY1ZTJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwpAQCAtNDIsOCArNDIsOCBAQAogCS8qIE51bWJlciBvZiB0ZXN0cyA9CiAJICogKFRvdGFsIEdUVCAtIElCIHBvb2wgLSB3cml0ZWJhY2sgcGFnZSAtIHJpbmcgYnVmZmVyKSAvIHRlc3Qgc2l6ZQogCSAqLwotCW4gPSAocmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQgLSBSQURFT05fR1BVX1BBR0VfU0laRSAtCi0JICAgICByZGV2LT5jcC5yaW5nX3NpemUpIC8gc2l6ZTsKKwluID0gKCh1MzIpKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gUkFERU9OX0dQVV9QQUdFX1NJWkUgLQorCSAgICAgcmRldi0+Y3AucmluZ19zaXplKSkgLyBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwogCWlmICghZ3R0X29iaikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCA1YTE5ZDUyLi4zYjBjMDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtMjAwLDcgKzIwMCwxOSBAQAogc3RhdGljIHZvaWQgcmFkZW9uX2V2aWN0X2ZsYWdzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCQkJc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2JvICpyYm8gPSBjb250YWluZXJfb2YoYm8sIHN0cnVjdCByYWRlb25fYm8sIHRibyk7CisJc3RydWN0IHJhZGVvbl9ibyAqcmJvOworCXN0YXRpYyB1MzIgcGxhY2VtZW50cyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfCBUVE1fUExfRkxBR19TWVNURU07CisKKwlpZiAoIXJhZGVvbl90dG1fYm9faXNfcmFkZW9uX2JvKGJvKSkgeworCQlwbGFjZW1lbnQtPmZwZm4gPSAwOworCQlwbGFjZW1lbnQtPmxwZm4gPSAwOworCQlwbGFjZW1lbnQtPnBsYWNlbWVudCA9ICZwbGFjZW1lbnRzOworCQlwbGFjZW1lbnQtPmJ1c3lfcGxhY2VtZW50ID0gJnBsYWNlbWVudHM7CisJCXBsYWNlbWVudC0+bnVtX3BsYWNlbWVudCA9IDE7CisJCXBsYWNlbWVudC0+bnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKKwkJcmV0dXJuOworCX0KKwlyYm8gPSBjb250YWluZXJfb2YoYm8sIHN0cnVjdCByYWRlb25fYm8sIHRibyk7CiAJc3dpdGNoIChiby0+bWVtLm1lbV90eXBlKSB7CiAJY2FzZSBUVE1fUExfVlJBTToKIAkJcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4ocmJvLCBSQURFT05fR0VNX0RPTUFJTl9HVFQpOwpAQCAtNDgyLDYgKzQ5NCw3IEBACiAJCURSTV9FUlJPUigiZmFpbGVkIGluaXRpYWxpemluZyBidWZmZXIgb2JqZWN0IGRyaXZlciglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQorCXJkZXYtPm1tYW4uaW5pdGlhbGl6ZWQgPSB0cnVlOwogCXIgPSB0dG1fYm9faW5pdF9tbSgmcmRldi0+bW1hbi5iZGV2LCBUVE1fUExfVlJBTSwKIAkJCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlpZiAocikgewpAQCAtNTI5LDYgKzU0Miw4IEBACiB7CiAJaW50IHI7CiAKKwlpZiAoIXJkZXYtPm1tYW4uaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKIAlpZiAocmRldi0+c3RvbGxlbl92Z2FfbWVtb3J5KSB7CiAJCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5zdG9sbGVuX3ZnYV9tZW1vcnksIGZhbHNlKTsKIAkJaWYgKHIgPT0gMCkgewpAQCAtNTQyLDYgKzU1Nyw3IEBACiAJdHRtX2JvX2RldmljZV9yZWxlYXNlKCZyZGV2LT5tbWFuLmJkZXYpOwogCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX3R0bV9nbG9iYWxfZmluaShyZGV2KTsKKwlyZGV2LT5tbWFuLmluaXRpYWxpemVkID0gZmFsc2U7CiAJRFJNX0lORk8oInJhZGVvbjogdHRtIGZpbmFsaXplZFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCBjMWZjZGRkLi4zNjg0MTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC00OTcsNiArNDk3LDggQEAKIAogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXJzNDAwX3ZyYW1faW5mbyhyZGV2KTsKIAkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IGZiYjAzNTcuLjNiY2I2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTg5Miw2ICs4OTIsMTQgQEAKIAl9CiAJcnY3NzBfZ3B1X2luaXQocmRldik7CiAKKwlpZiAoIXJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKSB7CisJCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgYmxpdHRlciAoJWQpLlxuIiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKwogCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOwogCWlmICh1bmxpa2VseShyICE9IDApKQogCQlyZXR1cm4gcjsKQEAgLTEwNTEsMTIgKzEwNTksNiBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIGJsaXR0ZXIgKCVkKS5cbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKIAlyID0gcnY3NzBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYwppbmRleCBlZWU1MmFhLi4wMjFkZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuYwpAQCAtNTAsNyArNTAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jCmluZGV4IGU3MjVjYzAuLjRmZDFmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5jCkBAIC04MCw3ICs4MCw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSBkcm1fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGRmeC90ZGZ4X2Rydi5jCmluZGV4IDAxMmZmMmUuLmVjNWE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYwpAQCAtNDgsNyArNDgsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwppbmRleCAxZmJiMmVlLi4yOTIwZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKQEAgLTcxLDM0ICs3MSwzNCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9kZWJ1ZyhzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiwKLQkJCQkJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4pCitzdGF0aWMgdm9pZCB0dG1fbWVtX3R5cGVfZGVidWcoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIGludCBtZW1fdHlwZSkKIHsKKwlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbWVtX3R5cGVdOworCiAJcHJpbnRrKEtFUk5fRVJSIFRUTV9QRlggIiAgICBoYXNfdHlwZTogJWRcbiIsIG1hbi0+aGFzX3R5cGUpOwogCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICIgICAgdXNlX3R5cGU6ICVkXG4iLCBtYW4tPnVzZV90eXBlKTsKIAlwcmludGsoS0VSTl9FUlIgVFRNX1BGWCAiICAgIGZsYWdzOiAweCUwOFhcbiIsIG1hbi0+ZmxhZ3MpOwogCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICIgICAgZ3B1X29mZnNldDogMHglMDhsWFxuIiwgbWFuLT5ncHVfb2Zmc2V0KTsKIAlwcmludGsoS0VSTl9FUlIgVFRNX1BGWCAiICAgIGlvX29mZnNldDogMHglMDhsWFxuIiwgbWFuLT5pb19vZmZzZXQpOwogCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICIgICAgaW9fc2l6ZTogJWxkXG4iLCBtYW4tPmlvX3NpemUpOwotCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICIgICAgc2l6ZTogJWxkXG4iLCAodW5zaWduZWQgbG9uZyltYW4tPnNpemUpOworCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICIgICAgc2l6ZTogJWxsdVxuIiwgbWFuLT5zaXplKTsKIAlwcmludGsoS0VSTl9FUlIgVFRNX1BGWCAiICAgIGF2YWlsYWJsZV9jYWNoaW5nOiAweCUwOFhcbiIsCiAJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcpOwogCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICIgICAgZGVmYXVsdF9jYWNoaW5nOiAweCUwOFhcbiIsCiAJCW1hbi0+ZGVmYXVsdF9jYWNoaW5nKTsKLQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKLQlkcm1fbW1fZGVidWdfdGFibGUoJm1hbi0+bWFuYWdlciwgVFRNX1BGWCk7Ci0Jc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwlpZiAobWVtX3R5cGUgIT0gVFRNX1BMX1NZU1RFTSkgeworCQlzcGluX2xvY2soJmJkZXYtPmdsb2ItPmxydV9sb2NrKTsKKwkJZHJtX21tX2RlYnVnX3RhYmxlKCZtYW4tPm1hbmFnZXIsIFRUTV9QRlgpOworCQlzcGluX3VubG9jaygmYmRldi0+Z2xvYi0+bHJ1X2xvY2spOworCX0KIH0KIAogc3RhdGljIHZvaWQgdHRtX2JvX21lbV9zcGFjZV9kZWJ1ZyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJCQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCAqcGxhY2VtZW50KQogewotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7Ci0Jc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKLQlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbjsKIAlpbnQgaSwgcmV0LCBtZW1fdHlwZTsKIAotCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICJObyBzcGFjZSBmb3IgJXAgKCVsZCBwYWdlcywgJWxkSywgJWxkTSlcbiIsCisJcHJpbnRrKEtFUk5fRVJSIFRUTV9QRlggIk5vIHNwYWNlIGZvciAlcCAoJWx1IHBhZ2VzLCAlbHVLLCAlbHVNKVxuIiwKIAkJYm8sIGJvLT5tZW0ubnVtX3BhZ2VzLCBiby0+bWVtLnNpemUgPj4gMTAsCiAJCWJvLT5tZW0uc2l6ZSA+PiAyMCk7CiAJZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudC0+bnVtX3BsYWNlbWVudDsgaSsrKSB7CkBAIC0xMDYsMTAgKzEwNiw5IEBACiAJCQkJCQkmbWVtX3R5cGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuOwotCQltYW4gPSAmYmRldi0+bWFuW21lbV90eXBlXTsKIAkJcHJpbnRrKEtFUk5fRVJSIFRUTV9QRlggIiAgcGxhY2VtZW50WyVkXT0weCUwOFggKCVkKVxuIiwKIAkJCWksIHBsYWNlbWVudC0+cGxhY2VtZW50W2ldLCBtZW1fdHlwZSk7Ci0JCXR0bV9tZW1fdHlwZV9tYW5hZ2VyX2RlYnVnKGdsb2IsIG1hbik7CisJCXR0bV9tZW1fdHlwZV9kZWJ1Zyhiby0+YmRldiwgbWVtX3R5cGUpOwogCX0KIH0KIApAQCAtNDY1LDYgKzQ2NCw4IEBACiAJCXNwaW5fdW5sb2NrKCZiby0+bG9jayk7CiAKIAkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCXB1dF9jb3VudCA9IHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOworCiAJCXJldCA9IHR0bV9ib19yZXNlcnZlX2xvY2tlZChibywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7CiAJCUJVR19PTihyZXQpOwogCQlpZiAoYm8tPnR0bSkKQEAgLTQ3MiwyMCArNDczLDE5IEBACiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZiby0+ZGRlc3Ryb3kpKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZiby0+ZGRlc3Ryb3kpOwotCQkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKKwkJCSsrcHV0X2NvdW50OwogCQl9CiAJCWlmIChiby0+bWVtLm1tX25vZGUpIHsKIAkJCWJvLT5tZW0ubW1fbm9kZS0+cHJpdmF0ZSA9IE5VTEw7CiAJCQlkcm1fbW1fcHV0X2Jsb2NrKGJvLT5tZW0ubW1fbm9kZSk7CiAJCQliby0+bWVtLm1tX25vZGUgPSBOVUxMOwogCQl9Ci0JCXB1dF9jb3VudCA9IHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwogCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCiAJCWF0b21pY19zZXQoJmJvLT5yZXNlcnZlZCwgMCk7CiAKIAkJd2hpbGUgKHB1dF9jb3VudC0tKQotCQkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWxlYXNlX2xpc3QpOworCQkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC02ODQsMTkgKzY4NCw0NSBAQAogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87CiAJaW50IHJldCwgcHV0X2NvdW50ID0gMDsKIAorcmV0cnk6CiAJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJm1hbi0+bHJ1KSkgeworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwogCWJvID0gbGlzdF9maXJzdF9lbnRyeSgmbWFuLT5scnUsIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCwgbHJ1KTsKIAlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7Ci0JcmV0ID0gdHRtX2JvX3Jlc2VydmVfbG9ja2VkKGJvLCBpbnRlcnJ1cHRpYmxlLCBub193YWl0LCBmYWxzZSwgMCk7Ci0JaWYgKGxpa2VseShyZXQgPT0gMCkpCi0JCXB1dF9jb3VudCA9IHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOworCisJcmV0ID0gdHRtX2JvX3Jlc2VydmVfbG9ja2VkKGJvLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIDApOworCisJaWYgKHVubGlrZWx5KHJldCA9PSAtRUJVU1kpKSB7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCWlmIChsaWtlbHkoIW5vX3dhaXQpKQorCQkJcmV0ID0gdHRtX2JvX3dhaXRfdW5yZXNlcnZlZChibywgaW50ZXJydXB0aWJsZSk7CisKKwkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWxlYXNlX2xpc3QpOworCisJCS8qKgorCQkgKiBXZSAqbmVlZCogdG8gcmV0cnkgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBscnUgbG9jay4KKwkJICovCisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisJCWdvdG8gcmV0cnk7CisJfQorCisJcHV0X2NvdW50ID0gdHRtX2JvX2RlbF9mcm9tX2xydShibyk7CiAJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OworCisJQlVHX09OKHJldCAhPSAwKTsKKwogCXdoaWxlIChwdXRfY291bnQtLSkKIAkJa3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWZfYnVnKTsKKwogCXJldCA9IHR0bV9ib19ldmljdChibywgaW50ZXJydXB0aWJsZSwgbm9fd2FpdCk7CiAJdHRtX2JvX3VucmVzZXJ2ZShibyk7CisKIAlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTg0OSw3ICs4NzUsNyBAQAogCWludCBpLCByZXQ7CiAKIAltZW0tPm1tX25vZGUgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPD0gcGxhY2VtZW50LT5udW1fcGxhY2VtZW50OyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgcGxhY2VtZW50LT5udW1fcGxhY2VtZW50OyArK2kpIHsKIAkJcmV0ID0gdHRtX21lbV90eXBlX2Zyb21fZmxhZ3MocGxhY2VtZW50LT5wbGFjZW1lbnRbaV0sCiAJCQkJCQkmbWVtX3R5cGUpOwogCQlpZiAocmV0KQpAQCAtOTAwLDggKzkyNiw4IEBACiAJaWYgKCF0eXBlX2ZvdW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPD0gcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQ7ICsraSkgewotCQlyZXQgPSB0dG1fbWVtX3R5cGVfZnJvbV9mbGFncyhwbGFjZW1lbnQtPnBsYWNlbWVudFtpXSwKKwlmb3IgKGkgPSAwOyBpIDwgcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQ7ICsraSkgeworCQlyZXQgPSB0dG1fbWVtX3R5cGVfZnJvbV9mbGFncyhwbGFjZW1lbnQtPmJ1c3lfcGxhY2VtZW50W2ldLAogCQkJCQkJJm1lbV90eXBlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC05MTEsNyArOTM3LDcgQEAKIAkJaWYgKCF0dG1fYm9fbXRfY29tcGF0aWJsZShtYW4sCiAJCQkJCQliby0+dHlwZSA9PSB0dG1fYm9fdHlwZV91c2VyLAogCQkJCQkJbWVtX3R5cGUsCi0JCQkJCQlwbGFjZW1lbnQtPnBsYWNlbWVudFtpXSwKKwkJCQkJCXBsYWNlbWVudC0+YnVzeV9wbGFjZW1lbnRbaV0sCiAJCQkJCQkmY3VyX2ZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCkBAIC05MjEsNyArOTQ3LDcgQEAKIAkJICogVXNlIHRoZSBhY2Nlc3MgYW5kIG90aGVyIG5vbi1tYXBwaW5nLXJlbGF0ZWQgZmxhZyBiaXRzIGZyb20KIAkJICogdGhlIG1lbW9yeSBwbGFjZW1lbnQgZmxhZ3MgdG8gdGhlIGN1cnJlbnQgZmxhZ3MKIAkJICovCi0JCXR0bV9mbGFnX21hc2tlZCgmY3VyX2ZsYWdzLCBwbGFjZW1lbnQtPnBsYWNlbWVudFtpXSwKKwkJdHRtX2ZsYWdfbWFza2VkKCZjdXJfZmxhZ3MsIHBsYWNlbWVudC0+YnVzeV9wbGFjZW1lbnRbaV0sCiAJCQkJflRUTV9QTF9NQVNLX01FTVRZUEUpOwogCiAJCXJldCA9IHR0bV9ib19tZW1fZm9yY2Vfc3BhY2UoYm8sIG1lbV90eXBlLCBwbGFjZW1lbnQsIG1lbSwKQEAgLTExMTUsNiArMTE0MSw3IEBACiAJYm8tPmdsb2IgPSBiZGV2LT5nbG9iOwogCWJvLT50eXBlID0gdHlwZTsKIAliby0+bnVtX3BhZ2VzID0gbnVtX3BhZ2VzOworCWJvLT5tZW0uc2l6ZSA9IG51bV9wYWdlcyA8PCBQQUdFX1NISUZUOwogCWJvLT5tZW0ubWVtX3R5cGUgPSBUVE1fUExfU1lTVEVNOwogCWJvLT5tZW0ubnVtX3BhZ2VzID0gYm8tPm51bV9wYWdlczsKIAliby0+bWVtLm1tX25vZGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKaW5kZXggNjA5YTg1YS4uNjY4ZGJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlkcml2ZXIgPSBiby0+YmRldi0+ZHJpdmVyOwotCWlmICh1bmxpa2VseShkcml2ZXItPnZlcmlmeV9hY2Nlc3MpKSB7CisJaWYgKHVubGlrZWx5KCFkcml2ZXItPnZlcmlmeV9hY2Nlc3MpKSB7CiAJCXJldCA9IC1FUEVSTTsKIAkJZ290byBvdXRfdW5yZWY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCBiYzJmNTE4Li43YTFiMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtNTgsNyArNTgsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGI4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWcKQEAgLTAsMCArMSwxMyBAQAorY29uZmlnIERSTV9WTVdHRlgKKwl0cmlzdGF0ZSAiRFJNIGRyaXZlciBmb3IgVk13YXJlIFZpcnR1YWwgR1BVIgorCWRlcGVuZHMgb24gRFJNICYmIFBDSQorCXNlbGVjdCBGQl9ERUZFUlJFRF9JTworCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRFJNX1RUTQorCWhlbHAKKwkgIEtNUyBlbmFibGVkIERSTSBkcml2ZXIgZm9yIFNWR0EyIHZpcnR1YWwgaGFyZHdhcmUuCisKKwkgIElmIHVuc3VyZSBzYXkgbi4gVGhlIGNvbXBpbGVkIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgdm13Z2Z4LmtvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTNjYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKworY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KKwordm13Z2Z4LXkgOj0gdm13Z2Z4X2V4ZWNidWYubyB2bXdnZnhfZ21yLm8gdm13Z2Z4X2ttcy5vIHZtd2dmeF9kcnYubyBcCisJICAgIHZtd2dmeF9mYi5vIHZtd2dmeF9pb2N0bC5vIHZtd2dmeF9yZXNvdXJjZS5vIHZtd2dmeF9idWZmZXIubyBcCisJICAgIHZtd2dmeF9maWZvLm8gdm13Z2Z4X2lycS5vIHZtd2dmeF9sZHUubyB2bXdnZnhfdHRtX2dsdWUubyBcCisJICAgIHZtd2dmeF9vdmVybGF5Lm8KKworb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpIDo9IHZtd2dmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3N2Z2EzZF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvc3ZnYTNkX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Y2I0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3N2Z2EzZF9yZWcuaApAQCAtMCwwICsxLDE3OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA5IFZNd2FyZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorICogbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCisgKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHN2Z2EzZF9yZWcuaCAtLQorICoKKyAqICAgICAgIFNWR0EgM0QgaGFyZHdhcmUgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9TVkdBM0RfUkVHX0hfCisjZGVmaW5lIF9TVkdBM0RfUkVHX0hfCisKKyNpbmNsdWRlICJzdmdhX3JlZy5oIgorCisKKy8qCisgKiAzRCBIYXJkd2FyZSBWZXJzaW9uCisgKgorICogICBUaGUgaGFyZHdhcmUgdmVyc2lvbiBpcyBzdG9yZWQgaW4gdGhlIFNWR0FfRklGT18zRF9IV1ZFUlNJT04gZmlmbworICogICByZWdpc3Rlci4gICBJcyBzZXQgYnkgdGhlIGhvc3QgYW5kIHJlYWQgYnkgdGhlIGd1ZXN0LiAgVGhpcyBsZXRzCisgKiAgIHVzIG1ha2UgbmV3IGd1ZXN0IGRyaXZlcnMgd2hpY2ggYXJlIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGggb2xkCisgKiAgIFNWR0EgaGFyZHdhcmUgcmV2aXNpb25zLiAgSXQgZG9lcyBub3QgbGV0IHVzIHN1cHBvcnQgb2xkIGd1ZXN0CisgKiAgIGRyaXZlcnMuICBHb29kIGVub3VnaCBmb3Igbm93LgorICoKKyAqLworCisjZGVmaW5lIFNWR0EzRF9NQUtFX0hXVkVSU0lPTihtYWpvciwgbWlub3IpICAgICAgKCgobWFqb3IpIDw8IDE2KSB8ICgobWlub3IpICYgMHhGRikpCisjZGVmaW5lIFNWR0EzRF9NQUpPUl9IV1ZFUlNJT04odmVyc2lvbikgICAgICAgICAgKCh2ZXJzaW9uKSA+PiAxNikKKyNkZWZpbmUgU1ZHQTNEX01JTk9SX0hXVkVSU0lPTih2ZXJzaW9uKSAgICAgICAgICAoKHZlcnNpb24pICYgMHhGRikKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9IV1ZFUlNJT05fV1M1X1JDMSAgID0gU1ZHQTNEX01BS0VfSFdWRVJTSU9OKDAsIDEpLAorICAgU1ZHQTNEX0hXVkVSU0lPTl9XUzVfUkMyICAgPSBTVkdBM0RfTUFLRV9IV1ZFUlNJT04oMCwgMiksCisgICBTVkdBM0RfSFdWRVJTSU9OX1dTNTFfUkMxICA9IFNWR0EzRF9NQUtFX0hXVkVSU0lPTigwLCAzKSwKKyAgIFNWR0EzRF9IV1ZFUlNJT05fV1M2X0IxICAgID0gU1ZHQTNEX01BS0VfSFdWRVJTSU9OKDEsIDEpLAorICAgU1ZHQTNEX0hXVkVSU0lPTl9GVVNJT05fMTEgPSBTVkdBM0RfTUFLRV9IV1ZFUlNJT04oMSwgNCksCisgICBTVkdBM0RfSFdWRVJTSU9OX1dTNjVfQjEgICA9IFNWR0EzRF9NQUtFX0hXVkVSU0lPTigyLCAwKSwKKyAgIFNWR0EzRF9IV1ZFUlNJT05fQ1VSUkVOVCAgID0gU1ZHQTNEX0hXVkVSU0lPTl9XUzY1X0IxLAorfSBTVkdBM2RIYXJkd2FyZVZlcnNpb247CisKKy8qCisgKiBHZW5lcmljIFR5cGVzCisgKi8KKwordHlwZWRlZiB1aW50MzIgU1ZHQTNkQm9vbDsgLyogMzItYml0IEJvb2wgZGVmaW5pdGlvbiAqLworI2RlZmluZSBTVkdBM0RfTlVNX0NMSVBQTEFORVMgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBTVkdBM0RfTUFYX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUUyAgOAorCisKKy8qCisgKiBTdXJmYWNlIGZvcm1hdHMuCisgKgorICogSWYgeW91IG1vZGlmeSB0aGlzIGxpc3QsIGJlIHN1cmUgdG8ga2VlcCBHTFV0aWwuYyBpbiBzeW5jLiBJdAorICogaW5jbHVkZXMgdGhlIGludGVybmFsIGZvcm1hdCBkZWZpbml0aW9uIG9mIGVhY2ggc3VyZmFjZSBpbgorICogR0xVdGlsX0NvbnZlcnRTdXJmYWNlRm9ybWF0LCBhbmQgaXQgY29udGFpbnMgYSB0YWJsZSBvZgorICogaHVtYW4tcmVhZGFibGUgbmFtZXMgaW4gR0xVdGlsX0dldEZvcm1hdE5hbWUuCisgKi8KKwordHlwZWRlZiBlbnVtIFNWR0EzZFN1cmZhY2VGb3JtYXQgeworICAgU1ZHQTNEX0ZPUk1BVF9JTlZBTElEID0gMCwKKworICAgU1ZHQTNEX1g4UjhHOEI4ICAgICAgID0gMSwKKyAgIFNWR0EzRF9BOFI4RzhCOCAgICAgICA9IDIsCisKKyAgIFNWR0EzRF9SNUc2QjUgICAgICAgICA9IDMsCisgICBTVkdBM0RfWDFSNUc1QjUgICAgICAgPSA0LAorICAgU1ZHQTNEX0ExUjVHNUI1ICAgICAgID0gNSwKKyAgIFNWR0EzRF9BNFI0RzRCNCAgICAgICA9IDYsCisKKyAgIFNWR0EzRF9aX0QzMiAgICAgICAgICA9IDcsCisgICBTVkdBM0RfWl9EMTYgICAgICAgICAgPSA4LAorICAgU1ZHQTNEX1pfRDI0UzggICAgICAgID0gOSwKKyAgIFNWR0EzRF9aX0QxNVMxICAgICAgICA9IDEwLAorCisgICBTVkdBM0RfTFVNSU5BTkNFOCAgICAgICAgICAgID0gMTEsCisgICBTVkdBM0RfTFVNSU5BTkNFNF9BTFBIQTQgICAgID0gMTIsCisgICBTVkdBM0RfTFVNSU5BTkNFMTYgICAgICAgICAgID0gMTMsCisgICBTVkdBM0RfTFVNSU5BTkNFOF9BTFBIQTggICAgID0gMTQsCisKKyAgIFNWR0EzRF9EWFQxICAgICAgICAgICA9IDE1LAorICAgU1ZHQTNEX0RYVDIgICAgICAgICAgID0gMTYsCisgICBTVkdBM0RfRFhUMyAgICAgICAgICAgPSAxNywKKyAgIFNWR0EzRF9EWFQ0ICAgICAgICAgICA9IDE4LAorICAgU1ZHQTNEX0RYVDUgICAgICAgICAgID0gMTksCisKKyAgIFNWR0EzRF9CVU1QVThWOCAgICAgICA9IDIwLAorICAgU1ZHQTNEX0JVTVBMNlY1VTUgICAgID0gMjEsCisgICBTVkdBM0RfQlVNUFg4TDhWOFU4ICAgPSAyMiwKKyAgIFNWR0EzRF9CVU1QTDhWOFU4ICAgICA9IDIzLAorCisgICBTVkdBM0RfQVJHQl9TMTBFNSAgICAgPSAyNCwgICAvKiAxNi1iaXQgZmxvYXRpbmctcG9pbnQgQVJHQiAqLworICAgU1ZHQTNEX0FSR0JfUzIzRTggICAgID0gMjUsICAgLyogMzItYml0IGZsb2F0aW5nLXBvaW50IEFSR0IgKi8KKworICAgU1ZHQTNEX0EyUjEwRzEwQjEwICAgID0gMjYsCisKKyAgIC8qIHNpZ25lZCBmb3JtYXRzICovCisgICBTVkdBM0RfVjhVOCAgICAgICAgICAgPSAyNywKKyAgIFNWR0EzRF9ROFc4VjhVOCAgICAgICA9IDI4LAorICAgU1ZHQTNEX0N4VjhVOCAgICAgICAgID0gMjksCisKKyAgIC8qIG1peGVkIGZvcm1hdHMgKi8KKyAgIFNWR0EzRF9YOEw4VjhVOCAgICAgICA9IDMwLAorICAgU1ZHQTNEX0EyVzEwVjEwVTEwICAgID0gMzEsCisKKyAgIFNWR0EzRF9BTFBIQTggICAgICAgICA9IDMyLAorCisgICAvKiBTaW5nbGUtIGFuZCBkdWFsLWNvbXBvbmVudCBmbG9hdGluZyBwb2ludCBmb3JtYXRzICovCisgICBTVkdBM0RfUl9TMTBFNSAgICAgICAgPSAzMywKKyAgIFNWR0EzRF9SX1MyM0U4ICAgICAgICA9IDM0LAorICAgU1ZHQTNEX1JHX1MxMEU1ICAgICAgID0gMzUsCisgICBTVkdBM0RfUkdfUzIzRTggICAgICAgPSAzNiwKKworICAgLyoKKyAgICAqIEFueSBzdXJmYWNlIGNhbiBiZSB1c2VkIGFzIGEgYnVmZmVyIG9iamVjdCwgYnV0IFNWR0EzRF9CVUZGRVIgaXMKKyAgICAqIHRoZSBtb3N0IGVmZmljaWVudCBmb3JtYXQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgbmV3IHN1cmZhY2VzCisgICAgKiBleHByZXNzbHkgZm9yIGluZGV4IG9yIHZlcnRleCBkYXRhLgorICAgICovCisgICBTVkdBM0RfQlVGRkVSICAgICAgICAgPSAzNywKKworICAgU1ZHQTNEX1pfRDI0WDggICAgICAgID0gMzgsCisKKyAgIFNWR0EzRF9WMTZVMTYgICAgICAgICA9IDM5LAorCisgICBTVkdBM0RfRzE2UjE2ICAgICAgICAgPSA0MCwKKyAgIFNWR0EzRF9BMTZCMTZHMTZSMTYgICA9IDQxLAorCisgICAvKiBQYWNrZWQgVmlkZW8gZm9ybWF0cyAqLworICAgU1ZHQTNEX1VZVlkgICAgICAgICAgID0gNDIsCisgICBTVkdBM0RfWVVZMiAgICAgICAgICAgPSA0MywKKworICAgU1ZHQTNEX0ZPUk1BVF9NQVgKK30gU1ZHQTNkU3VyZmFjZUZvcm1hdDsKKwordHlwZWRlZiB1aW50MzIgU1ZHQTNkQ29sb3I7IC8qIGEsIHIsIGcsIGIgKi8KKworLyoKKyAqIFRoZXNlIG1hdGNoIHRoZSBEM0RGT1JNQVRfT1AgZGVmaW5pdGlvbnMgdXNlZCBieSBEaXJlY3QzRC4gV2UgbmVlZAorICogdGhlbSBzbyB0aGF0IHdlIGNhbiBxdWVyeSB0aGUgaG9zdCBmb3Igd2hhdCB0aGUgc3VwcG9ydGVkIHN1cmZhY2UKKyAqIG9wZXJhdGlvbnMgYXJlICh3aGVuIHdlJ3JlIHVzaW5nIHRoZSBEM0QgYmFja2VuZCwgaW4gcGFydGljdWxhciksCisgKiBhbmQgc28gd2UgY2FuIHNlbmQgdGhvc2Ugb3BlcmF0aW9ucyB0byB0aGUgZ3Vlc3QuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RGT1JNQVRfT1BfVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDEsCisgICBTVkdBM0RGT1JNQVRfT1BfVk9MVU1FVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDIsCisgICBTVkdBM0RGT1JNQVRfT1BfQ1VCRVRFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQsCisgICBTVkdBM0RGT1JNQVRfT1BfT0ZGU0NSRUVOX1JFTkRFUlRBUkdFVCAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDgsCisgICBTVkdBM0RGT1JNQVRfT1BfU0FNRV9GT1JNQVRfUkVOREVSVEFSR0VUICAgICAgICAgICAgICA9IDB4MDAwMDAwMTAsCisgICBTVkdBM0RGT1JNQVRfT1BfWlNURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwNDAsCisgICBTVkdBM0RGT1JNQVRfT1BfWlNURU5DSUxfV0lUSF9BUkJJVFJBUllfQ09MT1JfREVQVEggICA9IDB4MDAwMDAwODAsCisKKy8qCisgKiBUaGlzIGZvcm1hdCBjYW4gYmUgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgaWYgdGhlIGN1cnJlbnQgZGlzcGxheSBtb2RlCisgKiBpcyB0aGUgc2FtZSBkZXB0aCBpZiB0aGUgYWxwaGEgY2hhbm5lbCBpcyBpZ25vcmVkLiBlLmcuIGlmIHRoZSBkZXZpY2UKKyAqIGNhbiByZW5kZXIgdG8gQThSOEc4Qjggd2hlbiB0aGUgZGlzcGxheSBtb2RlIGlzIFg4UjhHOEI4LCB0aGVuIHRoZQorICogZm9ybWF0IG9wIGxpc3QgZW50cnkgZm9yIEE4UjhHOEI4IHNob3VsZCBoYXZlIHRoaXMgY2FwLgorICovCisgICBTVkdBM0RGT1JNQVRfT1BfU0FNRV9GT1JNQVRfVVBfVE9fQUxQSEFfUkVOREVSVEFSR0VUICA9IDB4MDAwMDAxMDAsCisKKy8qCisgKiBUaGlzIGZvcm1hdCBjb250YWlucyBEaXJlY3REcmF3IHN1cHBvcnQgKGluY2x1ZGluZyBGbGlwKS4gIFRoaXMgZmxhZworICogc2hvdWxkIG5vdCB0byBiZSBzZXQgb24gYWxwaGEgZm9ybWF0cy4KKyAqLworICAgU1ZHQTNERk9STUFUX09QX0RJU1BMQVlNT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwNDAwLAorCisvKgorICogVGhlIHJhc3Rlcml6ZXIgY2FuIHN1cHBvcnQgc29tZSBsZXZlbCBvZiBEaXJlY3QzRCBzdXBwb3J0IGluIHRoaXMgZm9ybWF0CisgKiBhbmQgaW1wbGllcyB0aGF0IHRoZSBkcml2ZXIgY2FuIGNyZWF0ZSBhIENvbnRleHQgaW4gdGhpcyBtb2RlIChmb3Igc29tZQorICogcmVuZGVyIHRhcmdldCBmb3JtYXQpLiAgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgU1ZHQTNERk9STUFUX09QX0RJU1BMQVlNT0RFCisgKiBmbGFnIG11c3QgYWxzbyBiZSBzZXQuCisgKi8KKyAgIFNWR0EzREZPUk1BVF9PUF8zREFDQ0VMRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDgwMCwKKworLyoKKyAqIFRoaXMgaXMgc2V0IGZvciBhIHByaXZhdGUgZm9ybWF0IHdoZW4gdGhlIGRyaXZlciBoYXMgcHV0IHRoZSBicHAgaW4KKyAqIHRoZSBzdHJ1Y3R1cmUuCisgKi8KKyAgIFNWR0EzREZPUk1BVF9PUF9QSVhFTFNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMTAwMCwKKworLyoKKyAqIEluZGljYXRlcyB0aGF0IHRoaXMgZm9ybWF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW55IFJHQiBmb3JtYXQgZm9yIHdoaWNoCisgKiBTVkdBM0RGT1JNQVRfT1BfTUVNQkVST0ZHUk9VUF9BUkdCIGlzIHNwZWNpZmllZAorICovCisgICBTVkdBM0RGT1JNQVRfT1BfQ09OVkVSVF9UT19BUkdCICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDIwMDAsCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGZvcm1hdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHBsYWluIHN1cmZhY2VzLgorICovCisgICBTVkdBM0RGT1JNQVRfT1BfT0ZGU0NSRUVOUExBSU4gICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDAsCisKKy8qCisgKiBJbmRpY2F0ZWQgdGhhdCB0aGlzIGZvcm1hdCBjYW4gYmUgcmVhZCBhcyBhbiBTUkdCIHRleHR1cmUgKG1lYW5pbmcgdGhhdCB0aGUKKyAqIHNhbXBsZXIgd2lsbCBsaW5lYXJpemUgdGhlIGxvb2tlZCB1cCBkYXRhKQorICovCisgICBTVkdBM0RGT1JNQVRfT1BfU1JHQlJFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDgwMDAsCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGZvcm1hdCBjYW4gYmUgdXNlZCBpbiB0aGUgYnVtcG1hcCBpbnN0cnVjdGlvbnMKKyAqLworICAgU1ZHQTNERk9STUFUX09QX0JVTVBNQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDAwLAorCisvKgorICogSW5kaWNhdGVzIHRoYXQgdGhpcyBmb3JtYXQgY2FuIGJlIHNhbXBsZWQgYnkgdGhlIGRpc3BsYWNlbWVudCBtYXAgc2FtcGxlcgorICovCisgICBTVkdBM0RGT1JNQVRfT1BfRE1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMjAwMDAsCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aXRoIHRleHR1cmUgZmlsdGVyaW5nCisgKi8KKyAgIFNWR0EzREZPUk1BVF9PUF9OT0ZJTFRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0MDAwMCwKKworLyoKKyAqIEluZGljYXRlcyB0aGF0IGZvcm1hdCBjb252ZXJzaW9ucyBhcmUgc3VwcG9ydGVkIHRvIHRoaXMgUkdCIGZvcm1hdCBpZgorICogU1ZHQTNERk9STUFUX09QX0NPTlZFUlRfVE9fQVJHQiBpcyBzcGVjaWZpZWQgaW4gdGhlIHNvdXJjZSBmb3JtYXQuCisgKi8KKyAgIFNWR0EzREZPUk1BVF9PUF9NRU1CRVJPRkdST1VQX0FSR0IgICAgICAgICAgICAgICAgICAgID0gMHgwMDA4MDAwMCwKKworLyoKKyAqIEluZGljYXRlZCB0aGF0IHRoaXMgZm9ybWF0IGNhbiBiZSB3cml0dGVuIGFzIGFuIFNSR0IgdGFyZ2V0IChtZWFuaW5nIHRoYXQgdGhlCisgKiBwaXhlbCBwaXBlIHdpbGwgREUtbGluZWFyaXplIGRhdGEgb24gb3V0cHV0IHRvIGZvcm1hdCkKKyAqLworICAgU1ZHQTNERk9STUFUX09QX1NSR0JXUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMTAwMDAwLAorCisvKgorICogSW5kaWNhdGVzIHRoYXQgdGhpcyBmb3JtYXQgY2Fubm90IGJlIHVzZWQgd2l0aCBhbHBoYSBibGVuZGluZworICovCisgICBTVkdBM0RGT1JNQVRfT1BfTk9BTFBIQUJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAyMDAwMDAsCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIGNhbiBhdXRvLWdlbmVyYXRlZCBzdWJsZXZlbHMgZm9yIHJlc291cmNlcworICogb2YgdGhpcyBmb3JtYXQKKyAqLworICAgU1ZHQTNERk9STUFUX09QX0FVVE9HRU5NSVBNQVAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwNDAwMDAwLAorCisvKgorICogSW5kaWNhdGVzIHRoYXQgdGhpcyBmb3JtYXQgY2FuIGJlIHVzZWQgYnkgdmVydGV4IHRleHR1cmUgc2FtcGxlcgorICovCisgICBTVkdBM0RGT1JNQVRfT1BfVkVSVEVYVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDA4MDAwMDAsCisKKy8qCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGZvcm1hdCBzdXBwb3J0cyBuZWl0aGVyIHRleHR1cmUgY29vcmRpbmF0ZSB3cmFwCisgKiBtb2Rlcywgbm9yIG1pcG1hcHBpbmcKKyAqLworICAgU1ZHQTNERk9STUFUX09QX05PVEVYQ09PUkRXUkFQTk9STUlQICAgICAgICAgICAgICAgICAgPSAweDAxMDAwMDAwCit9IFNWR0EzZEZvcm1hdE9wOworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgYSBjb252ZXJzaW9uIG9mIFNWR0EzREZPUk1BVF9PUF8qLgorICogRW50cmllcyBtdXN0IGJlIGxvY2F0ZWQgYXQgdGhlIHNhbWUgcG9zaXRpb24uCisgKi8KK3R5cGVkZWYgdW5pb24geworICAgdWludDMyIHZhbHVlOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQzMiB0ZXh0dXJlIDogMTsKKyAgICAgIHVpbnQzMiB2b2x1bWVUZXh0dXJlIDogMTsKKyAgICAgIHVpbnQzMiBjdWJlVGV4dHVyZSA6IDE7CisgICAgICB1aW50MzIgb2Zmc2NyZWVuUmVuZGVyVGFyZ2V0IDogMTsKKyAgICAgIHVpbnQzMiBzYW1lRm9ybWF0UmVuZGVyVGFyZ2V0IDogMTsKKyAgICAgIHVpbnQzMiB1bmtub3duMSA6IDE7CisgICAgICB1aW50MzIgelN0ZW5jaWwgOiAxOworICAgICAgdWludDMyIHpTdGVuY2lsQXJiaXRyYXJ5RGVwdGggOiAxOworICAgICAgdWludDMyIHNhbWVGb3JtYXRVcFRvQWxwaGEgOiAxOworICAgICAgdWludDMyIHVua25vd24yIDogMTsKKyAgICAgIHVpbnQzMiBkaXNwbGF5TW9kZSA6IDE7CisgICAgICB1aW50MzIgYWNjZWxlcmF0aW9uM2QgOiAxOworICAgICAgdWludDMyIHBpeGVsU2l6ZSA6IDE7CisgICAgICB1aW50MzIgY29udmVydFRvQVJHQiA6IDE7CisgICAgICB1aW50MzIgb2Zmc2NyZWVuUGxhaW4gOiAxOworICAgICAgdWludDMyIHNSR0JSZWFkIDogMTsKKyAgICAgIHVpbnQzMiBidW1wTWFwIDogMTsKKyAgICAgIHVpbnQzMiBkbWFwIDogMTsKKyAgICAgIHVpbnQzMiBub0ZpbHRlciA6IDE7CisgICAgICB1aW50MzIgbWVtYmVyT2ZHcm91cEFSR0IgOiAxOworICAgICAgdWludDMyIHNSR0JXcml0ZSA6IDE7CisgICAgICB1aW50MzIgbm9BbHBoYUJsZW5kIDogMTsKKyAgICAgIHVpbnQzMiBhdXRvR2VuTWlwTWFwIDogMTsKKyAgICAgIHVpbnQzMiB2ZXJ0ZXhUZXh0dXJlIDogMTsKKyAgICAgIHVpbnQzMiBub1RleENvb3JkV3JhcE5vck1pcCA6IDE7CisgICB9OworfSBTVkdBM2RTdXJmYWNlRm9ybWF0Q2FwczsKKworLyoKKyAqIFNWR0FfM0RfQ01EX1NFVFJFTkRFUlNUQVRFIFR5cGVzLiAgQWxsIHZhbHVlIHR5cGVzCisgKiBtdXN0IGZpdCBpbiBhIHVpbnQzMi4KKyAqLworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1JTX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgPSAwLAorICAgU1ZHQTNEX1JTX1pFTkFCTEUgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1pXUklURUVOQUJMRSAgICAgICAgICAgICAgPSAyLCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX0FMUEhBVEVTVEVOQUJMRSAgICAgICAgICAgPSAzLCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX0RJVEhFUkVOQUJMRSAgICAgICAgICAgICAgPSA0LCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX0JMRU5ERU5BQkxFICAgICAgICAgICAgICAgPSA1LCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX0ZPR0VOQUJMRSAgICAgICAgICAgICAgICAgPSA2LCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1NQRUNVTEFSRU5BQkxFICAgICAgICAgICAgPSA3LCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1NURU5DSUxFTkFCTEUgICAgICAgICAgICAgPSA4LCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX0xJR0hUSU5HRU5BQkxFICAgICAgICAgICAgPSA5LCAgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX05PUk1BTElaRU5PUk1BTFMgICAgICAgICAgPSAxMCwgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1BPSU5UU1BSSVRFRU5BQkxFICAgICAgICAgPSAxMSwgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1BPSU5UU0NBTEVFTkFCTEUgICAgICAgICAgPSAxMiwgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1NURU5DSUxSRUYgICAgICAgICAgICAgICAgPSAxMywgICAgLyogdWludDMyICovCisgICBTVkdBM0RfUlNfU1RFTkNJTE1BU0sgICAgICAgICAgICAgICA9IDE0LCAgICAvKiB1aW50MzIgKi8KKyAgIFNWR0EzRF9SU19TVEVOQ0lMV1JJVEVNQVNLICAgICAgICAgID0gMTUsICAgIC8qIHVpbnQzMiAqLworICAgU1ZHQTNEX1JTX0ZPR1NUQVJUICAgICAgICAgICAgICAgICAgPSAxNiwgICAgLyogZmxvYXQgKi8KKyAgIFNWR0EzRF9SU19GT0dFTkQgICAgICAgICAgICAgICAgICAgID0gMTcsICAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfUlNfRk9HREVOU0lUWSAgICAgICAgICAgICAgICA9IDE4LCAgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1JTX1BPSU5UU0laRSAgICAgICAgICAgICAgICAgPSAxOSwgICAgLyogZmxvYXQgKi8KKyAgIFNWR0EzRF9SU19QT0lOVFNJWkVNSU4gICAgICAgICAgICAgID0gMjAsICAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfUlNfUE9JTlRTSVpFTUFYICAgICAgICAgICAgICA9IDIxLCAgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1JTX1BPSU5UU0NBTEVfQSAgICAgICAgICAgICAgPSAyMiwgICAgLyogZmxvYXQgKi8KKyAgIFNWR0EzRF9SU19QT0lOVFNDQUxFX0IgICAgICAgICAgICAgID0gMjMsICAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfUlNfUE9JTlRTQ0FMRV9DICAgICAgICAgICAgICA9IDI0LCAgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1JTX0ZPR0NPTE9SICAgICAgICAgICAgICAgICAgPSAyNSwgICAgLyogU1ZHQTNkQ29sb3IgKi8KKyAgIFNWR0EzRF9SU19BTUJJRU5UICAgICAgICAgICAgICAgICAgID0gMjYsICAgIC8qIFNWR0EzZENvbG9yICovCisgICBTVkdBM0RfUlNfQ0xJUFBMQU5FRU5BQkxFICAgICAgICAgICA9IDI3LCAgICAvKiBTVkdBM2RDbGlwUGxhbmVzICovCisgICBTVkdBM0RfUlNfRk9HTU9ERSAgICAgICAgICAgICAgICAgICA9IDI4LCAgICAvKiBTVkdBM2RGb2dNb2RlICovCisgICBTVkdBM0RfUlNfRklMTE1PREUgICAgICAgICAgICAgICAgICA9IDI5LCAgICAvKiBTVkdBM2RGaWxsTW9kZSAqLworICAgU1ZHQTNEX1JTX1NIQURFTU9ERSAgICAgICAgICAgICAgICAgPSAzMCwgICAgLyogU1ZHQTNkU2hhZGVNb2RlICovCisgICBTVkdBM0RfUlNfTElORVBBVFRFUk4gICAgICAgICAgICAgICA9IDMxLCAgICAvKiBTVkdBM2RMaW5lUGF0dGVybiAqLworICAgU1ZHQTNEX1JTX1NSQ0JMRU5EICAgICAgICAgICAgICAgICAgPSAzMiwgICAgLyogU1ZHQTNkQmxlbmRPcCAqLworICAgU1ZHQTNEX1JTX0RTVEJMRU5EICAgICAgICAgICAgICAgICAgPSAzMywgICAgLyogU1ZHQTNkQmxlbmRPcCAqLworICAgU1ZHQTNEX1JTX0JMRU5ERVFVQVRJT04gICAgICAgICAgICAgPSAzNCwgICAgLyogU1ZHQTNkQmxlbmRFcXVhdGlvbiAqLworICAgU1ZHQTNEX1JTX0NVTExNT0RFICAgICAgICAgICAgICAgICAgPSAzNSwgICAgLyogU1ZHQTNkRmFjZSAqLworICAgU1ZHQTNEX1JTX1pGVU5DICAgICAgICAgICAgICAgICAgICAgPSAzNiwgICAgLyogU1ZHQTNkQ21wRnVuYyAqLworICAgU1ZHQTNEX1JTX0FMUEhBRlVOQyAgICAgICAgICAgICAgICAgPSAzNywgICAgLyogU1ZHQTNkQ21wRnVuYyAqLworICAgU1ZHQTNEX1JTX1NURU5DSUxGVU5DICAgICAgICAgICAgICAgPSAzOCwgICAgLyogU1ZHQTNkQ21wRnVuYyAqLworICAgU1ZHQTNEX1JTX1NURU5DSUxGQUlMICAgICAgICAgICAgICAgPSAzOSwgICAgLyogU1ZHQTNkU3RlbmNpbE9wICovCisgICBTVkdBM0RfUlNfU1RFTkNJTFpGQUlMICAgICAgICAgICAgICA9IDQwLCAgICAvKiBTVkdBM2RTdGVuY2lsT3AgKi8KKyAgIFNWR0EzRF9SU19TVEVOQ0lMUEFTUyAgICAgICAgICAgICAgID0gNDEsICAgIC8qIFNWR0EzZFN0ZW5jaWxPcCAqLworICAgU1ZHQTNEX1JTX0FMUEhBUkVGICAgICAgICAgICAgICAgICAgPSA0MiwgICAgLyogZmxvYXQgKDAuMCAuLiAxLjApICovCisgICBTVkdBM0RfUlNfRlJPTlRXSU5ESU5HICAgICAgICAgICAgICA9IDQzLCAgICAvKiBTVkdBM2RGcm9udFdpbmRpbmcgKi8KKyAgIFNWR0EzRF9SU19DT09SRElOQVRFVFlQRSAgICAgICAgICAgID0gNDQsICAgIC8qIFNWR0EzZENvb3JkaW5hdGVUeXBlICovCisgICBTVkdBM0RfUlNfWkJJQVMgICAgICAgICAgICAgICAgICAgICA9IDQ1LCAgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1JTX1JBTkdFRk9HRU5BQkxFICAgICAgICAgICAgPSA0NiwgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX0NPTE9SV1JJVEVFTkFCTEUgICAgICAgICAgPSA0NywgICAgLyogU1ZHQTNkQ29sb3JNYXNrICovCisgICBTVkdBM0RfUlNfVkVSVEVYTUFURVJJQUxFTkFCTEUgICAgICA9IDQ4LCAgICAvKiBTVkdBM2RCb29sICovCisgICBTVkdBM0RfUlNfRElGRlVTRU1BVEVSSUFMU09VUkNFICAgICA9IDQ5LCAgICAvKiBTVkdBM2RWZXJ0ZXhNYXRlcmlhbCAqLworICAgU1ZHQTNEX1JTX1NQRUNVTEFSTUFURVJJQUxTT1VSQ0UgICAgPSA1MCwgICAgLyogU1ZHQTNkVmVydGV4TWF0ZXJpYWwgKi8KKyAgIFNWR0EzRF9SU19BTUJJRU5UTUFURVJJQUxTT1VSQ0UgICAgID0gNTEsICAgIC8qIFNWR0EzZFZlcnRleE1hdGVyaWFsICovCisgICBTVkdBM0RfUlNfRU1JU1NJVkVNQVRFUklBTFNPVVJDRSAgICA9IDUyLCAgICAvKiBTVkdBM2RWZXJ0ZXhNYXRlcmlhbCAqLworICAgU1ZHQTNEX1JTX1RFWFRVUkVGQUNUT1IgICAgICAgICAgICAgPSA1MywgICAgLyogU1ZHQTNkQ29sb3IgKi8KKyAgIFNWR0EzRF9SU19MT0NBTFZJRVdFUiAgICAgICAgICAgICAgID0gNTQsICAgIC8qIFNWR0EzZEJvb2wgKi8KKyAgIFNWR0EzRF9SU19TQ0lTU09SVEVTVEVOQUJMRSAgICAgICAgID0gNTUsICAgIC8qIFNWR0EzZEJvb2wgKi8KKyAgIFNWR0EzRF9SU19CTEVORENPTE9SICAgICAgICAgICAgICAgID0gNTYsICAgIC8qIFNWR0EzZENvbG9yICovCisgICBTVkdBM0RfUlNfU1RFTkNJTEVOQUJMRTJTSURFRCAgICAgICA9IDU3LCAgICAvKiBTVkdBM2RCb29sICovCisgICBTVkdBM0RfUlNfQ0NXU1RFTkNJTEZVTkMgICAgICAgICAgICA9IDU4LCAgICAvKiBTVkdBM2RDbXBGdW5jICovCisgICBTVkdBM0RfUlNfQ0NXU1RFTkNJTEZBSUwgICAgICAgICAgICA9IDU5LCAgICAvKiBTVkdBM2RTdGVuY2lsT3AgKi8KKyAgIFNWR0EzRF9SU19DQ1dTVEVOQ0lMWkZBSUwgICAgICAgICAgID0gNjAsICAgIC8qIFNWR0EzZFN0ZW5jaWxPcCAqLworICAgU1ZHQTNEX1JTX0NDV1NURU5DSUxQQVNTICAgICAgICAgICAgPSA2MSwgICAgLyogU1ZHQTNkU3RlbmNpbE9wICovCisgICBTVkdBM0RfUlNfVkVSVEVYQkxFTkQgICAgICAgICAgICAgICA9IDYyLCAgICAvKiBTVkdBM2RWZXJ0ZXhCbGVuZEZsYWdzICovCisgICBTVkdBM0RfUlNfU0xPUEVTQ0FMRURFUFRIQklBUyAgICAgICA9IDYzLCAgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1JTX0RFUFRIQklBUyAgICAgICAgICAgICAgICAgPSA2NCwgICAgLyogZmxvYXQgKi8KKworCisgICAvKgorICAgICogT3V0cHV0IEdhbW1hIExldmVsCisgICAgKgorICAgICogT3V0cHV0IGdhbW1hIGVmZmVjdHMgdGhlIGdhbW1hIGN1cnZlIG9mIGNvbG9ycyB0aGF0IGFyZSBvdXRwdXQgZnJvbSB0aGUKKyAgICAqIHJlbmRlcmluZyBwaXBlbGluZS4gIEEgdmFsdWUgb2YgMS4wIHNwZWNpZmllcyBhIGxpbmVhciBjb2xvciBzcGFjZS4gSWYgdGhlCisgICAgKiB2YWx1ZSBpcyA8PSAwLjAsIGdhbW1hIGNvcnJlY3Rpb24gaXMgaWdub3JlZCBhbmQgbGluZWFyIGNvbG9yIHNwYWNlIGlzCisgICAgKiB1c2VkLgorICAgICovCisKKyAgIFNWR0EzRF9SU19PVVRQVVRHQU1NQSAgICAgICAgICAgICAgID0gNjUsICAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfUlNfWlZJU0lCTEUgICAgICAgICAgICAgICAgICA9IDY2LCAgICAvKiBTVkdBM2RCb29sICovCisgICBTVkdBM0RfUlNfTEFTVFBJWEVMICAgICAgICAgICAgICAgICA9IDY3LCAgICAvKiBTVkdBM2RCb29sICovCisgICBTVkdBM0RfUlNfQ0xJUFBJTkcgICAgICAgICAgICAgICAgICA9IDY4LCAgICAvKiBTVkdBM2RCb29sICovCisgICBTVkdBM0RfUlNfV1JBUDAgICAgICAgICAgICAgICAgICAgICA9IDY5LCAgICAvKiBTVkdBM2RXcmFwRmxhZ3MgKi8KKyAgIFNWR0EzRF9SU19XUkFQMSAgICAgICAgICAgICAgICAgICAgID0gNzAsICAgIC8qIFNWR0EzZFdyYXBGbGFncyAqLworICAgU1ZHQTNEX1JTX1dSQVAyICAgICAgICAgICAgICAgICAgICAgPSA3MSwgICAgLyogU1ZHQTNkV3JhcEZsYWdzICovCisgICBTVkdBM0RfUlNfV1JBUDMgICAgICAgICAgICAgICAgICAgICA9IDcyLCAgICAvKiBTVkdBM2RXcmFwRmxhZ3MgKi8KKyAgIFNWR0EzRF9SU19XUkFQNCAgICAgICAgICAgICAgICAgICAgID0gNzMsICAgIC8qIFNWR0EzZFdyYXBGbGFncyAqLworICAgU1ZHQTNEX1JTX1dSQVA1ICAgICAgICAgICAgICAgICAgICAgPSA3NCwgICAgLyogU1ZHQTNkV3JhcEZsYWdzICovCisgICBTVkdBM0RfUlNfV1JBUDYgICAgICAgICAgICAgICAgICAgICA9IDc1LCAgICAvKiBTVkdBM2RXcmFwRmxhZ3MgKi8KKyAgIFNWR0EzRF9SU19XUkFQNyAgICAgICAgICAgICAgICAgICAgID0gNzYsICAgIC8qIFNWR0EzZFdyYXBGbGFncyAqLworICAgU1ZHQTNEX1JTX1dSQVA4ICAgICAgICAgICAgICAgICAgICAgPSA3NywgICAgLyogU1ZHQTNkV3JhcEZsYWdzICovCisgICBTVkdBM0RfUlNfV1JBUDkgICAgICAgICAgICAgICAgICAgICA9IDc4LCAgICAvKiBTVkdBM2RXcmFwRmxhZ3MgKi8KKyAgIFNWR0EzRF9SU19XUkFQMTAgICAgICAgICAgICAgICAgICAgID0gNzksICAgIC8qIFNWR0EzZFdyYXBGbGFncyAqLworICAgU1ZHQTNEX1JTX1dSQVAxMSAgICAgICAgICAgICAgICAgICAgPSA4MCwgICAgLyogU1ZHQTNkV3JhcEZsYWdzICovCisgICBTVkdBM0RfUlNfV1JBUDEyICAgICAgICAgICAgICAgICAgICA9IDgxLCAgICAvKiBTVkdBM2RXcmFwRmxhZ3MgKi8KKyAgIFNWR0EzRF9SU19XUkFQMTMgICAgICAgICAgICAgICAgICAgID0gODIsICAgIC8qIFNWR0EzZFdyYXBGbGFncyAqLworICAgU1ZHQTNEX1JTX1dSQVAxNCAgICAgICAgICAgICAgICAgICAgPSA4MywgICAgLyogU1ZHQTNkV3JhcEZsYWdzICovCisgICBTVkdBM0RfUlNfV1JBUDE1ICAgICAgICAgICAgICAgICAgICA9IDg0LCAgICAvKiBTVkdBM2RXcmFwRmxhZ3MgKi8KKyAgIFNWR0EzRF9SU19NVUxUSVNBTVBMRUFOVElBTElBUyAgICAgID0gODUsICAgIC8qIFNWR0EzZEJvb2wgKi8KKyAgIFNWR0EzRF9SU19NVUxUSVNBTVBMRU1BU0sgICAgICAgICAgID0gODYsICAgIC8qIHVpbnQzMiAqLworICAgU1ZHQTNEX1JTX0lOREVYRURWRVJURVhCTEVOREVOQUJMRSAgPSA4NywgICAgLyogU1ZHQTNkQm9vbCAqLworICAgU1ZHQTNEX1JTX1RXRUVORkFDVE9SICAgICAgICAgICAgICAgPSA4OCwgICAgLyogZmxvYXQgKi8KKyAgIFNWR0EzRF9SU19BTlRJQUxJQVNFRExJTkVFTkFCTEUgICAgID0gODksICAgIC8qIFNWR0EzZEJvb2wgKi8KKyAgIFNWR0EzRF9SU19DT0xPUldSSVRFRU5BQkxFMSAgICAgICAgID0gOTAsICAgIC8qIFNWR0EzZENvbG9yTWFzayAqLworICAgU1ZHQTNEX1JTX0NPTE9SV1JJVEVFTkFCTEUyICAgICAgICAgPSA5MSwgICAgLyogU1ZHQTNkQ29sb3JNYXNrICovCisgICBTVkdBM0RfUlNfQ09MT1JXUklURUVOQUJMRTMgICAgICAgICA9IDkyLCAgICAvKiBTVkdBM2RDb2xvck1hc2sgKi8KKyAgIFNWR0EzRF9SU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUgID0gOTMsICAgIC8qIFNWR0EzZEJvb2wgKi8KKyAgIFNWR0EzRF9SU19TUkNCTEVOREFMUEhBICAgICAgICAgICAgID0gOTQsICAgIC8qIFNWR0EzZEJsZW5kT3AgKi8KKyAgIFNWR0EzRF9SU19EU1RCTEVOREFMUEhBICAgICAgICAgICAgID0gOTUsICAgIC8qIFNWR0EzZEJsZW5kT3AgKi8KKyAgIFNWR0EzRF9SU19CTEVOREVRVUFUSU9OQUxQSEEgICAgICAgID0gOTYsICAgIC8qIFNWR0EzZEJsZW5kRXF1YXRpb24gKi8KKyAgIFNWR0EzRF9SU19NQVgKK30gU1ZHQTNkUmVuZGVyU3RhdGVOYW1lOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1ZFUlRFWE1BVEVSSUFMX05PTkUgICAgID0gMCwgICAgLyogVXNlIHRoZSB2YWx1ZSBpbiB0aGUgY3VycmVudCBtYXRlcmlhbCAqLworICAgU1ZHQTNEX1ZFUlRFWE1BVEVSSUFMX0RJRkZVU0UgID0gMSwgICAgLyogVXNlIHRoZSB2YWx1ZSBpbiB0aGUgZGlmZnVzZSBjb21wb25lbnQgKi8KKyAgIFNWR0EzRF9WRVJURVhNQVRFUklBTF9TUEVDVUxBUiA9IDIsICAgIC8qIFVzZSB0aGUgdmFsdWUgaW4gdGhlIHNwZWN1bGFyIGNvbXBvbmVudCAqLworfSBTVkdBM2RWZXJ0ZXhNYXRlcmlhbDsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9GSUxMTU9ERV9JTlZBTElEID0gMCwKKyAgIFNWR0EzRF9GSUxMTU9ERV9QT0lOVCAgID0gMSwKKyAgIFNWR0EzRF9GSUxMTU9ERV9MSU5FICAgID0gMiwKKyAgIFNWR0EzRF9GSUxMTU9ERV9GSUxMICAgID0gMywKKyAgIFNWR0EzRF9GSUxMTU9ERV9NQVgKK30gU1ZHQTNkRmlsbE1vZGVUeXBlOworCisKK3R5cGVkZWYKK3VuaW9uIHsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTYgICBtb2RlOyAgICAgICAvKiBTVkdBM2RGaWxsTW9kZVR5cGUgKi8KKyAgICAgIHVpbnQxNiAgIGZhY2U7ICAgICAgIC8qIFNWR0EzZEZhY2UgKi8KKyAgIH07CisgICB1aW50MzIgdWludFZhbHVlOworfSBTVkdBM2RGaWxsTW9kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9TSEFERU1PREVfSU5WQUxJRCA9IDAsCisgICBTVkdBM0RfU0hBREVNT0RFX0ZMQVQgICAgPSAxLAorICAgU1ZHQTNEX1NIQURFTU9ERV9TTU9PVEggID0gMiwKKyAgIFNWR0EzRF9TSEFERU1PREVfUEhPTkcgICA9IDMsICAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICBTVkdBM0RfU0hBREVNT0RFX01BWAorfSBTVkdBM2RTaGFkZU1vZGU7CisKK3R5cGVkZWYKK3VuaW9uIHsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTYgcmVwZWF0OworICAgICAgdWludDE2IHBhdHRlcm47CisgICB9OworICAgdWludDMyIHVpbnRWYWx1ZTsKK30gU1ZHQTNkTGluZVBhdHRlcm47CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfQkxFTkRPUF9JTlZBTElEICAgICAgICAgICAgPSAwLAorICAgU1ZHQTNEX0JMRU5ET1BfWkVSTyAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9CTEVORE9QX09ORSAgICAgICAgICAgICAgICA9IDIsCisgICBTVkdBM0RfQkxFTkRPUF9TUkNDT0xPUiAgICAgICAgICAgPSAzLAorICAgU1ZHQTNEX0JMRU5ET1BfSU5WU1JDQ09MT1IgICAgICAgID0gNCwKKyAgIFNWR0EzRF9CTEVORE9QX1NSQ0FMUEhBICAgICAgICAgICA9IDUsCisgICBTVkdBM0RfQkxFTkRPUF9JTlZTUkNBTFBIQSAgICAgICAgPSA2LAorICAgU1ZHQTNEX0JMRU5ET1BfREVTVEFMUEhBICAgICAgICAgID0gNywKKyAgIFNWR0EzRF9CTEVORE9QX0lOVkRFU1RBTFBIQSAgICAgICA9IDgsCisgICBTVkdBM0RfQkxFTkRPUF9ERVNUQ09MT1IgICAgICAgICAgPSA5LAorICAgU1ZHQTNEX0JMRU5ET1BfSU5WREVTVENPTE9SICAgICAgID0gMTAsCisgICBTVkdBM0RfQkxFTkRPUF9TUkNBTFBIQVNBVCAgICAgICAgPSAxMSwKKyAgIFNWR0EzRF9CTEVORE9QX0JMRU5ERkFDVE9SICAgICAgICA9IDEyLAorICAgU1ZHQTNEX0JMRU5ET1BfSU5WQkxFTkRGQUNUT1IgICAgID0gMTMsCisgICBTVkdBM0RfQkxFTkRPUF9NQVgKK30gU1ZHQTNkQmxlbmRPcDsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9CTEVOREVRX0lOVkFMSUQgICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfQkxFTkRFUV9BREQgICAgICAgICAgICAgICAgPSAxLAorICAgU1ZHQTNEX0JMRU5ERVFfU1VCVFJBQ1QgICAgICAgICAgID0gMiwKKyAgIFNWR0EzRF9CTEVOREVRX1JFVlNVQlRSQUNUICAgICAgICA9IDMsCisgICBTVkdBM0RfQkxFTkRFUV9NSU5JTVVNICAgICAgICAgICAgPSA0LAorICAgU1ZHQTNEX0JMRU5ERVFfTUFYSU1VTSAgICAgICAgICAgID0gNSwKKyAgIFNWR0EzRF9CTEVOREVRX01BWAorfSBTVkdBM2RCbGVuZEVxdWF0aW9uOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0ZST05UV0lORElOR19JTlZBTElEID0gMCwKKyAgIFNWR0EzRF9GUk9OVFdJTkRJTkdfQ1cgICAgICA9IDEsCisgICBTVkdBM0RfRlJPTlRXSU5ESU5HX0NDVyAgICAgPSAyLAorICAgU1ZHQTNEX0ZST05UV0lORElOR19NQVgKK30gU1ZHQTNkRnJvbnRXaW5kaW5nOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0ZBQ0VfSU5WQUxJRCAgPSAwLAorICAgU1ZHQTNEX0ZBQ0VfTk9ORSAgICAgPSAxLAorICAgU1ZHQTNEX0ZBQ0VfRlJPTlQgICAgPSAyLAorICAgU1ZHQTNEX0ZBQ0VfQkFDSyAgICAgPSAzLAorICAgU1ZHQTNEX0ZBQ0VfRlJPTlRfQkFDSyA9IDQsCisgICBTVkdBM0RfRkFDRV9NQVgKK30gU1ZHQTNkRmFjZTsKKworLyoKKyAqIFRoZSBvcmRlciBhbmQgdGhlIHZhbHVlcyBzaG91bGQgbm90IGJlIGNoYW5nZWQKKyAqLworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0NNUF9JTlZBTElEICAgICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfQ01QX05FVkVSICAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9DTVBfTEVTUyAgICAgICAgICAgICAgICAgPSAyLAorICAgU1ZHQTNEX0NNUF9FUVVBTCAgICAgICAgICAgICAgICA9IDMsCisgICBTVkdBM0RfQ01QX0xFU1NFUVVBTCAgICAgICAgICAgID0gNCwKKyAgIFNWR0EzRF9DTVBfR1JFQVRFUiAgICAgICAgICAgICAgPSA1LAorICAgU1ZHQTNEX0NNUF9OT1RFUVVBTCAgICAgICAgICAgICA9IDYsCisgICBTVkdBM0RfQ01QX0dSRUFURVJFUVVBTCAgICAgICAgID0gNywKKyAgIFNWR0EzRF9DTVBfQUxXQVlTICAgICAgICAgICAgICAgPSA4LAorICAgU1ZHQTNEX0NNUF9NQVgKK30gU1ZHQTNkQ21wRnVuYzsKKworLyoKKyAqIFNWR0EzRF9GT0dGVU5DXyogc3BlY2lmaWVzIHRoZSBmb2cgZXF1YXRpb24sIG9yIFBFUl9WRVJURVggd2hpY2ggYWxsb3dzCisgKiB0aGUgZm9nIGZhY3RvciB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIGFscGhhIGNvbXBvbmVudCBvZiB0aGUgc3BlY3VsYXIKKyAqIChhLmsuYS4gc2Vjb25kYXJ5KSB2ZXJ0ZXggY29sb3IuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfRk9HRlVOQ19JTlZBTElEICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9GT0dGVU5DX0VYUCAgICAgICAgICAgICAgPSAxLAorICAgU1ZHQTNEX0ZPR0ZVTkNfRVhQMiAgICAgICAgICAgICA9IDIsCisgICBTVkdBM0RfRk9HRlVOQ19MSU5FQVIgICAgICAgICAgID0gMywKKyAgIFNWR0EzRF9GT0dGVU5DX1BFUl9WRVJURVggICAgICAgPSA0Cit9IFNWR0EzZEZvZ0Z1bmN0aW9uOworCisvKgorICogU1ZHQTNEX0ZPR1RZUEVfKiBzcGVjaWZpZXMgaWYgZm9nIGZhY3RvcnMgYXJlIGNvbXB1dGVkIG9uIGEgcGVyLXZlcnRleAorICogb3IgcGVyLXBpeGVsIGJhc2lzLgorICovCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0ZPR1RZUEVfSU5WQUxJRCAgICAgICAgICA9IDAsCisgICBTVkdBM0RfRk9HVFlQRV9WRVJURVggICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9GT0dUWVBFX1BJWEVMICAgICAgICAgICAgPSAyLAorICAgU1ZHQTNEX0ZPR1RZUEVfTUFYICAgICAgICAgICAgICA9IDMKK30gU1ZHQTNkRm9nVHlwZTsKKworLyoKKyAqIFNWR0EzRF9GT0dCQVNFXyogc2VsZWN0cyBkZXB0aCBvciByYW5nZS1iYXNlZCBmb2cuIERlcHRoLWJhc2VkIGZvZyBpcworICogY29tcHV0ZWQgdXNpbmcgdGhlIGV5ZSBaIHZhbHVlIG9mIGVhY2ggcGl4ZWwgKG9yIHZlcnRleCksIHdoZXJlYXMgcmFuZ2UtCisgKiBiYXNlZCBmb2cgaXMgY29tcHV0ZWQgdXNpbmcgdGhlIGFjdHVhbCBkaXN0YW5jZSAocmFuZ2UpIHRvIHRoZSBleWUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfRk9HQkFTRV9JTlZBTElEICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9GT0dCQVNFX0RFUFRIQkFTRUQgICAgICAgPSAxLAorICAgU1ZHQTNEX0ZPR0JBU0VfUkFOR0VCQVNFRCAgICAgICA9IDIsCisgICBTVkdBM0RfRk9HQkFTRV9NQVggICAgICAgICAgICAgID0gMworfSBTVkdBM2RGb2dCYXNlOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1NURU5DSUxPUF9JTlZBTElEICAgICAgICA9IDAsCisgICBTVkdBM0RfU1RFTkNJTE9QX0tFRVAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9TVEVOQ0lMT1BfWkVSTyAgICAgICAgICAgPSAyLAorICAgU1ZHQTNEX1NURU5DSUxPUF9SRVBMQUNFICAgICAgICA9IDMsCisgICBTVkdBM0RfU1RFTkNJTE9QX0lOQ1JTQVQgICAgICAgID0gNCwKKyAgIFNWR0EzRF9TVEVOQ0lMT1BfREVDUlNBVCAgICAgICAgPSA1LAorICAgU1ZHQTNEX1NURU5DSUxPUF9JTlZFUlQgICAgICAgICA9IDYsCisgICBTVkdBM0RfU1RFTkNJTE9QX0lOQ1IgICAgICAgICAgID0gNywKKyAgIFNWR0EzRF9TVEVOQ0lMT1BfREVDUiAgICAgICAgICAgPSA4LAorICAgU1ZHQTNEX1NURU5DSUxPUF9NQVgKK30gU1ZHQTNkU3RlbmNpbE9wOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0NMSVBQTEFORV8wICAgICAgICAgICAgICA9ICgxIDw8IDApLAorICAgU1ZHQTNEX0NMSVBQTEFORV8xICAgICAgICAgICAgICA9ICgxIDw8IDEpLAorICAgU1ZHQTNEX0NMSVBQTEFORV8yICAgICAgICAgICAgICA9ICgxIDw8IDIpLAorICAgU1ZHQTNEX0NMSVBQTEFORV8zICAgICAgICAgICAgICA9ICgxIDw8IDMpLAorICAgU1ZHQTNEX0NMSVBQTEFORV80ICAgICAgICAgICAgICA9ICgxIDw8IDQpLAorICAgU1ZHQTNEX0NMSVBQTEFORV81ICAgICAgICAgICAgICA9ICgxIDw8IDUpLAorfSBTVkdBM2RDbGlwUGxhbmVzOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0NMRUFSX0NPTE9SICAgICAgICAgICAgICA9IDB4MSwKKyAgIFNWR0EzRF9DTEVBUl9ERVBUSCAgICAgICAgICAgICAgPSAweDIsCisgICBTVkdBM0RfQ0xFQVJfU1RFTkNJTCAgICAgICAgICAgID0gMHg0Cit9IFNWR0EzZENsZWFyRmxhZzsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9SVF9ERVBUSCAgICAgICAgICAgICAgICAgPSAwLAorICAgU1ZHQTNEX1JUX1NURU5DSUwgICAgICAgICAgICAgICA9IDEsCisgICBTVkdBM0RfUlRfQ09MT1IwICAgICAgICAgICAgICAgID0gMiwKKyAgIFNWR0EzRF9SVF9DT0xPUjEgICAgICAgICAgICAgICAgPSAzLAorICAgU1ZHQTNEX1JUX0NPTE9SMiAgICAgICAgICAgICAgICA9IDQsCisgICBTVkdBM0RfUlRfQ09MT1IzICAgICAgICAgICAgICAgID0gNSwKKyAgIFNWR0EzRF9SVF9DT0xPUjQgICAgICAgICAgICAgICAgPSA2LAorICAgU1ZHQTNEX1JUX0NPTE9SNSAgICAgICAgICAgICAgICA9IDcsCisgICBTVkdBM0RfUlRfQ09MT1I2ICAgICAgICAgICAgICAgID0gOCwKKyAgIFNWR0EzRF9SVF9DT0xPUjcgICAgICAgICAgICAgICAgPSA5LAorICAgU1ZHQTNEX1JUX01BWCwKKyAgIFNWR0EzRF9SVF9JTlZBTElEICAgICAgICAgICAgICAgPSAoKHVpbnQzMiktMSksCit9IFNWR0EzZFJlbmRlclRhcmdldFR5cGU7CisKKyNkZWZpbmUgU1ZHQTNEX01BWF9SVF9DT0xPUiAoU1ZHQTNEX1JUX0NPTE9SNyAtIFNWR0EzRF9SVF9DT0xPUjAgKyAxKQorCit0eXBlZGVmCit1bmlvbiB7CisgICBzdHJ1Y3QgeworICAgICAgdWludDMyICByZWQgICA6IDE7CisgICAgICB1aW50MzIgIGdyZWVuIDogMTsKKyAgICAgIHVpbnQzMiAgYmx1ZSAgOiAxOworICAgICAgdWludDMyICBhbHBoYSA6IDE7CisgICB9OworICAgdWludDMyIHVpbnRWYWx1ZTsKK30gU1ZHQTNkQ29sb3JNYXNrOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1ZCTEVORF9ESVNBQkxFICAgICAgICAgICAgPSAwLAorICAgU1ZHQTNEX1ZCTEVORF8xV0VJR0hUICAgICAgICAgICAgPSAxLAorICAgU1ZHQTNEX1ZCTEVORF8yV0VJR0hUICAgICAgICAgICAgPSAyLAorICAgU1ZHQTNEX1ZCTEVORF8zV0VJR0hUICAgICAgICAgICAgPSAzLAorfSBTVkdBM2RWZXJ0ZXhCbGVuZEZsYWdzOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1dSQVBDT09SRF8wICAgPSAxIDw8IDAsCisgICBTVkdBM0RfV1JBUENPT1JEXzEgICA9IDEgPDwgMSwKKyAgIFNWR0EzRF9XUkFQQ09PUkRfMiAgID0gMSA8PCAyLAorICAgU1ZHQTNEX1dSQVBDT09SRF8zICAgPSAxIDw8IDMsCisgICBTVkdBM0RfV1JBUENPT1JEX0FMTCA9IDB4RiwKK30gU1ZHQTNkV3JhcEZsYWdzOworCisvKgorICogU1ZHQV8zRF9DTURfVEVYVFVSRVNUQVRFIFR5cGVzLiAgQWxsIHZhbHVlIHR5cGVzCisgKiBtdXN0IGZpdCBpbiBhIHVpbnQzMi4KKyAqLworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1RTX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9UU19CSU5EX1RFWFRVUkUgICAgICAgICAgICAgICA9IDEsICAgIC8qIFNWR0EzZFN1cmZhY2VJZCAqLworICAgU1ZHQTNEX1RTX0NPTE9ST1AgICAgICAgICAgICAgICAgICAgID0gMiwgICAgLyogU1ZHQTNkVGV4dHVyZUNvbWJpbmVyICovCisgICBTVkdBM0RfVFNfQ09MT1JBUkcxICAgICAgICAgICAgICAgICAgPSAzLCAgICAvKiBTVkdBM2RUZXh0dXJlQXJnRGF0YSAqLworICAgU1ZHQTNEX1RTX0NPTE9SQVJHMiAgICAgICAgICAgICAgICAgID0gNCwgICAgLyogU1ZHQTNkVGV4dHVyZUFyZ0RhdGEgKi8KKyAgIFNWR0EzRF9UU19BTFBIQU9QICAgICAgICAgICAgICAgICAgICA9IDUsICAgIC8qIFNWR0EzZFRleHR1cmVDb21iaW5lciAqLworICAgU1ZHQTNEX1RTX0FMUEhBQVJHMSAgICAgICAgICAgICAgICAgID0gNiwgICAgLyogU1ZHQTNkVGV4dHVyZUFyZ0RhdGEgKi8KKyAgIFNWR0EzRF9UU19BTFBIQUFSRzIgICAgICAgICAgICAgICAgICA9IDcsICAgIC8qIFNWR0EzZFRleHR1cmVBcmdEYXRhICovCisgICBTVkdBM0RfVFNfQUREUkVTU1UgICAgICAgICAgICAgICAgICAgPSA4LCAgICAvKiBTVkdBM2RUZXh0dXJlQWRkcmVzcyAqLworICAgU1ZHQTNEX1RTX0FERFJFU1NWICAgICAgICAgICAgICAgICAgID0gOSwgICAgLyogU1ZHQTNkVGV4dHVyZUFkZHJlc3MgKi8KKyAgIFNWR0EzRF9UU19NSVBGSUxURVIgICAgICAgICAgICAgICAgICA9IDEwLCAgIC8qIFNWR0EzZFRleHR1cmVGaWx0ZXIgKi8KKyAgIFNWR0EzRF9UU19NQUdGSUxURVIgICAgICAgICAgICAgICAgICA9IDExLCAgIC8qIFNWR0EzZFRleHR1cmVGaWx0ZXIgKi8KKyAgIFNWR0EzRF9UU19NSU5GSUxURVIgICAgICAgICAgICAgICAgICA9IDEyLCAgIC8qIFNWR0EzZFRleHR1cmVGaWx0ZXIgKi8KKyAgIFNWR0EzRF9UU19CT1JERVJDT0xPUiAgICAgICAgICAgICAgICA9IDEzLCAgIC8qIFNWR0EzZENvbG9yICovCisgICBTVkdBM0RfVFNfVEVYQ09PUkRJTkRFWCAgICAgICAgICAgICAgPSAxNCwgICAvKiB1aW50MzIgKi8KKyAgIFNWR0EzRF9UU19URVhUVVJFVFJBTlNGT1JNRkxBR1MgICAgICA9IDE1LCAgIC8qIFNWR0EzZFRleFRyYW5zZm9ybUZsYWdzICovCisgICBTVkdBM0RfVFNfVEVYQ09PUkRHRU4gICAgICAgICAgICAgICAgPSAxNiwgICAvKiBTVkdBM2RUZXh0dXJlQ29vcmRHZW4gKi8KKyAgIFNWR0EzRF9UU19CVU1QRU5WTUFUMDAgICAgICAgICAgICAgICA9IDE3LCAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfVFNfQlVNUEVOVk1BVDAxICAgICAgICAgICAgICAgPSAxOCwgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1RTX0JVTVBFTlZNQVQxMCAgICAgICAgICAgICAgID0gMTksICAgLyogZmxvYXQgKi8KKyAgIFNWR0EzRF9UU19CVU1QRU5WTUFUMTEgICAgICAgICAgICAgICA9IDIwLCAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfVFNfVEVYVFVSRV9NSVBNQVBfTEVWRUwgICAgICAgPSAyMSwgICAvKiB1aW50MzIgKi8KKyAgIFNWR0EzRF9UU19URVhUVVJFX0xPRF9CSUFTICAgICAgICAgICA9IDIyLCAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfVFNfVEVYVFVSRV9BTklTT1RST1BJQ19MRVZFTCAgPSAyMywgICAvKiB1aW50MzIgKi8KKyAgIFNWR0EzRF9UU19BRERSRVNTVyAgICAgICAgICAgICAgICAgICA9IDI0LCAgIC8qIFNWR0EzZFRleHR1cmVBZGRyZXNzICovCisKKworICAgLyoKKyAgICAqIFNhbXBsZXIgR2FtbWEgTGV2ZWwKKyAgICAqCisgICAgKiBTYW1wbGVyIGdhbW1hIGVmZmVjdHMgdGhlIGNvbG9yIG9mIHNhbXBsZXMgdGFrZW4gZnJvbSB0aGUgc2FtcGxlci4gIEEKKyAgICAqIHZhbHVlIG9mIDEuMCB3aWxsIHByb2R1Y2UgbGluZWFyIHNhbXBsZXMuICBJZiB0aGUgdmFsdWUgaXMgPD0gMC4wIHRoZQorICAgICogZ2FtbWEgdmFsdWUgaXMgaWdub3JlZCBhbmQgYSBsaW5lYXIgc3BhY2UgaXMgdXNlZC4KKyAgICAqLworCisgICBTVkdBM0RfVFNfR0FNTUEgICAgICAgICAgICAgICAgICAgICAgPSAyNSwgICAvKiBmbG9hdCAqLworICAgU1ZHQTNEX1RTX0JVTVBFTlZMU0NBTEUgICAgICAgICAgICAgID0gMjYsICAgLyogZmxvYXQgKi8KKyAgIFNWR0EzRF9UU19CVU1QRU5WTE9GRlNFVCAgICAgICAgICAgICA9IDI3LCAgIC8qIGZsb2F0ICovCisgICBTVkdBM0RfVFNfQ09MT1JBUkcwICAgICAgICAgICAgICAgICAgPSAyOCwgICAvKiBTVkdBM2RUZXh0dXJlQXJnRGF0YSAqLworICAgU1ZHQTNEX1RTX0FMUEhBQVJHMCAgICAgICAgICAgICAgICAgID0gMjksICAgLyogU1ZHQTNkVGV4dHVyZUFyZ0RhdGEgKi8KKyAgIFNWR0EzRF9UU19NQVgKK30gU1ZHQTNkVGV4dHVyZVN0YXRlTmFtZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9UQ19JTlZBTElEICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9UQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9UQ19TRUxFQ1RBUkcxICAgICAgICAgICAgICAgID0gMiwKKyAgIFNWR0EzRF9UQ19TRUxFQ1RBUkcyICAgICAgICAgICAgICAgID0gMywKKyAgIFNWR0EzRF9UQ19NT0RVTEFURSAgICAgICAgICAgICAgICAgID0gNCwKKyAgIFNWR0EzRF9UQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gNSwKKyAgIFNWR0EzRF9UQ19BRERTSUdORUQgICAgICAgICAgICAgICAgID0gNiwKKyAgIFNWR0EzRF9UQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgID0gNywKKyAgIFNWR0EzRF9UQ19CTEVORFRFWFRVUkVBTFBIQSAgICAgICAgID0gOCwKKyAgIFNWR0EzRF9UQ19CTEVORERJRkZVU0VBTFBIQSAgICAgICAgID0gOSwKKyAgIFNWR0EzRF9UQ19CTEVORENVUlJFTlRBTFBIQSAgICAgICAgID0gMTAsCisgICBTVkdBM0RfVENfQkxFTkRGQUNUT1JBTFBIQSAgICAgICAgICA9IDExLAorICAgU1ZHQTNEX1RDX01PRFVMQVRFMlggICAgICAgICAgICAgICAgPSAxMiwKKyAgIFNWR0EzRF9UQ19NT0RVTEFURTRYICAgICAgICAgICAgICAgID0gMTMsCisgICBTVkdBM0RfVENfRFNEVCAgICAgICAgICAgICAgICAgICAgICA9IDE0LAorICAgU1ZHQTNEX1RDX0RPVFBST0RVQ1QzICAgICAgICAgICAgICAgPSAxNSwKKyAgIFNWR0EzRF9UQ19CTEVORFRFWFRVUkVBTFBIQVBNICAgICAgID0gMTYsCisgICBTVkdBM0RfVENfQUREU0lHTkVEMlggICAgICAgICAgICAgICA9IDE3LAorICAgU1ZHQTNEX1RDX0FERFNNT09USCAgICAgICAgICAgICAgICAgPSAxOCwKKyAgIFNWR0EzRF9UQ19QUkVNT0RVTEFURSAgICAgICAgICAgICAgID0gMTksCisgICBTVkdBM0RfVENfTU9EVUxBVEVBTFBIQV9BRERDT0xPUiAgICA9IDIwLAorICAgU1ZHQTNEX1RDX01PRFVMQVRFQ09MT1JfQUREQUxQSEEgICAgPSAyMSwKKyAgIFNWR0EzRF9UQ19NT0RVTEFURUlOVkFMUEhBX0FERENPTE9SID0gMjIsCisgICBTVkdBM0RfVENfTU9EVUxBVEVJTlZDT0xPUl9BRERBTFBIQSA9IDIzLAorICAgU1ZHQTNEX1RDX0JVTVBFTlZNQVBMVU1JTkFOQ0UgICAgICAgPSAyNCwKKyAgIFNWR0EzRF9UQ19NVUxUSVBMWUFERCAgICAgICAgICAgICAgID0gMjUsCisgICBTVkdBM0RfVENfTEVSUCAgICAgICAgICAgICAgICAgICAgICA9IDI2LAorICAgU1ZHQTNEX1RDX01BWAorfSBTVkdBM2RUZXh0dXJlQ29tYmluZXI7CisKKyNkZWZpbmUgU1ZHQTNEX1RDX0NBUF9CSVQoc3ZnYTNkX3RjX29wKSAoc3ZnYTNkX3RjX29wID8gKDEgPDwgKHN2Z2EzZF90Y19vcCAtIDEpKSA6IDApCisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfVEVYX0FERFJFU1NfSU5WQUxJRCAgICA9IDAsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfV1JBUCAgICAgICA9IDEsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfTUlSUk9SICAgICA9IDIsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfQ0xBTVAgICAgICA9IDMsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfQk9SREVSICAgICA9IDQsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfTUlSUk9ST05DRSA9IDUsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfRURHRSAgICAgICA9IDYsCisgICBTVkdBM0RfVEVYX0FERFJFU1NfTUFYCit9IFNWR0EzZFRleHR1cmVBZGRyZXNzOworCisvKgorICogU1ZHQTNEX1RFWF9GSUxURVJfTk9ORSBhcyB0aGUgbWluaWZpY2F0aW9uIGZpbHRlciBtZWFucyBtaXBtYXBwaW5nIGlzCisgKiBkaXNhYmxlZCwgYW5kIHRoZSByYXN0ZXJpemVyIHNob3VsZCB1c2UgdGhlIG1hZ25pZmljYXRpb24gZmlsdGVyIGluc3RlYWQuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfVEVYX0ZJTFRFUl9OT05FICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfVEVYX0ZJTFRFUl9ORUFSRVNUICAgICAgICA9IDEsCisgICBTVkdBM0RfVEVYX0ZJTFRFUl9MSU5FQVIgICAgICAgICA9IDIsCisgICBTVkdBM0RfVEVYX0ZJTFRFUl9BTklTT1RST1BJQyAgICA9IDMsCisgICBTVkdBM0RfVEVYX0ZJTFRFUl9GTEFUQ1VCSUMgICAgICA9IDQsIC8vIERlcHJlY2F0ZWQsIG5vdCBpbXBsZW1lbnRlZAorICAgU1ZHQTNEX1RFWF9GSUxURVJfR0FVU1NJQU5DVUJJQyAgPSA1LCAvLyBEZXByZWNhdGVkLCBub3QgaW1wbGVtZW50ZWQKKyAgIFNWR0EzRF9URVhfRklMVEVSX1BZUkFNSURBTFFVQUQgID0gNiwgLy8gTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZAorICAgU1ZHQTNEX1RFWF9GSUxURVJfR0FVU1NJQU5RVUFEICAgPSA3LCAvLyBOb3QgY3VycmVudGx5IGltcGxlbWVudGVkCisgICBTVkdBM0RfVEVYX0ZJTFRFUl9NQVgKK30gU1ZHQTNkVGV4dHVyZUZpbHRlcjsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9URVhfVFJBTlNGT1JNX09GRiAgICA9IDAsCisgICBTVkdBM0RfVEVYX1RSQU5TRk9STV9TICAgICAgPSAoMSA8PCAwKSwKKyAgIFNWR0EzRF9URVhfVFJBTlNGT1JNX1QgICAgICA9ICgxIDw8IDEpLAorICAgU1ZHQTNEX1RFWF9UUkFOU0ZPUk1fUiAgICAgID0gKDEgPDwgMiksCisgICBTVkdBM0RfVEVYX1RSQU5TRk9STV9RICAgICAgPSAoMSA8PCAzKSwKKyAgIFNWR0EzRF9URVhfUFJPSkVDVEVEICAgICAgICA9ICgxIDw8IDE1KSwKK30gU1ZHQTNkVGV4VHJhbnNmb3JtRmxhZ3M7CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfVEVYQ09PUkRfR0VOX09GRiAgICAgICAgICAgICAgPSAwLAorICAgU1ZHQTNEX1RFWENPT1JEX0dFTl9FWUVfUE9TSVRJT04gICAgID0gMSwKKyAgIFNWR0EzRF9URVhDT09SRF9HRU5fRVlFX05PUk1BTCAgICAgICA9IDIsCisgICBTVkdBM0RfVEVYQ09PUkRfR0VOX1JFRkxFQ1RJT05WRUNUT1IgPSAzLAorICAgU1ZHQTNEX1RFWENPT1JEX0dFTl9TUEhFUkUgICAgICAgICAgID0gNCwKKyAgIFNWR0EzRF9URVhDT09SRF9HRU5fTUFYCit9IFNWR0EzZFRleHR1cmVDb29yZEdlbjsKKworLyoKKyAqIFRleHR1cmUgYXJndW1lbnQgY29uc3RhbnRzIGZvciB0ZXh0dXJlIGNvbWJpbmVyCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfVEFfSU5WQUxJRCAgICA9IDAsCisgICBTVkdBM0RfVEFfQ09OU1RBTlQgICA9IDEsCisgICBTVkdBM0RfVEFfUFJFVklPVVMgICA9IDIsCisgICBTVkdBM0RfVEFfRElGRlVTRSAgICA9IDMsCisgICBTVkdBM0RfVEFfVEVYVFVSRSAgICA9IDQsCisgICBTVkdBM0RfVEFfU1BFQ1VMQVIgICA9IDUsCisgICBTVkdBM0RfVEFfTUFYCit9IFNWR0EzZFRleHR1cmVBcmdEYXRhOworCisjZGVmaW5lIFNWR0EzRF9UTV9NQVNLX0xFTiA0CisKKy8qIE1vZGlmaWVycyBmb3IgdGV4dHVyZSBhcmd1bWVudCBjb25zdGFudHMgZGVmaW5lZCBhYm92ZS4gKi8KK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfVE1fTk9ORSAgICAgICA9IDAsCisgICBTVkdBM0RfVE1fQUxQSEEgICAgICA9ICgxIDw8IFNWR0EzRF9UTV9NQVNLX0xFTiksCisgICBTVkdBM0RfVE1fT05FX01JTlVTICA9ICgyIDw8IFNWR0EzRF9UTV9NQVNLX0xFTiksCit9IFNWR0EzZFRleHR1cmVBcmdNb2RpZmllcjsKKworI2RlZmluZSBTVkdBM0RfSU5WQUxJRF9JRCAgICAgICAgICgodWludDMyKS0xKQorI2RlZmluZSBTVkdBM0RfTUFYX0NMSVBfUExBTkVTICAgIDYKKworLyoKKyAqIFRoaXMgaXMgdGhlIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgZml4ZWQtZnVuY3Rpb24gdGV4dHVyZQorICogdHJhbnNmb3JtcyBhbmQgdGV4dHVyZSBjb29yZGluYXRlcyB3ZSBjYW4gc3VwcG9ydC4gSXQgZG9lcyAqbm90KgorICogY29ycmVzcG9uZCB0byB0aGUgbnVtYmVyIG9mIHRleHR1cmUgaW1hZ2UgdW5pdHMgKHNhbXBsZXJzKSB3ZQorICogc3VwcG9ydCEKKyAqLworI2RlZmluZSBTVkdBM0RfTUFYX1RFWFRVUkVfQ09PUkRTIDgKKworLyoKKyAqIFZlcnRleCBkZWNsYXJhdGlvbnMKKyAqCisgKiBOb3RlczoKKyAqCisgKiBTVkdBM0RfREVDTFVTQUdFX1BPU0lUSU9OVCBpcyBmb3IgcHJlLXRyYW5zZm9ybWVkIHZlcnRpY2VzLiBJZiB5b3UKKyAqIGRyYXcgd2l0aCBhbnkgUE9TSVRJT05UIHZlcnRleCBhcnJheXMsIHRoZSBwcm9ncmFtbWFibGUgdmVydGV4CisgKiBwaXBlbGluZSB3aWxsIGJlIGltcGxpY2l0bHkgZGlzYWJsZWQuIERyYXdpbmcgd2lsbCB0YWtlIHBsYWNlIGFzIGlmCisgKiBubyB2ZXJ0ZXggc2hhZGVyIHdhcyBib3VuZC4KKyAqLworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0RFQ0xVU0FHRV9QT1NJVElPTiAgICAgPSAwLAorICAgU1ZHQTNEX0RFQ0xVU0FHRV9CTEVORFdFSUdIVCwgICAgICAgLy8gIDEKKyAgIFNWR0EzRF9ERUNMVVNBR0VfQkxFTkRJTkRJQ0VTLCAgICAgIC8vICAyCisgICBTVkdBM0RfREVDTFVTQUdFX05PUk1BTCwgICAgICAgICAgICAvLyAgMworICAgU1ZHQTNEX0RFQ0xVU0FHRV9QU0laRSwgICAgICAgICAgICAgLy8gIDQKKyAgIFNWR0EzRF9ERUNMVVNBR0VfVEVYQ09PUkQsICAgICAgICAgIC8vICA1CisgICBTVkdBM0RfREVDTFVTQUdFX1RBTkdFTlQsICAgICAgICAgICAvLyAgNgorICAgU1ZHQTNEX0RFQ0xVU0FHRV9CSU5PUk1BTCwgICAgICAgICAgLy8gIDcKKyAgIFNWR0EzRF9ERUNMVVNBR0VfVEVTU0ZBQ1RPUiwgICAgICAgIC8vICA4CisgICBTVkdBM0RfREVDTFVTQUdFX1BPU0lUSU9OVCwgICAgICAgICAvLyAgOQorICAgU1ZHQTNEX0RFQ0xVU0FHRV9DT0xPUiwgICAgICAgICAgICAgLy8gMTAKKyAgIFNWR0EzRF9ERUNMVVNBR0VfRk9HLCAgICAgICAgICAgICAgIC8vIDExCisgICBTVkdBM0RfREVDTFVTQUdFX0RFUFRILCAgICAgICAgICAgICAvLyAxMgorICAgU1ZHQTNEX0RFQ0xVU0FHRV9TQU1QTEUsICAgICAgICAgICAgLy8gMTMKKyAgIFNWR0EzRF9ERUNMVVNBR0VfTUFYCit9IFNWR0EzZERlY2xVc2FnZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9ERUNMTUVUSE9EX0RFRkFVTFQgICAgID0gMCwKKyAgIFNWR0EzRF9ERUNMTUVUSE9EX1BBUlRJQUxVLAorICAgU1ZHQTNEX0RFQ0xNRVRIT0RfUEFSVElBTFYsCisgICBTVkdBM0RfREVDTE1FVEhPRF9DUk9TU1VWLCAgICAgICAgICAvLyBOb3JtYWwKKyAgIFNWR0EzRF9ERUNMTUVUSE9EX1VWLAorICAgU1ZHQTNEX0RFQ0xNRVRIT0RfTE9PS1VQLCAgICAgICAgICAgLy8gTG9va3VwIGEgZGlzcGxhY2VtZW50IG1hcAorICAgU1ZHQTNEX0RFQ0xNRVRIT0RfTE9PS1VQUFJFU0FNUExFRCwgLy8gTG9va3VwIGEgcHJlLXNhbXBsZWQgZGlzcGxhY2VtZW50IG1hcAorfSBTVkdBM2REZWNsTWV0aG9kOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX0RFQ0xUWVBFX0ZMT0FUMSAgICAgICAgPSAgMCwKKyAgIFNWR0EzRF9ERUNMVFlQRV9GTE9BVDIgICAgICAgID0gIDEsCisgICBTVkdBM0RfREVDTFRZUEVfRkxPQVQzICAgICAgICA9ICAyLAorICAgU1ZHQTNEX0RFQ0xUWVBFX0ZMT0FUNCAgICAgICAgPSAgMywKKyAgIFNWR0EzRF9ERUNMVFlQRV9EM0RDT0xPUiAgICAgID0gIDQsCisgICBTVkdBM0RfREVDTFRZUEVfVUJZVEU0ICAgICAgICA9ICA1LAorICAgU1ZHQTNEX0RFQ0xUWVBFX1NIT1JUMiAgICAgICAgPSAgNiwKKyAgIFNWR0EzRF9ERUNMVFlQRV9TSE9SVDQgICAgICAgID0gIDcsCisgICBTVkdBM0RfREVDTFRZUEVfVUJZVEU0TiAgICAgICA9ICA4LAorICAgU1ZHQTNEX0RFQ0xUWVBFX1NIT1JUMk4gICAgICAgPSAgOSwKKyAgIFNWR0EzRF9ERUNMVFlQRV9TSE9SVDROICAgICAgID0gMTAsCisgICBTVkdBM0RfREVDTFRZUEVfVVNIT1JUMk4gICAgICA9IDExLAorICAgU1ZHQTNEX0RFQ0xUWVBFX1VTSE9SVDROICAgICAgPSAxMiwKKyAgIFNWR0EzRF9ERUNMVFlQRV9VREVDMyAgICAgICAgID0gMTMsCisgICBTVkdBM0RfREVDTFRZUEVfREVDM04gICAgICAgICA9IDE0LAorICAgU1ZHQTNEX0RFQ0xUWVBFX0ZMT0FUMTZfMiAgICAgPSAxNSwKKyAgIFNWR0EzRF9ERUNMVFlQRV9GTE9BVDE2XzQgICAgID0gMTYsCisgICBTVkdBM0RfREVDTFRZUEVfTUFYLAorfSBTVkdBM2REZWNsVHlwZTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSBkaXZpc29yIGZvciBnZW9tZXRyeSBpbnN0YW5jaW5nOworICogaXQncyBhIGRpcmVjdCB0cmFuc2xhdGlvbiBvZiB0aGUgRGlyZWN0M0QgZXF1aXZhbGVudC4KKyAqLwordHlwZWRlZiB1bmlvbiB7CisgICBzdHJ1Y3QgeworICAgICAgLyoKKyAgICAgICAqIEZvciBpbmRleCBkYXRhLCB0aGlzIG51bWJlciByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHRvIGRyYXcuCisgICAgICAgKiBGb3IgaW5zdGFuY2UgZGF0YSwgdGhpcyBudW1iZXIgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCisgICAgICAgKiBpbnN0YW5jZXMvdmVydGV4IGluIHRoaXMgc3RyZWFtCisgICAgICAgKi8KKyAgICAgIHVpbnQzMiBjb3VudCA6IDMwOworCisgICAgICAvKgorICAgICAgICogVGhpcyBpcyAxIGlmIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIGRhdGEgdGhhdCBpcyByZXBlYXRlZCBmb3IKKyAgICAgICAqIGV2ZXJ5IGluc3RhbmNlLgorICAgICAgICovCisgICAgICB1aW50MzIgaW5kZXhlZERhdGEgOiAxOworCisgICAgICAvKgorICAgICAgICogVGhpcyBpcyAxIGlmIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHBlci1pbnN0YW5jZSBkYXRhLgorICAgICAgICovCisgICAgICB1aW50MzIgaW5zdGFuY2VEYXRhIDogMTsKKyAgIH07CisKKyAgIHVpbnQzMiB2YWx1ZTsKK30gU1ZHQTNkVmVydGV4RGl2aXNvcjsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9QUklNSVRJVkVfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9QUklNSVRJVkVfVFJJQU5HTEVMSVNUICAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9QUklNSVRJVkVfUE9JTlRMSVNUICAgICAgICAgICAgICAgICAgID0gMiwKKyAgIFNWR0EzRF9QUklNSVRJVkVfTElORUxJU1QgICAgICAgICAgICAgICAgICAgID0gMywKKyAgIFNWR0EzRF9QUklNSVRJVkVfTElORVNUUklQICAgICAgICAgICAgICAgICAgID0gNCwKKyAgIFNWR0EzRF9QUklNSVRJVkVfVFJJQU5HTEVTVFJJUCAgICAgICAgICAgICAgID0gNSwKKyAgIFNWR0EzRF9QUklNSVRJVkVfVFJJQU5HTEVGQU4gICAgICAgICAgICAgICAgID0gNiwKKyAgIFNWR0EzRF9QUklNSVRJVkVfTUFYCit9IFNWR0EzZFByaW1pdGl2ZVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfQ09PUkRJTkFURV9JTlZBTElEICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9DT09SRElOQVRFX0xFRlRIQU5ERUQgICAgICAgICAgICAgICAgPSAxLAorICAgU1ZHQTNEX0NPT1JESU5BVEVfUklHSFRIQU5ERUQgICAgICAgICAgICAgICA9IDIsCisgICBTVkdBM0RfQ09PUkRJTkFURV9NQVgKK30gU1ZHQTNkQ29vcmRpbmF0ZVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfVFJBTlNGT1JNX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfVFJBTlNGT1JNX1dPUkxEICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisgICBTVkdBM0RfVFJBTlNGT1JNX1ZJRVcgICAgICAgICAgICAgICAgICAgICAgICA9IDIsCisgICBTVkdBM0RfVFJBTlNGT1JNX1BST0pFQ1RJT04gICAgICAgICAgICAgICAgICA9IDMsCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkUwICAgICAgICAgICAgICAgICAgICA9IDQsCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkUxICAgICAgICAgICAgICAgICAgICA9IDUsCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkUyICAgICAgICAgICAgICAgICAgICA9IDYsCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkUzICAgICAgICAgICAgICAgICAgICA9IDcsCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAgICA9IDgsCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkU1ICAgICAgICAgICAgICAgICAgICA9IDksCisgICBTVkdBM0RfVFJBTlNGT1JNX1RFWFRVUkU2ICAgICAgICAgICAgICAgICAgICA9IDEwLAorICAgU1ZHQTNEX1RSQU5TRk9STV9URVhUVVJFNyAgICAgICAgICAgICAgICAgICAgPSAxMSwKKyAgIFNWR0EzRF9UUkFOU0ZPUk1fV09STEQxICAgICAgICAgICAgICAgICAgICAgID0gMTIsCisgICBTVkdBM0RfVFJBTlNGT1JNX1dPUkxEMiAgICAgICAgICAgICAgICAgICAgICA9IDEzLAorICAgU1ZHQTNEX1RSQU5TRk9STV9XT1JMRDMgICAgICAgICAgICAgICAgICAgICAgPSAxNCwKKyAgIFNWR0EzRF9UUkFOU0ZPUk1fTUFYCit9IFNWR0EzZFRyYW5zZm9ybVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfTElHSFRUWVBFX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfTElHSFRUWVBFX1BPSU5UICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisgICBTVkdBM0RfTElHSFRUWVBFX1NQT1QxICAgICAgICAgICAgICAgICAgICAgICA9IDIsIC8qIDEtY29uZSwgaW4gZGVncmVlcyAqLworICAgU1ZHQTNEX0xJR0hUVFlQRV9TUE9UMiAgICAgICAgICAgICAgICAgICAgICAgPSAzLCAvKiAyLWNvbmUsIGluIHJhZGlhbnMgKi8KKyAgIFNWR0EzRF9MSUdIVFRZUEVfRElSRUNUSU9OQUwgICAgICAgICAgICAgICAgID0gNCwKKyAgIFNWR0EzRF9MSUdIVFRZUEVfTUFYCit9IFNWR0EzZExpZ2h0VHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9DVUJFRkFDRV9QT1NYICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9DVUJFRkFDRV9ORUdYICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9DVUJFRkFDRV9QT1NZICAgICAgICAgICAgICAgICAgICAgICAgID0gMiwKKyAgIFNWR0EzRF9DVUJFRkFDRV9ORUdZICAgICAgICAgICAgICAgICAgICAgICAgID0gMywKKyAgIFNWR0EzRF9DVUJFRkFDRV9QT1NaICAgICAgICAgICAgICAgICAgICAgICAgID0gNCwKKyAgIFNWR0EzRF9DVUJFRkFDRV9ORUdaICAgICAgICAgICAgICAgICAgICAgICAgID0gNSwKK30gU1ZHQTNkQ3ViZUZhY2U7CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfU0hBREVSVFlQRV9DT01QSUxFRF9EWDggICAgICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfU0hBREVSVFlQRV9WUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisgICBTVkdBM0RfU0hBREVSVFlQRV9QUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDIsCisgICBTVkdBM0RfU0hBREVSVFlQRV9NQVgKK30gU1ZHQTNkU2hhZGVyVHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9DT05TVF9UWVBFX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9DT05TVF9UWVBFX0lOVCAgICAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9DT05TVF9UWVBFX0JPT0wgICAgICAgICAgICAgICAgICAgICAgID0gMiwKK30gU1ZHQTNkU2hhZGVyQ29uc3RUeXBlOworCisjZGVmaW5lIFNWR0EzRF9NQVhfU1VSRkFDRV9GQUNFUyAgICAgICAgICAgICAgICA2CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfU1RSRVRDSF9CTFRfUE9JTlQgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICBTVkdBM0RfU1RSRVRDSF9CTFRfTElORUFSICAgICAgICAgICAgICAgICAgICA9IDEsCisgICBTVkdBM0RfU1RSRVRDSF9CTFRfTUFYCit9IFNWR0EzZFN0cmV0Y2hCbHRNb2RlOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1FVRVJZVFlQRV9PQ0NMVVNJT04gICAgICAgICAgICAgICAgICAgPSAwLAorICAgU1ZHQTNEX1FVRVJZVFlQRV9NQVgKK30gU1ZHQTNkUXVlcnlUeXBlOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1FVRVJZU1RBVEVfUEVORElORyAgICAgPSAwLCAgICAgIC8qIFdhaXRpbmcgb24gdGhlIGhvc3QgKHNldCBieSBndWVzdCkgKi8KKyAgIFNWR0EzRF9RVUVSWVNUQVRFX1NVQ0NFRURFRCAgID0gMSwgICAgICAvKiBDb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IChzZXQgYnkgaG9zdCkgKi8KKyAgIFNWR0EzRF9RVUVSWVNUQVRFX0ZBSUxFRCAgICAgID0gMiwgICAgICAvKiBDb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkgKHNldCBieSBob3N0KSAqLworICAgU1ZHQTNEX1FVRVJZU1RBVEVfTkVXICAgICAgICAgPSAzLCAgICAgIC8qIE5ldmVyIHN1Ym1pdHRlZCAoRm9yIGd1ZXN0IHVzZSBvbmx5KSAqLworfSBTVkdBM2RRdWVyeVN0YXRlOworCit0eXBlZGVmIGVudW0geworICAgU1ZHQTNEX1dSSVRFX0hPU1RfVlJBTSAgICAgICAgPSAxLAorICAgU1ZHQTNEX1JFQURfSE9TVF9WUkFNICAgICAgICAgPSAyLAorfSBTVkdBM2RUcmFuc2ZlclR5cGU7CisKKy8qCisgKiBUaGUgbWF4aW11bSBudW1iZXIgdmVydGV4IGFycmF5cyB3ZSdyZSBndWFyYW50ZWVkIHRvIHN1cHBvcnQgaW4KKyAqIFNWR0FfM0RfQ01EX0RSQVdQUklNSVRJVkVTLgorICovCisjZGVmaW5lIFNWR0EzRF9NQVhfVkVSVEVYX0FSUkFZUyAgIDMyCisKKy8qCisgKiBJZGVudGlmaWVycyBmb3IgY29tbWFuZHMgaW4gdGhlIGNvbW1hbmQgRklGTy4KKyAqCisgKiBJRHMgYmV0d2VlbiAxMDAwIGFuZCAxMDM5IChpbmNsdXNpdmUpIHdlcmUgdXNlZCBieSBvYnNvbGV0ZSB2ZXJzaW9ucyBvZgorICogdGhlIFNWR0EzRCBwcm90b2NvbCBhbmQgcmVtYWluIHJlc2VydmVkOyB0aGV5IHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aGUKKyAqIGZ1dHVyZS4KKyAqCisgKiBJRHMgYmV0d2VlbiAxMDQwIGFuZCAxOTk5IChpbmNsdXNpdmUpIGFyZSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUKKyAqIGN1cnJlbnQgU1ZHQTNEIHByb3RvY29sLgorICoKKyAqIEZJRk8gY2xpZW50cyBvdGhlciB0aGFuIFNWR0EzRCBzaG91bGQgc3RheSBiZWxvdyAxMDAwLCBvciBhdCAyMDAwCisgKiBhbmQgdXAuCisgKi8KKworI2RlZmluZSBTVkdBXzNEX0NNRF9MRUdBQ1lfQkFTRSAgICAgICAgICAgIDEwMDAKKyNkZWZpbmUgU1ZHQV8zRF9DTURfQkFTRSAgICAgICAgICAgICAgICAgICAxMDQwCisKKyNkZWZpbmUgU1ZHQV8zRF9DTURfU1VSRkFDRV9ERUZJTkUgICAgICAgICBTVkdBXzNEX0NNRF9CQVNFICsgMAorI2RlZmluZSBTVkdBXzNEX0NNRF9TVVJGQUNFX0RFU1RST1kgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxCisjZGVmaW5lIFNWR0FfM0RfQ01EX1NVUkZBQ0VfQ09QWSAgICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDIKKyNkZWZpbmUgU1ZHQV8zRF9DTURfU1VSRkFDRV9TVFJFVENIQkxUICAgICBTVkdBXzNEX0NNRF9CQVNFICsgMworI2RlZmluZSBTVkdBXzNEX0NNRF9TVVJGQUNFX0RNQSAgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyA0CisjZGVmaW5lIFNWR0FfM0RfQ01EX0NPTlRFWFRfREVGSU5FICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDUKKyNkZWZpbmUgU1ZHQV8zRF9DTURfQ09OVEVYVF9ERVNUUk9ZICAgICAgICBTVkdBXzNEX0NNRF9CQVNFICsgNgorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRUUkFOU0ZPUk0gICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyA3CisjZGVmaW5lIFNWR0FfM0RfQ01EX1NFVFpSQU5HRSAgICAgICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDgKKyNkZWZpbmUgU1ZHQV8zRF9DTURfU0VUUkVOREVSU1RBVEUgICAgICAgICBTVkdBXzNEX0NNRF9CQVNFICsgOQorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRSRU5ERVJUQVJHRVQgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxMAorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRURVhUVVJFU1RBVEUgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxMQorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRNQVRFUklBTCAgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxMgorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRMSUdIVERBVEEgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxMworI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRMSUdIVEVOQUJMRUQgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxNAorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRWSUVXUE9SVCAgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxNQorI2RlZmluZSBTVkdBXzNEX0NNRF9TRVRDTElQUExBTkUgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxNgorI2RlZmluZSBTVkdBXzNEX0NNRF9DTEVBUiAgICAgICAgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxNworI2RlZmluZSBTVkdBXzNEX0NNRF9QUkVTRU5UICAgICAgICAgICAgICAgIFNWR0FfM0RfQ01EX0JBU0UgKyAxOCAgICAvLyBEZXByZWNhdGVkCisjZGVmaW5lIFNWR0FfM0RfQ01EX1NIQURFUl9ERUZJTkUgICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDE5CisjZGVmaW5lIFNWR0FfM0RfQ01EX1NIQURFUl9ERVNUUk9ZICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDIwCisjZGVmaW5lIFNWR0FfM0RfQ01EX1NFVF9TSEFERVIgICAgICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDIxCisjZGVmaW5lIFNWR0FfM0RfQ01EX1NFVF9TSEFERVJfQ09OU1QgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDIyCisjZGVmaW5lIFNWR0FfM0RfQ01EX0RSQVdfUFJJTUlUSVZFUyAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDIzCisjZGVmaW5lIFNWR0FfM0RfQ01EX1NFVFNDSVNTT1JSRUNUICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDI0CisjZGVmaW5lIFNWR0FfM0RfQ01EX0JFR0lOX1FVRVJZICAgICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDI1CisjZGVmaW5lIFNWR0FfM0RfQ01EX0VORF9RVUVSWSAgICAgICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDI2CisjZGVmaW5lIFNWR0FfM0RfQ01EX1dBSVRfRk9SX1FVRVJZICAgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDI3CisjZGVmaW5lIFNWR0FfM0RfQ01EX1BSRVNFTlRfUkVBREJBQ0sgICAgICAgU1ZHQV8zRF9DTURfQkFTRSArIDI4ICAgIC8vIERlcHJlY2F0ZWQKKyNkZWZpbmUgU1ZHQV8zRF9DTURfQkxJVF9TVVJGQUNFX1RPX1NDUkVFTiBTVkdBXzNEX0NNRF9CQVNFICsgMjkKKyNkZWZpbmUgU1ZHQV8zRF9DTURfTUFYICAgICAgICAgICAgICAgICAgICBTVkdBXzNEX0NNRF9CQVNFICsgMzAKKworI2RlZmluZSBTVkdBXzNEX0NNRF9GVVRVUkVfTUFYICAgICAgICAgICAgIDIwMDAKKworLyoKKyAqIENvbW1vbiBzdWJzdHJ1Y3R1cmVzIHVzZWQgaW4gbXVsdGlwbGUgRklGTyBjb21tYW5kczoKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICB1bmlvbiB7CisgICAgICBzdHJ1Y3QgeworICAgICAgICAgdWludDE2ICBmdW5jdGlvbjsgICAgICAgLy8gU1ZHQTNkRm9nRnVuY3Rpb24KKyAgICAgICAgIHVpbnQ4ICAgdHlwZTsgICAgICAgICAgIC8vIFNWR0EzZEZvZ1R5cGUKKyAgICAgICAgIHVpbnQ4ICAgYmFzZTsgICAgICAgICAgIC8vIFNWR0EzZEZvZ0Jhc2UKKyAgICAgIH07CisgICAgICB1aW50MzIgICAgIHVpbnRWYWx1ZTsKKyAgIH07Cit9IFNWR0EzZEZvZ01vZGU7CisKKy8qCisgKiBVbmlxdWVseSBpZGVudGlmeSBvbmUgaW1hZ2UgKGEgMUQvMkQvM0QgYXJyYXkpIGZyb20gYSBzdXJmYWNlLiBUaGlzCisgKiBpcyBhIHN1cmZhY2UgSUQgYXMgd2VsbCBhcyBmYWNlL21pcG1hcCBpbmRpY2VzLgorICovCisKK3R5cGVkZWYKK3N0cnVjdCBTVkdBM2RTdXJmYWNlSW1hZ2VJZCB7CisgICB1aW50MzIgICAgICAgICAgICAgICBzaWQ7CisgICB1aW50MzIgICAgICAgICAgICAgICBmYWNlOworICAgdWludDMyICAgICAgICAgICAgICAgbWlwbWFwOworfSBTVkdBM2RTdXJmYWNlSW1hZ2VJZDsKKwordHlwZWRlZgorc3RydWN0IFNWR0EzZEd1ZXN0SW1hZ2UgeworICAgU1ZHQUd1ZXN0UHRyICAgICAgICAgcHRyOworCisgICAvKgorICAgICogQSBub3RlIG9uIGludGVycHJldGF0aW9uIG9mIHBpdGNoOiBUaGlzIHZhbHVlIG9mIHBpdGNoIGlzIHRoZQorICAgICogbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gdmVydGljYWxseSBhZGphY2VudCBpbWFnZQorICAgICogYmxvY2tzLiBOb3JtYWxseSB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiB0aGUgZmlyc3QKKyAgICAqIHBpeGVsIG9mIHR3byBhZGphY2VudCBzY2FubGluZXMuIFdpdGggY29tcHJlc3NlZCB0ZXh0dXJlcywKKyAgICAqIGhvd2V2ZXIsIHRoaXMgbWF5IHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4KKyAgICAqIGNvbXByZXNzaW9uIGJsb2NrcyByYXRoZXIgdGhhbiBiZXR3ZWVuIHJvd3Mgb2YgcGl4ZWxzLgorICAgICoKKyAgICAqIFhYWDogQ29tcHJlc3NlZCB0ZXh0dXJlcyBjdXJyZW50bHkgbXVzdCBiZSB0aWdodGx5IHBhY2tlZCBpbiBndWVzdCBtZW1vcnkuCisgICAgKgorICAgICogSWYgdGhlIGltYWdlIGlzIDEtZGltZW5zaW9uYWwsIHBpdGNoIGlzIGlnbm9yZWQuCisgICAgKgorICAgICogSWYgJ3BpdGNoJyBpcyB6ZXJvLCB0aGUgU1ZHQTNEIGRldmljZSBjYWxjdWxhdGVzIGEgcGl0Y2ggdmFsdWUKKyAgICAqIGFzc3VtaW5nIGVhY2ggcm93IG9mIGJsb2NrcyBpcyB0aWdodGx5IHBhY2tlZC4KKyAgICAqLworICAgdWludDMyIHBpdGNoOworfSBTVkdBM2RHdWVzdEltYWdlOworCisKKy8qCisgKiBGSUZPIGNvbW1hbmQgZm9ybWF0IGRlZmluaXRpb25zOgorICovCisKKy8qCisgKiBUaGUgZGF0YSBzaXplIGhlYWRlciBmb2xsb3dpbmcgY21kTnVtIGZvciBldmVyeSAzZCBjb21tYW5kCisgKi8KK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICBpZDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHNpemU7Cit9IFNWR0EzZENtZEhlYWRlcjsKKworLyoKKyAqIEEgc3VyZmFjZSBpcyBhIGhpZXJhcmNoeSBvZiBob3N0IFZSQU0gc3VyZmFjZXM6IDFELCAyRCwgb3IgM0QsIHdpdGgKKyAqIG9wdGlvbmFsIG1pcG1hcHMgYW5kIGN1YmUgZmFjZXMuCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHdpZHRoOworICAgdWludDMyICAgICAgICAgICAgICAgaGVpZ2h0OworICAgdWludDMyICAgICAgICAgICAgICAgZGVwdGg7Cit9IFNWR0EzZFNpemU7CisKK3R5cGVkZWYgZW51bSB7CisgICBTVkdBM0RfU1VSRkFDRV9DVUJFTUFQICAgICAgICAgICAgICA9ICgxIDw8IDApLAorICAgU1ZHQTNEX1NVUkZBQ0VfSElOVF9TVEFUSUMgICAgICAgICAgPSAoMSA8PCAxKSwKKyAgIFNWR0EzRF9TVVJGQUNFX0hJTlRfRFlOQU1JQyAgICAgICAgID0gKDEgPDwgMiksCisgICBTVkdBM0RfU1VSRkFDRV9ISU5UX0lOREVYQlVGRkVSICAgICA9ICgxIDw8IDMpLAorICAgU1ZHQTNEX1NVUkZBQ0VfSElOVF9WRVJURVhCVUZGRVIgICAgPSAoMSA8PCA0KSwKKyAgIFNWR0EzRF9TVVJGQUNFX0hJTlRfVEVYVFVSRSAgICAgICAgID0gKDEgPDwgNSksCisgICBTVkdBM0RfU1VSRkFDRV9ISU5UX1JFTkRFUlRBUkdFVCAgICA9ICgxIDw8IDYpLAorICAgU1ZHQTNEX1NVUkZBQ0VfSElOVF9ERVBUSFNURU5DSUwgICAgPSAoMSA8PCA3KSwKKyAgIFNWR0EzRF9TVVJGQUNFX0hJTlRfV1JJVEVPTkxZICAgICAgID0gKDEgPDwgOCksCit9IFNWR0EzZFN1cmZhY2VGbGFnczsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIG51bU1pcExldmVsczsKK30gU1ZHQTNkU3VyZmFjZUZhY2U7CisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2lkOworICAgU1ZHQTNkU3VyZmFjZUZsYWdzICAgICAgICAgIHN1cmZhY2VGbGFnczsKKyAgIFNWR0EzZFN1cmZhY2VGb3JtYXQgICAgICAgICBmb3JtYXQ7CisgICBTVkdBM2RTdXJmYWNlRmFjZSAgICAgICAgICAgZmFjZVtTVkdBM0RfTUFYX1NVUkZBQ0VfRkFDRVNdOworICAgLyoKKyAgICAqIEZvbGxvd2VkIGJ5IGFuIFNWR0EzZFNpemUgc3RydWN0dXJlIGZvciBlYWNoIG1pcCBsZXZlbCBpbiBlYWNoIGZhY2UuCisgICAgKgorICAgICogQSBub3RlIG9uIHN1cmZhY2Ugc2l6ZXM6IFNpemVzIGFyZSBhbHdheXMgc3BlY2lmaWVkIGluIHBpeGVscywKKyAgICAqIGV2ZW4gaWYgdGhlIHRydWUgc3VyZmFjZSBzaXplIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBtaW5pbXVtCisgICAgKiBibG9jayBzaXplIG9mIHRoZSBzdXJmYWNlJ3MgZm9ybWF0LiBGb3IgZXhhbXBsZSwgYSAzeDN4MSBEWFQxCisgICAgKiBjb21wcmVzc2VkIHRleHR1cmUgd291bGQgYWN0dWFsbHkgYmUgc3RvcmVkIGFzIGEgNHg0eDEgaW1hZ2UgaW4KKyAgICAqIG1lbW9yeS4KKyAgICAqLworfSBTVkdBM2RDbWREZWZpbmVTdXJmYWNlOyAgICAgICAvKiBTVkdBXzNEX0NNRF9TVVJGQUNFX0RFRklORSAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgc2lkOworfSBTVkdBM2RDbWREZXN0cm95U3VyZmFjZTsgICAgICAvKiBTVkdBXzNEX0NNRF9TVVJGQUNFX0RFU1RST1kgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKK30gU1ZHQTNkQ21kRGVmaW5lQ29udGV4dDsgICAgICAgLyogU1ZHQV8zRF9DTURfQ09OVEVYVF9ERUZJTkUgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKK30gU1ZHQTNkQ21kRGVzdHJveUNvbnRleHQ7ICAgICAgLyogU1ZHQV8zRF9DTURfQ09OVEVYVF9ERVNUUk9ZICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICBjaWQ7CisgICBTVkdBM2RDbGVhckZsYWcgICAgICBjbGVhckZsYWc7CisgICB1aW50MzIgICAgICAgICAgICAgICBjb2xvcjsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIGRlcHRoOworICAgdWludDMyICAgICAgICAgICAgICAgc3RlbmNpbDsKKyAgIC8qIEZvbGxvd2VkIGJ5IHZhcmlhYmxlIG51bWJlciBvZiBTVkdBM2RSZWN0IHN0cnVjdHVyZXMgKi8KK30gU1ZHQTNkQ21kQ2xlYXI7ICAgICAgICAgICAgICAgLyogU1ZHQV8zRF9DTURfQ0xFQVIgKi8KKwordHlwZWRlZgorc3RydWN0IFNWR0EzZENvcHlSZWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHg7CisgICB1aW50MzIgICAgICAgICAgICAgICB5OworICAgdWludDMyICAgICAgICAgICAgICAgdzsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGg7CisgICB1aW50MzIgICAgICAgICAgICAgICBzcmN4OworICAgdWludDMyICAgICAgICAgICAgICAgc3JjeTsKK30gU1ZHQTNkQ29weVJlY3Q7CisKK3R5cGVkZWYKK3N0cnVjdCBTVkdBM2RDb3B5Qm94IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHg7CisgICB1aW50MzIgICAgICAgICAgICAgICB5OworICAgdWludDMyICAgICAgICAgICAgICAgejsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHc7CisgICB1aW50MzIgICAgICAgICAgICAgICBoOworICAgdWludDMyICAgICAgICAgICAgICAgZDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHNyY3g7CisgICB1aW50MzIgICAgICAgICAgICAgICBzcmN5OworICAgdWludDMyICAgICAgICAgICAgICAgc3JjejsKK30gU1ZHQTNkQ29weUJveDsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHg7CisgICB1aW50MzIgICAgICAgICAgICAgICB5OworICAgdWludDMyICAgICAgICAgICAgICAgdzsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGg7Cit9IFNWR0EzZFJlY3Q7CisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICB4OworICAgdWludDMyICAgICAgICAgICAgICAgeTsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHo7CisgICB1aW50MzIgICAgICAgICAgICAgICB3OworICAgdWludDMyICAgICAgICAgICAgICAgaDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGQ7Cit9IFNWR0EzZEJveDsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHg7CisgICB1aW50MzIgICAgICAgICAgICAgICB5OworICAgdWludDMyICAgICAgICAgICAgICAgejsKK30gU1ZHQTNkUG9pbnQ7CisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICBTVkdBM2RMaWdodFR5cGUgICAgICB0eXBlOworICAgU1ZHQTNkQm9vbCAgICAgICAgICAgaW5Xb3JsZFNwYWNlOworICAgZmxvYXQgICAgICAgICAgICAgICAgZGlmZnVzZVs0XTsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIHNwZWN1bGFyWzRdOworICAgZmxvYXQgICAgICAgICAgICAgICAgYW1iaWVudFs0XTsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIHBvc2l0aW9uWzRdOworICAgZmxvYXQgICAgICAgICAgICAgICAgZGlyZWN0aW9uWzRdOworICAgZmxvYXQgICAgICAgICAgICAgICAgcmFuZ2U7CisgICBmbG9hdCAgICAgICAgICAgICAgICBmYWxsb2ZmOworICAgZmxvYXQgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24wOworICAgZmxvYXQgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24xOworICAgZmxvYXQgICAgICAgICAgICAgICAgYXR0ZW51YXRpb24yOworICAgZmxvYXQgICAgICAgICAgICAgICAgdGhldGE7CisgICBmbG9hdCAgICAgICAgICAgICAgICBwaGk7Cit9IFNWR0EzZExpZ2h0RGF0YTsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHNpZDsKKyAgIC8qIEZvbGxvd2VkIGJ5IHZhcmlhYmxlIG51bWJlciBvZiBTVkdBM2RDb3B5UmVjdCBzdHJ1Y3R1cmVzICovCit9IFNWR0EzZENtZFByZXNlbnQ7ICAgICAgICAgICAgIC8qIFNWR0FfM0RfQ01EX1BSRVNFTlQgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIFNWR0EzZFJlbmRlclN0YXRlTmFtZSAgIHN0YXRlOworICAgdW5pb24geworICAgICAgdWludDMyICAgICAgICAgICAgICAgdWludFZhbHVlOworICAgICAgZmxvYXQgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZTsKKyAgIH07Cit9IFNWR0EzZFJlbmRlclN0YXRlOworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgLyogRm9sbG93ZWQgYnkgdmFyaWFibGUgbnVtYmVyIG9mIFNWR0EzZFJlbmRlclN0YXRlIHN0cnVjdHVyZXMgKi8KK30gU1ZHQTNkQ21kU2V0UmVuZGVyU3RhdGU7ICAgICAgLyogU1ZHQV8zRF9DTURfU0VUUkVOREVSU1RBVEUgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgICAgY2lkOworICAgU1ZHQTNkUmVuZGVyVGFyZ2V0VHlwZSB0eXBlOworICAgU1ZHQTNkU3VyZmFjZUltYWdlSWQgICB0YXJnZXQ7Cit9IFNWR0EzZENtZFNldFJlbmRlclRhcmdldDsgICAgIC8qIFNWR0FfM0RfQ01EX1NFVFJFTkRFUlRBUkdFVCAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQTNkU3VyZmFjZUltYWdlSWQgIHNyYzsKKyAgIFNWR0EzZFN1cmZhY2VJbWFnZUlkICBkZXN0OworICAgLyogRm9sbG93ZWQgYnkgdmFyaWFibGUgbnVtYmVyIG9mIFNWR0EzZENvcHlCb3ggc3RydWN0dXJlcyAqLworfSBTVkdBM2RDbWRTdXJmYWNlQ29weTsgICAgICAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TVVJGQUNFX0NPUFkgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIFNWR0EzZFN1cmZhY2VJbWFnZUlkICBzcmM7CisgICBTVkdBM2RTdXJmYWNlSW1hZ2VJZCAgZGVzdDsKKyAgIFNWR0EzZEJveCAgICAgICAgICAgICBib3hTcmM7CisgICBTVkdBM2RCb3ggICAgICAgICAgICAgYm94RGVzdDsKKyAgIFNWR0EzZFN0cmV0Y2hCbHRNb2RlICBtb2RlOworfSBTVkdBM2RDbWRTdXJmYWNlU3RyZXRjaEJsdDsgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TVVJGQUNFX1NUUkVUQ0hCTFQgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIC8qCisgICAgKiBJZiB0aGUgZGlzY2FyZCBmbGFnIGlzIHByZXNlbnQgaW4gYSBzdXJmYWNlIERNQSBvcGVyYXRpb24sIHRoZSBob3N0IG1heQorICAgICogZGlzY2FyZCB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgbWlwbWFwIGxldmVsIGFuZCBmYWNlIG9mIHRoZSB0YXJnZXQKKyAgICAqIHN1cmZhY2UgYmVmb3JlIGFwcGx5aW5nIHRoZSBzdXJmYWNlIERNQSBjb250ZW50cy4KKyAgICAqLworICAgdWludDMyIGRpc2NhcmQgOiAxOworCisgICAvKgorICAgICogSWYgdGhlIHVuc3luY2hyb25pemVkIGZsYWcgaXMgcHJlc2VudCwgdGhlIGhvc3QgbWF5IHBlcmZvcm0gdGhpcyB1cGxvYWQKKyAgICAqIHdpdGhvdXQgc3luY2luZyB0byBwZW5kaW5nIHJlYWRzIG9uIHRoaXMgc3VyZmFjZS4KKyAgICAqLworICAgdWludDMyIHVuc3luY2hyb25pemVkIDogMTsKKworICAgLyoKKyAgICAqIEd1ZXN0cyAqTVVTVCogc2V0IHRoZSByZXNlcnZlZCBiaXRzIHRvIDAgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIGNvbW1hbmQKKyAgICAqIHN1ZmZpeCBhcyBmdXR1cmUgZmxhZ3MgbWF5IG9jY3VweSB0aGVzZSBiaXRzLgorICAgICovCisgICB1aW50MzIgcmVzZXJ2ZWQgOiAzMDsKK30gU1ZHQTNkU3VyZmFjZURNQUZsYWdzOworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQTNkR3Vlc3RJbWFnZSAgICAgIGd1ZXN0OworICAgU1ZHQTNkU3VyZmFjZUltYWdlSWQgIGhvc3Q7CisgICBTVkdBM2RUcmFuc2ZlclR5cGUgICAgdHJhbnNmZXI7CisgICAvKgorICAgICogRm9sbG93ZWQgYnkgdmFyaWFibGUgbnVtYmVyIG9mIFNWR0EzZENvcHlCb3ggc3RydWN0dXJlcy4gRm9yIGNvbnNpc3RlbmN5CisgICAgKiBpbiBhbGwgY2xpcHBpbmcgbG9naWMgYW5kIGNvb3JkaW5hdGUgdHJhbnNsYXRpb24sIHdlIGRlZmluZSB0aGUKKyAgICAqICJzb3VyY2UiIGluIGVhY2ggY29weUJveCBhcyB0aGUgZ3Vlc3QgaW1hZ2UgYW5kIHRoZQorICAgICogImRlc3RpbmF0aW9uIiBhcyB0aGUgaG9zdCBpbWFnZSwgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlcgorICAgICogZGlyZWN0aW9uLgorICAgICoKKyAgICAqIEZvciBlZmZpY2llbmN5LCB0aGUgU1ZHQTNEIGRldmljZSBpcyBmcmVlIHRvIGNvcHkgbW9yZSBkYXRhIHRoYW4KKyAgICAqIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIGl0IG1heSByb3VuZCBjb3B5IGJveGVzIG91dHdhcmRzIHN1Y2gKKyAgICAqIHRoYXQgdGhleSBsaWUgb24gcGFydGljdWxhciBhbGlnbm1lbnQgYm91bmRhcmllcy4KKyAgICAqLworfSBTVkdBM2RDbWRTdXJmYWNlRE1BOyAgICAgICAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TVVJGQUNFX0RNQSAqLworCisvKgorICogU1ZHQTNkQ21kU3VyZmFjZURNQVN1ZmZpeCAtLQorICoKKyAqICAgIFRoaXMgaXMgYSBjb21tYW5kIHN1ZmZpeCB0aGF0IHdpbGwgYXBwZWFyIGFmdGVyIGEgU3VyZmFjZURNQSBjb21tYW5kIGluCisgKiAgICB0aGUgRklGTy4gIEl0IGNvbnRhaW5zIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24gdGhhdCBob3N0cyBtYXkgdXNlIHRvCisgKiAgICBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBvciBwcm90ZWN0IHRoZSBndWVzdC4gIFRoaXMgc3VmZml4IGV4aXN0cyB0byBwcmVzZXJ2ZQorICogICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2hpbGUgYWxzbyBhbGxvd2luZyBmb3IgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gYmUKKyAqICAgIGltcGxlbWVudGVkLgorICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgc3VmZml4U2l6ZTsKKworICAgLyoKKyAgICAqIFRoZSBtYXhpbXVtIG9mZnNldCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWF4aW11bSBvZmZzZXQgZnJvbSB0aGUKKyAgICAqIGd1ZXN0UHRyIGJhc2UgYWRkcmVzcyB0aGF0IHdpbGwgYmUgYWNjZXNzZWQgb3Igd3JpdHRlbiB0byBkdXJpbmcgdGhpcworICAgICogc3VyZmFjZURNQS4gIElmIHRoZSBzdWZmaXggaXMgc3VwcG9ydGVkLCB0aGUgaG9zdCB3aWxsIHJlc3BlY3QgdGhpcworICAgICogYm91bmRhcnkgd2hpbGUgcGVyZm9ybWluZyBzdXJmYWNlIERNQXMuCisgICAgKgorICAgICogRGVmYXVsdHMgdG8gTUFYX1VJTlQzMgorICAgICovCisgICB1aW50MzIgbWF4aW11bU9mZnNldDsKKworICAgLyoKKyAgICAqIEEgc2V0IG9mIGZsYWdzIHRoYXQgZGVzY3JpYmVzIG9wdGltaXphdGlvbnMgdGhhdCB0aGUgaG9zdCBtYXkgcGVyZm9ybQorICAgICogd2hpbGUgcGVyZm9ybWluZyB0aGlzIHN1cmZhY2UgRE1BIG9wZXJhdGlvbi4gIFRoZSBndWVzdCBzaG91bGQgbmV2ZXIgcmVseQorICAgICogb24gYmVoYXZpb3VyIHRoYXQgaXMgZGlmZmVyZW50IHdoZW4gdGhlc2UgZmxhZ3MgYXJlIHNldCBmb3IgY29ycmVjdG5lc3MuCisgICAgKgorICAgICogRGVmYXVsdHMgdG8gMAorICAgICovCisgICBTVkdBM2RTdXJmYWNlRE1BRmxhZ3MgZmxhZ3M7Cit9IFNWR0EzZENtZFN1cmZhY2VETUFTdWZmaXg7CisKKy8qCisgKiBTVkdBXzNEX0NNRF9EUkFXX1BSSU1JVElWRVMgLS0KKyAqCisgKiAgIFRoaXMgY29tbWFuZCBpcyB0aGUgU1ZHQTNEIGRldmljZSdzIGdlbmVyaWMgZHJhd2luZyBlbnRyeSBwb2ludC4KKyAqICAgSXQgY2FuIGRyYXcgbXVsdGlwbGUgcmFuZ2VzIG9mIHByaW1pdGl2ZXMsIG9wdGlvbmFsbHkgdXNpbmcgYW4KKyAqICAgaW5kZXggYnVmZmVyLCB1c2luZyBhbiBhcmJpdHJhcnkgY29sbGVjdGlvbiBvZiB2ZXJ0ZXggYnVmZmVycy4KKyAqCisgKiAgIEVhY2ggU1ZHQTNkVmVydGV4RGVjbCBkZWZpbmVzIGEgZGlzdGluY3QgdmVydGV4IGFycmF5IHRvIGJpbmQKKyAqICAgZHVyaW5nIHRoaXMgZHJhdyBjYWxsLiBUaGUgZGVjbGFyYXRpb25zIHNwZWNpZnkgd2hpY2ggc3VyZmFjZQorICogICB0aGUgdmVydGV4IGRhdGEgbGl2ZXMgaW4sIHdoYXQgdGhhdCB2ZXJ0ZXggZGF0YSBpcyB1c2VkIGZvciwKKyAqICAgYW5kIGhvdyB0byBpbnRlcnByZXQgaXQuCisgKgorICogICBFYWNoIFNWR0EzZFByaW1pdGl2ZVJhbmdlIGRlZmluZXMgYSBjb2xsZWN0aW9uIG9mIHByaW1pdGl2ZXMKKyAqICAgdG8gcmVuZGVyIHVzaW5nIHRoZSBzYW1lIHZlcnRleCBhcnJheXMuIEFuIGluZGV4IGJ1ZmZlciBpcworICogICBvcHRpb25hbC4KKyAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgLyoKKyAgICAqIEEgcmFuZ2UgaGludCBpcyBhbiBvcHRpb25hbCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgcmFuZ2Ugb2YgaW5kaWNlcworICAgICogaW4gYW4gU1ZHQTNkQXJyYXkgdGhhdCB3aWxsIGJlIHVzZWQuIElmICdsYXN0JyBpcyB6ZXJvLCBpdCBpcyBhc3N1bWVkCisgICAgKiB0aGF0IHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSB1c2VkLgorICAgICoKKyAgICAqIFRoZXNlIGFyZSBvbmx5IGhpbnRzLiBUaGUgU1ZHQTNEIGRldmljZSBtYXkgdXNlIHRoZW0gZm9yCisgICAgKiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaWYgcG9zc2libGUsIGJ1dCBpdCdzIGFsc28gYWxsb3dlZCB0bworICAgICogaWdub3JlIHRoZXNlIHZhbHVlcy4KKyAgICAqLworICAgdWludDMyICAgICAgICAgICAgICAgZmlyc3Q7CisgICB1aW50MzIgICAgICAgICAgICAgICBsYXN0OworfSBTVkdBM2RBcnJheVJhbmdlSGludDsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIC8qCisgICAgKiBEZWZpbmUgdGhlIG9yaWdpbiBhbmQgc2hhcGUgb2YgYSB2ZXJ0ZXggb3IgaW5kZXggYXJyYXkuIEJvdGgKKyAgICAqICdvZmZzZXQnIGFuZCAnc3RyaWRlJyBhcmUgaW4gYnl0ZXMuIFRoZSBwcm92aWRlZCBzdXJmYWNlIHdpbGwgYmUKKyAgICAqIHJlaW50ZXJwcmV0ZWQgYXMgYSBmbGF0IGFycmF5IG9mIGJ5dGVzIGluIHRoZSBzYW1lIGZvcm1hdCB1c2VkCisgICAgKiBieSBzdXJmYWNlIERNQSBvcGVyYXRpb25zLiBUbyBhdm9pZCB1bm5lY2Vzc2FyeSBjb252ZXJzaW9ucywgdGhlCisgICAgKiBzdXJmYWNlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggdGhlIFNWR0EzRF9CVUZGRVIgZm9ybWF0LgorICAgICoKKyAgICAqIEluZGV4IDAgaW4gdGhlIGFycmF5IHN0YXJ0cyAnb2Zmc2V0JyBieXRlcyBpbnRvIHRoZSBzdXJmYWNlLgorICAgICogSW5kZXggMSBiZWdpbnMgYXQgYnl0ZSAnb2Zmc2V0ICsgc3RyaWRlJywgZXRjLiBBcnJheSBpbmRpY2VzIG1heQorICAgICogbm90IGJlIG5lZ2F0aXZlLgorICAgICovCisgICB1aW50MzIgICAgICAgICAgICAgICBzdXJmYWNlSWQ7CisgICB1aW50MzIgICAgICAgICAgICAgICBvZmZzZXQ7CisgICB1aW50MzIgICAgICAgICAgICAgICBzdHJpZGU7Cit9IFNWR0EzZEFycmF5OworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgLyoKKyAgICAqIERlc2NyaWJlIGEgdmVydGV4IGFycmF5J3MgZGF0YSB0eXBlLCBhbmQgZGVmaW5lIGhvdyBpdCBpcyB0byBiZQorICAgICogdXNlZCBieSB0aGUgZml4ZWQgZnVuY3Rpb24gcGlwZWxpbmUgb3IgdGhlIHZlcnRleCBzaGFkZXIuIEl0CisgICAgKiBpc24ndCB1c2VmdWwgdG8gaGF2ZSB0d28gVmVydGV4RGVjbHMgd2l0aCB0aGUgc2FtZQorICAgICogVmVydGV4QXJyYXlJZGVudGl0eSBpbiBvbmUgZHJhdyBjYWxsLgorICAgICovCisgICBTVkdBM2REZWNsVHlwZSAgICAgICB0eXBlOworICAgU1ZHQTNkRGVjbE1ldGhvZCAgICAgbWV0aG9kOworICAgU1ZHQTNkRGVjbFVzYWdlICAgICAgdXNhZ2U7CisgICB1aW50MzIgICAgICAgICAgICAgICB1c2FnZUluZGV4OworfSBTVkdBM2RWZXJ0ZXhBcnJheUlkZW50aXR5OworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQTNkVmVydGV4QXJyYXlJZGVudGl0eSAgaWRlbnRpdHk7CisgICBTVkdBM2RBcnJheSAgICAgICAgICAgICAgICBhcnJheTsKKyAgIFNWR0EzZEFycmF5UmFuZ2VIaW50ICAgICAgIHJhbmdlSGludDsKK30gU1ZHQTNkVmVydGV4RGVjbDsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIC8qCisgICAgKiBEZWZpbmUgYSBncm91cCBvZiBwcmltaXRpdmVzIHRvIHJlbmRlciwgZnJvbSBzZXF1ZW50aWFsIGluZGljZXMuCisgICAgKgorICAgICogVGhlIHZhbHVlIG9mICdwcmltaXRpdmVUeXBlJyBhbmQgJ3ByaW1pdGl2ZUNvdW50JyBpbXBseSB0aGUKKyAgICAqIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQuCisgICAgKi8KKyAgIFNWR0EzZFByaW1pdGl2ZVR5cGUgIHByaW1UeXBlOworICAgdWludDMyICAgICAgICAgICAgICAgcHJpbWl0aXZlQ291bnQ7CisKKyAgIC8qCisgICAgKiBPcHRpb25hbCBpbmRleCBidWZmZXIuIElmIGluZGV4QXJyYXkuc3VyZmFjZUlkIGlzCisgICAgKiBTVkdBM0RfSU5WQUxJRF9JRCwgd2UgcmVuZGVyIHdpdGhvdXQgYW4gaW5kZXggYnVmZmVyLiBSZW5kZXJpbmcKKyAgICAqIHdpdGhvdXQgYW4gaW5kZXggYnVmZmVyIGlzIGlkZW50aWNhbCB0byByZW5kZXJpbmcgd2l0aCBhbiBpbmRleAorICAgICogYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHNlcXVlbmNlIFswLCAxLCAyLCAzLCAuLi5dLgorICAgICoKKyAgICAqIElmIGFuIGluZGV4IGJ1ZmZlciBpcyBpbiB1c2UsIGluZGV4V2lkdGggc3BlY2lmaWVzIHRoZSB3aWR0aCBpbgorICAgICogYnl0ZXMgb2YgZWFjaCBpbmRleCB2YWx1ZS4gSXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAqIGluZGV4QXJyYXkuc3RyaWRlLgorICAgICoKKyAgICAqIChDdXJyZW50bHksIHRoZSBTVkdBM0QgZGV2aWNlIHJlcXVpcmVzIGluZGV4IGJ1ZmZlcnMgdG8gYmUgdGlnaHRseQorICAgICogcGFja2VkLiBJbiBvdGhlciB3b3JkcywgaW5kZXhXaWR0aCA9PSBpbmRleEFycmF5LnN0cmlkZSkKKyAgICAqLworICAgU1ZHQTNkQXJyYXkgICAgICAgICAgaW5kZXhBcnJheTsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGluZGV4V2lkdGg7CisKKyAgIC8qCisgICAgKiBPcHRpb25hbCBpbmRleCBiaWFzLiBUaGlzIG51bWJlciBpcyBhZGRlZCB0byBhbGwgaW5kaWNlcyBmcm9tCisgICAgKiBpbmRleEFycmF5IGJlZm9yZSB0aGV5IGFyZSB1c2VkIGFzIHZlcnRleCBhcnJheSBpbmRpY2VzLiBUaGlzCisgICAgKiBjYW4gYmUgdXNlZCBpbiBtdWx0aXBsZSB3YXlzOgorICAgICoKKyAgICAqICAtIFdoZW4gbm90IHVzaW5nIGFuIGluZGV4QXJyYXksIHRoaXMgYmlhcyBjYW4gYmUgdXNlZCB0bworICAgICogICAgc3BlY2lmeSB3aGVyZSBpbiB0aGUgdmVydGV4IGFycmF5cyB0byBiZWdpbiByZW5kZXJpbmcuCisgICAgKgorICAgICogIC0gQSBwb3NpdGl2ZSBudW1iZXIgaGVyZSBpcyBlcXVpdmFsZW50IHRvIGluY3JlYXNpbmcgdGhlCisgICAgKiAgICBvZmZzZXQgaW4gZWFjaCB2ZXJ0ZXggYXJyYXkuCisgICAgKgorICAgICogIC0gQSBuZWdhdGl2ZSBudW1iZXIgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHVzaW5nIGEgc21hbGwKKyAgICAqICAgIHZlcnRleCBhcnJheSBhbmQgYW4gaW5kZXggYnVmZmVyIHRoYXQgY29udGFpbnMgbGFyZ2UKKyAgICAqICAgIHZhbHVlcy4gVGhpcyBtYXkgYmUgdXNlZCBieSBzb21lIGFwcGxpY2F0aW9ucyB0aGF0CisgICAgKiAgICBjcm9wIGEgdmVydGV4IGJ1ZmZlciB3aXRob3V0IG1vZGlmeWluZyB0aGVpciBpbmRleAorICAgICogICAgYnVmZmVyLgorICAgICoKKyAgICAqIE5vdGUgdGhhdCByZW5kZXJpbmcgd2l0aCBhIG5lZ2F0aXZlIGJpYXMgdmFsdWUgbWF5IGJlIHNsb3dlciBhbmQKKyAgICAqIHVzZSBtb3JlIG1lbW9yeSB0aGFuIHJlbmRlcmluZyB3aXRoIGEgcG9zaXRpdmUgb3IgemVybyBiaWFzLgorICAgICovCisgICBpbnQzMiAgICAgICAgICAgICAgICBpbmRleEJpYXM7Cit9IFNWR0EzZFByaW1pdGl2ZVJhbmdlOworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgdWludDMyICAgICAgICAgICAgICAgbnVtVmVydGV4RGVjbHM7CisgICB1aW50MzIgICAgICAgICAgICAgICBudW1SYW5nZXM7CisKKyAgIC8qCisgICAgKiBUaGVyZSBhcmUgdHdvIHZhcmlhYmxlIHNpemUgYXJyYXlzIGFmdGVyIHRoZQorICAgICogU1ZHQTNkQ21kRHJhd1ByaW1pdGl2ZXMgc3RydWN0dXJlLiBJbiBvcmRlciwKKyAgICAqIHRoZXkgYXJlOgorICAgICoKKyAgICAqIDEuIFNWR0EzZFZlcnRleERlY2wsIHF1YW50aXR5ICdudW1WZXJ0ZXhEZWNscycKKyAgICAqIDIuIFNWR0EzZFByaW1pdGl2ZVJhbmdlLCBxdWFudGl0eSAnbnVtUmFuZ2VzJworICAgICogMy4gT3B0aW9uYWxseSwgU1ZHQTNkVmVydGV4RGl2aXNvciwgcXVhbnRpdHkgJ251bVZlcnRleERlY2xzJyAoY29udGFpbnMKKyAgICAqICAgIHRoZSBmcmVxdWVuY3kgZGl2aXNvciBmb3IgdGhpcyB0aGUgY29ycmVzcG9uZGluZyB2ZXJ0ZXggZGVjbCkKKyAgICAqLworfSBTVkdBM2RDbWREcmF3UHJpbWl0aXZlczsgICAgICAvKiBTVkdBXzNEX0NNRF9EUkFXUFJJTUlUSVZFUyAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgICAgIHN0YWdlOworICAgU1ZHQTNkVGV4dHVyZVN0YXRlTmFtZSAgIG5hbWU7CisgICB1bmlvbiB7CisgICAgICB1aW50MzIgICAgICAgICAgICAgICAgdmFsdWU7CisgICAgICBmbG9hdCAgICAgICAgICAgICAgICAgZmxvYXRWYWx1ZTsKKyAgIH07Cit9IFNWR0EzZFRleHR1cmVTdGF0ZTsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKKyAgIC8qIEZvbGxvd2VkIGJ5IHZhcmlhYmxlIG51bWJlciBvZiBTVkdBM2RUZXh0dXJlU3RhdGUgc3RydWN0dXJlcyAqLworfSBTVkdBM2RDbWRTZXRUZXh0dXJlU3RhdGU7ICAgICAgLyogU1ZHQV8zRF9DTURfU0VUVEVYVFVSRVNUQVRFICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICAgICAgY2lkOworICAgU1ZHQTNkVHJhbnNmb3JtVHlwZSAgICAgIHR5cGU7CisgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgbWF0cml4WzE2XTsKK30gU1ZHQTNkQ21kU2V0VHJhbnNmb3JtOyAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TRVRUUkFOU0ZPUk0gKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIG1pbjsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIG1heDsKK30gU1ZHQTNkWlJhbmdlOworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgU1ZHQTNkWlJhbmdlICAgICAgICAgelJhbmdlOworfSBTVkdBM2RDbWRTZXRaUmFuZ2U7ICAgICAgICAgICAgIC8qIFNWR0FfM0RfQ01EX1NFVFpSQU5HRSAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgZmxvYXQgICAgICAgICAgICAgICAgZGlmZnVzZVs0XTsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIGFtYmllbnRbNF07CisgICBmbG9hdCAgICAgICAgICAgICAgICBzcGVjdWxhcls0XTsKKyAgIGZsb2F0ICAgICAgICAgICAgICAgIGVtaXNzaXZlWzRdOworICAgZmxvYXQgICAgICAgICAgICAgICAgc2hpbmluZXNzOworfSBTVkdBM2RNYXRlcmlhbDsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKKyAgIFNWR0EzZEZhY2UgICAgICAgICAgIGZhY2U7CisgICBTVkdBM2RNYXRlcmlhbCAgICAgICBtYXRlcmlhbDsKK30gU1ZHQTNkQ21kU2V0TWF0ZXJpYWw7ICAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TRVRNQVRFUklBTCAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgdWludDMyICAgICAgICAgICAgICAgaW5kZXg7CisgICBTVkdBM2RMaWdodERhdGEgICAgICBkYXRhOworfSBTVkdBM2RDbWRTZXRMaWdodERhdGE7ICAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TRVRMSUdIVERBVEEgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGluZGV4OworICAgdWludDMyICAgICAgICAgICAgICAgZW5hYmxlZDsKK30gU1ZHQTNkQ21kU2V0TGlnaHRFbmFibGVkOyAgICAgIC8qIFNWR0FfM0RfQ01EX1NFVExJR0hURU5BQkxFRCAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgU1ZHQTNkUmVjdCAgICAgICAgICAgcmVjdDsKK30gU1ZHQTNkQ21kU2V0Vmlld3BvcnQ7ICAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TRVRWSUVXUE9SVCAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgU1ZHQTNkUmVjdCAgICAgICAgICAgcmVjdDsKK30gU1ZHQTNkQ21kU2V0U2Npc3NvclJlY3Q7ICAgICAgICAgLyogU1ZHQV8zRF9DTURfU0VUU0NJU1NPUlJFQ1QgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGluZGV4OworICAgZmxvYXQgICAgICAgICAgICAgICAgcGxhbmVbNF07Cit9IFNWR0EzZENtZFNldENsaXBQbGFuZTsgICAgICAgICAgIC8qIFNWR0FfM0RfQ01EX1NFVENMSVBQTEFORSAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyICAgICAgICAgICAgICAgY2lkOworICAgdWludDMyICAgICAgICAgICAgICAgc2hpZDsKKyAgIFNWR0EzZFNoYWRlclR5cGUgICAgIHR5cGU7CisgICAvKiBGb2xsb3dlZCBieSB2YXJpYWJsZSBudW1iZXIgb2YgRFdPUkRzIGZvciBzaGFkZXIgYnljb2RlICovCit9IFNWR0EzZENtZERlZmluZVNoYWRlcjsgICAgICAgICAgIC8qIFNWR0FfM0RfQ01EX1NIQURFUl9ERUZJTkUgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIHNoaWQ7CisgICBTVkdBM2RTaGFkZXJUeXBlICAgICB0eXBlOworfSBTVkdBM2RDbWREZXN0cm95U2hhZGVyOyAgICAgICAgIC8qIFNWR0FfM0RfQ01EX1NIQURFUl9ERVNUUk9ZICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICAgICBjaWQ7CisgICB1aW50MzIgICAgICAgICAgICAgICAgICByZWc7ICAgICAvKiByZWdpc3RlciBudW1iZXIgKi8KKyAgIFNWR0EzZFNoYWRlclR5cGUgICAgICAgIHR5cGU7CisgICBTVkdBM2RTaGFkZXJDb25zdFR5cGUgICBjdHlwZTsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgICAgIHZhbHVlc1s0XTsKK30gU1ZHQTNkQ21kU2V0U2hhZGVyQ29uc3Q7ICAgICAgICAvKiBTVkdBXzNEX0NNRF9TRVRfU0hBREVSX0NPTlNUICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICBjaWQ7CisgICBTVkdBM2RTaGFkZXJUeXBlICAgICB0eXBlOworICAgdWludDMyICAgICAgICAgICAgICAgc2hpZDsKK30gU1ZHQTNkQ21kU2V0U2hhZGVyOyAgICAgICAgICAgICAvKiBTVkdBXzNEX0NNRF9TRVRfU0hBREVSICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICBjaWQ7CisgICBTVkdBM2RRdWVyeVR5cGUgICAgICB0eXBlOworfSBTVkdBM2RDbWRCZWdpblF1ZXJ5OyAgICAgICAgICAgLyogU1ZHQV8zRF9DTURfQkVHSU5fUVVFUlkgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGNpZDsKKyAgIFNWR0EzZFF1ZXJ5VHlwZSAgICAgIHR5cGU7CisgICBTVkdBR3Vlc3RQdHIgICAgICAgICBndWVzdFJlc3VsdDsgIC8qIFBvaW50cyB0byBhbiBTVkdBM2RRdWVyeVJlc3VsdCBzdHJ1Y3R1cmUgKi8KK30gU1ZHQTNkQ21kRW5kUXVlcnk7ICAgICAgICAgICAgICAgICAgLyogU1ZHQV8zRF9DTURfRU5EX1FVRVJZICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICBjaWQ7ICAgICAgICAgIC8qIFNhbWUgcGFyYW1ldGVycyBwYXNzZWQgdG8gRU5EX1FVRVJZICovCisgICBTVkdBM2RRdWVyeVR5cGUgICAgICB0eXBlOworICAgU1ZHQUd1ZXN0UHRyICAgICAgICAgZ3Vlc3RSZXN1bHQ7Cit9IFNWR0EzZENtZFdhaXRGb3JRdWVyeTsgICAgICAgICAgICAgIC8qIFNWR0FfM0RfQ01EX1dBSVRfRk9SX1FVRVJZICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgICAgICAgICAgICAgICB0b3RhbFNpemU7ICAgIC8qIFNldCBieSBndWVzdCBiZWZvcmUgcXVlcnkgaXMgZW5kZWQuICovCisgICBTVkdBM2RRdWVyeVN0YXRlICAgICBzdGF0ZTsgICAgICAgIC8qIFNldCBieSBob3N0IG9yIGd1ZXN0LiBTZWUgU1ZHQTNkUXVlcnlTdGF0ZS4gKi8KKyAgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGJ5IGhvc3Qgb24gZXhpdCBmcm9tIFBFTkRJTkcgc3RhdGUgKi8KKyAgICAgIHVpbnQzMiAgICAgICAgICAgIHJlc3VsdDMyOworICAgfTsKK30gU1ZHQTNkUXVlcnlSZXN1bHQ7CisKKy8qCisgKiBTVkdBXzNEX0NNRF9CTElUX1NVUkZBQ0VfVE9fU0NSRUVOIC0tCisgKgorICogICAgVGhpcyBpcyBhIGJsaXQgZnJvbSBhbiBTVkdBM0Qgc3VyZmFjZSB0byBhIFNjcmVlbiBPYmplY3QuIEp1c3QKKyAqICAgIGxpa2UgR01SLXRvLXNjcmVlbiBibGl0cywgdGhpcyBibGl0IG1heSBiZSBkaXJlY3RlZCBhdCBhCisgKiAgICBzcGVjaWZpYyBzY3JlZW4gb3IgdG8gdGhlIHZpcnR1YWwgY29vcmRpbmF0ZSBzcGFjZS4KKyAqCisgKiAgICBUaGUgYmxpdCBjb3BpZXMgZnJvbSBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiBhbiBTVkdBM0Qgc3VyZmFjZQorICogICAgaW1hZ2UgdG8gYSByZWN0YW5ndWxhciByZWdpb24gb2YgYSBzY3JlZW4gb3Igc2NyZWVucy4KKyAqCisgKiAgICBUaGlzIGNvbW1hbmQgdGFrZXMgYW4gb3B0aW9uYWwgdmFyaWFibGUtbGVuZ3RoIGxpc3Qgb2YgY2xpcHBpbmcKKyAqICAgIHJlY3RhbmdsZXMgYWZ0ZXIgdGhlIGJvZHkgb2YgdGhlIGNvbW1hbmQuIElmIG5vIHJlY3RhbmdsZXMgYXJlCisgKiAgICBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vIGNsaXBwaW5nIHJlZ2lvbi4gVGhlIGVudGlyZSBkZXN0UmVjdCBpcworICogICAgZHJhd24gdG8uIElmIG9uZSBvciBtb3JlIHJlY3RhbmdsZXMgYXJlIGluY2x1ZGVkLCB0aGV5IGRlc2NyaWJlCisgKiAgICBhIGNsaXBwaW5nIHJlZ2lvbi4gVGhlIGNsaXAgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzIGFyZSBtZWFzdXJlZAorICogICAgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiBkZXN0UmVjdC4KKyAqCisgKiAgICBUaGlzIGNsaXBwaW5nIHJlZ2lvbiBzZXJ2ZXMgbXVsdGlwbGUgcHVycG9zZXM6CisgKgorICogICAgICAtIEl0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYW4gaXJyZWd1bGFybHkgc2hhcGVkIGJsaXQgbW9yZQorICogICAgICAgIGVmZmljaWVudGx5IHRoYW4gYnkgaXNzdWluZyBtYW55IHNlcGFyYXRlIGJsaXQgY29tbWFuZHMuCisgKgorICogICAgICAtIEl0IGlzIGVxdWl2YWxlbnQgdG8gYWxsb3dpbmcgYmxpdHMgd2l0aCBub24taW50ZWdlcgorICogICAgICAgIHNvdXJjZSBjb29yZGluYXRlcy4gWW91IGNvdWxkIGJsaXQganVzdCBvbmUgaGFsZi1waXhlbAorICogICAgICAgIG9mIGEgc291cmNlLCBmb3IgZXhhbXBsZSwgYnkgc3BlY2lmeWluZyBhIGxhcmdlcgorICogICAgICAgIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB0aGFuIHlvdSBuZWVkLCB0aGVuIHJlbW92aW5nCisgKiAgICAgICAgcGFydCBvZiBpdCB1c2luZyBhIGNsaXAgcmVjdGFuZ2xlLgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfRklGT19DQVBfU0NSRUVOX09CSkVDVAorICoKKyAqIExpbWl0YXRpb25zOgorICoKKyAqICAgIC0gQ3VycmVudGx5LCBubyBiYWNrZW5kIHN1cHBvcnRzIGJsaXRzIGZyb20gYSBtaXBtYXAgb3IgZmFjZQorICogICAgICBvdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUuCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIFNWR0EzZFN1cmZhY2VJbWFnZUlkIHNyY0ltYWdlOworICAgU1ZHQVNpZ25lZFJlY3QgICAgICAgc3JjUmVjdDsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgIGRlc3RTY3JlZW5JZDsgLyogU2NyZWVuIElEIG9yIFNWR0FfSURfSU5WQUxJRCBmb3IgdmlydC4gY29vcmRzICovCisgICBTVkdBU2lnbmVkUmVjdCAgICAgICBkZXN0UmVjdDsgICAgIC8qIFN1cHBvcnRzIHNjYWxpbmcgaWYgc3JjL3Jlc3QgZGlmZmVyZW50IHNpemUgKi8KKyAgIC8qIENsaXBwaW5nOiB6ZXJvIG9yIG1vcmUgU1ZHQVNpZ25lZFJlY3RzIGZvbGxvdyAqLworfSBTVkdBM2RDbWRCbGl0U3VyZmFjZVRvU2NyZWVuOyAgICAgICAgIC8qIFNWR0FfM0RfQ01EX0JMSVRfU1VSRkFDRV9UT19TQ1JFRU4gKi8KKworCisvKgorICogQ2FwYWJpbGl0eSBxdWVyeSBpbmRleC4KKyAqCisgKiBOb3RlczoKKyAqCisgKiAgIDEuIFNWR0EzRF9ERVZDQVBfTUFYX1RFWFRVUkVTIHJlZmxlY3RzIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICogICAgICBmaXhlZC1mdW5jdGlvbiB0ZXh0dXJlIHVuaXRzIGF2YWlsYWJsZS4gRWFjaCBvZiB0aGVzZSB1bml0cworICogICAgICB3b3JrIGluIGJvdGggRkZQIGFuZCBTaGFkZXIgbW9kZXMsIGFuZCB0aGV5IHN1cHBvcnQgdGV4dHVyZQorICogICAgICB0cmFuc2Zvcm1zIGFuZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLiBUaGUgaG9zdCBtYXkgaGF2ZSBhZGRpdGlvbmFsCisgKiAgICAgIHRleHR1cmUgaW1hZ2UgdW5pdHMgdGhhdCBhcmUgb25seSB1c2FibGUgd2l0aCBzaGFkZXJzLgorICoKKyAqICAgMi4gVGhlIEJVRkZFUl9GT1JNQVQgY2FwYWJpbGl0aWVzIGFyZSBkZXByZWNhdGVkLCBhbmQgdGhleSBhbHdheXMKKyAqICAgICAgcmV0dXJuIFRSVUUuIEV2ZW4gb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0CisgKiAgICAgIHRoZXNlIGZvcm1hdHMgbmF0aXZlbHksIHRoZSBTVkdBM0QgZGV2aWNlIHdpbGwgcHJvdmlkZSBhbiBlbXVsYXRpb24KKyAqICAgICAgd2hpY2ggc2hvdWxkIGJlIGludmlzaWJsZSB0byB0aGUgZ3Vlc3QgT1MuCisgKgorICogICAgICBJbiBnZW5lcmFsLCB0aGUgU1ZHQTNEIGRldmljZSBzaG91bGQgc3VwcG9ydCBhbnkgb3BlcmF0aW9uIG9uCisgKiAgICAgIGFueSBzdXJmYWNlIGZvcm1hdCwgaXQganVzdCBtYXkgcGVyZm9ybSBzb21lIG9mIHRoZXNlCisgKiAgICAgIG9wZXJhdGlvbnMgaW4gc29mdHdhcmUgZGVwZW5kaW5nIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlCisgKiAgICAgIGF2YWlsYWJsZSBwaHlzaWNhbCBoYXJkd2FyZS4KKyAqCisgKiAgICAgIFhYWDogSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBhZGQgY2FwYWJpbGl0aWVzIHRoYXQgZGVzY3JpYmUgaW4KKyAqICAgICAgZGV0YWlsIHdoYXQgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIGluIGhhcmR3YXJlIGZvciB3aGF0IGtpbmRzCisgKiAgICAgIG9mIG9wZXJhdGlvbnMuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgIFNWR0EzRF9ERVZDQVBfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX0xJR0hUUyAgICAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1RFWFRVUkVTICAgICAgICAgICAgICAgICAgICAgID0gMiwgIC8qIFNlZSBub3RlICgxKSAqLworICAgU1ZHQTNEX0RFVkNBUF9NQVhfQ0xJUF9QTEFORVMgICAgICAgICAgICAgICAgICAgPSAzLAorICAgU1ZHQTNEX0RFVkNBUF9WRVJURVhfU0hBREVSX1ZFUlNJT04gICAgICAgICAgICAgPSA0LAorICAgU1ZHQTNEX0RFVkNBUF9WRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICAgPSA1LAorICAgU1ZHQTNEX0RFVkNBUF9GUkFHTUVOVF9TSEFERVJfVkVSU0lPTiAgICAgICAgICAgPSA2LAorICAgU1ZHQTNEX0RFVkNBUF9GUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAgICAgICAgPSA3LAorICAgU1ZHQTNEX0RFVkNBUF9NQVhfUkVOREVSX1RBUkdFVFMgICAgICAgICAgICAgICAgPSA4LAorICAgU1ZHQTNEX0RFVkNBUF9TMjNFOF9URVhUVVJFUyAgICAgICAgICAgICAgICAgICAgPSA5LAorICAgU1ZHQTNEX0RFVkNBUF9TMTBFNV9URVhUVVJFUyAgICAgICAgICAgICAgICAgICAgPSAxMCwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX0ZJWEVEX1ZFUlRFWEJMRU5EICAgICAgICAgICAgID0gMTEsCisgICBTVkdBM0RfREVWQ0FQX0QxNl9CVUZGRVJfRk9STUFUICAgICAgICAgICAgICAgICA9IDEyLCAvKiBTZWUgbm90ZSAoMikgKi8KKyAgIFNWR0EzRF9ERVZDQVBfRDI0UzhfQlVGRkVSX0ZPUk1BVCAgICAgICAgICAgICAgID0gMTMsIC8qIFNlZSBub3RlICgyKSAqLworICAgU1ZHQTNEX0RFVkNBUF9EMjRYOF9CVUZGRVJfRk9STUFUICAgICAgICAgICAgICAgPSAxNCwgLyogU2VlIG5vdGUgKDIpICovCisgICBTVkdBM0RfREVWQ0FQX1FVRVJZX1RZUEVTICAgICAgICAgICAgICAgICAgICAgICA9IDE1LAorICAgU1ZHQTNEX0RFVkNBUF9URVhUVVJFX0dSQURJRU5UX1NBTVBMSU5HICAgICAgICAgPSAxNiwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1BPSU5UX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMTcsCisgICBTVkdBM0RfREVWQ0FQX01BWF9TSEFERVJfVEVYVFVSRVMgICAgICAgICAgICAgICA9IDE4LAorICAgU1ZHQTNEX0RFVkNBUF9NQVhfVEVYVFVSRV9XSURUSCAgICAgICAgICAgICAgICAgPSAxOSwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1RFWFRVUkVfSEVJR0hUICAgICAgICAgICAgICAgID0gMjAsCisgICBTVkdBM0RfREVWQ0FQX01BWF9WT0xVTUVfRVhURU5UICAgICAgICAgICAgICAgICA9IDIxLAorICAgU1ZHQTNEX0RFVkNBUF9NQVhfVEVYVFVSRV9SRVBFQVQgICAgICAgICAgICAgICAgPSAyMiwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1RFWFRVUkVfQVNQRUNUX1JBVElPICAgICAgICAgID0gMjMsCisgICBTVkdBM0RfREVWQ0FQX01BWF9URVhUVVJFX0FOSVNPVFJPUFkgICAgICAgICAgICA9IDI0LAorICAgU1ZHQTNEX0RFVkNBUF9NQVhfUFJJTUlUSVZFX0NPVU5UICAgICAgICAgICAgICAgPSAyNSwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1ZFUlRFWF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMjYsCisgICBTVkdBM0RfREVWQ0FQX01BWF9WRVJURVhfU0hBREVSX0lOU1RSVUNUSU9OUyAgICA9IDI3LAorICAgU1ZHQTNEX0RFVkNBUF9NQVhfRlJBR01FTlRfU0hBREVSX0lOU1RSVUNUSU9OUyAgPSAyOCwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1ZFUlRFWF9TSEFERVJfVEVNUFMgICAgICAgICAgID0gMjksCisgICBTVkdBM0RfREVWQ0FQX01BWF9GUkFHTUVOVF9TSEFERVJfVEVNUFMgICAgICAgICA9IDMwLAorICAgU1ZHQTNEX0RFVkNBUF9URVhUVVJFX09QUyAgICAgICAgICAgICAgICAgICAgICAgPSAzMSwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9YOFI4RzhCOCAgICAgICAgICAgICAgID0gMzIsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfQThSOEc4QjggICAgICAgICAgICAgICA9IDMzLAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0EyUjEwRzEwQjEwICAgICAgICAgICAgPSAzNCwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9YMVI1RzVCNSAgICAgICAgICAgICAgID0gMzUsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfQTFSNUc1QjUgICAgICAgICAgICAgICA9IDM2LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0E0UjRHNEI0ICAgICAgICAgICAgICAgPSAzNywKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9SNUc2QjUgICAgICAgICAgICAgICAgID0gMzgsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfTFVNSU5BTkNFMTYgICAgICAgICAgICA9IDM5LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0xVTUlOQU5DRThfQUxQSEE4ICAgICAgPSA0MCwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9BTFBIQTggICAgICAgICAgICAgICAgID0gNDEsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfTFVNSU5BTkNFOCAgICAgICAgICAgICA9IDQyLAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX1pfRDE2ICAgICAgICAgICAgICAgICAgPSA0MywKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9aX0QyNFM4ICAgICAgICAgICAgICAgID0gNDQsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfWl9EMjRYOCAgICAgICAgICAgICAgICA9IDQ1LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0RYVDEgICAgICAgICAgICAgICAgICAgPSA0NiwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9EWFQyICAgICAgICAgICAgICAgICAgID0gNDcsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfRFhUMyAgICAgICAgICAgICAgICAgICA9IDQ4LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0RYVDQgICAgICAgICAgICAgICAgICAgPSA0OSwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9EWFQ1ICAgICAgICAgICAgICAgICAgID0gNTAsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfQlVNUFg4TDhWOFU4ICAgICAgICAgICA9IDUxLAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0EyVzEwVjEwVTEwICAgICAgICAgICAgPSA1MiwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9CVU1QVThWOCAgICAgICAgICAgICAgID0gNTMsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfUThXOFY4VTggICAgICAgICAgICAgICA9IDU0LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0N4VjhVOCAgICAgICAgICAgICAgICAgPSA1NSwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9SX1MxMEU1ICAgICAgICAgICAgICAgID0gNTYsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfUl9TMjNFOCAgICAgICAgICAgICAgICA9IDU3LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX1JHX1MxMEU1ICAgICAgICAgICAgICAgPSA1OCwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9SR19TMjNFOCAgICAgICAgICAgICAgID0gNTksCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfQVJHQl9TMTBFNSAgICAgICAgICAgICA9IDYwLAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX0FSR0JfUzIzRTggICAgICAgICAgICAgPSA2MSwKKyAgIFNWR0EzRF9ERVZDQVBfTUFYX1ZFUlRFWF9TSEFERVJfVEVYVFVSRVMgICAgICAgID0gNjMsCisKKyAgIC8qCisgICAgKiBOb3RlIHRoYXQgTUFYX1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUUyBpcyBhIG1heGltdW0gY291bnQgb2YgY29sb3IKKyAgICAqIHJlbmRlciB0YXJnZXRzLiAgVGhpcyBkb2VzIG5vIGluY2x1ZGUgdGhlIGRlcHRoIG9yIHN0ZW5jaWwgdGFyZ2V0cy4KKyAgICAqLworICAgU1ZHQTNEX0RFVkNBUF9NQVhfU0lNVUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRTICAgPSA2NCwKKworICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX1YxNlUxNiAgICAgICAgICAgICAgICAgPSA2NSwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9HMTZSMTYgICAgICAgICAgICAgICAgID0gNjYsCisgICBTVkdBM0RfREVWQ0FQX1NVUkZBQ0VGTVRfQTE2QjE2RzE2UjE2ICAgICAgICAgICA9IDY3LAorICAgU1ZHQTNEX0RFVkNBUF9TVVJGQUNFRk1UX1VZVlkgICAgICAgICAgICAgICAgICAgPSA2OCwKKyAgIFNWR0EzRF9ERVZDQVBfU1VSRkFDRUZNVF9ZVVkyICAgICAgICAgICAgICAgICAgID0gNjksCisKKyAgIC8qCisgICAgKiBEb24ndCBhZGQgbmV3IGNhcHMgaW50byB0aGUgcHJldmlvdXMgc2VjdGlvbjsgdGhlIHZhbHVlcyBpbiB0aGlzCisgICAgKiBlbnVtZXJhdGlvbiBtdXN0IG5vdCBjaGFuZ2UuIFlvdSBjYW4gcHV0IG5ldyB2YWx1ZXMgcmlnaHQgYmVmb3JlCisgICAgKiBTVkdBM0RfREVWQ0FQX01BWC4KKyAgICAqLworICAgU1ZHQTNEX0RFVkNBUF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGluZGV4LiAqLworfSBTVkdBM2REZXZDYXBJbmRleDsKKwordHlwZWRlZiB1bmlvbiB7CisgICBCb29sICAgYjsKKyAgIHVpbnQzMiB1OworICAgaW50MzIgIGk7CisgICBmbG9hdCAgZjsKK30gU1ZHQTNkRGV2Q2FwUmVzdWx0OworCisjZW5kaWYgLyogX1NWR0EzRF9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvc3ZnYV9lc2NhcGUuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvc3ZnYV9lc2NhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjg1ZTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9zdmdhX2VzY2FwZS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IFZNd2FyZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorICogbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCisgKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHN2Z2FfZXNjYXBlLmggLS0KKyAqCisgKiAgICBEZWZpbml0aW9ucyBmb3Igb3VyIG93biAodmVuZG9yLXNwZWNpZmljKSBTVkdBIEVzY2FwZSBjb21tYW5kcy4KKyAqLworCisjaWZuZGVmIF9TVkdBX0VTQ0FQRV9IXworI2RlZmluZSBfU1ZHQV9FU0NBUEVfSF8KKworCisvKgorICogTmFtZXNwYWNlIElEcyBmb3IgdGhlIGVzY2FwZSBjb21tYW5kCisgKi8KKworI2RlZmluZSBTVkdBX0VTQ0FQRV9OU0lEX1ZNV0FSRSAweDAwMDAwMDAwCisjZGVmaW5lIFNWR0FfRVNDQVBFX05TSURfREVWRUwgIDB4RkZGRkZGRkYKKworCisvKgorICogV2l0aGluIFNWR0FfRVNDQVBFX05TSURfVk1XQVJFLCB3ZSBtdWx0aXBsZXggY29tbWFuZHMgYWNjb3JkaW5nIHRvCisgKiB0aGUgZmlyc3QgRFdPUkQgb2YgZXNjYXBlIGRhdGEgKGFmdGVyIHRoZSBuc0lEIGFuZCBzaXplKS4gQXMgYQorICogZ3VpZGVsaW5lIHdlJ3JlIHVzaW5nIHRoZSBoaWdoIHdvcmQgYW5kIGxvdyB3b3JkIGFzIGEgbWFqb3IgYW5kCisgKiBtaW5vciBjb21tYW5kIG51bWJlciwgcmVzcGVjdGl2ZWx5LgorICoKKyAqIE1ham9yIGNvbW1hbmQgbnVtYmVyIGFsbG9jYXRpb246CisgKgorICogICAwMDAwOiBSZXNlcnZlZAorICogICAwMDAxOiBTVkdBX0VTQ0FQRV9WTVdBUkVfTE9HIChzdmdhX2JpbmFyeV9sb2dnZXIuaCkKKyAqICAgMDAwMjogU1ZHQV9FU0NBUEVfVk1XQVJFX1ZJREVPIChzdmdhX292ZXJsYXkuaCkKKyAqICAgMDAwMzogU1ZHQV9FU0NBUEVfVk1XQVJFX0hJTlQgKHN2Z2FfZXNjYXBlLmgpCisgKi8KKworI2RlZmluZSBTVkdBX0VTQ0FQRV9WTVdBUkVfTUFKT1JfTUFTSyAgMHhGRkZGMDAwMAorCisKKy8qCisgKiBTVkdBIEhpbnQgY29tbWFuZHMuCisgKgorICogVGhlc2UgZXNjYXBlcyBsZXQgdGhlIFNWR0EgZHJpdmVyIHByb3ZpZGUgb3B0aW9uYWwgaW5mb3JtYXRpb24gdG8KKyAqIGhlIGhvc3QgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBndWVzdCBvciBndWVzdCBhcHBsaWNhdGlvbnMuIFRoZQorICogaG9zdCBjYW4gdXNlIHRoZXNlIGhpbnRzIHRvIG1ha2UgdXNlciBpbnRlcmZhY2Ugb3IgcGVyZm9ybWFuY2UKKyAqIGRlY2lzaW9ucy4KKyAqCisgKiBOb3RlczoKKyAqCisgKiAgIC0gU1ZHQV9FU0NBUEVfVk1XQVJFX0hJTlRfRlVMTFNDUkVFTiBpcyBkZXByZWNhdGVkIGZvciBndWVzdHMKKyAqICAgICB0aGF0IHVzZSB0aGUgU1ZHQSBTY3JlZW4gT2JqZWN0IGV4dGVuc2lvbi4gSW5zdGVhZCBvZiBzZW5kaW5nCisgKiAgICAgdGhpcyBlc2NhcGUsIHVzZSB0aGUgU1ZHQV9TQ1JFRU5fRlVMTFNDUkVFTl9ISU5UIGZsYWcgb24geW91cgorICogICAgIFNjcmVlbiBPYmplY3QuCisgKi8KKworI2RlZmluZSBTVkdBX0VTQ0FQRV9WTVdBUkVfSElOVCAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgU1ZHQV9FU0NBUEVfVk1XQVJFX0hJTlRfRlVMTFNDUkVFTiAgICAweDAwMDMwMDAxICAvLyBEZXByZWNhdGVkCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgY29tbWFuZDsKKyAgIHVpbnQzMiBmdWxsc2NyZWVuOworICAgc3RydWN0IHsKKyAgICAgIGludDMyIHgsIHk7CisgICB9IG1vbml0b3JQb3NpdGlvbjsKK30gU1ZHQUVzY2FwZUhpbnRGdWxsc2NyZWVuOworCisjZW5kaWYgLyogX1NWR0FfRVNDQVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3N2Z2Ffb3ZlcmxheS5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9zdmdhX292ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzUzZDczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9zdmdhX292ZXJsYXkuaApAQCAtMCwwICsxLDIwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgVk13YXJlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksCisgKiBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKKyAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3ZnYV9vdmVybGF5LmggLS0KKyAqCisgKiAgICBEZWZpbml0aW9ucyBmb3IgdmlkZW8tb3ZlcmxheSBzdXBwb3J0LgorICovCisKKyNpZm5kZWYgX1NWR0FfT1ZFUkxBWV9IXworI2RlZmluZSBfU1ZHQV9PVkVSTEFZX0hfCisKKyNpbmNsdWRlICJzdmdhX3JlZy5oIgorCisvKgorICogVmlkZW8gZm9ybWF0cyB3ZSBzdXBwb3J0CisgKi8KKworI2RlZmluZSBWTVdBUkVfRk9VUkNDX1lWMTIgMHgzMjMxNTY1OSAvLyAnWScgJ1YnICcxJyAnMicKKyNkZWZpbmUgVk1XQVJFX0ZPVVJDQ19ZVVkyIDB4MzI1OTU1NTkgLy8gJ1knICdVJyAnWScgJzInCisjZGVmaW5lIFZNV0FSRV9GT1VSQ0NfVVlWWSAweDU5NTY1OTU1IC8vICdVJyAnWScgJ1YnICdZJworCit0eXBlZGVmIGVudW0geworICAgU1ZHQV9PVkVSTEFZX0ZPUk1BVF9JTlZBTElEID0gMCwKKyAgIFNWR0FfT1ZFUkxBWV9GT1JNQVRfWVYxMiA9IFZNV0FSRV9GT1VSQ0NfWVYxMiwKKyAgIFNWR0FfT1ZFUkxBWV9GT1JNQVRfWVVZMiA9IFZNV0FSRV9GT1VSQ0NfWVVZMiwKKyAgIFNWR0FfT1ZFUkxBWV9GT1JNQVRfVVlWWSA9IFZNV0FSRV9GT1VSQ0NfVVlWWSwKK30gU1ZHQU92ZXJsYXlGb3JtYXQ7CisKKyNkZWZpbmUgU1ZHQV9WSURFT19DT0xPUktFWV9NQVNLICAgICAgICAgICAgIDB4MDBmZmZmZmYKKworI2RlZmluZSBTVkdBX0VTQ0FQRV9WTVdBUkVfVklERU8gICAgICAgICAgICAgMHgwMDAyMDAwMAorCisjZGVmaW5lIFNWR0FfRVNDQVBFX1ZNV0FSRV9WSURFT19TRVRfUkVHUyAgICAweDAwMDIwMDAxCisgICAgICAgIC8qIEZJRk8gZXNjYXBlIGxheW91dDoKKyAgICAgICAgICogVHlwZSwgU3RyZWFtIElkLCAoUmVnaXN0ZXIgSWQsIFZhbHVlKSBwYWlycyAqLworCisjZGVmaW5lIFNWR0FfRVNDQVBFX1ZNV0FSRV9WSURFT19GTFVTSCAgICAgICAweDAwMDIwMDAyCisgICAgICAgIC8qIEZJRk8gZXNjYXBlIGxheW91dDoKKyAgICAgICAgICogVHlwZSwgU3RyZWFtIElkICovCisKK3R5cGVkZWYKK3N0cnVjdCBTVkdBRXNjYXBlVmlkZW9TZXRSZWdzIHsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MzIgY21kVHlwZTsKKyAgICAgIHVpbnQzMiBzdHJlYW1JZDsKKyAgIH0gaGVhZGVyOworCisgICAvLyBNYXkgaW5jbHVkZSB6ZXJvIG9yIG1vcmUgaXRlbXMuCisgICBzdHJ1Y3QgeworICAgICAgdWludDMyIHJlZ2lzdGVySWQ7CisgICAgICB1aW50MzIgdmFsdWU7CisgICB9IGl0ZW1zWzFdOworfSBTVkdBRXNjYXBlVmlkZW9TZXRSZWdzOworCit0eXBlZGVmCitzdHJ1Y3QgU1ZHQUVzY2FwZVZpZGVvRmx1c2ggeworICAgdWludDMyIGNtZFR5cGU7CisgICB1aW50MzIgc3RyZWFtSWQ7Cit9IFNWR0FFc2NhcGVWaWRlb0ZsdXNoOworCisKKy8qCisgKiBTdHJ1Y3QgZGVmaW5pdGlvbnMgZm9yIHRoZSB2aWRlbyBvdmVybGF5IGNvbW1hbmRzIGJ1aWx0IG9uCisgKiBTVkdBRmlmb0NtZEVzY2FwZS4KKyAqLwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiBjb21tYW5kOworICAgdWludDMyIG92ZXJsYXk7Cit9IFNWR0FGaWZvRXNjYXBlQ21kVmlkZW9CYXNlOworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQUZpZm9Fc2NhcGVDbWRWaWRlb0Jhc2UgdmlkZW9DbWQ7Cit9IFNWR0FGaWZvRXNjYXBlQ21kVmlkZW9GbHVzaDsKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIFNWR0FGaWZvRXNjYXBlQ21kVmlkZW9CYXNlIHZpZGVvQ21kOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQzMiByZWdJZDsKKyAgICAgIHVpbnQzMiB2YWx1ZTsKKyAgIH0gaXRlbXNbMV07Cit9IFNWR0FGaWZvRXNjYXBlQ21kVmlkZW9TZXRSZWdzOworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQUZpZm9Fc2NhcGVDbWRWaWRlb0Jhc2UgdmlkZW9DbWQ7CisgICBzdHJ1Y3QgeworICAgICAgdWludDMyIHJlZ0lkOworICAgICAgdWludDMyIHZhbHVlOworICAgfSBpdGVtc1tTVkdBX1ZJREVPX05VTV9SRUdTXTsKK30gU1ZHQUZpZm9Fc2NhcGVDbWRWaWRlb1NldEFsbFJlZ3M7CisKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFZNd2FyZVZpZGVvR2V0QXR0cmlidXRlcyAtLQorICoKKyAqICAgICAgQ29tcHV0ZXMgdGhlIHNpemUsIHBpdGNoZXMgYW5kIG9mZnNldHMgZm9yIFlVViBmcmFtZXMuCisgKgorICogUmVzdWx0czoKKyAqICAgICAgVFJVRSBvbiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0Ugb24gZmFpbHVyZS4KKyAqCisgKiBTaWRlIGVmZmVjdHM6CisgKiAgICAgIFBpdGNoZXMgYW5kIG9mZnNldHMgZm9yIHRoZSBnaXZlbiBZVVYgZnJhbWUgYXJlIHB1dCBpbiAncGl0Y2hlcycKKyAqICAgICAgYW5kICdvZmZzZXRzJyByZXNwZWN0aXZlbHkuIFRoZXkgYXJlIGJvdGggb3B0aW9uYWwgdGhvdWdoLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorVk13YXJlVmlkZW9HZXRBdHRyaWJ1dGVzKGNvbnN0IFNWR0FPdmVybGF5Rm9ybWF0IGZvcm1hdCwgICAgLy8gSU4KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgKndpZHRoLCAgICAgICAgICAgICAgICAgICAgIC8vIElOIC8gT1VUCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyICpoZWlnaHQsICAgICAgICAgICAgICAgICAgICAvLyBJTiAvIE9VVAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMiAqc2l6ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gT1VUCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyICpwaXRjaGVzLCAgICAgICAgICAgICAgICAgICAvLyBPVVQgKG9wdGlvbmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMiAqb2Zmc2V0cykgICAgICAgICAgICAgICAgICAgLy8gT1VUIChvcHRpb25hbCkKK3sKKyAgICBpbnQgdG1wOworCisgICAgKndpZHRoID0gKCp3aWR0aCArIDEpICYgfjE7CisKKyAgICBpZiAob2Zmc2V0cykgeworICAgICAgICBvZmZzZXRzWzBdID0gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgVk1XQVJFX0ZPVVJDQ19ZVjEyOgorICAgICAgICpoZWlnaHQgPSAoKmhlaWdodCArIDEpICYgfjE7CisgICAgICAgKnNpemUgPSAoKndpZHRoICsgMykgJiB+MzsKKworICAgICAgIGlmIChwaXRjaGVzKSB7CisgICAgICAgICAgcGl0Y2hlc1swXSA9ICpzaXplOworICAgICAgIH0KKworICAgICAgICpzaXplICo9ICpoZWlnaHQ7CisKKyAgICAgICBpZiAob2Zmc2V0cykgeworICAgICAgICAgIG9mZnNldHNbMV0gPSAqc2l6ZTsKKyAgICAgICB9CisKKyAgICAgICB0bXAgPSAoKCp3aWR0aCA+PiAxKSArIDMpICYgfjM7CisKKyAgICAgICBpZiAocGl0Y2hlcykgeworICAgICAgICAgIHBpdGNoZXNbMV0gPSBwaXRjaGVzWzJdID0gdG1wOworICAgICAgIH0KKworICAgICAgIHRtcCAqPSAoKmhlaWdodCA+PiAxKTsKKyAgICAgICAqc2l6ZSArPSB0bXA7CisKKyAgICAgICBpZiAob2Zmc2V0cykgeworICAgICAgICAgIG9mZnNldHNbMl0gPSAqc2l6ZTsKKyAgICAgICB9CisKKyAgICAgICAqc2l6ZSArPSB0bXA7CisgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFZNV0FSRV9GT1VSQ0NfWVVZMjoKKyAgICBjYXNlIFZNV0FSRV9GT1VSQ0NfVVlWWToKKyAgICAgICAqc2l6ZSA9ICp3aWR0aCAqIDI7CisKKyAgICAgICBpZiAocGl0Y2hlcykgeworICAgICAgICAgIHBpdGNoZXNbMF0gPSAqc2l6ZTsKKyAgICAgICB9CisKKyAgICAgICAqc2l6ZSAqPSAqaGVpZ2h0OworICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZiAvLyBfU1ZHQV9PVkVSTEFZX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3N2Z2FfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3N2Z2FfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5NmMyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvc3ZnYV9yZWcuaApAQCAtMCwwICsxLDEzNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA5IFZNd2FyZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKyAqIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorICogbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCisgKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHN2Z2FfcmVnLmggLS0KKyAqCisgKiAgICBWaXJ0dWFsIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgVk13YXJlIFNWR0EgSUkgZGV2aWNlLgorICovCisKKyNpZm5kZWYgX1NWR0FfUkVHX0hfCisjZGVmaW5lIF9TVkdBX1JFR19IXworCisvKgorICogUENJIGRldmljZSBJRHMuCisgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTVdBUkUgICAgICAgICAgICAweDE1QUQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTVdBUkVfU1ZHQTIgICAgICAweDA0MDUKKworLyoKKyAqIExlZ2FsIHZhbHVlcyBmb3IgdGhlIFNWR0FfUkVHX0NVUlNPUl9PTiByZWdpc3RlciBpbiBvbGQtZmFzaGlvbmVkCisgKiBjdXJzb3IgYnlwYXNzIG1vZGUuIFRoaXMgaXMgc3RpbGwgc3VwcG9ydGVkLCBidXQgbm8gbmV3IGd1ZXN0CisgKiBkcml2ZXJzIHNob3VsZCB1c2UgaXQuCisgKi8KKyNkZWZpbmUgU1ZHQV9DVVJTT1JfT05fSElERSAgICAgICAgICAgIDB4MCAgIC8qIE11c3QgYmUgMCB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFNWR0FfQ1VSU09SX09OX1NIT1cgICAgICAgICAgICAweDEgICAvKiBNdXN0IGJlIDEgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBTVkdBX0NVUlNPUl9PTl9SRU1PVkVfRlJPTV9GQiAgMHgyICAgLyogUmVtb3ZlIHRoZSBjdXJzb3IgZnJvbSB0aGUgZnJhbWVidWZmZXIgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlZSB3aGF0J3MgdW5kZXIgaXQgKi8KKyNkZWZpbmUgU1ZHQV9DVVJTT1JfT05fUkVTVE9SRV9UT19GQiAgIDB4MyAgIC8qIFB1dCB0aGUgY3Vyc29yIGJhY2sgaW4gdGhlIGZyYW1lYnVmZmVyIHNvIHRoZSB1c2VyIGNhbiBzZWUgaXQgKi8KKworLyoKKyAqIFRoZSBtYXhpbXVtIGZyYW1lYnVmZmVyIHNpemUgdGhhdCBjYW4gdHJhY2VkIGZvciBlLmcuIGd1ZXN0cyBpbiBWRVNBIG1vZGUuCisgKiBUaGUgY2hhbmdlTWFwIGluIHRoZSBtb25pdG9yIGlzIHByb3BvcnRpb25hbCB0byB0aGlzIG51bWJlci4gVGhlcmVmb3JlLCB3ZSdkCisgKiBsaWtlIHRvIGtlZXAgaXQgYXMgc21hbGwgYXMgcG9zc2libGUgdG8gcmVkdWNlIG1vbml0b3Igb3ZlcmhlYWQgKHVzaW5nCisgKiBTVkdBX1ZSQU1fTUFYX1NJWkUgZm9yIHRoaXMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBzaGFyZWQgYXJlYSBieSBvdmVyCisgKiA0ayEpLgorICoKKyAqIE5COiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB0aGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDB4ZmYwMDAwLgorICogICAgIFNlZSBidWcgMzM1MDcyLgorICovCisjZGVmaW5lIFNWR0FfRkJfTUFYX1RSQUNFQUJMRV9TSVpFICAgICAgMHgxMDAwMDAwCisKKyNkZWZpbmUgU1ZHQV9NQVhfUFNFVURPQ09MT1JfREVQVEggICAgICA4CisjZGVmaW5lIFNWR0FfTUFYX1BTRVVET0NPTE9SUyAgICAgICAgICAgKDEgPDwgU1ZHQV9NQVhfUFNFVURPQ09MT1JfREVQVEgpCisjZGVmaW5lIFNWR0FfTlVNX1BBTEVUVEVfUkVHUyAgICAgICAgICAgKDMgKiBTVkdBX01BWF9QU0VVRE9DT0xPUlMpCisKKyNkZWZpbmUgU1ZHQV9NQUdJQyAgICAgICAgIDB4OTAwMDAwVUwKKyNkZWZpbmUgU1ZHQV9NQUtFX0lEKHZlcikgIChTVkdBX01BR0lDIDw8IDggfCAodmVyKSkKKworLyogVmVyc2lvbiAyIGxldCB0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWUgYnVmZmVyIGJlIHVuc2lnbmVkIG9uIFdpbjMyICovCisjZGVmaW5lIFNWR0FfVkVSU0lPTl8yICAgICAyCisjZGVmaW5lIFNWR0FfSURfMiAgICAgICAgICBTVkdBX01BS0VfSUQoU1ZHQV9WRVJTSU9OXzIpCisKKy8qIFZlcnNpb24gMSBoYXMgbmV3IHJlZ2lzdGVycyBzdGFydGluZyB3aXRoIFNWR0FfUkVHX0NBUEFCSUxJVElFUyBzbworICAgUEFMRVRURV9CQVNFIGhhcyBtb3ZlZCAqLworI2RlZmluZSBTVkdBX1ZFUlNJT05fMSAgICAgMQorI2RlZmluZSBTVkdBX0lEXzEgICAgICAgICAgU1ZHQV9NQUtFX0lEKFNWR0FfVkVSU0lPTl8xKQorCisvKiBWZXJzaW9uIDAgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiAqLworI2RlZmluZSBTVkdBX1ZFUlNJT05fMCAgICAgMAorI2RlZmluZSBTVkdBX0lEXzAgICAgICAgICAgU1ZHQV9NQUtFX0lEKFNWR0FfVkVSU0lPTl8wKQorCisvKiAiSW52YWxpZCIgdmFsdWUgZm9yIGFsbCBTVkdBIElEcy4gKFZlcnNpb24gSUQsIHNjcmVlbiBvYmplY3QgSUQsIHN1cmZhY2UgSUQuLi4pICovCisjZGVmaW5lIFNWR0FfSURfSU5WQUxJRCAgICAweEZGRkZGRkZGCisKKy8qIFBvcnQgb2Zmc2V0cywgcmVsYXRpdmUgdG8gQkFSMCAqLworI2RlZmluZSBTVkdBX0lOREVYX1BPUlQgICAgICAgICAweDAKKyNkZWZpbmUgU1ZHQV9WQUxVRV9QT1JUICAgICAgICAgMHgxCisjZGVmaW5lIFNWR0FfQklPU19QT1JUICAgICAgICAgIDB4MgorI2RlZmluZSBTVkdBX0lSUVNUQVRVU19QT1JUICAgICAweDgKKworLyoKKyAqIEludGVycnVwdCBzb3VyY2UgZmxhZ3MgZm9yIElSUVNUQVRVU19QT1JUIGFuZCBJUlFNQVNLLgorICoKKyAqIEludGVycnVwdHMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGhlCisgKiBTVkdBX0NBUF9JUlFNQVNLIGNhcGFiaWxpdHkgaXMgcHJlc2VudC4KKyAqLworI2RlZmluZSBTVkdBX0lSUUZMQUdfQU5ZX0ZFTkNFICAgICAgICAgICAgMHgxICAgIC8qIEFueSBmZW5jZSB3YXMgcGFzc2VkICovCisjZGVmaW5lIFNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTICAgICAgICAweDIgICAgLyogTWFkZSBmb3J3YXJkIHByb2dyZXNzIGluIHRoZSBGSUZPICovCisjZGVmaW5lIFNWR0FfSVJRRkxBR19GRU5DRV9HT0FMICAgICAgICAgICAweDQgICAgLyogU1ZHQV9GSUZPX0ZFTkNFX0dPQUwgcmVhY2hlZCAqLworCisvKgorICogUmVnaXN0ZXJzCisgKi8KKworZW51bSB7CisgICBTVkdBX1JFR19JRCA9IDAsCisgICBTVkdBX1JFR19FTkFCTEUgPSAxLAorICAgU1ZHQV9SRUdfV0lEVEggPSAyLAorICAgU1ZHQV9SRUdfSEVJR0hUID0gMywKKyAgIFNWR0FfUkVHX01BWF9XSURUSCA9IDQsCisgICBTVkdBX1JFR19NQVhfSEVJR0hUID0gNSwKKyAgIFNWR0FfUkVHX0RFUFRIID0gNiwKKyAgIFNWR0FfUkVHX0JJVFNfUEVSX1BJWEVMID0gNywgICAgICAgLyogQ3VycmVudCBicHAgaW4gdGhlIGd1ZXN0ICovCisgICBTVkdBX1JFR19QU0VVRE9DT0xPUiA9IDgsCisgICBTVkdBX1JFR19SRURfTUFTSyA9IDksCisgICBTVkdBX1JFR19HUkVFTl9NQVNLID0gMTAsCisgICBTVkdBX1JFR19CTFVFX01BU0sgPSAxMSwKKyAgIFNWR0FfUkVHX0JZVEVTX1BFUl9MSU5FID0gMTIsCisgICBTVkdBX1JFR19GQl9TVEFSVCA9IDEzLCAgICAgICAgICAgIC8qIChEZXByZWNhdGVkKSAqLworICAgU1ZHQV9SRUdfRkJfT0ZGU0VUID0gMTQsCisgICBTVkdBX1JFR19WUkFNX1NJWkUgPSAxNSwKKyAgIFNWR0FfUkVHX0ZCX1NJWkUgPSAxNiwKKworICAgLyogSUQgMCBpbXBsZW1lbnRhdGlvbiBvbmx5IGhhZCB0aGUgYWJvdmUgcmVnaXN0ZXJzLCB0aGVuIHRoZSBwYWxldHRlICovCisKKyAgIFNWR0FfUkVHX0NBUEFCSUxJVElFUyA9IDE3LAorICAgU1ZHQV9SRUdfTUVNX1NUQVJUID0gMTgsICAgICAgICAgICAvKiAoRGVwcmVjYXRlZCkgKi8KKyAgIFNWR0FfUkVHX01FTV9TSVpFID0gMTksCisgICBTVkdBX1JFR19DT05GSUdfRE9ORSA9IDIwLCAgICAgICAgIC8qIFNldCB3aGVuIG1lbW9yeSBhcmVhIGNvbmZpZ3VyZWQgKi8KKyAgIFNWR0FfUkVHX1NZTkMgPSAyMSwgICAgICAgICAgICAgICAgLyogU2VlICJGSUZPIFN5bmNocm9uaXphdGlvbiBSZWdpc3RlcnMiICovCisgICBTVkdBX1JFR19CVVNZID0gMjIsICAgICAgICAgICAgICAgIC8qIFNlZSAiRklGTyBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXJzIiAqLworICAgU1ZHQV9SRUdfR1VFU1RfSUQgPSAyMywgICAgICAgICAgICAvKiBTZXQgZ3Vlc3QgT1MgaWRlbnRpZmllciAqLworICAgU1ZHQV9SRUdfQ1VSU09SX0lEID0gMjQsICAgICAgICAgICAvKiAoRGVwcmVjYXRlZCkgKi8KKyAgIFNWR0FfUkVHX0NVUlNPUl9YID0gMjUsICAgICAgICAgICAgLyogKERlcHJlY2F0ZWQpICovCisgICBTVkdBX1JFR19DVVJTT1JfWSA9IDI2LCAgICAgICAgICAgIC8qIChEZXByZWNhdGVkKSAqLworICAgU1ZHQV9SRUdfQ1VSU09SX09OID0gMjcsICAgICAgICAgICAvKiAoRGVwcmVjYXRlZCkgKi8KKyAgIFNWR0FfUkVHX0hPU1RfQklUU19QRVJfUElYRUwgPSAyOCwgLyogKERlcHJlY2F0ZWQpICovCisgICBTVkdBX1JFR19TQ1JBVENIX1NJWkUgPSAyOSwgICAgICAgIC8qIE51bWJlciBvZiBzY3JhdGNoIHJlZ2lzdGVycyAqLworICAgU1ZHQV9SRUdfTUVNX1JFR1MgPSAzMCwgICAgICAgICAgICAvKiBOdW1iZXIgb2YgRklGTyByZWdpc3RlcnMgKi8KKyAgIFNWR0FfUkVHX05VTV9ESVNQTEFZUyA9IDMxLCAgICAgICAgLyogKERlcHJlY2F0ZWQpICovCisgICBTVkdBX1JFR19QSVRDSExPQ0sgPSAzMiwgICAgICAgICAgIC8qIEZpeGVkIHBpdGNoIGZvciBhbGwgbW9kZXMgKi8KKyAgIFNWR0FfUkVHX0lSUU1BU0sgPSAzMywgICAgICAgICAgICAgLyogSW50ZXJydXB0IG1hc2sgKi8KKworICAgLyogTGVnYWN5IG11bHRpLW1vbml0b3Igc3VwcG9ydCAqLworICAgU1ZHQV9SRUdfTlVNX0dVRVNUX0RJU1BMQVlTID0gMzQsLyogTnVtYmVyIG9mIGd1ZXN0IGRpc3BsYXlzIGluIFgvWSBkaXJlY3Rpb24gKi8KKyAgIFNWR0FfUkVHX0RJU1BMQVlfSUQgPSAzNSwgICAgICAgIC8qIERpc3BsYXkgSUQgZm9yIHRoZSBmb2xsb3dpbmcgZGlzcGxheSBhdHRyaWJ1dGVzICovCisgICBTVkdBX1JFR19ESVNQTEFZX0lTX1BSSU1BUlkgPSAzNiwvKiBXaGV0aGVyIHRoaXMgaXMgYSBwcmltYXJ5IGRpc3BsYXkgKi8KKyAgIFNWR0FfUkVHX0RJU1BMQVlfUE9TSVRJT05fWCA9IDM3LC8qIFRoZSBkaXNwbGF5IHBvc2l0aW9uIHggKi8KKyAgIFNWR0FfUkVHX0RJU1BMQVlfUE9TSVRJT05fWSA9IDM4LC8qIFRoZSBkaXNwbGF5IHBvc2l0aW9uIHkgKi8KKyAgIFNWR0FfUkVHX0RJU1BMQVlfV0lEVEggPSAzOSwgICAgIC8qIFRoZSBkaXNwbGF5J3Mgd2lkdGggKi8KKyAgIFNWR0FfUkVHX0RJU1BMQVlfSEVJR0hUID0gNDAsICAgIC8qIFRoZSBkaXNwbGF5J3MgaGVpZ2h0ICovCisKKyAgIC8qIFNlZSAiR3Vlc3QgbWVtb3J5IHJlZ2lvbnMiIGJlbG93LiAqLworICAgU1ZHQV9SRUdfR01SX0lEID0gNDEsCisgICBTVkdBX1JFR19HTVJfREVTQ1JJUFRPUiA9IDQyLAorICAgU1ZHQV9SRUdfR01SX01BWF9JRFMgPSA0MywKKyAgIFNWR0FfUkVHX0dNUl9NQVhfREVTQ1JJUFRPUl9MRU5HVEggPSA0NCwKKworICAgU1ZHQV9SRUdfVFJBQ0VTID0gNDUsICAgICAgICAgICAgLyogRW5hYmxlIHRyYWNlLWJhc2VkIHVwZGF0ZXMgZXZlbiB3aGVuIEZJRk8gaXMgb24gKi8KKyAgIFNWR0FfUkVHX1RPUCA9IDQ2LCAgICAgICAgICAgICAgIC8qIE11c3QgYmUgMSBtb3JlIHRoYW4gdGhlIGxhc3QgcmVnaXN0ZXIgKi8KKworICAgU1ZHQV9QQUxFVFRFX0JBU0UgPSAxMDI0LCAgICAgICAgLyogQmFzZSBvZiBTVkdBIGNvbG9yIG1hcCAqLworICAgLyogTmV4dCA3NjggKD09IDI1NiozKSByZWdpc3RlcnMgZXhpc3QgZm9yIGNvbG9ybWFwICovCisKKyAgIFNWR0FfU0NSQVRDSF9CQVNFID0gU1ZHQV9QQUxFVFRFX0JBU0UgKyBTVkdBX05VTV9QQUxFVFRFX1JFR1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhc2Ugb2Ygc2NyYXRjaCByZWdpc3RlcnMgKi8KKyAgIC8qIE5leHQgcmVnW1NWR0FfUkVHX1NDUkFUQ0hfU0laRV0gcmVnaXN0ZXJzIGV4aXN0IGZvciBzY3JhdGNoIHVzYWdlOgorICAgICAgRmlyc3QgNCBhcmUgcmVzZXJ2ZWQgZm9yIFZFU0EgQklPUyBFeHRlbnNpb247IGFueSByZW1haW5pbmcgYXJlIGZvcgorICAgICAgdGhlIHVzZSBvZiB0aGUgY3VycmVudCBTVkdBIGRyaXZlci4gKi8KK307CisKKworLyoKKyAqIEd1ZXN0IG1lbW9yeSByZWdpb25zIChHTVJzKToKKyAqCisgKiBUaGlzIGlzIGEgbmV3IG1lbW9yeSBtYXBwaW5nIGZlYXR1cmUgYXZhaWxhYmxlIGluIFNWR0EgZGV2aWNlcworICogd2hpY2ggaGF2ZSB0aGUgU1ZHQV9DQVBfR01SIGJpdCBzZXQuIFByZXZpb3VzbHksIHRoZXJlIHdlcmUgdHdvCisgKiBmaXhlZCBtZW1vcnkgcmVnaW9ucyBhdmFpbGFibGUgd2l0aCB3aGljaCB0byBzaGFyZSBkYXRhIGJldHdlZW4gdGhlCisgKiBkZXZpY2UgYW5kIHRoZSBkcml2ZXI6IHRoZSBGSUZPICgnTUVNJykgYW5kIHRoZSBmcmFtZWJ1ZmZlci4gR01ScworICogYXJlIG91ciBuYW1lIGZvciBhbiBleHRlbnNpYmxlIHdheSBvZiBwcm92aWRpbmcgYXJiaXRyYXJ5IERNQQorICogYnVmZmVycyBmb3IgdXNlIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIFNWR0EgZGV2aWNlLiBUaGV5IGFyZSBhCisgKiBuZXcgYWx0ZXJuYXRpdmUgdG8gZnJhbWVidWZmZXIgbWVtb3J5LCB1c2FibGUgZm9yIGJvdGggMkQgYW5kIDNECisgKiBncmFwaGljcyBvcGVyYXRpb25zLgorICoKKyAqIFNpbmNlIEdNUiBtYXBwaW5nIG11c3QgYmUgZG9uZSBzeW5jaHJvbm91c2x5IHdpdGggZ3Vlc3QgQ1BVCisgKiBleGVjdXRpb24sIHdlIHVzZSBhIG5ldyBwYWlyIG9mIFNWR0EgcmVnaXN0ZXJzOgorICoKKyAqICAgU1ZHQV9SRUdfR01SX0lEIC0tCisgKgorICogICAgIFJlYWQvd3JpdGUuCisgKiAgICAgVGhpcyByZWdpc3RlciBob2xkcyB0aGUgMzItYml0IElEIChhIHNtYWxsIHBvc2l0aXZlIGludGVnZXIpCisgKiAgICAgb2YgYSBHTVIgdG8gY3JlYXRlLCBkZWxldGUsIG9yIHJlZGVmaW5lLiBXcml0aW5nIHRoaXMgcmVnaXN0ZXIKKyAqICAgICBoYXMgbm8gc2lkZS1lZmZlY3RzLgorICoKKyAqICAgU1ZHQV9SRUdfR01SX0RFU0NSSVBUT1IgLS0KKyAqCisgKiAgICAgV3JpdGUtb25seS4KKyAqICAgICBXcml0aW5nIHRoaXMgcmVnaXN0ZXIgd2lsbCBjcmVhdGUsIGRlbGV0ZSwgb3IgcmVkZWZpbmUgdGhlIEdNUgorICogICAgIHNwZWNpZmllZCBieSB0aGUgYWJvdmUgSUQgcmVnaXN0ZXIuIElmIHRoaXMgcmVnaXN0ZXIgaXMgemVybywKKyAqICAgICB0aGUgR01SIGlzIGRlbGV0ZWQuIEFueSBwb2ludGVycyBpbnRvIHRoaXMgR01SIChpbmNsdWRpbmcgdGhvc2UKKyAqICAgICBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIGJ5IEZJRk8gY29tbWFuZHMpIHdpbGwgYmUKKyAqICAgICBzeW5jaHJvbm91c2x5IGludmFsaWRhdGVkLgorICoKKyAqICAgICBJZiB0aGlzIHJlZ2lzdGVyIGlzIG5vbnplcm8sIGl0IG11c3QgYmUgdGhlIHBoeXNpY2FsIHBhZ2UKKyAqICAgICBudW1iZXIgKFBQTikgb2YgYSBkYXRhIHN0cnVjdHVyZSB3aGljaCBkZXNjcmliZXMgdGhlIHBoeXNpY2FsCisgKiAgICAgbGF5b3V0IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRoaXMgR01SIHNob3VsZCBkZXNjcmliZS4gVGhlCisgKiAgICAgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgd2lsbCBiZSByZWFkIHN5bmNocm9ub3VzbHkgYnkgdGhlIFNWR0EKKyAqICAgICBkZXZpY2Ugd2hlbiB0aGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4uIFRoZSBkZXNjcmlwdG9yIG5lZWQgbm90CisgKiAgICAgcmVtYWluIGFsbG9jYXRlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBHTVIuCisgKgorICogICAgIFRoZSBndWVzdCBkcml2ZXIgc2hvdWxkIHdyaXRlIFNWR0FfUkVHX0dNUl9JRCBmaXJzdCwgdGhlbgorICogICAgIFNWR0FfUkVHX0dNUl9ERVNDUklQVE9SLgorICoKKyAqICAgU1ZHQV9SRUdfR01SX01BWF9JRFMgLS0KKyAqCisgKiAgICAgUmVhZC1vbmx5LgorICogICAgIFRoZSBTVkdBIGRldmljZSBtYXkgY2hvb3NlIHRvIHN1cHBvcnQgYSBtYXhpbXVtIG51bWJlciBvZgorICogICAgIHVzZXItZGVmaW5lZCBHTVIgSURzLiBUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkCisgKiAgICAgSURzLiAoVGhlIG1heGltdW0gc3VwcG9ydGVkIElEIHBsdXMgMSkKKyAqCisgKiAgIFNWR0FfUkVHX0dNUl9NQVhfREVTQ1JJUFRPUl9MRU5HVEggLS0KKyAqCisgKiAgICAgUmVhZC1vbmx5LgorICogICAgIFRoZSBTVkdBIGRldmljZSBtYXkgY2hvb3NlIHRvIHB1dCBhIGxpbWl0IG9uIHRoZSB0b3RhbCBudW1iZXIKKyAqICAgICBvZiBTVkdBR3Vlc3RNZW1EZXNjcmlwdG9yIHN0cnVjdHVyZXMgaXQgd2lsbCByZWFkIHdoZW4gZGVmaW5pbmcKKyAqICAgICBhIHNpbmdsZSBHTVIuCisgKgorICogVGhlIGRlc2NyaXB0b3Igc3RydWN0dXJlIGlzIGFuIGFycmF5IG9mIFNWR0FHdWVzdE1lbURlc2NyaXB0b3IKKyAqIHN0cnVjdHVyZXMuIEVhY2ggc3RydWN0dXJlIG1heSBkbyBvbmUgb2YgdGhyZWUgdGhpbmdzOgorICoKKyAqICAgLSBUZXJtaW5hdGUgdGhlIEdNUiBkZXNjcmlwdG9yIGxpc3QuCisgKiAgICAgKHBwbj09MCwgbnVtUGFnZXM9PTApCisgKgorICogICAtIEFkZCBhIFBQTiBvciByYW5nZSBvZiBQUE5zIHRvIHRoZSBHTVIncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCisgKiAgICAgKHBwbiAhPSAwLCBudW1QYWdlcyAhPSAwKQorICoKKyAqICAgLSBQcm92aWRlIHRoZSBQUE4gb2YgdGhlIG5leHQgU1ZHQUd1ZXN0TWVtRGVzY3JpcHRvciwgaW4gb3JkZXIgdG8KKyAqICAgICBzdXBwb3J0IG11bHRpLXBhZ2UgR01SIGRlc2NyaXB0b3IgdGFibGVzIHdpdGhvdXQgZm9yY2luZyB0aGUKKyAqICAgICBkcml2ZXIgdG8gYWxsb2NhdGUgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeS4KKyAqICAgICAocHBuICE9IDAsIG51bVBhZ2VzID09IDApCisgKgorICogTm90ZSB0aGF0IGVhY2ggcGh5c2ljYWwgcGFnZSBvZiBTVkdBR3Vlc3RNZW1EZXNjcmlwdG9yIHN0cnVjdHVyZXMKKyAqIGNhbiBkZXNjcmliZSBhdCBsZWFzdCAyTUIgb2YgZ3Vlc3QgbWVtb3J5LiBJZiB0aGUgZHJpdmVyIG5lZWRzIHRvCisgKiB1c2UgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIGRlc2NyaXB0b3Igc3RydWN0dXJlcywgaXQgbXVzdCB1c2Ugb25lIG9mCisgKiBpdHMgU1ZHQUd1ZXN0TWVtRGVzY3JpcHRvcnMgdG8gcG9pbnQgdG8gYW4gYWRkaXRpb25hbCBwYWdlLiAgVGhlCisgKiBkZXZpY2Ugd2lsbCBuZXZlciBhdXRvbWF0aWNhbGx5IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAqCisgKiBPbmNlIHRoZSBkcml2ZXIgaGFzIGRlc2NyaWJlZCBhIEdNUiwgaXQgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlCisgKiBmb3IgdXNlIHZpYSBhbnkgRklGTyBjb21tYW5kIHRoYXQgdXNlcyBhbiBTVkdBR3Vlc3RQdHIgc3RydWN0dXJlLgorICogVGhlc2UgcG9pbnRlcnMgaW5jbHVkZSBhIEdNUiBpZGVudGlmaWVyIHBsdXMgYW4gb2Zmc2V0IGludG8gdGhhdAorICogR01SLgorICoKKyAqIFRoZSBkcml2ZXIgbXVzdCBjaGVjayB0aGUgU1ZHQV9DQVBfR01SIGJpdCBiZWZvcmUgdXNpbmcgdGhlIEdNUgorICogcmVnaXN0ZXJzLgorICovCisKKy8qCisgKiBTcGVjaWFsIEdNUiBJRHMsIGFsbG93aW5nIFNWR0FHdWVzdFB0cnMgdG8gcG9pbnQgdG8gZnJhbWVidWZmZXIKKyAqIG1lbW9yeSBhcyB3ZWxsLiAgSW4gdGhlIGZ1dHVyZSwgdGhlc2UgSURzIGNvdWxkIGV2ZW4gYmUgdXNlZCB0bworICogYWxsb3cgbGVnYWN5IG1lbW9yeSByZWdpb25zIHRvIGJlIHJlZGVmaW5lZCBieSB0aGUgZ3Vlc3QgYXMgR01Scy4KKyAqCisgKiBVc2luZyB0aGUgZ3Vlc3QgZnJhbWVidWZmZXIgKEdGQikgYXQgQkFSMSBmb3IgZ2VuZXJhbCBwdXJwb3NlIERNQQorICogaXMgYmVpbmcgcGhhc2VkIG91dC4gUGxlYXNlIHRyeSB0byB1c2UgdXNlci1kZWZpbmVkIEdNUnMgd2hlbmV2ZXIKKyAqIHBvc3NpYmxlLgorICovCisjZGVmaW5lIFNWR0FfR01SX05VTEwgICAgICAgICAoKHVpbnQzMikgLTEpCisjZGVmaW5lIFNWR0FfR01SX0ZSQU1FQlVGRkVSICAoKHVpbnQzMikgLTIpICAvLyBHdWVzdCBGcmFtZWJ1ZmZlciAoR0ZCKQorCit0eXBlZGVmCitzdHJ1Y3QgU1ZHQUd1ZXN0TWVtRGVzY3JpcHRvciB7CisgICB1aW50MzIgcHBuOworICAgdWludDMyIG51bVBhZ2VzOworfSBTVkdBR3Vlc3RNZW1EZXNjcmlwdG9yOworCit0eXBlZGVmCitzdHJ1Y3QgU1ZHQUd1ZXN0UHRyIHsKKyAgIHVpbnQzMiBnbXJJZDsKKyAgIHVpbnQzMiBvZmZzZXQ7Cit9IFNWR0FHdWVzdFB0cjsKKworCisvKgorICogU1ZHQUdNUkltYWdlRm9ybWF0IC0tCisgKgorICogICAgVGhpcyBpcyBhIHBhY2tlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlIDJEIGltYWdlIGZvcm1hdAorICogICAgZm9yIGEgR01SLXRvLXNjcmVlbiBibGl0LiBDdXJyZW50bHkgaXQgaXMgZGVmaW5lZCBhcyBhbiBlbmNvZGluZworICogICAgb2YgdGhlIHNjcmVlbidzIGNvbG9yIGRlcHRoIGFuZCBiaXRzLXBlci1waXhlbCwgaG93ZXZlciwgMTYgYml0cworICogICAgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHRvIGlkZW50aWZ5IG90aGVyIGVuY29kaW5ncyAoc3VjaCBhcworICogICAgUkdCQSBvciBoaWdoZXItcHJlY2lzaW9uIGltYWdlcykuCisgKgorICogICAgQ3VycmVudGx5IHN1cHBvcnRlZCBmb3JtYXRzOgorICoKKyAqICAgICAgIGJwcCBkZXB0aCAgRm9ybWF0IE5hbWUKKyAqICAgICAgIC0tLSAtLS0tLSAgLS0tLS0tLS0tLS0KKyAqICAgICAgICAzMiAgICAyNCAgMzItYml0IEJHUlgKKyAqICAgICAgICAyNCAgICAyNCAgMjQtYml0IEJHUgorICogICAgICAgIDE2ICAgIDE2ICBSR0IgNS02LTUKKyAqICAgICAgICAxNiAgICAxNSAgUkdCIDUtNS01CisgKgorICovCisKK3R5cGVkZWYKK3N0cnVjdCBTVkdBR01SSW1hZ2VGb3JtYXQgeworICAgdW5pb24geworICAgICAgc3RydWN0IHsKKyAgICAgICAgIHVpbnQzMiBiaXRzUGVyUGl4ZWwgOiA4OworICAgICAgICAgdWludDMyIGNvbG9yRGVwdGggICA6IDg7CisgICAgICAgICB1aW50MzIgcmVzZXJ2ZWQgICAgIDogMTY7ICAvLyBNdXN0IGJlIHplcm8KKyAgICAgIH07CisKKyAgICAgIHVpbnQzMiB2YWx1ZTsKKyAgIH07Cit9IFNWR0FHTVJJbWFnZUZvcm1hdDsKKworLyoKKyAqIFNWR0FDb2xvckJHUlggLS0KKyAqCisgKiAgICBBIDI0LWJpdCBjb2xvciBmb3JtYXQgKEJHUlgpLCB3aGljaCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlCisgKiAgICBmb3JtYXQgb2YgdGhlIGxlZ2FjeSBndWVzdCBmcmFtZWJ1ZmZlciAoR0ZCKSBvciB0aGUgY3VycmVudAorICogICAgR01SRkIgc3RhdGUuCisgKi8KKwordHlwZWRlZgorc3RydWN0IFNWR0FDb2xvckJHUlggeworICAgdW5pb24geworICAgICAgc3RydWN0IHsKKyAgICAgICAgIHVpbnQzMiBiIDogODsKKyAgICAgICAgIHVpbnQzMiBnIDogODsKKyAgICAgICAgIHVpbnQzMiByIDogODsKKyAgICAgICAgIHVpbnQzMiB4IDogODsgIC8vIFVudXNlZAorICAgICAgfTsKKworICAgICAgdWludDMyIHZhbHVlOworICAgfTsKK30gU1ZHQUNvbG9yQkdSWDsKKworCisvKgorICogU1ZHQVNpZ25lZFJlY3QgLS0KKyAqIFNWR0FTaWduZWRQb2ludCAtLQorICoKKyAqICAgIFNpZ25lZCByZWN0YW5nbGUgYW5kIHBvaW50IHByaW1pdGl2ZXMuIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZSBuZXcKKyAqICAgIDJEIHByaW1pdGl2ZXMgZm9yIGRyYXdpbmcgdG8gU2NyZWVuIE9iamVjdHMsIHdoaWNoIGNhbiBvY2N1cHkgYQorICogICAgc2lnbmVkIHZpcnR1YWwgY29vcmRpbmF0ZSBzcGFjZS4KKyAqCisgKiAgICBTVkdBU2lnbmVkUmVjdCBzcGVjaWZpZXMgYSBoYWxmLW9wZW4gaW50ZXJ2YWw6IHRoZSAobGVmdCwgdG9wKQorICogICAgcGl4ZWwgaXMgcGFydCBvZiB0aGUgcmVjdGFuZ2xlLCBidXQgdGhlIChyaWdodCwgYm90dG9tKSBwaXhlbCBpcworICogICAgbm90LgorICovCisKK3R5cGVkZWYKK3N0cnVjdCBTVkdBU2lnbmVkUmVjdCB7CisgICBpbnQzMiAgbGVmdDsKKyAgIGludDMyICB0b3A7CisgICBpbnQzMiAgcmlnaHQ7CisgICBpbnQzMiAgYm90dG9tOworfSBTVkdBU2lnbmVkUmVjdDsKKwordHlwZWRlZgorc3RydWN0IFNWR0FTaWduZWRQb2ludCB7CisgICBpbnQzMiAgeDsKKyAgIGludDMyICB5OworfSBTVkdBU2lnbmVkUG9pbnQ7CisKKworLyoKKyAqICBDYXBhYmlsaXRpZXMKKyAqCisgKiAgTm90ZSB0aGUgaG9sZXMgaW4gdGhlIGJpdGZpZWxkLiBNaXNzaW5nIGJpdHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsCisgKiAgYW5kIG11c3Qgbm90IGJlIHJldXNlZC4gVGhvc2UgY2FwYWJpbGl0aWVzIHdpbGwgbmV2ZXIgYmUgcmVwb3J0ZWQKKyAqICBieSBuZXcgdmVyc2lvbnMgb2YgdGhlIFNWR0EgZGV2aWNlLgorICovCisKKyNkZWZpbmUgU1ZHQV9DQVBfTk9ORSAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU1ZHQV9DQVBfUkVDVF9DT1BZICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1ZHQV9DQVBfQ1VSU09SICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgU1ZHQV9DQVBfQ1VSU09SX0JZUEFTUyAgICAgIDB4MDAwMDAwNDAgICAvLyBMZWdhY3kgKFVzZSBDdXJzb3IgQnlwYXNzIDMgaW5zdGVhZCkKKyNkZWZpbmUgU1ZHQV9DQVBfQ1VSU09SX0JZUEFTU18yICAgIDB4MDAwMDAwODAgICAvLyBMZWdhY3kgKFVzZSBDdXJzb3IgQnlwYXNzIDMgaW5zdGVhZCkKKyNkZWZpbmUgU1ZHQV9DQVBfOEJJVF9FTVVMQVRJT04gICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU1ZHQV9DQVBfQUxQSEFfQ1VSU09SICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgU1ZHQV9DQVBfM0QgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgU1ZHQV9DQVBfRVhURU5ERURfRklGTyAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgU1ZHQV9DQVBfTVVMVElNT04gICAgICAgICAgIDB4MDAwMTAwMDAgICAvLyBMZWdhY3kgbXVsdGktbW9uaXRvciBzdXBwb3J0CisjZGVmaW5lIFNWR0FfQ0FQX1BJVENITE9DSyAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFNWR0FfQ0FQX0lSUU1BU0sgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFNWR0FfQ0FQX0RJU1BMQVlfVE9QT0xPR1kgICAweDAwMDgwMDAwICAgLy8gTGVnYWN5IG11bHRpLW1vbml0b3Igc3VwcG9ydAorI2RlZmluZSBTVkdBX0NBUF9HTVIgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBTVkdBX0NBUF9UUkFDRVMgICAgICAgICAgICAgMHgwMDIwMDAwMAorCisKKy8qCisgKiBGSUZPIHJlZ2lzdGVyIGluZGljZXMuCisgKgorICogVGhlIEZJRk8gaXMgYSBjaHVuayBvZiBkZXZpY2UgbWVtb3J5IG1hcHBlZCBpbnRvIGd1ZXN0IHBoeXNtZW0uICBJdAorICogaXMgYWx3YXlzIHRyZWF0ZWQgYXMgMzItYml0IHdvcmRzLgorICoKKyAqIFRoZSBndWVzdCBkcml2ZXIgZ2V0cyB0byBkZWNpZGUgaG93IHRvIHBhcnRpdGlvbiBpdCBiZXR3ZWVuCisgKiAtIEZJRk8gcmVnaXN0ZXJzICh0aGVyZSBhcmUgYWx3YXlzIGF0IGxlYXN0IDQsIHNwZWNpZnlpbmcgd2hlcmUgdGhlCisgKiAgIGZvbGxvd2luZyBkYXRhIGFyZWEgaXMgYW5kIGhvdyBtdWNoIGRhdGEgaXQgY29udGFpbnM7IHRoZXJlIG1heSBiZQorICogICBtb3JlIHJlZ2lzdGVycyBmb2xsb3dpbmcgdGhlc2UsIGRlcGVuZGluZyBvbiB0aGUgRklGTyBwcm90b2NvbAorICogICB2ZXJzaW9uIGluIHVzZSkKKyAqIC0gRklGTyBkYXRhLCB3cml0dGVuIGJ5IHRoZSBndWVzdCBhbmQgc2x1cnBlZCBvdXQgYnkgdGhlIFZNWC4KKyAqIFRoZXNlIGluZGljZXMgYXJlIDMyLWJpdCB3b3JkIG9mZnNldHMgaW50byB0aGUgRklGTy4KKyAqLworCitlbnVtIHsKKyAgIC8qCisgICAgKiBCbG9jayAxIChiYXNpYyByZWdpc3RlcnMpOiBUaGUgb3JpZ2luYWxseSBkZWZpbmVkIEZJRk8gcmVnaXN0ZXJzLgorICAgICogVGhlc2UgZXhpc3QgYW5kIGFyZSB2YWxpZCBmb3IgYWxsIHZlcnNpb25zIG9mIHRoZSBGSUZPIHByb3RvY29sLgorICAgICovCisKKyAgIFNWR0FfRklGT19NSU4gPSAwLAorICAgU1ZHQV9GSUZPX01BWCwgICAgICAgLyogVGhlIGRpc3RhbmNlIGZyb20gTUlOIHRvIE1BWCBtdXN0IGJlIGF0IGxlYXN0IDEwSyAqLworICAgU1ZHQV9GSUZPX05FWFRfQ01ELAorICAgU1ZHQV9GSUZPX1NUT1AsCisKKyAgIC8qCisgICAgKiBCbG9jayAyIChleHRlbmRlZCByZWdpc3RlcnMpOiBNYW5kYXRvcnkgcmVnaXN0ZXJzIGZvciB0aGUgZXh0ZW5kZWQKKyAgICAqIEZJRk8uICBUaGVzZSBleGlzdCBpZiB0aGUgU1ZHQSBjYXBzIHJlZ2lzdGVyIGluY2x1ZGVzCisgICAgKiBTVkdBX0NBUF9FWFRFTkRFRF9GSUZPOyBzb21lIG9mIHRoZW0gYXJlIHZhbGlkIG9ubHkgaWYgdGhlaXIKKyAgICAqIGFzc29jaWF0ZWQgY2FwYWJpbGl0eSBiaXQgaXMgZW5hYmxlZC4KKyAgICAqCisgICAgKiBOb3RlIHRoYXQgd2hlbiBvcmlnaW5hbGx5IGRlZmluZWQsIFNWR0FfQ0FQX0VYVEVOREVEX0ZJRk8gaW1wbGllZAorICAgICogc3VwcG9ydCBvbmx5IGZvciAoRklGTyByZWdpc3RlcnMpIENBUEFCSUxJVElFUywgRkxBR1MsIGFuZCBGRU5DRS4KKyAgICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZ3Vlc3QgaGFzIHRvIHRlc3QgaW5kaXZpZHVhbGx5IChpbiBtb3N0IGNhc2VzCisgICAgKiB1c2luZyBGSUZPIGNhcHMpIGZvciB0aGUgcHJlc2VuY2Ugb2YgcmVnaXN0ZXJzIGFmdGVyIHRoaXM7IHRoZSBWTVgKKyAgICAqIGNhbiBkZWZpbmUgImV4dGVuZGVkIEZJRk8iIHRvIG1lYW4gd2hhdGV2ZXIgaXQgd2FudHMsIGFuZCBjdXJyZW50bHkKKyAgICAqIHdvbid0IGVuYWJsZSBpdCB1bmxlc3MgdGhlcmUncyByb29tIGZvciB0aGF0IHNldCBhbmQgbXVjaCBtb3JlLgorICAgICovCisKKyAgIFNWR0FfRklGT19DQVBBQklMSVRJRVMgPSA0LAorICAgU1ZHQV9GSUZPX0ZMQUdTLAorICAgLy8gVmFsaWQgd2l0aCBTVkdBX0ZJRk9fQ0FQX0ZFTkNFOgorICAgU1ZHQV9GSUZPX0ZFTkNFLAorCisgICAvKgorICAgICogQmxvY2sgM2EgKG9wdGlvbmFsIGV4dGVuZGVkIHJlZ2lzdGVycyk6IEFkZGl0aW9uYWwgcmVnaXN0ZXJzIGZvciB0aGUKKyAgICAqIGV4dGVuZGVkIEZJRk8sIHdob3NlIHByZXNlbmNlIGlzbid0IGFjdHVhbGx5IGltcGxpZWQgYnkKKyAgICAqIFNWR0FfQ0FQX0VYVEVOREVEX0ZJRk87IHRoZXNlIGV4aXN0IGlmIFNWR0FfRklGT19NSU4gaXMgaGlnaCBlbm91Z2ggdG8KKyAgICAqIGxlYXZlIHJvb20gZm9yIHRoZW0uCisgICAgKgorICAgICogVGhlc2UgaW4gYmxvY2sgM2EsIHRoZSBWTVggY3VycmVudGx5IGNvbnNpZGVycyBtYW5kYXRvcnkgZm9yIHRoZQorICAgICogZXh0ZW5kZWQgRklGTy4KKyAgICAqLworCisgICAvLyBWYWxpZCBpZiBleGlzdHMgKGkuZS4gaWYgZXh0ZW5kZWQgRklGTyBlbmFibGVkKToKKyAgIFNWR0FfRklGT18zRF9IV1ZFUlNJT04sICAgICAgIC8qIFNlZSBTVkdBM2RIYXJkd2FyZVZlcnNpb24gaW4gc3ZnYTNkX3JlZy5oICovCisgICAvLyBWYWxpZCB3aXRoIFNWR0FfRklGT19DQVBfUElUQ0hMT0NLOgorICAgU1ZHQV9GSUZPX1BJVENITE9DSywKKworICAgLy8gVmFsaWQgd2l0aCBTVkdBX0ZJRk9fQ0FQX0NVUlNPUl9CWVBBU1NfMzoKKyAgIFNWR0FfRklGT19DVVJTT1JfT04sICAgICAgICAgIC8qIEN1cnNvciBieXBhc3MgMyBzaG93L2hpZGUgcmVnaXN0ZXIgKi8KKyAgIFNWR0FfRklGT19DVVJTT1JfWCwgICAgICAgICAgIC8qIEN1cnNvciBieXBhc3MgMyB4IHJlZ2lzdGVyICovCisgICBTVkdBX0ZJRk9fQ1VSU09SX1ksICAgICAgICAgICAvKiBDdXJzb3IgYnlwYXNzIDMgeSByZWdpc3RlciAqLworICAgU1ZHQV9GSUZPX0NVUlNPUl9DT1VOVCwgICAgICAgLyogSW5jcmVtZW50ZWQgd2hlbiBhbnkgb2YgdGhlIG90aGVyIDMgY2hhbmdlICovCisgICBTVkdBX0ZJRk9fQ1VSU09SX0xBU1RfVVBEQVRFRCwvKiBMYXN0IHRpbWUgdGhlIGhvc3QgdXBkYXRlZCB0aGUgY3Vyc29yICovCisKKyAgIC8vIFZhbGlkIHdpdGggU1ZHQV9GSUZPX0NBUF9SRVNFUlZFOgorICAgU1ZHQV9GSUZPX1JFU0VSVkVELCAgICAgICAgICAgLyogQnl0ZXMgcGFzdCBORVhUX0NNRCB3aXRoIHJlYWwgY29udGVudHMgKi8KKworICAgLyoKKyAgICAqIFZhbGlkIHdpdGggU1ZHQV9GSUZPX0NBUF9TQ1JFRU5fT0JKRUNUOgorICAgICoKKyAgICAqIEJ5IGRlZmF1bHQgdGhpcyBpcyBTVkdBX0lEX0lOVkFMSUQsIHRvIGluZGljYXRlIHRoYXQgdGhlIGN1cnNvcgorICAgICogY29vcmRpbmF0ZXMgYXJlIHNwZWNpZmllZCByZWxhdGl2ZSB0byB0aGUgdmlydHVhbCByb290LiBJZiB0aGlzCisgICAgKiBpcyBzZXQgdG8gYSBzcGVjaWZpYyBzY3JlZW4gSUQsIGN1cnNvciBwb3NpdGlvbiBpcyByZWludGVycHJldGVkCisgICAgKiBhcyBhIHNpZ25lZCBvZmZzZXQgcmVsYXRpdmUgdG8gdGhhdCBzY3JlZW4ncyBvcmlnaW4uIFRoaXMgaXMgdGhlCisgICAgKiBvbmx5IHdheSB0byBwbGFjZSB0aGUgY3Vyc29yIG9uIGEgbm9uLXJvb3RlZCBzY3JlZW4uCisgICAgKi8KKyAgIFNWR0FfRklGT19DVVJTT1JfU0NSRUVOX0lELAorCisgICAvKgorICAgICogWFhYOiBUaGUgZ2FwIGhlcmUsIHVwIHVudGlsIFNWR0FfRklGT18zRF9DQVBTLCBjYW4gYmUgdXNlZCBmb3IgbmV3CisgICAgKiByZWdpc3RlcnMsIGJ1dCB0aGlzIG11c3QgYmUgZG9uZSBjYXJlZnVsbHkgYW5kIHdpdGgganVkaWNpb3VzIHVzZSBvZgorICAgICogY2FwYWJpbGl0eSBiaXRzLCBzaW5jZSBjb21wYXJpc29ucyBiYXNlZCBvbiBTVkdBX0ZJRk9fTUlOIGFyZW4ndAorICAgICogZW5vdWdoIHRvIHRlbGwgeW91IHdoZXRoZXIgdGhlIHJlZ2lzdGVyIGV4aXN0czogd2UndmUgc2hpcHBlZCBkcml2ZXJzCisgICAgKiBhbmQgcHJvZHVjdHMgdGhhdCB1c2VkIFNWR0FfRklGT18zRF9DQVBTIGJ1dCBkaWRuJ3Qga25vdyBhYm91dCBzb21lIG9mCisgICAgKiB0aGUgZWFybGllciBvbmVzLiAgVGhlIGFjdHVhbCBvcmRlciBvZiBpbnRyb2R1Y3Rpb24gd2FzOgorICAgICogLSBQSVRDSExPQ0sKKyAgICAqIC0gM0RfQ0FQUworICAgICogLSBDVVJTT1JfKiAoY3Vyc29yIGJ5cGFzcyAzKQorICAgICogLSBSRVNFUlZFRAorICAgICogU28sIGNvZGUgdGhhdCB3YW50cyB0byBrbm93IHdoZXRoZXIgaXQgY2FuIHVzZSBhbnkgb2YgdGhlCisgICAgKiBhZm9yZW1lbnRpb25lZCByZWdpc3RlcnMsIG9yIGFueXRoaW5nIGVsc2UgYWRkZWQgYWZ0ZXIgUElUQ0hMT0NLIGFuZAorICAgICogYmVmb3JlIDNEX0NBUFMsIG5lZWRzIHRvIHJlYXNvbiBhYm91dCBzb21ldGhpbmcgb3RoZXIgdGhhbgorICAgICogU1ZHQV9GSUZPX01JTi4KKyAgICAqLworCisgICAvKgorICAgICogM0QgY2FwcyBibG9jayBzcGFjZTsgdmFsaWQgd2l0aCAzRCBoYXJkd2FyZSB2ZXJzaW9uID49CisgICAgKiBTVkdBM0RfSFdWRVJTSU9OX1dTNl9CMS4KKyAgICAqLworICAgU1ZHQV9GSUZPXzNEX0NBUFMgICAgICA9IDMyLAorICAgU1ZHQV9GSUZPXzNEX0NBUFNfTEFTVCA9IDMyICsgMjU1LAorCisgICAvKgorICAgICogRW5kIG9mIFZNWCdzIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiAiZXh0ZW5kZWQtRklGTyByZWdpc3RlcnMiLgorICAgICogUmVnaXN0ZXJzIGJlZm9yZSBoZXJlIGFyZSBhbHdheXMgZW5hYmxlZC9kaXNhYmxlZCBhcyBhIGJsb2NrOyBlaXRoZXIKKyAgICAqIHRoZSBleHRlbmRlZCBGSUZPIGlzIGVuYWJsZWQgYW5kIGluY2x1ZGVzIGFsbCBwcmVjZWRpbmcgcmVnaXN0ZXJzLCBvcgorICAgICogaXQncyBkaXNhYmxlZCBlbnRpcmVseS4KKyAgICAqCisgICAgKiBCbG9jayAzYiAodHJ1bHkgb3B0aW9uYWwgZXh0ZW5kZWQgcmVnaXN0ZXJzKTogQWRkaXRpb25hbCByZWdpc3RlcnMgZm9yCisgICAgKiB0aGUgZXh0ZW5kZWQgRklGTywgd2hpY2ggdGhlIFZNWCBhbHJlYWR5IGtub3dzIGhvdyB0byBlbmFibGUgYW5kCisgICAgKiBkaXNhYmxlIHdpdGggY29ycmVjdCBncmFudWxhcml0eS4KKyAgICAqCisgICAgKiBSZWdpc3RlcnMgYWZ0ZXIgaGVyZSBleGlzdCBpZiBhbmQgb25seSBpZiB0aGUgZ3Vlc3QgU1ZHQSBkcml2ZXIKKyAgICAqIHNldHMgU1ZHQV9GSUZPX01JTiBoaWdoIGVub3VnaCB0byBsZWF2ZSByb29tIGZvciB0aGVtLgorICAgICovCisKKyAgIC8vIFZhbGlkIGlmIHJlZ2lzdGVyIGV4aXN0czoKKyAgIFNWR0FfRklGT19HVUVTVF8zRF9IV1ZFUlNJT04sIC8qIEd1ZXN0IGRyaXZlcidzIDNEIHZlcnNpb24gKi8KKyAgIFNWR0FfRklGT19GRU5DRV9HT0FMLCAgICAgICAgIC8qIE1hdGNoaW5nIHRhcmdldCBmb3IgU1ZHQV9JUlFGTEFHX0ZFTkNFX0dPQUwgKi8KKyAgIFNWR0FfRklGT19CVVNZLCAgICAgICAgICAgICAgIC8qIFNlZSAiRklGTyBTeW5jaHJvbml6YXRpb24gUmVnaXN0ZXJzIiAqLworCisgICAvKgorICAgICogQWx3YXlzIGtlZXAgdGhpcyBsYXN0LiAgVGhpcyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICAgICogcmVnaXN0ZXJzIHdlIGtub3cgYWJvdXQuICBBdCBwb3dlci1vbiwgdGhpcyB2YWx1ZSBpcyBwbGFjZWQgaW4KKyAgICAqIHRoZSBTVkdBX1JFR19NRU1fUkVHUyByZWdpc3RlciwgYW5kIHdlIGV4cGVjdCB0aGUgZ3Vlc3QgZHJpdmVyCisgICAgKiB0byBhbGxvY2F0ZSB0aGlzIG11Y2ggc3BhY2UgaW4gRklGTyBtZW1vcnkgZm9yIHJlZ2lzdGVycy4KKyAgICAqLworICAgIFNWR0FfRklGT19OVU1fUkVHUworfTsKKworCisvKgorICogRGVmaW5pdGlvbiBvZiByZWdpc3RlcnMgaW5jbHVkZWQgaW4gZXh0ZW5kZWQgRklGTyBzdXBwb3J0LgorICoKKyAqIFRoZSBndWVzdCBTVkdBIGRyaXZlciBnZXRzIHRvIGFsbG9jYXRlIHRoZSBGSUZPIGJldHdlZW4gcmVnaXN0ZXJzCisgKiBhbmQgZGF0YS4gIEl0IG11c3QgYWx3YXlzIGFsbG9jYXRlIGF0IGxlYXN0IDQgcmVnaXN0ZXJzLCBidXQgb2xkCisgKiBkcml2ZXJzIHN0b3BwZWQgdGhlcmUuCisgKgorICogVGhlIFZNWCB3aWxsIGVuYWJsZSBleHRlbmRlZCBGSUZPIHN1cHBvcnQgaWYgYW5kIG9ubHkgaWYgdGhlIGd1ZXN0CisgKiBsZWZ0IGVub3VnaCByb29tIGZvciBhbGwgcmVnaXN0ZXJzIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgbWFuZGF0b3J5CisgKiBzZXQgZm9yIHRoZSBleHRlbmRlZCBGSUZPLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgZ3Vlc3QgZHJpdmVycyB0eXBpY2FsbHkgYWxsb2NhdGUgdGhlIEZJRk8gb25seSBhdAorICogaW5pdGlhbGl6YXRpb24gdGltZSwgbm90IGF0IG1vZGUgc3dpdGNoZXMsIHNvIGl0J3MgbGlrZWx5IHRoYXQgdGhlCisgKiBudW1iZXIgb2YgRklGTyByZWdpc3RlcnMgd29uJ3QgY2hhbmdlIHdpdGhvdXQgYSByZWJvb3QuCisgKgorICogQWxsIHJlZ2lzdGVycyBsZXNzIHRoYW4gdGhpcyB2YWx1ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGlmCisgKiBzdmdhVXNlci0+Zmlmby5leHRlbmRlZCBpcyBzZXQuIEFueSBsYXRlciByZWdpc3RlcnMgbXVzdCBiZSB0ZXN0ZWQKKyAqIGluZGl2aWR1YWxseSBmb3IgY29tcGF0aWJpbGl0eSBhdCBlYWNoIHVzZSAoaW4gdGhlIFZNWCkuCisgKgorICogVGhpcyB2YWx1ZSBpcyB1c2VkIG9ubHkgYnkgdGhlIFZNWCwgc28gaXQgY2FuIGNoYW5nZSB3aXRob3V0CisgKiBhZmZlY3RpbmcgZHJpdmVyIGNvbXBhdGliaWxpdHk7IGtlZXAgaXQgdGhhdCB3YXk/CisgKi8KKyNkZWZpbmUgU1ZHQV9GSUZPX0VYVEVOREVEX01BTkRBVE9SWV9SRUdTICAoU1ZHQV9GSUZPXzNEX0NBUFNfTEFTVCArIDEpCisKKworLyoKKyAqIEZJRk8gU3luY2hyb25pemF0aW9uIFJlZ2lzdGVycworICoKKyAqICBUaGlzIGV4cGxhaW5zIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdmFyaW91cyBGSUZPCisgKiAgc3luYy1yZWxhdGVkIHJlZ2lzdGVycyBpbiBJT1NwYWNlIGFuZCBpbiBGSUZPIHNwYWNlLgorICoKKyAqICBTVkdBX1JFR19TWU5DIC0tCisgKgorICogICAgICAgVGhlIFNZTkMgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzIGJ5IHRoZSBndWVzdDoKKyAqCisgKiAgICAgICAgIDEuIElmIHRoZSBndWVzdCB3aXNoZXMgdG8gZnVsbHkgc3luYyAoZHJhaW4pIHRoZSBGSUZPLAorICogICAgICAgICAgICBpdCB3aWxsIHdyaXRlIG9uY2UgdG8gU1lOQyB0aGVuIHBvbGwgb24gdGhlIEJVU1kKKyAqICAgICAgICAgICAgcmVnaXN0ZXIuIFRoZSBGSUZPIGlzIHN5bmMnZWQgb25jZSBCVVNZIGlzIHplcm8uCisgKgorICogICAgICAgICAyLiBJZiB0aGUgZ3Vlc3Qgd2FudHMgdG8gYXN5bmNocm9ub3VzbHkgd2FrZSB1cCB0aGUgaG9zdCwKKyAqICAgICAgICAgICAgaXQgd2lsbCB3cml0ZSBvbmNlIHRvIFNZTkMgd2l0aG91dCBwb2xsaW5nIG9uIEJVU1kuCisgKiAgICAgICAgICAgIElkZWFsbHkgaXQgd2lsbCBkbyB0aGlzIGFmdGVyIHNvbWUgbmV3IGNvbW1hbmRzIGhhdmUKKyAqICAgICAgICAgICAgYmVlbiBwbGFjZWQgaW4gdGhlIEZJRk8sIGFuZCBhZnRlciByZWFkaW5nIGEgemVybworICogICAgICAgICAgICBmcm9tIFNWR0FfRklGT19CVVNZLgorICoKKyAqICAgICAgICgxKSBpcyB0aGUgb3JpZ2luYWwgYmVoYXZpb3VyIHRoYXQgU1lOQyB3YXMgZGVzaWduZWQgdG8KKyAqICAgICAgIHN1cHBvcnQuICBPcmlnaW5hbGx5LCBhIHdyaXRlIHRvIFNZTkMgd291bGQgaW1wbGljaXRseQorICogICAgICAgdHJpZ2dlciBhIHJlYWQgZnJvbSBCVVNZLiBUaGlzIGNhdXNlcyB1cyB0byBzeW5jaHJvbm91c2x5CisgKiAgICAgICBwcm9jZXNzIHRoZSBGSUZPLgorICoKKyAqICAgICAgIFRoaXMgYmVoYXZpb3VyIGhhcyBzaW5jZSBiZWVuIGNoYW5nZWQgc28gdGhhdCB3cml0aW5nIFNZTkMKKyAqICAgICAgIHdpbGwgKm5vdCogaW1wbGljaXRseSBjYXVzZSBhIHJlYWQgZnJvbSBCVVNZLiBJbnN0ZWFkLCBpdAorICogICAgICAgbWFrZXMgYSBjaGFubmVsIGNhbGwgd2hpY2ggYXN5bmNocm9ub3VzbHkgd2FrZXMgdXAgdGhlIE1LUworICogICAgICAgdGhyZWFkLgorICoKKyAqICAgICAgIE5ldyBndWVzdHMgY2FuIHVzZSB0aGlzIG5ldyBiZWhhdmlvdXIgdG8gaW1wbGVtZW50ICgyKQorICogICAgICAgZWZmaWNpZW50bHkuIFRoaXMgbGV0cyBndWVzdHMgZ2V0IHRoZSBob3N0J3MgYXR0ZW50aW9uCisgKiAgICAgICB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBNS1MgdG8gcG9sbCwgd2hpY2ggZ2l2ZXMgdXMgbXVjaAorICogICAgICAgYmV0dGVyIENQVSB1dGlsaXphdGlvbiBvbiBTTVAgaG9zdHMgYW5kIG9uIFVQIGhvc3RzIHdoaWxlCisgKiAgICAgICB3ZSdyZSBibG9ja2VkIG9uIHRoZSBob3N0IEdQVS4KKyAqCisgKiAgICAgICBPbGQgZ3Vlc3RzIHNob3VsZG4ndCBub3RpY2UgdGhlIGJlaGF2aW91ciBjaGFuZ2UuIFNZTkMgd2FzCisgKiAgICAgICBuZXZlciBndWFyYW50ZWVkIHRvIHByb2Nlc3MgdGhlIGVudGlyZSBGSUZPLCBzaW5jZSBpdCB3YXMKKyAqICAgICAgIGJvdW5kZWQgdG8gYSBwYXJ0aWN1bGFyIG51bWJlciBvZiBDUFUgY3ljbGVzLiBPbGQgZ3Vlc3RzIHdpbGwKKyAqICAgICAgIHN0aWxsIGxvb3Agb24gdGhlIEJVU1kgcmVnaXN0ZXIgdW50aWwgdGhlIEZJRk8gaXMgZW1wdHkuCisgKgorICogICAgICAgV3JpdGluZyB0byBTWU5DIGN1cnJlbnRseSBoYXMgdGhlIGZvbGxvd2luZyBzaWRlLWVmZmVjdHM6CisgKgorICogICAgICAgICAtIFNldHMgU1ZHQV9SRUdfQlVTWSB0byBUUlVFIChpbiB0aGUgbW9uaXRvcikKKyAqICAgICAgICAgLSBBc3luY2hyb25vdXNseSB3YWtlcyB1cCB0aGUgTUtTIHRocmVhZCBmb3IgRklGTyBwcm9jZXNzaW5nCisgKiAgICAgICAgIC0gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gU1lOQyBpcyByZWNvcmRlZCBhcyBhICJyZWFzb24iLCBmb3IKKyAqICAgICAgICAgICBzdGF0cyBwdXJwb3Nlcy4KKyAqCisgKiAgICAgICBJZiBTVkdBX0ZJRk9fQlVTWSBpcyBhdmFpbGFibGUsIGRyaXZlcnMgYXJlIGFkdmlzZWQgdG8gb25seQorICogICAgICAgd3JpdGUgdG8gU1lOQyBpZiBTVkdBX0ZJRk9fQlVTWSBpcyBGQUxTRS4gRHJpdmVycyBzaG91bGQgc2V0CisgKiAgICAgICBTVkdBX0ZJRk9fQlVTWSB0byBUUlVFIGFmdGVyIHdyaXRpbmcgdG8gU1lOQy4gVGhlIE1LUyB3aWxsCisgKiAgICAgICBldmVudHVhbGx5IHNldCBTVkdBX0ZJRk9fQlVTWSBvbiBpdHMgb3duLCBidXQgdGhpcyBhcHByb2FjaAorICogICAgICAgbGV0cyB0aGUgZHJpdmVyIGF2b2lkIHNlbmRpbmcgbXVsdGlwbGUgYXN5bmNocm9ub3VzIHdha2V1cAorICogICAgICAgbWVzc2FnZXMgdG8gdGhlIE1LUyB0aHJlYWQuCisgKgorICogIFNWR0FfUkVHX0JVU1kgLS0KKyAqCisgKiAgICAgICBUaGlzIHJlZ2lzdGVyIGlzIHNldCB0byBUUlVFIHdoZW4gU1ZHQV9SRUdfU1lOQyBpcyB3cml0dGVuLAorICogICAgICAgYW5kIGl0IHJlYWRzIGFzIEZBTFNFIHdoZW4gdGhlIEZJRk8gaGFzIGJlZW4gY29tcGxldGVseQorICogICAgICAgZHJhaW5lZC4KKyAqCisgKiAgICAgICBFdmVyeSByZWFkIGZyb20gdGhpcyByZWdpc3RlciBjYXVzZXMgdXMgdG8gc3luY2hyb25vdXNseQorICogICAgICAgcHJvY2VzcyBGSUZPIGNvbW1hbmRzLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgYXMgdG8gaG93IG1hbnkKKyAqICAgICAgIGNvbW1hbmRzIGVhY2ggcmVhZCB3aWxsIHByb2Nlc3MuCisgKgorICogICAgICAgQ1BVIHRpbWUgc3BlbnQgcHJvY2Vzc2luZyBGSUZPIGNvbW1hbmRzIHdpbGwgYmUgYmlsbGVkIHRvCisgKiAgICAgICB0aGUgZ3Vlc3QuCisgKgorICogICAgICAgTmV3IGRyaXZlcnMgc2hvdWxkIGF2b2lkIHVzaW5nIHRoaXMgcmVnaXN0ZXIgdW5sZXNzIHRoZXkKKyAqICAgICAgIG5lZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIEZJRk8gaXMgY29tcGxldGVseSBkcmFpbmVkLiBJdAorICogICAgICAgaXMgb3ZlcmtpbGwgZm9yIHBlcmZvcm1pbmcgYSBzeW5jLXRvLWZlbmNlLiBPbGRlciBkcml2ZXJzCisgKiAgICAgICB3aWxsIHVzZSB0aGlzIHJlZ2lzdGVyIGZvciBhbnkgdHlwZSBvZiBzeW5jaHJvbml6YXRpb24uCisgKgorICogIFNWR0FfRklGT19CVVNZIC0tCisgKgorICogICAgICAgVGhpcyByZWdpc3RlciBpcyBhIGZhc3Qgd2F5IGZvciB0aGUgZ3Vlc3QgZHJpdmVyIHRvIGNoZWNrCisgKiAgICAgICB3aGV0aGVyIHRoZSBGSUZPIGlzIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkLiBJdCByZWFkcyBhbmQKKyAqICAgICAgIHdyaXRlcyBhdCBub3JtYWwgUkFNIHNwZWVkcywgd2l0aCBubyBtb25pdG9yIGludGVydmVudGlvbi4KKyAqCisgKiAgICAgICBJZiB0aGlzIHJlZ2lzdGVyIHJlYWRzIGFzIFRSVUUsIHRoZSBob3N0IGlzIGd1YXJhbnRlZWluZyB0aGF0CisgKiAgICAgICBhbnkgbmV3IGNvbW1hbmRzIHdyaXR0ZW4gaW50byB0aGUgRklGTyB3aWxsIGJlIG5vdGljZWQgYmVmb3JlCisgKiAgICAgICB0aGUgTUtTIGdvZXMgYmFjayB0byBzbGVlcC4KKyAqCisgKiAgICAgICBJZiB0aGlzIHJlZ2lzdGVyIHJlYWRzIGFzIEZBTFNFLCBubyBzdWNoIGd1YXJhbnRlZSBjYW4gYmUKKyAqICAgICAgIG1hZGUuCisgKgorICogICAgICAgVGhlIGd1ZXN0IHNob3VsZCB1c2UgdGhpcyByZWdpc3RlciB0byBxdWlja2x5IGRldGVybWluZQorICogICAgICAgd2hldGhlciBvciBub3QgaXQgbmVlZHMgdG8gd2FrZSB1cCB0aGUgaG9zdC4gSWYgdGhlIGd1ZXN0CisgKiAgICAgICBqdXN0IHdyb3RlIGEgY29tbWFuZCBvciBncm91cCBvZiBjb21tYW5kcyB0aGF0IGl0IHdvdWxkIGxpa2UKKyAqICAgICAgIHRoZSBob3N0IHRvIGJlZ2luIHByb2Nlc3NpbmcsIGl0IHNob3VsZDoKKyAqCisgKiAgICAgICAgIDEuIFJlYWQgU1ZHQV9GSUZPX0JVU1kuIElmIGl0IHJlYWRzIGFzIFRSVUUsIG5vIGZ1cnRoZXIKKyAqICAgICAgICAgICAgYWN0aW9uIGlzIG5lY2Vzc2FyeS4KKyAqCisgKiAgICAgICAgIDIuIFdyaXRlIFRSVUUgdG8gU1ZHQV9GSUZPX0JVU1kuIFRoaXMgaW5mb3JtcyBmdXR1cmUgZ3Vlc3QKKyAqICAgICAgICAgICAgY29kZSB0aGF0IHdlJ3ZlIGFscmVhZHkgc2VudCBhIFNZTkMgdG8gdGhlIGhvc3QgYW5kIHdlCisgKiAgICAgICAgICAgIGRvbid0IG5lZWQgdG8gc2VuZCBhIGR1cGxpY2F0ZS4KKyAqCisgKiAgICAgICAgIDMuIFdyaXRlIGEgcmVhc29uIHRvIFNWR0FfUkVHX1NZTkMuIFRoaXMgd2lsbCBzZW5kIGFuCisgKiAgICAgICAgICAgIGFzeW5jaHJvbm91cyB3YWtldXAgdG8gdGhlIE1LUyB0aHJlYWQuCisgKi8KKworCisvKgorICogRklGTyBDYXBhYmlsaXRpZXMKKyAqCisgKiAgICAgIEZlbmNlIC0tIEZlbmNlIHJlZ2lzdGVyIGFuZCBjb21tYW5kIGFyZSBzdXBwb3J0ZWQKKyAqICAgICAgQWNjZWwgRnJvbnQgLS0gRnJvbnQgYnVmZmVyIG9ubHkgY29tbWFuZHMgYXJlIHN1cHBvcnRlZAorICogICAgICBQaXRjaCBMb2NrIC0tIFBpdGNoIGxvY2sgcmVnaXN0ZXIgaXMgc3VwcG9ydGVkCisgKiAgICAgIFZpZGVvIC0tIFNWR0EgVmlkZW8gb3ZlcmxheSB1bml0cyBhcmUgc3VwcG9ydGVkCisgKiAgICAgIEVzY2FwZSAtLSBFc2NhcGUgY29tbWFuZCBpcyBzdXBwb3J0ZWQKKyAqCisgKiBYWFg6IEFkZCBsb25nZXIgZGVzY3JpcHRpb25zIGZvciBlYWNoIGNhcGFiaWxpdHksIGluY2x1ZGluZyBhIGxpc3QKKyAqICAgICAgb2YgdGhlIG5ldyBmZWF0dXJlcyB0aGF0IGVhY2ggY2FwYWJpbGl0eSBwcm92aWRlcy4KKyAqCisgKiBTVkdBX0ZJRk9fQ0FQX1NDUkVFTl9PQkpFQ1QgLS0KKyAqCisgKiAgICBQcm92aWRlcyBkeW5hbWljIG11bHRpLXNjcmVlbiByZW5kZXJpbmcsIGZvciBpbXByb3ZlZCBVbml0eSBhbmQKKyAqICAgIG11bHRpLW1vbml0b3IgbW9kZXMuIFdpdGggU2NyZWVuIE9iamVjdCwgdGhlIGd1ZXN0IGNhbgorICogICAgZHluYW1pY2FsbHkgY3JlYXRlIGFuZCBkZXN0cm95ICdzY3JlZW5zJywgd2hpY2ggY2FuIHJlcHJlc2VudAorICogICAgVW5pdHkgd2luZG93cyBvciB2aXJ0dWFsIG1vbml0b3JzLiBTY3JlZW4gT2JqZWN0IGFsc28gcHJvdmlkZXMKKyAqICAgIHN0cm9uZyBndWFyYW50ZWVzIHRoYXQgRE1BIG9wZXJhdGlvbnMgaGFwcGVuIG9ubHkgd2hlbgorICogICAgZ3Vlc3QtaW5pdGlhdGVkLiBTY3JlZW4gT2JqZWN0IGRlcHJlY2F0ZXMgdGhlIEJBUjEgZ3Vlc3QKKyAqICAgIGZyYW1lYnVmZmVyIChHRkIpIGFuZCBhbGwgY29tbWFuZHMgdGhhdCB3b3JrIG9ubHkgd2l0aCB0aGUgR0ZCLgorICoKKyAqICAgIE5ldyByZWdpc3RlcnM6CisgKiAgICAgICBGSUZPX0NVUlNPUl9TQ1JFRU5fSUQsIFZJREVPX0RBVEFfR01SSUQsIFZJREVPX0RTVF9TQ1JFRU5fSUQKKyAqCisgKiAgICBOZXcgMkQgY29tbWFuZHM6CisgKiAgICAgICBERUZJTkVfU0NSRUVOLCBERVNUUk9ZX1NDUkVFTiwgREVGSU5FX0dNUkZCLCBCTElUX0dNUkZCX1RPX1NDUkVFTiwKKyAqICAgICAgIEJMSVRfU0NSRUVOX1RPX0dNUkZCLCBBTk5PVEFUSU9OX0ZJTEwsIEFOTk9UQVRJT05fQ09QWQorICoKKyAqICAgIE5ldyAzRCBjb21tYW5kczoKKyAqICAgICAgIEJMSVRfU1VSRkFDRV9UT19TQ1JFRU4KKyAqCisgKiAgICBOZXcgZ3VhcmFudGVlczoKKyAqCisgKiAgICAgICAtIFRoZSBob3N0IHdpbGwgbm90IHJlYWQgb3Igd3JpdGUgZ3Vlc3QgbWVtb3J5LCBpbmNsdWRpbmcgdGhlIEdGQiwKKyAqICAgICAgICAgZXhjZXB0IHdoZW4gZXhwbGljaXRseSBpbml0aWF0ZWQgYnkgYSBETUEgY29tbWFuZC4KKyAqCisgKiAgICAgICAtIEFsbCBETUEsIGluY2x1ZGluZyBsZWdhY3kgRE1BIGxpa2UgVVBEQVRFIGFuZCBQUkVTRU5UX1JFQURCQUNLLAorICogICAgICAgICBpcyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlZm9yZSBhbnkgc3Vic2VxdWVudCBGRU5DRXMuCisgKgorICogICAgICAgLSBBbGwgbGVnYWN5IGNvbW1hbmRzIHdoaWNoIGFmZmVjdCBhIFNjcmVlbiAoVVBEQVRFLCBQUkVTRU5ULAorICogICAgICAgICBQUkVTRU5UX1JFQURCQUNLKSBhcyB3ZWxsIGFzIG5ldyBTY3JlZW4gYmxpdCBjb21tYW5kcyB3aWxsCisgKiAgICAgICAgIGFsbCBiZWhhdmUgY29uc2lzdGVudGx5IGFzIGJsaXRzLCBhbmQgbWVtb3J5IHdpbGwgYmUgcmVhZAorICogICAgICAgICBvciB3cml0dGVuIGluIEZJRk8gb3JkZXIuCisgKgorICogICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IFBSRVNFTlQgZnJvbSBvbmUgU1ZHQTNEIHN1cmZhY2UgdG8gbXVsdGlwbGUKKyAqICAgICAgICAgcGxhY2VzIG9uIHRoZSBzY3JlZW4sIHRoZSBkYXRhIGNvcGllZCB3aWxsIGFsd2F5cyBiZSBmcm9tIHRoZQorICogICAgICAgICBTVkdBM0Qgc3VyZmFjZSBhdCB0aGUgdGltZSB0aGUgUFJFU0VOVCB3YXMgaXNzdWVkIGluIHRoZSBGSUZPLgorICogICAgICAgICBUaGlzIHdhcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBvbiBkZXZpY2VzIHdpdGhvdXQgU2NyZWVuIE9iamVjdC4KKyAqCisgKiAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBvbiBkZXZpY2VzIHRoYXQgc3VwcG9ydCBTY3JlZW4gT2JqZWN0LCB0aGUKKyAqICAgICAgICAgUFJFU0VOVF9SRUFEQkFDSyBjb21tYW5kIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHVubGVzcyB5b3UKKyAqICAgICAgICAgYWN0dWFsbHkgd2FudCB0byByZWFkIGJhY2sgdGhlIHJlc3VsdHMgb2YgM0QgcmVuZGVyaW5nIGludG8KKyAqICAgICAgICAgc3lzdGVtIG1lbW9yeS4gKEFuZCBmb3IgdGhhdCwgdGhlIEJMSVRfU0NSRUVOX1RPX0dNUkZCCisgKiAgICAgICAgIGNvbW1hbmQgcHJvdmlkZXMgYSBzdHJpY3Qgc3VwZXJzZXQgb2YgZnVuY3Rpb25hbGl0eS4pCisgKgorICogICAgICAgLSBXaGVuIGEgc2NyZWVuIGlzIHJlc2l6ZWQsIGVpdGhlciB1c2luZyBTY3JlZW4gT2JqZWN0IGNvbW1hbmRzIG9yCisgKiAgICAgICAgIGxlZ2FjeSBtdWx0aW1vbiByZWdpc3RlcnMsIGl0cyBjb250ZW50cyBhcmUgcHJlc2VydmVkLgorICovCisKKyNkZWZpbmUgU1ZHQV9GSUZPX0NBUF9OT05FICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX0ZFTkNFICAgICAgICAgICAgICgxPDwwKQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX0FDQ0VMRlJPTlQgICAgICAgICgxPDwxKQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX1BJVENITE9DSyAgICAgICAgICgxPDwyKQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX1ZJREVPICAgICAgICAgICAgICgxPDwzKQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX0NVUlNPUl9CWVBBU1NfMyAgICgxPDw0KQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX0VTQ0FQRSAgICAgICAgICAgICgxPDw1KQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX1JFU0VSVkUgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX1NDUkVFTl9PQkpFQ1QgICAgICgxPDw3KQorCisKKy8qCisgKiBGSUZPIEZsYWdzCisgKgorICogICAgICBBY2NlbCBGcm9udCAtLSBEcml2ZXIgc2hvdWxkIHVzZSBmcm9udCBidWZmZXIgb25seSBjb21tYW5kcworICovCisKKyNkZWZpbmUgU1ZHQV9GSUZPX0ZMQUdfTk9ORSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTVkdBX0ZJRk9fRkxBR19BQ0NFTEZST05UICAgICAgICgxPDwwKQorI2RlZmluZSBTVkdBX0ZJRk9fRkxBR19SRVNFUlZFRCAgICAgICAgKDE8PDMxKSAvLyBJbnRlcm5hbCB1c2Ugb25seQorCisvKgorICogRklGTyByZXNlcnZhdGlvbiBzZW50aW5lbCB2YWx1ZQorICovCisKKyNkZWZpbmUgU1ZHQV9GSUZPX1JFU0VSVkVEX1VOS05PV04gICAgICAweGZmZmZmZmZmCisKKworLyoKKyAqIFZpZGVvIG92ZXJsYXkgc3VwcG9ydAorICovCisKKyNkZWZpbmUgU1ZHQV9OVU1fT1ZFUkxBWV9VTklUUyAzMgorCisKKy8qCisgKiBWaWRlbyBjYXBhYmlsaXRpZXMgdGhhdCB0aGUgZ3Vlc3QgaXMgY3VycmVudGx5IHVzaW5nCisgKi8KKworI2RlZmluZSBTVkdBX1ZJREVPX0ZMQUdfQ09MT1JLRVkgICAgICAgIDB4MDAwMQorCisKKy8qCisgKiBPZmZzZXRzIGZvciB0aGUgdmlkZW8gb3ZlcmxheSByZWdpc3RlcnMKKyAqLworCitlbnVtIHsKKyAgIFNWR0FfVklERU9fRU5BQkxFRCA9IDAsCisgICBTVkdBX1ZJREVPX0ZMQUdTLAorICAgU1ZHQV9WSURFT19EQVRBX09GRlNFVCwKKyAgIFNWR0FfVklERU9fRk9STUFULAorICAgU1ZHQV9WSURFT19DT0xPUktFWSwKKyAgIFNWR0FfVklERU9fU0laRSwgICAgICAgICAgLy8gRGVwcmVjYXRlZAorICAgU1ZHQV9WSURFT19XSURUSCwKKyAgIFNWR0FfVklERU9fSEVJR0hULAorICAgU1ZHQV9WSURFT19TUkNfWCwKKyAgIFNWR0FfVklERU9fU1JDX1ksCisgICBTVkdBX1ZJREVPX1NSQ19XSURUSCwKKyAgIFNWR0FfVklERU9fU1JDX0hFSUdIVCwKKyAgIFNWR0FfVklERU9fRFNUX1gsICAgICAgICAgLy8gU2lnbmVkIGludDMyCisgICBTVkdBX1ZJREVPX0RTVF9ZLCAgICAgICAgIC8vIFNpZ25lZCBpbnQzMgorICAgU1ZHQV9WSURFT19EU1RfV0lEVEgsCisgICBTVkdBX1ZJREVPX0RTVF9IRUlHSFQsCisgICBTVkdBX1ZJREVPX1BJVENIXzEsCisgICBTVkdBX1ZJREVPX1BJVENIXzIsCisgICBTVkdBX1ZJREVPX1BJVENIXzMsCisgICBTVkdBX1ZJREVPX0RBVEFfR01SSUQsICAgIC8vIE9wdGlvbmFsLCBkZWZhdWx0cyB0byBTVkdBX0dNUl9GUkFNRUJVRkZFUgorICAgU1ZHQV9WSURFT19EU1RfU0NSRUVOX0lELCAvLyBPcHRpb25hbCwgZGVmYXVsdHMgdG8gdmlydHVhbCBjb29yZHMgKFNWR0FfSURfSU5WQUxJRCkKKyAgIFNWR0FfVklERU9fTlVNX1JFR1MKK307CisKKworLyoKKyAqIFNWR0EgT3ZlcmxheSBVbml0cworICoKKyAqICAgICAgd2lkdGggYW5kIGhlaWdodCByZWxhdGUgdG8gdGhlIGVudGlyZSBzb3VyY2UgdmlkZW8gZnJhbWUuCisgKiAgICAgIHNyY1gsIHNyY1ksIHNyY1dpZHRoIGFuZCBzcmNIZWlnaHQgcmVwcmVzZW50IHN1YnNldCBvZiB0aGUgc291cmNlCisgKiAgICAgIHZpZGVvIGZyYW1lIHRvIGJlIGRpc3BsYXllZC4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBTVkdBT3ZlcmxheVVuaXQgeworICAgdWludDMyIGVuYWJsZWQ7CisgICB1aW50MzIgZmxhZ3M7CisgICB1aW50MzIgZGF0YU9mZnNldDsKKyAgIHVpbnQzMiBmb3JtYXQ7CisgICB1aW50MzIgY29sb3JLZXk7CisgICB1aW50MzIgc2l6ZTsKKyAgIHVpbnQzMiB3aWR0aDsKKyAgIHVpbnQzMiBoZWlnaHQ7CisgICB1aW50MzIgc3JjWDsKKyAgIHVpbnQzMiBzcmNZOworICAgdWludDMyIHNyY1dpZHRoOworICAgdWludDMyIHNyY0hlaWdodDsKKyAgIGludDMyICBkc3RYOworICAgaW50MzIgIGRzdFk7CisgICB1aW50MzIgZHN0V2lkdGg7CisgICB1aW50MzIgZHN0SGVpZ2h0OworICAgdWludDMyIHBpdGNoZXNbM107CisgICB1aW50MzIgZGF0YUdNUklkOworICAgdWludDMyIGRzdFNjcmVlbklkOworfSBTVkdBT3ZlcmxheVVuaXQ7CisKKworLyoKKyAqIFNWR0FTY3JlZW5PYmplY3QgLS0KKyAqCisgKiAgICBUaGlzIGlzIGEgbmV3IHdheSB0byByZXByZXNlbnQgYSBndWVzdCdzIG11bHRpLW1vbml0b3Igc2NyZWVuIG9yCisgKiAgICBVbml0eSB3aW5kb3cuIFNjcmVlbiBvYmplY3RzIGFyZSBvbmx5IHN1cHBvcnRlZCBpZiB0aGUKKyAqICAgIFNWR0FfRklGT19DQVBfU0NSRUVOX09CSkVDVCBjYXBhYmlsaXR5IGJpdCBpcyBzZXQuCisgKgorICogICAgSWYgU2NyZWVuIE9iamVjdHMgYXJlIHN1cHBvcnRlZCwgdGhleSBjYW4gYmUgdXNlZCB0byBmdWxseQorICogICAgcmVwbGFjZSB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgZnJhbWVidWZmZXIgcmVnaXN0ZXJzCisgKiAgICAoU1ZHQV9SRUdfV0lEVEgsIEhFSUdIVCwgZXRjLikgYW5kIGJ5IFNWR0FfQ0FQX0RJU1BMQVlfVE9QT0xPR1kuCisgKgorICogICAgVGhlIHNjcmVlbiBvYmplY3QgaXMgYSBzdHJ1Y3Qgd2l0aCBndWFyYW50ZWVkIGJpbmFyeQorICogICAgY29tcGF0aWJpbGl0eS4gTmV3IGZsYWdzIGNhbiBiZSBhZGRlZCwgYW5kIHRoZSBzdHJ1Y3QgbWF5IGdyb3csCisgKiAgICBidXQgZXhpc3RpbmcgZmllbGRzIG11c3QgcmV0YWluIHRoZWlyIG1lYW5pbmcuCisgKgorICovCisKKyNkZWZpbmUgU1ZHQV9TQ1JFRU5fSEFTX1JPT1QgICAgKDEgPDwgMCkgIC8vIFNjcmVlbiBpcyBwcmVzZW50IGluIHRoZSB2aXJ0dWFsIGNvb3JkIHNwYWNlCisjZGVmaW5lIFNWR0FfU0NSRUVOX0lTX1BSSU1BUlkgICgxIDw8IDEpICAvLyBHdWVzdCBjb25zaWRlcnMgdGhpcyBzY3JlZW4gdG8gYmUgJ3ByaW1hcnknCisjZGVmaW5lIFNWR0FfU0NSRUVOX0ZVTExTQ1JFRU5fSElOVCAoMSA8PCAyKSAgIC8vIEd1ZXN0IGlzIHJ1bm5pbmcgYSBmdWxsc2NyZWVuIGFwcCBoZXJlCisKK3R5cGVkZWYKK3N0cnVjdCBTVkdBU2NyZWVuT2JqZWN0IHsKKyAgIHVpbnQzMiBzdHJ1Y3RTaXplOyAgIC8vIHNpemVvZihTVkdBU2NyZWVuT2JqZWN0KQorICAgdWludDMyIGlkOworICAgdWludDMyIGZsYWdzOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQzMiB3aWR0aDsKKyAgICAgIHVpbnQzMiBoZWlnaHQ7CisgICB9IHNpemU7CisgICBzdHJ1Y3QgeworICAgICAgaW50MzIgeDsKKyAgICAgIGludDMyIHk7CisgICB9IHJvb3Q7ICAgICAgICAgICAgICAvLyBPbmx5IHVzZWQgaWYgU1ZHQV9TQ1JFRU5fSEFTX1JPT1QgaXMgc2V0LgorfSBTVkdBU2NyZWVuT2JqZWN0OworCisKKy8qCisgKiAgQ29tbWFuZHMgaW4gdGhlIGNvbW1hbmQgRklGTzoKKyAqCisgKiAgQ29tbWFuZCBJRHMgZGVmaW5lZCBiZWxvdyBhcmUgdXNlZCBmb3IgdGhlIHRyYWRpdGlvbmFsIDJEIEZJRk8KKyAqICBjb21tdW5pY2F0aW9uIChub3QgYWxsIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUgZm9yIGFsbCB2ZXJzaW9ucyBvZiB0aGUKKyAqICBTVkdBIEZJRk8gcHJvdG9jb2wpLgorICoKKyAqICBOb3RlIHRoZSBob2xlcyBpbiB0aGUgY29tbWFuZCBJRCBudW1iZXJzOiBUaGVzZSBjb21tYW5kcyBoYXZlIGJlZW4KKyAqICBkZXByZWNhdGVkLCBhbmQgdGhlIG9sZCBJRHMgbXVzdCBub3QgYmUgcmV1c2VkLgorICoKKyAqICBDb21tYW5kIElEcyBmcm9tIDEwMDAgdG8gMTk5OSBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgU1ZHQTNECisgKiAgcHJvdG9jb2wuCisgKgorICogIEVhY2ggY29tbWFuZCdzIHBhcmFtZXRlcnMgYXJlIGRlc2NyaWJlZCBieSB0aGUgY29tbWVudHMgYW5kCisgKiAgc3RydWN0cyBiZWxvdy4KKyAqLworCit0eXBlZGVmIGVudW0geworICAgU1ZHQV9DTURfSU5WQUxJRF9DTUQgICAgICAgICAgID0gMCwKKyAgIFNWR0FfQ01EX1VQREFURSAgICAgICAgICAgICAgICA9IDEsCisgICBTVkdBX0NNRF9SRUNUX0NPUFkgICAgICAgICAgICAgPSAzLAorICAgU1ZHQV9DTURfREVGSU5FX0NVUlNPUiAgICAgICAgID0gMTksCisgICBTVkdBX0NNRF9ERUZJTkVfQUxQSEFfQ1VSU09SICAgPSAyMiwKKyAgIFNWR0FfQ01EX1VQREFURV9WRVJCT1NFICAgICAgICA9IDI1LAorICAgU1ZHQV9DTURfRlJPTlRfUk9QX0ZJTEwgICAgICAgID0gMjksCisgICBTVkdBX0NNRF9GRU5DRSAgICAgICAgICAgICAgICAgPSAzMCwKKyAgIFNWR0FfQ01EX0VTQ0FQRSAgICAgICAgICAgICAgICA9IDMzLAorICAgU1ZHQV9DTURfREVGSU5FX1NDUkVFTiAgICAgICAgID0gMzQsCisgICBTVkdBX0NNRF9ERVNUUk9ZX1NDUkVFTiAgICAgICAgPSAzNSwKKyAgIFNWR0FfQ01EX0RFRklORV9HTVJGQiAgICAgICAgICA9IDM2LAorICAgU1ZHQV9DTURfQkxJVF9HTVJGQl9UT19TQ1JFRU4gID0gMzcsCisgICBTVkdBX0NNRF9CTElUX1NDUkVFTl9UT19HTVJGQiAgPSAzOCwKKyAgIFNWR0FfQ01EX0FOTk9UQVRJT05fRklMTCAgICAgICA9IDM5LAorICAgU1ZHQV9DTURfQU5OT1RBVElPTl9DT1BZICAgICAgID0gNDAsCisgICBTVkdBX0NNRF9NQVgKK30gU1ZHQUZpZm9DbWRJZDsKKworI2RlZmluZSBTVkdBX0NNRF9NQVhfQVJHUyAgICAgICAgICAgNjQKKworCisvKgorICogU1ZHQV9DTURfVVBEQVRFIC0tCisgKgorICogICAgVGhpcyBpcyBhIERNQSB0cmFuc2ZlciB3aGljaCBjb3BpZXMgZnJvbSB0aGUgR3Vlc3QgRnJhbWVidWZmZXIKKyAqICAgIChHRkIpIGF0IEJBUjEgKyBTVkdBX1JFR19GQl9PRkZTRVQgdG8gYW55IHNjcmVlbnMgd2hpY2gKKyAqICAgIGludGVyc2VjdCB3aXRoIHRoZSBwcm92aWRlZCB2aXJ0dWFsIHJlY3RhbmdsZS4KKyAqCisgKiAgICBUaGlzIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZyBhcmJpdHJhcnkgZ3Vlc3QgbWVtb3J5IGFzIGEKKyAqICAgIGRhdGEgc291cmNlLSBpdCBvbmx5IHdvcmtzIHdpdGggdGhlIHByZS1kZWZpbmVkIEdGQiBtZW1vcnkuCisgKiAgICBUaGlzIGNvbW1hbmQgYWxzbyBkb2VzIG5vdCBzdXBwb3J0IHNpZ25lZCB2aXJ0dWFsIGNvb3JkaW5hdGVzLgorICogICAgSWYgeW91IGhhdmUgZGVmaW5lZCBzY3JlZW5zICh1c2luZyBTVkdBX0NNRF9ERUZJTkVfU0NSRUVOKSB3aXRoCisgKiAgICBuZWdhdGl2ZSByb290IHgveSBjb29yZGluYXRlcywgdGhlIG5lZ2F0aXZlIHBvcnRpb24gb2YgdGhvc2UKKyAqICAgIHNjcmVlbnMgd2lsbCBub3QgYmUgcmVhY2hhYmxlIGJ5IHRoaXMgY29tbWFuZC4KKyAqCisgKiAgICBUaGlzIGNvbW1hbmQgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHVzaW5nIGZyYW1lYnVmZmVyCisgKiAgICB0cmFjZXMuIFRyYWNlcyBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBTVkdBIEZJRk8gaXMKKyAqICAgIGRpc2FibGVkLCBhbmQgeW91IG1heSBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIHRyYWNlcyB1c2luZworICogICAgU1ZHQV9SRUdfVFJBQ0VTLiBXaXRoIHRyYWNlcyBlbmFibGVkLCBhbnkgd3JpdGUgdG8gdGhlIEdGQiB3aWxsCisgKiAgICBhdXRvbWF0aWNhbGx5IGFjdCBhcyBpZiBhIHN1YnNlcXVlbnQgU1ZHQV9DTURfVVBEQVRFIHdhcyBpc3N1ZWQuCisgKgorICogICAgVHJhY2VzIGFuZCBTVkdBX0NNRF9VUERBVEUgYXJlIHRoZSBvbmx5IHN1cHBvcnRlZCB3YXlzIHRvIHJlbmRlcgorICogICAgcHNldWRvY29sb3Igc2NyZWVuIHVwZGF0ZXMuIFRoZSBuZXdlciBTY3JlZW4gT2JqZWN0IGNvbW1hbmRzCisgKiAgICBvbmx5IHN1cHBvcnQgdHJ1ZSBjb2xvciBmb3JtYXRzLgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIEFsd2F5cyBhdmFpbGFibGUuCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiB4OworICAgdWludDMyIHk7CisgICB1aW50MzIgd2lkdGg7CisgICB1aW50MzIgaGVpZ2h0OworfSBTVkdBRmlmb0NtZFVwZGF0ZTsKKworCisvKgorICogU1ZHQV9DTURfUkVDVF9DT1BZIC0tCisgKgorICogICAgUGVyZm9ybSBhIHJlY3Rhbmd1bGFyIERNQSB0cmFuc2ZlciBmcm9tIG9uZSBhcmVhIG9mIHRoZSBHRkIgdG8KKyAqICAgIGFub3RoZXIsIGFuZCBjb3B5IHRoZSByZXN1bHQgdG8gYW55IHNjcmVlbnMgd2hpY2ggaW50ZXJzZWN0IGl0LgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfQ0FQX1JFQ1RfQ09QWQorICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgc3JjWDsKKyAgIHVpbnQzMiBzcmNZOworICAgdWludDMyIGRlc3RYOworICAgdWludDMyIGRlc3RZOworICAgdWludDMyIHdpZHRoOworICAgdWludDMyIGhlaWdodDsKK30gU1ZHQUZpZm9DbWRSZWN0Q29weTsKKworCisvKgorICogU1ZHQV9DTURfREVGSU5FX0NVUlNPUiAtLQorICoKKyAqICAgIFByb3ZpZGUgYSBuZXcgY3Vyc29yIGltYWdlLCBhcyBhbiBBTkQvWE9SIG1hc2suCisgKgorICogICAgVGhlIHJlY29tbWVuZGVkIHdheSB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIG92ZXJsYXkgaXMgYnkgdXNpbmcKKyAqICAgIHRoZSBTVkdBX0ZJRk9fQ1VSU09SXyogcmVnaXN0ZXJzLCBzdXBwb3J0ZWQgYnkgdGhlCisgKiAgICBTVkdBX0ZJRk9fQ0FQX0NVUlNPUl9CWVBBU1NfMyBjYXBhYmlsaXR5LgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfQ0FQX0NVUlNPUgorICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICB1aW50MzIgaWQ7ICAgICAgICAgICAgIC8vIFJlc2VydmVkLCBtdXN0IGJlIHplcm8uCisgICB1aW50MzIgaG90c3BvdFg7CisgICB1aW50MzIgaG90c3BvdFk7CisgICB1aW50MzIgd2lkdGg7CisgICB1aW50MzIgaGVpZ2h0OworICAgdWludDMyIGFuZE1hc2tEZXB0aDsgICAvLyBWYWx1ZSBtdXN0IGJlIDEgb3IgZXF1YWwgdG8gQklUU19QRVJfUElYRUwKKyAgIHVpbnQzMiB4b3JNYXNrRGVwdGg7ICAgLy8gVmFsdWUgbXVzdCBiZSAxIG9yIGVxdWFsIHRvIEJJVFNfUEVSX1BJWEVMCisgICAvKgorICAgICogRm9sbG93ZWQgYnkgc2NhbmxpbmUgZGF0YSBmb3IgQU5EIG1hc2ssIHRoZW4gWE9SIG1hc2suCisgICAgKiBFYWNoIHNjYW5saW5lIGlzIHBhZGRlZCB0byBhIDMyLWJpdCBib3VuZGFyeS4KKyAgICovCit9IFNWR0FGaWZvQ21kRGVmaW5lQ3Vyc29yOworCisKKy8qCisgKiBTVkdBX0NNRF9ERUZJTkVfQUxQSEFfQ1VSU09SIC0tCisgKgorICogICAgUHJvdmlkZSBhIG5ldyBjdXJzb3IgaW1hZ2UsIGluIDMyLWJpdCBCR1JBIGZvcm1hdC4KKyAqCisgKiAgICBUaGUgcmVjb21tZW5kZWQgd2F5IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3Igb3ZlcmxheSBpcyBieSB1c2luZworICogICAgdGhlIFNWR0FfRklGT19DVVJTT1JfKiByZWdpc3RlcnMsIHN1cHBvcnRlZCBieSB0aGUKKyAqICAgIFNWR0FfRklGT19DQVBfQ1VSU09SX0JZUEFTU18zIGNhcGFiaWxpdHkuCisgKgorICogQXZhaWxhYmlsaXR5OgorICogICAgU1ZHQV9DQVBfQUxQSEFfQ1VSU09SCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiBpZDsgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQsIG11c3QgYmUgemVyby4KKyAgIHVpbnQzMiBob3RzcG90WDsKKyAgIHVpbnQzMiBob3RzcG90WTsKKyAgIHVpbnQzMiB3aWR0aDsKKyAgIHVpbnQzMiBoZWlnaHQ7CisgICAvKiBGb2xsb3dlZCBieSBzY2FubGluZSBkYXRhICovCit9IFNWR0FGaWZvQ21kRGVmaW5lQWxwaGFDdXJzb3I7CisKKworLyoKKyAqIFNWR0FfQ01EX1VQREFURV9WRVJCT1NFIC0tCisgKgorICogICAgSnVzdCBsaWtlIFNWR0FfQ01EX1VQREFURSwgYnV0IGFsc28gcHJvdmlkZSBhIHBlci1yZWN0YW5nbGUKKyAqICAgICdyZWFzb24nIHZhbHVlLCBhbiBvcGFxdWUgY29va2llIHdoaWNoIGlzIHVzZWQgYnkgaW50ZXJuYWwKKyAqICAgIGRlYnVnZ2luZyB0b29scy4gVGhpcmQgcGFydHkgZHJpdmVycyBzaG91bGQgbm90IHVzZSB0aGlzCisgKiAgICBjb21tYW5kLgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfQ0FQX0VYVEVOREVEX0ZJRk8KKyAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgdWludDMyIHg7CisgICB1aW50MzIgeTsKKyAgIHVpbnQzMiB3aWR0aDsKKyAgIHVpbnQzMiBoZWlnaHQ7CisgICB1aW50MzIgcmVhc29uOworfSBTVkdBRmlmb0NtZFVwZGF0ZVZlcmJvc2U7CisKKworLyoKKyAqIFNWR0FfQ01EX0ZST05UX1JPUF9GSUxMIC0tCisgKgorICogICAgVGhpcyBpcyBhIGhpbnQgd2hpY2ggdGVsbHMgdGhlIFNWR0EgZGV2aWNlIHRoYXQgdGhlIGRyaXZlciBoYXMKKyAqICAgIGp1c3QgZmlsbGVkIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHRoZSBHRkIgd2l0aCBhIHNvbGlkCisgKiAgICBjb2xvci4gSW5zdGVhZCBvZiByZWFkaW5nIHRoZXNlIHBpeGVscyBmcm9tIHRoZSBHRkIsIHRoZSBkZXZpY2UKKyAqICAgIGNhbiBhc3N1bWUgdGhhdCB0aGV5IGFsbCBlcXVhbCAnY29sb3InLiBUaGlzIGlzIHByaW1hcmlseSB1c2VkCisgKiAgICBmb3IgcmVtb3RlIGRlc2t0b3AgcHJvdG9jb2xzLgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfRklGT19DQVBfQUNDRUxGUk9OVAorICovCisKKyNkZWZpbmUgIFNWR0FfUk9QX0NPUFkgICAgICAgICAgICAgICAgICAgIDB4MDMKKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiBjb2xvcjsgICAgIC8vIEluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgR0ZCCisgICB1aW50MzIgeDsKKyAgIHVpbnQzMiB5OworICAgdWludDMyIHdpZHRoOworICAgdWludDMyIGhlaWdodDsKKyAgIHVpbnQzMiByb3A7ICAgICAgIC8vIE11c3QgYmUgU1ZHQV9ST1BfQ09QWQorfSBTVkdBRmlmb0NtZEZyb250Um9wRmlsbDsKKworCisvKgorICogU1ZHQV9DTURfRkVOQ0UgLS0KKyAqCisgKiAgICBJbnNlcnQgYSBzeW5jaHJvbml6YXRpb24gZmVuY2UuICBXaGVuIHRoZSBTVkdBIGRldmljZSByZWFjaGVzCisgKiAgICB0aGlzIGNvbW1hbmQsIGl0IHdpbGwgY29weSB0aGUgJ2ZlbmNlJyB2YWx1ZSBpbnRvIHRoZQorICogICAgU1ZHQV9GSUZPX0ZFTkNFIHJlZ2lzdGVyLiBJdCB3aWxsIGFsc28gY29tcGFyZSB0aGUgZmVuY2UgYWdhaW5zdAorICogICAgU1ZHQV9GSUZPX0ZFTkNFX0dPQUwuIElmIHRoZSBmZW5jZSBtYXRjaGVzIHRoZSBnb2FsIGFuZCB0aGUKKyAqICAgIFNWR0FfSVJRRkxBR19GRU5DRV9HT0FMIGludGVycnVwdCBpcyBlbmFibGVkLCB0aGUgZGV2aWNlIHdpbGwKKyAqICAgIHJhaXNlIHRoaXMgaW50ZXJydXB0LgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfRklGT19GRU5DRSBmb3IgdGhpcyBjb21tYW5kLAorICogICAgU1ZHQV9DQVBfSVJRTUFTSyBmb3IgU1ZHQV9GSUZPX0ZFTkNFX0dPQUwuCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiBmZW5jZTsKK30gU1ZHQUZpZm9DbWRGZW5jZTsKKworCisvKgorICogU1ZHQV9DTURfRVNDQVBFIC0tCisgKgorICogICAgU2VuZCBhbiBleHRlbmRlZCBvciB2ZW5kb3Itc3BlY2lmaWMgdmFyaWFibGUgbGVuZ3RoIGNvbW1hbmQuCisgKiAgICBUaGlzIGlzIHVzZWQgZm9yIHZpZGVvIG92ZXJsYXksIHRoaXJkIHBhcnR5IHBsdWdpbnMsIGFuZAorICogICAgaW50ZXJuYWwgZGVidWdnaW5nIHRvb2xzLiBTZWUgc3ZnYV9lc2NhcGUuaAorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfRklGT19DQVBfRVNDQVBFCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiBuc2lkOworICAgdWludDMyIHNpemU7CisgICAvKiBmb2xsb3dlZCBieSAnc2l6ZScgYnl0ZXMgb2YgZGF0YSAqLworfSBTVkdBRmlmb0NtZEVzY2FwZTsKKworCisvKgorICogU1ZHQV9DTURfREVGSU5FX1NDUkVFTiAtLQorICoKKyAqICAgIERlZmluZSBvciByZWRlZmluZSBhbiBTVkdBU2NyZWVuT2JqZWN0LiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisgKiAgICBTVkdBU2NyZWVuT2JqZWN0IGFib3ZlLiAgVGhlIHZpZGVvIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqICAgIGdlbmVyYXRpbmcgbmV3IHNjcmVlbiBJRHMuIFRoZXkgc2hvdWxkIGJlIHNtYWxsIHBvc2l0aXZlCisgKiAgICBpbnRlZ2Vycy4gVGhlIHZpcnR1YWwgZGV2aWNlIHdpbGwgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbgorICogICAgc3BlY2lmaWMgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiBzY3JlZW4gSURzCisgKiAgICBzdXBwb3J0ZWQuIERyaXZlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciByZWN5Y2xpbmcgSURzLiBUaGUgZmlyc3QKKyAqICAgIHZhbGlkIElEIGlzIHplcm8uCisgKgorICogICAgLSBJbnRlcmFjdGlvbiB3aXRoIG90aGVyIHJlZ2lzdGVyczoKKyAqCisgKiAgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gdGhlIEdGQiBtb2RlIHJlZ2lzdGVycyAoV0lEVEgsCisgKiAgICBIRUlHSFQsIFBJVENITE9DSywgQklUU19QRVJfUElYRUwpIGFyZSBtb2RpZmllZCwgdGhlIFNWR0EgZGV2aWNlCisgKiAgICBkZWxldGVzIGFsbCBzY3JlZW5zIG90aGVyIHRoYW4gc2NyZWVuICMwLCBhbmQgcmVkZWZpbmVzIHNjcmVlbgorICogICAgIzAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgbW9kZS4gRHJpdmVycyB0aGF0IHVzZQorICogICAgU1ZHQV9DTURfREVGSU5FX1NDUkVFTiBzaG91bGQgZGVzdHJveSBvciByZWRlZmluZSBzY3JlZW4gIzAuCisgKgorICogICAgSWYgeW91IHVzZSBzY3JlZW4gb2JqZWN0cywgZG8gbm90IHVzZSB0aGUgbGVnYWN5IG11bHRpLW1vbgorICogICAgcmVnaXN0ZXJzIChTVkdBX1JFR19OVU1fR1VFU1RfRElTUExBWVMsIFNWR0FfUkVHX0RJU1BMQVlfKikuCisgKgorICogQXZhaWxhYmlsaXR5OgorICogICAgU1ZHQV9GSUZPX0NBUF9TQ1JFRU5fT0JKRUNUCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIFNWR0FTY3JlZW5PYmplY3Qgc2NyZWVuOyAgIC8vIFZhcmlhYmxlLWxlbmd0aCBhY2NvcmRpbmcgdG8gdmVyc2lvbgorfSBTVkdBRmlmb0NtZERlZmluZVNjcmVlbjsKKworCisvKgorICogU1ZHQV9DTURfREVTVFJPWV9TQ1JFRU4gLS0KKyAqCisgKiAgICBEZXN0cm95IGFuIFNWR0FTY3JlZW5PYmplY3QuIEl0cyBJRCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUgZm9yCisgKiAgICByZS11c2UuCisgKgorICogQXZhaWxhYmlsaXR5OgorICogICAgU1ZHQV9GSUZPX0NBUF9TQ1JFRU5fT0JKRUNUCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIHVpbnQzMiBzY3JlZW5JZDsKK30gU1ZHQUZpZm9DbWREZXN0cm95U2NyZWVuOworCisKKy8qCisgKiBTVkdBX0NNRF9ERUZJTkVfR01SRkIgLS0KKyAqCisgKiAgICBUaGlzIGNvbW1hbmQgc2V0cyBhIHBpZWNlIG9mIFNWR0EgZGV2aWNlIHN0YXRlIGNhbGxlZCB0aGUKKyAqICAgIEd1ZXN0IE1lbW9yeSBSZWdpb24gRnJhbWVidWZmZXIsIG9yIEdNUkZCLiBUaGUgR01SRkIgaXMgYQorICogICAgcGllY2Ugb2YgbGlnaHQtd2VpZ2h0IHN0YXRlIHdoaWNoIGlkZW50aWZpZXMgdGhlIGxvY2F0aW9uIGFuZAorICogICAgZm9ybWF0IG9mIGFuIGltYWdlIGluIGd1ZXN0IG1lbW9yeSBvciBpbiBCQVIxLiBUaGUgR01SRkIgaGFzCisgKiAgICBhbiBhcmJpdHJhcnkgc2l6ZSwgYW5kIGl0IGRvZXNuJ3QgbmVlZCB0byBtYXRjaCB0aGUgZ2VvbWV0cnkKKyAqICAgIG9mIHRoZSBHRkIgb3IgYW55IHNjcmVlbiBvYmplY3QuCisgKgorICogICAgVGhlIEdNUkZCIGNhbiBiZSByZWRlZmluZWQgYXMgb2Z0ZW4gYXMgeW91IGxpa2UuIFlvdSBjb3VsZAorICogICAgYWx3YXlzIHVzZSB0aGUgc2FtZSBHTVJGQiwgeW91IGNvdWxkIHJlZGVmaW5lIGl0IGJlZm9yZQorICogICAgcmVuZGVyaW5nIGZyb20gYSBkaWZmZXJlbnQgZ3Vlc3Qgc2NyZWVuLCBvciB5b3UgY291bGQgZXZlbgorICogICAgcmVkZWZpbmUgaXQgYmVmb3JlIGV2ZXJ5IGJsaXQuCisgKgorICogICAgVGhlcmUgYXJlIG11bHRpcGxlIHdheXMgdG8gdXNlIHRoaXMgY29tbWFuZC4gVGhlIHNpbXBsZXN0IHdheSBpcworICogICAgdG8gdXNlIGl0IHRvIG1vdmUgdGhlIGZyYW1lYnVmZmVyIGVpdGhlciB0byBlbHNld2hlcmUgaW4gdGhlIEdGQgorICogICAgKEJBUjEpIG1lbW9yeSByZWdpb24sIG9yIHRvIGEgdXNlci1kZWZpbmVkIEdNUi4gVGhpcyBsZXRzIGEKKyAqICAgIGRyaXZlciB1c2UgYSBmcmFtZWJ1ZmZlciBhbGxvY2F0ZWQgZW50aXJlbHkgb3V0IG9mIG5vcm1hbCBzeXN0ZW0KKyAqICAgIG1lbW9yeSwgd2hpY2ggd2UgZW5jb3VyYWdlLgorICoKKyAqICAgIEFub3RoZXIgd2F5IHRvIHVzZSB0aGlzIGNvbW1hbmQgaXMgdG8gc2V0IHVwIGEgcmluZyBidWZmZXIgb2YKKyAqICAgIHVwZGF0ZXMgaW4gR0ZCIG1lbW9yeS4gSWYgYSBkcml2ZXIgd2FudHMgdG8gZW5zdXJlIHRoYXQgbm8KKyAqICAgIGZyYW1lcyBhcmUgc2tpcHBlZCBieSB0aGUgU1ZHQSBkZXZpY2UsIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZQorICogICAgZHJpdmVyIG5vdCBtb2RpZnkgdGhlIHNvdXJjZSBkYXRhIGZvciBhIGJsaXQgdW50aWwgdGhlIGRldmljZSBpcworICogICAgZG9uZSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLiBPbmUgZWZmaWNpZW50IHdheSB0byBhY2NvbXBsaXNoCisgKiAgICB0aGlzIGlzIHRvIHVzZSBhIHJpbmcgb2Ygc21hbGwgRE1BIGJ1ZmZlcnMuIEVhY2ggYnVmZmVyIGlzIHVzZWQKKyAqICAgIGZvciBvbmUgYmxpdCwgdGhlbiB3ZSBtb3ZlIG9uIHRvIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUKKyAqICAgIHJpbmcuIFRoZSBGRU5DRSBtZWNoYW5pc20gaXMgdXNlZCB0byBwcm90ZWN0IGVhY2ggYnVmZmVyIGZyb20KKyAqICAgIHJlLXVzZSB1bnRpbCB0aGUgZGV2aWNlIGlzIGZpbmlzaGVkIHdpdGggdGhhdCBidWZmZXIncworICogICAgY29ycmVzcG9uZGluZyBibGl0LgorICoKKyAqICAgIFRoaXMgY29tbWFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIG1lYW5pbmcgb2YgU1ZHQV9DTURfVVBEQVRFLgorICogICAgVVBEQVRFcyBhbHdheXMgb2NjdXIgZnJvbSB0aGUgbGVnYWN5IEdGQiBtZW1vcnkgYXJlYS4gVGhpcworICogICAgY29tbWFuZCBoYXMgbm8gc3VwcG9ydCBmb3IgcHNldWRvY29sb3IgR01SRkJzLiBDdXJyZW50bHkgb25seQorICogICAgdHJ1ZS1jb2xvciAxNSwgMTYsIGFuZCAyNC1iaXQgZGVwdGhzIGFyZSBzdXBwb3J0ZWQuIEZ1dHVyZQorICogICAgZGV2aWNlcyBtYXkgZXhwb3NlIGNhcGFiaWxpdGllcyBmb3IgYWRkaXRpb25hbCBmcmFtZWJ1ZmZlcgorICogICAgZm9ybWF0cy4KKyAqCisgKiAgICBUaGUgZGVmYXVsdCBHTVJGQiB2YWx1ZSBpcyB1bmRlZmluZWQuIERyaXZlcnMgbXVzdCBhbHdheXMgc2VuZAorICogICAgdGhpcyBjb21tYW5kIGF0IGxlYXN0IG9uY2UgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGJsaXQgZnJvbSB0aGUKKyAqICAgIEdNUkZCLgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfRklGT19DQVBfU0NSRUVOX09CSkVDVAorICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICBTVkdBR3Vlc3RQdHIgICAgICAgIHB0cjsKKyAgIHVpbnQzMiAgICAgICAgICAgICAgYnl0ZXNQZXJMaW5lOworICAgU1ZHQUdNUkltYWdlRm9ybWF0ICBmb3JtYXQ7Cit9IFNWR0FGaWZvQ21kRGVmaW5lR01SRkI7CisKKworLyoKKyAqIFNWR0FfQ01EX0JMSVRfR01SRkJfVE9fU0NSRUVOIC0tCisgKgorICogICAgVGhpcyBpcyBhIGd1ZXN0LXRvLWhvc3QgYmxpdC4gSXQgcGVyZm9ybXMgYSBETUEgb3BlcmF0aW9uIHRvCisgKiAgICBjb3B5IGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHBpeGVscyBmcm9tIHRoZSBjdXJyZW50IEdNUkZCIHRvCisgKiAgICBvbmUgb3IgbW9yZSBTY3JlZW4gT2JqZWN0cy4KKyAqCisgKiAgICBUaGUgZGVzdGluYXRpb24gY29vcmRpbmF0ZSBtYXkgYmUgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIGEKKyAqICAgIHNjcmVlbidzIG9yaWdpbiAoaWYgYSBzY3JlZW4gSUQgaXMgc3BlY2lmaWVkKSBvciByZWxhdGl2ZSB0byB0aGUKKyAqICAgIHZpcnR1YWwgY29vcmRpbmF0ZSBzeXN0ZW0ncyBvcmlnaW4gKGlmIHRoZSBzY3JlZW4gSUQgaXMKKyAqICAgIFNWR0FfSURfSU5WQUxJRCkuIFRoZSBhY3R1YWwgZGVzdGluYXRpb24gbWF5IHNwYW4gemVybyBvciBtb3JlCisgKiAgICBzY3JlZW5zLCBpbiB0aGUgY2FzZSBvZiBhIHZpcnR1YWwgZGVzdGluYXRpb24gcmVjdCBvciBhIHJlY3QKKyAqICAgIHdoaWNoIGV4dGVuZHMgb2ZmIHRoZSBlZGdlIG9mIHRoZSBzcGVjaWZpZWQgc2NyZWVuLgorICoKKyAqICAgIFRoaXMgY29tbWFuZCB3cml0ZXMgdG8gdGhlIHNjcmVlbidzICJiYXNlIGxheWVyIjogdGhlIHVuZGVybHlpbmcKKyAqICAgIGZyYW1lYnVmZmVyIHdoaWNoIGV4aXN0cyBiZWxvdyBhbnkgY3Vyc29yIG9yIHZpZGVvIG92ZXJsYXlzLiBObworICogICAgYWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGhpZGUgb3IgdXBkYXRlIGFueSBvdmVybGF5cworICogICAgd2hpY2ggZXhpc3Qgb24gdG9wIG9mIHRoZSB1cGRhdGVkIHJlZ2lvbi4KKyAqCisgKiAgICBUaGUgU1ZHQSBkZXZpY2UgaXMgZ3VhcmFudGVlZCB0byBmaW5pc2ggcmVhZGluZyBmcm9tIHRoZSBHTVJGQgorICogICAgYnkgdGhlIHRpbWUgYW55IHN1YnNlcXVlbnQgRkVOQ0UgY29tbWFuZHMgYXJlIHJlYWNoZWQuCisgKgorICogICAgVGhpcyBjb21tYW5kIGNvbnN1bWVzIGFuIGFubm90YXRpb24uIFNlZSB0aGUKKyAqICAgIFNWR0FfQ01EX0FOTk9UQVRJT05fKiBjb21tYW5kcyBmb3IgZGV0YWlscy4KKyAqCisgKiBBdmFpbGFiaWxpdHk6CisgKiAgICBTVkdBX0ZJRk9fQ0FQX1NDUkVFTl9PQkpFQ1QKKyAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQVNpZ25lZFBvaW50ICBzcmNPcmlnaW47CisgICBTVkdBU2lnbmVkUmVjdCAgIGRlc3RSZWN0OworICAgdWludDMyICAgICAgICAgICBkZXN0U2NyZWVuSWQ7Cit9IFNWR0FGaWZvQ21kQmxpdEdNUkZCVG9TY3JlZW47CisKKworLyoKKyAqIFNWR0FfQ01EX0JMSVRfU0NSRUVOX1RPX0dNUkZCIC0tCisgKgorICogICAgVGhpcyBpcyBhIGhvc3QtdG8tZ3Vlc3QgYmxpdC4gSXQgcGVyZm9ybXMgYSBETUEgb3BlcmF0aW9uIHRvCisgKiAgICBjb3B5IGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHBpeGVscyBmcm9tIGEgc2luZ2xlIFNjcmVlbiBPYmplY3QKKyAqICAgIGJhY2sgdG8gdGhlIGN1cnJlbnQgR01SRkIuCisgKgorICogICAgVXNhZ2Ugbm90ZTogVGhpcyBjb21tYW5kIHNob3VsZCBiZSB1c2VkIHJhcmVseS4gSXQgd2lsbAorICogICAgdHlwaWNhbGx5IGJlIGluZWZmaWNpZW50LCBidXQgaXQgaXMgbmVjZXNzYXJ5IGZvciBzb21lIHR5cGVzIG9mCisgKiAgICBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAzRCAoR1BVKSBhbmQgMkQgKENQVSkgcmVuZGVyaW5nIGludG8KKyAqICAgIG92ZXJsYXBwaW5nIGFyZWFzIG9mIGEgc2NyZWVuLgorICoKKyAqICAgIFRoZSBzb3VyY2UgY29vcmRpbmF0ZSBpcyBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gYSBzY3JlZW4ncworICogICAgb3JpZ2luLiBUaGUgcHJvdmlkZWQgc2NyZWVuIElEIG11c3QgYmUgdmFsaWQuIElmIGFueSBwYXJhbWV0ZXJzCisgKiAgICBhcmUgaW52YWxpZCwgdGhlIHJlc3VsdGluZyBwaXhlbCB2YWx1ZXMgYXJlIHVuZGVmaW5lZC4KKyAqCisgKiAgICBUaGlzIGNvbW1hbmQgcmVhZHMgdGhlIHNjcmVlbidzICJiYXNlIGxheWVyIi4gT3ZlcmxheXMgbGlrZQorICogICAgdmlkZW8gYW5kIGN1cnNvciBhcmUgbm90IGluY2x1ZGVkLCBidXQgYW55IGRhdGEgd2hpY2ggd2FzIHNlbnQKKyAqICAgIHVzaW5nIGEgYmxpdC10by1zY3JlZW4gcHJpbWl0aXZlIHdpbGwgYmUgYXZhaWxhYmxlLCBubyBtYXR0ZXIKKyAqICAgIHdoZXRoZXIgdGhlIGRhdGEncyBvcmlnaW5hbCBzb3VyY2Ugd2FzIHRoZSBHTVJGQiBvciB0aGUgM0QKKyAqICAgIGFjY2VsZXJhdGlvbiBoYXJkd2FyZS4KKyAqCisgKiAgICBOb3RlIHRoYXQgb3VyIGd1ZXN0LXRvLWhvc3QgYmxpdHMgYW5kIGhvc3QtdG8tZ3Vlc3QgYmxpdHMgYXJlbid0CisgKiAgICBzeW1tZXRyaWMgaW4gdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gV2hpbGUgdGhlIHBhcmFtZXRlcnMKKyAqICAgIGFyZSBpZGVudGljYWwsIGhvc3QtdG8tZ3Vlc3QgYmxpdHMgYXJlIGEgbG90IGxlc3MgZmVhdHVyZWZ1bC4KKyAqICAgIFRoZXkgZG8gbm90IHN1cHBvcnQgY2xpcHBpbmc6IElmIHRoZSBzb3VyY2UgcGFyYW1ldGVycyBkb24ndAorICogICAgZnVsbHkgZml0IHdpdGhpbiBhIHNjcmVlbiwgdGhlIGJsaXQgZmFpbHMuIFRoZXkgbXVzdCBvcmlnaW5hdGUKKyAqICAgIGZyb20gZXhhY3RseSBvbmUgc2NyZWVuLiBWaXJ0dWFsIGNvb3JkaW5hdGVzIGFyZSBub3QgZGlyZWN0bHkKKyAqICAgIHN1cHBvcnRlZC4KKyAqCisgKiAgICBIb3N0LXRvLWd1ZXN0IGJsaXRzIGRvIHN1cHBvcnQgdGhlIHNhbWUgc2V0IG9mIEdNUkZCIGZvcm1hdHMKKyAqICAgIG9mZmVyZWQgYnkgZ3Vlc3QtdG8taG9zdCBibGl0cy4KKyAqCisgKiAgICBUaGUgU1ZHQSBkZXZpY2UgaXMgZ3VhcmFudGVlZCB0byBmaW5pc2ggd3JpdGluZyB0byB0aGUgR01SRkIgYnkKKyAqICAgIHRoZSB0aW1lIGFueSBzdWJzZXF1ZW50IEZFTkNFIGNvbW1hbmRzIGFyZSByZWFjaGVkLgorICoKKyAqIEF2YWlsYWJpbGl0eToKKyAqICAgIFNWR0FfRklGT19DQVBfU0NSRUVOX09CSkVDVAorICovCisKK3R5cGVkZWYKK3N0cnVjdCB7CisgICBTVkdBU2lnbmVkUG9pbnQgIGRlc3RPcmlnaW47CisgICBTVkdBU2lnbmVkUmVjdCAgIHNyY1JlY3Q7CisgICB1aW50MzIgICAgICAgICAgIHNyY1NjcmVlbklkOworfSBTVkdBRmlmb0NtZEJsaXRTY3JlZW5Ub0dNUkZCOworCisKKy8qCisgKiBTVkdBX0NNRF9BTk5PVEFUSU9OX0ZJTEwgLS0KKyAqCisgKiAgICBUaGlzIGlzIGEgYmxpdCBhbm5vdGF0aW9uLiBUaGlzIGNvbW1hbmQgc3RvcmVzIGEgc21hbGwgcGllY2Ugb2YKKyAqICAgIGRldmljZSBzdGF0ZSB3aGljaCBpcyBjb25zdW1lZCBieSB0aGUgbmV4dCBibGl0LXRvLXNjcmVlbgorICogICAgY29tbWFuZC4gVGhlIHN0YXRlIGlzIG9ubHkgY2xlYXJlZCBieSBjb21tYW5kcyB3aGljaCBhcmUKKyAqICAgIHNwZWNpZmljYWxseSBkb2N1bWVudGVkIGFzIGNvbnN1bWluZyBhbiBhbm5vdGF0aW9uLiBPdGhlcgorICogICAgY29tbWFuZHMgKHN1Y2ggYXMgRVNDQVBFcyBmb3IgZGVidWdnaW5nKSBtYXkgaW50ZXJ2ZW5lIGJldHdlZW4KKyAqICAgIHRoZSBhbm5vdGF0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBibGl0LgorICoKKyAqICAgIFRoaXMgYW5ub3RhdGlvbiBpcyBhIHByb21pc2UgYWJvdXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXh0CisgKiAgICBibGl0OiBUaGUgdmlkZW8gZHJpdmVyIGlzIGd1YXJhbnRlZWluZyB0aGF0IGFsbCBwaXhlbHMgaW4gdGhhdAorICogICAgYmxpdCB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUsIHNwZWNpZmllZCBoZXJlIGFzIGEgY29sb3IgaW4KKyAqICAgIFNWR0FDb2xvckJHUlggZm9ybWF0LgorICoKKyAqICAgIFRoZSBTVkdBIGRldmljZSBjYW4gc3RpbGwgcmVuZGVyIHRoZSBibGl0IGNvcnJlY3RseSBldmVuIGlmIGl0CisgKiAgICBpZ25vcmVzIHRoaXMgYW5ub3RhdGlvbiwgYnV0IHRoZSBhbm5vdGF0aW9uIG1heSBhbGxvdyBpdCB0bworICogICAgcGVyZm9ybSB0aGUgYmxpdCBtb3JlIGVmZmljaWVudGx5LCBmb3IgZXhhbXBsZSBieSBpZ25vcmluZyB0aGUKKyAqICAgIHNvdXJjZSBkYXRhIGFuZCBwZXJmb3JtaW5nIGEgZmlsbCBpbiBoYXJkd2FyZS4KKyAqCisgKiAgICBUaGlzIGFubm90YXRpb24gaXMgbW9zdCBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIHdoZW4gdGhlCisgKiAgICB1c2VyJ3MgZGlzcGxheSBpcyBiZWluZyByZW1vdGVkIG92ZXIgYSBuZXR3b3JrIGNvbm5lY3Rpb24uCisgKgorICogQXZhaWxhYmlsaXR5OgorICogICAgU1ZHQV9GSUZPX0NBUF9TQ1JFRU5fT0JKRUNUCisgKi8KKwordHlwZWRlZgorc3RydWN0IHsKKyAgIFNWR0FDb2xvckJHUlggIGNvbG9yOworfSBTVkdBRmlmb0NtZEFubm90YXRpb25GaWxsOworCisKKy8qCisgKiBTVkdBX0NNRF9BTk5PVEFUSU9OX0NPUFkgLS0KKyAqCisgKiAgICBUaGlzIGlzIGEgYmxpdCBhbm5vdGF0aW9uLiBTZWUgU1ZHQV9DTURfQU5OT1RBVElPTl9GSUxMIGZvciBtb3JlCisgKiAgICBpbmZvcm1hdGlvbiBhYm91dCBhbm5vdGF0aW9ucy4KKyAqCisgKiAgICBUaGlzIGFubm90YXRpb24gaXMgYSBwcm9taXNlIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUgbmV4dAorICogICAgYmxpdDogVGhlIHZpZGVvIGRyaXZlciBpcyBndWFyYW50ZWVpbmcgdGhhdCBhbGwgcGl4ZWxzIGluIHRoYXQKKyAqICAgIGJsaXQgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRob3NlIHdoaWNoIGFscmVhZHkgZXhpc3QgYXQgYW4KKyAqICAgIGlkZW50aWNhbGx5LXNpemVkIHJlZ2lvbiBvbiB0aGUgc2FtZSBvciBhIGRpZmZlcmVudCBzY3JlZW4uCisgKgorICogICAgTm90ZSB0aGF0IHRoZSBzb3VyY2UgcGl4ZWxzIGZvciB0aGUgQ09QWSBpbiB0aGlzIGFubm90YXRpb24gYXJlCisgKiAgICBzYW1wbGVkIGJlZm9yZSBhcHBseWluZyB0aGUgYW5xbm90YXRpb24ncyBhc3NvY2lhdGVkIGJsaXQuIFRoZXkKKyAqICAgIGFyZSBhbGxvd2VkIHRvIG92ZXJsYXAgd2l0aCB0aGUgYmxpdCdzIGRlc3RpbmF0aW9uIHBpeGVscy4KKyAqCisgKiAgICBUaGUgY29weSBzb3VyY2UgcmVjdGFuZ2xlIGlzIHNwZWNpZmllZCB0aGUgc2FtZSB3YXkgYXMgdGhlIGJsaXQKKyAqICAgIGRlc3RpbmF0aW9uOiBpdCBjYW4gYmUgYSByZWN0YW5nbGUgd2hpY2ggc3BhbnMgemVybyBvciBtb3JlCisgKiAgICBzY3JlZW5zLCBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gZWl0aGVyIGEgc2NyZWVuIG9yIHRvIHRoZSB2aXJ0dWFsCisgKiAgICBjb29yZGluYXRlIHN5c3RlbSdzIG9yaWdpbi4gSWYgdGhlIHNvdXJjZSByZWN0YW5nbGUgaW5jbHVkZXMKKyAqICAgIHBpeGVscyB3aGljaCBhcmUgbm90IGZyb20gZXhhY3RseSBvbmUgc2NyZWVuLCB0aGUgcmVzdWx0cyBhcmUKKyAqICAgIHVuZGVmaW5lZC4KKyAqCisgKiBBdmFpbGFiaWxpdHk6CisgKiAgICBTVkdBX0ZJRk9fQ0FQX1NDUkVFTl9PQkpFQ1QKKyAqLworCit0eXBlZGVmCitzdHJ1Y3QgeworICAgU1ZHQVNpZ25lZFBvaW50ICBzcmNPcmlnaW47CisgICB1aW50MzIgICAgICAgICAgIHNyY1NjcmVlbklkOworfSBTVkdBRmlmb0NtZEFubm90YXRpb25Db3B5OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvc3ZnYV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9zdmdhX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4MzZkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvc3ZnYV90eXBlcy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNpbGx5IHR5cGVkZWZzIGZvciB0aGUgc3ZnYSBoZWFkZXJzLiBDdXJyZW50bHkgdGhlIGhlYWRlcnMgYXJlIHNoYXJlZAorICogYmV0d2VlbiBhbGwgY29tcG9uZW50cyB0aGF0IHRhbGsgdG8gc3ZnYS4gQW5kIGFzIHN1Y2ggdGhlIGhlYWRlcnMgYXJlCisgKiBhcmUgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzdHlsZSBhbmQgdXNlIHdlaXJkIGRlZmluZXMuCisgKgorICogVGhpcyBmaWxlIGxldHMgYWxsIHRoZSB1Z2x5IGJlIHByZWZpeGVkIHdpdGggc3ZnYSouCisgKi8KKworI2lmbmRlZiBfU1ZHQV9UWVBFU19IXworI2RlZmluZSBfU1ZHQV9UWVBFU19IXworCit0eXBlZGVmIHVpbnQxNl90IHVpbnQxNjsKK3R5cGVkZWYgdWludDMyX3QgdWludDMyOwordHlwZWRlZiB1aW50OF90IHVpbnQ4OwordHlwZWRlZiBpbnQzMl90IGludDMyOwordHlwZWRlZiBib29sIEJvb2w7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmYyZDJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYnVmZmVyLmMKQEAgLTAsMCArMSwyMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorI2luY2x1ZGUgInR0bS90dG1fYm9fZHJpdmVyLmgiCisjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKKworc3RhdGljIHVpbnQzMl90IHZyYW1fcGxhY2VtZW50X2ZsYWdzID0gVFRNX1BMX0ZMQUdfVlJBTSB8CisJVFRNX1BMX0ZMQUdfQ0FDSEVEOworCitzdGF0aWMgdWludDMyX3QgdnJhbV9uZV9wbGFjZW1lbnRfZmxhZ3MgPSBUVE1fUExfRkxBR19WUkFNIHwKKwlUVE1fUExfRkxBR19DQUNIRUQgfAorCVRUTV9QTF9GTEFHX05PX0VWSUNUOworCitzdGF0aWMgdWludDMyX3Qgc3lzX3BsYWNlbWVudF9mbGFncyA9IFRUTV9QTF9GTEFHX1NZU1RFTSB8CisJVFRNX1BMX0ZMQUdfQ0FDSEVEOworCitzdHJ1Y3QgdHRtX3BsYWNlbWVudCB2bXdfdnJhbV9wbGFjZW1lbnQgPSB7CisJLmZwZm4gPSAwLAorCS5scGZuID0gMCwKKwkubnVtX3BsYWNlbWVudCA9IDEsCisJLnBsYWNlbWVudCA9ICZ2cmFtX3BsYWNlbWVudF9mbGFncywKKwkubnVtX2J1c3lfcGxhY2VtZW50ID0gMSwKKwkuYnVzeV9wbGFjZW1lbnQgPSAmdnJhbV9wbGFjZW1lbnRfZmxhZ3MKK307CisKK3N0cnVjdCB0dG1fcGxhY2VtZW50IHZtd192cmFtX25lX3BsYWNlbWVudCA9IHsKKwkuZnBmbiA9IDAsCisJLmxwZm4gPSAwLAorCS5udW1fcGxhY2VtZW50ID0gMSwKKwkucGxhY2VtZW50ID0gJnZyYW1fbmVfcGxhY2VtZW50X2ZsYWdzLAorCS5udW1fYnVzeV9wbGFjZW1lbnQgPSAxLAorCS5idXN5X3BsYWNlbWVudCA9ICZ2cmFtX25lX3BsYWNlbWVudF9mbGFncworfTsKKworc3RydWN0IHR0bV9wbGFjZW1lbnQgdm13X3N5c19wbGFjZW1lbnQgPSB7CisJLmZwZm4gPSAwLAorCS5scGZuID0gMCwKKwkubnVtX3BsYWNlbWVudCA9IDEsCisJLnBsYWNlbWVudCA9ICZzeXNfcGxhY2VtZW50X2ZsYWdzLAorCS5udW1fYnVzeV9wbGFjZW1lbnQgPSAxLAorCS5idXN5X3BsYWNlbWVudCA9ICZzeXNfcGxhY2VtZW50X2ZsYWdzCit9OworCitzdHJ1Y3Qgdm13X3R0bV9iYWNrZW5kIHsKKwlzdHJ1Y3QgdHRtX2JhY2tlbmQgYmFja2VuZDsKK307CisKK3N0YXRpYyBpbnQgdm13X3R0bV9wb3B1bGF0ZShzdHJ1Y3QgdHRtX2JhY2tlbmQgKmJhY2tlbmQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkgICAgc3RydWN0IHBhZ2UgKmR1bW15X3JlYWRfcGFnZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfdHRtX2JpbmQoc3RydWN0IHR0bV9iYWNrZW5kICpiYWNrZW5kLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKmJvX21lbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfdHRtX3VuYmluZChzdHJ1Y3QgdHRtX2JhY2tlbmQgKmJhY2tlbmQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtd190dG1fY2xlYXIoc3RydWN0IHR0bV9iYWNrZW5kICpiYWNrZW5kKQoreworfQorCitzdGF0aWMgdm9pZCB2bXdfdHRtX2Rlc3Ryb3koc3RydWN0IHR0bV9iYWNrZW5kICpiYWNrZW5kKQoreworCXN0cnVjdCB2bXdfdHRtX2JhY2tlbmQgKnZtd19iZSA9CisJICAgIGNvbnRhaW5lcl9vZihiYWNrZW5kLCBzdHJ1Y3Qgdm13X3R0bV9iYWNrZW5kLCBiYWNrZW5kKTsKKworCWtmcmVlKHZtd19iZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHRtX2JhY2tlbmRfZnVuYyB2bXdfdHRtX2Z1bmMgPSB7CisJLnBvcHVsYXRlID0gdm13X3R0bV9wb3B1bGF0ZSwKKwkuY2xlYXIgPSB2bXdfdHRtX2NsZWFyLAorCS5iaW5kID0gdm13X3R0bV9iaW5kLAorCS51bmJpbmQgPSB2bXdfdHRtX3VuYmluZCwKKwkuZGVzdHJveSA9IHZtd190dG1fZGVzdHJveSwKK307CisKK3N0cnVjdCB0dG1fYmFja2VuZCAqdm13X3R0bV9iYWNrZW5kX2luaXQoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpCit7CisJc3RydWN0IHZtd190dG1fYmFja2VuZCAqdm13X2JlOworCisJdm13X2JlID0ga21hbGxvYyhzaXplb2YoKnZtd19iZSksIEdGUF9LRVJORUwpOworCWlmICghdm13X2JlKQorCQlyZXR1cm4gTlVMTDsKKworCXZtd19iZS0+YmFja2VuZC5mdW5jID0gJnZtd190dG1fZnVuYzsKKworCXJldHVybiAmdm13X2JlLT5iYWNrZW5kOworfQorCitpbnQgdm13X2ludmFsaWRhdGVfY2FjaGVzKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1aW50MzJfdCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19pbml0X21lbV90eXBlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1aW50MzJfdCB0eXBlLAorCQkgICAgICBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0KKwkgICAgY29udGFpbmVyX29mKGJkZXYsIHN0cnVjdCB2bXdfcHJpdmF0ZSwgYmRldik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRUTV9QTF9TWVNURU06CisJCS8qIFN5c3RlbSBtZW1vcnkgKi8KKworCQltYW4tPmZsYWdzID0gVFRNX01FTVRZUEVfRkxBR19NQVBQQUJMRTsKKwkJbWFuLT5hdmFpbGFibGVfY2FjaGluZyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkc7CisJCW1hbi0+ZGVmYXVsdF9jYWNoaW5nID0gVFRNX1BMX0ZMQUdfQ0FDSEVEOworCQlicmVhazsKKwljYXNlIFRUTV9QTF9WUkFNOgorCQkvKiAiT24tY2FyZCIgdmlkZW8gcmFtICovCisJCW1hbi0+Z3B1X29mZnNldCA9IDA7CisJCW1hbi0+aW9fb2Zmc2V0ID0gZGV2X3ByaXYtPnZyYW1fc3RhcnQ7CisJCW1hbi0+aW9fc2l6ZSA9IGRldl9wcml2LT52cmFtX3NpemU7CisJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX0ZJWEVEIHwKKwkJICAgIFRUTV9NRU1UWVBFX0ZMQUdfTkVFRFNfSU9SRU1BUCB8IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7CisJCW1hbi0+aW9fYWRkciA9IE5VTEw7CisJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfTUFTS19DQUNISU5HOworCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX1dDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIG1lbW9yeSB0eXBlICV1XG4iLCAodW5zaWduZWQpdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB2bXdfZXZpY3RfZmxhZ3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJICAgICBzdHJ1Y3QgdHRtX3BsYWNlbWVudCAqcGxhY2VtZW50KQoreworCSpwbGFjZW1lbnQgPSB2bXdfc3lzX3BsYWNlbWVudDsKK30KKworLyoqCisgKiBGSVhNRTogUHJvcGVyIGFjY2VzcyBjaGVja3Mgb24gYnVmZmVycy4KKyAqLworCitzdGF0aWMgaW50IHZtd192ZXJpZnlfYWNjZXNzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIEZJWE1FOiBXZSdyZSB1c2luZyB0aGUgb2xkIHZtd2FyZSBwb2xsaW5nIG1ldGhvZCB0byBzeW5jLgorICogRG8gdGhpcyB3aXRoIGZlbmNlcyBpbnN0ZWFkLgorICovCisKK3N0YXRpYyB2b2lkICp2bXdfc3luY19vYmpfcmVmKHZvaWQgKnN5bmNfb2JqKQoreworCXJldHVybiBzeW5jX29iajsKK30KKworc3RhdGljIHZvaWQgdm13X3N5bmNfb2JqX3VucmVmKHZvaWQgKipzeW5jX29iaikKK3sKKwkqc3luY19vYmogPSBOVUxMOworfQorCitzdGF0aWMgaW50IHZtd19zeW5jX29ial9mbHVzaCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IChzdHJ1Y3Qgdm13X3ByaXZhdGUgKilzeW5jX2FyZzsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19TWU5DLCBTVkdBX1NZTkNfR0VORVJJQyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCB2bXdfc3luY19vYmpfc2lnbmFsZWQodm9pZCAqc3luY19vYmosIHZvaWQgKnN5bmNfYXJnKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSAoc3RydWN0IHZtd19wcml2YXRlICopc3luY19hcmc7CisJdWludDMyX3Qgc2VxdWVuY2UgPSAodW5zaWduZWQgbG9uZykgc3luY19vYmo7CisKKwlyZXR1cm4gdm13X2ZlbmNlX3NpZ25hbGVkKGRldl9wcml2LCBzZXF1ZW5jZSk7Cit9CisKK3N0YXRpYyBpbnQgdm13X3N5bmNfb2JqX3dhaXQodm9pZCAqc3luY19vYmosIHZvaWQgKnN5bmNfYXJnLAorCQkJICAgICBib29sIGxhenksIGJvb2wgaW50ZXJydXB0aWJsZSkKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gKHN0cnVjdCB2bXdfcHJpdmF0ZSAqKXN5bmNfYXJnOworCXVpbnQzMl90IHNlcXVlbmNlID0gKHVuc2lnbmVkIGxvbmcpIHN5bmNfb2JqOworCisJcmV0dXJuIHZtd193YWl0X2ZlbmNlKGRldl9wcml2LCBmYWxzZSwgc2VxdWVuY2UsIGZhbHNlLCAzKkhaKTsKK30KKworc3RydWN0IHR0bV9ib19kcml2ZXIgdm13X2JvX2RyaXZlciA9IHsKKwkuY3JlYXRlX3R0bV9iYWNrZW5kX2VudHJ5ID0gdm13X3R0bV9iYWNrZW5kX2luaXQsCisJLmludmFsaWRhdGVfY2FjaGVzID0gdm13X2ludmFsaWRhdGVfY2FjaGVzLAorCS5pbml0X21lbV90eXBlID0gdm13X2luaXRfbWVtX3R5cGUsCisJLmV2aWN0X2ZsYWdzID0gdm13X2V2aWN0X2ZsYWdzLAorCS5tb3ZlID0gTlVMTCwKKwkudmVyaWZ5X2FjY2VzcyA9IHZtd192ZXJpZnlfYWNjZXNzLAorCS5zeW5jX29ial9zaWduYWxlZCA9IHZtd19zeW5jX29ial9zaWduYWxlZCwKKwkuc3luY19vYmpfd2FpdCA9IHZtd19zeW5jX29ial93YWl0LAorCS5zeW5jX29ial9mbHVzaCA9IHZtd19zeW5jX29ial9mbHVzaCwKKwkuc3luY19vYmpfdW5yZWYgPSB2bXdfc3luY19vYmpfdW5yZWYsCisJLnN5bmNfb2JqX3JlZiA9IHZtd19zeW5jX29ial9yZWYKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjFlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYwpAQCAtMCwwICsxLDcyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorI2luY2x1ZGUgInR0bS90dG1fcGxhY2VtZW50LmgiCisjaW5jbHVkZSAidHRtL3R0bV9ib19kcml2ZXIuaCIKKyNpbmNsdWRlICJ0dG0vdHRtX29iamVjdC5oIgorI2luY2x1ZGUgInR0bS90dG1fbW9kdWxlLmgiCisKKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9OQU1FICJ2bXdnZngiCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfREVTQyAiTGludXggZHJtIGRyaXZlciBmb3IgVk13YXJlIGdyYXBoaWNzIGRldmljZXMiCisjZGVmaW5lIFZNV0dGWF9DSElQX1NWR0FJSSAwCisjZGVmaW5lIFZNV19GQl9SRVNFUlZBVElPTiAwCisKKy8qKgorICogRnVsbHkgZW5jb2RlZCBkcm0gY29tbWFuZHMuIE1pZ2h0IG1vdmUgdG8gdm13X2RybS5oCisgKi8KKworI2RlZmluZSBEUk1fSU9DVExfVk1XX0dFVF9QQVJBTQkJCQkJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX0dFVF9QQVJBTSwJCVwKKwkJIHN0cnVjdCBkcm1fdm13X2dldHBhcmFtX2FyZykKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZNV19BTExPQ19ETUFCVUYJCQkJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX0FMTE9DX0RNQUJVRiwJXAorCQl1bmlvbiBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9hcmcpCisjZGVmaW5lIERSTV9JT0NUTF9WTVdfVU5SRUZfRE1BQlVGCQkJCVwKKwlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX1VOUkVGX0RNQUJVRiwJXAorCQlzdHJ1Y3QgZHJtX3Ztd191bnJlZl9kbWFidWZfYXJnKQorI2RlZmluZSBEUk1fSU9DVExfVk1XX0NVUlNPUl9CWVBBU1MJCQkJXAorCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfQ1VSU09SX0JZUEFTUywJXAorCQkgc3RydWN0IGRybV92bXdfY3Vyc29yX2J5cGFzc19hcmcpCisKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZNV19DT05UUk9MX1NUUkVBTQkJCQlcCisJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZNV19DT05UUk9MX1NUUkVBTSwJXAorCQkgc3RydWN0IGRybV92bXdfY29udHJvbF9zdHJlYW1fYXJnKQorI2RlZmluZSBEUk1fSU9DVExfVk1XX0NMQUlNX1NUUkVBTQkJCQlcCisJRFJNX0lPUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZNV19DTEFJTV9TVFJFQU0sCVwKKwkJIHN0cnVjdCBkcm1fdm13X3N0cmVhbV9hcmcpCisjZGVmaW5lIERSTV9JT0NUTF9WTVdfVU5SRUZfU1RSRUFNCQkJCVwKKwlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX1VOUkVGX1NUUkVBTSwJXAorCQkgc3RydWN0IGRybV92bXdfc3RyZWFtX2FyZykKKworI2RlZmluZSBEUk1fSU9DVExfVk1XX0NSRUFURV9DT05URVhUCQkJCVwKKwlEUk1fSU9SKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX0NSRUFURV9DT05URVhULAlcCisJCXN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnKQorI2RlZmluZSBEUk1fSU9DVExfVk1XX1VOUkVGX0NPTlRFWFQJCQkJXAorCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfVU5SRUZfQ09OVEVYVCwJXAorCQlzdHJ1Y3QgZHJtX3Ztd19jb250ZXh0X2FyZykKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZNV19DUkVBVEVfU1VSRkFDRQkJCQlcCisJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UsCVwKKwkJIHVuaW9uIGRybV92bXdfc3VyZmFjZV9jcmVhdGVfYXJnKQorI2RlZmluZSBEUk1fSU9DVExfVk1XX1VOUkVGX1NVUkZBQ0UJCQkJXAorCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfVU5SRUZfU1VSRkFDRSwJXAorCQkgc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcpCisjZGVmaW5lIERSTV9JT0NUTF9WTVdfUkVGX1NVUkZBQ0UJCQkJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX1JFRl9TVVJGQUNFLAlcCisJCSB1bmlvbiBkcm1fdm13X3N1cmZhY2VfcmVmZXJlbmNlX2FyZykKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZNV19FWEVDQlVGCQkJCQlcCisJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZNV19FWEVDQlVGLAkJXAorCQlzdHJ1Y3QgZHJtX3Ztd19leGVjYnVmX2FyZykKKyNkZWZpbmUgRFJNX0lPQ1RMX1ZNV19GSUZPX0RFQlVHCQkJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZNV19GSUZPX0RFQlVHLAkJXAorCQkgc3RydWN0IGRybV92bXdfZmlmb19kZWJ1Z19hcmcpCisjZGVmaW5lIERSTV9JT0NUTF9WTVdfRkVOQ0VfV0FJVAkJCQlcCisJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfRkVOQ0VfV0FJVCwJCVwKKwkJIHN0cnVjdCBkcm1fdm13X2ZlbmNlX3dhaXRfYXJnKQorCisKKy8qKgorICogVGhlIGNvcmUgRFJNIHZlcnNpb24gb2YgdGhpcyBtYWNybyBkb2Vzbid0IGFjY291bnQgZm9yCisgKiBEUk1fQ09NTUFORF9CQVNFLgorICovCisKKyNkZWZpbmUgVk1XX0lPQ1RMX0RFRihpb2N0bCwgZnVuYywgZmxhZ3MpIFwKKwlbRFJNX0lPQ1RMX05SKGlvY3RsKSAtIERSTV9DT01NQU5EX0JBU0VdID0ge2lvY3RsLCBmbGFncywgZnVuY30KKworLyoqCisgKiBJb2N0bCBkZWZpbml0aW9ucy4KKyAqLworCitzdGF0aWMgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZtd19pb2N0bHNbXSA9IHsKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfR0VUX1BBUkFNLCB2bXdfZ2V0cGFyYW1faW9jdGwsCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQUxMT0NfRE1BQlVGLCB2bXdfZG1hYnVmX2FsbG9jX2lvY3RsLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCisJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX0RNQUJVRiwgdm13X2RtYWJ1Zl91bnJlZl9pb2N0bCwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAorCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DVVJTT1JfQllQQVNTLAorCQkgICAgICB2bXdfa21zX2N1cnNvcl9ieXBhc3NfaW9jdGwsCisJCSAgICAgIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyB8IERSTV9VTkxPQ0tFRCksCisKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ09OVFJPTF9TVFJFQU0sIHZtd19vdmVybGF5X2lvY3RsLAorCQkgICAgICBEUk1fTUFTVEVSIHwgRFJNX0NPTlRST0xfQUxMT1cgfCBEUk1fVU5MT0NLRUQpLAorCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DTEFJTV9TVFJFQU0sIHZtd19zdHJlYW1fY2xhaW1faW9jdGwsCisJCSAgICAgIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyB8IERSTV9VTkxPQ0tFRCksCisJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX1NUUkVBTSwgdm13X3N0cmVhbV91bnJlZl9pb2N0bCwKKwkJICAgICAgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XIHwgRFJNX1VOTE9DS0VEKSwKKworCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19DUkVBVEVfQ09OVEVYVCwgdm13X2NvbnRleHRfZGVmaW5lX2lvY3RsLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCisJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX0NPTlRFWFQsIHZtd19jb250ZXh0X2Rlc3Ryb3lfaW9jdGwsCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ1JFQVRFX1NVUkZBQ0UsIHZtd19zdXJmYWNlX2RlZmluZV9pb2N0bCwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAorCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19VTlJFRl9TVVJGQUNFLCB2bXdfc3VyZmFjZV9kZXN0cm95X2lvY3RsLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCisJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1JFRl9TVVJGQUNFLCB2bXdfc3VyZmFjZV9yZWZlcmVuY2VfaW9jdGwsCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfRVhFQ0JVRiwgdm13X2V4ZWNidWZfaW9jdGwsCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKKwlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfRklGT19ERUJVRywgdm13X2ZpZm9fZGVidWdfaW9jdGwsCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1JPT1RfT05MWSB8IERSTV9NQVNURVIgfCBEUk1fVU5MT0NLRUQpLAorCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19GRU5DRV9XQUlULCB2bXdfZmVuY2Vfd2FpdF9pb2N0bCwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdm13X3BjaV9pZF9saXN0W10gPSB7CisJezB4MTVhZCwgMHgwNDA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBWTVdHRlhfQ0hJUF9TVkdBSUl9LAorCXswLCAwLCAwfQorfTsKKworc3RhdGljIGNoYXIgKnZtd19kZXZuYW1lID0gInZtd2dmeCI7CisKK3N0YXRpYyBpbnQgdm13X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOworc3RhdGljIHZvaWQgdm13X21hc3Rlcl9pbml0KHN0cnVjdCB2bXdfbWFzdGVyICopOworCitzdGF0aWMgdm9pZCB2bXdfcHJpbnRfY2FwYWJpbGl0aWVzKHVpbnQzMl90IGNhcGFiaWxpdGllcykKK3sKKwlEUk1fSU5GTygiQ2FwYWJpbGl0aWVzOlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX1JFQ1RfQ09QWSkKKwkJRFJNX0lORk8oIiAgUmVjdCBjb3B5LlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0NVUlNPUikKKwkJRFJNX0lORk8oIiAgQ3Vyc29yLlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0NVUlNPUl9CWVBBU1MpCisJCURSTV9JTkZPKCIgIEN1cnNvciBieXBhc3MuXG4iKTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfQ1VSU09SX0JZUEFTU18yKQorCQlEUk1fSU5GTygiICBDdXJzb3IgYnlwYXNzIDIuXG4iKTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfOEJJVF9FTVVMQVRJT04pCisJCURSTV9JTkZPKCIgIDhiaXQgZW11bGF0aW9uLlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0FMUEhBX0NVUlNPUikKKwkJRFJNX0lORk8oIiAgQWxwaGEgY3Vyc29yLlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQXzNEKQorCQlEUk1fSU5GTygiICAzRC5cbiIpOworCWlmIChjYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9FWFRFTkRFRF9GSUZPKQorCQlEUk1fSU5GTygiICBFeHRlbmRlZCBGaWZvLlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX01VTFRJTU9OKQorCQlEUk1fSU5GTygiICBNdWx0aW1vbi5cbiIpOworCWlmIChjYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9QSVRDSExPQ0spCisJCURSTV9JTkZPKCIgIFBpdGNobG9jay5cbiIpOworCWlmIChjYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKQorCQlEUk1fSU5GTygiICBJcnEgbWFzay5cbiIpOworCWlmIChjYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9ESVNQTEFZX1RPUE9MT0dZKQorCQlEUk1fSU5GTygiICBEaXNwbGF5IFRvcG9sb2d5LlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0dNUikKKwkJRFJNX0lORk8oIiAgR01SLlxuIik7CisJaWYgKGNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX1RSQUNFUykKKwkJRFJNX0lORk8oIiAgVHJhY2VzLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgdm13X3JlcXVlc3RfZGV2aWNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldDsKKworCXZtd19rbXNfc2F2ZV92Z2EoZGV2X3ByaXYpOworCisJcmV0ID0gdm13X2ZpZm9faW5pdChkZXZfcHJpdiwgJmRldl9wcml2LT5maWZvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgRklGTy5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2bXdfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwl2bXdfZmlmb19yZWxlYXNlKGRldl9wcml2LCAmZGV2X3ByaXYtPmZpZm8pOworCXZtd19rbXNfcmVzdG9yZV92Z2EoZGV2X3ByaXYpOworfQorCisKK3N0YXRpYyBpbnQgdm13X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCkKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2OworCWludCByZXQ7CisKKwlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseShkZXZfcHJpdiA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBhbGxvY2F0aW5nIGEgZGV2aWNlIHByaXZhdGUgc3RydWN0LlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZigqZGV2X3ByaXYpKTsKKworCWRldl9wcml2LT5kZXYgPSBkZXY7CisJZGV2X3ByaXYtPnZtd19jaGlwc2V0ID0gY2hpcHNldDsKKwltdXRleF9pbml0KCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCW11dGV4X2luaXQoJmRldl9wcml2LT5jbWRidWZfbXV0ZXgpOworCXJ3bG9ja19pbml0KCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisJaWRyX2luaXQoJmRldl9wcml2LT5jb250ZXh0X2lkcik7CisJaWRyX2luaXQoJmRldl9wcml2LT5zdXJmYWNlX2lkcik7CisJaWRyX2luaXQoJmRldl9wcml2LT5zdHJlYW1faWRyKTsKKwlpZGFfaW5pdCgmZGV2X3ByaXYtPmdtcl9pZGEpOworCW11dGV4X2luaXQoJmRldl9wcml2LT5pbml0X211dGV4KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldl9wcml2LT5maWZvX3F1ZXVlKTsKKwlhdG9taWNfc2V0KCZkZXZfcHJpdi0+ZmVuY2VfcXVldWVfd2FpdGVycywgMCk7CisJYXRvbWljX3NldCgmZGV2X3ByaXYtPmZpZm9fcXVldWVfd2FpdGVycywgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5nbXJfbHJ1KTsKKworCWRldl9wcml2LT5pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApOworCWRldl9wcml2LT52cmFtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMSk7CisJZGV2X3ByaXYtPm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAyKTsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJZGV2X3ByaXYtPmNhcGFiaWxpdGllcyA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19DQVBBQklMSVRJRVMpOworCisJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9HTVIpIHsKKwkJZGV2X3ByaXYtPm1heF9nbXJfZGVzY3JpcHRvcnMgPQorCQkJdm13X3JlYWQoZGV2X3ByaXYsCisJCQkJIFNWR0FfUkVHX0dNUl9NQVhfREVTQ1JJUFRPUl9MRU5HVEgpOworCQlkZXZfcHJpdi0+bWF4X2dtcl9pZHMgPQorCQkJdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0dNUl9NQVhfSURTKTsKKwl9CisKKwlkZXZfcHJpdi0+dnJhbV9zaXplID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX1ZSQU1fU0laRSk7CisJZGV2X3ByaXYtPm1taW9fc2l6ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19NRU1fU0laRSk7CisJZGV2X3ByaXYtPmZiX21heF93aWR0aCA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19NQVhfV0lEVEgpOworCWRldl9wcml2LT5mYl9tYXhfaGVpZ2h0ID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX01BWF9IRUlHSFQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCisJdm13X3ByaW50X2NhcGFiaWxpdGllcyhkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzKTsKKworCWlmIChkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfR01SKSB7CisJCURSTV9JTkZPKCJNYXggR01SIGlkcyBpcyAldVxuIiwKKwkJCSAodW5zaWduZWQpZGV2X3ByaXYtPm1heF9nbXJfaWRzKTsKKwkJRFJNX0lORk8oIk1heCBHTVIgZGVzY3JpcHRvcnMgaXMgJXVcbiIsCisJCQkgKHVuc2lnbmVkKWRldl9wcml2LT5tYXhfZ21yX2Rlc2NyaXB0b3JzKTsKKwl9CisJRFJNX0lORk8oIlZSQU0gYXQgMHglMDh4IHNpemUgaXMgJXUga2lCXG4iLAorCQkgZGV2X3ByaXYtPnZyYW1fc3RhcnQsIGRldl9wcml2LT52cmFtX3NpemUgLyAxMDI0KTsKKwlEUk1fSU5GTygiTU1JTyBhdCAweCUwOHggc2l6ZSBpcyAldSBraUJcbiIsCisJCSBkZXZfcHJpdi0+bW1pb19zdGFydCwgZGV2X3ByaXYtPm1taW9fc2l6ZSAvIDEwMjQpOworCisJcmV0ID0gdm13X3R0bV9nbG9iYWxfaW5pdChkZXZfcHJpdik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfZXJyMDsKKworCisJdm13X21hc3Rlcl9pbml0KCZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyKTsKKwl0dG1fbG9ja19zZXRfa2lsbCgmZGV2X3ByaXYtPmZiZGV2X21hc3Rlci5sb2NrLCBmYWxzZSwgU0lHVEVSTSk7CisJZGV2X3ByaXYtPmFjdGl2ZV9tYXN0ZXIgPSAmZGV2X3ByaXYtPmZiZGV2X21hc3RlcjsKKworCisJcmV0ID0gdHRtX2JvX2RldmljZV9pbml0KCZkZXZfcHJpdi0+YmRldiwKKwkJCQkgZGV2X3ByaXYtPmJvX2dsb2JhbF9yZWYucmVmLm9iamVjdCwKKwkJCQkgJnZtd19ib19kcml2ZXIsIFZNV0dGWF9GSUxFX1BBR0VfT0ZGU0VULAorCQkJCSBmYWxzZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBpbml0aWFsaXppbmcgVFRNIGJ1ZmZlciBvYmplY3QgZHJpdmVyLlxuIik7CisJCWdvdG8gb3V0X2VycjE7CisJfQorCisJcmV0ID0gdHRtX2JvX2luaXRfbW0oJmRldl9wcml2LT5iZGV2LCBUVE1fUExfVlJBTSwKKwkJCSAgICAgKGRldl9wcml2LT52cmFtX3NpemUgPj4gUEFHRV9TSElGVCkpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgaW5pdGlhbGl6aW5nIG1lbW9yeSBtYW5hZ2VyIGZvciBWUkFNLlxuIik7CisJCWdvdG8gb3V0X2VycjI7CisJfQorCisJZGV2X3ByaXYtPm1taW9fbXRyciA9IGRybV9tdHJyX2FkZChkZXZfcHJpdi0+bW1pb19zdGFydCwKKwkJCQkJICAgZGV2X3ByaXYtPm1taW9fc2l6ZSwgRFJNX01UUlJfV0MpOworCisJZGV2X3ByaXYtPm1taW9fdmlydCA9IGlvcmVtYXBfd2MoZGV2X3ByaXYtPm1taW9fc3RhcnQsCisJCQkJCSBkZXZfcHJpdi0+bW1pb19zaXplKTsKKworCWlmICh1bmxpa2VseShkZXZfcHJpdi0+bW1pb192aXJ0ID09IE5VTEwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCURSTV9FUlJPUigiRmFpbGVkIG1hcHBpbmcgTU1JTy5cbiIpOworCQlnb3RvIG91dF9lcnIzOworCX0KKworCWRldl9wcml2LT50ZGV2ID0gdHRtX29iamVjdF9kZXZpY2VfaW5pdAorCSAgICAoZGV2X3ByaXYtPm1lbV9nbG9iYWxfcmVmLm9iamVjdCwgMTIpOworCisJaWYgKHVubGlrZWx5KGRldl9wcml2LT50ZGV2ID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgVFRNIG9iamVjdCBtYW5hZ2VtZW50LlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjQ7CisJfQorCisJZGV2LT5kZXZfcHJpdmF0ZSA9IGRldl9wcml2OworCisJaWYgKCFkZXYtPmRldm5hbWUpCisJCWRldi0+ZGV2bmFtZSA9IHZtd19kZXZuYW1lOworCisJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKSB7CisJCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCBpbnN0YWxsaW5nIGlycTogJWRcbiIsIHJldCk7CisJCQlnb3RvIG91dF9ub19pcnE7CisJCX0KKwl9CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldi0+cGRldiwgInZtd2dmeCBwcm9iZSIpOworCWRldl9wcml2LT5zdGVhbHRoID0gKHJldCAhPSAwKTsKKwlpZiAoZGV2X3ByaXYtPnN0ZWFsdGgpIHsKKwkJLyoqCisJCSAqIFJlcXVlc3QgYXQgbGVhc3QgdGhlIG1taW8gUENJIHJlc291cmNlLgorCQkgKi8KKworCQlEUk1fSU5GTygiSXQgYXBwZWFycyBsaWtlIHZlc2FmYiBpcyBsb2FkZWQuICIKKwkJCSAiSWdub3JlIGFib3ZlIGVycm9yIGlmIGFueS4gRW50ZXJpbmcgc3RlYWx0aCBtb2RlLlxuIik7CisJCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihkZXYtPnBkZXYsIDIsICJ2bXdnZnggc3RlYWx0aCBwcm9iZSIpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgdGhlIFNWR0EgTU1JTyByZXNvdXJjZS5cbiIpOworCQkJZ290byBvdXRfbm9fZGV2aWNlOworCQl9CisJCXZtd19rbXNfaW5pdChkZXZfcHJpdik7CisJCXZtd19vdmVybGF5X2luaXQoZGV2X3ByaXYpOworCX0gZWxzZSB7CisJCXJldCA9IHZtd19yZXF1ZXN0X2RldmljZShkZXZfcHJpdik7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlnb3RvIG91dF9ub19kZXZpY2U7CisJCXZtd19rbXNfaW5pdChkZXZfcHJpdik7CisJCXZtd19vdmVybGF5X2luaXQoZGV2X3ByaXYpOworCQl2bXdfZmJfaW5pdChkZXZfcHJpdik7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9ub19kZXZpY2U6CisJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKQorCQlkcm1faXJxX3VuaW5zdGFsbChkZXZfcHJpdi0+ZGV2KTsKKwlpZiAoZGV2LT5kZXZuYW1lID09IHZtd19kZXZuYW1lKQorCQlkZXYtPmRldm5hbWUgPSBOVUxMOworb3V0X25vX2lycToKKwl0dG1fb2JqZWN0X2RldmljZV9yZWxlYXNlKCZkZXZfcHJpdi0+dGRldik7CitvdXRfZXJyNDoKKwlpb3VubWFwKGRldl9wcml2LT5tbWlvX3ZpcnQpOworb3V0X2VycjM6CisJZHJtX210cnJfZGVsKGRldl9wcml2LT5tbWlvX210cnIsIGRldl9wcml2LT5tbWlvX3N0YXJ0LAorCQkgICAgIGRldl9wcml2LT5tbWlvX3NpemUsIERSTV9NVFJSX1dDKTsKKwkodm9pZCl0dG1fYm9fY2xlYW5fbW0oJmRldl9wcml2LT5iZGV2LCBUVE1fUExfVlJBTSk7CitvdXRfZXJyMjoKKwkodm9pZCl0dG1fYm9fZGV2aWNlX3JlbGVhc2UoJmRldl9wcml2LT5iZGV2KTsKK291dF9lcnIxOgorCXZtd190dG1fZ2xvYmFsX3JlbGVhc2UoZGV2X3ByaXYpOworb3V0X2VycjA6CisJaWRhX2Rlc3Ryb3koJmRldl9wcml2LT5nbXJfaWRhKTsKKwlpZHJfZGVzdHJveSgmZGV2X3ByaXYtPnN1cmZhY2VfaWRyKTsKKwlpZHJfZGVzdHJveSgmZGV2X3ByaXYtPmNvbnRleHRfaWRyKTsKKwlpZHJfZGVzdHJveSgmZGV2X3ByaXYtPnN0cmVhbV9pZHIpOworCWtmcmVlKGRldl9wcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZtd19kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisKKwlEUk1fSU5GTyhWTVdHRlhfRFJJVkVSX05BTUUgIiB1bmxvYWQuXG4iKTsKKworCWlmICghZGV2X3ByaXYtPnN0ZWFsdGgpIHsKKwkJdm13X2ZiX2Nsb3NlKGRldl9wcml2KTsKKwkJdm13X2ttc19jbG9zZShkZXZfcHJpdik7CisJCXZtd19vdmVybGF5X2Nsb3NlKGRldl9wcml2KTsKKwkJdm13X3JlbGVhc2VfZGV2aWNlKGRldl9wcml2KTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYtPnBkZXYpOworCX0gZWxzZSB7CisJCXZtd19rbXNfY2xvc2UoZGV2X3ByaXYpOworCQl2bXdfb3ZlcmxheV9jbG9zZShkZXZfcHJpdik7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbihkZXYtPnBkZXYsIDIpOworCX0KKwlpZiAoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0lSUU1BU0spCisJCWRybV9pcnFfdW5pbnN0YWxsKGRldl9wcml2LT5kZXYpOworCWlmIChkZXYtPmRldm5hbWUgPT0gdm13X2Rldm5hbWUpCisJCWRldi0+ZGV2bmFtZSA9IE5VTEw7CisJdHRtX29iamVjdF9kZXZpY2VfcmVsZWFzZSgmZGV2X3ByaXYtPnRkZXYpOworCWlvdW5tYXAoZGV2X3ByaXYtPm1taW9fdmlydCk7CisJZHJtX210cnJfZGVsKGRldl9wcml2LT5tbWlvX210cnIsIGRldl9wcml2LT5tbWlvX3N0YXJ0LAorCQkgICAgIGRldl9wcml2LT5tbWlvX3NpemUsIERSTV9NVFJSX1dDKTsKKwkodm9pZCl0dG1fYm9fY2xlYW5fbW0oJmRldl9wcml2LT5iZGV2LCBUVE1fUExfVlJBTSk7CisJKHZvaWQpdHRtX2JvX2RldmljZV9yZWxlYXNlKCZkZXZfcHJpdi0+YmRldik7CisJdm13X3R0bV9nbG9iYWxfcmVsZWFzZShkZXZfcHJpdik7CisJaWRhX2Rlc3Ryb3koJmRldl9wcml2LT5nbXJfaWRhKTsKKwlpZHJfZGVzdHJveSgmZGV2X3ByaXYtPnN1cmZhY2VfaWRyKTsKKwlpZHJfZGVzdHJveSgmZGV2X3ByaXYtPmNvbnRleHRfaWRyKTsKKwlpZHJfZGVzdHJveSgmZGV2X3ByaXYtPnN0cmVhbV9pZHIpOworCisJa2ZyZWUoZGV2X3ByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X2Zwcml2ICp2bXdfZnA7CisKKwl2bXdfZnAgPSB2bXdfZnByaXYoZmlsZV9wcml2KTsKKwl0dG1fb2JqZWN0X2ZpbGVfcmVsZWFzZSgmdm13X2ZwLT50ZmlsZSk7CisJaWYgKHZtd19mcC0+bG9ja2VkX21hc3RlcikKKwkJZHJtX21hc3Rlcl9wdXQoJnZtd19mcC0+bG9ja2VkX21hc3Rlcik7CisJa2ZyZWUodm13X2ZwKTsKK30KKworc3RhdGljIGludCB2bXdfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJc3RydWN0IHZtd19mcHJpdiAqdm13X2ZwOworCWludCByZXQgPSAtRU5PTUVNOworCisJdm13X2ZwID0ga3phbGxvYyhzaXplb2YoKnZtd19mcCksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSh2bXdfZnAgPT0gTlVMTCkpCisJCXJldHVybiByZXQ7CisKKwl2bXdfZnAtPnRmaWxlID0gdHRtX29iamVjdF9maWxlX2luaXQoZGV2X3ByaXYtPnRkZXYsIDEwKTsKKwlpZiAodW5saWtlbHkodm13X2ZwLT50ZmlsZSA9PSBOVUxMKSkKKwkJZ290byBvdXRfbm9fdGZpbGU7CisKKwlmaWxlX3ByaXYtPmRyaXZlcl9wcml2ID0gdm13X2ZwOworCisJaWYgKHVubGlrZWx5KGRldl9wcml2LT5iZGV2LmRldl9tYXBwaW5nID09IE5VTEwpKQorCQlkZXZfcHJpdi0+YmRldi5kZXZfbWFwcGluZyA9CisJCQlmaWxlX3ByaXYtPmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKworCXJldHVybiAwOworCitvdXRfbm9fdGZpbGU6CisJa2ZyZWUodm13X2ZwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyB2bXdfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKKwl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExfTlIoY21kKTsKKworCS8qCisJICogRG8gZXh0cmEgY2hlY2tpbmcgb24gZHJpdmVyIHByaXZhdGUgaW9jdGxzLgorCSAqLworCisJaWYgKChuciA+PSBEUk1fQ09NTUFORF9CQVNFKSAmJiAobnIgPCBEUk1fQ09NTUFORF9FTkQpCisJICAgICYmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBkZXYtPmRyaXZlci0+bnVtX2lvY3RscykpIHsKKwkJc3RydWN0IGRybV9pb2N0bF9kZXNjICppb2N0bCA9CisJCSAgICAmdm13X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOworCisJCWlmICh1bmxpa2VseShpb2N0bC0+Y21kICE9IGNtZCkpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBjb21tYW5kIGZvcm1hdCwgaW9jdGwgJWRcbiIsCisJCQkJICBuciAtIERSTV9DT01NQU5EX0JBU0UpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIGludCB2bXdfZmlyc3RvcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJZGV2X3ByaXYtPmlzX29wZW5lZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdm13X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0IHNldDsKKwlpbnQgcmV0OworCisJLyoqCisJICogRG8gbm90aGluZyBvbiB0aGUgbGFzdGNsb3NlIGNhbGwgZnJvbSBkcm1fdW5sb2FkLgorCSAqLworCisJaWYgKCFkZXZfcHJpdi0+aXNfb3BlbmVkKQorCQlyZXR1cm47CisKKwlkZXZfcHJpdi0+aXNfb3BlbmVkID0gZmFsc2U7CisJc2V0LnggPSAwOworCXNldC55ID0gMDsKKwlzZXQuZmIgPSBOVUxMOworCXNldC5tb2RlID0gTlVMTDsKKwlzZXQuY29ubmVjdG9ycyA9IE5VTEw7CisJc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCXNldC5jcnRjID0gY3J0YzsKKwkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJnNldCk7CisJCVdBUk5fT04ocmV0ICE9IDApOworCX0KKworfQorCitzdGF0aWMgdm9pZCB2bXdfbWFzdGVyX2luaXQoc3RydWN0IHZtd19tYXN0ZXIgKnZtYXN0ZXIpCit7CisJdHRtX2xvY2tfaW5pdCgmdm1hc3Rlci0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgdm13X21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlzdHJ1Y3Qgdm13X21hc3RlciAqdm1hc3RlcjsKKworCURSTV9JTkZPKCJNYXN0ZXIgY3JlYXRlLlxuIik7CisJdm1hc3RlciA9IGt6YWxsb2Moc2l6ZW9mKCp2bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHZtYXN0ZXIgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJdHRtX2xvY2tfaW5pdCgmdm1hc3Rlci0+bG9jayk7CisJdHRtX2xvY2tfc2V0X2tpbGwoJnZtYXN0ZXItPmxvY2ssIHRydWUsIFNJR1RFUk0pOworCW1hc3Rlci0+ZHJpdmVyX3ByaXYgPSB2bWFzdGVyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCit7CisJc3RydWN0IHZtd19tYXN0ZXIgKnZtYXN0ZXIgPSB2bXdfbWFzdGVyKG1hc3Rlcik7CisKKwlEUk1fSU5GTygiTWFzdGVyIGRlc3Ryb3kuXG4iKTsKKwltYXN0ZXItPmRyaXZlcl9wcml2ID0gTlVMTDsKKwlrZnJlZSh2bWFzdGVyKTsKK30KKworCitzdGF0aWMgaW50IHZtd19tYXN0ZXJfc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICBib29sIGZyb21fb3BlbikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13X2Zwcml2ICp2bXdfZnAgPSB2bXdfZnByaXYoZmlsZV9wcml2KTsKKwlzdHJ1Y3Qgdm13X21hc3RlciAqYWN0aXZlID0gZGV2X3ByaXYtPmFjdGl2ZV9tYXN0ZXI7CisJc3RydWN0IHZtd19tYXN0ZXIgKnZtYXN0ZXIgPSB2bXdfbWFzdGVyKGZpbGVfcHJpdi0+bWFzdGVyKTsKKwlpbnQgcmV0ID0gMDsKKworCURSTV9JTkZPKCJNYXN0ZXIgc2V0LlxuIik7CisJaWYgKGRldl9wcml2LT5zdGVhbHRoKSB7CisJCXJldCA9IHZtd19yZXF1ZXN0X2RldmljZShkZXZfcHJpdik7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChhY3RpdmUpIHsKKwkJQlVHX09OKGFjdGl2ZSAhPSAmZGV2X3ByaXYtPmZiZGV2X21hc3Rlcik7CisJCXJldCA9IHR0bV92dF9sb2NrKCZhY3RpdmUtPmxvY2ssIGZhbHNlLCB2bXdfZnAtPnRmaWxlKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCWdvdG8gb3V0X25vX2FjdGl2ZV9sb2NrOworCisJCXR0bV9sb2NrX3NldF9raWxsKCZhY3RpdmUtPmxvY2ssIHRydWUsIFNJR1RFUk0pOworCQlyZXQgPSB0dG1fYm9fZXZpY3RfbW0oJmRldl9wcml2LT5iZGV2LCBUVE1fUExfVlJBTSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCURSTV9FUlJPUigiVW5hYmxlIHRvIGNsZWFuIFZSQU0gb24gIgorCQkJCSAgIm1hc3RlciBkcm9wLlxuIik7CisJCX0KKworCQlkZXZfcHJpdi0+YWN0aXZlX21hc3RlciA9IE5VTEw7CisJfQorCisJdHRtX2xvY2tfc2V0X2tpbGwoJnZtYXN0ZXItPmxvY2ssIGZhbHNlLCBTSUdURVJNKTsKKwlpZiAoIWZyb21fb3BlbikgeworCQl0dG1fdnRfdW5sb2NrKCZ2bWFzdGVyLT5sb2NrKTsKKwkJQlVHX09OKHZtd19mcC0+bG9ja2VkX21hc3RlciAhPSBmaWxlX3ByaXYtPm1hc3Rlcik7CisJCWRybV9tYXN0ZXJfcHV0KCZ2bXdfZnAtPmxvY2tlZF9tYXN0ZXIpOworCX0KKworCWRldl9wcml2LT5hY3RpdmVfbWFzdGVyID0gdm1hc3RlcjsKKworCXJldHVybiAwOworCitvdXRfbm9fYWN0aXZlX2xvY2s6CisJdm13X3JlbGVhc2VfZGV2aWNlKGRldl9wcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2bXdfbWFzdGVyX2Ryb3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgICBib29sIGZyb21fcmVsZWFzZSkKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13X2Zwcml2ICp2bXdfZnAgPSB2bXdfZnByaXYoZmlsZV9wcml2KTsKKwlzdHJ1Y3Qgdm13X21hc3RlciAqdm1hc3RlciA9IHZtd19tYXN0ZXIoZmlsZV9wcml2LT5tYXN0ZXIpOworCWludCByZXQ7CisKKwlEUk1fSU5GTygiTWFzdGVyIGRyb3AuXG4iKTsKKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgbWFzdGVyIGRvZXNuJ3QgZGlzYXBwZWFyIHdoaWxlIHdlIGhhdmUKKwkgKiBpdCBsb2NrZWQuCisJICovCisKKwl2bXdfZnAtPmxvY2tlZF9tYXN0ZXIgPSBkcm1fbWFzdGVyX2dldChmaWxlX3ByaXYtPm1hc3Rlcik7CisJcmV0ID0gdHRtX3Z0X2xvY2soJnZtYXN0ZXItPmxvY2ssIGZhbHNlLCB2bXdfZnAtPnRmaWxlKTsKKworCWlmICh1bmxpa2VseSgocmV0ICE9IDApKSkgeworCQlEUk1fRVJST1IoIlVuYWJsZSB0byBsb2NrIFRUTSBhdCBWVCBzd2l0Y2guXG4iKTsKKwkJZHJtX21hc3Rlcl9wdXQoJnZtd19mcC0+bG9ja2VkX21hc3Rlcik7CisJfQorCisJdHRtX2xvY2tfc2V0X2tpbGwoJnZtYXN0ZXItPmxvY2ssIHRydWUsIFNJR1RFUk0pOworCisJaWYgKGRldl9wcml2LT5zdGVhbHRoKSB7CisJCXJldCA9IHR0bV9ib19ldmljdF9tbSgmZGV2X3ByaXYtPmJkZXYsIFRUTV9QTF9WUkFNKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCURSTV9FUlJPUigiVW5hYmxlIHRvIGNsZWFuIFZSQU0gb24gbWFzdGVyIGRyb3AuXG4iKTsKKwkJdm13X3JlbGVhc2VfZGV2aWNlKGRldl9wcml2KTsKKwl9CisJZGV2X3ByaXYtPmFjdGl2ZV9tYXN0ZXIgPSAmZGV2X3ByaXYtPmZiZGV2X21hc3RlcjsKKwl0dG1fbG9ja19zZXRfa2lsbCgmZGV2X3ByaXYtPmZiZGV2X21hc3Rlci5sb2NrLCBmYWxzZSwgU0lHVEVSTSk7CisJdHRtX3Z0X3VubG9jaygmZGV2X3ByaXYtPmZiZGV2X21hc3Rlci5sb2NrKTsKKworCWlmICghZGV2X3ByaXYtPnN0ZWFsdGgpCisJCXZtd19mYl9vbihkZXZfcHJpdik7Cit9CisKKworc3RhdGljIHZvaWQgdm13X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHJtX3B1dF9kZXYoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQgfAorCURSSVZFUl9NT0RFU0VULAorCS5sb2FkID0gdm13X2RyaXZlcl9sb2FkLAorCS51bmxvYWQgPSB2bXdfZHJpdmVyX3VubG9hZCwKKwkuZmlyc3RvcGVuID0gdm13X2ZpcnN0b3BlbiwKKwkubGFzdGNsb3NlID0gdm13X2xhc3RjbG9zZSwKKwkuaXJxX3ByZWluc3RhbGwgPSB2bXdfaXJxX3ByZWluc3RhbGwsCisJLmlycV9wb3N0aW5zdGFsbCA9IHZtd19pcnFfcG9zdGluc3RhbGwsCisJLmlycV91bmluc3RhbGwgPSB2bXdfaXJxX3VuaW5zdGFsbCwKKwkuaXJxX2hhbmRsZXIgPSB2bXdfaXJxX2hhbmRsZXIsCisJLnJlY2xhaW1fYnVmZmVyc19sb2NrZWQgPSBOVUxMLAorCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAorCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAorCS5pb2N0bHMgPSB2bXdfaW9jdGxzLAorCS5udW1faW9jdGxzID0gRFJNX0FSUkFZX1NJWkUodm13X2lvY3RscyksCisJLmRtYV9xdWllc2NlbnQgPSBOVUxMLAkvKnZtd19kbWFfcXVpZXNjZW50LCAqLworCS5tYXN0ZXJfY3JlYXRlID0gdm13X21hc3Rlcl9jcmVhdGUsCisJLm1hc3Rlcl9kZXN0cm95ID0gdm13X21hc3Rlcl9kZXN0cm95LAorCS5tYXN0ZXJfc2V0ID0gdm13X21hc3Rlcl9zZXQsCisJLm1hc3Rlcl9kcm9wID0gdm13X21hc3Rlcl9kcm9wLAorCS5vcGVuID0gdm13X2RyaXZlcl9vcGVuLAorCS5wb3N0Y2xvc2UgPSB2bXdfcG9zdGNsb3NlLAorCS5mb3BzID0geworCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAub3BlbiA9IGRybV9vcGVuLAorCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IHZtd191bmxvY2tlZF9pb2N0bCwKKwkJIC5tbWFwID0gdm13X21tYXAsCisJCSAucG9sbCA9IGRybV9wb2xsLAorCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisjaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUKQorCQkgLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkJIH0sCisJLnBjaV9kcml2ZXIgPSB7CisJCSAgICAgICAubmFtZSA9IFZNV0dGWF9EUklWRVJfTkFNRSwKKwkJICAgICAgIC5pZF90YWJsZSA9IHZtd19wY2lfaWRfbGlzdCwKKwkJICAgICAgIC5wcm9iZSA9IHZtd19wcm9iZSwKKwkJICAgICAgIC5yZW1vdmUgPSB2bXdfcmVtb3ZlCisJCSAgICAgICB9LAorCS5uYW1lID0gVk1XR0ZYX0RSSVZFUl9OQU1FLAorCS5kZXNjID0gVk1XR0ZYX0RSSVZFUl9ERVNDLAorCS5kYXRlID0gVk1XR0ZYX0RSSVZFUl9EQVRFLAorCS5tYWpvciA9IFZNV0dGWF9EUklWRVJfTUFKT1IsCisJLm1pbm9yID0gVk1XR0ZYX0RSSVZFUl9NSU5PUiwKKwkucGF0Y2hsZXZlbCA9IFZNV0dGWF9EUklWRVJfUEFUQ0hMRVZFTAorfTsKKworc3RhdGljIGludCB2bXdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGRybV9nZXRfZGV2KHBkZXYsIGVudCwgJmRyaXZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHZtd2dmeF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSBkcm1faW5pdCgmZHJpdmVyKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoIkZhaWxlZCBpbml0aWFsaXppbmcgRFJNLlxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZtd2dmeF9leGl0KHZvaWQpCit7CisJZHJtX2V4aXQoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZtd2dmeF9pbml0KTsKK21vZHVsZV9leGl0KHZtd2dmeF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVk13YXJlIEluYy4gYW5kIG90aGVycyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFuZGFsb25lIGRybSBkcml2ZXIgZm9yIHRoZSBWTXdhcmUgU1ZHQSBkZXZpY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWJkODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtMCwwICsxLDUxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZNV0dGWF9EUlZfSF8KKyNkZWZpbmUgX1ZNV0dGWF9EUlZfSF8KKworI2luY2x1ZGUgInZtd2dmeF9yZWcuaCIKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidm13Z2Z4X2RybS5oIgorI2luY2x1ZGUgImRybV9oYXNodGFiLmgiCisjaW5jbHVkZSAidHRtL3R0bV9ib19kcml2ZXIuaCIKKyNpbmNsdWRlICJ0dG0vdHRtX29iamVjdC5oIgorI2luY2x1ZGUgInR0bS90dG1fbG9jay5oIgorI2luY2x1ZGUgInR0bS90dG1fZXhlY2J1Zl91dGlsLmgiCisjaW5jbHVkZSAidHRtL3R0bV9tb2R1bGUuaCIKKworI2RlZmluZSBWTVdHRlhfRFJJVkVSX0RBVEUgIjIwMDkwNzI0IgorI2RlZmluZSBWTVdHRlhfRFJJVkVSX01BSk9SIDAKKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9NSU5PUiAxCisjZGVmaW5lIFZNV0dGWF9EUklWRVJfUEFUQ0hMRVZFTCAyCisjZGVmaW5lIFZNV0dGWF9GSUxFX1BBR0VfT0ZGU0VUIDB4MDAxMDAwMDAKKyNkZWZpbmUgVk1XR0ZYX0ZJRk9fU1RBVElDX1NJWkUgKDEwMjQqMTAyNCkKKyNkZWZpbmUgVk1XR0ZYX01BWF9SRUxPQ0FUSU9OUyAyMDQ4CisjZGVmaW5lIFZNV0dGWF9NQVhfR01SUyAyMDQ4CisKK3N0cnVjdCB2bXdfZnByaXYgeworCXN0cnVjdCBkcm1fbWFzdGVyICpsb2NrZWRfbWFzdGVyOworCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlOworfTsKKworc3RydWN0IHZtd19kbWFfYnVmZmVyIHsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgYmFzZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZhbGlkYXRlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBnbXJfbHJ1OworCXVpbnQzMl90IGdtcl9pZDsKKwlib29sIGdtcl9ib3VuZDsKKwl1aW50MzJfdCBjdXJfdmFsaWRhdGVfbm9kZTsKKwlib29sIG9uX3ZhbGlkYXRlX2xpc3Q7Cit9OworCitzdHJ1Y3Qgdm13X3Jlc291cmNlIHsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CisJc3RydWN0IGlkciAqaWRyOworCWludCBpZDsKKwllbnVtIHR0bV9vYmplY3RfdHlwZSByZXNfdHlwZTsKKwlib29sIGF2YWlsOworCXZvaWQgKCpod19kZXN0cm95KSAoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKKwl2b2lkICgqcmVzX2ZyZWUpIChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOworCisJLyogVE9ETyBpcyBhIGdlbmVyaWMgc25vb3BlciBuZWVkZWQ/ICovCisjaWYgMAorCXZvaWQgKCpzbm9vcCkoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkgICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJICAgICAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpOworCXZvaWQgKnNub29wX3ByaXY7CisjZW5kaWYKK307CisKK3N0cnVjdCB2bXdfY3Vyc29yX3Nub29wZXIgeworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzaXplX3QgYWdlOworCXVpbnQzMl90ICppbWFnZTsKK307CisKK3N0cnVjdCB2bXdfc3VyZmFjZSB7CisJc3RydWN0IHZtd19yZXNvdXJjZSByZXM7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQzMl90IG1pcF9sZXZlbHNbRFJNX1ZNV19NQVhfU1VSRkFDRV9GQUNFU107CisJc3RydWN0IGRybV92bXdfc2l6ZSAqc2l6ZXM7CisJdWludDMyX3QgbnVtX3NpemVzOworCisJLyogVE9ETyBzbyBmYXIganVzdCBhIGV4dHJhIHBvaW50ZXIgKi8KKwlzdHJ1Y3Qgdm13X2N1cnNvcl9zbm9vcGVyIHNub29wZXI7Cit9OworCitzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgeworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfc2l6ZTsKKwlfX2xlMzIgKmR5bmFtaWNfYnVmZmVyOworCV9fbGUzMiAqc3RhdGljX2J1ZmZlcjsKKwlfX2xlMzIgKmxhc3RfYnVmZmVyOworCXVpbnQzMl90IGxhc3RfZGF0YV9zaXplOworCXVpbnQzMl90IGxhc3RfYnVmZmVyX3NpemU7CisJYm9vbCBsYXN0X2J1ZmZlcl9hZGQ7CisJdW5zaWduZWQgbG9uZyBzdGF0aWNfYnVmZmVyX3NpemU7CisJYm9vbCB1c2luZ19ib3VuY2VfYnVmZmVyOworCXVpbnQzMl90IGNhcGFiaWxpdGllczsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtOworfTsKKworc3RydWN0IHZtd19yZWxvY2F0aW9uIHsKKwlTVkdBR3Vlc3RQdHIgKmxvY2F0aW9uOworCXVpbnQzMl90IGluZGV4OworfTsKKworc3RydWN0IHZtd19zd19jb250ZXh0eworCXN0cnVjdCBpZGEgYm9fbGlzdDsKKwl1aW50MzJfdCBsYXN0X2NpZDsKKwlib29sIGNpZF92YWxpZDsKKwl1aW50MzJfdCBsYXN0X3NpZDsKKwl1aW50MzJfdCBzaWRfdHJhbnNsYXRpb247CisJYm9vbCBzaWRfdmFsaWQ7CisJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGU7CisJc3RydWN0IGxpc3RfaGVhZCB2YWxpZGF0ZV9ub2RlczsKKwlzdHJ1Y3Qgdm13X3JlbG9jYXRpb24gcmVsb2NzW1ZNV0dGWF9NQVhfUkVMT0NBVElPTlNdOworCXVpbnQzMl90IGN1cl9yZWxvYzsKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciB2YWxfYnVmc1tWTVdHRlhfTUFYX0dNUlNdOworCXVpbnQzMl90IGN1cl92YWxfYnVmOworfTsKKworc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheTsKK3N0cnVjdCB2bXdfb3ZlcmxheTsKKworc3RydWN0IHZtd19tYXN0ZXIgeworCXN0cnVjdCB0dG1fbG9jayBsb2NrOworfTsKKworc3RydWN0IHZtd19wcml2YXRlIHsKKwlzdHJ1Y3QgdHRtX2JvX2RldmljZSBiZGV2OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsX3JlZiBib19nbG9iYWxfcmVmOworCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZSBtZW1fZ2xvYmFsX3JlZjsKKworCXN0cnVjdCB2bXdfZmlmb19zdGF0ZSBmaWZvOworCisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIHZtd19jaGlwc2V0OworCXVuc2lnbmVkIGludCBpb19zdGFydDsKKwl1aW50MzJfdCB2cmFtX3N0YXJ0OworCXVpbnQzMl90IHZyYW1fc2l6ZTsKKwl1aW50MzJfdCBtbWlvX3N0YXJ0OworCXVpbnQzMl90IG1taW9fc2l6ZTsKKwl1aW50MzJfdCBmYl9tYXhfd2lkdGg7CisJdWludDMyX3QgZmJfbWF4X2hlaWdodDsKKwlfX2xlMzIgX19pb21lbSAqbW1pb192aXJ0OworCWludCBtbWlvX210cnI7CisJdWludDMyX3QgY2FwYWJpbGl0aWVzOworCXVpbnQzMl90IG1heF9nbXJfZGVzY3JpcHRvcnM7CisJdWludDMyX3QgbWF4X2dtcl9pZHM7CisJc3RydWN0IG11dGV4IGh3X211dGV4OworCisJLyoKKwkgKiBWR0EgcmVnaXN0ZXJzLgorCSAqLworCisJdWludDMyX3QgdmdhX3dpZHRoOworCXVpbnQzMl90IHZnYV9oZWlnaHQ7CisJdWludDMyX3QgdmdhX2RlcHRoOworCXVpbnQzMl90IHZnYV9icHA7CisJdWludDMyX3QgdmdhX3BzZXVkbzsKKwl1aW50MzJfdCB2Z2FfcmVkX21hc2s7CisJdWludDMyX3QgdmdhX2JsdWVfbWFzazsKKwl1aW50MzJfdCB2Z2FfZ3JlZW5fbWFzazsKKworCS8qCisJICogRnJhbWVidWZmZXIgaW5mby4KKwkgKi8KKworCXZvaWQgKmZiX2luZm87CisJc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheSAqbGR1X3ByaXY7CisJc3RydWN0IHZtd19vdmVybGF5ICpvdmVybGF5X3ByaXY7CisKKwkvKgorCSAqIENvbnRleHQgYW5kIHN1cmZhY2UgbWFuYWdlbWVudC4KKwkgKi8KKworCXJ3bG9ja190IHJlc291cmNlX2xvY2s7CisJc3RydWN0IGlkciBjb250ZXh0X2lkcjsKKwlzdHJ1Y3QgaWRyIHN1cmZhY2VfaWRyOworCXN0cnVjdCBpZHIgc3RyZWFtX2lkcjsKKworCS8qCisJICogQmxvY2sgbGFzdGNsb3NlIGZyb20gcmFjaW5nIHdpdGggZmlyc3RvcGVuLgorCSAqLworCisJc3RydWN0IG11dGV4IGluaXRfbXV0ZXg7CisKKwkvKgorCSAqIEEgcmVzb3VyY2UgbWFuYWdlciBmb3Iga2VybmVsLW9ubHkgc3VyZmFjZXMgYW5kCisJICogY29udGV4dHMuCisJICovCisKKwlzdHJ1Y3QgdHRtX29iamVjdF9kZXZpY2UgKnRkZXY7CisKKwkvKgorCSAqIEZlbmNpbmcgYW5kIElSUXMuCisJICovCisKKwl1aW50MzJfdCBmZW5jZV9zZXE7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZmVuY2VfcXVldWU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZmlmb19xdWV1ZTsKKwlhdG9taWNfdCBmZW5jZV9xdWV1ZV93YWl0ZXJzOworCWF0b21pY190IGZpZm9fcXVldWVfd2FpdGVyczsKKwl1aW50MzJfdCBsYXN0X3JlYWRfc2VxdWVuY2U7CisJc3BpbmxvY2tfdCBpcnFfbG9jazsKKworCS8qCisJICogRGV2aWNlIHN0YXRlCisJICovCisKKwl1aW50MzJfdCB0cmFjZXNfc3RhdGU7CisJdWludDMyX3QgZW5hYmxlX3N0YXRlOworCXVpbnQzMl90IGNvbmZpZ19kb25lX3N0YXRlOworCisJLyoqCisJICogRXhlY2J1ZgorCSAqLworCS8qKgorCSAqIFByb3RlY3RlZCBieSB0aGUgY21kYnVmIG11dGV4LgorCSAqLworCisJc3RydWN0IHZtd19zd19jb250ZXh0IGN0eDsKKwl1aW50MzJfdCB2YWxfc2VxOworCXN0cnVjdCBtdXRleCBjbWRidWZfbXV0ZXg7CisKKwkvKioKKwkgKiBHTVIgbWFuYWdlbWVudC4gUHJvdGVjdGVkIGJ5IHRoZSBscnUgc3BpbmxvY2suCisJICovCisKKwlzdHJ1Y3QgaWRhIGdtcl9pZGE7CisJc3RydWN0IGxpc3RfaGVhZCBnbXJfbHJ1OworCisKKwkvKioKKwkgKiBPcGVyYXRpbmcgbW9kZS4KKwkgKi8KKworCWJvb2wgc3RlYWx0aDsKKwlib29sIGlzX29wZW5lZDsKKworCS8qKgorCSAqIE1hc3RlciBtYW5hZ2VtZW50LgorCSAqLworCisJc3RydWN0IHZtd19tYXN0ZXIgKmFjdGl2ZV9tYXN0ZXI7CisJc3RydWN0IHZtd19tYXN0ZXIgZmJkZXZfbWFzdGVyOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3Qgdm13X3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfZnByaXYgKnZtd19mcHJpdihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlyZXR1cm4gKHN0cnVjdCB2bXdfZnByaXYgKilmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfbWFzdGVyICp2bXdfbWFzdGVyKHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCit7CisJcmV0dXJuIChzdHJ1Y3Qgdm13X21hc3RlciAqKSBtYXN0ZXItPmRyaXZlcl9wcml2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm13X3dyaXRlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVpbnQzMl90IHZhbHVlKQoreworCW91dGwob2Zmc2V0LCBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSU5ERVhfUE9SVCk7CisJb3V0bCh2YWx1ZSwgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX1ZBTFVFX1BPUlQpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHZtd19yZWFkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwl1aW50MzJfdCB2YWw7CisKKwlvdXRsKG9mZnNldCwgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lOREVYX1BPUlQpOworCXZhbCA9IGlubChkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfVkFMVUVfUE9SVCk7CisJcmV0dXJuIHZhbDsKK30KKworLyoqCisgKiBHTVIgdXRpbGl0aWVzIC0gdm13Z2Z4X2dtci5jCisgKi8KKworZXh0ZXJuIGludCB2bXdfZ21yX2JpbmQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOworZXh0ZXJuIHZvaWQgdm13X2dtcl91bmJpbmQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgaW50IGdtcl9pZCk7CisKKy8qKgorICogUmVzb3VyY2UgdXRpbGl0aWVzIC0gdm13Z2Z4X3Jlc291cmNlLmMKKyAqLworCitleHRlcm4gc3RydWN0IHZtd19yZXNvdXJjZSAqdm13X2NvbnRleHRfYWxsb2Moc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2Uoc3RydWN0IHZtd19yZXNvdXJjZSAqKnBfcmVzKTsKK2V4dGVybiBzdHJ1Y3Qgdm13X3Jlc291cmNlICp2bXdfcmVzb3VyY2VfcmVmZXJlbmNlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7CitleHRlcm4gaW50IHZtd19jb250ZXh0X2Rlc3Ryb3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgdm13X2NvbnRleHRfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgdm13X2NvbnRleHRfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCisJCQkgICAgIGludCBpZCk7CitleHRlcm4gdm9pZCB2bXdfc3VyZmFjZV9yZXNfZnJlZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOworZXh0ZXJuIGludCB2bXdfc3VyZmFjZV9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgc3RydWN0IHZtd19zdXJmYWNlICpzcmYsCisJCQkgICAgdm9pZCAoKnJlc19mcmVlKSAoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKSk7CitleHRlcm4gaW50IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJCQkgIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkJICBzdHJ1Y3Qgdm13X3N1cmZhY2UgKipvdXQpOworZXh0ZXJuIGludCB2bXdfc3VyZmFjZV9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd19zdXJmYWNlX2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd19zdXJmYWNlX3JlZmVyZW5jZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd19zdXJmYWNlX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJICAgICB1aW50MzJfdCBoYW5kbGUsIGludCAqaWQpOworZXh0ZXJuIHZvaWQgdm13X2RtYWJ1Zl9ib19mcmVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOworZXh0ZXJuIGludCB2bXdfZG1hYnVmX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIHN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvLAorCQkJICAgc2l6ZV90IHNpemUsIHN0cnVjdCB0dG1fcGxhY2VtZW50ICpwbGFjZW1lbnQsCisJCQkgICBib29sIGludGVydXB0YWJsZSwKKwkJCSAgIHZvaWQgKCpib19mcmVlKSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykpOworZXh0ZXJuIGludCB2bXdfZG1hYnVmX2FsbG9jX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IHZtd19kbWFidWZfdW5yZWZfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB1aW50MzJfdCB2bXdfZG1hYnVmX3ZhbGlkYXRlX25vZGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCQkJIHVpbnQzMl90IGN1cl92YWxpZGF0ZV9ub2RlKTsKK2V4dGVybiB2b2lkIHZtd19kbWFidWZfdmFsaWRhdGVfY2xlYXIoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CitleHRlcm4gaW50IHZtd191c2VyX2RtYWJ1Zl9sb29rdXAoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCisJCQkJICB1aW50MzJfdCBpZCwgc3RydWN0IHZtd19kbWFfYnVmZmVyICoqb3V0KTsKK2V4dGVybiB1aW50MzJfdCB2bXdfZG1hYnVmX2dtcihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKK2V4dGVybiB2b2lkIHZtd19kbWFidWZfc2V0X2dtcihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCB1aW50MzJfdCBpZCk7CitleHRlcm4gaW50IHZtd19nbXJfaWRfYWxsb2Moc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgKnBfaWQpOworZXh0ZXJuIGludCB2bXdfZG1hYnVmX3RvX3N0YXJ0X29mX3ZyYW0oc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IHZtd19kbWFfYnVmZmVyICpibyk7CitleHRlcm4gaW50IHZtd19kbWFidWZfZnJvbV92cmFtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCisJCQkJc3RydWN0IHZtd19kbWFfYnVmZmVyICpibyk7CitleHRlcm4gaW50IHZtd19zdHJlYW1fY2xhaW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgdm13X3N0cmVhbV91bnJlZl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCB2bXdfdXNlcl9zdHJlYW1fbG9va3VwKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCQkgIHVpbnQzMl90ICppbm91dF9pZCwKKwkJCQkgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKipvdXQpOworCisKKy8qKgorICogTWlzYyBJb2N0bCBmdW5jdGlvbmFsaXR5IC0gdm13Z2Z4X2lvY3RsLmMKKyAqLworCitleHRlcm4gaW50IHZtd19nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCB2bXdfZmlmb19kZWJ1Z19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKKworLyoqCisgKiBGaWZvIHV0aWxpdGllcyAtIHZtd2dmeF9maWZvLmMKKyAqLworCitleHRlcm4gaW50IHZtd19maWZvX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSBzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm8pOworZXh0ZXJuIHZvaWQgdm13X2ZpZm9fcmVsZWFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICBzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm8pOworZXh0ZXJuIHZvaWQgKnZtd19maWZvX3Jlc2VydmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgYnl0ZXMpOworZXh0ZXJuIHZvaWQgdm13X2ZpZm9fY29tbWl0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKTsKK2V4dGVybiBpbnQgdm13X2ZpZm9fc2VuZF9mZW5jZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgIHVpbnQzMl90ICpzZXF1ZW5jZSk7CitleHRlcm4gdm9pZCB2bXdfZmlmb19waW5nX2hvc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKTsKK2V4dGVybiBpbnQgdm13X2ZpZm9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCisvKioKKyAqIFRUTSBnbHVlIC0gdm13Z2Z4X3R0bV9nbHVlLmMKKyAqLworCitleHRlcm4gaW50IHZtd190dG1fZ2xvYmFsX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2bXdfdHRtX2dsb2JhbF9yZWxlYXNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworZXh0ZXJuIGludCB2bXdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCisvKioKKyAqIFRUTSBidWZmZXIgb2JqZWN0IGRyaXZlciAtIHZtd2dmeF9idWZmZXIuYworICovCisKK2V4dGVybiBzdHJ1Y3QgdHRtX3BsYWNlbWVudCB2bXdfdnJhbV9wbGFjZW1lbnQ7CitleHRlcm4gc3RydWN0IHR0bV9wbGFjZW1lbnQgdm13X3ZyYW1fbmVfcGxhY2VtZW50OworZXh0ZXJuIHN0cnVjdCB0dG1fcGxhY2VtZW50IHZtd19zeXNfcGxhY2VtZW50OworZXh0ZXJuIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHZtd19ib19kcml2ZXI7CitleHRlcm4gaW50IHZtd19kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKioKKyAqIENvbW1hbmQgc3VibWlzc2lvbiAtIHZtd2dmeF9leGVjYnVmLmMKKyAqLworCitleHRlcm4gaW50IHZtd19leGVjYnVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKKworLyoqCisgKiBJUlFzIGFuZCB3YXRpbmcgLSB2bXdnZnhfaXJxLmMKKyAqLworCitleHRlcm4gaXJxcmV0dXJuX3Qgdm13X2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CitleHRlcm4gaW50IHZtd193YWl0X2ZlbmNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIGJvb2wgbGF6eSwKKwkJCSAgdWludDMyX3Qgc2VxdWVuY2UsIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCSAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiB2b2lkIHZtd19pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdm13X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHZtd19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGJvb2wgdm13X2ZlbmNlX3NpZ25hbGVkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgdWludDMyX3Qgc2VxdWVuY2UpOworZXh0ZXJuIGludCB2bXdfZmVuY2Vfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgdm13X2ZhbGxiYWNrX3dhaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgYm9vbCBsYXp5LAorCQkJICAgICBib29sIGZpZm9faWRsZSwKKwkJCSAgICAgdWludDMyX3Qgc2VxdWVuY2UsCisJCQkgICAgIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKworLyoqCisgKiBLZXJuZWwgZnJhbWVidWZmZXIgLSB2bXdnZnhfZmIuYworICovCisKK2ludCB2bXdfZmJfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KTsKK2ludCB2bXdfZmJfY2xvc2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ZiX29mZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KTsKK2ludCB2bXdfZmJfb24oc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdik7CisKKy8qKgorICogS2VybmVsIG1vZGVzZXR0aW5nIC0gdm13Z2Z4X2ttcy5jCisgKi8KKworaW50IHZtd19rbXNfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCB2bXdfa21zX2Nsb3NlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19rbXNfc2F2ZV92Z2Eoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdik7CitpbnQgdm13X2ttc19yZXN0b3JlX3ZnYShzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KTsKK2ludCB2bXdfa21zX2N1cnNvcl9ieXBhc3NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIHZtd19rbXNfY3Vyc29yX3Bvc3RfZXhlY2J1ZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgdm13X2ttc19jdXJzb3Jfc25vb3Aoc3RydWN0IHZtd19zdXJmYWNlICpzcmYsCisJCQkgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcik7CisKKy8qKgorICogT3ZlcmxheSBjb250cm9sIC0gdm13Z2Z4X292ZXJsYXkuYworICovCisKK2ludCB2bXdfb3ZlcmxheV9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19vdmVybGF5X2Nsb3NlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19vdmVybGF5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCB2bXdfb3ZlcmxheV9zdG9wX2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCB2bXdfb3ZlcmxheV9yZXN1bWVfYWxsKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19vdmVybGF5X3BhdXNlX2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCB2bXdfb3ZlcmxheV9jbGFpbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCAqb3V0KTsKK2ludCB2bXdfb3ZlcmxheV91bnJlZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBzdHJlYW1faWQpOworaW50IHZtd19vdmVybGF5X251bV9vdmVybGF5cyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKK2ludCB2bXdfb3ZlcmxheV9udW1fZnJlZV9vdmVybGF5cyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKKworLyoqCisgKiBJbmxpbmUgaGVscGVyIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bXdfc3VyZmFjZV91bnJlZmVyZW5jZShzdHJ1Y3Qgdm13X3N1cmZhY2UgKipzcmYpCit7CisJc3RydWN0IHZtd19zdXJmYWNlICp0bXBfc3JmID0gKnNyZjsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMgPSAmdG1wX3NyZi0+cmVzOworCSpzcmYgPSBOVUxMOworCisJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfc3VyZmFjZSAqdm13X3N1cmZhY2VfcmVmZXJlbmNlKHN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmKQoreworCSh2b2lkKSB2bXdfcmVzb3VyY2VfcmVmZXJlbmNlKCZzcmYtPnJlcyk7CisJcmV0dXJuIHNyZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZtd19kbWFidWZfdW5yZWZlcmVuY2Uoc3RydWN0IHZtd19kbWFfYnVmZmVyICoqYnVmKQoreworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdG1wX2J1ZiA9ICpidWY7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZ0bXBfYnVmLT5iYXNlOworCSpidWYgPSBOVUxMOworCisJdHRtX2JvX3VucmVmKCZibyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfZG1hYnVmX3JlZmVyZW5jZShzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZikKK3sKKwlpZiAodHRtX2JvX3JlZmVyZW5jZSgmYnVmLT5iYXNlKSkKKwkJcmV0dXJuIGJ1ZjsKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MmRhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYwpAQCAtMCwwICsxLDYyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ2bXdnZnhfZHJ2LmgiCisjaW5jbHVkZSAidm13Z2Z4X3JlZy5oIgorI2luY2x1ZGUgInR0bS90dG1fYm9fYXBpLmgiCisjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKKworc3RhdGljIGludCB2bXdfY21kX2ludmFsaWQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCSAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXJldHVybiBjYXBhYmxlKENBUF9TWVNfQURNSU4pID8gOiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZtd19jbWRfb2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkgICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfY21kX2NpZF9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfY2lkX2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCV9fbGUzMiBjaWQ7CisJfSAqY21kOworCWludCByZXQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X2NpZF9jbWQsIGhlYWRlcik7CisJaWYgKGxpa2VseShzd19jb250ZXh0LT5jaWRfdmFsaWQgJiYgY21kLT5jaWQgPT0gc3dfY29udGV4dC0+bGFzdF9jaWQpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHZtd19jb250ZXh0X2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LT50ZmlsZSwgY21kLT5jaWQpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBvciB1c2UgY29udGV4dCAldVxuIiwKKwkJCSAgKHVuc2lnbmVkKSBjbWQtPmNpZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJc3dfY29udGV4dC0+bGFzdF9jaWQgPSBjbWQtPmNpZDsKKwlzd19jb250ZXh0LT5jaWRfdmFsaWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9zaWRfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJICAgICB1aW50MzJfdCAqc2lkKQoreworCWlmICgqc2lkID09IFNWR0EzRF9JTlZBTElEX0lEKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseSgoIXN3X2NvbnRleHQtPnNpZF92YWxpZCAgfHwKKwkJICAgICAgKnNpZCAhPSBzd19jb250ZXh0LT5sYXN0X3NpZCkpKSB7CisJCWludCByZWFsX2lkOworCQlpbnQgcmV0ID0gdm13X3N1cmZhY2VfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQtPnRmaWxlLAorCQkJCQkgICAgKnNpZCwgJnJlYWxfaWQpOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCURSTV9FUlJPUigiQ291bGQgb3QgZmluZCBvciB1c2Ugc3VyZmFjZSAweCUwOHggIgorCQkJCSAgImFkZHJlc3MgMHglMDhseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBpbnQpICpzaWQsCisJCQkJICAodW5zaWduZWQgbG9uZykgc2lkKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlzd19jb250ZXh0LT5sYXN0X3NpZCA9ICpzaWQ7CisJCXN3X2NvbnRleHQtPnNpZF92YWxpZCA9IHRydWU7CisJCSpzaWQgPSByZWFsX2lkOworCQlzd19jb250ZXh0LT5zaWRfdHJhbnNsYXRpb24gPSByZWFsX2lkOworCX0gZWxzZQorCQkqc2lkID0gc3dfY29udGV4dC0+c2lkX3RyYW5zbGF0aW9uOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2bXdfY21kX3NldF9yZW5kZXJfdGFyZ2V0X2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkJICAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19zaWRfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU2V0UmVuZGVyVGFyZ2V0IGJvZHk7CisJfSAqY21kOworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOworCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnRhcmdldC5zaWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9zdXJmYWNlX2NvcHlfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJICAgICAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19zaWRfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZUNvcHkgYm9keTsKKwl9ICpjbWQ7CisJaW50IHJldDsKKworCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5zcmMuc2lkKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5kZXN0LnNpZCk7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9zdHJldGNoX2JsdF9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJCSAgICAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19zaWRfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kU3VyZmFjZVN0cmV0Y2hCbHQgYm9keTsKKwl9ICpjbWQ7CisJaW50IHJldDsKKworCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5zcmMuc2lkKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5kZXN0LnNpZCk7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9ibHRfc3VyZl9zY3JlZW5fY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkJIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfc2lkX2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZEJsaXRTdXJmYWNlVG9TY3JlZW4gYm9keTsKKwl9ICpjbWQ7CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NpZF9jbWQsIGhlYWRlcik7CisJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LnNyY0ltYWdlLnNpZCk7Cit9CisKK3N0YXRpYyBpbnQgdm13X2NtZF9wcmVzZW50X2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19zaWRfY21kIHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kUHJlc2VudCBib2R5OworCX0gKmNtZDsKKworCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKKwlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuc2lkKTsKK30KKworc3RhdGljIGludCB2bXdfY21kX2RtYShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkgICAgICAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJdWludDMyX3QgaGFuZGxlOworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvID0gTlVMTDsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOworCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmID0gTlVMTDsKKwlzdHJ1Y3Qgdm13X2RtYV9jbWQgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRTdXJmYWNlRE1BIGRtYTsKKwl9ICpjbWQ7CisJc3RydWN0IHZtd19yZWxvY2F0aW9uICpyZWxvYzsKKwlpbnQgcmV0OworCXVpbnQzMl90IGN1cl92YWxpZGF0ZV9ub2RlOworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxfYnVmOworCisJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kbWFfY21kLCBoZWFkZXIpOworCWhhbmRsZSA9IGNtZC0+ZG1hLmd1ZXN0LnB0ci5nbXJJZDsKKwlyZXQgPSB2bXdfdXNlcl9kbWFidWZfbG9va3VwKHN3X2NvbnRleHQtPnRmaWxlLCBoYW5kbGUsICZ2bXdfYm8pOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBvciB1c2UgR01SIHJlZ2lvbi5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYm8gPSAmdm13X2JvLT5iYXNlOworCisJaWYgKHVubGlrZWx5KHN3X2NvbnRleHQtPmN1cl9yZWxvYyA+PSBWTVdHRlhfTUFYX1JFTE9DQVRJT05TKSkgeworCQlEUk1fRVJST1IoIk1heCBudW1iZXIgb2YgRE1BIGNvbW1hbmRzIHBlciBzdWJtaXNzaW9uIgorCQkJICAiIGV4Y2VlZGVkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfbm9fcmVsb2M7CisJfQorCisJcmVsb2MgPSAmc3dfY29udGV4dC0+cmVsb2NzW3N3X2NvbnRleHQtPmN1cl9yZWxvYysrXTsKKwlyZWxvYy0+bG9jYXRpb24gPSAmY21kLT5kbWEuZ3Vlc3QucHRyOworCisJY3VyX3ZhbGlkYXRlX25vZGUgPSB2bXdfZG1hYnVmX3ZhbGlkYXRlX25vZGUoYm8sIHN3X2NvbnRleHQtPmN1cl92YWxfYnVmKTsKKwlpZiAodW5saWtlbHkoY3VyX3ZhbGlkYXRlX25vZGUgPj0gVk1XR0ZYX01BWF9HTVJTKSkgeworCQlEUk1fRVJST1IoIk1heCBudW1iZXIgb2YgRE1BIGJ1ZmZlcnMgcGVyIHN1Ym1pc3Npb24iCisJCQkgICIgZXhjZWVkZWQuXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfbm9fcmVsb2M7CisJfQorCisJcmVsb2MtPmluZGV4ID0gY3VyX3ZhbGlkYXRlX25vZGU7CisJaWYgKHVubGlrZWx5KGN1cl92YWxpZGF0ZV9ub2RlID09IHN3X2NvbnRleHQtPmN1cl92YWxfYnVmKSkgeworCQl2YWxfYnVmID0gJnN3X2NvbnRleHQtPnZhbF9idWZzW2N1cl92YWxpZGF0ZV9ub2RlXTsKKwkJdmFsX2J1Zi0+Ym8gPSB0dG1fYm9fcmVmZXJlbmNlKGJvKTsKKwkJdmFsX2J1Zi0+bmV3X3N5bmNfb2JqX2FyZyA9ICh2b2lkICopIGRldl9wcml2OworCQlsaXN0X2FkZF90YWlsKCZ2YWxfYnVmLT5oZWFkLCAmc3dfY29udGV4dC0+dmFsaWRhdGVfbm9kZXMpOworCQkrK3N3X2NvbnRleHQtPmN1cl92YWxfYnVmOworCX0KKworCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgc3dfY29udGV4dC0+dGZpbGUsCisJCQkJCSAgICAgY21kLT5kbWEuaG9zdC5zaWQsICZzcmYpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzdXJmYWNlXG4iKTsKKwkJZ290byBvdXRfbm9fcmVsb2M7CisJfQorCisJLyoqCisJICogUGF0Y2ggY29tbWFuZCBzdHJlYW0gd2l0aCBkZXZpY2UgU0lELgorCSAqLworCisJY21kLT5kbWEuaG9zdC5zaWQgPSBzcmYtPnJlcy5pZDsKKwl2bXdfa21zX2N1cnNvcl9zbm9vcChzcmYsIHN3X2NvbnRleHQtPnRmaWxlLCBibywgaGVhZGVyKTsKKwkvKioKKwkgKiBGSVhNRTogTWF5IGRlYWRsb2NrIGhlcmUgd2hlbiBjYWxsZWQgZnJvbSB0aGUKKwkgKiBjb21tYW5kIHBhcnNpbmcgY29kZS4KKwkgKi8KKwl2bXdfc3VyZmFjZV91bnJlZmVyZW5jZSgmc3JmKTsKKworb3V0X25vX3JlbG9jOgorCXZtd19kbWFidWZfdW5yZWZlcmVuY2UoJnZtd19ibyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2bXdfY21kX2RyYXcoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCXN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCVNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfZHJhd19jbWQgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREcmF3UHJpbWl0aXZlcyBib2R5OworCX0gKmNtZDsKKwlTVkdBM2RWZXJ0ZXhEZWNsICpkZWNsID0gKFNWR0EzZFZlcnRleERlY2wgKikoCisJCSh1bnNpZ25lZCBsb25nKWhlYWRlciArIHNpemVvZigqY21kKSk7CisJU1ZHQTNkUHJpbWl0aXZlUmFuZ2UgKnJhbmdlOworCXVpbnQzMl90IGk7CisJdWludDMyX3QgbWF4bnVtOworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kcmF3X2NtZCwgaGVhZGVyKTsKKwltYXhudW0gPSAoaGVhZGVyLT5zaXplIC0gc2l6ZW9mKGNtZC0+Ym9keSkpIC8gc2l6ZW9mKCpkZWNsKTsKKworCWlmICh1bmxpa2VseShjbWQtPmJvZHkubnVtVmVydGV4RGVjbHMgPiBtYXhudW0pKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBudW1iZXIgb2YgdmVydGV4IGRlY2xhcmF0aW9ucy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5ib2R5Lm51bVZlcnRleERlY2xzOyArK2ksICsrZGVjbCkgeworCQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwKKwkJCQkJJmRlY2wtPmFycmF5LnN1cmZhY2VJZCk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCW1heG51bSA9IChoZWFkZXItPnNpemUgLSBzaXplb2YoY21kLT5ib2R5KSAtCisJCSAgY21kLT5ib2R5Lm51bVZlcnRleERlY2xzICogc2l6ZW9mKCpkZWNsKSkgLyBzaXplb2YoKnJhbmdlKTsKKwlpZiAodW5saWtlbHkoY21kLT5ib2R5Lm51bVJhbmdlcyA+IG1heG51bSkpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIG51bWJlciBvZiBpbmRleCByYW5nZXMuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmFuZ2UgPSAoU1ZHQTNkUHJpbWl0aXZlUmFuZ2UgKikgZGVjbDsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5ib2R5Lm51bVJhbmdlczsgKytpLCArK3JhbmdlKSB7CisJCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LAorCQkJCQkmcmFuZ2UtPmluZGV4QXJyYXkuc3VyZmFjZUlkKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdm13X2NtZF90ZXhfc3RhdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X3RleF9zdGF0ZV9jbWQgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRTZXRUZXh0dXJlU3RhdGUgc3RhdGU7CisJfTsKKworCVNWR0EzZFRleHR1cmVTdGF0ZSAqbGFzdF9zdGF0ZSA9IChTVkdBM2RUZXh0dXJlU3RhdGUgKikKKwkgICgodW5zaWduZWQgbG9uZykgaGVhZGVyICsgaGVhZGVyLT5zaXplICsgc2l6ZW9mKGhlYWRlcikpOworCVNWR0EzZFRleHR1cmVTdGF0ZSAqY3VyX3N0YXRlID0gKFNWR0EzZFRleHR1cmVTdGF0ZSAqKQorCQkoKHVuc2lnbmVkIGxvbmcpIGhlYWRlciArIHNpemVvZihzdHJ1Y3Qgdm13X3RleF9zdGF0ZV9jbWQpKTsKKwlpbnQgcmV0OworCisJcmV0ID0gdm13X2NtZF9jaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGhlYWRlcik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoOyBjdXJfc3RhdGUgPCBsYXN0X3N0YXRlOyArK2N1cl9zdGF0ZSkgeworCQlpZiAobGlrZWx5KGN1cl9zdGF0ZS0+bmFtZSAhPSBTVkdBM0RfVFNfQklORF9URVhUVVJFKSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LAorCQkJCQkmY3VyX3N0YXRlLT52YWx1ZSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisKK3R5cGVkZWYgaW50ICgqdm13X2NtZF9mdW5jKSAoc3RydWN0IHZtd19wcml2YXRlICosCisJCQkgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqLAorCQkJICAgICBTVkdBM2RDbWRIZWFkZXIgKik7CisKKyNkZWZpbmUgVk1XX0NNRF9ERUYoY21kLCBmdW5jKSBcCisJW2NtZCAtIFNWR0FfM0RfQ01EX0JBU0VdID0gZnVuYworCitzdGF0aWMgdm13X2NtZF9mdW5jIHZtd19jbWRfZnVuY3NbU1ZHQV8zRF9DTURfTUFYXSA9IHsKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TVVJGQUNFX0RFRklORSwgJnZtd19jbWRfaW52YWxpZCksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU1VSRkFDRV9ERVNUUk9ZLCAmdm13X2NtZF9pbnZhbGlkKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TVVJGQUNFX0NPUFksICZ2bXdfY21kX3N1cmZhY2VfY29weV9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU1VSRkFDRV9TVFJFVENIQkxULCAmdm13X2NtZF9zdHJldGNoX2JsdF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU1VSRkFDRV9ETUEsICZ2bXdfY21kX2RtYSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfQ09OVEVYVF9ERUZJTkUsICZ2bXdfY21kX2ludmFsaWQpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0NPTlRFWFRfREVTVFJPWSwgJnZtd19jbWRfaW52YWxpZCksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUVFJBTlNGT1JNLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFpSQU5HRSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRSRU5ERVJTVEFURSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRSRU5ERVJUQVJHRVQsCisJCSAgICAmdm13X2NtZF9zZXRfcmVuZGVyX3RhcmdldF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUVEVYVFVSRVNUQVRFLCAmdm13X2NtZF90ZXhfc3RhdGUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVE1BVEVSSUFMLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVExJR0hUREFUQSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRMSUdIVEVOQUJMRUQsICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUVklFV1BPUlQsICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUQ0xJUFBMQU5FLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0NMRUFSLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1BSRVNFTlQsICZ2bXdfY21kX3ByZXNlbnRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NIQURFUl9ERUZJTkUsICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0hBREVSX0RFU1RST1ksICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUX1NIQURFUiwgJnZtd19jbWRfY2lkX2NoZWNrKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRfU0hBREVSX0NPTlNULCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RSQVdfUFJJTUlUSVZFUywgJnZtd19jbWRfZHJhdyksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUU0NJU1NPUlJFQ1QsICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfQkVHSU5fUVVFUlksICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRU5EX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1dBSVRfRk9SX1FVRVJZLCAmdm13X2NtZF9jaWRfY2hlY2spLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1BSRVNFTlRfUkVBREJBQ0ssICZ2bXdfY21kX29rKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9CTElUX1NVUkZBQ0VfVE9fU0NSRUVOLAorCQkgICAgJnZtd19jbWRfYmx0X3N1cmZfc2NyZWVuX2NoZWNrKQorfTsKKworc3RhdGljIGludCB2bXdfY21kX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJIHZvaWQgKmJ1ZiwgdWludDMyX3QgKnNpemUpCit7CisJdWludDMyX3QgY21kX2lkOworCXVpbnQzMl90IHNpemVfcmVtYWluaW5nID0gKnNpemU7CisJU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIgPSAoU1ZHQTNkQ21kSGVhZGVyICopIGJ1ZjsKKwlpbnQgcmV0OworCisJY21kX2lkID0gKCh1aW50MzJfdCAqKWJ1ZilbMF07CisJaWYgKGNtZF9pZCA9PSBTVkdBX0NNRF9VUERBVEUpIHsKKwkJKnNpemUgPSA1IDw8IDI7CisJCXJldHVybiAwOworCX0KKworCWNtZF9pZCA9IGxlMzJfdG9fY3B1KGhlYWRlci0+aWQpOworCSpzaXplID0gbGUzMl90b19jcHUoaGVhZGVyLT5zaXplKSArIHNpemVvZihTVkdBM2RDbWRIZWFkZXIpOworCisJY21kX2lkIC09IFNWR0FfM0RfQ01EX0JBU0U7CisJaWYgKHVubGlrZWx5KCpzaXplID4gc2l6ZV9yZW1haW5pbmcpKQorCQlnb3RvIG91dF9lcnI7CisKKwlpZiAodW5saWtlbHkoY21kX2lkID49IFNWR0FfM0RfQ01EX01BWCAtIFNWR0FfM0RfQ01EX0JBU0UpKQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXQgPSB2bXdfY21kX2Z1bmNzW2NtZF9pZF0oZGV2X3ByaXYsIHN3X2NvbnRleHQsIGhlYWRlcik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfZXJyOworCisJcmV0dXJuIDA7CitvdXRfZXJyOgorCURSTV9FUlJPUigiSWxsZWdhbCAvIEludmFsaWQgU1ZHQTNEIGNvbW1hbmQ6ICVkXG4iLAorCQkgIGNtZF9pZCArIFNWR0FfM0RfQ01EX0JBU0UpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZtd19jbWRfY2hlY2tfYWxsKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCSAgICAgdm9pZCAqYnVmLCB1aW50MzJfdCBzaXplKQoreworCWludDMyX3QgY3VyX3NpemUgPSBzaXplOworCWludCByZXQ7CisKKwl3aGlsZSAoY3VyX3NpemUgPiAwKSB7CisJCXNpemUgPSBjdXJfc2l6ZTsKKwkJcmV0ID0gdm13X2NtZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgYnVmLCAmc2l6ZSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCQlidWYgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykgYnVmICsgc2l6ZSk7CisJCWN1cl9zaXplIC09IHNpemU7CisJfQorCisJaWYgKHVubGlrZWx5KGN1cl9zaXplICE9IDApKSB7CisJCURSTV9FUlJPUigiQ29tbWFuZCB2ZXJpZmllciBvdXQgb2Ygc3luYy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdm13X2ZyZWVfcmVsb2NhdGlvbnMoc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0KQoreworCXN3X2NvbnRleHQtPmN1cl9yZWxvYyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19hcHBseV9yZWxvY2F0aW9ucyhzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgdm13X3JlbG9jYXRpb24gKnJlbG9jOworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxpZGF0ZTsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOworCisJZm9yIChpID0gMDsgaSA8IHN3X2NvbnRleHQtPmN1cl9yZWxvYzsgKytpKSB7CisJCXJlbG9jID0gJnN3X2NvbnRleHQtPnJlbG9jc1tpXTsKKwkJdmFsaWRhdGUgPSAmc3dfY29udGV4dC0+dmFsX2J1ZnNbcmVsb2MtPmluZGV4XTsKKwkJYm8gPSB2YWxpZGF0ZS0+Ym87CisJCXJlbG9jLT5sb2NhdGlvbi0+b2Zmc2V0ICs9IGJvLT5vZmZzZXQ7CisJCXJlbG9jLT5sb2NhdGlvbi0+Z21ySWQgPSB2bXdfZG1hYnVmX2dtcihibyk7CisJfQorCXZtd19mcmVlX3JlbG9jYXRpb25zKHN3X2NvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCB2bXdfY2xlYXJfdmFsaWRhdGlvbnMoc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0KQoreworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZzd19jb250ZXh0LT52YWxpZGF0ZV9ub2RlcywKKwkJCQkgaGVhZCkgeworCQlsaXN0X2RlbCgmZW50cnktPmhlYWQpOworCQl2bXdfZG1hYnVmX3ZhbGlkYXRlX2NsZWFyKGVudHJ5LT5ibyk7CisJCXR0bV9ib191bnJlZigmZW50cnktPmJvKTsKKwkJc3dfY29udGV4dC0+Y3VyX3ZhbF9idWYtLTsKKwl9CisJQlVHX09OKHN3X2NvbnRleHQtPmN1cl92YWxfYnVmICE9IDApOworfQorCitzdGF0aWMgaW50IHZtd192YWxpZGF0ZV9zaW5nbGVfYnVmZmVyKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlpbnQgcmV0OworCisJaWYgKHZtd19kbWFidWZfZ21yKGJvKSAhPSBTVkdBX0dNUl9OVUxMKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHZtd19nbXJfYmluZChkZXZfcHJpdiwgYm8pOworCWlmIChsaWtlbHkocmV0ID09IDAgfHwgcmV0ID09IC1FUkVTVEFSVFNZUykpCisJCXJldHVybiByZXQ7CisKKworCXJldCA9IHR0bV9ib192YWxpZGF0ZShibywgJnZtd192cmFtX3BsYWNlbWVudCwgdHJ1ZSwgZmFsc2UpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCB2bXdfdmFsaWRhdGVfYnVmZmVycyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCXN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCkKK3sKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7CisJaW50IHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzd19jb250ZXh0LT52YWxpZGF0ZV9ub2RlcywgaGVhZCkgeworCQlyZXQgPSB2bXdfdmFsaWRhdGVfc2luZ2xlX2J1ZmZlcihkZXZfcHJpdiwgZW50cnktPmJvKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgdm13X2V4ZWNidWZfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJc3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcgKmFyZyA9IChzdHJ1Y3QgZHJtX3Ztd19leGVjYnVmX2FyZyAqKWRhdGE7CisJc3RydWN0IGRybV92bXdfZmVuY2VfcmVwIGZlbmNlX3JlcDsKKwlzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9yZXAgX191c2VyICp1c2VyX2ZlbmNlX3JlcDsKKwlpbnQgcmV0OworCXZvaWQgKnVzZXJfY21kOworCXZvaWQgKmNtZDsKKwl1aW50MzJfdCBzZXF1ZW5jZTsKKwlzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQgPSAmZGV2X3ByaXYtPmN0eDsKKwlzdHJ1Y3Qgdm13X21hc3RlciAqdm1hc3RlciA9IHZtd19tYXN0ZXIoZmlsZV9wcml2LT5tYXN0ZXIpOworCisJcmV0ID0gdHRtX3JlYWRfbG9jaygmdm1hc3Rlci0+bG9jaywgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0X25vX2NtZF9tdXRleDsKKwl9CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBhcmctPmNvbW1hbmRfc2l6ZSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgZmlmbyBzcGFjZSBmb3IgY29tbWFuZHMuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXVzZXJfY21kID0gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYXJnLT5jb21tYW5kczsKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihjbWQsIHVzZXJfY21kLCBhcmctPmNvbW1hbmRfc2l6ZSk7CisKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIGNvcHlpbmcgY29tbWFuZHMuXG4iKTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXN3X2NvbnRleHQtPnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOworCXN3X2NvbnRleHQtPmNpZF92YWxpZCA9IGZhbHNlOworCXN3X2NvbnRleHQtPnNpZF92YWxpZCA9IGZhbHNlOworCXN3X2NvbnRleHQtPmN1cl9yZWxvYyA9IDA7CisJc3dfY29udGV4dC0+Y3VyX3ZhbF9idWYgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJnN3X2NvbnRleHQtPnZhbGlkYXRlX25vZGVzKTsKKworCXJldCA9IHZtd19jbWRfY2hlY2tfYWxsKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQsIGFyZy0+Y29tbWFuZF9zaXplKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9lcnI7CisJcmV0ID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmc3dfY29udGV4dC0+dmFsaWRhdGVfbm9kZXMsCisJCQkJICAgICBkZXZfcHJpdi0+dmFsX3NlcSsrKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXQgPSB2bXdfdmFsaWRhdGVfYnVmZmVycyhkZXZfcHJpdiwgc3dfY29udGV4dCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfZXJyOworCisJdm13X2FwcGx5X3JlbG9jYXRpb25zKHN3X2NvbnRleHQpOworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgYXJnLT5jb21tYW5kX3NpemUpOworCisJcmV0ID0gdm13X2ZpZm9fc2VuZF9mZW5jZShkZXZfcHJpdiwgJnNlcXVlbmNlKTsKKworCXR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cygmc3dfY29udGV4dC0+dmFsaWRhdGVfbm9kZXMsCisJCQkJICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIHNlcXVlbmNlKTsKKwl2bXdfY2xlYXJfdmFsaWRhdGlvbnMoc3dfY29udGV4dCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKKworCS8qCisJICogVGhpcyBlcnJvciBpcyBoYXJtbGVzcywgYmVjYXVzZSBpZiBmZW5jZSBzdWJtaXNzaW9uIGZhaWxzLAorCSAqIHZtd19maWZvX3NlbmRfZmVuY2Ugd2lsbCBzeW5jLgorCSAqLworCisJaWYgKHJldCAhPSAwKQorCQlEUk1fRVJST1IoIkZlbmNlIHN1Ym1pc3Npb24gZXJyb3IuIFN5bmNpbmcuXG4iKTsKKworCWZlbmNlX3JlcC5lcnJvciA9IHJldDsKKwlmZW5jZV9yZXAuZmVuY2Vfc2VxID0gKHVpbnQ2NF90KSBzZXF1ZW5jZTsKKworCXVzZXJfZmVuY2VfcmVwID0gKHN0cnVjdCBkcm1fdm13X2ZlbmNlX3JlcCBfX3VzZXIgKikKKwkgICAgKHVuc2lnbmVkIGxvbmcpYXJnLT5mZW5jZV9yZXA7CisKKwkvKgorCSAqIGNvcHlfdG9fdXNlciBlcnJvcnMgd2lsbCBiZSBkZXRlY3RlZCBieSB1c2VyIHNwYWNlIG5vdAorCSAqIHNlZWluZyBmZW5jZV9yZXA6OmVycm9yIGZpbGxlZCBpbi4KKwkgKi8KKworCXJldCA9IGNvcHlfdG9fdXNlcih1c2VyX2ZlbmNlX3JlcCwgJmZlbmNlX3JlcCwgc2l6ZW9mKGZlbmNlX3JlcCkpOworCisJdm13X2ttc19jdXJzb3JfcG9zdF9leGVjYnVmKGRldl9wcml2KTsKKwl0dG1fcmVhZF91bmxvY2soJnZtYXN0ZXItPmxvY2spOworCXJldHVybiAwOworb3V0X2VycjoKKwl2bXdfZnJlZV9yZWxvY2F0aW9ucyhzd19jb250ZXh0KTsKKwl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmc3dfY29udGV4dC0+dmFsaWRhdGVfbm9kZXMpOworCXZtd19jbGVhcl92YWxpZGF0aW9ucyhzd19jb250ZXh0KTsKK291dF9jb21taXQ6CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCAwKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKK291dF9ub19jbWRfbXV0ZXg6CisJdHRtX3JlYWRfdW5sb2NrKCZ2bWFzdGVyLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxZGRlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKQEAgLTAsMCArMSw3NDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA3IERhdmlkIEFpcmxpZQorICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorCisjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKKworI2RlZmluZSBWTVdfRElSVFlfREVMQVkgKEhaIC8gMzApCisKK3N0cnVjdCB2bXdfZmJfcGFyIHsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2OworCisJdm9pZCAqdm1hbGxvYzsKKworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvOworCXN0cnVjdCB0dG1fYm9fa21hcF9vYmogbWFwOworCisJdTMyIHBzZXVkb19wYWxldHRlWzE3XTsKKworCXVuc2lnbmVkIGRlcHRoOworCXVuc2lnbmVkIGJwcDsKKworCXVuc2lnbmVkIG1heF93aWR0aDsKKwl1bnNpZ25lZCBtYXhfaGVpZ2h0OworCisJdm9pZCAqYm9fcHRyOworCXVuc2lnbmVkIGJvX3NpemU7CisJYm9vbCBib19pb3dyaXRlOworCisJc3RydWN0IHsKKwkJc3BpbmxvY2tfdCBsb2NrOworCQlib29sIGFjdGl2ZTsKKwkJdW5zaWduZWQgeDE7CisJCXVuc2lnbmVkIHkxOworCQl1bnNpZ25lZCB4MjsKKwkJdW5zaWduZWQgeTI7CisJfSBkaXJ0eTsKK307CisKK3N0YXRpYyBpbnQgdm13X2ZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCSAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZtd19mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1MzIgKnBhbCA9IHBhci0+cHNldWRvX3BhbGV0dGU7CisKKwlpZiAocmVnbm8gPiAxNSkgeworCQlEUk1fRVJST1IoIkJhZCByZWdubyAldS5cbiIsIHJlZ25vKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3dpdGNoIChwYXItPmRlcHRoKSB7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQlwYWxbcmVnbm9dID0gKChyZWQgJiAweGZmMDApIDw8IDgpIHwKKwkJCSAgICAgIChncmVlbiAmIDB4ZmYwMCkgfAorCQkJICAgICAoKGJsdWUgICYgMHhmZjAwKSA+PiA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJCYWQgZGVwdGggJXUsIGJwcCAldS5cbiIsIHBhci0+ZGVwdGgsIHBhci0+YnBwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOworCXN0cnVjdCB2bXdfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiA9IHBhci0+dm13X3ByaXY7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDMyOgorCQlkZXB0aCA9ICh2YXItPnRyYW5zcC5sZW5ndGggPiAwKSA/IDMyIDogMjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiQmFkIGJwcCAldS5cbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGRlcHRoKSB7CisJY2FzZSAyNDoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXZhci0+cmVkLm9mZnNldCA9IDE2OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJCYWQgZGVwdGggJXUuXG4iLCBkZXB0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHdpdGhvdXQgbXVsdGltb24gaXRzIGhhcmQgdG8gcmVzaXplICovCisJaWYgKCEodm13X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX01VTFRJTU9OKSAmJgorCSAgICAodmFyLT54cmVzICE9IHBhci0+bWF4X3dpZHRoIHx8CisJICAgICB2YXItPnlyZXMgIT0gcGFyLT5tYXhfaGVpZ2h0KSkgeworCQlEUk1fRVJST1IoIlRyaWVkIHRvIHJlc2l6ZSwgYnV0IHdlIGRvbid0IGhhdmUgbXVsdGltb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodmFyLT54cmVzID4gcGFyLT5tYXhfd2lkdGggfHwKKwkgICAgdmFyLT55cmVzID4gcGFyLT5tYXhfaGVpZ2h0KSB7CisJCURSTV9FUlJPUigiUmVxdWVzdGVkIGdlb20gY2FuIG5vdCBmaXQgaW4gZnJhbWVidWZmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYgPSBwYXItPnZtd19wcml2OworCisJaWYgKHZtd19wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9NVUxUSU1PTikgeworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX05VTV9HVUVTVF9ESVNQTEFZUywgMSk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JRCwgMCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JU19QUklNQVJZLCB0cnVlKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19ESVNQTEFZX1BPU0lUSU9OX1gsIDApOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfUE9TSVRJT05fWSwgMCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9XSURUSCwgMCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9IRUlHSFQsIDApOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSUQsIFNWR0FfSURfSU5WQUxJRCk7CisKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19FTkFCTEUsIDEpOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1dJRFRILCBwYXItPm1heF93aWR0aCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfSEVJR0hULCBwYXItPm1heF9oZWlnaHQpOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0JJVFNfUEVSX1BJWEVMLCBwYXItPmJwcCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfREVQVEgsIHBhci0+ZGVwdGgpOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1JFRF9NQVNLLCAweDAwZmYwMDAwKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19HUkVFTl9NQVNLLCAweDAwMDBmZjAwKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19CTFVFX01BU0ssIDB4MDAwMDAwZmYpOworCisJCS8qIFRPRE8gY2hlY2sgaWYgcGl0Y2ggYW5kIG9mZnNldCBjaGFuZ2VzICovCisKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19OVU1fR1VFU1RfRElTUExBWVMsIDEpOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSUQsIDApOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSVNfUFJJTUFSWSwgdHJ1ZSk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9QT1NJVElPTl9YLCBpbmZvLT52YXIueG9mZnNldCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9QT1NJVElPTl9ZLCBpbmZvLT52YXIueW9mZnNldCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9XSURUSCwgaW5mby0+dmFyLnhyZXMpOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSEVJR0hULCBpbmZvLT52YXIueXJlcyk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JRCwgU1ZHQV9JRF9JTlZBTElEKTsKKwl9IGVsc2UgeworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1dJRFRILCBpbmZvLT52YXIueHJlcyk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfSEVJR0hULCBpbmZvLT52YXIueXJlcyk7CisKKwkJLyogVE9ETyBjaGVjayBpZiBwaXRjaCBhbmQgb2Zmc2V0IGNoYW5nZXMgKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERpcnR5IGNvZGUKKyAqLworCitzdGF0aWMgdm9pZCB2bXdfZmJfZGlydHlfZmx1c2goc3RydWN0IHZtd19mYl9wYXIgKnBhcikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2ID0gcGFyLT52bXdfcHJpdjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHZtd19wcml2LT5mYl9pbmZvOworCWludCBzdHJpZGUgPSAoaW5mby0+Zml4LmxpbmVfbGVuZ3RoIC8gNCk7CisJaW50ICpzcmMgPSAoaW50ICopaW5mby0+c2NyZWVuX2Jhc2U7CisJX19sZTMyIF9faW9tZW0gKnZyYW1fbWVtID0gcGFyLT5ib19wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCB4LCB5LCB3LCBoOworCWludCBpLCBrOworCXN0cnVjdCB7CisJCXVpbnQzMl90IGhlYWRlcjsKKwkJU1ZHQUZpZm9DbWRVcGRhdGUgYm9keTsKKwl9ICpjbWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7CisJaWYgKCFwYXItPmRpcnR5LmFjdGl2ZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXItPmRpcnR5LmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwl4ID0gcGFyLT5kaXJ0eS54MTsKKwl5ID0gcGFyLT5kaXJ0eS55MTsKKwl3ID0gbWluKHBhci0+ZGlydHkueDIsIGluZm8tPnZhci54cmVzKSAtIHg7CisJaCA9IG1pbihwYXItPmRpcnR5LnkyLCBpbmZvLT52YXIueXJlcykgLSB5OworCXBhci0+ZGlydHkueDEgPSBwYXItPmRpcnR5LngyID0gMDsKKwlwYXItPmRpcnR5LnkxID0gcGFyLT5kaXJ0eS55MiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSB5ICogc3RyaWRlOyBpIDwgaW5mby0+Zml4LnNtZW1fbGVuIC8gNDsgaSArPSBzdHJpZGUpIHsKKwkJZm9yIChrID0gaSt4OyBrIDwgaSt4K3cgJiYgayA8IGluZm8tPmZpeC5zbWVtX2xlbiAvIDQ7IGsrKykKKwkJCWlvd3JpdGUzMihzcmNba10sIHZyYW1fbWVtICsgayk7CisJfQorCisjaWYgMAorCURSTV9JTkZPKCIlcywgKCV1LCAldSkgKCV1eCV1KVxuIiwgX19mdW5jX18sIHgsIHksIHcsIGgpOworI2VuZGlmCisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKHZtd19wcml2LCBzaXplb2YoKmNtZCkpOworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGaWZvIHJlc2VydmUgZmFpbGVkLlxuIik7CisJCXJldHVybjsKKwl9CisKKwljbWQtPmhlYWRlciA9IGNwdV90b19sZTMyKFNWR0FfQ01EX1VQREFURSk7CisJY21kLT5ib2R5LnggPSBjcHVfdG9fbGUzMih4KTsKKwljbWQtPmJvZHkueSA9IGNwdV90b19sZTMyKHkpOworCWNtZC0+Ym9keS53aWR0aCA9IGNwdV90b19sZTMyKHcpOworCWNtZC0+Ym9keS5oZWlnaHQgPSBjcHVfdG9fbGUzMihoKTsKKwl2bXdfZmlmb19jb21taXQodm13X3ByaXYsIHNpemVvZigqY21kKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19mYl9kaXJ0eV9tYXJrKHN0cnVjdCB2bXdfZmJfcGFyICpwYXIsCisJCQkgICAgICB1bnNpZ25lZCB4MSwgdW5zaWduZWQgeTEsCisJCQkgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGFyLT52bXdfcHJpdi0+ZmJfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHgyID0geDEgKyB3aWR0aDsKKwl1bnNpZ25lZCB5MiA9IHkxICsgaGVpZ2h0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhci0+ZGlydHkubG9jaywgZmxhZ3MpOworCWlmIChwYXItPmRpcnR5LngxID09IHBhci0+ZGlydHkueDIpIHsKKwkJcGFyLT5kaXJ0eS54MSA9IHgxOworCQlwYXItPmRpcnR5LnkxID0geTE7CisJCXBhci0+ZGlydHkueDIgPSB4MjsKKwkJcGFyLT5kaXJ0eS55MiA9IHkyOworCQkvKiBpZiB3ZSBhcmUgYWN0aXZlIHN0YXJ0IHRoZSBkaXJ0eSB3b3JrCisJCSAqIHdlIHNoYXJlIHRoZSB3b3JrIHdpdGggdGhlIGRlZmlvIHN5c3RlbSAqLworCQlpZiAocGFyLT5kaXJ0eS5hY3RpdmUpCisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmssIFZNV19ESVJUWV9ERUxBWSk7CisJfSBlbHNlIHsKKwkJaWYgKHgxIDwgcGFyLT5kaXJ0eS54MSkKKwkJCXBhci0+ZGlydHkueDEgPSB4MTsKKwkJaWYgKHkxIDwgcGFyLT5kaXJ0eS55MSkKKwkJCXBhci0+ZGlydHkueTEgPSB5MTsKKwkJaWYgKHgyID4gcGFyLT5kaXJ0eS54MikKKwkJCXBhci0+ZGlydHkueDIgPSB4MjsKKwkJaWYgKHkyID4gcGFyLT5kaXJ0eS55MikKKwkJCXBhci0+ZGlydHkueTIgPSB5MjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19kZWZlcnJlZF9pbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCkKK3sKKwlzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgbWluLCBtYXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgeTEsIHkyOworCisJbWluID0gVUxPTkdfTUFYOworCW1heCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBwYWdlbGlzdCwgbHJ1KSB7CisJCXN0YXJ0ID0gcGFnZS0+aW5kZXggPDwgUEFHRV9TSElGVDsKKwkJZW5kID0gc3RhcnQgKyBQQUdFX1NJWkUgLSAxOworCQltaW4gPSBtaW4obWluLCBzdGFydCk7CisJCW1heCA9IG1heChtYXgsIGVuZCk7CisJfQorCisJaWYgKG1pbiA8IG1heCkgeworCQl5MSA9IG1pbiAvIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKKwkJeTIgPSAobWF4IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSArIDE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhci0+ZGlydHkubG9jaywgZmxhZ3MpOworCQlwYXItPmRpcnR5LngxID0gMDsKKwkJcGFyLT5kaXJ0eS55MSA9IHkxOworCQlwYXItPmRpcnR5LngyID0gaW5mby0+dmFyLnhyZXM7CisJCXBhci0+ZGlydHkueTIgPSB5MjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7CisJfQorCisJdm13X2ZiX2RpcnR5X2ZsdXNoKHBhcik7Cit9OworCitzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gdm13X2RlZmlvID0geworCS5kZWxheQkJPSBWTVdfRElSVFlfREVMQVksCisJLmRlZmVycmVkX2lvCT0gdm13X2RlZmVycmVkX2lvLAorfTsKKworLyoKKyAqIERyYXcgY29kZQorICovCisKK3N0YXRpYyB2b2lkIHZtd19mYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKKwl2bXdfZmJfZGlydHlfbWFyayhpbmZvLT5wYXIsIHJlY3QtPmR4LCByZWN0LT5keSwKKwkJCSAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19mYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pCit7CisJY2ZiX2NvcHlhcmVhKGluZm8sIHJlZ2lvbik7CisJdm13X2ZiX2RpcnR5X21hcmsoaW5mby0+cGFyLCByZWdpb24tPmR4LCByZWdpb24tPmR5LAorCQkJICByZWdpb24tPndpZHRoLCByZWdpb24tPmhlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19mYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJdm13X2ZiX2RpcnR5X21hcmsoaW5mby0+cGFyLCBpbWFnZS0+ZHgsIGltYWdlLT5keSwKKwkJCSAgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0KTsKK30KKworLyoKKyAqIEJyaW5nIHVwIGNvZGUKKyAqLworCitzdGF0aWMgc3RydWN0IGZiX29wcyB2bXdfZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIgPSB2bXdfZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyID0gdm13X2ZiX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IHZtd19mYl9zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0ID0gdm13X2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYSA9IHZtd19mYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gdm13X2ZiX2ltYWdlYmxpdCwKKwkuZmJfcGFuX2Rpc3BsYXkgPSB2bXdfZmJfcGFuX2Rpc3BsYXksCisJLmZiX2JsYW5rID0gdm13X2ZiX2JsYW5rLAorfTsKKworc3RhdGljIGludCB2bXdfZmJfY3JlYXRlX2JvKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCisJCQkgICAgc2l6ZV90IHNpemUsIHN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqKm91dCkKK3sKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibzsKKwlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBuZV9wbGFjZW1lbnQgPSB2bXdfdnJhbV9uZV9wbGFjZW1lbnQ7CisJaW50IHJldDsKKworCW5lX3BsYWNlbWVudC5scGZuID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCisJLyogaW50ZXJ1cHRhYmxlPyAqLworCXJldCA9IHR0bV93cml0ZV9sb2NrKCZ2bXdfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2ssIGZhbHNlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdm13X2JvID0ga21hbGxvYyhzaXplb2YoKnZtd19ibyksIEdGUF9LRVJORUwpOworCWlmICghdm13X2JvKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwlyZXQgPSB2bXdfZG1hYnVmX2luaXQodm13X3ByaXYsIHZtd19ibywgc2l6ZSwKKwkJCSAgICAgICZuZV9wbGFjZW1lbnQsCisJCQkgICAgICBmYWxzZSwKKwkJCSAgICAgICZ2bXdfZG1hYnVmX2JvX2ZyZWUpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gZXJyX3VubG9jazsgLyogaW5pdCBmcmVlcyB0aGUgYnVmZmVyIG9uIGZhaWx1cmUgKi8KKworCSpvdXQgPSB2bXdfYm87CisKKwl0dG1fd3JpdGVfdW5sb2NrKCZ2bXdfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2spOworCisJcmV0dXJuIDA7CisKK2Vycl91bmxvY2s6CisJdHRtX3dyaXRlX3VubG9jaygmdm13X3ByaXYtPmZiZGV2X21hc3Rlci5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X2ZiX2luaXQoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmdm13X3ByaXYtPmRldi0+cGRldi0+ZGV2OworCXN0cnVjdCB2bXdfZmJfcGFyICpwYXI7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJdW5zaWduZWQgaW5pdGlhbF93aWR0aCwgaW5pdGlhbF9oZWlnaHQ7CisJdW5zaWduZWQgZmJfd2lkdGgsIGZiX2hlaWdodDsKKwl1bnNpZ25lZCBmYl9iYnAsIGZiX2RlcHRoLCBmYl9vZmZzZXQsIGZiX3BpdGNoLCBmYl9zaXplOworCWludCByZXQ7CisKKwlpbml0aWFsX3dpZHRoID0gODAwOworCWluaXRpYWxfaGVpZ2h0ID0gNjAwOworCisJZmJfYmJwID0gMzI7CisJZmJfZGVwdGggPSAyNDsKKworCWlmICh2bXdfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfTVVMVElNT04pIHsKKwkJZmJfd2lkdGggPSBtaW4odm13X3ByaXYtPmZiX21heF93aWR0aCwgKHVuc2lnbmVkKTIwNDgpOworCQlmYl9oZWlnaHQgPSBtaW4odm13X3ByaXYtPmZiX21heF9oZWlnaHQsICh1bnNpZ25lZCkyMDQ4KTsKKwl9IGVsc2UgeworCQlmYl93aWR0aCA9IG1pbih2bXdfcHJpdi0+ZmJfbWF4X3dpZHRoLCBpbml0aWFsX3dpZHRoKTsKKwkJZmJfaGVpZ2h0ID0gbWluKHZtd19wcml2LT5mYl9tYXhfaGVpZ2h0LCBpbml0aWFsX2hlaWdodCk7CisJfQorCisJaW5pdGlhbF93aWR0aCA9IG1pbihmYl93aWR0aCwgaW5pdGlhbF93aWR0aCk7CisJaW5pdGlhbF9oZWlnaHQgPSBtaW4oZmJfaGVpZ2h0LCBpbml0aWFsX2hlaWdodCk7CisKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1dJRFRILCBmYl93aWR0aCk7CisJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19IRUlHSFQsIGZiX2hlaWdodCk7CisJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19CSVRTX1BFUl9QSVhFTCwgZmJfYmJwKTsKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RFUFRILCBmYl9kZXB0aCk7CisJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19SRURfTUFTSywgMHgwMGZmMDAwMCk7CisJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19HUkVFTl9NQVNLLCAweDAwMDBmZjAwKTsKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0JMVUVfTUFTSywgMHgwMDAwMDBmZik7CisKKwlmYl9zaXplID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0ZCX1NJWkUpOworCWZiX29mZnNldCA9IHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19GQl9PRkZTRVQpOworCWZiX3BpdGNoID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0JZVEVTX1BFUl9MSU5FKTsKKworCURSTV9ERUJVRygid2lkdGggICV1XG4iLCB2bXdfcmVhZCh2bXdfcHJpdiwgU1ZHQV9SRUdfTUFYX1dJRFRIKSk7CisJRFJNX0RFQlVHKCJoZWlnaHQgJXVcbiIsIHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19NQVhfSEVJR0hUKSk7CisJRFJNX0RFQlVHKCJ3aWR0aCAgJXVcbiIsIHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19XSURUSCkpOworCURSTV9ERUJVRygiaGVpZ2h0ICV1XG4iLCB2bXdfcmVhZCh2bXdfcHJpdiwgU1ZHQV9SRUdfSEVJR0hUKSk7CisJRFJNX0RFQlVHKCJicHAgICAgJXVcbiIsIHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19CSVRTX1BFUl9QSVhFTCkpOworCURSTV9ERUJVRygiZGVwdGggICV1XG4iLCB2bXdfcmVhZCh2bXdfcHJpdiwgU1ZHQV9SRUdfREVQVEgpKTsKKwlEUk1fREVCVUcoImJwbCAgICAldVxuIiwgdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0JZVEVTX1BFUl9MSU5FKSk7CisJRFJNX0RFQlVHKCJyIG1hc2sgJTA4eFxuIiwgdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX1JFRF9NQVNLKSk7CisJRFJNX0RFQlVHKCJnIG1hc2sgJTA4eFxuIiwgdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0dSRUVOX01BU0spKTsKKwlEUk1fREVCVUcoImIgbWFzayAlMDh4XG4iLCB2bXdfcmVhZCh2bXdfcHJpdiwgU1ZHQV9SRUdfQkxVRV9NQVNLKSk7CisJRFJNX0RFQlVHKCJmYl9vZmZzZXQgMHglMDh4XG4iLCBmYl9vZmZzZXQpOworCURSTV9ERUJVRygiZmJfcGl0Y2ggICV1XG4iLCBmYl9waXRjaCk7CisJRFJNX0RFQlVHKCJmYl9zaXplICAgJXUga2lCXG4iLCBmYl9zaXplIC8gMTAyNCk7CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKCpwYXIpLCBkZXZpY2UpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFBhcgorCSAqLworCXZtd19wcml2LT5mYl9pbmZvID0gaW5mbzsKKwlwYXIgPSBpbmZvLT5wYXI7CisJcGFyLT52bXdfcHJpdiA9IHZtd19wcml2OworCXBhci0+ZGVwdGggPSBmYl9kZXB0aDsKKwlwYXItPmJwcCA9IGZiX2JicDsKKwlwYXItPnZtYWxsb2MgPSBOVUxMOworCXBhci0+bWF4X3dpZHRoID0gZmJfd2lkdGg7CisJcGFyLT5tYXhfaGVpZ2h0ID0gZmJfaGVpZ2h0OworCisJLyoKKwkgKiBDcmVhdGUgYnVmZmVycyBhbmQgYWxsb2MgbWVtb3J5CisJICovCisJcGFyLT52bWFsbG9jID0gdm1hbGxvYyhmYl9zaXplKTsKKwlpZiAodW5saWtlbHkocGFyLT52bWFsbG9jID09IE5VTEwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gdm13X2ZiX2NyZWF0ZV9ibyh2bXdfcHJpdiwgZmJfc2l6ZSwgJnBhci0+dm13X2JvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIGVycl9mcmVlOworCisJcmV0ID0gdHRtX2JvX2ttYXAoJnBhci0+dm13X2JvLT5iYXNlLAorCQkJICAwLAorCQkJICBwYXItPnZtd19iby0+YmFzZS5udW1fcGFnZXMsCisJCQkgICZwYXItPm1hcCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBlcnJfdW5yZWY7CisJcGFyLT5ib19wdHIgPSB0dG1fa21hcF9vYmpfdmlydHVhbCgmcGFyLT5tYXAsICZwYXItPmJvX2lvd3JpdGUpOworCXBhci0+Ym9fc2l6ZSA9IGZiX3NpemU7CisKKwkvKgorCSAqIEZpeGVkIGFuZCB2YXIKKwkgKi8KKwlzdHJjcHkoaW5mby0+Zml4LmlkLCAic3ZnYWRybWZiIik7CisJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKKwlpbmZvLT5maXgueHBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLworCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCisJaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7CisJaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSBmYl9waXRjaDsKKworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gMDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBmYl9zaXplOworCisJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSAwOworCWluZm8tPmZpeC5tbWlvX2xlbiA9IDA7CisKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbGV0dGU7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSBwYXItPnZtYWxsb2M7CisJaW5mby0+c2NyZWVuX3NpemUgPSBmYl9zaXplOworCisJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKwlpbmZvLT5mYm9wcyA9ICZ2bXdfZmJfb3BzOworCisJLyogMjQgZGVwdGggcGVyIGRlZmF1bHQgKi8KKwlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OworCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA4OworCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OworCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OworCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7CisJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOworCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMDsKKworCWluZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBmYl93aWR0aDsKKwlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gZmJfaGVpZ2h0OworCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IHBhci0+YnBwOworCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKKwlpbmZvLT52YXIueW9mZnNldCA9IDA7CisJaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworCWluZm8tPnZhci5oZWlnaHQgPSAtMTsKKwlpbmZvLT52YXIud2lkdGggPSAtMTsKKworCWluZm8tPnZhci54cmVzID0gaW5pdGlhbF93aWR0aDsKKwlpbmZvLT52YXIueXJlcyA9IGluaXRpYWxfaGVpZ2h0OworCisjaWYgMAorCWluZm8tPnBpeG1hcC5zaXplID0gNjQqMTAyNDsKKwlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gODsKKwlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CisJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKKwlpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDE7CisjZWxzZQorCWluZm8tPnBpeG1hcC5zaXplID0gMDsKKwlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gODsKKwlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CisJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKKwlpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDE7CisjZW5kaWYKKworCS8qCisJICogRGlydHkgJiBEZWZlcnJlZCBJTworCSAqLworCXBhci0+ZGlydHkueDEgPSBwYXItPmRpcnR5LngyID0gMDsKKwlwYXItPmRpcnR5LnkxID0gcGFyLT5kaXJ0eS55MSA9IDA7CisJcGFyLT5kaXJ0eS5hY3RpdmUgPSB0cnVlOworCXNwaW5fbG9ja19pbml0KCZwYXItPmRpcnR5LmxvY2spOworCWluZm8tPmZiZGVmaW8gPSAmdm13X2RlZmlvOworCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIGVycl9kZWZpbzsKKworCXJldHVybiAwOworCitlcnJfZGVmaW86CisJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKKwl0dG1fYm9fa3VubWFwKCZwYXItPm1hcCk7CitlcnJfdW5yZWY6CisJdHRtX2JvX3VucmVmKChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKiopJnBhci0+dm13X2JvKTsKK2Vycl9mcmVlOgorCXZmcmVlKHBhci0+dm1hbGxvYyk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwl2bXdfcHJpdi0+ZmJfaW5mbyA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X2ZiX2Nsb3NlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IHZtd19mYl9wYXIgKnBhcjsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOworCisJaWYgKCF2bXdfcHJpdi0+ZmJfaW5mbykKKwkJcmV0dXJuIDA7CisKKwlpbmZvID0gdm13X3ByaXYtPmZiX2luZm87CisJcGFyID0gaW5mby0+cGFyOworCWJvID0gJnBhci0+dm13X2JvLT5iYXNlOworCXBhci0+dm13X2JvID0gTlVMTDsKKworCS8qID8/PyBvcmRlciAqLworCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoaW5mbyk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKworCXR0bV9ib19rdW5tYXAoJnBhci0+bWFwKTsKKwl0dG1fYm9fdW5yZWYoJmJvKTsKKworCXZmcmVlKHBhci0+dm1hbGxvYyk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKworCXJldHVybiAwOworfQorCitpbnQgdm13X2RtYWJ1Zl9mcm9tX3ZyYW0oc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwKKwkJCSBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibykKK3sKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gJnZtd19iby0+YmFzZTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHR0bV9ib19yZXNlcnZlKGJvLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKGJvLCAmdm13X3N5c19wbGFjZW1lbnQsIGZhbHNlLCBmYWxzZSk7CisJdHRtX2JvX3VucmVzZXJ2ZShibyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X2RtYWJ1Zl90b19zdGFydF9vZl92cmFtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCisJCQkJc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm8pCit7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZ2bXdfYm8tPmJhc2U7CisJc3RydWN0IHR0bV9wbGFjZW1lbnQgbmVfcGxhY2VtZW50ID0gdm13X3ZyYW1fbmVfcGxhY2VtZW50OworCWludCByZXQgPSAwOworCisJbmVfcGxhY2VtZW50LmxwZm4gPSBiby0+bnVtX3BhZ2VzOworCisJLyogaW50ZXJ1cHRhYmxlPyAqLworCXJldCA9IHR0bV93cml0ZV9sb2NrKCZ2bXdfcHJpdi0+YWN0aXZlX21hc3Rlci0+bG9jaywgZmFsc2UpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB0dG1fYm9fcmVzZXJ2ZShibywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBlcnJfdW5sb2NrOworCisJaWYgKHZtd19iby0+Z21yX2JvdW5kKSB7CisJCXZtd19nbXJfdW5iaW5kKHZtd19wcml2LCB2bXdfYm8tPmdtcl9pZCk7CisJCXNwaW5fbG9jaygmYm8tPmdsb2ItPmxydV9sb2NrKTsKKwkJaWRhX3JlbW92ZSgmdm13X3ByaXYtPmdtcl9pZGEsIHZtd19iby0+Z21yX2lkKTsKKwkJc3Bpbl91bmxvY2soJmJvLT5nbG9iLT5scnVfbG9jayk7CisJCXZtd19iby0+Z21yX2JvdW5kID0gTlVMTDsKKwl9CisKKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoYm8sICZuZV9wbGFjZW1lbnQsIGZhbHNlLCBmYWxzZSk7CisJdHRtX2JvX3VucmVzZXJ2ZShibyk7CitlcnJfdW5sb2NrOgorCXR0bV93cml0ZV91bmxvY2soJnZtd19wcml2LT5hY3RpdmVfbWFzdGVyLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB2bXdfZmJfb2ZmKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IHZtd19mYl9wYXIgKnBhcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF2bXdfcHJpdi0+ZmJfaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvID0gdm13X3ByaXYtPmZiX2luZm87CisJcGFyID0gaW5mby0+cGFyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhci0+ZGlydHkubG9jaywgZmxhZ3MpOworCXBhci0+ZGlydHkuYWN0aXZlID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJcGFyLT5ib19wdHIgPSBOVUxMOworCXR0bV9ib19rdW5tYXAoJnBhci0+bWFwKTsKKworCXZtd19kbWFidWZfZnJvbV92cmFtKHZtd19wcml2LCBwYXItPnZtd19ibyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19mYl9vbihzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCB2bXdfZmJfcGFyICpwYXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGR1bW15OworCWludCByZXQ7CisKKwlpZiAoIXZtd19wcml2LT5mYl9pbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZm8gPSB2bXdfcHJpdi0+ZmJfaW5mbzsKKwlwYXIgPSBpbmZvLT5wYXI7CisKKwkvKiB3ZSBhcmUgYWxyZWFkeSBhY3RpdmUgKi8KKwlpZiAocGFyLT5ib19wdHIgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBhbGwgb3ZlcmxheXMgYXJlIHN0b3BlZCB3aGVuIHdlIHRha2Ugb3ZlciAqLworCXZtd19vdmVybGF5X3N0b3BfYWxsKHZtd19wcml2KTsKKworCXJldCA9IHZtd19kbWFidWZfdG9fc3RhcnRfb2ZfdnJhbSh2bXdfcHJpdiwgcGFyLT52bXdfYm8pOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgbW92ZSBidWZmZXIgdG8gc3RhcnQgb2YgVlJBTVxuIik7CisJCWdvdG8gZXJyX25vX2J1ZmZlcjsKKwl9CisKKwlyZXQgPSB0dG1fYm9fa21hcCgmcGFyLT52bXdfYm8tPmJhc2UsCisJCQkgIDAsCisJCQkgIHBhci0+dm13X2JvLT5iYXNlLm51bV9wYWdlcywKKwkJCSAgJnBhci0+bWFwKTsKKwlCVUdfT04ocmV0ICE9IDApOworCXBhci0+Ym9fcHRyID0gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoJnBhci0+bWFwLCAmZHVtbXkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhci0+ZGlydHkubG9jaywgZmxhZ3MpOworCXBhci0+ZGlydHkuYWN0aXZlID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXItPmRpcnR5LmxvY2ssIGZsYWdzKTsKKworZXJyX25vX2J1ZmZlcjoKKwl2bXdfZmJfc2V0X3BhcihpbmZvKTsKKworCXZtd19mYl9kaXJ0eV9tYXJrKHBhciwgMCwgMCwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKworCS8qIElmIHRoZXJlIGFscmVhZHkgd2FzIHN0dWZmIGRpcnR5IHdlIHdvbnQKKwkgKiBzY2hlZHVsZSBhIG5ldyB3b3JrLCBzbyBsZXRzIGRvIGl0IG5vdyAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5mby0+ZGVmZXJyZWRfd29yaywgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWZlYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCkBAIC0wLDAgKzEsNTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKKworaW50IHZtd19maWZvX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IHZtd19maWZvX3N0YXRlICpmaWZvKQoreworCV9fbGUzMiBfX2lvbWVtICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CisJdWludDMyX3QgbWF4OworCXVpbnQzMl90IG1pbjsKKwl1aW50MzJfdCBkdW1teTsKKwlpbnQgcmV0OworCisJZmlmby0+c3RhdGljX2J1ZmZlcl9zaXplID0gVk1XR0ZYX0ZJRk9fU1RBVElDX1NJWkU7CisJZmlmby0+c3RhdGljX2J1ZmZlciA9IHZtYWxsb2MoZmlmby0+c3RhdGljX2J1ZmZlcl9zaXplKTsKKwlpZiAodW5saWtlbHkoZmlmby0+c3RhdGljX2J1ZmZlciA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaWZvLT5sYXN0X2J1ZmZlcl9zaXplID0gVk1XR0ZYX0ZJRk9fU1RBVElDX1NJWkU7CisJZmlmby0+bGFzdF9kYXRhX3NpemUgPSAwOworCWZpZm8tPmxhc3RfYnVmZmVyX2FkZCA9IGZhbHNlOworCWZpZm8tPmxhc3RfYnVmZmVyID0gdm1hbGxvYyhmaWZvLT5sYXN0X2J1ZmZlcl9zaXplKTsKKwlpZiAodW5saWtlbHkoZmlmby0+bGFzdF9idWZmZXIgPT0gTlVMTCkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWZpZm8tPmR5bmFtaWNfYnVmZmVyID0gTlVMTDsKKwlmaWZvLT5yZXNlcnZlZF9zaXplID0gMDsKKwlmaWZvLT51c2luZ19ib3VuY2VfYnVmZmVyID0gZmFsc2U7CisKKwlpbml0X3J3c2VtKCZmaWZvLT5yd3NlbSk7CisKKwkvKgorCSAqIEFsbG93IG1hcHBpbmcgdGhlIGZpcnN0IHBhZ2UgcmVhZC1vbmx5IHRvIHVzZXItc3BhY2UuCisJICovCisKKwlEUk1fSU5GTygid2lkdGggJWRcbiIsIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19XSURUSCkpOworCURSTV9JTkZPKCJoZWlnaHQgJWRcbiIsIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19IRUlHSFQpKTsKKwlEUk1fSU5GTygiYnBwICVkXG4iLCB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfQklUU19QRVJfUElYRUwpKTsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJZGV2X3ByaXYtPmVuYWJsZV9zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUpOworCWRldl9wcml2LT5jb25maWdfZG9uZV9zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19DT05GSUdfRE9ORSk7CisJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUsIDEpOworCisJbWluID0gNDsKKwlpZiAoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0VYVEVOREVEX0ZJRk8pCisJCW1pbiA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19NRU1fUkVHUyk7CisJbWluIDw8PSAyOworCisJaWYgKG1pbiA8IFBBR0VfU0laRSkKKwkJbWluID0gUEFHRV9TSVpFOworCisJaW93cml0ZTMyKG1pbiwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUlOKTsKKwlpb3dyaXRlMzIoZGV2X3ByaXYtPm1taW9fc2l6ZSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUFYKTsKKwl3bWIoKTsKKwlpb3dyaXRlMzIobWluLCAgZmlmb19tZW0gKyBTVkdBX0ZJRk9fTkVYVF9DTUQpOworCWlvd3JpdGUzMihtaW4sICBmaWZvX21lbSArIFNWR0FfRklGT19TVE9QKTsKKwlpb3dyaXRlMzIoMCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQlVTWSk7CisJbWIoKTsKKworCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfQ09ORklHX0RPTkUsIDEpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKworCW1heCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01BWCk7CisJbWluID0gaW9yZWFkMzIoZmlmb19tZW0gICsgU1ZHQV9GSUZPX01JTik7CisJZmlmby0+Y2FwYWJpbGl0aWVzID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fQ0FQQUJJTElUSUVTKTsKKworCURSTV9JTkZPKCJGaWZvIG1heCAweCUwOHggbWluIDB4JTA4eCBjYXAgMHglMDh4XG4iLAorCQkgKHVuc2lnbmVkIGludCkgbWF4LAorCQkgKHVuc2lnbmVkIGludCkgbWluLAorCQkgKHVuc2lnbmVkIGludCkgZmlmby0+Y2FwYWJpbGl0aWVzKTsKKworCWRldl9wcml2LT5mZW5jZV9zZXEgPSAodWludDMyX3QpIC0xMDA7CisJZGV2X3ByaXYtPmxhc3RfcmVhZF9zZXF1ZW5jZSA9ICh1aW50MzJfdCkgLTEwMDsKKwlpb3dyaXRlMzIoZGV2X3ByaXYtPmxhc3RfcmVhZF9zZXF1ZW5jZSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0UpOworCisJcmV0dXJuIHZtd19maWZvX3NlbmRfZmVuY2UoZGV2X3ByaXYsICZkdW1teSk7CitvdXRfZXJyOgorCXZmcmVlKGZpZm8tPnN0YXRpY19idWZmZXIpOworCWZpZm8tPnN0YXRpY19idWZmZXIgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgdm13X2ZpZm9fcGluZ19ob3N0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IHJlYXNvbikKK3sKKwlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKworCWlmICh1bmxpa2VseShpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19CVVNZKSA9PSAwKSkgeworCQlpb3dyaXRlMzIoMSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQlVTWSk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfU1lOQywgcmVhc29uKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7Cit9CisKK3ZvaWQgdm13X2ZpZm9fcmVsZWFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm8pCit7CisJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisKKwl3aGlsZSAodm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpICE9IDApCisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfU1lOQywgU1ZHQV9TWU5DX0dFTkVSSUMpOworCisJZGV2X3ByaXYtPmxhc3RfcmVhZF9zZXF1ZW5jZSA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKKworCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfQ09ORklHX0RPTkUsCisJCSAgZGV2X3ByaXYtPmNvbmZpZ19kb25lX3N0YXRlKTsKKwl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSwKKwkJICBkZXZfcHJpdi0+ZW5hYmxlX3N0YXRlKTsKKworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKworCWlmIChsaWtlbHkoZmlmby0+bGFzdF9idWZmZXIgIT0gTlVMTCkpIHsKKwkJdmZyZWUoZmlmby0+bGFzdF9idWZmZXIpOworCQlmaWZvLT5sYXN0X2J1ZmZlciA9IE5VTEw7CisJfQorCisJaWYgKGxpa2VseShmaWZvLT5zdGF0aWNfYnVmZmVyICE9IE5VTEwpKSB7CisJCXZmcmVlKGZpZm8tPnN0YXRpY19idWZmZXIpOworCQlmaWZvLT5zdGF0aWNfYnVmZmVyID0gTlVMTDsKKwl9CisKKwlpZiAobGlrZWx5KGZpZm8tPmR5bmFtaWNfYnVmZmVyICE9IE5VTEwpKSB7CisJCXZmcmVlKGZpZm8tPmR5bmFtaWNfYnVmZmVyKTsKKwkJZmlmby0+ZHluYW1pY19idWZmZXIgPSBOVUxMOworCX0KK30KKworc3RhdGljIGJvb2wgdm13X2ZpZm9faXNfZnVsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBieXRlcykKK3sKKwlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCXVpbnQzMl90IG1heCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01BWCk7CisJdWludDMyX3QgbmV4dF9jbWQgPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CisJdWludDMyX3QgbWluID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUlOKTsKKwl1aW50MzJfdCBzdG9wID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fU1RPUCk7CisKKwlyZXR1cm4gKChtYXggLSBuZXh0X2NtZCkgKyAoc3RvcCAtIG1pbikgPD0gYnl0ZXMpOworfQorCitzdGF0aWMgaW50IHZtd19maWZvX3dhaXRfbm9pcnEoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgICB1aW50MzJfdCBieXRlcywgYm9vbCBpbnRlcnJ1cHRpYmxlLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGVuZF9qaWZmaWVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJREVGSU5FX1dBSVQoX193YWl0KTsKKworCURSTV9JTkZPKCJGaWZvIHdhaXQgbm9pcnEuXG4iKTsKKworCWZvciAoOzspIHsKKwkJcHJlcGFyZV90b193YWl0KCZkZXZfcHJpdi0+Zmlmb19xdWV1ZSwgJl9fd2FpdCwKKwkJCQkoaW50ZXJydXB0aWJsZSkgPworCQkJCVRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKCF2bXdfZmlmb19pc19mdWxsKGRldl9wcml2LCBieXRlcykpCisJCQlicmVhazsKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kX2ppZmZpZXMpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlEUk1fRVJST1IoIlNWR0EgZGV2aWNlIGxvY2t1cC5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJaWYgKGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisJfQorCWZpbmlzaF93YWl0KCZkZXZfcHJpdi0+Zmlmb19xdWV1ZSwgJl9fd2FpdCk7CisJd2FrZV91cF9hbGwoJmRldl9wcml2LT5maWZvX3F1ZXVlKTsKKwlEUk1fSU5GTygiRmlmbyBub2lycSBleGl0LlxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2bXdfZmlmb193YWl0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgdWludDMyX3QgYnl0ZXMsIGJvb2wgaW50ZXJydXB0aWJsZSwKKwkJCSB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJbG9uZyByZXQgPSAxTDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWlmIChsaWtlbHkoIXZtd19maWZvX2lzX2Z1bGwoZGV2X3ByaXYsIGJ5dGVzKSkpCisJCXJldHVybiAwOworCisJdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBTVkdBX1NZTkNfRklGT0ZVTEwpOworCWlmICghKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKSkKKwkJcmV0dXJuIHZtd19maWZvX3dhaXRfbm9pcnEoZGV2X3ByaXYsIGJ5dGVzLAorCQkJCQkgICBpbnRlcnJ1cHRpYmxlLCB0aW1lb3V0KTsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXZfcHJpdi0+Zmlmb19xdWV1ZV93YWl0ZXJzKSA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKKwkJb3V0bChTVkdBX0lSUUZMQUdfRklGT19QUk9HUkVTUywKKwkJICAgICBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSVJRU1RBVFVTX1BPUlQpOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssCisJCQkgIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLKSB8CisJCQkgIFNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCX0KKwltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisKKwlpZiAoaW50ZXJydXB0aWJsZSkKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKKwkJICAgIChkZXZfcHJpdi0+Zmlmb19xdWV1ZSwKKwkJICAgICAhdm13X2ZpZm9faXNfZnVsbChkZXZfcHJpdiwgYnl0ZXMpLCB0aW1lb3V0KTsKKwllbHNlCisJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dAorCQkgICAgKGRldl9wcml2LT5maWZvX3F1ZXVlLAorCQkgICAgICF2bXdfZmlmb19pc19mdWxsKGRldl9wcml2LCBieXRlcyksIHRpbWVvdXQpOworCisJaWYgKHVubGlrZWx5KHJldCA9PSAwKSkKKwkJcmV0ID0gLUVCVVNZOworCWVsc2UgaWYgKGxpa2VseShyZXQgPiAwKSkKKwkJcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldl9wcml2LT5maWZvX3F1ZXVlX3dhaXRlcnMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywKKwkJCSAgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0spICYKKwkJCSAgflNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCX0KKwltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp2bXdfZmlmb19yZXNlcnZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKQoreworCXN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSA9ICZkZXZfcHJpdi0+ZmlmbzsKKwlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCXVpbnQzMl90IG1heDsKKwl1aW50MzJfdCBtaW47CisJdWludDMyX3QgbmV4dF9jbWQ7CisJdWludDMyX3QgcmVzZXJ2ZWFibGUgPSBmaWZvX3N0YXRlLT5jYXBhYmlsaXRpZXMgJiBTVkdBX0ZJRk9fQ0FQX1JFU0VSVkU7CisJaW50IHJldDsKKworCWRvd25fd3JpdGUoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKwltYXggPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOworCW1pbiA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01JTik7CisJbmV4dF9jbWQgPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CisKKwlpZiAodW5saWtlbHkoYnl0ZXMgPj0gKG1heCAtIG1pbikpKQorCQlnb3RvIG91dF9lcnI7CisKKwlCVUdfT04oZmlmb19zdGF0ZS0+cmVzZXJ2ZWRfc2l6ZSAhPSAwKTsKKwlCVUdfT04oZmlmb19zdGF0ZS0+ZHluYW1pY19idWZmZXIgIT0gTlVMTCk7CisKKwlmaWZvX3N0YXRlLT5yZXNlcnZlZF9zaXplID0gYnl0ZXM7CisKKwl3aGlsZSAoMSkgeworCQl1aW50MzJfdCBzdG9wID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fU1RPUCk7CisJCWJvb2wgbmVlZF9ib3VuY2UgPSBmYWxzZTsKKwkJYm9vbCByZXNlcnZlX2luX3BsYWNlID0gZmFsc2U7CisKKwkJaWYgKG5leHRfY21kID49IHN0b3ApIHsKKwkJCWlmIChsaWtlbHkoKG5leHRfY21kICsgYnl0ZXMgPCBtYXggfHwKKwkJCQkgICAgKG5leHRfY21kICsgYnl0ZXMgPT0gbWF4ICYmIHN0b3AgPiBtaW4pKSkpCisJCQkJcmVzZXJ2ZV9pbl9wbGFjZSA9IHRydWU7CisKKwkJCWVsc2UgaWYgKHZtd19maWZvX2lzX2Z1bGwoZGV2X3ByaXYsIGJ5dGVzKSkgeworCQkJCXJldCA9IHZtd19maWZvX3dhaXQoZGV2X3ByaXYsIGJ5dGVzLAorCQkJCQkJICAgIGZhbHNlLCAzICogSFopOworCQkJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQkJCWdvdG8gb3V0X2VycjsKKwkJCX0gZWxzZQorCQkJCW5lZWRfYm91bmNlID0gdHJ1ZTsKKworCQl9IGVsc2UgeworCisJCQlpZiAobGlrZWx5KChuZXh0X2NtZCArIGJ5dGVzIDwgc3RvcCkpKQorCQkJCXJlc2VydmVfaW5fcGxhY2UgPSB0cnVlOworCQkJZWxzZSB7CisJCQkJcmV0ID0gdm13X2ZpZm9fd2FpdChkZXZfcHJpdiwgYnl0ZXMsCisJCQkJCQkgICAgZmFsc2UsIDMgKiBIWik7CisJCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCQkJZ290byBvdXRfZXJyOworCQkJfQorCQl9CisKKwkJaWYgKHJlc2VydmVfaW5fcGxhY2UpIHsKKwkJCWlmIChyZXNlcnZlYWJsZSB8fCBieXRlcyA8PSBzaXplb2YodWludDMyX3QpKSB7CisJCQkJZmlmb19zdGF0ZS0+dXNpbmdfYm91bmNlX2J1ZmZlciA9IGZhbHNlOworCisJCQkJaWYgKHJlc2VydmVhYmxlKQorCQkJCQlpb3dyaXRlMzIoYnl0ZXMsIGZpZm9fbWVtICsKKwkJCQkJCSAgU1ZHQV9GSUZPX1JFU0VSVkVEKTsKKwkJCQlyZXR1cm4gZmlmb19tZW0gKyAobmV4dF9jbWQgPj4gMik7CisJCQl9IGVsc2UgeworCQkJCW5lZWRfYm91bmNlID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCWlmIChuZWVkX2JvdW5jZSkgeworCQkJZmlmb19zdGF0ZS0+dXNpbmdfYm91bmNlX2J1ZmZlciA9IHRydWU7CisJCQlpZiAoYnl0ZXMgPCBmaWZvX3N0YXRlLT5zdGF0aWNfYnVmZmVyX3NpemUpCisJCQkJcmV0dXJuIGZpZm9fc3RhdGUtPnN0YXRpY19idWZmZXI7CisJCQllbHNlIHsKKwkJCQlmaWZvX3N0YXRlLT5keW5hbWljX2J1ZmZlciA9IHZtYWxsb2MoYnl0ZXMpOworCQkJCXJldHVybiBmaWZvX3N0YXRlLT5keW5hbWljX2J1ZmZlcjsKKwkJCX0KKwkJfQorCX0KK291dF9lcnI6CisJZmlmb19zdGF0ZS0+cmVzZXJ2ZWRfc2l6ZSA9IDA7CisJdXBfd3JpdGUoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdm13X2ZpZm9fcmVzX2NvcHkoc3RydWN0IHZtd19maWZvX3N0YXRlICpmaWZvX3N0YXRlLAorCQkJICAgICAgX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtLAorCQkJICAgICAgdWludDMyX3QgbmV4dF9jbWQsCisJCQkgICAgICB1aW50MzJfdCBtYXgsIHVpbnQzMl90IG1pbiwgdWludDMyX3QgYnl0ZXMpCit7CisJdWludDMyX3QgY2h1bmtfc2l6ZSA9IG1heCAtIG5leHRfY21kOworCXVpbnQzMl90IHJlc3Q7CisJdWludDMyX3QgKmJ1ZmZlciA9IChmaWZvX3N0YXRlLT5keW5hbWljX2J1ZmZlciAhPSBOVUxMKSA/CisJICAgIGZpZm9fc3RhdGUtPmR5bmFtaWNfYnVmZmVyIDogZmlmb19zdGF0ZS0+c3RhdGljX2J1ZmZlcjsKKworCWlmIChieXRlcyA8IGNodW5rX3NpemUpCisJCWNodW5rX3NpemUgPSBieXRlczsKKworCWlvd3JpdGUzMihieXRlcywgZmlmb19tZW0gKyBTVkdBX0ZJRk9fUkVTRVJWRUQpOworCW1iKCk7CisJbWVtY3B5X3RvaW8oZmlmb19tZW0gKyAobmV4dF9jbWQgPj4gMiksIGJ1ZmZlciwgY2h1bmtfc2l6ZSk7CisJcmVzdCA9IGJ5dGVzIC0gY2h1bmtfc2l6ZTsKKwlpZiAocmVzdCkKKwkJbWVtY3B5X3RvaW8oZmlmb19tZW0gKyAobWluID4+IDIpLCBidWZmZXIgKyAoY2h1bmtfc2l6ZSA+PiAyKSwKKwkJCSAgICByZXN0KTsKK30KKworc3RhdGljIHZvaWQgdm13X2ZpZm9fc2xvd19jb3B5KHN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSwKKwkJCSAgICAgICBfX2xlMzIgX19pb21lbSAqZmlmb19tZW0sCisJCQkgICAgICAgdWludDMyX3QgbmV4dF9jbWQsCisJCQkgICAgICAgdWludDMyX3QgbWF4LCB1aW50MzJfdCBtaW4sIHVpbnQzMl90IGJ5dGVzKQoreworCXVpbnQzMl90ICpidWZmZXIgPSAoZmlmb19zdGF0ZS0+ZHluYW1pY19idWZmZXIgIT0gTlVMTCkgPworCSAgICBmaWZvX3N0YXRlLT5keW5hbWljX2J1ZmZlciA6IGZpZm9fc3RhdGUtPnN0YXRpY19idWZmZXI7CisKKwl3aGlsZSAoYnl0ZXMgPiAwKSB7CisJCWlvd3JpdGUzMigqYnVmZmVyKyssIGZpZm9fbWVtICsgKG5leHRfY21kID4+IDIpKTsKKwkJbmV4dF9jbWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJaWYgKHVubGlrZWx5KG5leHRfY21kID09IG1heCkpCisJCQluZXh0X2NtZCA9IG1pbjsKKwkJbWIoKTsKKwkJaW93cml0ZTMyKG5leHRfY21kLCBmaWZvX21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CisJCW1iKCk7CisJCWJ5dGVzIC09IHNpemVvZih1aW50MzJfdCk7CisJfQorfQorCit2b2lkIHZtd19maWZvX2NvbW1pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBieXRlcykKK3sKKwlzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUgPSAmZGV2X3ByaXYtPmZpZm87CisJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKwl1aW50MzJfdCBuZXh0X2NtZCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKKwl1aW50MzJfdCBtYXggPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOworCXVpbnQzMl90IG1pbiA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01JTik7CisJYm9vbCByZXNlcnZlYWJsZSA9IGZpZm9fc3RhdGUtPmNhcGFiaWxpdGllcyAmIFNWR0FfRklGT19DQVBfUkVTRVJWRTsKKworCUJVR19PTigoYnl0ZXMgJiAzKSAhPSAwKTsKKwlCVUdfT04oYnl0ZXMgPiBmaWZvX3N0YXRlLT5yZXNlcnZlZF9zaXplKTsKKworCWZpZm9fc3RhdGUtPnJlc2VydmVkX3NpemUgPSAwOworCisJaWYgKGZpZm9fc3RhdGUtPnVzaW5nX2JvdW5jZV9idWZmZXIpIHsKKwkJaWYgKHJlc2VydmVhYmxlKQorCQkJdm13X2ZpZm9fcmVzX2NvcHkoZmlmb19zdGF0ZSwgZmlmb19tZW0sCisJCQkJCSAgbmV4dF9jbWQsIG1heCwgbWluLCBieXRlcyk7CisJCWVsc2UKKwkJCXZtd19maWZvX3Nsb3dfY29weShmaWZvX3N0YXRlLCBmaWZvX21lbSwKKwkJCQkJICAgbmV4dF9jbWQsIG1heCwgbWluLCBieXRlcyk7CisKKwkJaWYgKGZpZm9fc3RhdGUtPmR5bmFtaWNfYnVmZmVyKSB7CisJCQl2ZnJlZShmaWZvX3N0YXRlLT5keW5hbWljX2J1ZmZlcik7CisJCQlmaWZvX3N0YXRlLT5keW5hbWljX2J1ZmZlciA9IE5VTEw7CisJCX0KKworCX0KKworCWlmIChmaWZvX3N0YXRlLT51c2luZ19ib3VuY2VfYnVmZmVyIHx8IHJlc2VydmVhYmxlKSB7CisJCW5leHRfY21kICs9IGJ5dGVzOworCQlpZiAobmV4dF9jbWQgPj0gbWF4KQorCQkJbmV4dF9jbWQgLT0gbWF4IC0gbWluOworCQltYigpOworCQlpb3dyaXRlMzIobmV4dF9jbWQsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKKwl9CisKKwlpZiAocmVzZXJ2ZWFibGUpCisJCWlvd3JpdGUzMigwLCBmaWZvX21lbSArIFNWR0FfRklGT19SRVNFUlZFRCk7CisJbWIoKTsKKwl2bXdfZmlmb19waW5nX2hvc3QoZGV2X3ByaXYsIFNWR0FfU1lOQ19HRU5FUklDKTsKKwl1cF93cml0ZSgmZmlmb19zdGF0ZS0+cndzZW0pOworfQorCitpbnQgdm13X2ZpZm9fc2VuZF9mZW5jZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCAqc2VxdWVuY2UpCit7CisJc3RydWN0IHZtd19maWZvX3N0YXRlICpmaWZvX3N0YXRlID0gJmRldl9wcml2LT5maWZvOworCXN0cnVjdCBzdmdhX2ZpZm9fY21kX2ZlbmNlICpjbWRfZmVuY2U7CisJdm9pZCAqZm07CisJaW50IHJldCA9IDA7CisJdWludDMyX3QgYnl0ZXMgPSBzaXplb2YoX19sZTMyKSArIHNpemVvZigqY21kX2ZlbmNlKTsKKworCWZtID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgYnl0ZXMpOworCWlmICh1bmxpa2VseShmbSA9PSBOVUxMKSkgeworCQlkb3duX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJCSpzZXF1ZW5jZSA9IGRldl9wcml2LT5mZW5jZV9zZXE7CisJCXVwX3dyaXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisJCXJldCA9IC1FTk9NRU07CisJCSh2b2lkKXZtd19mYWxsYmFja193YWl0KGRldl9wcml2LCBmYWxzZSwgdHJ1ZSwgKnNlcXVlbmNlLAorCQkJCQlmYWxzZSwgMypIWik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlkbyB7CisJCSpzZXF1ZW5jZSA9IGRldl9wcml2LT5mZW5jZV9zZXErKzsKKwl9IHdoaWxlICgqc2VxdWVuY2UgPT0gMCk7CisKKwlpZiAoIShmaWZvX3N0YXRlLT5jYXBhYmlsaXRpZXMgJiBTVkdBX0ZJRk9fQ0FQX0ZFTkNFKSkgeworCisJCS8qCisJCSAqIERvbid0IHJlcXVlc3QgaGFyZHdhcmUgdG8gc2VuZCBhIGZlbmNlLiBUaGUKKwkJICogd2FpdGluZyBjb2RlIGluIHZtd2dmeF9pcnEuYyB3aWxsIGVtdWxhdGUgdGhpcy4KKwkJICovCisKKwkJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJKihfX2xlMzIgKikgZm0gPSBjcHVfdG9fbGUzMihTVkdBX0NNRF9GRU5DRSk7CisJY21kX2ZlbmNlID0gKHN0cnVjdCBzdmdhX2ZpZm9fY21kX2ZlbmNlICopCisJICAgICgodW5zaWduZWQgbG9uZylmbSArIHNpemVvZihfX2xlMzIpKTsKKworCWlvd3JpdGUzMigqc2VxdWVuY2UsICZjbWRfZmVuY2UtPmZlbmNlKTsKKwlmaWZvX3N0YXRlLT5sYXN0X2J1ZmZlcl9hZGQgPSB0cnVlOworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgYnl0ZXMpOworCWZpZm9fc3RhdGUtPmxhc3RfYnVmZmVyX2FkZCA9IGZhbHNlOworCitvdXRfZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogTWFwIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBGSUZPIHJlYWQtb25seSB0byB1c2VyLXNwYWNlLgorICovCisKK3N0YXRpYyBpbnQgdm13X2ZpZm9fdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3M7CisKKwlpZiAoYWRkcmVzcyAhPSB2bWEtPnZtX3N0YXJ0KQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJcmV0ID0gdm1faW5zZXJ0X3Bmbih2bWEsIGFkZHJlc3MsIHZtYS0+dm1fcGdvZmYpOworCWlmIChsaWtlbHkocmV0ID09IC1FQlVTWSB8fCByZXQgPT0gMCkpCisJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CisJZWxzZSBpZiAocmV0ID09IC1FTk9NRU0pCisJCXJldHVybiBWTV9GQVVMVF9PT007CisKKwlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtd19maWZvX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSB2bXdfZmlmb192bV9mYXVsdCwKKwkub3BlbiA9IE5VTEwsCisJLmNsb3NlID0gTlVMTAorfTsKKworaW50IHZtd19maWZvX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2OworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CisKKwlmaWxlX3ByaXYgPSAoc3RydWN0IGRybV9maWxlICopZmlscC0+cHJpdmF0ZV9kYXRhOworCWRldl9wcml2ID0gdm13X3ByaXYoZmlsZV9wcml2LT5taW5vci0+ZGV2KTsKKworCWlmICh2bWEtPnZtX3Bnb2ZmICE9IChkZXZfcHJpdi0+bW1pb19zdGFydCA+PiBQQUdFX1NISUZUKSB8fAorCSAgICAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAhPSBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdm1hLT52bV9mbGFncyAmPSB+KFZNX1dSSVRFIHwgVk1fTUFZV1JJVEUpOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fU0hBUkVEOworCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHR0bV9pb19wcm90KFRUTV9QTF9GTEFHX1VOQ0FDSEVELAorCQkJCQl2bWEtPnZtX3BhZ2VfcHJvdCk7CisJdm1hLT52bV9vcHMgPSAmdm13X2ZpZm9fdm1fb3BzOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZ21yLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9nbXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjg5MDhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZ21yLmMKQEAgLTAsMCArMSwyMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJ0dG0vdHRtX2JvX2RyaXZlci5oIgorCisvKioKKyAqIEZJWE1FOiBBZGp1c3QgdG8gdGhlIHR0bSBsb3dtZW0gLyBoaWdobWVtIHN0b3JhZ2UgdG8gbWluaW1pemUKKyAqIHRoZSBudW1iZXIgb2YgdXNlZCBkZXNjcmlwdG9ycy4KKyAqLworCitzdGF0aWMgaW50IHZtd19nbXJfYnVpbGRfZGVzY3JpcHRvcnMoc3RydWN0IGxpc3RfaGVhZCAqZGVzY19wYWdlcywKKwkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlc1tdLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UsICpuZXh0OworCXN0cnVjdCBzdmdhX2d1ZXN0X21lbV9kZXNjcmlwdG9yICpwYWdlX3ZpcnR1YWwgPSBOVUxMOworCXN0cnVjdCBzdmdhX2d1ZXN0X21lbV9kZXNjcmlwdG9yICpkZXNjX3ZpcnR1YWwgPSBOVUxMOworCXVuc2lnbmVkIGludCBkZXNjX3Blcl9wYWdlOworCXVuc2lnbmVkIGxvbmcgcHJldl9wZm47CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IHJldDsKKworCWRlc2NfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLworCSAgICBzaXplb2Yoc3RydWN0IHN2Z2FfZ3Vlc3RfbWVtX2Rlc2NyaXB0b3IpIC0gMTsKKworCXdoaWxlIChsaWtlbHkobnVtX3BhZ2VzICE9IDApKSB7CisJCXBhZ2UgPSBhbGxvY19wYWdlKF9fR0ZQX0hJR0hNRU0pOworCQlpZiAodW5saWtlbHkocGFnZSA9PSBOVUxMKSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgZGVzY19wYWdlcyk7CisKKwkJLyoKKwkJICogUG9pbnQgcHJldmlvdXMgcGFnZSB0ZXJtaW5hdGluZyBkZXNjcmlwdG9yIHRvIHRoaXMKKwkJICogcGFnZSBiZWZvcmUgdW5tYXBwaW5nIGl0LgorCQkgKi8KKworCQlpZiAobGlrZWx5KHBhZ2VfdmlydHVhbCAhPSBOVUxMKSkgeworCQkJZGVzY192aXJ0dWFsLT5wcG4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwkJCWt1bm1hcF9hdG9taWMocGFnZV92aXJ0dWFsLCBLTV9VU0VSMCk7CisJCX0KKworCQlwYWdlX3ZpcnR1YWwgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCWRlc2NfdmlydHVhbCA9IHBhZ2VfdmlydHVhbCAtIDE7CisJCXByZXZfcGZuID0gfigwVUwpOworCisJCXdoaWxlIChsaWtlbHkobnVtX3BhZ2VzICE9IDApKSB7CisJCQlwZm4gPSBwYWdlX3RvX3BmbigqcGFnZXMpOworCisJCQlpZiAocGZuICE9IHByZXZfcGZuICsgMSkgeworCisJCQkJaWYgKGRlc2NfdmlydHVhbCAtIHBhZ2VfdmlydHVhbCA9PQorCQkJCSAgICBkZXNjX3Blcl9wYWdlIC0gMSkKKwkJCQkJYnJlYWs7CisKKwkJCQkoKytkZXNjX3ZpcnR1YWwpLT5wcG4gPSBjcHVfdG9fbGUzMihwZm4pOworCQkJCWRlc2NfdmlydHVhbC0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMzIoMSk7CisJCQl9IGVsc2UgeworCQkJCXVpbnQzMl90IHRtcCA9CisJCQkJICAgIGxlMzJfdG9fY3B1KGRlc2NfdmlydHVhbC0+bnVtX3BhZ2VzKTsKKwkJCQlkZXNjX3ZpcnR1YWwtPm51bV9wYWdlcyA9IGNwdV90b19sZTMyKHRtcCArIDEpOworCQkJfQorCQkJcHJldl9wZm4gPSBwZm47CisJCQktLW51bV9wYWdlczsKKwkJCSsrcGFnZXM7CisJCX0KKworCQkoKytkZXNjX3ZpcnR1YWwpLT5wcG4gPSBjcHVfdG9fbGUzMigwKTsKKwkJZGVzY192aXJ0dWFsLT5udW1fcGFnZXMgPSBjcHVfdG9fbGUzMigwKTsKKwl9CisKKwlpZiAobGlrZWx5KHBhZ2VfdmlydHVhbCAhPSBOVUxMKSkKKwkJa3VubWFwX2F0b21pYyhwYWdlX3ZpcnR1YWwsIEtNX1VTRVIwKTsKKworCXJldHVybiAwOworb3V0X2VycjoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgbmV4dCwgZGVzY19wYWdlcywgbHJ1KSB7CisJCWxpc3RfZGVsX2luaXQoJnBhZ2UtPmxydSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm13X2dtcl9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCBsaXN0X2hlYWQgKmRlc2NfcGFnZXMpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIG5leHQsIGRlc2NfcGFnZXMsIGxydSkgeworCQlsaXN0X2RlbF9pbml0KCZwYWdlLT5scnUpOworCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZtd19nbXJfZmlyZV9kZXNjcmlwdG9ycyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgaW50IGdtcl9pZCwgc3RydWN0IGxpc3RfaGVhZCAqZGVzY19wYWdlcykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KGRlc2NfcGFnZXMpKSkKKwkJcmV0dXJuOworCisJcGFnZSA9IGxpc3RfZW50cnkoZGVzY19wYWdlcy0+bmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCisJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19HTVJfSUQsIGdtcl9pZCk7CisJd21iKCk7CisJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19HTVJfREVTQ1JJUFRPUiwgcGFnZV90b19wZm4ocGFnZSkpOworCW1iKCk7CisKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisKK30KKworLyoqCisgKiBGSVhNRTogQWRqdXN0IHRvIHRoZSB0dG0gbG93bWVtIC8gaGlnaG1lbSBzdG9yYWdlIHRvIG1pbmltaXplCisgKiB0aGUgbnVtYmVyIG9mIHVzZWQgZGVzY3JpcHRvcnMuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13X2dtcl9jb3VudF9kZXNjcmlwdG9ycyhzdHJ1Y3QgcGFnZSAqcGFnZXNbXSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCXVuc2lnbmVkIGxvbmcgcHJldl9wZm4gPSB+KDBVTCk7CisJdW5zaWduZWQgbG9uZyBwZm47CisJdW5zaWduZWQgbG9uZyBkZXNjcmlwdG9ycyA9IDA7CisKKwl3aGlsZSAobnVtX3BhZ2VzLS0pIHsKKwkJcGZuID0gcGFnZV90b19wZm4oKnBhZ2VzKyspOworCQlpZiAocHJldl9wZm4gKyAxICE9IHBmbikKKwkJCSsrZGVzY3JpcHRvcnM7CisJCXByZXZfcGZuID0gcGZuOworCX0KKworCXJldHVybiBkZXNjcmlwdG9yczsKK30KKworaW50IHZtd19nbXJfYmluZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3QgdHRtX3R0ICp0dG0gPSBiby0+dHRtOworCXVuc2lnbmVkIGxvbmcgZGVzY3JpcHRvcnM7CisJaW50IHJldDsKKwl1aW50MzJfdCBpZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlc2NfcGFnZXM7CisKKwlpZiAoIShkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfR01SKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB0dG1fdHRfcG9wdWxhdGUodHRtKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJZGVzY3JpcHRvcnMgPSB2bXdfZ21yX2NvdW50X2Rlc2NyaXB0b3JzKHR0bS0+cGFnZXMsIHR0bS0+bnVtX3BhZ2VzKTsKKwlpZiAodW5saWtlbHkoZGVzY3JpcHRvcnMgPiBkZXZfcHJpdi0+bWF4X2dtcl9kZXNjcmlwdG9ycykpCisJCXJldHVybiAtRUlOVkFMOworCisJSU5JVF9MSVNUX0hFQUQoJmRlc2NfcGFnZXMpOworCXJldCA9IHZtd19nbXJfYnVpbGRfZGVzY3JpcHRvcnMoJmRlc2NfcGFnZXMsIHR0bS0+cGFnZXMsCisJCQkJCXR0bS0+bnVtX3BhZ2VzKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdm13X2dtcl9pZF9hbGxvYyhkZXZfcHJpdiwgJmlkKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9ub19pZDsKKworCXZtd19nbXJfZmlyZV9kZXNjcmlwdG9ycyhkZXZfcHJpdiwgaWQsICZkZXNjX3BhZ2VzKTsKKwl2bXdfZ21yX2ZyZWVfZGVzY3JpcHRvcnMoJmRlc2NfcGFnZXMpOworCXZtd19kbWFidWZfc2V0X2dtcihibywgaWQpOworCXJldHVybiAwOworCitvdXRfbm9faWQ6CisJdm13X2dtcl9mcmVlX2Rlc2NyaXB0b3JzKCZkZXNjX3BhZ2VzKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHZtd19nbXJfdW5iaW5kKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBnbXJfaWQpCit7CisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0dNUl9JRCwgZ21yX2lkKTsKKwl3bWIoKTsKKwl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0dNUl9ERVNDUklQVE9SLCAwKTsKKwltYigpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTZhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorI2luY2x1ZGUgInZtd2dmeF9kcm0uaCIKKworaW50IHZtd19nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJc3RydWN0IGRybV92bXdfZ2V0cGFyYW1fYXJnICpwYXJhbSA9CisJICAgIChzdHJ1Y3QgZHJtX3Ztd19nZXRwYXJhbV9hcmcgKilkYXRhOworCisJc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsKKwljYXNlIERSTV9WTVdfUEFSQU1fTlVNX1NUUkVBTVM6CisJCXBhcmFtLT52YWx1ZSA9IHZtd19vdmVybGF5X251bV9vdmVybGF5cyhkZXZfcHJpdik7CisJCWJyZWFrOworCWNhc2UgRFJNX1ZNV19QQVJBTV9OVU1fRlJFRV9TVFJFQU1TOgorCQlwYXJhbS0+dmFsdWUgPSB2bXdfb3ZlcmxheV9udW1fZnJlZV9vdmVybGF5cyhkZXZfcHJpdik7CisJCWJyZWFrOworCWNhc2UgRFJNX1ZNV19QQVJBTV8zRDoKKwkJcGFyYW0tPnZhbHVlID0gZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQXzNEID8gMSA6IDA7CisJCWJyZWFrOworCWNhc2UgRFJNX1ZNV19QQVJBTV9GSUZPX09GRlNFVDoKKwkJcGFyYW0tPnZhbHVlID0gZGV2X3ByaXYtPm1taW9fc3RhcnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiSWxsZWdhbCB2bXdnZnggZ2V0IHBhcmFtIHJlcXVlc3Q6ICVkXG4iLAorCQkJICBwYXJhbS0+cGFyYW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19maWZvX2RlYnVnX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJc3RydWN0IHZtd19maWZvX3N0YXRlICpmaWZvX3N0YXRlID0gJmRldl9wcml2LT5maWZvOworCXN0cnVjdCBkcm1fdm13X2ZpZm9fZGVidWdfYXJnICphcmcgPQorCSAgICAoc3RydWN0IGRybV92bXdfZmlmb19kZWJ1Z19hcmcgKilkYXRhOworCV9fbGUzMiBfX3VzZXIgKmJ1ZmZlciA9IChfX2xlMzIgX191c2VyICopCisJICAgICh1bnNpZ25lZCBsb25nKWFyZy0+ZGVidWdfYnVmZmVyOworCisJaWYgKHVubGlrZWx5KGZpZm9fc3RhdGUtPmxhc3RfYnVmZmVyID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmctPmRlYnVnX2J1ZmZlcl9zaXplIDwgZmlmb19zdGF0ZS0+bGFzdF9kYXRhX3NpemUpIHsKKwkJYXJnLT51c2VkX3NpemUgPSBhcmctPmRlYnVnX2J1ZmZlcl9zaXplOworCQlhcmctPmRpZF9ub3RfZml0ID0gMTsKKwl9IGVsc2UgeworCQlhcmctPnVzZWRfc2l6ZSA9IGZpZm9fc3RhdGUtPmxhc3RfZGF0YV9zaXplOworCQlhcmctPmRpZF9ub3RfZml0ID0gMDsKKwl9CisJcmV0dXJuIGNvcHlfdG9fdXNlcihidWZmZXIsIGZpZm9fc3RhdGUtPmxhc3RfYnVmZmVyLCBhcmctPnVzZWRfc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDA4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorCisjZGVmaW5lIFZNV19GRU5DRV9XUkFQICgxIDw8IDI0KQorCitpcnFyZXR1cm5fdCB2bXdfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKilhcmc7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJdWludDMyX3Qgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXJxX2xvY2spOworCXN0YXR1cyA9IGlubChkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSVJRU1RBVFVTX1BPUlQpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+aXJxX2xvY2spOworCisJaWYgKHN0YXR1cyAmIFNWR0FfSVJRRkxBR19BTllfRkVOQ0UpCisJCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOworCWlmIChzdGF0dXMgJiBTVkdBX0lSUUZMQUdfRklGT19QUk9HUkVTUykKKwkJd2FrZV91cF9hbGwoJmRldl9wcml2LT5maWZvX3F1ZXVlKTsKKworCWlmIChsaWtlbHkoc3RhdHVzKSkgeworCQlvdXRsKHN0YXR1cywgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIGJvb2wgdm13X2ZpZm9faWRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBzZXF1ZW5jZSkKK3sKKwl1aW50MzJfdCBidXN5OworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlidXN5ID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKworCXJldHVybiAoYnVzeSA9PSAwKTsKK30KKworCitib29sIHZtd19mZW5jZV9zaWduYWxlZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJdWludDMyX3Qgc2VxdWVuY2UpCit7CisJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKwlzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGU7CisJYm9vbCByZXQ7CisKKwlpZiAobGlrZWx5KGRldl9wcml2LT5sYXN0X3JlYWRfc2VxdWVuY2UgLSBzZXF1ZW5jZSA8IFZNV19GRU5DRV9XUkFQKSkKKwkJcmV0dXJuIHRydWU7CisKKwlkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcXVlbmNlID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0UpOworCWlmIChsaWtlbHkoZGV2X3ByaXYtPmxhc3RfcmVhZF9zZXF1ZW5jZSAtIHNlcXVlbmNlIDwgVk1XX0ZFTkNFX1dSQVApKQorCQlyZXR1cm4gdHJ1ZTsKKworCWZpZm9fc3RhdGUgPSAmZGV2X3ByaXYtPmZpZm87CisJaWYgKCEoZmlmb19zdGF0ZS0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZPX0NBUF9GRU5DRSkgJiYKKwkgICAgdm13X2ZpZm9faWRsZShkZXZfcHJpdiwgc2VxdWVuY2UpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qKgorCSAqIEJlbG93IGlzIHRvIHNpZ25hbCBzdGFsZSBmZW5jZXMgdGhhdCBoYXZlIHdyYXBwZWQuCisJICogRmlyc3QsIGJsb2NrIGZlbmNlIHN1Ym1pc3Npb24uCisJICovCisKKwlkb3duX3JlYWQoJmZpZm9fc3RhdGUtPnJ3c2VtKTsKKworCS8qKgorCSAqIFRoZW4gY2hlY2sgaWYgdGhlIHNlcXVlbmNlIGlzIGhpZ2hlciB0aGFuIHdoYXQgd2UndmUgYWN0dWFsbHkKKwkgKiBlbWl0dGVkLiBUaGVuIHRoZSBmZW5jZSBpcyBzdGFsZSBhbmQgc2lnbmFsZWQuCisJICovCisKKwlyZXQgPSAoKGRldl9wcml2LT5mZW5jZV9zZXEgLSBzZXF1ZW5jZSkgPiBWTVdfRkVOQ0VfV1JBUCk7CisJdXBfcmVhZCgmZmlmb19zdGF0ZS0+cndzZW0pOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHZtd19mYWxsYmFja193YWl0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgICAgIGJvb2wgbGF6eSwKKwkJICAgICAgYm9vbCBmaWZvX2lkbGUsCisJCSAgICAgIHVpbnQzMl90IHNlcXVlbmNlLAorCQkgICAgICBib29sIGludGVycnVwdGlibGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUgPSAmZGV2X3ByaXYtPmZpZm87CisKKwl1aW50MzJfdCBjb3VudCA9IDA7CisJdWludDMyX3Qgc2lnbmFsX3NlcTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsgdGltZW91dDsKKwlib29sICgqd2FpdF9jb25kaXRpb24pKHN0cnVjdCB2bXdfcHJpdmF0ZSAqLCB1aW50MzJfdCk7CisJREVGSU5FX1dBSVQoX193YWl0KTsKKworCXdhaXRfY29uZGl0aW9uID0gKGZpZm9faWRsZSkgPyAmdm13X2ZpZm9faWRsZSA6CisJCSZ2bXdfZmVuY2Vfc2lnbmFsZWQ7CisKKwkvKioKKwkgKiBCbG9jayBjb21tYW5kIHN1Ym1pc3Npb24gd2hpbGUgd2FpdGluZyBmb3IgaWRsZS4KKwkgKi8KKworCWlmIChmaWZvX2lkbGUpCisJCWRvd25fcmVhZCgmZmlmb19zdGF0ZS0+cndzZW0pOworCXNpZ25hbF9zZXEgPSBkZXZfcHJpdi0+ZmVuY2Vfc2VxOworCXJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCXByZXBhcmVfdG9fd2FpdCgmZGV2X3ByaXYtPmZlbmNlX3F1ZXVlLCAmX193YWl0LAorCQkJCShpbnRlcnJ1cHRpYmxlKSA/CisJCQkJVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAod2FpdF9jb25kaXRpb24oZGV2X3ByaXYsIHNlcXVlbmNlKSkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmRfamlmZmllcykpIHsKKwkJCURSTV9FUlJPUigiU1ZHQSBkZXZpY2UgbG9ja3VwLlxuIik7CisJCQlicmVhazsKKwkJfQorCQlpZiAobGF6eSkKKwkJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCWVsc2UgaWYgKCgrK2NvdW50ICYgMHgwRikgPT0gMCkgeworCQkJLyoqCisJCQkgKiBGSVhNRTogVXNlIHNjaGVkdWxlX2hyX3RpbWVvdXQgaGVyZSBmb3IKKwkJCSAqIG5ld2VyIGtlcm5lbHMgYW5kIGxvd2VyIENQVSB1dGlsaXphdGlvbi4KKwkJCSAqLworCisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlzY2hlZHVsZSgpOworCQkJX19zZXRfY3VycmVudF9zdGF0ZSgoaW50ZXJydXB0aWJsZSkgPworCQkJCQkgICAgVEFTS19JTlRFUlJVUFRJQkxFIDoKKwkJCQkJICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJfQorCQlpZiAoaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKwl9CisJZmluaXNoX3dhaXQoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSwgJl9fd2FpdCk7CisJaWYgKHJldCA9PSAwICYmIGZpZm9faWRsZSkgeworCQlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCQlpb3dyaXRlMzIoc2lnbmFsX3NlcSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0UpOworCX0KKwl3YWtlX3VwX2FsbCgmZGV2X3ByaXYtPmZlbmNlX3F1ZXVlKTsKKwlpZiAoZmlmb19pZGxlKQorCQl1cF9yZWFkKCZmaWZvX3N0YXRlLT5yd3NlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X3dhaXRfZmVuY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgYm9vbCBsYXp5LCB1aW50MzJfdCBzZXF1ZW5jZSwKKwkJICAgYm9vbCBpbnRlcnJ1cHRpYmxlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IHZtd19maWZvX3N0YXRlICpmaWZvID0gJmRldl9wcml2LT5maWZvOworCisJaWYgKGxpa2VseShkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcXVlbmNlIC0gc2VxdWVuY2UgPCBWTVdfRkVOQ0VfV1JBUCkpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSh2bXdfZmVuY2Vfc2lnbmFsZWQoZGV2X3ByaXYsIHNlcXVlbmNlKSkpCisJCXJldHVybiAwOworCisJdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBTVkdBX1NZTkNfR0VORVJJQyk7CisKKwlpZiAoIShmaWZvLT5jYXBhYmlsaXRpZXMgJiBTVkdBX0ZJRk9fQ0FQX0ZFTkNFKSkKKwkJcmV0dXJuIHZtd19mYWxsYmFja193YWl0KGRldl9wcml2LCBsYXp5LCB0cnVlLCBzZXF1ZW5jZSwKKwkJCQkJIGludGVycnVwdGlibGUsIHRpbWVvdXQpOworCisJaWYgKCEoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0lSUU1BU0spKQorCQlyZXR1cm4gdm13X2ZhbGxiYWNrX3dhaXQoZGV2X3ByaXYsIGxhenksIGZhbHNlLCBzZXF1ZW5jZSwKKwkJCQkJIGludGVycnVwdGlibGUsIHRpbWVvdXQpOworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmRldl9wcml2LT5mZW5jZV9xdWV1ZV93YWl0ZXJzKSA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKKwkJb3V0bChTVkdBX0lSUUZMQUdfQU5ZX0ZFTkNFLAorCQkgICAgIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JUlFTVEFUVVNfUE9SVCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywKKwkJCSAgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0spIHwKKwkJCSAgU1ZHQV9JUlFGTEFHX0FOWV9GRU5DRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCisJaWYgKGludGVycnVwdGlibGUpCisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CisJCSAgICAoZGV2X3ByaXYtPmZlbmNlX3F1ZXVlLAorCQkgICAgIHZtd19mZW5jZV9zaWduYWxlZChkZXZfcHJpdiwgc2VxdWVuY2UpLAorCQkgICAgIHRpbWVvdXQpOworCWVsc2UKKwkJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0CisJCSAgICAoZGV2X3ByaXYtPmZlbmNlX3F1ZXVlLAorCQkgICAgIHZtd19mZW5jZV9zaWduYWxlZChkZXZfcHJpdiwgc2VxdWVuY2UpLAorCQkgICAgIHRpbWVvdXQpOworCisJaWYgKHVubGlrZWx5KHJldCA9PSAwKSkKKwkJcmV0ID0gLUVCVVNZOworCWVsc2UgaWYgKGxpa2VseShyZXQgPiAwKSkKKwkJcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldl9wcml2LT5mZW5jZV9xdWV1ZV93YWl0ZXJzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssCisJCQkgIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLKSAmCisJCQkgIH5TVkdBX0lSUUZMQUdfQU5ZX0ZFTkNFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCX0KKwltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHZtd19pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOworCXVpbnQzMl90IHN0YXR1czsKKworCWlmICghKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9JUlFNQVNLKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5pcnFfbG9jayk7CisJc3RhdHVzID0gaW5sKGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JUlFTVEFUVVNfUE9SVCk7CisJb3V0bChzdGF0dXMsIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JUlFTVEFUVVNfUE9SVCk7Cit9CisKK2ludCB2bXdfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdm13X2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlpZiAoIShkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfSVJRTUFTSykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCAwKTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisKKwlzdGF0dXMgPSBpbmwoZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKKwlvdXRsKHN0YXR1cywgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKK30KKworI2RlZmluZSBWTVdfRkVOQ0VfV0FJVF9USU1FT1VUIDMqSFo7CisKK2ludCB2bXdfZmVuY2Vfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fdm13X2ZlbmNlX3dhaXRfYXJnICphcmcgPQorCSAgICAoc3RydWN0IGRybV92bXdfZmVuY2Vfd2FpdF9hcmcgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCWlmICghYXJnLT5jb29raWVfdmFsaWQpIHsKKwkJYXJnLT5jb29raWVfdmFsaWQgPSAxOworCQlhcmctPmtlcm5lbF9jb29raWUgPSBqaWZmaWVzICsgVk1XX0ZFTkNFX1dBSVRfVElNRU9VVDsKKwl9CisKKwl0aW1lb3V0ID0gamlmZmllczsKKwlpZiAodGltZV9hZnRlcl9lcSh0aW1lb3V0LCAodW5zaWduZWQgbG9uZylhcmctPmtlcm5lbF9jb29raWUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJdGltZW91dCA9ICh1bnNpZ25lZCBsb25nKWFyZy0+a2VybmVsX2Nvb2tpZSAtIHRpbWVvdXQ7CisJcmV0dXJuIHZtd193YWl0X2ZlbmNlKHZtd19wcml2KGRldiksIHRydWUsIGFyZy0+c2VxdWVuY2UsIHRydWUsIHRpbWVvdXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWFmNzZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTAsMCArMSw4NzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidm13Z2Z4X2ttcy5oIgorCisvKiBNaWdodCBuZWVkIGEgaHJ0aW1lciBoZXJlPyAqLworI2RlZmluZSBWTVdHRlhfUFJFU0VOVF9SQVRFICgoSFogLyA2MCA+IDApID8gSFogLyA2MCA6IDEpCisKKwordm9pZCB2bXdfZGlzcGxheV91bml0X2NsZWFudXAoc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1KQoreworCWlmIChkdS0+Y3Vyc29yX3N1cmZhY2UpCisJCXZtd19zdXJmYWNlX3VucmVmZXJlbmNlKCZkdS0+Y3Vyc29yX3N1cmZhY2UpOworCWlmIChkdS0+Y3Vyc29yX2RtYWJ1ZikKKwkJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmZHUtPmN1cnNvcl9kbWFidWYpOworCWRybV9jcnRjX2NsZWFudXAoJmR1LT5jcnRjKTsKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkdS0+ZW5jb2Rlcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZkdS0+Y29ubmVjdG9yKTsKK30KKworLyoKKyAqIERpc3BsYXkgVW5pdCBDdXJzb3IgZnVuY3Rpb25zCisgKi8KKworaW50IHZtd19jdXJzb3JfdXBkYXRlX2ltYWdlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgdTMyICppbWFnZSwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAorCQkJICAgIHUzMiBob3RzcG90WCwgdTMyIGhvdHNwb3RZKQoreworCXN0cnVjdCB7CisJCXUzMiBjbWQ7CisJCVNWR0FGaWZvQ21kRGVmaW5lQWxwaGFDdXJzb3IgY3Vyc29yOworCX0gKmNtZDsKKwl1MzIgaW1hZ2Vfc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsKKwl1MzIgY21kX3NpemUgPSBzaXplb2YoKmNtZCkgKyBpbWFnZV9zaXplOworCisJaWYgKCFpbWFnZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBjbWRfc2l6ZSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZpZm8gcmVzZXJ2ZSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKworCW1lbWNweSgmY21kWzFdLCBpbWFnZSwgaW1hZ2Vfc2l6ZSk7CisKKwljbWQtPmNtZCA9IGNwdV90b19sZTMyKFNWR0FfQ01EX0RFRklORV9BTFBIQV9DVVJTT1IpOworCWNtZC0+Y3Vyc29yLmlkID0gY3B1X3RvX2xlMzIoMCk7CisJY21kLT5jdXJzb3Iud2lkdGggPSBjcHVfdG9fbGUzMih3aWR0aCk7CisJY21kLT5jdXJzb3IuaGVpZ2h0ID0gY3B1X3RvX2xlMzIoaGVpZ2h0KTsKKwljbWQtPmN1cnNvci5ob3RzcG90WCA9IGNwdV90b19sZTMyKGhvdHNwb3RYKTsKKwljbWQtPmN1cnNvci5ob3RzcG90WSA9IGNwdV90b19sZTMyKGhvdHNwb3RZKTsKKworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgY21kX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdm13X2N1cnNvcl91cGRhdGVfcG9zaXRpb24oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQlib29sIHNob3csIGludCB4LCBpbnQgeSkKK3sKKwlfX2xlMzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCXVpbnQzMl90IGNvdW50OworCisJaW93cml0ZTMyKHNob3cgPyAxIDogMCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX09OKTsKKwlpb3dyaXRlMzIoeCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX1gpOworCWlvd3JpdGUzMih5LCBmaWZvX21lbSArIFNWR0FfRklGT19DVVJTT1JfWSk7CisJY291bnQgPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19DVVJTT1JfQ09VTlQpOworCWlvd3JpdGUzMigrK2NvdW50LCBmaWZvX21lbSArIFNWR0FfRklGT19DVVJTT1JfQ09VTlQpOworfQorCitpbnQgdm13X2R1X2NydGNfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihjcnRjLT5kZXYpOworCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOworCXN0cnVjdCB2bXdfZGlzcGxheV91bml0ICpkdSA9IHZtd19jcnRjX3RvX2R1KGNydGMpOworCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3VyZmFjZSA9IE5VTEw7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpkbWFidWYgPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoaGFuZGxlKSB7CisJCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgdGZpbGUsCisJCQkJCQkgICAgIGhhbmRsZSwgJnN1cmZhY2UpOworCQlpZiAoIXJldCkgeworCQkJaWYgKCFzdXJmYWNlLT5zbm9vcGVyLmltYWdlKSB7CisJCQkJRFJNX0VSUk9SKCJzdXJmYWNlIG5vdCBzdWl0YWJsZSBmb3IgY3Vyc29yXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldCA9IHZtd191c2VyX2RtYWJ1Zl9sb29rdXAodGZpbGUsCisJCQkJCQkgICAgIGhhbmRsZSwgJmRtYWJ1Zik7CisJCQlpZiAocmV0KSB7CisJCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBzdXJmYWNlIG9yIGRtYWJ1ZjogJWlcbiIsIHJldCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisKKwkvKiB0YWtlZG93biBvbGQgY3Vyc29yICovCisJaWYgKGR1LT5jdXJzb3Jfc3VyZmFjZSkgeworCQlkdS0+Y3Vyc29yX3N1cmZhY2UtPnNub29wZXIuY3J0YyA9IE5VTEw7CisJCXZtd19zdXJmYWNlX3VucmVmZXJlbmNlKCZkdS0+Y3Vyc29yX3N1cmZhY2UpOworCX0KKwlpZiAoZHUtPmN1cnNvcl9kbWFidWYpCisJCXZtd19kbWFidWZfdW5yZWZlcmVuY2UoJmR1LT5jdXJzb3JfZG1hYnVmKTsKKworCS8qIHNldHVwIG5ldyBpbWFnZSAqLworCWlmIChzdXJmYWNlKSB7CisJCS8qIHZtd191c2VyX3N1cmZhY2VfbG9va3VwIHRha2VzIG9uZSByZWZlcmVuY2UgKi8KKwkJZHUtPmN1cnNvcl9zdXJmYWNlID0gc3VyZmFjZTsKKworCQlkdS0+Y3Vyc29yX3N1cmZhY2UtPnNub29wZXIuY3J0YyA9IGNydGM7CisJCWR1LT5jdXJzb3JfYWdlID0gZHUtPmN1cnNvcl9zdXJmYWNlLT5zbm9vcGVyLmFnZTsKKwkJdm13X2N1cnNvcl91cGRhdGVfaW1hZ2UoZGV2X3ByaXYsIHN1cmZhY2UtPnNub29wZXIuaW1hZ2UsCisJCQkJCTY0LCA2NCwgZHUtPmhvdHNwb3RfeCwgZHUtPmhvdHNwb3RfeSk7CisJfSBlbHNlIGlmIChkbWFidWYpIHsKKwkJc3RydWN0IHR0bV9ib19rbWFwX29iaiBtYXA7CisJCXVuc2lnbmVkIGxvbmcga21hcF9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcga21hcF9udW07CisJCXZvaWQgKnZpcnR1YWw7CisJCWJvb2wgZHVtbXk7CisKKwkJLyogdm13X3VzZXJfc3VyZmFjZV9sb29rdXAgdGFrZXMgb25lIHJlZmVyZW5jZSAqLworCQlkdS0+Y3Vyc29yX2RtYWJ1ZiA9IGRtYWJ1ZjsKKworCQlrbWFwX29mZnNldCA9IDA7CisJCWttYXBfbnVtID0gKDY0KjY0KjQpID4+IFBBR0VfU0hJRlQ7CisKKwkJcmV0ID0gdHRtX2JvX3Jlc2VydmUoJmRtYWJ1Zi0+YmFzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAwKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQkJRFJNX0VSUk9SKCJyZXNlcnZlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IHR0bV9ib19rbWFwKCZkbWFidWYtPmJhc2UsIGttYXBfb2Zmc2V0LCBrbWFwX251bSwgJm1hcCk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlnb3RvIGVycl91bnJlc2VydmU7CisKKwkJdmlydHVhbCA9IHR0bV9rbWFwX29ial92aXJ0dWFsKCZtYXAsICZkdW1teSk7CisJCXZtd19jdXJzb3JfdXBkYXRlX2ltYWdlKGRldl9wcml2LCB2aXJ0dWFsLCA2NCwgNjQsCisJCQkJCWR1LT5ob3RzcG90X3gsIGR1LT5ob3RzcG90X3kpOworCisJCXR0bV9ib19rdW5tYXAoJm1hcCk7CitlcnJfdW5yZXNlcnZlOgorCQl0dG1fYm9fdW5yZXNlcnZlKCZkbWFidWYtPmJhc2UpOworCisJfSBlbHNlIHsKKwkJdm13X2N1cnNvcl91cGRhdGVfcG9zaXRpb24oZGV2X3ByaXYsIGZhbHNlLCAwLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdm13X2N1cnNvcl91cGRhdGVfcG9zaXRpb24oZGV2X3ByaXYsIHRydWUsIGR1LT5jdXJzb3JfeCwgZHUtPmN1cnNvcl95KTsKKworCXJldHVybiAwOworfQorCitpbnQgdm13X2R1X2NydGNfY3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHkpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGNydGMtPmRldik7CisJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1ID0gdm13X2NydGNfdG9fZHUoY3J0Yyk7CisJYm9vbCBzaG93biA9IGR1LT5jdXJzb3Jfc3VyZmFjZSB8fCBkdS0+Y3Vyc29yX2RtYWJ1ZiA/IHRydWUgOiBmYWxzZTsKKworCWR1LT5jdXJzb3JfeCA9IHggKyBjcnRjLT54OworCWR1LT5jdXJzb3JfeSA9IHkgKyBjcnRjLT55OworCisJdm13X2N1cnNvcl91cGRhdGVfcG9zaXRpb24oZGV2X3ByaXYsIHNob3duLAorCQkJCSAgIGR1LT5jdXJzb3JfeCwgZHUtPmN1cnNvcl95KTsKKworCXJldHVybiAwOworfQorCit2b2lkIHZtd19rbXNfY3Vyc29yX3Nub29wKHN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmLAorCQkJICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCSAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCSAgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHR0bV9ib19rbWFwX29iaiBtYXA7CisJdW5zaWduZWQgbG9uZyBrbWFwX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGttYXBfbnVtOworCVNWR0EzZENvcHlCb3ggKmJveDsKKwl1bnNpZ25lZCBib3hfY291bnQ7CisJdm9pZCAqdmlydHVhbDsKKwlib29sIGR1bW15OworCXN0cnVjdCB2bXdfZG1hX2NtZCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZFN1cmZhY2VETUEgZG1hOworCX0gKmNtZDsKKwlpbnQgcmV0OworCisJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kbWFfY21kLCBoZWFkZXIpOworCisJLyogTm8gc25vb3BlciBpbnN0YWxsZWQgKi8KKwlpZiAoIXNyZi0+c25vb3Blci5pbWFnZSkKKwkJcmV0dXJuOworCisJaWYgKGNtZC0+ZG1hLmhvc3QuZmFjZSAhPSAwIHx8IGNtZC0+ZG1hLmhvc3QubWlwbWFwICE9IDApIHsKKwkJRFJNX0VSUk9SKCJmYWNlIGFuZCBtaXBtYXAgZm9yIGN1cnNvcnMgc2hvdWxkIG5ldmVyICE9IDBcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNtZC0+aGVhZGVyLnNpemUgPCA2NCkgeworCQlEUk1fRVJST1IoImF0IGxlYXN0IG9uZSBmdWxsIGNvcHkgYm94IG11c3QgYmUgZ2l2ZW5cbiIpOworCQlyZXR1cm47CisJfQorCisJYm94ID0gKFNWR0EzZENvcHlCb3ggKikmY21kWzFdOworCWJveF9jb3VudCA9IChjbWQtPmhlYWRlci5zaXplIC0gc2l6ZW9mKFNWR0EzZENtZFN1cmZhY2VETUEpKSAvCisJCQlzaXplb2YoU1ZHQTNkQ29weUJveCk7CisKKwlpZiAoY21kLT5kbWEuZ3Vlc3QucGl0Y2ggIT0gKDY0ICogNCkgfHwKKwkgICAgY21kLT5kbWEuZ3Vlc3QucHRyLm9mZnNldCAlIFBBR0VfU0laRSB8fAorCSAgICBib3gtPnggIT0gMCAgICB8fCBib3gtPnkgIT0gMCAgICB8fCBib3gtPnogIT0gMCAgICB8fAorCSAgICBib3gtPnNyY3ggIT0gMCB8fCBib3gtPnNyY3kgIT0gMCB8fCBib3gtPnNyY3ogIT0gMCB8fAorCSAgICBib3gtPncgIT0gNjQgICB8fCBib3gtPmggIT0gNjQgICB8fCBib3gtPmQgIT0gMSAgICB8fAorCSAgICBib3hfY291bnQgIT0gMSkgeworCQkvKiBUT0RPIGhhbmRsZSBub25lIHBhZ2UgYWxpZ25lZCBvZmZzZXRzICovCisJCS8qIFRPRE8gaGFuZGxlIHBhcnRpYWwgdXBsb2FkcyBhbmQgcGl0Y2ggIT0gMjU2ICovCisJCS8qIFRPRE8gaGFuZGxlIG1vcmUgdGhlbiBvbmUgY29weSAoc2l6ZSAhPSA2NCkgKi8KKwkJRFJNX0VSUk9SKCJsYXp5IHByb2dyYW1lciwgY2FudCBoYW5kbGUgd2llcmQgc3R1ZmZcbiIpOworCQlyZXR1cm47CisJfQorCisJa21hcF9vZmZzZXQgPSBjbWQtPmRtYS5ndWVzdC5wdHIub2Zmc2V0ID4+IFBBR0VfU0hJRlQ7CisJa21hcF9udW0gPSAoNjQqNjQqNCkgPj4gUEFHRV9TSElGVDsKKworCXJldCA9IHR0bV9ib19yZXNlcnZlKGJvLCB0cnVlLCBmYWxzZSwgZmFsc2UsIDApOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJyZXNlcnZlIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSB0dG1fYm9fa21hcChibywga21hcF9vZmZzZXQsIGttYXBfbnVtLCAmbWFwKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIGVycl91bnJlc2VydmU7CisKKwl2aXJ0dWFsID0gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoJm1hcCwgJmR1bW15KTsKKworCW1lbWNweShzcmYtPnNub29wZXIuaW1hZ2UsIHZpcnR1YWwsIDY0KjY0KjQpOworCXNyZi0+c25vb3Blci5hZ2UrKzsKKworCS8qIHdlIGNhbid0IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHRoaXMgZnVuY3Rpb24gc2luY2UgZXhlY2J1ZiBoYXMKKwkgKiByZXNlcnZlZCBmaWZvIHNwYWNlLgorCSAqCisJICogaWYgKHNyZi0+c25vb3Blci5jcnRjKQorCSAqCXZtd19sZHVfY3J0Y19jdXJzb3JfdXBkYXRlX2ltYWdlKGRldl9wcml2LAorCSAqCQkJCQkgc3JmLT5zbm9vcGVyLmltYWdlLCA2NCwgNjQsCisJICoJCQkJCSBkdS0+aG90c3BvdF94LCBkdS0+aG90c3BvdF95KTsKKwkgKi8KKworCXR0bV9ib19rdW5tYXAoJm1hcCk7CitlcnJfdW5yZXNlcnZlOgorCXR0bV9ib191bnJlc2VydmUoYm8pOworfQorCit2b2lkIHZtd19rbXNfY3Vyc29yX3Bvc3RfZXhlY2J1ZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCB2bXdfZGlzcGxheV91bml0ICpkdTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWR1ID0gdm13X2NydGNfdG9fZHUoY3J0Yyk7CisJCWlmICghZHUtPmN1cnNvcl9zdXJmYWNlIHx8CisJCSAgICBkdS0+Y3Vyc29yX2FnZSA9PSBkdS0+Y3Vyc29yX3N1cmZhY2UtPnNub29wZXIuYWdlKQorCQkJY29udGludWU7CisKKwkJZHUtPmN1cnNvcl9hZ2UgPSBkdS0+Y3Vyc29yX3N1cmZhY2UtPnNub29wZXIuYWdlOworCQl2bXdfY3Vyc29yX3VwZGF0ZV9pbWFnZShkZXZfcHJpdiwKKwkJCQkJZHUtPmN1cnNvcl9zdXJmYWNlLT5zbm9vcGVyLmltYWdlLAorCQkJCQk2NCwgNjQsIGR1LT5ob3RzcG90X3gsIGR1LT5ob3RzcG90X3kpOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cit9CisKKy8qCisgKiBHZW5lcmljIGZyYW1lYnVmZmVyIGNvZGUKKyAqLworCitpbnQgdm13X2ZyYW1lYnVmZmVyX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgIHVuc2lnbmVkIGludCAqaGFuZGxlKQoreworCWlmIChoYW5kbGUpCisJCWhhbmRsZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN1cmZhY2UgZnJhbWVidWZmZXIgY29kZQorICovCisKKyNkZWZpbmUgdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYnMoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2UsIGJhc2UuYmFzZSkKKworc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlIHsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIGJhc2U7CisJc3RydWN0IHZtd19zdXJmYWNlICpzdXJmYWNlOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZF93b3JrOworCXN0cnVjdCBtdXRleCB3b3JrX2xvY2s7CisJYm9vbCBwcmVzZW50X2ZzOworfTsKKwordm9pZCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQoreworCXN0cnVjdCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZSAqdmZiID0KKwkJdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYnMoZnJhbWVidWZmZXIpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ2ZmItPmRfd29yayk7CisJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZnJhbWVidWZmZXIpOworCXZtd19zdXJmYWNlX3VucmVmZXJlbmNlKCZ2ZmItPnN1cmZhY2UpOworCisJa2ZyZWUoZnJhbWVidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCB2bXdfZnJhbWVidWZmZXJfcHJlc2VudF9mc19jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZF93b3JrID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZSAqdmZicyA9CisJCWNvbnRhaW5lcl9vZihkX3dvcmssIHN0cnVjdCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZSwgZF93b3JrKTsKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnN1cmYgPSB2ZmJzLT5zdXJmYWNlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gJnZmYnMtPmJhc2UuYmFzZTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZnJhbWVidWZmZXItPmRldik7CisKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRQcmVzZW50IGJvZHk7CisJCVNWR0EzZENvcHlSZWN0IGNyOworCX0gKmNtZDsKKworCW11dGV4X2xvY2soJnZmYnMtPndvcmtfbG9jayk7CisJaWYgKCF2ZmJzLT5wcmVzZW50X2ZzKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpCisJCWdvdG8gb3V0X3Jlc2NoZWQ7CisKKwljbWQtPmhlYWRlci5pZCA9IGNwdV90b19sZTMyKFNWR0FfM0RfQ01EX1BSRVNFTlQpOworCWNtZC0+aGVhZGVyLnNpemUgPSBjcHVfdG9fbGUzMihzaXplb2YoY21kLT5ib2R5KSArIHNpemVvZihjbWQtPmNyKSk7CisJY21kLT5ib2R5LnNpZCA9IGNwdV90b19sZTMyKHN1cmYtPnJlcy5pZCk7CisJY21kLT5jci54ID0gY3B1X3RvX2xlMzIoMCk7CisJY21kLT5jci55ID0gY3B1X3RvX2xlMzIoMCk7CisJY21kLT5jci5zcmN4ID0gY21kLT5jci54OworCWNtZC0+Y3Iuc3JjeSA9IGNtZC0+Y3IueTsKKwljbWQtPmNyLncgPSBjcHVfdG9fbGUzMihmcmFtZWJ1ZmZlci0+d2lkdGgpOworCWNtZC0+Y3IuaCA9IGNwdV90b19sZTMyKGZyYW1lYnVmZmVyLT5oZWlnaHQpOworCXZmYnMtPnByZXNlbnRfZnMgPSBmYWxzZTsKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CitvdXRfcmVzY2hlZDoKKwkvKioKKwkgKiBXaWxsIG5vdCByZS1hZGQgaWYgYWxyZWFkeSBwZW5kaW5nLgorCSAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdmZicy0+ZF93b3JrLCBWTVdHRlhfUFJFU0VOVF9SQVRFKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ2ZmJzLT53b3JrX2xvY2spOworfQorCisKK2ludCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKKwkJCQkgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKKwkJCQkgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCQkgIHVuc2lnbmVkIG51bV9jbGlwcykKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZnJhbWVidWZmZXItPmRldik7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlICp2ZmJzID0KKwkJdm13X2ZyYW1lYnVmZmVyX3RvX3ZmYnMoZnJhbWVidWZmZXIpOworCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3VyZiA9IHZmYnMtPnN1cmZhY2U7CisJc3RydWN0IGRybV9jbGlwX3JlY3Qgbm9yZWN0OworCVNWR0EzZENvcHlSZWN0ICpjcjsKKwlpbnQgaSwgaW5jID0gMTsKKworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZFByZXNlbnQgYm9keTsKKwkJU1ZHQTNkQ29weVJlY3QgY3I7CisJfSAqY21kOworCisJaWYgKCFudW1fY2xpcHMgfHwKKwkgICAgIShkZXZfcHJpdi0+Zmlmby5jYXBhYmlsaXRpZXMgJgorCSAgICAgIFNWR0FfRklGT19DQVBfU0NSRUVOX09CSkVDVCkpIHsKKwkJaW50IHJldDsKKworCQltdXRleF9sb2NrKCZ2ZmJzLT53b3JrX2xvY2spOworCQl2ZmJzLT5wcmVzZW50X2ZzID0gdHJ1ZTsKKwkJcmV0ID0gc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2ZmJzLT5kX3dvcmssIFZNV0dGWF9QUkVTRU5UX1JBVEUpOworCQltdXRleF91bmxvY2soJnZmYnMtPndvcmtfbG9jayk7CisJCWlmIChyZXQpIHsKKwkJCS8qKgorCQkJICogTm8gd29yayBwZW5kaW5nLCBGb3JjZSBpbW1lZGlhdGUgcHJlc2VudC4KKwkJCSAqLworCQkJdm13X2ZyYW1lYnVmZmVyX3ByZXNlbnRfZnNfY2FsbGJhY2soJnZmYnMtPmRfd29yay53b3JrKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIW51bV9jbGlwcykgeworCQludW1fY2xpcHMgPSAxOworCQljbGlwcyA9ICZub3JlY3Q7CisJCW5vcmVjdC54MSA9IG5vcmVjdC55MSA9IDA7CisJCW5vcmVjdC54MiA9IGZyYW1lYnVmZmVyLT53aWR0aDsKKwkJbm9yZWN0LnkyID0gZnJhbWVidWZmZXItPmhlaWdodDsKKwl9IGVsc2UgaWYgKGZsYWdzICYgRFJNX01PREVfRkJfRElSVFlfQU5OT1RBVEVfQ09QWSkgeworCQludW1fY2xpcHMgLz0gMjsKKwkJaW5jID0gMjsgLyogc2tpcCBzb3VyY2UgcmVjdHMgKi8KKwl9CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBzaXplb2YoKmNtZCkgKyAobnVtX2NsaXBzIC0gMSkgKiBzaXplb2YoY21kLT5jcikpOworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGaWZvIHJlc2VydmUgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKKwljbWQtPmhlYWRlci5pZCA9IGNwdV90b19sZTMyKFNWR0FfM0RfQ01EX1BSRVNFTlQpOworCWNtZC0+aGVhZGVyLnNpemUgPSBjcHVfdG9fbGUzMihzaXplb2YoY21kLT5ib2R5KSArIG51bV9jbGlwcyAqIHNpemVvZihjbWQtPmNyKSk7CisJY21kLT5ib2R5LnNpZCA9IGNwdV90b19sZTMyKHN1cmYtPnJlcy5pZCk7CisKKwlmb3IgKGkgPSAwLCBjciA9ICZjbWQtPmNyOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNyKyssIGNsaXBzICs9IGluYykgeworCQljci0+eCA9IGNwdV90b19sZTE2KGNsaXBzLT54MSk7CisJCWNyLT55ID0gY3B1X3RvX2xlMTYoY2xpcHMtPnkxKTsKKwkJY3ItPnNyY3ggPSBjci0+eDsKKwkJY3ItPnNyY3kgPSBjci0+eTsKKwkJY3ItPncgPSBjcHVfdG9fbGUxNihjbGlwcy0+eDIgLSBjbGlwcy0+eDEpOworCQljci0+aCA9IGNwdV90b19sZTE2KGNsaXBzLT55MiAtIGNsaXBzLT55MSk7CisJfQorCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkgKyAobnVtX2NsaXBzIC0gMSkgKiBzaXplb2YoY21kLT5jcikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlX2Z1bmNzID0geworCS5kZXN0cm95ID0gdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2VfZGVzdHJveSwKKwkuZGlydHkgPSB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9kaXJ0eSwKKwkuY3JlYXRlX2hhbmRsZSA9IHZtd19mcmFtZWJ1ZmZlcl9jcmVhdGVfaGFuZGxlLAorfTsKKworaW50IHZtd19rbXNfbmV3X2ZyYW1lYnVmZmVyX3N1cmZhY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgc3RydWN0IHZtd19zdXJmYWNlICpzdXJmYWNlLAorCQkJCSAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICoqb3V0LAorCQkJCSAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlICp2ZmJzOworCWludCByZXQ7CisKKwl2ZmJzID0ga3phbGxvYyhzaXplb2YoKnZmYnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZmYnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyMTsKKwl9CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZ2ZmJzLT5iYXNlLmJhc2UsCisJCQkJICAgJnZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlX2Z1bmNzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnIyOworCisJaWYgKCF2bXdfc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVmZXJlbmNlIHN1cmZhY2UgJXBcbiIsIHN1cmZhY2UpOworCQlnb3RvIG91dF9lcnIzOworCX0KKworCS8qIFhYWCBnZXQgdGhlIGZpcnN0IDMgZnJvbSB0aGUgc3VyZmFjZSBpbmZvICovCisJdmZicy0+YmFzZS5iYXNlLmJpdHNfcGVyX3BpeGVsID0gMzI7CisJdmZicy0+YmFzZS5iYXNlLnBpdGNoID0gd2lkdGggKiAzMiAvIDQ7CisJdmZicy0+YmFzZS5iYXNlLmRlcHRoID0gMjQ7CisJdmZicy0+YmFzZS5iYXNlLndpZHRoID0gd2lkdGg7CisJdmZicy0+YmFzZS5iYXNlLmhlaWdodCA9IGhlaWdodDsKKwl2ZmJzLT5iYXNlLnBpbiA9IE5VTEw7CisJdmZicy0+YmFzZS51bnBpbiA9IE5VTEw7CisJdmZicy0+c3VyZmFjZSA9IHN1cmZhY2U7CisJbXV0ZXhfaW5pdCgmdmZicy0+d29ya19sb2NrKTsKKwlJTklUX0RFTEFZRURfV09SSygmdmZicy0+ZF93b3JrLCAmdm13X2ZyYW1lYnVmZmVyX3ByZXNlbnRfZnNfY2FsbGJhY2spOworCSpvdXQgPSAmdmZicy0+YmFzZTsKKworCXJldHVybiAwOworCitvdXRfZXJyMzoKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgmdmZicy0+YmFzZS5iYXNlKTsKK291dF9lcnIyOgorCWtmcmVlKHZmYnMpOworb3V0X2VycjE6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERtYWJ1ZiBmcmFtZWJ1ZmZlciBjb2RlCisgKi8KKworI2RlZmluZSB2bXdfZnJhbWVidWZmZXJfdG9fdmZiZCh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmLCBiYXNlLmJhc2UpCisKK3N0cnVjdCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmIHsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIGJhc2U7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpidWZmZXI7Cit9OworCit2b2lkIHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1ZiAqdmZiZCA9CisJCXZtd19mcmFtZWJ1ZmZlcl90b192ZmJkKGZyYW1lYnVmZmVyKTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZyYW1lYnVmZmVyKTsKKwl2bXdfZG1hYnVmX3VucmVmZXJlbmNlKCZ2ZmJkLT5idWZmZXIpOworCisJa2ZyZWUodmZiZCk7Cit9CisKK2ludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAorCQkJCSB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCisJCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCQkgdW5zaWduZWQgbnVtX2NsaXBzKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihmcmFtZWJ1ZmZlci0+ZGV2KTsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBub3JlY3Q7CisJc3RydWN0IHsKKwkJdWludDMyX3QgaGVhZGVyOworCQlTVkdBRmlmb0NtZFVwZGF0ZSBib2R5OworCX0gKmNtZDsKKwlpbnQgaSwgaW5jcmVtZW50ID0gMTsKKworCWlmICghbnVtX2NsaXBzIHx8CisJICAgICEoZGV2X3ByaXYtPmZpZm8uY2FwYWJpbGl0aWVzICYKKwkgICAgICBTVkdBX0ZJRk9fQ0FQX1NDUkVFTl9PQkpFQ1QpKSB7CisJCW51bV9jbGlwcyA9IDE7CisJCWNsaXBzID0gJm5vcmVjdDsKKwkJbm9yZWN0LngxID0gbm9yZWN0LnkxID0gMDsKKwkJbm9yZWN0LngyID0gZnJhbWVidWZmZXItPndpZHRoOworCQlub3JlY3QueTIgPSBmcmFtZWJ1ZmZlci0+aGVpZ2h0OworCX0gZWxzZSBpZiAoZmxhZ3MgJiBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZKSB7CisJCW51bV9jbGlwcyAvPSAyOworCQlpbmNyZW1lbnQgPSAyOworCX0KKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIHNpemVvZigqY21kKSAqIG51bV9jbGlwcyk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZpZm8gcmVzZXJ2ZSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9jbGlwczsgaSsrLCBjbGlwcyArPSBpbmNyZW1lbnQpIHsKKwkJY21kW2ldLmhlYWRlciA9IGNwdV90b19sZTMyKFNWR0FfQ01EX1VQREFURSk7CisJCWNtZFtpXS5ib2R5LnggPSBjcHVfdG9fbGUzMihjbGlwc1tpXS54MSk7CisJCWNtZFtpXS5ib2R5LnkgPSBjcHVfdG9fbGUzMihjbGlwc1tpXS55MSk7CisJCWNtZFtpXS5ib2R5LndpZHRoID0gY3B1X3RvX2xlMzIoY2xpcHNbaV0ueDIgLSBjbGlwc1tpXS54MSk7CisJCWNtZFtpXS5ib2R5LmhlaWdodCA9IGNwdV90b19sZTMyKGNsaXBzW2ldLnkyIC0gY2xpcHNbaV0ueTEpOworCX0KKworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpICogbnVtX2NsaXBzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2Z1bmNzID0geworCS5kZXN0cm95ID0gdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kZXN0cm95LAorCS5kaXJ0eSA9IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGlydHksCisJLmNyZWF0ZV9oYW5kbGUgPSB2bXdfZnJhbWVidWZmZXJfY3JlYXRlX2hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9waW4oc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqdmZiKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdih2ZmItPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1ZiAqdmZiZCA9CisJCXZtd19mcmFtZWJ1ZmZlcl90b192ZmJkKCZ2ZmItPmJhc2UpOworCWludCByZXQ7CisKKwl2bXdfb3ZlcmxheV9wYXVzZV9hbGwoZGV2X3ByaXYpOworCisJcmV0ID0gdm13X2RtYWJ1Zl90b19zdGFydF9vZl92cmFtKGRldl9wcml2LCB2ZmJkLT5idWZmZXIpOworCisJaWYgKGRldl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9NVUxUSU1PTikgeworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX05VTV9HVUVTVF9ESVNQTEFZUywgMSk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JRCwgMCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JU19QUklNQVJZLCB0cnVlKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ESVNQTEFZX1BPU0lUSU9OX1gsIDApOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfUE9TSVRJT05fWSwgMCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9XSURUSCwgMCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9IRUlHSFQsIDApOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSUQsIFNWR0FfSURfSU5WQUxJRCk7CisKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUsIDEpOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1dJRFRILCB2ZmItPmJhc2Uud2lkdGgpOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0hFSUdIVCwgdmZiLT5iYXNlLmhlaWdodCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfQklUU19QRVJfUElYRUwsIHZmYi0+YmFzZS5iaXRzX3Blcl9waXhlbCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfREVQVEgsIHZmYi0+YmFzZS5kZXB0aCk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfUkVEX01BU0ssIDB4MDBmZjAwMDApOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0dSRUVOX01BU0ssIDB4MDAwMGZmMDApOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0JMVUVfTUFTSywgMHgwMDAwMDBmZik7CisJfSBlbHNlCisJCVdBUk5fT04odHJ1ZSk7CisKKwl2bXdfb3ZlcmxheV9yZXN1bWVfYWxsKGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfdW5waW4oc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqdmZiKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdih2ZmItPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1ZiAqdmZiZCA9CisJCXZtd19mcmFtZWJ1ZmZlcl90b192ZmJkKCZ2ZmItPmJhc2UpOworCisJaWYgKCF2ZmJkLT5idWZmZXIpIHsKKwkJV0FSTl9PTighdmZiZC0+YnVmZmVyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHZtd19kbWFidWZfZnJvbV92cmFtKGRldl9wcml2LCB2ZmJkLT5idWZmZXIpOworfQorCitpbnQgdm13X2ttc19uZXdfZnJhbWVidWZmZXJfZG1hYnVmKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgc3RydWN0IHZtd19kbWFfYnVmZmVyICpkbWFidWYsCisJCQkJICAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqKm91dCwKKwkJCQkgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWYgKnZmYmQ7CisJaW50IHJldDsKKworCXZmYmQgPSBremFsbG9jKHNpemVvZigqdmZiZCksIEdGUF9LRVJORUwpOworCWlmICghdmZiZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnIxOworCX0KKworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJnZmYmQtPmJhc2UuYmFzZSwKKwkJCQkgICAmdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9mdW5jcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZXJyMjsKKworCWlmICghdm13X2RtYWJ1Zl9yZWZlcmVuY2UoZG1hYnVmKSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWZlcmVuY2UgZG1hYnVmICVwXG4iLCBkbWFidWYpOworCQlnb3RvIG91dF9lcnIzOworCX0KKworCS8qIFhYWCBnZXQgdGhlIGZpcnN0IDMgZnJvbSB0aGUgc3VyZmFjZSBpbmZvICovCisJdmZiZC0+YmFzZS5iYXNlLmJpdHNfcGVyX3BpeGVsID0gMzI7CisJdmZiZC0+YmFzZS5iYXNlLnBpdGNoID0gd2lkdGggKiAzMiAvIDQ7CisJdmZiZC0+YmFzZS5iYXNlLmRlcHRoID0gMjQ7CisJdmZiZC0+YmFzZS5iYXNlLndpZHRoID0gd2lkdGg7CisJdmZiZC0+YmFzZS5iYXNlLmhlaWdodCA9IGhlaWdodDsKKwl2ZmJkLT5iYXNlLnBpbiA9IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfcGluOworCXZmYmQtPmJhc2UudW5waW4gPSB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX3VucGluOworCXZmYmQtPmJ1ZmZlciA9IGRtYWJ1ZjsKKwkqb3V0ID0gJnZmYmQtPmJhc2U7CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjM6CisJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoJnZmYmQtPmJhc2UuYmFzZSk7CitvdXRfZXJyMjoKKwlrZnJlZSh2ZmJkKTsKK291dF9lcnIxOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHZW5lcmljIEtlcm5lbCBtb2Rlc2V0dGluZyBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqdm13X2ttc19mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkJCSBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCkKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIgPSBOVUxMOworCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3VyZmFjZSA9IE5VTEw7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpibyA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgdGZpbGUsCisJCQkJCSAgICAgbW9kZV9jbWQtPmhhbmRsZSwgJnN1cmZhY2UpOworCWlmIChyZXQpCisJCWdvdG8gdHJ5X2RtYWJ1ZjsKKworCXJldCA9IHZtd19rbXNfbmV3X2ZyYW1lYnVmZmVyX3N1cmZhY2UoZGV2X3ByaXYsIHN1cmZhY2UsICZ2ZmIsCisJCQkJCSAgICAgIG1vZGVfY21kLT53aWR0aCwgbW9kZV9jbWQtPmhlaWdodCk7CisKKwkvKiB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cCB0YWtlcyBvbmUgcmVmIHNvIGRvZXMgbmV3X2ZiICovCisJdm13X3N1cmZhY2VfdW5yZWZlcmVuY2UoJnN1cmZhY2UpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBjcmVhdGUgdm13X2ZyYW1lYnVmZmVyOiAlaVxuIiwgcmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAmdmZiLT5iYXNlOworCit0cnlfZG1hYnVmOgorCURSTV9JTkZPKCIlczogdHJ5aW5nIGJ1ZmZlclxuIiwgX19mdW5jX18pOworCisJcmV0ID0gdm13X3VzZXJfZG1hYnVmX2xvb2t1cCh0ZmlsZSwgbW9kZV9jbWQtPmhhbmRsZSwgJmJvKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgYnVmZmVyOiAlaVxuIiwgcmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0ID0gdm13X2ttc19uZXdfZnJhbWVidWZmZXJfZG1hYnVmKGRldl9wcml2LCBibywgJnZmYiwKKwkJCQkJICAgICBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5oZWlnaHQpOworCisJLyogdm13X3VzZXJfZG1hYnVmX2xvb2t1cCB0YWtlcyBvbmUgcmVmIHNvIGRvZXMgbmV3X2ZiICovCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmYm8pOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBjcmVhdGUgdm13X2ZyYW1lYnVmZmVyOiAlaVxuIiwgcmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuICZ2ZmItPmJhc2U7Cit9CisKK3N0YXRpYyBpbnQgdm13X2ttc19mYl9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHZtd19rbXNfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IHZtd19rbXNfZmJfY3JlYXRlLAorCS5mYl9jaGFuZ2VkID0gdm13X2ttc19mYl9jaGFuZ2VkLAorfTsKKworaW50IHZtd19rbXNfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCWludCByZXQ7CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOworCWRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAmdm13X2ttc19mdW5jczsKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDY0MDsKKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA0ODA7CisJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSAyMDQ4OworCWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDIwNDg7CisKKwlyZXQgPSB2bXdfa21zX2luaXRfbGVnYWN5X2Rpc3BsYXlfc3lzdGVtKGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgdm13X2ttc19jbG9zZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCS8qCisJICogRG9jcyBzYXlzIHdlIHNob3VsZCB0YWtlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBidXQgc2luY2UgaXQgZGVzdHJveXMgZW5jb2RlcnMgYW5kIG91ciBkZXN0cnVjdG9yIGNhbGxzCisJICogZHJtX2VuY29kZXJfY2xlYW51cCB3aGljaCB0YWtlcyB0aGUgbG9jayB3ZSBkZWFkbG9jay4KKwkgKi8KKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXZfcHJpdi0+ZGV2KTsKKwl2bXdfa21zX2Nsb3NlX2xlZ2FjeV9kaXNwbGF5X3N5c3RlbShkZXZfcHJpdik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2bXdfa21zX2N1cnNvcl9ieXBhc3NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3Ztd19jdXJzb3JfYnlwYXNzX2FyZyAqYXJnID0gZGF0YTsKKwlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqZHU7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgcmV0ID0gMDsKKworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fVk1XX0NVUlNPUl9CWVBBU1NfQUxMKSB7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJCWR1ID0gdm13X2NydGNfdG9fZHUoY3J0Yyk7CisJCQlkdS0+aG90c3BvdF94ID0gYXJnLT54aG90OworCQkJZHUtPmhvdHNwb3RfeSA9IGFyZy0+eWhvdDsKKwkJfQorCisJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgYXJnLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CisJaWYgKCFvYmopIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJZHUgPSB2bXdfY3J0Y190b19kdShjcnRjKTsKKworCWR1LT5ob3RzcG90X3ggPSBhcmctPnhob3Q7CisJZHUtPmhvdHNwb3RfeSA9IGFyZy0+eWhvdDsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X2ttc19zYXZlX3ZnYShzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KQoreworCS8qCisJICogc2V0dXAgYSBzaW5nbGUgbXVsdGltb24gbW9uaXRvciB3aXRoIHRoZSBzaXplCisJICogb2YgMHgwLCB0aGlzIHN0b3BzIHRoZSBVSSBmcm9tIHJlc2l6aW5nIHdoZW4gd2UKKwkgKiBjaGFuZ2UgdGhlIGZyYW1lYnVmZmVyIHNpemUKKwkgKi8KKwlpZiAodm13X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX01VTFRJTU9OKSB7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfTlVNX0dVRVNUX0RJU1BMQVlTLCAxKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19ESVNQTEFZX0lELCAwKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19ESVNQTEFZX0lTX1BSSU1BUlksIHRydWUpOworCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfUE9TSVRJT05fWCwgMCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9QT1NJVElPTl9ZLCAwKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19ESVNQTEFZX1dJRFRILCAwKTsKKwkJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19ESVNQTEFZX0hFSUdIVCwgMCk7CisJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JRCwgU1ZHQV9JRF9JTlZBTElEKTsKKwl9CisKKwl2bXdfcHJpdi0+dmdhX3dpZHRoID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX1dJRFRIKTsKKwl2bXdfcHJpdi0+dmdhX2hlaWdodCA9IHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19IRUlHSFQpOworCXZtd19wcml2LT52Z2FfYnBwID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0JJVFNfUEVSX1BJWEVMKTsKKwl2bXdfcHJpdi0+dmdhX2RlcHRoID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0RFUFRIKTsKKwl2bXdfcHJpdi0+dmdhX3BzZXVkbyA9IHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19QU0VVRE9DT0xPUik7CisJdm13X3ByaXYtPnZnYV9yZWRfbWFzayA9IHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19SRURfTUFTSyk7CisJdm13X3ByaXYtPnZnYV9ncmVlbl9tYXNrID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0dSRUVOX01BU0spOworCXZtd19wcml2LT52Z2FfYmx1ZV9tYXNrID0gdm13X3JlYWQodm13X3ByaXYsIFNWR0FfUkVHX0JMVUVfTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19rbXNfcmVzdG9yZV92Z2Eoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdikKK3sKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1dJRFRILCB2bXdfcHJpdi0+dmdhX3dpZHRoKTsKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0hFSUdIVCwgdm13X3ByaXYtPnZnYV9oZWlnaHQpOworCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfQklUU19QRVJfUElYRUwsIHZtd19wcml2LT52Z2FfYnBwKTsKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RFUFRILCB2bXdfcHJpdi0+dmdhX2RlcHRoKTsKKwl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1BTRVVET0NPTE9SLCB2bXdfcHJpdi0+dmdhX3BzZXVkbyk7CisJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19SRURfTUFTSywgdm13X3ByaXYtPnZnYV9yZWRfbWFzayk7CisJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19HUkVFTl9NQVNLLCB2bXdfcHJpdi0+dmdhX2dyZWVuX21hc2spOworCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfQkxVRV9NQVNLLCB2bXdfcHJpdi0+dmdhX2JsdWVfbWFzayk7CisKKwkvKiBUT0RPIGNoZWNrIGZvciBtdWx0aW1vbiAqLworCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfTlVNX0dVRVNUX0RJU1BMQVlTLCAwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjk1MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFZNV0dGWF9LTVNfSF8KKyNkZWZpbmUgVk1XR0ZYX0tNU19IXworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKworCisjZGVmaW5lIHZtd19mcmFtZWJ1ZmZlcl90b192ZmIoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyLCBiYXNlKQorCisvKioKKyAqIEJhc2UgY2xhc3MgZm9yIGZyYW1lYnVmZmVycworICoKKyAqIEBwaW4gaXMgY2FsbGVkIHRoZSB3aGVuIGV2ZXIgYSBjcnRjIHVzZXMgdGhpcyBmcmFtZWJ1ZmZlcgorICogQHVucGluIGlzIGNhbGxlZAorICovCitzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGJhc2U7CisJaW50ICgqcGluKShzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpmYik7CisJaW50ICgqdW5waW4pKHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZiKTsKK307CisKKworI2RlZmluZSB2bXdfY3J0Y190b19kdSh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfZGlzcGxheV91bml0LCBjcnRjKQorCisvKgorICogQmFzaWMgY3Vyc29yIG1hbmlwdWxhdGlvbgorICovCitpbnQgdm13X2N1cnNvcl91cGRhdGVfaW1hZ2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICB1MzIgKmltYWdlLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJCQkgICAgdTMyIGhvdHNwb3RYLCB1MzIgaG90c3BvdFkpOwordm9pZCB2bXdfY3Vyc29yX3VwZGF0ZV9wb3NpdGlvbihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCWJvb2wgc2hvdywgaW50IHgsIGludCB5KTsKKworLyoqCisgKiBCYXNlIGNsYXNzIGRpc3BsYXkgdW5pdC4KKyAqCisgKiBTaW5jZSB0aGUgU1ZHQSBodyBkb2Vzbid0IGhhdmUgYSBjb25jZXB0IG9mIGEgY3J0YywgZW5jb2RlciBvciBjb25uZWN0b3IKKyAqIHNvIHRoZSBkaXNwbGF5IHVuaXQgaXMgYWxsIG9mIHRoZW0gYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpcyB0cnVlIGZvciBib3RoCisgKiBsZWdhY3kgbXVsdGltb24gYW5kIHNjcmVlbiBvYmplY3RzLgorICovCitzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCB7CisJc3RydWN0IGRybV9jcnRjIGNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCisJc3RydWN0IHZtd19zdXJmYWNlICpjdXJzb3Jfc3VyZmFjZTsKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmN1cnNvcl9kbWFidWY7CisJc2l6ZV90IGN1cnNvcl9hZ2U7CisKKwlpbnQgY3Vyc29yX3g7CisJaW50IGN1cnNvcl95OworCisJaW50IGhvdHNwb3RfeDsKKwlpbnQgaG90c3BvdF95OworCisJdW5zaWduZWQgdW5pdDsKK307CisKKy8qCisgKiBTaGFyZWQgZGlzcGxheSB1bml0IGZ1bmN0aW9ucyAtIHZtd2dmeF9rbXMuYworICovCit2b2lkIHZtd19kaXNwbGF5X3VuaXRfY2xlYW51cChzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqZHUpOworaW50IHZtd19kdV9jcnRjX2N1cnNvcl9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCk7CitpbnQgdm13X2R1X2NydGNfY3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHkpOworCisvKgorICogTGVnYWN5IGRpc3BsYXkgdW5pdCBmdW5jdGlvbnMgLSB2bXdnZnhfbGR1LmgKKyAqLworaW50IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ttc19jbG9zZV9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbGR1LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9sZHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg5MTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbGR1LmMKQEAgLTAsMCArMSw1MTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidm13Z2Z4X2ttcy5oIgorCisjZGVmaW5lIHZtd19jcnRjX3RvX2xkdSh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXlfdW5pdCwgYmFzZS5jcnRjKQorI2RlZmluZSB2bXdfZW5jb2Rlcl90b19sZHUoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5X3VuaXQsIGJhc2UuZW5jb2RlcikKKyNkZWZpbmUgdm13X2Nvbm5lY3Rvcl90b19sZHUoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5X3VuaXQsIGJhc2UuY29ubmVjdG9yKQorCitzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsKKworCXVuc2lnbmVkIG51bV9hY3RpdmU7CisKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpmYjsKK307CisKKy8qKgorICogRGlzcGxheSB1bml0IHVzaW5nIHRoZSBsZWdhY3kgcmVnaXN0ZXIgaW50ZXJmYWNlLgorICovCitzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5X3VuaXQgeworCXN0cnVjdCB2bXdfZGlzcGxheV91bml0IGJhc2U7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsKKworCXVuc2lnbmVkIHVuaXQ7Cit9OworCitzdGF0aWMgdm9pZCB2bXdfbGR1X2Rlc3Ryb3koc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheV91bml0ICpsZHUpCit7CisJbGlzdF9kZWxfaW5pdCgmbGR1LT5hY3RpdmUpOworCXZtd19kaXNwbGF5X3VuaXRfY2xlYW51cCgmbGR1LT5iYXNlKTsKKwlrZnJlZShsZHUpOworfQorCisKKy8qCisgKiBMZWdhY3kgRGlzcGxheSBVbml0IENSVEMgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQgdm13X2xkdV9jcnRjX3NhdmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworfQorCitzdGF0aWMgdm9pZCB2bXdfbGR1X2NydGNfcmVzdG9yZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19sZHVfY3J0Y19nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgIHUxNiAqciwgdTE2ICpnLCB1MTYgKmIsCisJCQkJICAgdWludDMyX3Qgc2l6ZSkKK3sKK30KKworc3RhdGljIHZvaWQgdm13X2xkdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXZtd19sZHVfZGVzdHJveSh2bXdfY3J0Y190b19sZHUoY3J0YykpOworfQorCitzdGF0aWMgaW50IHZtd19sZHVfY29tbWl0X2xpc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5ICpsZHMgPSBkZXZfcHJpdi0+bGR1X3ByaXY7CisJc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheV91bml0ICplbnRyeTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IGkgPSAwOworCisJLyogdG8gc3RvcCB0aGUgc2NyZWVuIGZyb20gY2hhbmdpbmcgc2l6ZSBvbiByZXNpemUgKi8KKwl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX05VTV9HVUVTVF9ESVNQTEFZUywgMCk7CisJZm9yIChpID0gMDsgaSA8IGxkcy0+bnVtX2FjdGl2ZTsgaSsrKSB7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JRCwgaSk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9JU19QUklNQVJZLCAhaSk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9QT1NJVElPTl9YLCAwKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ESVNQTEFZX1BPU0lUSU9OX1ksIDApOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfV0lEVEgsIDApOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSEVJR0hULCAwKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ESVNQTEFZX0lELCBTVkdBX0lEX0lOVkFMSUQpOworCX0KKworCS8qIE5vdyBzZXQgdGhlIG1vZGUgKi8KKwl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX05VTV9HVUVTVF9ESVNQTEFZUywgbGRzLT5udW1fYWN0aXZlKTsKKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbGRzLT5hY3RpdmUsIGFjdGl2ZSkgeworCQljcnRjID0gJmVudHJ5LT5iYXNlLmNydGM7CisKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ESVNQTEFZX0lELCBpKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ESVNQTEFZX0lTX1BSSU1BUlksICFpKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ESVNQTEFZX1BPU0lUSU9OX1gsIGNydGMtPngpOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfUE9TSVRJT05fWSwgY3J0Yy0+eSk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9XSURUSCwgY3J0Yy0+bW9kZS5oZGlzcGxheSk7CisJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9IRUlHSFQsIGNydGMtPm1vZGUudmRpc3BsYXkpOworCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSUQsIFNWR0FfSURfSU5WQUxJRCk7CisKKwkJaSsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtd19sZHVfZGVsX2FjdGl2ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2LAorCQkJICAgICAgc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheV91bml0ICpsZHUpCit7CisJc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheSAqbGQgPSB2bXdfcHJpdi0+bGR1X3ByaXY7CisJaWYgKGxpc3RfZW1wdHkoJmxkdS0+YWN0aXZlKSkKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2RlbF9pbml0KCZsZHUtPmFjdGl2ZSk7CisJaWYgKC0tKGxkLT5udW1fYWN0aXZlKSA9PSAwKSB7CisJCUJVR19PTighbGQtPmZiKTsKKwkJaWYgKGxkLT5mYi0+dW5waW4pCisJCQlsZC0+ZmItPnVucGluKGxkLT5mYik7CisJCWxkLT5mYiA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X2xkdV9hZGRfYWN0aXZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCisJCQkgICAgICBzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5X3VuaXQgKmxkdSwKKwkJCSAgICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYikKK3sKKwlzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5ICpsZCA9IHZtd19wcml2LT5sZHVfcHJpdjsKKwlzdHJ1Y3Qgdm13X2xlZ2FjeV9kaXNwbGF5X3VuaXQgKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKmF0OworCisJaWYgKCFsaXN0X2VtcHR5KCZsZHUtPmFjdGl2ZSkpCisJCXJldHVybiAwOworCisJYXQgPSAmbGQtPmFjdGl2ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbGQtPmFjdGl2ZSwgYWN0aXZlKSB7CisJCWlmIChlbnRyeS0+dW5pdCA+IGxkdS0+dW5pdCkKKwkJCWJyZWFrOworCisJCWF0ID0gJmVudHJ5LT5hY3RpdmU7CisJfQorCisJbGlzdF9hZGQoJmxkdS0+YWN0aXZlLCBhdCk7CisJaWYgKGxkLT5udW1fYWN0aXZlKysgPT0gMCkgeworCQlCVUdfT04obGQtPmZiKTsKKwkJaWYgKHZmYi0+cGluKQorCQkJdmZiLT5waW4odmZiKTsKKwkJbGQtPmZiID0gdmZiOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtd19sZHVfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2OworCXN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXlfdW5pdCAqbGR1OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwlpZiAoIXNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXNldC0+Y3J0YykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIGxkdSAqLworCWNydGMgPSBzZXQtPmNydGM7CisJbGR1ID0gdm13X2NydGNfdG9fbGR1KGNydGMpOworCXZmYiA9IHNldC0+ZmIgPyB2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHNldC0+ZmIpIDogTlVMTDsKKwlkZXZfcHJpdiA9IHZtd19wcml2KGNydGMtPmRldik7CisKKwlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA+IDEpIHsKKwkJRFJNX0VSUk9SKCJ0byBtYW55IGNvbm5lY3RvcnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA9PSAxICYmCisJICAgIHNldC0+Y29ubmVjdG9yc1swXSAhPSAmbGR1LT5iYXNlLmNvbm5lY3RvcikgeworCQlEUk1fRVJST1IoImNvbm5lY3RvciBkb2Vzbid0IG1hdGNoICVwICVwXG4iLAorCQkJc2V0LT5jb25uZWN0b3JzWzBdLCAmbGR1LT5iYXNlLmNvbm5lY3Rvcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGxkdSBvbmx5IHN1cHBvcnRzIG9uZSBmYiBhY3RpdmUgYXQgdGhlIHRpbWUgKi8KKwlpZiAoZGV2X3ByaXYtPmxkdV9wcml2LT5mYiAmJiB2ZmIgJiYKKwkgICAgZGV2X3ByaXYtPmxkdV9wcml2LT5mYiAhPSB2ZmIpIHsKKwkJRFJNX0VSUk9SKCJNdWx0aXBsZSBmcmFtZWJ1ZmZlcnMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNpbmNlIHRoZXkgYWx3YXlzIG1hcCBvbmUgdG8gb25lIHRoZXNlIGFyZSBzYWZlICovCisJY29ubmVjdG9yID0gJmxkdS0+YmFzZS5jb25uZWN0b3I7CisJZW5jb2RlciA9ICZsZHUtPmJhc2UuZW5jb2RlcjsKKworCS8qIHNob3VsZCB3ZSB0dXJuIHRoZSBjcnRjIG9mZj8gKi8KKwlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA9PSAwIHx8ICFzZXQtPm1vZGUgfHwgIXNldC0+ZmIpIHsKKworCQljb25uZWN0b3ItPmVuY29kZXIgPSBOVUxMOworCQllbmNvZGVyLT5jcnRjID0gTlVMTDsKKwkJY3J0Yy0+ZmIgPSBOVUxMOworCisJCXZtd19sZHVfZGVsX2FjdGl2ZShkZXZfcHJpdiwgbGR1KTsKKworCQl2bXdfbGR1X2NvbW1pdF9saXN0KGRldl9wcml2KTsKKworCQlyZXR1cm4gMDsKKwl9CisKKworCS8qIHdlIG5vdyBrbm93IHdlIHdhbnQgdG8gc2V0IGEgbW9kZSAqLworCW1vZGUgPSBzZXQtPm1vZGU7CisJZmIgPSBzZXQtPmZiOworCisJaWYgKHNldC0+eCArIG1vZGUtPmhkaXNwbGF5ID4gZmItPndpZHRoIHx8CisJICAgIHNldC0+eSArIG1vZGUtPnZkaXNwbGF5ID4gZmItPmhlaWdodCkgeworCQlEUk1fRVJST1IoInNldCBvdXRzaWRlIG9mIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdm13X2ZiX29mZihkZXZfcHJpdik7CisKKwljcnRjLT5mYiA9IGZiOworCWVuY29kZXItPmNydGMgPSBjcnRjOworCWNvbm5lY3Rvci0+ZW5jb2RlciA9IGVuY29kZXI7CisJY3J0Yy0+eCA9IHNldC0+eDsKKwljcnRjLT55ID0gc2V0LT55OworCWNydGMtPm1vZGUgPSAqbW9kZTsKKworCXZtd19sZHVfYWRkX2FjdGl2ZShkZXZfcHJpdiwgbGR1LCB2ZmIpOworCisJdm13X2xkdV9jb21taXRfbGlzdChkZXZfcHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB2bXdfbGVnYWN5X2NydGNfZnVuY3MgPSB7CisJLnNhdmUgPSB2bXdfbGR1X2NydGNfc2F2ZSwKKwkucmVzdG9yZSA9IHZtd19sZHVfY3J0Y19yZXN0b3JlLAorCS5jdXJzb3Jfc2V0ID0gdm13X2R1X2NydGNfY3Vyc29yX3NldCwKKwkuY3Vyc29yX21vdmUgPSB2bXdfZHVfY3J0Y19jdXJzb3JfbW92ZSwKKwkuZ2FtbWFfc2V0ID0gdm13X2xkdV9jcnRjX2dhbW1hX3NldCwKKwkuZGVzdHJveSA9IHZtd19sZHVfY3J0Y19kZXN0cm95LAorCS5zZXRfY29uZmlnID0gdm13X2xkdV9jcnRjX3NldF9jb25maWcsCit9OworCisvKgorICogTGVnYWN5IERpc3BsYXkgVW5pdCBlbmNvZGVyIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHZtd19sZHVfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwl2bXdfbGR1X2Rlc3Ryb3kodm13X2VuY29kZXJfdG9fbGR1KGVuY29kZXIpKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2bXdfbGVnYWN5X2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSB2bXdfbGR1X2VuY29kZXJfZGVzdHJveSwKK307CisKKy8qCisgKiBMZWdhY3kgRGlzcGxheSBVbml0IGNvbm5lY3RvciBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCB2bXdfbGR1X2Nvbm5lY3Rvcl9kcG1zKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBtb2RlKQoreworfQorCitzdGF0aWMgdm9pZCB2bXdfbGR1X2Nvbm5lY3Rvcl9zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19sZHVfY29ubmVjdG9yX3Jlc3RvcmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKKwl2bXdfbGR1X2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwkvKiBYWFggdm13Y3RybCBzaG91bGQgY29udHJvbCBjb25uZWN0aW9uIHN0YXR1cyAqLworCWlmICh2bXdfY29ubmVjdG9yX3RvX2xkdShjb25uZWN0b3IpLT5iYXNlLnVuaXQgPT0gMCkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHZtd19sZHVfY29ubmVjdG9yX2J1aWx0aW5bXSA9IHsKKwkvKiA2NDB4NDgwQDYwSHogKi8KKwl7IERSTV9NT0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI1MTc1LCA2NDAsIDY1NiwKKwkJICAgNzUyLCA4MDAsIDAsIDQ4MCwgNDg5LCA0OTIsIDUyNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwKKwkvKiA4MDB4NjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwKKwkJICAgRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCwKKwkJICAgNDAwMDAsIDgwMCwgODQwLCA5NjgsIDEwNTYsIDAsIDYwMCwgNjAxLCA2MDUsIDYyOCwKKwkJICAgMCwgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMDI0eDc2OEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjUwMDAsIDEwMjQsIDEwNDgsCisJCSAgIDExODQsIDEzNDQsIDAsIDc2OCwgNzcxLCA3NzcsIDgwNiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwKKwkvKiAxMTUyeDg2NEA3NUh6ICovCisJeyBEUk1fTU9ERSgiMTE1Mng4NjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTA4MDAwLCAxMTUyLCAxMjE2LAorCQkgICAxMzQ0LCAxNjAwLCAwLCA4NjQsIDg2NSwgODY4LCA5MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg3NjhANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDc5NTAwLCAxMjgwLCAxMzQ0LAorCQkgICAxNDcyLCAxNjY0LCAwLCA3NjgsIDc3MSwgNzc4LCA3OTgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTI4MHg4MDBANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4ODAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDgzNTAwLCAxMjgwLCAxMzUyLAorCQkgICAxNDgwLCAxNjgwLCAwLCA4MDAsIDgwMywgODA5LCA4MzEsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sCisJLyogMTI4MHg5NjBANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4OTYwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEwODAwMCwgMTI4MCwgMTM3NiwKKwkJICAgMTQ4OCwgMTgwMCwgMCwgOTYwLCA5NjEsIDk2NCwgMTAwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxMjgweDEwMjRANjBIeiAqLworCXsgRFJNX01PREUoIjEyODB4MTAyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMDgwMDAsIDEyODAsIDEzMjgsCisJCSAgIDE0NDAsIDE2ODgsIDAsIDEwMjQsIDEwMjUsIDEwMjgsIDEwNjYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTM2MHg3NjhANjBIeiAqLworCXsgRFJNX01PREUoIjEzNjB4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDg1NTAwLCAxMzYwLCAxNDI0LAorCQkgICAxNTM2LCAxNzkyLCAwLCA3NjgsIDc3MSwgNzc3LCA3OTUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTQ0MHgxMDUwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNDAweDEwNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTIxNzUwLCAxNDAwLCAxNDg4LAorCQkgICAxNjMyLCAxODY0LCAwLCAxMDUwLCAxMDUzLCAxMDU3LCAxMDg5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE0NDB4OTAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNDQweDkwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMDY1MDAsIDE0NDAsIDE1MjAsCisJCSAgIDE2NzIsIDE5MDQsIDAsIDkwMCwgOTAzLCA5MDksIDkzNCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxNjAweDEyMDBANjBIeiAqLworCXsgRFJNX01PREUoIjE2MDB4MTIwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNjIwMDAsIDE2MDAsIDE2NjQsCisJCSAgIDE4NTYsIDIxNjAsIDAsIDEyMDAsIDEyMDEsIDEyMDQsIDEyNTAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTY4MHgxMDUwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxNjgweDEwNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTQ2MjUwLCAxNjgwLCAxNzg0LAorCQkgICAxOTYwLCAyMjQwLCAwLCAxMDUwLCAxMDUzLCAxMDU5LCAxMDg5LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE3OTJ4MTM0NEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTc5MngxMzQ0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIwNDc1MCwgMTc5MiwgMTkyMCwKKwkJICAgMjEyMCwgMjQ0OCwgMCwgMTM0NCwgMTM0NSwgMTM0OCwgMTM5NCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAxODUzeDEzOTJANjBIeiAqLworCXsgRFJNX01PREUoIjE4NTZ4MTM5MiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMTgyNTAsIDE4NTYsIDE5NTIsCisJCSAgIDIxNzYsIDI1MjgsIDAsIDEzOTIsIDEzOTMsIDEzOTYsIDE0MzksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogMTkyMHgxMjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCIxOTIweDEyMDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkzMjUwLCAxOTIwLCAyMDU2LAorCQkgICAyMjU2LCAyNTkyLCAwLCAxMjAwLCAxMjAzLCAxMjA5LCAxMjQ1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAorCS8qIDE5MjB4MTQ0MEA2MEh6ICovCisJeyBEUk1fTU9ERSgiMTkyMHgxNDQwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIzNDAwMCwgMTkyMCwgMjA0OCwKKwkJICAgMjI1NiwgMjYwMCwgMCwgMTQ0MCwgMTQ0MSwgMTQ0NCwgMTUwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKKwkvKiAyNTYweDE2MDBANjBIeiAqLworCXsgRFJNX01PREUoIjI1NjB4MTYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNDg1MDAsIDI1NjAsIDI3NTIsCisJCSAgIDMwMzIsIDM1MDQsIDAsIDE2MDAsIDE2MDMsIDE2MDksIDE2NTgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCisJLyogVGVybWluYXRlICovCisJeyBEUk1fTU9ERSgiIiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfSwKK307CisKK3N0YXRpYyBpbnQgdm13X2xkdV9jb25uZWN0b3JfZmlsbF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQl1aW50MzJfdCBtYXhfd2lkdGgsIHVpbnQzMl90IG1heF9oZWlnaHQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHZtd19sZHVfY29ubmVjdG9yX2J1aWx0aW5baV0udHlwZSAhPSAwOyBpKyspIHsKKwkJaWYgKHZtd19sZHVfY29ubmVjdG9yX2J1aWx0aW5baV0uaGRpc3BsYXkgPiBtYXhfd2lkdGggfHwKKwkJICAgIHZtd19sZHVfY29ubmVjdG9yX2J1aWx0aW5baV0udmRpc3BsYXkgPiBtYXhfaGVpZ2h0KQorCQkJY29udGludWU7CisKKwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZ2bXdfbGR1X2Nvbm5lY3Rvcl9idWlsdGluW2ldKTsKKwkJaWYgKCFtb2RlKQorCQkJcmV0dXJuIDA7CisJCW1vZGUtPnZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSk7CisKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCX0KKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9saXN0X3VwZGF0ZShjb25uZWN0b3IpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdm13X2xkdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkJCSAgdWludDY0X3QgdmFsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2bXdfbGR1X2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJdm13X2xkdV9kZXN0cm95KHZtd19jb25uZWN0b3JfdG9fbGR1KGNvbm5lY3RvcikpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mgdm13X2xlZ2FjeV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSB2bXdfbGR1X2Nvbm5lY3Rvcl9kcG1zLAorCS5zYXZlID0gdm13X2xkdV9jb25uZWN0b3Jfc2F2ZSwKKwkucmVzdG9yZSA9IHZtd19sZHVfY29ubmVjdG9yX3Jlc3RvcmUsCisJLmRldGVjdCA9IHZtd19sZHVfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IHZtd19sZHVfY29ubmVjdG9yX2ZpbGxfbW9kZXMsCisJLnNldF9wcm9wZXJ0eSA9IHZtd19sZHVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSwKKwkuZGVzdHJveSA9IHZtd19sZHVfY29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgaW50IHZtd19sZHVfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCB1bml0KQoreworCXN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXlfdW5pdCAqbGR1OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCWxkdSA9IGt6YWxsb2Moc2l6ZW9mKCpsZHUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxkdSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZHUtPnVuaXQgPSB1bml0OworCWNydGMgPSAmbGR1LT5iYXNlLmNydGM7CisJZW5jb2RlciA9ICZsZHUtPmJhc2UuZW5jb2RlcjsKKwljb25uZWN0b3IgPSAmbGR1LT5iYXNlLmNvbm5lY3RvcjsKKworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJnZtd19sZWdhY3lfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpOworCS8qIEluaXRpYWwgc3RhdHVzICovCisJaWYgKHVuaXQgPT0gMCkKKwkJY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwllbHNlCisJCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnZtd19sZWdhY3lfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX0xWRFMpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gKDEgPDwgdW5pdCk7CisJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKKworCUlOSVRfTElTVF9IRUFEKCZsZHUtPmFjdGl2ZSk7CisKKwlkcm1fY3J0Y19pbml0KGRldiwgY3J0YywgJnZtd19sZWdhY3lfY3J0Y19mdW5jcyk7CisKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5kaXJ0eV9pbmZvX3Byb3BlcnR5LAorCQkJCSAgICAgIDEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2bXdfa21zX2luaXRfbGVnYWN5X2Rpc3BsYXlfc3lzdGVtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT5sZHVfcHJpdikgeworCQlEUk1fSU5GTygibGR1IHN5c3RlbSBhbHJlYWR5IG9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X3ByaXYtPmxkdV9wcml2ID0ga21hbGxvYyhHRlBfS0VSTkVMLCBzaXplb2YoKmRldl9wcml2LT5sZHVfcHJpdikpOworCisJaWYgKCFkZXZfcHJpdi0+bGR1X3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5sZHVfcHJpdi0+YWN0aXZlKTsKKwlkZXZfcHJpdi0+bGR1X3ByaXYtPm51bV9hY3RpdmUgPSAwOworCWRldl9wcml2LT5sZHVfcHJpdi0+ZmIgPSBOVUxMOworCisJZHJtX21vZGVfY3JlYXRlX2RpcnR5X2luZm9fcHJvcGVydHkoZGV2X3ByaXYtPmRldik7CisKKwl2bXdfbGR1X2luaXQoZGV2X3ByaXYsIDApOworCXZtd19sZHVfaW5pdChkZXZfcHJpdiwgMSk7CisJdm13X2xkdV9pbml0KGRldl9wcml2LCAyKTsKKwl2bXdfbGR1X2luaXQoZGV2X3ByaXYsIDMpOworCXZtd19sZHVfaW5pdChkZXZfcHJpdiwgNCk7CisJdm13X2xkdV9pbml0KGRldl9wcml2LCA1KTsKKwl2bXdfbGR1X2luaXQoZGV2X3ByaXYsIDYpOworCXZtd19sZHVfaW5pdChkZXZfcHJpdiwgNyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19rbXNfY2xvc2VfbGVnYWN5X2Rpc3BsYXlfc3lzdGVtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKCFkZXZfcHJpdi0+bGR1X3ByaXYpCisJCXJldHVybiAtRU5PU1lTOworCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bGR1X3ByaXYtPmFjdGl2ZSkpOworCisJa2ZyZWUoZGV2X3ByaXYtPmxkdV9wcml2KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfb3ZlcmxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmU2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9vdmVybGF5LmMKQEAgLTAsMCArMSw2MzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorCisjaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKKworI2luY2x1ZGUgInN2Z2Ffb3ZlcmxheS5oIgorI2luY2x1ZGUgInN2Z2FfZXNjYXBlLmgiCisKKyNkZWZpbmUgVk1XX01BWF9OVU1fU1RSRUFNUyAxCisKK3N0cnVjdCB2bXdfc3RyZWFtIHsKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZjsKKwlib29sIGNsYWltZWQ7CisJYm9vbCBwYXVzZWQ7CisJc3RydWN0IGRybV92bXdfY29udHJvbF9zdHJlYW1fYXJnIHNhdmVkOworfTsKKworLyoqCisgKiBPdmVybGF5IGNvbnRyb2wKKyAqLworc3RydWN0IHZtd19vdmVybGF5IHsKKwkvKgorCSAqIEVhY2ggc3RyZWFtIGlzIGEgc2luZ2xlIG92ZXJsYXkuIEluIFh2IHRoZXNlIGFyZSBjYWxsZWQgcG9ydHMuCisJICovCisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCB2bXdfc3RyZWFtIHN0cmVhbVtWTVdfTUFYX05VTV9TVFJFQU1TXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZtd19vdmVybGF5ICp2bXdfb3ZlcmxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOworCXJldHVybiBkZXZfcHJpdiA/IGRldl9wcml2LT5vdmVybGF5X3ByaXYgOiBOVUxMOworfQorCitzdHJ1Y3Qgdm13X2VzY2FwZV9oZWFkZXIgeworCXVpbnQzMl90IGNtZDsKKwlTVkdBRmlmb0NtZEVzY2FwZSBib2R5OworfTsKKworc3RydWN0IHZtd19lc2NhcGVfdmlkZW9fZmx1c2ggeworCXN0cnVjdCB2bXdfZXNjYXBlX2hlYWRlciBlc2NhcGU7CisJU1ZHQUVzY2FwZVZpZGVvRmx1c2ggZmx1c2g7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9lc2NhcGUoc3RydWN0IHZtd19lc2NhcGVfaGVhZGVyICpoZWFkZXIsCisJCQkgICAgICAgdWludDMyX3Qgc2l6ZSkKK3sKKwloZWFkZXItPmNtZCA9IFNWR0FfQ01EX0VTQ0FQRTsKKwloZWFkZXItPmJvZHkubnNpZCA9IFNWR0FfRVNDQVBFX05TSURfVk1XQVJFOworCWhlYWRlci0+Ym9keS5zaXplID0gc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxfZmx1c2goc3RydWN0IHZtd19lc2NhcGVfdmlkZW9fZmx1c2ggKmNtZCwKKwkJCSAgICAgIHVpbnQzMl90IHN0cmVhbV9pZCkKK3sKKwlmaWxsX2VzY2FwZSgmY21kLT5lc2NhcGUsIHNpemVvZihjbWQtPmZsdXNoKSk7CisJY21kLT5mbHVzaC5jbWRUeXBlID0gU1ZHQV9FU0NBUEVfVk1XQVJFX1ZJREVPX0ZMVVNIOworCWNtZC0+Zmx1c2guc3RyZWFtSWQgPSBzdHJlYW1faWQ7Cit9CisKKy8qKgorICogUGluIG9yIHVucGluIGEgYnVmZmVyIGluIHZyYW0uCisgKgorICogQGRldl9wcml2OiAgRHJpdmVyIHByaXZhdGUuCisgKiBAYnVmOiAgRE1BIGJ1ZmZlciB0byBwaW4gb3IgdW5waW4uCisgKiBAcGluOiAgUGluIGJ1ZmZlciBpbiB2cmFtIGlmIHRydWUuCisgKiBAaW50ZXJydXB0aWJsZTogIFVzZSBpbnRlcnJ1cHRpYmxlIHdhaXQuCisgKgorICogVGFrZXMgdGhlIGN1cnJlbnQgbWFzdGVycyB0dG0gbG9jayBpbiByZWFkLgorICoKKyAqIFJldHVybnMKKyAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KKyAqLworc3RhdGljIGludCB2bXdfZG1hYnVmX3Bpbl9pbl92cmFtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZiwKKwkJCQkgIGJvb2wgcGluLCBib29sIGludGVycnVwdGlibGUpCit7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9ICZidWYtPmJhc2U7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKKwlzdHJ1Y3QgdHRtX3BsYWNlbWVudCAqb3ZlcmxheV9wbGFjZW1lbnQgPSAmdm13X3ZyYW1fcGxhY2VtZW50OworCWludCByZXQ7CisKKwlyZXQgPSB0dG1fcmVhZF9sb2NrKCZkZXZfcHJpdi0+YWN0aXZlX21hc3Rlci0+bG9jaywgaW50ZXJydXB0aWJsZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHR0bV9ib19yZXNlcnZlKGJvLCBpbnRlcnJ1cHRpYmxlLCBmYWxzZSwgZmFsc2UsIDApOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gZXJyOworCisJaWYgKGJ1Zi0+Z21yX2JvdW5kKSB7CisJCXZtd19nbXJfdW5iaW5kKGRldl9wcml2LCBidWYtPmdtcl9pZCk7CisJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCQlpZGFfcmVtb3ZlKCZkZXZfcHJpdi0+Z21yX2lkYSwgYnVmLT5nbXJfaWQpOworCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOworCQlidWYtPmdtcl9ib3VuZCA9IE5VTEw7CisJfQorCisJaWYgKHBpbikKKwkJb3ZlcmxheV9wbGFjZW1lbnQgPSAmdm13X3ZyYW1fbmVfcGxhY2VtZW50OworCisJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKGJvLCBvdmVybGF5X3BsYWNlbWVudCwgaW50ZXJydXB0aWJsZSwgZmFsc2UpOworCisJdHRtX2JvX3VucmVzZXJ2ZShibyk7CisKK2VycjoKKwl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5hY3RpdmVfbWFzdGVyLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogU2VuZCBwdXQgY29tbWFuZCB0byBody4KKyAqCisgKiBSZXR1cm5zCisgKiAtRVJFU1RBUlRTWVMgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCisgKi8KK3N0YXRpYyBpbnQgdm13X292ZXJsYXlfc2VuZF9wdXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZiwKKwkJCQlzdHJ1Y3QgZHJtX3Ztd19jb250cm9sX3N0cmVhbV9hcmcgKmFyZywKKwkJCQlib29sIGludGVycnVwdGlibGUpCit7CisJc3RydWN0IHsKKwkJc3RydWN0IHZtd19lc2NhcGVfaGVhZGVyIGVzY2FwZTsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCB7CisJCQkJdWludDMyX3QgY21kVHlwZTsKKwkJCQl1aW50MzJfdCBzdHJlYW1JZDsKKwkJCX0gaGVhZGVyOworCQkJc3RydWN0IHsKKwkJCQl1aW50MzJfdCByZWdpc3RlcklkOworCQkJCXVpbnQzMl90IHZhbHVlOworCQkJfSBpdGVtc1tTVkdBX1ZJREVPX1BJVENIXzMgKyAxXTsKKwkJfSBib2R5OworCQlzdHJ1Y3Qgdm13X2VzY2FwZV92aWRlb19mbHVzaCBmbHVzaDsKKwl9ICpjbWRzOworCXVpbnQzMl90IG9mZnNldDsKKwlpbnQgaSwgcmV0OworCisJZm9yICg7OykgeworCQljbWRzID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWRzKSk7CisJCWlmIChjbWRzKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gdm13X2ZhbGxiYWNrX3dhaXQoZGV2X3ByaXYsIGZhbHNlLCB0cnVlLCAwLAorCQkJCQlpbnRlcnJ1cHRpYmxlLCAzKkhaKTsKKwkJaWYgKGludGVycnVwdGlibGUgJiYgcmV0ID09IC1FUkVTVEFSVFNZUykKKwkJCXJldHVybiByZXQ7CisJCWVsc2UKKwkJCUJVR19PTihyZXQgIT0gMCk7CisJfQorCisJZmlsbF9lc2NhcGUoJmNtZHMtPmVzY2FwZSwgc2l6ZW9mKGNtZHMtPmJvZHkpKTsKKwljbWRzLT5ib2R5LmhlYWRlci5jbWRUeXBlID0gU1ZHQV9FU0NBUEVfVk1XQVJFX1ZJREVPX1NFVF9SRUdTOworCWNtZHMtPmJvZHkuaGVhZGVyLnN0cmVhbUlkID0gYXJnLT5zdHJlYW1faWQ7CisKKwlmb3IgKGkgPSAwOyBpIDw9IFNWR0FfVklERU9fUElUQ0hfMzsgaSsrKQorCQljbWRzLT5ib2R5Lml0ZW1zW2ldLnJlZ2lzdGVySWQgPSBpOworCisJb2Zmc2V0ID0gYnVmLT5iYXNlLm9mZnNldCArIGFyZy0+b2Zmc2V0OworCisJY21kcy0+Ym9keS5pdGVtc1tTVkdBX1ZJREVPX0VOQUJMRURdLnZhbHVlICAgICA9IHRydWU7CisJY21kcy0+Ym9keS5pdGVtc1tTVkdBX1ZJREVPX0ZMQUdTXS52YWx1ZSAgICAgICA9IGFyZy0+ZmxhZ3M7CisJY21kcy0+Ym9keS5pdGVtc1tTVkdBX1ZJREVPX0RBVEFfT0ZGU0VUXS52YWx1ZSA9IG9mZnNldDsKKwljbWRzLT5ib2R5Lml0ZW1zW1NWR0FfVklERU9fRk9STUFUXS52YWx1ZSAgICAgID0gYXJnLT5mb3JtYXQ7CisJY21kcy0+Ym9keS5pdGVtc1tTVkdBX1ZJREVPX0NPTE9SS0VZXS52YWx1ZSAgICA9IGFyZy0+Y29sb3Jfa2V5OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19TSVpFXS52YWx1ZSAgICAgICAgPSBhcmctPnNpemU7CisJY21kcy0+Ym9keS5pdGVtc1tTVkdBX1ZJREVPX1dJRFRIXS52YWx1ZSAgICAgICA9IGFyZy0+d2lkdGg7CisJY21kcy0+Ym9keS5pdGVtc1tTVkdBX1ZJREVPX0hFSUdIVF0udmFsdWUgICAgICA9IGFyZy0+aGVpZ2h0OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19TUkNfWF0udmFsdWUgICAgICAgPSBhcmctPnNyYy54OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19TUkNfWV0udmFsdWUgICAgICAgPSBhcmctPnNyYy55OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19TUkNfV0lEVEhdLnZhbHVlICAgPSBhcmctPnNyYy53OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19TUkNfSEVJR0hUXS52YWx1ZSAgPSBhcmctPnNyYy5oOworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19EU1RfWF0udmFsdWUgICAgICAgPSBhcmctPmRzdC54OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19EU1RfWV0udmFsdWUgICAgICAgPSBhcmctPmRzdC55OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19EU1RfV0lEVEhdLnZhbHVlICAgPSBhcmctPmRzdC53OworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19EU1RfSEVJR0hUXS52YWx1ZSAgPSBhcmctPmRzdC5oOworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19QSVRDSF8xXS52YWx1ZSAgICAgPSBhcmctPnBpdGNoWzBdOworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19QSVRDSF8yXS52YWx1ZSAgICAgPSBhcmctPnBpdGNoWzFdOworCWNtZHMtPmJvZHkuaXRlbXNbU1ZHQV9WSURFT19QSVRDSF8zXS52YWx1ZSAgICAgPSBhcmctPnBpdGNoWzJdOworCisJZmlsbF9mbHVzaCgmY21kcy0+Zmx1c2gsIGFyZy0+c3RyZWFtX2lkKTsKKworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWRzKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZW5kIHN0b3AgY29tbWFuZCB0byBody4KKyAqCisgKiBSZXR1cm5zCisgKiAtRVJFU1RBUlRTWVMgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCisgKi8KK3N0YXRpYyBpbnQgdm13X292ZXJsYXlfc2VuZF9zdG9wKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIHVpbnQzMl90IHN0cmVhbV9pZCwKKwkJCQkgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCXN0cnVjdCB7CisJCXN0cnVjdCB2bXdfZXNjYXBlX2hlYWRlciBlc2NhcGU7CisJCVNWR0FFc2NhcGVWaWRlb1NldFJlZ3MgYm9keTsKKwkJc3RydWN0IHZtd19lc2NhcGVfdmlkZW9fZmx1c2ggZmx1c2g7CisJfSAqY21kczsKKwlpbnQgcmV0OworCisJZm9yICg7OykgeworCQljbWRzID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWRzKSk7CisJCWlmIChjbWRzKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gdm13X2ZhbGxiYWNrX3dhaXQoZGV2X3ByaXYsIGZhbHNlLCB0cnVlLCAwLAorCQkJCQlpbnRlcnJ1cHRpYmxlLCAzKkhaKTsKKwkJaWYgKGludGVycnVwdGlibGUgJiYgcmV0ID09IC1FUkVTVEFSVFNZUykKKwkJCXJldHVybiByZXQ7CisJCWVsc2UKKwkJCUJVR19PTihyZXQgIT0gMCk7CisJfQorCisJZmlsbF9lc2NhcGUoJmNtZHMtPmVzY2FwZSwgc2l6ZW9mKGNtZHMtPmJvZHkpKTsKKwljbWRzLT5ib2R5LmhlYWRlci5jbWRUeXBlID0gU1ZHQV9FU0NBUEVfVk1XQVJFX1ZJREVPX1NFVF9SRUdTOworCWNtZHMtPmJvZHkuaGVhZGVyLnN0cmVhbUlkID0gc3RyZWFtX2lkOworCWNtZHMtPmJvZHkuaXRlbXNbMF0ucmVnaXN0ZXJJZCA9IFNWR0FfVklERU9fRU5BQkxFRDsKKwljbWRzLT5ib2R5Lml0ZW1zWzBdLnZhbHVlID0gZmFsc2U7CisJZmlsbF9mbHVzaCgmY21kcy0+Zmx1c2gsIHN0cmVhbV9pZCk7CisKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigqY21kcykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU3RvcCBvciBwYXVzZSBhIHN0cmVhbS4KKyAqCisgKiBJZiB0aGUgc3RyZWFtIGlzIHBhdXNlZCB0aGUgbm8gZXZpY3QgZmxhZyBpcyByZW1vdmVkIGZyb20gdGhlIGJ1ZmZlcgorICogYnV0IGxlZnQgaW4gdnJhbS4gVGhpcyBhbGxvd3MgZm9yIGluc3RhbmNlIG1vZGVfc2V0IHRvIGV2aWN0IGl0CisgKiBzaG91bGQgaXQgbmVlZCB0by4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgb3ZlcmxheSBsb2NrLgorICoKKyAqIEBzdHJlYW1faWQgd2hpY2ggc3RyZWFtIHRvIHN0b3AvcGF1c2UuCisgKiBAcGF1c2UgdHJ1ZSB0byBwYXVzZSwgZmFsc2UgdG8gc3RvcCBjb21wbGV0ZWx5LgorICovCitzdGF0aWMgaW50IHZtd19vdmVybGF5X3N0b3Aoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICB1aW50MzJfdCBzdHJlYW1faWQsIGJvb2wgcGF1c2UsCisJCQkgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCXN0cnVjdCB2bXdfb3ZlcmxheSAqb3ZlcmxheSA9IGRldl9wcml2LT5vdmVybGF5X3ByaXY7CisJc3RydWN0IHZtd19zdHJlYW0gKnN0cmVhbSA9ICZvdmVybGF5LT5zdHJlYW1bc3RyZWFtX2lkXTsKKwlpbnQgcmV0OworCisJLyogbm8gYnVmZmVyIGF0dGFjaGVkIHRoZSBzdHJlYW0gaXMgY29tcGxldGVseSBzdG9wcGVkICovCisJaWYgKCFzdHJlYW0tPmJ1ZikKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB0aGUgc3RyZWFtIGlzIHBhdXNlZCB0aGlzIGlzIGFscmVhZHkgZG9uZSAqLworCWlmICghc3RyZWFtLT5wYXVzZWQpIHsKKwkJcmV0ID0gdm13X292ZXJsYXlfc2VuZF9zdG9wKGRldl9wcml2LCBzdHJlYW1faWQsCisJCQkJCSAgICBpbnRlcnJ1cHRpYmxlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogV2UganVzdCByZW1vdmUgdGhlIE5PX0VWSUNUIGZsYWcgc28gbm8gLUVOT01FTSAqLworCQlyZXQgPSB2bXdfZG1hYnVmX3Bpbl9pbl92cmFtKGRldl9wcml2LCBzdHJlYW0tPmJ1ZiwgZmFsc2UsCisJCQkJCSAgICAgaW50ZXJydXB0aWJsZSk7CisJCWlmIChpbnRlcnJ1cHRpYmxlICYmIHJldCA9PSAtRVJFU1RBUlRTWVMpCisJCQlyZXR1cm4gcmV0OworCQllbHNlCisJCQlCVUdfT04ocmV0ICE9IDApOworCX0KKworCWlmICghcGF1c2UpIHsKKwkJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmc3RyZWFtLT5idWYpOworCQlzdHJlYW0tPnBhdXNlZCA9IGZhbHNlOworCX0gZWxzZSB7CisJCXN0cmVhbS0+cGF1c2VkID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBVcGRhdGUgYSBzdHJlYW0gYW5kIHNlbmQgYW55IHB1dCBvciBzdG9wIGZpZm8gY29tbWFuZHMgbmVlZGVkLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBvdmVybGF5IGxvY2suCisgKgorICogUmV0dXJucworICogLUVOT01FTSBpZiBidWZmZXIgZG9lc24ndCBmaXQgaW4gdnJhbS4KKyAqIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZC4KKyAqLworc3RhdGljIGludCB2bXdfb3ZlcmxheV91cGRhdGVfc3RyZWFtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZiwKKwkJCQkgICAgIHN0cnVjdCBkcm1fdm13X2NvbnRyb2xfc3RyZWFtX2FyZyAqYXJnLAorCQkJCSAgICAgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCXN0cnVjdCB2bXdfb3ZlcmxheSAqb3ZlcmxheSA9IGRldl9wcml2LT5vdmVybGF5X3ByaXY7CisJc3RydWN0IHZtd19zdHJlYW0gKnN0cmVhbSA9ICZvdmVybGF5LT5zdHJlYW1bYXJnLT5zdHJlYW1faWRdOworCWludCByZXQgPSAwOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRUlOVkFMOworCisJRFJNX0RFQlVHKCIgICAlczogb2xkICVwLCBuZXcgJXAsICVzcGF1c2VkXG4iLCBfX2Z1bmNfXywKKwkJICBzdHJlYW0tPmJ1ZiwgYnVmLCBzdHJlYW0tPnBhdXNlZCA/ICIiIDogIm5vdCAiKTsKKworCWlmIChzdHJlYW0tPmJ1ZiAhPSBidWYpIHsKKwkJcmV0ID0gdm13X292ZXJsYXlfc3RvcChkZXZfcHJpdiwgYXJnLT5zdHJlYW1faWQsCisJCQkJICAgICAgIGZhbHNlLCBpbnRlcnJ1cHRpYmxlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmICghc3RyZWFtLT5wYXVzZWQpIHsKKwkJLyogSWYgdGhlIGJ1ZmZlcnMgbWF0Y2ggYW5kIG5vdCBwYXVzZWQgdGhlbiBqdXN0IHNlbmQKKwkJICogdGhlIHB1dCBjb21tYW5kLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGVsc2UuCisJCSAqLworCQlyZXQgPSB2bXdfb3ZlcmxheV9zZW5kX3B1dChkZXZfcHJpdiwgYnVmLCBhcmcsIGludGVycnVwdGlibGUpOworCQlpZiAocmV0ID09IDApCisJCQlzdHJlYW0tPnNhdmVkID0gKmFyZzsKKwkJZWxzZQorCQkJQlVHX09OKCFpbnRlcnJ1cHRpYmxlKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFdlIGRvbid0IHN0YXJ0IHRoZSBvbGQgc3RyZWFtIGlmIHdlIGFyZSBpbnRlcnJ1cHRlZC4KKwkgKiBNaWdodCByZXR1cm4gLUVOT01FTSBpZiBpdCBjYW4ndCBmaXQgdGhlIGJ1ZmZlciBpbiB2cmFtLgorCSAqLworCXJldCA9IHZtd19kbWFidWZfcGluX2luX3ZyYW0oZGV2X3ByaXYsIGJ1ZiwgdHJ1ZSwgaW50ZXJydXB0aWJsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHZtd19vdmVybGF5X3NlbmRfcHV0KGRldl9wcml2LCBidWYsIGFyZywgaW50ZXJydXB0aWJsZSk7CisJaWYgKHJldCkgeworCQkvKiBUaGlzIG9uZSBuZWVkcyB0byBoYXBwZW4gbm8gbWF0dGVyIHdoYXQuIFdlIG9ubHkgcmVtb3ZlCisJCSAqIHRoZSBOT19FVklDVCBmbGFnIHNvIHRoaXMgaXMgc2FmZSBmcm9tIC1FTk9NRU0uCisJCSAqLworCQlCVUdfT04odm13X2RtYWJ1Zl9waW5faW5fdnJhbShkZXZfcHJpdiwgYnVmLCBmYWxzZSwgZmFsc2UpICE9IDApOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChzdHJlYW0tPmJ1ZiAhPSBidWYpCisJCXN0cmVhbS0+YnVmID0gdm13X2RtYWJ1Zl9yZWZlcmVuY2UoYnVmKTsKKwlzdHJlYW0tPnNhdmVkID0gKmFyZzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFN0b3AgYWxsIHN0cmVhbXMuCisgKgorICogVXNlZCBieSB0aGUgZmIgY29kZSB3aGVuIHN0YXJ0aW5nLgorICoKKyAqIFRha2VzIHRoZSBvdmVybGF5IGxvY2suCisgKi8KK2ludCB2bXdfb3ZlcmxheV9zdG9wX2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCB2bXdfb3ZlcmxheSAqb3ZlcmxheSA9IGRldl9wcml2LT5vdmVybGF5X3ByaXY7CisJaW50IGksIHJldDsKKworCWlmICghb3ZlcmxheSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZvdmVybGF5LT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVk1XX01BWF9OVU1fU1RSRUFNUzsgaSsrKSB7CisJCXN0cnVjdCB2bXdfc3RyZWFtICpzdHJlYW0gPSAmb3ZlcmxheS0+c3RyZWFtW2ldOworCQlpZiAoIXN0cmVhbS0+YnVmKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdm13X292ZXJsYXlfc3RvcChkZXZfcHJpdiwgaSwgZmFsc2UsIGZhbHNlKTsKKwkJV0FSTl9PTihyZXQgIT0gMCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZvdmVybGF5LT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBUcnkgdG8gcmVzdW1lIGFsbCBwYXVzZWQgc3RyZWFtcy4KKyAqCisgKiBVc2VkIGJ5IHRoZSBrbXMgY29kZSBhZnRlciBtb3ZpbmcgYSBuZXcgc2Nhbm91dCBidWZmZXIgdG8gdnJhbS4KKyAqCisgKiBUYWtlcyB0aGUgb3ZlcmxheSBsb2NrLgorICovCitpbnQgdm13X292ZXJsYXlfcmVzdW1lX2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCB2bXdfb3ZlcmxheSAqb3ZlcmxheSA9IGRldl9wcml2LT5vdmVybGF5X3ByaXY7CisJaW50IGksIHJldDsKKworCWlmICghb3ZlcmxheSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZvdmVybGF5LT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVk1XX01BWF9OVU1fU1RSRUFNUzsgaSsrKSB7CisJCXN0cnVjdCB2bXdfc3RyZWFtICpzdHJlYW0gPSAmb3ZlcmxheS0+c3RyZWFtW2ldOworCQlpZiAoIXN0cmVhbS0+cGF1c2VkKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdm13X292ZXJsYXlfdXBkYXRlX3N0cmVhbShkZXZfcHJpdiwgc3RyZWFtLT5idWYsCisJCQkJCQkmc3RyZWFtLT5zYXZlZCwgZmFsc2UpOworCQlpZiAocmV0ICE9IDApCisJCQlEUk1fSU5GTygiJXM6ICp3YXJuaW5nKiBmYWlsZWQgdG8gcmVzdW1lIHN0cmVhbSAlaVxuIiwKKwkJCQkgX19mdW5jX18sIGkpOworCX0KKworCW11dGV4X3VubG9jaygmb3ZlcmxheS0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUGF1c2VzIGFsbCBhY3RpdmUgc3RyZWFtcy4KKyAqCisgKiBVc2VkIGJ5IHRoZSBrbXMgY29kZSB3aGVuIG1vdmluZyBhIG5ldyBzY2Fub3V0IGJ1ZmZlciB0byB2cmFtLgorICoKKyAqIFRha2VzIHRoZSBvdmVybGF5IGxvY2suCisgKi8KK2ludCB2bXdfb3ZlcmxheV9wYXVzZV9hbGwoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X292ZXJsYXkgKm92ZXJsYXkgPSBkZXZfcHJpdi0+b3ZlcmxheV9wcml2OworCWludCBpLCByZXQ7CisKKwlpZiAoIW92ZXJsYXkpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmb3ZlcmxheS0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IFZNV19NQVhfTlVNX1NUUkVBTVM7IGkrKykgeworCQlpZiAob3ZlcmxheS0+c3RyZWFtW2ldLnBhdXNlZCkKKwkJCURSTV9JTkZPKCIlczogKndhcm5pbmcqIHN0cmVhbSAlaSBhbHJlYWR5IHBhdXNlZFxuIiwKKwkJCQkgX19mdW5jX18sIGkpOworCQlyZXQgPSB2bXdfb3ZlcmxheV9zdG9wKGRldl9wcml2LCBpLCB0cnVlLCBmYWxzZSk7CisJCVdBUk5fT04ocmV0ICE9IDApOworCX0KKworCW11dGV4X3VubG9jaygmb3ZlcmxheS0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2bXdfb3ZlcmxheV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13X292ZXJsYXkgKm92ZXJsYXkgPSBkZXZfcHJpdi0+b3ZlcmxheV9wcml2OworCXN0cnVjdCBkcm1fdm13X2NvbnRyb2xfc3RyZWFtX2FyZyAqYXJnID0KKwkgICAgKHN0cnVjdCBkcm1fdm13X2NvbnRyb2xfc3RyZWFtX2FyZyAqKWRhdGE7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICpidWY7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlpZiAoIW92ZXJsYXkpCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0ID0gdm13X3VzZXJfc3RyZWFtX2xvb2t1cChkZXZfcHJpdiwgdGZpbGUsICZhcmctPnN0cmVhbV9pZCwgJnJlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJm92ZXJsYXktPm11dGV4KTsKKworCWlmICghYXJnLT5lbmFibGVkKSB7CisJCXJldCA9IHZtd19vdmVybGF5X3N0b3AoZGV2X3ByaXYsIGFyZy0+c3RyZWFtX2lkLCBmYWxzZSwgdHJ1ZSk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSB2bXdfdXNlcl9kbWFidWZfbG9va3VwKHRmaWxlLCBhcmctPmhhbmRsZSwgJmJ1Zik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcmV0ID0gdm13X292ZXJsYXlfdXBkYXRlX3N0cmVhbShkZXZfcHJpdiwgYnVmLCBhcmcsIHRydWUpOworCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmYnVmKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm92ZXJsYXktPm11dGV4KTsKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X292ZXJsYXlfbnVtX292ZXJsYXlzKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKCFkZXZfcHJpdi0+b3ZlcmxheV9wcml2KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBWTVdfTUFYX05VTV9TVFJFQU1TOworfQorCitpbnQgdm13X292ZXJsYXlfbnVtX2ZyZWVfb3ZlcmxheXMoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X292ZXJsYXkgKm92ZXJsYXkgPSBkZXZfcHJpdi0+b3ZlcmxheV9wcml2OworCWludCBpLCBrOworCisJaWYgKCFvdmVybGF5KQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJm92ZXJsYXktPm11dGV4KTsKKworCWZvciAoaSA9IDAsIGsgPSAwOyBpIDwgVk1XX01BWF9OVU1fU1RSRUFNUzsgaSsrKQorCQlpZiAoIW92ZXJsYXktPnN0cmVhbVtpXS5jbGFpbWVkKQorCQkJaysrOworCisJbXV0ZXhfdW5sb2NrKCZvdmVybGF5LT5tdXRleCk7CisKKwlyZXR1cm4gazsKK30KKworaW50IHZtd19vdmVybGF5X2NsYWltKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90ICpvdXQpCit7CisJc3RydWN0IHZtd19vdmVybGF5ICpvdmVybGF5ID0gZGV2X3ByaXYtPm92ZXJsYXlfcHJpdjsKKwlpbnQgaTsKKworCWlmICghb3ZlcmxheSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwltdXRleF9sb2NrKCZvdmVybGF5LT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVk1XX01BWF9OVU1fU1RSRUFNUzsgaSsrKSB7CisKKwkJaWYgKG92ZXJsYXktPnN0cmVhbVtpXS5jbGFpbWVkKQorCQkJY29udGludWU7CisKKwkJb3ZlcmxheS0+c3RyZWFtW2ldLmNsYWltZWQgPSB0cnVlOworCQkqb3V0ID0gaTsKKwkJbXV0ZXhfdW5sb2NrKCZvdmVybGF5LT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCW11dGV4X3VubG9jaygmb3ZlcmxheS0+bXV0ZXgpOworCXJldHVybiAtRVNSQ0g7Cit9CisKK2ludCB2bXdfb3ZlcmxheV91bnJlZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBzdHJlYW1faWQpCit7CisJc3RydWN0IHZtd19vdmVybGF5ICpvdmVybGF5ID0gZGV2X3ByaXYtPm92ZXJsYXlfcHJpdjsKKworCUJVR19PTihzdHJlYW1faWQgPj0gVk1XX01BWF9OVU1fU1RSRUFNUyk7CisKKwlpZiAoIW92ZXJsYXkpCisJCXJldHVybiAtRU5PU1lTOworCisJbXV0ZXhfbG9jaygmb3ZlcmxheS0+bXV0ZXgpOworCisJV0FSTl9PTighb3ZlcmxheS0+c3RyZWFtW3N0cmVhbV9pZF0uY2xhaW1lZCk7CisJdm13X292ZXJsYXlfc3RvcChkZXZfcHJpdiwgc3RyZWFtX2lkLCBmYWxzZSwgZmFsc2UpOworCW92ZXJsYXktPnN0cmVhbVtzdHJlYW1faWRdLmNsYWltZWQgPSBmYWxzZTsKKworCW11dGV4X3VubG9jaygmb3ZlcmxheS0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQgdm13X292ZXJsYXlfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCB2bXdfb3ZlcmxheSAqb3ZlcmxheTsKKwlpbnQgaTsKKworCWlmIChkZXZfcHJpdi0+b3ZlcmxheV9wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKGRldl9wcml2LT5maWZvLmNhcGFiaWxpdGllcyAmIFNWR0FfRklGT19DQVBfVklERU8pICYmCisJICAgICAoZGV2X3ByaXYtPmZpZm8uY2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZPX0NBUF9FU0NBUEUpKSB7CisJCURSTV9JTkZPKCJoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgb3ZlcmxheXNcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlvdmVybGF5ID0ga21hbGxvYyhHRlBfS0VSTkVMLCBzaXplb2YoKm92ZXJsYXkpKTsKKwlpZiAoIW92ZXJsYXkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KG92ZXJsYXksIDAsIHNpemVvZigqb3ZlcmxheSkpOworCW11dGV4X2luaXQoJm92ZXJsYXktPm11dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgVk1XX01BWF9OVU1fU1RSRUFNUzsgaSsrKSB7CisJCW92ZXJsYXktPnN0cmVhbVtpXS5idWYgPSBOVUxMOworCQlvdmVybGF5LT5zdHJlYW1baV0ucGF1c2VkID0gZmFsc2U7CisJCW92ZXJsYXktPnN0cmVhbVtpXS5jbGFpbWVkID0gZmFsc2U7CisJfQorCisJZGV2X3ByaXYtPm92ZXJsYXlfcHJpdiA9IG92ZXJsYXk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19vdmVybGF5X2Nsb3NlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IHZtd19vdmVybGF5ICpvdmVybGF5ID0gZGV2X3ByaXYtPm92ZXJsYXlfcHJpdjsKKwlib29sIGZvcmdvdHRlbl9idWZmZXIgPSBmYWxzZTsKKwlpbnQgaTsKKworCWlmICghb3ZlcmxheSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlmb3IgKGkgPSAwOyBpIDwgVk1XX01BWF9OVU1fU1RSRUFNUzsgaSsrKSB7CisJCWlmIChvdmVybGF5LT5zdHJlYW1baV0uYnVmKSB7CisJCQlmb3Jnb3R0ZW5fYnVmZmVyID0gdHJ1ZTsKKwkJCXZtd19vdmVybGF5X3N0b3AoZGV2X3ByaXYsIGksIGZhbHNlLCBmYWxzZSk7CisJCX0KKwl9CisKKwlXQVJOX09OKGZvcmdvdHRlbl9idWZmZXIpOworCisJZGV2X3ByaXYtPm92ZXJsYXlfcHJpdiA9IE5VTEw7CisJa2ZyZWUob3ZlcmxheSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwZGQzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3JlZy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgZmlsZSBjb250YWlucyB2aXJ0dWFsIGhhcmR3YXJlIGRlZmluZXMgZm9yIGtlcm5lbCBzcGFjZS4KKyAqLworCisjaWZuZGVmIF9WTVdHRlhfUkVHX0hfCisjZGVmaW5lIF9WTVdHRlhfUkVHX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFZNV0dGWF9JTkRFWF9QT1JUICAgICAweDAKKyNkZWZpbmUgVk1XR0ZYX1ZBTFVFX1BPUlQgICAgIDB4MQorI2RlZmluZSBWTVdHRlhfSVJRU1RBVFVTX1BPUlQgMHg4CisKK3N0cnVjdCBzdmdhX2d1ZXN0X21lbV9kZXNjcmlwdG9yIHsKKwlfX2xlMzIgcHBuOworCV9fbGUzMiBudW1fcGFnZXM7Cit9OworCitzdHJ1Y3Qgc3ZnYV9maWZvX2NtZF9mZW5jZSB7CisJX19sZTMyIGZlbmNlOworfTsKKworI2RlZmluZSBTVkdBX1NZTkNfR0VORVJJQyAgICAgICAgIDEKKyNkZWZpbmUgU1ZHQV9TWU5DX0ZJRk9GVUxMICAgICAgICAyCisKKyNpbmNsdWRlICJzdmdhX3R5cGVzLmgiCisKKyNpbmNsdWRlICJzdmdhM2RfcmVnLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxMmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKQEAgLTAsMCArMSwxMTgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKyNpbmNsdWRlICJ2bXdnZnhfZHJtLmgiCisjaW5jbHVkZSAidHRtL3R0bV9vYmplY3QuaCIKKyNpbmNsdWRlICJ0dG0vdHRtX3BsYWNlbWVudC5oIgorI2luY2x1ZGUgImRybVAuaCIKKworI2RlZmluZSBWTVdfUkVTX0NPTlRFWFQgdHRtX2RyaXZlcl90eXBlMAorI2RlZmluZSBWTVdfUkVTX1NVUkZBQ0UgdHRtX2RyaXZlcl90eXBlMQorI2RlZmluZSBWTVdfUkVTX1NUUkVBTSB0dG1fZHJpdmVyX3R5cGUyCisKK3N0cnVjdCB2bXdfdXNlcl9jb250ZXh0IHsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0IGJhc2U7CisJc3RydWN0IHZtd19yZXNvdXJjZSByZXM7Cit9OworCitzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSB7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCBiYXNlOworCXN0cnVjdCB2bXdfc3VyZmFjZSBzcmY7Cit9OworCitzdHJ1Y3Qgdm13X3VzZXJfZG1hX2J1ZmZlciB7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCBiYXNlOworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciBkbWE7Cit9OworCitzdHJ1Y3Qgdm13X2JvX3VzZXJfcmVwIHsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDY0X3QgbWFwX2hhbmRsZTsKK307CisKK3N0cnVjdCB2bXdfc3RyZWFtIHsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlIHJlczsKKwl1aW50MzJfdCBzdHJlYW1faWQ7Cit9OworCitzdHJ1Y3Qgdm13X3VzZXJfc3RyZWFtIHsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0IGJhc2U7CisJc3RydWN0IHZtd19zdHJlYW0gc3RyZWFtOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKgordm13X2RtYV9idWZmZXIoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfdXNlcl9kbWFfYnVmZmVyICoKK3Ztd191c2VyX2RtYV9idWZmZXIoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKnZtd19ibyA9IHZtd19kbWFfYnVmZmVyKGJvKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHZtd19ibywgc3RydWN0IHZtd191c2VyX2RtYV9idWZmZXIsIGRtYSk7Cit9CisKK3N0cnVjdCB2bXdfcmVzb3VyY2UgKnZtd19yZXNvdXJjZV9yZWZlcmVuY2Uoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCWtyZWZfZ2V0KCZyZXMtPmtyZWYpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHZtd19yZXNvdXJjZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9CisJICAgIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgdm13X3Jlc291cmNlLCBrcmVmKTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKworCWlkcl9yZW1vdmUocmVzLT5pZHIsIHJlcy0+aWQpOworCXdyaXRlX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCisJaWYgKGxpa2VseShyZXMtPmh3X2Rlc3Ryb3kgIT0gTlVMTCkpCisJCXJlcy0+aHdfZGVzdHJveShyZXMpOworCisJaWYgKHJlcy0+cmVzX2ZyZWUgIT0gTlVMTCkKKwkJcmVzLT5yZXNfZnJlZShyZXMpOworCWVsc2UKKwkJa2ZyZWUocmVzKTsKKworCXdyaXRlX2xvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKK30KKwordm9pZCB2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2Uoc3RydWN0IHZtd19yZXNvdXJjZSAqKnBfcmVzKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9ICpwX3JlczsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKworCSpwX3JlcyA9IE5VTEw7CisJd3JpdGVfbG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCWtyZWZfcHV0KCZyZXMtPmtyZWYsIHZtd19yZXNvdXJjZV9yZWxlYXNlKTsKKwl3cml0ZV91bmxvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKK30KKworc3RhdGljIGludCB2bXdfcmVzb3VyY2VfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICBzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCisJCQkgICAgIHN0cnVjdCBpZHIgKmlkciwKKwkJCSAgICAgZW51bSB0dG1fb2JqZWN0X3R5cGUgb2JqX3R5cGUsCisJCQkgICAgIHZvaWQgKCpyZXNfZnJlZSkgKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykpCit7CisJaW50IHJldDsKKworCWtyZWZfaW5pdCgmcmVzLT5rcmVmKTsKKwlyZXMtPmh3X2Rlc3Ryb3kgPSBOVUxMOworCXJlcy0+cmVzX2ZyZWUgPSByZXNfZnJlZTsKKwlyZXMtPnJlc190eXBlID0gb2JqX3R5cGU7CisJcmVzLT5pZHIgPSBpZHI7CisJcmVzLT5hdmFpbCA9IGZhbHNlOworCXJlcy0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKKworCWRvIHsKKwkJaWYgKHVubGlrZWx5KGlkcl9wcmVfZ2V0KGlkciwgR0ZQX0tFUk5FTCkgPT0gMCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl3cml0ZV9sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisJCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKGlkciwgcmVzLCAxLCAmcmVzLT5pZCk7CisJCXdyaXRlX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCisJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2bXdfcmVzb3VyY2VfYWN0aXZhdGUKKyAqCisgKiBAcmVzOiAgICAgICAgUG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCByZXNvdXJjZQorICogQGh3X2Rlc3Ryb3k6IERlc3Ryb3kgZnVuY3Rpb24uIE5VTEwgaWYgbm9uZS4KKyAqCisgKiBBY3RpdmF0ZSBhIHJlc291cmNlIGFmdGVyIHRoZSBoYXJkd2FyZSBoYXMgYmVlbiBtYWRlIGF3YXJlIG9mIGl0LgorICogU2V0IHR5ZSBkZXN0cm95IGZ1bmN0aW9uIHRvIEBkZXN0cm95LiBUeXBpY2FsbHkgdGhpcyBmcmVlcyB0aGUKKyAqIHJlc291cmNlIGFuZCBkZXN0cm95cyB0aGUgaGFyZHdhcmUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqIEFjdGl2YXRlIGJhc2ljYWxseSBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiB2bXdfcmVzb3VyY2VfbG9va3VwIHdpbGwKKyAqIGZpbmQgaXQuCisgKi8KKworc3RhdGljIHZvaWQgdm13X3Jlc291cmNlX2FjdGl2YXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCQkgIHZvaWQgKCpod19kZXN0cm95KSAoc3RydWN0IHZtd19yZXNvdXJjZSAqKSkKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKworCXdyaXRlX2xvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMtPmF2YWlsID0gdHJ1ZTsKKwlyZXMtPmh3X2Rlc3Ryb3kgPSBod19kZXN0cm95OworCXdyaXRlX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworfQorCitzdHJ1Y3Qgdm13X3Jlc291cmNlICp2bXdfcmVzb3VyY2VfbG9va3VwKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSBzdHJ1Y3QgaWRyICppZHIsIGludCBpZCkKK3sKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisKKwlyZWFkX2xvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBpZHJfZmluZChpZHIsIGlkKTsKKwlpZiAocmVzICYmIHJlcy0+YXZhaWwpCisJCWtyZWZfZ2V0KCZyZXMtPmtyZWYpOworCWVsc2UKKwkJcmVzID0gTlVMTDsKKwlyZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCisJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcmVzOworfQorCisvKioKKyAqIENvbnRleHQgbWFuYWdlbWVudDoKKyAqLworCitzdGF0aWMgdm9pZCB2bXdfaHdfY29udGV4dF9kZXN0cm95KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERlc3Ryb3lDb250ZXh0IGJvZHk7CisJfSAqY21kID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5nIEZJRk8gc3BhY2UgZm9yIHN1cmZhY2UgIgorCQkJICAiZGVzdHJ1Y3Rpb24uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNtZC0+aGVhZGVyLmlkID0gY3B1X3RvX2xlMzIoU1ZHQV8zRF9DTURfQ09OVEVYVF9ERVNUUk9ZKTsKKwljbWQtPmhlYWRlci5zaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKGNtZC0+Ym9keSkpOworCWNtZC0+Ym9keS5jaWQgPSBjcHVfdG9fbGUzMihyZXMtPmlkKTsKKworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKK30KKworc3RhdGljIGludCB2bXdfY29udGV4dF9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJICAgIHZvaWQgKCpyZXNfZnJlZSkgKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykpCit7CisJaW50IHJldDsKKworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERlZmluZUNvbnRleHQgYm9keTsKKwl9ICpjbWQ7CisKKwlyZXQgPSB2bXdfcmVzb3VyY2VfaW5pdChkZXZfcHJpdiwgcmVzLCAmZGV2X3ByaXYtPmNvbnRleHRfaWRyLAorCQkJCVZNV19SRVNfQ09OVEVYVCwgcmVzX2ZyZWUpOworCisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlpZiAocmVzX2ZyZWUgPT0gTlVMTCkKKwkJCWtmcmVlKHJlcyk7CisJCWVsc2UKKwkJCXJlc19mcmVlKHJlcyk7CisJCXJldHVybiByZXQ7CisJfQorCisJY21kID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmlmbyByZXNlcnZlIGZhaWxlZC5cbiIpOworCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkID0gY3B1X3RvX2xlMzIoU1ZHQV8zRF9DTURfQ09OVEVYVF9ERUZJTkUpOworCWNtZC0+aGVhZGVyLnNpemUgPSBjcHVfdG9fbGUzMihzaXplb2YoY21kLT5ib2R5KSk7CisJY21kLT5ib2R5LmNpZCA9IGNwdV90b19sZTMyKHJlcy0+aWQpOworCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCXZtd19yZXNvdXJjZV9hY3RpdmF0ZShyZXMsIHZtd19od19jb250ZXh0X2Rlc3Ryb3kpOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgdm13X3Jlc291cmNlICp2bXdfY29udGV4dF9hbGxvYyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9IGttYWxsb2Moc2l6ZW9mKCpyZXMpLCBHRlBfS0VSTkVMKTsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSB2bXdfY29udGV4dF9pbml0KGRldl9wcml2LCByZXMsIE5VTEwpOworCXJldHVybiAocmV0ID09IDApID8gcmVzIDogTlVMTDsKK30KKworLyoqCisgKiBVc2VyLXNwYWNlIGNvbnRleHQgbWFuYWdlbWVudDoKKyAqLworCitzdGF0aWMgdm9pZCB2bXdfdXNlcl9jb250ZXh0X2ZyZWUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCB2bXdfdXNlcl9jb250ZXh0ICpjdHggPQorCSAgICBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3VzZXJfY29udGV4dCwgcmVzKTsKKworCWtmcmVlKGN0eCk7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB1c2VyIHNwYWNlIGhhcyBubyBtb3JlIHJlZmVyZW5jZXMgb24gdGhlCisgKiBiYXNlIG9iamVjdC4gSXQgcmVsZWFzZXMgdGhlIGJhc2Utb2JqZWN0J3MgcmVmZXJlbmNlIG9uIHRoZSByZXNvdXJjZSBvYmplY3QuCisgKi8KKworc3RhdGljIHZvaWQgdm13X3VzZXJfY29udGV4dF9iYXNlX3JlbGVhc2Uoc3RydWN0IHR0bV9iYXNlX29iamVjdCAqKnBfYmFzZSkKK3sKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlID0gKnBfYmFzZTsKKwlzdHJ1Y3Qgdm13X3VzZXJfY29udGV4dCAqY3R4ID0KKwkgICAgY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCBiYXNlKTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMgPSAmY3R4LT5yZXM7CisKKwkqcF9iYXNlID0gTlVMTDsKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7Cit9CisKK2ludCB2bXdfY29udGV4dF9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHZtd191c2VyX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgZHJtX3Ztd19jb250ZXh0X2FyZyAqYXJnID0gKHN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnICopZGF0YTsKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlpbnQgcmV0ID0gMDsKKworCXJlcyA9IHZtd19yZXNvdXJjZV9sb29rdXAoZGV2X3ByaXYsICZkZXZfcHJpdi0+Y29udGV4dF9pZHIsIGFyZy0+Y2lkKTsKKwlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZXMtPnJlc19mcmVlICE9ICZ2bXdfdXNlcl9jb250ZXh0X2ZyZWUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJY3R4ID0gY29udGFpbmVyX29mKHJlcywgc3RydWN0IHZtd191c2VyX2NvbnRleHQsIHJlcyk7CisJaWYgKGN0eC0+YmFzZS50ZmlsZSAhPSB0ZmlsZSAmJiAhY3R4LT5iYXNlLnNoYXJlYWJsZSkgeworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXR0bV9yZWZfb2JqZWN0X2Jhc2VfdW5yZWYodGZpbGUsIGN0eC0+YmFzZS5oYXNoLmtleSwgVFRNX1JFRl9VU0FHRSk7CitvdXQ6CisJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB2bXdfY29udGV4dF9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CisJc3RydWN0IHZtd191c2VyX2NvbnRleHQgKmN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqdG1wOworCXN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnICphcmcgPSAoc3RydWN0IGRybV92bXdfY29udGV4dF9hcmcgKilkYXRhOworCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOworCWludCByZXQ7CisKKwlpZiAodW5saWtlbHkoY3R4ID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9ICZjdHgtPnJlczsKKwljdHgtPmJhc2Uuc2hhcmVhYmxlID0gZmFsc2U7CisJY3R4LT5iYXNlLnRmaWxlID0gTlVMTDsKKworCXJldCA9IHZtd19jb250ZXh0X2luaXQoZGV2X3ByaXYsIHJlcywgdm13X3VzZXJfY29udGV4dF9mcmVlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdG1wID0gdm13X3Jlc291cmNlX3JlZmVyZW5jZSgmY3R4LT5yZXMpOworCXJldCA9IHR0bV9iYXNlX29iamVjdF9pbml0KHRmaWxlLCAmY3R4LT5iYXNlLCBmYWxzZSwgVk1XX1JFU19DT05URVhULAorCQkJCSAgICZ2bXdfdXNlcl9jb250ZXh0X2Jhc2VfcmVsZWFzZSwgTlVMTCk7CisKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmdG1wKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWFyZy0+Y2lkID0gcmVzLT5pZDsKK291dF9lcnI6CisJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworCXJldHVybiByZXQ7CisKK30KKworaW50IHZtd19jb250ZXh0X2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkgICAgICBpbnQgaWQpCit7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCWludCByZXQgPSAwOworCisJcmVhZF9sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gaWRyX2ZpbmQoJmRldl9wcml2LT5jb250ZXh0X2lkciwgaWQpOworCWlmIChyZXMgJiYgcmVzLT5hdmFpbCkgeworCQlzdHJ1Y3Qgdm13X3VzZXJfY29udGV4dCAqY3R4ID0KKwkJCWNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCByZXMpOworCQlpZiAoY3R4LT5iYXNlLnRmaWxlICE9IHRmaWxlICYmICFjdHgtPmJhc2Uuc2hhcmVhYmxlKQorCQkJcmV0ID0gLUVQRVJNOworCX0gZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCXJlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogU3VyZmFjZSBtYW5hZ2VtZW50LgorICovCisKK3N0YXRpYyB2b2lkIHZtd19od19zdXJmYWNlX2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRGVzdHJveVN1cmZhY2UgYm9keTsKKwl9ICpjbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgRklGTyBzcGFjZSBmb3Igc3VyZmFjZSAiCisJCQkgICJkZXN0cnVjdGlvbi5cbiIpOworCQlyZXR1cm47CisJfQorCisJY21kLT5oZWFkZXIuaWQgPSBjcHVfdG9fbGUzMihTVkdBXzNEX0NNRF9TVVJGQUNFX0RFU1RST1kpOworCWNtZC0+aGVhZGVyLnNpemUgPSBjcHVfdG9fbGUzMihzaXplb2YoY21kLT5ib2R5KSk7CisJY21kLT5ib2R5LnNpZCA9IGNwdV90b19sZTMyKHJlcy0+aWQpOworCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworfQorCit2b2lkIHZtd19zdXJmYWNlX3Jlc19mcmVlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiA9IGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfc3VyZmFjZSwgcmVzKTsKKworCWtmcmVlKHNyZi0+c2l6ZXMpOworCWtmcmVlKHNyZi0+c25vb3Blci5pbWFnZSk7CisJa2ZyZWUoc3JmKTsKK30KKworaW50IHZtd19zdXJmYWNlX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgICBzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiwKKwkJICAgICB2b2lkICgqcmVzX2ZyZWUpIChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRGVmaW5lU3VyZmFjZSBib2R5OworCX0gKmNtZDsKKwlTVkdBM2RTaXplICpjbWRfc2l6ZTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMgPSAmc3JmLT5yZXM7CisJc3RydWN0IGRybV92bXdfc2l6ZSAqc3JjX3NpemU7CisJc2l6ZV90IHN1Ym1pdF9zaXplOworCXVpbnQzMl90IGNtZF9sZW47CisJaW50IGk7CisKKwlCVUdfT04ocmVzX2ZyZWUgPT0gTlVMTCk7CisJcmV0ID0gdm13X3Jlc291cmNlX2luaXQoZGV2X3ByaXYsIHJlcywgJmRldl9wcml2LT5zdXJmYWNlX2lkciwKKwkJCQlWTVdfUkVTX1NVUkZBQ0UsIHJlc19mcmVlKTsKKworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJcmVzX2ZyZWUocmVzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzdWJtaXRfc2l6ZSA9IHNpemVvZigqY21kKSArIHNyZi0+bnVtX3NpemVzICogc2l6ZW9mKFNWR0EzZFNpemUpOworCWNtZF9sZW4gPSBzaXplb2YoY21kLT5ib2R5KSArIHNyZi0+bnVtX3NpemVzICogc2l6ZW9mKFNWR0EzZFNpemUpOworCisJY21kID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc3VibWl0X3NpemUpOworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGaWZvIHJlc2VydmUgZmFpbGVkIGZvciBjcmVhdGUgc3VyZmFjZS5cbiIpOworCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkID0gY3B1X3RvX2xlMzIoU1ZHQV8zRF9DTURfU1VSRkFDRV9ERUZJTkUpOworCWNtZC0+aGVhZGVyLnNpemUgPSBjcHVfdG9fbGUzMihjbWRfbGVuKTsKKwljbWQtPmJvZHkuc2lkID0gY3B1X3RvX2xlMzIocmVzLT5pZCk7CisJY21kLT5ib2R5LnN1cmZhY2VGbGFncyA9IGNwdV90b19sZTMyKHNyZi0+ZmxhZ3MpOworCWNtZC0+Ym9keS5mb3JtYXQgPSBjcHVfdG9fbGUzMihzcmYtPmZvcm1hdCk7CisJZm9yIChpID0gMDsgaSA8IERSTV9WTVdfTUFYX1NVUkZBQ0VfRkFDRVM7ICsraSkgeworCQljbWQtPmJvZHkuZmFjZVtpXS5udW1NaXBMZXZlbHMgPQorCQkgICAgY3B1X3RvX2xlMzIoc3JmLT5taXBfbGV2ZWxzW2ldKTsKKwl9CisKKwljbWQgKz0gMTsKKwljbWRfc2l6ZSA9IChTVkdBM2RTaXplICopIGNtZDsKKwlzcmNfc2l6ZSA9IHNyZi0+c2l6ZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3JmLT5udW1fc2l6ZXM7ICsraSwgY21kX3NpemUrKywgc3JjX3NpemUrKykgeworCQljbWRfc2l6ZS0+d2lkdGggPSBjcHVfdG9fbGUzMihzcmNfc2l6ZS0+d2lkdGgpOworCQljbWRfc2l6ZS0+aGVpZ2h0ID0gY3B1X3RvX2xlMzIoc3JjX3NpemUtPmhlaWdodCk7CisJCWNtZF9zaXplLT5kZXB0aCA9IGNwdV90b19sZTMyKHNyY19zaXplLT5kZXB0aCk7CisJfQorCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzdWJtaXRfc2l6ZSk7CisJdm13X3Jlc291cmNlX2FjdGl2YXRlKHJlcywgdm13X2h3X3N1cmZhY2VfZGVzdHJveSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtd191c2VyX3N1cmZhY2VfZnJlZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPSBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3N1cmZhY2UsIHJlcyk7CisJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmID0KKwkgICAgY29udGFpbmVyX29mKHNyZiwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIHNyZik7CisKKwlrZnJlZShzcmYtPnNpemVzKTsKKwlrZnJlZShzcmYtPnNub29wZXIuaW1hZ2UpOworCWtmcmVlKHVzZXJfc3JmKTsKK30KKworaW50IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJCSAgIHVpbnQzMl90IGhhbmRsZSwgc3RydWN0IHZtd19zdXJmYWNlICoqb3V0KQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZjsKKwlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWJhc2UgPSB0dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCBoYW5kbGUpOworCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShiYXNlLT5vYmplY3RfdHlwZSAhPSBWTVdfUkVTX1NVUkZBQ0UpKQorCQlnb3RvIG91dF9iYWRfcmVzb3VyY2U7CisKKwl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgYmFzZSk7CisJc3JmID0gJnVzZXJfc3JmLT5zcmY7CisJcmVzID0gJnNyZi0+cmVzOworCisJcmVhZF9sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoIXJlcy0+YXZhaWwgfHwgcmVzLT5yZXNfZnJlZSAhPSAmdm13X3VzZXJfc3VyZmFjZV9mcmVlKSB7CisJCXJlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzb3VyY2VfbG9jayk7CisJCWdvdG8gb3V0X2JhZF9yZXNvdXJjZTsKKwl9CisKKwlrcmVmX2dldCgmcmVzLT5rcmVmKTsKKwlyZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCisJKm91dCA9IHNyZjsKKwlyZXQgPSAwOworCitvdXRfYmFkX3Jlc291cmNlOgorCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2bXdfdXNlcl9zdXJmYWNlX2Jhc2VfcmVsZWFzZShzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICoqcF9iYXNlKQoreworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2UgPSAqcF9iYXNlOworCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZiA9CisJICAgIGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgYmFzZSk7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzID0gJnVzZXJfc3JmLT5zcmYucmVzOworCisJKnBfYmFzZSA9IE5VTEw7CisJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworfQorCitpbnQgdm13X3N1cmZhY2VfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgKmFyZyA9IChzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyAqKWRhdGE7CisJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGU7CisKKwlyZXR1cm4gdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgYXJnLT5zaWQsIFRUTV9SRUZfVVNBR0UpOworfQorCitpbnQgdm13X3N1cmZhY2VfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOworCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZiA9CisJICAgIGttYWxsb2Moc2l6ZW9mKCp1c2VyX3NyZiksIEdGUF9LRVJORUwpOworCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICp0bXA7CisJdW5pb24gZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9hcmcgKmFyZyA9CisJICAgICh1bmlvbiBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX2FyZyAqKWRhdGE7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9jcmVhdGVfcmVxICpyZXEgPSAmYXJnLT5yZXE7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgKnJlcCA9ICZhcmctPnJlcDsKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlzdHJ1Y3QgZHJtX3Ztd19zaXplIF9fdXNlciAqdXNlcl9zaXplczsKKwlpbnQgcmV0OworCWludCBpOworCisJaWYgKHVubGlrZWx5KHVzZXJfc3JmID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNyZiA9ICZ1c2VyX3NyZi0+c3JmOworCXJlcyA9ICZzcmYtPnJlczsKKworCXNyZi0+ZmxhZ3MgPSByZXEtPmZsYWdzOworCXNyZi0+Zm9ybWF0ID0gcmVxLT5mb3JtYXQ7CisJbWVtY3B5KHNyZi0+bWlwX2xldmVscywgcmVxLT5taXBfbGV2ZWxzLCBzaXplb2Yoc3JmLT5taXBfbGV2ZWxzKSk7CisJc3JmLT5udW1fc2l6ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTOyArK2kpCisJCXNyZi0+bnVtX3NpemVzICs9IHNyZi0+bWlwX2xldmVsc1tpXTsKKworCWlmIChzcmYtPm51bV9zaXplcyA+IERSTV9WTVdfTUFYX1NVUkZBQ0VfRkFDRVMgKgorCSAgICBEUk1fVk1XX01BWF9NSVBfTEVWRUxTKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2VycjA7CisJfQorCisJc3JmLT5zaXplcyA9IGttYWxsb2Moc3JmLT5udW1fc2l6ZXMgKiBzaXplb2YoKnNyZi0+c2l6ZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoc3JmLT5zaXplcyA9PSBOVUxMKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnIwOworCX0KKworCXVzZXJfc2l6ZXMgPSAoc3RydWN0IGRybV92bXdfc2l6ZSBfX3VzZXIgKikodW5zaWduZWQgbG9uZykKKwkgICAgcmVxLT5zaXplX2FkZHI7CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihzcmYtPnNpemVzLCB1c2VyX3NpemVzLAorCQkJICAgICBzcmYtPm51bV9zaXplcyAqIHNpemVvZigqc3JmLT5zaXplcykpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X2VycjE7CisKKwl1c2VyX3NyZi0+YmFzZS5zaGFyZWFibGUgPSBmYWxzZTsKKwl1c2VyX3NyZi0+YmFzZS50ZmlsZSA9IE5VTEw7CisKKwkvKioKKwkgKiBGcm9tIHRoaXMgcG9pbnQsIHRoZSBnZW5lcmljIHJlc291cmNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisJICogZGVzdHJveSB0aGUgb2JqZWN0IG9uIGZhaWx1cmUuCisJICovCisKKwlyZXQgPSB2bXdfc3VyZmFjZV9pbml0KGRldl9wcml2LCBzcmYsIHZtd191c2VyX3N1cmZhY2VfZnJlZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCXRtcCA9IHZtd19yZXNvdXJjZV9yZWZlcmVuY2UoJnNyZi0+cmVzKTsKKwlyZXQgPSB0dG1fYmFzZV9vYmplY3RfaW5pdCh0ZmlsZSwgJnVzZXJfc3JmLT5iYXNlLAorCQkJCSAgIHJlcS0+c2hhcmVhYmxlLCBWTVdfUkVTX1NVUkZBQ0UsCisJCQkJICAgJnZtd191c2VyX3N1cmZhY2VfYmFzZV9yZWxlYXNlLCBOVUxMKTsKKworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZ0bXApOworCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHNyZi0+ZmxhZ3MgJiAoMSA8PCA5KSAmJgorCSAgICBzcmYtPm51bV9zaXplcyA9PSAxICYmCisJICAgIHNyZi0+c2l6ZXNbMF0ud2lkdGggPT0gNjQgJiYKKwkgICAgc3JmLT5zaXplc1swXS5oZWlnaHQgPT0gNjQgJiYKKwkgICAgc3JmLT5mb3JtYXQgPT0gU1ZHQTNEX0E4UjhHOEI4KSB7CisKKwkJc3JmLT5zbm9vcGVyLmltYWdlID0ga21hbGxvYyg2NCAqIDY0ICogNCwgR0ZQX0tFUk5FTCk7CisJCS8qIGNsZWFyIHRoZSBpbWFnZSAqLworCQlpZiAoc3JmLT5zbm9vcGVyLmltYWdlKQorCQkJbWVtc2V0KHNyZi0+c25vb3Blci5pbWFnZSwgMHgwMCwgNjQgKiA2NCAqIDQpOworCQllbHNlCisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBjdXJzb3JfaW1hZ2VcbiIpOworCisJfSBlbHNlIHsKKwkJc3JmLT5zbm9vcGVyLmltYWdlID0gTlVMTDsKKwl9CisJc3JmLT5zbm9vcGVyLmNydGMgPSBOVUxMOworCisJcmVwLT5zaWQgPSB1c2VyX3NyZi0+YmFzZS5oYXNoLmtleTsKKwlpZiAocmVwLT5zaWQgPT0gU1ZHQTNEX0lOVkFMSURfSUQpCisJCURSTV9FUlJPUigiQ3JlYXRlZCBiYWQgU3VyZmFjZSBJRC5cbiIpOworCisJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworCXJldHVybiAwOworb3V0X2VycjE6CisJa2ZyZWUoc3JmLT5zaXplcyk7CitvdXRfZXJyMDoKKwlrZnJlZSh1c2VyX3NyZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHZtd19zdXJmYWNlX3JlZmVyZW5jZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXVuaW9uIGRybV92bXdfc3VyZmFjZV9yZWZlcmVuY2VfYXJnICphcmcgPQorCSAgICAodW5pb24gZHJtX3Ztd19zdXJmYWNlX3JlZmVyZW5jZV9hcmcgKilkYXRhOworCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnICpyZXEgPSAmYXJnLT5yZXE7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9jcmVhdGVfcmVxICpyZXAgPSAmYXJnLT5yZXA7CisJc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGU7CisJc3RydWN0IHZtd19zdXJmYWNlICpzcmY7CisJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOworCXN0cnVjdCBkcm1fdm13X3NpemUgX191c2VyICp1c2VyX3NpemVzOworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwliYXNlID0gdHRtX2Jhc2Vfb2JqZWN0X2xvb2t1cCh0ZmlsZSwgcmVxLT5zaWQpOworCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiQ291bGQgbm90IGZpbmQgc3VyZmFjZSB0byByZWZlcmVuY2UuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KGJhc2UtPm9iamVjdF90eXBlICE9IFZNV19SRVNfU1VSRkFDRSkpCisJCWdvdG8gb3V0X2JhZF9yZXNvdXJjZTsKKworCXVzZXJfc3JmID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBiYXNlKTsKKwlzcmYgPSAmdXNlcl9zcmYtPnNyZjsKKworCXJldCA9IHR0bV9yZWZfb2JqZWN0X2FkZCh0ZmlsZSwgJnVzZXJfc3JmLT5iYXNlLCBUVE1fUkVGX1VTQUdFLCBOVUxMKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCURSTV9FUlJPUigiQ291bGQgbm90IGFkZCBhIHJlZmVyZW5jZSB0byBhIHN1cmZhY2UuXG4iKTsKKwkJZ290byBvdXRfbm9fcmVmZXJlbmNlOworCX0KKworCXJlcC0+ZmxhZ3MgPSBzcmYtPmZsYWdzOworCXJlcC0+Zm9ybWF0ID0gc3JmLT5mb3JtYXQ7CisJbWVtY3B5KHJlcC0+bWlwX2xldmVscywgc3JmLT5taXBfbGV2ZWxzLCBzaXplb2Yoc3JmLT5taXBfbGV2ZWxzKSk7CisJdXNlcl9zaXplcyA9IChzdHJ1Y3QgZHJtX3Ztd19zaXplIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKQorCSAgICByZXAtPnNpemVfYWRkcjsKKworCWlmICh1c2VyX3NpemVzKQorCQlyZXQgPSBjb3B5X3RvX3VzZXIodXNlcl9zaXplcywgc3JmLT5zaXplcywKKwkJCQkgICBzcmYtPm51bV9zaXplcyAqIHNpemVvZigqc3JmLT5zaXplcykpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCURSTV9FUlJPUigiY29weV90b191c2VyIGZhaWxlZCAlcCAldVxuIiwKKwkJCSAgdXNlcl9zaXplcywgc3JmLT5udW1fc2l6ZXMpOworb3V0X2JhZF9yZXNvdXJjZToKK291dF9ub19yZWZlcmVuY2U6CisJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB2bXdfc3VyZmFjZV9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJICAgICAgdWludDMyX3QgaGFuZGxlLCBpbnQgKmlkKQoreworCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7CisJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzZXJfc3JmOworCisJaW50IHJldCA9IC1FUEVSTTsKKworCWJhc2UgPSB0dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCBoYW5kbGUpOworCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShiYXNlLT5vYmplY3RfdHlwZSAhPSBWTVdfUkVTX1NVUkZBQ0UpKQorCQlnb3RvIG91dF9iYWRfc3VyZmFjZTsKKworCXVzZXJfc3JmID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBiYXNlKTsKKwkqaWQgPSB1c2VyX3NyZi0+c3JmLnJlcy5pZDsKKwlyZXQgPSAwOworCitvdXRfYmFkX3N1cmZhY2U6CisJLyoqCisJICogRklYTUU6IE1heSBkZWFkbG9jayBoZXJlIHdoZW4gY2FsbGVkIGZyb20gdGhlCisJICogY29tbWFuZCBwYXJzaW5nIGNvZGUuCisJICovCisKKwl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQnVmZmVyIG1hbmFnZW1lbnQuCisgKi8KKworc3RhdGljIHNpemVfdCB2bXdfZG1hYnVmX2FjY19zaXplKHN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iLAorCQkJCSAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpCit7CisJc3RhdGljIHNpemVfdCBib191c2VyX3NpemUgPSB+MDsKKworCXNpemVfdCBwYWdlX2FycmF5X3NpemUgPQorCSAgICAobnVtX3BhZ2VzICogc2l6ZW9mKHZvaWQgKikgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKKworCWlmICh1bmxpa2VseShib191c2VyX3NpemUgPT0gfjApKSB7CisJCWJvX3VzZXJfc2l6ZSA9IGdsb2ItPnR0bV9ib19leHRyYV9zaXplICsKKwkJICAgIHR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfZG1hX2J1ZmZlcikpOworCX0KKworCXJldHVybiBib191c2VyX3NpemUgKyBwYWdlX2FycmF5X3NpemU7Cit9CisKK3ZvaWQgdm13X2RtYWJ1Zl9ib19mcmVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm8gPSB2bXdfZG1hX2J1ZmZlcihibyk7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJY29udGFpbmVyX29mKGJvLT5iZGV2LCBzdHJ1Y3Qgdm13X3ByaXZhdGUsIGJkZXYpOworCisJdHRtX21lbV9nbG9iYWxfZnJlZShnbG9iLT5tZW1fZ2xvYiwgYm8tPmFjY19zaXplKTsKKwlpZiAodm13X2JvLT5nbXJfYm91bmQpIHsKKwkJdm13X2dtcl91bmJpbmQoZGV2X3ByaXYsIHZtd19iby0+Z21yX2lkKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCWlkYV9yZW1vdmUoJmRldl9wcml2LT5nbXJfaWRhLCB2bXdfYm8tPmdtcl9pZCk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJfQorCWtmcmVlKHZtd19ibyk7Cit9CisKK2ludCB2bXdfZG1hYnVmX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgIHN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvLAorCQkgICAgc2l6ZV90IHNpemUsIHN0cnVjdCB0dG1fcGxhY2VtZW50ICpwbGFjZW1lbnQsCisJCSAgICBib29sIGludGVycnVwdGlibGUsCisJCSAgICB2b2lkICgqYm9fZnJlZSkgKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pKQoreworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gJmRldl9wcml2LT5iZGV2OworCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IgPSBiZGV2LT5nbG9iLT5tZW1fZ2xvYjsKKwlzaXplX3QgYWNjX3NpemU7CisJaW50IHJldDsKKworCUJVR19PTighYm9fZnJlZSk7CisKKwlhY2Nfc2l6ZSA9CisJICAgIHZtd19kbWFidWZfYWNjX3NpemUoYmRldi0+Z2xvYiwKKwkJCQkoc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpOworCisJcmV0ID0gdHRtX21lbV9nbG9iYWxfYWxsb2MobWVtX2dsb2IsIGFjY19zaXplLCBmYWxzZSwgZmFsc2UpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJLyogd2UgbXVzdCBmcmVlIHRoZSBibyBoZXJlIGFzCisJCSAqIHR0bV9idWZmZXJfb2JqZWN0X2luaXQgZG9lcyBzbyBhcyB3ZWxsICovCisJCWJvX2ZyZWUoJnZtd19iby0+YmFzZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJbWVtc2V0KHZtd19ibywgMCwgc2l6ZW9mKCp2bXdfYm8pKTsKKworCUlOSVRfTElTVF9IRUFEKCZ2bXdfYm8tPmdtcl9scnUpOworCUlOSVRfTElTVF9IRUFEKCZ2bXdfYm8tPnZhbGlkYXRlX2xpc3QpOworCXZtd19iby0+Z21yX2lkID0gMDsKKwl2bXdfYm8tPmdtcl9ib3VuZCA9IGZhbHNlOworCisJcmV0ID0gdHRtX2JvX2luaXQoYmRldiwgJnZtd19iby0+YmFzZSwgc2l6ZSwKKwkJCSAgdHRtX2JvX3R5cGVfZGV2aWNlLCBwbGFjZW1lbnQsCisJCQkgIDAsIDAsIGludGVycnVwdGlibGUsCisJCQkgIE5VTEwsIGFjY19zaXplLCBib19mcmVlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2bXdfdXNlcl9kbWFidWZfZGVzdHJveShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQoreworCXN0cnVjdCB2bXdfdXNlcl9kbWFfYnVmZmVyICp2bXdfdXNlcl9ibyA9IHZtd191c2VyX2RtYV9idWZmZXIoYm8pOworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvID0gJnZtd191c2VyX2JvLT5kbWE7CisJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+Z2xvYjsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJY29udGFpbmVyX29mKGJvLT5iZGV2LCBzdHJ1Y3Qgdm13X3ByaXZhdGUsIGJkZXYpOworCisJdHRtX21lbV9nbG9iYWxfZnJlZShnbG9iLT5tZW1fZ2xvYiwgYm8tPmFjY19zaXplKTsKKwlpZiAodm13X2JvLT5nbXJfYm91bmQpIHsKKwkJdm13X2dtcl91bmJpbmQoZGV2X3ByaXYsIHZtd19iby0+Z21yX2lkKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCWlkYV9yZW1vdmUoJmRldl9wcml2LT5nbXJfaWRhLCB2bXdfYm8tPmdtcl9pZCk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJfQorCWtmcmVlKHZtd191c2VyX2JvKTsKK30KKworc3RhdGljIHZvaWQgdm13X3VzZXJfZG1hYnVmX3JlbGVhc2Uoc3RydWN0IHR0bV9iYXNlX29iamVjdCAqKnBfYmFzZSkKK3sKKwlzdHJ1Y3Qgdm13X3VzZXJfZG1hX2J1ZmZlciAqdm13X3VzZXJfYm87CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZSA9ICpwX2Jhc2U7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKKworCSpwX2Jhc2UgPSBOVUxMOworCisJaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpCisJCXJldHVybjsKKworCXZtd191c2VyX2JvID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9kbWFfYnVmZmVyLCBiYXNlKTsKKwlibyA9ICZ2bXdfdXNlcl9iby0+ZG1hLmJhc2U7CisJdHRtX2JvX3VucmVmKCZibyk7Cit9CisKK2ludCB2bXdfZG1hYnVmX2FsbG9jX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwl1bmlvbiBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9hcmcgKmFyZyA9CisJICAgICh1bmlvbiBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9hcmcgKilkYXRhOworCXN0cnVjdCBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9yZXEgKnJlcSA9ICZhcmctPnJlcTsKKwlzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwICpyZXAgPSAmYXJnLT5yZXA7CisJc3RydWN0IHZtd191c2VyX2RtYV9idWZmZXIgKnZtd191c2VyX2JvOworCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdG1wOworCXN0cnVjdCB2bXdfbWFzdGVyICp2bWFzdGVyID0gdm13X21hc3RlcihmaWxlX3ByaXYtPm1hc3Rlcik7CisJaW50IHJldDsKKworCXZtd191c2VyX2JvID0ga3phbGxvYyhzaXplb2YoKnZtd191c2VyX2JvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHZtd191c2VyX2JvID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHR0bV9yZWFkX2xvY2soJnZtYXN0ZXItPmxvY2ssIHRydWUpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJa2ZyZWUodm13X3VzZXJfYm8pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHZtd19kbWFidWZfaW5pdChkZXZfcHJpdiwgJnZtd191c2VyX2JvLT5kbWEsIHJlcS0+c2l6ZSwKKwkJCSAgICAgICZ2bXdfdnJhbV9wbGFjZW1lbnQsIHRydWUsCisJCQkgICAgICAmdm13X3VzZXJfZG1hYnVmX2Rlc3Ryb3kpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwl0bXAgPSB0dG1fYm9fcmVmZXJlbmNlKCZ2bXdfdXNlcl9iby0+ZG1hLmJhc2UpOworCXJldCA9IHR0bV9iYXNlX29iamVjdF9pbml0KHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwKKwkJCQkgICAmdm13X3VzZXJfYm8tPmJhc2UsCisJCQkJICAgZmFsc2UsCisJCQkJICAgdHRtX2J1ZmZlcl90eXBlLAorCQkJCSAgICZ2bXdfdXNlcl9kbWFidWZfcmVsZWFzZSwgTlVMTCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQl0dG1fYm9fdW5yZWYoJnRtcCk7CisJfSBlbHNlIHsKKwkJcmVwLT5oYW5kbGUgPSB2bXdfdXNlcl9iby0+YmFzZS5oYXNoLmtleTsKKwkJcmVwLT5tYXBfaGFuZGxlID0gdm13X3VzZXJfYm8tPmRtYS5iYXNlLmFkZHJfc3BhY2Vfb2Zmc2V0OworCQlyZXAtPmN1cl9nbXJfaWQgPSB2bXdfdXNlcl9iby0+YmFzZS5oYXNoLmtleTsKKwkJcmVwLT5jdXJfZ21yX29mZnNldCA9IDA7CisJfQorCXR0bV9ib191bnJlZigmdG1wKTsKKworCXR0bV9yZWFkX3VubG9jaygmdm1hc3Rlci0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZtd19kbWFidWZfdW5yZWZfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fdm13X3VucmVmX2RtYWJ1Zl9hcmcgKmFyZyA9CisJICAgIChzdHJ1Y3QgZHJtX3Ztd191bnJlZl9kbWFidWZfYXJnICopZGF0YTsKKworCXJldHVybiB0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwKKwkJCQkJIGFyZy0+aGFuZGxlLAorCQkJCQkgVFRNX1JFRl9VU0FHRSk7Cit9CisKK3VpbnQzMl90IHZtd19kbWFidWZfdmFsaWRhdGVfbm9kZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJCSAgdWludDMyX3QgY3VyX3ZhbGlkYXRlX25vZGUpCit7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm8gPSB2bXdfZG1hX2J1ZmZlcihibyk7CisKKwlpZiAobGlrZWx5KHZtd19iby0+b25fdmFsaWRhdGVfbGlzdCkpCisJCXJldHVybiB2bXdfYm8tPmN1cl92YWxpZGF0ZV9ub2RlOworCisJdm13X2JvLT5jdXJfdmFsaWRhdGVfbm9kZSA9IGN1cl92YWxpZGF0ZV9ub2RlOworCXZtd19iby0+b25fdmFsaWRhdGVfbGlzdCA9IHRydWU7CisKKwlyZXR1cm4gY3VyX3ZhbGlkYXRlX25vZGU7Cit9CisKK3ZvaWQgdm13X2RtYWJ1Zl92YWxpZGF0ZV9jbGVhcihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQoreworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvID0gdm13X2RtYV9idWZmZXIoYm8pOworCisJdm13X2JvLT5vbl92YWxpZGF0ZV9saXN0ID0gZmFsc2U7Cit9CisKK3VpbnQzMl90IHZtd19kbWFidWZfZ21yKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJc3RydWN0IHZtd19kbWFfYnVmZmVyICp2bXdfYm87CisKKwlpZiAoYm8tPm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSkKKwkJcmV0dXJuIFNWR0FfR01SX0ZSQU1FQlVGRkVSOworCisJdm13X2JvID0gdm13X2RtYV9idWZmZXIoYm8pOworCisJcmV0dXJuICh2bXdfYm8tPmdtcl9ib3VuZCkgPyB2bXdfYm8tPmdtcl9pZCA6IFNWR0FfR01SX05VTEw7Cit9CisKK3ZvaWQgdm13X2RtYWJ1Zl9zZXRfZ21yKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIHVpbnQzMl90IGlkKQoreworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvID0gdm13X2RtYV9idWZmZXIoYm8pOworCXZtd19iby0+Z21yX2JvdW5kID0gdHJ1ZTsKKwl2bXdfYm8tPmdtcl9pZCA9IGlkOworfQorCitpbnQgdm13X3VzZXJfZG1hYnVmX2xvb2t1cChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCSAgIHVpbnQzMl90IGhhbmRsZSwgc3RydWN0IHZtd19kbWFfYnVmZmVyICoqb3V0KQoreworCXN0cnVjdCB2bXdfdXNlcl9kbWFfYnVmZmVyICp2bXdfdXNlcl9ibzsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOworCisJYmFzZSA9IHR0bV9iYXNlX29iamVjdF9sb29rdXAodGZpbGUsIGhhbmRsZSk7CisJaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGJ1ZmZlciBvYmplY3QgaGFuZGxlIDB4JTA4bHguXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKKwkJcmV0dXJuIC1FU1JDSDsKKwl9CisKKwlpZiAodW5saWtlbHkoYmFzZS0+b2JqZWN0X3R5cGUgIT0gdHRtX2J1ZmZlcl90eXBlKSkgeworCQl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYnVmZmVyIG9iamVjdCBoYW5kbGUgMHglMDhseC5cbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyloYW5kbGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2bXdfdXNlcl9ibyA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfZG1hX2J1ZmZlciwgYmFzZSk7CisJKHZvaWQpdHRtX2JvX3JlZmVyZW5jZSgmdm13X3VzZXJfYm8tPmRtYS5iYXNlKTsKKwl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCSpvdXQgPSAmdm13X3VzZXJfYm8tPmRtYTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFRPRE86IEltcGxlbWVudCBhIGdtciBpZCBldmljdGlvbiBtZWNoYW5pc20uIEN1cnJlbnRseSB3ZSBqdXN0IGZhaWwKKyAqIHdoZW4gd2UncmUgb3V0IG9mIGlkcywgY2F1c2luZyBHTVIgc3BhY2UgdG8gYmUgYWxsb2NhdGVkCisgKiBvdXQgb2YgVlJBTS4KKyAqLworCitpbnQgdm13X2dtcl9pZF9hbGxvYyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCAqcF9pZCkKK3sKKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGRldl9wcml2LT5iZGV2Lmdsb2I7CisJaW50IGlkOworCWludCByZXQ7CisKKwlkbyB7CisJCWlmICh1bmxpa2VseShpZGFfcHJlX2dldCgmZGV2X3ByaXYtPmdtcl9pZGEsIEdGUF9LRVJORUwpID09IDApKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCXJldCA9IGlkYV9nZXRfbmV3KCZkZXZfcHJpdi0+Z21yX2lkYSwgJmlkKTsKKwkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7CisKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHVubGlrZWx5KGlkID49IGRldl9wcml2LT5tYXhfZ21yX2lkcykpIHsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCWlkYV9yZW1vdmUoJmRldl9wcml2LT5nbXJfaWRhLCBpZCk7CisJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJKnBfaWQgPSAodWludDMyX3QpIGlkOworCXJldHVybiAwOworfQorCisvKgorICogU3RyZWFtIG1hbmFnbWVudAorICovCisKK3N0YXRpYyB2b2lkIHZtd19zdHJlYW1fZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHZtd19zdHJlYW0gKnN0cmVhbTsKKwlpbnQgcmV0OworCisJRFJNX0lORk8oIiVzOiB1bnJlZlxuIiwgX19mdW5jX18pOworCXN0cmVhbSA9IGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfc3RyZWFtLCByZXMpOworCisJcmV0ID0gdm13X292ZXJsYXlfdW5yZWYoZGV2X3ByaXYsIHN0cmVhbS0+c3RyZWFtX2lkKTsKKwlXQVJOX09OKHJldCAhPSAwKTsKK30KKworc3RhdGljIGludCB2bXdfc3RyZWFtX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIHN0cnVjdCB2bXdfc3RyZWFtICpzdHJlYW0sCisJCQkgICB2b2lkICgqcmVzX2ZyZWUpIChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9ICZzdHJlYW0tPnJlczsKKwlpbnQgcmV0OworCisJcmV0ID0gdm13X3Jlc291cmNlX2luaXQoZGV2X3ByaXYsIHJlcywgJmRldl9wcml2LT5zdHJlYW1faWRyLAorCQkJCVZNV19SRVNfU1RSRUFNLCByZXNfZnJlZSk7CisKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCWlmIChyZXNfZnJlZSA9PSBOVUxMKQorCQkJa2ZyZWUoc3RyZWFtKTsKKwkJZWxzZQorCQkJcmVzX2ZyZWUoJnN0cmVhbS0+cmVzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB2bXdfb3ZlcmxheV9jbGFpbShkZXZfcHJpdiwgJnN0cmVhbS0+c3RyZWFtX2lkKTsKKwlpZiAocmV0KSB7CisJCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlEUk1fSU5GTygiJXM6IGNsYWltZWRcbiIsIF9fZnVuY19fKTsKKworCXZtd19yZXNvdXJjZV9hY3RpdmF0ZSgmc3RyZWFtLT5yZXMsIHZtd19zdHJlYW1fZGVzdHJveSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogVXNlci1zcGFjZSBjb250ZXh0IG1hbmFnZW1lbnQ6CisgKi8KKworc3RhdGljIHZvaWQgdm13X3VzZXJfc3RyZWFtX2ZyZWUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCB2bXdfdXNlcl9zdHJlYW0gKnN0cmVhbSA9CisJICAgIGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfdXNlcl9zdHJlYW0sIHN0cmVhbS5yZXMpOworCisJa2ZyZWUoc3RyZWFtKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHVzZXIgc3BhY2UgaGFzIG5vIG1vcmUgcmVmZXJlbmNlcyBvbiB0aGUKKyAqIGJhc2Ugb2JqZWN0LiBJdCByZWxlYXNlcyB0aGUgYmFzZS1vYmplY3QncyByZWZlcmVuY2Ugb24gdGhlIHJlc291cmNlIG9iamVjdC4KKyAqLworCitzdGF0aWMgdm9pZCB2bXdfdXNlcl9zdHJlYW1fYmFzZV9yZWxlYXNlKHN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKipwX2Jhc2UpCit7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZSA9ICpwX2Jhc2U7CisJc3RydWN0IHZtd191c2VyX3N0cmVhbSAqc3RyZWFtID0KKwkgICAgY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9zdHJlYW0sIGJhc2UpOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9ICZzdHJlYW0tPnN0cmVhbS5yZXM7CisKKwkqcF9iYXNlID0gTlVMTDsKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7Cit9CisKK2ludCB2bXdfc3RyZWFtX3VucmVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHZtd191c2VyX3N0cmVhbSAqc3RyZWFtOworCXN0cnVjdCBkcm1fdm13X3N0cmVhbV9hcmcgKmFyZyA9IChzdHJ1Y3QgZHJtX3Ztd19zdHJlYW1fYXJnICopZGF0YTsKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlpbnQgcmV0ID0gMDsKKworCXJlcyA9IHZtd19yZXNvdXJjZV9sb29rdXAoZGV2X3ByaXYsICZkZXZfcHJpdi0+c3RyZWFtX2lkciwgYXJnLT5zdHJlYW1faWQpOworCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJlcy0+cmVzX2ZyZWUgIT0gJnZtd191c2VyX3N0cmVhbV9mcmVlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXN0cmVhbSA9IGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfdXNlcl9zdHJlYW0sIHN0cmVhbS5yZXMpOworCWlmIChzdHJlYW0tPmJhc2UudGZpbGUgIT0gdGZpbGUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgc3RyZWFtLT5iYXNlLmhhc2gua2V5LCBUVE1fUkVGX1VTQUdFKTsKK291dDoKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHZtd19zdHJlYW1fY2xhaW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2bXdfcHJpdihkZXYpOworCXN0cnVjdCB2bXdfdXNlcl9zdHJlYW0gKnN0cmVhbSA9IGttYWxsb2Moc2l6ZW9mKCpzdHJlYW0pLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqdG1wOworCXN0cnVjdCBkcm1fdm13X3N0cmVhbV9hcmcgKmFyZyA9IChzdHJ1Y3QgZHJtX3Ztd19zdHJlYW1fYXJnICopZGF0YTsKKwlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KHN0cmVhbSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSAmc3RyZWFtLT5zdHJlYW0ucmVzOworCXN0cmVhbS0+YmFzZS5zaGFyZWFibGUgPSBmYWxzZTsKKwlzdHJlYW0tPmJhc2UudGZpbGUgPSBOVUxMOworCisJcmV0ID0gdm13X3N0cmVhbV9pbml0KGRldl9wcml2LCAmc3RyZWFtLT5zdHJlYW0sIHZtd191c2VyX3N0cmVhbV9mcmVlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJdG1wID0gdm13X3Jlc291cmNlX3JlZmVyZW5jZShyZXMpOworCXJldCA9IHR0bV9iYXNlX29iamVjdF9pbml0KHRmaWxlLCAmc3RyZWFtLT5iYXNlLCBmYWxzZSwgVk1XX1JFU19TVFJFQU0sCisJCQkJICAgJnZtd191c2VyX3N0cmVhbV9iYXNlX3JlbGVhc2UsIE5VTEwpOworCisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnRtcCk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlhcmctPnN0cmVhbV9pZCA9IHJlcy0+aWQ7CitvdXRfZXJyOgorCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm13X3VzZXJfc3RyZWFtX2xvb2t1cChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCisJCQkgICB1aW50MzJfdCAqaW5vdXRfaWQsIHN0cnVjdCB2bXdfcmVzb3VyY2UgKipvdXQpCit7CisJc3RydWN0IHZtd191c2VyX3N0cmVhbSAqc3RyZWFtOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJcmVzID0gdm13X3Jlc291cmNlX2xvb2t1cChkZXZfcHJpdiwgJmRldl9wcml2LT5zdHJlYW1faWRyLCAqaW5vdXRfaWQpOworCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJlcy0+cmVzX2ZyZWUgIT0gJnZtd191c2VyX3N0cmVhbV9mcmVlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlZjsKKwl9CisKKwlzdHJlYW0gPSBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3VzZXJfc3RyZWFtLCBzdHJlYW0ucmVzKTsKKwlpZiAoc3RyZWFtLT5iYXNlLnRmaWxlICE9IHRmaWxlKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBlcnJfcmVmOworCX0KKworCSppbm91dF9pZCA9IHN0cmVhbS0+c3RyZWFtLnN0cmVhbV9pZDsKKwkqb3V0ID0gcmVzOworCXJldHVybiAwOworZXJyX3JlZjoKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3R0bV9nbHVlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF90dG1fZ2x1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZGY0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF90dG1fZ2x1ZS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKworaW50IHZtd19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2OworCisJaWYgKHVubGlrZWx5KHZtYS0+dm1fcGdvZmYgPCBWTVdHRlhfRklMRV9QQUdFX09GRlNFVCkpIHsKKwkJaWYgKHZtd19maWZvX21tYXAoZmlscCwgdm1hKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBkcm1fbW1hcChmaWxwLCB2bWEpOworCX0KKworCWZpbGVfcHJpdiA9IChzdHJ1Y3QgZHJtX2ZpbGUgKilmaWxwLT5wcml2YXRlX2RhdGE7CisJZGV2X3ByaXYgPSB2bXdfcHJpdihmaWxlX3ByaXYtPm1pbm9yLT5kZXYpOworCXJldHVybiB0dG1fYm9fbW1hcChmaWxwLCB2bWEsICZkZXZfcHJpdi0+YmRldik7Cit9CisKK3N0YXRpYyBpbnQgdm13X3R0bV9tZW1fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCit7CisJRFJNX0lORk8oImdsb2JhbCBpbml0LlxuIik7CisJcmV0dXJuIHR0bV9tZW1fZ2xvYmFsX2luaXQocmVmLT5vYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB2bXdfdHRtX21lbV9nbG9iYWxfcmVsZWFzZShzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK3sKKwl0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHJlZi0+b2JqZWN0KTsKK30KKworaW50IHZtd190dG1fZ2xvYmFsX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgdHRtX2dsb2JhbF9yZWZlcmVuY2UgKmdsb2JhbF9yZWY7CisJaW50IHJldDsKKworCWdsb2JhbF9yZWYgPSAmZGV2X3ByaXYtPm1lbV9nbG9iYWxfcmVmOworCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gVFRNX0dMT0JBTF9UVE1fTUVNOworCWdsb2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9tZW1fZ2xvYmFsKTsKKwlnbG9iYWxfcmVmLT5pbml0ID0gJnZtd190dG1fbWVtX2dsb2JhbF9pbml0OworCWdsb2JhbF9yZWYtPnJlbGVhc2UgPSAmdm13X3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2U7CisKKwlyZXQgPSB0dG1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBUVE0gbWVtb3J5IGFjY291bnRpbmcuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfcHJpdi0+Ym9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9CisJCWRldl9wcml2LT5tZW1fZ2xvYmFsX3JlZi5vYmplY3Q7CisJZ2xvYmFsX3JlZiA9ICZkZXZfcHJpdi0+Ym9fZ2xvYmFsX3JlZi5yZWY7CisJZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBUVE1fR0xPQkFMX1RUTV9CTzsKKwlnbG9iYWxfcmVmLT5zaXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fYm9fZ2xvYmFsKTsKKwlnbG9iYWxfcmVmLT5pbml0ID0gJnR0bV9ib19nbG9iYWxfaW5pdDsKKwlnbG9iYWxfcmVmLT5yZWxlYXNlID0gJnR0bV9ib19nbG9iYWxfcmVsZWFzZTsKKwkJcmV0ID0gdHRtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKKworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBUVE0gYnVmZmVyIG9iamVjdHMuXG4iKTsKKwkJZ290byBvdXRfbm9fYm87CisJfQorCisJcmV0dXJuIDA7CitvdXRfbm9fYm86CisJdHRtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXZfcHJpdi0+bWVtX2dsb2JhbF9yZWYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgdm13X3R0bV9nbG9iYWxfcmVsZWFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXR0bV9nbG9iYWxfaXRlbV91bnJlZigmZGV2X3ByaXYtPmJvX2dsb2JhbF9yZWYucmVmKTsKKwl0dG1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldl9wcml2LT5tZW1fZ2xvYmFsX3JlZik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcuaCBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCmluZGV4IDI3YWU3NTAuLmJmMzE1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfX0hJRF9MR19ICiAjZGVmaW5lIF9fSElEX0xHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+Ci0KICNpZmRlZiBDT05GSUdfTE9HSVRFQ0hfRkYKIGludCBsZ2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA5ZTY0MGM2Li40NmMzYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0yMjgsNiArMjI4LDE4IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBrOHRlbXAuCiAKK2NvbmZpZyBTRU5TT1JTX0sxMFRFTVAKKwl0cmlzdGF0ZSAiQU1EIFBoZW5vbS9TZW1wcm9uL1R1cmlvbi9PcHRlcm9uIHRlbXBlcmF0dXJlIHNlbnNvciIKKwlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHRlbXBlcmF0dXJlCisJICBzZW5zb3IocykgaW5zaWRlIHlvdXIgQ1BVLiBTdXBwb3J0ZWQgYXJlIGxhdGVyIHJldmlzaW9ucyBvZgorCSAgdGhlIEFNRCBGYW1pbHkgMTBoIGFuZCBhbGwgcmV2aXNpb25zIG9mIHRoZSBBTUQgRmFtaWx5IDExaAorCSAgbWljcm9hcmNoaXRlY3R1cmVzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBrMTB0ZW1wLgorCiBjb25maWcgU0VOU09SU19BTVMKIAl0cmlzdGF0ZSAiQXBwbGUgTW90aW9uIFNlbnNvciBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQUENfUE1BQyAmJiAhUFBDNjQgJiYgSU5QVVQgJiYgKChBREJfUE1VICYmIEkyQyA9IHkpIHx8IChBREJfUE1VICYmICFJMkMpIHx8IEkyQykgJiYgRVhQRVJJTUVOVEFMCkBAIC04MTAsNiArODIyLDE0IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCB0bXA0MjEuCiAKK2NvbmZpZyBTRU5TT1JTX1ZJQV9DUFVURU1QCisJdHJpc3RhdGUgIlZJQSBDUFUgdGVtcGVyYXR1cmUgc2Vuc29yIgorCWRlcGVuZHMgb24gWDg2CisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZQorCSAgc2Vuc29yIGluc2lkZSB5b3VyIENQVS4gU3VwcG9ydGVkIGFyZSBhbGwga25vd24gdmFyaWFudHMgb2YKKwkgIHRoZSBWSUEgQzcgYW5kIE5hbm8uCisKIGNvbmZpZyBTRU5TT1JTX1ZJQTY4NkEKIAl0cmlzdGF0ZSAiVklBNjg2QSIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtOTk4LDYgKzEwMTgsMjMgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGxpczNsdjAyZCBhbmQgYSBzcGVjaWZpYyBtb2R1bGUgZm9yIHRoZSBTUEkgdHJhbnNwb3J0CiAJICBpcyBjYWxsZWQgbGlzM2x2MDJkX3NwaS4KIAorY29uZmlnIFNFTlNPUlNfTElTM19JMkMKKwl0cmlzdGF0ZSAiU1RNaWNyb2VsZXRyb25pY3MgTElTM0xWMDJEeCB0aHJlZS1heGlzIGRpZ2l0YWwgYWNjZWxlcm9tZXRlciAoSTJDKSIKKwlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVAorCXNlbGVjdCBJTlBVVF9QT0xMREVWCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIExJUzNMVjAyRHggYWNjZWxlcm9tZXRlciBjb25uZWN0ZWQKKwkgIHZpYSBJMkMuIFRoZSBhY2NlbGVyb21ldGVyIGRhdGEgaXMgcmVhZGFibGUgdmlhCisJICAvc3lzL2RldmljZXMvcGxhdGZvcm0vbGlzM2x2MDJkLgorCisJICBUaGlzIGRyaXZlciBhbHNvIHByb3ZpZGVzIGFuIGFic29sdXRlIGlucHV0IGNsYXNzIGRldmljZSwgYWxsb3dpbmcKKwkgIHRoZSBkZXZpY2UgdG8gYWN0IGFzIGEgcGluYmFsbCBtYWNoaW5lLWVzcXVlIGpveXN0aWNrLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBtb2R1bGVzLiAgSWYgc28sIHRoZSBjb3JlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbGlzM2x2MDJkIGFuZCBhIHNwZWNpZmljIG1vZHVsZSBmb3IgdGhlIEkyQyB0cmFuc3BvcnQKKwkgIGlzIGNhbGxlZCBsaXMzbHYwMmRfaTJjLgorCiBjb25maWcgU0VOU09SU19BUFBMRVNNQwogCXRyaXN0YXRlICJBcHBsZSBTTUMgKE1vdGlvbiBzZW5zb3IsIGxpZ2h0IHNlbnNvciwga2V5Ym9hcmQgYmFja2xpZ2h0KSIKIAlkZXBlbmRzIG9uIElOUFVUICYmIFg4NgpAQCAtMTA0NiwyNSArMTA4MywyNyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgYXN1c19hdGswMTEwLgogCiBjb25maWcgU0VOU09SU19MSVMzTFYwMkQKLQl0cmlzdGF0ZSAiU1RNaWNyb2VsZXRyb25pY3MgTElTM0xWMDJEeCB0aHJlZS1heGlzIGRpZ2l0YWwgYWNjZWxlcm9tZXRlciIKKwl0cmlzdGF0ZSAiU1RNaWNyb2VsZXRyb25pY3MgTElTMyogdGhyZWUtYXhpcyBkaWdpdGFsIGFjY2VsZXJvbWV0ZXIiCiAJZGVwZW5kcyBvbiBJTlBVVAogCXNlbGVjdCBJTlBVVF9QT0xMREVWCiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTElTM0xWMDJEeCBhY2NlbGVyb21ldGVyLiBJbgotCSAgcGFydGljdWxhciwgaXQgY2FuIGJlIGZvdW5kIGluIGEgbnVtYmVyIG9mIEhQIGxhcHRvcHMsIHdoaWNoIGhhdmUgdGhlCi0JICAiTW9iaWxlIERhdGEgUHJvdGVjdGlvbiBTeXN0ZW0gM0QiIG9yICIzRCBEcml2ZUd1YXJkIiBmZWF0dXJlLiBPbiBzdWNoCi0JICBzeXN0ZW1zIHRoZSBkcml2ZXIgc2hvdWxkIGxvYWQgYXV0b21hdGljYWxseSAodmlhIEFDUEkpLiBUaGUKLQkgIGFjY2VsZXJvbWV0ZXIgbWlnaHQgYWxzbyBiZSBmb3VuZCBpbiBvdGhlciBzeXN0ZW1zLCBjb25uZWN0ZWQgdmlhIFNQSQotCSAgb3IgSTJDLiAgVGhlIGFjY2VsZXJvbWV0ZXIgZGF0YSBpcyByZWFkYWJsZSB2aWEKLQkgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9saXMzbHYwMmQuCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTElTMyogYWNjZWxlcm9tZXRlcnMsIHN1Y2ggYXMgdGhlCisJICBMSVMzTFYwMkRMIG9yIHRoZSBMSVMzMzFETC4gSW4gcGFydGljdWxhciwgaXQgY2FuIGJlIGZvdW5kIGluIGEgbnVtYmVyCisJICBvZiBIUCBsYXB0b3BzLCB3aGljaCBoYXZlIHRoZSAiTW9iaWxlIERhdGEgUHJvdGVjdGlvbiBTeXN0ZW0gM0QiIG9yCisJICAiM0QgRHJpdmVHdWFyZCIgZmVhdHVyZS4gT24gc3VjaCBzeXN0ZW1zIHRoZSBkcml2ZXIgc2hvdWxkIGxvYWQKKwkgIGF1dG9tYXRpY2FsbHkgKHZpYSBBQ1BJIGFsaWFzKS4gVGhlIGFjY2VsZXJvbWV0ZXIgbWlnaHQgYWxzbyBiZSBmb3VuZAorCSAgaW4gb3RoZXIgc3lzdGVtcywgY29ubmVjdGVkIHZpYSBTUEkgb3IgSTJDLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzCisJICByZWFkYWJsZSB2aWEgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KIAogCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCi0JICB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4gT24gSFAgbGFwdG9wcywKKwkgIGEgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4gSXQgcHJvdmlkZXMgYWxzbworCSAgYSBtaXNjIGRldmljZSB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlY3QgZnJlZS1mYWxsLiBPbiBIUCBsYXB0b3BzLAogCSAgaWYgdGhlIGxlZCBpbmZyYXN0cnVjdHVyZSBpcyBhY3RpdmF0ZWQsIHN1cHBvcnQgZm9yIGEgbGVkIGluZGljYXRpbmcKLQkgIGRpc2sgcHJvdGVjdGlvbiB3aWxsIGJlIHByb3ZpZGVkIGFzIGhwOnJlZDpoZGRwcm90ZWN0aW9uLgorCSAgZGlzayBwcm90ZWN0aW9uIHdpbGwgYmUgcHJvdmlkZWQgYXMgaHA6OmhkZHByb3RlY3QuIEZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBvbiB0aGUgZmVhdHVyZSwgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIG1vZHVsZXMuICBJZiBzbywgdGhlIGNvcmUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsaXMzbHYwMmQgYW5kIGEgc3BlY2lmaWMgbW9kdWxlIGZvciBIUCBsYXB0b3BzIHdpbGwgYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDMzYzJlZTEuLjQ1MGM4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNTMsOCArNTMsMTAgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTVBFWCkJKz0gaWJtcGV4Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lUODcpCSs9IGl0ODcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfSzhURU1QKQkrPSBrOHRlbXAubworb2JqLSQoQ09ORklHX1NFTlNPUlNfSzEwVEVNUCkJKz0gazEwdGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MSVMzTFYwMkQpICs9IGxpczNsdjAyZC5vIGhwX2FjY2VsLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xJUzNfU1BJKQkrPSBsaXMzbHYwMmQubyBsaXMzbHYwMmRfc3BpLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0xJUzNfSTJDKQkrPSBsaXMzbHYwMmQubyBsaXMzbHYwMmRfaTJjLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNNjMpCSs9IGxtNjMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE03MCkJKz0gbG03MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTczKQkrPSBsbTczLm8KQEAgLTg3LDYgKzg5LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX1RITUM1MCkJKz0gdGhtYzUwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1RNUDQwMSkJKz0gdG1wNDAxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1RNUDQyMSkJKz0gdG1wNDIxLm8KK29iai0kKENPTkZJR19TRU5TT1JTX1ZJQV9DUFVURU1QKSs9IHZpYS1jcHV0ZW1wLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1ZJQTY4NkEpCSs9IHZpYTY4NmEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVlQxMjExKQkrPSB2dDEyMTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVlQ4MjMxKQkrPSB2dDgyMzEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDIxLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYwppbmRleCAzM2FjZjI5Li4xYWQwYTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYwpAQCAtMzQsOSArMzQsOCBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKIAkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfOChhZG0xMDIxLCBhZG0xMDIzLCBtYXgxNjE3LCBtYXgxNjE3YSwgdGhtYzEwLCBsbTg0LCBnbDUyM3NtLAotCQkJbWMxMDY2KTsKK2VudW0gY2hpcHMgeworCWFkbTEwMjEsIGFkbTEwMjMsIG1heDE2MTcsIG1heDE2MTdhLCB0aG1jMTAsIGxtODQsIGdsNTIzc20sIG1jMTA2NiB9OwogCiAvKiBhZG0xMDIxIGNvbnN0YW50cyBzcGVjaWZpZWQgYmVsb3cgKi8KIApAQCAtOTcsNyArOTYsNyBAQAogCiBzdGF0aWMgaW50IGFkbTEwMjFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBhZG0xMDIxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWRtMTAyMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIGFkbTEwMjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgaW50IGFkbTEwMjFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwpAQCAtMTMwLDcgKzEyOSw3IEBACiAJLnJlbW92ZQkJPSBhZG0xMDIxX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBhZG0xMDIxX2lkLAogCS5kZXRlY3QJCT0gYWRtMTAyMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjg0LDcgKzI4Myw3IEBACiB9OwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgYWRtMTAyMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGFkbTEwMjFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjUuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jCmluZGV4IGRiNmFjMmIuLjI1MWI2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jCkBAIC02NCwxMSArNjQsNyBAQAogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotCi1JMkNfQ0xJRU5UX0lOU01PRF8yKGFkbTEwMjUsIG5lMTYxOSk7CitlbnVtIGNoaXBzIHsgYWRtMTAyNSwgbmUxNjE5IH07CiAKIC8qCiAgKiBUaGUgQURNMTAyNSByZWdpc3RlcnMKQEAgLTExMSw3ICsxMDcsNyBAQAogCiBzdGF0aWMgaW50IGFkbTEwMjVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBhZG0xMDI1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWRtMTAyNV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIGFkbTEwMjVfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgaW50IGFkbTEwMjVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwpAQCAtMTM3LDcgKzEzMyw3IEBACiAJLnJlbW92ZQkJPSBhZG0xMDI1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBhZG0xMDI1X2lkLAogCS5kZXRlY3QJCT0gYWRtMTAyNV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiAvKgpAQCAtNDA5LDcgKzQwNSw3IEBACiB9OwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgYWRtMTAyNV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGFkbTEwMjVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IGZiNTM2MzkuLjY1MzM1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0zNyw5ICszNyw2IEBACiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoYWRtMTAyNik7Ci0KIHN0YXRpYyBpbnQgZ3Bpb19pbnB1dFsxN10gPSB7IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAJCQkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xIH07CiBzdGF0aWMgaW50IGdwaW9fb3V0cHV0WzE3XSA9IHsgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKQEAgLTI5Myw3ICsyOTAsNyBAQAogCiBzdGF0aWMgaW50IGFkbTEwMjZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBhZG0xMDI2X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWRtMTAyNl9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgYWRtMTAyNl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgaW50IGFkbTEwMjZfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOwpAQCAtMzA1LDcgKzMwMiw3IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkbTEwMjZfaWRbXSA9IHsKLQl7ICJhZG0xMDI2IiwgYWRtMTAyNiB9LAorCXsgImFkbTEwMjYiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkbTEwMjZfaWQpOwpAQCAtMzE5LDcgKzMxNiw3IEBACiAJLnJlbW92ZQkJPSBhZG0xMDI2X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBhZG0xMDI2X2lkLAogCS5kZXRlY3QJCT0gYWRtMTAyNl9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgaW50IGFkbTEwMjZfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCkBAIC0xNjUwLDcgKzE2NDcsNyBAQAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGFkbTEwMjZfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZG0xMDI2X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwppbmRleCBlZjkxZTJhNC4uMGI4YTNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDI5LmMKQEAgLTQ0LDEyICs0NCw2IEBACiB9OwogCiAvKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGFkbTEwMjkpOwotCi0vKgogICogVGhlIEFETTEwMjkgcmVnaXN0ZXJzCiAgKiBNYW51ZmFjdHVyZXIgSUQgaXMgMHg0MSBmb3IgQW5hbG9nIERldmljZXMKICAqLwpAQCAtMTE3LDcgKzExMSw3IEBACiAKIHN0YXRpYyBpbnQgYWRtMTAyOV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGFkbTEwMjlfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZG0xMDI5X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBhZG0xMDI5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBzdHJ1Y3QgYWRtMTAyOV9kYXRhICphZG0xMDI5X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTEyOCw3ICsxMjIsNyBAQAogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZG0xMDI5X2lkW10gPSB7Ci0JeyAiYWRtMTAyOSIsIGFkbTEwMjkgfSwKKwl7ICJhZG0xMDI5IiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZG0xMDI5X2lkKTsKQEAgLTE0Miw3ICsxMzYsNyBAQAogCS5yZW1vdmUJCT0gYWRtMTAyOV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gYWRtMTAyOV9pZCwKIAkuZGV0ZWN0CQk9IGFkbTEwMjlfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyoKQEAgLTI5Nyw3ICsyOTEsNyBAQAogICovCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBhZG0xMDI5X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWRtMTAyOV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtMTAzMS5jIGIvZHJpdmVycy9od21vbi9hZG0xMDMxLmMKaW5kZXggMGU3MjIxNy4uMTY0NGI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDMxLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDMxLmMKQEAgLTY0LDggKzY0LDcgQEAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMihhZG0xMDMwLCBhZG0xMDMxKTsKK2VudW0gY2hpcHMgeyBhZG0xMDMwLCBhZG0xMDMxIH07CiAKIHR5cGVkZWYgdTggYXV0b19jaGFuX3RhYmxlX3RbOF1bMl07CiAKQEAgLTEwMiw3ICsxMDEsNyBAQAogCiBzdGF0aWMgaW50IGFkbTEwMzFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBhZG0xMDMxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWRtMTAzMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIGFkbTEwMzFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgaW50IGFkbTEwMzFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwpAQCAtMTI1LDcgKzEyNCw3IEBACiAJLnJlbW92ZQkJPSBhZG0xMDMxX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBhZG0xMDMxX2lkLAogCS5kZXRlY3QJCT0gYWRtMTAzMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgaW5saW5lIHU4IGFkbTEwMzFfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCkBAIC04MTMsNyArODEyLDcgQEAKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBhZG0xMDMxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWRtMTAzMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtOTI0MC5jIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKaW5kZXggMjBlMDQ4MS4uMDcyN2FkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG05MjQwLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKQEAgLTU1LDggKzU1LDcgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCiAJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8zKGFkbTkyNDAsIGRzMTc4MCwgbG04MSk7CitlbnVtIGNoaXBzIHsgYWRtOTI0MCwgZHMxNzgwLCBsbTgxIH07CiAKIC8qIEFETTkyNDAgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFETTkyNDBfUkVHX01BTl9JRAkJMHgzZQpAQCAtMTMyLDcgKzEzMSw3IEBACiAKIHN0YXRpYyBpbnQgYWRtOTI0MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGFkbTkyNDBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZG05MjQwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgYWRtOTI0MF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBpbnQgYWRtOTI0MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CkBAIC0xNTYsNyArMTU1LDcgQEAKIAkucmVtb3ZlCQk9IGFkbTkyNDBfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGFkbTkyNDBfaWQsCiAJLmRldGVjdAkJPSBhZG05MjQwX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qIHBlciBjbGllbnQgZGF0YSAqLwpAQCAtNTQ1LDcgKzU0NCw3IEBACiAvKioqIHNlbnNvciBjaGlwIGRldGVjdCBhbmQgZHJpdmVyIGluc3RhbGwgKioqLwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgYWRtOTI0MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZG05MjQwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Fkczc4MjguYyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCmluZGV4IDQ1MTk3N2IuLmFhYzg1ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCkBAIC00NywxMCArNDcsNyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwKIAlJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShhZHM3ODI4KTsKLQotLyogT3RoZXIgbW9kdWxlIHBhcmFtZXRlcnMgKi8KKy8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IHNlX2lucHV0ID0gMTsgLyogRGVmYXVsdCBpcyBTRSwgMCA9PSBkaWZmICovCiBzdGF0aWMgaW50IGludF92cmVmID0gMTsgLyogRGVmYXVsdCBpcyBpbnRlcm5hbCByZWYgT04gKi8KIHN0YXRpYyBpbnQgdnJlZl9tdiA9IEFEUzc4MjhfSU5UX1ZSRUZfTVY7IC8qIHNldCBpZiB2cmVmICE9IDIuNVYgKi8KQEAgLTcyLDcgKzY5LDcgQEAKIH07CiAKIC8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9uIC0gbmVjZXNzYXJ5IGR1ZSB0byBmdW5jdGlvbiBkZXBlbmRlbmNpZXMgKi8KLXN0YXRpYyBpbnQgYWRzNzgyOF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGFkczc4MjhfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGFkczc4MjhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwpAQCAtMTY4LDcgKzE2NSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHM3ODI4X2lkW10gPSB7Ci0JeyAiYWRzNzgyOCIsIGFkczc4MjggfSwKKwl7ICJhZHM3ODI4IiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHM3ODI4X2lkKTsKQEAgLTE4MywxMSArMTgwLDExIEBACiAJLnJlbW92ZSA9IGFkczc4MjhfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGFkczc4MjhfaWQsCiAJLmRldGVjdCA9IGFkczc4MjhfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEgPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGFkczc4MjhfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZHM3ODI4X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NjIuYwppbmRleCBmOWM5NTYyLi5hMWE3ZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkdDc0NjIuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NjIuYwpAQCAtMzIsOSArMzIsNiBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NTgsIDB4NUMsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGFkdDc0NjIpOwotCiAvKiBBRFQ3NDYyIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBRFQ3NDYyX1JFR19ERVZJQ0UJCQkweDNECiAjZGVmaW5lIEFEVDc0NjJfUkVHX1ZFTkRPUgkJCTB4M0UKQEAgLTIzNywxMiArMjM0LDEyIEBACiAKIHN0YXRpYyBpbnQgYWR0NzQ2Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGFkdDc0NjJfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZHQ3NDYyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBhZHQ3NDYyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdDc0NjJfaWRbXSA9IHsKLQl7ICJhZHQ3NDYyIiwgYWR0NzQ2MiB9LAorCXsgImFkdDc0NjIiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdDc0NjJfaWQpOwpAQCAtMjU2LDcgKzI1Myw3IEBACiAJLnJlbW92ZQkJPSBhZHQ3NDYyX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBhZHQ3NDYyX2lkLAogCS5kZXRlY3QJCT0gYWR0NzQ2Ml9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiAvKgpAQCAtMTkwMiw3ICsxODk5LDcgQEAKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBhZHQ3NDYyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYWR0NzQ2Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3MC5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDcwLmMKaW5kZXggMzJiMTc1MC4uMzQ0NWNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDcwLmMKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDcwLmMKQEAgLTMzLDkgKzMzLDYgQEAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJDLCAweDJFLCAweDJGLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShhZHQ3NDcwKTsKLQogLyogQURUNzQ3MCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQURUNzQ3MF9SRUdfQkFTRV9BRERSCQkJMHgyMAogI2RlZmluZSBBRFQ3NDcwX1JFR19URU1QX0JBU0VfQUREUgkJMHgyMApAQCAtMTc3LDEyICsxNzQsMTIgQEAKIAogc3RhdGljIGludCBhZHQ3NDcwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgYWR0NzQ3MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGFkdDc0NzBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGFkdDc0NzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWR0NzQ3MF9pZFtdID0gewotCXsgImFkdDc0NzAiLCBhZHQ3NDcwIH0sCisJeyAiYWR0NzQ3MCIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWR0NzQ3MF9pZCk7CkBAIC0xOTYsNyArMTkzLDcgQEAKIAkucmVtb3ZlCQk9IGFkdDc0NzBfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGFkdDc0NzBfaWQsCiAJLmRldGVjdAkJPSBhZHQ3NDcwX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC0xMjI1LDcgKzEyMjIsNyBAQAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGFkdDc0NzBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZHQ3NDcwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3NDczLmMgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYwppbmRleCBhZWEyNDRkLi40MzQ1NzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYwpAQCAtMzIsOSArMzIsNiBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MkMsIDB4MkQsIDB4MkUsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGFkdDc0NzMpOwotCiAvKiBBRFQ3NDczIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBRFQ3NDczX1JFR19CQVNFX0FERFIJCQkweDIwCiAKQEAgLTE2NiwxMiArMTYzLDEyIEBACiAKIHN0YXRpYyBpbnQgYWR0NzQ3M19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGFkdDc0NzNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZHQ3NDczX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBhZHQ3NDczX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdDc0NzNfaWRbXSA9IHsKLQl7ICJhZHQ3NDczIiwgYWR0NzQ3MyB9LAorCXsgImFkdDc0NzMiLCAwIH0sCiAJeyB9CiB9OwogCkBAIC0xODQsNyArMTgxLDcgQEAKIAkucmVtb3ZlCQk9IGFkdDc0NzNfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGFkdDc0NzNfaWQsCiAJLmRldGVjdAkJPSBhZHQ3NDczX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC0xMDg1LDcgKzEwODIsNyBAQAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGFkdDc0NzNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZHQ3NDczX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3NDc1LmMgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYwppbmRleCA5OWFiZmRkLi5hMGMzODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EXzQoYWR0NzQ3MywgYWR0NzQ3NSwgYWR0NzQ3NiwgYWR0NzQ5MCk7CitlbnVtIGNoaXBzIHsgYWR0NzQ3MywgYWR0NzQ3NSwgYWR0NzQ3NiwgYWR0NzQ5MCB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWR0NzQ3NV9pZFtdID0gewogCXsgImFkdDc0NzMiLCBhZHQ3NDczIH0sCkBAIC0xMTcyLDcgKzExNzIsNyBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW41X2F0dHJfZ3JvdXAgPSB7IC5hdHRycyA9IGluNV9hdHRycyB9Owogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdmlkX2F0dHJfZ3JvdXAgPSB7IC5hdHRycyA9IHZpZF9hdHRycyB9OwogCi1zdGF0aWMgaW50IGFkdDc0NzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhZHQ3NDc1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwpAQCAtMTQxMiw3ICsxNDEyLDcgQEAKIAkucmVtb3ZlCQk9IGFkdDc0NzVfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGFkdDc0NzVfaWQsCiAJLmRldGVjdAkJPSBhZHQ3NDc1X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIHN0YXRpYyB2b2lkIGFkdDc0NzVfcmVhZF9oeXN0ZXJzaXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwppbmRleCA3ZWE2YThmLi5jMTYwNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKKysrIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCkBAIC01MTgsNyArNTE4LDcgQEAKIAlyZXR1cm4gYXBwbGVzbWNfcG1fcmVzdW1lKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhcHBsZXNtY19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXBwbGVzbWNfcG1fb3BzID0gewogCS5yZXN1bWUgPSBhcHBsZXNtY19wbV9yZXN1bWUsCiAJLnJlc3RvcmUgPSBhcHBsZXNtY19wbV9yZXN0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXNiMTAwLmMgYi9kcml2ZXJzL2h3bW9uL2FzYjEwMC5jCmluZGV4IDQ4MGY4MGUuLjdkYWRhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXNiMTAwLmMKKysrIGIvZHJpdmVycy9od21vbi9hc2IxMDAuYwpAQCAtNTEsOSArNTEsNiBAQAogLyogSTJDIGFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShhc2IxMDApOwotCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2Vfc3ViY2xpZW50c1s0XTsKIG1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9zdWJjbGllbnRzLCBzaG9ydCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3N1YmNsaWVudHMsICJMaXN0IG9mIHN1YmNsaWVudCBhZGRyZXNzZXM6ICIKQEAgLTIwOSwxNCArMjA2LDE0IEBACiAKIHN0YXRpYyBpbnQgYXNiMTAwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBhc2IxMDBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhc2IxMDBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgYXNiMTAwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBzdHJ1Y3QgYXNiMTAwX2RhdGEgKmFzYjEwMF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhc2IxMDBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhc2IxMDBfaWRbXSA9IHsKLQl7ICJhc2IxMDAiLCBhc2IxMDAgfSwKKwl7ICJhc2IxMDAiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFzYjEwMF9pZCk7CkBAIC0yMzAsNyArMjI3LDcgQEAKIAkucmVtb3ZlCQk9IGFzYjEwMF9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gYXNiMTAwX2lkLAogCS5kZXRlY3QJCT0gYXNiMTAwX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qIDcgVm9sdGFnZXMgKi8KQEAgLTY5Nyw3ICs2OTQsNyBAQAogfQogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgYXNiMTAwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgYXNiMTAwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2F0eHAxLmMgYi9kcml2ZXJzL2h3bW9uL2F0eHAxLmMKaW5kZXggZDZiNDkwZC4uOTRjYWRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hdHhwMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXR4cDEuYwpAQCAtNDQsMTcgKzQ0LDE0IEBACiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzcsIDB4NGUsIEkyQ19DTElFTlRfRU5EIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EXzEoYXR4cDEpOwotCiBzdGF0aWMgaW50IGF0eHAxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwogc3RhdGljIGludCBhdHhwMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgc3RydWN0IGF0eHAxX2RhdGEgKiBhdHhwMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGF0eHAxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGF0eHAxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYXR4cDFfaWRbXSA9IHsKLQl7ICJhdHhwMSIsIGF0eHAxIH0sCisJeyAiYXR4cDEiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGF0eHAxX2lkKTsKQEAgLTY4LDcgKzY1LDcgQEAKIAkucmVtb3ZlCQk9IGF0eHAxX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBhdHhwMV9pZCwKIAkuZGV0ZWN0CQk9IGF0eHAxX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIHN0cnVjdCBhdHhwMV9kYXRhIHsKQEAgLTI3NSw3ICsyNzIsNyBAQAogCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBhdHhwMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBhdHhwMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKaW5kZXggNDM3N2JiMC4uODIzZGQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKKysrIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKQEAgLTU3LDExICs1Nyw3IEBACiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8yKGRtZTE3MzcsIHNjaDUwMjcpOwotCi0vKiBJU0EgY2hpcCB0eXBlcyAqLwotZW51bSBpc2FfY2hpcHMgeyBzY2gzMTF4ID0gc2NoNTAyNyArIDEgfTsKK2VudW0gY2hpcHMgeyBkbWUxNzM3LCBzY2g1MDI3LCBzY2gzMTF4IH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUmVnaXN0ZXJzCkBAIC0yMjA4LDcgKzIyMDQsNyBAQAogfQogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgZG1lMTczN19pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBkbWUxNzM3X2kyY19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CkBAIC0yMzE4LDcgKzIzMTQsNyBAQAogCS5yZW1vdmUgPSBkbWUxNzM3X2kyY19yZW1vdmUsCiAJLmlkX3RhYmxlID0gZG1lMTczN19pZCwKIAkuZGV0ZWN0ID0gZG1lMTczN19pMmNfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEgPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwppbmRleCAyYTRjNmEwLi5lMTEzNjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAkJCQkJMHg0ZCwgMHg0ZSwgMHg0ZiwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoZHMxNjIxKTsKIHN0YXRpYyBpbnQgcG9sYXJpdHkgPSAtMTsKIG1vZHVsZV9wYXJhbShwb2xhcml0eSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocG9sYXJpdHksICJPdXRwdXQncyBwb2xhcml0eTogMCA9IGFjdGl2ZSBoaWdoLCAxID0gYWN0aXZlIGxvdyIpOwpAQCAtMjI0LDcgKzIyMyw3IEBACiAKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGRzMTYyMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGRzMTYyMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwpAQCAtMzA1LDggKzMwNCw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkczE2MjFfaWRbXSA9IHsKLQl7ICJkczE2MjEiLCBkczE2MjEgfSwKLQl7ICJkczE2MjUiLCBkczE2MjEgfSwKKwl7ICJkczE2MjEiLCAwIH0sCisJeyAiZHMxNjI1IiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkczE2MjFfaWQpOwpAQCAtMzIxLDcgKzMyMCw3IEBACiAJLnJlbW92ZQkJPSBkczE2MjFfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGRzMTYyMV9pZCwKIAkuZGV0ZWN0CQk9IGRzMTYyMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkczE2MjFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzUzNzVzLmMgYi9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYwppbmRleCA0MGRmYmNkLi4yNzczOThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYwpAQCAtMzksOCArMzksNyBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8yKGY3NTM3MywgZjc1Mzc1KTsKK2VudW0gY2hpcHMgeyBmNzUzNzMsIGY3NTM3NSB9OwogCiAvKiBGaW50ZWsgRjc1Mzc1IHJlZ2lzdGVycyAgKi8KICNkZWZpbmUgRjc1Mzc1X1JFR19DT05GSUcwCQkweDAKQEAgLTExMyw3ICsxMTIsNyBAQAogCXM4IHRlbXBfbWF4X2h5c3RbMl07CiB9OwogCi1zdGF0aWMgaW50IGY3NTM3NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGY3NTM3NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBmNzUzNzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CkBAIC0xMzUsNyArMTM0LDcgQEAKIAkucmVtb3ZlID0gZjc1Mzc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBmNzUzNzVfaWQsCiAJLmRldGVjdCA9IGY3NTM3NV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YSA9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdCA9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBmNzUzNzVfcmVhZDgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQpAQCAtNjc3LDcgKzY3Niw3IEBACiB9CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBmNzUzNzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBmNzUzNzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCmluZGV4IDI4MTgyOWMuLmJkMGZjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwpAQCAtNTYsNyArNTYsOCBAQAogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCiAJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwotSTJDX0NMSUVOVF9JTlNNT0RfNyhmc2Nwb3MsIGZzY2hlciwgZnNjc2N5LCBmc2NocmMsIGZzY2htZCwgZnNjaGRzLCBmc2NzeWwpOworCitlbnVtIGNoaXBzIHsgZnNjcG9zLCBmc2NoZXIsIGZzY3NjeSwgZnNjaHJjLCBmc2NobWQsIGZzY2hkcywgZnNjc3lsIH07CiAKIC8qCiAgKiBUaGUgRlNDSE1EIHJlZ2lzdGVycyBhbmQgb3RoZXIgZGVmaW5lcwpAQCAtMjIxLDcgKzIyMiw3IEBACiAKIHN0YXRpYyBpbnQgZnNjaG1kX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBmc2NobWRfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBmc2NobWRfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgZnNjaG1kX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBzdHJ1Y3QgZnNjaG1kX2RhdGEgKmZzY2htZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0yNTEsNyArMjUyLDcgQEAKIAkucmVtb3ZlCQk9IGZzY2htZF9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gZnNjaG1kX2lkLAogCS5kZXRlY3QJCT0gZnNjaG1kX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC0xMDAwLDcgKzEwMDEsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBmc2NobWRfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBfa2luZCwKK3N0YXRpYyBpbnQgZnNjaG1kX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAllbnVtIGNoaXBzIGtpbmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2dsNTE4c20uYyBiL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCmluZGV4IDFkNjk0NThhLi5lN2FlNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2dsNTE4c20uYworKysgYi9kcml2ZXJzL2h3bW9uL2dsNTE4c20uYwpAQCAtNDYsOCArNDYsNyBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8yKGdsNTE4c21fcjAwLCBnbDUxOHNtX3I4MCk7CitlbnVtIGNoaXBzIHsgZ2w1MThzbV9yMDAsIGdsNTE4c21fcjgwIH07CiAKIC8qIE1hbnkgR0w1MTggY29uc3RhbnRzIHNwZWNpZmllZCBiZWxvdyAqLwogCkBAIC0xMzksOCArMTM4LDcgQEAKIAogc3RhdGljIGludCBnbDUxOF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkgICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgZ2w1MThfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgZ2w1MThfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBnbDUxOF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBpbnQgZ2w1MThfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIGludCBnbDUxOF9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7CkBAIC0xNjMsNyArMTYxLDcgQEAKIAkucmVtb3ZlCQk9IGdsNTE4X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBnbDUxOF9pZCwKIAkuZGV0ZWN0CQk9IGdsNTE4X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC00ODQsOCArNDgyLDcgQEAKICAqLwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgZ2w1MThfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQorc3RhdGljIGludCBnbDUxOF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAlpbnQgcmV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9nbDUyMHNtLmMgYi9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYwppbmRleCA5MmI1NzIwLi5lYzU4ODAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYworKysgYi9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYwpAQCAtNDEsOSArNDEsNiBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGdsNTIwc20pOwotCiAvKiBNYW55IEdMNTIwIGNvbnN0YW50cyBzcGVjaWZpZWQgYmVsb3cKIE9uZSBvZiB0aGUgaW5wdXRzIGNhbiBiZSBjb25maWd1cmVkIGFzIGVpdGhlciB0ZW1wIG9yIHZvbHRhZ2UuCiBUaGF0J3Mgd2h5IF9URU1QMiBhbmQgX0lONCBhY2Nlc3MgdGhlIHNhbWUgcmVnaXN0ZXIKQEAgLTgxLDggKzc4LDcgQEAKIAogc3RhdGljIGludCBnbDUyMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkgICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgZ2w1MjBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgZ2w1MjBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBnbDUyMF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBpbnQgZ2w1MjBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIGludCBnbDUyMF9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7CkBAIC05MSw3ICs4Nyw3IEBACiAKIC8qIERyaXZlciBkYXRhICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZ2w1MjBfaWRbXSA9IHsKLQl7ICJnbDUyMHNtIiwgZ2w1MjBzbSB9LAorCXsgImdsNTIwc20iLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGdsNTIwX2lkKTsKQEAgLTEwNSw3ICsxMDEsNyBAQAogCS5yZW1vdmUJCT0gZ2w1MjBfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGdsNTIwX2lkLAogCS5kZXRlY3QJCT0gZ2w1MjBfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyogQ2xpZW50IGRhdGEgKi8KQEAgLTY4MSw4ICs2NzcsNyBAQAogICovCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBnbDUyMF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGdsNTIwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYyBiL2RyaXZlcnMvaHdtb24vazEwdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTI2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIGsxMHRlbXAuYyAtIEFNRCBGYW1pbHkgMTBoLzExaCBwcm9jZXNzb3IgaGFyZHdhcmUgbW9uaXRvcmluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKgorICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXI7IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIEZhbWlseSAxMGgvMTFoIENQVSBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKK01PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgYm9vbCBmb3JjZTsKK21vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiZm9yY2UgbG9hZGluZyBvbiBwcm9jZXNzb3JzIHdpdGggZXJyYXR1bSAzMTkiKTsKKworI2RlZmluZSBSRUdfSEFSRFdBUkVfVEhFUk1BTF9DT05UUk9MCTB4NjQKKyNkZWZpbmUgIEhUQ19FTkFCTEUJCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgUkVHX1JFUE9SVEVEX1RFTVBFUkFUVVJFCTB4YTQKKworI2RlZmluZSBSRUdfTk9SVEhCUklER0VfQ0FQQUJJTElUSUVTCTB4ZTgKKyNkZWZpbmUgIE5CX0NBUF9IVEMJCQkweDAwMDAwNDAwCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwl1MzIgcmVndmFsOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRvX3BjaV9kZXYoZGV2KSwKKwkJCSAgICAgIFJFR19SRVBPUlRFRF9URU1QRVJBVFVSRSwgJnJlZ3ZhbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIChyZWd2YWwgPj4gMjEpICogMTI1KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDcwICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9jcml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCWludCBzaG93X2h5c3QgPSBhdHRyLT5pbmRleDsKKwl1MzIgcmVndmFsOworCWludCB2YWx1ZTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0b19wY2lfZGV2KGRldiksCisJCQkgICAgICBSRUdfSEFSRFdBUkVfVEhFUk1BTF9DT05UUk9MLCAmcmVndmFsKTsKKwl2YWx1ZSA9ICgocmVndmFsID4+IDE2KSAmIDB4N2YpICogNTAwICsgNTIwMDA7CisJaWYgKHNob3dfaHlzdCkKKwkJdmFsdWUgLT0gKChyZWd2YWwgPj4gMjQpICYgMHhmKSAqIDUwMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsdWUpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiazEwdGVtcFxuIik7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JUlVHTywgc2hvd190ZW1wX2NyaXQsIE5VTEwsIDEpOworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CisKK3N0YXRpYyBib29sIF9fZGV2aW5pdCBoYXNfZXJyYXR1bV8zMTkodm9pZCkKK3sKKwkvKgorCSAqIEVycmF0dW0gMzE5OiBUaGUgdGhlcm1hbCBzZW5zb3Igb2Ygb2xkZXIgRmFtaWx5IDEwaCBwcm9jZXNzb3JzCisJICogICAgICAgICAgICAgIChCIHN0ZXBwaW5ncykgbWF5IGJlIHVucmVsaWFibGUuCisJICovCisJcmV0dXJuIGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTAgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPD0gMjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgazEwdGVtcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCXUzMiByZWdfY2FwcywgcmVnX2h0YzsKKwlpbnQgZXJyOworCisJaWYgKGhhc19lcnJhdHVtXzMxOSgpICYmICFmb3JjZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkidW5yZWxpYWJsZSBDUFUgdGhlcm1hbCBzZW5zb3I7IG1vbml0b3JpbmcgZGlzYWJsZWRcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfcmVtb3ZlOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFJFR19OT1JUSEJSSURHRV9DQVBBQklMSVRJRVMsICZyZWdfY2Fwcyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFJFR19IQVJEV0FSRV9USEVSTUFMX0NPTlRST0wsICZyZWdfaHRjKTsKKwlpZiAoKHJlZ19jYXBzICYgTkJfQ0FQX0hUQykgJiYgKHJlZ19odGMgJiBIVENfRU5BQkxFKSkgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwlod21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihod21vbl9kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoaHdtb25fZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGh3bW9uX2Rldik7CisKKwlpZiAoaGFzX2VycmF0dW1fMzE5KCkgJiYgZm9yY2UpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgInVucmVsaWFibGUgQ1BVIHRoZXJtYWwgc2Vuc29yOyBjaGVjayBlcnJhdHVtIDMxOVxuIik7CisJcmV0dXJuIDA7CisKK2V4aXRfcmVtb3ZlOgorCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGsxMHRlbXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3RlbXAxX21heCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuZGV2X2F0dHIpOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGsxMHRlbXBfaWRfdGFibGVbXSA9IHsKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTBIX05CX01JU0MpIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzExSF9OQl9NSVNDKSB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGsxMHRlbXBfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgazEwdGVtcF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiazEwdGVtcCIsCisJLmlkX3RhYmxlID0gazEwdGVtcF9pZF90YWJsZSwKKwkucHJvYmUgPSBrMTB0ZW1wX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChrMTB0ZW1wX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrMTB0ZW1wX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmazEwdGVtcF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgazEwdGVtcF9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZrMTB0ZW1wX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGsxMHRlbXBfaW5pdCkKK21vZHVsZV9leGl0KGsxMHRlbXBfZXhpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCmluZGV4IGNmNWFmYjkuLmIyZjIyNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwpAQCAtNDMsMTMgKzQzLDMwIEBACiAjZGVmaW5lIE1EUFNfUE9MTF9JTlRFUlZBTCA1MAogLyoKICAqIFRoZSBzZW5zb3IgY2FuIGFsc28gZ2VuZXJhdGUgaW50ZXJydXB0cyAoRFJEWSkgYnV0IGl0J3MgcHJldHR5IHBvaW50bGVzcwotICogYmVjYXVzZSB0aGVpciBhcmUgZ2VuZXJhdGVkIGV2ZW4gaWYgdGhlIGRhdGEgZG8gbm90IGNoYW5nZS4gU28gaXQncyBiZXR0ZXIKKyAqIGJlY2F1c2UgdGhleSBhcmUgZ2VuZXJhdGVkIGV2ZW4gaWYgdGhlIGRhdGEgZG8gbm90IGNoYW5nZS4gU28gaXQncyBiZXR0ZXIKICAqIHRvIGtlZXAgdGhlIGludGVycnVwdCBmb3IgdGhlIGZyZWUtZmFsbCBldmVudC4gVGhlIHZhbHVlcyBhcmUgdXBkYXRlZCBhdAogICogNDBIeiAoYXQgdGhlIGxvd2VzdCBmcmVxdWVuY3kpLCBidXQgYXMgaXQgY2FuIGJlIHByZXR0eSB0aW1lIGNvbnN1bWluZyBvbgogICogc29tZSBsb3cgcHJvY2Vzc29yLCB3ZSBwb2xsIHRoZSBzZW5zb3Igb25seSBhdCAyMEh6Li4uIGVub3VnaCBmb3IgdGhlCiAgKiBqb3lzdGljay4KICAqLwogCisjZGVmaW5lIExJUzNfUFdST05fREVMQVlfV0FJXzEyQgkoNTAwMCkKKyNkZWZpbmUgTElTM19QV1JPTl9ERUxBWV9XQUlfOEIJCSgzMDAwKQorCisvKgorICogTElTM0xWMDJEIHNwZWMgc2F5cyAxMDI0IExTQnMgY29ycmVzcG9uZHMgMSBHIC0+IDFMU0IgaXMgMTAwMC8xMDI0IG1HCisgKiBMSVMzMDJEIHNwZWMgc2F5czogMTggbUcgLyBkaWdpdAorICogTElTM19BQ0NVUkFDWSBpcyB1c2VkIHRvIGluY3JlYXNlIGFjY3VyYWN5IG9mIHRoZSBpbnRlcm1lZGlhdGUKKyAqIGNhbGN1bGF0aW9uIHJlc3VsdHMuCisgKi8KKyNkZWZpbmUgTElTM19BQ0NVUkFDWQkJCTEwMjQKKy8qIFNlbnNpdGl2aXR5IHZhbHVlcyBmb3IgLTJHICsyRyBzY2FsZSAqLworI2RlZmluZSBMSVMzX1NFTlNJVElWSVRZXzEyQgkJKChMSVMzX0FDQ1VSQUNZICogMTAwMCkgLyAxMDI0KQorI2RlZmluZSBMSVMzX1NFTlNJVElWSVRZXzhCCQkoMTggKiBMSVMzX0FDQ1VSQUNZKQorCisjZGVmaW5lIExJUzNfREVGQVVMVF9GVVpaCQkzCisjZGVmaW5lIExJUzNfREVGQVVMVF9GTEFUCQkzCisKIHN0cnVjdCBsaXMzbHYwMmQgbGlzM19kZXYgPSB7CiAJLm1pc2Nfd2FpdCAgID0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIobGlzM19kZXYubWlzY193YWl0KSwKIH07CkBAIC02NSw3ICs4Miw3IEBACiAJcmV0dXJuIGxvOwogfQogCi1zdGF0aWMgczE2IGxpczNsdjAyZF9yZWFkXzE2KHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcpCitzdGF0aWMgczE2IGxpczNsdjAyZF9yZWFkXzEyKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcpCiB7CiAJdTggbG8sIGhpOwogCkBAIC0xMDIsMTYgKzExOSwxMDYgQEAKIHN0YXRpYyB2b2lkIGxpczNsdjAyZF9nZXRfeHl6KHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCAqeCwgaW50ICp5LCBpbnQgKnopCiB7CiAJaW50IHBvc2l0aW9uWzNdOworCWludCBpOwogCisJbXV0ZXhfbG9jaygmbGlzMy0+bXV0ZXgpOwogCXBvc2l0aW9uWzBdID0gbGlzMy0+cmVhZF9kYXRhKGxpczMsIE9VVFgpOwogCXBvc2l0aW9uWzFdID0gbGlzMy0+cmVhZF9kYXRhKGxpczMsIE9VVFkpOwogCXBvc2l0aW9uWzJdID0gbGlzMy0+cmVhZF9kYXRhKGxpczMsIE9VVFopOworCW11dGV4X3VubG9jaygmbGlzMy0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJcG9zaXRpb25baV0gPSAocG9zaXRpb25baV0gKiBsaXMzLT5zY2FsZSkgLyBMSVMzX0FDQ1VSQUNZOwogCiAJKnggPSBsaXMzbHYwMmRfZ2V0X2F4aXMobGlzMy0+YWMueCwgcG9zaXRpb24pOwogCSp5ID0gbGlzM2x2MDJkX2dldF9heGlzKGxpczMtPmFjLnksIHBvc2l0aW9uKTsKIAkqeiA9IGxpczNsdjAyZF9nZXRfYXhpcyhsaXMzLT5hYy56LCBwb3NpdGlvbik7CiB9CiAKKy8qIGNvbnZlcnNpb24gYnR3IHNhbXBsaW5nIHJhdGUgYW5kIHRoZSByZWdpc3RlciB2YWx1ZXMgKi8KK3N0YXRpYyBpbnQgbGlzM18xMl9yYXRlc1s0XSA9IHs0MCwgMTYwLCA2NDAsIDI1NjB9Oworc3RhdGljIGludCBsaXMzXzhfcmF0ZXNbMl0gPSB7MTAwLCA0MDB9OworCisvKiBPRFIgaXMgT3V0cHV0IERhdGEgUmF0ZSAqLworc3RhdGljIGludCBsaXMzbHYwMmRfZ2V0X29kcih2b2lkKQoreworCXU4IGN0cmw7CisJaW50IHNoaWZ0OworCisJbGlzM19kZXYucmVhZCgmbGlzM19kZXYsIENUUkxfUkVHMSwgJmN0cmwpOworCWN0cmwgJj0gbGlzM19kZXYub2RyX21hc2s7CisJc2hpZnQgPSBmZnMobGlzM19kZXYub2RyX21hc2spIC0gMTsKKwlyZXR1cm4gbGlzM19kZXYub2Ryc1soY3RybCA+PiBzaGlmdCldOworfQorCitzdGF0aWMgaW50IGxpczNsdjAyZF9zZXRfb2RyKGludCByYXRlKQoreworCXU4IGN0cmw7CisJaW50IGksIGxlbiwgc2hpZnQ7CisKKwlsaXMzX2Rldi5yZWFkKCZsaXMzX2RldiwgQ1RSTF9SRUcxLCAmY3RybCk7CisJY3RybCAmPSB+bGlzM19kZXYub2RyX21hc2s7CisJbGVuID0gMSA8PCBod2VpZ2h0X2xvbmcobGlzM19kZXYub2RyX21hc2spOyAvKiAjIG9mIHBvc3NpYmxlIHZhbHVlcyAqLworCXNoaWZ0ID0gZmZzKGxpczNfZGV2Lm9kcl9tYXNrKSAtIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChsaXMzX2Rldi5vZHJzW2ldID09IHJhdGUpIHsKKwkJCWxpczNfZGV2LndyaXRlKCZsaXMzX2RldiwgQ1RSTF9SRUcxLAorCQkJCQljdHJsIHwgKGkgPDwgc2hpZnQpKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbGlzM2x2MDJkX3NlbGZ0ZXN0KHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIHMxNiByZXN1bHRzWzNdKQoreworCXU4IHJlZzsKKwlzMTYgeCwgeSwgejsKKwl1OCBzZWxmdGVzdDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbGlzMy0+bXV0ZXgpOworCWlmIChsaXMzX2Rldi53aG9hbWkgPT0gV0FJXzEyQikKKwkJc2VsZnRlc3QgPSBDVFJMMV9TVDsKKwllbHNlCisJCXNlbGZ0ZXN0ID0gQ1RSTDFfU1RQOworCisJbGlzMy0+cmVhZChsaXMzLCBDVFJMX1JFRzEsICZyZWcpOworCWxpczMtPndyaXRlKGxpczMsIENUUkxfUkVHMSwgKHJlZyB8IHNlbGZ0ZXN0KSk7CisJbXNsZWVwKGxpczMtPnB3cm9uX2RlbGF5IC8gbGlzM2x2MDJkX2dldF9vZHIoKSk7CisKKwkvKiBSZWFkIGRpcmVjdGx5IHRvIGF2b2lkIGF4aXMgcmVtYXAgKi8KKwl4ID0gbGlzMy0+cmVhZF9kYXRhKGxpczMsIE9VVFgpOworCXkgPSBsaXMzLT5yZWFkX2RhdGEobGlzMywgT1VUWSk7CisJeiA9IGxpczMtPnJlYWRfZGF0YShsaXMzLCBPVVRaKTsKKworCS8qIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdzICovCisJbGlzMy0+d3JpdGUobGlzMywgQ1RSTF9SRUcxLCByZWcpOworCW1zbGVlcChsaXMzLT5wd3Jvbl9kZWxheSAvIGxpczNsdjAyZF9nZXRfb2RyKCkpOworCisJcmVzdWx0c1swXSA9IHggLSBsaXMzLT5yZWFkX2RhdGEobGlzMywgT1VUWCk7CisJcmVzdWx0c1sxXSA9IHkgLSBsaXMzLT5yZWFkX2RhdGEobGlzMywgT1VUWSk7CisJcmVzdWx0c1syXSA9IHogLSBsaXMzLT5yZWFkX2RhdGEobGlzMywgT1VUWik7CisKKwlyZXQgPSAwOworCWlmIChsaXMzLT5wZGF0YSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJLyogQ2hlY2sgYWdhaW5zdCBzZWxmdGVzdCBhY2NlcHRhbmNlIGxpbWl0cyAqLworCQkJaWYgKChyZXN1bHRzW2ldIDwgbGlzMy0+cGRhdGEtPnN0X21pbl9saW1pdHNbaV0pIHx8CisJCQkgICAgKHJlc3VsdHNbaV0gPiBsaXMzLT5wZGF0YS0+c3RfbWF4X2xpbWl0c1tpXSkpIHsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfQorCX0KKworCS8qIHRlc3QgcGFzc2VkICovCitmYWlsOgorCW11dGV4X3VubG9jaygmbGlzMy0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKIHZvaWQgbGlzM2x2MDJkX3Bvd2Vyb2ZmKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpCiB7CiAJLyogZGlzYWJsZSBYLFksWiBheGlzIGFuZCBwb3dlciBkb3duICovCkBAIC0xMjUsMTQgKzIzMiwxOSBAQAogCiAJbGlzMy0+aW5pdChsaXMzKTsKIAorCS8qIExJUzMgcG93ZXIgb24gZGVsYXkgaXMgcXVpdGUgbG9uZyAqLworCW1zbGVlcChsaXMzLT5wd3Jvbl9kZWxheSAvIGxpczNsdjAyZF9nZXRfb2RyKCkpOworCiAJLyoKIAkgKiBDb21tb24gY29uZmlndXJhdGlvbgotCSAqIEJEVTogTFNCIGFuZCBNU0IgdmFsdWVzIGFyZSBub3QgdXBkYXRlZCB1bnRpbCBib3RoIGhhdmUgYmVlbiByZWFkLgotCSAqICAgICAgU28gdGhlIHZhbHVlIHJlYWQgd2lsbCBhbHdheXMgYmUgY29ycmVjdC4KKwkgKiBCRFU6ICgxMiBiaXRzIHNlbnNvcnMgb25seSkgTFNCIGFuZCBNU0IgdmFsdWVzIGFyZSBub3QgdXBkYXRlZCB1bnRpbAorCSAqICAgICAgYm90aCBoYXZlIGJlZW4gcmVhZC4gU28gdGhlIHZhbHVlIHJlYWQgd2lsbCBhbHdheXMgYmUgY29ycmVjdC4KIAkgKi8KLQlsaXMzLT5yZWFkKGxpczMsIENUUkxfUkVHMiwgJnJlZyk7Ci0JcmVnIHw9IENUUkwyX0JEVTsKLQlsaXMzLT53cml0ZShsaXMzLCBDVFJMX1JFRzIsIHJlZyk7CisJaWYgKGxpczMtPndob2FtaSA9PSAgV0FJXzEyQikgeworCQlsaXMzLT5yZWFkKGxpczMsIENUUkxfUkVHMiwgJnJlZyk7CisJCXJlZyB8PSBDVFJMMl9CRFU7CisJCWxpczMtPndyaXRlKGxpczMsIENUUkxfUkVHMiwgcmVnKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsaXMzbHYwMmRfcG93ZXJvbik7CiAKQEAgLTI3MywyMiArMzg1LDE3IEBACiAJaW50IHgsIHksIHo7CiAKIAlsaXMzbHYwMmRfZ2V0X3h5eigmbGlzM19kZXYsICZ4LCAmeSwgJnopOwotCWlucHV0X3JlcG9ydF9hYnMocGlkZXYtPmlucHV0LCBBQlNfWCwgeCAtIGxpczNfZGV2LnhjYWxpYik7Ci0JaW5wdXRfcmVwb3J0X2FicyhwaWRldi0+aW5wdXQsIEFCU19ZLCB5IC0gbGlzM19kZXYueWNhbGliKTsKLQlpbnB1dF9yZXBvcnRfYWJzKHBpZGV2LT5pbnB1dCwgQUJTX1osIHogLSBsaXMzX2Rldi56Y2FsaWIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsaXMzbHYwMmRfY2FsaWJyYXRlX2pveXN0aWNrKHZvaWQpCi17Ci0JbGlzM2x2MDJkX2dldF94eXooJmxpczNfZGV2LAotCQkmbGlzM19kZXYueGNhbGliLCAmbGlzM19kZXYueWNhbGliLCAmbGlzM19kZXYuemNhbGliKTsKKwlpbnB1dF9yZXBvcnRfYWJzKHBpZGV2LT5pbnB1dCwgQUJTX1gsIHgpOworCWlucHV0X3JlcG9ydF9hYnMocGlkZXYtPmlucHV0LCBBQlNfWSwgeSk7CisJaW5wdXRfcmVwb3J0X2FicyhwaWRldi0+aW5wdXQsIEFCU19aLCB6KTsKKwlpbnB1dF9zeW5jKHBpZGV2LT5pbnB1dCk7CiB9CiAKIGludCBsaXMzbHYwMmRfam95c3RpY2tfZW5hYmxlKHZvaWQpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBlcnI7CisJaW50IG1heF92YWwsIGZ1enosIGZsYXQ7CiAKIAlpZiAobGlzM19kZXYuaWRldikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDEsOCArNDA4LDYgQEAKIAlsaXMzX2Rldi5pZGV2LT5wb2xsX2ludGVydmFsID0gTURQU19QT0xMX0lOVEVSVkFMOwogCWlucHV0X2RldiA9IGxpczNfZGV2LmlkZXYtPmlucHV0OwogCi0JbGlzM2x2MDJkX2NhbGlicmF0ZV9qb3lzdGljaygpOwotCiAJaW5wdXRfZGV2LT5uYW1lICAgICAgID0gIlNUIExJUzNMVjAyREwgQWNjZWxlcm9tZXRlciI7CiAJaW5wdXRfZGV2LT5waHlzICAgICAgID0gRFJJVkVSX05BTUUgIi9pbnB1dDAiOwogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwpAQCAtMzEwLDkgKzQxNSwxMiBAQAogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZsaXMzX2Rldi5wZGV2LT5kZXY7CiAKIAlzZXRfYml0KEVWX0FCUywgaW5wdXRfZGV2LT5ldmJpdCk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgLWxpczNfZGV2Lm1kcHNfbWF4X3ZhbCwgbGlzM19kZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAtbGlzM19kZXYubWRwc19tYXhfdmFsLCBsaXMzX2Rldi5tZHBzX21heF92YWwsIDMsIDMpOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1osIC1saXMzX2Rldi5tZHBzX21heF92YWwsIGxpczNfZGV2Lm1kcHNfbWF4X3ZhbCwgMywgMyk7CisJbWF4X3ZhbCA9IChsaXMzX2Rldi5tZHBzX21heF92YWwgKiBsaXMzX2Rldi5zY2FsZSkgLyBMSVMzX0FDQ1VSQUNZOworCWZ1enogPSAoTElTM19ERUZBVUxUX0ZVWlogKiBsaXMzX2Rldi5zY2FsZSkgLyBMSVMzX0FDQ1VSQUNZOworCWZsYXQgPSAoTElTM19ERUZBVUxUX0ZMQVQgKiBsaXMzX2Rldi5zY2FsZSkgLyBMSVMzX0FDQ1VSQUNZOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIC1tYXhfdmFsLCBtYXhfdmFsLCBmdXp6LCBmbGF0KTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAtbWF4X3ZhbCwgbWF4X3ZhbCwgZnV6eiwgZmxhdCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWiwgLW1heF92YWwsIG1heF92YWwsIGZ1enosIGZsYXQpOwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShsaXMzX2Rldi5pZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0zMzIsMTEgKzQ0MCwyMyBAQAogCWlmIChsaXMzX2Rldi5pcnEpCiAJCW1pc2NfZGVyZWdpc3RlcigmbGlzM2x2MDJkX21pc2NfZGV2aWNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX3BvbGxlZF9kZXZpY2UobGlzM19kZXYuaWRldik7CisJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKGxpczNfZGV2LmlkZXYpOwogCWxpczNfZGV2LmlkZXYgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGlzM2x2MDJkX2pveXN0aWNrX2Rpc2FibGUpOwogCiAvKiBTeXNmcyBzdHVmZiAqLworc3RhdGljIHNzaXplX3QgbGlzM2x2MDJkX3NlbGZ0ZXN0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IHJlc3VsdDsKKwlzMTYgdmFsdWVzWzNdOworCisJcmVzdWx0ID0gbGlzM2x2MDJkX3NlbGZ0ZXN0KCZsaXMzX2RldiwgdmFsdWVzKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlcyAlZCAlZCAlZFxuIiwgcmVzdWx0ID09IDAgPyAiT0siIDogIkZBSUwiLAorCQl2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTsKK30KKwogc3RhdGljIHNzaXplX3QgbGlzM2x2MDJkX3Bvc2l0aW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zNDYsNDEgKzQ2NiwzNSBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiglZCwlZCwlZClcbiIsIHgsIHksIHopOwogfQogCi1zdGF0aWMgc3NpemVfdCBsaXMzbHYwMmRfY2FsaWJyYXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiKCVkLCVkLCVkKVxuIiwgbGlzM19kZXYueGNhbGliLCBsaXMzX2Rldi55Y2FsaWIsIGxpczNfZGV2LnpjYWxpYik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGxpczNsdjAyZF9jYWxpYnJhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWxpczNsdjAyZF9jYWxpYnJhdGVfam95c3RpY2soKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIGNvbnZlcnNpb24gYnR3IHNhbXBsaW5nIHJhdGUgYW5kIHRoZSByZWdpc3RlciB2YWx1ZXMgKi8KLXN0YXRpYyBpbnQgbGlzM2x2MDJkbF9kZl92YWxbNF0gPSB7NDAsIDE2MCwgNjQwLCAyNTYwfTsKIHN0YXRpYyBzc2l6ZV90IGxpczNsdjAyZF9yYXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQl1OCBjdHJsOwotCWludCB2YWw7Ci0KLQlsaXMzX2Rldi5yZWFkKCZsaXMzX2RldiwgQ1RSTF9SRUcxLCAmY3RybCk7Ci0JdmFsID0gKGN0cmwgJiAoQ1RSTDFfREYwIHwgQ1RSTDFfREYxKSkgPj4gNDsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGlzM2x2MDJkbF9kZl92YWxbdmFsXSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxpczNsdjAyZF9nZXRfb2RyKCkpOwogfQogCitzdGF0aWMgc3NpemVfdCBsaXMzbHYwMmRfcmF0ZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkJc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZyYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobGlzM2x2MDJkX3NldF9vZHIocmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc2VsZnRlc3QsIFNfSVJVU1IsIGxpczNsdjAyZF9zZWxmdGVzdF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3NpdGlvbiwgU19JUlVHTywgbGlzM2x2MDJkX3Bvc2l0aW9uX3Nob3csIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGNhbGlicmF0ZSwgU19JUlVHT3xTX0lXVVNSLCBsaXMzbHYwMmRfY2FsaWJyYXRlX3Nob3csCi0JbGlzM2x2MDJkX2NhbGlicmF0ZV9zdG9yZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIocmF0ZSwgU19JUlVHTywgbGlzM2x2MDJkX3JhdGVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGxpczNsdjAyZF9yYXRlX3Nob3csCisJCQkJCSAgICBsaXMzbHYwMmRfcmF0ZV9zZXQpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGlzM2x2MDJkX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfc2VsZnRlc3QuYXR0ciwKIAkmZGV2X2F0dHJfcG9zaXRpb24uYXR0ciwKLQkmZGV2X2F0dHJfY2FsaWJyYXRlLmF0dHIsCiAJJmRldl9hdHRyX3JhdGUuYXR0ciwKIAlOVUxMCiB9OwpAQCAtNDA5LDIyICs1MjMsMzAgQEAKIAogLyoKICAqIEluaXRpYWxpc2UgdGhlIGFjY2VsZXJvbWV0ZXIgYW5kIHRoZSB2YXJpb3VzIHN1YnN5c3RlbXMuCi0gKiBTaG91bGQgYmUgcmF0aGVyIGluZGVwZW5kYW50IG9mIHRoZSBidXMgc3lzdGVtLgorICogU2hvdWxkIGJlIHJhdGhlciBpbmRlcGVuZGVudCBvZiB0aGUgYnVzIHN5c3RlbS4KICAqLwogaW50IGxpczNsdjAyZF9pbml0X2RldmljZShzdHJ1Y3QgbGlzM2x2MDJkICpkZXYpCiB7CiAJZGV2LT53aG9hbWkgPSBsaXMzbHYwMmRfcmVhZF84KGRldiwgV0hPX0FNX0kpOwogCiAJc3dpdGNoIChkZXYtPndob2FtaSkgewotCWNhc2UgTElTX0RPVUJMRV9JRDoKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAyLWJ5dGUgc2Vuc29yIGZvdW5kXG4iKTsKLQkJZGV2LT5yZWFkX2RhdGEgPSBsaXMzbHYwMmRfcmVhZF8xNjsKKwljYXNlIFdBSV8xMkI6CisJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogMTIgYml0cyBzZW5zb3IgZm91bmRcbiIpOworCQlkZXYtPnJlYWRfZGF0YSA9IGxpczNsdjAyZF9yZWFkXzEyOwogCQlkZXYtPm1kcHNfbWF4X3ZhbCA9IDIwNDg7CisJCWRldi0+cHdyb25fZGVsYXkgPSBMSVMzX1BXUk9OX0RFTEFZX1dBSV8xMkI7CisJCWRldi0+b2RycyA9IGxpczNfMTJfcmF0ZXM7CisJCWRldi0+b2RyX21hc2sgPSBDVFJMMV9ERjAgfCBDVFJMMV9ERjE7CisJCWRldi0+c2NhbGUgPSBMSVMzX1NFTlNJVElWSVRZXzEyQjsKIAkJYnJlYWs7Ci0JY2FzZSBMSVNfU0lOR0xFX0lEOgotCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IDEtYnl0ZSBzZW5zb3IgZm91bmRcbiIpOworCWNhc2UgV0FJXzhCOgorCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IDggYml0cyBzZW5zb3IgZm91bmRcbiIpOwogCQlkZXYtPnJlYWRfZGF0YSA9IGxpczNsdjAyZF9yZWFkXzg7CiAJCWRldi0+bWRwc19tYXhfdmFsID0gMTI4OworCQlkZXYtPnB3cm9uX2RlbGF5ID0gTElTM19QV1JPTl9ERUxBWV9XQUlfOEI7CisJCWRldi0+b2RycyA9IGxpczNfOF9yYXRlczsKKwkJZGV2LT5vZHJfbWFzayA9IENUUkwxX0RSOworCQlkZXYtPnNjYWxlID0gTElTM19TRU5TSVRJVklUWV84QjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCkBAIC00MzIsNiArNTU0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbXV0ZXhfaW5pdCgmZGV2LT5tdXRleCk7CisKIAlsaXMzbHYwMmRfYWRkX2ZzKGRldik7CiAJbGlzM2x2MDJkX3Bvd2Vyb24oZGV2KTsKIApAQCAtNDQzLDcgKzU2Nyw3IEBACiAJaWYgKGRldi0+cGRhdGEpIHsKIAkJc3RydWN0IGxpczNsdjAyZF9wbGF0Zm9ybV9kYXRhICpwID0gZGV2LT5wZGF0YTsKIAotCQlpZiAocC0+Y2xpY2tfZmxhZ3MgJiYgKGRldi0+d2hvYW1pID09IExJU19TSU5HTEVfSUQpKSB7CisJCWlmIChwLT5jbGlja19mbGFncyAmJiAoZGV2LT53aG9hbWkgPT0gV0FJXzhCKSkgewogCQkJZGV2LT53cml0ZShkZXYsIENMSUNLX0NGRywgcC0+Y2xpY2tfZmxhZ3MpOwogCQkJZGV2LT53cml0ZShkZXYsIENMSUNLX1RJTUVMSU1JVCwgcC0+Y2xpY2tfdGltZV9saW1pdCk7CiAJCQlkZXYtPndyaXRlKGRldiwgQ0xJQ0tfTEFURU5DWSwgcC0+Y2xpY2tfbGF0ZW5jeSk7CkBAIC00NTQsNyArNTc4LDcgQEAKIAkJCQkJKHAtPmNsaWNrX3RocmVzaF95IDw8IDQpKTsKIAkJfQogCi0JCWlmIChwLT53YWtldXBfZmxhZ3MgJiYgKGRldi0+d2hvYW1pID09IExJU19TSU5HTEVfSUQpKSB7CisJCWlmIChwLT53YWtldXBfZmxhZ3MgJiYgKGRldi0+d2hvYW1pID09IFdBSV84QikpIHsKIAkJCWRldi0+d3JpdGUoZGV2LCBGRl9XVV9DRkdfMSwgcC0+d2FrZXVwX2ZsYWdzKTsKIAkJCWRldi0+d3JpdGUoZGV2LCBGRl9XVV9USFNfMSwgcC0+d2FrZXVwX3RocmVzaCAmIDB4N2YpOwogCQkJLyogZGVmYXVsdCB0byAyLjVtcyBmb3Igbm93ICovCkBAIC00ODQsNCArNjA4LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU1QgTElTM0xWMDJEeCB0aHJlZS1heGlzIGRpZ2l0YWwgYWNjZWxlcm9tZXRlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIllhbiBCdXJtYW4sIEVyaWMgUGllbCwgUGF2ZWwgTWFjaGVrIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmggYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCmluZGV4IDNlMWZmNDYuLmU2YTAxZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmgKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaApAQCAtMiw3ICsyLDcgQEAKICAqICBsaXMzbHYwMmQuaCAtIFNUIExJUzNMVjAyREwgYWNjZWxlcm9tZXRlciBkcml2ZXIKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggWWFuIEJ1cm1hbgotICogIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFBpZWwKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBFcmljIFBpZWwKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMjAgKzIyLDE4IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQtcG9sbGRldi5oPgogCiAvKgotICogVGhlIGFjdHVhbCBjaGlwIGlzIFNUTWljcm9lbGVjdHJvbmljcyBMSVMzTFYwMkRMIG9yIExJUzNMVjAyRFEgdGhhdCBzZWVtcyB0bwotICogYmUgY29ubmVjdGVkIHZpYSBTUEkuIFRoZXJlIGV4aXN0cyBhbHNvIHNldmVyYWwgc2ltaWxhciBjaGlwcyAoc3VjaCBhcyBMSVMzMDJETCBvcgotICogTElTM0wwMkRRKSBhbmQgdGhleSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCByZWdpc3RlcnMsIGJ1dCB3ZSBjYW4gcHJvdmlkZSBhCi0gKiBjb21tb24gaW50ZXJmYWNlIGZvciBhbGwgb2YgdGhlbS4KLSAqIFRoZXkgY2FuIGFsc28gYmUgY29ubmVjdGVkIHZpYSBJwrJDLgorICogVGhpcyBkcml2ZXIgdHJpZXMgdG8gc3VwcG9ydCB0aGUgImRpZ2l0YWwiIGFjY2VsZXJvbWV0ZXIgY2hpcHMgZnJvbQorICogU1RNaWNyb2VsZWN0cm9uaWNzIHN1Y2ggYXMgTElTM0xWMDJETCwgTElTMzAyREwsIExJUzNMMDJEUSwgTElTMzMxREwsCisgKiBMSVMzNURFLCBvciBMSVMyMDJETC4gVGhleSBhcmUgdmVyeSBzaW1pbGFyIGluIHRlcm1zIG9mIHByb2dyYW1taW5nLCB3aXRoCisgKiBhbG1vc3QgdGhlIHNhbWUgcmVnaXN0ZXJzLiBJbiBhZGRpdGlvbiB0byBkaWZmZXJpbmcgb24gcGh5c2ljYWwgcHJvcGVydGllcywKKyAqIHRoZXkgZGlmZmVyIG9uIHRoZSBudW1iZXIgb2YgYXhlcyAoMi8zKSwgcHJlY2lzaW9uICg4LzEyIGJpdHMpLCBhbmQgc3BlY2lhbAorICogZmVhdHVyZXMgKGZyZWVmYWxsIGRldGVjdGlvbiwgY2xpY2suLi4pLiBVbmZvcnR1bmF0ZWx5LCBub3QgYWxsIHRoZQorICogZGlmZmVyZW5jZXMgY2FuIGJlIHByb2JlZCB2aWEgYSByZWdpc3Rlci4KKyAqIFRoZXkgY2FuIGJlIGNvbm5lY3RlZCBlaXRoZXIgdmlhIEnCskMgb3IgU1BJLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saXMzbHYwMmQuaD4KIAotLyogMi1ieXRlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBMSVNfRE9VQkxFX0lECTB4M0EgLyogTElTM0xWMDJEW0xRXSAqLwotLyogMS1ieXRlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBMSVNfU0lOR0xFX0lECTB4M0IgLyogTElTWzMyXTAyREwgYW5kIG90aGVycyAqLwotCiBlbnVtIGxpczNfcmVnIHsKIAlXSE9fQU1fSQk9IDB4MEYsCiAJT0ZGU0VUX1gJPSAweDE2LApAQCAtOTQsNyArOTIsMTMgQEAKIAlERF9USFNFX0gJPSAweDNGLAogfTsKIAotZW51bSBsaXMzbHYwMmRfY3RybDEgeworZW51bSBsaXMzX3dob19hbV9pIHsKKwlXQUlfMTJCCQk9IDB4M0EsIC8qIDEyIGJpdHM6IExJUzNMVjAyRFtMUV0uLi4gKi8KKwlXQUlfOEIJCT0gMHgzQiwgLyogOCBiaXRzOiBMSVNbMjNdMDJEW0xRXS4uLiAqLworCVdBSV82QgkJPSAweDUyLCAvKiA2IGJpdHM6IExJUzMzMURMRiAtIG5vdCBzdXBwb3J0ZWQgKi8KK307CisKK2VudW0gbGlzM2x2MDJkX2N0cmwxXzEyYiB7CiAJQ1RSTDFfWGVuCT0gMHgwMSwKIAlDVFJMMV9ZZW4JPSAweDAyLAogCUNUUkwxX1plbgk9IDB4MDQsCkBAIC0xMDQsNiArMTA4LDE2IEBACiAJQ1RSTDFfUEQwCT0gMHg0MCwKIAlDVFJMMV9QRDEJPSAweDgwLAogfTsKKworLyogRGVsdGEgdG8gY3RybDFfMTJiIHZlcnNpb24gKi8KK2VudW0gbGlzM2x2MDJkX2N0cmwxXzhiIHsKKwlDVFJMMV9TVE0JPSAweDA4LAorCUNUUkwxX1NUUAk9IDB4MTAsCisJQ1RSTDFfRlMJPSAweDIwLAorCUNUUkwxX1BECT0gMHg0MCwKKwlDVFJMMV9EUgk9IDB4ODAsCit9OworCiBlbnVtIGxpczNsdjAyZF9jdHJsMiB7CiAJQ1RSTDJfREFTCT0gMHgwMSwKIAlDVFJMMl9TSU0JPSAweDAyLApAQCAtMTk0LDE2ICsyMDgsMjAgQEAKIAlpbnQgKCp3cml0ZSkgKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcsIHU4IHZhbCk7CiAJaW50ICgqcmVhZCkgKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcsIHU4ICpyZXQpOwogCi0JdTgJCQl3aG9hbWk7ICAgIC8qIDNBaDogMi1ieXRlIHJlZ2lzdHJpZXMsIDNCaDogMS1ieXRlIHJlZ2lzdHJpZXMgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAqb2RyczsgICAgIC8qIFN1cHBvcnRlZCBvdXRwdXQgZGF0YSByYXRlcyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIG9kcl9tYXNrOyAgLyogT0RSIGJpdCBtYXNrICovCisJdTgJCQl3aG9hbWk7ICAgIC8qIGluZGljYXRlcyBtZWFzdXJlbWVudCBwcmVjaXNpb24gKi8KIAlzMTYgKCpyZWFkX2RhdGEpIChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnKTsKIAlpbnQJCQltZHBzX21heF92YWw7CisJaW50CQkJcHdyb25fZGVsYXk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc2NhbGU7IC8qCisJCQkJCSogcmVsYXRpb25zaGlwIGJldHdlZW4gMSBMQlMgYW5kIG1HCisJCQkJCSogKDEvMTAwMHRoIG9mIGVhcnRoIGdyYXZpdHkpCisJCQkJCSovCiAKIAlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldgkqaWRldjsgICAgIC8qIGlucHV0IGRldmljZSAqLwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7ICAgICAvKiBwbGF0Zm9ybSBkZXZpY2UgKi8KIAlhdG9taWNfdAkJY291bnQ7ICAgICAvKiBpbnRlcnJ1cHQgY291bnQgYWZ0ZXIgbGFzdCByZWFkICovCi0JaW50CQkJeGNhbGliOyAgICAvKiBjYWxpYnJhdGVkIG51bGwgdmFsdWUgZm9yIHggKi8KLQlpbnQJCQl5Y2FsaWI7ICAgIC8qIGNhbGlicmF0ZWQgbnVsbCB2YWx1ZSBmb3IgeSAqLwotCWludAkJCXpjYWxpYjsgICAgLyogY2FsaWJyYXRlZCBudWxsIHZhbHVlIGZvciB6ICovCiAJc3RydWN0IGF4aXNfY29udmVyc2lvbglhYzsgICAgICAgIC8qIGh3IC0+IGxvZ2ljYWwgYXhpcyAqLwogCiAJdTMyCQkJaXJxOyAgICAgICAvKiBJUlEgbnVtYmVyICovCkBAIC0yMTIsNiArMjMwLDcgQEAKIAl1bnNpZ25lZCBsb25nCQltaXNjX29wZW5lZDsgLyogYml0MDogd2hldGhlciB0aGUgZGV2aWNlIGlzIG9wZW4gKi8KIAogCXN0cnVjdCBsaXMzbHYwMmRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CS8qIGZvciBwYXNzaW5nIGJvYXJkIGNvbmZpZyAqLworCXN0cnVjdCBtdXRleAkJbXV0ZXg7ICAgICAvKiBTZXJpYWxpemUgcG9sbCBhbmQgc2VsZnRlc3QgKi8KIH07CiAKIGludCBsaXMzbHYwMmRfaW5pdF9kZXZpY2Uoc3RydWN0IGxpczNsdjAyZCAqbGlzMyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9pMmMuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWY1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9pMmMuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIGRyaXZlcnMvaHdtb24vbGlzM2x2MDJkX2kyYy5jCisgKgorICogSW1wbGVtZW50cyBJMkMgaW50ZXJmYWNlIGZvciBsaXMzbHYwMmQgKFNUTWljcm9lbGVjdHJvbmljcykgYWNjZWxlcm9tZXRlci4KKyAqIERyaXZlciBpcyBiYXNlZCBvbiBjb3JyZXNwb25kaW5nIFNQSSBkcml2ZXIgd3JpdHRlbiBieSBEYW5pZWwgTWFjaworICogKGxpczNsdjAyZF9zcGkuYyAoQykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiApLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQ29udGFjdDogU2FtdSBPbmthbG8gPHNhbXUucC5vbmthbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImxpczNsdjAyZC5oIgorCisjZGVmaW5lIERSVl9OQU1FIAkibGlzM2x2MDJkX2kyYyIKKworc3RhdGljIGlubGluZSBzMzIgbGlzM19pMmNfd3JpdGUoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZywgdTggdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSBsaXMzLT5idXNfcHJpdjsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjLCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBzMzIgbGlzM19pMmNfcmVhZChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCAqdikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IGxpczMtPmJ1c19wcml2OworCSp2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGMsIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlzM19pMmNfaW5pdChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQoreworCXU4IHJlZzsKKwlpbnQgcmV0OworCisJLyogcG93ZXIgdXAgdGhlIGRldmljZSAqLworCXJldCA9IGxpczMtPnJlYWQobGlzMywgQ1RSTF9SRUcxLCAmcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJlZyB8PSBDVFJMMV9QRDA7CisJcmV0dXJuIGxpczMtPndyaXRlKGxpczMsIENUUkxfUkVHMSwgcmVnKTsKK30KKworLyogRGVmYXVsdCBheGlzIG1hcHBpbmcgYnV0IGl0IGNhbiBiZSBvdmVyd3JpdHRlbiBieSBwbGF0Zm9ybSBkYXRhICovCitzdGF0aWMgc3RydWN0IGF4aXNfY29udmVyc2lvbiBsaXMzbHYwMmRfYXhpc19tYXAgPSB7IExJUzNfREVWX1gsCisJCQkJCQkgICAgIExJUzNfREVWX1ksCisJCQkJCQkgICAgIExJUzNfREVWX1ogfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbGlzM2x2MDJkX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGxpczNsdjAyZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEpIHsKKwkJaWYgKHBkYXRhLT5heGlzX3gpCisJCQlsaXMzbHYwMmRfYXhpc19tYXAueCA9IHBkYXRhLT5heGlzX3g7CisKKwkJaWYgKHBkYXRhLT5heGlzX3kpCisJCQlsaXMzbHYwMmRfYXhpc19tYXAueSA9IHBkYXRhLT5heGlzX3k7CisKKwkJaWYgKHBkYXRhLT5heGlzX3opCisJCQlsaXMzbHYwMmRfYXhpc19tYXAueiA9IHBkYXRhLT5heGlzX3o7CisKKwkJaWYgKHBkYXRhLT5zZXR1cF9yZXNvdXJjZXMpCisJCQlyZXQgPSBwZGF0YS0+c2V0dXBfcmVzb3VyY2VzKCk7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlsaXMzX2Rldi5wZGF0YQkgID0gcGRhdGE7CisJbGlzM19kZXYuYnVzX3ByaXYgPSBjbGllbnQ7CisJbGlzM19kZXYuaW5pdAkgID0gbGlzM19pMmNfaW5pdDsKKwlsaXMzX2Rldi5yZWFkCSAgPSBsaXMzX2kyY19yZWFkOworCWxpczNfZGV2LndyaXRlCSAgPSBsaXMzX2kyY193cml0ZTsKKwlsaXMzX2Rldi5pcnEJICA9IGNsaWVudC0+aXJxOworCWxpczNfZGV2LmFjCSAgPSBsaXMzbHYwMmRfYXhpc19tYXA7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCAmbGlzM19kZXYpOworCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmbGlzM19kZXYpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaXMzbHYwMmRfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsaXMzbHYwMmQgKmxpczMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbGlzM2x2MDJkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+cmVsZWFzZV9yZXNvdXJjZXMpCisJCXBkYXRhLT5yZWxlYXNlX3Jlc291cmNlcygpOworCisJbGlzM2x2MDJkX2pveXN0aWNrX2Rpc2FibGUoKTsKKwlsaXMzbHYwMmRfcG93ZXJvZmYobGlzMyk7CisKKwlyZXR1cm4gbGlzM2x2MDJkX3JlbW92ZV9mcygmbGlzM19kZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGxpczNsdjAyZF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoIWxpczMtPnBkYXRhLT53YWtldXBfZmxhZ3MpCisJCWxpczNsdjAyZF9wb3dlcm9mZihsaXMzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaXMzbHYwMmRfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsaXMzbHYwMmQgKmxpczMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlmICghbGlzMy0+cGRhdGEtPndha2V1cF9mbGFncykKKwkJbGlzM2x2MDJkX3Bvd2Vyb24obGlzMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpczNsdjAyZF9pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlsaXMzbHYwMmRfaTJjX3N1c3BlbmQoY2xpZW50LCBQTVNHX1NVU1BFTkQpOworfQorI2Vsc2UKKyNkZWZpbmUgbGlzM2x2MDJkX2kyY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgbGlzM2x2MDJkX2kyY19yZXN1bWUJTlVMTAorI2RlZmluZSBsaXMzbHYwMmRfaTJjX3NodXRkb3duCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbGlzM2x2MDJkX2lkW10gPSB7CisJeyJsaXMzbHYwMmQiLCAwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsaXMzbHYwMmRfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbGlzM2x2MDJkX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlcgkgPSB7CisJCS5uYW1lICAgPSBEUlZfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSBsaXMzbHYwMmRfaTJjX3N1c3BlbmQsCisJLnNodXRkb3duID0gbGlzM2x2MDJkX2kyY19zaHV0ZG93biwKKwkucmVzdW1lID0gbGlzM2x2MDJkX2kyY19yZXN1bWUsCisJLnByb2JlCT0gbGlzM2x2MDJkX2kyY19wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobGlzM2x2MDJkX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IGxpczNsdjAyZF9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxpczNsdjAyZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZsaXMzbHYwMmRfaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXMzbHYwMmRfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZsaXMzbHYwMmRfaTJjX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIk5va2lhIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImxpczNsdjAyZCBJMkMgaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGxpczNsdjAyZF9pbml0KTsKK21vZHVsZV9leGl0KGxpczNsdjAyZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG02My5jIGIvZHJpdmVycy9od21vbi9sbTYzLmMKaW5kZXggNWRhNjZhYi4uYmY4MWFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTYzLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTYzLmMKQEAgLTU2LDEyICs1Niw2IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDRjLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGxtNjMpOwotCi0vKgogICogVGhlIExNNjMgcmVnaXN0ZXJzCiAgKi8KIApAQCAtMTM0LDggKzEyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbG02M19kYXRhICpsbTYzX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKIAotc3RhdGljIGludCBsbTYzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGxtNjNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBsbTYzX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiAvKgpAQCAtMTQzLDcgKzEzNiw3IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtNjNfaWRbXSA9IHsKLQl7ICJsbTYzIiwgbG02MyB9LAorCXsgImxtNjMiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNjNfaWQpOwpAQCAtMTU3LDcgKzE1MCw3IEBACiAJLnJlbW92ZQkJPSBsbTYzX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBsbTYzX2lkLAogCS5kZXRlY3QJCT0gbG02M19kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiAvKgpAQCAtNDIzLDcgKzQxNiw3IEBACiAgKi8KIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGxtNjNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG02M19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03My5jIGIvZHJpdmVycy9od21vbi9sbTczLmMKaW5kZXggMGJmOGIyYS4uYzVmMzliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTczLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTczLmMKQEAgLTI3LDkgKzI3LDYgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGMsCiAJCQkJCTB4NGQsIDB4NGUsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGxtNzMpOwotCiAvKiBMTTczIHJlZ2lzdGVycyAqLwogI2RlZmluZSBMTTczX1JFR19JTlBVVAkJMHgwMAogI2RlZmluZSBMTTczX1JFR19DT05GCQkweDAxCkBAIC0xNDUsMTMgKzE0MiwxMyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG03M19pZHNbXSA9IHsKLQl7ICJsbTczIiwgbG03MyB9LAorCXsgImxtNzMiLCAwIH0sCiAJeyAvKiBMSVNUIEVORCAqLyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNzNfaWRzKTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGxtNzNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG03M19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKQEAgLTE4Miw3ICsxNzksNyBAQAogCS5yZW1vdmUJCT0gbG03M19yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG03M19pZHMsCiAJLmRldGVjdAkJPSBsbTczX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qIG1vZHVsZSBnbHVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzUuYyBiL2RyaXZlcnMvaHdtb24vbG03NS5jCmluZGV4IGUzOTI1NDguLjhhZTJjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03NS5jCkBAIC0zMiwxNSArMzIsMTIgQEAKIAogLyoKICAqIFRoaXMgZHJpdmVyIGhhbmRsZXMgdGhlIExNNzUgYW5kIGNvbXBhdGlibGUgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3JzLgotICogT25seSB0eXBlcyB3aGljaCBhcmUgX25vdF8gbGlzdGVkIGluIEkyQ19DTElFTlRfSU5TTU9EXyooKSBuZWVkIHRvIGJlCi0gKiBsaXN0ZWQgaGVyZS4gIFdlIHN0YXJ0IGF0IDkgc2luY2UgSTJDX0NMSUVOVF9JTlNNT0RfKigpIGN1cnJlbnRseSBhbGxvdwotICogZGVmaW5pdGlvbiBvZiB1cCB0byA4IGNoaXAgdHlwZXMgKHBsdXMgemVybykuCiAgKi8KIAogZW51bSBsbTc1X3R5cGUgewkJLyoga2VlcCBzb3J0ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyICovCi0JZHMxNzc1ID0gOSwKKwlkczE3NzUsCiAJZHM3NSwKLQkvKiBsbTc1IC0tIGluIEkyQ19DTElFTlRfSU5TTU9EXzEoKSAqLworCWxtNzUsCiAJbG03NWEsCiAJbWF4NjYyNSwKIAltYXg2NjI2LApAQCAtNTgsOSArNTUsNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywKIAkJCQkJMHg0ZCwgMHg0ZSwgMHg0ZiwgSTJDX0NMSUVOVF9FTkQgfTsKIAotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobG03NSk7Ci0KIAogLyogVGhlIExNNzUgcmVnaXN0ZXJzICovCiAjZGVmaW5lIExNNzVfUkVHX0NPTkYJCTB4MDEKQEAgLTIzNCw3ICsyMjgsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNzVfaWRzKTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGxtNzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG03NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKQEAgLTI5NSw3ICsyODksNyBAQAogCS5yZW1vdmUJCT0gbG03NV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG03NV9pZHMsCiAJLmRldGVjdAkJPSBsbTc1X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc3LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwppbmRleCBhYzA2N2ZkLi5iMjhhMjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwpAQCAtMzksOSArMzksNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwKIAkJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGxtNzcpOwotCiAvKiBUaGUgTE03NyByZWdpc3RlcnMgKi8KICNkZWZpbmUgTE03N19SRUdfVEVNUAkJMHgwMAogI2RlZmluZSBMTTc3X1JFR19DT05GCQkweDAxCkBAIC02Niw4ICs2Myw3IEBACiAKIHN0YXRpYyBpbnQgbG03N19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBsbTc3X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGxtNzdfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBsbTc3X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIGludCBsbTc3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyB1MTYgbG03N19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7CkBAIC03Nyw3ICs3Myw3IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtNzdfaWRbXSA9IHsKLQl7ICJsbTc3IiwgbG03NyB9LAorCXsgImxtNzciLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtNzdfaWQpOwpAQCAtOTIsNyArODgsNyBAQAogCS5yZW1vdmUJCT0gbG03N19yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG03N19pZCwKIAkuZGV0ZWN0CQk9IGxtNzdfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyogc3RyYWlnaHQgZnJvbSB0aGUgZGF0YXNoZWV0ICovCkBAIC0yNDUsNyArMjQxLDcgQEAKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBsbTc3X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGxtNzdfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAogCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzguYyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCmluZGV4IDU5NzgyOTEuLmNhZGNiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03OC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCkBAIC00MSw4ICs0MSw3IEBACiAJCQkJCQkweDJlLCAweDJmLCBJMkNfQ0xJRU5UX0VORCB9Owogc3RhdGljIHVuc2lnbmVkIHNob3J0IGlzYV9hZGRyZXNzID0gMHgyOTA7CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8yKGxtNzgsIGxtNzkpOworZW51bSBjaGlwcyB7IGxtNzgsIGxtNzkgfTsKIAogLyogTWFueSBMTTc4IGNvbnN0YW50cyBzcGVjaWZpZWQgYmVsb3cgKi8KIApAQCAtMTQyLDcgKzE0MSw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgbG03OF9pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBsbTc4X2kyY19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGxtNzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CkBAIC0xNzMsNyArMTcyLDcgQEAKIAkucmVtb3ZlCQk9IGxtNzhfaTJjX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBsbTc4X2kyY19pZCwKIAkuZGV0ZWN0CQk9IGxtNzhfaTJjX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxtNzhfaXNhX2RyaXZlciA9IHsKQEAgLTU1OCw3ICs1NTcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGxtNzhfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG03OF9pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODAuYyBiL2RyaXZlcnMvaHdtb24vbG04MC5jCmluZGV4IGJjZmZjMTguLjE4YTBlNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04MC5jCkBAIC0zNSw5ICszNSw2IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLAogCQkJCQkJMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKIAotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobG04MCk7Ci0KIC8qIE1hbnkgTE04MCBjb25zdGFudHMgc3BlY2lmaWVkIGJlbG93ICovCiAKIC8qIFRoZSBMTTgwIHJlZ2lzdGVycyAqLwpAQCAtMTMzLDggKzEzMCw3IEBACiAKIHN0YXRpYyBpbnQgbG04MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBsbTgwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGxtODBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBsbTgwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIGludCBsbTgwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBzdHJ1Y3QgbG04MF9kYXRhICpsbTgwX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTE0Niw3ICsxNDIsNyBAQAogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTgwX2lkW10gPSB7Ci0JeyAibG04MCIsIGxtODAgfSwKKwl7ICJsbTgwIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTgwX2lkKTsKQEAgLTE2MCw3ICsxNTYsNyBAQAogCS5yZW1vdmUJCT0gbG04MF9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG04MF9pZCwKIAkuZGV0ZWN0CQk9IGxtODBfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyoKQEAgLTQ0Nyw4ICs0NDMsNyBAQAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGxtODBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQorc3RhdGljIGludCBsbTgwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCWludCBpLCBjdXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODMuYyBiL2RyaXZlcnMvaHdtb24vbG04My5jCmluZGV4IDA4YjAzZTYuLjgyOTA0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04My5jCkBAIC01MSwxMSArNTEsNyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKIAkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotCi1JMkNfQ0xJRU5UX0lOU01PRF8yKGxtODMsIGxtODIpOworZW51bSBjaGlwcyB7IGxtODMsIGxtODIgfTsKIAogLyoKICAqIFRoZSBMTTgzIHJlZ2lzdGVycwpAQCAtMTE4LDcgKzExNCw3IEBACiAgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KICAqLwogCi1zdGF0aWMgaW50IGxtODNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG04M19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBsbTgzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CkBAIC0xNDUsNyArMTQxLDcgQEAKIAkucmVtb3ZlCQk9IGxtODNfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGxtODNfaWQsCiAJLmRldGVjdAkJPSBsbTgzX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC0yOTEsNyArMjg3LDcgQEAKICAqLwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgbG04M19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBsbTgzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKIAkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXdfY2xpZW50LT5hZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCBkNTZkYTJlLi5iMzg0MWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtMzgsOSArMzgsMTEgQEAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfNyhsbTg1YiwgbG04NWMsIGFkbTEwMjcsIGFkdDc0NjMsIGFkdDc0NjgsIGVtYzZkMTAwLAotCQkgICAgZW1jNmQxMDIpOworZW51bSBjaGlwcyB7CisJYW55X2NoaXAsIGxtODViLCBsbTg1YywKKwlhZG0xMDI3LCBhZHQ3NDYzLCBhZHQ3NDY4LAorCWVtYzZkMTAwLCBlbWM2ZDEwMgorfTsKIAogLyogVGhlIExNODUgcmVnaXN0ZXJzICovCiAKQEAgLTMyMyw4ICszMjUsNyBAQAogCXN0cnVjdCBsbTg1X3pvbmUgem9uZVszXTsKIH07CiAKLXN0YXRpYyBpbnQgbG04NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOworc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBsbTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgaW50IGxtODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwpAQCAtMzU3LDcgKzM1OCw3IEBACiAJLnJlbW92ZQkJPSBsbTg1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBsbTg1X2lkLAogCS5kZXRlY3QJCT0gbG04NV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiAKQEAgLTExNTYsOCArMTE1Nyw3IEBACiB9CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgbG04NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04Ny5jIGIvZHJpdmVycy9od21vbi9sbTg3LmMKaW5kZXggNDkyOWIxOC4uZjFlNmU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg3LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg3LmMKQEAgLTc0LDExICs3NCw3IEBACiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qCi0gKiBJbnNtb2QgcGFyYW1ldGVycwotICovCi0KLUkyQ19DTElFTlRfSU5TTU9EXzIobG04NywgYWRtMTAyNCk7CitlbnVtIGNoaXBzIHsgbG04NywgYWRtMTAyNCB9OwogCiAvKgogICogVGhlIExNODcgcmVnaXN0ZXJzCkBAIC0xNTgsNyArMTU0LDcgQEAKIAogc3RhdGljIGludCBsbTg3X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGxtODdfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG04N19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgbG04N19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBpbnQgbG04N19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CkBAIC0xODQsNyArMTgwLDcgQEAKIAkucmVtb3ZlCQk9IGxtODdfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGxtODdfaWQsCiAJLmRldGVjdAkJPSBsbTg3X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC02NjIsNyArNjU4LDcgQEAKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBsbTg3X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGxtODdfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAogCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGI3YzkwNWYuLjdjOWJkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC05MywxMiArOTMsNyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKIAkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotCi1JMkNfQ0xJRU5UX0lOU01PRF84KGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIGFkdDc0NjEsIG1heDY2ODAsCi0JCSAgICBtYXg2NjQ2KTsKK2VudW0gY2hpcHMgeyBsbTkwLCBhZG0xMDMyLCBsbTk5LCBsbTg2LCBtYXg2NjU3LCBhZHQ3NDYxLCBtYXg2NjgwLCBtYXg2NjQ2IH07CiAKIC8qCiAgKiBUaGUgTE05MCByZWdpc3RlcnMKQEAgLTE1Miw4ICsxNDcsNyBAQAogICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCiAgKi8KIAotc3RhdGljIGludCBsbTkwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGxtOTBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGxtOTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIGxtOTBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CkBAIC0xOTIsNyArMTg2LDcgQEAKIAkucmVtb3ZlCQk9IGxtOTBfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGxtOTBfaWQsCiAJLmRldGVjdAkJPSBsbTkwX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC02NTYsNyArNjUwLDcgQEAKIH0KIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGxtOTBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG05MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG05Mi5jIGIvZHJpdmVycy9od21vbi9sbTkyLmMKaW5kZXggNDdhYzY5OC4uN2MzMWU2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkyLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkyLmMKQEAgLTU0LDkgKzU0LDYgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsCiAJCQkJCQlJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShsbTkyKTsKLQogLyogVGhlIExNOTIgcmVnaXN0ZXJzICovCiAjZGVmaW5lIExNOTJfUkVHX0NPTkZJRwkJCTB4MDEgLyogOC1iaXQsIFJXICovCiAjZGVmaW5lIExNOTJfUkVHX1RFTVAJCQkweDAwIC8qIDE2LWJpdCwgUk8gKi8KQEAgLTMxOSw3ICszMTYsNyBAQAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGxtOTJfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbG05Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCiAJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKQEAgLTQwMSw3ICszOTgsNyBAQAogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTkyX2lkW10gPSB7Ci0JeyAibG05MiIsIGxtOTIgfSwKKwl7ICJsbTkyIiwgMCB9LAogCS8qIG1heDY2MzUgY291bGQgYmUgYWRkZWQgaGVyZSAqLwogCXsgfQogfTsKQEAgLTQxNiw3ICs0MTMsNyBAQAogCS5yZW1vdmUJCT0gbG05Ml9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG05Ml9pZCwKIAkuZGV0ZWN0CQk9IGxtOTJfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2Vuc29yc19sbTkyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG05My5jIGIvZHJpdmVycy9od21vbi9sbTkzLmMKaW5kZXggMTI0ZGQ3Yy4uNjY2OTI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkzLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkzLmMKQEAgLTE0NSw3ICsxNDUsNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobG05Myk7CiAKIHN0YXRpYyBpbnQgZGlzYWJsZV9ibG9jazsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX2Jsb2NrLCBib29sLCAwKTsKQEAgLTI1MDEsOCArMjUwMCw3IEBACiB9CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBsbTkzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJICAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgbG05M19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAlpbnQgbWZyLCB2ZXI7CkBAIC0yNjAzLDcgKzI2MDEsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG05M19pZFtdID0gewotCXsgImxtOTMiLCBsbTkzIH0sCisJeyAibG05MyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG05M19pZCk7CkBAIC0yNjE3LDcgKzI2MTUsNyBAQAogCS5yZW1vdmUJCT0gbG05M19yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG05M19pZCwKIAkuZGV0ZWN0CQk9IGxtOTNfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbG05M19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDEuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCmluZGV4IDkwNmI4OTYuLjhmYzhlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCkBAIC0zOSw5ICszOSw2IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogCTB4MTksIDB4MmEsIDB4MmIsIEkyQ19DTElFTlRfRU5EfTsKIAotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobG05NTI0MSk7Ci0KIC8qIExNOTUyNDEgcmVnaXN0ZXJzICovCiAjZGVmaW5lIExNOTUyNDFfUkVHX1JfTUFOX0lECQkweEZFCiAjZGVmaW5lIExNOTUyNDFfUkVHX1JfQ0hJUF9JRAkJMHhGRgpAQCAtMzEwLDcgKzMwNyw3IEBACiB9OwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgbG05NTI0MV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBsbTk1MjQxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CkBAIC00NDYsNyArNDQzLDcgQEAKIAogLyogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTk1MjQxX2lkW10gPSB7Ci0JeyAibG05NTI0MSIsIGxtOTUyNDEgfSwKKwl7ICJsbTk1MjQxIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTk1MjQxX2lkKTsKQEAgLTQ2MCw3ICs0NTcsNyBAQAogCS5yZW1vdmUJCT0gbG05NTI0MV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbG05NTI0MV9pZCwKIAkuZGV0ZWN0CQk9IGxtOTUyNDFfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2Vuc29yc19sbTk1MjQxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTYxOS5jIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKaW5kZXggN2ZjZjVmZi4uMDIyZGVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKQEAgLTQxLDEyICs0MSw2IEBACiAJMHgxOCwgMHgxOSwgMHgxYSwgMHgyOSwgMHgyYSwgMHgyYiwgMHg0YywgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKLSAqIEluc21vZCBwYXJhbWV0ZXJzCi0gKi8KLQotSTJDX0NMSUVOVF9JTlNNT0RfMShtYXgxNjE5KTsKLQotLyoKICAqIFRoZSBNQVgxNjE5IHJlZ2lzdGVycwogICovCiAKQEAgLTg4LDcgKzgyLDcgQEAKIAogc3RhdGljIGludCBtYXgxNjE5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgbWF4MTYxOV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IG1heDE2MTlfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBtYXgxNjE5X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIGludCBtYXgxNjE5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKQEAgLTk5LDcgKzkzLDcgQEAKICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWF4MTYxOV9pZFtdID0gewotCXsgIm1heDE2MTkiLCBtYXgxNjE5IH0sCisJeyAibWF4MTYxOSIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MTYxOV9pZCk7CkBAIC0xMTMsNyArMTA3LDcgQEAKIAkucmVtb3ZlCQk9IG1heDE2MTlfcmVtb3ZlLAogCS5pZF90YWJsZQk9IG1heDE2MTlfaWQsCiAJLmRldGVjdAkJPSBtYXgxNjE5X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIC8qCkBAIC0yMjYsNyArMjIwLDcgQEAKICAqLwogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgbWF4MTYxOV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IG1heDE2MTlfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDY2NTAuYyBiL2RyaXZlcnMvaHdtb24vbWF4NjY1MC5jCmluZGV4IDFkYTU2MWUuLmEwMTYwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbWF4NjY1MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4NjY1MC5jCkBAIC02Miw4ICs2Miw2IEBACiBtb2R1bGVfcGFyYW0ocHJlc2NhbGVyLCBpbnQsIFNfSVJVR08pOwogbW9kdWxlX3BhcmFtKGNsb2NrLCBpbnQsIFNfSVJVR08pOwogCi1JMkNfQ0xJRU5UX0lOU01PRF8xKG1heDY2NTApOwotCiAvKgogICogTUFYIDY2NTAvNjY1MSByZWdpc3RlcnMKICAqLwpAQCAtMTE2LDcgKzExNCw3IEBACiAKIHN0YXRpYyBpbnQgbWF4NjY1MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IG1heDY2NTBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBtYXg2NjUwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBtYXg2NjUwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIGludCBtYXg2NjUwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKQEAgLTEyNyw3ICsxMjUsNyBAQAogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXg2NjUwX2lkW10gPSB7Ci0JeyAibWF4NjY1MCIsIG1heDY2NTAgfSwKKwl7ICJtYXg2NjUwIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtYXg2NjUwX2lkKTsKQEAgLTE0MSw3ICsxMzksNyBAQAogCS5yZW1vdmUJCT0gbWF4NjY1MF9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbWF4NjY1MF9pZCwKIAkuZGV0ZWN0CQk9IG1heDY2NTBfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyoKQEAgLTUyOCw3ICs1MjYsNyBAQAogICovCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBtYXg2NjUwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgbWF4NjY1MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGNmODU5MS5jIGIvZHJpdmVycy9od21vbi9wY2Y4NTkxLmMKaW5kZXggMWQ3ZmZlYi4uZDQ0Nzg3OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcGNmODU5MS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcGNmODU5MS5jCkBAIC0yOSw3ICsyOSw2IEBACiAJCQkJCTB4NGQsIDB4NGUsIDB4NGYsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKHBjZjg1OTEpOwogCiBzdGF0aWMgaW50IGlucHV0X21vZGU7CiBtb2R1bGVfcGFyYW0oaW5wdXRfbW9kZSwgaW50LCAwKTsKQEAgLTE2OSw3ICsxNjgsNyBAQAogICovCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBwY2Y4NTkxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgcGNmODU5MV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKQEAgLTI5OSw3ICsyOTgsNyBAQAogCiAJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwJLyogTmVhcmVzdCBjaG9pY2UgKi8KIAkuZGV0ZWN0CQk9IHBjZjg1OTFfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcGNmODU5MV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKaW5kZXggZWJlMzhiNi4uODY0YTM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaHQxNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJaW50IGQxID0gMDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHRlbXBwb2ludHMpIC0gMTsgaSsrKQorCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHRlbXBwb2ludHMpOyBpKyspCiAJCS8qIEZpbmQgcG9pbnRlciB0byBpbnRlcnBvbGF0ZSAqLwogCQlpZiAoZGF0YS0+c3VwcGx5X3VWID4gdGVtcHBvaW50c1tpIC0gMV0udmRkKSB7CiAJCQlkMSA9IChkYXRhLT5zdXBwbHlfdVYvMTAwMCAtIHRlbXBwb2ludHNbaSAtIDFdLnZkZCkKQEAgLTMzMiwxMiArMzMyLDEyIEBACiAKIAljb25zdCBpbnQgYzEgPSAtNDsKIAljb25zdCBpbnQgYzIgPSA0MDUwMDsgLyogeCAxMCBeIC02ICovCi0JY29uc3QgaW50IGMzID0gMjgwMDsgLyogeDEwIF4gLTkgKi8KKwljb25zdCBpbnQgYzMgPSAtMjgwMDsgLyogeDEwIF4gLTkgKi8KIAogCVJIbGluZWFyID0gYzEqMTAwMAogCQkrIGMyICogZGF0YS0+dmFsX2h1bWlkLzEwMDAKIAkJKyAoZGF0YS0+dmFsX2h1bWlkICogZGF0YS0+dmFsX2h1bWlkICogYzMpLzEwMDAwMDA7Ci0JcmV0dXJuICh0ZW1wIC0gMjUwMDApICogKDEwMDAwICsgODAwICogZGF0YS0+dmFsX2h1bWlkKQorCXJldHVybiAodGVtcCAtIDI1MDAwKSAqICgxMDAwMCArIDgwICogZGF0YS0+dmFsX2h1bWlkKQogCQkvIDEwMDAwMDAgKyBSSGxpbmVhcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jCmluZGV4IDhhZDUwZmQuLjljYTk3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc21zYzQ3bTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMKQEAgLTEzNiwxMSArMTM2LDExIEBACiAKIHN0cnVjdCBzbXNjNDdtMV9zaW9fZGF0YSB7CiAJZW51bSBjaGlwcyB0eXBlOworCXU4IGFjdGl2YXRlOwkJLyogUmVtZW1iZXIgaW5pdGlhbCBkZXZpY2Ugc3RhdGUgKi8KIH07CiAKIAotc3RhdGljIGludCBzbXNjNDdtMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNtc2M0N20xX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgX19leGl0IHNtc2M0N20xX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyBzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqc21zYzQ3bTFfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWludCBpbml0KTsKIApAQCAtMTYwLDggKzE2MCw3IEBACiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9IERSVk5BTUUsCiAJfSwKLQkucHJvYmUJCT0gc21zYzQ3bTFfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbXNjNDdtMV9yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19leGl0X3Aoc21zYzQ3bTFfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBzc2l6ZV90IGdldF9mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQpAQCAtNDcwLDI0ICs0NjksMTI2IEBACiAJc3VwZXJpb19zZWxlY3QoKTsKIAkqYWRkciA9IChzdXBlcmlvX2luYihTVVBFUklPX1JFR19CQVNFKSA8PCA4KQogCSAgICAgIHwgIHN1cGVyaW9faW5iKFNVUEVSSU9fUkVHX0JBU0UgKyAxKTsKLQl2YWwgPSBzdXBlcmlvX2luYihTVVBFUklPX1JFR19BQ1QpOwotCWlmICgqYWRkciA9PSAwIHx8ICh2YWwgJiAweDAxKSA9PSAwKSB7Ci0JCXByX2luZm8oRFJWTkFNRSAiOiBEZXZpY2UgaXMgZGlzYWJsZWQsIHdpbGwgbm90IHVzZVxuIik7CisJaWYgKCphZGRyID09IDApIHsKKwkJcHJfaW5mbyhEUlZOQU1FICI6IERldmljZSBhZGRyZXNzIG5vdCBzZXQsIHdpbGwgbm90IHVzZVxuIik7CiAJCXN1cGVyaW9fZXhpdCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBFbmFibGUgb25seSBpZiBhZGRyZXNzIGlzIHNldCAobmVlZGVkIGF0IGxlYXN0IG9uIHRoZQorCSAqIENvbXBhcSBQcmVzYXJpbyBTNDAwME5YKSAqLworCXNpb19kYXRhLT5hY3RpdmF0ZSA9IHN1cGVyaW9faW5iKFNVUEVSSU9fUkVHX0FDVCk7CisJaWYgKChzaW9fZGF0YS0+YWN0aXZhdGUgJiAweDAxKSA9PSAwKSB7CisJCXByX2luZm8oRFJWTkFNRSAiOiBFbmFibGluZyBkZXZpY2VcbiIpOworCQlzdXBlcmlvX291dGIoU1VQRVJJT19SRUdfQUNULCBzaW9fZGF0YS0+YWN0aXZhdGUgfCAweDAxKTsKKwl9CisKIAlzdXBlcmlvX2V4aXQoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc21zYzQ3bTFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKy8qIFJlc3RvcmUgZGV2aWNlIHRvIGl0cyBpbml0aWFsIHN0YXRlICovCitzdGF0aWMgdm9pZCBfX2luaXQgc21zYzQ3bTFfcmVzdG9yZShjb25zdCBzdHJ1Y3Qgc21zYzQ3bTFfc2lvX2RhdGEgKnNpb19kYXRhKQoreworCWlmICgoc2lvX2RhdGEtPmFjdGl2YXRlICYgMHgwMSkgPT0gMCkgeworCQlzdXBlcmlvX2VudGVyKCk7CisJCXN1cGVyaW9fc2VsZWN0KCk7CisKKwkJcHJfaW5mbyhEUlZOQU1FICI6IERpc2FibGluZyBkZXZpY2VcbiIpOworCQlzdXBlcmlvX291dGIoU1VQRVJJT19SRUdfQUNULCBzaW9fZGF0YS0+YWN0aXZhdGUpOworCisJCXN1cGVyaW9fZXhpdCgpOworCX0KK30KKworI2RlZmluZSBDSEVDSwkJMQorI2RlZmluZSBSRVFVRVNUCQkyCisjZGVmaW5lIFJFTEVBU0UJCTMKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG86CisgKiAgLSB0ZXN0IGZvciByZXNvdXJjZSBjb25mbGljdHMgd2l0aCBBQ1BJCisgKiAgLSByZXF1ZXN0IHRoZSByZXNvdXJjZXMKKyAqICAtIHJlbGVhc2UgdGhlIHJlc291cmNlcworICogV2Ugb25seSBhbGxvY2F0ZSB0aGUgSS9PIHBvcnRzIHdlIHJlYWxseSBuZWVkLCB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZgorICogY29uZmxpY3RzIHdpdGggQUNQSSBvciB3aXRoIG90aGVyIGRyaXZlcnMuCisgKi8KK3N0YXRpYyBpbnQgc21zYzQ3bTFfaGFuZGxlX3Jlc291cmNlcyh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzLCBlbnVtIGNoaXBzIHR5cGUsCisJCQkJICAgICBpbnQgYWN0aW9uLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RhdGljIGNvbnN0IHU4IHBvcnRzX20xW10gPSB7CisJCS8qIHJlZ2lzdGVyLCByZWdpb24gbGVuZ3RoICovCisJCTB4MDQsIDEsCisJCTB4MzMsIDQsCisJCTB4NTYsIDcsCisJfTsKKworCXN0YXRpYyBjb25zdCB1OCBwb3J0c19tMltdID0geworCQkvKiByZWdpc3RlciwgcmVnaW9uIGxlbmd0aCAqLworCQkweDA0LCAxLAorCQkweDA5LCAxLAorCQkweDJjLCAyLAorCQkweDM1LCA0LAorCQkweDU2LCA3LAorCQkweDY5LCA0LAorCX07CisKKwlpbnQgaSwgcG9ydHNfc2l6ZSwgZXJyOworCWNvbnN0IHU4ICpwb3J0czsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2Ugc21zYzQ3bTE6CisJZGVmYXVsdDoKKwkJcG9ydHMgPSBwb3J0c19tMTsKKwkJcG9ydHNfc2l6ZSA9IEFSUkFZX1NJWkUocG9ydHNfbTEpOworCQlicmVhazsKKwljYXNlIHNtc2M0N20yOgorCQlwb3J0cyA9IHBvcnRzX20yOworCQlwb3J0c19zaXplID0gQVJSQVlfU0laRShwb3J0c19tMik7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgKyAxIDwgcG9ydHNfc2l6ZTsgaSArPSAyKSB7CisJCXVuc2lnbmVkIHNob3J0IHN0YXJ0ID0gYWRkcmVzcyArIHBvcnRzW2ldOworCQl1bnNpZ25lZCBzaG9ydCBsZW4gPSBwb3J0c1tpICsgMV07CisKKwkJc3dpdGNoIChhY3Rpb24pIHsKKwkJY2FzZSBDSEVDSzoKKwkJCS8qIE9ubHkgY2hlY2sgZm9yIGNvbmZsaWN0cyAqLworCQkJZXJyID0gYWNwaV9jaGVja19yZWdpb24oc3RhcnQsIGxlbiwgRFJWTkFNRSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlicmVhazsKKwkJY2FzZSBSRVFVRVNUOgorCQkJLyogUmVxdWVzdCB0aGUgcmVzb3VyY2VzICovCisJCQlpZiAoIXJlcXVlc3RfcmVnaW9uKHN0YXJ0LCBsZW4sIERSVk5BTUUpKSB7CisJCQkJZGV2X2VycihkZXYsICJSZWdpb24gMHglaHgtMHglaHggYWxyZWFkeSBpbiAiCisJCQkJCSJ1c2UhXG4iLCBzdGFydCwgc3RhcnQgKyBsZW4pOworCisJCQkJLyogVW5kbyBhbGwgcmVxdWVzdHMgKi8KKwkJCQlmb3IgKGkgLT0gMjsgaSA+PSAwOyBpIC09IDIpCisJCQkJCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MgKyBwb3J0c1tpXSwKKwkJCQkJCSAgICAgICBwb3J0c1tpICsgMV0pOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBSRUxFQVNFOgorCQkJLyogUmVsZWFzZSB0aGUgcmVzb3VyY2VzICovCisJCQlyZWxlYXNlX3JlZ2lvbihzdGFydCwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNtc2M0N20xX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3Qgc21zYzQ3bTFfc2lvX2RhdGEgKnNpb19kYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAJaW50IGZhbjEsIGZhbjIsIGZhbjMsIHB3bTEsIHB3bTIsIHB3bTM7CiAKIAlzdGF0aWMgY29uc3QgY2hhciAqbmFtZXNbXSA9IHsKQEAgLTQ5NiwxMiArNTk3LDEwIEBACiAJfTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQsIFNNU0NfRVhURU5ULCBEUlZOQU1FKSkgewotCQlkZXZfZXJyKGRldiwgIlJlZ2lvbiAweCVseC0weCVseCBhbHJlYWR5IGluIHVzZSFcbiIsCi0JCQkodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcpcmVzLT5lbmQpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KKwllcnIgPSBzbXNjNDdtMV9oYW5kbGVfcmVzb3VyY2VzKHJlcy0+c3RhcnQsIHNpb19kYXRhLT50eXBlLAorCQkJCQlSRVFVRVNULCBkZXYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNjNDdtMV9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC02MzcsMTEgKzczNiwxMSBAQAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRhdGEpOwogZXJyb3JfcmVsZWFzZToKLQlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCBTTVNDX0VYVEVOVCk7CisJc21zYzQ3bTFfaGFuZGxlX3Jlc291cmNlcyhyZXMtPnN0YXJ0LCBzaW9fZGF0YS0+dHlwZSwgUkVMRUFTRSwgZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzbXNjNDdtMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19leGl0IHNtc2M0N20xX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC02NTAsNyArNzQ5LDcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc21zYzQ3bTFfZ3JvdXApOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIFNNU0NfRVhURU5UKTsKKwlzbXNjNDdtMV9oYW5kbGVfcmVzb3VyY2VzKHJlcy0+c3RhcnQsIGRhdGEtPnR5cGUsIFJFTEVBU0UsICZwZGV2LT5kZXYpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRhdGEpOwogCkBAIC03MTcsNyArODE2LDcgQEAKIAl9OwogCWludCBlcnI7CiAKLQllcnIgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZyZXMpOworCWVyciA9IHNtc2M0N20xX2hhbmRsZV9yZXNvdXJjZXMoYWRkcmVzcywgc2lvX2RhdGEtPnR5cGUsIENIRUNLLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTc2NiwyNyArODY1LDI5IEBACiAJaWYgKHNtc2M0N20xX2ZpbmQoJmFkZHJlc3MsICZzaW9fZGF0YSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbXNjNDdtMV9kcml2ZXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXhpdDsKLQogCS8qIFNldHMgZ2xvYmFsIHBkZXYgYXMgYSBzaWRlIGVmZmVjdCAqLwogCWVyciA9IHNtc2M0N20xX2RldmljZV9hZGQoYWRkcmVzcywgJnNpb19kYXRhKTsKIAlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZHJpdmVyOworCQlnb3RvIGV4aXQ7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnNtc2M0N20xX2RyaXZlciwgc21zYzQ3bTFfcHJvYmUpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9kZXZpY2U7CiAKIAlyZXR1cm4gMDsKIAotZXhpdF9kcml2ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2M0N20xX2RyaXZlcik7CitleGl0X2RldmljZToKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwlzbXNjNDdtMV9yZXN0b3JlKCZzaW9fZGF0YSk7CiBleGl0OgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbV9zbXNjNDdtMV9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2M0N20xX2RyaXZlcik7CisJc21zYzQ3bTFfcmVzdG9yZShwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIk1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc21zYzQ3bTE5Mi5jIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKaW5kZXggNGQ4OGMwNC4uNDBiMjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKKysrIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKQEAgLTM2LDkgKzM2LDYgQEAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShzbXNjNDdtMTkyKTsKLQogLyogU01TQzQ3TTE5MiByZWdpc3RlcnMgKi8KICNkZWZpbmUgU01TQzQ3TTE5Ml9SRUdfSU4obnIpCQkoKG5yKTw2ID8gKDB4MjAgKyAobnIpKSA6IFwKIAkJCQkJKDB4NTAgKyAobnIpIC0gNikpCkBAIC0xMTUsMTMgKzExMiwxMyBAQAogCiBzdGF0aWMgaW50IHNtc2M0N20xOTJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBzbXNjNDdtMTkyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgc21zYzQ3bTE5Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgc21zYzQ3bTE5Ml9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgc3RydWN0IHNtc2M0N20xOTJfZGF0YSAqc21zYzQ3bTE5Ml91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzbXNjNDdtMTkyX2lkW10gPSB7Ci0JeyAic21zYzQ3bTE5MiIsIHNtc2M0N20xOTIgfSwKKwl7ICJzbXNjNDdtMTkyIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzbXNjNDdtMTkyX2lkKTsKQEAgLTEzNSw3ICsxMzIsNyBAQAogCS5yZW1vdmUJCT0gc21zYzQ3bTE5Ml9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gc21zYzQ3bTE5Ml9pZCwKIAkuZGV0ZWN0CQk9IHNtc2M0N20xOTJfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyogVm9sdGFnZXMgKi8KQEAgLTQ4MSw3ICs0NzgsNyBAQAogfQogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgc21zYzQ3bTE5Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IHNtc2M0N20xOTJfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RobWM1MC5jIGIvZHJpdmVycy9od21vbi90aG1jNTAuYwppbmRleCA0Yjc5Mzg0Li43ZGZiNGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3RobWM1MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdGhtYzUwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8yKHRobWM1MCwgYWRtMTAyMik7CitlbnVtIGNoaXBzIHsgdGhtYzUwLCBhZG0xMDIyIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZG0xMDIyX3RlbXAzWzE2XTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWRtMTAyMl90ZW1wM19udW07CkBAIC04NCw3ICs4NCw3IEBACiAJdTggYWxhcm1zOwogfTsKIAotc3RhdGljIGludCB0aG1jNTBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCB0aG1jNTBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgdGhtYzUwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLnJlbW92ZSA9IHRobWM1MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdGhtYzUwX2lkLAogCS5kZXRlY3QgPSB0aG1jNTBfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEgPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19hbmFsb2dfb3V0KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI4Niw3ICsyODYsNyBAQAogfTsKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IHRobWM1MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IHRobWM1MF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgY29tcGFueTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jCmluZGV4IGVlOTY3MzQuLmExM2IzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMKKysrIGIvZHJpdmVycy9od21vbi90bXA0MDEuYwpAQCAtNDIsOCArNDIsNyBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NGMsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8yKHRtcDQwMSwgdG1wNDExKTsKK2VudW0gY2hpcHMgeyB0bXA0MDEsIHRtcDQxMSB9OwogCiAvKgogICogVGhlIFRNUDQwMSByZWdpc3RlcnMsIG5vdGUgc29tZSByZWdpc3RlcnMgaGF2ZSBkaWZmZXJlbnQgYWRkcmVzc2VzIGZvcgpAQCAtOTgsNyArOTcsNyBAQAogCiBzdGF0aWMgaW50IHRtcDQwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgdG1wNDAxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgdG1wNDAxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IHRtcDQwMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgc3RydWN0IHRtcDQwMV9kYXRhICp0bXA0MDFfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMTIzLDcgKzEyMiw3IEBACiAJLnJlbW92ZQkJPSB0bXA0MDFfcmVtb3ZlLAogCS5pZF90YWJsZQk9IHRtcDQwMV9pZCwKIAkuZGV0ZWN0CQk9IHRtcDQwMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiAvKgpAQCAtNDg4LDcgKzQ4Nyw3IEBACiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBUTVA0MDFfQ09ORklHX1dSSVRFLCBjb25maWcpOwogfQogCi1zdGF0aWMgaW50IHRtcDQwMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IF9raW5kLAorc3RhdGljIGludCB0bXA0MDFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCWVudW0gY2hpcHMga2luZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wNDIxLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDQyMS5jCmluZGV4IGJiNTQ2NGEuLjRmN2MwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wNDIxLmMKKysrIGIvZHJpdmVycy9od21vbi90bXA0MjEuYwpAQCAtMzksOCArMzksNyBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYSwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKIAkJCQkgICAgICAgSTJDX0NMSUVOVF9FTkQgfTsKIAotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzModG1wNDIxLCB0bXA0MjIsIHRtcDQyMyk7CitlbnVtIGNoaXBzIHsgdG1wNDIxLCB0bXA0MjIsIHRtcDQyMyB9OwogCiAvKiBUaGUgVE1QNDIxIHJlZ2lzdGVycyAqLwogI2RlZmluZSBUTVA0MjFfQ09ORklHX1JFR18xCQkJMHgwOQpAQCAtMjIzLDcgKzIyMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdG1wNDIxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgX2tpbmQsCitzdGF0aWMgaW50IHRtcDQyMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJZW51bSBjaGlwcyBraW5kOwpAQCAtMzIyLDcgKzMyMSw3IEBACiAJLnJlbW92ZSA9IHRtcDQyMV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdG1wNDIxX2lkLAogCS5kZXRlY3QgPSB0bXA0MjFfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEgPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdG1wNDIxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdmlhLWNwdXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vdmlhLWNwdXRlbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQyY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi92aWEtY3B1dGVtcC5jCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogdmlhLWNwdXRlbXAuYyAtIERyaXZlciBmb3IgVklBIENQVSBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3JpbmcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBWSUEgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogYmFzZWQgb24gZXhpc3RpbmcgY29yZXRlbXAuYywgd2hpY2ggaXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBEUlZOQU1FCSJ2aWFfY3B1dGVtcCIKKworZW51bSB7IFNIT1dfVEVNUCwgU0hPV19MQUJFTCwgU0hPV19OQU1FIH0gU0hPVzsKKworLyoKKyAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgorICovCisKK3N0cnVjdCB2aWFfY3B1dGVtcF9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgaWQ7CisJdTMyIG1zcjsKK307CisKKy8qCisgKiBTeXNmcyBzdHVmZgorICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHZpYV9jcHV0ZW1wX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhdHRyLT5pbmRleCA9PSBTSE9XX05BTUUpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOworCWVsc2UJLyogc2hvdyBsYWJlbCAqLworCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIkNvcmUgJWRcbiIsIGRhdGEtPmlkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZpYV9jcHV0ZW1wX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MzIgZWF4LCBlZHg7CisJaW50IGVycjsKKworCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBkYXRhLT5tc3IsICZlYXgsICZlZHgpOworCWlmIChlcnIpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCAoKHVuc2lnbmVkIGxvbmcpZWF4ICYgMHhmZmZmZmYpICogMTAwMCk7Cit9CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwKKwkJCSAgU0hPV19URU1QKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbGFiZWwsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCwgU0hPV19MQUJFTCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCwgU0hPV19OQU1FKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnZpYV9jcHV0ZW1wX2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2xhYmVsLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHZpYV9jcHV0ZW1wX2dyb3VwID0geworCS5hdHRycyA9IHZpYV9jcHV0ZW1wX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2aWFfY3B1dGVtcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2aWFfY3B1dGVtcF9kYXRhICpkYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShwZGV2LT5pZCk7CisJaW50IGVycjsKKwl1MzIgZWF4LCBlZHg7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZpYV9jcHV0ZW1wX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkYXRhLT5pZCA9IHBkZXYtPmlkOworCWRhdGEtPm5hbWUgPSAidmlhX2NwdXRlbXAiOworCisJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKKwljYXNlIDB4QToKKwkJLyogQzcgQSAqLworCWNhc2UgMHhEOgorCQkvKiBDNyBEICovCisJCWRhdGEtPm1zciA9IDB4MTE2OTsKKwkJYnJlYWs7CisJY2FzZSAweEY6CisJCS8qIE5hbm8gKi8KKwkJZGF0YS0+bXNyID0gMHgxNDIzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwkvKiB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIFRFTVBFUkFUVVJFIE1TUiAqLworCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBkYXRhLT5tc3IsICZlYXgsICZlZHgpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIlVuYWJsZSB0byBhY2Nlc3MgVEVNUEVSQVRVUkUgTVNSLCBnaXZpbmcgdXBcbiIpOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ2aWFfY3B1dGVtcF9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2ZyZWU7CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2xhc3MgcmVnaXN0cmF0aW9uIGZhaWxlZCAoJWQpXG4iLAorCQkJZXJyKTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnZpYV9jcHV0ZW1wX2dyb3VwKTsKK2V4aXRfZnJlZToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdmlhX2NwdXRlbXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZpYV9jcHV0ZW1wX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnZpYV9jcHV0ZW1wX2dyb3VwKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmlhX2NwdXRlbXBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IERSVk5BTUUsCisJfSwKKwkucHJvYmUgPSB2aWFfY3B1dGVtcF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodmlhX2NwdXRlbXBfcmVtb3ZlKSwKK307CisKK3N0cnVjdCBwZGV2X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl1bnNpZ25lZCBpbnQgY3B1OworfTsKKworc3RhdGljIExJU1RfSEVBRChwZGV2X2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChwZGV2X2xpc3RfbXV0ZXgpOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCB2aWFfY3B1dGVtcF9kZXZpY2VfYWRkKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwZGV2X2VudHJ5ICpwZGV2X2VudHJ5OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCBjcHUpOworCWlmICghcGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGRldl9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZGV2X2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGV2X2VudHJ5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX2ZyZWU7CisJfQorCisJcGRldl9lbnRyeS0+cGRldiA9IHBkZXY7CisJcGRldl9lbnRyeS0+Y3B1ID0gY3B1OworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmcGRldl9lbnRyeS0+bGlzdCwgJnBkZXZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCisJcmV0dXJuIDA7CisKK2V4aXRfZGV2aWNlX2ZyZWU6CisJa2ZyZWUocGRldl9lbnRyeSk7CitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIHZvaWQgdmlhX2NwdXRlbXBfZGV2aWNlX3JlbW92ZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBwZGV2X2VudHJ5ICpwLCAqbjsKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCWlmIChwLT5jcHUgPT0gY3B1KSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLT5wZGV2KTsKKwkJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJCWtmcmVlKHApOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKK30KKworc3RhdGljIGludCBfX2NwdWluaXQgdmlhX2NwdXRlbXBfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpIGhjcHU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwkJdmlhX2NwdXRlbXBfZGV2aWNlX2FkZChjcHUpOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCXZpYV9jcHV0ZW1wX2RldmljZV9yZW1vdmUoY3B1KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdmlhX2NwdXRlbXBfY3B1X25vdGlmaWVyIF9fcmVmZGF0YSA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHZpYV9jcHV0ZW1wX2NwdV9jYWxsYmFjaywKK307CisjZW5kaWYJCQkJLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLworCitzdGF0aWMgaW50IF9faW5pdCB2aWFfY3B1dGVtcF9pbml0KHZvaWQpCit7CisJaW50IGksIGVycjsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisKKwlpZiAoY3B1X2RhdGEoMCkueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0NFTlRBVVIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJWTkFNRSAiOiBOb3QgYSBWSUEgQ1BVXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmlhX2NwdXRlbXBfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGkpOworCisJCWlmIChjLT54ODYgIT0gNikKKwkJCWNvbnRpbnVlOworCisJCWlmIChjLT54ODZfbW9kZWwgPCAweDBhKQorCQkJY29udGludWU7CisKKwkJaWYgKGMtPng4Nl9tb2RlbCA+IDB4MGYpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWTkFNRSAiOiBVbmtub3duIENQVSAiCisJCQkJIm1vZGVsIDB4JXhcbiIsIGMtPng4Nl9tb2RlbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWVyciA9IHZpYV9jcHV0ZW1wX2RldmljZV9hZGQoaSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfZGV2aWNlc191bnJlZzsKKwl9CisJaWYgKGxpc3RfZW1wdHkoJnBkZXZfbGlzdCkpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0X2RyaXZlcl91bnJlZzsKKwl9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnZpYV9jcHV0ZW1wX2NwdV9ub3RpZmllcik7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VzX3VucmVnOgorCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa2ZyZWUocCk7CisJfQorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKK2V4aXRfZHJpdmVyX3VucmVnOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aWFfY3B1dGVtcF9kcml2ZXIpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdmlhX2NwdXRlbXBfZXhpdCh2b2lkKQoreworCXN0cnVjdCBwZGV2X2VudHJ5ICpwLCAqbjsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmdmlhX2NwdXRlbXBfY3B1X25vdGlmaWVyKTsKKyNlbmRpZgorCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa2ZyZWUocCk7CisJfQorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmlhX2NwdXRlbXBfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxIYXJhbGRXZWx0ZUB2aWF0ZWNoLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVklBIENQVSB0ZW1wZXJhdHVyZSBtb25pdG9yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHZpYV9jcHV0ZW1wX2luaXQpCittb2R1bGVfZXhpdCh2aWFfY3B1dGVtcF9leGl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKaW5kZXggYmI1ZTc4Ny4uMGRjYWJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCkBAIC01LDYgKzUsNyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNiAgWXVhbiBNdSAoV2luYm9uZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgogICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgSHViYmFyZCA8ZGF2aWQuYy5odWJiYXJkQGdtYWlsLmNvbT4KKwkJCURhbmllbCBKIEJsdWVtYW4gPGRhbmllbC5ibHVlbWFuQGdtYWlsLmNvbT4KIAogICAgIFNoYW1lbGVzc2x5IHJpcHBlZCBmcm9tIHRoZSB3ODM2MjdoZiBkcml2ZXIKICAgICBDb3B5cmlnaHQgKEMpIDIwMDMgIE1hcmsgU3R1ZGViYWtlcgpAQCAtMTc3LDEyICsxNzgsMTUgQEAKICNkZWZpbmUgVzgzNjI3RUhGX1JFR19BTEFSTTMJCTB4NDVCCiAKIC8qIFNtYXJ0RmFuIHJlZ2lzdGVycyAqLworI2RlZmluZSBXODM2MjdFSEZfUkVHX0ZBTl9TVEVQVVBfVElNRSAweDBmCisjZGVmaW5lIFc4MzYyN0VIRl9SRUdfRkFOX1NURVBET1dOX1RJTUUgMHgwZQorCiAvKiBEQyBvciBQV00gb3V0cHV0IGZhbiBjb25maWd1cmF0aW9uICovCiBzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19QV01fRU5BQkxFW10gPSB7CiAJMHgwNCwJCQkvKiBTWVMgRkFOMCBvdXRwdXQgbW9kZSBhbmQgUFdNIG1vZGUgKi8KIAkweDA0LAkJCS8qIENQVSBGQU4wIG91dHB1dCBtb2RlIGFuZCBQV00gbW9kZSAqLwogCTB4MTIsCQkJLyogQVVYIEZBTiBtb2RlICovCi0JMHg2MiwJCQkvKiBDUFUgZmFuMSBtb2RlICovCisJMHg2MiwJCQkvKiBDUFUgRkFOMSBtb2RlICovCiB9OwogCiBzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1BXTV9NT0RFX1NISUZUW10gPSB7IDAsIDEsIDAsIDYgfTsKQEAgLTE5MywxMCArMTk3LDEyIEBACiBzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19UQVJHRVRbXSA9IHsgMHgwNSwgMHgwNiwgMHgxMywgMHg2MyB9Owogc3RhdGljIGNvbnN0IHU4IFc4MzYyN0VIRl9SRUdfVE9MRVJBTkNFW10gPSB7IDB4MDcsIDB4MDcsIDB4MTQsIDB4NjIgfTsKIAotCiAvKiBBZHZhbmNlZCBGYW4gY29udHJvbCwgc29tZSB2YWx1ZXMgYXJlIGNvbW1vbiBmb3IgYWxsIGZhbnMgKi8KLXN0YXRpYyBjb25zdCB1OCBXODM2MjdFSEZfUkVHX0ZBTl9NSU5fT1VUUFVUW10gPSB7IDB4MDgsIDB4MDksIDB4MTUsIDB4NjQgfTsKLXN0YXRpYyBjb25zdCB1OCBXODM2MjdFSEZfUkVHX0ZBTl9TVE9QX1RJTUVbXSA9IHsgMHgwQywgMHgwRCwgMHgxNywgMHg2NiB9Oworc3RhdGljIGNvbnN0IHU4IFc4MzYyN0VIRl9SRUdfRkFOX1NUQVJUX09VVFBVVFtdID0geyAweDBhLCAweDBiLCAweDE2LCAweDY1IH07CitzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19GQU5fU1RPUF9PVVRQVVRbXSA9IHsgMHgwOCwgMHgwOSwgMHgxNSwgMHg2NCB9Oworc3RhdGljIGNvbnN0IHU4IFc4MzYyN0VIRl9SRUdfRkFOX1NUT1BfVElNRVtdID0geyAweDBjLCAweDBkLCAweDE3LCAweDY2IH07CitzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19GQU5fTUFYX09VVFBVVFtdID0geyAweGZmLCAweDY3LCAweGZmLCAweDY5IH07CitzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19GQU5fU1RFUF9PVVRQVVRbXSA9IHsgMHhmZiwgMHg2OCwgMHhmZiwgMHg2YSB9OwogCiAvKgogICogQ29udmVyc2lvbnMKQEAgLTI5NSwxNCArMzAxLDE5IEBACiAKIAl1OCBwd21fbW9kZVs0XTsgLyogMC0+REMgdmFyaWFibGUgdm9sdGFnZSwgMS0+UFdNIHZhcmlhYmxlIGR1dHkgY3ljbGUgKi8KIAl1OCBwd21fZW5hYmxlWzRdOyAvKiAxLT5tYW51YWwKLQkJCSAgICAgMi0+dGhlcm1hbCBjcnVpc2UgKGFsc28gY2FsbGVkIFNtYXJ0RmFuIEkpICovCisJCQkgICAgIDItPnRoZXJtYWwgY3J1aXNlIG1vZGUgKGFsc28gY2FsbGVkIFNtYXJ0RmFuIEkpCisJCQkgICAgIDMtPmZhbiBzcGVlZCBjcnVpc2UgbW9kZQorCQkJICAgICA0LT52YXJpYWJsZSB0aGVybWFsIGNydWlzZSAoYWxzbyBjYWxsZWQgU21hcnRGYW4gSUlJKSAqLwogCXU4IHB3bV9udW07CQkvKiBudW1iZXIgb2YgcHdtICovCiAJdTggcHdtWzRdOwogCXU4IHRhcmdldF90ZW1wWzRdOwogCXU4IHRvbGVyYW5jZVs0XTsKIAotCXU4IGZhbl9taW5fb3V0cHV0WzRdOyAvKiBtaW5pbXVtIGZhbiBzcGVlZCAqLwotCXU4IGZhbl9zdG9wX3RpbWVbNF07CisJdTggZmFuX3N0YXJ0X291dHB1dFs0XTsgLyogbWluaW11bSBmYW4gc3BlZWQgd2hlbiBzcGlubmluZyB1cCAqLworCXU4IGZhbl9zdG9wX291dHB1dFs0XTsgLyogbWluaW11bSBmYW4gc3BlZWQgd2hlbiBzcGlubmluZyBkb3duICovCisJdTggZmFuX3N0b3BfdGltZVs0XTsgLyogdGltZSBhdCBtaW5pbXVtIGJlZm9yZSBkaXNhYmxpbmcgZmFuICovCisJdTggZmFuX21heF9vdXRwdXRbNF07IC8qIG1heGltdW0gZmFuIHNwZWVkICovCisJdTggZmFuX3N0ZXBfb3V0cHV0WzRdOyAvKiByYXRlIG9mIGNoYW5nZSBvdXRwdXQgdmFsdWUgKi8KIAogCXU4IHZpZDsKIAl1OCB2cm07CkBAIC01MjksOCArNTQwLDEwIEBACiAJCQkJCQkmIDMpICsgMTsKIAkJCWRhdGEtPnB3bVtpXSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQlXODM2MjdFSEZfUkVHX1BXTVtpXSk7Ci0JCQlkYXRhLT5mYW5fbWluX291dHB1dFtpXSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGRhdGEsCi0JCQkJCQlXODM2MjdFSEZfUkVHX0ZBTl9NSU5fT1VUUFVUW2ldKTsKKwkJCWRhdGEtPmZhbl9zdGFydF9vdXRwdXRbaV0gPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShkYXRhLAorCQkJCQkJVzgzNjI3RUhGX1JFR19GQU5fU1RBUlRfT1VUUFVUW2ldKTsKKwkJCWRhdGEtPmZhbl9zdG9wX291dHB1dFtpXSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGRhdGEsCisJCQkJCQlXODM2MjdFSEZfUkVHX0ZBTl9TVE9QX09VVFBVVFtpXSk7CiAJCQlkYXRhLT5mYW5fc3RvcF90aW1lW2ldID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCVc4MzYyN0VIRl9SRUdfRkFOX1NUT1BfVElNRVtpXSk7CiAJCQlkYXRhLT50YXJnZXRfdGVtcFtpXSA9CkBAIC05NzYsNyArOTg5LDcgQEAKIAl1MzIgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJdTE2IHJlZzsKIAotCWlmICghdmFsIHx8ICh2YWwgPiAyKSkJLyogb25seSBtb2RlcyAxIGFuZCAyIGFyZSBzdXBwb3J0ZWQgKi8KKwlpZiAoIXZhbCB8fCAodmFsID4gNCkpCiAJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZWcgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShkYXRhLCBXODM2MjdFSEZfUkVHX1BXTV9FTkFCTEVbbnJdKTsKQEAgLTExMTgsNyArMTEzMSwxMCBAQAogCXJldHVybiBjb3VudDsgXAogfQogCi1mYW5fZnVuY3Rpb25zKGZhbl9taW5fb3V0cHV0LCBGQU5fTUlOX09VVFBVVCkKK2Zhbl9mdW5jdGlvbnMoZmFuX3N0YXJ0X291dHB1dCwgRkFOX1NUQVJUX09VVFBVVCkKK2Zhbl9mdW5jdGlvbnMoZmFuX3N0b3Bfb3V0cHV0LCBGQU5fU1RPUF9PVVRQVVQpCitmYW5fZnVuY3Rpb25zKGZhbl9tYXhfb3V0cHV0LCBGQU5fTUFYX09VVFBVVCkKK2Zhbl9mdW5jdGlvbnMoZmFuX3N0ZXBfb3V0cHV0LCBGQU5fU1RFUF9PVVRQVVQpCiAKICNkZWZpbmUgZmFuX3RpbWVfZnVuY3Rpb25zKHJlZywgUkVHKSBcCiBzdGF0aWMgc3NpemVfdCBzaG93XyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTExNjEsOCArMTE3NywxNCBAQAogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfc2YzX2FycmF5c19mYW40W10gPSB7CiAJU0VOU09SX0FUVFIocHdtNF9zdG9wX3RpbWUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9zdG9wX3RpbWUsCiAJCSAgICBzdG9yZV9mYW5fc3RvcF90aW1lLCAzKSwKLQlTRU5TT1JfQVRUUihwd200X21pbl9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW5fb3V0cHV0LAotCQkgICAgc3RvcmVfZmFuX21pbl9vdXRwdXQsIDMpLAorCVNFTlNPUl9BVFRSKHB3bTRfc3RhcnRfb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fc3RhcnRfb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX3N0YXJ0X291dHB1dCwgMyksCisJU0VOU09SX0FUVFIocHdtNF9zdG9wX291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX3N0b3Bfb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX3N0b3Bfb3V0cHV0LCAzKSwKKwlTRU5TT1JfQVRUUihwd200X21heF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9tYXhfb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX21heF9vdXRwdXQsIDMpLAorCVNFTlNPUl9BVFRSKHB3bTRfc3RlcF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9zdGVwX291dHB1dCwKKwkJICAgIHN0b3JlX2Zhbl9zdGVwX291dHB1dCwgMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9zZjNfYXJyYXlzW10gPSB7CkBAIC0xMTcyLDEyICsxMTk0LDI0IEBACiAJCSAgICBzdG9yZV9mYW5fc3RvcF90aW1lLCAxKSwKIAlTRU5TT1JfQVRUUihwd20zX3N0b3BfdGltZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX3N0b3BfdGltZSwKIAkJICAgIHN0b3JlX2Zhbl9zdG9wX3RpbWUsIDIpLAotCVNFTlNPUl9BVFRSKHB3bTFfbWluX291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbl9vdXRwdXQsCi0JCSAgICBzdG9yZV9mYW5fbWluX291dHB1dCwgMCksCi0JU0VOU09SX0FUVFIocHdtMl9taW5fb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluX291dHB1dCwKLQkJICAgIHN0b3JlX2Zhbl9taW5fb3V0cHV0LCAxKSwKLQlTRU5TT1JfQVRUUihwd20zX21pbl9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW5fb3V0cHV0LAotCQkgICAgc3RvcmVfZmFuX21pbl9vdXRwdXQsIDIpLAorCVNFTlNPUl9BVFRSKHB3bTFfc3RhcnRfb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fc3RhcnRfb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX3N0YXJ0X291dHB1dCwgMCksCisJU0VOU09SX0FUVFIocHdtMl9zdGFydF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9zdGFydF9vdXRwdXQsCisJCSAgICBzdG9yZV9mYW5fc3RhcnRfb3V0cHV0LCAxKSwKKwlTRU5TT1JfQVRUUihwd20zX3N0YXJ0X291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX3N0YXJ0X291dHB1dCwKKwkJICAgIHN0b3JlX2Zhbl9zdGFydF9vdXRwdXQsIDIpLAorCVNFTlNPUl9BVFRSKHB3bTFfc3RvcF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9zdG9wX291dHB1dCwKKwkJICAgIHN0b3JlX2Zhbl9zdG9wX291dHB1dCwgMCksCisJU0VOU09SX0FUVFIocHdtMl9zdG9wX291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX3N0b3Bfb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX3N0b3Bfb3V0cHV0LCAxKSwKKwlTRU5TT1JfQVRUUihwd20zX3N0b3Bfb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fc3RvcF9vdXRwdXQsCisJCSAgICBzdG9yZV9mYW5fc3RvcF9vdXRwdXQsIDIpLAorCisJLyogcHdtMSBhbmQgcHdtMyBkb24ndCBzdXBwb3J0IG1heCBhbmQgc3RlcCBzZXR0aW5ncyAqLworCVNFTlNPUl9BVFRSKHB3bTJfbWF4X291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21heF9vdXRwdXQsCisJCSAgICBzdG9yZV9mYW5fbWF4X291dHB1dCwgMSksCisJU0VOU09SX0FUVFIocHdtMl9zdGVwX291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX3N0ZXBfb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX3N0ZXBfb3V0cHV0LCAxKSwKIH07CiAKIHN0YXRpYyBzc2l6ZV90CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKaW5kZXggYjI1N2M3Mi4uMzhlMjgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3aGYuYwpAQCAtMTEzNSw2ICsxMTM1LDcgQEAKIAkJIlc4MzY4N1RIRiIsCiAJfTsKIAorCXNpb19kYXRhLT5zaW9hZGRyID0gc2lvYWRkcjsKIAlzdXBlcmlvX2VudGVyKHNpb19kYXRhKTsKIAl2YWwgPSBmb3JjZV9pZCA/IGZvcmNlX2lkIDogc3VwZXJpb19pbmIoc2lvX2RhdGEsIERFVklEKTsKIAlzd2l0Y2ggKHZhbCkgewpAQCAtMTE3Nyw3ICsxMTc4LDYgQEAKIAl9CiAKIAllcnIgPSAwOwotCXNpb19kYXRhLT5zaW9hZGRyID0gc2lvYWRkcjsKIAlwcl9pbmZvKERSVk5BTUUgIjogRm91bmQgJXMgY2hpcCBhdCAlI3hcbiIsCiAJCW5hbWVzW3Npb19kYXRhLT50eXBlXSwgKmFkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCmluZGV4IDdhYjc5NjcuLjA1ZjkyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCkBAIC01Niw5ICs1NiwxMCBAQAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsCiAJCQkJCQkweDJlLCAweDJmLCBJMkNfQ0xJRU5UX0VORCB9OwotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzQodzgzNzgxZCwgdzgzNzgyZCwgdzgzNzgzcywgYXM5OTEyN2YpOwogCitlbnVtIGNoaXBzIHsgdzgzNzgxZCwgdzgzNzgyZCwgdzgzNzgzcywgYXM5OTEyN2YgfTsKKworLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9zdWJjbGllbnRzWzRdOwogbW9kdWxlX3BhcmFtX2FycmF5KGZvcmNlX3N1YmNsaWVudHMsIHNob3J0LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc3ViY2xpZW50cywgIkxpc3Qgb2Ygc3ViY2xpZW50IGFkZHJlc3NlczogIgpAQCAtMTA1MSw4ICsxMDUyLDcgQEAKIAogLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCiBzdGF0aWMgaW50Ci13ODM3ODFkX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQordzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCWludCB2YWwxLCB2YWwyOwogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmlzYSA9IHc4Mzc4MWRfZGF0YV9pZl9pc2EoKTsKQEAgLTE1MzcsNyArMTUzNyw3IEBACiAJLnJlbW92ZQkJPSB3ODM3ODFkX3JlbW92ZSwKIAkuaWRfdGFibGUJPSB3ODM3ODFkX2lkcywKIAkuZGV0ZWN0CQk9IHc4Mzc4MWRfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTFkLmMKaW5kZXggMDQxMGJmMS4uNDAwYTg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTFkLmMKQEAgLTUyLDcgKzUyLDYgQEAKIAkJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKHc4Mzc5MWQpOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2Vfc3ViY2xpZW50c1s0XTsKIG1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9zdWJjbGllbnRzLCBzaG9ydCwgTlVMTCwgMCk7CkBAIC0zMjYsNyArMzI1LDcgQEAKIAogc3RhdGljIGludCB3ODM3OTFkX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgdzgzNzkxZF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IHc4Mzc5MWRfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IHc4Mzc5MWRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCkBAIC0zNDEsNyArMzQwLDcgQEAKIHN0YXRpYyB2b2lkIHc4Mzc5MWRfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3ODM3OTFkX2lkW10gPSB7Ci0JeyAidzgzNzkxZCIsIHc4Mzc5MWQgfSwKKwl7ICJ3ODM3OTFkIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3ODM3OTFkX2lkKTsKQEAgLTM1NSw3ICszNTQsNyBAQAogCS5yZW1vdmUJCT0gdzgzNzkxZF9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gdzgzNzkxZF9pZCwKIAkuZGV0ZWN0CQk9IHc4Mzc5MWRfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyogZm9sbG93aW5nIGFyZSB0aGUgc3lzZnMgY2FsbGJhY2sgZnVuY3Rpb25zICovCkBAIC0xMjU5LDcgKzEyNTgsNyBAQAogCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCB3ODM3OTFkX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgdzgzNzkxZF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKaW5kZXggMzg5Nzg4NS4uNjc5NzE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAkJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKHc4Mzc5MmQpOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2Vfc3ViY2xpZW50c1s0XTsKIG1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9zdWJjbGllbnRzLCBzaG9ydCwgTlVMTCwgMCk7CkBAIC0zMDIsNyArMzAxLDcgQEAKIAogc3RhdGljIGludCB3ODM3OTJkX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgdzgzNzkyZF9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IHc4Mzc5MmRfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IHc4Mzc5MmRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIHN0cnVjdCB3ODM3OTJkX2RhdGEgKnc4Mzc5MmRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMzE0LDcgKzMxMyw3IEBACiBzdGF0aWMgdm9pZCB3ODM3OTJkX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdzgzNzkyZF9pZFtdID0gewotCXsgInc4Mzc5MmQiLCB3ODM3OTJkIH0sCisJeyAidzgzNzkyZCIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdzgzNzkyZF9pZCk7CkBAIC0zMjgsNyArMzI3LDcgQEAKIAkucmVtb3ZlCQk9IHc4Mzc5MmRfcmVtb3ZlLAogCS5pZF90YWJsZQk9IHc4Mzc5MmRfaWQsCiAJLmRldGVjdAkJPSB3ODM3OTJkX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKIH07CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBpbl9jb3VudF9mcm9tX3JlZyhpbnQgbnIsIHN0cnVjdCB3ODM3OTJkX2RhdGEgKmRhdGEpCkBAIC0xMjYzLDcgKzEyNjIsNyBAQAogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQKLXc4Mzc5MmRfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit3ODM3OTJkX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCWludCB2YWwxLCB2YWwyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTMuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKaW5kZXggODBhMjE5MS4uOWEyMDIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTMuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCkBAIC00MSw3ICs0MSw2IEBACiAJCQkJCQlJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMSh3ODM3OTMpOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZm9yY2Vfc3ViY2xpZW50c1s0XTsKIG1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9zdWJjbGllbnRzLCBzaG9ydCwgTlVMTCwgMCk7CkBAIC0yMzAsNyArMjI5LDcgQEAKIHN0YXRpYyBpbnQgdzgzNzkzX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHU4IHZhbHVlKTsKIHN0YXRpYyBpbnQgdzgzNzkzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCB3ODM3OTNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCB3ODM3OTNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgdzgzNzkzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyB2b2lkIHc4Mzc5M19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKQEAgLTIzOCw3ICsyMzcsNyBAQAogc3RhdGljIHN0cnVjdCB3ODM3OTNfZGF0YSAqdzgzNzkzX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHc4Mzc5M19pZFtdID0gewotCXsgInc4Mzc5MyIsIHc4Mzc5MyB9LAorCXsgInc4Mzc5MyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdzgzNzkzX2lkKTsKQEAgLTI1Miw3ICsyNTEsNyBAQAogCS5yZW1vdmUJCT0gdzgzNzkzX3JlbW92ZSwKIAkuaWRfdGFibGUJPSB3ODM3OTNfaWQsCiAJLmRldGVjdAkJPSB3ODM3OTNfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogc3RhdGljIHNzaXplX3QKQEAgLTExNjEsNyArMTE2MCw3IEBACiB9CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCB3ODM3OTNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCB3ODM3OTNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXU4IHRtcCwgYmFuaywgY2hpcF9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzbDc4NXRzLmMgYi9kcml2ZXJzL2h3bW9uL3c4M2w3ODV0cy5jCmluZGV4IDliNmM0YzEuLjIwNzgxZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzbDc4NXRzLmMKKysrIGIvZHJpdmVycy9od21vbi93ODNsNzg1dHMuYwpAQCAtNTIsMTIgKzUyLDYgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qCi0gKiBJbnNtb2QgcGFyYW1ldGVycwotICovCi0KLUkyQ19DTElFTlRfSU5TTU9EXzEodzgzbDc4NXRzKTsKLQotLyoKICAqIFRoZSBXODNMNzg1VFMtUyByZWdpc3RlcnMKICAqIE1hbnVmYWN0dXJlciBJRCBpcyAweDVDQTMgZm9yIFdpbmJvbmQuCiAgKi8KQEAgLTgzLDcgKzc3LDcgQEAKIAogc3RhdGljIGludCB3ODNsNzg1dHNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IHc4M2w3ODV0c19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IHc4M2w3ODV0c19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCB3ODNsNzg1dHNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIHU4IHc4M2w3ODV0c19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggZGVmdmFsKTsKQEAgLTk0LDcgKzg4LDcgQEAKICAqLwogIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHc4M2w3ODV0c19pZFtdID0gewotCXsgInc4M2w3ODV0cyIsIHc4M2w3ODV0cyB9LAorCXsgInc4M2w3ODV0cyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdzgzbDc4NXRzX2lkKTsKQEAgLTEwOCw3ICsxMDIsNyBAQAogCS5yZW1vdmUJCT0gdzgzbDc4NXRzX3JlbW92ZSwKIAkuaWRfdGFibGUJPSB3ODNsNzg1dHNfaWQsCiAJLmRldGVjdAkJPSB3ODNsNzg1dHNfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAogfTsKIAogLyoKQEAgLTE0Niw3ICsxNDAsNyBAQAogICovCiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCB3ODNsNzg1dHNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCB3ODNsNzg1dHNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzbDc4Nm5nLmMgYi9kcml2ZXJzL2h3bW9uL3c4M2w3ODZuZy5jCmluZGV4IDI3ZGE3ZDIuLjAyNTRlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzbDc4Nm5nLmMKKysrIGIvZHJpdmVycy9od21vbi93ODNsNzg2bmcuYwpAQCAtMzgsNyArMzgsNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEodzgzbDc4Nm5nKTsKIAogc3RhdGljIGludCByZXNldDsKIG1vZHVsZV9wYXJhbShyZXNldCwgYm9vbCwgMCk7CkBAIC0xNDcsMTQgKzE0NiwxNCBAQAogCiBzdGF0aWMgaW50IHc4M2w3ODZuZ19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgdzgzbDc4Nm5nX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKK3N0YXRpYyBpbnQgdzgzbDc4Nm5nX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IHc4M2w3ODZuZ19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgdm9pZCB3ODNsNzg2bmdfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgc3RydWN0IHc4M2w3ODZuZ19kYXRhICp3ODNsNzg2bmdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdzgzbDc4Nm5nX2lkW10gPSB7Ci0JeyAidzgzbDc4Nm5nIiwgdzgzbDc4Nm5nIH0sCisJeyAidzgzbDc4Nm5nIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3ODNsNzg2bmdfaWQpOwpAQCAtMTY4LDcgKzE2Nyw3IEBACiAJLnJlbW92ZQkJPSB3ODNsNzg2bmdfcmVtb3ZlLAogCS5pZF90YWJsZQk9IHc4M2w3ODZuZ19pZCwKIAkuZGV0ZWN0CQk9IHc4M2w3ODZuZ19kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgdTgKQEAgLTU4Niw4ICs1ODUsNyBAQAogfTsKIAogc3RhdGljIGludAotdzgzbDc4Nm5nX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3c4M2w3ODZuZ19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAl1MTYgbWFuX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggMDQ5NTU1Ny4uNzY0N2EyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC0xMTU1LDcgKzExNTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgaTJjX3B4YV9kZXZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGkyY19weGFfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZF9ub2lycSA9IGkyY19weGFfc3VzcGVuZF9ub2lycSwKIAkucmVzdW1lX25vaXJxID0gaTJjX3B4YV9yZXN1bWVfbm9pcnEsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCA5NmFhZmI5Li4xZDhjOTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtOTY3LDcgKzk2Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzM2MyNHh4X2kyY19kZXZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHMzYzI0eHhfaTJjX2Rldl9wbV9vcHMgPSB7CiAJLnN1c3BlbmRfbm9pcnEgPSBzM2MyNHh4X2kyY19zdXNwZW5kX25vaXJxLAogCS5yZXN1bWUgPSBzM2MyNHh4X2kyY19yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMKaW5kZXggODZhOWQ0ZS4uY2NjNDY0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNoX21vYmlsZS5jCkBAIC02NDcsNyArNjQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX21vYmlsZV9pMmNfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9tb2JpbGVfaTJjX2Rldl9wbV9vcHMgPSB7CiAJLnJ1bnRpbWVfc3VzcGVuZCA9IHNoX21vYmlsZV9pMmNfcnVudGltZV9ub3AsCiAJLnJ1bnRpbWVfcmVzdW1lID0gc2hfbW9iaWxlX2kyY19ydW50aW1lX25vcCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCA0ZjM0ODIzLi4wYWMyZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTE1NSw2ICsxNTUsMzUgQEAKIAkJZHJpdmVyLT5zaHV0ZG93bihjbGllbnQpOwogfQogCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CisKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm4gMDsKKwlwbSA9IGRldi0+ZHJpdmVyLT5wbTsKKwlpZiAoIXBtIHx8ICFwbS0+c3VzcGVuZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBtLT5zdXNwZW5kKGRldik7Cit9CisKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKKworCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybiAwOworCXBtID0gZGV2LT5kcml2ZXItPnBtOworCWlmICghcG0gfHwgIXBtLT5yZXN1bWUpCisJCXJldHVybiAwOworCXJldHVybiBwbS0+cmVzdW1lKGRldik7Cit9CisjZWxzZQorI2RlZmluZSBpMmNfZGV2aWNlX3BtX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpMmNfZGV2aWNlX3BtX3Jlc3VtZQlOVUxMCisjZW5kaWYKKwogc3RhdGljIGludCBpMmNfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKQEAgLTIxOSw2ICsyNDgsMTEgQEAKIAlOVUxMCiB9OwogCitjb25zdCBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgaTJjX2RldmljZV9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBpMmNfZGV2aWNlX3BtX3N1c3BlbmQsCisJLnJlc3VtZSA9IGkyY19kZXZpY2VfcG1fcmVzdW1lLAorfTsKKwogc3RydWN0IGJ1c190eXBlIGkyY19idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiaTJjIiwKIAkubWF0Y2gJCT0gaTJjX2RldmljZV9tYXRjaCwKQEAgLTIyNyw2ICsyNjEsNyBAQAogCS5zaHV0ZG93bgk9IGkyY19kZXZpY2Vfc2h1dGRvd24sCiAJLnN1c3BlbmQJPSBpMmNfZGV2aWNlX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpMmNfZGV2aWNlX3Jlc3VtZSwKKwkucG0JCT0gJmkyY19kZXZpY2VfcG1fb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGkyY19idXNfdHlwZSk7CiAKQEAgLTExODQsNyArMTIxOSw3IEBACiAJLyogRmluYWxseSBjYWxsIHRoZSBjdXN0b20gZGV0ZWN0aW9uIGZ1bmN0aW9uICovCiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CiAJaW5mby5hZGRyID0gYWRkcjsKLQllcnIgPSBkcml2ZXItPmRldGVjdCh0ZW1wX2NsaWVudCwgLTEsICZpbmZvKTsKKwllcnIgPSBkcml2ZXItPmRldGVjdCh0ZW1wX2NsaWVudCwgJmluZm8pOwogCWlmIChlcnIpIHsKIAkJLyogLUVOT0RFViBpcyByZXR1cm5lZCBpZiB0aGUgZGV0ZWN0aW9uIGZhaWxzLiBXZSBjYXRjaCBpdAogCQkgICBoZXJlIGFzIHRoaXMgaXNuJ3QgYW4gZXJyb3IuICovCkBAIC0xMjE0LDEzICsxMjQ5LDEzIEBACiAKIHN0YXRpYyBpbnQgaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIpCiB7Ci0JY29uc3Qgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhICphZGRyZXNzX2RhdGE7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJlc3NfbGlzdDsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqdGVtcF9jbGllbnQ7CiAJaW50IGksIGVyciA9IDA7CiAJaW50IGFkYXBfaWQgPSBpMmNfYWRhcHRlcl9pZChhZGFwdGVyKTsKIAotCWFkZHJlc3NfZGF0YSA9IGRyaXZlci0+YWRkcmVzc19kYXRhOwotCWlmICghZHJpdmVyLT5kZXRlY3QgfHwgIWFkZHJlc3NfZGF0YSkKKwlhZGRyZXNzX2xpc3QgPSBkcml2ZXItPmFkZHJlc3NfbGlzdDsKKwlpZiAoIWRyaXZlci0+ZGV0ZWN0IHx8ICFhZGRyZXNzX2xpc3QpCiAJCXJldHVybiAwOwogCiAJLyogU2V0IHVwIGEgdGVtcG9yYXJ5IGNsaWVudCB0byBoZWxwIGRldGVjdCBjYWxsYmFjayAqLwpAQCAtMTIzNSw3ICsxMjcwLDcgQEAKIAogCS8qIFN0b3AgaGVyZSBpZiB3ZSBjYW4ndCB1c2UgU01CVVNfUVVJQ0sgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1FVSUNLKSkgewotCQlpZiAoYWRkcmVzc19kYXRhLT5ub3JtYWxfaTJjWzBdID09IEkyQ19DTElFTlRfRU5EKQorCQlpZiAoYWRkcmVzc19saXN0WzBdID09IEkyQ19DTElFTlRfRU5EKQogCQkJZ290byBleGl0X2ZyZWU7CiAKIAkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgIlNNQnVzIFF1aWNrIGNvbW1hbmQgbm90IHN1cHBvcnRlZCwgIgpAQCAtMTI0NCwxMSArMTI3OSwxMCBAQAogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBhZGRyZXNzX2RhdGEtPm5vcm1hbF9pMmNbaV0gIT0gSTJDX0NMSUVOVF9FTkQ7IGkgKz0gMSkgeworCWZvciAoaSA9IDA7IGFkZHJlc3NfbGlzdFtpXSAhPSBJMkNfQ0xJRU5UX0VORDsgaSArPSAxKSB7CiAJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgImZvdW5kIG5vcm1hbCBlbnRyeSBmb3IgYWRhcHRlciAlZCwgIgotCQkJImFkZHIgMHglMDJ4XG4iLCBhZGFwX2lkLAotCQkJYWRkcmVzc19kYXRhLT5ub3JtYWxfaTJjW2ldKTsKLQkJdGVtcF9jbGllbnQtPmFkZHIgPSBhZGRyZXNzX2RhdGEtPm5vcm1hbF9pMmNbaV07CisJCQkiYWRkciAweCUwMnhcbiIsIGFkYXBfaWQsIGFkZHJlc3NfbGlzdFtpXSk7CisJCXRlbXBfY2xpZW50LT5hZGRyID0gYWRkcmVzc19saXN0W2ldOwogCQllcnIgPSBpMmNfZGV0ZWN0X2FkZHJlc3ModGVtcF9jbGllbnQsIGRyaXZlcik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGV4aXRfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BtYWMuYwppbmRleCA5NzY0MmE3YS4uN2E0ZTc4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BtYWMuYwpAQCAtNDMsMTAgKzQzLDcgQEAKICNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaWZuZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9tZWRpYWJheS5oPgotI2VuZGlmCiAKICNkZWZpbmUgRFJWX05BTUUgImlkZS1wbWFjIgogCkBAIC01OSwxMyArNTYsMTQgQEAKIAlpbnQJCQkJaXJxOwogCWludAkJCQlraW5kOwogCWludAkJCQlhYXBsX2J1c19pZDsKLQl1bnNpZ25lZAkJCW1lZGlhYmF5IDogMTsKIAl1bnNpZ25lZAkJCWJyb2tlbl9kbWEgOiAxOwogCXVuc2lnbmVkCQkJYnJva2VuX2RtYV93YXJuIDogMTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUqCQlub2RlOwogCXN0cnVjdCBtYWNpb19kZXYJCSptZGV2OwogCXUzMgkJCQl0aW1pbmdzWzRdOwogCXZvbGF0aWxlIHUzMiBfX2lvbWVtICoJCSprYXVhaV9mY3I7CisJaWRlX2h3aWZfdAkJCSpod2lmOworCiAJLyogVGhvc2UgZmllbGRzIGFyZSBkdXBsaWNhdGluZyB3aGF0IGlzIGluIGh3aWYuIFdlIGN1cnJlbnRseQogCSAqIGNhbid0IHVzZSB0aGUgaHdpZiBvbmVzIGJlY2F1c2Ugb2Ygc29tZSBhc3N1bXB0aW9ucyB0aGF0IGFyZQogCSAqIGJlZWluZyBkb25lIGJ5IHRoZSBnZW5lcmljIGNvZGUgYWJvdXQgdGhlIGtpbmQgb2YgZG1hIGNvbnRyb2xsZXIKQEAgLTg1NCw2ICs4NTIsMTEgQEAKIAlwbWlmLT50aW1pbmdzWzJdID0gcG1pZi0+dGltaW5nc1szXSA9IHZhbHVlMjsKIH0KIAorc3RhdGljIGludCBvbl9tZWRpYV9iYXkocG1hY19pZGVfaHdpZl90ICpwbWlmKQoreworCXJldHVybiBwbWlmLT5tZGV2ICYmIHBtaWYtPm1kZXYtPm1lZGlhX2JheSAhPSBOVUxMOworfQorCiAvKiBTdXNwZW5kIGNhbGwgYmFjaywgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgY2hpbGQgZGV2aWNlcwogICogaGF2ZSBhY3R1YWxseSBiZWVuIHN1c3BlbmRlZAogICovCkBAIC04NjYsNyArODY5LDcgQEAKIAlkaXNhYmxlX2lycShwbWlmLT5pcnEpOwogCiAJLyogVGhlIG1lZGlhIGJheSB3aWxsIGhhbmRsZSBpdHNlbGYganVzdCBmaW5lICovCi0JaWYgKHBtaWYtPm1lZGlhYmF5KQorCWlmIChvbl9tZWRpYV9iYXkocG1pZikpCiAJCXJldHVybiAwOwogCQogCS8qIEthdWFpIGhhcyBidXMgY29udHJvbCBGQ1JzIGRpcmVjdGx5IGhlcmUgKi8KQEAgLTg4OSw3ICs4OTIsNyBAQAogc3RhdGljIGludCBwbWFjX2lkZV9kb19yZXN1bWUocG1hY19pZGVfaHdpZl90ICpwbWlmKQogewogCS8qIEhhcmQgcmVzZXQgJiByZS1lbmFibGUgY29udHJvbGxlciAoZG8gd2UgcmVhbGx5IG5lZWQgdG8gcmVzZXQgPyAtQmVuSCkgKi8KLQlpZiAoIXBtaWYtPm1lZGlhYmF5KSB7CisJaWYgKCFvbl9tZWRpYV9iYXkocG1pZikpIHsKIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfUkVTRVQsIHBtaWYtPm5vZGUsIHBtaWYtPmFhcGxfYnVzX2lkLCAxKTsKIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfRU5BQkxFLCBwbWlmLT5ub2RlLCBwbWlmLT5hYXBsX2J1c19pZCwgMSk7CiAJCW1zbGVlcCgxMCk7CkBAIC05NTAsMTMgKzk1MywxMSBAQAogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAKLQlpZiAocG1pZi0+bWVkaWFiYXkpIHsKLSNpZmRlZiBDT05GSUdfUE1BQ19NRURJQUJBWQotCQlpZiAoY2hlY2tfbWVkaWFfYmF5X2J5X2Jhc2UocG1pZi0+cmVnYmFzZSwgTUJfQ0QpID09IDApIHsKKwlpZiAob25fbWVkaWFfYmF5KHBtaWYpKSB7CisJCWlmIChjaGVja19tZWRpYV9iYXkocG1pZi0+bWRldi0+bWVkaWFfYmF5KSA9PSBNQl9DRCkgewogCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PUFJPQkU7CiAJCQlyZXR1cm47CiAJCX0KLSNlbmRpZgogCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT1BST0JFOwogCX0KIH0KQEAgLTEwNzIsMjYgKzEwNzMsMjMgQEAKIAkJd3JpdGVsKEtBVUFJX0ZDUl9VQVRBX01BR0lDIHwKIAkJICAgICAgIEtBVUFJX0ZDUl9VQVRBX1JFU0VUX04gfAogCQkgICAgICAgS0FVQUlfRkNSX1VBVEFfRU5BQkxFLCBwbWlmLT5rYXVhaV9mY3IpOwotCi0JcG1pZi0+bWVkaWFiYXkgPSAwOwogCQogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHNhbmUgdGltaW5ncyAqLwogCXNhbml0aXplX3RpbWluZ3MocG1pZik7CiAKLQlob3N0ID0gaWRlX2hvc3RfYWxsb2MoJmQsIGh3cywgMSk7Ci0JaWYgKGhvc3QgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaHdpZiA9IGhvc3QtPnBvcnRzWzBdOworCS8qIElmIHdlIGFyZSBvbiBhIG1lZGlhIGJheSwgd2FpdCBmb3IgaXQgdG8gc2V0dGxlIGFuZCBsb2NrIGl0ICovCisJaWYgKHBtaWYtPm1kZXYpCisJCWxvY2tfbWVkaWFfYmF5KHBtaWYtPm1kZXYtPm1lZGlhX2JheSk7CiAKLSNpZm5kZWYgQ09ORklHX1BQQzY0Ci0JLyogWFhYIEZJWE1FOiBNZWRpYSBiYXkgc3R1ZmYgbmVlZCByZS1vcmdhbml6aW5nICovCi0JaWYgKG5wLT5wYXJlbnQgJiYgbnAtPnBhcmVudC0+bmFtZQotCSAgICAmJiBzdHJjYXNlY21wKG5wLT5wYXJlbnQtPm5hbWUsICJtZWRpYS1iYXkiKSA9PSAwKSB7Ci0jaWZkZWYgQ09ORklHX1BNQUNfTUVESUFCQVkKLQkJbWVkaWFfYmF5X3NldF9pZGVfaW5mb3MobnAtPnBhcmVudCwgcG1pZi0+cmVnYmFzZSwgcG1pZi0+aXJxLAotCQkJCQlod2lmKTsKLSNlbmRpZiAvKiBDT05GSUdfUE1BQ19NRURJQUJBWSAqLwotCQlwbWlmLT5tZWRpYWJheSA9IDE7CisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKCZkLCBod3MsIDEpOworCWlmIChob3N0ID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCWh3aWYgPSBwbWlmLT5od2lmID0gaG9zdC0+cG9ydHNbMF07CisKKwlpZiAob25fbWVkaWFfYmF5KHBtaWYpKSB7CisJCS8qIEZpeHVwIGJ1cyBJRCBmb3IgbWVkaWEgYmF5ICovCiAJCWlmICghYmlkcCkKIAkJCXBtaWYtPmFhcGxfYnVzX2lkID0gMTsKIAl9IGVsc2UgaWYgKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9vaGFyZSkgewpAQCAtMTEwMCw5ICsxMDk4LDcgQEAKIAkJICogdW5pdHMsIEkga2VlcCB0aGUgb2xkIHdheQogCQkgKi8KIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfRU5BQkxFLCBucCwgMCwgMSk7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJfSBlbHNlIHsKICAJCS8qIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBJREUgd2hlbiBuZXQtYm9vdGluZyAqLwogCQlwcGNfbWQuZmVhdHVyZV9jYWxsKFBNQUNfRlRSX0lERV9SRVNFVCwgbnAsIHBtaWYtPmFhcGxfYnVzX2lkLCAxKTsKIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfRU5BQkxFLCBucCwgcG1pZi0+YWFwbF9idXNfaWQsIDEpOwpAQCAtMTExMiwxNyArMTEwOCwyMSBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogRm91bmQgQXBwbGUgJXMgY29udHJvbGxlciAoJXMpLCAiCi0JCQkgImJ1cyBJRCAlZCVzLCBpcnEgJWRcbiIsIG1vZGVsX25hbWVbcG1pZi0+a2luZF0sCi0JCQkgcG1pZi0+bWRldiA/ICJtYWNpbyIgOiAiUENJIiwgcG1pZi0+YWFwbF9idXNfaWQsCi0JCQkgcG1pZi0+bWVkaWFiYXkgPyAiIChtZWRpYWJheSkiIDogIiIsIGh3LT5pcnEpOworCSAgICAgICAiYnVzIElEICVkJXMsIGlycSAlZFxuIiwgbW9kZWxfbmFtZVtwbWlmLT5raW5kXSwKKwkgICAgICAgcG1pZi0+bWRldiA/ICJtYWNpbyIgOiAiUENJIiwgcG1pZi0+YWFwbF9idXNfaWQsCisJICAgICAgIG9uX21lZGlhX2JheShwbWlmKSA/ICIgKG1lZGlhYmF5KSIgOiAiIiwgaHctPmlycSk7CiAKIAlyYyA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsICZkLCBod3MpOwotCWlmIChyYykgewotCQlpZGVfaG9zdF9mcmVlKGhvc3QpOwotCQlyZXR1cm4gcmM7Ci0JfQorCWlmIChyYykKKwkJcG1pZi0+aHdpZiA9IE5VTEw7CiAKLQlyZXR1cm4gMDsKKwlpZiAocG1pZi0+bWRldikKKwkJdW5sb2NrX21lZGlhX2JheShwbWlmLT5tZGV2LT5tZWRpYV9iYXkpOworCisgYmFpbDoKKwlpZiAocmMgJiYgaG9zdCkKKwkJaWRlX2hvc3RfZnJlZShob3N0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwbWFjX2lkZV9pbml0X3BvcnRzKHN0cnVjdCBpZGVfaHcgKmh3LCB1bnNpZ25lZCBsb25nIGJhc2UpCkBAIC0xMzYyLDYgKzEzNjIsMjUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1BQ19NRURJQUJBWQorc3RhdGljIHZvaWQgcG1hY19pZGVfbWFjaW9fbWJfZXZlbnQoc3RydWN0IG1hY2lvX2RldiogbWRldiwgaW50IG1iX3N0YXRlKQoreworCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CisJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7CisKKwlzd2l0Y2gobWJfc3RhdGUpIHsKKwljYXNlIE1CX0NEOgorCQlpZiAoIXBtaWYtPmh3aWYtPnByZXNlbnQpCisJCQlpZGVfcG9ydF9zY2FuKHBtaWYtPmh3aWYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAocG1pZi0+aHdpZi0+cHJlc2VudCkKKwkJCWlkZV9wb3J0X3VucmVnaXN0ZXJfZGV2aWNlcyhwbWlmLT5od2lmKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1BNQUNfTUVESUFCQVkgKi8KKworCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbWFjX2lkZV9tYWNpb19tYXRjaFtdID0gCiB7CiAJewpAQCAtMTM4Niw2ICsxNDA1LDkgQEAKIAkucHJvYmUJCT0gcG1hY19pZGVfbWFjaW9fYXR0YWNoLAogCS5zdXNwZW5kCT0gcG1hY19pZGVfbWFjaW9fc3VzcGVuZCwKIAkucmVzdW1lCQk9IHBtYWNfaWRlX21hY2lvX3Jlc3VtZSwKKyNpZmRlZiBDT05GSUdfUE1BQ19NRURJQUJBWQorCS5tZWRpYWJheV9ldmVudAk9IHBtYWNfaWRlX21hY2lvX21iX2V2ZW50LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcG1hY19pZGVfcGNpX21hdGNoW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jIGIvZHJpdmVycy9pZGxlL2k3MzAwX2lkbGUuYwppbmRleCAxZjIwYTA0Li5kZDI1MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jCisrKyBiL2RyaXZlcnMvaWRsZS9pNzMwMF9pZGxlLmMKQEAgLTgxLDcgKzgxLDcgQEAKIHN0YXRpYyB1OCBpNzMwMF9pZGxlX3RocnRsb3dfc2F2ZWQ7CiBzdGF0aWMgdTMyIGk3MzAwX2lkbGVfbWNfc2F2ZWQ7CiAKLXN0YXRpYyBjcHVtYXNrX3QgaWRsZV9jcHVtYXNrOworc3RhdGljIGNwdW1hc2tfdmFyX3QgaWRsZV9jcHVtYXNrOwogc3RhdGljIGt0aW1lX3Qgc3RhcnRfa3RpbWU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdmdfaWRsZV91czsKIApAQCAtNDU5LDkgKzQ1OSw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk3MzAwX2lkbGVfbG9jaywgZmxhZ3MpOwogCWlmICh2YWwgPT0gSURMRV9TVEFSVCkgewogCi0JCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZGxlX2NwdW1hc2spOworCQljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZGxlX2NwdW1hc2spOwogCi0JCWlmIChjcHVzX3dlaWdodChpZGxlX2NwdW1hc2spICE9IG51bV9vbmxpbmVfY3B1cygpKQorCQlpZiAoY3B1bWFza193ZWlnaHQoaWRsZV9jcHVtYXNrKSAhPSBudW1fb25saW5lX2NwdXMoKSkKIAkJCWdvdG8gZW5kOwogCiAJCW5vd19rdGltZSA9IGt0aW1lX2dldCgpOwpAQCAtNDc4LDggKzQ3OCw4IEBACiAJCWk3MzAwX2lkbGVfaW9hdF9zdGFydCgpOwogCiAJfSBlbHNlIGlmICh2YWwgPT0gSURMRV9FTkQpIHsKLQkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgaWRsZV9jcHVtYXNrKTsKLQkJaWYgKGNwdXNfd2VpZ2h0KGlkbGVfY3B1bWFzaykgPT0gKG51bV9vbmxpbmVfY3B1cygpIC0gMSkpIHsKKwkJY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZGxlX2NwdW1hc2spOworCQlpZiAoY3B1bWFza193ZWlnaHQoaWRsZV9jcHVtYXNrKSA9PSAobnVtX29ubGluZV9jcHVzKCkgLSAxKSkgewogCQkJLyogRmlyc3QgQ1BVIGNvbWluZyBvdXQgb2YgaWRsZSAqLwogCQkJdTY0IGlkbGVfZHVyYXRpb25fdXM7CiAKQEAgLTU1Myw3ICs1NTMsNiBAQAogc3RhdGljIGludCBfX2luaXQgaTczMDBfaWRsZV9pbml0KHZvaWQpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmk3MzAwX2lkbGVfbG9jayk7Ci0JY3B1c19jbGVhcihpZGxlX2NwdW1hc2spOwogCXRvdGFsX3VzID0gMDsKIAogCWlmIChpNzMwMF9pZGxlX3BsYXRmb3JtX3Byb2JlKCZmYmRfZGV2LCAmaW9hdF9kZXYsIGZvcmNlbG9hZCkpCkBAIC01NjUsNiArNTY0LDkgQEAKIAlpZiAoaTczMDBfaWRsZV9pb2F0X2luaXQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmaWRsZV9jcHVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiaTczMDBfaWRsZSIsIE5VTEwpOwogCWlmIChkZWJ1Z2ZzX2RpcikgewogCQlpbnQgaSA9IDA7CkBAIC01ODksNiArNTkxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpNzMwMF9pZGxlX2V4aXQodm9pZCkKIHsKIAlpZGxlX25vdGlmaWVyX3VucmVnaXN0ZXIoJmk3MzAwX2lkbGVfbmIpOworCWZyZWVfY3B1bWFza192YXIoaWRsZV9jcHVtYXNrKTsKIAogCWlmIChkZWJ1Z2ZzX2RpcikgewogCQlpbnQgaSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggYmQwNzgwMy4uYWJiYjA2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbmVpZ2hib3VyLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CkBAIC05MiwyMiArOTEsMTIgQEAKIGludCByZG1hX2NvcHlfYWRkcihzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZHN0X2Rldl9hZGRyKQogewotCXN3aXRjaCAoZGV2LT50eXBlKSB7Ci0JY2FzZSBBUlBIUkRfSU5GSU5JQkFORDoKLQkJZGV2X2FkZHItPmRldl90eXBlID0gUkRNQV9OT0RFX0lCX0NBOwotCQlicmVhazsKLQljYXNlIEFSUEhSRF9FVEhFUjoKLQkJZGV2X2FkZHItPmRldl90eXBlID0gUkRNQV9OT0RFX1JOSUM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLQl9Ci0KKwlkZXZfYWRkci0+ZGV2X3R5cGUgPSBkZXYtPnR5cGU7CiAJbWVtY3B5KGRldl9hZGRyLT5zcmNfZGV2X2FkZHIsIGRldi0+ZGV2X2FkZHIsIE1BWF9BRERSX0xFTik7CiAJbWVtY3B5KGRldl9hZGRyLT5icm9hZGNhc3QsIGRldi0+YnJvYWRjYXN0LCBNQVhfQUREUl9MRU4pOwogCWlmIChkc3RfZGV2X2FkZHIpCiAJCW1lbWNweShkZXZfYWRkci0+ZHN0X2Rldl9hZGRyLCBkc3RfZGV2X2FkZHIsIE1BWF9BRERSX0xFTik7Ci0JZGV2X2FkZHItPnNyY19kZXYgPSBkZXY7CisJZGV2X2FkZHItPmJvdW5kX2Rldl9pZiA9IGRldi0+aWZpbmRleDsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmRtYV9jb3B5X2FkZHIpOwpAQCAtMTE3LDYgKzEwNiwxNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IHJldCA9IC1FQUREUk5PVEFWQUlMOwogCisJaWYgKGRldl9hZGRyLT5ib3VuZF9kZXZfaWYpIHsKKwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGRldl9hZGRyLT5ib3VuZF9kZXZfaWYpOworCQlpZiAoIWRldikKKwkJCXJldHVybiAtRU5PREVWOworCQlyZXQgPSByZG1hX2NvcHlfYWRkcihkZXZfYWRkciwgZGV2LCBOVUxMKTsKKwkJZGV2X3B1dChkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgogCQlkZXYgPSBpcF9kZXZfZmluZCgmaW5pdF9uZXQsCkBAIC0xMzEsNiArMTI5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCWNhc2UgQUZfSU5FVDY6CisJCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikgewogCQkJaWYgKGlwdjZfY2hrX2FkZHIoJmluaXRfbmV0LAogCQkJCQkgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfYWRkciwKQEAgLTEzOSw2ICsxMzgsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAkJYnJlYWs7CiAjZW5kaWYKIAl9CkBAIC0xNzYsNDggKzE3Niw5IEBACiAJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkcl9zZW5kX2FycChzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9pbikKLXsKLQlzdHJ1Y3QgcnRhYmxlICpydDsKLQlzdHJ1Y3QgZmxvd2kgZmw7Ci0KLQltZW1zZXQoJmZsLCAwLCBzaXplb2YgZmwpOwotCi0Jc3dpdGNoIChkc3RfaW4tPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJZmwubmxfdS5pcDRfdS5kYWRkciA9Ci0JCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBkc3RfaW4pLT5zaW5fYWRkci5zX2FkZHI7Ci0KLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpCi0JCQlyZXR1cm47Ci0KLQkJbmVpZ2hfZXZlbnRfc2VuZChydC0+dS5kc3QubmVpZ2hib3VyLCBOVUxMKTsKLQkJaXBfcnRfcHV0KHJ0KTsKLQkJYnJlYWs7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwotCi0JCWZsLm5sX3UuaXA2X3UuZGFkZHIgPQotCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRzdF9pbiktPnNpbjZfYWRkcjsKLQotCQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsKTsKLQkJaWYgKCFkc3QpCi0JCQlyZXR1cm47Ci0KLQkJbmVpZ2hfZXZlbnRfc2VuZChkc3QtPm5laWdoYm91ciwgTlVMTCk7Ci0JCWRzdF9yZWxlYXNlKGRzdCk7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCX0KLX0KLQotc3RhdGljIGludCBhZGRyNF9yZXNvbHZlX3JlbW90ZShzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwKLQkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRzdF9pbiwKLQkJCSAgICAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKK3N0YXRpYyBpbnQgYWRkcjRfcmVzb2x2ZShzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwKKwkJCSBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRzdF9pbiwKKwkJCSBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKIHsKIAlfX2JlMzIgc3JjX2lwID0gc3JjX2luLT5zaW5fYWRkci5zX2FkZHI7CiAJX19iZTMyIGRzdF9pcCA9IGRzdF9pbi0+c2luX2FkZHIuc19hZGRyOwpAQCAtMjI5LDEwICsxOTAsMjIgQEAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YgZmwpOwogCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBkc3RfaXA7CiAJZmwubmxfdS5pcDRfdS5zYWRkciA9IHNyY19pcDsKKwlmbC5vaWYgPSBhZGRyLT5ib3VuZF9kZXZfaWY7CisKIAlyZXQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJc3JjX2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzcmNfaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisKKwlpZiAocnQtPmlkZXYtPmRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHsKKwkJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoKHN0cnVjdCBzb2NrYWRkciAqKSBkc3RfaW4sIGFkZHIpOworCQlpZiAoIXJldCkKKwkJCW1lbWNweShhZGRyLT5kc3RfZGV2X2FkZHIsIGFkZHItPnNyY19kZXZfYWRkciwgTUFYX0FERFJfTEVOKTsKKwkJZ290byBwdXQ7CisJfQorCiAJLyogSWYgdGhlIGRldmljZSBkb2VzIEFSUCBpbnRlcm5hbGx5LCByZXR1cm4gJ2RvbmUnICovCiAJaWYgKHJ0LT5pZGV2LT5kZXYtPmZsYWdzICYgSUZGX05PQVJQKSB7CiAJCXJkbWFfY29weV9hZGRyKGFkZHIsIHJ0LT5pZGV2LT5kZXYsIE5VTEwpOwpAQCAtMjQwLDIxICsyMTMsMTQgQEAKIAl9CiAKIAluZWlnaCA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwgJnJ0LT5ydF9nYXRld2F5LCBydC0+aWRldi0+ZGV2KTsKLQlpZiAoIW5laWdoKSB7CisJaWYgKCFuZWlnaCB8fCAhKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpKSB7CisJCW5laWdoX2V2ZW50X3NlbmQocnQtPnUuZHN0Lm5laWdoYm91ciwgTlVMTCk7CiAJCXJldCA9IC1FTk9EQVRBOworCQlpZiAobmVpZ2gpCisJCQlnb3RvIHJlbGVhc2U7CiAJCWdvdG8gcHV0OwogCX0KIAotCWlmICghKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpKSB7Ci0JCXJldCA9IC1FTk9EQVRBOwotCQlnb3RvIHJlbGVhc2U7Ci0JfQotCi0JaWYgKCFzcmNfaXApIHsKLQkJc3JjX2luLT5zaW5fZmFtaWx5ID0gZHN0X2luLT5zaW5fZmFtaWx5OwotCQlzcmNfaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7Ci0JfQotCiAJcmV0ID0gcmRtYV9jb3B5X2FkZHIoYWRkciwgbmVpZ2gtPmRldiwgbmVpZ2gtPmhhKTsKIHJlbGVhc2U6CiAJbmVpZ2hfcmVsZWFzZShuZWlnaCk7CkBAIC0yNjUsNTIgKzIzMSw3NyBAQAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1zdGF0aWMgaW50IGFkZHI2X3Jlc29sdmVfcmVtb3RlKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyY19pbiwKLQkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkc3RfaW4sCi0JCQkgICAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIpCitzdGF0aWMgaW50IGFkZHI2X3Jlc29sdmUoc3RydWN0IHNvY2thZGRyX2luNiAqc3JjX2luLAorCQkJIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmRzdF9pbiwKKwkJCSBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwotCWludCByZXQgPSAtRU5PREFUQTsKKwlpbnQgcmV0OwogCiAJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mIGZsKTsKLQlmbC5ubF91LmlwNl91LmRhZGRyID0gZHN0X2luLT5zaW42X2FkZHI7Ci0JZmwubmxfdS5pcDZfdS5zYWRkciA9IHNyY19pbi0+c2luNl9hZGRyOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmZHN0X2luLT5zaW42X2FkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmc3JjX2luLT5zaW42X2FkZHIpOworCWZsLm9pZiA9IGFkZHItPmJvdW5kX2Rldl9pZjsKIAogCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCAmZmwpOwotCWlmICghZHN0KQotCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gZHN0LT5lcnJvcikpCisJCWdvdG8gcHV0OwogCi0JaWYgKGRzdC0+ZGV2LT5mbGFncyAmIElGRl9OT0FSUCkgewotCQlyZXQgPSByZG1hX2NvcHlfYWRkcihhZGRyLCBkc3QtPmRldiwgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJbmVpZ2ggPSBkc3QtPm5laWdoYm91cjsKLQkJaWYgKG5laWdoICYmIChuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkKLQkJCXJldCA9IHJkbWFfY29weV9hZGRyKGFkZHIsIG5laWdoLT5kZXYsIG5laWdoLT5oYSk7CisJaWYgKGlwdjZfYWRkcl9hbnkoJmZsLmZsNl9zcmMpKSB7CisJCXJldCA9IGlwdjZfZGV2X2dldF9zYWRkcigmaW5pdF9uZXQsIGlwNl9kc3RfaWRldihkc3QpLT5kZXYsCisJCQkJCSAmZmwuZmw2X2RzdCwgMCwgJmZsLmZsNl9zcmMpOworCQlpZiAocmV0KQorCQkJZ290byBwdXQ7CisKKwkJc3JjX2luLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlpcHY2X2FkZHJfY29weSgmc3JjX2luLT5zaW42X2FkZHIsICZmbC5mbDZfc3JjKTsKIAl9CiAKKwlpZiAoZHN0LT5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSB7CisJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgZHN0X2luLCBhZGRyKTsKKwkJaWYgKCFyZXQpCisJCQltZW1jcHkoYWRkci0+ZHN0X2Rldl9hZGRyLCBhZGRyLT5zcmNfZGV2X2FkZHIsIE1BWF9BRERSX0xFTik7CisJCWdvdG8gcHV0OworCX0KKworCS8qIElmIHRoZSBkZXZpY2UgZG9lcyBBUlAgaW50ZXJuYWxseSwgcmV0dXJuICdkb25lJyAqLworCWlmIChkc3QtPmRldi0+ZmxhZ3MgJiBJRkZfTk9BUlApIHsKKwkJcmV0ID0gcmRtYV9jb3B5X2FkZHIoYWRkciwgZHN0LT5kZXYsIE5VTEwpOworCQlnb3RvIHB1dDsKKwl9CisKKwluZWlnaCA9IGRzdC0+bmVpZ2hib3VyOworCWlmICghbmVpZ2ggfHwgIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkgeworCQluZWlnaF9ldmVudF9zZW5kKGRzdC0+bmVpZ2hib3VyLCBOVUxMKTsKKwkJcmV0ID0gLUVOT0RBVEE7CisJCWdvdG8gcHV0OworCX0KKworCXJldCA9IHJkbWFfY29weV9hZGRyKGFkZHIsIGRzdC0+ZGV2LCBuZWlnaC0+aGEpOworcHV0OgogCWRzdF9yZWxlYXNlKGRzdCk7CiAJcmV0dXJuIHJldDsKIH0KICNlbHNlCi1zdGF0aWMgaW50IGFkZHI2X3Jlc29sdmVfcmVtb3RlKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyY19pbiwKLQkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkc3RfaW4sCi0JCQkgICAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIpCitzdGF0aWMgaW50IGFkZHI2X3Jlc29sdmUoc3RydWN0IHNvY2thZGRyX2luNiAqc3JjX2luLAorCQkJIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmRzdF9pbiwKKwkJCSBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKIHsKIAlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBhZGRyX3Jlc29sdmVfcmVtb3RlKHN0cnVjdCBzb2NrYWRkciAqc3JjX2luLAotCQkJCXN0cnVjdCBzb2NrYWRkciAqZHN0X2luLAotCQkJCXN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyKQorc3RhdGljIGludCBhZGRyX3Jlc29sdmUoc3RydWN0IHNvY2thZGRyICpzcmNfaW4sCisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9pbiwKKwkJCXN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyKQogewogCWlmIChzcmNfaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCXJldHVybiBhZGRyNF9yZXNvbHZlX3JlbW90ZSgoc3RydWN0IHNvY2thZGRyX2luICopIHNyY19pbiwKKwkJcmV0dXJuIGFkZHI0X3Jlc29sdmUoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzcmNfaW4sCiAJCQkoc3RydWN0IHNvY2thZGRyX2luICopIGRzdF9pbiwgYWRkcik7CiAJfSBlbHNlCi0JCXJldHVybiBhZGRyNl9yZXNvbHZlX3JlbW90ZSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzcmNfaW4sCisJCXJldHVybiBhZGRyNl9yZXNvbHZlKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNyY19pbiwKIAkJCShzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRzdF9pbiwgYWRkcik7CiB9CiAKQEAgLTMyNyw4ICszMTgsNyBAQAogCQlpZiAocmVxLT5zdGF0dXMgPT0gLUVOT0RBVEEpIHsKIAkJCXNyY19pbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlcS0+c3JjX2FkZHI7CiAJCQlkc3RfaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZyZXEtPmRzdF9hZGRyOwotCQkJcmVxLT5zdGF0dXMgPSBhZGRyX3Jlc29sdmVfcmVtb3RlKHNyY19pbiwgZHN0X2luLAotCQkJCQkJCSAgcmVxLT5hZGRyKTsKKwkJCXJlcS0+c3RhdHVzID0gYWRkcl9yZXNvbHZlKHNyY19pbiwgZHN0X2luLCByZXEtPmFkZHIpOwogCQkJaWYgKHJlcS0+c3RhdHVzICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcmVxLT50aW1lb3V0KSkKIAkJCQlyZXEtPnN0YXR1cyA9IC1FVElNRURPVVQ7CiAJCQllbHNlIGlmIChyZXEtPnN0YXR1cyA9PSAtRU5PREFUQSkKQEAgLTM1Miw4MiArMzQyLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYWRkcl9yZXNvbHZlX2xvY2FsKHN0cnVjdCBzb2NrYWRkciAqc3JjX2luLAotCQkJICAgICAgc3RydWN0IHNvY2thZGRyICpkc3RfaW4sCi0JCQkgICAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGRzdF9pbi0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCXsKLQkJX19iZTMyIHNyY19pcCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIHNyY19pbiktPnNpbl9hZGRyLnNfYWRkcjsKLQkJX19iZTMyIGRzdF9pcCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGRzdF9pbiktPnNpbl9hZGRyLnNfYWRkcjsKLQotCQlkZXYgPSBpcF9kZXZfZmluZCgmaW5pdF9uZXQsIGRzdF9pcCk7Ci0JCWlmICghZGV2KQotCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi0JCWlmIChpcHY0X2lzX3plcm9uZXQoc3JjX2lwKSkgewotCQkJc3JjX2luLT5zYV9mYW1pbHkgPSBkc3RfaW4tPnNhX2ZhbWlseTsKLQkJCSgoc3RydWN0IHNvY2thZGRyX2luICopIHNyY19pbiktPnNpbl9hZGRyLnNfYWRkciA9IGRzdF9pcDsKLQkJCXJldCA9IHJkbWFfY29weV9hZGRyKGFkZHIsIGRldiwgZGV2LT5kZXZfYWRkcik7Ci0JCX0gZWxzZSBpZiAoaXB2NF9pc19sb29wYmFjayhzcmNfaXApKSB7Ci0JCQlyZXQgPSByZG1hX3RyYW5zbGF0ZV9pcChkc3RfaW4sIGFkZHIpOwotCQkJaWYgKCFyZXQpCi0JCQkJbWVtY3B5KGFkZHItPmRzdF9kZXZfYWRkciwgZGV2LT5kZXZfYWRkciwgTUFYX0FERFJfTEVOKTsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKHNyY19pbiwgYWRkcik7Ci0JCQlpZiAoIXJldCkKLQkJCQltZW1jcHkoYWRkci0+ZHN0X2Rldl9hZGRyLCBkZXYtPmRldl9hZGRyLCBNQVhfQUREUl9MRU4pOwotCQl9Ci0JCWRldl9wdXQoZGV2KTsKLQkJYnJlYWs7Ci0JfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBpbjZfYWRkciAqYTsKLQotCQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpCi0JCQlpZiAoaXB2Nl9jaGtfYWRkcigmaW5pdF9uZXQsCi0JCQkJCSAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3RfaW4pLT5zaW42X2FkZHIsCi0JCQkJCSAgZGV2LCAxKSkKLQkJCQlicmVhazsKLQotCQlpZiAoIWRldikKLQkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLQotCQlhID0gJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzcmNfaW4pLT5zaW42X2FkZHI7Ci0KLQkJaWYgKGlwdjZfYWRkcl9hbnkoYSkpIHsKLQkJCXNyY19pbi0+c2FfZmFtaWx5ID0gZHN0X2luLT5zYV9mYW1pbHk7Ci0JCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc3JjX2luKS0+c2luNl9hZGRyID0KLQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0X2luKS0+c2luNl9hZGRyOwotCQkJcmV0ID0gcmRtYV9jb3B5X2FkZHIoYWRkciwgZGV2LCBkZXYtPmRldl9hZGRyKTsKLQkJfSBlbHNlIGlmIChpcHY2X2FkZHJfbG9vcGJhY2soYSkpIHsKLQkJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKGRzdF9pbiwgYWRkcik7Ci0JCQlpZiAoIXJldCkKLQkJCQltZW1jcHkoYWRkci0+ZHN0X2Rldl9hZGRyLCBkZXYtPmRldl9hZGRyLCBNQVhfQUREUl9MRU4pOwotCQl9IGVsc2UgIHsKLQkJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKHNyY19pbiwgYWRkcik7Ci0JCQlpZiAoIXJldCkKLQkJCQltZW1jcHkoYWRkci0+ZHN0X2Rldl9hZGRyLCBkZXYtPmRldl9hZGRyLCBNQVhfQUREUl9MRU4pOwotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVBRERSTk9UQVZBSUw7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIGludCByZG1hX3Jlc29sdmVfaXAoc3RydWN0IHJkbWFfYWRkcl9jbGllbnQgKmNsaWVudCwKIAkJICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCiAJCSAgICBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkciwgaW50IHRpbWVvdXRfbXMsCkBAIC00NDMsMjIgKzM1NywyOCBAQAogCWlmICghcmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzcmNfYWRkcikKLQkJbWVtY3B5KCZyZXEtPnNyY19hZGRyLCBzcmNfYWRkciwgaXBfYWRkcl9zaXplKHNyY19hZGRyKSk7Ci0JbWVtY3B5KCZyZXEtPmRzdF9hZGRyLCBkc3RfYWRkciwgaXBfYWRkcl9zaXplKGRzdF9hZGRyKSk7CisJc3JjX2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVxLT5zcmNfYWRkcjsKKwlkc3RfaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZyZXEtPmRzdF9hZGRyOworCisJaWYgKHNyY19hZGRyKSB7CisJCWlmIChzcmNfYWRkci0+c2FfZmFtaWx5ICE9IGRzdF9hZGRyLT5zYV9mYW1pbHkpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCW1lbWNweShzcmNfaW4sIHNyY19hZGRyLCBpcF9hZGRyX3NpemUoc3JjX2FkZHIpKTsKKwl9IGVsc2UgeworCQlzcmNfaW4tPnNhX2ZhbWlseSA9IGRzdF9hZGRyLT5zYV9mYW1pbHk7CisJfQorCisJbWVtY3B5KGRzdF9pbiwgZHN0X2FkZHIsIGlwX2FkZHJfc2l6ZShkc3RfYWRkcikpOwogCXJlcS0+YWRkciA9IGFkZHI7CiAJcmVxLT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCXJlcS0+Y29udGV4dCA9IGNvbnRleHQ7CiAJcmVxLT5jbGllbnQgPSBjbGllbnQ7CiAJYXRvbWljX2luYygmY2xpZW50LT5yZWZjb3VudCk7CiAKLQlzcmNfaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZyZXEtPnNyY19hZGRyOwotCWRzdF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlcS0+ZHN0X2FkZHI7Ci0KLQlyZXEtPnN0YXR1cyA9IGFkZHJfcmVzb2x2ZV9sb2NhbChzcmNfaW4sIGRzdF9pbiwgYWRkcik7Ci0JaWYgKHJlcS0+c3RhdHVzID09IC1FQUREUk5PVEFWQUlMKQotCQlyZXEtPnN0YXR1cyA9IGFkZHJfcmVzb2x2ZV9yZW1vdGUoc3JjX2luLCBkc3RfaW4sIGFkZHIpOwotCisJcmVxLT5zdGF0dXMgPSBhZGRyX3Jlc29sdmUoc3JjX2luLCBkc3RfaW4sIGFkZHIpOwogCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCXJlcS0+dGltZW91dCA9IGppZmZpZXM7CkBAIC00NjcsMTUgKzM4NywxNiBAQAogCWNhc2UgLUVOT0RBVEE6CiAJCXJlcS0+dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykgKyBqaWZmaWVzOwogCQlxdWV1ZV9yZXEocmVxKTsKLQkJYWRkcl9zZW5kX2FycChkc3RfaW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSByZXEtPnN0YXR1czsKIAkJYXRvbWljX2RlYygmY2xpZW50LT5yZWZjb3VudCk7Ci0JCWtmcmVlKHJlcSk7Ci0JCWJyZWFrOworCQlnb3RvIGVycjsKIAl9CiAJcmV0dXJuIHJldDsKK2VycjoKKwlrZnJlZShyZXEpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJkbWFfcmVzb2x2ZV9pcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKaW5kZXggMDc1MzE3OC4uZmJkZDczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTMzMCwxNyArMzMwLDcgQEAKIAl1bmlvbiBpYl9naWQgZ2lkOwogCWludCByZXQgPSAtRU5PREVWOwogCi0Jc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChkZXZfYWRkci0+ZGV2X3R5cGUpKSB7Ci0JY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKLQkJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgJmdpZCk7Ci0JCWJyZWFrOwotCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6Ci0JCWl3X2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICZnaWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KKwlyZG1hX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICZnaWQpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY21hX2RldiwgJmRldl9saXN0LCBsaXN0KSB7CiAJCXJldCA9IGliX2ZpbmRfY2FjaGVkX2dpZChjbWFfZGV2LT5kZXZpY2UsICZnaWQsCiAJCQkJCSAmaWRfcHJpdi0+aWQucG9ydF9udW0sIE5VTEwpOwpAQCAtMTAzMiwxMSArMTAyMiwxNyBAQAogCWlmIChydC0+bnVtX3BhdGhzID09IDIpCiAJCXJ0LT5wYXRoX3JlY1sxXSA9ICppYl9ldmVudC0+cGFyYW0ucmVxX3JjdmQuYWx0ZXJuYXRlX3BhdGg7CiAKLQlpYl9hZGRyX3NldF9kZ2lkKCZydC0+YWRkci5kZXZfYWRkciwgJnJ0LT5wYXRoX3JlY1swXS5kZ2lkKTsKLQlyZXQgPSByZG1hX3RyYW5zbGF0ZV9pcCgoc3RydWN0IHNvY2thZGRyICopICZpZC0+cm91dGUuYWRkci5zcmNfYWRkciwKLQkJCQkmaWQtPnJvdXRlLmFkZHIuZGV2X2FkZHIpOwotCWlmIChyZXQpCi0JCWdvdG8gZGVzdHJveV9pZDsKKwlpZiAoY21hX2FueV9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJ0LT5hZGRyLnNyY19hZGRyKSkgeworCQlydC0+YWRkci5kZXZfYWRkci5kZXZfdHlwZSA9IEFSUEhSRF9JTkZJTklCQU5EOworCQlyZG1hX2FkZHJfc2V0X3NnaWQoJnJ0LT5hZGRyLmRldl9hZGRyLCAmcnQtPnBhdGhfcmVjWzBdLnNnaWQpOworCQlpYl9hZGRyX3NldF9wa2V5KCZydC0+YWRkci5kZXZfYWRkciwgcnQtPnBhdGhfcmVjWzBdLnBrZXkpOworCX0gZWxzZSB7CisJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJ0LT5hZGRyLnNyY19hZGRyLAorCQkJCQkmcnQtPmFkZHIuZGV2X2FkZHIpOworCQlpZiAocmV0KQorCQkJZ290byBkZXN0cm95X2lkOworCX0KKwlyZG1hX2FkZHJfc2V0X2RnaWQoJnJ0LT5hZGRyLmRldl9hZGRyLCAmcnQtPnBhdGhfcmVjWzBdLmRnaWQpOwogCiAJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOwogCWlkX3ByaXYtPnN0YXRlID0gQ01BX0NPTk5FQ1Q7CkBAIC0xMDcxLDEwICsxMDY3LDEyIEBACiAJY21hX3NhdmVfbmV0X2luZm8oJmlkLT5yb3V0ZS5hZGRyLCAmbGlzdGVuX2lkLT5yb3V0ZS5hZGRyLAogCQkJICBpcF92ZXIsIHBvcnQsIHNyYywgZHN0KTsKIAotCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyLAotCQkJCSZpZC0+cm91dGUuYWRkci5kZXZfYWRkcik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7CisJaWYgKCFjbWFfYW55X2FkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSAmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIpKSB7CisJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyLAorCQkJCQkmaWQtPnJvdXRlLmFkZHIuZGV2X2FkZHIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQogCiAJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOwogCWlkX3ByaXYtPnN0YXRlID0gQ01BX0NPTk5FQ1Q7CkBAIC0xNDc0LDE1ICsxNDcyLDYgQEAKIAltdXRleF91bmxvY2soJmxvY2spOwogfQogCi1zdGF0aWMgaW50IGNtYV9iaW5kX2FueShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHNhX2ZhbWlseV90IGFmKQotewotCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJfaW47Ci0KLQltZW1zZXQoJmFkZHJfaW4sIDAsIHNpemVvZiBhZGRyX2luKTsKLQlhZGRyX2luLnNzX2ZhbWlseSA9IGFmOwotCXJldHVybiByZG1hX2JpbmRfYWRkcihpZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcl9pbik7Ci19Ci0KIGludCByZG1hX2xpc3RlbihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCBiYWNrbG9nKQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CkBAIC0xNDkwLDcgKzE0NzksOCBAQAogCiAJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOwogCWlmIChpZF9wcml2LT5zdGF0ZSA9PSBDTUFfSURMRSkgewotCQlyZXQgPSBjbWFfYmluZF9hbnkoaWQsIEFGX0lORVQpOworCQkoKHN0cnVjdCBzb2NrYWRkciAqKSAmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIpLT5zYV9mYW1pbHkgPSBBRl9JTkVUOworCQlyZXQgPSByZG1hX2JpbmRfYWRkcihpZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNTY1LDggKzE1NTUsOCBAQAogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CiAKIAltZW1zZXQoJnBhdGhfcmVjLCAwLCBzaXplb2YgcGF0aF9yZWMpOwotCWliX2FkZHJfZ2V0X3NnaWQoJmFkZHItPmRldl9hZGRyLCAmcGF0aF9yZWMuc2dpZCk7Ci0JaWJfYWRkcl9nZXRfZGdpZCgmYWRkci0+ZGV2X2FkZHIsICZwYXRoX3JlYy5kZ2lkKTsKKwlyZG1hX2FkZHJfZ2V0X3NnaWQoJmFkZHItPmRldl9hZGRyLCAmcGF0aF9yZWMuc2dpZCk7CisJcmRtYV9hZGRyX2dldF9kZ2lkKCZhZGRyLT5kZXZfYWRkciwgJnBhdGhfcmVjLmRnaWQpOwogCXBhdGhfcmVjLnBrZXkgPSBjcHVfdG9fYmUxNihpYl9hZGRyX2dldF9wa2V5KCZhZGRyLT5kZXZfYWRkcikpOwogCXBhdGhfcmVjLm51bWJfcGF0aCA9IDE7CiAJcGF0aF9yZWMucmV2ZXJzaWJsZSA9IDE7CkBAIC0xNzgxLDcgKzE3NzEsMTEgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWliX2FkZHJfc2V0X3NnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsICZnaWQpOworCWlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIuZGV2X3R5cGUgPQorCQkocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoY21hX2Rldi0+ZGV2aWNlLT5ub2RlX3R5cGUpID09IFJETUFfVFJBTlNQT1JUX0lCKSA/CisJCUFSUEhSRF9JTkZJTklCQU5EIDogQVJQSFJEX0VUSEVSOworCisJcmRtYV9hZGRyX3NldF9zZ2lkKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLCAmZ2lkKTsKIAlpYl9hZGRyX3NldF9wa2V5KCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLCBwa2V5KTsKIAlpZF9wcml2LT5pZC5wb3J0X251bSA9IHA7CiAJY21hX2F0dGFjaF90b19kZXYoaWRfcHJpdiwgY21hX2Rldik7CkBAIC0xODM5LDcgKzE4MzMsNyBAQAogc3RhdGljIGludCBjbWFfcmVzb2x2ZV9sb29wYmFjayhzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQogewogCXN0cnVjdCBjbWFfd29yayAqd29yazsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwgKmRzdF9pbjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgKmRzdDsKIAl1bmlvbiBpYl9naWQgZ2lkOwogCWludCByZXQ7CiAKQEAgLTE4NTMsMTQgKzE4NDcsMTkgQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCWliX2FkZHJfZ2V0X3NnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsICZnaWQpOwotCWliX2FkZHJfc2V0X2RnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsICZnaWQpOworCXJkbWFfYWRkcl9nZXRfc2dpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkciwgJmdpZCk7CisJcmRtYV9hZGRyX3NldF9kZ2lkKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLCAmZ2lkKTsKIAotCWlmIChjbWFfemVyb19hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKSB7Ci0JCXNyY19pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKLQkJZHN0X2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRzdF9hZGRyOwotCQlzcmNfaW4tPnNpbl9mYW1pbHkgPSBkc3RfaW4tPnNpbl9mYW1pbHk7Ci0JCXNyY19pbi0+c2luX2FkZHIuc19hZGRyID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CisJc3JjID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwlpZiAoY21hX3plcm9fYWRkcihzcmMpKSB7CisJCWRzdCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZHN0X2FkZHI7CisJCWlmICgoc3JjLT5zYV9mYW1pbHkgPSBkc3QtPnNhX2ZhbWlseSkgPT0gQUZfSU5FVCkgeworCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgc3JjKS0+c2luX2FkZHIuc19hZGRyID0KKwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBkc3QpLT5zaW5fYWRkci5zX2FkZHI7CisJCX0gZWxzZSB7CisJCQlpcHY2X2FkZHJfY29weSgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNyYyktPnNpbjZfYWRkciwKKwkJCQkgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3QpLT5zaW42X2FkZHIpOworCQl9CiAJfQogCiAJd29yay0+aWQgPSBpZF9wcml2OwpAQCAtMTg3OCwxMCArMTg3NywxNCBAQAogc3RhdGljIGludCBjbWFfYmluZF9hZGRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKIAkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyKQogewotCWlmIChzcmNfYWRkciAmJiBzcmNfYWRkci0+c2FfZmFtaWx5KQotCQlyZXR1cm4gcmRtYV9iaW5kX2FkZHIoaWQsIHNyY19hZGRyKTsKLQllbHNlCi0JCXJldHVybiBjbWFfYmluZF9hbnkoaWQsIGRzdF9hZGRyLT5zYV9mYW1pbHkpOworCWlmICghc3JjX2FkZHIgfHwgIXNyY19hZGRyLT5zYV9mYW1pbHkpIHsKKwkJc3JjX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopICZpZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwkJaWYgKChzcmNfYWRkci0+c2FfZmFtaWx5ID0gZHN0X2FkZHItPnNhX2ZhbWlseSkgPT0gQUZfSU5FVDYpIHsKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzcmNfYWRkciktPnNpbjZfc2NvcGVfaWQgPQorCQkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3RfYWRkciktPnNpbjZfc2NvcGVfaWQ7CisJCX0KKwl9CisJcmV0dXJuIHJkbWFfYmluZF9hZGRyKGlkLCBzcmNfYWRkcik7CiB9CiAKIGludCByZG1hX3Jlc29sdmVfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCkBAIC0yMDc3LDYgKzIwODAsMjUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGNtYV9jaGVja19saW5rbG9jYWwoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JUHY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuIDA7CisKKwlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcjsKKwlpZiAoKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkgJiYKKwkgICAgIXNpbjYtPnNpbjZfc2NvcGVfaWQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9hZGRyLT5ib3VuZF9kZXZfaWYgPSBzaW42LT5zaW42X3Njb3BlX2lkOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKIGludCByZG1hX2JpbmRfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OwpAQCAtMjA4OSw3ICsyMTExLDEzIEBACiAJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9JRExFLCBDTUFfQUREUl9CT1VORCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFjbWFfYW55X2FkZHIoYWRkcikpIHsKKwlyZXQgPSBjbWFfY2hlY2tfbGlua2xvY2FsKCZpZC0+cm91dGUuYWRkci5kZXZfYWRkciwgYWRkcik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCisJaWYgKGNtYV9sb29wYmFja19hZGRyKGFkZHIpKSB7CisJCXJldCA9IGNtYV9iaW5kX2xvb3BiYWNrKGlkX3ByaXYpOworCX0gZWxzZSBpZiAoIWNtYV96ZXJvX2FkZHIoYWRkcikpIHsKIAkJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoYWRkciwgJmlkLT5yb3V0ZS5hZGRyLmRldl9hZGRyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyMTsKQEAgLTIxMDgsNyArMjEzNiw3IEBACiAKIAlyZXR1cm4gMDsKIGVycjI6Ci0JaWYgKCFjbWFfYW55X2FkZHIoYWRkcikpIHsKKwlpZiAoaWRfcHJpdi0+Y21hX2RldikgewogCQltdXRleF9sb2NrKCZsb2NrKTsKIAkJY21hX2RldGFjaF9mcm9tX2RldihpZF9wcml2KTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKQEAgLTI2ODcsMTAgKzI3MTUsMTUgQEAKIAlpZiAoY21hX2FueV9hZGRyKGFkZHIpKSB7CiAJCW1lbXNldChtZ2lkLCAwLCBzaXplb2YgKm1naWQpOwogCX0gZWxzZSBpZiAoKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJICAgKChiZTMyX3RvX2NwdShzaW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzBdKSAmIDB4RkYxMEEwMUIpID09CisJCSAgICgoYmUzMl90b19jcHUoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlswXSkgJiAweEZGRjBGRkZGKSA9PQogCQkJCQkJCQkgMHhGRjEwQTAxQikpIHsKIAkJLyogSVB2NiBhZGRyZXNzIGlzIGFuIFNBIGFzc2lnbmVkIE1HSUQuICovCiAJCW1lbWNweShtZ2lkLCAmc2luNi0+c2luNl9hZGRyLCBzaXplb2YgKm1naWQpOworCX0gZWxzZSBpZiAoKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikpIHsKKwkJaXB2Nl9pYl9tY19tYXAoJnNpbjYtPnNpbjZfYWRkciwgZGV2X2FkZHItPmJyb2FkY2FzdCwgbWNfbWFwKTsKKwkJaWYgKGlkX3ByaXYtPmlkLnBzID09IFJETUFfUFNfVURQKQorCQkJbWNfbWFwWzddID0gMHgwMTsJLyogVXNlIFJETUEgQ00gc2lnbmF0dXJlICovCisJCSptZ2lkID0gKih1bmlvbiBpYl9naWQgKikgKG1jX21hcCArIDQpOwogCX0gZWxzZSB7CiAJCWlwX2liX21jX21hcChzaW4tPnNpbl9hZGRyLnNfYWRkciwgZGV2X2FkZHItPmJyb2FkY2FzdCwgbWNfbWFwKTsKIAkJaWYgKGlkX3ByaXYtPmlkLnBzID09IFJETUFfUFNfVURQKQpAQCAtMjcxNiw3ICsyNzQ5LDcgQEAKIAljbWFfc2V0X21naWQoaWRfcHJpdiwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbWMtPmFkZHIsICZyZWMubWdpZCk7CiAJaWYgKGlkX3ByaXYtPmlkLnBzID09IFJETUFfUFNfVURQKQogCQlyZWMucWtleSA9IGNwdV90b19iZTMyKFJETUFfVURQX1FLRVkpOwotCWliX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICZyZWMucG9ydF9naWQpOworCXJkbWFfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgJnJlYy5wb3J0X2dpZCk7CiAJcmVjLnBrZXkgPSBjcHVfdG9fYmUxNihpYl9hZGRyX2dldF9wa2V5KGRldl9hZGRyKSk7CiAJcmVjLmpvaW5fc3RhdGUgPSAxOwogCkBAIC0yODE1LDcgKzI4NDgsNyBAQAogCiAJZGV2X2FkZHIgPSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkcjsKIAotCWlmICgoZGV2X2FkZHItPnNyY19kZXYgPT0gbmRldikgJiYKKwlpZiAoKGRldl9hZGRyLT5ib3VuZF9kZXZfaWYgPT0gbmRldi0+aWZpbmRleCkgJiYKIAkgICAgbWVtY21wKGRldl9hZGRyLT5zcmNfZGV2X2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5hZGRyX2xlbikpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUkRNQSBDTSBhZGRyIGNoYW5nZSBmb3IgbmRldiAlcyB1c2VkIGJ5IGlkICVwXG4iLAogCQkgICAgICAgbmRldi0+bmFtZSwgJmlkX3ByaXYtPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IDgyNTQzNzEuLjdlMWZmZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTYwNCw2ICs2MDQsMTIgQEAKIAlyZXR1cm4gcmV0ID8gcmV0IDogaWQ7CiB9CiAKK3ZvaWQgaWJfc2FfdW5wYWNrX3BhdGgodm9pZCAqYXR0cmlidXRlLCBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnJlYykKK3sKKwlpYl91bnBhY2socGF0aF9yZWNfdGFibGUsIEFSUkFZX1NJWkUocGF0aF9yZWNfdGFibGUpLCBhdHRyaWJ1dGUsIHJlYyk7Cit9CitFWFBPUlRfU1lNQk9MKGliX3NhX3VucGFja19wYXRoKTsKKwogc3RhdGljIHZvaWQgaWJfc2FfcGF0aF9yZWNfY2FsbGJhY2soc3RydWN0IGliX3NhX3F1ZXJ5ICpzYV9xdWVyeSwKIAkJCQkgICAgaW50IHN0YXR1cywKIAkJCQkgICAgc3RydWN0IGliX3NhX21hZCAqbWFkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCmluZGV4IGJiOTZkM2MuLmIyZTE2YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxyZG1hL3JkbWFfdXNlcl9jbS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfbWFyc2hhbGwuaD4KICNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY21faWIuaD4KIAogTU9EVUxFX0FVVEhPUigiU2VhbiBIZWZ0eSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSRE1BIFVzZXJzcGFjZSBDb25uZWN0aW9uIE1hbmFnZXIgQWNjZXNzIik7CkBAIC01NjIsMTAgKzU2MywxMCBAQAogCXN3aXRjaCAocm91dGUtPm51bV9wYXRocykgewogCWNhc2UgMDoKIAkJZGV2X2FkZHIgPSAmcm91dGUtPmFkZHIuZGV2X2FkZHI7Ci0JCWliX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsCi0JCQkJICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLmRnaWQpOwotCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLAotCQkJCSAodW5pb24gaWJfZ2lkICopICZyZXNwLT5pYl9yb3V0ZVswXS5zZ2lkKTsKKwkJcmRtYV9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLAorCQkJCSAgICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLmRnaWQpOworCQlyZG1hX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsCisJCQkJICAgKHVuaW9uIGliX2dpZCAqKSAmcmVzcC0+aWJfcm91dGVbMF0uc2dpZCk7CiAJCXJlc3AtPmliX3JvdXRlWzBdLnBrZXkgPSBjcHVfdG9fYmUxNihpYl9hZGRyX2dldF9wa2V5KGRldl9hZGRyKSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTgxMiw2ICs4MTMsNTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHVjbWFfc2V0X2liX3BhdGgoc3RydWN0IHVjbWFfY29udGV4dCAqY3R4LAorCQkJICAgIHN0cnVjdCBpYl9wYXRoX3JlY19kYXRhICpwYXRoX2RhdGEsIHNpemVfdCBvcHRsZW4pCit7CisJc3RydWN0IGliX3NhX3BhdGhfcmVjIHNhX3BhdGg7CisJc3RydWN0IHJkbWFfY21fZXZlbnQgZXZlbnQ7CisJaW50IHJldDsKKworCWlmIChvcHRsZW4gJSBzaXplb2YoKnBhdGhfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yICg7IG9wdGxlbjsgb3B0bGVuIC09IHNpemVvZigqcGF0aF9kYXRhKSwgcGF0aF9kYXRhKyspIHsKKwkJaWYgKHBhdGhfZGF0YS0+ZmxhZ3MgPT0gKElCX1BBVEhfR01QIHwgSUJfUEFUSF9QUklNQVJZIHwKKwkJCQkJIElCX1BBVEhfQklESVJFQ1RJT05BTCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIW9wdGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpYl9zYV91bnBhY2tfcGF0aChwYXRoX2RhdGEtPnBhdGhfcmVjLCAmc2FfcGF0aCk7CisJcmV0ID0gcmRtYV9zZXRfaWJfcGF0aHMoY3R4LT5jbV9pZCwgJnNhX3BhdGgsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOworCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9ST1VURV9SRVNPTFZFRDsKKwlyZXR1cm4gdWNtYV9ldmVudF9oYW5kbGVyKGN0eC0+Y21faWQsICZldmVudCk7Cit9CisKK3N0YXRpYyBpbnQgdWNtYV9zZXRfb3B0aW9uX2liKHN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eCwgaW50IG9wdG5hbWUsCisJCQkgICAgICB2b2lkICpvcHR2YWwsIHNpemVfdCBvcHRsZW4pCit7CisJaW50IHJldDsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgUkRNQV9PUFRJT05fSUJfUEFUSDoKKwkJcmV0ID0gdWNtYV9zZXRfaWJfcGF0aChjdHgsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHVjbWFfc2V0X29wdGlvbl9sZXZlbChzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHgsIGludCBsZXZlbCwKIAkJCQkgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9wdGxlbikKIHsKQEAgLTgyMSw2ICs4NjcsOSBAQAogCWNhc2UgUkRNQV9PUFRJT05fSUQ6CiAJCXJldCA9IHVjbWFfc2V0X29wdGlvbl9pZChjdHgsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIAkJYnJlYWs7CisJY2FzZSBSRE1BX09QVElPTl9JQjoKKwkJcmV0ID0gdWNtYV9zZXRfb3B0aW9uX2liKGN0eCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PU1lTOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCA1NmZlYWI2Li4xMTJkMzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAogCXVjb250ZXh0ID0gaWJkZXYtPmFsbG9jX3Vjb250ZXh0KGliZGV2LCAmdWRhdGEpOwogCWlmIChJU19FUlIodWNvbnRleHQpKSB7Ci0JCXJldCA9IFBUUl9FUlIoZmlsZS0+dWNvbnRleHQpOworCQlyZXQgPSBQVFJfRVJSKHVjb250ZXh0KTsKIAkJZ290byBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBhZWMwZmJkLi41ZjI4NGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTQ5Miw2ICs0OTIsNyBAQAogCQkJCQlpbnQgaXNfYXN5bmMsIGludCAqZmQpCiB7CiAJc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlICpldl9maWxlOworCXN0cnVjdCBwYXRoIHBhdGg7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJaW50IHJldDsKIApAQCAtNTE5LDggKzUyMCwxMCBAQAogCSAqIHN5c3RlbSBjYWxsIG9uIGEgdXZlcmJzIGZpbGUsIHdoaWNoIHdpbGwgYWxyZWFkeSBoYXZlIGEKIAkgKiBtb2R1bGUgcmVmZXJlbmNlLgogCSAqLwotCWZpbHAgPSBhbGxvY19maWxlKHV2ZXJic19ldmVudF9tbnQsIGRnZXQodXZlcmJzX2V2ZW50X21udC0+bW50X3Jvb3QpLAotCQkJICBGTU9ERV9SRUFELCBmb3BzX2dldCgmdXZlcmJzX2V2ZW50X2ZvcHMpKTsKKwlwYXRoLm1udCA9IHV2ZXJic19ldmVudF9tbnQ7CisJcGF0aC5kZW50cnkgPSB1dmVyYnNfZXZlbnRfbW50LT5tbnRfcm9vdDsKKwlwYXRoX2dldCgmcGF0aCk7CisJZmlscCA9IGFsbG9jX2ZpbGUoJnBhdGgsIEZNT0RFX1JFQUQsIGZvcHNfZ2V0KCZ1dmVyYnNfZXZlbnRfZm9wcykpOwogCWlmICghZmlscCkgewogCQlyZXQgPSAtRU5GSUxFOwogCQlnb3RvIGVycl9mZDsKQEAgLTUzMSw2ICs1MzQsOCBAQAogCXJldHVybiBmaWxwOwogCiBlcnJfZmQ6CisJZm9wc19wdXQoJnV2ZXJic19ldmVudF9mb3BzKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAJcHV0X3VudXNlZF9mZCgqZmQpOwogCiBlcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCmluZGV4IGE2ZDg5NDQuLmFkNTE4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCkBAIC03OTgsOCArNzk4LDEwIEBACiAJdTggYWN0dWFsX3NnZV9jb3VudDsKIAl1MzIgbXNnX3NpemU7CiAKLQlpZiAocXAtPnN0YXRlID4gSUJfUVBTX1JUUykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHFwLT5zdGF0ZSA+IElCX1FQU19SVFMpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCiAJd2hpbGUgKGliX3dyKSB7CiAKQEAgLTkzMCw2ICs5MzIsNyBAQAogCQlpYl93ciA9IGliX3dyLT5uZXh0OwogCX0KIAorb3V0OgogCWlmIChlcnIpCiAJCSpiYWRfd3IgPSBpYl93cjsKIAlyZXR1cm4gZXJyOwpAQCAtOTQ0LDggKzk0NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChxcC0+c3RhdGUgPiBJQl9RUFNfUlRTKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocXAtPnN0YXRlID4gSUJfUVBTX1JUUykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKgogCSAqIFRyeSBhbmQgcG9zdCBlYWNoIHdvcmsgcmVxdWVzdApAQCAtOTk4LDYgKzEwMDMsNyBAQAogCQlpYl93ciA9IGliX3dyLT5uZXh0OwogCX0KIAorb3V0OgogCWlmIChlcnIpCiAJCSpiYWRfd3IgPSBpYl93cjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAppbmRleCBiZmQwM2JmLi5mM2Q0NDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KIAogI2luY2x1ZGUgInQzX2NwbC5oIgogI2luY2x1ZGUgInQzY2Rldi5oIgpAQCAtNzUsMTMgKzc2LDEzIEBACiB9OwogCiBzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgewotCXN0cnVjdCBrZmlmbyAqdHB0X2ZpZm87CisJc3RydWN0IGtmaWZvIHRwdF9maWZvOwogCXNwaW5sb2NrX3QgdHB0X2ZpZm9fbG9jazsKLQlzdHJ1Y3Qga2ZpZm8gKnFwaWRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gcXBpZF9maWZvOwogCXNwaW5sb2NrX3QgcXBpZF9maWZvX2xvY2s7Ci0Jc3RydWN0IGtmaWZvICpjcWlkX2ZpZm87CisJc3RydWN0IGtmaWZvIGNxaWRfZmlmbzsKIAlzcGlubG9ja190IGNxaWRfZmlmb19sb2NrOwotCXN0cnVjdCBrZmlmbyAqcGRpZF9maWZvOworCXN0cnVjdCBrZmlmbyBwZGlkX2ZpZm87CiAJc3BpbmxvY2tfdCBwZGlkX2ZpZm9fbG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jCmluZGV4IGJkMjMzYzAuLjMxZjkyMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYwpAQCAtMzksMTIgKzM5LDEyIEBACiAjaW5jbHVkZSAiY3hpb19yZXNvdXJjZS5oIgogI2luY2x1ZGUgImN4aW9faGFsLmgiCiAKLXN0YXRpYyBzdHJ1Y3Qga2ZpZm8gKnJoZGxfZmlmbzsKK3N0YXRpYyBzdHJ1Y3Qga2ZpZm8gcmhkbF9maWZvOwogc3RhdGljIHNwaW5sb2NrX3QgcmhkbF9maWZvX2xvY2s7CiAKICNkZWZpbmUgUkFORE9NX1NJWkUgMTYKIAotc3RhdGljIGludCBfX2N4aW9faW5pdF9yZXNvdXJjZV9maWZvKHN0cnVjdCBrZmlmbyAqKmZpZm8sCitzdGF0aWMgaW50IF9fY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICpmaWZvLAogCQkJCSAgIHNwaW5sb2NrX3QgKmZpZm9fbG9jaywKIAkJCQkgICB1MzIgbnIsIHUzMiBza2lwX2xvdywKIAkJCQkgICB1MzIgc2tpcF9oaWdoLApAQCAtNTUsMTIgKzU1LDExIEBACiAJdTMyIHJhcnJheVsxNl07CiAJc3Bpbl9sb2NrX2luaXQoZmlmb19sb2NrKTsKIAotCSpmaWZvID0ga2ZpZm9fYWxsb2MobnIgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCwgZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKCpmaWZvKSkKKwlpZiAoa2ZpZm9fYWxsb2MoZmlmbywgbnIgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpID0gMDsgaSA8IHNraXBfbG93ICsgc2tpcF9oaWdoOyBpKyspCi0JCV9fa2ZpZm9fcHV0KCpmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKTsKKwkJa2ZpZm9faW4oZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSk7CiAJaWYgKHJhbmRvbSkgewogCQlqID0gMDsKIAkJcmFuZG9tX2J5dGVzID0gcmFuZG9tMzIoKTsKQEAgLTcyLDMzICs3MSwzNSBAQAogCQkJCXJhbmRvbV9ieXRlcyA9IHJhbmRvbTMyKCk7CiAJCQl9CiAJCQlpZHggPSAocmFuZG9tX2J5dGVzID4+IChqICogMikpICYgMHhGOwotCQkJX19rZmlmb19wdXQoKmZpZm8sCisJCQlrZmlmb19pbihmaWZvLAogCQkJCSh1bnNpZ25lZCBjaGFyICopICZyYXJyYXlbaWR4XSwKIAkJCQlzaXplb2YodTMyKSk7CiAJCQlyYXJyYXlbaWR4XSA9IGk7CiAJCQlqKys7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IFJBTkRPTV9TSVpFOyBpKyspCi0JCQlfX2tmaWZvX3B1dCgqZmlmbywKKwkJCWtmaWZvX2luKGZpZm8sCiAJCQkJKHVuc2lnbmVkIGNoYXIgKikgJnJhcnJheVtpXSwKIAkJCQlzaXplb2YodTMyKSk7CiAJfSBlbHNlCiAJCWZvciAoaSA9IHNraXBfbG93OyBpIDwgbnIgLSBza2lwX2hpZ2g7IGkrKykKLQkJCV9fa2ZpZm9fcHV0KCpmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmaSwgc2l6ZW9mKHUzMikpOworCQkJa2ZpZm9faW4oZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmksIHNpemVvZih1MzIpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBza2lwX2xvdyArIHNraXBfaGlnaDsgaSsrKQotCQlrZmlmb19nZXQoKmZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMikpOworCQlpZiAoa2ZpZm9fb3V0X2xvY2tlZChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksCisJCQkJc2l6ZW9mKHUzMiksIGZpZm9fbG9jaykgIT0gc2l6ZW9mKHUzMikpCisJCQkJCWJyZWFrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4aW9faW5pdF9yZXNvdXJjZV9maWZvKHN0cnVjdCBrZmlmbyAqKmZpZm8sIHNwaW5sb2NrX3QgKiBmaWZvX2xvY2ssCitzdGF0aWMgaW50IGN4aW9faW5pdF9yZXNvdXJjZV9maWZvKHN0cnVjdCBrZmlmbyAqZmlmbywgc3BpbmxvY2tfdCAqIGZpZm9fbG9jaywKIAkJCQkgICB1MzIgbnIsIHUzMiBza2lwX2xvdywgdTMyIHNraXBfaGlnaCkKIHsKIAlyZXR1cm4gKF9fY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oZmlmbywgZmlmb19sb2NrLCBuciwgc2tpcF9sb3csCiAJCQkJCSAgc2tpcF9oaWdoLCAwKSk7CiB9CiAKLXN0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm9fcmFuZG9tKHN0cnVjdCBrZmlmbyAqKmZpZm8sCitzdGF0aWMgaW50IGN4aW9faW5pdF9yZXNvdXJjZV9maWZvX3JhbmRvbShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCiAJCQkJICAgc3BpbmxvY2tfdCAqIGZpZm9fbG9jaywKIAkJCQkgICB1MzIgbnIsIHUzMiBza2lwX2xvdywgdTMyIHNraXBfaGlnaCkKIHsKQEAgLTExMywxNSArMTE0LDEzIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcmRldl9wLT5yc2NwLT5xcGlkX2ZpZm9fbG9jayk7CiAKLQlyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbyA9IGtmaWZvX2FsbG9jKFQzX01BWF9OVU1fUVAgKiBzaXplb2YodTMyKSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCwKLQkJCQkJICAgICAgJnJkZXZfcC0+cnNjcC0+cXBpZF9maWZvX2xvY2spOwotCWlmIChJU19FUlIocmRldl9wLT5yc2NwLT5xcGlkX2ZpZm8pKQorCWlmIChrZmlmb19hbGxvYygmcmRldl9wLT5yc2NwLT5xcGlkX2ZpZm8sIFQzX01BWF9OVU1fUVAgKiBzaXplb2YodTMyKSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpID0gMTY7IGkgPCBUM19NQVhfTlVNX1FQOyBpKyspCiAJCWlmICghKGkgJiByZGV2X3AtPnFwbWFzaykpCi0JCQlfX2tmaWZvX3B1dChyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbywKKwkJCWtmaWZvX2luKCZyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbywKIAkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikgJmksIHNpemVvZih1MzIpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNCw3ICsxMzMsNyBAQAogCiB2b2lkIGN4aW9faGFsX2Rlc3Ryb3lfcmhkbF9yZXNvdXJjZSh2b2lkKQogewotCWtmaWZvX2ZyZWUocmhkbF9maWZvKTsKKwlrZmlmb19mcmVlKCZyaGRsX2ZpZm8pOwogfQogCiAvKiBucl8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwpAQCAtMTY3LDExICsxNjYsMTEgQEAKIAkJZ290byBwZGlkX2VycjsKIAlyZXR1cm4gMDsKIHBkaWRfZXJyOgotCWtmaWZvX2ZyZWUocnNjcC0+Y3FpZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT5jcWlkX2ZpZm8pOwogY3FpZF9lcnI6Ci0Ja2ZpZm9fZnJlZShyc2NwLT5xcGlkX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPnFwaWRfZmlmbyk7CiBxcGlkX2VycjoKLQlrZmlmb19mcmVlKHJzY3AtPnRwdF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT50cHRfZmlmbyk7CiB0cHRfZXJyOgogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMTc5LDMzICsxNzgsMzcgQEAKIC8qCiAgKiByZXR1cm5zIDAgaWYgbm8gcmVzb3VyY2UgYXZhaWxhYmxlCiAgKi8KLXN0YXRpYyB1MzIgY3hpb19oYWxfZ2V0X3Jlc291cmNlKHN0cnVjdCBrZmlmbyAqZmlmbykKK3N0YXRpYyB1MzIgY3hpb19oYWxfZ2V0X3Jlc291cmNlKHN0cnVjdCBrZmlmbyAqZmlmbywgc3BpbmxvY2tfdCAqIGxvY2spCiB7CiAJdTMyIGVudHJ5OwotCWlmIChrZmlmb19nZXQoZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSkpCisJaWYgKGtmaWZvX291dF9sb2NrZWQoZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSwgbG9jaykpCiAJCXJldHVybiBlbnRyeTsKIAllbHNlCiAJCXJldHVybiAwOwkvKiBmaWZvIGVtcHRyeSAqLwogfQogCi1zdGF0aWMgdm9pZCBjeGlvX2hhbF9wdXRfcmVzb3VyY2Uoc3RydWN0IGtmaWZvICpmaWZvLCB1MzIgZW50cnkpCitzdGF0aWMgdm9pZCBjeGlvX2hhbF9wdXRfcmVzb3VyY2Uoc3RydWN0IGtmaWZvICpmaWZvLCBzcGlubG9ja190ICogbG9jaywKKwkJdTMyIGVudHJ5KQogewotCUJVR19PTihrZmlmb19wdXQoZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSkgPT0gMCk7CisJQlVHX09OKAorCWtmaWZvX2luX2xvY2tlZChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpLCBsb2NrKQorCT09IDApOwogfQogCiB1MzIgY3hpb19oYWxfZ2V0X3N0YWcoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UocnNjcC0+dHB0X2ZpZm8pOworCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UoJnJzY3AtPnRwdF9maWZvLCAmcnNjcC0+dHB0X2ZpZm9fbG9jayk7CiB9CiAKIHZvaWQgY3hpb19oYWxfcHV0X3N0YWcoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwLCB1MzIgc3RhZykKIHsKLQljeGlvX2hhbF9wdXRfcmVzb3VyY2UocnNjcC0+dHB0X2ZpZm8sIHN0YWcpOworCWN4aW9faGFsX3B1dF9yZXNvdXJjZSgmcnNjcC0+dHB0X2ZpZm8sICZyc2NwLT50cHRfZmlmb19sb2NrLCBzdGFnKTsKIH0KIAogdTMyIGN4aW9faGFsX2dldF9xcGlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCkKIHsKLQl1MzIgcXBpZCA9IGN4aW9faGFsX2dldF9yZXNvdXJjZShyc2NwLT5xcGlkX2ZpZm8pOworCXUzMiBxcGlkID0gY3hpb19oYWxfZ2V0X3Jlc291cmNlKCZyc2NwLT5xcGlkX2ZpZm8sCisJCQkmcnNjcC0+cXBpZF9maWZvX2xvY2spOwogCVBEQkcoIiVzIHFwaWQgMHgleFxuIiwgX19mdW5jX18sIHFwaWQpOwogCXJldHVybiBxcGlkOwogfQpAQCAtMjEzLDM1ICsyMTYsMzUgQEAKIHZvaWQgY3hpb19oYWxfcHV0X3FwaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwLCB1MzIgcXBpZCkKIHsKIAlQREJHKCIlcyBxcGlkIDB4JXhcbiIsIF9fZnVuY19fLCBxcGlkKTsKLQljeGlvX2hhbF9wdXRfcmVzb3VyY2UocnNjcC0+cXBpZF9maWZvLCBxcGlkKTsKKwljeGlvX2hhbF9wdXRfcmVzb3VyY2UoJnJzY3AtPnFwaWRfZmlmbywgJnJzY3AtPnFwaWRfZmlmb19sb2NrLCBxcGlkKTsKIH0KIAogdTMyIGN4aW9faGFsX2dldF9jcWlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCkKIHsKLQlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKHJzY3AtPmNxaWRfZmlmbyk7CisJcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZSgmcnNjcC0+Y3FpZF9maWZvLCAmcnNjcC0+Y3FpZF9maWZvX2xvY2spOwogfQogCiB2b2lkIGN4aW9faGFsX3B1dF9jcWlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCwgdTMyIGNxaWQpCiB7Ci0JY3hpb19oYWxfcHV0X3Jlc291cmNlKHJzY3AtPmNxaWRfZmlmbywgY3FpZCk7CisJY3hpb19oYWxfcHV0X3Jlc291cmNlKCZyc2NwLT5jcWlkX2ZpZm8sICZyc2NwLT5jcWlkX2ZpZm9fbG9jaywgY3FpZCk7CiB9CiAKIHUzMiBjeGlvX2hhbF9nZXRfcGRpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0JcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZShyc2NwLT5wZGlkX2ZpZm8pOworCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UoJnJzY3AtPnBkaWRfZmlmbywgJnJzY3AtPnBkaWRfZmlmb19sb2NrKTsKIH0KIAogdm9pZCBjeGlvX2hhbF9wdXRfcGRpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3AsIHUzMiBwZGlkKQogewotCWN4aW9faGFsX3B1dF9yZXNvdXJjZShyc2NwLT5wZGlkX2ZpZm8sIHBkaWQpOworCWN4aW9faGFsX3B1dF9yZXNvdXJjZSgmcnNjcC0+cGRpZF9maWZvLCAmcnNjcC0+cGRpZF9maWZvX2xvY2ssIHBkaWQpOwogfQogCiB2b2lkIGN4aW9faGFsX2Rlc3Ryb3lfcmVzb3VyY2Uoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCWtmaWZvX2ZyZWUocnNjcC0+dHB0X2ZpZm8pOwotCWtmaWZvX2ZyZWUocnNjcC0+Y3FpZF9maWZvKTsKLQlrZmlmb19mcmVlKHJzY3AtPnFwaWRfZmlmbyk7Ci0Ja2ZpZm9fZnJlZShyc2NwLT5wZGlkX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPnRwdF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT5jcWlkX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPnFwaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+cGRpZF9maWZvKTsKIAlrZnJlZShyc2NwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKaW5kZXggNjZiNDEzNS4uZDk0Mzg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCkBAIC0xMzcxLDE1ICsxMzcxLDggQEAKIAl0aW0ubWFjX2FkZHIgPSByZXEtPmRzdF9tYWM7CiAJdGltLnZsYW5fdGFnID0gbnRvaHMocmVxLT52bGFuX3RhZyk7CiAJaWYgKHRkZXYtPmN0bCh0ZGV2LCBHRVRfSUZGX0ZST01fTUFDLCAmdGltKSA8IDAgfHwgIXRpbS5kZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXMgYmFkIGRzdCBtYWMgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCXJlcS0+ZHN0X21hY1swXSwKLQkJCXJlcS0+ZHN0X21hY1sxXSwKLQkJCXJlcS0+ZHN0X21hY1syXSwKLQkJCXJlcS0+ZHN0X21hY1szXSwKLQkJCXJlcS0+ZHN0X21hY1s0XSwKLQkJCXJlcS0+ZHN0X21hY1s1XSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgYmFkIGRzdCBtYWMgJXBNXG4iLAorCQkJX19mdW5jX18sIHJlcS0+ZHN0X21hYyk7CiAJCWdvdG8gcmVqZWN0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKaW5kZXggMWNlY2Y5OC4uM2ViOGNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCkBAIC0zNjUsMTggKzM2NSwxOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZxaHAtPmxvY2ssIGZsYWcpOwogCWlmIChxaHAtPmF0dHIuc3RhdGUgPiBJV0NIX1FQX1NUQVRFX1JUUykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxaHAtPmxvY2ssIGZsYWcpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCW51bV93cnMgPSBRX0ZSRUVDTlQocWhwLT53cS5zcV9ycHRyLCBxaHAtPndxLnNxX3dwdHIsCiAJCSAgcWhwLT53cS5zcV9zaXplX2xvZzIpOwogCWlmIChudW1fd3JzIDw9IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWhwLT5sb2NrLCBmbGFnKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KIAl3aGlsZSAod3IpIHsKIAkJaWYgKG51bV93cnMgPT0gMCkgewogCQkJZXJyID0gLUVOT01FTTsKLQkJCSpiYWRfd3IgPSB3cjsKIAkJCWJyZWFrOwogCQl9CiAJCWlkeCA9IFFfUFRSMklEWChxaHAtPndxLndwdHIsIHFocC0+d3Euc2l6ZV9sb2cyKTsKQEAgLTQyOCwxMCArNDI5LDggQEAKIAkJCSAgICAgd3ItPm9wY29kZSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQl9Ci0JCWlmIChlcnIpIHsKLQkJCSpiYWRfd3IgPSB3cjsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwotCQl9CiAJCXdxZS0+c2VuZC53cmlkLmlkMC5oaSA9IHFocC0+d3Euc3Ffd3B0cjsKIAkJc3FwLT53cl9pZCA9IHdyLT53cl9pZDsKIAkJc3FwLT5vcGNvZGUgPSB3cjJvcGNvZGUodDNfd3Jfb3Bjb2RlKTsKQEAgLTQ1NCw2ICs0NTMsMTAgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWhwLT5sb2NrLCBmbGFnKTsKIAlyaW5nX2Rvb3JiZWxsKHFocC0+d3EuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CisKK291dDoKKwlpZiAoZXJyKQorCQkqYmFkX3dyID0gd3I7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDcxLDE4ICs0NzQsMTkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcWhwLT5sb2NrLCBmbGFnKTsKIAlpZiAocWhwLT5hdHRyLnN0YXRlID4gSVdDSF9RUF9TVEFURV9SVFMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWhwLT5sb2NrLCBmbGFnKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAludW1fd3JzID0gUV9GUkVFQ05UKHFocC0+d3EucnFfcnB0ciwgcWhwLT53cS5ycV93cHRyLAogCQkJICAgIHFocC0+d3EucnFfc2l6ZV9sb2cyKSAtIDE7CiAJaWYgKCF3cikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxaHAtPmxvY2ssIGZsYWcpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCXdoaWxlICh3cikgewogCQlpZiAod3ItPm51bV9zZ2UgPiBUM19NQVhfU0dFKSB7CiAJCQllcnIgPSAtRUlOVkFMOwotCQkJKmJhZF93ciA9IHdyOwogCQkJYnJlYWs7CiAJCX0KIAkJaWR4ID0gUV9QVFIySURYKHFocC0+d3Eud3B0ciwgcWhwLT53cS5zaXplX2xvZzIpOwpAQCAtNDk0LDEwICs0OTgsMTAgQEAKIAkJCQllcnIgPSBidWlsZF96ZXJvX3N0YWdfcmVjdihxaHAsIHdxZSwgd3IpOwogCQllbHNlCiAJCQllcnIgPSAtRU5PTUVNOwotCQlpZiAoZXJyKSB7Ci0JCQkqYmFkX3dyID0gd3I7CisKKwkJaWYgKGVycikKIAkJCWJyZWFrOwotCQl9CisKIAkJYnVpbGRfZndfcml3cmgoKHZvaWQgKikgd3FlLCBUM19XUl9SQ1YsIFQzX0NPTVBMRVRJT05fRkxBRywKIAkJCSAgICAgICBRX0dFTkJJVChxaHAtPndxLndwdHIsIHFocC0+d3Euc2l6ZV9sb2cyKSwKIAkJCSAgICAgICAwLCBzaXplb2Yoc3RydWN0IHQzX3JlY2VpdmVfd3IpID4+IDMsIFQzX1NPUEVPUCk7CkBAIC01MTEsNiArNTE1LDEwIEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFocC0+bG9jaywgZmxhZyk7CiAJcmluZ19kb29yYmVsbChxaHAtPndxLmRvb3JiZWxsLCBxaHAtPndxLnFwaWQpOworCitvdXQ6CisJaWYgKGVycikKKwkJKmJhZF93ciA9IHdyOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY2xhc3Nlcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKaW5kZXggYzgyNTE0Mi4uMDEzNmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKQEAgLTM3NSw2ICszNzUsNyBAQAogZXh0ZXJuIHJ3bG9ja190IGVoY2FfY3FfaWRyX2xvY2s7CiBleHRlcm4gc3RydWN0IGlkciBlaGNhX3FwX2lkcjsKIGV4dGVybiBzdHJ1Y3QgaWRyIGVoY2FfY3FfaWRyOworZXh0ZXJuIHNwaW5sb2NrX3Qgc2hjYV9saXN0X2xvY2s7CiAKIGV4dGVybiBpbnQgZWhjYV9zdGF0aWNfcmF0ZTsKIGV4dGVybiBpbnQgZWhjYV9wb3J0X2FjdF90aW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9lcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9lcS5jCmluZGV4IDUyM2U3MzMuLjNiODc1ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfZXEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2VxLmMKQEAgLTE2OSwxMiArMTY5LDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgaF9yZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CiAJaWJtZWJ1c19mcmVlX2lycShlcS0+aXN0LCAodm9pZCAqKXNoY2EpOwogCi0JaF9yZXQgPSBoaXB6X2hfZGVzdHJveV9lcShzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZXEpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzaGNhX2xpc3RfbG9jaywgZmxhZ3MpOworCWVxLT5pc19pbml0aWFsaXplZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hjYV9saXN0X2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVxLT5zcGlubG9jaywgZmxhZ3MpOworCXRhc2tsZXRfa2lsbCgmZXEtPmludGVycnVwdF90YXNrKTsKKworCWhfcmV0ID0gaGlwel9oX2Rlc3Ryb3lfZXEoc2hjYS0+aXB6X2hjYV9oYW5kbGUsIGVxKTsKIAogCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKIAkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGZyZWUgRVEgcmVzb3VyY2VzLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKaW5kZXggNGI4OWI3OS4uNDJiZTBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCkBAIC04MjYsOCArODI2LDcgQEAKIAkJY3EgPSBsaXN0X2VudHJ5KGNjdC0+Y3FfbGlzdC5uZXh0LCBzdHJ1Y3QgZWhjYV9jcSwgZW50cnkpOwogCiAJCWxpc3RfZGVsKCZjcS0+ZW50cnkpOwotCQlfX3F1ZXVlX2NvbXBfdGFzayhjcSwgcGVyX2NwdV9wdHIocG9vbC0+Y3B1X2NvbXBfdGFza3MsCi0JCQkJCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSkpOworCQlfX3F1ZXVlX2NvbXBfdGFzayhjcSwgdGhpc19jcHVfcHRyKHBvb2wtPmNwdV9jb21wX3Rhc2tzKSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzX2NjdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCmluZGV4IGZiMmQ4M2MuLjEyOWE2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIERFRklORV9JRFIoZWhjYV9jcV9pZHIpOwogCiBzdGF0aWMgTElTVF9IRUFEKHNoY2FfbGlzdCk7IC8qIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgZWhjYXMgKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2hjYV9saXN0X2xvY2spOworREVGSU5FX1NQSU5MT0NLKHNoY2FfbGlzdF9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHBvbGxfZXFzX3RpbWVyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcmVxcy5jCmluZGV4IDhmZDg4Y2QuLmUzZWM3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcmVxcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcmVxcy5jCkBAIC00MDAsNyArNDAwLDYgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcG9zdF9vbmVfc2VuZChzdHJ1Y3QgZWhjYV9xcCAqbXlfcXAsCiAJCQkgc3RydWN0IGliX3NlbmRfd3IgKmN1cl9zZW5kX3dyLAotCQkJIHN0cnVjdCBpYl9zZW5kX3dyICoqYmFkX3NlbmRfd3IsCiAJCQkgaW50IGhpZGRlbikKIHsKIAlzdHJ1Y3QgZWhjYV93cWUgKndxZV9wOwpAQCAtNDEyLDggKzQxMSw2IEBACiAJd3FlX3AgPSBpcHpfcWVpdF9nZXRfaW5jKCZteV9xcC0+aXB6X3NxdWV1ZSk7CiAJaWYgKHVubGlrZWx5KCF3cWVfcCkpIHsKIAkJLyogdG9vIG1hbnkgcG9zdGVkIHdvcmsgcmVxdWVzdHM6IHF1ZXVlIG92ZXJmbG93ICovCi0JCWlmIChiYWRfc2VuZF93cikKLQkJCSpiYWRfc2VuZF93ciA9IGN1cl9zZW5kX3dyOwogCQllaGNhX2VycihteV9xcC0+aWJfcXAuZGV2aWNlLCAiVG9vIG1hbnkgcG9zdGVkIFdRRXMgIgogCQkJICJxcF9udW09JXgiLCBteV9xcC0+aWJfcXAucXBfbnVtKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MzMsOCArNDMwLDYgQEAKIAkgKi8KIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlteV9xcC0+aXB6X3NxdWV1ZS5jdXJyZW50X3Ffb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0OwotCQlpZiAoYmFkX3NlbmRfd3IpCi0JCQkqYmFkX3NlbmRfd3IgPSBjdXJfc2VuZF93cjsKIAkJZWhjYV9lcnIobXlfcXAtPmliX3FwLmRldmljZSwgIkNvdWxkIG5vdCB3cml0ZSBXUUUgIgogCQkJICJxcF9udW09JXgiLCBteV9xcC0+aWJfcXAucXBfbnVtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NDgsNyArNDQzLDYgQEAKIAkJICAgc3RydWN0IGliX3NlbmRfd3IgKipiYWRfc2VuZF93cikKIHsKIAlzdHJ1Y3QgZWhjYV9xcCAqbXlfcXAgPSBjb250YWluZXJfb2YocXAsIHN0cnVjdCBlaGNhX3FwLCBpYl9xcCk7Ci0Jc3RydWN0IGliX3NlbmRfd3IgKmN1cl9zZW5kX3dyOwogCWludCB3cWVfY250ID0gMDsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDU3LDcgKzQ1MSw4IEBACiAJaWYgKHVubGlrZWx5KG15X3FwLT5zdGF0ZSA8IElCX1FQU19SVFMpKSB7CiAJCWVoY2FfZXJyKHFwLT5kZXZpY2UsICJJbnZhbGlkIFFQIHN0YXRlICBxcF9zdGF0ZT0lZCBxcG49JXgiLAogCQkJIG15X3FwLT5zdGF0ZSwgcXAtPnFwX251bSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBMT0NLIHRoZSBRVUVVRSAqLwpAQCAtNDc2LDI0ICs0NzEsMjEgQEAKIAkJc3RydWN0IGliX3NlbmRfd3IgY2lyY193cjsKIAkJbWVtc2V0KCZjaXJjX3dyLCAwLCBzaXplb2YoY2lyY193cikpOwogCQljaXJjX3dyLm9wY29kZSA9IElCX1dSX1JETUFfUkVBRDsKLQkJcG9zdF9vbmVfc2VuZChteV9xcCwgJmNpcmNfd3IsIE5VTEwsIDEpOyAvKiBpZ25vcmUgcmV0Y29kZSAqLworCQlwb3N0X29uZV9zZW5kKG15X3FwLCAmY2lyY193ciwgMSk7IC8qIGlnbm9yZSByZXRjb2RlICovCiAJCXdxZV9jbnQrKzsKIAkJZWhjYV9kYmcocXAtPmRldmljZSwgInBvc3RlZCBjaXJjIHdyICBxcF9udW09JXgiLCBxcC0+cXBfbnVtKTsKIAkJbXlfcXAtPm1lc3NhZ2VfY291bnQgPSBteV9xcC0+cGFja2V0X2NvdW50ID0gMDsKIAl9CiAKIAkvKiBsb29wIHByb2Nlc3NlcyBsaXN0IG9mIHNlbmQgcmVxcyAqLwotCWZvciAoY3VyX3NlbmRfd3IgPSBzZW5kX3dyOyBjdXJfc2VuZF93ciAhPSBOVUxMOwotCSAgICAgY3VyX3NlbmRfd3IgPSBjdXJfc2VuZF93ci0+bmV4dCkgewotCQlyZXQgPSBwb3N0X29uZV9zZW5kKG15X3FwLCBjdXJfc2VuZF93ciwgYmFkX3NlbmRfd3IsIDApOworCXdoaWxlIChzZW5kX3dyKSB7CisJCXJldCA9IHBvc3Rfb25lX3NlbmQobXlfcXAsIHNlbmRfd3IsIDApOwogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJLyogaWYgb25lIG9yIG1vcmUgV1FFcyB3ZXJlIHN1Y2Nlc3NmdWwsIGRvbid0IGZhaWwgKi8KLQkJCWlmICh3cWVfY250KQotCQkJCXJldCA9IDA7CiAJCQlnb3RvIHBvc3Rfc2VuZF9leGl0MDsKIAkJfQogCQl3cWVfY250Kys7Ci0JfSAvKiBlb2YgZm9yIGN1cl9zZW5kX3dyICovCisJCXNlbmRfd3IgPSBzZW5kX3dyLT5uZXh0OworCX0KIAogcG9zdF9zZW5kX2V4aXQwOgogCWlvc3luYygpOyAvKiBzZXJpYWxpemUgR0FMIHJlZ2lzdGVyIGFjY2VzcyAqLwpAQCAtNTAzLDYgKzQ5NSwxMCBAQAogCQkJIG15X3FwLCBxcC0+cXBfbnVtLCB3cWVfY250LCByZXQpOwogCW15X3FwLT5tZXNzYWdlX2NvdW50ICs9IHdxZV9jbnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXlfcXAtPnNwaW5sb2NrX3MsIGZsYWdzKTsKKworb3V0OgorCWlmIChyZXQpCisJCSpiYWRfc2VuZF93ciA9IHNlbmRfd3I7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTExLDcgKzUwNyw2IEBACiAJCQkgICAgICBzdHJ1Y3QgaWJfcmVjdl93ciAqcmVjdl93ciwKIAkJCSAgICAgIHN0cnVjdCBpYl9yZWN2X3dyICoqYmFkX3JlY3Zfd3IpCiB7Ci0Jc3RydWN0IGliX3JlY3Zfd3IgKmN1cl9yZWN2X3dyOwogCXN0cnVjdCBlaGNhX3dxZSAqd3FlX3A7CiAJaW50IHdxZV9jbnQgPSAwOwogCWludCByZXQgPSAwOwpAQCAtNTIyLDI3ICs1MTcsMjMgQEAKIAlpZiAodW5saWtlbHkoIUhBU19SUShteV9xcCkpKSB7CiAJCWVoY2FfZXJyKGRldiwgIlFQIGhhcyBubyBSUSAgZWhjYV9xcD0lcCBxcF9udW09JXggZXh0X3R5cGU9JWQiLAogCQkJIG15X3FwLCBteV9xcC0+cmVhbF9xcF9udW0sIG15X3FwLT5leHRfdHlwZSk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBMT0NLIHRoZSBRVUVVRSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZteV9xcC0+c3BpbmxvY2tfciwgZmxhZ3MpOwogCi0JLyogbG9vcCBwcm9jZXNzZXMgbGlzdCBvZiBzZW5kIHJlcXMgKi8KLQlmb3IgKGN1cl9yZWN2X3dyID0gcmVjdl93cjsgY3VyX3JlY3Zfd3IgIT0gTlVMTDsKLQkgICAgIGN1cl9yZWN2X3dyID0gY3VyX3JlY3Zfd3ItPm5leHQpIHsKKwkvKiBsb29wIHByb2Nlc3NlcyBsaXN0IG9mIHJlY3YgcmVxcyAqLworCXdoaWxlIChyZWN2X3dyKSB7CiAJCXU2NCBzdGFydF9vZmZzZXQgPSBteV9xcC0+aXB6X3JxdWV1ZS5jdXJyZW50X3Ffb2Zmc2V0OwogCQkvKiBnZXQgcG9pbnRlciBuZXh0IHRvIGZyZWUgV1FFICovCiAJCXdxZV9wID0gaXB6X3FlaXRfZ2V0X2luYygmbXlfcXAtPmlwel9ycXVldWUpOwogCQlpZiAodW5saWtlbHkoIXdxZV9wKSkgewogCQkJLyogdG9vIG1hbnkgcG9zdGVkIHdvcmsgcmVxdWVzdHM6IHF1ZXVlIG92ZXJmbG93ICovCi0JCQlpZiAoYmFkX3JlY3Zfd3IpCi0JCQkJKmJhZF9yZWN2X3dyID0gY3VyX3JlY3Zfd3I7Ci0JCQlpZiAod3FlX2NudCA9PSAwKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQllaGNhX2VycihkZXYsICJUb28gbWFueSBwb3N0ZWQgV1FFcyAiCi0JCQkJCSAicXBfbnVtPSV4IiwgbXlfcXAtPnJlYWxfcXBfbnVtKTsKLQkJCX0KKwkJCXJldCA9IC1FTk9NRU07CisJCQllaGNhX2VycihkZXYsICJUb28gbWFueSBwb3N0ZWQgV1FFcyAiCisJCQkJInFwX251bT0leCIsIG15X3FwLT5yZWFsX3FwX251bSk7CiAJCQlnb3RvIHBvc3RfcmVjdl9leGl0MDsKIAkJfQogCQkvKgpAQCAtNTUyLDcgKzU0Myw3IEBACiAJCXJxX21hcF9pZHggPSBzdGFydF9vZmZzZXQgLyBteV9xcC0+aXB6X3JxdWV1ZS5xZV9zaXplOwogCiAJCS8qIHdyaXRlIGEgUkVDViBXUUUgaW50byB0aGUgUVVFVUUgKi8KLQkJcmV0ID0gZWhjYV93cml0ZV9yd3FlKCZteV9xcC0+aXB6X3JxdWV1ZSwgd3FlX3AsIGN1cl9yZWN2X3dyLAorCQlyZXQgPSBlaGNhX3dyaXRlX3J3cWUoJm15X3FwLT5pcHpfcnF1ZXVlLCB3cWVfcCwgcmVjdl93ciwKIAkJCQlycV9tYXBfaWR4KTsKIAkJLyoKIAkJICogaWYgc29tZXRoaW5nIGZhaWxlZCwKQEAgLTU2MCwyMiArNTUxLDIwIEBACiAJCSAqLwogCQlpZiAodW5saWtlbHkocmV0KSkgewogCQkJbXlfcXAtPmlwel9ycXVldWUuY3VycmVudF9xX29mZnNldCA9IHN0YXJ0X29mZnNldDsKLQkJCSpiYWRfcmVjdl93ciA9IGN1cl9yZWN2X3dyOwotCQkJaWYgKHdxZV9jbnQgPT0gMCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZWhjYV9lcnIoZGV2LCAiQ291bGQgbm90IHdyaXRlIFdRRSAiCi0JCQkJCSAicXBfbnVtPSV4IiwgbXlfcXAtPnJlYWxfcXBfbnVtKTsKLQkJCX0KKwkJCXJldCA9IC1FSU5WQUw7CisJCQllaGNhX2VycihkZXYsICJDb3VsZCBub3Qgd3JpdGUgV1FFICIKKwkJCQkicXBfbnVtPSV4IiwgbXlfcXAtPnJlYWxfcXBfbnVtKTsKIAkJCWdvdG8gcG9zdF9yZWN2X2V4aXQwOwogCQl9CiAKIAkJcW1hcF9lbnRyeSA9ICZteV9xcC0+cnFfbWFwLm1hcFtycV9tYXBfaWR4XTsKLQkJcW1hcF9lbnRyeS0+YXBwX3dyX2lkID0gZ2V0X2FwcF93cl9pZChjdXJfcmVjdl93ci0+d3JfaWQpOworCQlxbWFwX2VudHJ5LT5hcHBfd3JfaWQgPSBnZXRfYXBwX3dyX2lkKHJlY3Zfd3ItPndyX2lkKTsKIAkJcW1hcF9lbnRyeS0+cmVwb3J0ZWQgPSAwOwogCQlxbWFwX2VudHJ5LT5jcWVfcmVxID0gMTsKIAogCQl3cWVfY250Kys7Ci0JfSAvKiBlb2YgZm9yIGN1cl9yZWN2X3dyICovCisJCXJlY3Zfd3IgPSByZWN2X3dyLT5uZXh0OworCX0gLyogZW9mIGZvciByZWN2X3dyICovCiAKIHBvc3RfcmVjdl9leGl0MDoKIAlpb3N5bmMoKTsgLyogc2VyaWFsaXplIEdBTCByZWdpc3RlciBhY2Nlc3MgKi8KQEAgLTU4NCw2ICs1NzMsMTEgQEAKIAkgICAgZWhjYV9kYmcoZGV2LCAiZWhjYV9xcD0lcCBxcF9udW09JXggd3FlX2NudD0lZCByZXQ9JWkiLAogCQkgICAgIG15X3FwLCBteV9xcC0+cmVhbF9xcF9udW0sIHdxZV9jbnQsIHJldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXlfcXAtPnNwaW5sb2NrX3IsIGZsYWdzKTsKKworb3V0OgorCWlmIChyZXQpCisJCSpiYWRfcmVjdl93ciA9IHJlY3Zfd3I7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01OTcsNiArNTkxLDcgQEAKIAlpZiAodW5saWtlbHkobXlfcXAtPnN0YXRlID09IElCX1FQU19SRVNFVCkpIHsKIAkJZWhjYV9lcnIocXAtPmRldmljZSwgIkludmFsaWQgUVAgc3RhdGUgIHFwX3N0YXRlPSVkIHFwbj0leCIsCiAJCQkgbXlfcXAtPnN0YXRlLCBxcC0+cXBfbnVtKTsKKwkJKmJhZF9yZWN2X3dyID0gcmVjdl93cjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggMDEzZDEzODAuLmQyNzg3ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCkBAIC0xNjk3LDcgKzE2OTgsNyBAQAogCQkJICAgICAgdW5zaWduZWQgbGVuLCBpbnQgYXZhaWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBlbmQsIGNudCA9IDAsIG5leHQ7CisJdW5zaWduZWQgZW5kLCBjbnQgPSAwOwogCiAJLyogVGhlcmUgYXJlIHR3byBiaXRzIHBlciBzZW5kIGJ1ZmZlciAoYnVzeSBhbmQgZ2VuZXJhdGlvbikgKi8KIAlzdGFydCAqPSAyOwpAQCAtMTc0OCwxMiArMTc0OSw3IEBACiAKIAlpZiAoZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2gpIHsKIAkJZW5kID0gMiAqIChkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0ayk7Ci0JCW5leHQgPSBmaW5kX2ZpcnN0X2JpdChkZC0+aXBhdGhfcGlvYXZhaWxrZXJuZWwsIGVuZCk7Ci0JCXdoaWxlIChuZXh0IDwgZW5kKSB7Ci0JCQljbnQrKzsKLQkJCW5leHQgPSBmaW5kX25leHRfYml0KGRkLT5pcGF0aF9waW9hdmFpbGtlcm5lbCwgZW5kLAotCQkJCQluZXh0ICsgMSk7Ci0JCX0KKwkJY250ID0gYml0bWFwX3dlaWdodChkZC0+aXBhdGhfcGlvYXZhaWxrZXJuZWwsIGVuZCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX3Bpb2F2YWlsX2xvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCmluZGV4IDNjYjNmNDcuLmU1OTY1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyB8PSBJQl9ERVZJQ0VfVURfQVZfUE9SVF9FTkZPUkNFOwogCWlmIChkZXYtPmRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0lQT0lCX0NTVU0pCiAJCXByb3BzLT5kZXZpY2VfY2FwX2ZsYWdzIHw9IElCX0RFVklDRV9VRF9JUF9DU1VNOwotCWlmIChkZXYtPmRldi0+Y2Fwcy5tYXhfZ3NvX3N6KQorCWlmIChkZXYtPmRldi0+Y2Fwcy5tYXhfZ3NvX3N6ICYmIGRldi0+ZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfQkxIKQogCQlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyB8PSBJQl9ERVZJQ0VfVURfVFNPOwogCWlmIChkZXYtPmRldi0+Y2Fwcy5ibW1lX2ZsYWdzICYgTUxYNF9CTU1FX0ZMQUdfUkVTRVJWRURfTEtFWSkKIAkJcHJvcHMtPmRldmljZV9jYXBfZmxhZ3MgfD0gSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKaW5kZXggMjU2YTAwYy4uOTg5NTU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCkBAIC01NCw3ICs1NCw4IEBACiAJLyoKIAkgKiBMYXJnZXN0IHBvc3NpYmxlIFVEIGhlYWRlcjogc2VuZCB3aXRoIEdSSCBhbmQgaW1tZWRpYXRlIGRhdGEuCiAJICovCi0JTUxYNF9JQl9VRF9IRUFERVJfU0laRQkJPSA3MgorCU1MWDRfSUJfVURfSEVBREVSX1NJWkUJCT0gNzIsCisJTUxYNF9JQl9MU09fSEVBREVSX1NQQVJFCT0gMTI4LAogfTsKIAogc3RydWN0IG1seDRfaWJfc3FwIHsKQEAgLTY3LDcgKzY4LDggQEAKIH07CiAKIGVudW0gewotCU1MWDRfSUJfTUlOX1NRX1NUUklERSA9IDYKKwlNTFg0X0lCX01JTl9TUV9TVFJJREUJPSA2LAorCU1MWDRfSUJfQ0FDSEVfTElORV9TSVpFCT0gNjQsCiB9OwogCiBzdGF0aWMgY29uc3QgX19iZTMyIG1seDRfaWJfb3Bjb2RlW10gPSB7CkBAIC0yNjEsNyArMjYzLDcgQEAKIAljYXNlIElCX1FQVF9VRDoKIAkJcmV0dXJuIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2N0cmxfc2VnKSArCiAJCQlzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcpICsKLQkJCSgoZmxhZ3MgJiBNTFg0X0lCX1FQX0xTTykgPyA2NCA6IDApOworCQkJKChmbGFncyAmIE1MWDRfSUJfUVBfTFNPKSA/IE1MWDRfSUJfTFNPX0hFQURFUl9TUEFSRSA6IDApOwogCWNhc2UgSUJfUVBUX1VDOgogCQlyZXR1cm4gc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfY3RybF9zZWcpICsKIAkJCXNpemVvZiAoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyk7CkBAIC04OTcsNyArODk5LDYgQEAKIAogCWNvbnRleHQtPmZsYWdzID0gY3B1X3RvX2JlMzIoKHRvX21seDRfc3RhdGUobmV3X3N0YXRlKSA8PCAyOCkgfAogCQkJCSAgICAgKHRvX21seDRfc3QoaWJxcC0+cXBfdHlwZSkgPDwgMTYpKTsKLQljb250ZXh0LT5mbGFncyAgICAgfD0gY3B1X3RvX2JlMzIoMSA8PCA4KTsgLyogREU/ICovCiAKIAlpZiAoIShhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01JR19TVEFURSkpCiAJCWNvbnRleHQtPmZsYWdzIHw9IGNwdV90b19iZTMyKE1MWDRfUVBfUE1fTUlHUkFURUQgPDwgMTEpOwpAQCAtMTQ2NywxNiArMTQ2OCwxMiBAQAogCiBzdGF0aWMgaW50IGJ1aWxkX2xzb19zZWcoc3RydWN0IG1seDRfd3FlX2xzb19zZWcgKndxZSwgc3RydWN0IGliX3NlbmRfd3IgKndyLAogCQkJIHN0cnVjdCBtbHg0X2liX3FwICpxcCwgdW5zaWduZWQgKmxzb19zZWdfbGVuLAotCQkJIF9fYmUzMiAqbHNvX2hkcl9zeikKKwkJCSBfX2JlMzIgKmxzb19oZHJfc3osIF9fYmUzMiAqYmxoKQogewogCXVuc2lnbmVkIGhhbGlnbiA9IEFMSUdOKHNpemVvZiAqd3FlICsgd3ItPndyLnVkLmhsZW4sIDE2KTsKIAotCS8qCi0JICogVGhpcyBpcyBhIHRlbXBvcmFyeSBsaW1pdGF0aW9uIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KLQkgKiBhIGZvcnRoY29taW5nIEZXIHJlbGVhc2U6Ci0JICovCi0JaWYgKHVubGlrZWx5KGhhbGlnbiA+IDY0KSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHVubGlrZWx5KGhhbGlnbiA+IE1MWDRfSUJfQ0FDSEVfTElORV9TSVpFKSkKKwkJKmJsaCA9IGNwdV90b19iZTMyKDEgPDwgNik7CiAKIAlpZiAodW5saWtlbHkoIShxcC0+ZmxhZ3MgJiBNTFg0X0lCX1FQX0xTTykgJiYKIAkJICAgICB3ci0+bnVtX3NnZSA+IHFwLT5zcS5tYXhfZ3MgLSAoaGFsaWduID4+IDQpKSkKQEAgLTE1MjIsNiArMTUxOSw3IEBACiAJX19iZTMyIGR1bW15OwogCV9fYmUzMiAqbHNvX3dxZTsKIAlfX2JlMzIgdW5pbml0aWFsaXplZF92YXIobHNvX2hkcl9zeik7CisJX19iZTMyIGJsaDsKIAlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c3EubG9jaywgZmxhZ3MpOwpAQCAtMTUzMCw2ICsxNTI4LDcgQEAKIAogCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKIAkJbHNvX3dxZSA9ICZkdW1teTsKKwkJYmxoID0gMDsKIAogCQlpZiAobWx4NF93cV9vdmVyZmxvdygmcXAtPnNxLCBucmVxLCBxcC0+aWJxcC5zZW5kX2NxKSkgewogCQkJZXJyID0gLUVOT01FTTsKQEAgLTE2MTYsNyArMTYxNSw3IEBACiAJCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2RhdGFncmFtX3NlZykgLyAxNjsKIAogCQkJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfTFNPKSB7Ci0JCQkJZXJyID0gYnVpbGRfbHNvX3NlZyh3cWUsIHdyLCBxcCwgJnNlZ2xlbiwgJmxzb19oZHJfc3opOworCQkJCWVyciA9IGJ1aWxkX2xzb19zZWcod3FlLCB3ciwgcXAsICZzZWdsZW4sICZsc29faGRyX3N6LCAmYmxoKTsKIAkJCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJCQkqYmFkX3dyID0gd3I7CiAJCQkJCWdvdG8gb3V0OwpAQCAtMTY4Nyw3ICsxNjg2LDcgQEAKIAkJfQogCiAJCWN0cmwtPm93bmVyX29wY29kZSA9IG1seDRfaWJfb3Bjb2RlW3dyLT5vcGNvZGVdIHwKLQkJCShpbmQgJiBxcC0+c3Eud3FlX2NudCA/IGNwdV90b19iZTMyKDEgPDwgMzEpIDogMCk7CisJCQkoaW5kICYgcXAtPnNxLndxZV9jbnQgPyBjcHVfdG9fYmUzMigxIDw8IDMxKSA6IDApIHwgYmxoOwogCiAJCXN0YW1wID0gaW5kICsgcXAtPnNxX3NwYXJlX3dxZXM7CiAJCWluZCArPSBESVZfUk9VTkRfVVAoc2l6ZSAqIDE2LCAxVSA8PCBxcC0+c3Eud3FlX3NoaWZ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvS2NvbmZpZwppbmRleCBkNDQ5ZWI2Li44NDZkYzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9LY29uZmlnCkBAIC00LDE0ICs0LDEzIEBACiAJc2VsZWN0IExJQkNSQzMyQwogCXNlbGVjdCBJTkVUX0xSTwogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBOZXRFZmZlY3QgUkRNQSBlbmFibGVkCi0JICBOZXR3b3JrIEludGVyZmFjZSBDYXJkcyAoUk5JQykuCisJICBUaGlzIGlzIHRoZSBSRE1BIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgKFJOSUMpIGRyaXZlciBmb3IKKwkgIE5ldEVmZmVjdCBFdGhlcm5ldCBDbHVzdGVyIFNlcnZlciBBZGFwdGVycy4KIAogY29uZmlnIElORklOSUJBTkRfTkVTX0RFQlVHCiAJYm9vbCAiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IgogCWRlcGVuZHMgb24gSU5GSU5JQkFORF9ORVMKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIE5ldEVmZmVjdCBSTklDIGRyaXZlciB0byBwcm9kdWNlIGRlYnVnCi0JICBtZXNzYWdlcy4gIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgZGV2ZWxvcGluZyB0aGUgZHJpdmVyCi0JICBvciB0cnlpbmcgdG8gZGlhZ25vc2UgYSBwcm9ibGVtLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBOZXRFZmZlY3QgUk5JQworCSAgZHJpdmVyLiAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBkaWFnbm9zaW5nIGEgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IGNiZGUwY2YuLmI5ZDA5YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC01MjEsNyArNTIxLDggQEAKIAlzcGluX2xvY2tfaW5pdCgmbmVzZGV2LT5pbmRleGVkX3JlZ3NfbG9jayk7CiAKIAkvKiBSZW1hcCB0aGUgUENJIHJlZ2lzdGVycyBpbiBhZGFwdGVyIEJBUjAgdG8ga2VybmVsIFZBIHNwYWNlICovCi0JbW1pb19yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIEJBUl8wKSwgc2l6ZW9mKG1taW9fcmVncykpOworCW1taW9fcmVncyA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBCQVJfMCksCisJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBCQVJfMCkpOwogCWlmIChtbWlvX3JlZ3MgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gcmVtYXAgQkFSMFxuIik7CiAJCXJldCA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAppbmRleCBiY2M2YWJjLi45ODg0MDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKaW5kZXggNzM0NzNkYi4uMzk0NjhjMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L25laWdoYm91ci5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgpAQCAtMjUxLDYgKzI1MiwzMyBAQAogCiAJbXBhX2ZyYW1lID0gKHN0cnVjdCBpZXRmX21wYV9mcmFtZSAqKWJ1ZmZlcjsKIAljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSA9IG50b2hzKG1wYV9mcmFtZS0+cHJpdl9kYXRhX2xlbik7CisJLyogbWFrZSBzdXJlIG1wYSBwcml2YXRlIGRhdGEgbGVuIGlzIGxlc3MgdGhhbiA1MTIgYnl0ZXMgKi8KKwlpZiAoY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUgPiBJRVRGX01BWF9QUklWX0RBVEFfTEVOKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiVGhlIHJlY2VpdmVkIExlbmd0aCBvZiBQcml2YXRlIgorCQkJIiBEYXRhIGZpZWxkIGV4Y2VlZHMgNTEyIG9jdGV0c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKgorCSAqIG1ha2Ugc3VyZSBNUEEgcmVjZWl2ZXIgaW50ZXJvcGVyYXRlIHdpdGggdGhlCisJICogcmVjZWl2ZWQgTVBBIHZlcnNpb24gYW5kIE1QQSBrZXkgaW5mb3JtYXRpb24KKwkgKgorCSAqLworCWlmIChtcGFfZnJhbWUtPnJldiAhPSBtcGFfdmVyc2lvbikgeworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBtcGEgdmVyc2lvbiIKKwkJCQkiIGNhbiBub3QgYmUgaW50ZXJvcGVyYXRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoY21fbm9kZS0+c3RhdGUgIT0gTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UKSB7CisJCWlmIChtZW1jbXAobXBhX2ZyYW1lLT5rZXksIElFRlRfTVBBX0tFWV9SRVEsIElFVEZfTVBBX0tFWV9TSVpFKSkgeworCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJVbmV4cGVjdGVkIE1QQSBLZXkgcmVjZWl2ZWQgXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1lbWNtcChtcGFfZnJhbWUtPmtleSwgSUVGVF9NUEFfS0VZX1JFUCwgSUVURl9NUEFfS0VZX1NJWkUpKSB7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlVuZXhwZWN0ZWQgTVBBIEtleSByZWNlaXZlZCBcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CiAKIAlpZiAoY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSAhPSBsZW4pIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIG5vdCByaWdodCIKQEAgLTQ4Niw2ICs1MTQsOCBAQAogCQlzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlhZGRfcmVmX2NtX25vZGUoY21fbm9kZSk7CisJCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CiAJCWNyZWF0ZV9ldmVudChjbV9ub2RlLCBORVNfQ01fRVZFTlRfQUJPUlRFRCk7CiAJfQogfQpAQCAtOTQ5LDYgKzk3OSw3IEBACiAJCQkJcmVzZXRfZW50cnkpOwogCQl7CiAJCQlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrID0gY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyOworCQkJZW51bSBuZXNfY21fbm9kZV9zdGF0ZSBvbGRfc3RhdGU7CiAJCQlpZiAoTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSA8PSBjbV9ub2RlLT5zdGF0ZSkgewogCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKIAkJCX0gZWxzZSB7CkBAIC05NjAsMTEgKzk5MSwxMiBAQAogCQkJCQkJCSBORVNfQ01fU1RBVEVfQ0xPU0VEOwogCQkJCQkJV0FSTl9PTigxKTsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCWNtX25vZGUtPnN0YXRlID0KLQkJCQkJCQlORVNfQ01fU1RBVEVfQ0xPU0VEOwotCQkJCQkJcmVtX3JlZl9jbV9ub2RlKAotCQkJCQkJCWNtX25vZGUtPmNtX2NvcmUsCi0JCQkJCQkJY21fbm9kZSk7CisJCQkJCQlvbGRfc3RhdGUgPSBjbV9ub2RlLT5zdGF0ZTsKKwkJCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0xJU1RFTkVSX0RFU1RST1lFRDsKKwkJCQkJCWlmIChvbGRfc3RhdGUgIT0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEKQorCQkJCQkJCXJlbV9yZWZfY21fbm9kZSgKKwkJCQkJCQkJY21fbm9kZS0+Y21fY29yZSwKKwkJCQkJCQkJY21fbm9kZSk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewogCQkJCQlzdHJ1Y3QgbmVzX2NtX2V2ZW50IGV2ZW50OwpAQCAtOTgwLDIwICsxMDEyLDkgQEAKIAkJCQkJCQkgbG9vcGJhY2stPmxvY19wb3J0OwogCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gbG9vcGJhY2stPmNtX2lkOwogCQkJCQljbV9ldmVudF9jb25uZWN0X2Vycm9yKCZldmVudCk7CisJCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0xJU1RFTkVSX0RFU1RST1lFRDsKIAkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAotCQkJCQlldmVudC5jbV9ub2RlID0gY21fbm9kZTsKLQkJCQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9Ci0JCQkJCQkJIGNtX25vZGUtPnJlbV9hZGRyOwotCQkJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0KLQkJCQkJCQkgY21fbm9kZS0+bG9jX2FkZHI7Ci0JCQkJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPQotCQkJCQkJCSBjbV9ub2RlLT5yZW1fcG9ydDsKLQkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9Ci0JCQkJCQkJIGNtX25vZGUtPmxvY19wb3J0OwotCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCQkJCWNtX2V2ZW50X3Jlc2V0KCZldmVudCk7Ci0KIAkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCiAJCQkJCQkJIGNtX25vZGUpOwogCkBAIC0xMDc3LDEyICsxMDk4LDEzIEBACiAvKioKICAqIG5lc19hZGRyX3Jlc29sdmVfbmVpZ2gKICAqLwotc3RhdGljIGludCBuZXNfYWRkcl9yZXNvbHZlX25laWdoKHN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYywgdTMyIGRzdF9pcCkKK3N0YXRpYyBpbnQgbmVzX2FkZHJfcmVzb2x2ZV9uZWlnaChzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMsIHUzMiBkc3RfaXAsIGludCBhcnBpbmRleCkKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7Ci0JaW50IHJjID0gLTE7CisJaW50IHJjID0gYXJwaW5kZXg7CisJc3RydWN0IG5lc19hZGFwdGVyICpuZXNhZGFwdGVyID0gbmVzdm5pYy0+bmVzZGV2LT5uZXNhZGFwdGVyOwogCiAJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mIGZsKTsKIAlmbC5ubF91LmlwNF91LmRhZGRyID0gaHRvbmwoZHN0X2lwKTsKQEAgLTEwOTgsNiArMTEyMCwyMSBAQAogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJOZWlnaGJvciBNQUMgYWRkcmVzcyBmb3IgMHglMDhYIgogCQkJCSAgIiBpcyAlcE0sIEdhdGV3YXkgaXMgMHglMDhYIFxuIiwgZHN0X2lwLAogCQkJCSAgbmVpZ2gtPmhhLCBudG9obChydC0+cnRfZ2F0ZXdheSkpOworCisJCQlpZiAoYXJwaW5kZXggPj0gMCkgeworCQkJCWlmICghbWVtY21wKG5lc2FkYXB0ZXItPmFycF90YWJsZVthcnBpbmRleF0ubWFjX2FkZHIsCisJCQkJCQkJbmVpZ2gtPmhhLCBFVEhfQUxFTikpeworCQkJCQkvKiBNYWMgYWRkcmVzcyBzYW1lIGFzIGluIG5lc19hcnBfdGFibGUgKi8KKwkJCQkJbmVpZ2hfcmVsZWFzZShuZWlnaCk7CisJCQkJCWlwX3J0X3B1dChydCk7CisJCQkJCXJldHVybiByYzsKKwkJCQl9CisKKwkJCQluZXNfbWFuYWdlX2FycF9jYWNoZShuZXN2bmljLT5uZXRkZXYsCisJCQkJCQluZXNhZGFwdGVyLT5hcnBfdGFibGVbYXJwaW5kZXhdLm1hY19hZGRyLAorCQkJCQkJZHN0X2lwLCBORVNfQVJQX0RFTEVURSk7CisJCQl9CisKIAkJCW5lc19tYW5hZ2VfYXJwX2NhY2hlKG5lc3ZuaWMtPm5ldGRldiwgbmVpZ2gtPmhhLAogCQkJCQkgICAgIGRzdF9pcCwgTkVTX0FSUF9BREQpOwogCQkJcmMgPSBuZXNfYXJwX3RhYmxlKG5lc3ZuaWMtPm5lc2RldiwgZHN0X2lwLCBOVUxMLApAQCAtMTExMyw3ICsxMTUwLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQogLyoqCiAgKiBtYWtlX2NtX25vZGUgLSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSBjbSBub2RlCiAgKi8KQEAgLTExMjMsNiArMTE1OSw3IEBACiB7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOwogCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlpbnQgb2xkYXJwaW5kZXggPSAwOwogCWludCBhcnBpbmRleCA9IDA7CiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldjsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXI7CkBAIC0xMTc2LDE3ICsxMjEzLDE4IEBACiAJbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKIAogCWNtX25vZGUtPmxvb3BiYWNrcGFydG5lciA9IE5VTEw7CisKIAkvKiBnZXQgdGhlIG1hYyBhZGRyIGZvciB0aGUgcmVtb3RlIG5vZGUgKi8KIAlpZiAoaXB2NF9pc19sb29wYmFjayhodG9ubChjbV9ub2RlLT5yZW1fYWRkcikpKQogCQlhcnBpbmRleCA9IG5lc19hcnBfdGFibGUobmVzZGV2LCBudG9obChuZXN2bmljLT5sb2NhbF9pcGFkZHIpLCBOVUxMLCBORVNfQVJQX1JFU09MVkUpOwotCWVsc2UKLQkJYXJwaW5kZXggPSBuZXNfYXJwX3RhYmxlKG5lc2RldiwgY21fbm9kZS0+cmVtX2FkZHIsIE5VTEwsIE5FU19BUlBfUkVTT0xWRSk7CisJZWxzZSB7CisJCW9sZGFycGluZGV4ID0gbmVzX2FycF90YWJsZShuZXNkZXYsIGNtX25vZGUtPnJlbV9hZGRyLCBOVUxMLCBORVNfQVJQX1JFU09MVkUpOworCQlhcnBpbmRleCA9IG5lc19hZGRyX3Jlc29sdmVfbmVpZ2gobmVzdm5pYywgY21faW5mby0+cmVtX2FkZHIsIG9sZGFycGluZGV4KTsKKworCX0KIAlpZiAoYXJwaW5kZXggPCAwKSB7Ci0JCWFycGluZGV4ID0gbmVzX2FkZHJfcmVzb2x2ZV9uZWlnaChuZXN2bmljLCBjbV9pbmZvLT5yZW1fYWRkcik7Ci0JCWlmIChhcnBpbmRleCA8IDApIHsKLQkJCWtmcmVlKGNtX25vZGUpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KKwkJa2ZyZWUoY21fbm9kZSk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIGNvcHkgdGhlIG1hYyBhZGRyIHRvIG5vZGUgY29udGV4dCAqLwpAQCAtMTMzMywxMyArMTM3MSwyMCBAQAogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOgogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9TRU5UOgogCWNhc2UgTkVTX0NNX1NUQVRFX0VTVEFCTElTSEVEOgotCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOgogCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCsrOwogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0xBU1RfQUNLOwogCQlzZW5kX2ZpbihjbV9ub2RlLCBOVUxMKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJCWNyZWF0ZV9ldmVudChjbV9ub2RlLCBORVNfQ01fRVZFTlRfQUJPUlRFRCk7CisJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0Kys7CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQlhZGRfcmVmX2NtX25vZGUoY21fbm9kZSk7CisJCXNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKIAkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl9ueHQrKzsKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwpAQCAtMTU5MCw2ICsxNjM1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0VEOgogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWFkZF9yZWZfY21fbm9kZShjbV9ub2RlKTsKIAkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9UU0E6CkBAIC0xNjQxLDkgKzE2ODcsMTUgQEAKIAkJcGFzc2l2ZV9vcGVuX2VycihjbV9ub2RlLCBza2IsIDEpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CisJCWNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOworCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOworCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9DTE9TRUQ6CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWFkZF9yZWZfY21fbm9kZShjbV9ub2RlKTsKIAkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKQEAgLTE3MTIsOCArMTc2NCwxMyBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfTElTVEVOSU5HOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJc2VuZF9yZXNldChjbV9ub2RlLCBza2IpOworCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9DTE9TRUQ6CiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJYWRkX3JlZl9jbV9ub2RlKGNtX25vZGUpOwogCQlzZW5kX3Jlc2V0KGNtX25vZGUsIHNrYik7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0xBU1RfQUNLOgpAQCAtMTk3NCw3ICsyMDMxLDcgQEAKIAlpZiAoIWNtX25vZGUpCiAJCXJldHVybiBOVUxMOwogCW1wYV9mcmFtZSA9ICZjbV9ub2RlLT5tcGFfZnJhbWU7Ci0Jc3RyY3B5KG1wYV9mcmFtZS0+a2V5LCBJRUZUX01QQV9LRVlfUkVRKTsKKwltZW1jcHkobXBhX2ZyYW1lLT5rZXksIElFRlRfTVBBX0tFWV9SRVEsIElFVEZfTVBBX0tFWV9TSVpFKTsKIAltcGFfZnJhbWUtPmZsYWdzID0gSUVURl9NUEFfRkxBR1NfQ1JDOwogCW1wYV9mcmFtZS0+cmV2ID0gIElFVEZfTVBBX1ZFUlNJT047CiAJbXBhX2ZyYW1lLT5wcml2X2RhdGFfbGVuID0gaHRvbnMocHJpdmF0ZV9kYXRhX2xlbik7CkBAIC0yMTAyLDMwICsyMTU5LDM5IEBACiAJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CiAJCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSBzZW5kX21wYV9yZWplY3QoY21fbm9kZSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwotCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7Ci0JCQkJaWYgKGVycikKLQkJCQkJV0FSTl9PTigxKTsKLQkJCX0gZWxzZQotCQkJCWNtX2lkLT5hZGRfcmVmKGNtX2lkKTsKKwkJCWlmIChjbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfTElTVEVORVJfREVTVFJPWUVEKSB7CisJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSBzZW5kX21wYV9yZWplY3QoY21fbm9kZSk7CisJCQkJaWYgKHJldCkgeworCQkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJCWlmIChlcnIpCisJCQkJCQlXQVJOX09OKDEpOworCQkJCX0gZWxzZQorCQkJCQljbV9pZC0+YWRkX3JlZihjbV9pZCk7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQljbV9ub2RlLT5jbV9pZCA9IE5VTEw7Ci0JCWV2ZW50LmNtX25vZGUgPSBsb29wYmFjazsKLQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9IGxvb3BiYWNrLT5yZW1fYWRkcjsKLQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9IGxvb3BiYWNrLT5sb2NfYWRkcjsKLQkJZXZlbnQuY21faW5mby5yZW1fcG9ydCA9IGxvb3BiYWNrLT5yZW1fcG9ydDsKLQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9IGxvb3BiYWNrLT5sb2NfcG9ydDsKLQkJZXZlbnQuY21faW5mby5jbV9pZCA9IGxvb3BiYWNrLT5jbV9pZDsKLQkJY21fZXZlbnRfbXBhX3JlamVjdCgmZXZlbnQpOwotCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7Ci0JCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TSU5HOworCQlpZiAoY21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX0xJU1RFTkVSX0RFU1RST1lFRCkgeworCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOworCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGxvb3BiYWNrKTsKKwkJfSBlbHNlIHsKKwkJCWV2ZW50LmNtX25vZGUgPSBsb29wYmFjazsKKwkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPSBsb29wYmFjay0+cmVtX2FkZHI7CisJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0gbG9vcGJhY2stPmxvY19hZGRyOworCQkJZXZlbnQuY21faW5mby5yZW1fcG9ydCA9IGxvb3BiYWNrLT5yZW1fcG9ydDsKKwkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPSBsb29wYmFjay0+bG9jX3BvcnQ7CisJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQkJY21fZXZlbnRfbXBhX3JlamVjdCgmZXZlbnQpOworCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOworCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7CiAKLQkJY21faWQgPSBsb29wYmFjay0+Y21faWQ7Ci0JCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBsb29wYmFjayk7Ci0JCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwkJCWNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGxvb3BiYWNrKTsKKwkJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yMTY0LDExICsyMjMwLDE1IEBACiAJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKIAkJcmV0ID0gLTE7CiAJCWJyZWFrOwotCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOgogCWNhc2UgTkVTX0NNX1NUQVRFX0xJU1RFTklORzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQlzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKIAljYXNlIE5FU19DTV9TVEFURV9VTktOT1dOOgogCWNhc2UgTkVTX0NNX1NUQVRFX0lOSVRFRDoKIAljYXNlIE5FU19DTV9TVEFURV9DTE9TRUQ6CisJY2FzZSBORVNfQ01fU1RBVEVfTElTVEVORVJfREVTVFJPWUVEOgogCQlyZXQgPSByZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1RTQToKQEAgLTI2ODcsOCArMjc1Nyw2IEBACiAJc3RydWN0IG5lc19wZCAqbmVzcGQ7CiAJdTY0IHRhZ2dlZF9vZmZzZXQ7CiAKLQotCiAJaWJxcCA9IG5lc19nZXRfcXAoY21faWQtPmRldmljZSwgY29ubl9wYXJhbS0+cXBuKTsKIAlpZiAoIWlicXApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjcwNCw2ICsyNzcyLDEzIEBACiAJCSIlc1xuIiwgY21fbm9kZSwgbmVzdm5pYywgbmVzdm5pYy0+bmV0ZGV2LAogCQluZXN2bmljLT5uZXRkZXYtPm5hbWUpOwogCisJaWYgKE5FU19DTV9TVEFURV9MSVNURU5FUl9ERVNUUk9ZRUQgPT0gY21fbm9kZS0+c3RhdGUpIHsKKwkJaWYgKGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcikKKwkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXIpOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIGFzc29jaWF0ZSB0aGUgbm9kZSB3aXRoIHRoZSBRUCAqLwogCW5lc3FwLT5jbV9ub2RlID0gKHZvaWQgKiljbV9ub2RlOwogCWNtX25vZGUtPm5lc3FwID0gbmVzcXA7CkBAIC0yNzg2LDYgKzI4NjEsMTAgQEAKIAkJCWNwdV90b19sZTMyKGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gKwogCQkJc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkpOwogCQl3cWUtPndxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX1NUQUcwX0lEWF0gPSBpYm1yLT5sa2V5OworCQlpZiAobmVzcXAtPnNxX2ttYXBwZWQpIHsKKwkJCW5lc3FwLT5zcV9rbWFwcGVkID0gMDsKKwkJCWt1bm1hcChuZXNxcC0+cGFnZSk7CisJCX0KIAogCQluZXNxcC0+bmVzcXBfY29udGV4dC0+aXJkX29yZF9zaXplcyB8PQogCQkJY3B1X3RvX2xlMzIoTkVTX1FQQ09OVEVYVF9PUkRJUkRfTFNNTV9QUkVTRU5UIHwKQEAgLTI5MjksNyArMzAwOCw3IEBACiAJaWYgKGNtX25vZGUtPm1wYV9mcmFtZV9zaXplID4gTUFYX0NNX0JVRkZFUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5rZXlbMF0sIElFRlRfTVBBX0tFWV9SRVApOworCW1lbWNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLmtleVswXSwgSUVGVF9NUEFfS0VZX1JFUCwgSUVURl9NUEFfS0VZX1NJWkUpOwogCWlmIChsb29wYmFjaykgewogCQltZW1jcHkoJmxvb3BiYWNrLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKIAkJbG9vcGJhY2stPm1wYV9mcmFtZS5wcml2X2RhdGFfbGVuID0gcGRhdGFfbGVuOwpAQCAtMjk3NCw2ICszMDUzLDkgQEAKIAlpZiAoIW5lc2RldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIShjbV9pZC0+bG9jYWxfYWRkci5zaW5fcG9ydCkgfHwgIShjbV9pZC0+cmVtb3RlX2FkZHIuc2luX3BvcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldSwgY3VycmVudCBJUCA9IDB4JTA4WCwgRGVzdGluYXRpb24gSVAgPSAiCiAJCSIweCUwOFg6MHglMDRYLCBsb2NhbCA9IDB4JTA4WDoweCUwNFguXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwKIAkJbnRvaGwobmVzdm5pYy0+bG9jYWxfaXBhZGRyKSwKQEAgLTMyNTEsNiArMzMzMywxMSBAQAogCQl3cWUtPndxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX0xFTkdUSDBfSURYXSA9IDA7CiAJCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfU1RBRzBfSURYXSA9IDA7CiAKKwkJaWYgKG5lc3FwLT5zcV9rbWFwcGVkKSB7CisJCQluZXNxcC0+c3Ffa21hcHBlZCA9IDA7CisJCQlrdW5tYXAobmVzcXAtPnBhZ2UpOworCQl9CisKIAkJLyogdXNlIHRoZSByZXNlcnZlZCBzcG90IG9uIHRoZSBXUSBmb3IgdGhlIGV4dHJhIGZpcnN0IFdRRSAqLwogCQluZXNxcC0+bmVzcXBfY29udGV4dC0+aXJkX29yZF9zaXplcyAmPQogCQkJY3B1X3RvX2xlMzIofihORVNfUVBDT05URVhUX09SRElSRF9MU01NX1BSRVNFTlQgfApAQCAtMzM0Niw3ICszNDMzLDcgQEAKIAluZXNxcC0+Y21faWQgPSBOVUxMOwogCWNtX2lkLT5wcm92aWRlcl9kYXRhID0gTlVMTDsKIAljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVQTFk7Ci0JY21fZXZlbnQuc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX1JFSkVDVEVEOworCWNtX2V2ZW50LnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKIAljbV9ldmVudC5sb2NhbF9hZGRyID0gY21faWQtPmxvY2FsX2FkZHI7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIgPSBjbV9pZC0+cmVtb3RlX2FkZHI7CkBAIC0zMzkwLDYgKzM0NzcsOCBAQAogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlcCAtIGNtX2lkID0gJXBcbiIsIGV2ZW50LT5jbV9ub2RlLCBjbV9pZCk7CiAJbmVzcXAgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKwlpZiAoIW5lc3FwKQorCQlyZXR1cm47CiAKIAluZXNxcC0+Y21faWQgPSBOVUxMOwogCS8qIGNtX2lkLT5wcm92aWRlcl9kYXRhID0gTlVMTDsgKi8KQEAgLTM0MDEsOCArMzQ5MCw4IEBACiAJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gTlVMTDsKIAljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuID0gMDsKIAotCXJldCA9IGNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOwogCWNtX2lkLT5hZGRfcmVmKGNtX2lkKTsKKwlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKIAlhdG9taWNfaW5jKCZjbV9jbG9zZXMpOwogCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ0xPU0U7CiAJY21fZXZlbnQuc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKaW5kZXggOTBlOGU0ZC4uZDk4MjVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNDcsNiArNDcsOCBAQAogI2RlZmluZSBJRUZUX01QQV9LRVlfUkVQICAiTVBBIElEIFJlcCBGcmFtZSIKICNkZWZpbmUgSUVURl9NUEFfS0VZX1NJWkUgMTYKICNkZWZpbmUgSUVURl9NUEFfVkVSU0lPTiAgMQorI2RlZmluZSBJRVRGX01BWF9QUklWX0RBVEFfTEVOIDUxMgorI2RlZmluZSBJRVRGX01QQV9GUkFNRV9TSVpFICAgICAyMAogCiBlbnVtIGlldGZfbXBhX2ZsYWdzIHsKIAlJRVRGX01QQV9GTEFHU19NQVJLRVJTID0gMHg4MCwJLyogcmVjZWl2ZSBNYXJrZXJzICovCkBAIC0xNjksNyArMTcxLDcgQEAKIAogI2RlZmluZSBORVNfQ01fREVGX1NFUTIgICAgICAweDE4ZWQ1NzQwCiAjZGVmaW5lIE5FU19DTV9ERUZfTE9DQUxfSUQyIDB4YjgwNwotI2RlZmluZQlNQVhfQ01fQlVGRkVSCTUxMgorI2RlZmluZQlNQVhfQ01fQlVGRkVSCShJRVRGX01QQV9GUkFNRV9TSVpFICsgSUVURl9NQVhfUFJJVl9EQVRBX0xFTikKIAogCiB0eXBlZGVmIHUzMiBuZXNfYWRkcl90OwpAQCAtMTk4LDYgKzIwMCw3IEBACiAJTkVTX0NNX1NUQVRFX1RJTUVfV0FJVCwKIAlORVNfQ01fU1RBVEVfTEFTVF9BQ0ssCiAJTkVTX0NNX1NUQVRFX0NMT1NJTkcsCisJTkVTX0NNX1NUQVRFX0xJU1RFTkVSX0RFU1RST1lFRCwKIAlORVNfQ01fU1RBVEVfQ0xPU0VECiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKaW5kZXggMGZiOGQ4MS4uYjQzOTNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCmluZGV4IDM1MTJkNmQuLmIxYzJjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTQyNCw4ICs0MjQsOSBAQAogCiAJbmVzYWRhcHRlci0+YmFzZV9wZCA9IDE7CiAKLQluZXNhZGFwdGVyLT5kZXZpY2VfY2FwX2ZsYWdzID0KLQkJSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZIHwgSUJfREVWSUNFX01FTV9XSU5ET1c7CisJbmVzYWRhcHRlci0+ZGV2aWNlX2NhcF9mbGFncyA9IElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSB8CisJCQkJICAgICAgIElCX0RFVklDRV9NRU1fV0lORE9XIHwKKwkJCQkgICAgICAgSUJfREVWSUNFX01FTV9NR1RfRVhURU5TSU9OUzsKIAogCW5lc2FkYXB0ZXItPmFsbG9jYXRlZF9xcHMgPSAodW5zaWduZWQgbG9uZyAqKSYoKCh1bnNpZ25lZCBjaGFyICopbmVzYWRhcHRlcikKIAkJCVsoc2l6ZW9mKHN0cnVjdCBuZXNfYWRhcHRlcikrKHNpemVvZih1bnNpZ25lZCBsb25nKS0xKSkmKH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLTEpKV0pOwpAQCAtNDM2LDExICs0MzcsMTIgQEAKIAluZXNhZGFwdGVyLT5xcF90YWJsZSA9IChzdHJ1Y3QgbmVzX3FwICoqKSgmbmVzYWRhcHRlci0+YWxsb2NhdGVkX2FycHNbQklUU19UT19MT05HUyhhcnBfdGFibGVfc2l6ZSldKTsKIAogCi0JLyogbWFyayB0aGUgdXN1YWwgc3VzcGVjdCBRUHMgYW5kIENRcyBhcyBpbiB1c2UgKi8KKwkvKiBtYXJrIHRoZSB1c3VhbCBzdXNwZWN0IFFQcywgTVIgYW5kIENRcyBhcyBpbiB1c2UgKi8KIAlmb3IgKHUzMnRlbXAgPSAwOyB1MzJ0ZW1wIDwgTkVTX0ZJUlNUX1FQTjsgdTMydGVtcCsrKSB7CiAJCXNldF9iaXQodTMydGVtcCwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX3Fwcyk7CiAJCXNldF9iaXQodTMydGVtcCwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX2Nxcyk7CiAJfQorCXNldF9iaXQoMCwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycyk7CiAKIAlmb3IgKHUzMnRlbXAgPSAwOyB1MzJ0ZW1wIDwgMjA7IHUzMnRlbXArKykKIAkJc2V0X2JpdCh1MzJ0ZW1wLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfcGRzKTsKQEAgLTQ4MSw3ICs0ODMsNyBAQAogCW5lc2FkYXB0ZXItPm1heF9pcnJxX3dyID0gKHUzMnRlbXAgPj4gMTYpICYgMzsKIAogCW5lc2FkYXB0ZXItPm1heF9zZ2UgPSA0OwotCW5lc2FkYXB0ZXItPm1heF9jcWUgPSAzMjc2NzsKKwluZXNhZGFwdGVyLT5tYXhfY3FlID0gMzI3NjY7CiAKIAlpZiAobmVzX3JlYWRfZWVwcm9tX3ZhbHVlcyhuZXNkZXYsIG5lc2FkYXB0ZXIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZWFkIEVFUFJPTSBkYXRhLlxuIik7CkBAIC0xMzU1LDYgKzEzNTcsOCBAQAogCX0KIAlpZiAoKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9BUkdVUykgfHwKIAkgICAgKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9TRlBfRCkpIHsKKwkJdTMyIGZpcnN0X3RpbWUgPSAxOworCiAJCS8qIENoZWNrIGZpcm13YXJlIGhlYXJ0YmVhdCAqLwogCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZWUpOwogCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKQEAgLTEzNjIsOCArMTM2NiwxMyBAQAogCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZWUpOwogCQl0ZW1wX3BoeV9kYXRhMiA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX01ESU9fQ09OVFJPTCk7CiAKLQkJaWYgKHRlbXBfcGh5X2RhdGEgIT0gdGVtcF9waHlfZGF0YTIpCi0JCQlyZXR1cm4gMDsKKwkJaWYgKHRlbXBfcGh5X2RhdGEgIT0gdGVtcF9waHlfZGF0YTIpIHsKKwkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdmZCk7CisJCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKKwkJCWlmICgodGVtcF9waHlfZGF0YSAmIDB4ZmYpID4gMHgyMCkKKwkJCQlyZXR1cm4gMDsKKwkJCXByaW50ayhQRlggIlJlaW5pdGlhbGl6aW5nIFBIWVxuIik7CisJCX0KIAogCQkvKiBubyBoZWFydGJlYXQsIGNvbmZpZ3VyZSB0aGUgUEhZICovCiAJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweDAwMDAsIDB4ODAwMCk7CkBAIC0xMzk5LDcgKzE0MDgsNyBAQAogCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKIAkJZG8gewogCQkJaWYgKGNvdW50ZXIrKyA+IDE1MCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX1BIWSwgIk5vIFBIWSBoZWFydGJlYXRcbiIpOworCQkJCXByaW50ayhQRlggIk5vIFBIWSBoZWFydGJlYXRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJbWRlbGF5KDEpOwpAQCAtMTQxMywxMSArMTQyMiwyMCBAQAogCQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2ZkKTsKIAkJCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwogCQkJaWYgKGNvdW50ZXIrKyA+IDMwMCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX1BIWSwgIlBIWSBkaWQgbm90IHRyYWNrXG4iKTsKLQkJCQlicmVhazsKKwkJCQlpZiAoKCh0ZW1wX3BoeV9kYXRhICYgMHhmZikgPT0gMHgwKSAmJiBmaXJzdF90aW1lKSB7CisJCQkJCWZpcnN0X3RpbWUgPSAwOworCQkJCQljb3VudGVyID0gMDsKKwkJCQkJLyogcmVzZXQgQU1DQyBQSFkgYW5kIHRyeSBhZ2FpbiAqLworCQkJCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhlODU0LCAweDAwYzApOworCQkJCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhlODU0LCAweDAwNDApOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGsoUEZYICJQSFkgZGlkIG5vdCB0cmFja1xuIik7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KIAkJCW1kZWxheSgxMCk7Ci0JCX0gd2hpbGUgKCgodGVtcF9waHlfZGF0YSAmIDB4ZmYpICE9IDB4NTApICYmICgodGVtcF9waHlfZGF0YSAmIDB4ZmYpICE9IDB4NzApKTsKKwkJfSB3aGlsZSAoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA8IDB4MzApOwogCiAJCS8qIHNldHVwIHNpZ25hbCBpbnRlZ3JpdHkgKi8KIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwMywgMHgwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCmluZGV4IGYyOGE0MWIuLjA4NGJlMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC01NDYsMTEgKzU0NiwyMyBAQAogCU5FU19JV0FSUF9TUV9GTVJfV1FFX1BCTF9MRU5HVEhfSURYID0gMTQsCiB9OwogCitlbnVtIG5lc19pd2FycF9zcV9mbXJfb3Bjb2RlcyB7CisJTkVTX0lXQVJQX1NRX0ZNUl9XUUVfWkVST19CQVNFRAkJCT0gKDE8PDYpLAorCU5FU19JV0FSUF9TUV9GTVJfV1FFX1BBR0VfU0laRV80SwkJPSAoMDw8NyksCisJTkVTX0lXQVJQX1NRX0ZNUl9XUUVfUEFHRV9TSVpFXzJNCQk9ICgxPDw3KSwKKwlORVNfSVdBUlBfU1FfRk1SX1dRRV9SSUdIVFNfRU5BQkxFX0xPQ0FMX1JFQUQJPSAoMTw8MTYpLAorCU5FU19JV0FSUF9TUV9GTVJfV1FFX1JJR0hUU19FTkFCTEVfTE9DQUxfV1JJVEUgCT0gKDE8PDE3KSwKKwlORVNfSVdBUlBfU1FfRk1SX1dRRV9SSUdIVFNfRU5BQkxFX1JFTU9URV9SRUFEIAk9ICgxPDwxOCksCisJTkVTX0lXQVJQX1NRX0ZNUl9XUUVfUklHSFRTX0VOQUJMRV9SRU1PVEVfV1JJVEUgPSAoMTw8MTkpLAorCU5FU19JV0FSUF9TUV9GTVJfV1FFX1JJR0hUU19FTkFCTEVfV0lORE9XX0JJTkQgCT0gKDE8PDIwKSwKK307CisKKyNkZWZpbmUgTkVTX0lXQVJQX1NRX0ZNUl9XUUVfTVJfTEVOR1RIX0hJR0hfTUFTSwkweEZGOworCiBlbnVtIG5lc19pd2FycF9zcV9sb2NpbnZfd3FlX3dvcmRfaWR4IHsKIAlORVNfSVdBUlBfU1FfTE9DSU5WX1dRRV9JTlZfU1RBR19JRFggPSA2LAogfTsKIAotCiBlbnVtIG5lc19pd2FycF9ycV93cWVfd29yZF9pZHggewogCU5FU19JV0FSUF9SUV9XUUVfVE9UQUxfUEFZTE9BRF9JRFggPSAxLAogCU5FU19JV0FSUF9SUV9XUUVfQ09NUF9DVFhfTE9XX0lEWCA9IDIsCkBAIC0xMTUzLDYgKzExNjUsMTkgQEAKIAkvKiBUT0RPOiBuZWVkIHRvIGFkZCBsaXN0IGZvciB0d28gbGV2ZWwgdGFibGVzICovCiB9OwogCisjZGVmaW5lIE5FU180S19QQkxfQ0hVTktfU0laRQk0MDk2CisKK3N0cnVjdCBuZXNfZmFzdF9tcl93cWVfcGJsIHsKKwl1NjQJCSprdmE7CisJZG1hX2FkZHJfdAlwYWRkcjsKK307CisKK3N0cnVjdCBuZXNfaWJfZmFzdF9yZWdfcGFnZV9saXN0IHsKKwlzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0CWliZnJwbDsKKwlzdHJ1Y3QgbmVzX2Zhc3RfbXJfd3FlX3BibCAJbmVzX3dxZV9wYmw7CisJdTY0IAkJCQlwYmw7Cit9OworCiBzdHJ1Y3QgbmVzX2xpc3RlbmVyIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICB3b3JrOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggZGUxOGZkZi4uYWIxMTAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKaW5kZXggY2M5MGMxNC4uNzFlMTMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtODYsNiArODYsNyBAQAogCUlXTkVTX01FTVJFR19UWVBFX0NRID0gMHgwMDAyLAogCUlXTkVTX01FTVJFR19UWVBFX01XID0gMHgwMDAzLAogCUlXTkVTX01FTVJFR19UWVBFX0ZNUiA9IDB4MDAwNCwKKwlJV05FU19NRU1SRUdfVFlQRV9GTUVNID0gMHgwMDA1LAogfTsKIAogc3RydWN0IG5lc19tZW1fcmVnX3JlcSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwppbmRleCA5Njg3YzM5Li43MjlkNTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYwppbmRleCBhNjgwYzQyLi42NGQzMTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0yNzUsMzQyICsyNzUsMjM2IEBACiB9CiAKIAotLyoqCi0gKiBuZXNfYWxsb2NfZm1yCisvKgorICogbmVzX2FsbG9jX2Zhc3RfbXIKICAqLwotc3RhdGljIHN0cnVjdCBpYl9mbXIgKm5lc19hbGxvY19mbXIoc3RydWN0IGliX3BkICppYnBkLAotCQlpbnQgaWJtcl9hY2Nlc3NfZmxhZ3MsCi0JCXN0cnVjdCBpYl9mbXJfYXR0ciAqaWJmbXJfYXR0cikKK3N0YXRpYyBpbnQgYWxsb2NfZmFzdF9yZWdfbXIoc3RydWN0IG5lc19kZXZpY2UgKm5lc2Rldiwgc3RydWN0IG5lc19wZCAqbmVzcGQsCisJCQkgICAgIHUzMiBzdGFnLCB1MzIgcGFnZV9jb3VudCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXNfcGQgKm5lc3BkID0gdG9fbmVzcGQoaWJwZCk7Ci0Jc3RydWN0IG5lc192bmljICpuZXN2bmljID0gdG9fbmVzdm5pYyhpYnBkLT5kZXZpY2UpOwotCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7Ci0Jc3RydWN0IG5lc19hZGFwdGVyICpuZXNhZGFwdGVyID0gbmVzZGV2LT5uZXNhZGFwdGVyOwotCXN0cnVjdCBuZXNfZm1yICpuZXNmbXI7Ci0Jc3RydWN0IG5lc19jcXBfcmVxdWVzdCAqY3FwX3JlcXVlc3Q7CiAJc3RydWN0IG5lc19od19jcXBfd3FlICpjcXBfd3FlOworCXN0cnVjdCBuZXNfY3FwX3JlcXVlc3QgKmNxcF9yZXF1ZXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKLQl1MzIgc3RhZzsKLQl1MzIgc3RhZ19pbmRleCA9IDA7Ci0JdTMyIG5leHRfc3RhZ19pbmRleCA9IDA7Ci0JdTMyIGRyaXZlcl9rZXkgPSAwOworCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKIAl1MzIgb3Bjb2RlID0gMDsKLQl1OCBzdGFnX2tleSA9IDA7Ci0JaW50IGk9MDsKLQlzdHJ1Y3QgbmVzX3ZwYmwgdnBibDsKKwl1MTYgbWFqb3JfY29kZTsKKwl1NjQgcmVnaW9uX2xlbmd0aCA9IHBhZ2VfY291bnQgKiBQQUdFX1NJWkU7CiAKLQlnZXRfcmFuZG9tX2J5dGVzKCZuZXh0X3N0YWdfaW5kZXgsIHNpemVvZihuZXh0X3N0YWdfaW5kZXgpKTsKLQlzdGFnX2tleSA9ICh1OCluZXh0X3N0YWdfaW5kZXg7CiAKLQlkcml2ZXJfa2V5ID0gMDsKLQotCW5leHRfc3RhZ19pbmRleCA+Pj0gODsKLQluZXh0X3N0YWdfaW5kZXggJT0gbmVzYWRhcHRlci0+bWF4X21yOwotCi0JcmV0ID0gbmVzX2FsbG9jX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsCi0JCQluZXNhZGFwdGVyLT5tYXhfbXIsICZzdGFnX2luZGV4LCAmbmV4dF9zdGFnX2luZGV4KTsKLQlpZiAocmV0KSB7Ci0JCWdvdG8gZmFpbGVkX3Jlc291cmNlX2FsbG9jOwotCX0KLQotCW5lc2ZtciA9IGt6YWxsb2Moc2l6ZW9mKCpuZXNmbXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5lc2ZtcikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxlZF9mbXJfYWxsb2M7Ci0JfQotCi0JbmVzZm1yLT5uZXNtci5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfRk1SOwotCWlmIChpYmZtcl9hdHRyLT5tYXhfcGFnZXMgPT0gMSkgewotCQkvKiB1c2UgemVybyBsZW5ndGggUEJMICovCi0JCW5lc2Ztci0+bmVzbXIucGJsXzRrID0gMDsKLQkJbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgPSAwOwotCX0gZWxzZSBpZiAoaWJmbXJfYXR0ci0+bWF4X3BhZ2VzIDw9IDMyKSB7Ci0JCS8qIHVzZSBQQkwgMjU2ICovCi0JCW5lc2Ztci0+bmVzbXIucGJsXzRrID0gMDsKLQkJbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgPSAxOwotCX0gZWxzZSBpZiAoaWJmbXJfYXR0ci0+bWF4X3BhZ2VzIDw9IDUxMikgewotCQkvKiB1c2UgNEsgUEJMcyAqLwotCQluZXNmbXItPm5lc21yLnBibF80ayA9IDE7Ci0JCW5lc2Ztci0+bmVzbXIucGJsc191c2VkID0gMTsKLQl9IGVsc2UgewotCQkvKiB1c2UgdHdvIGxldmVsIDRLIFBCTHMgKi8KLQkJLyogYWRkIHN1cHBvcnQgZm9yIHR3byBsZXZlbCAyNTZCIFBCTHMgKi8KLQkJbmVzZm1yLT5uZXNtci5wYmxfNGsgPSAxOwotCQluZXNmbXItPm5lc21yLnBibHNfdXNlZCA9IDEgKyAoaWJmbXJfYXR0ci0+bWF4X3BhZ2VzID4+IDkpICsKLQkJCQkoKGliZm1yX2F0dHItPm1heF9wYWdlcyAmIDUxMSkgPyAxIDogMCk7Ci0JfQotCS8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB0aGUgYWRhcHRlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCi0JLyogdHJhY2sgUEJMIHJlc291cmNlcyAqLwotCWlmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSB7Ci0JCWlmIChuZXNmbXItPm5lc21yLnBibF80aykgewotCQkJaWYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkID4gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIGZhaWxlZF92cGJsX2F2YWlsOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IG5lc2Ztci0+bmVzbXIucGJsc191c2VkOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkID4gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBmYWlsZWRfdnBibF9hdmFpbDsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgLT0gbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBvbmUgbGV2ZWwgcGJsICovCi0JaWYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkID09IDApIHsKLQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlID0gTlVMTDsKLQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICAiemVybyBsZXZlbCBwYmwgXG4iKTsKLQl9IGVsc2UgaWYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkID09IDEpIHsKLQkJLyogY2FuIGNoYW5nZSBpdCB0byBrbWFsbG9jICYgZG1hX21hcF9zaW5nbGUgKi8KLQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsIDQwOTYsCi0JCQkJJm5lc2Ztci0+cm9vdF92cGJsLnBibF9wYmFzZSk7Ci0JCWlmICghbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZmFpbGVkX3ZwYmxfYWxsb2M7Ci0JCX0KLQkJbmVzZm1yLT5sZWFmX3BibF9jbnQgPSAwOwotCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIm9uZSBsZXZlbCBwYmwsIHJvb3RfdnBibC5wYmxfdmJhc2U9JXAgXG4iLAotCQkJCW5lc2Ztci0+cm9vdF92cGJsLnBibF92YmFzZSk7Ci0JfQotCS8qIHR3byBsZXZlbCBwYmwgKi8KLQllbHNlIHsKLQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsIDgxOTIsCi0JCQkJJm5lc2Ztci0+cm9vdF92cGJsLnBibF9wYmFzZSk7Ci0JCWlmICghbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZmFpbGVkX3ZwYmxfYWxsb2M7Ci0JCX0KLQotCQluZXNmbXItPmxlYWZfcGJsX2NudCA9IG5lc2Ztci0+bmVzbXIucGJsc191c2VkLTE7Ci0JCW5lc2Ztci0+cm9vdF92cGJsLmxlYWZfdnBibCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmwpKjEwMjQsIEdGUF9BVE9NSUMpOwotCQlpZiAoIW5lc2Ztci0+cm9vdF92cGJsLmxlYWZfdnBibCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGZhaWxlZF9sZWFmX3ZwYmxfYWxsb2M7Ci0JCX0KLQotCQluZXNfZGVidWcoTkVTX0RCR19NUiwgInR3byBsZXZlbCBwYmwsIHJvb3RfdnBibC5wYmxfdmJhc2U9JXAiCi0JCQkJIiBsZWFmX3BibF9jbnQ9JWQgcm9vdF92cGJsLmxlYWZfdnBibD0lcFxuIiwKLQkJCQluZXNmbXItPnJvb3RfdnBibC5wYmxfdmJhc2UsIG5lc2Ztci0+bGVhZl9wYmxfY250LCBuZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmwpOwotCi0JCWZvciAoaT0wOyBpPG5lc2Ztci0+bGVhZl9wYmxfY250OyBpKyspCi0JCQluZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmxbaV0ucGJsX3ZiYXNlID0gTlVMTDsKLQotCQlmb3IgKGk9MDsgaTxuZXNmbXItPmxlYWZfcGJsX2NudDsgaSsrKSB7Ci0JCQl2cGJsLnBibF92YmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCA0MDk2LAotCQkJCQkmdnBibC5wYmxfcGJhc2UpOwotCi0JCQlpZiAoIXZwYmwucGJsX3ZiYXNlKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCWdvdG8gZmFpbGVkX2xlYWZfdnBibF9wYWdlc19hbGxvYzsKLQkJCX0KLQotCQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlW2ldLnBhX2xvdyA9IGNwdV90b19sZTMyKCh1MzIpdnBibC5wYmxfcGJhc2UpOwotCQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlW2ldLnBhX2hpZ2ggPSBjcHVfdG9fbGUzMigodTMyKSgoKCh1NjQpdnBibC5wYmxfcGJhc2UpPj4zMikpKTsKLQkJCW5lc2Ztci0+cm9vdF92cGJsLmxlYWZfdnBibFtpXSA9IHZwYmw7Ci0KLQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAicGJhc2VfbG93PTB4JXgsIHBiYXNlX2hpZ2g9MHgleCwgdnBibD0lcFxuIiwKLQkJCQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlW2ldLnBhX2xvdywKLQkJCQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlW2ldLnBhX2hpZ2gsCi0JCQkJCSZuZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmxbaV0pOwotCQl9Ci0JfQotCW5lc2Ztci0+aWJfcXAgPSBOVUxMOwotCW5lc2Ztci0+YWNjZXNzX3JpZ2h0cyA9MDsKLQotCXN0YWcgPSBzdGFnX2luZGV4IDw8IDg7Ci0Jc3RhZyB8PSBkcml2ZXJfa2V5OwotCXN0YWcgKz0gKHUzMilzdGFnX2tleTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJY3FwX3JlcXVlc3QgPSBuZXNfZ2V0X2NxcF9yZXF1ZXN0KG5lc2Rldik7CiAJaWYgKGNxcF9yZXF1ZXN0ID09IE5VTEwpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJGYWlsZWQgdG8gZ2V0IGEgY3FwX3JlcXVlc3QuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWRfbGVhZl92cGJsX3BhZ2VzX2FsbG9jOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJhbGxvY19mYXN0X3JlZ19tcjogcGFnZV9jb3VudCA9ICVkLCAiCisJCQkgICAgICAicmVnaW9uX2xlbmd0aCA9ICVsbHVcbiIsCisJCQkgICAgICBwYWdlX2NvdW50LCByZWdpb25fbGVuZ3RoKTsKIAljcXBfcmVxdWVzdC0+d2FpdGluZyA9IDE7CiAJY3FwX3dxZSA9ICZjcXBfcmVxdWVzdC0+Y3FwX3dxZTsKIAotCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiUmVnaXN0ZXJpbmcgU1RhZyAweCUwOFgsIGluZGV4ID0gMHglMDhYXG4iLAotCQkJc3RhZywgc3RhZ19pbmRleCk7Ci0KLQlvcGNvZGUgPSBORVNfQ1FQX0FMTE9DQVRFX1NUQUcgfCBORVNfQ1FQX1NUQUdfVkFfVE8gfCBORVNfQ1FQX1NUQUdfTVI7Ci0KLQlpZiAobmVzZm1yLT5uZXNtci5wYmxfNGsgPT0gMSkKLQkJb3Bjb2RlIHw9IE5FU19DUVBfU1RBR19QQkxfQkxLX1NJWkU7Ci0KLQlpZiAoaWJtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSB7Ci0JCW9wY29kZSB8PSBORVNfQ1FQX1NUQUdfUklHSFRTX1JFTU9URV9XUklURSB8Ci0JCQkJTkVTX0NRUF9TVEFHX1JJR0hUU19MT0NBTF9XUklURSB8IE5FU19DUVBfU1RBR19SRU1fQUNDX0VOOwotCQluZXNmbXItPmFjY2Vzc19yaWdodHMgfD0KLQkJCQlORVNfQ1FQX1NUQUdfUklHSFRTX1JFTU9URV9XUklURSB8IE5FU19DUVBfU1RBR19SSUdIVFNfTE9DQUxfV1JJVEUgfAotCQkJCU5FU19DUVBfU1RBR19SRU1fQUNDX0VOOworCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCWlmIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gMCkgeworCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsLS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJLyogTm8gNGtwYmwncyBhdmFpbGFibGU6ICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIFBibHNcbiIpOworCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGlibXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9SRUFEKSB7Ci0JCW9wY29kZSB8PSBORVNfQ1FQX1NUQUdfUklHSFRTX1JFTU9URV9SRUFEIHwKLQkJCQlORVNfQ1FQX1NUQUdfUklHSFRTX0xPQ0FMX1JFQUQgfCBORVNfQ1FQX1NUQUdfUkVNX0FDQ19FTjsKLQkJbmVzZm1yLT5hY2Nlc3NfcmlnaHRzIHw9Ci0JCQkJTkVTX0NRUF9TVEFHX1JJR0hUU19SRU1PVEVfUkVBRCB8IE5FU19DUVBfU1RBR19SSUdIVFNfTE9DQUxfUkVBRCB8Ci0JCQkJTkVTX0NRUF9TVEFHX1JFTV9BQ0NfRU47Ci0JfQorCW9wY29kZSA9IE5FU19DUVBfQUxMT0NBVEVfU1RBRyB8IE5FU19DUVBfU1RBR19NUiB8CisJCSBORVNfQ1FQX1NUQUdfUEJMX0JMS19TSVpFIHwgTkVTX0NRUF9TVEFHX1ZBX1RPIHwKKwkJIE5FU19DUVBfU1RBR19SRU1fQUNDX0VOOworCS8qCisJICogVGhlIGN1cnJlbnQgT0ZFRCBBUEkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgemVybyBiYXNlZCBUTyBvcHRpb24uCisJICogSWYgYWRkZWQgdGhlbiBuZWVkIHRvIGNoYW5nZWQgdGhlIE5FU19DUVBfU1RBR19WQSogb3B0aW9uLiAgQWxzbywKKwkgKiB0aGUgQVBJIGRvZXMgbm90IHN1cHBvcnQgdGhhdCBhYmlsaXR5IHRvIGhhdmUgdGhlIE1SIHNldCBmb3IgbG9jYWwKKwkgKiBhY2Nlc3Mgb25seSB3aGVuIGNyZWF0ZWQgYW5kIG5vdCBhbGxvdyB0aGUgU1Egb3AgdG8gb3ZlcnJpZGUuIEdpdmVuCisJICogdGhpcyB0aGUgcmVtb3RlIGVuYWJsZSBtdXN0IGJlIHNldCBoZXJlLgorCSAqLwogCiAJbmVzX2ZpbGxfaW5pdF9jcXBfd3FlKGNxcF93cWUsIG5lc2Rldik7CiAJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfV1FFX09QQ09ERV9JRFgsIG9wY29kZSk7Ci0Jc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfTEVOX0hJR0hfUERfSURYLCAobmVzcGQtPnBkX2lkICYgMHgwMDAwN2ZmZikpOwotCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1NUQUdfSURYLCBzdGFnKTsKKwlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfQkxLX0NPVU5UX0lEWCwgMSk7CiAKLQljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9TVEFHX1dRRV9QQkxfQkxLX0NPVU5UX0lEWF0gPQotCQkJY3B1X3RvX2xlMzIoKG5lc2Ztci0+bmVzbXIucGJsc191c2VkPjEpID8KLQkJCShuZXNmbXItPm5lc21yLnBibHNfdXNlZC0xKSA6IG5lc2Ztci0+bmVzbXIucGJsc191c2VkKTsKKwljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9TVEFHX1dRRV9MRU5fSElHSF9QRF9JRFhdID0KKwkJCWNwdV90b19sZTMyKCh1MzIpKHJlZ2lvbl9sZW5ndGggPj4gOCkgJiAweGZmMDAwMDAwKTsKKwljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9TVEFHX1dRRV9MRU5fSElHSF9QRF9JRFhdIHw9CisJCQljcHVfdG9fbGUzMihuZXNwZC0+cGRfaWQgJiAweDAwMDA3ZmZmKTsKKworCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1NUQUdfSURYLCBzdGFnKTsKKwlzZXRfd3FlXzY0Yml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9WQV9MT1dfSURYLCAwKTsKKwlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9MRU5fTE9XX0lEWCwgMCk7CisJc2V0X3dxZV82NGJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEFfTE9XX0lEWCwgMCk7CisJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0xFTl9JRFgsIChwYWdlX2NvdW50ICogOCkpOworCWNxcF93cWUtPndxZV93b3Jkc1tORVNfQ1FQX1dRRV9PUENPREVfSURYXSB8PSBjcHVfdG9fbGUzMihORVNfQ1FQX1NUQUdfUEJMX0JMS19TSVpFKTsKKwliYXJyaWVyKCk7CiAKIAlhdG9taWNfc2V0KCZjcXBfcmVxdWVzdC0+cmVmY291bnQsIDIpOwogCW5lc19wb3N0X2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwogCiAJLyogV2FpdCBmb3IgQ1FQICovCi0JcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGNxcF9yZXF1ZXN0LT53YWl0cSwgKGNxcF9yZXF1ZXN0LT5yZXF1ZXN0X2RvbmUgIT0gMCksCi0JCQlORVNfRVZFTlRfVElNRU9VVCk7Ci0JbmVzX2RlYnVnKE5FU19EQkdfTVIsICJSZWdpc3RlciBTVGFnIDB4JTA4WCBjb21wbGV0ZWQsIHdhaXRfZXZlbnRfdGltZW91dCByZXQgPSAldSwiCi0JCQkiIENRUCBNYWpvcjpNaW5vciBjb2RlcyA9IDB4JTA0WDoweCUwNFguXG4iLAotCQkJc3RhZywgcmV0LCBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZSwgY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGUpOworCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChjcXBfcmVxdWVzdC0+d2FpdHEsCisJCQkJICgwICE9IGNxcF9yZXF1ZXN0LT5yZXF1ZXN0X2RvbmUpLAorCQkJCSBORVNfRVZFTlRfVElNRU9VVCk7CiAKLQlpZiAoKCFyZXQpIHx8IChjcXBfcmVxdWVzdC0+bWFqb3JfY29kZSkpIHsKLQkJbmVzX3B1dF9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJcmV0ID0gKCFyZXQpID8gLUVUSU1FIDogLUVJTzsKLQkJZ290byBmYWlsZWRfbGVhZl92cGJsX3BhZ2VzX2FsbG9jOwotCX0KKwluZXNfZGVidWcoTkVTX0RCR19NUiwgIkFsbG9jYXRlIFNUYWcgMHglMDhYIGNvbXBsZXRlZCwgIgorCQkgICJ3YWl0X2V2ZW50X3RpbWVvdXQgcmV0ID0gJXUsIENRUCBNYWpvcjpNaW5vciBjb2RlcyA9ICIKKwkJICAiMHglMDRYOjB4JTA0WC5cbiIsIHN0YWcsIHJldCwgY3FwX3JlcXVlc3QtPm1ham9yX2NvZGUsCisJCSAgY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGUpOworCW1ham9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZTsKIAluZXNfcHV0X2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCW5lc2Ztci0+bmVzbXIuaWJmbXIubGtleSA9IHN0YWc7Ci0JbmVzZm1yLT5uZXNtci5pYmZtci5ya2V5ID0gc3RhZzsKLQluZXNmbXItPmF0dHIgPSAqaWJmbXJfYXR0cjsKIAotCXJldHVybiAmbmVzZm1yLT5uZXNtci5pYmZtcjsKLQotCWZhaWxlZF9sZWFmX3ZwYmxfcGFnZXNfYWxsb2M6Ci0JLyogdW5yb2xsIGFsbCBhbGxvY2F0ZWQgcGFnZXMgKi8KLQlmb3IgKGk9MDsgaTxuZXNmbXItPmxlYWZfcGJsX2NudDsgaSsrKSB7Ci0JCWlmIChuZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmxbaV0ucGJsX3ZiYXNlKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCA0MDk2LCBuZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmxbaV0ucGJsX3ZiYXNlLAotCQkJCQluZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmxbaV0ucGJsX3BiYXNlKTsKLQkJfQotCX0KLQlpZiAobmVzZm1yLT5yb290X3ZwYmwubGVhZl92cGJsKQotCQlrZnJlZShuZXNmbXItPnJvb3RfdnBibC5sZWFmX3ZwYmwpOwotCi0JZmFpbGVkX2xlYWZfdnBibF9hbGxvYzoKLQlpZiAobmVzZm1yLT5sZWFmX3BibF9jbnQgPT0gMCkgewotCQlpZiAobmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlKQotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgNDA5NiwgbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlLAotCQkJCQluZXNmbXItPnJvb3RfdnBibC5wYmxfcGJhc2UpOwotCX0gZWxzZQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCA4MTkyLCBuZXNmbXItPnJvb3RfdnBibC5wYmxfdmJhc2UsCi0JCQkJbmVzZm1yLT5yb290X3ZwYmwucGJsX3BiYXNlKTsKLQotCWZhaWxlZF92cGJsX2FsbG9jOgotCWlmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSB7CisJaWYgKCFyZXQgfHwgbWFqb3JfY29kZSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJaWYgKG5lc2Ztci0+bmVzbXIucGJsXzRrKQotCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNmbXItPm5lc21yLnBibHNfdXNlZDsKLQkJZWxzZQotCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQ7CisJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAl9CiAKLWZhaWxlZF92cGJsX2F2YWlsOgotCWtmcmVlKG5lc2Ztcik7Ci0KLQlmYWlsZWRfZm1yX2FsbG9jOgotCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsIHN0YWdfaW5kZXgpOwotCi0JZmFpbGVkX3Jlc291cmNlX2FsbG9jOgotCXJldHVybiBFUlJfUFRSKHJldCk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRVRJTUU7CisJZWxzZSBpZiAobWFqb3JfY29kZSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKLQotLyoqCi0gKiBuZXNfZGVhbGxvY19mbXIKKy8qCisgKiBuZXNfYWxsb2NfZmFzdF9yZWdfbXIKICAqLwotc3RhdGljIGludCBuZXNfZGVhbGxvY19mbXIoc3RydWN0IGliX2ZtciAqaWJmbXIpCitzdHJ1Y3QgaWJfbXIgKm5lc19hbGxvY19mYXN0X3JlZ19tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIGludCBtYXhfcGFnZV9saXN0X2xlbikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXNfbXIgKm5lc21yID0gdG9fbmVzbXJfZnJvbV9pYmZtcihpYmZtcik7Ci0Jc3RydWN0IG5lc19mbXIgKm5lc2ZtciA9IHRvX25lc2ZtcihuZXNtcik7Ci0Jc3RydWN0IG5lc192bmljICpuZXN2bmljID0gdG9fbmVzdm5pYyhpYmZtci0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbmVzX3BkICpuZXNwZCA9IHRvX25lc3BkKGlicGQpOworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IHRvX25lc3ZuaWMoaWJwZC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKLQlpbnQgaSA9IDA7Ci0JaW50IHJjOwogCi0JLyogZnJlZSB0aGUgcmVzb3VyY2VzICovCi0JaWYgKG5lc2Ztci0+bGVhZl9wYmxfY250ID09IDApIHsKLQkJLyogc2luZ2xlIFBCTCBjYXNlICovCi0JCWlmIChuZXNmbXItPnJvb3RfdnBibC5wYmxfdmJhc2UpCi0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCA0MDk2LCBuZXNmbXItPnJvb3RfdnBibC5wYmxfdmJhc2UsCi0JCQkJCW5lc2Ztci0+cm9vdF92cGJsLnBibF9wYmFzZSk7CisJdTMyIG5leHRfc3RhZ19pbmRleDsKKwl1OCBzdGFnX2tleSA9IDA7CisJdTMyIGRyaXZlcl9rZXkgPSAwOworCWludCBlcnIgPSAwOworCXUzMiBzdGFnX2luZGV4ID0gMDsKKwlzdHJ1Y3QgbmVzX21yICpuZXNtcjsKKwl1MzIgc3RhZzsKKwlpbnQgcmV0OworCXN0cnVjdCBpYl9tciAqaWJtcjsKKy8qCisgKiBOb3RlOiAgU2V0IHRvIGFsd2F5cyB1c2UgYSBmaXhlZCBsZW5ndGggc2luZ2xlIHBhZ2UgZW50cnkgUEJMLiAgVGhpcyBpcyB0byBhbGxvdworICoJIGZvciB0aGUgZmFzdF9yZWdfbXIgb3BlcmF0aW9uIHRvIGFsd2F5cyBrbm93IHRoZSBzaXplIG9mIHRoZSBQQkwuCisgKi8KKwlpZiAobWF4X3BhZ2VfbGlzdF9sZW4gPiAoTkVTXzRLX1BCTF9DSFVOS19TSVpFIC8gc2l6ZW9mKHU2NCkpKQorCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOworCisJZ2V0X3JhbmRvbV9ieXRlcygmbmV4dF9zdGFnX2luZGV4LCBzaXplb2YobmV4dF9zdGFnX2luZGV4KSk7CisJc3RhZ19rZXkgPSAodTgpbmV4dF9zdGFnX2luZGV4OworCW5leHRfc3RhZ19pbmRleCA+Pj0gODsKKwluZXh0X3N0YWdfaW5kZXggJT0gbmVzYWRhcHRlci0+bWF4X21yOworCisJZXJyID0gbmVzX2FsbG9jX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsCisJCQkJIG5lc2FkYXB0ZXItPm1heF9tciwgJnN0YWdfaW5kZXgsCisJCQkJICZuZXh0X3N0YWdfaW5kZXgpOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CisKKwluZXNtciA9IGt6YWxsb2Moc2l6ZW9mKCpuZXNtciksIEdGUF9LRVJORUwpOworCWlmICghbmVzbXIpIHsKKwkJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywgc3RhZ19pbmRleCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXN0YWcgPSBzdGFnX2luZGV4IDw8IDg7CisJc3RhZyB8PSBkcml2ZXJfa2V5OworCXN0YWcgKz0gKHUzMilzdGFnX2tleTsKKworCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiQWxsb2NhdGluZyBTVGFnIDB4JTA4WCBpbmRleCA9IDB4JTA4WFxuIiwKKwkJICBzdGFnLCBzdGFnX2luZGV4KTsKKworCXJldCA9IGFsbG9jX2Zhc3RfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIG1heF9wYWdlX2xpc3RfbGVuKTsKKworCWlmIChyZXQgPT0gMCkgeworCQluZXNtci0+aWJtci5ya2V5ID0gc3RhZzsKKwkJbmVzbXItPmlibXIubGtleSA9IHN0YWc7CisJCW5lc21yLT5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfRk1FTTsKKwkJaWJtciA9ICZuZXNtci0+aWJtcjsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbmVzZm1yLT5sZWFmX3BibF9jbnQ7IGkrKykgewotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgNDA5NiwgbmVzZm1yLT5yb290X3ZwYmwubGVhZl92cGJsW2ldLnBibF92YmFzZSwKLQkJCQkJbmVzZm1yLT5yb290X3ZwYmwubGVhZl92cGJsW2ldLnBibF9wYmFzZSk7Ci0JCX0KLQkJa2ZyZWUobmVzZm1yLT5yb290X3ZwYmwubGVhZl92cGJsKTsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgODE5MiwgbmVzZm1yLT5yb290X3ZwYmwucGJsX3ZiYXNlLAotCQkJCW5lc2Ztci0+cm9vdF92cGJsLnBibF9wYmFzZSk7CisJCWtmcmVlKG5lc21yKTsKKwkJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywgc3RhZ19pbmRleCk7CisJCWlibXIgPSBFUlJfUFRSKC1FTk9NRU0pOwogCX0KLQluZXNtci0+aWJtdy5kZXZpY2UgPSBpYmZtci0+ZGV2aWNlOwotCW5lc21yLT5pYm13LnBkID0gaWJmbXItPnBkOwotCW5lc21yLT5pYm13LnJrZXkgPSBpYmZtci0+cmtleTsKLQluZXNtci0+aWJtdy51b2JqZWN0ID0gTlVMTDsKKwlyZXR1cm4gaWJtcjsKK30KIAotCXJjID0gbmVzX2RlYWxsb2NfbXcoJm5lc21yLT5pYm13KTsKKy8qCisgKiBuZXNfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpuZXNfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KAorCQkJCQkJCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJCQkJCWludCBwYWdlX2xpc3RfbGVuKQoreworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IHRvX25lc3ZuaWMoaWJkZXYpOworCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGlmcnBsOworCXN0cnVjdCBuZXNfaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpwbmVzZnJwbDsKIAotCWlmICgocmMgPT0gMCkgJiYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkICE9IDApKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQlpZiAobmVzZm1yLT5uZXNtci5wYmxfNGspIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQ7Ci0JCQlXQVJOX09OKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpOwotCQl9IGVsc2UgewotCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQ7Ci0JCQlXQVJOX09OKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZV9saXN0X2xlbiA+IChORVNfNEtfUEJMX0NIVU5LX1NJWkUgLyBzaXplb2YodTY0KSkpCisJCXJldHVybiBFUlJfUFRSKC1FMkJJRyk7CisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgaWJfZmFzdF9yZWdfcGFnZV9saXN0IHN0cnVjdHVyZSwgdGhlCisJICogbmVzX2Zhc3RfYnBsIHN0cnVjdHVyZSwgYW5kIHRoZSBQTEIgdGFibGUuCisJICovCisJcG5lc2ZycGwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmVzX2liX2Zhc3RfcmVnX3BhZ2VfbGlzdCkgKworCQkJICAgcGFnZV9saXN0X2xlbiAqIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcG5lc2ZycGwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcGlmcnBsID0gJnBuZXNmcnBsLT5pYmZycGw7CisJcGlmcnBsLT5wYWdlX2xpc3QgPSAmcG5lc2ZycGwtPnBibDsKKwlwaWZycGwtPm1heF9wYWdlX2xpc3RfbGVuID0gcGFnZV9saXN0X2xlbjsKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBXUUUgUEJMCisJICovCisJcG5lc2ZycGwtPm5lc193cWVfcGJsLmt2YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LAorCQkJCQkJCSBwYWdlX2xpc3RfbGVuICogc2l6ZW9mKHU2NCksCisJCQkJCQkJICZwbmVzZnJwbC0+bmVzX3dxZV9wYmwucGFkZHIpOworCisJaWYgKCFwbmVzZnJwbC0+bmVzX3dxZV9wYmwua3ZhKSB7CisJCWtmcmVlKHBuZXNmcnBsKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQorCW5lc19kZWJ1ZyhORVNfREJHX01SLCAibmVzX2FsbG9jX2Zhc3RfcmVnX3BibDogbmVzX2ZycGwgPSAlcCwgIgorCQkgICJpYmZycGwgPSAlcCwgaWJmcnBsLnBhZ2VfbGlzdCA9ICVwLCBwYmwua3ZhID0gJXAsICIKKwkJICAicGJsLnBhZGRyPSAlcFxuIiwgcG5lc2ZycGwsICZwbmVzZnJwbC0+aWJmcnBsLAorCQkgIHBuZXNmcnBsLT5pYmZycGwucGFnZV9saXN0LCBwbmVzZnJwbC0+bmVzX3dxZV9wYmwua3ZhLAorCQkgICh2b2lkICopcG5lc2ZycGwtPm5lc193cWVfcGJsLnBhZGRyKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gcGlmcnBsOwogfQogCi0KLS8qKgotICogbmVzX21hcF9waHlzX2ZtcgorLyoKKyAqIG5lc19mcmVlX2Zhc3RfcmVnX3BhZ2VfbGlzdAogICovCi1zdGF0aWMgaW50IG5lc19tYXBfcGh5c19mbXIoc3RydWN0IGliX2ZtciAqaWJmbXIsIHU2NCAqcGFnZV9saXN0LAotCQlpbnQgbGlzdF9sZW4sIHU2NCBpb3ZhKQorc3RhdGljIHZvaWQgbmVzX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KHN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBpZnJwbCkKIHsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSB0b19uZXN2bmljKHBpZnJwbC0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OworCXN0cnVjdCBuZXNfaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpwbmVzZnJwbDsKKworCXBuZXNmcnBsID0gY29udGFpbmVyX29mKHBpZnJwbCwgc3RydWN0IG5lc19pYl9mYXN0X3JlZ19wYWdlX2xpc3QsIGliZnJwbCk7CisJLyoKKwkgKiBGcmVlIHRoZSBXUUUgUEJMLgorCSAqLworCXBjaV9mcmVlX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsCisJCQkgICAgcGlmcnBsLT5tYXhfcGFnZV9saXN0X2xlbiAqIHNpemVvZih1NjQpLAorCQkJICAgIHBuZXNmcnBsLT5uZXNfd3FlX3BibC5rdmEsCisJCQkgICAgcG5lc2ZycGwtPm5lc193cWVfcGJsLnBhZGRyKTsKKwkvKgorCSAqIEZyZWUgdGhlIFBCTCBzdHJ1Y3R1cmUKKwkgKi8KKwlrZnJlZShwbmVzZnJwbCk7CiB9CiAKLQotLyoqCi0gKiBuZXNfdW5tYXBfZnJtCi0gKi8KLXN0YXRpYyBpbnQgbmVzX3VubWFwX2ZtcihzdHJ1Y3QgbGlzdF9oZWFkICppYmZtcl9saXN0KQotewotCXJldHVybiAwOwotfQotCi0KLQogLyoqCiAgKiBuZXNfcXVlcnlfZGV2aWNlCiAgKi8KQEAgLTYzMywyMyArNTI3LDIzIEBACiAJcHJvcHMtPm1heF9xcF93ciA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X3FwX3dyIC0gMjsKIAlwcm9wcy0+bWF4X3NnZSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X3NnZTsKIAlwcm9wcy0+bWF4X2NxID0gbmVzaWJkZXYtPm1heF9jcTsKLQlwcm9wcy0+bWF4X2NxZSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X2NxZSAtIDE7CisJcHJvcHMtPm1heF9jcWUgPSBuZXNkZXYtPm5lc2FkYXB0ZXItPm1heF9jcWU7CiAJcHJvcHMtPm1heF9tciA9IG5lc2liZGV2LT5tYXhfbXI7CiAJcHJvcHMtPm1heF9tdyA9IG5lc2liZGV2LT5tYXhfbXI7CiAJcHJvcHMtPm1heF9wZCA9IG5lc2liZGV2LT5tYXhfcGQ7CiAJcHJvcHMtPm1heF9zZ2VfcmQgPSAxOwogCXN3aXRjaCAobmVzZGV2LT5uZXNhZGFwdGVyLT5tYXhfaXJycV93cikgewogCQljYXNlIDA6Ci0JCQlwcm9wcy0+bWF4X3FwX3JkX2F0b20gPSAxOworCQkJcHJvcHMtPm1heF9xcF9yZF9hdG9tID0gMjsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlwcm9wcy0+bWF4X3FwX3JkX2F0b20gPSA0OworCQkJcHJvcHMtPm1heF9xcF9yZF9hdG9tID0gODsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlwcm9wcy0+bWF4X3FwX3JkX2F0b20gPSAxNjsKKwkJCXByb3BzLT5tYXhfcXBfcmRfYXRvbSA9IDMyOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCXByb3BzLT5tYXhfcXBfcmRfYXRvbSA9IDMyOworCQkJcHJvcHMtPm1heF9xcF9yZF9hdG9tID0gNjQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByb3BzLT5tYXhfcXBfcmRfYXRvbSA9IDA7CkBAIC0xMTIxLDYgKzEwMTUsNyBAQAogCQlrdW5tYXAobmVzcXAtPnBhZ2UpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbmVzcXAtPnNxX2ttYXBwZWQgPSAxOwogCW5lc3FwLT5od3FwLnEyX3ZiYXNlID0gbWVtOwogCW1lbSArPSAyNTY7CiAJbWVtc2V0KG5lc3FwLT5od3FwLnEyX3ZiYXNlLCAwLCAyNTYpOwpAQCAtMTE5OCw3ICsxMDkzLDEwIEBACiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsIG5lc3FwLT5xcF9tZW1fc2l6ZSwgbmVzcXAtPmh3cXAucTJfdmJhc2UsIG5lc3FwLT5od3FwLnEyX3BiYXNlKTsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgMjU2LCBuZXNxcC0+cGJsX3ZiYXNlLCBuZXNxcC0+cGJsX3BiYXNlICk7CiAJCW5lc3FwLT5wYmxfdmJhc2UgPSBOVUxMOwotCQlrdW5tYXAobmVzcXAtPnBhZ2UpOworCQlpZiAobmVzcXAtPnNxX2ttYXBwZWQpIHsKKwkJCW5lc3FwLT5zcV9rbWFwcGVkID0gMDsKKwkJCWt1bm1hcChuZXNxcC0+cGFnZSk7CisJCX0KIAl9CiB9CiAKQEAgLTE1MDQsOCArMTQwMiw2IEBACiAJCQluZXNfZGVidWcoTkVTX0RCR19RUCwgIlFQJXUgc3RydWN0dXJlIGxvY2F0ZWQgQCVwLlNpemUgPSAldS5cbiIsCiAJCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBuZXNxcCwgKHUzMilzaXplb2YoKm5lc3FwKSk7CiAJCQlzcGluX2xvY2tfaW5pdCgmbmVzcXAtPmxvY2spOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmbmVzcXAtPnN0YXRlX3dhaXRxKTsKLQkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5lc3FwLT5raWNrX3dhaXRxKTsKIAkJCW5lc19hZGRfcmVmKCZuZXNxcC0+aWJxcCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTE1MTMsNiArMTQwOSw4IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKKwluZXNxcC0+c2lnX2FsbCA9IChpbml0X2F0dHItPnNxX3NpZ190eXBlID09IElCX1NJR05BTF9BTExfV1IpOworCiAJLyogdXBkYXRlIHRoZSBRUCB0YWJsZSAqLwogCW5lc2Rldi0+bmVzYWRhcHRlci0+cXBfdGFibGVbbmVzcXAtPmh3cXAucXBfaWQtTkVTX0ZJUlNUX1FQTl0gPSBuZXNxcDsKIAluZXNfZGVidWcoTkVTX0RCR19RUCwgIm5ldGRldiByZWZjbnQ9JXVcbiIsCkBAIC0xNjA3LDggKzE1MDUsMTAgQEAKIAkJCQluZXNfdWNvbnRleHQtPmZpcnN0X2ZyZWVfd3EgPSBuZXNxcC0+bW1hcF9zcV9kYl9pbmRleDsKIAkJCX0KIAkJfQotCQlpZiAobmVzcXAtPnBibF9wYmFzZSkKKwkJaWYgKG5lc3FwLT5wYmxfcGJhc2UgJiYgbmVzcXAtPnNxX2ttYXBwZWQpIHsKKwkJCW5lc3FwLT5zcV9rbWFwcGVkID0gMDsKIAkJCWt1bm1hcChuZXNxcC0+cGFnZSk7CisJCX0KIAl9IGVsc2UgewogCQkvKiBDbGVhbiBhbnkgcGVuZGluZyBjb21wbGV0aW9ucyBmcm9tIHRoZSBjcShzKSAqLwogCQlpZiAobmVzcXAtPm5lc3NjcSkKQEAgLTE2NDksNiArMTU0OSw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKGVudHJpZXMgPiBuZXNhZGFwdGVyLT5tYXhfY3FlKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwogCWVyciA9IG5lc19hbGxvY19yZXNvdXJjZShuZXNhZGFwdGVyLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfY3FzLAogCQkJbmVzYWRhcHRlci0+bWF4X2NxLCAmY3FfbnVtLCAmbmVzYWRhcHRlci0+bmV4dF9jcSk7CiAJaWYgKGVycikgewpAQCAtMjYwNiw5ICsyNTA5LDYgQEAKIAkJCXN0YWcgPSBzdGFnX2luZGV4IDw8IDg7CiAJCQlzdGFnIHw9IGRyaXZlcl9rZXk7CiAJCQlzdGFnICs9ICh1MzIpc3RhZ19rZXk7Ci0JCQlpZiAoc3RhZyA9PSAwKSB7Ci0JCQkJc3RhZyA9IDE7Ci0JCQl9CiAKIAkJCWlvdmFfc3RhcnQgPSB2aXJ0OwogCQkJLyogTWFrZSB0aGUgbGVhZiBQQkwgdGhlIHJvb3QgaWYgb25seSBvbmUgUEJMICovCkBAIC0zMTA5LDcgKzMwMDksNiBAQAogCQkJCQkJCQkiIGFscmVhZHkgZG9uZSBiYXNlZCBvbiBodyBzdGF0ZS5cbiIsCiAJCQkJCQkJCW5lc3FwLT5od3FwLnFwX2lkKTsKIAkJCQkJCWlzc3VlX21vZGlmeV9xcCA9IDA7Ci0JCQkJCQluZXNxcC0+aW5fZGlzY29ubmVjdCA9IDA7CiAJCQkJCX0KIAkJCQkJc3dpdGNoIChuZXNxcC0+aHdfaXdhcnBfc3RhdGUpIHsKIAkJCQkJCWNhc2UgTkVTX0FFUUVfSVdBUlBfU1RBVEVfQ0xPU0lORzoKQEAgLTMxMjIsNyArMzAyMSw2IEBACiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgogCQkJCQkJCW5leHRfaXdhcnBfc3RhdGUgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0NMT1NJTkc7Ci0JCQkJCQkJbmVzcXAtPmluX2Rpc2Nvbm5lY3QgPSAxOwogCQkJCQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IE5FU19BRVFFX0lXQVJQX1NUQVRFX0NMT1NJTkc7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCX0KQEAgLTMxMzksNyArMzAzNyw2IEBACiAJCQkJbmV4dF9pd2FycF9zdGF0ZSA9IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfVEVSTUlOQVRFOwogCQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IE5FU19BRVFFX0lXQVJQX1NUQVRFX1RFUk1JTkFURTsKIAkJCQlpc3N1ZV9tb2RpZnlfcXAgPSAxOwotCQkJCW5lc3FwLT5pbl9kaXNjb25uZWN0ID0gMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgSUJfUVBTX0VSUjoKIAkJCWNhc2UgSUJfUVBTX1JFU0VUOgpAQCAtMzE2Miw3ICszMDU5LDYgQEAKIAkJCQlpZiAoKG5lc3FwLT5od190Y3Bfc3RhdGUgPiBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEKSAmJgogCQkJCQkJKG5lc3FwLT5od190Y3Bfc3RhdGUgIT0gTkVTX0FFUUVfVENQX1NUQVRFX1RJTUVfV0FJVCkpIHsKIAkJCQkJbmV4dF9pd2FycF9zdGF0ZSB8PSBORVNfQ1FQX1FQX1JFU0VUOwotCQkJCQluZXNxcC0+aW5fZGlzY29ubmVjdCA9IDE7CiAJCQkJfSBlbHNlIHsKIAkJCQkJbmVzX2RlYnVnKE5FU19EQkdfTU9EX1FQLCAiUVAldSBOT1Qgc2V0dGluZyBORVNfQ1FQX1FQX1JFU0VUIHNpbmNlIFRDUCBzdGF0ZSA9ICV1XG4iLAogCQkJCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBuZXNxcC0+aHdfdGNwX3N0YXRlKTsKQEAgLTMzNzMsMjEgKzMyNjksMTcgQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXN0cnVjdCBuZXNfcXAgKm5lc3FwID0gdG9fbmVzcXAoaWJxcCk7CiAJc3RydWN0IG5lc19od19xcF93cWUgKndxZTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXUzMiBxc2l6ZSA9IG5lc3FwLT5od3FwLnNxX3NpemU7CiAJdTMyIGhlYWQ7Ci0JdTMyIHdxZV9taXNjOwotCXUzMiB3cWVfY291bnQ7CisJdTMyIHdxZV9taXNjID0gMDsKKwl1MzIgd3FlX2NvdW50ID0gMDsKIAl1MzIgY291bnRlcjsKLQl1MzIgdG90YWxfcGF5bG9hZF9sZW5ndGg7CiAKLQllcnIgPSAwOwotCXdxZV9taXNjID0gMDsKLQl3cWVfY291bnQgPSAwOwotCXRvdGFsX3BheWxvYWRfbGVuZ3RoID0gMDsKLQotCWlmIChuZXNxcC0+aWJxcF9zdGF0ZSA+IElCX1FQU19SVFMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChuZXNxcC0+aWJxcF9zdGF0ZSA+IElCX1FQU19SVFMpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTM0MTMsOTQgKzMzMDUsMjA4IEBACiAJCXU2NHRlbXAgPSAodTY0KShpYl93ci0+d3JfaWQpOwogCQlzZXRfd3FlXzY0Yml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX0NPTVBfU0NSQVRDSF9MT1dfSURYLAogCQkJCQl1NjR0ZW1wKTsKLQkJCXN3aXRjaCAoaWJfd3ItPm9wY29kZSkgewotCQkJCWNhc2UgSUJfV1JfU0VORDoKLQkJCQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpIHsKLQkJCQkJCXdxZV9taXNjID0gTkVTX0lXQVJQX1NRX09QX1NFTkRTRTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXdxZV9taXNjID0gTkVTX0lXQVJQX1NRX09QX1NFTkQ7Ci0JCQkJCX0KLQkJCQkJaWYgKGliX3dyLT5udW1fc2dlID4gbmVzZGV2LT5uZXNhZGFwdGVyLT5tYXhfc2dlKSB7Ci0JCQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9GRU5DRSkgewotCQkJCQkJd3FlX21pc2MgfD0gTkVTX0lXQVJQX1NRX1dRRV9MT0NBTF9GRU5DRTsKLQkJCQkJfQotCQkJCQlpZiAoKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9JTkxJTkUpICYmCi0JCQkJCQkJKChuZXNfZHJ2X29wdCAmIE5FU19EUlZfT1BUX05PX0lOTElORV9EQVRBKSA9PSAwKSAmJgotCQkJCQkJCShpYl93ci0+c2dfbGlzdFswXS5sZW5ndGggPD0gNjQpKSB7Ci0JCQkJCQltZW1jcHkoJndxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfSU1NX0RBVEFfU1RBUlRfSURYXSwKLQkJCQkJCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpYl93ci0+c2dfbGlzdFswXS5hZGRyLCBpYl93ci0+c2dfbGlzdFswXS5sZW5ndGgpOwotCQkJCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9UT1RBTF9QQVlMT0FEX0lEWCwKLQkJCQkJCQkJaWJfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoKTsKLQkJCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9XUUVfSU1NX0RBVEE7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlmaWxsX3dxZV9zZ19zZW5kKHdxZSwgaWJfd3IsIDEpOwotCQkJCQl9CisJCXN3aXRjaCAoaWJfd3ItPm9wY29kZSkgeworCQljYXNlIElCX1dSX1NFTkQ6CisJCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lOVjoKKwkJCWlmIChJQl9XUl9TRU5EID09IGliX3dyLT5vcGNvZGUpIHsKKwkJCQlpZiAoaWJfd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQkJd3FlX21pc2MgPSBORVNfSVdBUlBfU1FfT1BfU0VORFNFOworCQkJCWVsc2UKKwkJCQkJd3FlX21pc2MgPSBORVNfSVdBUlBfU1FfT1BfU0VORDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCQkJCXdxZV9taXNjID0gTkVTX0lXQVJQX1NRX09QX1NFTkRTRUlOVjsKKwkJCQllbHNlCisJCQkJCXdxZV9taXNjID0gTkVTX0lXQVJQX1NRX09QX1NFTkRJTlY7CiAKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgotCQkJCQl3cWVfbWlzYyA9IE5FU19JV0FSUF9TUV9PUF9SRE1BVzsKLQkJCQkJaWYgKGliX3dyLT5udW1fc2dlID4gbmVzZGV2LT5uZXNhZGFwdGVyLT5tYXhfc2dlKSB7Ci0JCQkJCQluZXNfZGVidWcoTkVTX0RCR19JV19UWCwgIkV4Y2VlZGVkIG1heCBzZ2UsIGliX3dyPSV1LCBtYXg9JXVcbiIsCi0JCQkJCQkJCWliX3dyLT5udW1fc2dlLAotCQkJCQkJCQluZXNkZXYtPm5lc2FkYXB0ZXItPm1heF9zZ2UpOwotCQkJCQkJZXJyID0gLUVJTlZBTDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCWlmIChpYl93ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfRkVOQ0UpIHsKLQkJCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9XUUVfTE9DQUxfRkVOQ0U7Ci0JCQkJCX0KLQotCQkJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX1JETUFfU1RBR19JRFgsCi0JCQkJCQkJaWJfd3ItPndyLnJkbWEucmtleSk7Ci0JCQkJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsIE5FU19JV0FSUF9TUV9XUUVfUkRNQV9UT19MT1dfSURYLAotCQkJCQkJCWliX3dyLT53ci5yZG1hLnJlbW90ZV9hZGRyKTsKLQotCQkJCQlpZiAoKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9JTkxJTkUpICYmCi0JCQkJCQkJKChuZXNfZHJ2X29wdCAmIE5FU19EUlZfT1BUX05PX0lOTElORV9EQVRBKSA9PSAwKSAmJgotCQkJCQkJCShpYl93ci0+c2dfbGlzdFswXS5sZW5ndGggPD0gNjQpKSB7Ci0JCQkJCQltZW1jcHkoJndxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfSU1NX0RBVEFfU1RBUlRfSURYXSwKLQkJCQkJCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpYl93ci0+c2dfbGlzdFswXS5hZGRyLCBpYl93ci0+c2dfbGlzdFswXS5sZW5ndGgpOwotCQkJCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9UT1RBTF9QQVlMT0FEX0lEWCwKLQkJCQkJCQkJaWJfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoKTsKLQkJCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9XUUVfSU1NX0RBVEE7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlmaWxsX3dxZV9zZ19zZW5kKHdxZSwgaWJfd3IsIDEpOwotCQkJCQl9Ci0JCQkJCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfUkRNQV9MRU5HVEhfSURYXSA9Ci0JCQkJCQkJd3FlLT53cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9UT1RBTF9QQVlMT0FEX0lEWF07Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgotCQkJCQkvKiBpV0FSUCBvbmx5IHN1cHBvcnRzIDEgc2dlIGZvciBSRE1BIHJlYWRzICovCi0JCQkJCWlmIChpYl93ci0+bnVtX3NnZSA+IDEpIHsKLQkJCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lXX1RYLCAiRXhjZWVkZWQgbWF4IHNnZSwgaWJfd3I9JXUsIG1heD0xXG4iLAotCQkJCQkJCQlpYl93ci0+bnVtX3NnZSk7Ci0JCQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJd3FlX21pc2MgPSBORVNfSVdBUlBfU1FfT1BfUkRNQVI7Ci0JCQkJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsIE5FU19JV0FSUF9TUV9XUUVfUkRNQV9UT19MT1dfSURYLAotCQkJCQkJCWliX3dyLT53ci5yZG1hLnJlbW90ZV9hZGRyKTsKLQkJCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9SRE1BX1NUQUdfSURYLAotCQkJCQkJCWliX3dyLT53ci5yZG1hLnJrZXkpOwotCQkJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX1JETUFfTEVOR1RIX0lEWCwKLQkJCQkJCQlpYl93ci0+c2dfbGlzdC0+bGVuZ3RoKTsKLQkJCQkJc2V0X3dxZV82NGJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9GUkFHMF9MT1dfSURYLAotCQkJCQkJCWliX3dyLT5zZ19saXN0LT5hZGRyKTsKLQkJCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9TVEFHMF9JRFgsCi0JCQkJCQkJaWJfd3ItPnNnX2xpc3QtPmxrZXkpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBlcnJvciAqLwotCQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCQlicmVhazsKKwkJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX0lOVl9TVEFHX0xPV19JRFgsCisJCQkJCQkgICAgaWJfd3ItPmV4LmludmFsaWRhdGVfcmtleSk7CiAJCQl9CiAKLQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TSUdOQUxFRCkgewotCQkJd3FlX21pc2MgfD0gTkVTX0lXQVJQX1NRX1dRRV9TSUdOQUxFRF9DT01QTDsKKwkJCWlmIChpYl93ci0+bnVtX3NnZSA+IG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X3NnZSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChpYl93ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfRkVOQ0UpCisJCQkJd3FlX21pc2MgfD0gTkVTX0lXQVJQX1NRX1dRRV9MT0NBTF9GRU5DRTsKKworCQkJaWYgKChpYl93ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfSU5MSU5FKSAmJgorCQkJICAgICgobmVzX2Rydl9vcHQgJiBORVNfRFJWX09QVF9OT19JTkxJTkVfREFUQSkgPT0gMCkgJiYKKwkJCSAgICAgKGliX3dyLT5zZ19saXN0WzBdLmxlbmd0aCA8PSA2NCkpIHsKKwkJCQltZW1jcHkoJndxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfSU1NX0RBVEFfU1RBUlRfSURYXSwKKwkJCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylpYl93ci0+c2dfbGlzdFswXS5hZGRyLCBpYl93ci0+c2dfbGlzdFswXS5sZW5ndGgpOworCQkJCXNldF93cWVfMzJiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsIE5FU19JV0FSUF9TUV9XUUVfVE9UQUxfUEFZTE9BRF9JRFgsCisJCQkJCQkgICAgaWJfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoKTsKKwkJCQl3cWVfbWlzYyB8PSBORVNfSVdBUlBfU1FfV1FFX0lNTV9EQVRBOworCQkJfSBlbHNlIHsKKwkJCQlmaWxsX3dxZV9zZ19zZW5kKHdxZSwgaWJfd3IsIDEpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJd3FlX21pc2MgPSBORVNfSVdBUlBfU1FfT1BfUkRNQVc7CisJCQlpZiAoaWJfd3ItPm51bV9zZ2UgPiBuZXNkZXYtPm5lc2FkYXB0ZXItPm1heF9zZ2UpIHsKKwkJCQluZXNfZGVidWcoTkVTX0RCR19JV19UWCwgIkV4Y2VlZGVkIG1heCBzZ2UsIGliX3dyPSV1LCBtYXg9JXVcbiIsCisJCQkJCSAgaWJfd3ItPm51bV9zZ2UsIG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X3NnZSk7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9GRU5DRSkKKwkJCQl3cWVfbWlzYyB8PSBORVNfSVdBUlBfU1FfV1FFX0xPQ0FMX0ZFTkNFOworCisJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX1JETUFfU1RBR19JRFgsCisJCQkJCSAgICBpYl93ci0+d3IucmRtYS5ya2V5KTsKKwkJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsIE5FU19JV0FSUF9TUV9XUUVfUkRNQV9UT19MT1dfSURYLAorCQkJCQkgICAgaWJfd3ItPndyLnJkbWEucmVtb3RlX2FkZHIpOworCisJCQlpZiAoKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9JTkxJTkUpICYmCisJCQkgICAgKChuZXNfZHJ2X29wdCAmIE5FU19EUlZfT1BUX05PX0lOTElORV9EQVRBKSA9PSAwKSAmJgorCQkJICAgICAoaWJfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoIDw9IDY0KSkgeworCQkJCW1lbWNweSgmd3FlLT53cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9JTU1fREFUQV9TVEFSVF9JRFhdLAorCQkJCSAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWliX3dyLT5zZ19saXN0WzBdLmFkZHIsIGliX3dyLT5zZ19saXN0WzBdLmxlbmd0aCk7CisJCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9UT1RBTF9QQVlMT0FEX0lEWCwKKwkJCQkJCSAgICBpYl93ci0+c2dfbGlzdFswXS5sZW5ndGgpOworCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9XUUVfSU1NX0RBVEE7CisJCQl9IGVsc2UgeworCQkJCWZpbGxfd3FlX3NnX3NlbmQod3FlLCBpYl93ciwgMSk7CisJCQl9CisKKwkJCXdxZS0+d3FlX3dvcmRzW05FU19JV0FSUF9TUV9XUUVfUkRNQV9MRU5HVEhfSURYXSA9CisJCQkJd3FlLT53cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9UT1RBTF9QQVlMT0FEX0lEWF07CisJCQlicmVhazsKKwkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJCWNhc2UgSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOgorCQkJLyogaVdBUlAgb25seSBzdXBwb3J0cyAxIHNnZSBmb3IgUkRNQSByZWFkcyAqLworCQkJaWYgKGliX3dyLT5udW1fc2dlID4gMSkgeworCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lXX1RYLCAiRXhjZWVkZWQgbWF4IHNnZSwgaWJfd3I9JXUsIG1heD0xXG4iLAorCQkJCQkgIGliX3dyLT5udW1fc2dlKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGliX3dyLT5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEKSB7CisJCQkJd3FlX21pc2MgPSBORVNfSVdBUlBfU1FfT1BfUkRNQVI7CisJCQl9IGVsc2UgeworCQkJCXdxZV9taXNjID0gTkVTX0lXQVJQX1NRX09QX1JETUFSX0xPQ0lOVjsKKwkJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX0lOVl9TVEFHX0xPV19JRFgsCisJCQkJCQkgICAgaWJfd3ItPmV4LmludmFsaWRhdGVfcmtleSk7CisJCQl9CisKKwkJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsIE5FU19JV0FSUF9TUV9XUUVfUkRNQV9UT19MT1dfSURYLAorCQkJCQkgICAgaWJfd3ItPndyLnJkbWEucmVtb3RlX2FkZHIpOworCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9SRE1BX1NUQUdfSURYLAorCQkJCQkgICAgaWJfd3ItPndyLnJkbWEucmtleSk7CisJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLCBORVNfSVdBUlBfU1FfV1FFX1JETUFfTEVOR1RIX0lEWCwKKwkJCQkJICAgIGliX3dyLT5zZ19saXN0LT5sZW5ndGgpOworCQkJc2V0X3dxZV82NGJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9GUkFHMF9MT1dfSURYLAorCQkJCQkgICAgaWJfd3ItPnNnX2xpc3QtPmFkZHIpOworCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywgTkVTX0lXQVJQX1NRX1dRRV9TVEFHMF9JRFgsCisJCQkJCSAgICBpYl93ci0+c2dfbGlzdC0+bGtleSk7CisJCQlicmVhazsKKwkJY2FzZSBJQl9XUl9MT0NBTF9JTlY6CisJCQl3cWVfbWlzYyA9IE5FU19JV0FSUF9TUV9PUF9MT0NJTlY7CisJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLAorCQkJCQkgICAgTkVTX0lXQVJQX1NRX0xPQ0lOVl9XUUVfSU5WX1NUQUdfSURYLAorCQkJCQkgICAgaWJfd3ItPmV4LmludmFsaWRhdGVfcmtleSk7CisJCQlicmVhazsKKwkJY2FzZSBJQl9XUl9GQVNUX1JFR19NUjoKKwkJeworCQkJaW50IGk7CisJCQlpbnQgZmxhZ3MgPSBpYl93ci0+d3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzOworCQkJc3RydWN0IG5lc19pYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBuZXNmcnBsID0KKwkJCQljb250YWluZXJfb2YoaWJfd3ItPndyLmZhc3RfcmVnLnBhZ2VfbGlzdCwKKwkJCQkJICAgICBzdHJ1Y3QgbmVzX2liX2Zhc3RfcmVnX3BhZ2VfbGlzdCwKKwkJCQkJICAgICBpYmZycGwpOworCQkJdTY0ICpzcmNfcGFnZV9saXN0ID0gcG5lc2ZycGwtPmliZnJwbC5wYWdlX2xpc3Q7CisJCQl1NjQgKmRzdF9wYWdlX2xpc3QgPSBwbmVzZnJwbC0+bmVzX3dxZV9wYmwua3ZhOworCisJCQlpZiAoaWJfd3ItPndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPgorCQkJICAgIChORVNfNEtfUEJMX0NIVU5LX1NJWkUgLyBzaXplb2YodTY0KSkpIHsKKwkJCQluZXNfZGVidWcoTkVTX0RCR19JV19UWCwgIlNRX0ZNUjogYmFkIHBhZ2VfbGlzdF9sZW5cbiIpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQl3cWVfbWlzYyA9IE5FU19JV0FSUF9TUV9PUF9GQVNUX1JFRzsKKwkJCXNldF93cWVfNjRiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsCisJCQkJCSAgICBORVNfSVdBUlBfU1FfRk1SX1dRRV9WQV9GQk9fTE9XX0lEWCwKKwkJCQkJICAgIGliX3dyLT53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0KTsKKwkJCXNldF93cWVfMzJiaXRfdmFsdWUod3FlLT53cWVfd29yZHMsCisJCQkJCSAgICBORVNfSVdBUlBfU1FfRk1SX1dRRV9MRU5HVEhfTE9XX0lEWCwKKwkJCQkJICAgIGliX3dyLT53ci5mYXN0X3JlZy5sZW5ndGgpOworCQkJc2V0X3dxZV8zMmJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywKKwkJCQkJICAgIE5FU19JV0FSUF9TUV9GTVJfV1FFX01SX1NUQUdfSURYLAorCQkJCQkgICAgaWJfd3ItPndyLmZhc3RfcmVnLnJrZXkpOworCQkJLyogU2V0IHBhZ2Ugc2l6ZTogKi8KKwkJCWlmIChpYl93ci0+d3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9PSAxMikgeworCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9GTVJfV1FFX1BBR0VfU0laRV80SzsKKwkJCX0gZWxzZSBpZiAoaWJfd3ItPndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPT0gMjEpIHsKKwkJCQl3cWVfbWlzYyB8PSBORVNfSVdBUlBfU1FfRk1SX1dRRV9QQUdFX1NJWkVfMk07CisJCQl9IGVsc2UgeworCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lXX1RYLCAiSW52YWxpZCBwYWdlIHNoaWZ0LCIKKwkJCQkJICAiIGliX3dyPSV1LCBtYXg9MVxuIiwgaWJfd3ItPm51bV9zZ2UpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBTZXQgYWNjZXNzX2ZsYWdzICovCisJCQl3cWVfbWlzYyB8PSBORVNfSVdBUlBfU1FfRk1SX1dRRV9SSUdIVFNfRU5BQkxFX0xPQ0FMX1JFQUQ7CisJCQlpZiAoZmxhZ3MgJiBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpCisJCQkJd3FlX21pc2MgfD0gTkVTX0lXQVJQX1NRX0ZNUl9XUUVfUklHSFRTX0VOQUJMRV9MT0NBTF9XUklURTsKKworCQkJaWYgKGZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9XUklURSkKKwkJCQl3cWVfbWlzYyB8PSBORVNfSVdBUlBfU1FfRk1SX1dRRV9SSUdIVFNfRU5BQkxFX1JFTU9URV9XUklURTsKKworCQkJaWYgKGZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9SRUFEKQorCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9GTVJfV1FFX1JJR0hUU19FTkFCTEVfUkVNT1RFX1JFQUQ7CisKKwkJCWlmIChmbGFncyAmIElCX0FDQ0VTU19NV19CSU5EKQorCQkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9GTVJfV1FFX1JJR0hUU19FTkFCTEVfV0lORE9XX0JJTkQ7CisKKwkJCS8qIEZpbGwgaW4gUEJMIGluZm86ICovCisJCQlpZiAoaWJfd3ItPndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPgorCQkJICAgIHBuZXNmcnBsLT5pYmZycGwubWF4X3BhZ2VfbGlzdF9sZW4pIHsKKwkJCQluZXNfZGVidWcoTkVTX0RCR19JV19UWCwgIkludmFsaWQgcGFnZSBsaXN0IGxlbmd0aCwiCisJCQkJCSAgIiBpYl93cj0lcCwgdmFsdWU9JXUsIG1heD0ldVxuIiwKKwkJCQkJICBpYl93ciwgaWJfd3ItPndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4sCisJCQkJCSAgcG5lc2ZycGwtPmliZnJwbC5tYXhfcGFnZV9saXN0X2xlbik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2V0X3dxZV82NGJpdF92YWx1ZSh3cWUtPndxZV93b3JkcywKKwkJCQkJICAgIE5FU19JV0FSUF9TUV9GTVJfV1FFX1BCTF9BRERSX0xPV19JRFgsCisJCQkJCSAgICBwbmVzZnJwbC0+bmVzX3dxZV9wYmwucGFkZHIpOworCisJCQlzZXRfd3FlXzMyYml0X3ZhbHVlKHdxZS0+d3FlX3dvcmRzLAorCQkJCQkgICAgTkVTX0lXQVJQX1NRX0ZNUl9XUUVfUEJMX0xFTkdUSF9JRFgsCisJCQkJCSAgICBpYl93ci0+d3IuZmFzdF9yZWcucGFnZV9saXN0X2xlbiAqIDgpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgaWJfd3ItPndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW47IGkrKykKKwkJCQlkc3RfcGFnZV9saXN0W2ldID0gY3B1X3RvX2xlNjQoc3JjX3BhZ2VfbGlzdFtpXSk7CisKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0lXX1RYLCAiU1FfRk1SOiBpb3ZhX3N0YXJ0OiAlcCwgIgorCQkJCSAgImxlbmd0aDogJWQsIHJrZXk6ICUweCwgcGdsX3BhZGRyOiAlcCwgIgorCQkJCSAgInBhZ2VfbGlzdF9sZW46ICV1LCB3cWVfbWlzYzogJXhcbiIsCisJCQkJICAodm9pZCAqKWliX3dyLT53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0LAorCQkJCSAgaWJfd3ItPndyLmZhc3RfcmVnLmxlbmd0aCwKKwkJCQkgIGliX3dyLT53ci5mYXN0X3JlZy5ya2V5LAorCQkJCSAgKHZvaWQgKilwbmVzZnJwbC0+bmVzX3dxZV9wYmwucGFkZHIsCisJCQkJICBpYl93ci0+d3IuZmFzdF9yZWcucGFnZV9saXN0X2xlbiwKKwkJCQkgIHdxZV9taXNjKTsKKwkJCWJyZWFrOwogCQl9CisJCWRlZmF1bHQ6CisJCQkvKiBlcnJvciAqLworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCWlmICgoaWJfd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NJR05BTEVEKSB8fCBuZXNxcC0+c2lnX2FsbCkKKwkJCXdxZV9taXNjIHw9IE5FU19JV0FSUF9TUV9XUUVfU0lHTkFMRURfQ09NUEw7CisKIAkJd3FlLT53cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9NSVNDX0lEWF0gPSBjcHVfdG9fbGUzMih3cWVfbWlzYyk7CiAKIAkJaWJfd3IgPSBpYl93ci0+bmV4dDsKQEAgLTM1MjIsNiArMzUyOCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwogCitvdXQ6CiAJaWYgKGVycikKIAkJKmJhZF93ciA9IGliX3dyOwogCXJldHVybiBlcnI7CkBAIC0zNTQ4LDggKzM1NTUsMTAgQEAKIAl1MzIgY291bnRlcjsKIAl1MzIgdG90YWxfcGF5bG9hZF9sZW5ndGg7CiAKLQlpZiAobmVzcXAtPmlicXBfc3RhdGUgPiBJQl9RUFNfUlRTKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobmVzcXAtPmlicXBfc3RhdGUgPiBJQl9RUFNfUlRTKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0zNjEyLDYgKzM2MjEsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKIAorb3V0OgogCWlmIChlcnIpCiAJCSpiYWRfd3IgPSBpYl93cjsKIAlyZXR1cm4gZXJyOwpAQCAtMzcyMCw2ICszNzMwLDEyIEBACiAJCQkJCQluZXNfZGVidWcoTkVTX0RCR19DUSwgIk9wZXJhdGlvbiA9IFNlbmQuXG4iKTsKIAkJCQkJCWVudHJ5LT5vcGNvZGUgPSBJQl9XQ19TRU5EOwogCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgTkVTX0lXQVJQX1NRX09QX0xPQ0lOVjoKKwkJCQkJCWVudHJ5LT5vcGNvZGUgPSBJQl9XUl9MT0NBTF9JTlY7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBORVNfSVdBUlBfU1FfT1BfRkFTVF9SRUc6CisJCQkJCQllbnRyeS0+b3Bjb2RlID0gSUJfV0NfRkFTVF9SRUdfTVI7CisJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQluZXNxcC0+aHdxcC5zcV90YWlsID0gKHdxZV9pbmRleCsxKSYobmVzcXAtPmh3cXAuc3Ffc2l6ZSAtIDEpOwpAQCAtMzg5MCwxMCArMzkwNiw5IEBACiAJbmVzaWJkZXYtPmliZGV2LmRlYWxsb2NfbXcgPSBuZXNfZGVhbGxvY19tdzsKIAluZXNpYmRldi0+aWJkZXYuYmluZF9tdyA9IG5lc19iaW5kX213OwogCi0JbmVzaWJkZXYtPmliZGV2LmFsbG9jX2ZtciA9IG5lc19hbGxvY19mbXI7Ci0JbmVzaWJkZXYtPmliZGV2LnVubWFwX2ZtciA9IG5lc191bm1hcF9mbXI7Ci0JbmVzaWJkZXYtPmliZGV2LmRlYWxsb2NfZm1yID0gbmVzX2RlYWxsb2NfZm1yOwotCW5lc2liZGV2LT5pYmRldi5tYXBfcGh5c19mbXIgPSBuZXNfbWFwX3BoeXNfZm1yOworCW5lc2liZGV2LT5pYmRldi5hbGxvY19mYXN0X3JlZ19tciA9IG5lc19hbGxvY19mYXN0X3JlZ19tcjsKKwluZXNpYmRldi0+aWJkZXYuYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0ID0gbmVzX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdDsKKwluZXNpYmRldi0+aWJkZXYuZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3QgPSBuZXNfZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3Q7CiAKIAluZXNpYmRldi0+aWJkZXYuYXR0YWNoX21jYXN0ID0gbmVzX211bHRpY2FzdF9hdHRhY2g7CiAJbmVzaWJkZXYtPmliZGV2LmRldGFjaF9tY2FzdCA9IG5lc19tdWx0aWNhc3RfZGV0YWNoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKaW5kZXggODk4MjJkNy4uMmRmOTk5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0xMzUsMTkgKzEzNSwxNSBAQAogCXN0cnVjdCBpYl9xcCAgICAgICAgICBpYnFwOwogCXZvaWQgICAgICAgICAgICAgICAgICAqYWxsb2NhdGVkX2J1ZmZlcjsKIAlzdHJ1Y3QgaXdfY21faWQgICAgICAgKmNtX2lkOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKIAlzdHJ1Y3QgbmVzX2NxICAgICAgICAgKm5lc3NjcTsKIAlzdHJ1Y3QgbmVzX2NxICAgICAgICAgKm5lc3JjcTsKIAlzdHJ1Y3QgbmVzX3BkICAgICAgICAgKm5lc3BkOwogCXZvaWQgKmNtX25vZGU7IC8qIGhhbmRsZSBvZiB0aGUgbm9kZSB0aGlzIFFQIGlzIGFzc29jaWF0ZWQgd2l0aCAqLwogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqaWV0Zl9mcmFtZTsKIAlkbWFfYWRkcl90ICAgICAgICAgICAgaWV0Zl9mcmFtZV9wYmFzZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgc3RhdGVfd2FpdHE7CiAJc3RydWN0IGliX21yICAgICAgICAgICpsc21tX21yOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICBzb2NrZXQ7CiAJc3RydWN0IG5lc19od19xcCAgICAgIGh3cXA7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgIHdvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0ICAgIGFlX3dvcms7CiAJZW51bSBpYl9xcF9zdGF0ZSAgICAgIGlicXBfc3RhdGU7CiAJdTMyICAgICAgICAgICAgICAgICAgIGl3YXJwX3N0YXRlOwogCXUzMiAgICAgICAgICAgICAgICAgICBodGVfaW5kZXg7CkBAIC0xNjUsMTkgKzE2MSwyMCBAQAogCXN0cnVjdCBwYWdlICAgICAgICAgICAqcGFnZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgdGVybWluYXRlX3RpbWVyOwogCWVudW0gaWJfZXZlbnRfdHlwZSAgICB0ZXJtaW5hdGVfZXZlbnR0eXBlOwotCXdhaXRfcXVldWVfaGVhZF90ICAgICBraWNrX3dhaXRxOwotCXUxNiAgICAgICAgICAgICAgICAgICBpbl9kaXNjb25uZWN0OworCXUxNiAgICAgICAgICAgICAgICAgICBhY3RpdmVfY29ubjoxOworCXUxNiAgICAgICAgICAgICAgICAgICBza2lwX2xzbW06MTsKKwl1MTYgICAgICAgICAgICAgICAgICAgdXNlcl9tb2RlOjE7CisJdTE2ICAgICAgICAgICAgICAgICAgIGh0ZV9hZGRlZDoxOworCXUxNiAgICAgICAgICAgICAgICAgICBmbHVzaF9pc3N1ZWQ6MTsKKwl1MTYgICAgICAgICAgICAgICAgICAgZGVzdHJveWVkOjE7CisJdTE2ICAgICAgICAgICAgICAgICAgIHNpZ19hbGw6MTsKKwl1MTYgICAgICAgICAgICAgICAgICAgcnN2ZDo5OwogCXUxNiAgICAgICAgICAgICAgICAgICBwcml2YXRlX2RhdGFfbGVuOwogCXUxNiAgICAgICAgICAgICAgICAgICB0ZXJtX3NxX2ZsdXNoX2NvZGU7CiAJdTE2ICAgICAgICAgICAgICAgICAgIHRlcm1fcnFfZmx1c2hfY29kZTsKLQl1OCAgICAgICAgICAgICAgICAgICAgYWN0aXZlX2Nvbm47Ci0JdTggICAgICAgICAgICAgICAgICAgIHNraXBfbHNtbTsKLQl1OCAgICAgICAgICAgICAgICAgICAgdXNlcl9tb2RlOwotCXU4ICAgICAgICAgICAgICAgICAgICBodGVfYWRkZWQ7CiAJdTggICAgICAgICAgICAgICAgICAgIGh3X2l3YXJwX3N0YXRlOwotCXU4ICAgICAgICAgICAgICAgICAgICBmbHVzaF9pc3N1ZWQ7CiAJdTggICAgICAgICAgICAgICAgICAgIGh3X3RjcF9zdGF0ZTsKIAl1OCAgICAgICAgICAgICAgICAgICAgdGVybV9mbGFnczsKLQl1OCAgICAgICAgICAgICAgICAgICAgZGVzdHJveWVkOworCXU4ICAgICAgICAgICAgICAgICAgICBzcV9rbWFwcGVkOwogfTsKICNlbmRpZgkJCS8qIE5FU19WRVJCU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDJiZjUxMTYuLmRmM2ViOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC04ODQsNiArODg0LDcgQEAKIAogCW5laWdoLT5uZWlnaGJvdXIgPSBuZWlnaGJvdXI7CiAJbmVpZ2gtPmRldiA9IGRldjsKKwltZW1zZXQoJm5laWdoLT5kZ2lkLnJhdywgMCwgc2l6ZW9mICh1bmlvbiBpYl9naWQpKTsKIAkqdG9faXBvaWJfbmVpZ2gobmVpZ2hib3VyKSA9IG5laWdoOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm5laWdoLT5xdWV1ZSk7CiAJaXBvaWJfY21fc2V0KG5laWdoLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKaW5kZXggYjk0NTNkMC4uMjc0Yzg4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKQEAgLTIwOSw2ICsyMDksOCBAQAogCW1lbV9jb3B5LT5jb3B5X2J1ZiA9IE5VTEw7CiB9CiAKKyNkZWZpbmUgSVNfNEtfQUxJR05FRChhZGRyKQkoKCgodW5zaWduZWQgbG9uZylhZGRyKSAmIH5NQVNLXzRLKSA9PSAwKQorCiAvKioKICAqIGlzZXJfc2dfdG9fcGFnZV92ZWMgLSBUcmFuc2xhdGVzIHNjYXR0ZXJsaXN0IGVudHJpZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzCiAgKiBhbmQgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHJlc3VsdGluZyBwaHlzaWNhbCBhZGRyZXNzIGFycmF5IChtYXkgYmUgbGVzcyB0aGFuCkBAIC0yMjEsNjIgKzIyMyw1MiBAQAogICogd2hlcmUgLS1mZXcgZnJhZ21lbnRzIG9mIHRoZSBzYW1lIHBhZ2UtLSBhcmUgcHJlc2VudCBpbiB0aGUgU0cgYXMKICAqIGNvbnNlY3V0aXZlIGVsZW1lbnRzLiBBbHNvLCBpdCBoYW5kbGVzIG9uZSBlbnRyeSBTRy4KICAqLworCiBzdGF0aWMgaW50IGlzZXJfc2dfdG9fcGFnZV92ZWMoc3RydWN0IGlzZXJfZGF0YV9idWYgKmRhdGEsCiAJCQkgICAgICAgc3RydWN0IGlzZXJfcGFnZV92ZWMgKnBhZ2VfdmVjLAogCQkJICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQogewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKWRhdGEtPmJ1ZjsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXU2NCBmaXJzdF9hZGRyLCBsYXN0X2FkZHIsIHBhZ2U7Ci0JaW50IGVuZF9hbGlnbmVkOwotCXVuc2lnbmVkIGludCBjdXJfcGFnZSA9IDA7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgKnNnbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilkYXRhLT5idWY7CisJdTY0IHN0YXJ0X2FkZHIsIGVuZF9hZGRyLCBwYWdlLCBjaHVua19zdGFydCA9IDA7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9zeiA9IDA7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGRtYV9sZW47CisJaW50IGksIG5ld19jaHVuaywgY3VyX3BhZ2UsIGxhc3RfZW50ID0gZGF0YS0+ZG1hX25lbnRzIC0gMTsKIAogCS8qIGNvbXB1dGUgdGhlIG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCiAJcGFnZV92ZWMtPm9mZnNldCA9ICh1NjQpIHNnbFswXS5vZmZzZXQgJiB+TUFTS180SzsKIAorCW5ld19jaHVuayA9IDE7CisJY3VyX3BhZ2UgID0gMDsKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBkYXRhLT5kbWFfbmVudHMsIGkpIHsKLQkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGliZGV2LCBzZyk7Ci0KKwkJc3RhcnRfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCBzZyk7CisJCWlmIChuZXdfY2h1bmspCisJCQljaHVua19zdGFydCA9IHN0YXJ0X2FkZHI7CisJCWRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGliZGV2LCBzZyk7CisJCWVuZF9hZGRyID0gc3RhcnRfYWRkciArIGRtYV9sZW47CiAJCXRvdGFsX3N6ICs9IGRtYV9sZW47CiAKLQkJZmlyc3RfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCBzZyk7Ci0JCWxhc3RfYWRkciAgPSBmaXJzdF9hZGRyICsgZG1hX2xlbjsKLQotCQllbmRfYWxpZ25lZCAgID0gIShsYXN0X2FkZHIgICYgfk1BU0tfNEspOwotCi0JCS8qIGNvbnRpbnVlIHRvIGNvbGxlY3QgcGFnZSBmcmFnbWVudHMgdGlsbCBhbGlnbmVkIG9yIFNHIGVuZHMgKi8KLQkJd2hpbGUgKCFlbmRfYWxpZ25lZCAmJiAoaSArIDEgPCBkYXRhLT5kbWFfbmVudHMpKSB7Ci0JCQlzZyA9IHNnX25leHQoc2cpOwotCQkJaSsrOwotCQkJZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oaWJkZXYsIHNnKTsKLQkJCXRvdGFsX3N6ICs9IGRtYV9sZW47Ci0JCQlsYXN0X2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhpYmRldiwgc2cpICsgZG1hX2xlbjsKLQkJCWVuZF9hbGlnbmVkID0gIShsYXN0X2FkZHIgICYgfk1BU0tfNEspOworCQkvKiBjb2xsZWN0IHBhZ2UgZnJhZ21lbnRzIHVudGlsIGFsaWduZWQgb3IgZW5kIG9mIFNHIGxpc3QgKi8KKwkJaWYgKCFJU180S19BTElHTkVEKGVuZF9hZGRyKSAmJiBpIDwgbGFzdF9lbnQpIHsKKwkJCW5ld19jaHVuayA9IDA7CisJCQljb250aW51ZTsKIAkJfQorCQluZXdfY2h1bmsgPSAxOwogCi0JCS8qIGhhbmRsZSB0aGUgMXN0IHBhZ2UgaW4gdGhlIDFzdCBETUEgZWxlbWVudCAqLwotCQlpZiAoY3VyX3BhZ2UgPT0gMCkgewotCQkJcGFnZSA9IGZpcnN0X2FkZHIgJiBNQVNLXzRLOwotCQkJcGFnZV92ZWMtPnBhZ2VzW2N1cl9wYWdlXSA9IHBhZ2U7Ci0JCQljdXJfcGFnZSsrOworCQkvKiBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBjb250aWd1b3VzIGNodW5rOworCQkgICBtYXNraW5nIHJlbGV2YW50IGZvciB0aGUgdmVyeSBmaXJzdCBTRyBlbnRyeSwKKwkJICAgd2hpY2ggbWlnaHQgYmUgdW5hbGlnbmVkICovCisJCXBhZ2UgPSBjaHVua19zdGFydCAmIE1BU0tfNEs7CisJCWRvIHsKKwkJCXBhZ2VfdmVjLT5wYWdlc1tjdXJfcGFnZSsrXSA9IHBhZ2U7CiAJCQlwYWdlICs9IFNJWkVfNEs7Ci0JCX0gZWxzZQotCQkJcGFnZSA9IGZpcnN0X2FkZHI7Ci0KLQkJZm9yICg7IHBhZ2UgPCBsYXN0X2FkZHI7IHBhZ2UgKz0gU0laRV80SykgewotCQkJcGFnZV92ZWMtPnBhZ2VzW2N1cl9wYWdlXSA9IHBhZ2U7Ci0JCQljdXJfcGFnZSsrOwotCQl9Ci0KKwkJfSB3aGlsZSAocGFnZSA8IGVuZF9hZGRyKTsKIAl9CisKIAlwYWdlX3ZlYy0+ZGF0YV9zaXplID0gdG90YWxfc3o7CiAJaXNlcl9kYmcoInBhZ2VfdmVjLT5kYXRhX3NpemU6JWQgY3VyX3BhZ2UgJWRcbiIsIHBhZ2VfdmVjLT5kYXRhX3NpemUsY3VyX3BhZ2UpOwogCXJldHVybiBjdXJfcGFnZTsKIH0KIAotI2RlZmluZSBJU180S19BTElHTkVEKGFkZHIpCSgoKCh1bnNpZ25lZCBsb25nKWFkZHIpICYgfk1BU0tfNEspID09IDApCiAKIC8qKgogICogaXNlcl9kYXRhX2J1Zl9hbGlnbmVkX2xlbiAtIFRyaWVzIHRvIGRldGVybWluZSB0aGUgbWF4aW1hbCBjb3JyZWN0bHkgYWxpZ25lZApAQCAtMjg0LDQyICsyNzYsNDAgQEAKICAqIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aGljaCBhcmUgYWxpZ25lZCBjb3JyZWN0bHkuIFN1cHBvcnRzIHRoZSBjYXNlIHdoZXJlCiAgKiBjb25zZWN1dGl2ZSBTRyBlbGVtZW50cyBhcmUgYWN0dWFsbHkgZnJhZ21lbnRzIG9mIHRoZSBzYW1lIHBoeXNjaWFsIHBhZ2UuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXNlcl9kYXRhX2J1Zl9hbGlnbmVkX2xlbihzdHJ1Y3QgaXNlcl9kYXRhX2J1ZiAqZGF0YSwKLQkJCQkJICAgICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCitzdGF0aWMgaW50IGlzZXJfZGF0YV9idWZfYWxpZ25lZF9sZW4oc3RydWN0IGlzZXJfZGF0YV9idWYgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsICpzZzsKLQl1NjQgZW5kX2FkZHIsIG5leHRfYWRkcjsKLQlpbnQgaSwgY250OwotCXVuc2lnbmVkIGludCByZXRfbGVuID0gMDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgKnNnLCAqbmV4dF9zZyA9IE5VTEw7CisJdTY0IHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworCWludCBpLCByZXRfbGVuLCBzdGFydF9jaGVjayA9IDA7CisKKwlpZiAoZGF0YS0+ZG1hX25lbnRzID09IDEpCisJCXJldHVybiAxOwogCiAJc2dsID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKWRhdGEtPmJ1ZjsKKwlzdGFydF9hZGRyICA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCBzZ2wpOwogCi0JY250ID0gMDsKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBkYXRhLT5kbWFfbmVudHMsIGkpIHsKLQkJLyogaXNlcl9kYmcoIkNoZWNraW5nIHNnIGlvYnVmIFslZF06IHBoeXM9MHglMDhsWCAiCi0JCSAgICJvZmZzZXQ6ICVsZCBzejogJWxkXG4iLCBpLAotCQkgICAodW5zaWduZWQgbG9uZylzZ19waHlzKHNnKSwKLQkJICAgKHVuc2lnbmVkIGxvbmcpc2ctPm9mZnNldCwKLQkJICAgKHVuc2lnbmVkIGxvbmcpc2ctPmxlbmd0aCk7ICovCi0JCWVuZF9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsIHNnKSArCi0JCQkgICBpYl9zZ19kbWFfbGVuKGliZGV2LCBzZyk7Ci0JCS8qIGlzZXJfZGJnKCJDaGVja2luZyBzZyBpb2J1ZiBlbmQgYWRkcmVzcyAiCi0JCSAgICAgICAiMHglMDhsWFxuIiwgZW5kX2FkZHIpOyAqLwotCQlpZiAoaSArIDEgPCBkYXRhLT5kbWFfbmVudHMpIHsKLQkJCW5leHRfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCBzZ19uZXh0KHNnKSk7Ci0JCQkvKiBhcmUgaSwgaSsxIGZyYWdtZW50cyBvZiB0aGUgc2FtZSBwYWdlPyAqLwotCQkJaWYgKGVuZF9hZGRyID09IG5leHRfYWRkcikgewotCQkJCWNudCsrOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICghSVNfNEtfQUxJR05FRChlbmRfYWRkcikpIHsKLQkJCQlyZXRfbGVuID0gY250ICsgMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQljbnQrKzsKKwkJaWYgKHN0YXJ0X2NoZWNrICYmICFJU180S19BTElHTkVEKHN0YXJ0X2FkZHIpKQorCQkJYnJlYWs7CisKKwkJbmV4dF9zZyA9IHNnX25leHQoc2cpOworCQlpZiAoIW5leHRfc2cpCisJCQlicmVhazsKKworCQllbmRfYWRkciAgICA9IHN0YXJ0X2FkZHIgKyBpYl9zZ19kbWFfbGVuKGliZGV2LCBzZyk7CisJCXN0YXJ0X2FkZHIgID0gaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsIG5leHRfc2cpOworCisJCWlmIChlbmRfYWRkciA9PSBzdGFydF9hZGRyKSB7CisJCQlzdGFydF9jaGVjayA9IDA7CisJCQljb250aW51ZTsKKwkJfSBlbHNlCisJCQlzdGFydF9jaGVjayA9IDE7CisKKwkJaWYgKCFJU180S19BTElHTkVEKGVuZF9hZGRyKSkKKwkJCWJyZWFrOwogCX0KLQlpZiAoaSA9PSBkYXRhLT5kbWFfbmVudHMpCi0JCXJldF9sZW4gPSBjbnQ7CS8qIGxvb3AgZW5kZWQgKi8KKwlyZXRfbGVuID0gKG5leHRfc2cpID8gaSA6IGkrMTsKIAlpc2VyX2RiZygiRm91bmQgJWQgYWxpZ25lZCBlbnRyaWVzIG91dCBvZiAlZCBpbiBzZzoweCVwXG4iLAogCQkgcmV0X2xlbiwgZGF0YS0+ZG1hX25lbnRzLCBkYXRhKTsKIAlyZXR1cm4gcmV0X2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCA1YzE2MDAxLi5hYjA2MDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0yOTYsOSArMjk2LDE1IEBACiAgKiBAdmFsdWU6IHZhbHVlIG9mIHRoZSBldmVudAogICoKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYnkgZHJpdmVycyBpbXBsZW1lbnRpbmcgdmFyaW91cyBpbnB1dAotICogZGV2aWNlcy4gU2VlIGFsc28gaW5wdXRfaW5qZWN0X2V2ZW50KCkuCisgKiBkZXZpY2VzIHRvIHJlcG9ydCBpbnB1dCBldmVudHMuIFNlZSBhbHNvIGlucHV0X2luamVjdF9ldmVudCgpLgorICoKKyAqIE5PVEU6IGlucHV0X2V2ZW50KCkgbWF5IGJlIHNhZmVseSB1c2VkIHJpZ2h0IGFmdGVyIGlucHV0IGRldmljZSB3YXMKKyAqIGFsbG9jYXRlZCB3aXRoIGlucHV0X2FsbG9jYXRlX2RldmljZSgpLCBldmVuIGJlZm9yZSBpdCBpcyByZWdpc3RlcmVkCisgKiB3aXRoIGlucHV0X3JlZ2lzdGVyX2RldmljZSgpLCBidXQgdGhlIGV2ZW50IHdpbGwgbm90IHJlYWNoIGFueSBvZiB0aGUKKyAqIGlucHV0IGhhbmRsZXJzLiBTdWNoIGVhcmx5IGludm9jYXRpb24gb2YgaW5wdXRfZXZlbnQoKSBtYXkgYmUgdXNlZAorICogdG8gJ3NlZWQnIGluaXRpYWwgc3RhdGUgb2YgYSBzd2l0Y2ggb3IgaW5pdGlhbCBwb3NpdGlvbiBvZiBhYnNvbHV0ZQorICogYXhpcywgZXRjLgogICovCi0KIHZvaWQgaW5wdXRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LAogCQkgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggMjAzYjg4YS4uMDJjODM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMjQsNiArMjQsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFhZWQyMDAwX2tiZC4KIAorY29uZmlnIEtFWUJPQVJEX0FEUDU1MjAKKwl0cmlzdGF0ZSAiS2V5cGFkIFN1cHBvcnQgZm9yIEFEUDU1MjAgUE1JQyIKKwlkZXBlbmRzIG9uIFBNSUNfQURQNTUyMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGtleXBhZCBzY2FuIG1hdHJpeAorCSAgb24gQW5hbG9nIERldmljZXMgQURQNTUyMCBQTUlDcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwNTUyMC1rZXlzLgorCiBjb25maWcgS0VZQk9BUkRfQURQNTU4OAogCXRyaXN0YXRlICJBRFA1NTg4IEkyQyBRV0VSVFkgS2V5cGFkIGFuZCBJTyBFeHBhbmRlciIKIAlkZXBlbmRzIG9uIEkyQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggNjhjMDE3Mi4uNzg2NTRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCiBvYmotJChDT05GSUdfS0VZQk9BUkRfQUFFRDIwMDApCQkrPSBhYWVkMjAwMF9rYmQubworb2JqLSQoQ09ORklHX0tFWUJPQVJEX0FEUDU1MjApCQkrPSBhZHA1NTIwLWtleXMubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX0FEUDU1ODgpCQkrPSBhZHA1NTg4LWtleXMubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX0FNSUdBKQkJKz0gYW1pa2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9BVEFSSSkJCSs9IGF0YWtiZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1MjAta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTIwLWtleXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JhMjdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTIwLWtleXMuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIEtleXBhZCBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFEUDU1MjAgTUZEIFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworc3RydWN0IGFkcDU1MjBfa2V5cyB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlmaWVyOworCXN0cnVjdCBkZXZpY2UgKm1hc3RlcjsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlW0FEUDU1MjBfS0VZTUFQU0laRV07Cit9OworCitzdGF0aWMgdm9pZCBhZHA1NTIwX2tleXNfcmVwb3J0X2V2ZW50KHN0cnVjdCBhZHA1NTIwX2tleXMgKmRldiwKKwkJCQkJdW5zaWduZWQgc2hvcnQga2V5bWFzaywgaW50IHZhbHVlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFEUDU1MjBfTUFYS0VZUzsgaSsrKQorCQlpZiAoa2V5bWFzayAmICgxIDw8IGkpKQorCQkJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0LCBkZXYtPmtleWNvZGVbaV0sIHZhbHVlKTsKKworCWlucHV0X3N5bmMoZGV2LT5pbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9rZXlzX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFkcDU1MjBfa2V5cyAqZGV2OworCXVpbnQ4X3QgcmVnX3ZhbF9sbywgcmVnX3ZhbF9oaTsKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXNrOworCisJZGV2ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgYWRwNTUyMF9rZXlzLCBub3RpZmllcik7CisKKwlpZiAoZXZlbnQgJiBBRFA1NTIwX0tQX0lOVCkgeworCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfS1BfSU5UX1NUQVRfMSwgJnJlZ192YWxfbG8pOworCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfS1BfSU5UX1NUQVRfMiwgJnJlZ192YWxfaGkpOworCisJCWtleW1hc2sgPSAocmVnX3ZhbF9oaSA8PCA4KSB8IHJlZ192YWxfbG87CisJCS8qIFJlYWQgdHdpY2UgdG8gY2xlYXIgKi8KKwkJYWRwNTUyMF9yZWFkKGRldi0+bWFzdGVyLCBBRFA1NTIwX0tQX0lOVF9TVEFUXzEsICZyZWdfdmFsX2xvKTsKKwkJYWRwNTUyMF9yZWFkKGRldi0+bWFzdGVyLCBBRFA1NTIwX0tQX0lOVF9TVEFUXzIsICZyZWdfdmFsX2hpKTsKKwkJa2V5bWFzayB8PSAocmVnX3ZhbF9oaSA8PCA4KSB8IHJlZ192YWxfbG87CisJCWFkcDU1MjBfa2V5c19yZXBvcnRfZXZlbnQoZGV2LCBrZXltYXNrLCAxKTsKKwl9CisKKwlpZiAoZXZlbnQgJiBBRFA1NTIwX0tSX0lOVCkgeworCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfS1JfSU5UX1NUQVRfMSwgJnJlZ192YWxfbG8pOworCQlhZHA1NTIwX3JlYWQoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfS1JfSU5UX1NUQVRfMiwgJnJlZ192YWxfaGkpOworCisJCWtleW1hc2sgPSAocmVnX3ZhbF9oaSA8PCA4KSB8IHJlZ192YWxfbG87CisJCS8qIFJlYWQgdHdpY2UgdG8gY2xlYXIgKi8KKwkJYWRwNTUyMF9yZWFkKGRldi0+bWFzdGVyLCBBRFA1NTIwX0tSX0lOVF9TVEFUXzEsICZyZWdfdmFsX2xvKTsKKwkJYWRwNTUyMF9yZWFkKGRldi0+bWFzdGVyLCBBRFA1NTIwX0tSX0lOVF9TVEFUXzIsICZyZWdfdmFsX2hpKTsKKwkJa2V5bWFzayB8PSAocmVnX3ZhbF9oaSA8PCA4KSB8IHJlZ192YWxfbG87CisJCWFkcDU1MjBfa2V5c19yZXBvcnRfZXZlbnQoZGV2LCBrZXltYXNrLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYWRwNTUyMF9rZXlzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkcDU1MjBfa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCBhZHA1NTIwX2tleXMgKmRldjsKKwlpbnQgcmV0LCBpOworCXVuc2lnbmVkIGNoYXIgZW5fbWFzaywgY3RsX21hc2sgPSAwOworCisJaWYgKHBkZXYtPmlkICE9IElEX0FEUDU1MjApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAib25seSBBRFA1NTIwIHN1cHBvcnRzIEtleXBhZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKHBkYXRhLT5yb3dzX2VuX21hc2sgJiYgcGRhdGEtPmNvbHNfZW5fbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWRldi0+bWFzdGVyID0gcGRldi0+ZGV2LnBhcmVudDsKKwlkZXYtPmlucHV0ID0gaW5wdXQ7CisKKwlpbnB1dC0+bmFtZSA9IHBkZXYtPm5hbWU7CisJaW5wdXQtPnBoeXMgPSAiYWRwNTUyMC1rZXlzL2lucHV0MCI7CisJaW5wdXQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIGRldik7CisKKwlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19JMkM7CisJaW5wdXQtPmlkLnZlbmRvciA9IDB4MDAwMTsKKwlpbnB1dC0+aWQucHJvZHVjdCA9IDB4NTUyMDsKKwlpbnB1dC0+aWQudmVyc2lvbiA9IDB4MDAwMTsKKworCWlucHV0LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihkZXYtPmtleWNvZGVbMF0pOworCWlucHV0LT5rZXljb2RlbWF4ID0gcGRhdGEtPmtleW1hcHNpemU7CisJaW5wdXQtPmtleWNvZGUgPSBkZXYtPmtleWNvZGU7CisKKwltZW1jcHkoZGV2LT5rZXljb2RlLCBwZGF0YS0+a2V5bWFwLAorCQlwZGF0YS0+a2V5bWFwc2l6ZSAqIGlucHV0LT5rZXljb2Rlc2l6ZSk7CisKKwkvKiBzZXR1cCBpbnB1dCBkZXZpY2UgKi8KKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCisJaWYgKHBkYXRhLT5yZXBlYXQpCisJCV9fc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5wdXQtPmtleWNvZGVtYXg7IGkrKykKKwkJX19zZXRfYml0KGRldi0+a2V5Y29kZVtpXSwgaW5wdXQtPmtleWJpdCk7CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dC0+a2V5Yml0KTsKKworCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJZW5fbWFzayA9IHBkYXRhLT5yb3dzX2VuX21hc2sgfCBwZGF0YS0+Y29sc19lbl9tYXNrOworCisJcmV0ID0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgQURQNTUyMF9HUElPX0NGR18xLCBlbl9tYXNrKTsKKworCWlmIChlbl9tYXNrICYgQURQNTUyMF9DT0xfQzMpCisJCWN0bF9tYXNrIHw9IEFEUDU1MjBfQzNfTU9ERTsKKworCWlmIChlbl9tYXNrICYgQURQNTUyMF9ST1dfUjMpCisJCWN0bF9tYXNrIHw9IEFEUDU1MjBfUjNfTU9ERTsKKworCWlmIChjdGxfbWFzaykKKwkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LT5tYXN0ZXIsIEFEUDU1MjBfTEVEX0NPTlRST0wsCisJCQljdGxfbWFzayk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhkZXYtPm1hc3RlciwgQURQNTUyMF9HUElPX1BVTExVUCwKKwkJcGRhdGEtPnJvd3NfZW5fbWFzayk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byB3cml0ZVxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyMTsKKwl9CisKKwlkZXYtPm5vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBhZHA1NTIwX2tleXNfbm90aWZpZXI7CisJcmV0ID0gYWRwNTUyMF9yZWdpc3Rlcl9ub3RpZmllcihkZXYtPm1hc3RlciwgJmRldi0+bm90aWZpZXIsCisJCQlBRFA1NTIwX0tQX0lFTiB8IEFEUDU1MjBfS1JfSUVOKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBub3RpZmllclxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXJldHVybiAwOworCitlcnIxOgorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpbnB1dCA9IE5VTEw7CitlcnI6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOworCWtmcmVlKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9rZXlzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHA1NTIwX2tleXMgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYWRwNTUyMF91bnJlZ2lzdGVyX25vdGlmaWVyKGRldi0+bWFzdGVyLCAmZGV2LT5ub3RpZmllciwKKwkJCQlBRFA1NTIwX0tQX0lFTiB8IEFEUDU1MjBfS1JfSUVOKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+aW5wdXQpOworCWtmcmVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkcDU1MjBfa2V5c19kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYWRwNTUyMC1rZXlzIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWRwNTUyMF9rZXlzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWRwNTUyMF9rZXlzX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHA1NTIwX2tleXNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkcDU1MjBfa2V5c19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWRwNTUyMF9rZXlzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWRwNTUyMF9rZXlzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWRwNTUyMF9rZXlzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZHA1NTIwX2tleXNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSGVubmVyaWNoIDxoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktleXMgQURQNTUyMCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YWRwNTUyMC1rZXlzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hZHA1NTg4LWtleXMuYwppbmRleCBkNDhjODA4Li4xZWRiNTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1ODgta2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWRwNTU4OC1rZXlzLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWRwNTU4OF9kZXZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGFkcDU1ODhfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IGFkcDU1ODhfc3VzcGVuZCwKIAkucmVzdW1lICA9IGFkcDU1ODhfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9lcDkzeHhfa2V5cGFkLmMKaW5kZXggMTgxZDMwZS4uZTQ1NzQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9lcDkzeHhfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9lcDkzeHhfa2V5cGFkLmMKQEAgLTIyLDExICsyMiwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2VwOTN4eF9rZXlwYWQuaD4KIAogLyoKQEAgLTYwLDM4ICs2MCwzNyBAQAogI2RlZmluZSBLRVlfUkVHX0tFWTFfTUFTSwkoMHgwMDAwMDAzZikKICNkZWZpbmUgS0VZX1JFR19LRVkxX1NISUZUCSgwKQogCi0jZGVmaW5lIGtleXBhZF9yZWFkbChvZmYpCV9fcmF3X3JlYWRsKGtleXBhZC0+bW1pb19iYXNlICsgKG9mZikpCi0jZGVmaW5lIGtleXBhZF93cml0ZWwodiwgb2ZmKQlfX3Jhd193cml0ZWwoKHYpLCBrZXlwYWQtPm1taW9fYmFzZSArIChvZmYpKQotCi0jZGVmaW5lIE1BWF9NQVRSSVhfS0VZX05VTQkoTUFYX01BVFJJWF9LRVlfUk9XUyAqIE1BWF9NQVRSSVhfS0VZX0NPTFMpCisjZGVmaW5lIEVQOTNYWF9NQVRSSVhfU0laRQkoRVA5M1hYX01BVFJJWF9ST1dTICogRVA5M1hYX01BVFJJWF9DT0xTKQogCiBzdHJ1Y3QgZXA5M3h4X2tleXBhZCB7CiAJc3RydWN0IGVwOTN4eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0KLQlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCBjbGsgKmNsazsKKwogCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOwogCi0JaW50IGlycTsKLQlpbnQgZW5hYmxlZDsKKwl1bnNpZ25lZCBpbnQgbWF0cml4X2tleWNvZGVzW0VQOTNYWF9NQVRSSVhfU0laRV07CiAKIAlpbnQga2V5MTsKIAlpbnQga2V5MjsKIAotCXVuc2lnbmVkIGludCBtYXRyaXhfa2V5Y29kZXNbTUFYX01BVFJJWF9LRVlfTlVNXTsKKwlpbnQgaXJxOworCisJYm9vbCBlbmFibGVkOwogfTsKIAogc3RhdGljIHZvaWQgZXA5M3h4X2tleXBhZF9idWlsZF9rZXljb2RlKHN0cnVjdCBlcDkzeHhfa2V5cGFkICprZXlwYWQpCiB7CiAJc3RydWN0IGVwOTN4eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrZXlwYWQtPnBkYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtleXBhZC0+aW5wdXRfZGV2OworCXVuc2lnbmVkIGludCAqa2V5OwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXRyaXhfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJdW5zaWduZWQgaW50IGtleSA9IHBkYXRhLT5tYXRyaXhfa2V5X21hcFtpXTsKLQkJaW50IHJvdyA9IChrZXkgPj4gMjgpICYgMHhmOwotCQlpbnQgY29sID0gKGtleSA+PiAyNCkgJiAweGY7Ci0JCWludCBjb2RlID0ga2V5ICYgMHhmZmZmZmY7CisJa2V5ID0gJnBkYXRhLT5tYXRyaXhfa2V5X21hcFswXTsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm1hdHJpeF9rZXlfbWFwX3NpemU7IGkrKywga2V5KyspIHsKKwkJaW50IHJvdyA9IEtFWV9ST1coKmtleSk7CisJCWludCBjb2wgPSBLRVlfQ09MKCprZXkpOworCQlpbnQgY29kZSA9IEtFWV9WQUwoKmtleSk7CiAKIAkJa2V5cGFkLT5tYXRyaXhfa2V5Y29kZXNbKHJvdyA8PCAzKSArIGNvbF0gPSBjb2RlOwogCQlfX3NldF9iaXQoY29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOwpAQCAtMTAyLDkgKzEwMSwxMSBAQAogewogCXN0cnVjdCBlcDkzeHhfa2V5cGFkICprZXlwYWQgPSBkZXZfaWQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7Ci0JdW5zaWduZWQgaW50IHN0YXR1cyA9IGtleXBhZF9yZWFkbChLRVlfUkVHKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBrZXljb2RlLCBrZXkxLCBrZXkyOwogCisJc3RhdHVzID0gX19yYXdfcmVhZGwoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLRVlfUkVHKTsKKwogCWtleWNvZGUgPSAoc3RhdHVzICYgS0VZX1JFR19LRVkxX01BU0spID4+IEtFWV9SRUdfS0VZMV9TSElGVDsKIAlrZXkxID0ga2V5cGFkLT5tYXRyaXhfa2V5Y29kZXNba2V5Y29kZV07CiAKQEAgLTE1Miw3ICsxNTMsMTAgQEAKIAlzdHJ1Y3QgZXA5M3h4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CiAJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAKLQljbGtfc2V0X3JhdGUoa2V5cGFkLT5jbGssIHBkYXRhLT5mbGFncyAmIEVQOTNYWF9LRVlQQURfS0RJVik7CisJaWYgKHBkYXRhLT5mbGFncyAmIEVQOTNYWF9LRVlQQURfS0RJVikKKwkJY2xrX3NldF9yYXRlKGtleXBhZC0+Y2xrLCBFUDkzWFhfS0VZVENIQ0xLX0RJVjQpOworCWVsc2UKKwkJY2xrX3NldF9yYXRlKGtleXBhZC0+Y2xrLCBFUDkzWFhfS0VZVENIQ0xLX0RJVjE2KTsKIAogCWlmIChwZGF0YS0+ZmxhZ3MgJiBFUDkzWFhfS0VZUEFEX0RJU0FCTEVfM19LRVkpCiAJCXZhbCB8PSBLRVlfSU5JVF9ESVMzS1k7CkBAIC0xNjcsNyArMTcxLDcgQEAKIAogCXZhbCB8PSAoKHBkYXRhLT5wcmVzY2FsZSA8PCBLRVlfSU5JVF9QUlNDTF9TSElGVCkgJiBLRVlfSU5JVF9QUlNDTF9NQVNLKTsKIAotCWtleXBhZF93cml0ZWwodmFsLCBLRVlfSU5JVCk7CisJX19yYXdfd3JpdGVsKHZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLRVlfSU5JVCk7CiB9CiAKIHN0YXRpYyBpbnQgZXA5M3h4X2tleXBhZF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKnBkZXYpCkBAIC0xNzcsNyArMTgxLDcgQEAKIAlpZiAoIWtleXBhZC0+ZW5hYmxlZCkgewogCQllcDkzeHhfa2V5cGFkX2NvbmZpZyhrZXlwYWQpOwogCQljbGtfZW5hYmxlKGtleXBhZC0+Y2xrKTsKLQkJa2V5cGFkLT5lbmFibGVkID0gMTsKKwkJa2V5cGFkLT5lbmFibGVkID0gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE4OSw3ICsxOTMsNyBAQAogCiAJaWYgKGtleXBhZC0+ZW5hYmxlZCkgewogCQljbGtfZGlzYWJsZShrZXlwYWQtPmNsayk7Ci0JCWtleXBhZC0+ZW5hYmxlZCA9IDA7CisJCWtleXBhZC0+ZW5hYmxlZCA9IGZhbHNlOwogCX0KIH0KIApAQCAtMjExLDcgKzIxNSw3IEBACiAKIAlpZiAoa2V5cGFkLT5lbmFibGVkKSB7CiAJCWNsa19kaXNhYmxlKGtleXBhZC0+Y2xrKTsKLQkJa2V5cGFkLT5lbmFibGVkID0gMDsKKwkJa2V5cGFkLT5lbmFibGVkID0gZmFsc2U7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKQEAgLTIzNiw3ICsyNDAsNyBAQAogCQlpZiAoIWtleXBhZC0+ZW5hYmxlZCkgewogCQkJZXA5M3h4X2tleXBhZF9jb25maWcoa2V5cGFkKTsKIAkJCWNsa19lbmFibGUoa2V5cGFkLT5jbGspOwotCQkJa2V5cGFkLT5lbmFibGVkID0gMTsKKwkJCWtleXBhZC0+ZW5hYmxlZCA9IHRydWU7CiAJCX0KIAl9CiAKQEAgLTI1Miw4OCArMjU2LDU2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlcDkzeHhfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGVwOTN4eF9rZXlwYWQgKmtleXBhZDsKLQlzdHJ1Y3QgZXA5M3h4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgaXJxLCBlcnIsIGksIGdwaW87Ci0KLQlpZiAoIXBkYXRhIHx8Ci0JICAgICFwZGF0YS0+bWF0cml4X2tleV9yb3dzIHx8Ci0JICAgIHBkYXRhLT5tYXRyaXhfa2V5X3Jvd3MgPiBNQVhfTUFUUklYX0tFWV9ST1dTIHx8Ci0JICAgICFwZGF0YS0+bWF0cml4X2tleV9jb2xzIHx8Ci0JICAgIHBkYXRhLT5tYXRyaXhfa2V5X2NvbHMgPiBNQVhfTUFUUklYX0tFWV9DT0xTKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgb3IgbWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWludCBlcnI7CiAKIAlrZXlwYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXA5M3h4X2tleXBhZCksIEdGUF9LRVJORUwpOwotCWlmICgha2V5cGFkKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CisJaWYgKCFrZXlwYWQpCiAJCXJldHVybiAtRU5PTUVNOworCisJa2V5cGFkLT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICgha2V5cGFkLT5wZGF0YSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZF9mcmVlOwogCX0KIAotCWtleXBhZC0+cGRhdGEgPSBwZGF0YTsKLQotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlwYWQgaXJxXG4iKTsKKwlrZXlwYWQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFrZXlwYWQtPmlycSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gZmFpbGVkX2ZyZWU7CiAJfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOwogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gZmFpbGVkX2ZyZWU7CiAJfQogCiAJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CiAJaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWRfZnJlZTsKIAl9CiAKIAlrZXlwYWQtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoa2V5cGFkLT5tbWlvX2Jhc2UgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBmYWlsZWRfZnJlZV9tZW07CiAJfQogCi0JLyogUmVxdWVzdCB0aGUgbmVlZGVkIEdQSU8ncyAqLwotCWdwaW8gPSBFUDkzWFhfR1BJT19MSU5FX1JPVzA7Ci0JZm9yIChpID0gMDsgaSA8IGtleXBhZC0+cGRhdGEtPm1hdHJpeF9rZXlfcm93czsgaSsrLCBncGlvKyspIHsKLQkJZXJyID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIHBkZXYtPm5hbWUpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBncGlvLSVkXG4iLAotCQkJCWdwaW8pOwotCQkJZ290byBmYWlsZWRfZnJlZV9yb3dzOwotCQl9Ci0JfQotCi0JZ3BpbyA9IEVQOTNYWF9HUElPX0xJTkVfQ09MMDsKLQlmb3IgKGkgPSAwOyBpIDwga2V5cGFkLT5wZGF0YS0+bWF0cml4X2tleV9jb2xzOyBpKyssIGdwaW8rKykgewotCQllcnIgPSBncGlvX3JlcXVlc3QoZ3BpbywgcGRldi0+bmFtZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGdwaW8tJWRcbiIsCi0JCQkJZ3Bpbyk7Ci0JCQlnb3RvIGZhaWxlZF9mcmVlX2NvbHM7Ci0JCX0KLQl9Ci0KLQlrZXlwYWQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImtleV9jbGsiKTsKLQlpZiAoSVNfRVJSKGtleXBhZC0+Y2xrKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleXBhZCBjbG9ja1xuIik7Ci0JCWVyciA9IFBUUl9FUlIoa2V5cGFkLT5jbGspOworCWVyciA9IGVwOTN4eF9rZXlwYWRfYWNxdWlyZV9ncGlvKHBkZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZmFpbGVkX2ZyZWVfaW87CisKKwlrZXlwYWQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihrZXlwYWQtPmNsaykpIHsKKwkJZXJyID0gUFRSX0VSUihrZXlwYWQtPmNsayk7CisJCWdvdG8gZmFpbGVkX2ZyZWVfZ3BpbzsKIAl9CiAKLQkvKiBDcmVhdGUgYW5kIHJlZ2lzdGVyIHRoZSBpbnB1dCBkcml2ZXIgKi8KIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CkBAIC0zNTgsNDQgKzMzMCwyOSBAQAogCWVwOTN4eF9rZXlwYWRfYnVpbGRfa2V5Y29kZShrZXlwYWQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZCk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShpcnEsIGVwOTN4eF9rZXlwYWRfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCi0JCQkJcGRldi0+bmFtZSwga2V5cGFkKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IElSUVxuIik7CisJZXJyID0gcmVxdWVzdF9pcnEoa2V5cGFkLT5pcnEsIGVwOTN4eF9rZXlwYWRfaXJxX2hhbmRsZXIsCisJCQkgIElSUUZfRElTQUJMRUQsIHBkZXYtPm5hbWUsIGtleXBhZCk7CisJaWYgKGVycikKIAkJZ290byBmYWlsZWRfZnJlZV9kZXY7Ci0JfQogCi0Ja2V5cGFkLT5pcnEgPSBpcnE7Ci0KLQkvKiBSZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlICovCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwlpZiAoZXJyKQogCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKLQl9CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbGVkX2ZyZWVfaXJxOgotCWZyZWVfaXJxKGlycSwgcGRldik7CisJZnJlZV9pcnEoa2V5cGFkLT5pcnEsIHBkZXYpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogZmFpbGVkX2ZyZWVfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiBmYWlsZWRfcHV0X2NsazoKIAljbGtfcHV0KGtleXBhZC0+Y2xrKTsKK2ZhaWxlZF9mcmVlX2dwaW86CisJZXA5M3h4X2tleXBhZF9yZWxlYXNlX2dwaW8ocGRldik7CiBmYWlsZWRfZnJlZV9pbzoKLQlpID0ga2V5cGFkLT5wZGF0YS0+bWF0cml4X2tleV9jb2xzIC0gMTsKLQlncGlvID0gRVA5M1hYX0dQSU9fTElORV9DT0wwICsgaTsKLWZhaWxlZF9mcmVlX2NvbHM6Ci0JZm9yICggOyBpID49IDA7IGktLSwgZ3Bpby0tKQotCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JaSA9IGtleXBhZC0+cGRhdGEtPm1hdHJpeF9rZXlfcm93cyAtIDE7Ci0JZ3BpbyA9IEVQOTNYWF9HUElPX0xJTkVfUk9XMCArIGk7Ci1mYWlsZWRfZnJlZV9yb3dzOgotCWZvciAoIDsgaSA+PSAwOyBpLS0sIGdwaW8tLSkKLQkJZ3Bpb19mcmVlKGdwaW8pOwogCWlvdW5tYXAoa2V5cGFkLT5tbWlvX2Jhc2UpOwogZmFpbGVkX2ZyZWVfbWVtOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwpAQCAtNDA4LDcgKzM2NSw2IEBACiB7CiAJc3RydWN0IGVwOTN4eF9rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpLCBncGlvOwogCiAJZnJlZV9pcnEoa2V5cGFkLT5pcnEsIHBkZXYpOwogCkBAIC00MjAsMTUgKzM3Niw3IEBACiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CiAKLQlpID0ga2V5cGFkLT5wZGF0YS0+bWF0cml4X2tleV9jb2xzIC0gMTsKLQlncGlvID0gRVA5M1hYX0dQSU9fTElORV9DT0wwICsgaTsKLQlmb3IgKCA7IGkgPj0gMDsgaS0tLCBncGlvLS0pCi0JCWdwaW9fZnJlZShncGlvKTsKLQotCWkgPSBrZXlwYWQtPnBkYXRhLT5tYXRyaXhfa2V5X3Jvd3MgLSAxOwotCWdwaW8gPSBFUDkzWFhfR1BJT19MSU5FX1JPVzAgKyBpOwotCWZvciAoIDsgaSA+PSAwOyBpLS0sIGdwaW8tLSkKLQkJZ3Bpb19mcmVlKGdwaW8pOworCWVwOTN4eF9rZXlwYWRfcmVsZWFzZV9ncGlvKHBkZXYpOwogCiAJaW91bm1hcChrZXlwYWQtPm1taW9fYmFzZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCAwNzYxMTFmLi44ZTkzODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX2tleXNjX2Rldl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2hfa2V5c2NfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHNoX2tleXNjX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHNoX2tleXNjX3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKaW5kZXggOWEyOTc3Yy4uZWVhYTdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAKIAogLyoKQEAgLTEzMyw3ICsxMzMsNyBAQAogc3RhdGljIGludCB0d2w0MDMwX2twcmVhZChzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwLAogCQl1OCAqZGF0YSwgdTMyIHJlZywgdTggbnVtX2J5dGVzKQogewotCWludCByZXQgPSB0d2w0MDMwX2kyY19yZWFkKFRXTDQwMzBfTU9EVUxFX0tFWVBBRCwgZGF0YSwgcmVnLCBudW1fYnl0ZXMpOworCWludCByZXQgPSB0d2xfaTJjX3JlYWQoVFdMNDAzMF9NT0RVTEVfS0VZUEFELCBkYXRhLCByZWcsIG51bV9ieXRlcyk7CiAKIAlpZiAocmV0IDwgMCkKIAkJZGV2X3dhcm4oa3AtPmRiZ19kZXYsCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogc3RhdGljIGludCB0d2w0MDMwX2twd3JpdGVfdTgoc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgdTggZGF0YSwgdTMyIHJlZykKIHsKLQlpbnQgcmV0ID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfS0VZUEFELCBkYXRhLCByZWcpOworCWludCByZXQgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0tFWVBBRCwgZGF0YSwgcmVnKTsKIAogCWlmIChyZXQgPCAwKQogCQlkZXZfd2FybihrcC0+ZGJnX2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9iZmluX3JvdGFyeS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2JmaW5fcm90YXJ5LmMKaW5kZXggNjkwZjNmYS4uNjFkMTAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2JmaW5fcm90YXJ5LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2JmaW5fcm90YXJ5LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYmZpbl9yb3RhcnlfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJmaW5fcm90YXJ5X3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IGJmaW5fcm90YXJ5X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBiZmluX3JvdGFyeV9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3BjZjUwNjMzLWlucHV0LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvcGNmNTA2MzMtaW5wdXQuYwppbmRleCAwMzlkY2IwLi4wMDhkZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvcGNmNTA2MzMtaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvcGNmNTA2MzMtaW5wdXQuYwpAQCAtNTUsNyArNTUsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgcGNmNTA2MzNfaW5wdXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcGNmNTA2MzNfaW5wdXQgKmlucHV0OwotCXN0cnVjdCBwY2Y1MDYzM19zdWJkZXZfcGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCByZXQ7CiAKQEAgLTcxLDcgKzcwLDcgQEAKIAl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbnB1dCk7Ci0JaW5wdXQtPnBjZiA9IHBkYXRhLT5wY2Y7CisJaW5wdXQtPnBjZiA9IGRldl90b19wY2Y1MDYzMyhwZGV2LT5kZXYucGFyZW50KTsKIAlpbnB1dC0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OwogCiAJaW5wdXRfZGV2LT5uYW1lID0gIlBDRjUwNjMzIFBNVSBldmVudHMiOwpAQCAtODUsOSArODQsOSBAQAogCQlrZnJlZShpbnB1dCk7CiAJCXJldHVybiByZXQ7CiAJfQotCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShwZGF0YS0+cGNmLCBQQ0Y1MDYzM19JUlFfT05LRVlSLAorCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShpbnB1dC0+cGNmLCBQQ0Y1MDYzM19JUlFfT05LRVlSLAogCQkJCXBjZjUwNjMzX2lucHV0X2lycSwgaW5wdXQpOwotCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShwZGF0YS0+cGNmLCBQQ0Y1MDYzM19JUlFfT05LRVlGLAorCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShpbnB1dC0+cGNmLCBQQ0Y1MDYzM19JUlFfT05LRVlGLAogCQkJCXBjZjUwNjMzX2lucHV0X2lycSwgaW5wdXQpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvcGNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvcGNzcGtyLmMKaW5kZXggMjFjYjc1NS4uZWE0ZTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3Bjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wY3Nwa3IuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJcGNzcGtyX2V2ZW50KE5VTEwsIEVWX1NORCwgU05EX0JFTEwsIDApOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcGNzcGtyX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY3Nwa3JfcG1fb3BzID0gewogCS5zdXNwZW5kID0gcGNzcGtyX3N1c3BlbmQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy90d2w0MDMwLXB3cmJ1dHRvbi5jCmluZGV4IGY1ZmM5OTcuLmJkZGU1YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy90d2w0MDMwLXB3cmJ1dHRvbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy90d2w0MDMwLXB3cmJ1dHRvbi5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2RlZmluZSBQV1JfUFdST05fSVJRICgxIDw8IDApCiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAjZW5kaWYKIAotCWVyciA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAmdmFsdWUsCisJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnZhbHVlLAogCQkJCSAgU1RTX0hXX0NPTkRJVElPTlMpOwogCWlmICghZXJyKSAgewogCQlpbnB1dF9yZXBvcnRfa2V5KHB3ciwgS0VZX1BPV0VSLCB2YWx1ZSAmIFBXUl9QV1JPTl9JUlEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwppbmRleCBhM2Y0OTJhLi5mOTNjMmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwpAQCAtNSw2ICs1LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFBldGVyIE9zdGVybHVuZCA8cGV0ZXJvMkB0ZWxpYS5jb20+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRG1pdHJ5IFRvcm9raG92IDxkdG9yQG1haWwucnU+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBTZWJhc3RpYW4gS2FwZmVyIDxzZWJhc3RpYW5fa2FwZmVyQGdteC5uZXQ+CiAgKgogICogQUxQUyBkZXRlY3Rpb24sIHRhcCBzd2l0Y2hpbmcgYW5kIHN0YXR1cyBxdWVyeWluZyBpbmZvIGlzIHRha2VuIGZyb20KICAqIHRwY29uZmlnIHV0aWxpdHkgKGJ5IEMuIFNjb3R0IEFuYW5pYW4gYW5kIEJydWNlIEthbGwpLgpAQCAtMjgsNyArMjksNiBAQAogI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKLQogI2RlZmluZSBBTFBTX09MRFBST1RPCQkweDAxCS8qIG9sZCBzdHlsZSBpbnB1dCAqLwogI2RlZmluZSBBTFBTX0RVQUxQT0lOVAkJMHgwMgkvKiB0b3VjaHBhZCBoYXMgdHJhY2tzdGljayAqLwogI2RlZmluZSBBTFBTX1BBU1MJCTB4MDQJLyogZGV2aWNlIGhhcyBhIHBhc3MtdGhyb3VnaCBwb3J0ICovCkBAIC0zNyw3ICszNyw4IEBACiAjZGVmaW5lIEFMUFNfRldfQktfMQkJMHgxMAkvKiBmcm9udCAmIGJhY2sgYnV0dG9ucyBwcmVzZW50ICovCiAjZGVmaW5lIEFMUFNfRldfQktfMgkJMHgyMAkvKiBmcm9udCAmIGJhY2sgYnV0dG9ucyBwcmVzZW50ICovCiAjZGVmaW5lIEFMUFNfRk9VUl9CVVRUT05TCTB4NDAJLyogNCBkaXJlY3Rpb24gYnV0dG9uIHByZXNlbnQgKi8KLQorI2RlZmluZSBBTFBTX1BTMl9JTlRFUkxFQVZFRAkweDgwCS8qIDMtYnl0ZSBQUy8yIHBhY2tldCBpbnRlcmxlYXZlZCB3aXRoCisJCQkJCSAgIDYtYnl0ZSBBTFBTIHBhY2tldCAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFscHNfbW9kZWxfaW5mbyBhbHBzX21vZGVsX2RhdGFbXSA9IHsKIAl7IHsgMHgzMiwgMHgwMiwgMHgxNCB9LAkweGY4LCAweGY4LCBBTFBTX1BBU1MgfCBBTFBTX0RVQUxQT0lOVCB9LCAvKiBUb3NoaWJhIFNhbGVsbGl0ZSBQcm8gTTEwICovCkBAIC01OCw3ICs1OSw5IEBACiAJeyB7IDB4MjAsIDB4MDIsIDB4MGUgfSwJMHhmOCwgMHhmOCwgQUxQU19QQVNTIHwgQUxQU19EVUFMUE9JTlQgfSwgLyogWFhYICovCiAJeyB7IDB4MjIsIDB4MDIsIDB4MGEgfSwJMHhmOCwgMHhmOCwgQUxQU19QQVNTIHwgQUxQU19EVUFMUE9JTlQgfSwKIAl7IHsgMHgyMiwgMHgwMiwgMHgxNCB9LCAweGZmLCAweGZmLCBBTFBTX1BBU1MgfCBBTFBTX0RVQUxQT0lOVCB9LCAvKiBEZWxsIExhdGl0dWRlIEQ2MDAgKi8KLQl7IHsgMHg2MiwgMHgwMiwgMHgxNCB9LCAweGNmLCAweGNmLCBBTFBTX1BBU1MgfCBBTFBTX0RVQUxQT0lOVCB9LCAvKiBEZWxsIExhdGl0dWRlIEU2NTAwICovCisJLyogRGVsbCBMYXRpdHVkZSBFNTUwMCwgRTY0MDAsIEU2NTAwLCBQcmVjaXNpb24gTTQ0MDAgKi8KKwl7IHsgMHg2MiwgMHgwMiwgMHgxNCB9LCAweGNmLCAweGNmLAorCQlBTFBTX1BBU1MgfCBBTFBTX0RVQUxQT0lOVCB8IEFMUFNfUFMyX0lOVEVSTEVBVkVEIH0sCiAJeyB7IDB4NzMsIDB4MDIsIDB4NTAgfSwgMHhjZiwgMHhjZiwgQUxQU19GT1VSX0JVVFRPTlMgfSwJICAvKiBEZWxsIFZvc3RybyAxNDAwICovCiB9OwogCkBAIC02OSwyMCArNzIsODggQEAKICAqLwogCiAvKgotICogQUxQUyBhYm9sdXRlIE1vZGUgLSBuZXcgZm9ybWF0CisgKiBQUy8yIHBhY2tldCBmb3JtYXQKKyAqCisgKiBieXRlIDA6ICAwICAgIDAgWVNHTiBYU0dOICAgIDEgICAgTSAgICBSICAgIEwKKyAqIGJ5dGUgMTogWDcgICBYNiAgIFg1ICAgWDQgICBYMyAgIFgyICAgWDEgICBYMAorICogYnl0ZSAyOiBZNyAgIFk2ICAgWTUgICBZNCAgIFkzICAgWTIgICBZMSAgIFkwCisgKgorICogTm90ZSB0aGF0IHRoZSBkZXZpY2UgbmV2ZXIgc2lnbmFscyBvdmVyZmxvdyBjb25kaXRpb24uCisgKgorICogQUxQUyBhYnNvbHV0ZSBNb2RlIC0gbmV3IGZvcm1hdAogICoKICAqIGJ5dGUgMDogIDEgICAgPyAgICA/ICAgID8gICAgMSAgICA/ICAgID8gICAgPwogICogYnl0ZSAxOiAgMCAgIHg2ICAgeDUgICB4NCAgIHgzICAgeDIgICB4MSAgIHgwCi0gKiBieXRlIDI6ICAwICAgeDEwICB4OSAgIHg4ICAgeDcgICAgPyAgZmluICBnZXMKKyAqIGJ5dGUgMjogIDAgIHgxMCAgIHg5ICAgeDggICB4NyAgICA/ICBmaW4gIGdlcwogICogYnl0ZSAzOiAgMCAgIHk5ICAgeTggICB5NyAgICAxICAgIE0gICAgUiAgICBMCiAgKiBieXRlIDQ6ICAwICAgeTYgICB5NSAgIHk0ICAgeTMgICB5MiAgIHkxICAgeTAKICAqIGJ5dGUgNTogIDAgICB6NiAgIHo1ICAgejQgICB6MyAgIHoyICAgejEgICB6MAogICoKKyAqIER1YWxwb2ludCBkZXZpY2UgLS0gaW50ZXJsZWF2ZWQgcGFja2V0IGZvcm1hdAorICoKKyAqIGJ5dGUgMDogICAgMSAgICAxICAgIDAgICAgMCAgICAxICAgIDEgICAgMSAgICAxCisgKiBieXRlIDE6ICAgIDAgICB4NiAgIHg1ICAgeDQgICB4MyAgIHgyICAgeDEgICB4MAorICogYnl0ZSAyOiAgICAwICB4MTAgICB4OSAgIHg4ICAgeDcgICAgMCAgZmluICBnZXMKKyAqIGJ5dGUgMzogICAgMCAgICAwIFlTR04gWFNHTiAgICAxICAgIDEgICAgMSAgICAxCisgKiBieXRlIDQ6ICAgWDcgICBYNiAgIFg1ICAgWDQgICBYMyAgIFgyICAgWDEgICBYMAorICogYnl0ZSA1OiAgIFk3ICAgWTYgICBZNSAgIFk0ICAgWTMgICBZMiAgIFkxICAgWTAKKyAqIGJ5dGUgNjogICAgMCAgIHk5ICAgeTggICB5NyAgICAxICAgIG0gICAgciAgICBsCisgKiBieXRlIDc6ICAgIDAgICB5NiAgIHk1ICAgeTQgICB5MyAgIHkyICAgeTEgICB5MAorICogYnl0ZSA4OiAgICAwICAgejYgICB6NSAgIHo0ICAgejMgICB6MiAgIHoxICAgejAKKyAqCisgKiBDQVBJVEFMUyA9IHN0aWNrLCBtaW5pc2N1bGVzID0gdG91Y2hwYWQKKyAqCiAgKiA/J3MgY2FuIGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzIG9uIGRpZmZlcmVudCBtb2RlbHMsCiAgKiBzdWNoIGFzIHdoZWVsIHJvdGF0aW9uLCBleHRyYSBidXR0b25zLCBzdGljayBidXR0b25zCiAgKiBvbiBhIGR1YWxwb2ludCwgZXRjLgogICovCiAKK3N0YXRpYyBib29sIGFscHNfaXNfdmFsaWRfZmlyc3RfYnl0ZShjb25zdCBzdHJ1Y3QgYWxwc19tb2RlbF9pbmZvICptb2RlbCwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwlyZXR1cm4gKGRhdGEgJiBtb2RlbC0+bWFzazApID09IG1vZGVsLT5ieXRlMDsKK30KKworc3RhdGljIHZvaWQgYWxwc19yZXBvcnRfYnV0dG9ucyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKKwkJCQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYxLCBzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYyLAorCQkJCWludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBtaWRkbGUpCit7CisJc3RydWN0IGFscHNfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IGFscHNfbW9kZWxfaW5mbyAqbW9kZWwgPSBwcml2LT5pOworCisJaWYgKG1vZGVsLT5mbGFncyAmIEFMUFNfUFMyX0lOVEVSTEVBVkVEKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKKworCQkvKgorCQkgKiBJZiBzaGFyZWQgYnV0dG9uIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQgb24gdGhlCisJCSAqIG90aGVyIGRldmljZSAoZGV2MikgdGhlbiB0aGlzIGV2ZW50IHNob3VsZCBiZSBhbHNvCisJCSAqIHNlbnQgdGhyb3VnaCB0aGF0IGRldmljZS4KKwkJICovCisJCWRldiA9IHRlc3RfYml0KEJUTl9MRUZULCBkZXYyLT5rZXkpID8gZGV2MiA6IGRldjE7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgbGVmdCk7CisKKwkJZGV2ID0gdGVzdF9iaXQoQlROX1JJR0hULCBkZXYyLT5rZXkpID8gZGV2MiA6IGRldjE7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIHJpZ2h0KTsKKworCQlkZXYgPSB0ZXN0X2JpdChCVE5fTUlERExFLCBkZXYyLT5rZXkpID8gZGV2MiA6IGRldjE7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBtaWRkbGUpOworCisJCS8qCisJCSAqIFN5bmMgdGhlIF9vdGhlcl8gZGV2aWNlIG5vdywgd2UnbGwgZG8gdGhlIGZpcnN0CisJCSAqIGRldmljZSBsYXRlciBvbmNlIHdlIHJlcG9ydCB0aGUgcmVzdCBvZiB0aGUgZXZlbnRzLgorCQkgKi8KKwkJaW5wdXRfc3luYyhkZXYyKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgZGV2aWNlcyB3aXRoIG5vbi1pbnRlcmxlYXZlZCBwYWNrZXRzIHdlIGtub3cgd2hhdAorCQkgKiBkZXZpY2UgYnV0dG9ucyBiZWxvbmcgdG8gc28gd2UgY2FuIHNpbXBseSByZXBvcnQgdGhlbS4KKwkJICovCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2MSwgQlROX0xFRlQsIGxlZnQpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldjEsIEJUTl9SSUdIVCwgcmlnaHQpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldjEsIEJUTl9NSURETEUsIG1pZGRsZSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhbHBzX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogewogCXN0cnVjdCBhbHBzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwpAQCAtOTMsMTggKzE2NCw2IEBACiAJaW50IHgsIHksIHosIGdlcywgZmluLCBsZWZ0LCByaWdodCwgbWlkZGxlOwogCWludCBiYWNrID0gMCwgZm9yd2FyZCA9IDA7CiAKLQlpZiAoKHBhY2tldFswXSAmIDB4YzgpID09IDB4MDgpIHsgICAvKiAzLWJ5dGUgUFMvMiBwYWNrZXQgKi8KLQkJaW5wdXRfcmVwb3J0X2tleShkZXYyLCBCVE5fTEVGVCwgICBwYWNrZXRbMF0gJiAxKTsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYyLCBCVE5fUklHSFQsICBwYWNrZXRbMF0gJiAyKTsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYyLCBCVE5fTUlERExFLCBwYWNrZXRbMF0gJiA0KTsKLQkJaW5wdXRfcmVwb3J0X3JlbChkZXYyLCBSRUxfWCwKLQkJCXBhY2tldFsxXSA/IHBhY2tldFsxXSAtICgocGFja2V0WzBdIDw8IDQpICYgMHgxMDApIDogMCk7Ci0JCWlucHV0X3JlcG9ydF9yZWwoZGV2MiwgUkVMX1ksCi0JCQlwYWNrZXRbMl0gPyAoKHBhY2tldFswXSA8PCAzKSAmIDB4MTAwKSAtIHBhY2tldFsyXSA6IDApOwotCQlpbnB1dF9zeW5jKGRldjIpOwotCQlyZXR1cm47Ci0JfQotCiAJaWYgKG1vZGVsLT5mbGFncyAmIEFMUFNfT0xEUFJPVE8pIHsKIAkJbGVmdCA9IHBhY2tldFsyXSAmIDB4MTA7CiAJCXJpZ2h0ID0gcGFja2V0WzJdICYgMHgwODsKQEAgLTE0MCwxOCArMTk5LDEzIEBACiAJCWlucHV0X3JlcG9ydF9yZWwoZGV2MiwgUkVMX1gsICAoeCA+IDM4MyA/ICh4IC0gNzY4KSA6IHgpKTsKIAkJaW5wdXRfcmVwb3J0X3JlbChkZXYyLCBSRUxfWSwgLSh5ID4gMjU1ID8gKHkgLSA1MTIpIDogeSkpOwogCi0JCWlucHV0X3JlcG9ydF9rZXkoZGV2MiwgQlROX0xFRlQsIGxlZnQpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldjIsIEJUTl9SSUdIVCwgcmlnaHQpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldjIsIEJUTl9NSURETEUsIG1pZGRsZSk7CisJCWFscHNfcmVwb3J0X2J1dHRvbnMocHNtb3VzZSwgZGV2MiwgZGV2LCBsZWZ0LCByaWdodCwgbWlkZGxlKTsKIAotCQlpbnB1dF9zeW5jKGRldik7CiAJCWlucHV0X3N5bmMoZGV2Mik7CiAJCXJldHVybjsKIAl9CiAKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIGxlZnQpOwotCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIHJpZ2h0KTsKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgbWlkZGxlKTsKKwlhbHBzX3JlcG9ydF9idXR0b25zKHBzbW91c2UsIGRldiwgZGV2MiwgbGVmdCwgcmlnaHQsIG1pZGRsZSk7CiAKIAkvKiBDb252ZXJ0IGhhcmR3YXJlIHRhcCB0byBhIHJlYXNvbmFibGUgWiB2YWx1ZSAqLwogCWlmIChnZXMgJiYgIWZpbikKQEAgLTIwMiwyNSArMjU2LDE2OCBAQAogCWlucHV0X3N5bmMoZGV2KTsKIH0KIAotc3RhdGljIHBzbW91c2VfcmV0X3QgYWxwc19wcm9jZXNzX2J5dGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCitzdGF0aWMgdm9pZCBhbHBzX3JlcG9ydF9iYXJlX3BzMl9wYWNrZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkJCXVuc2lnbmVkIGNoYXIgcGFja2V0W10sCisJCQkJCWJvb2wgcmVwb3J0X2J1dHRvbnMpCit7CisJc3RydWN0IGFscHNfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJc3RydWN0IGlucHV0X2RldiAqZGV2MiA9IHByaXYtPmRldjI7CisKKwlpZiAocmVwb3J0X2J1dHRvbnMpCisJCWFscHNfcmVwb3J0X2J1dHRvbnMocHNtb3VzZSwgZGV2MiwgcHNtb3VzZS0+ZGV2LAorCQkJCXBhY2tldFswXSAmIDEsIHBhY2tldFswXSAmIDIsIHBhY2tldFswXSAmIDQpOworCisJaW5wdXRfcmVwb3J0X3JlbChkZXYyLCBSRUxfWCwKKwkJcGFja2V0WzFdID8gcGFja2V0WzFdIC0gKChwYWNrZXRbMF0gPDwgNCkgJiAweDEwMCkgOiAwKTsKKwlpbnB1dF9yZXBvcnRfcmVsKGRldjIsIFJFTF9ZLAorCQlwYWNrZXRbMl0gPyAoKHBhY2tldFswXSA8PCAzKSAmIDB4MTAwKSAtIHBhY2tldFsyXSA6IDApOworCisJaW5wdXRfc3luYyhkZXYyKTsKK30KKworc3RhdGljIHBzbW91c2VfcmV0X3QgYWxwc19oYW5kbGVfaW50ZXJsZWF2ZWRfcHMyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogewogCXN0cnVjdCBhbHBzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCisJaWYgKHBzbW91c2UtPnBrdGNudCA8IDYpCisJCXJldHVybiBQU01PVVNFX0dPT0RfREFUQTsKKworCWlmIChwc21vdXNlLT5wa3RjbnQgPT0gNikgeworCQkvKgorCQkgKiBTdGFydCBhIHRpbWVyIHRvIGZsdXNoIHRoZSBwYWNrZXQgaWYgaXQgZW5kcyB1cCBsYXN0CisJCSAqIDYtYnl0ZSBwYWNrZXQgaW4gdGhlIHN0cmVhbS4gVGltZXIgbmVlZHMgdG8gZmlyZQorCQkgKiBwc21vdXNlIGNvcmUgdGltZXMgb3V0IGl0c2VsZi4gMjAgbXMgc2hvdWxkIGJlIGVub3VnaAorCQkgKiB0byBkZWNpZGUgaWYgd2UgYXJlIGdldHRpbmcgbW9yZSBkYXRhIG9yIG5vdC4KKwkJICovCisJCW1vZF90aW1lcigmcHJpdi0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKSk7CisJCXJldHVybiBQU01PVVNFX0dPT0RfREFUQTsKKwl9CisKKwlkZWxfdGltZXIoJnByaXYtPnRpbWVyKTsKKworCWlmIChwc21vdXNlLT5wYWNrZXRbNl0gJiAweDgwKSB7CisKKwkJLyoKKwkJICogSGlnaGVzdCBiaXQgaXMgc2V0IC0gdGhhdCBtZWFucyB3ZSBlaXRoZXIgaGFkCisJCSAqIGNvbXBsZXRlIEFMUFMgcGFja2V0IGFuZCB0aGlzIGlzIHN0YXJ0IG9mIHRoZQorCQkgKiBuZXh0IHBhY2tldCBvciB3ZSBnb3QgZ2FyYmFnZS4KKwkJICovCisKKwkJaWYgKCgocHNtb3VzZS0+cGFja2V0WzNdIHwKKwkJICAgICAgcHNtb3VzZS0+cGFja2V0WzRdIHwKKwkJICAgICAgcHNtb3VzZS0+cGFja2V0WzVdKSAmIDB4ODApIHx8CisJCSAgICAoIWFscHNfaXNfdmFsaWRfZmlyc3RfYnl0ZShwcml2LT5pLCBwc21vdXNlLT5wYWNrZXRbNl0pKSkgeworCQkJZGJnKCJyZWZ1c2luZyBwYWNrZXQgJXggJXggJXggJXggIgorCQkJICAgICIoc3VzcGVjdGVkIGludGVybGVhdmVkIHBzLzIpXG4iLAorCQkJICAgIHBzbW91c2UtPnBhY2tldFszXSwgcHNtb3VzZS0+cGFja2V0WzRdLAorCQkJICAgIHBzbW91c2UtPnBhY2tldFs1XSwgcHNtb3VzZS0+cGFja2V0WzZdKTsKKwkJCXJldHVybiBQU01PVVNFX0JBRF9EQVRBOworCQl9CisKKwkJYWxwc19wcm9jZXNzX3BhY2tldChwc21vdXNlKTsKKworCQkvKiBDb250aW51ZSB3aXRoIHRoZSBuZXh0IHBhY2tldCAqLworCQlwc21vdXNlLT5wYWNrZXRbMF0gPSBwc21vdXNlLT5wYWNrZXRbNl07CisJCXBzbW91c2UtPnBrdGNudCA9IDE7CisKKwl9IGVsc2UgeworCisJCS8qCisJCSAqIEhpZ2ggYml0IGlzIDAgLSB0aGF0IG1lYW5zIHRoYXQgd2UgaW5kZWVkIGdvdCBhIFBTLzIKKwkJICogcGFja2V0IGluIHRoZSBtaWRkbGUgb2YgQUxQUyBwYWNrZXQuCisJCSAqCisJCSAqIFRoZXJlIGlzIGFsc28gcG9zc2liaWxpdHkgdGhhdCB3ZSBnb3QgNi1ieXRlIEFMUFMKKwkJICogcGFja2V0IGZvbGxvd2VkICBieSAzLWJ5dGUgcGFja2V0IGZyb20gdHJhY2twb2ludC4gV2UKKwkJICogY2FuIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIDIgc2NlbmFyaW9zIGJ1dAorCQkgKiBiZWNhc2UgdGhlIGxhdHRlciBpcyB1bmxpa2VseSB0byBoYXBwZW4gaW4gY291cnNlIG9mCisJCSAqIG5vcm1hbCBvcGVyYXRpb24gKHVzZXIgd291bGQgbmVlZCB0byBwcmVzcyBhbGwKKwkJICogYnV0dG9ucyBvbiB0aGUgcGFkIGFuZCBzdGFydCBtb3ZpbmcgdHJhY2twb2ludAorCQkgKiB3aXRob3V0IHRvdWNoaW5nIHRoZSBwYWQgc3VyZmFjZSkgd2UgYXNzdW1lIGZvcm1lci4KKwkJICogRXZlbiBpZiB3ZSBhcmUgd3JvbmcgdGhlIHdvc3QgdGhpbmcgdGhhdCB3b3VsZCBoYXBwZW4KKwkJICogdGhlIGN1cnNvciB3b3VsZCBqdW1wIGJ1dCB3ZSBzaG91bGQgbm90IGdldCBwcm90b2NvbAorCQkgKiBkZXN5bmNocm9uaXphdGlvbi4KKwkJICovCisKKwkJYWxwc19yZXBvcnRfYmFyZV9wczJfcGFja2V0KHBzbW91c2UsICZwc21vdXNlLT5wYWNrZXRbM10sCisJCQkJCSAgICBmYWxzZSk7CisKKwkJLyoKKwkJICogQ29udGludWUgd2l0aCB0aGUgc3RhbmRhcmQgQUxQUyBwcm90b2NvbCBoYW5kbGluZywKKwkJICogYnV0IG1ha2Ugc3VyZSB3ZSB3b24ndCBwcm9jZXNzIGl0IGFzIGFuIGludGVybGVhdmVkCisJCSAqIHBhY2tldCBhZ2Fpbiwgd2hpY2ggbWF5IGhhcHBlbiBpZiBhbGwgYnV0dG9ucyBhcmUKKwkJICogcHJlc3NlZC4gVG8gYXZvaWQgdGhpcyBsZXQncyByZXNldCB0aGUgNHRoIGJpdCB3aGljaAorCQkgKiBpcyBub3JtYWxseSAxLgorCQkgKi8KKwkJcHNtb3VzZS0+cGFja2V0WzNdID0gcHNtb3VzZS0+cGFja2V0WzZdICYgMHhmNzsKKwkJcHNtb3VzZS0+cGt0Y250ID0gNDsKKwl9CisKKwlyZXR1cm4gUFNNT1VTRV9HT09EX0RBVEE7Cit9CisKK3N0YXRpYyB2b2lkIGFscHNfZmx1c2hfcGFja2V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSA9IChzdHJ1Y3QgcHNtb3VzZSAqKWRhdGE7CisKKwlzZXJpb19wYXVzZV9yeChwc21vdXNlLT5wczJkZXYuc2VyaW8pOworCisJaWYgKHBzbW91c2UtPnBrdGNudCA9PSA2KSB7CisKKwkJLyoKKwkJICogV2UgZGlkIG5vdCBhbnkgbW9yZSBkYXRhIGluIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuCisJCSAqIFZhbGlkYXRlIHRoZSBsYXN0IDMgYnl0ZXMgYW5kIHByb2Nlc3MgYXMgYSBzdGFuZGFyZAorCQkgKiBBTFBTIHBhY2tldC4KKwkJICovCisJCWlmICgocHNtb3VzZS0+cGFja2V0WzNdIHwKKwkJICAgICBwc21vdXNlLT5wYWNrZXRbNF0gfAorCQkgICAgIHBzbW91c2UtPnBhY2tldFs1XSkgJiAweDgwKSB7CisJCQlkYmcoInJlZnVzaW5nIHBhY2tldCAleCAleCAleCAiCisJCQkgICAgIihzdXNwZWN0ZWQgaW50ZXJsZWF2ZWQgcHMvMilcbiIsCisJCQkgICAgcHNtb3VzZS0+cGFja2V0WzNdLCBwc21vdXNlLT5wYWNrZXRbNF0sCisJCQkgICAgcHNtb3VzZS0+cGFja2V0WzVdKTsKKwkJfSBlbHNlIHsKKwkJCWFscHNfcHJvY2Vzc19wYWNrZXQocHNtb3VzZSk7CisJCX0KKwkJcHNtb3VzZS0+cGt0Y250ID0gMDsKKwl9CisKKwlzZXJpb19jb250aW51ZV9yeChwc21vdXNlLT5wczJkZXYuc2VyaW8pOworfQorCitzdGF0aWMgcHNtb3VzZV9yZXRfdCBhbHBzX3Byb2Nlc3NfYnl0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgYWxwc19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgYWxwc19tb2RlbF9pbmZvICptb2RlbCA9IHByaXYtPmk7CisKIAlpZiAoKHBzbW91c2UtPnBhY2tldFswXSAmIDB4YzgpID09IDB4MDgpIHsgLyogUFMvMiBwYWNrZXQgKi8KIAkJaWYgKHBzbW91c2UtPnBrdGNudCA9PSAzKSB7Ci0JCQlhbHBzX3Byb2Nlc3NfcGFja2V0KHBzbW91c2UpOworCQkJYWxwc19yZXBvcnRfYmFyZV9wczJfcGFja2V0KHBzbW91c2UsIHBzbW91c2UtPnBhY2tldCwKKwkJCQkJCSAgICB0cnVlKTsKIAkJCXJldHVybiBQU01PVVNFX0ZVTExfUEFDS0VUOwogCQl9CiAJCXJldHVybiBQU01PVVNFX0dPT0RfREFUQTsKIAl9CiAKLQlpZiAoKHBzbW91c2UtPnBhY2tldFswXSAmIHByaXYtPmktPm1hc2swKSAhPSBwcml2LT5pLT5ieXRlMCkKKwkvKiBDaGVjayBmb3IgUFMvMiBwYWNrZXQgc3R1ZmZlZCBpbiB0aGUgbWlkZGxlIG9mIEFMUFMgcGFja2V0LiAqLworCisJaWYgKChtb2RlbC0+ZmxhZ3MgJiBBTFBTX1BTMl9JTlRFUkxFQVZFRCkgJiYKKwkgICAgcHNtb3VzZS0+cGt0Y250ID49IDQgJiYgKHBzbW91c2UtPnBhY2tldFszXSAmIDB4MGYpID09IDB4MGYpIHsKKwkJcmV0dXJuIGFscHNfaGFuZGxlX2ludGVybGVhdmVkX3BzMihwc21vdXNlKTsKKwl9CisKKwlpZiAoIWFscHNfaXNfdmFsaWRfZmlyc3RfYnl0ZShtb2RlbCwgcHNtb3VzZS0+cGFja2V0WzBdKSkgeworCQlkYmcoInJlZnVzaW5nIHBhY2tldFswXSA9ICV4IChtYXNrMCA9ICV4LCBieXRlMCA9ICV4KVxuIiwKKwkJICAgIHBzbW91c2UtPnBhY2tldFswXSwgbW9kZWwtPm1hc2swLCBtb2RlbC0+Ynl0ZTApOwogCQlyZXR1cm4gUFNNT1VTRV9CQURfREFUQTsKKwl9CiAKIAkvKiBCeXRlcyAyIC0gNiBzaG91bGQgaGF2ZSAwIGluIHRoZSBoaWdoZXN0IGJpdCAqLwogCWlmIChwc21vdXNlLT5wa3RjbnQgPj0gMiAmJiBwc21vdXNlLT5wa3RjbnQgPD0gNiAmJgotCSAgICAocHNtb3VzZS0+cGFja2V0W3BzbW91c2UtPnBrdGNudCAtIDFdICYgMHg4MCkpCisJICAgIChwc21vdXNlLT5wYWNrZXRbcHNtb3VzZS0+cGt0Y250IC0gMV0gJiAweDgwKSkgeworCQlkYmcoInJlZnVzaW5nIHBhY2tldFslaV0gPSAleFxuIiwKKwkJICAgIHBzbW91c2UtPnBrdGNudCAtIDEsIHBzbW91c2UtPnBhY2tldFtwc21vdXNlLT5wa3RjbnQgLSAxXSk7CiAJCXJldHVybiBQU01PVVNFX0JBRF9EQVRBOworCX0KIAogCWlmIChwc21vdXNlLT5wa3RjbnQgPT0gNikgewogCQlhbHBzX3Byb2Nlc3NfcGFja2V0KHBzbW91c2UpOwpAQCAtNDU5LDYgKzY1Niw3IEBACiAJc3RydWN0IGFscHNfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CiAKIAlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCWRlbF90aW1lcl9zeW5jKCZwcml2LT50aW1lcik7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocHJpdi0+ZGV2Mik7CiAJa2ZyZWUocHJpdik7CiB9CkBAIC00NzYsNiArNjc0LDggQEAKIAkJZ290byBpbml0X2ZhaWw7CiAKIAlwcml2LT5kZXYyID0gZGV2MjsKKwlzZXR1cF90aW1lcigmcHJpdi0+dGltZXIsIGFscHNfZmx1c2hfcGFja2V0LCAodW5zaWduZWQgbG9uZylwc21vdXNlKTsKKwogCXBzbW91c2UtPnByaXZhdGUgPSBwcml2OwogCiAJbW9kZWwgPSBhbHBzX2dldF9tb2RlbChwc21vdXNlLCAmdmVyc2lvbik7CkBAIC00ODcsNiArNjg3LDE3IEBACiAJaWYgKGFscHNfaHdfaW5pdChwc21vdXNlKSkKIAkJZ290byBpbml0X2ZhaWw7CiAKKwkvKgorCSAqIFVuZG8gcGFydCBvZiBzZXR1cCBkb25lIGZvciB1cyBieSBwc21vdXNlIGNvcmUgc2luY2UgdG91Y2hwYWQKKwkgKiBpcyBub3QgYSByZWxhdGl2ZSBkZXZpY2UuCisJICovCisJX19jbGVhcl9iaXQoRVZfUkVMLCBkZXYxLT5ldmJpdCk7CisJX19jbGVhcl9iaXQoUkVMX1gsIGRldjEtPnJlbGJpdCk7CisJX19jbGVhcl9iaXQoUkVMX1ksIGRldjEtPnJlbGJpdCk7CisKKwkvKgorCSAqIE5vdyBzZXQgdXAgb3VyIGNhcGFiaWxpdGllcy4KKwkgKi8KIAlkZXYxLT5ldmJpdFtCSVRfV09SRChFVl9LRVkpXSB8PSBCSVRfTUFTSyhFVl9LRVkpOwogCWRldjEtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSB8PSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCWRldjEtPmtleWJpdFtCSVRfV09SRChCVE5fVE9PTF9GSU5HRVIpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9GSU5HRVIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaAppbmRleCBiYzg3OTM2Li45MDRlZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaApAQCAtMjMsNiArMjMsNyBAQAogCWNoYXIgcGh5c1szMl07CQkJLyogUGh5cyAqLwogCWNvbnN0IHN0cnVjdCBhbHBzX21vZGVsX2luZm8gKmk7LyogSW5mbyAqLwogCWludCBwcmV2X2ZpbjsJCQkvKiBGaW5nZXIgYml0IGZyb20gcHJldmlvdXMgcGFja2V0ICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiB9OwogCiAjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9BTFBTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2FsdGVyYV9wczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYWx0ZXJhX3BzMi5jCmluZGV4IGY0NzllYTUuLjMyMGI3Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vYWx0ZXJhX3BzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYWx0ZXJhX3BzMi5jCkBAIC03OSwxMSArNzksMTEgQEAKIC8qCiAgKiBBZGQgb25lIGRldmljZSB0byB0aGlzIGRyaXZlci4KICAqLwotc3RhdGljIGludCBhbHRlcmFfcHMyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhbHRlcmFfcHMyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHBzMmlmICpwczJpZjsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIGlycTsKIAogCXBzMmlmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzMmlmKSwgR0ZQX0tFUk5FTCk7CiAJc2VyaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW8pLCBHRlBfS0VSTkVMKTsKQEAgLTEwOCwxMSArMTA4LDEzIEBACiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KIAotCXBzMmlmLT5pcnEgID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAocHMyaWYtPmlycSA8IDApIHsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKIAkJZXJyb3IgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KKwlwczJpZi0+aXJxID0gaXJxOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocHMyaWYtPmlvbWVtX3Jlcy0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShwczJpZi0+aW9tZW1fcmVzKSwgcGRldi0+bmFtZSkpIHsKQEAgLTE1NSw3ICsxNTcsNyBAQAogLyoKICAqIFJlbW92ZSBvbmUgZGV2aWNlIGZyb20gdGhpcyBkcml2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgYWx0ZXJhX3BzMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFsdGVyYV9wczJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHBzMmlmICpwczJpZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCkBAIC0xNzUsOSArMTc3LDEwIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFsdGVyYV9wczJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBhbHRlcmFfcHMyX3Byb2JlLAotCS5yZW1vdmUJCT0gYWx0ZXJhX3BzMl9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhbHRlcmFfcHMyX3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSBEUlZfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vYW1iYWttaS5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9hbWJha21pLmMKaW5kZXggODliMzk0MS4uOTI1NjNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9hbWJha21pLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9hbWJha21pLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCWNsa19kaXNhYmxlKGttaS0+Y2xrKTsKIH0KIAotc3RhdGljIGludCBhbWJhX2ttaV9wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgc3RydWN0IGFtYmFfaWQgKmlkKQorc3RhdGljIGludCBfX2RldmluaXQgYW1iYV9rbWlfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKIHsKIAlzdHJ1Y3QgYW1iYV9rbWlfcG9ydCAqa21pOwogCXN0cnVjdCBzZXJpbyAqaW87CkBAIC0xMzQsNyArMTM0LDcgQEAKIAlpby0+cG9ydF9kYXRhCT0ga21pOwogCWlvLT5kZXYucGFyZW50CT0gJmRldi0+ZGV2OwogCi0Ja21pLT5pbyAJPSBpbzsKKwlrbWktPmlvCQk9IGlvOwogCWttaS0+YmFzZQk9IGlvcmVtYXAoZGV2LT5yZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJmRldi0+cmVzKSk7CiAJaWYgKCFrbWktPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYW1iYV9rbWlfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgYW1iYV9rbWlfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhbWJhX2ttaV9wb3J0ICprbWkgPSBhbWJhX2dldF9kcnZkYXRhKGRldik7CiAKQEAgLTE5NywxMCArMTk3LDExIEBACiBzdGF0aWMgc3RydWN0IGFtYmFfZHJpdmVyIGFtYmFrbWlfZHJpdmVyID0gewogCS5kcnYJCT0gewogCQkubmFtZQk9ICJrbWktcGwwNTAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5pZF90YWJsZQk9IGFtYmFfa21pX2lkdGFibGUsCiAJLnByb2JlCQk9IGFtYmFfa21pX3Byb2JlLAotCS5yZW1vdmUJCT0gYW1iYV9rbWlfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYW1iYV9rbWlfcmVtb3ZlKSwKIAkucmVzdW1lCQk9IGFtYmFfa21pX3Jlc3VtZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vYXQzMnBzaWYuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYXQzMnBzaWYuYwppbmRleCBhNmZiN2EzLi5iNTQ0NTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2F0MzJwc2lmLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9hdDMycHNpZi5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHNpZi0+bG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKCEocHNpZl9yZWFkbChwc2lmLCBTUikgJiBQU0lGX0JJVChUWEVNUFRZKSkgJiYgdGltZW91dC0tKQotCQltc2xlZXAoMTApOworCQl1ZGVsYXkoNTApOwogCiAJaWYgKHRpbWVvdXQgPj0gMCkgewogCQlwc2lmX3dyaXRlbChwc2lmLCBUSFIsIHZhbCk7CkBAIC0zNTIsNiArMzUyLDcgQEAKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHBzaWZfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiYXRtZWxfcHNpZiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnN1c3BlbmQJPSBwc2lmX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBwc2lmX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vZ3NjcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2dzY3BzMi5jCmluZGV4IGJkMGY5MmQuLjA2YWRkZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vZ3NjcHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9nc2NwczIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwMiBUaGliYXV0IFZhcmVuZSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPgogICoKICAqIFBpZWNlcyBvZiBjb2RlIGJhc2VkIG9uIGxpbnV4LTIuNCdzIGhwX21vdXNlLmMgJiBocF9rZXliLmMKLSAqIAlDb3B5cmlnaHQgKGMpIDE5OTkgQWxleCBkZVZyaWVzIDxhbGV4QG9uZWZpc2h0d28uY2E+CisgKglDb3B5cmlnaHQgKGMpIDE5OTkgQWxleCBkZVZyaWVzIDxhbGV4QG9uZWZpc2h0d28uY2E+CiAgKglDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4KICAqCUNvcHlyaWdodCAoYykgMjAwMCBYYXZpZXIgRGViYWNrZXIgPGRlYmFja2V4QGVzaWVlLmZyPgogICoJQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgVGhvbWFzIE1hcnRlYXUgPG1hcnRlYXV0QGVzaWVlLmZyPgpAQCAtMzI2LDcgKzMyNiw3IEBACiAgKiBAcmV0dXJuOiBzdWNjZXNzL2Vycm9yIHJlcG9ydAogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGdzY3BzMl9wcm9iZShzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZ3NjcHMyX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdzY3BzMnBvcnQgKnBzMnBvcnQ7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCS5uYW1lCQk9ICJnc2NfcHMyIiwKIAkuaWRfdGFibGUJPSBnc2NwczJfZGV2aWNlX3RibCwKIAkucHJvYmUJCT0gZ3NjcHMyX3Byb2JlLAotCS5yZW1vdmUJCT0gZ3NjcHMyX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdzY3BzMl9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ3NjcHMyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaGlsX21sYy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKaW5kZXggN2JhOWYyYi4uNmNkMDNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMKQEAgLTk5MywxMCArOTkzLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgaGlsX21sY19pbml0KHZvaWQpCiB7Ci0JaW5pdF90aW1lcigmaGlsX21sY3Nfa2lja2VyKTsKLQloaWxfbWxjc19raWNrZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKLQloaWxfbWxjc19raWNrZXIuZnVuY3Rpb24gPSAmaGlsX21sY3NfdGltZXI7Ci0JYWRkX3RpbWVyKCZoaWxfbWxjc19raWNrZXIpOworCXNldHVwX3RpbWVyKCZoaWxfbWxjc19raWNrZXIsICZoaWxfbWxjc190aW1lciwgMCk7CisJbW9kX3RpbWVyKCZoaWxfbWxjc19raWNrZXIsIGppZmZpZXMgKyBIWik7CiAKIAl0YXNrbGV0X2VuYWJsZSgmaGlsX21sY3NfdGFza2xldCk7CiAKQEAgLTEwMDUsNyArMTAwMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBoaWxfbWxjX2V4aXQodm9pZCkKIHsKLQlkZWxfdGltZXIoJmhpbF9tbGNzX2tpY2tlcik7CisJZGVsX3RpbWVyX3N5bmMoJmhpbF9tbGNzX2tpY2tlcik7CiAKIAl0YXNrbGV0X2Rpc2FibGUoJmhpbF9tbGNzX3Rhc2tsZXQpOwogCXRhc2tsZXRfa2lsbCgmaGlsX21sY3NfdGFza2xldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCA3ZmJmZmU0Li42NGI2ODhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTE1OCw2ICsxNTgsMTQgQEAKIAkJfSwKIAl9LAogCXsKKwkJLyogR2lnYWJ5dGUgTTEwMjJNIG5ldGJvb2sgKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkdpZ2FieXRlIFRlY2hub2xvZ3kgQ28uLEx0ZC4iKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk0xMDIyRSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRVJTSU9OLCAiMS4wMiIpLAorCQl9LAorCX0sCisJewogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjk3MDAiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCAxZGYwMmQyNS4uZDg0YTM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaTgwNDJfcGxhdGZvcm1fZGV2aWNlOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaTgwNDJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgYm9vbCAoKmk4MDQyX3BsYXRmb3JtX2ZpbHRlcikodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIHN0ciwKKwkJCQkgICAgIHN0cnVjdCBzZXJpbyAqc2VyaW8pOwogCiB2b2lkIGk4MDQyX2xvY2tfY2hpcCh2b2lkKQogewpAQCAtMTM5LDYgKzE0MSw0OCBAQAogfQogRVhQT1JUX1NZTUJPTChpODA0Ml91bmxvY2tfY2hpcCk7CiAKK2ludCBpODA0Ml9pbnN0YWxsX2ZpbHRlcihib29sICgqZmlsdGVyKSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorCQkJCQlzdHJ1Y3Qgc2VyaW8gKnNlcmlvKSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MDQyX2xvY2ssIGZsYWdzKTsKKworCWlmIChpODA0Ml9wbGF0Zm9ybV9maWx0ZXIpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpODA0Ml9wbGF0Zm9ybV9maWx0ZXIgPSBmaWx0ZXI7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODA0Ml9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaTgwNDJfaW5zdGFsbF9maWx0ZXIpOworCitpbnQgaTgwNDJfcmVtb3ZlX2ZpbHRlcihib29sICgqZmlsdGVyKSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2VyaW8gKnBvcnQpKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTgwNDJfbG9jaywgZmxhZ3MpOworCisJaWYgKGk4MDQyX3BsYXRmb3JtX2ZpbHRlciAhPSBmaWx0ZXIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaTgwNDJfcGxhdGZvcm1fZmlsdGVyID0gTlVMTDsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MDQyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpODA0Ml9yZW1vdmVfZmlsdGVyKTsKKwogLyoKICAqIFRoZSBpODA0Ml93YWl0X3JlYWQoKSBhbmQgaTgwNDJfd2FpdF93cml0ZSBmdW5jdGlvbnMgd2FpdCBmb3IgdGhlIGk4MDQyIHRvCiAgKiBiZSByZWFkeSBmb3IgcmVhZGluZyB2YWx1ZXMgZnJvbSBpdCAvIHdyaXRpbmcgdmFsdWVzIHRvIGl0LgpAQCAtMzY5LDYgKzQxMywzMSBAQAogfQogCiAvKgorICogaTgwNDJfZmlsdGVyKCkgZmlsdGVycyBvdXQgdW53YW50ZWQgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgZGF0YSBzdHJlYW0uCisgKiBJdCBpcyBjYWxsZWQgZnJvbSBpODA0Ml9pbnRlcnJ1cHQgYW5kIHRodXMgaXMgcnVubmluZyB3aXRoIGludGVycnVwdHMKKyAqIG9mZiBhbmQgaTgwNDJfbG9jayBoZWxkLgorICovCitzdGF0aWMgYm9vbCBpODA0Ml9maWx0ZXIodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIHN0ciwKKwkJCSBzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCWlmICh1bmxpa2VseShpODA0Ml9zdXBwcmVzc19rYmRfYWNrKSkgeworCQlpZiAoKH5zdHIgJiBJODA0Ml9TVFJfQVVYREFUQSkgJiYKKwkJICAgIChkYXRhID09IDB4ZmEgfHwgZGF0YSA9PSAweGZlKSkgeworCQkJaTgwNDJfc3VwcHJlc3Nfa2JkX2Fjay0tOworCQkJZGJnKCJFeHRyYSBrZXlib2FyZCBBQ0sgLSBmaWx0ZXJlZCBvdXRcbiIpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlpZiAoaTgwNDJfcGxhdGZvcm1fZmlsdGVyICYmIGk4MDQyX3BsYXRmb3JtX2ZpbHRlcihkYXRhLCBzdHIsIHNlcmlvKSkgeworCQlkYmcoIkZpbHRlcmVkIG91dCBieSBwbGF0ZnJvbSBmaWx0ZXJcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCiAgKiBpODA0Ml9pbnRlcnJ1cHQoKSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb24gaW4gdGhpcyBkcml2ZXIgLQogICogaXQgaGFuZGxlcyB0aGUgaW50ZXJydXB0cyBmcm9tIHRoZSBpODA0MiwgYW5kIHNlbmRzIGluY29taW5nIGJ5dGVzCiAgKiB0byB0aGUgdXBwZXIgbGF5ZXJzLgpAQCAtMzc3LDEzICs0NDYsMTYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpODA0Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpODA0Ml9wb3J0ICpwb3J0OworCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIHN0ciwgZGF0YTsKIAl1bnNpZ25lZCBpbnQgZGZsOwogCXVuc2lnbmVkIGludCBwb3J0X25vOworCWJvb2wgZmlsdGVyZWQ7CiAJaW50IHJldCA9IDE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaTgwNDJfbG9jaywgZmxhZ3MpOworCiAJc3RyID0gaTgwNDJfcmVhZF9zdGF0dXMoKTsKIAlpZiAodW5saWtlbHkofnN0ciAmIEk4MDQyX1NUUl9PQkYpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MDQyX2xvY2ssIGZsYWdzKTsKQEAgLTM5MSw4ICs0NjMsOCBAQAogCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKIAl9CisKIAlkYXRhID0gaTgwNDJfcmVhZF9kYXRhKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgwNDJfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGk4MDQyX211eF9wcmVzZW50ICYmIChzdHIgJiBJODA0Ml9TVFJfQVVYREFUQSkpIHsKIAkJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF90cmFuc21pdDsKQEAgLTQ0MSwyMSArNTEzLDE5IEBACiAJfQogCiAJcG9ydCA9ICZpODA0Ml9wb3J0c1twb3J0X25vXTsKKwlzZXJpbyA9IHBvcnQtPmV4aXN0cyA/IHBvcnQtPnNlcmlvIDogTlVMTDsKIAogCWRiZygiJTAyeCA8LSBpODA0MiAoaW50ZXJydXB0LCAlZCwgJWQlcyVzKSIsCiAJICAgIGRhdGEsIHBvcnRfbm8sIGlycSwKIAkgICAgZGZsICYgU0VSSU9fUEFSSVRZID8gIiwgYmFkIHBhcml0eSIgOiAiIiwKIAkgICAgZGZsICYgU0VSSU9fVElNRU9VVCA/ICIsIHRpbWVvdXQiIDogIiIpOwogCi0JaWYgKHVubGlrZWx5KGk4MDQyX3N1cHByZXNzX2tiZF9hY2spKQotCQlpZiAocG9ydF9ubyA9PSBJODA0Ml9LQkRfUE9SVF9OTyAmJgotCQkgICAgKGRhdGEgPT0gMHhmYSB8fCBkYXRhID09IDB4ZmUpKSB7Ci0JCQlpODA0Ml9zdXBwcmVzc19rYmRfYWNrLS07Ci0JCQlnb3RvIG91dDsKLQkJfQorCWZpbHRlcmVkID0gaTgwNDJfZmlsdGVyKGRhdGEsIHN0ciwgc2VyaW8pOwogCi0JaWYgKGxpa2VseShwb3J0LT5leGlzdHMpKQotCQlzZXJpb19pbnRlcnJ1cHQocG9ydC0+c2VyaW8sIGRhdGEsIGRmbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgwNDJfbG9jaywgZmxhZ3MpOworCisJaWYgKGxpa2VseShwb3J0LT5leGlzdHMgJiYgIWZpbHRlcmVkKSkKKwkJc2VyaW9faW50ZXJydXB0KHNlcmlvLCBkYXRhLCBkZmwpOwogCiAgb3V0OgogCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYwppbmRleCBmNDEyYzY5Li5kNTU4NzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2ExMTExcHMyLmMKQEAgLTE4MCw4ICsxODAsOCBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLXBzMl90ZXN0X29uZShzdHJ1Y3QgcHMyaWYgKnBzMmlmLCB1bnNpZ25lZCBpbnQgbWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IHBzMl90ZXN0X29uZShzdHJ1Y3QgcHMyaWYgKnBzMmlmLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCkBAIC0xOTcsNyArMTk3LDcgQEAKICAqIFRlc3QgdGhlIGtleWJvYXJkIGludGVyZmFjZS4gIFdlIGJhc2ljYWxseSBjaGVjayB0byBtYWtlIHN1cmUgdGhhdAogICogd2UgY2FuIGRyaXZlIGVhY2ggbGluZSB0byB0aGUga2V5Ym9hcmQgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBwczJfdGVzdChzdHJ1Y3QgcHMyaWYgKnBzMmlmKQorc3RhdGljIGludCBfX2RldmluaXQgcHMyX3Rlc3Qoc3RydWN0IHBzMmlmICpwczJpZikKIHsKIAl1bnNpZ25lZCBpbnQgc3RhdDsKIAlpbnQgcmV0ID0gMDsKQEAgLTMxMiw3ICszMTIsNyBAQAogLyoKICAqIFJlbW92ZSBvbmUgZGV2aWNlIGZyb20gdGhpcyBkcml2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgcHMyX3JlbW92ZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgcHMyX3JlbW92ZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQogewogCXN0cnVjdCBwczJpZiAqcHMyaWYgPSBzYTExMTFfZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtMzM1LDcgKzMzNSw3IEBACiAJfSwKIAkuZGV2aWQJCT0gU0ExMTExX0RFVklEX1BTMiwKIAkucHJvYmUJCT0gcHMyX3Byb2JlLAotCS5yZW1vdmUJCT0gcHMyX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBzMl9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHMyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmggYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCmluZGV4IDkxMTRhZTEuLjE2MzEwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBkcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCiAgKgotICogIFVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBzdXBwb3J0CisgKiAgVVNCIFdhY29tIHRhYmxldCBzdXBwb3J0CiAgKgogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHVjdy5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDAgQW5kcmVhcyBCYWNoIEFhZW4JPGFiYWNoQHN0b2ZhbmV0LmRrPgpAQCAtNjksNiArNjksOSBAQAogICogICAgICB2MS40OSAocGMpIC0gQWRkZWQgc3VwcG9ydCBmb3IgVVNCIFRhYmxldCBQQyAoMHg5MCwgMHg5MywgYW5kIDB4OUEpCiAgKiAgICAgIHYxLjUwIChwYykgLSBGaXhlZCBhIFRhYmxldFBDIHRvdWNoIGJ1ZyBpbiAyLjYuMjgKICAqICAgICAgdjEuNTEgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIEludHVvczQKKyAqICAgICAgdjEuNTIgKHBjKSAtIFF1ZXJ5IFdhY29tIGRhdGEgdXBvbiBzeXN0ZW0gcmVzdW1lCisgKiAgICAgICAgICAgICAgICAgLSBhZGQgZGVmaW5lcyBmb3IgZmVhdHVyZXMtPnR5cGUKKyAqICAgICAgICAgICAgICAgICAtIGFkZCBuZXcgZGV2aWNlcyAoMHg5RiwgMHhFMiwgYW5kIDBYRTMpCiAgKi8KIAogLyoKQEAgLTg5LDkgKzkyLDkgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjUxIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNTIiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFdhY29tIHRhYmxldCBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCiAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CkBAIC0xMzMsNiArMTM2LDggQEAKIGV4dGVybiB2b2lkIGlucHV0X2Rldl9pNChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CiBleHRlcm4gdm9pZCBpbnB1dF9kZXZfcGwoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOwogZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X3B0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKK2V4dGVybiB2b2lkIGlucHV0X2Rldl90cGMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOworZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X3RwYzJmZyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CiBleHRlcm4gdm9pZCBpbnB1dF9kZXZfbW8oc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOwogZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X2JlZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CiBleHRlcm4gX191MTYgd2Fjb21fbGUxNl90b19jcHUodW5zaWduZWQgY2hhciAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCmluZGV4IGVhMzBjOTguLjA3MmYzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGRyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCiAgKgotICogIFVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBzdXBwb3J0IC0gc3lzdGVtIHNwZWNpZmljIGNvZGUKKyAqICBVU0IgV2Fjb20gdGFibGV0IHN1cHBvcnQgLSBzeXN0ZW0gc3BlY2lmaWMgY29kZQogICovCiAKIC8qCkBAIC0yMDksNiArMjA5LDcgQEAKIAlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSB8PSBCSVRfTUFTSyhCVE5fTEVGVCkgfAogCQlCSVRfTUFTSyhCVE5fUklHSFQpIHwgQklUX01BU0soQlROX01JRERMRSk7CiAJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpIHwKKwkJQklUX01BU0soQlROX1RPT0xfUEVOKSB8IEJJVF9NQVNLKEJUTl9TVFlMVVMpIHwKIAkJQklUX01BU0soQlROX1RPT0xfTU9VU0UpIHwgQklUX01BU0soQlROX1NUWUxVUzIpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX0RJU1RBTkNFLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT5kaXN0YW5jZV9tYXgsIDAsIDApOwogfQpAQCAtMjU2LDYgKzI1Nyw3IEBACiAJCUJJVF9NQVNLKEJUTl9SSUdIVCkgfCBCSVRfTUFTSyhCVE5fTUlERExFKSB8CiAJCUJJVF9NQVNLKEJUTl9TSURFKSB8IEJJVF9NQVNLKEJUTl9FWFRSQSk7CiAJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpIHwKKwkJQklUX01BU0soQlROX1RPT0xfUEVOKSB8IEJJVF9NQVNLKEJUTl9TVFlMVVMpIHwKIAkJQklUX01BU0soQlROX1RPT0xfTU9VU0UpIHwgQklUX01BU0soQlROX1RPT0xfQlJVU0gpIHwKIAkJQklUX01BU0soQlROX1RPT0xfUEVOQ0lMKSB8IEJJVF9NQVNLKEJUTl9UT09MX0FJUkJSVVNIKSB8CiAJCUJJVF9NQVNLKEJUTl9UT09MX0xFTlMpIHwgQklUX01BU0soQlROX1NUWUxVUzIpOwpAQCAtMjY5LDcgKzI3MSw4IEBACiAKIHZvaWQgaW5wdXRfZGV2X3BsKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1NUWUxVUzIpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1RPT0xfUEVOKSB8CisJCUJJVF9NQVNLKEJUTl9TVFlMVVMpIHwgQklUX01BU0soQlROX1NUWUxVUzIpOwogfQogCiB2b2lkIGlucHV0X2Rldl9wdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKQEAgLTI3NywxMiArMjgwLDMyIEBACiAJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpOwogfQogCit2b2lkIGlucHV0X2Rldl90cGMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCit7CisJaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCB8fAorCSAgICB3YWNvbV93YWMtPmZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9UUklQTEVUQVApIHsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlgsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPnhfcGh5LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPnlfcGh5LCAwLCAwKTsKKwkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9ET1VCTEVUQVApOworCX0KK30KKwordm9pZCBpbnB1dF9kZXZfdHBjMmZnKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQoreworCWlmICh3YWNvbV93YWMtPmZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9UUklQTEVUQVApIHsKKwkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9UUklQTEVUQVApOworCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX01TQyk7CisJCWlucHV0X2Rldi0+bXNjYml0WzBdIHw9IEJJVF9NQVNLKE1TQ19TRVJJQUwpOworCX0KK30KKwogc3RhdGljIGludCB3YWNvbV9wYXJzZV9oaWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCBoaWRfZGVzY3JpcHRvciAqaGlkX2Rlc2MsCi0JCQkgICBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCisJCQkgICBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMgPSB3YWNvbV93YWMtPmZlYXR1cmVzOwotCWNoYXIgbGltaXQgPSAwLCByZXN1bHQgPSAwOworCWNoYXIgbGltaXQgPSAwOworCS8qIHJlc3VsdCBoYXMgdG8gYmUgZGVmaW5lZCBhcyBpbnQgZm9yIHNvbWUgZGV2aWNlcyAqLworCWludCByZXN1bHQgPSAwOwogCWludCBpID0gMCwgdXNhZ2UgPSBXQ01fVU5ERUZJTkVELCBmaW5nZXIgPSAwLCBwZW4gPSAwOwogCXVuc2lnbmVkIGNoYXIgKnJlcG9ydDsKIApAQCAtMzI4LDEzICszNTEsMjQgQEAKIAkJCWNhc2UgSElEX1VTQUdFX1g6CiAJCQkJaWYgKHVzYWdlID09IFdDTV9ERVNLVE9QKSB7CiAJCQkJCWlmIChmaW5nZXIpIHsKLQkJCQkJCWZlYXR1cmVzLT50b3VjaF94X21heCA9Ci0JCQkJCQkJZmVhdHVyZXMtPnRvdWNoX3lfbWF4ID0KLQkJCQkJCQl3YWNvbV9sZTE2X3RvX2NwdSgmcmVwb3J0W2kgKyAzXSk7CisJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9ET1VCTEVUQVA7CisJCQkJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gVEFCTEVUUEMyRkcpIHsKKwkJCQkJCQkvKiBuZWVkIHRvIHJlc2V0IGJhY2sgKi8KKwkJCQkJCQlmZWF0dXJlcy0+cGt0bGVuID0gV0FDT01fUEtHTEVOX1RQQzJGRzsKKwkJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9UUklQTEVUQVA7CisJCQkJCQl9CiAJCQkJCQlmZWF0dXJlcy0+eF9tYXggPQorCQkJCQkJCXdhY29tX2xlMTZfdG9fY3B1KCZyZXBvcnRbaSArIDNdKTsKKwkJCQkJCWZlYXR1cmVzLT54X3BoeSA9CiAJCQkJCQkJd2Fjb21fbGUxNl90b19jcHUoJnJlcG9ydFtpICsgNl0pOwotCQkJCQkJaSArPSA3OworCQkJCQkJZmVhdHVyZXMtPnVuaXQgPSByZXBvcnRbaSArIDldOworCQkJCQkJZmVhdHVyZXMtPnVuaXRFeHBvID0gcmVwb3J0W2kgKyAxMV07CisJCQkJCQlpICs9IDEyOwogCQkJCQl9IGVsc2UgaWYgKHBlbikgeworCQkJCQkJLyogcGVuYWJsZWQgb25seSBhY2NlcHRzIGV4YWN0IGJ5dGVzIG9mIGRhdGEgKi8KKwkJCQkJCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBUQUJMRVRQQzJGRykKKwkJCQkJCQlmZWF0dXJlcy0+cGt0bGVuID0gV0FDT01fUEtHTEVOX1BFTkFCTEVEOworCQkJCQkJZmVhdHVyZXMtPmRldmljZV90eXBlID0gQlROX1RPT0xfUEVOOwogCQkJCQkJZmVhdHVyZXMtPnhfbWF4ID0KIAkJCQkJCQl3YWNvbV9sZTE2X3RvX2NwdSgmcmVwb3J0W2kgKyAzXSk7CiAJCQkJCQlpICs9IDQ7CkBAIC0zNTAsMTAgKzM4NCwzNSBAQAogCQkJCWJyZWFrOwogCiAJCQljYXNlIEhJRF9VU0FHRV9ZOgotCQkJCWlmICh1c2FnZSA9PSBXQ01fREVTS1RPUCkKLQkJCQkJZmVhdHVyZXMtPnlfbWF4ID0KLQkJCQkJCXdhY29tX2xlMTZfdG9fY3B1KCZyZXBvcnRbaSArIDNdKTsKLQkJCQlpICs9IDQ7CisJCQkJaWYgKHVzYWdlID09IFdDTV9ERVNLVE9QKSB7CisJCQkJCWlmIChmaW5nZXIpIHsKKwkJCQkJCWZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9IEJUTl9UT09MX0RPVUJMRVRBUDsKKwkJCQkJCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBUQUJMRVRQQzJGRykgeworCQkJCQkJCS8qIG5lZWQgdG8gcmVzZXQgYmFjayAqLworCQkJCQkJCWZlYXR1cmVzLT5wa3RsZW4gPSBXQUNPTV9QS0dMRU5fVFBDMkZHOworCQkJCQkJCWZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9IEJUTl9UT09MX1RSSVBMRVRBUDsKKwkJCQkJCQlmZWF0dXJlcy0+eV9tYXggPQorCQkJCQkJCQl3YWNvbV9sZTE2X3RvX2NwdSgmcmVwb3J0W2kgKyAzXSk7CisJCQkJCQkJZmVhdHVyZXMtPnlfcGh5ID0KKwkJCQkJCQkJd2Fjb21fbGUxNl90b19jcHUoJnJlcG9ydFtpICsgNl0pOworCQkJCQkJCWkgKz0gNzsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZmVhdHVyZXMtPnlfbWF4ID0KKwkJCQkJCQkJZmVhdHVyZXMtPnhfbWF4OworCQkJCQkJCWZlYXR1cmVzLT55X3BoeSA9CisJCQkJCQkJCXdhY29tX2xlMTZfdG9fY3B1KCZyZXBvcnRbaSArIDNdKTsKKwkJCQkJCQlpICs9IDQ7CisJCQkJCQl9CisJCQkJCX0gZWxzZSBpZiAocGVuKSB7CisJCQkJCQkvKiBwZW5hYmxlZCBvbmx5IGFjY2VwdHMgZXhhY3QgYnl0ZXMgb2YgZGF0YSAqLworCQkJCQkJaWYgKGZlYXR1cmVzLT50eXBlID09IFRBQkxFVFBDMkZHKQorCQkJCQkJCWZlYXR1cmVzLT5wa3RsZW4gPSBXQUNPTV9QS0dMRU5fUEVOQUJMRUQ7CisJCQkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9QRU47CisJCQkJCQlmZWF0dXJlcy0+eV9tYXggPQorCQkJCQkJCXdhY29tX2xlMTZfdG9fY3B1KCZyZXBvcnRbaSArIDNdKTsKKwkJCQkJCWkgKz0gNDsKKwkJCQkJfQorCQkJCX0KIAkJCQlicmVhazsKIAogCQkJY2FzZSBISURfVVNBR0VfRklOR0VSOgpAQCAtMzc2LDcgKzQzNSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEhJRF9DT0xMRUNUSU9OOgotCQkJLyogcmVzZXQgVXNhZ2VQYWdlIGFucyBGaW5nZXIgKi8KKwkJCS8qIHJlc2V0IFVzYWdlUGFnZSBhbmQgRmluZ2VyICovCiAJCQlmaW5nZXIgPSB1c2FnZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMzg4LDQzICs0NDcsOTIgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IHdhY29tX3F1ZXJ5X3RhYmxldF9kYXRhKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCB3YWNvbV9xdWVyeV90YWJsZXRfZGF0YShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Ziwgc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcykKIHsKIAl1bnNpZ25lZCBjaGFyICpyZXBfZGF0YTsKLQlpbnQgbGltaXQgPSAwOwotCWludCBlcnJvcjsKKwlpbnQgbGltaXQgPSAwLCByZXBvcnRfaWQgPSAyOworCWludCBlcnJvciA9IC1FTk9NRU07CiAKIAlyZXBfZGF0YSA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXBfZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnJvcjsKIAotCWRvIHsKLQkJcmVwX2RhdGFbMF0gPSAyOwotCQlyZXBfZGF0YVsxXSA9IDI7Ci0JCWVycm9yID0gdXNiX3NldF9yZXBvcnQoaW50ZiwgV0FDX0hJRF9GRUFUVVJFX1JFUE9SVCwKLQkJCQkJMiwgcmVwX2RhdGEsIDIpOwotCQlpZiAoZXJyb3IgPj0gMCkKLQkJCWVycm9yID0gdXNiX2dldF9yZXBvcnQoaW50ZiwKLQkJCQkJCVdBQ19ISURfRkVBVFVSRV9SRVBPUlQsIDIsCi0JCQkJCQlyZXBfZGF0YSwgMik7Ci0JfSB3aGlsZSAoKGVycm9yIDwgMCB8fCByZXBfZGF0YVsxXSAhPSAyKSAmJiBsaW1pdCsrIDwgNSk7CisJLyogYXNrIHRvIHJlcG9ydCB0YWJsZXQgZGF0YSBpZiBpdCBpcyAyRkdUIG9yIG5vdCBhIFRhYmxldCBQQyAqLworCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7CisJCWRvIHsKKwkJCXJlcF9kYXRhWzBdID0gMzsKKwkJCXJlcF9kYXRhWzFdID0gNDsKKwkJCXJlcG9ydF9pZCA9IDM7CisJCQllcnJvciA9IHVzYl9zZXRfcmVwb3J0KGludGYsIFdBQ19ISURfRkVBVFVSRV9SRVBPUlQsCisJCQkJcmVwb3J0X2lkLCByZXBfZGF0YSwgMik7CisJCQlpZiAoZXJyb3IgPj0gMCkKKwkJCQllcnJvciA9IHVzYl9nZXRfcmVwb3J0KGludGYsCisJCQkJCVdBQ19ISURfRkVBVFVSRV9SRVBPUlQsIHJlcG9ydF9pZCwKKwkJCQkJcmVwX2RhdGEsIDMpOworCQl9IHdoaWxlICgoZXJyb3IgPCAwIHx8IHJlcF9kYXRhWzFdICE9IDQpICYmIGxpbWl0KysgPCA1KTsKKwl9IGVsc2UgaWYgKGZlYXR1cmVzLT50eXBlICE9IFRBQkxFVFBDICYmIGZlYXR1cmVzLT50eXBlICE9IFRBQkxFVFBDMkZHKSB7CisJCWRvIHsKKwkJCXJlcF9kYXRhWzBdID0gMjsKKwkJCXJlcF9kYXRhWzFdID0gMjsKKwkJCWVycm9yID0gdXNiX3NldF9yZXBvcnQoaW50ZiwgV0FDX0hJRF9GRUFUVVJFX1JFUE9SVCwKKwkJCQlyZXBvcnRfaWQsIHJlcF9kYXRhLCAyKTsKKwkJCWlmIChlcnJvciA+PSAwKQorCQkJCWVycm9yID0gdXNiX2dldF9yZXBvcnQoaW50ZiwKKwkJCQkJV0FDX0hJRF9GRUFUVVJFX1JFUE9SVCwgcmVwb3J0X2lkLAorCQkJCQlyZXBfZGF0YSwgMik7CisJCX0gd2hpbGUgKChlcnJvciA8IDAgfHwgcmVwX2RhdGFbMV0gIT0gMikgJiYgbGltaXQrKyA8IDUpOworCX0KIAogCWtmcmVlKHJlcF9kYXRhKTsKIAogCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IDA7CiB9CiAKK3N0YXRpYyBpbnQgd2Fjb21fcmV0cmlldmVfaGlkX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXMpCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlzdHJ1Y3QgaGlkX2Rlc2NyaXB0b3IgKmhpZF9kZXNjOworCisJLyogZGVmYXVsdCBkZXZpY2UgdG8gcGVuYWJsZWQgKi8KKwlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPSBCVE5fVE9PTF9QRU47CisKKwkvKiBvbmx5IFRhYmxldCBQQ3MgbmVlZCB0byByZXRyaWV2ZSB0aGUgaW5mbyAqLworCWlmICgoZmVhdHVyZXMtPnR5cGUgIT0gVEFCTEVUUEMpICYmIChmZWF0dXJlcy0+dHlwZSAhPSBUQUJMRVRQQzJGRykpCisJCWdvdG8gb3V0OworCisJaWYgKHVzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcihpbnRlcmZhY2UsIEhJRF9ERVZJQ0VUX0hJRCwgJmhpZF9kZXNjKSkgeworCQlpZiAodXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKCZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLAorCQkJCUhJRF9ERVZJQ0VUX1JFUE9SVCwgJmhpZF9kZXNjKSkgeworCQkJcHJpbnRrKCJ3YWNvbTogY2FuIG5vdCByZXRyaWV2ZSBleHRyYSBjbGFzcyBkZXNjcmlwdG9yXG4iKTsKKwkJCWVycm9yID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWVycm9yID0gd2Fjb21fcGFyc2VfaGlkKGludGYsIGhpZF9kZXNjLCBmZWF0dXJlcyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCS8qIHRvdWNoIGRldmljZSBmb3VuZCBidXQgc2l6ZSBpcyBub3QgZGVmaW5lZC4gdXNlIGRlZmF1bHQgKi8KKwlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0RPVUJMRVRBUCAmJiAhZmVhdHVyZXMtPnhfbWF4KSB7CisJCWZlYXR1cmVzLT54X21heCA9IDEwMjM7CisJCWZlYXR1cmVzLT55X21heCA9IDEwMjM7CisJfQorCisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIGludCB3YWNvbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJc3RydWN0IHdhY29tICp3YWNvbTsKIAlzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWM7CiAJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlczsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGVycm9yID0gLUVOT01FTTsKLQlzdHJ1Y3QgaGlkX2Rlc2NyaXB0b3IgKmhpZF9kZXNjOwogCiAJd2Fjb20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb20pLCBHRlBfS0VSTkVMKTsKIAl3YWNvbV93YWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb21fd2FjKSwgR0ZQX0tFUk5FTCk7CkBAIC00MzIsNyArNTQwLDcgQEAKIAlpZiAoIXdhY29tIHx8ICFpbnB1dF9kZXYgfHwgIXdhY29tX3dhYykKIAkJZ290byBmYWlsMTsKIAotCXdhY29tX3dhYy0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCAxMCwgR0ZQX0tFUk5FTCwgJndhY29tLT5kYXRhX2RtYSk7CisJd2Fjb21fd2FjLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFdBQ09NX1BLR0xFTl9NQVgsIEdGUF9LRVJORUwsICZ3YWNvbS0+ZGF0YV9kbWEpOwogCWlmICghd2Fjb21fd2FjLT5kYXRhKQogCQlnb3RvIGZhaWwxOwogCkBAIC00NDgsNyArNTU2LDcgQEAKIAlzdHJsY2F0KHdhY29tLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZih3YWNvbS0+cGh5cykpOwogCiAJd2Fjb21fd2FjLT5mZWF0dXJlcyA9IGZlYXR1cmVzID0gZ2V0X3dhY29tX2ZlYXR1cmUoaWQpOwotCUJVR19PTihmZWF0dXJlcy0+cGt0bGVuID4gMTApOworCUJVR19PTihmZWF0dXJlcy0+cGt0bGVuID4gV0FDT01fUEtHTEVOX01BWCk7CiAKIAlpbnB1dF9kZXYtPm5hbWUgPSB3YWNvbV93YWMtPmZlYXR1cmVzLT5uYW1lOwogCXdhY29tLT53YWNvbV93YWMgPSB3YWNvbV93YWM7CkBAIC00NjMsNDcgKzU3MSwyNCBAQAogCiAJZW5kcG9pbnQgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CiAKLQkvKiBJbml0aWFsaXplIHRvdWNoX3hfbWF4IGFuZCB0b3VjaF95X21heCBpbiBjYXNlIGl0IGlzIG5vdCBkZWZpbmVkICovCi0JaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMtPnR5cGUgPT0gVEFCTEVUUEMpIHsKLQkJZmVhdHVyZXMtPnRvdWNoX3hfbWF4ID0gMTAyMzsKLQkJZmVhdHVyZXMtPnRvdWNoX3lfbWF4ID0gMTAyMzsKLQl9IGVsc2UgewotCQlmZWF0dXJlcy0+dG91Y2hfeF9tYXggPSAwOwotCQlmZWF0dXJlcy0+dG91Y2hfeV9tYXggPSAwOwotCX0KLQotCS8qIFRhYmxldFBDIG5lZWQgdG8gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGFuZCBsb2dpY2FsIG1heGltdW0gZnJvbSByZXBvcnQgZGVzY3JpcHRvciAqLwotCWlmICh3YWNvbV93YWMtPmZlYXR1cmVzLT50eXBlID09IFRBQkxFVFBDKSB7Ci0JCWlmICh1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoaW50ZXJmYWNlLCBISURfREVWSUNFVF9ISUQsICZoaWRfZGVzYykpIHsKLQkJCWlmICh1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0sCi0JCQkJCQkgICAgIEhJRF9ERVZJQ0VUX1JFUE9SVCwgJmhpZF9kZXNjKSkgewotCQkJCXByaW50aygid2Fjb206IGNhbiBub3QgcmV0cml2ZSBleHRyYSBjbGFzcyBkZXNjcmlwdG9yXG4iKTsKLQkJCQlnb3RvIGZhaWwyOwotCQkJfQotCQl9Ci0JCWVycm9yID0gd2Fjb21fcGFyc2VfaGlkKGludGYsIGhpZF9kZXNjLCB3YWNvbV93YWMpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGZhaWwyOwotCX0KKwkvKiBSZXRyaWV2ZSB0aGUgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgc2l6ZSBmb3IgT0VNIGRldmljZXMgKi8KKwllcnJvciA9IHdhY29tX3JldHJpZXZlX2hpZF9kZXNjcmlwdG9yKGludGYsIGZlYXR1cmVzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbDI7CiAKIAlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1RPT0xfUEVOKSB8Ci0JCUJJVF9NQVNLKEJUTl9UT1VDSCkgfCBCSVRfTUFTSyhCVE5fU1RZTFVTKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CisKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCBmZWF0dXJlcy0+eF9tYXgsIDQsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsIGZlYXR1cmVzLT55X21heCwgNCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIDAsIGZlYXR1cmVzLT5wcmVzc3VyZV9tYXgsIDAsIDApOwotCWlmIChmZWF0dXJlcy0+dHlwZSA9PSBUQUJMRVRQQykgewotCQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT09MX0RPVUJMRVRBUCk7Ci0JCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCBmZWF0dXJlcy0+dG91Y2hfeF9tYXgsIDQsIDApOwotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWSwgMCwgZmVhdHVyZXMtPnRvdWNoX3lfbWF4LCA0LCAwKTsKLQl9CiAJaW5wdXRfZGV2LT5hYnNiaXRbQklUX1dPUkQoQUJTX01JU0MpXSB8PSBCSVRfTUFTSyhBQlNfTUlTQyk7CiAKIAl3YWNvbV9pbml0X2lucHV0X2RldihpbnB1dF9kZXYsIHdhY29tX3dhYyk7CiAKIAl1c2JfZmlsbF9pbnRfdXJiKHdhY29tLT5pcnEsIGRldiwKIAkJCSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCSB3YWNvbV93YWMtPmRhdGEsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPnBrdGxlbiwKKwkJCSB3YWNvbV93YWMtPmRhdGEsIGZlYXR1cmVzLT5wa3RsZW4sCiAJCQkgd2Fjb21fc3lzX2lycSwgd2Fjb20sIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwogCXdhY29tLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHdhY29tLT5kYXRhX2RtYTsKIAl3YWNvbS0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKQEAgLTUxMiwxOCArNTk3LDE0IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWwzOwogCi0JLyoKLQkgKiBBc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEgaWYgaXQgaXMgbm90IGEgVGFibGV0IFBDLgotCSAqIE5vdGUgdGhhdCBpZiBxdWVyeSBmYWlscyBpdCBpcyBub3QgYSBoYXJkIGZhaWx1cmUuCi0JICovCi0JaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMtPnR5cGUgIT0gVEFCTEVUUEMpCi0JCXdhY29tX3F1ZXJ5X3RhYmxldF9kYXRhKGludGYpOworCS8qIE5vdGUgdGhhdCBpZiBxdWVyeSBmYWlscyBpdCBpcyBub3QgYSBoYXJkIGZhaWx1cmUgKi8KKwl3YWNvbV9xdWVyeV90YWJsZXRfZGF0YShpbnRmLCBmZWF0dXJlcyk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHdhY29tKTsKIAlyZXR1cm4gMDsKIAogIGZhaWwzOgl1c2JfZnJlZV91cmIod2Fjb20tPmlycSk7Ci0gZmFpbDI6CXVzYl9idWZmZXJfZnJlZShkZXYsIDEwLCB3YWNvbV93YWMtPmRhdGEsIHdhY29tLT5kYXRhX2RtYSk7CisgZmFpbDI6CXVzYl9idWZmZXJfZnJlZShkZXYsIFdBQ09NX1BLR0xFTl9NQVgsIHdhY29tX3dhYy0+ZGF0YSwgd2Fjb20tPmRhdGFfZG1hKTsKICBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZSh3YWNvbSk7CiAJa2ZyZWUod2Fjb21fd2FjKTsKQEAgLTUzOSw3ICs2MjAsNyBAQAogCXVzYl9raWxsX3VyYih3YWNvbS0+aXJxKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh3YWNvbS0+ZGV2KTsKIAl1c2JfZnJlZV91cmIod2Fjb20tPmlycSk7Ci0JdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDEwLAorCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBXQUNPTV9QS0dMRU5fTUFYLAogCQkJd2Fjb20tPndhY29tX3dhYy0+ZGF0YSwgd2Fjb20tPmRhdGFfZG1hKTsKIAlrZnJlZSh3YWNvbS0+d2Fjb21fd2FjKTsKIAlrZnJlZSh3YWNvbSk7CkBAIC01NTksMTIgKzY0MCwxNiBAQAogc3RhdGljIGludCB3YWNvbV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHdhY29tICp3YWNvbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlcyA9IHdhY29tLT53YWNvbV93YWMtPmZlYXR1cmVzOwogCWludCBydjsKIAogCW11dGV4X2xvY2soJndhY29tLT5sb2NrKTsKLQlpZiAod2Fjb20tPm9wZW4pCisJaWYgKHdhY29tLT5vcGVuKSB7CiAJCXJ2ID0gdXNiX3N1Ym1pdF91cmIod2Fjb20tPmlycSwgR0ZQX05PSU8pOwotCWVsc2UKKwkJLyogc3dpdGNoIHRvIHdhY29tIG1vZGUgaWYgbmVlZGVkICovCisJCWlmICghd2Fjb21fcmV0cmlldmVfaGlkX2Rlc2NyaXB0b3IoaW50ZiwgZmVhdHVyZXMpKQorCQkJd2Fjb21fcXVlcnlfdGFibGV0X2RhdGEoaW50ZiwgZmVhdHVyZXMpOworCX0gZWxzZQogCQlydiA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZ3YWNvbS0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKaW5kZXggYzg5NmQ2YS4uMTA1NmYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKICAqCi0gKiAgVVNCIFdhY29tIEdyYXBoaXJlIGFuZCBXYWNvbSBJbnR1b3MgdGFibGV0IHN1cHBvcnQgLSBXYWNvbSBzcGVjaWZpYyBjb2RlCisgKiAgVVNCIFdhY29tIHRhYmxldCBzdXBwb3J0IC0gV2Fjb20gc3BlY2lmaWMgY29kZQogICoKICAqLwogCkBAIC01OCwxNiArNTgsMTUgQEAKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CiAJaW50IHByb3gsIHByZXNzdXJlOwogCi0JaWYgKGRhdGFbMF0gIT0gMikgeworCWlmIChkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9QRU5BQkxFRCkgewogCQlkYmcoIndhY29tX3BsX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CiAJCXJldHVybiAwOwogCX0KIAogCXByb3ggPSBkYXRhWzFdICYgMHg0MDsKIAotCXdhY29tLT5pZFswXSA9IEVSQVNFUl9ERVZJQ0VfSUQ7CiAJaWYgKHByb3gpIHsKLQorCQl3YWNvbS0+aWRbMF0gPSBFUkFTRVJfREVWSUNFX0lEOwogCQlwcmVzc3VyZSA9IChzaWduZWQgY2hhcikoKGRhdGFbN10gPDwgMSkgfCAoKGRhdGFbNF0gPj4gMikgJiAxKSk7CiAJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCA+IDI1NSkKIAkJCXByZXNzdXJlID0gKHByZXNzdXJlIDw8IDEpIHwgKChkYXRhWzRdID4+IDYpICYgMSk7CkBAIC0xMjgsNyArMTI3LDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CiAKLQlpZiAoZGF0YVswXSAhPSAyKSB7CisJaWYgKGRhdGFbMF0gIT0gV0FDT01fUkVQT1JUX1BFTkFCTEVEKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIndhY29tX3B0dV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE1NSwxNCArMTU0LDE2IEBACiB7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCWludCB4LCB5LCBydzsKKwlzdGF0aWMgaW50IHBlbkRhdGEgPSAwOwogCi0JaWYgKGRhdGFbMF0gIT0gMikgeworCWlmIChkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9QRU5BQkxFRCkgewogCQlkYmcoIndhY29tX2dyYXBoaXJlX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChkYXRhWzFdICYgMHg4MCkgewogCQkvKiBpbiBwcm94IGFuZCBub3QgYSBwYWQgZGF0YSAqLworCQlwZW5EYXRhID0gMTsKIAogCQlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgewogCkBAIC0yMzIsNyArMjMzLDExIEBACiAJc3dpdGNoICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUpIHsKIAkgICAgY2FzZSBXQUNPTV9HNDoKIAkJaWYgKGRhdGFbN10gJiAweGY4KSB7Ci0JCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLworCQkJaWYgKHBlbkRhdGEpIHsKKwkJCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLworCQkJCWlmICghd2Fjb20tPmlkWzBdKQorCQkJCQlwZW5EYXRhID0gMDsKKwkJCX0KIAkJCXdhY29tLT5pZFsxXSA9IFBBRF9ERVZJQ0VfSUQ7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzAsIChkYXRhWzddICYgMHg0MCkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl80LCAoZGF0YVs3XSAmIDB4ODApKTsKQEAgLTI0MiwxMCArMjQ3LDE1IEBACiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFsxXSk7CiAJCQl3YWNvbV9pbnB1dF9ldmVudCh3Y29tYm8sIEVWX01TQywgTVNDX1NFUklBTCwgMHhmMCk7CiAJCX0gZWxzZSBpZiAod2Fjb20tPmlkWzFdKSB7Ci0JCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLworCQkJaWYgKHBlbkRhdGEpIHsKKwkJCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLworCQkJCWlmICghd2Fjb20tPmlkWzBdKQorCQkJCQlwZW5EYXRhID0gMDsKKwkJCX0KIAkJCXdhY29tLT5pZFsxXSA9IDA7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzAsIChkYXRhWzddICYgMHg0MCkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl80LCAoZGF0YVs3XSAmIDB4ODApKTsKKwkJCXdhY29tX3JlcG9ydF9yZWwod2NvbWJvLCBSRUxfV0hFRUwsIDApOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT09MX0ZJTkdFUiwgMCk7CiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIDApOwogCQkJd2Fjb21faW5wdXRfZXZlbnQod2NvbWJvLCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZjApOwpAQCAtMjUzLDcgKzI2MywxMSBAQAogCQlicmVhazsKIAkgICAgY2FzZSBXQUNPTV9NTzoKIAkJaWYgKChkYXRhWzddICYgMHhmOCkgfHwgKGRhdGFbOF0gJiAweGZmKSkgewotCQkJd2Fjb21faW5wdXRfc3luYyh3Y29tYm8pOyAvKiBzeW5jIGxhc3QgZXZlbnQgKi8KKwkJCWlmIChwZW5EYXRhKSB7CisJCQkJd2Fjb21faW5wdXRfc3luYyh3Y29tYm8pOyAvKiBzeW5jIGxhc3QgZXZlbnQgKi8KKwkJCQlpZiAoIXdhY29tLT5pZFswXSkKKwkJCQkJcGVuRGF0YSA9IDA7CisJCQl9CiAJCQl3YWNvbS0+aWRbMV0gPSBQQURfREVWSUNFX0lEOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl8wLCAoZGF0YVs3XSAmIDB4MDgpKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMSwgKGRhdGFbN10gJiAweDIwKSk7CkBAIC0yNjQsNyArMjc4LDExIEBACiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFsxXSk7CiAJCQl3YWNvbV9pbnB1dF9ldmVudCh3Y29tYm8sIEVWX01TQywgTVNDX1NFUklBTCwgMHhmMCk7CiAJCX0gZWxzZSBpZiAod2Fjb20tPmlkWzFdKSB7Ci0JCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLworCQkJaWYgKHBlbkRhdGEpIHsKKwkJCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLworCQkJCWlmICghd2Fjb20tPmlkWzBdKQorCQkJCQlwZW5EYXRhID0gMDsKKwkJCX0KIAkJCXdhY29tLT5pZFsxXSA9IDA7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzAsIChkYXRhWzddICYgMHgwOCkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl8xLCAoZGF0YVs3XSAmIDB4MjApKTsKQEAgLTQzMiw3ICs0NTAsOCBAQAogCXVuc2lnbmVkIGludCB0OwogCWludCBpZHggPSAwLCByZXN1bHQ7CiAKLQlpZiAoZGF0YVswXSAhPSAyICYmIGRhdGFbMF0gIT0gNSAmJiBkYXRhWzBdICE9IDYgJiYgZGF0YVswXSAhPSAxMikgeworCWlmIChkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9QRU5BQkxFRCAmJiBkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9JTlRVT1NSRUFECisJCSYmIGRhdGFbMF0gIT0gV0FDT01fUkVQT1JUX0lOVFVPU1dSSVRFICYmIGRhdGFbMF0gIT0gV0FDT01fUkVQT1JUX0lOVFVPU1BBRCkgewogCQlkYmcoIndhY29tX2ludHVvc19pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZCIsIGRhdGFbMF0pOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCX0KQEAgLTQ0Miw3ICs0NjEsNyBAQAogCQlpZHggPSBkYXRhWzFdICYgMHgwMTsKIAogCS8qIHBhZCBwYWNrZXRzLiBXb3JrcyBhcyBhIHNlY29uZCB0b29sIGFuZCBpcyBhbHdheXMgaW4gcHJveCAqLwotCWlmIChkYXRhWzBdID09IDEyKSB7CisJaWYgKGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX0lOVFVPU1BBRCkgewogCQkvKiBpbml0aWF0ZSB0aGUgcGFkIGFzIGEgZGV2aWNlICovCiAJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpCiAJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX0ZJTkdFUjsKQEAgLTYwOCw5NSArNjI3LDE2MyBAQAogCXJldHVybiAxOwogfQogCisKK3N0YXRpYyB2b2lkIHdhY29tX3RwY19maW5nZXJfaW4oc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibywgY2hhciAqZGF0YSwgaW50IGlkeCkKK3sKKwl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsCisJCShkYXRhWzIgKyBpZHggKiAyXSAmIDB4ZmYpIHwgKChkYXRhWzMgKyBpZHggKiAyXSAmIDB4N2YpIDw8IDgpKTsKKwl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1ksCisJCShkYXRhWzYgKyBpZHggKiAyXSAmIDB4ZmYpIHwgKChkYXRhWzcgKyBpZHggKiAyXSAmIDB4N2YpIDw8IDgpKTsKKwl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFswXSk7CisJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sW2lkeF0sIDEpOworCWlmIChpZHgpCisJCXdhY29tX2lucHV0X2V2ZW50KHdjb21ibywgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKKwllbHNlCisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIDEpOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV90cGNfdG91Y2hfb3V0KHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8sIGludCBpZHgpCit7CisJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19YLCAwKTsKKwl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1ksIDApOworCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgMCk7CisJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sW2lkeF0sIDApOworCWlmIChpZHgpCisJCXdhY29tX2lucHV0X2V2ZW50KHdjb21ibywgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGYwKTsKKwllbHNlCisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIDApOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fdHBjX3RvdWNoX2luKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCit7CisJY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCB1cmIgKnVyYiA9ICgoc3RydWN0IHdhY29tX2NvbWJvICopd2NvbWJvKS0+dXJiOworCXN0YXRpYyBpbnQgZmlyc3RGaW5nZXIgPSAwOworCXN0YXRpYyBpbnQgc2Vjb25kRmluZ2VyID0gMDsKKworCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfRE9VQkxFVEFQOworCXdhY29tLT5pZFswXSA9IFRPVUNIX0RFVklDRV9JRDsKKwl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1RSSVBMRVRBUDsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gV0FDT01fUEtHTEVOX1RQQzFGRykgeworCQlzd2l0Y2ggKGRhdGFbMF0pIHsKKwkJCWNhc2UgV0FDT01fUkVQT1JUX1RQQzFGRzoKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzJdKSk7CisJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVs0XSkpOworCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzZdKSk7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgd2Fjb21fbGUxNl90b19jcHUoJmRhdGFbNl0pKTsKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFswXSk7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgV0FDT01fUkVQT1JUX1RQQzJGRzoKKwkJCQkvKiBrZWVwIHRoaXMgYnl0ZSB0byBzZW5kIHByb3BlciBvdXQtcHJveCBldmVudCAqLworCQkJCXdhY29tLT5pZFsxXSA9IGRhdGFbMV0gJiAweDAzOworCisJCQkJaWYgKGRhdGFbMV0gJiAweDAxKSB7CisJCQkJCXdhY29tX3RwY19maW5nZXJfaW4od2Fjb20sIHdjb21ibywgZGF0YSwgMCk7CisJCQkJCWZpcnN0RmluZ2VyID0gMTsKKwkJCQl9IGVsc2UgaWYgKGZpcnN0RmluZ2VyKSB7CisJCQkJCXdhY29tX3RwY190b3VjaF9vdXQod2Fjb20sIHdjb21ibywgMCk7CisJCQkJfQorCisJCQkJaWYgKGRhdGFbMV0gJiAweDAyKSB7CisJCQkJCS8qIHN5bmMgZmlyc3QgZmluZ2VyIGRhdGEgKi8KKwkJCQkJaWYgKGZpcnN0RmluZ2VyKQorCQkJCQkJd2Fjb21faW5wdXRfc3luYyh3Y29tYm8pOworCisJCQkJCXdhY29tX3RwY19maW5nZXJfaW4od2Fjb20sIHdjb21ibywgZGF0YSwgMSk7CisJCQkJCXNlY29uZEZpbmdlciA9IDE7CisJCQkJfSBlbHNlIGlmIChzZWNvbmRGaW5nZXIpIHsKKwkJCQkJLyogc3luYyBmaXJzdCBmaW5nZXIgZGF0YSAqLworCQkJCQlpZiAoZmlyc3RGaW5nZXIpCisJCQkJCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7CisKKwkJCQkJd2Fjb21fdHBjX3RvdWNoX291dCh3YWNvbSwgd2NvbWJvLCAxKTsKKwkJCQkJc2Vjb25kRmluZ2VyID0gMDsKKwkJCQl9CisJCQkJaWYgKCEoZGF0YVsxXSAmIDB4MDEpKQorCQkJCQlmaXJzdEZpbmdlciA9IDA7CisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzFdKSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgd2Fjb21fbGUxNl90b19jcHUoJmRhdGFbM10pKTsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgMSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgd2Fjb20tPmlkWzBdKTsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCAxKTsKKwl9CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IHdhY29tX3RwY19pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKIHsKIAljaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7Ci0JaW50IHByb3ggPSAwLCBwcmVzc3VyZTsKKwlpbnQgcHJveCA9IDAsIHByZXNzdXJlLCBpZHggPSAtMTsKIAlzdGF0aWMgaW50IHN0eWx1c0luUHJveCwgdG91Y2hJblByb3ggPSAxLCB0b3VjaE91dDsKIAlzdHJ1Y3QgdXJiICp1cmIgPSAoKHN0cnVjdCB3YWNvbV9jb21ibyAqKXdjb21ibyktPnVyYjsKIAogCWRiZygid2Fjb21fdHBjX2lycTogcmVjZWl2ZWQgcmVwb3J0ICMlZCIsIGRhdGFbMF0pOwogCi0JaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSA1IHx8IGRhdGFbMF0gPT0gNikgeyAvKiBUb3VjaCBkYXRhICovCi0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gNSkgeyAgLyogd2l0aCB0b3VjaCAqLwotCQkJcHJveCA9IGRhdGFbMF0gJiAweDAzOworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gV0FDT01fUEtHTEVOX1RQQzFGRyB8fCAvKiBzaW5nbGUgdG91Y2ggKi8KKwkgICAgZGF0YVswXSA9PSBXQUNPTV9SRVBPUlRfVFBDMUZHIHx8CQkgLyogc2luZ2xlIHRvdWNoICovCisJICAgIGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX1RQQzJGRykgewkJIC8qIDJGRyB0b3VjaCAqLworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IFdBQ09NX1BLR0xFTl9UUEMxRkcpIHsgIC8qIHdpdGggdG91Y2ggKi8KKwkJCXByb3ggPSBkYXRhWzBdICYgMHgwMTsKIAkJfSBlbHNlIHsgIC8qIHdpdGggY2FwYWNpdHkgKi8KLQkJCXByb3ggPSBkYXRhWzFdICYgMHgwMzsKKwkJCWlmIChkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9UUEMxRkcpCisJCQkJLyogc2luZ2xlIHRvdWNoICovCisJCQkJcHJveCA9IGRhdGFbMV0gJiAweDAxOworCQkJZWxzZQorCQkJCS8qIDJGRyB0b3VjaCBkYXRhICovCisJCQkJcHJveCA9IGRhdGFbMV0gJiAweDAzOwogCQl9CiAKIAkJaWYgKCFzdHlsdXNJblByb3gpIHsgLyogc3R5bHVzIG5vdCBpbiBwcm94ICovCiAJCQlpZiAocHJveCkgewogCQkJCWlmICh0b3VjaEluUHJveCkgewotCQkJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX0RPVUJMRVRBUDsKLQkJCQkJd2Fjb20tPmlkWzBdID0gVE9VQ0hfREVWSUNFX0lEOwotCQkJCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IDUpIHsKLQkJCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWCwgd2Fjb21fbGUxNl90b19jcHUoJmRhdGFbMl0pKTsKLQkJCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgd2Fjb21fbGUxNl90b19jcHUoJmRhdGFbNF0pKTsKLQkJCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzZdKSk7Ci0JCQkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVs2XSkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19YLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVsxXSkpOwotCQkJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVszXSkpOwotCQkJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgMSk7Ci0JCQkJCX0KLQkJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCB3YWNvbS0+aWRbMF0pOwotCQkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIHByb3ggJiAweDAxKTsKKwkJCQkJd2Fjb21fdHBjX3RvdWNoX2luKHdhY29tLCB3Y29tYm8pOwogCQkJCQl0b3VjaE91dCA9IDE7CiAJCQkJCXJldHVybiAxOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCB3YWNvbS0+aWRbMF0pOwotCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCB3YWNvbS0+dG9vbFsxXSwgcHJveCAmIDB4MDEpOwotCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIDApOworCQkJCS8qIDJGR1Qgb3V0LXByb3ggKi8KKwkJCQlpZiAoZGF0YVswXSA9PSBXQUNPTV9SRVBPUlRfVFBDMkZHKSB7CisJCQkJCWlkeCA9ICh3YWNvbS0+aWRbMV0gJiAweDAxKSAtIDE7CisJCQkJCWlmIChpZHggPT0gMCkgeworCQkJCQkJd2Fjb21fdHBjX3RvdWNoX291dCh3YWNvbSwgd2NvbWJvLCBpZHgpOworCQkJCQkJLyogc3luYyBmaXJzdCBmaW5nZXIgZXZlbnQgKi8KKwkJCQkJCWlmICh3YWNvbS0+aWRbMV0gJiAweDAyKQorCQkJCQkJCXdhY29tX2lucHV0X3N5bmMod2NvbWJvKTsKKwkJCQkJfQorCQkJCQlpZHggPSAod2Fjb20tPmlkWzFdICYgMHgwMikgLSAxOworCQkJCQlpZiAoaWR4ID09IDEpCisJCQkJCQl3YWNvbV90cGNfdG91Y2hfb3V0KHdhY29tLCB3Y29tYm8sIGlkeCk7CisJCQkJfSBlbHNlIC8qIG9uZSBmaW5nZXIgdG91Y2ggKi8KKwkJCQkJd2Fjb21fdHBjX3RvdWNoX291dCh3YWNvbSwgd2NvbWJvLCAwKTsKIAkJCQl0b3VjaE91dCA9IDA7CiAJCQkJdG91Y2hJblByb3ggPSAxOwogCQkJCXJldHVybiAxOwogCQkJfQogCQl9IGVsc2UgaWYgKHRvdWNoT3V0IHx8ICFwcm94KSB7IC8qIGZvcmNlIHRvdWNoIG91dC1wcm94ICovCi0JCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIFRPVUNIX0RFVklDRV9JRCk7Ci0JCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIDApOwotCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgMCk7CisJCQl3YWNvbV90cGNfdG91Y2hfb3V0KHdhY29tLCB3Y29tYm8sIDApOwogCQkJdG91Y2hPdXQgPSAwOwogCQkJdG91Y2hJblByb3ggPSAxOwogCQkJcmV0dXJuIDE7CiAJCX0KLQl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gMikgeyAvKiBQZW5hYmxlZCAqLworCX0gZWxzZSBpZiAoZGF0YVswXSA9PSBXQUNPTV9SRVBPUlRfUEVOQUJMRUQpIHsgLyogUGVuYWJsZWQgKi8KIAkJcHJveCA9IGRhdGFbMV0gJiAweDIwOwogCiAJCXRvdWNoSW5Qcm94ID0gMDsKIAotCQl3YWNvbS0+aWRbMF0gPSBFUkFTRVJfREVWSUNFX0lEOwotCi0JCS8qCi0JCSAqIGlmIGdvaW5nIGZyb20gb3V0IG9mIHByb3hpbWl0eSBpbnRvIHByb3hpbWl0eSBzZWxlY3QgYmV0d2VlbiB0aGUgZXJhc2VyCi0JCSAqIGFuZCB0aGUgcGVuIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgc3R5bHVzMiBidXR0b24sIGNob29zZSBlcmFzZXIgaWYKLQkJICogcHJlc3NlZCBlbHNlIGNob29zZSBwZW4uIGlmIG5vdCBhIHByb3hpbWl0eSBjaGFuZ2UgZnJvbSBvdXQgdG8gaW4sIHNlbmQKLQkJICogYW4gb3V0IG9mIHByb3hpbWl0eSBmb3IgcHJldmlvdXMgdG9vbCB0aGVuIGEgaW4gZm9yIG5ldyB0b29sLgotCQkgKi8KIAkJaWYgKHByb3gpIHsgLyogaW4gcHJveCAqLwotCQkJaWYgKCF3YWNvbS0+dG9vbFswXSkgeworCQkJaWYgKCF3YWNvbS0+aWRbMF0pIHsKIAkJCQkvKiBHb2luZyBpbnRvIHByb3hpbWl0eSBzZWxlY3QgdG9vbCAqLwotCQkJCXdhY29tLT50b29sWzFdID0gKGRhdGFbMV0gJiAweDA4KSA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKLQkJCQlpZiAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUEVOKQorCQkJCXdhY29tLT50b29sWzBdID0gKGRhdGFbMV0gJiAweDBjKSA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKKwkJCQlpZiAod2Fjb20tPnRvb2xbMF0gPT0gQlROX1RPT0xfUEVOKQogCQkJCQl3YWNvbS0+aWRbMF0gPSBTVFlMVVNfREVWSUNFX0lEOwotCQkJfSBlbHNlIGlmICh3YWNvbS0+dG9vbFsxXSA9PSBCVE5fVE9PTF9SVUJCRVIgJiYgIShkYXRhWzFdICYgMHgwOCkpIHsKLQkJCQkvKgotCQkJCSAqIHdhcyBlbnRlcmVkIHdpdGggc3R5bHVzMiBwcmVzc2VkCi0JCQkJICogcmVwb3J0IG91dCBwcm94aW1pdHkgZm9yIHByZXZpb3VzIHRvb2wKLQkJCQkqLwotCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgd2Fjb20tPmlkWzBdKTsKLQkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIDApOwotCQkJCXdhY29tX2lucHV0X3N5bmMod2NvbWJvKTsKLQotCQkJCS8qIHNldCBuZXcgdG9vbCAqLwotCQkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOwotCQkJCXdhY29tLT5pZFswXSA9IFNUWUxVU19ERVZJQ0VfSUQ7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlpZiAod2Fjb20tPnRvb2xbMV0gIT0gQlROX1RPT0xfUlVCQkVSKSB7Ci0JCQkJLyogVW5rbm93biB0b29sIHNlbGVjdGVkIGRlZmF1bHQgdG8gcGVuIHRvb2wgKi8KLQkJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKLQkJCQl3YWNvbS0+aWRbMF0gPSBTVFlMVVNfREVWSUNFX0lEOworCQkJCWVsc2UKKwkJCQkJd2Fjb20tPmlkWzBdID0gRVJBU0VSX0RFVklDRV9JRDsKIAkJCX0KIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMHgwMik7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NUWUxVUzIsIGRhdGFbMV0gJiAweDEwKTsKQEAgLTcwNiwxNyArNzkzLDIxIEBACiAJCQlpZiAocHJlc3N1cmUgPCAwKQogCQkJCXByZXNzdXJlID0gd2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXggKyBwcmVzc3VyZSArIDE7CiAJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7Ci0JCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCBwcmVzc3VyZSk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwNSk7CiAJCX0gZWxzZSB7CisJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIDApOworCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCAwKTsKIAkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIDApOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMsIDApOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMyLCAwKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIDApOworCQkJd2Fjb20tPmlkWzBdID0gMDsKKwkJCS8qIHBlbiBpcyBvdXQgc28gdG91Y2ggY2FuIGJlIGVuYWJsZWQgbm93ICovCisJCQl0b3VjaEluUHJveCA9IDE7CiAJCX0KLQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzFdLCBwcm94KTsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCBwcm94KTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCB3YWNvbS0+aWRbMF0pOwogCQlzdHlsdXNJblByb3ggPSBwcm94OwotCQl3YWNvbS0+dG9vbFswXSA9IHByb3g7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTc1MSw2ICs4NDIsNyBAQAogCQkJcmV0dXJuIHdhY29tX2ludHVvc19pcnEod2Fjb21fd2FjLCB3Y29tYm8pOwogCiAJCWNhc2UgVEFCTEVUUEM6CisJCWNhc2UgVEFCTEVUUEMyRkc6CiAJCQlyZXR1cm4gd2Fjb21fdHBjX2lycSh3YWNvbV93YWMsIHdjb21ibyk7CiAKIAkJZGVmYXVsdDoKQEAgLTc5MSw5ICs4ODMsMTcgQEAKIAkJCWlucHV0X2Rldl9pNHMoaW5wdXRfZGV2LCB3YWNvbV93YWMpOwogCQkJaW5wdXRfZGV2X2koaW5wdXRfZGV2LCB3YWNvbV93YWMpOwogCQkJYnJlYWs7CisJCWNhc2UgVEFCTEVUUEMyRkc6CisJCQlpbnB1dF9kZXZfdHBjMmZnKGlucHV0X2Rldiwgd2Fjb21fd2FjKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRBQkxFVFBDOgorCQkJaW5wdXRfZGV2X3RwYyhpbnB1dF9kZXYsIHdhY29tX3dhYyk7CisJCQlpZiAod2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGV2aWNlX3R5cGUgIT0gQlROX1RPT0xfUEVOKQorCQkJCWJyZWFrOyAgLyogbm8gbmVlZCB0byBwcm9jZXNzIHN0eWx1cyBzdHVmZiAqLworCisJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBQTDoKIAkJY2FzZSBQVFU6Ci0JCWNhc2UgVEFCTEVUUEM6CiAJCQlpbnB1dF9kZXZfcGwoaW5wdXRfZGV2LCB3YWNvbV93YWMpOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgUEVOUEFSVE5FUjoKQEAgLTgwNCw2NiArOTA0LDY5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNbXSA9IHsKLQl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgNywgICA1MDQwLCAgMzc4MCwgIDI1NSwgIDAsIFBFTlBBUlRORVIgfSwKLSAgICAgICAgeyAiV2Fjb20gR3JhcGhpcmUiLCAgICAgIDgsICAxMDIwNiwgIDc0MjIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEdyYXBoaXJlMiA0eDUiLCA4LCAgMTAyMDYsICA3NDIyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTIgNXg3IiwgOCwgIDEzOTE4LCAxMDIwNiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUzIiwgICAgIDgsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIEdyYXBoaXJlMyA2eDgiLCA4LCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTQgNHg1IiwgOCwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgNjMsIFdBQ09NX0c0IH0sCi0JeyAiV2Fjb20gR3JhcGhpcmU0IDZ4OCIsIDgsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9LAotCXsgIldhY29tIEJhbWJvb0Z1biA0eDUiLCA5LCAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfSwKLQl7ICJXYWNvbSBCYW1ib29GdW4gNng4IiwgOSwgIDIxNjQ4LCAxMzUzMCwgIDUxMSwgNjMsIFdBQ09NX01PIH0sCi0JeyAiV2Fjb20gQmFtYm9vMSBNZWRpdW0iLDgsICAxNjcwNCwgMTIwNjQsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFZvbGl0byIsICAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBQZW5TdGF0aW9uMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDI1NSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gVm9saXRvMiA0eDUiLCAgIDgsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFZvbGl0bzIgMngzIiwgICA4LCAgIDMyNDgsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBQZW5QYXJ0bmVyMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gQmFtYm9vIiwgICAgICAgIDksICAxNDc2MCwgIDkyMjUsICA1MTEsIDYzLCBXQUNPTV9NTyB9LAotCXsgIldhY29tIEJhbWJvbzEiLCAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAxMCwgIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvcyA2eDgiLCAgIDEwLCAgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zIDl4MTIiLCAgMTAsICAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MgMTJ4MTIiLCAxMCwgIDMwNDgwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvcyAxMngxOCIsIDEwLCAgNDU3MjAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gUEw0MDAiLCAgICAgICAgIDgsICAgNTQwOCwgIDQwNTYsICAyNTUsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNTAwIiwgICAgICAgICA4LCAgIDYxNDQsICA0NjA4LCAgMjU1LCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBQTDYwMCIsICAgICAgICAgOCwgICA2MTI2LCAgNDYwNCwgIDI1NSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw2MDBTWCIsICAgICAgIDgsICAgNjI2MCwgIDUwMTYsICAyNTUsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNTUwIiwgICAgICAgICA4LCAgIDYxNDQsICA0NjA4LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgOCwgICA3MjIwLCAgNTc4MCwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gUEw3MDAiLCAgICAgICAgIDgsICAgNjc1OCwgIDU0MDYsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIFBMNTEwIiwgICAgICAgICA4LCAgIDYyODIsICA0NzYyLCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBEVFU3MTAiLCAgICAgICAgOCwgIDM0MDgwLCAyNzY2MCwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gRFRGNTIxIiwgICAgICAgIDgsICAgNjI4MiwgIDQ3NjIsICA1MTEsICAwLCBQTCB9LAotCXsgIldhY29tIERURjcyMCIsICAgICAgICA4LCAgIDY4NTgsICA1NTA2LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBEVEY3MjBhIiwgICAgICAgOCwgICA2ODU4LCAgNTUwNiwgIDUxMSwgIDAsIFBMIH0sCi0JeyAiV2Fjb20gQ2ludGlxIFBhcnRuZXIiLDgsICAyMDQ4MCwgMTUzNjAsICA1MTEsICAwLCBQVFUgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgMTAsIDEyNzAwLCAxMDYwMCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zMiA5eDEyIiwgIDEwLCAzMDQ4MCwgMjQwNjAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDEyeDEyIiwgMTAsIDMwNDgwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9LAotCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAxMCwgNDU3MjAsIDMxNjgwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgIDEwLCAyNTQwMCwgMjAzMjAsIDEwMjMsIDYzLCBJTlRVT1MzUyB9LAotCXsgIldhY29tIEludHVvczMgNng4IiwgICAxMCwgNDA2NDAsIDMwNDgwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAotCXsgIldhY29tIEludHVvczMgOXgxMiIsICAxMCwgNjA5NjAsIDQ1NzIwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAotCXsgIldhY29tIEludHVvczMgMTJ4MTIiLCAxMCwgNjA5NjAsIDYwOTYwLCAxMDIzLCA2MywgSU5UVU9TM0wgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDEyeDE5IiwgMTAsIDk3NTM2LCA2MDk2MCwgMTAyMywgNjMsIElOVFVPUzNMIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA2eDExIiwgIDEwLCA1NDIwNCwgMzE3NTAsIDEwMjMsIDYzLCBJTlRVT1MzIH0sCi0JeyAiV2Fjb20gSW50dW9zMyA0eDYiLCAgIDEwLCAzMTQ5NiwgMTk2ODUsIDEwMjMsIDYzLCBJTlRVT1MzUyB9LAotCXsgIldhY29tIEludHVvczQgNHg2IiwgICAxMCwgMzE0OTYsIDE5Njg1LCAyMDQ3LCA2MywgSU5UVU9TNFMgfSwKLQl7ICJXYWNvbSBJbnR1b3M0IDZ4OSIsICAgMTAsIDQ0NzA0LCAyNzk0MCwgMjA0NywgNjMsIElOVFVPUzQgfSwKLQl7ICJXYWNvbSBJbnR1b3M0IDh4MTMiLCAgMTAsIDY1MDI0LCA0MDY0MCwgMjA0NywgNjMsIElOVFVPUzRMIH0sCi0JeyAiV2Fjb20gSW50dW9zNCAxMngxOSIsIDEwLCA5NzUzNiwgNjA5NjAsIDIwNDcsIDYzLCBJTlRVT1M0TCB9LAotCXsgIldhY29tIENpbnRpcSAyMVVYIiwgICAxMCwgODcyMDAsIDY1NjAwLCAxMDIzLCA2MywgQ0lOVElRIH0sCi0JeyAiV2Fjb20gQ2ludGlxIDIwV1NYIiwgIDEwLCA4NjY4MCwgNTQxODAsIDEwMjMsIDYzLCBXQUNPTV9CRUUgfSwKLQl7ICJXYWNvbSBDaW50aXEgMTJXWCIsICAgMTAsIDUzMDIwLCAzMzQ0MCwgMTAyMywgNjMsIFdBQ09NX0JFRSB9LAotCXsgIldhY29tIERUVTE5MzEiLCAgICAgICAgOCwgMzc4MzIsIDMwMzA1LCAgNTExLCAgMCwgUEwgfSwKLQl7ICJXYWNvbSBJU0R2NCA5MCIsICAgICAgIDgsIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH0sCi0JeyAiV2Fjb20gSVNEdjQgOTMiLCAgICAgICA4LCAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9LAotCXsgIldhY29tIElTRHY0IDlBIiwgICAgICAgOCwgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgMTAsIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9LAorCXsgIldhY29tIFBlbnBhcnRuZXIiLCAgICAgV0FDT01fUEtHTEVOX1BFTlBSVE4sICAgIDUwNDAsICAzNzgwLCAgMjU1LCAgMCwgUEVOUEFSVE5FUiB9LAorCXsgIldhY29tIEdyYXBoaXJlIiwgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDYsICA3NDIyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTIgNHg1IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gR3JhcGhpcmUyIDV4NyIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMzkxOCwgMTAyMDYsICA1MTEsIDYzLCBHUkFQSElSRSB9LAorCXsgIldhY29tIEdyYXBoaXJlMyIsICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTAyMDgsICA3NDI0LCAgNTExLCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gR3JhcGhpcmU0IDR4NSIsICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9LAorCXsgIldhY29tIEdyYXBoaXJlNCA2eDgiLCAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgV0FDT01fRzQgfSwKKwl7ICJXYWNvbSBCYW1ib29GdW4gNHg1IiwgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzYwLCAgOTIyNSwgIDUxMSwgNjMsIFdBQ09NX01PIH0sCisJeyAiV2Fjb20gQmFtYm9vRnVuIDZ4OCIsICBXQUNPTV9QS0dMRU5fQkJGVU4sICAgICAyMTY0OCwgMTM1MzAsICA1MTEsIDYzLCBXQUNPTV9NTyB9LAorCXsgIldhY29tIEJhbWJvbzEgTWVkaXVtIiwgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBWb2xpdG8iLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gUGVuU3RhdGlvbjIiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI1MCwgIDIzMjAsICAyNTUsIDYzLCBHUkFQSElSRSB9LAorCXsgIldhY29tIFZvbGl0bzIgNHg1IiwgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBWb2xpdG8yIDJ4MyIsICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICAzMjQ4LCAgMjMyMCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gUGVuUGFydG5lcjIiLCAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgMzI1MCwgIDIzMjAsICA1MTEsIDYzLCBHUkFQSElSRSB9LAorCXsgIldhY29tIEJhbWJvbyIsICAgICAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfSwKKwl7ICJXYWNvbSBCYW1ib28xIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gSW50dW9zIDR4NSIsICAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAxMjcwMCwgMTA2MDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKKwl7ICJXYWNvbSBJbnR1b3MgNng4IiwgICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9LAorCXsgIldhY29tIEludHVvcyA5eDEyIiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDI0MDYwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCisJeyAiV2Fjb20gSW50dW9zIDEyeDEyIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKKwl7ICJXYWNvbSBJbnR1b3MgMTJ4MTgiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ1NzIwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9LAorCXsgIldhY29tIFBMNDAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDU0MDgsICA0MDU2LCAgMjU1LCAgMCwgUEwgfSwKKwl7ICJXYWNvbSBQTDUwMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTQ0LCAgNDYwOCwgIDI1NSwgIDAsIFBMIH0sCisJeyAiV2Fjb20gUEw2MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjEyNiwgIDQ2MDQsICAyNTUsICAwLCBQTCB9LAorCXsgIldhY29tIFBMNjAwU1giLCAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYyNjAsICA1MDE2LCAgMjU1LCAgMCwgUEwgfSwKKwl7ICJXYWNvbSBQTDU1MCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MTQ0LCAgNDYwOCwgIDUxMSwgIDAsIFBMIH0sCisJeyAiV2Fjb20gUEw4MDAiLCAgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNzIyMCwgIDU3ODAsICA1MTEsICAwLCBQTCB9LAorCXsgIldhY29tIFBMNzAwIiwgICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDY3NTgsICA1NDA2LCAgNTExLCAgMCwgUEwgfSwKKwl7ICJXYWNvbSBQTDUxMCIsICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2MjgyLCAgNDc2MiwgIDUxMSwgIDAsIFBMIH0sCisJeyAiV2Fjb20gRFRVNzEwIiwgICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAzNDA4MCwgMjc2NjAsICA1MTEsICAwLCBQTCB9LAorCXsgIldhY29tIERURjUyMSIsICAgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgIDYyODIsICA0NzYyLCAgNTExLCAgMCwgUEwgfSwKKwl7ICJXYWNvbSBEVEY3MjAiLCAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgICA2ODU4LCAgNTUwNiwgIDUxMSwgIDAsIFBMIH0sCisJeyAiV2Fjb20gRFRGNzIwYSIsICAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAgNjg1OCwgIDU1MDYsICA1MTEsICAwLCBQTCB9LAorCXsgIldhY29tIENpbnRpcSBQYXJ0bmVyIiwgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjA0ODAsIDE1MzYwLCAgNTExLCAgMCwgUFRVIH0sCisJeyAiV2Fjb20gSW50dW9zMiA0eDUiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAxMjcwMCwgMTA2MDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKKwl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9LAorCXsgIldhY29tIEludHVvczIgOXgxMiIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzA0ODAsIDI0MDYwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCisJeyAiV2Fjb20gSW50dW9zMiAxMngxMiIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAzMDQ4MCwgMzE2ODAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKKwl7ICJXYWNvbSBJbnR1b3MyIDEyeDE4IiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQ1NzIwLCAzMTY4MCwgMTAyMywgMzEsIElOVFVPUyB9LAorCXsgIldhY29tIEludHVvczMgNHg1IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMjU0MDAsIDIwMzIwLCAxMDIzLCA2MywgSU5UVU9TM1MgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDZ4OCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDQwNjQwLCAzMDQ4MCwgMTAyMywgNjMsIElOVFVPUzMgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDl4MTIiLCAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDYwOTYwLCA0NTcyMCwgMTAyMywgNjMsIElOVFVPUzMgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDEyeDEyIiwgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDYwOTYwLCA2MDk2MCwgMTAyMywgNjMsIElOVFVPUzNMIH0sCisJeyAiV2Fjb20gSW50dW9zMyAxMngxOSIsICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA5NzUzNiwgNjA5NjAsIDEwMjMsIDYzLCBJTlRVT1MzTCB9LAorCXsgIldhY29tIEludHVvczMgNngxMSIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgNTQyMDQsIDMxNzUwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAorCXsgIldhY29tIEludHVvczMgNHg2IiwgICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgMzE0OTYsIDE5Njg1LCAxMDIzLCA2MywgSU5UVU9TM1MgfSwKKwl7ICJXYWNvbSBJbnR1b3M0IDR4NiIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDMxNDk2LCAxOTY4NSwgMjA0NywgNjMsIElOVFVPUzRTIH0sCisJeyAiV2Fjb20gSW50dW9zNCA2eDkiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA0NDcwNCwgMjc5NDAsIDIwNDcsIDYzLCBJTlRVT1M0IH0sCisJeyAiV2Fjb20gSW50dW9zNCA4eDEzIiwgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA2NTAyNCwgNDA2NDAsIDIwNDcsIDYzLCBJTlRVT1M0TCB9LAorCXsgIldhY29tIEludHVvczQgMTJ4MTkiLCAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgOTc1MzYsIDYwOTYwLCAyMDQ3LCA2MywgSU5UVU9TNEwgfSwKKwl7ICJXYWNvbSBDaW50aXEgMjFVWCIsICAgIFdBQ09NX1BLR0xFTl9JTlRVT1MsICAgIDg3MjAwLCA2NTYwMCwgMTAyMywgNjMsIENJTlRJUSB9LAorCXsgIldhY29tIENpbnRpcSAyMFdTWCIsICAgV0FDT01fUEtHTEVOX0lOVFVPUywgICAgODY2ODAsIDU0MTgwLCAxMDIzLCA2MywgV0FDT01fQkVFIH0sCisJeyAiV2Fjb20gQ2ludGlxIDEyV1giLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICA1MzAyMCwgMzM0NDAsIDEwMjMsIDYzLCBXQUNPTV9CRUUgfSwKKwl7ICJXYWNvbSBEVFUxOTMxIiwgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDM3ODMyLCAzMDMwNSwgIDUxMSwgIDAsIFBMIH0sCisJeyAiV2Fjb20gSVNEdjQgOTAiLCAgICAgICBXQUNPTV9QS0dMRU5fR1JBUEhJUkUsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9LAorCXsgIldhY29tIElTRHY0IDkzIiwgICAgICAgV0FDT01fUEtHTEVOX0dSQVBISVJFLCAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMgfSwKKwl7ICJXYWNvbSBJU0R2NCA5QSIsICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDIH0sCisJeyAiV2Fjb20gSVNEdjQgOUYiLCAgICAgICBXQUNPTV9QS0dMRU5fUEVOQUJMRUQsICAyNjIwMiwgMTYzMjUsICAyNTUsICAwLCBUQUJMRVRQQyB9LAorCXsgIldhY29tIElTRHY0IEUyIiwgICAgICAgV0FDT01fUEtHTEVOX1RQQzJGRywgICAgMjYyMDIsIDE2MzI1LCAgMjU1LCAgMCwgVEFCTEVUUEMyRkcgfSwKKwl7ICJXYWNvbSBJU0R2NCBFMyIsICAgICAgIFdBQ09NX1BLR0xFTl9UUEMyRkcsICAgIDI2MjAyLCAxNjMyNSwgIDI1NSwgIDAsIFRBQkxFVFBDMkZHIH0sCisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgICBXQUNPTV9QS0dMRU5fSU5UVU9TLCAgICAyMDMyMCwgMTYyNDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKIAl7IH0KIH07CiAKQEAgLTkyNyw2ICsxMDMwLDkgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5MykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5QSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg5RikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhFMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhFMykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NykgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCmluZGV4IGMxMDIzNWEuLmVlMDFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oCkBAIC05LDEyICs5LDMzIEBACiAjaWZuZGVmIFdBQ09NX1dBQ19ICiAjZGVmaW5lIFdBQ09NX1dBQ19ICiAKKy8qIG1heGltdW0gcGFja2V0IGxlbmd0aCBmb3IgVVNCIGRldmljZXMgKi8KKyNkZWZpbmUgV0FDT01fUEtHTEVOX01BWAkzMgorCisvKiBwYWNrZXQgbGVuZ3RoIGZvciBpbmRpdmlkdWFsIG1vZGVscyAqLworI2RlZmluZSBXQUNPTV9QS0dMRU5fUEVOUFJUTgkgNworI2RlZmluZSBXQUNPTV9QS0dMRU5fR1JBUEhJUkUJIDgKKyNkZWZpbmUgV0FDT01fUEtHTEVOX0JCRlVOIAkgOQorI2RlZmluZSBXQUNPTV9QS0dMRU5fSU5UVU9TIAkxMAorI2RlZmluZSBXQUNPTV9QS0dMRU5fUEVOQUJMRUQJIDgKKyNkZWZpbmUgV0FDT01fUEtHTEVOX1RQQzFGRwkgNQorI2RlZmluZSBXQUNPTV9QS0dMRU5fVFBDMkZHIAkxNAorCisvKiBkZXZpY2UgSURzICovCiAjZGVmaW5lIFNUWUxVU19ERVZJQ0VfSUQJMHgwMgogI2RlZmluZSBUT1VDSF9ERVZJQ0VfSUQJCTB4MDMKICNkZWZpbmUgQ1VSU09SX0RFVklDRV9JRAkweDA2CiAjZGVmaW5lIEVSQVNFUl9ERVZJQ0VfSUQJMHgwQQogI2RlZmluZSBQQURfREVWSUNFX0lECQkweDBGCiAKKy8qIHdhY29tIGRhdGEgcGFja2V0IHJlcG9ydCBJRHMgKi8KKyNkZWZpbmUgV0FDT01fUkVQT1JUX1BFTkFCTEVECQkyCisjZGVmaW5lIFdBQ09NX1JFUE9SVF9JTlRVT1NSRUFECQk1CisjZGVmaW5lIFdBQ09NX1JFUE9SVF9JTlRVT1NXUklURQk2CisjZGVmaW5lIFdBQ09NX1JFUE9SVF9JTlRVT1NQQUQJCTEyCisjZGVmaW5lIFdBQ09NX1JFUE9SVF9UUEMxRkcJCTYKKyNkZWZpbmUgV0FDT01fUkVQT1JUX1RQQzJGRwkJMTMKKwogZW51bSB7CiAJUEVOUEFSVE5FUiA9IDAsCiAJR1JBUEhJUkUsCkBAIC0zMiw2ICs1Myw3IEBACiAJV0FDT01fQkVFLAogCVdBQ09NX01PLAogCVRBQkxFVFBDLAorCVRBQkxFVFBDMkZHLAogCU1BWF9UWVBFCiB9OwogCkBAIC00Myw4ICs2NSwxMSBAQAogCWludCBwcmVzc3VyZV9tYXg7CiAJaW50IGRpc3RhbmNlX21heDsKIAlpbnQgdHlwZTsKLQlpbnQgdG91Y2hfeF9tYXg7Ci0JaW50IHRvdWNoX3lfbWF4OworCWludCBkZXZpY2VfdHlwZTsKKwlpbnQgeF9waHk7CisJaW50IHlfcGh5OworCXVuc2lnbmVkIGNoYXIgdW5pdDsKKwl1bnNpZ25lZCBjaGFyIHVuaXRFeHBvOwogfTsKIAogc3RydWN0IHdhY29tX3dhYyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggMzJmYzhiYS4uZGZhZmM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtNDUwLDYgKzQ1MCwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidG91Y2hzY3JlZW4uCiAKK2NvbmZpZyBUT1VDSFNDUkVFTl9NQzEzNzgzCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBNQzEzNzgzIHRvdWNoc2NyZWVuIGlucHV0IGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9NQzEzNzgzCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDIG9uIHlvdXIKKwkgIGJvYXJkIGFuZCB3YW50IHRvIHVzZSBpdHMgdG91Y2hzY3JlZW4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWMxMzc4M190cy4KKwogY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9FR0FMQVgKIAlkZWZhdWx0IHkKIAlib29sICJlR2FsYXgsIGVUdXJib1RvdWNoIENULTQxMC81MTAvNzAwIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKaW5kZXggZjFmNTljOS4uZDYxYTNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBACiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPKQkJKz0gZWxvLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVKQkrPSBmdWppdHN1X3RzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8pCSs9IGluZXhpby5vCitvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fTUMxMzc4MykJKz0gbWMxMzc4M190cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCkJKz0gbWNzNTAwMF90cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fTUlHT1IpCQkrPSBtaWdvcl90cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIKQkrPSBtdG91Y2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYzEzNzgzX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jMTM3ODNfdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTExNWIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYzEzNzgzX3RzLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBNQzEzNzgzIHRvdWNoc2NyZWVuLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogSW5pdGlhbCBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIGZ1bmRlZCBieQorICogUGh5dGVjIE1lc3N0ZWNobmlrIEdtYkgsIGh0dHA6Ly93d3cucGh5dGVjLmRlLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNkZWZpbmUgTUMxMzc4M19UU19OQU1FCSJtYzEzNzgzLXRzIgorCisjZGVmaW5lIERFRkFVTFRfU0FNUExFX1RPTEVSQU5DRSAzMDAKKworc3RhdGljIHVuc2lnbmVkIGludCBzYW1wbGVfdG9sZXJhbmNlID0gREVGQVVMVF9TQU1QTEVfVE9MRVJBTkNFOworbW9kdWxlX3BhcmFtKHNhbXBsZV90b2xlcmFuY2UsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Moc2FtcGxlX3RvbGVyYW5jZSwKKwkJIklmIHRoZSBtaW5pbWFsIGFuZCBtYXhpbWFsIHZhbHVlIHJlYWQgb3V0IGZvciBvbmUgYXhpcyAob3V0ICIKKwkJIm9mIHRocmVlKSBkaWZmZXIgYnkgdGhpcyB2YWx1ZSAoZGVmYXVsdDogIgorCQlfX3N0cmluZ2lmeShERUZBVUxUX1NBTVBMRV9UT0xFUkFOQ0UpICIpIG9yIG1vcmUsIHRoZSByZWFkaW5nICIKKwkJImlzIHN1cHBvc2VkIHRvIGJlIHdyb25nIGFuZCBpcyBkaXNjYXJkZWQuICBTZXQgdG8gMCB0byAiCisJCSJkaXNhYmxlIHRoaXMgY2hlY2suIik7CisKK3N0cnVjdCBtYzEzNzgzX3RzX3ByaXYgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODM7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlWzRdOworfTsKKworc3RhdGljIGlycXJldHVybl90IG1jMTM3ODNfdHNfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtYzEzNzgzX3RzX3ByaXYgKnByaXYgPSBkYXRhOworCisJbWMxMzc4M19hY2tpcnEocHJpdi0+bWMxMzc4MywgaXJxKTsKKworCS8qCisJICogS2ljayBvZmYgcmVhZGluZyBjb29yZGluYXRlcy4gTm90ZSB0aGF0IGlmIHdvcmsgaGFwcGVucyBhbHJlYWR5CisJICogYmUgcXVldWVkIGZvciBmdXR1cmUgZXhlY3V0aW9uIChpdCByZWFybXMgaXRzZWxmKSBpdCB3aWxsIG5vdAorCSAqIGJlIHJlc2NoZWR1bGVkIGZvciBpbW1lZGlhdGUgZXhlY3V0aW9uIGhlcmUuIEhvd2V2ZXIgdGhlIHJlYXJtCisJICogZGVsYXkgaXMgSFogLyA1MCB3aGljaCBpcyBhY2NlcHRhYmxlLgorCSAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcSwgJnByaXYtPndvcmssIDApOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjZGVmaW5lIHNvcnQzKGEwLCBhMSwgYTIpICh7CQkJCQkJXAorCQlpZiAoYTAgPiBhMSkJCQkJCQlcCisJCQlzd2FwKGEwLCBhMSk7CQkJCQlcCisJCWlmIChhMSA+IGEyKQkJCQkJCVwKKwkJCXN3YXAoYTEsIGEyKTsJCQkJCVwKKwkJaWYgKGEwID4gYTEpCQkJCQkJXAorCQkJc3dhcChhMCwgYTEpOwkJCQkJXAorCQl9KQorCitzdGF0aWMgdm9pZCBtYzEzNzgzX3RzX3JlcG9ydF9zYW1wbGUoc3RydWN0IG1jMTM3ODNfdHNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2ID0gcHJpdi0+aWRldjsKKwlpbnQgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MjsKKwlpbnQgY3IwLCBjcjE7CisKKwkvKgorCSAqIHRoZSB2YWx1ZXMgYXJlIDEwLWJpdCB3aWRlIG9ubHksIGJ1dCB0aGUgdHdvIGxlYXN0IHNpZ25pZmljYW50CisJICogYml0cyBhcmUgZm9yIGZ1dHVyZSAxMiBiaXQgdXNlIGFuZCByZWFkaW5nIHlpZWxkcyAwCisJICovCisJeDAgPSBwcml2LT5zYW1wbGVbMF0gJiAweGZmZjsKKwl4MSA9IHByaXYtPnNhbXBsZVsxXSAmIDB4ZmZmOworCXgyID0gcHJpdi0+c2FtcGxlWzJdICYgMHhmZmY7CisJeTAgPSBwcml2LT5zYW1wbGVbM10gJiAweGZmZjsKKwl5MSA9IChwcml2LT5zYW1wbGVbMF0gPj4gMTIpICYgMHhmZmY7CisJeTIgPSAocHJpdi0+c2FtcGxlWzFdID4+IDEyKSAmIDB4ZmZmOworCWNyMCA9IChwcml2LT5zYW1wbGVbMl0gPj4gMTIpICYgMHhmZmY7CisJY3IxID0gKHByaXYtPnNhbXBsZVszXSA+PiAxMikgJiAweGZmZjsKKworCWRldl9kYmcoJmlkZXYtPmRldiwKKwkJIng6ICglIDRkLCUgNGQsJSA0ZCkgeTogKCUgNGQsICUgNGQsJSA0ZCkgY3I6ICglIDRkLCAlIDRkKVxuIiwKKwkJeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgY3IwLCBjcjEpOworCisJc29ydDMoeDAsIHgxLCB4Mik7CisJc29ydDMoeTAsIHkxLCB5Mik7CisKKwljcjAgPSAoY3IwICsgY3IxKSAvIDI7CisKKwlpZiAoIWNyMCB8fCAhc2FtcGxlX3RvbGVyYW5jZSB8fAorCQkJKHgyIC0geDAgPCBzYW1wbGVfdG9sZXJhbmNlICYmCisJCQkgeTIgLSB5MCA8IHNhbXBsZV90b2xlcmFuY2UpKSB7CisJCS8qIHJlcG9ydCB0aGUgbWVkaWFuIGNvb3JkaW5hdGUgYW5kIGF2ZXJhZ2UgcHJlc3N1cmUgKi8KKwkJaWYgKGNyMCkgeworCQkJaW5wdXRfcmVwb3J0X2FicyhpZGV2LCBBQlNfWCwgeDEpOworCQkJaW5wdXRfcmVwb3J0X2FicyhpZGV2LCBBQlNfWSwgeTEpOworCisJCQlkZXZfZGJnKCZpZGV2LT5kZXYsICJyZXBvcnQgKCVkLCAlZCwgJWQpXG4iLAorCQkJCQl4MSwgeTEsIDB4MTAwMCAtIGNyMCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3EsICZwcml2LT53b3JrLCBIWiAvIDUwKTsKKwkJfSBlbHNlCisJCQlkZXZfZGJnKCZpZGV2LT5kZXYsICJyZXBvcnQgcmVsZWFzZVxuIik7CisKKwkJaW5wdXRfcmVwb3J0X2FicyhpZGV2LCBBQlNfUFJFU1NVUkUsCisJCQkJY3IwID8gMHgxMDAwIC0gY3IwIDogY3IwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBCVE5fVE9VQ0gsIGNyMCk7CisJCWlucHV0X3N5bmMoaWRldik7CisJfSBlbHNlCisJCWRldl9kYmcoJmlkZXYtPmRldiwgImRpc2NhcmQgZXZlbnRcbiIpOworfQorCitzdGF0aWMgdm9pZCBtYzEzNzgzX3RzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtYzEzNzgzX3RzX3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jMTM3ODNfdHNfcHJpdiwgd29yay53b3JrKTsKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IE1DMTM3ODNfQURDX01PREVfVFM7CisJdW5zaWduZWQgaW50IGNoYW5uZWwgPSAxMjsKKworCWlmIChtYzEzNzgzX2FkY19kb19jb252ZXJzaW9uKHByaXYtPm1jMTM3ODMsCisJCQkJbW9kZSwgY2hhbm5lbCwgcHJpdi0+c2FtcGxlKSA9PSAwKQorCQltYzEzNzgzX3RzX3JlcG9ydF9zYW1wbGUocHJpdik7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M190c19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M190c19wcml2ICpwcml2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJbWMxMzc4M19hY2tpcnEocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVFMpOworCisJcmV0ID0gbWMxMzc4M19pcnFfcmVxdWVzdChwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UUywKKwkJbWMxMzc4M190c19oYW5kbGVyLCBNQzEzNzgzX1RTX05BTUUsIHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWMxMzc4M19yZWdfcm13KHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfQURDMCwKKwkJCU1DMTM3ODNfQURDMF9UU01PRF9NQVNLLCBNQzEzNzgzX0FEQzBfVFNNT0QwKTsKKwlpZiAocmV0KQorCQltYzEzNzgzX2lycV9mcmVlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1RTLCBwcml2KTsKK291dDoKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtYzEzNzgzX3RzX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M190c19wcml2ICpwcml2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKwltYzEzNzgzX3JlZ19ybXcocHJpdi0+bWMxMzc4MywgTUMxMzc4M19BREMwLAorCQkJTUMxMzc4M19BREMwX1RTTU9EX01BU0ssIDApOworCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVFMsIHByaXYpOworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWMxMzc4M190c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3RzX3ByaXYgKnByaXY7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXByaXYgfHwgIWlkZXYpCisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndvcmssIG1jMTM3ODNfdHNfd29yayk7CisJcHJpdi0+bWMxMzc4MyA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlwcml2LT5pZGV2ID0gaWRldjsKKworCS8qCisJICogV2UgbmVlZCBzZXBhcmF0ZSB3b3JrcXVldWUgYmVjYXVzZSBtYzEzNzgzX2FkY19kb19jb252ZXJzaW9uCisJICogdXNlcyBrZXZlbnRkIGFuZCB0aHVzIHdvdWxkIGRlYWRsb2NrLgorCSAqLworCXByaXYtPndvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm1jMTM3ODNfdHMiKTsKKwlpZiAoIXByaXYtPndvcmtxKQorCQlnb3RvIGVycl9mcmVlX21lbTsKKworCWlkZXYtPm5hbWUgPSBNQzEzNzgzX1RTX05BTUU7CisJaWRldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlkZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaWRldiwgQUJTX1gsIDAsIDB4ZmZmLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWSwgMCwgMHhmZmYsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlkZXYsIEFCU19QUkVTU1VSRSwgMCwgMHhmZmYsIDAsIDApOworCisJaWRldi0+b3BlbiA9IG1jMTM3ODNfdHNfb3BlbjsKKwlpZGV2LT5jbG9zZSA9IG1jMTM3ODNfdHNfY2xvc2U7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpZGV2LCBwcml2KTsKKworCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwcml2LT5pZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJyZWdpc3RlciBpbnB1dCBkZXZpY2UgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rlc3Ryb3lfd3E7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cm95X3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxKTsKK2Vycl9mcmVlX21lbToKKwlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYzEzNzgzX3RzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3RzX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3EpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPmlkZXYpOworCWtmcmVlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jMTM3ODNfdHNfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWMxMzc4M190c19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBNQzEzNzgzX1RTX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jMTM3ODNfdHNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1jMTM3ODNfdHNfZHJpdmVyLCAmbWMxMzc4M190c19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChtYzEzNzgzX3RzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWMxMzc4M190c19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1jMTM3ODNfdHNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jMTM3ODNfdHNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTUMxMzc4MyBpbnB1dCB0b3VjaHNjcmVlbiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBNQzEzNzgzX1RTX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9wY2FwX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3BjYXBfdHMuYwppbmRleCA2N2ZjZDMzLi5iNzkwOTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3BjYXBfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3BjYXBfdHMuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBwY2FwX3RzX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY2FwX3RzX3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IHBjYXBfdHNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHBjYXBfdHNfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IDVhNmFlNjQuLjk0Yjc5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMTA4LDggKzEwOCw3IEBACiAgICAgcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CiAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0gICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CisgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCmluZGV4IGY5YmRmZjMuLmU1ZGViMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCkBAIC0xMjAsOCArMTIwLDcgQEAKICAgICBwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSA1OwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCi0gICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKaW5kZXggYTJmNzA5Zi4uYzlhMzBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICBsb2NhbC0+Y2FyZG5yID0gLTE7CiAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKaW5kZXggYWY1ZDM5My4uNzgzNmVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgbGluay0+cHJpdiA9IGxvY2FsOwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCi0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKKyAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwppbmRleCBlYTcwNTM5Li5iMGM1OTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgbGluay0+cHJpdiA9IGxvY2FsOwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCi0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKKyAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCBlNGY1OTlmLi44YTBlMWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMjI5LDYgKzIyOSwxMiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgcHdtIGRyaXZlbiBMRURzCiAKK2NvbmZpZyBMRURTX1JFR1VMQVRPUgorCXRyaXN0YXRlICJSRUdVTEFUT1IgZHJpdmVuIExFRCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBSRUdVTEFUT1IKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHJlZ3VsYXRvciBkcml2ZW4gTEVEcy4KKwogY29uZmlnIExFRFNfQkQyODAyCiAJdHJpc3RhdGUgIkxFRCBkcml2ZXIgZm9yIEJEMjgwMiBSR0IgTEVEIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMKQEAgLTIzNiw2ICsyNDIsMzMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQkQyODAyR1UgUkdCIExFRCBkcml2ZXIgY2hpcHMKIAkgIGFjY2Vzc2VkIHZpYSB0aGUgSTJDIGJ1cy4KIAorY29uZmlnIExFRFNfSU5URUxfU1M0MjAwCisJdHJpc3RhdGUgIkxFRCBkcml2ZXIgZm9yIEludGVsIE5BUyBTUzQyMDAgc2VyaWVzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBQQ0kgJiYgRE1JCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgSW50ZWwgU1M0MjAwIHNlcmllcyBvZgorCSAgTmV0d29yayBBdHRhY2hlZCBTdG9yYWdlIHNlcnZlcnMuICBZb3UgbWF5IGNvbnRyb2wgdGhlIGhhcmQKKwkgIGRyaXZlIG9yIHBvd2VyIExFRHMgb24gdGhlIGZyb250IHBhbmVsLiAgVXNpbmcgdGhpcyBkcml2ZXIKKwkgIGNhbiBzdG9wIHRoZSBmcm9udCBMRUQgZnJvbSBibGlua2luZyBhZnRlciBzdGFydHVwLgorCitjb25maWcgTEVEU19MVDM1OTMKKwl0cmlzdGF0ZSAiTEVEIGRyaXZlciBmb3IgTFQzNTkzIGNvbnRyb2xsZXJzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgZHJpdmVuIGJ5IGEgTGluZWFyIFRlY2hub2xvZ3kKKwkgIExUMzU5MyBjb250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgdXNlcyBhIHNwZWNpYWwgb25lLXdpcmUgcHVsc2UKKwkgIGNvZGluZyBwcm90b2NvbCB0byBzZXQgdGhlIGJyaWdodG5lc3MuCisKK2NvbmZpZyBMRURTX0FEUDU1MjAKKwl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIEFEUDU1MjAvQURQNTUwMSBQTUlDIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBQTUlDX0FEUDU1MjAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG9uLWNoaXAgTEVEIGRyaXZlcnMgZm91bmQKKwkgIG9uIEFuYWxvZyBEZXZpY2VzIEFEUDU1MjAvQURQNTUwMSBQTUlDcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgbGVkcy1hZHA1NTIwLgorCiBjb21tZW50ICJMRUQgVHJpZ2dlcnMiCiAKIGNvbmZpZyBMRURTX1RSSUdHRVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggNDZkNzI3MC4uOWU2Mzg2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMjksNiArMjksMTAgQEAKIG9iai0kKENPTkZJR19MRURTX1dNODMxWF9TVEFUVVMpCSs9IGxlZHMtd204MzF4LXN0YXR1cy5vCiBvYmotJChDT05GSUdfTEVEU19XTTgzNTApCQkrPSBsZWRzLXdtODM1MC5vCiBvYmotJChDT05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1wd20ubworb2JqLSQoQ09ORklHX0xFRFNfUkVHVUxBVE9SKQkJKz0gbGVkcy1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX0xFRFNfSU5URUxfU1M0MjAwKQkJKz0gbGVkcy1zczQyMDAubworb2JqLSQoQ09ORklHX0xFRFNfTFQzNTkzKQkJKz0gbGVkcy1sdDM1OTMubworb2JqLSQoQ09ORklHX0xFRFNfQURQNTUyMCkJCSs9IGxlZHMtYWRwNTUyMC5vCiAKICMgTEVEIFNQSSBEcml2ZXJzCiBvYmotJChDT05GSUdfTEVEU19EQUMxMjRTMDg1KQkJKz0gbGVkcy1kYWMxMjRzMDg1Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwppbmRleCBmMmNjMTNkLi43ODJmOTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCkBAIC01MCw3ICs1MCw3IEBACiAJdW5zaWduZWQgbG9uZyBzdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmFmdGVyLCAxMCk7CiAJc2l6ZV90IGNvdW50ID0gYWZ0ZXIgLSBidWY7CiAKLQlpZiAoKmFmdGVyICYmIGlzc3BhY2UoKmFmdGVyKSkKKwlpZiAoaXNzcGFjZSgqYWZ0ZXIpKQogCQljb3VudCsrOwogCiAJaWYgKGNvdW50ID09IHNpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWFkcDU1MjAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWFkcDU1MjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYzMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtYWRwNTUyMC5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogTEVEcyBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFEUDU1MjAvQURQNTUwMSBNRkQgUE1JQ3MKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTG9vc2VseSBkZXJpdmVkIGZyb20gbGVkcy1kYTkwM3g6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIsIEx0ZC4KKyAqIAlNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hZHA1NTIwLmg+CisKK3N0cnVjdCBhZHA1NTIwX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBkZXZpY2UJCSptYXN0ZXI7CisJZW51bSBsZWRfYnJpZ2h0bmVzcwluZXdfYnJpZ2h0bmVzczsKKwlpbnQJCQlpZDsKKwlpbnQJCQlmbGFnczsKK307CisKK3N0YXRpYyB2b2lkIGFkcDU1MjBfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZHA1NTIwX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZHA1NTIwX2xlZCwgd29yayk7CisJYWRwNTUyMF93cml0ZShsZWQtPm1hc3RlciwgQURQNTUyMF9MRUQxX0NVUlJFTlQgKyBsZWQtPmlkIC0gMSwKKwkJCSBsZWQtPm5ld19icmlnaHRuZXNzID4+IDIpOworfQorCitzdGF0aWMgdm9pZCBhZHA1NTIwX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBhZHA1NTIwX2xlZCAqbGVkOworCisJbGVkID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgYWRwNTUyMF9sZWQsIGNkZXYpOworCWxlZC0+bmV3X2JyaWdodG5lc3MgPSB2YWx1ZTsKKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfbGVkX3NldHVwKHN0cnVjdCBhZHA1NTIwX2xlZCAqbGVkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZC0+bWFzdGVyOworCWludCBmbGFncyA9IGxlZC0+ZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGxlZC0+aWQpIHsKKwljYXNlIEZMQUdfSURfQURQNTUyMF9MRUQxX0FEUDU1MDFfTEVEMDoKKwkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LCBBRFA1NTIwX0xFRF9USU1FLAorCQkJCQkoZmxhZ3MgPj4gQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpICYKKwkJCQkJQURQNTUyMF9GTEFHX09GRlRfTUFTSyk7CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJQURQNTUyMF9MRUQxX0VOKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFHX0lEX0FEUDU1MjBfTEVEMl9BRFA1NTAxX0xFRDE6CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgIEFEUDU1MjBfTEVEX1RJTUUsCisJCQkJCSgoZmxhZ3MgPj4gQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpICYKKwkJCQkJQURQNTUyMF9GTEFHX09GRlRfTUFTSykgPDwgMik7CisJCXJldCB8PSBhZHA1NTIwX2Nscl9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJIEFEUDU1MjBfUjNfTU9ERSk7CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJQURQNTUyMF9MRUQyX0VOKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFHX0lEX0FEUDU1MjBfTEVEM19BRFA1NTAxX0xFRDI6CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgIEFEUDU1MjBfTEVEX1RJTUUsCisJCQkJCSgoZmxhZ3MgPj4gQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpICYKKwkJCQkJQURQNTUyMF9GTEFHX09GRlRfTUFTSykgPDwgNCk7CisJCXJldCB8PSBhZHA1NTIwX2Nscl9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJQURQNTUyMF9DM19NT0RFKTsKKwkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LCBBRFA1NTIwX0xFRF9DT05UUk9MLAorCQkJCQlBRFA1NTIwX0xFRDNfRU4pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2xlZF9wcmVwYXJlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkcDU1MjBfbGVkc19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CisJaW50IHJldCA9IDA7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEMV9DVVJSRU5ULCAwKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEMl9DVVJSRU5ULCAwKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEM19DVVJSRU5ULCAwKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEX1RJTUUsIHBkYXRhLT5sZWRfb25fdGltZSA8PCA2KTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAorCQkgcGRhdGEtPmZhZGVfb3V0KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHA1NTIwX2xlZHNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWRwNTUyMF9sZWQgKmxlZCwgKmxlZF9kYXQ7CisJc3RydWN0IGxlZF9pbmZvICpjdXJfbGVkOworCWludCByZXQsIGk7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGRhdGEtPm51bV9sZWRzID4gQURQNTUyMF8wMV9NQVhMRURTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGhhbmRsZSBtb3JlIHRoYW4gJWQgTEVEU1xuIiwKKwkJCQkgQURQNTUyMF8wMV9NQVhMRURTKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbGVkID0ga3phbGxvYyhzaXplb2YoKmxlZCkgKiBwZGF0YS0+bnVtX2xlZHMsIEdGUF9LRVJORUwpOworCWlmIChsZWQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gYWRwNTUyMF9sZWRfcHJlcGFyZShwZGV2KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9sZWRzOyArK2kpIHsKKwkJY3VyX2xlZCA9ICZwZGF0YS0+bGVkc1tpXTsKKwkJbGVkX2RhdCA9ICZsZWRbaV07CisKKwkJbGVkX2RhdC0+Y2Rldi5uYW1lID0gY3VyX2xlZC0+bmFtZTsKKwkJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBjdXJfbGVkLT5kZWZhdWx0X3RyaWdnZXI7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBhZHA1NTIwX2xlZF9zZXQ7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CisKKwkJaWYgKGN1cl9sZWQtPmZsYWdzICYgQURQNTUyMF9GTEFHX0xFRF9NQVNLKQorCQkJbGVkX2RhdC0+ZmxhZ3MgPSBjdXJfbGVkLT5mbGFnczsKKwkJZWxzZQorCQkJbGVkX2RhdC0+ZmxhZ3MgPSBpICsgMTsKKworCQlsZWRfZGF0LT5pZCA9IGxlZF9kYXQtPmZsYWdzICYgQURQNTUyMF9GTEFHX0xFRF9NQVNLOworCisJCWxlZF9kYXQtPm1hc3RlciA9IHBkZXYtPmRldi5wYXJlbnQ7CisJCWxlZF9kYXQtPm5ld19icmlnaHRuZXNzID0gTEVEX09GRjsKKworCQlJTklUX1dPUksoJmxlZF9kYXQtPndvcmssIGFkcDU1MjBfbGVkX3dvcmspOworCisJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihsZWRfZGF0LT5tYXN0ZXIsICZsZWRfZGF0LT5jZGV2KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIExFRCAlZFxuIiwKKwkJCQlsZWRfZGF0LT5pZCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJldCA9IGFkcDU1MjBfbGVkX3NldHVwKGxlZF9kYXQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gd3JpdGVcbiIpOworCQkJaSsrOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWQpOworCXJldHVybiAwOworCitlcnI6CisJaWYgKGkgPiAwKSB7CisJCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkgeworCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZFtpXS5jZGV2KTsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJmxlZFtpXS53b3JrKTsKKwkJfQorCX0KKworZXJyX2ZyZWU6CisJa2ZyZWUobGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHA1NTIwX2xlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9sZWRzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkcDU1MjBfbGVkICpsZWQ7CisJaW50IGk7CisKKwlsZWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWFkcDU1MjBfY2xyX2JpdHMobGVkLT5tYXN0ZXIsIEFEUDU1MjBfTEVEX0NPTlRST0wsCisJCSBBRFA1NTIwX0xFRDFfRU4gfCBBRFA1NTIwX0xFRDJfRU4gfCBBRFA1NTIwX0xFRDNfRU4pOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbGVkczsgaSsrKSB7CisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWRbaV0uY2Rldik7CisJCWNhbmNlbF93b3JrX3N5bmMoJmxlZFtpXS53b3JrKTsKKwl9CisKKwlrZnJlZShsZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHA1NTIwX2xlZF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYWRwNTUyMC1sZWQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBhZHA1NTIwX2xlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkcDU1MjBfbGVkX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHA1NTIwX2xlZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWRwNTUyMF9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfbGVkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWRwNTUyMF9sZWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhZHA1NTIwX2xlZF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9sZWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSGVubmVyaWNoIDxoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxFRFMgQURQNTUyMCgwMSkgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDU1MjAtbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1hbGl4Mi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtYWxpeDIuYwppbmRleCA3MzFkNGVlLi5mNTlmZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1hbGl4Mi5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWFsaXgyLmMKQEAgLTExLDExICsxMSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiBzdGF0aWMgaW50IGZvcmNlID0gMDsKIG1vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiQXNzdW1lIHN5c3RlbSBoYXMgQUxJWC4yL0FMSVguMyBzdHlsZSBMRURzIik7CiAKKyNkZWZpbmUgTVNSX0xCQVJfR1BJTwkJMHg1MTQwMDAwQworI2RlZmluZSBDUzU1MzVfR1BJT19TSVpFCTI1NgorCitzdGF0aWMgdTMyIGdwaW9fYmFzZTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRpdmlsX3BjaVtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05TLCAgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSVNBKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSkgfSwKKwl7IH0gLyogTlVMTCBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkaXZpbF9wY2kpOworCiBzdHJ1Y3QgYWxpeF9sZWQgewogCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwpAQCAtMzAsOSArNDMsOSBAQAogCQljb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhbGl4X2xlZCwgY2Rldik7CiAKIAlpZiAoYnJpZ2h0bmVzcykKLQkJb3V0bChsZWRfZGV2LT5vbl92YWx1ZSwgbGVkX2Rldi0+cG9ydCk7CisJCW91dGwobGVkX2Rldi0+b25fdmFsdWUsIGdwaW9fYmFzZSArIGxlZF9kZXYtPnBvcnQpOwogCWVsc2UKLQkJb3V0bChsZWRfZGV2LT5vZmZfdmFsdWUsIGxlZF9kZXYtPnBvcnQpOworCQlvdXRsKGxlZF9kZXYtPm9mZl92YWx1ZSwgZ3Bpb19iYXNlICsgbGVkX2Rldi0+cG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYWxpeF9sZWQgYWxpeF9sZWRzW10gPSB7CkBAIC00MSw3ICs1NCw3IEBACiAJCQkubmFtZSA9ICJhbGl4OjEiLAogCQkJLmJyaWdodG5lc3Nfc2V0ID0gYWxpeF9sZWRfc2V0LAogCQl9LAotCQkucG9ydCA9IDB4NjEwMCwKKwkJLnBvcnQgPSAweDAwLAogCQkub25fdmFsdWUgPSAxIDw8IDIyLAogCQkub2ZmX3ZhbHVlID0gMSA8PCA2LAogCX0sCkBAIC01MCw3ICs2Myw3IEBACiAJCQkubmFtZSA9ICJhbGl4OjIiLAogCQkJLmJyaWdodG5lc3Nfc2V0ID0gYWxpeF9sZWRfc2V0LAogCQl9LAotCQkucG9ydCA9IDB4NjE4MCwKKwkJLnBvcnQgPSAweDgwLAogCQkub25fdmFsdWUgPSAxIDw8IDI1LAogCQkub2ZmX3ZhbHVlID0gMSA8PCA5LAogCX0sCkBAIC01OSw3ICs3Miw3IEBACiAJCQkubmFtZSA9ICJhbGl4OjMiLAogCQkJLmJyaWdodG5lc3Nfc2V0ID0gYWxpeF9sZWRfc2V0LAogCQl9LAotCQkucG9ydCA9IDB4NjE4MCwKKwkJLnBvcnQgPSAweDgwLAogCQkub25fdmFsdWUgPSAxIDw8IDI3LAogCQkub2ZmX3ZhbHVlID0gMSA8PCAxMSwKIAl9LApAQCAtMTAxLDY0ICsxMTQsMTA0IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFsaXhfcHJlc2VudCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxpeF9wcmVzZW50KHVuc2lnbmVkIGxvbmcgYmlvc19waHlzLAorCQkJCWNvbnN0IGNoYXIgKmFsaXhfc2lnLAorCQkJCXNpemVfdCBhbGl4X3NpZ19sZW4pCiB7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBiaW9zX3BoeXMgPSAweDAwMGYwMDAwOwogCWNvbnN0IHNpemVfdCBiaW9zX2xlbiA9IDB4MDAwMTAwMDA7Ci0JY29uc3QgY2hhciBhbGl4X3NpZ1tdID0gIlBDIEVuZ2luZXMgQUxJWC4iOwotCWNvbnN0IHNpemVfdCBhbGl4X3NpZ19sZW4gPSBzaXplb2YoYWxpeF9zaWcpIC0gMTsKLQogCWNvbnN0IGNoYXIgKmJpb3NfdmlydDsKIAljb25zdCBjaGFyICpzY2FuX2VuZDsKIAljb25zdCBjaGFyICpwOwotCWludCByZXQgPSAwOworCWNoYXIgbmFtZVs2NF07CiAKIAlpZiAoZm9yY2UpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogZm9yY2VkIHRvIHNraXAgQklPUyB0ZXN0LCAiCiAJCSAgICAgICAiYXNzdW1lIHN5c3RlbSBoYXMgQUxJWC4yIHN0eWxlIExFRHNcbiIsCiAJCSAgICAgICBLQlVJTERfTU9ETkFNRSk7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMTsKIAl9CiAKIAliaW9zX3ZpcnQgPSBwaHlzX3RvX3ZpcnQoYmlvc19waHlzKTsKIAlzY2FuX2VuZCA9IGJpb3NfdmlydCArIGJpb3NfbGVuIC0gKGFsaXhfc2lnX2xlbiArIDIpOwogCWZvciAocCA9IGJpb3NfdmlydDsgcCA8IHNjYW5fZW5kOyBwKyspIHsKIAkJY29uc3QgY2hhciAqdGFpbDsKKwkJY2hhciAqYTsKIAotCQlpZiAobWVtY21wKHAsIGFsaXhfc2lnLCBhbGl4X3NpZ19sZW4pICE9IDApIHsKKwkJaWYgKG1lbWNtcChwLCBhbGl4X3NpZywgYWxpeF9zaWdfbGVuKSAhPSAwKQogCQkJY29udGludWU7Ci0JCX0KKworCQltZW1jcHkobmFtZSwgcCwgc2l6ZW9mKG5hbWUpKTsKKworCQkvKiByZW1vdmUgdGhlIGZpcnN0IFwwIGNoYXJhY3RlciBmcm9tIHN0cmluZyAqLworCQlhID0gc3RyY2hyKG5hbWUsICdcMCcpOworCQlpZiAoYSkKKwkJCSphID0gJyAnOworCisJCS8qIGN1dCB0aGUgc3RyaW5nIGF0IGEgbmV3bGluZSAqLworCQlhID0gc3RyY2hyKG5hbWUsICdccicpOworCQlpZiAoYSkKKwkJCSphID0gJ1wwJzsKIAogCQl0YWlsID0gcCArIGFsaXhfc2lnX2xlbjsKLQkJaWYgKCh0YWlsWzBdID09ICcyJyB8fCB0YWlsWzBdID09ICczJykgJiYgdGFpbFsxXSA9PSAnXDAnKSB7CisJCWlmICgodGFpbFswXSA9PSAnMicgfHwgdGFpbFswXSA9PSAnMycpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgIiVzOiBzeXN0ZW0gaXMgcmVjb2duaXplZCBhcyBcIiVzXCJcbiIsCi0JCQkgICAgICAgS0JVSUxEX01PRE5BTUUsIHApOwotCQkJcmV0ID0gMTsKLQkJCWJyZWFrOworCQkJICAgICAgIEtCVUlMRF9NT0ROQU1FLCBuYW1lKTsKKwkJCXJldHVybiAxOwogCQl9CiAJfQogCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKLXN0YXRpYyBpbnQgX19pbml0IGFsaXhfbGVkX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGFsaXhfcGNpX2xlZF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwl1MzIgbG93LCBoaTsKIAotCWlmICghYWxpeF9wcmVzZW50KCkpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJaWYgKHBjaV9kZXZfcHJlc2VudChkaXZpbF9wY2kpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSI6IERJVklMIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIGVuYWJsZSBvdXRwdXQgb24gR1BJTyBmb3IgTEVEIDEsMiwzICovCi0Jb3V0bCgxIDw8IDYsIDB4NjEwNCk7Ci0Jb3V0bCgxIDw8IDksIDB4NjE4NCk7Ci0Jb3V0bCgxIDw8IDExLCAweDYxODQpOworCS8qIEdyYWIgdGhlIEdQSU8gSS9PIHJhbmdlICovCisJcmRtc3IoTVNSX0xCQVJfR1BJTywgbG93LCBoaSk7CisKKwkvKiBDaGVjayB0aGUgbWFzayBhbmQgd2hldGhlciBHUElPIGlzIGVuYWJsZWQgKHNhbml0eSBjaGVjaykgKi8KKwlpZiAoaGkgIT0gMHgwMDAwZjAwMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FIjogR1BJTyBub3QgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1hc2sgb2ZmIHRoZSBJTyBiYXNlIGFkZHJlc3MgKi8KKwlncGlvX2Jhc2UgPSBsb3cgJiAweDAwMDBmZjAwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUsIEtCVUlMRF9NT0ROQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUiOiBjYW4ndCBhbGxvY2F0ZSBJL08gZm9yIEdQSU9cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBTZXQgR1BJTyBmdW5jdGlvbiB0byBvdXRwdXQgKi8KKwlvdXRsKDEgPDwgNiwgZ3Bpb19iYXNlICsgMHgwNCk7CisJb3V0bCgxIDw8IDksIGdwaW9fYmFzZSArIDB4ODQpOworCW91dGwoMSA8PCAxMSwgZ3Bpb19iYXNlICsgMHg4NCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgYWxpeF9sZWRfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRU5PREVWOworCWNvbnN0IGNoYXIgdGlueWJpb3Nfc2lnW10gPSAiUEMgRW5naW5lcyBBTElYLiI7CisJY29uc3QgY2hhciBjb3JlYm9vdF9zaWdbXSA9ICJQQyBFbmdpbmVzXDBBTElYLiI7CisKKwlpZiAoYWxpeF9wcmVzZW50KDB4ZjAwMDAsIHRpbnliaW9zX3NpZywgc2l6ZW9mKHRpbnliaW9zX3NpZykgLSAxKSB8fAorCSAgICBhbGl4X3ByZXNlbnQoMHg1MDAsIGNvcmVib290X3NpZywgc2l6ZW9mKGNvcmVib290X3NpZykgLSAxKSkKKwkJcmV0ID0gYWxpeF9wY2lfbGVkX2luaXQoKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoS0JVSUxEX01PRE5BTUUsIC0xLCBOVUxMLCAwKTsKIAlpZiAoIUlTX0VSUihwZGV2KSkgewpAQCAtMTY4LDcgKzIyMSw2IEBACiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIocGRldik7CiAKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzYsNiArMjI4LDcgQEAKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWxpeF9sZWRfZHJpdmVyKTsKKwlyZWxlYXNlX3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUpOwogfQogCiBtb2R1bGVfaW5pdChhbGl4X2xlZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCmluZGV4IDg4MTY4MDYuLmRhNWZiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYwpAQCAtMzEsNyArMzEsNyBAQAogCS5uYW1lCQkJPSAicXViZTo6ZnJvbnQiLAogCS5icmlnaHRuZXNzCQk9IExFRF9GVUxMLAogCS5icmlnaHRuZXNzX3NldAkJPSBxdWJlX2Zyb250X2xlZF9zZXQsCi0JLmRlZmF1bHRfdHJpZ2dlcgk9ICJpZGUtZGlzayIsCisJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNvYmFsdF9xdWJlX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNDMsNyArNDMsNyBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbGVkX3BvcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWxlZF9wb3J0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghbGVkX3BvcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKaW5kZXggZGVmYzIxMi4uNDM4ZDQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYwpAQCAtODQsNyArODQsNyBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbGVkX3BvcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWxlZF9wb3J0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghbGVkX3BvcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1mc2cuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWZzZy5jCmluZGV4IDVmN2M5YzUuLmQxMWQwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWZzZy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWZzZy5jCkBAIC0yMiw2ICsyMiwxMyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAorI2RlZmluZSBGU0dfTEVEX1dMQU5fQklUCTAKKyNkZWZpbmUgRlNHX0xFRF9XQU5fQklUCQkxCisjZGVmaW5lIEZTR19MRURfU0FUQV9CSVQJMgorI2RlZmluZSBGU0dfTEVEX1VTQl9CSVQJCTQKKyNkZWZpbmUgRlNHX0xFRF9SSU5HX0JJVAk1CisjZGVmaW5lIEZTR19MRURfU1lOQ19CSVQJNworCiBzdGF0aWMgc2hvcnQgX19pb21lbSAqbGF0Y2hfYWRkcmVzczsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBsYXRjaF92YWx1ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtbHQzNTkzLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1sdDM1OTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWU0MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtbHQzNTkzLmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBMRURzIGRyaXZlciBmb3IgTFQzNTkzIGNvbnRyb2xsZXJzCisgKgorICogU2VlIHRoZSBkYXRhc2hlZXQgYXQgaHR0cDovL2Nkcy5saW5lYXIuY29tL2RvY3MvRGF0YXNoZWV0LzM1OTNmLnBkZgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqIEJhc2VkIG9uIGxlZHMtZ3Bpby5jLAorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA3IDhEIFRlY2hub2xvZ2llcyBpbmMuCisgKiAgIFJhcGhhZWwgQXNzZW5hdCA8cmFwaEA4ZC5jb20+CisgKiAgIENvcHlyaWdodCAoQykgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKK3N0cnVjdCBsdDM1OTNfbGVkX2RhdGEgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKKwl1bnNpZ25lZCBncGlvOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXU4IG5ld19sZXZlbDsKK307CisKK3N0YXRpYyB2b2lkIGx0MzU5M19sZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHB1bHNlczsKKwlzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhICpsZWRfZGF0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsdDM1OTNfbGVkX2RhdGEsIHdvcmspOworCisJLyoKKwkgKiBUaGUgTFQzNTkzIHJlc2V0cyBpdHMgaW50ZXJuYWwgY3VycmVudCBsZXZlbCByZWdpc3RlciB0byB0aGUgbWF4aW11bQorCSAqIGxldmVsIG9uIHRoZSBmaXJzdCBmYWxsaW5nIGVkZ2Ugb24gdGhlIGNvbnRyb2wgcGluLiBFYWNoIGZvbGxvd2luZworCSAqIGZhbGxpbmcgZWRnZSBkZWNyZWFzZXMgdGhlIGN1cnJlbnQgbGV2ZWwgYnkgNjI1dUEuIFVwIHRvIDMyIHB1bHNlcworCSAqIGNhbiBiZSBzZW50LCBzbyB0aGUgbWF4aW11bSBwb3dlciByZWR1Y3Rpb24gaXMgMjBtQS4KKwkgKiBBZnRlciBhIHRpbWVvdXQgb2YgMTI4dXMsIHRoZSB2YWx1ZSBpcyB0YWtlbiBmcm9tIHRoZSByZWdpc3RlciBhbmQKKwkgKiBhcHBsaWVkIGlzIHRvIHRoZSBvdXRwdXQgZHJpdmVyLgorCSAqLworCisJaWYgKGxlZF9kYXQtPm5ld19sZXZlbCA9PSAwKSB7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGxlZF9kYXQtPmdwaW8sIDApOworCQlyZXR1cm47CisJfQorCisJcHVsc2VzID0gMzIgLSAobGVkX2RhdC0+bmV3X2xldmVsICogMzIpIC8gMjU1OworCisJaWYgKHB1bHNlcyA9PSAwKSB7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGxlZF9kYXQtPmdwaW8sIDApOworCQltZGVsYXkoMSk7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGxlZF9kYXQtPmdwaW8sIDEpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbywgMSk7CisKKwl3aGlsZSAocHVsc2VzLS0pIHsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbywgMCk7CisJCXVkZWxheSgxKTsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbywgMSk7CisJCXVkZWxheSgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGx0MzU5M19sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IGx0MzU5M19sZWRfZGF0YSAqbGVkX2RhdCA9CisJCWNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGx0MzU5M19sZWRfZGF0YSwgY2Rldik7CisKKwlsZWRfZGF0LT5uZXdfbGV2ZWwgPSB2YWx1ZTsKKwlzY2hlZHVsZV93b3JrKCZsZWRfZGF0LT53b3JrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY3JlYXRlX2x0MzU5M19sZWQoY29uc3Qgc3RydWN0IGdwaW9fbGVkICp0ZW1wbGF0ZSwKKwlzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhICpsZWRfZGF0LCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCit7CisJaW50IHJldCwgc3RhdGU7CisKKwkvKiBza2lwIGxlZHMgb24gR1BJT3MgdGhhdCBhcmVuJ3QgYXZhaWxhYmxlICovCisJaWYgKCFncGlvX2lzX3ZhbGlkKHRlbXBsYXRlLT5ncGlvKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogc2tpcHBpbmcgdW5hdmFpbGFibGUgTFQzNTkzIExFRCBhdCBncGlvICVkICglcylcbiIsCisJCQkJS0JVSUxEX01PRE5BTUUsIHRlbXBsYXRlLT5ncGlvLCB0ZW1wbGF0ZS0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGdwaW9fcmVxdWVzdCh0ZW1wbGF0ZS0+Z3BpbywgdGVtcGxhdGUtPm5hbWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbGVkX2RhdC0+Y2Rldi5uYW1lID0gdGVtcGxhdGUtPm5hbWU7CisJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0ZW1wbGF0ZS0+ZGVmYXVsdF90cmlnZ2VyOworCWxlZF9kYXQtPmdwaW8gPSB0ZW1wbGF0ZS0+Z3BpbzsKKworCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBsdDM1OTNfbGVkX3NldDsKKworCXN0YXRlID0gKHRlbXBsYXRlLT5kZWZhdWx0X3N0YXRlID09IExFRFNfR1BJT19ERUZTVEFURV9PTik7CisJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzID0gc3RhdGUgPyBMRURfRlVMTCA6IExFRF9PRkY7CisKKwlpZiAoIXRlbXBsYXRlLT5yZXRhaW5fc3RhdGVfc3VzcGVuZGVkKQorCQlsZWRfZGF0LT5jZGV2LmZsYWdzIHw9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUU7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQobGVkX2RhdC0+Z3Bpbywgc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCUlOSVRfV09SSygmbGVkX2RhdC0+d29yaywgbHQzNTkzX2xlZF93b3JrKTsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihwYXJlbnQsICZsZWRfZGF0LT5jZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBMVDM1OTMgTEVEICclcycgYXQgR1BJTyAlZFxuIiwKKwkJS0JVSUxEX01PRE5BTUUsIHRlbXBsYXRlLT5uYW1lLCB0ZW1wbGF0ZS0+Z3Bpbyk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWdwaW9fZnJlZShsZWRfZGF0LT5ncGlvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfbHQzNTkzX2xlZChzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhICpsZWQpCit7CisJaWYgKCFncGlvX2lzX3ZhbGlkKGxlZC0+Z3BpbykpCisJCXJldHVybjsKKworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmNkZXYpOworCWNhbmNlbF93b3JrX3N5bmMoJmxlZC0+d29yayk7CisJZ3Bpb19mcmVlKGxlZC0+Z3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGx0MzU5M19sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhICpsZWRzX2RhdGE7CisJaW50IGksIHJldCA9IDA7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVCVVNZOworCisJbGVkc19kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGx0MzU5M19sZWRfZGF0YSkgKiBwZGF0YS0+bnVtX2xlZHMsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFsZWRzX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbGVkczsgaSsrKSB7CisJCXJldCA9IGNyZWF0ZV9sdDM1OTNfbGVkKCZwZGF0YS0+bGVkc1tpXSwgJmxlZHNfZGF0YVtpXSwKKwkJCQkgICAgICAmcGRldi0+ZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWRzX2RhdGEpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlmb3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pCisJCWRlbGV0ZV9sdDM1OTNfbGVkKCZsZWRzX2RhdGFbaV0pOworCisJa2ZyZWUobGVkc19kYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGx0MzU5M19sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGx0MzU5M19sZWRfZGF0YSAqbGVkc19kYXRhOworCisJbGVkc19kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9sZWRzOyBpKyspCisJCWRlbGV0ZV9sdDM1OTNfbGVkKCZsZWRzX2RhdGFbaV0pOworCisJa2ZyZWUobGVkc19kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsdDM1OTNfbGVkX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbHQzNTkzX2xlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGx0MzU5M19sZWRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibGVkcy1sdDM1OTMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpsZWRzLWx0MzU5MyIpOworCitzdGF0aWMgaW50IF9faW5pdCBsdDM1OTNfbGVkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZsdDM1OTNfbGVkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsdDM1OTNfbGVkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbHQzNTkzX2xlZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChsdDM1OTNfbGVkX2luaXQpOworbW9kdWxlX2V4aXQobHQzNTkzX2xlZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTEVEIGRyaXZlciBmb3IgTFQzNTkzIGNvbnRyb2xsZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wd20uYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jCmluZGV4IGNkZmRjODcuLjg4YjFkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jCkBAIC0yNyw3ICsyNyw2IEBACiAJc3RydWN0IHB3bV9kZXZpY2UJKnB3bTsKIAl1bnNpZ25lZCBpbnQgCQlhY3RpdmVfbG93OwogCXVuc2lnbmVkIGludAkJcGVyaW9kOwotCXVuc2lnbmVkIGludAkJbWF4X2JyaWdodG5lc3M7CiB9OwogCiBzdGF0aWMgdm9pZCBsZWRfcHdtX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKQEAgLTM1LDcgKzM0LDcgQEAKIHsKIAlzdHJ1Y3QgbGVkX3B3bV9kYXRhICpsZWRfZGF0ID0KIAkJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3B3bV9kYXRhLCBjZGV2KTsKLQl1bnNpZ25lZCBpbnQgbWF4ID0gbGVkX2RhdC0+bWF4X2JyaWdodG5lc3M7CisJdW5zaWduZWQgaW50IG1heCA9IGxlZF9kYXQtPmNkZXYubWF4X2JyaWdodG5lc3M7CiAJdW5zaWduZWQgaW50IHBlcmlvZCA9ICBsZWRfZGF0LT5wZXJpb2Q7CiAKIAlpZiAoYnJpZ2h0bmVzcyA9PSAwKSB7CkBAIC03NywxMCArNzYsMTAgQEAKIAkJbGVkX2RhdC0+Y2Rldi5uYW1lID0gY3VyX2xlZC0+bmFtZTsKIAkJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBjdXJfbGVkLT5kZWZhdWx0X3RyaWdnZXI7CiAJCWxlZF9kYXQtPmFjdGl2ZV9sb3cgPSBjdXJfbGVkLT5hY3RpdmVfbG93OwotCQlsZWRfZGF0LT5tYXhfYnJpZ2h0bmVzcyA9IGN1cl9sZWQtPm1heF9icmlnaHRuZXNzOwogCQlsZWRfZGF0LT5wZXJpb2QgPSBjdXJfbGVkLT5wd21fcGVyaW9kX25zOwogCQlsZWRfZGF0LT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gbGVkX3B3bV9zZXQ7CiAJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CisJCWxlZF9kYXQtPmNkZXYubWF4X2JyaWdodG5lc3MgPSBjdXJfbGVkLT5tYXhfYnJpZ2h0bmVzczsKIAkJbGVkX2RhdC0+Y2Rldi5mbGFncyB8PSBMRURfQ09SRV9TVVNQRU5EUkVTVU1FOwogCiAJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbGVkX2RhdC0+Y2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDBkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIGxlZHMtcmVndWxhdG9yLmMgLSBMRUQgY2xhc3MgZHJpdmVyIGZvciByZWd1bGF0b3IgZHJpdmVuIExFRHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CisgKgorICogSW5zcGlyZWQgYnkgbGVkcy13bTgzNTAgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy1yZWd1bGF0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworI2RlZmluZSB0b19yZWd1bGF0b3JfbGVkKGxlZF9jZGV2KSBcCisJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2xlZCwgY2RldikKKworc3RydWN0IHJlZ3VsYXRvcl9sZWQgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKKwllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlOworCWludCBlbmFibGVkOworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGxlZF9yZWd1bGF0b3JfZ2V0X21heF9icmlnaHRuZXNzKHN0cnVjdCByZWd1bGF0b3IgKnN1cHBseSkKK3sKKwlpbnQgcmV0OworCWludCB2b2x0YWdlID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZShzdXBwbHksIDApOworCisJaWYgKHZvbHRhZ2UgPD0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKiBldmVuIGlmIHJlZ3VsYXRvciBjYW4ndCBjaGFuZ2Ugdm9sdGFnZXMsCisJICogd2Ugc3RpbGwgYXNzdW1lIGl0IGNhbiBjaGFuZ2Ugc3RhdHVzCisJICogYW5kIHRoZSBMRUQgY2FuIGJlIHR1cm5lZCBvbiBhbmQgb2ZmLgorCSAqLworCXJldCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdXBwbHksIHZvbHRhZ2UsIHZvbHRhZ2UpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gMTsKKworCXJldHVybiByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3VwcGx5KTsKK30KKworc3RhdGljIGludCBsZWRfcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnN1cHBseSwKKwkJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCWlmIChicmlnaHRuZXNzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2Uoc3VwcGx5LCBicmlnaHRuZXNzIC0gMSk7Cit9CisKKworc3RhdGljIHZvaWQgcmVndWxhdG9yX2xlZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9sZWQgKmxlZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGxlZC0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShsZWQtPnZjYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIobGVkLT5jZGV2LmRldiwgIkZhaWxlZCB0byBlbmFibGUgdmNjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCWxlZC0+ZW5hYmxlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ3VsYXRvcl9sZWRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2xlZCAqbGVkKQoreworCWludCByZXQ7CisKKwlpZiAoIWxlZC0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUobGVkLT52Y2MpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGxlZC0+Y2Rldi5kZXYsICJGYWlsZWQgdG8gZGlzYWJsZSB2Y2M6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJbGVkLT5lbmFibGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgcmVndWxhdG9yX2xlZF9zZXRfdmFsdWUoc3RydWN0IHJlZ3VsYXRvcl9sZWQgKmxlZCkKK3sKKwlpbnQgdm9sdGFnZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbGVkLT5tdXRleCk7CisKKwlpZiAobGVkLT52YWx1ZSA9PSBMRURfT0ZGKSB7CisJCXJlZ3VsYXRvcl9sZWRfZGlzYWJsZShsZWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobGVkLT5jZGV2Lm1heF9icmlnaHRuZXNzID4gMSkgeworCQl2b2x0YWdlID0gbGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShsZWQtPnZjYywgbGVkLT52YWx1ZSk7CisJCWRldl9kYmcobGVkLT5jZGV2LmRldiwgImJyaWdodG5lc3M6ICVkIHZvbHRhZ2U6ICVkXG4iLAorCQkJCWxlZC0+dmFsdWUsIHZvbHRhZ2UpOworCisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShsZWQtPnZjYywgdm9sdGFnZSwgdm9sdGFnZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIobGVkLT5jZGV2LmRldiwgIkZhaWxlZCB0byBzZXQgdm9sdGFnZSAlZDogJWRcbiIsCisJCQkJdm9sdGFnZSwgcmV0KTsKKwl9CisKKwlyZWd1bGF0b3JfbGVkX2VuYWJsZShsZWQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZWd1bGF0b3JfbGVkICpsZWQ7CisKKwlsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJlZ3VsYXRvcl9sZWQsIHdvcmspOworCXJlZ3VsYXRvcl9sZWRfc2V0X3ZhbHVlKGxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ3VsYXRvcl9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCByZWd1bGF0b3JfbGVkICpsZWQgPSB0b19yZWd1bGF0b3JfbGVkKGxlZF9jZGV2KTsKKworCWxlZC0+dmFsdWUgPSB2YWx1ZTsKKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCByZWd1bGF0b3JfbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGxlZF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2xlZCAqbGVkOworCXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl2Y2MgPSByZWd1bGF0b3JfZ2V0X2V4Y2x1c2l2ZSgmcGRldi0+ZGV2LCAidmxlZCIpOworCWlmIChJU19FUlIodmNjKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IHZjYyBmb3IgJXNcbiIsIHBkYXRhLT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIodmNjKTsKKwl9CisKKwlsZWQgPSBremFsbG9jKHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3ZjYzsKKwl9CisKKwlsZWQtPmNkZXYubWF4X2JyaWdodG5lc3MgPSBsZWRfcmVndWxhdG9yX2dldF9tYXhfYnJpZ2h0bmVzcyh2Y2MpOworCWlmIChwZGF0YS0+YnJpZ2h0bmVzcyA+IGxlZC0+Y2Rldi5tYXhfYnJpZ2h0bmVzcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIGRlZmF1bHQgYnJpZ2h0bmVzcyAlZFxuIiwKKwkJCQlwZGF0YS0+YnJpZ2h0bmVzcyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2xlZDsKKwl9CisJbGVkLT52YWx1ZSA9IHBkYXRhLT5icmlnaHRuZXNzOworCisJbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gcmVndWxhdG9yX2xlZF9icmlnaHRuZXNzX3NldDsKKwlsZWQtPmNkZXYubmFtZSA9IHBkYXRhLT5uYW1lOworCWxlZC0+Y2Rldi5mbGFncyB8PSBMRURfQ09SRV9TVVNQRU5EUkVTVU1FOworCWxlZC0+dmNjID0gdmNjOworCisJbXV0ZXhfaW5pdCgmbGVkLT5tdXRleCk7CisJSU5JVF9XT1JLKCZsZWQtPndvcmssIGxlZF93b3JrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxlZCk7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmxlZC0+Y2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJY2FuY2VsX3dvcmtfc3luYygmbGVkLT53b3JrKTsKKwkJZ290byBlcnJfbGVkOworCX0KKworCS8qIHRvIGV4cG9zZSB0aGUgZGVmYXVsdCB2YWx1ZSB0byB1c2Vyc3BhY2UgKi8KKwlsZWQtPmNkZXYuYnJpZ2h0bmVzcyA9IGxlZC0+dmFsdWU7CisKKwkvKiBTZXQgdGhlIGRlZmF1bHQgbGVkIHN0YXR1cyAqLworCXJlZ3VsYXRvcl9sZWRfc2V0X3ZhbHVlKGxlZCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2xlZDoKKwlrZnJlZShsZWQpOworZXJyX3ZjYzoKKwlyZWd1bGF0b3JfcHV0KHZjYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcmVndWxhdG9yX2xlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2xlZCAqbGVkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2KTsKKwljYW5jZWxfd29ya19zeW5jKCZsZWQtPndvcmspOworCXJlZ3VsYXRvcl9sZWRfZGlzYWJsZShsZWQpOworCXJlZ3VsYXRvcl9wdXQobGVkLT52Y2MpOworCWtmcmVlKGxlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJlZ3VsYXRvcl9sZWRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lICA9ICJsZWRzLXJlZ3VsYXRvciIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSAgPSByZWd1bGF0b3JfbGVkX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChyZWd1bGF0b3JfbGVkX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCByZWd1bGF0b3JfbGVkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyZWd1bGF0b3JfbGVkX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChyZWd1bGF0b3JfbGVkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcmVndWxhdG9yX2xlZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJlZ3VsYXRvcl9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHJlZ3VsYXRvcl9sZWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBkcml2ZW4gTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpsZWRzLXJlZ3VsYXRvciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtc3M0MjAwLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1zczQyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2YwNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtc3M0MjAwLmMKQEAgLTAsMCArMSw1NTYgQEAKKy8qCisgKiBTUzQyMDAtRSBIYXJkd2FyZSBBUEkKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3I6IERhdmUgSGFuc2VuIDxkYXZlQHNyNzEubmV0PgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKK01PRFVMRV9BVVRIT1IoIlJvZG5leSBHaXJvZCA8cmdpcm9kQGNvbmZvY3VzLmNvbT4sIERhdmUgSGFuc2VuIDxkYXZlQHNyNzEubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBOQVMvSG9tZSBTZXJ2ZXIgSUNINyBHUElPIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogSUNINyBMUEMvR1BJTyBQQ0kgQ29uZmlnIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBQTUJBU0UJCTB4MDQwCisjZGVmaW5lIEdQSU9fQkFTRQkweDA0OAorI2RlZmluZSBHUElPX0NUUkwJMHgwNGMKKyNkZWZpbmUgR1BJT19FTgkJMHgwMTAKKworLyoKKyAqIFRoZSBJQ0g3IEdQSU8gcmVnaXN0ZXIgYmxvY2sgaXMgNjQgYnl0ZXMgaW4gc2l6ZS4KKyAqLworI2RlZmluZSBJQ0g3X0dQSU9fU0laRQk2NAorCisvKgorICogRGVmaW5lIHJlZ2lzdGVyIG9mZnNldHMgd2l0aGluIHRoZSBJQ0g3IHJlZ2lzdGVyIGJsb2NrLgorICovCisjZGVmaW5lIEdQSU9fVVNFX1NFTAkweDAwMAorI2RlZmluZSBHUF9JT19TRUwJMHgwMDQKKyNkZWZpbmUgR1BfTFZMCQkweDAwYworI2RlZmluZSBHUE9fQkxJTksJMHgwMTgKKyNkZWZpbmUgR1BJX0lOVgkJMHgwMzAKKyNkZWZpbmUgR1BJT19VU0VfU0VMMgkweDAzNAorI2RlZmluZSBHUF9JT19TRUwyCTB4MDM4CisjZGVmaW5lIEdQX0xWTDIJCTB4MDNjCisKKy8qCisgKiBQQ0kgSUQgb2YgdGhlIEludGVsIElDSDcgTFBDIERldmljZSB3aXRoaW4gd2hpY2ggdGhlIEdQSU8gYmxvY2sgbGl2ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpY2g3X2xwY19wY2lfaWRbXSA9Cit7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMwKSB9LAorCXsgfSAvKiBOVUxMIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWNoN19scGNfcGNpX2lkKTsKKworc3RhdGljIGludCBfX2luaXQgc3M0MjAwX2xlZF9kbWlfY2FsbGJhY2soY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXByX2luZm8oImRldGVjdGVkICclcydcbiIsIGlkLT5pZGVudCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBub2RldGVjdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2RldGVjdCwgbm9kZXRlY3QsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhub2RldGVjdCwgIlNraXAgRE1JLWJhc2VkIGhhcmR3YXJlIGRldGVjdGlvbiIpOworCisvKgorICogc3RydWN0IG5hc19sZWRfd2hpdGVsaXN0IC0gTGlzdCBvZiBrbm93biBnb29kIG1vZGVscworICoKKyAqIENvbnRhaW5zIHRoZSBrbm93biBnb29kIG1vZGVscyB0aGlzIGRyaXZlciBpcyBjb21wYXRpYmxlIHdpdGguCisgKiBXaGVuIGFkZGluZyBhIG5ldyBtb2RlbCB0cnkgdG8gYmUgYXMgc3RyaWN0IGFzIHBvc3NpYmxlLiBUaGlzCisgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBrZWVwIHRoZSBmYWxzZSBwb3NpdGl2ZXMgKHRoZSBtb2RlbCBpcworICogZGV0ZWN0ZWQgYXMgd29ya2luZywgYnV0IGluIHJlYWxpdHkgaXQgaXMgbm90KSBhcyBsb3cgYXMKKyAqIHBvc3NpYmxlLgorICovCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBuYXNfbGVkX3doaXRlbGlzdFtdID0geworCXsKKwkJLmNhbGxiYWNrID0gc3M0MjAwX2xlZF9kbWlfY2FsbGJhY2ssCisJCS5pZGVudCA9ICJJbnRlbCBTUzQyMDAtRSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSW50ZWwiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU1M0MjAwLUUiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMS4wMC4wMCIpCisJCX0KKwl9LAorfTsKKworLyoKKyAqIEJhc2UgSS9PIGFkZHJlc3MgYXNzaWduZWQgdG8gdGhlIFBvd2VyIE1hbmFnZW1lbnQgcmVnaXN0ZXIgYmxvY2sKKyAqLworc3RhdGljIHUzMiBnX3BtX2lvX2Jhc2U7CisKKy8qCisgKiBCYXNlIEkvTyBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBJQ0g3IEdQSU8gcmVnaXN0ZXIgYmxvY2sKKyAqLworc3RhdGljIHUzMiBuYXNfZ3Bpb19pb19iYXNlOworCisvKgorICogV2hlbiB3ZSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXIgYSByZWdpb24sIHdlIGFyZSByZXR1cm5lZCBhIHJlc291cmNlLgorICogV2UgdXNlIHRoZXNlIHRvIGlkZW50aWZ5IHdoaWNoIHJlZ2lvbnMgd2UgbmVlZCB0byByZWxlYXNlIG9uIG91ciB3YXkKKyAqIGJhY2sgb3V0LgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpncF9ncGlvX3Jlc291cmNlOworCitzdHJ1Y3QgbmFzZ3Bpb19sZWQgeworCWNoYXIgKm5hbWU7CisJdTMyIGdwaW9fYml0OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Cit9OworCisvKgorICogZ3Bpb19iaXQocykgYXJlIHRoZSBJQ0g3IEdQSU8gYml0IGFzc2lnbm1lbnRzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmFzZ3Bpb19sZWQgbmFzZ3Bpb19sZWRzW10gPSB7CisJeyAubmFtZSA9ICJoZGQxOmJsdWU6c2F0YSIsCS5ncGlvX2JpdCA9IDAgfSwKKwl7IC5uYW1lID0gImhkZDE6YW1iZXI6c2F0YSIsCS5ncGlvX2JpdCA9IDEgfSwKKwl7IC5uYW1lID0gImhkZDI6Ymx1ZTpzYXRhIiwJLmdwaW9fYml0ID0gMiB9LAorCXsgLm5hbWUgPSAiaGRkMjphbWJlcjpzYXRhIiwJLmdwaW9fYml0ID0gMyB9LAorCXsgLm5hbWUgPSAiaGRkMzpibHVlOnNhdGEiLAkuZ3Bpb19iaXQgPSA0IH0sCisJeyAubmFtZSA9ICJoZGQzOmFtYmVyOnNhdGEiLAkuZ3Bpb19iaXQgPSA1IH0sCisJeyAubmFtZSA9ICJoZGQ0OmJsdWU6c2F0YSIsCS5ncGlvX2JpdCA9IDYgfSwKKwl7IC5uYW1lID0gImhkZDQ6YW1iZXI6c2F0YSIsCS5ncGlvX2JpdCA9IDcgfSwKKwl7IC5uYW1lID0gInBvd2VyOmJsdWU6cG93ZXIiLAkuZ3Bpb19iaXQgPSAyN30sCisJeyAubmFtZSA9ICJwb3dlcjphbWJlcjpwb3dlciIsICAuZ3Bpb19iaXQgPSAyOH0sCit9OworCisjZGVmaW5lIE5BU19SRUNPVkVSWQkweDAwMDAwNDAwCS8qIEdQSU8xMCAqLworCitzdGF0aWMgc3RydWN0IG5hc2dwaW9fbGVkICoKK2xlZF9jbGFzc2Rldl90b19uYXNncGlvX2xlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgbmFzZ3Bpb19sZWQsIGxlZF9jZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBuYXNncGlvX2xlZCAqZ2V0X2xlZF9uYW1lZChjaGFyICpuYW1lKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hc2dwaW9fbGVkcyk7IGkrKykgeworCQlpZiAoc3RyY21wKG5hc2dwaW9fbGVkc1tpXS5uYW1lLCBuYW1lKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gJm5hc2dwaW9fbGVkc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGlzIHByb3RlY3RzIGFjY2VzcyB0byB0aGUgZ3BpbyBwb3J0cy4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhuYXNncGlvX2dwaW9fbG9jayk7CisKKy8qCisgKiBUaGVyZSBhcmUgdHdvIGdwaW8gcG9ydHMsIG9uZSBmb3IgYmxpbmtpbmcgYW5kIHRoZSBvdGhlcgorICogZm9yIHBvd2VyLiAgQHBvcnQgdGVsbHMgdXMgaWYgd2UncmUgZG9pbmcgYmxpbmtpbmcgb3IKKyAqIHBvd2VyIGNvbnRyb2wuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBuYXNncGlvX2dwaW9fbG9jaworICovCitzdGF0aWMgdm9pZCBfX25hc2dwaW9fbGVkX3NldF9hdHRyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgIHUzMiBwb3J0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IG5hc2dwaW9fbGVkICpsZWQgPSBsZWRfY2xhc3NkZXZfdG9fbmFzZ3Bpb19sZWQobGVkX2NkZXYpOworCXUzMiBncGlvX291dDsKKworCWdwaW9fb3V0ID0gaW5sKG5hc19ncGlvX2lvX2Jhc2UgKyBwb3J0KTsKKwlpZiAodmFsdWUpCisJCWdwaW9fb3V0IHw9ICgxPDxsZWQtPmdwaW9fYml0KTsKKwllbHNlCisJCWdwaW9fb3V0ICY9IH4oMTw8bGVkLT5ncGlvX2JpdCk7CisKKwlvdXRsKGdwaW9fb3V0LCBuYXNfZ3Bpb19pb19iYXNlICsgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hc2dwaW9fbGVkX3NldF9hdHRyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSB1MzIgcG9ydCwgdTMyIHZhbHVlKQoreworCXNwaW5fbG9jaygmbmFzZ3Bpb19ncGlvX2xvY2spOworCV9fbmFzZ3Bpb19sZWRfc2V0X2F0dHIobGVkX2NkZXYsIHBvcnQsIHZhbHVlKTsKKwlzcGluX3VubG9jaygmbmFzZ3Bpb19ncGlvX2xvY2spOworfQorCit1MzIgbmFzZ3Bpb19sZWRfZ2V0X2F0dHIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHUzMiBwb3J0KQoreworCXN0cnVjdCBuYXNncGlvX2xlZCAqbGVkID0gbGVkX2NsYXNzZGV2X3RvX25hc2dwaW9fbGVkKGxlZF9jZGV2KTsKKwl1MzIgZ3Bpb19pbjsKKworCXNwaW5fbG9jaygmbmFzZ3Bpb19ncGlvX2xvY2spOworCWdwaW9faW4gPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIHBvcnQpOworCXNwaW5fdW5sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7CisJaWYgKGdwaW9faW4gJiAoMTw8bGVkLT5ncGlvX2JpdCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhlcmUgaXMgYWN0dWFsIGJyaWdodG5lc3MgY29udHJvbCBpbiB0aGUgaGFyZHdhcmUsCisgKiBidXQgaXQgaXMgdmlhIHNtYnVzIGNvbW1hbmRzIGFuZCBub3QgaW1wbGVtZW50ZWQKKyAqIGluIHRoaXMgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZCBuYXNncGlvX2xlZF9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCQkgICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXUzMiBzZXR0aW5nID0gMDsKKwlpZiAoYnJpZ2h0bmVzcyA+PSBMRURfSEFMRikKKwkJc2V0dGluZyA9IDE7CisJLyoKKwkgKiBIb2xkIHRoZSBsb2NrIGFjcm9zcyBib3RoIG9wZXJhdGlvbnMuICBUaGlzIGVuc3VyZXMKKwkgKiBjb25zaXN0ZW5jeSBzbyB0aGF0IGJvdGggdGhlICJ0dXJuIG9mZiBibGlua2luZyIKKwkgKiBhbmQgInR1cm4gbGlnaHQgb2ZmIiBvcGVyYXRpb25zIGNvbXBsZXRlIGFzIGEgc2V0LgorCSAqLworCXNwaW5fbG9jaygmbmFzZ3Bpb19ncGlvX2xvY2spOworCS8qCisJICogTEVEIGNsYXNzIGRvY3VtZW50YXRpb24gYXNrcyB0aGF0IHBhc3QgYmxpbmsgc3RhdGUKKwkgKiBiZSBkaXNhYmxlZCB3aGVuIGJyaWdodG5lc3MgaXMgdHVybmVkIHRvIHplcm8uCisJICovCisJaWYgKGJyaWdodG5lc3MgPT0gMCkKKwkJX19uYXNncGlvX2xlZF9zZXRfYXR0cihsZWRfY2RldiwgR1BPX0JMSU5LLCAwKTsKKwlfX25hc2dwaW9fbGVkX3NldF9hdHRyKGxlZF9jZGV2LCBHUF9MVkwsIHNldHRpbmcpOworCXNwaW5fdW5sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgbmFzZ3Bpb19sZWRfc2V0X2JsaW5rKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSB1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKKwkJCQkgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQoreworCXUzMiBzZXR0aW5nID0gMTsKKwlpZiAoISgqZGVsYXlfb24gPT0gMCAmJiAqZGVsYXlfb2ZmID09IDApICYmCisJICAgICEoKmRlbGF5X29uID09IDUwMCAmJiAqZGVsYXlfb2ZmID09IDUwMCkpCisJCXJldHVybiAtRUlOVkFMOworCS8qCisJICogVGhlc2UgYXJlIHZlcnkgYXBwcm94aW1hdGUuCisJICovCisJKmRlbGF5X29uID0gNTAwOworCSpkZWxheV9vZmYgPSA1MDA7CisKKwluYXNncGlvX2xlZF9zZXRfYXR0cihsZWRfY2RldiwgR1BPX0JMSU5LLCBzZXR0aW5nKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBJQ0g3IEdQSU8gcmVnaXN0ZXJzIGZvciBOQVMgdXNhZ2UuICBUaGUgQklPUyBzaG91bGQgaGF2ZQorICogYWxyZWFkeSB0YWtlbiBjYXJlIG9mIHRoaXMsIGJ1dCB3ZSB3aWxsIGRvIHNvIGluIGEgbm9uIGRlc3RydWN0aXZlIG1hbm5lcgorICogc28gdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCB3aGV0aGVyIHRoZSBCSU9TIGRpZCBpdCBvciBub3QuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGljaDdfZ3Bpb19pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwl1MzIgY29uZmlnX2RhdGEgPSAwOworCXUzMiBhbGxfbmFzX2xlZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYXNncGlvX2xlZHMpOyBpKyspCisJCWFsbF9uYXNfbGVkIHw9ICgxPDxuYXNncGlvX2xlZHNbaV0uZ3Bpb19iaXQpOworCisJc3Bpbl9sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhlIEdQSU8gbGluZXMgdXNlZCBieSB0aGUgTkFTIGJveCwKKwkgKiBzbyB3ZSB3aWxsIHJlYWQgdGhlIGN1cnJlbnQgVXNlIFNlbGVjdGlvbiBhbmQgYWRkIG91ciB1c2FnZQorCSAqIHRvIGl0LiAgVGhpcyBzaG91bGQgYmUgYmVuaWduIHdpdGggcmVnYXJkIHRvIHRoZSBvcmlnaW5hbAorCSAqIEJJT1MgY29uZmlndXJhdGlvbi4KKwkgKi8KKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BJT19VU0VfU0VMKTsKKwlkZXZfZGJnKGRldiwgIjogRGF0YSByZWFkIGZyb20gR1BJT19VU0VfU0VMID0gMHglMDh4XG4iLCBjb25maWdfZGF0YSk7CisJY29uZmlnX2RhdGEgfD0gYWxsX25hc19sZWQgKyBOQVNfUkVDT1ZFUlk7CisJb3V0bChjb25maWdfZGF0YSwgbmFzX2dwaW9faW9fYmFzZSArIEdQSU9fVVNFX1NFTCk7CisJY29uZmlnX2RhdGEgPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIEdQSU9fVVNFX1NFTCk7CisJZGV2X2RiZyhkZXYsICI6IEdQSU9fVVNFX1NFTCA9IDB4JTA4eFxuXG4iLCBjb25maWdfZGF0YSk7CisKKwkvKgorCSAqIFRoZSBMRUQgR1BJTyBvdXRwdXRzIG5lZWQgdG8gYmUgY29uZmlndXJlZCBmb3Igb3V0cHV0LCBzbyB3ZQorCSAqIHdpbGwgZW5zdXJlIHRoYXQgYWxsIExFRCBsaW5lcyBhcmUgY2xlYXJlZCBmb3Igb3V0cHV0IGFuZCB0aGUKKwkgKiBSRUNPVkVSWSBsaW5lIHJlYWR5IGZvciBpbnB1dC4gIFRoaXMgdG9vIHNob3VsZCBiZSBiZW5pZ24gd2l0aAorCSAqIHJlZ2FyZCB0byBCSU9TIGNvbmZpZ3VyYXRpb24uCisJICovCisJY29uZmlnX2RhdGEgPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIEdQX0lPX1NFTCk7CisJZGV2X2RiZyhkZXYsICI6IERhdGEgcmVhZCBmcm9tIEdQX0lPX1NFTCA9IDB4JTA4eFxuIiwKKwkJCQkJY29uZmlnX2RhdGEpOworCWNvbmZpZ19kYXRhICY9IH5hbGxfbmFzX2xlZDsKKwljb25maWdfZGF0YSB8PSBOQVNfUkVDT1ZFUlk7CisJb3V0bChjb25maWdfZGF0YSwgbmFzX2dwaW9faW9fYmFzZSArIEdQX0lPX1NFTCk7CisJY29uZmlnX2RhdGEgPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIEdQX0lPX1NFTCk7CisJZGV2X2RiZyhkZXYsICI6IEdQX0lPX1NFTCA9IDB4JTA4eFxuIiwgY29uZmlnX2RhdGEpOworCisJLyoKKwkgKiBJbiBvdXIgZmluYWwgc3lzdGVtLCB0aGUgQklPUyB3aWxsIGluaXRpYWxpemUgdGhlIHN0YXRlIG9mIGFsbAorCSAqIG9mIHRoZSBMRURzLiAgRm9yIG5vdywgd2UgdHVybiB0aGVtIGFsbCBvZmYgKG9yIExvdykuCisJICovCisJY29uZmlnX2RhdGEgPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIEdQX0xWTCk7CisJZGV2X2RiZyhkZXYsICI6IERhdGEgcmVhZCBmcm9tIEdQX0xWTCA9IDB4JTA4eFxuIiwgY29uZmlnX2RhdGEpOworCS8qCisJICogSW4gb3VyIGZpbmFsIHN5c3RlbSwgdGhlIEJJT1Mgd2lsbCBpbml0aWFsaXplIHRoZSBibGluayBzdGF0ZSBvZiBhbGwKKwkgKiBvZiB0aGUgTEVEcy4gIEZvciBub3csIHdlIHR1cm4gYmxpbmsgb2ZmIGZvciBhbGwgb2YgdGhlbS4KKwkgKi8KKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BPX0JMSU5LKTsKKwlkZXZfZGJnKGRldiwgIjogRGF0YSByZWFkIGZyb20gR1BPX0JMSU5LID0gMHglMDh4XG4iLCBjb25maWdfZGF0YSk7CisKKwkvKgorCSAqIEF0IHRoaXMgbW9tZW50LCBJIGFtIHVuc3VyZSBpZiBhbnl0aGluZyBuZWVkcyB0byBoYXBwZW4gd2l0aCBHUElfSU5WCisJICovCisJY29uZmlnX2RhdGEgPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIEdQSV9JTlYpOworCWRldl9kYmcoZGV2LCAiOiBEYXRhIHJlYWQgZnJvbSBHUElfSU5WID0gMHglMDh4XG4iLCBjb25maWdfZGF0YSk7CisKKwlzcGluX3VubG9jaygmbmFzZ3Bpb19ncGlvX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpY2g3X2xwY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKgorCSAqIElmIHdlIHdlcmUgZ2l2ZW4gZXhjbHVzaXZlIHVzZSBvZiB0aGUgR1BJTworCSAqIEkvTyBBZGRyZXNzIHJhbmdlLCB3ZSBtdXN0IHJldHVybiBpdC4KKwkgKi8KKwlpZiAoZ3BfZ3Bpb19yZXNvdXJjZSkgeworCQlkZXZfZGJnKGRldiwgIjogUmVsZWFzaW5nIEdQSU8gSS9PIGFkZHJlc3Nlc1xuIik7CisJCXJlbGVhc2VfcmVnaW9uKG5hc19ncGlvX2lvX2Jhc2UsIElDSDdfR1BJT19TSVpFKTsKKwkJZ3BfZ3Bpb19yZXNvdXJjZSA9IE5VTEw7CisJfQorfQorCisvKgorICogVGhlIE9TIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlIExQQyBvZiB0aGUgSW50ZWwgSUNINyBTb3V0aGJyaWRnZSBpcyBwcmVzZW50CisgKiBzbyB3ZSBjYW4gcmV0cml2ZSB0aGUgcmVxdWlyZWQgb3BlcmF0aW9uYWwgaW5mb3JtYXRpb24gYW5kIHByZXBhcmUgdGhlIEdQSU8uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmFzX2dwaW9fcGNpX2RldjsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGljaDdfbHBjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBnYyA9IDA7CisKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwluYXNfZ3Bpb19wY2lfZGV2ID0gZGV2OworCXN0YXR1cyA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBNQkFTRSwgJmdfcG1faW9fYmFzZSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CisJZ19wbV9pb19iYXNlICY9IDB4MDAwMDBmZjgwOworCisJc3RhdHVzID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgR1BJT19DVFJMLCAmZ2MpOworCWlmICghKEdQSU9fRU4gJiBnYykpIHsKKwkJc3RhdHVzID0gLUVFWElTVDsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICAgIkVSUk9SOiBUaGUgTFBDIEdQSU8gQmxvY2sgaGFzIG5vdCBiZWVuIGVuYWJsZWQuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3RhdHVzID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgR1BJT19CQVNFLCAmbmFzX2dwaW9faW9fYmFzZSk7CisJaWYgKDAgPiBzdGF0dXMpIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgR1BJT0JBU0UuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWRldl9kYmcoJmRldi0+ZGV2LCAiOiBHUElPQkFTRSA9IDB4JTA4eFxuIiwgbmFzX2dwaW9faW9fYmFzZSk7CisJbmFzX2dwaW9faW9fYmFzZSAmPSAweDAwMDAwZmZjMDsKKworCS8qCisJICogSW5zdXJlIHRoYXQgd2UgaGF2ZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBHUElPIEkvTyBhZGRyZXNzIHJhbmdlLgorCSAqLworCWdwX2dwaW9fcmVzb3VyY2UgPSByZXF1ZXN0X3JlZ2lvbihuYXNfZ3Bpb19pb19iYXNlLCBJQ0g3X0dQSU9fU0laRSwKKwkJCQkJICBLQlVJTERfTU9ETkFNRSk7CisJaWYgKE5VTEwgPT0gZ3BfZ3Bpb19yZXNvdXJjZSkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkgIkVSUk9SIFVuYWJsZSB0byByZWdpc3RlciBHUElPIEkvTyBhZGRyZXNzZXMuXG4iKTsKKwkJc3RhdHVzID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgR1BJTyBmb3IgTkFTL0hvbWUgU2VydmVyIFVzZQorCSAqLworCWljaDdfZ3Bpb19pbml0KCZkZXYtPmRldik7CisKK291dDoKKwlpZiAoc3RhdHVzKSB7CisJCWljaDdfbHBjX2NsZWFudXAoJmRldi0+ZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGljaDdfbHBjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWljaDdfbHBjX2NsZWFudXAoJmRldi0+ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK30KKworLyoKKyAqIHBjaV9kcml2ZXIgc3RydWN0dXJlIHBhc3NlZCB0byB0aGUgUENJIG1vZHVsZXMKKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5hc19ncGlvX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkuaWRfdGFibGUgPSBpY2g3X2xwY19wY2lfaWQsCisJLnByb2JlID0gaWNoN19scGNfcHJvYmUsCisJLnJlbW92ZSA9IGljaDdfbHBjX3JlbW92ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpnZXRfY2xhc3NkZXZfZm9yX2xlZF9ucihpbnQgbnIpCit7CisJc3RydWN0IG5hc2dwaW9fbGVkICpuYXNfbGVkID0gJm5hc2dwaW9fbGVkc1tucl07CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gJm5hc19sZWQtPmxlZF9jZGV2OworCXJldHVybiBsZWQ7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3Bvd2VyX2xpZ2h0X2FtYmVyX25vYmxpbmsodm9pZCkKK3sKKwlzdHJ1Y3QgbmFzZ3Bpb19sZWQgKmFtYmVyID0gZ2V0X2xlZF9uYW1lZCgicG93ZXI6YW1iZXI6cG93ZXIiKTsKKwlzdHJ1Y3QgbmFzZ3Bpb19sZWQgKmJsdWUgPSBnZXRfbGVkX25hbWVkKCJwb3dlcjpibHVlOnBvd2VyIik7CisKKwlpZiAoIWFtYmVyIHx8ICFibHVlKQorCQlyZXR1cm47CisJLyoKKwkgKiBMRURfT0ZGIGltcGxpZXMgZGlzYWJsaW5nIGZ1dHVyZSBibGlua2luZworCSAqLworCXByX2RlYnVnKCJzZXR0aW5nIGJsdWUgb2ZmIGFuZCBhbWJlciBvblxuIik7CisKKwluYXNncGlvX2xlZF9zZXRfYnJpZ2h0bmVzcygmYmx1ZS0+bGVkX2NkZXYsIExFRF9PRkYpOworCW5hc2dwaW9fbGVkX3NldF9icmlnaHRuZXNzKCZhbWJlci0+bGVkX2NkZXYsIExFRF9GVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbmFzX2xlZF9ibGlua19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGJsaW5raW5nID0gMDsKKwlpZiAobmFzZ3Bpb19sZWRfZ2V0X2F0dHIobGVkLCBHUE9fQkxJTkspKQorCQlibGlua2luZyA9IDE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJsaW5raW5nKTsKK30KKworc3RhdGljIHNzaXplX3QgbmFzX2xlZF9ibGlua19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgYmxpbmtfc3RhdGU7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmYmxpbmtfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwluYXNncGlvX2xlZF9zZXRfYXR0cihsZWQsIEdQT19CTElOSywgYmxpbmtfc3RhdGUpOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihibGluaywgMDY0NCwgbmFzX2xlZF9ibGlua19zaG93LCBuYXNfbGVkX2JsaW5rX3N0b3JlKTsKKworc3RhdGljIGludCByZWdpc3Rlcl9uYXNncGlvX2xlZChpbnQgbGVkX25yKQoreworCWludCByZXQ7CisJc3RydWN0IG5hc2dwaW9fbGVkICpuYXNfbGVkID0gJm5hc2dwaW9fbGVkc1tsZWRfbnJdOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCA9IGdldF9jbGFzc2Rldl9mb3JfbGVkX25yKGxlZF9ucik7CisKKwlsZWQtPm5hbWUgPSBuYXNfbGVkLT5uYW1lOworCWxlZC0+YnJpZ2h0bmVzcyA9IExFRF9PRkY7CisJaWYgKG5hc2dwaW9fbGVkX2dldF9hdHRyKGxlZCwgR1BfTFZMKSkKKwkJbGVkLT5icmlnaHRuZXNzID0gTEVEX0ZVTEw7CisJbGVkLT5icmlnaHRuZXNzX3NldCA9IG5hc2dwaW9fbGVkX3NldF9icmlnaHRuZXNzOworCWxlZC0+Ymxpbmtfc2V0ID0gbmFzZ3Bpb19sZWRfc2V0X2JsaW5rOworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmbmFzX2dwaW9fcGNpX2Rldi0+ZGV2LCBsZWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxlZC0+ZGV2LCAmZGV2X2F0dHJfYmxpbmspOworCWlmIChyZXQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGxlZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uYXNncGlvX2xlZChpbnQgbGVkX25yKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCA9IGdldF9jbGFzc2Rldl9mb3JfbGVkX25yKGxlZF9ucik7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIobGVkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobGVkLT5kZXYsICZkZXZfYXR0cl9ibGluayk7Cit9CisvKgorICogbW9kdWxlIGxvYWQvaW5pdGlhbGl6YXRpb24KKyAqLworc3RhdGljIGludCBfX2luaXQgbmFzX2dwaW9faW5pdCh2b2lkKQoreworCWludCBpOworCWludCByZXQgPSAwOworCWludCBucl9kZXZpY2VzID0gMDsKKworCW5yX2RldmljZXMgPSBkbWlfY2hlY2tfc3lzdGVtKG5hc19sZWRfd2hpdGVsaXN0KTsKKwlpZiAobm9kZXRlY3QpIHsKKwkJcHJfaW5mbygic2tpcHBpbmcgaGFyZHdhcmUgYXV0b2RldGVjdGlvblxuIik7CisJCXByX2luZm8oIlBsZWFzZSBzZW5kICdkbWlkZWNvZGUnIG91dHB1dCB0byBkYXZlQHNyNzEubmV0XG4iKTsKKwkJbnJfZGV2aWNlcysrOworCX0KKworCWlmIChucl9kZXZpY2VzIDw9IDApIHsKKwkJcHJfaW5mbygibm8gTEVEIGRldmljZXMgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcl9pbmZvKCJyZWdpc3RlcmluZyBQQ0kgZHJpdmVyXG4iKTsKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuYXNfZ3Bpb19wY2lfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hc2dwaW9fbGVkcyk7IGkrKykgeworCQlyZXQgPSByZWdpc3Rlcl9uYXNncGlvX2xlZChpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisJLyoKKwkgKiBXaGVuIHRoZSBzeXN0ZW0gcG93ZXJzIG9uLCB0aGUgQklPUyBsZWF2ZXMgdGhlIHBvd2VyCisJICogbGlnaHQgYmx1ZSBhbmQgYmxpbmtpbmcuICBUaGlzIHdpbGwgdHVybiBpdCBzb2xpZAorCSAqIGFtYmVyIG9uY2UgdGhlIGRyaXZlciBpcyBsb2FkZWQuCisJICovCisJc2V0X3Bvd2VyX2xpZ2h0X2FtYmVyX25vYmxpbmsoKTsKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJZm9yICg7IGkgPj0gMDsgaS0tKQorCQl1bnJlZ2lzdGVyX25hc2dwaW9fbGVkKGkpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmFzX2dwaW9fcGNpX2RyaXZlcik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG1vZHVsZSB1bmxvYWQKKyAqLworc3RhdGljIHZvaWQgX19leGl0IG5hc19ncGlvX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKwlwcl9pbmZvKCJVbnJlZ2lzdGVyaW5nIGRyaXZlclxuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFzZ3Bpb19sZWRzKTsgaSsrKQorCQl1bnJlZ2lzdGVyX25hc2dwaW9fbGVkKGkpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmFzX2dwaW9fcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG5hc19ncGlvX2luaXQpOworbW9kdWxlX2V4aXQobmFzX2dwaW9fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy10aW1lci5jIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYwppbmRleCAzYjgzNDA2Li4zOGIzMzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy10aW1lci5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmYWZ0ZXIsIDEwKTsKIAlzaXplX3QgY291bnQgPSBhZnRlciAtIGJ1ZjsKIAotCWlmICgqYWZ0ZXIgJiYgaXNzcGFjZSgqYWZ0ZXIpKQorCWlmIChpc3NwYWNlKCphZnRlcikpCiAJCWNvdW50Kys7CiAKIAlpZiAoY291bnQgPT0gc2l6ZSkgewpAQCAtMTI3LDcgKzEyNyw3IEBACiAJdW5zaWduZWQgbG9uZyBzdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmFmdGVyLCAxMCk7CiAJc2l6ZV90IGNvdW50ID0gYWZ0ZXIgLSBidWY7CiAKLQlpZiAoKmFmdGVyICYmIGlzc3BhY2UoKmFmdGVyKSkKKwlpZiAoaXNzcGFjZSgqYWZ0ZXIpKQogCQljb3VudCsrOwogCiAJaWYgKGNvdW50ID09IHNpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMgYi9kcml2ZXJzL2xndWVzdC94ODYvY29yZS5jCmluZGV4IDZhZTM4ODguLmZiMmI3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QveDg2L2NvcmUuYwpAQCAtNjksNyArNjksNyBAQAogCQkgIChTV0lUQ0hFUl9BRERSICsgU0hBUkVEX1NXSVRDSEVSX1BBR0VTKlBBR0VfU0laRSkpW2NwdV0pOwogfQogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxnX2NwdSAqLCBsYXN0X2NwdSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxnX2NwdSAqLCBsZ19sYXN0X2NwdSk7CiAKIC8qUzowMTAKICAqIFdlIGFwcHJvYWNoIHRoZSBTd2l0Y2hlci4KQEAgLTkwLDggKzkwLDggQEAKIAkgKiBtZWFud2hpbGUpLiAgSWYgdGhhdCdzIG5vdCB0aGUgY2FzZSwgd2UgcHJldGVuZCBldmVyeXRoaW5nIGluIHRoZQogCSAqIEd1ZXN0IGhhcyBjaGFuZ2VkLgogCSAqLwotCWlmIChfX2dldF9jcHVfdmFyKGxhc3RfY3B1KSAhPSBjcHUgfHwgY3B1LT5sYXN0X3BhZ2VzICE9IHBhZ2VzKSB7Ci0JCV9fZ2V0X2NwdV92YXIobGFzdF9jcHUpID0gY3B1OworCWlmIChfX2dldF9jcHVfdmFyKGxnX2xhc3RfY3B1KSAhPSBjcHUgfHwgY3B1LT5sYXN0X3BhZ2VzICE9IHBhZ2VzKSB7CisJCV9fZ2V0X2NwdV92YXIobGdfbGFzdF9jcHUpID0gY3B1OwogCQljcHUtPmxhc3RfcGFnZXMgPSBwYWdlczsKIAkJY3B1LT5jaGFuZ2VkID0gQ0hBTkdFRF9BTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCmluZGV4IDU4OGE1YjAuLjI2YTMwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKQEAgLTM3OSw2ICszNzksMTEgQEAKIAlkZXYtPm9mZGV2LmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAJZGV2LT5vZmRldi5kZXYuYnVzID0gJm1hY2lvX2J1c190eXBlOwogCWRldi0+b2ZkZXYuZGV2LnJlbGVhc2UgPSBtYWNpb19yZWxlYXNlX2RldjsKKwlkZXYtPm9mZGV2LmRldi5kbWFfcGFybXMgPSAmZGV2LT5kbWFfcGFybXM7CisKKwkvKiBTdGFuZGFyZCBETUEgcGFyZW1ldGVycyAqLworCWRtYV9zZXRfbWF4X3NlZ19zaXplKCZkZXYtPm9mZGV2LmRldiwgNjU1MzYpOworCWRtYV9zZXRfc2VnX2JvdW5kYXJ5KCZkZXYtPm9mZGV2LmRldiwgMHhmZmZmZmZmZik7CiAKICNpZmRlZiBDT05GSUdfUENJCiAJLyogU2V0IHRoZSBETUEgb3BzIHRvIHRoZSBvbmVzIGZyb20gdGhlIFBDSSBkZXZpY2UsIHRoaXMgY291bGQgYmUKQEAgLTUzOCw2ICs1NDMsNDIgQEAKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogfQogCisvKiBNYW5hZ2VkIE1hY0lPIHJlc291cmNlcyAqLworc3RydWN0IG1hY2lvX2RldnJlcyB7CisJdTMyCXJlc19tYXNrOworfTsKKworc3RhdGljIHZvaWQgbWFjaW9tX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZ2VuZGV2LCB2b2lkICpyZXMpCit7CisJc3RydWN0IG1hY2lvX2RldiAqZGV2ID0gdG9fbWFjaW9fZGV2aWNlKGdlbmRldik7CisJc3RydWN0IG1hY2lvX2RldnJlcyAqZHIgPSByZXM7CisJaW50IGksIG1heDsKKworCW1heCA9IG1pbihkZXYtPm5fcmVzb3VyY2VzLCAzMik7CisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCWlmIChkci0+cmVzX21hc2sgJiAoMSA8PCBpKSkKKwkJCW1hY2lvX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBpKTsKKwl9Cit9CisKK2ludCBtYWNpb19lbmFibGVfZGV2cmVzKHN0cnVjdCBtYWNpb19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWFjaW9fZGV2cmVzICpkcjsKKworCWRyID0gZGV2cmVzX2ZpbmQoJmRldi0+b2ZkZXYuZGV2LCBtYWNpb21fcmVsZWFzZSwgTlVMTCwgTlVMTCk7CisJaWYgKCFkcikgeworCQlkciA9IGRldnJlc19hbGxvYyhtYWNpb21fcmVsZWFzZSwgc2l6ZW9mKCpkciksIEdGUF9LRVJORUwpOworCQlpZiAoIWRyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiBkZXZyZXNfZ2V0KCZkZXYtPm9mZGV2LmRldiwgZHIsIE5VTEwsIE5VTEwpICE9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFjaW9fZGV2cmVzICogZmluZF9tYWNpb19kcihzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYpCit7CisJcmV0dXJuIGRldnJlc19maW5kKCZkZXYtPm9mZGV2LmRldiwgbWFjaW9tX3JlbGVhc2UsIE5VTEwsIE5VTEwpOworfQorCiAvKioKICAqCW1hY2lvX3JlcXVlc3RfcmVzb3VyY2UgLSBSZXF1ZXN0IGFuIE1NSU8gcmVzb3VyY2UKICAqIAlAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgaG9sZGluZyB0aGUgcmVzb3VyY2UKQEAgLTU1NSw2ICs1OTYsOCBAQAogaW50IG1hY2lvX3JlcXVlc3RfcmVzb3VyY2Uoc3RydWN0IG1hY2lvX2RldiAqZGV2LCBpbnQgcmVzb3VyY2Vfbm8sCiAJCQkgICBjb25zdCBjaGFyICpuYW1lKQogeworCXN0cnVjdCBtYWNpb19kZXZyZXMgKmRyID0gZmluZF9tYWNpb19kcihkZXYpOworCiAJaWYgKG1hY2lvX3Jlc291cmNlX2xlbihkZXYsIHJlc291cmNlX25vKSA9PSAwKQogCQlyZXR1cm4gMDsKIAkJCkBAIC01NjIsNiArNjA1LDkgQEAKIAkJCQltYWNpb19yZXNvdXJjZV9sZW4oZGV2LCByZXNvdXJjZV9ubyksCiAJCQkJbmFtZSkpCiAJCWdvdG8gZXJyX291dDsKKworCWlmIChkciAmJiByZXNvdXJjZV9ubyA8IDMyKQorCQlkci0+cmVzX21hc2sgfD0gMSA8PCByZXNvdXJjZV9ubzsKIAkKIAlyZXR1cm4gMDsKIApAQCAtNTgyLDEwICs2MjgsMTQgQEAKICAqLwogdm9pZCBtYWNpb19yZWxlYXNlX3Jlc291cmNlKHN0cnVjdCBtYWNpb19kZXYgKmRldiwgaW50IHJlc291cmNlX25vKQogeworCXN0cnVjdCBtYWNpb19kZXZyZXMgKmRyID0gZmluZF9tYWNpb19kcihkZXYpOworCiAJaWYgKG1hY2lvX3Jlc291cmNlX2xlbihkZXYsIHJlc291cmNlX25vKSA9PSAwKQogCQlyZXR1cm47CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2lvX3Jlc291cmNlX3N0YXJ0KGRldiwgcmVzb3VyY2Vfbm8pLAogCQkJICAgbWFjaW9fcmVzb3VyY2VfbGVuKGRldiwgcmVzb3VyY2Vfbm8pKTsKKwlpZiAoZHIgJiYgcmVzb3VyY2Vfbm8gPCAzMikKKwkJZHItPnJlc19tYXNrICY9IH4oMSA8PCByZXNvdXJjZV9ubyk7CiB9CiAKIC8qKgpAQCAtNzQ0LDMgKzc5NCw1IEBACiBFWFBPUlRfU1lNQk9MKG1hY2lvX3JlbGVhc2VfcmVzb3VyY2UpOwogRVhQT1JUX1NZTUJPTChtYWNpb19yZXF1ZXN0X3Jlc291cmNlcyk7CiBFWFBPUlRfU1lNQk9MKG1hY2lvX3JlbGVhc2VfcmVzb3VyY2VzKTsKK0VYUE9SVF9TWU1CT0wobWFjaW9fZW5hYmxlX2RldnJlcyk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMgYi9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jCmluZGV4IDAyOWFkOGMuLjA4MDAyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYwpAQCAtMzMsMTUgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9hZGIuaD4KICNpbmNsdWRlIDxsaW51eC9wbXUuaD4KIAotCi0jZGVmaW5lIE1CX0RFQlVHCi0KLSNpZmRlZiBNQl9ERUJVRwotI2RlZmluZSBNQkRCRyhmbXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fSU5GTyBmbXQgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBNQkRCRyhmbXQsIGFyZy4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgTUJfRkNSMzIoYmF5LCByKQkoKGJheSktPmJhc2UgKyAoKHIpID4+IDIpKQogI2RlZmluZSBNQl9GQ1I4KGJheSwgcikJCSgoKHZvbGF0aWxlIHU4IF9faW9tZW0gKikoKGJheSktPmJhc2UpKSArIChyKSkKIApAQCAtNzYsMjggKzY3LDE0IEBACiAJaW50CQkJCWluZGV4OwogCWludAkJCQljYWNoZWRfZ3BpbzsKIAlpbnQJCQkJc2xlZXBpbmc7CisJaW50CQkJCXVzZXJfbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9QTUFDCi0JaWRlX2h3aWZfdAkJCSpjZF9wb3J0OwotCXZvaWQgX19pb21lbQkJCSpjZF9iYXNlOwotCWludAkJCQljZF9pcnE7Ci0JaW50CQkJCWNkX3JldHJ5OwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfUE1BQykKLQlpbnQgCQkJCWNkX2luZGV4OwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIE1BWF9CQVlTCTIKIAogc3RhdGljIHN0cnVjdCBtZWRpYV9iYXlfaW5mbyBtZWRpYV9iYXlzW01BWF9CQVlTXTsKLWludCBtZWRpYV9iYXlfY291bnQgPSAwOwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUMKLS8qIGNoZWNrIHRoZSBidXN5IGJpdCBpbiB0aGUgbWVkaWEtYmF5IGlkZSBpbnRlcmZhY2UKLSAgIChhc3N1bWVzIHRoZSBtZWRpYS1iYXkgY29udGFpbnMgYW4gaWRlIGRldmljZSkgKi8KLSNkZWZpbmUgTUJfSURFX1JFQURZKGkpCSgocmVhZGIobWVkaWFfYmF5c1tpXS5jZF9iYXNlICsgMHg3MCkgJiAweDgwKSA9PSAwKQotI2VuZGlmCitzdGF0aWMgaW50IG1lZGlhX2JheV9jb3VudCA9IDA7CiAKIC8qCiAgKiBXYWl0IHRoYXQgbnVtYmVyIG9mIG1zIGJldHdlZW4gZWFjaCBzdGVwIGluIG5vcm1hbCBwb2xsaW5nIG1vZGUKQEAgLTEzMCwyMSArMTA3LDExIEBACiAKIC8qCiAgKiBXYWl0IHRoaXMgbWFueSB0aWNrcyBhZnRlciBhbiBJREUgZGV2aWNlIChlLmcuIENELVJPTSkgaXMgaW5zZXJ0ZWQKLSAqIChvciB1bnRpbCB0aGUgZGV2aWNlIGlzIHJlYWR5KSBiZWZvcmUgd2FpdGluZyBmb3IgYnVzeSBiaXQgdG8gZGlzYXBwZWFyCisgKiAob3IgdW50aWwgdGhlIGRldmljZSBpcyByZWFkeSkgYmVmb3JlIGNhbGxpbmcgaW50byB0aGUgZHJpdmVyCiAgKi8KICNkZWZpbmUgTUJfSURFX1dBSVQJMTAwMAogCiAvKgotICogVGltZW91dCB3YWl0aW5nIGZvciBidXN5IGJpdCBvZiBhbiBJREUgZGV2aWNlIHRvIGdvIGRvd24KLSAqLwotI2RlZmluZSBNQl9JREVfVElNRU9VVAk1MDAwCi0KLS8qCi0gKiBNYXggcmV0cmllcyBvZiB0aGUgZnVsbCBwb3dlciB1cC9kb3duIHNlcXVlbmNlIGZvciBhbiBJREUgZGV2aWNlCi0gKi8KLSNkZWZpbmUgTUFYX0NEX1JFVFJJRVMJMwotCi0vKgogICogU3RhdGVzIG9mIGEgbWVkaWEgYmF5CiAgKi8KIGVudW0gewpAQCAtMTUzLDcgKzEyMCw2IEBACiAJbWJfZW5hYmxpbmdfYmF5LAkvKiBlbmFibGUgYml0cyBzZXQsIHdhaXRpbmcgTUJfUkVTRVRfREVMQVkgKi8KIAltYl9yZXNldHRpbmcsCQkvKiByZXNldCBiaXQgdW5zZXQsIHdhaXRpbmcgTUJfU0VUVVBfREVMQVkgKi8KIAltYl9pZGVfcmVzZXR0aW5nLAkvKiBJREUgcmVzZXQgYml0IHVuc2VyLCB3YWl0aW5nIE1CX0lERV9XQUlUICovCi0JbWJfaWRlX3dhaXRpbmcsCQkvKiBXYWl0aW5nIGZvciBCVVNZIGJpdCB0byBnbyBhd2F5IHVudGlsIE1CX0lERV9USU1FT1VUICovCiAJbWJfdXAsCQkJLyogTWVkaWEgYmF5IGZ1bGwgKi8KIAltYl9wb3dlcmluZ19kb3duCS8qIFBvd2VyaW5nIGRvd24gKGF2b2lkIHRvbyBmYXN0IGRvd24vdXApICovCiB9OwpAQCAtMzczLDEyICszMzksMTIgQEAKIAlpZiAob25vZmYpIHsKIAkJYmF5LT5vcHMtPnBvd2VyKGJheSwgMSk7CiAJCWJheS0+c3RhdGUgPSBtYl9wb3dlcmluZ191cDsKLQkJTUJEQkcoIm1lZGlhYmF5JWQ6IHBvd2VyaW5nIHVwXG4iLCBiYXktPmluZGV4KTsKKwkJcHJfZGVidWcoIm1lZGlhYmF5JWQ6IHBvd2VyaW5nIHVwXG4iLCBiYXktPmluZGV4KTsKIAl9IGVsc2UgeyAKIAkJLyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcG93ZXJlZCBkb3duICYgZGlzYWJsZWQgKi8KIAkJYmF5LT5vcHMtPnBvd2VyKGJheSwgMCk7CiAJCWJheS0+c3RhdGUgPSBtYl9wb3dlcmluZ19kb3duOwotCQlNQkRCRygibWVkaWFiYXklZDogcG93ZXJpbmcgZG93blxuIiwgYmF5LT5pbmRleCk7CisJCXByX2RlYnVnKCJtZWRpYWJheSVkOiBwb3dlcmluZyBkb3duXG4iLCBiYXktPmluZGV4KTsKIAl9CiAJYmF5LT50aW1lciA9IG1zZWNzX3RvX2ppZmZpZXMoTUJfUE9XRVJfREVMQVkpOwogfQpAQCAtMzg3LDEwNyArMzUzLDExOCBAQAogewogCWludCBpZCA9IGJheS0+b3BzLT5jb250ZW50KGJheSk7CiAKLQlpZiAoaWQgPT0gYmF5LT5sYXN0X3ZhbHVlKSB7Ci0JCWlmIChpZCAhPSBiYXktPmNvbnRlbnRfaWQpIHsKLQkJCWJheS0+dmFsdWVfY291bnQgKz0gbXNlY3NfdG9famlmZmllcyhNQl9QT0xMX0RFTEFZKTsKLQkJCWlmIChiYXktPnZhbHVlX2NvdW50ID49IG1zZWNzX3RvX2ppZmZpZXMoTUJfU1RBQkxFX0RFTEFZKSkgewotCQkJCS8qIElmIHRoZSBkZXZpY2UgdHlwZSBjaGFuZ2VzIHdpdGhvdXQgZ29pbmcgdGhydQotCQkJCSAqICJNQl9OTyIsIHdlIGZvcmNlIGEgcGFzcyBieSAiTUJfTk8iIHRvIG1ha2Ugc3VyZQotCQkJCSAqIHRoaW5ncyBhcmUgcHJvcGVybHkgcmVzZXQKLQkJCQkgKi8KLQkJCQlpZiAoKGlkICE9IE1CX05PKSAmJiAoYmF5LT5jb250ZW50X2lkICE9IE1CX05PKSkgewotCQkJCQlpZCA9IE1CX05POwotCQkJCQlNQkRCRygibWVkaWFiYXklZDogZm9yY2luZyBNQl9OT1xuIiwgYmF5LT5pbmRleCk7Ci0JCQkJfQotCQkJCU1CREJHKCJtZWRpYWJheSVkOiBzd2l0Y2hpbmcgdG8gJWRcbiIsIGJheS0+aW5kZXgsIGlkKTsKLQkJCQlzZXRfbWJfcG93ZXIoYmF5LCBpZCAhPSBNQl9OTyk7Ci0JCQkJYmF5LT5jb250ZW50X2lkID0gaWQ7Ci0JCQkJaWYgKGlkID09IE1CX05PKSB7Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUMKLQkJCQkJYmF5LT5jZF9yZXRyeSA9IDA7Ci0jZW5kaWYKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAibWVkaWEgYmF5ICVkIGlzIGVtcHR5XG4iLCBiYXktPmluZGV4KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgeworCXN0YXRpYyBjaGFyICptYl9jb250ZW50X3R5cGVzW10gPSB7CisJCSJhIGZsb3BweSBkcml2ZSIsCisJCSJhIGZsb3BweSBkcml2ZSIsCisJCSJhbiB1bnN1cG9ydGVkIGF1ZGlvIGRldmljZSIsCisJCSJhbiBBVEEgZGV2aWNlIiwKKwkJImFuIHVuc3VwcG9ydGVkIFBDSSBkZXZpY2UiLAorCQkiYW4gdW5rbm93biBkZXZpY2UiLAorCX07CisKKwlpZiAoaWQgIT0gYmF5LT5sYXN0X3ZhbHVlKSB7CiAJCWJheS0+bGFzdF92YWx1ZSA9IGlkOwogCQliYXktPnZhbHVlX2NvdW50ID0gMDsKKwkJcmV0dXJuOworCX0KKwlpZiAoaWQgPT0gYmF5LT5jb250ZW50X2lkKQorCQlyZXR1cm47CisKKwliYXktPnZhbHVlX2NvdW50ICs9IG1zZWNzX3RvX2ppZmZpZXMoTUJfUE9MTF9ERUxBWSk7CisJaWYgKGJheS0+dmFsdWVfY291bnQgPj0gbXNlY3NfdG9famlmZmllcyhNQl9TVEFCTEVfREVMQVkpKSB7CisJCS8qIElmIHRoZSBkZXZpY2UgdHlwZSBjaGFuZ2VzIHdpdGhvdXQgZ29pbmcgdGhydQorCQkgKiAiTUJfTk8iLCB3ZSBmb3JjZSBhIHBhc3MgYnkgIk1CX05PIiB0byBtYWtlIHN1cmUKKwkJICogdGhpbmdzIGFyZSBwcm9wZXJseSByZXNldAorCQkgKi8KKwkJaWYgKChpZCAhPSBNQl9OTykgJiYgKGJheS0+Y29udGVudF9pZCAhPSBNQl9OTykpIHsKKwkJCWlkID0gTUJfTk87CisJCQlwcl9kZWJ1ZygibWVkaWFiYXklZDogZm9yY2luZyBNQl9OT1xuIiwgYmF5LT5pbmRleCk7CisJCX0KKwkJcHJfZGVidWcoIm1lZGlhYmF5JWQ6IHN3aXRjaGluZyB0byAlZFxuIiwgYmF5LT5pbmRleCwgaWQpOworCQlzZXRfbWJfcG93ZXIoYmF5LCBpZCAhPSBNQl9OTyk7CisJCWJheS0+Y29udGVudF9pZCA9IGlkOworCQlpZiAoaWQgPj0gTUJfTk8gfHwgaWQgPCAwKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWVkaWFiYXklZDogQmF5IGlzIG5vdyBlbXB0eVxuIiwgYmF5LT5pbmRleCk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIm1lZGlhYmF5JWQ6IEJheSBjb250YWlucyAlc1xuIiwKKwkJCSAgICAgICBiYXktPmluZGV4LCBtYl9jb250ZW50X3R5cGVzW2lkXSk7CiAJfQogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUMKLWludCBjaGVja19tZWRpYV9iYXkoc3RydWN0IGRldmljZV9ub2RlICp3aGljaF9iYXksIGludCB3aGF0KQoraW50IGNoZWNrX21lZGlhX2JheShzdHJ1Y3QgbWFjaW9fZGV2ICpiYXlkZXYpCiB7Ci0JaW50CWk7CisJc3RydWN0IG1lZGlhX2JheV9pbmZvKiBiYXk7CisJaW50IGlkOwogCi0JZm9yIChpPTA7IGk8bWVkaWFfYmF5X2NvdW50OyBpKyspCi0JCWlmIChtZWRpYV9iYXlzW2ldLm1kZXYgJiYgd2hpY2hfYmF5ID09IG1lZGlhX2JheXNbaV0ubWRldi0+b2ZkZXYubm9kZSkgewotCQkJaWYgKCh3aGF0ID09IG1lZGlhX2JheXNbaV0uY29udGVudF9pZCkgJiYgbWVkaWFfYmF5c1tpXS5zdGF0ZSA9PSBtYl91cCkKLQkJCQlyZXR1cm4gMDsKLQkJCW1lZGlhX2JheXNbaV0uY2RfaW5kZXggPSAtMTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JcmV0dXJuIC1FTk9ERVY7CisJaWYgKGJheWRldiA9PSBOVUxMKQorCQlyZXR1cm4gTUJfTk87CisKKwkvKiBUaGlzIHJldHVybnMgYW4gaW5zdGFudCBzbmFwc2hvdCwgbm90IGxvY2tpbmcsIHNpbmUKKwkgKiB3ZSBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGJheSBsb2NrIGhlbGQuIFRoZSByZXN1bHRpbmcKKwkgKiBmdXp6eW5lc3Mgb2YgdGhlIHJlc3VsdCBpZiBjYWxsZWQgYXQgdGhlIHdyb25nIHRpbWUgaXMKKwkgKiBub3QgYWN0dWFsbHkgYSBodWdlIGRlYWwKKwkgKi8KKwliYXkgPSBtYWNpb19nZXRfZHJ2ZGF0YShiYXlkZXYpOworCWlmIChiYXkgPT0gTlVMTCkKKwkJcmV0dXJuIE1CX05POworCWlkID0gYmF5LT5jb250ZW50X2lkOworCWlmIChiYXktPnN0YXRlICE9IG1iX3VwKQorCQlyZXR1cm4gTUJfTk87CisJaWYgKGlkID09IE1CX0ZEMSkKKwkJcmV0dXJuIE1CX0ZEOworCXJldHVybiBpZDsKIH0KLUVYUE9SVF9TWU1CT0woY2hlY2tfbWVkaWFfYmF5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21lZGlhX2JheSk7CiAKLWludCBjaGVja19tZWRpYV9iYXlfYnlfYmFzZSh1bnNpZ25lZCBsb25nIGJhc2UsIGludCB3aGF0KQordm9pZCBsb2NrX21lZGlhX2JheShzdHJ1Y3QgbWFjaW9fZGV2ICpiYXlkZXYpCiB7Ci0JaW50CWk7CisJc3RydWN0IG1lZGlhX2JheV9pbmZvKiBiYXk7CiAKLQlmb3IgKGk9MDsgaTxtZWRpYV9iYXlfY291bnQ7IGkrKykKLQkJaWYgKG1lZGlhX2JheXNbaV0ubWRldiAmJiBiYXNlID09ICh1bnNpZ25lZCBsb25nKSBtZWRpYV9iYXlzW2ldLmNkX2Jhc2UpIHsKLQkJCWlmICgod2hhdCA9PSBtZWRpYV9iYXlzW2ldLmNvbnRlbnRfaWQpICYmIG1lZGlhX2JheXNbaV0uc3RhdGUgPT0gbWJfdXApCi0JCQkJcmV0dXJuIDA7Ci0JCQltZWRpYV9iYXlzW2ldLmNkX2luZGV4ID0gLTE7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSAKLQotCXJldHVybiAtRU5PREVWOworCWlmIChiYXlkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJheSA9IG1hY2lvX2dldF9kcnZkYXRhKGJheWRldik7CisJaWYgKGJheSA9PSBOVUxMKQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmYmF5LT5sb2NrKTsKKwliYXktPnVzZXJfbG9jayA9IDE7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tZWRpYV9iYXlfYnlfYmFzZSk7CitFWFBPUlRfU1lNQk9MX0dQTChsb2NrX21lZGlhX2JheSk7CiAKLWludCBtZWRpYV9iYXlfc2V0X2lkZV9pbmZvcyhzdHJ1Y3QgZGV2aWNlX25vZGUqIHdoaWNoX2JheSwgdW5zaWduZWQgbG9uZyBiYXNlLAotCQkJICAgIGludCBpcnEsIGlkZV9od2lmX3QgKmh3aWYpCit2b2lkIHVubG9ja19tZWRpYV9iYXkoc3RydWN0IG1hY2lvX2RldiAqYmF5ZGV2KQogewotCWludAlpOworCXN0cnVjdCBtZWRpYV9iYXlfaW5mbyogYmF5OwogCi0JZm9yIChpPTA7IGk8bWVkaWFfYmF5X2NvdW50OyBpKyspIHsKLQkJc3RydWN0IG1lZGlhX2JheV9pbmZvKiBiYXkgPSAmbWVkaWFfYmF5c1tpXTsKLQotCQlpZiAoYmF5LT5tZGV2ICYmIHdoaWNoX2JheSA9PSBiYXktPm1kZXYtPm9mZGV2Lm5vZGUpIHsKLQkJCWludCB0aW1lb3V0ID0gNTAwMCwgaW5kZXggPSBod2lmLT5pbmRleDsKLQkJCQotCQkJbXV0ZXhfbG9jaygmYmF5LT5sb2NrKTsKLQotCQkJYmF5LT5jZF9wb3J0CT0gaHdpZjsKLSAJCQliYXktPmNkX2Jhc2UJPSAodm9pZCBfX2lvbWVtICopIGJhc2U7Ci0JCQliYXktPmNkX2lycQk9IGlycTsKLQotCQkJaWYgKChNQl9DRCAhPSBiYXktPmNvbnRlbnRfaWQpIHx8IGJheS0+c3RhdGUgIT0gbWJfdXApIHsKLQkJCQltdXRleF91bmxvY2soJmJheS0+bG9jayk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiUmVnaXN0ZXJlZCBpZGUlZCBmb3IgbWVkaWEgYmF5ICVkXG4iLCBpbmRleCwgaSk7Ci0JCQlkbyB7Ci0JCQkJaWYgKE1CX0lERV9SRUFEWShpKSkgewotCQkJCQliYXktPmNkX2luZGV4CT0gaW5kZXg7Ci0JCQkJCW11dGV4X3VubG9jaygmYmF5LT5sb2NrKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJCW1kZWxheSgxKTsKLQkJCX0gd2hpbGUoLS10aW1lb3V0KTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJUaW1lb3VudCB3YWl0aW5nIElERSBpbiBiYXkgJWRcbiIsIGkpOwotCQkJbXV0ZXhfdW5sb2NrKCZiYXktPmxvY2spOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwlpZiAoYmF5ZGV2ID09IE5VTEwpCisJCXJldHVybjsKKwliYXkgPSBtYWNpb19nZXRfZHJ2ZGF0YShiYXlkZXYpOworCWlmIChiYXkgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChiYXktPnVzZXJfbG9jaykgeworCQliYXktPnVzZXJfbG9jayA9IDA7CisJCW11dGV4X3VubG9jaygmYmF5LT5sb2NrKTsKIAl9Ci0KLQlyZXR1cm4gLUVOT0RFVjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKG1lZGlhX2JheV9zZXRfaWRlX2luZm9zKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQyAqLworRVhQT1JUX1NZTUJPTF9HUEwodW5sb2NrX21lZGlhX2JheSk7CisKK3N0YXRpYyBpbnQgbWJfYnJvYWRjYXN0X2hvdHBsdWcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtZWRpYV9iYXlfaW5mbyogYmF5ID0gZGF0YTsKKwlzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2OworCXN0cnVjdCBtYWNpb19kcml2ZXIgKmRydjsKKwlpbnQgc3RhdGU7CisKKwlpZiAoZGV2LT5idXMgIT0gJm1hY2lvX2J1c190eXBlKQorCQlyZXR1cm4gMDsKKworCXN0YXRlID0gYmF5LT5zdGF0ZSA9PSBtYl91cCA/IGJheS0+Y29udGVudF9pZCA6IE1CX05POworCWlmIChzdGF0ZSA9PSBNQl9GRDEpCisJCXN0YXRlID0gTUJfRkQ7CisJbWRldiA9IHRvX21hY2lvX2RldmljZShkZXYpOworCWRydiA9IHRvX21hY2lvX2RyaXZlcihkZXYtPmRyaXZlcik7CisJaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+bWVkaWFiYXlfZXZlbnQpCisJCWRydi0+bWVkaWFiYXlfZXZlbnQobWRldiwgc3RhdGUpOworCXJldHVybiAwOworfQogCiBzdGF0aWMgdm9pZCBtZWRpYV9iYXlfc3RlcChpbnQgaSkKIHsKQEAgLTQ5Nyw4ICs0NzQsOCBAQAogCWlmIChiYXktPnN0YXRlICE9IG1iX3Bvd2VyaW5nX2Rvd24pCiAJICAgIHBvbGxfbWVkaWFfYmF5KGJheSk7CiAKLQkvKiBJZiB0aW1lciBleHBpcmVkIG9yIHBvbGxpbmcgSURFIGJ1c3ksIHJ1biBzdGF0ZSBtYWNoaW5lICovCi0JaWYgKChiYXktPnN0YXRlICE9IG1iX2lkZV93YWl0aW5nKSAmJiAoYmF5LT50aW1lciAhPSAwKSkgeworCS8qIElmIHRpbWVyIGV4cGlyZWQgcnVuIHN0YXRlIG1hY2hpbmUgKi8KKwlpZiAoYmF5LT50aW1lciAhPSAwKSB7CiAJCWJheS0+dGltZXIgLT0gbXNlY3NfdG9famlmZmllcyhNQl9QT0xMX0RFTEFZKTsKIAkJaWYgKGJheS0+dGltZXIgPiAwKQogCQkJcmV0dXJuOwpAQCAtNTA4LDEwMCArNDg1LDUwIEBACiAJc3dpdGNoKGJheS0+c3RhdGUpIHsKIAljYXNlIG1iX3Bvd2VyaW5nX3VwOgogCSAgICAJaWYgKGJheS0+b3BzLT5zZXR1cF9idXMoYmF5LCBiYXktPmxhc3RfdmFsdWUpIDwgMCkgewotCQkJTUJEQkcoIm1lZGlhYmF5JWQ6IGRldmljZSBub3Qgc3VwcG9ydGVkIChraW5kOiVkKVxuIiwgaSwgYmF5LT5jb250ZW50X2lkKTsKKwkJCXByX2RlYnVnKCJtZWRpYWJheSVkOiBkZXZpY2Ugbm90IHN1cHBvcnRlZCAoa2luZDolZClcbiIsCisJCQkJIGksIGJheS0+Y29udGVudF9pZCk7CiAJICAgIAkJc2V0X21iX3Bvd2VyKGJheSwgMCk7CiAJICAgIAkJYnJlYWs7CiAJICAgIAl9CiAJICAgIAliYXktPnRpbWVyID0gbXNlY3NfdG9famlmZmllcyhNQl9SRVNFVF9ERUxBWSk7CiAJICAgIAliYXktPnN0YXRlID0gbWJfZW5hYmxpbmdfYmF5OwotCQlNQkRCRygibWVkaWFiYXklZDogZW5hYmxpbmcgKGtpbmQ6JWQpXG4iLCBpLCBiYXktPmNvbnRlbnRfaWQpOworCQlwcl9kZWJ1ZygibWVkaWFiYXklZDogZW5hYmxpbmcgKGtpbmQ6JWQpXG4iLCBpLCBiYXktPmNvbnRlbnRfaWQpOwogCQlicmVhazsKIAljYXNlIG1iX2VuYWJsaW5nX2JheToKIAkJYmF5LT5vcHMtPnVuX3Jlc2V0KGJheSk7CiAJICAgIAliYXktPnRpbWVyID0gbXNlY3NfdG9famlmZmllcyhNQl9TRVRVUF9ERUxBWSk7CiAJICAgIAliYXktPnN0YXRlID0gbWJfcmVzZXR0aW5nOwotCQlNQkRCRygibWVkaWFiYXklZDogd2FpdGluZyByZXNldCAoa2luZDolZClcbiIsIGksIGJheS0+Y29udGVudF9pZCk7CisJCXByX2RlYnVnKCJtZWRpYWJheSVkOiByZWxlYXNpbmcgYmF5IHJlc2V0IChraW5kOiVkKVxuIiwKKwkJCSBpLCBiYXktPmNvbnRlbnRfaWQpOwogCSAgICAJYnJlYWs7CiAJY2FzZSBtYl9yZXNldHRpbmc6CiAJCWlmIChiYXktPmNvbnRlbnRfaWQgIT0gTUJfQ0QpIHsKLQkJCU1CREJHKCJtZWRpYWJheSVkOiBiYXkgaXMgdXAgKGtpbmQ6JWQpXG4iLCBpLCBiYXktPmNvbnRlbnRfaWQpOworCQkJcHJfZGVidWcoIm1lZGlhYmF5JWQ6IGJheSBpcyB1cCAoa2luZDolZClcbiIsIGksCisJCQkJIGJheS0+Y29udGVudF9pZCk7CiAJCQliYXktPnN0YXRlID0gbWJfdXA7CisJCQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmJheS0+bWRldi0+b2ZkZXYuZGV2LAorCQkJCQkgICAgICBiYXksIG1iX2Jyb2FkY2FzdF9ob3RwbHVnKTsKIAkJCWJyZWFrOwogCSAgICAJfQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9QTUFDCi0JCU1CREJHKCJtZWRpYWJheSVkOiB3YWl0aW5nIElERSByZXNldCAoa2luZDolZClcbiIsIGksIGJheS0+Y29udGVudF9pZCk7CisJCXByX2RlYnVnKCJtZWRpYWJheSVkOiByZWxlYXNpbmcgQVRBIHJlc2V0IChraW5kOiVkKVxuIiwKKwkJCSBpLCBiYXktPmNvbnRlbnRfaWQpOwogCQliYXktPm9wcy0+dW5fcmVzZXRfaWRlKGJheSk7CiAJICAgIAliYXktPnRpbWVyID0gbXNlY3NfdG9famlmZmllcyhNQl9JREVfV0FJVCk7CiAJICAgIAliYXktPnN0YXRlID0gbWJfaWRlX3Jlc2V0dGluZzsKLSNlbHNlCi0JCXByaW50ayhLRVJOX0RFQlVHICJtZWRpYS1iYXkgJWQgaXMgaWRlIChub3QgY29tcGlsZWQgaW4ga2VybmVsKVxuIiwgaSk7Ci0JCXNldF9tYl9wb3dlcihiYXksIDApOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERV9QTUFDICovCiAJICAgIAlicmVhazsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQworCiAJY2FzZSBtYl9pZGVfcmVzZXR0aW5nOgotCSAgICAJYmF5LT50aW1lciA9IG1zZWNzX3RvX2ppZmZpZXMoTUJfSURFX1RJTUVPVVQpOwotCSAgICAJYmF5LT5zdGF0ZSA9IG1iX2lkZV93YWl0aW5nOwotCQlNQkRCRygibWVkaWFiYXklZDogd2FpdGluZyBJREUgcmVhZHkgKGtpbmQ6JWQpXG4iLCBpLCBiYXktPmNvbnRlbnRfaWQpOworCQlwcl9kZWJ1ZygibWVkaWFiYXklZDogYmF5IGlzIHVwIChraW5kOiVkKVxuIiwgaSwgYmF5LT5jb250ZW50X2lkKTsKKwkJYmF5LT5zdGF0ZSA9IG1iX3VwOworCQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmJheS0+bWRldi0+b2ZkZXYuZGV2LAorCQkJCSAgICAgIGJheSwgbWJfYnJvYWRjYXN0X2hvdHBsdWcpOwogCSAgICAJYnJlYWs7Ci0JY2FzZSBtYl9pZGVfd2FpdGluZzoKLQkJaWYgKGJheS0+Y2RfYmFzZSA9PSBOVUxMKSB7Ci0JCQliYXktPnRpbWVyID0gMDsKLQkJCWJheS0+c3RhdGUgPSBtYl91cDsKLQkJCU1CREJHKCJtZWRpYWJheSVkOiB1cCBiZWZvcmUgSURFIGluaXRcbiIsIGkpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoTUJfSURFX1JFQURZKGkpKSB7Ci0JCQliYXktPnRpbWVyID0gMDsKLQkJCWJheS0+c3RhdGUgPSBtYl91cDsKLQkJCWlmIChiYXktPmNkX2luZGV4IDwgMCkgewotCQkJCXByaW50aygibWVkaWFiYXkgJWQsIHJlZ2lzdGVyaW5nIElERS4uLlxuIiwgaSk7Ci0JCQkJcG11X3N1c3BlbmQoKTsKLQkJCQlpZGVfcG9ydF9zY2FuKGJheS0+Y2RfcG9ydCk7Ci0JCQkJaWYgKGJheS0+Y2RfcG9ydC0+cHJlc2VudCkKLQkJCQkJYmF5LT5jZF9pbmRleCA9IGJheS0+Y2RfcG9ydC0+aW5kZXg7Ci0JCQkJcG11X3Jlc3VtZSgpOwotCQkJfQotCQkJaWYgKGJheS0+Y2RfaW5kZXggPT0gLTEpIHsKLQkJCQkvKiBXZSBldmVudHVhbGx5IGRvIGEgcmV0cnkgKi8KLQkJCQliYXktPmNkX3JldHJ5Kys7Ci0JCQkJcHJpbnRrKCJJREUgcmVnaXN0ZXIgZXJyb3JcbiIpOwotCQkJCXNldF9tYl9wb3dlcihiYXksIDApOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAibWVkaWEtYmF5ICVkIGlzIGlkZSVkXG4iLCBpLCBiYXktPmNkX2luZGV4KTsKLQkJCQlNQkRCRygibWVkaWFiYXkgJWQgSURFIHJlYWR5XG4iLCBpKTsKLQkJCX0KLQkJCWJyZWFrOwotCSAgICAJfSBlbHNlIGlmIChiYXktPnRpbWVyID4gMCkKLQkJCWJheS0+dGltZXIgLT0gbXNlY3NfdG9famlmZmllcyhNQl9QT0xMX0RFTEFZKTsKLQkgICAgCWlmIChiYXktPnRpbWVyIDw9IDApIHsKLQkJCXByaW50aygiXG5JREUgVGltZW91dCBpbiBiYXkgJWQgISwgSURFIHN0YXRlIGlzOiAweCUwMnhcbiIsCi0JCQkgICAgICAgaSwgcmVhZGIoYmF5LT5jZF9iYXNlICsgMHg3MCkpOwotCQkJTUJEQkcoIm1lZGlhYmF5JWQ6IG5JREUgVGltZW91dCAhXG4iLCBpKTsKLQkJCXNldF9tYl9wb3dlcihiYXksIDApOwotCQkJYmF5LT50aW1lciA9IDA7Ci0JICAgIAl9Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERV9QTUFDICovCisKIAljYXNlIG1iX3Bvd2VyaW5nX2Rvd246CiAJICAgIAliYXktPnN0YXRlID0gbWJfZW1wdHk7Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUMKLSAgICAJICAgICAgICBpZiAoYmF5LT5jZF9pbmRleCA+PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVW5yZWdpc3RlcmluZyBtYiAlZCBpZGUsIGluZGV4OiVkXG4iLCBpLAotCQkJICAgICAgIGJheS0+Y2RfaW5kZXgpOwotCQkJaWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGJheS0+Y2RfcG9ydCk7Ci0JCQliYXktPmNkX2luZGV4ID0gLTE7Ci0JCX0KLQkgICAgCWlmIChiYXktPmNkX3JldHJ5KSB7Ci0JCQlpZiAoYmF5LT5jZF9yZXRyeSA+IE1BWF9DRF9SRVRSSUVTKSB7Ci0JCQkJLyogU2hvdWxkIGFkZCBhbiBlcnJvciBzb3VuZCAoc29ydCBvZiBiZWVwIGluIGRtYXNvdW5kKSAqLwotCQkJCXByaW50aygiXG5tZWRpYS1iYXkgJWQsIElERSBkZXZpY2UgYmFkbHkgaW5zZXJ0ZWQgb3IgdW5yZWNvZ25pc2VkXG4iLCBpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogRm9yY2UgYSBuZXcgcG93ZXIgZG93bi91cCBzZXF1ZW5jZSAqLwotCQkJCWJheS0+Y29udGVudF9pZCA9IE1CX05POwotCQkJfQotCSAgICAJfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERV9QTUFDICovCi0JCU1CREJHKCJtZWRpYWJheSVkOiBlbmQgb2YgcG93ZXIgZG93blxuIiwgaSk7CisJCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmYmF5LT5tZGV2LT5vZmRldi5kZXYsCisJCQkJICAgICAgYmF5LCBtYl9icm9hZGNhc3RfaG90cGx1Zyk7CisJCXByX2RlYnVnKCJtZWRpYWJheSVkOiBlbmQgb2YgcG93ZXIgZG93blxuIiwgaSk7CiAJICAgIAlicmVhazsKIAl9CiB9CkBAIC02NzYsMTEgKzYwMyw2IEBACiAJYmF5LT5sYXN0X3ZhbHVlID0gYmF5LT5vcHMtPmNvbnRlbnQoYmF5KTsKIAliYXktPnZhbHVlX2NvdW50ID0gbXNlY3NfdG9famlmZmllcyhNQl9TVEFCTEVfREVMQVkpOwogCWJheS0+c3RhdGUgPSBtYl9lbXB0eTsKLQlkbyB7Ci0JCW1zbGVlcChNQl9QT0xMX0RFTEFZKTsKLQkJbWVkaWFfYmF5X3N0ZXAoaSk7Ci0JfSB3aGlsZSgoYmF5LT5zdGF0ZSAhPSBtYl9lbXB0eSkgJiYKLQkJKGJheS0+c3RhdGUgIT0gbWJfdXApKTsKIAogCS8qIE1hcmsgdXMgcmVhZHkgYnkgZmlsbGluZyBvdXIgbWRldiBkYXRhICovCiAJbWFjaW9fc2V0X2RydmRhdGEobWRldiwgYmF5KTsKQEAgLTcyNSw3ICs2NDcsNyBAQAogCSAgICAgICAJc2V0X21iX3Bvd2VyKGJheSwgMCk7CiAJCW1zbGVlcChNQl9QT1dFUl9ERUxBWSk7CiAJICAgICAgIAlpZiAoYmF5LT5vcHMtPmNvbnRlbnQoYmF5KSAhPSBiYXktPmNvbnRlbnRfaWQpIHsKLQkJCXByaW50aygibWVkaWFiYXklZDogY29udGVudCBjaGFuZ2VkIGR1cmluZyBzbGVlcC4uLlxuIiwgYmF5LT5pbmRleCk7CisJCQlwcmludGsoIm1lZGlhYmF5JWQ6IENvbnRlbnQgY2hhbmdlZCBkdXJpbmcgc2xlZXAuLi5cbiIsIGJheS0+aW5kZXgpOwogCQkJbXV0ZXhfdW5sb2NrKCZiYXktPmxvY2spOwogCSAgICAgICAJCXJldHVybiAwOwogCQl9CkBAIC03MzMsOSArNjU1LDYgQEAKIAkgICAgICAgCWJheS0+bGFzdF92YWx1ZSA9IGJheS0+Y29udGVudF9pZDsKIAkgICAgICAgCWJheS0+dmFsdWVfY291bnQgPSBtc2Vjc190b19qaWZmaWVzKE1CX1NUQUJMRV9ERUxBWSk7CiAJICAgICAgIAliYXktPnRpbWVyID0gbXNlY3NfdG9famlmZmllcyhNQl9QT1dFUl9ERUxBWSk7Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUMKLQkgICAgICAgCWJheS0+Y2RfcmV0cnkgPSAwOwotI2VuZGlmCiAJICAgICAgIAlkbyB7CiAJCQltc2xlZXAoTUJfUE9MTF9ERUxBWSk7CiAJICAgICAgIAkJbWVkaWFfYmF5X3N0ZXAoYmF5LT5pbmRleCk7CkBAIC04MjMsOSArNzQyLDYgQEAKIAlmb3IgKGk9MDsgaTxNQVhfQkFZUzsgaSsrKSB7CiAJCW1lbXNldCgoY2hhciAqKSZtZWRpYV9iYXlzW2ldLCAwLCBzaXplb2Yoc3RydWN0IG1lZGlhX2JheV9pbmZvKSk7CiAJCW1lZGlhX2JheXNbaV0uY29udGVudF9pZAk9IC0xOwotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9QTUFDCi0JCW1lZGlhX2JheXNbaV0uY2RfaW5kZXgJCT0gLTE7Ci0jZW5kaWYKIAl9CiAJaWYgKCFtYWNoaW5lX2lzKHBvd2VybWFjKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9udnJhbS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbnZyYW0uYwppbmRleCBiMTk1ZDc1Li5jODc2MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9udnJhbS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL252cmFtLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L252cmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KIApAQCAtMjEsNyArMjAsNiBAQAogCiBzdGF0aWMgbG9mZl90IG52cmFtX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKLQlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJY2FzZSAxOgogCQlvZmZzZXQgKz0gZmlsZS0+Zl9wb3M7CkBAIC0zMCwxMiArMjgsMTAgQEAKIAkJb2Zmc2V0ICs9IE5WUkFNX1NJWkU7CiAJCWJyZWFrOwogCX0KLQlpZiAob2Zmc2V0IDwgMCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKG9mZnNldCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCWZpbGUtPmZfcG9zID0gb2Zmc2V0OwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZmlsZS0+Zl9wb3M7CiB9CiAKQEAgLTc2LDggKzcyLDcgQEAKIAlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAotc3RhdGljIGludCBudnJhbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIG52cmFtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2goY21kKSB7CiAJCWNhc2UgUE1BQ19OVlJBTV9HRVRfT0ZGU0VUOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IDU1NmYwZmUuLjVmZjQ3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTc5LDYgKzc5LDcgQEAKIAl1OAkJCWxpbWl0c1szXTsKIAlpbnQJCQlsYXN0X3NwZWVkWzJdOwogCWludAkJCWxhc3RfdmFyWzJdOworCWludAkJCXB3bV9pbnZbMl07CiB9OwogCiBzdGF0aWMgZW51bSB7QURUNzQ2MCwgQURUNzQ2N30gdGhlcm1fdHlwZTsKQEAgLTIyOSwxOSArMjMwLDIzIEBACiAJCiAJaWYgKHNwZWVkID49IDApIHsKIAkJbWFudWFsID0gcmVhZF9yZWcodGgsIE1BTlVBTF9NT0RFW2Zhbl0pOworCQltYW51YWwgJj0gfklOVkVSVF9NQVNLOwogCQl3cml0ZV9yZWcodGgsIE1BTlVBTF9NT0RFW2Zhbl0sCi0JCQkobWFudWFsfE1BTlVBTF9NQVNLKSAmICh+SU5WRVJUX01BU0spKTsKKwkJCW1hbnVhbCB8IE1BTlVBTF9NQVNLIHwgdGgtPnB3bV9pbnZbZmFuXSk7CiAJCXdyaXRlX3JlZyh0aCwgRkFOX1NQRF9TRVRbZmFuXSwgc3BlZWQpOwogCX0gZWxzZSB7CiAJCS8qIGJhY2sgdG8gYXV0b21hdGljICovCiAJCWlmKHRoZXJtX3R5cGUgPT0gQURUNzQ2MCkgewogCQkJbWFudWFsID0gcmVhZF9yZWcodGgsCiAJCQkJTUFOVUFMX01PREVbZmFuXSkgJiAofk1BTlVBTF9NQVNLKTsKLQorCQkJbWFudWFsICY9IH5JTlZFUlRfTUFTSzsKKwkJCW1hbnVhbCB8PSB0aC0+cHdtX2ludltmYW5dOwogCQkJd3JpdGVfcmVnKHRoLAogCQkJCU1BTlVBTF9NT0RFW2Zhbl0sIG1hbnVhbHxSRU1fQ09OVFJPTFtmYW5dKTsKIAkJfSBlbHNlIHsKIAkJCW1hbnVhbCA9IHJlYWRfcmVnKHRoLCBNQU5VQUxfTU9ERVtmYW5dKTsKKwkJCW1hbnVhbCAmPSB+SU5WRVJUX01BU0s7CisJCQltYW51YWwgfD0gdGgtPnB3bV9pbnZbZmFuXTsKIAkJCXdyaXRlX3JlZyh0aCwgTUFOVUFMX01PREVbZmFuXSwgbWFudWFsJih+QVVUT19NQVNLKSk7CiAJCX0KIAl9CkBAIC0zODcsNyArMzkyLDcgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0aCk7CiAJdGgtPmNsdCA9IGNsaWVudDsKIAotCXJjID0gcmVhZF9yZWcodGgsIDApOworCXJjID0gcmVhZF9yZWcodGgsIENPTkZJR19SRUcpOwogCWlmIChyYyA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJUaGVybW9zdGF0IGZhaWxlZCB0byByZWFkIGNvbmZpZyFcbiIpOwogCQlrZnJlZSh0aCk7CkBAIC00MTgsNiArNDIzLDEwIEBACiAKIAl0aGVybW9zdGF0ID0gdGg7CiAKKwkvKiByZWNvcmQgaW52ZXJ0IGJpdCBzdGF0dXMgYmVjYXVzZSBmdyBjYW4gY29ycnVwdCBpdCBhZnRlciBzdXNwZW5kICovCisJdGgtPnB3bV9pbnZbMF0gPSByZWFkX3JlZyh0aCwgTUFOVUFMX01PREVbMF0pICYgSU5WRVJUX01BU0s7CisJdGgtPnB3bV9pbnZbMV0gPSByZWFkX3JlZyh0aCwgTUFOVUFMX01PREVbMV0pICYgSU5WRVJUX01BU0s7CisKIAkvKiBiZSBzdXJlIHRvIHJlYWxseSB3cml0ZSBmYW4gc3BlZWQgdGhlIGZpcnN0IHRpbWUgKi8KIAl0aC0+bGFzdF9zcGVlZFswXSA9IC0yOwogCXRoLT5sYXN0X3NwZWVkWzFdID0gLTI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggNmYzMDhhNC4uZGIzNzljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xODYsMTcgKzE4NywxMSBAQAogc3RhdGljIHZvaWQgcG11X3N0YXJ0KHZvaWQpOwogc3RhdGljIGlycXJldHVybl90IHZpYV9wbXVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmFyZyk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZ3BpbzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgaW50IHByb2NfZ2V0X2luZm8oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBwcm9jX2dldF9pcnFzdGF0cyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXVfaW5mb19wcm9jX2ZvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXVfaXJxc3RhdHNfcHJvY19mb3BzOwogc3RhdGljIHZvaWQgcG11X3Bhc3NfaW50cih1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKLXN0YXRpYyBpbnQgcHJvY19nZXRfYmF0dChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBwcm9jX3JlYWRfb3B0aW9ucyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBwcm9jX3dyaXRlX29wdGlvbnMoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtdV9iYXR0ZXJ5X3Byb2NfZm9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtdV9vcHRpb25zX3Byb2NfZm9wczsKIAogI2lmZGVmIENPTkZJR19BREIKIHN0cnVjdCBhZGJfZHJpdmVyIHZpYV9wbXVfZHJpdmVyID0gewpAQCAtNTA3LDE5ICs1MDIsMTUgQEAKIAkJZm9yIChpPTA7IGk8cG11X2JhdHRlcnlfY291bnQ7IGkrKykgewogCQkJY2hhciB0aXRsZVsxNl07CiAJCQlzcHJpbnRmKHRpdGxlLCAiYmF0dGVyeV8lbGQiLCBpKTsKLQkJCXByb2NfcG11X2JhdHRbaV0gPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KHRpdGxlLCAwLCBwcm9jX3BtdV9yb290LAotCQkJCQkJcHJvY19nZXRfYmF0dCwgKHZvaWQgKilpKTsKKwkJCXByb2NfcG11X2JhdHRbaV0gPSBwcm9jX2NyZWF0ZV9kYXRhKHRpdGxlLCAwLCBwcm9jX3BtdV9yb290LAorCQkJCQkmcG11X2JhdHRlcnlfcHJvY19mb3BzLCAodm9pZCAqKWkpOwogCQl9CiAKLQkJcHJvY19wbXVfaW5mbyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImluZm8iLCAwLCBwcm9jX3BtdV9yb290LAotCQkJCQlwcm9jX2dldF9pbmZvLCBOVUxMKTsKLQkJcHJvY19wbXVfaXJxc3RhdHMgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJpbnRlcnJ1cHRzIiwgMCwgcHJvY19wbXVfcm9vdCwKLQkJCQkJcHJvY19nZXRfaXJxc3RhdHMsIE5VTEwpOwotCQlwcm9jX3BtdV9vcHRpb25zID0gY3JlYXRlX3Byb2NfZW50cnkoIm9wdGlvbnMiLCAwNjAwLCBwcm9jX3BtdV9yb290KTsKLQkJaWYgKHByb2NfcG11X29wdGlvbnMpIHsKLQkJCXByb2NfcG11X29wdGlvbnMtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9vcHRpb25zOwotCQkJcHJvY19wbXVfb3B0aW9ucy0+d3JpdGVfcHJvYyA9IHByb2Nfd3JpdGVfb3B0aW9uczsKLQkJfQorCQlwcm9jX3BtdV9pbmZvID0gcHJvY19jcmVhdGUoImluZm8iLCAwLCBwcm9jX3BtdV9yb290LCAmcG11X2luZm9fcHJvY19mb3BzKTsKKwkJcHJvY19wbXVfaXJxc3RhdHMgPSBwcm9jX2NyZWF0ZSgiaW50ZXJydXB0cyIsIDAsIHByb2NfcG11X3Jvb3QsCisJCQkJCQkmcG11X2lycXN0YXRzX3Byb2NfZm9wcyk7CisJCXByb2NfcG11X29wdGlvbnMgPSBwcm9jX2NyZWF0ZSgib3B0aW9ucyIsIDA2MDAsIHByb2NfcG11X3Jvb3QsCisJCQkJCQkmcG11X29wdGlvbnNfcHJvY19mb3BzKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03OTksMjcgKzc5MCwzMyBAQAogCQkJMiwgUE1VX1NNQVJUX0JBVFRFUllfU1RBVEUsIHBtdV9jdXJfYmF0dGVyeSsxKTsKIH0KIAotc3RhdGljIGludAotcHJvY19nZXRfaW5mbyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcG11X2luZm9fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyKiBwID0gcGFnZTsKLQotCXAgKz0gc3ByaW50ZihwLCAiUE1VIGRyaXZlciB2ZXJzaW9uICAgICA6ICVkXG4iLCBQTVVfRFJJVkVSX1ZFUlNJT04pOwotCXAgKz0gc3ByaW50ZihwLCAiUE1VIGZpcm13YXJlIHZlcnNpb24gICA6ICUwMnhcbiIsIHBtdV92ZXJzaW9uKTsKLQlwICs9IHNwcmludGYocCwgIkFDIFBvd2VyICAgICAgICAgICAgICAgOiAlZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJQTVUgZHJpdmVyIHZlcnNpb24gICAgIDogJWRcbiIsIFBNVV9EUklWRVJfVkVSU0lPTik7CisJc2VxX3ByaW50ZihtLCAiUE1VIGZpcm13YXJlIHZlcnNpb24gICA6ICUwMnhcbiIsIHBtdV92ZXJzaW9uKTsKKwlzZXFfcHJpbnRmKG0sICJBQyBQb3dlciAgICAgICAgICAgICAgIDogJWRcbiIsCiAJCSgocG11X3Bvd2VyX2ZsYWdzICYgUE1VX1BXUl9BQ19QUkVTRU5UKSAhPSAwKSB8fCBwbXVfYmF0dGVyeV9jb3VudCA9PSAwKTsKLQlwICs9IHNwcmludGYocCwgIkJhdHRlcnkgY291bnQgICAgICAgICAgOiAlZFxuIiwgcG11X2JhdHRlcnlfY291bnQpOworCXNlcV9wcmludGYobSwgIkJhdHRlcnkgY291bnQgICAgICAgICAgOiAlZFxuIiwgcG11X2JhdHRlcnlfY291bnQpOwogCi0JcmV0dXJuIHAgLSBwYWdlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX2dldF9pcnFzdGF0cyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwbXVfaW5mb19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHBtdV9pbmZvX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtdV9pbmZvX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG11X2luZm9fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHBtdV9pcnFzdGF0c19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWludCBpOwotCWNoYXIqIHAgPSBwYWdlOwogCXN0YXRpYyBjb25zdCBjaGFyICppcnFfbmFtZXNbXSA9IHsKIAkJIlRvdGFsIENCMSB0cmlnZ2VyZWQgZXZlbnRzIiwKIAkJIlRvdGFsIEdQSU8xIHRyaWdnZXJlZCBldmVudHMiLApAQCAtODM1LDYwICs4MzIsNzYgQEAKICAgICAgICAgfTsKIAogCWZvciAoaT0wOyBpPDExOyBpKyspIHsKLQkJcCArPSBzcHJpbnRmKHAsICIgJTJ1OiAlMTB1ICglcylcbiIsCisJCXNlcV9wcmludGYobSwgIiAlMnU6ICUxMHUgKCVzKVxuIiwKIAkJCSAgICAgaSwgcG11X2lycV9zdGF0c1tpXSwgaXJxX25hbWVzW2ldKTsKIAl9Ci0JcmV0dXJuIHAgLSBwYWdlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX2dldF9iYXR0KGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwbXVfaXJxc3RhdHNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWxvbmcgYmF0bnVtID0gKGxvbmcpZGF0YTsKLQljaGFyICpwID0gcGFnZTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG11X2lycXN0YXRzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtdV9pcnFzdGF0c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBtdV9pcnFzdGF0c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcG11X2JhdHRlcnlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlsb25nIGJhdG51bSA9IChsb25nKW0tPnByaXZhdGU7CiAJCi0JcCArPSBzcHJpbnRmKHAsICJcbiIpOwotCXAgKz0gc3ByaW50ZihwLCAiZmxhZ3MgICAgICA6ICUwOHhcbiIsCi0JCXBtdV9iYXR0ZXJpZXNbYmF0bnVtXS5mbGFncyk7Ci0JcCArPSBzcHJpbnRmKHAsICJjaGFyZ2UgICAgIDogJWRcbiIsCi0JCXBtdV9iYXR0ZXJpZXNbYmF0bnVtXS5jaGFyZ2UpOwotCXAgKz0gc3ByaW50ZihwLCAibWF4X2NoYXJnZSA6ICVkXG4iLAotCQlwbXVfYmF0dGVyaWVzW2JhdG51bV0ubWF4X2NoYXJnZSk7Ci0JcCArPSBzcHJpbnRmKHAsICJjdXJyZW50ICAgIDogJWRcbiIsCi0JCXBtdV9iYXR0ZXJpZXNbYmF0bnVtXS5hbXBlcmFnZSk7Ci0JcCArPSBzcHJpbnRmKHAsICJ2b2x0YWdlICAgIDogJWRcbiIsCi0JCXBtdV9iYXR0ZXJpZXNbYmF0bnVtXS52b2x0YWdlKTsKLQlwICs9IHNwcmludGYocCwgInRpbWUgcmVtLiAgOiAlZFxuIiwKLQkJcG11X2JhdHRlcmllc1tiYXRudW1dLnRpbWVfcmVtYWluaW5nKTsKLQotCXJldHVybiBwIC0gcGFnZTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlzZXFfcHJpbnRmKG0sICJmbGFncyAgICAgIDogJTA4eFxuIiwgcG11X2JhdHRlcmllc1tiYXRudW1dLmZsYWdzKTsKKwlzZXFfcHJpbnRmKG0sICJjaGFyZ2UgICAgIDogJWRcbiIsIHBtdV9iYXR0ZXJpZXNbYmF0bnVtXS5jaGFyZ2UpOworCXNlcV9wcmludGYobSwgIm1heF9jaGFyZ2UgOiAlZFxuIiwgcG11X2JhdHRlcmllc1tiYXRudW1dLm1heF9jaGFyZ2UpOworCXNlcV9wcmludGYobSwgImN1cnJlbnQgICAgOiAlZFxuIiwgcG11X2JhdHRlcmllc1tiYXRudW1dLmFtcGVyYWdlKTsKKwlzZXFfcHJpbnRmKG0sICJ2b2x0YWdlICAgIDogJWRcbiIsIHBtdV9iYXR0ZXJpZXNbYmF0bnVtXS52b2x0YWdlKTsKKwlzZXFfcHJpbnRmKG0sICJ0aW1lIHJlbS4gIDogJWRcbiIsIHBtdV9iYXR0ZXJpZXNbYmF0bnVtXS50aW1lX3JlbWFpbmluZyk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9vcHRpb25zKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcG11X2JhdHRlcnlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNoYXIgKnAgPSBwYWdlOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwbXVfYmF0dGVyeV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXVfYmF0dGVyeV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBtdV9iYXR0ZXJ5X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBwbXVfb3B0aW9uc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorewogI2lmIGRlZmluZWQoQ09ORklHX1NVU1BFTkQpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogCWlmIChwbXVfa2luZCA9PSBQTVVfS0VZTEFSR09fQkFTRUQgJiYKIAkgICAgcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfU0xFRVBfU1RBVEUsTlVMTCwwLC0xKSA+PSAwKQotCQlwICs9IHNwcmludGYocCwgImxpZF93YWtldXA9JWRcbiIsIG9wdGlvbl9saWRfd2FrZXVwKTsKKwkJc2VxX3ByaW50ZihtLCAibGlkX3dha2V1cD0lZFxuIiwgb3B0aW9uX2xpZF93YWtldXApOwogI2VuZGlmCiAJaWYgKHBtdV9raW5kID09IFBNVV9LRVlMQVJHT19CQVNFRCkKLQkJcCArPSBzcHJpbnRmKHAsICJzZXJ2ZXJfbW9kZT0lZFxuIiwgb3B0aW9uX3NlcnZlcl9tb2RlKTsKKwkJc2VxX3ByaW50ZihtLCAic2VydmVyX21vZGU9JWRcbiIsIG9wdGlvbl9zZXJ2ZXJfbW9kZSk7CiAKLQlyZXR1cm4gcCAtIHBhZ2U7CisJcmV0dXJuIDA7CiB9Ci0JCQkKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCisKK3N0YXRpYyBpbnQgcG11X29wdGlvbnNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwbXVfb3B0aW9uc19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBwbXVfb3B0aW9uc19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWNoYXIgdG1wWzMzXTsKIAljaGFyICpsYWJlbCwgKnZhbDsKLQl1bnNpZ25lZCBsb25nIGZjb3VudCA9IGNvdW50OworCXNpemVfdCBmY291bnQgPSBjb3VudDsKIAkKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkyNyw2ICs5NDAsMTUgQEAKIAlyZXR1cm4gZmNvdW50OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXVfb3B0aW9uc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBtdV9vcHRpb25zX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwbXVfb3B0aW9uc19wcm9jX3dyaXRlLAorfTsKKwogI2lmZGVmIENPTkZJR19BREIKIC8qIFNlbmQgYW4gQURCIGNvbW1hbmQgKi8KIHN0YXRpYyBpbnQgcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfY29udHJvbHMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9jb250cm9scy5jCmluZGV4IDk2MWZhMGUuLjZjNjhiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9jb250cm9scy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9jb250cm9scy5jCkBAIC0yMDIsNiArMjAyLDggQEAKIAkJZmN0LT5jdHJsLm5hbWUgPSAiY3B1LWZyb250LWZhbi0xIjsKIAllbHNlIGlmICghc3RyY21wKGwsICJDUFUgQSBQVU1QIikpCiAJCWZjdC0+Y3RybC5uYW1lID0gImNwdS1wdW1wLTAiOworCWVsc2UgaWYgKCFzdHJjbXAobCwgIkNQVSBCIFBVTVAiKSkKKwkJZmN0LT5jdHJsLm5hbWUgPSAiY3B1LXB1bXAtMSI7CiAJZWxzZSBpZiAoIXN0cmNtcChsLCAiU2xvdHMgRmFuIikgfHwgIXN0cmNtcChsLCAiU2xvdHMgZmFuIikgfHwKIAkJICFzdHJjbXAobCwgIkVYUEFOU0lPTiBTTE9UUyBJTlRBS0UiKSkKIAkJZmN0LT5jdHJsLm5hbWUgPSAic2xvdHMtZmFuIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvS2NvbmZpZyBiL2RyaXZlcnMvbWQvS2NvbmZpZwppbmRleCAyMTU4Mzc3Li5hY2IzYTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL0tjb25maWcKKysrIGIvZHJpdmVycy9tZC9LY29uZmlnCkBAIC0xODUsMTEgKzE4NSwxMCBAQAogCXRyaXN0YXRlICJNdWx0aXBhdGggSS9PIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCTEtfREVWX01ECiAJaGVscAotCSAgTXVsdGlwYXRoLUlPIGlzIHRoZSBhYmlsaXR5IG9mIGNlcnRhaW4gZGV2aWNlcyB0byBhZGRyZXNzIHRoZSBzYW1lCi0JICBwaHlzaWNhbCBkaXNrIG92ZXIgbXVsdGlwbGUgJ0lPIHBhdGhzJy4gVGhlIGNvZGUgZW5zdXJlcyB0aGF0IHN1Y2gKLQkgIHBhdGhzIGNhbiBiZSBkZWZpbmVkIGFuZCBoYW5kbGVkIGF0IHJ1bnRpbWUsIGFuZCBlbnN1cmVzIHRoYXQgYQotCSAgdHJhbnNwYXJlbnQgZmFpbG92ZXIgdG8gdGhlIGJhY2t1cCBwYXRoKHMpIGhhcHBlbnMgaWYgYSBJTyBlcnJvcnMKLQkgIGFycml2ZXMgb24gdGhlIHByaW1hcnkgcGF0aC4KKwkgIE1EX01VTFRJUEFUSCBwcm92aWRlcyBhIHNpbXBsZSBtdWx0aS1wYXRoIHBlcnNvbmFsaXR5IGZvciB1c2UKKwkgIHRoZSBNRCBmcmFtZXdvcmsuICBJdCBpcyBub3QgdW5kZXIgYWN0aXZlIGRldmVsb3BtZW50LiAgTmV3CisJICBwcm9qZWN0cyBzaG91bGQgY29uc2lkZXIgdXNpbmcgRE1fTVVMVElQQVRIIHdoaWNoIGhhcyBtb3JlCisJICBmZWF0dXJlcyBhbmQgbW9yZSB0ZXN0aW5nLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA2MGUyYjMyLi4yNmFjOGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogICovCiAKIC8qIElPIG9wZXJhdGlvbnMgd2hlbiBiaXRtYXAgaXMgc3RvcmVkIG5lYXIgYWxsIHN1cGVyYmxvY2tzICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnJlYWRfc2JfcGFnZShtZGRldl90ICptZGRldiwgbG9uZyBvZmZzZXQsCitzdGF0aWMgc3RydWN0IHBhZ2UgKnJlYWRfc2JfcGFnZShtZGRldl90ICptZGRldiwgbG9mZl90IG9mZnNldCwKIAkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBzaXplKQogewpAQCAtMjg3LDI3ICsyODcsMzYgQEAKIAogCXdoaWxlICgocmRldiA9IG5leHRfYWN0aXZlX3JkZXYocmRldiwgbWRkZXYpKSAhPSBOVUxMKSB7CiAJCQlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKwkJCWxvZmZfdCBvZmZzZXQgPSBtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0OwogCQkJaWYgKHBhZ2UtPmluZGV4ID09IGJpdG1hcC0+ZmlsZV9wYWdlcy0xKQogCQkJCXNpemUgPSByb3VuZHVwKGJpdG1hcC0+bGFzdF9wYWdlX3NpemUsCiAJCQkJCSAgICAgICBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShyZGV2LT5iZGV2KSk7CiAJCQkvKiBKdXN0IG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgY29ycnVwdGluZyBkYXRhIG9yCiAJCQkgKiBtZXRhZGF0YQogCQkJICovCi0JCQlpZiAoYml0bWFwLT5vZmZzZXQgPCAwKSB7CisJCQlpZiAobWRkZXYtPmV4dGVybmFsKSB7CisJCQkJLyogQml0bWFwIGNvdWxkIGJlIGFueXdoZXJlLiAqLworCQkJCWlmIChyZGV2LT5zYl9zdGFydCArIG9mZnNldCArIChwYWdlLT5pbmRleCAqKFBBR0VfU0laRS81MTIpKSA+CisJCQkJICAgIHJkZXYtPmRhdGFfb2Zmc2V0ICYmCisJCQkJICAgIHJkZXYtPnNiX3N0YXJ0ICsgb2Zmc2V0IDwgCisJCQkJICAgIHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPmRldl9zZWN0b3JzICsKKwkJCQkgICAgKFBBR0VfU0laRS81MTIpKQorCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7CisJCQl9IGVsc2UgaWYgKG9mZnNldCA8IDApIHsKIAkJCQkvKiBEQVRBICBCSVRNQVAgTUVUQURBVEEgICovCi0JCQkJaWYgKGJpdG1hcC0+b2Zmc2V0CisJCQkJaWYgKG9mZnNldAogCQkJCSAgICArIChsb25nKShwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUvNTEyKSkKIAkJCQkgICAgKyBzaXplLzUxMiA+IDApCiAJCQkJCS8qIGJpdG1hcCBydW5zIGluIHRvIG1ldGFkYXRhICovCiAJCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKIAkJCQlpZiAocmRldi0+ZGF0YV9vZmZzZXQgKyBtZGRldi0+ZGV2X3NlY3RvcnMKLQkJCQkgICAgPiByZGV2LT5zYl9zdGFydCArIGJpdG1hcC0+b2Zmc2V0KQorCQkJCSAgICA+IHJkZXYtPnNiX3N0YXJ0ICsgb2Zmc2V0KQogCQkJCQkvKiBkYXRhIHJ1bnMgaW4gdG8gYml0bWFwICovCiAJCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKIAkJCX0gZWxzZSBpZiAocmRldi0+c2Jfc3RhcnQgPCByZGV2LT5kYXRhX29mZnNldCkgewogCQkJCS8qIE1FVEFEQVRBIEJJVE1BUCBEQVRBICovCiAJCQkJaWYgKHJkZXYtPnNiX3N0YXJ0Ci0JCQkJICAgICsgYml0bWFwLT5vZmZzZXQKKwkJCQkgICAgKyBvZmZzZXQKIAkJCQkgICAgKyBwYWdlLT5pbmRleCooUEFHRV9TSVpFLzUxMikgKyBzaXplLzUxMgogCQkJCSAgICA+IHJkZXYtPmRhdGFfb2Zmc2V0KQogCQkJCQkvKiBiaXRtYXAgcnVucyBpbiB0byBkYXRhICovCkBAIC0zMTYsNyArMzI1LDcgQEAKIAkJCQkvKiBEQVRBIE1FVEFEQVRBIEJJVE1BUCAtIG5vIHByb2JsZW1zICovCiAJCQl9CiAJCQltZF9zdXBlcl93cml0ZShtZGRldiwgcmRldiwKLQkJCQkgICAgICAgcmRldi0+c2Jfc3RhcnQgKyBiaXRtYXAtPm9mZnNldAorCQkJCSAgICAgICByZGV2LT5zYl9zdGFydCArIG9mZnNldAogCQkJCSAgICAgICArIHBhZ2UtPmluZGV4ICogKFBBR0VfU0laRS81MTIpLAogCQkJCSAgICAgICBzaXplLAogCQkJCSAgICAgICBwYWdlKTsKQEAgLTQ4OCw2ICs0OTcsOCBAQAogCiAJaWYgKCFiaXRtYXAgfHwgIWJpdG1hcC0+bWRkZXYpIC8qIG5vIGJpdG1hcCBmb3IgdGhpcyBhcnJheSAqLwogCQlyZXR1cm47CisJaWYgKGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmV4dGVybmFsKQorCQlyZXR1cm47CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwogCWlmICghYml0bWFwLT5zYl9wYWdlKSB7IC8qIG5vIHN1cGVyYmxvY2sgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CkBAIC01MDEsNiArNTEyLDkgQEAKIAkJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGJpdG1hcC0+bWRkZXYtPmV2ZW50czsKIAkJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5ldmVudHNfY2xlYXJlZCk7CiAJfQorCS8qIEp1c3QgaW4gY2FzZSB0aGVzZSBoYXZlIGJlZW4gY2hhbmdlZCB2aWEgc3lzZnM6ICovCisJc2ItPmRhZW1vbl9zbGVlcCA9IGNwdV90b19sZTMyKGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcC9IWik7CisJc2ItPndyaXRlX2JlaGluZCA9IGNwdV90b19sZTMyKGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQpOwogCWt1bm1hcF9hdG9taWMoc2IsIEtNX1VTRVIwKTsKIAl3cml0ZV9wYWdlKGJpdG1hcCwgYml0bWFwLT5zYl9wYWdlLCAxKTsKIH0KQEAgLTU1MCw3ICs1NjQsOCBAQAogCiAJCWJpdG1hcC0+c2JfcGFnZSA9IHJlYWRfcGFnZShiaXRtYXAtPmZpbGUsIDAsIGJpdG1hcCwgYnl0ZXMpOwogCX0gZWxzZSB7Ci0JCWJpdG1hcC0+c2JfcGFnZSA9IHJlYWRfc2JfcGFnZShiaXRtYXAtPm1kZGV2LCBiaXRtYXAtPm9mZnNldCwKKwkJYml0bWFwLT5zYl9wYWdlID0gcmVhZF9zYl9wYWdlKGJpdG1hcC0+bWRkZXYsCisJCQkJCSAgICAgICBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQsCiAJCQkJCSAgICAgICBOVUxMLAogCQkJCQkgICAgICAgMCwgc2l6ZW9mKGJpdG1hcF9zdXBlcl90KSk7CiAJfQpAQCAtNTYzLDcgKzU3OCw3IEBACiAJc2IgPSAoYml0bWFwX3N1cGVyX3QgKilrbWFwX2F0b21pYyhiaXRtYXAtPnNiX3BhZ2UsIEtNX1VTRVIwKTsKIAogCWNodW5rc2l6ZSA9IGxlMzJfdG9fY3B1KHNiLT5jaHVua3NpemUpOwotCWRhZW1vbl9zbGVlcCA9IGxlMzJfdG9fY3B1KHNiLT5kYWVtb25fc2xlZXApOworCWRhZW1vbl9zbGVlcCA9IGxlMzJfdG9fY3B1KHNiLT5kYWVtb25fc2xlZXApICogSFo7CiAJd3JpdGVfYmVoaW5kID0gbGUzMl90b19jcHUoc2ItPndyaXRlX2JlaGluZCk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGUgYml0bWFwLXNwZWNpZmljIGZpZWxkcyBhcmUgdmFsaWQgKi8KQEAgLTU3Niw3ICs1OTEsNyBAQAogCQlyZWFzb24gPSAiYml0bWFwIGNodW5rc2l6ZSB0b28gc21hbGwiOwogCWVsc2UgaWYgKCgxIDw8IGZmeih+Y2h1bmtzaXplKSkgIT0gY2h1bmtzaXplKQogCQlyZWFzb24gPSAiYml0bWFwIGNodW5rc2l6ZSBub3QgYSBwb3dlciBvZiAyIjsKLQllbHNlIGlmIChkYWVtb25fc2xlZXAgPCAxIHx8IGRhZW1vbl9zbGVlcCA+IE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopCisJZWxzZSBpZiAoZGFlbW9uX3NsZWVwIDwgMSB8fCBkYWVtb25fc2xlZXAgPiBNQVhfU0NIRURVTEVfVElNRU9VVCkKIAkJcmVhc29uID0gImRhZW1vbiBzbGVlcCBwZXJpb2Qgb3V0IG9mIHJhbmdlIjsKIAllbHNlIGlmICh3cml0ZV9iZWhpbmQgPiBDT1VOVEVSX01BWCkKIAkJcmVhc29uID0gIndyaXRlLWJlaGluZCBsaW1pdCBvdXQgb2YgcmFuZ2UgKDAgLSAxNjM4MykiOwpAQCAtNjEwLDEwICs2MjUsOSBAQAogCX0KIHN1Y2Nlc3M6CiAJLyogYXNzaWduIGZpZWxkcyB1c2luZyB2YWx1ZXMgZnJvbSBzdXBlcmJsb2NrICovCi0JYml0bWFwLT5jaHVua3NpemUgPSBjaHVua3NpemU7Ci0JYml0bWFwLT5kYWVtb25fc2xlZXAgPSBkYWVtb25fc2xlZXA7Ci0JYml0bWFwLT5kYWVtb25fbGFzdHJ1biA9IGppZmZpZXM7Ci0JYml0bWFwLT5tYXhfd3JpdGVfYmVoaW5kID0gd3JpdGVfYmVoaW5kOworCWJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmNodW5rc2l6ZSA9IGNodW5rc2l6ZTsKKwliaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXAgPSBkYWVtb25fc2xlZXA7CisJYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCA9IHdyaXRlX2JlaGluZDsKIAliaXRtYXAtPmZsYWdzIHw9IGxlMzJfdG9fY3B1KHNiLT5zdGF0ZSk7CiAJaWYgKGxlMzJfdG9fY3B1KHNiLT52ZXJzaW9uKSA9PSBCSVRNQVBfTUFKT1JfSE9TVEVORElBTikKIAkJYml0bWFwLT5mbGFncyB8PSBCSVRNQVBfSE9TVEVORElBTjsKQEAgLTY2NCwxNiArNjc4LDI2IEBACiAgKiBnZW5lcmFsIGJpdG1hcCBmaWxlIG9wZXJhdGlvbnMKICAqLwogCisvKgorICogb24tZGlzayBiaXRtYXA6CisgKgorICogVXNlIG9uZSBiaXQgcGVyICJjaHVuayIgKGJsb2NrIHNldCkuIFdlIGRvIHRoZSBkaXNrIEkvTyBvbiB0aGUgYml0bWFwCisgKiBmaWxlIGEgcGFnZSBhdCBhIHRpbWUuIFRoZXJlJ3MgYSBzdXBlcmJsb2NrIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KKyAqLwogLyogY2FsY3VsYXRlIHRoZSBpbmRleCBvZiB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIHRoaXMgYml0ICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlX2luZGV4KHVuc2lnbmVkIGxvbmcgY2h1bmspCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlX2luZGV4KHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyBjaHVuaykKIHsKLQlyZXR1cm4gQ0hVTktfQklUX09GRlNFVChjaHVuaykgPj4gUEFHRV9CSVRfU0hJRlQ7CisJaWYgKCFiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5leHRlcm5hbCkKKwkJY2h1bmsgKz0gc2l6ZW9mKGJpdG1hcF9zdXBlcl90KSA8PCAzOworCXJldHVybiBjaHVuayA+PiBQQUdFX0JJVF9TSElGVDsKIH0KIAogLyogY2FsY3VsYXRlIHRoZSAoYml0KSBvZmZzZXQgb2YgdGhpcyBiaXQgd2l0aGluIGEgcGFnZSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpbGVfcGFnZV9vZmZzZXQodW5zaWduZWQgbG9uZyBjaHVuaykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmaWxlX3BhZ2Vfb2Zmc2V0KHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyBjaHVuaykKIHsKLQlyZXR1cm4gQ0hVTktfQklUX09GRlNFVChjaHVuaykgJiAoUEFHRV9CSVRTIC0gMSk7CisJaWYgKCFiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5leHRlcm5hbCkKKwkJY2h1bmsgKz0gc2l6ZW9mKGJpdG1hcF9zdXBlcl90KSA8PCAzOworCXJldHVybiBjaHVuayAmIChQQUdFX0JJVFMgLSAxKTsKIH0KIAogLyoKQEAgLTY4Niw4ICs3MTAsOSBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmlsZW1hcF9nZXRfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsCiAJCQkJCXVuc2lnbmVkIGxvbmcgY2h1bmspCiB7Ci0JaWYgKGZpbGVfcGFnZV9pbmRleChjaHVuaykgPj0gYml0bWFwLT5maWxlX3BhZ2VzKSByZXR1cm4gTlVMTDsKLQlyZXR1cm4gYml0bWFwLT5maWxlbWFwW2ZpbGVfcGFnZV9pbmRleChjaHVuaykgLSBmaWxlX3BhZ2VfaW5kZXgoMCldOworCWlmIChmaWxlX3BhZ2VfaW5kZXgoYml0bWFwLCBjaHVuaykgPj0gYml0bWFwLT5maWxlX3BhZ2VzKSByZXR1cm4gTlVMTDsKKwlyZXR1cm4gYml0bWFwLT5maWxlbWFwW2ZpbGVfcGFnZV9pbmRleChiaXRtYXAsIGNodW5rKQorCQkJICAgICAgIC0gZmlsZV9wYWdlX2luZGV4KGJpdG1hcCwgMCldOwogfQogCiAKQEAgLTcxMCw3ICs3MzUsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwogCiAJd2hpbGUgKHBhZ2VzLS0pCi0JCWlmIChtYXBbcGFnZXNdLT5pbmRleCAhPSAwKSAvKiAwIGlzIHNiX3BhZ2UsIHJlbGVhc2UgaXQgYmVsb3cgKi8KKwkJaWYgKG1hcFtwYWdlc10gIT0gc2JfcGFnZSkgLyogMCBpcyBzYl9wYWdlLCByZWxlYXNlIGl0IGJlbG93ICovCiAJCQlmcmVlX2J1ZmZlcnMobWFwW3BhZ2VzXSk7CiAJa2ZyZWUobWFwKTsKIAlrZnJlZShhdHRyKTsKQEAgLTgyMSw3ICs4NDYsNyBAQAogCiAJcGFnZSA9IGZpbGVtYXBfZ2V0X3BhZ2UoYml0bWFwLCBjaHVuayk7CiAJaWYgKCFwYWdlKSByZXR1cm47Ci0JYml0ID0gZmlsZV9wYWdlX29mZnNldChjaHVuayk7CisJYml0ID0gZmlsZV9wYWdlX29mZnNldChiaXRtYXAsIGNodW5rKTsKIAogIAkvKiBzZXQgdGhlIGJpdCAqLwogCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwpAQCAtOTA3LDcgKzkzMiw3IEBACiAJY2h1bmtzID0gYml0bWFwLT5jaHVua3M7CiAJZmlsZSA9IGJpdG1hcC0+ZmlsZTsKIAotCUJVR19PTighZmlsZSAmJiAhYml0bWFwLT5vZmZzZXQpOworCUJVR19PTighZmlsZSAmJiAhYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KTsKIAogI2lmZGVmIElOSkVDVF9GQVVMVFNfMwogCW91dG9mZGF0ZSA9IDE7CkBAIC05MTksMTQgKzk0NCwxNyBAQAogCQkJInJlY292ZXJ5XG4iLCBibW5hbWUoYml0bWFwKSk7CiAKIAlieXRlcyA9IChjaHVua3MgKyA3KSAvIDg7CisJaWYgKCFiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5leHRlcm5hbCkKKwkJYnl0ZXMgKz0gc2l6ZW9mKGJpdG1hcF9zdXBlcl90KTsKIAotCW51bV9wYWdlcyA9IChieXRlcyArIHNpemVvZihiaXRtYXBfc3VwZXJfdCkgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwkKKwludW1fcGFnZXMgPSAoYnl0ZXMgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKIAotCWlmIChmaWxlICYmIGlfc2l6ZV9yZWFkKGZpbGUtPmZfbWFwcGluZy0+aG9zdCkgPCBieXRlcyArIHNpemVvZihiaXRtYXBfc3VwZXJfdCkpIHsKKwlpZiAoZmlsZSAmJiBpX3NpemVfcmVhZChmaWxlLT5mX21hcHBpbmctPmhvc3QpIDwgYnl0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBmaWxlIHRvbyBzaG9ydCAlbHUgPCAlbHVcbiIsCiAJCQlibW5hbWUoYml0bWFwKSwKIAkJCSh1bnNpZ25lZCBsb25nKSBpX3NpemVfcmVhZChmaWxlLT5mX21hcHBpbmctPmhvc3QpLAotCQkJYnl0ZXMgKyBzaXplb2YoYml0bWFwX3N1cGVyX3QpKTsKKwkJCWJ5dGVzKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC05NDcsMTcgKzk3NSwxNiBAQAogCiAJZm9yIChpID0gMDsgaSA8IGNodW5rczsgaSsrKSB7CiAJCWludCBiOwotCQlpbmRleCA9IGZpbGVfcGFnZV9pbmRleChpKTsKLQkJYml0ID0gZmlsZV9wYWdlX29mZnNldChpKTsKKwkJaW5kZXggPSBmaWxlX3BhZ2VfaW5kZXgoYml0bWFwLCBpKTsKKwkJYml0ID0gZmlsZV9wYWdlX29mZnNldChiaXRtYXAsIGkpOwogCQlpZiAoaW5kZXggIT0gb2xkaW5kZXgpIHsgLyogdGhpcyBpcyBhIG5ldyBwYWdlLCByZWFkIGl0IGluICovCiAJCQlpbnQgY291bnQ7CiAJCQkvKiB1bm1hcCB0aGUgb2xkIHBhZ2UsIHdlJ3JlIGRvbmUgd2l0aCBpdCAqLwogCQkJaWYgKGluZGV4ID09IG51bV9wYWdlcy0xKQotCQkJCWNvdW50ID0gYnl0ZXMgKyBzaXplb2YoYml0bWFwX3N1cGVyX3QpCi0JCQkJCS0gaW5kZXggKiBQQUdFX1NJWkU7CisJCQkJY291bnQgPSBieXRlcyAtIGluZGV4ICogUEFHRV9TSVpFOwogCQkJZWxzZQogCQkJCWNvdW50ID0gUEFHRV9TSVpFOwotCQkJaWYgKGluZGV4ID09IDApIHsKKwkJCWlmIChpbmRleCA9PSAwICYmIGJpdG1hcC0+c2JfcGFnZSkgewogCQkJCS8qCiAJCQkJICogaWYgd2UncmUgaGVyZSB0aGVuIHRoZSBzdXBlcmJsb2NrIHBhZ2UKIAkJCQkgKiBjb250YWlucyBzb21lIGJpdHMgKFBBR0VfU0laRSAhPSBzaXplb2Ygc2IpCkBAIC05NjcsMTQgKzk5NCwxNSBAQAogCQkJCW9mZnNldCA9IHNpemVvZihiaXRtYXBfc3VwZXJfdCk7CiAJCQkJaWYgKCFmaWxlKQogCQkJCQlyZWFkX3NiX3BhZ2UoYml0bWFwLT5tZGRldiwKLQkJCQkJCSAgICAgYml0bWFwLT5vZmZzZXQsCisJCQkJCQkgICAgIGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCwKIAkJCQkJCSAgICAgcGFnZSwKIAkJCQkJCSAgICAgaW5kZXgsIGNvdW50KTsKIAkJCX0gZWxzZSBpZiAoZmlsZSkgewogCQkJCXBhZ2UgPSByZWFkX3BhZ2UoZmlsZSwgaW5kZXgsIGJpdG1hcCwgY291bnQpOwogCQkJCW9mZnNldCA9IDA7CiAJCQl9IGVsc2UgewotCQkJCXBhZ2UgPSByZWFkX3NiX3BhZ2UoYml0bWFwLT5tZGRldiwgYml0bWFwLT5vZmZzZXQsCisJCQkJcGFnZSA9IHJlYWRfc2JfcGFnZShiaXRtYXAtPm1kZGV2LAorCQkJCQkJICAgIGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCwKIAkJCQkJCSAgICBOVUxMLAogCQkJCQkJICAgIGluZGV4LCBjb3VudCk7CiAJCQkJb2Zmc2V0ID0gMDsKQEAgLTEwNzgsMjMgKzExMDYsMzIgQEAKICAqCQkJb3V0IHRvIGRpc2sKICAqLwogCi12b2lkIGJpdG1hcF9kYWVtb25fd29yayhzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit2b2lkIGJpdG1hcF9kYWVtb25fd29yayhtZGRldl90ICptZGRldikKIHsKKwlzdHJ1Y3QgYml0bWFwICpiaXRtYXA7CiAJdW5zaWduZWQgbG9uZyBqOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMLCAqbGFzdHBhZ2UgPSBOVUxMOwogCWludCBibG9ja3M7CiAJdm9pZCAqcGFkZHI7CiAKLQlpZiAoYml0bWFwID09IE5VTEwpCisJLyogVXNlIGEgbXV0ZXggdG8gZ3VhcmQgZGFlbW9uX3dvcmsgYWdhaW5zdAorCSAqIGJpdG1hcF9kZXN0cm95LgorCSAqLworCW11dGV4X2xvY2soJm1kZGV2LT5iaXRtYXBfaW5mby5tdXRleCk7CisJYml0bWFwID0gbWRkZXYtPmJpdG1hcDsKKwlpZiAoYml0bWFwID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZtZGRldi0+Yml0bWFwX2luZm8ubXV0ZXgpOwogCQlyZXR1cm47Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGJpdG1hcC0+ZGFlbW9uX2xhc3RydW4gKyBiaXRtYXAtPmRhZW1vbl9zbGVlcCpIWikpCisJfQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBiaXRtYXAtPmRhZW1vbl9sYXN0cnVuCisJCQkrIGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcCkpCiAJCWdvdG8gZG9uZTsKIAogCWJpdG1hcC0+ZGFlbW9uX2xhc3RydW4gPSBqaWZmaWVzOwogCWlmIChiaXRtYXAtPmFsbGNsZWFuKSB7CiAJCWJpdG1hcC0+bWRkZXYtPnRocmVhZC0+dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCQlyZXR1cm47CisJCWdvdG8gZG9uZTsKIAl9CiAJYml0bWFwLT5hbGxjbGVhbiA9IDE7CiAKQEAgLTExNDIsNyArMTE3OSw4IEBACiAJCQkvKiBXZSBhcmUgcG9zc2libHkgZ29pbmcgdG8gY2xlYXIgc29tZSBiaXRzLCBzbyBtYWtlCiAJCQkgKiBzdXJlIHRoYXQgZXZlbnRzX2NsZWFyZWQgaXMgdXAtdG8tZGF0ZS4KIAkJCSAqLwotCQkJaWYgKGJpdG1hcC0+bmVlZF9zeW5jKSB7CisJCQlpZiAoYml0bWFwLT5uZWVkX3N5bmMgJiYKKwkJCSAgICBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5leHRlcm5hbCA9PSAwKSB7CiAJCQkJYml0bWFwX3N1cGVyX3QgKnNiOwogCQkJCWJpdG1hcC0+bmVlZF9zeW5jID0gMDsKIAkJCQlzYiA9IGttYXBfYXRvbWljKGJpdG1hcC0+c2JfcGFnZSwgS01fVVNFUjApOwpAQCAtMTE1Miw3ICsxMTkwLDggQEAKIAkJCQl3cml0ZV9wYWdlKGJpdG1hcCwgYml0bWFwLT5zYl9wYWdlLCAxKTsKIAkJCX0KIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKLQkJCWNsZWFyX3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX0NMRUFOKTsKKwkJCWlmICghYml0bWFwLT5uZWVkX3N5bmMpCisJCQkJY2xlYXJfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfQ0xFQU4pOwogCQl9CiAJCWJtYyA9IGJpdG1hcF9nZXRfY291bnRlcihiaXRtYXAsCiAJCQkJCSAoc2VjdG9yX3QpaiA8PCBDSFVOS19CTE9DS19TSElGVChiaXRtYXApLApAQCAtMTE2Nyw3ICsxMjA2LDcgQEAKIAkJCWlmICgqYm1jID09IDIpIHsKIAkJCQkqYm1jPTE7IC8qIG1heWJlIGNsZWFyIHRoZSBiaXQgbmV4dCB0aW1lICovCiAJCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX0NMRUFOKTsKLQkJCX0gZWxzZSBpZiAoKmJtYyA9PSAxKSB7CisJCQl9IGVsc2UgaWYgKCpibWMgPT0gMSAmJiAhYml0bWFwLT5uZWVkX3N5bmMpIHsKIAkJCQkvKiB3ZSBjYW4gY2xlYXIgdGhlIGJpdCAqLwogCQkJCSpibWMgPSAwOwogCQkJCWJpdG1hcF9jb3VudF9wYWdlKGJpdG1hcCwKQEAgLTExNzcsOSArMTIxNiwxMSBAQAogCQkJCS8qIGNsZWFyIHRoZSBiaXQgKi8KIAkJCQlwYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkJCQlpZiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9IT1NURU5ESUFOKQotCQkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChqKSwgcGFkZHIpOworCQkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChiaXRtYXAsIGopLAorCQkJCQkJICBwYWRkcik7CiAJCQkJZWxzZQotCQkJCQlleHQyX2NsZWFyX2JpdChmaWxlX3BhZ2Vfb2Zmc2V0KGopLCBwYWRkcik7CisJCQkJCWV4dDJfY2xlYXJfYml0KGZpbGVfcGFnZV9vZmZzZXQoYml0bWFwLCBqKSwKKwkJCQkJCSAgICAgICBwYWRkcik7CiAJCQkJa3VubWFwX2F0b21pYyhwYWRkciwgS01fVVNFUjApOwogCQkJfQogCQl9IGVsc2UKQEAgLTEyMDIsNyArMTI0Myw5IEBACiAKICBkb25lOgogCWlmIChiaXRtYXAtPmFsbGNsZWFuID09IDApCi0JCWJpdG1hcC0+bWRkZXYtPnRocmVhZC0+dGltZW91dCA9IGJpdG1hcC0+ZGFlbW9uX3NsZWVwICogSFo7CisJCWJpdG1hcC0+bWRkZXYtPnRocmVhZC0+dGltZW91dCA9IAorCQkJYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwOworCW11dGV4X3VubG9jaygmbWRkZXYtPmJpdG1hcF9pbmZvLm11dGV4KTsKIH0KIAogc3RhdGljIGJpdG1hcF9jb3VudGVyX3QgKmJpdG1hcF9nZXRfY291bnRlcihzdHJ1Y3QgYml0bWFwICpiaXRtYXAsCkBAIC0xMzMyLDYgKzEzNzUsNyBAQAogCQkgICAgYml0bWFwLT5ldmVudHNfY2xlYXJlZCA8IGJpdG1hcC0+bWRkZXYtPmV2ZW50cykgewogCQkJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGJpdG1hcC0+bWRkZXYtPmV2ZW50czsKIAkJCWJpdG1hcC0+bmVlZF9zeW5jID0gMTsKKwkJCXN5c2ZzX25vdGlmeV9kaXJlbnQoYml0bWFwLT5zeXNmc19jYW5fY2xlYXIpOwogCQl9CiAKIAkJaWYgKCFzdWNjZXNzICYmICEgKCpibWMgJiBORUVERURfTUFTSykpCkBAIC0xNDcwLDcgKzE1MTQsNyBAQAogCQlyZXR1cm47CiAJfQogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCAoYml0bWFwLT5sYXN0X2VuZF9zeW5jCi0JCQkJICArIGJpdG1hcC0+ZGFlbW9uX3NsZWVwICogSFopKSkKKwkJCQkgICsgYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwKSkpCiAJCXJldHVybjsKIAl3YWl0X2V2ZW50KGJpdG1hcC0+bWRkZXYtPnJlY292ZXJ5X3dhaXQsCiAJCSAgIGF0b21pY19yZWFkKCZiaXRtYXAtPm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpID09IDApOwpAQCAtMTUyMiw2ICsxNTY2LDEyIEBACiAJCXNlY3Rvcl90IHNlYyA9IChzZWN0b3JfdCljaHVuayA8PCBDSFVOS19CTE9DS19TSElGVChiaXRtYXApOwogCQliaXRtYXBfc2V0X21lbW9yeV9iaXRzKGJpdG1hcCwgc2VjLCAxKTsKIAkJYml0bWFwX2ZpbGVfc2V0X2JpdChiaXRtYXAsIHNlYyk7CisJCWlmIChzZWMgPCBiaXRtYXAtPm1kZGV2LT5yZWNvdmVyeV9jcCkKKwkJCS8qIFdlIGFyZSBhc3NlcnRpbmcgdGhhdCB0aGUgYXJyYXkgaXMgZGlydHksCisJCQkgKiBzbyBtb3ZlIHRoZSByZWNvdmVyeV9jcCBhZGRyZXNzIGJhY2sgc28KKwkJCSAqIHRoYXQgaXQgaXMgb2J2aW91cyB0aGF0IGl0IGlzIGRpcnR5CisJCQkgKi8KKwkJCWJpdG1hcC0+bWRkZXYtPnJlY292ZXJ5X2NwID0gc2VjOwogCX0KIH0KIApAQCAtMTUzMSw3ICsxNTgxLDcgQEAKIHZvaWQgYml0bWFwX2ZsdXNoKG1kZGV2X3QgKm1kZGV2KQogewogCXN0cnVjdCBiaXRtYXAgKmJpdG1hcCA9IG1kZGV2LT5iaXRtYXA7Ci0JaW50IHNsZWVwOworCWxvbmcgc2xlZXA7CiAKIAlpZiAoIWJpdG1hcCkgLyogdGhlcmUgd2FzIG5vIGJpdG1hcCAqLwogCQlyZXR1cm47CkBAIC0xNTM5LDEyICsxNTg5LDEzIEBACiAJLyogcnVuIHRoZSBkYWVtb25fd29yayB0aHJlZSB0aW1lIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGZsdXNoZWQKIAkgKiB0aGF0IGNhbiBiZQogCSAqLwotCXNsZWVwID0gYml0bWFwLT5kYWVtb25fc2xlZXA7Ci0JYml0bWFwLT5kYWVtb25fc2xlZXAgPSAwOwotCWJpdG1hcF9kYWVtb25fd29yayhiaXRtYXApOwotCWJpdG1hcF9kYWVtb25fd29yayhiaXRtYXApOwotCWJpdG1hcF9kYWVtb25fd29yayhiaXRtYXApOwotCWJpdG1hcC0+ZGFlbW9uX3NsZWVwID0gc2xlZXA7CisJc2xlZXAgPSBtZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwICogMjsKKwliaXRtYXAtPmRhZW1vbl9sYXN0cnVuIC09IHNsZWVwOworCWJpdG1hcF9kYWVtb25fd29yayhtZGRldik7CisJYml0bWFwLT5kYWVtb25fbGFzdHJ1biAtPSBzbGVlcDsKKwliaXRtYXBfZGFlbW9uX3dvcmsobWRkZXYpOworCWJpdG1hcC0+ZGFlbW9uX2xhc3RydW4gLT0gc2xlZXA7CisJYml0bWFwX2RhZW1vbl93b3JrKG1kZGV2KTsKIAliaXRtYXBfdXBkYXRlX3NiKGJpdG1hcCk7CiB9CiAKQEAgLTE1NzQsNiArMTYyNSw3IEBACiAJa2ZyZWUoYnApOwogCWtmcmVlKGJpdG1hcCk7CiB9CisKIHZvaWQgYml0bWFwX2Rlc3Ryb3kobWRkZXZfdCAqbWRkZXYpCiB7CiAJc3RydWN0IGJpdG1hcCAqYml0bWFwID0gbWRkZXYtPmJpdG1hcDsKQEAgLTE1ODEsMTAgKzE2MzMsMTUgQEAKIAlpZiAoIWJpdG1hcCkgLyogdGhlcmUgd2FzIG5vIGJpdG1hcCAqLwogCQlyZXR1cm47CiAKKwltdXRleF9sb2NrKCZtZGRldi0+Yml0bWFwX2luZm8ubXV0ZXgpOwogCW1kZGV2LT5iaXRtYXAgPSBOVUxMOyAvKiBkaXNjb25uZWN0IGZyb20gdGhlIG1kIGRldmljZSAqLworCW11dGV4X3VubG9jaygmbWRkZXYtPmJpdG1hcF9pbmZvLm11dGV4KTsKIAlpZiAobWRkZXYtPnRocmVhZCkKIAkJbWRkZXYtPnRocmVhZC0+dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCisJaWYgKGJpdG1hcC0+c3lzZnNfY2FuX2NsZWFyKQorCQlzeXNmc19wdXQoYml0bWFwLT5zeXNmc19jYW5fY2xlYXIpOworCiAJYml0bWFwX2ZyZWUoYml0bWFwKTsKIH0KIApAQCAtMTU5OCwxNiArMTY1NSwxNyBAQAogCXNlY3Rvcl90IGJsb2NrcyA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7CiAJdW5zaWduZWQgbG9uZyBjaHVua3M7CiAJdW5zaWduZWQgbG9uZyBwYWdlczsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1kZGV2LT5iaXRtYXBfZmlsZTsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1kZGV2LT5iaXRtYXBfaW5mby5maWxlOwogCWludCBlcnI7CiAJc2VjdG9yX3Qgc3RhcnQ7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYm07CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGJpdG1hcF9zdXBlcl90KSAhPSAyNTYpOwogCi0JaWYgKCFmaWxlICYmICFtZGRldi0+Yml0bWFwX29mZnNldCkgLyogYml0bWFwIGRpc2FibGVkLCBub3RoaW5nIHRvIGRvICovCisJaWYgKCFmaWxlICYmICFtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KSAvKiBiaXRtYXAgZGlzYWJsZWQsIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0dXJuIDA7CiAKLQlCVUdfT04oZmlsZSAmJiBtZGRldi0+Yml0bWFwX29mZnNldCk7CisJQlVHX09OKGZpbGUgJiYgbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCk7CiAKIAliaXRtYXAgPSBremFsbG9jKHNpemVvZigqYml0bWFwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFiaXRtYXApCkBAIC0xNjIwLDggKzE2NzgsMTQgQEAKIAogCWJpdG1hcC0+bWRkZXYgPSBtZGRldjsKIAorCWJtID0gc3lzZnNfZ2V0X2RpcmVudChtZGRldi0+a29iai5zZCwgImJpdG1hcCIpOworCWlmIChibSkgeworCQliaXRtYXAtPnN5c2ZzX2Nhbl9jbGVhciA9IHN5c2ZzX2dldF9kaXJlbnQoYm0sICJjYW5fY2xlYXIiKTsKKwkJc3lzZnNfcHV0KGJtKTsKKwl9IGVsc2UKKwkJYml0bWFwLT5zeXNmc19jYW5fY2xlYXIgPSBOVUxMOworCiAJYml0bWFwLT5maWxlID0gZmlsZTsKLQliaXRtYXAtPm9mZnNldCA9IG1kZGV2LT5iaXRtYXBfb2Zmc2V0OwogCWlmIChmaWxlKSB7CiAJCWdldF9maWxlKGZpbGUpOwogCQkvKiBBcyBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBmaWxlIHdpbGwgdXNlIGJtYXAsCkBAIC0xNjMwLDEyICsxNjk0LDIyIEBACiAJCSAqLwogCQl2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnksIDEpOwogCX0KLQkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIGJpdG1hcC0+Y2h1bmtzaXplKSAqLwotCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CisJLyogcmVhZCBzdXBlcmJsb2NrIGZyb20gYml0bWFwIGZpbGUgKHRoaXMgc2V0cyBtZGRldi0+Yml0bWFwX2luZm8uY2h1bmtzaXplKSAqLworCWlmICghbWRkZXYtPmJpdG1hcF9pbmZvLmV4dGVybmFsKQorCQllcnIgPSBiaXRtYXBfcmVhZF9zYihiaXRtYXApOworCWVsc2UgeworCQllcnIgPSAwOworCQlpZiAobWRkZXYtPmJpdG1hcF9pbmZvLmNodW5rc2l6ZSA9PSAwIHx8CisJCSAgICBtZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID09IDApCisJCQkvKiBjaHVua3NpemUgYW5kIHRpbWVfYmFzZSBuZWVkIHRvIGJlCisJCQkgKiBzZXQgZmlyc3QuICovCisJCQllcnIgPSAtRUlOVkFMOworCX0KIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCi0JYml0bWFwLT5jaHVua3NoaWZ0ID0gZmZ6KH5iaXRtYXAtPmNodW5rc2l6ZSk7CisJYml0bWFwLT5kYWVtb25fbGFzdHJ1biA9IGppZmZpZXM7CisJYml0bWFwLT5jaHVua3NoaWZ0ID0gZmZ6KH5tZGRldi0+Yml0bWFwX2luZm8uY2h1bmtzaXplKTsKIAogCS8qIG5vdyB0aGF0IGNodW5rc2l6ZSBhbmQgY2h1bmtzaGlmdCBhcmUgc2V0LCB3ZSBjYW4gdXNlIHRoZXNlIG1hY3JvcyAqLwogIAljaHVua3MgPSAoYmxvY2tzICsgQ0hVTktfQkxPQ0tfUkFUSU8oYml0bWFwKSAtIDEpID4+CkBAIC0xNjc3LDcgKzE3NTEsOCBAQAogCiAJbWRkZXYtPmJpdG1hcCA9IGJpdG1hcDsKIAotCW1kZGV2LT50aHJlYWQtPnRpbWVvdXQgPSBiaXRtYXAtPmRhZW1vbl9zbGVlcCAqIEhaOworCW1kZGV2LT50aHJlYWQtPnRpbWVvdXQgPSBtZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAKIAliaXRtYXBfdXBkYXRlX3NiKGJpdG1hcCk7CiAKQEAgLTE2ODgsNiArMTc2MywyNjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgc3NpemVfdAorbG9jYXRpb25fc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlzc2l6ZV90IGxlbjsKKwlpZiAobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpIHsKKwkJbGVuID0gc3ByaW50ZihwYWdlLCAiZmlsZSIpOworCX0gZWxzZSBpZiAobWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCkgeworCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlK2xsZCIsIChsb25nIGxvbmcpbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCk7CisJfSBlbHNlCisJCWxlbiA9IHNwcmludGYocGFnZSwgIm5vbmUiKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIlxuIik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QKK2xvY2F0aW9uX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisKKwlpZiAobWRkZXYtPnBlcnMpIHsKKwkJaWYgKCFtZGRldi0+cGVycy0+cXVpZXNjZSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChtZGRldi0+cmVjb3ZlcnkgfHwgbWRkZXYtPnN5bmNfdGhyZWFkKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAobWRkZXYtPmJpdG1hcCB8fCBtZGRldi0+Yml0bWFwX2luZm8uZmlsZSB8fAorCSAgICBtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KSB7CisJCS8qIGJpdG1hcCBhbHJlYWR5IGNvbmZpZ3VyZWQuICBPbmx5IG9wdGlvbiBpcyB0byBjbGVhciBpdCAqLworCQlpZiAoc3RybmNtcChidWYsICJub25lIiwgNCkgIT0gMCkKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChtZGRldi0+cGVycykgeworCQkJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDEpOworCQkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOworCQkJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDApOworCQl9CisJCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPSAwOworCQlpZiAobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpIHsKKwkJCXN0cnVjdCBmaWxlICpmID0gbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGU7CisJCQltZGRldi0+Yml0bWFwX2luZm8uZmlsZSA9IE5VTEw7CisJCQlyZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3MoZik7CisJCQlmcHV0KGYpOworCQl9CisJfSBlbHNlIHsKKwkJLyogTm8gYml0bWFwLCBPSyB0byBzZXQgYSBsb2NhdGlvbiAqLworCQlsb25nIGxvbmcgb2Zmc2V0OworCQlpZiAoc3RybmNtcChidWYsICJub25lIiwgNCkgPT0gMCkKKwkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSAqLzsKKwkJZWxzZSBpZiAoc3RybmNtcChidWYsICJmaWxlOiIsIDUpID09IDApIHsKKwkJCS8qIE5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWludCBydjsKKwkJCWlmIChidWZbMF0gPT0gJysnKQorCQkJCXJ2ID0gc3RyaWN0X3N0cnRvbGwoYnVmKzEsIDEwLCAmb2Zmc2V0KTsKKwkJCWVsc2UKKwkJCQlydiA9IHN0cmljdF9zdHJ0b2xsKGJ1ZiwgMTAsICZvZmZzZXQpOworCQkJaWYgKHJ2KQorCQkJCXJldHVybiBydjsKKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChtZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwgPT0gMCAmJgorCQkJICAgIG1kZGV2LT5tYWpvcl92ZXJzaW9uID09IDAgJiYKKwkJCSAgICBvZmZzZXQgIT0gbWRkZXYtPmJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IG9mZnNldDsKKwkJCWlmIChtZGRldi0+cGVycykgeworCQkJCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAxKTsKKwkJCQlydiA9IGJpdG1hcF9jcmVhdGUobWRkZXYpOworCQkJCWlmIChydikgeworCQkJCQliaXRtYXBfZGVzdHJveShtZGRldik7CisJCQkJCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPSAwOworCQkJCX0KKwkJCQltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMCk7CisJCQkJaWYgKHJ2KQorCQkJCQlyZXR1cm4gcnY7CisJCQl9CisJCX0KKwl9CisJaWYgKCFtZGRldi0+ZXh0ZXJuYWwpIHsKKwkJLyogRW5zdXJlIG5ldyBiaXRtYXAgaW5mbyBpcyBzdG9yZWQgaW4KKwkJICogbWV0YWRhdGEgcHJvbXB0bHkuCisJCSAqLworCQlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBiaXRtYXBfbG9jYXRpb24gPQorX19BVFRSKGxvY2F0aW9uLCBTX0lSVUdPfFNfSVdVU1IsIGxvY2F0aW9uX3Nob3csIGxvY2F0aW9uX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QKK3RpbWVvdXRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlzc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBsb25nIHNlY3MgPSBtZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwIC8gSFo7CisJdW5zaWduZWQgbG9uZyBqaWZzID0gbWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcCAlIEhaOworCQorCWxlbiA9IHNwcmludGYocGFnZSwgIiVsdSIsIHNlY3MpOworCWlmIChqaWZzKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIi4lMDN1IiwgamlmZmllc190b19tc2VjcyhqaWZzKSk7CisJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJcbiIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit0aW1lb3V0X3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJLyogdGltZW91dCBjYW4gYmUgc2V0IGF0IGFueSB0aW1lICovCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCBydiA9IHN0cmljdF9zdHJ0b3VsX3NjYWxlZChidWYsICZ0aW1lb3V0LCA0KTsKKwlpZiAocnYpCisJCXJldHVybiBydjsKKworCS8qIGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93Li4uICovCisJaWYgKHRpbWVvdXQgPj0gTE9OR19NQVggLyBIWikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0aW1lb3V0ID0gdGltZW91dCAqIEhaIC8gMTAwMDA7CisKKwlpZiAodGltZW91dCA+PSBNQVhfU0NIRURVTEVfVElNRU9VVCkKKwkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VULTE7CisJaWYgKHRpbWVvdXQgPCAxKQorCQl0aW1lb3V0ID0gMTsKKwltZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID0gdGltZW91dDsKKwlpZiAobWRkZXYtPnRocmVhZCkgeworCQkvKiBpZiB0aHJlYWQtPnRpbWVvdXQgaXMgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIHRoZW4KKwkJICogdGhlIGJpdG1hcCBpcyBhbGwgY2xlYW4gYW5kIHdlIGRvbid0IG5lZWQgdG8KKwkJICogYWRqdXN0IHRoZSB0aW1lb3V0IHJpZ2h0IG5vdworCQkgKi8KKwkJaWYgKG1kZGV2LT50aHJlYWQtPnRpbWVvdXQgPCBNQVhfU0NIRURVTEVfVElNRU9VVCkgeworCQkJbWRkZXYtPnRocmVhZC0+dGltZW91dCA9IHRpbWVvdXQ7CisJCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgYml0bWFwX3RpbWVvdXQgPQorX19BVFRSKHRpbWVfYmFzZSwgU19JUlVHT3xTX0lXVVNSLCB0aW1lb3V0X3Nob3csIHRpbWVvdXRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdAorYmFja2xvZ19zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbHVcbiIsIG1kZGV2LT5iaXRtYXBfaW5mby5tYXhfd3JpdGVfYmVoaW5kKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JhY2tsb2dfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGJhY2tsb2c7CisJaW50IHJ2ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJmJhY2tsb2cpOworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCWlmIChiYWNrbG9nID4gQ09VTlRFUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCW1kZGV2LT5iaXRtYXBfaW5mby5tYXhfd3JpdGVfYmVoaW5kID0gYmFja2xvZzsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IGJpdG1hcF9iYWNrbG9nID0KK19fQVRUUihiYWNrbG9nLCBTX0lSVUdPfFNfSVdVU1IsIGJhY2tsb2dfc2hvdywgYmFja2xvZ19zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90CitjaHVua3NpemVfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWx1XG4iLCBtZGRldi0+Yml0bWFwX2luZm8uY2h1bmtzaXplKTsKK30KKworc3RhdGljIHNzaXplX3QKK2NodW5rc2l6ZV9zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCS8qIENhbiBvbmx5IGJlIGNoYW5nZWQgd2hlbiBubyBiaXRtYXAgaXMgYWN0aXZlICovCisJaW50IHJ2OworCXVuc2lnbmVkIGxvbmcgY3NpemU7CisJaWYgKG1kZGV2LT5iaXRtYXApCisJCXJldHVybiAtRUJVU1k7CisJcnYgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmY3NpemUpOworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCWlmIChjc2l6ZSA8IDUxMiB8fAorCSAgICAhaXNfcG93ZXJfb2ZfMihjc2l6ZSkpCisJCXJldHVybiAtRUlOVkFMOworCW1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUgPSBjc2l6ZTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IGJpdG1hcF9jaHVua3NpemUgPQorX19BVFRSKGNodW5rc2l6ZSwgU19JUlVHT3xTX0lXVVNSLCBjaHVua3NpemVfc2hvdywgY2h1bmtzaXplX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgbWV0YWRhdGFfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIChtZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwKKwkJCQkgICAgICA/ICJleHRlcm5hbCIgOiAiaW50ZXJuYWwiKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1ldGFkYXRhX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJaWYgKG1kZGV2LT5iaXRtYXAgfHwKKwkgICAgbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUgfHwKKwkgICAgbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoc3RybmNtcChidWYsICJleHRlcm5hbCIsIDgpID09IDApCisJCW1kZGV2LT5iaXRtYXBfaW5mby5leHRlcm5hbCA9IDE7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICJpbnRlcm5hbCIsIDgpID09IDApCisJCW1kZGV2LT5iaXRtYXBfaW5mby5leHRlcm5hbCA9IDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IGJpdG1hcF9tZXRhZGF0YSA9CitfX0FUVFIobWV0YWRhdGEsIFNfSVJVR098U19JV1VTUiwgbWV0YWRhdGFfc2hvdywgbWV0YWRhdGFfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBjYW5fY2xlYXJfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlpbnQgbGVuOworCWlmIChtZGRldi0+Yml0bWFwKQorCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlc1xuIiwgKG1kZGV2LT5iaXRtYXAtPm5lZWRfc3luYyA/CisJCQkJCSAgICAgImZhbHNlIiA6ICJ0cnVlIikpOworCWVsc2UKKwkJbGVuID0gc3ByaW50ZihwYWdlLCAiXG4iKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBjYW5fY2xlYXJfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpZiAobWRkZXYtPmJpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlpZiAoc3RybmNtcChidWYsICJmYWxzZSIsIDUpID09IDApCisJCW1kZGV2LT5iaXRtYXAtPm5lZWRfc3luYyA9IDE7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICJ0cnVlIiwgNCkgPT0gMCkgeworCQlpZiAobWRkZXYtPmRlZ3JhZGVkKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJbWRkZXYtPmJpdG1hcC0+bmVlZF9zeW5jID0gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBiaXRtYXBfY2FuX2NsZWFyID0KK19fQVRUUihjYW5fY2xlYXIsIFNfSVJVR098U19JV1VTUiwgY2FuX2NsZWFyX3Nob3csIGNhbl9jbGVhcl9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZF9iaXRtYXBfYXR0cnNbXSA9IHsKKwkmYml0bWFwX2xvY2F0aW9uLmF0dHIsCisJJmJpdG1hcF90aW1lb3V0LmF0dHIsCisJJmJpdG1hcF9iYWNrbG9nLmF0dHIsCisJJmJpdG1hcF9jaHVua3NpemUuYXR0ciwKKwkmYml0bWFwX21ldGFkYXRhLmF0dHIsCisJJmJpdG1hcF9jYW5fY2xlYXIuYXR0ciwKKwlOVUxMCit9Oworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZF9iaXRtYXBfZ3JvdXAgPSB7CisJLm5hbWUgPSAiYml0bWFwIiwKKwkuYXR0cnMgPSBtZF9iaXRtYXBfYXR0cnMsCit9OworCisKIC8qIHRoZSBiaXRtYXAgQVBJIC0tIGZvciByYWlkIHBlcnNvbmFsaXRpZXMgKi8KIEVYUE9SVF9TWU1CT0woYml0bWFwX3N0YXJ0d3JpdGUpOwogRVhQT1JUX1NZTUJPTChiaXRtYXBfZW5kd3JpdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuaCBiL2RyaXZlcnMvbWQvYml0bWFwLmgKaW5kZXggZTk4OTAwNi4uY2I4MjFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuaAorKysgYi9kcml2ZXJzL21kL2JpdG1hcC5oCkBAIC0xMDYsNyArMTA2LDcgQEAKICNkZWZpbmUgQklUTUFQX0JMT0NLX1NISUZUIDkKIAogLyogaG93IG1hbnkgYmxvY2tzIHBlciBjaHVuaz8gKHRoaXMgaXMgdmFyaWFibGUpICovCi0jZGVmaW5lIENIVU5LX0JMT0NLX1JBVElPKGJpdG1hcCkgKChiaXRtYXApLT5jaHVua3NpemUgPj4gQklUTUFQX0JMT0NLX1NISUZUKQorI2RlZmluZSBDSFVOS19CTE9DS19SQVRJTyhiaXRtYXApICgoYml0bWFwKS0+bWRkZXYtPmJpdG1hcF9pbmZvLmNodW5rc2l6ZSA+PiBCSVRNQVBfQkxPQ0tfU0hJRlQpCiAjZGVmaW5lIENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkgKChiaXRtYXApLT5jaHVua3NoaWZ0IC0gQklUTUFQX0JMT0NLX1NISUZUKQogI2RlZmluZSBDSFVOS19CTE9DS19NQVNLKGJpdG1hcCkgKENIVU5LX0JMT0NLX1JBVElPKGJpdG1hcCkgLSAxKQogCkBAIC0xMTgsMTYgKzExOCw2IEBACiAJCQkoQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSArIFBBR0VfQ09VTlRFUl9TSElGVCAtIDEpCiAjZGVmaW5lIFBBR0VQVFJfQkxPQ0tfTUFTSyhiaXRtYXApIChQQUdFUFRSX0JMT0NLX1JBVElPKGJpdG1hcCkgLSAxKQogCi0vKgotICogb24tZGlzayBiaXRtYXA6Ci0gKgotICogVXNlIG9uZSBiaXQgcGVyICJjaHVuayIgKGJsb2NrIHNldCkuIFdlIGRvIHRoZSBkaXNrIEkvTyBvbiB0aGUgYml0bWFwCi0gKiBmaWxlIGEgcGFnZSBhdCBhIHRpbWUuIFRoZXJlJ3MgYSBzdXBlcmJsb2NrIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KLSAqLwotCi0vKiBtYXAgY2h1bmtzIChiaXRzKSB0byBmaWxlIHBhZ2VzIC0gb2Zmc2V0IGJ5IHRoZSBzaXplIG9mIHRoZSBzdXBlcmJsb2NrICovCi0jZGVmaW5lIENIVU5LX0JJVF9PRkZTRVQoY2h1bmspICgoY2h1bmspICsgKHNpemVvZihiaXRtYXBfc3VwZXJfdCkgPDwgMykpCi0KICNlbmRpZgogCiAvKgpAQCAtMjA5LDcgKzE5OSw2IEBACiAJaW50IGNvdW50ZXJfYml0czsgLyogaG93IG1hbnkgYml0cyBwZXIgYmxvY2sgY291bnRlciAqLwogCiAJLyogYml0bWFwIGNodW5rc2l6ZSAtLSBob3cgbXVjaCBkYXRhIGRvZXMgZWFjaCBiaXQgcmVwcmVzZW50PyAqLwotCXVuc2lnbmVkIGxvbmcgY2h1bmtzaXplOwogCXVuc2lnbmVkIGxvbmcgY2h1bmtzaGlmdDsgLyogY2h1bmtzaXplID0gMl5jaHVua3NoaWZ0IChmb3IgYml0b3BzKSAqLwogCXVuc2lnbmVkIGxvbmcgY2h1bmtzOyAvKiB0b3RhbCBudW1iZXIgb2YgZGF0YSBjaHVua3MgZm9yIHRoZSBhcnJheSAqLwogCkBAIC0yMjYsNyArMjE1LDYgQEAKIAkvKiBiaXRtYXAgc3BpbmxvY2sgKi8KIAlzcGlubG9ja190IGxvY2s7CiAKLQlsb25nIG9mZnNldDsgLyogb2Zmc2V0IGZyb20gc3VwZXJibG9jayBpZiBmaWxlIGlzIE5VTEwgKi8KIAlzdHJ1Y3QgZmlsZSAqZmlsZTsgLyogYmFja2luZyBkaXNrIGZpbGUgKi8KIAlzdHJ1Y3QgcGFnZSAqc2JfcGFnZTsgLyogY2FjaGVkIGNvcHkgb2YgdGhlIGJpdG1hcCBmaWxlIHN1cGVyYmxvY2sgKi8KIAlzdHJ1Y3QgcGFnZSAqKmZpbGVtYXA7IC8qIGxpc3Qgb2YgY2FjaGUgcGFnZXMgZm9yIHRoZSBmaWxlICovCkBAIC0yMzgsNyArMjI2LDYgQEAKIAogCWludCBhbGxjbGVhbjsKIAotCXVuc2lnbmVkIGxvbmcgbWF4X3dyaXRlX2JlaGluZDsgLyogd3JpdGUtYmVoaW5kIG1vZGUgKi8KIAlhdG9taWNfdCBiZWhpbmRfd3JpdGVzOwogCiAJLyoKQEAgLTI0Niw3ICsyMzMsNiBAQAogCSAqIGZpbGUsIGNsZWFuaW5nIHVwIGJpdHMgYW5kIGZsdXNoaW5nIG91dCBwYWdlcyB0byBkaXNrIGFzIG5lY2Vzc2FyeQogCSAqLwogCXVuc2lnbmVkIGxvbmcgZGFlbW9uX2xhc3RydW47IC8qIGppZmZpZXMgb2YgbGFzdCBydW4gKi8KLQl1bnNpZ25lZCBsb25nIGRhZW1vbl9zbGVlcDsgLyogaG93IG1hbnkgc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXM/ICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X2VuZF9zeW5jOyAvKiB3aGVuIHdlIGxhc3RlZCBjYWxsZWQgZW5kX3N5bmMgdG8KIAkJCQkgICAgICAqIHVwZGF0ZSBiaXRtYXAgd2l0aCByZXN5bmMgcHJvZ3Jlc3MgKi8KIApAQCAtMjU0LDYgKzI0MCw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvdmVyZmxvd193YWl0OwogCisJc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfY2FuX2NsZWFyOwogfTsKIAogLyogdGhlIGJpdG1hcCBBUEkgKi8KQEAgLTI4Miw3ICsyNjksNyBAQAogdm9pZCBiaXRtYXBfY29uZF9lbmRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IHNlY3Rvcik7CiAKIHZvaWQgYml0bWFwX3VucGx1ZyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApOwotdm9pZCBiaXRtYXBfZGFlbW9uX3dvcmsoc3RydWN0IGJpdG1hcCAqYml0bWFwKTsKK3ZvaWQgYml0bWFwX2RhZW1vbl93b3JrKG1kZGV2X3QgKm1kZGV2KTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCBlNDEyOTgwLi5hOTM2MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBDaHJpc3RvcGhlIFNhb3V0IDxjaHJpc3RvcGhlQHNhb3V0LmRlPgogICogQ29weXJpZ2h0IChDKSAyMDA0IENsZW1lbnMgRnJ1aHdpcnRoIDxjbGVtZW5zQGVuZG9ycGhpbi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KQEAgLTcxLDEwICs3MSwyMSBAQAogCWludCAoKmN0cikoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsIHN0cnVjdCBkbV90YXJnZXQgKnRpLAogCQkgICBjb25zdCBjaGFyICpvcHRzKTsKIAl2b2lkICgqZHRyKShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyk7Ci0JY29uc3QgY2hhciAqKCpzdGF0dXMpKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjKTsKKwlpbnQgKCppbml0KShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyk7CisJaW50ICgqd2lwZSkoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MpOwogCWludCAoKmdlbmVyYXRvcikoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsIHU4ICppdiwgc2VjdG9yX3Qgc2VjdG9yKTsKIH07CiAKK3N0cnVjdCBpdl9lc3Npdl9wcml2YXRlIHsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaF90Zm07CisJdTggKnNhbHQ7Cit9OworCitzdHJ1Y3QgaXZfYmVuYmlfcHJpdmF0ZSB7CisJaW50IHNoaWZ0OworfTsKKwogLyoKICAqIENyeXB0OiBtYXBzIGEgbGluZWFyIHJhbmdlIG9mIGEgYmxvY2sgZGV2aWNlCiAgKiBhbmQgZW5jcnlwdHMgLyBkZWNyeXB0cyBhdCB0aGUgc2FtZSB0aW1lLgpAQCAtMTAyLDggKzExMyw4IEBACiAJc3RydWN0IGNyeXB0X2l2X29wZXJhdGlvbnMgKml2X2dlbl9vcHM7CiAJY2hhciAqaXZfbW9kZTsKIAl1bmlvbiB7Ci0JCXN0cnVjdCBjcnlwdG9fY2lwaGVyICplc3Npdl90Zm07Ci0JCWludCBiZW5iaV9zaGlmdDsKKwkJc3RydWN0IGl2X2Vzc2l2X3ByaXZhdGUgZXNzaXY7CisJCXN0cnVjdCBpdl9iZW5iaV9wcml2YXRlIGJlbmJpOwogCX0gaXZfZ2VuX3ByaXZhdGU7CiAJc2VjdG9yX3QgaXZfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBpdl9zaXplOwpAQCAtMTQ3LDYgKzE1OCw5IEBACiAgKiBwbGFpbjogdGhlIGluaXRpYWwgdmVjdG9yIGlzIHRoZSAzMi1iaXQgbGl0dGxlLWVuZGlhbiB2ZXJzaW9uIG9mIHRoZSBzZWN0b3IKICAqICAgICAgICBudW1iZXIsIHBhZGRlZCB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeS4KICAqCisgKiBwbGFpbjY0OiB0aGUgaW5pdGlhbCB2ZWN0b3IgaXMgdGhlIDY0LWJpdCBsaXR0bGUtZW5kaWFuIHZlcnNpb24gb2YgdGhlIHNlY3RvcgorICogICAgICAgIG51bWJlciwgcGFkZGVkIHdpdGggemVyb3MgaWYgbmVjZXNzYXJ5LgorICoKICAqIGVzc2l2OiAiZW5jcnlwdGVkIHNlY3RvcnxzYWx0IGluaXRpYWwgdmVjdG9yIiwgdGhlIHNlY3RvciBudW1iZXIgaXMKICAqICAgICAgICBlbmNyeXB0ZWQgd2l0aCB0aGUgYnVsayBjaXBoZXIgdXNpbmcgYSBzYWx0IGFzIGtleS4gVGhlIHNhbHQKICAqICAgICAgICBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIHRoZSBidWxrIGNpcGhlcidzIGtleSB2aWEgaGFzaGluZy4KQEAgLTE2OSw4OCArMTgzLDEyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNyeXB0X2l2X3BsYWluNjRfZ2VuKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLCB1OCAqaXYsCisJCQkJc2VjdG9yX3Qgc2VjdG9yKQoreworCW1lbXNldChpdiwgMCwgY2MtPml2X3NpemUpOworCSoodTY0ICopaXYgPSBjcHVfdG9fbGU2NChzZWN0b3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEluaXRpYWxpc2UgRVNTSVYgLSBjb21wdXRlIHNhbHQgYnV0IG5vIGxvY2FsIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworc3RhdGljIGludCBjcnlwdF9pdl9lc3Npdl9pbml0KHN0cnVjdCBjcnlwdF9jb25maWcgKmNjKQoreworCXN0cnVjdCBpdl9lc3Npdl9wcml2YXRlICplc3NpdiA9ICZjYy0+aXZfZ2VuX3ByaXZhdGUuZXNzaXY7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlpbnQgZXJyOworCisJc2dfaW5pdF9vbmUoJnNnLCBjYy0+a2V5LCBjYy0+a2V5X3NpemUpOworCWRlc2MudGZtID0gZXNzaXYtPmhhc2hfdGZtOworCWRlc2MuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwllcnIgPSBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZzZywgY2MtPmtleV9zaXplLCBlc3Npdi0+c2FsdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBjcnlwdG9fY2lwaGVyX3NldGtleShlc3Npdi0+dGZtLCBlc3Npdi0+c2FsdCwKKwkJCQkgICAgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlc3Npdi0+aGFzaF90Zm0pKTsKK30KKworLyogV2lwZSBzYWx0IGFuZCByZXNldCBrZXkgZGVyaXZlZCBmcm9tIHZvbHVtZSBrZXkgKi8KK3N0YXRpYyBpbnQgY3J5cHRfaXZfZXNzaXZfd2lwZShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYykKK3sKKwlzdHJ1Y3QgaXZfZXNzaXZfcHJpdmF0ZSAqZXNzaXYgPSAmY2MtPml2X2dlbl9wcml2YXRlLmVzc2l2OworCXVuc2lnbmVkIHNhbHRfc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZXNzaXYtPmhhc2hfdGZtKTsKKworCW1lbXNldChlc3Npdi0+c2FsdCwgMCwgc2FsdF9zaXplKTsKKworCXJldHVybiBjcnlwdG9fY2lwaGVyX3NldGtleShlc3Npdi0+dGZtLCBlc3Npdi0+c2FsdCwgc2FsdF9zaXplKTsKK30KKworc3RhdGljIHZvaWQgY3J5cHRfaXZfZXNzaXZfZHRyKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjKQoreworCXN0cnVjdCBpdl9lc3Npdl9wcml2YXRlICplc3NpdiA9ICZjYy0+aXZfZ2VuX3ByaXZhdGUuZXNzaXY7CisKKwljcnlwdG9fZnJlZV9jaXBoZXIoZXNzaXYtPnRmbSk7CisJZXNzaXYtPnRmbSA9IE5VTEw7CisKKwljcnlwdG9fZnJlZV9oYXNoKGVzc2l2LT5oYXNoX3RmbSk7CisJZXNzaXYtPmhhc2hfdGZtID0gTlVMTDsKKworCWt6ZnJlZShlc3Npdi0+c2FsdCk7CisJZXNzaXYtPnNhbHQgPSBOVUxMOworfQorCiBzdGF0aWMgaW50IGNyeXB0X2l2X2Vzc2l2X2N0cihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgc3RydWN0IGRtX3RhcmdldCAqdGksCiAJCQkgICAgICBjb25zdCBjaGFyICpvcHRzKQogewotCXN0cnVjdCBjcnlwdG9fY2lwaGVyICplc3Npdl90Zm07Ci0Jc3RydWN0IGNyeXB0b19oYXNoICpoYXNoX3RmbTsKLQlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwotCXVuc2lnbmVkIGludCBzYWx0c2l6ZTsKLQl1OCAqc2FsdDsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqZXNzaXZfdGZtID0gTlVMTDsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2hfdGZtID0gTlVMTDsKKwl1OCAqc2FsdCA9IE5VTEw7CiAJaW50IGVycjsKIAotCWlmIChvcHRzID09IE5VTEwpIHsKKwlpZiAoIW9wdHMpIHsKIAkJdGktPmVycm9yID0gIkRpZ2VzdCBhbGdvcml0aG0gbWlzc2luZyBmb3IgRVNTSVYgbW9kZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEhhc2ggdGhlIGNpcGhlciBrZXkgd2l0aCB0aGUgZ2l2ZW4gaGFzaCBhbGdvcml0aG0gKi8KKwkvKiBBbGxvY2F0ZSBoYXNoIGFsZ29yaXRobSAqLwogCWhhc2hfdGZtID0gY3J5cHRvX2FsbG9jX2hhc2gob3B0cywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihoYXNoX3RmbSkpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGluaXRpYWxpemluZyBFU1NJViBoYXNoIjsKLQkJcmV0dXJuIFBUUl9FUlIoaGFzaF90Zm0pOworCQllcnIgPSBQVFJfRVJSKGhhc2hfdGZtKTsKKwkJZ290byBiYWQ7CiAJfQogCi0Jc2FsdHNpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGhhc2hfdGZtKTsKLQlzYWx0ID0ga21hbGxvYyhzYWx0c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNhbHQgPT0gTlVMTCkgeworCXNhbHQgPSBremFsbG9jKGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoaGFzaF90Zm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhbHQpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGttYWxsb2Npbmcgc2FsdCBzdG9yYWdlIGluIEVTU0lWIjsKLQkJY3J5cHRvX2ZyZWVfaGFzaChoYXNoX3RmbSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhZDsKIAl9CiAKLQlzZ19pbml0X29uZSgmc2csIGNjLT5rZXksIGNjLT5rZXlfc2l6ZSk7Ci0JZGVzYy50Zm0gPSBoYXNoX3RmbTsKLQlkZXNjLmZsYWdzID0gQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOwotCWVyciA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnNnLCBjYy0+a2V5X3NpemUsIHNhbHQpOwotCWNyeXB0b19mcmVlX2hhc2goaGFzaF90Zm0pOwotCi0JaWYgKGVycikgewotCQl0aS0+ZXJyb3IgPSAiRXJyb3IgY2FsY3VsYXRpbmcgaGFzaCBpbiBFU1NJViI7Ci0JCWtmcmVlKHNhbHQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldHVwIHRoZSBlc3Npdl90Zm0gd2l0aCB0aGUgZ2l2ZW4gc2FsdCAqLworCS8qIEFsbG9jYXRlIGVzc2l2X3RmbSAqLwogCWVzc2l2X3RmbSA9IGNyeXB0b19hbGxvY19jaXBoZXIoY2MtPmNpcGhlciwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihlc3Npdl90Zm0pKSB7CiAJCXRpLT5lcnJvciA9ICJFcnJvciBhbGxvY2F0aW5nIGNyeXB0byB0Zm0gZm9yIEVTU0lWIjsKLQkJa2ZyZWUoc2FsdCk7Ci0JCXJldHVybiBQVFJfRVJSKGVzc2l2X3RmbSk7CisJCWVyciA9IFBUUl9FUlIoZXNzaXZfdGZtKTsKKwkJZ290byBiYWQ7CiAJfQogCWlmIChjcnlwdG9fY2lwaGVyX2Jsb2Nrc2l6ZShlc3Npdl90Zm0pICE9CiAJICAgIGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShjYy0+dGZtKSkgewogCQl0aS0+ZXJyb3IgPSAiQmxvY2sgc2l6ZSBvZiBFU1NJViBjaXBoZXIgZG9lcyAiCiAJCQkgICAgIm5vdCBtYXRjaCBJViBzaXplIG9mIGJsb2NrIGNpcGhlciI7Ci0JCWNyeXB0b19mcmVlX2NpcGhlcihlc3Npdl90Zm0pOwotCQlrZnJlZShzYWx0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gYmFkOwogCX0KLQllcnIgPSBjcnlwdG9fY2lwaGVyX3NldGtleShlc3Npdl90Zm0sIHNhbHQsIHNhbHRzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCXRpLT5lcnJvciA9ICJGYWlsZWQgdG8gc2V0IGtleSBmb3IgRVNTSVYgY2lwaGVyIjsKLQkJY3J5cHRvX2ZyZWVfY2lwaGVyKGVzc2l2X3RmbSk7Ci0JCWtmcmVlKHNhbHQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlrZnJlZShzYWx0KTsKIAotCWNjLT5pdl9nZW5fcHJpdmF0ZS5lc3Npdl90Zm0gPSBlc3Npdl90Zm07CisJY2MtPml2X2dlbl9wcml2YXRlLmVzc2l2LnNhbHQgPSBzYWx0OworCWNjLT5pdl9nZW5fcHJpdmF0ZS5lc3Npdi50Zm0gPSBlc3Npdl90Zm07CisJY2MtPml2X2dlbl9wcml2YXRlLmVzc2l2Lmhhc2hfdGZtID0gaGFzaF90Zm07CisKIAlyZXR1cm4gMDsKLX0KIAotc3RhdGljIHZvaWQgY3J5cHRfaXZfZXNzaXZfZHRyKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjKQotewotCWNyeXB0b19mcmVlX2NpcGhlcihjYy0+aXZfZ2VuX3ByaXZhdGUuZXNzaXZfdGZtKTsKLQljYy0+aXZfZ2VuX3ByaXZhdGUuZXNzaXZfdGZtID0gTlVMTDsKK2JhZDoKKwlpZiAoZXNzaXZfdGZtICYmICFJU19FUlIoZXNzaXZfdGZtKSkKKwkJY3J5cHRvX2ZyZWVfY2lwaGVyKGVzc2l2X3RmbSk7CisJaWYgKGhhc2hfdGZtICYmICFJU19FUlIoaGFzaF90Zm0pKQorCQljcnlwdG9fZnJlZV9oYXNoKGhhc2hfdGZtKTsKKwlrZnJlZShzYWx0KTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGNyeXB0X2l2X2Vzc2l2X2dlbihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgdTggKml2LCBzZWN0b3JfdCBzZWN0b3IpCiB7CiAJbWVtc2V0KGl2LCAwLCBjYy0+aXZfc2l6ZSk7CiAJKih1NjQgKilpdiA9IGNwdV90b19sZTY0KHNlY3Rvcik7Ci0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZShjYy0+aXZfZ2VuX3ByaXZhdGUuZXNzaXZfdGZtLCBpdiwgaXYpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY2MtPml2X2dlbl9wcml2YXRlLmVzc2l2LnRmbSwgaXYsIGl2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjczLDcgKzMyMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNjLT5pdl9nZW5fcHJpdmF0ZS5iZW5iaV9zaGlmdCA9IDkgLSBsb2c7CisJY2MtPml2X2dlbl9wcml2YXRlLmJlbmJpLnNoaWZ0ID0gOSAtIGxvZzsKIAogCXJldHVybiAwOwogfQpAQCAtMjg4LDcgKzMzNyw3IEBACiAKIAltZW1zZXQoaXYsIDAsIGNjLT5pdl9zaXplIC0gc2l6ZW9mKHU2NCkpOyAvKiByZXN0IGlzIGNsZWFyZWQgYmVsb3cgKi8KIAotCXZhbCA9IGNwdV90b19iZTY0KCgodTY0KXNlY3RvciA8PCBjYy0+aXZfZ2VuX3ByaXZhdGUuYmVuYmlfc2hpZnQpICsgMSk7CisJdmFsID0gY3B1X3RvX2JlNjQoKCh1NjQpc2VjdG9yIDw8IGNjLT5pdl9nZW5fcHJpdmF0ZS5iZW5iaS5zaGlmdCkgKyAxKTsKIAlwdXRfdW5hbGlnbmVkKHZhbCwgKF9fYmU2NCAqKShpdiArIGNjLT5pdl9zaXplIC0gc2l6ZW9mKHU2NCkpKTsKIAogCXJldHVybiAwOwpAQCAtMzA1LDkgKzM1NCwxNSBAQAogCS5nZW5lcmF0b3IgPSBjcnlwdF9pdl9wbGFpbl9nZW4KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRfaXZfb3BlcmF0aW9ucyBjcnlwdF9pdl9wbGFpbjY0X29wcyA9IHsKKwkuZ2VuZXJhdG9yID0gY3J5cHRfaXZfcGxhaW42NF9nZW4KK307CisKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRfaXZfb3BlcmF0aW9ucyBjcnlwdF9pdl9lc3Npdl9vcHMgPSB7CiAJLmN0ciAgICAgICA9IGNyeXB0X2l2X2Vzc2l2X2N0ciwKIAkuZHRyICAgICAgID0gY3J5cHRfaXZfZXNzaXZfZHRyLAorCS5pbml0ICAgICAgPSBjcnlwdF9pdl9lc3Npdl9pbml0LAorCS53aXBlICAgICAgPSBjcnlwdF9pdl9lc3Npdl93aXBlLAogCS5nZW5lcmF0b3IgPSBjcnlwdF9pdl9lc3Npdl9nZW4KIH07CiAKQEAgLTkzNCwxNCArOTg5LDE0IEBACiAKIAlzZXRfYml0KERNX0NSWVBUX0tFWV9WQUxJRCwgJmNjLT5mbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNjLT50Zm0sIGNjLT5rZXksIGNjLT5rZXlfc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRfd2lwZV9rZXkoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MpCiB7CiAJY2xlYXJfYml0KERNX0NSWVBUX0tFWV9WQUxJRCwgJmNjLT5mbGFncyk7CiAJbWVtc2V0KCZjYy0+a2V5LCAwLCBjYy0+a2V5X3NpemUgKiBzaXplb2YodTgpKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNjLT50Zm0sIGNjLT5rZXksIGNjLT5rZXlfc2l6ZSk7CiB9CiAKIC8qCkBAIC05ODMsMTEgKzEwMzgsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLSAJaWYgKGNyeXB0X3NldF9rZXkoY2MsIGFyZ3ZbMV0pKSB7Ci0JCXRpLT5lcnJvciA9ICJFcnJvciBkZWNvZGluZyBrZXkiOwotCQlnb3RvIGJhZF9jaXBoZXI7Ci0JfQotCiAJLyogQ29tcGF0aWJpbGl0eSBtb2RlIGZvciBvbGQgZG0tY3J5cHQgY2lwaGVyIHN0cmluZ3MgKi8KIAlpZiAoIWNoYWlubW9kZSB8fCAoc3RyY21wKGNoYWlubW9kZSwgInBsYWluIikgPT0gMCAmJiAhaXZtb2RlKSkgewogCQljaGFpbm1vZGUgPSAiY2JjIjsKQEAgLTEwMTUsNiArMTA2NSwxMSBAQAogCXN0cmNweShjYy0+Y2hhaW5tb2RlLCBjaGFpbm1vZGUpOwogCWNjLT50Zm0gPSB0Zm07CiAKKwlpZiAoY3J5cHRfc2V0X2tleShjYywgYXJndlsxXSkgPCAwKSB7CisJCXRpLT5lcnJvciA9ICJFcnJvciBkZWNvZGluZyBhbmQgc2V0dGluZyBrZXkiOworCQlnb3RvIGJhZF9pdm1vZGU7CisJfQorCiAJLyoKIAkgKiBDaG9vc2UgaXZtb2RlLiBWYWxpZCBtb2RlczogInBsYWluIiwgImVzc2l2Ojxlc3NoYXNoPiIsICJiZW5iaSIuCiAJICogU2VlIGNvbW1lbnRzIGF0IGl2IGNvZGUKQEAgLTEwMjQsNiArMTA3OSw4IEBACiAJCWNjLT5pdl9nZW5fb3BzID0gTlVMTDsKIAllbHNlIGlmIChzdHJjbXAoaXZtb2RlLCAicGxhaW4iKSA9PSAwKQogCQljYy0+aXZfZ2VuX29wcyA9ICZjcnlwdF9pdl9wbGFpbl9vcHM7CisJZWxzZSBpZiAoc3RyY21wKGl2bW9kZSwgInBsYWluNjQiKSA9PSAwKQorCQljYy0+aXZfZ2VuX29wcyA9ICZjcnlwdF9pdl9wbGFpbjY0X29wczsKIAllbHNlIGlmIChzdHJjbXAoaXZtb2RlLCAiZXNzaXYiKSA9PSAwKQogCQljYy0+aXZfZ2VuX29wcyA9ICZjcnlwdF9pdl9lc3Npdl9vcHM7CiAJZWxzZSBpZiAoc3RyY21wKGl2bW9kZSwgImJlbmJpIikgPT0gMCkKQEAgLTEwMzksNiArMTA5NiwxMiBAQAogCSAgICBjYy0+aXZfZ2VuX29wcy0+Y3RyKGNjLCB0aSwgaXZvcHRzKSA8IDApCiAJCWdvdG8gYmFkX2l2bW9kZTsKIAorCWlmIChjYy0+aXZfZ2VuX29wcyAmJiBjYy0+aXZfZ2VuX29wcy0+aW5pdCAmJgorCSAgICBjYy0+aXZfZ2VuX29wcy0+aW5pdChjYykgPCAwKSB7CisJCXRpLT5lcnJvciA9ICJFcnJvciBpbml0aWFsaXNpbmcgSVYiOworCQlnb3RvIGJhZF9zbGFiX3Bvb2w7CisJfQorCiAJY2MtPml2X3NpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUodGZtKTsKIAlpZiAoY2MtPml2X3NpemUpCiAJCS8qIGF0IGxlYXN0IGEgNjQgYml0IHNlY3RvciBudW1iZXIgc2hvdWxkIGZpdCBpbiBvdXIgYnVmZmVyICovCkBAIC0xMDg1LDExICsxMTQ4LDYgQEAKIAkJZ290byBiYWRfYnM7CiAJfQogCi0JaWYgKGNyeXB0b19hYmxrY2lwaGVyX3NldGtleSh0Zm0sIGNjLT5rZXksIGtleV9zaXplKSA8IDApIHsKLQkJdGktPmVycm9yID0gIkVycm9yIHNldHRpbmcga2V5IjsKLQkJZ290byBiYWRfZGV2aWNlOwotCX0KLQogCWlmIChzc2NhbmYoYXJndlsyXSwgIiVsbHUiLCAmdG1wbGwpICE9IDEpIHsKIAkJdGktPmVycm9yID0gIkludmFsaWQgaXZfb2Zmc2V0IHNlY3RvciI7CiAJCWdvdG8gYmFkX2RldmljZTsKQEAgLTEyNzgsNiArMTMzNiw3IEBACiBzdGF0aWMgaW50IGNyeXB0X21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gdGktPnByaXZhdGU7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoYXJnYyA8IDIpCiAJCWdvdG8gZXJyb3I7CkBAIC0xMjg3LDEwICsxMzQ2LDIyIEBACiAJCQlETVdBUk4oIm5vdCBzdXNwZW5kZWQgZHVyaW5nIGtleSBtYW5pcHVsYXRpb24uIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoYXJnYyA9PSAzICYmICFzdHJuaWNtcChhcmd2WzFdLCBNRVNHX1NUUigic2V0IikpKQotCQkJcmV0dXJuIGNyeXB0X3NldF9rZXkoY2MsIGFyZ3ZbMl0pOwotCQlpZiAoYXJnYyA9PSAyICYmICFzdHJuaWNtcChhcmd2WzFdLCBNRVNHX1NUUigid2lwZSIpKSkKKwkJaWYgKGFyZ2MgPT0gMyAmJiAhc3RybmljbXAoYXJndlsxXSwgTUVTR19TVFIoInNldCIpKSkgeworCQkJcmV0ID0gY3J5cHRfc2V0X2tleShjYywgYXJndlsyXSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlpZiAoY2MtPml2X2dlbl9vcHMgJiYgY2MtPml2X2dlbl9vcHMtPmluaXQpCisJCQkJcmV0ID0gY2MtPml2X2dlbl9vcHMtPmluaXQoY2MpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAoYXJnYyA9PSAyICYmICFzdHJuaWNtcChhcmd2WzFdLCBNRVNHX1NUUigid2lwZSIpKSkgeworCQkJaWYgKGNjLT5pdl9nZW5fb3BzICYmIGNjLT5pdl9nZW5fb3BzLT53aXBlKSB7CisJCQkJcmV0ID0gY2MtPml2X2dlbl9vcHMtPndpcGUoY2MpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCQlyZXR1cm4gY3J5cHRfd2lwZV9rZXkoY2MpOworCQl9CiAJfQogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCmluZGV4IDdkYmU2NTIuLjJiNzkwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwpAQCAtMTcyLDcgKzE3Miw4IEBACiAJfQogCiAJLyogVmFsaWRhdGUgdGhlIGNodW5rIHNpemUgYWdhaW5zdCB0aGUgZGV2aWNlIGJsb2NrIHNpemUgKi8KLQlpZiAoY2h1bmtfc2l6ZSAlIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgeworCWlmIChjaHVua19zaXplICUKKwkgICAgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGRtX3NuYXBfY293KHN0b3JlLT5zbmFwKS0+YmRldikgPj4gOSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE5MCw2ICsxOTEsNyBAQAogfQogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorCQkJICAgICAgc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwLAogCQkJICAgICAgdW5zaWduZWQgKmFyZ3NfdXNlZCwKIAkJCSAgICAgIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKipzdG9yZSkKIHsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnRtcF9zdG9yZTsKIAljaGFyIHBlcnNpc3RlbnQ7CiAKLQlpZiAoYXJnYyA8IDMpIHsKKwlpZiAoYXJnYyA8IDIpIHsKIAkJdGktPmVycm9yID0gIkluc3VmZmljaWVudCBleGNlcHRpb24gc3RvcmUgYXJndW1lbnRzIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjA5LDE0ICsyMTEsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcGVyc2lzdGVudCA9IHRvdXBwZXIoKmFyZ3ZbMV0pOworCXBlcnNpc3RlbnQgPSB0b3VwcGVyKCphcmd2WzBdKTsKIAlpZiAocGVyc2lzdGVudCA9PSAnUCcpCiAJCXR5cGUgPSBnZXRfdHlwZSgiUCIpOwogCWVsc2UgaWYgKHBlcnNpc3RlbnQgPT0gJ04nKQogCQl0eXBlID0gZ2V0X3R5cGUoIk4iKTsKIAllbHNlIHsKIAkJdGktPmVycm9yID0gIlBlcnNpc3RlbnQgZmxhZyBpcyBub3QgUCBvciBOIjsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIGJhZF90eXBlOwogCX0KIAogCWlmICghdHlwZSkgewpAQCAtMjI2LDMyICsyMjksMjMgQEAKIAl9CiAKIAl0bXBfc3RvcmUtPnR5cGUgPSB0eXBlOwotCXRtcF9zdG9yZS0+dGkgPSB0aTsKKwl0bXBfc3RvcmUtPnNuYXAgPSBzbmFwOwogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIDAsIDAsCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJnRtcF9zdG9yZS0+Y293KTsKLQlpZiAocikgewotCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGdldCBDT1cgZGV2aWNlIjsKLQkJZ290byBiYWRfY293OwotCX0KLQotCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMl0sICZ0aS0+ZXJyb3IpOworCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMV0sICZ0aS0+ZXJyb3IpOwogCWlmIChyKQotCQlnb3RvIGJhZF9jdHI7CisJCWdvdG8gYmFkOwogCiAJciA9IHR5cGUtPmN0cih0bXBfc3RvcmUsIDAsIE5VTEwpOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJFeGNlcHRpb24gc3RvcmUgdHlwZSBjb25zdHJ1Y3RvciBmYWlsZWQiOwotCQlnb3RvIGJhZF9jdHI7CisJCWdvdG8gYmFkOwogCX0KIAotCSphcmdzX3VzZWQgPSAzOworCSphcmdzX3VzZWQgPSAyOwogCSpzdG9yZSA9IHRtcF9zdG9yZTsKIAlyZXR1cm4gMDsKIAotYmFkX2N0cjoKLQlkbV9wdXRfZGV2aWNlKHRpLCB0bXBfc3RvcmUtPmNvdyk7Ci1iYWRfY293OgorYmFkOgogCXB1dF90eXBlKHR5cGUpOwogYmFkX3R5cGU6CiAJa2ZyZWUodG1wX3N0b3JlKTsKQEAgLTI2Miw3ICsyNTYsNiBAQAogdm9pZCBkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKIHsKIAlzdG9yZS0+dHlwZS0+ZHRyKHN0b3JlKTsKLQlkbV9wdXRfZGV2aWNlKHN0b3JlLT50aSwgc3RvcmUtPmNvdyk7CiAJcHV0X3R5cGUoc3RvcmUtPnR5cGUpOwogCWtmcmVlKHN0b3JlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmggYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCmluZGV4IDhhMjIzYTQuLmU4ZGZhMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaApAQCAtMjYsNyArMjYsNyBAQAogICogb2YgY2h1bmtzIHRoYXQgZm9sbG93IGNvbnRpZ3VvdXNseS4gIFJlbWFpbmluZyBiaXRzIGhvbGQgdGhlIG51bWJlciBvZiB0aGUKICAqIGNodW5rIHdpdGhpbiB0aGUgZGV2aWNlLgogICovCi1zdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24geworc3RydWN0IGRtX2V4Y2VwdGlvbiB7CiAJc3RydWN0IGxpc3RfaGVhZCBoYXNoX2xpc3Q7CiAKIAljaHVua190IG9sZF9jaHVuazsKQEAgLTY0LDE3ICs2NCwzNCBAQAogCSAqIEZpbmQgc29tZXdoZXJlIHRvIHN0b3JlIHRoZSBuZXh0IGV4Y2VwdGlvbi4KIAkgKi8KIAlpbnQgKCpwcmVwYXJlX2V4Y2VwdGlvbikgKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplKTsKKwkJCQkgIHN0cnVjdCBkbV9leGNlcHRpb24gKmUpOwogCiAJLyoKIAkgKiBVcGRhdGUgdGhlIG1ldGFkYXRhIHdpdGggdGhpcyBleGNlcHRpb24uCiAJICovCiAJdm9pZCAoKmNvbW1pdF9leGNlcHRpb24pIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkgIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSwKKwkJCQkgIHN0cnVjdCBkbV9leGNlcHRpb24gKmUsCiAJCQkJICB2b2lkICgqY2FsbGJhY2spICh2b2lkICosIGludCBzdWNjZXNzKSwKIAkJCQkgIHZvaWQgKmNhbGxiYWNrX2NvbnRleHQpOwogCiAJLyoKKwkgKiBSZXR1cm5zIDAgaWYgdGhlIGV4Y2VwdGlvbiBzdG9yZSBpcyBlbXB0eS4KKwkgKgorCSAqIElmIHRoZXJlIGFyZSBleGNlcHRpb25zIHN0aWxsIHRvIGJlIG1lcmdlZCwgc2V0cworCSAqICpsYXN0X29sZF9jaHVuayBhbmQgKmxhc3RfbmV3X2NodW5rIHRvIHRoZSBtb3N0IHJlY2VudAorCSAqIHN0aWxsLXRvLWJlLW1lcmdlZCBjaHVuayBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisJICogY29uc2VjdXRpdmUgcHJldmlvdXMgb25lcy4KKwkgKi8KKwlpbnQgKCpwcmVwYXJlX21lcmdlKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkgICAgICBjaHVua190ICpsYXN0X29sZF9jaHVuaywgY2h1bmtfdCAqbGFzdF9uZXdfY2h1bmspOworCisJLyoKKwkgKiBDbGVhciB0aGUgbGFzdCBuIGV4Y2VwdGlvbnMuCisJICogbnJfbWVyZ2VkIG11c3QgYmUgPD0gdGhlIHZhbHVlIHJldHVybmVkIGJ5IHByZXBhcmVfbWVyZ2UuCisJICovCisJaW50ICgqY29tbWl0X21lcmdlKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsIGludCBucl9tZXJnZWQpOworCisJLyoKIAkgKiBUaGUgc25hcHNob3QgaXMgaW52YWxpZCwgbm90ZSB0aGlzIGluIHRoZSBtZXRhZGF0YS4KIAkgKi8KIAl2b2lkICgqZHJvcF9zbmFwc2hvdCkgKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKTsKQEAgLTg2LDE5ICsxMDMsMTkgQEAKIAkvKgogCSAqIFJldHVybiBob3cgZnVsbCB0aGUgc25hcHNob3QgaXMuCiAJICovCi0Jdm9pZCAoKmZyYWN0aW9uX2Z1bGwpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCSAgICAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLAotCQkJICAgICAgIHNlY3Rvcl90ICpkZW5vbWluYXRvcik7CisJdm9pZCAoKnVzYWdlKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCSAgICAgICBzZWN0b3JfdCAqdG90YWxfc2VjdG9ycywgc2VjdG9yX3QgKnNlY3RvcnNfYWxsb2NhdGVkLAorCQkgICAgICAgc2VjdG9yX3QgKm1ldGFkYXRhX3NlY3RvcnMpOwogCiAJLyogRm9yIGludGVybmFsIGRldmljZS1tYXBwZXIgdXNlIG9ubHkuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAorc3RydWN0IGRtX3NuYXBzaG90OworCiBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlIHsKIAlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGU7Ci0Jc3RydWN0IGRtX3RhcmdldCAqdGk7Ci0KLQlzdHJ1Y3QgZG1fZGV2ICpjb3c7CisJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOwogCiAJLyogU2l6ZSBvZiBkYXRhIGJsb2NrcyBzYXZlZCAtIG11c3QgYmUgYSBwb3dlciBvZiAyICovCiAJdW5zaWduZWQgY2h1bmtfc2l6ZTsKQEAgLTEwOSw2ICsxMjYsMTEgQEAKIH07CiAKIC8qCisgKiBPYnRhaW4gdGhlIGNvdyBkZXZpY2UgdXNlZCBieSBhIGdpdmVuIHNuYXBzaG90LgorICovCitzdHJ1Y3QgZG1fZGV2ICpkbV9zbmFwX2NvdyhzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXApOworCisvKgogICogRnVudGlvbnMgdG8gbWFuaXB1bGF0ZSBjb25zZWN1dGl2ZSBjaHVua3MKICAqLwogIyAgaWYgZGVmaW5lZChDT05GSUdfTEJEQUYpIHx8IChCSVRTX1BFUl9MT05HID09IDY0KQpAQCAtMTIwLDE4ICsxNDIsMjUgQEAKIAlyZXR1cm4gY2h1bmsgJiAoY2h1bmtfdCkoKDFVTEwgPDwgRE1fQ0hVTktfTlVNQkVSX0JJVFMpIC0gMVVMTCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnQoc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBkbV9jb25zZWN1dGl2ZV9jaHVua19jb3VudChzdHJ1Y3QgZG1fZXhjZXB0aW9uICplKQogewogCXJldHVybiBlLT5uZXdfY2h1bmsgPj4gRE1fQ0hVTktfTlVNQkVSX0JJVFM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbV9jb25zZWN1dGl2ZV9jaHVua19jb3VudF9pbmMoc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplKQorc3RhdGljIGlubGluZSB2b2lkIGRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50X2luYyhzdHJ1Y3QgZG1fZXhjZXB0aW9uICplKQogewogCWUtPm5ld19jaHVuayArPSAoMVVMTCA8PCBETV9DSFVOS19OVU1CRVJfQklUUyk7CiAKIAlCVUdfT04oIWRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50KGUpKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50X2RlYyhzdHJ1Y3QgZG1fZXhjZXB0aW9uICplKQoreworCUJVR19PTighZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnQoZSkpOworCisJZS0+bmV3X2NodW5rIC09ICgxVUxMIDw8IERNX0NIVU5LX05VTUJFUl9CSVRTKTsKK30KKwogIyAgZWxzZQogIyAgICBkZWZpbmUgRE1fQ0hVTktfQ09OU0VDVVRJVkVfQklUUyAwCiAKQEAgLTE0MCwxMiArMTY5LDE2IEBACiAJcmV0dXJuIGNodW5rOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50KHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnQoc3RydWN0IGRtX2V4Y2VwdGlvbiAqZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50X2luYyhzdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24gKmUpCitzdGF0aWMgaW5saW5lIHZvaWQgZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnRfaW5jKHN0cnVjdCBkbV9leGNlcHRpb24gKmUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbV9jb25zZWN1dGl2ZV9jaHVua19jb3VudF9kZWMoc3RydWN0IGRtX2V4Y2VwdGlvbiAqZSkKIHsKIH0KIApAQCAtMTYyLDcgKzE5NSw3IEBACiBzdGF0aWMgaW5saW5lIGNodW5rX3Qgc2VjdG9yX3RvX2NodW5rKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAogCQkJCSAgICAgIHNlY3Rvcl90IHNlY3RvcikKIHsKLQlyZXR1cm4gKHNlY3RvciAmIH5zdG9yZS0+Y2h1bmtfbWFzaykgPj4gc3RvcmUtPmNodW5rX3NoaWZ0OworCXJldHVybiBzZWN0b3IgPj4gc3RvcmUtPmNodW5rX3NoaWZ0OwogfQogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKTsKQEAgLTE3Myw2ICsyMDYsNyBAQAogCQkJCSAgICAgIGNoYXIgKiplcnJvcik7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfY3JlYXRlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisJCQkgICAgICBzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXAsCiAJCQkgICAgICB1bnNpZ25lZCAqYXJnc191c2VkLAogCQkJICAgICAgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqKnN0b3JlKTsKIHZvaWQgZG1fZXhjZXB0aW9uX3N0b3JlX2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby5jIGIvZHJpdmVycy9tZC9kbS1pby5jCmluZGV4IDNhMmU2YTIuLjEwZjQ1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW8uYworKysgYi9kcml2ZXJzL21kL2RtLWlvLmMKQEAgLTUsNiArNSw4IEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCisjaW5jbHVkZSAiZG0uaCIKKwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpAQCAtMTQsMTIgKzE2LDE5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWlvLmg+CiAKKyNkZWZpbmUgRE1fTVNHX1BSRUZJWCAiaW8iCisKKyNkZWZpbmUgRE1fSU9fTUFYX1JFR0lPTlMJQklUU19QRVJfTE9ORworCiBzdHJ1Y3QgZG1faW9fY2xpZW50IHsKIAltZW1wb29sX3QgKnBvb2w7CiAJc3RydWN0IGJpb19zZXQgKmJpb3M7CiB9OwogCi0vKiBGSVhNRTogY2FuIHdlIHNocmluayB0aGlzID8gKi8KKy8qCisgKiBBbGlnbmluZyAnc3RydWN0IGlvJyByZWR1Y2VzIHRoZSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byBzdG9yZQorICogaXRzIGFkZHJlc3MuICBSZWZlciB0byBzdG9yZV9pb19hbmRfcmVnaW9uX2luX2JpbygpIGJlbG93LgorICovCiBzdHJ1Y3QgaW8gewogCXVuc2lnbmVkIGxvbmcgZXJyb3JfYml0czsKIAl1bnNpZ25lZCBsb25nIGVvcG5vdHN1cHBfYml0czsKQEAgLTI4LDcgKzM3LDkgQEAKIAlzdHJ1Y3QgZG1faW9fY2xpZW50ICpjbGllbnQ7CiAJaW9fbm90aWZ5X2ZuIGNhbGxiYWNrOwogCXZvaWQgKmNvbnRleHQ7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKERNX0lPX01BWF9SRUdJT05TKSkpOworCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKl9kbV9pb19jYWNoZTsKIAogLyoKICAqIGlvIGNvbnRleHRzIGFyZSBvbmx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBmb3IgYXN5bmNocm9ub3VzCkBAIC01Myw3ICs2NCw3IEBACiAJaWYgKCFjbGllbnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JY2xpZW50LT5wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKGlvcywgc2l6ZW9mKHN0cnVjdCBpbykpOworCWNsaWVudC0+cG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChpb3MsIF9kbV9pb19jYWNoZSk7CiAJaWYgKCFjbGllbnQtPnBvb2wpCiAJCWdvdG8gYmFkOwogCkBAIC04OCwxOCArOTksMjkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHJlZ2lvbiBhIGJpbyBpcyBkb2luZyBpbyBmb3IuCi0gKiBJbiBvcmRlciB0byBzYXZlIGEgbWVtb3J5IGFsbG9jYXRpb24gd2Ugc3RvcmUgdGhpcyB0aGUgbGFzdAotICogYnZlYyB3aGljaCB3ZSBrbm93IGlzIHVudXNlZCAoYmxlY2gpLgotICogWFhYIFRoaXMgaXMgdWdseSBhbmQgY2FuIE9PUFMgd2l0aCBzb21lIGNvbmZpZ3MuLi4gZmluZCBhbm90aGVyIHdheS4KKyAqIFRvIGF2b2lkIGEgbWVtb3J5IGFsbG9jYXRpb24gdG8gc3RvcmUganVzdCA1IG9yIDYgYml0cywgd2UKKyAqIGVuc3VyZSB0aGUgJ3N0cnVjdCBpbycgcG9pbnRlciBpcyBhbGlnbmVkIHNvIGVub3VnaCBsb3cgYml0cyBhcmUKKyAqIGFsd2F5cyB6ZXJvIGFuZCB0aGVuIGNvbWJpbmUgaXQgd2l0aCB0aGUgcmVnaW9uIG51bWJlciBkaXJlY3RseSBpbgorICogYmlfcHJpdmF0ZS4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fc2V0X3JlZ2lvbihzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIHJlZ2lvbikKK3N0YXRpYyB2b2lkIHN0b3JlX2lvX2FuZF9yZWdpb25faW5fYmlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvICppbywKKwkJCQkgICAgICAgdW5zaWduZWQgcmVnaW9uKQogewotCWJpby0+YmlfaW9fdmVjW2Jpby0+YmlfbWF4X3ZlY3NdLmJ2X2xlbiA9IHJlZ2lvbjsKKwlpZiAodW5saWtlbHkoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpaW8sIERNX0lPX01BWF9SRUdJT05TKSkpIHsKKwkJRE1DUklUKCJVbmFsaWduZWQgc3RydWN0IGlvIHBvaW50ZXIgJXAiLCBpbyk7CisJCUJVRygpOworCX0KKworCWJpby0+YmlfcHJpdmF0ZSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWlvIHwgcmVnaW9uKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBiaW9fZ2V0X3JlZ2lvbihzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCByZXRyaWV2ZV9pb19hbmRfcmVnaW9uX2Zyb21fYmlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvICoqaW8sCisJCQkJICAgICAgIHVuc2lnbmVkICpyZWdpb24pCiB7Ci0JcmV0dXJuIGJpby0+YmlfaW9fdmVjW2Jpby0+YmlfbWF4X3ZlY3NdLmJ2X2xlbjsKKwl1bnNpZ25lZCBsb25nIHZhbCA9ICh1bnNpZ25lZCBsb25nKWJpby0+YmlfcHJpdmF0ZTsKKworCSppbyA9ICh2b2lkICopKHZhbCAmIC0odW5zaWduZWQgbG9uZylETV9JT19NQVhfUkVHSU9OUyk7CisJKnJlZ2lvbiA9IHZhbCAmIChETV9JT19NQVhfUkVHSU9OUyAtIDEpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDAsMTAgKzE2Miw4IEBACiAJLyoKIAkgKiBUaGUgYmlvIGRlc3RydWN0b3IgaW4gYmlvX3B1dCgpIG1heSB1c2UgdGhlIGlvIG9iamVjdC4KIAkgKi8KLQlpbyA9IGJpby0+YmlfcHJpdmF0ZTsKLQlyZWdpb24gPSBiaW9fZ2V0X3JlZ2lvbihiaW8pOworCXJldHJpZXZlX2lvX2FuZF9yZWdpb25fZnJvbV9iaW8oYmlvLCAmaW8sICZyZWdpb24pOwogCi0JYmlvLT5iaV9tYXhfdmVjcysrOwogCWJpb19wdXQoYmlvKTsKIAogCWRlY19jb3VudChpbywgcmVnaW9uLCBlcnJvcik7CkBAIC0yNDMsNyArMjYzLDEwIEBACiAKIHN0YXRpYyB2b2lkIGRtX2Jpb19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKIHsKLQlzdHJ1Y3QgaW8gKmlvID0gYmlvLT5iaV9wcml2YXRlOworCXVuc2lnbmVkIHJlZ2lvbjsKKwlzdHJ1Y3QgaW8gKmlvOworCisJcmV0cmlldmVfaW9fYW5kX3JlZ2lvbl9mcm9tX2JpbyhiaW8sICZpbywgJnJlZ2lvbik7CiAKIAliaW9fZnJlZShiaW8sIGlvLT5jbGllbnQtPmJpb3MpOwogfQpAQCAtMjg2LDI2ICszMDksMjMgQEAKIAl1bnNpZ25lZCBudW1fYnZlY3M7CiAJc2VjdG9yX3QgcmVtYWluaW5nID0gd2hlcmUtPmNvdW50OwogCi0Jd2hpbGUgKHJlbWFpbmluZykgeworCS8qCisJICogd2hlcmUtPmNvdW50IG1heSBiZSB6ZXJvIGlmIHJ3IGhvbGRzIGEgd3JpdGUgYmFycmllciBhbmQgd2UKKwkgKiBuZWVkIHRvIHNlbmQgYSB6ZXJvLXNpemVkIGJhcnJpZXIuCisJICovCisJZG8gewogCQkvKgotCQkgKiBBbGxvY2F0ZSBhIHN1aXRhYmx5IHNpemVkLWJpbzogd2UgYWRkIGFuIGV4dHJhCi0JCSAqIGJ2ZWMgZm9yIGJpb19nZXQvc2V0X3JlZ2lvbigpIGFuZCBkZWNyZW1lbnQgYmlfbWF4X3ZlY3MKLQkJICogdG8gaGlkZSBpdCBmcm9tIGJpb19hZGRfcGFnZSgpLgorCQkgKiBBbGxvY2F0ZSBhIHN1aXRhYmx5IHNpemVkLWJpby4KIAkJICovCiAJCW51bV9idmVjcyA9IGRtX3NlY3Rvcl9kaXZfdXAocmVtYWluaW5nLAogCQkJCQkgICAgIChQQUdFX1NJWkUgPj4gU0VDVE9SX1NISUZUKSk7Ci0JCW51bV9idmVjcyA9IDEgKyBtaW5fdChpbnQsIGJpb19nZXRfbnJfdmVjcyh3aGVyZS0+YmRldiksCi0JCQkJICAgICAgbnVtX2J2ZWNzKTsKLQkJaWYgKHVubGlrZWx5KG51bV9idmVjcyA+IEJJT19NQVhfUEFHRVMpKQotCQkJbnVtX2J2ZWNzID0gQklPX01BWF9QQUdFUzsKKwkJbnVtX2J2ZWNzID0gbWluX3QoaW50LCBiaW9fZ2V0X25yX3ZlY3Mod2hlcmUtPmJkZXYpLCBudW1fYnZlY3MpOwogCQliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9OT0lPLCBudW1fYnZlY3MsIGlvLT5jbGllbnQtPmJpb3MpOwogCQliaW8tPmJpX3NlY3RvciA9IHdoZXJlLT5zZWN0b3IgKyAod2hlcmUtPmNvdW50IC0gcmVtYWluaW5nKTsKIAkJYmlvLT5iaV9iZGV2ID0gd2hlcmUtPmJkZXY7CiAJCWJpby0+YmlfZW5kX2lvID0gZW5kaW87Ci0JCWJpby0+YmlfcHJpdmF0ZSA9IGlvOwogCQliaW8tPmJpX2Rlc3RydWN0b3IgPSBkbV9iaW9fZGVzdHJ1Y3RvcjsKLQkJYmlvLT5iaV9tYXhfdmVjcy0tOwotCQliaW9fc2V0X3JlZ2lvbihiaW8sIHJlZ2lvbik7CisJCXN0b3JlX2lvX2FuZF9yZWdpb25faW5fYmlvKGJpbywgaW8sIHJlZ2lvbik7CiAKIAkJLyoKIAkJICogVHJ5IGFuZCBhZGQgYXMgbWFueSBwYWdlcyBhcyBwb3NzaWJsZS4KQEAgLTMyMyw3ICszNDMsNyBAQAogCiAJCWF0b21pY19pbmMoJmlvLT5jb3VudCk7CiAJCXN1Ym1pdF9iaW8ocncsIGJpbyk7Ci0JfQorCX0gd2hpbGUgKHJlbWFpbmluZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2lvKGludCBydywgdW5zaWduZWQgaW50IG51bV9yZWdpb25zLApAQCAtMzMzLDYgKzM1Myw4IEBACiAJaW50IGk7CiAJc3RydWN0IGRwYWdlcyBvbGRfcGFnZXMgPSAqZHA7CiAKKwlCVUdfT04obnVtX3JlZ2lvbnMgPiBETV9JT19NQVhfUkVHSU9OUyk7CisKIAlpZiAoc3luYykKIAkJcncgfD0gKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfVU5QTFVHKTsKIApAQCAtMzQyLDcgKzM2NCw3IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9yZWdpb25zOyBpKyspIHsKIAkJKmRwID0gb2xkX3BhZ2VzOwotCQlpZiAod2hlcmVbaV0uY291bnQpCisJCWlmICh3aGVyZVtpXS5jb3VudCB8fCAocncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpKQogCQkJZG9fcmVnaW9uKHJ3LCBpLCB3aGVyZSArIGksIGRwLCBpbyk7CiAJfQogCkBAIC0zNTcsNyArMzc5LDE0IEBACiAJCSAgIHN0cnVjdCBkbV9pb19yZWdpb24gKndoZXJlLCBpbnQgcncsIHN0cnVjdCBkcGFnZXMgKmRwLAogCQkgICB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKQogewotCXN0cnVjdCBpbyBpbzsKKwkvKgorCSAqIGdjYyA8PSA0LjMgY2FuJ3QgZG8gdGhlIGFsaWdubWVudCBmb3Igc3RhY2sgdmFyaWFibGVzLCBzbyB3ZSBtdXN0CisJICogYWxpZ24gaXQgb24gb3VyIG93bi4KKwkgKiB2b2xhdGlsZSBwcmV2ZW50cyB0aGUgb3B0aW1pemVyIGZyb20gcmVtb3Zpbmcgb3IgcmV1c2luZworCSAqICJpb18iIGZpZWxkIGZyb20gdGhlIHN0YWNrIGZyYW1lIChhbGxvd2VkIGluIEFOU0kgQykuCisJICovCisJdm9sYXRpbGUgY2hhciBpb19bc2l6ZW9mKHN0cnVjdCBpbykgKyBfX2FsaWdub2ZfXyhzdHJ1Y3QgaW8pIC0gMV07CisJc3RydWN0IGlvICppbyA9IChzdHJ1Y3QgaW8gKilQVFJfQUxJR04oJmlvXywgX19hbGlnbm9mX18oc3RydWN0IGlvKSk7CiAKIAlpZiAobnVtX3JlZ2lvbnMgPiAxICYmIChydyAmIFJXX01BU0spICE9IFdSSVRFKSB7CiAJCVdBUk5fT04oMSk7CkBAIC0zNjUsMzMgKzM5NCwzMyBAQAogCX0KIAogcmV0cnk6Ci0JaW8uZXJyb3JfYml0cyA9IDA7Ci0JaW8uZW9wbm90c3VwcF9iaXRzID0gMDsKLQlhdG9taWNfc2V0KCZpby5jb3VudCwgMSk7IC8qIHNlZSBkaXNwYXRjaF9pbygpICovCi0JaW8uc2xlZXBlciA9IGN1cnJlbnQ7Ci0JaW8uY2xpZW50ID0gY2xpZW50OworCWlvLT5lcnJvcl9iaXRzID0gMDsKKwlpby0+ZW9wbm90c3VwcF9iaXRzID0gMDsKKwlhdG9taWNfc2V0KCZpby0+Y291bnQsIDEpOyAvKiBzZWUgZGlzcGF0Y2hfaW8oKSAqLworCWlvLT5zbGVlcGVyID0gY3VycmVudDsKKwlpby0+Y2xpZW50ID0gY2xpZW50OwogCi0JZGlzcGF0Y2hfaW8ocncsIG51bV9yZWdpb25zLCB3aGVyZSwgZHAsICZpbywgMSk7CisJZGlzcGF0Y2hfaW8ocncsIG51bV9yZWdpb25zLCB3aGVyZSwgZHAsIGlvLCAxKTsKIAogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAoIWF0b21pY19yZWFkKCZpby5jb3VudCkpCisJCWlmICghYXRvbWljX3JlYWQoJmlvLT5jb3VudCkpCiAJCQlicmVhazsKIAogCQlpb19zY2hlZHVsZSgpOwogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCi0JaWYgKGlvLmVvcG5vdHN1cHBfYml0cyAmJiAocncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpKSB7CisJaWYgKGlvLT5lb3Bub3RzdXBwX2JpdHMgJiYgKHJ3ICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKSkgewogCQlydyAmPSB+KDEgPDwgQklPX1JXX0JBUlJJRVIpOwogCQlnb3RvIHJldHJ5OwogCX0KIAogCWlmIChlcnJvcl9iaXRzKQotCQkqZXJyb3JfYml0cyA9IGlvLmVycm9yX2JpdHM7CisJCSplcnJvcl9iaXRzID0gaW8tPmVycm9yX2JpdHM7CiAKLQlyZXR1cm4gaW8uZXJyb3JfYml0cyA/IC1FSU8gOiAwOworCXJldHVybiBpby0+ZXJyb3JfYml0cyA/IC1FSU8gOiAwOwogfQogCiBzdGF0aWMgaW50IGFzeW5jX2lvKHN0cnVjdCBkbV9pb19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IG51bV9yZWdpb25zLApAQCAtNDcyLDMgKzUwMSwxOCBAQAogCQkJJmRwLCBpb19yZXEtPm5vdGlmeS5mbiwgaW9fcmVxLT5ub3RpZnkuY29udGV4dCk7CiB9CiBFWFBPUlRfU1lNQk9MKGRtX2lvKTsKKworaW50IF9faW5pdCBkbV9pb19pbml0KHZvaWQpCit7CisJX2RtX2lvX2NhY2hlID0gS01FTV9DQUNIRShpbywgMCk7CisJaWYgKCFfZG1faW9fY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG1faW9fZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShfZG1faW9fY2FjaGUpOworCV9kbV9pb19jYWNoZSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKaW5kZXggYTY3OTQyOS4uMWQ2NjkzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwpAQCAtNTYsNiArNTYsMTEgQEAKICAqLwogc3RhdGljIERFQ0xBUkVfUldTRU0oX2hhc2hfbG9jayk7CiAKKy8qCisgKiBQcm90ZWN0cyB1c2Ugb2YgbWRwdHIgdG8gb2J0YWluIGhhc2ggY2VsbCBuYW1lIGFuZCB1dWlkIGZyb20gbWFwcGVkIGRldmljZS4KKyAqLworc3RhdGljIERFRklORV9NVVRFWChkbV9oYXNoX2NlbGxzX211dGV4KTsKKwogc3RhdGljIHZvaWQgaW5pdF9idWNrZXRzKHN0cnVjdCBsaXN0X2hlYWQgKmJ1Y2tldHMpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yMDYsNyArMjExLDkgQEAKIAkJbGlzdF9hZGQoJmNlbGwtPnV1aWRfbGlzdCwgX3V1aWRfYnVja2V0cyArIGhhc2hfc3RyKHV1aWQpKTsKIAl9CiAJZG1fZ2V0KG1kKTsKKwltdXRleF9sb2NrKCZkbV9oYXNoX2NlbGxzX211dGV4KTsKIAlkbV9zZXRfbWRwdHIobWQsIGNlbGwpOworCW11dGV4X3VubG9jaygmZG1faGFzaF9jZWxsc19tdXRleCk7CiAJdXBfd3JpdGUoJl9oYXNoX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yMjQsOSArMjMxLDExIEBACiAJLyogcmVtb3ZlIGZyb20gdGhlIGRldiBoYXNoICovCiAJbGlzdF9kZWwoJmhjLT51dWlkX2xpc3QpOwogCWxpc3RfZGVsKCZoYy0+bmFtZV9saXN0KTsKKwltdXRleF9sb2NrKCZkbV9oYXNoX2NlbGxzX211dGV4KTsKIAlkbV9zZXRfbWRwdHIoaGMtPm1kLCBOVUxMKTsKKwltdXRleF91bmxvY2soJmRtX2hhc2hfY2VsbHNfbXV0ZXgpOwogCi0JdGFibGUgPSBkbV9nZXRfdGFibGUoaGMtPm1kKTsKKwl0YWJsZSA9IGRtX2dldF9saXZlX3RhYmxlKGhjLT5tZCk7CiAJaWYgKHRhYmxlKSB7CiAJCWRtX3RhYmxlX2V2ZW50KHRhYmxlKTsKIAkJZG1fdGFibGVfcHV0KHRhYmxlKTsKQEAgLTMyMSwxMyArMzMwLDE1IEBACiAJICovCiAJbGlzdF9kZWwoJmhjLT5uYW1lX2xpc3QpOwogCW9sZF9uYW1lID0gaGMtPm5hbWU7CisJbXV0ZXhfbG9jaygmZG1faGFzaF9jZWxsc19tdXRleCk7CiAJaGMtPm5hbWUgPSBuZXdfbmFtZTsKKwltdXRleF91bmxvY2soJmRtX2hhc2hfY2VsbHNfbXV0ZXgpOwogCWxpc3RfYWRkKCZoYy0+bmFtZV9saXN0LCBfbmFtZV9idWNrZXRzICsgaGFzaF9zdHIobmV3X25hbWUpKTsKIAogCS8qCiAJICogV2FrZSB1cCBhbnkgZG0gZXZlbnQgd2FpdGVycy4KIAkgKi8KLQl0YWJsZSA9IGRtX2dldF90YWJsZShoYy0+bWQpOworCXRhYmxlID0gZG1fZ2V0X2xpdmVfdGFibGUoaGMtPm1kKTsKIAlpZiAodGFibGUpIHsKIAkJZG1fdGFibGVfZXZlbnQodGFibGUpOwogCQlkbV90YWJsZV9wdXQodGFibGUpOwpAQCAtNTEyLDggKzUyMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgaW50IGNoZWNrX25hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoc3RyY2hyKG5hbWUsICcvJykpIHsKQEAgLTUyNSw2ICs1MzQsNDAgQEAKIH0KIAogLyoKKyAqIE9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgY2FsbGVyIG11c3Qgbm90IGF0dGVtcHQgdG8gYWNxdWlyZQorICogX2hhc2hfbG9jayB3aXRob3V0IGZpcnN0IGNhbGxpbmcgZG1fdGFibGVfcHV0LCBiZWNhdXNlIGRtX3RhYmxlX2Rlc3Ryb3kKKyAqIHdhaXRzIGZvciB0aGlzIGRtX3RhYmxlX3B1dCBhbmQgY291bGQgYmUgY2FsbGVkIHVuZGVyIHRoaXMgbG9jay4KKyAqLworc3RhdGljIHN0cnVjdCBkbV90YWJsZSAqZG1fZ2V0X2luYWN0aXZlX3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3sKKwlzdHJ1Y3QgaGFzaF9jZWxsICpoYzsKKwlzdHJ1Y3QgZG1fdGFibGUgKnRhYmxlID0gTlVMTDsKKworCWRvd25fcmVhZCgmX2hhc2hfbG9jayk7CisJaGMgPSBkbV9nZXRfbWRwdHIobWQpOworCWlmICghaGMgfHwgaGMtPm1kICE9IG1kKSB7CisJCURNV0FSTigiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZGV2IGhhc2ggdGFibGUuIik7CisJCWdvdG8gb3V0OworCX0KKworCXRhYmxlID0gaGMtPm5ld19tYXA7CisJaWYgKHRhYmxlKQorCQlkbV90YWJsZV9nZXQodGFibGUpOworCitvdXQ6CisJdXBfcmVhZCgmX2hhc2hfbG9jayk7CisKKwlyZXR1cm4gdGFibGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1fdGFibGUgKmRtX2dldF9saXZlX29yX2luYWN0aXZlX3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwKKwkJCQkJCSAgICAgIHN0cnVjdCBkbV9pb2N0bCAqcGFyYW0pCit7CisJcmV0dXJuIChwYXJhbS0+ZmxhZ3MgJiBETV9RVUVSWV9JTkFDVElWRV9UQUJMRV9GTEFHKSA/CisJCWRtX2dldF9pbmFjdGl2ZV90YWJsZShtZCkgOiBkbV9nZXRfbGl2ZV90YWJsZShtZCk7Cit9CisKKy8qCiAgKiBGaWxscyBpbiBhIGRtX2lvY3RsIHN0cnVjdHVyZSwgcmVhZHkgZm9yIHNlbmRpbmcgYmFjayB0bwogICogdXNlcmxhbmQuCiAgKi8KQEAgLTUzNiw3ICs1NzksNyBAQAogCXBhcmFtLT5mbGFncyAmPSB+KERNX1NVU1BFTkRfRkxBRyB8IERNX1JFQURPTkxZX0ZMQUcgfAogCQkJICBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHKTsKIAotCWlmIChkbV9zdXNwZW5kZWQobWQpKQorCWlmIChkbV9zdXNwZW5kZWRfbWQobWQpKQogCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fU1VTUEVORF9GTEFHOwogCiAJcGFyYW0tPmRldiA9IGh1Z2VfZW5jb2RlX2RldihkaXNrX2RldnQoZGlzaykpOwpAQCAtNTQ4LDE4ICs1OTEsMzAgQEAKIAkgKi8KIAlwYXJhbS0+b3Blbl9jb3VudCA9IGRtX29wZW5fY291bnQobWQpOwogCi0JaWYgKGdldF9kaXNrX3JvKGRpc2spKQotCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fUkVBRE9OTFlfRkxBRzsKLQogCXBhcmFtLT5ldmVudF9uciA9IGRtX2dldF9ldmVudF9ucihtZCk7CisJcGFyYW0tPnRhcmdldF9jb3VudCA9IDA7CiAKLQl0YWJsZSA9IGRtX2dldF90YWJsZShtZCk7CisJdGFibGUgPSBkbV9nZXRfbGl2ZV90YWJsZShtZCk7CiAJaWYgKHRhYmxlKSB7Ci0JCXBhcmFtLT5mbGFncyB8PSBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHOwotCQlwYXJhbS0+dGFyZ2V0X2NvdW50ID0gZG1fdGFibGVfZ2V0X251bV90YXJnZXRzKHRhYmxlKTsKKwkJaWYgKCEocGFyYW0tPmZsYWdzICYgRE1fUVVFUllfSU5BQ1RJVkVfVEFCTEVfRkxBRykpIHsKKwkJCWlmIChnZXRfZGlza19ybyhkaXNrKSkKKwkJCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fUkVBRE9OTFlfRkxBRzsKKwkJCXBhcmFtLT50YXJnZXRfY291bnQgPSBkbV90YWJsZV9nZXRfbnVtX3RhcmdldHModGFibGUpOworCQl9CiAJCWRtX3RhYmxlX3B1dCh0YWJsZSk7Ci0JfSBlbHNlCi0JCXBhcmFtLT50YXJnZXRfY291bnQgPSAwOworCisJCXBhcmFtLT5mbGFncyB8PSBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHOworCX0KKworCWlmIChwYXJhbS0+ZmxhZ3MgJiBETV9RVUVSWV9JTkFDVElWRV9UQUJMRV9GTEFHKSB7CisJCXRhYmxlID0gZG1fZ2V0X2luYWN0aXZlX3RhYmxlKG1kKTsKKwkJaWYgKHRhYmxlKSB7CisJCQlpZiAoIShkbV90YWJsZV9nZXRfbW9kZSh0YWJsZSkgJiBGTU9ERV9XUklURSkpCisJCQkJcGFyYW0tPmZsYWdzIHw9IERNX1JFQURPTkxZX0ZMQUc7CisJCQlwYXJhbS0+dGFyZ2V0X2NvdW50ID0gZG1fdGFibGVfZ2V0X251bV90YXJnZXRzKHRhYmxlKTsKKwkJCWRtX3RhYmxlX3B1dCh0YWJsZSk7CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNCw5ICs2ODksOSBAQAogCQkgKiBTbmVha2lseSB3cml0ZSBpbiBib3RoIHRoZSBuYW1lIGFuZCB0aGUgdXVpZAogCQkgKiB3aGlsZSB3ZSBoYXZlIHRoZSBjZWxsLgogCQkgKi8KLQkJc3RybmNweShwYXJhbS0+bmFtZSwgaGMtPm5hbWUsIHNpemVvZihwYXJhbS0+bmFtZSkpOworCQlzdHJsY3B5KHBhcmFtLT5uYW1lLCBoYy0+bmFtZSwgc2l6ZW9mKHBhcmFtLT5uYW1lKSk7CiAJCWlmIChoYy0+dXVpZCkKLQkJCXN0cm5jcHkocGFyYW0tPnV1aWQsIGhjLT51dWlkLCBzaXplb2YocGFyYW0tPnV1aWQpLTEpOworCQkJc3RybGNweShwYXJhbS0+dXVpZCwgaGMtPnV1aWQsIHNpemVvZihwYXJhbS0+dXVpZCkpOwogCQllbHNlCiAJCQlwYXJhbS0+dXVpZFswXSA9ICdcMCc7CiAKQEAgLTc4NCw3ICs4MzksNyBAQAogCWlmIChwYXJhbS0+ZmxhZ3MgJiBETV9OT0ZMVVNIX0ZMQUcpCiAJCXN1c3BlbmRfZmxhZ3MgfD0gRE1fU1VTUEVORF9OT0ZMVVNIX0ZMQUc7CiAKLQlpZiAoIWRtX3N1c3BlbmRlZChtZCkpCisJaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKQogCQlyID0gZG1fc3VzcGVuZChtZCwgc3VzcGVuZF9mbGFncyk7CiAKIAlpZiAoIXIpCkBAIC04MDAsNyArODU1LDcgQEAKIAl1bnNpZ25lZCBzdXNwZW5kX2ZsYWdzID0gRE1fU1VTUEVORF9MT0NLRlNfRkxBRzsKIAlzdHJ1Y3QgaGFzaF9jZWxsICpoYzsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQ7Ci0Jc3RydWN0IGRtX3RhYmxlICpuZXdfbWFwOworCXN0cnVjdCBkbV90YWJsZSAqbmV3X21hcCwgKm9sZF9tYXAgPSBOVUxMOwogCiAJZG93bl93cml0ZSgmX2hhc2hfbG9jayk7CiAKQEAgLTgyNiwxNCArODgxLDE0IEBACiAJCQlzdXNwZW5kX2ZsYWdzICY9IH5ETV9TVVNQRU5EX0xPQ0tGU19GTEFHOwogCQlpZiAocGFyYW0tPmZsYWdzICYgRE1fTk9GTFVTSF9GTEFHKQogCQkJc3VzcGVuZF9mbGFncyB8PSBETV9TVVNQRU5EX05PRkxVU0hfRkxBRzsKLQkJaWYgKCFkbV9zdXNwZW5kZWQobWQpKQorCQlpZiAoIWRtX3N1c3BlbmRlZF9tZChtZCkpCiAJCQlkbV9zdXNwZW5kKG1kLCBzdXNwZW5kX2ZsYWdzKTsKIAotCQlyID0gZG1fc3dhcF90YWJsZShtZCwgbmV3X21hcCk7Ci0JCWlmIChyKSB7CisJCW9sZF9tYXAgPSBkbV9zd2FwX3RhYmxlKG1kLCBuZXdfbWFwKTsKKwkJaWYgKElTX0VSUihvbGRfbWFwKSkgewogCQkJZG1fdGFibGVfZGVzdHJveShuZXdfbWFwKTsKIAkJCWRtX3B1dChtZCk7Ci0JCQlyZXR1cm4gcjsKKwkJCXJldHVybiBQVFJfRVJSKG9sZF9tYXApOwogCQl9CiAKIAkJaWYgKGRtX3RhYmxlX2dldF9tb2RlKG5ld19tYXApICYgRk1PREVfV1JJVEUpCkBAIC04NDIsOSArODk3LDExIEBACiAJCQlzZXRfZGlza19ybyhkbV9kaXNrKG1kKSwgMSk7CiAJfQogCi0JaWYgKGRtX3N1c3BlbmRlZChtZCkpCisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCiAJCXIgPSBkbV9yZXN1bWUobWQpOwogCisJaWYgKG9sZF9tYXApCisJCWRtX3RhYmxlX2Rlc3Ryb3kob2xkX21hcCk7CiAKIAlpZiAoIXIpIHsKIAkJZG1fa29iamVjdF91ZXZlbnQobWQsIEtPQkpfQ0hBTkdFLCBwYXJhbS0+ZXZlbnRfbnIpOwpAQCAtOTgyLDcgKzEwMzksNyBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAotCXRhYmxlID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwl0YWJsZSA9IGRtX2dldF9saXZlX29yX2luYWN0aXZlX3RhYmxlKG1kLCBwYXJhbSk7CiAJaWYgKHRhYmxlKSB7CiAJCXJldHJpZXZlX3N0YXR1cyh0YWJsZSwgcGFyYW0sIHBhcmFtX3NpemUpOwogCQlkbV90YWJsZV9wdXQodGFibGUpOwpAQCAtMTIxNSw3ICsxMjcyLDcgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQl0YWJsZSA9IGRtX2dldF90YWJsZShtZCk7CisJdGFibGUgPSBkbV9nZXRfbGl2ZV9vcl9pbmFjdGl2ZV90YWJsZShtZCwgcGFyYW0pOwogCWlmICh0YWJsZSkgewogCQlyZXRyaWV2ZV9kZXBzKHRhYmxlLCBwYXJhbSwgcGFyYW1fc2l6ZSk7CiAJCWRtX3RhYmxlX3B1dCh0YWJsZSk7CkBAIC0xMjQ0LDEzICsxMzAxLDEzIEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JdGFibGUgPSBkbV9nZXRfdGFibGUobWQpOworCXRhYmxlID0gZG1fZ2V0X2xpdmVfb3JfaW5hY3RpdmVfdGFibGUobWQsIHBhcmFtKTsKIAlpZiAodGFibGUpIHsKIAkJcmV0cmlldmVfc3RhdHVzKHRhYmxlLCBwYXJhbSwgcGFyYW1fc2l6ZSk7CiAJCWRtX3RhYmxlX3B1dCh0YWJsZSk7CiAJfQogCi0gb3V0Ogorb3V0OgogCWRtX3B1dChtZCk7CiAJcmV0dXJuIHI7CiB9CkBAIC0xMjg4LDEwICsxMzQ1LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXRhYmxlID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwl0YWJsZSA9IGRtX2dldF9saXZlX3RhYmxlKG1kKTsKIAlpZiAoIXRhYmxlKQogCQlnb3RvIG91dF9hcmd2OwogCisJaWYgKGRtX2RlbGV0aW5nX21kKG1kKSkgeworCQlyID0gLUVOWElPOworCQlnb3RvIG91dF90YWJsZTsKKwl9CisKIAl0aSA9IGRtX3RhYmxlX2ZpbmRfdGFyZ2V0KHRhYmxlLCB0bXNnLT5zZWN0b3IpOwogCWlmICghZG1fdGFyZ2V0X2lzX3ZhbGlkKHRpKSkgewogCQlETVdBUk4oIlRhcmdldCBtZXNzYWdlIHNlY3RvciBvdXRzaWRlIGRldmljZS4iKTsKQEAgLTEzMDMsNiArMTM2NSw3IEBACiAJCXIgPSAtRUlOVkFMOwogCX0KIAorIG91dF90YWJsZToKIAlkbV90YWJsZV9wdXQodGFibGUpOwogIG91dF9hcmd2OgogCWtmcmVlKGFyZ3YpOwpAQCAtMTU4Miw4ICsxNjQ1LDcgQEAKIAlpZiAoIW1kKQogCQlyZXR1cm4gLUVOWElPOwogCi0JZG1fZ2V0KG1kKTsKLQlkb3duX3JlYWQoJl9oYXNoX2xvY2spOworCW11dGV4X2xvY2soJmRtX2hhc2hfY2VsbHNfbXV0ZXgpOwogCWhjID0gZG1fZ2V0X21kcHRyKG1kKTsKIAlpZiAoIWhjIHx8IGhjLT5tZCAhPSBtZCkgewogCQlyID0gLUVOWElPOwpAQCAtMTU5Niw4ICsxNjU4LDcgQEAKIAkJc3RyY3B5KHV1aWQsIGhjLT51dWlkID8gOiAiIik7CiAKIG91dDoKLQl1cF9yZWFkKCZfaGFzaF9sb2NrKTsKLQlkbV9wdXQobWQpOworCW11dGV4X3VubG9jaygmZG1faGFzaF9jZWxsc19tdXRleCk7CiAKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMgYi9kcml2ZXJzL21kL2RtLWtjb3B5ZC5jCmluZGV4IDNlM2ZjMDYuLmFkZGY4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMKKysrIGIvZHJpdmVycy9tZC9kbS1rY29weWQuYwpAQCAtNDUwLDcgKzQ1MCwxMCBAQAogewogCXN0cnVjdCBkbV9rY29weWRfY2xpZW50ICprYyA9IGpvYi0+a2M7CiAJYXRvbWljX2luYygma2MtPm5yX2pvYnMpOwotCXB1c2goJmtjLT5wYWdlc19qb2JzLCBqb2IpOworCWlmICh1bmxpa2VseSgham9iLT5zb3VyY2UuY291bnQpKQorCQlwdXNoKCZrYy0+Y29tcGxldGVfam9icywgam9iKTsKKwllbHNlCisJCXB1c2goJmtjLT5wYWdlc19qb2JzLCBqb2IpOwogCXdha2Uoa2MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy5jIGIvZHJpdmVycy9tZC9kbS1sb2cuYwppbmRleCA5NDQzODk2Li43MDM1NTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKQEAgLTE0NSw4ICsxNDUsOSBAQAogRVhQT1JUX1NZTUJPTChkbV9kaXJ0eV9sb2dfdHlwZV91bnJlZ2lzdGVyKTsKIAogc3RydWN0IGRtX2RpcnR5X2xvZyAqZG1fZGlydHlfbG9nX2NyZWF0ZShjb25zdCBjaGFyICp0eXBlX25hbWUsCi0JCQkJCSBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwKLQkJCQkJIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndikKKwkJCXN0cnVjdCBkbV90YXJnZXQgKnRpLAorCQkJaW50ICgqZmx1c2hfY2FsbGJhY2tfZm4pKHN0cnVjdCBkbV90YXJnZXQgKnRpKSwKKwkJCXVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGU7CiAJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nOwpAQCAtMTYxLDYgKzE2Miw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCWxvZy0+Zmx1c2hfY2FsbGJhY2tfZm4gPSBmbHVzaF9jYWxsYmFja19mbjsKIAlsb2ctPnR5cGUgPSB0eXBlOwogCWlmICh0eXBlLT5jdHIobG9nLCB0aSwgYXJnYywgYXJndikpIHsKIAkJa2ZyZWUobG9nKTsKQEAgLTIwOCw3ICsyMTAsOSBAQAogCiBzdHJ1Y3QgbG9nX2MgewogCXN0cnVjdCBkbV90YXJnZXQgKnRpOwotCWludCB0b3VjaGVkOworCWludCB0b3VjaGVkX2RpcnRpZWQ7CisJaW50IHRvdWNoZWRfY2xlYW5lZDsKKwlpbnQgZmx1c2hfZmFpbGVkOwogCXVpbnQzMl90IHJlZ2lvbl9zaXplOwogCXVuc2lnbmVkIGludCByZWdpb25fY291bnQ7CiAJcmVnaW9uX3Qgc3luY19jb3VudDsKQEAgLTIzMyw2ICsyMzcsNyBAQAogCSAqIERpc2sgbG9nIGZpZWxkcwogCSAqLwogCWludCBsb2dfZGV2X2ZhaWxlZDsKKwlpbnQgbG9nX2Rldl9mbHVzaF9mYWlsZWQ7CiAJc3RydWN0IGRtX2RldiAqbG9nX2RldjsKIAlzdHJ1Y3QgbG9nX2hlYWRlciBoZWFkZXI7CiAKQEAgLTI1MywxNCArMjU4LDE0IEBACiAJCQkgICAgICAgdWludDMyX3QgKmJzLCB1bnNpZ25lZCBiaXQpCiB7CiAJZXh0Ml9zZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgYnMpOwotCWwtPnRvdWNoZWQgPSAxOworCWwtPnRvdWNoZWRfY2xlYW5lZCA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dfY2xlYXJfYml0KHN0cnVjdCBsb2dfYyAqbCwKIAkJCQkgdWludDMyX3QgKmJzLCB1bnNpZ25lZCBiaXQpCiB7CiAJZXh0Ml9jbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicyk7Ci0JbC0+dG91Y2hlZCA9IDE7CisJbC0+dG91Y2hlZF9kaXJ0aWVkID0gMTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yODcsNiArMjkyLDE5IEBACiAJcmV0dXJuIGRtX2lvKCZsYy0+aW9fcmVxLCAxLCAmbGMtPmhlYWRlcl9sb2NhdGlvbiwgTlVMTCk7CiB9CiAKK3N0YXRpYyBpbnQgZmx1c2hfaGVhZGVyKHN0cnVjdCBsb2dfYyAqbGMpCit7CisJc3RydWN0IGRtX2lvX3JlZ2lvbiBudWxsX2xvY2F0aW9uID0geworCQkuYmRldiA9IGxjLT5oZWFkZXJfbG9jYXRpb24uYmRldiwKKwkJLnNlY3RvciA9IDAsCisJCS5jb3VudCA9IDAsCisJfTsKKworCWxjLT5pb19yZXEuYmlfcncgPSBXUklURV9CQVJSSUVSOworCisJcmV0dXJuIGRtX2lvKCZsYy0+aW9fcmVxLCAxLCAmbnVsbF9sb2NhdGlvbiwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgcmVhZF9oZWFkZXIoc3RydWN0IGxvZ19jICpsb2cpCiB7CiAJaW50IHI7CkBAIC0zNzgsNyArMzk2LDkgQEAKIAl9CiAKIAlsYy0+dGkgPSB0aTsKLQlsYy0+dG91Y2hlZCA9IDA7CisJbGMtPnRvdWNoZWRfZGlydGllZCA9IDA7CisJbGMtPnRvdWNoZWRfY2xlYW5lZCA9IDA7CisJbGMtPmZsdXNoX2ZhaWxlZCA9IDA7CiAJbGMtPnJlZ2lvbl9zaXplID0gcmVnaW9uX3NpemU7CiAJbGMtPnJlZ2lvbl9jb3VudCA9IHJlZ2lvbl9jb3VudDsKIAlsYy0+c3luYyA9IHN5bmM7CkBAIC00MDYsNiArNDI2LDcgQEAKIAl9IGVsc2UgewogCQlsYy0+bG9nX2RldiA9IGRldjsKIAkJbGMtPmxvZ19kZXZfZmFpbGVkID0gMDsKKwkJbGMtPmxvZ19kZXZfZmx1c2hfZmFpbGVkID0gMDsKIAkJbGMtPmhlYWRlcl9sb2NhdGlvbi5iZGV2ID0gbGMtPmxvZ19kZXYtPmJkZXY7CiAJCWxjLT5oZWFkZXJfbG9jYXRpb24uc2VjdG9yID0gMDsKIApAQCAtNjE0LDYgKzYzNSwxMSBAQAogCiAJLyogd3JpdGUgdGhlIG5ldyBoZWFkZXIgKi8KIAlyID0gcndfaGVhZGVyKGxjLCBXUklURSk7CisJaWYgKCFyKSB7CisJCXIgPSBmbHVzaF9oZWFkZXIobGMpOworCQlpZiAocikKKwkJCWxjLT5sb2dfZGV2X2ZsdXNoX2ZhaWxlZCA9IDE7CisJfQogCWlmIChyKSB7CiAJCURNV0FSTigiJXM6IEZhaWxlZCB0byB3cml0ZSBoZWFkZXIgb24gZGlydHkgcmVnaW9uIGxvZyBkZXZpY2UiLAogCQkgICAgICAgbGMtPmxvZ19kZXYtPm5hbWUpOwpAQCAtNjU2LDE4ICs2ODIsNDAgQEAKIAogc3RhdGljIGludCBkaXNrX2ZsdXNoKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZykKIHsKLQlpbnQgcjsKLQlzdHJ1Y3QgbG9nX2MgKmxjID0gKHN0cnVjdCBsb2dfYyAqKSBsb2ctPmNvbnRleHQ7CisJaW50IHIsIGk7CisJc3RydWN0IGxvZ19jICpsYyA9IGxvZy0+Y29udGV4dDsKIAogCS8qIG9ubHkgd3JpdGUgaWYgdGhlIGxvZyBoYXMgY2hhbmdlZCAqLwotCWlmICghbGMtPnRvdWNoZWQpCisJaWYgKCFsYy0+dG91Y2hlZF9jbGVhbmVkICYmICFsYy0+dG91Y2hlZF9kaXJ0aWVkKQogCQlyZXR1cm4gMDsKIAorCWlmIChsYy0+dG91Y2hlZF9jbGVhbmVkICYmIGxvZy0+Zmx1c2hfY2FsbGJhY2tfZm4gJiYKKwkgICAgbG9nLT5mbHVzaF9jYWxsYmFja19mbihsYy0+dGkpKSB7CisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hpY2gKKwkJICogcmVnaW9ucyBhcmUgY2xlYW4gYW5kIHdoaWNoIGFyZSBkaXJ0eSAod2l0aG91dAorCQkgKiByZS1yZWFkaW5nIHRoZSBsb2cgb2ZmIGRpc2spLiBTbyBtYXJrIGFsbCBvZiB0aGVtCisJCSAqIGRpcnR5LgorCQkgKi8KKwkJbGMtPmZsdXNoX2ZhaWxlZCA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCBsYy0+cmVnaW9uX2NvdW50OyBpKyspCisJCQlsb2dfY2xlYXJfYml0KGxjLCBsYy0+Y2xlYW5fYml0cywgaSk7CisJfQorCiAJciA9IHJ3X2hlYWRlcihsYywgV1JJVEUpOwogCWlmIChyKQogCQlmYWlsX2xvZ19kZXZpY2UobGMpOwotCWVsc2UKLQkJbGMtPnRvdWNoZWQgPSAwOworCWVsc2UgeworCQlpZiAobGMtPnRvdWNoZWRfZGlydGllZCkgeworCQkJciA9IGZsdXNoX2hlYWRlcihsYyk7CisJCQlpZiAocikgeworCQkJCWxjLT5sb2dfZGV2X2ZsdXNoX2ZhaWxlZCA9IDE7CisJCQkJZmFpbF9sb2dfZGV2aWNlKGxjKTsKKwkJCX0gZWxzZQorCQkJCWxjLT50b3VjaGVkX2RpcnRpZWQgPSAwOworCQl9CisJCWxjLT50b3VjaGVkX2NsZWFuZWQgPSAwOworCX0KIAogCXJldHVybiByOwogfQpAQCAtNjgxLDcgKzcyOSw4IEBACiBzdGF0aWMgdm9pZCBjb3JlX2NsZWFyX3JlZ2lvbihzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csIHJlZ2lvbl90IHJlZ2lvbikKIHsKIAlzdHJ1Y3QgbG9nX2MgKmxjID0gKHN0cnVjdCBsb2dfYyAqKSBsb2ctPmNvbnRleHQ7Ci0JbG9nX3NldF9iaXQobGMsIGxjLT5jbGVhbl9iaXRzLCByZWdpb24pOworCWlmIChsaWtlbHkoIWxjLT5mbHVzaF9mYWlsZWQpKQorCQlsb2dfc2V0X2JpdChsYywgbGMtPmNsZWFuX2JpdHMsIHJlZ2lvbik7CiB9CiAKIHN0YXRpYyBpbnQgY29yZV9nZXRfcmVzeW5jX3dvcmsoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCByZWdpb25fdCAqcmVnaW9uKQpAQCAtNzYyLDcgKzgxMSw5IEBACiAJc3dpdGNoKHN0YXR1cykgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgogCQlETUVNSVQoIjMgJXMgJXMgJWMiLCBsb2ctPnR5cGUtPm5hbWUsIGxjLT5sb2dfZGV2LT5uYW1lLAotCQkgICAgICAgbGMtPmxvZ19kZXZfZmFpbGVkID8gJ0QnIDogJ0EnKTsKKwkJICAgICAgIGxjLT5sb2dfZGV2X2ZsdXNoX2ZhaWxlZCA/ICdGJyA6CisJCSAgICAgICBsYy0+bG9nX2Rldl9mYWlsZWQgPyAnRCcgOgorCQkgICAgICAgJ0EnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNUQVRVU1RZUEVfVEFCTEU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggZGNlOTcxZC4uZTgxMzQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtOTMsNiArOTMsMTAgQEAKIAkgKiBjYW4gcmVzdWJtaXQgYmlvcyBvbiBlcnJvci4KIAkgKi8KIAltZW1wb29sX3QgKm1waW9fcG9vbDsKKworCXN0cnVjdCBtdXRleCB3b3JrX211dGV4OworCisJdW5zaWduZWQgc3VzcGVuZGVkOwkvKiBEb24ndCBjcmVhdGUgbmV3IEkvTyBpbnRlcm5hbGx5IHdoZW4gc2V0LiAqLwogfTsKIAogLyoKQEAgLTE5OCw2ICsyMDIsNyBAQAogCQltLT5xdWV1ZV9pbyA9IDE7CiAJCUlOSVRfV09SSygmbS0+cHJvY2Vzc19xdWV1ZWRfaW9zLCBwcm9jZXNzX3F1ZXVlZF9pb3MpOwogCQlJTklUX1dPUksoJm0tPnRyaWdnZXJfZXZlbnQsIHRyaWdnZXJfZXZlbnQpOworCQltdXRleF9pbml0KCZtLT53b3JrX211dGV4KTsKIAkJbS0+bXBpb19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKE1JTl9JT1MsIF9tcGlvX2NhY2hlKTsKIAkJaWYgKCFtLT5tcGlvX3Bvb2wpIHsKIAkJCWtmcmVlKG0pOwpAQCAtODg1LDEzICs4OTAsMTggQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgbXVsdGlwYXRoX2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKK3N0YXRpYyB2b2lkIGZsdXNoX211bHRpcGF0aF93b3JrKHZvaWQpCiB7Ci0Jc3RydWN0IG11bHRpcGF0aCAqbSA9IChzdHJ1Y3QgbXVsdGlwYXRoICopIHRpLT5wcml2YXRlOwotCiAJZmx1c2hfd29ya3F1ZXVlKGttcGF0aF9oYW5kbGVyZCk7CiAJZmx1c2hfd29ya3F1ZXVlKGttdWx0aXBhdGhkKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworfQorCitzdGF0aWMgdm9pZCBtdWx0aXBhdGhfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBtdWx0aXBhdGggKm0gPSB0aS0+cHJpdmF0ZTsKKworCWZsdXNoX211bHRpcGF0aF93b3JrKCk7CiAJZnJlZV9tdWx0aXBhdGgobSk7CiB9CiAKQEAgLTEyNjEsNiArMTI3MSwxNiBAQAogCXF1ZXVlX2lmX25vX3BhdGgobSwgMCwgMSk7CiB9CiAKK3N0YXRpYyB2b2lkIG11bHRpcGF0aF9wb3N0c3VzcGVuZChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKK3sKKwlzdHJ1Y3QgbXVsdGlwYXRoICptID0gdGktPnByaXZhdGU7CisKKwltdXRleF9sb2NrKCZtLT53b3JrX211dGV4KTsKKwltLT5zdXNwZW5kZWQgPSAxOworCWZsdXNoX211bHRpcGF0aF93b3JrKCk7CisJbXV0ZXhfdW5sb2NrKCZtLT53b3JrX211dGV4KTsKK30KKwogLyoKICAqIFJlc3RvcmUgdGhlIHF1ZXVlX2lmX25vX3BhdGggc2V0dGluZy4KICAqLwpAQCAtMTI2OSw2ICsxMjg5LDEwIEBACiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IChzdHJ1Y3QgbXVsdGlwYXRoICopIHRpLT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwltdXRleF9sb2NrKCZtLT53b3JrX211dGV4KTsKKwltLT5zdXNwZW5kZWQgPSAwOworCW11dGV4X3VubG9jaygmbS0+d29ya19tdXRleCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+bG9jaywgZmxhZ3MpOwogCW0tPnF1ZXVlX2lmX25vX3BhdGggPSBtLT5zYXZlZF9xdWV1ZV9pZl9ub19wYXRoOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKQEAgLTEzOTcsNTEgKzE0MjEsNzEgQEAKIAogc3RhdGljIGludCBtdWx0aXBhdGhfbWVzc2FnZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCiB7Ci0JaW50IHI7CisJaW50IHIgPSAtRUlOVkFMOwogCXN0cnVjdCBkbV9kZXYgKmRldjsKIAlzdHJ1Y3QgbXVsdGlwYXRoICptID0gKHN0cnVjdCBtdWx0aXBhdGggKikgdGktPnByaXZhdGU7CiAJYWN0aW9uX2ZuIGFjdGlvbjsKIAotCWlmIChhcmdjID09IDEpIHsKLQkJaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigicXVldWVfaWZfbm9fcGF0aCIpKSkKLQkJCXJldHVybiBxdWV1ZV9pZl9ub19wYXRoKG0sIDEsIDApOwotCQllbHNlIGlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoImZhaWxfaWZfbm9fcGF0aCIpKSkKLQkJCXJldHVybiBxdWV1ZV9pZl9ub19wYXRoKG0sIDAsIDApOworCW11dGV4X2xvY2soJm0tPndvcmtfbXV0ZXgpOworCisJaWYgKG0tPnN1c3BlbmRlZCkgeworCQlyID0gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoYXJnYyAhPSAyKQotCQlnb3RvIGVycm9yOworCWlmIChkbV9zdXNwZW5kZWQodGkpKSB7CisJCXIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KIAotCWlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoImRpc2FibGVfZ3JvdXAiKSkpCi0JCXJldHVybiBieXBhc3NfcGdfbnVtKG0sIGFyZ3ZbMV0sIDEpOwotCWVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigiZW5hYmxlX2dyb3VwIikpKQotCQlyZXR1cm4gYnlwYXNzX3BnX251bShtLCBhcmd2WzFdLCAwKTsKLQllbHNlIGlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoInN3aXRjaF9ncm91cCIpKSkKLQkJcmV0dXJuIHN3aXRjaF9wZ19udW0obSwgYXJndlsxXSk7Ci0JZWxzZSBpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJyZWluc3RhdGVfcGF0aCIpKSkKKwlpZiAoYXJnYyA9PSAxKSB7CisJCWlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoInF1ZXVlX2lmX25vX3BhdGgiKSkpIHsKKwkJCXIgPSBxdWV1ZV9pZl9ub19wYXRoKG0sIDEsIDApOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJmYWlsX2lmX25vX3BhdGgiKSkpIHsKKwkJCXIgPSBxdWV1ZV9pZl9ub19wYXRoKG0sIDAsIDApOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCURNV0FSTigiVW5yZWNvZ25pc2VkIG11bHRpcGF0aCBtZXNzYWdlIHJlY2VpdmVkLiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJkaXNhYmxlX2dyb3VwIikpKSB7CisJCXIgPSBieXBhc3NfcGdfbnVtKG0sIGFyZ3ZbMV0sIDEpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigiZW5hYmxlX2dyb3VwIikpKSB7CisJCXIgPSBieXBhc3NfcGdfbnVtKG0sIGFyZ3ZbMV0sIDApOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigic3dpdGNoX2dyb3VwIikpKSB7CisJCXIgPSBzd2l0Y2hfcGdfbnVtKG0sIGFyZ3ZbMV0pOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigicmVpbnN0YXRlX3BhdGgiKSkpCiAJCWFjdGlvbiA9IHJlaW5zdGF0ZV9wYXRoOwogCWVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigiZmFpbF9wYXRoIikpKQogCQlhY3Rpb24gPSBmYWlsX3BhdGg7Ci0JZWxzZQotCQlnb3RvIGVycm9yOworCWVsc2UgeworCQlETVdBUk4oIlVucmVjb2duaXNlZCBtdWx0aXBhdGggbWVzc2FnZSByZWNlaXZlZC4iKTsKKwkJZ290byBvdXQ7CisJfQogCiAJciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMV0sIHRpLT5iZWdpbiwgdGktPmxlbiwKIAkJCSAgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmRldik7CiAJaWYgKHIpIHsKIAkJRE1XQVJOKCJtZXNzYWdlOiBlcnJvciBnZXR0aW5nIGRldmljZSAlcyIsCiAJCSAgICAgICBhcmd2WzFdKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCXIgPSBhY3Rpb25fZGV2KG0sIGRldiwgYWN0aW9uKTsKIAogCWRtX3B1dF9kZXZpY2UodGksIGRldik7CiAKK291dDoKKwltdXRleF91bmxvY2soJm0tPndvcmtfbXV0ZXgpOwogCXJldHVybiByOwotCi1lcnJvcjoKLQlETVdBUk4oIlVucmVjb2duaXNlZCBtdWx0aXBhdGggbWVzc2FnZSByZWNlaXZlZC4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBtdWx0aXBhdGhfaW9jdGwoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBjbWQsCkBAIC0xNTY3LDEzICsxNjExLDE0IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIG11bHRpcGF0aF90YXJnZXQgPSB7CiAJLm5hbWUgPSAibXVsdGlwYXRoIiwKLQkudmVyc2lvbiA9IHsxLCAxLCAwfSwKKwkudmVyc2lvbiA9IHsxLCAxLCAxfSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciA9IG11bHRpcGF0aF9jdHIsCiAJLmR0ciA9IG11bHRpcGF0aF9kdHIsCiAJLm1hcF9ycSA9IG11bHRpcGF0aF9tYXAsCiAJLnJxX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfaW8sCiAJLnByZXN1c3BlbmQgPSBtdWx0aXBhdGhfcHJlc3VzcGVuZCwKKwkucG9zdHN1c3BlbmQgPSBtdWx0aXBhdGhfcG9zdHN1c3BlbmQsCiAJLnJlc3VtZSA9IG11bHRpcGF0aF9yZXN1bWUsCiAJLnN0YXR1cyA9IG11bHRpcGF0aF9zdGF0dXMsCiAJLm1lc3NhZ2UgPSBtdWx0aXBhdGhfbWVzc2FnZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwppbmRleCBjYzlkYzc5Li5hZDc3OWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCkBAIC0zNSw2ICszNSw3IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBlbnVtIGRtX3JhaWQxX2Vycm9yIHsKIAlETV9SQUlEMV9XUklURV9FUlJPUiwKKwlETV9SQUlEMV9GTFVTSF9FUlJPUiwKIAlETV9SQUlEMV9TWU5DX0VSUk9SLAogCURNX1JBSUQxX1JFQURfRVJST1IKIH07CkBAIC01Nyw2ICs1OCw3IEBACiAJc3RydWN0IGJpb19saXN0IHJlYWRzOwogCXN0cnVjdCBiaW9fbGlzdCB3cml0ZXM7CiAJc3RydWN0IGJpb19saXN0IGZhaWx1cmVzOworCXN0cnVjdCBiaW9fbGlzdCBob2xkczsJLyogYmlvcyBhcmUgd2FpdGluZyB1bnRpbCBzdXNwZW5kICovCiAKIAlzdHJ1Y3QgZG1fcmVnaW9uX2hhc2ggKnJoOwogCXN0cnVjdCBkbV9rY29weWRfY2xpZW50ICprY29weWRfY2xpZW50OwpAQCAtNjcsNiArNjksNyBAQAogCXJlZ2lvbl90IG5yX3JlZ2lvbnM7CiAJaW50IGluX3N5bmM7CiAJaW50IGxvZ19mYWlsdXJlOworCWludCBsZWdfZmFpbHVyZTsKIAlhdG9taWNfdCBzdXNwZW5kOwogCiAJYXRvbWljX3QgZGVmYXVsdF9taXJyb3I7CS8qIERlZmF1bHQgbWlycm9yICovCkBAIC0xNzksNiArMTgyLDE3IEBACiAJYXRvbWljX3NldCgmbXMtPmRlZmF1bHRfbWlycm9yLCBtIC0gbTApOwogfQogCitzdGF0aWMgc3RydWN0IG1pcnJvciAqZ2V0X3ZhbGlkX21pcnJvcihzdHJ1Y3QgbWlycm9yX3NldCAqbXMpCit7CisJc3RydWN0IG1pcnJvciAqbTsKKworCWZvciAobSA9IG1zLT5taXJyb3I7IG0gPCBtcy0+bWlycm9yICsgbXMtPm5yX21pcnJvcnM7IG0rKykKKwkJaWYgKCFhdG9taWNfcmVhZCgmbS0+ZXJyb3JfY291bnQpKQorCQkJcmV0dXJuIG07CisKKwlyZXR1cm4gTlVMTDsKK30KKwogLyogZmFpbF9taXJyb3IKICAqIEBtOiBtaXJyb3IgZGV2aWNlIHRvIGZhaWwKICAqIEBlcnJvcl90eXBlOiBvbmUgb2YgdGhlIGVudW0ncywgRE1fUkFJRDFfKl9FUlJPUgpAQCAtMTk4LDYgKzIxMiw4IEBACiAJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gbS0+bXM7CiAJc3RydWN0IG1pcnJvciAqbmV3OwogCisJbXMtPmxlZ19mYWlsdXJlID0gMTsKKwogCS8qCiAJICogZXJyb3JfY291bnQgaXMgdXNlZCBmb3Igbm90aGluZyBtb3JlIHRoYW4gYQogCSAqIHNpbXBsZSB3YXkgdG8gdGVsbCBpZiBhIGRldmljZSBoYXMgZW5jb3VudGVyZWQKQEAgLTIyNCwxOSArMjQwLDUwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZvciAobmV3ID0gbXMtPm1pcnJvcjsgbmV3IDwgbXMtPm1pcnJvciArIG1zLT5ucl9taXJyb3JzOyBuZXcrKykKLQkJaWYgKCFhdG9taWNfcmVhZCgmbmV3LT5lcnJvcl9jb3VudCkpIHsKLQkJCXNldF9kZWZhdWx0X21pcnJvcihuZXcpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWlmICh1bmxpa2VseShuZXcgPT0gbXMtPm1pcnJvciArIG1zLT5ucl9taXJyb3JzKSkKKwluZXcgPSBnZXRfdmFsaWRfbWlycm9yKG1zKTsKKwlpZiAobmV3KQorCQlzZXRfZGVmYXVsdF9taXJyb3IobmV3KTsKKwllbHNlCiAJCURNV0FSTigiQWxsIHNpZGVzIG9mIG1pcnJvciBoYXZlIGZhaWxlZC4iKTsKIAogb3V0OgogCXNjaGVkdWxlX3dvcmsoJm1zLT50cmlnZ2VyX2V2ZW50KTsKIH0KIAorc3RhdGljIGludCBtaXJyb3JfZmx1c2goc3RydWN0IGRtX3RhcmdldCAqdGkpCit7CisJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gdGktPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBlcnJvcl9iaXRzOworCisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGRtX2lvX3JlZ2lvbiBpb1ttcy0+bnJfbWlycm9yc107CisJc3RydWN0IG1pcnJvciAqbTsKKwlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7CisJCS5iaV9ydyA9IFdSSVRFX0JBUlJJRVIsCisJCS5tZW0udHlwZSA9IERNX0lPX0tNRU0sCisJCS5tZW0ucHRyLmJ2ZWMgPSBOVUxMLAorCQkuY2xpZW50ID0gbXMtPmlvX2NsaWVudCwKKwl9OworCisJZm9yIChpID0gMCwgbSA9IG1zLT5taXJyb3I7IGkgPCBtcy0+bnJfbWlycm9yczsgaSsrLCBtKyspIHsKKwkJaW9baV0uYmRldiA9IG0tPmRldi0+YmRldjsKKwkJaW9baV0uc2VjdG9yID0gMDsKKwkJaW9baV0uY291bnQgPSAwOworCX0KKworCWVycm9yX2JpdHMgPSAtMTsKKwlkbV9pbygmaW9fcmVxLCBtcy0+bnJfbWlycm9ycywgaW8sICZlcnJvcl9iaXRzKTsKKwlpZiAodW5saWtlbHkoZXJyb3JfYml0cyAhPSAwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbXMtPm5yX21pcnJvcnM7IGkrKykKKwkJCWlmICh0ZXN0X2JpdChpLCAmZXJyb3JfYml0cykpCisJCQkJZmFpbF9taXJyb3IobXMtPm1pcnJvciArIGksCisJCQkJCSAgICBETV9SQUlEMV9GTFVTSF9FUlJPUik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBSZWNvdmVyeS4KICAqCkBAIC0zOTYsNiArNDQzLDggQEAKICAqLwogc3RhdGljIHNlY3Rvcl90IG1hcF9zZWN0b3Ioc3RydWN0IG1pcnJvciAqbSwgc3RydWN0IGJpbyAqYmlvKQogeworCWlmICh1bmxpa2VseSghYmlvLT5iaV9zaXplKSkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIG0tPm9mZnNldCArIChiaW8tPmJpX3NlY3RvciAtIG0tPm1zLT50aS0+YmVnaW4pOwogfQogCkBAIC00MTMsNiArNDYyLDI3IEBACiAJaW8tPmNvdW50ID0gYmlvLT5iaV9zaXplID4+IDk7CiB9CiAKK3N0YXRpYyB2b2lkIGhvbGRfYmlvKHN0cnVjdCBtaXJyb3Jfc2V0ICptcywgc3RydWN0IGJpbyAqYmlvKQoreworCS8qCisJICogSWYgZGV2aWNlIGlzIHN1c3BlbmRlZCwgY29tcGxldGUgdGhlIGJpby4KKwkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJm1zLT5zdXNwZW5kKSkgeworCQlpZiAoZG1fbm9mbHVzaF9zdXNwZW5kaW5nKG1zLT50aSkpCisJCQliaW9fZW5kaW8oYmlvLCBETV9FTkRJT19SRVFVRVVFKTsKKwkJZWxzZQorCQkJYmlvX2VuZGlvKGJpbywgLUVJTyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEhvbGQgYmlvIHVudGlsIHRoZSBzdXNwZW5kIGlzIGNvbXBsZXRlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJm1zLT5sb2NrKTsKKwliaW9fbGlzdF9hZGQoJm1zLT5ob2xkcywgYmlvKTsKKwlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUmVhZHMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUxMSw3ICs1ODEsNiBAQAogCXVuc2lnbmVkIGksIHJldCA9IDA7CiAJc3RydWN0IGJpbyAqYmlvID0gKHN0cnVjdCBiaW8gKikgY29udGV4dDsKIAlzdHJ1Y3QgbWlycm9yX3NldCAqbXM7Ci0JaW50IHVwdG9kYXRlID0gMDsKIAlpbnQgc2hvdWxkX3dha2UgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTUyNCwzNiArNTkzLDI3IEBACiAJICogVGhpcyB3YXkgd2UgaGFuZGxlIGJvdGggd3JpdGVzIHRvIFNZTkMgYW5kIE5PU1lOQwogCSAqIHJlZ2lvbnMgd2l0aCB0aGUgc2FtZSBjb2RlLgogCSAqLwotCWlmIChsaWtlbHkoIWVycm9yKSkKLQkJZ290byBvdXQ7CisJaWYgKGxpa2VseSghZXJyb3IpKSB7CisJCWJpb19lbmRpbyhiaW8sIHJldCk7CisJCXJldHVybjsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXMtPm5yX21pcnJvcnM7IGkrKykKIAkJaWYgKHRlc3RfYml0KGksICZlcnJvcikpCiAJCQlmYWlsX21pcnJvcihtcy0+bWlycm9yICsgaSwgRE1fUkFJRDFfV1JJVEVfRVJST1IpOwotCQllbHNlCi0JCQl1cHRvZGF0ZSA9IDE7CiAKLQlpZiAodW5saWtlbHkoIXVwdG9kYXRlKSkgewotCQlETUVSUigiQWxsIHJlcGxpY2F0ZWQgdm9sdW1lcyBkZWFkLCBmYWlsaW5nIEkvTyIpOwotCQkvKiBOb25lIG9mIHRoZSB3cml0ZXMgc3VjY2VlZGVkLCBmYWlsIHRoZSBJL08uICovCi0JCXJldCA9IC1FSU87Ci0JfSBlbHNlIGlmIChlcnJvcnNfaGFuZGxlZChtcykpIHsKLQkJLyoKLQkJICogTmVlZCB0byByYWlzZSBldmVudC4gIFNpbmNlIHJhaXNpbmcKLQkJICogZXZlbnRzIGNhbiBibG9jaywgd2UgbmVlZCB0byBkbyBpdCBpbgotCQkgKiB0aGUgbWFpbiB0aHJlYWQuCi0JCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKCFtcy0+ZmFpbHVyZXMuaGVhZCkKLQkJCXNob3VsZF93YWtlID0gMTsKLQkJYmlvX2xpc3RfYWRkKCZtcy0+ZmFpbHVyZXMsIGJpbyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChzaG91bGRfd2FrZSkKLQkJCXdha2V1cF9taXJyb3JkKG1zKTsKLQkJcmV0dXJuOwotCX0KLW91dDoKLQliaW9fZW5kaW8oYmlvLCByZXQpOworCS8qCisJICogTmVlZCB0byByYWlzZSBldmVudC4gIFNpbmNlIHJhaXNpbmcKKwkgKiBldmVudHMgY2FuIGJsb2NrLCB3ZSBuZWVkIHRvIGRvIGl0IGluCisJICogdGhlIG1haW4gdGhyZWFkLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtcy0+bG9jaywgZmxhZ3MpOworCWlmICghbXMtPmZhaWx1cmVzLmhlYWQpCisJCXNob3VsZF93YWtlID0gMTsKKwliaW9fbGlzdF9hZGQoJm1zLT5mYWlsdXJlcywgYmlvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcy0+bG9jaywgZmxhZ3MpOworCWlmIChzaG91bGRfd2FrZSkKKwkJd2FrZXVwX21pcnJvcmQobXMpOwogfQogCiBzdGF0aWMgdm9pZCBkb193cml0ZShzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW8gKmJpbykKQEAgLTU2Miw3ICs2MjIsNyBAQAogCXN0cnVjdCBkbV9pb19yZWdpb24gaW9bbXMtPm5yX21pcnJvcnNdLCAqZGVzdCA9IGlvOwogCXN0cnVjdCBtaXJyb3IgKm07CiAJc3RydWN0IGRtX2lvX3JlcXVlc3QgaW9fcmVxID0gewotCQkuYmlfcncgPSBXUklURSwKKwkJLmJpX3J3ID0gV1JJVEUgfCAoYmlvLT5iaV9ydyAmIFdSSVRFX0JBUlJJRVIpLAogCQkubWVtLnR5cGUgPSBETV9JT19CVkVDLAogCQkubWVtLnB0ci5idmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX2lkeCwKIAkJLm5vdGlmeS5mbiA9IHdyaXRlX2NhbGxiYWNrLApAQCAtNjAzLDYgKzY2MywxMSBAQAogCWJpb19saXN0X2luaXQoJnJlcXVldWUpOwogCiAJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3Aod3JpdGVzKSkpIHsKKwkJaWYgKHVubGlrZWx5KGJpb19lbXB0eV9iYXJyaWVyKGJpbykpKSB7CisJCQliaW9fbGlzdF9hZGQoJnN5bmMsIGJpbyk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXJlZ2lvbiA9IGRtX3JoX2Jpb190b19yZWdpb24obXMtPnJoLCBiaW8pOwogCiAJCWlmIChsb2ctPnR5cGUtPmlzX3JlbW90ZV9yZWNvdmVyaW5nICYmCkBAIC02NzIsOCArNzM3LDEyIEBACiAJCWRtX3JoX2RlbGF5KG1zLT5yaCwgYmlvKTsKIAogCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZub3N5bmMpKSkgewotCQltYXBfYmlvKGdldF9kZWZhdWx0X21pcnJvcihtcyksIGJpbyk7Ci0JCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisJCWlmICh1bmxpa2VseShtcy0+bGVnX2ZhaWx1cmUpICYmIGVycm9yc19oYW5kbGVkKG1zKSkKKwkJCWhvbGRfYmlvKG1zLCBiaW8pOworCQllbHNlIHsKKwkJCW1hcF9iaW8oZ2V0X2RlZmF1bHRfbWlycm9yKG1zKSwgYmlvKTsKKwkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisJCX0KIAl9CiB9CiAKQEAgLTY4MSwyMCArNzUwLDEyIEBACiB7CiAJc3RydWN0IGJpbyAqYmlvOwogCi0JaWYgKCFmYWlsdXJlcy0+aGVhZCkKKwlpZiAobGlrZWx5KCFmYWlsdXJlcy0+aGVhZCkpCiAJCXJldHVybjsKIAotCWlmICghbXMtPmxvZ19mYWlsdXJlKSB7Ci0JCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKGZhaWx1cmVzKSkpIHsKLQkJCW1zLT5pbl9zeW5jID0gMDsKLQkJCWRtX3JoX21hcmtfbm9zeW5jKG1zLT5yaCwgYmlvLCBiaW8tPmJpX3NpemUsIDApOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KIAkvKgogCSAqIElmIHRoZSBsb2cgaGFzIGZhaWxlZCwgdW5hdHRlbXB0ZWQgd3JpdGVzIGFyZSBiZWluZwotCSAqIHB1dCBvbiB0aGUgZmFpbHVyZXMgbGlzdC4gIFdlIGNhbid0IGlzc3VlIHRob3NlIHdyaXRlcworCSAqIHB1dCBvbiB0aGUgaG9sZHMgbGlzdC4gIFdlIGNhbid0IGlzc3VlIHRob3NlIHdyaXRlcwogCSAqIHVudGlsIGEgbG9nIGhhcyBiZWVuIG1hcmtlZCwgc28gd2UgbXVzdCBzdG9yZSB0aGVtLgogCSAqCiAJICogSWYgYSAnbm9mbHVzaCcgc3VzcGVuZCBpcyBpbiBwcm9ncmVzcywgd2UgY2FuIHJlcXVldWUKQEAgLTcwOSwyMyArNzcwLDI3IEBACiAJICogZm9yIHVzIHRvIHRyZWF0IHRoZW0gdGhlIHNhbWUgYW5kIHJlcXVldWUgdGhlbQogCSAqIGFzIHdlbGwuCiAJICovCi0JaWYgKGRtX25vZmx1c2hfc3VzcGVuZGluZyhtcy0+dGkpKSB7Ci0JCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKGZhaWx1cmVzKSkpCi0JCQliaW9fZW5kaW8oYmlvLCBETV9FTkRJT19SRVFVRVVFKTsKLQkJcmV0dXJuOwotCX0KKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChmYWlsdXJlcykpKSB7CisJCWlmICghbXMtPmxvZ19mYWlsdXJlKSB7CisJCQltcy0+aW5fc3luYyA9IDA7CisJCQlkbV9yaF9tYXJrX25vc3luYyhtcy0+cmgsIGJpbyk7CisJCX0KIAotCWlmIChhdG9taWNfcmVhZCgmbXMtPnN1c3BlbmQpKSB7Ci0JCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKGZhaWx1cmVzKSkpCisJCS8qCisJCSAqIElmIGFsbCB0aGUgbGVncyBhcmUgZGVhZCwgZmFpbCB0aGUgSS9PLgorCQkgKiBJZiB3ZSBoYXZlIGJlZW4gdG9sZCB0byBoYW5kbGUgZXJyb3JzLCBob2xkIHRoZSBiaW8KKwkJICogYW5kIHdhaXQgZm9yIHVzZXJzcGFjZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0uCisJCSAqIE90aGVyd2lzZSBwcmV0ZW5kIHRoYXQgdGhlIEkvTyBzdWNjZWVkZWQuIChUaGlzIHdvdWxkCisJCSAqIGJlIHdyb25nIGlmIHRoZSBmYWlsZWQgbGVnIHJldHVybmVkIGFmdGVyIHJlYm9vdCBhbmQKKwkJICogZ290IHJlcGxpY2F0ZWQgYmFjayB0byB0aGUgZ29vZCBsZWdzLikKKwkJICovCisJCWlmICghZ2V0X3ZhbGlkX21pcnJvcihtcykpCiAJCQliaW9fZW5kaW8oYmlvLCAtRUlPKTsKLQkJcmV0dXJuOworCQllbHNlIGlmIChlcnJvcnNfaGFuZGxlZChtcykpCisJCQlob2xkX2JpbyhtcywgYmlvKTsKKwkJZWxzZQorCQkJYmlvX2VuZGlvKGJpbywgMCk7CiAJfQotCi0Jc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOwotCWJpb19saXN0X21lcmdlKCZtcy0+ZmFpbHVyZXMsIGZhaWx1cmVzKTsKLQlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKLQotCWRlbGF5ZWRfd2FrZShtcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHRyaWdnZXJfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNzg0LDEyICs4NDksMTcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmbXMtPmxvY2spOworCWJpb19saXN0X2luaXQoJm1zLT5yZWFkcyk7CisJYmlvX2xpc3RfaW5pdCgmbXMtPndyaXRlcyk7CisJYmlvX2xpc3RfaW5pdCgmbXMtPmZhaWx1cmVzKTsKKwliaW9fbGlzdF9pbml0KCZtcy0+aG9sZHMpOwogCiAJbXMtPnRpID0gdGk7CiAJbXMtPm5yX21pcnJvcnMgPSBucl9taXJyb3JzOwogCW1zLT5ucl9yZWdpb25zID0gZG1fc2VjdG9yX2Rpdl91cCh0aS0+bGVuLCByZWdpb25fc2l6ZSk7CiAJbXMtPmluX3N5bmMgPSAwOwogCW1zLT5sb2dfZmFpbHVyZSA9IDA7CisJbXMtPmxlZ19mYWlsdXJlID0gMDsKIAlhdG9taWNfc2V0KCZtcy0+c3VzcGVuZCwgMCk7CiAJYXRvbWljX3NldCgmbXMtPmRlZmF1bHRfbWlycm9yLCBERUZBVUxUX01JUlJPUik7CiAKQEAgLTg4OSw3ICs5NTksOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlkbCA9IGRtX2RpcnR5X2xvZ19jcmVhdGUoYXJndlswXSwgdGksIHBhcmFtX2NvdW50LCBhcmd2ICsgMik7CisJZGwgPSBkbV9kaXJ0eV9sb2dfY3JlYXRlKGFyZ3ZbMF0sIHRpLCBtaXJyb3JfZmx1c2gsIHBhcmFtX2NvdW50LAorCQkJCSBhcmd2ICsgMik7CiAJaWYgKCFkbCkgewogCQl0aS0+ZXJyb3IgPSAiRXJyb3IgY3JlYXRpbmcgbWlycm9yIGRpcnR5IGxvZyI7CiAJCXJldHVybiBOVUxMOwpAQCAtOTk1LDYgKzEwNjYsNyBAQAogCiAJdGktPnByaXZhdGUgPSBtczsKIAl0aS0+c3BsaXRfaW8gPSBkbV9yaF9nZXRfcmVnaW9uX3NpemUobXMtPnJoKTsKKwl0aS0+bnVtX2ZsdXNoX3JlcXVlc3RzID0gMTsKIAogCW1zLT5rbWlycm9yZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrbWlycm9yZCIpOwogCWlmICghbXMtPmttaXJyb3JkX3dxKSB7CkBAIC0xMTIyLDcgKzExOTQsOCBAQAogCSAqIFdlIG5lZWQgdG8gZGVjIHBlbmRpbmcgaWYgdGhpcyB3YXMgYSB3cml0ZS4KIAkgKi8KIAlpZiAocncgPT0gV1JJVEUpIHsKLQkJZG1fcmhfZGVjKG1zLT5yaCwgbWFwX2NvbnRleHQtPmxsKTsKKwkJaWYgKGxpa2VseSghYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSkpCisJCQlkbV9yaF9kZWMobXMtPnJoLCBtYXBfY29udGV4dC0+bGwpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCkBAIC0xMTgwLDYgKzEyNTMsOSBAQAogCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9IChzdHJ1Y3QgbWlycm9yX3NldCAqKSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cgPSBkbV9yaF9kaXJ0eV9sb2cobXMtPnJoKTsKIAorCXN0cnVjdCBiaW9fbGlzdCBob2xkczsKKwlzdHJ1Y3QgYmlvICpiaW87CisKIAlhdG9taWNfc2V0KCZtcy0+c3VzcGVuZCwgMSk7CiAKIAkvKgpAQCAtMTIwMiw2ICsxMjc4LDIyIEBACiAJICogd2Uga25vdyB0aGF0IGFsbCBvZiBvdXIgSS9PIGhhcyBiZWVuIHB1c2hlZC4KIAkgKi8KIAlmbHVzaF93b3JrcXVldWUobXMtPmttaXJyb3JkX3dxKTsKKworCS8qCisJICogTm93IHNldCBtcy0+c3VzcGVuZCBpcyBzZXQgYW5kIHRoZSB3b3JrcXVldWUgZmx1c2hlZCwgbm8gbW9yZQorCSAqIGVudHJpZXMgY2FuIGJlIGFkZGVkIHRvIG1zLT5ob2xkIGxpc3QsIHNvIHByb2Nlc3MgaXQuCisJICoKKwkgKiBCaW9zIGNhbiBzdGlsbCBhcnJpdmUgY29uY3VycmVudGx5IHdpdGggb3IgYWZ0ZXIgdGhpcworCSAqIHByZXN1c3BlbmQgZnVuY3Rpb24sIGJ1dCB0aGV5IGNhbm5vdCBqb2luIHRoZSBob2xkIGxpc3QKKwkgKiBiZWNhdXNlIG1zLT5zdXNwZW5kIGlzIHNldC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7CisJaG9sZHMgPSBtcy0+aG9sZHM7CisJYmlvX2xpc3RfaW5pdCgmbXMtPmhvbGRzKTsKKwlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKKworCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZob2xkcykpKQorCQlob2xkX2JpbyhtcywgYmlvKTsKIH0KIAogc3RhdGljIHZvaWQgbWlycm9yX3Bvc3RzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQpAQCAtMTI0NCw3ICsxMzM2LDggQEAKIAlpZiAoIWF0b21pY19yZWFkKCYobS0+ZXJyb3JfY291bnQpKSkKIAkJcmV0dXJuICdBJzsKIAotCXJldHVybiAodGVzdF9iaXQoRE1fUkFJRDFfV1JJVEVfRVJST1IsICYobS0+ZXJyb3JfdHlwZSkpKSA/ICdEJyA6CisJcmV0dXJuICh0ZXN0X2JpdChETV9SQUlEMV9GTFVTSF9FUlJPUiwgJihtLT5lcnJvcl90eXBlKSkpID8gJ0YnIDoKKwkJKHRlc3RfYml0KERNX1JBSUQxX1dSSVRFX0VSUk9SLCAmKG0tPmVycm9yX3R5cGUpKSkgPyAnRCcgOgogCQkodGVzdF9iaXQoRE1fUkFJRDFfU1lOQ19FUlJPUiwgJihtLT5lcnJvcl90eXBlKSkpID8gJ1MnIDoKIAkJKHRlc3RfYml0KERNX1JBSUQxX1JFQURfRVJST1IsICYobS0+ZXJyb3JfdHlwZSkpKSA/ICdSJyA6ICdVJzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYyBiL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYwppbmRleCAzNmRiZTI5Li41ZjE5Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJlZ2lvbi1oYXNoLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jCkBAIC03OSw2ICs3OSwxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcmVjb3ZlcmVkX3JlZ2lvbnM7CiAJc3RydWN0IGxpc3RfaGVhZCBmYWlsZWRfcmVjb3ZlcmVkX3JlZ2lvbnM7CiAKKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhIGJhcnJpZXIgZmFpbHVyZSBubyByZWdpb25zIGNhbiBiZSBtYXJrZWQgY2xlYW4uCisJICovCisJaW50IGJhcnJpZXJfZmFpbHVyZTsKKwogCXZvaWQgKmNvbnRleHQ7CiAJc2VjdG9yX3QgdGFyZ2V0X2JlZ2luOwogCkBAIC0yMTEsNiArMjE2LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcmgtPnF1aWVzY2VkX3JlZ2lvbnMpOwogCUlOSVRfTElTVF9IRUFEKCZyaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpOwogCUlOSVRfTElTVF9IRUFEKCZyaC0+ZmFpbGVkX3JlY292ZXJlZF9yZWdpb25zKTsKKwlyaC0+YmFycmllcl9mYWlsdXJlID0gMDsKIAogCXJoLT5yZWdpb25fcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChNSU5fUkVHSU9OUywKIAkJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZG1fcmVnaW9uKSk7CkBAIC0zNzcsOCArMzgzLDYgQEAKIC8qIGRtX3JoX21hcmtfbm9zeW5jCiAgKiBAbXMKICAqIEBiaW8KLSAqIEBkb25lCi0gKiBAZXJyb3IKICAqCiAgKiBUaGUgYmlvIHdhcyB3cml0dGVuIG9uIHNvbWUgbWlycm9yKHMpIGJ1dCBmYWlsZWQgb24gb3RoZXIgbWlycm9yKHMpLgogICogV2UgY2FuIHN1Y2Nlc3NmdWxseSBlbmRpbyB0aGUgYmlvIGJ1dCBzaG91bGQgYXZvaWQgdGhlIHJlZ2lvbiBiZWluZwpAQCAtMzg2LDggKzM5MCw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBfbm90XyBzYWZlIGluIGludGVycnVwdCBjb250ZXh0IQogICovCi12b2lkIGRtX3JoX21hcmtfbm9zeW5jKHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsCi0JCSAgICAgICBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGRvbmUsIGludCBlcnJvcikKK3ZvaWQgZG1fcmhfbWFya19ub3N5bmMoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgc3RydWN0IGJpbyAqYmlvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gcmgtPmxvZzsKQEAgLTM5NSw2ICszOTgsMTEgQEAKIAlyZWdpb25fdCByZWdpb24gPSBkbV9yaF9iaW9fdG9fcmVnaW9uKHJoLCBiaW8pOwogCWludCByZWNvdmVyaW5nID0gMDsKIAorCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pKSB7CisJCXJoLT5iYXJyaWVyX2ZhaWx1cmUgPSAxOworCQlyZXR1cm47CisJfQorCiAJLyogV2UgbXVzdCBpbmZvcm0gdGhlIGxvZyB0aGF0IHRoZSBzeW5jIGNvdW50IGhhcyBjaGFuZ2VkLiAqLwogCWxvZy0+dHlwZS0+c2V0X3JlZ2lvbl9zeW5jKGxvZywgcmVnaW9uLCAwKTsKIApAQCAtNDE5LDcgKzQyNyw2IEBACiAJQlVHX09OKCFsaXN0X2VtcHR5KCZyZWctPmxpc3QpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaC0+cmVnaW9uX2xvY2ssIGZsYWdzKTsKIAotCWJpb19lbmRpbyhiaW8sIGVycm9yKTsKIAlpZiAocmVjb3ZlcmluZykKIAkJY29tcGxldGVfcmVzeW5jX3dvcmsocmVnLCAwKTsKIH0KQEAgLTUxNSw4ICs1MjIsMTEgQEAKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CiAKLQlmb3IgKGJpbyA9IGJpb3MtPmhlYWQ7IGJpbzsgYmlvID0gYmlvLT5iaV9uZXh0KQorCWZvciAoYmlvID0gYmlvcy0+aGVhZDsgYmlvOyBiaW8gPSBiaW8tPmJpX25leHQpIHsKKwkJaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykpCisJCQljb250aW51ZTsKIAkJcmhfaW5jKHJoLCBkbV9yaF9iaW9fdG9fcmVnaW9uKHJoLCBiaW8pKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9yaF9pbmNfcGVuZGluZyk7CiAKQEAgLTU0NCw3ICs1NTQsMTQgQEAKIAkJICovCiAKIAkJLyogZG8gbm90aGluZyBmb3IgRE1fUkhfTk9TWU5DICovCi0JCWlmIChyZWctPnN0YXRlID09IERNX1JIX1JFQ09WRVJJTkcpIHsKKwkJaWYgKHVubGlrZWx5KHJoLT5iYXJyaWVyX2ZhaWx1cmUpKSB7CisJCQkvKgorCQkJICogSWYgYSB3cml0ZSBiYXJyaWVyIGZhaWxlZCBzb21lIHRpbWUgYWdvLCB3ZQorCQkJICogZG9uJ3Qga25vdyB3aGV0aGVyIG9yIG5vdCB0aGlzIHdyaXRlIG1hZGUgaXQKKwkJCSAqIHRvIHRoZSBkaXNrLCBzbyB3ZSBtdXN0IHJlc3luYyB0aGUgZGV2aWNlLgorCQkJICovCisJCQlyZWctPnN0YXRlID0gRE1fUkhfTk9TWU5DOworCQl9IGVsc2UgaWYgKHJlZy0+c3RhdGUgPT0gRE1fUkhfUkVDT1ZFUklORykgewogCQkJbGlzdF9hZGRfdGFpbCgmcmVnLT5saXN0LCAmcmgtPnF1aWVzY2VkX3JlZ2lvbnMpOwogCQl9IGVsc2UgaWYgKHJlZy0+c3RhdGUgPT0gRE1fUkhfRElSVFkpIHsKIAkJCXJlZy0+c3RhdGUgPSBETV9SSF9DTEVBTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IDBjNzQ2NDIuLjdkMDg4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwpAQCAtNTUsNiArNTUsOCBAQAogICovCiAjZGVmaW5lIFNOQVBTSE9UX0RJU0tfVkVSU0lPTiAxCiAKKyNkZWZpbmUgTlVNX1NOQVBTSE9UX0hEUl9DSFVOS1MgMQorCiBzdHJ1Y3QgZGlza19oZWFkZXIgewogCXVpbnQzMl90IG1hZ2ljOwogCkBAIC0xMjAsNyArMTIyLDIyIEBACiAKIAkvKgogCSAqIFRoZSBuZXh0IGZyZWUgY2h1bmsgZm9yIGFuIGV4Y2VwdGlvbi4KKwkgKgorCSAqIFdoZW4gY3JlYXRpbmcgZXhjZXB0aW9ucywgYWxsIHRoZSBjaHVua3MgaGVyZSBhbmQgYWJvdmUgYXJlCisJICogZnJlZS4gIEl0IGhvbGRzIHRoZSBuZXh0IGNodW5rIHRvIGJlIGFsbG9jYXRlZC4gIE9uIHJhcmUKKwkgKiBvY2Nhc2lvbnMgKGUuZy4gYWZ0ZXIgYSBzeXN0ZW0gY3Jhc2gpIGhvbGVzIGNhbiBiZSBsZWZ0IGluCisJICogdGhlIGV4Y2VwdGlvbiBzdG9yZSBiZWNhdXNlIGNodW5rcyBjYW4gYmUgY29tbWl0dGVkIG91dCBvZgorCSAqIG9yZGVyLgorCSAqCisJICogV2hlbiBtZXJnaW5nIGV4Y2VwdGlvbnMsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYWxsIHRoZQorCSAqIGNodW5rcyBoZXJlIGFuZCBhYm92ZSBhcmUgZnJlZS4gIEl0IGhvbGRzIHRoZSB2YWx1ZSBpdCB3b3VsZAorCSAqIGhhdmUgaGVsZCBpZiBhbGwgY2h1bmtzIGhhZCBiZWVuIGNvbW1pdHRlZCBpbiBvcmRlciBvZgorCSAqIGFsbG9jYXRpb24uICBDb25zZXF1ZW50bHkgdGhlIHZhbHVlIG1heSBvY2Nhc2lvbmFsbHkgYmUKKwkgKiBzbGlnaHRseSB0b28gbG93LCBidXQgc2luY2UgaXQncyBvbmx5IHVzZWQgZm9yICdzdGF0dXMnIGFuZAorCSAqIGl0IGNhbiBuZXZlciByZWFjaCBpdHMgbWluaW11bSB2YWx1ZSB0b28gZWFybHkgdGhpcyBkb2Vzbid0CisJICogbWF0dGVyLgogCSAqLworCiAJY2h1bmtfdCBuZXh0X2ZyZWU7CiAKIAkvKgpAQCAtMjE0LDcgKzIzMSw3IEBACiAJCSAgICBpbnQgbWV0YWRhdGEpCiB7CiAJc3RydWN0IGRtX2lvX3JlZ2lvbiB3aGVyZSA9IHsKLQkJLmJkZXYgPSBwcy0+c3RvcmUtPmNvdy0+YmRldiwKKwkJLmJkZXYgPSBkbV9zbmFwX2Nvdyhwcy0+c3RvcmUtPnNuYXApLT5iZGV2LAogCQkuc2VjdG9yID0gcHMtPnN0b3JlLT5jaHVua19zaXplICogY2h1bmssCiAJCS5jb3VudCA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwKIAl9OwpAQCAtMjk0LDcgKzMxMSw4IEBACiAJICovCiAJaWYgKCFwcy0+c3RvcmUtPmNodW5rX3NpemUpIHsKIAkJcHMtPnN0b3JlLT5jaHVua19zaXplID0gbWF4KERNX0NIVU5LX1NJWkVfREVGQVVMVF9TRUNUT1JTLAotCQkgICAgYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocHMtPnN0b3JlLT5jb3ctPmJkZXYpID4+IDkpOworCQkgICAgYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoZG1fc25hcF9jb3cocHMtPnN0b3JlLT5zbmFwKS0+CisJCQkJCSAgICBiZGV2KSA+PiA5KTsKIAkJcHMtPnN0b3JlLT5jaHVua19tYXNrID0gcHMtPnN0b3JlLT5jaHVua19zaXplIC0gMTsKIAkJcHMtPnN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhwcy0+c3RvcmUtPmNodW5rX3NpemUpIC0gMTsKIAkJY2h1bmtfc2l6ZV9zdXBwbGllZCA9IDA7CkBAIC00MDgsNiArNDI2LDE1IEBACiAJZS0+bmV3X2NodW5rID0gY3B1X3RvX2xlNjQoZGUtPm5ld19jaHVuayk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFyX2V4Y2VwdGlvbihzdHJ1Y3QgcHN0b3JlICpwcywgdWludDMyX3QgaW5kZXgpCit7CisJc3RydWN0IGRpc2tfZXhjZXB0aW9uICplID0gZ2V0X2V4Y2VwdGlvbihwcywgaW5kZXgpOworCisJLyogY2xlYXIgaXQgKi8KKwllLT5vbGRfY2h1bmsgPSAwOworCWUtPm5ld19jaHVuayA9IDA7Cit9CisKIC8qCiAgKiBSZWdpc3RlcnMgdGhlIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgY3VycmVudCBhcmVhLgogICogJ2Z1bGwnIGlzIGZpbGxlZCBpbiB0byBpbmRpY2F0ZSBpZiB0aGUgYXJlYSBoYXMgYmVlbgpAQCAtNDg5LDExICs1MTYsMjMgQEAKIAlyZXR1cm4gKHN0cnVjdCBwc3RvcmUgKikgc3RvcmUtPmNvbnRleHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcnNpc3RlbnRfZnJhY3Rpb25fZnVsbChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkgICAgIHNlY3Rvcl90ICpudW1lcmF0b3IsIHNlY3Rvcl90ICpkZW5vbWluYXRvcikKK3N0YXRpYyB2b2lkIHBlcnNpc3RlbnRfdXNhZ2Uoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkgICAgIHNlY3Rvcl90ICp0b3RhbF9zZWN0b3JzLAorCQkJICAgICBzZWN0b3JfdCAqc2VjdG9yc19hbGxvY2F0ZWQsCisJCQkgICAgIHNlY3Rvcl90ICptZXRhZGF0YV9zZWN0b3JzKQogewotCSpudW1lcmF0b3IgPSBnZXRfaW5mbyhzdG9yZSktPm5leHRfZnJlZSAqIHN0b3JlLT5jaHVua19zaXplOwotCSpkZW5vbWluYXRvciA9IGdldF9kZXZfc2l6ZShzdG9yZS0+Y293LT5iZGV2KTsKKwlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKKworCSpzZWN0b3JzX2FsbG9jYXRlZCA9IHBzLT5uZXh0X2ZyZWUgKiBzdG9yZS0+Y2h1bmtfc2l6ZTsKKwkqdG90YWxfc2VjdG9ycyA9IGdldF9kZXZfc2l6ZShkbV9zbmFwX2NvdyhzdG9yZS0+c25hcCktPmJkZXYpOworCisJLyoKKwkgKiBGaXJzdCBjaHVuayBpcyB0aGUgZml4ZWQgaGVhZGVyLgorCSAqIFRoZW4gdGhlcmUgYXJlIChwcy0+Y3VycmVudF9hcmVhICsgMSkgbWV0YWRhdGEgY2h1bmtzLCBlYWNoIG9uZQorCSAqIHNlcGFyYXRlZCBmcm9tIHRoZSBuZXh0IGJ5IHBzLT5leGNlcHRpb25zX3Blcl9hcmVhIGRhdGEgY2h1bmtzLgorCSAqLworCSptZXRhZGF0YV9zZWN0b3JzID0gKHBzLT5jdXJyZW50X2FyZWEgKyAxICsgTlVNX1NOQVBTSE9UX0hEUl9DSFVOS1MpICoKKwkJCSAgICBzdG9yZS0+Y2h1bmtfc2l6ZTsKIH0KIAogc3RhdGljIHZvaWQgcGVyc2lzdGVudF9kdHIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCkBAIC01NTIsNDQgKzU5MSw0MCBAQAogCQlwcy0+Y3VycmVudF9hcmVhID0gMDsKIAkJemVyb19tZW1vcnlfYXJlYShwcyk7CiAJCXIgPSB6ZXJvX2Rpc2tfYXJlYShwcywgMCk7Ci0JCWlmIChyKSB7Ci0JCQlETVdBUk4oInplcm9fZGlza19hcmVhKDApIGZhaWxlZCIpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2tzLgotCQkgKi8KLQkJaWYgKHBzLT52ZXJzaW9uICE9IFNOQVBTSE9UX0RJU0tfVkVSU0lPTikgewotCQkJRE1XQVJOKCJ1bmFibGUgdG8gaGFuZGxlIHNuYXBzaG90IGRpc2sgdmVyc2lvbiAlZCIsCi0JCQkgICAgICAgcHMtPnZlcnNpb24pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkgKiBNZXRhZGF0YSBhcmUgdmFsaWQsIGJ1dCBzbmFwc2hvdCBpcyBpbnZhbGlkYXRlZAotCQkgKi8KLQkJaWYgKCFwcy0+dmFsaWQpCi0JCQlyZXR1cm4gMTsKLQotCQkvKgotCQkgKiBSZWFkIHRoZSBtZXRhZGF0YS4KLQkJICovCi0JCXIgPSByZWFkX2V4Y2VwdGlvbnMocHMsIGNhbGxiYWNrLCBjYWxsYmFja19jb250ZXh0KTsKIAkJaWYgKHIpCi0JCQlyZXR1cm4gcjsKKwkJCURNV0FSTigiemVyb19kaXNrX2FyZWEoMCkgZmFpbGVkIik7CisJCXJldHVybiByOworCX0KKwkvKgorCSAqIFNhbml0eSBjaGVja3MuCisJICovCisJaWYgKHBzLT52ZXJzaW9uICE9IFNOQVBTSE9UX0RJU0tfVkVSU0lPTikgeworCQlETVdBUk4oInVuYWJsZSB0byBoYW5kbGUgc25hcHNob3QgZGlzayB2ZXJzaW9uICVkIiwKKwkJICAgICAgIHBzLT52ZXJzaW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBNZXRhZGF0YSBhcmUgdmFsaWQsIGJ1dCBzbmFwc2hvdCBpcyBpbnZhbGlkYXRlZAorCSAqLworCWlmICghcHMtPnZhbGlkKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogUmVhZCB0aGUgbWV0YWRhdGEuCisJICovCisJciA9IHJlYWRfZXhjZXB0aW9ucyhwcywgY2FsbGJhY2ssIGNhbGxiYWNrX2NvbnRleHQpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgcGVyc2lzdGVudF9wcmVwYXJlX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkJc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplKQorCQkJCQlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplKQogewogCXN0cnVjdCBwc3RvcmUgKnBzID0gZ2V0X2luZm8oc3RvcmUpOwogCXVpbnQzMl90IHN0cmlkZTsKIAljaHVua190IG5leHRfZnJlZTsKLQlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5jb3ctPmJkZXYpOworCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoZG1fc25hcF9jb3coc3RvcmUtPnNuYXApLT5iZGV2KTsKIAogCS8qIElzIHRoZXJlIGVub3VnaCByb29tID8gKi8KIAlpZiAoc2l6ZSA8ICgocHMtPm5leHRfZnJlZSArIDEpICogc3RvcmUtPmNodW5rX3NpemUpKQpAQCAtNjExLDcgKzY0Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHBlcnNpc3RlbnRfY29tbWl0X2V4Y2VwdGlvbihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkJc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplLAorCQkJCQlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplLAogCQkJCQl2b2lkICgqY2FsbGJhY2spICh2b2lkICosIGludCBzdWNjZXNzKSwKIAkJCQkJdm9pZCAqY2FsbGJhY2tfY29udGV4dCkKIHsKQEAgLTY3Miw2ICs3MDcsODUgQEAKIAlwcy0+Y2FsbGJhY2tfY291bnQgPSAwOwogfQogCitzdGF0aWMgaW50IHBlcnNpc3RlbnRfcHJlcGFyZV9tZXJnZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCQkgICAgY2h1bmtfdCAqbGFzdF9vbGRfY2h1bmssCisJCQkJICAgIGNodW5rX3QgKmxhc3RfbmV3X2NodW5rKQoreworCXN0cnVjdCBwc3RvcmUgKnBzID0gZ2V0X2luZm8oc3RvcmUpOworCXN0cnVjdCBkaXNrX2V4Y2VwdGlvbiBkZTsKKwlpbnQgbnJfY29uc2VjdXRpdmU7CisJaW50IHI7CisKKwkvKgorCSAqIFdoZW4gY3VycmVudCBhcmVhIGlzIGVtcHR5LCBtb3ZlIGJhY2sgdG8gcHJlY2VkaW5nIGFyZWEuCisJICovCisJaWYgKCFwcy0+Y3VycmVudF9jb21taXR0ZWQpIHsKKwkJLyoKKwkJICogSGF2ZSB3ZSBmaW5pc2hlZD8KKwkJICovCisJCWlmICghcHMtPmN1cnJlbnRfYXJlYSkKKwkJCXJldHVybiAwOworCisJCXBzLT5jdXJyZW50X2FyZWEtLTsKKwkJciA9IGFyZWFfaW8ocHMsIFJFQUQpOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gcjsKKwkJcHMtPmN1cnJlbnRfY29tbWl0dGVkID0gcHMtPmV4Y2VwdGlvbnNfcGVyX2FyZWE7CisJfQorCisJcmVhZF9leGNlcHRpb24ocHMsIHBzLT5jdXJyZW50X2NvbW1pdHRlZCAtIDEsICZkZSk7CisJKmxhc3Rfb2xkX2NodW5rID0gZGUub2xkX2NodW5rOworCSpsYXN0X25ld19jaHVuayA9IGRlLm5ld19jaHVuazsKKworCS8qCisJICogRmluZCBudW1iZXIgb2YgY29uc2VjdXRpdmUgY2h1bmtzIHdpdGhpbiB0aGUgY3VycmVudCBhcmVhLAorCSAqIHdvcmtpbmcgYmFja3dhcmRzLgorCSAqLworCWZvciAobnJfY29uc2VjdXRpdmUgPSAxOyBucl9jb25zZWN1dGl2ZSA8IHBzLT5jdXJyZW50X2NvbW1pdHRlZDsKKwkgICAgIG5yX2NvbnNlY3V0aXZlKyspIHsKKwkJcmVhZF9leGNlcHRpb24ocHMsIHBzLT5jdXJyZW50X2NvbW1pdHRlZCAtIDEgLSBucl9jb25zZWN1dGl2ZSwKKwkJCSAgICAgICAmZGUpOworCQlpZiAoZGUub2xkX2NodW5rICE9ICpsYXN0X29sZF9jaHVuayAtIG5yX2NvbnNlY3V0aXZlIHx8CisJCSAgICBkZS5uZXdfY2h1bmsgIT0gKmxhc3RfbmV3X2NodW5rIC0gbnJfY29uc2VjdXRpdmUpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbnJfY29uc2VjdXRpdmU7Cit9CisKK3N0YXRpYyBpbnQgcGVyc2lzdGVudF9jb21taXRfbWVyZ2Uoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkJICAgaW50IG5yX21lcmdlZCkKK3sKKwlpbnQgciwgaTsKKwlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKKworCUJVR19PTihucl9tZXJnZWQgPiBwcy0+Y3VycmVudF9jb21taXR0ZWQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX21lcmdlZDsgaSsrKQorCQljbGVhcl9leGNlcHRpb24ocHMsIHBzLT5jdXJyZW50X2NvbW1pdHRlZCAtIDEgLSBpKTsKKworCXIgPSBhcmVhX2lvKHBzLCBXUklURSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXBzLT5jdXJyZW50X2NvbW1pdHRlZCAtPSBucl9tZXJnZWQ7CisKKwkvKgorCSAqIEF0IHRoaXMgc3RhZ2UsIG9ubHkgcGVyc2lzdGVudF91c2FnZSgpIHVzZXMgcHMtPm5leHRfZnJlZSwgc28KKwkgKiB3ZSBtYWtlIG5vIGF0dGVtcHQgdG8ga2VlcCBwcy0+bmV4dF9mcmVlIHN0cmljdGx5IGFjY3VyYXRlCisJICogYXMgZXhjZXB0aW9ucyBtYXkgaGF2ZSBiZWVuIGNvbW1pdHRlZCBvdXQtb2Ytb3JkZXIgb3JpZ2luYWxseS4KKwkgKiBPbmNlIGEgc25hcHNob3QgaGFzIGJlY29tZSBtZXJnaW5nLCB3ZSBzZXQgaXQgdG8gdGhlIHZhbHVlIGl0CisJICogd291bGQgaGF2ZSBoZWxkIGhhZCBhbGwgdGhlIGV4Y2VwdGlvbnMgYmVlbiBjb21taXR0ZWQgaW4gb3JkZXIuCisJICoKKwkgKiBwcy0+Y3VycmVudF9hcmVhIGRvZXMgbm90IGdldCByZWR1Y2VkIGJ5IHByZXBhcmVfbWVyZ2UoKSB1bnRpbAorCSAqIGFmdGVyIGNvbW1pdF9tZXJnZSgpIGhhcyByZW1vdmVkIHRoZSBucl9tZXJnZWQgcHJldmlvdXMgZXhjZXB0aW9ucy4KKwkgKi8KKwlwcy0+bmV4dF9mcmVlID0gKGFyZWFfbG9jYXRpb24ocHMsIHBzLT5jdXJyZW50X2FyZWEpIC0gMSkgKworCQkJKHBzLT5jdXJyZW50X2NvbW1pdHRlZCArIDEpICsgTlVNX1NOQVBTSE9UX0hEUl9DSFVOS1M7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcGVyc2lzdGVudF9kcm9wX3NuYXBzaG90KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQogewogCXN0cnVjdCBwc3RvcmUgKnBzID0gZ2V0X2luZm8oc3RvcmUpOwpAQCAtNjk3LDcgKzgxMSw3IEBACiAJcHMtPmFyZWEgPSBOVUxMOwogCXBzLT56ZXJvX2FyZWEgPSBOVUxMOwogCXBzLT5oZWFkZXJfYXJlYSA9IE5VTEw7Ci0JcHMtPm5leHRfZnJlZSA9IDI7CS8qIHNraXBwaW5nIHRoZSBoZWFkZXIgYW5kIGZpcnN0IGFyZWEgKi8KKwlwcy0+bmV4dF9mcmVlID0gTlVNX1NOQVBTSE9UX0hEUl9DSFVOS1MgKyAxOyAvKiBoZWFkZXIgYW5kIDFzdCBhcmVhICovCiAJcHMtPmN1cnJlbnRfY29tbWl0dGVkID0gMDsKIAogCXBzLT5jYWxsYmFja19jb3VudCA9IDA7CkBAIC03MjYsOCArODQwLDcgQEAKIAljYXNlIFNUQVRVU1RZUEVfSU5GTzoKIAkJYnJlYWs7CiAJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgotCQlETUVNSVQoIiAlcyBQICVsbHUiLCBzdG9yZS0+Y293LT5uYW1lLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9yZS0+Y2h1bmtfc2l6ZSk7CisJCURNRU1JVCgiIFAgJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RvcmUtPmNodW5rX3NpemUpOwogCX0KIAogCXJldHVybiBzejsKQEAgLTc0MSw4ICs4NTQsMTAgQEAKIAkucmVhZF9tZXRhZGF0YSA9IHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YSwKIAkucHJlcGFyZV9leGNlcHRpb24gPSBwZXJzaXN0ZW50X3ByZXBhcmVfZXhjZXB0aW9uLAogCS5jb21taXRfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9jb21taXRfZXhjZXB0aW9uLAorCS5wcmVwYXJlX21lcmdlID0gcGVyc2lzdGVudF9wcmVwYXJlX21lcmdlLAorCS5jb21taXRfbWVyZ2UgPSBwZXJzaXN0ZW50X2NvbW1pdF9tZXJnZSwKIAkuZHJvcF9zbmFwc2hvdCA9IHBlcnNpc3RlbnRfZHJvcF9zbmFwc2hvdCwKLQkuZnJhY3Rpb25fZnVsbCA9IHBlcnNpc3RlbnRfZnJhY3Rpb25fZnVsbCwKKwkudXNhZ2UgPSBwZXJzaXN0ZW50X3VzYWdlLAogCS5zdGF0dXMgPSBwZXJzaXN0ZW50X3N0YXR1cywKIH07CiAKQEAgLTc1NCw4ICs4NjksMTAgQEAKIAkucmVhZF9tZXRhZGF0YSA9IHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YSwKIAkucHJlcGFyZV9leGNlcHRpb24gPSBwZXJzaXN0ZW50X3ByZXBhcmVfZXhjZXB0aW9uLAogCS5jb21taXRfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9jb21taXRfZXhjZXB0aW9uLAorCS5wcmVwYXJlX21lcmdlID0gcGVyc2lzdGVudF9wcmVwYXJlX21lcmdlLAorCS5jb21taXRfbWVyZ2UgPSBwZXJzaXN0ZW50X2NvbW1pdF9tZXJnZSwKIAkuZHJvcF9zbmFwc2hvdCA9IHBlcnNpc3RlbnRfZHJvcF9zbmFwc2hvdCwKLQkuZnJhY3Rpb25fZnVsbCA9IHBlcnNpc3RlbnRfZnJhY3Rpb25fZnVsbCwKKwkudXNhZ2UgPSBwZXJzaXN0ZW50X3VzYWdlLAogCS5zdGF0dXMgPSBwZXJzaXN0ZW50X3N0YXR1cywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYwppbmRleCBjZGU1YWE1Li5hMDg5OGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtdHJhbnNpZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXRyYW5zaWVudC5jCkBAIC0zNiwxMCArMzYsMTAgQEAKIH0KIAogc3RhdGljIGludCB0cmFuc2llbnRfcHJlcGFyZV9leGNlcHRpb24oc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSkKKwkJCQkgICAgICAgc3RydWN0IGRtX2V4Y2VwdGlvbiAqZSkKIHsKIAlzdHJ1Y3QgdHJhbnNpZW50X2MgKnRjID0gc3RvcmUtPmNvbnRleHQ7Ci0Jc2VjdG9yX3Qgc2l6ZSA9IGdldF9kZXZfc2l6ZShzdG9yZS0+Y293LT5iZGV2KTsKKwlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKGRtX3NuYXBfY293KHN0b3JlLT5zbmFwKS0+YmRldik7CiAKIAlpZiAoc2l6ZSA8ICh0Yy0+bmV4dF9mcmVlICsgc3RvcmUtPmNodW5rX3NpemUpKQogCQlyZXR1cm4gLTE7CkBAIC01MSw3ICs1MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHRyYW5zaWVudF9jb21taXRfZXhjZXB0aW9uKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICAgICBzdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24gKmUsCisJCQkJICAgICAgIHN0cnVjdCBkbV9leGNlcHRpb24gKmUsCiAJCQkJICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKiwgaW50IHN1Y2Nlc3MpLAogCQkJCSAgICAgICB2b2lkICpjYWxsYmFja19jb250ZXh0KQogewpAQCAtNTksMTEgKzU5LDE0IEBACiAJY2FsbGJhY2soY2FsbGJhY2tfY29udGV4dCwgMSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYW5zaWVudF9mcmFjdGlvbl9mdWxsKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAotCQkJCSAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLCBzZWN0b3JfdCAqZGVub21pbmF0b3IpCitzdGF0aWMgdm9pZCB0cmFuc2llbnRfdXNhZ2Uoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkgICAgc2VjdG9yX3QgKnRvdGFsX3NlY3RvcnMsCisJCQkgICAgc2VjdG9yX3QgKnNlY3RvcnNfYWxsb2NhdGVkLAorCQkJICAgIHNlY3Rvcl90ICptZXRhZGF0YV9zZWN0b3JzKQogewotCSpudW1lcmF0b3IgPSAoKHN0cnVjdCB0cmFuc2llbnRfYyAqKSBzdG9yZS0+Y29udGV4dCktPm5leHRfZnJlZTsKLQkqZGVub21pbmF0b3IgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CisJKnNlY3RvcnNfYWxsb2NhdGVkID0gKChzdHJ1Y3QgdHJhbnNpZW50X2MgKikgc3RvcmUtPmNvbnRleHQpLT5uZXh0X2ZyZWU7CisJKnRvdGFsX3NlY3RvcnMgPSBnZXRfZGV2X3NpemUoZG1fc25hcF9jb3coc3RvcmUtPnNuYXApLT5iZGV2KTsKKwkqbWV0YWRhdGFfc2VjdG9ycyA9IDA7CiB9CiAKIHN0YXRpYyBpbnQgdHJhbnNpZW50X2N0cihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKQEAgLTkxLDggKzk0LDcgQEAKIAljYXNlIFNUQVRVU1RZUEVfSU5GTzoKIAkJYnJlYWs7CiAJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgotCQlETUVNSVQoIiAlcyBOICVsbHUiLCBzdG9yZS0+Y293LT5uYW1lLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9yZS0+Y2h1bmtfc2l6ZSk7CisJCURNRU1JVCgiIE4gJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RvcmUtPmNodW5rX3NpemUpOwogCX0KIAogCXJldHVybiBzejsKQEAgLTEwNiw3ICsxMDgsNyBAQAogCS5yZWFkX21ldGFkYXRhID0gdHJhbnNpZW50X3JlYWRfbWV0YWRhdGEsCiAJLnByZXBhcmVfZXhjZXB0aW9uID0gdHJhbnNpZW50X3ByZXBhcmVfZXhjZXB0aW9uLAogCS5jb21taXRfZXhjZXB0aW9uID0gdHJhbnNpZW50X2NvbW1pdF9leGNlcHRpb24sCi0JLmZyYWN0aW9uX2Z1bGwgPSB0cmFuc2llbnRfZnJhY3Rpb25fZnVsbCwKKwkudXNhZ2UgPSB0cmFuc2llbnRfdXNhZ2UsCiAJLnN0YXR1cyA9IHRyYW5zaWVudF9zdGF0dXMsCiB9OwogCkBAIC0xMTgsNyArMTIwLDcgQEAKIAkucmVhZF9tZXRhZGF0YSA9IHRyYW5zaWVudF9yZWFkX21ldGFkYXRhLAogCS5wcmVwYXJlX2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbiwKIAkuY29tbWl0X2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9jb21taXRfZXhjZXB0aW9uLAotCS5mcmFjdGlvbl9mdWxsID0gdHJhbnNpZW50X2ZyYWN0aW9uX2Z1bGwsCisJLnVzYWdlID0gdHJhbnNpZW50X3VzYWdlLAogCS5zdGF0dXMgPSB0cmFuc2llbnRfc3RhdHVzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCAzYTNiYTQ2Li5lZThlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtMjUsNiArMjUsMTEgQEAKIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJzbmFwc2hvdHMiCiAKK3N0YXRpYyBjb25zdCBjaGFyIGRtX3NuYXBzaG90X21lcmdlX3RhcmdldF9uYW1lW10gPSAic25hcHNob3QtbWVyZ2UiOworCisjZGVmaW5lIGRtX3RhcmdldF9pc19zbmFwc2hvdF9tZXJnZSh0aSkgXAorCSgodGkpLT50eXBlLT5uYW1lID09IGRtX3NuYXBzaG90X21lcmdlX3RhcmdldF9uYW1lKQorCiAvKgogICogVGhlIHBlcmNlbnRhZ2UgaW5jcmVtZW50IHdlIHdpbGwgd2FrZSB1cCB1c2VycyBhdAogICovCkBAIC00OSw3ICs1NCw3IEBACiAjZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSCh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpICYgXAogCQkJCQkgKERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFIC0gMSkpCiAKLXN0cnVjdCBleGNlcHRpb25fdGFibGUgeworc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSB7CiAJdWludDMyX3QgaGFzaF9tYXNrOwogCXVuc2lnbmVkIGhhc2hfc2hpZnQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGFibGU7CkBAIC01OSwyMiArNjQsMzEgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7CiAKIAlzdHJ1Y3QgZG1fZGV2ICpvcmlnaW47CisJc3RydWN0IGRtX2RldiAqY293OworCisJc3RydWN0IGRtX3RhcmdldCAqdGk7CiAKIAkvKiBMaXN0IG9mIHNuYXBzaG90cyBwZXIgT3JpZ2luICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0JLyogWW91IGNhbid0IHVzZSBhIHNuYXBzaG90IGlmIHRoaXMgaXMgMCAoZS5nLiBpZiBmdWxsKSAqLworCS8qCisJICogWW91IGNhbid0IHVzZSBhIHNuYXBzaG90IGlmIHRoaXMgaXMgMCAoZS5nLiBpZiBmdWxsKS4KKwkgKiBBIHNuYXBzaG90LW1lcmdlIHRhcmdldCBuZXZlciBjbGVhcnMgdGhpcy4KKwkgKi8KIAlpbnQgdmFsaWQ7CiAKIAkvKiBPcmlnaW4gd3JpdGVzIGRvbid0IHRyaWdnZXIgZXhjZXB0aW9ucyB1bnRpbCB0aGlzIGlzIHNldCAqLwogCWludCBhY3RpdmU7CiAKKwkvKiBXaGV0aGVyIG9yIG5vdCBvd25pbmcgbWFwcGVkX2RldmljZSBpcyBzdXNwZW5kZWQgKi8KKwlpbnQgc3VzcGVuZGVkOworCiAJbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7CiAKIAlhdG9taWNfdCBwZW5kaW5nX2V4Y2VwdGlvbnNfY291bnQ7CiAKLQlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7Ci0Jc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKIAogCS8qCiAJICogcGVfbG9jayBwcm90ZWN0cyBhbGwgcGVuZGluZ19leGNlcHRpb24gb3BlcmF0aW9ucyBhbmQgYWNjZXNzCkBAIC05NSw4ICsxMDksNTEgQEAKIAltZW1wb29sX3QgKnRyYWNrZWRfY2h1bmtfcG9vbDsKIAlzcGlubG9ja190IHRyYWNrZWRfY2h1bmtfbG9jazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFja2VkX2NodW5rX2hhc2hbRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkVdOworCisJLyoKKwkgKiBUaGUgbWVyZ2Ugb3BlcmF0aW9uIGZhaWxlZCBpZiB0aGlzIGZsYWcgaXMgc2V0LgorCSAqIEZhaWx1cmUgbW9kZXMgYXJlIGhhbmRsZWQgYXMgZm9sbG93czoKKwkgKiAtIEkvTyBlcnJvciByZWFkaW5nIHRoZSBoZWFkZXIKKwkgKiAgIAk9PiBkb24ndCBsb2FkIHRoZSB0YXJnZXQ7IGFib3J0LgorCSAqIC0gSGVhZGVyIGRvZXMgbm90IGhhdmUgInZhbGlkIiBmbGFnIHNldAorCSAqICAgCT0+IHVzZSB0aGUgb3JpZ2luOyBmb3JnZXQgYWJvdXQgdGhlIHNuYXBzaG90LgorCSAqIC0gSS9PIGVycm9yIHdoZW4gcmVhZGluZyBleGNlcHRpb25zCisJICogICAJPT4gZG9uJ3QgbG9hZCB0aGUgdGFyZ2V0OyBhYm9ydC4KKwkgKiAgICAgICAgIChXZSBjYW4ndCB1c2UgdGhlIGludGVybWVkaWF0ZSBvcmlnaW4gc3RhdGUuKQorCSAqIC0gSS9PIGVycm9yIHdoaWxlIG1lcmdpbmcKKwkgKgk9PiBzdG9wIG1lcmdpbmc7IHNldCBtZXJnZV9mYWlsZWQ7IHByb2Nlc3MgSS9PIG5vcm1hbGx5LgorCSAqLworCWludCBtZXJnZV9mYWlsZWQ7CisKKwkvKiBXYWl0IGZvciBldmVudHMgYmFzZWQgb24gc3RhdGVfYml0cyAqLworCXVuc2lnbmVkIGxvbmcgc3RhdGVfYml0czsKKworCS8qIFJhbmdlIG9mIGNodW5rcyBjdXJyZW50bHkgYmVpbmcgbWVyZ2VkLiAqLworCWNodW5rX3QgZmlyc3RfbWVyZ2luZ19jaHVuazsKKwlpbnQgbnVtX21lcmdpbmdfY2h1bmtzOworCisJLyoKKwkgKiBJbmNvbWluZyBiaW9zIHRoYXQgb3ZlcmxhcCB3aXRoIGNodW5rcyBiZWluZyBtZXJnZWQgbXVzdCB3YWl0CisJICogZm9yIHRoZW0gdG8gYmUgY29tbWl0dGVkLgorCSAqLworCXN0cnVjdCBiaW9fbGlzdCBiaW9zX3F1ZXVlZF9kdXJpbmdfbWVyZ2U7CiB9OwogCisvKgorICogc3RhdGVfYml0czoKKyAqICAgUlVOTklOR19NRVJHRSAgLSBNZXJnZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MuCisgKiAgIFNIVVRET1dOX01FUkdFIC0gU2V0IHRvIHNpZ25hbCB0aGF0IG1lcmdlIG5lZWRzIHRvIGJlIHN0b3BwZWQ7CisgKiAgICAgICAgICAgICAgICAgICAgY2xlYXJlZCBhZnRlcndhcmRzLgorICovCisjZGVmaW5lIFJVTk5JTkdfTUVSR0UgICAgICAgICAgMAorI2RlZmluZSBTSFVURE9XTl9NRVJHRSAgICAgICAgIDEKKworc3RydWN0IGRtX2RldiAqZG1fc25hcF9jb3coc3RydWN0IGRtX3NuYXBzaG90ICpzKQoreworCXJldHVybiBzLT5jb3c7Cit9CitFWFBPUlRfU1lNQk9MKGRtX3NuYXBfY293KTsKKwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc25hcGQ7CiBzdGF0aWMgdm9pZCBmbHVzaF9xdWV1ZWRfYmlvcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCkBAIC0xMTYsNyArMTczLDcgQEAKIH0KIAogc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gewotCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiBlOworCXN0cnVjdCBkbV9leGNlcHRpb24gZTsKIAogCS8qCiAJICogT3JpZ2luIGJ1ZmZlcnMgd2FpdGluZyBmb3IgdGhpcyB0byBjb21wbGV0ZSBhcmUgaGVsZApAQCAtMTI1LDI4ICsxODIsNiBAQAogCXN0cnVjdCBiaW9fbGlzdCBvcmlnaW5fYmlvczsKIAlzdHJ1Y3QgYmlvX2xpc3Qgc25hcHNob3RfYmlvczsKIAotCS8qCi0JICogU2hvcnQtdGVybSBxdWV1ZSBvZiBwZW5kaW5nIGV4Y2VwdGlvbnMgcHJpb3IgdG8gc3VibWlzc2lvbi4KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQkvKgotCSAqIFRoZSBwcmltYXJ5IHBlbmRpbmdfZXhjZXB0aW9uIGlzIHRoZSBvbmUgdGhhdCBob2xkcwotCSAqIHRoZSByZWZfY291bnQgYW5kIHRoZSBsaXN0IG9mIG9yaWdpbl9iaW9zIGZvciBhCi0JICogZ3JvdXAgb2YgcGVuZGluZ19leGNlcHRpb25zLiAgSXQgaXMgYWx3YXlzIGxhc3QgdG8gZ2V0IGZyZWVkLgotCSAqIFRoZXNlIGZpZWxkcyBnZXQgc2V0IHVwIHdoZW4gd3JpdGluZyB0byB0aGUgb3JpZ2luLgotCSAqLwotCXN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwcmltYXJ5X3BlOwotCi0JLyoKLQkgKiBOdW1iZXIgb2YgcGVuZGluZ19leGNlcHRpb25zIHByb2Nlc3NpbmcgdGhpcyBjaHVuay4KLQkgKiBXaGVuIHRoaXMgZHJvcHMgdG8gemVybyB3ZSBtdXN0IGNvbXBsZXRlIHRoZSBvcmlnaW4gYmlvcy4KLQkgKiBJZiBpbmNyZW1lbnRpbmcgb3IgZGVjcmVtZW50aW5nIHRoaXMsIGhvbGQgcGUtPnNuYXAtPmxvY2sgZm9yCi0JICogdGhlIHNpYmxpbmcgY29uY2VybmVkIGFuZCBub3QgcGUtPnByaW1hcnlfcGUtPnNuYXAtPmxvY2sgdW5sZXNzCi0JICogdGhleSBhcmUgdGhlIHNhbWUuCi0JICovCi0JYXRvbWljX3QgcmVmX2NvdW50OwotCiAJLyogUG9pbnRlciBiYWNrIHRvIHNuYXBzaG90IGNvbnRleHQgKi8KIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CiAKQEAgLTIyMiw2ICsyNTcsMTYgQEAKIH0KIAogLyoKKyAqIFRoaXMgY29uZmxpY3RpbmcgSS9PIGlzIGV4dHJlbWVseSBpbXByb2JhYmxlIGluIHRoZSBjYWxsZXIsCisgKiBzbyBtc2xlZXAoMSkgaXMgc3VmZmljaWVudCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSB3YWl0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBfX2NoZWNrX2Zvcl9jb25mbGljdGluZ19pbyhzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNodW5rX3QgY2h1bmspCit7CisJd2hpbGUgKF9fY2h1bmtfaXNfdHJhY2tlZChzLCBjaHVuaykpCisJCW1zbGVlcCgxKTsKK30KKworLyoKICAqIE9uZSBvZiB0aGVzZSBwZXIgcmVnaXN0ZXJlZCBvcmlnaW4sIGhlbGQgaW4gdGhlIHNuYXBzaG90X29yaWdpbnMgaGFzaAogICovCiBzdHJ1Y3Qgb3JpZ2luIHsKQEAgLTI0Myw2ICsyODgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpfb3JpZ2luczsKIHN0YXRpYyBzdHJ1Y3Qgcndfc2VtYXBob3JlIF9vcmlnaW5zX2xvY2s7CiAKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChfcGVuZGluZ19leGNlcHRpb25zX2RvbmUpOworc3RhdGljIERFRklORV9TUElOTE9DSyhfcGVuZGluZ19leGNlcHRpb25zX2RvbmVfc3BpbmxvY2spOworc3RhdGljIHVpbnQ2NF90IF9wZW5kaW5nX2V4Y2VwdGlvbnNfZG9uZV9jb3VudDsKKwogc3RhdGljIGludCBpbml0X29yaWdpbl9oYXNoKHZvaWQpCiB7CiAJaW50IGk7CkBAIC0yOTEsMjIgKzM0MCwxNDQgQEAKIH0KIAogLyoKKyAqIF9vcmlnaW5zX2xvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICogUmV0dXJucyBudW1iZXIgb2Ygc25hcHNob3RzIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIHN1cHBsaWVkIGNvdyBkZXZpY2UsIHBsdXM6CisgKiBzbmFwX3NyYyAtIGEgc25hcHNob3Qgc3VpdGFibGUgZm9yIHVzZSBhcyBhIHNvdXJjZSBvZiBleGNlcHRpb24gaGFuZG92ZXIKKyAqIHNuYXBfZGVzdCAtIGEgc25hcHNob3QgY2FwYWJsZSBvZiByZWNlaXZpbmcgZXhjZXB0aW9uIGhhbmRvdmVyLgorICogc25hcF9tZXJnZSAtIGFuIGV4aXN0aW5nIHNuYXBzaG90LW1lcmdlIHRhcmdldCBsaW5rZWQgdG8gdGhlIHNhbWUgb3JpZ2luLgorICogICBUaGVyZSBjYW4gYmUgYXQgbW9zdCBvbmUgc25hcHNob3QtbWVyZ2UgdGFyZ2V0LiBUaGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLgorICoKKyAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYW5kIHN0YXRlcyBvZiBzbmFwX3NyYyBhbmQgc25hcF9kZXN0LgorICogICAwOiBOVUxMLCBOVUxMICAtIGZpcnN0IG5ldyBzbmFwc2hvdAorICogICAxOiBzbmFwX3NyYywgTlVMTCAtIG5vcm1hbCBzbmFwc2hvdAorICogICAyOiBzbmFwX3NyYywgc25hcF9kZXN0ICAtIHdhaXRpbmcgZm9yIGhhbmRvdmVyCisgKiAgIDI6IHNuYXBfc3JjLCBOVUxMIC0gaGFuZGVkIG92ZXIsIHdhaXRpbmcgZm9yIG9sZCB0byBiZSBkZWxldGVkCisgKiAgIDE6IE5VTEwsIHNuYXBfZGVzdCAtIHNvdXJjZSBnb3QgZGVzdHJveWVkIHdpdGhvdXQgaGFuZG92ZXIKKyAqLworc3RhdGljIGludCBfX2ZpbmRfc25hcHNob3RzX3NoYXJpbmdfY293KHN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcCwKKwkJCQkJc3RydWN0IGRtX3NuYXBzaG90ICoqc25hcF9zcmMsCisJCQkJCXN0cnVjdCBkbV9zbmFwc2hvdCAqKnNuYXBfZGVzdCwKKwkJCQkJc3RydWN0IGRtX3NuYXBzaG90ICoqc25hcF9tZXJnZSkKK3sKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKnM7CisJc3RydWN0IG9yaWdpbiAqbzsKKwlpbnQgY291bnQgPSAwOworCWludCBhY3RpdmU7CisKKwlvID0gX19sb29rdXBfb3JpZ2luKHNuYXAtPm9yaWdpbi0+YmRldik7CisJaWYgKCFvKQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJm8tPnNuYXBzaG90cywgbGlzdCkgeworCQlpZiAoZG1fdGFyZ2V0X2lzX3NuYXBzaG90X21lcmdlKHMtPnRpKSAmJiBzbmFwX21lcmdlKQorCQkJKnNuYXBfbWVyZ2UgPSBzOworCQlpZiAoIWJkZXZfZXF1YWwocy0+Y293LT5iZGV2LCBzbmFwLT5jb3ctPmJkZXYpKQorCQkJY29udGludWU7CisKKwkJZG93bl9yZWFkKCZzLT5sb2NrKTsKKwkJYWN0aXZlID0gcy0+YWN0aXZlOworCQl1cF9yZWFkKCZzLT5sb2NrKTsKKworCQlpZiAoYWN0aXZlKSB7CisJCQlpZiAoc25hcF9zcmMpCisJCQkJKnNuYXBfc3JjID0gczsKKwkJfSBlbHNlIGlmIChzbmFwX2Rlc3QpCisJCQkqc25hcF9kZXN0ID0gczsKKworCQljb3VudCsrOworCX0KKworb3V0OgorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgMSBpZiB0aGlzIHNuYXBzaG90IGlzIGEgaGFuZG92ZXIgZGVzdGluYXRpb24sCisgKiBvdGhlcndpc2UgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IF9fdmFsaWRhdGVfZXhjZXB0aW9uX2hhbmRvdmVyKHN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcCkKK3sKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXBfc3JjID0gTlVMTCwgKnNuYXBfZGVzdCA9IE5VTEw7CisJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwX21lcmdlID0gTlVMTDsKKworCS8qIERvZXMgc25hcHNob3QgbmVlZCBleGNlcHRpb25zIGhhbmRlZCBvdmVyIHRvIGl0PyAqLworCWlmICgoX19maW5kX3NuYXBzaG90c19zaGFyaW5nX2NvdyhzbmFwLCAmc25hcF9zcmMsICZzbmFwX2Rlc3QsCisJCQkJCSAgJnNuYXBfbWVyZ2UpID09IDIpIHx8CisJICAgIHNuYXBfZGVzdCkgeworCQlzbmFwLT50aS0+ZXJyb3IgPSAiU25hcHNob3QgY293IHBhaXJpbmcgZm9yIGV4Y2VwdGlvbiAiCisJCQkJICAidGFibGUgaGFuZG92ZXIgZmFpbGVkIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBJZiBubyBzbmFwX3NyYyB3YXMgZm91bmQsIHNuYXAgY2Fubm90IGJlY29tZSBhIGhhbmRvdmVyCisJICogZGVzdGluYXRpb24uCisJICovCisJaWYgKCFzbmFwX3NyYykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE5vbi1zbmFwc2hvdC1tZXJnZSBoYW5kb3Zlcj8KKwkgKi8KKwlpZiAoIWRtX3RhcmdldF9pc19zbmFwc2hvdF9tZXJnZShzbmFwLT50aSkpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBEbyBub3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBtZXJnaW5nIHNuYXBzaG90LgorCSAqLworCWlmIChzbmFwX21lcmdlKSB7CisJCXNuYXAtPnRpLT5lcnJvciA9ICJBIHNuYXBzaG90IGlzIGFscmVhZHkgbWVyZ2luZy4iOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXNuYXBfc3JjLT5zdG9yZS0+dHlwZS0+cHJlcGFyZV9tZXJnZSB8fAorCSAgICAhc25hcF9zcmMtPnN0b3JlLT50eXBlLT5jb21taXRfbWVyZ2UpIHsKKwkJc25hcC0+dGktPmVycm9yID0gIlNuYXBzaG90IGV4Y2VwdGlvbiBzdG9yZSBkb2VzIG5vdCAiCisJCQkJICAic3VwcG9ydCBzbmFwc2hvdC1tZXJnZS4iOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgX19pbnNlcnRfc25hcHNob3Qoc3RydWN0IG9yaWdpbiAqbywgc3RydWN0IGRtX3NuYXBzaG90ICpzKQoreworCXN0cnVjdCBkbV9zbmFwc2hvdCAqbDsKKworCS8qIFNvcnQgdGhlIGxpc3QgYWNjb3JkaW5nIHRvIGNodW5rIHNpemUsIGxhcmdlc3QtZmlyc3Qgc21hbGxlc3QtbGFzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJm8tPnNuYXBzaG90cywgbGlzdCkKKwkJaWYgKGwtPnN0b3JlLT5jaHVua19zaXplIDwgcy0+c3RvcmUtPmNodW5rX3NpemUpCisJCQlicmVhazsKKwlsaXN0X2FkZF90YWlsKCZzLT5saXN0LCAmbC0+bGlzdCk7Cit9CisKKy8qCiAgKiBNYWtlIGEgbm90ZSBvZiB0aGUgc25hcHNob3QgYW5kIGl0cyBvcmlnaW4gc28gd2UgY2FuIGxvb2sgaXQKICAqIHVwIHdoZW4gdGhlIG9yaWdpbiBoYXMgYSB3cml0ZSBvbiBpdC4KKyAqCisgKiBBbHNvIHZhbGlkYXRlIHNuYXBzaG90IGV4Y2VwdGlvbiBzdG9yZSBoYW5kb3ZlcnMuCisgKiBPbiBzdWNjZXNzLCByZXR1cm5zIDEgaWYgdGhpcyByZWdpc3RyYXRpb24gaXMgYSBoYW5kb3ZlciBkZXN0aW5hdGlvbiwKKyAqIG90aGVyd2lzZSByZXR1cm5zIDAuCiAgKi8KIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc25hcHNob3Qoc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwKQogewotCXN0cnVjdCBkbV9zbmFwc2hvdCAqbDsKLQlzdHJ1Y3Qgb3JpZ2luICpvLCAqbmV3X287CisJc3RydWN0IG9yaWdpbiAqbywgKm5ld19vID0gTlVMTDsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gc25hcC0+b3JpZ2luLT5iZGV2OworCWludCByID0gMDsKIAogCW5ld19vID0ga21hbGxvYyhzaXplb2YoKm5ld19vKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkb3duX3dyaXRlKCZfb3JpZ2luc19sb2NrKTsKLQlvID0gX19sb29rdXBfb3JpZ2luKGJkZXYpOwogCisJciA9IF9fdmFsaWRhdGVfZXhjZXB0aW9uX2hhbmRvdmVyKHNuYXApOworCWlmIChyIDwgMCkgeworCQlrZnJlZShuZXdfbyk7CisJCWdvdG8gb3V0OworCX0KKworCW8gPSBfX2xvb2t1cF9vcmlnaW4oYmRldik7CiAJaWYgKG8pCiAJCWtmcmVlKG5ld19vKTsKIAllbHNlIHsKQEAgLTMyMCwxNCArNDkxLDI3IEBACiAJCV9faW5zZXJ0X29yaWdpbihvKTsKIAl9CiAKLQkvKiBTb3J0IHRoZSBsaXN0IGFjY29yZGluZyB0byBjaHVuayBzaXplLCBsYXJnZXN0LWZpcnN0IHNtYWxsZXN0LWxhc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGwsICZvLT5zbmFwc2hvdHMsIGxpc3QpCi0JCWlmIChsLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8IHNuYXAtPnN0b3JlLT5jaHVua19zaXplKQotCQkJYnJlYWs7Ci0JbGlzdF9hZGRfdGFpbCgmc25hcC0+bGlzdCwgJmwtPmxpc3QpOworCV9faW5zZXJ0X3NuYXBzaG90KG8sIHNuYXApOworCitvdXQ6CisJdXBfd3JpdGUoJl9vcmlnaW5zX2xvY2spOworCisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBNb3ZlIHNuYXBzaG90IHRvIGNvcnJlY3QgcGxhY2UgaW4gbGlzdCBhY2NvcmRpbmcgdG8gY2h1bmsgc2l6ZS4KKyAqLworc3RhdGljIHZvaWQgcmVyZWdpc3Rlcl9zbmFwc2hvdChzdHJ1Y3QgZG1fc25hcHNob3QgKnMpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHMtPm9yaWdpbi0+YmRldjsKKworCWRvd25fd3JpdGUoJl9vcmlnaW5zX2xvY2spOworCisJbGlzdF9kZWwoJnMtPmxpc3QpOworCV9faW5zZXJ0X3NuYXBzaG90KF9fbG9va3VwX29yaWdpbihiZGV2KSwgcyk7CiAKIAl1cF93cml0ZSgmX29yaWdpbnNfbG9jayk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfc25hcHNob3Qoc3RydWN0IGRtX3NuYXBzaG90ICpzKQpAQCAtMzM4LDcgKzUyMiw3IEBACiAJbyA9IF9fbG9va3VwX29yaWdpbihzLT5vcmlnaW4tPmJkZXYpOwogCiAJbGlzdF9kZWwoJnMtPmxpc3QpOwotCWlmIChsaXN0X2VtcHR5KCZvLT5zbmFwc2hvdHMpKSB7CisJaWYgKG8gJiYgbGlzdF9lbXB0eSgmby0+c25hcHNob3RzKSkgewogCQlsaXN0X2RlbCgmby0+aGFzaF9saXN0KTsKIAkJa2ZyZWUobyk7CiAJfQpAQCAtMzUxLDggKzUzNSw4IEBACiAgKiBUaGUgbG93ZXN0IGhhc2hfc2hpZnQgYml0cyBvZiB0aGUgY2h1bmsgbnVtYmVyIGFyZSBpZ25vcmVkLCBhbGxvd2luZwogICogc29tZSBjb25zZWN1dGl2ZSBjaHVua3MgdG8gYmUgZ3JvdXBlZCB0b2dldGhlci4KICAqLwotc3RhdGljIGludCBpbml0X2V4Y2VwdGlvbl90YWJsZShzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlICpldCwgdWludDMyX3Qgc2l6ZSwKLQkJCQl1bnNpZ25lZCBoYXNoX3NoaWZ0KQorc3RhdGljIGludCBkbV9leGNlcHRpb25fdGFibGVfaW5pdChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3RhYmxlICpldCwKKwkJCQkgICB1aW50MzJfdCBzaXplLCB1bnNpZ25lZCBoYXNoX3NoaWZ0KQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC0zNjgsMTAgKzU1MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleGl0X2V4Y2VwdGlvbl90YWJsZShzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlICpldCwgc3RydWN0IGttZW1fY2FjaGUgKm1lbSkKK3N0YXRpYyB2b2lkIGRtX2V4Y2VwdGlvbl90YWJsZV9leGl0KHN0cnVjdCBkbV9leGNlcHRpb25fdGFibGUgKmV0LAorCQkJCSAgICBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnNsb3Q7Ci0Jc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICpleCwgKm5leHQ7CisJc3RydWN0IGRtX2V4Y2VwdGlvbiAqZXgsICpuZXh0OwogCWludCBpLCBzaXplOwogCiAJc2l6ZSA9IGV0LT5oYXNoX21hc2sgKyAxOwpAQCAtMzg1LDE5ICs1NzAsMTIgQEAKIAl2ZnJlZShldC0+dGFibGUpOwogfQogCi1zdGF0aWMgdWludDMyX3QgZXhjZXB0aW9uX2hhc2goc3RydWN0IGV4Y2VwdGlvbl90YWJsZSAqZXQsIGNodW5rX3QgY2h1bmspCitzdGF0aWMgdWludDMyX3QgZXhjZXB0aW9uX2hhc2goc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSAqZXQsIGNodW5rX3QgY2h1bmspCiB7CiAJcmV0dXJuIChjaHVuayA+PiBldC0+aGFzaF9zaGlmdCkgJiBldC0+aGFzaF9tYXNrOwogfQogCi1zdGF0aWMgdm9pZCBpbnNlcnRfZXhjZXB0aW9uKHN0cnVjdCBleGNlcHRpb25fdGFibGUgKmVoLAotCQkJICAgICBzdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24gKmUpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbCA9ICZlaC0+dGFibGVbZXhjZXB0aW9uX2hhc2goZWgsIGUtPm9sZF9jaHVuayldOwotCWxpc3RfYWRkKCZlLT5oYXNoX2xpc3QsIGwpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSkKK3N0YXRpYyB2b2lkIGRtX3JlbW92ZV9leGNlcHRpb24oc3RydWN0IGRtX2V4Y2VwdGlvbiAqZSkKIHsKIAlsaXN0X2RlbCgmZS0+aGFzaF9saXN0KTsKIH0KQEAgLTQwNiwxMSArNTg0LDExIEBACiAgKiBSZXR1cm4gdGhlIGV4Y2VwdGlvbiBkYXRhIGZvciBhIHNlY3Rvciwgb3IgTlVMTCBpZiBub3QKICAqIHJlbWFwcGVkLgogICovCi1zdGF0aWMgc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICpsb29rdXBfZXhjZXB0aW9uKHN0cnVjdCBleGNlcHRpb25fdGFibGUgKmV0LAotCQkJCQkJICBjaHVua190IGNodW5rKQorc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb24gKmRtX2xvb2t1cF9leGNlcHRpb24oc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSAqZXQsCisJCQkJCQljaHVua190IGNodW5rKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnNsb3Q7Ci0Jc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplOworCXN0cnVjdCBkbV9leGNlcHRpb24gKmU7CiAKIAlzbG90ID0gJmV0LT50YWJsZVtleGNlcHRpb25faGFzaChldCwgY2h1bmspXTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlLCBzbG90LCBoYXNoX2xpc3QpCkBAIC00MjEsOSArNTk5LDkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqYWxsb2NfZXhjZXB0aW9uKHZvaWQpCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbiAqYWxsb2NfY29tcGxldGVkX2V4Y2VwdGlvbih2b2lkKQogewotCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZTsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplOwogCiAJZSA9IGttZW1fY2FjaGVfYWxsb2MoZXhjZXB0aW9uX2NhY2hlLCBHRlBfTk9JTyk7CiAJaWYgKCFlKQpAQCAtNDMyLDcgKzYxMCw3IEBACiAJcmV0dXJuIGU7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSkKK3N0YXRpYyB2b2lkIGZyZWVfY29tcGxldGVkX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fZXhjZXB0aW9uICplKQogewogCWttZW1fY2FjaGVfZnJlZShleGNlcHRpb25fY2FjaGUsIGUpOwogfQpAQCAtNDU3LDEyICs2MzUsMTEgQEAKIAlhdG9taWNfZGVjKCZzLT5wZW5kaW5nX2V4Y2VwdGlvbnNfY291bnQpOwogfQogCi1zdGF0aWMgdm9pZCBpbnNlcnRfY29tcGxldGVkX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsCi0JCQkJICAgICAgIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqbmV3X2UpCitzdGF0aWMgdm9pZCBkbV9pbnNlcnRfZXhjZXB0aW9uKHN0cnVjdCBkbV9leGNlcHRpb25fdGFibGUgKmVoLAorCQkJCXN0cnVjdCBkbV9leGNlcHRpb24gKm5ld19lKQogewotCXN0cnVjdCBleGNlcHRpb25fdGFibGUgKmVoID0gJnMtPmNvbXBsZXRlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0Jc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplID0gTlVMTDsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplID0gTlVMTDsKIAogCWwgPSAmZWgtPnRhYmxlW2V4Y2VwdGlvbl9oYXNoKGVoLCBuZXdfZS0+b2xkX2NodW5rKV07CiAKQEAgLTQ3OCw3ICs2NTUsNyBAQAogCQkgICAgbmV3X2UtPm5ld19jaHVuayA9PSAoZG1fY2h1bmtfbnVtYmVyKGUtPm5ld19jaHVuaykgKwogCQkJCQkgZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnQoZSkgKyAxKSkgewogCQkJZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnRfaW5jKGUpOwotCQkJZnJlZV9leGNlcHRpb24obmV3X2UpOworCQkJZnJlZV9jb21wbGV0ZWRfZXhjZXB0aW9uKG5ld19lKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC00ODgsNyArNjY1LDcgQEAKIAkJCWRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50X2luYyhlKTsKIAkJCWUtPm9sZF9jaHVuay0tOwogCQkJZS0+bmV3X2NodW5rLS07Ci0JCQlmcmVlX2V4Y2VwdGlvbihuZXdfZSk7CisJCQlmcmVlX2NvbXBsZXRlZF9leGNlcHRpb24obmV3X2UpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTUwNyw5ICs2ODQsOSBAQAogc3RhdGljIGludCBkbV9hZGRfZXhjZXB0aW9uKHZvaWQgKmNvbnRleHQsIGNodW5rX3Qgb2xkLCBjaHVua190IG5ldykKIHsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSBjb250ZXh0OwotCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZTsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplOwogCi0JZSA9IGFsbG9jX2V4Y2VwdGlvbigpOworCWUgPSBhbGxvY19jb21wbGV0ZWRfZXhjZXB0aW9uKCk7CiAJaWYgKCFlKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNTE4LDExICs2OTUsMzAgQEAKIAkvKiBDb25zZWN1dGl2ZV9jb3VudCBpcyBpbXBsaWNpdGx5IGluaXRpYWxpc2VkIHRvIHplcm8gKi8KIAllLT5uZXdfY2h1bmsgPSBuZXc7CiAKLQlpbnNlcnRfY29tcGxldGVkX2V4Y2VwdGlvbihzLCBlKTsKKwlkbV9pbnNlcnRfZXhjZXB0aW9uKCZzLT5jb21wbGV0ZSwgZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBtaW5fbm90X3plcm8obCwgcikgKCgobCkgPT0gMCkgPyAocikgOiAoKChyKSA9PSAwKSA/IChsKSA6IG1pbihsLCByKSkpCisKKy8qCisgKiBSZXR1cm4gYSBtaW5pbXVtIGNodW5rIHNpemUgb2YgYWxsIHNuYXBzaG90cyB0aGF0IGhhdmUgdGhlIHNwZWNpZmllZCBvcmlnaW4uCisgKiBSZXR1cm4gemVybyBpZiB0aGUgb3JpZ2luIGhhcyBubyBzbmFwc2hvdHMuCisgKi8KK3N0YXRpYyBzZWN0b3JfdCBfX21pbmltdW1fY2h1bmtfc2l6ZShzdHJ1Y3Qgb3JpZ2luICpvKQoreworCXN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcDsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gMDsKKworCWlmIChvKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNuYXAsICZvLT5zbmFwc2hvdHMsIGxpc3QpCisJCQljaHVua19zaXplID0gbWluX25vdF96ZXJvKGNodW5rX3NpemUsCisJCQkJCQkgIHNuYXAtPnN0b3JlLT5jaHVua19zaXplKTsKKworCXJldHVybiBjaHVua19zaXplOworfQorCiAvKgogICogSGFyZCBjb2RlZCBtYWdpYy4KICAqLwpAQCAtNTQ2LDE2ICs3NDIsMTggQEAKIAkgKiBDYWxjdWxhdGUgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsIHZvbHVtZSBvcgogCSAqIHRoZSBDT1cgdm9sdW1lLi4uCiAJICovCi0JY293X2Rldl9zaXplID0gZ2V0X2Rldl9zaXplKHMtPnN0b3JlLT5jb3ctPmJkZXYpOworCWNvd19kZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShzLT5jb3ctPmJkZXYpOwogCW9yaWdpbl9kZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShzLT5vcmlnaW4tPmJkZXYpOwogCW1heF9idWNrZXRzID0gY2FsY19tYXhfYnVja2V0cygpOwogCiAJaGFzaF9zaXplID0gbWluKG9yaWdpbl9kZXZfc2l6ZSwgY293X2Rldl9zaXplKSA+PiBzLT5zdG9yZS0+Y2h1bmtfc2hpZnQ7CiAJaGFzaF9zaXplID0gbWluKGhhc2hfc2l6ZSwgbWF4X2J1Y2tldHMpOwogCisJaWYgKGhhc2hfc2l6ZSA8IDY0KQorCQloYXNoX3NpemUgPSA2NDsKIAloYXNoX3NpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhoYXNoX3NpemUpOwotCWlmIChpbml0X2V4Y2VwdGlvbl90YWJsZSgmcy0+Y29tcGxldGUsIGhhc2hfc2l6ZSwKLQkJCQkgRE1fQ0hVTktfQ09OU0VDVVRJVkVfQklUUykpCisJaWYgKGRtX2V4Y2VwdGlvbl90YWJsZV9pbml0KCZzLT5jb21wbGV0ZSwgaGFzaF9zaXplLAorCQkJCSAgICBETV9DSFVOS19DT05TRUNVVElWRV9CSVRTKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKgpAQCAtNTY2LDE0ICs3NjQsMjg0IEBACiAJaWYgKGhhc2hfc2l6ZSA8IDY0KQogCQloYXNoX3NpemUgPSA2NDsKIAotCWlmIChpbml0X2V4Y2VwdGlvbl90YWJsZSgmcy0+cGVuZGluZywgaGFzaF9zaXplLCAwKSkgewotCQlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+Y29tcGxldGUsIGV4Y2VwdGlvbl9jYWNoZSk7CisJaWYgKGRtX2V4Y2VwdGlvbl90YWJsZV9pbml0KCZzLT5wZW5kaW5nLCBoYXNoX3NpemUsIDApKSB7CisJCWRtX2V4Y2VwdGlvbl90YWJsZV9leGl0KCZzLT5jb21wbGV0ZSwgZXhjZXB0aW9uX2NhY2hlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1lcmdlX3NodXRkb3duKHN0cnVjdCBkbV9zbmFwc2hvdCAqcykKK3sKKwljbGVhcl9iaXRfdW5sb2NrKFJVTk5JTkdfTUVSR0UsICZzLT5zdGF0ZV9iaXRzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXdha2VfdXBfYml0KCZzLT5zdGF0ZV9iaXRzLCBSVU5OSU5HX01FUkdFKTsKK30KKworc3RhdGljIHN0cnVjdCBiaW8gKl9fcmVsZWFzZV9xdWV1ZWRfYmlvc19hZnRlcl9tZXJnZShzdHJ1Y3QgZG1fc25hcHNob3QgKnMpCit7CisJcy0+Zmlyc3RfbWVyZ2luZ19jaHVuayA9IDA7CisJcy0+bnVtX21lcmdpbmdfY2h1bmtzID0gMDsKKworCXJldHVybiBiaW9fbGlzdF9nZXQoJnMtPmJpb3NfcXVldWVkX2R1cmluZ19tZXJnZSk7Cit9CisKKy8qCisgKiBSZW1vdmUgb25lIGNodW5rIGZyb20gdGhlIGluZGV4IG9mIGNvbXBsZXRlZCBleGNlcHRpb25zLgorICovCitzdGF0aWMgaW50IF9fcmVtb3ZlX3NpbmdsZV9leGNlcHRpb25fY2h1bmsoc3RydWN0IGRtX3NuYXBzaG90ICpzLAorCQkJCQkgICBjaHVua190IG9sZF9jaHVuaykKK3sKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplOworCisJZSA9IGRtX2xvb2t1cF9leGNlcHRpb24oJnMtPmNvbXBsZXRlLCBvbGRfY2h1bmspOworCWlmICghZSkgeworCQlETUVSUigiQ29ycnVwdGlvbiBkZXRlY3RlZDogZXhjZXB0aW9uIGZvciBibG9jayAlbGx1IGlzICIKKwkJICAgICAgIm9uIGRpc2sgYnV0IG5vdCBpbiBtZW1vcnkiLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9sZF9jaHVuayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgb25seSBjaHVuayB1c2luZyB0aGlzIGV4Y2VwdGlvbiwgcmVtb3ZlIGV4Y2VwdGlvbi4KKwkgKi8KKwlpZiAoIWRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50KGUpKSB7CisJCWRtX3JlbW92ZV9leGNlcHRpb24oZSk7CisJCWZyZWVfY29tcGxldGVkX2V4Y2VwdGlvbihlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBUaGUgY2h1bmsgbWF5IGJlIGVpdGhlciBhdCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYQorCSAqIGdyb3VwIG9mIGNvbnNlY3V0aXZlIGNodW5rcyAtIG5ldmVyIGluIHRoZSBtaWRkbGUuICBXZSBhcmUKKwkgKiByZW1vdmluZyBjaHVua3MgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIHRvIHRoYXQgaW4gd2hpY2ggdGhleQorCSAqIHdlcmUgYWRkZWQsIHNvIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLgorCSAqIERlY3JlbWVudCB0aGUgY29uc2VjdXRpdmUgY2h1bmsgY291bnRlciBhbmQgYWRqdXN0IHRoZQorCSAqIHN0YXJ0aW5nIHBvaW50IGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAob2xkX2NodW5rID09IGUtPm9sZF9jaHVuaykgeworCQllLT5vbGRfY2h1bmsrKzsKKwkJZS0+bmV3X2NodW5rKys7CisJfSBlbHNlIGlmIChvbGRfY2h1bmsgIT0gZS0+b2xkX2NodW5rICsKKwkJICAgZG1fY29uc2VjdXRpdmVfY2h1bmtfY291bnQoZSkpIHsKKwkJRE1FUlIoIkF0dGVtcHQgdG8gbWVyZ2UgYmxvY2sgJWxsdSBmcm9tIHRoZSAiCisJCSAgICAgICJtaWRkbGUgb2YgYSBjaHVuayByYW5nZSBbJWxsdSAtICVsbHVdIiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvbGRfY2h1bmssCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZS0+b2xkX2NodW5rLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICAgICBlLT5vbGRfY2h1bmsgKyBkbV9jb25zZWN1dGl2ZV9jaHVua19jb3VudChlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50X2RlYyhlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9iaW9zKHN0cnVjdCBiaW8gKmJpbyk7CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3NpbmdsZV9leGNlcHRpb25fY2h1bmsoc3RydWN0IGRtX3NuYXBzaG90ICpzKQoreworCXN0cnVjdCBiaW8gKmIgPSBOVUxMOworCWludCByOworCWNodW5rX3Qgb2xkX2NodW5rID0gcy0+Zmlyc3RfbWVyZ2luZ19jaHVuayArIHMtPm51bV9tZXJnaW5nX2NodW5rcyAtIDE7CisKKwlkb3duX3dyaXRlKCZzLT5sb2NrKTsKKworCS8qCisJICogUHJvY2VzcyBjaHVua3MgKGFuZCBhc3NvY2lhdGVkIGV4Y2VwdGlvbnMpIGluIHJldmVyc2Ugb3JkZXIKKwkgKiBzbyB0aGF0IGRtX2NvbnNlY3V0aXZlX2NodW5rX2NvdW50X2RlYygpIGFjY291bnRpbmcgd29ya3MuCisJICovCisJZG8geworCQlyID0gX19yZW1vdmVfc2luZ2xlX2V4Y2VwdGlvbl9jaHVuayhzLCBvbGRfY2h1bmspOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCX0gd2hpbGUgKG9sZF9jaHVuay0tID4gcy0+Zmlyc3RfbWVyZ2luZ19jaHVuayk7CisKKwliID0gX19yZWxlYXNlX3F1ZXVlZF9iaW9zX2FmdGVyX21lcmdlKHMpOworCitvdXQ6CisJdXBfd3JpdGUoJnMtPmxvY2spOworCWlmIChiKQorCQlmbHVzaF9iaW9zKGIpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgb3JpZ2luX3dyaXRlX2V4dGVudChzdHJ1Y3QgZG1fc25hcHNob3QgKm1lcmdpbmdfc25hcCwKKwkJCSAgICAgICBzZWN0b3JfdCBzZWN0b3IsIHVuc2lnbmVkIGNodW5rX3NpemUpOworCitzdGF0aWMgdm9pZCBtZXJnZV9jYWxsYmFjayhpbnQgcmVhZF9lcnIsIHVuc2lnbmVkIGxvbmcgd3JpdGVfZXJyLAorCQkJICAgdm9pZCAqY29udGV4dCk7CisKK3N0YXRpYyB1aW50NjRfdCByZWFkX3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX2NvdW50KHZvaWQpCit7CisJdWludDY0X3QgcGVuZGluZ19leGNlcHRpb25zX2RvbmU7CisKKwlzcGluX2xvY2soJl9wZW5kaW5nX2V4Y2VwdGlvbnNfZG9uZV9zcGlubG9jayk7CisJcGVuZGluZ19leGNlcHRpb25zX2RvbmUgPSBfcGVuZGluZ19leGNlcHRpb25zX2RvbmVfY291bnQ7CisJc3Bpbl91bmxvY2soJl9wZW5kaW5nX2V4Y2VwdGlvbnNfZG9uZV9zcGlubG9jayk7CisKKwlyZXR1cm4gcGVuZGluZ19leGNlcHRpb25zX2RvbmU7Cit9CisKK3N0YXRpYyB2b2lkIGluY3JlbWVudF9wZW5kaW5nX2V4Y2VwdGlvbnNfZG9uZV9jb3VudCh2b2lkKQoreworCXNwaW5fbG9jaygmX3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX3NwaW5sb2NrKTsKKwlfcGVuZGluZ19leGNlcHRpb25zX2RvbmVfY291bnQrKzsKKwlzcGluX3VubG9jaygmX3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX3NwaW5sb2NrKTsKKworCXdha2VfdXBfYWxsKCZfcGVuZGluZ19leGNlcHRpb25zX2RvbmUpOworfQorCitzdGF0aWMgdm9pZCBzbmFwc2hvdF9tZXJnZV9uZXh0X2NodW5rcyhzdHJ1Y3QgZG1fc25hcHNob3QgKnMpCit7CisJaW50IGksIGxpbmVhcl9jaHVua3M7CisJY2h1bmtfdCBvbGRfY2h1bmssIG5ld19jaHVuazsKKwlzdHJ1Y3QgZG1faW9fcmVnaW9uIHNyYywgZGVzdDsKKwlzZWN0b3JfdCBpb19zaXplOworCXVpbnQ2NF90IHByZXZpb3VzX2NvdW50OworCisJQlVHX09OKCF0ZXN0X2JpdChSVU5OSU5HX01FUkdFLCAmcy0+c3RhdGVfYml0cykpOworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTSFVURE9XTl9NRVJHRSwgJnMtPnN0YXRlX2JpdHMpKSkKKwkJZ290byBzaHV0OworCisJLyoKKwkgKiB2YWxpZCBmbGFnIG5ldmVyIGNoYW5nZXMgZHVyaW5nIG1lcmdlLCBzbyBubyBsb2NrIHJlcXVpcmVkLgorCSAqLworCWlmICghcy0+dmFsaWQpIHsKKwkJRE1FUlIoIlNuYXBzaG90IGlzIGludmFsaWQ6IGNhbid0IG1lcmdlIik7CisJCWdvdG8gc2h1dDsKKwl9CisKKwlsaW5lYXJfY2h1bmtzID0gcy0+c3RvcmUtPnR5cGUtPnByZXBhcmVfbWVyZ2Uocy0+c3RvcmUsICZvbGRfY2h1bmssCisJCQkJCQkgICAgICAmbmV3X2NodW5rKTsKKwlpZiAobGluZWFyX2NodW5rcyA8PSAwKSB7CisJCWlmIChsaW5lYXJfY2h1bmtzIDwgMCkgeworCQkJRE1FUlIoIlJlYWQgZXJyb3IgaW4gZXhjZXB0aW9uIHN0b3JlOiAiCisJCQkgICAgICAic2h1dHRpbmcgZG93biBtZXJnZSIpOworCQkJZG93bl93cml0ZSgmcy0+bG9jayk7CisJCQlzLT5tZXJnZV9mYWlsZWQgPSAxOworCQkJdXBfd3JpdGUoJnMtPmxvY2spOworCQl9CisJCWdvdG8gc2h1dDsKKwl9CisKKwkvKiBBZGp1c3Qgb2xkX2NodW5rIGFuZCBuZXdfY2h1bmsgdG8gcmVmbGVjdCBzdGFydCBvZiBsaW5lYXIgcmVnaW9uICovCisJb2xkX2NodW5rID0gb2xkX2NodW5rICsgMSAtIGxpbmVhcl9jaHVua3M7CisJbmV3X2NodW5rID0gbmV3X2NodW5rICsgMSAtIGxpbmVhcl9jaHVua3M7CisKKwkvKgorCSAqIFVzZSBvbmUgKHBvdGVudGlhbGx5IGxhcmdlKSBJL08gdG8gY29weSBhbGwgJ2xpbmVhcl9jaHVua3MnCisJICogZnJvbSB0aGUgZXhjZXB0aW9uIHN0b3JlIHRvIHRoZSBvcmlnaW4KKwkgKi8KKwlpb19zaXplID0gbGluZWFyX2NodW5rcyAqIHMtPnN0b3JlLT5jaHVua19zaXplOworCisJZGVzdC5iZGV2ID0gcy0+b3JpZ2luLT5iZGV2OworCWRlc3Quc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBvbGRfY2h1bmspOworCWRlc3QuY291bnQgPSBtaW4oaW9fc2l6ZSwgZ2V0X2Rldl9zaXplKGRlc3QuYmRldikgLSBkZXN0LnNlY3Rvcik7CisKKwlzcmMuYmRldiA9IHMtPmNvdy0+YmRldjsKKwlzcmMuc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBuZXdfY2h1bmspOworCXNyYy5jb3VudCA9IGRlc3QuY291bnQ7CisKKwkvKgorCSAqIFJlYWxsb2NhdGUgYW55IGV4Y2VwdGlvbnMgbmVlZGVkIGluIG90aGVyIHNuYXBzaG90cyB0aGVuCisJICogd2FpdCBmb3IgdGhlIHBlbmRpbmcgZXhjZXB0aW9ucyB0byBjb21wbGV0ZS4KKwkgKiBFYWNoIHRpbWUgYW55IHBlbmRpbmcgZXhjZXB0aW9uIChnbG9iYWxseSBvbiB0aGUgc3lzdGVtKQorCSAqIGNvbXBsZXRlcyB3ZSBhcmUgd29rZW4gYW5kIHJlcGVhdCB0aGUgcHJvY2VzcyB0byBmaW5kIG91dAorCSAqIGlmIHdlIGNhbiBwcm9jZWVkLiAgV2hpbGUgdGhpcyBtYXkgbm90IHNlZW0gYSBwYXJ0aWN1bGFybHkKKwkgKiBlZmZpY2llbnQgYWxnb3JpdGhtLCBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gaGF2ZSBhbnkKKwkgKiBzaWduaWZpY2FudCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuCisJICovCisJcHJldmlvdXNfY291bnQgPSByZWFkX3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX2NvdW50KCk7CisJd2hpbGUgKG9yaWdpbl93cml0ZV9leHRlbnQocywgZGVzdC5zZWN0b3IsIGlvX3NpemUpKSB7CisJCXdhaXRfZXZlbnQoX3BlbmRpbmdfZXhjZXB0aW9uc19kb25lLAorCQkJICAgKHJlYWRfcGVuZGluZ19leGNlcHRpb25zX2RvbmVfY291bnQoKSAhPQorCQkJICAgIHByZXZpb3VzX2NvdW50KSk7CisJCS8qIFJldHJ5IGFmdGVyIHRoZSB3YWl0LCB1bnRpbCBhbGwgZXhjZXB0aW9ucyBhcmUgZG9uZS4gKi8KKwkJcHJldmlvdXNfY291bnQgPSByZWFkX3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX2NvdW50KCk7CisJfQorCisJZG93bl93cml0ZSgmcy0+bG9jayk7CisJcy0+Zmlyc3RfbWVyZ2luZ19jaHVuayA9IG9sZF9jaHVuazsKKwlzLT5udW1fbWVyZ2luZ19jaHVua3MgPSBsaW5lYXJfY2h1bmtzOworCXVwX3dyaXRlKCZzLT5sb2NrKTsKKworCS8qIFdhaXQgdW50aWwgd3JpdGVzIHRvIGFsbCAnbGluZWFyX2NodW5rcycgZHJhaW4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGluZWFyX2NodW5rczsgaSsrKQorCQlfX2NoZWNrX2Zvcl9jb25mbGljdGluZ19pbyhzLCBvbGRfY2h1bmsgKyBpKTsKKworCWRtX2tjb3B5ZF9jb3B5KHMtPmtjb3B5ZF9jbGllbnQsICZzcmMsIDEsICZkZXN0LCAwLCBtZXJnZV9jYWxsYmFjaywgcyk7CisJcmV0dXJuOworCitzaHV0OgorCW1lcmdlX3NodXRkb3duKHMpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9iaW9zKHN0cnVjdCBiaW8gKmJpbyk7CisKK3N0YXRpYyB2b2lkIG1lcmdlX2NhbGxiYWNrKGludCByZWFkX2VyciwgdW5zaWduZWQgbG9uZyB3cml0ZV9lcnIsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGRtX3NuYXBzaG90ICpzID0gY29udGV4dDsKKwlzdHJ1Y3QgYmlvICpiID0gTlVMTDsKKworCWlmIChyZWFkX2VyciB8fCB3cml0ZV9lcnIpIHsKKwkJaWYgKHJlYWRfZXJyKQorCQkJRE1FUlIoIlJlYWQgZXJyb3I6IHNodXR0aW5nIGRvd24gbWVyZ2UuIik7CisJCWVsc2UKKwkJCURNRVJSKCJXcml0ZSBlcnJvcjogc2h1dHRpbmcgZG93biBtZXJnZS4iKTsKKwkJZ290byBzaHV0OworCX0KKworCWlmIChzLT5zdG9yZS0+dHlwZS0+Y29tbWl0X21lcmdlKHMtPnN0b3JlLAorCQkJCQkgcy0+bnVtX21lcmdpbmdfY2h1bmtzKSA8IDApIHsKKwkJRE1FUlIoIldyaXRlIGVycm9yIGluIGV4Y2VwdGlvbiBzdG9yZTogc2h1dHRpbmcgZG93biBtZXJnZSIpOworCQlnb3RvIHNodXQ7CisJfQorCisJaWYgKHJlbW92ZV9zaW5nbGVfZXhjZXB0aW9uX2NodW5rKHMpIDwgMCkKKwkJZ290byBzaHV0OworCisJc25hcHNob3RfbWVyZ2VfbmV4dF9jaHVua3Mocyk7CisKKwlyZXR1cm47CisKK3NodXQ6CisJZG93bl93cml0ZSgmcy0+bG9jayk7CisJcy0+bWVyZ2VfZmFpbGVkID0gMTsKKwliID0gX19yZWxlYXNlX3F1ZXVlZF9iaW9zX2FmdGVyX21lcmdlKHMpOworCXVwX3dyaXRlKCZzLT5sb2NrKTsKKwllcnJvcl9iaW9zKGIpOworCisJbWVyZ2Vfc2h1dGRvd24ocyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X21lcmdlKHN0cnVjdCBkbV9zbmFwc2hvdCAqcykKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUlVOTklOR19NRVJHRSwgJnMtPnN0YXRlX2JpdHMpKQorCQlzbmFwc2hvdF9tZXJnZV9uZXh0X2NodW5rcyhzKTsKK30KKworc3RhdGljIGludCB3YWl0X3NjaGVkdWxlKHZvaWQgKnB0cikKK3sKKwlzY2hlZHVsZSgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBtZXJnaW5nIHByb2Nlc3MgYW5kIHdhaXQgdW50aWwgaXQgZmluaXNoZXMuCisgKi8KK3N0YXRpYyB2b2lkIHN0b3BfbWVyZ2Uoc3RydWN0IGRtX3NuYXBzaG90ICpzKQoreworCXNldF9iaXQoU0hVVERPV05fTUVSR0UsICZzLT5zdGF0ZV9iaXRzKTsKKwl3YWl0X29uX2JpdCgmcy0+c3RhdGVfYml0cywgUlVOTklOR19NRVJHRSwgd2FpdF9zY2hlZHVsZSwKKwkJICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwljbGVhcl9iaXQoU0hVVERPV05fTUVSR0UsICZzLT5zdGF0ZV9iaXRzKTsKK30KKwogLyoKICAqIENvbnN0cnVjdCBhIHNuYXBzaG90IG1hcHBpbmc6IDxvcmlnaW5fZGV2PiA8Q09XLWRldj4gPHAvbj4gPGNodW5rLXNpemU+CiAgKi8KQEAgLTU4Miw1MCArMTA1MCw3MyBAQAogCXN0cnVjdCBkbV9zbmFwc2hvdCAqczsKIAlpbnQgaTsKIAlpbnQgciA9IC1FSU5WQUw7Ci0JY2hhciAqb3JpZ2luX3BhdGg7Ci0Jc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmU7Ci0JdW5zaWduZWQgYXJnc191c2VkOworCWNoYXIgKm9yaWdpbl9wYXRoLCAqY293X3BhdGg7CisJdW5zaWduZWQgYXJnc191c2VkLCBudW1fZmx1c2hfcmVxdWVzdHMgPSAxOworCWZtb2RlX3Qgb3JpZ2luX21vZGUgPSBGTU9ERV9SRUFEOwogCiAJaWYgKGFyZ2MgIT0gNCkgewogCQl0aS0+ZXJyb3IgPSAicmVxdWlyZXMgZXhhY3RseSA0IGFyZ3VtZW50cyI7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGJhZF9hcmdzOworCQlnb3RvIGJhZDsKKwl9CisKKwlpZiAoZG1fdGFyZ2V0X2lzX3NuYXBzaG90X21lcmdlKHRpKSkgeworCQludW1fZmx1c2hfcmVxdWVzdHMgPSAyOworCQlvcmlnaW5fbW9kZSA9IEZNT0RFX1dSSVRFOwogCX0KIAogCW9yaWdpbl9wYXRoID0gYXJndlswXTsKIAlhcmd2Kys7CiAJYXJnYy0tOwogCi0JciA9IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUodGksIGFyZ2MsIGFyZ3YsICZhcmdzX3VzZWQsICZzdG9yZSk7Ci0JaWYgKHIpIHsKLQkJdGktPmVycm9yID0gIkNvdWxkbid0IGNyZWF0ZSBleGNlcHRpb24gc3RvcmUiOwotCQlyID0gLUVJTlZBTDsKLQkJZ290byBiYWRfYXJnczsKLQl9Ci0KLQlhcmd2ICs9IGFyZ3NfdXNlZDsKLQlhcmdjIC09IGFyZ3NfdXNlZDsKLQogCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwogCWlmICghcykgewogCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGFsbG9jYXRlIHNuYXBzaG90IGNvbnRleHQgcHJpdmF0ZSAiCiAJCSAgICAic3RydWN0dXJlIjsKIAkJciA9IC1FTk9NRU07Ci0JCWdvdG8gYmFkX3NuYXA7CisJCWdvdG8gYmFkOwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBvcmlnaW5fcGF0aCwgMCwgdGktPmxlbiwgRk1PREVfUkVBRCwgJnMtPm9yaWdpbik7CisJY293X3BhdGggPSBhcmd2WzBdOworCWFyZ3YrKzsKKwlhcmdjLS07CisKKwlyID0gZG1fZ2V0X2RldmljZSh0aSwgY293X3BhdGgsIDAsIDAsCisJCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJnMtPmNvdyk7CisJaWYgKHIpIHsKKwkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgQ09XIGRldmljZSI7CisJCWdvdG8gYmFkX2NvdzsKKwl9CisKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZSh0aSwgYXJnYywgYXJndiwgcywgJmFyZ3NfdXNlZCwgJnMtPnN0b3JlKTsKKwlpZiAocikgeworCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3QgY3JlYXRlIGV4Y2VwdGlvbiBzdG9yZSI7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIGJhZF9zdG9yZTsKKwl9CisKKwlhcmd2ICs9IGFyZ3NfdXNlZDsKKwlhcmdjIC09IGFyZ3NfdXNlZDsKKworCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBvcmlnaW5fcGF0aCwgMCwgdGktPmxlbiwgb3JpZ2luX21vZGUsICZzLT5vcmlnaW4pOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgZ2V0IG9yaWdpbiBkZXZpY2UiOwogCQlnb3RvIGJhZF9vcmlnaW47CiAJfQogCi0Jcy0+c3RvcmUgPSBzdG9yZTsKKwlzLT50aSA9IHRpOwogCXMtPnZhbGlkID0gMTsKIAlzLT5hY3RpdmUgPSAwOworCXMtPnN1c3BlbmRlZCA9IDA7CiAJYXRvbWljX3NldCgmcy0+cGVuZGluZ19leGNlcHRpb25zX2NvdW50LCAwKTsKIAlpbml0X3J3c2VtKCZzLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcy0+bGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPnBlX2xvY2spOworCXMtPnN0YXRlX2JpdHMgPSAwOworCXMtPm1lcmdlX2ZhaWxlZCA9IDA7CisJcy0+Zmlyc3RfbWVyZ2luZ19jaHVuayA9IDA7CisJcy0+bnVtX21lcmdpbmdfY2h1bmtzID0gMDsKKwliaW9fbGlzdF9pbml0KCZzLT5iaW9zX3F1ZXVlZF9kdXJpbmdfbWVyZ2UpOwogCiAJLyogQWxsb2NhdGUgaGFzaCB0YWJsZSBmb3IgQ09XIGRhdGEgKi8KIAlpZiAoaW5pdF9oYXNoX3RhYmxlcyhzKSkgewpAQCAtNjU5LDM5ICsxMTUwLDU1IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcy0+dHJhY2tlZF9jaHVua19sb2NrKTsKIAotCS8qIE1ldGFkYXRhIG11c3Qgb25seSBiZSBsb2FkZWQgaW50byBvbmUgdGFibGUgYXQgb25jZSAqLworCWJpb19saXN0X2luaXQoJnMtPnF1ZXVlZF9iaW9zKTsKKwlJTklUX1dPUksoJnMtPnF1ZXVlZF9iaW9zX3dvcmssIGZsdXNoX3F1ZXVlZF9iaW9zKTsKKworCXRpLT5wcml2YXRlID0gczsKKwl0aS0+bnVtX2ZsdXNoX3JlcXVlc3RzID0gbnVtX2ZsdXNoX3JlcXVlc3RzOworCisJLyogQWRkIHNuYXBzaG90IHRvIHRoZSBsaXN0IG9mIHNuYXBzaG90cyBmb3IgdGhpcyBvcmlnaW4gKi8KKwkvKiBFeGNlcHRpb25zIGFyZW4ndCB0cmlnZ2VyZWQgdGlsbCBzbmFwc2hvdF9yZXN1bWUoKSBpcyBjYWxsZWQgKi8KKwlyID0gcmVnaXN0ZXJfc25hcHNob3Qocyk7CisJaWYgKHIgPT0gLUVOT01FTSkgeworCQl0aS0+ZXJyb3IgPSAiU25hcHNob3Qgb3JpZ2luIHN0cnVjdCBhbGxvY2F0aW9uIGZhaWxlZCI7CisJCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOworCX0gZWxzZSBpZiAociA8IDApIHsKKwkJLyogaW52YWxpZCBoYW5kb3ZlciwgcmVnaXN0ZXJfc25hcHNob3QgaGFzIHNldCB0aS0+ZXJyb3IgKi8KKwkJZ290byBiYWRfbG9hZF9hbmRfcmVnaXN0ZXI7CisJfQorCisJLyoKKwkgKiBNZXRhZGF0YSBtdXN0IG9ubHkgYmUgbG9hZGVkIGludG8gb25lIHRhYmxlIGF0IG9uY2UsIHNvIHNraXAgdGhpcworCSAqIGlmIG1ldGFkYXRhIHdpbGwgYmUgaGFuZGVkIG92ZXIgZHVyaW5nIHJlc3VtZS4KKwkgKiBDaHVuayBzaXplIHdpbGwgYmUgc2V0IGR1cmluZyB0aGUgaGFuZG92ZXIgLSBzZXQgaXQgdG8gemVybyB0bworCSAqIGVuc3VyZSBpdCdzIGlnbm9yZWQuCisJICovCisJaWYgKHIgPiAwKSB7CisJCXMtPnN0b3JlLT5jaHVua19zaXplID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCiAJciA9IHMtPnN0b3JlLT50eXBlLT5yZWFkX21ldGFkYXRhKHMtPnN0b3JlLCBkbV9hZGRfZXhjZXB0aW9uLAogCQkJCQkgICh2b2lkICopcyk7CiAJaWYgKHIgPCAwKSB7CiAJCXRpLT5lcnJvciA9ICJGYWlsZWQgdG8gcmVhZCBzbmFwc2hvdCBtZXRhZGF0YSI7Ci0JCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOworCQlnb3RvIGJhZF9yZWFkX21ldGFkYXRhOwogCX0gZWxzZSBpZiAociA+IDApIHsKIAkJcy0+dmFsaWQgPSAwOwogCQlETVdBUk4oIlNuYXBzaG90IGlzIG1hcmtlZCBpbnZhbGlkLiIpOwogCX0KIAotCWJpb19saXN0X2luaXQoJnMtPnF1ZXVlZF9iaW9zKTsKLQlJTklUX1dPUksoJnMtPnF1ZXVlZF9iaW9zX3dvcmssIGZsdXNoX3F1ZXVlZF9iaW9zKTsKLQogCWlmICghcy0+c3RvcmUtPmNodW5rX3NpemUpIHsKIAkJdGktPmVycm9yID0gIkNodW5rIHNpemUgbm90IHNldCI7Ci0JCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOworCQlnb3RvIGJhZF9yZWFkX21ldGFkYXRhOwogCX0KLQotCS8qIEFkZCBzbmFwc2hvdCB0byB0aGUgbGlzdCBvZiBzbmFwc2hvdHMgZm9yIHRoaXMgb3JpZ2luICovCi0JLyogRXhjZXB0aW9ucyBhcmVuJ3QgdHJpZ2dlcmVkIHRpbGwgc25hcHNob3RfcmVzdW1lKCkgaXMgY2FsbGVkICovCi0JaWYgKHJlZ2lzdGVyX3NuYXBzaG90KHMpKSB7Ci0JCXIgPSAtRUlOVkFMOwotCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IHJlZ2lzdGVyIHNuYXBzaG90IG9yaWdpbiI7Ci0JCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOwotCX0KLQotCXRpLT5wcml2YXRlID0gczsKIAl0aS0+c3BsaXRfaW8gPSBzLT5zdG9yZS0+Y2h1bmtfc2l6ZTsKLQl0aS0+bnVtX2ZsdXNoX3JlcXVlc3RzID0gMTsKIAogCXJldHVybiAwOwogCitiYWRfcmVhZF9tZXRhZGF0YToKKwl1bnJlZ2lzdGVyX3NuYXBzaG90KHMpOworCiBiYWRfbG9hZF9hbmRfcmVnaXN0ZXI6CiAJbWVtcG9vbF9kZXN0cm95KHMtPnRyYWNrZWRfY2h1bmtfcG9vbCk7CiAKQEAgLTcwMiwxOSArMTIwOSwyMiBAQAogCWRtX2tjb3B5ZF9jbGllbnRfZGVzdHJveShzLT5rY29weWRfY2xpZW50KTsKIAogYmFkX2tjb3B5ZDoKLQlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+cGVuZGluZywgcGVuZGluZ19jYWNoZSk7Ci0JZXhpdF9leGNlcHRpb25fdGFibGUoJnMtPmNvbXBsZXRlLCBleGNlcHRpb25fY2FjaGUpOworCWRtX2V4Y2VwdGlvbl90YWJsZV9leGl0KCZzLT5wZW5kaW5nLCBwZW5kaW5nX2NhY2hlKTsKKwlkbV9leGNlcHRpb25fdGFibGVfZXhpdCgmcy0+Y29tcGxldGUsIGV4Y2VwdGlvbl9jYWNoZSk7CiAKIGJhZF9oYXNoX3RhYmxlczoKIAlkbV9wdXRfZGV2aWNlKHRpLCBzLT5vcmlnaW4pOwogCiBiYWRfb3JpZ2luOgorCWRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KHMtPnN0b3JlKTsKKworYmFkX3N0b3JlOgorCWRtX3B1dF9kZXZpY2UodGksIHMtPmNvdyk7CisKK2JhZF9jb3c6CiAJa2ZyZWUocyk7CiAKLWJhZF9zbmFwOgotCWRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KHN0b3JlKTsKLQotYmFkX2FyZ3M6CitiYWQ6CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTcyMyw4ICsxMjMzLDM5IEBACiAJZG1fa2NvcHlkX2NsaWVudF9kZXN0cm95KHMtPmtjb3B5ZF9jbGllbnQpOwogCXMtPmtjb3B5ZF9jbGllbnQgPSBOVUxMOwogCi0JZXhpdF9leGNlcHRpb25fdGFibGUoJnMtPnBlbmRpbmcsIHBlbmRpbmdfY2FjaGUpOwotCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5jb21wbGV0ZSwgZXhjZXB0aW9uX2NhY2hlKTsKKwlkbV9leGNlcHRpb25fdGFibGVfZXhpdCgmcy0+cGVuZGluZywgcGVuZGluZ19jYWNoZSk7CisJZG1fZXhjZXB0aW9uX3RhYmxlX2V4aXQoJnMtPmNvbXBsZXRlLCBleGNlcHRpb25fY2FjaGUpOworfQorCitzdGF0aWMgdm9pZCBfX2hhbmRvdmVyX2V4Y2VwdGlvbnMoc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwX3NyYywKKwkJCQkgIHN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcF9kZXN0KQoreworCXVuaW9uIHsKKwkJc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSB0YWJsZV9zd2FwOworCQlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZV9zd2FwOworCX0gdTsKKworCS8qCisJICogU3dhcCBhbGwgc25hcHNob3QgY29udGV4dCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSB0d28gaW5zdGFuY2VzLgorCSAqLworCXUudGFibGVfc3dhcCA9IHNuYXBfZGVzdC0+Y29tcGxldGU7CisJc25hcF9kZXN0LT5jb21wbGV0ZSA9IHNuYXBfc3JjLT5jb21wbGV0ZTsKKwlzbmFwX3NyYy0+Y29tcGxldGUgPSB1LnRhYmxlX3N3YXA7CisKKwl1LnN0b3JlX3N3YXAgPSBzbmFwX2Rlc3QtPnN0b3JlOworCXNuYXBfZGVzdC0+c3RvcmUgPSBzbmFwX3NyYy0+c3RvcmU7CisJc25hcF9zcmMtPnN0b3JlID0gdS5zdG9yZV9zd2FwOworCisJc25hcF9kZXN0LT5zdG9yZS0+c25hcCA9IHNuYXBfZGVzdDsKKwlzbmFwX3NyYy0+c3RvcmUtPnNuYXAgPSBzbmFwX3NyYzsKKworCXNuYXBfZGVzdC0+dGktPnNwbGl0X2lvID0gc25hcF9kZXN0LT5zdG9yZS0+Y2h1bmtfc2l6ZTsKKwlzbmFwX2Rlc3QtPnZhbGlkID0gc25hcF9zcmMtPnZhbGlkOworCisJLyoKKwkgKiBTZXQgc291cmNlIGludmFsaWQgdG8gZW5zdXJlIGl0IHJlY2VpdmVzIG5vIGZ1cnRoZXIgSS9PLgorCSAqLworCXNuYXBfc3JjLT52YWxpZCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNuYXBzaG90X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKQEAgLTczMyw5ICsxMjc0LDI0IEBACiAJaW50IGk7CiAjZW5kaWYKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSB0aS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXBfc3JjID0gTlVMTCwgKnNuYXBfZGVzdCA9IE5VTEw7CiAKIAlmbHVzaF93b3JrcXVldWUoa3NuYXBkKTsKIAorCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CisJLyogQ2hlY2sgd2hldGhlciBleGNlcHRpb24gaGFuZG92ZXIgbXVzdCBiZSBjYW5jZWxsZWQgKi8KKwkodm9pZCkgX19maW5kX3NuYXBzaG90c19zaGFyaW5nX2NvdyhzLCAmc25hcF9zcmMsICZzbmFwX2Rlc3QsIE5VTEwpOworCWlmIChzbmFwX3NyYyAmJiBzbmFwX2Rlc3QgJiYgKHMgPT0gc25hcF9zcmMpKSB7CisJCWRvd25fd3JpdGUoJnNuYXBfZGVzdC0+bG9jayk7CisJCXNuYXBfZGVzdC0+dmFsaWQgPSAwOworCQl1cF93cml0ZSgmc25hcF9kZXN0LT5sb2NrKTsKKwkJRE1FUlIoIkNhbmNlbGxpbmcgc25hcHNob3QgaGFuZG92ZXIuIik7CisJfQorCXVwX3JlYWQoJl9vcmlnaW5zX2xvY2spOworCisJaWYgKGRtX3RhcmdldF9pc19zbmFwc2hvdF9tZXJnZSh0aSkpCisJCXN0b3BfbWVyZ2Uocyk7CisKIAkvKiBQcmV2ZW50IGZ1cnRoZXIgb3JpZ2luIHdyaXRlcyBmcm9tIHVzaW5nIHRoaXMgc25hcHNob3QuICovCiAJLyogQWZ0ZXIgdGhpcyByZXR1cm5zIHRoZXJlIGNhbiBiZSBubyBuZXcga2NvcHlkIGpvYnMuICovCiAJdW5yZWdpc3Rlcl9zbmFwc2hvdChzKTsKQEAgLTc2Myw2ICsxMzE5LDggQEAKIAogCWRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KHMtPnN0b3JlKTsKIAorCWRtX3B1dF9kZXZpY2UodGksIHMtPmNvdyk7CisKIAlrZnJlZShzKTsKIH0KIApAQCAtNzk1LDYgKzEzNTMsMjYgQEAKIAlmbHVzaF9iaW9zKHF1ZXVlZF9iaW9zKTsKIH0KIAorc3RhdGljIGludCBkb19vcmlnaW4oc3RydWN0IGRtX2RldiAqb3JpZ2luLCBzdHJ1Y3QgYmlvICpiaW8pOworCisvKgorICogRmx1c2ggYSBsaXN0IG9mIGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHJldHJ5X29yaWdpbl9iaW9zKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCBiaW8gKm47CisJaW50IHI7CisKKwl3aGlsZSAoYmlvKSB7CisJCW4gPSBiaW8tPmJpX25leHQ7CisJCWJpby0+YmlfbmV4dCA9IE5VTEw7CisJCXIgPSBkb19vcmlnaW4ocy0+b3JpZ2luLCBiaW8pOworCQlpZiAociA9PSBETV9NQVBJT19SRU1BUFBFRCkKKwkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisJCWJpbyA9IG47CisJfQorfQorCiAvKgogICogRXJyb3IgYSBsaXN0IG9mIGJ1ZmZlcnMuCiAgKi8KQEAgLTgyNSw0NSArMTQwMywxMiBAQAogCiAJcy0+dmFsaWQgPSAwOwogCi0JZG1fdGFibGVfZXZlbnQocy0+c3RvcmUtPnRpLT50YWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGUpCi17Ci0JYXRvbWljX2luYygmcGUtPnJlZl9jb3VudCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmlvICpwdXRfcGVuZGluZ19leGNlcHRpb24oc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlKQotewotCXN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwcmltYXJ5X3BlOwotCXN0cnVjdCBiaW8gKm9yaWdpbl9iaW9zID0gTlVMTDsKLQotCXByaW1hcnlfcGUgPSBwZS0+cHJpbWFyeV9wZTsKLQotCS8qCi0JICogSWYgdGhpcyBwZSBpcyBpbnZvbHZlZCBpbiBhIHdyaXRlIHRvIHRoZSBvcmlnaW4gYW5kCi0JICogaXQgaXMgdGhlIGxhc3Qgc2libGluZyB0byBjb21wbGV0ZSB0aGVuIHJlbGVhc2UKLQkgKiB0aGUgYmlvcyBmb3IgdGhlIG9yaWdpbmFsIHdyaXRlIHRvIHRoZSBvcmlnaW4uCi0JICovCi0JaWYgKHByaW1hcnlfcGUgJiYKLQkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcHJpbWFyeV9wZS0+cmVmX2NvdW50KSkgewotCQlvcmlnaW5fYmlvcyA9IGJpb19saXN0X2dldCgmcHJpbWFyeV9wZS0+b3JpZ2luX2Jpb3MpOwotCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHByaW1hcnlfcGUpOwotCX0KLQotCS8qCi0JICogRnJlZSB0aGUgcGUgaWYgaXQncyBub3QgbGlua2VkIHRvIGFuIG9yaWdpbiB3cml0ZSBvciBpZgotCSAqIGl0J3Mgbm90IGl0c2VsZiBhIHByaW1hcnkgcGUuCi0JICovCi0JaWYgKCFwcmltYXJ5X3BlIHx8IHByaW1hcnlfcGUgIT0gcGUpCi0JCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwotCi0JcmV0dXJuIG9yaWdpbl9iaW9zOworCWRtX3RhYmxlX2V2ZW50KHMtPnRpLT50YWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlbmRpbmdfY29tcGxldGUoc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlLCBpbnQgc3VjY2VzcykKIHsKLQlzdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24gKmU7CisJc3RydWN0IGRtX2V4Y2VwdGlvbiAqZTsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSBwZS0+c25hcDsKIAlzdHJ1Y3QgYmlvICpvcmlnaW5fYmlvcyA9IE5VTEw7CiAJc3RydWN0IGJpbyAqc25hcHNob3RfYmlvcyA9IE5VTEw7CkBAIC04NzcsNyArMTQyMiw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWUgPSBhbGxvY19leGNlcHRpb24oKTsKKwllID0gYWxsb2NfY29tcGxldGVkX2V4Y2VwdGlvbigpOwogCWlmICghZSkgewogCQlkb3duX3dyaXRlKCZzLT5sb2NrKTsKIAkJX19pbnZhbGlkYXRlX3NuYXBzaG90KHMsIC1FTk9NRU0pOwpAQCAtODg4LDI4ICsxNDMzLDI3IEBACiAKIAlkb3duX3dyaXRlKCZzLT5sb2NrKTsKIAlpZiAoIXMtPnZhbGlkKSB7Ci0JCWZyZWVfZXhjZXB0aW9uKGUpOworCQlmcmVlX2NvbXBsZXRlZF9leGNlcHRpb24oZSk7CiAJCWVycm9yID0gMTsKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBmb3IgY29uZmxpY3RpbmcgcmVhZHMuIFRoaXMgaXMgZXh0cmVtZWx5IGltcHJvYmFibGUsCi0JICogc28gbXNsZWVwKDEpIGlzIHN1ZmZpY2llbnQgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgd2FpdCBxdWV1ZS4KLQkgKi8KLQl3aGlsZSAoX19jaHVua19pc190cmFja2VkKHMsIHBlLT5lLm9sZF9jaHVuaykpCi0JCW1zbGVlcCgxKTsKKwkvKiBDaGVjayBmb3IgY29uZmxpY3RpbmcgcmVhZHMgKi8KKwlfX2NoZWNrX2Zvcl9jb25mbGljdGluZ19pbyhzLCBwZS0+ZS5vbGRfY2h1bmspOwogCiAJLyoKIAkgKiBBZGQgYSBwcm9wZXIgZXhjZXB0aW9uLCBhbmQgcmVtb3ZlIHRoZQogCSAqIGluLWZsaWdodCBleGNlcHRpb24gZnJvbSB0aGUgbGlzdC4KIAkgKi8KLQlpbnNlcnRfY29tcGxldGVkX2V4Y2VwdGlvbihzLCBlKTsKKwlkbV9pbnNlcnRfZXhjZXB0aW9uKCZzLT5jb21wbGV0ZSwgZSk7CiAKICBvdXQ6Ci0JcmVtb3ZlX2V4Y2VwdGlvbigmcGUtPmUpOworCWRtX3JlbW92ZV9leGNlcHRpb24oJnBlLT5lKTsKIAlzbmFwc2hvdF9iaW9zID0gYmlvX2xpc3RfZ2V0KCZwZS0+c25hcHNob3RfYmlvcyk7Ci0Jb3JpZ2luX2Jpb3MgPSBwdXRfcGVuZGluZ19leGNlcHRpb24ocGUpOworCW9yaWdpbl9iaW9zID0gYmlvX2xpc3RfZ2V0KCZwZS0+b3JpZ2luX2Jpb3MpOworCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOworCisJaW5jcmVtZW50X3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX2NvdW50KCk7CiAKIAl1cF93cml0ZSgmcy0+bG9jayk7CiAKQEAgLTkxOSw3ICsxNDYzLDcgQEAKIAllbHNlCiAJCWZsdXNoX2Jpb3Moc25hcHNob3RfYmlvcyk7CiAKLQlmbHVzaF9iaW9zKG9yaWdpbl9iaW9zKTsKKwlyZXRyeV9vcmlnaW5fYmlvcyhzLCBvcmlnaW5fYmlvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbW1pdF9jYWxsYmFjayh2b2lkICpjb250ZXh0LCBpbnQgc3VjY2VzcykKQEAgLTk2Myw3ICsxNTA3LDcgQEAKIAlzcmMuc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5vbGRfY2h1bmspOwogCXNyYy5jb3VudCA9IG1pbigoc2VjdG9yX3Qpcy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CiAKLQlkZXN0LmJkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OworCWRlc3QuYmRldiA9IHMtPmNvdy0+YmRldjsKIAlkZXN0LnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwgcGUtPmUubmV3X2NodW5rKTsKIAlkZXN0LmNvdW50ID0gc3JjLmNvdW50OwogCkBAIC05NzUsNyArMTUxOSw3IEBACiBzdGF0aWMgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKgogX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24oc3RydWN0IGRtX3NuYXBzaG90ICpzLCBjaHVua190IGNodW5rKQogewotCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSA9IGxvb2t1cF9leGNlcHRpb24oJnMtPnBlbmRpbmcsIGNodW5rKTsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplID0gZG1fbG9va3VwX2V4Y2VwdGlvbigmcy0+cGVuZGluZywgY2h1bmspOwogCiAJaWYgKCFlKQogCQlyZXR1cm4gTlVMTDsKQEAgLTEwMDYsOCArMTU1MCw2IEBACiAJcGUtPmUub2xkX2NodW5rID0gY2h1bms7CiAJYmlvX2xpc3RfaW5pdCgmcGUtPm9yaWdpbl9iaW9zKTsKIAliaW9fbGlzdF9pbml0KCZwZS0+c25hcHNob3RfYmlvcyk7Ci0JcGUtPnByaW1hcnlfcGUgPSBOVUxMOwotCWF0b21pY19zZXQoJnBlLT5yZWZfY291bnQsIDApOwogCXBlLT5zdGFydGVkID0gMDsKIAogCWlmIChzLT5zdG9yZS0+dHlwZS0+cHJlcGFyZV9leGNlcHRpb24ocy0+c3RvcmUsICZwZS0+ZSkpIHsKQEAgLTEwMTUsMTYgKzE1NTcsMTUgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZ2V0X3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKLQlpbnNlcnRfZXhjZXB0aW9uKCZzLT5wZW5kaW5nLCAmcGUtPmUpOworCWRtX2luc2VydF9leGNlcHRpb24oJnMtPnBlbmRpbmcsICZwZS0+ZSk7CiAKIAlyZXR1cm4gcGU7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbWFwX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSwKK3N0YXRpYyB2b2lkIHJlbWFwX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIHN0cnVjdCBkbV9leGNlcHRpb24gKmUsCiAJCQkgICAgc3RydWN0IGJpbyAqYmlvLCBjaHVua190IGNodW5rKQogewotCWJpby0+YmlfYmRldiA9IHMtPnN0b3JlLT5jb3ctPmJkZXY7CisJYmlvLT5iaV9iZGV2ID0gcy0+Y293LT5iZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLAogCQkJCQkgZG1fY2h1bmtfbnVtYmVyKGUtPm5ld19jaHVuaykgKwogCQkJCQkgKGNodW5rIC0gZS0+b2xkX2NodW5rKSkgKwpAQCAtMTAzNSwxNCArMTU3NiwxNCBAQAogc3RhdGljIGludCBzbmFwc2hvdF9tYXAoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKIAkJCXVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCkKIHsKLQlzdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24gKmU7CisJc3RydWN0IGRtX2V4Y2VwdGlvbiAqZTsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSB0aS0+cHJpdmF0ZTsKIAlpbnQgciA9IERNX01BUElPX1JFTUFQUEVEOwogCWNodW5rX3QgY2h1bms7CiAJc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlID0gTlVMTDsKIAogCWlmICh1bmxpa2VseShiaW9fZW1wdHlfYmFycmllcihiaW8pKSkgewotCQliaW8tPmJpX2JkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OworCQliaW8tPmJpX2JkZXYgPSBzLT5jb3ctPmJkZXY7CiAJCXJldHVybiBETV9NQVBJT19SRU1BUFBFRDsKIAl9CiAKQEAgLTEwNjMsNyArMTYwNCw3IEBACiAJfQogCiAJLyogSWYgdGhlIGJsb2NrIGlzIGFscmVhZHkgcmVtYXBwZWQgLSB1c2UgdGhhdCwgZWxzZSByZW1hcCBpdCAqLwotCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzLT5jb21wbGV0ZSwgY2h1bmspOworCWUgPSBkbV9sb29rdXBfZXhjZXB0aW9uKCZzLT5jb21wbGV0ZSwgY2h1bmspOwogCWlmIChlKSB7CiAJCXJlbWFwX2V4Y2VwdGlvbihzLCBlLCBiaW8sIGNodW5rKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTA4Nyw3ICsxNjI4LDcgQEAKIAkJCQlnb3RvIG91dF91bmxvY2s7CiAJCQl9CiAKLQkJCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzLT5jb21wbGV0ZSwgY2h1bmspOworCQkJZSA9IGRtX2xvb2t1cF9leGNlcHRpb24oJnMtPmNvbXBsZXRlLCBjaHVuayk7CiAJCQlpZiAoZSkgewogCQkJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwogCQkJCXJlbWFwX2V4Y2VwdGlvbihzLCBlLCBiaW8sIGNodW5rKTsKQEAgLTExMjUsNiArMTY2Niw3OCBAQAogCXJldHVybiByOwogfQogCisvKgorICogQSBzbmFwc2hvdC1tZXJnZSB0YXJnZXQgYmVoYXZlcyBsaWtlIGEgY29tYmluYXRpb24gb2YgYSBzbmFwc2hvdAorICogdGFyZ2V0IGFuZCBhIHNuYXBzaG90LW9yaWdpbiB0YXJnZXQuICBJdCBvbmx5IGdlbmVyYXRlcyBuZXcKKyAqIGV4Y2VwdGlvbnMgaW4gb3RoZXIgc25hcHNob3RzIGFuZCBub3QgaW4gdGhlIG9uZSB0aGF0IGlzIGJlaW5nCisgKiBtZXJnZWQuCisgKgorICogRm9yIGVhY2ggY2h1bmssIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGV4Y2VwdGlvbiwgaXQgaXMgdXNlZCB0bworICogcmVkaXJlY3QgSS9PIHRvIHRoZSBjb3cgZGV2aWNlLiAgT3RoZXJ3aXNlIEkvTyBpcyBzZW50IHRvIHRoZSBvcmlnaW4sCisgKiB3aGljaCBpbiB0dXJuIG1pZ2h0IGdlbmVyYXRlIGV4Y2VwdGlvbnMgaW4gb3RoZXIgc25hcHNob3RzLgorICogSWYgbWVyZ2luZyBpcyBjdXJyZW50bHkgdGFraW5nIHBsYWNlIG9uIHRoZSBjaHVuayBpbiBxdWVzdGlvbiwgdGhlCisgKiBJL08gaXMgZGVmZXJyZWQgYnkgYWRkaW5nIGl0IHRvIHMtPmJpb3NfcXVldWVkX2R1cmluZ19tZXJnZS4KKyAqLworc3RhdGljIGludCBzbmFwc2hvdF9tZXJnZV9tYXAoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKKwkJCSAgICAgIHVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCkKK3sKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplOworCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOworCWludCByID0gRE1fTUFQSU9fUkVNQVBQRUQ7CisJY2h1bmtfdCBjaHVuazsKKworCWlmICh1bmxpa2VseShiaW9fZW1wdHlfYmFycmllcihiaW8pKSkgeworCQlpZiAoIW1hcF9jb250ZXh0LT5mbHVzaF9yZXF1ZXN0KQorCQkJYmlvLT5iaV9iZGV2ID0gcy0+b3JpZ2luLT5iZGV2OworCQllbHNlCisJCQliaW8tPmJpX2JkZXYgPSBzLT5jb3ctPmJkZXY7CisJCW1hcF9jb250ZXh0LT5wdHIgPSBOVUxMOworCQlyZXR1cm4gRE1fTUFQSU9fUkVNQVBQRUQ7CisJfQorCisJY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsocy0+c3RvcmUsIGJpby0+Ymlfc2VjdG9yKTsKKworCWRvd25fd3JpdGUoJnMtPmxvY2spOworCisJLyogRnVsbCBtZXJnaW5nIHNuYXBzaG90cyBhcmUgcmVkaXJlY3RlZCB0byB0aGUgb3JpZ2luICovCisJaWYgKCFzLT52YWxpZCkKKwkJZ290byByZWRpcmVjdF90b19vcmlnaW47CisKKwkvKiBJZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSByZW1hcHBlZCAtIHVzZSB0aGF0ICovCisJZSA9IGRtX2xvb2t1cF9leGNlcHRpb24oJnMtPmNvbXBsZXRlLCBjaHVuayk7CisJaWYgKGUpIHsKKwkJLyogUXVldWUgd3JpdGVzIG92ZXJsYXBwaW5nIHdpdGggY2h1bmtzIGJlaW5nIG1lcmdlZCAqLworCQlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUgJiYKKwkJICAgIGNodW5rID49IHMtPmZpcnN0X21lcmdpbmdfY2h1bmsgJiYKKwkJICAgIGNodW5rIDwgKHMtPmZpcnN0X21lcmdpbmdfY2h1bmsgKworCQkJICAgICBzLT5udW1fbWVyZ2luZ19jaHVua3MpKSB7CisJCQliaW8tPmJpX2JkZXYgPSBzLT5vcmlnaW4tPmJkZXY7CisJCQliaW9fbGlzdF9hZGQoJnMtPmJpb3NfcXVldWVkX2R1cmluZ19tZXJnZSwgYmlvKTsKKwkJCXIgPSBETV9NQVBJT19TVUJNSVRURUQ7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQlyZW1hcF9leGNlcHRpb24ocywgZSwgYmlvLCBjaHVuayk7CisKKwkJaWYgKGJpb19ydyhiaW8pID09IFdSSVRFKQorCQkJbWFwX2NvbnRleHQtPnB0ciA9IHRyYWNrX2NodW5rKHMsIGNodW5rKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworcmVkaXJlY3RfdG9fb3JpZ2luOgorCWJpby0+YmlfYmRldiA9IHMtPm9yaWdpbi0+YmRldjsKKworCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkgeworCQl1cF93cml0ZSgmcy0+bG9jayk7CisJCXJldHVybiBkb19vcmlnaW4ocy0+b3JpZ2luLCBiaW8pOworCX0KKworb3V0X3VubG9jazoKKwl1cF93cml0ZSgmcy0+bG9jayk7CisKKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIGludCBzbmFwc2hvdF9lbmRfaW8oc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKIAkJCSAgIGludCBlcnJvciwgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KQogewpAQCAtMTEzNyw0MCArMTc1MCwxMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc25hcHNob3RfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKQorc3RhdGljIHZvaWQgc25hcHNob3RfbWVyZ2VfcHJlc3VzcGVuZChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKK3sKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSB0aS0+cHJpdmF0ZTsKKworCXN0b3BfbWVyZ2Uocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNuYXBzaG90X3Bvc3RzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQogewogCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOwogCiAJZG93bl93cml0ZSgmcy0+bG9jayk7Ci0Jcy0+YWN0aXZlID0gMTsKKwlzLT5zdXNwZW5kZWQgPSAxOwogCXVwX3dyaXRlKCZzLT5sb2NrKTsKIH0KIAorc3RhdGljIGludCBzbmFwc2hvdF9wcmVyZXN1bWUoc3RydWN0IGRtX3RhcmdldCAqdGkpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOworCXN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcF9zcmMgPSBOVUxMLCAqc25hcF9kZXN0ID0gTlVMTDsKKworCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CisJKHZvaWQpIF9fZmluZF9zbmFwc2hvdHNfc2hhcmluZ19jb3cocywgJnNuYXBfc3JjLCAmc25hcF9kZXN0LCBOVUxMKTsKKwlpZiAoc25hcF9zcmMgJiYgc25hcF9kZXN0KSB7CisJCWRvd25fcmVhZCgmc25hcF9zcmMtPmxvY2spOworCQlpZiAocyA9PSBzbmFwX3NyYykgeworCQkJRE1FUlIoIlVuYWJsZSB0byByZXN1bWUgc25hcHNob3Qgc291cmNlIHVudGlsICIKKwkJCSAgICAgICJoYW5kb3ZlciBjb21wbGV0ZXMuIik7CisJCQlyID0gLUVJTlZBTDsKKwkJfSBlbHNlIGlmICghc25hcF9zcmMtPnN1c3BlbmRlZCkgeworCQkJRE1FUlIoIlVuYWJsZSB0byBwZXJmb3JtIHNuYXBzaG90IGhhbmRvdmVyIHVudGlsICIKKwkJCSAgICAgICJzb3VyY2UgaXMgc3VzcGVuZGVkLiIpOworCQkJciA9IC1FSU5WQUw7CisJCX0KKwkJdXBfcmVhZCgmc25hcF9zcmMtPmxvY2spOworCX0KKwl1cF9yZWFkKCZfb3JpZ2luc19sb2NrKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBzbmFwc2hvdF9yZXN1bWUoc3RydWN0IGRtX3RhcmdldCAqdGkpCit7CisJc3RydWN0IGRtX3NuYXBzaG90ICpzID0gdGktPnByaXZhdGU7CisJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwX3NyYyA9IE5VTEwsICpzbmFwX2Rlc3QgPSBOVUxMOworCisJZG93bl9yZWFkKCZfb3JpZ2luc19sb2NrKTsKKwkodm9pZCkgX19maW5kX3NuYXBzaG90c19zaGFyaW5nX2NvdyhzLCAmc25hcF9zcmMsICZzbmFwX2Rlc3QsIE5VTEwpOworCWlmIChzbmFwX3NyYyAmJiBzbmFwX2Rlc3QpIHsKKwkJZG93bl93cml0ZSgmc25hcF9zcmMtPmxvY2spOworCQlkb3duX3dyaXRlX25lc3RlZCgmc25hcF9kZXN0LT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCV9faGFuZG92ZXJfZXhjZXB0aW9ucyhzbmFwX3NyYywgc25hcF9kZXN0KTsKKwkJdXBfd3JpdGUoJnNuYXBfZGVzdC0+bG9jayk7CisJCXVwX3dyaXRlKCZzbmFwX3NyYy0+bG9jayk7CisJfQorCXVwX3JlYWQoJl9vcmlnaW5zX2xvY2spOworCisJLyogTm93IHdlIGhhdmUgY29ycmVjdCBjaHVuayBzaXplLCByZXJlZ2lzdGVyICovCisJcmVyZWdpc3Rlcl9zbmFwc2hvdChzKTsKKworCWRvd25fd3JpdGUoJnMtPmxvY2spOworCXMtPmFjdGl2ZSA9IDE7CisJcy0+c3VzcGVuZGVkID0gMDsKKwl1cF93cml0ZSgmcy0+bG9jayk7Cit9CisKK3N0YXRpYyBzZWN0b3JfdCBnZXRfb3JpZ2luX21pbmltdW1fY2h1bmtzaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJc2VjdG9yX3QgbWluX2NodW5rc2l6ZTsKKworCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CisJbWluX2NodW5rc2l6ZSA9IF9fbWluaW11bV9jaHVua19zaXplKF9fbG9va3VwX29yaWdpbihiZGV2KSk7CisJdXBfcmVhZCgmX29yaWdpbnNfbG9jayk7CisKKwlyZXR1cm4gbWluX2NodW5rc2l6ZTsKK30KKworc3RhdGljIHZvaWQgc25hcHNob3RfbWVyZ2VfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHRpLT5wcml2YXRlOworCisJLyoKKwkgKiBIYW5kb3ZlciBleGNlcHRpb25zIGZyb20gZXhpc3Rpbmcgc25hcHNob3QuCisJICovCisJc25hcHNob3RfcmVzdW1lKHRpKTsKKworCS8qCisJICogc25hcHNob3QtbWVyZ2UgYWN0cyBhcyBhbiBvcmlnaW4sIHNvIHNldCB0aS0+c3BsaXRfaW8KKwkgKi8KKwl0aS0+c3BsaXRfaW8gPSBnZXRfb3JpZ2luX21pbmltdW1fY2h1bmtzaXplKHMtPm9yaWdpbi0+YmRldik7CisKKwlzdGFydF9tZXJnZShzKTsKK30KKwogc3RhdGljIGludCBzbmFwc2hvdF9zdGF0dXMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0YXR1c190eXBlX3QgdHlwZSwKIAkJCSAgIGNoYXIgKnJlc3VsdCwgdW5zaWduZWQgaW50IG1heGxlbikKIHsKIAl1bnNpZ25lZCBzeiA9IDA7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwID0gdGktPnByaXZhdGU7CiAKLQlkb3duX3dyaXRlKCZzbmFwLT5sb2NrKTsKLQogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgorCisJCWRvd25fd3JpdGUoJnNuYXAtPmxvY2spOworCiAJCWlmICghc25hcC0+dmFsaWQpCiAJCQlETUVNSVQoIkludmFsaWQiKTsKKwkJZWxzZSBpZiAoc25hcC0+bWVyZ2VfZmFpbGVkKQorCQkJRE1FTUlUKCJNZXJnZSBmYWlsZWQiKTsKIAkJZWxzZSB7Ci0JCQlpZiAoc25hcC0+c3RvcmUtPnR5cGUtPmZyYWN0aW9uX2Z1bGwpIHsKLQkJCQlzZWN0b3JfdCBudW1lcmF0b3IsIGRlbm9taW5hdG9yOwotCQkJCXNuYXAtPnN0b3JlLT50eXBlLT5mcmFjdGlvbl9mdWxsKHNuYXAtPnN0b3JlLAotCQkJCQkJCQkgJm51bWVyYXRvciwKLQkJCQkJCQkJICZkZW5vbWluYXRvcik7Ci0JCQkJRE1FTUlUKCIlbGx1LyVsbHUiLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bWVyYXRvciwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZW5vbWluYXRvcik7CisJCQlpZiAoc25hcC0+c3RvcmUtPnR5cGUtPnVzYWdlKSB7CisJCQkJc2VjdG9yX3QgdG90YWxfc2VjdG9ycywgc2VjdG9yc19hbGxvY2F0ZWQsCisJCQkJCSBtZXRhZGF0YV9zZWN0b3JzOworCQkJCXNuYXAtPnN0b3JlLT50eXBlLT51c2FnZShzbmFwLT5zdG9yZSwKKwkJCQkJCQkgJnRvdGFsX3NlY3RvcnMsCisJCQkJCQkJICZzZWN0b3JzX2FsbG9jYXRlZCwKKwkJCQkJCQkgJm1ldGFkYXRhX3NlY3RvcnMpOworCQkJCURNRU1JVCgiJWxsdS8lbGx1ICVsbHUiLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNlY3RvcnNfYWxsb2NhdGVkLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsX3NlY3RvcnMsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWV0YWRhdGFfc2VjdG9ycyk7CiAJCQl9CiAJCQllbHNlCiAJCQkJRE1FTUlUKCJVbmtub3duIik7CiAJCX0KKworCQl1cF93cml0ZSgmc25hcC0+bG9jayk7CisKIAkJYnJlYWs7CiAKIAljYXNlIFNUQVRVU1RZUEVfVEFCTEU6CkBAIC0xMTc5LDE0ICsxODg3LDEyIEBACiAJCSAqIHRvIG1ha2UgcHJpdmF0ZSBjb3BpZXMgaWYgdGhlIG91dHB1dCBpcyB0bwogCQkgKiBtYWtlIHNlbnNlLgogCQkgKi8KLQkJRE1FTUlUKCIlcyIsIHNuYXAtPm9yaWdpbi0+bmFtZSk7CisJCURNRU1JVCgiJXMgJXMiLCBzbmFwLT5vcmlnaW4tPm5hbWUsIHNuYXAtPmNvdy0+bmFtZSk7CiAJCXNuYXAtPnN0b3JlLT50eXBlLT5zdGF0dXMoc25hcC0+c3RvcmUsIHR5cGUsIHJlc3VsdCArIHN6LAogCQkJCQkgIG1heGxlbiAtIHN6KTsKIAkJYnJlYWs7CiAJfQogCi0JdXBfd3JpdGUoJnNuYXAtPmxvY2spOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMDIsMTcgKzE5MDgsMzYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE9yaWdpbiBtZXRob2RzCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IF9fb3JpZ2luX3dyaXRlKHN0cnVjdCBsaXN0X2hlYWQgKnNuYXBzaG90cywgc3RydWN0IGJpbyAqYmlvKQorCisvKgorICogSWYgbm8gZXhjZXB0aW9ucyBuZWVkIGNyZWF0aW5nLCBETV9NQVBJT19SRU1BUFBFRCBpcyByZXR1cm5lZCBhbmQgYW55CisgKiBzdXBwbGllZCBiaW8gd2FzIGlnbm9yZWQuICBUaGUgY2FsbGVyIG1heSBzdWJtaXQgaXQgaW1tZWRpYXRlbHkuCisgKiAoTm8gcmVtYXBwaW5nIGFjdHVhbGx5IG9jY3VycyBhcyB0aGUgb3JpZ2luIGlzIGFsd2F5cyBhIGRpcmVjdCBsaW5lYXIKKyAqIG1hcC4pCisgKgorICogSWYgZnVydGhlciBleGNlcHRpb25zIGFyZSByZXF1aXJlZCwgRE1fTUFQSU9fU1VCTUlUVEVEIGlzIHJldHVybmVkCisgKiBhbmQgYW55IHN1cHBsaWVkIGJpbyBpcyBhZGRlZCB0byBhIGxpc3QgdG8gYmUgc3VibWl0dGVkIG9uY2UgYWxsCisgKiB0aGUgbmVjZXNzYXJ5IGV4Y2VwdGlvbnMgZXhpc3QuCisgKi8KK3N0YXRpYyBpbnQgX19vcmlnaW5fd3JpdGUoc3RydWN0IGxpc3RfaGVhZCAqc25hcHNob3RzLCBzZWN0b3JfdCBzZWN0b3IsCisJCQkgIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlpbnQgciA9IERNX01BUElPX1JFTUFQUEVELCBmaXJzdCA9IDA7CisJaW50IHIgPSBETV9NQVBJT19SRU1BUFBFRDsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7Ci0Jc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplOwotCXN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZSwgKm5leHRfcGUsICpwcmltYXJ5X3BlID0gTlVMTDsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uICplOworCXN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZTsKKwlzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGVfdG9fc3RhcnRfbm93ID0gTlVMTDsKKwlzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGVfdG9fc3RhcnRfbGFzdCA9IE5VTEw7CiAJY2h1bmtfdCBjaHVuazsKLQlMSVNUX0hFQUQocGVfcXVldWUpOwogCiAJLyogRG8gYWxsIHRoZSBzbmFwc2hvdHMgb24gdGhpcyBvcmlnaW4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5IChzbmFwLCBzbmFwc2hvdHMsIGxpc3QpIHsKKwkJLyoKKwkJICogRG9uJ3QgbWFrZSBuZXcgZXhjZXB0aW9ucyBpbiBhIG1lcmdpbmcgc25hcHNob3QKKwkJICogYmVjYXVzZSBpdCBoYXMgZWZmZWN0aXZlbHkgYmVlbiBkZWxldGVkCisJCSAqLworCQlpZiAoZG1fdGFyZ2V0X2lzX3NuYXBzaG90X21lcmdlKHNuYXAtPnRpKSkKKwkJCWNvbnRpbnVlOwogCiAJCWRvd25fd3JpdGUoJnNuYXAtPmxvY2spOwogCkBAIC0xMjIxLDI0ICsxOTQ2LDIxIEBACiAJCQlnb3RvIG5leHRfc25hcHNob3Q7CiAKIAkJLyogTm90aGluZyB0byBkbyBpZiB3cml0aW5nIGJleW9uZCBlbmQgb2Ygc25hcHNob3QgKi8KLQkJaWYgKGJpby0+Ymlfc2VjdG9yID49IGRtX3RhYmxlX2dldF9zaXplKHNuYXAtPnN0b3JlLT50aS0+dGFibGUpKQorCQlpZiAoc2VjdG9yID49IGRtX3RhYmxlX2dldF9zaXplKHNuYXAtPnRpLT50YWJsZSkpCiAJCQlnb3RvIG5leHRfc25hcHNob3Q7CiAKIAkJLyoKIAkJICogUmVtZW1iZXIsIGRpZmZlcmVudCBzbmFwc2hvdHMgY2FuIGhhdmUKIAkJICogZGlmZmVyZW50IGNodW5rIHNpemVzLgogCQkgKi8KLQkJY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc25hcC0+c3RvcmUsIGJpby0+Ymlfc2VjdG9yKTsKKwkJY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc25hcC0+c3RvcmUsIHNlY3Rvcik7CiAKIAkJLyoKIAkJICogQ2hlY2sgZXhjZXB0aW9uIHRhYmxlIHRvIHNlZSBpZiBibG9jawogCQkgKiBpcyBhbHJlYWR5IHJlbWFwcGVkIGluIHRoaXMgc25hcHNob3QKIAkJICogYW5kIHRyaWdnZXIgYW4gZXhjZXB0aW9uIGlmIG5vdC4KLQkJICoKLQkJICogcmVmX2NvdW50IGlzIGluaXRpYWxpc2VkIHRvIDEgc28gcGVuZGluZ19jb21wbGV0ZSgpCi0JCSAqIHdvbid0IGRlc3Ryb3kgdGhlIHByaW1hcnlfcGUgd2hpbGUgd2UncmUgaW5zaWRlIHRoaXMgbG9vcC4KIAkJICovCi0JCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzbmFwLT5jb21wbGV0ZSwgY2h1bmspOworCQllID0gZG1fbG9va3VwX2V4Y2VwdGlvbigmc25hcC0+Y29tcGxldGUsIGNodW5rKTsKIAkJaWYgKGUpCiAJCQlnb3RvIG5leHRfc25hcHNob3Q7CiAKQEAgLTEyNTMsNyArMTk3NSw3IEBACiAJCQkJZ290byBuZXh0X3NuYXBzaG90OwogCQkJfQogCi0JCQllID0gbG9va3VwX2V4Y2VwdGlvbigmc25hcC0+Y29tcGxldGUsIGNodW5rKTsKKwkJCWUgPSBkbV9sb29rdXBfZXhjZXB0aW9uKCZzbmFwLT5jb21wbGV0ZSwgY2h1bmspOwogCQkJaWYgKGUpIHsKIAkJCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKIAkJCQlnb3RvIG5leHRfc25hcHNob3Q7CkBAIC0xMjY2LDU5ICsxOTg4LDQzIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoIXByaW1hcnlfcGUpIHsKLQkJCS8qCi0JCQkgKiBFaXRoZXIgZXZlcnkgcGUgaGVyZSBoYXMgc2FtZQotCQkJICogcHJpbWFyeV9wZSBvciBub25lIGhhcyBvbmUgeWV0LgotCQkJICovCi0JCQlpZiAocGUtPnByaW1hcnlfcGUpCi0JCQkJcHJpbWFyeV9wZSA9IHBlLT5wcmltYXJ5X3BlOwotCQkJZWxzZSB7Ci0JCQkJcHJpbWFyeV9wZSA9IHBlOwotCQkJCWZpcnN0ID0gMTsKKwkJciA9IERNX01BUElPX1NVQk1JVFRFRDsKKworCQkvKgorCQkgKiBJZiBhbiBvcmlnaW4gYmlvIHdhcyBzdXBwbGllZCwgcXVldWUgaXQgdG8gd2FpdCBmb3IgdGhlCisJCSAqIGNvbXBsZXRpb24gb2YgdGhpcyBleGNlcHRpb24sIGFuZCBzdGFydCB0aGlzIG9uZSBsYXN0LAorCQkgKiBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KKwkJICovCisJCWlmIChiaW8pIHsKKwkJCWJpb19saXN0X2FkZCgmcGUtPm9yaWdpbl9iaW9zLCBiaW8pOworCQkJYmlvID0gTlVMTDsKKworCQkJaWYgKCFwZS0+c3RhcnRlZCkgeworCQkJCXBlLT5zdGFydGVkID0gMTsKKwkJCQlwZV90b19zdGFydF9sYXN0ID0gcGU7CiAJCQl9Ci0KLQkJCWJpb19saXN0X2FkZCgmcHJpbWFyeV9wZS0+b3JpZ2luX2Jpb3MsIGJpbyk7Ci0KLQkJCXIgPSBETV9NQVBJT19TVUJNSVRURUQ7Ci0JCX0KLQotCQlpZiAoIXBlLT5wcmltYXJ5X3BlKSB7Ci0JCQlwZS0+cHJpbWFyeV9wZSA9IHByaW1hcnlfcGU7Ci0JCQlnZXRfcGVuZGluZ19leGNlcHRpb24ocHJpbWFyeV9wZSk7CiAJCX0KIAogCQlpZiAoIXBlLT5zdGFydGVkKSB7CiAJCQlwZS0+c3RhcnRlZCA9IDE7Ci0JCQlsaXN0X2FkZF90YWlsKCZwZS0+bGlzdCwgJnBlX3F1ZXVlKTsKKwkJCXBlX3RvX3N0YXJ0X25vdyA9IHBlOwogCQl9CiAKICBuZXh0X3NuYXBzaG90OgogCQl1cF93cml0ZSgmc25hcC0+bG9jayk7Ci0JfQogCi0JaWYgKCFwcmltYXJ5X3BlKQotCQlyZXR1cm4gcjsKLQotCS8qCi0JICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSdyZSBwcm9jZXNzaW5nIHRoaXMgY2h1bmsgYW5kCi0JICogcmVmX2NvdW50IGlzIG5vdyAxIGl0IG1lYW5zIGFsbCB0aGUgcGVuZGluZyBleGNlcHRpb25zCi0JICogZ290IGNvbXBsZXRlZCB3aGlsZSB3ZSB3ZXJlIGluIHRoZSBsb29wIGFib3ZlLCBzbyBpdCBmYWxscyB0bwotCSAqIHVzIGhlcmUgdG8gcmVtb3ZlIHRoZSBwcmltYXJ5X3BlIGFuZCBzdWJtaXQgYW55IG9yaWdpbl9iaW9zLgotCSAqLwotCi0JaWYgKGZpcnN0ICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJnByaW1hcnlfcGUtPnJlZl9jb3VudCkpIHsKLQkJZmx1c2hfYmlvcyhiaW9fbGlzdF9nZXQoJnByaW1hcnlfcGUtPm9yaWdpbl9iaW9zKSk7Ci0JCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocHJpbWFyeV9wZSk7Ci0JCS8qIElmIHdlIGdvdCBoZXJlLCBwZV9xdWV1ZSBpcyBuZWNlc3NhcmlseSBlbXB0eS4gKi8KLQkJcmV0dXJuIHI7CisJCWlmIChwZV90b19zdGFydF9ub3cpIHsKKwkJCXN0YXJ0X2NvcHkocGVfdG9fc3RhcnRfbm93KTsKKwkJCXBlX3RvX3N0YXJ0X25vdyA9IE5VTEw7CisJCX0KIAl9CiAKIAkvKgotCSAqIE5vdyB0aGF0IHdlIGhhdmUgYSBjb21wbGV0ZSBwZSBsaXN0IHdlIGNhbiBzdGFydCB0aGUgY29weWluZy4KKwkgKiBTdWJtaXQgdGhlIGV4Y2VwdGlvbiBhZ2FpbnN0IHdoaWNoIHRoZSBiaW8gaXMgcXVldWVkIGxhc3QsCisJICogdG8gZ2l2ZSB0aGUgb3RoZXIgZXhjZXB0aW9ucyBhIGhlYWQgc3RhcnQuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlLCBuZXh0X3BlLCAmcGVfcXVldWUsIGxpc3QpCi0JCXN0YXJ0X2NvcHkocGUpOworCWlmIChwZV90b19zdGFydF9sYXN0KQorCQlzdGFydF9jb3B5KHBlX3RvX3N0YXJ0X2xhc3QpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMzM0LDEzICsyMDQwLDQ4IEBACiAJZG93bl9yZWFkKCZfb3JpZ2luc19sb2NrKTsKIAlvID0gX19sb29rdXBfb3JpZ2luKG9yaWdpbi0+YmRldik7CiAJaWYgKG8pCi0JCXIgPSBfX29yaWdpbl93cml0ZSgmby0+c25hcHNob3RzLCBiaW8pOworCQlyID0gX19vcmlnaW5fd3JpdGUoJm8tPnNuYXBzaG90cywgYmlvLT5iaV9zZWN0b3IsIGJpbyk7CiAJdXBfcmVhZCgmX29yaWdpbnNfbG9jayk7CiAKIAlyZXR1cm4gcjsKIH0KIAogLyoKKyAqIFRyaWdnZXIgZXhjZXB0aW9ucyBpbiBhbGwgbm9uLW1lcmdpbmcgc25hcHNob3RzLgorICoKKyAqIFRoZSBjaHVuayBzaXplIG9mIHRoZSBtZXJnaW5nIHNuYXBzaG90IG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgY2h1bmsKKyAqIHNpemUgb2Ygc29tZSBvdGhlciBzbmFwc2hvdCBzbyB3ZSBtYXkgbmVlZCB0byByZWFsbG9jYXRlIG11bHRpcGxlCisgKiBjaHVua3MgaW4gb3RoZXIgc25hcHNob3RzLgorICoKKyAqIFdlIHNjYW4gYWxsIHRoZSBvdmVybGFwcGluZyBleGNlcHRpb25zIGluIHRoZSBvdGhlciBzbmFwc2hvdHMuCisgKiBSZXR1cm5zIDEgaWYgYW55dGhpbmcgd2FzIHJlYWxsb2NhdGVkIGFuZCBtdXN0IGJlIHdhaXRlZCBmb3IsCisgKiBvdGhlcndpc2UgcmV0dXJucyAwLgorICoKKyAqIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIG1lcmdpbmdfc25hcCdzIGNodW5rX3NpemUuCisgKi8KK3N0YXRpYyBpbnQgb3JpZ2luX3dyaXRlX2V4dGVudChzdHJ1Y3QgZG1fc25hcHNob3QgKm1lcmdpbmdfc25hcCwKKwkJCSAgICAgICBzZWN0b3JfdCBzZWN0b3IsIHVuc2lnbmVkIHNpemUpCit7CisJaW50IG11c3Rfd2FpdCA9IDA7CisJc2VjdG9yX3QgbjsKKwlzdHJ1Y3Qgb3JpZ2luICpvOworCisJLyoKKwkgKiBUaGUgb3JpZ2luJ3MgX19taW5pbXVtX2NodW5rX3NpemUoKSBnb3Qgc3RvcmVkIGluIHNwbGl0X2lvCisJICogYnkgc25hcHNob3RfbWVyZ2VfcmVzdW1lKCkuCisJICovCisJZG93bl9yZWFkKCZfb3JpZ2luc19sb2NrKTsKKwlvID0gX19sb29rdXBfb3JpZ2luKG1lcmdpbmdfc25hcC0+b3JpZ2luLT5iZGV2KTsKKwlmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgbiArPSBtZXJnaW5nX3NuYXAtPnRpLT5zcGxpdF9pbykKKwkJaWYgKF9fb3JpZ2luX3dyaXRlKCZvLT5zbmFwc2hvdHMsIHNlY3RvciArIG4sIE5VTEwpID09CisJCSAgICBETV9NQVBJT19TVUJNSVRURUQpCisJCQltdXN0X3dhaXQgPSAxOworCXVwX3JlYWQoJl9vcmlnaW5zX2xvY2spOworCisJcmV0dXJuIG11c3Rfd2FpdDsKK30KKworLyoKICAqIE9yaWdpbjogbWFwcyBhIGxpbmVhciByYW5nZSBvZiBhIGRldmljZSwgd2l0aCBob29rcyBmb3Igc25hcHNob3R0aW5nLgogICovCiAKQEAgLTEzOTEsOCArMjEzMiw2IEBACiAJcmV0dXJuIChiaW9fcncoYmlvKSA9PSBXUklURSkgPyBkb19vcmlnaW4oZGV2LCBiaW8pIDogRE1fTUFQSU9fUkVNQVBQRUQ7CiB9CiAKLSNkZWZpbmUgbWluX25vdF96ZXJvKGwsIHIpIChsID09IDApID8gciA6ICgociA9PSAwKSA/IGwgOiBtaW4obCwgcikpCi0KIC8qCiAgKiBTZXQgdGhlIHRhcmdldCAic3BsaXRfaW8iIGZpZWxkIHRvIHRoZSBtaW5pbXVtIG9mIGFsbCB0aGUgc25hcHNob3RzJwogICogY2h1bmsgc2l6ZXMuCkBAIC0xNDAwLDE5ICsyMTM5LDggQEAKIHN0YXRpYyB2b2lkIG9yaWdpbl9yZXN1bWUoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7CiAJc3RydWN0IGRtX2RldiAqZGV2ID0gdGktPnByaXZhdGU7Ci0Jc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOwotCXN0cnVjdCBvcmlnaW4gKm87Ci0JdW5zaWduZWQgY2h1bmtfc2l6ZSA9IDA7CiAKLQlkb3duX3JlYWQoJl9vcmlnaW5zX2xvY2spOwotCW8gPSBfX2xvb2t1cF9vcmlnaW4oZGV2LT5iZGV2KTsKLQlpZiAobykKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAoc25hcCwgJm8tPnNuYXBzaG90cywgbGlzdCkKLQkJCWNodW5rX3NpemUgPSBtaW5fbm90X3plcm8oY2h1bmtfc2l6ZSwKLQkJCQkJCSAgc25hcC0+c3RvcmUtPmNodW5rX3NpemUpOwotCXVwX3JlYWQoJl9vcmlnaW5zX2xvY2spOwotCi0JdGktPnNwbGl0X2lvID0gY2h1bmtfc2l6ZTsKKwl0aS0+c3BsaXRfaW8gPSBnZXRfb3JpZ2luX21pbmltdW1fY2h1bmtzaXplKGRldi0+YmRldik7CiB9CiAKIHN0YXRpYyBpbnQgb3JpZ2luX3N0YXR1cyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RhdHVzX3R5cGVfdCB0eXBlLCBjaGFyICpyZXN1bHQsCkBAIC0xNDU1LDE3ICsyMTgzLDM1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X3R5cGUgc25hcHNob3RfdGFyZ2V0ID0gewogCS5uYW1lICAgID0gInNuYXBzaG90IiwKLQkudmVyc2lvbiA9IHsxLCA3LCAwfSwKKwkudmVyc2lvbiA9IHsxLCA5LCAwfSwKIAkubW9kdWxlICA9IFRISVNfTU9EVUxFLAogCS5jdHIgICAgID0gc25hcHNob3RfY3RyLAogCS5kdHIgICAgID0gc25hcHNob3RfZHRyLAogCS5tYXAgICAgID0gc25hcHNob3RfbWFwLAogCS5lbmRfaW8gID0gc25hcHNob3RfZW5kX2lvLAorCS5wb3N0c3VzcGVuZCA9IHNuYXBzaG90X3Bvc3RzdXNwZW5kLAorCS5wcmVyZXN1bWUgID0gc25hcHNob3RfcHJlcmVzdW1lLAogCS5yZXN1bWUgID0gc25hcHNob3RfcmVzdW1lLAogCS5zdGF0dXMgID0gc25hcHNob3Rfc3RhdHVzLAogCS5pdGVyYXRlX2RldmljZXMgPSBzbmFwc2hvdF9pdGVyYXRlX2RldmljZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIG1lcmdlX3RhcmdldCA9IHsKKwkubmFtZSAgICA9IGRtX3NuYXBzaG90X21lcmdlX3RhcmdldF9uYW1lLAorCS52ZXJzaW9uID0gezEsIDAsIDB9LAorCS5tb2R1bGUgID0gVEhJU19NT0RVTEUsCisJLmN0ciAgICAgPSBzbmFwc2hvdF9jdHIsCisJLmR0ciAgICAgPSBzbmFwc2hvdF9kdHIsCisJLm1hcCAgICAgPSBzbmFwc2hvdF9tZXJnZV9tYXAsCisJLmVuZF9pbyAgPSBzbmFwc2hvdF9lbmRfaW8sCisJLnByZXN1c3BlbmQgPSBzbmFwc2hvdF9tZXJnZV9wcmVzdXNwZW5kLAorCS5wb3N0c3VzcGVuZCA9IHNuYXBzaG90X3Bvc3RzdXNwZW5kLAorCS5wcmVyZXN1bWUgID0gc25hcHNob3RfcHJlcmVzdW1lLAorCS5yZXN1bWUgID0gc25hcHNob3RfbWVyZ2VfcmVzdW1lLAorCS5zdGF0dXMgID0gc25hcHNob3Rfc3RhdHVzLAorCS5pdGVyYXRlX2RldmljZXMgPSBzbmFwc2hvdF9pdGVyYXRlX2RldmljZXMsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkbV9zbmFwc2hvdF9pbml0KHZvaWQpCiB7CiAJaW50IHI7CkBAIC0xNDc3LDcgKzIyMjMsNyBAQAogCX0KIAogCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7Ci0JaWYgKHIpIHsKKwlpZiAociA8IDApIHsKIAkJRE1FUlIoInNuYXBzaG90IHRhcmdldCByZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKIAkJZ290byBiYWRfcmVnaXN0ZXJfc25hcHNob3RfdGFyZ2V0OwogCX0KQEAgLTE0ODUsMzQgKzIyMzEsNDAgQEAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKIAlpZiAociA8IDApIHsKIAkJRE1FUlIoIk9yaWdpbiB0YXJnZXQgcmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7Ci0JCWdvdG8gYmFkMTsKKwkJZ290byBiYWRfcmVnaXN0ZXJfb3JpZ2luX3RhcmdldDsKKwl9CisKKwlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZtZXJnZV90YXJnZXQpOworCWlmIChyIDwgMCkgeworCQlETUVSUigiTWVyZ2UgdGFyZ2V0IHJlZ2lzdGVyIGZhaWxlZCAlZCIsIHIpOworCQlnb3RvIGJhZF9yZWdpc3Rlcl9tZXJnZV90YXJnZXQ7CiAJfQogCiAJciA9IGluaXRfb3JpZ2luX2hhc2goKTsKIAlpZiAocikgewogCQlETUVSUigiaW5pdF9vcmlnaW5faGFzaCBmYWlsZWQuIik7Ci0JCWdvdG8gYmFkMjsKKwkJZ290byBiYWRfb3JpZ2luX2hhc2g7CiAJfQogCi0JZXhjZXB0aW9uX2NhY2hlID0gS01FTV9DQUNIRShkbV9zbmFwX2V4Y2VwdGlvbiwgMCk7CisJZXhjZXB0aW9uX2NhY2hlID0gS01FTV9DQUNIRShkbV9leGNlcHRpb24sIDApOwogCWlmICghZXhjZXB0aW9uX2NhY2hlKSB7CiAJCURNRVJSKCJDb3VsZG4ndCBjcmVhdGUgZXhjZXB0aW9uIGNhY2hlLiIpOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBiYWQzOworCQlnb3RvIGJhZF9leGNlcHRpb25fY2FjaGU7CiAJfQogCiAJcGVuZGluZ19jYWNoZSA9IEtNRU1fQ0FDSEUoZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiwgMCk7CiAJaWYgKCFwZW5kaW5nX2NhY2hlKSB7CiAJCURNRVJSKCJDb3VsZG4ndCBjcmVhdGUgcGVuZGluZyBjYWNoZS4iKTsKIAkJciA9IC1FTk9NRU07Ci0JCWdvdG8gYmFkNDsKKwkJZ290byBiYWRfcGVuZGluZ19jYWNoZTsKIAl9CiAKIAl0cmFja2VkX2NodW5rX2NhY2hlID0gS01FTV9DQUNIRShkbV9zbmFwX3RyYWNrZWRfY2h1bmssIDApOwogCWlmICghdHJhY2tlZF9jaHVua19jYWNoZSkgewogCQlETUVSUigiQ291bGRuJ3QgY3JlYXRlIGNhY2hlIHRvIHRyYWNrIGNodW5rcyBpbiB1c2UuIik7CiAJCXIgPSAtRU5PTUVNOwotCQlnb3RvIGJhZDU7CisJCWdvdG8gYmFkX3RyYWNrZWRfY2h1bmtfY2FjaGU7CiAJfQogCiAJa3NuYXBkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtzbmFwZCIpOwpAQCAtMTUyNiwxOSArMjI3OCwyMSBAQAogCiBiYWRfcGVuZGluZ19wb29sOgogCWttZW1fY2FjaGVfZGVzdHJveSh0cmFja2VkX2NodW5rX2NhY2hlKTsKLWJhZDU6CitiYWRfdHJhY2tlZF9jaHVua19jYWNoZToKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocGVuZGluZ19jYWNoZSk7Ci1iYWQ0OgorYmFkX3BlbmRpbmdfY2FjaGU6CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4Y2VwdGlvbl9jYWNoZSk7Ci1iYWQzOgorYmFkX2V4Y2VwdGlvbl9jYWNoZToKIAlleGl0X29yaWdpbl9oYXNoKCk7Ci1iYWQyOgorYmFkX29yaWdpbl9oYXNoOgorCWRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZtZXJnZV90YXJnZXQpOworYmFkX3JlZ2lzdGVyX21lcmdlX3RhcmdldDoKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmb3JpZ2luX3RhcmdldCk7Ci1iYWQxOgorYmFkX3JlZ2lzdGVyX29yaWdpbl90YXJnZXQ6CiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7Ci0KIGJhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ6CiAJZG1fZXhjZXB0aW9uX3N0b3JlX2V4aXQoKTsKKwogCXJldHVybiByOwogfQogCkBAIC0xNTQ4LDYgKzIzMDIsNyBAQAogCiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJm9yaWdpbl90YXJnZXQpOworCWRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZtZXJnZV90YXJnZXQpOwogCiAJZXhpdF9vcmlnaW5faGFzaCgpOwogCWttZW1fY2FjaGVfZGVzdHJveShwZW5kaW5nX2NhY2hlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc3lzZnMuYyBiL2RyaXZlcnMvbWQvZG0tc3lzZnMuYwppbmRleCA0YjA0NTkwLi5mNTMzOTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zeXNmcy5jCkBAIC01OSw3ICs1OSw3IEBACiAKIHN0YXRpYyBzc2l6ZV90IGRtX2F0dHJfc3VzcGVuZGVkX3Nob3coc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBjaGFyICpidWYpCiB7Ci0Jc3ByaW50ZihidWYsICIlZFxuIiwgZG1fc3VzcGVuZGVkKG1kKSk7CisJc3ByaW50ZihidWYsICIlZFxuIiwgZG1fc3VzcGVuZGVkX21kKG1kKSk7CiAKIAlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CkBAIC04MCwxMiArODAsMjAgQEAKIH07CiAKIC8qCisgKiBUaGUgc3lzZnMgc3RydWN0dXJlIGlzIGVtYmVkZGVkIGluIG1kIHN0cnVjdCwgbm90aGluZyB0byBkbyBoZXJlCisgKi8KK3N0YXRpYyB2b2lkIGRtX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7Cit9CisKKy8qCiAgKiBkbSBrb2JqZWN0IGlzIGVtYmVkZGVkIGluIG1hcHBlZF9kZXZpY2Ugc3RydWN0dXJlCiAgKiBubyBuZWVkIHRvIGRlZmluZSByZWxlYXNlIGZ1bmN0aW9uIGhlcmUKICAqLwogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgZG1fa3R5cGUgPSB7CiAJLnN5c2ZzX29wcwk9ICZkbV9zeXNmc19vcHMsCiAJLmRlZmF1bHRfYXR0cnMJPSBkbV9hdHRycywKKwkucmVsZWFzZQk9IGRtX3N5c2ZzX3JlbGVhc2UKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKaW5kZXggMWE2Y2IzYy4uYmU2MjU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10YWJsZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTIzNyw2ICsyMzgsOSBAQAogewogCXVuc2lnbmVkIGludCBpOwogCisJaWYgKCF0KQorCQlyZXR1cm47CisKIAl3aGlsZSAoYXRvbWljX3JlYWQoJnQtPmhvbGRlcnMpKQogCQltc2xlZXAoMSk7CiAJc21wX21iKCk7CkBAIC02MDAsMTEgKzYwNCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJd2hpbGUgKDEpIHsKLQkJc3RhcnQgPSBlbmQ7Ci0KIAkJLyogU2tpcCB3aGl0ZXNwYWNlICovCi0JCXdoaWxlICgqc3RhcnQgJiYgaXNzcGFjZSgqc3RhcnQpKQotCQkJc3RhcnQrKzsKKwkJc3RhcnQgPSBza2lwX3NwYWNlcyhlbmQpOwogCiAJCWlmICghKnN0YXJ0KQogCQkJYnJlYWs7CS8qIHN1Y2Nlc3MsIHdlIGhpdCB0aGUgZW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXVldmVudC5jIGIvZHJpdmVycy9tZC9kbS11ZXZlbnQuYwppbmRleCA2ZjY1ODgzLi5jN2M1NTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXVldmVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdWV2ZW50LmMKQEAgLTEzOSwxNCArMTM5LDEzIEBACiAJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5lbGlzdCk7CiAKIAkJLyoKLQkJICogTmVlZCB0byBjYWxsIGRtX2NvcHlfbmFtZV9hbmRfdXVpZCBmcm9tIGhlcmUgZm9yIG5vdy4KLQkJICogQ29udGV4dCBvZiBwcmV2aW91cyB2YXIgYWRkcyBhbmQgbG9ja2luZyB1c2VkIGZvcgotCQkgKiBoYXNoX2NlbGwgbm90IGNvbXBhdGFibGUuCisJCSAqIFdoZW4gYSBkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB0aGlzIGNvcHkgZmFpbHMgYW5kIHdlCisJCSAqIGRpc2NhcmQgdGhlc2UgdW5zZW50IGV2ZW50cy4KIAkJICovCiAJCWlmIChkbV9jb3B5X25hbWVfYW5kX3V1aWQoZXZlbnQtPm1kLCBldmVudC0+bmFtZSwKIAkJCQkJICBldmVudC0+dXVpZCkpIHsKLQkJCURNRVJSKCIlczogZG1fY29weV9uYW1lX2FuZF91dWlkKCkgZmFpbGVkIiwKLQkJCSAgICAgIF9fZnVuY19fKTsKKwkJCURNSU5GTygiJXM6IHNraXBwaW5nIHNlbmRpbmcgdWV2ZW50IGZvciBsb3N0IGRldmljZSIsCisJCQkgICAgICAgX19mdW5jX18pOwogCQkJZ290byB1ZXZlbnRfZnJlZTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggNzI0ZWZjNi4uMzE2NzQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtMTQzLDkgKzE0MywxOSBAQAogCWludCBiYXJyaWVyX2Vycm9yOwogCiAJLyoKKwkgKiBQcm90ZWN0IGJhcnJpZXJfZXJyb3IgZnJvbSBjb25jdXJyZW50IGVuZGlvIHByb2Nlc3NpbmcKKwkgKiBpbiByZXF1ZXN0LWJhc2VkIGRtLgorCSAqLworCXNwaW5sb2NrX3QgYmFycmllcl9lcnJvcl9sb2NrOworCisJLyoKIAkgKiBQcm9jZXNzaW5nIHF1ZXVlIChmbHVzaC9iYXJyaWVycykKIAkgKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJc3RydWN0IHdvcmtfc3RydWN0IGJhcnJpZXJfd29yazsKKworCS8qIEEgcG9pbnRlciB0byB0aGUgY3VycmVudGx5IHByb2Nlc3NpbmcgcHJlL3Bvc3QgZmx1c2ggcmVxdWVzdCAqLworCXN0cnVjdCByZXF1ZXN0ICpmbHVzaF9yZXF1ZXN0OwogCiAJLyoKIAkgKiBUaGUgY3VycmVudCBtYXBwaW5nLgpAQCAtMTc4LDkgKzE4OCw2IEBACiAJLyogZm9yY2VkIGdlb21ldHJ5IHNldHRpbmdzICovCiAJc3RydWN0IGhkX2dlb21ldHJ5IGdlb21ldHJ5OwogCi0JLyogbWFya2VyIG9mIGZsdXNoIHN1c3BlbmQgZm9yIHJlcXVlc3QtYmFzZWQgZG0gKi8KLQlzdHJ1Y3QgcmVxdWVzdCBzdXNwZW5kX3JxOwotCiAJLyogRm9yIHNhdmluZyB0aGUgYWRkcmVzcyBvZiBfX21ha2VfcmVxdWVzdCBmb3IgcmVxdWVzdCBiYXNlZCBkbSAqLwogCW1ha2VfcmVxdWVzdF9mbiAqc2F2ZWRfbWFrZV9yZXF1ZXN0X2ZuOwogCkBAIC0yNzUsNiArMjgyLDcgQEAKIAlkbV90YXJnZXRfaW5pdCwKIAlkbV9saW5lYXJfaW5pdCwKIAlkbV9zdHJpcGVfaW5pdCwKKwlkbV9pb19pbml0LAogCWRtX2tjb3B5ZF9pbml0LAogCWRtX2ludGVyZmFjZV9pbml0LAogfTsKQEAgLTI4NCw2ICsyOTIsNyBAQAogCWRtX3RhcmdldF9leGl0LAogCWRtX2xpbmVhcl9leGl0LAogCWRtX3N0cmlwZV9leGl0LAorCWRtX2lvX2V4aXQsCiAJZG1fa2NvcHlkX2V4aXQsCiAJZG1faW50ZXJmYWNlX2V4aXQsCiB9OwpAQCAtMzIwLDYgKzMyOSwxMSBAQAogLyoKICAqIEJsb2NrIGRldmljZSBmdW5jdGlvbnMKICAqLworaW50IGRtX2RlbGV0aW5nX21kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoRE1GX0RFTEVUSU5HLCAmbWQtPmZsYWdzKTsKK30KKwogc3RhdGljIGludCBkbV9ibGtfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kOwpAQCAtMzMxLDcgKzM0NSw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHRlc3RfYml0KERNRl9GUkVFSU5HLCAmbWQtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChETUZfREVMRVRJTkcsICZtZC0+ZmxhZ3MpKSB7CisJICAgIGRtX2RlbGV0aW5nX21kKG1kKSkgewogCQltZCA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM4OCw3ICs0MDIsNyBAQAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IGRtX2dldF9saXZlX3RhYmxlKG1kKTsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0Z3Q7CiAJaW50IHIgPSAtRU5PVFRZOwogCkBAIC00MDEsNyArNDE1LDcgQEAKIAogCXRndCA9IGRtX3RhYmxlX2dldF90YXJnZXQobWFwLCAwKTsKIAotCWlmIChkbV9zdXNwZW5kZWQobWQpKSB7CisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpIHsKIAkJciA9IC1FQUdBSU47CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQzMCw5ICs0NDQsMTAgQEAKIAltZW1wb29sX2ZyZWUodGlvLCBtZC0+dGlvX3Bvb2wpOwogfQogCi1zdGF0aWMgc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqYWxsb2NfcnFfdGlvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3N0YXRpYyBzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICphbGxvY19ycV90aW8oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLAorCQkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JcmV0dXJuIG1lbXBvb2xfYWxsb2MobWQtPnRpb19wb29sLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm4gbWVtcG9vbF9hbGxvYyhtZC0+dGlvX3Bvb2wsIGdmcF9tYXNrKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9ycV90aW8oc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvKQpAQCAtNDUwLDYgKzQ2NSwxMiBAQAogCW1lbXBvb2xfZnJlZShpbmZvLCBpbmZvLT50aW8tPm1kLT5pb19wb29sKTsKIH0KIAorc3RhdGljIGludCBtZF9pbl9mbGlnaHQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmdbUkVBRF0pICsKKwkgICAgICAgYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nW1dSSVRFXSk7Cit9CisKIHN0YXRpYyB2b2lkIHN0YXJ0X2lvX2FjY3Qoc3RydWN0IGRtX2lvICppbykKIHsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBpby0+bWQ7CkBAIC01MTIsNyArNTMzLDcgQEAKICAqIGZ1bmN0aW9uIHRvIGFjY2VzcyB0aGUgbWQtPm1hcCBmaWVsZCwgYW5kIG1ha2Ugc3VyZSB0aGV5IGNhbGwKICAqIGRtX3RhYmxlX3B1dCgpIHdoZW4gZmluaXNoZWQuCiAgKi8KLXN0cnVjdCBkbV90YWJsZSAqZG1fZ2V0X3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3N0cnVjdCBkbV90YWJsZSAqZG1fZ2V0X2xpdmVfdGFibGUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewogCXN0cnVjdCBkbV90YWJsZSAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzE2LDI4ICs3MzcsMzggQEAKIAlibGtfdXBkYXRlX3JlcXVlc3QodGlvLT5vcmlnLCAwLCBucl9ieXRlcyk7CiB9CiAKK3N0YXRpYyB2b2lkIHN0b3JlX2JhcnJpZXJfZXJyb3Ioc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgZXJyb3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+YmFycmllcl9lcnJvcl9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBCYXNpY2FsbHksIHRoZSBmaXJzdCBlcnJvciBpcyB0YWtlbiwgYnV0OgorCSAqICAgLUVPUE5PVFNVUFAgc3VwZXJzZWRlcyBhbnkgSS9PIGVycm9yLgorCSAqICAgUmVxdWV1ZSByZXF1ZXN0IHN1cGVyc2VkZXMgYW55IEkvTyBlcnJvciBidXQgLUVPUE5PVFNVUFAuCisJICovCisJaWYgKCFtZC0+YmFycmllcl9lcnJvciB8fCBlcnJvciA9PSAtRU9QTk9UU1VQUCB8fAorCSAgICAobWQtPmJhcnJpZXJfZXJyb3IgIT0gLUVPUE5PVFNVUFAgJiYKKwkgICAgIGVycm9yID09IERNX0VORElPX1JFUVVFVUUpKQorCQltZC0+YmFycmllcl9lcnJvciA9IGVycm9yOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5iYXJyaWVyX2Vycm9yX2xvY2ssIGZsYWdzKTsKK30KKwogLyoKICAqIERvbid0IHRvdWNoIGFueSBtZW1iZXIgb2YgdGhlIG1kIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZWNhdXNlCiAgKiB0aGUgbWQgbWF5IGJlIGZyZWVkIGluIGRtX3B1dCgpIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4KICAqIE9yIGRvIGRtX2dldCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGRtX3B1dCgpIGxhdGVyLgogICovCi1zdGF0aWMgdm9pZCBycV9jb21wbGV0ZWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgcnVuX3F1ZXVlKQorc3RhdGljIHZvaWQgcnFfY29tcGxldGVkKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgaW50IHJ3LCBpbnQgcnVuX3F1ZXVlKQogewotCWludCB3YWtldXBfd2FpdGVycyA9IDA7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZC0+cXVldWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlpZiAoIXF1ZXVlX2luX2ZsaWdodChxKSkKLQkJd2FrZXVwX3dhaXRlcnMgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCWF0b21pY19kZWMoJm1kLT5wZW5kaW5nW3J3XSk7CiAKIAkvKiBudWRnZSBhbnlvbmUgd2FpdGluZyBvbiBzdXNwZW5kIHF1ZXVlICovCi0JaWYgKHdha2V1cF93YWl0ZXJzKQorCWlmICghbWRfaW5fZmxpZ2h0KG1kKSkKIAkJd2FrZV91cCgmbWQtPndhaXQpOwogCiAJaWYgKHJ1bl9xdWV1ZSkKLQkJYmxrX3J1bl9xdWV1ZShxKTsKKwkJYmxrX3J1bl9xdWV1ZShtZC0+cXVldWUpOwogCiAJLyoKIAkgKiBkbV9wdXQoKSBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4gU2VlIHRoZSBjb21tZW50IGFib3ZlCkBAIC03NTMsNiArNzg0LDQ0IEBACiAJZnJlZV9ycV90aW8odGlvKTsKIH0KIAorLyoKKyAqIENvbXBsZXRlIHRoZSBjbG9uZSBhbmQgdGhlIG9yaWdpbmFsIHJlcXVlc3QuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IHF1ZXVlIGxvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRtX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpjbG9uZSwgaW50IGVycm9yKQoreworCWludCBydyA9IHJxX2RhdGFfZGlyKGNsb25lKTsKKwlpbnQgcnVuX3F1ZXVlID0gMTsKKwlib29sIGlzX2JhcnJpZXIgPSBibGtfYmFycmllcl9ycShjbG9uZSk7CisJc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvID0gY2xvbmUtPmVuZF9pb19kYXRhOworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IHRpby0+bWQ7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gdGlvLT5vcmlnOworCisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSAmJiAhaXNfYmFycmllcikgeworCQlycS0+ZXJyb3JzID0gY2xvbmUtPmVycm9yczsKKwkJcnEtPnJlc2lkX2xlbiA9IGNsb25lLT5yZXNpZF9sZW47CisKKwkJaWYgKHJxLT5zZW5zZSkKKwkJCS8qCisJCQkgKiBXZSBhcmUgdXNpbmcgdGhlIHNlbnNlIGJ1ZmZlciBvZiB0aGUgb3JpZ2luYWwKKwkJCSAqIHJlcXVlc3QuCisJCQkgKiBTbyBzZXR0aW5nIHRoZSBsZW5ndGggb2YgdGhlIHNlbnNlIGRhdGEgaXMgZW5vdWdoLgorCQkJICovCisJCQlycS0+c2Vuc2VfbGVuID0gY2xvbmUtPnNlbnNlX2xlbjsKKwl9CisKKwlmcmVlX3JxX2Nsb25lKGNsb25lKTsKKworCWlmICh1bmxpa2VseShpc19iYXJyaWVyKSkgeworCQlpZiAodW5saWtlbHkoZXJyb3IpKQorCQkJc3RvcmVfYmFycmllcl9lcnJvcihtZCwgZXJyb3IpOworCQlydW5fcXVldWUgPSAwOworCX0gZWxzZQorCQlibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCBlcnJvcik7CisKKwlycV9jb21wbGV0ZWQobWQsIHJ3LCBydW5fcXVldWUpOworfQorCiBzdGF0aWMgdm9pZCBkbV91bnByZXBfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHJlcXVlc3QgKmNsb25lID0gcnEtPnNwZWNpYWw7CkBAIC03NjgsMTIgKzgzNywyMyBAQAogICovCiB2b2lkIGRtX3JlcXVldWVfdW5tYXBwZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqY2xvbmUpCiB7CisJaW50IHJ3ID0gcnFfZGF0YV9kaXIoY2xvbmUpOwogCXN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbyA9IGNsb25lLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSB0aW8tPm1kOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IHRpby0+b3JpZzsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHJxLT5xOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAodW5saWtlbHkoYmxrX2JhcnJpZXJfcnEoY2xvbmUpKSkgeworCQkvKgorCQkgKiBCYXJyaWVyIGNsb25lcyBzaGFyZSBhbiBvcmlnaW5hbCByZXF1ZXN0LgorCQkgKiBMZWF2ZSBpdCB0byBkbV9lbmRfcmVxdWVzdCgpLCB3aGljaCBoYW5kbGVzIHRoaXMgc3BlY2lhbAorCQkgKiBjYXNlLgorCQkgKi8KKwkJZG1fZW5kX3JlcXVlc3QoY2xvbmUsIERNX0VORElPX1JFUVVFVUUpOworCQlyZXR1cm47CisJfQorCiAJZG1fdW5wcmVwX3JlcXVlc3QocnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwpAQCAtNzgyLDcgKzg2Miw3IEBACiAJYmxrX3JlcXVldWVfcmVxdWVzdChxLCBycSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKLQlycV9jb21wbGV0ZWQobWQsIDApOworCXJxX2NvbXBsZXRlZChtZCwgcncsIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fcmVxdWV1ZV91bm1hcHBlZF9yZXF1ZXN0KTsKIApAQCAtODE1LDM0ICs4OTUsMjggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIAotLyoKLSAqIENvbXBsZXRlIHRoZSBjbG9uZSBhbmQgdGhlIG9yaWdpbmFsIHJlcXVlc3QuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IHF1ZXVlIGxvY2suCi0gKi8KLXN0YXRpYyB2b2lkIGRtX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpjbG9uZSwgaW50IGVycm9yKQorc3RhdGljIHZvaWQgZG1fZG9uZShzdHJ1Y3QgcmVxdWVzdCAqY2xvbmUsIGludCBlcnJvciwgYm9vbCBtYXBwZWQpCiB7CisJaW50IHIgPSBlcnJvcjsKIAlzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICp0aW8gPSBjbG9uZS0+ZW5kX2lvX2RhdGE7Ci0Jc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gdGlvLT5tZDsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB0aW8tPm9yaWc7CisJZG1fcmVxdWVzdF9lbmRpb19mbiBycV9lbmRfaW8gPSB0aW8tPnRpLT50eXBlLT5ycV9lbmRfaW87CiAKLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7Ci0JCXJxLT5lcnJvcnMgPSBjbG9uZS0+ZXJyb3JzOwotCQlycS0+cmVzaWRfbGVuID0gY2xvbmUtPnJlc2lkX2xlbjsKKwlpZiAobWFwcGVkICYmIHJxX2VuZF9pbykKKwkJciA9IHJxX2VuZF9pbyh0aW8tPnRpLCBjbG9uZSwgZXJyb3IsICZ0aW8tPmluZm8pOwogCi0JCWlmIChycS0+c2Vuc2UpCi0JCQkvKgotCQkJICogV2UgYXJlIHVzaW5nIHRoZSBzZW5zZSBidWZmZXIgb2YgdGhlIG9yaWdpbmFsCi0JCQkgKiByZXF1ZXN0LgotCQkJICogU28gc2V0dGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGVub3VnaC4KLQkJCSAqLwotCQkJcnEtPnNlbnNlX2xlbiA9IGNsb25lLT5zZW5zZV9sZW47CisJaWYgKHIgPD0gMCkKKwkJLyogVGhlIHRhcmdldCB3YW50cyB0byBjb21wbGV0ZSB0aGUgSS9PICovCisJCWRtX2VuZF9yZXF1ZXN0KGNsb25lLCByKTsKKwllbHNlIGlmIChyID09IERNX0VORElPX0lOQ09NUExFVEUpCisJCS8qIFRoZSB0YXJnZXQgd2lsbCBoYW5kbGUgdGhlIEkvTyAqLworCQlyZXR1cm47CisJZWxzZSBpZiAociA9PSBETV9FTkRJT19SRVFVRVVFKQorCQkvKiBUaGUgdGFyZ2V0IHdhbnRzIHRvIHJlcXVldWUgdGhlIEkvTyAqLworCQlkbV9yZXF1ZXVlX3VubWFwcGVkX3JlcXVlc3QoY2xvbmUpOworCWVsc2UgeworCQlETVdBUk4oInVuaW1wbGVtZW50ZWQgdGFyZ2V0IGVuZGlvIHJldHVybiB2YWx1ZTogJWQiLCByKTsKKwkJQlVHKCk7CiAJfQotCi0JZnJlZV9ycV9jbG9uZShjbG9uZSk7Ci0KLQlibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCBlcnJvcik7Ci0KLQlycV9jb21wbGV0ZWQobWQsIDEpOwogfQogCiAvKgpAQCAtODUwLDI3ICs5MjQsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgZG1fc29mdGlycV9kb25lKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlib29sIG1hcHBlZCA9IHRydWU7CiAJc3RydWN0IHJlcXVlc3QgKmNsb25lID0gcnEtPmNvbXBsZXRpb25fZGF0YTsKIAlzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICp0aW8gPSBjbG9uZS0+ZW5kX2lvX2RhdGE7Ci0JZG1fcmVxdWVzdF9lbmRpb19mbiBycV9lbmRfaW8gPSB0aW8tPnRpLT50eXBlLT5ycV9lbmRfaW87Ci0JaW50IGVycm9yID0gdGlvLT5lcnJvcjsKIAotCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEVEKSAmJiBycV9lbmRfaW8pCi0JCWVycm9yID0gcnFfZW5kX2lvKHRpby0+dGksIGNsb25lLCBlcnJvciwgJnRpby0+aW5mbyk7CisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEVEKQorCQltYXBwZWQgPSBmYWxzZTsKIAotCWlmIChlcnJvciA8PSAwKQotCQkvKiBUaGUgdGFyZ2V0IHdhbnRzIHRvIGNvbXBsZXRlIHRoZSBJL08gKi8KLQkJZG1fZW5kX3JlcXVlc3QoY2xvbmUsIGVycm9yKTsKLQllbHNlIGlmIChlcnJvciA9PSBETV9FTkRJT19JTkNPTVBMRVRFKQotCQkvKiBUaGUgdGFyZ2V0IHdpbGwgaGFuZGxlIHRoZSBJL08gKi8KLQkJcmV0dXJuOwotCWVsc2UgaWYgKGVycm9yID09IERNX0VORElPX1JFUVVFVUUpCi0JCS8qIFRoZSB0YXJnZXQgd2FudHMgdG8gcmVxdWV1ZSB0aGUgSS9PICovCi0JCWRtX3JlcXVldWVfdW5tYXBwZWRfcmVxdWVzdChjbG9uZSk7Ci0JZWxzZSB7Ci0JCURNV0FSTigidW5pbXBsZW1lbnRlZCB0YXJnZXQgZW5kaW8gcmV0dXJuIHZhbHVlOiAlZCIsIGVycm9yKTsKLQkJQlVHKCk7Ci0JfQorCWRtX2RvbmUoY2xvbmUsIHRpby0+ZXJyb3IsIG1hcHBlZCk7CiB9CiAKIC8qCkBAIC04ODIsNiArOTQzLDE5IEBACiAJc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvID0gY2xvbmUtPmVuZF9pb19kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IHRpby0+b3JpZzsKIAorCWlmICh1bmxpa2VseShibGtfYmFycmllcl9ycShjbG9uZSkpKSB7CisJCS8qCisJCSAqIEJhcnJpZXIgY2xvbmVzIHNoYXJlIGFuIG9yaWdpbmFsIHJlcXVlc3QuICBTbyBjYW4ndCB1c2UKKwkJICogc29mdGlycV9kb25lIHdpdGggdGhlIG9yaWdpbmFsLgorCQkgKiBQYXNzIHRoZSBjbG9uZSB0byBkbV9kb25lKCkgZGlyZWN0bHkgaW4gdGhpcyBzcGVjaWFsIGNhc2UuCisJCSAqIEl0IGlzIHNhZmUgKGV2ZW4gaWYgY2xvbmUtPnEtPnF1ZXVlX2xvY2sgaXMgaGVsZCBoZXJlKQorCQkgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIEkvTyBkaXNwYXRjaGluZyBkdXJpbmcgdGhlIGNvbXBsZXRpb24KKwkJICogb2YgYmFycmllciBjbG9uZS4KKwkJICovCisJCWRtX2RvbmUoY2xvbmUsIGVycm9yLCB0cnVlKTsKKwkJcmV0dXJuOworCX0KKwogCXRpby0+ZXJyb3IgPSBlcnJvcjsKIAlycS0+Y29tcGxldGlvbl9kYXRhID0gY2xvbmU7CiAJYmxrX2NvbXBsZXRlX3JlcXVlc3QocnEpOwpAQCAtODk4LDYgKzk3MiwxNyBAQAogCXN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbyA9IGNsb25lLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB0aW8tPm9yaWc7CiAKKwlpZiAodW5saWtlbHkoYmxrX2JhcnJpZXJfcnEoY2xvbmUpKSkgeworCQkvKgorCQkgKiBCYXJyaWVyIGNsb25lcyBzaGFyZSBhbiBvcmlnaW5hbCByZXF1ZXN0LgorCQkgKiBMZWF2ZSBpdCB0byBkbV9lbmRfcmVxdWVzdCgpLCB3aGljaCBoYW5kbGVzIHRoaXMgc3BlY2lhbAorCQkgKiBjYXNlLgorCQkgKi8KKwkJQlVHX09OKGVycm9yID4gMCk7CisJCWRtX2VuZF9yZXF1ZXN0KGNsb25lLCBlcnJvcik7CisJCXJldHVybjsKKwl9CisKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRUQ7CiAJZG1fY29tcGxldGVfcmVxdWVzdChjbG9uZSwgZXJyb3IpOwogfQpAQCAtMTIxNCw3ICsxMjk5LDcgQEAKIAlzdHJ1Y3QgY2xvbmVfaW5mbyBjaTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JY2kubWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwljaS5tYXAgPSBkbV9nZXRfbGl2ZV90YWJsZShtZCk7CiAJaWYgKHVubGlrZWx5KCFjaS5tYXApKSB7CiAJCWlmICghYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpCiAJCQliaW9faW9fZXJyb3IoYmlvKTsKQEAgLTEyNTUsNyArMTM0MCw3IEBACiAJCQkgc3RydWN0IGJpb192ZWMgKmJpb3ZlYykKIHsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBxLT5xdWV1ZWRhdGE7Ci0Jc3RydWN0IGRtX3RhYmxlICptYXAgPSBkbV9nZXRfdGFibGUobWQpOworCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X2xpdmVfdGFibGUobWQpOwogCXN0cnVjdCBkbV90YXJnZXQgKnRpOwogCXNlY3Rvcl90IG1heF9zZWN0b3JzOwogCWludCBtYXhfc2l6ZSA9IDA7CkBAIC0xMzUyLDExICsxNDM3LDYgQEAKIHsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBxLT5xdWV1ZWRhdGE7CiAKLQlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7Ci0JCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJcmV0dXJuIG1kLT5zYXZlZF9tYWtlX3JlcXVlc3RfZm4ocSwgYmlvKTsgLyogY2FsbCBfX21ha2VfcmVxdWVzdCgpICovCiB9CiAKQEAgLTEzNzUsNiArMTQ1NSwyNSBAQAogCXJldHVybiBfZG1fcmVxdWVzdChxLCBiaW8pOwogfQogCisvKgorICogTWFyayB0aGlzIHJlcXVlc3QgYXMgZmx1c2ggcmVxdWVzdCwgc28gdGhhdCBkbV9yZXF1ZXN0X2ZuKCkgY2FuCisgKiByZWNvZ25pemUuCisgKi8KK3N0YXRpYyB2b2lkIGRtX3JxX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKKwlycS0+Y21kWzBdID0gUkVRX0xCX09QX0ZMVVNIOworfQorCitzdGF0aWMgYm9vbCBkbV9ycV9pc19mbHVzaF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0xJTlVYX0JMT0NLICYmCisJICAgIHJxLT5jbWRbMF0gPT0gUkVRX0xCX09QX0ZMVVNIKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKwogdm9pZCBkbV9kaXNwYXRjaF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpbnQgcjsKQEAgLTE0MjAsNTMgKzE1MTksMzkgQEAKIHN0YXRpYyBpbnQgc2V0dXBfY2xvbmUoc3RydWN0IHJlcXVlc3QgKmNsb25lLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCSAgICAgICBzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICp0aW8pCiB7Ci0JaW50IHIgPSBibGtfcnFfcHJlcF9jbG9uZShjbG9uZSwgcnEsIHRpby0+bWQtPmJzLCBHRlBfQVRPTUlDLAotCQkJCSAgZG1fcnFfYmlvX2NvbnN0cnVjdG9yLCB0aW8pOworCWludCByOwogCi0JaWYgKHIpCi0JCXJldHVybiByOworCWlmIChkbV9ycV9pc19mbHVzaF9yZXF1ZXN0KHJxKSkgeworCQlibGtfcnFfaW5pdChOVUxMLCBjbG9uZSk7CisJCWNsb25lLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0ZTOworCQljbG9uZS0+Y21kX2ZsYWdzIHw9IChSRVFfSEFSREJBUlJJRVIgfCBXUklURSk7CisJfSBlbHNlIHsKKwkJciA9IGJsa19ycV9wcmVwX2Nsb25lKGNsb25lLCBycSwgdGlvLT5tZC0+YnMsIEdGUF9BVE9NSUMsCisJCQkJICAgICAgZG1fcnFfYmlvX2NvbnN0cnVjdG9yLCB0aW8pOworCQlpZiAocikKKwkJCXJldHVybiByOwogCi0JY2xvbmUtPmNtZCA9IHJxLT5jbWQ7Ci0JY2xvbmUtPmNtZF9sZW4gPSBycS0+Y21kX2xlbjsKLQljbG9uZS0+c2Vuc2UgPSBycS0+c2Vuc2U7Ci0JY2xvbmUtPmJ1ZmZlciA9IHJxLT5idWZmZXI7CisJCWNsb25lLT5jbWQgPSBycS0+Y21kOworCQljbG9uZS0+Y21kX2xlbiA9IHJxLT5jbWRfbGVuOworCQljbG9uZS0+c2Vuc2UgPSBycS0+c2Vuc2U7CisJCWNsb25lLT5idWZmZXIgPSBycS0+YnVmZmVyOworCX0KKwogCWNsb25lLT5lbmRfaW8gPSBlbmRfY2xvbmVfcmVxdWVzdDsKIAljbG9uZS0+ZW5kX2lvX2RhdGEgPSB0aW87CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkbV9ycV9mbHVzaF9zdXNwZW5kaW5nKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY2xvbmVfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsCisJCQkJZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JcmV0dXJuICFtZC0+c3VzcGVuZF9ycS5zcGVjaWFsOwotfQotCi0vKgotICogQ2FsbGVkIHdpdGggdGhlIHF1ZXVlIGxvY2sgaGVsZC4KLSAqLwotc3RhdGljIGludCBkbV9wcmVwX2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcS0+cXVldWVkYXRhOwotCXN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbzsKIAlzdHJ1Y3QgcmVxdWVzdCAqY2xvbmU7CisJc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvOwogCi0JaWYgKHVubGlrZWx5KHJxID09ICZtZC0+c3VzcGVuZF9ycSkpIHsKLQkJaWYgKGRtX3JxX2ZsdXNoX3N1c3BlbmRpbmcobWQpKQotCQkJcmV0dXJuIEJMS1BSRVBfT0s7Ci0JCWVsc2UKLQkJCS8qIFRoZSBmbHVzaCBzdXNwZW5kIHdhcyBpbnRlcnJ1cHRlZCAqLwotCQkJcmV0dXJuIEJMS1BSRVBfS0lMTDsKLQl9Ci0KLQlpZiAodW5saWtlbHkocnEtPnNwZWNpYWwpKSB7Ci0JCURNV0FSTigiQWxyZWFkeSBoYXMgc29tZXRoaW5nIGluIHJxLT5zcGVjaWFsLiIpOwotCQlyZXR1cm4gQkxLUFJFUF9LSUxMOwotCX0KLQotCXRpbyA9IGFsbG9jX3JxX3RpbyhtZCk7IC8qIE9ubHkgb25lIGZvciBlYWNoIG9yaWdpbmFsIHJlcXVlc3QgKi8KKwl0aW8gPSBhbGxvY19ycV90aW8obWQsIGdmcF9tYXNrKTsKIAlpZiAoIXRpbykKLQkJLyogLUVOT01FTSAqLwotCQlyZXR1cm4gQkxLUFJFUF9ERUZFUjsKKwkJcmV0dXJuIE5VTEw7CiAKIAl0aW8tPm1kID0gbWQ7CiAJdGlvLT50aSA9IE5VTEw7CkBAIC0xNDc4LDIwICsxNTYzLDQyIEBACiAJaWYgKHNldHVwX2Nsb25lKGNsb25lLCBycSwgdGlvKSkgewogCQkvKiAtRU5PTUVNICovCiAJCWZyZWVfcnFfdGlvKHRpbyk7Ci0JCXJldHVybiBCTEtQUkVQX0RFRkVSOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlyZXR1cm4gY2xvbmU7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCB0aGUgcXVldWUgbG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IGRtX3ByZXBfZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IHJlcXVlc3QgKmNsb25lOworCisJaWYgKHVubGlrZWx5KGRtX3JxX2lzX2ZsdXNoX3JlcXVlc3QocnEpKSkKKwkJcmV0dXJuIEJMS1BSRVBfT0s7CisKKwlpZiAodW5saWtlbHkocnEtPnNwZWNpYWwpKSB7CisJCURNV0FSTigiQWxyZWFkeSBoYXMgc29tZXRoaW5nIGluIHJxLT5zcGVjaWFsLiIpOworCQlyZXR1cm4gQkxLUFJFUF9LSUxMOworCX0KKworCWNsb25lID0gY2xvbmVfcnEocnEsIG1kLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNsb25lKQorCQlyZXR1cm4gQkxLUFJFUF9ERUZFUjsKKwogCXJxLT5zcGVjaWFsID0gY2xvbmU7CiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfRE9OVFBSRVA7CiAKIAlyZXR1cm4gQkxLUFJFUF9PSzsKIH0KIAotc3RhdGljIHZvaWQgbWFwX3JlcXVlc3Qoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIG1hcF9yZXF1ZXN0KHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgcmVxdWVzdCAqY2xvbmUsCiAJCQlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJaW50IHI7Ci0Jc3RydWN0IHJlcXVlc3QgKmNsb25lID0gcnEtPnNwZWNpYWw7CiAJc3RydWN0IGRtX3JxX3RhcmdldF9pbyAqdGlvID0gY2xvbmUtPmVuZF9pb19kYXRhOwogCiAJLyoKQEAgLTE1MTEsNiArMTYxOCw4IEBACiAJCWJyZWFrOwogCWNhc2UgRE1fTUFQSU9fUkVNQVBQRUQ6CiAJCS8qIFRoZSB0YXJnZXQgaGFzIHJlbWFwcGVkIHRoZSBJL08gc28gZGlzcGF0Y2ggaXQgKi8KKwkJdHJhY2VfYmxvY2tfcnFfcmVtYXAoY2xvbmUtPnEsIGNsb25lLCBkaXNrX2RldnQoZG1fZGlzayhtZCkpLAorCQkJCSAgICAgYmxrX3JxX3Bvcyh0aW8tPm9yaWcpKTsKIAkJZG1fZGlzcGF0Y2hfcmVxdWVzdChjbG9uZSk7CiAJCWJyZWFrOwogCWNhc2UgRE1fTUFQSU9fUkVRVUVVRToKQEAgLTE1MzYsMjkgKzE2NDUsMjYgQEAKIHN0YXRpYyB2b2lkIGRtX3JlcXVlc3RfZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcS0+cXVldWVkYXRhOwotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IGRtX2dldF9saXZlX3RhYmxlKG1kKTsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJc3RydWN0IHJlcXVlc3QgKnJxLCAqY2xvbmU7CiAKIAkvKgotCSAqIEZvciBub2ZsdXNoIHN1c3BlbmQsIGNoZWNrIGJsa19xdWV1ZV9zdG9wcGVkKCkgdG8gaW1tZWRpYXRlbHkKLQkgKiBxdWl0IEkvTyBkaXNwYXRjaGluZy4KKwkgKiBGb3Igc3VzcGVuZCwgY2hlY2sgYmxrX3F1ZXVlX3N0b3BwZWQoKSBhbmQgaW5jcmVtZW50CisJICogLT5wZW5kaW5nIHdpdGhpbiBhIHNpbmdsZSBxdWV1ZV9sb2NrIG5vdCB0byBpbmNyZW1lbnQgdGhlCisJICogbnVtYmVyIG9mIGluLWZsaWdodCBJL09zIGFmdGVyIHRoZSBxdWV1ZSBpcyBzdG9wcGVkIGluCisJICogZG1fc3VzcGVuZCgpLgogCSAqLwogCXdoaWxlICghYmxrX3F1ZXVlX3BsdWdnZWQocSkgJiYgIWJsa19xdWV1ZV9zdG9wcGVkKHEpKSB7CiAJCXJxID0gYmxrX3BlZWtfcmVxdWVzdChxKTsKIAkJaWYgKCFycSkKIAkJCWdvdG8gcGx1Z19hbmRfb3V0OwogCi0JCWlmICh1bmxpa2VseShycSA9PSAmbWQtPnN1c3BlbmRfcnEpKSB7IC8qIEZsdXNoIHN1c3BlbmQgbWFrZXIgKi8KLQkJCWlmIChxdWV1ZV9pbl9mbGlnaHQocSkpCi0JCQkJLyogTm90IHF1aWV0IHlldC4gIFdhaXQgbW9yZSAqLwotCQkJCWdvdG8gcGx1Z19hbmRfb3V0OwotCi0JCQkvKiBUaGlzIGRldmljZSBzaG91bGQgYmUgcXVpZXQgbm93ICovCi0JCQlfX3N0b3BfcXVldWUocSk7CisJCWlmICh1bmxpa2VseShkbV9ycV9pc19mbHVzaF9yZXF1ZXN0KHJxKSkpIHsKKwkJCUJVR19PTihtZC0+Zmx1c2hfcmVxdWVzdCk7CisJCQltZC0+Zmx1c2hfcmVxdWVzdCA9IHJxOwogCQkJYmxrX3N0YXJ0X3JlcXVlc3QocnEpOwotCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAwKTsKLQkJCXdha2VfdXAoJm1kLT53YWl0KTsKKwkJCXF1ZXVlX3dvcmsobWQtPndxLCAmbWQtPmJhcnJpZXJfd29yayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xNTY3LDggKzE2NzMsMTEgQEAKIAkJCWdvdG8gcGx1Z19hbmRfb3V0OwogCiAJCWJsa19zdGFydF9yZXF1ZXN0KHJxKTsKKwkJY2xvbmUgPSBycS0+c3BlY2lhbDsKKwkJYXRvbWljX2luYygmbWQtPnBlbmRpbmdbcnFfZGF0YV9kaXIoY2xvbmUpXSk7CisKIAkJc3Bpbl91bmxvY2socS0+cXVldWVfbG9jayk7Ci0JCW1hcF9yZXF1ZXN0KHRpLCBycSwgbWQpOworCQltYXBfcmVxdWVzdCh0aSwgY2xvbmUsIG1kKTsKIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAl9CiAKQEAgLTE1OTUsNyArMTcwNCw3IEBACiB7CiAJaW50IHI7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcS0+cXVldWVkYXRhOwotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IGRtX2dldF9saXZlX3RhYmxlKG1kKTsKIAogCWlmICghbWFwIHx8IHRlc3RfYml0KERNRl9CTE9DS19JT19GT1JfU1VTUEVORCwgJm1kLT5mbGFncykpCiAJCXIgPSAxOwpAQCAtMTYxMCw3ICsxNzE5LDcgQEAKIHN0YXRpYyB2b2lkIGRtX3VucGx1Z19hbGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcS0+cXVldWVkYXRhOwotCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IGRtX2dldF9saXZlX3RhYmxlKG1kKTsKIAogCWlmIChtYXApIHsKIAkJaWYgKGRtX3JlcXVlc3RfYmFzZWQobWQpKQpAQCAtMTYyOCw3ICsxNzM3LDcgQEAKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcDsKIAogCWlmICghdGVzdF9iaXQoRE1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5ELCAmbWQtPmZsYWdzKSkgewotCQltYXAgPSBkbV9nZXRfdGFibGUobWQpOworCQltYXAgPSBkbV9nZXRfbGl2ZV90YWJsZShtZCk7CiAJCWlmIChtYXApIHsKIAkJCS8qCiAJCQkgKiBSZXF1ZXN0LWJhc2VkIGRtIGNhcmVzIGFib3V0IG9ubHkgb3duIHF1ZXVlIGZvcgpAQCAtMTcyNSw2ICsxODM0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZG1fYmxrX2RvcHM7CiAKIHN0YXRpYyB2b2lkIGRtX3dxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIGRtX3JxX2JhcnJpZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAvKgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBibGFuayBkZXZpY2Ugd2l0aCBhIGdpdmVuIG1pbm9yLgpAQCAtMTc1NCw2ICsxODY0LDcgQEAKIAlpbml0X3J3c2VtKCZtZC0+aW9fbG9jayk7CiAJbXV0ZXhfaW5pdCgmbWQtPnN1c3BlbmRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJm1kLT5kZWZlcnJlZF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbWQtPmJhcnJpZXJfZXJyb3JfbG9jayk7CiAJcndsb2NrX2luaXQoJm1kLT5tYXBfbG9jayk7CiAJYXRvbWljX3NldCgmbWQtPmhvbGRlcnMsIDEpOwogCWF0b21pY19zZXQoJm1kLT5vcGVuX2NvdW50LCAwKTsKQEAgLTE3ODgsNiArMTg5OSw4IEBACiAJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShtZC0+cXVldWUsIGRtX3NvZnRpcnFfZG9uZSk7CiAJYmxrX3F1ZXVlX3ByZXBfcnEobWQtPnF1ZXVlLCBkbV9wcmVwX2ZuKTsKIAlibGtfcXVldWVfbGxkX2J1c3kobWQtPnF1ZXVlLCBkbV9sbGRfYnVzeSk7CisJYmxrX3F1ZXVlX29yZGVyZWQobWQtPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAorCQkJICBkbV9ycV9wcmVwYXJlX2ZsdXNoKTsKIAogCW1kLT5kaXNrID0gYWxsb2NfZGlzaygxKTsKIAlpZiAoIW1kLT5kaXNrKQpAQCAtMTc5Nyw2ICsxOTEwLDcgQEAKIAlhdG9taWNfc2V0KCZtZC0+cGVuZGluZ1sxXSwgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWQtPndhaXQpOwogCUlOSVRfV09SSygmbWQtPndvcmssIGRtX3dxX3dvcmspOworCUlOSVRfV09SSygmbWQtPmJhcnJpZXJfd29yaywgZG1fcnFfYmFycmllcl93b3JrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZC0+ZXZlbnRxKTsKIAogCW1kLT5kaXNrLT5tYWpvciA9IF9tYWpvcjsKQEAgLTE5MjEsOSArMjAzNSwxMyBAQAogCW11dGV4X3VubG9jaygmbWQtPmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKIH0KIAotc3RhdGljIGludCBfX2JpbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgZG1fdGFibGUgKnQsCi0JCSAgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzKQorLyoKKyAqIFJldHVybnMgb2xkIG1hcCwgd2hpY2ggY2FsbGVyIG11c3QgZGVzdHJveS4KKyAqLworc3RhdGljIHN0cnVjdCBkbV90YWJsZSAqX19iaW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGRtX3RhYmxlICp0LAorCQkJICAgICAgIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cykKIHsKKwlzdHJ1Y3QgZG1fdGFibGUgKm9sZF9tYXA7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZC0+cXVldWU7CiAJc2VjdG9yX3Qgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTkzOCwxMSArMjA1Niw2IEBACiAKIAlfX3NldF9zaXplKG1kLCBzaXplKTsKIAotCWlmICghc2l6ZSkgewotCQlkbV90YWJsZV9kZXN0cm95KHQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlkbV90YWJsZV9ldmVudF9jYWxsYmFjayh0LCBldmVudF9jYWxsYmFjaywgbWQpOwogCiAJLyoKQEAgLTE5NTgsMjYgKzIwNzEsMzEgQEAKIAlfX2JpbmRfbWVtcG9vbHMobWQsIHQpOwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZtZC0+bWFwX2xvY2ssIGZsYWdzKTsKKwlvbGRfbWFwID0gbWQtPm1hcDsKIAltZC0+bWFwID0gdDsKIAlkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHQsIHEsIGxpbWl0cyk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5tYXBfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9sZF9tYXA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdW5iaW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKKy8qCisgKiBSZXR1cm5zIHVuYm91bmQgdGFibGUgZm9yIHRoZSBjYWxsZXIgdG8gZnJlZS4KKyAqLworc3RhdGljIHN0cnVjdCBkbV90YWJsZSAqX191bmJpbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewogCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gbWQtPm1hcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFtYXApCi0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAKIAlkbV90YWJsZV9ldmVudF9jYWxsYmFjayhtYXAsIE5VTEwsIE5VTEwpOwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmbWQtPm1hcF9sb2NrLCBmbGFncyk7CiAJbWQtPm1hcCA9IE5VTEw7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5tYXBfbG9jaywgZmxhZ3MpOwotCWRtX3RhYmxlX2Rlc3Ryb3kobWFwKTsKKworCXJldHVybiBtYXA7CiB9CiAKIC8qCkBAIC0yMDU5LDE4ICsyMTc3LDE4IEBACiAJQlVHX09OKHRlc3RfYml0KERNRl9GUkVFSU5HLCAmbWQtPmZsYWdzKSk7CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbWQtPmhvbGRlcnMsICZfbWlub3JfbG9jaykpIHsKLQkJbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKKwkJbWFwID0gZG1fZ2V0X2xpdmVfdGFibGUobWQpOwogCQlpZHJfcmVwbGFjZSgmX21pbm9yX2lkciwgTUlOT1JfQUxMT0NFRCwKIAkJCSAgICBNSU5PUihkaXNrX2RldnQoZG1fZGlzayhtZCkpKSk7CiAJCXNldF9iaXQoRE1GX0ZSRUVJTkcsICZtZC0+ZmxhZ3MpOwogCQlzcGluX3VubG9jaygmX21pbm9yX2xvY2spOwotCQlpZiAoIWRtX3N1c3BlbmRlZChtZCkpIHsKKwkJaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKSB7CiAJCQlkbV90YWJsZV9wcmVzdXNwZW5kX3RhcmdldHMobWFwKTsKIAkJCWRtX3RhYmxlX3Bvc3RzdXNwZW5kX3RhcmdldHMobWFwKTsKIAkJfQogCQlkbV9zeXNmc19leGl0KG1kKTsKIAkJZG1fdGFibGVfcHV0KG1hcCk7Ci0JCV9fdW5iaW5kKG1kKTsKKwkJZG1fdGFibGVfZGVzdHJveShfX3VuYmluZChtZCkpOwogCQlmcmVlX2RldihtZCk7CiAJfQogfQpAQCAtMjA4MCw4ICsyMTk4LDYgQEAKIHsKIAlpbnQgciA9IDA7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZC0+cXVldWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRtX3VucGx1Z19hbGwobWQtPnF1ZXVlKTsKIApAQCAtMjA5MSwxNSArMjIwNyw3IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKGludGVycnVwdGlibGUpOwogCiAJCXNtcF9tYigpOwotCQlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJCWlmICghcXVldWVfaW5fZmxpZ2h0KHEpICYmIGJsa19xdWV1ZV9zdG9wcGVkKHEpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nWzBdKSAmJgotCQkJCQkhYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nWzFdKSkKKwkJaWYgKCFtZF9pbl9mbGlnaHQobWQpKQogCQkJYnJlYWs7CiAKIAkJaWYgKGludGVycnVwdGlibGUgPT0gVEFTS19JTlRFUlJVUFRJQkxFICYmCkBAIC0yMTk0LDIzICsyMzAyLDkzIEBACiAJcXVldWVfd29yayhtZC0+d3EsICZtZC0+d29yayk7CiB9CiAKLS8qCi0gKiBTd2FwIGluIGEgbmV3IHRhYmxlIChkZXN0cm95aW5nIG9sZCBvbmUpLgotICovCi1pbnQgZG1fc3dhcF90YWJsZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBkbV90YWJsZSAqdGFibGUpCitzdGF0aWMgdm9pZCBkbV9ycV9zZXRfZmx1c2hfbnIoc3RydWN0IHJlcXVlc3QgKmNsb25lLCB1bnNpZ25lZCBmbHVzaF9ucikKIHsKKwlzdHJ1Y3QgZG1fcnFfdGFyZ2V0X2lvICp0aW8gPSBjbG9uZS0+ZW5kX2lvX2RhdGE7CisKKwl0aW8tPmluZm8uZmx1c2hfcmVxdWVzdCA9IGZsdXNoX25yOworfQorCisvKiBJc3N1ZSBiYXJyaWVyIHJlcXVlc3RzIHRvIHRhcmdldHMgYW5kIHdhaXQgZm9yIHRoZWlyIGNvbXBsZXRpb24uICovCitzdGF0aWMgaW50IGRtX3JxX2JhcnJpZXIoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQoreworCWludCBpLCBqOworCXN0cnVjdCBkbV90YWJsZSAqbWFwID0gZG1fZ2V0X2xpdmVfdGFibGUobWQpOworCXVuc2lnbmVkIG51bV90YXJnZXRzID0gZG1fdGFibGVfZ2V0X251bV90YXJnZXRzKG1hcCk7CisJc3RydWN0IGRtX3RhcmdldCAqdGk7CisJc3RydWN0IHJlcXVlc3QgKmNsb25lOworCisJbWQtPmJhcnJpZXJfZXJyb3IgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV90YXJnZXRzOyBpKyspIHsKKwkJdGkgPSBkbV90YWJsZV9nZXRfdGFyZ2V0KG1hcCwgaSk7CisJCWZvciAoaiA9IDA7IGogPCB0aS0+bnVtX2ZsdXNoX3JlcXVlc3RzOyBqKyspIHsKKwkJCWNsb25lID0gY2xvbmVfcnEobWQtPmZsdXNoX3JlcXVlc3QsIG1kLCBHRlBfTk9JTyk7CisJCQlkbV9ycV9zZXRfZmx1c2hfbnIoY2xvbmUsIGopOworCQkJYXRvbWljX2luYygmbWQtPnBlbmRpbmdbcnFfZGF0YV9kaXIoY2xvbmUpXSk7CisJCQltYXBfcmVxdWVzdCh0aSwgY2xvbmUsIG1kKTsKKwkJfQorCX0KKworCWRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwlkbV90YWJsZV9wdXQobWFwKTsKKworCXJldHVybiBtZC0+YmFycmllcl9lcnJvcjsKK30KKworc3RhdGljIHZvaWQgZG1fcnFfYmFycmllcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtYXBwZWRfZGV2aWNlLAorCQkJCQkJYmFycmllcl93b3JrKTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kLT5xdWV1ZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogSG9sZCB0aGUgbWQgcmVmZXJlbmNlIGhlcmUgYW5kIGxlYXZlIGl0IGF0IHRoZSBsYXN0IHBhcnQgc28gdGhhdAorCSAqIHRoZSBtZCBjYW4ndCBiZSBkZWxldGVkIGJ5IGRldmljZSBvcGVuZXIgd2hlbiB0aGUgYmFycmllciByZXF1ZXN0CisJICogY29tcGxldGVzLgorCSAqLworCWRtX2dldChtZCk7CisKKwllcnJvciA9IGRtX3JxX2JhcnJpZXIobWQpOworCisJcnEgPSBtZC0+Zmx1c2hfcmVxdWVzdDsKKwltZC0+Zmx1c2hfcmVxdWVzdCA9IE5VTEw7CisKKwlpZiAoZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgcnEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgZXJyb3IpOworCisJYmxrX3J1bl9xdWV1ZShxKTsKKworCWRtX3B1dChtZCk7Cit9CisKKy8qCisgKiBTd2FwIGluIGEgbmV3IHRhYmxlLCByZXR1cm5pbmcgdGhlIG9sZCBvbmUgZm9yIHRoZSBjYWxsZXIgdG8gZGVzdHJveS4KKyAqLworc3RydWN0IGRtX3RhYmxlICpkbV9zd2FwX3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGRtX3RhYmxlICp0YWJsZSkKK3sKKwlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW1pdHM7Ci0JaW50IHIgPSAtRUlOVkFMOworCWludCByOwogCiAJbXV0ZXhfbG9jaygmbWQtPnN1c3BlbmRfbG9jayk7CiAKIAkvKiBkZXZpY2UgbXVzdCBiZSBzdXNwZW5kZWQgKi8KLQlpZiAoIWRtX3N1c3BlbmRlZChtZCkpCisJaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKQogCQlnb3RvIG91dDsKIAogCXIgPSBkbV9jYWxjdWxhdGVfcXVldWVfbGltaXRzKHRhYmxlLCAmbGltaXRzKTsKLQlpZiAocikKKwlpZiAocikgeworCQltYXAgPSBFUlJfUFRSKHIpOwogCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBjYW5ub3QgY2hhbmdlIHRoZSBkZXZpY2UgdHlwZSwgb25jZSBhIHRhYmxlIGlzIGJvdW5kICovCiAJaWYgKG1kLT5tYXAgJiYKQEAgLTIyMTksNzMgKzIzOTcsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JX191bmJpbmQobWQpOwotCXIgPSBfX2JpbmQobWQsIHRhYmxlLCAmbGltaXRzKTsKKwltYXAgPSBfX2JpbmQobWQsIHRhYmxlLCAmbGltaXRzKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmbWQtPnN1c3BlbmRfbG9jayk7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtX3JxX2ludmFsaWRhdGVfc3VzcGVuZF9tYXJrZXIoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQotewotCW1kLT5zdXNwZW5kX3JxLnNwZWNpYWwgPSAodm9pZCAqKTB4MTsKLX0KLQotc3RhdGljIHZvaWQgZG1fcnFfYWJvcnRfc3VzcGVuZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGludCBub2ZsdXNoKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbWQtPnF1ZXVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JaWYgKCFub2ZsdXNoKQotCQlkbV9ycV9pbnZhbGlkYXRlX3N1c3BlbmRfbWFya2VyKG1kKTsKLQlfX3N0YXJ0X3F1ZXVlKHEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBkbV9ycV9zdGFydF9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgaW50IG5vZmx1c2gpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gJm1kLT5zdXNwZW5kX3JxOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbWQtPnF1ZXVlOwotCi0JaWYgKG5vZmx1c2gpCi0JCXN0b3BfcXVldWUocSk7Ci0JZWxzZSB7Ci0JCWJsa19ycV9pbml0KHEsIHJxKTsKLQkJYmxrX2luc2VydF9yZXF1ZXN0KHEsIHJxLCAwLCBOVUxMKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZG1fcnFfc3VzcGVuZF9hdmFpbGFibGUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgbm9mbHVzaCkKLXsKLQlpbnQgciA9IDE7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gJm1kLT5zdXNwZW5kX3JxOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbWQtPnF1ZXVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobm9mbHVzaCkKLQkJcmV0dXJuIHI7Ci0KLQkvKiBUaGUgbWFya2VyIG11c3QgYmUgcHJvdGVjdGVkIGJ5IHF1ZXVlIGxvY2sgaWYgaXQgaXMgaW4gdXNlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseShycS0+cmVmX2NvdW50KSkgewotCQkvKgotCQkgKiBUaGlzIGNhbiBoYXBwZW4sIHdoZW4gdGhlIHByZXZpb3VzIGZsdXNoIHN1c3BlbmQgd2FzCi0JCSAqIGludGVycnVwdGVkLCB0aGUgbWFya2VyIGlzIHN0aWxsIGluIHRoZSBxdWV1ZSBhbmQKLQkJICogdGhpcyBmbHVzaCBzdXNwZW5kIGhhcyBiZWVuIGludm9rZWQsIGJlY2F1c2Ugd2UgZG9uJ3QKLQkJICogcmVtb3ZlIHRoZSBtYXJrZXIgYXQgdGhlIHRpbWUgb2Ygc3VzcGVuZCBpbnRlcnJ1cHRpb24uCi0JCSAqIFdlIGhhdmUgb25seSBvbmUgbWFya2VyIHBlciBtYXBwZWRfZGV2aWNlLCBzbyB3ZSBjYW4ndAotCQkgKiBzdGFydCBhbm90aGVyIGZsdXNoIHN1c3BlbmQgd2hpbGUgaXQgaXMgaW4gdXNlLgotCQkgKi8KLQkJQlVHX09OKCFycS0+c3BlY2lhbCk7IC8qIFRoZSBtYXJrZXIgc2hvdWxkIGJlIGludmFsaWRhdGVkICovCi0JCURNV0FSTigiSW52YWxpZGF0aW5nIHRoZSBwcmV2aW91cyBmbHVzaCBzdXNwZW5kIGlzIHN0aWxsIGluIgotCQkgICAgICAgIiBwcm9ncmVzcy4gIFBsZWFzZSByZXRyeSBsYXRlci4iKTsKLQkJciA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHI7CisJcmV0dXJuIG1hcDsKIH0KIAogLyoKQEAgLTIzMzAsNDkgKzI0NDYsMTEgQEAKIC8qCiAgKiBTdXNwZW5kIG1lY2hhbmlzbSBpbiByZXF1ZXN0LWJhc2VkIGRtLgogICoKLSAqIEFmdGVyIHRoZSBzdXNwZW5kIHN0YXJ0cywgZnVydGhlciBpbmNvbWluZyByZXF1ZXN0cyBhcmUga2VwdCBpbgotICogdGhlIHJlcXVlc3RfcXVldWUgYW5kIGRlZmVycmVkLgotICogUmVtYWluaW5nIHJlcXVlc3RzIGluIHRoZSByZXF1ZXN0X3F1ZXVlIGF0IHRoZSBzdGFydCBvZiBzdXNwZW5kIGFyZSBmbHVzaGVkCi0gKiBpZiBpdCBpcyBmbHVzaCBzdXNwZW5kLgotICogVGhlIHN1c3BlbmQgY29tcGxldGVzIHdoZW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhhdmUgYmVlbiBzYXRpc2ZpZWQsCi0gKiBzbyB3YWl0IGZvciBpdDoKLSAqICAgIDEuIHEtPmluX2ZsaWdodCBpcyAwICh3aGljaCBtZWFucyBubyBpbl9mbGlnaHQgcmVxdWVzdCkKLSAqICAgIDIuIHF1ZXVlIGhhcyBiZWVuIHN0b3BwZWQgKHdoaWNoIG1lYW5zIG5vIHJlcXVlc3QgZGlzcGF0Y2hpbmcpCisgKiAxLiBGbHVzaCBhbGwgSS9PcyBieSBsb2NrX2ZzKCkgaWYgbmVlZGVkLgorICogMi4gU3RvcCBkaXNwYXRjaGluZyBhbnkgSS9PIGJ5IHN0b3BwaW5nIHRoZSByZXF1ZXN0X3F1ZXVlLgorICogMy4gV2FpdCBmb3IgYWxsIGluLWZsaWdodCBJL09zIHRvIGJlIGNvbXBsZXRlZCBvciByZXF1ZXVlZC4KICAqCi0gKgotICogTm9mbHVzaCBzdXNwZW5kCi0gKiAtLS0tLS0tLS0tLS0tLS0KLSAqIE5vZmx1c2ggc3VzcGVuZCBkb2Vzbid0IG5lZWQgdG8gZGlzcGF0Y2ggcmVtYWluaW5nIHJlcXVlc3RzLgotICogU28gc3RvcCB0aGUgcXVldWUgaW1tZWRpYXRlbHkuICBUaGVuLCB3YWl0IGZvciBhbGwgaW5fZmxpZ2h0IHJlcXVlc3RzCi0gKiB0byBiZSBjb21wbGV0ZWQgb3IgcmVxdWV1ZWQuCi0gKgotICogVG8gYWJvcnQgbm9mbHVzaCBzdXNwZW5kLCBzdGFydCB0aGUgcXVldWUuCi0gKgotICoKLSAqIEZsdXNoIHN1c3BlbmQKLSAqIC0tLS0tLS0tLS0tLS0KLSAqIEZsdXNoIHN1c3BlbmQgbmVlZHMgdG8gZGlzcGF0Y2ggcmVtYWluaW5nIHJlcXVlc3RzLiAgU28gc3RvcCB0aGUgcXVldWUKLSAqIGFmdGVyIHRoZSByZW1haW5pbmcgcmVxdWVzdHMgYXJlIGNvbXBsZXRlZC4gKFJlcXVldWVkIHJlcXVlc3QgbXVzdCBiZSBhbHNvCi0gKiByZS1kaXNwYXRjaGVkIGFuZCBjb21wbGV0ZWQuICBVbnRpbCB0aGVuLCB3ZSBjYW4ndCBzdG9wIHRoZSBxdWV1ZS4pCi0gKgotICogRHVyaW5nIGZsdXNoaW5nIHRoZSByZW1haW5pbmcgcmVxdWVzdHMsIGZ1cnRoZXIgaW5jb21pbmcgcmVxdWVzdHMgYXJlIGFsc28KLSAqIGluc2VydGVkIHRvIHRoZSBzYW1lIHF1ZXVlLiAgVG8gZGlzdGluZ3Vpc2ggd2hpY2ggcmVxdWVzdHMgYXJlIHRvIGJlCi0gKiBmbHVzaGVkLCB3ZSBpbnNlcnQgYSBtYXJrZXIgcmVxdWVzdCB0byB0aGUgcXVldWUgYXQgdGhlIHRpbWUgb2Ygc3RhcnRpbmcKLSAqIGZsdXNoIHN1c3BlbmQsIGxpa2UgYSBiYXJyaWVyLgotICogVGhlIGRpc3BhdGNoaW5nIGlzIGJsb2NrZWQgd2hlbiB0aGUgbWFya2VyIGlzIGZvdW5kIG9uIHRoZSB0b3Agb2YgdGhlIHF1ZXVlLgotICogQW5kIHRoZSBxdWV1ZSBpcyBzdG9wcGVkIHdoZW4gYWxsIGluX2ZsaWdodCByZXF1ZXN0cyBhcmUgY29tcGxldGVkLCBzaW5jZQotICogdGhhdCBtZWFucyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzIGFyZSBjb21wbGV0ZWx5IGZsdXNoZWQuCi0gKiBUaGVuLCB0aGUgbWFya2VyIGlzIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuCi0gKgotICogVG8gYWJvcnQgZmx1c2ggc3VzcGVuZCwgd2UgYWxzbyBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgbWFya2VyLCBub3Qgb25seQotICogc3RhcnRpbmcgdGhlIHF1ZXVlLgotICogV2UgZG9uJ3QgcmVtb3ZlIHRoZSBtYXJrZXIgZm9yY2libHkgZnJvbSB0aGUgcXVldWUgc2luY2UgaXQncyBhZ2FpbnN0Ci0gKiB0aGUgYmxvY2stbGF5ZXIgbWFubmVyLiAgSW5zdGVhZCwgd2UgcHV0IGEgaW52YWxpZGF0ZWQgbWFyayBvbiB0aGUgbWFya2VyLgotICogV2hlbiB0aGUgaW52YWxpZGF0ZWQgbWFya2VyIGlzIGZvdW5kIG9uIHRoZSB0b3Agb2YgdGhlIHF1ZXVlLCBpdCBpcwotICogaW1tZWRpYXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSwgc28gaXQgZG9lc24ndCBibG9jayBkaXNwYXRjaGluZy4KLSAqIEJlY2F1c2Ugd2UgaGF2ZSBvbmx5IG9uZSBtYXJrZXIgcGVyIG1hcHBlZF9kZXZpY2UsIHdlIGNhbid0IHN0YXJ0IGFub3RoZXIKLSAqIGZsdXNoIHN1c3BlbmQgdW50aWwgdGhlIGludmFsaWRhdGVkIG1hcmtlciBpcyByZW1vdmVkIGZyb20gdGhlIHF1ZXVlLgotICogU28gZmFpbCBhbmQgcmV0dXJuIHdpdGggLUVCVVNZIGluIHN1Y2ggYSBjYXNlLgorICogVG8gYWJvcnQgc3VzcGVuZCwgc3RhcnQgdGhlIHJlcXVlc3RfcXVldWUuCiAgKi8KIGludCBkbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgdW5zaWduZWQgc3VzcGVuZF9mbGFncykKIHsKQEAgLTIzODMsMTcgKzI0NjEsMTIgQEAKIAogCW11dGV4X2xvY2soJm1kLT5zdXNwZW5kX2xvY2spOwogCi0JaWYgKGRtX3N1c3BlbmRlZChtZCkpIHsKKwlpZiAoZG1fc3VzcGVuZGVkX21kKG1kKSkgewogCQlyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSAmJiAhZG1fcnFfc3VzcGVuZF9hdmFpbGFibGUobWQsIG5vZmx1c2gpKSB7Ci0JCXIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQltYXAgPSBkbV9nZXRfdGFibGUobWQpOworCW1hcCA9IGRtX2dldF9saXZlX3RhYmxlKG1kKTsKIAogCS8qCiAJICogRE1GX05PRkxVU0hfU1VTUEVORElORyBtdXN0IGJlIHNldCBiZWZvcmUgcHJlc3VzcGVuZC4KQEAgLTI0MDYsOCArMjQ3OSwxMCBAQAogCWRtX3RhYmxlX3ByZXN1c3BlbmRfdGFyZ2V0cyhtYXApOwogCiAJLyoKLQkgKiBGbHVzaCBJL08gdG8gdGhlIGRldmljZS4gbm9mbHVzaCBzdXBlcnNlZGVzIGRvX2xvY2tmcywKLQkgKiBiZWNhdXNlIGxvY2tfZnMoKSBuZWVkcyB0byBmbHVzaCBJL09zLgorCSAqIEZsdXNoIEkvTyB0byB0aGUgZGV2aWNlLgorCSAqIEFueSBJL08gc3VibWl0dGVkIGFmdGVyIGxvY2tfZnMoKSBtYXkgbm90IGJlIGZsdXNoZWQuCisJICogbm9mbHVzaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZG9fbG9ja2ZzLgorCSAqIChsb2NrX2ZzKCkgZmx1c2hlcyBJL09zIGFuZCB3YWl0cyBmb3IgdGhlbSB0byBjb21wbGV0ZS4pCiAJICovCiAJaWYgKCFub2ZsdXNoICYmIGRvX2xvY2tmcykgewogCQlyID0gbG9ja19mcyhtZCk7CkBAIC0yNDM2LDEwICsyNTExLDE1IEBACiAJc2V0X2JpdChETUZfUVVFVUVfSU9fVE9fVEhSRUFELCAmbWQtPmZsYWdzKTsKIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogCi0JZmx1c2hfd29ya3F1ZXVlKG1kLT53cSk7Ci0KKwkvKgorCSAqIFJlcXVlc3QtYmFzZWQgZG0gdXNlcyBtZC0+d3EgZm9yIGJhcnJpZXIgKGRtX3JxX2JhcnJpZXJfd29yaykgd2hpY2gKKwkgKiBjYW4gYmUga2lja2VkIHVudGlsIG1kLT5xdWV1ZSBpcyBzdG9wcGVkLiAgU28gc3RvcCBtZC0+cXVldWUgYmVmb3JlCisJICogZmx1c2hpbmcgbWQtPndxLgorCSAqLwogCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKLQkJZG1fcnFfc3RhcnRfc3VzcGVuZChtZCwgbm9mbHVzaCk7CisJCXN0b3BfcXVldWUobWQtPnF1ZXVlKTsKKworCWZsdXNoX3dvcmtxdWV1ZShtZC0+d3EpOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IG5vIG1vcmUgcmVxdWVzdHMgYXJlIGVudGVyaW5nIHRhcmdldCByZXF1ZXN0IHJvdXRpbmVzLgpAQCAtMjQ1OCw3ICsyNTM4LDcgQEAKIAkJZG1fcXVldWVfZmx1c2gobWQpOwogCiAJCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKLQkJCWRtX3JxX2Fib3J0X3N1c3BlbmQobWQsIG5vZmx1c2gpOworCQkJc3RhcnRfcXVldWUobWQtPnF1ZXVlKTsKIAogCQl1bmxvY2tfZnMobWQpOwogCQlnb3RvIG91dDsgLyogcHVzaGJhY2sgbGlzdCBpcyBhbHJlYWR5IGZsdXNoZWQsIHNvIHNraXAgZmx1c2ggKi8KQEAgLTI0NzAsMTAgKzI1NTAsMTAgQEAKIAkgKiByZXF1ZXN0cyBhcmUgYmVpbmcgYWRkZWQgdG8gbWQtPmRlZmVycmVkIGxpc3QuCiAJICovCiAKLQlkbV90YWJsZV9wb3N0c3VzcGVuZF90YXJnZXRzKG1hcCk7Ci0KIAlzZXRfYml0KERNRl9TVVNQRU5ERUQsICZtZC0+ZmxhZ3MpOwogCisJZG1fdGFibGVfcG9zdHN1c3BlbmRfdGFyZ2V0cyhtYXApOworCiBvdXQ6CiAJZG1fdGFibGVfcHV0KG1hcCk7CiAKQEAgLTI0ODgsMTAgKzI1NjgsMTAgQEAKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CiAKIAltdXRleF9sb2NrKCZtZC0+c3VzcGVuZF9sb2NrKTsKLQlpZiAoIWRtX3N1c3BlbmRlZChtZCkpCisJaWYgKCFkbV9zdXNwZW5kZWRfbWQobWQpKQogCQlnb3RvIG91dDsKIAotCW1hcCA9IGRtX2dldF90YWJsZShtZCk7CisJbWFwID0gZG1fZ2V0X2xpdmVfdGFibGUobWQpOwogCWlmICghbWFwIHx8ICFkbV90YWJsZV9nZXRfc2l6ZShtYXApKQogCQlnb3RvIG91dDsKIApAQCAtMjU5MiwxOCArMjY3MiwyOSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmICh0ZXN0X2JpdChETUZfRlJFRUlORywgJm1kLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoRE1GX0RFTEVUSU5HLCAmbWQtPmZsYWdzKSkKKwkgICAgZG1fZGVsZXRpbmdfbWQobWQpKQogCQlyZXR1cm4gTlVMTDsKIAogCWRtX2dldChtZCk7CiAJcmV0dXJuIG1kOwogfQogCi1pbnQgZG1fc3VzcGVuZGVkKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK2ludCBkbV9zdXNwZW5kZWRfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewogCXJldHVybiB0ZXN0X2JpdChETUZfU1VTUEVOREVELCAmbWQtPmZsYWdzKTsKIH0KIAoraW50IGRtX3N1c3BlbmRlZChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKK3sKKwlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBkbV90YWJsZV9nZXRfbWQodGktPnRhYmxlKTsKKwlpbnQgciA9IGRtX3N1c3BlbmRlZF9tZChtZCk7CisKKwlkbV9wdXQobWQpOworCisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9zdXNwZW5kZWQpOworCiBpbnQgZG1fbm9mbHVzaF9zdXNwZW5kaW5nKHN0cnVjdCBkbV90YXJnZXQgKnRpKQogewogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGRtX3RhYmxlX2dldF9tZCh0aS0+dGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IGE3NjYzZWIuLjhkYWRhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTg5LDYgKzg5LDE2IEBACiBpbnQgZG1fc3BsaXRfYXJncyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndnAsIGNoYXIgKmlucHV0KTsKIAogLyoKKyAqIElzIHRoaXMgbWFwcGVkX2RldmljZSBiZWluZyBkZWxldGVkPworICovCitpbnQgZG1fZGVsZXRpbmdfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKKworLyoKKyAqIElzIHRoaXMgbWFwcGVkX2RldmljZSBzdXNwZW5kZWQ/CisgKi8KK2ludCBkbV9zdXNwZW5kZWRfbWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKKworLyoKICAqIFRoZSBkZXZpY2UtbWFwcGVyIGNhbiBiZSBkcml2ZW4gdGhyb3VnaCBvbmUgb2YgdHdvIGludGVyZmFjZXM7CiAgKiBpb2N0bCBvciBmaWxlc3lzdGVtLCBkZXBlbmRpbmcgd2hpY2ggcGF0Y2ggeW91IGhhdmUgYXBwbGllZC4KICAqLwpAQCAtMTE4LDYgKzEyOCw5IEBACiB2b2lkIGRtX2tvYmplY3RfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCiAJCSAgICAgICB1bnNpZ25lZCBjb29raWUpOwogCitpbnQgZG1faW9faW5pdCh2b2lkKTsKK3ZvaWQgZG1faW9fZXhpdCh2b2lkKTsKKwogaW50IGRtX2tjb3B5ZF9pbml0KHZvaWQpOwogdm9pZCBkbV9rY29weWRfZXhpdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9mYXVsdHkuYyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKaW5kZXggODdkODhkYi4uNzEzYWNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9mYXVsdHkuYworKysgYi9kcml2ZXJzL21kL2ZhdWx0eS5jCkBAIC0zNjAsNiArMzYwLDcgQEAKIG1vZHVsZV9pbml0KHJhaWRfaW5pdCk7CiBtb2R1bGVfZXhpdChyYWlkX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGYXVsdCBpbmplY3Rpb24gcGVyc29uYWxpdHkgZm9yIE1EIik7CiBNT0RVTEVfQUxJQVMoIm1kLXBlcnNvbmFsaXR5LTEwIik7IC8qIGZhdWx0eSAqLwogTU9EVUxFX0FMSUFTKCJtZC1mYXVsdHkiKTsKIE1PRFVMRV9BTElBUygibWQtbGV2ZWwtLTUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IDFjZWNlYjMuLjAwNDM1YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJaW50IGNwdTsKIAogCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKLQkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOworCQltZF9iYXJyaWVyX3JlcXVlc3QobWRkZXYsIGJpbyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzgzLDYgKzM4Myw3IEBACiBtb2R1bGVfaW5pdChsaW5lYXJfaW5pdCk7CiBtb2R1bGVfZXhpdChsaW5lYXJfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbmVhciBkZXZpY2UgY29uY2F0ZW5hdGlvbiBwZXJzb25hbGl0eSBmb3IgTUQiKTsKIE1PRFVMRV9BTElBUygibWQtcGVyc29uYWxpdHktMSIpOyAvKiBMSU5FQVIgLSBkZXByZWNhdGVkKi8KIE1PRFVMRV9BTElBUygibWQtbGluZWFyIik7CiBNT0RVTEVfQUxJQVMoIm1kLWxldmVsLS0xIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggNWYxNTRlZi4uZjRmNWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4gLyogZm9yIGludmFsaWRhdGVfYmRldiAqLwogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgpAQCAtNjgsNiArNzAsMTIgQEAKICNkZWZpbmUgTURfQlVHKHguLi4pIHsgcHJpbnRrKCJtZDogYnVnIGluIGZpbGUgJXMsIGxpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IG1kX3ByaW50X2RldmljZXMoKTsgfQogCiAvKgorICogRGVmYXVsdCBudW1iZXIgb2YgcmVhZCBjb3JyZWN0aW9ucyB3ZSdsbCBhdHRlbXB0IG9uIGFuIHJkZXYKKyAqIGJlZm9yZSBlamVjdGluZyBpdCBmcm9tIHRoZSBhcnJheS4gV2UgZGl2aWRlIHRoZSByZWFkIGVycm9yCisgKiBjb3VudCBieSAyIGZvciBldmVyeSBob3VyIGVsYXBzZWQgYmV0d2VlbiByZWFkIGVycm9ycy4KKyAqLworI2RlZmluZSBNRF9ERUZBVUxUX01BWF9DT1JSRUNURURfUkVBRF9FUlJPUlMgMjAKKy8qCiAgKiBDdXJyZW50IFJBSUQtMSw0LDUgcGFyYWxsZWwgcmVjb25zdHJ1Y3Rpb24gJ2d1YXJhbnRlZWQgc3BlZWQgbGltaXQnCiAgKiBpcyAxMDAwIEtCL3NlYywgc28gdGhlIGV4dHJhIHN5c3RlbSBsb2FkIGRvZXMgbm90IHNob3cgdXAgdGhhdCBtdWNoLgogICogSW5jcmVhc2UgaXQgaWYgeW91IHdhbnQgdG8gaGF2ZSBtb3JlIF9ndWFyYW50ZWVkXyBzcGVlZC4gTm90ZSB0aGF0CkBAIC0yMTMsMTIgKzIyMSwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAJcmN1X3JlYWRfbG9jaygpOwotCWlmIChtZGRldi0+c3VzcGVuZGVkKSB7CisJaWYgKG1kZGV2LT5zdXNwZW5kZWQgfHwgbWRkZXYtPmJhcnJpZXIpIHsKIAkJREVGSU5FX1dBSVQoX193YWl0KTsKIAkJZm9yICg7OykgewogCQkJcHJlcGFyZV90b193YWl0KCZtZGRldi0+c2Jfd2FpdCwgJl9fd2FpdCwKIAkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJaWYgKCFtZGRldi0+c3VzcGVuZGVkKQorCQkJaWYgKCFtZGRldi0+c3VzcGVuZGVkICYmICFtZGRldi0+YmFycmllcikKIAkJCQlicmVhazsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJc2NoZWR1bGUoKTsKQEAgLTI2MCwxMCArMjY4LDExMCBAQAogCiBpbnQgbWRkZXZfY29uZ2VzdGVkKG1kZGV2X3QgKm1kZGV2LCBpbnQgYml0cykKIHsKKwlpZiAobWRkZXYtPmJhcnJpZXIpCisJCXJldHVybiAxOwogCXJldHVybiBtZGRldi0+c3VzcGVuZGVkOwogfQogRVhQT1JUX1NZTUJPTChtZGRldl9jb25nZXN0ZWQpOwogCisvKgorICogR2VuZXJpYyBiYXJyaWVyIGhhbmRsaW5nIGZvciBtZAorICovCisKKyNkZWZpbmUgUE9TVF9SRVFVRVNUX0JBUlJJRVIgKCh2b2lkKikxKQorCitzdGF0aWMgdm9pZCBtZF9lbmRfYmFycmllcihzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCit7CisJbWRrX3JkZXZfdCAqcmRldiA9IGJpby0+YmlfcHJpdmF0ZTsKKwltZGRldl90ICptZGRldiA9IHJkZXYtPm1kZGV2OworCWlmIChlcnIgPT0gLUVPUE5PVFNVUFAgJiYgbWRkZXYtPmJhcnJpZXIgIT0gUE9TVF9SRVFVRVNUX0JBUlJJRVIpCisJCXNldF9iaXQoQklPX0VPUE5PVFNVUFAsICZtZGRldi0+YmFycmllci0+YmlfZmxhZ3MpOworCisJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWRkZXYtPmZsdXNoX3BlbmRpbmcpKSB7CisJCWlmIChtZGRldi0+YmFycmllciA9PSBQT1NUX1JFUVVFU1RfQkFSUklFUikgeworCQkJLyogVGhpcyB3YXMgYSBwb3N0LXJlcXVlc3QgYmFycmllciAqLworCQkJbWRkZXYtPmJhcnJpZXIgPSBOVUxMOworCQkJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOworCQl9IGVsc2UKKwkJCS8qIFRoZSBwcmUtcmVxdWVzdCBiYXJyaWVyIGhhcyBmaW5pc2hlZCAqLworCQkJc2NoZWR1bGVfd29yaygmbWRkZXYtPmJhcnJpZXJfd29yayk7CisJfQorCWJpb19wdXQoYmlvKTsKK30KKworc3RhdGljIHZvaWQgc3VibWl0X2JhcnJpZXJzKG1kZGV2X3QgKm1kZGV2KQoreworCW1ka19yZGV2X3QgKnJkZXY7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCisJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgorCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJLyogVGFrZSB0d28gcmVmZXJlbmNlcywgb25lIGlzIGRyb3BwZWQKKwkJCSAqIHdoZW4gcmVxdWVzdCBmaW5pc2hlcywgb25lIGFmdGVyCisJCQkgKiB3ZSByZWNsYWltIHJjdV9yZWFkX2xvY2sKKwkJCSAqLworCQkJc3RydWN0IGJpbyAqYmk7CisJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKKwkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQliaSA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCAwKTsKKwkJCWJpLT5iaV9lbmRfaW8gPSBtZF9lbmRfYmFycmllcjsKKwkJCWJpLT5iaV9wcml2YXRlID0gcmRldjsKKwkJCWJpLT5iaV9iZGV2ID0gcmRldi0+YmRldjsKKwkJCWF0b21pY19pbmMoJm1kZGV2LT5mbHVzaF9wZW5kaW5nKTsKKwkJCXN1Ym1pdF9iaW8oV1JJVEVfQkFSUklFUiwgYmkpOworCQkJcmN1X3JlYWRfbG9jaygpOworCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBtZGRldik7CisJCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgbWRfc3VibWl0X2JhcnJpZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK3sKKwltZGRldl90ICptZGRldiA9IGNvbnRhaW5lcl9vZih3cywgbWRkZXZfdCwgYmFycmllcl93b3JrKTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBtZGRldi0+YmFycmllcjsKKworCWF0b21pY19zZXQoJm1kZGV2LT5mbHVzaF9wZW5kaW5nLCAxKTsKKworCWlmICh0ZXN0X2JpdChCSU9fRU9QTk9UU1VQUCwgJmJpby0+YmlfZmxhZ3MpKQorCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CisJZWxzZSBpZiAoYmlvLT5iaV9zaXplID09IDApCisJCS8qIGFuIGVtcHR5IGJhcnJpZXIgLSBhbGwgZG9uZSAqLworCQliaW9fZW5kaW8oYmlvLCAwKTsKKwllbHNlIHsKKwkJYmlvLT5iaV9ydyAmPSB+KDE8PEJJT19SV19CQVJSSUVSKTsKKwkJaWYgKG1kZGV2LT5wZXJzLT5tYWtlX3JlcXVlc3QobWRkZXYtPnF1ZXVlLCBiaW8pKQorCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwkJbWRkZXYtPmJhcnJpZXIgPSBQT1NUX1JFUVVFU1RfQkFSUklFUjsKKwkJc3VibWl0X2JhcnJpZXJzKG1kZGV2KTsKKwl9CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1kZGV2LT5mbHVzaF9wZW5kaW5nKSkgeworCQltZGRldi0+YmFycmllciA9IE5VTEw7CisJCXdha2VfdXAoJm1kZGV2LT5zYl93YWl0KTsKKwl9Cit9CisKK3ZvaWQgbWRfYmFycmllcl9yZXF1ZXN0KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3Bpbl9sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOworCXdhaXRfZXZlbnRfbG9ja19pcnEobWRkZXYtPnNiX3dhaXQsCisJCQkgICAgIW1kZGV2LT5iYXJyaWVyLAorCQkJICAgIG1kZGV2LT53cml0ZV9sb2NrLCAvKm5vdGhpbmcqLyk7CisJbWRkZXYtPmJhcnJpZXIgPSBiaW87CisJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CisKKwlhdG9taWNfc2V0KCZtZGRldi0+Zmx1c2hfcGVuZGluZywgMSk7CisJSU5JVF9XT1JLKCZtZGRldi0+YmFycmllcl93b3JrLCBtZF9zdWJtaXRfYmFycmllcik7CisKKwlzdWJtaXRfYmFycmllcnMobWRkZXYpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1kZGV2LT5mbHVzaF9wZW5kaW5nKSkKKwkJc2NoZWR1bGVfd29yaygmbWRkZXYtPmJhcnJpZXJfd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKG1kX2JhcnJpZXJfcmVxdWVzdCk7CiAKIHN0YXRpYyBpbmxpbmUgbWRkZXZfdCAqbWRkZXZfZ2V0KG1kZGV2X3QgKm1kZGV2KQogewpAQCAtMzYzLDYgKzQ3MSw3IEBACiAKIAltdXRleF9pbml0KCZuZXctPm9wZW5fbXV0ZXgpOwogCW11dGV4X2luaXQoJm5ldy0+cmVjb25maWdfbXV0ZXgpOworCW11dGV4X2luaXQoJm5ldy0+Yml0bWFwX2luZm8ubXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZuZXctPmRpc2tzKTsKIAlJTklUX0xJU1RfSEVBRCgmbmV3LT5hbGxfbWRkZXZzKTsKIAlpbml0X3RpbWVyKCZuZXctPnNhZmVtb2RlX3RpbWVyKTsKQEAgLTM3MCw2ICs0NzksNyBAQAogCWF0b21pY19zZXQoJm5ldy0+b3BlbmVycywgMCk7CiAJYXRvbWljX3NldCgmbmV3LT5hY3RpdmVfaW8sIDApOwogCXNwaW5fbG9ja19pbml0KCZuZXctPndyaXRlX2xvY2spOworCWF0b21pY19zZXQoJm5ldy0+Zmx1c2hfcGVuZGluZywgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbmV3LT5zYl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXctPnJlY292ZXJ5X3dhaXQpOwogCW5ldy0+cmVzaGFwZV9wb3NpdGlvbiA9IE1heFNlY3RvcjsKQEAgLTc0OCw3ICs4NTgsNyBAQAogICovCiBpbnQgbWRfY2hlY2tfbm9fYml0bWFwKG1kZGV2X3QgKm1kZGV2KQogewotCWlmICghbWRkZXYtPmJpdG1hcF9maWxlICYmICFtZGRldi0+Yml0bWFwX29mZnNldCkKKwlpZiAoIW1kZGV2LT5iaXRtYXBfaW5mby5maWxlICYmICFtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KQogCQlyZXR1cm4gMDsKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBiaXRtYXBzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciAlc1xuIiwKIAkJbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnBlcnMtPm5hbWUpOwpAQCAtODc2LDggKzk4Niw4IEBACiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gc2ItPnJhaWRfZGlza3M7CiAJCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNiLT5zaXplICogMjsKIAkJbWRkZXYtPmV2ZW50cyA9IGV2MTsKLQkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSAwOwotCQltZGRldi0+ZGVmYXVsdF9iaXRtYXBfb2Zmc2V0ID0gTURfU0JfQllURVMgPj4gOTsKKwkJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDA7CisJCW1kZGV2LT5iaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldCA9IE1EX1NCX0JZVEVTID4+IDk7CiAKIAkJaWYgKG1kZGV2LT5taW5vcl92ZXJzaW9uID49IDkxKSB7CiAJCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IHNiLT5yZXNoYXBlX3Bvc2l0aW9uOwpAQCAtOTExLDggKzEwMjEsOSBAQAogCQltZGRldi0+bWF4X2Rpc2tzID0gTURfU0JfRElTS1M7CiAKIAkJaWYgKHNiLT5zdGF0ZSAmICgxPDxNRF9TQl9CSVRNQVBfUFJFU0VOVCkgJiYKLQkJICAgIG1kZGV2LT5iaXRtYXBfZmlsZSA9PSBOVUxMKQotCQkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSBtZGRldi0+ZGVmYXVsdF9iaXRtYXBfb2Zmc2V0OworCQkgICAgbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUgPT0gTlVMTCkKKwkJCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPQorCQkJCW1kZGV2LT5iaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldDsKIAogCX0gZWxzZSBpZiAobWRkZXYtPnBlcnMgPT0gTlVMTCkgewogCQkvKiBJbnNpc3Qgb24gZ29vZCBldmVudCBjb3VudGVyIHdoaWxlIGFzc2VtYmxpbmcgKi8KQEAgLTEwMjksNyArMTE0MCw3IEBACiAJc2ItPmxheW91dCA9IG1kZGV2LT5sYXlvdXQ7CiAJc2ItPmNodW5rX3NpemUgPSBtZGRldi0+Y2h1bmtfc2VjdG9ycyA8PCA5OwogCi0JaWYgKG1kZGV2LT5iaXRtYXAgJiYgbWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwpCisJaWYgKG1kZGV2LT5iaXRtYXAgJiYgbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUgPT0gTlVMTCkKIAkJc2ItPnN0YXRlIHw9ICgxPDxNRF9TQl9CSVRNQVBfUFJFU0VOVCk7CiAKIAlzYi0+ZGlza3NbMF0uc3RhdGUgPSAoMTw8TURfRElTS19SRU1PVkVEKTsKQEAgLTExMDcsNyArMTIxOCw3IEBACiB7CiAJaWYgKG51bV9zZWN0b3JzICYmIG51bV9zZWN0b3JzIDwgcmRldi0+bWRkZXYtPmRldl9zZWN0b3JzKQogCQlyZXR1cm4gMDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLwotCWlmIChyZGV2LT5tZGRldi0+Yml0bWFwX29mZnNldCkKKwlpZiAocmRldi0+bWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCkKIAkJcmV0dXJuIDA7IC8qIGNhbid0IG1vdmUgYml0bWFwICovCiAJcmRldi0+c2Jfc3RhcnQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKIAlpZiAoIW51bV9zZWN0b3JzIHx8IG51bV9zZWN0b3JzID4gcmRldi0+c2Jfc3RhcnQpCkBAIC0xMjg2LDggKzEzOTcsOCBAQAogCQltZGRldi0+cmFpZF9kaXNrcyA9IGxlMzJfdG9fY3B1KHNiLT5yYWlkX2Rpc2tzKTsKIAkJbWRkZXYtPmRldl9zZWN0b3JzID0gbGU2NF90b19jcHUoc2ItPnNpemUpOwogCQltZGRldi0+ZXZlbnRzID0gZXYxOwotCQltZGRldi0+Yml0bWFwX29mZnNldCA9IDA7Ci0JCW1kZGV2LT5kZWZhdWx0X2JpdG1hcF9vZmZzZXQgPSAxMDI0ID4+IDk7CisJCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPSAwOworCQltZGRldi0+Yml0bWFwX2luZm8uZGVmYXVsdF9vZmZzZXQgPSAxMDI0ID4+IDk7CiAJCQogCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBsZTY0X3RvX2NwdShzYi0+cmVzeW5jX29mZnNldCk7CiAJCW1lbWNweShtZGRldi0+dXVpZCwgc2ItPnNldF91dWlkLCAxNik7CkBAIC0xMjk1LDggKzE0MDYsOSBAQAogCQltZGRldi0+bWF4X2Rpc2tzID0gICg0MDk2LTI1NikvMjsKIAogCQlpZiAoKGxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX21hcCkgJiBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQpICYmCi0JCSAgICBtZGRldi0+Yml0bWFwX2ZpbGUgPT0gTlVMTCApCi0JCQltZGRldi0+Yml0bWFwX29mZnNldCA9IChfX3MzMilsZTMyX3RvX2NwdShzYi0+Yml0bWFwX29mZnNldCk7CisJCSAgICBtZGRldi0+Yml0bWFwX2luZm8uZmlsZSA9PSBOVUxMICkKKwkJCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPQorCQkJCShfX3MzMilsZTMyX3RvX2NwdShzYi0+Yml0bWFwX29mZnNldCk7CiAKIAkJaWYgKChsZTMyX3RvX2NwdShzYi0+ZmVhdHVyZV9tYXApICYgTURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRSkpIHsKIAkJCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gbGU2NF90b19jcHUoc2ItPnJlc2hhcGVfcG9zaXRpb24pOwpAQCAtMTM5MCwxOSArMTUwMiwxNyBAQAogCXNiLT5sZXZlbCA9IGNwdV90b19sZTMyKG1kZGV2LT5sZXZlbCk7CiAJc2ItPmxheW91dCA9IGNwdV90b19sZTMyKG1kZGV2LT5sYXlvdXQpOwogCi0JaWYgKG1kZGV2LT5iaXRtYXAgJiYgbWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwpIHsKLQkJc2ItPmJpdG1hcF9vZmZzZXQgPSBjcHVfdG9fbGUzMigoX191MzIpbWRkZXYtPmJpdG1hcF9vZmZzZXQpOworCWlmIChtZGRldi0+Yml0bWFwICYmIG1kZGV2LT5iaXRtYXBfaW5mby5maWxlID09IE5VTEwpIHsKKwkJc2ItPmJpdG1hcF9vZmZzZXQgPSBjcHVfdG9fbGUzMigoX191MzIpbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCk7CiAJCXNiLT5mZWF0dXJlX21hcCA9IGNwdV90b19sZTMyKE1EX0ZFQVRVUkVfQklUTUFQX09GRlNFVCk7CiAJfQogCiAJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCWlmIChyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPiAwKSB7Ci0JCQlzYi0+ZmVhdHVyZV9tYXAgfD0KLQkJCQljcHVfdG9fbGUzMihNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCk7Ci0JCQlzYi0+cmVjb3Zlcnlfb2Zmc2V0ID0KLQkJCQljcHVfdG9fbGU2NChyZGV2LT5yZWNvdmVyeV9vZmZzZXQpOwotCQl9CisJCXNiLT5mZWF0dXJlX21hcCB8PQorCQkJY3B1X3RvX2xlMzIoTURfRkVBVFVSRV9SRUNPVkVSWV9PRkZTRVQpOworCQlzYi0+cmVjb3Zlcnlfb2Zmc2V0ID0KKwkJCWNwdV90b19sZTY0KHJkZXYtPnJlY292ZXJ5X29mZnNldCk7CiAJfQogCiAJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikgewpAQCAtMTQzNiw3ICsxNTQ2LDcgQEAKIAkJCXNiLT5kZXZfcm9sZXNbaV0gPSBjcHVfdG9fbGUxNigweGZmZmUpOwogCQllbHNlIGlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKSkKIAkJCXNiLT5kZXZfcm9sZXNbaV0gPSBjcHVfdG9fbGUxNihyZGV2Mi0+cmFpZF9kaXNrKTsKLQkJZWxzZSBpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHJkZXYyLT5yZWNvdmVyeV9vZmZzZXQgPiAwKQorCQllbHNlIGlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDApCiAJCQlzYi0+ZGV2X3JvbGVzW2ldID0gY3B1X3RvX2xlMTYocmRldjItPnJhaWRfZGlzayk7CiAJCWVsc2UKIAkJCXNiLT5kZXZfcm9sZXNbaV0gPSBjcHVfdG9fbGUxNigweGZmZmYpOwpAQCAtMTQ1OCw3ICsxNTY4LDcgQEAKIAkJbWF4X3NlY3RvcnMgLT0gcmRldi0+ZGF0YV9vZmZzZXQ7CiAJCWlmICghbnVtX3NlY3RvcnMgfHwgbnVtX3NlY3RvcnMgPiBtYXhfc2VjdG9ycykKIAkJCW51bV9zZWN0b3JzID0gbWF4X3NlY3RvcnM7Ci0JfSBlbHNlIGlmIChyZGV2LT5tZGRldi0+Yml0bWFwX29mZnNldCkgeworCX0gZWxzZSBpZiAocmRldi0+bWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCkgewogCQkvKiBtaW5vciB2ZXJzaW9uIDAgd2l0aCBiaXRtYXAgd2UgY2FuJ3QgbW92ZSAqLwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewpAQCAtMTgyNiwxNSArMTkzNiwxMSBAQAogCiAJdXVpZCA9IHNiLT5zZXRfdXVpZDsKIAlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJtZDogIFNCOiAoVjoldSkgKEY6MHglMDh4KSBBcnJheS1JRDo8JTAyeCUwMnglMDJ4JTAyeCIKLQkgICAgICAgIjolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMng+XG4iCisJICAgICAgICJtZDogIFNCOiAoVjoldSkgKEY6MHglMDh4KSBBcnJheS1JRDo8JXBVPlxuIgogCSAgICAgICAibWQ6ICAgIE5hbWU6IFwiJXNcIiBDVDolbGx1XG4iLAogCQlsZTMyX3RvX2NwdShzYi0+bWFqb3JfdmVyc2lvbiksCiAJCWxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX21hcCksCi0JCXV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sCi0JCXV1aWRbNF0sIHV1aWRbNV0sIHV1aWRbNl0sIHV1aWRbN10sCi0JCXV1aWRbOF0sIHV1aWRbOV0sIHV1aWRbMTBdLCB1dWlkWzExXSwKLQkJdXVpZFsxMl0sIHV1aWRbMTNdLCB1dWlkWzE0XSwgdXVpZFsxNV0sCisJCXV1aWQsCiAJCXNiLT5zZXRfbmFtZSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShzYi0+Y3RpbWUpCiAJCSAgICAgICAmIE1EX1NVUEVSQkxPQ0tfMV9USU1FX1NFQ19NQVNLKTsKQEAgLTE4NDMsOCArMTk0OSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAibWQ6ICAgICAgIEwldSBTWiVsbHUgUkQ6JXUgTE86JXUgQ1M6JXUgRE86JWxsdSBEUzolbGx1IFNPOiVsbHUiCiAJCQkiIFJPOiVsbHVcbiIKLQkgICAgICAgIm1kOiAgICAgRGV2OiUwOHggVVVJRDogJTAyeCUwMnglMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeCIKLQkgICAgICAgICAgICAgICAgIjolMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIKKwkgICAgICAgIm1kOiAgICAgRGV2OiUwOHggVVVJRDogJXBVXG4iCiAJICAgICAgICJtZDogICAgICAgKEY6MHglMDh4KSBVVDolbGx1IEV2ZW50czolbGx1IFJlc3luY09mZnNldDolbGx1IENTVU06MHglMDh4XG4iCiAJICAgICAgICJtZDogICAgICAgICAoTWF4RGV2OiV1KSBcbiIsCiAJCWxlMzJfdG9fY3B1KHNiLT5sZXZlbCksCkBAIC0xODU3LDEwICsxOTYyLDcgQEAKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShzYi0+c3VwZXJfb2Zmc2V0KSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShzYi0+cmVjb3Zlcnlfb2Zmc2V0KSwKIAkJbGUzMl90b19jcHUoc2ItPmRldl9udW1iZXIpLAotCQl1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLAotCQl1dWlkWzRdLCB1dWlkWzVdLCB1dWlkWzZdLCB1dWlkWzddLAotCQl1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVpZFsxMV0sCi0JCXV1aWRbMTJdLCB1dWlkWzEzXSwgdXVpZFsxNF0sIHV1aWRbMTVdLAorCQl1dWlkLAogCQlzYi0+ZGV2ZmxhZ3MsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoc2ItPnV0aW1lKSAmIE1EX1NVUEVSQkxPQ0tfMV9USU1FX1NFQ19NQVNLLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHNiLT5ldmVudHMpLApAQCAtMjQ0MiwxMiArMjU0NCw0OSBAQAogc3RhdGljIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHJkZXZfc2l6ZSA9CiBfX0FUVFIoc2l6ZSwgU19JUlVHT3xTX0lXVVNSLCByZGV2X3NpemVfc2hvdywgcmRldl9zaXplX3N0b3JlKTsKIAorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zaG93KG1ka19yZGV2X3QgKnJkZXYsIGNoYXIgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0ID0gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0OworCisJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgfHwKKwkgICAgcmVjb3Zlcnlfc3RhcnQgPT0gTWF4U2VjdG9yKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAibm9uZVxuIik7CisKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgcmVjb3Zlcnlfc3RhcnQpOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyeV9zdGFydF9zdG9yZShtZGtfcmRldl90ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlY292ZXJ5X3N0YXJ0OworCisJaWYgKGNtZF9tYXRjaChidWYsICJub25lIikpCisJCXJlY292ZXJ5X3N0YXJ0ID0gTWF4U2VjdG9yOworCWVsc2UgaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDEwLCAmcmVjb3Zlcnlfc3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZGV2LT5tZGRldi0+cGVycyAmJgorCSAgICByZGV2LT5yYWlkX2Rpc2sgPj0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IHJlY292ZXJ5X3N0YXJ0OworCWlmIChyZWNvdmVyeV9zdGFydCA9PSBNYXhTZWN0b3IpCisJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSByZGV2X3JlY292ZXJ5X3N0YXJ0ID0KK19fQVRUUihyZWNvdmVyeV9zdGFydCwgU19JUlVHT3xTX0lXVVNSLCByZWNvdmVyeV9zdGFydF9zaG93LCByZWNvdmVyeV9zdGFydF9zdG9yZSk7CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZGV2X2RlZmF1bHRfYXR0cnNbXSA9IHsKIAkmcmRldl9zdGF0ZS5hdHRyLAogCSZyZGV2X2Vycm9ycy5hdHRyLAogCSZyZGV2X3Nsb3QuYXR0ciwKIAkmcmRldl9vZmZzZXQuYXR0ciwKIAkmcmRldl9zaXplLmF0dHIsCisJJnJkZXZfcmVjb3Zlcnlfc3RhcnQuYXR0ciwKIAlOVUxMLAogfTsKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNTQ5LDYgKzI2ODgsOCBAQAogCXJkZXYtPmZsYWdzID0gMDsKIAlyZGV2LT5kYXRhX29mZnNldCA9IDA7CiAJcmRldi0+c2JfZXZlbnRzID0gMDsKKwlyZGV2LT5sYXN0X3JlYWRfZXJyb3IudHZfc2VjICA9IDA7CisJcmRldi0+bGFzdF9yZWFkX2Vycm9yLnR2X25zZWMgPSAwOwogCWF0b21pY19zZXQoJnJkZXYtPm5yX3BlbmRpbmcsIDApOwogCWF0b21pY19zZXQoJnJkZXYtPnJlYWRfZXJyb3JzLCAwKTsKIAlhdG9taWNfc2V0KCZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzLCAwKTsKQEAgLTI2NTksNiArMjgwMCw0NyBAQAogCX0KIH0KIAorLyogUmVhZCBhIGZpeGVkLXBvaW50IG51bWJlci4KKyAqIE51bWJlcnMgaW4gc3lzZnMgYXR0cmlidXRlcyBzaG91bGQgYmUgaW4gInN0YW5kYXJkIiB1bml0cyB3aGVyZQorICogcG9zc2libGUsIHNvIHRpbWUgc2hvdWxkIGJlIGluIHNlY29uZHMuCisgKiBIb3dldmVyIHdlIGludGVybmFsbHkgdXNlIGEgYSBtdWNoIHNtYWxsZXIgdW5pdCBzdWNoIGFzIAorICogbWlsbGlzZWNvbmRzIG9yIGppZmZpZXMuCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgZGVjaW1hbCBudW1iZXIgd2l0aCBhIHBvc3NpYmxlIGZyYWN0aW9uYWwKKyAqIGNvbXBvbmVudCwgYW5kIHByb2R1Y2VzIGFuIGludGVnZXIgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZgorICogbXVsdGlwbHlpbmcgdGhhdCBudW1iZXIgYnkgMTBeJ3NjYWxlJy4KKyAqIGFsbCB3aXRob3V0IGFueSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICovCitpbnQgc3RyaWN0X3N0cnRvdWxfc2NhbGVkKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nICpyZXMsIGludCBzY2FsZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7CisJbG9uZyBkZWNpbWFscyA9IC0xOworCXdoaWxlIChpc2RpZ2l0KCpjcCkgfHwgKCpjcCA9PSAnLicgJiYgZGVjaW1hbHMgPCAwKSkgeworCQlpZiAoKmNwID09ICcuJykKKwkJCWRlY2ltYWxzID0gMDsKKwkJZWxzZSBpZiAoZGVjaW1hbHMgPCBzY2FsZSkgeworCQkJdW5zaWduZWQgaW50IHZhbHVlOworCQkJdmFsdWUgPSAqY3AgLSAnMCc7CisJCQlyZXN1bHQgPSByZXN1bHQgKiAxMCArIHZhbHVlOworCQkJaWYgKGRlY2ltYWxzID49IDApCisJCQkJZGVjaW1hbHMrKzsKKwkJfQorCQljcCsrOworCX0KKwlpZiAoKmNwID09ICdcbicpCisJCWNwKys7CisJaWYgKCpjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRlY2ltYWxzIDwgMCkKKwkJZGVjaW1hbHMgPSAwOworCXdoaWxlIChkZWNpbWFscyA8IHNjYWxlKSB7CisJCXJlc3VsdCAqPSAxMDsKKwkJZGVjaW1hbHMgKys7CisJfQorCSpyZXMgPSByZXN1bHQ7CisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIHZvaWQgbWRfc2FmZW1vZGVfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpOwogCiBzdGF0aWMgc3NpemVfdApAQCAtMjY3MCwzMSArMjg1MiwxMCBAQAogc3RhdGljIHNzaXplX3QKIHNhZmVfZGVsYXlfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmNidWYsIHNpemVfdCBsZW4pCiB7Ci0JaW50IHNjYWxlPTE7Ci0JaW50IGRvdD0wOwotCWludCBpOwogCXVuc2lnbmVkIGxvbmcgbXNlYzsKLQljaGFyIGJ1ZlszMF07CiAKLQkvKiByZW1vdmUgYSBwZXJpb2QsIGFuZCBjb3VudCBkaWdpdHMgYWZ0ZXIgaXQgKi8KLQlpZiAobGVuID49IHNpemVvZihidWYpKQorCWlmIChzdHJpY3Rfc3RydG91bF9zY2FsZWQoY2J1ZiwgJm1zZWMsIDMpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RybGNweShidWYsIGNidWYsIHNpemVvZihidWYpKTsKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgewotCQlpZiAoZG90KSB7Ci0JCQlpZiAoaXNkaWdpdChidWZbaV0pKSB7Ci0JCQkJYnVmW2ktMV0gPSBidWZbaV07Ci0JCQkJc2NhbGUgKj0gMTA7Ci0JCQl9Ci0JCQlidWZbaV0gPSAwOwotCQl9IGVsc2UgaWYgKGJ1ZltpXSA9PSAnLicpIHsKLQkJCWRvdD0xOwotCQkJYnVmW2ldID0gMDsKLQkJfQotCX0KLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1zZWMpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbXNlYyA9IChtc2VjICogMTAwMCkgLyBzY2FsZTsKIAlpZiAobXNlYyA9PSAwKQogCQltZGRldi0+c2FmZW1vZGVfZGVsYXkgPSAwOwogCWVsc2UgewpAQCAtMjk3MCw3ICszMTMxLDkgQEAKIAogCWlmIChtZGRldi0+cGVycykKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAoISpidWYgfHwgKCplICYmICplICE9ICdcbicpKQorCWlmIChjbWRfbWF0Y2goYnVmLCAibm9uZSIpKQorCQluID0gTWF4U2VjdG9yOworCWVsc2UgaWYgKCEqYnVmIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZGRldi0+cmVjb3ZlcnlfY3AgPSBuOwpAQCAtMzE2Niw2ICszMzI5LDI5IEBACiBfX0FUVFIoYXJyYXlfc3RhdGUsIFNfSVJVR098U19JV1VTUiwgYXJyYXlfc3RhdGVfc2hvdywgYXJyYXlfc3RhdGVfc3RvcmUpOwogCiBzdGF0aWMgc3NpemVfdAorbWF4X2NvcnJlY3RlZF9yZWFkX2Vycm9yc19zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKSB7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLAorCQkgICAgICAgYXRvbWljX3JlYWQoJm1kZGV2LT5tYXhfY29ycl9yZWFkX2Vycm9ycykpOworfQorCitzdGF0aWMgc3NpemVfdAorbWF4X2NvcnJlY3RlZF9yZWFkX2Vycm9yc19zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWNoYXIgKmU7CisJdW5zaWduZWQgbG9uZyBuID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZSwgMTApOworCisJaWYgKCpidWYgJiYgKCplID09IDAgfHwgKmUgPT0gJ1xuJykpIHsKKwkJYXRvbWljX3NldCgmbWRkZXYtPm1heF9jb3JyX3JlYWRfZXJyb3JzLCBuKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWF4X2NvcnJfcmVhZF9lcnJvcnMgPQorX19BVFRSKG1heF9yZWFkX2Vycm9ycywgU19JUlVHT3xTX0lXVVNSLCBtYXhfY29ycmVjdGVkX3JlYWRfZXJyb3JzX3Nob3csCisJbWF4X2NvcnJlY3RlZF9yZWFkX2Vycm9yc19zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90CiBudWxsX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjQ2LDggKzM0MzIsNyBAQAogCQl9CiAJCWlmICgqZW5kICYmICFpc3NwYWNlKCplbmQpKSBicmVhazsKIAkJYml0bWFwX2RpcnR5X2JpdHMobWRkZXYtPmJpdG1hcCwgY2h1bmssIGVuZF9jaHVuayk7Ci0JCWJ1ZiA9IGVuZDsKLQkJd2hpbGUgKGlzc3BhY2UoKmJ1ZikpIGJ1ZisrOworCQlidWYgPSBza2lwX3NwYWNlcyhlbmQpOwogCX0KIAliaXRtYXBfdW5wbHVnKG1kZGV2LT5iaXRtYXApOyAvKiBmbHVzaCB0aGUgYml0cyB0byBkaXNrICovCiBvdXQ6CkBAIC0zNzkwLDYgKzM5NzUsNyBAQAogCSZtZF9hcnJheV9zdGF0ZS5hdHRyLAogCSZtZF9yZXNoYXBlX3Bvc2l0aW9uLmF0dHIsCiAJJm1kX2FycmF5X3NpemUuYXR0ciwKKwkmbWF4X2NvcnJfcmVhZF9lcnJvcnMuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzg5NCw2ICs0MDgwLDcgQEAKIAkJbWRkZXYtPnN5c2ZzX2FjdGlvbiA9IE5VTEw7CiAJCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKIAl9CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtZGRldi0+a29iaiwgJm1kX2JpdG1hcF9ncm91cCk7CiAJa29iamVjdF9kZWwoJm1kZGV2LT5rb2JqKTsKIAlrb2JqZWN0X3B1dCgmbWRkZXYtPmtvYmopOwogfQpAQCAtMzk4NSw2ICs0MTcyLDggQEAKIAkJICAgICAgIGRpc2stPmRpc2tfbmFtZSk7CiAJCWVycm9yID0gMDsKIAl9CisJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmbWRkZXYtPmtvYmosICZtZF9iaXRtYXBfZ3JvdXApKQorCQlwcmludGsoS0VSTl9ERUJVRyAicG9pbnRsZXNzIHdhcm5pbmdcbiIpOwogIGFib3J0OgogCW11dGV4X3VubG9jaygmZGlza3NfbXV0ZXgpOwogCWlmICghZXJyb3IpIHsKQEAgLTQyMDYsNiArNDM5NSw4IEBACiAJCW1kZGV2LT5ybyA9IDA7CiAKICAJYXRvbWljX3NldCgmbWRkZXYtPndyaXRlc19wZW5kaW5nLDApOworCWF0b21pY19zZXQoJm1kZGV2LT5tYXhfY29ycl9yZWFkX2Vycm9ycywKKwkJICAgTURfREVGQVVMVF9NQVhfQ09SUkVDVEVEX1JFQURfRVJST1JTKTsKIAltZGRldi0+c2FmZW1vZGUgPSAwOwogCW1kZGV2LT5zYWZlbW9kZV90aW1lci5mdW5jdGlvbiA9IG1kX3NhZmVtb2RlX3RpbWVvdXQ7CiAJbWRkZXYtPnNhZmVtb2RlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgbWRkZXY7CkBAIC00MzEwLDcgKzQ1MDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpCit2b2lkIHJlc3RvcmVfYml0bWFwX3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCkBAIC00NDA1LDEyICs0NTk2LDEyIEBACiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBzdG9wcGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwotCQlpZiAobWRkZXYtPmJpdG1hcF9maWxlKSB7Ci0JCQlyZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3MobWRkZXYtPmJpdG1hcF9maWxlKTsKLQkJCWZwdXQobWRkZXYtPmJpdG1hcF9maWxlKTsKLQkJCW1kZGV2LT5iaXRtYXBfZmlsZSA9IE5VTEw7CisJCWlmIChtZGRldi0+Yml0bWFwX2luZm8uZmlsZSkgeworCQkJcmVzdG9yZV9iaXRtYXBfd3JpdGVfYWNjZXNzKG1kZGV2LT5iaXRtYXBfaW5mby5maWxlKTsKKwkJCWZwdXQobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpOworCQkJbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUgPSBOVUxMOwogCQl9Ci0JCW1kZGV2LT5iaXRtYXBfb2Zmc2V0ID0gMDsKKwkJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDA7CiAKIAkJLyogbWFrZSBzdXJlIGFsbCBtZF9kZWxheWVkX2RlbGV0ZSBjYWxscyBoYXZlIGZpbmlzaGVkICovCiAJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CkBAIC00NDUxLDYgKzQ2NDIsMTEgQEAKIAkJbWRkZXYtPmRlZ3JhZGVkID0gMDsKIAkJbWRkZXYtPmJhcnJpZXJzX3dvcmsgPSAwOwogCQltZGRldi0+c2FmZW1vZGUgPSAwOworCQltZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKKwkJbWRkZXYtPmJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0ID0gMDsKKwkJbWRkZXYtPmJpdG1hcF9pbmZvLmNodW5rc2l6ZSA9IDA7CisJCW1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXAgPSAwOworCQltZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCA9IDA7CiAJCWtvYmplY3RfdWV2ZW50KCZkaXNrX3RvX2RldihtZGRldi0+Z2VuZGlzayktPmtvYmosIEtPQkpfQ0hBTkdFKTsKIAkJaWYgKG1kZGV2LT5ob2xkX2FjdGl2ZSA9PSBVTlRJTF9TVE9QKQogCQkJbWRkZXYtPmhvbGRfYWN0aXZlID0gMDsKQEAgLTQ2MzYsNyArNDgzMiw3IEBACiAJaW5mby5zdGF0ZSAgICAgICAgID0gMDsKIAlpZiAobWRkZXYtPmluX3N5bmMpCiAJCWluZm8uc3RhdGUgPSAoMTw8TURfU0JfQ0xFQU4pOwotCWlmIChtZGRldi0+Yml0bWFwICYmIG1kZGV2LT5iaXRtYXBfb2Zmc2V0KQorCWlmIChtZGRldi0+Yml0bWFwICYmIG1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQpCiAJCWluZm8uc3RhdGUgPSAoMTw8TURfU0JfQklUTUFQX1BSRVNFTlQpOwogCWluZm8uYWN0aXZlX2Rpc2tzICA9IGluc3luYzsKIAlpbmZvLndvcmtpbmdfZGlza3MgPSB3b3JraW5nOwpAQCAtNDk5NCwyMyArNTE5MCwyMyBAQAogCWlmIChmZCA+PSAwKSB7CiAJCWlmIChtZGRldi0+Yml0bWFwKQogCQkJcmV0dXJuIC1FRVhJU1Q7IC8qIGNhbm5vdCBhZGQgd2hlbiBiaXRtYXAgaXMgcHJlc2VudCAqLwotCQltZGRldi0+Yml0bWFwX2ZpbGUgPSBmZ2V0KGZkKTsKKwkJbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUgPSBmZ2V0KGZkKTsKIAotCQlpZiAobWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwpIHsKKwkJaWYgKG1kZGV2LT5iaXRtYXBfaW5mby5maWxlID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yOiBmYWlsZWQgdG8gZ2V0IGJpdG1hcCBmaWxlXG4iLAogCQkJICAgICAgIG1kbmFtZShtZGRldikpOwogCQkJcmV0dXJuIC1FQkFERjsKIAkJfQogCi0JCWVyciA9IGRlbnlfYml0bWFwX3dyaXRlX2FjY2VzcyhtZGRldi0+Yml0bWFwX2ZpbGUpOworCQllcnIgPSBkZW55X2JpdG1hcF93cml0ZV9hY2Nlc3MobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvcjogYml0bWFwIGZpbGUgaXMgYWxyZWFkeSBpbiB1c2VcbiIsCiAJCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7Ci0JCQlmcHV0KG1kZGV2LT5iaXRtYXBfZmlsZSk7Ci0JCQltZGRldi0+Yml0bWFwX2ZpbGUgPSBOVUxMOworCQkJZnB1dChtZGRldi0+Yml0bWFwX2luZm8uZmlsZSk7CisJCQltZGRldi0+Yml0bWFwX2luZm8uZmlsZSA9IE5VTEw7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCW1kZGV2LT5iaXRtYXBfb2Zmc2V0ID0gMDsgLyogZmlsZSBvdmVycmlkZXMgb2Zmc2V0ICovCisJCW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQgPSAwOyAvKiBmaWxlIG92ZXJyaWRlcyBvZmZzZXQgKi8KIAl9IGVsc2UgaWYgKG1kZGV2LT5iaXRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7IC8qIGNhbm5vdCByZW1vdmUgd2hhdCBpc24ndCB0aGVyZSAqLwogCWVyciA9IDA7CkBAIC01MDI1LDExICs1MjIxLDExIEBACiAJCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAwKTsKIAl9CiAJaWYgKGZkIDwgMCkgewotCQlpZiAobWRkZXYtPmJpdG1hcF9maWxlKSB7Ci0JCQlyZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3MobWRkZXYtPmJpdG1hcF9maWxlKTsKLQkJCWZwdXQobWRkZXYtPmJpdG1hcF9maWxlKTsKKwkJaWYgKG1kZGV2LT5iaXRtYXBfaW5mby5maWxlKSB7CisJCQlyZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3MobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpOworCQkJZnB1dChtZGRldi0+Yml0bWFwX2luZm8uZmlsZSk7CiAJCX0KLQkJbWRkZXYtPmJpdG1hcF9maWxlID0gTlVMTDsKKwkJbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUgPSBOVUxMOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC01MDk2LDggKzUyOTIsOCBAQAogCQltZGRldi0+ZmxhZ3MgICAgICAgICA9IDA7CiAJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CiAKLQltZGRldi0+ZGVmYXVsdF9iaXRtYXBfb2Zmc2V0ID0gTURfU0JfQllURVMgPj4gOTsKLQltZGRldi0+Yml0bWFwX29mZnNldCA9IDA7CisJbWRkZXYtPmJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0ID0gTURfU0JfQllURVMgPj4gOTsKKwltZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAogCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOwogCkBAIC01MTk3LDcgKzUzOTMsNyBAQAogCWludCBzdGF0ZSA9IDA7CiAKIAkvKiBjYWxjdWxhdGUgZXhwZWN0ZWQgc3RhdGUsaWdub3JpbmcgbG93IGJpdHMgKi8KLQlpZiAobWRkZXYtPmJpdG1hcCAmJiBtZGRldi0+Yml0bWFwX29mZnNldCkKKwlpZiAobWRkZXYtPmJpdG1hcCAmJiBtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KQogCQlzdGF0ZSB8PSAoMSA8PCBNRF9TQl9CSVRNQVBfUFJFU0VOVCk7CiAKIAlpZiAobWRkZXYtPm1ham9yX3ZlcnNpb24gIT0gaW5mby0+bWFqb3JfdmVyc2lvbiB8fApAQCAtNTI1Niw5ICs1NDUyLDEwIEBACiAJCQkvKiBhZGQgdGhlIGJpdG1hcCAqLwogCQkJaWYgKG1kZGV2LT5iaXRtYXApCiAJCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQlpZiAobWRkZXYtPmRlZmF1bHRfYml0bWFwX29mZnNldCA9PSAwKQorCQkJaWYgKG1kZGV2LT5iaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldCA9PSAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSBtZGRldi0+ZGVmYXVsdF9iaXRtYXBfb2Zmc2V0OworCQkJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9CisJCQkJbWRkZXYtPmJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0OwogCQkJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDEpOwogCQkJcnYgPSBiaXRtYXBfY3JlYXRlKG1kZGV2KTsKIAkJCWlmIChydikKQEAgLTUyNzMsNyArNTQ3MCw3IEBACiAJCQltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMSk7CiAJCQliaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMCk7Ci0JCQltZGRldi0+Yml0bWFwX29mZnNldCA9IDA7CisJCQltZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAkJfQogCX0KIAltZF91cGRhdGVfc2IobWRkZXYsIDEpOwpAQCAtNTUyNCw2ICs1NzIxLDI1IEBACiBhYm9ydDoKIAlyZXR1cm4gZXJyOwogfQorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgbWRfY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBIT1RfUkVNT1ZFX0RJU0s6CisJY2FzZSBIT1RfQUREX0RJU0s6CisJY2FzZSBTRVRfRElTS19GQVVMVFk6CisJY2FzZSBTRVRfQklUTUFQX0ZJTEU6CisJCS8qIFRoZXNlIHRha2UgaW4gaW50ZWdlciBhcmcsIGRvIG5vdCBjb252ZXJ0ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFyZyA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG1kX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKIHN0YXRpYyBpbnQgbWRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CkBAIC01NTg5LDYgKzU4MDUsOSBAQAogCS5vcGVuCQk9IG1kX29wZW4sCiAJLnJlbGVhc2UJPSBtZF9yZWxlYXNlLAogCS5pb2N0bAkJPSBtZF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IG1kX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogCS5nZXRnZW8JCT0gbWRfZ2V0Z2VvLAogCS5tZWRpYV9jaGFuZ2VkCT0gbWRfbWVkaWFfY2hhbmdlZCwKIAkucmV2YWxpZGF0ZV9kaXNrPSBtZF9yZXZhbGlkYXRlLApAQCAtNTk4MiwxNCArNjIwMSwxNCBAQAogCQkJdW5zaWduZWQgbG9uZyBjaHVua19rYjsKIAkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7Ci0JCQljaHVua19rYiA9IGJpdG1hcC0+Y2h1bmtzaXplID4+IDEwOworCQkJY2h1bmtfa2IgPSBtZGRldi0+Yml0bWFwX2luZm8uY2h1bmtzaXplID4+IDEwOwogCQkJc2VxX3ByaW50ZihzZXEsICJiaXRtYXA6ICVsdS8lbHUgcGFnZXMgWyVsdUtCXSwgIgogCQkJCSIlbHUlcyBjaHVuayIsCiAJCQkJYml0bWFwLT5wYWdlcyAtIGJpdG1hcC0+bWlzc2luZ19wYWdlcywKIAkJCQliaXRtYXAtPnBhZ2VzLAogCQkJCShiaXRtYXAtPnBhZ2VzIC0gYml0bWFwLT5taXNzaW5nX3BhZ2VzKQogCQkJCQk8PCAoUEFHRV9TSElGVCAtIDEwKSwKLQkJCQljaHVua19rYiA/IGNodW5rX2tiIDogYml0bWFwLT5jaHVua3NpemUsCisJCQkJY2h1bmtfa2IgPyBjaHVua19rYiA6IG1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUsCiAJCQkJY2h1bmtfa2IgPyAiS0IiIDogIkIiKTsKIAkJCWlmIChiaXRtYXAtPmZpbGUpIHsKIAkJCQlzZXFfcHJpbnRmKHNlcSwgIiwgZmlsZTogIik7CkBAIC02MzM4LDEyICs2NTU3LDE0IEBACiAJCS8qIHJlY292ZXJ5IGZvbGxvd3MgdGhlIHBoeXNpY2FsIHNpemUgb2YgZGV2aWNlcyAqLwogCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAkJaiA9IE1heFNlY3RvcjsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgogCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYKIAkJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgogCQkJICAgIHJkZXYtPnJlY292ZXJ5X29mZnNldCA8IGopCiAJCQkJaiA9IHJkZXYtPnJlY292ZXJ5X29mZnNldDsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAibWQ6ICVzIG9mIFJBSUQgYXJyYXkgJXNcbiIsIGRlc2MsIG1kbmFtZShtZGRldikpOwpAQCAtNjM4MCw2ICs2NjAxLDcgQEAKIAkJICAgICAgIGRlc2MsIG1kbmFtZShtZGRldikpOwogCQltZGRldi0+Y3Vycl9yZXN5bmMgPSBqOwogCX0KKwltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gbWRkZXYtPmN1cnJfcmVzeW5jOwogCiAJd2hpbGUgKGogPCBtYXhfc2VjdG9ycykgewogCQlzZWN0b3JfdCBzZWN0b3JzOwpAQCAtNjUxMiwyMiArNjczNCwyOSBAQAogCQl9IGVsc2UgewogCQkJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJCQltZGRldi0+Y3Vycl9yZXN5bmMgPSBNYXhTZWN0b3I7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQkJcmN1X3JlYWRfbG9jaygpOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCiAJCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYKIAkJCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKIAkJCQkgICAgcmRldi0+cmVjb3Zlcnlfb2Zmc2V0IDwgbWRkZXYtPmN1cnJfcmVzeW5jKQogCQkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSBtZGRldi0+Y3Vycl9yZXN5bmM7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJfQogCX0KIAlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKIAogIHNraXA6Ci0JbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKLQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gMDsKLQlpZiAoIXRlc3RfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpKQotCQkvKiBXZSBjb21wbGV0ZWQgc28gbWF4IHNldHRpbmcgY2FuIGJlIGZvcmdvdHRlbi4gKi8KKwlpZiAoIXRlc3RfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpKSB7CisJCS8qIFdlIGNvbXBsZXRlZCBzbyBtaW4vbWF4IHNldHRpbmcgY2FuIGJlIGZvcmdvdHRlbiBpZiB1c2VkLiAqLworCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJCW1kZGV2LT5yZXN5bmNfbWluID0gMDsKIAkJbWRkZXYtPnJlc3luY19tYXggPSBNYXhTZWN0b3I7CisJfSBlbHNlIGlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQorCQltZGRldi0+cmVzeW5jX21pbiA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CisJbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKKwlpZiAoIXRlc3RfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpKQorCQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gMDsKIAlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIAl3YWtlX3VwKCZyZXN5bmNfd2FpdCk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKQEAgLTY1OTAsNiArNjgxOSw3IEBACiAJCQkJCQkgICAgICAgbm0sIG1kbmFtZShtZGRldikpOwogCQkJCQlzcGFyZXMrKzsKIAkJCQkJbWRfbmV3X2V2ZW50KG1kZGV2KTsKKwkJCQkJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CiAJCQkJfSBlbHNlCiAJCQkJCWJyZWFrOwogCQkJfQpAQCAtNjYyNSw3ICs2ODU1LDcgQEAKIAogCiAJaWYgKG1kZGV2LT5iaXRtYXApCi0JCWJpdG1hcF9kYWVtb25fd29yayhtZGRldi0+Yml0bWFwKTsKKwkJYml0bWFwX2RhZW1vbl93b3JrKG1kZGV2KTsKIAogCWlmIChtZGRldi0+cm8pCiAJCXJldHVybjsKQEAgLTY5OTUsNSArNzIyNSw2IEBACiBFWFBPUlRfU1lNQk9MKG1kX3dha2V1cF90aHJlYWQpOwogRVhQT1JUX1NZTUJPTChtZF9jaGVja19yZWNvdmVyeSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1EIFJBSUQgZnJhbWV3b3JrIik7CiBNT0RVTEVfQUxJQVMoIm1kIik7CiBNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoTURfTUFKT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGYxODRiNjkuLjhlNGM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAorKysgYi9kcml2ZXJzL21kL21kLmgKQEAgLTk3LDYgKzk3LDkgQEAKIAlhdG9taWNfdAlyZWFkX2Vycm9yczsJLyogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlYWQgZXJyb3JzIHRoYXQKIAkJCQkJICogd2UgaGF2ZSB0cmllZCB0byBpZ25vcmUuCiAJCQkJCSAqLworCXN0cnVjdCB0aW1lc3BlYyBsYXN0X3JlYWRfZXJyb3I7CS8qIG1vbm90b25pYyB0aW1lIHNpbmNlIG91cgorCQkJCQkJICogbGFzdCByZWFkIGVycm9yCisJCQkJCQkgKi8KIAlhdG9taWNfdAljb3JyZWN0ZWRfZXJyb3JzOyAvKiBudW1iZXIgb2YgY29ycmVjdGVkIHJlYWQgZXJyb3JzLAogCQkJCQkgICAqIGZvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIGFuZCBzdG9yaW5nCiAJCQkJCSAgICogaW4gc3VwZXJibG9jay4KQEAgLTI4MCwxNyArMjgzLDM4IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBtYXhfd3JpdGVfYmVoaW5kOyAvKiAwID0gc3luYyAqLwogCiAJc3RydWN0IGJpdG1hcCAgICAgICAgICAgICAgICAgICAqYml0bWFwOyAvKiB0aGUgYml0bWFwIGZvciB0aGUgZGV2aWNlICovCi0Jc3RydWN0IGZpbGUJCQkqYml0bWFwX2ZpbGU7IC8qIHRoZSBiaXRtYXAgZmlsZSAqLwotCWxvbmcJCQkJYml0bWFwX29mZnNldDsgLyogb2Zmc2V0IGZyb20gc3VwZXJibG9jayBvZgotCQkJCQkJCSogc3RhcnQgb2YgYml0bWFwLiBNYXkgYmUKLQkJCQkJCQkqIG5lZ2F0aXZlLCBidXQgbm90ICcwJwotCQkJCQkJCSovCi0JbG9uZwkJCQlkZWZhdWx0X2JpdG1hcF9vZmZzZXQ7IC8qIHRoaXMgaXMgdGhlIG9mZnNldCB0byB1c2Ugd2hlbgotCQkJCQkJCQkqIGhvdC1hZGRpbmcgYSBiaXRtYXAuICBJdCBzaG91bGQKLQkJCQkJCQkJKiBldmVudHVhbGx5IGJlIHNldHRhYmxlIGJ5IHN5c2ZzLgotCQkJCQkJCQkqLworCXN0cnVjdCB7CisJCXN0cnVjdCBmaWxlCQkqZmlsZTsgLyogdGhlIGJpdG1hcCBmaWxlICovCisJCWxvZmZfdAkJCW9mZnNldDsgLyogb2Zmc2V0IGZyb20gc3VwZXJibG9jayBvZgorCQkJCQkJICogc3RhcnQgb2YgYml0bWFwLiBNYXkgYmUKKwkJCQkJCSAqIG5lZ2F0aXZlLCBidXQgbm90ICcwJworCQkJCQkJICogRm9yIGV4dGVybmFsIG1ldGFkYXRhLCBvZmZzZXQKKwkJCQkJCSAqIGZyb20gc3RhcnQgb2YgZGV2aWNlLiAKKwkJCQkJCSAqLworCQlsb2ZmX3QJCQlkZWZhdWx0X29mZnNldDsgLyogdGhpcyBpcyB0aGUgb2Zmc2V0IHRvIHVzZSB3aGVuCisJCQkJCQkJICogaG90LWFkZGluZyBhIGJpdG1hcC4gIEl0IHNob3VsZAorCQkJCQkJCSAqIGV2ZW50dWFsbHkgYmUgc2V0dGFibGUgYnkgc3lzZnMuCisJCQkJCQkJICovCisJCXN0cnVjdCBtdXRleAkJbXV0ZXg7CisJCXVuc2lnbmVkIGxvbmcJCWNodW5rc2l6ZTsKKwkJdW5zaWduZWQgbG9uZwkJZGFlbW9uX3NsZWVwOyAvKiBob3cgbWFueSBzZWNvbmRzIGJldHdlZW4gdXBkYXRlcz8gKi8KKwkJdW5zaWduZWQgbG9uZwkJbWF4X3dyaXRlX2JlaGluZDsgLyogd3JpdGUtYmVoaW5kIG1vZGUgKi8KKwkJaW50CQkJZXh0ZXJuYWw7CisJfSBiaXRtYXBfaW5mbzsKIAorCWF0b21pY190IAkJCW1heF9jb3JyX3JlYWRfZXJyb3JzOyAvKiBtYXggcmVhZCByZXRyaWVzICovCiAJc3RydWN0IGxpc3RfaGVhZAkJYWxsX21kZGV2czsKKworCS8qIEdlbmVyaWMgYmFycmllciBoYW5kbGluZy4KKwkgKiBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgYmFycmllciByZXF1ZXN0LCBhbGwgb3RoZXIKKwkgKiB3cml0ZXMgYXJlIGJsb2NrZWQgd2hpbGUgdGhlIGRldmljZXMgYXJlIGZsdXNoZWQuCisJICogVGhlIGxhc3QgdG8gZmluaXNoIGEgZmx1c2ggc2NoZWR1bGVzIGEgd29ya2VyIHRvCisJICogc3VibWl0IHRoZSBiYXJyaWVyIHJlcXVlc3QgKHdpdGhvdXQgdGhlIGJhcnJpZXIgZmxhZyksCisJICogdGhlbiBzdWJtaXQgbW9yZSBmbHVzaCByZXF1ZXN0cy4KKwkgKi8KKwlzdHJ1Y3QgYmlvICpiYXJyaWVyOworCWF0b21pY190IGZsdXNoX3BlbmRpbmc7CisJc3RydWN0IHdvcmtfc3RydWN0IGJhcnJpZXJfd29yazsKIH07CiAKIApAQCAtMzUzLDcgKzM3Nyw3IEBACiAJc3NpemVfdCAoKnNob3cpKG1kZGV2X3QgKiwgY2hhciAqKTsKIAlzc2l6ZV90ICgqc3RvcmUpKG1kZGV2X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKLQorZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRfYml0bWFwX2dyb3VwOwogCiBzdGF0aWMgaW5saW5lIGNoYXIgKiBtZG5hbWUgKG1kZGV2X3QgKiBtZGRldikKIHsKQEAgLTQzMSw2ICs0NTUsNyBAQAogZXh0ZXJuIHZvaWQgbWRfZXJyb3IobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOwogCiBleHRlcm4gaW50IG1kZGV2X2Nvbmdlc3RlZChtZGRldl90ICptZGRldiwgaW50IGJpdHMpOworZXh0ZXJuIHZvaWQgbWRfYmFycmllcl9yZXF1ZXN0KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8pOwogZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCiAJCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBtZF9zdXBlcl93YWl0KG1kZGV2X3QgKm1kZGV2KTsKQEAgLTQ0Myw2ICs0NjgsOCBAQAogZXh0ZXJuIHZvaWQgbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IGFycmF5X3NlY3RvcnMpOwogZXh0ZXJuIGludCBtZF9jaGVja19ub19iaXRtYXAobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIGludCBtZF9pbnRlZ3JpdHlfcmVnaXN0ZXIobWRkZXZfdCAqbWRkZXYpOwotdm9pZCBtZF9pbnRlZ3JpdHlfYWRkX3JkZXYobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfaW50ZWdyaXR5X2FkZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWxfc2NhbGVkKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nICpyZXMsIGludCBzY2FsZSk7CitleHRlcm4gdm9pZCByZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpOwogCiAjZW5kaWYgLyogX01EX01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IGVlNzY0NmYuLjMyYTY2MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJaW50IGNwdTsKIAogCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKLQkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOworCQltZF9iYXJyaWVyX3JlcXVlc3QobWRkZXYsIGJpbyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTgxLDYgKzU4MSw3IEBACiBtb2R1bGVfaW5pdChtdWx0aXBhdGhfaW5pdCk7CiBtb2R1bGVfZXhpdChtdWx0aXBhdGhfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNpbXBsZSBtdWx0aS1wYXRoIHBlcnNvbmFsaXR5IGZvciBNRCIpOwogTU9EVUxFX0FMSUFTKCJtZC1wZXJzb25hbGl0eS03Iik7IC8qIE1VTFRJUEFUSCAqLwogTU9EVUxFX0FMSUFTKCJtZC1tdWx0aXBhdGgiKTsKIE1PRFVMRV9BTElBUygibWQtbGV2ZWwtLTQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCBkM2E0Y2UwLi43NzYwNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAlpbnQgY3B1OwogCiAJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewotCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CisJCW1kX2JhcnJpZXJfcmVxdWVzdChtZGRldiwgYmlvKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01NjcsNiArNTY3LDcgQEAKIG1vZHVsZV9pbml0KHJhaWQwX2luaXQpOwogbW9kdWxlX2V4aXQocmFpZDBfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJBSUQwIChzdHJpcGluZykgcGVyc29uYWxpdHkgZm9yIE1EIik7CiBNT0RVTEVfQUxJQVMoIm1kLXBlcnNvbmFsaXR5LTIiKTsgLyogUkFJRDAgKi8KIE1PRFVMRV9BTElBUygibWQtcmFpZDAiKTsKIE1PRFVMRV9BTElBUygibWQtbGV2ZWwtMCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGUwN2NlMmUuLjg1OWJkM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTY3Nyw2ICs2NzcsNyBAQAogc3RhdGljIHZvaWQgbG93ZXJfYmFycmllcihjb25mX3QgKmNvbmYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlCVUdfT04oY29uZi0+YmFycmllciA8PSAwKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+cmVzeW5jX2xvY2ssIGZsYWdzKTsKIAljb25mLT5iYXJyaWVyLS07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+cmVzeW5jX2xvY2ssIGZsYWdzKTsKQEAgLTgwMSw2ICs4MDIsMjUgQEAKIAogCW1kX3dyaXRlX3N0YXJ0KG1kZGV2LCBiaW8pOyAvKiB3YWl0IG9uIHN1cGVyYmxvY2sgdXBkYXRlIGVhcmx5ICovCiAKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUgJiYKKwkgICAgYmlvLT5iaV9zZWN0b3IgKyBiaW8tPmJpX3NpemUvNTEyID4gbWRkZXYtPnN1c3BlbmRfbG8gJiYKKwkgICAgYmlvLT5iaV9zZWN0b3IgPCBtZGRldi0+c3VzcGVuZF9oaSkgeworCQkvKiBBcyB0aGUgc3VzcGVuZF8qIHJhbmdlIGlzIGNvbnRyb2xsZWQgYnkKKwkJICogdXNlcnNwYWNlLCB3ZSB3YW50IGFuIGludGVycnVwdGlibGUKKwkJICogd2FpdC4KKwkJICovCisJCURFRklORV9XQUlUKHcpOworCQlmb3IgKDs7KSB7CisJCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCQkJcHJlcGFyZV90b193YWl0KCZjb25mLT53YWl0X2JhcnJpZXIsCisJCQkJCSZ3LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJaWYgKGJpby0+Ymlfc2VjdG9yICsgYmlvLT5iaV9zaXplLzUxMiA8PSBtZGRldi0+c3VzcGVuZF9sbyB8fAorCQkJICAgIGJpby0+Ymlfc2VjdG9yID49IG1kZGV2LT5zdXNwZW5kX2hpKQorCQkJCWJyZWFrOworCQkJc2NoZWR1bGUoKTsKKwkJfQorCQlmaW5pc2hfd2FpdCgmY29uZi0+d2FpdF9iYXJyaWVyLCAmdyk7CisJfQogCWlmICh1bmxpa2VseSghbWRkZXYtPmJhcnJpZXJzX3dvcmsgJiYKIAkJICAgICBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKIAkJaWYgKHJ3ID09IFdSSVRFKQpAQCAtOTIzLDcgKzk0Myw4IEBACiAKIAkvKiBkbyBiZWhpbmQgSS9PID8gKi8KIAlpZiAoYml0bWFwICYmCi0JICAgIGF0b21pY19yZWFkKCZiaXRtYXAtPmJlaGluZF93cml0ZXMpIDwgYml0bWFwLT5tYXhfd3JpdGVfYmVoaW5kICYmCisJICAgIChhdG9taWNfcmVhZCgmYml0bWFwLT5iZWhpbmRfd3JpdGVzKQorCSAgICAgPCBtZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCkgJiYKIAkgICAgKGJlaGluZF9wYWdlcyA9IGFsbG9jX2JlaGluZF9wYWdlcyhiaW8pKSAhPSBOVUxMKQogCQlzZXRfYml0KFIxQklPX0JlaGluZElPLCAmcjFfYmlvLT5zdGF0ZSk7CiAKQEAgLTE5NDEsNzQgKzE5NjIsNDggQEAKIAlyZXR1cm4gbWRkZXYtPmRldl9zZWN0b3JzOwogfQogCi1zdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKK3N0YXRpYyBjb25mX3QgKnNldHVwX2NvbmYobWRkZXZfdCAqbWRkZXYpCiB7CiAJY29uZl90ICpjb25mOwotCWludCBpLCBqLCBkaXNrX2lkeDsKKwlpbnQgaTsKIAltaXJyb3JfaW5mb190ICpkaXNrOwogCW1ka19yZGV2X3QgKnJkZXY7CisJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpZiAobWRkZXYtPmxldmVsICE9IDEpIHsKLQkJcHJpbnRrKCJyYWlkMTogJXM6IHJhaWQgbGV2ZWwgbm90IHNldCB0byBtaXJyb3JpbmcgKCVkKVxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldiksIG1kZGV2LT5sZXZlbCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7Ci0JCXByaW50aygicmFpZDE6ICVzOiByZXNoYXBlX3Bvc2l0aW9uIHNldCBidXQgbm90IHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldikpOwotCQlnb3RvIG91dDsKLQl9Ci0JLyoKLQkgKiBjb3B5IHRoZSBhbHJlYWR5IHZlcmlmaWVkIGRldmljZXMgaW50byBvdXIgcHJpdmF0ZSBSQUlEMQotCSAqIGJvb2trZWVwaW5nIGFyZWEuIFt3aGF0ZXZlciB3ZSBhbGxvY2F0ZSBpbiBydW4oKSwKLQkgKiBzaG91bGQgYmUgZnJlZWQgaW4gc3RvcCgpXQotCSAqLwogCWNvbmYgPSBremFsbG9jKHNpemVvZihjb25mX3QpLCBHRlBfS0VSTkVMKTsKLQltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CiAJaWYgKCFjb25mKQotCQlnb3RvIG91dF9ub19tZW07CisJCWdvdG8gYWJvcnQ7CiAKIAljb25mLT5taXJyb3JzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1pcnJvcl9pbmZvKSptZGRldi0+cmFpZF9kaXNrcywKIAkJCQkgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb25mLT5taXJyb3JzKQotCQlnb3RvIG91dF9ub19tZW07CisJCWdvdG8gYWJvcnQ7CiAKIAljb25mLT50bXBwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmYtPnRtcHBhZ2UpCi0JCWdvdG8gb3V0X25vX21lbTsKKwkJZ290byBhYm9ydDsKIAotCWNvbmYtPnBvb2xpbmZvID0ga21hbGxvYyhzaXplb2YoKmNvbmYtPnBvb2xpbmZvKSwgR0ZQX0tFUk5FTCk7CisJY29uZi0+cG9vbGluZm8gPSBremFsbG9jKHNpemVvZigqY29uZi0+cG9vbGluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmYtPnBvb2xpbmZvKQotCQlnb3RvIG91dF9ub19tZW07Ci0JY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gTlVMTDsKKwkJZ290byBhYm9ydDsKIAljb25mLT5wb29saW5mby0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPnIxYmlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShOUl9SQUlEMV9CSU9TLCByMWJpb19wb29sX2FsbG9jLAogCQkJCQkgIHIxYmlvX3Bvb2xfZnJlZSwKIAkJCQkJICBjb25mLT5wb29saW5mbyk7CiAJaWYgKCFjb25mLT5yMWJpb19wb29sKQotCQlnb3RvIG91dF9ub19tZW07CisJCWdvdG8gYWJvcnQ7CisKIAljb25mLT5wb29saW5mby0+bWRkZXYgPSBtZGRldjsKIAogCXNwaW5fbG9ja19pbml0KCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewotCQlkaXNrX2lkeCA9IHJkZXYtPnJhaWRfZGlzazsKKwkJaW50IGRpc2tfaWR4ID0gcmRldi0+cmFpZF9kaXNrOwogCQlpZiAoZGlza19pZHggPj0gbWRkZXYtPnJhaWRfZGlza3MKIAkJICAgIHx8IGRpc2tfaWR4IDwgMCkKIAkJCWNvbnRpbnVlOwogCQlkaXNrID0gY29uZi0+bWlycm9ycyArIGRpc2tfaWR4OwogCiAJCWRpc2stPnJkZXYgPSByZGV2OwotCQlkaXNrX3N0YWNrX2xpbWl0cyhtZGRldi0+Z2VuZGlzaywgcmRldi0+YmRldiwKLQkJCQkgIHJkZXYtPmRhdGFfb2Zmc2V0IDw8IDkpOwotCQkvKiBhcyB3ZSBkb24ndCBob25vdXIgbWVyZ2VfYnZlY19mbiwgd2UgbXVzdCBuZXZlciByaXNrCi0JCSAqIHZpb2xhdGluZyBpdCwgc28gbGltaXQgLT5tYXhfc2VjdG9yIHRvIG9uZSBQQUdFLCBhcwotCQkgKiBhIG9uZSBwYWdlIHJlcXVlc3QgaXMgbmV2ZXIgaW4gdmlvbGF0aW9uLgotCQkgKi8KLQkJaWYgKHJkZXYtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCi0JCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCWRpc2stPmhlYWRfcG9zaXRpb24gPSAwOwogCX0KQEAgLTIwMjIsOCArMjAxNyw3IEBACiAJYmlvX2xpc3RfaW5pdCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCk7CiAJYmlvX2xpc3RfaW5pdCgmY29uZi0+Zmx1c2hpbmdfYmlvX2xpc3QpOwogCi0KLQltZGRldi0+ZGVncmFkZWQgPSAwOworCWNvbmYtPmxhc3RfdXNlZCA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKIAogCQlkaXNrID0gY29uZi0+bWlycm9ycyArIGk7CkBAIC0yMDMxLDM4ICsyMDI1LDk3IEBACiAJCWlmICghZGlzay0+cmRldiB8fAogCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZkaXNrLT5yZGV2LT5mbGFncykpIHsKIAkJCWRpc2stPmhlYWRfcG9zaXRpb24gPSAwOwotCQkJbWRkZXYtPmRlZ3JhZGVkKys7CiAJCQlpZiAoZGlzay0+cmRldikKIAkJCQljb25mLT5mdWxsc3luYyA9IDE7Ci0JCX0KKwkJfSBlbHNlIGlmIChjb25mLT5sYXN0X3VzZWQgPCAwKQorCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCB3b3JraW5nIGRldmljZSBpcyB1c2VkIGFzIGEKKwkJCSAqIHN0YXJ0aW5nIHBvaW50IHRvIHJlYWQgYmFsYW5jaW5nLgorCQkJICovCisJCQljb25mLT5sYXN0X3VzZWQgPSBpOwogCX0KLQlpZiAobWRkZXYtPmRlZ3JhZGVkID09IGNvbmYtPnJhaWRfZGlza3MpIHsKKworCWVyciA9IC1FSU87CisJaWYgKGNvbmYtPmxhc3RfdXNlZCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkMTogbm8gb3BlcmF0aW9uYWwgbWlycm9ycyBmb3IgJXNcbiIsCi0JCQltZG5hbWUobWRkZXYpKTsKLQkJZ290byBvdXRfZnJlZV9jb25mOworCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CisJCWdvdG8gYWJvcnQ7CiAJfQotCWlmIChjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkID09IDEpCi0JCW1kZGV2LT5yZWNvdmVyeV9jcCA9IE1heFNlY3RvcjsKLQotCS8qCi0JICogZmluZCB0aGUgZmlyc3Qgd29ya2luZyBvbmUgYW5kIHVzZSBpdCBhcyBhIHN0YXJ0aW5nIHBvaW50Ci0JICogdG8gcmVhZCBiYWxhbmNpbmcuCi0JICovCi0JZm9yIChqID0gMDsgaiA8IGNvbmYtPnJhaWRfZGlza3MgJiYKLQkJICAgICAoIWNvbmYtPm1pcnJvcnNbal0ucmRldiB8fAotCQkgICAgICAhdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbal0ucmRldi0+ZmxhZ3MpKSA7IGorKykKLQkJLyogbm90aGluZyAqLzsKLQljb25mLT5sYXN0X3VzZWQgPSBqOwotCi0KLQltZGRldi0+dGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKHJhaWQxZCwgbWRkZXYsIE5VTEwpOwotCWlmICghbWRkZXYtPnRocmVhZCkgeworCWVyciA9IC1FTk9NRU07CisJY29uZi0+dGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKHJhaWQxZCwgbWRkZXYsIE5VTEwpOworCWlmICghY29uZi0+dGhyZWFkKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgInJhaWQxOiBjb3VsZG4ndCBhbGxvY2F0ZSB0aHJlYWQgZm9yICVzXG4iLAogCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7Ci0JCWdvdG8gb3V0X2ZyZWVfY29uZjsKKwkJZ290byBhYm9ydDsKIAl9CiAKKwlyZXR1cm4gY29uZjsKKworIGFib3J0OgorCWlmIChjb25mKSB7CisJCWlmIChjb25mLT5yMWJpb19wb29sKQorCQkJbWVtcG9vbF9kZXN0cm95KGNvbmYtPnIxYmlvX3Bvb2wpOworCQlrZnJlZShjb25mLT5taXJyb3JzKTsKKwkJc2FmZV9wdXRfcGFnZShjb25mLT50bXBwYWdlKTsKKwkJa2ZyZWUoY29uZi0+cG9vbGluZm8pOworCQlrZnJlZShjb25mKTsKKwl9CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCit7CisJY29uZl90ICpjb25mOworCWludCBpOworCW1ka19yZGV2X3QgKnJkZXY7CisKKwlpZiAobWRkZXYtPmxldmVsICE9IDEpIHsKKwkJcHJpbnRrKCJyYWlkMTogJXM6IHJhaWQgbGV2ZWwgbm90IHNldCB0byBtaXJyb3JpbmcgKCVkKVxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldiksIG1kZGV2LT5sZXZlbCk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CisJCXByaW50aygicmFpZDE6ICVzOiByZXNoYXBlX3Bvc2l0aW9uIHNldCBidXQgbm90IHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldikpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyoKKwkgKiBjb3B5IHRoZSBhbHJlYWR5IHZlcmlmaWVkIGRldmljZXMgaW50byBvdXIgcHJpdmF0ZSBSQUlEMQorCSAqIGJvb2trZWVwaW5nIGFyZWEuIFt3aGF0ZXZlciB3ZSBhbGxvY2F0ZSBpbiBydW4oKSwKKwkgKiBzaG91bGQgYmUgZnJlZWQgaW4gc3RvcCgpXQorCSAqLworCWlmIChtZGRldi0+cHJpdmF0ZSA9PSBOVUxMKQorCQljb25mID0gc2V0dXBfY29uZihtZGRldik7CisJZWxzZQorCQljb25mID0gbWRkZXYtPnByaXZhdGU7CisKKwlpZiAoSVNfRVJSKGNvbmYpKQorCQlyZXR1cm4gUFRSX0VSUihjb25mKTsKKworCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CisJCWRpc2tfc3RhY2tfbGltaXRzKG1kZGV2LT5nZW5kaXNrLCByZGV2LT5iZGV2LAorCQkJCSAgcmRldi0+ZGF0YV9vZmZzZXQgPDwgOSk7CisJCS8qIGFzIHdlIGRvbid0IGhvbm91ciBtZXJnZV9idmVjX2ZuLCB3ZSBtdXN0IG5ldmVyIHJpc2sKKwkJICogdmlvbGF0aW5nIGl0LCBzbyBsaW1pdCAtPm1heF9zZWN0b3IgdG8gb25lIFBBR0UsIGFzCisJCSAqIGEgb25lIHBhZ2UgcmVxdWVzdCBpcyBuZXZlciBpbiB2aW9sYXRpb24uCisJCSAqLworCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKKwkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKKwkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJfQorCisJbWRkZXYtPmRlZ3JhZGVkID0gMDsKKwlmb3IgKGk9MDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKKwkJaWYgKGNvbmYtPm1pcnJvcnNbaV0ucmRldiA9PSBOVUxMIHx8CisJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpIHx8CisJCSAgICB0ZXN0X2JpdChGYXVsdHksICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSkKKwkJCW1kZGV2LT5kZWdyYWRlZCsrOworCisJaWYgKGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQgPT0gMSkKKwkJbWRkZXYtPnJlY292ZXJ5X2NwID0gTWF4U2VjdG9yOworCiAJaWYgKG1kZGV2LT5yZWNvdmVyeV9jcCAhPSBNYXhTZWN0b3IpCiAJCXByaW50ayhLRVJOX05PVElDRSAicmFpZDE6ICVzIGlzIG5vdCBjbGVhbiIKIAkJICAgICAgICIgLS0gc3RhcnRpbmcgYmFja2dyb3VuZCByZWNvbnN0cnVjdGlvblxuIiwKQEAgLTIwNzEsOSArMjEyNCwxNCBAQAogCQkicmFpZDE6IHJhaWQgc2V0ICVzIGFjdGl2ZSB3aXRoICVkIG91dCBvZiAlZCBtaXJyb3JzXG4iLAogCQltZG5hbWUobWRkZXYpLCBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCwgCiAJCW1kZGV2LT5yYWlkX2Rpc2tzKTsKKwogCS8qCiAJICogT2ssIGV2ZXJ5dGhpbmcgaXMganVzdCBmaW5lIG5vdwogCSAqLworCW1kZGV2LT50aHJlYWQgPSBjb25mLT50aHJlYWQ7CisJY29uZi0+dGhyZWFkID0gTlVMTDsKKwltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CisKIAltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSByYWlkMV91bnBsdWc7CkBAIC0yMDgxLDIzICsyMTM5LDYgQEAKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKIAltZF9pbnRlZ3JpdHlfcmVnaXN0ZXIobWRkZXYpOwogCXJldHVybiAwOwotCi1vdXRfbm9fbWVtOgotCXByaW50ayhLRVJOX0VSUiAicmFpZDE6IGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXNcbiIsCi0JICAgICAgIG1kbmFtZShtZGRldikpOwotCi1vdXRfZnJlZV9jb25mOgotCWlmIChjb25mKSB7Ci0JCWlmIChjb25mLT5yMWJpb19wb29sKQotCQkJbWVtcG9vbF9kZXN0cm95KGNvbmYtPnIxYmlvX3Bvb2wpOwotCQlrZnJlZShjb25mLT5taXJyb3JzKTsKLQkJc2FmZV9wdXRfcGFnZShjb25mLT50bXBwYWdlKTsKLQkJa2ZyZWUoY29uZi0+cG9vbGluZm8pOwotCQlrZnJlZShjb25mKTsKLQkJbWRkZXYtPnByaXZhdGUgPSBOVUxMOwotCX0KLW91dDoKLQlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBzdG9wKG1kZGV2X3QgKm1kZGV2KQpAQCAtMjI3MSw2ICsyMzEyLDkgQEAKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAogCXN3aXRjaChzdGF0ZSkgeworCWNhc2UgMjogLyogd2FrZSBmb3Igc3VzcGVuZCAqLworCQl3YWtlX3VwKCZjb25mLT53YWl0X2JhcnJpZXIpOworCQlicmVhazsKIAljYXNlIDE6CiAJCXJhaXNlX2JhcnJpZXIoY29uZik7CiAJCWJyZWFrOwpAQCAtMjI4MCw2ICsyMzI0LDIzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCAqcmFpZDFfdGFrZW92ZXIobWRkZXZfdCAqbWRkZXYpCit7CisJLyogcmFpZDEgY2FuIHRha2Ugb3ZlcjoKKwkgKiAgcmFpZDUgd2l0aCAyIGRldmljZXMsIGFueSBsYXlvdXQgb3IgY2h1bmsgc2l6ZQorCSAqLworCWlmIChtZGRldi0+bGV2ZWwgPT0gNSAmJiBtZGRldi0+cmFpZF9kaXNrcyA9PSAyKSB7CisJCWNvbmZfdCAqY29uZjsKKwkJbWRkZXYtPm5ld19sZXZlbCA9IDE7CisJCW1kZGV2LT5uZXdfbGF5b3V0ID0gMDsKKwkJbWRkZXYtPm5ld19jaHVua19zZWN0b3JzID0gMDsKKwkJY29uZiA9IHNldHVwX2NvbmYobWRkZXYpOworCQlpZiAoIUlTX0VSUihjb25mKSkKKwkJCWNvbmYtPmJhcnJpZXIgPSAxOworCQlyZXR1cm4gY29uZjsKKwl9CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5IHJhaWQxX3BlcnNvbmFsaXR5ID0KIHsKQEAgLTIyOTksNiArMjM2MCw3IEBACiAJLnNpemUJCT0gcmFpZDFfc2l6ZSwKIAkuY2hlY2tfcmVzaGFwZQk9IHJhaWQxX3Jlc2hhcGUsCiAJLnF1aWVzY2UJPSByYWlkMV9xdWllc2NlLAorCS50YWtlb3Zlcgk9IHJhaWQxX3Rha2VvdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmFpZF9pbml0KHZvaWQpCkBAIC0yMzE0LDYgKzIzNzYsNyBAQAogbW9kdWxlX2luaXQocmFpZF9pbml0KTsKIG1vZHVsZV9leGl0KHJhaWRfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJBSUQxIChtaXJyb3JpbmcpIHBlcnNvbmFsaXR5IGZvciBNRCIpOwogTU9EVUxFX0FMSUFTKCJtZC1wZXJzb25hbGl0eS0zIik7IC8qIFJBSUQxICovCiBNT0RVTEVfQUxJQVMoIm1kLXJhaWQxIik7CiBNT0RVTEVfQUxJQVMoIm1kLWxldmVsLTEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuaCBiL2RyaXZlcnMvbWQvcmFpZDEuaAppbmRleCBlODdiODRkLi41ZjJkNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmgKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5oCkBAIC01OSw2ICs1OSwxMSBAQAogCiAJbWVtcG9vbF90ICpyMWJpb19wb29sOwogCW1lbXBvb2xfdCAqcjFidWZfcG9vbDsKKworCS8qIFdoZW4gdGFraW5nIG92ZXIgYW4gYXJyYXkgZnJvbSBhIGRpZmZlcmVudCBwZXJzb25hbGl0eSwgd2Ugc3RvcmUKKwkgKiB0aGUgbmV3IHRocmVhZCBoZXJlIHVudGlsIHdlIGZ1bGx5IGFjdGl2YXRlIHRoZSBhcnJheS4KKwkgKi8KKwlzdHJ1Y3QgbWRrX3RocmVhZF9zCSp0aHJlYWQ7CiB9OwogCiB0eXBlZGVmIHN0cnVjdCByMV9wcml2YXRlX2RhdGFfcyBjb25mX3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCBjMmNiN2I4Li5kMTE5YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTgwNCw3ICs4MDQsNyBAQAogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKIAogCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKLQkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOworCQltZF9iYXJyaWVyX3JlcXVlc3QobWRkZXYsIGJpbyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQzMiw2ICsxNDMyLDQzIEBACiAKIAogLyoKKyAqIFVzZWQgYnkgZml4X3JlYWRfZXJyb3IoKSB0byBkZWNheSB0aGUgcGVyIHJkZXYgcmVhZF9lcnJvcnMuCisgKiBXZSBoYWx2ZSB0aGUgcmVhZCBlcnJvciBjb3VudCBmb3IgZXZlcnkgaG91ciB0aGF0IGhhcyBlbGFwc2VkCisgKiBzaW5jZSB0aGUgbGFzdCByZWNvcmRlZCByZWFkIGVycm9yLgorICoKKyAqLworc3RhdGljIHZvaWQgY2hlY2tfZGVjYXlfcmVhZF9lcnJvcnMobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpCit7CisJc3RydWN0IHRpbWVzcGVjIGN1cl90aW1lX21vbjsKKwl1bnNpZ25lZCBsb25nIGhvdXJzX3NpbmNlX2xhc3Q7CisJdW5zaWduZWQgaW50IHJlYWRfZXJyb3JzID0gYXRvbWljX3JlYWQoJnJkZXYtPnJlYWRfZXJyb3JzKTsKKworCWt0aW1lX2dldF90cygmY3VyX3RpbWVfbW9uKTsKKworCWlmIChyZGV2LT5sYXN0X3JlYWRfZXJyb3IudHZfc2VjID09IDAgJiYKKwkgICAgcmRldi0+bGFzdF9yZWFkX2Vycm9yLnR2X25zZWMgPT0gMCkgeworCQkvKiBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gYSByZWFkIGVycm9yICovCisJCXJkZXYtPmxhc3RfcmVhZF9lcnJvciA9IGN1cl90aW1lX21vbjsKKwkJcmV0dXJuOworCX0KKworCWhvdXJzX3NpbmNlX2xhc3QgPSAoY3VyX3RpbWVfbW9uLnR2X3NlYyAtCisJCQkgICAgcmRldi0+bGFzdF9yZWFkX2Vycm9yLnR2X3NlYykgLyAzNjAwOworCisJcmRldi0+bGFzdF9yZWFkX2Vycm9yID0gY3VyX3RpbWVfbW9uOworCisJLyoKKwkgKiBpZiBob3Vyc19zaW5jZV9sYXN0IGlzID4gdGhlIG51bWJlciBvZiBiaXRzIGluIHJlYWRfZXJyb3JzCisJICoganVzdCBzZXQgcmVhZCBlcnJvcnMgdG8gMC4gV2UgZG8gdGhpcyB0byBhdm9pZAorCSAqIG92ZXJmbG93aW5nIHRoZSBzaGlmdCBvZiByZWFkX2Vycm9ycyBieSBob3Vyc19zaW5jZV9sYXN0LgorCSAqLworCWlmIChob3Vyc19zaW5jZV9sYXN0ID49IDggKiBzaXplb2YocmVhZF9lcnJvcnMpKQorCQlhdG9taWNfc2V0KCZyZGV2LT5yZWFkX2Vycm9ycywgMCk7CisJZWxzZQorCQlhdG9taWNfc2V0KCZyZGV2LT5yZWFkX2Vycm9ycywgcmVhZF9lcnJvcnMgPj4gaG91cnNfc2luY2VfbGFzdCk7Cit9CisKKy8qCiAgKiBUaGlzIGlzIGEga2VybmVsIHRocmVhZCB3aGljaDoKICAqCiAgKgkxLglSZXRyaWVzIGZhaWxlZCByZWFkIG9wZXJhdGlvbnMgb24gd29ya2luZyBtaXJyb3JzLgpAQCAtMTQ0NCw2ICsxNDgxLDQzIEBACiAJaW50IHNlY3QgPSAwOyAvKiBPZmZzZXQgZnJvbSByMTBfYmlvLT5zZWN0b3IgKi8KIAlpbnQgc2VjdG9ycyA9IHIxMF9iaW8tPnNlY3RvcnM7CiAJbWRrX3JkZXZfdCpyZGV2OworCWludCBtYXhfcmVhZF9lcnJvcnMgPSBhdG9taWNfcmVhZCgmbWRkZXYtPm1heF9jb3JyX3JlYWRfZXJyb3JzKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwl7CisJCWludCBkID0gcjEwX2Jpby0+ZGV2c1tyMTBfYmlvLT5yZWFkX3Nsb3RdLmRldm51bTsKKwkJY2hhciBiW0JERVZOQU1FX1NJWkVdOworCQlpbnQgY3VyX3JlYWRfZXJyb3JfY291bnQgPSAwOworCisJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkXS5yZGV2KTsKKwkJYmRldm5hbWUocmRldi0+YmRldiwgYik7CisKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkvKiBkcml2ZSBoYXMgYWxyZWFkeSBiZWVuIGZhaWxlZCwganVzdCBpZ25vcmUgYW55CisJCQkgICBtb3JlIGZpeF9yZWFkX2Vycm9yKCkgYXR0ZW1wdHMgKi8KKwkJCXJldHVybjsKKwkJfQorCisJCWNoZWNrX2RlY2F5X3JlYWRfZXJyb3JzKG1kZGV2LCByZGV2KTsKKwkJYXRvbWljX2luYygmcmRldi0+cmVhZF9lcnJvcnMpOworCQljdXJfcmVhZF9lcnJvcl9jb3VudCA9IGF0b21pY19yZWFkKCZyZGV2LT5yZWFkX2Vycm9ycyk7CisJCWlmIChjdXJfcmVhZF9lcnJvcl9jb3VudCA+IG1heF9yZWFkX2Vycm9ycykgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSAgICAgICAicmFpZDEwOiAlczogUmFpZCBkZXZpY2UgZXhjZWVkZWQgIgorCQkJICAgICAgICJyZWFkX2Vycm9yIHRocmVzaG9sZCAiCisJCQkgICAgICAgIltjdXIgJWQ6bWF4ICVkXVxuIiwKKwkJCSAgICAgICBiLCBjdXJfcmVhZF9lcnJvcl9jb3VudCwgbWF4X3JlYWRfZXJyb3JzKTsKKwkJCXByaW50ayhLRVJOX05PVElDRQorCQkJICAgICAgICJyYWlkMTA6ICVzOiBGYWlsaW5nIHJhaWQgIgorCQkJICAgICAgICJkZXZpY2VcbiIsIGIpOworCQkJbWRfZXJyb3IobWRkZXYsIGNvbmYtPm1pcnJvcnNbZF0ucmRldik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAl3aGlsZShzZWN0b3JzKSB7CiAJCWludCBzID0gc2VjdG9yczsKIAkJaW50IHNsID0gcjEwX2Jpby0+cmVhZF9zbG90OwpAQCAtMTQ4OCw2ICsxNTYyLDcgQEAKIAkJLyogd3JpdGUgaXQgYmFjayBhbmQgcmUtcmVhZCAqLwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXdoaWxlIChzbCAhPSByMTBfYmlvLT5yZWFkX3Nsb3QpIHsKKwkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAkJCWludCBkOwogCQkJaWYgKHNsPT0wKQogCQkJCXNsID0gY29uZi0+Y29waWVzOwpAQCAtMTUwMyw5ICsxNTc4LDIxIEBACiAJCQkJCQkgcjEwX2Jpby0+ZGV2c1tzbF0uYWRkciArCiAJCQkJCQkgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0LAogCQkJCQkJIHM8PDksIGNvbmYtPnRtcHBhZ2UsIFdSSVRFKQotCQkJCSAgICA9PSAwKQorCQkJCSAgICA9PSAwKSB7CiAJCQkJCS8qIFdlbGwsIHRoaXMgZGV2aWNlIGlzIGRlYWQgKi8KKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCSAgICAgICAicmFpZDEwOiVzOiByZWFkIGNvcnJlY3Rpb24gIgorCQkJCQkgICAgICAgIndyaXRlIGZhaWxlZCIKKwkJCQkJICAgICAgICIgKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCisJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLAorCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2VjdCsKKwkJCQkJICAgICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKKwkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJyYWlkMTA6JXM6IGZhaWxpbmcgIgorCQkJCQkgICAgICAgImRyaXZlXG4iLAorCQkJCQkgICAgICAgYmRldm5hbWUocmRldi0+YmRldiwgYikpOwogCQkJCQltZF9lcnJvcihtZGRldiwgcmRldik7CisJCQkJfQogCQkJCXJkZXZfZGVjX3BlbmRpbmcocmRldiwgbWRkZXYpOwogCQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCX0KQEAgLTE1MjYsMTAgKzE2MTMsMjIgQEAKIAkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsCiAJCQkJCQkgcjEwX2Jpby0+ZGV2c1tzbF0uYWRkciArCiAJCQkJCQkgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0LAotCQkJCQkJIHM8PDksIGNvbmYtPnRtcHBhZ2UsIFJFQUQpID09IDApCisJCQkJCQkgczw8OSwgY29uZi0+dG1wcGFnZSwKKwkJCQkJCSBSRUFEKSA9PSAwKSB7CiAJCQkJCS8qIFdlbGwsIHRoaXMgZGV2aWNlIGlzIGRlYWQgKi8KKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJCSAgICAgICAicmFpZDEwOiVzOiB1bmFibGUgdG8gcmVhZCBiYWNrICIKKwkJCQkJICAgICAgICJjb3JyZWN0ZWQgc2VjdG9ycyIKKwkJCQkJICAgICAgICIgKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCisJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLAorCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2VjdCsKKwkJCQkJCSAgICByZGV2LT5kYXRhX29mZnNldCksCisJCQkJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSk7CisJCQkJCXByaW50ayhLRVJOX05PVElDRSAicmFpZDEwOiVzOiBmYWlsaW5nIGRyaXZlXG4iLAorCQkJCQkgICAgICAgYmRldm5hbWUocmRldi0+YmRldiwgYikpOworCiAJCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKLQkJCQllbHNlCisJCQkJfSBlbHNlIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCQkgICAgICAgInJhaWQxMDolczogcmVhZCBlcnJvciBjb3JyZWN0ZWQiCiAJCQkJCSAgICAgICAiICglZCBzZWN0b3JzIGF0ICVsbHUgb24gJXMpXG4iLApAQCAtMTUzNyw2ICsxNjM2LDcgQEAKIAkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHNlY3QrCiAJCQkJCSAgICAgICAgICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKKwkJCQl9CiAKIAkJCQlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTsKIAkJCQlyY3VfcmVhZF9sb2NrKCk7CkBAIC0yMjc1LDEzICsyMzc1LDYgQEAKIAkJbG93ZXJfYmFycmllcihjb25mKTsKIAkJYnJlYWs7CiAJfQotCWlmIChtZGRldi0+dGhyZWFkKSB7Ci0JCWlmIChtZGRldi0+Yml0bWFwKQotCQkJbWRkZXYtPnRocmVhZC0+dGltZW91dCA9IG1kZGV2LT5iaXRtYXAtPmRhZW1vbl9zbGVlcCAqIEhaOwotCQllbHNlCi0JCQltZGRldi0+dGhyZWFkLT50aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7Ci0JfQogfQogCiBzdGF0aWMgc3RydWN0IG1ka19wZXJzb25hbGl0eSByYWlkMTBfcGVyc29uYWxpdHkgPQpAQCAtMjMxNSw2ICsyNDA4LDcgQEAKIG1vZHVsZV9pbml0KHJhaWRfaW5pdCk7CiBtb2R1bGVfZXhpdChyYWlkX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSQUlEMTAgKHN0cmlwZWQgbWlycm9yKSBwZXJzb25hbGl0eSBmb3IgTUQiKTsKIE1PRFVMRV9BTElBUygibWQtcGVyc29uYWxpdHktOSIpOyAvKiBSQUlEMTAgKi8KIE1PRFVMRV9BTElBUygibWQtcmFpZDEwIik7CiBNT0RVTEVfQUxJQVMoIm1kLWxldmVsLTEwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggZDI5MjE1ZC4uZTg0MjA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMjk0Nyw2ICsyOTQ3LDcgQEAKIAlzdHJ1Y3QgcjVkZXYgKmRldjsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXYgPSBOVUxMOwogCWludCBwcmV4b3I7CisJaW50IGRlY19wcmVyZWFkX2FjdGl2ZSA9IDA7CiAKIAltZW1zZXQoJnMsIDAsIHNpemVvZihzKSk7CiAJcHJfZGVidWcoImhhbmRsaW5nIHN0cmlwZSAlbGx1LCBzdGF0ZT0lI2x4IGNudD0lZCwgcGRfaWR4PSVkIGNoZWNrOiVkICIKQEAgLTMwOTYsMTIgKzMwOTcsOCBAQAogCQkJCQlzZXRfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpOwogCQkJfQogCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLCAmc2gtPnN0YXRlKSkgewotCQkJYXRvbWljX2RlYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpIDwKLQkJCQlJT19USFJFU0hPTEQpCi0JCQkJbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKLQkJfQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwgJnNoLT5zdGF0ZSkpCisJCQlkZWNfcHJlcmVhZF9hY3RpdmUgPSAxOwogCX0KIAogCS8qIE5vdyB0byBjb25zaWRlciBuZXcgd3JpdGUgcmVxdWVzdHMgYW5kIHdoYXQgZWxzZSwgaWYgYW55dGhpbmcKQEAgLTMyMDgsNiArMzIwNSwxNiBAQAogCiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCisJaWYgKGRlY19wcmVyZWFkX2FjdGl2ZSkgeworCQkvKiBXZSBkZWxheSB0aGlzIHVudGlsIGFmdGVyIG9wc19ydW5faW8gc28gdGhhdCBpZiBtYWtlX3JlcXVlc3QKKwkJICogaXMgd2FpdGluZyBvbiBhIGJhcnJpZXIsIGl0IHdvbid0IGNvbnRpbnVlIHVudGlsIHRoZSB3cml0ZXMKKwkJICogaGF2ZSBhY3R1YWxseSBiZWVuIHN1Ym1pdHRlZC4KKwkJICovCisJCWF0b21pY19kZWMoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpOworCQlpZiAoYXRvbWljX3JlYWQoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpIDwKKwkJICAgIElPX1RIUkVTSE9MRCkKKwkJCW1kX3dha2V1cF90aHJlYWQoY29uZi0+bWRkZXYtPnRocmVhZCk7CisJfQogCXJldHVybl9pbyhyZXR1cm5fYmkpOwogfQogCkBAIC0zMjIxLDYgKzMyMjgsNyBAQAogCXN0cnVjdCByNl9zdGF0ZSByNnM7CiAJc3RydWN0IHI1ZGV2ICpkZXYsICpwZGV2LCAqcWRldjsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXYgPSBOVUxMOworCWludCBkZWNfcHJlcmVhZF9hY3RpdmUgPSAwOwogCiAJcHJfZGVidWcoImhhbmRsaW5nIHN0cmlwZSAlbGx1LCBzdGF0ZT0lI2x4IGNudD0lZCwgIgogCQkicGRfaWR4PSVkLCBxZF9pZHg9JWRcbiwgY2hlY2s6JWQsIHJlY29uc3RydWN0OiVkXG4iLApAQCAtMzM1OCw3ICszMzY2LDYgQEAKIAkgKiBjb21wbGV0ZWQKIAkgKi8KIAlpZiAoc2gtPnJlY29uc3RydWN0X3N0YXRlID09IHJlY29uc3RydWN0X3N0YXRlX2RyYWluX3Jlc3VsdCkgewotCQlpbnQgcWRfaWR4ID0gc2gtPnFkX2lkeDsKIAogCQlzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSByZWNvbnN0cnVjdF9zdGF0ZV9pZGxlOwogCQkvKiBBbGwgdGhlICd3cml0dGVuJyBidWZmZXJzIGFuZCB0aGUgcGFyaXR5IGJsb2NrcyBhcmUgcmVhZHkgdG8KQEAgLTMzODAsMTIgKzMzODcsOCBAQAogCQkJCQlzZXRfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpOwogCQkJfQogCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLCAmc2gtPnN0YXRlKSkgewotCQkJYXRvbWljX2RlYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpIDwKLQkJCQlJT19USFJFU0hPTEQpCi0JCQkJbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKLQkJfQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwgJnNoLT5zdGF0ZSkpCisJCQlkZWNfcHJlcmVhZF9hY3RpdmUgPSAxOwogCX0KIAogCS8qIE5vdyB0byBjb25zaWRlciBuZXcgd3JpdGUgcmVxdWVzdHMgYW5kIHdoYXQgZWxzZSwgaWYgYW55dGhpbmcKQEAgLTM0OTQsNiArMzQ5NywxOCBAQAogCiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCisKKwlpZiAoZGVjX3ByZXJlYWRfYWN0aXZlKSB7CisJCS8qIFdlIGRlbGF5IHRoaXMgdW50aWwgYWZ0ZXIgb3BzX3J1bl9pbyBzbyB0aGF0IGlmIG1ha2VfcmVxdWVzdAorCQkgKiBpcyB3YWl0aW5nIG9uIGEgYmFycmllciwgaXQgd29uJ3QgY29udGludWUgdW50aWwgdGhlIHdyaXRlcworCQkgKiBoYXZlIGFjdHVhbGx5IGJlZW4gc3VibWl0dGVkLgorCQkgKi8KKwkJYXRvbWljX2RlYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7CisJCWlmIChhdG9taWNfcmVhZCgmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcykgPAorCQkgICAgSU9fVEhSRVNIT0xEKQorCQkJbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKKwl9CisKIAlyZXR1cm5faW8ocmV0dXJuX2JpKTsKIH0KIApAQCAtMzc0MSw3ICszNzU2LDcgQEAKIHsKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgZGRfaWR4OworCWludCBkZF9pZHg7CiAJc3RydWN0IGJpbyogYWxpZ25fYmk7CiAJbWRrX3JkZXZfdCAqcmRldjsKIApAQCAtMzg2Niw3ICszODgxLDEzIEBACiAJaW50IGNwdSwgcmVtYWluaW5nOwogCiAJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpLCBCSU9fUldfQkFSUklFUikpKSB7Ci0JCWJpb19lbmRpbyhiaSwgLUVPUE5PVFNVUFApOworCQkvKiBEcmFpbiBhbGwgcGVuZGluZyB3cml0ZXMuICBXZSBvbmx5IHJlYWxseSBuZWVkCisJCSAqIHRvIGVuc3VyZSB0aGV5IGhhdmUgYmVlbiBzdWJtaXR0ZWQsIGJ1dCB0aGlzIGlzCisJCSAqIGVhc2llci4KKwkJICovCisJCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAxKTsKKwkJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDApOworCQltZF9iYXJyaWVyX3JlcXVlc3QobWRkZXYsIGJpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zOTkwLDYgKzQwMTEsOSBAQAogCQkJZmluaXNoX3dhaXQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXAsICZ3KTsKIAkJCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CiAJCQljbGVhcl9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpOworCQkJaWYgKG1kZGV2LT5iYXJyaWVyICYmIAorCQkJICAgICF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwgJnNoLT5zdGF0ZSkpCisJCQkJYXRvbWljX2luYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7CiAJCQlyZWxlYXNlX3N0cmlwZShzaCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBjYW5ub3QgZ2V0IHN0cmlwZSBmb3IgcmVhZC1haGVhZCwganVzdCBnaXZlLXVwICovCkBAIC00MDA5LDYgKzQwMzMsMTQgQEAKIAogCQliaW9fZW5kaW8oYmksIDApOwogCX0KKworCWlmIChtZGRldi0+YmFycmllcikgeworCQkvKiBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzdHJpcGVzIHRvIGFsbCBiZSBoYW5kbGVkLgorCQkgKiBTbzogd2FpdCBmb3IgcHJlcmVhZF9hY3RpdmVfc3RyaXBlcyB0byBkcm9wIHRvIDAuCisJCSAqLworCQl3YWl0X2V2ZW50KG1kZGV2LT50aHJlYWQtPndxdWV1ZSwKKwkJCSAgIGF0b21pY19yZWFkKCZjb25mLT5wcmVyZWFkX2FjdGl2ZV9zdHJpcGVzKSA9PSAwKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4NjAsNiArNTg5Miw3IEBACiBtb2R1bGVfaW5pdChyYWlkNV9pbml0KTsKIG1vZHVsZV9leGl0KHJhaWQ1X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSQUlENC81LzYgKHN0cmlwaW5nIHdpdGggcGFyaXR5KSBwZXJzb25hbGl0eSBmb3IgTUQiKTsKIE1PRFVMRV9BTElBUygibWQtcGVyc29uYWxpdHktNCIpOyAvKiBSQUlENSAqLwogTU9EVUxFX0FMSUFTKCJtZC1yYWlkNSIpOwogTU9EVUxFX0FMSUFTKCJtZC1yYWlkNCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMgYi9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwppbmRleCA4NjYyMTVhLi5iZmZjNjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwpAQCAtMzEsMjUgKzMxLDYgQEAKIHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9jYWxsOwogRVhQT1JUX1NZTUJPTF9HUEwocmFpZDZfY2FsbCk7CiAKLS8qIFZhcmlvdXMgcm91dGluZSBzZXRzICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHgxOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9pbnR4MjsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfaW50eDQ7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHg4OwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9pbnR4MTY7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHgzMjsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfbW14eDE7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X21teHgyOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9zc2UxeDE7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X3NzZTF4MjsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfc3NlMngxOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9zc2UyeDI7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X3NzZTJ4NDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfYWx0aXZlYzE7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2FsdGl2ZWMyOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9hbHRpdmVjNDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfYWx0aXZlYzg7Ci0KIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyAqIGNvbnN0IHJhaWQ2X2FsZ29zW10gPSB7CiAJJnJhaWQ2X2ludHgxLAogCSZyYWlkNl9pbnR4MiwKQEAgLTE2OSwzICsxNTAsNCBAQAogc3Vic3lzX2luaXRjYWxsKHJhaWQ2X3NlbGVjdF9hbGdvKTsKIG1vZHVsZV9leGl0KHJhaWQ2X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSQUlENiBRLXN5bmRyb21lIGNhbGN1bGF0aW9ucyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGU3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgSVJfQ09SRQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJTlBVVAorCWRlZmF1bHQgSU5QVVQKKworY29uZmlnIFZJREVPX0lSCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIElSX0NPUkUKKwlkZWZhdWx0IElSX0NPUkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNWRkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAoraXItY29tbW9uLW9ianMgIDo9IGlyLWZ1bmN0aW9ucy5vIGlyLWtleW1hcHMubworaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8KKworb2JqLSQoQ09ORklHX0lSX0NPUkUpICs9IGlyLWNvcmUubworb2JqLSQoQ09ORklHX1ZJREVPX0lSKSArPSBpci1jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2YTEzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKgorICogc29tZSBjb21tb24gc3RydWN0cyBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSBpbmZyYXJlZCByZW1vdGVzIHZpYQorICogaW5wdXQgbGF5ZXIgLi4uCisgKgorICogKGMpIDIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK01PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCByZXBlYXQgPSAxOworbW9kdWxlX3BhcmFtKHJlcGVhdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVwZWF0LCJhdXRvLXJlcGVhdCBmb3IgSVIga2V5cyAoZGVmYXVsdDogb24pIik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIGlyX2lucHV0X2tleV9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIpCit7CisJaWYgKEtFWV9SRVNFUlZFRCA9PSBpci0+a2V5Y29kZSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBrZXk6IGtleT0weCUwMnggZG93bj0lZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaXItPmlyX2tleSwgaXItPmtleXByZXNzZWQpOworCQlyZXR1cm47CisJfQorCUlSX2RwcmludGsoMSwiJXM6IGtleSBldmVudCBjb2RlPSVkIGRvd249JWRcbiIsCisJCWRldi0+bmFtZSxpci0+a2V5Y29kZSxpci0+a2V5cHJlc3NlZCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsaXItPmtleWNvZGUsaXItPmtleXByZXNzZWQpOworCWlucHV0X3N5bmMoZGV2KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50IGlyX2lucHV0X2luaXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAorCQkgICBpbnQgaXJfdHlwZSkKK3sKKwlpci0+aXJfdHlwZSA9IGlyX3R5cGU7CisKKwlpZiAocmVwZWF0KQorCQlzZXRfYml0KEVWX1JFUCwgZGV2LT5ldmJpdCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X2luaXQpOworCisKK3ZvaWQgaXJfaW5wdXRfbm9rZXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyKQoreworCWlmIChpci0+a2V5cHJlc3NlZCkgeworCQlpci0+a2V5cHJlc3NlZCA9IDA7CisJCWlyX2lucHV0X2tleV9ldmVudChkZXYsaXIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X25va2V5KTsKKwordm9pZCBpcl9pbnB1dF9rZXlkb3duKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKKwkJICAgICAgdTMyIGlyX2tleSkKK3sKKwl1MzIga2V5Y29kZSA9IGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKGRldiwgaXJfa2V5KTsKKworCWlmIChpci0+a2V5cHJlc3NlZCAmJiBpci0+a2V5Y29kZSAhPSBrZXljb2RlKSB7CisJCWlyLT5rZXlwcmVzc2VkID0gMDsKKwkJaXJfaW5wdXRfa2V5X2V2ZW50KGRldixpcik7CisJfQorCWlmICghaXItPmtleXByZXNzZWQpIHsKKwkJaXItPmlyX2tleSAgPSBpcl9rZXk7CisJCWlyLT5rZXljb2RlID0ga2V5Y29kZTsKKwkJaXItPmtleXByZXNzZWQgPSAxOworCQlpcl9pbnB1dF9rZXlfZXZlbnQoZGV2LGlyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9rZXlkb3duKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGV4dHJhY3QgbWFzayBiaXRzIG91dCBvZiBkYXRhIGFuZCBwYWNrIHRoZW0gaW50byB0aGUgcmVzdWx0ICovCit1MzIgaXJfZXh0cmFjdF9iaXRzKHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwl1MzIgdmJpdCA9IDEsIHZhbHVlID0gMDsKKworCWRvIHsKKwkgICAgaWYgKG1hc2smMSkgeworCQlpZiAoZGF0YSYxKQorCQkJdmFsdWUgfD0gdmJpdDsKKwkJdmJpdDw8PTE7CisJICAgIH0KKwkgICAgZGF0YT4+PTE7CisJfSB3aGlsZSAobWFzaz4+PTEpOworCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfZXh0cmFjdF9iaXRzKTsKKworc3RhdGljIGludCBpbmxpbmUgZ2V0Yml0KHUzMiAqc2FtcGxlcywgaW50IGJpdCkKK3sKKwlyZXR1cm4gKHNhbXBsZXNbYml0LzMyXSAmICgxIDw8ICgzMS0oYml0JTMyKSkpKSA/IDEgOiAwOworfQorCisvKiBzdW1wIHJhdyBzYW1wbGVzIGZvciB2aXN1YWwgZGVidWdnaW5nIDspICovCitpbnQgaXJfZHVtcF9zYW1wbGVzKHUzMiAqc2FtcGxlcywgaW50IGNvdW50KQoreworCWludCBpLCBiaXQsIHN0YXJ0OworCisJcHJpbnRrKEtFUk5fREVCVUcgImlyIHNhbXBsZXM6ICIpOworCXN0YXJ0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7CisJCWJpdCA9IGdldGJpdChzYW1wbGVzLGkpOworCQlpZiAoYml0KQorCQkJc3RhcnQgPSAxOworCQlpZiAoMCA9PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoIiVzIiwgYml0ID8gIiMiIDogIl8iKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfZHVtcF9zYW1wbGVzKTsKKworLyogZGVjb2RlIHJhdyBzYW1wbGVzLCBwdWxzZSBkaXN0YW5jZSBjb2RpbmcgdXNlZCBieSBORUMgcmVtb3RlcyAqLworaW50IGlyX2RlY29kZV9wdWxzZWRpc3RhbmNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCkKK3sKKwlpbnQgaSxsYXN0LGJpdCxsZW47CisJdTMyIGN1ckJpdDsKKwl1MzIgdmFsdWU7CisKKwkvKiBmaW5kIHN0YXJ0IGJ1cnN0ICovCisJZm9yIChpID0gbGVuID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGJpdCkgeworCQkJbGVuKys7CisJCX0gZWxzZSB7CisJCQlpZiAobGVuID49IDI5KQorCQkJCWJyZWFrOworCQkJbGVuID0gMDsKKwkJfQorCX0KKworCS8qIHN0YXJ0IGJ1cnN0IHRvIHNob3J0ICovCisJaWYgKGxlbiA8IDI5KQorCQlyZXR1cm4gMHhmZmZmZmZmZjsKKworCS8qIGZpbmQgc3RhcnQgc2lsZW5jZSAqLworCWZvciAobGVuID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGJpdCkgeworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlsZW4rKzsKKwkJfQorCX0KKworCS8qIHNpbGVuY2UgdG8gc2hvcnQgKi8KKwlpZiAobGVuIDwgNykKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7CisKKwkvKiBnbyBkZWNvZGluZyAqLworCWxlbiAgID0gMDsKKwlsYXN0ID0gMTsKKwl2YWx1ZSA9IDA7IGN1ckJpdCA9IDE7CisJZm9yICg7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKKwkJYml0ICA9IGdldGJpdChzYW1wbGVzLGkpOworCQlpZiAobGFzdCkgeworCQkJaWYoYml0KSB7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWxlbiA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYml0KSB7CisJCQkJaWYgKGxlbiA+IChsb3cgKyBoaWdoKSAvMikKKwkJCQkJdmFsdWUgfD0gY3VyQml0OworCQkJCWN1ckJpdCA8PD0gMTsKKwkJCQlpZiAoY3VyQml0ID09IDEpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJfQorCQlsYXN0ID0gYml0OworCX0KKworCXJldHVybiB2YWx1ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2RlY29kZV9wdWxzZWRpc3RhbmNlKTsKKworLyogZGVjb2RlIHJhdyBzYW1wbGVzLCBiaXBoYXNlIGNvZGluZywgdXNlZCBieSByYzUgZm9yIGV4YW1wbGUgKi8KK2ludCBpcl9kZWNvZGVfYmlwaGFzZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpCit7CisJaW50IGksbGFzdCxiaXQsbGVuLGZsaXBzOworCXUzMiB2YWx1ZTsKKworCS8qIGZpbmQgc3RhcnQgYml0ICgxKSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWJpdCA9IGdldGJpdChzYW1wbGVzLGkpOworCQlpZiAoYml0KQorCQkJYnJlYWs7CisJfQorCisJLyogZ28gZGVjb2RpbmcgKi8KKwlsZW4gICA9IDA7CisJZmxpcHMgPSAwOworCXZhbHVlID0gMTsKKwlmb3IgKDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQlpZiAobGVuID4gaGlnaCkKKwkJCWJyZWFrOworCQlpZiAoZmxpcHMgPiAxKQorCQkJYnJlYWs7CisJCWxhc3QgPSBiaXQ7CisJCWJpdCAgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGxhc3QgPT0gYml0KSB7CisJCQlsZW4rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsZW4gPCBsb3cpIHsKKwkJCWxlbisrOworCQkJZmxpcHMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCXZhbHVlIDw8PSAxOworCQl2YWx1ZSB8PSBiaXQ7CisJCWZsaXBzID0gMDsKKwkJbGVuICAgPSAxOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfYmlwaGFzZSk7CisKKy8qIFJDNSBkZWNvZGluZyBzdHVmZiwgbW92ZWQgZnJvbSBidHR2LWlucHV0LmMgdG8gc2hhcmUgaXQgd2l0aAorICogc2FhNzEzNCAqLworCisvKiBkZWNvZGUgcmF3IGJpdCBwYXR0ZXJuIHRvIFJDNSBjb2RlICovCit1MzIgaXJfcmM1X2RlY29kZSh1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwl1bnNpZ25lZCBpbnQgb3JnX2NvZGUgPSBjb2RlOworCXVuc2lnbmVkIGludCBwYWlyOworCXVuc2lnbmVkIGludCByYzUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE0OyArK2kpIHsKKwkJcGFpciA9IGNvZGUgJiAweDM7CisJCWNvZGUgPj49IDI7CisKKwkJcmM1IDw8PSAxOworCQlzd2l0Y2ggKHBhaXIpIHsKKwkJY2FzZSAwOgorCQljYXNlIDI6CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmM1IHw9IDE7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiBpcl9yYzVfZGVjb2RlKCV4KSBiYWQgY29kZVxuIiwgb3JnX2NvZGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiBjb2RlPSV4LCByYzU9JXgsIHN0YXJ0PSV4LCB0b2dnbGU9JXgsIGFkZHJlc3M9JXgsICIKKwkJImluc3RyPSV4XG4iLCByYzUsIG9yZ19jb2RlLCBSQzVfU1RBUlQocmM1KSwKKwkJUkM1X1RPR0dMRShyYzUpLCBSQzVfQUREUihyYzUpLCBSQzVfSU5TVFIocmM1KSk7CisJcmV0dXJuIHJjNTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV9kZWNvZGUpOworCit2b2lkIGlyX3JjNV90aW1lcl9lbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjYXJkX2lyICppciA9IChzdHJ1Y3QgY2FyZF9pciAqKWRhdGE7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdW5zaWduZWQgbG9uZyBjdXJyZW50X2ppZmZpZXMsIHRpbWVvdXQ7CisJdTMyIGdhcDsKKwl1MzIgcmM1ID0gMDsKKworCS8qIGdldCB0aW1lICovCisJY3VycmVudF9qaWZmaWVzID0gamlmZmllczsKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKworCS8qIGF2b2lkIG92ZXJmbG93IHdpdGggZ2FwID4xcyAqLworCWlmICh0di50dl9zZWMgLSBpci0+YmFzZV90aW1lLnR2X3NlYyA+IDEpIHsKKwkJZ2FwID0gMjAwMDAwOworCX0gZWxzZSB7CisJCWdhcCA9IDEwMDAwMDAgKiAodHYudHZfc2VjIC0gaXItPmJhc2VfdGltZS50dl9zZWMpICsKKwkJICAgIHR2LnR2X3VzZWMgLSBpci0+YmFzZV90aW1lLnR2X3VzZWM7CisJfQorCisJLyogc2lnbmFsIHdlJ3JlIHJlYWR5IHRvIHN0YXJ0IGEgbmV3IGNvZGUgKi8KKwlpci0+YWN0aXZlID0gMDsKKworCS8qIEFsbG93IHNvbWUgdGltZXIgaml0dGVyIChSQzUgaXMgfjI0bXMgYW55d2F5IHNvIHRoaXMgaXMgb2spICovCisJaWYgKGdhcCA8IDI4MDAwKSB7CisJCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjogc3B1cmlvdXMgdGltZXJfZW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpci0+bGFzdF9iaXQgPCAyMCkgeworCQkvKiBpZ25vcmUgc3B1cmlvdXMgY29kZXMgKGNhdXNlZCBieSBsaWdodC9vdGhlciByZW1vdGVzKSAqLworCQlJUl9kcHJpbnRrKDEsICJpci1jb21tb246IHNob3J0IGNvZGU6ICV4XG4iLCBpci0+Y29kZSk7CisJfSBlbHNlIHsKKwkJaXItPmNvZGUgPSAoaXItPmNvZGUgPDwgaXItPnNoaWZ0X2J5KSB8IDE7CisJCXJjNSA9IGlyX3JjNV9kZWNvZGUoaXItPmNvZGUpOworCisJCS8qIHR3byBzdGFydCBiaXRzPyAqLworCQlpZiAoUkM1X1NUQVJUKHJjNSkgIT0gaXItPnN0YXJ0KSB7CisJCQlJUl9kcHJpbnRrKDEsICJpci1jb21tb246IHJjNSBzdGFydCBiaXRzIGludmFsaWQ6ICV1XG4iLCBSQzVfU1RBUlQocmM1KSk7CisKKwkJCS8qIHJpZ2h0IGFkZHJlc3M/ICovCisJCX0gZWxzZSBpZiAoUkM1X0FERFIocmM1KSA9PSBpci0+YWRkcikgeworCQkJdTMyIHRvZ2dsZSA9IFJDNV9UT0dHTEUocmM1KTsKKwkJCXUzMiBpbnN0ciA9IFJDNV9JTlNUUihyYzUpOworCisJCQkvKiBHb29kIGNvZGUsIGRlY2lkZSBpZiByZXBlYXQvcmVwcmVzcyAqLworCQkJaWYgKHRvZ2dsZSAhPSBSQzVfVE9HR0xFKGlyLT5sYXN0X3JjNSkgfHwKKwkJCSAgICBpbnN0ciAhPSBSQzVfSU5TVFIoaXItPmxhc3RfcmM1KSkgeworCQkJCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjogaW5zdHJ1Y3Rpb24gJXgsIHRvZ2dsZSAleFxuIiwgaW5zdHIsCisJCQkJCXRvZ2dsZSk7CisJCQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CisJCQkJaXJfaW5wdXRfa2V5ZG93bihpci0+ZGV2LCAmaXItPmlyLCBpbnN0cik7CisJCQl9CisKKwkJCS8qIFNldC9yZXNldCBrZXktdXAgdGltZXIgKi8KKwkJCXRpbWVvdXQgPSBjdXJyZW50X2ppZmZpZXMgKworCQkJCSAgbXNlY3NfdG9famlmZmllcyhpci0+cmM1X2tleV90aW1lb3V0KTsKKwkJCW1vZF90aW1lcigmaXItPnRpbWVyX2tleXVwLCB0aW1lb3V0KTsKKworCQkJLyogU2F2ZSBjb2RlIGZvciByZXBlYXQgdGVzdCAqLworCQkJaXItPmxhc3RfcmM1ID0gcmM1OworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmM1X3RpbWVyX2VuZCk7CisKK3ZvaWQgaXJfcmM1X3RpbWVyX2tleXVwKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSAoc3RydWN0IGNhcmRfaXIgKilkYXRhOworCisJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiBrZXkgcmVsZWFzZWRcbiIpOworCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmM1X3RpbWVyX2tleXVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5bWFwcy5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1rZXltYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZTZiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5bWFwcy5jCkBAIC0wLDAgKzEsMzM5NSBAQAorLyoKKyAgICBLZXl0YWJsZXMgZm9yIHN1cHBvcnRlZCByZW1vdGUgY29udHJvbHMsIHVzZWQgb24gZHJpdmVycy9tZWRpYQorICAgIGRldmljZXMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCisgKiBOT1RJQ0UgRk9SIERFVkVMT1BFUlM6CisgKiAgIFRoZSBJUiBtYXBwaW5ncyBzaG91bGQgYmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gd2hhdCdzCisgKiAgIHNwZWNpZmllZCBhdDoKKyAqICAgICAgaHR0cDovL2xpbnV4dHYub3JnL3dpa2kvaW5kZXgucGhwL1JlbW90ZV9Db250cm9sbGVycworICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorCisvKiBlbXB0eSBrZXl0YWJsZSwgY2FuIGJlIHVzZWQgYXMgcGxhY2Vob2xkZXIgZm9yIG5vdC15ZXQgY3JlYXRlZCBrZXl0YWJsZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZW1wdHlbXSA9IHsKKwl7IDB4MmEsIEtFWV9DT0ZGRUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbXB0eV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2VtcHR5LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbXB0eSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1wdHlfdGFibGUpOworCisvKiBNaWNoYWwgTWFqY2hyb3dpY3ogPG1tYWpjaHJvd2ljekBnbWFpbC5jb20+ICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Byb3RldXNfMjMwOVtdID0geworCS8qIG51bWVyaWMgKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4NWMsIEtFWV9QT1dFUiB9LAkJLyogcG93ZXIgICAgICAgKi8KKwl7IDB4MjAsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgwZiwgS0VZX0JBQ0tTUEFDRSB9LAkvKiByZWNhbGwgICAgICAqLworCXsgMHgxYiwgS0VZX0VOVEVSIH0sCQkvKiBtdXRlICAgICAgICAqLworCXsgMHg0MSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICAgICAgKi8KKwl7IDB4NDMsIEtFWV9TVE9QIH0sCQkvKiBzdG9wICAgICAgICAqLworCXsgMHgxNiwgS0VZX1MgfSwKKwl7IDB4MWEsIEtFWV9QT1dFUjIgfSwJCS8qIG9mZiAgICAgICAgICovCisJeyAweDJlLCBLRVlfUkVEIH0sCisJeyAweDFmLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAtICAgKi8KKwl7IDB4MWMsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCArICAgKi8KKwl7IDB4MTAsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbHVtZSAtICAgICovCisJeyAweDFlLCBLRVlfVk9MVU1FVVAgfSwJCS8qIHZvbHVtZSArICAgICovCisJeyAweDE0LCBLRVlfRjEgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19wcm90ZXVzXzIzMDlfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19wcm90ZXVzXzIzMDksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3Byb3RldXNfMjMwOSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcHJvdGV1c18yMzA5X3RhYmxlKTsKKworLyogTWF0dCBKZXNzb24gPGR2YkBqZXNzb24uZWNsaXBzZS5jby51ayAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidFtdID0geworCXsgMHgyOCwgS0VZXzAgfSwJCS8qICcwJyAvICdlbnRlcicgKi8KKwl7IDB4MjIsIEtFWV8xIH0sCQkvKiAnMScgKi8KKwl7IDB4MTIsIEtFWV8yIH0sCQkvKiAnMicgLyAndXAgYXJyb3cnICovCisJeyAweDMyLCBLRVlfMyB9LAkJLyogJzMnICovCisJeyAweDI0LCBLRVlfNCB9LAkJLyogJzQnIC8gJ2xlZnQgYXJyb3cnICovCisJeyAweDE0LCBLRVlfNSB9LAkJLyogJzUnICovCisJeyAweDM0LCBLRVlfNiB9LAkJLyogJzYnIC8gJ3JpZ2h0IGFycm93JyAqLworCXsgMHgyNiwgS0VZXzcgfSwJCS8qICc3JyAqLworCXsgMHgxNiwgS0VZXzggfSwJCS8qICc4JyAvICdkb3duIGFycm93JyAqLworCXsgMHgzNiwgS0VZXzkgfSwJCS8qICc5JyAqLworCisJeyAweDIwLCBLRVlfTElTVCB9LAkJLyogJ3NvdXJjZScgKi8KKwl7IDB4MTAsIEtFWV9URVhUIH0sCQkvKiAndGVsZXRleHQnICovCisJeyAweDAwLCBLRVlfUE9XRVIgfSwJCS8qICdwb3dlcicgKi8KKwl7IDB4MDQsIEtFWV9BVURJTyB9LAkJLyogJ2F1ZGlvJyAqLworCXsgMHgwNiwgS0VZX1pPT00gfSwJCS8qICdmdWxsIHNjcmVlbicgKi8KKwl7IDB4MTgsIEtFWV9WSURFTyB9LAkJLyogJ2Rpc3BsYXknICovCisJeyAweDM4LCBLRVlfU0VBUkNIIH0sCQkvKiAnbG9vcCcgKi8KKwl7IDB4MDgsIEtFWV9JTkZPIH0sCQkvKiAncHJldmlldycgKi8KKwl7IDB4MmEsIEtFWV9SRVdJTkQgfSwJCS8qICdiYWNrd2FyZCA8PCcgKi8KKwl7IDB4MWEsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiAnZm9yd2FyZCA+PicgKi8KKwl7IDB4M2EsIEtFWV9SRUNPUkQgfSwJCS8qICdjYXB0dXJlJyAqLworCXsgMHgwYSwgS0VZX01VVEUgfSwJCS8qICdtdXRlJyAqLworCXsgMHgyYywgS0VZX1JFQ09SRCB9LAkJLyogJ3JlY29yZCcgKi8KKwl7IDB4MWMsIEtFWV9QQVVTRSB9LAkJLyogJ3BhdXNlJyAqLworCXsgMHgzYywgS0VZX1NUT1AgfSwJCS8qICdzdG9wJyAqLworCXsgMHgwYywgS0VZX1BMQVkgfSwJCS8qICdwbGF5JyAqLworCXsgMHgyZSwgS0VZX1JFRCB9LAkJLyogJ3JlZCcgKi8KKwl7IDB4MDEsIEtFWV9CTFVFIH0sCQkvKiAnYmx1ZScgLyAnY2FuY2VsJyAqLworCXsgMHgwZSwgS0VZX1lFTExPVyB9LAkJLyogJ3llbGxvdycgLyAnb2snICovCisJeyAweDIxLCBLRVlfR1JFRU4gfSwJCS8qICdncmVlbicgKi8KKwl7IDB4MTEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiAnY2hhbm5lbCAtJyAqLworCXsgMHgzMSwgS0VZX0NIQU5ORUxVUCB9LAkvKiAnY2hhbm5lbCArJyAqLworCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwJLyogJ3ZvbHVtZSAtJyAqLworCXsgMHgzZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiAndm9sdW1lICsnICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXZlcm1lZGlhX2R2YnQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0X3RhYmxlKTsKKworLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YVtdID0geworCXsgMHgwMCwgS0VZX1BPV0VSMiB9LAorCXsgMHgyZSwgS0VZX0RPVCB9LAkJLyogJy4nICovCisJeyAweDAxLCBLRVlfTU9ERSB9LAkJLyogVFYvRk0gKi8KKworCXsgMHgwNSwgS0VZXzEgfSwKKwl7IDB4MDYsIEtFWV8yIH0sCisJeyAweDA3LCBLRVlfMyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MGEsIEtFWV81IH0sCisJeyAweDBiLCBLRVlfNiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MGUsIEtFWV84IH0sCisJeyAweDBmLCBLRVlfOSB9LAorCXsgMHgxMSwgS0VZXzAgfSwKKworCXsgMHgxMywgS0VZX1JJR0hUIH0sCQkvKiAtPiAqLworCXsgMHgxMiwgS0VZX0xFRlQgfSwJCS8qIDwtICovCisKKwl7IDB4MTcsIEtFWV9TTEVFUCB9LAkJLyogQ2FwdHVyYXIgSW1hZ2VtICovCisJeyAweDEwLCBLRVlfU0hVRkZMRSB9LAkJLyogQW1vc3RyYSAqLworCisJLyogRklYTUU6IFRoZSBrZXlzIGJlbGxvdyBhcmVuJ3Qgb2sgKi8KKworCXsgMHg0MywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg0MiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFmLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDBjLCBLRVlfRU5URVIgfSwKKworCXsgMHgxNCwgS0VZX01VVEUgfSwKKwl7IDB4MDgsIEtFWV9BVURJTyB9LAorCisJeyAweDAzLCBLRVlfVEVYVCB9LAorCXsgMHgwNCwgS0VZX0VQRyB9LAorCXsgMHgyYiwgS0VZX1RWMiB9LAkJLyogVFYyICovCisKKwl7IDB4MWQsIEtFWV9SRUQgfSwKKwl7IDB4MWMsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NDEsIEtFWV9HUkVFTiB9LAorCXsgMHg0MCwgS0VZX0JMVUUgfSwKKworCXsgMHgxYSwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgxOSwgS0VZX1JFQ09SRCB9LAorCXsgMHgxOCwgS0VZX1BMQVkgfSwKKwl7IDB4MWIsIEtFWV9TVE9QIH0sCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YV90YWJsZSk7CisKKy8qIE9sZHJpY2ggSmVkbGlja2EgPG9sZGl1bS5wcm9Ac2V6bmFtLmN6PiAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c1tdID0geworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCisJeyAweDAxLCBLRVlfVFVORVIgfSwJCS8qIFRWL0ZNICovCisJeyAweDAzLCBLRVlfVEVYVCB9LAkJLyogVGVsZXRleHQgKi8KKwl7IDB4MDQsIEtFWV9FUEcgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDgsIEtFWV9BVURJTyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MGEsIEtFWV81IH0sCisJeyAweDBiLCBLRVlfNiB9LAorCXsgMHgwYywgS0VZX1pPT00gfSwJCS8qIEZ1bGwgc2NyZWVuICovCisJeyAweDBkLCBLRVlfNyB9LAorCXsgMHgwZSwgS0VZXzggfSwKKwl7IDB4MGYsIEtFWV85IH0sCisJeyAweDEwLCBLRVlfUEFHRVVQIH0sCQkvKiAxNi1DSCBQUkVWICovCisJeyAweDExLCBLRVlfMCB9LAorCXsgMHgxMiwgS0VZX0lORk8gfSwKKwl7IDB4MTMsIEtFWV9BR0FJTiB9LAkJLyogQ0ggUlROIC0gY2hhbm5lbCByZXR1cm4gKi8KKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDE1LCBLRVlfRURJVCB9LAkJLyogQXV0b3NjYW4gKi8KKwl7IDB4MTcsIEtFWV9TQVZFIH0sCQkvKiBTY3JlZW5zaG90ICovCisJeyAweDE4LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDE5LCBLRVlfUkVDT1JEIH0sCisJeyAweDFhLCBLRVlfUExBWSB9LAorCXsgMHgxYiwgS0VZX1NUT1AgfSwKKwl7IDB4MWMsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZCwgS0VZX1JFV0lORCB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWYsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgyMiwgS0VZX1NMRUVQIH0sCQkvKiBTbGVlcCAqLworCXsgMHgyMywgS0VZX1pPT00gfSwJCS8qIEFzcGVjdCAqLworCXsgMHgyNiwgS0VZX1NDUkVFTiB9LAkJLyogUG9zICovCisJeyAweDI3LCBLRVlfQU5HTEUgfSwJCS8qIFNpemUgKi8KKwl7IDB4MjgsIEtFWV9TRUxFQ1QgfSwJCS8qIFNlbGVjdCAqLworCXsgMHgyOSwgS0VZX0JMVUUgfSwJCS8qIEJsdWUvUGljdHVyZSAqLworCXsgMHgyYSwgS0VZX0JBQ0tTUEFDRSB9LAkvKiBCYWNrICovCisJeyAweDJiLCBLRVlfTUVESUEgfSwJCS8qIFBJUCAoUGljdHVyZS1pbi1waWN0dXJlKSAqLworCXsgMHgyYywgS0VZX0RPV04gfSwKKwl7IDB4MmUsIEtFWV9ET1QgfSwKKwl7IDB4MmYsIEtFWV9UViB9LAkJLyogTGl2ZSBUViAqLworCXsgMHgzMiwgS0VZX0xFRlQgfSwKKwl7IDB4MzMsIEtFWV9DTEVBUiB9LAkJLyogQ2xlYXIgKi8KKwl7IDB4MzUsIEtFWV9SRUQgfSwJCS8qIFJlZC9UViAqLworCXsgMHgzNiwgS0VZX1VQIH0sCisJeyAweDM3LCBLRVlfSE9NRSB9LAkJLyogSG9tZSAqLworCXsgMHgzOSwgS0VZX0dSRUVOIH0sCQkvKiBHcmVlbi9WaWRlbyAqLworCXsgMHgzZCwgS0VZX1lFTExPVyB9LAkJLyogWWVsbG93L011c2ljICovCisJeyAweDNlLCBLRVlfT0sgfSwJCS8qIE9rICovCisJeyAweDNmLCBLRVlfUklHSFQgfSwKKwl7IDB4NDAsIEtFWV9ORVhUIH0sCQkvKiBOZXh0ICovCisJeyAweDQxLCBLRVlfUFJFVklPVVMgfSwJCS8qIFByZXZpb3VzICovCisJeyAweDQyLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ2hhbm5lbCBkb3duICovCisJeyAweDQzLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoYW5uZWwgdXAgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1cyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXNfdGFibGUpOworCisvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbXSA9IHsKKworCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MTcsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCisJeyAweDBhLCBLRVlfTElTVCB9LAkJLyogcmVjYWxsICovCisKKworCXsgMHgxYywgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSAqLworCXsgMHgxNSwgS0VZX1NFQVJDSCB9LAkJLyogc2NhbiAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCQkvKiBwb3dlciAqLworCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIHVwICovCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwJCS8qIHZvbCBkb3duICovCisJeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2huIHVwICovCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNobiBkb3duICovCisKKwl7IDB4MTEsIEtFWV9WSURFTyB9LAkJLyogdmlkZW8gKi8KKwl7IDB4MGYsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgxMywgS0VZX01VVEUgfSwJCS8qIG11dGUvdW5tdXRlICovCisJeyAweDEwLCBLRVlfVEVYVCB9LAkJLyogbWluICovCisKKwl7IDB4MGQsIEtFWV9TVE9QIH0sCQkvKiBmcmVlemUgKi8KKwl7IDB4MGUsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZCAqLworCXsgMHgxZCwgS0VZX1BMQVlQQVVTRSB9LAkvKiBzdG9wICovCisJeyAweDE5LCBLRVlfUExBWSB9LAkJLyogcGxheSAqLworCisJeyAweDE2LCBLRVlfR09UTyB9LAkJLyogb3NkICovCisJeyAweDE0LCBLRVlfUkVGUkVTSCB9LAkJLyogZGVmYXVsdCAqLworCXsgMHgwYywgS0VZX0tQUExVUyB9LAkJLyogZmluZSB0dW5lID4+Pj4gKi8KKwl7IDB4MTgsIEtFWV9LUE1JTlVTIH0sCQkvKiBmaW5lIHR1bmUgPDw8PCAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hcGFjX3ZpZXdjb21wKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hcGFjX3ZpZXdjb21wX3RhYmxlKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3BpeGVsdmlld1tdID0geworCisJeyAweDFlLCBLRVlfUE9XRVIgfSwJLyogcG93ZXIgKi8KKwl7IDB4MDcsIEtFWV9NRURJQSB9LAkvKiBzb3VyY2UgKi8KKwl7IDB4MWMsIEtFWV9TRUFSQ0ggfSwJLyogc2NhbiAqLworCisKKwl7IDB4MDMsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KKworCXsgMHgwMCwgS0VZX1JFQ09SRCB9LAorCXsgMHgwOCwgS0VZX1NUT1AgfSwKKwl7IDB4MTEsIEtFWV9QTEFZIH0sCisKKwl7IDB4MWEsIEtFWV9QTEFZUEFVU0UgfSwJLyogZnJlZXplICovCisJeyAweDE5LCBLRVlfWk9PTSB9LAkJLyogem9vbSAqLworCXsgMHgwZiwgS0VZX1RFWFQgfSwJCS8qIG1pbiAqLworCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwYiwgS0VZXzIgfSwKKwl7IDB4MWIsIEtFWV8zIH0sCisJeyAweDA1LCBLRVlfNCB9LAorCXsgMHgwOSwgS0VZXzUgfSwKKwl7IDB4MTUsIEtFWV82IH0sCisJeyAweDA2LCBLRVlfNyB9LAorCXsgMHgwYSwgS0VZXzggfSwKKwl7IDB4MTIsIEtFWV85IH0sCisJeyAweDAyLCBLRVlfMCB9LAorCXsgMHgxMCwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KKwl7IDB4MTMsIEtFWV9MSVNUIH0sCQkvKiByZWNhbGwgKi8KKworCXsgMHgxZiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaG4gZG93biAqLworCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNobiB1cCAqLworCXsgMHgxNiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2wgZG93biAqLworCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIHVwICovCisKKwl7IDB4MDQsIEtFWV9LUE1JTlVTIH0sCQkvKiA8PDwgKi8KKwl7IDB4MGUsIEtFWV9TRVRVUCB9LAkJLyogZnVuY3Rpb24gKi8KKwl7IDB4MGMsIEtFWV9LUFBMVVMgfSwJCS8qID4+PiAqLworCisJeyAweDBkLCBLRVlfR09UTyB9LAkJLyogbXRzICovCisJeyAweDFkLCBLRVlfUkVGUkVTSCB9LAkJLyogcmVzZXQgKi8KKwl7IDB4MTgsIEtFWV9NVVRFIH0sCQkvKiBtdXRlL3VubXV0ZSAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3BpeGVsdmlld190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3BpeGVsdmlldywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGl4ZWx2aWV3KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19waXhlbHZpZXdfdGFibGUpOworCisvKgorICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgICBwcmVzZW50IG9uIFBWIE1QRUcgODAwMEdUCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld1tdID0geworCXsgMHgzYywgS0VZX1RJTUUgfSwJCS8qIFRpbWVzaGlmdCAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisKKwl7IDB4M2QsIEtFWV8xIH0sCisJeyAweDM4LCBLRVlfMiB9LAorCXsgMHgxOCwgS0VZXzMgfSwKKwl7IDB4MzUsIEtFWV80IH0sCisJeyAweDM5LCBLRVlfNSB9LAorCXsgMHgxNSwgS0VZXzYgfSwKKwl7IDB4MzYsIEtFWV83IH0sCisJeyAweDNhLCBLRVlfOCB9LAorCXsgMHgxZSwgS0VZXzkgfSwKKwl7IDB4M2UsIEtFWV8wIH0sCisKKwl7IDB4MWMsIEtFWV9BR0FJTiB9LAkJLyogTE9PUAkqLworCXsgMHgzZiwgS0VZX01FRElBIH0sCQkvKiBTb3VyY2UgKi8KKwl7IDB4MWYsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCisJeyAweDFiLCBLRVlfTVVURSB9LAorCisJeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTMsIEtFWV9aT09NIH0sCisKKwl7IDB4MTksIEtFWV9DQU1FUkEgfSwJCS8qIFNOQVBTSE9UICovCisJeyAweDFhLCBLRVlfU0VBUkNIIH0sCQkvKiBzY2FuICovCisKKwl7IDB4MzcsIEtFWV9SRVdJTkQgfSwJCS8qIDw8ICovCisJeyAweDMyLCBLRVlfUkVDT1JEIH0sCQkvKiBvIChyZWQpICovCisJeyAweDMzLCBLRVlfRk9SV0FSRCB9LAkJLyogPj4gKi8KKwl7IDB4MTEsIEtFWV9TVE9QIH0sCQkvKiBzcXVhcmUgKi8KKwl7IDB4M2IsIEtFWV9QTEFZIH0sCQkvKiA+ICovCisJeyAweDMwLCBLRVlfUExBWVBBVVNFIH0sCS8qIHx8ICovCisKKwl7IDB4MzEsIEtFWV9UViB9LAorCXsgMHgzNCwgS0VZX1JBRElPIH0sCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3BpeGVsdmlld19uZXcsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3BpeGVsdmlld19uZXcpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlld19uZXdfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX25lYnVsYVtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9UViB9LAorCXsgMHgwYiwgS0VZX0FVWCB9LAorCXsgMHgwYywgS0VZX0RWRCB9LAorCXsgMHgwZCwgS0VZX1BPV0VSIH0sCisJeyAweDBlLCBLRVlfTUhQIH0sCS8qIGxhYmVsbGVkICdQaWN0dXJlJyAqLworCXsgMHgwZiwgS0VZX0FVRElPIH0sCisJeyAweDEwLCBLRVlfSU5GTyB9LAorCXsgMHgxMSwgS0VZX0YxMyB9LAkvKiAxNjo5ICovCisJeyAweDEyLCBLRVlfRjE0IH0sCS8qIDE0OjkgKi8KKwl7IDB4MTMsIEtFWV9FUEcgfSwKKwl7IDB4MTQsIEtFWV9FWElUIH0sCisJeyAweDE1LCBLRVlfTUVOVSB9LAorCXsgMHgxNiwgS0VZX1VQIH0sCisJeyAweDE3LCBLRVlfRE9XTiB9LAorCXsgMHgxOCwgS0VZX0xFRlQgfSwKKwl7IDB4MTksIEtFWV9SSUdIVCB9LAorCXsgMHgxYSwgS0VZX0VOVEVSIH0sCisJeyAweDFiLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWYsIEtFWV9SRUQgfSwKKwl7IDB4MjAsIEtFWV9HUkVFTiB9LAorCXsgMHgyMSwgS0VZX1lFTExPVyB9LAorCXsgMHgyMiwgS0VZX0JMVUUgfSwKKwl7IDB4MjMsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHgyNCwgS0VZX0YxNSB9LAkvKiBBRCAqLworCXsgMHgyNSwgS0VZX1RFWFQgfSwKKwl7IDB4MjYsIEtFWV9NVVRFIH0sCisJeyAweDI3LCBLRVlfUkVXSU5EIH0sCisJeyAweDI4LCBLRVlfU1RPUCB9LAorCXsgMHgyOSwgS0VZX1BMQVkgfSwKKwl7IDB4MmEsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyYiwgS0VZX0YxNiB9LAkvKiBjaGFwdGVyICovCisJeyAweDJjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MmQsIEtFWV9QTEFZIH0sCisJeyAweDJlLCBLRVlfUkVDT1JEIH0sCisJeyAweDJmLCBLRVlfRjE3IH0sCS8qIHBpY3R1cmUgaW4gcGljdHVyZSAqLworCXsgMHgzMCwgS0VZX0tQUExVUyB9LAkvKiB6b29tIGluICovCisJeyAweDMxLCBLRVlfS1BNSU5VUyB9LAkvKiB6b29tIG91dCAqLworCXsgMHgzMiwgS0VZX0YxOCB9LAkvKiBjYXB0dXJlICovCisJeyAweDMzLCBLRVlfRjE5IH0sCS8qIHdlYiAqLworCXsgMHgzNCwgS0VZX0VNQUlMIH0sCisJeyAweDM1LCBLRVlfUEhPTkUgfSwKKwl7IDB4MzYsIEtFWV9QQyB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25lYnVsYV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX25lYnVsYSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbmVidWxhKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19uZWJ1bGFfdGFibGUpOworCisvKiBEaWdpdGFsTm93IEROVFYgTGl2ZSBEVkItVCBSZW1vdGUgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZG50dl9saXZlX2R2Yl90W10gPSB7CisJeyAweDAwLCBLRVlfRVNDIH0sCQkvKiAnZ28gdXAgYSBsZXZlbD8nICovCisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MGEsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4MGIsIEtFWV9UVU5FUiB9LAkJLyogdHYvZm0gKi8KKwl7IDB4MGMsIEtFWV9TRUFSQ0ggfSwJCS8qIHNjYW4gKi8KKwl7IDB4MGQsIEtFWV9TVE9QIH0sCisJeyAweDBlLCBLRVlfUEFVU0UgfSwKKwl7IDB4MGYsIEtFWV9MSVNUIH0sCQkvKiBzb3VyY2UgKi8KKworCXsgMHgxMCwgS0VZX01VVEUgfSwKKwl7IDB4MTEsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCisJeyAweDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MTMsIEtFWV9DQU1FUkEgfSwJCS8qIHNuYXAgKi8KKwl7IDB4MTQsIEtFWV9BVURJTyB9LAkJLyogc3RlcmVvICovCisJeyAweDE1LCBLRVlfQ0xFQVIgfSwJCS8qIHJlc2V0ICovCisJeyAweDE2LCBLRVlfUExBWSB9LAorCXsgMHgxNywgS0VZX0VOVEVSIH0sCisJeyAweDE4LCBLRVlfWk9PTSB9LAkJLyogZnVsbCBzY3JlZW4gKi8KKwl7IDB4MTksIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWMsIEtFWV9JTkZPIH0sCQkvKiBwcmV2aWV3ICovCisJeyAweDFkLCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmQgKi8KKwl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3QsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZG50dl9saXZlX2R2Yl90X3RhYmxlKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJTy1EQVRBIEJDVFY3RSBSZW1vdGUgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfaW9kYXRhX2JjdHY3ZVtdID0geworCXsgMHg0MCwgS0VZX1RWIH0sCisJeyAweDIwLCBLRVlfUkFESU8gfSwJCS8qIEZNICovCisJeyAweDYwLCBLRVlfRVBHIH0sCisJeyAweDAwLCBLRVlfUE9XRVIgfSwKKworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDQ0LCBLRVlfMCB9LAkJLyogMTAgKi8KKwl7IDB4NTAsIEtFWV8xIH0sCisJeyAweDMwLCBLRVlfMiB9LAorCXsgMHg3MCwgS0VZXzMgfSwKKwl7IDB4NDgsIEtFWV80IH0sCisJeyAweDI4LCBLRVlfNSB9LAorCXsgMHg2OCwgS0VZXzYgfSwKKwl7IDB4NTgsIEtFWV83IH0sCisJeyAweDM4LCBLRVlfOCB9LAorCXsgMHg3OCwgS0VZXzkgfSwKKworCXsgMHgxMCwgS0VZX0wgfSwJCS8qIExpdmUgKi8KKwl7IDB4MDgsIEtFWV9USU1FIH0sCQkvKiBUaW1lIFNoaWZ0ICovCisKKwl7IDB4MTgsIEtFWV9QTEFZUEFVU0UgfSwJLyogUGxheSAqLworCisJeyAweDI0LCBLRVlfRU5URVIgfSwJCS8qIDExICovCisJeyAweDY0LCBLRVlfRVNDIH0sCQkvKiAxMiAqLworCXsgMHgwNCwgS0VZX00gfSwJCS8qIE11bHRpICovCisKKwl7IDB4NTQsIEtFWV9WSURFTyB9LAorCXsgMHgzNCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg3NCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDE0LCBLRVlfTVVURSB9LAorCisJeyAweDRjLCBLRVlfVkNSIH0sCQkvKiBTVklERU8gKi8KKwl7IDB4MmMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHg2YywgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MGMsIEtFWV9aT09NIH0sCisKKwl7IDB4NWMsIEtFWV9QQVVTRSB9LAorCXsgMHgzYywgS0VZX1JFRCB9LAkJLyogfHwgKHJlZCkgKi8KKwl7IDB4N2MsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLworCXsgMHgxYywgS0VZX1NUT1AgfSwKKworCXsgMHg0MSwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KKwl7IDB4MjEsIEtFWV9QTEFZIH0sCisJeyAweDYxLCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLworCXsgMHgwMSwgS0VZX05FWFQgfSwJCS8qIHNraXAgPnwgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19pb2RhdGFfYmN0djdlX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfaW9kYXRhX2JjdHY3ZSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfaW9kYXRhX2JjdHY3ZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfaW9kYXRhX2JjdHY3ZV90YWJsZSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQURTIFRlY2ggSW5zdGFudCBUViBEVkItVCBQQ0kgUmVtb3RlICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpW10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4NGQsIEtFWV8wIH0sCisJeyAweDU3LCBLRVlfMSB9LAorCXsgMHg0ZiwgS0VZXzIgfSwKKwl7IDB4NTMsIEtFWV8zIH0sCisJeyAweDU2LCBLRVlfNCB9LAorCXsgMHg0ZSwgS0VZXzUgfSwKKwl7IDB4NWUsIEtFWV82IH0sCisJeyAweDU0LCBLRVlfNyB9LAorCXsgMHg0YywgS0VZXzggfSwKKwl7IDB4NWMsIEtFWV85IH0sCisKKwl7IDB4NWIsIEtFWV9QT1dFUiB9LAorCXsgMHg1ZiwgS0VZX01VVEUgfSwKKwl7IDB4NTUsIEtFWV9HT1RPIH0sCisJeyAweDVkLCBLRVlfU0VBUkNIIH0sCisJeyAweDE3LCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLworCXsgMHgxZiwgS0VZX01FTlUgfSwKKwl7IDB4MGYsIEtFWV9VUCB9LAorCXsgMHg0NiwgS0VZX0RPV04gfSwKKwl7IDB4MTYsIEtFWV9MRUZUIH0sCisJeyAweDFlLCBLRVlfUklHSFQgfSwKKwl7IDB4MGUsIEtFWV9TRUxFQ1QgfSwJCS8qIEVudGVyICovCisJeyAweDVhLCBLRVlfSU5GTyB9LAorCXsgMHg1MiwgS0VZX0VYSVQgfSwKKwl7IDB4NTksIEtFWV9QUkVWSU9VUyB9LAorCXsgMHg1MSwgS0VZX05FWFQgfSwKKwl7IDB4NTgsIEtFWV9SRVdJTkQgfSwKKwl7IDB4NTAsIEtFWV9GT1JXQVJEIH0sCisJeyAweDQ0LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDA3LCBLRVlfU1RPUCB9LAorCXsgMHgxYiwgS0VZX1JFQ09SRCB9LAorCXsgMHgxMywgS0VZX1RVTkVSIH0sCQkvKiBMaXZlICovCisJeyAweDBhLCBLRVlfQSB9LAorCXsgMHgxMiwgS0VZX0IgfSwKKwl7IDB4MDMsIEtFWV9QUk9HMSB9LAkJLyogMSAqLworCXsgMHgwMSwgS0VZX1BST0cyIH0sCQkvKiAyICovCisJeyAweDAwLCBLRVlfUFJPRzMgfSwJCS8qIDMgKi8KKwl7IDB4MDYsIEtFWV9EVkQgfSwKKwl7IDB4NDgsIEtFWV9BVVggfSwJCS8qIFBob3RvICovCisJeyAweDQwLCBLRVlfVklERU8gfSwKKwl7IDB4MTksIEtFWV9BVURJTyB9LAkJLyogTXVzaWMgKi8KKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDgsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxNSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFjLCBLRVlfVk9MVU1FRE9XTiB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2ksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaV90YWJsZSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTVNJIFRWQG55d2hlcmUgTUFTVEVSIHJlbW90ZSAqLworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX21zaV90dmFueXdoZXJlW10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4MGMsIEtFWV9NVVRFIH0sCisJeyAweDBmLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsIFNjcmVlbiAqLworCXsgMHgxMCwgS0VZX0ZOIH0sCQkvKiBGdW50aW9uICovCisJeyAweDExLCBLRVlfVElNRSB9LAkJLyogVGltZSBzaGlmdCAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDEzLCBLRVlfTUVESUEgfSwJCS8qIE1UUyAqLworCXsgMHgxNCwgS0VZX1NMT1cgfSwKKwl7IDB4MTYsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCisJeyAweDE3LCBLRVlfRU5URVIgfSwJCS8qIFJldHVybiAqLworCXsgMHgxOCwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfbXNpX3R2YW55d2hlcmUsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX21zaV90dmFueXdoZXJlKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV90YWJsZSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgS2V5Y29kZXMgZm9yIHJlbW90ZSBvbiB0aGUgTVNJIFRWQG55d2hlcmUgUGx1cy4gVGhlIGNvbnRyb2xsZXIgSUMgb24gdGhlIGNhcmQKKyAgaXMgbWFya2VkICJLUzAwMyIuIFRoZSBjb250cm9sbGVyIGlzIEkyQyBhdCBhZGRyZXNzIDB4MzAsIGJ1dCBkb2VzIG5vdCBzZWVtCisgIHRvIHJlc3BvbmQgdG8gcHJvYmVzIHVudGlsIGEgcmVhZCBpcyBwZXJmb3JtZWQgZnJvbSBhIHZhbGlkIGRldmljZS4KKyAgSSBkb24ndCBrbm93IHdoeS4uLgorCisgIE5vdGU6IFRoaXMgcmVtb3RlIG1heSBiZSBvZiBzaW1pbGFyIG9yIGlkZW50aWNhbCBkZXNpZ24gdG8gdGhlCisgIFBpeGVsdmlldyByZW1vdGUgKD8pLiAgVGhlIHJhdyBjb2RlcyBhbmQgZHVwbGljYXRlIGJ1dHRvbiBjb2RlcworICBhcHBlYXIgdG8gYmUgdGhlIHNhbWUuCisKKyAgSGVucnkgV29uZyA8aGVucnlAc3R1ZmZlZGNvdy5uZXQ+CisgIFNvbWUgY2hhbmdlcyB0byBmb3JtYXR0aW5nIGFuZCBrZXljb2RlcyBieSBNYXJrIFNjaHVsdHogPG45eG1qQHlhaG9vLmNvbT4KKworKi8KKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzW10gPSB7CisKKy8qICAtLS0tIFJlbW90ZSBCdXR0b24gTGF5b3V0IC0tLS0KKworICAgIFBPV0VSICAgU09VUkNFICBTQ0FOICAgIE1VVEUKKyAgICBUVi9GTSAgIDEgICAgICAgMiAgICAgICAzCisgICAgfD4gICAgICA0ICAgICAgIDUgICAgICAgNgorICAgIDx8ICAgICAgNyAgICAgICA4ICAgICAgIDkKKyAgICBeXlVQICAgIDAgICAgICAgKyAgICAgICBSRUNBTEwKKyAgICB2dkROICAgIFJFQ09SRCAgU1RPUCAgICBQTEFZCisKKwlNSU5JTUlaRSAgICAgICAgICBaT09NCisKKwkJICBDSCsKKyAgICAgIFZPTC0gICAgICAgICAgICAgICAgICAgVk9MKworCQkgIENILQorCisJU05BUFNIT1QgICAgICAgICAgIE1UUworCisgICAgIDw8ICAgICAgRlVOQyAgICA+PiAgICAgUkVTRVQKKyovCisKKwl7IDB4MDEsIEtFWV8xIH0sCQkvKiAxICovCisJeyAweDBiLCBLRVlfMiB9LAkJLyogMiAqLworCXsgMHgxYiwgS0VZXzMgfSwJCS8qIDMgKi8KKwl7IDB4MDUsIEtFWV80IH0sCQkvKiA0ICovCisJeyAweDA5LCBLRVlfNSB9LAkJLyogNSAqLworCXsgMHgxNSwgS0VZXzYgfSwJCS8qIDYgKi8KKwl7IDB4MDYsIEtFWV83IH0sCQkvKiA3ICovCisJeyAweDBhLCBLRVlfOCB9LAkJLyogOCAqLworCXsgMHgxMiwgS0VZXzkgfSwJCS8qIDkgKi8KKwl7IDB4MDIsIEtFWV8wIH0sCQkvKiAwICovCisJeyAweDEwLCBLRVlfS1BQTFVTIH0sCQkvKiArICovCisJeyAweDEzLCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLworCisJeyAweDFlLCBLRVlfUE9XRVIgfSwJCS8qIFBvd2VyICovCisJeyAweDA3LCBLRVlfVFVORVIgfSwJCS8qIFNvdXJjZSAqLworCXsgMHgxYywgS0VZX1NFQVJDSCB9LAkJLyogU2NhbiAqLworCXsgMHgxOCwgS0VZX01VVEUgfSwJCS8qIE11dGUgKi8KKworCXsgMHgwMywgS0VZX1JBRElPIH0sCQkvKiBUVi9GTSAqLworCS8qIFRoZSBuZXh0IGZvdXIga2V5cyBhcmUgZHVwbGljYXRlcyB0aGF0IGFwcGVhciB0byBzZW5kIHRoZQorCSAgIHNhbWUgSVIgY29kZSBhcyBDaCssIENoLSwgPj4sIGFuZCA8PCAuICBUaGUgcmF3IGNvZGUgYXNzaWduZWQKKwkgICB0byB0aGVtIGlzIHRoZSBhY3R1YWwgY29kZSArIDB4MjAgLSB0aGV5IHdpbGwgbmV2ZXIgYmUKKwkgICBkZXRlY3RlZCBhcyBzdWNoIHVubGVzcyBzb21lIHdheSBpcyBkaXNjb3ZlcmVkIHRvIGRpc3Rpbmd1aXNoCisJICAgdGhlc2UgYnV0dG9ucyBmcm9tIHRob3NlIHRoYXQgaGF2ZSB0aGUgc2FtZSBjb2RlLiAqLworCXsgMHgzZiwgS0VZX1JJR0hUIH0sCQkvKiB8PiBhbmQgQ2grICovCisJeyAweDM3LCBLRVlfTEVGVCB9LAkJLyogPHwgYW5kIENoLSAqLworCXsgMHgyYywgS0VZX1VQIH0sCQkvKiBeXlVwIGFuZCA+PiAqLworCXsgMHgyNCwgS0VZX0RPV04gfSwJCS8qIHZ2RG4gYW5kIDw8ICovCisKKwl7IDB4MDAsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZCAqLworCXsgMHgwOCwgS0VZX1NUT1AgfSwJCS8qIFN0b3AgKi8KKwl7IDB4MTEsIEtFWV9QTEFZIH0sCQkvKiBQbGF5ICovCisKKwl7IDB4MGYsIEtFWV9DTE9TRSB9LAkJLyogTWluaW1pemUgKi8KKwl7IDB4MTksIEtFWV9aT09NIH0sCQkvKiBab29tICovCisJeyAweDFhLCBLRVlfQ0FNRVJBIH0sCQkvKiBTbmFwc2hvdCAqLworCXsgMHgwZCwgS0VZX0xBTkdVQUdFIH0sCQkvKiBNVFMgKi8KKworCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwJLyogVm9sLSAqLworCXsgMHgxNiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWb2wrICovCisJeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ2gtICovCisJeyAweDFmLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoKyAqLworCisJeyAweDA0LCBLRVlfUkVXSU5EIH0sCQkvKiA8PCAqLworCXsgMHgwZSwgS0VZX01FTlUgfSwJCS8qIEZ1bmN0aW9uICovCisJeyAweDBjLCBLRVlfRkFTVEZPUldBUkQgfSwJLyogPj4gKi8KKwl7IDB4MWQsIEtFWV9SRVNUQVJUIH0sCQkvKiBSZXNldCAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzX3RhYmxlKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDaW5lcmd5IDE0MDAgRFZCLVQgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfY2luZXJneV8xNDAwW10gPSB7CisJeyAweDAxLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDIsIEtFWV8xIH0sCisJeyAweDAzLCBLRVlfMiB9LAorCXsgMHgwNCwgS0VZXzMgfSwKKwl7IDB4MDUsIEtFWV80IH0sCisJeyAweDA2LCBLRVlfNSB9LAorCXsgMHgwNywgS0VZXzYgfSwKKwl7IDB4MDgsIEtFWV83IH0sCisJeyAweDA5LCBLRVlfOCB9LAorCXsgMHgwYSwgS0VZXzkgfSwKKwl7IDB4MGMsIEtFWV8wIH0sCisKKwl7IDB4MGIsIEtFWV9WSURFTyB9LAorCXsgMHgwZCwgS0VZX1JFRlJFU0ggfSwKKwl7IDB4MGUsIEtFWV9TRUxFQ1QgfSwKKwl7IDB4MGYsIEtFWV9FUEcgfSwKKwl7IDB4MTAsIEtFWV9VUCB9LAorCXsgMHgxMSwgS0VZX0xFRlQgfSwKKwl7IDB4MTIsIEtFWV9PSyB9LAorCXsgMHgxMywgS0VZX1JJR0hUIH0sCisJeyAweDE0LCBLRVlfRE9XTiB9LAorCXsgMHgxNSwgS0VZX1RFWFQgfSwKKwl7IDB4MTYsIEtFWV9JTkZPIH0sCisKKwl7IDB4MTcsIEtFWV9SRUQgfSwKKwl7IDB4MTgsIEtFWV9HUkVFTiB9LAorCXsgMHgxOSwgS0VZX1lFTExPVyB9LAorCXsgMHgxYSwgS0VZX0JMVUUgfSwKKworCXsgMHgxYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxYywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFkLCBLRVlfTVVURSB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWYsIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJeyAweDQwLCBLRVlfUEFVU0UgfSwKKwl7IDB4NGMsIEtFWV9QTEFZIH0sCisJeyAweDU4LCBLRVlfUkVDT1JEIH0sCisJeyAweDU0LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NDgsIEtFWV9TVE9QIH0sCisJeyAweDVjLCBLRVlfTkVYVCB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2NpbmVyZ3lfMTQwMF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2NpbmVyZ3lfMTQwMCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfY2luZXJneV8xNDAwKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19jaW5lcmd5XzE0MDBfdGFibGUpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFWRVJUViBTVFVESU8gMzAzIFJlbW90ZSAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVydHZfMzAzW10gPSB7CisJeyAweDJhLCBLRVlfMSB9LAorCXsgMHgzMiwgS0VZXzIgfSwKKwl7IDB4M2EsIEtFWV8zIH0sCisJeyAweDRhLCBLRVlfNCB9LAorCXsgMHg1MiwgS0VZXzUgfSwKKwl7IDB4NWEsIEtFWV82IH0sCisJeyAweDZhLCBLRVlfNyB9LAorCXsgMHg3MiwgS0VZXzggfSwKKwl7IDB4N2EsIEtFWV85IH0sCisJeyAweDBlLCBLRVlfMCB9LAorCisJeyAweDAyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MjIsIEtFWV9WSURFTyB9LAorCXsgMHg0MiwgS0VZX0FVRElPIH0sCisJeyAweDYyLCBLRVlfWk9PTSB9LAorCXsgMHgwYSwgS0VZX1RWIH0sCisJeyAweDEyLCBLRVlfQ0QgfSwKKwl7IDB4MWEsIEtFWV9URVhUIH0sCisKKwl7IDB4MTYsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHgxZSwgS0VZX1JFV0lORCB9LAorCXsgMHgwNiwgS0VZX1BSSU5UIH0sCisKKwl7IDB4MmUsIEtFWV9TRUFSQ0ggfSwKKwl7IDB4MzYsIEtFWV9TTEVFUCB9LAorCXsgMHgzZSwgS0VZX1NIVUZGTEUgfSwKKwl7IDB4MjYsIEtFWV9NVVRFIH0sCisKKwl7IDB4NGUsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NTYsIEtFWV9QQVVTRSB9LAorCXsgMHg1ZSwgS0VZX1NUT1AgfSwKKwl7IDB4NDYsIEtFWV9QTEFZIH0sCisKKwl7IDB4NmUsIEtFWV9SRUQgfSwKKwl7IDB4MGIsIEtFWV9HUkVFTiB9LAorCXsgMHg2NiwgS0VZX1lFTExPVyB9LAorCXsgMHgwMywgS0VZX0JMVUUgfSwKKworCXsgMHg3NiwgS0VZX0xFRlQgfSwKKwl7IDB4N2UsIEtFWV9SSUdIVCB9LAorCXsgMHgxMywgS0VZX0RPV04gfSwKKwl7IDB4MWIsIEtFWV9VUCB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJ0dl8zMDNfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hdmVydHZfMzAzLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVydHZfMzAzKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVydHZfMzAzX3RhYmxlKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEaWdpdGFsTm93IEROVFYgTGl2ZSEgRFZCLVQgUHJvIFJlbW90ZSAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9bXSA9IHsKKwl7IDB4MTYsIEtFWV9QT1dFUiB9LAorCXsgMHg1YiwgS0VZX0hPTUUgfSwKKworCXsgMHg1NSwgS0VZX1RWIH0sCQkvKiBsaXZlIHR2ICovCisJeyAweDU4LCBLRVlfVFVORVIgfSwJCS8qIGRpZ2l0YWwgUmFkaW8gKi8KKwl7IDB4NWEsIEtFWV9SQURJTyB9LAkJLyogRk0gcmFkaW8gKi8KKwl7IDB4NTksIEtFWV9EVkQgfSwJCS8qIGR2ZCBtZW51ICovCisJeyAweDAzLCBLRVlfMSB9LAorCXsgMHgwMSwgS0VZXzIgfSwKKwl7IDB4MDYsIEtFWV8zIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgxZCwgS0VZXzUgfSwKKwl7IDB4MWYsIEtFWV82IH0sCisJeyAweDBkLCBLRVlfNyB9LAorCXsgMHgxOSwgS0VZXzggfSwKKwl7IDB4MWIsIEtFWV85IH0sCisJeyAweDBjLCBLRVlfQ0FOQ0VMIH0sCisJeyAweDE1LCBLRVlfMCB9LAorCXsgMHg0YSwgS0VZX0NMRUFSIH0sCisJeyAweDEzLCBLRVlfQkFDSyB9LAorCXsgMHgwMCwgS0VZX1RBQiB9LAorCXsgMHg0YiwgS0VZX1VQIH0sCisJeyAweDRlLCBLRVlfTEVGVCB9LAorCXsgMHg0ZiwgS0VZX09LIH0sCisJeyAweDUyLCBLRVlfUklHSFQgfSwKKwl7IDB4NTEsIEtFWV9ET1dOIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTQsIEtFWV9QTEFZIH0sCisJeyAweDRjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogcmVwbGF5IHw8ICovCisJeyAweDQyLCBLRVlfTkVYVFNPTkcgfSwJCS8qIHNraXAgPnwgKi8KKwl7IDB4NTQsIEtFWV9DQU1FUkEgfSwJCS8qIGNhcHR1cmUgKi8KKwl7IDB4NTAsIEtFWV9MQU5HVUFHRSB9LAkJLyogc2FwICovCisJeyAweDQ3LCBLRVlfVFYyIH0sCQkvKiBwaXAgKi8KKwl7IDB4NGQsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4NDMsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHgxMCwgS0VZX01VVEUgfSwKKwl7IDB4NDksIEtFWV9BVURJTyB9LAkJLyogbC9yICovCisJeyAweDA3LCBLRVlfU0xFRVAgfSwKKwl7IDB4MDgsIEtFWV9WSURFTyB9LAkJLyogYS92ICovCisJeyAweDBlLCBLRVlfUFJFVklPVVMgfSwJCS8qIHJlY2FsbCAqLworCXsgMHg0NSwgS0VZX1pPT00gfSwJCS8qIHpvb20gKyAqLworCXsgMHg0NiwgS0VZX0FOR0xFIH0sCQkvKiB6b29tIC0gKi8KKwl7IDB4NTYsIEtFWV9SRUQgfSwKKwl7IDB4NTcsIEtFWV9HUkVFTiB9LAorCXsgMHg1YywgS0VZX1lFTExPVyB9LAorCXsgMHg1ZCwgS0VZX0JMVUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9fdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm8sCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3BybyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZG50dl9saXZlX2R2YnRfcHJvX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbV90ZXJyYXRlY1tdID0geworCXsgMHgwMSwgS0VZX0NIQU5ORUwgfSwKKwl7IDB4MDIsIEtFWV9TRUxFQ1QgfSwKKwl7IDB4MDMsIEtFWV9NVVRFIH0sCisJeyAweDA0LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDgsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MGUsIEtFWV84IH0sCisJeyAweDBmLCBLRVlfOSB9LAorCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDExLCBLRVlfMCB9LAorCXsgMHgxMiwgS0VZX01FTlUgfSwKKwl7IDB4MTMsIEtFWV9QUklOVCB9LAorCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTYsIEtFWV9QQVVTRSB9LAorCXsgMHgxOCwgS0VZX1JFQ09SRCB9LAorCXsgMHgxOSwgS0VZX1JFV0lORCB9LAorCXsgMHgxYSwgS0VZX1BMQVkgfSwKKwl7IDB4MWIsIEtFWV9GT1JXQVJEIH0sCisJeyAweDFjLCBLRVlfQkFDS1NQQUNFIH0sCisJeyAweDFlLCBLRVlfU1RPUCB9LAorCXsgMHg0MCwgS0VZX1pPT00gfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbV90ZXJyYXRlY190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2VtX3RlcnJhdGVjLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbV90ZXJyYXRlYyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1fdGVycmF0ZWNfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Bpbm5hY2xlX2dyZXlbXSA9IHsKKwl7IDB4M2EsIEtFWV8wIH0sCisJeyAweDMxLCBLRVlfMSB9LAorCXsgMHgzMiwgS0VZXzIgfSwKKwl7IDB4MzMsIEtFWV8zIH0sCisJeyAweDM0LCBLRVlfNCB9LAorCXsgMHgzNSwgS0VZXzUgfSwKKwl7IDB4MzYsIEtFWV82IH0sCisJeyAweDM3LCBLRVlfNyB9LAorCXsgMHgzOCwgS0VZXzggfSwKKwl7IDB4MzksIEtFWV85IH0sCisKKwl7IDB4MmYsIEtFWV9QT1dFUiB9LAorCisJeyAweDJlLCBLRVlfUCB9LAorCXsgMHgxZiwgS0VZX0wgfSwKKwl7IDB4MmIsIEtFWV9JIH0sCisKKwl7IDB4MmQsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4MWUsIEtFWV9aT09NIH0sCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE3LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MjUsIEtFWV9JTkZPIH0sCisKKwl7IDB4M2MsIEtFWV9NVVRFIH0sCisKKwl7IDB4M2QsIEtFWV9MRUZUIH0sCisJeyAweDNiLCBLRVlfUklHSFQgfSwKKworCXsgMHgzZiwgS0VZX1VQIH0sCisJeyAweDNlLCBLRVlfRE9XTiB9LAorCXsgMHgxYSwgS0VZX0VOVEVSIH0sCisKKwl7IDB4MWQsIEtFWV9NRU5VIH0sCisJeyAweDE5LCBLRVlfQUdBSU4gfSwKKwl7IDB4MTYsIEtFWV9QUkVWSU9VU1NPTkcgfSwKKwl7IDB4MTMsIEtFWV9ORVhUU09ORyB9LAorCXsgMHgxNSwgS0VZX1BBVVNFIH0sCisJeyAweDBlLCBLRVlfUkVXSU5EIH0sCisJeyAweDBkLCBLRVlfUExBWSB9LAorCXsgMHgwYiwgS0VZX1NUT1AgfSwKKwl7IDB4MDcsIEtFWV9GT1JXQVJEIH0sCisJeyAweDI3LCBLRVlfUkVDT1JEIH0sCisJeyAweDI2LCBLRVlfVFVORVIgfSwKKwl7IDB4MjksIEtFWV9URVhUIH0sCisJeyAweDJhLCBLRVlfTUVESUEgfSwKKwl7IDB4MTgsIEtFWV9FUEcgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19waW5uYWNsZV9ncmV5X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfcGlubmFjbGVfZ3JleSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGlubmFjbGVfZ3JleSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcGlubmFjbGVfZ3JleV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZmx5dmlkZW9bXSA9IHsKKwl7IDB4MGYsIEtFWV8wIH0sCisJeyAweDAzLCBLRVlfMSB9LAorCXsgMHgwNCwgS0VZXzIgfSwKKwl7IDB4MDUsIEtFWV8zIH0sCisJeyAweDA3LCBLRVlfNCB9LAorCXsgMHgwOCwgS0VZXzUgfSwKKwl7IDB4MDksIEtFWV82IH0sCisJeyAweDBiLCBLRVlfNyB9LAorCXsgMHgwYywgS0VZXzggfSwKKwl7IDB4MGQsIEtFWV85IH0sCisKKwl7IDB4MGUsIEtFWV9NT0RFIH0sCS8qIEFpci9DYWJsZSAqLworCXsgMHgxMSwgS0VZX1ZJREVPIH0sCS8qIFZpZGVvICovCisJeyAweDE1LCBLRVlfQVVESU8gfSwJLyogQXVkaW8gKi8KKwl7IDB4MDAsIEtFWV9QT1dFUiB9LAkvKiBQb3dlciAqLworCXsgMHgxOCwgS0VZX1RVTkVSIH0sCS8qIEFWIFNvdXJjZSAqLworCXsgMHgwMiwgS0VZX1pPT00gfSwJLyogRnVsbHNjcmVlbiAqLworCXsgMHgxYSwgS0VZX0xBTkdVQUdFIH0sCS8qIFN0ZXJlbyAqLworCXsgMHgxYiwgS0VZX01VVEUgfSwJLyogTXV0ZSAqLworCXsgMHgxNCwgS0VZX1ZPTFVNRVVQIH0sCS8qIFZvbHVtZSArICovCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LC8qIFZvbHVtZSAtICovCisJeyAweDEyLCBLRVlfQ0hBTk5FTFVQIH0sLyogQ2hhbm5lbCArICovCisJeyAweDEzLCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDaGFubmVsIC0gKi8KKwl7IDB4MDYsIEtFWV9BR0FJTiB9LAkvKiBSZWNhbGwgKi8KKwl7IDB4MTAsIEtFWV9FTlRFUiB9LAkvKiBFbnRlciAqLworCisJeyAweDE5LCBLRVlfQkFDSyB9LAkvKiBSZXdpbmQgICggPDw8ICkgKi8KKwl7IDB4MWYsIEtFWV9GT1JXQVJEIH0sCS8qIEZvcndhcmQgKCA+Pj4gKSAqLworCXsgMHgwYSwgS0VZX0FOR0xFIH0sCS8qIG5vIGxhYmVsLCBtYXkgYmUgdXNlZCBhcyB0aGUgUEFVU0UgYnV0dG9uICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZmx5dmlkZW9fdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19mbHl2aWRlbywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZmx5dmlkZW8pLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2ZseXZpZGVvX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19mbHlkdmJbXSA9IHsKKwl7IDB4MDEsIEtFWV9aT09NIH0sCQkvKiBGdWxsIFNjcmVlbiAqLworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCQkvKiBQb3dlciAqLworCisJeyAweDAzLCBLRVlfMSB9LAorCXsgMHgwNCwgS0VZXzIgfSwKKwl7IDB4MDUsIEtFWV8zIH0sCisJeyAweDA3LCBLRVlfNCB9LAorCXsgMHgwOCwgS0VZXzUgfSwKKwl7IDB4MDksIEtFWV82IH0sCisJeyAweDBiLCBLRVlfNyB9LAorCXsgMHgwYywgS0VZXzggfSwKKwl7IDB4MGQsIEtFWV85IH0sCisJeyAweDA2LCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLworCXsgMHgwZiwgS0VZXzAgfSwKKwl7IDB4MTAsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICovCisJeyAweDAyLCBLRVlfUkFESU8gfSwJCS8qIFRWL1JhZGlvICovCisJeyAweDFiLCBLRVlfTEFOR1VBR0UgfSwJCS8qIFNBUCAoU2Vjb25kIEF1ZGlvIFByb2dyYW0pICovCisKKwl7IDB4MTQsIEtFWV9WT0xVTUVVUCB9LAkJLyogVk9MKyAqLworCXsgMHgxNywgS0VZX1ZPTFVNRURPV04gfSwJLyogVk9MLSAqLworCXsgMHgxMiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBDSCsgKi8KKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDSC0gKi8KKwl7IDB4MWQsIEtFWV9FTlRFUiB9LAkJLyogRW50ZXIgKi8KKworCXsgMHgxYSwgS0VZX01PREUgfSwJCS8qIFBJUCAqLworCXsgMHgxOCwgS0VZX1RVTkVSIH0sCQkvKiBTb3VyY2UgKi8KKworCXsgMHgxZSwgS0VZX1JFQ09SRCB9LAkJLyogUmVjb3JkL1BhdXNlICovCisJeyAweDE1LCBLRVlfQU5HTEUgfSwJCS8qIFN3YXAgKG5vIGxhYmVsIG9uIGtleSkgKi8KKwl7IDB4MWMsIEtFWV9QQVVTRSB9LAkJLyogVGltZXNoaWZ0L1BhdXNlICovCisJeyAweDE5LCBLRVlfQkFDSyB9LAkJLyogUmV3aW5kIDw8ICovCisJeyAweDBhLCBLRVlfUExBWVBBVVNFIH0sCS8qIFBsYXkvUGF1c2UgKi8KKwl7IDB4MWYsIEtFWV9GT1JXQVJEIH0sCQkvKiBGb3J3YXJkID4+ICovCisJeyAweDE2LCBLRVlfUFJFVklPVVMgfSwJCS8qIEJhY2sgfDw8ICovCisJeyAweDExLCBLRVlfU1RPUCB9LAkJLyogU3RvcCAqLworCXsgMHgwZSwgS0VZX05FWFQgfSwJCS8qIEVuZCA+PnwgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19mbHlkdmJfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19mbHlkdmIsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2ZseWR2YiksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZmx5ZHZiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19jaW5lcmd5W10gPSB7CisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCisJeyAweDBhLCBLRVlfUE9XRVIgfSwKKwl7IDB4MGIsIEtFWV9QUk9HMSB9LAkJLyogYXBwICovCisJeyAweDBjLCBLRVlfWk9PTSB9LAkJLyogem9vbS9mdWxsc2NyZWVuICovCisJeyAweDBkLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgKi8KKwl7IDB4MGUsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsLSAqLworCXsgMHgwZiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDEwLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxMSwgS0VZX1RVTkVSIH0sCQkvKiBBViAqLworCXsgMHgxMiwgS0VZX05VTUxPQ0sgfSwJCS8qIC0vLS0gKi8KKwl7IDB4MTMsIEtFWV9BVURJTyB9LAkJLyogYXVkaW8gKi8KKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDE1LCBLRVlfVVAgfSwKKwl7IDB4MTYsIEtFWV9ET1dOIH0sCisJeyAweDE3LCBLRVlfTEVGVCB9LAorCXsgMHgxOCwgS0VZX1JJR0hUIH0sCisJeyAweDE5LCBCVE5fTEVGVCwgfSwKKwl7IDB4MWEsIEJUTl9SSUdIVCwgfSwKKwl7IDB4MWIsIEtFWV9XV1cgfSwJCS8qIHRleHQgKi8KKwl7IDB4MWMsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWQsIEtFWV9GT1JXQVJEIH0sCisJeyAweDFlLCBLRVlfUkVDT1JEIH0sCisJeyAweDFmLCBLRVlfUExBWSB9LAorCXsgMHgyMCwgS0VZX1BSRVZJT1VTU09ORyB9LAorCXsgMHgyMSwgS0VZX05FWFRTT05HIH0sCisJeyAweDIyLCBLRVlfUEFVU0UgfSwKKwl7IDB4MjMsIEtFWV9TVE9QIH0sCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfY2luZXJneV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2NpbmVyZ3ksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2NpbmVyZ3kpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2NpbmVyZ3lfdGFibGUpOworCisvKiBBbGZvbnMgR2VzZXIgPGEuZ2VzZXJAY294Lm5ldD4KKyAqIHVwZGF0ZXMgZnJvbSBKb2IgRC4gUi4gQm9yZ2VzIDxqb2JkcmJAaWcuY29tLmJyPiAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lenR2W10gPSB7CisJeyAweDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDEsIEtFWV9UViB9LAkvKiBEVlIgKi8KKwl7IDB4MTUsIEtFWV9EVkQgfSwJLyogRFZEICovCisJeyAweDE3LCBLRVlfQVVESU8gfSwJLyogbXVzaWMgKi8KKwkJCQkvKiBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZSAqLworCisJeyAweDFiLCBLRVlfTVVURSB9LAkvKiBtdXRlICovCisJeyAweDAyLCBLRVlfTEFOR1VBR0UgfSwJLyogTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsgKi8KKwl7IDB4MWUsIEtFWV9TVUJUSVRMRSB9LAkvKiBjbG9zZWQgY2FwdGlvbmluZyAvIHN1YnRpdGxlIC8gc2VlayAqLworCXsgMHgxNiwgS0VZX1pPT00gfSwJLyogZnVsbCBzY3JlZW4gKi8KKwl7IDB4MWMsIEtFWV9WSURFTyB9LAkvKiB2aWRlbyBzb3VyY2UgLyBlamVjdCAvIGRlbGFsbCAqLworCXsgMHgxZCwgS0VZX1JFU1RBUlQgfSwJLyogcGxheWJhY2sgLyBhbmdsZSAvIGRlbCAqLworCXsgMHgyZiwgS0VZX1NFQVJDSCB9LAkvKiBzY2FuIC8gbWVudSAvIHBsYXlsaXN0ICovCisJeyAweDMwLCBLRVlfQ0hBTk5FTCB9LAkvKiBDSCBzdXJmaW5nIC8gYm9va21hcmsgLyBtZW1vICovCisKKwl7IDB4MzEsIEtFWV9IRUxQIH0sCS8qIGhlbHAgKi8KKwl7IDB4MzIsIEtFWV9NT0RFIH0sCS8qIG51bS9tZW1vICovCisJeyAweDMzLCBLRVlfRVNDIH0sCS8qIGNhbmNlbCAqLworCisJeyAweDBjLCBLRVlfVVAgfSwJLyogdXAgKi8KKwl7IDB4MTAsIEtFWV9ET1dOIH0sCS8qIGRvd24gKi8KKwl7IDB4MDgsIEtFWV9MRUZUIH0sCS8qIGxlZnQgKi8KKwl7IDB4MDQsIEtFWV9SSUdIVCB9LAkvKiByaWdodCAqLworCXsgMHgwMywgS0VZX1NFTEVDVCB9LAkvKiBzZWxlY3QgKi8KKworCXsgMHgxZiwgS0VZX1JFV0lORCB9LAkvKiByZXdpbmQgKi8KKwl7IDB4MjAsIEtFWV9QTEFZUEFVU0UgfSwvKiBwbGF5L3BhdXNlICovCisJeyAweDI5LCBLRVlfRk9SV0FSRCB9LAkvKiBmb3J3YXJkICovCisJeyAweDE0LCBLRVlfQUdBSU4gfSwJLyogcmVwZWF0ICovCisJeyAweDJiLCBLRVlfUkVDT1JEIH0sCS8qIHJlY29yZGluZyAqLworCXsgMHgyYywgS0VZX1NUT1AgfSwJLyogc3RvcCAqLworCXsgMHgyZCwgS0VZX1BMQVkgfSwJLyogcGxheSAqLworCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkvKiBzbmFwc2hvdCAvIHNodWZmbGUgKi8KKworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDBlLCBLRVlfOCB9LAorCXsgMHgwZiwgS0VZXzkgfSwKKworCXsgMHgyYSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxOCwgS0VZX0NIQU5ORUxVUCB9LC8qIENILnRyYWNraW5nIHVwICovCisJeyAweDE5LCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDSC50cmFja2luZyBkb3duICovCisKKwl7IDB4MTMsIEtFWV9FTlRFUiB9LAkvKiBlbnRlciAqLworCXsgMHgyMSwgS0VZX0RPVCB9LAkvKiAuIChkZWNpbWFsIGRvdCkgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lenR2X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZXp0diwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZXp0diksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZXp0dl90YWJsZSk7CisKKy8qIEFsZXggSGVybWFubiA8Z2FhZkBnbXgubmV0PiAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVybWVkaWFbXSA9IHsKKwl7IDB4MjgsIEtFWV8xIH0sCisJeyAweDE4LCBLRVlfMiB9LAorCXsgMHgzOCwgS0VZXzMgfSwKKwl7IDB4MjQsIEtFWV80IH0sCisJeyAweDE0LCBLRVlfNSB9LAorCXsgMHgzNCwgS0VZXzYgfSwKKwl7IDB4MmMsIEtFWV83IH0sCisJeyAweDFjLCBLRVlfOCB9LAorCXsgMHgzYywgS0VZXzkgfSwKKwl7IDB4MjIsIEtFWV8wIH0sCisKKwl7IDB4MjAsIEtFWV9UViB9LAkJLyogVFYvRk0gKi8KKwl7IDB4MTAsIEtFWV9DRCB9LAkJLyogQ0QgKi8KKwl7IDB4MzAsIEtFWV9URVhUIH0sCQkvKiBURUxFVEVYVCAqLworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCQkvKiBQT1dFUiAqLworCisJeyAweDA4LCBLRVlfVklERU8gfSwJCS8qIFZJREVPICovCisJeyAweDA0LCBLRVlfQVVESU8gfSwJCS8qIEFVRElPICovCisJeyAweDBjLCBLRVlfWk9PTSB9LAkJLyogRlVMTCBTQ1JFRU4gKi8KKworCXsgMHgxMiwgS0VZX1NVQlRJVExFIH0sCQkvKiBESVNQTEFZICovCisJeyAweDMyLCBLRVlfUkVXSU5EIH0sCQkvKiBMT09QCSovCisJeyAweDAyLCBLRVlfUFJJTlQgfSwJCS8qIFBSRVZJRVcgKi8KKworCXsgMHgyYSwgS0VZX1NFQVJDSCB9LAkJLyogQVVUT1NDQU4gKi8KKwl7IDB4MWEsIEtFWV9TTEVFUCB9LAkJLyogRlJFRVpFICovCisJeyAweDNhLCBLRVlfQ0FNRVJBIH0sCQkvKiBTTkFQU0hPVCAqLworCXsgMHgwYSwgS0VZX01VVEUgfSwJCS8qIE1VVEUgKi8KKworCXsgMHgyNiwgS0VZX1JFQ09SRCB9LAkJLyogUkVDT1JEICovCisJeyAweDE2LCBLRVlfUEFVU0UgfSwJCS8qIFBBVVNFICovCisJeyAweDM2LCBLRVlfU1RPUCB9LAkJLyogU1RPUCAqLworCXsgMHgwNiwgS0VZX1BMQVkgfSwJCS8qIFBMQVkgKi8KKworCXsgMHgyZSwgS0VZX1JFRCB9LAkJLyogUkVEICovCisJeyAweDIxLCBLRVlfR1JFRU4gfSwJCS8qIEdSRUVOICovCisJeyAweDBlLCBLRVlfWUVMTE9XIH0sCQkvKiBZRUxMT1cgKi8KKwl7IDB4MDEsIEtFWV9CTFVFIH0sCQkvKiBCTFVFICovCisKKwl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCS8qIFZPTFVNRS0gKi8KKwl7IDB4M2UsIEtFWV9WT0xVTUVVUCB9LAkJLyogVk9MVU1FKyAqLworCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENIQU5ORUwvUEFHRS0gKi8KKwl7IDB4MzEsIEtFWV9DSEFOTkVMVVAgfQkJLyogQ0hBTk5FTC9QQUdFKyAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJtZWRpYSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXZlcm1lZGlhKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJbXSA9IHsKKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDI0LCBLRVlfWk9PTSB9LAorCisJeyAweDAxLCBLRVlfRFZEIH0sCisJeyAweDIzLCBLRVlfUkFESU8gfSwKKwl7IDB4MDAsIEtFWV9UViB9LAorCisJeyAweDBhLCBLRVlfUkVXSU5EIH0sCisJeyAweDA4LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDBmLCBLRVlfRk9SV0FSRCB9LAorCisJeyAweDAyLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MDcsIEtFWV9TVE9QIH0sCisJeyAweDA2LCBLRVlfTkVYVCB9LAorCisJeyAweDBjLCBLRVlfVVAgfSwKKwl7IDB4MGUsIEtFWV9ET1dOIH0sCisJeyAweDBiLCBLRVlfTEVGVCB9LAorCXsgMHgwZCwgS0VZX1JJR0hUIH0sCisJeyAweDExLCBLRVlfT0sgfSwKKworCXsgMHgwMywgS0VZX01FTlUgfSwKKwl7IDB4MDksIEtFWV9TRVRVUCB9LAorCXsgMHgwNSwgS0VZX1ZJREVPIH0sCisJeyAweDIyLCBLRVlfQ0hBTk5FTCB9LAorCisJeyAweDEyLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDEwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDEzLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHgwNCwgS0VZX1JFQ09SRCB9LAorCisJeyAweDE2LCBLRVlfMSB9LAorCXsgMHgxNywgS0VZXzIgfSwKKwl7IDB4MTgsIEtFWV8zIH0sCisJeyAweDE5LCBLRVlfNCB9LAorCXsgMHgxYSwgS0VZXzUgfSwKKwl7IDB4MWIsIEtFWV82IH0sCisJeyAweDFjLCBLRVlfNyB9LAorCXsgMHgxZCwgS0VZXzggfSwKKwl7IDB4MWUsIEtFWV85IH0sCisJeyAweDFmLCBLRVlfMCB9LAorCisJeyAweDIwLCBLRVlfTEFOR1VBR0UgfSwKKwl7IDB4MjEsIEtFWV9TTEVFUCB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyX3RhYmxlKTsKKworLyogTWljaGFlbCBUb2thcmV2IDxtanRAdGxzLm1zay5ydT4KKyAgIGh0dHA6Ly93d3cuY29ycGl0LnJ1L21qdC9iZWhvbGRUVi9yZW1vdGVfY29udHJvbC5qcGcKKyAgIGtleXRhYmxlIGlzIHVzZWQgYnkgTUFOTEkgTVRWMDBbMHgwY10gYW5kIEJlaG9sZFRWIDQwWzEzXSBhdAorICAgbGVhc3QsIGFuZCBwcm9iYWJseSBvdGhlciBjYXJkcyB0b28uCisgICBUaGUgImFzY2lpLWFydCBwaWN0dXJlIiBiZWxvdyAoaW4gY29tbWVudHMsIGZpcnN0IHJvdworICAgaXMgdGhlIGtleWNvZGUgaW4gaGV4LCBhbmQgc3Vic2VxdWVudCByb3cocykgc2hvd3MKKyAgIHRoZSBidXR0b24gbGFiZWxzIChzZXZlcmFsIHZhcmlhbnRzIHdoZW4gYXBwcm9wcmlhdGUpCisgICBoZWxwcyB0byBkZXNjaWRlIHdoaWNoIGtleWNvZGVzIHRvIGFzc2lnbiB0byB0aGUgYnV0dG9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19tYW5saVtdID0geworCisJLyogIDB4MWMgICAgICAgICAgICAweDEyICAqCisJICogRlVOQ1RJT04gICAgICAgICBQT1dFUiAqCisJICogICBGTSAgICAgICAgICAgICAgKHwpICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgxYywgS0VZX1JBRElPIH0sCS8qWFhYKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAorCisJLyogIDB4MDEgICAgMHgwMiAgICAweDAzICAqCisJICogICAxICAgICAgIDIgICAgICAgMyAgICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqCisJICogIDB4MDQgICAgMHgwNSAgICAweDA2ICAqCisJICogICA0ICAgICAgIDUgICAgICAgNiAgICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqCisJICogIDB4MDcgICAgMHgwOCAgICAweDA5ICAqCisJICogICA3ICAgICAgIDggICAgICAgOSAgICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCisJLyogIDB4MGEgICAgMHgwMCAgICAweDE3ICAqCisJICogUkVDQUxMICAgIDAgICAgICArMTAwICAqCisJICogICAgICAgICAgICAgICAgICBQTFVTICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgwYSwgS0VZX0FHQUlOIH0sCS8qWFhYIEtFWV9SRVdJTkQ/ICovCisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgxNywgS0VZX0RJR0lUUyB9LAkvKlhYWCovCisKKwkvKiAgMHgxNCAgICAgICAgICAgIDB4MTAgICoKKwkgKiAgTUVOVSAgICAgICAgICAgIElORk8gICoKKwkgKiAgT1NEICAgICAgICAgICAgICAgICAgICovCisJeyAweDE0LCBLRVlfTUVOVSB9LAorCXsgMHgxMCwgS0VZX0lORk8gfSwKKworCS8qICAgICAgICAgIDB4MGIgICAgICAgICAgKgorCSAqICAgICAgICAgICBVcCAgICAgICAgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAweDE4ICAgIDB4MTYgICAgMHgwYyAgKgorCSAqICBMZWZ0ICAgICBPayAgICAgUmlnaHQgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAgICAgICAgMHgwMTUgICAgICAgICAgKgorCSAqICAgICAgICAgRG93biAgICAgICAgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MGIsIEtFWV9VUCB9LAorCXsgMHgxOCwgS0VZX0xFRlQgfSwKKwl7IDB4MTYsIEtFWV9PSyB9LAkvKlhYWCBLRVlfU0VMRUNUPyBLRVlfRU5URVI/ICovCisJeyAweDBjLCBLRVlfUklHSFQgfSwKKwl7IDB4MTUsIEtFWV9ET1dOIH0sCisKKwkvKiAgMHgxMSAgICAgICAgICAgIDB4MGQgICoKKwkgKiAgVFYvQVYgICAgICAgICAgIE1PREUgICoKKwkgKiAgU09VUkNFICAgICAgICAgU1RFUkVPICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDExLCBLRVlfVFYgfSwJLypYWFgqLworCXsgMHgwZCwgS0VZX01PREUgfSwJLypYWFggdGhlcmUncyBubyBLRVlfU1RFUkVPCSovCisKKwkvKiAgMHgwZiAgICAweDFiICAgIDB4MWEgICoKKwkgKiAgQVVESU8gICBWb2wrICAgIENoYW4rICoKKwkgKiAgICAgICAgVElNRVNISUZUPz8/ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwZSAgICAweDFmICAgIDB4MWUgICoKKwkgKiAgU0xFRVAgICBWb2wtICAgIENoYW4tICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDBmLCBLRVlfQVVESU8gfSwKKwl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxYSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwZSwgS0VZX1RJTUUgfSwKKwl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCS8qICAgICAgICAgMHgxMyAgICAgMHgxOSAgKgorCSAqICAgICAgICAgTVVURSAgIFNOQVBTSE9UKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MTMsIEtFWV9NVVRFIH0sCisJeyAweDE5LCBLRVlfQ0FNRVJBIH0sCisKKwkvKiAweDFkIHVudXNlZCA/ICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbWFubGlfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19tYW5saSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbWFubGkpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX21hbmxpX3RhYmxlKTsKKworLyogTWlrZSBCYWlrb3YgPG1pa2VAYmFpa292LmNvbT4gKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZ290dmlldzcxMzVbXSA9IHsKKworCXsgMHgxMSwgS0VZX1BPV0VSIH0sCisJeyAweDM1LCBLRVlfVFYgfSwKKwl7IDB4MWIsIEtFWV8wIH0sCisJeyAweDI5LCBLRVlfMSB9LAorCXsgMHgxOSwgS0VZXzIgfSwKKwl7IDB4MzksIEtFWV8zIH0sCisJeyAweDFmLCBLRVlfNCB9LAorCXsgMHgyYywgS0VZXzUgfSwKKwl7IDB4MjEsIEtFWV82IH0sCisJeyAweDI0LCBLRVlfNyB9LAorCXsgMHgxOCwgS0VZXzggfSwKKwl7IDB4MmIsIEtFWV85IH0sCisJeyAweDNiLCBLRVlfQUdBSU4gfSwJLyogTE9PUCAqLworCXsgMHgwNiwgS0VZX0FVRElPIH0sCisJeyAweDMxLCBLRVlfUFJJTlQgfSwJLyogUFJFVklFVyAqLworCXsgMHgzZSwgS0VZX1ZJREVPIH0sCisJeyAweDEwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDIwLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MGMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDI4LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDgsIEtFWV9NVVRFIH0sCisJeyAweDI2LCBLRVlfU0VBUkNIIH0sCS8qIFNDQU4gKi8KKwl7IDB4M2YsIEtFWV9DQU1FUkEgfSwJLyogU05BUFNIT1QgKi8KKwl7IDB4MTIsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MzIsIEtFWV9TVE9QIH0sCisJeyAweDNjLCBLRVlfUExBWSB9LAorCXsgMHgxZCwgS0VZX1JFV0lORCB9LAorCXsgMHgyZCwgS0VZX1BBVVNFIH0sCisJeyAweDBkLCBLRVlfRk9SV0FSRCB9LAorCXsgMHgwNSwgS0VZX1pPT00gfSwJLypGVUxMKi8KKworCXsgMHgyYSwgS0VZX0YyMSB9LAkvKiBMSVZFIFRJTUVTSElGVCAqLworCXsgMHgwZSwgS0VZX0YyMiB9LAkvKiBNSU4gVElNRVNISUZUICovCisJeyAweDFlLCBLRVlfVElNRSB9LAkvKiBUSU1FU0hJRlQgKi8KKwl7IDB4MzgsIEtFWV9GMjQgfSwJLyogTk9STUFMIFRJTUVTSElGVCAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2dvdHZpZXc3MTM1X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZ290dmlldzcxMzUsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2dvdHZpZXc3MTM1KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19nb3R2aWV3NzEzNV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcHVycGxldHZbXSA9IHsKKwl7IDB4MDMsIEtFWV9QT1dFUiB9LAorCXsgMHg2ZiwgS0VZX01VVEUgfSwKKwl7IDB4MTAsIEtFWV9CQUNLU1BBQ0UgfSwJLyogUmVjYWxsICovCisKKwl7IDB4MTEsIEtFWV8wIH0sCisJeyAweDA0LCBLRVlfMSB9LAorCXsgMHgwNSwgS0VZXzIgfSwKKwl7IDB4MDYsIEtFWV8zIH0sCisJeyAweDA4LCBLRVlfNCB9LAorCXsgMHgwOSwgS0VZXzUgfSwKKwl7IDB4MGEsIEtFWV82IH0sCisJeyAweDBjLCBLRVlfNyB9LAorCXsgMHgwZCwgS0VZXzggfSwKKwl7IDB4MGUsIEtFWV85IH0sCisJeyAweDEyLCBLRVlfRE9UIH0sCS8qIDEwMCsgKi8KKworCXsgMHgwNywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDBiLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxYSwgS0VZX0tQUExVUyB9LAorCXsgMHgxOCwgS0VZX0tQTUlOVVMgfSwKKwl7IDB4MTUsIEtFWV9VUCB9LAorCXsgMHgxZCwgS0VZX0RPV04gfSwKKwl7IDB4MGYsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHg0OCwgS0VZX1pPT00gfSwKKworCXsgMHgxYiwgS0VZX1ZJREVPIH0sCS8qIFZpZGVvIHNvdXJjZSAqLworCXsgMHgxZiwgS0VZX0NBTUVSQSB9LAkvKiBTbmFwc2hvdCAqLworCXsgMHg0OSwgS0VZX0xBTkdVQUdFIH0sCS8qIE1UUyBTZWxlY3QgKi8KKwl7IDB4MTksIEtFWV9TRUFSQ0ggfSwJLyogQXV0byBTY2FuICovCisKKwl7IDB4NGIsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NDYsIEtFWV9QTEFZIH0sCisJeyAweDQ1LCBLRVlfUEFVU0UgfSwJLyogUGF1c2UgKi8KKwl7IDB4NDQsIEtFWV9TVE9QIH0sCisJeyAweDQzLCBLRVlfVElNRSB9LAkvKiBUaW1lIFNoaWZ0ICovCisJeyAweDE3LCBLRVlfQ0hBTk5FTCB9LAkvKiBTVVJGIENIICovCisJeyAweDQwLCBLRVlfRk9SV0FSRCB9LAkvKiBGb3J3YXJkID8gKi8KKwl7IDB4NDIsIEtFWV9SRVdJTkQgfSwJLyogQmFja3dhcmQgPyAqLworCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcHVycGxldHZfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19wdXJwbGV0diwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcHVycGxldHYpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3B1cnBsZXR2X3RhYmxlKTsKKworLyogTWFwcGluZyBmb3IgdGhlIDI4IGtleSByZW1vdGUgY29udHJvbCBhcyBzZWVuIGF0CisgICBodHRwOi8vd3d3LnNlZG5hY29tcHV0ZXIuY29tL3Bob3RvL2NhcmRidXMtdHYuanBnCisgICBQYXZlbCBNaWhheWxvdiA8YmluQGJhc2guaW5mbz4KKyAgIEFsc28gZm9yIHRoZSByZW1vdGUgYnVuZGxlZCB3aXRoIEtvenVtaSBLVFYtMDFDIGNhcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGN0dl9zZWRuYVtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKworCXsgMHgwYSwgS0VZX0FHQUlOIH0sCS8qIFJlY2FsbCAqLworCXsgMHgwYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwYywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDBkLCBLRVlfTU9ERSB9LAkvKiBTdGVyZW8gKi8KKwl7IDB4MGUsIEtFWV9TVE9QIH0sCisJeyAweDBmLCBLRVlfUFJFVklPVVNTT05HIH0sCisJeyAweDEwLCBLRVlfWk9PTSB9LAorCXsgMHgxMSwgS0VZX1RVTkVSIH0sCS8qIFNvdXJjZSAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDEzLCBLRVlfTVVURSB9LAorCXsgMHgxNSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDE4LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAkvKiBTbmFwc2hvdCAqLworCXsgMHgxYSwgS0VZX05FWFRTT05HIH0sCisJeyAweDFiLCBLRVlfVElNRSB9LAkvKiBUaW1lIFNoaWZ0ICovCisJeyAweDFjLCBLRVlfUkFESU8gfSwJLyogRk0gUmFkaW8gKi8KKwl7IDB4MWQsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWUsIEtFWV9QQVVTRSB9LAorCS8qIGFkZGl0aW9uYWwgY29kZXMgZm9yIEtvenVtaSdzIHJlbW90ZSAqLworCXsgMHgxNCwgS0VZX0lORk8gfSwJLyogT1NEICovCisJeyAweDE2LCBLRVlfT0sgfSwJLyogT0sgKi8KKwl7IDB4MTcsIEtFWV9ESUdJVFMgfSwJLyogUGx1cyAqLworCXsgMHgxZiwgS0VZX1BMQVkgfSwJLyogUGxheSAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3BjdHZfc2VkbmFfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19wY3R2X3NlZG5hLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19wY3R2X3NlZG5hKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wY3R2X3NlZG5hX3RhYmxlKTsKKworLyogTWFyayBQaGFsYW4gPHBoYWxhbm1AbzIuaWU+ICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3B2OTUxW10gPSB7CisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCisJeyAweDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MTAsIEtFWV9NVVRFIH0sCisJeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MGUsIEtFWV9QQUdFVVAgfSwKKwl7IDB4MWQsIEtFWV9QQUdFRE9XTiB9LAorCXsgMHgxMywgS0VZX1NPVU5EIH0sCisKKwl7IDB4MTgsIEtFWV9LUFBMVVNNSU5VUyB9LAkvKiBDSCArLy0gKi8KKwl7IDB4MTYsIEtFWV9TVUJUSVRMRSB9LAkJLyogQ0MgKi8KKwl7IDB4MGQsIEtFWV9URVhUIH0sCQkvKiBUVFggKi8KKwl7IDB4MGIsIEtFWV9UViB9LAkJLyogQUlSL0NCTCAqLworCXsgMHgxMSwgS0VZX1BDIH0sCQkvKiBQQy9UViAqLworCXsgMHgxNywgS0VZX09LIH0sCQkvKiBDSCBSVE4gKi8KKwl7IDB4MTksIEtFWV9NT0RFIH0sCQkvKiBGVU5DICovCisJeyAweDBjLCBLRVlfU0VBUkNIIH0sCQkvKiBBVVRPU0NBTiAqLworCisJLyogTm90IHN1cmUgd2hhdCB0byBkbyB3aXRoIHRoZXNlIG9uZXMhICovCisJeyAweDBmLCBLRVlfU0VMRUNUIH0sCQkvKiBTT1VSQ0UgKi8KKwl7IDB4MGEsIEtFWV9LUFBMVVMgfSwJCS8qICsxMDAgKi8KKwl7IDB4MTQsIEtFWV9FUVVBTCB9LAkJLyogU1lOQyAqLworCXsgMHgxYywgS0VZX01FRElBIH0sCQkvKiBQQy9UViAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3B2OTUxX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfcHY5NTEsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3B2OTUxKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wdjk1MV90YWJsZSk7CisKKy8qIGdlbmVyaWMgUkM1IGtleXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHNlZSBodHRwOi8vdXNlcnMucGFuZG9yYS5iZS9uZW55YS9lbGVjdHJvbmljcy9yYzUvY29kZXMwMC5odG0gKi8KKy8qIHVzZWQgYnkgb2xkIChibGFjaykgSGF1cHBhdWdlIHJlbW90ZXMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcmM1X3R2W10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4MGIsIEtFWV9DSEFOTkVMIH0sCQkvKiBjaGFubmVsIC8gcHJvZ3JhbSAoamFwYW46IDExKSAqLworCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBzdGFuZGJ5ICovCisJeyAweDBkLCBLRVlfTVVURSB9LAkJLyogbXV0ZSAvIGRlbXV0ZSAqLworCXsgMHgwZiwgS0VZX1RWIH0sCQkvKiBkaXNwbGF5ICovCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDEyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCisJeyAweDEzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKKwl7IDB4MWUsIEtFWV9TRUFSQ0ggfSwJCS8qIHNlYXJjaCArICovCisJeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDIyLCBLRVlfQ0hBTk5FTCB9LAkJLyogYWx0IC8gY2hhbm5lbCAqLworCXsgMHgyMywgS0VZX0xBTkdVQUdFIH0sCQkvKiAxc3QgLyAybmQgbGFuZ3VhZ2UgKi8KKwl7IDB4MjYsIEtFWV9TTEVFUCB9LAkJLyogc2xlZXB0aW1lciAqLworCXsgMHgyZSwgS0VZX01FTlUgfSwJCS8qIDJuZCBjb250cm9scyAoVVNBOiBtZW51KSAqLworCXsgMHgzMCwgS0VZX1BBVVNFIH0sCisJeyAweDMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDMzLCBLRVlfR09UTyB9LAorCXsgMHgzNSwgS0VZX1BMQVkgfSwKKwl7IDB4MzYsIEtFWV9TVE9QIH0sCisJeyAweDM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KKwl7IDB4M2MsIEtFWV9URVhUIH0sCQkvKiB0ZWxldGV4dCBzdWJtb2RlIChKYXBhbjogMTIpICovCisJeyAweDNkLCBLRVlfU1VTUEVORCB9LAkJLyogc3lzdGVtIHN0YW5kYnkgKi8KKworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3JjNV90dl90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3JjNV90diwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcmM1X3R2KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19yYzVfdHZfdGFibGUpOworCisvKiBUYWJsZSBmb3IgTGVhZHRlayBXaW5mYXN0IFJlbW90ZSBDb250cm9scyAtIHVzZWQgYnkgYm90aCBidHR2IGFuZCBjeDg4ICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3dpbmZhc3RbXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCXsgMHgxMiwgS0VZXzAgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDBlLCBLRVlfOCB9LAorCXsgMHgwZiwgS0VZXzkgfSwKKworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCisJeyAweDFiLCBLRVlfQVVESU8gfSwJCS8qIEF1ZGlvIFNvdXJjZSAqLworCXsgMHgwMiwgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSwgbm90IG9uIFkwNDAwMDUyICovCisJeyAweDFlLCBLRVlfVklERU8gfSwJCS8qIFZpZGVvIFNvdXJjZSAqLworCXsgMHgxNiwgS0VZX0lORk8gfSwJCS8qIERpc3BsYXkgaW5mb3JtYXRpb24gKi8KKwl7IDB4MDQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwOCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MGMsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMywgS0VZX1pPT00gfSwJCS8qIGZ1bGxzY3JlZW4gKi8KKwl7IDB4MWYsIEtFWV9URVhUIH0sCQkvKiBjbG9zZWQgY2FwdGlvbi90ZWxldGV4dCAqLworCXsgMHgyMCwgS0VZX1NMRUVQIH0sCisJeyAweDI5LCBLRVlfQ0xFQVIgfSwJCS8qIGJvc3Mga2V5ICovCisJeyAweDE0LCBLRVlfTVVURSB9LAorCXsgMHgyYiwgS0VZX1JFRCB9LAorCXsgMHgyYywgS0VZX0dSRUVOIH0sCisJeyAweDJkLCBLRVlfWUVMTE9XIH0sCisJeyAweDJlLCBLRVlfQkxVRSB9LAorCXsgMHgxOCwgS0VZX0tQUExVUyB9LAkJLyogZmluZSB0dW5lICsgLCBub3Qgb24gWTA0MDA1MiAqLworCXsgMHgxOSwgS0VZX0tQTUlOVVMgfSwJCS8qIGZpbmUgdHVuZSAtICwgbm90IG9uIFkwNDAwNTIgKi8KKwl7IDB4MmEsIEtFWV9NRURJQSB9LAkJLyogUElQIChQaWN0dXJlIGluIHBpY3R1cmUgKi8KKwl7IDB4MjEsIEtFWV9ET1QgfSwKKwl7IDB4MTMsIEtFWV9FTlRFUiB9LAorCXsgMHgxMSwgS0VZX0xBU1QgfSwJCS8qIFJlY2FsbCAobGFzdCBjaGFubmVsICovCisJeyAweDIyLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MjMsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MjQsIEtFWV9ORVhUIH0sCisJeyAweDI1LCBLRVlfVElNRSB9LAkJLyogVGltZSBTaGlmdGluZyAqLworCXsgMHgyNiwgS0VZX1NUT1AgfSwKKwl7IDB4MjcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MjgsIEtFWV9TQVZFIH0sCQkvKiBTY3JlZW5zaG90ICovCisJeyAweDJmLCBLRVlfTUVOVSB9LAorCXsgMHgzMCwgS0VZX0NBTkNFTCB9LAorCXsgMHgzMSwgS0VZX0NIQU5ORUwgfSwJCS8qIENoYW5uZWwgU3VyZiAqLworCXsgMHgzMiwgS0VZX1NVQlRJVExFIH0sCisJeyAweDMzLCBLRVlfTEFOR1VBR0UgfSwKKwl7IDB4MzQsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MzUsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgzNiwgS0VZX1RWIH0sCisJeyAweDM3LCBLRVlfUkFESU8gfSwJCS8qIEZNICovCisJeyAweDM4LCBLRVlfRFZEIH0sCisKKwl7IDB4MWEsIEtFWV9NT0RFfSwJCS8qIGNoYW5nZSB0byBNQ0UgbW9kZSBvbiBZMDRHMDA1MSAqLworCXsgMHgzZSwgS0VZX0YyMSB9LAkJLyogTUNFICtWT0wsIG9uIFkwNEcwMDMzICovCisJeyAweDNhLCBLRVlfRjIyIH0sCQkvKiBNQ0UgLVZPTCwgb24gWTA0RzAwMzMgKi8KKwl7IDB4M2IsIEtFWV9GMjMgfSwJCS8qIE1DRSArQ0gsICBvbiBZMDRHMDAzMyAqLworCXsgMHgzZiwgS0VZX0YyNCB9CQkvKiBNQ0UgLUNILCAgb24gWTA0RzAwMzMgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc193aW5mYXN0X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfd2luZmFzdCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfd2luZmFzdCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGlubmFjbGVfY29sb3JbXSA9IHsKKwl7IDB4NTksIEtFWV9NVVRFIH0sCisJeyAweDRhLCBLRVlfUE9XRVIgfSwKKworCXsgMHgxOCwgS0VZX1RFWFQgfSwKKwl7IDB4MjYsIEtFWV9UViB9LAorCXsgMHgzZCwgS0VZX1BSSU5UIH0sCisKKwl7IDB4NDgsIEtFWV9SRUQgfSwKKwl7IDB4MDQsIEtFWV9HUkVFTiB9LAorCXsgMHgxMSwgS0VZX1lFTExPVyB9LAorCXsgMHgwMCwgS0VZX0JMVUUgfSwKKworCXsgMHgyZCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAorCisJeyAweDQ5LCBLRVlfTUVOVSB9LAorCisJeyAweDE2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHgyMCwgS0VZX1VQIH0sCisJeyAweDIxLCBLRVlfRE9XTiB9LAorCXsgMHgyMiwgS0VZX0xFRlQgfSwKKwl7IDB4MjMsIEtFWV9SSUdIVCB9LAorCXsgMHgwZCwgS0VZX1NFTEVDVCB9LAorCisJeyAweDA4LCBLRVlfQkFDSyB9LAorCXsgMHgwNywgS0VZX1JFRlJFU0ggfSwKKworCXsgMHgyZiwgS0VZX1pPT00gfSwKKwl7IDB4MjksIEtFWV9SRUNPUkQgfSwKKworCXsgMHg0YiwgS0VZX1BBVVNFIH0sCisJeyAweDRkLCBLRVlfUkVXSU5EIH0sCisJeyAweDJlLCBLRVlfUExBWSB9LAorCXsgMHg0ZSwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4NTMsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHg0YywgS0VZX1NUT1AgfSwKKwl7IDB4NTQsIEtFWV9ORVhUIH0sCisKKwl7IDB4NjksIEtFWV8wIH0sCisJeyAweDZhLCBLRVlfMSB9LAorCXsgMHg2YiwgS0VZXzIgfSwKKwl7IDB4NmMsIEtFWV8zIH0sCisJeyAweDZkLCBLRVlfNCB9LAorCXsgMHg2ZSwgS0VZXzUgfSwKKwl7IDB4NmYsIEtFWV82IH0sCisJeyAweDcwLCBLRVlfNyB9LAorCXsgMHg3MSwgS0VZXzggfSwKKwl7IDB4NzIsIEtFWV85IH0sCisKKwl7IDB4NzQsIEtFWV9DSEFOTkVMIH0sCisJeyAweDBhLCBLRVlfQkFDS1NQQUNFIH0sCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGlubmFjbGVfY29sb3JfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19waW5uYWNsZV9jb2xvciwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGlubmFjbGVfY29sb3IpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yX3RhYmxlKTsKKworLyogSGF1cHBhdWdlOiB0aGUgbmV3ZXIsIGdyYXkgcmVtb3RlcyAoc2VlbXMgdGhlcmUgYXJlIG11bHRpcGxlCisgKiBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMpLCBzaGlwcGVkIHdpdGggY3g4OCtpdnR2IGNhcmRzLgorICogYWxtb3N0IHJjNSBjb2RpbmcsIGJ1dCBzb21lIG5vbi1zdGFuZGFyZCBrZXlzICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdbXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKworCXsgMHgwYSwgS0VZX1RFWFQgfSwJCS8qIGtleXBhZCBhc3RlcmlzayBhcyB3ZWxsICovCisJeyAweDBiLCBLRVlfUkVEIH0sCQkvKiByZWQgYnV0dG9uICovCisJeyAweDBjLCBLRVlfUkFESU8gfSwKKwl7IDB4MGQsIEtFWV9NRU5VIH0sCisJeyAweDBlLCBLRVlfU1VCVElUTEUgfSwJCS8qIGFsc28gdGhlICMga2V5ICovCisJeyAweDBmLCBLRVlfTVVURSB9LAorCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxMiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBwcmV2aW91cyBjaGFubmVsICovCisJeyAweDE0LCBLRVlfVVAgfSwKKwl7IDB4MTUsIEtFWV9ET1dOIH0sCisJeyAweDE2LCBLRVlfTEVGVCB9LAorCXsgMHgxNywgS0VZX1JJR0hUIH0sCisJeyAweDE4LCBLRVlfVklERU8gfSwJCS8qIFZpZGVvcyAqLworCXsgMHgxOSwgS0VZX0FVRElPIH0sCQkvKiBNdXNpYyAqLworCS8qIDB4MWE6IFBpY3R1cmVzIC0gcHJlc3VtZSB0aGlzIG1lYW5zCisJICAgIk11bHRpbWVkaWEgSG9tZSBQbGF0Zm9ybSIgLQorCSAgIG5vICJQSUNUVVJFUyIga2V5IGluIGlucHV0LmgKKwkgKi8KKwl7IDB4MWEsIEtFWV9NSFAgfSwKKworCXsgMHgxYiwgS0VZX0VQRyB9LAkJLyogR3VpZGUgKi8KKwl7IDB4MWMsIEtFWV9UViB9LAorCXsgMHgxZSwgS0VZX05FWFRTT05HIH0sCQkvKiBza2lwID58ICovCisJeyAweDFmLCBLRVlfRVhJVCB9LAkJLyogYmFjay9leGl0ICovCisJeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDIyLCBLRVlfQ0hBTk5FTCB9LAkJLyogc291cmNlIChvbGQgYmxhY2sgcmVtb3RlKSAqLworCXsgMHgyNCwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiByZXBsYXkgfDwgKi8KKwl7IDB4MjUsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KKwl7IDB4MjYsIEtFWV9TTEVFUCB9LAkJLyogbWluaW1pemUgKG9sZCBibGFjayByZW1vdGUpICovCisJeyAweDI5LCBLRVlfQkxVRSB9LAkJLyogYmx1ZSBrZXkgKi8KKwl7IDB4MmUsIEtFWV9HUkVFTiB9LAkJLyogZ3JlZW4gYnV0dG9uICovCisJeyAweDMwLCBLRVlfUEFVU0UgfSwJCS8qIHBhdXNlICovCisJeyAweDMyLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLworCXsgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MzUsIEtFWV9QTEFZIH0sCisJeyAweDM2LCBLRVlfU1RPUCB9LAorCXsgMHgzNywgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDM4LCBLRVlfWUVMTE9XIH0sCQkvKiB5ZWxsb3cga2V5ICovCisJeyAweDNiLCBLRVlfU0VMRUNUIH0sCQkvKiB0b3AgcmlnaHQgYnV0dG9uICovCisJeyAweDNjLCBLRVlfWk9PTSB9LAkJLyogZnVsbCAqLworCXsgMHgzZCwgS0VZX1BPV0VSIH0sCQkvKiBzeXN0ZW0gcG93ZXIgKGdyZWVuIGJ1dHRvbikgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfaGF1cHBhdWdlX25ldyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfaGF1cHBhdWdlX25ld190YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbnBndGVjaFtdID0geworCXsgMHgxZCwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggaW5wdXRzICovCisJeyAweDJhLCBLRVlfRlJPTlQgfSwKKworCXsgMHgzZSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwYSwgS0VZXzQgfSwKKwl7IDB4MGUsIEtFWV81IH0sCisJeyAweDEyLCBLRVlfNiB9LAorCXsgMHgxNiwgS0VZXzcgfSwKKwl7IDB4MWEsIEtFWV84IH0sCisJeyAweDFlLCBLRVlfOSB9LAorCXsgMHgzYSwgS0VZXzAgfSwKKwl7IDB4MjIsIEtFWV9OVU1MT0NLIH0sCQkvKiAtLy0tICovCisJeyAweDIwLCBLRVlfUkVGUkVTSCB9LAorCisJeyAweDAzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKKwl7IDB4MjgsIEtFWV9BVURJTyB9LAorCXsgMHgzYywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgzZiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MmUsIEtFWV9NVVRFIH0sCisJeyAweDNiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDAsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwNywgS0VZX0JSSUdIVE5FU1NVUCB9LAorCXsgMHgyYywgS0VZX1RFWFQgfSwKKworCXsgMHgzNywgS0VZX1JFQ09SRCB9LAorCXsgMHgxNywgS0VZX1BMQVkgfSwKKwl7IDB4MTMsIEtFWV9QQVVTRSB9LAorCXsgMHgyNiwgS0VZX1NUT1AgfSwKKwl7IDB4MTgsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxNCwgS0VZX1JFV0lORCB9LAorCXsgMHgzMywgS0VZX1pPT00gfSwKKwl7IDB4MzIsIEtFWV9LRVlCT0FSRCB9LAorCXsgMHgzMCwgS0VZX0dPVE8gfSwJCS8qIFBvaW50aW5nIGFycm93ICovCisJeyAweDM2LCBLRVlfTUFDUk8gfSwJCS8qIE1heGltaXplL01pbmltaXplICh5ZWxsb3cpICovCisJeyAweDBiLCBLRVlfUkFESU8gfSwKKwl7IDB4MTAsIEtFWV9QT1dFUiB9LAorCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbnBndGVjaF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX25wZ3RlY2gsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX25wZ3RlY2gpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25wZ3RlY2hfdGFibGUpOworCisvKiBOb3J3b29kIE1pY3JvIChub24tUHJvKSBUViBUdW5lcgorICAgQnkgUGV0ZXIgTmF1bGxzIDxwZXRlckBjaG9ja3kub3JnPgorICAgS2V5IGNvbW1lbnRzIGFyZSB0aGUgZnVuY3Rpb25zIGdpdmVuIGluIHRoZSBtYW51YWwgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbm9yd29vZFtdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDIwLCBLRVlfMCB9LAorCXsgMHgyMSwgS0VZXzEgfSwKKwl7IDB4MjIsIEtFWV8yIH0sCisJeyAweDIzLCBLRVlfMyB9LAorCXsgMHgyNCwgS0VZXzQgfSwKKwl7IDB4MjUsIEtFWV81IH0sCisJeyAweDI2LCBLRVlfNiB9LAorCXsgMHgyNywgS0VZXzcgfSwKKwl7IDB4MjgsIEtFWV84IH0sCisJeyAweDI5LCBLRVlfOSB9LAorCisJeyAweDc4LCBLRVlfVFVORVIgfSwJCS8qIFZpZGVvIFNvdXJjZSAgICAgICAgKi8KKwl7IDB4MmMsIEtFWV9FWElUIH0sCQkvKiBPcGVuL0Nsb3NlIHNvZnR3YXJlICovCisJeyAweDJhLCBLRVlfU0VMRUNUIH0sCQkvKiAyIERpZ2l0IFNlbGVjdCAgICAgICovCisJeyAweDY5LCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAgICAgICAgICAgICAgKi8KKworCXsgMHgzMiwgS0VZX0JSSUdIVE5FU1NVUCB9LAkvKiBCcmlnaHRuZXNzIGluY3JlYXNlICovCisJeyAweDMzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwJLyogQnJpZ2h0bmVzcyBkZWNyZWFzZSAqLworCXsgMHg2YiwgS0VZX0tQUExVUyB9LAkJLyogKG5vdCBuYW1lZCA+Pj4+PikgICAqLworCXsgMHg2YywgS0VZX0tQTUlOVVMgfSwJCS8qIChub3QgbmFtZWQgPDw8PDwpICAgKi8KKworCXsgMHgyZCwgS0VZX01VVEUgfSwJCS8qIE11dGUgICAgICAgICAgICAgICAgKi8KKwl7IDB4MzAsIEtFWV9WT0xVTUVVUCB9LAkJLyogVm9sdW1lIHVwICAgICAgICAgICAqLworCXsgMHgzMSwgS0VZX1ZPTFVNRURPV04gfSwJLyogVm9sdW1lIGRvd24gICAgICAgICAqLworCXsgMHg2MCwgS0VZX0NIQU5ORUxVUCB9LAkvKiBDaGFubmVsIHVwICAgICAgICAgICovCisJeyAweDYxLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ2hhbm5lbCBkb3duICAgICAgICAqLworCisJeyAweDNmLCBLRVlfUkVDT1JEIH0sCQkvKiBSZWNvcmQgICAgICAgICAgICAgICovCisJeyAweDM3LCBLRVlfUExBWSB9LAkJLyogUGxheSAgICAgICAgICAgICAgICAqLworCXsgMHgzNiwgS0VZX1BBVVNFIH0sCQkvKiBQYXVzZSAgICAgICAgICAgICAgICovCisJeyAweDJiLCBLRVlfU1RPUCB9LAkJLyogU3RvcCAgICAgICAgICAgICAgICAqLworCXsgMHg2NywgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIEZvd2FyZCAgICAgICAgICAgICAgKi8KKwl7IDB4NjYsIEtFWV9SRVdJTkQgfSwJCS8qIFJld2luZCAgICAgICAgICAgICAgKi8KKwl7IDB4M2UsIEtFWV9TRUFSQ0ggfSwJCS8qIEF1dG8gU2NhbiAgICAgICAgICAgKi8KKwl7IDB4MmUsIEtFWV9DQU1FUkEgfSwJCS8qIENhcHR1cmUgVmlkZW8gICAgICAgKi8KKwl7IDB4NmQsIEtFWV9NRU5VIH0sCQkvKiBTaG93L0hpZGUgQ29udHJvbCAgICovCisJeyAweDJmLCBLRVlfWk9PTSB9LAkJLyogRnVsbCBTY3JlZW4gICAgICAgICAqLworCXsgMHgzNCwgS0VZX1JBRElPIH0sCQkvKiBGTSAgICAgICAgICAgICAgICAgICovCisJeyAweDY1LCBLRVlfUE9XRVIgfSwJCS8qIENvbXB1dGVyIHBvd2VyICAgICAgKi8KK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19ub3J3b29kX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfbm9yd29vZCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbm9yd29vZCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbm9yd29vZF90YWJsZSk7CisKKy8qIEZyb20gcmVhZGluZyB0aGUgZm9sbG93aW5nIHJlbW90ZXM6CisgKiBaZW5pdGggVW5pdmVyc2FsIDcgLyBUViBNb2RlIDgwNyAvIFZDUiBNb2RlIDgzNworICogSGF1cHBhdWdlIChmcm9tIE5PVkEtQ0ktcyBib3ggcHJvZHVjdCkKKyAqIFRoaXMgaXMgYSAibWlkZGxlIG9mIHRoZSByb2FkIiBhcHByb2FjaCwgZGlmZmVyZW5jZXMgYXJlIG5vdGVkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZFtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9FTlRFUiB9LAorCXsgMHgwYiwgS0VZX1JFRCB9LAorCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBSQURJTyBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MGQsIEtFWV9NVVRFIH0sCisJeyAweDBmLCBLRVlfQSB9LAkJLyogVFYgb24gSGF1cHBhdWdlICovCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE0LCBLRVlfQiB9LAorCXsgMHgxYywgS0VZX1VQIH0sCisJeyAweDFkLCBLRVlfRE9XTiB9LAorCXsgMHgxZSwgS0VZX09QVElPTiB9LAkJLyogUkVTRVJWRUQgb24gSGF1cHBhdWdlICovCisJeyAweDFmLCBLRVlfQlJFQUsgfSwKKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgyMiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBQcmV2IENoIG9uIFplbml0aCwgU09VUkNFIG9uIEhhdXBwYXVnZSAqLworCXsgMHgyNCwgS0VZX1JFU1RBUlQgfSwKKwl7IDB4MjUsIEtFWV9PSyB9LAorCXsgMHgyNiwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBNSU5JTUlaRSBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MjgsIEtFWV9FTlRFUiB9LAkJLyogVkNSIG1vZGUgb24gWmVuaXRoICovCisJeyAweDI5LCBLRVlfUEFVU0UgfSwKKwl7IDB4MmIsIEtFWV9SSUdIVCB9LAorCXsgMHgyYywgS0VZX0xFRlQgfSwKKwl7IDB4MmUsIEtFWV9NRU5VIH0sCQkvKiBGVUxMIFNDUkVFTiBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MzAsIEtFWV9TTE9XIH0sCisJeyAweDMxLCBLRVlfUFJFVklPVVMgfSwJCS8qIFZDUiBtb2RlIG9uIFplbml0aCAqLworCXsgMHgzMiwgS0VZX1JFV0lORCB9LAorCXsgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDM1LCBLRVlfUExBWSB9LAorCXsgMHgzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MzgsIEtFWV9UVU5FUiB9LAkJLyogVFYvVkNSIG9uIFplbml0aCAqLworCXsgMHgzYSwgS0VZX0MgfSwKKwl7IDB4M2MsIEtFWV9FWElUIH0sCisJeyAweDNkLCBLRVlfUE9XRVIyIH0sCisJeyAweDNlLCBLRVlfVFVORVIgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19idWRnZXRfY2lfb2xkX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYnVkZ2V0X2NpX29sZCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYnVkZ2V0X2NpX29sZCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYnVkZ2V0X2NpX29sZF90YWJsZSk7CisKKy8qCisgKiBNYXJjIEZhcmdhcyA8dGVsZW5pZWtvQHRlbGVuaWVrby5jb20+CisgKiB0aGlzIGlzIHRoZSByZW1vdGUgY29udHJvbCB0aGF0IGNvbWVzIHdpdGggdGhlIGFzdXMgcDcxMzEKKyAqIHdoaWNoIGhhcyBhIGxhYmVsIHNheWluZyBpcyAiTW9kZWwgUEMtMzkiCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXN1c19wYzM5W10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MTUsIEtFWV8wIH0sCisJeyAweDI5LCBLRVlfMSB9LAorCXsgMHgyZCwgS0VZXzIgfSwKKwl7IDB4MmIsIEtFWV8zIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgwZCwgS0VZXzUgfSwKKwl7IDB4MGIsIEtFWV82IH0sCisJeyAweDMxLCBLRVlfNyB9LAorCXsgMHgzNSwgS0VZXzggfSwKKwl7IDB4MzMsIEtFWV85IH0sCisKKwl7IDB4M2UsIEtFWV9SQURJTyB9LAkJLyogcmFkaW8gKi8KKwl7IDB4MDMsIEtFWV9NRU5VIH0sCQkvKiBkdmQvbWVudSAqLworCXsgMHgyYSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDE5LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgzNywgS0VZX1VQIH0sCisJeyAweDNiLCBLRVlfRE9XTiB9LAorCXsgMHgyNywgS0VZX0xFRlQgfSwKKwl7IDB4MmYsIEtFWV9SSUdIVCB9LAorCXsgMHgyNSwgS0VZX1ZJREVPIH0sCQkvKiB2aWRlbyAqLworCXsgMHgzOSwgS0VZX0FVRElPIH0sCQkvKiBtdXNpYyAqLworCisJeyAweDIxLCBLRVlfVFYgfSwJCS8qIHR2ICovCisJeyAweDFkLCBLRVlfRVhJVCB9LAkJLyogYmFjayAqLworCXsgMHgwYSwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSArICovCisJeyAweDFiLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLworCXsgMHgxYSwgS0VZX0VOVEVSIH0sCQkvKiBlbnRlciAqLworCisJeyAweDA2LCBLRVlfUEFVU0UgfSwJCS8qIHBsYXkvcGF1c2UgKi8KKwl7IDB4MWUsIEtFWV9QUkVWSU9VUyB9LAkJLyogcmV3ICovCisJeyAweDI2LCBLRVlfTkVYVCB9LAkJLyogZm9yd2FyZCAqLworCXsgMHgwZSwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KKwl7IDB4M2EsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCisJeyAweDM2LCBLRVlfU1RPUCB9LAorCXsgMHgyZSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDE2LCBLRVlfUE9XRVIgfSwJCS8qIHRoZSBidXR0b24gdGhhdCByZWFkcyAiY2xvc2UiICovCisKKwl7IDB4MTEsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgxMywgS0VZX01BQ1JPIH0sCQkvKiByZWNhbGwgKi8KKwl7IDB4MjMsIEtFWV9IT01FIH0sCQkvKiBob21lICovCisJeyAweDA1LCBLRVlfUFZSIH0sCQkvKiBwaWN0dXJlICovCisJeyAweDNkLCBLRVlfTVVURSB9LAkJLyogbXV0ZSAqLworCXsgMHgwMSwgS0VZX0RWRCB9LAkJLyogZHZkICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXN1c19wYzM5X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYXN1c19wYzM5LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hc3VzX3BjMzkpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2FzdXNfcGMzOV90YWJsZSk7CisKKworLyogRW5jb3JlIEVOTFRWLUZNICAtIGJsYWNrIHBsYXN0aWMsIHdoaXRlIGZyb250IGNvdmVyIHdpdGggd2hpdGUgZ2xvd2luZyBidXR0b25zCisgICAgSnVhbiBQYWJsbyBTb3JtYW5pIDxzb3JtYW5AZ21haWwuY29tPiAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZbXSA9IHsKKworCS8qIFBvd2VyIGJ1dHRvbiBkb2VzIG5vdGhpbmcsIG5laXRoZXIgaW4gV2luZG93cyBhcHAsCisJIGFsdGhvdWdoIGl0IHNlbmRzIGRhdGEgKHVzZWQgZm9yIEJJT1Mgd2FrZXVwPykgKi8KKwl7IDB4MGQsIEtFWV9NVVRFIH0sCisKKwl7IDB4MWUsIEtFWV9UViB9LAorCXsgMHgwMCwgS0VZX1ZJREVPIH0sCisJeyAweDAxLCBLRVlfQVVESU8gfSwJCS8qIG11c2ljICovCisJeyAweDAyLCBLRVlfTUhQIH0sCQkvKiBwaWN0dXJlICovCisKKwl7IDB4MWYsIEtFWV8xIH0sCisJeyAweDAzLCBLRVlfMiB9LAorCXsgMHgwNCwgS0VZXzMgfSwKKwl7IDB4MDUsIEtFWV80IH0sCisJeyAweDFjLCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgxZCwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV8wIH0sCisKKwl7IDB4MDksIEtFWV9MSVNUIH0sCQkvKiAtLy0tICovCisJeyAweDBiLCBLRVlfTEFTVCB9LAkJLyogcmVjYWxsICovCisKKwl7IDB4MTQsIEtFWV9IT01FIH0sCQkvKiB3aW4gc3RhcnQgbWVudSAqLworCXsgMHgxNSwgS0VZX0VYSVQgfSwJCS8qIGV4aXQgKi8KKwl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwJLyogVVAgKi8KKwl7IDB4MTIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBET1dOICovCisJeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFJJR0hUICovCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBMRUZUICovCisKKwl7IDB4MTgsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KKworCXsgMHgwZSwgS0VZX0VTQyB9LAorCXsgMHgxMywgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBkZXNrdG9wICovCisJeyAweDExLCBLRVlfVEFCIH0sCisJeyAweDE5LCBLRVlfU1dJVENIVklERU9NT0RFIH0sCS8qIHN3aXRjaCAqLworCisJeyAweDFhLCBLRVlfTUVOVSB9LAorCXsgMHgxYiwgS0VZX1pPT00gfSwJCS8qIGZ1bGxzY3JlZW4gKi8KKwl7IDB4NDQsIEtFWV9USU1FIH0sCQkvKiB0aW1lIHNoaWZ0ICovCisJeyAweDQwLCBLRVlfTU9ERSB9LAkJLyogc291cmNlICovCisKKwl7IDB4NWEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NDIsIEtFWV9QTEFZIH0sCQkvKiBwbGF5L3BhdXNlICovCisJeyAweDQ1LCBLRVlfU1RPUCB9LAorCXsgMHg0MywgS0VZX0NBTUVSQSB9LAkJLyogY2FtZXJhIGljb24gKi8KKworCXsgMHg0OCwgS0VZX1JFV0lORCB9LAorCXsgMHg0YSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDQ5LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NGIsIEtFWV9ORVhUIH0sCisKKwl7IDB4NGMsIEtFWV9GQVZPUklURVMgfSwJLyogdHYgd2FsbCAqLworCXsgMHg0ZCwgS0VZX1NPVU5EIH0sCQkvKiBEVkQgc291bmQgKi8KKwl7IDB4NGUsIEtFWV9MQU5HVUFHRSB9LAkJLyogRFZEIGxhbmcgKi8KKwl7IDB4NGYsIEtFWV9URVhUIH0sCQkvKiBEVkQgdGV4dCAqLworCisJeyAweDUwLCBLRVlfU0xFRVAgfSwJCS8qIHNodXRkb3duICovCisJeyAweDUxLCBLRVlfTU9ERSB9LAkJLyogc3RlcmVvID4gbWFpbiAqLworCXsgMHg1MiwgS0VZX1NFTEVDVCB9LAkJLyogc3RlcmVvID4gc2FwICovCisJeyAweDUzLCBLRVlfUFJPRzEgfSwJCS8qIHRlbGV0ZXh0ICovCisKKworCXsgMHg1OSwgS0VZX1JFRCB9LAkJLyogQVAxICovCisJeyAweDQxLCBLRVlfR1JFRU4gfSwJCS8qIEFQMiAqLworCXsgMHg0NywgS0VZX1lFTExPVyB9LAkJLyogQVAzICovCisJeyAweDU3LCBLRVlfQkxVRSB9LAkJLyogQVA0ICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZW5jb3JlX2VubHR2X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZW5jb3JlX2VubHR2LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbmNvcmVfZW5sdHYpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2VuY29yZV9lbmx0dl90YWJsZSk7CisKKy8qIEVuY29yZSBFTkxUVjItRk0gIC0gc2lsdmVyIHBsYXN0aWMgLSAiV2FuZCBNZWRpYSIgd3JpdHRlbiBhdCB0aGUgYm90dG9uCisgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2VuY29yZV9lbmx0djJbXSA9IHsKKwl7IDB4NGMsIEtFWV9QT1dFUjIgfSwKKwl7IDB4NGEsIEtFWV9UVU5FUiB9LAorCXsgMHg0MCwgS0VZXzEgfSwKKwl7IDB4NjAsIEtFWV8yIH0sCisJeyAweDUwLCBLRVlfMyB9LAorCXsgMHg3MCwgS0VZXzQgfSwKKwl7IDB4NDgsIEtFWV81IH0sCisJeyAweDY4LCBLRVlfNiB9LAorCXsgMHg1OCwgS0VZXzcgfSwKKwl7IDB4NzgsIEtFWV84IH0sCisJeyAweDQ0LCBLRVlfOSB9LAorCXsgMHg1NCwgS0VZXzAgfSwKKworCXsgMHg2NCwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KKwl7IDB4NGUsIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICovCisKKwl7IDB4NmMsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogVmlkZW8gU291cmNlICovCisJeyAweDVlLCBLRVlfTUVOVSB9LAorCXsgMHg1NiwgS0VZX1NDUkVFTiB9LAorCXsgMHg3YSwgS0VZX1NFVFVQIH0sCisKKwl7IDB4NDYsIEtFWV9NVVRFIH0sCisJeyAweDVjLCBLRVlfTU9ERSB9LAkJLyogU3RlcmVvICovCisJeyAweDc0LCBLRVlfSU5GTyB9LAorCXsgMHg3YywgS0VZX0NMRUFSIH0sCisKKwl7IDB4NTUsIEtFWV9VUCB9LAorCXsgMHg0OSwgS0VZX0RPV04gfSwKKwl7IDB4N2UsIEtFWV9MRUZUIH0sCisJeyAweDU5LCBLRVlfUklHSFQgfSwKKwl7IDB4NmEsIEtFWV9FTlRFUiB9LAorCisJeyAweDQyLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4NjIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDUyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDcyLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg0MSwgS0VZX1JFQ09SRCB9LAorCXsgMHg1MSwgS0VZX0NBTUVSQSB9LAkJLyogU25hcHNob3QgKi8KKwl7IDB4NzUsIEtFWV9USU1FIH0sCQkvKiBUaW1lc2hpZnQgKi8KKwl7IDB4NzEsIEtFWV9UVjIgfSwJCS8qIFBJUCAqLworCisJeyAweDQ1LCBLRVlfUkVXSU5EIH0sCisJeyAweDZmLCBLRVlfUEFVU0UgfSwKKwl7IDB4N2QsIEtFWV9GT1JXQVJEIH0sCisJeyAweDc5LCBLRVlfU1RPUCB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0djJfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbmNvcmVfZW5sdHYyKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHYyX3RhYmxlKTsKKworLyogZm9yIHRoZSBUZWNobm90cmVuZCAxNTAwIGJ1bmRsZWQgcmVtb3RlcyAoZ3JleSBhbmQgYmxhY2spOiAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc190dF8xNTAwW10gPSB7CisJeyAweDAxLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDIsIEtFWV9TSFVGRkxFIH0sCQkvKiA/IGRvdWJsZS1hcnJvdyBrZXkgKi8KKwl7IDB4MDMsIEtFWV8xIH0sCisJeyAweDA0LCBLRVlfMiB9LAorCXsgMHgwNSwgS0VZXzMgfSwKKwl7IDB4MDYsIEtFWV80IH0sCisJeyAweDA3LCBLRVlfNSB9LAorCXsgMHgwOCwgS0VZXzYgfSwKKwl7IDB4MDksIEtFWV83IH0sCisJeyAweDBhLCBLRVlfOCB9LAorCXsgMHgwYiwgS0VZXzkgfSwKKwl7IDB4MGMsIEtFWV8wIH0sCisJeyAweDBkLCBLRVlfVVAgfSwKKwl7IDB4MGUsIEtFWV9MRUZUIH0sCisJeyAweDBmLCBLRVlfT0sgfSwKKwl7IDB4MTAsIEtFWV9SSUdIVCB9LAorCXsgMHgxMSwgS0VZX0RPV04gfSwKKwl7IDB4MTIsIEtFWV9JTkZPIH0sCisJeyAweDEzLCBLRVlfRVhJVCB9LAorCXsgMHgxNCwgS0VZX1JFRCB9LAorCXsgMHgxNSwgS0VZX0dSRUVOIH0sCisJeyAweDE2LCBLRVlfWUVMTE9XIH0sCisJeyAweDE3LCBLRVlfQkxVRSB9LAorCXsgMHgxOCwgS0VZX01VVEUgfSwKKwl7IDB4MTksIEtFWV9URVhUIH0sCisJeyAweDFhLCBLRVlfTU9ERSB9LAkJLyogPyBUVi9SYWRpbyAqLworCXsgMHgyMSwgS0VZX09QVElPTiB9LAorCXsgMHgyMiwgS0VZX0VQRyB9LAorCXsgMHgyMywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgyNCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDI1LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MjYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDI3LCBLRVlfU0VUVVAgfSwKKwl7IDB4M2EsIEtFWV9SRUNPUkQgfSwJCS8qIHRoZXNlIGtleXMgYXJlIG9ubHkgaW4gdGhlIGJsYWNrIHJlbW90ZSAqLworCXsgMHgzYiwgS0VZX1BMQVkgfSwKKwl7IDB4M2MsIEtFWV9TVE9QIH0sCisJeyAweDNkLCBLRVlfUkVXSU5EIH0sCisJeyAweDNlLCBLRVlfUEFVU0UgfSwKKwl7IDB4M2YsIEtFWV9GT1JXQVJEIH0sCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfdHRfMTUwMF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3R0XzE1MDAsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3R0XzE1MDApLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3R0XzE1MDBfdGFibGUpOworCisvKiBEVmlDTyBGVVNJT04gSERUViBNQ0UgcmVtb3RlICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlW10gPSB7CisKKwl7IDB4MGIsIEtFWV8xIH0sCisJeyAweDE3LCBLRVlfMiB9LAorCXsgMHgxYiwgS0VZXzMgfSwKKwl7IDB4MDcsIEtFWV80IH0sCisJeyAweDUwLCBLRVlfNSB9LAorCXsgMHg1NCwgS0VZXzYgfSwKKwl7IDB4NDgsIEtFWV83IH0sCisJeyAweDRjLCBLRVlfOCB9LAorCXsgMHg1OCwgS0VZXzkgfSwKKwl7IDB4MDMsIEtFWV8wIH0sCisKKwl7IDB4NWUsIEtFWV9PSyB9LAorCXsgMHg1MSwgS0VZX1VQIH0sCisJeyAweDUzLCBLRVlfRE9XTiB9LAorCXsgMHg1YiwgS0VZX0xFRlQgfSwKKwl7IDB4NWYsIEtFWV9SSUdIVCB9LAorCisJeyAweDAyLCBLRVlfVFYgfSwJCS8qIExhYmVsZWQgRFRWIG9uIHJlbW90ZSAqLworCXsgMHgwZSwgS0VZX01QMyB9LAorCXsgMHgxYSwgS0VZX0RWRCB9LAorCXsgMHgxZSwgS0VZX0ZBVk9SSVRFUyB9LAkvKiBMYWJlbGVkIENQRiBvbiByZW1vdGUgKi8KKwl7IDB4MTYsIEtFWV9TRVRVUCB9LAorCXsgMHg0NiwgS0VZX1BPV0VSMiB9LAkJLyogVFYgT24vT2ZmIGJ1dHRvbiBvbiByZW1vdGUgKi8KKwl7IDB4MGEsIEtFWV9FUEcgfSwJCS8qIExhYmVsZWQgR3VpZGUgb24gcmVtb3RlICovCisKKwl7IDB4NDksIEtFWV9CQUNLIH0sCisJeyAweDU5LCBLRVlfSU5GTyB9LAkJLyogTGFiZWxlZCBNT1JFIG9uIHJlbW90ZSAqLworCXsgMHg0ZCwgS0VZX01FTlUgfSwJCS8qIExhYmVsZWQgRFZETUVOVSBvbiByZW1vdGUgKi8KKwl7IDB4NTUsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogTGFiZWxlZCBBTFQtVEFCIG9uIHJlbW90ZSAqLworCisJeyAweDBmLCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIExhYmVsZWQgfDw8IFJFUExBWSBvbiByZW1vdGUgKi8KKwl7IDB4MTIsIEtFWV9ORVhUU09ORyB9LAkJLyogTGFiZWxlZCA+PnwgU0tJUCBvbiByZW1vdGUgKi8KKwl7IDB4NDIsIEtFWV9FTlRFUiB9LAkJLyogTGFiZWxlZCBTVEFSVCB3aXRoIGEgZ3JlZW4KKwkJCQkJICAgTVMgd2luZG93cyBsb2dvIG9uIHJlbW90ZSAqLworCisJeyAweDE1LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDExLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA5LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg1MiwgS0VZX0NBTUVSQSB9LAorCXsgMHg1YSwgS0VZX1RVTkVSIH0sCisJeyAweDE5LCBLRVlfT1BFTiB9LAorCisJeyAweDEzLCBLRVlfTU9ERSB9LAkJLyogNDozIDE2Ojkgc2VsZWN0ICovCisJeyAweDFmLCBLRVlfWk9PTSB9LAorCisJeyAweDQzLCBLRVlfUkVXSU5EIH0sCisJeyAweDQ3LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDRmLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4NTcsIEtFWV9NVVRFIH0sCisJeyAweDBkLCBLRVlfU1RPUCB9LAorCXsgMHgwMSwgS0VZX1JFQ09SRCB9LAorCXsgMHg0ZSwgS0VZX1BPV0VSIH0sCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZnVzaW9uaGR0dl9tY2VfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19mdXNpb25oZHR2X21jZSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZnVzaW9uaGR0dl9tY2UpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlX3RhYmxlKTsKKworLyogUGlubmFjbGUgUENUViBIRCA4MDBpIG1pbmkgcmVtb3RlICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGRbXSA9IHsKKworCXsgMHgwZiwgS0VZXzEgfSwKKwl7IDB4MTUsIEtFWV8yIH0sCisJeyAweDEwLCBLRVlfMyB9LAorCXsgMHgxOCwgS0VZXzQgfSwKKwl7IDB4MWIsIEtFWV81IH0sCisJeyAweDFlLCBLRVlfNiB9LAorCXsgMHgxMSwgS0VZXzcgfSwKKwl7IDB4MjEsIEtFWV84IH0sCisJeyAweDEyLCBLRVlfOSB9LAorCXsgMHgyNywgS0VZXzAgfSwKKworCXsgMHgyNCwgS0VZX1pPT00gfSwKKwl7IDB4MmEsIEtFWV9TVUJUSVRMRSB9LAorCisJeyAweDAwLCBLRVlfTVVURSB9LAorCXsgMHgwMSwgS0VZX0VOVEVSIH0sCS8qIFBpbm5hY2xlIExvZ28gKi8KKwl7IDB4MzksIEtFWV9QT1dFUiB9LAorCisJeyAweDAzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBjLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHgyZCwgS0VZX1JFV0lORCB9LAorCXsgMHgzMCwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgzMywgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDNjLCBLRVlfU1RPUCB9LAorCXsgMHgzNiwgS0VZX1JFQ09SRCB9LAorCXsgMHgzZiwgS0VZX0VQRyB9LAkvKiBMYWJlbGVkICI/IiAqLworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGRfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkX3RhYmxlKTsKKworLyoKKyAqIElnb3IgS3V6bmV0c292IDxpZ2s3MkB5YS5ydT4KKyAqIEFuZHJleSBKLiBNZWxuaWtvdiA8dGVtbm90YUBrbXYucnU+CisgKgorICogS2V5dGFibGUgaXMgdXNlZCBieSBCZWhvbGRUViA2MHggc2VyaWVzLCBNNiBzZXJpZXMgYXQKKyAqIGxlYXN0LCBhbmQgcHJvYmFibHkgb3RoZXIgY2FyZHMgdG9vLgorICogVGhlICJhc2NpaS1hcnQgcGljdHVyZSIgYmVsb3cgKGluIGNvbW1lbnRzLCBmaXJzdCByb3cKKyAqIGlzIHRoZSBrZXljb2RlIGluIGhleCwgYW5kIHN1YnNlcXVlbnQgcm93KHMpIHNob3dzCisgKiB0aGUgYnV0dG9uIGxhYmVscyAoc2V2ZXJhbCB2YXJpYW50cyB3aGVuIGFwcHJvcHJpYXRlKQorICogaGVscHMgdG8gZGVzY2lkZSB3aGljaCBrZXljb2RlcyB0byBhc3NpZ24gdG8gdGhlIGJ1dHRvbnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYmVob2xkW10gPSB7CisKKwkvKiAgMHgxYyAgICAgICAgICAgIDB4MTIgICoKKwkgKiAgVFYvRk0gICAgICAgICAgUE9XRVIgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDFjLCBLRVlfVFVORVIgfSwJLyogWFhYIEtFWV9UViAvIEtFWV9SQURJTyAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisKKwkvKiAgMHgwMSAgICAweDAyICAgIDB4MDMgICoKKwkgKiAgIDEgICAgICAgMiAgICAgICAzICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwNCAgICAweDA1ICAgIDB4MDYgICoKKwkgKiAgIDQgICAgICAgNSAgICAgICA2ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwNyAgICAweDA4ICAgIDB4MDkgICoKKwkgKiAgIDcgICAgICAgOCAgICAgICA5ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwkvKiAgMHgwYSAgICAweDAwICAgIDB4MTcgICoKKwkgKiBSRUNBTEwgICAgMCAgICAgIE1PREUgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDBhLCBLRVlfQUdBSU4gfSwKKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDE3LCBLRVlfTU9ERSB9LAorCisJLyogIDB4MTQgICAgICAgICAgMHgxMCAgICAqCisJICogQVNQRUNUICAgICAgRlVMTFNDUkVFTiAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgxNCwgS0VZX1NDUkVFTiB9LAorCXsgMHgxMCwgS0VZX1pPT00gfSwKKworCS8qICAgICAgICAgIDB4MGIgICAgICAgICAgKgorCSAqICAgICAgICAgICBVcCAgICAgICAgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAweDE4ICAgIDB4MTYgICAgMHgwYyAgKgorCSAqICBMZWZ0ICAgICBPayAgICAgUmlnaHQgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAgICAgICAgMHgwMTUgICAgICAgICAgKgorCSAqICAgICAgICAgRG93biAgICAgICAgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTgsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE2LCBLRVlfT0sgfSwJCS8qIFhYWCBLRVlfRU5URVIgKi8KKwl7IDB4MGMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNSwgS0VZX0NIQU5ORUxET1dOIH0sCisKKwkvKiAgMHgxMSAgICAgICAgICAgIDB4MGQgICoKKwkgKiAgTVVURSAgICAgICAgICAgIElORk8gICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDExLCBLRVlfTVVURSB9LAorCXsgMHgwZCwgS0VZX0lORk8gfSwKKworCS8qICAweDBmICAgIDB4MWIgICAgMHgxYSAgKgorCSAqIFJFQ09SRCBQTEFZL1BBVVNFIFNUT1AgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAweDBlICAgIDB4MWYgICAgMHgxZSAgKgorCSAqVEVMRVRFWFQgIEFVRElPICBTT1VSQ0UgKgorCSAqICAgICAgICAgICBSRUQgICBZRUxMT1cgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MGYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWIsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDBlLCBLRVlfVEVYVCB9LAorCXsgMHgxZiwgS0VZX1JFRCB9LAkvKlhYWCBLRVlfQVVESU8JKi8KKwl7IDB4MWUsIEtFWV9ZRUxMT1cgfSwJLypYWFggS0VZX1NPVVJDRQkqLworCisJLyogIDB4MWQgICAweDEzICAgICAweDE5ICAqCisJICogU0xFRVAgIFBSRVZJRVcgICBEVkIgICAqCisJICogICAgICAgICBHUkVFTiAgICBCTFVFICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgxZCwgS0VZX1NMRUVQIH0sCisJeyAweDEzLCBLRVlfR1JFRU4gfSwKKwl7IDB4MTksIEtFWV9CTFVFIH0sCS8qIFhYWCBLRVlfU0FUCSovCisKKwkvKiAgMHg1OCAgICAgICAgICAgMHg1YyAgICoKKwkgKiBGUkVFWkUgICAgICAgIFNOQVBTSE9UICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDU4LCBLRVlfU0xPVyB9LAorCXsgMHg1YywgS0VZX0NBTUVSQSB9LAorCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYmVob2xkX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYmVob2xkLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19iZWhvbGQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2JlaG9sZF90YWJsZSk7CisKKy8qIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOAorICogRG1pdHJ5IEJlbGltb3YgZC5iZWxpbW92QGdvb2dsZS5jb20KKyAqIEtleXRhYmxlIGlzIHVzZWQgYnkgQmVob2xkVFYgQ29sdW1idXMKKyAqIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93CisgKiBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cworICogdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKKyAqIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2JlaG9sZF9jb2x1bWJ1c1tdID0geworCisJLyogIDB4MTMgICAweDExICAgMHgxQyAgIDB4MTIgICoKKwkgKiAgTXV0ZSAgU291cmNlICBUVi9GTSAgUG93ZXIgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJeyAweDEzLCBLRVlfTVVURSB9LAorCXsgMHgxMSwgS0VZX1BST1BTIH0sCisJeyAweDFDLCBLRVlfVFVORVIgfSwJLyogS0VZX1RWL0tFWV9SQURJTwkqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisKKwkvKiAgMHgwMSAgICAweDAyICAgIDB4MDMgIDB4MEQgICAgKgorCSAqICAgMSAgICAgICAyICAgICAgIDMgICBTdGVyZW8gICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAJICAqCisJICogIDB4MDQgICAgMHgwNSAgICAweDA2ICAweDE5ICAgICoKKwkgKiAgIDQgICAgICAgNSAgICAgICA2ICAgU25hcHNob3QgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgCSAgKgorCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgMHgxMCAgICAqCisJICogICA3ICAgICAgIDggICAgICAgOSAgICBab29tIAkgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MEQsIEtFWV9TRVRVUCB9LAkgIC8qIFNldHVwIGtleSAqLworCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAkvKiBTbmFwc2hvdCBrZXkgKi8KKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MTAsIEtFWV9aT09NIH0sCisKKwkvKiAgMHgwQSAgICAweDAwICAgIDB4MEIgICAgICAgMHgwQyAgICoKKwkgKiBSRUNBTEwgICAgMCAgICBDaGFubmVsVXAgIFZvbHVtZVVwICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDBBLCBLRVlfQUdBSU4gfSwKKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDBCLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBDLCBLRVlfVk9MVU1FVVAgfSwKKworCS8qICAgMHgxQiAgICAgIDB4MUQgICAgICAweDE1ICAgICAgICAweDE4ICAgICAqCisJICogVGltZXNoaWZ0ICBSZWNvcmQgIENoYW5uZWxEb3duICBWb2x1bWVEb3duICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCXsgMHgxQiwgS0VZX1RJTUUgfSwKKwl7IDB4MUQsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxOCwgS0VZX1ZPTFVNRURPV04gfSwKKworCS8qICAgMHgwRSAgIDB4MUUgICAgIDB4MEYgICAgIDB4MUEgICoKKwkgKiAgIFN0b3AgICBQYXVzZSAgUHJldmlvdXNlICBOZXh0ICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCXsgMHgwRSwgS0VZX1NUT1AgfSwKKwl7IDB4MUUsIEtFWV9QQVVTRSB9LAorCXsgMHgwRiwgS0VZX1BSRVZJT1VTIH0sCisJeyAweDFBLCBLRVlfTkVYVCB9LAorCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19iZWhvbGRfY29sdW1idXMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2JlaG9sZF9jb2x1bWJ1c190YWJsZSk7CisKKy8qCisgKiBSZW1vdGUgY29udHJvbCBmb3IgdGhlIEdlbml1cyBUVkdPIEExMU1DRQorICogQWRyaWFuIFBhcmRpbmkgPHBhcmRvLmJzc29AZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZVtdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDQ4LCBLRVlfMCB9LAorCXsgMHgwOSwgS0VZXzEgfSwKKwl7IDB4MWQsIEtFWV8yIH0sCisJeyAweDFmLCBLRVlfMyB9LAorCXsgMHgxOSwgS0VZXzQgfSwKKwl7IDB4MWIsIEtFWV81IH0sCisJeyAweDExLCBLRVlfNiB9LAorCXsgMHgxNywgS0VZXzcgfSwKKwl7IDB4MTIsIEtFWV84IH0sCisJeyAweDE2LCBLRVlfOSB9LAorCisJeyAweDU0LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KKwl7IDB4MDYsIEtFWV9NVVRFIH0sCQkvKiBtdXRlICovCisJeyAweDEwLCBLRVlfUE9XRVIgfSwKKwl7IDB4NDAsIEtFWV9MQVNUIH0sCQkvKiByZWNhbGwgKi8KKwl7IDB4NGMsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCXsgMHgwMCwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KKwl7IDB4MGQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4NGQsIEtFWV9PSyB9LAkJLyogYWxzbyBsYWJlbGVkIGFzIFBhdXNlICovCisJeyAweDFjLCBLRVlfWk9PTSB9LAkJLyogZnVsbCBzY3JlZW4gYW5kIFN0b3AqLworCXsgMHgwMiwgS0VZX01PREUgfSwJCS8qIEFWIFNvdXJjZSBvciBSZXdpbmQqLworCXsgMHgwNCwgS0VZX0xJU1QgfSwJCS8qIC0vLS0gKi8KKwkvKiBzbWFsbCBhcnJvd3MgYWJvdmUgbnVtYmVycyAqLworCXsgMHgxYSwgS0VZX05FWFQgfSwJCS8qIGFsc28gRmFzdCBGb3J3YXJkICovCisJeyAweDBlLCBLRVlfUFJFVklPVVMgfSwJCS8qIGFsc28gUmV3aW5kICovCisJLyogdGhlc2UgYXJlIGluIGEgcmF0aGVyIG5vbiBzdGFuZGFyZCBsYXlvdXQgYW5kIGhhdmUKKwlhbiBhbHRlcm5hdGUgbmFtZSB3cml0dGVuICovCisJeyAweDFlLCBLRVlfVVAgfSwJCS8qIFZpZGVvIFNldHRpbmcgKi8KKwl7IDB4MGEsIEtFWV9ET1dOIH0sCQkvKiBWaWRlbyBEZWZhdWx0ICovCisJeyAweDA1LCBLRVlfQ0FNRVJBIH0sCQkvKiBTbmFwc2hvdCAqLworCXsgMHgwYywgS0VZX1JJR0hUIH0sCQkvKiBIaWRlIFBhbmVsICovCisJLyogRm91ciBidXR0b25zIHdpdGhvdXQgbGFiZWwgKi8KKwl7IDB4NDksIEtFWV9SRUQgfSwKKwl7IDB4MGIsIEtFWV9HUkVFTiB9LAorCXsgMHgxMywgS0VZX1lFTExPVyB9LAorCXsgMHg1MCwgS0VZX0JMVUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2VfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2UsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlX3RhYmxlKTsKKworLyoKKyAqIFJlbW90ZSBjb250cm9sIGZvciBQb3dlcmNvbG9yIFJlYWwgQW5nZWwgMzMwCisgKiBEYW5pZWwgRnJhZ2EgPGZyYWdhYnJAZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbFtdID0geworCXsgMHgzOCwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggaW5wdXRzICovCisJeyAweDBjLCBLRVlfTUVESUEgfSwJCS8qIFR1cm4gT04vT0ZGIEFwcCAqLworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9ESUdJVFMgfSwJCS8qIHNpbmdsZSwgZG91YmxlLCB0cmlwcGxlIGRpZ2l0ICovCisJeyAweDI5LCBLRVlfUFJFVklPVVMgfSwJCS8qIHByZXZpb3VzIGNoYW5uZWwgKi8KKwl7IDB4MTIsIEtFWV9CUklHSFRORVNTVVAgfSwKKwl7IDB4MTMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHgyYiwgS0VZX01PREUgfSwJCS8qIHN0ZXJlby9tb25vICovCisJeyAweDJjLCBLRVlfVEVYVCB9LAkJLyogdGVsZXRleHQgKi8KKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCB1cCAqLworCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgZG93biAqLworCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2x1bWUgdXAgKi8KKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbHVtZSBkb3duICovCisJeyAweDBkLCBLRVlfTVVURSB9LAorCXsgMHgxZiwgS0VZX1JFQ09SRCB9LAorCXsgMHgxNywgS0VZX1BMQVkgfSwKKwl7IDB4MTYsIEtFWV9QQVVTRSB9LAorCXsgMHgwYiwgS0VZX1NUT1AgfSwKKwl7IDB4MjcsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyNiwgS0VZX1JFV0lORCB9LAorCXsgMHgxZSwgS0VZX1NFQVJDSCB9LAkJLyogYXV0b3NjYW4gKi8KKwl7IDB4MGUsIEtFWV9DQU1FUkEgfSwJCS8qIHNuYXBzaG90ICovCisJeyAweDJkLCBLRVlfU0VUVVAgfSwKKwl7IDB4MGYsIEtFWV9TQ1JFRU4gfSwJCS8qIGZ1bGwgc2NyZWVuICovCisJeyAweDE0LCBLRVlfUkFESU8gfSwJCS8qIEZNIHJhZGlvICovCisJeyAweDI1LCBLRVlfUE9XRVIgfSwJCS8qIHBvd2VyICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWwpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbF90YWJsZSk7CisKKy8qIEt3b3JsZCBQbHVzIFRWIEFuYWxvZyBMaXRlIFBDSSBJUgorICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nW10gPSB7CisJeyAweDBjLCBLRVlfUFJPRzEgfSwJCS8qIEt3b3JsZCBrZXkgKi8KKwl7IDB4MTYsIEtFWV9DTE9TRUNEIH0sCQkvKiAtPiApICovCisJeyAweDFkLCBLRVlfUE9XRVIyIH0sCisKKwl7IDB4MDAsIEtFWV8xIH0sCisJeyAweDAxLCBLRVlfMiB9LAorCXsgMHgwMiwgS0VZXzMgfSwJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgbGVmdCAqLworCXsgMHgwMywgS0VZXzQgfSwJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgcmlnaHQgKi8KKwl7IDB4MDQsIEtFWV81IH0sCisJeyAweDA1LCBLRVlfNiB9LAorCXsgMHgwNiwgS0VZXzcgfSwKKwl7IDB4MDcsIEtFWV84IH0sCisJeyAweDA4LCBLRVlfOSB9LAorCXsgMHgwYSwgS0VZXzAgfSwKKworCXsgMHgwOSwgS0VZX0FHQUlOIH0sCisJeyAweDE0LCBLRVlfTVVURSB9LAorCisJeyAweDIwLCBLRVlfVVAgfSwKKwl7IDB4MjEsIEtFWV9ET1dOIH0sCisJeyAweDBiLCBLRVlfRU5URVIgfSwKKworCXsgMHgxMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOIH0sCisKKwkvKiBDb3VsZG4ndCBtYXAga2V5IGxlZnQva2V5IHJpZ2h0IHNpbmNlIHRob3NlCisJICAgY29uZmxpY3Qgd2l0aCAnMycgYW5kICc0JyBzY2FuY29kZXMKKwkgICBJIGR1bm5vIHdoYXQgdGhlIG9yaWdpbmFsIGRyaXZlciBkb2VzCisJICovCisKKwl7IDB4MTMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMiwgS0VZX1ZPTFVNRURPV04gfSwKKworCS8qIFRoZSBsb3dlciBwYXJ0IG9mIHRoZSBJUgorCSAgIFRoZXJlIGFyZSBzZXZlcmFsIGR1cGxpY2F0ZWQga2V5Y29kZXMgdGhlcmUuCisJICAgTW9zdCBvZiB0aGVtIGNvbmZsaWN0IHdpdGggZGlnaXRzLgorCSAgIEFkZCBtYXBwaW5ncyBqdXN0IHRvIHRoZSB1bnVzZWQgc2NhbmNvZGVzLgorCSAgIFNvbWVob3csIHRoZSBvcmlnaW5hbCBkcml2ZXIgaGFzIGEgd2F5IHRvIGtub3csCisJICAgYnV0IHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIG9uIHNvbWUgR1BJTy4KKwkgICBBbHNvLCBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgdGltZSBiZXR3ZWVuIGtleXVwCisJICAgYW5kIGtleWRvd24uCisJICovCisJeyAweDE5LCBLRVlfVElNRX0sCQkvKiBUaW1lc2hpZnQgKi8KKwl7IDB4MWEsIEtFWV9TVE9QfSwKKwl7IDB4MWIsIEtFWV9SRUNPUkR9LAorCisJeyAweDIyLCBLRVlfVEVYVH0sCisKKwl7IDB4MTUsIEtFWV9BVURJT30sCQkvKiAoKCopKSAqLworCXsgMHgwZiwgS0VZX1pPT019LAorCXsgMHgxYywgS0VZX0NBTUVSQX0sCQkvKiBzbmFwc2hvdCAqLworCisJeyAweDE4LCBLRVlfUkVEfSwJCS8qIEIgKi8KKwl7IDB4MjMsIEtFWV9HUkVFTn0sCQkvKiBDICovCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dfdGFibGUpOworCisvKiBLYWlvbXkgVFZuUEMgVTIKKyAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2thaW9teVtdID0geworCXsgMHg0MywgS0VZX1BPV0VSMn0sCisJeyAweDAxLCBLRVlfTElTVH0sCisJeyAweDBiLCBLRVlfWk9PTX0sCisJeyAweDAzLCBLRVlfUE9XRVJ9LAorCisJeyAweDA0LCBLRVlfMX0sCisJeyAweDA4LCBLRVlfMn0sCisJeyAweDAyLCBLRVlfM30sCisKKwl7IDB4MGYsIEtFWV80fSwKKwl7IDB4MDUsIEtFWV81fSwKKwl7IDB4MDYsIEtFWV82fSwKKworCXsgMHgwYywgS0VZXzd9LAorCXsgMHgwZCwgS0VZXzh9LAorCXsgMHgwYSwgS0VZXzl9LAorCisJeyAweDExLCBLRVlfMH0sCisKKwl7IDB4MDksIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgwNywgS0VZX0NIQU5ORUxET1dOfSwKKworCXsgMHgwZSwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTMsIEtFWV9WT0xVTUVET1dOfSwKKworCXsgMHgxMCwgS0VZX0hPTUV9LAorCXsgMHgxMiwgS0VZX0VOVEVSfSwKKworCXsgMHgxNCwgS0VZX1JFQ09SRH0sCisJeyAweDE1LCBLRVlfU1RPUH0sCisJeyAweDE2LCBLRVlfUExBWX0sCisJeyAweDE3LCBLRVlfTVVURX0sCisKKwl7IDB4MTgsIEtFWV9VUH0sCisJeyAweDE5LCBLRVlfRE9XTn0sCisJeyAweDFhLCBLRVlfTEVGVH0sCisJeyAweDFiLCBLRVlfUklHSFR9LAorCisJeyAweDFjLCBLRVlfUkVEfSwKKwl7IDB4MWQsIEtFWV9HUkVFTn0sCisJeyAweDFlLCBLRVlfWUVMTE9XfSwKKwl7IDB4MWYsIEtFWV9CTFVFfSwKK307CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfa2Fpb215X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfa2Fpb215LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19rYWlvbXkpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2thaW9teV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXZlcm1lZGlhX2ExNmRbXSA9IHsKKwl7IDB4MjAsIEtFWV9MSVNUfSwKKwl7IDB4MDAsIEtFWV9QT1dFUn0sCisJeyAweDI4LCBLRVlfMX0sCisJeyAweDE4LCBLRVlfMn0sCisJeyAweDM4LCBLRVlfM30sCisJeyAweDI0LCBLRVlfNH0sCisJeyAweDE0LCBLRVlfNX0sCisJeyAweDM0LCBLRVlfNn0sCisJeyAweDJjLCBLRVlfN30sCisJeyAweDFjLCBLRVlfOH0sCisJeyAweDNjLCBLRVlfOX0sCisJeyAweDEyLCBLRVlfU1VCVElUTEV9LAorCXsgMHgyMiwgS0VZXzB9LAorCXsgMHgzMiwgS0VZX1JFV0lORH0sCisJeyAweDNhLCBLRVlfU0hVRkZMRX0sCisJeyAweDAyLCBLRVlfUFJJTlR9LAorCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOfSwKKwl7IDB4MzEsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgwYywgS0VZX1pPT019LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV059LAorCXsgMHgzZSwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MGEsIEtFWV9NVVRFfSwKKwl7IDB4MDQsIEtFWV9BVURJT30sCisJeyAweDI2LCBLRVlfUkVDT1JEfSwKKwl7IDB4MDYsIEtFWV9QTEFZfSwKKwl7IDB4MzYsIEtFWV9TVE9QfSwKKwl7IDB4MTYsIEtFWV9QQVVTRX0sCisJeyAweDJlLCBLRVlfUkVXSU5EfSwKKwl7IDB4MGUsIEtFWV9GQVNURk9SV0FSRH0sCisJeyAweDMwLCBLRVlfVEVYVH0sCisJeyAweDIxLCBLRVlfR1JFRU59LAorCXsgMHgwMSwgS0VZX0JMVUV9LAorCXsgMHgwOCwgS0VZX0VQR30sCisJeyAweDJhLCBLRVlfTUVOVX0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYXZlcm1lZGlhX2ExNmQsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZF90YWJsZSk7CisKKy8qIEVuY29yZSBFTkxUVi1GTSB2NS4zCisgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M1tdID0geworCXsgMHgxMCwgS0VZX1BPV0VSMn0sCisJeyAweDA2LCBLRVlfTVVURX0sCisKKwl7IDB4MDksIEtFWV8xfSwKKwl7IDB4MWQsIEtFWV8yfSwKKwl7IDB4MWYsIEtFWV8zfSwKKwl7IDB4MTksIEtFWV80fSwKKwl7IDB4MWIsIEtFWV81fSwKKwl7IDB4MTEsIEtFWV82fSwKKwl7IDB4MTcsIEtFWV83fSwKKwl7IDB4MTIsIEtFWV84fSwKKwl7IDB4MTYsIEtFWV85fSwKKwl7IDB4NDgsIEtFWV8wfSwKKworCXsgMHgwNCwgS0VZX0xJU1R9LAkJLyogLS8tLSAqLworCXsgMHg0MCwgS0VZX0xBU1R9LAkJLyogcmVjYWxsICovCisKKwl7IDB4MDIsIEtFWV9NT0RFfSwJCS8qIFRWL0FWICovCisJeyAweDA1LCBLRVlfQ0FNRVJBfSwJCS8qIFNOQVBTSE9UICovCisKKwl7IDB4NGMsIEtFWV9DSEFOTkVMVVB9LAkJLyogVVAgKi8KKwl7IDB4MDAsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIERPV04gKi8KKwl7IDB4MGQsIEtFWV9WT0xVTUVVUH0sCQkvKiBSSUdIVCAqLworCXsgMHgxNSwgS0VZX1ZPTFVNRURPV059LAkvKiBMRUZUICovCisJeyAweDQ5LCBLRVlfRU5URVJ9LAkJLyogT0sgKi8KKworCXsgMHg1NCwgS0VZX1JFQ09SRH0sCisJeyAweDRkLCBLRVlfUExBWX0sCQkvKiBwYXVzZSAqLworCisJeyAweDFlLCBLRVlfTUVOVX0sCQkvKiB2aWRlbyBzZXR0aW5nICovCisJeyAweDBlLCBLRVlfUklHSFR9LAkJLyogPC0gKi8KKwl7IDB4MWEsIEtFWV9MRUZUfSwJCS8qIC0+ICovCisKKwl7IDB4MGEsIEtFWV9DTEVBUn0sCQkvKiB2aWRlbyBkZWZhdWx0ICovCisJeyAweDBjLCBLRVlfWk9PTX0sCQkvKiBoaWRlIHBhbm5lbCAqLworCXsgMHg0NywgS0VZX1NMRUVQfSwJCS8qIHNodXRkb3duICovCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M190YWJsZSk7CisKKy8qIFpvZ2lzIFJlYWwgQXVkaW8gMjIwIC0gMzIga2V5cyBJUiAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzW10gPSB7CisJeyAweDFjLCBLRVlfUkFESU99LAorCXsgMHgxMiwgS0VZX1BPV0VSMn0sCisKKwl7IDB4MDEsIEtFWV8xfSwKKwl7IDB4MDIsIEtFWV8yfSwKKwl7IDB4MDMsIEtFWV8zfSwKKwl7IDB4MDQsIEtFWV80fSwKKwl7IDB4MDUsIEtFWV81fSwKKwl7IDB4MDYsIEtFWV82fSwKKwl7IDB4MDcsIEtFWV83fSwKKwl7IDB4MDgsIEtFWV84fSwKKwl7IDB4MDksIEtFWV85fSwKKwl7IDB4MDAsIEtFWV8wfSwKKworCXsgMHgwYywgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTgsIEtFWV9WT0xVTUVET1dOfSwKKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgxNSwgS0VZX0NIQU5ORUxET1dOfSwKKwl7IDB4MTYsIEtFWV9FTlRFUn0sCisKKwl7IDB4MTEsIEtFWV9MSVNUfSwJCS8qIFNvdXJjZSAqLworCXsgMHgwZCwgS0VZX0FVRElPfSwJCS8qIHN0ZXJlbyAqLworCisJeyAweDBmLCBLRVlfUFJFVklPVVN9LAkJLyogUHJldiAqLworCXsgMHgxYiwgS0VZX1RJTUV9LAkJLyogVGltZXNoaWZ0ICovCisJeyAweDFhLCBLRVlfTkVYVH0sCQkvKiBOZXh0ICovCisKKwl7IDB4MGUsIEtFWV9TVE9QfSwKKwl7IDB4MWYsIEtFWV9QTEFZfSwKKwl7IDB4MWUsIEtFWV9QTEFZUEFVU0V9LAkJLyogUGF1c2UgKi8KKworCXsgMHgxZCwgS0VZX1JFQ09SRH0sCisJeyAweDEzLCBLRVlfTVVURX0sCisJeyAweDE5LCBLRVlfQ0FNRVJBfSwJCS8qIFNuYXBzaG90ICovCisKK307CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXNfdGFibGUpOworCisvKiBBVEkgVFYgV29uZGVyIEhEIDYwMCBVU0IKKyAgIERldmluIEhlaXRtdWVsbGVyIDxkZXZpbi5oZWl0bXVlbGxlckBnbWFpbC5jb20+CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBbXSA9IHsKKwl7IDB4MDAsIEtFWV9SRUNPUkR9LAkJLyogUm93IDEgKi8KKwl7IDB4MDEsIEtFWV9QTEFZUEFVU0V9LAorCXsgMHgwMiwgS0VZX1NUT1B9LAorCXsgMHgwMywgS0VZX1BPV0VSfSwKKwl7IDB4MDQsIEtFWV9QUkVWSU9VU30sCS8qIFJvdyAyICovCisJeyAweDA1LCBLRVlfUkVXSU5EfSwKKwl7IDB4MDYsIEtFWV9GT1JXQVJEfSwKKwl7IDB4MDcsIEtFWV9ORVhUfSwKKwl7IDB4MDgsIEtFWV9FUEd9LAkJLyogUm93IDMgKi8KKwl7IDB4MDksIEtFWV9IT01FfSwKKwl7IDB4MGEsIEtFWV9NRU5VfSwKKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgwYywgS0VZX0JBQ0t9LAkJLyogUm93IDQgKi8KKwl7IDB4MGQsIEtFWV9VUH0sCisJeyAweDBlLCBLRVlfSU5GT30sCisJeyAweDBmLCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHgxMCwgS0VZX0xFRlR9LAkJLyogUm93IDUgKi8KKwl7IDB4MTEsIEtFWV9TRUxFQ1R9LAorCXsgMHgxMiwgS0VZX1JJR0hUfSwKKwl7IDB4MTMsIEtFWV9WT0xVTUVVUH0sCisJeyAweDE0LCBLRVlfTEFTVH0sCQkvKiBSb3cgNiAqLworCXsgMHgxNSwgS0VZX0RPV059LAorCXsgMHgxNiwgS0VZX01VVEV9LAorCXsgMHgxNywgS0VZX1ZPTFVNRURPV059LAorfTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBfdGFibGUpOworCisvKiBEVkJXb3JsZCByZW1vdGVzCisgICBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG1lLmJ5PgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2RtMTEwNV9uZWNbXSA9IHsKKwl7IDB4MGEsIEtFWV9QT1dFUjJ9LAkJLyogcG93ZXIgKi8KKwl7IDB4MGMsIEtFWV9NVVRFfSwJCS8qIG11dGUgKi8KKwl7IDB4MTEsIEtFWV8xfSwKKwl7IDB4MTIsIEtFWV8yfSwKKwl7IDB4MTMsIEtFWV8zfSwKKwl7IDB4MTQsIEtFWV80fSwKKwl7IDB4MTUsIEtFWV81fSwKKwl7IDB4MTYsIEtFWV82fSwKKwl7IDB4MTcsIEtFWV83fSwKKwl7IDB4MTgsIEtFWV84fSwKKwl7IDB4MTksIEtFWV85fSwKKwl7IDB4MTAsIEtFWV8wfSwKKwl7IDB4MWMsIEtFWV9DSEFOTkVMVVB9LAkJLyogY2grICovCisJeyAweDBmLCBLRVlfQ0hBTk5FTERPV059LAkvKiBjaC0gKi8KKwl7IDB4MWEsIEtFWV9WT0xVTUVVUH0sCQkvKiB2b2wrICovCisJeyAweDBlLCBLRVlfVk9MVU1FRE9XTn0sCS8qIHZvbC0gKi8KKwl7IDB4MDQsIEtFWV9SRUNPUkR9LAkJLyogcmVjICovCisJeyAweDA5LCBLRVlfQ0hBTk5FTH0sCQkvKiBmYXYgKi8KKwl7IDB4MDgsIEtFWV9CQUNLU1BBQ0V9LAkJLyogcmV3aW5kICovCisJeyAweDA3LCBLRVlfRkFTVEZPUldBUkR9LAkvKiBmYXN0ICovCisJeyAweDBiLCBLRVlfUEFVU0V9LAkJLyogcGF1c2UgKi8KKwl7IDB4MDIsIEtFWV9FU0N9LAkJLyogY2FuY2VsICovCisJeyAweDAzLCBLRVlfVEFCfSwJCS8qIHRhYiAqLworCXsgMHgwMCwgS0VZX1VQfSwJCS8qIHVwICovCisJeyAweDFmLCBLRVlfRU5URVJ9LAkJLyogb2sgKi8KKwl7IDB4MDEsIEtFWV9ET1dOfSwJCS8qIGRvd24gKi8KKwl7IDB4MDUsIEtFWV9SRUNPUkR9LAkJLyogY2FwICovCisJeyAweDA2LCBLRVlfU1RPUH0sCQkvKiBzdG9wICovCisJeyAweDQwLCBLRVlfWk9PTX0sCQkvKiBmdWxsICovCisJeyAweDFlLCBLRVlfVFZ9LAkJLyogdHZtb2RlICovCisJeyAweDFiLCBLRVlfQn0sCQkJLyogcmVjYWxsICovCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2RtMTEwNV9uZWNfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19kbTExMDVfbmVjLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kbTExMDVfbmVjKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbTExMDVfbmVjX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc190ZXZpaV9uZWNbXSA9IHsKKwl7IDB4MGEsIEtFWV9QT1dFUjJ9LAorCXsgMHgwYywgS0VZX01VVEV9LAorCXsgMHgxMSwgS0VZXzF9LAorCXsgMHgxMiwgS0VZXzJ9LAorCXsgMHgxMywgS0VZXzN9LAorCXsgMHgxNCwgS0VZXzR9LAorCXsgMHgxNSwgS0VZXzV9LAorCXsgMHgxNiwgS0VZXzZ9LAorCXsgMHgxNywgS0VZXzd9LAorCXsgMHgxOCwgS0VZXzh9LAorCXsgMHgxOSwgS0VZXzl9LAorCXsgMHgxMCwgS0VZXzB9LAorCXsgMHgxYywgS0VZX01FTlV9LAorCXsgMHgwZiwgS0VZX1ZPTFVNRURPV059LAorCXsgMHgxYSwgS0VZX0xBU1R9LAorCXsgMHgwZSwgS0VZX09QRU59LAorCXsgMHgwNCwgS0VZX1JFQ09SRH0sCisJeyAweDA5LCBLRVlfVk9MVU1FVVB9LAorCXsgMHgwOCwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDA3LCBLRVlfUFZSfSwKKwl7IDB4MGIsIEtFWV9USU1FfSwKKwl7IDB4MDIsIEtFWV9SSUdIVH0sCisJeyAweDAzLCBLRVlfTEVGVH0sCisJeyAweDAwLCBLRVlfVVB9LAorCXsgMHgxZiwgS0VZX09LfSwKKwl7IDB4MDEsIEtFWV9ET1dOfSwKKwl7IDB4MDUsIEtFWV9UVU5FUn0sCisJeyAweDA2LCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHg0MCwgS0VZX1BMQVlQQVVTRX0sCisJeyAweDFlLCBLRVlfUkVXSU5EfSwKKwl7IDB4MWIsIEtFWV9GQVZPUklURVN9LAorCXsgMHgxZCwgS0VZX0JBQ0t9LAorCXsgMHg0ZCwgS0VZX0ZBU1RGT1JXQVJEfSwKKwl7IDB4NDQsIEtFWV9FUEd9LAorCXsgMHg0YywgS0VZX0lORk99LAorCXsgMHg0MSwgS0VZX0FCfSwKKwl7IDB4NDMsIEtFWV9BVURJT30sCisJeyAweDQ1LCBLRVlfU1VCVElUTEV9LAorCXsgMHg0YSwgS0VZX0xJU1R9LAorCXsgMHg0NiwgS0VZX0YxfSwKKwl7IDB4NDcsIEtFWV9GMn0sCisJeyAweDVlLCBLRVlfRjN9LAorCXsgMHg1YywgS0VZX0Y0fSwKKwl7IDB4NTIsIEtFWV9GNX0sCisJeyAweDVhLCBLRVlfRjZ9LAorCXsgMHg1NiwgS0VZX01PREV9LAorCXsgMHg1OCwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3RldmlpX25lY190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3RldmlpX25lYywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdGV2aWlfbmVjKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc190ZXZpaV9uZWNfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Ric19uZWNbXSA9IHsKKwl7IDB4MDQsIEtFWV9QT1dFUjJ9LAkvKnBvd2VyKi8KKwl7IDB4MTQsIEtFWV9NVVRFfSwJLyptdXRlKi8KKwl7IDB4MDcsIEtFWV8xfSwKKwl7IDB4MDYsIEtFWV8yfSwKKwl7IDB4MDUsIEtFWV8zfSwKKwl7IDB4MGIsIEtFWV80fSwKKwl7IDB4MGEsIEtFWV81fSwKKwl7IDB4MDksIEtFWV82fSwKKwl7IDB4MGYsIEtFWV83fSwKKwl7IDB4MGUsIEtFWV84fSwKKwl7IDB4MGQsIEtFWV85fSwKKwl7IDB4MTIsIEtFWV8wfSwKKwl7IDB4MTYsIEtFWV9DSEFOTkVMVVB9LAkvKmNoKyovCisJeyAweDExLCBLRVlfQ0hBTk5FTERPV059LC8qY2gtKi8KKwl7IDB4MTMsIEtFWV9WT0xVTUVVUH0sCS8qdm9sKyovCisJeyAweDBjLCBLRVlfVk9MVU1FRE9XTn0sLyp2b2wtKi8KKwl7IDB4MDMsIEtFWV9SRUNPUkR9LAkvKnJlYyovCisJeyAweDE4LCBLRVlfUEFVU0V9LAkvKnBhdXNlKi8KKwl7IDB4MTksIEtFWV9PS30sCS8qb2sqLworCXsgMHgxYSwgS0VZX0NBTUVSQX0sCS8qIHNuYXBzaG90ICovCisJeyAweDAxLCBLRVlfVVB9LAorCXsgMHgxMCwgS0VZX0xFRlR9LAorCXsgMHgwMiwgS0VZX1JJR0hUfSwKKwl7IDB4MDgsIEtFWV9ET1dOfSwKKwl7IDB4MTUsIEtFWV9GQVZPUklURVN9LAorCXsgMHgxNywgS0VZX1NVQlRJVExFfSwKKwl7IDB4MWQsIEtFWV9aT09NfSwKKwl7IDB4MWYsIEtFWV9FWElUfSwKKwl7IDB4MWUsIEtFWV9NRU5VfSwKKwl7IDB4MWMsIEtFWV9FUEd9LAorCXsgMHgwMCwgS0VZX1BSRVZJT1VTfSwKKwl7IDB4MWIsIEtFWV9NT0RFfSwKK307CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfdGJzX25lY190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3Ric19uZWMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3Ric19uZWMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Ric19uZWNfdGFibGUpOworCisvKiBUZXJyYXRlYyBDaW5lcmd5IEh5YnJpZCBUIFVTQiBYUworICAgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBsaW51eHR2Lm9yZz4KKyAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc190ZXJyYXRlY19jaW5lcmd5X3hzW10gPSB7CisJeyAweDQxLCBLRVlfSE9NRX0sCisJeyAweDAxLCBLRVlfUE9XRVJ9LAorCXsgMHg0MiwgS0VZX01FTlV9LAorCXsgMHgwMiwgS0VZXzF9LAorCXsgMHgwMywgS0VZXzJ9LAorCXsgMHgwNCwgS0VZXzN9LAorCXsgMHg0MywgS0VZX1NVQlRJVExFfSwKKwl7IDB4MDUsIEtFWV80fSwKKwl7IDB4MDYsIEtFWV81fSwKKwl7IDB4MDcsIEtFWV82fSwKKwl7IDB4NDQsIEtFWV9URVhUfSwKKwl7IDB4MDgsIEtFWV83fSwKKwl7IDB4MDksIEtFWV84fSwKKwl7IDB4MGEsIEtFWV85fSwKKwl7IDB4NDUsIEtFWV9ERUxFVEV9LAorCXsgMHgwYiwgS0VZX1RVTkVSfSwKKwl7IDB4MGMsIEtFWV8wfSwKKwl7IDB4MGQsIEtFWV9NT0RFfSwKKwl7IDB4NDYsIEtFWV9UVn0sCisJeyAweDQ3LCBLRVlfRFZEfSwKKwl7IDB4NDksIEtFWV9WSURFT30sCisJeyAweDRiLCBLRVlfQVVYfSwKKwl7IDB4MTAsIEtFWV9VUH0sCisJeyAweDExLCBLRVlfTEVGVH0sCisJeyAweDEyLCBLRVlfT0t9LAorCXsgMHgxMywgS0VZX1JJR0hUfSwKKwl7IDB4MTQsIEtFWV9ET1dOfSwKKwl7IDB4MGYsIEtFWV9FUEd9LAorCXsgMHgxNiwgS0VZX0lORk99LAorCXsgMHg0ZCwgS0VZX0JBQ0tTUEFDRX0sCisJeyAweDFjLCBLRVlfVk9MVU1FVVB9LAorCXsgMHg0YywgS0VZX1BMQVl9LAorCXsgMHgxYiwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDFkLCBLRVlfTVVURX0sCisJeyAweDFmLCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHgxNywgS0VZX1JFRH0sCisJeyAweDE4LCBLRVlfR1JFRU59LAorCXsgMHgxOSwgS0VZX1lFTExPV30sCisJeyAweDFhLCBLRVlfQkxVRX0sCisJeyAweDU4LCBLRVlfUkVDT1JEfSwKKwl7IDB4NDgsIEtFWV9TVE9QfSwKKwl7IDB4NDAsIEtFWV9QQVVTRX0sCisJeyAweDU0LCBLRVlfTEFTVH0sCisJeyAweDRlLCBLRVlfUkVXSU5EfSwKKwl7IDB4NGYsIEtFWV9GQVNURk9SV0FSRH0sCisJeyAweDVjLCBLRVlfTkVYVH0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc190ZXJyYXRlY19jaW5lcmd5X3hzLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc190ZXJyYXRlY19jaW5lcmd5X3hzKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlKTsKKworLyogRVZHQSBpbkR0dWJlCisgICBEZXZpbiBIZWl0bXVlbGxlciA8ZGV2aW4uaGVpdG11ZWxsZXJAZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2V2Z2FfaW5kdHViZVtdID0geworCXsgMHgxMiwgS0VZX1BPV0VSfSwKKwl7IDB4MDIsIEtFWV9NT0RFfSwJLyogVFYgKi8KKwl7IDB4MTQsIEtFWV9NVVRFfSwKKwl7IDB4MWEsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgxNiwgS0VZX1RWMn0sCS8qIFBJUCAqLworCXsgMHgxZCwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MDUsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDBmLCBLRVlfUExBWVBBVVNFfSwKKwl7IDB4MTksIEtFWV9WT0xVTUVET1dOfSwKKwl7IDB4MWMsIEtFWV9SRVdJTkR9LAorCXsgMHgwZCwgS0VZX1JFQ09SRH0sCisJeyAweDE4LCBLRVlfRk9SV0FSRH0sCisJeyAweDFlLCBLRVlfUFJFVklPVVN9LAorCXsgMHgxYiwgS0VZX1NUT1B9LAorCXsgMHgxZiwgS0VZX05FWFR9LAorCXsgMHgxMywgS0VZX0NBTUVSQX0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2V2Z2FfaW5kdHViZV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2V2Z2FfaW5kdHViZSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZXZnYV9pbmR0dWJlKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ldmdhX2luZHR1YmVfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwW10gPSB7CisJeyAweDAwLCBLRVlfVFZ9LAorCXsgMHgwMSwgS0VZX0RWRH0sCisJeyAweDA0LCBLRVlfUkVDT1JEfSwKKwl7IDB4MDUsIEtFWV9WSURFT30sCS8qIFRWL1ZpZGVvICovCisJeyAweDA3LCBLRVlfU1RPUH0sCisJeyAweDA4LCBLRVlfUExBWVBBVVNFfSwKKwl7IDB4MGEsIEtFWV9SRVdJTkR9LAorCXsgMHgwZiwgS0VZX0ZBU1RGT1JXQVJEfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgxMiwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDE0LCBLRVlfTVVURX0sCisJeyAweDE1LCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDE2LCBLRVlfMX0sCisJeyAweDE3LCBLRVlfMn0sCisJeyAweDE4LCBLRVlfM30sCisJeyAweDE5LCBLRVlfNH0sCisJeyAweDFhLCBLRVlfNX0sCisJeyAweDFiLCBLRVlfNn0sCisJeyAweDFjLCBLRVlfN30sCisJeyAweDFkLCBLRVlfOH0sCisJeyAweDFlLCBLRVlfOX0sCisJeyAweDFmLCBLRVlfMH0sCisJeyAweDIxLCBLRVlfU0xFRVB9LAorCXsgMHgyNCwgS0VZX1pPT019LAorCXsgMHgyNSwgS0VZX0xBU1R9LAkvKiBSZWNhbGwgKi8KKwl7IDB4MjYsIEtFWV9TVUJUSVRMRX0sCS8qIENDICovCisJeyAweDI3LCBLRVlfTEFOR1VBR0V9LAkvKiBNVFMgKi8KKwl7IDB4MjksIEtFWV9DSEFOTkVMfSwJLyogU1VSRiAqLworCXsgMHgyYiwgS0VZX0F9LAorCXsgMHgyYywgS0VZX0J9LAorCXsgMHgyZiwgS0VZX0NBTUVSQX0sCS8qIFNuYXBzaG90ICovCisJeyAweDIzLCBLRVlfUkFESU99LAorCXsgMHgwMiwgS0VZX1BSRVZJT1VTU09OR30sCisJeyAweDA2LCBLRVlfTkVYVFNPTkd9LAorCXsgMHgwMywgS0VZX0VQR30sCisJeyAweDA5LCBLRVlfU0VUVVB9LAorCXsgMHgyMiwgS0VZX0JBQ0tTUEFDRX0sCisJeyAweDBjLCBLRVlfVVB9LAorCXsgMHgwZSwgS0VZX0RPV059LAorCXsgMHgwYiwgS0VZX0xFRlR9LAorCXsgMHgwZCwgS0VZX1JJR0hUfSwKKwl7IDB4MTEsIEtFWV9FTlRFUn0sCisJeyAweDIwLCBLRVlfVEVYVH0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfdmlkZW9tYXRlX3MzNTAsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZSk7CisKKy8qIEdBRE1FSSBVVFYzMzArIFJNMDA4WiByZW1vdGUKKyAgIFNoaW5lIExpdSA8c2hpbmVsQGZveG1haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2dhZG1laV9ybTAwOHpbXSA9IHsKKwl7IDB4MTQsIEtFWV9QT1dFUjJ9LAkJLyogUE9XRVIgT0ZGICovCisJeyAweDBjLCBLRVlfTVVURX0sCQkvKiBNVVRFICovCisKKwl7IDB4MTgsIEtFWV9UVn0sCQkvKiBUViAqLworCXsgMHgwZSwgS0VZX1ZJREVPfSwJCS8qIEFWICovCisJeyAweDBiLCBLRVlfQVVESU99LAkJLyogU1YgKi8KKwl7IDB4MGYsIEtFWV9SQURJT30sCQkvKiBGTSAqLworCisJeyAweDAwLCBLRVlfMX0sCisJeyAweDAxLCBLRVlfMn0sCisJeyAweDAyLCBLRVlfM30sCisJeyAweDAzLCBLRVlfNH0sCisJeyAweDA0LCBLRVlfNX0sCisJeyAweDA1LCBLRVlfNn0sCisJeyAweDA2LCBLRVlfN30sCisJeyAweDA3LCBLRVlfOH0sCisJeyAweDA4LCBLRVlfOX0sCisJeyAweDA5LCBLRVlfMH0sCisJeyAweDBhLCBLRVlfSU5GT30sCQkvKiBPU0QgKi8KKwl7IDB4MWMsIEtFWV9CQUNLU1BBQ0V9LAkJLyogTEFTVCAqLworCisJeyAweDBkLCBLRVlfUExBWX0sCQkvKiBQTEFZICovCisJeyAweDFlLCBLRVlfQ0FNRVJBfSwJCS8qIFNOQVBTSE9UICovCisJeyAweDFhLCBLRVlfUkVDT1JEfSwJCS8qIFJFQ09SRCAqLworCXsgMHgxNywgS0VZX1NUT1B9LAkJLyogU1RPUCAqLworCisJeyAweDFmLCBLRVlfVVB9LAkJLyogVVAgKi8KKwl7IDB4NDQsIEtFWV9ET1dOfSwJCS8qIERPV04gKi8KKwl7IDB4NDYsIEtFWV9UQUJ9LAkJLyogQkFDSyAqLworCXsgMHg0YSwgS0VZX1pPT019LAkJLyogRlVMTFNFQ1JFRU4gKi8KKworCXsgMHgxMCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFZPTFVNRVVQICovCisJeyAweDExLCBLRVlfVk9MVU1FRE9XTn0sCS8qIFZPTFVNRURPV04gKi8KKwl7IDB4MTIsIEtFWV9DSEFOTkVMVVB9LAkJLyogQ0hBTk5FTFVQICovCisJeyAweDEzLCBLRVlfQ0hBTk5FTERPV059LAkvKiBDSEFOTkVMRE9XTiAqLworCXsgMHgxNSwgS0VZX0VOVEVSfSwJCS8qIE9LICovCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2dhZG1laV9ybTAwOHpfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19nYWRtZWlfcm0wMDh6LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19nYWRtZWlfcm0wMDh6KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19nYWRtZWlfcm0wMDh6X3RhYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlDT01QTEVURSBTQ0FOQ09ERSBUQUJMRVMKKyAqIEluc3RlYWQgb2YganVzdCBhIHBhcnRpYWwgc2NhbmNvZGUsIHRoZSB0YWJsZXMgYmVsbG93CisgKiBjb250YWlucyB0aGUgY29tcGxldGUgc2NhbmNvZGUgYW5kIHRoZSByZWNlaXZlciBwcm90b2NvbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBIYXVwcGF1Z2U6dGhlIG5ld2VyLCBncmF5IHJlbW90ZXMgKHNlZW1zIHRoZXJlIGFyZSBtdWx0aXBsZQorICogc2xpZ2h0bHkgZGlmZmVyZW50IHZlcnNpb25zKSwgc2hpcHBlZCB3aXRoIGN4ODgraXZ0diBjYXJkcy4KKyAqCisgKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHRoZSBjb21wbGV0ZSBSQzUgY29kZSwgaW5zdGVhZCBvZiBqdXN0IHRoZSBkYXRhIHBhcnQKKyAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ld1tdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDFlMDAsIEtFWV8wIH0sCisJeyAweDFlMDEsIEtFWV8xIH0sCisJeyAweDFlMDIsIEtFWV8yIH0sCisJeyAweDFlMDMsIEtFWV8zIH0sCisJeyAweDFlMDQsIEtFWV80IH0sCisJeyAweDFlMDUsIEtFWV81IH0sCisJeyAweDFlMDYsIEtFWV82IH0sCisJeyAweDFlMDcsIEtFWV83IH0sCisJeyAweDFlMDgsIEtFWV84IH0sCisJeyAweDFlMDksIEtFWV85IH0sCisKKwl7IDB4MWUwYSwgS0VZX1RFWFQgfSwJCS8qIGtleXBhZCBhc3RlcmlzayBhcyB3ZWxsICovCisJeyAweDFlMGIsIEtFWV9SRUQgfSwJCS8qIHJlZCBidXR0b24gKi8KKwl7IDB4MWUwYywgS0VZX1JBRElPIH0sCisJeyAweDFlMGQsIEtFWV9NRU5VIH0sCisJeyAweDFlMGUsIEtFWV9TVUJUSVRMRSB9LAkJLyogYWxzbyB0aGUgIyBrZXkgKi8KKwl7IDB4MWUwZiwgS0VZX01VVEUgfSwKKwl7IDB4MWUxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlMTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFlMTIsIEtFWV9QUkVWSU9VUyB9LAkJLyogcHJldmlvdXMgY2hhbm5lbCAqLworCXsgMHgxZTE0LCBLRVlfVVAgfSwKKwl7IDB4MWUxNSwgS0VZX0RPV04gfSwKKwl7IDB4MWUxNiwgS0VZX0xFRlQgfSwKKwl7IDB4MWUxNywgS0VZX1JJR0hUIH0sCisJeyAweDFlMTgsIEtFWV9WSURFTyB9LAkJLyogVmlkZW9zICovCisJeyAweDFlMTksIEtFWV9BVURJTyB9LAkJLyogTXVzaWMgKi8KKwkvKiAweDFlMWE6IFBpY3R1cmVzIC0gcHJlc3VtZSB0aGlzIG1lYW5zCisJICAgIk11bHRpbWVkaWEgSG9tZSBQbGF0Zm9ybSIgLQorCSAgIG5vICJQSUNUVVJFUyIga2V5IGluIGlucHV0LmgKKwkgKi8KKwl7IDB4MWUxYSwgS0VZX01IUCB9LAorCisJeyAweDFlMWIsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCisJeyAweDFlMWMsIEtFWV9UViB9LAorCXsgMHgxZTFlLCBLRVlfTkVYVFNPTkcgfSwJCS8qIHNraXAgPnwgKi8KKwl7IDB4MWUxZiwgS0VZX0VYSVQgfSwJCS8qIGJhY2svZXhpdCAqLworCXsgMHgxZTIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MWUyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KKwl7IDB4MWUyMiwgS0VZX0NIQU5ORUwgfSwJCS8qIHNvdXJjZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KKwl7IDB4MWUyNCwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiByZXBsYXkgfDwgKi8KKwl7IDB4MWUyNSwgS0VZX0VOVEVSIH0sCQkvKiBPSyAqLworCXsgMHgxZTI2LCBLRVlfU0xFRVAgfSwJCS8qIG1pbmltaXplIChvbGQgYmxhY2sgcmVtb3RlKSAqLworCXsgMHgxZTI5LCBLRVlfQkxVRSB9LAkJLyogYmx1ZSBrZXkgKi8KKwl7IDB4MWUyZSwgS0VZX0dSRUVOIH0sCQkvKiBncmVlbiBidXR0b24gKi8KKwl7IDB4MWUzMCwgS0VZX1BBVVNFIH0sCQkvKiBwYXVzZSAqLworCXsgMHgxZTMyLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLworCXsgMHgxZTM0LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLworCXsgMHgxZTM1LCBLRVlfUExBWSB9LAorCXsgMHgxZTM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZTM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KKwl7IDB4MWUzOCwgS0VZX1lFTExPVyB9LAkJLyogeWVsbG93IGtleSAqLworCXsgMHgxZTNiLCBLRVlfU0VMRUNUIH0sCQkvKiB0b3AgcmlnaHQgYnV0dG9uICovCisJeyAweDFlM2MsIEtFWV9aT09NIH0sCQkvKiBmdWxsICovCisJeyAweDFlM2QsIEtFWV9QT1dFUiB9LAkJLyogc3lzdGVtIHBvd2VyIChncmVlbiBidXR0b24pICovCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcmM1X2hhdXBwYXVnZV9uZXdfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ldywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcmM1X2hhdXBwYXVnZV9uZXcpLAorCS5pcl90eXBlID0gSVJfVFlQRV9SQzUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcmM1X2hhdXBwYXVnZV9uZXdfdGFibGUpOworCisvKiBUZXJyYXRlYyBDaW5lcmd5IEh5YnJpZCBUIFVTQiBYUyBGTQorICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNbXSA9IHsKKwl7IDB4MTQ0MSwgS0VZX0hPTUV9LAorCXsgMHgxNDAxLCBLRVlfUE9XRVIyfSwKKworCXsgMHgxNDQyLCBLRVlfTUVOVX0sCQkvKiBEVkQgbWVudSAqLworCXsgMHgxNDQzLCBLRVlfU1VCVElUTEV9LAorCXsgMHgxNDQ0LCBLRVlfVEVYVH0sCQkvKiBUZWxldGV4dCAqLworCXsgMHgxNDQ1LCBLRVlfREVMRVRFfSwKKworCXsgMHgxNDAyLCBLRVlfMX0sCisJeyAweDE0MDMsIEtFWV8yfSwKKwl7IDB4MTQwNCwgS0VZXzN9LAorCXsgMHgxNDA1LCBLRVlfNH0sCisJeyAweDE0MDYsIEtFWV81fSwKKwl7IDB4MTQwNywgS0VZXzZ9LAorCXsgMHgxNDA4LCBLRVlfN30sCisJeyAweDE0MDksIEtFWV84fSwKKwl7IDB4MTQwYSwgS0VZXzl9LAorCXsgMHgxNDBjLCBLRVlfMH0sCisKKwl7IDB4MTQwYiwgS0VZX1RVTkVSfSwJCS8qIEFWICovCisJeyAweDE0MGQsIEtFWV9NT0RFfSwJCS8qIEEuQiAqLworCisJeyAweDE0NDYsIEtFWV9UVn0sCisJeyAweDE0NDcsIEtFWV9EVkR9LAorCXsgMHgxNDQ5LCBLRVlfVklERU99LAorCXsgMHgxNDRhLCBLRVlfUkFESU99LAkJLyogTXVzaWMgKi8KKwl7IDB4MTQ0YiwgS0VZX0NBTUVSQX0sCQkvKiBQSUMgKi8KKworCXsgMHgxNDEwLCBLRVlfVVB9LAorCXsgMHgxNDExLCBLRVlfTEVGVH0sCisJeyAweDE0MTIsIEtFWV9PS30sCisJeyAweDE0MTMsIEtFWV9SSUdIVH0sCisJeyAweDE0MTQsIEtFWV9ET1dOfSwKKworCXsgMHgxNDBmLCBLRVlfRVBHfSwKKwl7IDB4MTQxNiwgS0VZX0lORk99LAorCXsgMHgxNDRkLCBLRVlfQkFDS1NQQUNFfSwKKworCXsgMHgxNDFjLCBLRVlfVk9MVU1FVVB9LAorCXsgMHgxNDFlLCBLRVlfVk9MVU1FRE9XTn0sCisKKwl7IDB4MTQ0YywgS0VZX1BMQVl9LAorCXsgMHgxNDFkLCBLRVlfTVVURX0sCisKKwl7IDB4MTQxYiwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDE0MWYsIEtFWV9DSEFOTkVMRE9XTn0sCisKKwl7IDB4MTQxNywgS0VZX1JFRH0sCisJeyAweDE0MTgsIEtFWV9HUkVFTn0sCisJeyAweDE0MTksIEtFWV9ZRUxMT1d9LAorCXsgMHgxNDFhLCBLRVlfQkxVRX0sCisKKwl7IDB4MTQ1OCwgS0VZX1JFQ09SRH0sCisJeyAweDE0NDgsIEtFWV9TVE9QfSwKKwl7IDB4MTQ0MCwgS0VZX1BBVVNFfSwKKworCXsgMHgxNDU0LCBLRVlfTEFTVH0sCisJeyAweDE0NGUsIEtFWV9SRVdJTkR9LAorCXsgMHgxNDRmLCBLRVlfRkFTVEZPUldBUkR9LAorCXsgMHgxNDVjLCBLRVlfTkVYVH0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKSwKKwkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjdhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKQEAgLTAsMCArMSw0ODUgQEAKKy8qIGlyLXJlZ2lzdGVyLmMgLSBoYW5kbGUgSVIgc2NhbmNvZGUtPmtleWNvZGUgdGFibGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKworI2RlZmluZSBJUl9UQUJfTUlOX1NJWkUJMzIKKyNkZWZpbmUgSVJfVEFCX01BWF9TSVpFCTEwMjQKKworLyoqCisgKiBpcl9zZWVrX3RhYmxlKCkgLSByZXR1cm5zIHRoZSBlbGVtZW50IG9yZGVyIG9uIHRoZSB0YWJsZQorICogQHJjX3RhYjoJdGhlIGlyX3NjYW5jb2RlX3RhYmxlIHdpdGggdGhlIGtleW1hcCB0byBiZSB1c2VkCisgKiBAc2NhbmNvZGU6CXRoZSBzY2FuY29kZSB0aGF0IHdlJ3JlIHNlZWtpbmcKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgaW5wdXQgcm91dGluZXMgd2hlbiBhIGtleSBpcyBwcmVzc2VkIGF0IHRoZQorICogSVIuIFRoZSBzY2FuY29kZSBpcyByZWNlaXZlZCBhbmQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gYSBrZXljb2RlLgorICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIGl0IHJldHVybnMgS0VZX1VOS05PV04uIE90aGVyd2lzZSwgcmV0dXJucyB0aGUKKyAqIGNvcnJlc3BvbmRpbmcga2V5Y29kZSBmcm9tIHRoZSB0YWJsZS4KKyAqLworc3RhdGljIGludCBpcl9zZWVrX3RhYmxlKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiLCB1MzIgc2NhbmNvZGUpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlyX3NjYW5jb2RlICprZXltYXAgPSByY190YWItPnNjYW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7CisKKwkvKiBGSVhNRTogcmVwbGFjZSBpdCBieSBhIGJpbmFyeSBzZWFyY2ggKi8KKworCWZvciAocmMgPSAwOyByYyA8IHJjX3RhYi0+c2l6ZTsgcmMrKykKKwkJaWYgKGtleW1hcFtyY10uc2NhbmNvZGUgPT0gc2NhbmNvZGUpCisJCQlnb3RvIGV4aXQ7CisKKwkvKiBOb3QgZm91bmQgKi8KKwlyYyA9IC1FSU5WQUw7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGlyX3JvdW5kdXBfdGFibGVzaXplKCkgLSBnZXRzIGFuIG9wdGltdW0gdmFsdWUgZm9yIHRoZSB0YWJsZSBzaXplCisgKiBAbl9lbGVtczoJCW1pbmltdW0gbnVtYmVyIG9mIGVudHJpZXMgdG8gc3RvcmUga2V5Y29kZXMKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBjaG9vc2UgdGhlIGtleWNvZGUgdGFibGUgc2l6ZS4KKyAqCisgKiBJbiBvcmRlciB0byBoYXZlIHNvbWUgZW1wdHkgc3BhY2UgZm9yIG5ldyBrZXljb2RlcywKKyAqIGFuZCBrbm93aW5nIGluIGFkdmFuY2UgdGhhdCBrbWFsbG9jIGFsbG9jYXRlcyBvbmx5IHBvd2VyIG9mIHR3bworICogc2VnbWVudHMsIGl0IG9wdGltaXplcyB0aGUgYWxsb2NhdGVkIHNwYWNlIHRvIGhhdmUgc29tZSBzcGFyZSBzcGFjZQorICogZm9yIHRob3NlIG5ldyBrZXljb2RlcyBieSB1c2luZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0aGF0CisgKiB3aWxsIGJlIGVmZmVjdGl2ZWx5IGJlIGFsbG9jYXRlZCBieSBrbWFsbG9jLgorICogSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBxdWFudGl0eSBvZiB0YWJsZSByZXNpemVzLCBpdCBoYXMgYSBtaW5pbXVtCisgKiB0YWJsZSBzaXplIG9mIElSX1RBQl9NSU5fU0laRS4KKyAqLworaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKQoreworCXNpemVfdCBzaXplOworCisJaWYgKG5fZWxlbXMgPCBJUl9UQUJfTUlOX1NJWkUpCisJCW5fZWxlbXMgPSBJUl9UQUJfTUlOX1NJWkU7CisKKwkvKgorCSAqIEFzIGttYWxsb2Mgb25seSBhbGxvY2F0ZXMgc2l6ZXMgb2YgcG93ZXIgb2YgdHdvLCBnZXQgYXMKKwkgKiBtdWNoIGVudHJpZXMgYXMgcG9zc2libGUgZm9yIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHNlZ21lbnQKKwkgKi8KKwlzaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG5fZWxlbXMgKiBzaXplb2Yoc3RydWN0IGlyX3NjYW5jb2RlKSk7CisJbl9lbGVtcyA9IHNpemUgLyBzaXplb2Yoc3RydWN0IGlyX3NjYW5jb2RlKTsKKworCXJldHVybiBuX2VsZW1zOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcm91bmR1cF90YWJsZXNpemUpOworCisvKioKKyAqIGlyX2NvcHlfdGFibGUoKSAtIGNvcGllcyBhIGtleXRhYmxlLCBkaXNjYXJkaW5nIHRoZSB1bnVzZWQgZW50cmllcworICogQGRlc3RpbjoJZGVzdGluIHRhYmxlCisgKiBAb3JpZ2luOglvcmlnaW4gdGFibGUKKyAqCisgKiBDb3BpZXMgYWxsIGVudHJpZXMgd2hlcmUgdGhlIGtleWNvZGUgaXMgbm90IEtFWV9VTktOT1dOL0tFWV9SRVNFUlZFRAorICovCisKK2ludCBpcl9jb3B5X3RhYmxlKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqZGVzdGluLAorCQkgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpvcmlnaW4pCit7CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IG9yaWdpbi0+c2l6ZTsgaSsrKSB7CisJCWlmIChvcmlnaW4tPnNjYW5baV0ua2V5Y29kZSA9PSBLRVlfVU5LTk9XTiB8fAorCQkgICBvcmlnaW4tPnNjYW5baV0ua2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoJmRlc3Rpbi0+c2NhbltqXSwgJm9yaWdpbi0+c2NhbltpXSwgc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSkpOworCQlqKys7CisJfQorCWRlc3Rpbi0+c2l6ZSA9IGo7CisKKwlJUl9kcHJpbnRrKDEsICJDb3BpZWQgJWQgc2NhbmNvZGVzIHRvIHRoZSBuZXcga2V5Y29kZSB0YWJsZVxuIiwgZGVzdGluLT5zaXplKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29weV90YWJsZSk7CisKKy8qKgorICogaXJfZ2V0a2V5Y29kZSgpIC0gZ2V0IGEga2V5Y29kZSBhdCB0aGUgZXZkZXYgc2NhbmNvZGUgLT5rZXljb2RlIHRhYmxlCisgKiBAZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHNjYW5jb2RlOgl0aGUgZGVzaXJlZCBzY2FuY29kZQorICogQGtleWNvZGU6CXRoZSBrZXljb2RlIHRvIGJlIHJldG9ybmVkLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGhhbmRsZSBldmRldiBFVklPQ0dLRVkgaW9jdGwuCisgKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgcmV0dXJucyAtRUlOVkFMLCBvdGhlcndpc2UsIHJldHVybnMgMC4KKyAqLworc3RhdGljIGludCBpcl9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKKwkJCSBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlpbnQgZWxlbTsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiID0gJmlyX2Rldi0+cmNfdGFiOworCisJZWxlbSA9IGlyX3NlZWtfdGFibGUocmNfdGFiLCBzY2FuY29kZSk7CisJaWYgKGVsZW0gPj0gMCkgeworCQkqa2V5Y29kZSA9IHJjX3RhYi0+c2NhbltlbGVtXS5rZXljb2RlOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFNjYW5jb2RlIG5vdCBmb3VuZCBhbmQgdGFibGUgY2FuJ3QgYmUgZXhwYW5kZWQKKwkgKi8KKwlpZiAoZWxlbSA8IDAgJiYgcmNfdGFiLT5zaXplID09IElSX1RBQl9NQVhfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIElmIGlzIHRoZXJlIGV4dHJhIHNwYWNlLCByZXR1cm5zIEtFWV9SRVNFUlZFRCwKKwkgKiBvdGhlcndpc2UsIGlucHV0IGNvcmUgd29uJ3QgbGV0IGlyX3NldGtleWNvZGUgdG8gd29yaworCSAqLworCSprZXljb2RlID0gS0VZX1JFU0VSVkVEOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlyX2lzX3Jlc2l6ZV9uZWVkZWQoKSAtIENoZWNrIGlmIHRoZSB0YWJsZSBuZWVkcyByZXppc2UKKyAqIEB0YWJsZToJCWtleWNvZGUgdGFibGUgdGhhdCBtYXkgbmVlZCB0byByZXNpemUKKyAqIEBuX2VsZW1zOgkJbWluaW11bSBudW1iZXIgb2YgZW50cmllcyB0byBzdG9yZSBrZXljb2RlcworICoKKyAqIENvbnNpZGVyaW5nIHRoYXQga21hbGxvYyB1c2VzIHBvd2VyIG9mIHR3byBzdG9yYWdlIGFyZWFzLCB0aGlzCisgKiByb3V0aW5lIGRldGVjdHMgaWYgdGhlIHJlYWwgYWxsb2NlZCBzaXplIHdpbGwgY2hhbmdlLiBJZiBub3QsIGl0CisgKiBqdXN0IHJldHVybnMgd2l0aG91dCBkb2luZyBub3RoaW5nLiBPdGhlcndpc2UsIGl0IHdpbGwgZXh0ZW5kIG9yCisgKiByZWR1Y2UgdGhlIHRhYmxlIHNpemUgdG8gbWVldCB0aGUgbmV3IG5lZWRzLgorICoKKyAqIEl0IHJldHVybnMgMCBpZiBubyByZXNpemUgaXMgbmVlZGVkLCAxIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBpcl9pc19yZXNpemVfbmVlZGVkKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqdGFibGUsIGludCBuX2VsZW1zKQoreworCWludCBjdXJfc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKHRhYmxlLT5zaXplKTsKKwlpbnQgbmV3X3NpemUgPSBpcl9yb3VuZHVwX3RhYmxlc2l6ZShuX2VsZW1zKTsKKworCWlmIChjdXJfc2l6ZSA9PSBuZXdfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZXNpemUgaXMgbmVlZGVkICovCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaXJfZGVsZXRlX2tleSgpIC0gcmVtb3ZlIGEga2V5Y29kZSBmcm9tIHRoZSB0YWJsZQorICogQHJjX3RhYjoJCWtleWNvZGUgdGFibGUKKyAqIEBlbGVtOgkJZWxlbWVudCB0byBiZSByZW1vdmVkCisgKgorICovCitzdGF0aWMgdm9pZCBpcl9kZWxldGVfa2V5KHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiLCBpbnQgZWxlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgbmV3c2l6ZSA9IHJjX3RhYi0+c2l6ZSAtIDE7CisJaW50IHJlc2l6ZSA9IGlyX2lzX3Jlc2l6ZV9uZWVkZWQocmNfdGFiLCBuZXdzaXplKTsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKm9sZGtleW1hcCA9IHJjX3RhYi0+c2NhbjsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKm5ld2tleW1hcDsKKworCWlmIChyZXNpemUpIHsKKwkJbmV3a2V5bWFwID0ga3phbGxvYyhpcl9yb3VuZHVwX3RhYmxlc2l6ZShuZXdzaXplKSAqCisJCQkJICAgIHNpemVvZigqbmV3a2V5bWFwKSwgR0ZQX0FUT01JQyk7CisKKwkJLyogVGhlcmUncyBubyBtZW1vcnkgZm9yIHJlc2l6ZS4gS2VlcCB0aGUgb2xkIHRhYmxlICovCisJCWlmICghbmV3a2V5bWFwKQorCQkJcmVzaXplID0gMDsKKwl9CisKKwlpZiAoIXJlc2l6ZSkgeworCQluZXdrZXltYXAgPSBvbGRrZXltYXA7CisKKwkJLyogV2UnbGwgbW9kaWZ5IHRoZSBsaXZlIHRhYmxlLiBMb2NrIGl0ICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZyY190YWItPmxvY2ssIGZsYWdzKTsKKwl9CisKKwkvKgorCSAqIENvcHkgdGhlIGVsZW1lbnRzIGJlZm9yZSB0aGUgb25lIHRoYXQgd2lsbCBiZSBkZWxldGVkCisJICogaWYgKCFyZXNpemUpLCBib3RoIG9sZGtleW1hcCBhbmQgbmV3a2V5bWFwIHBvaW50cworCSAqIHRvIHRoZSBzYW1lIHBsYWNlLCBzbywgdGhlcmUncyBubyBuZWVkIHRvIGNvcHkKKwkgKi8KKwlpZiAocmVzaXplICYmIGVsZW0gPiAwKQorCQltZW1jcHkobmV3a2V5bWFwLCBvbGRrZXltYXAsCisJCSAgICAgICBlbGVtICogc2l6ZW9mKCpuZXdrZXltYXApKTsKKworCS8qCisJICogQ29weSB0aGUgb3RoZXIgZWxlbWVudHMgb3ZlcndyaXRpbmcgdGhlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZAorCSAqIFRoaXMgb3BlcmF0aW9uIGFwcGxpZXMgdG8gYm90aCByZXNpemUgYW5kIG5vbi1yZXNpemUgY2FzZQorCSAqLworCWlmIChlbGVtIDwgbmV3c2l6ZSkKKwkJbWVtY3B5KCZuZXdrZXltYXBbZWxlbV0sICZvbGRrZXltYXBbZWxlbSArIDFdLAorCQkgICAgICAgKG5ld3NpemUgLSBlbGVtKSAqIHNpemVvZigqbmV3a2V5bWFwKSk7CisKKwlpZiAocmVzaXplKSB7CisJCS8qCisJCSAqIEFzIHRoZSBjb3B5IGhhcHBlbmVkIHRvIGEgdGVtcG9yYXJ5IHRhYmxlLCBvbmx5IGhlcmUKKwkJICogaXQgbmVlZHMgdG8gbG9jayB3aGlsZSByZXBsYWNpbmcgdGhlIHRhYmxlIHBvaW50ZXJzCisJCSAqIHRvIHVzZSB0aGUgbmV3IHRhYmxlCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7CisJCXJjX3RhYi0+c2l6ZSA9IG5ld3NpemU7CisJCXJjX3RhYi0+c2NhbiA9IG5ld2tleW1hcDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7CisKKwkJLyogRnJlZXMgdGhlIG9sZCBrZXl0YWJsZSAqLworCQlrZnJlZShvbGRrZXltYXApOworCX0gZWxzZSB7CisJCXJjX3RhYi0+c2l6ZSA9IG5ld3NpemU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOworCX0KK30KKworLyoqCisgKiBpcl9pbnNlcnRfa2V5KCkgLSBpbnNlcnQgYSBrZXljb2RlIGF0IHRoZSB0YWJsZQorICogQHJjX3RhYjoJCWtleWNvZGUgdGFibGUKKyAqIEBzY2FuY29kZToJdGhlIGRlc2lyZWQgc2NhbmNvZGUKKyAqIEBrZXljb2RlOgl0aGUga2V5Y29kZSB0byBiZSByZXRvcm5lZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQgaXJfaW5zZXJ0X2tleShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKKwkJCSAgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlbGVtID0gcmNfdGFiLT5zaXplOworCWludCBuZXdzaXplID0gcmNfdGFiLT5zaXplICsgMTsKKwlpbnQgcmVzaXplID0gaXJfaXNfcmVzaXplX25lZWRlZChyY190YWIsIG5ld3NpemUpOworCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xka2V5bWFwID0gcmNfdGFiLT5zY2FuOworCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwOworCisJaWYgKHJlc2l6ZSkgeworCQluZXdrZXltYXAgPSBremFsbG9jKGlyX3JvdW5kdXBfdGFibGVzaXplKG5ld3NpemUpICoKKwkJCQkgICAgc2l6ZW9mKCpuZXdrZXltYXApLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFuZXdrZXltYXApCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkobmV3a2V5bWFwLCBvbGRrZXltYXAsCisJCSAgICAgICByY190YWItPnNpemUgKiBzaXplb2YoKm5ld2tleW1hcCkpOworCX0gZWxzZQorCQluZXdrZXltYXAgID0gb2xka2V5bWFwOworCisJLyogU3RvcmVzIHRoZSBuZXcgY29kZSBhdCB0aGUgdGFibGUgKi8KKwlJUl9kcHJpbnRrKDEsICIjJWQ6IE5ldyBzY2FuIDB4JTA0eCB3aXRoIGtleSAweCUwNHhcbiIsCisJCSAgIHJjX3RhYi0+c2l6ZSwgc2NhbmNvZGUsIGtleWNvZGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOworCXJjX3RhYi0+c2l6ZSA9IG5ld3NpemU7CisJaWYgKHJlc2l6ZSkgeworCQlyY190YWItPnNjYW4gPSBuZXdrZXltYXA7CisJCWtmcmVlKG9sZGtleW1hcCk7CisJfQorCW5ld2tleW1hcFtlbGVtXS5zY2FuY29kZSA9IHNjYW5jb2RlOworCW5ld2tleW1hcFtlbGVtXS5rZXljb2RlICA9IGtleWNvZGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcl9zZXRrZXljb2RlKCkgLSBzZXQgYSBrZXljb2RlIGF0IHRoZSBldmRldiBzY2FuY29kZSAtPmtleWNvZGUgdGFibGUKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2NhbmNvZGU6CXRoZSBkZXNpcmVkIHNjYW5jb2RlCisgKiBAa2V5Y29kZToJdGhlIGtleWNvZGUgdG8gYmUgcmV0b3JuZWQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaGFuZGxlIGV2ZGV2IEVWSU9DU0tFWSBpb2N0bC4KKyAqIFRoZXJlJ3Mgb25lIGNhdmVhdCBoZXJlOiBob3cgY2FuIHdlIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSB0YWJsZT8KKyAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIC1FSU5WQUwsIG90aGVyd2lzZSwgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IGlyX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkJIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiID0gJmlyX2Rldi0+cmNfdGFiOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gcmNfdGFiLT5zY2FuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIEhhbmRsZSBrZXljb2RlIHRhYmxlIGRlbGV0aW9ucworCSAqCisJICogSWYgdXNlcnNwYWNlIGlzIGFkZGluZyBhIEtFWV9VTktOT1dOIG9yIEtFWV9SRVNFUlZFRCwKKwkgKiBkZWFsIGFzIGEgdHJpYWwgdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIHNjYW5jb2RlIGF0dHJpYnV0aW9uCisJICogaWYgdGFibGUgYmVjb21lIHRvbyBiaWcsIHJlZHVjZSBpdCB0byBzYXZlIHNwYWNlCisJICovCisJaWYgKGtleWNvZGUgPT0gS0VZX1VOS05PV04gfHwga2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQpIHsKKwkJcmMgPSBpcl9zZWVrX3RhYmxlKHJjX3RhYiwgc2NhbmNvZGUpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIDA7CisKKwkJSVJfZHByaW50aygxLCAiIyVkOiBEZWxldGluZyBzY2FuIDB4JTA0eFxuIiwgcmMsIHNjYW5jb2RlKTsKKwkJY2xlYXJfYml0KGtleW1hcFtyY10ua2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlpcl9kZWxldGVfa2V5KHJjX3RhYiwgcmMpOworCisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSGFuZGxlIGtleWNvZGUgcmVwbGFjZW1lbnRzCisJICoKKwkgKiBJZiB0aGUgc2NhbmNvZGUgZXhpc3RzLCBqdXN0IHJlcGxhY2UgYnkgdGhlIG5ldyB2YWx1ZQorCSAqLworCXJjID0gaXJfc2Vla190YWJsZShyY190YWIsIHNjYW5jb2RlKTsKKwlpZiAocmMgPj0gMCkgeworCQlJUl9kcHJpbnRrKDEsICIjJWQ6IFJlcGxhY2luZyBzY2FuIDB4JTA0eCB3aXRoIGtleSAweCUwNHhcbiIsCisJCQlyYywgc2NhbmNvZGUsIGtleWNvZGUpOworCisJCWNsZWFyX2JpdChrZXltYXBbcmNdLmtleWNvZGUsIGRldi0+a2V5Yml0KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7CisJCWtleW1hcFtyY10ua2V5Y29kZSA9IGtleWNvZGU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOworCisJCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSGFuZGxlIG5ldyBzY2FuY29kZSBpbnNlcnRzCisJICoKKwkgKiByZWFsbG9jYXRlIHRhYmxlIGlmIG5lZWRlZCBhbmQgaW5zZXJ0IGEgbmV3IGtleWNvZGUKKwkgKi8KKworCS8qIEF2b2lkIGdyb3dpbmcgdGhlIHRhYmxlIGluZGVmaW5pdGVseSAqLworCWlmIChyY190YWItPnNpemUgKyAxID4gSVJfVEFCX01BWF9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gaXJfaW5zZXJ0X2tleShyY190YWIsIHNjYW5jb2RlLCBrZXljb2RlKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcl9nX2tleWNvZGVfZnJvbV90YWJsZSgpIC0gZ2V0cyB0aGUga2V5Y29kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgc2NhbmNvZGUKKyAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICogQHNjYW5jb2RlOgl0aGUgc2NhbmNvZGUgdGhhdCB3ZSdyZSBzZWVraW5nCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIGlucHV0IHJvdXRpbmVzIHdoZW4gYSBrZXkgaXMgcHJlc3NlZCBhdCB0aGUKKyAqIElSLiBUaGUgc2NhbmNvZGUgaXMgcmVjZWl2ZWQgYW5kIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGEga2V5Y29kZS4KKyAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCBpdCByZXR1cm5zIEtFWV9VTktOT1dOLiBPdGhlcndpc2UsIHJldHVybnMgdGhlCisgKiBjb3JyZXNwb25kaW5nIGtleWNvZGUgZnJvbSB0aGUgdGFibGUuCisgKi8KK3UzMiBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHUzMiBzY2FuY29kZSkKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiID0gJmlyX2Rldi0+cmNfdGFiOworCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gcmNfdGFiLT5zY2FuOworCWludCBlbGVtOworCisJZWxlbSA9IGlyX3NlZWtfdGFibGUocmNfdGFiLCBzY2FuY29kZSk7CisJaWYgKGVsZW0gPj0gMCkgeworCQlJUl9kcHJpbnRrKDEsICIlczogc2NhbmNvZGUgMHglMDR4IGtleWNvZGUgMHglMDJ4XG4iLAorCQkJICAgZGV2LT5uYW1lLCBzY2FuY29kZSwga2V5bWFwW2VsZW1dLmtleWNvZGUpOworCisJCXJldHVybiByY190YWItPnNjYW5bZWxlbV0ua2V5Y29kZTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBrZXkgZm9yIHNjYW5jb2RlIDB4JTA0eFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBzY2FuY29kZSk7CisKKwkvKiBSZXBvcnRzIHVzZXJzcGFjZSB0aGF0IGFuIHVua25vd24ga2V5Y29kZSB3ZXJlIGdvdCAqLworCXJldHVybiBLRVlfUkVTRVJWRUQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcl9nX2tleWNvZGVfZnJvbV90YWJsZSk7CisKKy8qKgorICogaXJfaW5wdXRfcmVnaXN0ZXIoKSAtIHNldHMgdGhlIElSIGtleWNvZGUgdGFibGUgYW5kIGFkZCB0aGUgaGFuZGxlcnMKKyAqCQkJICAgIGZvciBrZXltYXAgdGFibGUgZ2V0L3NldAorICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKiBAcmNfdGFiOgl0aGUgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHRhYmxlIG9mIHNjYW5jb2RlL2tleW1hcAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGlucHV0IGluZnJhc3RydWN0dXJlIHRvIHdvcmsgd2l0aAorICogYW4gSVIuCisgKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgSVIgZGV2aWNlLgorICovCitpbnQgaXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkgICAgICBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYikKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7CisJc3RydWN0IGlyX3NjYW5jb2RlICAqa2V5bWFwICAgID0gcmNfdGFiLT5zY2FuOworCWludCBpLCByYzsKKworCWlmIChyY190YWItPnNjYW4gPT0gTlVMTCB8fCAhcmNfdGFiLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlyX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCppcl9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlyX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmcmNfdGFiLT5sb2NrKTsKKworCWlyX2Rldi0+cmNfdGFiLnNpemUgPSBpcl9yb3VuZHVwX3RhYmxlc2l6ZShyY190YWItPnNpemUpOworCWlyX2Rldi0+cmNfdGFiLnNjYW4gPSBremFsbG9jKGlyX2Rldi0+cmNfdGFiLnNpemUgKgorCQkJCSAgICBzaXplb2Yoc3RydWN0IGlyX3NjYW5jb2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpcl9kZXYtPnJjX3RhYi5zY2FuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJWQga2V5Y29kZSBlbnRyaWVzICglemQgYnl0ZXMpXG4iLAorCQlpcl9kZXYtPnJjX3RhYi5zaXplLAorCQlpcl9kZXYtPnJjX3RhYi5zaXplICogc2l6ZW9mKGlyX2Rldi0+cmNfdGFiLnNjYW4pKTsKKworCWlyX2NvcHlfdGFibGUoJmlyX2Rldi0+cmNfdGFiLCByY190YWIpOworCisJLyogc2V0IHRoZSBiaXRzIGZvciB0aGUga2V5cyAqLworCUlSX2RwcmludGsoMSwgImtleSBtYXAgc2l6ZTogJWRcbiIsIHJjX3RhYi0+c2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHJjX3RhYi0+c2l6ZTsgaSsrKSB7CisJCUlSX2RwcmludGsoMSwgIiMlZDogc2V0dGluZyBiaXQgZm9yIGtleWNvZGUgMHglMDR4XG4iLAorCQkJaSwga2V5bWFwW2ldLmtleWNvZGUpOworCQlzZXRfYml0KGtleW1hcFtpXS5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJfQorCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlzZXRfYml0KEVWX0tFWSwgaW5wdXRfZGV2LT5ldmJpdCk7CisKKwlpbnB1dF9kZXYtPmdldGtleWNvZGUgPSBpcl9nZXRrZXljb2RlOworCWlucHV0X2Rldi0+c2V0a2V5Y29kZSA9IGlyX3NldGtleWNvZGU7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBpcl9kZXYpOworCisJcmMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCWtmcmVlKHJjX3RhYi0+c2Nhbik7CisJCWtmcmVlKGlyX2Rldik7CisJCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfcmVnaXN0ZXIpOworCit2b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWI7CisKKwlpZiAoIWlyX2RldikKKwkJcmV0dXJuOworCisJSVJfZHByaW50aygxLCAiRnJlZWQga2V5Y29kZSB0YWJsZVxuIik7CisKKwlyY190YWIgPSAmaXJfZGV2LT5yY190YWI7CisJcmNfdGFiLT5zaXplID0gMDsKKwlrZnJlZShyY190YWItPnNjYW4pOworCXJjX3RhYi0+c2NhbiA9IE5VTEw7CisKKwlrZnJlZShpcl9kZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF91bnJlZ2lzdGVyKTsKKworaW50IGlyX2NvcmVfZGVidWc7ICAgIC8qIGlyX2RlYnVnIGxldmVsICgwLDEsMikgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvcmVfZGVidWcpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpcl9jb3JlX2RlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwppbmRleCBiYTY5YmVlLi5hMjg1NDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCkBAIC05OSw2ICs5OSw3IEBACiBjb21tZW50ICJNdWx0aW1lZGlhIGRyaXZlcnMiCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnIgogCiAjCiAjIFR1bmVyIGRyaXZlcnMgZm9yIERWQiBhbmQgVjRMCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9NYWtlZmlsZQppbmRleCAwOWE4MjlkLi40OTliMDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIG11bHRpbWVkaWEgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLW9iai15ICs9IGNvbW1vbi8gdmlkZW8vCitvYmoteSArPSBjb21tb24vIElSLyB2aWRlby8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0RFVikgKz0gcmFkaW8vCiBvYmotJChDT05GSUdfRFZCX0NPUkUpICArPSBkdmIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlCmluZGV4IDE2OWIzMzcuLmUzZWM5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlCkBAIC0xLDggKzEsNiBAQAogc2FhNzE0Ni1vYmpzICAgIDo9IHNhYTcxNDZfaTJjLm8gc2FhNzE0Nl9jb3JlLm8KIHNhYTcxNDZfdnYtb2JqcyA6PSBzYWE3MTQ2X2ZvcHMubyBzYWE3MTQ2X3ZpZGVvLm8gc2FhNzE0Nl9obHAubyBzYWE3MTQ2X3ZiaS5vCi1pci1jb21tb24tb2JqcyAgOj0gaXItZnVuY3Rpb25zLm8gaXIta2V5bWFwcy5vIGlyLWtleXRhYmxlLm8KIAogb2JqLXkgKz0gdHVuZXJzLwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxNDYpICs9IHNhYTcxNDYubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxNDZfVlYpICs9IHNhYTcxNDZfdnYubwotb2JqLSQoQ09ORklHX1ZJREVPX0lSKSArPSBpci1jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYxNmY2Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYworKysgL2Rldi9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vKgotICoKLSAqIHNvbWUgY29tbW9uIHN0cnVjdHMgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgaW5mcmFyZWQgcmVtb3RlcyB2aWEKLSAqIGlucHV0IGxheWVyIC4uLgotICoKLSAqIChjKSAyMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1NT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBpbnQgcmVwZWF0ID0gMTsKLW1vZHVsZV9wYXJhbShyZXBlYXQsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlcGVhdCwiYXV0by1yZXBlYXQgZm9yIElSIGtleXMgKGRlZmF1bHQ6IG9uKSIpOwotCi1pbnQgbWVkaWFfaXJfZGVidWc7ICAgIC8qIG1lZGlhX2lyX2RlYnVnIGxldmVsICgwLDEsMikgKi8KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgbWVkaWFfaXJfZGVidWcsIGludCwgMDY0NCk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIGlyX2lucHV0X2tleV9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIpCi17Ci0JaWYgKEtFWV9SRVNFUlZFRCA9PSBpci0+a2V5Y29kZSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBrZXk6IGtleT0weCUwMnggZG93bj0lZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaXItPmlyX2tleSwgaXItPmtleXByZXNzZWQpOwotCQlyZXR1cm47Ci0JfQotCUlSX2RwcmludGsoMSwiJXM6IGtleSBldmVudCBjb2RlPSVkIGRvd249JWRcbiIsCi0JCWRldi0+bmFtZSxpci0+a2V5Y29kZSxpci0+a2V5cHJlc3NlZCk7Ci0JaW5wdXRfcmVwb3J0X2tleShkZXYsaXItPmtleWNvZGUsaXItPmtleXByZXNzZWQpOwotCWlucHV0X3N5bmMoZGV2KTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW50IGlyX2lucHV0X2luaXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAotCQkgICBpbnQgaXJfdHlwZSwgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcykKLXsKLQlpci0+aXJfdHlwZSA9IGlyX3R5cGU7Ci0KLQlpci0+a2V5dGFibGUuc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKGlyX2NvZGVzLT5zaXplKTsKLQlpci0+a2V5dGFibGUuc2NhbiA9IGt6YWxsb2MoaXItPmtleXRhYmxlLnNpemUgKgotCQkJCSAgICBzaXplb2Yoc3RydWN0IGlyX3NjYW5jb2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpci0+a2V5dGFibGUuc2NhbikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlJUl9kcHJpbnRrKDEsICJBbGxvY2F0ZWQgc3BhY2UgZm9yICVkIGtleWNvZGUgZW50cmllcyAoJXpkIGJ5dGVzKVxuIiwKLQkJaXItPmtleXRhYmxlLnNpemUsCi0JCWlyLT5rZXl0YWJsZS5zaXplICogc2l6ZW9mKGlyLT5rZXl0YWJsZS5zY2FuKSk7Ci0KLQlpcl9jb3B5X3RhYmxlKCZpci0+a2V5dGFibGUsIGlyX2NvZGVzKTsKLQlpcl9zZXRfa2V5Y29kZV90YWJsZShkZXYsICZpci0+a2V5dGFibGUpOwotCi0JY2xlYXJfYml0KDAsIGRldi0+a2V5Yml0KTsKLQlzZXRfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCk7Ci0JaWYgKHJlcGVhdCkKLQkJc2V0X2JpdChFVl9SRVAsIGRldi0+ZXZiaXQpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9pbml0KTsKLQotCi12b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcikKLXsKLQlpZiAoaXItPmtleXByZXNzZWQpIHsKLQkJaXItPmtleXByZXNzZWQgPSAwOwotCQlpcl9pbnB1dF9rZXlfZXZlbnQoZGV2LGlyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9ub2tleSk7Ci0KLXZvaWQgaXJfaW5wdXRfa2V5ZG93bihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgICAgIHUzMiBpcl9rZXkpCi17Ci0JdTMyIGtleWNvZGUgPSBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShkZXYsIGlyX2tleSk7Ci0KLQlpZiAoaXItPmtleXByZXNzZWQgJiYgaXItPmtleWNvZGUgIT0ga2V5Y29kZSkgewotCQlpci0+a2V5cHJlc3NlZCA9IDA7Ci0JCWlyX2lucHV0X2tleV9ldmVudChkZXYsaXIpOwotCX0KLQlpZiAoIWlyLT5rZXlwcmVzc2VkKSB7Ci0JCWlyLT5pcl9rZXkgID0gaXJfa2V5OwotCQlpci0+a2V5Y29kZSA9IGtleWNvZGU7Ci0JCWlyLT5rZXlwcmVzc2VkID0gMTsKLQkJaXJfaW5wdXRfa2V5X2V2ZW50KGRldixpcik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfa2V5ZG93bik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBleHRyYWN0IG1hc2sgYml0cyBvdXQgb2YgZGF0YSBhbmQgcGFjayB0aGVtIGludG8gdGhlIHJlc3VsdCAqLwotdTMyIGlyX2V4dHJhY3RfYml0cyh1MzIgZGF0YSwgdTMyIG1hc2spCi17Ci0JdTMyIHZiaXQgPSAxLCB2YWx1ZSA9IDA7Ci0KLQlkbyB7Ci0JICAgIGlmIChtYXNrJjEpIHsKLQkJaWYgKGRhdGEmMSkKLQkJCXZhbHVlIHw9IHZiaXQ7Ci0JCXZiaXQ8PD0xOwotCSAgICB9Ci0JICAgIGRhdGE+Pj0xOwotCX0gd2hpbGUgKG1hc2s+Pj0xKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2V4dHJhY3RfYml0cyk7Ci0KLXN0YXRpYyBpbnQgaW5saW5lIGdldGJpdCh1MzIgKnNhbXBsZXMsIGludCBiaXQpCi17Ci0JcmV0dXJuIChzYW1wbGVzW2JpdC8zMl0gJiAoMSA8PCAoMzEtKGJpdCUzMikpKSkgPyAxIDogMDsKLX0KLQotLyogc3VtcCByYXcgc2FtcGxlcyBmb3IgdmlzdWFsIGRlYnVnZ2luZyA7KSAqLwotaW50IGlyX2R1bXBfc2FtcGxlcyh1MzIgKnNhbXBsZXMsIGludCBjb3VudCkKLXsKLQlpbnQgaSwgYml0LCBzdGFydDsKLQotCXByaW50ayhLRVJOX0RFQlVHICJpciBzYW1wbGVzOiAiKTsKLQlzdGFydCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgewotCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKLQkJaWYgKGJpdCkKLQkJCXN0YXJ0ID0gMTsKLQkJaWYgKDAgPT0gc3RhcnQpCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKCIlcyIsIGJpdCA/ICIjIiA6ICJfIik7Ci0JfQotCXByaW50aygiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2R1bXBfc2FtcGxlcyk7Ci0KLS8qIGRlY29kZSByYXcgc2FtcGxlcywgcHVsc2UgZGlzdGFuY2UgY29kaW5nIHVzZWQgYnkgTkVDIHJlbW90ZXMgKi8KLWludCBpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpCi17Ci0JaW50IGksbGFzdCxiaXQsbGVuOwotCXUzMiBjdXJCaXQ7Ci0JdTMyIHZhbHVlOwotCi0JLyogZmluZCBzdGFydCBidXJzdCAqLwotCWZvciAoaSA9IGxlbiA9IDA7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKLQkJYml0ID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChiaXQpIHsKLQkJCWxlbisrOwotCQl9IGVsc2UgewotCQkJaWYgKGxlbiA+PSAyOSkKLQkJCQlicmVhazsKLQkJCWxlbiA9IDA7Ci0JCX0KLQl9Ci0KLQkvKiBzdGFydCBidXJzdCB0byBzaG9ydCAqLwotCWlmIChsZW4gPCAyOSkKLQkJcmV0dXJuIDB4ZmZmZmZmZmY7Ci0KLQkvKiBmaW5kIHN0YXJ0IHNpbGVuY2UgKi8KLQlmb3IgKGxlbiA9IDA7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKLQkJYml0ID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChiaXQpIHsKLQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJbGVuKys7Ci0JCX0KLQl9Ci0KLQkvKiBzaWxlbmNlIHRvIHNob3J0ICovCi0JaWYgKGxlbiA8IDcpCi0JCXJldHVybiAweGZmZmZmZmZmOwotCi0JLyogZ28gZGVjb2RpbmcgKi8KLQlsZW4gICA9IDA7Ci0JbGFzdCA9IDE7Ci0JdmFsdWUgPSAwOyBjdXJCaXQgPSAxOwotCWZvciAoOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7Ci0JCWJpdCAgPSBnZXRiaXQoc2FtcGxlcyxpKTsKLQkJaWYgKGxhc3QpIHsKLQkJCWlmKGJpdCkgewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlsZW4gPSAxOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGJpdCkgewotCQkJCWlmIChsZW4gPiAobG93ICsgaGlnaCkgLzIpCi0JCQkJCXZhbHVlIHw9IGN1ckJpdDsKLQkJCQljdXJCaXQgPDw9IDE7Ci0JCQkJaWYgKGN1ckJpdCA9PSAxKQotCQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJbGVuKys7Ci0JCQl9Ci0JCX0KLQkJbGFzdCA9IGJpdDsKLQl9Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSk7Ci0KLS8qIGRlY29kZSByYXcgc2FtcGxlcywgYmlwaGFzZSBjb2RpbmcsIHVzZWQgYnkgcmM1IGZvciBleGFtcGxlICovCi1pbnQgaXJfZGVjb2RlX2JpcGhhc2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKQotewotCWludCBpLGxhc3QsYml0LGxlbixmbGlwczsKLQl1MzIgdmFsdWU7Ci0KLQkvKiBmaW5kIHN0YXJ0IGJpdCAoMSkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKLQkJaWYgKGJpdCkKLQkJCWJyZWFrOwotCX0KLQotCS8qIGdvIGRlY29kaW5nICovCi0JbGVuICAgPSAwOwotCWZsaXBzID0gMDsKLQl2YWx1ZSA9IDE7Ci0JZm9yICg7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKLQkJaWYgKGxlbiA+IGhpZ2gpCi0JCQlicmVhazsKLQkJaWYgKGZsaXBzID4gMSkKLQkJCWJyZWFrOwotCQlsYXN0ID0gYml0OwotCQliaXQgID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChsYXN0ID09IGJpdCkgewotCQkJbGVuKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobGVuIDwgbG93KSB7Ci0JCQlsZW4rKzsKLQkJCWZsaXBzKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQl2YWx1ZSA8PD0gMTsKLQkJdmFsdWUgfD0gYml0OwotCQlmbGlwcyA9IDA7Ci0JCWxlbiAgID0gMTsKLQl9Ci0JcmV0dXJuIHZhbHVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX2JpcGhhc2UpOwotCi0vKiBSQzUgZGVjb2Rpbmcgc3R1ZmYsIG1vdmVkIGZyb20gYnR0di1pbnB1dC5jIHRvIHNoYXJlIGl0IHdpdGgKLSAqIHNhYTcxMzQgKi8KLQotLyogZGVjb2RlIHJhdyBiaXQgcGF0dGVybiB0byBSQzUgY29kZSAqLwotdTMyIGlyX3JjNV9kZWNvZGUodW5zaWduZWQgaW50IGNvZGUpCi17Ci0JdW5zaWduZWQgaW50IG9yZ19jb2RlID0gY29kZTsKLQl1bnNpZ25lZCBpbnQgcGFpcjsKLQl1bnNpZ25lZCBpbnQgcmM1ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNDsgKytpKSB7Ci0JCXBhaXIgPSBjb2RlICYgMHgzOwotCQljb2RlID4+PSAyOwotCi0JCXJjNSA8PD0gMTsKLQkJc3dpdGNoIChwYWlyKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAyOgotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXJjNSB8PSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjogaXJfcmM1X2RlY29kZSgleCkgYmFkIGNvZGVcbiIsIG9yZ19jb2RlKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjogY29kZT0leCwgcmM1PSV4LCBzdGFydD0leCwgdG9nZ2xlPSV4LCBhZGRyZXNzPSV4LCAiCi0JCSJpbnN0cj0leFxuIiwgcmM1LCBvcmdfY29kZSwgUkM1X1NUQVJUKHJjNSksCi0JCVJDNV9UT0dHTEUocmM1KSwgUkM1X0FERFIocmM1KSwgUkM1X0lOU1RSKHJjNSkpOwotCXJldHVybiByYzU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yYzVfZGVjb2RlKTsKLQotdm9pZCBpcl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSAoc3RydWN0IGNhcmRfaXIgKilkYXRhOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXVuc2lnbmVkIGxvbmcgY3VycmVudF9qaWZmaWVzLCB0aW1lb3V0OwotCXUzMiBnYXA7Ci0JdTMyIHJjNSA9IDA7Ci0KLQkvKiBnZXQgdGltZSAqLwotCWN1cnJlbnRfamlmZmllcyA9IGppZmZpZXM7Ci0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLQkvKiBhdm9pZCBvdmVyZmxvdyB3aXRoIGdhcCA+MXMgKi8KLQlpZiAodHYudHZfc2VjIC0gaXItPmJhc2VfdGltZS50dl9zZWMgPiAxKSB7Ci0JCWdhcCA9IDIwMDAwMDsKLQl9IGVsc2UgewotCQlnYXAgPSAxMDAwMDAwICogKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjKSArCi0JCSAgICB0di50dl91c2VjIC0gaXItPmJhc2VfdGltZS50dl91c2VjOwotCX0KLQotCS8qIHNpZ25hbCB3ZSdyZSByZWFkeSB0byBzdGFydCBhIG5ldyBjb2RlICovCi0JaXItPmFjdGl2ZSA9IDA7Ci0KLQkvKiBBbGxvdyBzb21lIHRpbWVyIGppdHRlciAoUkM1IGlzIH4yNG1zIGFueXdheSBzbyB0aGlzIGlzIG9rKSAqLwotCWlmIChnYXAgPCAyODAwMCkgewotCQlJUl9kcHJpbnRrKDEsICJpci1jb21tb246IHNwdXJpb3VzIHRpbWVyX2VuZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaXItPmxhc3RfYml0IDwgMjApIHsKLQkJLyogaWdub3JlIHNwdXJpb3VzIGNvZGVzIChjYXVzZWQgYnkgbGlnaHQvb3RoZXIgcmVtb3RlcykgKi8KLQkJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiBzaG9ydCBjb2RlOiAleFxuIiwgaXItPmNvZGUpOwotCX0gZWxzZSB7Ci0JCWlyLT5jb2RlID0gKGlyLT5jb2RlIDw8IGlyLT5zaGlmdF9ieSkgfCAxOwotCQlyYzUgPSBpcl9yYzVfZGVjb2RlKGlyLT5jb2RlKTsKLQotCQkvKiB0d28gc3RhcnQgYml0cz8gKi8KLQkJaWYgKFJDNV9TVEFSVChyYzUpICE9IGlyLT5zdGFydCkgewotCQkJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiByYzUgc3RhcnQgYml0cyBpbnZhbGlkOiAldVxuIiwgUkM1X1NUQVJUKHJjNSkpOwotCi0JCQkvKiByaWdodCBhZGRyZXNzPyAqLwotCQl9IGVsc2UgaWYgKFJDNV9BRERSKHJjNSkgPT0gaXItPmFkZHIpIHsKLQkJCXUzMiB0b2dnbGUgPSBSQzVfVE9HR0xFKHJjNSk7Ci0JCQl1MzIgaW5zdHIgPSBSQzVfSU5TVFIocmM1KTsKLQotCQkJLyogR29vZCBjb2RlLCBkZWNpZGUgaWYgcmVwZWF0L3JlcHJlc3MgKi8KLQkJCWlmICh0b2dnbGUgIT0gUkM1X1RPR0dMRShpci0+bGFzdF9yYzUpIHx8Ci0JCQkgICAgaW5zdHIgIT0gUkM1X0lOU1RSKGlyLT5sYXN0X3JjNSkpIHsKLQkJCQlJUl9kcHJpbnRrKDEsICJpci1jb21tb246IGluc3RydWN0aW9uICV4LCB0b2dnbGUgJXhcbiIsIGluc3RyLAotCQkJCQl0b2dnbGUpOwotCQkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOwotCQkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgaW5zdHIpOwotCQkJfQotCi0JCQkvKiBTZXQvcmVzZXQga2V5LXVwIHRpbWVyICovCi0JCQl0aW1lb3V0ID0gY3VycmVudF9qaWZmaWVzICsKLQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoaXItPnJjNV9rZXlfdGltZW91dCk7Ci0JCQltb2RfdGltZXIoJmlyLT50aW1lcl9rZXl1cCwgdGltZW91dCk7Ci0KLQkJCS8qIFNhdmUgY29kZSBmb3IgcmVwZWF0IHRlc3QgKi8KLQkJCWlyLT5sYXN0X3JjNSA9IHJjNTsKLQkJfQotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV90aW1lcl9lbmQpOwotCi12b2lkIGlyX3JjNV90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGNhcmRfaXIgKmlyID0gKHN0cnVjdCBjYXJkX2lyICopZGF0YTsKLQotCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjoga2V5IHJlbGVhc2VkXG4iKTsKLQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV90aW1lcl9rZXl1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOGM5NzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMxNiArMCwwIEBACi0vKgotICAgIEtleXRhYmxlcyBmb3Igc3VwcG9ydGVkIHJlbW90ZSBjb250cm9scywgdXNlZCBvbiBkcml2ZXJzL21lZGlhCi0gICAgZGV2aWNlcy4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotLyoKLSAqIE5PVElDRSBGT1IgREVWRUxPUEVSUzoKLSAqICAgVGhlIElSIG1hcHBpbmdzIHNob3VsZCBiZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB3aGF0J3MKLSAqICAgc3BlY2lmaWVkIGF0OgotICogICAgICBodHRwOi8vbGludXh0di5vcmcvd2lraS9pbmRleC5waHAvUmVtb3RlX0NvbnRyb2xsZXJzCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+Ci0KLS8qIGVtcHR5IGtleXRhYmxlLCBjYW4gYmUgdXNlZCBhcyBwbGFjZWhvbGRlciBmb3Igbm90LXlldCBjcmVhdGVkIGtleXRhYmxlcyAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbXB0eVtdID0gewotCXsgMHgyYSwgS0VZX0NPRkZFRSB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VtcHR5X3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZW1wdHksCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2VtcHR5KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbXB0eV90YWJsZSk7Ci0KLS8qIE1pY2hhbCBNYWpjaHJvd2ljeiA8bW1hamNocm93aWN6QGdtYWlsLmNvbT4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcHJvdGV1c18yMzA5W10gPSB7Ci0JLyogbnVtZXJpYyAqLwotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCXsgMHg1YywgS0VZX1BPV0VSIH0sCQkvKiBwb3dlciAgICAgICAqLwotCXsgMHgyMCwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JeyAweDBmLCBLRVlfQkFDS1NQQUNFIH0sCS8qIHJlY2FsbCAgICAgICovCi0JeyAweDFiLCBLRVlfRU5URVIgfSwJCS8qIG11dGUgICAgICAgICovCi0JeyAweDQxLCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmQgICAgICAqLwotCXsgMHg0MywgS0VZX1NUT1AgfSwJCS8qIHN0b3AgICAgICAgICovCi0JeyAweDE2LCBLRVlfUyB9LAotCXsgMHgxYSwgS0VZX1BPV0VSMiB9LAkJLyogb2ZmICAgICAgICAgKi8KLQl7IDB4MmUsIEtFWV9SRUQgfSwKLQl7IDB4MWYsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC0gICAqLwotCXsgMHgxYywgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaGFubmVsICsgICAqLwotCXsgMHgxMCwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sdW1lIC0gICAgKi8KLQl7IDB4MWUsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sdW1lICsgICAgKi8KLQl7IDB4MTQsIEtFWV9GMSB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Byb3RldXNfMjMwOV90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3Byb3RldXNfMjMwOSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcHJvdGV1c18yMzA5KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wcm90ZXVzXzIzMDlfdGFibGUpOwotCi0vKiBNYXR0IEplc3NvbiA8ZHZiQGplc3Nvbi5lY2xpcHNlLmNvLnVrICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0W10gPSB7Ci0JeyAweDI4LCBLRVlfMCB9LAkJLyogJzAnIC8gJ2VudGVyJyAqLwotCXsgMHgyMiwgS0VZXzEgfSwJCS8qICcxJyAqLwotCXsgMHgxMiwgS0VZXzIgfSwJCS8qICcyJyAvICd1cCBhcnJvdycgKi8KLQl7IDB4MzIsIEtFWV8zIH0sCQkvKiAnMycgKi8KLQl7IDB4MjQsIEtFWV80IH0sCQkvKiAnNCcgLyAnbGVmdCBhcnJvdycgKi8KLQl7IDB4MTQsIEtFWV81IH0sCQkvKiAnNScgKi8KLQl7IDB4MzQsIEtFWV82IH0sCQkvKiAnNicgLyAncmlnaHQgYXJyb3cnICovCi0JeyAweDI2LCBLRVlfNyB9LAkJLyogJzcnICovCi0JeyAweDE2LCBLRVlfOCB9LAkJLyogJzgnIC8gJ2Rvd24gYXJyb3cnICovCi0JeyAweDM2LCBLRVlfOSB9LAkJLyogJzknICovCi0KLQl7IDB4MjAsIEtFWV9MSVNUIH0sCQkvKiAnc291cmNlJyAqLwotCXsgMHgxMCwgS0VZX1RFWFQgfSwJCS8qICd0ZWxldGV4dCcgKi8KLQl7IDB4MDAsIEtFWV9QT1dFUiB9LAkJLyogJ3Bvd2VyJyAqLwotCXsgMHgwNCwgS0VZX0FVRElPIH0sCQkvKiAnYXVkaW8nICovCi0JeyAweDA2LCBLRVlfWk9PTSB9LAkJLyogJ2Z1bGwgc2NyZWVuJyAqLwotCXsgMHgxOCwgS0VZX1ZJREVPIH0sCQkvKiAnZGlzcGxheScgKi8KLQl7IDB4MzgsIEtFWV9TRUFSQ0ggfSwJCS8qICdsb29wJyAqLwotCXsgMHgwOCwgS0VZX0lORk8gfSwJCS8qICdwcmV2aWV3JyAqLwotCXsgMHgyYSwgS0VZX1JFV0lORCB9LAkJLyogJ2JhY2t3YXJkIDw8JyAqLwotCXsgMHgxYSwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qICdmb3J3YXJkID4+JyAqLwotCXsgMHgzYSwgS0VZX1JFQ09SRCB9LAkJLyogJ2NhcHR1cmUnICovCi0JeyAweDBhLCBLRVlfTVVURSB9LAkJLyogJ211dGUnICovCi0JeyAweDJjLCBLRVlfUkVDT1JEIH0sCQkvKiAncmVjb3JkJyAqLwotCXsgMHgxYywgS0VZX1BBVVNFIH0sCQkvKiAncGF1c2UnICovCi0JeyAweDNjLCBLRVlfU1RPUCB9LAkJLyogJ3N0b3AnICovCi0JeyAweDBjLCBLRVlfUExBWSB9LAkJLyogJ3BsYXknICovCi0JeyAweDJlLCBLRVlfUkVEIH0sCQkvKiAncmVkJyAqLwotCXsgMHgwMSwgS0VZX0JMVUUgfSwJCS8qICdibHVlJyAvICdjYW5jZWwnICovCi0JeyAweDBlLCBLRVlfWUVMTE9XIH0sCQkvKiAneWVsbG93JyAvICdvaycgKi8KLQl7IDB4MjEsIEtFWV9HUkVFTiB9LAkJLyogJ2dyZWVuJyAqLwotCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qICdjaGFubmVsIC0nICovCi0JeyAweDMxLCBLRVlfQ0hBTk5FTFVQIH0sCS8qICdjaGFubmVsICsnICovCi0JeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiAndm9sdW1lIC0nICovCi0JeyAweDNlLCBLRVlfVk9MVU1FVVAgfSwJCS8qICd2b2x1bWUgKycgKi8KLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVybWVkaWFfZHZidCksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRfdGFibGUpOwotCi0vKiBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhW10gPSB7Ci0JeyAweDAwLCBLRVlfUE9XRVIyIH0sCi0JeyAweDJlLCBLRVlfRE9UIH0sCQkvKiAnLicgKi8KLQl7IDB4MDEsIEtFWV9NT0RFIH0sCQkvKiBUVi9GTSAqLwotCi0JeyAweDA1LCBLRVlfMSB9LAotCXsgMHgwNiwgS0VZXzIgfSwKLQl7IDB4MDcsIEtFWV8zIH0sCi0JeyAweDA5LCBLRVlfNCB9LAotCXsgMHgwYSwgS0VZXzUgfSwKLQl7IDB4MGIsIEtFWV82IH0sCi0JeyAweDBkLCBLRVlfNyB9LAotCXsgMHgwZSwgS0VZXzggfSwKLQl7IDB4MGYsIEtFWV85IH0sCi0JeyAweDExLCBLRVlfMCB9LAotCi0JeyAweDEzLCBLRVlfUklHSFQgfSwJCS8qIC0+ICovCi0JeyAweDEyLCBLRVlfTEVGVCB9LAkJLyogPC0gKi8KLQotCXsgMHgxNywgS0VZX1NMRUVQIH0sCQkvKiBDYXB0dXJhciBJbWFnZW0gKi8KLQl7IDB4MTAsIEtFWV9TSFVGRkxFIH0sCQkvKiBBbW9zdHJhICovCi0KLQkvKiBGSVhNRTogVGhlIGtleXMgYmVsbG93IGFyZW4ndCBvayAqLwotCi0JeyAweDQzLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDQyLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MWYsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MGMsIEtFWV9FTlRFUiB9LAotCi0JeyAweDE0LCBLRVlfTVVURSB9LAotCXsgMHgwOCwgS0VZX0FVRElPIH0sCi0KLQl7IDB4MDMsIEtFWV9URVhUIH0sCi0JeyAweDA0LCBLRVlfRVBHIH0sCi0JeyAweDJiLCBLRVlfVFYyIH0sCQkvKiBUVjIgKi8KLQotCXsgMHgxZCwgS0VZX1JFRCB9LAotCXsgMHgxYywgS0VZX1lFTExPVyB9LAotCXsgMHg0MSwgS0VZX0dSRUVOIH0sCi0JeyAweDQwLCBLRVlfQkxVRSB9LAotCi0JeyAweDFhLCBLRVlfUExBWVBBVVNFIH0sCi0JeyAweDE5LCBLRVlfUkVDT1JEIH0sCi0JeyAweDE4LCBLRVlfUExBWSB9LAotCXsgMHgxYiwgS0VZX1NUT1AgfSwKLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWFfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YSksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhX3RhYmxlKTsKLQotLyogT2xkcmljaCBKZWRsaWNrYSA8b2xkaXVtLnByb0BzZXpuYW0uY3o+ICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW10gPSB7Ci0JeyAweDAwLCBLRVlfUE9XRVIgfSwKLQl7IDB4MDEsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KLQl7IDB4MDMsIEtFWV9URVhUIH0sCQkvKiBUZWxldGV4dCAqLwotCXsgMHgwNCwgS0VZX0VQRyB9LAotCXsgMHgwNSwgS0VZXzEgfSwKLQl7IDB4MDYsIEtFWV8yIH0sCi0JeyAweDA3LCBLRVlfMyB9LAotCXsgMHgwOCwgS0VZX0FVRElPIH0sCi0JeyAweDA5LCBLRVlfNCB9LAotCXsgMHgwYSwgS0VZXzUgfSwKLQl7IDB4MGIsIEtFWV82IH0sCi0JeyAweDBjLCBLRVlfWk9PTSB9LAkJLyogRnVsbCBzY3JlZW4gKi8KLQl7IDB4MGQsIEtFWV83IH0sCi0JeyAweDBlLCBLRVlfOCB9LAotCXsgMHgwZiwgS0VZXzkgfSwKLQl7IDB4MTAsIEtFWV9QQUdFVVAgfSwJCS8qIDE2LUNIIFBSRVYgKi8KLQl7IDB4MTEsIEtFWV8wIH0sCi0JeyAweDEyLCBLRVlfSU5GTyB9LAotCXsgMHgxMywgS0VZX0FHQUlOIH0sCQkvKiBDSCBSVE4gLSBjaGFubmVsIHJldHVybiAqLwotCXsgMHgxNCwgS0VZX01VVEUgfSwKLQl7IDB4MTUsIEtFWV9FRElUIH0sCQkvKiBBdXRvc2NhbiAqLwotCXsgMHgxNywgS0VZX1NBVkUgfSwJCS8qIFNjcmVlbnNob3QgKi8KLQl7IDB4MTgsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MTksIEtFWV9SRUNPUkQgfSwKLQl7IDB4MWEsIEtFWV9QTEFZIH0sCi0JeyAweDFiLCBLRVlfU1RPUCB9LAotCXsgMHgxYywgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDFkLCBLRVlfUkVXSU5EIH0sCi0JeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDIyLCBLRVlfU0xFRVAgfSwJCS8qIFNsZWVwICovCi0JeyAweDIzLCBLRVlfWk9PTSB9LAkJLyogQXNwZWN0ICovCi0JeyAweDI2LCBLRVlfU0NSRUVOIH0sCQkvKiBQb3MgKi8KLQl7IDB4MjcsIEtFWV9BTkdMRSB9LAkJLyogU2l6ZSAqLwotCXsgMHgyOCwgS0VZX1NFTEVDVCB9LAkJLyogU2VsZWN0ICovCi0JeyAweDI5LCBLRVlfQkxVRSB9LAkJLyogQmx1ZS9QaWN0dXJlICovCi0JeyAweDJhLCBLRVlfQkFDS1NQQUNFIH0sCS8qIEJhY2sgKi8KLQl7IDB4MmIsIEtFWV9NRURJQSB9LAkJLyogUElQIChQaWN0dXJlLWluLXBpY3R1cmUpICovCi0JeyAweDJjLCBLRVlfRE9XTiB9LAotCXsgMHgyZSwgS0VZX0RPVCB9LAotCXsgMHgyZiwgS0VZX1RWIH0sCQkvKiBMaXZlIFRWICovCi0JeyAweDMyLCBLRVlfTEVGVCB9LAotCXsgMHgzMywgS0VZX0NMRUFSIH0sCQkvKiBDbGVhciAqLwotCXsgMHgzNSwgS0VZX1JFRCB9LAkJLyogUmVkL1RWICovCi0JeyAweDM2LCBLRVlfVVAgfSwKLQl7IDB4MzcsIEtFWV9IT01FIH0sCQkvKiBIb21lICovCi0JeyAweDM5LCBLRVlfR1JFRU4gfSwJCS8qIEdyZWVuL1ZpZGVvICovCi0JeyAweDNkLCBLRVlfWUVMTE9XIH0sCQkvKiBZZWxsb3cvTXVzaWMgKi8KLQl7IDB4M2UsIEtFWV9PSyB9LAkJLyogT2sgKi8KLQl7IDB4M2YsIEtFWV9SSUdIVCB9LAotCXsgMHg0MCwgS0VZX05FWFQgfSwJCS8qIE5leHQgKi8KLQl7IDB4NDEsIEtFWV9QUkVWSU9VUyB9LAkJLyogUHJldmlvdXMgKi8KLQl7IDB4NDIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaGFubmVsIGRvd24gKi8KLQl7IDB4NDMsIEtFWV9DSEFOTkVMVVAgfSwJLyogQ2hhbm5lbCB1cCAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXMsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c190YWJsZSk7Ci0KLS8qIEF0dGlsYSBLb25kb3JvcyA8YXR0aWxhLmtvbmRvcm9zQGNoZWxsby5odT4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXBhY192aWV3Y29tcFtdID0gewotCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgxNywgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KLQl7IDB4MGEsIEtFWV9MSVNUIH0sCQkvKiByZWNhbGwgKi8KLQotCi0JeyAweDFjLCBLRVlfVFVORVIgfSwJCS8qIFRWL0ZNICovCi0JeyAweDE1LCBLRVlfU0VBUkNIIH0sCQkvKiBzY2FuICovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwJCS8qIHBvd2VyICovCi0JeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiB2b2wgdXAgKi8KLQl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sIGRvd24gKi8KLQl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaG4gdXAgKi8KLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2huIGRvd24gKi8KLQotCXsgMHgxMSwgS0VZX1ZJREVPIH0sCQkvKiB2aWRlbyAqLwotCXsgMHgwZiwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JeyAweDEzLCBLRVlfTVVURSB9LAkJLyogbXV0ZS91bm11dGUgKi8KLQl7IDB4MTAsIEtFWV9URVhUIH0sCQkvKiBtaW4gKi8KLQotCXsgMHgwZCwgS0VZX1NUT1AgfSwJCS8qIGZyZWV6ZSAqLwotCXsgMHgwZSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICovCi0JeyAweDFkLCBLRVlfUExBWVBBVVNFIH0sCS8qIHN0b3AgKi8KLQl7IDB4MTksIEtFWV9QTEFZIH0sCQkvKiBwbGF5ICovCi0KLQl7IDB4MTYsIEtFWV9HT1RPIH0sCQkvKiBvc2QgKi8KLQl7IDB4MTQsIEtFWV9SRUZSRVNIIH0sCQkvKiBkZWZhdWx0ICovCi0JeyAweDBjLCBLRVlfS1BQTFVTIH0sCQkvKiBmaW5lIHR1bmUgPj4+PiAqLwotCXsgMHgxOCwgS0VZX0tQTUlOVVMgfSwJCS8qIGZpbmUgdHVuZSA8PDw8ICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXBhY192aWV3Y29tcF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2FwYWNfdmlld2NvbXAsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2FwYWNfdmlld2NvbXApLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2FwYWNfdmlld2NvbXBfdGFibGUpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGl4ZWx2aWV3W10gPSB7Ci0KLQl7IDB4MWUsIEtFWV9QT1dFUiB9LAkvKiBwb3dlciAqLwotCXsgMHgwNywgS0VZX01FRElBIH0sCS8qIHNvdXJjZSAqLwotCXsgMHgxYywgS0VZX1NFQVJDSCB9LAkvKiBzY2FuICovCi0KLQotCXsgMHgwMywgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSAqLwotCi0JeyAweDAwLCBLRVlfUkVDT1JEIH0sCi0JeyAweDA4LCBLRVlfU1RPUCB9LAotCXsgMHgxMSwgS0VZX1BMQVkgfSwKLQotCXsgMHgxYSwgS0VZX1BMQVlQQVVTRSB9LAkvKiBmcmVlemUgKi8KLQl7IDB4MTksIEtFWV9aT09NIH0sCQkvKiB6b29tICovCi0JeyAweDBmLCBLRVlfVEVYVCB9LAkJLyogbWluICovCi0KLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDBiLCBLRVlfMiB9LAotCXsgMHgxYiwgS0VZXzMgfSwKLQl7IDB4MDUsIEtFWV80IH0sCi0JeyAweDA5LCBLRVlfNSB9LAotCXsgMHgxNSwgS0VZXzYgfSwKLQl7IDB4MDYsIEtFWV83IH0sCi0JeyAweDBhLCBLRVlfOCB9LAotCXsgMHgxMiwgS0VZXzkgfSwKLQl7IDB4MDIsIEtFWV8wIH0sCi0JeyAweDEwLCBLRVlfTEFTVCB9LAkJLyogKzEwMCAqLwotCXsgMHgxMywgS0VZX0xJU1QgfSwJCS8qIHJlY2FsbCAqLwotCi0JeyAweDFmLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNobiBkb3duICovCi0JeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2huIHVwICovCi0JeyAweDE2LCBLRVlfVk9MVU1FVVAgfSwJCS8qIHZvbCBkb3duICovCi0JeyAweDE0LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiB2b2wgdXAgKi8KLQotCXsgMHgwNCwgS0VZX0tQTUlOVVMgfSwJCS8qIDw8PCAqLwotCXsgMHgwZSwgS0VZX1NFVFVQIH0sCQkvKiBmdW5jdGlvbiAqLwotCXsgMHgwYywgS0VZX0tQUExVUyB9LAkJLyogPj4+ICovCi0KLQl7IDB4MGQsIEtFWV9HT1RPIH0sCQkvKiBtdHMgKi8KLQl7IDB4MWQsIEtFWV9SRUZSRVNIIH0sCQkvKiByZXNldCAqLwotCXsgMHgxOCwgS0VZX01VVEUgfSwJCS8qIG11dGUvdW5tdXRlICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGl4ZWx2aWV3X3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfcGl4ZWx2aWV3LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19waXhlbHZpZXcpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlld190YWJsZSk7Ci0KLS8qCi0gICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KLSAgIHByZXNlbnQgb24gUFYgTVBFRyA4MDAwR1QKLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waXhlbHZpZXdfbmV3W10gPSB7Ci0JeyAweDNjLCBLRVlfVElNRSB9LAkJLyogVGltZXNoaWZ0ICovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwKLQotCXsgMHgzZCwgS0VZXzEgfSwKLQl7IDB4MzgsIEtFWV8yIH0sCi0JeyAweDE4LCBLRVlfMyB9LAotCXsgMHgzNSwgS0VZXzQgfSwKLQl7IDB4MzksIEtFWV81IH0sCi0JeyAweDE1LCBLRVlfNiB9LAotCXsgMHgzNiwgS0VZXzcgfSwKLQl7IDB4M2EsIEtFWV84IH0sCi0JeyAweDFlLCBLRVlfOSB9LAotCXsgMHgzZSwgS0VZXzAgfSwKLQotCXsgMHgxYywgS0VZX0FHQUlOIH0sCQkvKiBMT09QCSovCi0JeyAweDNmLCBLRVlfTUVESUEgfSwJCS8qIFNvdXJjZSAqLwotCXsgMHgxZiwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KLQl7IDB4MWIsIEtFWV9NVVRFIH0sCi0KLQl7IDB4MTcsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxNiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDE0LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxMywgS0VZX1pPT00gfSwKLQotCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAkJLyogU05BUFNIT1QgKi8KLQl7IDB4MWEsIEtFWV9TRUFSQ0ggfSwJCS8qIHNjYW4gKi8KLQotCXsgMHgzNywgS0VZX1JFV0lORCB9LAkJLyogPDwgKi8KLQl7IDB4MzIsIEtFWV9SRUNPUkQgfSwJCS8qIG8gKHJlZCkgKi8KLQl7IDB4MzMsIEtFWV9GT1JXQVJEIH0sCQkvKiA+PiAqLwotCXsgMHgxMSwgS0VZX1NUT1AgfSwJCS8qIHNxdWFyZSAqLwotCXsgMHgzYiwgS0VZX1BMQVkgfSwJCS8qID4gKi8KLQl7IDB4MzAsIEtFWV9QTEFZUEFVU0UgfSwJLyogfHwgKi8KLQotCXsgMHgzMSwgS0VZX1RWIH0sCi0JeyAweDM0LCBLRVlfUkFESU8gfSwKLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19waXhlbHZpZXdfbmV3X3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfcGl4ZWx2aWV3X25ldywKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGl4ZWx2aWV3X25ldyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcGl4ZWx2aWV3X25ld190YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbmVidWxhW10gPSB7Ci0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCXsgMHgwYSwgS0VZX1RWIH0sCi0JeyAweDBiLCBLRVlfQVVYIH0sCi0JeyAweDBjLCBLRVlfRFZEIH0sCi0JeyAweDBkLCBLRVlfUE9XRVIgfSwKLQl7IDB4MGUsIEtFWV9NSFAgfSwJLyogbGFiZWxsZWQgJ1BpY3R1cmUnICovCi0JeyAweDBmLCBLRVlfQVVESU8gfSwKLQl7IDB4MTAsIEtFWV9JTkZPIH0sCi0JeyAweDExLCBLRVlfRjEzIH0sCS8qIDE2OjkgKi8KLQl7IDB4MTIsIEtFWV9GMTQgfSwJLyogMTQ6OSAqLwotCXsgMHgxMywgS0VZX0VQRyB9LAotCXsgMHgxNCwgS0VZX0VYSVQgfSwKLQl7IDB4MTUsIEtFWV9NRU5VIH0sCi0JeyAweDE2LCBLRVlfVVAgfSwKLQl7IDB4MTcsIEtFWV9ET1dOIH0sCi0JeyAweDE4LCBLRVlfTEVGVCB9LAotCXsgMHgxOSwgS0VZX1JJR0hUIH0sCi0JeyAweDFhLCBLRVlfRU5URVIgfSwKLQl7IDB4MWIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxZCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZiwgS0VZX1JFRCB9LAotCXsgMHgyMCwgS0VZX0dSRUVOIH0sCi0JeyAweDIxLCBLRVlfWUVMTE9XIH0sCi0JeyAweDIyLCBLRVlfQkxVRSB9LAotCXsgMHgyMywgS0VZX1NVQlRJVExFIH0sCi0JeyAweDI0LCBLRVlfRjE1IH0sCS8qIEFEICovCi0JeyAweDI1LCBLRVlfVEVYVCB9LAotCXsgMHgyNiwgS0VZX01VVEUgfSwKLQl7IDB4MjcsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MjgsIEtFWV9TVE9QIH0sCi0JeyAweDI5LCBLRVlfUExBWSB9LAotCXsgMHgyYSwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDJiLCBLRVlfRjE2IH0sCS8qIGNoYXB0ZXIgKi8KLQl7IDB4MmMsIEtFWV9QQVVTRSB9LAotCXsgMHgyZCwgS0VZX1BMQVkgfSwKLQl7IDB4MmUsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MmYsIEtFWV9GMTcgfSwJLyogcGljdHVyZSBpbiBwaWN0dXJlICovCi0JeyAweDMwLCBLRVlfS1BQTFVTIH0sCS8qIHpvb20gaW4gKi8KLQl7IDB4MzEsIEtFWV9LUE1JTlVTIH0sCS8qIHpvb20gb3V0ICovCi0JeyAweDMyLCBLRVlfRjE4IH0sCS8qIGNhcHR1cmUgKi8KLQl7IDB4MzMsIEtFWV9GMTkgfSwJLyogd2ViICovCi0JeyAweDM0LCBLRVlfRU1BSUwgfSwKLQl7IDB4MzUsIEtFWV9QSE9ORSB9LAotCXsgMHgzNiwgS0VZX1BDIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbmVidWxhX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfbmVidWxhLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19uZWJ1bGEpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lYnVsYV90YWJsZSk7Ci0KLS8qIERpZ2l0YWxOb3cgRE5UViBMaXZlIERWQi1UIFJlbW90ZSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RbXSA9IHsKLQl7IDB4MDAsIEtFWV9FU0MgfSwJCS8qICdnbyB1cCBhIGxldmVsPycgKi8KLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHgwYSwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCXsgMHgwYiwgS0VZX1RVTkVSIH0sCQkvKiB0di9mbSAqLwotCXsgMHgwYywgS0VZX1NFQVJDSCB9LAkJLyogc2NhbiAqLwotCXsgMHgwZCwgS0VZX1NUT1AgfSwKLQl7IDB4MGUsIEtFWV9QQVVTRSB9LAotCXsgMHgwZiwgS0VZX0xJU1QgfSwJCS8qIHNvdXJjZSAqLwotCi0JeyAweDEwLCBLRVlfTVVURSB9LAotCXsgMHgxMSwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgxMywgS0VZX0NBTUVSQSB9LAkJLyogc25hcCAqLwotCXsgMHgxNCwgS0VZX0FVRElPIH0sCQkvKiBzdGVyZW8gKi8KLQl7IDB4MTUsIEtFWV9DTEVBUiB9LAkJLyogcmVzZXQgKi8KLQl7IDB4MTYsIEtFWV9QTEFZIH0sCi0JeyAweDE3LCBLRVlfRU5URVIgfSwKLQl7IDB4MTgsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLwotCXsgMHgxOSwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxYywgS0VZX0lORk8gfSwJCS8qIHByZXZpZXcgKi8KLQl7IDB4MWQsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZCAqLwotCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdCwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZG50dl9saXZlX2R2Yl90KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RfdGFibGUpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIElPLURBVEEgQkNUVjdFIFJlbW90ZSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19pb2RhdGFfYmN0djdlW10gPSB7Ci0JeyAweDQwLCBLRVlfVFYgfSwKLQl7IDB4MjAsIEtFWV9SQURJTyB9LAkJLyogRk0gKi8KLQl7IDB4NjAsIEtFWV9FUEcgfSwKLQl7IDB4MDAsIEtFWV9QT1dFUiB9LAotCi0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4NDQsIEtFWV8wIH0sCQkvKiAxMCAqLwotCXsgMHg1MCwgS0VZXzEgfSwKLQl7IDB4MzAsIEtFWV8yIH0sCi0JeyAweDcwLCBLRVlfMyB9LAotCXsgMHg0OCwgS0VZXzQgfSwKLQl7IDB4MjgsIEtFWV81IH0sCi0JeyAweDY4LCBLRVlfNiB9LAotCXsgMHg1OCwgS0VZXzcgfSwKLQl7IDB4MzgsIEtFWV84IH0sCi0JeyAweDc4LCBLRVlfOSB9LAotCi0JeyAweDEwLCBLRVlfTCB9LAkJLyogTGl2ZSAqLwotCXsgMHgwOCwgS0VZX1RJTUUgfSwJCS8qIFRpbWUgU2hpZnQgKi8KLQotCXsgMHgxOCwgS0VZX1BMQVlQQVVTRSB9LAkvKiBQbGF5ICovCi0KLQl7IDB4MjQsIEtFWV9FTlRFUiB9LAkJLyogMTEgKi8KLQl7IDB4NjQsIEtFWV9FU0MgfSwJCS8qIDEyICovCi0JeyAweDA0LCBLRVlfTSB9LAkJLyogTXVsdGkgKi8KLQotCXsgMHg1NCwgS0VZX1ZJREVPIH0sCi0JeyAweDM0LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDc0LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTQsIEtFWV9NVVRFIH0sCi0KLQl7IDB4NGMsIEtFWV9WQ1IgfSwJCS8qIFNWSURFTyAqLwotCXsgMHgyYywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDZjLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwYywgS0VZX1pPT00gfSwKLQotCXsgMHg1YywgS0VZX1BBVVNFIH0sCi0JeyAweDNjLCBLRVlfUkVEIH0sCQkvKiB8fCAocmVkKSAqLwotCXsgMHg3YywgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCi0JeyAweDFjLCBLRVlfU1RPUCB9LAotCi0JeyAweDQxLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLwotCXsgMHgyMSwgS0VZX1BMQVkgfSwKLQl7IDB4NjEsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCi0JeyAweDAxLCBLRVlfTkVYVCB9LAkJLyogc2tpcCA+fCAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2lvZGF0YV9iY3R2N2VfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19pb2RhdGFfYmN0djdlLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19pb2RhdGFfYmN0djdlKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19pb2RhdGFfYmN0djdlX3RhYmxlKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSBSZW1vdGUgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2lbXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHg0ZCwgS0VZXzAgfSwKLQl7IDB4NTcsIEtFWV8xIH0sCi0JeyAweDRmLCBLRVlfMiB9LAotCXsgMHg1MywgS0VZXzMgfSwKLQl7IDB4NTYsIEtFWV80IH0sCi0JeyAweDRlLCBLRVlfNSB9LAotCXsgMHg1ZSwgS0VZXzYgfSwKLQl7IDB4NTQsIEtFWV83IH0sCi0JeyAweDRjLCBLRVlfOCB9LAotCXsgMHg1YywgS0VZXzkgfSwKLQotCXsgMHg1YiwgS0VZX1BPV0VSIH0sCi0JeyAweDVmLCBLRVlfTVVURSB9LAotCXsgMHg1NSwgS0VZX0dPVE8gfSwKLQl7IDB4NWQsIEtFWV9TRUFSQ0ggfSwKLQl7IDB4MTcsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCi0JeyAweDFmLCBLRVlfTUVOVSB9LAotCXsgMHgwZiwgS0VZX1VQIH0sCi0JeyAweDQ2LCBLRVlfRE9XTiB9LAotCXsgMHgxNiwgS0VZX0xFRlQgfSwKLQl7IDB4MWUsIEtFWV9SSUdIVCB9LAotCXsgMHgwZSwgS0VZX1NFTEVDVCB9LAkJLyogRW50ZXIgKi8KLQl7IDB4NWEsIEtFWV9JTkZPIH0sCi0JeyAweDUyLCBLRVlfRVhJVCB9LAotCXsgMHg1OSwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDUxLCBLRVlfTkVYVCB9LAotCXsgMHg1OCwgS0VZX1JFV0lORCB9LAotCXsgMHg1MCwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4NDQsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MDcsIEtFWV9TVE9QIH0sCi0JeyAweDFiLCBLRVlfUkVDT1JEIH0sCi0JeyAweDEzLCBLRVlfVFVORVIgfSwJCS8qIExpdmUgKi8KLQl7IDB4MGEsIEtFWV9BIH0sCi0JeyAweDEyLCBLRVlfQiB9LAotCXsgMHgwMywgS0VZX1BST0cxIH0sCQkvKiAxICovCi0JeyAweDAxLCBLRVlfUFJPRzIgfSwJCS8qIDIgKi8KLQl7IDB4MDAsIEtFWV9QUk9HMyB9LAkJLyogMyAqLwotCXsgMHgwNiwgS0VZX0RWRCB9LAotCXsgMHg0OCwgS0VZX0FVWCB9LAkJLyogUGhvdG8gKi8KLQl7IDB4NDAsIEtFWV9WSURFTyB9LAotCXsgMHgxOSwgS0VZX0FVRElPIH0sCQkvKiBNdXNpYyAqLwotCXsgMHgwYiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwOCwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDE1LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWMsIEtFWV9WT0xVTUVET1dOIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2lfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2kpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpX3RhYmxlKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBNU0kgVFZAbnl3aGVyZSBNQVNURVIgcmVtb3RlICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVbXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCXsgMHgwYywgS0VZX01VVEUgfSwKLQl7IDB4MGYsIEtFWV9TQ1JFRU4gfSwJCS8qIEZ1bGwgU2NyZWVuICovCi0JeyAweDEwLCBLRVlfRk4gfSwJCS8qIEZ1bnRpb24gKi8KLQl7IDB4MTEsIEtFWV9USU1FIH0sCQkvKiBUaW1lIHNoaWZ0ICovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwKLQl7IDB4MTMsIEtFWV9NRURJQSB9LAkJLyogTVRTICovCi0JeyAweDE0LCBLRVlfU0xPVyB9LAotCXsgMHgxNiwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KLQl7IDB4MTcsIEtFWV9FTlRFUiB9LAkJLyogUmV0dXJuICovCi0JeyAweDE4LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLwotCXsgMHgxYSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbXNpX3R2YW55d2hlcmUpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3RhYmxlKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICBLZXljb2RlcyBmb3IgcmVtb3RlIG9uIHRoZSBNU0kgVFZAbnl3aGVyZSBQbHVzLiBUaGUgY29udHJvbGxlciBJQyBvbiB0aGUgY2FyZAotICBpcyBtYXJrZWQgIktTMDAzIi4gVGhlIGNvbnRyb2xsZXIgaXMgSTJDIGF0IGFkZHJlc3MgMHgzMCwgYnV0IGRvZXMgbm90IHNlZW0KLSAgdG8gcmVzcG9uZCB0byBwcm9iZXMgdW50aWwgYSByZWFkIGlzIHBlcmZvcm1lZCBmcm9tIGEgdmFsaWQgZGV2aWNlLgotICBJIGRvbid0IGtub3cgd2h5Li4uCi0KLSAgTm90ZTogVGhpcyByZW1vdGUgbWF5IGJlIG9mIHNpbWlsYXIgb3IgaWRlbnRpY2FsIGRlc2lnbiB0byB0aGUKLSAgUGl4ZWx2aWV3IHJlbW90ZSAoPykuICBUaGUgcmF3IGNvZGVzIGFuZCBkdXBsaWNhdGUgYnV0dG9uIGNvZGVzCi0gIGFwcGVhciB0byBiZSB0aGUgc2FtZS4KLQotICBIZW5yeSBXb25nIDxoZW5yeUBzdHVmZmVkY293Lm5ldD4KLSAgU29tZSBjaGFuZ2VzIHRvIGZvcm1hdHRpbmcgYW5kIGtleWNvZGVzIGJ5IE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgotCi0qLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNbXSA9IHsKLQotLyogIC0tLS0gUmVtb3RlIEJ1dHRvbiBMYXlvdXQgLS0tLQotCi0gICAgUE9XRVIgICBTT1VSQ0UgIFNDQU4gICAgTVVURQotICAgIFRWL0ZNICAgMSAgICAgICAyICAgICAgIDMKLSAgICB8PiAgICAgIDQgICAgICAgNSAgICAgICA2Ci0gICAgPHwgICAgICA3ICAgICAgIDggICAgICAgOQotICAgIF5eVVAgICAgMCAgICAgICArICAgICAgIFJFQ0FMTAotICAgIHZ2RE4gICAgUkVDT1JEICBTVE9QICAgIFBMQVkKLQotCU1JTklNSVpFICAgICAgICAgIFpPT00KLQotCQkgIENIKwotICAgICAgVk9MLSAgICAgICAgICAgICAgICAgICBWT0wrCi0JCSAgQ0gtCi0KLQlTTkFQU0hPVCAgICAgICAgICAgTVRTCi0KLSAgICAgPDwgICAgICBGVU5DICAgID4+ICAgICBSRVNFVAotKi8KLQotCXsgMHgwMSwgS0VZXzEgfSwJCS8qIDEgKi8KLQl7IDB4MGIsIEtFWV8yIH0sCQkvKiAyICovCi0JeyAweDFiLCBLRVlfMyB9LAkJLyogMyAqLwotCXsgMHgwNSwgS0VZXzQgfSwJCS8qIDQgKi8KLQl7IDB4MDksIEtFWV81IH0sCQkvKiA1ICovCi0JeyAweDE1LCBLRVlfNiB9LAkJLyogNiAqLwotCXsgMHgwNiwgS0VZXzcgfSwJCS8qIDcgKi8KLQl7IDB4MGEsIEtFWV84IH0sCQkvKiA4ICovCi0JeyAweDEyLCBLRVlfOSB9LAkJLyogOSAqLwotCXsgMHgwMiwgS0VZXzAgfSwJCS8qIDAgKi8KLQl7IDB4MTAsIEtFWV9LUFBMVVMgfSwJCS8qICsgKi8KLQl7IDB4MTMsIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICovCi0KLQl7IDB4MWUsIEtFWV9QT1dFUiB9LAkJLyogUG93ZXIgKi8KLQl7IDB4MDcsIEtFWV9UVU5FUiB9LAkJLyogU291cmNlICovCi0JeyAweDFjLCBLRVlfU0VBUkNIIH0sCQkvKiBTY2FuICovCi0JeyAweDE4LCBLRVlfTVVURSB9LAkJLyogTXV0ZSAqLwotCi0JeyAweDAzLCBLRVlfUkFESU8gfSwJCS8qIFRWL0ZNICovCi0JLyogVGhlIG5leHQgZm91ciBrZXlzIGFyZSBkdXBsaWNhdGVzIHRoYXQgYXBwZWFyIHRvIHNlbmQgdGhlCi0JICAgc2FtZSBJUiBjb2RlIGFzIENoKywgQ2gtLCA+PiwgYW5kIDw8IC4gIFRoZSByYXcgY29kZSBhc3NpZ25lZAotCSAgIHRvIHRoZW0gaXMgdGhlIGFjdHVhbCBjb2RlICsgMHgyMCAtIHRoZXkgd2lsbCBuZXZlciBiZQotCSAgIGRldGVjdGVkIGFzIHN1Y2ggdW5sZXNzIHNvbWUgd2F5IGlzIGRpc2NvdmVyZWQgdG8gZGlzdGluZ3Vpc2gKLQkgICB0aGVzZSBidXR0b25zIGZyb20gdGhvc2UgdGhhdCBoYXZlIHRoZSBzYW1lIGNvZGUuICovCi0JeyAweDNmLCBLRVlfUklHSFQgfSwJCS8qIHw+IGFuZCBDaCsgKi8KLQl7IDB4MzcsIEtFWV9MRUZUIH0sCQkvKiA8fCBhbmQgQ2gtICovCi0JeyAweDJjLCBLRVlfVVAgfSwJCS8qIF5eVXAgYW5kID4+ICovCi0JeyAweDI0LCBLRVlfRE9XTiB9LAkJLyogdnZEbiBhbmQgPDwgKi8KLQotCXsgMHgwMCwgS0VZX1JFQ09SRCB9LAkJLyogUmVjb3JkICovCi0JeyAweDA4LCBLRVlfU1RPUCB9LAkJLyogU3RvcCAqLwotCXsgMHgxMSwgS0VZX1BMQVkgfSwJCS8qIFBsYXkgKi8KLQotCXsgMHgwZiwgS0VZX0NMT1NFIH0sCQkvKiBNaW5pbWl6ZSAqLwotCXsgMHgxOSwgS0VZX1pPT00gfSwJCS8qIFpvb20gKi8KLQl7IDB4MWEsIEtFWV9DQU1FUkEgfSwJCS8qIFNuYXBzaG90ICovCi0JeyAweDBkLCBLRVlfTEFOR1VBR0UgfSwJCS8qIE1UUyAqLwotCi0JeyAweDE0LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWb2wtICovCi0JeyAweDE2LCBLRVlfVk9MVU1FVVAgfSwJCS8qIFZvbCsgKi8KLQl7IDB4MTcsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaC0gKi8KLQl7IDB4MWYsIEtFWV9DSEFOTkVMVVAgfSwJLyogQ2grICovCi0KLQl7IDB4MDQsIEtFWV9SRVdJTkQgfSwJCS8qIDw8ICovCi0JeyAweDBlLCBLRVlfTUVOVSB9LAkJLyogRnVuY3Rpb24gKi8KLQl7IDB4MGMsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiA+PiAqLwotCXsgMHgxZCwgS0VZX1JFU1RBUlQgfSwJCS8qIFJlc2V0ICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXMsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXMpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNfdGFibGUpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIENpbmVyZ3kgMTQwMCBEVkItVCAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19jaW5lcmd5XzE0MDBbXSA9IHsKLQl7IDB4MDEsIEtFWV9QT1dFUiB9LAotCXsgMHgwMiwgS0VZXzEgfSwKLQl7IDB4MDMsIEtFWV8yIH0sCi0JeyAweDA0LCBLRVlfMyB9LAotCXsgMHgwNSwgS0VZXzQgfSwKLQl7IDB4MDYsIEtFWV81IH0sCi0JeyAweDA3LCBLRVlfNiB9LAotCXsgMHgwOCwgS0VZXzcgfSwKLQl7IDB4MDksIEtFWV84IH0sCi0JeyAweDBhLCBLRVlfOSB9LAotCXsgMHgwYywgS0VZXzAgfSwKLQotCXsgMHgwYiwgS0VZX1ZJREVPIH0sCi0JeyAweDBkLCBLRVlfUkVGUkVTSCB9LAotCXsgMHgwZSwgS0VZX1NFTEVDVCB9LAotCXsgMHgwZiwgS0VZX0VQRyB9LAotCXsgMHgxMCwgS0VZX1VQIH0sCi0JeyAweDExLCBLRVlfTEVGVCB9LAotCXsgMHgxMiwgS0VZX09LIH0sCi0JeyAweDEzLCBLRVlfUklHSFQgfSwKLQl7IDB4MTQsIEtFWV9ET1dOIH0sCi0JeyAweDE1LCBLRVlfVEVYVCB9LAotCXsgMHgxNiwgS0VZX0lORk8gfSwKLQotCXsgMHgxNywgS0VZX1JFRCB9LAotCXsgMHgxOCwgS0VZX0dSRUVOIH0sCi0JeyAweDE5LCBLRVlfWUVMTE9XIH0sCi0JeyAweDFhLCBLRVlfQkxVRSB9LAotCi0JeyAweDFiLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFjLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWQsIEtFWV9NVVRFIH0sCi0JeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZiwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4NDAsIEtFWV9QQVVTRSB9LAotCXsgMHg0YywgS0VZX1BMQVkgfSwKLQl7IDB4NTgsIEtFWV9SRUNPUkQgfSwKLQl7IDB4NTQsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHg0OCwgS0VZX1NUT1AgfSwKLQl7IDB4NWMsIEtFWV9ORVhUIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfY2luZXJneV8xNDAwX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfY2luZXJneV8xNDAwLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19jaW5lcmd5XzE0MDApLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2NpbmVyZ3lfMTQwMF90YWJsZSk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogQVZFUlRWIFNUVURJTyAzMDMgUmVtb3RlICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJ0dl8zMDNbXSA9IHsKLQl7IDB4MmEsIEtFWV8xIH0sCi0JeyAweDMyLCBLRVlfMiB9LAotCXsgMHgzYSwgS0VZXzMgfSwKLQl7IDB4NGEsIEtFWV80IH0sCi0JeyAweDUyLCBLRVlfNSB9LAotCXsgMHg1YSwgS0VZXzYgfSwKLQl7IDB4NmEsIEtFWV83IH0sCi0JeyAweDcyLCBLRVlfOCB9LAotCXsgMHg3YSwgS0VZXzkgfSwKLQl7IDB4MGUsIEtFWV8wIH0sCi0KLQl7IDB4MDIsIEtFWV9QT1dFUiB9LAotCXsgMHgyMiwgS0VZX1ZJREVPIH0sCi0JeyAweDQyLCBLRVlfQVVESU8gfSwKLQl7IDB4NjIsIEtFWV9aT09NIH0sCi0JeyAweDBhLCBLRVlfVFYgfSwKLQl7IDB4MTIsIEtFWV9DRCB9LAotCXsgMHgxYSwgS0VZX1RFWFQgfSwKLQotCXsgMHgxNiwgS0VZX1NVQlRJVExFIH0sCi0JeyAweDFlLCBLRVlfUkVXSU5EIH0sCi0JeyAweDA2LCBLRVlfUFJJTlQgfSwKLQotCXsgMHgyZSwgS0VZX1NFQVJDSCB9LAotCXsgMHgzNiwgS0VZX1NMRUVQIH0sCi0JeyAweDNlLCBLRVlfU0hVRkZMRSB9LAotCXsgMHgyNiwgS0VZX01VVEUgfSwKLQotCXsgMHg0ZSwgS0VZX1JFQ09SRCB9LAotCXsgMHg1NiwgS0VZX1BBVVNFIH0sCi0JeyAweDVlLCBLRVlfU1RPUCB9LAotCXsgMHg0NiwgS0VZX1BMQVkgfSwKLQotCXsgMHg2ZSwgS0VZX1JFRCB9LAotCXsgMHgwYiwgS0VZX0dSRUVOIH0sCi0JeyAweDY2LCBLRVlfWUVMTE9XIH0sCi0JeyAweDAzLCBLRVlfQkxVRSB9LAotCi0JeyAweDc2LCBLRVlfTEVGVCB9LAotCXsgMHg3ZSwgS0VZX1JJR0hUIH0sCi0JeyAweDEzLCBLRVlfRE9XTiB9LAotCXsgMHgxYiwgS0VZX1VQIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcnR2XzMwM190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJ0dl8zMDMsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2F2ZXJ0dl8zMDMpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJ0dl8zMDNfdGFibGUpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIERpZ2l0YWxOb3cgRE5UViBMaXZlISBEVkItVCBQcm8gUmVtb3RlICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3Byb1tdID0gewotCXsgMHgxNiwgS0VZX1BPV0VSIH0sCi0JeyAweDViLCBLRVlfSE9NRSB9LAotCi0JeyAweDU1LCBLRVlfVFYgfSwJCS8qIGxpdmUgdHYgKi8KLQl7IDB4NTgsIEtFWV9UVU5FUiB9LAkJLyogZGlnaXRhbCBSYWRpbyAqLwotCXsgMHg1YSwgS0VZX1JBRElPIH0sCQkvKiBGTSByYWRpbyAqLwotCXsgMHg1OSwgS0VZX0RWRCB9LAkJLyogZHZkIG1lbnUgKi8KLQl7IDB4MDMsIEtFWV8xIH0sCi0JeyAweDAxLCBLRVlfMiB9LAotCXsgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MDksIEtFWV80IH0sCi0JeyAweDFkLCBLRVlfNSB9LAotCXsgMHgxZiwgS0VZXzYgfSwKLQl7IDB4MGQsIEtFWV83IH0sCi0JeyAweDE5LCBLRVlfOCB9LAotCXsgMHgxYiwgS0VZXzkgfSwKLQl7IDB4MGMsIEtFWV9DQU5DRUwgfSwKLQl7IDB4MTUsIEtFWV8wIH0sCi0JeyAweDRhLCBLRVlfQ0xFQVIgfSwKLQl7IDB4MTMsIEtFWV9CQUNLIH0sCi0JeyAweDAwLCBLRVlfVEFCIH0sCi0JeyAweDRiLCBLRVlfVVAgfSwKLQl7IDB4NGUsIEtFWV9MRUZUIH0sCi0JeyAweDRmLCBLRVlfT0sgfSwKLQl7IDB4NTIsIEtFWV9SSUdIVCB9LAotCXsgMHg1MSwgS0VZX0RPV04gfSwKLQl7IDB4MWUsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwYSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDIsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwNSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMSwgS0VZX1JFQ09SRCB9LAotCXsgMHgxNCwgS0VZX1BMQVkgfSwKLQl7IDB4NGMsIEtFWV9QQVVTRSB9LAotCXsgMHgxYSwgS0VZX1NUT1AgfSwKLQl7IDB4NDAsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MTIsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHg0MSwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiByZXBsYXkgfDwgKi8KLQl7IDB4NDIsIEtFWV9ORVhUU09ORyB9LAkJLyogc2tpcCA+fCAqLwotCXsgMHg1NCwgS0VZX0NBTUVSQSB9LAkJLyogY2FwdHVyZSAqLwotCXsgMHg1MCwgS0VZX0xBTkdVQUdFIH0sCQkvKiBzYXAgKi8KLQl7IDB4NDcsIEtFWV9UVjIgfSwJCS8qIHBpcCAqLwotCXsgMHg0ZCwgS0VZX1NDUkVFTiB9LAotCXsgMHg0MywgS0VZX1NVQlRJVExFIH0sCi0JeyAweDEwLCBLRVlfTVVURSB9LAotCXsgMHg0OSwgS0VZX0FVRElPIH0sCQkvKiBsL3IgKi8KLQl7IDB4MDcsIEtFWV9TTEVFUCB9LAotCXsgMHgwOCwgS0VZX1ZJREVPIH0sCQkvKiBhL3YgKi8KLQl7IDB4MGUsIEtFWV9QUkVWSU9VUyB9LAkJLyogcmVjYWxsICovCi0JeyAweDQ1LCBLRVlfWk9PTSB9LAkJLyogem9vbSArICovCi0JeyAweDQ2LCBLRVlfQU5HTEUgfSwJCS8qIHpvb20gLSAqLwotCXsgMHg1NiwgS0VZX1JFRCB9LAotCXsgMHg1NywgS0VZX0dSRUVOIH0sCi0JeyAweDVjLCBLRVlfWUVMTE9XIH0sCi0JeyAweDVkLCBLRVlfQkxVRSB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3Byb190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3BybywKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZG50dl9saXZlX2R2YnRfcHJvKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9fdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2VtX3RlcnJhdGVjW10gPSB7Ci0JeyAweDAxLCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgwMiwgS0VZX1NFTEVDVCB9LAotCXsgMHgwMywgS0VZX01VVEUgfSwKLQl7IDB4MDQsIEtFWV9QT1dFUiB9LAotCXsgMHgwNSwgS0VZXzEgfSwKLQl7IDB4MDYsIEtFWV8yIH0sCi0JeyAweDA3LCBLRVlfMyB9LAotCXsgMHgwOCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MGEsIEtFWV81IH0sCi0JeyAweDBiLCBLRVlfNiB9LAotCXsgMHgwYywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDBkLCBLRVlfNyB9LAotCXsgMHgwZSwgS0VZXzggfSwKLQl7IDB4MGYsIEtFWV85IH0sCi0JeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV8wIH0sCi0JeyAweDEyLCBLRVlfTUVOVSB9LAotCXsgMHgxMywgS0VZX1BSSU5UIH0sCi0JeyAweDE0LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxNiwgS0VZX1BBVVNFIH0sCi0JeyAweDE4LCBLRVlfUkVDT1JEIH0sCi0JeyAweDE5LCBLRVlfUkVXSU5EIH0sCi0JeyAweDFhLCBLRVlfUExBWSB9LAotCXsgMHgxYiwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MWMsIEtFWV9CQUNLU1BBQ0UgfSwKLQl7IDB4MWUsIEtFWV9TVE9QIH0sCi0JeyAweDQwLCBLRVlfWk9PTSB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VtX3RlcnJhdGVjX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZW1fdGVycmF0ZWMsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2VtX3RlcnJhdGVjKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbV90ZXJyYXRlY190YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGlubmFjbGVfZ3JleVtdID0gewotCXsgMHgzYSwgS0VZXzAgfSwKLQl7IDB4MzEsIEtFWV8xIH0sCi0JeyAweDMyLCBLRVlfMiB9LAotCXsgMHgzMywgS0VZXzMgfSwKLQl7IDB4MzQsIEtFWV80IH0sCi0JeyAweDM1LCBLRVlfNSB9LAotCXsgMHgzNiwgS0VZXzYgfSwKLQl7IDB4MzcsIEtFWV83IH0sCi0JeyAweDM4LCBLRVlfOCB9LAotCXsgMHgzOSwgS0VZXzkgfSwKLQotCXsgMHgyZiwgS0VZX1BPV0VSIH0sCi0KLQl7IDB4MmUsIEtFWV9QIH0sCi0JeyAweDFmLCBLRVlfTCB9LAotCXsgMHgyYiwgS0VZX0kgfSwKLQotCXsgMHgyZCwgS0VZX1NDUkVFTiB9LAotCXsgMHgxZSwgS0VZX1pPT00gfSwKLQl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwZiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTcsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgyNSwgS0VZX0lORk8gfSwKLQotCXsgMHgzYywgS0VZX01VVEUgfSwKLQotCXsgMHgzZCwgS0VZX0xFRlQgfSwKLQl7IDB4M2IsIEtFWV9SSUdIVCB9LAotCi0JeyAweDNmLCBLRVlfVVAgfSwKLQl7IDB4M2UsIEtFWV9ET1dOIH0sCi0JeyAweDFhLCBLRVlfRU5URVIgfSwKLQotCXsgMHgxZCwgS0VZX01FTlUgfSwKLQl7IDB4MTksIEtFWV9BR0FJTiB9LAotCXsgMHgxNiwgS0VZX1BSRVZJT1VTU09ORyB9LAotCXsgMHgxMywgS0VZX05FWFRTT05HIH0sCi0JeyAweDE1LCBLRVlfUEFVU0UgfSwKLQl7IDB4MGUsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MGQsIEtFWV9QTEFZIH0sCi0JeyAweDBiLCBLRVlfU1RPUCB9LAotCXsgMHgwNywgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MjcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MjYsIEtFWV9UVU5FUiB9LAotCXsgMHgyOSwgS0VZX1RFWFQgfSwKLQl7IDB4MmEsIEtFWV9NRURJQSB9LAotCXsgMHgxOCwgS0VZX0VQRyB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Bpbm5hY2xlX2dyZXlfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19waW5uYWNsZV9ncmV5LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19waW5uYWNsZV9ncmV5KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19waW5uYWNsZV9ncmV5X3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19mbHl2aWRlb1tdID0gewotCXsgMHgwZiwgS0VZXzAgfSwKLQl7IDB4MDMsIEtFWV8xIH0sCi0JeyAweDA0LCBLRVlfMiB9LAotCXsgMHgwNSwgS0VZXzMgfSwKLQl7IDB4MDcsIEtFWV80IH0sCi0JeyAweDA4LCBLRVlfNSB9LAotCXsgMHgwOSwgS0VZXzYgfSwKLQl7IDB4MGIsIEtFWV83IH0sCi0JeyAweDBjLCBLRVlfOCB9LAotCXsgMHgwZCwgS0VZXzkgfSwKLQotCXsgMHgwZSwgS0VZX01PREUgfSwJLyogQWlyL0NhYmxlICovCi0JeyAweDExLCBLRVlfVklERU8gfSwJLyogVmlkZW8gKi8KLQl7IDB4MTUsIEtFWV9BVURJTyB9LAkvKiBBdWRpbyAqLwotCXsgMHgwMCwgS0VZX1BPV0VSIH0sCS8qIFBvd2VyICovCi0JeyAweDE4LCBLRVlfVFVORVIgfSwJLyogQVYgU291cmNlICovCi0JeyAweDAyLCBLRVlfWk9PTSB9LAkvKiBGdWxsc2NyZWVuICovCi0JeyAweDFhLCBLRVlfTEFOR1VBR0UgfSwJLyogU3RlcmVvICovCi0JeyAweDFiLCBLRVlfTVVURSB9LAkvKiBNdXRlICovCi0JeyAweDE0LCBLRVlfVk9MVU1FVVAgfSwJLyogVm9sdW1lICsgKi8KLQl7IDB4MTcsIEtFWV9WT0xVTUVET1dOIH0sLyogVm9sdW1lIC0gKi8KLQl7IDB4MTIsIEtFWV9DSEFOTkVMVVAgfSwvKiBDaGFubmVsICsgKi8KLQl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LC8qIENoYW5uZWwgLSAqLwotCXsgMHgwNiwgS0VZX0FHQUlOIH0sCS8qIFJlY2FsbCAqLwotCXsgMHgxMCwgS0VZX0VOVEVSIH0sCS8qIEVudGVyICovCi0KLQl7IDB4MTksIEtFWV9CQUNLIH0sCS8qIFJld2luZCAgKCA8PDwgKSAqLwotCXsgMHgxZiwgS0VZX0ZPUldBUkQgfSwJLyogRm9yd2FyZCAoID4+PiApICovCi0JeyAweDBhLCBLRVlfQU5HTEUgfSwJLyogbm8gbGFiZWwsIG1heSBiZSB1c2VkIGFzIHRoZSBQQVVTRSBidXR0b24gKi8KLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19mbHl2aWRlb190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2ZseXZpZGVvLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19mbHl2aWRlbyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZmx5dmlkZW9fdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2ZseWR2YltdID0gewotCXsgMHgwMSwgS0VZX1pPT00gfSwJCS8qIEZ1bGwgU2NyZWVuICovCi0JeyAweDAwLCBLRVlfUE9XRVIgfSwJCS8qIFBvd2VyICovCi0KLQl7IDB4MDMsIEtFWV8xIH0sCi0JeyAweDA0LCBLRVlfMiB9LAotCXsgMHgwNSwgS0VZXzMgfSwKLQl7IDB4MDcsIEtFWV80IH0sCi0JeyAweDA4LCBLRVlfNSB9LAotCXsgMHgwOSwgS0VZXzYgfSwKLQl7IDB4MGIsIEtFWV83IH0sCi0JeyAweDBjLCBLRVlfOCB9LAotCXsgMHgwZCwgS0VZXzkgfSwKLQl7IDB4MDYsIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICovCi0JeyAweDBmLCBLRVlfMCB9LAotCXsgMHgxMCwgS0VZX01VVEUgfSwJCS8qIE11dGUgKi8KLQl7IDB4MDIsIEtFWV9SQURJTyB9LAkJLyogVFYvUmFkaW8gKi8KLQl7IDB4MWIsIEtFWV9MQU5HVUFHRSB9LAkJLyogU0FQIChTZWNvbmQgQXVkaW8gUHJvZ3JhbSkgKi8KLQotCXsgMHgxNCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWT0wrICovCi0JeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWT0wtICovCi0JeyAweDEyLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENIKyAqLwotCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENILSAqLwotCXsgMHgxZCwgS0VZX0VOVEVSIH0sCQkvKiBFbnRlciAqLwotCi0JeyAweDFhLCBLRVlfTU9ERSB9LAkJLyogUElQICovCi0JeyAweDE4LCBLRVlfVFVORVIgfSwJCS8qIFNvdXJjZSAqLwotCi0JeyAweDFlLCBLRVlfUkVDT1JEIH0sCQkvKiBSZWNvcmQvUGF1c2UgKi8KLQl7IDB4MTUsIEtFWV9BTkdMRSB9LAkJLyogU3dhcCAobm8gbGFiZWwgb24ga2V5KSAqLwotCXsgMHgxYywgS0VZX1BBVVNFIH0sCQkvKiBUaW1lc2hpZnQvUGF1c2UgKi8KLQl7IDB4MTksIEtFWV9CQUNLIH0sCQkvKiBSZXdpbmQgPDwgKi8KLQl7IDB4MGEsIEtFWV9QTEFZUEFVU0UgfSwJLyogUGxheS9QYXVzZSAqLwotCXsgMHgxZiwgS0VZX0ZPUldBUkQgfSwJCS8qIEZvcndhcmQgPj4gKi8KLQl7IDB4MTYsIEtFWV9QUkVWSU9VUyB9LAkJLyogQmFjayB8PDwgKi8KLQl7IDB4MTEsIEtFWV9TVE9QIH0sCQkvKiBTdG9wICovCi0JeyAweDBlLCBLRVlfTkVYVCB9LAkJLyogRW5kID4+fCAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2ZseWR2Yl90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2ZseWR2YiwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZmx5ZHZiKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mbHlkdmJfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2NpbmVyZ3lbXSA9IHsKLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQl7IDB4MGEsIEtFWV9QT1dFUiB9LAotCXsgMHgwYiwgS0VZX1BST0cxIH0sCQkvKiBhcHAgKi8KLQl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiB6b29tL2Z1bGxzY3JlZW4gKi8KLQl7IDB4MGQsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAqLwotCXsgMHgwZSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwtICovCi0JeyAweDBmLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTAsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDExLCBLRVlfVFVORVIgfSwJCS8qIEFWICovCi0JeyAweDEyLCBLRVlfTlVNTE9DSyB9LAkJLyogLS8tLSAqLwotCXsgMHgxMywgS0VZX0FVRElPIH0sCQkvKiBhdWRpbyAqLwotCXsgMHgxNCwgS0VZX01VVEUgfSwKLQl7IDB4MTUsIEtFWV9VUCB9LAotCXsgMHgxNiwgS0VZX0RPV04gfSwKLQl7IDB4MTcsIEtFWV9MRUZUIH0sCi0JeyAweDE4LCBLRVlfUklHSFQgfSwKLQl7IDB4MTksIEJUTl9MRUZULCB9LAotCXsgMHgxYSwgQlROX1JJR0hULCB9LAotCXsgMHgxYiwgS0VZX1dXVyB9LAkJLyogdGV4dCAqLwotCXsgMHgxYywgS0VZX1JFV0lORCB9LAotCXsgMHgxZCwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MWUsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MWYsIEtFWV9QTEFZIH0sCi0JeyAweDIwLCBLRVlfUFJFVklPVVNTT05HIH0sCi0JeyAweDIxLCBLRVlfTkVYVFNPTkcgfSwKLQl7IDB4MjIsIEtFWV9QQVVTRSB9LAotCXsgMHgyMywgS0VZX1NUT1AgfSwKLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19jaW5lcmd5X3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfY2luZXJneSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfY2luZXJneSksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfY2luZXJneV90YWJsZSk7Ci0KLS8qIEFsZm9ucyBHZXNlciA8YS5nZXNlckBjb3gubmV0PgotICogdXBkYXRlcyBmcm9tIEpvYiBELiBSLiBCb3JnZXMgPGpvYmRyYkBpZy5jb20uYnI+ICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2V6dHZbXSA9IHsKLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgwMSwgS0VZX1RWIH0sCS8qIERWUiAqLwotCXsgMHgxNSwgS0VZX0RWRCB9LAkvKiBEVkQgKi8KLQl7IDB4MTcsIEtFWV9BVURJTyB9LAkvKiBtdXNpYyAqLwotCQkJCS8qIERWUiBtb2RlIC8gRFZEIG1vZGUgLyBtdXNpYyBtb2RlICovCi0KLQl7IDB4MWIsIEtFWV9NVVRFIH0sCS8qIG11dGUgKi8KLQl7IDB4MDIsIEtFWV9MQU5HVUFHRSB9LAkvKiBNVFMvU0FQIC8gYXVkaW8gLyBhdXRvc2VlayAqLwotCXsgMHgxZSwgS0VZX1NVQlRJVExFIH0sCS8qIGNsb3NlZCBjYXB0aW9uaW5nIC8gc3VidGl0bGUgLyBzZWVrICovCi0JeyAweDE2LCBLRVlfWk9PTSB9LAkvKiBmdWxsIHNjcmVlbiAqLwotCXsgMHgxYywgS0VZX1ZJREVPIH0sCS8qIHZpZGVvIHNvdXJjZSAvIGVqZWN0IC8gZGVsYWxsICovCi0JeyAweDFkLCBLRVlfUkVTVEFSVCB9LAkvKiBwbGF5YmFjayAvIGFuZ2xlIC8gZGVsICovCi0JeyAweDJmLCBLRVlfU0VBUkNIIH0sCS8qIHNjYW4gLyBtZW51IC8gcGxheWxpc3QgKi8KLQl7IDB4MzAsIEtFWV9DSEFOTkVMIH0sCS8qIENIIHN1cmZpbmcgLyBib29rbWFyayAvIG1lbW8gKi8KLQotCXsgMHgzMSwgS0VZX0hFTFAgfSwJLyogaGVscCAqLwotCXsgMHgzMiwgS0VZX01PREUgfSwJLyogbnVtL21lbW8gKi8KLQl7IDB4MzMsIEtFWV9FU0MgfSwJLyogY2FuY2VsICovCi0KLQl7IDB4MGMsIEtFWV9VUCB9LAkvKiB1cCAqLwotCXsgMHgxMCwgS0VZX0RPV04gfSwJLyogZG93biAqLwotCXsgMHgwOCwgS0VZX0xFRlQgfSwJLyogbGVmdCAqLwotCXsgMHgwNCwgS0VZX1JJR0hUIH0sCS8qIHJpZ2h0ICovCi0JeyAweDAzLCBLRVlfU0VMRUNUIH0sCS8qIHNlbGVjdCAqLwotCi0JeyAweDFmLCBLRVlfUkVXSU5EIH0sCS8qIHJld2luZCAqLwotCXsgMHgyMCwgS0VZX1BMQVlQQVVTRSB9LC8qIHBsYXkvcGF1c2UgKi8KLQl7IDB4MjksIEtFWV9GT1JXQVJEIH0sCS8qIGZvcndhcmQgKi8KLQl7IDB4MTQsIEtFWV9BR0FJTiB9LAkvKiByZXBlYXQgKi8KLQl7IDB4MmIsIEtFWV9SRUNPUkQgfSwJLyogcmVjb3JkaW5nICovCi0JeyAweDJjLCBLRVlfU1RPUCB9LAkvKiBzdG9wICovCi0JeyAweDJkLCBLRVlfUExBWSB9LAkvKiBwbGF5ICovCi0JeyAweDJlLCBLRVlfQ0FNRVJBIH0sCS8qIHNuYXBzaG90IC8gc2h1ZmZsZSAqLwotCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwNSwgS0VZXzEgfSwKLQl7IDB4MDYsIEtFWV8yIH0sCi0JeyAweDA3LCBLRVlfMyB9LAotCXsgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MGEsIEtFWV81IH0sCi0JeyAweDBiLCBLRVlfNiB9LAotCXsgMHgwZCwgS0VZXzcgfSwKLQl7IDB4MGUsIEtFWV84IH0sCi0JeyAweDBmLCBLRVlfOSB9LAotCi0JeyAweDJhLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDE4LCBLRVlfQ0hBTk5FTFVQIH0sLyogQ0gudHJhY2tpbmcgdXAgKi8KLQl7IDB4MTksIEtFWV9DSEFOTkVMRE9XTiB9LC8qIENILnRyYWNraW5nIGRvd24gKi8KLQotCXsgMHgxMywgS0VZX0VOVEVSIH0sCS8qIGVudGVyICovCi0JeyAweDIxLCBLRVlfRE9UIH0sCS8qIC4gKGRlY2ltYWwgZG90KSAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2V6dHZfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19lenR2LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lenR2KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lenR2X3RhYmxlKTsKLQotLyogQWxleCBIZXJtYW5uIDxnYWFmQGdteC5uZXQ+ICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJtZWRpYVtdID0gewotCXsgMHgyOCwgS0VZXzEgfSwKLQl7IDB4MTgsIEtFWV8yIH0sCi0JeyAweDM4LCBLRVlfMyB9LAotCXsgMHgyNCwgS0VZXzQgfSwKLQl7IDB4MTQsIEtFWV81IH0sCi0JeyAweDM0LCBLRVlfNiB9LAotCXsgMHgyYywgS0VZXzcgfSwKLQl7IDB4MWMsIEtFWV84IH0sCi0JeyAweDNjLCBLRVlfOSB9LAotCXsgMHgyMiwgS0VZXzAgfSwKLQotCXsgMHgyMCwgS0VZX1RWIH0sCQkvKiBUVi9GTSAqLwotCXsgMHgxMCwgS0VZX0NEIH0sCQkvKiBDRCAqLwotCXsgMHgzMCwgS0VZX1RFWFQgfSwJCS8qIFRFTEVURVhUICovCi0JeyAweDAwLCBLRVlfUE9XRVIgfSwJCS8qIFBPV0VSICovCi0KLQl7IDB4MDgsIEtFWV9WSURFTyB9LAkJLyogVklERU8gKi8KLQl7IDB4MDQsIEtFWV9BVURJTyB9LAkJLyogQVVESU8gKi8KLQl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiBGVUxMIFNDUkVFTiAqLwotCi0JeyAweDEyLCBLRVlfU1VCVElUTEUgfSwJCS8qIERJU1BMQVkgKi8KLQl7IDB4MzIsIEtFWV9SRVdJTkQgfSwJCS8qIExPT1AJKi8KLQl7IDB4MDIsIEtFWV9QUklOVCB9LAkJLyogUFJFVklFVyAqLwotCi0JeyAweDJhLCBLRVlfU0VBUkNIIH0sCQkvKiBBVVRPU0NBTiAqLwotCXsgMHgxYSwgS0VZX1NMRUVQIH0sCQkvKiBGUkVFWkUgKi8KLQl7IDB4M2EsIEtFWV9DQU1FUkEgfSwJCS8qIFNOQVBTSE9UICovCi0JeyAweDBhLCBLRVlfTVVURSB9LAkJLyogTVVURSAqLwotCi0JeyAweDI2LCBLRVlfUkVDT1JEIH0sCQkvKiBSRUNPUkQgKi8KLQl7IDB4MTYsIEtFWV9QQVVTRSB9LAkJLyogUEFVU0UgKi8KLQl7IDB4MzYsIEtFWV9TVE9QIH0sCQkvKiBTVE9QICovCi0JeyAweDA2LCBLRVlfUExBWSB9LAkJLyogUExBWSAqLwotCi0JeyAweDJlLCBLRVlfUkVEIH0sCQkvKiBSRUQgKi8KLQl7IDB4MjEsIEtFWV9HUkVFTiB9LAkJLyogR1JFRU4gKi8KLQl7IDB4MGUsIEtFWV9ZRUxMT1cgfSwJCS8qIFlFTExPVyAqLwotCXsgMHgwMSwgS0VZX0JMVUUgfSwJCS8qIEJMVUUgKi8KLQotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwJLyogVk9MVU1FLSAqLwotCXsgMHgzZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWT0xVTUUrICovCi0JeyAweDExLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ0hBTk5FTC9QQUdFLSAqLwotCXsgMHgzMSwgS0VZX0NIQU5ORUxVUCB9CQkvKiBDSEFOTkVML1BBR0UrICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfYXZlcm1lZGlhLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVybWVkaWEpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV90YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cltdID0gewotCXsgMHgxNCwgS0VZX01VVEUgfSwKLQl7IDB4MjQsIEtFWV9aT09NIH0sCi0KLQl7IDB4MDEsIEtFWV9EVkQgfSwKLQl7IDB4MjMsIEtFWV9SQURJTyB9LAotCXsgMHgwMCwgS0VZX1RWIH0sCi0KLQl7IDB4MGEsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MDgsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MGYsIEtFWV9GT1JXQVJEIH0sCi0KLQl7IDB4MDIsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHgwNywgS0VZX1NUT1AgfSwKLQl7IDB4MDYsIEtFWV9ORVhUIH0sCi0KLQl7IDB4MGMsIEtFWV9VUCB9LAotCXsgMHgwZSwgS0VZX0RPV04gfSwKLQl7IDB4MGIsIEtFWV9MRUZUIH0sCi0JeyAweDBkLCBLRVlfUklHSFQgfSwKLQl7IDB4MTEsIEtFWV9PSyB9LAotCi0JeyAweDAzLCBLRVlfTUVOVSB9LAotCXsgMHgwOSwgS0VZX1NFVFVQIH0sCi0JeyAweDA1LCBLRVlfVklERU8gfSwKLQl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCi0KLQl7IDB4MTIsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxNSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JeyAweDA0LCBLRVlfUkVDT1JEIH0sCi0KLQl7IDB4MTYsIEtFWV8xIH0sCi0JeyAweDE3LCBLRVlfMiB9LAotCXsgMHgxOCwgS0VZXzMgfSwKLQl7IDB4MTksIEtFWV80IH0sCi0JeyAweDFhLCBLRVlfNSB9LAotCXsgMHgxYiwgS0VZXzYgfSwKLQl7IDB4MWMsIEtFWV83IH0sCi0JeyAweDFkLCBLRVlfOCB9LAotCXsgMHgxZSwgS0VZXzkgfSwKLQl7IDB4MWYsIEtFWV8wIH0sCi0KLQl7IDB4MjAsIEtFWV9MQU5HVUFHRSB9LAotCXsgMHgyMSwgS0VZX1NMRUVQIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cl90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnIsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnIpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJfdGFibGUpOwotCi0vKiBNaWNoYWVsIFRva2FyZXYgPG1qdEB0bHMubXNrLnJ1PgotICAgaHR0cDovL3d3dy5jb3JwaXQucnUvbWp0L2JlaG9sZFRWL3JlbW90ZV9jb250cm9sLmpwZwotICAga2V5dGFibGUgaXMgdXNlZCBieSBNQU5MSSBNVFYwMFsweDBjXSBhbmQgQmVob2xkVFYgNDBbMTNdIGF0Ci0gICBsZWFzdCwgYW5kIHByb2JhYmx5IG90aGVyIGNhcmRzIHRvby4KLSAgIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93Ci0gICBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cwotICAgdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKLSAgIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX21hbmxpW10gPSB7Ci0KLQkvKiAgMHgxYyAgICAgICAgICAgIDB4MTIgICoKLQkgKiBGVU5DVElPTiAgICAgICAgIFBPV0VSICoKLQkgKiAgIEZNICAgICAgICAgICAgICAofCkgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDFjLCBLRVlfUkFESU8gfSwJLypYWFgqLwotCXsgMHgxMiwgS0VZX1BPV0VSIH0sCi0KLQkvKiAgMHgwMSAgICAweDAyICAgIDB4MDMgICoKLQkgKiAgIDEgICAgICAgMiAgICAgICAzICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgMHgwNCAgICAweDA1ICAgIDB4MDYgICoKLQkgKiAgIDQgICAgICAgNSAgICAgICA2ICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgMHgwNyAgICAweDA4ICAgIDB4MDkgICoKLQkgKiAgIDcgICAgICAgOCAgICAgICA5ICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQkvKiAgMHgwYSAgICAweDAwICAgIDB4MTcgICoKLQkgKiBSRUNBTEwgICAgMCAgICAgICsxMDAgICoKLQkgKiAgICAgICAgICAgICAgICAgIFBMVVMgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDBhLCBLRVlfQUdBSU4gfSwJLypYWFggS0VZX1JFV0lORD8gKi8KLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDE3LCBLRVlfRElHSVRTIH0sCS8qWFhYKi8KLQotCS8qICAweDE0ICAgICAgICAgICAgMHgxMCAgKgotCSAqICBNRU5VICAgICAgICAgICAgSU5GTyAgKgotCSAqICBPU0QgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MTQsIEtFWV9NRU5VIH0sCi0JeyAweDEwLCBLRVlfSU5GTyB9LAotCi0JLyogICAgICAgICAgMHgwYiAgICAgICAgICAqCi0JICogICAgICAgICAgIFVwICAgICAgICAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MTggICAgMHgxNiAgICAweDBjICAqCi0JICogIExlZnQgICAgIE9rICAgICBSaWdodCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogICAgICAgICAweDAxNSAgICAgICAgICAqCi0JICogICAgICAgICBEb3duICAgICAgICAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwYiwgS0VZX1VQIH0sCi0JeyAweDE4LCBLRVlfTEVGVCB9LAotCXsgMHgxNiwgS0VZX09LIH0sCS8qWFhYIEtFWV9TRUxFQ1Q/IEtFWV9FTlRFUj8gKi8KLQl7IDB4MGMsIEtFWV9SSUdIVCB9LAotCXsgMHgxNSwgS0VZX0RPV04gfSwKLQotCS8qICAweDExICAgICAgICAgICAgMHgwZCAgKgotCSAqICBUVi9BViAgICAgICAgICAgTU9ERSAgKgotCSAqICBTT1VSQ0UgICAgICAgICBTVEVSRU8gKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MTEsIEtFWV9UViB9LAkvKlhYWCovCi0JeyAweDBkLCBLRVlfTU9ERSB9LAkvKlhYWCB0aGVyZSdzIG5vIEtFWV9TVEVSRU8JKi8KLQotCS8qICAweDBmICAgIDB4MWIgICAgMHgxYSAgKgotCSAqICBBVURJTyAgIFZvbCsgICAgQ2hhbisgKgotCSAqICAgICAgICBUSU1FU0hJRlQ/Pz8gICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDBlICAgIDB4MWYgICAgMHgxZSAgKgotCSAqICBTTEVFUCAgIFZvbC0gICAgQ2hhbi0gKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MGYsIEtFWV9BVURJTyB9LAotCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDBlLCBLRVlfVElNRSB9LAotCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JLyogICAgICAgICAweDEzICAgICAweDE5ICAqCi0JICogICAgICAgICBNVVRFICAgU05BUFNIT1QqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgxMywgS0VZX01VVEUgfSwKLQl7IDB4MTksIEtFWV9DQU1FUkEgfSwKLQotCS8qIDB4MWQgdW51c2VkID8gKi8KLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19tYW5saV90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX21hbmxpLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19tYW5saSksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbWFubGlfdGFibGUpOwotCi0vKiBNaWtlIEJhaWtvdiA8bWlrZUBiYWlrb3YuY29tPiAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19nb3R2aWV3NzEzNVtdID0gewotCi0JeyAweDExLCBLRVlfUE9XRVIgfSwKLQl7IDB4MzUsIEtFWV9UViB9LAotCXsgMHgxYiwgS0VZXzAgfSwKLQl7IDB4MjksIEtFWV8xIH0sCi0JeyAweDE5LCBLRVlfMiB9LAotCXsgMHgzOSwgS0VZXzMgfSwKLQl7IDB4MWYsIEtFWV80IH0sCi0JeyAweDJjLCBLRVlfNSB9LAotCXsgMHgyMSwgS0VZXzYgfSwKLQl7IDB4MjQsIEtFWV83IH0sCi0JeyAweDE4LCBLRVlfOCB9LAotCXsgMHgyYiwgS0VZXzkgfSwKLQl7IDB4M2IsIEtFWV9BR0FJTiB9LAkvKiBMT09QICovCi0JeyAweDA2LCBLRVlfQVVESU8gfSwKLQl7IDB4MzEsIEtFWV9QUklOVCB9LAkvKiBQUkVWSUVXICovCi0JeyAweDNlLCBLRVlfVklERU8gfSwKLQl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MjAsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwYywgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MjgsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwOCwgS0VZX01VVEUgfSwKLQl7IDB4MjYsIEtFWV9TRUFSQ0ggfSwJLyogU0NBTiAqLwotCXsgMHgzZiwgS0VZX0NBTUVSQSB9LAkvKiBTTkFQU0hPVCAqLwotCXsgMHgxMiwgS0VZX1JFQ09SRCB9LAotCXsgMHgzMiwgS0VZX1NUT1AgfSwKLQl7IDB4M2MsIEtFWV9QTEFZIH0sCi0JeyAweDFkLCBLRVlfUkVXSU5EIH0sCi0JeyAweDJkLCBLRVlfUEFVU0UgfSwKLQl7IDB4MGQsIEtFWV9GT1JXQVJEIH0sCi0JeyAweDA1LCBLRVlfWk9PTSB9LAkvKkZVTEwqLwotCi0JeyAweDJhLCBLRVlfRjIxIH0sCS8qIExJVkUgVElNRVNISUZUICovCi0JeyAweDBlLCBLRVlfRjIyIH0sCS8qIE1JTiBUSU1FU0hJRlQgKi8KLQl7IDB4MWUsIEtFWV9USU1FIH0sCS8qIFRJTUVTSElGVCAqLwotCXsgMHgzOCwgS0VZX0YyNCB9LAkvKiBOT1JNQUwgVElNRVNISUZUICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ290dmlldzcxMzVfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19nb3R2aWV3NzEzNSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZ290dmlldzcxMzUpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2dvdHZpZXc3MTM1X3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19wdXJwbGV0dltdID0gewotCXsgMHgwMywgS0VZX1BPV0VSIH0sCi0JeyAweDZmLCBLRVlfTVVURSB9LAotCXsgMHgxMCwgS0VZX0JBQ0tTUEFDRSB9LAkvKiBSZWNhbGwgKi8KLQotCXsgMHgxMSwgS0VZXzAgfSwKLQl7IDB4MDQsIEtFWV8xIH0sCi0JeyAweDA1LCBLRVlfMiB9LAotCXsgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MDgsIEtFWV80IH0sCi0JeyAweDA5LCBLRVlfNSB9LAotCXsgMHgwYSwgS0VZXzYgfSwKLQl7IDB4MGMsIEtFWV83IH0sCi0JeyAweDBkLCBLRVlfOCB9LAotCXsgMHgwZSwgS0VZXzkgfSwKLQl7IDB4MTIsIEtFWV9ET1QgfSwJLyogMTAwKyAqLwotCi0JeyAweDA3LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MGIsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFhLCBLRVlfS1BQTFVTIH0sCi0JeyAweDE4LCBLRVlfS1BNSU5VUyB9LAotCXsgMHgxNSwgS0VZX1VQIH0sCi0JeyAweDFkLCBLRVlfRE9XTiB9LAotCXsgMHgwZiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDQ4LCBLRVlfWk9PTSB9LAotCi0JeyAweDFiLCBLRVlfVklERU8gfSwJLyogVmlkZW8gc291cmNlICovCi0JeyAweDFmLCBLRVlfQ0FNRVJBIH0sCS8qIFNuYXBzaG90ICovCi0JeyAweDQ5LCBLRVlfTEFOR1VBR0UgfSwJLyogTVRTIFNlbGVjdCAqLwotCXsgMHgxOSwgS0VZX1NFQVJDSCB9LAkvKiBBdXRvIFNjYW4gKi8KLQotCXsgMHg0YiwgS0VZX1JFQ09SRCB9LAotCXsgMHg0NiwgS0VZX1BMQVkgfSwKLQl7IDB4NDUsIEtFWV9QQVVTRSB9LAkvKiBQYXVzZSAqLwotCXsgMHg0NCwgS0VZX1NUT1AgfSwKLQl7IDB4NDMsIEtFWV9USU1FIH0sCS8qIFRpbWUgU2hpZnQgKi8KLQl7IDB4MTcsIEtFWV9DSEFOTkVMIH0sCS8qIFNVUkYgQ0ggKi8KLQl7IDB4NDAsIEtFWV9GT1JXQVJEIH0sCS8qIEZvcndhcmQgPyAqLwotCXsgMHg0MiwgS0VZX1JFV0lORCB9LAkvKiBCYWNrd2FyZCA/ICovCi0KLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19wdXJwbGV0dl90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3B1cnBsZXR2LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19wdXJwbGV0diksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcHVycGxldHZfdGFibGUpOwotCi0vKiBNYXBwaW5nIGZvciB0aGUgMjgga2V5IHJlbW90ZSBjb250cm9sIGFzIHNlZW4gYXQKLSAgIGh0dHA6Ly93d3cuc2VkbmFjb21wdXRlci5jb20vcGhvdG8vY2FyZGJ1cy10di5qcGcKLSAgIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPgotICAgQWxzbyBmb3IgdGhlIHJlbW90ZSBidW5kbGVkIHdpdGggS296dW1pIEtUVi0wMUMgY2FyZCAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19wY3R2X3NlZG5hW10gPSB7Ci0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCi0JeyAweDBhLCBLRVlfQUdBSU4gfSwJLyogUmVjYWxsICovCi0JeyAweDBiLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MGQsIEtFWV9NT0RFIH0sCS8qIFN0ZXJlbyAqLwotCXsgMHgwZSwgS0VZX1NUT1AgfSwKLQl7IDB4MGYsIEtFWV9QUkVWSU9VU1NPTkcgfSwKLQl7IDB4MTAsIEtFWV9aT09NIH0sCi0JeyAweDExLCBLRVlfVFVORVIgfSwJLyogU291cmNlICovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwKLQl7IDB4MTMsIEtFWV9NVVRFIH0sCi0JeyAweDE1LCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MTgsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDE5LCBLRVlfQ0FNRVJBIH0sCS8qIFNuYXBzaG90ICovCi0JeyAweDFhLCBLRVlfTkVYVFNPTkcgfSwKLQl7IDB4MWIsIEtFWV9USU1FIH0sCS8qIFRpbWUgU2hpZnQgKi8KLQl7IDB4MWMsIEtFWV9SQURJTyB9LAkvKiBGTSBSYWRpbyAqLwotCXsgMHgxZCwgS0VZX1JFQ09SRCB9LAotCXsgMHgxZSwgS0VZX1BBVVNFIH0sCi0JLyogYWRkaXRpb25hbCBjb2RlcyBmb3IgS296dW1pJ3MgcmVtb3RlICovCi0JeyAweDE0LCBLRVlfSU5GTyB9LAkvKiBPU0QgKi8KLQl7IDB4MTYsIEtFWV9PSyB9LAkvKiBPSyAqLwotCXsgMHgxNywgS0VZX0RJR0lUUyB9LAkvKiBQbHVzICovCi0JeyAweDFmLCBLRVlfUExBWSB9LAkvKiBQbGF5ICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGN0dl9zZWRuYV90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3BjdHZfc2VkbmEsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3BjdHZfc2VkbmEpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BjdHZfc2VkbmFfdGFibGUpOwotCi0vKiBNYXJrIFBoYWxhbiA8cGhhbGFubUBvMi5pZT4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcHY5NTFbXSA9IHsKLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgxMCwgS0VZX01VVEUgfSwKLQl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwZSwgS0VZX1BBR0VVUCB9LAotCXsgMHgxZCwgS0VZX1BBR0VET1dOIH0sCi0JeyAweDEzLCBLRVlfU09VTkQgfSwKLQotCXsgMHgxOCwgS0VZX0tQUExVU01JTlVTIH0sCS8qIENIICsvLSAqLwotCXsgMHgxNiwgS0VZX1NVQlRJVExFIH0sCQkvKiBDQyAqLwotCXsgMHgwZCwgS0VZX1RFWFQgfSwJCS8qIFRUWCAqLwotCXsgMHgwYiwgS0VZX1RWIH0sCQkvKiBBSVIvQ0JMICovCi0JeyAweDExLCBLRVlfUEMgfSwJCS8qIFBDL1RWICovCi0JeyAweDE3LCBLRVlfT0sgfSwJCS8qIENIIFJUTiAqLwotCXsgMHgxOSwgS0VZX01PREUgfSwJCS8qIEZVTkMgKi8KLQl7IDB4MGMsIEtFWV9TRUFSQ0ggfSwJCS8qIEFVVE9TQ0FOICovCi0KLQkvKiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhlc2Ugb25lcyEgKi8KLQl7IDB4MGYsIEtFWV9TRUxFQ1QgfSwJCS8qIFNPVVJDRSAqLwotCXsgMHgwYSwgS0VZX0tQUExVUyB9LAkJLyogKzEwMCAqLwotCXsgMHgxNCwgS0VZX0VRVUFMIH0sCQkvKiBTWU5DICovCi0JeyAweDFjLCBLRVlfTUVESUEgfSwJCS8qIFBDL1RWICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcHY5NTFfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19wdjk1MSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcHY5NTEpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3B2OTUxX3RhYmxlKTsKLQotLyogZ2VuZXJpYyBSQzUga2V5dGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogc2VlIGh0dHA6Ly91c2Vycy5wYW5kb3JhLmJlL25lbnlhL2VsZWN0cm9uaWNzL3JjNS9jb2RlczAwLmh0bSAqLwotLyogdXNlZCBieSBvbGQgKGJsYWNrKSBIYXVwcGF1Z2UgcmVtb3RlcyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19yYzVfdHZbXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCXsgMHgwYiwgS0VZX0NIQU5ORUwgfSwJCS8qIGNoYW5uZWwgLyBwcm9ncmFtIChqYXBhbjogMTEpICovCi0JeyAweDBjLCBLRVlfUE9XRVIgfSwJCS8qIHN0YW5kYnkgKi8KLQl7IDB4MGQsIEtFWV9NVVRFIH0sCQkvKiBtdXRlIC8gZGVtdXRlICovCi0JeyAweDBmLCBLRVlfVFYgfSwJCS8qIGRpc3BsYXkgKi8KLQl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTIsIEtFWV9CUklHSFRORVNTVVAgfSwKLQl7IDB4MTMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAotCXsgMHgxZSwgS0VZX1NFQVJDSCB9LAkJLyogc2VhcmNoICsgKi8KLQl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KLQl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCQkvKiBhbHQgLyBjaGFubmVsICovCi0JeyAweDIzLCBLRVlfTEFOR1VBR0UgfSwJCS8qIDFzdCAvIDJuZCBsYW5ndWFnZSAqLwotCXsgMHgyNiwgS0VZX1NMRUVQIH0sCQkvKiBzbGVlcHRpbWVyICovCi0JeyAweDJlLCBLRVlfTUVOVSB9LAkJLyogMm5kIGNvbnRyb2xzIChVU0E6IG1lbnUpICovCi0JeyAweDMwLCBLRVlfUEFVU0UgfSwKLQl7IDB4MzIsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MzMsIEtFWV9HT1RPIH0sCi0JeyAweDM1LCBLRVlfUExBWSB9LAotCXsgMHgzNiwgS0VZX1NUT1AgfSwKLQl7IDB4MzcsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLwotCXsgMHgzYywgS0VZX1RFWFQgfSwJCS8qIHRlbGV0ZXh0IHN1Ym1vZGUgKEphcGFuOiAxMikgKi8KLQl7IDB4M2QsIEtFWV9TVVNQRU5EIH0sCQkvKiBzeXN0ZW0gc3RhbmRieSAqLwotCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcmM1X3R2X3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfcmM1X3R2LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19yYzVfdHYpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3JjNV90dl90YWJsZSk7Ci0KLS8qIFRhYmxlIGZvciBMZWFkdGVrIFdpbmZhc3QgUmVtb3RlIENvbnRyb2xzIC0gdXNlZCBieSBib3RoIGJ0dHYgYW5kIGN4ODggKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfd2luZmFzdFtdID0gewotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDEyLCBLRVlfMCB9LAotCXsgMHgwNSwgS0VZXzEgfSwKLQl7IDB4MDYsIEtFWV8yIH0sCi0JeyAweDA3LCBLRVlfMyB9LAotCXsgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MGEsIEtFWV81IH0sCi0JeyAweDBiLCBLRVlfNiB9LAotCXsgMHgwZCwgS0VZXzcgfSwKLQl7IDB4MGUsIEtFWV84IH0sCi0JeyAweDBmLCBLRVlfOSB9LAotCi0JeyAweDAwLCBLRVlfUE9XRVIgfSwKLQl7IDB4MWIsIEtFWV9BVURJTyB9LAkJLyogQXVkaW8gU291cmNlICovCi0JeyAweDAyLCBLRVlfVFVORVIgfSwJCS8qIFRWL0ZNLCBub3Qgb24gWTA0MDAwNTIgKi8KLQl7IDB4MWUsIEtFWV9WSURFTyB9LAkJLyogVmlkZW8gU291cmNlICovCi0JeyAweDE2LCBLRVlfSU5GTyB9LAkJLyogRGlzcGxheSBpbmZvcm1hdGlvbiAqLwotCXsgMHgwNCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDA4LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwYywgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMCwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDAzLCBLRVlfWk9PTSB9LAkJLyogZnVsbHNjcmVlbiAqLwotCXsgMHgxZiwgS0VZX1RFWFQgfSwJCS8qIGNsb3NlZCBjYXB0aW9uL3RlbGV0ZXh0ICovCi0JeyAweDIwLCBLRVlfU0xFRVAgfSwKLQl7IDB4MjksIEtFWV9DTEVBUiB9LAkJLyogYm9zcyBrZXkgKi8KLQl7IDB4MTQsIEtFWV9NVVRFIH0sCi0JeyAweDJiLCBLRVlfUkVEIH0sCi0JeyAweDJjLCBLRVlfR1JFRU4gfSwKLQl7IDB4MmQsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MmUsIEtFWV9CTFVFIH0sCi0JeyAweDE4LCBLRVlfS1BQTFVTIH0sCQkvKiBmaW5lIHR1bmUgKyAsIG5vdCBvbiBZMDQwMDUyICovCi0JeyAweDE5LCBLRVlfS1BNSU5VUyB9LAkJLyogZmluZSB0dW5lIC0gLCBub3Qgb24gWTA0MDA1MiAqLwotCXsgMHgyYSwgS0VZX01FRElBIH0sCQkvKiBQSVAgKFBpY3R1cmUgaW4gcGljdHVyZSAqLwotCXsgMHgyMSwgS0VZX0RPVCB9LAotCXsgMHgxMywgS0VZX0VOVEVSIH0sCi0JeyAweDExLCBLRVlfTEFTVCB9LAkJLyogUmVjYWxsIChsYXN0IGNoYW5uZWwgKi8KLQl7IDB4MjIsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHgyMywgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgyNCwgS0VZX05FWFQgfSwKLQl7IDB4MjUsIEtFWV9USU1FIH0sCQkvKiBUaW1lIFNoaWZ0aW5nICovCi0JeyAweDI2LCBLRVlfU1RPUCB9LAotCXsgMHgyNywgS0VZX1JFQ09SRCB9LAotCXsgMHgyOCwgS0VZX1NBVkUgfSwJCS8qIFNjcmVlbnNob3QgKi8KLQl7IDB4MmYsIEtFWV9NRU5VIH0sCi0JeyAweDMwLCBLRVlfQ0FOQ0VMIH0sCi0JeyAweDMxLCBLRVlfQ0hBTk5FTCB9LAkJLyogQ2hhbm5lbCBTdXJmICovCi0JeyAweDMyLCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4MzMsIEtFWV9MQU5HVUFHRSB9LAotCXsgMHgzNCwgS0VZX1JFV0lORCB9LAotCXsgMHgzNSwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDM2LCBLRVlfVFYgfSwKLQl7IDB4MzcsIEtFWV9SQURJTyB9LAkJLyogRk0gKi8KLQl7IDB4MzgsIEtFWV9EVkQgfSwKLQotCXsgMHgxYSwgS0VZX01PREV9LAkJLyogY2hhbmdlIHRvIE1DRSBtb2RlIG9uIFkwNEcwMDUxICovCi0JeyAweDNlLCBLRVlfRjIxIH0sCQkvKiBNQ0UgK1ZPTCwgb24gWTA0RzAwMzMgKi8KLQl7IDB4M2EsIEtFWV9GMjIgfSwJCS8qIE1DRSAtVk9MLCBvbiBZMDRHMDAzMyAqLwotCXsgMHgzYiwgS0VZX0YyMyB9LAkJLyogTUNFICtDSCwgIG9uIFkwNEcwMDMzICovCi0JeyAweDNmLCBLRVlfRjI0IH0JCS8qIE1DRSAtQ0gsICBvbiBZMDRHMDAzMyAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3dpbmZhc3RfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc193aW5mYXN0LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc193aW5mYXN0KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc193aW5mYXN0X3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waW5uYWNsZV9jb2xvcltdID0gewotCXsgMHg1OSwgS0VZX01VVEUgfSwKLQl7IDB4NGEsIEtFWV9QT1dFUiB9LAotCi0JeyAweDE4LCBLRVlfVEVYVCB9LAotCXsgMHgyNiwgS0VZX1RWIH0sCi0JeyAweDNkLCBLRVlfUFJJTlQgfSwKLQotCXsgMHg0OCwgS0VZX1JFRCB9LAotCXsgMHgwNCwgS0VZX0dSRUVOIH0sCi0JeyAweDExLCBLRVlfWUVMTE9XIH0sCi0JeyAweDAwLCBLRVlfQkxVRSB9LAotCi0JeyAweDJkLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCi0KLQl7IDB4NDksIEtFWV9NRU5VIH0sCi0KLQl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MTcsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JeyAweDIwLCBLRVlfVVAgfSwKLQl7IDB4MjEsIEtFWV9ET1dOIH0sCi0JeyAweDIyLCBLRVlfTEVGVCB9LAotCXsgMHgyMywgS0VZX1JJR0hUIH0sCi0JeyAweDBkLCBLRVlfU0VMRUNUIH0sCi0KLQl7IDB4MDgsIEtFWV9CQUNLIH0sCi0JeyAweDA3LCBLRVlfUkVGUkVTSCB9LAotCi0JeyAweDJmLCBLRVlfWk9PTSB9LAotCXsgMHgyOSwgS0VZX1JFQ09SRCB9LAotCi0JeyAweDRiLCBLRVlfUEFVU0UgfSwKLQl7IDB4NGQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MmUsIEtFWV9QTEFZIH0sCi0JeyAweDRlLCBLRVlfRk9SV0FSRCB9LAotCXsgMHg1MywgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDRjLCBLRVlfU1RPUCB9LAotCXsgMHg1NCwgS0VZX05FWFQgfSwKLQotCXsgMHg2OSwgS0VZXzAgfSwKLQl7IDB4NmEsIEtFWV8xIH0sCi0JeyAweDZiLCBLRVlfMiB9LAotCXsgMHg2YywgS0VZXzMgfSwKLQl7IDB4NmQsIEtFWV80IH0sCi0JeyAweDZlLCBLRVlfNSB9LAotCXsgMHg2ZiwgS0VZXzYgfSwKLQl7IDB4NzAsIEtFWV83IH0sCi0JeyAweDcxLCBLRVlfOCB9LAotCXsgMHg3MiwgS0VZXzkgfSwKLQotCXsgMHg3NCwgS0VZX0NIQU5ORUwgfSwKLQl7IDB4MGEsIEtFWV9CQUNLU1BBQ0UgfSwKLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19waW5uYWNsZV9jb2xvcl90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19waW5uYWNsZV9jb2xvciksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcGlubmFjbGVfY29sb3JfdGFibGUpOwotCi0vKiBIYXVwcGF1Z2U6IHRoZSBuZXdlciwgZ3JheSByZW1vdGVzIChzZWVtcyB0aGVyZSBhcmUgbXVsdGlwbGUKLSAqIHNsaWdodGx5IGRpZmZlcmVudCB2ZXJzaW9ucyksIHNoaXBwZWQgd2l0aCBjeDg4K2l2dHYgY2FyZHMuCi0gKiBhbG1vc3QgcmM1IGNvZGluZywgYnV0IHNvbWUgbm9uLXN0YW5kYXJkIGtleXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfaGF1cHBhdWdlX25ld1tdID0gewotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCi0JeyAweDBhLCBLRVlfVEVYVCB9LAkJLyoga2V5cGFkIGFzdGVyaXNrIGFzIHdlbGwgKi8KLQl7IDB4MGIsIEtFWV9SRUQgfSwJCS8qIHJlZCBidXR0b24gKi8KLQl7IDB4MGMsIEtFWV9SQURJTyB9LAotCXsgMHgwZCwgS0VZX01FTlUgfSwKLQl7IDB4MGUsIEtFWV9TVUJUSVRMRSB9LAkJLyogYWxzbyB0aGUgIyBrZXkgKi8KLQl7IDB4MGYsIEtFWV9NVVRFIH0sCi0JeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDEyLCBLRVlfUFJFVklPVVMgfSwJCS8qIHByZXZpb3VzIGNoYW5uZWwgKi8KLQl7IDB4MTQsIEtFWV9VUCB9LAotCXsgMHgxNSwgS0VZX0RPV04gfSwKLQl7IDB4MTYsIEtFWV9MRUZUIH0sCi0JeyAweDE3LCBLRVlfUklHSFQgfSwKLQl7IDB4MTgsIEtFWV9WSURFTyB9LAkJLyogVmlkZW9zICovCi0JeyAweDE5LCBLRVlfQVVESU8gfSwJCS8qIE11c2ljICovCi0JLyogMHgxYTogUGljdHVyZXMgLSBwcmVzdW1lIHRoaXMgbWVhbnMKLQkgICAiTXVsdGltZWRpYSBIb21lIFBsYXRmb3JtIiAtCi0JICAgbm8gIlBJQ1RVUkVTIiBrZXkgaW4gaW5wdXQuaAotCSAqLwotCXsgMHgxYSwgS0VZX01IUCB9LAotCi0JeyAweDFiLCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLwotCXsgMHgxYywgS0VZX1RWIH0sCi0JeyAweDFlLCBLRVlfTkVYVFNPTkcgfSwJCS8qIHNraXAgPnwgKi8KLQl7IDB4MWYsIEtFWV9FWElUIH0sCQkvKiBiYWNrL2V4aXQgKi8KLQl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KLQl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCQkvKiBzb3VyY2UgKG9sZCBibGFjayByZW1vdGUpICovCi0JeyAweDI0LCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIHJlcGxheSB8PCAqLwotCXsgMHgyNSwgS0VZX0VOVEVSIH0sCQkvKiBPSyAqLwotCXsgMHgyNiwgS0VZX1NMRUVQIH0sCQkvKiBtaW5pbWl6ZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KLQl7IDB4MjksIEtFWV9CTFVFIH0sCQkvKiBibHVlIGtleSAqLwotCXsgMHgyZSwgS0VZX0dSRUVOIH0sCQkvKiBncmVlbiBidXR0b24gKi8KLQl7IDB4MzAsIEtFWV9QQVVTRSB9LAkJLyogcGF1c2UgKi8KLQl7IDB4MzIsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCi0JeyAweDM0LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLwotCXsgMHgzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MzYsIEtFWV9TVE9QIH0sCi0JeyAweDM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KLQl7IDB4MzgsIEtFWV9ZRUxMT1cgfSwJCS8qIHllbGxvdyBrZXkgKi8KLQl7IDB4M2IsIEtFWV9TRUxFQ1QgfSwJCS8qIHRvcCByaWdodCBidXR0b24gKi8KLQl7IDB4M2MsIEtFWV9aT09NIH0sCQkvKiBmdWxsICovCi0JeyAweDNkLCBLRVlfUE9XRVIgfSwJCS8qIHN5c3RlbSBwb3dlciAoZ3JlZW4gYnV0dG9uKSAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlKTsKLQotLyoKLSAqIEhhdXBwYXVnZTp0aGUgbmV3ZXIsIGdyYXkgcmVtb3RlcyAoc2VlbXMgdGhlcmUgYXJlIG11bHRpcGxlCi0gKiBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMpLCBzaGlwcGVkIHdpdGggY3g4OCtpdnR2IGNhcmRzLgotICoKLSAqIFRoaXMgdGFibGUgY29udGFpbnMgdGhlIGNvbXBsZXRlIFJDNSBjb2RlLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGRhdGEgcGFydAotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3JjNV9oYXVwcGF1Z2VfbmV3W10gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4MWUwMCwgS0VZXzAgfSwKLQl7IDB4MWUwMSwgS0VZXzEgfSwKLQl7IDB4MWUwMiwgS0VZXzIgfSwKLQl7IDB4MWUwMywgS0VZXzMgfSwKLQl7IDB4MWUwNCwgS0VZXzQgfSwKLQl7IDB4MWUwNSwgS0VZXzUgfSwKLQl7IDB4MWUwNiwgS0VZXzYgfSwKLQl7IDB4MWUwNywgS0VZXzcgfSwKLQl7IDB4MWUwOCwgS0VZXzggfSwKLQl7IDB4MWUwOSwgS0VZXzkgfSwKLQotCXsgMHgxZTBhLCBLRVlfVEVYVCB9LAkJLyoga2V5cGFkIGFzdGVyaXNrIGFzIHdlbGwgKi8KLQl7IDB4MWUwYiwgS0VZX1JFRCB9LAkJLyogcmVkIGJ1dHRvbiAqLwotCXsgMHgxZTBjLCBLRVlfUkFESU8gfSwKLQl7IDB4MWUwZCwgS0VZX01FTlUgfSwKLQl7IDB4MWUwZSwgS0VZX1NVQlRJVExFIH0sCQkvKiBhbHNvIHRoZSAjIGtleSAqLwotCXsgMHgxZTBmLCBLRVlfTVVURSB9LAotCXsgMHgxZTEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWUxMSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MWUxMiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBwcmV2aW91cyBjaGFubmVsICovCi0JeyAweDFlMTQsIEtFWV9VUCB9LAotCXsgMHgxZTE1LCBLRVlfRE9XTiB9LAotCXsgMHgxZTE2LCBLRVlfTEVGVCB9LAotCXsgMHgxZTE3LCBLRVlfUklHSFQgfSwKLQl7IDB4MWUxOCwgS0VZX1ZJREVPIH0sCQkvKiBWaWRlb3MgKi8KLQl7IDB4MWUxOSwgS0VZX0FVRElPIH0sCQkvKiBNdXNpYyAqLwotCS8qIDB4MWUxYTogUGljdHVyZXMgLSBwcmVzdW1lIHRoaXMgbWVhbnMKLQkgICAiTXVsdGltZWRpYSBIb21lIFBsYXRmb3JtIiAtCi0JICAgbm8gIlBJQ1RVUkVTIiBrZXkgaW4gaW5wdXQuaAotCSAqLwotCXsgMHgxZTFhLCBLRVlfTUhQIH0sCi0KLQl7IDB4MWUxYiwgS0VZX0VQRyB9LAkJLyogR3VpZGUgKi8KLQl7IDB4MWUxYywgS0VZX1RWIH0sCi0JeyAweDFlMWUsIEtFWV9ORVhUU09ORyB9LAkJLyogc2tpcCA+fCAqLwotCXsgMHgxZTFmLCBLRVlfRVhJVCB9LAkJLyogYmFjay9leGl0ICovCi0JeyAweDFlMjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCXsgMHgxZTIxLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCXsgMHgxZTIyLCBLRVlfQ0hBTk5FTCB9LAkJLyogc291cmNlIChvbGQgYmxhY2sgcmVtb3RlKSAqLwotCXsgMHgxZTI0LCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIHJlcGxheSB8PCAqLwotCXsgMHgxZTI1LCBLRVlfRU5URVIgfSwJCS8qIE9LICovCi0JeyAweDFlMjYsIEtFWV9TTEVFUCB9LAkJLyogbWluaW1pemUgKG9sZCBibGFjayByZW1vdGUpICovCi0JeyAweDFlMjksIEtFWV9CTFVFIH0sCQkvKiBibHVlIGtleSAqLwotCXsgMHgxZTJlLCBLRVlfR1JFRU4gfSwJCS8qIGdyZWVuIGJ1dHRvbiAqLwotCXsgMHgxZTMwLCBLRVlfUEFVU0UgfSwJCS8qIHBhdXNlICovCi0JeyAweDFlMzIsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCi0JeyAweDFlMzQsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCi0JeyAweDFlMzUsIEtFWV9QTEFZIH0sCi0JeyAweDFlMzYsIEtFWV9TVE9QIH0sCi0JeyAweDFlMzcsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLwotCXsgMHgxZTM4LCBLRVlfWUVMTE9XIH0sCQkvKiB5ZWxsb3cga2V5ICovCi0JeyAweDFlM2IsIEtFWV9TRUxFQ1QgfSwJCS8qIHRvcCByaWdodCBidXR0b24gKi8KLQl7IDB4MWUzYywgS0VZX1pPT00gfSwJCS8qIGZ1bGwgKi8KLQl7IDB4MWUzZCwgS0VZX1BPV0VSIH0sCQkvKiBzeXN0ZW0gcG93ZXIgKGdyZWVuIGJ1dHRvbikgKi8KLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ld190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3JjNV9oYXVwcGF1Z2VfbmV3LAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ldyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcmM1X2hhdXBwYXVnZV9uZXdfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX25wZ3RlY2hbXSA9IHsKLQl7IDB4MWQsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogc3dpdGNoIGlucHV0cyAqLwotCXsgMHgyYSwgS0VZX0ZST05UIH0sCi0KLQl7IDB4M2UsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MGEsIEtFWV80IH0sCi0JeyAweDBlLCBLRVlfNSB9LAotCXsgMHgxMiwgS0VZXzYgfSwKLQl7IDB4MTYsIEtFWV83IH0sCi0JeyAweDFhLCBLRVlfOCB9LAotCXsgMHgxZSwgS0VZXzkgfSwKLQl7IDB4M2EsIEtFWV8wIH0sCi0JeyAweDIyLCBLRVlfTlVNTE9DSyB9LAkJLyogLS8tLSAqLwotCXsgMHgyMCwgS0VZX1JFRlJFU0ggfSwKLQotCXsgMHgwMywgS0VZX0JSSUdIVE5FU1NET1dOIH0sCi0JeyAweDI4LCBLRVlfQVVESU8gfSwKLQl7IDB4M2MsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4M2YsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDJlLCBLRVlfTVVURSB9LAotCXsgMHgzYiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAwLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDcsIEtFWV9CUklHSFRORVNTVVAgfSwKLQl7IDB4MmMsIEtFWV9URVhUIH0sCi0KLQl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MTcsIEtFWV9QTEFZIH0sCi0JeyAweDEzLCBLRVlfUEFVU0UgfSwKLQl7IDB4MjYsIEtFWV9TVE9QIH0sCi0JeyAweDE4LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MTQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MzMsIEtFWV9aT09NIH0sCi0JeyAweDMyLCBLRVlfS0VZQk9BUkQgfSwKLQl7IDB4MzAsIEtFWV9HT1RPIH0sCQkvKiBQb2ludGluZyBhcnJvdyAqLwotCXsgMHgzNiwgS0VZX01BQ1JPIH0sCQkvKiBNYXhpbWl6ZS9NaW5pbWl6ZSAoeWVsbG93KSAqLwotCXsgMHgwYiwgS0VZX1JBRElPIH0sCi0JeyAweDEwLCBLRVlfUE9XRVIgfSwKLQotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25wZ3RlY2hfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19ucGd0ZWNoLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19ucGd0ZWNoKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ucGd0ZWNoX3RhYmxlKTsKLQotLyogTm9yd29vZCBNaWNybyAobm9uLVBybykgVFYgVHVuZXIKLSAgIEJ5IFBldGVyIE5hdWxscyA8cGV0ZXJAY2hvY2t5Lm9yZz4KLSAgIEtleSBjb21tZW50cyBhcmUgdGhlIGZ1bmN0aW9ucyBnaXZlbiBpbiB0aGUgbWFudWFsICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX25vcndvb2RbXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHgyMCwgS0VZXzAgfSwKLQl7IDB4MjEsIEtFWV8xIH0sCi0JeyAweDIyLCBLRVlfMiB9LAotCXsgMHgyMywgS0VZXzMgfSwKLQl7IDB4MjQsIEtFWV80IH0sCi0JeyAweDI1LCBLRVlfNSB9LAotCXsgMHgyNiwgS0VZXzYgfSwKLQl7IDB4MjcsIEtFWV83IH0sCi0JeyAweDI4LCBLRVlfOCB9LAotCXsgMHgyOSwgS0VZXzkgfSwKLQotCXsgMHg3OCwgS0VZX1RVTkVSIH0sCQkvKiBWaWRlbyBTb3VyY2UgICAgICAgICovCi0JeyAweDJjLCBLRVlfRVhJVCB9LAkJLyogT3Blbi9DbG9zZSBzb2Z0d2FyZSAqLwotCXsgMHgyYSwgS0VZX1NFTEVDVCB9LAkJLyogMiBEaWdpdCBTZWxlY3QgICAgICAqLwotCXsgMHg2OSwgS0VZX0FHQUlOIH0sCQkvKiBSZWNhbGwgICAgICAgICAgICAgICovCi0KLQl7IDB4MzIsIEtFWV9CUklHSFRORVNTVVAgfSwJLyogQnJpZ2h0bmVzcyBpbmNyZWFzZSAqLwotCXsgMHgzMywgS0VZX0JSSUdIVE5FU1NET1dOIH0sCS8qIEJyaWdodG5lc3MgZGVjcmVhc2UgKi8KLQl7IDB4NmIsIEtFWV9LUFBMVVMgfSwJCS8qIChub3QgbmFtZWQgPj4+Pj4pICAgKi8KLQl7IDB4NmMsIEtFWV9LUE1JTlVTIH0sCQkvKiAobm90IG5hbWVkIDw8PDw8KSAgICovCi0KLQl7IDB4MmQsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICAgICAgICAgICAgICAgICovCi0JeyAweDMwLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFZvbHVtZSB1cCAgICAgICAgICAgKi8KLQl7IDB4MzEsIEtFWV9WT0xVTUVET1dOIH0sCS8qIFZvbHVtZSBkb3duICAgICAgICAgKi8KLQl7IDB4NjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogQ2hhbm5lbCB1cCAgICAgICAgICAqLwotCXsgMHg2MSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENoYW5uZWwgZG93biAgICAgICAgKi8KLQotCXsgMHgzZiwgS0VZX1JFQ09SRCB9LAkJLyogUmVjb3JkICAgICAgICAgICAgICAqLwotCXsgMHgzNywgS0VZX1BMQVkgfSwJCS8qIFBsYXkgICAgICAgICAgICAgICAgKi8KLQl7IDB4MzYsIEtFWV9QQVVTRSB9LAkJLyogUGF1c2UgICAgICAgICAgICAgICAqLwotCXsgMHgyYiwgS0VZX1NUT1AgfSwJCS8qIFN0b3AgICAgICAgICAgICAgICAgKi8KLQl7IDB4NjcsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBGb3dhcmQgICAgICAgICAgICAgICovCi0JeyAweDY2LCBLRVlfUkVXSU5EIH0sCQkvKiBSZXdpbmQgICAgICAgICAgICAgICovCi0JeyAweDNlLCBLRVlfU0VBUkNIIH0sCQkvKiBBdXRvIFNjYW4gICAgICAgICAgICovCi0JeyAweDJlLCBLRVlfQ0FNRVJBIH0sCQkvKiBDYXB0dXJlIFZpZGVvICAgICAgICovCi0JeyAweDZkLCBLRVlfTUVOVSB9LAkJLyogU2hvdy9IaWRlIENvbnRyb2wgICAqLwotCXsgMHgyZiwgS0VZX1pPT00gfSwJCS8qIEZ1bGwgU2NyZWVuICAgICAgICAgKi8KLQl7IDB4MzQsIEtFWV9SQURJTyB9LAkJLyogRk0gICAgICAgICAgICAgICAgICAqLwotCXsgMHg2NSwgS0VZX1BPV0VSIH0sCQkvKiBDb21wdXRlciBwb3dlciAgICAgICovCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbm9yd29vZF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX25vcndvb2QsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX25vcndvb2QpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25vcndvb2RfdGFibGUpOwotCi0vKiBGcm9tIHJlYWRpbmcgdGhlIGZvbGxvd2luZyByZW1vdGVzOgotICogWmVuaXRoIFVuaXZlcnNhbCA3IC8gVFYgTW9kZSA4MDcgLyBWQ1IgTW9kZSA4MzcKLSAqIEhhdXBwYXVnZSAoZnJvbSBOT1ZBLUNJLXMgYm94IHByb2R1Y3QpCi0gKiBUaGlzIGlzIGEgIm1pZGRsZSBvZiB0aGUgcm9hZCIgYXBwcm9hY2gsIGRpZmZlcmVuY2VzIGFyZSBub3RlZAotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2J1ZGdldF9jaV9vbGRbXSA9IHsKLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDBhLCBLRVlfRU5URVIgfSwKLQl7IDB4MGIsIEtFWV9SRUQgfSwKLQl7IDB4MGMsIEtFWV9QT1dFUiB9LAkJLyogUkFESU8gb24gSGF1cHBhdWdlICovCi0JeyAweDBkLCBLRVlfTVVURSB9LAotCXsgMHgwZiwgS0VZX0EgfSwJCS8qIFRWIG9uIEhhdXBwYXVnZSAqLwotCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxNCwgS0VZX0IgfSwKLQl7IDB4MWMsIEtFWV9VUCB9LAotCXsgMHgxZCwgS0VZX0RPV04gfSwKLQl7IDB4MWUsIEtFWV9PUFRJT04gfSwJCS8qIFJFU0VSVkVEIG9uIEhhdXBwYXVnZSAqLwotCXsgMHgxZiwgS0VZX0JSRUFLIH0sCi0JeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDIxLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MjIsIEtFWV9QUkVWSU9VUyB9LAkJLyogUHJldiBDaCBvbiBaZW5pdGgsIFNPVVJDRSBvbiBIYXVwcGF1Z2UgKi8KLQl7IDB4MjQsIEtFWV9SRVNUQVJUIH0sCi0JeyAweDI1LCBLRVlfT0sgfSwKLQl7IDB4MjYsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogTUlOSU1JWkUgb24gSGF1cHBhdWdlICovCi0JeyAweDI4LCBLRVlfRU5URVIgfSwJCS8qIFZDUiBtb2RlIG9uIFplbml0aCAqLwotCXsgMHgyOSwgS0VZX1BBVVNFIH0sCi0JeyAweDJiLCBLRVlfUklHSFQgfSwKLQl7IDB4MmMsIEtFWV9MRUZUIH0sCi0JeyAweDJlLCBLRVlfTUVOVSB9LAkJLyogRlVMTCBTQ1JFRU4gb24gSGF1cHBhdWdlICovCi0JeyAweDMwLCBLRVlfU0xPVyB9LAotCXsgMHgzMSwgS0VZX1BSRVZJT1VTIH0sCQkvKiBWQ1IgbW9kZSBvbiBaZW5pdGggKi8KLQl7IDB4MzIsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MzQsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MzYsIEtFWV9TVE9QIH0sCi0JeyAweDM3LCBLRVlfUkVDT1JEIH0sCi0JeyAweDM4LCBLRVlfVFVORVIgfSwJCS8qIFRWL1ZDUiBvbiBaZW5pdGggKi8KLQl7IDB4M2EsIEtFWV9DIH0sCi0JeyAweDNjLCBLRVlfRVhJVCB9LAotCXsgMHgzZCwgS0VZX1BPV0VSMiB9LAotCXsgMHgzZSwgS0VZX1RVTkVSIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2J1ZGdldF9jaV9vbGQsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2J1ZGdldF9jaV9vbGQpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2J1ZGdldF9jaV9vbGRfdGFibGUpOwotCi0vKgotICogTWFyYyBGYXJnYXMgPHRlbGVuaWVrb0B0ZWxlbmlla28uY29tPgotICogdGhpcyBpcyB0aGUgcmVtb3RlIGNvbnRyb2wgdGhhdCBjb21lcyB3aXRoIHRoZSBhc3VzIHA3MTMxCi0gKiB3aGljaCBoYXMgYSBsYWJlbCBzYXlpbmcgaXMgIk1vZGVsIFBDLTM5IgotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2FzdXNfcGMzOVtdID0gewotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDE1LCBLRVlfMCB9LAotCXsgMHgyOSwgS0VZXzEgfSwKLQl7IDB4MmQsIEtFWV8yIH0sCi0JeyAweDJiLCBLRVlfMyB9LAotCXsgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MGQsIEtFWV81IH0sCi0JeyAweDBiLCBLRVlfNiB9LAotCXsgMHgzMSwgS0VZXzcgfSwKLQl7IDB4MzUsIEtFWV84IH0sCi0JeyAweDMzLCBLRVlfOSB9LAotCi0JeyAweDNlLCBLRVlfUkFESU8gfSwJCS8qIHJhZGlvICovCi0JeyAweDAzLCBLRVlfTUVOVSB9LAkJLyogZHZkL21lbnUgKi8KLQl7IDB4MmEsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxOSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MzcsIEtFWV9VUCB9LAotCXsgMHgzYiwgS0VZX0RPV04gfSwKLQl7IDB4MjcsIEtFWV9MRUZUIH0sCi0JeyAweDJmLCBLRVlfUklHSFQgfSwKLQl7IDB4MjUsIEtFWV9WSURFTyB9LAkJLyogdmlkZW8gKi8KLQl7IDB4MzksIEtFWV9BVURJTyB9LAkJLyogbXVzaWMgKi8KLQotCXsgMHgyMSwgS0VZX1RWIH0sCQkvKiB0diAqLwotCXsgMHgxZCwgS0VZX0VYSVQgfSwJCS8qIGJhY2sgKi8KLQl7IDB4MGEsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCXsgMHgxYiwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KLQl7IDB4MWEsIEtFWV9FTlRFUiB9LAkJLyogZW50ZXIgKi8KLQotCXsgMHgwNiwgS0VZX1BBVVNFIH0sCQkvKiBwbGF5L3BhdXNlICovCi0JeyAweDFlLCBLRVlfUFJFVklPVVMgfSwJCS8qIHJldyAqLwotCXsgMHgyNiwgS0VZX05FWFQgfSwJCS8qIGZvcndhcmQgKi8KLQl7IDB4MGUsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCi0JeyAweDNhLCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLwotCXsgMHgzNiwgS0VZX1NUT1AgfSwKLQl7IDB4MmUsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLwotCXsgMHgxNiwgS0VZX1BPV0VSIH0sCQkvKiB0aGUgYnV0dG9uIHRoYXQgcmVhZHMgImNsb3NlIiAqLwotCi0JeyAweDExLCBLRVlfWk9PTSB9LAkJLyogZnVsbCBzY3JlZW4gKi8KLQl7IDB4MTMsIEtFWV9NQUNSTyB9LAkJLyogcmVjYWxsICovCi0JeyAweDIzLCBLRVlfSE9NRSB9LAkJLyogaG9tZSAqLwotCXsgMHgwNSwgS0VZX1BWUiB9LAkJLyogcGljdHVyZSAqLwotCXsgMHgzZCwgS0VZX01VVEUgfSwJCS8qIG11dGUgKi8KLQl7IDB4MDEsIEtFWV9EVkQgfSwJCS8qIGR2ZCAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2FzdXNfcGMzOV90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2FzdXNfcGMzOSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXN1c19wYzM5KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hc3VzX3BjMzlfdGFibGUpOwotCi0KLS8qIEVuY29yZSBFTkxUVi1GTSAgLSBibGFjayBwbGFzdGljLCB3aGl0ZSBmcm9udCBjb3ZlciB3aXRoIHdoaXRlIGdsb3dpbmcgYnV0dG9ucwotICAgIEp1YW4gUGFibG8gU29ybWFuaSA8c29ybWFuQGdtYWlsLmNvbT4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZW5jb3JlX2VubHR2W10gPSB7Ci0KLQkvKiBQb3dlciBidXR0b24gZG9lcyBub3RoaW5nLCBuZWl0aGVyIGluIFdpbmRvd3MgYXBwLAotCSBhbHRob3VnaCBpdCBzZW5kcyBkYXRhICh1c2VkIGZvciBCSU9TIHdha2V1cD8pICovCi0JeyAweDBkLCBLRVlfTVVURSB9LAotCi0JeyAweDFlLCBLRVlfVFYgfSwKLQl7IDB4MDAsIEtFWV9WSURFTyB9LAotCXsgMHgwMSwgS0VZX0FVRElPIH0sCQkvKiBtdXNpYyAqLwotCXsgMHgwMiwgS0VZX01IUCB9LAkJLyogcGljdHVyZSAqLwotCi0JeyAweDFmLCBLRVlfMSB9LAotCXsgMHgwMywgS0VZXzIgfSwKLQl7IDB4MDQsIEtFWV8zIH0sCi0JeyAweDA1LCBLRVlfNCB9LAotCXsgMHgxYywgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MWQsIEtFWV85IH0sCi0JeyAweDBhLCBLRVlfMCB9LAotCi0JeyAweDA5LCBLRVlfTElTVCB9LAkJLyogLS8tLSAqLwotCXsgMHgwYiwgS0VZX0xBU1QgfSwJCS8qIHJlY2FsbCAqLwotCi0JeyAweDE0LCBLRVlfSE9NRSB9LAkJLyogd2luIHN0YXJ0IG1lbnUgKi8KLQl7IDB4MTUsIEtFWV9FWElUIH0sCQkvKiBleGl0ICovCi0JeyAweDE2LCBLRVlfQ0hBTk5FTFVQIH0sCS8qIFVQICovCi0JeyAweDEyLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogRE9XTiAqLwotCXsgMHgwYywgS0VZX1ZPTFVNRVVQIH0sCQkvKiBSSUdIVCAqLwotCXsgMHgxNywgS0VZX1ZPTFVNRURPV04gfSwJLyogTEVGVCAqLwotCi0JeyAweDE4LCBLRVlfRU5URVIgfSwJCS8qIE9LICovCi0KLQl7IDB4MGUsIEtFWV9FU0MgfSwKLQl7IDB4MTMsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogZGVza3RvcCAqLwotCXsgMHgxMSwgS0VZX1RBQiB9LAotCXsgMHgxOSwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggKi8KLQotCXsgMHgxYSwgS0VZX01FTlUgfSwKLQl7IDB4MWIsIEtFWV9aT09NIH0sCQkvKiBmdWxsc2NyZWVuICovCi0JeyAweDQ0LCBLRVlfVElNRSB9LAkJLyogdGltZSBzaGlmdCAqLwotCXsgMHg0MCwgS0VZX01PREUgfSwJCS8qIHNvdXJjZSAqLwotCi0JeyAweDVhLCBLRVlfUkVDT1JEIH0sCi0JeyAweDQyLCBLRVlfUExBWSB9LAkJLyogcGxheS9wYXVzZSAqLwotCXsgMHg0NSwgS0VZX1NUT1AgfSwKLQl7IDB4NDMsIEtFWV9DQU1FUkEgfSwJCS8qIGNhbWVyYSBpY29uICovCi0KLQl7IDB4NDgsIEtFWV9SRVdJTkQgfSwKLQl7IDB4NGEsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHg0OSwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDRiLCBLRVlfTkVYVCB9LAotCi0JeyAweDRjLCBLRVlfRkFWT1JJVEVTIH0sCS8qIHR2IHdhbGwgKi8KLQl7IDB4NGQsIEtFWV9TT1VORCB9LAkJLyogRFZEIHNvdW5kICovCi0JeyAweDRlLCBLRVlfTEFOR1VBR0UgfSwJCS8qIERWRCBsYW5nICovCi0JeyAweDRmLCBLRVlfVEVYVCB9LAkJLyogRFZEIHRleHQgKi8KLQotCXsgMHg1MCwgS0VZX1NMRUVQIH0sCQkvKiBzaHV0ZG93biAqLwotCXsgMHg1MSwgS0VZX01PREUgfSwJCS8qIHN0ZXJlbyA+IG1haW4gKi8KLQl7IDB4NTIsIEtFWV9TRUxFQ1QgfSwJCS8qIHN0ZXJlbyA+IHNhcCAqLwotCXsgMHg1MywgS0VZX1BST0cxIH0sCQkvKiB0ZWxldGV4dCAqLwotCi0KLQl7IDB4NTksIEtFWV9SRUQgfSwJCS8qIEFQMSAqLwotCXsgMHg0MSwgS0VZX0dSRUVOIH0sCQkvKiBBUDIgKi8KLQl7IDB4NDcsIEtFWV9ZRUxMT1cgfSwJCS8qIEFQMyAqLwotCXsgMHg1NywgS0VZX0JMVUUgfSwJCS8qIEFQNCAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0dl90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2VuY29yZV9lbmx0diwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZW5jb3JlX2VubHR2KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHZfdGFibGUpOwotCi0vKiBFbmNvcmUgRU5MVFYyLUZNICAtIHNpbHZlciBwbGFzdGljIC0gIldhbmQgTWVkaWEiIHdyaXR0ZW4gYXQgdGhlIGJvdHRvbgotICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyW10gPSB7Ci0JeyAweDRjLCBLRVlfUE9XRVIyIH0sCi0JeyAweDRhLCBLRVlfVFVORVIgfSwKLQl7IDB4NDAsIEtFWV8xIH0sCi0JeyAweDYwLCBLRVlfMiB9LAotCXsgMHg1MCwgS0VZXzMgfSwKLQl7IDB4NzAsIEtFWV80IH0sCi0JeyAweDQ4LCBLRVlfNSB9LAotCXsgMHg2OCwgS0VZXzYgfSwKLQl7IDB4NTgsIEtFWV83IH0sCi0JeyAweDc4LCBLRVlfOCB9LAotCXsgMHg0NCwgS0VZXzkgfSwKLQl7IDB4NTQsIEtFWV8wIH0sCi0KLQl7IDB4NjQsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCi0JeyAweDRlLCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLwotCi0JeyAweDZjLCBLRVlfU1dJVENIVklERU9NT0RFIH0sCS8qIFZpZGVvIFNvdXJjZSAqLwotCXsgMHg1ZSwgS0VZX01FTlUgfSwKLQl7IDB4NTYsIEtFWV9TQ1JFRU4gfSwKLQl7IDB4N2EsIEtFWV9TRVRVUCB9LAotCi0JeyAweDQ2LCBLRVlfTVVURSB9LAotCXsgMHg1YywgS0VZX01PREUgfSwJCS8qIFN0ZXJlbyAqLwotCXsgMHg3NCwgS0VZX0lORk8gfSwKLQl7IDB4N2MsIEtFWV9DTEVBUiB9LAotCi0JeyAweDU1LCBLRVlfVVAgfSwKLQl7IDB4NDksIEtFWV9ET1dOIH0sCi0JeyAweDdlLCBLRVlfTEVGVCB9LAotCXsgMHg1OSwgS0VZX1JJR0hUIH0sCi0JeyAweDZhLCBLRVlfRU5URVIgfSwKLQotCXsgMHg0MiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDYyLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHg1MiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg3MiwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4NDEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4NTEsIEtFWV9DQU1FUkEgfSwJCS8qIFNuYXBzaG90ICovCi0JeyAweDc1LCBLRVlfVElNRSB9LAkJLyogVGltZXNoaWZ0ICovCi0JeyAweDcxLCBLRVlfVFYyIH0sCQkvKiBQSVAgKi8KLQotCXsgMHg0NSwgS0VZX1JFV0lORCB9LAotCXsgMHg2ZiwgS0VZX1BBVVNFIH0sCi0JeyAweDdkLCBLRVlfRk9SV0FSRCB9LAotCXsgMHg3OSwgS0VZX1NUT1AgfSwKLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZW5jb3JlX2VubHR2MiwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZW5jb3JlX2VubHR2MiksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW5jb3JlX2VubHR2Ml90YWJsZSk7Ci0KLS8qIGZvciB0aGUgVGVjaG5vdHJlbmQgMTUwMCBidW5kbGVkIHJlbW90ZXMgKGdyZXkgYW5kIGJsYWNrKTogKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdHRfMTUwMFtdID0gewotCXsgMHgwMSwgS0VZX1BPV0VSIH0sCi0JeyAweDAyLCBLRVlfU0hVRkZMRSB9LAkJLyogPyBkb3VibGUtYXJyb3cga2V5ICovCi0JeyAweDAzLCBLRVlfMSB9LAotCXsgMHgwNCwgS0VZXzIgfSwKLQl7IDB4MDUsIEtFWV8zIH0sCi0JeyAweDA2LCBLRVlfNCB9LAotCXsgMHgwNywgS0VZXzUgfSwKLQl7IDB4MDgsIEtFWV82IH0sCi0JeyAweDA5LCBLRVlfNyB9LAotCXsgMHgwYSwgS0VZXzggfSwKLQl7IDB4MGIsIEtFWV85IH0sCi0JeyAweDBjLCBLRVlfMCB9LAotCXsgMHgwZCwgS0VZX1VQIH0sCi0JeyAweDBlLCBLRVlfTEVGVCB9LAotCXsgMHgwZiwgS0VZX09LIH0sCi0JeyAweDEwLCBLRVlfUklHSFQgfSwKLQl7IDB4MTEsIEtFWV9ET1dOIH0sCi0JeyAweDEyLCBLRVlfSU5GTyB9LAotCXsgMHgxMywgS0VZX0VYSVQgfSwKLQl7IDB4MTQsIEtFWV9SRUQgfSwKLQl7IDB4MTUsIEtFWV9HUkVFTiB9LAotCXsgMHgxNiwgS0VZX1lFTExPVyB9LAotCXsgMHgxNywgS0VZX0JMVUUgfSwKLQl7IDB4MTgsIEtFWV9NVVRFIH0sCi0JeyAweDE5LCBLRVlfVEVYVCB9LAotCXsgMHgxYSwgS0VZX01PREUgfSwJCS8qID8gVFYvUmFkaW8gKi8KLQl7IDB4MjEsIEtFWV9PUFRJT04gfSwKLQl7IDB4MjIsIEtFWV9FUEcgfSwKLQl7IDB4MjMsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MjQsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgyNSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDI2LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgyNywgS0VZX1NFVFVQIH0sCi0JeyAweDNhLCBLRVlfUkVDT1JEIH0sCQkvKiB0aGVzZSBrZXlzIGFyZSBvbmx5IGluIHRoZSBibGFjayByZW1vdGUgKi8KLQl7IDB4M2IsIEtFWV9QTEFZIH0sCi0JeyAweDNjLCBLRVlfU1RPUCB9LAotCXsgMHgzZCwgS0VZX1JFV0lORCB9LAotCXsgMHgzZSwgS0VZX1BBVVNFIH0sCi0JeyAweDNmLCBLRVlfRk9SV0FSRCB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3R0XzE1MDBfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc190dF8xNTAwLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc190dF8xNTAwKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc190dF8xNTAwX3RhYmxlKTsKLQotLyogRFZpQ08gRlVTSU9OIEhEVFYgTUNFIHJlbW90ZSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19mdXNpb25oZHR2X21jZVtdID0gewotCi0JeyAweDBiLCBLRVlfMSB9LAotCXsgMHgxNywgS0VZXzIgfSwKLQl7IDB4MWIsIEtFWV8zIH0sCi0JeyAweDA3LCBLRVlfNCB9LAotCXsgMHg1MCwgS0VZXzUgfSwKLQl7IDB4NTQsIEtFWV82IH0sCi0JeyAweDQ4LCBLRVlfNyB9LAotCXsgMHg0YywgS0VZXzggfSwKLQl7IDB4NTgsIEtFWV85IH0sCi0JeyAweDAzLCBLRVlfMCB9LAotCi0JeyAweDVlLCBLRVlfT0sgfSwKLQl7IDB4NTEsIEtFWV9VUCB9LAotCXsgMHg1MywgS0VZX0RPV04gfSwKLQl7IDB4NWIsIEtFWV9MRUZUIH0sCi0JeyAweDVmLCBLRVlfUklHSFQgfSwKLQotCXsgMHgwMiwgS0VZX1RWIH0sCQkvKiBMYWJlbGVkIERUViBvbiByZW1vdGUgKi8KLQl7IDB4MGUsIEtFWV9NUDMgfSwKLQl7IDB4MWEsIEtFWV9EVkQgfSwKLQl7IDB4MWUsIEtFWV9GQVZPUklURVMgfSwJLyogTGFiZWxlZCBDUEYgb24gcmVtb3RlICovCi0JeyAweDE2LCBLRVlfU0VUVVAgfSwKLQl7IDB4NDYsIEtFWV9QT1dFUjIgfSwJCS8qIFRWIE9uL09mZiBidXR0b24gb24gcmVtb3RlICovCi0JeyAweDBhLCBLRVlfRVBHIH0sCQkvKiBMYWJlbGVkIEd1aWRlIG9uIHJlbW90ZSAqLwotCi0JeyAweDQ5LCBLRVlfQkFDSyB9LAotCXsgMHg1OSwgS0VZX0lORk8gfSwJCS8qIExhYmVsZWQgTU9SRSBvbiByZW1vdGUgKi8KLQl7IDB4NGQsIEtFWV9NRU5VIH0sCQkvKiBMYWJlbGVkIERWRE1FTlUgb24gcmVtb3RlICovCi0JeyAweDU1LCBLRVlfQ1lDTEVXSU5ET1dTIH0sCS8qIExhYmVsZWQgQUxULVRBQiBvbiByZW1vdGUgKi8KLQotCXsgMHgwZiwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiBMYWJlbGVkIHw8PCBSRVBMQVkgb24gcmVtb3RlICovCi0JeyAweDEyLCBLRVlfTkVYVFNPTkcgfSwJCS8qIExhYmVsZWQgPj58IFNLSVAgb24gcmVtb3RlICovCi0JeyAweDQyLCBLRVlfRU5URVIgfSwJCS8qIExhYmVsZWQgU1RBUlQgd2l0aCBhIGdyZWVuCi0JCQkJCSAgIE1TIHdpbmRvd3MgbG9nbyBvbiByZW1vdGUgKi8KLQotCXsgMHgxNSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDA1LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxMSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwOSwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4NTIsIEtFWV9DQU1FUkEgfSwKLQl7IDB4NWEsIEtFWV9UVU5FUiB9LAotCXsgMHgxOSwgS0VZX09QRU4gfSwKLQotCXsgMHgxMywgS0VZX01PREUgfSwJCS8qIDQ6MyAxNjo5IHNlbGVjdCAqLwotCXsgMHgxZiwgS0VZX1pPT00gfSwKLQotCXsgMHg0MywgS0VZX1JFV0lORCB9LAotCXsgMHg0NywgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHg0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDU3LCBLRVlfTVVURSB9LAotCXsgMHgwZCwgS0VZX1NUT1AgfSwKLQl7IDB4MDEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4NGUsIEtFWV9QT1dFUiB9LAotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZnVzaW9uaGR0dl9tY2UsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mdXNpb25oZHR2X21jZV90YWJsZSk7Ci0KLS8qIFBpbm5hY2xlIFBDVFYgSEQgODAwaSBtaW5pIHJlbW90ZSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkW10gPSB7Ci0KLQl7IDB4MGYsIEtFWV8xIH0sCi0JeyAweDE1LCBLRVlfMiB9LAotCXsgMHgxMCwgS0VZXzMgfSwKLQl7IDB4MTgsIEtFWV80IH0sCi0JeyAweDFiLCBLRVlfNSB9LAotCXsgMHgxZSwgS0VZXzYgfSwKLQl7IDB4MTEsIEtFWV83IH0sCi0JeyAweDIxLCBLRVlfOCB9LAotCXsgMHgxMiwgS0VZXzkgfSwKLQl7IDB4MjcsIEtFWV8wIH0sCi0KLQl7IDB4MjQsIEtFWV9aT09NIH0sCi0JeyAweDJhLCBLRVlfU1VCVElUTEUgfSwKLQotCXsgMHgwMCwgS0VZX01VVEUgfSwKLQl7IDB4MDEsIEtFWV9FTlRFUiB9LAkvKiBQaW5uYWNsZSBMb2dvICovCi0JeyAweDM5LCBLRVlfUE9XRVIgfSwKLQotCXsgMHgwMywgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDA5LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwNiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwYywgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4MmQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MzAsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MzMsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgzYywgS0VZX1NUT1AgfSwKLQl7IDB4MzYsIEtFWV9SRUNPUkQgfSwKLQl7IDB4M2YsIEtFWV9FUEcgfSwJLyogTGFiZWxlZCAiPyIgKi8KLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfcGlubmFjbGVfcGN0dl9oZCwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGlubmFjbGVfcGN0dl9oZCksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcGlubmFjbGVfcGN0dl9oZF90YWJsZSk7Ci0KLS8qCi0gKiBJZ29yIEt1em5ldHNvdiA8aWdrNzJAeWEucnU+Ci0gKiBBbmRyZXkgSi4gTWVsbmlrb3YgPHRlbW5vdGFAa212LnJ1PgotICoKLSAqIEtleXRhYmxlIGlzIHVzZWQgYnkgQmVob2xkVFYgNjB4IHNlcmllcywgTTYgc2VyaWVzIGF0Ci0gKiBsZWFzdCwgYW5kIHByb2JhYmx5IG90aGVyIGNhcmRzIHRvby4KLSAqIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93Ci0gKiBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cwotICogdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKLSAqIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2JlaG9sZFtdID0gewotCi0JLyogIDB4MWMgICAgICAgICAgICAweDEyICAqCi0JICogIFRWL0ZNICAgICAgICAgIFBPV0VSICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgxYywgS0VZX1RVTkVSIH0sCS8qIFhYWCBLRVlfVFYgLyBLRVlfUkFESU8gKi8KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCi0JLyogIDB4MDEgICAgMHgwMiAgICAweDAzICAqCi0JICogICAxICAgICAgIDIgICAgICAgMyAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MDQgICAgMHgwNSAgICAweDA2ICAqCi0JICogICA0ICAgICAgIDUgICAgICAgNiAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MDcgICAgMHgwOCAgICAweDA5ICAqCi0JICogICA3ICAgICAgIDggICAgICAgOSAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCi0JLyogIDB4MGEgICAgMHgwMCAgICAweDE3ICAqCi0JICogUkVDQUxMICAgIDAgICAgICBNT0RFICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwYSwgS0VZX0FHQUlOIH0sCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgxNywgS0VZX01PREUgfSwKLQotCS8qICAweDE0ICAgICAgICAgIDB4MTAgICAgKgotCSAqIEFTUEVDVCAgICAgIEZVTExTQ1JFRU4gKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MTQsIEtFWV9TQ1JFRU4gfSwKLQl7IDB4MTAsIEtFWV9aT09NIH0sCi0KLQkvKiAgICAgICAgICAweDBiICAgICAgICAgICoKLQkgKiAgICAgICAgICAgVXAgICAgICAgICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgMHgxOCAgICAweDE2ICAgIDB4MGMgICoKLQkgKiAgTGVmdCAgICAgT2sgICAgIFJpZ2h0ICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgICAgICAgIDB4MDE1ICAgICAgICAgICoKLQkgKiAgICAgICAgIERvd24gICAgICAgICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDBiLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDE4LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxNiwgS0VZX09LIH0sCQkvKiBYWFggS0VZX0VOVEVSICovCi0JeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JLyogIDB4MTEgICAgICAgICAgICAweDBkICAqCi0JICogIE1VVEUgICAgICAgICAgICBJTkZPICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgxMSwgS0VZX01VVEUgfSwKLQl7IDB4MGQsIEtFWV9JTkZPIH0sCi0KLQkvKiAgMHgwZiAgICAweDFiICAgIDB4MWEgICoKLQkgKiBSRUNPUkQgUExBWS9QQVVTRSBTVE9QICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgMHgwZSAgICAweDFmICAgIDB4MWUgICoKLQkgKlRFTEVURVhUICBBVURJTyAgU09VUkNFICoKLQkgKiAgICAgICAgICAgUkVEICAgWUVMTE9XICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDBmLCBLRVlfUkVDT1JEIH0sCi0JeyAweDFiLCBLRVlfUExBWVBBVVNFIH0sCi0JeyAweDFhLCBLRVlfU1RPUCB9LAotCXsgMHgwZSwgS0VZX1RFWFQgfSwKLQl7IDB4MWYsIEtFWV9SRUQgfSwJLypYWFggS0VZX0FVRElPCSovCi0JeyAweDFlLCBLRVlfWUVMTE9XIH0sCS8qWFhYIEtFWV9TT1VSQ0UJKi8KLQotCS8qICAweDFkICAgMHgxMyAgICAgMHgxOSAgKgotCSAqIFNMRUVQICBQUkVWSUVXICAgRFZCICAgKgotCSAqICAgICAgICAgR1JFRU4gICAgQkxVRSAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MWQsIEtFWV9TTEVFUCB9LAotCXsgMHgxMywgS0VZX0dSRUVOIH0sCi0JeyAweDE5LCBLRVlfQkxVRSB9LAkvKiBYWFggS0VZX1NBVAkqLwotCi0JLyogIDB4NTggICAgICAgICAgIDB4NWMgICAqCi0JICogRlJFRVpFICAgICAgICBTTkFQU0hPVCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHg1OCwgS0VZX1NMT1cgfSwKLQl7IDB4NWMsIEtFWV9DQU1FUkEgfSwKLQotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2JlaG9sZF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2JlaG9sZCwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYmVob2xkKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19iZWhvbGRfdGFibGUpOwotCi0vKiBCZWhvbGRlciBJbnRsLiBMdGQuIDIwMDgKLSAqIERtaXRyeSBCZWxpbW92IGQuYmVsaW1vdkBnb29nbGUuY29tCi0gKiBLZXl0YWJsZSBpcyB1c2VkIGJ5IEJlaG9sZFRWIENvbHVtYnVzCi0gKiBUaGUgImFzY2lpLWFydCBwaWN0dXJlIiBiZWxvdyAoaW4gY29tbWVudHMsIGZpcnN0IHJvdwotICogaXMgdGhlIGtleWNvZGUgaW4gaGV4LCBhbmQgc3Vic2VxdWVudCByb3cocykgc2hvd3MKLSAqIHRoZSBidXR0b24gbGFiZWxzIChzZXZlcmFsIHZhcmlhbnRzIHdoZW4gYXBwcm9wcmlhdGUpCi0gKiBoZWxwcyB0byBkZXNjaWRlIHdoaWNoIGtleWNvZGVzIHRvIGFzc2lnbiB0byB0aGUgYnV0dG9ucy4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19iZWhvbGRfY29sdW1idXNbXSA9IHsKLQotCS8qICAweDEzICAgMHgxMSAgIDB4MUMgICAweDEyICAqCi0JICogIE11dGUgIFNvdXJjZSAgVFYvRk0gIFBvd2VyICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCXsgMHgxMywgS0VZX01VVEUgfSwKLQl7IDB4MTEsIEtFWV9QUk9QUyB9LAotCXsgMHgxQywgS0VZX1RVTkVSIH0sCS8qIEtFWV9UVi9LRVlfUkFESU8JKi8KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCi0JLyogIDB4MDEgICAgMHgwMiAgICAweDAzICAweDBEICAgICoKLQkgKiAgIDEgICAgICAgMiAgICAgICAzICAgU3RlcmVvICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgCSAgKgotCSAqICAweDA0ICAgIDB4MDUgICAgMHgwNiAgMHgxOSAgICAqCi0JICogICA0ICAgICAgIDUgICAgICAgNiAgIFNuYXBzaG90ICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgIAkgICoKLQkgKiAgMHgwNyAgICAweDA4ICAgIDB4MDkgIDB4MTAgICAgKgotCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgWm9vbSAJICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDBELCBLRVlfU0VUVVAgfSwJICAvKiBTZXR1cCBrZXkgKi8KLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MTksIEtFWV9DQU1FUkEgfSwJLyogU25hcHNob3Qga2V5ICovCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDEwLCBLRVlfWk9PTSB9LAotCi0JLyogIDB4MEEgICAgMHgwMCAgICAweDBCICAgICAgIDB4MEMgICAqCi0JICogUkVDQUxMICAgIDAgICAgQ2hhbm5lbFVwICBWb2x1bWVVcCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwQSwgS0VZX0FHQUlOIH0sCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwQiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwQywgS0VZX1ZPTFVNRVVQIH0sCi0KLQkvKiAgIDB4MUIgICAgICAweDFEICAgICAgMHgxNSAgICAgICAgMHgxOCAgICAgKgotCSAqIFRpbWVzaGlmdCAgUmVjb3JkICBDaGFubmVsRG93biAgVm9sdW1lRG93biAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLQl7IDB4MUIsIEtFWV9USU1FIH0sCi0JeyAweDFELCBLRVlfUkVDT1JEIH0sCi0JeyAweDE1LCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MTgsIEtFWV9WT0xVTUVET1dOIH0sCi0KLQkvKiAgIDB4MEUgICAweDFFICAgICAweDBGICAgICAweDFBICAqCi0JICogICBTdG9wICAgUGF1c2UgIFByZXZpb3VzZSAgTmV4dCAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLQl7IDB4MEUsIEtFWV9TVE9QIH0sCi0JeyAweDFFLCBLRVlfUEFVU0UgfSwKLQl7IDB4MEYsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHgxQSwgS0VZX05FWFQgfSwKLQotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2JlaG9sZF9jb2x1bWJ1c190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2JlaG9sZF9jb2x1bWJ1cywKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19iZWhvbGRfY29sdW1idXNfdGFibGUpOwotCi0vKgotICogUmVtb3RlIGNvbnRyb2wgZm9yIHRoZSBHZW5pdXMgVFZHTyBBMTFNQ0UKLSAqIEFkcmlhbiBQYXJkaW5pIDxwYXJkby5ic3NvQGdtYWlsLmNvbT4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2VbXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHg0OCwgS0VZXzAgfSwKLQl7IDB4MDksIEtFWV8xIH0sCi0JeyAweDFkLCBLRVlfMiB9LAotCXsgMHgxZiwgS0VZXzMgfSwKLQl7IDB4MTksIEtFWV80IH0sCi0JeyAweDFiLCBLRVlfNSB9LAotCXsgMHgxMSwgS0VZXzYgfSwKLQl7IDB4MTcsIEtFWV83IH0sCi0JeyAweDEyLCBLRVlfOCB9LAotCXsgMHgxNiwgS0VZXzkgfSwKLQotCXsgMHg1NCwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCi0JeyAweDA2LCBLRVlfTVVURSB9LAkJLyogbXV0ZSAqLwotCXsgMHgxMCwgS0VZX1BPV0VSIH0sCi0JeyAweDQwLCBLRVlfTEFTVCB9LAkJLyogcmVjYWxsICovCi0JeyAweDRjLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KLQl7IDB4MDAsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCi0JeyAweDBkLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDRkLCBLRVlfT0sgfSwJCS8qIGFsc28gbGFiZWxlZCBhcyBQYXVzZSAqLwotCXsgMHgxYywgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuIGFuZCBTdG9wKi8KLQl7IDB4MDIsIEtFWV9NT0RFIH0sCQkvKiBBViBTb3VyY2Ugb3IgUmV3aW5kKi8KLQl7IDB4MDQsIEtFWV9MSVNUIH0sCQkvKiAtLy0tICovCi0JLyogc21hbGwgYXJyb3dzIGFib3ZlIG51bWJlcnMgKi8KLQl7IDB4MWEsIEtFWV9ORVhUIH0sCQkvKiBhbHNvIEZhc3QgRm9yd2FyZCAqLwotCXsgMHgwZSwgS0VZX1BSRVZJT1VTIH0sCQkvKiBhbHNvIFJld2luZCAqLwotCS8qIHRoZXNlIGFyZSBpbiBhIHJhdGhlciBub24gc3RhbmRhcmQgbGF5b3V0IGFuZCBoYXZlCi0JYW4gYWx0ZXJuYXRlIG5hbWUgd3JpdHRlbiAqLwotCXsgMHgxZSwgS0VZX1VQIH0sCQkvKiBWaWRlbyBTZXR0aW5nICovCi0JeyAweDBhLCBLRVlfRE9XTiB9LAkJLyogVmlkZW8gRGVmYXVsdCAqLwotCXsgMHgwNSwgS0VZX0NBTUVSQSB9LAkJLyogU25hcHNob3QgKi8KLQl7IDB4MGMsIEtFWV9SSUdIVCB9LAkJLyogSGlkZSBQYW5lbCAqLwotCS8qIEZvdXIgYnV0dG9ucyB3aXRob3V0IGxhYmVsICovCi0JeyAweDQ5LCBLRVlfUkVEIH0sCi0JeyAweDBiLCBLRVlfR1JFRU4gfSwKLQl7IDB4MTMsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4NTAsIEtFWV9CTFVFIH0sCi19OwotCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2UpLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZV90YWJsZSk7Ci0KLS8qCi0gKiBSZW1vdGUgY29udHJvbCBmb3IgUG93ZXJjb2xvciBSZWFsIEFuZ2VsIDMzMAotICogRGFuaWVsIEZyYWdhIDxmcmFnYWJyQGdtYWlsLmNvbT4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxbXSA9IHsKLQl7IDB4MzgsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogc3dpdGNoIGlucHV0cyAqLwotCXsgMHgwYywgS0VZX01FRElBIH0sCQkvKiBUdXJuIE9OL09GRiBBcHAgKi8KLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDBhLCBLRVlfRElHSVRTIH0sCQkvKiBzaW5nbGUsIGRvdWJsZSwgdHJpcHBsZSBkaWdpdCAqLwotCXsgMHgyOSwgS0VZX1BSRVZJT1VTIH0sCQkvKiBwcmV2aW91cyBjaGFubmVsICovCi0JeyAweDEyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCi0JeyAweDEzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKLQl7IDB4MmIsIEtFWV9NT0RFIH0sCQkvKiBzdGVyZW8vbW9ubyAqLwotCXsgMHgyYywgS0VZX1RFWFQgfSwJCS8qIHRlbGV0ZXh0ICovCi0JeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgdXAgKi8KLQl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIGRvd24gKi8KLQl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sdW1lIHVwICovCi0JeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiB2b2x1bWUgZG93biAqLwotCXsgMHgwZCwgS0VZX01VVEUgfSwKLQl7IDB4MWYsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MTcsIEtFWV9QTEFZIH0sCi0JeyAweDE2LCBLRVlfUEFVU0UgfSwKLQl7IDB4MGIsIEtFWV9TVE9QIH0sCi0JeyAweDI3LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MjYsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MWUsIEtFWV9TRUFSQ0ggfSwJCS8qIGF1dG9zY2FuICovCi0JeyAweDBlLCBLRVlfQ0FNRVJBIH0sCQkvKiBzbmFwc2hvdCAqLwotCXsgMHgyZCwgS0VZX1NFVFVQIH0sCi0JeyAweDBmLCBLRVlfU0NSRUVOIH0sCQkvKiBmdWxsIHNjcmVlbiAqLwotCXsgMHgxNCwgS0VZX1JBRElPIH0sCQkvKiBGTSByYWRpbyAqLwotCXsgMHgyNSwgS0VZX1BPV0VSIH0sCQkvKiBwb3dlciAqLwotfTsKLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbCwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxfdGFibGUpOwotCi0vKiBLd29ybGQgUGx1cyBUViBBbmFsb2cgTGl0ZSBQQ0kgSVIKLSAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ1tdID0gewotCXsgMHgwYywgS0VZX1BST0cxIH0sCQkvKiBLd29ybGQga2V5ICovCi0JeyAweDE2LCBLRVlfQ0xPU0VDRCB9LAkJLyogLT4gKSAqLwotCXsgMHgxZCwgS0VZX1BPV0VSMiB9LAotCi0JeyAweDAwLCBLRVlfMSB9LAotCXsgMHgwMSwgS0VZXzIgfSwKLQl7IDB4MDIsIEtFWV8zIH0sCQkvKiBUd28ga2V5cyBoYXZlIHRoZSBzYW1lIGNvZGU6IDMgYW5kIGxlZnQgKi8KLQl7IDB4MDMsIEtFWV80IH0sCQkvKiBUd28ga2V5cyBoYXZlIHRoZSBzYW1lIGNvZGU6IDMgYW5kIHJpZ2h0ICovCi0JeyAweDA0LCBLRVlfNSB9LAotCXsgMHgwNSwgS0VZXzYgfSwKLQl7IDB4MDYsIEtFWV83IH0sCi0JeyAweDA3LCBLRVlfOCB9LAotCXsgMHgwOCwgS0VZXzkgfSwKLQl7IDB4MGEsIEtFWV8wIH0sCi0KLQl7IDB4MDksIEtFWV9BR0FJTiB9LAotCXsgMHgxNCwgS0VZX01VVEUgfSwKLQotCXsgMHgyMCwgS0VZX1VQIH0sCi0JeyAweDIxLCBLRVlfRE9XTiB9LAotCXsgMHgwYiwgS0VZX0VOVEVSIH0sCi0KLQl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MTEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JLyogQ291bGRuJ3QgbWFwIGtleSBsZWZ0L2tleSByaWdodCBzaW5jZSB0aG9zZQotCSAgIGNvbmZsaWN0IHdpdGggJzMnIGFuZCAnNCcgc2NhbmNvZGVzCi0JICAgSSBkdW5ubyB3aGF0IHRoZSBvcmlnaW5hbCBkcml2ZXIgZG9lcwotCSAqLwotCi0JeyAweDEzLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTIsIEtFWV9WT0xVTUVET1dOIH0sCi0KLQkvKiBUaGUgbG93ZXIgcGFydCBvZiB0aGUgSVIKLQkgICBUaGVyZSBhcmUgc2V2ZXJhbCBkdXBsaWNhdGVkIGtleWNvZGVzIHRoZXJlLgotCSAgIE1vc3Qgb2YgdGhlbSBjb25mbGljdCB3aXRoIGRpZ2l0cy4KLQkgICBBZGQgbWFwcGluZ3MganVzdCB0byB0aGUgdW51c2VkIHNjYW5jb2Rlcy4KLQkgICBTb21laG93LCB0aGUgb3JpZ2luYWwgZHJpdmVyIGhhcyBhIHdheSB0byBrbm93LAotCSAgIGJ1dCB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBvbiBzb21lIEdQSU8uCi0JICAgQWxzbywgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHRpbWUgYmV0d2VlbiBrZXl1cAotCSAgIGFuZCBrZXlkb3duLgotCSAqLwotCXsgMHgxOSwgS0VZX1RJTUV9LAkJLyogVGltZXNoaWZ0ICovCi0JeyAweDFhLCBLRVlfU1RPUH0sCi0JeyAweDFiLCBLRVlfUkVDT1JEfSwKLQotCXsgMHgyMiwgS0VZX1RFWFR9LAotCi0JeyAweDE1LCBLRVlfQVVESU99LAkJLyogKCgqKSkgKi8KLQl7IDB4MGYsIEtFWV9aT09NfSwKLQl7IDB4MWMsIEtFWV9DQU1FUkF9LAkJLyogc25hcHNob3QgKi8KLQotCXsgMHgxOCwgS0VZX1JFRH0sCQkvKiBCICovCi0JeyAweDIzLCBLRVlfR1JFRU59LAkJLyogQyAqLwotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2csCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nX3RhYmxlKTsKLQotLyogS2Fpb215IFRWblBDIFUyCi0gICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19rYWlvbXlbXSA9IHsKLQl7IDB4NDMsIEtFWV9QT1dFUjJ9LAotCXsgMHgwMSwgS0VZX0xJU1R9LAotCXsgMHgwYiwgS0VZX1pPT019LAotCXsgMHgwMywgS0VZX1BPV0VSfSwKLQotCXsgMHgwNCwgS0VZXzF9LAotCXsgMHgwOCwgS0VZXzJ9LAotCXsgMHgwMiwgS0VZXzN9LAotCi0JeyAweDBmLCBLRVlfNH0sCi0JeyAweDA1LCBLRVlfNX0sCi0JeyAweDA2LCBLRVlfNn0sCi0KLQl7IDB4MGMsIEtFWV83fSwKLQl7IDB4MGQsIEtFWV84fSwKLQl7IDB4MGEsIEtFWV85fSwKLQotCXsgMHgxMSwgS0VZXzB9LAotCi0JeyAweDA5LCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MDcsIEtFWV9DSEFOTkVMRE9XTn0sCi0KLQl7IDB4MGUsIEtFWV9WT0xVTUVVUH0sCi0JeyAweDEzLCBLRVlfVk9MVU1FRE9XTn0sCi0KLQl7IDB4MTAsIEtFWV9IT01FfSwKLQl7IDB4MTIsIEtFWV9FTlRFUn0sCi0KLQl7IDB4MTQsIEtFWV9SRUNPUkR9LAotCXsgMHgxNSwgS0VZX1NUT1B9LAotCXsgMHgxNiwgS0VZX1BMQVl9LAotCXsgMHgxNywgS0VZX01VVEV9LAotCi0JeyAweDE4LCBLRVlfVVB9LAotCXsgMHgxOSwgS0VZX0RPV059LAotCXsgMHgxYSwgS0VZX0xFRlR9LAotCXsgMHgxYiwgS0VZX1JJR0hUfSwKLQotCXsgMHgxYywgS0VZX1JFRH0sCi0JeyAweDFkLCBLRVlfR1JFRU59LAotCXsgMHgxZSwgS0VZX1lFTExPV30sCi0JeyAweDFmLCBLRVlfQkxVRX0sCi19Owotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2thaW9teV90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2thaW9teSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfa2Fpb215KSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rYWlvbXlfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkW10gPSB7Ci0JeyAweDIwLCBLRVlfTElTVH0sCi0JeyAweDAwLCBLRVlfUE9XRVJ9LAotCXsgMHgyOCwgS0VZXzF9LAotCXsgMHgxOCwgS0VZXzJ9LAotCXsgMHgzOCwgS0VZXzN9LAotCXsgMHgyNCwgS0VZXzR9LAotCXsgMHgxNCwgS0VZXzV9LAotCXsgMHgzNCwgS0VZXzZ9LAotCXsgMHgyYywgS0VZXzd9LAotCXsgMHgxYywgS0VZXzh9LAotCXsgMHgzYywgS0VZXzl9LAotCXsgMHgxMiwgS0VZX1NVQlRJVExFfSwKLQl7IDB4MjIsIEtFWV8wfSwKLQl7IDB4MzIsIEtFWV9SRVdJTkR9LAotCXsgMHgzYSwgS0VZX1NIVUZGTEV9LAotCXsgMHgwMiwgS0VZX1BSSU5UfSwKLQl7IDB4MTEsIEtFWV9DSEFOTkVMRE9XTn0sCi0JeyAweDMxLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MGMsIEtFWV9aT09NfSwKLQl7IDB4MWUsIEtFWV9WT0xVTUVET1dOfSwKLQl7IDB4M2UsIEtFWV9WT0xVTUVVUH0sCi0JeyAweDBhLCBLRVlfTVVURX0sCi0JeyAweDA0LCBLRVlfQVVESU99LAotCXsgMHgyNiwgS0VZX1JFQ09SRH0sCi0JeyAweDA2LCBLRVlfUExBWX0sCi0JeyAweDM2LCBLRVlfU1RPUH0sCi0JeyAweDE2LCBLRVlfUEFVU0V9LAotCXsgMHgyZSwgS0VZX1JFV0lORH0sCi0JeyAweDBlLCBLRVlfRkFTVEZPUldBUkR9LAotCXsgMHgzMCwgS0VZX1RFWFR9LAotCXsgMHgyMSwgS0VZX0dSRUVOfSwKLQl7IDB4MDEsIEtFWV9CTFVFfSwKLQl7IDB4MDgsIEtFWV9FUEd9LAotCXsgMHgyYSwgS0VZX01FTlV9LAotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZCksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2ExNmRfdGFibGUpOwotCi0vKiBFbmNvcmUgRU5MVFYtRk0gdjUuMwotICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNbXSA9IHsKLQl7IDB4MTAsIEtFWV9QT1dFUjJ9LAotCXsgMHgwNiwgS0VZX01VVEV9LAotCi0JeyAweDA5LCBLRVlfMX0sCi0JeyAweDFkLCBLRVlfMn0sCi0JeyAweDFmLCBLRVlfM30sCi0JeyAweDE5LCBLRVlfNH0sCi0JeyAweDFiLCBLRVlfNX0sCi0JeyAweDExLCBLRVlfNn0sCi0JeyAweDE3LCBLRVlfN30sCi0JeyAweDEyLCBLRVlfOH0sCi0JeyAweDE2LCBLRVlfOX0sCi0JeyAweDQ4LCBLRVlfMH0sCi0KLQl7IDB4MDQsIEtFWV9MSVNUfSwJCS8qIC0vLS0gKi8KLQl7IDB4NDAsIEtFWV9MQVNUfSwJCS8qIHJlY2FsbCAqLwotCi0JeyAweDAyLCBLRVlfTU9ERX0sCQkvKiBUVi9BViAqLwotCXsgMHgwNSwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLwotCi0JeyAweDRjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIFVQICovCi0JeyAweDAwLCBLRVlfQ0hBTk5FTERPV059LAkvKiBET1dOICovCi0JeyAweDBkLCBLRVlfVk9MVU1FVVB9LAkJLyogUklHSFQgKi8KLQl7IDB4MTUsIEtFWV9WT0xVTUVET1dOfSwJLyogTEVGVCAqLwotCXsgMHg0OSwgS0VZX0VOVEVSfSwJCS8qIE9LICovCi0KLQl7IDB4NTQsIEtFWV9SRUNPUkR9LAotCXsgMHg0ZCwgS0VZX1BMQVl9LAkJLyogcGF1c2UgKi8KLQotCXsgMHgxZSwgS0VZX01FTlV9LAkJLyogdmlkZW8gc2V0dGluZyAqLwotCXsgMHgwZSwgS0VZX1JJR0hUfSwJCS8qIDwtICovCi0JeyAweDFhLCBLRVlfTEVGVH0sCQkvKiAtPiAqLwotCi0JeyAweDBhLCBLRVlfQ0xFQVJ9LAkJLyogdmlkZW8gZGVmYXVsdCAqLwotCXsgMHgwYywgS0VZX1pPT019LAkJLyogaGlkZSBwYW5uZWwgKi8KLQl7IDB4NDcsIEtFWV9TTEVFUH0sCQkvKiBzaHV0ZG93biAqLwotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M190YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01MyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNfdGFibGUpOwotCi0vKiBab2dpcyBSZWFsIEF1ZGlvIDIyMCAtIDMyIGtleXMgSVIgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c1tdID0gewotCXsgMHgxYywgS0VZX1JBRElPfSwKLQl7IDB4MTIsIEtFWV9QT1dFUjJ9LAotCi0JeyAweDAxLCBLRVlfMX0sCi0JeyAweDAyLCBLRVlfMn0sCi0JeyAweDAzLCBLRVlfM30sCi0JeyAweDA0LCBLRVlfNH0sCi0JeyAweDA1LCBLRVlfNX0sCi0JeyAweDA2LCBLRVlfNn0sCi0JeyAweDA3LCBLRVlfN30sCi0JeyAweDA4LCBLRVlfOH0sCi0JeyAweDA5LCBLRVlfOX0sCi0JeyAweDAwLCBLRVlfMH0sCi0KLQl7IDB4MGMsIEtFWV9WT0xVTUVVUH0sCi0JeyAweDE4LCBLRVlfVk9MVU1FRE9XTn0sCi0JeyAweDBiLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTn0sCi0JeyAweDE2LCBLRVlfRU5URVJ9LAotCi0JeyAweDExLCBLRVlfTElTVH0sCQkvKiBTb3VyY2UgKi8KLQl7IDB4MGQsIEtFWV9BVURJT30sCQkvKiBzdGVyZW8gKi8KLQotCXsgMHgwZiwgS0VZX1BSRVZJT1VTfSwJCS8qIFByZXYgKi8KLQl7IDB4MWIsIEtFWV9USU1FfSwJCS8qIFRpbWVzaGlmdCAqLwotCXsgMHgxYSwgS0VZX05FWFR9LAkJLyogTmV4dCAqLwotCi0JeyAweDBlLCBLRVlfU1RPUH0sCi0JeyAweDFmLCBLRVlfUExBWX0sCi0JeyAweDFlLCBLRVlfUExBWVBBVVNFfSwJCS8qIFBhdXNlICovCi0KLQl7IDB4MWQsIEtFWV9SRUNPUkR9LAotCXsgMHgxMywgS0VZX01VVEV9LAotCXsgMHgxOSwgS0VZX0NBTUVSQX0sCQkvKiBTbmFwc2hvdCAqLwotCi19Owotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXNfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzX3RhYmxlKTsKLQotLyogQVRJIFRWIFdvbmRlciBIRCA2MDAgVVNCCi0gICBEZXZpbiBIZWl0bXVlbGxlciA8ZGV2aW4uaGVpdG11ZWxsZXJAZ21haWwuY29tPgotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwW10gPSB7Ci0JeyAweDAwLCBLRVlfUkVDT1JEfSwJCS8qIFJvdyAxICovCi0JeyAweDAxLCBLRVlfUExBWVBBVVNFfSwKLQl7IDB4MDIsIEtFWV9TVE9QfSwKLQl7IDB4MDMsIEtFWV9QT1dFUn0sCi0JeyAweDA0LCBLRVlfUFJFVklPVVN9LAkvKiBSb3cgMiAqLwotCXsgMHgwNSwgS0VZX1JFV0lORH0sCi0JeyAweDA2LCBLRVlfRk9SV0FSRH0sCi0JeyAweDA3LCBLRVlfTkVYVH0sCi0JeyAweDA4LCBLRVlfRVBHfSwJCS8qIFJvdyAzICovCi0JeyAweDA5LCBLRVlfSE9NRX0sCi0JeyAweDBhLCBLRVlfTUVOVX0sCi0JeyAweDBiLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MGMsIEtFWV9CQUNLfSwJCS8qIFJvdyA0ICovCi0JeyAweDBkLCBLRVlfVVB9LAotCXsgMHgwZSwgS0VZX0lORk99LAotCXsgMHgwZiwgS0VZX0NIQU5ORUxET1dOfSwKLQl7IDB4MTAsIEtFWV9MRUZUfSwJCS8qIFJvdyA1ICovCi0JeyAweDExLCBLRVlfU0VMRUNUfSwKLQl7IDB4MTIsIEtFWV9SSUdIVH0sCi0JeyAweDEzLCBLRVlfVk9MVU1FVVB9LAotCXsgMHgxNCwgS0VZX0xBU1R9LAkJLyogUm93IDYgKi8KLQl7IDB4MTUsIEtFWV9ET1dOfSwKLQl7IDB4MTYsIEtFWV9NVVRFfSwKLQl7IDB4MTcsIEtFWV9WT0xVTUVET1dOfSwKLX07Ci1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMCwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDApLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwX3RhYmxlKTsKLQotLyogRFZCV29ybGQgcmVtb3RlcwotICAgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kbTExMDVfbmVjW10gPSB7Ci0JeyAweDBhLCBLRVlfUE9XRVIyfSwJCS8qIHBvd2VyICovCi0JeyAweDBjLCBLRVlfTVVURX0sCQkvKiBtdXRlICovCi0JeyAweDExLCBLRVlfMX0sCi0JeyAweDEyLCBLRVlfMn0sCi0JeyAweDEzLCBLRVlfM30sCi0JeyAweDE0LCBLRVlfNH0sCi0JeyAweDE1LCBLRVlfNX0sCi0JeyAweDE2LCBLRVlfNn0sCi0JeyAweDE3LCBLRVlfN30sCi0JeyAweDE4LCBLRVlfOH0sCi0JeyAweDE5LCBLRVlfOX0sCi0JeyAweDEwLCBLRVlfMH0sCi0JeyAweDFjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIGNoKyAqLwotCXsgMHgwZiwgS0VZX0NIQU5ORUxET1dOfSwJLyogY2gtICovCi0JeyAweDFhLCBLRVlfVk9MVU1FVVB9LAkJLyogdm9sKyAqLwotCXsgMHgwZSwgS0VZX1ZPTFVNRURPV059LAkvKiB2b2wtICovCi0JeyAweDA0LCBLRVlfUkVDT1JEfSwJCS8qIHJlYyAqLwotCXsgMHgwOSwgS0VZX0NIQU5ORUx9LAkJLyogZmF2ICovCi0JeyAweDA4LCBLRVlfQkFDS1NQQUNFfSwJCS8qIHJld2luZCAqLwotCXsgMHgwNywgS0VZX0ZBU1RGT1JXQVJEfSwJLyogZmFzdCAqLwotCXsgMHgwYiwgS0VZX1BBVVNFfSwJCS8qIHBhdXNlICovCi0JeyAweDAyLCBLRVlfRVNDfSwJCS8qIGNhbmNlbCAqLwotCXsgMHgwMywgS0VZX1RBQn0sCQkvKiB0YWIgKi8KLQl7IDB4MDAsIEtFWV9VUH0sCQkvKiB1cCAqLwotCXsgMHgxZiwgS0VZX0VOVEVSfSwJCS8qIG9rICovCi0JeyAweDAxLCBLRVlfRE9XTn0sCQkvKiBkb3duICovCi0JeyAweDA1LCBLRVlfUkVDT1JEfSwJCS8qIGNhcCAqLwotCXsgMHgwNiwgS0VZX1NUT1B9LAkJLyogc3RvcCAqLwotCXsgMHg0MCwgS0VZX1pPT019LAkJLyogZnVsbCAqLwotCXsgMHgxZSwgS0VZX1RWfSwJCS8qIHR2bW9kZSAqLwotCXsgMHgxYiwgS0VZX0J9LAkJCS8qIHJlY2FsbCAqLwotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19kbTExMDVfbmVjX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZG0xMTA1X25lYywKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZG0xMTA1X25lYyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZG0xMTA1X25lY190YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdGV2aWlfbmVjW10gPSB7Ci0JeyAweDBhLCBLRVlfUE9XRVIyfSwKLQl7IDB4MGMsIEtFWV9NVVRFfSwKLQl7IDB4MTEsIEtFWV8xfSwKLQl7IDB4MTIsIEtFWV8yfSwKLQl7IDB4MTMsIEtFWV8zfSwKLQl7IDB4MTQsIEtFWV80fSwKLQl7IDB4MTUsIEtFWV81fSwKLQl7IDB4MTYsIEtFWV82fSwKLQl7IDB4MTcsIEtFWV83fSwKLQl7IDB4MTgsIEtFWV84fSwKLQl7IDB4MTksIEtFWV85fSwKLQl7IDB4MTAsIEtFWV8wfSwKLQl7IDB4MWMsIEtFWV9NRU5VfSwKLQl7IDB4MGYsIEtFWV9WT0xVTUVET1dOfSwKLQl7IDB4MWEsIEtFWV9MQVNUfSwKLQl7IDB4MGUsIEtFWV9PUEVOfSwKLQl7IDB4MDQsIEtFWV9SRUNPUkR9LAotCXsgMHgwOSwgS0VZX1ZPTFVNRVVQfSwKLQl7IDB4MDgsIEtFWV9DSEFOTkVMVVB9LAotCXsgMHgwNywgS0VZX1BWUn0sCi0JeyAweDBiLCBLRVlfVElNRX0sCi0JeyAweDAyLCBLRVlfUklHSFR9LAotCXsgMHgwMywgS0VZX0xFRlR9LAotCXsgMHgwMCwgS0VZX1VQfSwKLQl7IDB4MWYsIEtFWV9PS30sCi0JeyAweDAxLCBLRVlfRE9XTn0sCi0JeyAweDA1LCBLRVlfVFVORVJ9LAotCXsgMHgwNiwgS0VZX0NIQU5ORUxET1dOfSwKLQl7IDB4NDAsIEtFWV9QTEFZUEFVU0V9LAotCXsgMHgxZSwgS0VZX1JFV0lORH0sCi0JeyAweDFiLCBLRVlfRkFWT1JJVEVTfSwKLQl7IDB4MWQsIEtFWV9CQUNLfSwKLQl7IDB4NGQsIEtFWV9GQVNURk9SV0FSRH0sCi0JeyAweDQ0LCBLRVlfRVBHfSwKLQl7IDB4NGMsIEtFWV9JTkZPfSwKLQl7IDB4NDEsIEtFWV9BQn0sCi0JeyAweDQzLCBLRVlfQVVESU99LAotCXsgMHg0NSwgS0VZX1NVQlRJVExFfSwKLQl7IDB4NGEsIEtFWV9MSVNUfSwKLQl7IDB4NDYsIEtFWV9GMX0sCi0JeyAweDQ3LCBLRVlfRjJ9LAotCXsgMHg1ZSwgS0VZX0YzfSwKLQl7IDB4NWMsIEtFWV9GNH0sCi0JeyAweDUyLCBLRVlfRjV9LAotCXsgMHg1YSwgS0VZX0Y2fSwKLQl7IDB4NTYsIEtFWV9NT0RFfSwKLQl7IDB4NTgsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc190ZXZpaV9uZWNfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc190ZXZpaV9uZWMsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3RldmlpX25lYyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfdGV2aWlfbmVjX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc190YnNfbmVjW10gPSB7Ci0JeyAweDA0LCBLRVlfUE9XRVIyfSwJLypwb3dlciovCi0JeyAweDE0LCBLRVlfTVVURX0sCS8qbXV0ZSovCi0JeyAweDA3LCBLRVlfMX0sCi0JeyAweDA2LCBLRVlfMn0sCi0JeyAweDA1LCBLRVlfM30sCi0JeyAweDBiLCBLRVlfNH0sCi0JeyAweDBhLCBLRVlfNX0sCi0JeyAweDA5LCBLRVlfNn0sCi0JeyAweDBmLCBLRVlfN30sCi0JeyAweDBlLCBLRVlfOH0sCi0JeyAweDBkLCBLRVlfOX0sCi0JeyAweDEyLCBLRVlfMH0sCi0JeyAweDE2LCBLRVlfQ0hBTk5FTFVQfSwJLypjaCsqLwotCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOfSwvKmNoLSovCi0JeyAweDEzLCBLRVlfVk9MVU1FVVB9LAkvKnZvbCsqLwotCXsgMHgwYywgS0VZX1ZPTFVNRURPV059LC8qdm9sLSovCi0JeyAweDAzLCBLRVlfUkVDT1JEfSwJLypyZWMqLwotCXsgMHgxOCwgS0VZX1BBVVNFfSwJLypwYXVzZSovCi0JeyAweDE5LCBLRVlfT0t9LAkvKm9rKi8KLQl7IDB4MWEsIEtFWV9DQU1FUkF9LAkvKiBzbmFwc2hvdCAqLwotCXsgMHgwMSwgS0VZX1VQfSwKLQl7IDB4MTAsIEtFWV9MRUZUfSwKLQl7IDB4MDIsIEtFWV9SSUdIVH0sCi0JeyAweDA4LCBLRVlfRE9XTn0sCi0JeyAweDE1LCBLRVlfRkFWT1JJVEVTfSwKLQl7IDB4MTcsIEtFWV9TVUJUSVRMRX0sCi0JeyAweDFkLCBLRVlfWk9PTX0sCi0JeyAweDFmLCBLRVlfRVhJVH0sCi0JeyAweDFlLCBLRVlfTUVOVX0sCi0JeyAweDFjLCBLRVlfRVBHfSwKLQl7IDB4MDAsIEtFWV9QUkVWSU9VU30sCi0JeyAweDFiLCBLRVlfTU9ERX0sCi19Owotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Ric19uZWNfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc190YnNfbmVjLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc190YnNfbmVjKSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc190YnNfbmVjX3RhYmxlKTsKLQotLyogVGVycmF0ZWMgQ2luZXJneSBIeWJyaWQgVCBVU0IgWFMKLSAgIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdGVycmF0ZWNfY2luZXJneV94c1tdID0gewotCXsgMHg0MSwgS0VZX0hPTUV9LAotCXsgMHgwMSwgS0VZX1BPV0VSfSwKLQl7IDB4NDIsIEtFWV9NRU5VfSwKLQl7IDB4MDIsIEtFWV8xfSwKLQl7IDB4MDMsIEtFWV8yfSwKLQl7IDB4MDQsIEtFWV8zfSwKLQl7IDB4NDMsIEtFWV9TVUJUSVRMRX0sCi0JeyAweDA1LCBLRVlfNH0sCi0JeyAweDA2LCBLRVlfNX0sCi0JeyAweDA3LCBLRVlfNn0sCi0JeyAweDQ0LCBLRVlfVEVYVH0sCi0JeyAweDA4LCBLRVlfN30sCi0JeyAweDA5LCBLRVlfOH0sCi0JeyAweDBhLCBLRVlfOX0sCi0JeyAweDQ1LCBLRVlfREVMRVRFfSwKLQl7IDB4MGIsIEtFWV9UVU5FUn0sCi0JeyAweDBjLCBLRVlfMH0sCi0JeyAweDBkLCBLRVlfTU9ERX0sCi0JeyAweDQ2LCBLRVlfVFZ9LAotCXsgMHg0NywgS0VZX0RWRH0sCi0JeyAweDQ5LCBLRVlfVklERU99LAotCXsgMHg0YiwgS0VZX0FVWH0sCi0JeyAweDEwLCBLRVlfVVB9LAotCXsgMHgxMSwgS0VZX0xFRlR9LAotCXsgMHgxMiwgS0VZX09LfSwKLQl7IDB4MTMsIEtFWV9SSUdIVH0sCi0JeyAweDE0LCBLRVlfRE9XTn0sCi0JeyAweDBmLCBLRVlfRVBHfSwKLQl7IDB4MTYsIEtFWV9JTkZPfSwKLQl7IDB4NGQsIEtFWV9CQUNLU1BBQ0V9LAotCXsgMHgxYywgS0VZX1ZPTFVNRVVQfSwKLQl7IDB4NGMsIEtFWV9QTEFZfSwKLQl7IDB4MWIsIEtFWV9DSEFOTkVMVVB9LAotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV059LAotCXsgMHgxZCwgS0VZX01VVEV9LAotCXsgMHgxZiwgS0VZX0NIQU5ORUxET1dOfSwKLQl7IDB4MTcsIEtFWV9SRUR9LAotCXsgMHgxOCwgS0VZX0dSRUVOfSwKLQl7IDB4MTksIEtFWV9ZRUxMT1d9LAotCXsgMHgxYSwgS0VZX0JMVUV9LAotCXsgMHg1OCwgS0VZX1JFQ09SRH0sCi0JeyAweDQ4LCBLRVlfU1RPUH0sCi0JeyAweDQwLCBLRVlfUEFVU0V9LAotCXsgMHg1NCwgS0VZX0xBU1R9LAotCXsgMHg0ZSwgS0VZX1JFV0lORH0sCi0JeyAweDRmLCBLRVlfRkFTVEZPUldBUkR9LAotCXsgMHg1YywgS0VZX05FWFR9LAotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfdGVycmF0ZWNfY2luZXJneV94cywKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdGVycmF0ZWNfY2luZXJneV94cyksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfdGVycmF0ZWNfY2luZXJneV94c190YWJsZSk7Ci0KLS8qIEVWR0EgaW5EdHViZQotICAgRGV2aW4gSGVpdG11ZWxsZXIgPGRldmluLmhlaXRtdWVsbGVyQGdtYWlsLmNvbT4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19ldmdhX2luZHR1YmVbXSA9IHsKLQl7IDB4MTIsIEtFWV9QT1dFUn0sCi0JeyAweDAyLCBLRVlfTU9ERX0sCS8qIFRWICovCi0JeyAweDE0LCBLRVlfTVVURX0sCi0JeyAweDFhLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MTYsIEtFWV9UVjJ9LAkvKiBQSVAgKi8KLQl7IDB4MWQsIEtFWV9WT0xVTUVVUH0sCi0JeyAweDA1LCBLRVlfQ0hBTk5FTERPV059LAotCXsgMHgwZiwgS0VZX1BMQVlQQVVTRX0sCi0JeyAweDE5LCBLRVlfVk9MVU1FRE9XTn0sCi0JeyAweDFjLCBLRVlfUkVXSU5EfSwKLQl7IDB4MGQsIEtFWV9SRUNPUkR9LAotCXsgMHgxOCwgS0VZX0ZPUldBUkR9LAotCXsgMHgxZSwgS0VZX1BSRVZJT1VTfSwKLQl7IDB4MWIsIEtFWV9TVE9QfSwKLQl7IDB4MWYsIEtFWV9ORVhUfSwKLQl7IDB4MTMsIEtFWV9DQU1FUkF9LAotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19ldmdhX2luZHR1YmVfdGFibGUgPSB7Ci0JLnNjYW4gPSBpcl9jb2Rlc19ldmdhX2luZHR1YmUsCi0JLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2V2Z2FfaW5kdHViZSksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZXZnYV9pbmR0dWJlX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc192aWRlb21hdGVfczM1MFtdID0gewotCXsgMHgwMCwgS0VZX1RWfSwKLQl7IDB4MDEsIEtFWV9EVkR9LAotCXsgMHgwNCwgS0VZX1JFQ09SRH0sCi0JeyAweDA1LCBLRVlfVklERU99LAkvKiBUVi9WaWRlbyAqLwotCXsgMHgwNywgS0VZX1NUT1B9LAotCXsgMHgwOCwgS0VZX1BMQVlQQVVTRX0sCi0JeyAweDBhLCBLRVlfUkVXSU5EfSwKLQl7IDB4MGYsIEtFWV9GQVNURk9SV0FSRH0sCi0JeyAweDEwLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MTIsIEtFWV9WT0xVTUVVUH0sCi0JeyAweDEzLCBLRVlfQ0hBTk5FTERPV059LAotCXsgMHgxNCwgS0VZX01VVEV9LAotCXsgMHgxNSwgS0VZX1ZPTFVNRURPV059LAotCXsgMHgxNiwgS0VZXzF9LAotCXsgMHgxNywgS0VZXzJ9LAotCXsgMHgxOCwgS0VZXzN9LAotCXsgMHgxOSwgS0VZXzR9LAotCXsgMHgxYSwgS0VZXzV9LAotCXsgMHgxYiwgS0VZXzZ9LAotCXsgMHgxYywgS0VZXzd9LAotCXsgMHgxZCwgS0VZXzh9LAotCXsgMHgxZSwgS0VZXzl9LAotCXsgMHgxZiwgS0VZXzB9LAotCXsgMHgyMSwgS0VZX1NMRUVQfSwKLQl7IDB4MjQsIEtFWV9aT09NfSwKLQl7IDB4MjUsIEtFWV9MQVNUfSwJLyogUmVjYWxsICovCi0JeyAweDI2LCBLRVlfU1VCVElUTEV9LAkvKiBDQyAqLwotCXsgMHgyNywgS0VZX0xBTkdVQUdFfSwJLyogTVRTICovCi0JeyAweDI5LCBLRVlfQ0hBTk5FTH0sCS8qIFNVUkYgKi8KLQl7IDB4MmIsIEtFWV9BfSwKLQl7IDB4MmMsIEtFWV9CfSwKLQl7IDB4MmYsIEtFWV9DQU1FUkF9LAkvKiBTbmFwc2hvdCAqLwotCXsgMHgyMywgS0VZX1JBRElPfSwKLQl7IDB4MDIsIEtFWV9QUkVWSU9VU1NPTkd9LAotCXsgMHgwNiwgS0VZX05FWFRTT05HfSwKLQl7IDB4MDMsIEtFWV9FUEd9LAotCXsgMHgwOSwgS0VZX1NFVFVQfSwKLQl7IDB4MjIsIEtFWV9CQUNLU1BBQ0V9LAotCXsgMHgwYywgS0VZX1VQfSwKLQl7IDB4MGUsIEtFWV9ET1dOfSwKLQl7IDB4MGIsIEtFWV9MRUZUfSwKLQl7IDB4MGQsIEtFWV9SSUdIVH0sCi0JeyAweDExLCBLRVlfRU5URVJ9LAotCXsgMHgyMCwgS0VZX1RFWFR9LAotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZSA9IHsKLQkuc2NhbiA9IGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwLAotCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc192aWRlb21hdGVfczM1MCksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfdmlkZW9tYXRlX3MzNTBfdGFibGUpOwotCi0vKiBHQURNRUkgVVRWMzMwKyBSTTAwOFogcmVtb3RlCi0gICBTaGluZSBMaXUgPHNoaW5lbEBmb3htYWlsLmNvbT4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19nYWRtZWlfcm0wMDh6W10gPSB7Ci0JeyAweDE0LCBLRVlfUE9XRVIyfSwJCS8qIFBPV0VSIE9GRiAqLwotCXsgMHgwYywgS0VZX01VVEV9LAkJLyogTVVURSAqLwotCi0JeyAweDE4LCBLRVlfVFZ9LAkJLyogVFYgKi8KLQl7IDB4MGUsIEtFWV9WSURFT30sCQkvKiBBViAqLwotCXsgMHgwYiwgS0VZX0FVRElPfSwJCS8qIFNWICovCi0JeyAweDBmLCBLRVlfUkFESU99LAkJLyogRk0gKi8KLQotCXsgMHgwMCwgS0VZXzF9LAotCXsgMHgwMSwgS0VZXzJ9LAotCXsgMHgwMiwgS0VZXzN9LAotCXsgMHgwMywgS0VZXzR9LAotCXsgMHgwNCwgS0VZXzV9LAotCXsgMHgwNSwgS0VZXzZ9LAotCXsgMHgwNiwgS0VZXzd9LAotCXsgMHgwNywgS0VZXzh9LAotCXsgMHgwOCwgS0VZXzl9LAotCXsgMHgwOSwgS0VZXzB9LAotCXsgMHgwYSwgS0VZX0lORk99LAkJLyogT1NEICovCi0JeyAweDFjLCBLRVlfQkFDS1NQQUNFfSwJCS8qIExBU1QgKi8KLQotCXsgMHgwZCwgS0VZX1BMQVl9LAkJLyogUExBWSAqLwotCXsgMHgxZSwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLwotCXsgMHgxYSwgS0VZX1JFQ09SRH0sCQkvKiBSRUNPUkQgKi8KLQl7IDB4MTcsIEtFWV9TVE9QfSwJCS8qIFNUT1AgKi8KLQotCXsgMHgxZiwgS0VZX1VQfSwJCS8qIFVQICovCi0JeyAweDQ0LCBLRVlfRE9XTn0sCQkvKiBET1dOICovCi0JeyAweDQ2LCBLRVlfVEFCfSwJCS8qIEJBQ0sgKi8KLQl7IDB4NGEsIEtFWV9aT09NfSwJCS8qIEZVTExTRUNSRUVOICovCi0KLQl7IDB4MTAsIEtFWV9WT0xVTUVVUH0sCQkvKiBWT0xVTUVVUCAqLwotCXsgMHgxMSwgS0VZX1ZPTFVNRURPV059LAkvKiBWT0xVTUVET1dOICovCi0JeyAweDEyLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIENIQU5ORUxVUCAqLwotCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOfSwJLyogQ0hBTk5FTERPV04gKi8KLQl7IDB4MTUsIEtFWV9FTlRFUn0sCQkvKiBPSyAqLwotfTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19nYWRtZWlfcm0wMDh6X3RhYmxlID0gewotCS5zY2FuID0gaXJfY29kZXNfZ2FkbWVpX3JtMDA4eiwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZ2FkbWVpX3JtMDA4eiksCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZ2FkbWVpX3JtMDA4el90YWJsZSk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleXRhYmxlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXl0YWJsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmNlNWJjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleXRhYmxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotLyogaXItcmVnaXN0ZXIuYyAtIGhhbmRsZSBJUiBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgotCi0jaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+Ci0KLSNkZWZpbmUgSVJfVEFCX01JTl9TSVpFCTMyCi0jZGVmaW5lIElSX1RBQl9NQVhfU0laRQkxMDI0Ci0KLS8qKgotICogaXJfc2Vla190YWJsZSgpIC0gcmV0dXJucyB0aGUgZWxlbWVudCBvcmRlciBvbiB0aGUgdGFibGUKLSAqIEByY190YWI6CXRoZSBpcl9zY2FuY29kZV90YWJsZSB3aXRoIHRoZSBrZXltYXAgdG8gYmUgdXNlZAotICogQHNjYW5jb2RlOgl0aGUgc2NhbmNvZGUgdGhhdCB3ZSdyZSBzZWVraW5nCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIGlucHV0IHJvdXRpbmVzIHdoZW4gYSBrZXkgaXMgcHJlc3NlZCBhdCB0aGUKLSAqIElSLiBUaGUgc2NhbmNvZGUgaXMgcmVjZWl2ZWQgYW5kIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGEga2V5Y29kZS4KLSAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCBpdCByZXR1cm5zIEtFWV9VTktOT1dOLiBPdGhlcndpc2UsIHJldHVybnMgdGhlCi0gKiBjb3JyZXNwb25kaW5nIGtleWNvZGUgZnJvbSB0aGUgdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgaXJfc2Vla190YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwgdTMyIHNjYW5jb2RlKQotewotCWludCByYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gcmNfdGFiLT5zY2FuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCi0JLyogRklYTUU6IHJlcGxhY2UgaXQgYnkgYSBiaW5hcnkgc2VhcmNoICovCi0KLQlmb3IgKHJjID0gMDsgcmMgPCByY190YWItPnNpemU7IHJjKyspCi0JCWlmIChrZXltYXBbcmNdLnNjYW5jb2RlID09IHNjYW5jb2RlKQotCQkJZ290byBleGl0OwotCi0JLyogTm90IGZvdW5kICovCi0JcmMgPSAtRUlOVkFMOwotCi1leGl0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBpcl9yb3VuZHVwX3RhYmxlc2l6ZSgpIC0gZ2V0cyBhbiBvcHRpbXVtIHZhbHVlIGZvciB0aGUgdGFibGUgc2l6ZQotICogQG5fZWxlbXM6CQltaW5pbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIHN0b3JlIGtleWNvZGVzCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gY2hvb3NlIHRoZSBrZXljb2RlIHRhYmxlIHNpemUuCi0gKgotICogSW4gb3JkZXIgdG8gaGF2ZSBzb21lIGVtcHR5IHNwYWNlIGZvciBuZXcga2V5Y29kZXMsCi0gKiBhbmQga25vd2luZyBpbiBhZHZhbmNlIHRoYXQga21hbGxvYyBhbGxvY2F0ZXMgb25seSBwb3dlciBvZiB0d28KLSAqIHNlZ21lbnRzLCBpdCBvcHRpbWl6ZXMgdGhlIGFsbG9jYXRlZCBzcGFjZSB0byBoYXZlIHNvbWUgc3BhcmUgc3BhY2UKLSAqIGZvciB0aG9zZSBuZXcga2V5Y29kZXMgYnkgdXNpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgdGhhdAotICogd2lsbCBiZSBlZmZlY3RpdmVseSBiZSBhbGxvY2F0ZWQgYnkga21hbGxvYy4KLSAqIEluIG9yZGVyIHRvIHJlZHVjZSB0aGUgcXVhbnRpdHkgb2YgdGFibGUgcmVzaXplcywgaXQgaGFzIGEgbWluaW11bQotICogdGFibGUgc2l6ZSBvZiBJUl9UQUJfTUlOX1NJWkUuCi0gKi8KLWludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcykKLXsKLQlzaXplX3Qgc2l6ZTsKLQotCWlmIChuX2VsZW1zIDwgSVJfVEFCX01JTl9TSVpFKQotCQluX2VsZW1zID0gSVJfVEFCX01JTl9TSVpFOwotCi0JLyoKLQkgKiBBcyBrbWFsbG9jIG9ubHkgYWxsb2NhdGVzIHNpemVzIG9mIHBvd2VyIG9mIHR3bywgZ2V0IGFzCi0JICogbXVjaCBlbnRyaWVzIGFzIHBvc3NpYmxlIGZvciB0aGUgYWxsb2NhdGVkIG1lbW9yeSBzZWdtZW50Ci0JICovCi0Jc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhuX2VsZW1zICogc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSkpOwotCW5fZWxlbXMgPSBzaXplIC8gc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSk7Ci0KLQlyZXR1cm4gbl9lbGVtczsKLX0KLQotLyoqCi0gKiBpcl9jb3B5X3RhYmxlKCkgLSBjb3BpZXMgYSBrZXl0YWJsZSwgZGlzY2FyZGluZyB0aGUgdW51c2VkIGVudHJpZXMKLSAqIEBkZXN0aW46CWRlc3RpbiB0YWJsZQotICogQG9yaWdpbjoJb3JpZ2luIHRhYmxlCi0gKgotICogQ29waWVzIGFsbCBlbnRyaWVzIHdoZXJlIHRoZSBrZXljb2RlIGlzIG5vdCBLRVlfVU5LTk9XTi9LRVlfUkVTRVJWRUQKLSAqLwotCi1pbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKLQkJIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqb3JpZ2luKQotewotCWludCBpLCBqID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBvcmlnaW4tPnNpemU7IGkrKykgewotCQlpZiAob3JpZ2luLT5zY2FuW2ldLmtleWNvZGUgPT0gS0VZX1VOS05PV04gfHwKLQkJICAgb3JpZ2luLT5zY2FuW2ldLmtleWNvZGUgPT0gS0VZX1JFU0VSVkVEKQotCQkJY29udGludWU7Ci0KLQkJbWVtY3B5KCZkZXN0aW4tPnNjYW5bal0sICZvcmlnaW4tPnNjYW5baV0sIHNpemVvZihzdHJ1Y3QgaXJfc2NhbmNvZGUpKTsKLQkJaisrOwotCX0KLQlkZXN0aW4tPnNpemUgPSBqOwotCi0JSVJfZHByaW50aygxLCAiQ29waWVkICVkIHNjYW5jb2RlcyB0byB0aGUgbmV3IGtleWNvZGUgdGFibGVcbiIsIGRlc3Rpbi0+c2l6ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpcl9nZXRrZXljb2RlKCkgLSBnZXQgYSBrZXljb2RlIGF0IHRoZSBldmRldiBzY2FuY29kZSAtPmtleWNvZGUgdGFibGUKLSAqIEBkZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCi0gKiBAc2NhbmNvZGU6CXRoZSBkZXNpcmVkIHNjYW5jb2RlCi0gKiBAa2V5Y29kZToJdGhlIGtleWNvZGUgdG8gYmUgcmV0b3JuZWQuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaGFuZGxlIGV2ZGV2IEVWSU9DR0tFWSBpb2N0bC4KLSAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIC1FSU5WQUwsIG90aGVyd2lzZSwgcmV0dXJucyAwLgotICovCi1zdGF0aWMgaW50IGlyX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJIGludCBzY2FuY29kZSwgaW50ICprZXljb2RlKQotewotCWludCBlbGVtOwotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWVsZW0gPSBpcl9zZWVrX3RhYmxlKHJjX3RhYiwgc2NhbmNvZGUpOwotCWlmIChlbGVtID49IDApIHsKLQkJKmtleWNvZGUgPSByY190YWItPnNjYW5bZWxlbV0ua2V5Y29kZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBTY2FuY29kZSBub3QgZm91bmQgYW5kIHRhYmxlIGNhbid0IGJlIGV4cGFuZGVkCi0JICovCi0JaWYgKGVsZW0gPCAwICYmIHJjX3RhYi0+c2l6ZSA9PSBJUl9UQUJfTUFYX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBJZiBpcyB0aGVyZSBleHRyYSBzcGFjZSwgcmV0dXJucyBLRVlfUkVTRVJWRUQsCi0JICogb3RoZXJ3aXNlLCBpbnB1dCBjb3JlIHdvbid0IGxldCBpcl9zZXRrZXljb2RlIHRvIHdvcmsKLQkgKi8KLQkqa2V5Y29kZSA9IEtFWV9SRVNFUlZFRDsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIGlyX2lzX3Jlc2l6ZV9uZWVkZWQoKSAtIENoZWNrIGlmIHRoZSB0YWJsZSBuZWVkcyByZXppc2UKLSAqIEB0YWJsZToJCWtleWNvZGUgdGFibGUgdGhhdCBtYXkgbmVlZCB0byByZXNpemUKLSAqIEBuX2VsZW1zOgkJbWluaW11bSBudW1iZXIgb2YgZW50cmllcyB0byBzdG9yZSBrZXljb2RlcwotICoKLSAqIENvbnNpZGVyaW5nIHRoYXQga21hbGxvYyB1c2VzIHBvd2VyIG9mIHR3byBzdG9yYWdlIGFyZWFzLCB0aGlzCi0gKiByb3V0aW5lIGRldGVjdHMgaWYgdGhlIHJlYWwgYWxsb2NlZCBzaXplIHdpbGwgY2hhbmdlLiBJZiBub3QsIGl0Ci0gKiBqdXN0IHJldHVybnMgd2l0aG91dCBkb2luZyBub3RoaW5nLiBPdGhlcndpc2UsIGl0IHdpbGwgZXh0ZW5kIG9yCi0gKiByZWR1Y2UgdGhlIHRhYmxlIHNpemUgdG8gbWVldCB0aGUgbmV3IG5lZWRzLgotICoKLSAqIEl0IHJldHVybnMgMCBpZiBubyByZXNpemUgaXMgbmVlZGVkLCAxIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBpcl9pc19yZXNpemVfbmVlZGVkKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqdGFibGUsIGludCBuX2VsZW1zKQotewotCWludCBjdXJfc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKHRhYmxlLT5zaXplKTsKLQlpbnQgbmV3X3NpemUgPSBpcl9yb3VuZHVwX3RhYmxlc2l6ZShuX2VsZW1zKTsKLQotCWlmIChjdXJfc2l6ZSA9PSBuZXdfc2l6ZSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBSZXNpemUgaXMgbmVlZGVkICovCi0JcmV0dXJuIDE7Ci19Ci0KLS8qKgotICogaXJfZGVsZXRlX2tleSgpIC0gcmVtb3ZlIGEga2V5Y29kZSBmcm9tIHRoZSB0YWJsZQotICogQHJjX3RhYjoJCWtleWNvZGUgdGFibGUKLSAqIEBlbGVtOgkJZWxlbWVudCB0byBiZSByZW1vdmVkCi0gKgotICovCi1zdGF0aWMgdm9pZCBpcl9kZWxldGVfa2V5KHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiLCBpbnQgZWxlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQlpbnQgbmV3c2l6ZSA9IHJjX3RhYi0+c2l6ZSAtIDE7Ci0JaW50IHJlc2l6ZSA9IGlyX2lzX3Jlc2l6ZV9uZWVkZWQocmNfdGFiLCBuZXdzaXplKTsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKm9sZGtleW1hcCA9IHJjX3RhYi0+c2NhbjsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKm5ld2tleW1hcDsKLQotCWlmIChyZXNpemUpIHsKLQkJbmV3a2V5bWFwID0ga3phbGxvYyhpcl9yb3VuZHVwX3RhYmxlc2l6ZShuZXdzaXplKSAqCi0JCQkJICAgIHNpemVvZigqbmV3a2V5bWFwKSwgR0ZQX0FUT01JQyk7Ci0KLQkJLyogVGhlcmUncyBubyBtZW1vcnkgZm9yIHJlc2l6ZS4gS2VlcCB0aGUgb2xkIHRhYmxlICovCi0JCWlmICghbmV3a2V5bWFwKQotCQkJcmVzaXplID0gMDsKLQl9Ci0KLQlpZiAoIXJlc2l6ZSkgewotCQluZXdrZXltYXAgPSBvbGRrZXltYXA7Ci0KLQkJLyogV2UnbGwgbW9kaWZ5IHRoZSBsaXZlIHRhYmxlLiBMb2NrIGl0ICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZyY190YWItPmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQkvKgotCSAqIENvcHkgdGhlIGVsZW1lbnRzIGJlZm9yZSB0aGUgb25lIHRoYXQgd2lsbCBiZSBkZWxldGVkCi0JICogaWYgKCFyZXNpemUpLCBib3RoIG9sZGtleW1hcCBhbmQgbmV3a2V5bWFwIHBvaW50cwotCSAqIHRvIHRoZSBzYW1lIHBsYWNlLCBzbywgdGhlcmUncyBubyBuZWVkIHRvIGNvcHkKLQkgKi8KLQlpZiAocmVzaXplICYmIGVsZW0gPiAwKQotCQltZW1jcHkobmV3a2V5bWFwLCBvbGRrZXltYXAsCi0JCSAgICAgICBlbGVtICogc2l6ZW9mKCpuZXdrZXltYXApKTsKLQotCS8qCi0JICogQ29weSB0aGUgb3RoZXIgZWxlbWVudHMgb3ZlcndyaXRpbmcgdGhlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZAotCSAqIFRoaXMgb3BlcmF0aW9uIGFwcGxpZXMgdG8gYm90aCByZXNpemUgYW5kIG5vbi1yZXNpemUgY2FzZQotCSAqLwotCWlmIChlbGVtIDwgbmV3c2l6ZSkKLQkJbWVtY3B5KCZuZXdrZXltYXBbZWxlbV0sICZvbGRrZXltYXBbZWxlbSArIDFdLAotCQkgICAgICAgKG5ld3NpemUgLSBlbGVtKSAqIHNpemVvZigqbmV3a2V5bWFwKSk7Ci0KLQlpZiAocmVzaXplKSB7Ci0JCS8qCi0JCSAqIEFzIHRoZSBjb3B5IGhhcHBlbmVkIHRvIGEgdGVtcG9yYXJ5IHRhYmxlLCBvbmx5IGhlcmUKLQkJICogaXQgbmVlZHMgdG8gbG9jayB3aGlsZSByZXBsYWNpbmcgdGhlIHRhYmxlIHBvaW50ZXJzCi0JCSAqIHRvIHVzZSB0aGUgbmV3IHRhYmxlCi0JCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7Ci0JCXJjX3RhYi0+c2l6ZSA9IG5ld3NpemU7Ci0JCXJjX3RhYi0+c2NhbiA9IG5ld2tleW1hcDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7Ci0KLQkJLyogRnJlZXMgdGhlIG9sZCBrZXl0YWJsZSAqLwotCQlrZnJlZShvbGRrZXltYXApOwotCX0gZWxzZSB7Ci0JCXJjX3RhYi0+c2l6ZSA9IG5ld3NpemU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCX0KLX0KLQotLyoqCi0gKiBpcl9pbnNlcnRfa2V5KCkgLSBpbnNlcnQgYSBrZXljb2RlIGF0IHRoZSB0YWJsZQotICogQHJjX3RhYjoJCWtleWNvZGUgdGFibGUKLSAqIEBzY2FuY29kZToJdGhlIGRlc2lyZWQgc2NhbmNvZGUKLSAqIEBrZXljb2RlOgl0aGUga2V5Y29kZSB0byBiZSByZXRvcm5lZC4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgaXJfaW5zZXJ0X2tleShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKLQkJCSAgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlbGVtID0gcmNfdGFiLT5zaXplOwotCWludCBuZXdzaXplID0gcmNfdGFiLT5zaXplICsgMTsKLQlpbnQgcmVzaXplID0gaXJfaXNfcmVzaXplX25lZWRlZChyY190YWIsIG5ld3NpemUpOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xka2V5bWFwID0gcmNfdGFiLT5zY2FuOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwOwotCi0JaWYgKHJlc2l6ZSkgewotCQluZXdrZXltYXAgPSBremFsbG9jKGlyX3JvdW5kdXBfdGFibGVzaXplKG5ld3NpemUpICoKLQkJCQkgICAgc2l6ZW9mKCpuZXdrZXltYXApLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFuZXdrZXltYXApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQltZW1jcHkobmV3a2V5bWFwLCBvbGRrZXltYXAsCi0JCSAgICAgICByY190YWItPnNpemUgKiBzaXplb2YoKm5ld2tleW1hcCkpOwotCX0gZWxzZQotCQluZXdrZXltYXAgID0gb2xka2V5bWFwOwotCi0JLyogU3RvcmVzIHRoZSBuZXcgY29kZSBhdCB0aGUgdGFibGUgKi8KLQlJUl9kcHJpbnRrKDEsICIjJWQ6IE5ldyBzY2FuIDB4JTA0eCB3aXRoIGtleSAweCUwNHhcbiIsCi0JCSAgIHJjX3RhYi0+c2l6ZSwgc2NhbmNvZGUsIGtleWNvZGUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCXJjX3RhYi0+c2l6ZSA9IG5ld3NpemU7Ci0JaWYgKHJlc2l6ZSkgewotCQlyY190YWItPnNjYW4gPSBuZXdrZXltYXA7Ci0JCWtmcmVlKG9sZGtleW1hcCk7Ci0JfQotCW5ld2tleW1hcFtlbGVtXS5zY2FuY29kZSA9IHNjYW5jb2RlOwotCW5ld2tleW1hcFtlbGVtXS5rZXljb2RlICA9IGtleWNvZGU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpcl9zZXRrZXljb2RlKCkgLSBzZXQgYSBrZXljb2RlIGF0IHRoZSBldmRldiBzY2FuY29kZSAtPmtleWNvZGUgdGFibGUKLSAqIEBkZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCi0gKiBAc2NhbmNvZGU6CXRoZSBkZXNpcmVkIHNjYW5jb2RlCi0gKiBAa2V5Y29kZToJdGhlIGtleWNvZGUgdG8gYmUgcmV0b3JuZWQuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaGFuZGxlIGV2ZGV2IEVWSU9DU0tFWSBpb2N0bC4KLSAqIFRoZXJlJ3Mgb25lIGNhdmVhdCBoZXJlOiBob3cgY2FuIHdlIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSB0YWJsZT8KLSAqIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIC1FSU5WQUwsIG90aGVyd2lzZSwgcmV0dXJucyAwLgotICovCi1zdGF0aWMgaW50IGlyX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlICprZXltYXAgPSByY190YWItPnNjYW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogSGFuZGxlIGtleWNvZGUgdGFibGUgZGVsZXRpb25zCi0JICoKLQkgKiBJZiB1c2Vyc3BhY2UgaXMgYWRkaW5nIGEgS0VZX1VOS05PV04gb3IgS0VZX1JFU0VSVkVELAotCSAqIGRlYWwgYXMgYSB0cmlhbCB0byByZW1vdmUgYW4gZXhpc3Rpbmcgc2NhbmNvZGUgYXR0cmlidXRpb24KLQkgKiBpZiB0YWJsZSBiZWNvbWUgdG9vIGJpZywgcmVkdWNlIGl0IHRvIHNhdmUgc3BhY2UKLQkgKi8KLQlpZiAoa2V5Y29kZSA9PSBLRVlfVU5LTk9XTiB8fCBrZXljb2RlID09IEtFWV9SRVNFUlZFRCkgewotCQlyYyA9IGlyX3NlZWtfdGFibGUocmNfdGFiLCBzY2FuY29kZSk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gMDsKLQotCQlJUl9kcHJpbnRrKDEsICIjJWQ6IERlbGV0aW5nIHNjYW4gMHglMDR4XG4iLCByYywgc2NhbmNvZGUpOwotCQljbGVhcl9iaXQoa2V5bWFwW3JjXS5rZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0JCWlyX2RlbGV0ZV9rZXkocmNfdGFiLCByYyk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBIYW5kbGUga2V5Y29kZSByZXBsYWNlbWVudHMKLQkgKgotCSAqIElmIHRoZSBzY2FuY29kZSBleGlzdHMsIGp1c3QgcmVwbGFjZSBieSB0aGUgbmV3IHZhbHVlCi0JICovCi0JcmMgPSBpcl9zZWVrX3RhYmxlKHJjX3RhYiwgc2NhbmNvZGUpOwotCWlmIChyYyA+PSAwKSB7Ci0JCUlSX2RwcmludGsoMSwgIiMlZDogUmVwbGFjaW5nIHNjYW4gMHglMDR4IHdpdGgga2V5IDB4JTA0eFxuIiwKLQkJCXJjLCBzY2FuY29kZSwga2V5Y29kZSk7Ci0KLQkJY2xlYXJfYml0KGtleW1hcFtyY10ua2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZyY190YWItPmxvY2ssIGZsYWdzKTsKLQkJa2V5bWFwW3JjXS5rZXljb2RlID0ga2V5Y29kZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7Ci0KLQkJc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBIYW5kbGUgbmV3IHNjYW5jb2RlIGluc2VydHMKLQkgKgotCSAqIHJlYWxsb2NhdGUgdGFibGUgaWYgbmVlZGVkIGFuZCBpbnNlcnQgYSBuZXcga2V5Y29kZQotCSAqLwotCi0JLyogQXZvaWQgZ3Jvd2luZyB0aGUgdGFibGUgaW5kZWZpbml0ZWx5ICovCi0JaWYgKHJjX3RhYi0+c2l6ZSArIDEgPiBJUl9UQUJfTUFYX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBpcl9pbnNlcnRfa2V5KHJjX3RhYiwgc2NhbmNvZGUsIGtleWNvZGUpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQlzZXRfYml0KGtleWNvZGUsIGRldi0+a2V5Yml0KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKCkgLSBnZXRzIHRoZSBrZXljb2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzY2FuY29kZQotICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCi0gKiBAc2NhbmNvZGU6CXRoZSBzY2FuY29kZSB0aGF0IHdlJ3JlIHNlZWtpbmcKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgaW5wdXQgcm91dGluZXMgd2hlbiBhIGtleSBpcyBwcmVzc2VkIGF0IHRoZQotICogSVIuIFRoZSBzY2FuY29kZSBpcyByZWNlaXZlZCBhbmQgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gYSBrZXljb2RlLgotICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIGl0IHJldHVybnMgS0VZX1VOS05PV04uIE90aGVyd2lzZSwgcmV0dXJucyB0aGUKLSAqIGNvcnJlc3BvbmRpbmcga2V5Y29kZSBmcm9tIHRoZSB0YWJsZS4KLSAqLwotdTMyIGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdTMyIHNjYW5jb2RlKQotewotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IHJjX3RhYi0+c2NhbjsKLQlpbnQgZWxlbTsKLQotCWVsZW0gPSBpcl9zZWVrX3RhYmxlKHJjX3RhYiwgc2NhbmNvZGUpOwotCWlmIChlbGVtID49IDApIHsKLQkJSVJfZHByaW50aygxLCAiJXM6IHNjYW5jb2RlIDB4JTA0eCBrZXljb2RlIDB4JTAyeFxuIiwKLQkJCSAgIGRldi0+bmFtZSwgc2NhbmNvZGUsIGtleW1hcFtlbGVtXS5rZXljb2RlKTsKLQotCQlyZXR1cm4gcmNfdGFiLT5zY2FuW2VsZW1dLmtleWNvZGU7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVua25vd24ga2V5IGZvciBzY2FuY29kZSAweCUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgc2NhbmNvZGUpOwotCi0JLyogUmVwb3J0cyB1c2Vyc3BhY2UgdGhhdCBhbiB1bmtub3duIGtleWNvZGUgd2VyZSBnb3QgKi8KLQlyZXR1cm4gS0VZX1JFU0VSVkVEOwotfQotCi0vKioKLSAqIGlyX3NldF9rZXljb2RlX3RhYmxlKCkgLSBzZXRzIHRoZSBJUiBrZXljb2RlIHRhYmxlIGFuZCBhZGQgdGhlIGhhbmRsZXJzCi0gKgkJCSAgICBmb3Iga2V5bWFwIHRhYmxlIGdldC9zZXQKLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotICogQHJjX3RhYjoJdGhlIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB0YWJsZSBvZiBzY2FuY29kZS9rZXltYXAKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBpbnB1dCBpbmZyYXN0cnVjdHVyZSB0byB3b3JrIHdpdGgKLSAqIGFuIElSLgotICogSXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIElSIGRldmljZS4KLSAqLwotaW50IGlyX3NldF9rZXljb2RlX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJCSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYikKLXsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IHJjX3RhYi0+c2NhbjsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pbml0KCZyY190YWItPmxvY2spOwotCi0JaWYgKHJjX3RhYi0+c2NhbiA9PSBOVUxMIHx8ICFyY190YWItPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogc2V0IHRoZSBiaXRzIGZvciB0aGUga2V5cyAqLwotCUlSX2RwcmludGsoMSwgImtleSBtYXAgc2l6ZTogJWRcbiIsIHJjX3RhYi0+c2l6ZSk7Ci0JZm9yIChpID0gMDsgaSA8IHJjX3RhYi0+c2l6ZTsgaSsrKSB7Ci0JCUlSX2RwcmludGsoMSwgIiMlZDogc2V0dGluZyBiaXQgZm9yIGtleWNvZGUgMHglMDR4XG4iLAotCQkJaSwga2V5bWFwW2ldLmtleWNvZGUpOwotCQlzZXRfYml0KGtleW1hcFtpXS5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JfQotCi0JaW5wdXRfZGV2LT5nZXRrZXljb2RlID0gaXJfZ2V0a2V5Y29kZTsKLQlpbnB1dF9kZXYtPnNldGtleWNvZGUgPSBpcl9zZXRrZXljb2RlOwotCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgcmNfdGFiKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGlyX2lucHV0X2ZyZWUoc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQotCUlSX2RwcmludGsoMSwgIkZyZWVkIGtleWNvZGUgdGFibGVcbiIpOwotCi0JcmNfdGFiLT5zaXplID0gMDsKLQlrZnJlZShyY190YWItPnNjYW4pOwotCXJjX3RhYi0+c2NhbiA9IE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9mcmVlKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCA2MjBmNjU1Li43MzY0Yjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtMSw3ICsxLDUgQEAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+CiAKLSNkZWZpbmUgQk9BUkRfQ0FOX0RPX1ZCSShkZXYpICAgKGRldi0+cmV2aXNpb24gIT0gMCAmJiBkZXYtPnZ2X2RhdGEtPnZiaV9taW5vciAhPSAtMSkKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiByZXNvdXJjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gc2FhNzEzNCBkcml2ZXIgKi8KIApAQCAtMTk0LDQzICsxOTIsMjQgQEAKIAogc3RhdGljIGludCBmb3BzX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpoID0gTlVMTCwgKmRldiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gTlVMTDsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOwogCi0JREVCX0VFKCgiZmlsZTolcCwgbWlub3I6JWRcbiIsIGZpbGUsIG1pbm9yKSk7CisJREVCX0VFKCgiZmlsZTolcCwgZGV2OiVzXG4iLCBmaWxlLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpKSk7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzYWE3MTQ2X2RldmljZXNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlsaXN0X2Zvcl9lYWNoKGxpc3QsJnNhYTcxNDZfZGV2aWNlcykgewotCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc2FhNzE0Nl9kZXYsIGl0ZW0pOwotCQlpZiggTlVMTCA9PSBoLT52dl9kYXRhICkgewotCQkJREVCX0QoKCJkZXZpY2UgJXAgaGFzIG5vdCByZWdpc3RlcmVkIHZpZGVvIGRldmljZXMuXG4iLGgpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCURFQl9EKCgidHJ5aW5nOiAlcCBAIG1ham9yICVkLCVkXG4iLGgsaC0+dnZfZGF0YS0+dmlkZW9fbWlub3IsaC0+dnZfZGF0YS0+dmJpX21pbm9yKSk7Ci0KLQkJaWYgKGgtPnZ2X2RhdGEtPnZpZGVvX21pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgPSBoOwotCQl9Ci0JCWlmIChoLT52dl9kYXRhLT52YmlfbWlub3IgPT0gbWlub3IpIHsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQkJZGV2ID0gaDsKLQkJfQotCX0KLQlpZiAoTlVMTCA9PSBkZXYpIHsKLQkJREVCX1MoKCJubyBzdWNoIHZpZGVvIGRldmljZS5cbiIpKTsKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJREVCX0QoKCJ1c2luZzogJXBcbiIsZGV2KSk7CiAKKwl0eXBlID0gdmRldi0+dmZsX3R5cGUgPT0gVkZMX1RZUEVfR1JBQkJFUgorCSAgICAgPyBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKKwkgICAgIDogVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwogCS8qIGNoZWNrIGlmIGFuIGV4dGVuc2lvbiBpcyByZWdpc3RlcmVkICovCiAJaWYoIE5VTEwgPT0gZGV2LT5leHQgKSB7CiAJCURFQl9TKCgibm8gZXh0ZW5zaW9uIHJlZ2lzdGVyZWQgZm9yIHRoaXMgZGV2aWNlLlxuIikpOwpAQCAtNDc0LDkgKzQ1Myw2IEBACiAJICAgY29uZmlndXJhdGlvbiBkYXRhKSAqLwogCWRldi0+ZXh0X3Z2X2RhdGEgPSBleHRfdnY7CiAKLQl2di0+dmlkZW9fbWlub3IgPSAtMTsKLQl2di0+dmJpX21pbm9yID0gLTE7Ci0KIAl2di0+ZF9jbGlwcGluZy5jcHVfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpLCBTQUE3MTQ2X0NMSVBQSU5HX01FTSwgJnZ2LT5kX2NsaXBwaW5nLmRtYV9oYW5kbGUpOwogCWlmKCBOVUxMID09IHZ2LT5kX2NsaXBwaW5nLmNwdV9hZGRyICkgewogCQlFUlIoKCJvdXQgb2YgbWVtb3J5LiBhYm9ydGluZy5cbiIpKTsKQEAgLTUxNSw3ICs0OTEsNiBAQAogaW50IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKip2aWQsIHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LAogCQkJICAgIGNoYXIgKm5hbWUsIGludCB0eXBlKQogewotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CiAJaW50IGVycjsKIAlpbnQgaTsKQEAgLTU0MywxNSArNTE4LDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiggVkZMX1RZUEVfR1JBQkJFUiA9PSB0eXBlICkgewotCQl2di0+dmlkZW9fbWlub3IgPSB2ZmQtPm1pbm9yOwotCQlJTkZPKCgiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW3Y0bDJdXG4iLAotCQkJZGV2LT5uYW1lLCB2ZmQtPm51bSkpOwotCX0gZWxzZSB7Ci0JCXZ2LT52YmlfbWlub3IgPSB2ZmQtPm1pbm9yOwotCQlJTkZPKCgiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIFt2NGwyXVxuIiwKLQkJCWRldi0+bmFtZSwgdmZkLT5udW0pKTsKLQl9CisJSU5GTygoIiVzOiByZWdpc3RlcmVkIGRldmljZSAlcyBbdjRsMl1cbiIsCisJCWRldi0+bmFtZSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZmQpKSk7CiAKIAkqdmlkID0gdmZkOwogCXJldHVybiAwOwpAQCAtNTYwLDE2ICs1MjgsOCBAQAogCiBpbnQgc2FhNzE0Nl91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICoqdmlkLCBzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KIAlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CiAKLQlpZiAoKCp2aWQpLT52ZmxfdHlwZSA9PSBWRkxfVFlQRV9HUkFCQkVSKSB7Ci0JCXZ2LT52aWRlb19taW5vciA9IC0xOwotCX0gZWxzZSB7Ci0JCXZ2LT52YmlfbWlub3IgPSAtMTsKLQl9Ci0KIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgqdmlkKTsKIAkqdmlkID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCmluZGV4IDUzZTNmMmEuLmYwZjQ4M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKQEAgLTU4OSw3ICs1ODksNyBAQAogCXNucHJpbnRmKGRtMTEwNS0+aXIuaW5wdXRfcGh5cywgc2l6ZW9mKGRtMTEwNS0+aXIuaW5wdXRfcGh5cyksCiAJCSJwY2ktJXMvaXIwIiwgcGNpX25hbWUoZG0xMTA1LT5wZGV2KSk7CiAKLQllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmRtMTEwNS0+aXIuaXIsIGlyX3R5cGUsIGlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmRtMTEwNS0+aXIuaXIsIGlyX3R5cGUpOwogCWlmIChlcnIgPCAwKSB7CiAJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJCXJldHVybiBlcnI7CkBAIC02MTEsMjAgKzYxMSwxNCBAQAogCiAJSU5JVF9XT1JLKCZkbTExMDUtPmlyLndvcmssIGRtMTEwNV9lbWl0X2tleSk7CiAKLQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWlyX2lucHV0X2ZyZWUoaW5wdXRfZGV2KTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2Rlcyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCiB7Ci0JaXJfaW5wdXRfZnJlZShkbTExMDUtPmlyLmlucHV0X2Rldik7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZG0xMTA1LT5pci5pbnB1dF9kZXYpOworCWlyX2lucHV0X3VucmVnaXN0ZXIoZG0xMTA1LT5pci5pbnB1dF9kZXYpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggOGI4NTU4Zi4uZGE2NTUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtOTQ5LDExICs5NDksOCBAQAogCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbMTBdID0gbWFjX21hc2tbMV07CiAJKCpzZWNmaWx0ZXIpLT5maWx0ZXJfbWFza1sxMV09bWFjX21hc2tbMF07CiAKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hYz0lMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hc2s9JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbWFjX21hc2tbMF0sIG1hY19tYXNrWzFdLCBtYWNfbWFza1syXSwKLQkgICAgICAgbWFjX21hc2tbM10sIG1hY19tYXNrWzRdLCBtYWNfbWFza1s1XSk7CisJZHByaW50aygiJXM6IGZpbHRlciBtYWM9JXBNXG4iLCBkZXYtPm5hbWUsIG1hYyk7CisJZHByaW50aygiJXM6IGZpbHRlciBtYXNrPSVwTVxuIiwgZGV2LT5uYW1lLCBtYWNfbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCAyZGVlMWJmLi4xYjI0OTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC0yNjUsOSArMjY1LDEzIEBACiAJc2VsZWN0IERWQl9UREExMDAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTVQzMTIgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAwMzkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RTMzAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjEwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgRHZiV29ybGQgRFZCLVMvUzIgVVNCMi4wIHJlY2VpdmVycwotCSAgYW5kIHRoZSBUZVZpaSBTNjUwLCBTNjMwLgorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBEdmJXb3JsZCwgVGVWaWksIFByb2YgRFZCLVMvUzIgVVNCMi4wCisJICByZWNlaXZlcnMuCiAKIGNvbmZpZyBEVkJfVVNCX0NJTkVSR1lfVDIKIAl0cmlzdGF0ZSAiVGVycmF0ZWMgQ2luZXJneVQyL3FhbnUgVVNCIDIuMCBEVkItVCByZWNlaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKaW5kZXggOGI1NDRmZS4uNDk1YTkwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKQEAgLTIwLDIwICsyMCwyMiBAQAogI2RlZmluZSBkZWJfZndkYXRhKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kaWIwNzAwX2RlYnVnLDB4MDQsYXJncykKICNkZWZpbmUgZGViX2RhdGEoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZGliMDcwMF9kZWJ1ZywweDA4LGFyZ3MpCiAKLSNkZWZpbmUgUkVRVUVTVF9JMkNfUkVBRCAgICAgMHgyCi0jZGVmaW5lIFJFUVVFU1RfSTJDX1dSSVRFICAgIDB4MwotI2RlZmluZSBSRVFVRVNUX1BPTExfUkMgICAgICAweDQgLyogZGVwcmVjYXRlZCBpbiBmaXJtd2FyZSB2MS4yMCAqLwotI2RlZmluZSBSRVFVRVNUX0pVTVBSQU0gICAgICAweDgKLSNkZWZpbmUgUkVRVUVTVF9TRVRfQ0xPQ0sgICAgMHhCCi0jZGVmaW5lIFJFUVVFU1RfU0VUX0dQSU8gICAgIDB4QwotI2RlZmluZSBSRVFVRVNUX0VOQUJMRV9WSURFTyAweEYKKyNkZWZpbmUgUkVRVUVTVF9TRVRfVVNCX1hGRVJfTEVOICAgIDB4MCAvKiB2YWxpZCBvbmx5IGZvciBmaXJtd2FyZSB2ZXJzaW9uICovCisJCQkJCS8qIGhpZ2hlciB0aGFuIDEuMjEgKi8KKyNkZWZpbmUgUkVRVUVTVF9JMkNfUkVBRCAgICAgICAgICAgIDB4MgorI2RlZmluZSBSRVFVRVNUX0kyQ19XUklURSAgICAgICAgICAgMHgzCisjZGVmaW5lIFJFUVVFU1RfUE9MTF9SQyAgICAgICAgICAgICAweDQgLyogZGVwcmVjYXRlZCBpbiBmaXJtd2FyZSB2MS4yMCAqLworI2RlZmluZSBSRVFVRVNUX0pVTVBSQU0gICAgICAgICAgICAgMHg4CisjZGVmaW5lIFJFUVVFU1RfU0VUX0NMT0NLICAgICAgICAgICAweEIKKyNkZWZpbmUgUkVRVUVTVF9TRVRfR1BJTyAgICAgICAgICAgIDB4QworI2RlZmluZSBSRVFVRVNUX0VOQUJMRV9WSURFTyAgICAgICAgMHhGCiAJLy8gMSBCeXRlOiA0TVNCKDEgPSBlbmFibGUgc3RyZWFtaW5nLCAwID0gZGlzYWJsZSBzdHJlYW1pbmcpIDRMU0IoVmlkZW8gTW9kZTogMCA9IE1QRUcyIDE4OEJ5dGVzLCAxID0gQW5hbG9nKQogCS8vIDIgQnl0ZTogTVBFRzIgbW9kZTogIDRNU0IoMSA9IE1hc3RlciBNb2RlLCAwID0gU2xhdmUgTW9kZSkgNExTQihDaGFubmVsIDEgPSBiaXQwLCBDaGFubmVsIDIgPSBiaXQxKQogCS8vIDIgQnl0ZTogQW5hbG9nIG1vZGU6IDRNU0IoMCA9IDYyNSBsaW5lcywgMSA9IDUyNSBsaW5lcykgICAgNExTQiggICAgICIgICAgICAgICAgICAgICAgIiAgICAgICAgICAgKQotI2RlZmluZSBSRVFVRVNUX1NFVF9SQyAgICAgICAweDExCi0jZGVmaW5lIFJFUVVFU1RfTkVXX0kyQ19SRUFEIDB4MTIKLSNkZWZpbmUgUkVRVUVTVF9ORVdfSTJDX1dSSVRFIDB4MTMKLSNkZWZpbmUgUkVRVUVTVF9HRVRfVkVSU0lPTiAgMHgxNQorI2RlZmluZSBSRVFVRVNUX1NFVF9SQyAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBSRVFVRVNUX05FV19JMkNfUkVBRCAgICAgICAgMHgxMgorI2RlZmluZSBSRVFVRVNUX05FV19JMkNfV1JJVEUgICAgICAgMHgxMworI2RlZmluZSBSRVFVRVNUX0dFVF9WRVJTSU9OICAgICAgICAgMHgxNQogCiBzdHJ1Y3QgZGliMDcwMF9zdGF0ZSB7CiAJdTggY2hhbm5lbF9zdGF0ZTsKQEAgLTQ0LDYgKzQ2LDggQEAKIAl1OCBpc19kaWI3MDAwcGM7CiAJdTggZndfdXNlX25ld19pMmNfYXBpOwogCXU4IGRpc2FibGVfc3RyZWFtaW5nX21hc3Rlcl9tb2RlOworICAgIHUzMiBmd192ZXJzaW9uOworICAgIHUzMiBuYl9wYWNrZXRfYnVmZmVyX3NpemU7CiB9OwogCiBleHRlcm4gaW50IGRpYjA3MDBfZ2V0X3ZlcnNpb24oc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmh3dmVyc2lvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IGRiN2Y3ZjcuLjBkM2M5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtMTcsNiArMTcsMTQgQEAKIG1vZHVsZV9wYXJhbShkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl91c2JfZGliMDcwMF9pcl9wcm90bywgInNldCBpciBwcm90b2NvbCAoMD1ORUMsIDE9UkM1IChkZWZhdWx0KSwgMj1SQzYpLiIpOwogCitzdGF0aWMgaW50IG5iX3BhY2tldF9idWZmZXJfc2l6ZSA9IDIxOworbW9kdWxlX3BhcmFtKG5iX3BhY2tldF9idWZmZXJfc2l6ZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobmJfcGFja2V0X2J1ZmZlcl9zaXplLAorCSJTZXQgdGhlIGRpYjA3MDAgZHJpdmVyIGRhdGEgYnVmZmVyIHNpemUuIFRoaXMgcGFyYW1ldGVyICIKKwkiY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZiBUUyBwYWNrZXRzLiBUaGUgYWN0dWFsIHNpemUgb2YgIgorCSJ0aGUgZGF0YSBidWZmZXIgY29ycmVzcG9uZHMgdG8gdGhpcyBwYXJhbWV0ZXIgIgorCSJtdWx0aXBsaWVkIGJ5IDE4OCAoZGVmYXVsdDogMjEpIik7CisKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiAKQEAgLTI4LDEwICszNiwxNCBAQAogCQkJCSAgUkVRVUVTVF9HRVRfVkVSU0lPTiwKIAkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sIDAsIDAsCiAJCQkJICBiLCBzaXplb2YoYiksIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKLQkqaHd2ZXJzaW9uICA9IChiWzBdIDw8IDI0KSAgfCAoYlsxXSA8PCAxNikgIHwgKGJbMl0gPDwgOCkgIHwgYlszXTsKLQkqcm9tdmVyc2lvbiA9IChiWzRdIDw8IDI0KSAgfCAoYls1XSA8PCAxNikgIHwgKGJbNl0gPDwgOCkgIHwgYls3XTsKLQkqcmFtdmVyc2lvbiA9IChiWzhdIDw8IDI0KSAgfCAoYls5XSA8PCAxNikgIHwgKGJbMTBdIDw8IDgpIHwgYlsxMV07Ci0JKmZ3dHlwZSAgICAgPSAoYlsxMl0gPDwgMjQpIHwgKGJbMTNdIDw8IDE2KSB8IChiWzE0XSA8PCA4KSB8IGJbMTVdOworCWlmIChod3ZlcnNpb24gIT0gTlVMTCkKKwkJKmh3dmVyc2lvbiAgPSAoYlswXSA8PCAyNCkgIHwgKGJbMV0gPDwgMTYpICB8IChiWzJdIDw8IDgpICB8IGJbM107CisJaWYgKHJvbXZlcnNpb24gIT0gTlVMTCkKKwkJKnJvbXZlcnNpb24gPSAoYls0XSA8PCAyNCkgIHwgKGJbNV0gPDwgMTYpICB8IChiWzZdIDw8IDgpICB8IGJbN107CisJaWYgKHJhbXZlcnNpb24gIT0gTlVMTCkKKwkJKnJhbXZlcnNpb24gPSAoYls4XSA8PCAyNCkgIHwgKGJbOV0gPDwgMTYpICB8IChiWzEwXSA8PCA4KSB8IGJbMTFdOworCWlmIChmd3R5cGUgIT0gTlVMTCkKKwkJKmZ3dHlwZSAgICAgPSAoYlsxMl0gPDwgMjQpIHwgKGJbMTNdIDw8IDE2KSB8IChiWzE0XSA8PCA4KSB8IGJbMTVdOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk3LDYgKzEwOSwyNyBAQAogCXJldHVybiBkaWIwNzAwX2N0cmxfd3IoZCxidWYsMyk7CiB9CiAKK3N0YXRpYyBpbnQgZGliMDcwMF9zZXRfdXNiX3hmZXJfbGVuKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IG5iX3RzX3BhY2tldHMpCit7CisgICAgc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKyAgICB1OCBiWzNdOworICAgIGludCByZXQ7CisKKyAgICBpZiAoc3QtPmZ3X3ZlcnNpb24gPj0gMHgxMDIwMSkgeworCWJbMF0gPSBSRVFVRVNUX1NFVF9VU0JfWEZFUl9MRU47CisJYlsxXSA9IChuYl90c19wYWNrZXRzID4+IDgpJjB4ZmY7CisJYlsyXSA9IG5iX3RzX3BhY2tldHMgJiAweGZmOworCisJZGViX2luZm8oInNldCB0aGUgVVNCIHhmZXIgbGVuIHRvICVpIFRzIHBhY2tldFxuIiwgbmJfdHNfcGFja2V0cyk7CisKKwlyZXQgPSBkaWIwNzAwX2N0cmxfd3IoZCwgYiwgMyk7CisgICAgfSBlbHNlIHsKKwlkZWJfaW5mbygidGhpcyBmaXJtd2FyZSBkb2VzIG5vdCBhbGxvdyB0byBjaGFuZ2UgdGhlIFVTQiB4ZmVyIGxlblxuIik7CisJcmV0ID0gLUVJTzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKwogLyoKICAqIEkyQyBtYXN0ZXIgeGZlciBmdW5jdGlvbiAoc3VwcG9ydGVkIGluIDEuMjAgZmlybXdhcmUpCiAgKi8KQEAgLTMyOCw3ICszNjEsOSBAQAogaW50IGRpYjA3MDBfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7CiAJc3RydWN0IGhleGxpbmUgaHg7Ci0JaW50IHBvcyA9IDAsIHJldCwgYWN0X2xlbjsKKwlpbnQgcG9zID0gMCwgcmV0LCBhY3RfbGVuLCBpLCBhZGFwX251bTsKKwl1OCBiWzE2XTsKKwl1MzIgZndfdmVyc2lvbjsKIAogCXU4IGJ1ZlsyNjBdOwogCkBAIC0zNjQsNiArMzk5LDM0IEBACiAJfSBlbHNlCiAJCXJldCA9IC1FSU87CiAKKwkvKiB0aGUgbnVtYmVyIG9mIHRzIHBhY2tldCBoYXMgdG8gYmUgYXQgbGVhc3QgMSAqLworCWlmIChuYl9wYWNrZXRfYnVmZmVyX3NpemUgPCAxKQorCQluYl9wYWNrZXRfYnVmZmVyX3NpemUgPSAxOworCisJLyogZ2V0IHRoZSBmaW13YXJlIHZlcnNpb24gKi8KKwl1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCSAgUkVRVUVTVF9HRVRfVkVSU0lPTiwKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sIDAsIDAsCisJCQkJICBiLCBzaXplb2YoYiksIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlmd192ZXJzaW9uID0gKGJbOF0gPDwgMjQpICB8IChiWzldIDw8IDE2KSAgfCAoYlsxMF0gPDwgOCkgfCBiWzExXTsKKworCS8qIHNldCB0aGUgYnVmZmVyIHNpemUgLSBEVkItVVNCIGlzIGFsbG9jYXRpbmcgVVJCIGJ1ZmZlcnMKKwkgKiBvbmx5IGFmdGVyIHRoZSBmaXJ3bWFyZSBkb3dubG9hZCB3YXMgc3VjY2Vzc2Z1bCAqLworCWZvciAoaSA9IDA7IGkgPCBkaWIwNzAwX2RldmljZV9jb3VudDsgaSsrKSB7CisJCWZvciAoYWRhcF9udW0gPSAwOyBhZGFwX251bSA8IGRpYjA3MDBfZGV2aWNlc1tpXS5udW1fYWRhcHRlcnM7CisJCQkJYWRhcF9udW0rKykgeworCQkJaWYgKGZ3X3ZlcnNpb24gPj0gMHgxMDIwMSkKKwkJCQlkaWIwNzAwX2RldmljZXNbaV0uYWRhcHRlclthZGFwX251bV0uc3RyZWFtLnUuYnVsay5idWZmZXJzaXplID0gMTg4Km5iX3BhY2tldF9idWZmZXJfc2l6ZTsKKwkJCWVsc2UgeworCQkJCS8qIGZvciBmdyB2ZXJzaW9uIG9sZGVyIHRoYW4gMS4yMC4xLAorCQkJCSAqIHRoZSBidWZmZXJzaXplIGhhcyB0byBiZSBuIHRpbWVzIDUxMiAqLworCQkJCWRpYjA3MDBfZGV2aWNlc1tpXS5hZGFwdGVyW2FkYXBfbnVtXS5zdHJlYW0udS5idWxrLmJ1ZmZlcnNpemUgPSAoKDE4OCpuYl9wYWNrZXRfYnVmZmVyX3NpemUrMTg4LzIpLzUxMikqNTEyOworCQkJCWlmIChkaWIwNzAwX2RldmljZXNbaV0uYWRhcHRlclthZGFwX251bV0uc3RyZWFtLnUuYnVsay5idWZmZXJzaXplIDwgNTEyKQorCQkJCQlkaWIwNzAwX2RldmljZXNbaV0uYWRhcHRlclthZGFwX251bV0uc3RyZWFtLnUuYnVsay5idWZmZXJzaXplID0gNTEyOworCQkJfQorCQl9CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzcxLDYgKzQzNCwxOCBAQAogewogCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKIAl1OCBiWzRdOworCWludCByZXQ7CisKKwlpZiAoKG9ub2ZmICE9IDApICYmIChzdC0+ZndfdmVyc2lvbiA+PSAweDEwMjAxKSkgeworCQkvKiBmb3IgZmlybXdhcmUgbGF0ZXIgdGhhbiAxLjIwLjEsCisJCSAqIHRoZSBVU0IgeGZlciBsZW5ndGggY2FuIGJlIHNldCAgKi8KKwkJcmV0ID0gZGliMDcwMF9zZXRfdXNiX3hmZXJfbGVuKGFkYXAtPmRldiwKKwkJCXN0LT5uYl9wYWNrZXRfYnVmZmVyX3NpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGViX2luZm8oImNhbiBub3Qgc2V0IHRoZSBVU0IgeGZlciBsZW5cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KIAogCWJbMF0gPSBSRVFVRVNUX0VOQUJMRV9WSURFTzsKIAliWzFdID0gKG9ub2ZmIDw8IDQpIHwgMHgwMDsgLyogdGhpcyBiaXQgZ2l2ZXMgYSBraW5kIG9mIGNvbW1hbmQsIHJhdGhlciB0aGFuIGVuYWJsaW5nIHNvbWV0aGluZyBvciBub3QgKi8KQEAgLTQxNSw5ICs0OTAsMjEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBkaWIwNzAwX2RldmljZV9jb3VudDsgaSsrKQogCQlpZiAoZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZGliMDcwMF9kZXZpY2VzW2ldLCBUSElTX01PRFVMRSwKLQkJCQkJJmRldiwgYWRhcHRlcl9ucikgPT0gMCkKLQkJeworCQkgICAgJmRldiwgYWRhcHRlcl9ucikgPT0gMCkgeworCQkJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZGV2LT5wcml2OworCQkJdTMyIGh3dmVyc2lvbiwgcm9tdmVyc2lvbiwgZndfdmVyc2lvbiwgZnd0eXBlOworCisJCQlkaWIwNzAwX2dldF92ZXJzaW9uKGRldiwgJmh3dmVyc2lvbiwgJnJvbXZlcnNpb24sCisJCQkJJmZ3X3ZlcnNpb24sICZmd3R5cGUpOworCisJCQlkZWJfaW5mbygiRmlybXdhcmUgdmVyc2lvbjogJXgsICVkLCAweCV4LCAlZFxuIiwKKwkJCQlod3ZlcnNpb24sIHJvbXZlcnNpb24sIGZ3X3ZlcnNpb24sIGZ3dHlwZSk7CisKKwkJCXN0LT5md192ZXJzaW9uID0gZndfdmVyc2lvbjsKKwkJCXN0LT5uYl9wYWNrZXRfYnVmZmVyX3NpemUgPSAodTMyKW5iX3BhY2tldF9idWZmZXJfc2l6ZTsKKwogCQkJZGliMDcwMF9yY19zZXR1cChkZXYpOworCiAJCQlyZXR1cm4gMDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA2ODQxNDZmLi40NDk3MmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJ4YzUwMDAuaCIKICNpbmNsdWRlICJzNWgxNDExLmgiCiAjaW5jbHVkZSAiZGliMDA3MC5oIgorI2luY2x1ZGUgImRpYjAwOTAuaCIKICNpbmNsdWRlICJsZ2R0MzMwNS5oIgogI2luY2x1ZGUgIm14bDUwMDd0LmgiCiAKQEAgLTEzMCw5MyArMTMxLDk1IEBACiAvKiBNVDIyNnggKi8KIHN0YXRpYyBzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIHN0azc3MDBkXzcwMDBwX210MjI2Nl9hZ2NfY29uZmlnWzJdID0gewogCXsKLQkJQkFORF9VSEYsIC8vIGJhbmRfY2FwcworCQlCQU5EX1VIRiwKIAogCQkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLCBQX2FnY19mcmVxX3B3bV9kaXY9MSwgUF9hZ2NfaW52X3B3bTE9MSwgUF9hZ2NfaW52X3B3bTI9MSwKIAkJKiBQX2FnY19pbmhfZGNfcnZfZXN0PTAsIFBfYWdjX3RpbWVfZXN0PTMsIFBfYWdjX2ZyZWV6ZT0wLCBQX2FnY19uYl9lc3Q9MiwgUF9hZ2Nfd3JpdGU9MCAqLwotCQkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgKDMgPDwgNSkgfCAoMCA8PCA0KSB8ICg1IDw8IDEpIHwgKDAgPDwgMCksIC8vIHNldHVwCisJCSgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICgxIDw8IDExKSB8ICgxIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkKKwkgICAgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDUgPDwgMSkgfCAoMCA8PCAwKSwKIAotCQkxMTMwLCAgLy8gaW52X2dhaW4KLQkJMjEsICAvLyB0aW1lX3N0YWJpbGl6CisJCTExMzAsCisJCTIxLAogCi0JCTAsICAvLyBhbHBoYV9sZXZlbAotCQkxMTgsICAvLyB0aGxvY2sKKwkJMCwKKwkJMTE4LAogCi0JCTAsICAgICAvLyB3YmRfaW52Ci0JCTM1MzAsICAvLyB3YmRfcmVmCi0JCTEsICAgICAvLyB3YmRfc2VsCi0JCTAsICAgICAvLyB3YmRfYWxwaGEKKwkJMCwKKwkJMzUzMCwKKwkJMSwKKwkJMCwKIAotCQk2NTUzNSwgIC8vIGFnYzFfbWF4Ci0JCTMzNzcwLCAgLy8gYWdjMV9taW4KLQkJNjU1MzUsICAvLyBhZ2MyX21heAotCQkyMzU5MiwgIC8vIGFnYzJfbWluCisJCTY1NTM1LAorCQkzMzc3MCwKKwkJNjU1MzUsCisJCTIzNTkyLAogCi0JCTAsICAgIC8vIGFnYzFfcHQxCi0JCTYyLCAgIC8vIGFnYzFfcHQyCi0JCTI1NSwgIC8vIGFnYzFfcHQzCi0JCTY0LCAgIC8vIGFnYzFfc2xvcGUxCi0JCTY0LCAgIC8vIGFnYzFfc2xvcGUyCi0JCTEzMiwgIC8vIGFnYzJfcHQxCi0JCTE5MiwgIC8vIGFnYzJfcHQyCi0JCTgwLCAgIC8vIGFnYzJfc2xvcGUxCi0JCTgwLCAgIC8vIGFnYzJfc2xvcGUyCisJCTAsCisJCTYyLAorCQkyNTUsCisJCTY0LAorCQk2NCwKKwkJMTMyLAorCQkxOTIsCisJCTgwLAorCQk4MCwKIAotCQkxNywgIC8vIGFscGhhX21hbnQKLQkJMjcsICAvLyBhbHBoYV9leHAKLQkJMjMsICAvLyBiZXRhX21hbnQKLQkJNTEsICAvLyBiZXRhX2V4cAorCQkxNywKKwkJMjcsCisJCTIzLAorCQk1MSwKIAotCQkxLCAgLy8gcGVyZm9ybV9hZ2Nfc29mdHNwbGl0CisJCTEsCiAJfSwgewotCQlCQU5EX1ZIRiB8IEJBTkRfTEJBTkQsIC8vIGJhbmRfY2FwcworCQlCQU5EX1ZIRiB8IEJBTkRfTEJBTkQsCiAKIAkJLyogUF9hZ2NfdXNlX3NkX21vZDE9MCwgUF9hZ2NfdXNlX3NkX21vZDI9MCwgUF9hZ2NfZnJlcV9wd21fZGl2PTEsIFBfYWdjX2ludl9wd20xPTEsIFBfYWdjX2ludl9wd20yPTEsCiAJCSogUF9hZ2NfaW5oX2RjX3J2X2VzdD0wLCBQX2FnY190aW1lX2VzdD0zLCBQX2FnY19mcmVlemU9MCwgUF9hZ2NfbmJfZXN0PTIsIFBfYWdjX3dyaXRlPTAgKi8KLQkJKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDEgPDwgMTEpIHwgKDEgPDwgMTApIHwgKDEgPDwgOSkgfCAoMCA8PCA4KSB8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoMiA8PCAxKSB8ICgwIDw8IDApLCAvLyBzZXR1cAorCQkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpCisJICAgIHwgKDMgPDwgNSkgfCAoMCA8PCA0KSB8ICgyIDw8IDEpIHwgKDAgPDwgMCksCiAKLQkJMjM3MiwgLy8gaW52X2dhaW4KLQkJMjEsICAgLy8gdGltZV9zdGFiaWxpegorCQkyMzcyLAorCQkyMSwKIAotCQkwLCAgICAvLyBhbHBoYV9sZXZlbAotCQkxMTgsICAvLyB0aGxvY2sKKwkJMCwKKwkJMTE4LAogCi0JCTAsICAgIC8vIHdiZF9pbnYKLQkJMzUzMCwgLy8gd2JkX3JlZgotCQkxLCAgICAgLy8gd2JkX3NlbAotCQkwLCAgICAvLyB3YmRfYWxwaGEKKwkJMCwKKwkJMzUzMCwKKwkJMSwKKwkJMCwKIAotCQk2NTUzNSwgLy8gYWdjMV9tYXgKLQkJMCwgICAgIC8vIGFnYzFfbWluCi0JCTY1NTM1LCAvLyBhZ2MyX21heAotCQkyMzU5MiwgLy8gYWdjMl9taW4KKwkJNjU1MzUsCisJCTAsCisJCTY1NTM1LAorCQkyMzU5MiwKIAotCQkwLCAgICAvLyBhZ2MxX3B0MQotCQkxMjgsICAvLyBhZ2MxX3B0MgotCQkxMjgsICAvLyBhZ2MxX3B0MwotCQkxMjgsICAvLyBhZ2MxX3Nsb3BlMQotCQkwLCAgICAvLyBhZ2MxX3Nsb3BlMgotCQkxMjgsICAvLyBhZ2MyX3B0MQotCQkyNTMsICAvLyBhZ2MyX3B0MgotCQk4MSwgICAvLyBhZ2MyX3Nsb3BlMQotCQkwLCAgICAvLyBhZ2MyX3Nsb3BlMgorCQkwLAorCQkxMjgsCisJCTEyOCwKKwkJMTI4LAorCQkwLAorCQkxMjgsCisJCTI1MywKKwkJODEsCisJCTAsCiAKLQkJMTcsICAvLyBhbHBoYV9tYW50Ci0JCTI3LCAgLy8gYWxwaGFfZXhwCi0JCTIzLCAgLy8gYmV0YV9tYW50Ci0JCTUxLCAgLy8gYmV0YV9leHAKKwkJMTcsCisJCTI3LAorCQkyMywKKwkJNTEsCiAKLQkJMSwgIC8vIHBlcmZvcm1fYWdjX3NvZnRzcGxpdAorCQkxLAogCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnIHN0azc3MDBkX210MjI2Nl9wbGxfY29uZmlnID0gewotCTYwMDAwLCAzMDAwMCwgLy8gaW50ZXJuYWwsIHNhbXBsaW5nCi0JMSwgOCwgMywgMSwgMCwgLy8gcGxsX2NmZzogcHJlZGl2LCByYXRpbywgcmFuZ2UsIHJlc2V0LCBieXBhc3MKLQkwLCAwLCAxLCAxLCAyLCAvLyBtaXNjOiByZWZkaXYsIGJ5cGNsa19kaXYsIElPX0NMS19lbl9jb3JlLCBBRENsa1NyYywgbW9kdWxvCi0JKDMgPDwgMTQpIHwgKDEgPDwgMTIpIHwgKDUyNCA8PCAwKSwgLy8gc2FkX2NmZzogcmVmc2VsLCBzZWwsIGZyZXFfMTVrCi0JMCwgLy8gaWZyZXEKLQkyMDQ1MjIyNSwgLy8gdGltZgorCTYwMDAwLCAzMDAwMCwKKwkxLCA4LCAzLCAxLCAwLAorCTAsIDAsIDEsIDEsIDIsCisJKDMgPDwgMTQpIHwgKDEgPDwgMTIpIHwgKDUyNCA8PCAwKSwKKwkwLAorCTIwNDUyMjI1LAogfTsKIAogc3RhdGljIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgc3RrNzcwMGRfZGliNzAwMHBfbXQyMjY2X2NvbmZpZ1tdID0gewpAQCAtNjA1LDE3ICs2MDgsMTcgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpZiAoYWN0bGVuICE9IHNpemVvZihidWYpKSB7Ci0JCQkvKiBXZSBkaWRuJ3QgZ2V0IGJhY2sgdGhlIDYgYnl0ZSBtZXNzYWdlIHdlIGV4cGVjdGVkICovCi0JCQllcnIoIlVuZXhwZWN0ZWQgUkMgcmVzcG9uc2Ugc2l6ZSBbJWRdIiwgYWN0bGVuKTsKLQkJCXJldHVybiAtMTsKLQkJfQorCWlmIChhY3RsZW4gIT0gc2l6ZW9mKGJ1ZikpIHsKKwkJLyogV2UgZGlkbid0IGdldCBiYWNrIHRoZSA2IGJ5dGUgbWVzc2FnZSB3ZSBleHBlY3RlZCAqLworCQllcnIoIlVuZXhwZWN0ZWQgUkMgcmVzcG9uc2Ugc2l6ZSBbJWRdIiwgYWN0bGVuKTsKKwkJcmV0dXJuIC0xOworCX0KIAotCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07Ci0JCXBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9IGJ1ZlsxXTsKKwlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07CisJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOwogCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOwotCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07Ci0JCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKKwlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07CisJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOwogCiAJCWJyZWFrOwogCX0KQEAgLTYzMiw3ICs2MzUsNyBAQAogCS8qIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwICovCiAJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CiAJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IChwb2xsX3JlcGx5LnN5c3RlbSAmIDB4ZmYpICYmCi0JCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBwb2xsX3JlcGx5LmRhdGEpIHsKKwkJCXJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgewogCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CkBAIC02NDEsOCArNjQ0LDggQEAKIAogCWlmIChmb3VuZCA9PSAwKSB7CiAJCWVycigiVW5rbm93biByZW1vdGUgY29udHJvbGxlciBrZXk6ICUwNHggJTAyeCAlMDJ4IiwKLQkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAotCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJCXBvbGxfcmVwbHkuc3lzdGVtLAorCQkJcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKIAkJZC0+bGFzdF9ldmVudCA9IDA7CiAJCXJldHVybiAwOwogCX0KQEAgLTkzMyw0NyArOTM2LDQ4IEBACiAKIC8qIFNUSzc3MDBQOiBIYXVwcGF1Z2UgTm92YS1UIFN0aWNrLCBBVmVyTWVkaWEgVm9sYXIgKi8KIHN0YXRpYyBzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIHN0azc3MDBwXzcwMDBtX210MjA2MF9hZ2NfY29uZmlnID0gewotCUJBTkRfVUhGIHwgQkFORF9WSEYsICAgICAgIC8vIGJhbmRfY2FwcworCUJBTkRfVUhGIHwgQkFORF9WSEYsCiAKIAkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLCBQX2FnY19mcmVxX3B3bV9kaXY9NSwgUF9hZ2NfaW52X3B3bTE9MCwgUF9hZ2NfaW52X3B3bTI9MCwKIAkgKiBQX2FnY19pbmhfZGNfcnZfZXN0PTAsIFBfYWdjX3RpbWVfZXN0PTMsIFBfYWdjX2ZyZWV6ZT0wLCBQX2FnY19uYl9lc3Q9MiwgUF9hZ2Nfd3JpdGU9MCAqLwotCSgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICg1IDw8IDExKSB8ICgwIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDAgPDwgOCkgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDIgPDwgMSkgfCAoMCA8PCAwKSwgLy8gc2V0dXAKKwkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoNSA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMCA8PCA5KSB8ICgwIDw8IDgpCisJfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDIgPDwgMSkgfCAoMCA8PCAwKSwKIAotCTcxMiwgIC8vIGludl9nYWluCi0JNDEsICAvLyB0aW1lX3N0YWJpbGl6CisJNzEyLAorCTQxLAogCi0JMCwgIC8vIGFscGhhX2xldmVsCi0JMTE4LCAgLy8gdGhsb2NrCisJMCwKKwkxMTgsCiAKLQkwLCAgICAgLy8gd2JkX2ludgotCTQwOTUsICAvLyB3YmRfcmVmCi0JMCwgICAgIC8vIHdiZF9zZWwKLQkwLCAgICAgLy8gd2JkX2FscGhhCisJMCwKKwk0MDk1LAorCTAsCisJMCwKIAotCTQyNTk4LCAgLy8gYWdjMV9tYXgKLQkxNzY5NCwgIC8vIGFnYzFfbWluCi0JNDU4NzUsICAvLyBhZ2MyX21heAotCTI2MjEsICAvLyBhZ2MyX21pbgotCTAsICAvLyBhZ2MxX3B0MQotCTc2LCAgLy8gYWdjMV9wdDIKLQkxMzksICAvLyBhZ2MxX3B0MwotCTUyLCAgLy8gYWdjMV9zbG9wZTEKLQk1OSwgIC8vIGFnYzFfc2xvcGUyCi0JMTA3LCAgLy8gYWdjMl9wdDEKLQkxNzIsICAvLyBhZ2MyX3B0MgotCTU3LCAgLy8gYWdjMl9zbG9wZTEKLQk3MCwgIC8vIGFnYzJfc2xvcGUyCisJNDI1OTgsCisJMTc2OTQsCisJNDU4NzUsCisJMjYyMSwKKwkwLAorCTc2LAorCTEzOSwKKwk1MiwKKwk1OSwKKwkxMDcsCisJMTcyLAorCTU3LAorCTcwLAogCi0JMjEsICAvLyBhbHBoYV9tYW50Ci0JMjUsICAvLyBhbHBoYV9leHAKLQkyOCwgIC8vIGJldGFfbWFudAotCTQ4LCAgLy8gYmV0YV9leHAKKwkyMSwKKwkyNSwKKwkyOCwKKwk0OCwKIAotCTEsICAvLyBwZXJmb3JtX2FnY19zb2Z0c3BsaXQKLQl7ICAwLCAgICAgLy8gc3BsaXRfbWluCi0JICAgMTA3LCAgIC8vIHNwbGl0X21heAotCSAgIDUxODAwLCAvLyBnbG9iYWxfc3BsaXRfbWluCi0JICAgMjQ3MDAgIC8vIGdsb2JhbF9zcGxpdF9tYXgKKwkxLAorCXsgIDAsCisJICAgMTA3LAorCSAgIDUxODAwLAorCSAgIDI0NzAwCiAJfSwKIH07CiAKQEAgLTk4Miw1NCArOTg2LDU1IEBACiAKIAkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLCBQX2FnY19mcmVxX3B3bV9kaXY9NSwgUF9hZ2NfaW52X3B3bTE9MCwgUF9hZ2NfaW52X3B3bTI9MCwKIAkgKiBQX2FnY19pbmhfZGNfcnZfZXN0PTAsIFBfYWdjX3RpbWVfZXN0PTMsIFBfYWdjX2ZyZWV6ZT0wLCBQX2FnY19uYl9lc3Q9MiwgUF9hZ2Nfd3JpdGU9MCAqLwotCSgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICg1IDw8IDExKSB8ICgwIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDAgPDwgOCkgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDIgPDwgMSkgfCAoMCA8PCAwKSwgLy8gc2V0dXAKKwkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoNSA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMCA8PCA5KSB8ICgwIDw8IDgpCisJfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDIgPDwgMSkgfCAoMCA8PCAwKSwKIAotCTcxMiwgLy8gaW52X2dhaW4KLQk0MSwgIC8vIHRpbWVfc3RhYmlsaXoKKwk3MTIsCisJNDEsCiAKLQkwLCAgIC8vIGFscGhhX2xldmVsCi0JMTE4LCAvLyB0aGxvY2sKKwkwLAorCTExOCwKIAotCTAsICAgIC8vIHdiZF9pbnYKLQk0MDk1LCAvLyB3YmRfcmVmCi0JMCwgICAgLy8gd2JkX3NlbAotCTAsICAgIC8vIHdiZF9hbHBoYQorCTAsCisJNDA5NSwKKwkwLAorCTAsCiAKLQk0MjU5OCwgLy8gYWdjMV9tYXgKLQkxNjM4NCwgLy8gYWdjMV9taW4KLQk0MjU5OCwgLy8gYWdjMl9tYXgKLQkgICAgMCwgLy8gYWdjMl9taW4KKwk0MjU5OCwKKwkxNjM4NCwKKwk0MjU5OCwKKwkgICAgMCwKIAotCSAgMCwgICAvLyBhZ2MxX3B0MQotCTEzNywgICAvLyBhZ2MxX3B0MgotCTI1NSwgICAvLyBhZ2MxX3B0MworCSAgMCwKKwkxMzcsCisJMjU1LAogCi0JICAwLCAgIC8vIGFnYzFfc2xvcGUxCi0JMjU1LCAgIC8vIGFnYzFfc2xvcGUyCisJICAwLAorCTI1NSwKIAotCTAsICAgICAvLyBhZ2MyX3B0MQotCTAsICAgICAvLyBhZ2MyX3B0MgorCTAsCisJMCwKIAotCSAwLCAgICAvLyBhZ2MyX3Nsb3BlMQotCTQxLCAgICAvLyBhZ2MyX3Nsb3BlMgorCSAwLAorCTQxLAogCi0JMTUsIC8vIGFscGhhX21hbnQKLQkyNSwgLy8gYWxwaGFfZXhwCisJMTUsCisJMjUsCiAKLQkyOCwgLy8gYmV0YV9tYW50Ci0JNDgsIC8vIGJldGFfZXhwCisJMjgsCisJNDgsCiAKLQkwLCAvLyBwZXJmb3JtX2FnY19zb2Z0c3BsaXQKKwkwLAogfTsKIAogc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgc3RrNzcwMHBfcGxsX2NvbmZpZyA9IHsKLQk2MDAwMCwgMzAwMDAsIC8vIGludGVybmFsLCBzYW1wbGluZwotCTEsIDgsIDMsIDEsIDAsIC8vIHBsbF9jZmc6IHByZWRpdiwgcmF0aW8sIHJhbmdlLCByZXNldCwgYnlwYXNzCi0JMCwgMCwgMSwgMSwgMCwgLy8gbWlzYzogcmVmZGl2LCBieXBjbGtfZGl2LCBJT19DTEtfZW5fY29yZSwgQURDbGtTcmMsIG1vZHVsbwotCSgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCksIC8vIHNhZF9jZmc6IHJlZnNlbCwgc2VsLCBmcmVxXzE1awotCTYwMjU4MTY3LCAvLyBpZnJlcQotCTIwNDUyMjI1LCAvLyB0aW1mCi0JMzAwMDAwMDAsIC8vIHh0YWwKKwk2MDAwMCwgMzAwMDAsCisJMSwgOCwgMywgMSwgMCwKKwkwLCAwLCAxLCAxLCAwLAorCSgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCksCisJNjAyNTgxNjcsCisJMjA0NTIyMjUsCisJMzAwMDAwMDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyBzdGs3NzAwcF9kaWI3MDAwbV9jb25maWcgPSB7CkBAIC0xMTE1LDQxICsxMTIwLDQyIEBACiAJQkFORF9VSEYgfCBCQU5EX1ZIRiB8IEJBTkRfTEJBTkQgfCBCQU5EX1NCQU5ELAogCS8qIFBfYWdjX3VzZV9zZF9tb2QxPTAsIFBfYWdjX3VzZV9zZF9tb2QyPTAsIFBfYWdjX2ZyZXFfcHdtX2Rpdj01LCBQX2FnY19pbnZfcHdtMT0wLCBQX2FnY19pbnZfcHdtMj0wLAogCSAqIFBfYWdjX2luaF9kY19ydl9lc3Q9MCwgUF9hZ2NfdGltZV9lc3Q9MywgUF9hZ2NfZnJlZXplPTAsIFBfYWdjX25iX2VzdD01LCBQX2FnY193cml0ZT0wICovCi0JKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDUgPDwgMTEpIHwgKDAgPDwgMTApIHwgKDAgPDwgOSkgfCAoMCA8PCA4KSB8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoNSA8PCAxKSB8ICgwIDw8IDApLCAvLyBzZXR1cAorCSgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICg1IDw8IDExKSB8ICgwIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDAgPDwgOCkKKwl8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoNSA8PCAxKSB8ICgwIDw8IDApLAogCi0JNjAwLCAvLyBpbnZfZ2FpbgotCTEwLCAgLy8gdGltZV9zdGFiaWxpegorCTYwMCwKKwkxMCwKIAotCTAsICAvLyBhbHBoYV9sZXZlbAotCTExOCwgIC8vIHRobG9jaworCTAsCisJMTE4LAogCi0JMCwgICAgIC8vIHdiZF9pbnYKLQkzNTMwLCAgLy8gd2JkX3JlZgotCTEsICAgICAvLyB3YmRfc2VsCi0JNSwgICAgIC8vIHdiZF9hbHBoYQorCTAsCisJMzUzMCwKKwkxLAorCTUsCiAKLQk2NTUzNSwgIC8vIGFnYzFfbWF4Ci0JCTAsICAvLyBhZ2MxX21pbgorCTY1NTM1LAorCQkwLAogCi0JNjU1MzUsICAvLyBhZ2MyX21heAotCTAsICAgICAgLy8gYWdjMl9taW4KKwk2NTUzNSwKKwkwLAogCi0JMCwgICAgICAvLyBhZ2MxX3B0MQotCTQwLCAgICAgLy8gYWdjMV9wdDIKLQkxODMsICAgIC8vIGFnYzFfcHQzCi0JMjA2LCAgICAvLyBhZ2MxX3Nsb3BlMQotCTI1NSwgICAgLy8gYWdjMV9zbG9wZTIKLQk3MiwgICAgIC8vIGFnYzJfcHQxCi0JMTUyLCAgICAvLyBhZ2MyX3B0MgotCTg4LCAgICAgLy8gYWdjMl9zbG9wZTEKLQk5MCwgICAgIC8vIGFnYzJfc2xvcGUyCisJMCwKKwk0MCwKKwkxODMsCisJMjA2LAorCTI1NSwKKwk3MiwKKwkxNTIsCisJODgsCisJOTAsCiAKLQkxNywgIC8vIGFscGhhX21hbnQKLQkyNywgIC8vIGFscGhhX2V4cAotCTIzLCAgLy8gYmV0YV9tYW50Ci0JNTEsICAvLyBiZXRhX2V4cAorCTE3LAorCTI3LAorCTIzLAorCTUxLAogCi0JMCwgIC8vIHBlcmZvcm1fYWdjX3NvZnRzcGxpdAorCTAsCiB9OwogCiBzdGF0aWMgaW50IGRpYjcwNzBfdHVuZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKQEAgLTEyNzYsMTMgKzEyODIsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgZGliNzA3MF9id19jb25maWdfMTJfbWh6ID0gewotCTYwMDAwLCAxNTAwMCwgLy8gaW50ZXJuYWwsIHNhbXBsaW5nCi0JMSwgMjAsIDMsIDEsIDAsIC8vIHBsbF9jZmc6IHByZWRpdiwgcmF0aW8sIHJhbmdlLCByZXNldCwgYnlwYXNzCi0JMCwgMCwgMSwgMSwgMiwgLy8gbWlzYzogcmVmZGl2LCBieXBjbGtfZGl2LCBJT19DTEtfZW5fY29yZSwgQURDbGtTcmMsIG1vZHVsbwotCSgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCksIC8vIHNhZF9jZmc6IHJlZnNlbCwgc2VsLCBmcmVxXzE1awotCSgwIDw8IDI1KSB8IDAsIC8vIGlmcmVxID0gMC4wMDAwMDAgTUh6Ci0JMjA0NTIyMjUsIC8vIHRpbWYKLQkxMjAwMDAwMCwgLy8geHRhbF9oegorCTYwMDAwLCAxNTAwMCwKKwkxLCAyMCwgMywgMSwgMCwKKwkwLCAwLCAxLCAxLCAyLAorCSgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCksCisJKDAgPDwgMjUpIHwgMCwKKwkyMDQ1MjIyNSwKKwkxMjAwMDAwMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGRpYjcwNzBwX2RpYjcwMDBwX2NvbmZpZyA9IHsKQEAgLTE0NzYsMTIgKzE0ODIsMTIgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IGRpYjgwN3hfdHVuZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgZGliODB4eF90dW5lcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQogewogCXJldHVybiBkaWI4MDAwX3NldF9ncGlvKGZlLCA1LCAwLCAhb25vZmYpOwogfQogCi1zdGF0aWMgaW50IGRpYjgwN3hfdHVuZXJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgZGliODB4eF90dW5lcl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQogewogCXJldHVybiBkaWI4MDAwX3NldF9ncGlvKGZlLCAwLCAwLCBvbm9mZik7CiB9CkBAIC0xNDk0LDggKzE1MDAsOCBAQAogc3RhdGljIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyBkaWI4MDd4X2RpYjAwNzBfY29uZmlnWzJdID0gewogCXsKIAkJLmkyY19hZGRyZXNzID0gREVGQVVMVF9ESUIwMDcwX0kyQ19BRERSRVNTLAotCQkucmVzZXQgPSBkaWI4MDd4X3R1bmVyX3Jlc2V0LAotCQkuc2xlZXAgPSBkaWI4MDd4X3R1bmVyX3NsZWVwLAorCQkucmVzZXQgPSBkaWI4MHh4X3R1bmVyX3Jlc2V0LAorCQkuc2xlZXAgPSBkaWI4MHh4X3R1bmVyX3NsZWVwLAogCQkuY2xvY2tfa2h6ID0gMTIwMDAsCiAJCS5jbG9ja19wYWRfZHJpdmUgPSA0LAogCQkudmdhX2ZpbHRlciA9IDEsCkBAIC0xNTA4LDggKzE1MTQsOCBAQAogCQkuZnJlcV9vZmZzZXRfa2h6X3ZoZiA9IC0xMDAsCiAJfSwgewogCQkuaTJjX2FkZHJlc3MgPSBERUZBVUxUX0RJQjAwNzBfSTJDX0FERFJFU1MsCi0JCS5yZXNldCA9IGRpYjgwN3hfdHVuZXJfcmVzZXQsCi0JCS5zbGVlcCA9IGRpYjgwN3hfdHVuZXJfc2xlZXAsCisJCS5yZXNldCA9IGRpYjgweHhfdHVuZXJfcmVzZXQsCisJCS5zbGVlcCA9IGRpYjgweHhfdHVuZXJfc2xlZXAsCiAJCS5jbG9ja19raHogPSAxMjAwMCwKIAkJLmNsb2NrX3BhZF9kcml2ZSA9IDIsCiAJCS52Z2FfZmlsdGVyID0gMSwKQEAgLTE1NjYsMTIgKzE1NzIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdGs4MDd4X3BpZF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcHRlciwgaW50IGluZGV4LCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgaW50IHN0azgweHhfcGlkX2ZpbHRlcihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwdGVyLCBpbnQgaW5kZXgsCisJdTE2IHBpZCwgaW50IG9ub2ZmKQogewogICAgIHJldHVybiBkaWI4MDAwX3BpZF9maWx0ZXIoYWRhcHRlci0+ZmUsIGluZGV4LCBwaWQsIG9ub2ZmKTsKIH0KIAotc3RhdGljIGludCBzdGs4MDd4X3BpZF9maWx0ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwdGVyLCBpbnQgb25vZmYpCitzdGF0aWMgaW50IHN0azgweHhfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJaW50IG9ub2ZmKQogewogICAgIHJldHVybiBkaWI4MDAwX3BpZF9maWx0ZXJfY3RybChhZGFwdGVyLT5mZSwgb25vZmYpOwogfQpAQCAtMTYyNCw3ICsxNjMyLDcgQEAKIAlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKIAogCS8qIGluaXRpYWxpemUgSUMgMCAqLwotCWRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAweDEyLCAweDgwKTsKKwlkaWI4MDAwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMHgyMiwgMHg4MCk7CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliODAwMF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLAogCQkJICAgICAgJmRpYjgwN3hfZGliODAwMF9jb25maWdbMF0pOwpAQCAtMTYzNSw3ICsxNjQzLDcgQEAKIHN0YXRpYyBpbnQgc3RrODA3eHB2cl9mcm9udGVuZF9hdHRhY2gxKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJLyogaW5pdGlhbGl6ZSBJQyAxICovCi0JZGliODAwMF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDB4MjIsIDB4ODIpOworCWRpYjgwMDBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAweDEyLCAweDgyKTsKIAogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI4MDAwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODIsCiAJCQkgICAgICAmZGliODA3eF9kaWI4MDAwX2NvbmZpZ1sxXSk7CkBAIC0xNjQzLDYgKzE2NTEsMjQ1IEBACiAJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKIH0KIAorLyogU1RLODA5NkdQICovCitzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIGRpYjgwOTBfYWdjX2NvbmZpZ1syXSA9IHsKKyAgICB7CisJQkFORF9VSEYgfCBCQU5EX1ZIRiB8IEJBTkRfTEJBTkQgfCBCQU5EX1NCQU5ELAorCS8qIFBfYWdjX3VzZV9zZF9tb2QxPTAsIFBfYWdjX3VzZV9zZF9tb2QyPTAsIFBfYWdjX2ZyZXFfcHdtX2Rpdj0xLAorICAgICAqIFBfYWdjX2ludl9wd20xPTAsIFBfYWdjX2ludl9wd20yPTAsIFBfYWdjX2luaF9kY19ydl9lc3Q9MCwKKyAgICAgKiBQX2FnY190aW1lX2VzdD0zLCBQX2FnY19mcmVlemU9MCwgUF9hZ2NfbmJfZXN0PTUsIFBfYWdjX3dyaXRlPTAgKi8KKwkoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoNSA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMCA8PCA5KSB8ICgwIDw8IDgpCisJfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDUgPDwgMSkgfCAoMCA8PCAwKSwKKworCTc4NywKKwkxMCwKKworCTAsCisJMTE4LAorCisJMCwKKwkzNTMwLAorCTEsCisJNSwKKworCTY1NTM1LAorCTAsCisKKwk2NTUzNSwKKwkwLAorCisJMCwKKwkzMiwKKwkxMTQsCisJMTQzLAorCTE0NCwKKwkxMTQsCisJMjI3LAorCTExNiwKKwkxMTcsCisKKwkyOCwKKwkyNiwKKwkzMSwKKwk1MSwKKworCTAsCisgICAgfSwKKyAgICB7CisJQkFORF9DQkFORCwKKwkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLCBQX2FnY19mcmVxX3B3bV9kaXY9MSwKKyAgICAgKiBQX2FnY19pbnZfcHdtMT0wLCBQX2FnY19pbnZfcHdtMj0wLCBQX2FnY19pbmhfZGNfcnZfZXN0PTAsCisgICAgICogUF9hZ2NfdGltZV9lc3Q9MywgUF9hZ2NfZnJlZXplPTAsIFBfYWdjX25iX2VzdD01LCBQX2FnY193cml0ZT0wICovCisJKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDUgPDwgMTEpIHwgKDAgPDwgMTApIHwgKDAgPDwgOSkgfCAoMCA8PCA4KQorCXwgKDMgPDwgNSkgfCAoMCA8PCA0KSB8ICg1IDw8IDEpIHwgKDAgPDwgMCksCisKKwk3ODcsCisJMTAsCisKKwkwLAorCTExOCwKKworCTAsCisJMzUzMCwKKwkxLAorCTUsCisKKwkwLAorCTAsCisKKwk2NTUzNSwKKwkwLAorCisJMCwKKwkzMiwKKwkxMTQsCisJMTQzLAorCTE0NCwKKwkxMTQsCisJMjI3LAorCTExNiwKKwkxMTcsCisKKwkyOCwKKwkyNiwKKwkzMSwKKwk1MSwKKworCTAsCisgICAgfQorfTsKKworc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgZGliODA5MF9wbGxfY29uZmlnXzEybWh6ID0geworICAgIDU0MDAwLCAxMzUwMCwKKyAgICAxLCAxOCwgMywgMSwgMCwKKyAgICAwLCAwLCAxLCAxLCAyLAorICAgICgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1OTkgPDwgMCksCisgICAgKDAgPDwgMjUpIHwgMCwKKyAgICAyMDE5OTcyNywKKyAgICAxMjAwMDAwMCwKK307CisKK3N0YXRpYyBpbnQgZGliODA5MF9nZXRfYWRjX3Bvd2VyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworICAgIHJldHVybiBkaWI4MDAwX2dldF9hZGNfcG93ZXIoZmUsIDEpOworfQorCitzdGF0aWMgc3RydWN0IGRpYjgwMDBfY29uZmlnIGRpYjgwOXhfZGliODAwMF9jb25maWcgPSB7CisgICAgLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMgPSAxLAorCisgICAgLmFnY19jb25maWdfY291bnQgPSAyLAorICAgIC5hZ2MgPSBkaWI4MDkwX2FnY19jb25maWcsCisgICAgLmFnY19jb250cm9sID0gZGliMDA5MF9kY2NfZnJlcSwKKyAgICAucGxsID0gJmRpYjgwOTBfcGxsX2NvbmZpZ18xMm1oeiwKKyAgICAudHVuZXJfaXNfYmFzZWJhbmQgPSAxLAorCisgICAgLmdwaW9fZGlyID0gRElCODAwMF9HUElPX0RFRkFVTFRfRElSRUNUSU9OUywKKyAgICAuZ3Bpb192YWwgPSBESUI4MDAwX0dQSU9fREVGQVVMVF9WQUxVRVMsCisgICAgLmdwaW9fcHdtX3BvcyA9IERJQjgwMDBfR1BJT19ERUZBVUxUX1BXTV9QT1MsCisKKyAgICAuaG9zdGJ1c19kaXZlcnNpdHkgPSAxLAorICAgIC5kaXZfY2ZnID0gMHgzMSwKKyAgICAub3V0cHV0X21vZGUgPSBPVVRNT0RFX01QRUcyX0ZJRk8sCisgICAgLmRyaXZlcyA9IDB4MmQ5OCwKKyAgICAuZGl2ZXJzaXR5X2RlbGF5ID0gMTQ0LAorICAgIC5yZWZjbGtzZWwgPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCBkaWIwMDkwX2NvbmZpZyBkaWI4MDl4X2RpYjAwOTBfY29uZmlnID0geworICAgIC5pby5wbGxfYnlwYXNzID0gMSwKKyAgICAuaW8ucGxsX3JhbmdlID0gMSwKKyAgICAuaW8ucGxsX3ByZWRpdiA9IDEsCisgICAgLmlvLnBsbF9sb29wZGl2ID0gMjAsCisgICAgLmlvLmFkY19jbG9ja19yYXRpbyA9IDgsCisgICAgLmlvLnBsbF9pbnRfbG9vcF9maWx0ID0gMCwKKyAgICAuaW8uY2xvY2tfa2h6ID0gMTIwMDAsCisgICAgLnJlc2V0ID0gZGliODB4eF90dW5lcl9yZXNldCwKKyAgICAuc2xlZXAgPSBkaWI4MHh4X3R1bmVyX3NsZWVwLAorICAgIC5jbGtvdXR0b2JhbXNlID0gMSwKKyAgICAuYW5hbG9nX291dHB1dCA9IDEsCisgICAgLmkyY19hZGRyZXNzID0gREVGQVVMVF9ESUIwMDkwX0kyQ19BRERSRVNTLAorICAgIC53YmRfdmhmX29mZnNldCA9IDEwMCwKKyAgICAud2JkX2NiYW5kX29mZnNldCA9IDQ1MCwKKyAgICAudXNlX3B3bV9hZ2MgPSAxLAorICAgIC5jbGtvdXRkcml2ZSA9IDEsCisgICAgLmdldF9hZGNfcG93ZXIgPSBkaWI4MDkwX2dldF9hZGNfcG93ZXIsCisJLmZyZXFfb2Zmc2V0X2toel91aGYgPSAwLAorCS5mcmVxX29mZnNldF9raHpfdmhmID0gLTE0MywKK307CisKK3N0YXRpYyBpbnQgZGliODA5Nl9zZXRfcGFyYW1fb3ZlcnJpZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworICAgIHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworICAgIHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUgKnN0YXRlID0gYWRhcC0+cHJpdjsKKyAgICB1OCBiYW5kID0gQkFORF9PRl9GUkVRVUVOQ1koZmVwLT5mcmVxdWVuY3kvMTAwMCk7CisgICAgdTE2IG9mZnNldDsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZSA9IENUX1NIVVRET1dOOworICAgIHUxNiBsdGdhaW4sIHJmX2dhaW5fbGltaXQ7CisKKyAgICByZXQgPSBzdGF0ZS0+c2V0X3BhcmFtX3NhdmUoZmUsIGZlcCk7CisgICAgaWYgKHJldCA8IDApCisJcmV0dXJuIHJldDsKKworICAgIHN3aXRjaCAoYmFuZCkgeworICAgIGNhc2UgQkFORF9WSEY6CisJICAgIG9mZnNldCA9IDEwMDsKKwkgICAgYnJlYWs7CisgICAgY2FzZSBCQU5EX1VIRjoKKwkgICAgb2Zmc2V0ID0gNTUwOworCSAgICBicmVhazsKKyAgICBkZWZhdWx0OgorCSAgICBvZmZzZXQgPSAwOworCSAgICBicmVhazsKKyAgICB9CisgICAgb2Zmc2V0ICs9IChkaWIwMDkwX2dldF93YmRfb2Zmc2V0KGZlKSAqIDggKiAxOCAvIDMzICsgMSkgLyAyOworICAgIGRpYjgwMDBfc2V0X3diZF9yZWYoZmUsIG9mZnNldCk7CisKKworICAgIGlmIChiYW5kID09IEJBTkRfQ0JBTkQpIHsKKwlkZWJfaW5mbygidHVuaW5nIGluIENCQU5EIC0gc29mdC1BR0Mgc3RhcnR1cFxuIik7CisJLyogVE9ETyBzcGVjaWZpYyB3YmQgdGFyZ2V0IGZvciBkaWIwMDkwIC0gbmVlZGVkIGZvciBzdGFydHVwID8gKi8KKwlkaWIwMDkwX3NldF90dW5lX3N0YXRlKGZlLCBDVF9BR0NfU1RBUlQpOworCWRvIHsKKwkJcmV0ID0gZGliMDA5MF9nYWluX2NvbnRyb2woZmUpOworCQltc2xlZXAocmV0KTsKKwkJdHVuZV9zdGF0ZSA9IGRpYjAwOTBfZ2V0X3R1bmVfc3RhdGUoZmUpOworCQlpZiAodHVuZV9zdGF0ZSA9PSBDVF9BR0NfU1RFUF8wKQorCQkJZGliODAwMF9zZXRfZ3BpbyhmZSwgNiwgMCwgMSk7CisJCWVsc2UgaWYgKHR1bmVfc3RhdGUgPT0gQ1RfQUdDX1NURVBfMSkgeworCQkJZGliMDA5MF9nZXRfY3VycmVudF9nYWluKGZlLCBOVUxMLCBOVUxMLCAmcmZfZ2Fpbl9saW1pdCwgJmx0Z2Fpbik7CisJCQlpZiAocmZfZ2Fpbl9saW1pdCA9PSAwKQorCQkJCWRpYjgwMDBfc2V0X2dwaW8oZmUsIDYsIDAsIDApOworCQl9CisJfSB3aGlsZSAodHVuZV9zdGF0ZSA8IENUX0FHQ19TVE9QKTsKKwlkaWIwMDkwX3B3bV9nYWluX3Jlc2V0KGZlKTsKKwlkaWI4MDAwX3B3bV9hZ2NfcmVzZXQoZmUpOworCWRpYjgwMDBfc2V0X3R1bmVfc3RhdGUoZmUsIENUX0RFTU9EX1NUQVJUKTsKKyAgICB9IGVsc2UgeworCWRlYl9pbmZvKCJub3QgdHVuaW5nIGluIENCQU5EIC0gc3RhbmRhcmQgQUdDIHN0YXJ0dXBcbiIpOworCWRpYjAwOTBfcHdtX2dhaW5fcmVzZXQoZmUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjgwOXhfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisgICAgc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSAqc3QgPSBhZGFwLT5wcml2OworICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYyA9IGRpYjgwMDBfZ2V0X2kyY19tYXN0ZXIoYWRhcC0+ZmUsIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CisKKyAgICBpZiAoZHZiX2F0dGFjaChkaWIwMDkwX3JlZ2lzdGVyLCBhZGFwLT5mZSwgdHVuX2kyYywgJmRpYjgwOXhfZGliMDA5MF9jb25maWcpID09IE5VTEwpCisJcmV0dXJuIC1FTk9ERVY7CisKKyAgICBzdC0+c2V0X3BhcmFtX3NhdmUgPSBhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zOworICAgIGFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkaWI4MDk2X3NldF9wYXJhbV9vdmVycmlkZTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGs4MDl4X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU85LCBHUElPX09VVCwgMSk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU80LCBHUElPX09VVCwgMSk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU83LCBHUElPX09VVCwgMSk7CisKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMCk7CisKKwlkaWIwNzAwX2N0cmxfY2xvY2soYWRhcC0+ZGV2LCA3MiwgMSk7CisKKwltc2xlZXAoMTApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMTApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMCwgR1BJT19PVVQsIDEpOworCisJZGliODAwMF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LCAweDgwKTsKKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI4MDAwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsICZkaWI4MDl4X2RpYjgwMDBfY29uZmlnKTsKKworCXJldHVybiBhZGFwLT5mZSA9PSBOVUxMID8gIC1FTk9ERVYgOiAwOworfQogCiAvKiBTVEs3MDcwUEQgKi8KIHN0YXRpYyBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIHN0azcwNzBwZF9kaWI3MDAwcF9jb25maWdbMl0gPSB7CkBAIC0xOTI5LDE0ICsyMTc2LDE3IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwgICAgICBVU0JfUElEX1lVQU5fU1RLNzcwMEQpIH0sCiAvKiA1NSAqL3sgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sCVVTQl9QSURfWVVBTl9TVEs3NzAwRF8yKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLAlVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0EpIH0sCi0JeyBVU0JfREVWSUNFKFVTQl9WSURfUElOTkFDTEUsCVVTQl9QSURfUElOTkFDTEVfUENUVjczRVNFKSB9LAotCXsgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLAlVU0JfUElEX1BJTk5BQ0xFX1BDVFYyODJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BDVFYsCVVTQl9QSURfUElOTkFDTEVfUENUVjczRVNFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BDVFYsCVVTQl9QSURfUElOTkFDTEVfUENUVjI4MkUpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLAlVU0JfUElEX0RJQkNPTV9TVEs3NzcwUCkgfSwKIC8qIDYwICoveyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCVVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9UX1hYU18yKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLODA3WFBWUikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ESUJDT00sICAgIFVTQl9QSURfRElCQ09NX1NUSzgwN1hQKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1BJWEVMVklFVywgVVNCX1BJRF9QSVhFTFZJRVdfU0JUVkQpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfRVZPTFVURVBDLCBVU0JfUElEX1RWV0FZX1BMVVMpIH0sCisvKiA2NSAqL3sgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLAlVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0VTRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9QSU5OQUNMRSwJVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMjgyRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ESUJDT00sICAgIFVTQl9QSURfRElCQ09NX1NUSzgwOTZHUCkgfSwKIAl7IDAgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGliMDcwMF91c2JfaWRfdGFibGUpOwpAQCAtMjIzOCwxMSArMjQ4OCwxMSBAQAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiUGlubmFjbGUgUENUViA3M2UgU0UiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU3XSwgTlVMTCB9LAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU3XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzY1XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiUGlubmFjbGUgUENUViAyODJlIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1OF0sIE5VTEwgfSwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1OF0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVs2Nl0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCX0sCkBAIC0yNDcxLDggKzI3MjEsOCBAQAogCQkJewogCQkJCS5jYXBzICA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAogCQkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCi0JCQkJLnBpZF9maWx0ZXIgPSBzdGs4MDd4X3BpZF9maWx0ZXIsCi0JCQkJLnBpZF9maWx0ZXJfY3RybCA9IHN0azgwN3hfcGlkX2ZpbHRlcl9jdHJsLAorCQkJCS5waWRfZmlsdGVyID0gc3RrODB4eF9waWRfZmlsdGVyLAorCQkJCS5waWRfZmlsdGVyX2N0cmwgPSBzdGs4MHh4X3BpZF9maWx0ZXJfY3RybCwKIAkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHN0azgwN3hfZnJvbnRlbmRfYXR0YWNoLAogCQkJCS50dW5lcl9hdHRhY2ggICAgID0gZGliODA3eF90dW5lcl9hdHRhY2gsCiAKQEAgLTI1MTAsOCArMjc2MCw4IEBACiAJCQl7CiAJCQkJLmNhcHMgID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCiAJCQkJLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKLQkJCQkucGlkX2ZpbHRlciA9IHN0azgwN3hfcGlkX2ZpbHRlciwKLQkJCQkucGlkX2ZpbHRlcl9jdHJsID0gc3RrODA3eF9waWRfZmlsdGVyX2N0cmwsCisJCQkJLnBpZF9maWx0ZXIgPSBzdGs4MHh4X3BpZF9maWx0ZXIsCisJCQkJLnBpZF9maWx0ZXJfY3RybCA9IHN0azgweHhfcGlkX2ZpbHRlcl9jdHJsLAogCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gc3RrODA3eHB2cl9mcm9udGVuZF9hdHRhY2gwLAogCQkJCS50dW5lcl9hdHRhY2ggICAgID0gZGliODA3eF90dW5lcl9hdHRhY2gsCiAKQEAgLTI1MjMsOCArMjc3Myw4IEBACiAJCQl7CiAJCQkJLmNhcHMgID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCiAJCQkJLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKLQkJCQkucGlkX2ZpbHRlciA9IHN0azgwN3hfcGlkX2ZpbHRlciwKLQkJCQkucGlkX2ZpbHRlcl9jdHJsID0gc3RrODA3eF9waWRfZmlsdGVyX2N0cmwsCisJCQkJLnBpZF9maWx0ZXIgPSBzdGs4MHh4X3BpZF9maWx0ZXIsCisJCQkJLnBpZF9maWx0ZXJfY3RybCA9IHN0azgweHhfcGlkX2ZpbHRlcl9jdHJsLAogCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gc3RrODA3eHB2cl9mcm9udGVuZF9hdHRhY2gxLAogCQkJCS50dW5lcl9hdHRhY2ggICAgID0gZGliODA3eF90dW5lcl9hdHRhY2gsCiAKQEAgLTI1NDcsNiArMjc5NywzNyBAQAogCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKIAkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmNhcHMgID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCQkJRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisJCQkJLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKKwkJCQkucGlkX2ZpbHRlciA9IHN0azgweHhfcGlkX2ZpbHRlciwKKwkJCQkucGlkX2ZpbHRlcl9jdHJsID0gc3RrODB4eF9waWRfZmlsdGVyX2N0cmwsCisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzdGs4MDl4X2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYjgwOXhfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ID0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJEaUJjb20gU1RLODA5NkdQIHJlZmVyZW5jZSBkZXNpZ24iLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzY3XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJfSwKKworCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKaW5kZXggZGEzNDk3OS4uOTE0M2I1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKQEAgLTE0Miw4ICsxNDIsMTMgQEAKIAkJfSBlbHNlIGlmICgobXNnW2ldLmZsYWdzICYgSTJDX01fUkQpID09IDApIHsKIAkJCWlmIChkaWJ1c2JfaTJjX21zZyhkLCBtc2dbaV0uYWRkciwgbXNnW2ldLmJ1Zixtc2dbaV0ubGVuLE5VTEwsMCkgPCAwKQogCQkJCWJyZWFrOwotCQl9IGVsc2UKLQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKG1zZ1tpXS5hZGRyICE9IDB4NTApIHsKKwkJCS8qIDB4NTAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGVlcHJvbSAtIHdlIG5lZWQgdG8gcHJvdGVjdCBpdAorCQkJICogZnJvbSBkaWJ1c2IncyBiYWQgaTJjIGltcGxlbWVudGF0aW9uOiByZWFkcyB3aXRob3V0CisJCQkgKiB3cml0aW5nIHRoZSBvZmZzZXQgYmVmb3JlIGFyZSBmb3JiaWRkZW4gKi8KKwkJCWlmIChkaWJ1c2JfaTJjX21zZyhkLCBtc2dbaV0uYWRkciwgTlVMTCwgMCwgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbikgPCAwKQorCQkJCWJyZWFrOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOwpAQCAtMjQzLDYgKzI0OCwxMiBAQAogCiBpbnQgZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKKwlpZiAoYWRhcC0+ZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yICA9PSBVU0JfVklEX0xJVEVPTiAmJgorCQkJYWRhcC0+ZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PQorCQkJVVNCX1BJRF9MSVRFT05fRFZCX1RfV0FSTSkgeworCQltc2xlZXAoMTAwMCk7CisJfQorCiAJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliMzAwMG1jX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIERFRkFVTFRfRElCMzAwMFBfSTJDX0FERFJFU1MsICAmbW9kMzAwMHBfZGliMzAwMHBfY29uZmlnKSkgIT0gTlVMTCB8fAogCQkoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjMwMDBtY19hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCBERUZBVUxUX0RJQjMwMDBNQ19JMkNfQUREUkVTUywgJm1vZDMwMDBwX2RpYjMwMDBwX2NvbmZpZykpICE9IE5VTEwpIHsKIAkJaWYgKGFkYXAtPnByaXYgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IGYxNjAyZDQuLmJjMzU4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9NU0lfMgkJCQkweDE0NjIKICNkZWZpbmUgVVNCX1ZJRF9PUEVSQTEJCQkJMHg2OTVjCiAjZGVmaW5lIFVTQl9WSURfUElOTkFDTEUJCQkweDIzMDQKKyNkZWZpbmUgVVNCX1ZJRF9QQ1RWCQkJCTB4MjAxMwogI2RlZmluZSBVU0JfVklEX1BJWEVMVklFVwkJCTB4MTU1NAogI2RlZmluZSBVU0JfVklEX1RFQ0hOT1RSRU5ECQkJMHgwYjQ4CiAjZGVmaW5lIFVTQl9WSURfVEVSUkFURUMJCQkweDBjY2QKQEAgLTEwMSw2ICsxMDIsNyBAQAogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs3MDcwUEQJCQkweDFlYmUKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLODA3WFAJCQkJMHgxZjkwCiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzgwN1hQVlIJCQkweDFmOTgKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLODA5NkdQICAgICAgICAgICAgICAgICAgICAgICAgMHgxZmEwCiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0FOQ0hPUl8yMTM1X0NPTEQJCQkweDIxMzEKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzc3MFAJCQkJMHgxZTgwCiAjZGVmaW5lIFVTQl9QSURfRFBPU0hfTTkyMDZfQ09MRAkJCTB4OTIwNgpAQCAtMjExLDYgKzIxMyw3IEBACiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUVfU0UJCQkweDAyM2IKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzNBCQkJMHgwMjQzCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczRVNFCQkJMHgwMjQ1CisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjc0RQkJCTB4MDI0NgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFYyODJFCQkJMHgwMjQ4CiAjZGVmaW5lIFVTQl9QSURfUElYRUxWSUVXX1NCVFZECQkJCTB4NTAxMAogI2RlZmluZSBVU0JfUElEX1BDVFZfMjAwRQkJCQkweDAyMGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCmluZGV4IDViYjk0NzkuLjY0MTMyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwpAQCAtMjAsNiArMjAsMTEgQEAKICNpbmNsdWRlICJ0ZGExMDAyeC5oIgogI2luY2x1ZGUgIm10MzEyLmgiCiAjaW5jbHVkZSAiemwxMDAzOS5oIgorI2luY2x1ZGUgImRzMzAwMC5oIgorI2luY2x1ZGUgInN0djA5MDAuaCIKKyNpbmNsdWRlICJzdHY2MTEwLmgiCisjaW5jbHVkZSAic3RiNjEwMC5oIgorI2luY2x1ZGUgInN0YjYxMDBfcHJvYy5oIgogCiAjaWZuZGVmIFVTQl9QSURfRFcyMTAyCiAjZGVmaW5lIFVTQl9QSURfRFcyMTAyIDB4MjEwMgpAQCAtMzcsMTIgKzQyLDIwIEBACiAjZGVmaW5lIFVTQl9QSURfQ0lORVJHWV9TIDB4MDA2NAogI2VuZGlmCiAKKyNpZm5kZWYgVVNCX1BJRF9URVZJSV9TNjMwCisjZGVmaW5lIFVTQl9QSURfVEVWSUlfUzYzMCAweGQ2MzAKKyNlbmRpZgorCiAjaWZuZGVmIFVTQl9QSURfVEVWSUlfUzY1MAogI2RlZmluZSBVU0JfUElEX1RFVklJX1M2NTAgMHhkNjUwCiAjZW5kaWYKIAotI2lmbmRlZiBVU0JfUElEX1RFVklJX1M2MzAKLSNkZWZpbmUgVVNCX1BJRF9URVZJSV9TNjMwIDB4ZDYzMAorI2lmbmRlZiBVU0JfUElEX1RFVklJX1M2NjAKKyNkZWZpbmUgVVNCX1BJRF9URVZJSV9TNjYwIDB4ZDY2MAorI2VuZGlmCisKKyNpZm5kZWYgVVNCX1BJRF9QUk9GXzExMDAKKyNkZWZpbmUgVVNCX1BJRF9QUk9GXzExMDAgMHhiMDEyCiAjZW5kaWYKIAogI2RlZmluZSBEVzIxMFhfUkVBRF9NU0cgMApAQCAtNTUsNiArNjgsMTAgQEAKICNkZWZpbmUgRFcyMTAyX1ZPTFRBR0VfQ1RSTCAoMHgxODAwKQogI2RlZmluZSBEVzIxMDJfUkNfUVVFUlkgKDB4MWEwMCkKIAorI2RlZmluZQllcnJfc3RyICJkaWQgbm90IGZpbmQgdGhlIGZpcm13YXJlIGZpbGUuICglcykgIiBcCisJCSJQbGVhc2Ugc2VlIGxpbnV4L0RvY3VtZW50YXRpb24vZHZiLyBmb3IgbW9yZSBkZXRhaWxzICIgXAorCQkib24gZmlybXdhcmUtcHJvYmxlbXMuIgorCiBzdHJ1Y3QgZHZiX3VzYl9yY19rZXlzX3RhYmxlIHsKIAlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKnJjX2tleXM7CiAJaW50IHJjX2tleXNfc2l6ZTsKQEAgLTcxLDYgKzg4LDEyIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoa2V5bWFwLCBpcl9rZXltYXAsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGtleW1hcCwgInNldCBrZXltYXAgMD1kZWZhdWx0IDE9ZHZid29ybGQgMj10ZXZpaSAzPXRicyAgLi4uIik7CiAKKy8qIGRlbW9kIHByb2JlICovCitzdGF0aWMgaW50IGRlbW9kX3Byb2JlID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZW1vZCwgZGVtb2RfcHJvYmUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlbW9kLCAiZGVtb2QgdG8gcHJvYmUgKDE9Y3gyNDExNiAyPXN0djA5MDMrc3R2NjExMCAiCisJCQkiND1zdHYwOTAzK3N0YjYxMDAob3ItYWJsZSkpLiIpOworCiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKIAogc3RhdGljIGludCBkdzIxMHhfb3Bfcncoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLApAQCAtMTgzLDcgKzIwNiw3IEBACiAJc3dpdGNoIChudW0pIHsKIAljYXNlIDI6CiAJCS8qIHJlYWQgc2kyMTA5IHJlZ2lzdGVyIGJ5IG51bWJlciAqLwotCQlidWY2WzBdID0gMHhkMDsKKwkJYnVmNlswXSA9IG1zZ1swXS5hZGRyIDw8IDE7CiAJCWJ1ZjZbMV0gPSBtc2dbMF0ubGVuOwogCQlidWY2WzJdID0gbXNnWzBdLmJ1ZlswXTsKIAkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCkBAIC0xOTgsNyArMjIxLDcgQEAKIAkJc3dpdGNoIChtc2dbMF0uYWRkcikgewogCQljYXNlIDB4Njg6CiAJCQkvKiB3cml0ZSB0byBzaTIxMDkgcmVnaXN0ZXIgKi8KLQkJCWJ1ZjZbMF0gPSAweGQwOworCQkJYnVmNlswXSA9IG1zZ1swXS5hZGRyIDw8IDE7CiAJCQlidWY2WzFdID0gbXNnWzBdLmxlbjsKIAkJCW1lbWNweShidWY2ICsgMiwgbXNnWzBdLmJ1ZiwgbXNnWzBdLmxlbik7CiAJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwgYnVmNiwKQEAgLTIzOSw3ICsyNjIsNyBAQAogCQkvKiByZWFkICovCiAJCS8qIGZpcnN0IHdyaXRlIGZpcnN0IHJlZ2lzdGVyIG51bWJlciAqLwogCQl1OCBpYnVmW21zZ1sxXS5sZW4gKyAyXSwgb2J1ZlszXTsKLQkJb2J1ZlswXSA9IDB4ZDA7CisJCW9idWZbMF0gPSBtc2dbMF0uYWRkciA8PCAxOwogCQlvYnVmWzFdID0gbXNnWzBdLmxlbjsKIAkJb2J1ZlsyXSA9IG1zZ1swXS5idWZbMF07CiAJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLApAQCAtMjU2LDcgKzI3OSw3IEBACiAJCWNhc2UgMHg2ODogewogCQkJLyogd3JpdGUgdG8gcmVnaXN0ZXIgKi8KIAkJCXU4IG9idWZbbXNnWzBdLmxlbiArIDJdOwotCQkJb2J1ZlswXSA9IDB4ZDA7CisJCQlvYnVmWzBdID0gbXNnWzBdLmFkZHIgPDwgMTsKIAkJCW9idWZbMV0gPSBtc2dbMF0ubGVuOwogCQkJbWVtY3B5KG9idWYgKyAyLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKIAkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLApAQCAtMjY2LDcgKzI4OSw3IEBACiAJCWNhc2UgMHg2MTogewogCQkJLyogd3JpdGUgdG8gdHVuZXIgKi8KIAkJCXU4IG9idWZbbXNnWzBdLmxlbiArIDJdOwotCQkJb2J1ZlswXSA9IDB4YzI7CisJCQlvYnVmWzBdID0gbXNnWzBdLmFkZHIgPDwgMTsKIAkJCW9idWZbMV0gPSBtc2dbMF0ubGVuOwogCQkJbWVtY3B5KG9idWYgKyAyLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKIAkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLApAQCAtMzAxLDc4ICszMjQsNzggQEAKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCByZXQgPSAwOwotCWludCBsZW4sIGk7CisJaW50IGxlbiwgaSwgajsKIAogCWlmICghZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc3dpdGNoIChudW0pIHsKLQljYXNlIDI6IHsKLQkJLyogcmVhZCAqLwotCQkvKiBmaXJzdCB3cml0ZSBmaXJzdCByZWdpc3RlciBudW1iZXIgKi8KLQkJdTggaWJ1Zlttc2dbMV0ubGVuICsgMl0sIG9idWZbM107Ci0JCW9idWZbMF0gPSAweGFhOwotCQlvYnVmWzFdID0gbXNnWzBdLmxlbjsKLQkJb2J1ZlsyXSA9IG1zZ1swXS5idWZbMF07Ci0JCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLAotCQkJCW9idWYsIG1zZ1swXS5sZW4gKyAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKLQkJLyogc2Vjb25kIHJlYWQgcmVnaXN0ZXJzICovCi0JCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMzLCAweGFiICwgMCwKLQkJCQlpYnVmLCBtc2dbMV0ubGVuICsgMiwgRFcyMTBYX1JFQURfTVNHKTsKLQkJbWVtY3B5KG1zZ1sxXS5idWYsIGlidWYgKyAyLCBtc2dbMV0ubGVuKTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSAxOgotCQlzd2l0Y2ggKG1zZ1swXS5hZGRyKSB7Ci0JCWNhc2UgMHg1NTogewotCQkJaWYgKG1zZ1swXS5idWZbMF0gPT0gMHhmNykgewotCQkJCS8qIGZpcm13YXJlICovCi0JCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCi0JCQkJdTggb2J1ZlsxOV07Ci0JCQkJb2J1ZlswXSA9IDB4YWE7Ci0JCQkJb2J1ZlsxXSA9IDB4MTE7Ci0JCQkJb2J1ZlsyXSA9IDB4Zjc7Ci0JCQkJbGVuID0gbXNnWzBdLmxlbiAtIDE7Ci0JCQkJaSA9IDE7Ci0JCQkJZG8gewotCQkJCQltZW1jcHkob2J1ZiArIDMsIG1zZ1swXS5idWYgKyBpLCAobGVuID4gMTYgPyAxNiA6IGxlbikpOwotCQkJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKLQkJCQkJCW9idWYsIChsZW4gPiAxNiA/IDE2IDogbGVuKSArIDMsIERXMjEwWF9XUklURV9NU0cpOwotCQkJCQlpICs9IDE2OwotCQkJCQlsZW4gLT0gMTY7Ci0JCQkJfSB3aGlsZSAobGVuID4gMCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIHdyaXRlIHRvIHJlZ2lzdGVyICovCi0JCQkJdTggb2J1Zlttc2dbMF0ubGVuICsgMl07Ci0JCQkJb2J1ZlswXSA9IDB4YWE7Ci0JCQkJb2J1ZlsxXSA9IG1zZ1swXS5sZW47Ci0JCQkJbWVtY3B5KG9idWYgKyAyLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKLQkJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKLQkJCQkJCW9idWYsIG1zZ1swXS5sZW4gKyAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9CisJZm9yIChqID0gMDsgaiA8IG51bTsgaisrKSB7CisJCXN3aXRjaCAobXNnW2pdLmFkZHIpIHsKIAkJY2FzZShEVzIxMDJfUkNfUVVFUlkpOiB7CiAJCQl1OCBpYnVmWzJdOwogCQkJcmV0ICA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI4LCAwLCAwLAogCQkJCQlpYnVmLCAyLCBEVzIxMFhfUkVBRF9NU0cpOwotCQkJbWVtY3B5KG1zZ1swXS5idWYsIGlidWYgLCAyKTsKKwkJCW1lbWNweShtc2dbal0uYnVmLCBpYnVmICwgMik7CiAJCQlicmVhazsKIAkJfQogCQljYXNlKERXMjEwMl9WT0xUQUdFX0NUUkwpOiB7CiAJCQl1OCBvYnVmWzJdOwogCQkJb2J1ZlswXSA9IDB4MzA7Ci0JCQlvYnVmWzFdID0gbXNnWzBdLmJ1ZlswXTsKKwkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzBdOwogCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjIsIDAsIDAsCiAJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOwogCQkJYnJlYWs7CiAJCX0KKwkJLypjYXNlIDB4NTU6IGN4MjQxMTYKKwkJY2FzZSAweDZhOiBzdHYwOTAzCisJCWNhc2UgMHg2ODogZHMzMDAwLCBzdHYwOTAzCisJCWNhc2UgMHg2MDogdHMyMDIwLCBzdHY2MTEwLCBzdGI2MTAwICovCisJCWRlZmF1bHQ6IHsKKwkJCWlmIChtc2dbal0uZmxhZ3MgPT0gSTJDX01fUkQpIHsKKwkJCQkvKiByZWFkIHJlZ2lzdGVycyAqLworCQkJCXU4ICBpYnVmW21zZ1tqXS5sZW4gKyAyXTsKKwkJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMywKKwkJCQkJCShtc2dbal0uYWRkciA8PCAxKSArIDEsIDAsCisJCQkJCQlpYnVmLCBtc2dbal0ubGVuICsgMiwKKwkJCQkJCURXMjEwWF9SRUFEX01TRyk7CisJCQkJbWVtY3B5KG1zZ1tqXS5idWYsIGlidWYgKyAyLCBtc2dbal0ubGVuKTsKKwkJCW1kZWxheSgxMCk7CisJCQl9IGVsc2UgaWYgKCgobXNnW2pdLmJ1ZlswXSA9PSAweGIwKSAmJgorCQkJCQkJKG1zZ1tqXS5hZGRyID09IDB4NjgpKSB8fAorCQkJCQkJKChtc2dbal0uYnVmWzBdID09IDB4ZjcpICYmCisJCQkJCQkobXNnW2pdLmFkZHIgPT0gMHg1NSkpKSB7CisJCQkJLyogd3JpdGUgZmlybXdhcmUgKi8KKwkJCQl1OCBvYnVmWzE5XTsKKwkJCQlvYnVmWzBdID0gbXNnW2pdLmFkZHIgPDwgMTsKKwkJCQlvYnVmWzFdID0gKG1zZ1tqXS5sZW4gPiAxNSA/IDE3IDogbXNnW2pdLmxlbik7CisJCQkJb2J1ZlsyXSA9IG1zZ1tqXS5idWZbMF07CisJCQkJbGVuID0gbXNnW2pdLmxlbiAtIDE7CisJCQkJaSA9IDE7CisJCQkJZG8geworCQkJCQltZW1jcHkob2J1ZiArIDMsIG1zZ1tqXS5idWYgKyBpLAorCQkJCQkJCShsZW4gPiAxNiA/IDE2IDogbGVuKSk7CisJCQkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLAorCQkJCQkJb2J1ZiwgKGxlbiA+IDE2ID8gMTYgOiBsZW4pICsgMywKKwkJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJCQlpICs9IDE2OworCQkJCQlsZW4gLT0gMTY7CisJCQkJfSB3aGlsZSAobGVuID4gMCk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdyaXRlIHJlZ2lzdGVycyAqLworCQkJCXU4IG9idWZbbXNnW2pdLmxlbiArIDJdOworCQkJCW9idWZbMF0gPSBtc2dbal0uYWRkciA8PCAxOworCQkJCW9idWZbMV0gPSBtc2dbal0ubGVuOworCQkJCW1lbWNweShvYnVmICsgMiwgbXNnW2pdLmJ1ZiwgbXNnW2pdLmxlbik7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCisJCQkJCQlvYnVmLCBtc2dbal0ubGVuICsgMiwKKwkJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJfQorCQkJYnJlYWs7CisJCX0KIAkJfQogCi0JCWJyZWFrOwogCX0KIAogCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKQEAgLTQ0Miw2MyArNDY1LDg1IEBACiAJcmV0dXJuIG51bTsKIH0KIAotc3RhdGljIGludCBzNjMwX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorc3RhdGljIGludCBzNngwX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAogCQkJCQkJCQlpbnQgbnVtKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CiAJaW50IHJldCA9IDA7CisJaW50IGxlbiwgaSwgajsKIAogCWlmICghZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc3dpdGNoIChudW0pIHsKLQljYXNlIDI6IHsgLyogcmVhZCAqLwotCQl1OCBpYnVmW21zZ1sxXS5sZW5dLCBvYnVmWzNdOwotCQlvYnVmWzBdID0gbXNnWzFdLmxlbjsKLQkJb2J1ZlsxXSA9IChtc2dbMF0uYWRkciA8PCAxKTsKLQkJb2J1ZlsyXSA9IG1zZ1swXS5idWZbMF07Ci0KLQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OTAsIDAsIDAsCi0JCQkJCW9idWYsIDMsIERXMjEwWF9XUklURV9NU0cpOwotCQltc2xlZXAoNSk7Ci0JCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDkxLCAwLCAwLAotCQkJCQlpYnVmLCBtc2dbMV0ubGVuLCBEVzIxMFhfUkVBRF9NU0cpOwotCQltZW1jcHkobXNnWzFdLmJ1ZiwgaWJ1ZiwgbXNnWzFdLmxlbik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDE6Ci0JCXN3aXRjaCAobXNnWzBdLmFkZHIpIHsKLQkJY2FzZSAweDYwOgotCQljYXNlIDB4MGU6IHsKLQkJCS8qIHdyaXRlIHRvIHpsMTAzMTMsIHpsMTAwMzkgcmVnaXN0ZXIsICovCi0JCQl1OCBvYnVmW21zZ1swXS5sZW4gKyAyXTsKLQkJCW9idWZbMF0gPSBtc2dbMF0ubGVuICsgMTsKLQkJCW9idWZbMV0gPSAobXNnWzBdLmFkZHIgPDwgMSk7Ci0JCQltZW1jcHkob2J1ZiArIDIsIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pOwotCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4ODAsIDAsIDAsCi0JCQkJCW9idWYsIG1zZ1swXS5sZW4gKyAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKLQkJCWJyZWFrOwotCQl9CisJZm9yIChqID0gMDsgaiA8IG51bTsgaisrKSB7CisJCXN3aXRjaCAobXNnW2pdLmFkZHIpIHsKIAkJY2FzZSAoRFcyMTAyX1JDX1FVRVJZKTogewogCQkJdTggaWJ1Zls0XTsKIAkJCXJldCAgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiOCwgMCwgMCwKIAkJCQkJaWJ1ZiwgNCwgRFcyMTBYX1JFQURfTVNHKTsKLQkJCW1zZ1swXS5idWZbMF0gPSBpYnVmWzNdOworCQkJbWVtY3B5KG1zZ1tqXS5idWYsIGlidWYgKyAxLCAyKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgKERXMjEwMl9WT0xUQUdFX0NUUkwpOiB7CiAJCQl1OCBvYnVmWzJdOwotCQkJb2J1ZlswXSA9IDB4MDM7Ci0JCQlvYnVmWzFdID0gbXNnWzBdLmJ1ZlswXTsKKwkJCW9idWZbMF0gPSAzOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMF07CiAJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg4YSwgMCwgMCwKIAkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CiAJCQlicmVhazsKIAkJfQorCQkvKmNhc2UgMHg1NTogY3gyNDExNgorCQljYXNlIDB4NmE6IHN0djA5MDMKKwkJY2FzZSAweDY4OiBkczMwMDAsIHN0djA5MDMKKwkJY2FzZSAweDYwOiB0czIwMjAsIHN0djYxMTAsIHN0YjYxMDAKKwkJY2FzZSAweGEwOiBlZXByb20gKi8KKwkJZGVmYXVsdDogeworCQkJaWYgKG1zZ1tqXS5mbGFncyA9PSBJMkNfTV9SRCkgeworCQkJCS8qIHJlYWQgcmVnaXN0ZXJzICovCisJCQkJdTggaWJ1Zlttc2dbal0ubGVuXTsKKwkJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg5MSwgMCwgMCwKKwkJCQkJCWlidWYsIG1zZ1tqXS5sZW4sCisJCQkJCQlEVzIxMFhfUkVBRF9NU0cpOworCQkJCW1lbWNweShtc2dbal0uYnVmLCBpYnVmLCBtc2dbal0ubGVuKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKG1zZ1tqXS5idWZbMF0gPT0gMHhiMCkgJiYKKwkJCQkJCShtc2dbal0uYWRkciA9PSAweDY4KSkgeworCQkJCS8qIHdyaXRlIGZpcm13YXJlICovCisJCQkJdTggb2J1ZlsxOV07CisJCQkJb2J1ZlswXSA9IChtc2dbal0ubGVuID4gMTYgPworCQkJCQkJMTggOiBtc2dbal0ubGVuICsgMSk7CisJCQkJb2J1ZlsxXSA9IG1zZ1tqXS5hZGRyIDw8IDE7CisJCQkJb2J1ZlsyXSA9IG1zZ1tqXS5idWZbMF07CisJCQkJbGVuID0gbXNnW2pdLmxlbiAtIDE7CisJCQkJaSA9IDE7CisJCQkJZG8geworCQkJCQltZW1jcHkob2J1ZiArIDMsIG1zZ1tqXS5idWYgKyBpLAorCQkJCQkJCShsZW4gPiAxNiA/IDE2IDogbGVuKSk7CisJCQkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDgwLCAwLCAwLAorCQkJCQkJb2J1ZiwgKGxlbiA+IDE2ID8gMTYgOiBsZW4pICsgMywKKwkJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJCQlpICs9IDE2OworCQkJCQlsZW4gLT0gMTY7CisJCQkJfSB3aGlsZSAobGVuID4gMCk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdyaXRlIHJlZ2lzdGVycyAqLworCQkJCXU4IG9idWZbbXNnW2pdLmxlbiArIDJdOworCQkJCW9idWZbMF0gPSBtc2dbal0ubGVuICsgMTsKKwkJCQlvYnVmWzFdID0gKG1zZ1tqXS5hZGRyIDw8IDEpOworCQkJCW1lbWNweShvYnVmICsgMiwgbXNnW2pdLmJ1ZiwgbXNnW2pdLmxlbik7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsCisJCQkJCQkobnVtID4gMSA/IDB4OTAgOiAweDgwKSwgMCwgMCwKKwkJCQkJCW9idWYsIG1zZ1tqXS5sZW4gKyAyLAorCQkJCQkJRFcyMTBYX1dSSVRFX01TRyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQogCQl9CiAKLQkJYnJlYWs7CisJCW1zbGVlcCgzKTsKIAl9CiAKIAltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CkBAIC01MzUsOCArNTgwLDggQEAKIAkuZnVuY3Rpb25hbGl0eSA9IGR3MjEweF9pMmNfZnVuYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzNjMwX2kyY19hbGdvID0gewotCS5tYXN0ZXJfeGZlciA9IHM2MzBfaTJjX3RyYW5zZmVyLAorc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHM2eDBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyID0gczZ4MF9pMmNfdHJhbnNmZXIsCiAJLmZ1bmN0aW9uYWxpdHkgPSBkdzIxMHhfaTJjX2Z1bmMsCiB9OwogCkBAIC01NjQsMjUgKzYwOSwzNCBAQAogCXJldHVybiAwOwogfTsKIAotc3RhdGljIGludCBzNjMwX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBtYWNbNl0pCitzdGF0aWMgaW50IHM2eDBfcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IG1hY1s2XSkKIHsKIAlpbnQgaSwgcmV0OwotCXU4IGJ1ZlszXSwgZWVwcm9tWzI1Nl0sIGVlcHJvbWxpbmVbMTZdOworCXU4IGlidWZbXSA9IHsgMCB9LCBvYnVmW10gPSB7IDAgfTsKKwl1OCBlZXByb21bMjU2XSwgZWVwcm9tbGluZVsxNl07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyID0gMHhhMCA+PiAxLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBvYnVmLAorCQkJLmxlbiA9IDEsCisJCX0sIHsKKwkJCS5hZGRyID0gMHhhMCA+PiAxLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmID0gaWJ1ZiwKKwkJCS5sZW4gPSAxLAorCQl9CisJfTsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQlidWZbMF0gPSAxOwotCQlidWZbMV0gPSAweGEwOwotCQlidWZbMl0gPSBpOwotCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg5MCwgMCwgMCwKLQkJCQkJYnVmLCAzLCBEVzIxMFhfV1JJVEVfTVNHKTsKLQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OTEsIDAsIDAsCi0JCQkJCWJ1ZiwgMSwgRFcyMTBYX1JFQURfTVNHKTsKLQkJaWYgKHJldCA8IDApIHsKKwkJb2J1ZlswXSA9IGk7CisJCXJldCA9IHM2eDBfaTJjX3RyYW5zZmVyKCZkLT5pMmNfYWRhcCwgbXNnLCAyKTsKKwkJaWYgKHJldCAhPSAyKSB7CiAJCQllcnIoInJlYWQgZWVwcm9tIGZhaWxlZC4iKTsKIAkJCXJldHVybiAtMTsKIAkJfSBlbHNlIHsKLQkJCWVlcHJvbWxpbmVbaSAlIDE2XSA9IGJ1ZlswXTsKLQkJCWVlcHJvbVtpXSA9IGJ1ZlswXTsKKwkJCWVlcHJvbWxpbmVbaSAlIDE2XSA9IGlidWZbMF07CisJCQllZXByb21baV0gPSBpYnVmWzBdOwogCQl9CiAKIAkJaWYgKChpICUgMTYpID09IDE1KSB7CkBAIC02NDQsMTkgKzY5OCwxMDQgQEAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MGUsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzMzAwMF9jb25maWcgZHcyMTA0X2RzMzAwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorfTsKKworc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBkdzIxMDRhX3N0djA5MDBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2YSwKKwkuZGVtb2RfbW9kZSA9IDAsCisJLnh0YWwgPSAyNzAwMDAwMCwKKwkuY2xrbW9kZSA9IDMsLyogMC1DTEtJLCAyLVhUQUxJLCBlbHNlIEFVVE8gKi8KKwkuZGlzZXFjX21vZGUgPSAyLC8qIDIvMyBQV00gKi8KKwkudHVuMV9tYWRkcmVzcyA9IDAsLyogMHg2MCAqLworCS50dW4xX2FkYyA9IDAsLyogMiBWcHAgKi8KKwkucGF0aDFfbW9kZSA9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHN0YjYxMDBfY29uZmlnIGR3MjEwNGFfc3RiNjEwMF9jb25maWcgPSB7CisJLnR1bmVyX2FkZHJlc3MgPSAweDYwLAorCS5yZWZjbG9jayA9IDI3MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBkdzIxMDRfc3R2MDkwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5kZW1vZF9tb2RlID0gMCwKKwkueHRhbCA9IDgwMDAwMDAsCisJLmNsa21vZGUgPSAzLAorCS5kaXNlcWNfbW9kZSA9IDIsCisJLnR1bjFfbWFkZHJlc3MgPSAwLAorCS50dW4xX2FkYyA9IDEsLyogMSBWcHAgKi8KKwkucGF0aDFfbW9kZSA9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHN0djYxMTBfY29uZmlnIGR3MjEwNF9zdHY2MTEwX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSAweDYwLAorCS5tY2xrID0gMTYwMDAwMDAsCisJLmNsa19kaXYgPSAxLAorfTsKKwogc3RhdGljIGludCBkdzIxMDRfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmQpCiB7Ci0JaWYgKChkLT5mZSA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsICZkdzIxMDRfY29uZmlnLAotCQkJJmQtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CisKKwlpZiAoZGVtb2RfcHJvYmUgJiA0KSB7CisJCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwgJmR3MjEwNGFfc3R2MDkwMF9jb25maWcsCisJCQkJJmQtPmRldi0+aTJjX2FkYXAsIDApOworCQlpZiAoZC0+ZmUgIT0gTlVMTCkgeworCQkJaWYgKGR2Yl9hdHRhY2goc3RiNjEwMF9hdHRhY2gsIGQtPmZlLAorCQkJCQkmZHcyMTA0YV9zdGI2MTAwX2NvbmZpZywKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXApKSB7CisJCQkJdHVuZXJfb3BzID0gJmQtPmZlLT5vcHMudHVuZXJfb3BzOworCQkJCXR1bmVyX29wcy0+c2V0X2ZyZXF1ZW5jeSA9IHN0YjYxMDBfc2V0X2ZyZXE7CisJCQkJdHVuZXJfb3BzLT5nZXRfZnJlcXVlbmN5ID0gc3RiNjEwMF9nZXRfZnJlcTsKKwkJCQl0dW5lcl9vcHMtPnNldF9iYW5kd2lkdGggPSBzdGI2MTAwX3NldF9iYW5kdzsKKwkJCQl0dW5lcl9vcHMtPmdldF9iYW5kd2lkdGggPSBzdGI2MTAwX2dldF9iYW5kdzsKKwkJCQlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCQkJCWluZm8oIkF0dGFjaGVkIFNUVjA5MDArU1RCNjEwMCFcbiIpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJaWYgKGRlbW9kX3Byb2JlICYgMikgeworCQlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsICZkdzIxMDRfc3R2MDkwMF9jb25maWcsCisJCQkJJmQtPmRldi0+aTJjX2FkYXAsIDApOworCQlpZiAoZC0+ZmUgIT0gTlVMTCkgeworCQkJaWYgKGR2Yl9hdHRhY2goc3R2NjExMF9hdHRhY2gsIGQtPmZlLAorCQkJCQkmZHcyMTA0X3N0djYxMTBfY29uZmlnLAorCQkJCQkmZC0+ZGV2LT5pMmNfYWRhcCkpIHsKKwkJCQlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCQkJCWluZm8oIkF0dGFjaGVkIFNUVjA5MDArU1RWNjExMEEhXG4iKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChkZW1vZF9wcm9iZSAmIDEpIHsKKwkJZC0+ZmUgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLCAmZHcyMTA0X2NvbmZpZywKKwkJCQkmZC0+ZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkLT5mZSAhPSBOVUxMKSB7CisJCQlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCQkJaW5mbygiQXR0YWNoZWQgY3gyNDExNiFcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkLT5mZSA9IGR2Yl9hdHRhY2goZHMzMDAwX2F0dGFjaCwgJmR3MjEwNF9kczMwMDBfY29uZmlnLAorCQkJJmQtPmRldi0+aTJjX2FkYXApOworCWlmIChkLT5mZSAhPSBOVUxMKSB7CiAJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7Ci0JCWluZm8oIkF0dGFjaGVkIGN4MjQxMTYhXG4iKTsKKwkJaW5mbygiQXR0YWNoZWQgRFMzMDAwIVxuIik7CiAJCXJldHVybiAwOwogCX0KKwogCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZHcyMTAyX3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZHcyMTA0X3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgczZ4MF9wcm9wZXJ0aWVzOwogCiBzdGF0aWMgaW50IGR3MjEwMl9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqZCkKIHsKQEAgLTY3MCwxNCArODA5LDE3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KKwogCWlmIChkdzIxMDJfcHJvcGVydGllcy5pMmNfYWxnbyA9PSAmZHcyMTAyX2VhcmRhX2kyY19hbGdvKSB7Ci0JCS8qZHcyMTAyX3Byb3BlcnRpZXMuYWRhcHRlci0+dHVuZXJfYXR0YWNoID0gZHcyMTAyX3R1bmVyX2F0dGFjaDsqLwogCQlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCiAJCQkJCSZkLT5kZXYtPmkyY19hZGFwKTsKIAkJaWYgKGQtPmZlICE9IE5VTEwpIHsKLQkJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7Ci0JCQlpbmZvKCJBdHRhY2hlZCBzdHYwMjg4IVxuIik7Ci0JCQlyZXR1cm4gMDsKKwkJCWlmIChkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBkLT5mZSwgMHg2MSwKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXApKSB7CisJCQkJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKwkJCQlpbmZvKCJBdHRhY2hlZCBzdHYwMjg4IVxuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTcwNSwxNSArODQ3LDM4IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgczYzMF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqZCkKK3N0YXRpYyBpbnQgczZ4MF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqZCkKIHsKIAlkLT5mZSA9IGR2Yl9hdHRhY2gobXQzMTJfYXR0YWNoLCAmemwzMTNfY29uZmlnLAotCQkJCSZkLT5kZXYtPmkyY19hZGFwKTsKKwkJCSZkLT5kZXYtPmkyY19hZGFwKTsKKwlpZiAoZC0+ZmUgIT0gTlVMTCkgeworCQlpZiAoZHZiX2F0dGFjaCh6bDEwMDM5X2F0dGFjaCwgZC0+ZmUsIDB4NjAsCisJCQkJJmQtPmRldi0+aTJjX2FkYXApKSB7CisJCQlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCQkJaW5mbygiQXR0YWNoZWQgemwxMDAzMTMremwxMDAzOSFcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCisJCQkmZC0+ZGV2LT5pMmNfYWRhcCk7CisJaWYgKGQtPmZlICE9IE5VTEwpIHsKKwkJaWYgKGR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGQtPmZlLCAweDYxLAorCQkJCSZkLT5kZXYtPmkyY19hZGFwKSkgeworCQkJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKwkJCWluZm8oIkF0dGFjaGVkIHN0djAyODgrc3RiNjAwMCFcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkLT5mZSA9IGR2Yl9hdHRhY2goZHMzMDAwX2F0dGFjaCwgJmR3MjEwNF9kczMwMDBfY29uZmlnLAorCQkJJmQtPmRldi0+aTJjX2FkYXApOwogCWlmIChkLT5mZSAhPSBOVUxMKSB7CiAJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7Ci0JCWluZm8oIkF0dGFjaGVkIHpsMTAzMTMhXG4iKTsKKwkJaW5mbygiQXR0YWNoZWQgZHMzMDAwK2RzMjAyMCFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CisKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNzI0LDE0ICs4ODksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR3MjEwMl9lYXJkYV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKLXsKLQlkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MSwKLQkJJmFkYXAtPmRldi0+aTJjX2FkYXApOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZHczMTAxX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYwLApAQCAtNzQwLDE0ICs4OTcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM2MzBfemwxMDAzOV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKLXsKLQlkdmJfYXR0YWNoKHpsMTAwMzlfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MCwKLQkJJmFkYXAtPmRldi0+aTJjX2FkYXApOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZHcyMTB4X3JjX2tleXNbXSA9IHsKIAl7IDB4ZjgwYSwgS0VZX1EgfSwJCS8qcG93ZXIqLwogCXsgMHhmODBjLCBLRVlfTSB9LAkJLyptdXRlKi8KQEAgLTkyMiw2ICsxMDcxLDggQEAKIAl7VVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCBVU0JfUElEX0NJTkVSR1lfUyl9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfQ1lQUkVTUywgVVNCX1BJRF9EVzMxMDEpfSwKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzYzMCl9LAorCXtVU0JfREVWSUNFKDB4MzAxMSwgVVNCX1BJRF9QUk9GXzExMDApfSwKKwl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzY2MCl9LAogCXsgfQogfTsKIApAQCAtOTM1LDE1ICsxMDg2LDEzIEBACiAJdTggcmVzZXQ7CiAJdTggcmVzZXQxNltdID0gezAsIDAsIDAsIDAsIDAsIDAsIDB9OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY29uc3QgY2hhciAqZmlsZW5hbWUgPSAiZHZiLXVzYi1kdzIxMDEuZnciOworCWNvbnN0IGNoYXIgKmZ3XzIxMDEgPSAiZHZiLXVzYi1kdzIxMDEuZnciOwogCiAJc3dpdGNoIChkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7CiAJY2FzZSAweDIxMDE6Ci0JCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlbmFtZSwgJmRldi0+ZGV2KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3XzIxMDEsICZkZXYtPmRldik7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJZXJyKCJkaWQgbm90IGZpbmQgdGhlIGZpcm13YXJlIGZpbGUuICglcykgIgotCQkJIlBsZWFzZSBzZWUgbGludXgvRG9jdW1lbnRhdGlvbi9kdmIvIGZvciBtb3JlIGRldGFpbHMgIgotCQkJIm9uIGZpcm13YXJlLXByb2JsZW1zLiIsIGZpbGVuYW1lKTsKKwkJCWVycihlcnJfc3RyLCBmd18yMTAxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJYnJlYWs7CkBAIC05ODMsNiArMTEzMiwxMSBAQAogCQl9CiAJCS8qIGluaXQgcmVnaXN0ZXJzICovCiAJCXN3aXRjaCAoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgeworCQljYXNlIFVTQl9QSURfUFJPRl8xMTAwOgorCQkJczZ4MF9wcm9wZXJ0aWVzLnJjX2tleV9tYXAgPSB0YnNfcmNfa2V5czsKKwkJCXM2eDBfcHJvcGVydGllcy5yY19rZXlfbWFwX3NpemUgPQorCQkJCQlBUlJBWV9TSVpFKHRic19yY19rZXlzKTsKKwkJCWJyZWFrOwogCQljYXNlIFVTQl9QSURfVEVWSUlfUzY1MDoKIAkJCWR3MjEwNF9wcm9wZXJ0aWVzLnJjX2tleV9tYXAgPSB0ZXZpaV9yY19rZXlzOwogCQkJZHcyMTA0X3Byb3BlcnRpZXMucmNfa2V5X21hcF9zaXplID0KQEAgLTEwMjEsNyArMTE3NSw2IEBACiAJCQkJCQlEVzIxMFhfUkVBRF9NU0cpOwogCQkJCWlmIChyZXNldDE2WzJdID09IDB4MTEpIHsKIAkJCQkJZHcyMTAyX3Byb3BlcnRpZXMuaTJjX2FsZ28gPSAmZHcyMTAyX2VhcmRhX2kyY19hbGdvOwotCQkJCQlkdzIxMDJfcHJvcGVydGllcy5hZGFwdGVyLT50dW5lcl9hdHRhY2ggPSAmZHcyMTAyX2VhcmRhX3R1bmVyX2F0dGFjaDsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtMTE4NCwxMyArMTMzNywxMyBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBzNjMwX3Byb3BlcnRpZXMgPSB7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgczZ4MF9wcm9wZXJ0aWVzID0gewogCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItczYzMC5mdyIsCiAJLm5vX3JlY29ubmVjdCA9IDEsCiAKLQkuaTJjX2FsZ28gPSAmczYzMF9pMmNfYWxnbywKKwkuaTJjX2FsZ28gPSAmczZ4MF9pMmNfYWxnbywKIAkucmNfa2V5X21hcCA9IHRldmlpX3JjX2tleXMsCiAJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUodGV2aWlfcmNfa2V5cyksCiAJLnJjX2ludGVydmFsID0gMTUwLApAQCAtMTE5OSwxMiArMTM1MiwxMiBAQAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4ODEsCiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmRvd25sb2FkX2Zpcm13YXJlID0gZHcyMTAyX2xvYWRfZmlybXdhcmUsCi0JLnJlYWRfbWFjX2FkZHJlc3MgPSBzNjMwX3JlYWRfbWFjX2FkZHJlc3MsCisJLnJlYWRfbWFjX2FkZHJlc3MgPSBzNngwX3JlYWRfbWFjX2FkZHJlc3MsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKLQkJCS5mcm9udGVuZF9hdHRhY2ggPSBzNjMwX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggPSBzNngwX2Zyb250ZW5kX2F0dGFjaCwKIAkJCS5zdHJlYW1pbmdfY3RybCA9IE5VTEwsCi0JCQkudHVuZXJfYXR0YWNoID0gczYzMF96bDEwMDM5X3R1bmVyX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggPSBOVUxMLAogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAogCQkJCS5jb3VudCA9IDgsCkBAIC0xMjE3LDEyICsxMzcwLDIwIEBACiAJCQl9LAogCQl9CiAJfSwKLQkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLm51bV9kZXZpY2VfZGVzY3MgPSAzLAogCS5kZXZpY2VzID0gewogCQl7IlRlVmlpIFM2MzAgVVNCIiwKIAkJCXsmZHcyMTAyX3RhYmxlWzZdLCBOVUxMfSwKIAkJCXtOVUxMfSwKIAkJfSwKKwkJeyJQcm9mIDExMDAgVVNCICIsCisJCQl7JmR3MjEwMl90YWJsZVs3XSwgTlVMTH0sCisJCQl7TlVMTH0sCisJCX0sCisJCXsiVGVWaWkgUzY2MCBVU0IiLAorCQkJeyZkdzIxMDJfdGFibGVbOF0sIE5VTEx9LAorCQkJe05VTEx9LAorCQl9LAogCX0KIH07CiAKQEAgLTEyMzUsMTAgKzEzOTYsMTAgQEAKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MzEwMV9wcm9wZXJ0aWVzLAogCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8Ci0JICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmczYzMF9wcm9wZXJ0aWVzLAotCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpKSB7CisJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmczZ4MF9wcm9wZXJ0aWVzLAorCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpKQogCQlyZXR1cm4gMDsKLQl9CisKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApAQCAtMTI2OSw2ICsxNDMwLDcgQEAKIE1PRFVMRV9BVVRIT1IoIklnb3IgTS4gTGlwbGlhbmluIChjKSBsaXBsaWFuaW5AbWUuYnkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEVkJXb3JsZCBEVkItUyAyMTAxLCAyMTAyLCBEVkItUzIgMjEwNCwiCiAJCQkJIiBEVkItQyAzMTAxIFVTQjIuMCwiCi0JCQkJIiBUZVZpaSBTNjAwLCBTNjMwLCBTNjUwIFVTQjIuMCBkZXZpY2VzIik7CisJCQkJIiBUZVZpaSBTNjAwLCBTNjMwLCBTNjUwLCBTNjYwIFVTQjIuMCwiCisJCQkJIiBQcm9mIDExMDAgVVNCMi4wIGRldmljZXMiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYwppbmRleCA5Y2JiZTQyLi5lYmI3YjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCkBAIC0xMzQsMTEgKzEzNCwxMyBAQAogCWRlYl9mZSgiJXM6IGZyZXE9JWQsIHN0ZXA9JWRcbiIsIF9fZnVuY19fLCBmcmVxLAogCSAgICAgICBzdGF0ZS0+ZnJvbnRlbmQub3BzLmluZm8uZnJlcXVlbmN5X3N0ZXBzaXplKTsKIAkvKiBmcmVxIC0+IG9zY2lsYXRvciBmcmVxdWVuY3kgY29udmVyc2lvbi4gKi8KLQkvKiBmcmVxOiA0NzMsMDAwLDAwMCArIG4qNiwwMDAsMDAwIChubyAxLzdNSHogc2hpZnQgdG8gY2VudGVyIGZyZXEpICovCi0JLyogYWRkIDQwMFsxLzcgTUhaXSA9IDU3LjE0Mjg1N01Iei4gICA1N01IeiBmb3IgdGhlIElGLCAgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS83TUh6IGZvciBjZW50ZXIgZnJlcSBzaGlmdCAqLworCS8qIGZyZXE6IDQ3MywwMDAsMDAwICsgbio2LDAwMCwwMDAgWysgMTQyODU3IChjZW50ZXIgZnJlcS4gc2hpZnQpXSAqLwogCWYgPSBmcmVxIC8gc3RhdGUtPmZyb250ZW5kLm9wcy5pbmZvLmZyZXF1ZW5jeV9zdGVwc2l6ZTsKLQlmICs9IDQwMDsKKwkvKiBhZGQgMzk5WzEvNyBNSFpdID0gNTdNSHogZm9yIHRoZSBJRiAgKi8KKwlmICs9IDM5OTsKKwkvKiBhZGQgY2VudGVyIGZyZXF1ZW5jeSBzaGlmdCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZiAlIDcgPT0gMCkKKwkJZisrOwogCXBsbF9mcmVxX2NtZFtERU1PRF9SRURJUkVDVF9SRUddID0gSkRWQlQ5MDUwMl8yTkRfSTJDX1JFRzsgLyogMHhGRSAqLwogCXBsbF9mcmVxX2NtZFtBRERSRVNTX0JZVEVdID0gc3RhdGUtPmNvbmZpZy5wbGxfYWRkcmVzcyA8PCAxOwogCXBsbF9mcmVxX2NtZFtESVZJREVSX0JZVEUxXSA9IChmID4+IDgpICYgMHg3RjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay1mZS5jCmluZGV4IDIwZWFkZjkuLjdhN2YxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2stZmUuYwpAQCAtMTQ2LDggKzE0Niw4IEBACiAKIAlzd2l0Y2ggKGMtPmRlbGl2ZXJ5X3N5c3RlbSkgewogCWNhc2UgU1lTX0RWQlM6Ci0JCS8qIE9ubHkgUVBTSyBpcyBzdXBwb3J0ZWQgZm9yIERWQi1TICovCi0JCWlmIChjLT5tb2R1bGF0aW9uICE9IFFQU0spIHsKKwkJLyogQWxsb3cgUVBTSyBhbmQgOFBTSyAoZXZlbiBmb3IgRFZCLVMpICovCisJCWlmIChjLT5tb2R1bGF0aW9uICE9IFFQU0sgJiYgYy0+bW9kdWxhdGlvbiAhPSBQU0tfOCkgewogCQkJZGViX2ZlKCIlczogdW5zdXBwb3J0ZWQgbW9kdWxhdGlvbiBzZWxlY3RlZCAoJWQpXG4iLAogCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggNThhYWMwMS4uYTNiOGI2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC01MjYsNiArNTI2LDE1IEBACiAJICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2dldGhlciB3aXRoIGEKIAkgIGRlbW9kdWxhdG9yIGZvciBub3cuCiAKK2NvbmZpZyBEVkJfVFVORVJfRElCMDA5MAorCXRyaXN0YXRlICJEaUJjb20gRGlCMDA5MCBzaWxpY29uIGJhc2UtYmFuZCB0dW5lciIKKwlkZXBlbmRzIG9uIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIGJhc2ViYW5kIHR1bmVyIERpQjAwOTAgZnJvbSBEaUJjb20uCisJICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2dldGhlciB3aXRoIGEKKwkgIGRlbW9kdWxhdG9yIGZvciBub3cuCisKIGNvbW1lbnQgIlNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCmluZGV4IDgyMzQ4MjUuLjQ3NTc1Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKQEAgLTU1LDYgKzU1LDcgQEAKIG9iai0kKENPTkZJR19EVkJfVERBODI2WCkgKz0gdGRhODI2eC5vCiBvYmotJChDT05GSUdfRFZCX1REQTgyNjEpICs9IHRkYTgyNjEubwogb2JqLSQoQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwKSArPSBkaWIwMDcwLm8KK29iai0kKENPTkZJR19EVkJfVFVORVJfRElCMDA5MCkgKz0gZGliMDA5MC5vCiBvYmotJChDT05GSUdfRFZCX1RVQTYxMDApICs9IHR1YTYxMDAubwogb2JqLSQoQ09ORklHX0RWQl9TNUgxNDA5KSArPSBzNWgxNDA5Lm8KIG9iai0kKENPTkZJR19EVkJfVFVORVJfSVREMTAwMCkgKz0gaXRkMTAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCmluZGV4IDJkYzI3MjMuLjI0MjY4ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCkBAIC02Miw3ICs2Miw3IEBACiAgICBUaGUgdmFsdWVzIGFyZSBhcyBmb2xsb3dzIGZyb20gbGVmdCB0byByaWdodAogICAgMD0iQVRWIFJGIiAxPSJBVFYgUkYxMyIgMj0iQ1ZCUyIgMz0iUy1WaWRlbyIgND0iUEFMIiA1PUNWQlMxMyIgNj0iU1ZpZGVvMTMiCiAqLwotc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcgZmlsdGVyX2NvZWZbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZyBmaWx0ZXJfY29lZltdID0gewogCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxMCwgezB4MjUsIDB4MDAsIDB4MjUsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCiAJe0FVODUyMl9GSUxURVJfQ09FRl9SNDExLCB7MHgyMCwgMHgwMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKIAl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTIsIHsweDAzLCAweDAwLCAweDAzLCAweDAzLCAweDAwLCAweDAwLCAweDAwfSB9LApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAwPSJTSUYiIDE9IkFUVlJGL0FUVlJGMTMiCiAgICBOb3RlOiB0aGUgIkFUVlJGL0FUVlJGMTMiIG1vZGUgaGFzIG5ldmVyIGJlZW4gdGVzdGVkCiAqLwotc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcgbHBmaWx0ZXJfY29lZltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnIGxwZmlsdGVyX2NvZWZbXSA9IHsKIAl7MHgwNjBiLCB7MHgyMSwgMHgwYn0gfSwKIAl7MHgwNjBjLCB7MHhhZCwgMHhhZH0gfSwKIAl7MHgwNjBkLCB7MHg3MCwgMHhmMH0gfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5jCmluZGV4IDJiZTE3YjkuLjBkMTI3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuYwpAQCAtNDksMjEgKzQ5LDYgQEAKICNkZWZpbmUgRElCMDA3MF9QMUcgIDB4MDMKICNkZWZpbmUgRElCMDA3MFNfUDFBIDB4MDIKIAotZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHsKLQlDVF9UVU5FUl9TVEFSVCA9IDEwLAotCUNUX1RVTkVSX1NURVBfMCwKLQlDVF9UVU5FUl9TVEVQXzEsCi0JQ1RfVFVORVJfU1RFUF8yLAotCUNUX1RVTkVSX1NURVBfMywKLQlDVF9UVU5FUl9TVEVQXzQsCi0JQ1RfVFVORVJfU1RFUF81LAotCUNUX1RVTkVSX1NURVBfNiwKLQlDVF9UVU5FUl9TVEVQXzcsCi0JQ1RfVFVORVJfU1RPUCwKLX07Ci0KLSNkZWZpbmUgRkVfQ0FMTEJBQ0tfVElNRV9ORVZFUiAweGZmZmZmZmZmCi0KIHN0cnVjdCBkaWIwMDcwX3N0YXRlIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKQEAgLTcxLDEwICs1NiwxMCBAQAogCXUxNiB3YmRfZmZfb2Zmc2V0OwogCXU4IHJldmlzaW9uOwogCi0JZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHR1bmVfc3RhdGU7Ci0JdTMyIGN1cnJlbnRfcmY7CisgICAgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHR1bmVfc3RhdGU7CisgICAgdTMyIGN1cnJlbnRfcmY7CiAKLQkvKiBmb3IgdGhlIGNhcHRyaW0gYmluYXJ5IHNlYXJjaCAqLworICAgIC8qIGZvciB0aGUgY2FwdHJpbSBiaW5hcnkgc2VhcmNoICovCiAJczggc3RlcDsKIAl1MTYgYWRjX2RpZmY7CiAKQEAgLTg1LDcgKzcwLDcgQEAKIAljb25zdCBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgKmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleDsKIAljb25zdCBzdHJ1Y3QgZGliMDA3MF9sbmFfbWF0Y2ggKmxuYV9tYXRjaDsKIAotCXU4IHdiZF9nYWluX2N1cnJlbnQ7CisgICAgdTggIHdiZF9nYWluX2N1cnJlbnQ7CiAJdTE2IHdiZF9vZmZzZXRfM18zWzJdOwogfTsKIApAQCAtOTMsOCArNzgsOCBAQAogewogCXU4IGJbMl07CiAJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewotCQl7LmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkcmVzcywuZmxhZ3MgPSAwLC5idWYgPSAmcmVnLC5sZW4gPSAxfSwKLQkJey5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGIsLmxlbiA9IDJ9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsICAgICAgICAuYnVmID0gJnJlZywgLmxlbiA9IDEgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIsICAubGVuID0gMiB9LAogCX07CiAJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpICE9IDIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRGlCMDA3MCBJMkMgcmVhZCBmYWlsZWRcbiIpOwpAQCAtMTA2LDcgKzkxLDcgQEAKIHN0YXRpYyBpbnQgZGliMDA3MF93cml0ZV9yZWcoc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHUxNiB2YWwpCiB7CiAJdTggYlszXSA9IHsgcmVnLCB2YWwgPj4gOCwgdmFsICYgMHhmZiB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyZXNzLC5mbGFncyA9IDAsLmJ1ZiA9IGIsLmxlbiA9IDMgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBiLCAubGVuID0gMyB9OwogCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkgIT0gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaUIwMDcwIEkyQyB3cml0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKQEAgLTEyNCwzMCArMTA5LDMwIEBACiAKIHN0YXRpYyBpbnQgZGliMDA3MF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmNoKQogewotCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwotCXUxNiB0bXAgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDAyKSAmIDB4M2ZmZjsKKyAgICBzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKyAgICB1MTYgdG1wID0gZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgwMikgJiAweDNmZmY7CiAKLQlpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6IC8gMTAwMCA+IDcwMDApCi0JCXRtcCB8PSAoMCA8PCAxNCk7Ci0JZWxzZSBpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6IC8gMTAwMCA+IDYwMDApCi0JCXRtcCB8PSAoMSA8PCAxNCk7Ci0JZWxzZSBpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6IC8gMTAwMCA+IDUwMDApCi0JCXRtcCB8PSAoMiA8PCAxNCk7Ci0JZWxzZQotCQl0bXAgfD0gKDMgPDwgMTQpOworICAgIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHovMTAwMCA+IDcwMDApCisJdG1wIHw9ICgwIDw8IDE0KTsKKyAgICBlbHNlIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHovMTAwMCA+IDYwMDApCisJdG1wIHw9ICgxIDw8IDE0KTsKKyAgICBlbHNlIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHovMTAwMCA+IDUwMDApCisJdG1wIHw9ICgyIDw8IDE0KTsKKyAgICBlbHNlCisJdG1wIHw9ICgzIDw8IDE0KTsKIAotCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDAyLCB0bXApOworICAgIGRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDAyLCB0bXApOwogCi0JLyogc2hhcnBlbiB0aGUgQkIgZmlsdGVyIGluIElTREItVCB0byBoYXZlIGhpZ2hlciBpbW11bml0eSB0byBhZGphY2VudCBjaGFubmVscyAqLwotCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPT0gU1lTX0lTREJUKSB7Ci0JCXUxNiB2YWx1ZSA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MTcpOworICAgIC8qIHNoYXJwZW4gdGhlIEJCIGZpbHRlciBpbiBJU0RCLVQgdG8gaGF2ZSBoaWdoZXIgaW1tdW5pdHkgdG8gYWRqYWNlbnQgY2hhbm5lbHMgKi8KKyAgICBpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID09IFNZU19JU0RCVCkgeworCXUxNiB2YWx1ZSA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MTcpOwogCi0JCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCB2YWx1ZSAmIDB4ZmZmYyk7Ci0JCXRtcCA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MDEpICYgMHgwMWZmOwotCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwMSwgdG1wIHwgKDYwIDw8IDkpKTsKKwlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgdmFsdWUgJiAweGZmZmMpOworCXRtcCA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MDEpICYgMHgwMWZmOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCB0bXAgfCAoNjAgPDwgOSkpOwogCi0JCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCB2YWx1ZSk7Ci0JfQorCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCB2YWx1ZSk7CisgICAgfQogCXJldHVybiAwOwogfQogCkBAIC0xNjAsMTQgKzE0NSwxNCBAQAogCWlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzApIHsKIAogCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZiwgMHhlZDEwKTsKLQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTcsIDB4MDAzNCk7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE3LCAgICAweDAwMzQpOwogCiAJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE4LCAweDAwMzIpOwogCQlzdGF0ZS0+c3RlcCA9IHN0YXRlLT5jYXB0cmltID0gc3RhdGUtPmZjYXB0cmltID0gNjQ7CiAJCXN0YXRlLT5hZGNfZGlmZiA9IDMwMDA7CiAJCXJldCA9IDIwOwogCi0JCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8xOworCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8xOwogCX0gZWxzZSBpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RFUF8xKSB7CiAJCXN0YXRlLT5zdGVwIC89IDI7CiAJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE0LCBzdGF0ZS0+bG80IHwgc3RhdGUtPmNhcHRyaW0pOwpAQCAtMTc4LDcgKzE2Myw3IEBACiAKIAkJYWRjID0gZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgxOSk7CiAKLQkJZHByaW50aygiQ0FQVFJJTT0laGQ7IEFEQyA9ICVoZCAoQURDKSAmICVkbVYiLCBzdGF0ZS0+Y2FwdHJpbSwgYWRjLCAodTMyKSBhZGMgKiAodTMyKSAxODAwIC8gKHUzMikgMTAyNCk7CisJCWRwcmludGsoIkNBUFRSSU09JWhkOyBBREMgPSAlaGQgKEFEQykgJiAlZG1WIiwgc3RhdGUtPmNhcHRyaW0sIGFkYywgKHUzMikgYWRjKih1MzIpMTgwMC8odTMyKTEwMjQpOwogCiAJCWlmIChhZGMgPj0gNDAwKSB7CiAJCQlhZGMgLT0gNDAwOwpAQCAtMTkzLDYgKzE3OCw4IEBACiAJCQlzdGF0ZS0+YWRjX2RpZmYgPSBhZGM7CiAJCQlzdGF0ZS0+ZmNhcHRyaW0gPSBzdGF0ZS0+Y2FwdHJpbTsKIAorCisKIAkJfQogCQlzdGF0ZS0+Y2FwdHJpbSArPSAoc3RlcF9zaWduICogc3RhdGUtPnN0ZXApOwogCkBAIC0yMTMsNyArMjAwLDcgQEAKIHN0YXRpYyBpbnQgZGliMDA3MF9zZXRfY3RybF9sbzUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHZjb19iaWFzX3RyaW0sIHU4IGhmX2Rpdl90cmltLCB1OCBjcF9jdXJyZW50LCB1OCB0aGlyZF9vcmRlcl9maWx0KQogewogCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwotCXUxNiBsbzUgPSAodGhpcmRfb3JkZXJfZmlsdCA8PCAxNCkgfCAoMCA8PCAxMykgfCAoMSA8PCAxMikgfCAoMyA8PCA5KSB8IChjcF9jdXJyZW50IDw8IDYpIHwgKGhmX2Rpdl90cmltIDw8IDMpIHwgKHZjb19iaWFzX3RyaW0gPDwgMCk7CisgICAgdTE2IGxvNSA9ICh0aGlyZF9vcmRlcl9maWx0IDw8IDE0KSB8ICgwIDw8IDEzKSB8ICgxIDw8IDEyKSB8ICgzIDw8IDkpIHwgKGNwX2N1cnJlbnQgPDwgNikgfCAoaGZfZGl2X3RyaW0gPDwgMykgfCAodmNvX2JpYXNfdHJpbSA8PCAwKTsKIAlkcHJpbnRrKCJDVFJMX0xPNTogMHgleCIsIGxvNSk7CiAJcmV0dXJuIGRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDE1LCBsbzUpOwogfQpAQCAtMjI3LDk5ICsyMTQsOTkgQEAKIAkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWEsIDB4MDAwMCk7CiAJfSBlbHNlIHsKIAkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWIsIDB4NDExMik7Ci0JCWlmIChzdGF0ZS0+Y2ZnLT52Z2FfZmlsdGVyICE9IDApIHsKLQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFhLCBzdGF0ZS0+Y2ZnLT52Z2FfZmlsdGVyKTsKLQkJCWRwcmludGsoInZnYSBmaWx0ZXIgcmVnaXN0ZXIgaXMgc2V0IHRvICV4Iiwgc3RhdGUtPmNmZy0+dmdhX2ZpbHRlcik7Ci0JCX0gZWxzZQotCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWEsIDB4MDAwOSk7CisJaWYgKHN0YXRlLT5jZmctPnZnYV9maWx0ZXIgIT0gMCkgeworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxYSwgc3RhdGUtPmNmZy0+dmdhX2ZpbHRlcik7CisJCWRwcmludGsoInZnYSBmaWx0ZXIgcmVnaXN0ZXIgaXMgc2V0IHRvICV4Iiwgc3RhdGUtPmNmZy0+dmdhX2ZpbHRlcik7CisJfSBlbHNlCisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFhLCAweDAwMDkpOwogCX0KIH0KIAogRVhQT1JUX1NZTUJPTChkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcik7CiBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgewotCXUzMiBtYXhfZnJlcTsJCS8qIGZvciBldmVyeSBmcmVxdWVuY3kgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoYXQgZmllbGQ6IHRoaXMgaW5mb3JtYXRpb24gaXMgY29ycmVjdCAqLwotCXU4IHN3aXRjaF90cmltOwotCXU4IHZjb19iYW5kOwotCXU4IGhmZGl2OwotCXU4IHZjb19tdWx0aTsKLQl1OCBwcmVzYzsKLQl1OCB3YmRtdXg7Ci0JdTE2IHR1bmVyX2VuYWJsZTsKKyAgICB1MzIgbWF4X2ZyZXE7IC8qIGZvciBldmVyeSBmcmVxdWVuY3kgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoYXQgZmllbGQ6IHRoaXMgaW5mb3JtYXRpb24gaXMgY29ycmVjdCAqLworICAgIHU4IHN3aXRjaF90cmltOworICAgIHU4IHZjb19iYW5kOworICAgIHU4IGhmZGl2OworICAgIHU4IHZjb19tdWx0aTsKKyAgICB1OCBwcmVzYzsKKyAgICB1OCB3YmRtdXg7CisgICAgdTE2IHR1bmVyX2VuYWJsZTsKIH07CiAKIHN0cnVjdCBkaWIwMDcwX2xuYV9tYXRjaCB7Ci0JdTMyIG1heF9mcmVxOwkJLyogZm9yIGV2ZXJ5IGZyZXF1ZW5jeSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhhdCBmaWVsZDogdGhpcyBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0ICovCi0JdTggbG5hX2JhbmQ7CisgICAgdTMyIG1heF9mcmVxOyAvKiBmb3IgZXZlcnkgZnJlcXVlbmN5IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGF0IGZpZWxkOiB0aGlzIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QgKi8KKyAgICB1OCBsbmFfYmFuZDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgZGliMDA3MHNfdHVuaW5nX3RhYmxlW10gPSB7Ci0JezU3MDAwMCwgMiwgMSwgMywgNiwgNiwgMiwgMHg0MDAwIHwgMHgwODAwfSwJLyogVUhGICovCi0JezcwMDAwMCwgMiwgMCwgMiwgNCwgMiwgMiwgMHg0MDAwIHwgMHgwODAwfSwKLQl7ODYzOTk5LCAyLCAxLCAyLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAotCXsxNTAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAkvKiBMQkFORCAqLwotCXsxNjAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAotCXsyMDAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAotCXsweGZmZmZmZmZmLCAwLCAwLCA4LCAxLCAyLCAxLCAweDgwMDAgfCAweDEwMDB9LAkvKiBTQkFORCAqLworICAgIHsgICAgIDU3MDAwMCwgMiwgMSwgMywgNiwgNiwgMiwgMHg0MDAwIHwgMHgwODAwIH0sIC8qIFVIRiAqLworICAgIHsgICAgIDcwMDAwMCwgMiwgMCwgMiwgNCwgMiwgMiwgMHg0MDAwIHwgMHgwODAwIH0sCisgICAgeyAgICAgODYzOTk5LCAyLCAxLCAyLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDAgfSwKKyAgICB7ICAgIDE1MDAwMDAsIDAsIDEsIDEsIDIsIDIsIDQsIDB4MjAwMCB8IDB4MDQwMCB9LCAvKiBMQkFORCAqLworICAgIHsgICAgMTYwMDAwMCwgMCwgMSwgMSwgMiwgMiwgNCwgMHgyMDAwIHwgMHgwNDAwIH0sCisgICAgeyAgICAyMDAwMDAwLCAwLCAxLCAxLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDAsIDAsIDgsIDEsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMCB9LCAvKiBTQkFORCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX3R1bmluZyBkaWIwMDcwX3R1bmluZ190YWJsZVtdID0gewotCXsxMTUwMDAsIDEsIDAsIDcsIDI0LCAyLCAxLCAweDgwMDAgfCAweDEwMDB9LAkvKiBGTSBiZWxvdyA5Mk1IeiBjYW5ub3QgYmUgdHVuZWQgKi8KLQl7MTc5NTAwLCAxLCAwLCAzLCAxNiwgMiwgMSwgMHg4MDAwIHwgMHgxMDAwfSwJLyogVkhGICovCi0JezE4OTk5OSwgMSwgMSwgMywgMTYsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMH0sCi0JezI1MDAwMCwgMSwgMCwgNiwgMTIsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMH0sCi0JezU2OTk5OSwgMiwgMSwgNSwgNiwgMiwgMiwgMHg0MDAwIHwgMHgwODAwfSwJLyogVUhGICovCi0JezY5OTk5OSwgMiwgMCwgMSwgNCwgMiwgMiwgMHg0MDAwIHwgMHgwODAwfSwKLQl7ODYzOTk5LCAyLCAxLCAxLCA0LCAyLCAyLCAweDQwMDAgfCAweDA4MDB9LAotCXsweGZmZmZmZmZmLCAwLCAxLCAwLCAyLCAyLCA0LCAweDIwMDAgfCAweDA0MDB9LAkvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLworICAgIHsgICAgIDExNTAwMCwgMSwgMCwgNywgMjQsIDIsIDEsIDB4ODAwMCB8IDB4MTAwMCB9LCAvKiBGTSBiZWxvdyA5Mk1IeiBjYW5ub3QgYmUgdHVuZWQgKi8KKyAgICB7ICAgICAxNzk1MDAsIDEsIDAsIDMsIDE2LCAyLCAxLCAweDgwMDAgfCAweDEwMDAgfSwgLyogVkhGICovCisgICAgeyAgICAgMTg5OTk5LCAxLCAxLCAzLCAxNiwgMiwgMSwgMHg4MDAwIHwgMHgxMDAwIH0sCisgICAgeyAgICAgMjUwMDAwLCAxLCAwLCA2LCAxMiwgMiwgMSwgMHg4MDAwIHwgMHgxMDAwIH0sCisgICAgeyAgICAgNTY5OTk5LCAyLCAxLCA1LCAgNiwgMiwgMiwgMHg0MDAwIHwgMHgwODAwIH0sIC8qIFVIRiAqLworICAgIHsgICAgIDY5OTk5OSwgMiwgMCwgMSwgIDQsIDIsIDIsIDB4NDAwMCB8IDB4MDgwMCB9LAorICAgIHsgICAgIDg2Mzk5OSwgMiwgMSwgMSwgIDQsIDIsIDIsIDB4NDAwMCB8IDB4MDgwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMCwgMSwgMCwgIDIsIDIsIDQsIDB4MjAwMCB8IDB4MDQwMCB9LCAvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX2xuYV9tYXRjaCBkaWIwMDcwX2xuYV9mbGlwX2NoaXBbXSA9IHsKLQl7MTgwMDAwLCAwfSwJCS8qIFZIRiAqLwotCXsxODgwMDAsIDF9LAotCXsxOTY0MDAsIDJ9LAotCXsyNTAwMDAsIDN9LAotCXs1NTAwMDAsIDB9LAkJLyogVUhGICovCi0JezU5MDAwMCwgMX0sCi0JezY2NjAwMCwgM30sCi0Jezg2NDAwMCwgNX0sCi0JezE1MDAwMDAsIDB9LAkJLyogTEJBTkQgb3IgZXZlcnl0aGluZyBoaWdoZXIgdGhhbiBVSEYgKi8KLQl7MTYwMDAwMCwgMX0sCi0JezIwMDAwMDAsIDN9LAotCXsweGZmZmZmZmZmLCA3fSwKKyAgICB7ICAgICAxODAwMDAsIDAgfSwgLyogVkhGICovCisgICAgeyAgICAgMTg4MDAwLCAxIH0sCisgICAgeyAgICAgMTk2NDAwLCAyIH0sCisgICAgeyAgICAgMjUwMDAwLCAzIH0sCisgICAgeyAgICAgNTUwMDAwLCAwIH0sIC8qIFVIRiAqLworICAgIHsgICAgIDU5MDAwMCwgMSB9LAorICAgIHsgICAgIDY2NjAwMCwgMyB9LAorICAgIHsgICAgIDg2NDAwMCwgNSB9LAorICAgIHsgICAgMTUwMDAwMCwgMCB9LCAvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLworICAgIHsgICAgMTYwMDAwMCwgMSB9LAorICAgIHsgICAgMjAwMDAwMCwgMyB9LAorICAgIHsgMHhmZmZmZmZmZiwgNyB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDcwX2xuYV9tYXRjaCBkaWIwMDcwX2xuYVtdID0gewotCXsxODAwMDAsIDB9LAkJLyogVkhGICovCi0JezE4ODAwMCwgMX0sCi0JezE5NjQwMCwgMn0sCi0JezI1MDAwMCwgM30sCi0JezU1MDAwMCwgMn0sCQkvKiBVSEYgKi8KLQl7NjUwMDAwLCAzfSwKLQl7NzUwMDAwLCA1fSwKLQl7ODUwMDAwLCA2fSwKLQl7ODY0MDAwLCA3fSwKLQl7MTUwMDAwMCwgMH0sCQkvKiBMQkFORCBvciBldmVyeXRoaW5nIGhpZ2hlciB0aGFuIFVIRiAqLwotCXsxNjAwMDAwLCAxfSwKLQl7MjAwMDAwMCwgM30sCi0JezB4ZmZmZmZmZmYsIDd9LAorICAgIHsgICAgIDE4MDAwMCwgMCB9LCAvKiBWSEYgKi8KKyAgICB7ICAgICAxODgwMDAsIDEgfSwKKyAgICB7ICAgICAxOTY0MDAsIDIgfSwKKyAgICB7ICAgICAyNTAwMDAsIDMgfSwKKyAgICB7ICAgICA1NTAwMDAsIDIgfSwgLyogVUhGICovCisgICAgeyAgICAgNjUwMDAwLCAzIH0sCisgICAgeyAgICAgNzUwMDAwLCA1IH0sCisgICAgeyAgICAgODUwMDAwLCA2IH0sCisgICAgeyAgICAgODY0MDAwLCA3IH0sCisgICAgeyAgICAxNTAwMDAwLCAwIH0sIC8qIExCQU5EIG9yIGV2ZXJ5dGhpbmcgaGlnaGVyIHRoYW4gVUhGICovCisgICAgeyAgICAxNjAwMDAwLCAxIH0sCisgICAgeyAgICAyMDAwMDAwLCAzIH0sCisgICAgeyAweGZmZmZmZmZmLCA3IH0sCiB9OwogCi0jZGVmaW5lIExQRgkxMDAJCS8vIGRlZmluZSBmb3IgdGhlIGxvb3AgZmlsdGVyIDEwMGtIeiBieSBkZWZhdWx0IDE2LTA3LTA2CisjZGVmaW5lIExQRgkxMDAKIHN0YXRpYyBpbnQgZGliMDA3MF90dW5lX2RpZ2l0YWwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqY2gpCiB7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisgICAgc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAKLQljb25zdCBzdHJ1Y3QgZGliMDA3MF90dW5pbmcgKnR1bmU7Ci0JY29uc3Qgc3RydWN0IGRpYjAwNzBfbG5hX21hdGNoICpsbmFfbWF0Y2g7CisgICAgY29uc3Qgc3RydWN0IGRpYjAwNzBfdHVuaW5nICp0dW5lOworICAgIGNvbnN0IHN0cnVjdCBkaWIwMDcwX2xuYV9tYXRjaCAqbG5hX21hdGNoOwogCi0JZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlID0gJnN0YXRlLT50dW5lX3N0YXRlOwotCWludCByZXQgPSAxMDsJCS8qIDFtcyBpcyB0aGUgZGVmYXVsdCBkZWxheSBtb3N0IG9mIHRoZSB0aW1lICovCisgICAgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlID0gJnN0YXRlLT50dW5lX3N0YXRlOworICAgIGludCByZXQgPSAxMDsgLyogMW1zIGlzIHRoZSBkZWZhdWx0IGRlbGF5IG1vc3Qgb2YgdGhlIHRpbWUgKi8KIAotCXU4IGJhbmQgPSAodTgpIEJBTkRfT0ZfRlJFUVVFTkNZKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMCk7Ci0JdTMyIGZyZXEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSAvIDEwMDAgKyAoYmFuZCA9PSBCQU5EX1ZIRiA/IHN0YXRlLT5jZmctPmZyZXFfb2Zmc2V0X2toel92aGYgOiBzdGF0ZS0+Y2ZnLT5mcmVxX29mZnNldF9raHpfdWhmKTsKKyAgICB1OCAgYmFuZCA9ICh1OClCQU5EX09GX0ZSRVFVRU5DWShmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeS8xMDAwKTsKKyAgICB1MzIgZnJlcSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5LzEwMDAgKyAoYmFuZCA9PSBCQU5EX1ZIRiA/IHN0YXRlLT5jZmctPmZyZXFfb2Zmc2V0X2toel92aGYgOiBzdGF0ZS0+Y2ZnLT5mcmVxX29mZnNldF9raHpfdWhmKTsKIAogI2lmZGVmIENPTkZJR19TWVNfSVNEQlQKLQlpZiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID09IFNZU19JU0RCVCAmJiBzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9tb2RlID09IDEpCisgICAgaWYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfSVNEQlQgJiYgc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKQogCQlpZiAoKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikKIAkJICAgICAmJiAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2Jfc2VnbWVudF9pZHggPT0gKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50IC8gMikgKyAxKSkpCiAJCSAgICB8fCAoKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2NvdW50ICUgMikgPT0gMCkKQEAgLTMyOCwxNzIgKzMxNSwxODAgQEAKIAkJCSYmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pc2RidF9zYl9zZWdtZW50X2lkeCA9PSAoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX3NlZ21lbnRfY291bnQgLyAyKSArIDEpKSkpCiAJCQlmcmVxICs9IDg1MDsKICNlbmRpZgorICAgIGlmIChzdGF0ZS0+Y3VycmVudF9yZiAhPSBmcmVxKSB7CisKKwlzd2l0Y2ggKHN0YXRlLT5yZXZpc2lvbikgeworCWNhc2UgRElCMDA3MFNfUDFBOgorCSAgICB0dW5lID0gZGliMDA3MHNfdHVuaW5nX3RhYmxlOworCSAgICBsbmFfbWF0Y2ggPSBkaWIwMDcwX2xuYTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdHVuZSA9IGRpYjAwNzBfdHVuaW5nX3RhYmxlOworCSAgICBpZiAoc3RhdGUtPmNmZy0+ZmxpcF9jaGlwKQorCQlsbmFfbWF0Y2ggPSBkaWIwMDcwX2xuYV9mbGlwX2NoaXA7CisJICAgIGVsc2UKKwkJbG5hX21hdGNoID0gZGliMDA3MF9sbmE7CisJICAgIGJyZWFrOworCX0KKwl3aGlsZSAoZnJlcSA+IHR1bmUtPm1heF9mcmVxKSAvKiBmaW5kIHRoZSByaWdodCBvbmUgKi8KKwkgICAgdHVuZSsrOworCXdoaWxlIChmcmVxID4gbG5hX21hdGNoLT5tYXhfZnJlcSkgLyogZmluZCB0aGUgcmlnaHQgb25lICovCisJICAgIGxuYV9tYXRjaCsrOworCisJc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleCA9IHR1bmU7CisJc3RhdGUtPmxuYV9tYXRjaCA9IGxuYV9tYXRjaDsKKyAgICB9CisKKyAgICBpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RBUlQpIHsKKwlkcHJpbnRrKCJUdW5pbmcgZm9yIEJhbmQ6ICVoZCAoJWQga0h6KSIsIGJhbmQsIGZyZXEpOwogCWlmIChzdGF0ZS0+Y3VycmVudF9yZiAhPSBmcmVxKSB7CisJCXU4IFJFRkRJVjsKKwkJdTMyIEZCRGl2LCBSZXN0LCBGUkVGLCBWQ09GX2tIejsKKwkJdTggRGVuOworCisJCXN0YXRlLT5jdXJyZW50X3JmID0gZnJlcTsKKwkJc3RhdGUtPmxvNCA9IChzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT52Y29fYmFuZCA8PCAxMSkgfCAoc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+aGZkaXYgPDwgNyk7CisKKworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgMHgzMCk7CisKKworCQlWQ09GX2tIeiA9IHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19tdWx0aSAqIGZyZXEgKiAyOworCisJCXN3aXRjaCAoYmFuZCkgeworCQljYXNlIEJBTkRfVkhGOgorCQkJUkVGRElWID0gKHU4KSAoKHN0YXRlLT5jZmctPmNsb2NrX2toeiArIDk5OTkpIC8gMTAwMDApOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9GTToKKwkJCVJFRkRJViA9ICh1OCkgKChzdGF0ZS0+Y2ZnLT5jbG9ja19raHopIC8gMTAwMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJFRkRJViA9ICh1OCkgKHN0YXRlLT5jZmctPmNsb2NrX2toeiAgLyAxMDAwMCk7CisJCQlicmVhazsKKwkJfQorCQlGUkVGID0gc3RhdGUtPmNmZy0+Y2xvY2tfa2h6IC8gUkVGRElWOworCisKIAogCQlzd2l0Y2ggKHN0YXRlLT5yZXZpc2lvbikgewogCQljYXNlIERJQjAwNzBTX1AxQToKLQkJCXR1bmUgPSBkaWIwMDcwc190dW5pbmdfdGFibGU7Ci0JCQlsbmFfbWF0Y2ggPSBkaWIwMDcwX2xuYTsKKwkJCUZCRGl2ID0gKFZDT0Zfa0h6IC8gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+cHJlc2MgLyBGUkVGKTsKKwkJCVJlc3QgID0gKFZDT0Zfa0h6IC8gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+cHJlc2MpIC0gRkJEaXYgKiBGUkVGOwogCQkJYnJlYWs7CisKKwkJY2FzZSBESUIwMDcwX1AxRzoKKwkJY2FzZSBESUIwMDcwX1AxRjoKIAkJZGVmYXVsdDoKLQkJCXR1bmUgPSBkaWIwMDcwX3R1bmluZ190YWJsZTsKLQkJCWlmIChzdGF0ZS0+Y2ZnLT5mbGlwX2NoaXApCi0JCQkJbG5hX21hdGNoID0gZGliMDA3MF9sbmFfZmxpcF9jaGlwOwotCQkJZWxzZQotCQkJCWxuYV9tYXRjaCA9IGRpYjAwNzBfbG5hOworCQkJRkJEaXYgPSAoZnJlcSAvIChGUkVGIC8gMikpOworCQkJUmVzdCAgPSAyICogZnJlcSAtIEZCRGl2ICogRlJFRjsKIAkJCWJyZWFrOwogCQl9Ci0JCXdoaWxlIChmcmVxID4gdHVuZS0+bWF4X2ZyZXEpCS8qIGZpbmQgdGhlIHJpZ2h0IG9uZSAqLwotCQkJdHVuZSsrOwotCQl3aGlsZSAoZnJlcSA+IGxuYV9tYXRjaC0+bWF4X2ZyZXEpCS8qIGZpbmQgdGhlIHJpZ2h0IG9uZSAqLwotCQkJbG5hX21hdGNoKys7CiAKLQkJc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleCA9IHR1bmU7Ci0JCXN0YXRlLT5sbmFfbWF0Y2ggPSBsbmFfbWF0Y2g7Ci0JfQorCQlpZiAoUmVzdCA8IExQRikKKwkJCVJlc3QgPSAwOworCQllbHNlIGlmIChSZXN0IDwgMiAqIExQRikKKwkJCVJlc3QgPSAyICogTFBGOworCQllbHNlIGlmIChSZXN0ID4gKEZSRUYgLSBMUEYpKSB7CisJCQlSZXN0ID0gMDsKKwkJCUZCRGl2ICs9IDE7CisJCX0gZWxzZSBpZiAoUmVzdCA+IChGUkVGIC0gMiAqIExQRikpCisJCQlSZXN0ID0gRlJFRiAtIDIgKiBMUEY7CisJCVJlc3QgPSAoUmVzdCAqIDY1MjgpIC8gKEZSRUYgLyAxMCk7CiAKLQlpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RBUlQpIHsKLQkJZHByaW50aygiVHVuaW5nIGZvciBCYW5kOiAlaGQgKCVkIGtIeikiLCBiYW5kLCBmcmVxKTsKLQkJaWYgKHN0YXRlLT5jdXJyZW50X3JmICE9IGZyZXEpIHsKLQkJCXU4IFJFRkRJVjsKLQkJCXUzMiBGQkRpdiwgUmVzdCwgRlJFRiwgVkNPRl9rSHo7Ci0JCQl1OCBEZW47Ci0KLQkJCXN0YXRlLT5jdXJyZW50X3JmID0gZnJlcTsKLQkJCXN0YXRlLT5sbzQgPSAoc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+dmNvX2JhbmQgPDwgMTEpIHwgKHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPmhmZGl2IDw8IDcpOwotCi0JCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgMHgzMCk7Ci0KLQkJCVZDT0Zfa0h6ID0gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+dmNvX211bHRpICogZnJlcSAqIDI7Ci0KLQkJCXN3aXRjaCAoYmFuZCkgewotCQkJY2FzZSBCQU5EX1ZIRjoKLQkJCQlSRUZESVYgPSAodTgpICgoc3RhdGUtPmNmZy0+Y2xvY2tfa2h6ICsgOTk5OSkgLyAxMDAwMCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJBTkRfRk06Ci0JCQkJUkVGRElWID0gKHU4KSAoKHN0YXRlLT5jZmctPmNsb2NrX2toeikgLyAxMDAwKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJUkVGRElWID0gKHU4KSAoc3RhdGUtPmNmZy0+Y2xvY2tfa2h6IC8gMTAwMDApOwotCQkJCWJyZWFrOwotCQkJfQotCQkJRlJFRiA9IHN0YXRlLT5jZmctPmNsb2NrX2toeiAvIFJFRkRJVjsKLQotCQkJc3dpdGNoIChzdGF0ZS0+cmV2aXNpb24pIHsKLQkJCWNhc2UgRElCMDA3MFNfUDFBOgotCQkJCUZCRGl2ID0gKFZDT0Zfa0h6IC8gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+cHJlc2MgLyBGUkVGKTsKLQkJCQlSZXN0ID0gKFZDT0Zfa0h6IC8gc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+cHJlc2MpIC0gRkJEaXYgKiBGUkVGOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIERJQjAwNzBfUDFHOgotCQkJY2FzZSBESUIwMDcwX1AxRjoKLQkJCWRlZmF1bHQ6Ci0JCQkJRkJEaXYgPSAoZnJlcSAvIChGUkVGIC8gMikpOwotCQkJCVJlc3QgPSAyICogZnJlcSAtIEZCRGl2ICogRlJFRjsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKFJlc3QgPCBMUEYpCi0JCQkJUmVzdCA9IDA7Ci0JCQllbHNlIGlmIChSZXN0IDwgMiAqIExQRikKLQkJCQlSZXN0ID0gMiAqIExQRjsKLQkJCWVsc2UgaWYgKFJlc3QgPiAoRlJFRiAtIExQRikpIHsKLQkJCQlSZXN0ID0gMDsKLQkJCQlGQkRpdiArPSAxOwotCQkJfSBlbHNlIGlmIChSZXN0ID4gKEZSRUYgLSAyICogTFBGKSkKLQkJCQlSZXN0ID0gRlJFRiAtIDIgKiBMUEY7Ci0JCQlSZXN0ID0gKFJlc3QgKiA2NTI4KSAvIChGUkVGIC8gMTApOwotCi0JCQlEZW4gPSAxOwotCQkJaWYgKFJlc3QgPiAwKSB7Ci0JCQkJc3RhdGUtPmxvNCB8PSAoMSA8PCAxNCkgfCAoMSA8PCAxMik7Ci0JCQkJRGVuID0gMjU1OwotCQkJfQotCi0JCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMSwgKHUxNikgRkJEaXYpOwotCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTIsIChEZW4gPDwgOCkgfCBSRUZESVYpOwotCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTMsICh1MTYpIFJlc3QpOwotCi0JCQlpZiAoc3RhdGUtPnJldmlzaW9uID09IERJQjAwNzBTX1AxQSkgewotCi0JCQkJaWYgKGJhbmQgPT0gQkFORF9TQkFORCkgewotCQkJCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgMiwgNCwgMywgMCk7Ci0JCQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDFkLCAweEZGRkYpOwotCQkJCX0gZWxzZQotCQkJCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgNSwgNCwgMywgMSk7Ci0JCQl9Ci0KLQkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDIwLAotCQkJCQkgIDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSB8IHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnR1bmVyX2VuYWJsZSk7Ci0KLQkJCWRwcmludGsoIlJFRkRJVjogJWhkLCBGUkVGOiAlZCIsIFJFRkRJViwgRlJFRik7Ci0JCQlkcHJpbnRrKCJGQkRJVjogJWQsIFJlc3Q6ICVkIiwgRkJEaXYsIFJlc3QpOwotCQkJZHByaW50aygiTnVtOiAlaGQsIERlbjogJWhkLCBTRDogJWhkIiwgKHUxNikgUmVzdCwgRGVuLCAoc3RhdGUtPmxvNCA+PiAxMikgJiAweDEpOwotCQkJZHByaW50aygiSEZESVYgY29kZTogJWhkIiwgc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+aGZkaXYpOwotCQkJZHByaW50aygiVkNPID0gJWhkIiwgc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleC0+dmNvX2JhbmQpOwotCQkJZHByaW50aygiVkNPRjogKCglaGQqJWQpIDw8IDEpKSIsIHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19tdWx0aSwgZnJlcSk7Ci0KLQkJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8wOwotCQl9IGVsc2UgewkvKiB3ZSBhcmUgYWxyZWFkeSB0dW5lZCB0byB0aGlzIGZyZXF1ZW5jeSAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3QgICovCi0JCQlyZXQgPSA1MDsJLyogd2FrZXVwIHRpbWUgKi8KLQkJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF81OworCQlEZW4gPSAxOworCQlpZiAoUmVzdCA+IDApIHsKKwkJCXN0YXRlLT5sbzQgfD0gKDEgPDwgMTQpIHwgKDEgPDwgMTIpOworCQkJRGVuID0gMjU1OwogCQl9Ci0JfSBlbHNlIGlmICgoKnR1bmVfc3RhdGUgPiBDVF9UVU5FUl9TVEFSVCkgJiYgKCp0dW5lX3N0YXRlIDwgQ1RfVFVORVJfU1RFUF80KSkgewogCi0JCXJldCA9IGRpYjAwNzBfY2FwdHJpbShzdGF0ZSwgdHVuZV9zdGF0ZSk7CiAKLQl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfNCkgewotCQljb25zdCBzdHJ1Y3QgZGliMDA3MF93YmRfZ2Fpbl9jZmcgKnRtcCA9IHN0YXRlLT5jZmctPndiZF9nYWluOwotCQlpZiAodG1wICE9IE5VTEwpIHsKLQkJCXdoaWxlIChmcmVxIC8gMTAwMCA+IHRtcC0+ZnJlcSkJLyogZmluZCB0aGUgcmlnaHQgb25lICovCi0JCQkJdG1wKys7Ci0JCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZiwKLQkJCQkJICAoMCA8PCAxNSkgfCAoMSA8PCAxNCkgfCAoMyA8PCAxMikgfCAodG1wLT53YmRfZ2Fpbl92YWwgPDwgOSkgfCAoMCA8PCA4KSB8ICgxIDw8IDcpIHwgKHN0YXRlLT4KLQkJCQkJCQkJCQkJCQkJCQljdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPgotCQkJCQkJCQkJCQkJCQkJCXdiZG11eCA8PCAwKSk7Ci0JCQlzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCA9IHRtcC0+d2JkX2dhaW5fdmFsOwotCQl9IGVsc2UgeworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMSwgKHUxNilGQkRpdik7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDEyLCAoRGVuIDw8IDgpIHwgUkVGRElWKTsKKwkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTMsICh1MTYpIFJlc3QpOworCisJCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gRElCMDA3MFNfUDFBKSB7CisKKwkJCWlmIChiYW5kID09IEJBTkRfU0JBTkQpIHsKKwkJCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgMiwgNCwgMywgMCk7CisJCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MWQsIDB4RkZGRik7CisJCQl9IGVsc2UKKwkJCQlkaWIwMDcwX3NldF9jdHJsX2xvNShmZSwgNSwgNCwgMywgMSk7CisJCX0KKworCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyMCwKKwkJCTB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSB8IHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnR1bmVyX2VuYWJsZSk7CisKKwkJZHByaW50aygiUkVGRElWOiAlaGQsIEZSRUY6ICVkIiwgUkVGRElWLCBGUkVGKTsKKwkJZHByaW50aygiRkJESVY6ICVkLCBSZXN0OiAlZCIsIEZCRGl2LCBSZXN0KTsKKwkJZHByaW50aygiTnVtOiAlaGQsIERlbjogJWhkLCBTRDogJWhkIiwgKHUxNikgUmVzdCwgRGVuLCAoc3RhdGUtPmxvNCA+PiAxMikgJiAweDEpOworCQlkcHJpbnRrKCJIRkRJViBjb2RlOiAlaGQiLCBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT5oZmRpdik7CisJCWRwcmludGsoIlZDTyA9ICVoZCIsIHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19iYW5kKTsKKwkJZHByaW50aygiVkNPRjogKCglaGQqJWQpIDw8IDEpKSIsIHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPnZjb19tdWx0aSwgZnJlcSk7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzA7CisJfSBlbHNlIHsgLyogd2UgYXJlIGFscmVhZHkgdHVuZWQgdG8gdGhpcyBmcmVxdWVuY3kgLSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb3JyZWN0ICAqLworCQlyZXQgPSA1MDsgLyogd2FrZXVwIHRpbWUgKi8KKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzU7CisJfQorICAgIH0gZWxzZSBpZiAoKCp0dW5lX3N0YXRlID4gQ1RfVFVORVJfU1RBUlQpICYmICgqdHVuZV9zdGF0ZSA8IENUX1RVTkVSX1NURVBfNCkpIHsKKworCXJldCA9IGRpYjAwNzBfY2FwdHJpbShzdGF0ZSwgdHVuZV9zdGF0ZSk7CisKKyAgICB9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfNCkgeworCWNvbnN0IHN0cnVjdCBkaWIwMDcwX3diZF9nYWluX2NmZyAqdG1wID0gc3RhdGUtPmNmZy0+d2JkX2dhaW47CisJaWYgKHRtcCAhPSBOVUxMKSB7CisJCXdoaWxlIChmcmVxLzEwMDAgPiB0bXAtPmZyZXEpIC8qIGZpbmQgdGhlIHJpZ2h0IG9uZSAqLworCQkJdG1wKys7CisJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLAorCQkJKDAgPDwgMTUpIHwgKDEgPDwgMTQpIHwgKDMgPDwgMTIpCisJCQl8ICh0bXAtPndiZF9nYWluX3ZhbCA8PCA5KSB8ICgwIDw8IDgpIHwgKDEgPDwgNykKKwkJCXwgKHN0YXRlLT5jdXJyZW50X3R1bmVfdGFibGVfaW5kZXgtPndiZG11eCA8PCAwKSk7CisJCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gdG1wLT53YmRfZ2Fpbl92YWw7CisJfSBlbHNlIHsKIAkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLAogCQkJCQkgICgwIDw8IDE1KSB8ICgxIDw8IDE0KSB8ICgzIDw8IDEyKSB8ICg2IDw8IDkpIHwgKDAgPDwgOCkgfCAoMSA8PCA3KSB8IChzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT4KIAkJCQkJCQkJCQkJCQkJd2JkbXV4IDw8IDApKTsKLQkJCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gNjsKLQkJfQorCSAgICBzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCA9IDY7CisJfQogCi0JCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDA2LCAweDNmZmYpOworCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDA2LCAweDNmZmYpOwogCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwNywKIAkJCQkgIChzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4LT5zd2l0Y2hfdHJpbSA8PCAxMSkgfCAoNyA8PCA4KSB8IChzdGF0ZS0+bG5hX21hdGNoLT5sbmFfYmFuZCA8PCAzKSB8ICgzIDw8IDApKTsKLQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDgsIChzdGF0ZS0+bG5hX21hdGNoLT5sbmFfYmFuZCA8PCAxMCkgfCAoMyA8PCA3KSB8ICgxMjcpKTsKLQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MGQsIDB4MGQ4MCk7CisJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDgsIChzdGF0ZS0+bG5hX21hdGNoLT5sbmFfYmFuZCA8PCAxMCkgfCAoMyA8PCA3KSB8ICgxMjcpKTsKKwlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZCwgMHgwZDgwKTsKIAotCQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOCwgMHgwN2ZmKTsKLQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTcsIDB4MDAzMyk7CiAKLQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzU7Ci0JfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzUpIHsKLQkJZGliMDA3MF9zZXRfYmFuZHdpZHRoKGZlLCBjaCk7Ci0JCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RPUDsKLQl9IGVsc2UgewotCQlyZXQgPSBGRV9DQUxMQkFDS19USU1FX05FVkVSOwkvKiB0dW5lciBmaW5pc2hlZCwgdGltZSB0byBjYWxsIGFnYWluIGluZmluaXRlICovCi0JfQotCXJldHVybiByZXQ7CisJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTgsICAgMHgwN2ZmKTsKKwlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNywgMHgwMDMzKTsKKworCisJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzU7CisgICAgfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzUpIHsKKwlkaWIwMDcwX3NldF9iYW5kd2lkdGgoZmUsIGNoKTsKKwkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NUT1A7CisgICAgfSBlbHNlIHsKKwlyZXQgPSBGRV9DQUxMQkFDS19USU1FX05FVkVSOyAvKiB0dW5lciBmaW5pc2hlZCwgdGltZSB0byBjYWxsIGFnYWluIGluZmluaXRlICovCisgICAgfQorICAgIHJldHVybiByZXQ7CiB9CiAKKwogc3RhdGljIGludCBkaWIwMDcwX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKLQl1aW50MzJfdCByZXQ7CisgICAgc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisgICAgdWludDMyX3QgcmV0OwogCi0Jc3RhdGUtPnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEFSVDsKKyAgICBzdGF0ZS0+dHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NUQVJUOwogCi0JZG8gewotCQlyZXQgPSBkaWIwMDcwX3R1bmVfZGlnaXRhbChmZSwgcCk7Ci0JCWlmIChyZXQgIT0gRkVfQ0FMTEJBQ0tfVElNRV9ORVZFUikKLQkJCW1zbGVlcChyZXQgLyAxMCk7Ci0JCWVsc2UKLQkJCWJyZWFrOwotCX0gd2hpbGUgKHN0YXRlLT50dW5lX3N0YXRlICE9IENUX1RVTkVSX1NUT1ApOworICAgIGRvIHsKKwlyZXQgPSBkaWIwMDcwX3R1bmVfZGlnaXRhbChmZSwgcCk7CisJaWYgKHJldCAhPSBGRV9DQUxMQkFDS19USU1FX05FVkVSKQorCQltc2xlZXAocmV0LzEwKTsKKwllbHNlCisJICAgIGJyZWFrOworICAgIH0gd2hpbGUgKHN0YXRlLT50dW5lX3N0YXRlICE9IENUX1RVTkVSX1NUT1ApOwogCi0JcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGliMDA3MF93YWtldXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC01MTIsOTIgKzUwNywxMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHUxNiBkaWIwMDcwX3AxZl9kZWZhdWx0c1tdID0gewordTggZGliMDA3MF9nZXRfcmZfb3V0cHV0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXJldHVybiAoZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgwNykgPj4gMTEpICYgMHgzOworfQorRVhQT1JUX1NZTUJPTChkaWIwMDcwX2dldF9yZl9vdXRwdXQpOworCitpbnQgZGliMDA3MF9zZXRfcmZfb3V0cHV0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBubykKK3sKKwlzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MTYgcnhyZjIgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDA3KSAmIDB4ZmU3ZmY7CisJaWYgKG5vID4gMykKKwkJbm8gPSAzOworCWlmIChubyA8IDEpCisJCW5vID0gMTsKKwlyZXR1cm4gZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDcsIHJ4cmYyIHwgKG5vIDw8IDExKSk7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjAwNzBfc2V0X3JmX291dHB1dCk7CisKK3N0YXRpYyBjb25zdCB1MTYgZGliMDA3MF9wMWZfZGVmYXVsdHNbXSA9CisKK3sKIAk3LCAweDAyLAotCTB4MDAwOCwKLQkweDAwMDAsCi0JMHgwMDAwLAotCTB4MDAwMCwKLQkweDAwMDAsCi0JMHgwMDAyLAotCTB4MDEwMCwKKwkJMHgwMDA4LAorCQkweDAwMDAsCisJCTB4MDAwMCwKKwkJMHgwMDAwLAorCQkweDAwMDAsCisJCTB4MDAwMiwKKwkJMHgwMTAwLAogCiAJMywgMHgwZCwKLQkweDBkODAsCi0JMHgwMDAxLAotCTB4MDAwMCwKKwkJMHgwZDgwLAorCQkweDAwMDEsCisJCTB4MDAwMCwKIAogCTQsIDB4MTEsCi0JMHgwMDAwLAotCTB4MDEwMywKLQkweDAwMDAsCi0JMHgwMDAwLAorCQkweDAwMDAsCisJCTB4MDEwMywKKwkJMHgwMDAwLAorCQkweDAwMDAsCiAKIAkzLCAweDE2LAotCTB4MDAwNCB8IDB4MDA0MCwKLQkweDAwMzAsCi0JMHgwN2ZmLAorCQkweDAwMDQgfCAweDAwNDAsCisJCTB4MDAzMCwKKwkJMHgwN2ZmLAogCiAJNiwgMHgxYiwKLQkweDQxMTIsCi0JMHhmZjAwLAotCTB4YzA3ZiwKLQkweDAwMDAsCi0JMHgwMTgwLAotCTB4NDAwMCB8IDB4MDgwMCB8IDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSwKKwkJMHg0MTEyLAorCQkweGZmMDAsCisJCTB4YzA3ZiwKKwkJMHgwMDAwLAorCQkweDAxODAsCisJCTB4NDAwMCB8IDB4MDgwMCB8IDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSwKIAogCTAsCiB9OwogCiBzdGF0aWMgdTE2IGRpYjAwNzBfcmVhZF93YmRfb2Zmc2V0KHN0cnVjdCBkaWIwMDcwX3N0YXRlICpzdGF0ZSwgdTggZ2FpbikKIHsKLQl1MTYgdHVuZXJfZW4gPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDIwKTsKLQl1MTYgb2Zmc2V0OworICAgIHUxNiB0dW5lcl9lbiA9IGRpYjAwNzBfcmVhZF9yZWcoc3RhdGUsIDB4MjApOworICAgIHUxNiBvZmZzZXQ7CiAKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOCwgMHgwN2ZmKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyMCwgMHgwODAwIHwgMHg0MDAwIHwgMHgwMDQwIHwgMHgwMDIwIHwgMHgwMDEwIHwgMHgwMDA4IHwgMHgwMDAyIHwgMHgwMDAxKTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZiwgKDEgPDwgMTQpIHwgKDIgPDwgMTIpIHwgKGdhaW4gPDwgOSkgfCAoMSA8PCA4KSB8ICgxIDw8IDcpIHwgKDAgPDwgMCkpOwotCW1zbGVlcCg5KTsKLQlvZmZzZXQgPSBkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDE5KTsKLQlkaWIwMDcwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyMCwgdHVuZXJfZW4pOwotCXJldHVybiBvZmZzZXQ7CisgICAgZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTgsIDB4MDdmZik7CisgICAgZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsIDB4MDgwMCB8IDB4NDAwMCB8IDB4MDA0MCB8IDB4MDAyMCB8IDB4MDAxMCB8IDB4MDAwOCB8IDB4MDAwMiB8IDB4MDAwMSk7CisgICAgZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsICgxIDw8IDE0KSB8ICgyIDw8IDEyKSB8IChnYWluIDw8IDkpIHwgKDEgPDwgOCkgfCAoMSA8PCA3KSB8ICgwIDw8IDApKTsKKyAgICBtc2xlZXAoOSk7CisgICAgb2Zmc2V0ID0gZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgxOSk7CisgICAgZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsIHR1bmVyX2VuKTsKKyAgICByZXR1cm4gb2Zmc2V0OwogfQogCiBzdGF0aWMgdm9pZCBkaWIwMDcwX3diZF9vZmZzZXRfY2FsaWJyYXRpb24oc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlKQogewotCXU4IGdhaW47Ci0JZm9yIChnYWluID0gNjsgZ2FpbiA8IDg7IGdhaW4rKykgewotCQlzdGF0ZS0+d2JkX29mZnNldF8zXzNbZ2FpbiAtIDZdID0gKChkaWIwMDcwX3JlYWRfd2JkX29mZnNldChzdGF0ZSwgZ2FpbikgKiA4ICogMTggLyAzMyArIDEpIC8gMik7Ci0JCWRwcmludGsoIkdhaW46ICVkLCBXQkRPZmZzZXQgKDMuM1YpID0gJWhkIiwgZ2Fpbiwgc3RhdGUtPndiZF9vZmZzZXRfM18zW2dhaW4gLSA2XSk7Ci0JfQorICAgIHU4IGdhaW47CisgICAgZm9yIChnYWluID0gNjsgZ2FpbiA8IDg7IGdhaW4rKykgeworCXN0YXRlLT53YmRfb2Zmc2V0XzNfM1tnYWluIC0gNl0gPSAoKGRpYjAwNzBfcmVhZF93YmRfb2Zmc2V0KHN0YXRlLCBnYWluKSAqIDggKiAxOCAvIDMzICsgMSkgLyAyKTsKKwlkcHJpbnRrKCJHYWluOiAlZCwgV0JET2Zmc2V0ICgzLjNWKSA9ICVoZCIsIGdhaW4sIHN0YXRlLT53YmRfb2Zmc2V0XzNfM1tnYWluLTZdKTsKKyAgICB9CiB9CiAKIHUxNiBkaWIwMDcwX3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7Ci0JY29uc3Qgc3RydWN0IGRpYjAwNzBfd2JkX2dhaW5fY2ZnICp0bXAgPSBzdGF0ZS0+Y2ZnLT53YmRfZ2FpbjsKLQl1MzIgZnJlcSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMDsKKyAgICBzdHJ1Y3QgZGliMDA3MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKyAgICBjb25zdCBzdHJ1Y3QgZGliMDA3MF93YmRfZ2Fpbl9jZmcgKnRtcCA9IHN0YXRlLT5jZmctPndiZF9nYWluOworICAgIHUzMiBmcmVxID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3kvMTAwMDsKIAotCWlmICh0bXAgIT0gTlVMTCkgewotCQl3aGlsZSAoZnJlcSAvIDEwMDAgPiB0bXAtPmZyZXEpCS8qIGZpbmQgdGhlIHJpZ2h0IG9uZSAqLwotCQkJdG1wKys7Ci0JCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gdG1wLT53YmRfZ2Fpbl92YWw7CisgICAgaWYgKHRtcCAhPSBOVUxMKSB7CisJd2hpbGUgKGZyZXEvMTAwMCA+IHRtcC0+ZnJlcSkgLyogZmluZCB0aGUgcmlnaHQgb25lICovCisJICAgIHRtcCsrOworCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gdG1wLT53YmRfZ2Fpbl92YWw7CiAJfSBlbHNlCi0JCXN0YXRlLT53YmRfZ2Fpbl9jdXJyZW50ID0gNjsKKwlzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCA9IDY7CiAKLQlyZXR1cm4gc3RhdGUtPndiZF9vZmZzZXRfM18zW3N0YXRlLT53YmRfZ2Fpbl9jdXJyZW50IC0gNl07CisgICAgcmV0dXJuIHN0YXRlLT53YmRfb2Zmc2V0XzNfM1tzdGF0ZS0+d2JkX2dhaW5fY3VycmVudCAtIDZdOwogfQotCiBFWFBPUlRfU1lNQk9MKGRpYjAwNzBfd2JkX29mZnNldCk7CiAKICNkZWZpbmUgcGdtX3JlYWRfd29yZCh3KSAoKncpCiBzdGF0aWMgaW50IGRpYjAwNzBfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisgICAgc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJdTE2IGwsIHIsICpuOwogCiAJSEFSRF9SRVNFVChzdGF0ZSk7CiAKKwogI2lmbmRlZiBGT1JDRV9TQkFORF9UVU5FUgogCWlmICgoZGliMDA3MF9yZWFkX3JlZyhzdGF0ZSwgMHgyMikgPj4gOSkgJiAweDEpCiAJCXN0YXRlLT5yZXZpc2lvbiA9IChkaWIwMDcwX3JlYWRfcmVnKHN0YXRlLCAweDFmKSA+PiA4KSAmIDB4ZmY7CkBAIC02MDUsNyArNjIxLDcgQEAKICNlbHNlCiAjd2FybmluZyBmb3JjaW5nIFNCQU5ECiAjZW5kaWYKLQlzdGF0ZS0+cmV2aXNpb24gPSBESUIwMDcwU19QMUE7CisJCXN0YXRlLT5yZXZpc2lvbiA9IERJQjAwNzBTX1AxQTsKIAogCS8qIFAxRiBvciBub3QgKi8KIAlkcHJpbnRrKCJSZXZpc2lvbjogJXgiLCBzdGF0ZS0+cmV2aXNpb24pOwpAQCAtNjIwLDcgKzYzNiw3IEBACiAJd2hpbGUgKGwpIHsKIAkJciA9IHBnbV9yZWFkX3dvcmQobisrKTsKIAkJZG8gewotCQkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsICh1OCkgciwgcGdtX3JlYWRfd29yZChuKyspKTsKKwkJCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAodTgpciwgcGdtX3JlYWRfd29yZChuKyspKTsKIAkJCXIrKzsKIAkJfSB3aGlsZSAoLS1sKTsKIAkJbCA9IHBnbV9yZWFkX3dvcmQobisrKTsKQEAgLTYzMyw2ICs2NDksNyBAQAogCWVsc2UKIAkJciA9IDI7CiAKKwogCXIgfD0gc3RhdGUtPmNmZy0+b3NjX2J1ZmZlcl9zdGF0ZSA8PCAzOwogCiAJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MTAsIHIpOwpAQCAtNjQzLDE2ICs2NjAsMjQgQEAKIAkJZGliMDA3MF93cml0ZV9yZWcoc3RhdGUsIDB4MDIsIHIgfCAoMSA8PCA1KSk7CiAJfQogCi0JaWYgKHN0YXRlLT5yZXZpc2lvbiA9PSBESUIwMDcwU19QMUEpCi0JCWRpYjAwNzBfc2V0X2N0cmxfbG81KGZlLCAyLCA0LCAzLCAwKTsKLQllbHNlCisgICAgaWYgKHN0YXRlLT5yZXZpc2lvbiA9PSBESUIwMDcwU19QMUEpCisJZGliMDA3MF9zZXRfY3RybF9sbzUoZmUsIDIsIDQsIDMsIDApOworICAgIGVsc2UKIAkJZGliMDA3MF9zZXRfY3RybF9sbzUoZmUsIDUsIDQsIHN0YXRlLT5jZmctPmNoYXJnZV9wdW1wLCBzdGF0ZS0+Y2ZnLT5lbmFibGVfdGhpcmRfb3JkZXJfZmlsdGVyKTsKIAogCWRpYjAwNzBfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCAoNTQgPDwgOSkgfCAweGM4KTsKIAotCWRpYjAwNzBfd2JkX29mZnNldF9jYWxpYnJhdGlvbihzdGF0ZSk7CisgICAgZGliMDA3MF93YmRfb2Zmc2V0X2NhbGlicmF0aW9uKHN0YXRlKTsKIAotCXJldHVybiAwOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjAwNzBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisgICAgc3RydWN0IGRpYjAwNzBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKyAgICAqZnJlcXVlbmN5ID0gMTAwMCAqIHN0YXRlLT5jdXJyZW50X3JmOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRpYjAwNzBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKQEAgLTY2NCwxOCArNjg5LDE4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBkaWIwMDcwX29wcyA9IHsKIAkuaW5mbyA9IHsKLQkJIC5uYW1lID0gIkRpQmNvbSBEaUIwMDcwIiwKLQkJIC5mcmVxdWVuY3lfbWluID0gNDUwMDAwMDAsCi0JCSAuZnJlcXVlbmN5X21heCA9IDg2MDAwMDAwMCwKLQkJIC5mcmVxdWVuY3lfc3RlcCA9IDEwMDAsCi0JCSB9LAotCS5yZWxlYXNlID0gZGliMDA3MF9yZWxlYXNlLAorCQkubmFtZSAgICAgICAgICAgPSAiRGlCY29tIERpQjAwNzAiLAorCQkuZnJlcXVlbmN5X21pbiAgPSAgNDUwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICA9IDg2MDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gICAgICAxMDAwLAorCX0sCisJLnJlbGVhc2UgICAgICAgPSBkaWIwMDcwX3JlbGVhc2UsCiAKLQkuaW5pdCA9IGRpYjAwNzBfd2FrZXVwLAotCS5zbGVlcCA9IGRpYjAwNzBfc2xlZXAsCi0JLnNldF9wYXJhbXMgPSBkaWIwMDcwX3R1bmUsCisJLmluaXQgICAgICAgICAgPSBkaWIwMDcwX3dha2V1cCwKKwkuc2xlZXAgICAgICAgICA9IGRpYjAwNzBfc2xlZXAsCisJLnNldF9wYXJhbXMgICAgPSBkaWIwMDcwX3R1bmUsCiAKLS8vICAgICAgLmdldF9mcmVxdWVuY3kgPSBkaWIwMDcwX2dldF9mcmVxdWVuY3ksCisJLmdldF9mcmVxdWVuY3kgPSBkaWIwMDcwX2dldF9mcmVxdWVuY3ksCiAvLyAgICAgIC5nZXRfYmFuZHdpZHRoID0gZGliMDA3MF9nZXRfYmFuZHdpZHRoCiB9OwogCkBAIC02ODcsNyArNzEyLDcgQEAKIAogCXN0YXRlLT5jZmcgPSBjZmc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKLQlzdGF0ZS0+ZmUgPSBmZTsKKwlzdGF0ZS0+ZmUgID0gZmU7CiAJZmUtPnR1bmVyX3ByaXYgPSBzdGF0ZTsKIAogCWlmIChkaWIwMDcwX3Jlc2V0KGZlKSAhPSAwKQpAQCAtNjk5LDEyICs3MjQsMTEgQEAKIAlmZS0+dHVuZXJfcHJpdiA9IHN0YXRlOwogCXJldHVybiBmZTsKIAotIGZyZWVfbWVtOgorZnJlZV9tZW06CiAJa2ZyZWUoc3RhdGUpOwogCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChkaWIwMDcwX2F0dGFjaCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYm9ldHRjaGVyQGRpYmNvbS5mcj4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IGVlYzllNTIuLjQ1YzMxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtNTIsNiArNTIsOCBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpOwogZXh0ZXJuIHUxNiBkaWIwMDcwX3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKIGV4dGVybiB2b2lkIGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggb3Blbik7CitleHRlcm4gdTggZGliMDA3MF9nZXRfcmZfb3V0cHV0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKK2V4dGVybiBpbnQgZGliMDA3MF9zZXRfcmZfb3V0cHV0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBubyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKQogewpAQCAtNjIsNyArNjQsNyBAQAogc3RhdGljIGlubGluZSB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwotCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG9wZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQ1NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYwpAQCAtMCwwICsxLDE1MjIgQEAKKy8qCisgKiBMaW51eC1EVkIgRHJpdmVyIGZvciBEaUJjb20ncyBEaUIwMDkwIGJhc2UtYmFuZCBSRiBUdW5lci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtOSBEaUJjb20gKGh0dHA6Ly93d3cuZGliY29tLmZyLykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqIFRoaXMgY29kZSBpcyBtb3JlIG9yIGxlc3MgZ2VuZXJhdGVkIGZyb20gYW5vdGhlciBkcml2ZXIsIHBsZWFzZQorICogZXhjdXNlIHNvbWUgY29kaW5nc3R5bGUgb2RkaXRpZXMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAiZGliMDA5MC5oIgorI2luY2x1ZGUgImRpYngwMDBfY29tbW9uLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAidHVybiBvbiBkZWJ1Z2dpbmcgKGRlZmF1bHQ6IDApIik7CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBkbyB7IFwKKwlpZiAoZGVidWcpIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyAiRGlCMDA5MDogIik7IFwKKwkJcHJpbnRrKGFyZ3MpOyBcCisJCXByaW50aygiXG4iKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBDT05GSUdfU1lTX0lTREJUCisjZGVmaW5lIENPTkZJR19CQU5EX0NCQU5ECisjZGVmaW5lIENPTkZJR19CQU5EX1ZIRgorI2RlZmluZSBDT05GSUdfQkFORF9VSEYKKyNkZWZpbmUgQ09ORklHX0RJQjAwOTBfVVNFX1BXTV9BR0MKKworI2RlZmluZSBFTl9MTkEwICAgICAgMHg4MDAwCisjZGVmaW5lIEVOX0xOQTEgICAgICAweDQwMDAKKyNkZWZpbmUgRU5fTE5BMiAgICAgIDB4MjAwMAorI2RlZmluZSBFTl9MTkEzICAgICAgMHgxMDAwCisjZGVmaW5lIEVOX01JWDAgICAgICAweDA4MDAKKyNkZWZpbmUgRU5fTUlYMSAgICAgIDB4MDQwMAorI2RlZmluZSBFTl9NSVgyICAgICAgMHgwMjAwCisjZGVmaW5lIEVOX01JWDMgICAgICAweDAxMDAKKyNkZWZpbmUgRU5fSVFBREMgICAgIDB4MDA0MAorI2RlZmluZSBFTl9QTEwgICAgICAgMHgwMDIwCisjZGVmaW5lIEVOX1RYICAgICAgICAweDAwMTAKKyNkZWZpbmUgRU5fQkIgICAgICAgIDB4MDAwOAorI2RlZmluZSBFTl9MTyAgICAgICAgMHgwMDA0CisjZGVmaW5lIEVOX0JJQVMgICAgICAweDAwMDEKKworI2RlZmluZSBFTl9JUUFOQSAgICAgMHgwMDAyCisjZGVmaW5lIEVOX0RJR0NMSyAgICAweDAwODAJLyogbm90IGluIHRoZSAweDI0IHJlZywgb25seSBpbiAweDFiICovCisjZGVmaW5lIEVOX0NSWVNUQUwgICAweDAwMDIKKworI2RlZmluZSBFTl9VSEYJCSAweDIyRTkKKyNkZWZpbmUgRU5fVkhGCQkgMHg0NEU5CisjZGVmaW5lIEVOX0xCRAkJIDB4MTFFOQorI2RlZmluZSBFTl9TQkQJCSAweDQ0RTkKKyNkZWZpbmUgRU5fQ0FCCQkgMHg4OEU5CisKKyNkZWZpbmUgcGdtX3JlYWRfd29yZCh3KSAoKncpCisKK3N0cnVjdCBkY19jYWxpYnJhdGlvbjsKKworc3RydWN0IGRpYjAwOTBfdHVuaW5nIHsKKwl1MzIgbWF4X2ZyZXE7CQkvKiBmb3IgZXZlcnkgZnJlcXVlbmN5IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGF0IGZpZWxkOiB0aGlzIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QgKi8KKwl1OCBzd2l0Y2hfdHJpbTsKKwl1OCBsbmFfdHVuZTsKKwl1OCBsbmFfYmlhczsKKwl1MTYgdjJpOworCXUxNiBtaXg7CisJdTE2IGxvYWQ7CisJdTE2IHR1bmVyX2VuYWJsZTsKK307CisKK3N0cnVjdCBkaWIwMDkwX3BsbCB7CisJdTMyIG1heF9mcmVxOwkJLyogZm9yIGV2ZXJ5IGZyZXF1ZW5jeSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhhdCBmaWVsZDogdGhpcyBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0ICovCisJdTggdmNvX2JhbmQ7CisJdTggaGZkaXZfY29kZTsKKwl1OCBoZmRpdjsKKwl1OCB0b3ByZXNjOworfTsKKworc3RydWN0IGRpYjAwOTBfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOworCWNvbnN0IHN0cnVjdCBkaWIwMDkwX2NvbmZpZyAqY29uZmlnOworCisJdTggY3VycmVudF9iYW5kOworCXUxNiByZXZpc2lvbjsKKwllbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZTsKKwl1MzIgY3VycmVudF9yZjsKKworCXUxNiB3YmRfb2Zmc2V0OworCXMxNiB3YmRfdGFyZ2V0OwkJLyogaW4gZEIgKi8KKworCXMxNiByZl9nYWluX2xpbWl0OwkvKiB0YWtlLW92ZXItcG9pbnQ6IHdoZXJlIHRvIHNwbGl0IGJldHdlZW4gYmIgYW5kIHJmIGdhaW4gKi8KKwlzMTYgY3VycmVudF9nYWluOwkvKiBrZWVwcyB0aGUgY3VycmVudGx5IHByb2dyYW1tZWQgZ2FpbiAqLworCXU4IGFnY19zdGVwOwkJLyogbmV3IGJpbmFyeSBzZWFyY2ggKi8KKworCXUxNiBnYWluWzJdOwkJLyogZm9yIGNoYW5uZWwgbW9uaXRvcmluZyAqLworCisJY29uc3QgdTE2ICpyZl9yYW1wOworCWNvbnN0IHUxNiAqYmJfcmFtcDsKKworCS8qIGZvciB0aGUgc29mdHdhcmUgQUdDIHJhbXBzICovCisJdTE2IGJiXzFfZGVmOworCXUxNiByZl9sdF9kZWY7CisJdTE2IGdhaW5fcmVnWzRdOworCisJLyogZm9yIHRoZSBjYXB0cmltL2RjLW9mZnNldCBzZWFyY2ggKi8KKwlzOCBzdGVwOworCXMxNiBhZGNfZGlmZjsKKwlzMTYgbWluX2FkY19kaWZmOworCisJczggY2FwdHJpbTsKKwlzOCBmY2FwdHJpbTsKKworCWNvbnN0IHN0cnVjdCBkY19jYWxpYnJhdGlvbiAqZGM7CisJdTE2IGJiNiwgYmI3OworCisJY29uc3Qgc3RydWN0IGRpYjAwOTBfdHVuaW5nICpjdXJyZW50X3R1bmVfdGFibGVfaW5kZXg7CisJY29uc3Qgc3RydWN0IGRpYjAwOTBfcGxsICpjdXJyZW50X3BsbF90YWJsZV9pbmRleDsKKworCXU4IHR1bmVyX2lzX3R1bmVkOworCXU4IGFnY19mcmVlemU7CisKKwl1OCByZXNldDsKK307CisKK3N0YXRpYyB1MTYgZGliMDA5MF9yZWFkX3JlZyhzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwl1OCBiWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJey5hZGRyID0gc3RhdGUtPmNvbmZpZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSAmcmVnLCAubGVuID0gMX0sCisJCXsuYWRkciA9IHN0YXRlLT5jb25maWctPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIsIC5sZW4gPSAyfSwKKwl9OworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKSAhPSAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRpQjAwOTAgSTJDIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAoYlswXSA8PCA4KSB8IGJbMV07Cit9CisKK3N0YXRpYyBpbnQgZGliMDA5MF93cml0ZV9yZWcoc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlLCB1MzIgcmVnLCB1MTYgdmFsKQoreworCXU4IGJbM10gPSB7IHJlZyAmIDB4ZmYsIHZhbCA+PiA4LCB2YWwgJiAweGZmIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gc3RhdGUtPmNvbmZpZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBiLCAubGVuID0gMyB9OworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaUIwMDkwIEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgSEFSRF9SRVNFVChzdGF0ZSkgZG8geyAgaWYgKGNmZy0+cmVzZXQpIHsgIGlmIChjZmctPnNsZWVwKSBjZmctPnNsZWVwKGZlLCAwKTsgbXNsZWVwKDEwKTsgIGNmZy0+cmVzZXQoZmUsIDEpOyBtc2xlZXAoMTApOyAgY2ZnLT5yZXNldChmZSwgMCk7IG1zbGVlcCgxMCk7ICB9ICB9IHdoaWxlICgwKQorI2RlZmluZSBBRENfVEFSR0VUIC0yMjAKKyNkZWZpbmUgR0FJTl9BTFBIQSA1CisjZGVmaW5lIFdCRF9BTFBIQSA2CisjZGVmaW5lIExQRgkxMDAKK3N0YXRpYyB2b2lkIGRpYjAwOTBfd3JpdGVfcmVncyhzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUsIHU4IHIsIGNvbnN0IHUxNiAqIGIsIHU4IGMpCit7CisJZG8geworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgcisrLCAqYisrKTsKKwl9IHdoaWxlICgtLWMpOworfQorCitzdGF0aWMgdTE2IGRpYjAwOTBfaWRlbnRpZnkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdTE2IHY7CisKKwl2ID0gZGliMDA5MF9yZWFkX3JlZyhzdGF0ZSwgMHgxYSk7CisKKyNpZmRlZiBGSVJNV0FSRV9GSVJFRkxZCisJLyogcGxsIGlzIG5vdCBsb2NrZWQgbG9ja2VkICovCisJaWYgKCEodiAmIDB4ODAwKSkKKwkJZHByaW50aygiRkUlZCA6IElkZW50aWZpY2F0aW9uIDogcGxsIGlzIG5vdCB5ZXQgbG9ja2VkIiwgZmUtPmlkKTsKKyNlbmRpZgorCisJLyogd2l0aG91dCBQTEwgbG9jayBpbmZvICovCisJdiAmPSAweDNmZjsKKwlkcHJpbnRrKCJQL1Y6ICUwNHg6Iiwgdik7CisKKwlpZiAoKHYgPj4gOCkgJiAweGYpCisJCWRwcmludGsoIkZFJWQgOiBQcm9kdWN0IElEID0gMHgleCA6IEtST1NVUyIsIGZlLT5pZCwgKHYgPj4gOCkgJiAweGYpOworCWVsc2UKKwkJcmV0dXJuIDB4ZmY7CisKKwl2ICY9IDB4ZmY7CisJaWYgKCgodiA+PiA1KSAmIDB4NykgPT0gMHgxKQorCQlkcHJpbnRrKCJGRSVkIDogTVAwMDEgOiA5MDkwLzgwOTYiLCBmZS0+aWQpOworCWVsc2UgaWYgKCgodiA+PiA1KSAmIDB4NykgPT0gMHg0KQorCQlkcHJpbnRrKCJGRSVkIDogTVAwMDUgOiBTaW5nbGUgU2JhbmQiLCBmZS0+aWQpOworCWVsc2UgaWYgKCgodiA+PiA1KSAmIDB4NykgPT0gMHg2KQorCQlkcHJpbnRrKCJGRSVkIDogTVAwMDggOiBkaXZlcnNpdHkgVkhGLVVIRi1MQkFORCIsIGZlLT5pZCk7CisJZWxzZSBpZiAoKCh2ID4+IDUpICYgMHg3KSA9PSAweDcpCisJCWRwcmludGsoIkZFJWQgOiBNUDAwOSA6IGRpdmVyc2l0eSAyOTA5OCBDQkFORC1VSEYtTEJBTkQtU0JBTkQiLCBmZS0+aWQpOworCWVsc2UKKwkJcmV0dXJuIDB4ZmY7CisKKwkvKiByZXZpc2lvbiBvbmx5ICovCisJaWYgKCh2ICYgMHgxZikgPT0gMHgzKQorCQlkcHJpbnRrKCJGRSVkIDogUDEtRC9FL0YgZGV0ZWN0ZWQiLCBmZS0+aWQpOworCWVsc2UgaWYgKCh2ICYgMHgxZikgPT0gMHgxKQorCQlkcHJpbnRrKCJGRSVkIDogUDFDIGRldGVjdGVkIiwgZmUtPmlkKTsKKwllbHNlIGlmICgodiAmIDB4MWYpID09IDB4MCkgeworI2lmZGVmIENPTkZJR19UVU5FUl9ESUIwMDkwX1AxQl9TVVBQT1JUCisJCWRwcmludGsoIkZFJWQgOiBQMS1BL0IgZGV0ZWN0ZWQ6IHVzaW5nIHByZXZpb3VzIGRyaXZlciAtIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkIHNvb24iLCBmZS0+aWQpOworCQlkaWIwMDkwX3AxYl9yZWdpc3RlcihmZSk7CisjZWxzZQorCQlkcHJpbnRrKCJGRSVkIDogUDEtQS9CIGRldGVjdGVkOiBkcml2ZXIgaXMgZGVhY3RpdmF0ZWQgLSBub3QgYXZhaWxhYmxlIiwgZmUtPmlkKTsKKwkJcmV0dXJuIDB4ZmY7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gdjsKK30KKworc3RhdGljIHZvaWQgZGliMDA5MF9yZXNldF9kaWdpdGFsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBjb25zdCBzdHJ1Y3QgZGliMDA5MF9jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCUhBUkRfUkVTRVQoc3RhdGUpOworCisJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MjQsIEVOX1BMTCk7CisJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MWIsIEVOX0RJR0NMSyB8IEVOX1BMTCB8IEVOX0NSWVNUQUwpOwkvKiBQTEwsIERJR19DTEsgYW5kIENSWVNUQUwgcmVtYWluICovCisKKwkvKiBhZGNDbGtPdXRSYXRpbz04LT43LCByZWxlYXNlIHJlc2V0ICovCisJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MjAsICgoY2ZnLT5pby5hZGNfY2xvY2tfcmF0aW8gLSAxKSA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMSA8PCA5KSB8ICgxIDw8IDgpIHwgKDAgPDwgNCkgfCAwKTsKKwlpZiAoY2ZnLT5jbGtvdXRkcml2ZSAhPSAwKQorCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyMywKKwkJCQkgICgwIDw8IDE1KSB8ICgoIWNmZy0+YW5hbG9nX291dHB1dCkgPDwgMTQpIHwgKDEgPDwgMTApIHwgKDEgPDwgOSkgfCAoMCA8PCA4KSB8IChjZmctPmNsa291dGRyaXZlIDw8IDUpIHwgKGNmZy0+CisJCQkJCQkJCQkJCQkJCQkJCSAgIGNsa291dHRvYmFtc2UKKwkJCQkJCQkJCQkJCQkJCQkJICAgPDwgNCkgfCAoMAorCQkJCQkJCQkJCQkJCQkJCQkJICAgIDw8CisJCQkJCQkJCQkJCQkJCQkJCQkgICAgMikKKwkJCQkgIHwgKDApKTsKKwllbHNlCisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDIzLAorCQkJCSAgKDAgPDwgMTUpIHwgKCghY2ZnLT5hbmFsb2dfb3V0cHV0KSA8PCAxNCkgfCAoMSA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgKDcgPDwgNSkgfCAoY2ZnLT4KKwkJCQkJCQkJCQkJCQkJCSAgICBjbGtvdXR0b2JhbXNlIDw8IDQpIHwgKDAKKwkJCQkJCQkJCQkJCQkJCQkJCSAgIDw8CisJCQkJCQkJCQkJCQkJCQkJCQkgICAyKQorCQkJCSAgfCAoMCkpOworCisJLyogZW5hYmxlIHBsbCwgZGUtYWN0aXZhdGUgcmVzZXQsIHJhdGlvOiAyLzEgPSA2ME1IeiAqLworCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDIxLAorCQkJICAoY2ZnLT5pby5wbGxfYnlwYXNzIDw8IDE1KSB8ICgxIDw8IDEzKSB8IChjZmctPmlvLnBsbF9yYW5nZSA8PCAxMikgfCAoY2ZnLT5pby5wbGxfbG9vcGRpdiA8PCA2KSB8IChjZmctPmlvLnBsbF9wcmVkaXYpKTsKKworfQorCitzdGF0aWMgaW50IGRpYjAwOTBfd2FrZXVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCWlmIChzdGF0ZS0+Y29uZmlnLT5zbGVlcCkKKwkJc3RhdGUtPmNvbmZpZy0+c2xlZXAoZmUsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjAwOTBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaWYgKHN0YXRlLT5jb25maWctPnNsZWVwKQorCQlzdGF0ZS0+Y29uZmlnLT5zbGVlcChmZSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIGRpYjAwOTBfZGNjX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IGZhc3QpCit7CisJc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaWYgKGZhc3QpCisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDA0LCAwKTsKKwllbHNlCisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDA0LCAxKTsKK30KK0VYUE9SVF9TWU1CT0woZGliMDA5MF9kY2NfZnJlcSk7CisKK3N0YXRpYyBjb25zdCB1MTYgcmZfcmFtcF9wd21fY2JhbmRbXSA9IHsKKwkwLAkJCS8qIG1heCBSRiBnYWluIGluIDEwdGggb2YgZEIgKi8KKwkwLAkJCS8qIHJhbXBfc2xvcGUgPSAxZEIgb2YgZ2FpbiAtPiBjbG9ja190aWNrc19wZXJfZGIgPSBjbGtfa2h6IC8gcmFtcF9zbG9wZSAtPiAweDJiICovCisJMCwJCQkvKiByYW1wX21heCA9IG1heGltdW0gWCB1c2VkIG9uIHRoZSByYW1wICovCisJKDAgPDwgMTApIHwgMCwJCS8qIDB4MmMsIExOQSAxID0gMGRCICovCisJKDAgPDwgMTApIHwgMCwJCS8qIDB4MmQsIExOQSAxICovCisJKDAgPDwgMTApIHwgMCwJCS8qIDB4MmUsIExOQSAyID0gMGRCICovCisJKDAgPDwgMTApIHwgMCwJCS8qIDB4MmYsIExOQSAyICovCisJKDAgPDwgMTApIHwgMCwJCS8qIDB4MzAsIExOQSAzID0gMGRCICovCisJKDAgPDwgMTApIHwgMCwJCS8qIDB4MzEsIExOQSAzICovCisJKDAgPDwgMTApIHwgMCwJCS8qIEdBSU5fNF8xLCBMTkEgNCA9IDBkQiAqLworCSgwIDw8IDEwKSB8IDAsCQkvKiBHQUlOXzRfMiwgTE5BIDQgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MTYgcmZfcmFtcF92aGZbXSA9IHsKKwk0MTIsCQkJLyogbWF4IFJGIGdhaW4gaW4gMTB0aCBvZiBkQiAqLworCTEzMiwgMzA3LCAxMjcsCQkvKiBMTkExLCAgMTMuMmRCICovCisJMTA1LCA0MTIsIDI1NSwJCS8qIExOQTIsICAxMC41ZEIgKi8KKwk1MCwgNTAsIDEyNywJCS8qIExOQTMsICA1ZEIgKi8KKwkxMjUsIDE3NSwgMTI3LAkJLyogTE5BNCwgIDEyLjVkQiAqLworCTAsIDAsIDEyNywJCS8qIENCQU5ELCAwZEIgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MTYgcmZfcmFtcF91aGZbXSA9IHsKKwk0MTIsCQkJLyogbWF4IFJGIGdhaW4gaW4gMTB0aCBvZiBkQiAqLworCTEzMiwgMzA3LCAxMjcsCQkvKiBMTkExICA6IHRvdGFsIGdhaW4gPSAxMy4yZEIsIHBvaW50IG9uIHRoZSByYW1wIHdoZXJlIHRoaXMgYW1wIGlzIGZ1bGwgZ2FpbiwgdmFsdWUgdG8gd3JpdGUgdG8gZ2V0IGZ1bGwgZ2FpbiAqLworCTEwNSwgNDEyLCAyNTUsCQkvKiBMTkEyICA6IDEwLjUgZEIgKi8KKwk1MCwgNTAsIDEyNywJCS8qIExOQTMgIDogIDUuMCBkQiAqLworCTEyNSwgMTc1LCAxMjcsCQkvKiBMTkE0ICA6IDEyLjUgZEIgKi8KKwkwLCAwLCAxMjcsCQkvKiBDQkFORCA6ICAwLjAgZEIgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MTYgcmZfcmFtcF9jYmFuZFtdID0geworCTMzMiwJCQkvKiBtYXggUkYgZ2FpbiBpbiAxMHRoIG9mIGRCICovCisJMTMyLCAyNTIsIDEyNywJCS8qIExOQTEsICBkQiAqLworCTgwLCAzMzIsIDI1NSwJCS8qIExOQTIsICBkQiAqLworCTAsIDAsIDEyNywJCS8qIExOQTMsICBkQiAqLworCTAsIDAsIDEyNywJCS8qIExOQTQsICBkQiAqLworCTEyMCwgMTIwLCAxMjcsCQkvKiBMVDEgQ0JBTkQgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MTYgcmZfcmFtcF9wd21fdmhmW10gPSB7CisJNDA0LAkJCS8qIG1heCBSRiBnYWluIGluIDEwdGggb2YgZEIgKi8KKwkyNSwJCQkvKiByYW1wX3Nsb3BlID0gMWRCIG9mIGdhaW4gLT4gY2xvY2tfdGlja3NfcGVyX2RiID0gY2xrX2toeiAvIHJhbXBfc2xvcGUgLT4gMHgyYiAqLworCTEwMTEsCQkJLyogcmFtcF9tYXggPSBtYXhpbXVtIFggdXNlZCBvbiB0aGUgcmFtcCAqLworCSg2IDw8IDEwKSB8IDQxNywJLyogMHgyYywgTE5BIDEgPSAxMy4yZEIgKi8KKwkoMCA8PCAxMCkgfCA3NTYsCS8qIDB4MmQsIExOQSAxICovCisJKDE2IDw8IDEwKSB8IDc1NiwJLyogMHgyZSwgTE5BIDIgPSAxMC41ZEIgKi8KKwkoMCA8PCAxMCkgfCAxMDExLAkvKiAweDJmLCBMTkEgMiAqLworCSgxNiA8PCAxMCkgfCAyOTAsCS8qIDB4MzAsIExOQSAzID0gNWRCICovCisJKDAgPDwgMTApIHwgNDE3LAkvKiAweDMxLCBMTkEgMyAqLworCSg3IDw8IDEwKSB8IDAsCQkvKiBHQUlOXzRfMSwgTE5BIDQgPSAxMi41ZEIgKi8KKwkoMCA8PCAxMCkgfCAyOTAsCS8qIEdBSU5fNF8yLCBMTkEgNCAqLworfTsKKworc3RhdGljIGNvbnN0IHUxNiByZl9yYW1wX3B3bV91aGZbXSA9IHsKKwk0MDQsCQkJLyogbWF4IFJGIGdhaW4gaW4gMTB0aCBvZiBkQiAqLworCTI1LAkJCS8qIHJhbXBfc2xvcGUgPSAxZEIgb2YgZ2FpbiAtPiBjbG9ja190aWNrc19wZXJfZGIgPSBjbGtfa2h6IC8gcmFtcF9zbG9wZSAtPiAweDJiICovCisJMTAxMSwJCQkvKiByYW1wX21heCA9IG1heGltdW0gWCB1c2VkIG9uIHRoZSByYW1wICovCisJKDYgPDwgMTApIHwgNDE3LAkvKiAweDJjLCBMTkEgMSA9IDEzLjJkQiAqLworCSgwIDw8IDEwKSB8IDc1NiwJLyogMHgyZCwgTE5BIDEgKi8KKwkoMTYgPDwgMTApIHwgNzU2LAkvKiAweDJlLCBMTkEgMiA9IDEwLjVkQiAqLworCSgwIDw8IDEwKSB8IDEwMTEsCS8qIDB4MmYsIExOQSAyICovCisJKDE2IDw8IDEwKSB8IDAsCQkvKiAweDMwLCBMTkEgMyA9IDVkQiAqLworCSgwIDw8IDEwKSB8IDEyNywJLyogMHgzMSwgTE5BIDMgKi8KKwkoNyA8PCAxMCkgfCAxMjcsCS8qIEdBSU5fNF8xLCBMTkEgNCA9IDEyLjVkQiAqLworCSgwIDw8IDEwKSB8IDQxNywJLyogR0FJTl80XzIsIExOQSA0ICovCit9OworCitzdGF0aWMgY29uc3QgdTE2IGJiX3JhbXBfYm9vc3RbXSA9IHsKKwk1NTAsCQkJLyogbWF4IEJCIGdhaW4gaW4gMTB0aCBvZiBkQiAqLworCTI2MCwgMjYwLCAyNiwJCS8qIEJCMSwgMjZkQiAqLworCTI5MCwgNTUwLCAyOSwJCS8qIEJCMiwgMjlkQiAqLworfTsKKworc3RhdGljIGNvbnN0IHUxNiBiYl9yYW1wX3B3bV9ub3JtYWxbXSA9IHsKKwk1MDAsCQkJLyogbWF4IFJGIGdhaW4gaW4gMTB0aCBvZiBkQiAqLworCTgsCQkJLyogcmFtcF9zbG9wZSA9IDFkQiBvZiBnYWluIC0+IGNsb2NrX3RpY2tzX3Blcl9kYiA9IGNsa19raHogLyByYW1wX3Nsb3BlIC0+IDB4MzQgKi8KKwk0MDAsCisJKDIgPDwgOSkgfCAwLAkJLyogMHgzNSA9IDIxZEIgKi8KKwkoMCA8PCA5KSB8IDE2OCwJCS8qIDB4MzYgKi8KKwkoMiA8PCA5KSB8IDE2OCwJCS8qIDB4MzcgPSAyOWRCICovCisJKDAgPDwgOSkgfCA0MDAsCQkvKiAweDM4ICovCit9OworCitzdHJ1Y3Qgc2xvcGUgeworCWludDE2X3QgcmFuZ2U7CisJaW50MTZfdCBzbG9wZTsKK307CitzdGF0aWMgdTE2IHNsb3Blc190b19zY2FsZShjb25zdCBzdHJ1Y3Qgc2xvcGUgKnNsb3BlcywgdTggbnVtLCBzMTYgdmFsKQoreworCXU4IGk7CisJdTE2IHJlc3Q7CisJdTE2IHJldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmICh2YWwgPiBzbG9wZXNbaV0ucmFuZ2UpCisJCQlyZXN0ID0gc2xvcGVzW2ldLnJhbmdlOworCQllbHNlCisJCQlyZXN0ID0gdmFsOworCQlyZXQgKz0gKHJlc3QgKiBzbG9wZXNbaV0uc2xvcGUpIC8gc2xvcGVzW2ldLnJhbmdlOworCQl2YWwgLT0gcmVzdDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbG9wZSBkaWIwMDkwX3diZF9zbG9wZXNbM10gPSB7CisJezY2LCAxMjB9LAkJLyogLTY0LC01Mjogb2Zmc2V0IC0gICA2NSAqLworCXs2MDAsIDE3MH0sCQkvKiAtNTIsLTM1OiA2NSAgICAgLSAgNjY1ICovCisJezE3MCwgMjUwfSwJCS8qIC00NSwtMTA6IDY2NSAgICAtIDgzNSAqLworfTsKKworc3RhdGljIHMxNiBkaWIwMDkwX3diZF90b19kYihzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUsIHUxNiB3YmQpCit7CisJd2JkICY9IDB4M2ZmOworCWlmICh3YmQgPCBzdGF0ZS0+d2JkX29mZnNldCkKKwkJd2JkID0gMDsKKwllbHNlCisJCXdiZCAtPSBzdGF0ZS0+d2JkX29mZnNldDsKKwkvKiAtNjRkQiBpcyB0aGUgZmxvb3IgKi8KKwlyZXR1cm4gLTY0MCArIChzMTYpIHNsb3Blc190b19zY2FsZShkaWIwMDkwX3diZF9zbG9wZXMsIEFSUkFZX1NJWkUoZGliMDA5MF93YmRfc2xvcGVzKSwgd2JkKTsKK30KKworc3RhdGljIHZvaWQgZGliMDA5MF93YmRfdGFyZ2V0KHN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSwgdTMyIHJmKQoreworCXUxNiBvZmZzZXQgPSAyNTA7CisKKwkvKiBUT0RPIDogREFCIGRpZ2l0YWwgTisvLTEgaW50ZXJmZXJlciBwZXJmcyA6IG9mZnNldCA9IDEwICovCisKKwlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX1ZIRikKKwkJb2Zmc2V0ID0gNjUwOworI2lmbmRlZiBGSVJNV0FSRV9GSVJFRkxZCisJaWYgKHN0YXRlLT5jdXJyZW50X2JhbmQgPT0gQkFORF9WSEYpCisJCW9mZnNldCA9IHN0YXRlLT5jb25maWctPndiZF92aGZfb2Zmc2V0OworCWlmIChzdGF0ZS0+Y3VycmVudF9iYW5kID09IEJBTkRfQ0JBTkQpCisJCW9mZnNldCA9IHN0YXRlLT5jb25maWctPndiZF9jYmFuZF9vZmZzZXQ7CisjZW5kaWYKKworCXN0YXRlLT53YmRfdGFyZ2V0ID0gZGliMDA5MF93YmRfdG9fZGIoc3RhdGUsIHN0YXRlLT53YmRfb2Zmc2V0ICsgb2Zmc2V0KTsKKwlkcHJpbnRrKCJ3YmQtdGFyZ2V0OiAlZCBkQiIsICh1MzIpIHN0YXRlLT53YmRfdGFyZ2V0KTsKK30KKworc3RhdGljIGNvbnN0IGludCBnYWluX3JlZ19hZGRyWzRdID0geworCTB4MDgsIDB4MGEsIDB4MGYsIDB4MDEKK307CisKK3N0YXRpYyB2b2lkIGRpYjAwOTBfZ2Fpbl9hcHBseShzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUsIHMxNiBnYWluX2RlbHRhLCBzMTYgdG9wX2RlbHRhLCB1OCBmb3JjZSkKK3sKKwl1MTYgcmYsIGJiLCByZWY7CisJdTE2IGksIHYsIGdhaW5fcmVnWzRdID0geyAwIH0sIGdhaW47CisJY29uc3QgdTE2ICpnOworCisJaWYgKHRvcF9kZWx0YSA8IC01MTEpCisJCXRvcF9kZWx0YSA9IC01MTE7CisJaWYgKHRvcF9kZWx0YSA+IDUxMSkKKwkJdG9wX2RlbHRhID0gNTExOworCisJaWYgKGZvcmNlKSB7CisJCXRvcF9kZWx0YSAqPSAoMSA8PCBXQkRfQUxQSEEpOworCQlnYWluX2RlbHRhICo9ICgxIDw8IEdBSU5fQUxQSEEpOworCX0KKworCWlmICh0b3BfZGVsdGEgPj0gKChzMTYpIChzdGF0ZS0+cmZfcmFtcFswXSA8PCBXQkRfQUxQSEEpIC0gc3RhdGUtPnJmX2dhaW5fbGltaXQpKQkvKiBvdmVyZmxvdyAqLworCQlzdGF0ZS0+cmZfZ2Fpbl9saW1pdCA9IHN0YXRlLT5yZl9yYW1wWzBdIDw8IFdCRF9BTFBIQTsKKwllbHNlCisJCXN0YXRlLT5yZl9nYWluX2xpbWl0ICs9IHRvcF9kZWx0YTsKKworCWlmIChzdGF0ZS0+cmZfZ2Fpbl9saW1pdCA8IDApCS8qdW5kZXJmbG93ICovCisJCXN0YXRlLT5yZl9nYWluX2xpbWl0ID0gMDsKKworCS8qIHVzZSBnYWluIGFzIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIGFuZCBjb3JyZWN0IGN1cnJlbnRfZ2FpbiAqLworCWdhaW4gPSAoKHN0YXRlLT5yZl9nYWluX2xpbWl0ID4+IFdCRF9BTFBIQSkgKyBzdGF0ZS0+YmJfcmFtcFswXSkgPDwgR0FJTl9BTFBIQTsKKwlpZiAoZ2Fpbl9kZWx0YSA+PSAoKHMxNikgZ2FpbiAtIHN0YXRlLT5jdXJyZW50X2dhaW4pKQkvKiBvdmVyZmxvdyAqLworCQlzdGF0ZS0+Y3VycmVudF9nYWluID0gZ2FpbjsKKwllbHNlCisJCXN0YXRlLT5jdXJyZW50X2dhaW4gKz0gZ2Fpbl9kZWx0YTsKKwkvKiBjYW5ub3QgYmUgbGVzcyB0aGFuIDAgKG9ubHkgaWYgZ2Fpbl9kZWx0YSBpcyBsZXNzIHRoYW4gMCB3ZSBjYW4gaGF2ZSBjdXJyZW50X2dhaW4gPCAwKSAqLworCWlmIChzdGF0ZS0+Y3VycmVudF9nYWluIDwgMCkKKwkJc3RhdGUtPmN1cnJlbnRfZ2FpbiA9IDA7CisKKwkvKiBub3cgc3BsaXQgdG90YWwgZ2FpbiB0byByZiBhbmQgYmIgZ2FpbiAqLworCWdhaW4gPSBzdGF0ZS0+Y3VycmVudF9nYWluID4+IEdBSU5fQUxQSEE7CisKKwkvKiByZXF1ZXN0ZWQgZ2FpbiBpcyBiaWdnZXIgdGhhbiByZiBnYWluIGxpbWl0IC0gQUNJL1dCRCBhZGp1c3RtZW50ICovCisJaWYgKGdhaW4gPiAoc3RhdGUtPnJmX2dhaW5fbGltaXQgPj4gV0JEX0FMUEhBKSkgeworCQlyZiA9IHN0YXRlLT5yZl9nYWluX2xpbWl0ID4+IFdCRF9BTFBIQTsKKwkJYmIgPSBnYWluIC0gcmY7CisJCWlmIChiYiA+IHN0YXRlLT5iYl9yYW1wWzBdKQorCQkJYmIgPSBzdGF0ZS0+YmJfcmFtcFswXTsKKwl9IGVsc2UgewkJLyogaGlnaCBzaWduYWwgbGV2ZWwgLT4gYWxsIGdhaW5zIHB1dCBvbiBSRiAqLworCQlyZiA9IGdhaW47CisJCWJiID0gMDsKKwl9CisKKwlzdGF0ZS0+Z2FpblswXSA9IHJmOworCXN0YXRlLT5nYWluWzFdID0gYmI7CisKKwkvKiBzb2Z0d2FyZSByYW1wICovCisJLyogU3RhcnQgd2l0aCBSRiBnYWlucyAqLworCWcgPSBzdGF0ZS0+cmZfcmFtcCArIDE7CS8qIHBvaW50IG9uIFJGIExOQTEgbWF4IGdhaW4gKi8KKwlyZWYgPSByZjsKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CS8qIEdvIG92ZXIgYWxsIGFtcGxpZmllcnMgPT4gNVJGIGFtcHMgKyAyIEJCIGFtcHMgPSA3IGFtcHMgKi8KKwkJaWYgKGdbMF0gPT0gMCB8fCByZWYgPCAoZ1sxXSAtIGdbMF0pKQkvKiBpZiB0b3RhbCBnYWluIG9mIHRoZSBjdXJyZW50IGFtcCBpcyBudWxsIG9yIHRoaXMgYW1wIGlzIG5vdCBjb25jZXJuZWQgYmVjYXVzZSBpdCBzdGFydHMgdG8gd29yayBmcm9tIGFuIGhpZ2hlciBnYWluIHZhbHVlICovCisJCQl2ID0gMDsJLyogZm9yY2UgdGhlIGdhaW4gdG8gd3JpdGUgZm9yIHRoZSBjdXJyZW50IGFtcCB0byBiZSBudWxsICovCisJCWVsc2UgaWYgKHJlZiA+PSBnWzFdKQkvKiBHYWluIHRvIHNldCBpcyBoaWdoZXIgdGhhbiB0aGUgaGlnaCB3b3JraW5nIHBvaW50IG9mIHRoaXMgYW1wICovCisJCQl2ID0gZ1syXTsJLyogZm9yY2UgdGhpcyBhbXAgdG8gYmUgZnVsbCBnYWluICovCisJCWVsc2UJCS8qIGNvbXB1dGUgdGhlIHZhbHVlIHRvIHNldCB0byB0aGlzIGFtcCBiZWNhdXNlIHdlIGFyZSBzb21ld2hlcmUgaW4gaGlzIHJhbmdlICovCisJCQl2ID0gKChyZWYgLSAoZ1sxXSAtIGdbMF0pKSAqIGdbMl0pIC8gZ1swXTsKKworCQlpZiAoaSA9PSAwKQkvKiBMTkEgMSByZWcgbWFwcGluZyAqLworCQkJZ2Fpbl9yZWdbMF0gPSB2OworCQllbHNlIGlmIChpID09IDEpCS8qIExOQSAyIHJlZyBtYXBwaW5nICovCisJCQlnYWluX3JlZ1swXSB8PSB2IDw8IDc7CisJCWVsc2UgaWYgKGkgPT0gMikJLyogTE5BIDMgcmVnIG1hcHBpbmcgKi8KKwkJCWdhaW5fcmVnWzFdID0gdjsKKwkJZWxzZSBpZiAoaSA9PSAzKQkvKiBMTkEgNCByZWcgbWFwcGluZyAqLworCQkJZ2Fpbl9yZWdbMV0gfD0gdiA8PCA3OworCQllbHNlIGlmIChpID09IDQpCS8qIENCQU5EIExOQSByZWcgbWFwcGluZyAqLworCQkJZ2Fpbl9yZWdbMl0gPSB2IHwgc3RhdGUtPnJmX2x0X2RlZjsKKwkJZWxzZSBpZiAoaSA9PSA1KQkvKiBCQiBnYWluIDEgcmVnIG1hcHBpbmcgKi8KKwkJCWdhaW5fcmVnWzNdID0gdiA8PCAzOworCQllbHNlIGlmIChpID09IDYpCS8qIEJCIGdhaW4gMiByZWcgbWFwcGluZyAqLworCQkJZ2Fpbl9yZWdbM10gfD0gdiA8PCA4OworCisJCWcgKz0gMzsJCS8qIGdvIHRvIG5leHQgZ2FpbiBibG9jICovCisKKwkJLyogV2hlbiBSRiBpcyBmaW5pc2hlZCwgc3RhcnQgd2l0aCBCQiAqLworCQlpZiAoaSA9PSA0KSB7CisJCQlnID0gc3RhdGUtPmJiX3JhbXAgKyAxOwkvKiBwb2ludCBvbiBCQiBnYWluIDEgbWF4IGdhaW4gKi8KKwkJCXJlZiA9IGJiOworCQl9CisJfQorCWdhaW5fcmVnWzNdIHw9IHN0YXRlLT5iYl8xX2RlZjsKKwlnYWluX3JlZ1szXSB8PSAoKGJiICUgMTApICogMTAwKSAvIDEyNTsKKworI2lmZGVmIERFQlVHX0FHQworCWRwcmludGsoIkdBIENBTEM6IERCOiAlM2QocmYpICsgJTNkKGJiKSA9ICUzZCBnYWluX3JlZ1swXT0lMDR4IGdhaW5fcmVnWzFdPSUwNHggZ2Fpbl9yZWdbMl09JTA0eCBnYWluX3JlZ1swXT0lMDR4IiwgcmYsIGJiLCByZiArIGJiLAorCQlnYWluX3JlZ1swXSwgZ2Fpbl9yZWdbMV0sIGdhaW5fcmVnWzJdLCBnYWluX3JlZ1szXSk7CisjZW5kaWYKKworCS8qIFdyaXRlIHRoZSBhbXBsaWZpZXIgcmVncyAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdiA9IGdhaW5fcmVnW2ldOworCQlpZiAoZm9yY2UgfHwgc3RhdGUtPmdhaW5fcmVnW2ldICE9IHYpIHsKKwkJCXN0YXRlLT5nYWluX3JlZ1tpXSA9IHY7CisJCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgZ2Fpbl9yZWdfYWRkcltpXSwgdik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpYjAwOTBfc2V0X2Jvb3N0KHN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSwgaW50IG9ub2ZmKQoreworCXN0YXRlLT5iYl8xX2RlZiAmPSAweGRmZmY7CisJc3RhdGUtPmJiXzFfZGVmIHw9IG9ub2ZmIDw8IDEzOworfQorCitzdGF0aWMgdm9pZCBkaWIwMDkwX3NldF9yZnJhbXAoc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlLCBjb25zdCB1MTYgKiBjZmcpCit7CisJc3RhdGUtPnJmX3JhbXAgPSBjZmc7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjAwOTBfc2V0X3JmcmFtcF9wd20oc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlLCBjb25zdCB1MTYgKiBjZmcpCit7CisJc3RhdGUtPnJmX3JhbXAgPSBjZmc7CisKKwlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyYSwgMHhmZmZmKTsKKworCWRwcmludGsoInRvdGFsIFJGIGdhaW46ICVkZEIsIHN0ZXA6ICVkIiwgKHUzMikgY2ZnWzBdLCBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDJhKSk7CisKKwlkaWIwMDkwX3dyaXRlX3JlZ3Moc3RhdGUsIDB4MmMsIGNmZyArIDMsIDYpOworCWRpYjAwOTBfd3JpdGVfcmVncyhzdGF0ZSwgMHgzZSwgY2ZnICsgOSwgMik7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjAwOTBfc2V0X2JicmFtcChzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUsIGNvbnN0IHUxNiAqIGNmZykKK3sKKwlzdGF0ZS0+YmJfcmFtcCA9IGNmZzsKKwlkaWIwMDkwX3NldF9ib29zdChzdGF0ZSwgY2ZnWzBdID4gNTAwKTsJLyogd2Ugd2FudCB0aGUgYm9vc3QgaWYgdGhlIGdhaW4gaXMgaGlnaGVyIHRoYXQgNTBkQiAqLworfQorCitzdGF0aWMgdm9pZCBkaWIwMDkwX3NldF9iYnJhbXBfcHdtKHN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSwgY29uc3QgdTE2ICogY2ZnKQoreworCXN0YXRlLT5iYl9yYW1wID0gY2ZnOworCisJZGliMDA5MF9zZXRfYm9vc3Qoc3RhdGUsIGNmZ1swXSA+IDUwMCk7CS8qIHdlIHdhbnQgdGhlIGJvb3N0IGlmIHRoZSBnYWluIGlzIGhpZ2hlciB0aGF0IDUwZEIgKi8KKworCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDMzLCAweGZmZmYpOworCWRwcmludGsoInRvdGFsIEJCIGdhaW46ICVkZEIsIHN0ZXA6ICVkIiwgKHUzMikgY2ZnWzBdLCBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDMzKSk7CisJZGliMDA5MF93cml0ZV9yZWdzKHN0YXRlLCAweDM1LCBjZmcgKyAzLCA0KTsKK30KKwordm9pZCBkaWIwMDkwX3B3bV9nYWluX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCS8qIHJlc2V0IHRoZSBBR0MgKi8KKworCWlmIChzdGF0ZS0+Y29uZmlnLT51c2VfcHdtX2FnYykgeworI2lmZGVmIENPTkZJR19CQU5EX1NCQU5ECisJCWlmIChzdGF0ZS0+Y3VycmVudF9iYW5kID09IEJBTkRfU0JBTkQpIHsKKwkJCWRpYjAwOTBfc2V0X3JmcmFtcF9wd20oc3RhdGUsIHJmX3JhbXBfcHdtX3NiYW5kKTsKKwkJCWRpYjAwOTBfc2V0X2JicmFtcF9wd20oc3RhdGUsIGJiX3JhbXBfcHdtX2Jvb3N0KTsKKwkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkFORF9DQkFORAorCQlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX0NCQU5EKSB7CisJCQlkaWIwMDkwX3NldF9yZnJhbXBfcHdtKHN0YXRlLCByZl9yYW1wX3B3bV9jYmFuZCk7CisJCQlkaWIwMDkwX3NldF9iYnJhbXBfcHdtKHN0YXRlLCBiYl9yYW1wX3B3bV9ub3JtYWwpOworCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX1ZIRgorCQlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX1ZIRikgeworCQkJZGliMDA5MF9zZXRfcmZyYW1wX3B3bShzdGF0ZSwgcmZfcmFtcF9wd21fdmhmKTsKKwkJCWRpYjAwOTBfc2V0X2JicmFtcF9wd20oc3RhdGUsIGJiX3JhbXBfcHdtX25vcm1hbCk7CisJCX0gZWxzZQorI2VuZGlmCisJCXsKKwkJCWRpYjAwOTBfc2V0X3JmcmFtcF9wd20oc3RhdGUsIHJmX3JhbXBfcHdtX3VoZik7CisJCQlkaWIwMDkwX3NldF9iYnJhbXBfcHdtKHN0YXRlLCBiYl9yYW1wX3B3bV9ub3JtYWwpOworCQl9CisKKwkJaWYgKHN0YXRlLT5yZl9yYW1wWzBdICE9IDApCisJCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgzMiwgKDMgPDwgMTEpKTsKKwkJZWxzZQorCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MzIsICgwIDw8IDExKSk7CisKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MzksICgxIDw8IDEwKSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkaWIwMDkwX3B3bV9nYWluX3Jlc2V0KTsKKworaW50IGRpYjAwOTBfZ2Fpbl9jb250cm9sKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCWVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSAqdHVuZV9zdGF0ZSA9ICZzdGF0ZS0+dHVuZV9zdGF0ZTsKKwlpbnQgcmV0ID0gMTA7CisKKwl1MTYgd2JkX3ZhbCA9IDA7CisJdTggYXBwbHlfZ2Fpbl9pbW1lZGlhdGx5ID0gMTsKKwlzMTYgd2JkX2Vycm9yID0gMCwgYWRjX2Vycm9yID0gMDsKKworCWlmICgqdHVuZV9zdGF0ZSA9PSBDVF9BR0NfU1RBUlQpIHsKKwkJc3RhdGUtPmFnY19mcmVlemUgPSAwOworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwNCwgMHgwKTsKKworI2lmZGVmIENPTkZJR19CQU5EX1NCQU5ECisJCWlmIChzdGF0ZS0+Y3VycmVudF9iYW5kID09IEJBTkRfU0JBTkQpIHsKKwkJCWRpYjAwOTBfc2V0X3JmcmFtcChzdGF0ZSwgcmZfcmFtcF9zYmFuZCk7CisJCQlkaWIwMDkwX3NldF9iYnJhbXAoc3RhdGUsIGJiX3JhbXBfYm9vc3QpOworCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX1ZIRgorCQlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX1ZIRikgeworCQkJZGliMDA5MF9zZXRfcmZyYW1wKHN0YXRlLCByZl9yYW1wX3ZoZik7CisJCQlkaWIwMDkwX3NldF9iYnJhbXAoc3RhdGUsIGJiX3JhbXBfYm9vc3QpOworCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX0NCQU5ECisJCWlmIChzdGF0ZS0+Y3VycmVudF9iYW5kID09IEJBTkRfQ0JBTkQpIHsKKwkJCWRpYjAwOTBfc2V0X3JmcmFtcChzdGF0ZSwgcmZfcmFtcF9jYmFuZCk7CisJCQlkaWIwMDkwX3NldF9iYnJhbXAoc3RhdGUsIGJiX3JhbXBfYm9vc3QpOworCQl9IGVsc2UKKyNlbmRpZgorCQl7CisJCQlkaWIwMDkwX3NldF9yZnJhbXAoc3RhdGUsIHJmX3JhbXBfdWhmKTsKKwkJCWRpYjAwOTBfc2V0X2JicmFtcChzdGF0ZSwgYmJfcmFtcF9ib29zdCk7CisJCX0KKworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgzMiwgMCk7CisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDM5LCAwKTsKKworCQlkaWIwMDkwX3diZF90YXJnZXQoc3RhdGUsIHN0YXRlLT5jdXJyZW50X3JmKTsKKworCQlzdGF0ZS0+cmZfZ2Fpbl9saW1pdCA9IHN0YXRlLT5yZl9yYW1wWzBdIDw8IFdCRF9BTFBIQTsKKwkJc3RhdGUtPmN1cnJlbnRfZ2FpbiA9ICgoc3RhdGUtPnJmX3JhbXBbMF0gKyBzdGF0ZS0+YmJfcmFtcFswXSkgLyAyKSA8PCBHQUlOX0FMUEhBOworCisJCSp0dW5lX3N0YXRlID0gQ1RfQUdDX1NURVBfMDsKKwl9IGVsc2UgaWYgKCFzdGF0ZS0+YWdjX2ZyZWV6ZSkgeworCQlzMTYgd2JkOworCisJCWludCBhZGM7CisJCXdiZF92YWwgPSBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDFkKTsKKworCQkvKiByZWFkIGFuZCBjYWxjIHRoZSB3YmQgcG93ZXIgKi8KKwkJd2JkID0gZGliMDA5MF93YmRfdG9fZGIoc3RhdGUsIHdiZF92YWwpOworCQl3YmRfZXJyb3IgPSBzdGF0ZS0+d2JkX3RhcmdldCAtIHdiZDsKKworCQlpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfQUdDX1NURVBfMCkgeworCQkJaWYgKHdiZF9lcnJvciA8IDAgJiYgc3RhdGUtPnJmX2dhaW5fbGltaXQgPiAwKSB7CisjaWZkZWYgQ09ORklHX0JBTkRfQ0JBTkQKKwkJCQkvKiBpbiBjYXNlIG9mIENCQU5EIHR1bmUgcmVkdWNlIGZpcnN0IHRoZSBsdF9nYWluMiBiZWZvcmUgYWRqdXN0aW5nIHRoZSBSRiBnYWluICovCisJCQkJdTggbHRnMiA9IChzdGF0ZS0+cmZfbHRfZGVmID4+IDEwKSAmIDB4NzsKKwkJCQlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX0NCQU5EICYmIGx0ZzIpIHsKKwkJCQkJbHRnMiA+Pj0gMTsKKwkJCQkJc3RhdGUtPnJmX2x0X2RlZiAmPSBsdGcyIDw8IDEwOwkvKiByZWR1Y2UgaW4gMyBzdGVwcyBmcm9tIDcgdG8gMCAqLworCQkJCX0KKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQlzdGF0ZS0+YWdjX3N0ZXAgPSAwOworCQkJCSp0dW5lX3N0YXRlID0gQ1RfQUdDX1NURVBfMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIGNhbGMgdGhlIGFkYyBwb3dlciAqLworCQkJYWRjID0gc3RhdGUtPmNvbmZpZy0+Z2V0X2FkY19wb3dlcihmZSk7CisJCQlhZGMgPSAoYWRjICogKChzMzIpIDM1NTc3NCkgKyAoKChzMzIpIDEpIDw8IDIwKSkgPj4gMjE7CS8qIGluY2x1ZGVkIGluIFswOi03MDBdICovCisKKwkJCWFkY19lcnJvciA9IChzMTYpICgoKHMzMikgQURDX1RBUkdFVCkgLSBhZGMpOworI2lmZGVmIENPTkZJR19TVEFOREFSRF9EQUIKKwkJCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPT0gU1RBTkRBUkRfREFCKQorCQkJCWFkY19lcnJvciArPSAxMzA7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1RBTkRBUkRfRFZCVAorCQkJaWYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9PSBTVEFOREFSRF9EVkJUICYmCisJCQkgICAgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLm1vZHVsYXRpb24gPT0gUUFNXzY0IHx8IHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLm1vZHVsYXRpb24gPT0gUUFNXzE2KSkKKwkJCQlhZGNfZXJyb3IgKz0gNjA7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1lTX0lTREJUCisJCQlpZiAoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfSVNEQlQpICYmICgoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzBdLnNlZ21lbnRfY291bnQgPgorCQkJCQkJCQkJCQkgICAgICAgMCkKKwkJCQkJCQkJCQkJICAgICAgJiYKKwkJCQkJCQkJCQkJICAgICAgKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclswXS5tb2R1bGF0aW9uID09CisJCQkJCQkJCQkJCQlRQU1fNjQpCisJCQkJCQkJCQkJCSAgICAgICB8fCAoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMF0uCisJCQkJCQkJCQkJCQkgICBtb2R1bGF0aW9uID09IFFBTV8xNikpKQorCQkJCQkJCQkJCQkgICAgIHx8CisJCQkJCQkJCQkJCSAgICAgKChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsxXS5zZWdtZW50X2NvdW50ID4KKwkJCQkJCQkJCQkJICAgICAgIDApCisJCQkJCQkJCQkJCSAgICAgICYmCisJCQkJCQkJCQkJCSAgICAgICgoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMV0ubW9kdWxhdGlvbiA9PQorCQkJCQkJCQkJCQkJUUFNXzY0KQorCQkJCQkJCQkJCQkgICAgICAgfHwgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzFdLgorCQkJCQkJCQkJCQkJICAgbW9kdWxhdGlvbiA9PSBRQU1fMTYpKSkKKwkJCQkJCQkJCQkJICAgICB8fAorCQkJCQkJCQkJCQkgICAgICgoc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUubGF5ZXJbMl0uc2VnbWVudF9jb3VudCA+CisJCQkJCQkJCQkJCSAgICAgICAwKQorCQkJCQkJCQkJCQkgICAgICAmJgorCQkJCQkJCQkJCQkgICAgICAoKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmxheWVyWzJdLm1vZHVsYXRpb24gPT0KKwkJCQkJCQkJCQkJCVFBTV82NCkKKwkJCQkJCQkJCQkJICAgICAgIHx8IChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5sYXllclsyXS4KKwkJCQkJCQkJCQkJCSAgIG1vZHVsYXRpb24gPT0gUUFNXzE2KSkpCisJCQkgICAgKQorCQkJICAgICkKKwkJCQlhZGNfZXJyb3IgKz0gNjA7CisjZW5kaWYKKworCQkJaWYgKCp0dW5lX3N0YXRlID09IENUX0FHQ19TVEVQXzEpIHsJLyogcXVpY2tseSBnbyB0byB0aGUgY29ycmVjdCByYW5nZSBvZiB0aGUgQURDIHBvd2VyICovCisJCQkJaWYgKEFCUyhhZGNfZXJyb3IpIDwgNTAgfHwgc3RhdGUtPmFnY19zdGVwKysgPiA1KSB7CisKKyNpZmRlZiBDT05GSUdfU1RBTkRBUkRfREFCCisJCQkJCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPT0gU1RBTkRBUkRfREFCKSB7CisJCQkJCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwMiwgKDEgPDwgMTUpIHwgKDE1IDw8IDExKSB8ICgzMSA8PCA2KSB8ICg2MykpOwkvKiBjYXAgdmFsdWUgPSA2MyA6IG5hcnJvdyBCQiBmaWx0ZXIgOiBGYyA9IDEuOE1IeiAqLworCQkJCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MDQsIDB4MCk7CisJCQkJCX0gZWxzZQorI2VuZGlmCisJCQkJCXsKKwkJCQkJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDAyLCAoMSA8PCAxNSkgfCAoMyA8PCAxMSkgfCAoNiA8PCA2KSB8ICgzMikpOworCQkJCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MDQsIDB4MDEpOwkvKjAgPSAxS0h6IDsgMSA9IDE1MEh6IDsgMiA9IDUwSHogOyAzID0gNTBLSHogOyA0ID0gc2Vydm8gZmFzdCAqLworCQkJCQl9CisKKwkJCQkJKnR1bmVfc3RhdGUgPSBDVF9BR0NfU1RPUDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGV2ZXJ5dGhpbmcgaGlnaGVyIHRoYW4gb3IgZXF1YWwgdG8gQ1RfQUdDX1NUT1AgbWVhbnMgdHJhY2tpbmcgKi8KKwkJCQlyZXQgPSAxMDA7CS8qIDEwbXMgaW50ZXJ2YWwgKi8KKwkJCQlhcHBseV9nYWluX2ltbWVkaWF0bHkgPSAwOworCQkJfQorCQl9CisjaWZkZWYgREVCVUdfQUdDCisJCWRwcmludGsKKwkJICAgICgiRkU6ICVkLCB0dW5lIHN0YXRlICVkLCBBREMgPSAlM2RkQiAoQURDIGVyciAlM2QpIFdCRCAlM2RkQiAoV0JEIGVyciAlM2QsIFdCRCB2YWwgU0FEQzogJTRkKSwgUkZHYWluTGltaXQgKFRPUCk6ICUzZCwgc2lnbmFsOiAlM2RkQm0iLAorCQkgICAgICh1MzIpIGZlLT5pZCwgKHUzMikgKnR1bmVfc3RhdGUsICh1MzIpIGFkYywgKHUzMikgYWRjX2Vycm9yLCAodTMyKSB3YmQsICh1MzIpIHdiZF9lcnJvciwgKHUzMikgd2JkX3ZhbCwKKwkJICAgICAodTMyKSBzdGF0ZS0+cmZfZ2Fpbl9saW1pdCA+PiBXQkRfQUxQSEEsIChzMzIpIDIwMCArIGFkYyAtIChzdGF0ZS0+Y3VycmVudF9nYWluID4+IEdBSU5fQUxQSEEpKTsKKyNlbmRpZgorCX0KKworCS8qIGFwcGx5IGdhaW4gKi8KKwlpZiAoIXN0YXRlLT5hZ2NfZnJlZXplKQorCQlkaWIwMDkwX2dhaW5fYXBwbHkoc3RhdGUsIGFkY19lcnJvciwgd2JkX2Vycm9yLCBhcHBseV9nYWluX2ltbWVkaWF0bHkpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjAwOTBfZ2Fpbl9jb250cm9sKTsKKwordm9pZCBkaWIwMDkwX2dldF9jdXJyZW50X2dhaW4oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqIHJmLCB1MTYgKiBiYiwgdTE2ICogcmZfZ2Fpbl9saW1pdCwgdTE2ICogcmZsdCkKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpZiAocmYpCisJCSpyZiA9IHN0YXRlLT5nYWluWzBdOworCWlmIChiYikKKwkJKmJiID0gc3RhdGUtPmdhaW5bMV07CisJaWYgKHJmX2dhaW5fbGltaXQpCisJCSpyZl9nYWluX2xpbWl0ID0gc3RhdGUtPnJmX2dhaW5fbGltaXQ7CisJaWYgKHJmbHQpCisJCSpyZmx0ID0gKHN0YXRlLT5yZl9sdF9kZWYgPj4gMTApICYgMHg3OworfQorRVhQT1JUX1NZTUJPTChkaWIwMDkwX2dldF9jdXJyZW50X2dhaW4pOworCit1MTYgZGliMDA5MF9nZXRfd2JkX29mZnNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICp0dW5lcikKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3QgPSB0dW5lci0+dHVuZXJfcHJpdjsKKwlyZXR1cm4gc3QtPndiZF9vZmZzZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjAwOTBfZ2V0X3diZF9vZmZzZXQpOworCitzdGF0aWMgY29uc3QgdTE2IGRpYjAwOTBfZGVmYXVsdHNbXSA9IHsKKworCTI1LCAweDAxLAorCTB4MDAwMCwKKwkweDk5YTAsCisJMHg2MDA4LAorCTB4MDAwMCwKKwkweDhhY2IsCisJMHgwMDAwLAorCTB4MDQwNSwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwMCwKKwkweGI4MDIsCisJMHgwMzAwLAorCTB4MmQxMiwKKwkweGJhYzAsCisJMHg3YzAwLAorCTB4ZGJiOSwKKwkweDA5NTQsCisJMHgwNzQzLAorCTB4ODAwMCwKKwkweDAwMDEsCisJMHgwMDQwLAorCTB4MDEwMCwKKwkweDAwMDAsCisJMHhlOTEwLAorCTB4MTQ5ZSwKKworCTEsIDB4MWMsCisJMHhmZjJkLAorCisJMSwgMHgzOSwKKwkweDAwMDAsCisKKwkxLCAweDFiLAorCUVOX0lRQURDIHwgRU5fQkIgfCBFTl9CSUFTIHwgRU5fRElHQ0xLIHwgRU5fUExMIHwgRU5fQ1JZU1RBTCwKKwkyLCAweDFlLAorCTB4MDdGRiwKKwkweDAwMDcsCisKKwkxLCAweDI0LAorCUVOX1VIRiB8IEVOX0NSWVNUQUwsCisKKwkyLCAweDNjLAorCTB4M2ZmLAorCTB4MTExLAorCTAKK307CisKK3N0YXRpYyBpbnQgZGliMDA5MF9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MTYgbCwgciwgKm47CisKKwlkaWIwMDkwX3Jlc2V0X2RpZ2l0YWwoZmUsIHN0YXRlLT5jb25maWcpOworCXN0YXRlLT5yZXZpc2lvbiA9IGRpYjAwOTBfaWRlbnRpZnkoZmUpOworCisJLyogUmV2aXNpb24gZGVmaW5pdGlvbiAqLworCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisjaWZkZWYgRUZVU0UKKwllbHNlIGlmICgoc3RhdGUtPnJldmlzaW9uICYgMHgxZikgPj0gMykJLyogVXBkYXRlIHRoZSBlZnVzZSA6IE9ubHkgYXZhaWxhYmxlIGZvciBLUk9TVVMgPiBQMUMgKi8KKwkJZGliMDA5MF9zZXRfRUZVU0Uoc3RhdGUpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVFVORVJfRElCMDA5MF9QMUJfU1VQUE9SVAorCWlmICghKHN0YXRlLT5yZXZpc2lvbiAmIDB4MSkpCS8qIGl0IGlzIFAxQiAtIHJlc2V0IGlzIGFscmVhZHkgZG9uZSAqLworCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJLyogVXBsb2FkIHRoZSBkZWZhdWx0IHZhbHVlcyAqLworCW4gPSAodTE2ICopIGRpYjAwOTBfZGVmYXVsdHM7CisJbCA9IHBnbV9yZWFkX3dvcmQobisrKTsKKwl3aGlsZSAobCkgeworCQlyID0gcGdtX3JlYWRfd29yZChuKyspOworCQlkbyB7CisJCQkvKiBERUJVR19UVU5FUiAqLworCQkJLyogZHByaW50aygiJWQsICVkLCAlZCIsIGwsIHIsIHBnbV9yZWFkX3dvcmQobikpOyAqLworCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIHIsIHBnbV9yZWFkX3dvcmQobisrKSk7CisJCQlyKys7CisJCX0gd2hpbGUgKC0tbCk7CisJCWwgPSBwZ21fcmVhZF93b3JkKG4rKyk7CisJfQorCisJLyogQ29uZ2lndXJlIGluIGZ1bmN0aW9uIG9mIHRoZSBjcnlzdGFsICovCisJaWYgKHN0YXRlLT5jb25maWctPmlvLmNsb2NrX2toeiA+PSAyNDAwMCkKKwkJbCA9IDE7CisJZWxzZQorCQlsID0gMjsKKwlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxNCwgbCk7CisJZHByaW50aygiUGxsIGxvY2sgOiAlZCIsIChkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDFhKSA+PiAxMSkgJiAweDEpOworCisJc3RhdGUtPnJlc2V0ID0gMzsJLyogZW5hYmxlIGlxLW9mZnNldC1jYWxpYnJhdGlvbiBhbmQgd2JkLWNhbGlicmF0aW9uIHdoZW4gdHVuaW5nIG5leHQgdGltZSAqLworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgc3RlcHModSkgKCgodSkgPiAxNSkgPyAoKHUpLTE2KSA6ICh1KSkKKyNkZWZpbmUgSU5URVJOX1dBSVQgMTAKK3N0YXRpYyBpbnQgZGliMDA5MF9nZXRfb2Zmc2V0KHN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSwgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlKQoreworCWludCByZXQgPSBJTlRFUk5fV0FJVCAqIDEwOworCisJc3dpdGNoICgqdHVuZV9zdGF0ZSkgeworCWNhc2UgQ1RfVFVORVJfU1RFUF8yOgorCQkvKiBUdXJucyB0byBwb3NpdGl2ZSAqLworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxZiwgMHg3KTsKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzM7CisJCWJyZWFrOworCisJY2FzZSBDVF9UVU5FUl9TVEVQXzM6CisJCXN0YXRlLT5hZGNfZGlmZiA9IGRpYjAwOTBfcmVhZF9yZWcoc3RhdGUsIDB4MWQpOworCisJCS8qIFR1cm5zIHRvIG5lZ2F0aXZlICovCisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDFmLCAweDQpOworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfNDsKKwkJYnJlYWs7CisKKwljYXNlIENUX1RVTkVSX1NURVBfNDoKKwkJc3RhdGUtPmFkY19kaWZmIC09IGRpYjAwOTBfcmVhZF9yZWcoc3RhdGUsIDB4MWQpOworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfNTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgZGNfY2FsaWJyYXRpb24geworCXVpbnQ4X3QgYWRkcjsKKwl1aW50OF90IG9mZnNldDsKKwl1aW50OF90IHBnYToxOworCXVpbnQxNl90IGJiMTsKKwl1aW50OF90IGk6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNfY2FsaWJyYXRpb24gZGNfdGFibGVbXSA9IHsKKwkvKiBTdGVwMSBCQiBnYWluMT0gMjYgd2l0aCBib29zdCAxLCBnYWluIDIgPSAwICovCisJezB4MDYsIDUsIDEsICgxIDw8IDEzKSB8ICgwIDw8IDgpIHwgKDI2IDw8IDMpLCAxfSwKKwl7MHgwNywgMTEsIDEsICgxIDw8IDEzKSB8ICgwIDw8IDgpIHwgKDI2IDw8IDMpLCAwfSwKKwkvKiBTdGVwIDIgQkIgZ2FpbiAxID0gMjYgd2l0aCBib29zdCA9IDEgJiBnYWluIDIgPSAyOSAqLworCXsweDA2LCAwLCAwLCAoMSA8PCAxMykgfCAoMjkgPDwgOCkgfCAoMjYgPDwgMyksIDF9LAorCXsweDA2LCAxMCwgMCwgKDEgPDwgMTMpIHwgKDI5IDw8IDgpIHwgKDI2IDw8IDMpLCAwfSwKKwl7MH0sCit9OworCitzdGF0aWMgdm9pZCBkaWIwMDkwX3NldF90cmltKHN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSkKK3sKKwl1MTYgKnZhbDsKKworCWlmIChzdGF0ZS0+ZGMtPmFkZHIgPT0gMHgwNykKKwkJdmFsID0gJnN0YXRlLT5iYjc7CisJZWxzZQorCQl2YWwgPSAmc3RhdGUtPmJiNjsKKworCSp2YWwgJj0gfigweDFmIDw8IHN0YXRlLT5kYy0+b2Zmc2V0KTsKKwkqdmFsIHw9IHN0YXRlLT5zdGVwIDw8IHN0YXRlLT5kYy0+b2Zmc2V0OworCisJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIHN0YXRlLT5kYy0+YWRkciwgKnZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZGliMDA5MF9kY19vZmZzZXRfY2FsaWJyYXRpb24oc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlLCBlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgKnR1bmVfc3RhdGUpCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKCp0dW5lX3N0YXRlKSB7CisKKwljYXNlIENUX1RVTkVSX1NUQVJUOgorCQkvKiBpbml0ICovCisJCWRwcmludGsoIkludGVybmFsIERDIGNhbGlicmF0aW9uIik7CisKKwkJLyogdGhlIExOQSBpcyBvZmYgKi8KKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MjQsIDB4MDJlZCk7CisKKwkJLyogZm9yY2UgdmNtMiA9IDAuOFYgKi8KKwkJc3RhdGUtPmJiNiA9IDA7CisJCXN0YXRlLT5iYjcgPSAweDA0MGQ7CisKKwkJc3RhdGUtPmRjID0gZGNfdGFibGU7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzA7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIENUX1RVTkVSX1NURVBfMDoKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MDEsIHN0YXRlLT5kYy0+YmIxKTsKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MDcsIHN0YXRlLT5iYjcgfCAoc3RhdGUtPmRjLT5pIDw8IDcpKTsKKworCQlzdGF0ZS0+c3RlcCA9IDA7CisKKwkJc3RhdGUtPm1pbl9hZGNfZGlmZiA9IDEwMjM7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzE7CisJCXJldCA9IDUwOworCQlicmVhazsKKworCWNhc2UgQ1RfVFVORVJfU1RFUF8xOgorCQlkaWIwMDkwX3NldF90cmltKHN0YXRlKTsKKworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfMjsKKwkJYnJlYWs7CisKKwljYXNlIENUX1RVTkVSX1NURVBfMjoKKwljYXNlIENUX1RVTkVSX1NURVBfMzoKKwljYXNlIENUX1RVTkVSX1NURVBfNDoKKwkJcmV0ID0gZGliMDA5MF9nZXRfb2Zmc2V0KHN0YXRlLCB0dW5lX3N0YXRlKTsKKwkJYnJlYWs7CisKKwljYXNlIENUX1RVTkVSX1NURVBfNToJLyogZm91bmQgYW4gb2Zmc2V0ICovCisJCWRwcmludGsoIkZFJWQ6IElRQyByZWFkPSVkLCBjdXJyZW50PSV4Iiwgc3RhdGUtPmZlLT5pZCwgKHUzMikgc3RhdGUtPmFkY19kaWZmLCBzdGF0ZS0+c3RlcCk7CisKKwkJLyogZmlyc3QgdHVybiBmb3IgdGhpcyBmcmVxdWVuY3kgKi8KKwkJaWYgKHN0YXRlLT5zdGVwID09IDApIHsKKwkJCWlmIChzdGF0ZS0+ZGMtPnBnYSAmJiBzdGF0ZS0+YWRjX2RpZmYgPCAwKQorCQkJCXN0YXRlLT5zdGVwID0gMHgxMDsKKwkJCWlmIChzdGF0ZS0+ZGMtPnBnYSA9PSAwICYmIHN0YXRlLT5hZGNfZGlmZiA+IDApCisJCQkJc3RhdGUtPnN0ZXAgPSAweDEwOworCQl9CisKKwkJc3RhdGUtPmFkY19kaWZmID0gQUJTKHN0YXRlLT5hZGNfZGlmZik7CisKKwkJaWYgKHN0YXRlLT5hZGNfZGlmZiA8IHN0YXRlLT5taW5fYWRjX2RpZmYgJiYgc3RlcHMoc3RhdGUtPnN0ZXApIDwgMTUpIHsJLyogc3RvcCBzZWFyY2ggd2hlbiB0aGUgZGVsdGEgdG8gMCBpcyBpbmNyZWFzaW5nICovCisJCQlzdGF0ZS0+c3RlcCsrOworCQkJc3RhdGUtPm1pbl9hZGNfZGlmZiA9IHN0YXRlLT5hZGNfZGlmZjsKKwkJCSp0dW5lX3N0YXRlID0gQ1RfVFVORVJfU1RFUF8xOworCQl9IGVsc2UgeworCisJCQkvKiB0aGUgbWluaW11bSB3YXMgd2hhdCB3ZSBoYXZlIHNlZW4gaW4gdGhlIHN0ZXAgYmVmb3JlICovCisJCQlzdGF0ZS0+c3RlcC0tOworCQkJZGliMDA5MF9zZXRfdHJpbShzdGF0ZSk7CisKKwkJCWRwcmludGsoIkZFJWQ6IEJCIE9mZnNldCBDYWwsIEJCcmVnPSVoZCxPZmZzZXQ9JWhkLFZhbHVlIFNldD0laGQiLCBzdGF0ZS0+ZmUtPmlkLCBzdGF0ZS0+ZGMtPmFkZHIsIHN0YXRlLT5hZGNfZGlmZiwKKwkJCQlzdGF0ZS0+c3RlcCk7CisKKwkJCXN0YXRlLT5kYysrOworCQkJaWYgKHN0YXRlLT5kYy0+YWRkciA9PSAwKQkvKiBkb25lICovCisJCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzY7CisJCQllbHNlCisJCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzA7CisKKwkJfQorCQlicmVhazsKKworCWNhc2UgQ1RfVFVORVJfU1RFUF82OgorCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwNywgc3RhdGUtPmJiNyAmIH4weDAwMDgpOworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxZiwgMHg3KTsKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEFSVDsJLyogcmVzZXQgZG9uZSAtPiByZWFsIHR1bmluZyBjYW4gbm93IGJlZ2luICovCisJCXN0YXRlLT5yZXNldCAmPSB+MHgxOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjAwOTBfd2JkX2NhbGlicmF0aW9uKHN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSwgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlICp0dW5lX3N0YXRlKQoreworCXN3aXRjaCAoKnR1bmVfc3RhdGUpIHsKKwljYXNlIENUX1RVTkVSX1NUQVJUOgorCQkvKiBXQkQtbW9kZT1sb2csIEJpYXM9MiwgR2Fpbj02LCBUZXN0bW9kZT0xLCBlbj0xLCBXQkRNVVg9MSAqLworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMCwgMHhkYjA5IHwgKDEgPDwgMTApKTsKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MjQsIEVOX1VIRiAmIDB4MGZmZik7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzA7CisJCXJldHVybiA5MDsJLyogd2FpdCBmb3IgdGhlIFdCRE1VWCB0byBzd2l0Y2ggYW5kIGZvciB0aGUgQURDIHRvIHNhbXBsZSAqLworCWNhc2UgQ1RfVFVORVJfU1RFUF8wOgorCQlzdGF0ZS0+d2JkX29mZnNldCA9IGRpYjAwOTBfcmVhZF9yZWcoc3RhdGUsIDB4MWQpOworCQlkcHJpbnRrKCJXQkQgY2FsaWJyYXRpb24gb2Zmc2V0ID0gJWQiLCBzdGF0ZS0+d2JkX29mZnNldCk7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEFSVDsJLyogcmVzZXQgZG9uZSAtPiByZWFsIHR1bmluZyBjYW4gbm93IGJlZ2luICovCisJCXN0YXRlLT5yZXNldCAmPSB+MHgyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjAwOTBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IHRtcDsKKworCWlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwIDw9IDUwMDApCisJCXRtcCA9ICgzIDw8IDE0KTsKKwllbHNlIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwIDw9IDYwMDApCisJCXRtcCA9ICgyIDw8IDE0KTsKKwllbHNlIGlmIChzdGF0ZS0+ZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogLyAxMDAwIDw9IDcwMDApCisJCXRtcCA9ICgxIDw8IDE0KTsKKwllbHNlCisJCXRtcCA9ICgwIDw8IDE0KTsKKworCXN0YXRlLT5iYl8xX2RlZiAmPSAweDNmZmY7CisJc3RhdGUtPmJiXzFfZGVmIHw9IHRtcDsKKworCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCBzdGF0ZS0+YmJfMV9kZWYpOwkvKiBiZSBzdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgYmItZmlsdGVyICovCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGliMDA5MF9wbGwgZGliMDA5MF9wbGxfdGFibGVbXSA9IHsKKyNpZmRlZiBDT05GSUdfQkFORF9DQkFORAorCXs1NjAwMCwgMCwgOSwgNDgsIDZ9LAorCXs3MDAwMCwgMSwgOSwgNDgsIDZ9LAorCXs4NzAwMCwgMCwgOCwgMzIsIDR9LAorCXsxMDUwMDAsIDEsIDgsIDMyLCA0fSwKKwl7MTE1MDAwLCAwLCA3LCAyNCwgNn0sCisJezE0MDAwMCwgMSwgNywgMjQsIDZ9LAorCXsxNzAwMDAsIDAsIDYsIDE2LCA0fSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX1ZIRgorCXsyMDAwMDAsIDEsIDYsIDE2LCA0fSwKKwl7MjMwMDAwLCAwLCA1LCAxMiwgNn0sCisJezI4MDAwMCwgMSwgNSwgMTIsIDZ9LAorCXszNDAwMDAsIDAsIDQsIDgsIDR9LAorCXszODAwMDAsIDEsIDQsIDgsIDR9LAorCXs0NTAwMDAsIDAsIDMsIDYsIDZ9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0JBTkRfVUhGCisJezU4MDAwMCwgMSwgMywgNiwgNn0sCisJezcwMDAwMCwgMCwgMiwgNCwgNH0sCisJezg2MDAwMCwgMSwgMiwgNCwgNH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkFORF9MQkFORAorCXsxODAwMDAwLCAxLCAwLCAyLCA0fSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX1NCQU5ECisJezI5MDAwMDAsIDAsIDE0LCAxLCA0fSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWIwMDkwX3R1bmluZyBkaWIwMDkwX3R1bmluZ190YWJsZV9mbV92aGZfb25fY2JhbmRbXSA9IHsKKworI2lmZGVmIENPTkZJR19CQU5EX0NCQU5ECisJezE4NDAwMCwgNCwgMSwgMTUsIDB4MjgwLCAweDI5MTIsIDB4Yjk0ZSwgRU5fQ0FCfSwKKwl7MjI3MDAwLCA0LCAzLCAxNSwgMHgyODAsIDB4MjkxMiwgMHhiOTRlLCBFTl9DQUJ9LAorCXszODAwMDAsIDQsIDcsIDE1LCAweDI4MCwgMHgyOTEyLCAweGI5NGUsIEVOX0NBQn0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkFORF9VSEYKKwl7NTIwMDAwLCAyLCAwLCAxNSwgMHgzMDAsIDB4MWQxMiwgMHhiOWNlLCBFTl9VSEZ9LAorCXs1NTAwMDAsIDIsIDIsIDE1LCAweDMwMCwgMHgxZDEyLCAweGI5Y2UsIEVOX1VIRn0sCisJezY1MDAwMCwgMiwgMywgMTUsIDB4MzAwLCAweDFkMTIsIDB4YjljZSwgRU5fVUhGfSwKKwl7NzUwMDAwLCAyLCA1LCAxNSwgMHgzMDAsIDB4MWQxMiwgMHhiOWNlLCBFTl9VSEZ9LAorCXs4NTAwMDAsIDIsIDYsIDE1LCAweDMwMCwgMHgxZDEyLCAweGI5Y2UsIEVOX1VIRn0sCisJezkwMDAwMCwgMiwgNywgMTUsIDB4MzAwLCAweDFkMTIsIDB4YjljZSwgRU5fVUhGfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX0xCQU5ECisJezE1MDAwMDAsIDQsIDAsIDIwLCAweDMwMCwgMHgxOTEyLCAweDgyYzksIEVOX0xCRH0sCisJezE2MDAwMDAsIDQsIDEsIDIwLCAweDMwMCwgMHgxOTEyLCAweDgyYzksIEVOX0xCRH0sCisJezE4MDAwMDAsIDQsIDMsIDIwLCAweDMwMCwgMHgxOTEyLCAweDgyYzksIEVOX0xCRH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkFORF9TQkFORAorCXsyMzAwMDAwLCAxLCA0LCAyMCwgMHgzMDAsIDB4MmQyQSwgMHg4MmM3LCBFTl9TQkR9LAorCXsyOTAwMDAwLCAxLCA3LCAyMCwgMHgyODAsIDB4MmRlYiwgMHg4MzQ3LCBFTl9TQkR9LAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpYjAwOTBfdHVuaW5nIGRpYjAwOTBfdHVuaW5nX3RhYmxlW10gPSB7CisKKyNpZmRlZiBDT05GSUdfQkFORF9DQkFORAorCXsxNzAwMDAsIDQsIDEsIDE1LCAweDI4MCwgMHgyOTEyLCAweGI5NGUsIEVOX0NBQn0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkFORF9WSEYKKwl7MTg0MDAwLCAxLCAxLCAxNSwgMHgzMDAsIDB4NGQxMiwgMHhiOTRlLCBFTl9WSEZ9LAorCXsyMjcwMDAsIDEsIDMsIDE1LCAweDMwMCwgMHg0ZDEyLCAweGI5NGUsIEVOX1ZIRn0sCisJezM4MDAwMCwgMSwgNywgMTUsIDB4MzAwLCAweDRkMTIsIDB4Yjk0ZSwgRU5fVkhGfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX1VIRgorCXs1MjAwMDAsIDIsIDAsIDE1LCAweDMwMCwgMHgxZDEyLCAweGI5Y2UsIEVOX1VIRn0sCisJezU1MDAwMCwgMiwgMiwgMTUsIDB4MzAwLCAweDFkMTIsIDB4YjljZSwgRU5fVUhGfSwKKwl7NjUwMDAwLCAyLCAzLCAxNSwgMHgzMDAsIDB4MWQxMiwgMHhiOWNlLCBFTl9VSEZ9LAorCXs3NTAwMDAsIDIsIDUsIDE1LCAweDMwMCwgMHgxZDEyLCAweGI5Y2UsIEVOX1VIRn0sCisJezg1MDAwMCwgMiwgNiwgMTUsIDB4MzAwLCAweDFkMTIsIDB4YjljZSwgRU5fVUhGfSwKKwl7OTAwMDAwLCAyLCA3LCAxNSwgMHgzMDAsIDB4MWQxMiwgMHhiOWNlLCBFTl9VSEZ9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0JBTkRfTEJBTkQKKwl7MTUwMDAwMCwgNCwgMCwgMjAsIDB4MzAwLCAweDE5MTIsIDB4ODJjOSwgRU5fTEJEfSwKKwl7MTYwMDAwMCwgNCwgMSwgMjAsIDB4MzAwLCAweDE5MTIsIDB4ODJjOSwgRU5fTEJEfSwKKwl7MTgwMDAwMCwgNCwgMywgMjAsIDB4MzAwLCAweDE5MTIsIDB4ODJjOSwgRU5fTEJEfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CQU5EX1NCQU5ECisJezIzMDAwMDAsIDEsIDQsIDIwLCAweDMwMCwgMHgyZDJBLCAweDgyYzcsIEVOX1NCRH0sCisJezI5MDAwMDAsIDEsIDcsIDIwLCAweDI4MCwgMHgyZGViLCAweDgzNDcsIEVOX1NCRH0sCisjZW5kaWYKK307CisKKyNkZWZpbmUgV0JEICAgICAweDc4MQkJLyogMSAxIDEgMSAwMDAwIDAgMCAxICovCitzdGF0aWMgaW50IGRpYjAwOTBfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwljb25zdCBzdHJ1Y3QgZGliMDA5MF90dW5pbmcgKnR1bmUgPSBzdGF0ZS0+Y3VycmVudF90dW5lX3RhYmxlX2luZGV4OworCWNvbnN0IHN0cnVjdCBkaWIwMDkwX3BsbCAqcGxsID0gc3RhdGUtPmN1cnJlbnRfcGxsX3RhYmxlX2luZGV4OworCWVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSAqdHVuZV9zdGF0ZSA9ICZzdGF0ZS0+dHVuZV9zdGF0ZTsKKworCXUzMiByZjsKKwl1MTYgbG80ID0gMHhlOTAwLCBsbzUsIGxvNiwgRGVuOworCXUzMiBGQkRpdiwgUmVzdCwgRlJFRiwgVkNPRl9rSHogPSAwOworCXUxNiB0bXAsIGFkYzsKKwlpbnQ4X3Qgc3RlcF9zaWduOworCWludCByZXQgPSAxMDsJCS8qIDFtcyBpcyB0aGUgZGVmYXVsdCBkZWxheSBtb3N0IG9mIHRoZSB0aW1lICovCisJdTggYywgaTsKKworCXN0YXRlLT5jdXJyZW50X2JhbmQgPSAodTgpIEJBTkRfT0ZfRlJFUVVFTkNZKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5IC8gMTAwMCk7CisJcmYgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSAvIDEwMDAgKyAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PQorCQkJCQkJCUJBTkRfVUhGID8gc3RhdGUtPmNvbmZpZy0+ZnJlcV9vZmZzZXRfa2h6X3VoZiA6IHN0YXRlLT5jb25maWctPmZyZXFfb2Zmc2V0X2toel92aGYpOworCS8qIGluIGFueSBjYXNlIHdlIGZpcnN0IG5lZWQgdG8gZG8gYSByZXNldCBpZiBuZWVkZWQgKi8KKwlpZiAoc3RhdGUtPnJlc2V0ICYgMHgxKQorCQlyZXR1cm4gZGliMDA5MF9kY19vZmZzZXRfY2FsaWJyYXRpb24oc3RhdGUsIHR1bmVfc3RhdGUpOworCWVsc2UgaWYgKHN0YXRlLT5yZXNldCAmIDB4MikKKwkJcmV0dXJuIGRpYjAwOTBfd2JkX2NhbGlicmF0aW9uKHN0YXRlLCB0dW5lX3N0YXRlKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqIFZDTyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGVmYXVsdCB2YWx1ZXMgZm9yIEZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBmcm9tIHRoZXNlIGFyZSBuZWVkZWQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIENwLEhGZGl2LFZDT2JhbmQsU0QsTnVtLERlbixGQiBhbmQgUkVGRGl2ICAgICAgICAgICAgICovCisKKyNpZmRlZiBDT05GSUdfU1lTX0lTREJUCisJaWYgKHN0YXRlLT5mZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfSVNEQlQgJiYgc3RhdGUtPmZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfc2JfbW9kZSA9PSAxKQorCQlyZiArPSA4NTA7CisjZW5kaWYKKworCWlmIChzdGF0ZS0+Y3VycmVudF9yZiAhPSByZikgeworCQlzdGF0ZS0+dHVuZXJfaXNfdHVuZWQgPSAwOworCisJCXR1bmUgPSBkaWIwMDkwX3R1bmluZ190YWJsZTsKKworCQl0bXAgPSAoc3RhdGUtPnJldmlzaW9uID4+IDUpICYgMHg3OworCQlpZiAodG1wID09IDB4NCB8fCB0bXAgPT0gMHg3KSB7CisJCQkvKiBDQkFORCB0dW5lciB2ZXJzaW9uIGZvciBWSEYgKi8KKwkJCWlmIChzdGF0ZS0+Y3VycmVudF9iYW5kID09IEJBTkRfRk0gfHwgc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX1ZIRikgeworCQkJCS8qIEZvcmNlIENCQU5EICovCisJCQkJc3RhdGUtPmN1cnJlbnRfYmFuZCA9IEJBTkRfQ0JBTkQ7CisJCQkJdHVuZSA9IGRpYjAwOTBfdHVuaW5nX3RhYmxlX2ZtX3ZoZl9vbl9jYmFuZDsKKwkJCX0KKwkJfQorCisJCXBsbCA9IGRpYjAwOTBfcGxsX3RhYmxlOworCQkvKiBMb29rIGZvciB0aGUgaW50ZXJ2YWwgKi8KKwkJd2hpbGUgKHJmID4gdHVuZS0+bWF4X2ZyZXEpCisJCQl0dW5lKys7CisJCXdoaWxlIChyZiA+IHBsbC0+bWF4X2ZyZXEpCisJCQlwbGwrKzsKKwkJc3RhdGUtPmN1cnJlbnRfdHVuZV90YWJsZV9pbmRleCA9IHR1bmU7CisJCXN0YXRlLT5jdXJyZW50X3BsbF90YWJsZV9pbmRleCA9IHBsbDsKKwl9CisKKwlpZiAoKnR1bmVfc3RhdGUgPT0gQ1RfVFVORVJfU1RBUlQpIHsKKworCQlpZiAoc3RhdGUtPnR1bmVyX2lzX3R1bmVkID09IDApCisJCQlzdGF0ZS0+Y3VycmVudF9yZiA9IDA7CisKKwkJaWYgKHN0YXRlLT5jdXJyZW50X3JmICE9IHJmKSB7CisKKwkJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDBiLCAweGI4MDAgfCAodHVuZS0+c3dpdGNoX3RyaW0pKTsKKworCQkJLyogZXh0ZXJuYWwgbG9vcCBmaWx0ZXIsIG90aGVyd2lzZToKKwkJCSAqIGxvNSA9ICgwIDw8IDE1KSB8ICgwIDw8IDEyKSB8ICgwIDw8IDExKSB8ICgzIDw8IDkpIHwgKDQgPDwgNikgfCAoMyA8PCA0KSB8IDQ7CisJCQkgKiBsbzYgPSAweDBlMzQgKi8KKwkJCWlmIChwbGwtPnZjb19iYW5kKQorCQkJCWxvNSA9IDB4MDQ5ZTsKKwkJCWVsc2UgaWYgKHN0YXRlLT5jb25maWctPmFuYWxvZ19vdXRwdXQpCisJCQkJbG81ID0gMHgwNDFkOworCQkJZWxzZQorCQkJCWxvNSA9IDB4MDQxYzsKKworCQkJbG81IHw9IChwbGwtPmhmZGl2X2NvZGUgPDwgMTEpIHwgKHBsbC0+dmNvX2JhbmQgPDwgNyk7CS8qIGJpdCAxNSBpcyB0aGUgc3BsaXQgdG8gdGhlIHNsYXZlLCB3ZSBkbyBub3QgZG8gaXQgaGVyZSAqLworCisJCQlpZiAoIXN0YXRlLT5jb25maWctPmlvLnBsbF9pbnRfbG9vcF9maWx0KQorCQkJCWxvNiA9IDB4ZmYyODsKKwkJCWVsc2UKKwkJCQlsbzYgPSAoc3RhdGUtPmNvbmZpZy0+aW8ucGxsX2ludF9sb29wX2ZpbHQgPDwgMyk7CisKKwkJCVZDT0Zfa0h6ID0gKHBsbC0+aGZkaXYgKiByZikgKiAyOworCisJCQlGUkVGID0gc3RhdGUtPmNvbmZpZy0+aW8uY2xvY2tfa2h6OworCisJCQlGQkRpdiA9IChWQ09GX2tIeiAvIHBsbC0+dG9wcmVzYyAvIEZSRUYpOworCQkJUmVzdCA9IChWQ09GX2tIeiAvIHBsbC0+dG9wcmVzYykgLSBGQkRpdiAqIEZSRUY7CisKKwkJCWlmIChSZXN0IDwgTFBGKQorCQkJCVJlc3QgPSAwOworCQkJZWxzZSBpZiAoUmVzdCA8IDIgKiBMUEYpCisJCQkJUmVzdCA9IDIgKiBMUEY7CisJCQllbHNlIGlmIChSZXN0ID4gKEZSRUYgLSBMUEYpKSB7CisJCQkJUmVzdCA9IDA7CisJCQkJRkJEaXYgKz0gMTsKKwkJCX0gZWxzZSBpZiAoUmVzdCA+IChGUkVGIC0gMiAqIExQRikpCisJCQkJUmVzdCA9IEZSRUYgLSAyICogTFBGOworCQkJUmVzdCA9IChSZXN0ICogNjUyOCkgLyAoRlJFRiAvIDEwKTsKKworCQkJRGVuID0gMTsKKworCQkJZHByaW50aygiICoqKioqICAqKioqKioqIFJlc3QgdmFsdWUgPSAlZCIsIFJlc3QpOworCisJCQlpZiAoUmVzdCA+IDApIHsKKwkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+YW5hbG9nX291dHB1dCkKKwkJCQkJbG82IHw9ICgxIDw8IDIpIHwgMjsKKwkJCQllbHNlCisJCQkJCWxvNiB8PSAoMSA8PCAyKSB8IDE7CisJCQkJRGVuID0gMjU1OworCQkJfQorI2lmZGVmIENPTkZJR19CQU5EX1NCQU5ECisJCQlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX1NCQU5EKQorCQkJCWxvNiAmPSAweGZmZmI7CisjZW5kaWYKKworCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MTUsICh1MTYpIEZCRGl2KTsKKworCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MTYsIChEZW4gPDwgOCkgfCAxKTsKKworCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MTcsICh1MTYpIFJlc3QpOworCisJCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOSwgbG81KTsKKworCQkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MWMsIGxvNik7CisKKwkJCWxvNiA9IHR1bmUtPnR1bmVyX2VuYWJsZTsKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT5hbmFsb2dfb3V0cHV0KQorCQkJCWxvNiA9IChsbzYgJiAweGZmOWYpIHwgMHgyOworCisJCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgyNCwgbG82IHwgRU5fTE8KKyNpZmRlZiBDT05GSUdfRElCMDA5MF9VU0VfUFdNX0FHQworCQkJCQkgIHwgc3RhdGUtPmNvbmZpZy0+dXNlX3B3bV9hZ2MgKiBFTl9DUllTVEFMCisjZW5kaWYKKwkJCSAgICApOworCisJCQlzdGF0ZS0+Y3VycmVudF9yZiA9IHJmOworCisJCQkvKiBwcmVwYXJlIGEgY29tcGxldGUgY2FwdHJpbSAqLworCQkJc3RhdGUtPnN0ZXAgPSBzdGF0ZS0+Y2FwdHJpbSA9IHN0YXRlLT5mY2FwdHJpbSA9IDY0OworCisJCX0gZWxzZSB7CS8qIHdlIGFyZSBhbHJlYWR5IHR1bmVkIHRvIHRoaXMgZnJlcXVlbmN5IC0gdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdCAgKi8KKworCQkJLyogZG8gYSBtaW5pbWFsIGNhcHRyaW0gZXZlbiBpZiB0aGUgZnJlcXVlbmN5IGhhcyBub3QgY2hhbmdlZCAqLworCQkJc3RhdGUtPnN0ZXAgPSA0OworCQkJc3RhdGUtPmNhcHRyaW0gPSBzdGF0ZS0+ZmNhcHRyaW0gPSBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDE4KSAmIDB4N2Y7CisJCX0KKwkJc3RhdGUtPmFkY19kaWZmID0gMzAwMDsKKworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxMCwgMHgyQjEpOworCisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDFlLCAweDAwMzIpOworCisJCXJldCA9IDIwOworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfMTsKKwl9IGVsc2UgaWYgKCp0dW5lX3N0YXRlID09IENUX1RVTkVSX1NURVBfMCkgeworCQkvKiBub3RoaW5nICovCisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzEpIHsKKwkJc3RhdGUtPnN0ZXAgLz0gMjsKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MTgsIGxvNCB8IHN0YXRlLT5jYXB0cmltKTsKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzI7CisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzIpIHsKKworCQlhZGMgPSBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDFkKTsKKwkJZHByaW50aygiRkUgJWQgQ0FQVFJJTT0lZDsgQURDID0gJWQgKEFEQykgJiAlZG1WIiwgKHUzMikgZmUtPmlkLCAodTMyKSBzdGF0ZS0+Y2FwdHJpbSwgKHUzMikgYWRjLAorCQkJKHUzMikgKGFkYykgKiAodTMyKSAxODAwIC8gKHUzMikgMTAyNCk7CisKKwkJaWYgKGFkYyA+PSA0MDApIHsKKwkJCWFkYyAtPSA0MDA7CisJCQlzdGVwX3NpZ24gPSAtMTsKKwkJfSBlbHNlIHsKKwkJCWFkYyA9IDQwMCAtIGFkYzsKKwkJCXN0ZXBfc2lnbiA9IDE7CisJCX0KKworCQlpZiAoYWRjIDwgc3RhdGUtPmFkY19kaWZmKSB7CisJCQlkcHJpbnRrKCJGRSAlZCBDQVBUUklNPSVkIGlzIGNsb3NlciB0byB0YXJnZXQgKCVkLyVkKSIsICh1MzIpIGZlLT5pZCwgKHUzMikgc3RhdGUtPmNhcHRyaW0sICh1MzIpIGFkYywgKHUzMikgc3RhdGUtPmFkY19kaWZmKTsKKwkJCXN0YXRlLT5hZGNfZGlmZiA9IGFkYzsKKwkJCXN0YXRlLT5mY2FwdHJpbSA9IHN0YXRlLT5jYXB0cmltOworCisJCX0KKworCQlzdGF0ZS0+Y2FwdHJpbSArPSBzdGVwX3NpZ24gKiBzdGF0ZS0+c3RlcDsKKwkJaWYgKHN0YXRlLT5zdGVwID49IDEpCisJCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NURVBfMTsKKwkJZWxzZQorCQkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzM7CisKKwkJcmV0ID0gMTU7CisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzMpIHsKKwkJLyp3cml0ZSB0aGUgZmluYWwgY3B0cmltIGNvbmZpZyAqLworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgxOCwgbG80IHwgc3RhdGUtPmZjYXB0cmltKTsKKworI2lmZGVmIENPTkZJR19UVU5FUl9ESUIwMDkwX0NBUFRSSU1fTUVNT1JZCisJCXN0YXRlLT5tZW1vcnlbc3RhdGUtPm1lbW9yeV9pbmRleF0uY2FwID0gc3RhdGUtPmZjYXB0cmltOworI2VuZGlmCisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzQ7CisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzQpIHsKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MWUsIDB4MDdmZik7CisKKwkJZHByaW50aygiRkUgJWQgRmluYWwgQ2FwdHJpbTogJWQiLCAodTMyKSBmZS0+aWQsICh1MzIpIHN0YXRlLT5mY2FwdHJpbSk7CisJCWRwcmludGsoIkZFICVkIEhGRElWIGNvZGU6ICVkIiwgKHUzMikgZmUtPmlkLCAodTMyKSBwbGwtPmhmZGl2X2NvZGUpOworCQlkcHJpbnRrKCJGRSAlZCBWQ08gPSAlZCIsICh1MzIpIGZlLT5pZCwgKHUzMikgcGxsLT52Y29fYmFuZCk7CisJCWRwcmludGsoIkZFICVkIFZDT0YgaW4ga0h6OiAlZCAoKCVkKiVkKSA8PCAxKSkiLCAodTMyKSBmZS0+aWQsICh1MzIpICgocGxsLT5oZmRpdiAqIHJmKSAqIDIpLCAodTMyKSBwbGwtPmhmZGl2LCAodTMyKSByZik7CisJCWRwcmludGsoIkZFICVkIFJFRkRJVjogJWQsIEZSRUY6ICVkIiwgKHUzMikgZmUtPmlkLCAodTMyKSAxLCAodTMyKSBzdGF0ZS0+Y29uZmlnLT5pby5jbG9ja19raHopOworCQlkcHJpbnRrKCJGRSAlZCBGQkRJVjogJWQsIFJlc3Q6ICVkIiwgKHUzMikgZmUtPmlkLCAodTMyKSBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDE1KSwgKHUzMikgZGliMDA5MF9yZWFkX3JlZyhzdGF0ZSwgMHgxNykpOworCQlkcHJpbnRrKCJGRSAlZCBOdW06ICVkLCBEZW46ICVkLCBTRDogJWQiLCAodTMyKSBmZS0+aWQsICh1MzIpIGRpYjAwOTBfcmVhZF9yZWcoc3RhdGUsIDB4MTcpLAorCQkJKHUzMikgKGRpYjAwOTBfcmVhZF9yZWcoc3RhdGUsIDB4MTYpID4+IDgpLCAodTMyKSBkaWIwMDkwX3JlYWRfcmVnKHN0YXRlLCAweDFjKSAmIDB4Myk7CisKKwkJYyA9IDQ7CisJCWkgPSAzOworI2lmIGRlZmluZWQoQ09ORklHX0JBTkRfTEJBTkQpIHx8IGRlZmluZWQoQ09ORklHX0JBTkRfU0JBTkQpCisJCWlmICgoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX0xCQU5EKSB8fCAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBCQU5EX1NCQU5EKSkgeworCQkJYyA9IDI7CisJCQlpID0gMjsKKwkJfQorI2VuZGlmCisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDEwLCAoYyA8PCAxMykgfCAoaSA8PCAxMSkgfCAoV0JECisjaWZkZWYgQ09ORklHX0RJQjAwOTBfVVNFX1BXTV9BR0MKKwkJCQkJCQkJCXwgKHN0YXRlLT5jb25maWctPnVzZV9wd21fYWdjIDw8IDEpCisjZW5kaWYKKwkJCQkgICkpOworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwOSwgKHR1bmUtPmxuYV90dW5lIDw8IDUpIHwgKHR1bmUtPmxuYV9iaWFzIDw8IDApKTsKKwkJZGliMDA5MF93cml0ZV9yZWcoc3RhdGUsIDB4MGMsIHR1bmUtPnYyaSk7CisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDBkLCB0dW5lLT5taXgpOworCQlkaWIwMDkwX3dyaXRlX3JlZyhzdGF0ZSwgMHgwZSwgdHVuZS0+bG9hZCk7CisKKwkJKnR1bmVfc3RhdGUgPSBDVF9UVU5FUl9TVEVQXzU7CisJfSBlbHNlIGlmICgqdHVuZV9zdGF0ZSA9PSBDVF9UVU5FUl9TVEVQXzUpIHsKKworCQkvKiBpbml0aWFsaXplIHRoZSBsdCBnYWluIHJlZ2lzdGVyICovCisJCXN0YXRlLT5yZl9sdF9kZWYgPSAweDdjMDA7CisJCWRpYjAwOTBfd3JpdGVfcmVnKHN0YXRlLCAweDBmLCBzdGF0ZS0+cmZfbHRfZGVmKTsKKworCQlkaWIwMDkwX3NldF9iYW5kd2lkdGgoc3RhdGUpOworCQlzdGF0ZS0+dHVuZXJfaXNfdHVuZWQgPSAxOworCQkqdHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NUT1A7CisJfSBlbHNlCisJCXJldCA9IEZFX0NBTExCQUNLX1RJTUVfTkVWRVI7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkaWIwMDkwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJa2ZyZWUoZmUtPnR1bmVyX3ByaXYpOworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIGRpYjAwOTBfZ2V0X3R1bmVfc3RhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwlyZXR1cm4gc3RhdGUtPnR1bmVfc3RhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjAwOTBfZ2V0X3R1bmVfc3RhdGUpOworCitpbnQgZGliMDA5MF9zZXRfdHVuZV9zdGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHR1bmVfc3RhdGUpCit7CisJc3RydWN0IGRpYjAwOTBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwlzdGF0ZS0+dHVuZV9zdGF0ZSA9IHR1bmVfc3RhdGU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjAwOTBfc2V0X3R1bmVfc3RhdGUpOworCitzdGF0aWMgaW50IGRpYjAwOTBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICogZnJlcXVlbmN5KQoreworCXN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJKmZyZXF1ZW5jeSA9IDEwMDAgKiBzdGF0ZS0+Y3VycmVudF9yZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWIwMDkwX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwl1aW50MzJfdCByZXQ7CisKKwlzdGF0ZS0+dHVuZV9zdGF0ZSA9IENUX1RVTkVSX1NUQVJUOworCisJZG8geworCQlyZXQgPSBkaWIwMDkwX3R1bmUoZmUpOworCQlpZiAocmV0ICE9IEZFX0NBTExCQUNLX1RJTUVfTkVWRVIpCisJCQltc2xlZXAocmV0IC8gMTApOworCQllbHNlCisJCQlicmVhazsKKwl9IHdoaWxlIChzdGF0ZS0+dHVuZV9zdGF0ZSAhPSBDVF9UVU5FUl9TVE9QKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl90dW5lcl9vcHMgZGliMDA5MF9vcHMgPSB7CisJLmluZm8gPSB7CisJCSAubmFtZSA9ICJEaUJjb20gRGlCMDA5MCIsCisJCSAuZnJlcXVlbmN5X21pbiA9IDQ1MDAwMDAwLAorCQkgLmZyZXF1ZW5jeV9tYXggPSA4NjAwMDAwMDAsCisJCSAuZnJlcXVlbmN5X3N0ZXAgPSAxMDAwLAorCQkgfSwKKwkucmVsZWFzZSA9IGRpYjAwOTBfcmVsZWFzZSwKKworCS5pbml0ID0gZGliMDA5MF93YWtldXAsCisJLnNsZWVwID0gZGliMDA5MF9zbGVlcCwKKwkuc2V0X3BhcmFtcyA9IGRpYjAwOTBfc2V0X3BhcmFtcywKKwkuZ2V0X2ZyZXF1ZW5jeSA9IGRpYjAwOTBfZ2V0X2ZyZXF1ZW5jeSwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwOTBfcmVnaXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBjb25zdCBzdHJ1Y3QgZGliMDA5MF9jb25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgZGliMDA5MF9zdGF0ZSAqc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGliMDA5MF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXN0LT5jb25maWcgPSBjb25maWc7CisJc3QtPmkyYyA9IGkyYzsKKwlzdC0+ZmUgPSBmZTsKKwlmZS0+dHVuZXJfcHJpdiA9IHN0OworCisJaWYgKGRpYjAwOTBfcmVzZXQoZmUpICE9IDApCisJCWdvdG8gZnJlZV9tZW07CisKKwlwcmludGsoS0VSTl9JTkZPICJEaUIwMDkwOiBzdWNjZXNzZnVsbHkgaWRlbnRpZmllZFxuIik7CisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJmRpYjAwOTBfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKworCXJldHVybiBmZTsKKyBmcmVlX21lbToKKwlrZnJlZShzdCk7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChkaWIwMDkwX3JlZ2lzdGVyKTsKKworTU9EVUxFX0FVVEhPUigiUGF0cmljayBCb2V0dGNoZXIgPHBib2V0dGNoZXJAZGliY29tLmZyPiIpOworTU9EVUxFX0FVVEhPUigiT2xpdmllciBHcmVuaWUgPG9saXZpZXIuZ3JlbmllQGRpYmNvbS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgRGlCY29tIDAwOTAgYmFzZS1iYW5kIFJGIFR1bmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTc3MTFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIExpbnV4LURWQiBEcml2ZXIgZm9yIERpQmNvbSdzIERpQjAwOTAgYmFzZS1iYW5kIFJGIFR1bmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS03IERpQmNvbSAoaHR0cDovL3d3dy5kaWJjb20uZnIvKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisjaWZuZGVmIERJQjAwOTBfSAorI2RlZmluZSBESUIwMDkwX0gKKworc3RydWN0IGR2Yl9mcm9udGVuZDsKK3N0cnVjdCBpMmNfYWRhcHRlcjsKKworI2RlZmluZSBERUZBVUxUX0RJQjAwOTBfSTJDX0FERFJFU1MgMHg2MAorCitzdHJ1Y3QgZGliMDA5MF9pb19jb25maWcgeworCXUzMiBjbG9ja19raHo7CisKKwl1OCBwbGxfYnlwYXNzOjE7CisJdTggcGxsX3JhbmdlOjE7CisJdTggcGxsX3ByZWRpdjo2OworCXU4IHBsbF9sb29wZGl2OjY7CisKKwl1OCBhZGNfY2xvY2tfcmF0aW87CS8qIHZhbGlkIGlzIDgsIDcgLDYgKi8KKwl1MTYgcGxsX2ludF9sb29wX2ZpbHQ7Cit9OworCitzdHJ1Y3QgZGliMDA5MF9jb25maWcgeworCXN0cnVjdCBkaWIwMDkwX2lvX2NvbmZpZyBpbzsKKwlpbnQgKCpyZXNldCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgaW50KTsKKwlpbnQgKCpzbGVlcCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgaW50KTsKKworCS8qICBvZmZzZXQgaW4ga0h6ICovCisJaW50IGZyZXFfb2Zmc2V0X2toel91aGY7CisJaW50IGZyZXFfb2Zmc2V0X2toel92aGY7CisKKwlpbnQgKCpnZXRfYWRjX3Bvd2VyKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKKworCXU4IGNsa291dHRvYmFtc2U6MTsJLyogYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSBjbG9jayBvdXRwdXQgKi8KKwl1OCBhbmFsb2dfb3V0cHV0OworCisJdTggaTJjX2FkZHJlc3M7CisJLyogYWRkIGRyaXZlcyBhbmQgb3RoZXIgdGhpbmdzIGlmIG5lY2Vzc2FyeSAqLworCXUxNiB3YmRfdmhmX29mZnNldDsKKwl1MTYgd2JkX2NiYW5kX29mZnNldDsKKwl1OCB1c2VfcHdtX2FnYzsKKwl1OCBjbGtvdXRkcml2ZTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA5MCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9ESUIwMDkwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwOTBfcmVnaXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBjb25zdCBzdHJ1Y3QgZGliMDA5MF9jb25maWcgKmNvbmZpZyk7CitleHRlcm4gdm9pZCBkaWIwMDkwX2RjY19mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBmYXN0KTsKK2V4dGVybiB2b2lkIGRpYjAwOTBfcHdtX2dhaW5fcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworZXh0ZXJuIHUxNiBkaWIwMDkwX2dldF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKnR1bmVyKTsKK2V4dGVybiBpbnQgZGliMDA5MF9nYWluX2NvbnRyb2woc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworZXh0ZXJuIGVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSBkaWIwMDkwX2dldF90dW5lX3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKK2V4dGVybiBpbnQgZGliMDA5MF9zZXRfdHVuZV9zdGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHR1bmVfc3RhdGUpOworZXh0ZXJuIHZvaWQgZGliMDA5MF9nZXRfY3VycmVudF9nYWluKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKiByZiwgdTE2ICogYmIsIHUxNiAqIHJmX2dhaW5fbGltaXQsIHUxNiAqIHJmbHQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA5MF9yZWdpc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDkwX2NvbmZpZyAqY29uZmlnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGliMDA5MF9kY2NfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggZmFzdCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpYjAwOTBfcHdtX2dhaW5fcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGRpYjAwOTBfZ2V0X3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqdHVuZXIpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpYjAwOTBfZ2Fpbl9jb250cm9sKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSBkaWIwMDkwX2dldF90dW5lX3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBDVF9ET05FOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaWIwMDkwX3NldF90dW5lX3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpYjAwOTBfZ2V0X2N1cnJlbnRfZ2FpbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICogcmYsIHUxNiAqIGJiLCB1MTYgKiByZl9nYWluX2xpbWl0LCB1MTYgKiByZmx0KQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKaW5kZXggODk4NDAwZC4uNmY2ZmEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5jCkBAIC0yOCwxOCArMjgsNiBAQAogCiAjZGVmaW5lIGRwcmludGsoYXJncy4uLikgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKEtFUk5fREVCVUcgIkRpQjgwMDA6ICIpOyBwcmludGsoYXJncyk7IHByaW50aygiXG4iKTsgfSB9IHdoaWxlICgwKQogCi1lbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgewotCUNUX0FHQ19TVEFSVCA9IDIwLAotCUNUX0FHQ19TVEVQXzAsCi0JQ1RfQUdDX1NURVBfMSwKLQlDVF9BR0NfU1RFUF8yLAotCUNUX0FHQ19TVEVQXzMsCi0JQ1RfQUdDX1NURVBfNCwKLQlDVF9BR0NfU1RPUCwKLQotCUNUX0RFTU9EX1NUQVJUID0gMzAsCi19OwotCiAjZGVmaW5lIEZFX1NUQVRVU19UVU5FX0ZBSUxFRCAwCiAKIHN0cnVjdCBpMmNfZGV2aWNlIHsKQEAgLTEzMywxMDQgKzEyMSwxMDQgQEAKIAlyZXR1cm4gZGliODAwMF9pMmNfd3JpdGUxNigmc3RhdGUtPmkyYywgcmVnLCB2YWwpOwogfQogCi1jb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzFzZWdfZHFwc2tbOF0gPSB7CitzdGF0aWMgY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8xc2VnX2RxcHNrWzhdID0gewogCSg3NjkgPDwgNSkgfCAweDBhLCAoNzQ1IDw8IDUpIHwgMHgwMywgKDU5NSA8PCA1KSB8IDB4MGQsICg3NjkgPDwgNSkgfCAweDBhLCAoOTIwIDw8IDUpIHwgMHgwOSwgKDc4NCA8PCA1KSB8IDB4MDIsICg1MTkgPDwgNSkgfCAweDBjLAogCSAgICAoOTIwIDw8IDUpIHwgMHgwOQogfTsKIAotY29uc3QgaW50MTZfdCBjb2VmZl8ya19zYl8xc2VnWzhdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfMXNlZ1s4XSA9IHsKIAkoNjkyIDw8IDUpIHwgMHgwYiwgKDY4MyA8PCA1KSB8IDB4MDEsICg1MTkgPDwgNSkgfCAweDA5LCAoNjkyIDw8IDUpIHwgMHgwYiwgMCB8IDB4MWYsIDAgfCAweDFmLCAwIHwgMHgxZiwgMCB8IDB4MWYKIH07CiAKLWNvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ18wZHFwc2tfMWRxcHNrWzhdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ18wZHFwc2tfMWRxcHNrWzhdID0gewogCSg4MzIgPDwgNSkgfCAweDEwLCAoOTEyIDw8IDUpIHwgMHgwNSwgKDkwMCA8PCA1KSB8IDB4MTIsICg4MzIgPDwgNSkgfCAweDEwLCAoLTkzMSA8PCA1KSB8IDB4MGYsICg5MTIgPDwgNSkgfCAweDA0LCAoODA3IDw8IDUpIHwgMHgxMSwKIAkgICAgKC05MzEgPDwgNSkgfCAweDBmCiB9OwogCi1jb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzNzZWdfMGRxcHNrWzhdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ18wZHFwc2tbOF0gPSB7CiAJKDYyMiA8PCA1KSB8IDB4MGMsICg5NDEgPDwgNSkgfCAweDA0LCAoNzk2IDw8IDUpIHwgMHgxMCwgKDYyMiA8PCA1KSB8IDB4MGMsICg5ODIgPDwgNSkgfCAweDBjLCAoNTE5IDw8IDUpIHwgMHgwMiwgKDU3MiA8PCA1KSB8IDB4MGUsCiAJICAgICg5ODIgPDwgNSkgfCAweDBjCiB9OwogCi1jb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzNzZWdfMWRxcHNrWzhdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ18xZHFwc2tbOF0gPSB7CiAJKDY5OSA8PCA1KSB8IDB4MTQsICg2MDcgPDwgNSkgfCAweDA0LCAoOTQ0IDw8IDUpIHwgMHgxMywgKDY5OSA8PCA1KSB8IDB4MTQsICgtNzIwIDw8IDUpIHwgMHgwZCwgKDY0MCA8PCA1KSB8IDB4MDMsICg4NjYgPDwgNSkgfCAweDEyLAogCSAgICAoLTcyMCA8PCA1KSB8IDB4MGQKIH07CiAKLWNvbnN0IGludDE2X3QgY29lZmZfMmtfc2JfM3NlZ1s4XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGNvZWZmXzJrX3NiXzNzZWdbOF0gPSB7CiAJKDY2NCA8PCA1KSB8IDB4MGMsICg5MjUgPDwgNSkgfCAweDAzLCAoOTM3IDw8IDUpIHwgMHgxMCwgKDY2NCA8PCA1KSB8IDB4MGMsICgtNjEwIDw8IDUpIHwgMHgwYSwgKDY5NyA8PCA1KSB8IDB4MDEsICg4MzYgPDwgNSkgfCAweDBlLAogCSAgICAoLTYxMCA8PCA1KSB8IDB4MGEKIH07CiAKLWNvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfMXNlZ19kcXBza1s4XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzFzZWdfZHFwc2tbOF0gPSB7CiAJKC05NTUgPDwgNSkgfCAweDBlLCAoNjg3IDw8IDUpIHwgMHgwNCwgKDgxOCA8PCA1KSB8IDB4MTAsICgtOTU1IDw8IDUpIHwgMHgwZSwgKC05MjIgPDwgNSkgfCAweDBkLCAoNzUwIDw8IDUpIHwgMHgwMywgKDY2NSA8PCA1KSB8IDB4MGYsCiAJICAgICgtOTIyIDw8IDUpIHwgMHgwZAogfTsKIAotY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8xc2VnWzhdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfMXNlZ1s4XSA9IHsKIAkoNjM4IDw8IDUpIHwgMHgwZCwgKDY4MyA8PCA1KSB8IDB4MDIsICg2MzggPDwgNSkgfCAweDBkLCAoNjM4IDw8IDUpIHwgMHgwZCwgKC02NTUgPDwgNSkgfCAweDBhLCAoNTE3IDw8IDUpIHwgMHgwMCwgKDY5OCA8PCA1KSB8IDB4MGQsCiAJICAgICgtNjU1IDw8IDUpIHwgMHgwYQogfTsKIAotY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnXzBkcXBza18xZHFwc2tbOF0gPSB7CitzdGF0aWMgY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnXzBkcXBza18xZHFwc2tbOF0gPSB7CiAJKC03MDcgPDwgNSkgfCAweDE0LCAoOTEwIDw8IDUpIHwgMHgwNiwgKDg4OSA8PCA1KSB8IDB4MTYsICgtNzA3IDw8IDUpIHwgMHgxNCwgKC05NTggPDwgNSkgfCAweDEzLCAoOTkzIDw8IDUpIHwgMHgwNSwgKDUyMyA8PCA1KSB8IDB4MTQsCiAJICAgICgtOTU4IDw8IDUpIHwgMHgxMwogfTsKIAotY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnXzBkcXBza1s4XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzNzZWdfMGRxcHNrWzhdID0gewogCSgtNzIzIDw8IDUpIHwgMHgxMywgKDkxMCA8PCA1KSB8IDB4MDUsICg3NzcgPDwgNSkgfCAweDE0LCAoLTcyMyA8PCA1KSB8IDB4MTMsICgtNTY4IDw8IDUpIHwgMHgwZiwgKDU0NyA8PCA1KSB8IDB4MDMsICg2OTYgPDwgNSkgfCAweDEyLAogCSAgICAoLTU2OCA8PCA1KSB8IDB4MGYKIH07CiAKLWNvbnN0IGludDE2X3QgY29lZmZfNGtfc2JfM3NlZ18xZHFwc2tbOF0gPSB7CitzdGF0aWMgY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnXzFkcXBza1s4XSA9IHsKIAkoLTk0MCA8PCA1KSB8IDB4MTUsICg2MDcgPDwgNSkgfCAweDA1LCAoOTE1IDw8IDUpIHwgMHgxNiwgKC05NDAgPDwgNSkgfCAweDE1LCAoLTg0OCA8PCA1KSB8IDB4MTMsICg2ODMgPDwgNSkgfCAweDA0LCAoNTQzIDw8IDUpIHwgMHgxNCwKIAkgICAgKC04NDggPDwgNSkgfCAweDEzCiB9OwogCi1jb25zdCBpbnQxNl90IGNvZWZmXzRrX3NiXzNzZWdbOF0gPSB7CitzdGF0aWMgY29uc3QgaW50MTZfdCBjb2VmZl80a19zYl8zc2VnWzhdID0gewogCSg2MTIgPDwgNSkgfCAweDEyLCAoOTEwIDw8IDUpIHwgMHgwNCwgKDg2NCA8PCA1KSB8IDB4MTQsICg2MTIgPDwgNSkgfCAweDEyLCAoLTg2OSA8PCA1KSB8IDB4MTMsICg2ODMgPDwgNSkgfCAweDAyLCAoODY5IDw8IDUpIHwgMHgxMiwKIAkgICAgKC04NjkgPDwgNSkgfCAweDEzCiB9OwogCi1jb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzFzZWdfZHFwc2tbOF0gPSB7CitzdGF0aWMgY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8xc2VnX2RxcHNrWzhdID0gewogCSgtODM1IDw8IDUpIHwgMHgxMiwgKDY4NCA8PCA1KSB8IDB4MDUsICg3MzUgPDwgNSkgfCAweDE0LCAoLTgzNSA8PCA1KSB8IDB4MTIsICgtNTk4IDw8IDUpIHwgMHgxMCwgKDc4MSA8PCA1KSB8IDB4MDQsICg3MzkgPDwgNSkgfCAweDEzLAogCSAgICAoLTU5OCA8PCA1KSB8IDB4MTAKIH07CiAKLWNvbnN0IGludDE2X3QgY29lZmZfOGtfc2JfMXNlZ1s4XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzFzZWdbOF0gPSB7CiAJKDY3MyA8PCA1KSB8IDB4MGYsICg2ODMgPDwgNSkgfCAweDAzLCAoODA4IDw8IDUpIHwgMHgxMiwgKDY3MyA8PCA1KSB8IDB4MGYsICg1ODUgPDwgNSkgfCAweDBmLCAoNTEyIDw8IDUpIHwgMHgwMSwgKDc4MCA8PCA1KSB8IDB4MGYsCiAJICAgICg1ODUgPDwgNSkgfCAweDBmCiB9OwogCi1jb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzNzZWdfMGRxcHNrXzFkcXBza1s4XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzNzZWdfMGRxcHNrXzFkcXBza1s4XSA9IHsKIAkoODYzIDw8IDUpIHwgMHgxNywgKDkzMCA8PCA1KSB8IDB4MDcsICg4NzggPDwgNSkgfCAweDE5LCAoODYzIDw8IDUpIHwgMHgxNywgKDAgPDwgNSkgfCAweDE0LCAoNTIxIDw8IDUpIHwgMHgwNSwgKDk4MCA8PCA1KSB8IDB4MTgsCiAJICAgICgwIDw8IDUpIHwgMHgxNAogfTsKIAotY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnXzBkcXBza1s4XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGNvZWZmXzhrX3NiXzNzZWdfMGRxcHNrWzhdID0gewogCSgtOTI0IDw8IDUpIHwgMHgxNywgKDkxMCA8PCA1KSB8IDB4MDYsICg3NzQgPDwgNSkgfCAweDE3LCAoLTkyNCA8PCA1KSB8IDB4MTcsICgtODc3IDw8IDUpIHwgMHgxNSwgKDU2NSA8PCA1KSB8IDB4MDQsICg1NTMgPDwgNSkgfCAweDE1LAogCSAgICAoLTg3NyA8PCA1KSB8IDB4MTUKIH07CiAKLWNvbnN0IGludDE2X3QgY29lZmZfOGtfc2JfM3NlZ18xZHFwc2tbOF0gPSB7CitzdGF0aWMgY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnXzFkcXBza1s4XSA9IHsKIAkoLTkyMSA8PCA1KSB8IDB4MTksICg2MDcgPDwgNSkgfCAweDA2LCAoODgxIDw8IDUpIHwgMHgxOSwgKC05MjEgPDwgNSkgfCAweDE5LCAoLTkyMSA8PCA1KSB8IDB4MTQsICg3MTMgPDwgNSkgfCAweDA1LCAoMTAxOCA8PCA1KSB8IDB4MTgsCiAJICAgICgtOTIxIDw8IDUpIHwgMHgxNAogfTsKIAotY29uc3QgaW50MTZfdCBjb2VmZl84a19zYl8zc2VnWzhdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgY29lZmZfOGtfc2JfM3NlZ1s4XSA9IHsKIAkoNTE0IDw8IDUpIHwgMHgxNCwgKDkxMCA8PCA1KSB8IDB4MDUsICg4NjEgPDwgNSkgfCAweDE3LCAoNTE0IDw8IDUpIHwgMHgxNCwgKDY5MCA8PCA1KSB8IDB4MTQsICg2ODMgPDwgNSkgfCAweDAzLCAoNjYyIDw8IDUpIHwgMHgxNSwKIAkgICAgKDY5MCA8PCA1KSB8IDB4MTQKIH07CiAKLWNvbnN0IGludDE2X3QgYW5hX2ZlX2NvZWZmXzNzZWdbMjRdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgYW5hX2ZlX2NvZWZmXzNzZWdbMjRdID0gewogCTgxLCA4MCwgNzgsIDc0LCA2OCwgNjEsIDU0LCA0NSwgMzcsIDI4LCAxOSwgMTEsIDQsIDEwMjIsIDEwMTcsIDEwMTMsIDEwMTAsIDEwMDgsIDEwMDgsIDEwMDgsIDEwMDgsIDEwMTAsIDEwMTQsIDEwMTcKIH07CiAKLWNvbnN0IGludDE2X3QgYW5hX2ZlX2NvZWZmXzFzZWdbMjRdID0geworc3RhdGljIGNvbnN0IGludDE2X3QgYW5hX2ZlX2NvZWZmXzFzZWdbMjRdID0gewogCTI0OSwgMjI2LCAxNjQsIDgyLCA1LCA5ODEsIDk3MCwgOTg4LCAxMDE4LCAyMCwgMzEsIDI2LCA4LCAxMDEyLCAxMDAwLCAxMDE4LCAxMDEyLCA4LCAxNSwgMTQsIDksIDMsIDEwMTcsIDEwMDMKIH07CiAKLWNvbnN0IGludDE2X3QgYW5hX2ZlX2NvZWZmXzEzc2VnWzI0XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQxNl90IGFuYV9mZV9jb2VmZl8xM3NlZ1syNF0gPSB7CiAJMzk2LCAzMDUsIDEwNSwgLTUxLCAtNzcsIC0xMiwgNDEsIDMxLCAtMTEsIC0zMCwgLTExLCAxNCwgMTUsIC0yLCAtMTMsIC03LCA1LCA4LCAxLCAtNiwgLTcsIC0zLCAwLCAxCiB9OwogCkBAIC04NTIsNiArODQwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgZGliODAwMF9wd21fYWdjX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRpYjgwMDBfc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9BRENfT04pOworCWRpYjgwMDBfc2V0X2FnY19jb25maWcoc3RhdGUsICh1bnNpZ25lZCBjaGFyKShCQU5EX09GX0ZSRVFVRU5DWShmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSAvIDEwMDApKSk7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjgwMDBfcHdtX2FnY19yZXNldCk7CisKIHN0YXRpYyBpbnQgZGliODAwMF9hZ2Nfc29mdF9zcGxpdChzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUpCiB7CiAJdTE2IGFnYywgc3BsaXRfb2Zmc2V0OwpAQCAtOTM5LDYgKzkzNSwzMiBAQAogCiB9CiAKK3N0YXRpYyBjb25zdCBpbnQzMl90IGx1dF8xMDAwbG5fbWFudFtdID0KK3sKKwk5MDgsIDcwMDMsIDcwOTAsIDcxNzAsIDcyNDQsIDczMTMsIDczNzcsIDc0MzgsIDc0OTUsIDc1NDksIDc2MDAKK307CisKK2ludDMyX3QgZGliODAwMF9nZXRfYWRjX3Bvd2VyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1aW50OF90IG1vZGUpCit7CisgICAgc3RydWN0IGRpYjgwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisgICAgdWludDMyX3QgaXggPSAwLCB0bXBfdmFsID0gMCwgZXhwID0gMCwgbWFudCA9IDA7CisgICAgaW50MzJfdCB2YWw7CisKKyAgICB2YWwgPSBkaWI4MDAwX3JlYWQzMihzdGF0ZSwgMzg0KTsKKyAgICAvKiBtb2RlID0gMSA6IGxuX2FnY3Bvd2VyIGNhbGMgdXNpbmcgbWFudC1leHAgY29udmVyc2lvbiBhbmQgbWFudGlzIGxvb2sgdXAgdGFibGUgKi8KKyAgICBpZiAobW9kZSkgeworCXRtcF92YWwgPSB2YWw7CisJd2hpbGUgKHRtcF92YWwgPj49IDEpCisJCWV4cCsrOworCW1hbnQgPSAodmFsICogMTAwMCAvICgxPDxleHApKTsKKwlpeCA9ICh1aW50OF90KSgobWFudC0xMDAwKS8xMDApOyAvKiBpbmRleCBvZiB0aGUgTFVUICovCisJdmFsID0gKGx1dF8xMDAwbG5fbWFudFtpeF0gKyA2OTMqKGV4cC0yMCkgLSA2OTA4KTsgLyogMTAwMCAqIGxuKGFkY3Bvd2VyX3JlYWwpIDsgNjkzID0gMTAwMGxuKDIpIDsgNjkwOCA9IDEwMDAqbG4oMTAwMCkgOyAyMCBjb21lcyBmcm9tIGFkY19yZWFsID0gYWRjX3Bvd19pbnQgLyAyKioyMCAqLworCXZhbCA9ICh2YWwqMjU2KS8xMDAwOworICAgIH0KKyAgICByZXR1cm4gdmFsOworfQorRVhQT1JUX1NZTUJPTChkaWI4MDAwX2dldF9hZGNfcG93ZXIpOworCiBzdGF0aWMgdm9pZCBkaWI4MDAwX3VwZGF0ZV90aW1mKHN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSkKIHsKIAl1MzIgdGltZiA9IHN0YXRlLT50aW1mID0gZGliODAwMF9yZWFkMzIoc3RhdGUsIDQzNSk7CkBAIC0xNDAxLDEwICsxNDIzLDkgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JfQotCWlmIChzdGF0ZS0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlLmlzZGJ0X3NiX21vZGUgPT0gMSkKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJCWRpYjgwMDBfd3JpdGVfd29yZChzdGF0ZSwgMzQzICsgaSwgbmNvZWZmW2ldKTsKKwl9CiAKIAkvLyBQX3NtYWxsX2NvZWZfZXh0X2VuYWJsZT1JU0RCLVRzYiwgUF9zbWFsbF9uYXJyb3dfYmFuZD1JU0RCLVRzYiwgUF9zbWFsbF9sYXN0X3NlZz0xMywgUF9zbWFsbF9vZmZzZXRfbnVtX2Nhcj01CiAJZGliODAwMF93cml0ZV93b3JkKHN0YXRlLCAzNTEsCkBAIC0xODU0LDYgKzE4NzUsMjQgQEAKIAl9CiB9CiAKK2VudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSBkaWI4MDAwX2dldF90dW5lX3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXJldHVybiBzdGF0ZS0+dHVuZV9zdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woZGliODAwMF9nZXRfdHVuZV9zdGF0ZSk7CisKK2ludCBkaWI4MDAwX3NldF90dW5lX3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdGF0ZS0+dHVuZV9zdGF0ZSA9IHR1bmVfc3RhdGU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjgwMDBfc2V0X3R1bmVfc3RhdGUpOworCisKKworCiBzdGF0aWMgaW50IGRpYjgwMDBfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKIAlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTIwNDMsMjkgKzIwODIsMzEgQEAKIAogCSpzdGF0ID0gMDsKIAotCWlmICgobG9jayA+PiAxNCkgJiAxKQkvLyBBR0MKKwlpZiAoKGxvY2sgPj4gMTMpICYgMSkKIAkJKnN0YXQgfD0gRkVfSEFTX1NJR05BTDsKIAotCWlmICgobG9jayA+PiA4KSAmIDEpCS8vIEVxdWFsCisJaWYgKChsb2NrID4+IDgpICYgMSkgLyogRXF1YWwgKi8KIAkJKnN0YXQgfD0gRkVfSEFTX0NBUlJJRVI7CiAKLQlpZiAoKGxvY2sgPj4gMykgJiAxKQkvLyBUTUNDX1NZTkMKKwlpZiAoKChsb2NrID4+IDEpICYgMHhmKSA9PSAweGYpIC8qIFRNQ0NfU1lOQyAqLwogCQkqc3RhdCB8PSBGRV9IQVNfU1lOQzsKIAotCWlmICgobG9jayA+PiA1KSAmIDcpCS8vIEZFQyBNUEVHCisJaWYgKCgobG9jayA+PiAxMikgJiAxKSAmJiAoKGxvY2sgPj4gNSkgJiA3KSkgLyogRkVDIE1QRUcgKi8KIAkJKnN0YXQgfD0gRkVfSEFTX0xPQ0s7CiAKLQlsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU1NCk7CS8vIFZpdGVyYmkgTGF5ZXIgQQotCWlmIChsb2NrICYgMHgwMSkKLQkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CisJaWYgKChsb2NrID4+IDEyKSAmIDEpIHsKKwkJbG9jayA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NTQpOyAvKiBWaXRlcmJpIExheWVyIEEgKi8KKwkJaWYgKGxvY2sgJiAweDAxKQorCQkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CiAKLQlsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU1NSk7CS8vIFZpdGVyYmkgTGF5ZXIgQgotCWlmIChsb2NrICYgMHgwMSkKLQkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CisJCWxvY2sgPSBkaWI4MDAwX3JlYWRfd29yZChzdGF0ZSwgNTU1KTsgLyogVml0ZXJiaSBMYXllciBCICovCisJCWlmIChsb2NrICYgMHgwMSkKKwkJCSpzdGF0IHw9IEZFX0hBU19WSVRFUkJJOwogCi0JbG9jayA9IGRpYjgwMDBfcmVhZF93b3JkKHN0YXRlLCA1NTYpOwkvLyBWaXRlcmJpIExheWVyIEMKLQlpZiAobG9jayAmIDB4MDEpCi0JCSpzdGF0IHw9IEZFX0hBU19WSVRFUkJJOworCQlsb2NrID0gZGliODAwMF9yZWFkX3dvcmQoc3RhdGUsIDU1Nik7IC8qIFZpdGVyYmkgTGF5ZXIgQyAqLworCQlpZiAobG9jayAmIDB4MDEpCisJCQkqc3RhdCB8PSBGRV9IQVNfVklURVJCSTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliODAwMC5oCmluZGV4IDhjODk0ODIuLmQ5OTYxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuaApAQCAtNDYsNiArNDYsMTAgQEAKIGV4dGVybiBpbnQgZGliODAwMF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiB2YWx1ZSk7CiBleHRlcm4gaW50IGRpYjgwMDBfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggb25vZmYpOwogZXh0ZXJuIGludCBkaWI4MDAwX3BpZF9maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBpZCwgdTE2IHBpZCwgdTggb25vZmYpOworZXh0ZXJuIGludCBkaWI4MDAwX3NldF90dW5lX3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgdHVuZV9zdGF0ZSk7CitleHRlcm4gZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIGRpYjgwMDBfZ2V0X3R1bmVfc3RhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworZXh0ZXJuIHZvaWQgZGliODAwMF9wd21fYWdjX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKK2V4dGVybiBzMzIgZGliODAwMF9nZXRfYWRjX3Bvd2VyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBtb2RlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjgwMDBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliODAwMF9jb25maWcgKmNmZykKIHsKQEAgLTU5LDM1ICs2Myw1MyBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgZGliODAwMF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICpob3N0LCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHU4IGZpcnN0X2FkZHIpCitzdGF0aWMgaW5saW5lIGludCBkaWI4MDAwX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmhvc3QsIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwgdTggZmlyc3RfYWRkcikKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotaW50IGRpYjgwMDBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpCitzdGF0aWMgaW5saW5lIGludCBkaWI4MDAwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogCi1pbnQgZGliODAwMF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZGliODAwMF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogCi1pbnQgZGliODAwMF9waWRfZmlsdGVyX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG9ub2ZmKQorc3RhdGljIGlubGluZSBpbnQgZGliODAwMF9waWRfZmlsdGVyX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG9ub2ZmKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogCi1pbnQgZGliODAwMF9waWRfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBpZCwgdTE2IHBpZCwgdTggb25vZmYpCitzdGF0aWMgaW5saW5lIGludCBkaWI4MDAwX3BpZF9maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IGlkLCB1MTYgcGlkLCB1OCBvbm9mZikKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IGRpYjgwMDBfc2V0X3R1bmVfc3RhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSB0dW5lX3N0YXRlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSBlbnVtIGZyb250ZW5kX3R1bmVfc3RhdGUgZGliODAwMF9nZXRfdHVuZV9zdGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKyAgICByZXR1cm4gQ1RfU0hVVERPV04sCit9CitzdGF0aWMgaW5saW5lIHZvaWQgZGliODAwMF9wd21fYWdjX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworfQorc3RhdGljIGlubGluZSBzMzIgZGliODAwMF9nZXRfYWRjX3Bvd2VyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBtb2RlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworfQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYngwMDBfY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwppbmRleCA0ZWZjYTMwLi5lNmYzZDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwpAQCAtNiw3ICs2LDcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJ0dXJuIG9uIGRlYnVnZ2luZyAoZGVmYXVsdDogMCkiKTsKIAotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50ayhLRVJOX0RFQlVHICJEaUJYMDAwOiAiKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKEtFUk5fREVCVUcgIkRpQlgwMDA6ICIpOyBwcmludGsoYXJncyk7IHByaW50aygiXG4iKTsgfSB9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50IGRpYngwMDBfd3JpdGVfd29yZChzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIHUxNiByZWcsIHUxNiB2YWwpCiB7CkBAIC0yNSw3ICsyNSw3IEBACiAJCQkJCWVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYpCiB7CiAJaWYgKG1zdC0+ZGV2aWNlX3JldiA+IERJQjMwMDBNQyAmJiBtc3QtPnNlbGVjdGVkX2ludGVyZmFjZSAhPSBpbnRmKSB7Ci0JCWRwcmludGsoInNlbGVjdGluZyBpbnRlcmZhY2U6ICVkXG4iLCBpbnRmKTsKKwkJZHByaW50aygic2VsZWN0aW5nIGludGVyZmFjZTogJWQiLCBpbnRmKTsKIAkJbXN0LT5zZWxlY3RlZF9pbnRlcmZhY2UgPSBpbnRmOwogCQlyZXR1cm4gZGlieDAwMF93cml0ZV93b3JkKG1zdCwgbXN0LT5iYXNlX3JlZyArIDQsIGludGYpOwogCX0KQEAgLTE3MSw5ICsxNzEsMTggQEAKIHsKIAlpMmNfZGVsX2FkYXB0ZXIoJm1zdC0+Z2F0ZWRfdHVuZXJfaTJjX2FkYXApOwogfQotCiBFWFBPUlRfU1lNQk9MKGRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKTsKIAorCit1MzIgc3lzdGltZSgpCit7CisgICAgc3RydWN0IHRpbWVzcGVjIHQ7CisKKyAgICB0ID0gY3VycmVudF9rZXJuZWxfdGltZSgpOworICAgIHJldHVybiAodC50dl9zZWMgKiAxMDAwMCkgKyAodC50dl9uc2VjIC8gMTAwMDAwKTsKK30KK0VYUE9SVF9TWU1CT0woc3lzdGltZSk7CisKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYm9ldHRjaGVyQGRpYmNvbS5mcj4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIGZ1bmN0aW9uIHRoZSBEaUJjb20gZGVtb2R1bGF0b3IgZmFtaWx5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCmluZGV4IDViZTEwZWMuLjRmNWQxNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCkBAIC0zNiwxMyArMzYsMTcgQEAKIGV4dGVybiB2b2lkIGRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCk7CiBleHRlcm4gdm9pZCBkaWJ4MDAwX3Jlc2V0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KTsKIAorZXh0ZXJuIHUzMiBzeXN0aW1lKHZvaWQpOworCiAjZGVmaW5lIEJBTkRfTEJBTkQgMHgwMQogI2RlZmluZSBCQU5EX1VIRiAgIDB4MDIKICNkZWZpbmUgQkFORF9WSEYgICAweDA0CiAjZGVmaW5lIEJBTkRfU0JBTkQgMHgwOAotI2RlZmluZSBCQU5EX0ZNCSAgIDB4MTAKKyNkZWZpbmUgQkFORF9GTSAgICAweDEwCisjZGVmaW5lIEJBTkRfQ0JBTkQgMHgyMAogCi0jZGVmaW5lIEJBTkRfT0ZfRlJFUVVFTkNZKGZyZXFfa0h6KSAoIChmcmVxX2tIeikgPD0gMTE1MDAwID8gQkFORF9GTSA6IFwKKyNkZWZpbmUgQkFORF9PRl9GUkVRVUVOQ1koZnJlcV9rSHopICgoZnJlcV9rSHopIDw9IDE3MDAwMCA/IEJBTkRfQ0JBTkQgOiBcCisJCQkJCQkJCQkoZnJlcV9rSHopIDw9IDExNTAwMCA/IEJBTkRfRk0gOiBcCiAJCQkJCQkJCQkoZnJlcV9rSHopIDw9IDI1MDAwMCA/IEJBTkRfVkhGIDogXAogCQkJCQkJCQkJKGZyZXFfa0h6KSA8PSA4NjMwMDAgPyBCQU5EX1VIRiA6IFwKIAkJCQkJCQkJCShmcmVxX2tIeikgPD0gMjAwMDAwMCA/IEJBTkRfTEJBTkQgOiBCQU5EX1NCQU5EICkKQEAgLTE0OSw0ICsxNTMsNjcgQEAKICNkZWZpbmUgT1VUTU9ERV9NUEVHMl9GSUZPICAgICAgICAgIDUKICNkZWZpbmUgT1VUTU9ERV9BTkFMT0dfQURDICAgICAgICAgIDYKIAorZW51bSBmcm9udGVuZF90dW5lX3N0YXRlIHsKKyAgICBDVF9UVU5FUl9TVEFSVCA9IDEwLAorICAgIENUX1RVTkVSX1NURVBfMCwKKyAgICBDVF9UVU5FUl9TVEVQXzEsCisgICAgQ1RfVFVORVJfU1RFUF8yLAorICAgIENUX1RVTkVSX1NURVBfMywKKyAgICBDVF9UVU5FUl9TVEVQXzQsCisgICAgQ1RfVFVORVJfU1RFUF81LAorICAgIENUX1RVTkVSX1NURVBfNiwKKyAgICBDVF9UVU5FUl9TVEVQXzcsCisgICAgQ1RfVFVORVJfU1RPUCwKKworICAgIENUX0FHQ19TVEFSVCA9IDIwLAorICAgIENUX0FHQ19TVEVQXzAsCisgICAgQ1RfQUdDX1NURVBfMSwKKyAgICBDVF9BR0NfU1RFUF8yLAorICAgIENUX0FHQ19TVEVQXzMsCisgICAgQ1RfQUdDX1NURVBfNCwKKyAgICBDVF9BR0NfU1RPUCwKKworCUNUX0RFTU9EX1NUQVJUID0gMzAsCisgICAgQ1RfREVNT0RfU1RFUF8xLAorICAgIENUX0RFTU9EX1NURVBfMiwKKyAgICBDVF9ERU1PRF9TVEVQXzMsCisgICAgQ1RfREVNT0RfU1RFUF80LAorICAgIENUX0RFTU9EX1NURVBfNSwKKyAgICBDVF9ERU1PRF9TVEVQXzYsCisgICAgQ1RfREVNT0RfU1RFUF83LAorICAgIENUX0RFTU9EX1NURVBfOCwKKyAgICBDVF9ERU1PRF9TVEVQXzksCisgICAgQ1RfREVNT0RfU1RFUF8xMCwKKyAgICBDVF9ERU1PRF9TRUFSQ0hfTkVYVCA9IDQxLAorICAgIENUX0RFTU9EX1NURVBfTE9DS0VELAorICAgIENUX0RFTU9EX1NUT1AsCisKKyAgICBDVF9ET05FID0gMTAwLAorICAgIENUX1NIVVRET1dOLAorCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnNDb250ZXh0IHsKKyNkZWZpbmUgQ0hBTk5FTF9TVEFUVVNfUEFSQU1FVEVSU19VTktOT1dOICAgMHgwMQorI2RlZmluZSBDSEFOTkVMX1NUQVRVU19QQVJBTUVURVJTX1NFVCAgICAgICAweDAyCisgICAgdTggc3RhdHVzOworICAgIHUzMiB0dW5lX3RpbWVfZXN0aW1hdGlvblsyXTsKKyAgICBzMzIgdHBzX2F2YWlsYWJsZTsKKyAgICB1MTYgdHBzWzldOworfTsKKworI2RlZmluZSBGRV9TVEFUVVNfVFVORV9GQUlMRUQgICAgICAgICAgMAorI2RlZmluZSBGRV9TVEFUVVNfVFVORV9USU1FRF9PVVQgICAgICAtMQorI2RlZmluZSBGRV9TVEFUVVNfVFVORV9USU1FX1RPT19TSE9SVCAtMgorI2RlZmluZSBGRV9TVEFUVVNfVFVORV9QRU5ESU5HICAgICAgICAtMworI2RlZmluZSBGRV9TVEFUVVNfU1REX1NVQ0NFU1MgICAgICAgICAtNAorI2RlZmluZSBGRV9TVEFUVVNfRkZUX1NVQ0NFU1MgICAgICAgICAtNQorI2RlZmluZSBGRV9TVEFUVVNfREVNT0RfU1VDQ0VTUyAgICAgICAtNgorI2RlZmluZSBGRV9TVEFUVVNfTE9DS0VEICAgICAgICAgICAgICAtNworI2RlZmluZSBGRV9TVEFUVVNfREFUQV9MT0NLRUQgICAgICAgICAtOAorCisjZGVmaW5lIEZFX0NBTExCQUNLX1RJTUVfTkVWRVIgMHhmZmZmZmZmZgorCisjZGVmaW5lIEFCUyh4KSAoKHggPCAwKSA/ICgteCkgOiAoeCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4LmMKaW5kZXggZWFiY2FkYy4uZGVlNTM5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eC5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAogCXZhbCA9IGZyZXE7CiAJaWYgKGZyZXEgIT0gMCkgewotCQl2YWwgKj0gKHU2NCkxIDw8IDMyOworCQl2YWwgPDw9IDMyOwogCQlpZiAoaWZfY2xrICE9IDApCiAJCQlkb19kaXYodmFsLCBpZl9jbGspOwogCQl2MzIgPSB2YWwgJiAweEZGRkZGRkZGOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAl2YWwgPSB2MzI7CiAJdmFsICo9IHByaXYtPmNvbmZpZy0+aWZfY2xrX2ZyZXE7Ci0JdmFsIC89ICh1NjQpMSA8PCAzMjsKKwl2YWwgPj49IDMyOwogCWRwcmludGsoIkFGQyA9ICV1IGtIelxuIiwgKHUzMil2YWwpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCmluZGV4IDcxZjYwN2YuLmIxODFiZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbG5icDIxLmMgLSBkcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBFbmRyaXNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgT2xpdmVyIEVuZHJpc3MgPG8uZW5kcmlzc0BnbXguZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05MSw2ICs5MSwzMSBAQAogCXJldHVybiAoaTJjX3RyYW5zZmVyKGxuYnAyMS0+aTJjLCAmbXNnLCAxKSA9PSAxKSA/IDAgOiAtRUlPOwogfQogCitzdGF0aWMgaW50IGxuYnAyMV9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSAoc3RydWN0IGxuYnAyMSAqKSBmZS0+c2VjX3ByaXY7CisJc3RydWN0IGkyY19tc2cgbXNnID0gewkuYWRkciA9IGxuYnAyMS0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCisJCQkJLmJ1ZiA9ICZsbmJwMjEtPmNvbmZpZywKKwkJCQkubGVuID0gc2l6ZW9mKGxuYnAyMS0+Y29uZmlnKSB9OworCisJc3dpdGNoICh0b25lKSB7CisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCWxuYnAyMS0+Y29uZmlnICY9IH5MTkJQMjFfVEVOOworCQlicmVhazsKKwljYXNlIFNFQ19UT05FX09OOgorCQlsbmJwMjEtPmNvbmZpZyB8PSBMTkJQMjFfVEVOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9OworCisJbG5icDIxLT5jb25maWcgfD0gbG5icDIxLT5vdmVycmlkZV9vcjsKKwlsbmJwMjEtPmNvbmZpZyAmPSBsbmJwMjEtPm92ZXJyaWRlX2FuZDsKKworCXJldHVybiAoaTJjX3RyYW5zZmVyKGxuYnAyMS0+aTJjLCAmbXNnLCAxKSA9PSAxKSA/IDAgOiAtRUlPOworfQorCiBzdGF0aWMgdm9pZCBsbmJwMjFfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAkvKiBMTkJQIHBvd2VyIG9mZiAqLwpAQCAtMTMzLDYgKzE1OCw3IEBACiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKIAlmZS0+b3BzLmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOworCWZlLT5vcHMuc2V0X3RvbmUgPSBsbmJwMjFfc2V0X3RvbmU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTE5CeDJ4IGF0dGFjaGVkIG9uIGFkZHI9JXhcbiIsIGxuYnAyMS0+aTJjX2FkZHIpOwogCiAJcmV0dXJuIGZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCmluZGV4IGRmNDllYTAuLjg3NjJjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKQEAgLTE0NTEsNiArMTQ1MSw4IEBACiB7CiAJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZSBkZW1vZF9zdGF0ZTsKIAlpbnQgbG9ja2VkID0gRkFMU0U7CisJdTggdHNiaXRyYXRlMF92YWwsIHRzYml0cmF0ZTFfdmFsOworCXMzMiBiaXRyYXRlOwogCiAJZGVtb2Rfc3RhdGUgPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIEhFQURFUl9NT0RFKTsKIAlzd2l0Y2ggKGRlbW9kX3N0YXRlKSB7CkBAIC0xNDczLDYgKzE0NzUsMTcgQEAKIAogCWRwcmludGsoIiVzOiBsb2NrZWQgPSAlZFxuIiwgX19mdW5jX18sIGxvY2tlZCk7CiAKKwlpZiAoc3R2ZGVidWcpIHsKKwkJLyogUHJpbnQgVFMgYml0cmF0ZSAqLworCQl0c2JpdHJhdGUwX3ZhbCA9IHN0djA5MDBfcmVhZF9yZWcoaW50cCwgVFNCSVRSQVRFMCk7CisJCXRzYml0cmF0ZTFfdmFsID0gc3R2MDkwMF9yZWFkX3JlZyhpbnRwLCBUU0JJVFJBVEUxKTsKKwkJLyogRm9ybXVsYSBCaXQgcmF0ZSA9IE1jbGsgKiBweF90c2ZpZm9fYml0cmF0ZSAvIDE2Mzg0ICovCisJCWJpdHJhdGUgPSAoc3R2MDkwMF9nZXRfbWNsa19mcmVxKGludHAsIGludHAtPnF1YXJ0eikvMTAwMDAwMCkKKwkJCSogKHRzYml0cmF0ZTFfdmFsIDw8IDggfCB0c2JpdHJhdGUwX3ZhbCk7CisJCWJpdHJhdGUgLz0gMTYzODQ7CisJCWRwcmludGsoIlRTIGJpdHJhdGUgPSAlZCBNYml0L3NlYyBcbiIsIGJpdHJhdGUpOworCX07CisKIAlyZXR1cm4gbG9ja2VkOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYwppbmRleCA0OGVkZDU0Li4xNTczNDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKQEAgLTM1OTcsNyArMzU5Nyw4IEBACiAKIAlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERJU1RYQ1RMKTsKIAotCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBESVNUWF9NT0RFX0ZJRUxELCAyKTsKKwlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRElTVFhfTU9ERV9GSUVMRCwKKwkJKHN0YXRlLT5jb25maWctPmRpc2VxY19lbnZlbG9wZV9tb2RlKSA/IDQgOiAyKTsKIAlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRElTRVFDX1JFU0VUX0ZJRUxELCAxKTsKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRElTVFhDVEwsIHJlZykgPCAwKQogCQlnb3RvIGVycjsKQEAgLTM2NDksMTAgKzM2NTAsMTAgQEAKIAlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERJU1RYQ1RMKTsKIAogCWlmIChidXJzdCA9PSBTRUNfTUlOSV9BKSB7Ci0JCW1vZGUgPSAzOworCQltb2RlID0gKHN0YXRlLT5jb25maWctPmRpc2VxY19lbnZlbG9wZV9tb2RlKSA/IDUgOiAzOwogCQl2YWx1ZSA9IDB4MDA7CiAJfSBlbHNlIHsKLQkJbW9kZSA9IDI7CisJCW1vZGUgPSAoc3RhdGUtPmNvbmZpZy0+ZGlzZXFjX2VudmVsb3BlX21vZGUpID8gNCA6IDI7CiAJCXZhbHVlID0gMHhGRjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oCmluZGV4IGU5NjhjOTguLmIxMzM4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguaApAQCAtNzUsNiArNzUsOCBAQAogCiAJZW51bSBzdHYwOTB4X2kyY3JwdAlyZXBlYXRlcl9sZXZlbDsKIAorCWJvb2wgZGlzZXFjX2VudmVsb3BlX21vZGU7CisKIAlpbnQgKCp0dW5lcl9pbml0KSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwogCWludCAoKnR1bmVyX3NldF9tb2RlKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGVudW0gdHVuZXJfbW9kZSBtb2RlKTsKIAlpbnQgKCp0dW5lcl9zZXRfZnJlcXVlbmN5KSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBmcmVxdWVuY3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwppbmRleCAyNjYwMzNhLi42OGJmOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgc21zZHZiX21vZHVsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzbXNkdmJfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CiAKQEAgLTY3Niw3ICs2NzYsNyBAQAogCXJldHVybiByYzsKIH0KIAotdm9pZCBzbXNkdmJfbW9kdWxlX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbXNkdmJfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAlzbXNjb3JlX3VucmVnaXN0ZXJfaG90cGx1ZyhzbXNkdmJfaG90cGx1Zyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NkaW8uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3NkaW8uYwppbmRleCAyNDIwNmNiLi4xOTUyNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNzZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zc2Rpby5jCkBAIC00OCw3ICs0OCw3IEBACiAjZGVmaW5lIFNNU1NESU9fSU5UCQkweDA0CiAjZGVmaW5lIFNNU1NESU9fQkxPQ0tfU0laRQkxMjgKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBzbXNzZGlvX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBzbXNzZGlvX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCXtTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9TSUFOTywgU0RJT19ERVZJQ0VfSURfU0lBTk9fU1RFTExBUiksCiAJIC5kcml2ZXJfZGF0YSA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUn0sCiAJe1NESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX1NJQU5PLCBTRElPX0RFVklDRV9JRF9TSUFOT19OT1ZBX0EwKSwKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXNtc2NvcmVfb25yZXNwb25zZShzbXNkZXYtPmNvcmVkZXYsIGNiKTsKIH0KIAotc3RhdGljIGludCBzbXNzZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNzZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCiAJCQkgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0OwpAQCAtMzM4LDcgKzMzOCw3IEBACiAvKiBNb2R1bGUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1pbnQgc21zc2Rpb19tb2R1bGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc21zc2Rpb19tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwogCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHNtc3NkaW9fbW9kdWxlX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbXNzZGlvX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJc2Rpb191bnJlZ2lzdGVyX2RyaXZlcigmc21zc2Rpb19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwppbmRleCA4Zjg4YTU4Li41ZWFjMjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNtc3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtc3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CkBAIC00ODQsNyArNDg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMDEwKSwKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCiAJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMTAwKSwKQEAgLTUzMyw4ICs1MzMsMTggQEAKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YjkxMCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGI5ODApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhiOTkwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YzAwMCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGMwMTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhjMDgwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YzA5MCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl9OwogCkBAIC01NTAsNyArNTYwLDcgQEAKIAkucmVzdW1lCQkJPSBzbXN1c2JfcmVzdW1lLAogfTsKIAotaW50IHNtc3VzYl9tb2R1bGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc21zdXNiX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJjID0gdXNiX3JlZ2lzdGVyKCZzbXN1c2JfZHJpdmVyKTsKIAlpZiAocmMpCkBAIC01NjEsNyArNTcxLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgc21zdXNiX21vZHVsZV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc21zdXNiX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJLyogUmVndWxhciBVU0IgQ2xlYW51cCAqLwogCXVzYl9kZXJlZ2lzdGVyKCZzbXN1c2JfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggN2QxOTNlYi4uOTc4MmUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTE5MCwxMiArMTkwLDEzIEBACiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXRfY2ktPmJ1ZGdldC5kZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gYnVkZ2V0X2NpLT5pci5kZXY7CiAJaW50IGVycm9yOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXM7CisKIAogCWJ1ZGdldF9jaS0+aXIuZGV2ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dF9kZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidWRnZXRfY2k6IElSIGludGVyZmFjZSBpbml0aWFsaXNhdGlvbiBmYWlsZWRcbiIpOwotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0MTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJc25wcmludGYoYnVkZ2V0X2NpLT5pci5uYW1lLCBzaXplb2YoYnVkZ2V0X2NpLT5pci5uYW1lKSwKQEAgLTIxNyw2ICsyMTgsMTEgQEAKIAl9CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNhYS0+cGNpLT5kZXY7CiAKKwlpZiAocmM1X2RldmljZSA8IDApCisJCWJ1ZGdldF9jaS0+aXIucmM1X2RldmljZSA9IElSX0RFVklDRV9BTlk7CisJZWxzZQorCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSByYzVfZGV2aWNlOworCiAJLyogU2VsZWN0IGtleW1hcCBhbmQgYWRkcmVzcyAqLwogCXN3aXRjaCAoYnVkZ2V0X2NpLT5idWRnZXQuZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKIAljYXNlIDB4MTAwYzoKQEAgLTIyNCw1MyArMjMwLDM0IEBACiAJY2FzZSAweDEwMTE6CiAJY2FzZSAweDEwMTI6CiAJCS8qIFRoZSBoYXVwcGF1Z2Uga2V5bWFwIGlzIGEgc3VwZXJzZXQgb2YgdGhlc2UgcmVtb3RlcyAqLwotCQllcnJvciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSwKLQkJCSAgICAgIElSX1RZUEVfUkM1LCAmaXJfY29kZXNfaGF1cHBhdWdlX25ld190YWJsZSk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDI7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGU7CiAKIAkJaWYgKHJjNV9kZXZpY2UgPCAwKQogCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gMHgxZjsKLQkJZWxzZQotCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gcmM1X2RldmljZTsKIAkJYnJlYWs7CiAJY2FzZSAweDEwMTA6CiAJY2FzZSAweDEwMTc6CiAJY2FzZSAweDEwMWE6CiAJCS8qIGZvciB0aGUgVGVjaG5vdHJlbmQgMTUwMCBidW5kbGVkIHJlbW90ZSAqLwotCQllcnJvciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSwKLQkJCSAgICAgIElSX1RZUEVfUkM1LCAmaXJfY29kZXNfdHRfMTUwMF90YWJsZSk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDI7Ci0KLQkJaWYgKHJjNV9kZXZpY2UgPCAwKQotCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gSVJfREVWSUNFX0FOWTsKLQkJZWxzZQotCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gcmM1X2RldmljZTsKKwkJaXJfY29kZXMgPSAmaXJfY29kZXNfdHRfMTUwMF90YWJsZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogdW5rbm93biByZW1vdGUgKi8KLQkJZXJyb3IgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmJ1ZGdldF9jaS0+aXIuc3RhdGUsCi0JCQkgICAgICBJUl9UWVBFX1JDNSwgJmlyX2NvZGVzX2J1ZGdldF9jaV9vbGRfdGFibGUpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJZ290byBvdXQyOwotCi0JCWlmIChyYzVfZGV2aWNlIDwgMCkKLQkJCWJ1ZGdldF9jaS0+aXIucmM1X2RldmljZSA9IElSX0RFVklDRV9BTlk7Ci0JCWVsc2UKLQkJCWJ1ZGdldF9jaS0+aXIucmM1X2RldmljZSA9IHJjNV9kZXZpY2U7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX2J1ZGdldF9jaV9vbGRfdGFibGU7CiAJCWJyZWFrOwogCX0KIAorCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSwgSVJfVFlQRV9SQzUpOworCiAJLyogaW5pdGlhbGlzZSB0aGUga2V5LXVwIHRpbWVvdXQgaGFuZGxlciAqLwogCWluaXRfdGltZXIoJmJ1ZGdldF9jaS0+aXIudGltZXJfa2V5dXApOwogCWJ1ZGdldF9jaS0+aXIudGltZXJfa2V5dXAuZnVuY3Rpb24gPSBtc3A0MzBfaXJfa2V5dXA7CiAJYnVkZ2V0X2NpLT5pci50aW1lcl9rZXl1cC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZidWRnZXRfY2ktPmlyOwogCWJ1ZGdldF9jaS0+aXIubGFzdF9yYXcgPSAweGZmZmY7IC8qIEFuIGltcG9zc2libGUgdmFsdWUgKi8KLQllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWVycm9yID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2Rlcyk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnVkZ2V0X2NpOiBjb3VsZCBub3QgaW5pdCBkcml2ZXIgZm9yIElSIGRldmljZSAoY29kZSAlZClcbiIsIGVycm9yKTsKLQkJZ290byBvdXQyOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJLyogbm90ZTogdGhlc2UgbXVzdCBiZSBhZnRlciBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgKi8KQEAgLTI4NCwxMiArMjcxLDYgQEAKIAlzYWE3MTQ2X3NldGdwaW8oc2FhLCAzLCBTQUE3MTQ2X0dQSU9fSVJRSEkpOwogCiAJcmV0dXJuIDA7Ci0KLW91dDI6Ci0JaXJfaW5wdXRfZnJlZShpbnB1dF9kZXYpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci1vdXQxOgotCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgbXNwNDMwX2lyX2RlaW5pdChzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kpCkBAIC0zMDQsOCArMjg1LDcgQEAKIAlkZWxfdGltZXJfc3luYygmZGV2LT50aW1lcik7CiAJaXJfaW5wdXRfbm9rZXkoZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSk7CiAKLQlpcl9pbnB1dF9mcmVlKGRldik7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKKwlpcl9pbnB1dF91bnJlZ2lzdGVyKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgY2lpbnRmX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLCBpbnQgc2xvdCwgaW50IGFkZHJlc3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggNGMyYjhhMi4uM2Y0MGYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMjE1LDEzICsyMTUsMTAgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1taXJvcGNtMjAuCiAKIGNvbmZpZyBSQURJT19TRjE2Rk1JCi0JdHJpc3RhdGUgIlNGMTZGTUkgUmFkaW8iCisJdHJpc3RhdGUgIlNGMTYtRk1JL1NGMTYtRk1QIFJhZGlvIgogCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCi0JICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcy4gIElmIHlvdQotCSAgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCBhbmQgeW91ciBjYXJkIGlzIG5vdCBQblAgb25lLCB5b3UKLQkgIGhhdmUgdG8gYWRkICJzZjE2Zm09PGlvPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgKEkvTyBhZGRyZXNzIGlzCi0JICAweDI4NCBvciAweDM4NCkuCisJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcy4KIAogCSAgSW4gb3JkZXIgdG8gY29udHJvbCB5b3VyIHJhZGlvIGNhcmQsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHByb2dyYW1zCiAJICB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuICBJbmZvcm1hdGlvbiBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwppbmRleCAzNWVkZWUwLi41YmY0OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMjY4LDYgKzI2OCw4IEBACiB7CiAJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlydF9zZXRmcmVxKHJ0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQpAQCAtMjc3LDYgKzI3OSw4IEBACiB7CiAJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJ0LT5jdXJmcmVxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKaW5kZXggOGRhZjgwOWUuLmMyMjMxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwpAQCAtMjU0LDYgKzI1NCw4IEBACiB7CiAJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlhel9zZXRmcmVxKGF6LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQpAQCAtMjYzLDYgKzI2NSw4IEBACiB7CiAJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGF6LT5jdXJmcmVxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwppbmRleCBjNmNmMTE2Li4wMDBmNGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwpAQCAtMjQwLDYgKzI0MCw4IEBACiB7CiAJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgR0VNVEVLX1BDSV9SQU5HRV9MT1cgfHwKIAkgICAgZi0+ZnJlcXVlbmN5ID4gR0VNVEVLX1BDSV9SQU5HRV9ISUdIKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI1Myw2ICsyNTUsOCBAQAogewogCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKaW5kZXggNjRkNzM3Yy4uZjgyMTNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKQEAgLTIwMCw2ICsyMDAsOCBAQAogewogCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKQogCQlyZXR1cm4gLUVJTlZBTDsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwpAQCAtMjEzLDYgKzIxNSw4IEBACiB7CiAJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlpZiAoZi0+dHVuZXIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlmLT5mcmVxdWVuY3kgPSBCSVRTMkZSRVEocmFkaW9fYml0c19nZXQoZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwppbmRleCAzZGE1MWZlLi40NGI0ZGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKQEAgLTI2Miw2ICsyNjIsOCBAQAogewogCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlpZiAoZi0+dHVuZXIgIT0gMCB8fCBmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCisJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpIHsKIAkJZHByaW50ayhkZXYsIDEsICJyYWRpbyBmcmVxICglZC4lMDJkIE1Ieikgb3V0IG9mIHJhbmdlICglZC0lZClcbiIsCiAJCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLApAQCAtMjg1LDYgKzI4Nyw4IEBACiB7CiAJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwppbmRleCA5NDlmNjA1Li4wMmE5Y2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCkBAIC0zNzQsNiArMzc0LDggQEAKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gYW1yYWRpb19zZXRmcmVxKHJhZGlvLCBmLT5mcmVxdWVuY3kpOwogfQogCkBAIC0zODMsNiArMzg1LDggQEAKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJhZGlvLT5jdXJmcmVxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCmluZGV4IDljYjE5M2YuLmE3OTI5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCkBAIC0xNjcsNiArMTY3LDggQEAKIHsKIAlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlydF9zZXRmcmVxKHJ0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQpAQCAtMTc2LDYgKzE3OCw4IEBACiB7CiAJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBydC0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKaW5kZXggNDljNGFhYi4uOTg1MzU5ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC0xLDQgKzEsNCBAQAotLyogU0YxNkZNSSByYWRpbyBkcml2ZXIgZm9yIExpbnV4IHJhZGlvIHN1cHBvcnQKKy8qIFNGMTYtRk1JIGFuZCBTRjE2LUZNUCByYWRpbyBkcml2ZXIgZm9yIExpbnV4IHJhZGlvIHN1cHBvcnQKICAqIGhlYXZpbHkgYmFzZWQgb24gcnRyYWNrIGRyaXZlci4uLgogICogKGMpIDE5OTcgTS4gS2lya3dvb2QKICAqIChjKSAxOTk4IFBldHIgVmFuZHJvdmVjLCB2YW5kcm92ZUB2Yy5jdnV0LmN6CkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICogIEZyZXF1ZW5jeSBjb250cm9sIGlzIGRvbmUgZGlnaXRhbGx5IC0tIGllIG91dChwb3J0LGVuY29kZWZyZXEoOTUuOCkpOwogICogIE5vIHZvbHVtZSBjb250cm9sIC0gb25seSBtdXRlL3VubXV0ZSAtIHlvdSBoYXZlIHRvIHVzZSBsaW5lIHZvbHVtZQotICogIGNvbnRyb2wgb24gU0ItcGFydCBvZiBTRjE2Rk1JCisgKiAgY29udHJvbCBvbiBTQi1wYXJ0IG9mIFNGMTYtRk1JL1NGMTYtRk1QCiAgKgogICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCkBAIC0zMCwxNCArMzAsMTQgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKIE1PRFVMRV9BVVRIT1IoIlBldHIgVmFuZHJvdmVjLCB2YW5kcm92ZUB2Yy5jdnV0LmN6IGFuZCBNLiBLaXJrd29vZCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFNGMTZNSSByYWRpby4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2LUZNSSBhbmQgU0YxNi1GTVAgcmFkaW8uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgaW8gPSAtMTsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIAogbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2TUkgY2FyZCAoMHgyODQgb3IgMHgzODQpIik7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTYtRk1JIG9yIFNGMTYtRk1QIGNhcmQgKDB4Mjg0IG9yIDB4Mzg0KSIpOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwogCiAjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKQEAgLTQ3LDEzICs0NywxNCBAQAogCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CiAJaW50IGlvOwotCWludCBjdXJ2b2w7IC8qIDEgb3IgMCAqLworCWJvb2wgbXV0ZTsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7IC8qIGZyZXEgaW4ga0h6ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiBzdGF0aWMgc3RydWN0IGZtaSBmbWlfY2FyZDsKIHN0YXRpYyBzdHJ1Y3QgcG5wX2RldiAqZGV2OworYm9vbCBwbnBfYXR0YWNoZWQ7CiAKIC8qIGZyZXEgaXMgaW4gMS8xNiBrSHogdG8gaW50ZXJuYWwgbnVtYmVyLCBodyBwcmVjaXNpb24gaXMgNTAga0h6ICovCiAvKiBJdCBpcyBvbmx5IHVzZWZ1bCB0byBnaXZlIGZyZXEgaW4gaW50ZXJ2YWwgb2YgODAwICg9MC4wNU1oeiksCkBAIC0xMDUsNyArMTA2LDcgQEAKIAlvdXRiaXRzKDgsIDB4QzAsIGZtaS0+aW8pOwogCW1zbGVlcCgxNDMpOwkJLyogd2FzIHNjaGVkdWxlX3RpbWVvdXQoSFovNykgKi8KIAltdXRleF91bmxvY2soJmZtaS0+bG9jayk7Ci0JaWYgKGZtaS0+Y3Vydm9sKQorCWlmICghZm1pLT5tdXRlKQogCQlmbWlfdW5tdXRlKGZtaSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTYsNyArMTE3LDcgQEAKIAlpbnQgcmVzOwogCiAJbXV0ZXhfbG9jaygmZm1pLT5sb2NrKTsKLQl2YWwgPSBmbWktPmN1cnZvbCA/IDB4MDggOiAweDAwOwkvKiB1bm11dGUvbXV0ZSAqLworCXZhbCA9IGZtaS0+bXV0ZSA/IDB4MDAgOiAweDA4OwkvKiBtdXRlL3VubXV0ZSAqLwogCW91dGIodmFsLCBmbWktPmlvKTsKIAlvdXRiKHZhbCB8IDB4MTAsIGZtaS0+aW8pOwogCW1zbGVlcCgxNDMpOyAJCS8qIHdhcyBzY2hlZHVsZV90aW1lb3V0KEhaLzcpICovCkBAIC0xNjgsNiArMTY5LDggQEAKIHsKIAlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgUlNGMTZfTUlORlJFUSB8fAogCQkJZi0+ZnJlcXVlbmN5ID4gUlNGMTZfTUFYRlJFUSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODIsNiArMTg1LDggQEAKIHsKIAlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGZtaS0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKQEAgLTIwNCw3ICsyMDksNyBAQAogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSBmbWktPmN1cnZvbDsKKwkJY3RybC0+dmFsdWUgPSBmbWktPm11dGU7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyMSw3ICsyMjYsNyBAQAogCQkJZm1pX211dGUoZm1pKTsKIAkJZWxzZQogCQkJZm1pX3VubXV0ZShmbWkpOwotCQlmbWktPmN1cnZvbCA9IGN0cmwtPnZhbHVlOworCQlmbWktPm11dGUgPSBjdHJsLT52YWx1ZTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMzE2LDI2ICszMjEsNTQgQEAKIHsKIAlzdHJ1Y3QgZm1pICpmbWkgPSAmZm1pX2NhcmQ7CiAJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZmbWktPnY0bDJfZGV2OwotCWludCByZXM7CisJaW50IHJlcywgaTsKKwlpbnQgcHJvYmVfcG9ydHNbXSA9IHsgMCwgMHgyODQsIDB4Mzg0IH07CiAKLQlpZiAoaW8gPCAwKQotCQlpbyA9IGlzYXBucF9mbWlfcHJvYmUoKTsKKwlpZiAoaW8gPCAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX3BvcnRzKTsgaSsrKSB7CisJCQlpbyA9IHByb2JlX3BvcnRzW2ldOworCQkJaWYgKGlvID09IDApIHsKKwkJCQlpbyA9IGlzYXBucF9mbWlfcHJvYmUoKTsKKwkJCQlpZiAoaW8gPCAwKQorCQkJCQljb250aW51ZTsKKwkJCQlwbnBfYXR0YWNoZWQgPSAxOworCQkJfQorCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInJhZGlvLXNmMTZmbWkiKSkgeworCQkJCWlmIChwbnBfYXR0YWNoZWQpCisJCQkJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CisJCQkJaW8gPSAtMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChwbnBfYXR0YWNoZWQgfHwKKwkJCSAgICAoKGluYihpbykgJiAweGY5KSA9PSAweGY5ICYmIChpbmIoaW8pICYgMHg0KSA9PSAwKSkKKwkJCQlicmVhazsKKwkJCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwkJCWlvID0gLTE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAicmFkaW8tc2YxNmZtaSIpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbWk6IHBvcnQgJSN4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWlmIChpbmIoaW8pID09IDB4ZmYpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtaTogY2FyZCBub3QgcHJlc2VudCBhdCAlI3hcbiIsIGlvKTsKKwkJCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCWlmIChpbyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1zZjE2Zm1pOiBubyBjYXJkcyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJzZjE2Zm1pIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CiAJZm1pLT5pbyA9IGlvOwotCWlmIChmbWktPmlvIDwgMCkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgIk5vIFBuUCBjYXJkIGZvdW5kLlxuIik7Ci0JCXJldHVybiBmbWktPmlvOwotCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAicmFkaW8tc2YxNmZtaSIpKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBmbWktPmlvKTsKLQkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CiAJaWYgKHJlcyA8IDApIHsKIAkJcmVsZWFzZV9yZWdpb24oZm1pLT5pbywgMik7Ci0JCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CisJCWlmIChwbnBfYXR0YWNoZWQpCisJCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CiAJCXJldHVybiByZXM7CiAJfQpAQCAtMzUyLDcgKzM4NSw4IEBACiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1pLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewogCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKIAkJcmVsZWFzZV9yZWdpb24oZm1pLT5pbywgMik7Ci0JCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CisJCWlmIChwbnBfYXR0YWNoZWQpCisJCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM2OSw3ICs0MDMsNyBAQAogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbWktPnZkZXYpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmZtaS0+djRsMl9kZXYpOwogCXJlbGVhc2VfcmVnaW9uKGZtaS0+aW8sIDIpOwotCWlmIChkZXYpCisJaWYgKGRldiAmJiBwbnBfYXR0YWNoZWQpCiAJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwppbmRleCBhMTE0MTRmLi41MmM3YmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC0yNTEsNiArMjUxLDggQEAKIHsKIAlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlpZiAoZi0+dHVuZXIgIT0gMCB8fCBmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCisJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mcmVxdWVuY3kgPCBSU0YxNl9NSU5GUkVRIHx8CiAJCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3Miw2ICsyNzQsOCBAQAogewogCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBmbXIyLT5jdXJmcmVxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZWE1NzY0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYwppbmRleCAzY2Q3NmRkLi44ZTcxOGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQodiwgMCwgc2l6ZW9mKHYpKTsKKwltZW1zZXQodiwgMCwgc2l6ZW9mKCp2KSk7CiAJc3RyY3B5KHYtPm5hbWUsICJGTSIpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXRlYTU3NjRfaTJjX3JlYWQocmFkaW8pOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiB7CiAJc3RydWN0IHRlYTU3NjRfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlpZiAoZi0+dHVuZXIgIT0gMCkKKwlpZiAoZi0+dHVuZXIgIT0gMCB8fCBmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mcmVxdWVuY3kgPT0gMCkgewogCQkvKiBXZSBzcGVjaWFsIGNhc2UgdGhpcyBhcyBhIHBvd2VyIGRvd24gY29udHJvbC4gKi8KQEAgLTM3MCw4ICszNzAsMTAgQEAKIAlzdHJ1Y3QgdGVhNTc2NF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgdGVhNTc2NF9yZWdzICpyID0gJnJhZGlvLT5yZWdzOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCXRlYTU3NjRfaTJjX3JlYWQocmFkaW8pOwotCW1lbXNldChmLCAwLCBzaXplb2YoZikpOworCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlpZiAoci0+dG5jdHJsICYgVEVBNTc2NF9UTkNUUkxfUFVQRDApCiAJCWYtPmZyZXF1ZW5jeSA9ICh0ZWE1NzY0X2dldF9mcmVxKHJhZGlvKSAqIDIpIC8gMTI1OwpAQCAtNDU4LDEyICs0NjAsOCBAQAogc3RhdGljIGludCB0ZWE1NzY0X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJLyogQ3VycmVudGx5IHdlIHN1cHBvcnQgb25seSBvbmUgZGV2aWNlICovCi0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CiAJc3RydWN0IHRlYTU3NjRfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlpZiAocmFkaW8tPnZpZGVvZGV2LT5taW5vciAhPSBtaW5vcikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAltdXRleF9sb2NrKCZyYWRpby0+bXV0ZXgpOwogCS8qIE9ubHkgZXhjbHVzaXZlIGFjY2VzcyAqLwogCWlmIChyYWRpby0+dXNlcnMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwppbmRleCA2OTlkYjlhLi5mYzFjODYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCkBAIC0yNDAsNiArMjQwLDggQEAKIHsKIAlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJdHRfc2V0ZnJlcSh0dCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OSw2ICsyNTEsOCBAQAogewogCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHR0LT5jdXJmcmVxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCmluZGV4IDZmOWVjYzMuLjlkNmRjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKQEAgLTIzOSw2ICsyMzksOCBAQAogewogCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKIAl0cl9zZXRmcmVxKHRyLCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQpAQCAtMjQ4LDYgKzI1MCw4IEBACiB7CiAJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlpZiAoZi0+dHVuZXIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gdHItPmN1cmZyZXE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCmluZGV4IDNhOThmMTMuLjAzNDM5MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCkBAIC0yMDcsNiArMjA3LDggQEAKIHsKIAlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmN1cmZyZXE7CiAJcmV0dXJuIDA7CkBAIC0yMTcsNiArMjE5LDggQEAKIHsKIAlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCXR5cGhvb25fc2V0ZnJlcShkZXYsIGRldi0+Y3VyZnJlcSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCmluZGV4IDgwZTk4YjYuLmYzMWVhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCkBAIC0yNjYsNiArMjY2LDggQEAKIHsKIAlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmIChmLT50dW5lciAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHpvbF9zZXRmcmVxKHpvbCwgZi0+ZnJlcXVlbmN5KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKQEAgLTI3Niw2ICsyNzgsOCBAQAogewogCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHpvbC0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYwppbmRleCBmMzMzMTVmLi40ZGEwZjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCkBAIC00MjYsNiArNDI2LDEwNCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZSBPcGVyYXRpb25zIEludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2ZvcHNfcmVhZCAtIHJlYWQgUkRTIGRhdGEKKyAqLworc3RhdGljIHNzaXplX3Qgc2k0NzB4X2ZvcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfY291bnQgPSAwOworCisJLyogc3dpdGNoIG9uIHJkcyByZWNlcHRpb24gKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJiBTWVNDT05GSUcxX1JEUykgPT0gMCkKKwkJc2k0NzB4X3Jkc19vbihyYWRpbyk7CisKKwkvKiBibG9jayBpZiBubyBuZXcgZGF0YSBhdmFpbGFibGUgKi8KKwl3aGlsZSAocmFkaW8tPndyX2luZGV4ID09IHJhZGlvLT5yZF9pbmRleCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldHZhbCA9IC1FV09VTERCTE9DSzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJhZGlvLT5yZWFkX3F1ZXVlLAorCQkJcmFkaW8tPndyX2luZGV4ICE9IHJhZGlvLT5yZF9pbmRleCkgPCAwKSB7CisJCQlyZXR2YWwgPSAtRUlOVFI7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwkvKiBjYWxjdWxhdGUgYmxvY2sgY291bnQgZnJvbSBieXRlIGNvdW50ICovCisJY291bnQgLz0gMzsKKworCS8qIGNvcHkgUkRTIGJsb2NrIG91dCBvZiBpbnRlcm5hbCBidWZmZXIgYW5kIHRvIHVzZXIgYnVmZmVyICovCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCXdoaWxlIChibG9ja19jb3VudCA8IGNvdW50KSB7CisJCWlmIChyYWRpby0+cmRfaW5kZXggPT0gcmFkaW8tPndyX2luZGV4KQorCQkJYnJlYWs7CisKKwkJLyogYWx3YXlzIHRyYW5zZmVyIHJkcyBjb21wbGV0ZSBibG9ja3MgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZyYWRpby0+YnVmZmVyW3JhZGlvLT5yZF9pbmRleF0sIDMpKQorCQkJLyogcmV0dmFsID0gLUVGQVVMVDsgKi8KKwkJCWJyZWFrOworCisJCS8qIGluY3JlbWVudCBhbmQgd3JhcCByZWFkIHBvaW50ZXIgKi8KKwkJcmFkaW8tPnJkX2luZGV4ICs9IDM7CisJCWlmIChyYWRpby0+cmRfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQorCQkJcmFkaW8tPnJkX2luZGV4ID0gMDsKKworCQkvKiBpbmNyZW1lbnQgY291bnRlcnMgKi8KKwkJYmxvY2tfY291bnQrKzsKKwkJYnVmICs9IDM7CisJCXJldHZhbCArPSAzOworCX0KKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfZm9wc19wb2xsIC0gcG9sbCBSRFMgZGF0YQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNpNDcweF9mb3BzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbiAqLworCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKSA9PSAwKQorCQlzaTQ3MHhfcmRzX29uKHJhZGlvKTsKKworCXBvbGxfd2FpdChmaWxlLCAmcmFkaW8tPnJlYWRfcXVldWUsIHB0cyk7CisKKwlpZiAocmFkaW8tPnJkX2luZGV4ICE9IHJhZGlvLT53cl9pbmRleCkKKwkJcmV0dmFsID0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF9mb3BzIC0gZmlsZSBvcGVyYXRpb25zIGludGVyZmFjZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHNpNDcweF9mb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCQk9IHNpNDcweF9mb3BzX3JlYWQsCisJLnBvbGwJCQk9IHNpNDcweF9mb3BzX3BvbGwsCisJLmlvY3RsCQkJPSB2aWRlb19pb2N0bDIsCisJLm9wZW4JCQk9IHNpNDcweF9mb3BzX29wZW4sCisJLnJlbGVhc2UJCT0gc2k0NzB4X2ZvcHNfcmVsZWFzZSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFZpZGVvNExpbnV4IEludGVyZmFjZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtaTJjLmMKaW5kZXggMmQ1M2I2YS4uNTQ2NjAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1pMmMuYwpAQCAtMjIsMjIgKzIyLDE3IEBACiAgKi8KIAogCi0vKgotICogVG9EbzoKLSAqIC0gUkRTIHN1cHBvcnQKLSAqLwotCi0KIC8qIGRyaXZlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+IjsKLSNkZWZpbmUgRFJJVkVSX0tFUk5FTF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDApCisjZGVmaW5lIERSSVZFUl9LRVJORUxfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigxLCAwLCAxKQogI2RlZmluZSBEUklWRVJfQ0FSRCAiU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlciIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkkyQyByYWRpbyBkcml2ZXIgZm9yIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAuMCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC4xIgogCiAvKiBrZXJuZWwgaW5jbHVkZXMgKi8KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAicmFkaW8tc2k0NzB4LmgiCiAKQEAgLTYyLDYgKzU3LDIwIEBACiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiUmFkaW8gTnIiKTsKIAorLyogUkRTIGJ1ZmZlciBibG9ja3MgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2J1ZiA9IDEwMDsKK21vZHVsZV9wYXJhbShyZHNfYnVmLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmRzX2J1ZiwgIlJEUyBidWZmZXIgZW50cmllczogKjEwMCoiKTsKKworLyogUkRTIG1heGltdW0gYmxvY2sgZXJyb3JzICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4X3Jkc19lcnJvcnMgPSAxOworLyogMCBtZWFucyAgIDAgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAqLworLyogMSBtZWFucyAxLTIgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAodXNlZCBieSBvcmlnaW5hbCBVU0JSYWRpby5leGUpICovCisvKiAyIG1lYW5zIDMtNSAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICovCisvKiAzIG1lYW5zICAgNisgZXJyb3JzIG9yIGVycm9ycyBpbiBjaGVja3dvcmQsIGNvcnJlY3Rpb24gbm90IHBvc3NpYmxlICovCittb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9yZHNfZXJyb3JzLCAiUkRTIG1heGltdW0gYmxvY2sgZXJyb3JzOiAqMSoiKTsKKwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTczLDcgKzE4Miw3IEBACiAvKgogICogc2k0NzB4X2ZvcHNfb3BlbiAtIGZpbGUgb3BlbgogICovCi1zdGF0aWMgaW50IHNpNDcweF9mb3BzX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitpbnQgc2k0NzB4X2ZvcHNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwpAQCAtMTgxLDEyICsxOTAsMjEgQEAKIAltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAJcmFkaW8tPnVzZXJzKys7CiAKLQlpZiAocmFkaW8tPnVzZXJzID09IDEpCisJaWYgKHJhZGlvLT51c2VycyA9PSAxKSB7CiAJCS8qIHN0YXJ0IHJhZGlvICovCiAJCXJldHZhbCA9IHNpNDcweF9zdGFydChyYWRpbyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBkb25lOwogCisJCS8qIGVuYWJsZSBSRFMgaW50ZXJydXB0ICovCisJCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gfD0gU1lTQ09ORklHMV9SRFNJRU47CisJCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJj0gflNZU0NPTkZJRzFfR1BJTzI7CisJCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gfD0gMHgxIDw8IDI7CisJCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzEpOworCX0KKworZG9uZToKIAltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE5NCw3ICsyMTIsNyBAQAogLyoKICAqIHNpNDcweF9mb3BzX3JlbGVhc2UgLSBmaWxlIHJlbGVhc2UKICAqLwotc3RhdGljIGludCBzaTQ3MHhfZm9wc19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoraW50IHNpNDcweF9mb3BzX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTIxNSwxNyArMjMzLDYgQEAKIH0KIAogCi0vKgotICogc2k0NzB4X2ZvcHMgLSBmaWxlIG9wZXJhdGlvbnMgaW50ZXJmYWNlCi0gKi8KLWNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzaTQ3MHhfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKLQkub3BlbgkJPSBzaTQ3MHhfZm9wc19vcGVuLAotCS5yZWxlYXNlCT0gc2k0NzB4X2ZvcHNfcmVsZWFzZSwKLX07Ci0KLQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFZpZGVvNExpbnV4IEludGVyZmFjZQpAQCAtMjUzLDYgKzI2MCwxMDUgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKKyAqIHNpNDcweF9pMmNfaW50ZXJydXB0X3dvcmsgLSByZHMgcHJvY2Vzc2luZyBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBzaTQ3MHhfaTJjX2ludGVycnVwdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBzaTQ3MHhfZGV2aWNlLCByYWRpb193b3JrKTsKKwl1bnNpZ25lZCBjaGFyIHJlZ25yOworCXVuc2lnbmVkIGNoYXIgYmxvY2tudW07CisJdW5zaWduZWQgc2hvcnQgYmxlcjsgLyogcmRzIGJsb2NrIGVycm9ycyAqLworCXVuc2lnbmVkIHNob3J0IHJkczsKKwl1bnNpZ25lZCBjaGFyIHRtcGJ1ZlszXTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJiBTWVNDT05GSUcxX1JEUykgPT0gMCkKKwkJcmV0dXJuOworCisJLyogVXBkYXRlIFJEUyByZWdpc3RlcnMgKi8KKwlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSRFNfUkVHSVNURVJfTlVNOyByZWducisrKSB7CisJCXJldHZhbCA9IHNpNDcweF9nZXRfcmVnaXN0ZXIocmFkaW8sIFNUQVRVU1JTU0kgKyByZWducik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuOworCX0KKworCS8qIGdldCByZHMgYmxvY2tzICovCisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9SRFNSKSA9PSAwKQorCQkvKiBObyBSRFMgZ3JvdXAgcmVhZHksIGJldHRlciBsdWNrIG5leHQgdGltZSAqLworCQlyZXR1cm47CisKKwlmb3IgKGJsb2NrbnVtID0gMDsgYmxvY2tudW0gPCA0OyBibG9ja251bSsrKSB7CisJCXN3aXRjaCAoYmxvY2tudW0pIHsKKwkJZGVmYXVsdDoKKwkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmCisJCQkJCVNUQVRVU1JTU0lfQkxFUkEpID4+IDk7CisJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0FdOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tSRUFEQ0hBTl0gJgorCQkJCQlSRUFEQ0hBTl9CTEVSQikgPj4gMTQ7CisJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0JdOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tSRUFEQ0hBTl0gJgorCQkJCQlSRUFEQ0hBTl9CTEVSQykgPj4gMTI7CisJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0NdOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tSRUFEQ0hBTl0gJgorCQkJCQlSRUFEQ0hBTl9CTEVSRCkgPj4gMTA7CisJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0RdOworCQkJYnJlYWs7CisJCX07CisKKwkJLyogRmlsbCB0aGUgVjRMMiBSRFMgYnVmZmVyICovCisJCXB1dF91bmFsaWduZWRfbGUxNihyZHMsICZ0bXBidWYpOworCQl0bXBidWZbMl0gPSBibG9ja251bTsJCS8qIG9mZnNldCBuYW1lICovCisJCXRtcGJ1ZlsyXSB8PSBibG9ja251bSA8PCAzOwkvKiByZWNlaXZlZCBvZmZzZXQgKi8KKwkJaWYgKGJsZXIgPiBtYXhfcmRzX2Vycm9ycykKKwkJCXRtcGJ1ZlsyXSB8PSAweDgwOwkvKiB1bmNvcnJlY3RhYmxlIGVycm9ycyAqLworCQllbHNlIGlmIChibGVyID4gMCkKKwkJCXRtcGJ1ZlsyXSB8PSAweDQwOwkvKiBjb3JyZWN0ZWQgZXJyb3IocykgKi8KKworCQkvKiBjb3B5IFJEUyBibG9jayB0byBpbnRlcm5hbCBidWZmZXIgKi8KKwkJbWVtY3B5KCZyYWRpby0+YnVmZmVyW3JhZGlvLT53cl9pbmRleF0sICZ0bXBidWYsIDMpOworCQlyYWRpby0+d3JfaW5kZXggKz0gMzsKKworCQkvKiB3cmFwIHdyaXRlIHBvaW50ZXIgKi8KKwkJaWYgKHJhZGlvLT53cl9pbmRleCA+PSByYWRpby0+YnVmX3NpemUpCisJCQlyYWRpby0+d3JfaW5kZXggPSAwOworCisJCS8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLworCQlpZiAocmFkaW8tPndyX2luZGV4ID09IHJhZGlvLT5yZF9pbmRleCkgeworCQkJLyogaW5jcmVtZW50IGFuZCB3cmFwIHJlYWQgcG9pbnRlciAqLworCQkJcmFkaW8tPnJkX2luZGV4ICs9IDM7CisJCQlpZiAocmFkaW8tPnJkX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKKwkJCQlyYWRpby0+cmRfaW5kZXggPSAwOworCQl9CisJfQorCisJaWYgKHJhZGlvLT53cl9pbmRleCAhPSByYWRpby0+cmRfaW5kZXgpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmFkaW8tPnJlYWRfcXVldWUpOworfQorCisKKy8qCisgKiBzaTQ3MHhfaTJjX2ludGVycnVwdCAtIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzaTQ3MHhfaTJjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gZGV2X2lkOworCisJaWYgKCF3b3JrX3BlbmRpbmcoJnJhZGlvLT5yYWRpb193b3JrKSkKKwkJc2NoZWR1bGVfd29yaygmcmFkaW8tPnJhZGlvX3dvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qCiAgKiBzaTQ3MHhfaTJjX3Byb2JlIC0gcHJvYmUgZm9yIHRoZSBkZXZpY2UKICAqLwogc3RhdGljIGludCBfX2RldmluaXQgc2k0NzB4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApAQCAtMjY4LDYgKzM3NCw4IEBACiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2luaXRpYWw7CiAJfQorCisJSU5JVF9XT1JLKCZyYWRpby0+cmFkaW9fd29yaywgc2k0NzB4X2kyY19pbnRlcnJ1cHRfd29yayk7CiAJcmFkaW8tPnVzZXJzID0gMDsKIAlyYWRpby0+Y2xpZW50ID0gY2xpZW50OwogCW11dGV4X2luaXQoJnJhZGlvLT5sb2NrKTsKQEAgLTMxOSw2ICs0MjcsMjYgQEAKIAkvKiBzZXQgaW5pdGlhbCBmcmVxdWVuY3kgKi8KIAlzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIDg3LjUgKiBGUkVRX01VTCk7IC8qIGF2YWlsYWJsZSBpbiBhbGwgcmVnaW9ucyAqLwogCisJLyogcmRzIGJ1ZmZlciBhbGxvY2F0aW9uICovCisJcmFkaW8tPmJ1Zl9zaXplID0gcmRzX2J1ZiAqIDM7CisJcmFkaW8tPmJ1ZmZlciA9IGttYWxsb2MocmFkaW8tPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhZGlvLT5idWZmZXIpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJfdmlkZW87CisJfQorCisJLyogcmRzIGJ1ZmZlciBjb25maWd1cmF0aW9uICovCisJcmFkaW8tPndyX2luZGV4ID0gMDsKKwlyYWRpby0+cmRfaW5kZXggPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJhZGlvLT5yZWFkX3F1ZXVlKTsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGNsaWVudC0+aXJxLCBzaTQ3MHhfaTJjX2ludGVycnVwdCwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCBEUklWRVJfTkFNRSwgcmFkaW8pOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0XG4iKTsKKwkJZ290byBlcnJfcmRzOworCX0KKwogCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLwogCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLAogCQkJcmFkaW9fbnIpOwpAQCAtMzMwLDYgKzQ1OCw5IEBACiAKIAlyZXR1cm4gMDsKIGVycl9hbGw6CisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIHJhZGlvKTsKK2Vycl9yZHM6CisJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CiBlcnJfdmlkZW86CiAJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKIGVycl9yYWRpbzoKQEAgLTM0Niw2ICs0NzcsOCBAQAogewogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIHJhZGlvKTsKKwljYW5jZWxfd29ya19zeW5jKCZyYWRpby0+cmFkaW9fd29yayk7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKIAlrZnJlZShyYWRpbyk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CkBAIC0zNTQsNiArNDg3LDQ0IEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19QTQorLyoKKyAqIHNpNDcweF9pMmNfc3VzcGVuZCAtIHN1c3BlbmQgdGhlIGRldmljZQorICovCitzdGF0aWMgaW50IHNpNDcweF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCS8qIHBvd2VyIGRvd24gKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19ESVNBQkxFOworCWlmIChzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRykgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBzaTQ3MHhfaTJjX3Jlc3VtZSAtIHJlc3VtZSB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCS8qIHBvd2VyIHVwIDogbmVlZCAxMTBtcyAqLworCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX0VOQUJMRTsKKwlpZiAoc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJbXNsZWVwKDExMCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHNpNDcweF9pMmNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHNpNDcweF9pMmNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCisKIC8qCiAgKiBzaTQ3MHhfaTJjX2RyaXZlciAtIGkyYyBkcml2ZXIgaW50ZXJmYWNlCiAgKi8KQEAgLTM2NCw2ICs1MzUsOCBAQAogCX0sCiAJLnByb2JlCQkJPSBzaTQ3MHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJCQk9IF9fZGV2ZXhpdF9wKHNpNDcweF9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZAkJPSBzaTQ3MHhfaTJjX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gc2k0NzB4X2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlCQk9IHNpNDcweF9pMmNfaWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKaW5kZXggZjJkMGUxZC4uYTk2ZTFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYwpAQCAtNTA5LDg5ICs1MDksOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogc2k0NzB4X2ZvcHNfcmVhZCAtIHJlYWQgUkRTIGRhdGEKLSAqLwotc3RhdGljIHNzaXplX3Qgc2k0NzB4X2ZvcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gMDsKLQl1bnNpZ25lZCBpbnQgYmxvY2tfY291bnQgPSAwOwotCi0JLyogc3dpdGNoIG9uIHJkcyByZWNlcHRpb24gKi8KLQlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJiBTWVNDT05GSUcxX1JEUykgPT0gMCkKLQkJc2k0NzB4X3Jkc19vbihyYWRpbyk7Ci0KLQkvKiBibG9jayBpZiBubyBuZXcgZGF0YSBhdmFpbGFibGUgKi8KLQl3aGlsZSAocmFkaW8tPndyX2luZGV4ID09IHJhZGlvLT5yZF9pbmRleCkgewotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXJldHZhbCA9IC1FV09VTERCTE9DSzsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJhZGlvLT5yZWFkX3F1ZXVlLAotCQkJcmFkaW8tPndyX2luZGV4ICE9IHJhZGlvLT5yZF9pbmRleCkgPCAwKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVFI7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQl9Ci0KLQkvKiBjYWxjdWxhdGUgYmxvY2sgY291bnQgZnJvbSBieXRlIGNvdW50ICovCi0JY291bnQgLz0gMzsKLQotCS8qIGNvcHkgUkRTIGJsb2NrIG91dCBvZiBpbnRlcm5hbCBidWZmZXIgYW5kIHRvIHVzZXIgYnVmZmVyICovCi0JbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwotCXdoaWxlIChibG9ja19jb3VudCA8IGNvdW50KSB7Ci0JCWlmIChyYWRpby0+cmRfaW5kZXggPT0gcmFkaW8tPndyX2luZGV4KQotCQkJYnJlYWs7Ci0KLQkJLyogYWx3YXlzIHRyYW5zZmVyIHJkcyBjb21wbGV0ZSBibG9ja3MgKi8KLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZyYWRpby0+YnVmZmVyW3JhZGlvLT5yZF9pbmRleF0sIDMpKQotCQkJLyogcmV0dmFsID0gLUVGQVVMVDsgKi8KLQkJCWJyZWFrOwotCi0JCS8qIGluY3JlbWVudCBhbmQgd3JhcCByZWFkIHBvaW50ZXIgKi8KLQkJcmFkaW8tPnJkX2luZGV4ICs9IDM7Ci0JCWlmIChyYWRpby0+cmRfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQotCQkJcmFkaW8tPnJkX2luZGV4ID0gMDsKLQotCQkvKiBpbmNyZW1lbnQgY291bnRlcnMgKi8KLQkJYmxvY2tfY291bnQrKzsKLQkJYnVmICs9IDM7Ci0JCXJldHZhbCArPSAzOwotCX0KLQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKLQotZG9uZToKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfZm9wc19wb2xsIC0gcG9sbCBSRFMgZGF0YQotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNpNDcweF9mb3BzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbiAqLwotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKSA9PSAwKQotCQlzaTQ3MHhfcmRzX29uKHJhZGlvKTsKLQotCXBvbGxfd2FpdChmaWxlLCAmcmFkaW8tPnJlYWRfcXVldWUsIHB0cyk7Ci0KLQlpZiAocmFkaW8tPnJkX2luZGV4ICE9IHJhZGlvLT53cl9pbmRleCkKLQkJcmV0dmFsID0gUE9MTElOIHwgUE9MTFJETk9STTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKICAqIHNpNDcweF9mb3BzX29wZW4gLSBmaWxlIG9wZW4KICAqLwotc3RhdGljIGludCBzaTQ3MHhfZm9wc19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoraW50IHNpNDcweF9mb3BzX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsOwpAQCAtNjQ1LDcgKzU2NSw3IEBACiAvKgogICogc2k0NzB4X2ZvcHNfcmVsZWFzZSAtIGZpbGUgcmVsZWFzZQogICovCi1zdGF0aWMgaW50IHNpNDcweF9mb3BzX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitpbnQgc2k0NzB4X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwpAQCAtNjg4LDE5ICs2MDgsNiBAQAogfQogCiAKLS8qCi0gKiBzaTQ3MHhfZm9wcyAtIGZpbGUgb3BlcmF0aW9ucyBpbnRlcmZhY2UKLSAqLwotY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHNpNDcweF9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVhZAkJPSBzaTQ3MHhfZm9wc19yZWFkLAotCS5wb2xsCQk9IHNpNDcweF9mb3BzX3BvbGwsCi0JLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKLQkub3BlbgkJPSBzaTQ3MHhfZm9wc19vcGVuLAotCS5yZWxlYXNlCT0gc2k0NzB4X2ZvcHNfcmVsZWFzZSwKLX07Ci0KLQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFZpZGVvNExpbnV4IEludGVyZmFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LmggYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaAppbmRleCBkMGFmMTk0Li4zY2QwYTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CkBAIC0xODEsNiArMTgyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19TSTQ3MFgpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19TSTQ3MFhfTU9EVUxFKQogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHJhZGlvX3dvcms7CiAjZW5kaWYKIH07CiAKQEAgLTIxMiw3ICsyMTQsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDb21tb24gRnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1leHRlcm4gY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHNpNDcweF9mb3BzOwogZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZTsKIGludCBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IHJlZ25yKTsKIGludCBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IHJlZ25yKTsKQEAgLTIyMSw1ICsyMjIsNyBAQAogaW50IHNpNDcweF9zdGFydChzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pOwogaW50IHNpNDcweF9zdG9wKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyk7CiBpbnQgc2k0NzB4X3Jkc19vbihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pOworaW50IHNpNDcweF9mb3BzX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpOworaW50IHNpNDcweF9mb3BzX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpOwogaW50IHNpNDcweF92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcGFiaWxpdHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDlkYzc0YzkuLjJmODNiZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTM3LDEwICszNyw2IEBACiAJZGVwZW5kcyBvbiBQQ0kKIAl0cmlzdGF0ZQogCi1jb25maWcgVklERU9fSVIKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gSU5QVVQKLQogY29uZmlnIFZJREVPX1RWRUVQUk9NCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIEkyQwpAQCAtODQwLDYgKzgzNiwxMiBAQAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOVQwMzEgY2FtZXJhcyBmcm9tIE1pY3Jvbi4KIAorY29uZmlnIFNPQ19DQU1FUkFfTVQ5VDExMgorCXRyaXN0YXRlICJtdDl0MTEyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOVQxMTIgY2FtZXJhcyBmcm9tIEFwdGluYS4KKwogY29uZmlnIFNPQ19DQU1FUkFfTVQ5VjAyMgogCXRyaXN0YXRlICJtdDl2MDIyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggN2EyZGNjMy4uMmFmNjhlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC03NSw2ICs3NSw3IEBACiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxKQkrPSBtdDltMDAxLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEpCSs9IG10OW0xMTEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSkJKz0gbXQ5dDAzMS5vCitvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlUMTEyKQkrPSBtdDl0MTEyLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIpCSs9IG10OXYwMjIubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYKQkJKz0gb3Y3NzJ4Lm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX09WOTY0MCkJCSs9IG92OTY0MC5vCkBAIC0xNDksNyArMTUwLDcgQEAKIG9iai0kKENPTkZJR19WSURFT19DWDIzODg1KSArPSBjeDIzODg1LwogCiBvYmotJChDT05GSUdfVklERU9fT01BUDIpCQkrPSBvbWFwMmNhbS5vCi1vYmotJChDT05GSUdfU09DX0NBTUVSQSkJCSs9IHNvY19jYW1lcmEubworb2JqLSQoQ09ORklHX1NPQ19DQU1FUkEpCQkrPSBzb2NfY2FtZXJhLm8gc29jX21lZGlhYnVzLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNKQkrPSBzb2NfY2FtZXJhX3BsYXRmb3JtLm8KICMgc29jLWNhbWVyYSBob3N0IGRyaXZlcnMgaGF2ZSB0byBiZSBsaW5rZWQgYWZ0ZXIgY2FtZXJhIGRyaXZlcnMKIG9iai0kKENPTkZJR19WSURFT19NWDEpCQkJKz0gbXgxX2NhbWVyYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwppbmRleCBkMTM3YmFjLi5hMzU2ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKQEAgLTc2Nyw3ICs3NjcsNiBAQAogCS5uYW1lCQk9ICJDb2xvdXIgQVIgVkdBIiwKIAkuZm9wcwkJPSAmYXJfZm9wcywKIAkucmVsZWFzZQk9IGFyX3JlbGVhc2UsCi0JLm1pbm9yCQk9IC0xLAogfTsKIAogI2RlZmluZSBBTElHTjQoeCkJKCgoKGludCkoeCkpICYgMHgzKSA9PSAwKQpAQCAtODYwLDggKzg1OSw4IEBACiAJCWdvdG8gb3V0X2RldjsKIAl9CiAKLQlwcmludGsoInZpZGVvJWQ6IEZvdW5kIE02NDI3OCBWR0EgKElSUSAlZCwgRnJlcSAlZE1IeikuXG4iLAotCQlhci0+dmRldi0+bnVtLCBNMzJSX0lSUV9JTlQzLCBmcmVxKTsKKwlwcmludGsoIiVzOiBGb3VuZCBNNjQyNzggVkdBIChJUlEgJWQsIEZyZXEgJWRNSHopLlxuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZShhci0+dmRldiksIE0zMlJfSVJRX0lOVDMsIGZyZXEpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKaW5kZXggMTQ4NWFlZS4uZGM2N2JjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJhdTA4MjguaCIKICNpbmNsdWRlICJhdTA4MjgtcmVnLmgiCiAKLXN0YXRpYyBMSVNUX0hFQUQoYXUwODI4X2Rldmxpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChhdTA4Mjhfc3lzZnNfbG9jayk7CiAKICNkZWZpbmUgQVUwODI4X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQpAQCAtNjkzLDEwICs2OTIsOCBAQAogCWRwcmludGsoMSwgImF1MDgyOF9yZWxlYXNlX3Jlc291cmNlcyBjYWxsZWRcbiIpOwogCW11dGV4X2xvY2soJmF1MDgyOF9zeXNmc19sb2NrKTsKIAotCWlmIChkZXYtPnZkZXYpIHsKLQkJbGlzdF9kZWwoJmRldi0+YXUwODI4bGlzdCk7CisJaWYgKGRldi0+dmRldikKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2KTsKLQl9CiAJaWYgKGRldi0+dmJpX2RldikKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2KTsKIApAQCAtNzM3LDI5ICs3MzQsMTUgQEAKIAogc3RhdGljIGludCBhdTA4MjhfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlscCktPm1pbm9yOwogCWludCByZXQgPSAwOwotCXN0cnVjdCBhdTA4MjhfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAlzdHJ1Y3QgYXUwODI4X2ZoICpmaDsKLQlpbnQgdHlwZSA9IDA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlpbnQgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAotCWxpc3RfZm9yX2VhY2gobGlzdCwgJmF1MDgyOF9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBhdTA4MjhfZGV2LCBhdTA4MjhsaXN0KTsKLQkJaWYgKGgtPnZkZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgPSBoOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJfQogI2lmZGVmIFZCSV9JU19XT1JLSU5HCi0JCWlmIChoLT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ID0gaDsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQl9CisJaWYgKHZpZGVvX2RldmRhdGEoZmlscCktPnZmbF90eXBlID09IFZGTF9UWVBFX0dSQUJCRVIpCisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogI2VuZGlmCi0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKIAogCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF1MDgyOF9maCksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGZoKSB7CkBAIC0xNTg3LDcgKzE1NzAsNiBAQAogCS5mb3BzICAgICAgICAgICAgICAgICAgICAgICA9ICZhdTA4MjhfdjRsX2ZvcHMsCiAJLnJlbGVhc2UgICAgICAgICAgICAgICAgICAgID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiAJLmlvY3RsX29wcyAJCSAgICA9ICZ2aWRlb19pb2N0bF9vcHMsCi0JLm1pbm9yICAgICAgICAgICAgICAgICAgICAgID0gLTEsCiAJLnR2bm9ybXMgICAgICAgICAgICAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAogCS5jdXJyZW50X25vcm0gICAgICAgICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKIH07CkBAIC0xNjc2LDI1ICsxNjU4LDIzIEBACiAJc3RyY3B5KGRldi0+dmJpX2Rldi0+bmFtZSwgImF1MDgyOGEgdmJpIik7CiAjZW5kaWYKIAotCWxpc3RfYWRkX3RhaWwoJmRldi0+YXUwODI4bGlzdCwgJmF1MDgyOF9kZXZsaXN0KTsKLQogCS8qIFJlZ2lzdGVyIHRoZSB2NGwyIGRldmljZSAqLworCXZpZGVvX3NldF9kcnZkYXRhKGRldi0+dmRldiwgZGV2KTsKIAlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UgKGVycm9yID0gJWQpLlxuIiwKIAkJCXJldHZhbCk7Ci0JCWxpc3RfZGVsKCZkZXYtPmF1MDgyOGxpc3QpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKICNpZmRlZiBWQklfSVNfV09SS0lORwogCS8qIFJlZ2lzdGVyIHRoZSB2YmkgZGV2aWNlICovCisJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52YmlfZGV2LCBkZXYpOwogCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYsIFZGTF9UWVBFX1ZCSSwgLTEpOwogCWlmIChyZXR2YWwgIT0gMCkgewogCQlkcHJpbnRrKDEsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdmJpIGRldmljZSAoZXJyb3IgPSAlZCkuXG4iLAogCQkJcmV0dmFsKTsKLQkJbGlzdF9kZWwoJmRldi0+YXUwODI4bGlzdCk7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmJpX2Rldik7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaAppbmRleCBiOTc3OTE1Li4yMDdmMzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaApAQCAtMTkyLDcgKzE5Miw2IEBACiAJc3RydWN0IGF1MDgyOF9kdmIJCWR2YjsKIAogCS8qIEFuYWxvZyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYXUwODI4bGlzdDsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJaW50IHVzZXJzOwogCXVuc2lnbmVkIGludCBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IGE2NzI0MDE5Li4zMTgyYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0zMjA2LDI0ICszMjA2LDI0IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBidHR2ICpidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBidHR2X2ZoICpmaDsKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgImJ0dHY6IG9wZW4gbWlub3I9JWRcbiIsbWlub3IpOworCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0djogb3BlbiBkZXY9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldikpOwogCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAoYnR2LT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJaWYgKHZkZXYtPnZmbF90eXBlID09IFZGTF9UWVBFX0dSQUJCRVIpIHsKIAkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQl9IGVsc2UgaWYgKGJ0di0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwl9IGVsc2UgaWYgKHZkZXYtPnZmbF90eXBlID09IFZGTF9UWVBFX1ZCSSkgewogCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKIAl9IGVsc2UgewogCQlXQVJOX09OKDEpOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWxvY2tfa2VybmVsKCk7CisKIAlkcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogb3BlbiBjYWxsZWQgKHR5cGU9JXMpXG4iLAogCQlidHYtPmMubnIsdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIApAQCAtMzM5Nyw3ICszMzk3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgYnR0dl92aWRlb190ZW1wbGF0ZSA9IHsKIAkuZm9wcyAgICAgICAgID0gJmJ0dHZfZm9wcywKLQkubWlub3IgICAgICAgID0gLTEsCiAJLmlvY3RsX29wcyAgICA9ICZidHR2X2lvY3RsX29wcywKIAkudHZub3JtcyAgICAgID0gQlRUVl9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfUEFMLApAQCAtMzQwOCwxOCArMzQwNywxMyBAQAogCiBzdGF0aWMgaW50IHJhZGlvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGJ0dHZfZmggKmZoOwogCi0JZHByaW50aygiYnR0djogb3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CisJZHByaW50aygiYnR0djogb3BlbiBkZXY9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldikpOwogCiAJbG9ja19rZXJuZWwoKTsKLQlXQVJOX09OKGJ0di0+cmFkaW9fZGV2ICYmIGJ0di0+cmFkaW9fZGV2LT5taW5vciAhPSBtaW5vcik7Ci0JaWYgKCFidHYtPnJhZGlvX2RldiB8fCBidHYtPnJhZGlvX2Rldi0+bWlub3IgIT0gbWlub3IpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAlkcHJpbnRrKCJidHR2JWQ6IG9wZW4gY2FsbGVkIChyYWRpbylcbiIsYnR2LT5jLm5yKTsKIApAQCAtMzY0MCw3ICszNjM0LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcmFkaW9fdGVtcGxhdGUgPSB7CiAJLmZvcHMgICAgICA9ICZyYWRpb19mb3BzLAotCS5taW5vciAgICAgPSAtMSwKIAkuaW9jdGxfb3BzID0gJnJhZGlvX2lvY3RsX29wcywKIH07CiAKQEAgLTQyMDgsMjEgKzQyMDEsMjEgQEAKIHN0YXRpYyB2b2lkIGJ0dHZfdW5yZWdpc3Rlcl92aWRlbyhzdHJ1Y3QgYnR0diAqYnR2KQogewogCWlmIChidHYtPnZpZGVvX2RldikgewotCQlpZiAoLTEgIT0gYnR2LT52aWRlb19kZXYtPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChidHYtPnZpZGVvX2RldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShidHYtPnZpZGVvX2Rldik7CiAJCWVsc2UKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGJ0di0+dmlkZW9fZGV2KTsKIAkJYnR2LT52aWRlb19kZXYgPSBOVUxMOwogCX0KIAlpZiAoYnR2LT52YmlfZGV2KSB7Ci0JCWlmICgtMSAhPSBidHYtPnZiaV9kZXYtPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChidHYtPnZiaV9kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoYnR2LT52YmlfZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoYnR2LT52YmlfZGV2KTsKIAkJYnR2LT52YmlfZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGJ0di0+cmFkaW9fZGV2KSB7Ci0JCWlmICgtMSAhPSBidHYtPnJhZGlvX2Rldi0+bWlub3IpCisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGJ0di0+cmFkaW9fZGV2KSkKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGJ0di0+cmFkaW9fZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoYnR2LT5yYWRpb19kZXYpOwpAQCAtNDI0NCw4ICs0MjM3LDggQEAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAogCQkJCSAgdmlkZW9fbnJbYnR2LT5jLm5yXSkgPCAwKQogCQlnb3RvIGVycjsKLQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWRcbiIsCi0JICAgICAgIGJ0di0+Yy5uciwgYnR2LT52aWRlb19kZXYtPm51bSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwKKwkgICAgICAgYnR2LT5jLm5yLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGJ0di0+dmlkZW9fZGV2KSk7CiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmYnR2LT52aWRlb19kZXYtPmRldiwKIAkJCQkgICAgICZkZXZfYXR0cl9jYXJkKTwwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnR0diVkOiBkZXZpY2VfY3JlYXRlX2ZpbGUgJ2NhcmQnICIKQEAgLTQyNjEsOCArNDI1NCw4IEBACiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnZiaV9kZXYsIFZGTF9UWVBFX1ZCSSwKIAkJCQkgIHZiaV9ucltidHYtPmMubnJdKSA8IDApCiAJCWdvdG8gZXJyOwotCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWRcbiIsCi0JICAgICAgIGJ0di0+Yy5uciwgYnR2LT52YmlfZGV2LT5udW0pOworCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsCisJICAgICAgIGJ0di0+Yy5uciwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShidHYtPnZiaV9kZXYpKTsKIAogCWlmICghYnR2LT5oYXNfcmFkaW8pCiAJCXJldHVybiAwOwpAQCAtNDI3Myw4ICs0MjY2LDggQEAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+cmFkaW9fZGV2LCBWRkxfVFlQRV9SQURJTywKIAkJCQkgIHJhZGlvX25yW2J0di0+Yy5ucl0pIDwgMCkKIAkJZ290byBlcnI7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSByYWRpbyVkXG4iLAotCSAgICAgICBidHYtPmMubnIsIGJ0di0+cmFkaW9fZGV2LT5udW0pOworCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsCisJICAgICAgIGJ0di0+Yy5uciwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShidHYtPnJhZGlvX2RldikpOwogCiAJLyogYWxsIGRvbmUgKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwppbmRleCBiZWRhMzYzLi42M2FhMzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCkBAIC00MCw3ICs0MCw3IEBACiBzdGF0aWMgaW50IGkyY19odzsKIHN0YXRpYyBpbnQgaTJjX3NjYW47CiBtb2R1bGVfcGFyYW0oaTJjX2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpMmNfaHcsImNvbmZpZ3VyZSBpMmMgZGVidWcgbGV2ZWwiKTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX2RlYnVnLCAiY29uZmlndXJlIGkyYyBkZWJ1ZyBsZXZlbCIpOwogbW9kdWxlX3BhcmFtKGkyY19odywgICAgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaTJjX2h3LCJmb3JjZSB1c2Ugb2YgaGFyZHdhcmUgaTJjIHN1cHBvcnQsICIKIAkJCSJpbnN0ZWFkIG9mIHNvZnR3YXJlIGJpdGJhbmciKTsKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQkgICBUaGF0J3Mgd2h5IHdlIHByb2JlIDB4MWEgKH4weDM0KSBmaXJzdC4gQ0IKIAkJKi8KIAkJY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcl9saXN0W10gPSB7Ci0JCQkweDFhLCAweDE4LCAweDRiLCAweDY0LCAweDMwLAorCQkJMHgxYSwgMHgxOCwgMHg0YiwgMHg2NCwgMHgzMCwgMHg3MSwKIAkJCUkyQ19DTElFTlRfRU5ECiAJCX07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKaW5kZXggODRhOTU3ZS4uMjc3YTA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCXNucHJpbnRmKGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpLCAicGNpLSVzL2lyMCIsCiAJCSBwY2lfbmFtZShidHYtPmMucGNpKSk7CiAKLQllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgaXJfdHlwZSwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKQEAgLTM4OSw3ICszODksNyBAQAogCWJ0dHZfaXJfc3RhcnQoYnR2LCBpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShidHYtPnJlbW90ZS0+ZGV2KTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihidHYtPnJlbW90ZS0+ZGV2LCBpcl9jb2Rlcyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKQEAgLTQwMyw4ICs0MDMsNiBAQAogCWJ0dHZfaXJfc3RvcChidHYpOwogCWJ0di0+cmVtb3RlID0gTlVMTDsKICBlcnJfb3V0X2ZyZWU6Ci0JaXJfaW5wdXRfZnJlZShpbnB1dF9kZXYpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUoaXIpOwogCXJldHVybiBlcnI7CiB9CkBAIC00MTUsOCArNDEzLDcgQEAKIAkJcmV0dXJuOwogCiAJYnR0dl9pcl9zdG9wKGJ0dik7Ci0JaXJfaW5wdXRfZnJlZShidHYtPnJlbW90ZS0+ZGV2KTsKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShidHYtPnJlbW90ZS0+ZGV2KTsKKwlpcl9pbnB1dF91bnJlZ2lzdGVyKGJ0di0+cmVtb3RlLT5kZXYpOwogCWtmcmVlKGJ0di0+cmVtb3RlKTsKIAlidHYtPnJlbW90ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYwppbmRleCA4NWNmMTc3Li5lMmNiZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKQEAgLTgwOSw4ICs4MDksOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJ2aWRlbyVkOiBDb2xvdXIgUXVpY2tDYW0gZm91bmQgb24gJXNcbiIsCi0JICAgICAgIHFjYW0tPnZkZXYubnVtLCBxY2FtLT5wcG9ydC0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbG91ciBRdWlja0NhbSBmb3VuZCBvbiAlc1xuIiwKKwkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmcWNhbS0+dmRldiksIHFjYW0tPnBwb3J0LT5uYW1lKTsKIAogCXFjYW1zW251bV9jYW1zKytdID0gcWNhbTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggMTAyMzBjYi4uN2JiOWMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0xNzIzLDcgKzE3MjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjYWZlX3Y0bF90ZW1wbGF0ZSA9IHsKIAkubmFtZSA9ICJjYWZlIiwKLQkubWlub3IgPSAtMSwgLyogR2V0IG9uZSBkeW5hbWljYWxseSAqLwogCS50dm5vcm1zID0gVjRMMl9TVERfTlRTQ19NLAogCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sICAvKiBtYWtlIG1wbGF5ZXIgaGFwcHkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCAyMzc3MzEzLi41NTFkZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC0yNDQsNzIgKzI0NSw2NyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcGlhX3Byb2Nfcm9vdD1OVUxMOwogCi1zdGF0aWMgaW50IGNwaWFfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBjcGlhX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JY2hhciAqb3V0ID0gcGFnZTsKLQlpbnQgbGVuLCB0bXA7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSBkYXRhOworCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gbS0+cHJpdmF0ZTsKKwlpbnQgdG1wOwogCWNoYXIgdG1wc3RyWzI5XTsKIAotCS8qIElNUE9SVEFOVDogVGhpcyBvdXRwdXQgTVVTVCBiZSBrZXB0IHVuZGVyIFBBR0VfU0laRQotCSAqICAgICAgICAgICAgb3Igd2UgbmVlZCB0byBnZXQgbW9yZSBzb3BoaXN0aWNhdGVkLiAqLwotCi0Jb3V0ICs9IHNwcmludGYob3V0LCAicmVhZC1vbmx5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiVjRMIERyaXZlciB2ZXJzaW9uOiAgICAgICAlZC4lZC4lZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJyZWFkLW9ubHlcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJWNEwgRHJpdmVyIHZlcnNpb246ICAgICAgICVkLiVkLiVkXG4iLAogCQkgICAgICAgQ1BJQV9NQUpfVkVSLCBDUElBX01JTl9WRVIsIENQSUFfUEFUQ0hfVkVSKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJDUElBIFZlcnNpb246ICAgICAgICAgICAgICVkLiUwMmQgKCVkLiVkKVxuIiwKKwlzZXFfcHJpbnRmKG0sICJDUElBIFZlcnNpb246ICAgICAgICAgICAgICVkLiUwMmQgKCVkLiVkKVxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uLAogCQkgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uLAogCQkgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi52Y1ZlcnNpb24sCiAJCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24pOwotCW91dCArPSBzcHJpbnRmKG91dCwgIkNQSUEgUG5QLUlEOiAgICAgICAgICAgICAgJTA0eDolMDR4OiUwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAiQ1BJQSBQblAtSUQ6ICAgICAgICAgICAgICAlMDR4OiUwNHg6JTA0eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnBucElELnZlbmRvciwgY2FtLT5wYXJhbXMucG5wSUQucHJvZHVjdCwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnBucElELmRldmljZVJldmlzaW9uKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJWUC1WZXJzaW9uOiAgICAgICAgICAgICAgICVkLiVkICUwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAiVlAtVmVyc2lvbjogICAgICAgICAgICAgICAlZC4lZCAlMDR4XG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMudnBWZXJzaW9uLnZwVmVyc2lvbiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnZwVmVyc2lvbi52cFJldmlzaW9uLAogCQkgICAgICAgY2FtLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCk7CiAKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJzeXN0ZW1fc3RhdGU6ICAgICAgICAgICAgICUjMDR4XG4iLAorCXNlcV9wcmludGYobSwgInN5c3RlbV9zdGF0ZTogICAgICAgICAgICAgJSMwNHhcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImdyYWJfc3RhdGU6ICAgICAgICAgICAgICAgJSMwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAiZ3JhYl9zdGF0ZTogICAgICAgICAgICAgICAlIzA0eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5ncmFiU3RhdGUpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInN0cmVhbV9zdGF0ZTogICAgICAgICAgICAgJSMwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAic3RyZWFtX3N0YXRlOiAgICAgICAgICAgICAlIzA0eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZmF0YWxfZXJyb3I6ICAgICAgICAgICAgICAlIzA0eFxuIiwKKwlzZXFfcHJpbnRmKG0sICJmYXRhbF9lcnJvcjogICAgICAgICAgICAgICUjMDR4XG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImNtZF9lcnJvcjogICAgICAgICAgICAgICAgJSMwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAiY21kX2Vycm9yOiAgICAgICAgICAgICAgICAlIzA0eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5jbWRFcnJvcik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZGVidWdfZmxhZ3M6ICAgICAgICAgICAgICAlIzA0eFxuIiwKKwlzZXFfcHJpbnRmKG0sICJkZWJ1Z19mbGFnczogICAgICAgICAgICAgICUjMDR4XG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLmRlYnVnRmxhZ3MpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInZwX3N0YXR1czogICAgICAgICAgICAgICAgJSMwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAidnBfc3RhdHVzOiAgICAgICAgICAgICAgICAlIzA0eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZXJyb3JfY29kZTogICAgICAgICAgICAgICAlIzA0eFxuIiwKKwlzZXFfcHJpbnRmKG0sICJlcnJvcl9jb2RlOiAgICAgICAgICAgICAgICUjMDR4XG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSk7CiAJLyogUVgzIHNwZWNpZmljIGVudHJpZXMgKi8KIAlpZiAoY2FtLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkgewotCQlvdXQgKz0gc3ByaW50ZihvdXQsICJidXR0b246ICAgICAgICAgICAgICAgICAgICU0ZFxuIiwKKwkJc2VxX3ByaW50ZihtLCAiYnV0dG9uOiAgICAgICAgICAgICAgICAgICAlNGRcbiIsCiAJCQkgICAgICAgY2FtLT5wYXJhbXMucXgzLmJ1dHRvbik7Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgImNyYWRsZWQ6ICAgICAgICAgICAgICAgICAgJTRkXG4iLAorCQlzZXFfcHJpbnRmKG0sICJjcmFkbGVkOiAgICAgICAgICAgICAgICAgICU0ZFxuIiwKIAkJCSAgICAgICBjYW0tPnBhcmFtcy5xeDMuY3JhZGxlZCk7CiAJfQotCW91dCArPSBzcHJpbnRmKG91dCwgInZpZGVvX3NpemU6ICAgICAgICAgICAgICAgJXNcbiIsCisJc2VxX3ByaW50ZihtLCAidmlkZW9fc2l6ZTogICAgICAgICAgICAgICAlc1xuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPT0gVklERU9TSVpFX0NJRiA/CiAJCSAgICAgICAiQ0lGICIgOiAiUUNJRiIpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInJvaTogICAgICAgICAgICAgICAgICAgICAgKCUzZCwgJTNkKSB0byAoJTNkLCAlM2QpXG4iLAorCXNlcV9wcmludGYobSwgInJvaTogICAgICAgICAgICAgICAgICAgICAgKCUzZCwgJTNkKSB0byAoJTNkLCAlM2QpXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0KjgsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5yb2kucm93U3RhcnQqNCwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnJvaS5jb2xFbmQqOCwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnJvaS5yb3dFbmQqNCk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiYWN0dWFsX2ZwczogICAgICAgICAgICAgICAlM2RcbiIsIGNhbS0+ZnBzKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJ0cmFuc2Zlcl9yYXRlOiAgICAgICAgICAgICU0ZGtCL3NcbiIsCisJc2VxX3ByaW50ZihtLCAiYWN0dWFsX2ZwczogICAgICAgICAgICAgICAlM2RcbiIsIGNhbS0+ZnBzKTsKKwlzZXFfcHJpbnRmKG0sICJ0cmFuc2Zlcl9yYXRlOiAgICAgICAgICAgICU0ZGtCL3NcbiIsCiAJCSAgICAgICBjYW0tPnRyYW5zZmVyX3JhdGUpOwogCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiXG5yZWFkLXdyaXRlXG4iKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgY3VycmVudCAgICAgICBtaW4iCisJc2VxX3ByaW50ZihtLCAiXG5yZWFkLXdyaXRlXG4iKTsKKwlzZXFfcHJpbnRmKG0sICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgY3VycmVudCAgICAgICBtaW4iCiAJCSAgICAgICAiICAgICAgIG1heCAgIGRlZmF1bHQgIGNvbW1lbnRcbiIpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImJyaWdodG5lc3M6ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJicmlnaHRuZXNzOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcywgMCwgMTAwLCA1MCk7CiAJaWYgKGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09IDEgJiYKIAkgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gMikKQEAgLTMxOCwyNiArMzE0LDI2IEBACiAJZWxzZQogCQl0bXAgPSA5NjsKIAotCW91dCArPSBzcHJpbnRmKG91dCwgImNvbnRyYXN0OiAgICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZCIKKwlzZXFfcHJpbnRmKG0sICJjb250cmFzdDogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGQiCiAJCSAgICAgICAiICBzdGVwcyBvZiA4XG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LCAwLCB0bXAsIDQ4KTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJzYXR1cmF0aW9uOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAic2F0dXJhdGlvbjogICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24sIDAsIDEwMCwgNTApOwogCXRtcCA9ICgyNTAwMCs1MDAwKmNhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSkvCiAJICAgICAgKDE8PGNhbS0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJzZW5zb3JfZnBzOiAgICAgICAgICAgICAlNGQuJTAzZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJzZW5zb3JfZnBzOiAgICAgICAgICAgICAlNGQuJTAzZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIHRtcC8xMDAwLCB0bXAlMTAwMCwgMywgMzAsIDE1KTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdHJlYW1fc3RhcnRfbGluZTogICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAic3RyZWFtX3N0YXJ0X2xpbmU6ICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgMipjYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUsIDAsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplID09IFZJREVPU0laRV9DSUYgPyAyODg6MTQ0LAogCQkgICAgICAgY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9PSBWSURFT1NJWkVfQ0lGID8gMjQwOjEyMCk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAic3ViX3NhbXBsZTogICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAorCXNlcV9wcmludGYobSwgInN1Yl9zYW1wbGU6ICAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUgPT0gU1VCU0FNUExFXzQyMCA/CiAJCSAgICAgICAiNDIwIiA6ICI0MjIiLCAiNDIwIiwgIjQyMiIsICI0MjIiKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJ5dXZfb3JkZXI6ICAgICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCisJc2VxX3ByaW50ZihtLCAieXV2X29yZGVyOiAgICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuZm9ybWF0Lnl1dk9yZGVyID09IFlVVk9SREVSX1lVWVYgPwogCQkgICAgICAgIllVWVYiIDogIlVZVlkiLCAiWVVZViIgLCAiVVlWWSIsICJZVVlWIik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZWNwX3RpbWluZzogICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAorCXNlcV9wcmludGYobSwgImVjcF90aW1pbmc6ICAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmVjcFRpbWluZyA/ICJzbG93IiA6ICJub3JtYWwiLCAic2xvdyIsCiAJCSAgICAgICAibm9ybWFsIiwgIm5vcm1hbCIpOwogCkBAIC0zNDYsMTMgKzM0MiwxMyBAQAogCX0gZWxzZSB7CiAJCXNwcmludGYodG1wc3RyLCAibWFudWFsIik7CiAJfQotCW91dCArPSBzcHJpbnRmKG91dCwgImNvbG9yX2JhbGFuY2VfbW9kZTogICAgICU4cyAgJThzICAlOHMiCisJc2VxX3ByaW50ZihtLCAiY29sb3JfYmFsYW5jZV9tb2RlOiAgICAgJThzICAlOHMgICU4cyIKIAkJICAgICAgICIgICU4c1xuIiwgIHRtcHN0ciwgIm1hbnVhbCIsICJhdXRvIiwgImF1dG8iKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJyZWRfZ2FpbjogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmVkX2dhaW46ICAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5yZWRHYWluLCAwLCAyMTIsIDMyKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJncmVlbl9nYWluOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAiZ3JlZW5fZ2FpbjogICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4sIDAsIDIxMiwgNik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiYmx1ZV9nYWluOiAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgImJsdWVfZ2FpbjogICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4sIDAsIDIxMiwgOTIpOwogCiAJaWYgKGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09IDEgJiYKQEAgLTM2MywxMCArMzU5LDEwIEBACiAJCXNwcmludGYodG1wc3RyLCAiJThkICAlOGQgICU4ZCIsIDEsIDgsIDIpOwogCiAJaWYgKGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID09IDApCi0JCW91dCArPSBzcHJpbnRmKG91dCwgIm1heF9nYWluOiAgICAgICAgICAgICAgICB1bmtub3duICAlMjhzIgorCQlzZXFfcHJpbnRmKG0sICJtYXhfZ2FpbjogICAgICAgICAgICAgICAgdW5rbm93biAgJTI4cyIKIAkJCSAgICAgICAiICBwb3dlcnMgb2YgMlxuIiwgdG1wc3RyKTsKIAllbHNlCi0JCW91dCArPSBzcHJpbnRmKG91dCwgIm1heF9nYWluOiAgICAgICAgICAgICAgICU4ZCAgJTI4cyIKKwkJc2VxX3ByaW50ZihtLCAibWF4X2dhaW46ICAgICAgICAgICAgICAgJThkICAlMjhzIgogCQkJICAgICAgICIgIDEsMiw0IG9yIDggXG4iLAogCQkJICAgICAgIDE8PChjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZS0xKSwgdG1wc3RyKTsKIApAQCAtMzgyLDEyICszNzgsMTIgQEAKIAkJc3ByaW50Zih0bXBzdHIsICJ1bmtub3duIik7CiAJCWJyZWFrOwogCX0KLQlvdXQgKz0gc3ByaW50ZihvdXQsICJleHBvc3VyZV9tb2RlOiAgICAgICAgICAlOHMgICU4cyAgJThzIgorCXNlcV9wcmludGYobSwgImV4cG9zdXJlX21vZGU6ICAgICAgICAgICU4cyAgJThzICAlOHMiCiAJCSAgICAgICAiICAlOHNcbiIsICB0bXBzdHIsICJtYW51YWwiLCAiYXV0byIsICJhdXRvIik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiY2VudHJlX3dlaWdodDogICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAorCXNlcV9wcmludGYobSwgImNlbnRyZV93ZWlnaHQ6ICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKIAkJICAgICAgICgyLWNhbS0+cGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCkgPyAib24iIDogIm9mZiIsCiAJCSAgICAgICAib2ZmIiwgIm9uIiwgIm9uIik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZ2FpbjogICAgICAgICAgICAgICAgICAgJThkICAlOGQgIG1heF9nYWluICAlOGQgIDEsMiw0LDggcG9zc2libGVcbiIsCisJc2VxX3ByaW50ZihtLCAiZ2FpbjogICAgICAgICAgICAgICAgICAgJThkICAlOGQgIG1heF9nYWluICAlOGQgIDEsMiw0LDggcG9zc2libGVcbiIsCiAJCSAgICAgICAxPDxjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluLCAxLCAxKTsKIAlpZiAoY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gMSAmJgogCSAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAyKQpAQCAtMzk2LDcgKzM5Miw3IEBACiAJZWxzZQogCQl0bXAgPSA1MTA7CiAKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJmaW5lX2V4cDogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAiZmluZV9leHA6ICAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCoyLCAwLCB0bXAsIDApOwogCWlmIChjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAxICYmCiAJICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID09IDIpCkBAIC00MDUsMTI3ICs0MDEsMTIyIEBACiAJZWxzZQogCQl0bXAgPSBNQVhfRVhQOwogCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiY29hcnNlX2V4cDogICAgICAgICAgICAgJThkICAlOGQgICU4ZCIKKwlzZXFfcHJpbnRmKG0sICJjb2Fyc2VfZXhwOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkIgogCQkgICAgICAgIiAgJThkXG4iLCBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbysKIAkJICAgICAgIDI1NipjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwgMCwgdG1wLCAxODUpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInJlZF9jb21wOiAgICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJyZWRfY29tcDogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBDT01QX1JFRCwgMjU1LCBDT01QX1JFRCk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZ3JlZW4xX2NvbXA6ICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgImdyZWVuMV9jb21wOiAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsIENPTVBfR1JFRU4xLCAyNTUsCiAJCSAgICAgICBDT01QX0dSRUVOMSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiZ3JlZW4yX2NvbXA6ICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgImdyZWVuMl9jb21wOiAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAsIENPTVBfR1JFRU4yLCAyNTUsCiAJCSAgICAgICBDT01QX0dSRUVOMik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiYmx1ZV9jb21wOiAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgImJsdWVfY29tcDogICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wLCBDT01QX0JMVUUsIDI1NSwgQ09NUF9CTFVFKTsKIAotCW91dCArPSBzcHJpbnRmKG91dCwgImFwY29yX2dhaW4xOiAgICAgICAgICAgICUjOHggICUjOHggICUjOHggICUjOHhcbiIsCisJc2VxX3ByaW50ZihtLCAiYXBjb3JfZ2FpbjE6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmFwY29yLmdhaW4xLCAwLCAweGZmLCAweDFjKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJhcGNvcl9nYWluMjogICAgICAgICAgICAlIzh4ICAlIzh4ICAlIzh4ICAlIzh4XG4iLAorCXNlcV9wcmludGYobSwgImFwY29yX2dhaW4yOiAgICAgICAgICAgICUjOHggICUjOHggICUjOHggICUjOHhcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMiwgMCwgMHhmZiwgMHgxYSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiYXBjb3JfZ2FpbjQ6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKKwlzZXFfcHJpbnRmKG0sICJhcGNvcl9nYWluNDogICAgICAgICAgICAlIzh4ICAlIzh4ICAlIzh4ICAlIzh4XG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuYXBjb3IuZ2FpbjQsIDAsIDB4ZmYsIDB4MmQpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImFwY29yX2dhaW44OiAgICAgICAgICAgICUjOHggICUjOHggICUjOHggICUjOHhcbiIsCisJc2VxX3ByaW50ZihtLCAiYXBjb3JfZ2Fpbjg6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmFwY29yLmdhaW44LCAwLCAweGZmLCAweDJhKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJ2bF9vZmZzZXRfZ2FpbjE6ICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAidmxfb2Zmc2V0X2dhaW4xOiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEsIDAsIDI1NSwgMjQpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInZsX29mZnNldF9nYWluMjogICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJ2bF9vZmZzZXRfZ2FpbjI6ICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluMiwgMCwgMjU1LCAyOCk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAidmxfb2Zmc2V0X2dhaW40OiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgInZsX29mZnNldF9nYWluNDogICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40LCAwLCAyNTUsIDMwKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJ2bF9vZmZzZXRfZ2Fpbjg6ICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAidmxfb2Zmc2V0X2dhaW44OiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjgsIDAsIDI1NSwgMzApOwotCW91dCArPSBzcHJpbnRmKG91dCwgImZsaWNrZXJfY29udHJvbDogICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKKwlzZXFfcHJpbnRmKG0sICJmbGlja2VyX2NvbnRyb2w6ICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA/ICJvbiIgOiAib2ZmIiwKIAkJICAgICAgICJvZmYiLCAib24iLCAib2ZmIik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAibWFpbnNfZnJlcXVlbmN5OiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkIgorCXNlcV9wcmludGYobSwgIm1haW5zX2ZyZXF1ZW5jeTogICAgICAgICU4ZCAgJThkICAlOGQgICU4ZCIKIAkJICAgICAgICIgb25seSA1MC82MFxuIiwKIAkJICAgICAgIGNhbS0+bWFpbnNGcmVxID8gNjAgOiA1MCwgNTAsIDYwLCA1MCk7CiAJaWYoY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlIDwgMCkKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiYWxsb3dhYmxlX292ZXJleHBvc3VyZTogJTRkYXV0byAgICAgIGF1dG8gICU4ZCAgICAgIGF1dG9cbiIsCisJCXNlcV9wcmludGYobSwgImFsbG93YWJsZV9vdmVyZXhwb3N1cmU6ICU0ZGF1dG8gICAgICBhdXRvICAlOGQgICAgICBhdXRvXG4iLAogCQkJICAgICAgIC1jYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUsCiAJCQkgICAgICAgMjU1KTsKIAllbHNlCi0JCW91dCArPSBzcHJpbnRmKG91dCwgImFsbG93YWJsZV9vdmVyZXhwb3N1cmU6ICU4ZCAgICAgIGF1dG8gICU4ZCAgICAgIGF1dG9cbiIsCisJCXNlcV9wcmludGYobSwgImFsbG93YWJsZV9vdmVyZXhwb3N1cmU6ICU4ZCAgICAgIGF1dG8gICU4ZCAgICAgIGF1dG9cbiIsCiAJCQkgICAgICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlLAogCQkJICAgICAgIDI1NSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiY29tcHJlc3Npb25fbW9kZTogICAgICAgIik7CisJc2VxX3ByaW50ZihtLCAiY29tcHJlc3Npb25fbW9kZTogICAgICAgIik7CiAJc3dpdGNoKGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUpIHsKIAljYXNlIENQSUFfQ09NUFJFU1NJT05fTk9ORToKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiJThzIiwgIm5vbmUiKTsKKwkJc2VxX3ByaW50ZihtLCAiJThzIiwgIm5vbmUiKTsKIAkJYnJlYWs7CiAJY2FzZSBDUElBX0NPTVBSRVNTSU9OX0FVVE86Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgIiU4cyIsICJhdXRvIik7CisJCXNlcV9wcmludGYobSwgIiU4cyIsICJhdXRvIik7CiAJCWJyZWFrOwogCWNhc2UgQ1BJQV9DT01QUkVTU0lPTl9NQU5VQUw6Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgIiU4cyIsICJtYW51YWwiKTsKKwkJc2VxX3ByaW50ZihtLCAiJThzIiwgIm1hbnVhbCIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlOHMiLCAidW5rbm93biIpOworCQlzZXFfcHJpbnRmKG0sICIlOHMiLCAidW5rbm93biIpOwogCQlicmVhazsKIAl9Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiICAgIG5vbmUsYXV0byxtYW51YWwgICAgICBhdXRvXG4iKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJkZWNpbWF0aW9uX2VuYWJsZTogICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCisJc2VxX3ByaW50ZihtLCAiICAgIG5vbmUsYXV0byxtYW51YWwgICAgICBhdXRvXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJkZWNpbWF0aW9uX2VuYWJsZTogICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5kZWNpbWF0aW9uID09CiAJCSAgICAgICBERUNJTUFUSU9OX0VOQUIgPyAib24iOiJvZmYiLCAib2ZmIiwgIm9uIiwKIAkJICAgICAgICJvZmYiKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJjb21wcmVzc2lvbl90YXJnZXQ6ICAgICU5cyAlOXMgJTlzICU5c1xuIiwKKwlzZXFfcHJpbnRmKG0sICJjb21wcmVzc2lvbl90YXJnZXQ6ICAgICU5cyAlOXMgJTlzICU5c1xuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nICA9PQogCQkgICAgICAgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfRlJBTUVSQVRFID8KIAkJICAgICAgICJmcmFtZXJhdGUiOiJxdWFsaXR5IiwKIAkJICAgICAgICJmcmFtZXJhdGUiLCAicXVhbGl0eSIsICJxdWFsaXR5Iik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAidGFyZ2V0X2ZyYW1lcmF0ZTogICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgInRhcmdldF9mcmFtZXJhdGU6ICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLCAxLCAzMCwgMTUpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInRhcmdldF9xdWFsaXR5OiAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJ0YXJnZXRfcXVhbGl0eTogICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC50YXJnZXRRLCAxLCA2NCwgNSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAieV90aHJlc2hvbGQ6ICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgInlfdGhyZXNob2xkOiAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkLCAwLCAzMSwgNik7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAidXZfdGhyZXNob2xkOiAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgInV2X3RocmVzaG9sZDogICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCwgMCwgMzEsIDYpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImh5c3RlcmVzaXM6ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJoeXN0ZXJlc2lzOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzLCAwLCAyNTUsIDMpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInRocmVzaG9sZF9tYXg6ICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJ0aHJlc2hvbGRfbWF4OiAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy50aHJlc2hNYXgsIDAsIDI1NSwgMTEpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInNtYWxsX3N0ZXA6ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJzbWFsbF9zdGVwOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5zbWFsbFN0ZXAsIDAsIDI1NSwgMSk7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAibGFyZ2Vfc3RlcDogICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAorCXNlcV9wcmludGYobSwgImxhcmdlX3N0ZXA6ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKIAkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCwgMCwgMjU1LCAzKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJkZWNpbWF0aW9uX2h5c3RlcmVzaXM6ICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAiZGVjaW1hdGlvbl9oeXN0ZXJlc2lzOiAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMsCiAJCSAgICAgICAwLCAyNTUsIDIpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImZyX2RpZmZfc3RlcF90aHJlc2g6ICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJmcl9kaWZmX3N0ZXBfdGhyZXNoOiAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAogCQkgICAgICAgMCwgMjU1LCA1KTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJxX2RpZmZfc3RlcF90aHJlc2g6ICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAicV9kaWZmX3N0ZXBfdGhyZXNoOiAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMucURpZmZTdGVwVGhyZXNoLAogCQkgICAgICAgMCwgMjU1LCAzKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJkZWNpbWF0aW9uX3RocmVzaF9tb2Q6ICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCisJc2VxX3ByaW50ZihtLCAiZGVjaW1hdGlvbl90aHJlc2hfbW9kOiAgJThkICAlOGQgICU4ZCAgJThkXG4iLAogCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCwKIAkJICAgICAgIDAsIDI1NSwgMik7CiAJLyogUVgzIHNwZWNpZmljIGVudHJpZXMgKi8KIAlpZiAoY2FtLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkgewotCQlvdXQgKz0gc3ByaW50ZihvdXQsICJ0b3BsaWdodDogICAgICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCisJCXNlcV9wcmludGYobSwgInRvcGxpZ2h0OiAgICAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKIAkJCSAgICAgICBjYW0tPnBhcmFtcy5xeDMudG9wbGlnaHQgPyAib24iIDogIm9mZiIsCiAJCQkgICAgICAgIm9mZiIsICJvbiIsICJvZmYiKTsKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiYm90dG9tbGlnaHQ6ICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAorCQlzZXFfcHJpbnRmKG0sICJib3R0b21saWdodDogICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCiAJCQkgICAgICAgY2FtLT5wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID8gIm9uIiA6ICJvZmYiLAogCQkJICAgICAgICJvZmYiLCAib24iLCAib2ZmIik7CiAJfQogCi0JbGVuID0gb3V0IC0gcGFnZTsKLQlsZW4gLT0gb2ZmOwotCWlmIChsZW4gPCBjb3VudCkgewotCQkqZW9mID0gMTsKLQkJaWYgKGxlbiA8PSAwKSByZXR1cm4gMDsKLQl9IGVsc2UKLQkJbGVuID0gY291bnQ7Ci0KLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY3BpYV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNwaWFfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KIAotc3RhdGljIGludCBtYXRjaChjaGFyICpjaGVja3N0ciwgY2hhciAqKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyAqY291bnQsCitzdGF0aWMgaW50IG1hdGNoKGNoYXIgKmNoZWNrc3RyLCBjaGFyICoqYnVmZmVyLCBzaXplX3QgKmNvdW50LAogCQkgaW50ICpmaW5kX2NvbG9uLCBpbnQgKmVycikKIHsKIAlpbnQgcmV0LCBjb2xvbl9mb3VuZCA9IDE7CkBAIC01NTEsNyArNTQyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdmFsdWUoY2hhciAqKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyAqY291bnQsIGludCAqZXJyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHZhbHVlKGNoYXIgKipidWZmZXIsIHNpemVfdCAqY291bnQsIGludCAqZXJyKQogewogCWNoYXIgKnA7CiAJdW5zaWduZWQgbG9uZyBpbnQgcmV0OwpAQCAtNTY1LDEwICs1NTYsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNwaWFfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdCBjcGlhX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IGRhdGE7CisJc3RydWN0IGNhbV9kYXRhICpjYW0gPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJc3RydWN0IGNhbV9wYXJhbXMgbmV3X3BhcmFtczsKIAljaGFyICpwYWdlLCAqYnVmZmVyOwogCWludCByZXR2YWwsIGZpbmRfY29sb247CkBAIC01ODIsNyArNTczLDcgQEAKIAkgKiBmcm9tIHRoZSBjb214IGRyaXZlcgogCSAqLwogCWlmIChjb3VudCA+IFBBR0VfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgImNvdW50IGlzICVsdSA+ICVkISEhXG4iLCBjb3VudCwgKGludClQQUdFX1NJWkUpOworCQlwcmludGsoS0VSTl9FUlIgImNvdW50IGlzICV6dSA+ICVkISEhXG4iLCBjb3VudCwgKGludClQQUdFX1NJWkUpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKQEAgLTEzNDAsMjMgKzEzMzEsMjggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjcGlhX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY3BpYV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gY3BpYV9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIHZvaWQgY3JlYXRlX3Byb2NfY3BpYV9jYW0oc3RydWN0IGNhbV9kYXRhICpjYW0pCiB7Ci0JY2hhciBuYW1lWzUgKyAxICsgMTAgKyAxXTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKIAogCWlmICghY3BpYV9wcm9jX3Jvb3QgfHwgIWNhbSkKIAkJcmV0dXJuOwogCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAidmlkZW8lZCIsIGNhbS0+dmRldi5udW0pOwotCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsIGNwaWFfcHJvY19yb290KTsKKwllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmNhbS0+dmRldiksCisJCQkgICAgICAgU19JUlVHT3xTX0lXVVNSLCBjcGlhX3Byb2Nfcm9vdCwKKwkJCSAgICAgICAmY3BpYV9wcm9jX2ZvcHMsIGNhbSk7CiAJaWYgKCFlbnQpCiAJCXJldHVybjsKIAotCWVudC0+ZGF0YSA9IGNhbTsKLQllbnQtPnJlYWRfcHJvYyA9IGNwaWFfcmVhZF9wcm9jOwotCWVudC0+d3JpdGVfcHJvYyA9IGNwaWFfd3JpdGVfcHJvYzsKIAkvKgogCSAgIHNpemUgb2YgdGhlIHByb2MgZW50cnkgaXMgMzczNiBieXRlcyBmb3IgdGhlIHN0YW5kYXJkIHdlYmNhbTsKIAkgICB0aGUgZXh0cmEgZmVhdHVyZXMgb2YgdGhlIFFYMyBtaWNyb3Njb3BlIGFkZCAxODkgYnl0ZXMuCkBAIC0xMzY4LDEzICsxMzY0LDEwIEBACiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcHJvY19jcGlhX2NhbShzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKIHsKLQljaGFyIG5hbWVbNSArIDEgKyAxMCArIDFdOwotCiAJaWYgKCFjYW0gfHwgIWNhbS0+cHJvY19lbnRyeSkKIAkJcmV0dXJuOwogCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAidmlkZW8lZCIsIGNhbS0+dmRldi5udW0pOwotCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIGNwaWFfcHJvY19yb290KTsKKwlyZW1vdmVfcHJvY19lbnRyeSh2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZjYW0tPnZkZXYpLCBjcGlhX3Byb2Nfcm9vdCk7CiAJY2FtLT5wcm9jX2VudHJ5ID0gTlVMTDsKIH0KIApAQCAtMzk5OSw3ICszOTkyLDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCURCRygiZGVzdHJveWluZyAvcHJvYy9jcGlhL3ZpZGVvJWRcbiIsIGNhbS0+dmRldi5udW0pOworCURCRygiZGVzdHJveWluZyAvcHJvYy9jcGlhLyVzXG4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZjYW0tPnZkZXYpKTsKIAlkZXN0cm95X3Byb2NfY3BpYV9jYW0oY2FtKTsKICNlbmRpZgogCWlmICghY2FtLT5vcGVuX2NvdW50KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwppbmRleCAwYjRhOGYzLi42ZjkxNDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKQEAgLTM4LDE3ICszOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKICNpbmNsdWRlICJjcGlhMi5oIgogI2luY2x1ZGUgImNwaWEyZGV2LmgiCiAKLQotLy8jZGVmaW5lIF9DUElBMl9ERUJVR18KLQotI2RlZmluZSBNQUtFX1NUUklOR18xKHgpCSN4Ci0jZGVmaW5lIE1BS0VfU1RSSU5HKHgpCU1BS0VfU1RSSU5HXzEoeCkKLQogc3RhdGljIGludCB2aWRlb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwidmlkZW8gZGV2aWNlIHRvIHJlZ2lzdGVyICgwPS9kZXYvdmlkZW8wLCBldGMpIik7CkBAIC02MCwyNiArNTUsMjYgQEAKIHN0YXRpYyBpbnQgbnVtX2J1ZmZlcnMgPSAzOwogbW9kdWxlX3BhcmFtKG51bV9idWZmZXJzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhudW1fYnVmZmVycywgIk51bWJlciBvZiBmcmFtZSBidWZmZXJzICgxLSIKLQkJIE1BS0VfU1RSSU5HKFZJREVPX01BWF9GUkFNRSkgIiwgZGVmYXVsdCAzKSIpOworCQkgX19zdHJpbmdpZnkoVklERU9fTUFYX0ZSQU1FKSAiLCBkZWZhdWx0IDMpIik7CiAKIHN0YXRpYyBpbnQgYWx0ZXJuYXRlID0gREVGQVVMVF9BTFQ7CiBtb2R1bGVfcGFyYW0oYWx0ZXJuYXRlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhhbHRlcm5hdGUsICJVU0IgQWx0ZXJuYXRlICgiIE1BS0VfU1RSSU5HKFVTQklGX0lTT18xKSAiLSIKLQkJIE1BS0VfU1RSSU5HKFVTQklGX0lTT182KSAiLCBkZWZhdWx0ICIKLQkJIE1BS0VfU1RSSU5HKERFRkFVTFRfQUxUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhhbHRlcm5hdGUsICJVU0IgQWx0ZXJuYXRlICgiIF9fc3RyaW5naWZ5KFVTQklGX0lTT18xKSAiLSIKKwkJIF9fc3RyaW5naWZ5KFVTQklGX0lTT182KSAiLCBkZWZhdWx0ICIKKwkJIF9fc3RyaW5naWZ5KERFRkFVTFRfQUxUKSAiKSIpOwogCiBzdGF0aWMgaW50IGZsaWNrZXJfZnJlcSA9IDYwOwogbW9kdWxlX3BhcmFtKGZsaWNrZXJfZnJlcSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZmxpY2tlcl9mcmVxLCAiRmxpY2tlciBmcmVxdWVuY3kgKCIgTUFLRV9TVFJJTkcoNTApICJvciIKLQkJIE1BS0VfU1RSSU5HKDYwKSAiLCBkZWZhdWx0ICIKLQkJIE1BS0VfU1RSSU5HKDYwKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhmbGlja2VyX2ZyZXEsICJGbGlja2VyIGZyZXF1ZW5jeSAoIiBfX3N0cmluZ2lmeSg1MCkgIm9yIgorCQkgX19zdHJpbmdpZnkoNjApICIsIGRlZmF1bHQgIgorCQkgX19zdHJpbmdpZnkoNjApICIpIik7CiAKIHN0YXRpYyBpbnQgZmxpY2tlcl9tb2RlID0gTkVWRVJfRkxJQ0tFUjsKIG1vZHVsZV9wYXJhbShmbGlja2VyX21vZGUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZsaWNrZXJfbW9kZSwKLQkJICJGbGlja2VyIHN1cHJlc3Npb24gKCIgTUFLRV9TVFJJTkcoTkVWRVJfRkxJQ0tFUikgIm9yIgotCQkgTUFLRV9TVFJJTkcoQU5USV9GTElDS0VSX09OKSAiLCBkZWZhdWx0ICIKLQkJIE1BS0VfU1RSSU5HKE5FVkVSX0ZMSUNLRVIpICIpIik7CisJCSAiRmxpY2tlciBzdXByZXNzaW9uICgiIF9fc3RyaW5naWZ5KE5FVkVSX0ZMSUNLRVIpICJvciIKKwkJIF9fc3RyaW5naWZ5KEFOVElfRkxJQ0tFUl9PTikgIiwgZGVmYXVsdCAiCisJCSBfX3N0cmluZ2lmeShORVZFUl9GTElDS0VSKSAiKSIpOwogCiBNT0RVTEVfQVVUSE9SKCJTdGV2ZSBNaWxsZXIgKFNUTWljcm9lbGVjdHJvbmljcykgPHN0ZXZlLm1pbGxlckBzdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlY0TC1kcml2ZXIgZm9yIFNUTWljcm9lbGVjdHJvbmljcyBDUGlBMiBiYXNlZCBjYW1lcmFzIik7CkBAIC0xOTI2LDcgKzE5MjEsNiBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3BpYTJfdGVtcGxhdGUgPSB7CiAJLyogSSBjb3VsZCBub3QgZmluZCBhbnkgcGxhY2UgZm9yIHRoZSBvbGQgLmluaXRpYWxpemUgaW5pdGlhbGl6ZXI/PyAqLwogCS5uYW1lPQkJIkNQaUEyIENhbWVyYSIsCi0JLm1pbm9yPQkJLTEsCiAJLmZvcHM9CQkmZm9wc190ZW1wbGF0ZSwKIAkucmVsZWFzZT0JdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwpAQCAtMTk2Nyw5ICsxOTYxLDkgQEAKIAlpZiAoIWNhbS0+b3Blbl9jb3VudCkgewogCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnZkZXYpOwogCX0gZWxzZSB7Ci0JCUxPRygiL2Rldi92aWRlbyVkIHJlbW92ZWQgd2hpbGUgb3BlbiwgIgotCQkgICAgImRlZmVycmluZyB2aWRlb191bnJlZ2lzdGVyX2RldmljZVxuIiwKLQkJICAgIGNhbS0+dmRldi0+bnVtKTsKKwkJTE9HKCIlcyByZW1vdmVkIHdoaWxlIG9wZW4sIGRlZmVycmluZyAiCisJCSAgICAidmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VcbiIsCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+dmRldikpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCmluZGV4IDRlMjc4ZGIuLmMwODg1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKQEAgLTc1OCw4ICs3NTgsOCBAQAogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oY3gpKSB7Ci0JCUNYMThfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBtaW5vciAlZFxuIiwKLQkJCSB2aWRlb19kZXYtPm1pbm9yKTsKKwkJQ1gxOF9FUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIG9uICVzXG4iLAorCQkJIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmlkZW9fZGV2KSk7CiAJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggYzM5ODY1MS4uOTg3YTkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtMjE5LDYgKzIxOSw3IEBACiB7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW3R5cGVdOwogCWludCB2ZmxfdHlwZSA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0udmZsX3R5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgbnVtLCByZXQ7CiAKIAkvKiBUT0RPOiBTaG91bGRuJ3QgdGhpcyBiZSBhIFZGTF9UWVBFX1RSQU5TUE9SVCBvciBzb21ldGhpbmc/CkBAIC0yNTgsMzEgKzI1OSwzMCBAQAogCQlzLT52aWRlb19kZXYgPSBOVUxMOwogCQlyZXR1cm4gcmV0OwogCX0KLQludW0gPSBzLT52aWRlb19kZXYtPm51bTsKKworCW5hbWUgPSB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHMtPnZpZGVvX2Rldik7CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgotCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgZm9yICVzICIKLQkJCSAgIiglZCB4ICVkLiUwMmQga0IpXG4iLAotCQkJICBudW0sIHMtPm5hbWUsIGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSwKKwkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSAlcyBmb3IgJXMgKCVkIHggJWQuJTAyZCBrQilcbiIsCisJCQkgIG5hbWUsIHMtPm5hbWUsIGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSwKIAkJCSAgY3gtPnN0cmVhbV9idWZfc2l6ZVt0eXBlXSAvIDEwMjQsCiAJCQkgIChjeC0+c3RyZWFtX2J1Zl9zaXplW3R5cGVdICogMTAwIC8gMTAyNCkgJSAxMDApOwogCQlicmVhazsKIAogCWNhc2UgVkZMX1RZUEVfUkFESU86Ci0JCUNYMThfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgcmFkaW8lZCBmb3IgJXNcbiIsCi0JCQludW0sIHMtPm5hbWUpOworCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlICVzIGZvciAlc1xuIiwgbmFtZSwgcy0+bmFtZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBWRkxfVFlQRV9WQkk6CiAJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0pCi0JCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIGZvciAlcyAiCisJCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlICVzIGZvciAlcyAiCiAJCQkJICAiKCVkIHggJWQgYnl0ZXMpXG4iLAotCQkJCSAgbnVtLCBzLT5uYW1lLCBjeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0sCisJCQkJICBuYW1lLCBzLT5uYW1lLCBjeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0sCiAJCQkJICBjeC0+c3RyZWFtX2J1Zl9zaXplW3R5cGVdKTsKIAkJZWxzZQotCQkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2YmklZCBmb3IgJXNcbiIsCi0JCQkJbnVtLCBzLT5uYW1lKTsKKwkJCUNYMThfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgJXMgZm9yICVzXG4iLAorCQkJCW5hbWUsIHMtPm5hbWUpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCmluZGV4IDMxOWM0NTkuLmE1NDkwODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYwpAQCAtNjgsMTkgKzY4LDE5IEBACiAJCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCQkudm11eCA9IENYMjMxWFhfVklOXzNfMSwKIAkJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9WSURFTywKLQkJCQkuZ3BpbyA9IDAsCisJCQkJLmdwaW8gPSBOVUxMLAogCQkJfSwgewogCQkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkJLnZtdXggPSBDWDIzMVhYX1ZJTl8yXzEsCiAJCQkJLmFtdXggPSBDWDIzMVhYX0FNVVhfTElORV9JTiwKLQkJCQkuZ3BpbyA9IDAsCisJCQkJLmdwaW8gPSBOVUxMLAogCQkJfSwgewogCQkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX1NWSURFTywKIAkJCQkudm11eCA9IENYMjMxWFhfVklOXzFfMSB8CiAJCQkJCShDWDIzMVhYX1ZJTl8xXzIgPDwgOCkgfAogCQkJCQlDWDI1ODQwX1NWSURFT19PTiwKIAkJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9MSU5FX0lOLAotCQkJCS5ncGlvID0gMCwKKwkJCQkuZ3BpbyA9IE5VTEwsCiAJCQl9CiAJCX0sCiAJfSwKQEAgLTEwNywxOSArMTA3LDE5IEBACiAJCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCQkudm11eCA9IENYMjMxWFhfVklOXzNfMSwKIAkJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9WSURFTywKLQkJCQkuZ3BpbyA9IDAsCisJCQkJLmdwaW8gPSBOVUxMLAogCQkJfSwgewogCQkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkJLnZtdXggPSBDWDIzMVhYX1ZJTl8yXzEsCiAJCQkJLmFtdXggPSBDWDIzMVhYX0FNVVhfTElORV9JTiwKLQkJCQkuZ3BpbyA9IDAsCisJCQkJLmdwaW8gPSBOVUxMLAogCQkJfSwgewogCQkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX1NWSURFTywKIAkJCQkudm11eCA9IENYMjMxWFhfVklOXzFfMSB8CiAJCQkJCShDWDIzMVhYX1ZJTl8xXzIgPDwgOCkgfAogCQkJCQlDWDI1ODQwX1NWSURFT19PTiwKIAkJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9MSU5FX0lOLAotCQkJCS5ncGlvID0gMCwKKwkJCQkuZ3BpbyA9IE5VTEwsCiAJCQl9CiAJCX0sCiAJfSwKQEAgLTE0NywxOSArMTQ3LDE5IEBACiAJCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCQkudm11eCA9IENYMjMxWFhfVklOXzNfMSwKIAkJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9WSURFTywKLQkJCQkuZ3BpbyA9IDAsCisJCQkJLmdwaW8gPSBOVUxMLAogCQkJfSwgewogCQkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkJLnZtdXggPSBDWDIzMVhYX1ZJTl8yXzEsCiAJCQkJLmFtdXggPSBDWDIzMVhYX0FNVVhfTElORV9JTiwKLQkJCQkuZ3BpbyA9IDAsCisJCQkJLmdwaW8gPSBOVUxMLAogCQkJfSwgewogCQkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX1NWSURFTywKIAkJCQkudm11eCA9IENYMjMxWFhfVklOXzFfMSB8CiAJCQkJCShDWDIzMVhYX1ZJTl8xXzIgPDwgOCkgfAogCQkJCQlDWDI1ODQwX1NWSURFT19PTiwKIAkJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9MSU5FX0lOLAotCQkJCS5ncGlvID0gMCwKKwkJCQkuZ3BpbyA9IE5VTEwsCiAJCQl9CiAJCX0sCiAJfSwKQEAgLTg1Niw4ICs4NTYsOSBAQAogCiAJaWYgKGRldi0+dXNlcnMpIHsKIAkJY3gyMzF4eF93YXJuCi0JCSAgICAoImRldmljZSAvZGV2L3ZpZGVvJWQgaXMgb3BlbiEgRGVyZWdpc3RyYXRpb24gYW5kIG1lbW9yeSAiCi0JCSAgICAgImRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQgb24gY2xvc2UuXG4iLCBkZXYtPnZkZXYtPm51bSk7CisJCSAgICAoImRldmljZSAlcyBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKKwkJICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS5cbiIsCisJCSAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZkZXYpKTsKIAogCQlkZXYtPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQljeDIzMXh4X3VuaW5pdF9pc29jKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb3JlLmMKaW5kZXggMGQzMzNlNi4uNGE2MGRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNvcmUuYwpAQCAtNjYsMzIgKzY2LDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoY3gyMzF4eF9kZXZsaXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgoY3gyMzF4eF9kZXZsaXN0X211dGV4KTsKIAotc3RydWN0IGN4MjMxeHggKmN4MjMxeHhfZ2V0X2RldmljZShpbnQgbWlub3IsCi0JCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlICpmaF90eXBlLCBpbnQgKmhhc19yYWRpbykKLXsKLQlzdHJ1Y3QgY3gyMzF4eCAqaCwgKmRldiA9IE5VTEw7Ci0KLQkqZmhfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkqaGFzX3JhZGlvID0gMDsKLQotCW11dGV4X2xvY2soJmN4MjMxeHhfZGV2bGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmY3gyMzF4eF9kZXZsaXN0LCBkZXZsaXN0KSB7Ci0JCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikKLQkJCWRldiA9IGg7Ci0JCWlmIChoLT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ID0gaDsKLQkJCSpmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQkJfQotCQlpZiAoaC0+cmFkaW9fZGV2ICYmIGgtPnJhZGlvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQkqaGFzX3JhZGlvID0gMTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmN4MjMxeHhfZGV2bGlzdF9tdXRleCk7Ci0KLQlyZXR1cm4gZGV2OwotfQotCiAvKgogICogY3gyMzF4eF9yZWFsZWFzZV9yZXNvdXJjZXMoKQogICogdW5yZWdpc3RlcnMgdGhlIHY0bDIsaTJjIGFuZCB1c2IgZGV2aWNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMKaW5kZXggY2QxMzVmMC4uMTU4MjZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCkBAIC0xOTcsOCArMTk3LDcgQEAKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgaXItPnBoeXMsIHNpemVvZihpci0+cGh5cykpOwogCXN0cmxjYXQoaXItPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKGlyLT5waHlzKSk7CiAKLQllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgSVJfVFlQRV9PVEhFUiwKLQkJCSAgICBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgSVJfVFlQRV9PVEhFUik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX291dF9mcmVlOwogCkBAIC0yMTcsNyArMjE2LDcgQEAKIAljeDIzMXh4X2lyX3N0YXJ0KGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApAQCAtMjI2LDggKzIyNSw2IEBACiAJY3gyMzF4eF9pcl9zdG9wKGlyKTsKIAlkZXYtPmlyID0gTlVMTDsKIGVycl9vdXRfZnJlZToKLQlpcl9pbnB1dF9mcmVlKGlucHV0X2Rldik7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShpcik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0MSw4ICsyMzgsNyBAQAogCQlyZXR1cm4gMDsKIAogCWN4MjMxeHhfaXJfc3RvcChpcik7Ci0JaXJfaW5wdXRfZnJlZShpci0+aW5wdXQpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJaXJfaW5wdXRfdW5yZWdpc3Rlcihpci0+aW5wdXQpOwogCWtmcmVlKGlyKTsKIAogCS8qIGRvbmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jCmluZGV4IGQwOTVhYTAuLmQ0ZjU0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtdmlkZW8uYwpAQCAtMTkxNiwyMCArMTkxNiwyOSBAQAogICovCiBzdGF0aWMgaW50IGN4MjMxeHhfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlscCktPm1pbm9yOwogCWludCBlcnJDb2RlID0gMCwgcmFkaW8gPSAwOwotCXN0cnVjdCBjeDIzMXh4ICpkZXYgPSBOVUxMOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCXN0cnVjdCBjeDIzMXh4ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCXN0cnVjdCBjeDIzMXh4X2ZoICpmaDsKIAllbnVtIHY0bDJfYnVmX3R5cGUgZmhfdHlwZSA9IDA7CiAKLQlkZXYgPSBjeDIzMXh4X2dldF9kZXZpY2UobWlub3IsICZmaF90eXBlLCAmcmFkaW8pOwotCWlmIChOVUxMID09IGRldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3dpdGNoICh2ZGV2LT52ZmxfdHlwZSkgeworCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKKwkJZmhfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9WQkk6CisJCWZoX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworCQlicmVhazsKKwljYXNlIFZGTF9UWVBFX1JBRElPOgorCQlyYWRpbyA9IDE7CisJCWJyZWFrOworCX0KIAogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQljeDIzMXh4X3ZpZGVvZGJnKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsCi0JCQkgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1tmaF90eXBlXSwgZGV2LT51c2Vycyk7CisJY3gyMzF4eF92aWRlb2RiZygib3BlbiBkZXY9JXMgdHlwZT0lcyB1c2Vycz0lZFxuIiwKKwkJCSB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLCB2NGwyX3R5cGVfbmFtZXNbZmhfdHlwZV0sCisJCQkgZGV2LT51c2Vycyk7CiAKICNpZiAwCiAJZXJyQ29kZSA9IGN4MjMxeHhfc2V0X21vZGUoZGV2LCBDWDIzMVhYX0FOQUxPR19NT0RFKTsKQEAgLTIwMjAsMjUgKzIwMjksMjUgQEAKIAkvKkZJWE1FOiBJMkMgSVIgc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZCAqLwogCiAJaWYgKGRldi0+cmFkaW9fZGV2KSB7Ci0JCWlmICgtMSAhPSBkZXYtPnJhZGlvX2Rldi0+bWlub3IpCisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+cmFkaW9fZGV2KSkKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+cmFkaW9fZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT5yYWRpb19kZXYpOwogCQlkZXYtPnJhZGlvX2RldiA9IE5VTEw7CiAJfQogCWlmIChkZXYtPnZiaV9kZXYpIHsKLQkJY3gyMzF4eF9pbmZvKCJWNEwyIGRldmljZSAvZGV2L3ZiaSVkIGRlcmVnaXN0ZXJlZFxuIiwKLQkJCSAgICAgZGV2LT52YmlfZGV2LT5udW0pOwotCQlpZiAoLTEgIT0gZGV2LT52YmlfZGV2LT5taW5vcikKKwkJY3gyMzF4eF9pbmZvKCJWNEwyIGRldmljZSAlcyBkZXJlZ2lzdGVyZWRcbiIsCisJCQkgICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52YmlfZGV2KSk7CisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+dmJpX2RldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZiaV9kZXYpOwogCQlkZXYtPnZiaV9kZXYgPSBOVUxMOwogCX0KIAlpZiAoZGV2LT52ZGV2KSB7Ci0JCWN4MjMxeHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZFxuIiwKLQkJCSAgICAgZGV2LT52ZGV2LT5udW0pOwotCQlpZiAoLTEgIT0gZGV2LT52ZGV2LT5taW5vcikKKwkJY3gyMzF4eF9pbmZvKCJWNEwyIGRldmljZSAlcyBkZXJlZ2lzdGVyZWRcbiIsCisJCQkgICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52ZGV2KSk7CisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+dmRldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOwpAQCAtMjI2OCw3ICsyMjc3LDYgQEAKIAkuZm9wcyAgICAgICAgID0gJmN4MjMxeHhfdjRsX2ZvcHMsCiAJLnJlbGVhc2UgICAgICA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAogCS5pb2N0bF9vcHMgICAgPSAmdmlkZW9faW9jdGxfb3BzLAotCS5taW5vciAgICAgICAgPSAtMSwKIAkudHZub3JtcyAgICAgID0gVjRMMl9TVERfQUxMLAogCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9QQUwsCiB9OwpAQCAtMjMwMyw3ICsyMzExLDYgQEAKIAkubmFtZSAgICAgID0gImN4MjMxeHgtcmFkaW8iLAogCS5mb3BzICAgICAgPSAmcmFkaW9fZm9wcywKIAkuaW9jdGxfb3BzID0gJnJhZGlvX2lvY3RsX29wcywKLQkubWlub3IgICAgID0gLTEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogdXNiIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMzE5LDEzICsyMzI2LDEzIEBACiAJCXJldHVybiBOVUxMOwogCiAJKnZmZCA9ICp0ZW1wbGF0ZTsKLQl2ZmQtPm1pbm9yID0gLTE7CiAJdmZkLT52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OwogCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXZmZC0+ZGVidWcgPSB2aWRlb19kZWJ1ZzsKIAogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAlcyIsIGRldi0+bmFtZSwgdHlwZV9uYW1lKTsKIAorCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgZGV2KTsKIAlyZXR1cm4gdmZkOwogfQogCkBAIC0yMzc0LDggKzIzODEsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWN4MjMxeHhfaW5mbygiJXMvMDogcmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZCBbdjRsMl1cbiIsCi0JCSAgICAgZGV2LT5uYW1lLCBkZXYtPnZkZXYtPm51bSk7CisJY3gyMzF4eF9pbmZvKCIlcy8wOiByZWdpc3RlcmVkIGRldmljZSAlcyBbdjRsMl1cbiIsCisJCSAgICAgZGV2LT5uYW1lLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmRldikpOwogCiAJLyogSW5pdGlhbGl6ZSBWQkkgdGVtcGxhdGUgKi8KIAltZW1jcHkoJmN4MjMxeHhfdmJpX3RlbXBsYXRlLCAmY3gyMzF4eF92aWRlb190ZW1wbGF0ZSwKQEAgLTIzOTMsOCArMjQwMCw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JY3gyMzF4eF9pbmZvKCIlcy8wOiByZWdpc3RlcmVkIGRldmljZSB2YmklZFxuIiwKLQkJICAgICBkZXYtPm5hbWUsIGRldi0+dmJpX2Rldi0+bnVtKTsKKwljeDIzMXh4X2luZm8oIiVzLzA6IHJlZ2lzdGVyZWQgZGV2aWNlICVzXG4iLAorCQkgICAgIGRldi0+bmFtZSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZiaV9kZXYpKTsKIAogCWlmIChjeDIzMXh4X2JvYXJkc1tkZXYtPm1vZGVsXS5yYWRpby50eXBlID09IENYMjMxWFhfUkFESU8pIHsKIAkJZGV2LT5yYWRpb19kZXYgPSBjeDIzMXh4X3ZkZXZfaW5pdChkZXYsICZjeDIzMXh4X3JhZGlvX3RlbXBsYXRlLApAQCAtMjQwOSwxMiArMjQxNiwxMyBAQAogCQkJY3gyMzF4eF9lcnJkZXYoImNhbid0IHJlZ2lzdGVyIHJhZGlvIGRldmljZVxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWN4MjMxeHhfaW5mbygiUmVnaXN0ZXJlZCByYWRpbyBkZXZpY2UgYXMgL2Rldi9yYWRpbyVkXG4iLAotCQkJICAgICBkZXYtPnJhZGlvX2Rldi0+bnVtKTsKKwkJY3gyMzF4eF9pbmZvKCJSZWdpc3RlcmVkIHJhZGlvIGRldmljZSBhcyAlc1xuIiwKKwkJCSAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnJhZGlvX2RldikpOwogCX0KIAotCWN4MjMxeHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQgYW5kIC9kZXYvdmJpJWRcbiIsCi0JCSAgICAgZGV2LT52ZGV2LT5udW0sIGRldi0+dmJpX2Rldi0+bnVtKTsKKwljeDIzMXh4X2luZm8oIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgJXMgYW5kICVzXG4iLAorCQkgICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52ZGV2KSwKKwkJICAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmJpX2RldikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHguaAppbmRleCA2NGUyZGRkLi4xN2Q0ZDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LmgKQEAgLTY4OSw4ICs2ODksNiBAQAogaW50IGN4MjMxeHhfcmVnaXN0ZXJfYW5hbG9nX2RldmljZXMoc3RydWN0IGN4MjMxeHggKmRldik7CiB2b2lkIGN4MjMxeHhfcmVtb3ZlX2Zyb21fZGV2bGlzdChzdHJ1Y3QgY3gyMzF4eCAqZGV2KTsKIHZvaWQgY3gyMzF4eF9hZGRfaW50b19kZXZsaXN0KHN0cnVjdCBjeDIzMXh4ICpkZXYpOwotc3RydWN0IGN4MjMxeHggKmN4MjMxeHhfZ2V0X2RldmljZShpbnQgbWlub3IsCi0JCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlICpmaF90eXBlLCBpbnQgKmhhc19yYWRpbyk7CiB2b2lkIGN4MjMxeHhfaW5pdF9leHRlbnNpb24oc3RydWN0IGN4MjMxeHggKmRldik7CiB2b2lkIGN4MjMxeHhfY2xvc2VfZXh0ZW5zaW9uKHN0cnVjdCBjeDIzMXh4ICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKaW5kZXggYzA0MjIyZi4uZDRhOWQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwpAQCAtNTMsNiArNTMsOCBAQAogI2RlZmluZSBORVRVUF9DSV9DVEwJCTB4MDQKICNkZWZpbmUgTkVUVVBfQ0lfUkQJCTEKIAorI2RlZmluZSBORVRVUF9JUlFfREVUQU0gCTB4MQorI2RlZmluZSBORVRVUF9JUlFfSVJRQU0JCTB4NAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNpX2RiZzsKIG1vZHVsZV9wYXJhbShjaV9kYmcsIGludCwgMDY0NCk7CkBAIC03Myw2ICs3NSw5IEBACiAJaW50IHN0YXR1czsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAl2b2lkICpwcml2OworCXU4IGN1cnJlbnRfaXJxX21vZGU7CisJaW50IGN1cnJlbnRfY2lfZmxhZzsKKwl1bnNpZ25lZCBsb25nIG5leHRfc3RhdHVzX2NoZWNrZWRfdGltZTsKIH07CiAKIApAQCAtMTY5LDI0ICsxNzQsMjYgQEAKIAlpZiAoMCAhPSBzbG90KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IG5ldHVwX3JlYWRfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAotCQkJCQkJCTAsICZzdG9yZSwgMSk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OworCWlmIChzdGF0ZS0+Y3VycmVudF9jaV9mbGFnICE9IGZsYWcpIHsKKwkJcmV0ID0gbmV0dXBfcmVhZF9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJMCwgJnN0b3JlLCAxKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKIAotCXN0b3JlICY9IH4weDBjOwotCXN0b3JlIHw9IGZsYWc7CisJCXN0b3JlICY9IH4weDBjOworCQlzdG9yZSB8PSBmbGFnOwogCi0JcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAotCQkJCQkJCTAsICZzdG9yZSwgMSk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OworCQlyZXQgPSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJMCwgJnN0b3JlLCAxKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9OworCXN0YXRlLT5jdXJyZW50X2NpX2ZsYWcgPSBmbGFnOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5ncGlvX2xvY2spOwogCiAJLyogd3JpdGUgYWRkciAqLwogCWN4X3dyaXRlKE1DNDE3X09FTiwgTkVUVVBfRU5fQUxMKTsKLQltc2xlZXAoMik7CiAJY3hfd3JpdGUoTUM0MTdfUldELCBORVRVUF9DVFJMX09GRiB8CiAJCQkJTkVUVVBfQURMTyB8ICgweGZmICYgYWRkcikpOwogCWN4X2NsZWFyKE1DNDE3X1JXRCwgTkVUVVBfQURMTyk7CkBAIC0xOTYsNyArMjAzLDYgQEAKIAogCWlmIChyZWFkKSB7IC8qIGRhdGEgaW4gKi8KIAkJY3hfd3JpdGUoTUM0MTdfT0VOLCBORVRVUF9FTl9BTEwgfCBORVRVUF9EQVRBKTsKLQkJbXNsZWVwKDIpOwogCX0gZWxzZSAvKiBkYXRhIG91dCAqLwogCQljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwgZGF0YSk7CiAKQEAgLTIxMyw4ICsyMTksOCBAQAogCQlpZiAobWVtIDwgMCkKIAkJCXJldHVybiAtRVJFTU9URUlPOwogCi0JY2lfZGJnX3ByaW50KCIlczogJXM6IGFkZHI9WzB4JTAyeF0sICVzPSV4XG4iLCBfX2Z1bmNfXywKLQkJCShyZWFkKSA/ICJyZWFkIiA6ICJ3cml0ZSIsIGFkZHIsCisJY2lfZGJnX3ByaW50KCIlczogJXM6IGNoaXBhZGRyPVsweCV4XSBhZGRyPVsweCUwMnhdLCAlcz0leFxuIiwgX19mdW5jX18sCisJCQkocmVhZCkgPyAicmVhZCIgOiAid3JpdGUiLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsIGFkZHIsCiAJCQkoZmxhZyA9PSBORVRVUF9DSV9DVEwpID8gImN0bCIgOiAibWVtIiwKIAkJCShyZWFkKSA/IG1lbSA6IGRhdGEpOwogCkBAIC0yODMsMTQgKzI4OSwzOSBAQAogCXJldHVybiAwOwogfQogCitpbnQgbmV0dXBfY2lfc2V0X2lycShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIHU4IGlycV9tb2RlKQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBlbjUwMjIxLT5kYXRhOworCWludCByZXQ7CisKKwlpZiAoaXJxX21vZGUgPT0gc3RhdGUtPmN1cnJlbnRfaXJxX21vZGUpCisJCXJldHVybiAwOworCisJY2lfZGJnX3ByaW50KCIlczogY2hpcGFkZHI9WzB4JXhdIHNldHRpbmcgY2kgSVJRIHRvIFsweCV4XSBcbiIsCisJCQlfX2Z1bmNfXywgc3RhdGUtPmNpX2kyY19hZGRyLCBpcnFfbW9kZSk7CisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTB4MWIsICZpcnFfbW9kZSwgMSk7CisKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlzdGF0ZS0+Y3VycmVudF9pcnFfbW9kZSA9IGlycV9tb2RlOworCisJcmV0dXJuIDA7Cit9CisKIGludCBuZXR1cF9jaV9zbG90X3RzX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KQogewogCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBlbjUwMjIxLT5kYXRhOwotCXU4IGJ1ZiA9IDB4NjA7CisJdTggYnVmOwogCiAJaWYgKDAgIT0gc2xvdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwluZXR1cF9yZWFkX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCTAsICZidWYsIDEpOworCWJ1ZiB8PSAweDYwOworCiAJcmV0dXJuIG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKIAkJCQkJCQkwLCAmYnVmLCAxKTsKIH0KQEAgLTMwMywyMSArMzM0LDM1IEBACiAJdTggYnVmWzMzXTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbmV0dXBfcmVhZF9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCi0JCQkJCQkJMCwgJmJ1ZlswXSwgMzMpOworCS8qIENBTSBtb2R1bGUgSVJRIHByb2Nlc3NpbmcuIGZhc3Qgb3BlcmF0aW9uICovCisJZHZiX2NhX2VuNTAyMjFfZnJkYV9pcnEoJnN0YXRlLT5jYSwgMCk7CiAKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybjsKKwkvKiBDQU0gbW9kdWxlIElOU0VSVC9SRU1PVkUgcHJvY2Vzc2luZy4gc2xvdyBvcGVyYXRpb24gYmVjYXVzZSBvZiBpMmMKKwkgKiB0cmFuc2ZlcnMgKi8KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGF0ZS0+bmV4dF9zdGF0dXNfY2hlY2tlZF90aW1lKQorCQkJfHwgIXN0YXRlLT5zdGF0dXMpIHsKKwkJcmV0ID0gbmV0dXBfcmVhZF9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJMCwgJmJ1ZlswXSwgMzMpOwogCi0JY2lfZGJnX3ByaW50KCIlczogU2xvdCBTdGF0dXMgQWRkcj1bMHglMDR4XSwgUmVnPVsweCUwMnhdLCBkYXRhPSUwMngsICIKLQkJIlRTIGNvbmZpZyA9ICUwMnhcbiIsIF9fZnVuY19fLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsIDAsIGJ1ZlswXSwKLQkJYnVmWzMyXSk7CisJCXN0YXRlLT5uZXh0X3N0YXR1c19jaGVja2VkX3RpbWUgPSBqaWZmaWVzCisJCQkrIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CiAKLQlpZiAoYnVmWzBdICYgMSkKLQkJc3RhdGUtPnN0YXR1cyA9IERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1BSRVNFTlQgfAotCQkJRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUkVBRFk7Ci0JZWxzZQotCQlzdGF0ZS0+c3RhdHVzID0gMDsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuOworCisJCWNpX2RiZ19wcmludCgiJXM6IFNsb3QgU3RhdHVzIEFkZHI9WzB4JTA0eF0sICIKKwkJCQkiUmVnPVsweCUwMnhdLCBkYXRhPSUwMngsICIKKwkJCQkiVFMgY29uZmlnID0gJTAyeFxuIiwgX19mdW5jX18sCisJCQkJc3RhdGUtPmNpX2kyY19hZGRyLCAwLCBidWZbMF0sCisJCQkJYnVmWzBdKTsKKworCisJCWlmIChidWZbMF0gJiAxKQorCQkJc3RhdGUtPnN0YXR1cyA9IERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1BSRVNFTlQgfAorCQkJCURWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOworCQllbHNlCisJCQlzdGF0ZS0+c3RhdHVzID0gMDsKKwl9OwogfQogCiAvKiBDSSBpcnEgaGFuZGxlciAqLwpAQCAtMzQ3LDYgKzM5Miw5IEBACiAJaWYgKDAgIT0gc2xvdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwluZXR1cF9jaV9zZXRfaXJxKGVuNTAyMjEsIG9wZW4gPyAoTkVUVVBfSVJRX0RFVEFNIHwgTkVUVVBfSVJRX0lSUUFNKQorCQkJOiBORVRVUF9JUlFfREVUQU0pOworCiAJcmV0dXJuIHN0YXRlLT5zdGF0dXM7CiB9CiAKQEAgLTM4MSw4ICs0MjksOCBAQAogCQkweDAxLCAvKiBwb3dlciBvbiAodXNlIGl0IGxpa2Ugc3RvcmUgcGxhY2UpICovCiAJCTB4MDAsIC8qIFJGVSAqLwogCQkweDAwLCAvKiBpbnQgc3RhdHVzIHJlYWQgb25seSAqLwotCQkweDAxLCAvKiBhbGwgaW50IHVubWFza2VkICovCi0JCTB4MDQsIC8qIGludCBjb25maWcgKi8KKwkJTkVUVVBfSVJRX0lSUUFNIHwgTkVUVVBfSVJRX0RFVEFNLCAvKiBERVRBTSwgSVJRQU0gdW5tYXNrZWQgKi8KKwkJMHgwNSwgLyogRVhUSU5UPWFjdGl2ZS1oaWdoLCBJTlQ9cHVzaC1wdWxsICovCiAJCTB4MDAsIC8qIFVTQ0cxICovCiAJCTB4MDQsIC8qIGFjayBhY3RpdmUgbG93ICovCiAJCTB4MDAsIC8qIExPQ0sgPSAwICovCkBAIC00MjIsNiArNDcwLDcgQEAKIAlzdGF0ZS0+Y2EucG9sbF9zbG90X3N0YXR1cyA9IG5ldHVwX3BvbGxfY2lfc2xvdF9zdGF0dXM7CiAJc3RhdGUtPmNhLmRhdGEgPSBzdGF0ZTsKIAlzdGF0ZS0+cHJpdiA9IHBvcnQ7CisJc3RhdGUtPmN1cnJlbnRfaXJxX21vZGUgPSBORVRVUF9JUlFfSVJRQU0gfCBORVRVUF9JUlFfREVUQU07CiAKIAlyZXQgPSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCiAJCQkJCQkwLCAmY2ltYXhfaW5pdFswXSwgMzQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCAwZWVkODUyLi44OGMwZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtMTU2OCwyOCArMTU2OCwxMSBAQAogCiBzdGF0aWMgaW50IG1wZWdfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmgsICpkZXYgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDIzODg1X2ZoICpmaDsKIAogCWRwcmludGsoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyMzg4NV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDIzODg1X2RldiwgZGV2bGlzdCk7Ci0JCWlmIChoLT52NGxfZGV2aWNlICYmCi0JCSAgICBoLT52NGxfZGV2aWNlLT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ID0gaDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGZoKSB7CkBAIC0xNTk3LDYgKzE1ODAsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlsb2NrX2tlcm5lbCgpOworCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwogCkBAIC0xNzM2LDcgKzE3MjEsNiBAQAogCS5uYW1lICAgICAgICAgID0gImN4MjM4ODUiLAogCS5mb3BzICAgICAgICAgID0gJm1wZWdfZm9wcywKIAkuaW9jdGxfb3BzICAgICA9ICZtcGVnX2lvY3RsX29wcywKLQkubWlub3IgICAgICAgICA9IC0xLAogCS50dm5vcm1zICAgICAgID0gQ1gyMzg4NV9OT1JNUywKIAkuY3VycmVudF9ub3JtICA9IFY0TDJfU1REX05UU0NfTSwKIH07CkBAIC0xNzQ2LDcgKzE3MzAsNyBAQAogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmIChkZXYtPnY0bF9kZXZpY2UpIHsKLQkJaWYgKC0xICE9IGRldi0+djRsX2RldmljZS0+bWlub3IpCisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+djRsX2RldmljZSkpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnY0bF9kZXZpY2UpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnY0bF9kZXZpY2UpOwpAQCAtMTgwMyw2ICsxNzg3LDcgQEAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBWNEwgdmlkZW8gZGV2aWNlICovCiAJZGV2LT52NGxfZGV2aWNlID0gY3gyMzg4NV92aWRlb19kZXZfYWxsb2ModHNwb3J0LAogCQlkZXYtPnBjaSwgJmN4MjM4ODVfbXBlZ190ZW1wbGF0ZSwgIm1wZWciKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPnY0bF9kZXZpY2UsIGRldik7CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+djRsX2RldmljZSwKIAkJVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0xODEwLDggKzE3OTUsOCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFttcGVnXVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnY0bF9kZXZpY2UtPm51bSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlICVzIFttcGVnXVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+djRsX2RldmljZSkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggMDRiMTJkMi4uMGRkZTU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtNTUsOSArNTUsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGN4MjM4ODVfZGV2Y291bnQ7CiAKLXN0YXRpYyBERUZJTkVfTVVURVgoZGV2bGlzdCk7Ci1MSVNUX0hFQUQoY3gyMzg4NV9kZXZsaXN0KTsKLQogI2RlZmluZSBOT19TWU5DX0xJTkUgKC0xVSkKIAogLyogRklYTUUsIHRoZXNlIGFsbG9jYXRpb25zIHdpbGwgY2hhbmdlIHdoZW4KQEAgLTc4NSwxMCArNzgyLDYgQEAKIAlkZXYtPm5yID0gY3gyMzg4NV9kZXZjb3VudCsrOwogCXNwcmludGYoZGV2LT5uYW1lLCAiY3gyMzg4NVslZF0iLCBkZXYtPm5yKTsKIAotCW11dGV4X2xvY2soJmRldmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJmN4MjM4ODVfZGV2bGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKLQogCS8qIENvbmZpZ3VyZSB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCiAJaWYgKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODgwKSB7CiAJCS8qIENvdWxkIGJlIDg4NyBvciA4ODgsIGFzc3VtZSBhIGRlZmF1bHQgKi8KQEAgLTIwMDgsMTAgKzIwMDEsNiBAQAogCS8qIHVucmVnaXN0ZXIgc3R1ZmYgKi8KIAlmcmVlX2lycShwY2lfZGV2LT5pcnEsIGRldik7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0KTsKLQlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKLQltdXRleF91bmxvY2soJmRldmxpc3QpOwotCiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwogCWtmcmVlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwppbmRleCA0NjllMDgzLi43NjhlZWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogCQkgY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CiAJc25wcmludGYoaXItPnBoeXMsIHNpemVvZihpci0+cGh5cyksICJwY2ktJXMvaXIwIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKIAotCXJldCA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlLCBpcl9jb2Rlcyk7CisJcmV0ID0gaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZpci0+aXIsIGlyX3R5cGUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIApAQCAtMzk3LDcgKzM5Nyw3IEBACiAJZGV2LT5pcl9pbnB1dCA9IGlyOwogCWN4MjM4ODVfaW5wdXRfaXJfc3RhcnQoZGV2KTsKIAotCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpci0+ZGV2KTsKKwlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2Rlcyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKQEAgLTQwNyw4ICs0MDcsNiBAQAogCWN4MjM4ODVfaW5wdXRfaXJfc3RvcChkZXYpOwogCWRldi0+aXJfaW5wdXQgPSBOVUxMOwogZXJyX291dF9mcmVlOgotCWlyX2lucHV0X2ZyZWUoaW5wdXRfZGV2KTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKGlyKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDIwLDggKzQxOCw3IEBACiAKIAlpZiAoZGV2LT5pcl9pbnB1dCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JaXJfaW5wdXRfZnJlZShkZXYtPmlyX2lucHV0LT5kZXYpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+aXJfaW5wdXQtPmRldik7CisJaXJfaW5wdXRfdW5yZWdpc3RlcihkZXYtPmlyX2lucHV0LT5kZXYpOwogCWtmcmVlKGRldi0+aXJfaW5wdXQpOwogCWRldi0+aXJfaW5wdXQgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKaW5kZXggOGIzNzJiNC4uODkzNGQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCkBAIC0zMTgsMTEgKzMxOCwxMSBAQAogCWlmIChOVUxMID09IHZmZCkKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKLQl2ZmQtPm1pbm9yID0gLTE7CiAJdmZkLT52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OwogCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAlcyAoJXMpIiwKIAkJIGRldi0+bmFtZSwgdHlwZSwgY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBkZXYpOwogCXJldHVybiB2ZmQ7CiB9CiAKQEAgLTcxNiw0NiArNzE2LDM0IEBACiAKIHN0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CiAJaW50IHJhZGlvID0gMDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyMzg4NV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDIzODg1X2RldiwgZGV2bGlzdCk7Ci0JCWlmIChoLT52aWRlb19kZXYgJiYKLQkJICAgIGgtPnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiAgPSBoOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJfQotCQlpZiAoaC0+dmJpX2RldiAmJgotCQkgICAgaC0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiAgPSBoOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7Ci0JCX0KLQkJaWYgKGgtPnJhZGlvX2RldiAmJgotCQkgICAgaC0+cmFkaW9fZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJcmFkaW8gPSAxOwotCQkJZGV2ICAgPSBoOwotCQl9Ci0JfQotCWlmIChOVUxMID09IGRldikgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiAtRU5PREVWOworCXN3aXRjaCAodmRldi0+dmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfVkJJOgorCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9SQURJTzoKKwkJcmFkaW8gPSAxOworCQlicmVhazsKIAl9CiAKLQlkcHJpbnRrKDEsICJvcGVuIG1pbm9yPSVkIHJhZGlvPSVkIHR5cGU9JXNcbiIsCi0JCW1pbm9yLCByYWRpbywgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKwlkcHJpbnRrKDEsICJvcGVuIGRldj0lcyByYWRpbz0lZCB0eXBlPSVzXG4iLAorCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLCByYWRpbywgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CiAJZmgtPnJhZGlvICAgID0gcmFkaW87CkBAIC0xNDQxLDcgKzE0MjksNiBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyMzg4NV92aWRlb190ZW1wbGF0ZSA9IHsKIAkubmFtZSAgICAgICAgICAgICAgICAgPSAiY3gyMzg4NS12aWRlbyIsCiAJLmZvcHMgICAgICAgICAgICAgICAgID0gJnZpZGVvX2ZvcHMsCi0JLm1pbm9yICAgICAgICAgICAgICAgID0gLTEsCiAJLmlvY3RsX29wcyAJICAgICAgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zICAgICAgICAgICAgICA9IENYMjM4ODVfTk9STVMsCiAJLmN1cnJlbnRfbm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLApAQCAtMTQ2MSw3ICsxNDQ4LDcgQEAKIAljeF9jbGVhcihQQ0lfSU5UX01TSywgMSk7CiAKIAlpZiAoZGV2LT52aWRlb19kZXYpIHsKLQkJaWYgKC0xICE9IGRldi0+dmlkZW9fZGV2LT5taW5vcikKKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2LT52aWRlb19kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52aWRlb19kZXYpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZpZGVvX2Rldik7CkBAIC0xNTMyLDggKzE1MTksOCBAQAogCQkJZGV2LT5uYW1lKTsKIAkJZ290byBmYWlsX3VucmVnOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIlcy8wOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFt2NGwyXVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnZpZGVvX2Rldi0+bnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8wOiByZWdpc3RlcmVkIGRldmljZSAlcyBbdjRsMl1cbiIsCisJICAgICAgIGRldi0+bmFtZSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZpZGVvX2RldikpOwogCS8qIGluaXRpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWN4MjM4ODVfc2V0X3R2bm9ybShkZXYsIGRldi0+dHZub3JtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IGZhNzQ0NzYuLjA4YjNmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtMzAzLDcgKzMwMyw2IEBACiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CiAJYXRvbWljX3QgICAgICAgICAgICAgICAgICAgcmVmY291bnQ7CiAJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKIApAQCAtMzk5LDggKzM5OCw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgdjRsMl9zdWJkZXYgKmN4MjM4ODVfZmluZF9odyhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIGh3KTsKIAotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY3gyMzg4NV9kZXZsaXN0OwotCiAjZGVmaW5lIFNSQU1fQ0gwMSAgMCAvKiBWaWRlbyBBICovCiAjZGVmaW5lIFNSQU1fQ0gwMiAgMSAvKiBWQkkgQSAqLwogI2RlZmluZSBTUkFNX0NIMDMgIDIgLyogVmlkZW8gQiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMKaW5kZXggM2NjYzhhZi4uMmJmNTdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jCkBAIC0xMjQsMTUgKzEyNCwxMiBAQAogCWF0b21pY190IHJ4Y2xrX2RpdmlkZXI7CiAJYXRvbWljX3QgcnhfaW52ZXJ0OwogCi0Jc3RydWN0IGtmaWZvICpyeF9rZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gcnhfa2ZpZm87CiAJc3BpbmxvY2tfdCByeF9rZmlmb19sb2NrOwogCiAJc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMgdHhfcGFyYW1zOwogCXN0cnVjdCBtdXRleCB0eF9wYXJhbXNfbG9jazsKIAlhdG9taWNfdCB0eGNsa19kaXZpZGVyOwotCi0Jc3RydWN0IGtmaWZvICp0eF9rZmlmbzsKLQlzcGlubG9ja190IHR4X2tmaWZvX2xvY2s7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDIzODg4X2lyX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQpAQCAtNTIyLDYgKzUxOSw3IEBACiB7CiAJc3RydWN0IGN4MjM4ODhfaXJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gc3RhdGUtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdTMyIGNudHJsID0gY3gyMzg4OF9pcl9yZWFkNChkZXYsIENYMjM4ODhfSVJfQ05UUkxfUkVHKTsKIAl1MzIgaXJxZW4gPSBjeDIzODg4X2lyX3JlYWQ0KGRldiwgQ1gyMzg4OF9JUl9JUlFFTl9SRUcpOwpAQCAtNTk0LDggKzU5Miw5IEBACiAJCQlpZiAoaSA9PSAwKQogCQkJCWJyZWFrOwogCQkJaiA9IGkgKiBzaXplb2YodTMyKTsKLQkJCWsgPSBrZmlmb19wdXQoc3RhdGUtPnJ4X2tmaWZvLAotCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopIHJ4X2RhdGEsIGopOworCQkJayA9IGtmaWZvX2luX2xvY2tlZCgmc3RhdGUtPnJ4X2tmaWZvLAorCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopIHJ4X2RhdGEsIGosCisJCQkJICAgICAgJnN0YXRlLT5yeF9rZmlmb19sb2NrKTsKIAkJCWlmIChrICE9IGopCiAJCQkJa3JvcisrOyAvKiByeF9rZmlmbyBvdmVyIHJ1biAqLwogCQl9CkBAIC02MzEsOCArNjMwLDExIEBACiAJCWN4MjM4ODhfaXJfd3JpdGU0KGRldiwgQ1gyMzg4OF9JUl9DTlRSTF9SRUcsIGNudHJsKTsKIAkJKmhhbmRsZWQgPSB0cnVlOwogCX0KLQlpZiAoa2ZpZm9fbGVuKHN0YXRlLT5yeF9rZmlmbykgPj0gQ1gyMzg4OF9JUl9SWF9LRklGT19TSVpFIC8gMikKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+cnhfa2ZpZm9fbG9jaywgZmxhZ3MpOworCWlmIChrZmlmb19sZW4oJnN0YXRlLT5yeF9rZmlmbykgPj0gQ1gyMzg4OF9JUl9SWF9LRklGT19TSVpFIC8gMikKIAkJZXZlbnRzIHw9IFY0TDJfU1VCREVWX0lSX1JYX0ZJRk9fU0VSVklDRV9SRVE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKIAogCWlmIChldmVudHMpCiAJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgVjRMMl9TVUJERVZfSVJfUlhfTk9USUZZLCAmZXZlbnRzKTsKQEAgLTY1Nyw3ICs2NTksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQluID0ga2ZpZm9fZ2V0KHN0YXRlLT5yeF9rZmlmbywgYnVmLCBuKTsKKwluID0ga2ZpZm9fb3V0X2xvY2tlZCgmc3RhdGUtPnJ4X2tmaWZvLCBidWYsIG4sICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7CiAKIAluIC89IHNpemVvZih1MzIpOwogCSpudW0gPSBuICogc2l6ZW9mKHUzMik7CkBAIC03ODUsNyArNzg3LDEyIEBACiAJby0+aW50ZXJydXB0X2VuYWJsZSA9IHAtPmludGVycnVwdF9lbmFibGU7CiAJby0+ZW5hYmxlID0gcC0+ZW5hYmxlOwogCWlmIChwLT5lbmFibGUpIHsKLQkJa2ZpZm9fcmVzZXQoc3RhdGUtPnJ4X2tmaWZvKTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKKwkJa2ZpZm9fcmVzZXQoJnN0YXRlLT5yeF9rZmlmbyk7CisJCS8qIHJlc2V0IHR4X2ZpZm8gdG9vIGlmIHRoZXJlIGlzIG9uZS4uLiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+cnhfa2ZpZm9fbG9jaywgZmxhZ3MpOwogCQlpZiAocC0+aW50ZXJydXB0X2VuYWJsZSkKIAkJCWlycWVuYWJsZV9yeChkZXYsIElSUUVOX1JTRSB8IElSUUVOX1JURSB8IElSUUVOX1JPRSk7CiAJCWNvbnRyb2xfcnhfZW5hYmxlKGRldiwgcC0+ZW5hYmxlKTsKQEAgLTg5Miw3ICs4OTksNiBAQAogCW8tPmludGVycnVwdF9lbmFibGUgPSBwLT5pbnRlcnJ1cHRfZW5hYmxlOwogCW8tPmVuYWJsZSA9IHAtPmVuYWJsZTsKIAlpZiAocC0+ZW5hYmxlKSB7Ci0JCWtmaWZvX3Jlc2V0KHN0YXRlLT50eF9rZmlmbyk7CiAJCWlmIChwLT5pbnRlcnJ1cHRfZW5hYmxlKQogCQkJaXJxZW5hYmxlX3R4KGRldiwgSVJRRU5fVFNFKTsKIAkJY29udHJvbF90eF9lbmFibGUoZGV2LCBwLT5lbmFibGUpOwpAQCAtMTE2OCwxOSArMTE3NCw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJnN0YXRlLT5yeF9rZmlmb19sb2NrKTsKLQlzdGF0ZS0+cnhfa2ZpZm8gPSBrZmlmb19hbGxvYyhDWDIzODg4X0lSX1JYX0tGSUZPX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJICAgICAgJnN0YXRlLT5yeF9rZmlmb19sb2NrKTsKLQlpZiAoc3RhdGUtPnJ4X2tmaWZvID09IE5VTEwpCisJaWYgKGtmaWZvX2FsbG9jKCZzdGF0ZS0+cnhfa2ZpZm8sIENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnN0YXRlLT50eF9rZmlmb19sb2NrKTsKLQlzdGF0ZS0+dHhfa2ZpZm8gPSBrZmlmb19hbGxvYyhDWDIzODg4X0lSX1RYX0tGSUZPX1NJWkUsIEdGUF9LRVJORUwsCi0JCQkJICAgICAgJnN0YXRlLT50eF9rZmlmb19sb2NrKTsKLQlpZiAoc3RhdGUtPnR4X2tmaWZvID09IE5VTEwpIHsKLQkJa2ZpZm9fZnJlZShzdGF0ZS0+cnhfa2ZpZm8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAlzdGF0ZS0+ZGV2ID0gZGV2OwogCXN0YXRlLT5pZCA9IFY0TDJfSURFTlRfQ1gyMzg4OF9JUjsKIAlzdGF0ZS0+cmV2ID0gMDsKQEAgLTEyMTEsOCArMTIwNyw3IEBACiAJCSAgICAgICBzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMpKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChzZCwgaXIsIHR4X3NfcGFyYW1ldGVycywgJmRlZmF1bHRfcGFyYW1zKTsKIAl9IGVsc2UgewotCQlrZmlmb19mcmVlKHN0YXRlLT5yeF9rZmlmbyk7Ci0JCWtmaWZvX2ZyZWUoc3RhdGUtPnR4X2tmaWZvKTsKKwkJa2ZpZm9fZnJlZSgmc3RhdGUtPnJ4X2tmaWZvKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyMzEsOCArMTIyNiw3IEBACiAKIAlzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7Ci0Ja2ZpZm9fZnJlZShzdGF0ZS0+cnhfa2ZpZm8pOwotCWtmaWZvX2ZyZWUoc3RhdGUtPnR4X2tmaWZvKTsKKwlrZmlmb19mcmVlKCZzdGF0ZS0+cnhfa2ZpZm8pOwogCWtmcmVlKHN0YXRlKTsKIAkvKiBOb3RoaW5nIG1vcmUgdG8gZnJlZSgpIGFzIHN0YXRlIGhlbGQgdGhlIGFjdHVhbCB2NGwyX3N1YmRldiBvYmplY3QgKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggZmJkYzFjZC4uNmZlMzBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTEwNDgsMjEgKzEwNDgsMTUgQEAKIAogc3RhdGljIGludCBtcGVnX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGN4ODgwMl9maCAqZmg7CiAJc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydiA9IE5VTEw7CiAJaW50IGVycjsKIAotCWxvY2tfa2VybmVsKCk7Ci0JZGV2ID0gY3g4ODAyX2dldF9kZXZpY2UobWlub3IpOwotCiAJZHByaW50ayggMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJbG9ja19rZXJuZWwoKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBjYW4gYWNxdWlyZSB0aGUgaGFyZHdhcmUgKi8KIAlkcnYgPSBjeDg4MDJfZ2V0X2RyaXZlcihkZXYsIENYODhfTVBFR19CTEFDS0JJUkQpOwpAQCAtMTA4MSw3ICsxMDc1LDcgQEAKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZHByaW50aygxLCJvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKKwlkcHJpbnRrKDEsICJvcGVuIGRldj0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSxHRlBfS0VSTkVMKTsKQEAgLTExMjksMTAgKzExMjMsNiBAQAogCWtmcmVlKGZoKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSByZWxlYXNlIHRoZSBoYXJkd2FyZSAqLwotCWRldiA9IGN4ODgwMl9nZXRfZGV2aWNlKHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yKTsKLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJZHJ2ID0gY3g4ODAyX2dldF9kcml2ZXIoZGV2LCBDWDg4X01QRUdfQkxBQ0tCSVJEKTsKIAlpZiAoZHJ2KQogCQlkcnYtPnJlcXVlc3RfcmVsZWFzZShkcnYpOwpAQCAtMTIyMCw3ICsxMjEwLDYgQEAKIAkubmFtZSAgICAgICAgICAgICAgICAgPSAiY3g4ODAyIiwKIAkuZm9wcyAgICAgICAgICAgICAgICAgPSAmbXBlZ19mb3BzLAogCS5pb2N0bF9vcHMgCSAgICAgID0gJm1wZWdfaW9jdGxfb3BzLAotCS5taW5vciAgICAgICAgICAgICAgICA9IC0xLAogCS50dm5vcm1zICAgICAgICAgICAgICA9IENYODhfTk9STVMsCiAJLmN1cnJlbnRfbm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAogfTsKQEAgLTEyNzYsNyArMTI2NSw3IEBACiBzdGF0aWMgdm9pZCBibGFja2JpcmRfdW5yZWdpc3Rlcl92aWRlbyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCWlmIChkZXYtPm1wZWdfZGV2KSB7Ci0JCWlmICgtMSAhPSBkZXYtPm1wZWdfZGV2LT5taW5vcikKKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2LT5tcGVnX2RldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPm1wZWdfZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT5tcGVnX2Rldik7CkBAIC0xMjkwLDE0ICsxMjc5LDE1IEBACiAKIAlkZXYtPm1wZWdfZGV2ID0gY3g4OF92ZGV2X2luaXQoZGV2LT5jb3JlLGRldi0+cGNpLAogCQkJCSAgICAgICAmY3g4ODAyX21wZWdfdGVtcGxhdGUsIm1wZWciKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPm1wZWdfZGV2LCBkZXYpOwogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPm1wZWdfZGV2LFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlcy8yOiBjYW4ndCByZWdpc3RlciBtcGVnIGRldmljZVxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIiVzLzI6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW21wZWddXG4iLAotCSAgICAgICBkZXYtPmNvcmUtPm5hbWUsIGRldi0+bXBlZ19kZXYtPm51bSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogcmVnaXN0ZXJlZCBkZXZpY2UgJXMgW21wZWddXG4iLAorCSAgICAgICBkZXYtPmNvcmUtPm5hbWUsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT5tcGVnX2RldikpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCA5MmI4Y2RmLi5mOWZkYTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiY3g4OCBJUiAoJXMpIiwgY29yZS0+Ym9hcmQubmFtZSk7CiAJc25wcmludGYoaXItPnBoeXMsIHNpemVvZihpci0+cGh5cyksICJwY2ktJXMvaXIwIiwgcGNpX25hbWUocGNpKSk7CiAKLQllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgaXJfdHlwZSwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKQEAgLTM4Myw3ICszODMsNyBAQAogCWN4ODhfaXJfc3RhcnQoY29yZSwgaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGlyX2NvZGVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApAQCAtMzkzLDggKzM5Myw2IEBACiAJY3g4OF9pcl9zdG9wKGNvcmUsIGlyKTsKIAljb3JlLT5pciA9IE5VTEw7CiAgZXJyX291dF9mcmVlOgotCWlyX2lucHV0X2ZyZWUoaW5wdXRfZGV2KTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKGlyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDA4LDggKzQwNiw3IEBACiAJCXJldHVybiAwOwogCiAJY3g4OF9pcl9zdG9wKGNvcmUsIGlyKTsKLQlpcl9pbnB1dF9mcmVlKGlyLT5pbnB1dCk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwlpcl9pbnB1dF91bnJlZ2lzdGVyKGlyLT5pbnB1dCk7CiAJa2ZyZWUoaXIpOwogCiAJLyogZG9uZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCmluZGV4IGRlOWZmMGYuLmJiNTEwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKQEAgLTU4MCwyMSArNTgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfQkxBQ0tCSVJEKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9CTEFDS0JJUkRfTU9EVUxFKQotc3RydWN0IGN4ODgwMl9kZXYgKmN4ODgwMl9nZXRfZGV2aWNlKGludCBtaW5vcikKLXsKLQlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjeDg4MDJfZGV2bGlzdCwgZGV2bGlzdCkKLQkJaWYgKGRldi0+bXBlZ19kZXYgJiYgZGV2LT5tcGVnX2Rldi0+bWlub3IgPT0gbWlub3IpCi0JCQlyZXR1cm4gZGV2OwotCi0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKGN4ODgwMl9nZXRfZGV2aWNlKTsKLSNlbmRpZgotCiBzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqIGN4ODgwMl9nZXRfZHJpdmVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIGVudW0gY3g4OF9ib2FyZF90eXBlIGJ0eXBlKQogewogCXN0cnVjdCBjeDg4MDJfZHJpdmVyICpkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggZDdlOGZjZS4uNDhjNDUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC03NSwxMCArNzUsNiBAQAogI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKQlpZiAodmlkZW9fZGVidWcgPj0gbGV2ZWwpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMvMDogIiBmbXQsIGNvcmUtPm5hbWUgLCAjIyBhcmcpCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgTElTVF9IRUFEKGN4ODgwMF9kZXZsaXN0KTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc3RhdGljIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC03NTMsMzggKzc0OSwzMSBAQAogCiBzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IGN4ODgwMF9kZXYgKmgsKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4ODgwMF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZTsKIAlzdHJ1Y3QgY3g4ODAwX2ZoICpmaDsKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CiAJaW50IHJhZGlvID0gMDsKIAorCXN3aXRjaCAodmRldi0+dmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfVkJJOgorCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9SQURJTzoKKwkJcmFkaW8gPSAxOworCQlicmVhazsKKwl9CisKIAlsb2NrX2tlcm5lbCgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmN4ODgwMF9kZXZsaXN0LCBkZXZsaXN0KSB7Ci0JCWlmIChoLT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgID0gaDsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCX0KLQkJaWYgKGgtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgID0gaDsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQl9Ci0JCWlmIChoLT5yYWRpb19kZXYgJiYKLQkJICAgIGgtPnJhZGlvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCXJhZGlvID0gMTsKLQkJCWRldiAgID0gaDsKLQkJfQotCX0KLQlpZiAoTlVMTCA9PSBkZXYpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAljb3JlID0gZGV2LT5jb3JlOwogCi0JZHByaW50aygxLCJvcGVuIG1pbm9yPSVkIHJhZGlvPSVkIHR5cGU9JXNcbiIsCi0JCW1pbm9yLHJhZGlvLHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisJZHByaW50aygxLCAib3BlbiBkZXY9JXMgcmFkaW89JWQgdHlwZT0lc1xuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgcmFkaW8sIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSxHRlBfS0VSTkVMKTsKQEAgLTE3MzMsNyArMTcyMiw2IEBACiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjeDg4MDBfdmlkZW9fdGVtcGxhdGUgPSB7CiAJLm5hbWUgICAgICAgICAgICAgICAgID0gImN4ODgwMC12aWRlbyIsCiAJLmZvcHMgICAgICAgICAgICAgICAgID0gJnZpZGVvX2ZvcHMsCi0JLm1pbm9yICAgICAgICAgICAgICAgID0gLTEsCiAJLmlvY3RsX29wcyAJICAgICAgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zICAgICAgICAgICAgICA9IENYODhfTk9STVMsCiAJLmN1cnJlbnRfbm9ybSAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLApAQCAtMTc2OSw3ICsxNzU3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF9yYWRpb190ZW1wbGF0ZSA9IHsKIAkubmFtZSAgICAgICAgICAgICAgICAgPSAiY3g4ODAwLXJhZGlvIiwKIAkuZm9wcyAgICAgICAgICAgICAgICAgPSAmcmFkaW9fZm9wcywKLQkubWlub3IgICAgICAgICAgICAgICAgPSAtMSwKIAkuaW9jdGxfb3BzIAkgICAgICA9ICZyYWRpb19pb2N0bF9vcHMsCiB9OwogCkBAIC0xNzc4LDIxICsxNzY1LDIxIEBACiBzdGF0aWMgdm9pZCBjeDg4MDBfdW5yZWdpc3Rlcl92aWRlbyhzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2KQogewogCWlmIChkZXYtPnJhZGlvX2RldikgewotCQlpZiAoLTEgIT0gZGV2LT5yYWRpb19kZXYtPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnJhZGlvX2RldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnJhZGlvX2Rldik7CiAJCWVsc2UKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+cmFkaW9fZGV2KTsKIAkJZGV2LT5yYWRpb19kZXYgPSBOVUxMOwogCX0KIAlpZiAoZGV2LT52YmlfZGV2KSB7Ci0JCWlmICgtMSAhPSBkZXYtPnZiaV9kZXYtPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnZiaV9kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52YmlfZGV2KTsKIAkJZGV2LT52YmlfZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldi0+dmlkZW9fZGV2KSB7Ci0JCWlmICgtMSAhPSBkZXYtPnZpZGVvX2Rldi0+bWlub3IpCisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+dmlkZW9fZGV2KSkKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52aWRlb19kZXYpOwpAQCAtMTkwOSw2ICsxODk2LDcgQEAKIAkvKiByZWdpc3RlciB2NGwgZGV2aWNlcyAqLwogCWRldi0+dmlkZW9fZGV2ID0gY3g4OF92ZGV2X2luaXQoY29yZSxkZXYtPnBjaSwKIAkJCQkJJmN4ODgwMF92aWRlb190ZW1wbGF0ZSwidmlkZW8iKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPnZpZGVvX2RldiwgZGV2KTsKIAllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52aWRlb19kZXYsVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkgICAgdmlkZW9fbnJbY29yZS0+bnJdKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMTkxNiwxMCArMTkwNCwxMSBAQAogCQkgICAgICAgY29yZS0+bmFtZSk7CiAJCWdvdG8gZmFpbF91bnJlZzsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMDogcmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZCBbdjRsMl1cbiIsCi0JICAgICAgIGNvcmUtPm5hbWUsIGRldi0+dmlkZW9fZGV2LT5udW0pOworCXByaW50ayhLRVJOX0lORk8gIiVzLzA6IHJlZ2lzdGVyZWQgZGV2aWNlICVzIFt2NGwyXVxuIiwKKwkgICAgICAgY29yZS0+bmFtZSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZpZGVvX2RldikpOwogCiAJZGV2LT52YmlfZGV2ID0gY3g4OF92ZGV2X2luaXQoY29yZSxkZXYtPnBjaSwmY3g4ODAwX3ZiaV90ZW1wbGF0ZSwidmJpIik7CisJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52YmlfZGV2LCBkZXYpOwogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYsVkZMX1RZUEVfVkJJLAogCQkJCSAgICB2YmlfbnJbY29yZS0+bnJdKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMTkyNywxMiArMTkxNiwxMyBAQAogCQkgICAgICAgY29yZS0+bmFtZSk7CiAJCWdvdG8gZmFpbF91bnJlZzsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMDogcmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWRcbiIsCi0JICAgICAgIGNvcmUtPm5hbWUsIGRldi0+dmJpX2Rldi0+bnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8wOiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwKKwkgICAgICAgY29yZS0+bmFtZSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZiaV9kZXYpKTsKIAogCWlmIChjb3JlLT5ib2FyZC5yYWRpby50eXBlID09IENYODhfUkFESU8pIHsKIAkJZGV2LT5yYWRpb19kZXYgPSBjeDg4X3ZkZXZfaW5pdChjb3JlLGRldi0+cGNpLAogCQkJCQkJJmN4ODgwMF9yYWRpb190ZW1wbGF0ZSwicmFkaW8iKTsKKwkJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT5yYWRpb19kZXYsIGRldik7CiAJCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnJhZGlvX2RldixWRkxfVFlQRV9SQURJTywKIAkJCQkJICAgIHJhZGlvX25yW2NvcmUtPm5yXSk7CiAJCWlmIChlcnIgPCAwKSB7CkBAIC0xOTQwLDEyICsxOTMwLDExIEBACiAJCQkgICAgICAgY29yZS0+bmFtZSk7CiAJCQlnb3RvIGZhaWxfdW5yZWc7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMDogcmVnaXN0ZXJlZCBkZXZpY2UgcmFkaW8lZFxuIiwKLQkJICAgICAgIGNvcmUtPm5hbWUsIGRldi0+cmFkaW9fZGV2LT5udW0pOworCQlwcmludGsoS0VSTl9JTkZPICIlcy8wOiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwKKwkJICAgICAgIGNvcmUtPm5hbWUsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT5yYWRpb19kZXYpKTsKIAl9CiAKIAkvKiBldmVyeXRoaW5nIHdvcmtlZCAqLwotCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwmY3g4ODAwX2Rldmxpc3QpOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LGRldik7CiAKIAkvKiBpbml0aWFsIGRldmljZSBjb25maWd1cmF0aW9uICovCkBAIC0yMDAxLDcgKzE5OTAsNiBAQAogCiAJLyogZnJlZSBtZW1vcnkgKi8KIAlidGN4X3Jpc2NtZW1fZnJlZShkZXYtPnBjaSwmZGV2LT52aWRxLnN0b3BwZXIpOwotCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCWN4ODhfY29yZV9wdXQoY29yZSxkZXYtPnBjaSk7CiAJa2ZyZWUoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGUxYzUyMTcuLmIxNDk5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtNDIzLDcgKzQyMyw2IEBACiAKIHN0cnVjdCBjeDg4MDBfZGV2IHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAgICAgICAgICAqY29yZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICBkZXZsaXN0OwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgIHNsb2NrOwogCiAJLyogdmFyaW91cyBkZXZpY2UgaW5mbyAqLwpAQCAtNjcwLDcgKzY2OSw2IEBACiAKIGludCBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpOwogaW50IGN4ODgwMl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KTsKLXN0cnVjdCBjeDg4MDJfZGV2ICpjeDg4MDJfZ2V0X2RldmljZShpbnQgbWlub3IpOwogc3RydWN0IGN4ODgwMl9kcml2ZXIgKiBjeDg4MDJfZ2V0X2RyaXZlcihzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LCBlbnVtIGN4ODhfYm9hcmRfdHlwZSBidHlwZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKaW5kZXggMTJhMWIzZDcuLmRlMjJiYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKQEAgLTcwLDcgKzcwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oPgpAQCAtMTk2Nyw3ICsxOTY2LDYgQEAKIAl2ZmQtPnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmZkLT5mb3BzCQk9ICZ2cGZlX2ZvcHM7CiAJdmZkLT5pb2N0bF9vcHMJCT0gJnZwZmVfaW9jdGxfb3BzOwotCXZmZC0+bWlub3IJCT0gLTE7CiAJdmZkLT50dm5vcm1zCQk9IDA7CiAJdmZkLT5jdXJyZW50X25vcm0JPSBWNEwyX1NURF9QQUw7CiAJdmZkLT52NGwyX2RldiAJCT0gJnZwZmVfZGV2LT52NGwyX2RldjsKQEAgLTIwNzEsNyArMjA2OSw3IEBACiBwcm9iZV9vdXRfdjRsMl91bnJlZ2lzdGVyOgogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwZmVfZGV2LT52NGwyX2Rldik7CiBwcm9iZV9vdXRfdmlkZW9fcmVsZWFzZToKLQlpZiAodnBmZV9kZXYtPnZpZGVvX2Rldi0+bWlub3IgPT0gLTEpCisJaWYgKCF2aWRlb19pc19yZWdpc3RlcmVkKHZwZmVfZGV2LT52aWRlb19kZXYpKQogCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2cGZlX2Rldi0+dmlkZW9fZGV2KTsKIHByb2JlX291dF9yZWxlYXNlX2lycToKIAlmcmVlX2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2Rldik7CkBAIC0yMDkxLDcgKzIwODksNyBAQAogLyoKICAqIHZwZmVfcmVtb3ZlIDogSXQgdW4tcmVnaXN0ZXIgZGV2aWNlIGZyb20gVjRMMiBkcml2ZXIKICAqLwotc3RhdGljIGludCB2cGZlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgdnBmZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmVfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0yMTI3LDcgKzIxMjUsNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHZwZmVfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2cGZlX2Rldl9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSB2cGZlX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHZwZmVfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZi5jCmluZGV4IDNiOGVhYzMuLjFmNTMyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWYuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCB2cGlmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgdnBpZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpb3VubWFwKHZwaWZfYmFzZSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jCmluZGV4IGQ5NDdlZTUuLjc4MTMwNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmMKQEAgLTIxMDcsNyArMjEwNyw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdnBpZl9kZXZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZwaWZfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHZwaWZfc3VzcGVuZCwKIAkucmVzdW1lID0gdnBpZl9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jCmluZGV4IGQxNGNmYjIuLmRmZGRlZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMKQEAgLTEzNDcsNyArMTM0Nyw2IEBACiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2cGlmX3ZpZGVvX3RlbXBsYXRlID0gewogCS5uYW1lCQk9ICJ2cGlmIiwKIAkuZm9wcwkJPSAmdnBpZl9mb3BzLAotCS5taW5vcgkJPSAtMSwKIAkuaW9jdGxfb3BzCT0gJnZwaWZfaW9jdGxfb3BzLAogCS50dm5vcm1zCT0gRE02NDZYX1Y0TDJfU1RELAogCS5jdXJyZW50X25vcm0JPSBWNEwyX1NURF82MjVfNTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwppbmRleCA0NTMyMzZiLi43ZWU3MmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgdnBzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHZwc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDgyZGEyMDUuLjI1MTAwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yMjg1LDcgKzIyODUsNyBAQAogCQlkZXYtPmluaXRfZGF0YS5uYW1lID0gImkyYyBJUiAoRU0yOFhYIFBpbm5hY2xlIFBDVFYpIjsKIAkJYnJlYWs7CiAJY2FzZSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yOgotCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlOworCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ld190YWJsZTsKIAkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXA7CiAJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSI7CiAJCWJyZWFrOwpAQCAtMjY1Myw3ICsyNjUzLDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT52YmlxLmFjdGl2ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJpcS5xdWV1ZWQpOwogCi0KIAlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkgewogCQkvKiBTZW5kIGEgcmVzZXQgdG8gb3RoZXIgY2hpcHMgdmlhIGdwaW8gKi8KIAkJZXJyQ29kZSA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZjcpOwpAQCAtMjkyMyw5ICsyOTIyLDkgQEAKIAogCWlmIChkZXYtPnVzZXJzKSB7CiAJCWVtMjh4eF93YXJuCi0JCSAgICAoImRldmljZSAvZGV2L3ZpZGVvJWQgaXMgb3BlbiEgRGVyZWdpc3RyYXRpb24gYW5kIG1lbW9yeSAiCisJCSAgICAoImRldmljZSAlcyBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKIAkJICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS5cbiIsCi0JCQkJZGV2LT52ZGV2LT5udW0pOworCQkgICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52ZGV2KSk7CiAKIAkJZGV2LT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCAzZjg2ZDM2Li5iMzExZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogICogc2V0cyBvbmx5IHNvbWUgYml0cyAoc3BlY2lmaWVkIGJ5IGJpdG1hc2spIG9mIGEgcmVnaXN0ZXIsIGJ5IGZpcnN0IHJlYWRpbmcKICAqIHRoZSBhY3R1YWwgdmFsdWUKICAqLwotc3RhdGljIGludCBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnLCB1OCB2YWwsCitpbnQgZW0yOHh4X3dyaXRlX3JlZ19iaXRzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAogCQkJCSB1OCBiaXRtYXNrKQogewogCWludCBvbGR2YWw7CkBAIC0xMTM2LDM0ICsxMTM2LDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoZW0yOHh4X2Rldmxpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChlbTI4eHhfZGV2bGlzdF9tdXRleCk7CiAKLXN0cnVjdCBlbTI4eHggKmVtMjh4eF9nZXRfZGV2aWNlKGludCBtaW5vciwKLQkJCQkgZW51bSB2NGwyX2J1Zl90eXBlICpmaF90eXBlLAotCQkJCSBpbnQgKmhhc19yYWRpbykKLXsKLQlzdHJ1Y3QgZW0yOHh4ICpoLCAqZGV2ID0gTlVMTDsKLQotCSpmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCSpoYXNfcmFkaW8gPSAwOwotCi0JbXV0ZXhfbG9jaygmZW0yOHh4X2Rldmxpc3RfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmVtMjh4eF9kZXZsaXN0LCBkZXZsaXN0KSB7Ci0JCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikKLQkJCWRldiA9IGg7Ci0JCWlmIChoLT52YmlfZGV2ICYmIGgtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgPSBoOwotCQkJKmZoX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQl9Ci0JCWlmIChoLT5yYWRpb19kZXYgJiYKLQkJICAgIGgtPnJhZGlvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQkqaGFzX3JhZGlvID0gMTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmVtMjh4eF9kZXZsaXN0X211dGV4KTsKLQotCXJldHVybiBkZXY7Ci19Ci0KIC8qCiAgKiBlbTI4eHhfcmVhbGVhc2VfcmVzb3VyY2VzKCkKICAqIHVucmVnaXN0ZXJzIHRoZSB2NGwyLGkyYyBhbmQgdXNiIGRldmljZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKaW5kZXggZDk2ZWM3Yy4uYWYwZDkzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKQEAgLTExMiwxMCArMTEyLDEzIEBACiBpbnQgZW0yOHh4X2dldF9rZXlfZW1faGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzJdOwotCXVuc2lnbmVkIGNoYXIgY29kZTsKKwl1MTYgY29kZTsKKwlpbnQgc2l6ZTsKIAogCS8qIHBvbGwgSVIgY2hpcCAqLwotCWlmICgyICE9IGkyY19tYXN0ZXJfcmVjdihpci0+YywgYnVmLCAyKSkKKwlzaXplID0gaTJjX21hc3Rlcl9yZWN2KGlyLT5jLCBidWYsIHNpemVvZihidWYpKTsKKworCWlmIChzaXplICE9IDIpCiAJCXJldHVybiAtRUlPOwogCiAJLyogRG9lcyBlbGltaW5hdGUgcmVwZWF0ZWQgcGFyaXR5IGNvZGUgKi8KQEAgLTEyNCwxNiArMTI3LDMwIEBACiAKIAlpci0+b2xkID0gYnVmWzFdOwogCi0JLyogUmVhcnJhbmdlcyBiaXRzIHRvIHRoZSByaWdodCBvcmRlciAqLwotCWNvZGUgPSAgICgoYnVmWzBdJjB4MDEpPDw1KSB8IC8qIDAwMTAgMDAwMCAqLwotCQkgKChidWZbMF0mMHgwMik8PDMpIHwgLyogMDAwMSAwMDAwICovCi0JCSAoKGJ1ZlswXSYweDA0KTw8MSkgfCAvKiAwMDAwIDEwMDAgKi8KLQkJICgoYnVmWzBdJjB4MDgpPj4xKSB8IC8qIDAwMDAgMDEwMCAqLwotCQkgKChidWZbMF0mMHgxMCk+PjMpIHwgLyogMDAwMCAwMDEwICovCi0JCSAoKGJ1ZlswXSYweDIwKT4+NSk7ICAvKiAwMDAwIDAwMDEgKi8KKwkvKgorCSAqIFJlYXJyYW5nZXMgYml0cyB0byB0aGUgcmlnaHQgb3JkZXIuCisJICogVGhlIGJpdCBvcmRlciB3ZXJlIGRldGVybWluZWQgZXhwZXJpbWVudGFsbHkgYnkgdXNpbmcKKwkgKiBUaGUgb3JpZ2luYWwgSGF1cHBhdWdlIEdyZXkgSVIgYW5kIGFub3RoZXIgUkM1IHRoYXQgdXNlcyBhZGRyPTB4MDgKKwkgKiBUaGUgUkM1IGNvZGUgaGFzIDE0IGJpdHMsIGJ1dCB3ZSd2ZSBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkCisJICogdGhlIG1lYW5pbmcgZm9yIG9ubHkgMTEgYml0cy4KKwkgKiBTbywgdGhlIGNvZGUgdHJhbnNsYXRpb24gaXMgbm90IGNvbXBsZXRlLiBZZXQsIGl0IGlzIGVub3VnaCB0bworCSAqIHdvcmsgd2l0aCB0aGUgcHJvdmlkZWQgUkM1IElSLgorCSAqLworCWNvZGUgPQorCQkgKChidWZbMF0gJiAweDAxKSA/IDB4MDAyMCA6IDApIHwgLyogCQkwMDEwIDAwMDAgKi8KKwkJICgoYnVmWzBdICYgMHgwMikgPyAweDAwMTAgOiAwKSB8IC8qIAkJMDAwMSAwMDAwICovCisJCSAoKGJ1ZlswXSAmIDB4MDQpID8gMHgwMDA4IDogMCkgfCAvKiAJCTAwMDAgMTAwMCAqLworCQkgKChidWZbMF0gJiAweDA4KSA/IDB4MDAwNCA6IDApIHwgLyogCQkwMDAwIDAxMDAgKi8KKwkJICgoYnVmWzBdICYgMHgxMCkgPyAweDAwMDIgOiAwKSB8IC8qIAkJMDAwMCAwMDEwICovCisJCSAoKGJ1ZlswXSAmIDB4MjApID8gMHgwMDAxIDogMCkgfCAvKiAJCTAwMDAgMDAwMSAqLworCQkgKChidWZbMV0gJiAweDA4KSA/IDB4MTAwMCA6IDApIHwgLyogMDAwMSAwMDAwCQkgICovCisJCSAoKGJ1ZlsxXSAmIDB4MTApID8gMHgwODAwIDogMCkgfCAvKiAwMDAwIDEwMDAJCSAgKi8KKwkJICgoYnVmWzFdICYgMHgyMCkgPyAweDA0MDAgOiAwKSB8IC8qIDAwMDAgMDEwMAkJICAqLworCQkgKChidWZbMV0gJiAweDQwKSA/IDB4MDIwMCA6IDApIHwgLyogMDAwMCAwMDEwCQkgICovCisJCSAoKGJ1ZlsxXSAmIDB4ODApID8gMHgwMTAwIDogMCk7ICAvKiAwMDAwIDAwMDEJCSAgKi8KIAotCWkyY2RwcmludGsoImlyIGhhdXBwYXVnZSAoZW0yODQwKTogY29kZT0weCUwMnggKHJjdj0weCUwMngpXG4iLAotCQkJY29kZSwgYnVmWzBdKTsKKwlpMmNkcHJpbnRrKCJpciBoYXVwcGF1Z2UgKGVtMjg0MCk6IGNvZGU9MHglMDJ4IChyY3Y9MHglMDJ4JTAyeClcbiIsCisJCQljb2RlLCBidWZbMV0sIGJ1ZlswXSk7CiAKIAkvKiByZXR1cm4ga2V5ICovCiAJKmlyX2tleSA9IGNvZGU7CkBAIC0zMzcsMTkgKzM1NCwyOCBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCWlyLT5pbnB1dCA9IGlucHV0X2RldjsKKwlpcl9jb25maWcgPSBFTTI4NzRfSVJfUkM1OworCisJLyogQWRqdXN0IHhjbGsgYmFzZWQgbyBJUiB0YWJsZSBmb3IgUkM1L05FQyB0YWJsZXMgKi8KKwlpZiAoZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9PSBJUl9UWVBFX1JDNSkgeworCQlkZXYtPmJvYXJkLnhjbGsgfD0gRU0yOFhYX1hDTEtfSVJfUkM1X01PREU7CisJCWlyLT5mdWxsX2NvZGUgPSAxOworCX0gZWxzZSAgaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPT0gSVJfVFlQRV9ORUMpIHsKKwkJZGV2LT5ib2FyZC54Y2xrICY9IH5FTTI4WFhfWENMS19JUl9SQzVfTU9ERTsKKwkJaXJfY29uZmlnID0gRU0yODc0X0lSX05FQzsKKwkJaXItPmZ1bGxfY29kZSA9IDE7CisJfQorCWVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIEVNMjhYWF9SMEZfWENMSywgZGV2LT5ib2FyZC54Y2xrLAorCQkJICAgICAgRU0yOFhYX1hDTEtfSVJfUkM1X01PREUpOwogCiAJLyogU2V0dXAgdGhlIHByb3BlciBoYW5kbGVyIGJhc2VkIG9uIHRoZSBjaGlwICovCiAJc3dpdGNoIChkZXYtPmNoaXBfaWQpIHsKIAljYXNlIENISVBfSURfRU0yODYwOgogCWNhc2UgQ0hJUF9JRF9FTTI4ODM6Ci0JCWlmIChkZXYtPm1vZGVsID09IEVNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MCkKLQkJCWlyLT5mdWxsX2NvZGUgPSAxOwogCQlpci0+Z2V0X2tleSA9IGRlZmF1bHRfcG9sbGluZ19nZXRrZXk7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9JRF9FTTI4NzQ6CiAJCWlyLT5nZXRfa2V5ID0gZW0yODc0X3BvbGxpbmdfZ2V0a2V5OwotCQkvKiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBSQzUsIHNvIGVuYWJsZSBpdCAqLwotCQlpcl9jb25maWcgPSBFTTI4NzRfSVJfUkM1OwogCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjg3NF9SNTBfSVJfQ09ORklHLCAmaXJfY29uZmlnLCAxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTM2Nyw4ICszOTMsNyBAQAogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSk7CiAJc3RybGNhdChpci0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoaXItPnBoeXMpKTsKIAotCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBJUl9UWVBFX09USEVSLAotCQkJICAgICBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgSVJfVFlQRV9PVEhFUik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX291dF9mcmVlOwogCkBAIC0zODcsNyArNDEyLDcgQEAKIAllbTI4eHhfaXJfc3RhcnQoaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCkBAIC0zOTYsOCArNDIxLDYgQEAKIAllbTI4eHhfaXJfc3RvcChpcik7CiAJZGV2LT5pciA9IE5VTEw7CiAgZXJyX291dF9mcmVlOgotCWlyX2lucHV0X2ZyZWUoaW5wdXRfZGV2KTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKGlyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDExLDggKzQzNCw3IEBACiAJCXJldHVybiAwOwogCiAJZW0yOHh4X2lyX3N0b3AoaXIpOwotCWlyX2lucHV0X2ZyZWUoaXItPmlucHV0KTsKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpci0+aW5wdXQpOworCWlyX2lucHV0X3VucmVnaXN0ZXIoaXItPmlucHV0KTsKIAlrZnJlZShpcik7CiAKIAkvKiBkb25lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IDdhZDY1MzcuLjg0OWIxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0yMDgxLDIyICsyMDgxLDMwIEBACiAgKi8KIHN0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcjsKLQlpbnQgZXJyQ29kZSA9IDAsIHJhZGlvOwotCXN0cnVjdCBlbTI4eHggKmRldjsKLQllbnVtIHY0bDJfYnVmX3R5cGUgZmhfdHlwZTsKKwlpbnQgZXJyQ29kZSA9IDAsIHJhZGlvID0gMDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbHApOworCWVudW0gdjRsMl9idWZfdHlwZSBmaF90eXBlID0gMDsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICpmaDsKIAllbnVtIHY0bDJfZmllbGQgZmllbGQ7CiAKLQlkZXYgPSBlbTI4eHhfZ2V0X2RldmljZShtaW5vciwgJmZoX3R5cGUsICZyYWRpbyk7Ci0KLQlpZiAoTlVMTCA9PSBkZXYpCi0JCXJldHVybiAtRU5PREVWOworCXN3aXRjaCAodmRldi0+dmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCWZoX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfVkJJOgorCQlmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9SQURJTzoKKwkJcmFkaW8gPSAxOworCQlicmVhazsKKwl9CiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0JZW0yOHh4X3ZpZGVvZGJnKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsCi0JCQkJbWlub3IsIHY0bDJfdHlwZV9uYW1lc1tmaF90eXBlXSwgZGV2LT51c2Vycyk7CisJZW0yOHh4X3ZpZGVvZGJnKCJvcGVuIGRldj0lcyB0eXBlPSVzIHVzZXJzPSVkXG4iLAorCQkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgdjRsMl90eXBlX25hbWVzW2ZoX3R5cGVdLAorCQkJZGV2LT51c2Vycyk7CiAKIAogCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVtMjh4eF9maCksIEdGUF9LRVJORUwpOwpAQCAtMjE2MCwyNSArMjE2OCwyNSBAQAogCS8qRklYTUU6IEkyQyBJUiBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovCiAKIAlpZiAoZGV2LT5yYWRpb19kZXYpIHsKLQkJaWYgKC0xICE9IGRldi0+cmFkaW9fZGV2LT5taW5vcikKKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2LT5yYWRpb19kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5yYWRpb19kZXYpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnJhZGlvX2Rldik7CiAJCWRldi0+cmFkaW9fZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldi0+dmJpX2RldikgewotCQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92YmklZCBkZXJlZ2lzdGVyZWRcbiIsCi0JCQkgICAgZGV2LT52YmlfZGV2LT5udW0pOwotCQlpZiAoLTEgIT0gZGV2LT52YmlfZGV2LT5taW5vcikKKwkJZW0yOHh4X2luZm8oIlY0TDIgZGV2aWNlICVzIGRlcmVnaXN0ZXJlZFxuIiwKKwkJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmJpX2RldikpOworCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnZiaV9kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52YmlfZGV2KTsKIAkJZGV2LT52YmlfZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldi0+dmRldikgewotCQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZFxuIiwKLQkJCSAgICBkZXYtPnZkZXYtPm51bSk7Ci0JCWlmICgtMSAhPSBkZXYtPnZkZXYtPm1pbm9yKQorCQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgJXMgZGVyZWdpc3RlcmVkXG4iLAorCQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52ZGV2KSk7CisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+dmRldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOwpAQCAtMjM5Nyw4ICsyNDA1LDYgQEAKIAkucmVsZWFzZSAgICAgICAgICAgICAgICAgICAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKIAkuaW9jdGxfb3BzIAkJICAgID0gJnZpZGVvX2lvY3RsX29wcywKIAotCS5taW5vciAgICAgICAgICAgICAgICAgICAgICA9IC0xLAotCiAJLnR2bm9ybXMgICAgICAgICAgICAgICAgICAgID0gVjRMMl9TVERfQUxMLAogCS5jdXJyZW50X25vcm0gICAgICAgICAgICAgICA9IFY0TDJfU1REX1BBTCwKIH07CkBAIC0yNDMzLDcgKzI0MzksNiBAQAogCS5uYW1lICAgICAgICAgICAgICAgICA9ICJlbTI4eHgtcmFkaW8iLAogCS5mb3BzICAgICAgICAgICAgICAgICA9ICZyYWRpb19mb3BzLAogCS5pb2N0bF9vcHMgCSAgICAgID0gJnJhZGlvX2lvY3RsX29wcywKLQkubWlub3IgICAgICAgICAgICAgICAgPSAtMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB1c2IgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI0NTEsNyArMjQ1Niw2IEBACiAJCXJldHVybiBOVUxMOwogCiAJKnZmZAkJPSAqdGVtcGxhdGU7Ci0JdmZkLT5taW5vcgk9IC0xOwogCXZmZC0+djRsMl9kZXYJPSAmZGV2LT52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZmQtPmRlYnVnCT0gdmlkZW9fZGVidWc7CkBAIC0yNDU5LDYgKzI0NjMsNyBAQAogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAlcyIsCiAJCSBkZXYtPm5hbWUsIHR5cGVfbmFtZSk7CiAKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CiAJcmV0dXJuIHZmZDsKIH0KIApAQCAtMjU0MCwxNiArMjU0NSwxNiBAQAogCQkJZW0yOHh4X2VycmRldigiY2FuJ3QgcmVnaXN0ZXIgcmFkaW8gZGV2aWNlXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJZW0yOHh4X2luZm8oIlJlZ2lzdGVyZWQgcmFkaW8gZGV2aWNlIGFzIC9kZXYvcmFkaW8lZFxuIiwKLQkJCSAgICBkZXYtPnJhZGlvX2Rldi0+bnVtKTsKKwkJZW0yOHh4X2luZm8oIlJlZ2lzdGVyZWQgcmFkaW8gZGV2aWNlIGFzICVzXG4iLAorCQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT5yYWRpb19kZXYpKTsKIAl9CiAKLQllbTI4eHhfaW5mbygiVjRMMiB2aWRlbyBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQkJZGV2LT52ZGV2LT5udW0pOworCWVtMjh4eF9pbmZvKCJWNEwyIHZpZGVvIGRldmljZSByZWdpc3RlcmVkIGFzICVzXG4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZkZXYpKTsKIAogCWlmIChkZXYtPnZiaV9kZXYpCi0JCWVtMjh4eF9pbmZvKCJWNEwyIFZCSSBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZiaSVkXG4iLAotCQkJICAgIGRldi0+dmJpX2Rldi0+bnVtKTsKKwkJZW0yOHh4X2luZm8oIlY0TDIgVkJJIGRldmljZSByZWdpc3RlcmVkIGFzICVzXG4iLAorCQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52YmlfZGV2KSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggNDQxZGY2NC4uODBkOWI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTY0Myw2ICs2NDMsOCBAQAogCQkJICBpbnQgbGVuKTsKIGludCBlbTI4eHhfd3JpdGVfcmVncyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIGNoYXIgKmJ1ZiwgaW50IGxlbik7CiBpbnQgZW0yOHh4X3dyaXRlX3JlZyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIHU4IHZhbCk7CitpbnQgZW0yOHh4X3dyaXRlX3JlZ19iaXRzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAorCQkJCSB1OCBiaXRtYXNrKTsKIAogaW50IGVtMjh4eF9yZWFkX2FjOTcoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZWcpOwogaW50IGVtMjh4eF93cml0ZV9hYzk3KHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVnLCB1MTYgdmFsKTsKQEAgLTY2Niw5ICs2NjgsNiBAQAogdm9pZCBlbTI4eHhfd2FrZV9pMmMoc3RydWN0IGVtMjh4eCAqZGV2KTsKIHZvaWQgZW0yOHh4X3JlbW92ZV9mcm9tX2Rldmxpc3Qoc3RydWN0IGVtMjh4eCAqZGV2KTsKIHZvaWQgZW0yOHh4X2FkZF9pbnRvX2Rldmxpc3Qoc3RydWN0IGVtMjh4eCAqZGV2KTsKLXN0cnVjdCBlbTI4eHggKmVtMjh4eF9nZXRfZGV2aWNlKGludCBtaW5vciwKLQkJCQkgZW51bSB2NGwyX2J1Zl90eXBlICpmaF90eXBlLAotCQkJCSBpbnQgKmhhc19yYWRpbyk7CiBpbnQgZW0yOHh4X3JlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3QgZW0yOHh4X29wcyAqZGV2KTsKIHZvaWQgZW0yOHh4X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBlbTI4eHhfb3BzICpkZXYpOwogdm9pZCBlbTI4eHhfaW5pdF9leHRlbnNpb24oc3RydWN0IGVtMjh4eCAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggODg5ODdhNS4uZTZjMjNkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCkBAIC01ODcsOCArNTg3LDggQEAKIAllbHNlIGlmIChjYW0tPnN0cmVhbSAhPSBTVFJFQU1fT0ZGKSB7CiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVVJCIHRpbWVvdXQgcmVhY2hlZC4gVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBUbyAiCi0JCSAgICAgICAidXNlIGl0LCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5udW0pOworCQkgICAgICAgInVzZSBpdCwgY2xvc2UgYW5kIG9wZW4gJXMgYWdhaW4uIiwKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMTk1LDcgKzExOTUsOCBAQAogCiAJY2FtID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBldDYxeDI1MV9kZXZpY2UsIGtyZWYpOwogCi0JREJHKDIsICJWNEwyIGRldmljZSAvZGV2L3ZpZGVvJWQgZGVyZWdpc3RlcmVkIiwgY2FtLT52NGxkZXYtPm51bSk7CisJREJHKDIsICJWNEwyIGRldmljZSAlcyBkZXJlZ2lzdGVyZWQiLAorCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIE5VTEwpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2KTsKIAl1c2JfcHV0X2RldihjYW0tPnVzYmRldik7CkBAIC0xMjM2LDggKzEyMzcsOCBAQAogCX0KIAogCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBhbHJlYWR5IGluIHVzZSIsCi0JCSAgICAgICBjYW0tPnY0bGRldi0+bnVtKTsKKwkJREJHKDIsICJEZXZpY2UgJXMgaXMgYWxyZWFkeSBpbiB1c2UiLAorCQkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlEQkcoMywgIlNpbXVsdGFuZW91cyBvcGVucyBhcmUgbm90IHN1cHBvcnRlZCIpOwogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAogCQkgICAgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKQEAgLTEyODAsNyArMTI4MSw4IEBACiAJY2FtLT5mcmFtZV9jb3VudCA9IDA7CiAJZXQ2MXgyNTFfZW1wdHlfZnJhbWVxdWV1ZXMoY2FtKTsKIAotCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuIiwgY2FtLT52NGxkZXYtPm51bSk7CisJREJHKDMsICJWaWRlbyBkZXZpY2UgJXMgaXMgb3BlbiIsCisJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmY2FtLT5vcGVuX211dGV4KTsKQEAgLTEzMDQsNyArMTMwNiw4IEBACiAJY2FtLT51c2Vycy0tOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9ucigmY2FtLT53YWl0X29wZW4sIDEpOwogCi0JREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGNsb3NlZCIsIGNhbS0+djRsZGV2LT5udW0pOworCURCRygzLCAiVmlkZW8gZGV2aWNlICVzIGNsb3NlZCIsCisJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAogCWtyZWZfcHV0KCZjYW0tPmtyZWYsIGV0NjF4MjUxX3JlbGVhc2VfcmVzb3VyY2VzKTsKIApAQCAtMTg0Niw4ICsxODQ5LDggQEAKIAlpZiAoZXJyKSB7IC8qIGF0b21pYywgbm8gcm9sbGJhY2sgaW4gaW9jdGwoKSAqLwogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0NST1AgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuIFRvICIKLQkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKKwkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gJXMgYWdhaW4uIiwKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xODU5LDggKzE4NjIsOCBAQAogCSAgICBuYnVmZmVycyAhPSBldDYxeDI1MV9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywgY2FtLT5pbykpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCi0JCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICVzIGFnYWluLiIsCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjA2OSw4ICsyMDcyLDggQEAKIAlpZiAoZXJyKSB7IC8qIGF0b21pYywgbm8gcm9sbGJhY2sgaW4gaW9jdGwoKSAqLwogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5udW0pOworCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTIwODEsOCArMjA4NCw4IEBACiAJICAgIG5idWZmZXJzICE9IGV0NjF4MjUxX3JlcXVlc3RfYnVmZmVycyhjYW0sIG5idWZmZXJzLCBjYW0tPmlvKSkgewogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoIG1lbW9yeS4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5udW0pOworCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIxMzAsNyArMjEzMyw3IEBACiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgogCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgotCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bnVtKTsKKwkJICAgICAgICIlcyBhZ2Fpbi4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjU4NCw3ICsyNTg3LDYgQEAKIAogCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgIkVUNjFYWzEyXTUxIFBDIENhbWVyYSIpOwogCWNhbS0+djRsZGV2LT5mb3BzID0gJmV0NjF4MjUxX2ZvcHM7Ci0JY2FtLT52NGxkZXYtPm1pbm9yID0gdmlkZW9fbnJbZGV2X25yXTsKIAljYW0tPnY0bGRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCWNhbS0+djRsZGV2LT5wYXJlbnQgPSAmdWRldi0+ZGV2OwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBjYW0pOwpAQCAtMjYwMyw3ICsyNjA1LDggQEAKIAkJZ290byBmYWlsOwogCX0KIAotCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bnVtKTsKKwlEQkcoMiwgIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgJXMiLAorCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAKIAljYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgPSBmb3JjZV9tdW5tYXBbZGV2X25yXTsKIAljYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ID0gZnJhbWVfdGltZW91dFtkZXZfbnJdOwpAQCAtMjY1NCw5ICsyNjU3LDkgQEAKIAlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBjYW0tPnY0bGRldi0+bmFtZSk7CiAKIAlpZiAoY2FtLT51c2VycykgewotCQlEQkcoMiwgIkRldmljZSAvZGV2L3ZpZGVvJWQgaXMgb3BlbiEgRGVyZWdpc3RyYXRpb24gYW5kICIKLQkJICAgICAgICJtZW1vcnkgZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZC4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCURCRygyLCAiRGV2aWNlICVzIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgorCQkgICAgICAgImRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQuIiwKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJZXQ2MXgyNTFfc3RvcF90cmFuc2ZlcihjYW0pOwogCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggMmYwYjhkNi4uYzk4YjVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtMTA0NiwxNCArMTA0NiwxNCBAQAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCi1zdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7VVNCX0RFVklDRSgweDA1NzIsIDB4MDA0MSl9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CiAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCi1zdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBfX2RldmluaXQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCmluZGV4IDlkZTg2NDEuLmZkZjRjMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCkBAIC04NjQsNyArODY0LDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAJe1VTQl9ERVZJQ0UoMHgxMDJjLCAweDYxNTEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFTMTA2fSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0VUNjFYMjUxICYmICFkZWZpbmVkIENPTkZJR19VU0JfRVQ2MVgyNTFfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgxMDJjLCAweDYyNTEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfVEFTNTEzMENYWH0sCkBAIC04NzUsNyArODc1LDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwotc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkxMzIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jCmluZGV4IDEzNTVlNTIuLmMyNzZhN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkxMzIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTEzMjAuYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBtaTEzMjBfY2FtZXJhX3NldHRpbmdzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgbWkxMzIwX2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMjAyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTIwMjAuYwppbmRleCA4MGNiM2YxLi43YzMxYjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMjAyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkyMDIwLmMKQEAgLTc2OSw3ICs3NjksNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWkyMDIwX2NhbWVyYV9zZXR0aW5ncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IG1pMjAyMF9jYW1lcmFfc2V0dGluZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCmluZGV4IGE2OTVlMGEuLjQ4NzhjOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHN0YXRpYyB2b2lkIHNkX2NhbGxiYWNrKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiAKIHN0YXRpYyBpbnQgZ2w4NjBfZ3Vlc3Nfc2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQlzMzIgdmVuZG9yX2lkLCBzMzIgcHJvZHVjdF9pZCk7CisJCQkJdTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT0gZHJpdmVyIG9wdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMzI2LDExICszMjYsMTEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwotCXMzMiB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQ7CisJdTE2IHZlbmRvcl9pZCwgcHJvZHVjdF9pZDsKIAogCS8qIEdldCBVU0IgVmVuZG9ySUQgYW5kIFByb2R1Y3RJRCAqLwotCXZlbmRvcl9pZCAgPSBsZTE2X3RvX2NwdShpZC0+aWRWZW5kb3IpOwotCXByb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdShpZC0+aWRQcm9kdWN0KTsKKwl2ZW5kb3JfaWQgID0gaWQtPmlkVmVuZG9yOworCXByb2R1Y3RfaWQgPSBpZC0+aWRQcm9kdWN0OwogCiAJc2QtPm5iUmlnaHRVcCA9IDE7CiAJc2QtPm5iSW0gPSAtMTsKQEAgLTUzNCw4ICs1MzQsOCBAQAogCQlnc3BjYV9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJCVBERUJVRyhEX1BST0JFLAotCQkJIkNhbWVyYSBpcyBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCIsCi0JCQlnc3BjYV9kZXYtPnZkZXYubWlub3IpOworCQkJIkNhbWVyYSBpcyBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlICVzIiwKKwkJCXZpZGVvX2RldmljZV9ub2RlX25hbWUoJmdzcGNhX2Rldi0+dmRldikpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC02NzMsNyArNjczLDcgQEAKIH0KIAogc3RhdGljIGludCBnbDg2MF9ndWVzc19zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJCXMzMiB2ZW5kb3JfaWQsIHMzMiBwcm9kdWN0X2lkKQorCQkJCXUxNiB2ZW5kb3JfaWQsIHUxNiBwcm9kdWN0X2lkKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCBwcm9iZSwgbmIyNiwgbmI5Niwgbk9WLCBudHJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IDQwNzZmOGUuLmU5MzBhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTMwNCw3ICszMDQsNiBAQAogCQlqID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKIAkJZ3NwY2FfZGV2LT5jdXJfZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVtqXTsKIAl9Ci0JcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChnc3BjYV9mcmFtZV9hZGQpOwogCkBAIC0zMjEsNyArMzIwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyB2b2lkICpydm1hbGxvYyhsb25nIHNpemUpCiB7CiAJdm9pZCAqbWVtOwogCXVuc2lnbmVkIGxvbmcgYWRyOwpAQCAtMzI5LDcgKzMyOCw3IEBACiAJbWVtID0gdm1hbGxvY18zMihzaXplKTsKIAlpZiAobWVtICE9IE5VTEwpIHsKIAkJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQkJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKikgYWRyKSk7CiAJCQlhZHIgKz0gUEFHRV9TSVpFOwogCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CkBAIC03NjgsNiArNzY3LDcgQEAKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfcmVnaXN0ZXIoZ3NwY2FfZGV2LCByZWcpOwogCWVsc2UKQEAgLTc5MSw2ICs3OTEsNyBAQAogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJZ3NwY2FfZGV2LT51c2JfZXJyID0gMDsKIAlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQogCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9yZWdpc3Rlcihnc3BjYV9kZXYsIHJlZyk7CiAJZWxzZQpAQCAtODEyLDYgKzgxMyw3IEBACiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwogCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+Z2V0X2NoaXBfaWRlbnQoZ3NwY2FfZGV2LCBjaGlwKTsKIAllbHNlCkBAIC05ODMsMTEgKzk4NSw0MCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCkKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCWludCBtb2RlID0gd3hoX3RvX21vZGUoZ3NwY2FfZGV2LCBmaXZhbC0+d2lkdGgsIGZpdmFsLT5oZWlnaHQpOworCV9fdTMyIGk7CisKKwlpZiAoZ3NwY2FfZGV2LT5jYW0ubW9kZV9mcmFtZXJhdGVzID09IE5VTEwgfHwKKwkJCWdzcGNhX2Rldi0+Y2FtLm1vZGVfZnJhbWVyYXRlc1ttb2RlXS5ucmF0ZXMgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZml2YWwtPnBpeGVsX2Zvcm1hdCAhPQorCQkJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbbW9kZV0ucGl4ZWxmb3JtYXQpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+Y2FtLm1vZGVfZnJhbWVyYXRlc1ttb2RlXS5ucmF0ZXM7IGkrKykgeworCQlpZiAoZml2YWwtPmluZGV4ID09IGkpIHsKKwkJCWZpdmFsLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7CisJCQlmaXZhbC0+ZGlzY3JldGUubnVtZXJhdG9yID0gMTsKKwkJCWZpdmFsLT5kaXNjcmV0ZS5kZW5vbWluYXRvciA9CisJCQkJZ3NwY2FfZGV2LT5jYW0ubW9kZV9mcmFtZXJhdGVzW21vZGVdLnJhdGVzW2ldOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIHZvaWQgZ3NwY2FfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpCiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gY29udGFpbmVyX29mKHZmZCwgc3RydWN0IGdzcGNhX2RldiwgdmRldik7CiAKLQlQREVCVUcoRF9QUk9CRSwgIi9kZXYvdmlkZW8lZCByZWxlYXNlZCIsIGdzcGNhX2Rldi0+dmRldi5udW0pOworCVBERUJVRyhEX1BST0JFLCAiJXMgcmVsZWFzZWQiLAorCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKIAogCWtmcmVlKGdzcGNhX2Rldi0+dXNiX2J1Zik7CiAJa2ZyZWUoZ3NwY2FfZGV2KTsKQEAgLTEwNTMsNiArMTA4NCw3IEBACiAJaWYgKGdzcGNhX2Rldi0+Y2FwdF9maWxlID09IGZpbGUpIHsKIAkJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAJCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJCQlnc3BjYV9zdHJlYW1fb2ZmKGdzcGNhX2Rldik7CiAJCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQl9CkBAIC0xMTQzLDEyICsxMTc1LDE0IEBACiAJCQkJY29udGludWU7CiAJCQljdHJscyA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwogCQl9CisJCWlmIChjdHJscyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJY3RybHMgPSBnZXRfY3RybChnc3BjYV9kZXYsIGlkKTsKKwkJaWYgKGN0cmxzID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaSA9IGN0cmxzIC0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsczsKIAl9Ci0JaWYgKGN0cmxzID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwogCW1lbWNweShxX2N0cmwsIGN0cmxzLCBzaXplb2YgKnFfY3RybCk7CiAJaWYgKGdzcGNhX2Rldi0+Y3RybF9pbmFjICYgKDEgPDwgaSkpCiAJCXFfY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CkBAIC0xMTcyLDYgKzEyMDYsNyBAQAogCVBERUJVRyhEX0NPTkYsICJzZXQgY3RybCBbJTA4eF0gPSAlZCIsIGN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJZ3NwY2FfZGV2LT51c2JfZXJyID0gMDsKIAlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQogCQlyZXQgPSBjdHJscy0+c2V0KGdzcGNhX2RldiwgY3RybC0+dmFsdWUpOwogCWVsc2UKQEAgLTExOTMsNiArMTIyOCw3IEBACiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwogCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldCA9IGN0cmxzLT5nZXQoZ3NwY2FfZGV2LCAmY3RybC0+dmFsdWUpOwogCWVsc2UKQEAgLTEzMDcsNiArMTM0Myw3IEBACiAJLyogc3RvcCBzdHJlYW1pbmcgKi8KIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKIAkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJCWdzcGNhX3N0cmVhbV9vZmYoZ3NwY2FfZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAl9CkBAIC0xMzk4LDYgKzE0MzUsNyBAQAogCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCWdvdG8gb3V0OwogCX0KKwlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwogCWdzcGNhX3N0cmVhbV9vZmYoZ3NwY2FfZGV2KTsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCkBAIC0xNDIzLDYgKzE0NjEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwogCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+Z2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOwogCWVsc2UKQEAgLTE0NDEsNiArMTQ4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfamNvbXAoZ3NwY2FfZGV2LCBqcGVnY29tcCk7CiAJZWxzZQpAQCAtMTQ2MSw2ICsxNTAxLDcgQEAKIAogCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCiAJCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwKIAkJCQkJCQkJIHBhcm0pOwpAQCAtMTQ5MCw2ICsxNTMxLDcgQEAKIAogCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCiAJCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwKIAkJCQkJCQkJIHBhcm0pOwpAQCAtMTYxMyw3ICsxNjU1LDcgQEAKIAkJc2l6ZSAtPSBQQUdFX1NJWkU7CiAJfQogCi0Jdm1hLT52bV9vcHMgPSAoc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICopICZnc3BjYV92bV9vcHM7CisJdm1hLT52bV9vcHMgPSAmZ3NwY2Ffdm1fb3BzOwogCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gZnJhbWU7CiAJZ3NwY2Ffdm1fb3Blbih2bWEpOwogCXJldCA9IDA7CkBAIC0xNjYxLDYgKzE3MDMsNyBAQAogCiAJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2spIHsKIAkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CiAJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCiAJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKGdzcGNhX2Rldik7CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CkBAIC0xOTczLDYgKzIwMTYsNyBAQAogCS52aWRpb2NfZ19wYXJtCQk9IHZpZGlvY19nX3Bhcm0sCiAJLnZpZGlvY19zX3Bhcm0JCT0gdmlkaW9jX3NfcGFybSwKIAkudmlkaW9jX2VudW1fZnJhbWVzaXplcyA9IHZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMsCisJLnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzID0gdmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS52aWRpb2NfZ19yZWdpc3Rlcgk9IHZpZGlvY19nX3JlZ2lzdGVyLAogCS52aWRpb2Nfc19yZWdpc3Rlcgk9IHZpZGlvY19zX3JlZ2lzdGVyLApAQCAtMTk4OCw3ICsyMDMyLDYgQEAKIAkuZm9wcyA9ICZkZXZfZm9wcywKIAkuaW9jdGxfb3BzID0gJmRldl9pb2N0bF9vcHMsCiAJLnJlbGVhc2UgPSBnc3BjYV9yZWxlYXNlLAotCS5taW5vciA9IC0xLAogfTsKIAogLyoKQEAgLTIwNDksOSArMjA5Miw2IEBACiAJcmV0ID0gc2RfZGVzYy0+aW5pdChnc3BjYV9kZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKLQlyZXQgPSBnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKIAlnc3BjYV9zZXRfZGVmYXVsdF9tb2RlKGdzcGNhX2Rldik7CiAKIAltdXRleF9pbml0KCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKQEAgLTIwNzMsNyArMjExMyw3IEBACiAJfQogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBnc3BjYV9kZXYpOwotCVBERUJVRyhEX1BST0JFLCAiL2Rldi92aWRlbyVkIGNyZWF0ZWQiLCBnc3BjYV9kZXYtPnZkZXYubnVtKTsKKwlQREVCVUcoRF9QUk9CRSwgIiVzIGNyZWF0ZWQiLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKIAlyZXR1cm4gMDsKIG91dDoKIAlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwpAQCAtMjA5Miw3ICsyMTMyLDggQEAKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JUERFQlVHKERfUFJPQkUsICIvZGV2L3ZpZGVvJWQgZGlzY29ubmVjdCIsIGdzcGNhX2Rldi0+dmRldi5udW0pOworCVBERUJVRyhEX1BST0JFLCAiJXMgZGlzY29ubmVjdCIsCisJCXZpZGVvX2RldmljZV9ub2RlX25hbWUoJmdzcGNhX2Rldi0+dmRldikpOwogCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCAxODE2MTczLi41OWM3OTQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtNDUsMTEgKzQ1LDIwIEBACiAvKiBpbWFnZSB0cmFuc2ZlcnMgKi8KICNkZWZpbmUgTUFYX05VUkJTIDQJCS8qIG1heCBudW1iZXIgb2YgVVJCcyAqLwogCisKKy8qIHVzZWQgdG8gbGlzdCBmcmFtZXJhdGVzIHN1cHBvcnRlZCBieSBhIGNhbWVyYSBtb2RlIChyZXNvbHV0aW9uKSAqLworc3RydWN0IGZyYW1lcmF0ZXMgeworCWludCAqcmF0ZXM7CisJaW50IG5yYXRlczsKK307CisKIC8qIGRldmljZSBpbmZvcm1hdGlvbiAtIHNldCBhdCBwcm9iZSB0aW1lICovCiBzdHJ1Y3QgY2FtIHsKIAlpbnQgYnVsa19zaXplOwkJLyogYnVmZmVyIHNpemUgd2hlbiBpbWFnZSB0cmFuc2ZlciBieSBidWxrICovCiAJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FtX21vZGU7CS8qIHNpemUgbm1vZGVzICovCiAJY2hhciBubW9kZXM7CisJY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgKm1vZGVfZnJhbWVyYXRlczsgLyogbXVzdCBoYXZlIHNpemUgbm1vZGUsCisJCQkJCQkgICAqIGp1c3QgbGlrZSBjYW1fbW9kZSAqLwogCV9fdTggYnVsa19udXJiczsJLyogbnVtYmVyIG9mIFVSQnMgaW4gYnVsayBtb2RlCiAJCQkJICogLSBjYW5ub3QgYmUgPiBNQVhfTlVSQlMKIAkJCQkgKiAtIHdoZW4gMCBhbmQgYnVsa19zaXplICE9IDAgbWVhbnMKQEAgLTE3MSw2ICsxODAsNyBAQAogCXN0cnVjdCBtdXRleCB1c2JfbG9jazsJCS8qIHVzYiBleGNoYW5nZSBwcm90ZWN0aW9uICovCiAJc3RydWN0IG11dGV4IHJlYWRfbG9jazsJCS8qIHJlYWQgcHJvdGVjdGlvbiAqLwogCXN0cnVjdCBtdXRleCBxdWV1ZV9sb2NrOwkvKiBJU09DIHF1ZXVlIHByb3RlY3Rpb24gKi8KKwlpbnQgdXNiX2VycjsJCQkvKiBVU0IgZXJyb3IgLSBwcm90ZWN0ZWQgYnkgdXNiX2xvY2sgKi8KICNpZmRlZiBDT05GSUdfUE0KIAljaGFyIGZyb3plbjsJCQkvKiBzdXNwZW5kIC0gcmVzdW1lICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggODQ0ZmMxZDguLjQyOTRjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCkBAIC04MSw3ICs4MSw3IEBACiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CiAKLWludCBtNTYwMl93YWl0X2Zvcl9pMmMoc3RydWN0IHNkICpzZCkKK3N0YXRpYyBpbnQgbTU2MDJfd2FpdF9mb3JfaTJjKHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGVycjsKIAl1OCBkYXRhOwpAQCAtMzg4LDcgKzM4OCw3IEBACiAJCQkgICAgICAgVEhJU19NT0RVTEUpOwogfQogCi12b2lkIG01NjAyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCitzdGF0aWMgdm9pZCBtNTYwMl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKaW5kZXggYzI3MzlkNi4uOTIzY2RkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgcmVzX2luaXRfb3Y5NjUwW2ldWzFdLAogCQkJCXJlc19pbml0X292OTY1MFtpXVsyXSk7CiAJCWVsc2UgaWYgKHJlc19pbml0X292OTY1MFtpXVswXSA9PSBTRU5TT1IpIHsKLQkJCXU4IGRhdGEgPSByZXNfaW5pdF9vdjk2NTBbaV1bMl07CisJCQlkYXRhID0gcmVzX2luaXRfb3Y5NjUwW2ldWzJdOwogCQkJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLAogCQkJCXJlc19pbml0X292OTY1MFtpXVsxXSwgJmRhdGEsIDEpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCBhMjdhZmViLi5hYTJmM2M3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC01MjUsNyArNTI1LDEwIEBACiAJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWRhdGEgPSAoZGF0YSAmIDB4ZmUpIHwgIXZhbDsKKwlpZiAodmFsKQorCQlkYXRhICY9IDB4ZmU7CisJZWxzZQorCQlkYXRhIHw9IDB4MDE7CiAJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTcwLDcgKzU3MywxMCBAQAogCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlkYXRhID0gKGRhdGEgJiAweGZlKSB8ICF2YWw7CisJaWYgKHZhbCkKKwkJZGF0YSAmPSAweGZlOworCWVsc2UKKwkJZGF0YSB8PSAweDAxOwogCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwppbmRleCAxMjZkOTY4Li45MTU0ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCkBAIC02Nyw3ICs2Nyw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIGdsb2JhbCBwYXJhbWV0ZXJzICovCi1pbnQgZm9yY2Vfc2Vuc29yX3R5cGUgPSAtMTsKK3N0YXRpYyBpbnQgZm9yY2Vfc2Vuc29yX3R5cGUgPSAtMTsKIG1vZHVsZV9wYXJhbShmb3JjZV9zZW5zb3JfdHlwZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc2Vuc29yX3R5cGUsICJGb3JjZSBzZW5zb3IgdHlwZSAoLTEgKGF1dG8pLCAwIG9yIDEpIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCBhZDllYzMzLi5iNGY5NjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0xOTgyLDcgKzE5ODIsNyBAQAogewogCWludCByZXQ7CiAKLQkqKCh1MzIgKilzZC0+Z3NwY2FfZGV2LnVzYl9idWYpID0gX19jcHVfdG9fbGUzMih2YWx1ZSk7CisJKigoX19sZTMyICopIHNkLT5nc3BjYV9kZXYudXNiX2J1ZikgPSBfX2NwdV90b19sZTMyKHZhbHVlKTsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhzZC0+Z3NwY2FfZGV2LmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShzZC0+Z3NwY2FfZGV2LmRldiwgMCksCkBAIC0yMDIxLDkgKzIwMjEsOSBAQAogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCi0JCWRvCisJCWRvIHsKIAkJCXJjID0gcmVnX3Ioc2QsIFI1MTFfSTJDX0NUTCk7Ci0JCXdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDEpID09IDApKTsgLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQl9IHdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDEpID09IDApKTsgLyogUmV0cnkgdW50aWwgaWRsZSAqLwogCiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CkBAIC0yMDU1LDkgKzIwNTUsOSBAQAogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCi0JCWRvCisJCWRvIHsKIAkJCXJjID0gcmVnX3Ioc2QsIFI1MTFfSTJDX0NUTCk7Ci0JCXdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDEpID09IDApKTsgLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQl9IHdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDEpID09IDApKTsgLyogUmV0cnkgdW50aWwgaWRsZSAqLwogCiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CkBAIC0yMDgxLDkgKzIwODEsOSBAQAogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCi0JCWRvCisJCWRvIHsKIAkJCXJjID0gcmVnX3Ioc2QsIFI1MTFfSTJDX0NUTCk7Ci0JCXdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDEpID09IDApKTsgLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQl9IHdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDEpID09IDApKTsgLyogUmV0cnkgdW50aWwgaWRsZSAqLwogCiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jCmluZGV4IDc0YWNjZWUuLmRlMGI2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jCkBAIC05MCw2ICs5MCw5IEBACiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKIAlfX3U4IGhmbGlwOwogCV9fdTggdmZsaXA7CisJdTggZmxhZ3M7CisjZGVmaW5lIEZMX0hGTElQIDB4MDEJCS8qIG1pcnJvcmVkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgRkxfVkZMSVAgMHgwMgkJLyogdmVydGljYWwgZmxpcHBlZCBieSBkZWZhdWx0ICovCiAKIAl1OCBzb2ZfcmVhZDsKIAl1OCBhdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzOwpAQCAtNTUyLDYgKzU1NSw3IEBACiAJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKIAlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJc2QtPmZsYWdzID0gaWQtPmRyaXZlcl9pbmZvOwogCXJldHVybiAwOwogfQogCkBAIC03MDgsMTAgKzcxMiwxNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgcmV0OwotCV9fdTggZGF0YTsKKwl1OCBkYXRhLCBoZmxpcCwgdmZsaXA7CisKKwloZmxpcCA9IHNkLT5oZmxpcDsKKwlpZiAoc2QtPmZsYWdzICYgRkxfSEZMSVApCisJCWhmbGlwID0gIWhmbGlwOworCXZmbGlwID0gc2QtPnZmbGlwOworCWlmIChzZC0+ZmxhZ3MgJiBGTF9WRkxJUCkKKwkJdmZsaXAgPSAhdmZsaXA7CiAKIAlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJLyogcGFnZSAzICovCi0JZGF0YSA9IChzZC0+aGZsaXAgPyAweDA4IDogMHgwMCkgfCAoc2QtPnZmbGlwID8gMHgwNCA6IDB4MDApOworCWRhdGEgPSAoaGZsaXAgPyAweDA4IDogMHgwMCkgfCAodmZsaXAgPyAweDA0IDogMHgwMCk7CiAJaWYgKDAgPD0gcmV0KQogCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCkBAIC0xMjE4LDE1ICsxMjI5LDE1IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDA5KX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjApfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyMSl9LAotCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjIyKX0sCi0Je1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjQpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyMiksIC5kcml2ZXJfaW5mbyA9IEZMX1ZGTElQfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyNCksIC5kcml2ZXJfaW5mbyA9IEZMX1ZGTElQfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyNil9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjI4KX0sCi0Je1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjkpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyOSksIC5kcml2ZXJfaW5mbyA9IEZMX1ZGTElQfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYyYSl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjJjKX0sCiAJe30KQEAgLTEyMzQsNyArMTI0NSw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKIAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KLXN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IGU1Njk3YTYuLjQyY2ZjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC04NjMsNyArODYzLDcgQEAKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwotc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDApfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjYwMSl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjAzKX0sCkBAIC04NzUsNyArODc1LDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwotc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKaW5kZXggYjE5NDRhNy4uNGNmZjgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKQEAgLTExNTgsNyArMTE1OCw3IEBACiAJcmV0dXJuIGkyY193KGdzcGNhX2Rldiwgcm93KTsKIH0KIAotaW50IGkyY19yMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggKnZhbCkKK3N0YXRpYyBpbnQgaTJjX3IxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCAqdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCByb3dbOF07CkBAIC0xMTgzLDcgKzExODMsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaTJjX3IyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1MTYgKnZhbCkKK3N0YXRpYyBpbnQgaTJjX3IyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1MTYgKnZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdTggcm93WzhdOwpAQCAtMTQ3Niw4ICsxNDc2LDkgQEAKIAlpZiAoaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHNkLT5pbnB1dF9kZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNkLT5pbnB1dF90YXNrID0ga3RocmVhZF9ydW4oaW5wdXRfa3RocmVhZCwgZ3NwY2FfZGV2LCAic245YzIweC8lZCIsCi0JCQkJICAgICBnc3BjYV9kZXYtPnZkZXYubWlub3IpOworCXNkLT5pbnB1dF90YXNrID0ga3RocmVhZF9ydW4oaW5wdXRfa3RocmVhZCwgZ3NwY2FfZGV2LCAic245YzIweC8lcy0lcyIsCisJCQkJICAgICBnc3BjYV9kZXYtPmRldi0+YnVzLT5idXNfbmFtZSwKKwkJCQkgICAgIGdzcGNhX2Rldi0+ZGV2LT5kZXZwYXRoKTsKIAogCWlmIChJU19FUlIoc2QtPmlucHV0X3Rhc2spKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxNzQsOCArMjE3NSw3IEBACiB9CiAKICNkZWZpbmUgSFdfV0lOKG1vZGUsIGhzdGFydCwgdnN0YXJ0KSBcCi0oKGNvbnN0IHU4IFtdKXtoc3RhcnQgJiAweGZmLCBoc3RhcnQgPj4gOCwgXAotdnN0YXJ0ICYgMHhmZiwgdnN0YXJ0ID4+IDgsIFwKKygoY29uc3QgdTggW10pe2hzdGFydCwgMCwgdnN0YXJ0LCAwLCBcCiAobW9kZSAmIE1PREVfU1hHQSA/IDEyODAgPj4gNCA6IDY0MCA+PiA0KSwgXAogKG1vZGUgJiBNT0RFX1NYR0EgPyAxMDI0ID4+IDMgOiA0ODAgPj4gMyl9KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCA1YmU5NWJjLi5kZGZmMmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTEyMjYsNyArMTIyNiw3IEBACiAJLmRyaXZlcl9pbmZvID0gKFNFTlNPUl8gIyMgc2Vuc29yIDw8IDgpIHwgQlJJREdFXyAjIyBicmlkZ2UKIAogCi1zdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTAsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwLCAxMDEpfSwgLyogVEFTNTExMEMxQiAqLwogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCkBAIC0xMjU3LDcgKzEyNTcsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CiAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCi1zdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBfX2RldmluaXQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYwppbmRleCBhYjI4Y2MyLi4zOTI1N2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYwpAQCAtNjg1LDcgKzY4NSw3IEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KLXN0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXtVU0JfREVWSUNFKDB4MDZlMSwgMHhhMTkwKX0sCiAvKmZpeG1lOiBtYXkgYmUgSW50ZWxQQ0NhbWVyYVBybyBCUklER0VfU1BDQTUwNQogCXtVU0JfREVWSUNFKDB4MDczMywgMHgwNDMwKX0sICovCkBAIC02OTYsNyArNjk2LDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwotc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDhlMjMzMjAuLjJlMjkzNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMTI2LDEyICsxMjYsMTQgQEAKIH07CiAKIC8qIC0tIHJlYWQgYSByZWdpc3RlciAtLSAqLwotc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdTggcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJX191MTYgaW5kZXgpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXQ7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCiAJCQkweDAwLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCkBAIC0xNDEsMTggKzE0MywyMSBAQAogCQkJNTAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlQREVCVUcoRF9FUlIsICJyZWdfciBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogfQogCiAvKiAtLSB3cml0ZSBhIHJlZ2lzdGVyIC0tICovCi1zdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCV9fdTE2IGluZGV4LCBfX3UxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHJldDsKIAorCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCQkweDAxLAogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLApAQCAtMTYxLDEzICsxNjYsMTQgQEAKIAkJCU5VTEwsCiAJCQkwLAogCQkJNTAwKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlQREVCVUcoRF9FUlIsICJyZWdfdyBlcnIgJWQiLCByZXQpOwotCXJldHVybiByZXQ7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9CiB9CiAKIC8qIC0tIGdldCBhIGJ1bGsgdmFsdWUgKDQgYnl0ZXMpIC0tICovCi1zdGF0aWMgaW50IHJjdl92YWwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmN2X3ZhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlpbnQgYWRzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKQEAgLTE4MiwxNyArMTg4LDIyIEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDYzYSwgMCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDYzYiwgMCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDYzMCwgNSk7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlyZXQgPSB1c2JfYnVsa19tc2coZGV2LAogCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgMHgwNSksCiAJCQlnc3BjYV9kZXYtPnVzYl9idWYsCiAJCQk0LAkJLyogbGVuZ3RoICovCiAJCQkmYWxlbiwKIAkJCTUwMCk7CQkvKiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLwotCXJldHVybiByZXQ7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmN2X3ZhbCBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAvKiAtLSBzZW5kIGEgYnVsayB2YWx1ZSAtLSAqLwotc3RhdGljIGludCBzbmRfdmFsKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHNuZF92YWwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJaW50IGFkcywKIAkJCXVuc2lnbmVkIGludCB2YWwpCiB7CkBAIC0yMDEsMTYgKzIxMiw5IEBACiAJX191OCBzZXEgPSAwOwogCiAJaWYgKGFkcyA9PSAweDAwM2YwOCkgewotCQlyZXQgPSByZWdfcihnc3BjYV9kZXYsIDB4MDcwNCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBrbzsKLQkJcmV0ID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3MDUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8ga287Ci0JCXNlcSA9IHJldDsJCS8qIGtlZXAgdGhlIHNlcXVlbmNlIG51bWJlciAqLwotCQlyZXQgPSByZWdfcihnc3BjYV9kZXYsIDB4MDY1MCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBrbzsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDA3MDQpOworCQlzZXEgPSByZWdfcihnc3BjYV9kZXYsIDB4MDcwNSk7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwNjUwKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDY1NCwgc2VxKTsKIAl9IGVsc2UgewogCQlyZWdfdyhnc3BjYV9kZXYsIDB4NjU0LCAoYWRzID4+IDE2KSAmIDB4ZmYpOwpAQCAtMjIzLDYgKzIyNyw4IEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDY1YSwgMCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDY1YiwgMCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDY1MCwgNSk7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWwgPj4gMjQ7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsID4+IDE2OwogCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSA9IHZhbCA+PiA4OwpAQCAtMjMzLDI0ICsyMzksMjMgQEAKIAkJCTQsCiAJCQkmYWxlbiwKIAkJCTUwMCk7CS8qIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCi0JaWYgKHJldCA8IDApCi0JCWdvdG8ga287Ci0JaWYgKGFkcyA9PSAweDAwM2YwOCkgewotCQlzZXEgKz0gNDsKLQkJc2VxICY9IDB4M2Y7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHg3MDUsIHNlcSk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAic25kX3ZhbCBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfSBlbHNlIHsKKwkJaWYgKGFkcyA9PSAweDAwM2YwOCkgeworCQkJc2VxICs9IDQ7CisJCQlzZXEgJj0gMHgzZjsKKwkJCXJlZ193KGdzcGNhX2RldiwgMHg3MDUsIHNlcSk7CisJCX0KIAl9Ci0JcmV0dXJuIHJldDsKLWtvOgotCVBERUJVRyhEX0VSUiwgInNuZF92YWwgZXJyICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwogfQogCiAvKiBzZXQgYSBjYW1lcmEgcGFyYW1ldGVyICovCi1zdGF0aWMgaW50IHNldF9wYXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgc2V0X3BhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgIGludCBwYXJ2YWwpCiB7Ci0JcmV0dXJuIHNuZF92YWwoZ3NwY2FfZGV2LCAweDAwM2YwOCwgcGFydmFsKTsKKwlzbmRfdmFsKGdzcGNhX2RldiwgMHgwMDNmMDgsIHBhcnZhbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMzExLDE4ICszMTYsMTggQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OworCXU4IHJldDsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgcmVzcG9uZHMgKi8KIAl1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgMSk7CiAJcmV0ID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3NDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWlmIChyZXQgIT0gMHhmZikgewotCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sICJpbml0IHJlZzogMHglMDJ4IiwgcmV0KTsKLQkJcmV0dXJuIC0xOworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPj0gMCkgeworCQlpZiAocmV0ICE9IDB4ZmYpIHsKKwkJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgImluaXQgcmVnOiAweCUwMngiLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gLUVJTzsKKwkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCkBAIC0zNTcsMTUgKzM2MiwxMiBAQAogCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgInNldCBpbnRmICVkICVkIGZhaWxlZCIsCiAJCQlnc3BjYV9kZXYtPmlmYWNlLCBnc3BjYV9kZXYtPmFsdCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNjMwKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7CisJIHJlZ19yKGdzcGNhX2RldiwgMHgwNjMwKTsKIAlyY3ZfdmFsKGdzcGNhX2RldiwgMHgwMDAwMjApOwkvKiA8PCAodmFsdWUgZmYgZmYgZmYgZmYpICovCi0JcmV0ID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA2NTApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwlyZWdfcihnc3BjYV9kZXYsIDB4MDY1MCk7CiAJc25kX3ZhbChnc3BjYV9kZXYsIDB4MDAwMDIwLCAweGZmZmZmZmZmKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDYyMCwgMCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDA2MzAsIDApOwpAQCAtMzg0LDExICszODYsMTEgQEAKIAkvKiBzdGFydCB0aGUgdmlkZW8gZmxvdyAqLwogCXNldF9wYXIoZ3NwY2FfZGV2LCAweDAxMDAwMDAwKTsKIAlzZXRfcGFyKGdzcGNhX2RldiwgMHgwMTAwMDAwMCk7Ci0JUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0ZWQgYWx0OiAweCUwMngiLCBnc3BjYV9kZXYtPmFsdCk7Ci0JcmV0dXJuIDA7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA+PSAwKQorCQlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RhcnRlZCBhbHQ6IDB4JTAyeCIsCisJCQkJZ3NwY2FfZGV2LT5hbHQpOwogb3V0OgotCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgImNhbWVyYSBzdGFydCBlcnIgJWQiLCByZXQpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNDU2LDcgKzQ1OCw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTQ3NCw3ICs0NzYsNyBAQAogCXNkLT5jb250cmFzdCA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC00OTIsNyArNDk0LDcgQEAKIAlzZC0+Y29sb3JzID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNTEwLDcgKzUxMiw3IEBACiAJc2QtPmxpZ2h0ZnJlcSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGZyZXEoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNTUyLDcgKzU1NCw3IEBACiAJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKaW5kZXggNzJiZjNiNC4uNzE2ZGY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKQEAgLTQ2MCwxMyArNDYwLDE3IEBACiAJCSAgdTE2IGluZGV4LAogCQkgIHUxNiBsZW4pCiB7CisJaW50IHJldDsKKwogI2lmZGVmIEdTUENBX0RFQlVHCiAJaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKIAkJZXJyKCJyZWdfcjogYnVmZmVyIG92ZXJmbG93Iik7CiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAogCQkJcmVxLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCkBAIC00NzQsNiArNDc4LDEwIEBACiAJCQlpbmRleCwKIAkJCWxlbiA/IGdzcGNhX2Rldi0+dXNiX2J1ZiA6IE5VTEwsIGxlbiwKIAkJCTUwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3IgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KIH0KIAogLyogd3JpdGUgb25lIGJ5dGUgKi8KQEAgLTQ4Myw0MCArNDkxLDU1IEBACiAJCSAgIHUxNiBpbmRleCwKIAkJICAgdTE2IGJ5dGUpCiB7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gYnl0ZTsKLQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCXJlcSwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCXZhbHVlLCBpbmRleCwKIAkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKIAkJCTUwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3dfMSBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAvKiB3cml0ZSByZXEgLyBpbmRleCAvIHZhbHVlICovCi1zdGF0aWMgaW50IHJlZ193X3JpdihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfcml2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICAgICB1OCByZXEsIHUxNiBpbmRleCwgdTE2IHZhbHVlKQogeworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCQlyZXEsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7Ci0JUERFQlVHKERfVVNCTywgInJlZyB3cml0ZTogMHglMDJ4LDB4JTAyeDoweCUwMngsICVkIiwKLQkJcmVxLCBpbmRleCwgdmFsdWUsIHJldCk7Ci0JaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZTogZXJyb3IgJWQiLCByZXQpOwotCXJldHVybiByZXQ7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3dfcml2IGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwkJcmV0dXJuOworCX0KKwlQREVCVUcoRF9VU0JPLCAicmVnX3dfcml2OiAweCUwMngsMHglMDR4OjB4JTA0eCIsCisJCXJlcSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogLyogcmVhZCAxIGJ5dGUgKi8KLXN0YXRpYyBpbnQgcmVnX3JfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdTggcmVnX3JfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1MTYgdmFsdWUpCS8qIHdWYWx1ZSAqLwogewogCWludCByZXQ7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCTB4MjAsCQkJLyogcmVxdWVzdCAqLwpAQCAtNTI3LDE5ICs1NTAsMjIgQEAKIAkJCTUwMCk7CQkJLyogdGltZW91dCAqLwogCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ19yXzEgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIAotLyogcmVhZCAxIG9yIDIgYnl0ZXMgLSByZXR1cm5zIDwgMCBpZiBlcnJvciAqLwotc3RhdGljIGludCByZWdfcl8xMihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisvKiByZWFkIDEgb3IgMiBieXRlcyAqLworc3RhdGljIHUxNiByZWdfcl8xMihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCByZXEsCQkvKiBiUmVxdWVzdCAqLwogCQkJdTE2IGluZGV4LAkvKiB3SW5kZXggKi8KIAkJCXUxNiBsZW5ndGgpCS8qIHdMZW5ndGggKDEgb3IgMiBvbmx5KSAqLwogewogCWludCByZXQ7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNTUwLDYyICs1NzYsNDQgQEAKIAkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLAogCQkJNTAwKTsKIAlpZiAocmV0IDwgMCkgewotCQlQREVCVUcoRF9FUlIsICJyZWdfcmVhZCBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gLTE7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yXzEyIGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpICsgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3Qgc3RydWN0IGNtZCAqZGF0YSwgaW50IG5jbWRzKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgcmV0OwotCiAJd2hpbGUgKC0tbmNtZHMgPj0gMCkgewotCQlyZXQgPSByZWdfd19yaXYoZGV2LCBkYXRhLT5yZXEsIGRhdGEtPmlkeCwgZGF0YS0+dmFsKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCVBERUJVRyhEX0VSUiwKLQkJCSAgICJSZWdpc3RlciB3cml0ZSBmYWlsZWQgZm9yIDB4JTAyeCwgMHglMDR4LCAweCUwNHgiLAotCQkJCWRhdGEtPnJlcSwgZGF0YS0+dmFsLCBkYXRhLT5pZHgpOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCBkYXRhLT5yZXEsIGRhdGEtPmlkeCwgZGF0YS0+dmFsKTsKIAkJZGF0YSsrOwogCX0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzcGNhNTB4X3NldHVwX3F0YWJsZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJY29uc3QgdTggcXRhYmxlWzJdWzY0XSkKK3N0YXRpYyB2b2lkIHNldHVwX3F0YWJsZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCBxdGFibGVbMl1bNjRdKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgaSwgZXJyOworCWludCBpOwogCiAJLyogbG9vcCBvdmVyIHkgY29tcG9uZW50cyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWVyciA9IHJlZ193X3JpdihkZXYsIDB4MDAsIDB4MjgwMCArIGksIHF0YWJsZVswXVtpXSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCSByZWdfd19yaXYoZ3NwY2FfZGV2LCAweDAwLCAweDI4MDAgKyBpLCBxdGFibGVbMF1baV0pOwogCiAJLyogbG9vcCBvdmVyIGMgY29tcG9uZW50cyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWVyciA9IHJlZ193X3JpdihkZXYsIDB4MDAsIDB4Mjg0MCArIGksIHF0YWJsZVsxXVtpXSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MDAsIDB4Mjg0MCArIGksIHF0YWJsZVsxXVtpXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJICAgICB1OCByZXEsIHUxNiBpZHgsIHUxNiB2YWwpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCBub3Rkb25lOworCXUxNiBub3Rkb25lOwogCi0JcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7CisJcmVnX3dfcml2KGdzcGNhX2RldiwgcmVxLCBpZHgsIHZhbCk7CiAJbm90ZG9uZSA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxLCAxKTsKLQlyZWdfd19yaXYoZGV2LCByZXEsIGlkeCwgdmFsKTsKKwlyZWdfd19yaXYoZ3NwY2FfZGV2LCByZXEsIGlkeCwgdmFsKTsKIAogCVBERUJVRyhEX0ZSQU0sICJiZWZvcmUgd2FpdCAweCUwNHgiLCBub3Rkb25lKTsKIApAQCAtNjE2LDIzICs2MjQsMjIgQEAKIAogc3RhdGljIHZvaWQgc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggcmVxLAotCQkJdTE2IGlkeCwgdTE2IHZhbCwgdTggc3RhdCwgdTggY291bnQpCisJCQl1MTYgaWR4LCB1MTYgdmFsLCB1MTYgZW5kY29kZSwgdTggY291bnQpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCBzdGF0dXM7Ci0JdTggZW5kY29kZTsKKwl1MTYgc3RhdHVzOwogCi0JcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7CisJcmVnX3dfcml2KGdzcGNhX2RldiwgcmVxLCBpZHgsIHZhbCk7CiAJc3RhdHVzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEsIDEpOwotCWVuZGNvZGUgPSBzdGF0OwotCVBERUJVRyhEX0ZSQU0sICJTdGF0dXMgMHgleCBOZWVkIDB4JTA0eCIsIHN0YXR1cywgc3RhdCk7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlQREVCVUcoRF9GUkFNLCAiU3RhdHVzIDB4JTA0eCBOZWVkIDB4JTA0eCIsIHN0YXR1cywgZW5kY29kZSk7CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOwogCWNvdW50ID0gMjAwOwogCXdoaWxlICgtLWNvdW50ID4gMCkgewogCQltc2xlZXAoMTApOwogCQkvKiBnc21hcnQgbWluaTIgd3JpdGUgYSBlYWNoIHdhaXQgc2V0dGluZyAxIG1zIGlzIGVub3VnaCAqLwotLyoJCXJlZ193X3JpdihkZXYsIHJlcSwgaWR4LCB2YWwpOyAqLworLyoJCXJlZ193X3Jpdihnc3BjYV9kZXYsIHJlcSwgaWR4LCB2YWwpOyAqLwogCQlzdGF0dXMgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMSwgMSk7CiAJCWlmIChzdGF0dXMgPT0gZW5kY29kZSkgewogCQkJUERFQlVHKERfRlJBTSwgInN0YXR1cyAweCUwNHggYWZ0ZXIgd2FpdCAlZCIsCkBAIC02NDIsNyArNjQ5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgY291bnQgPSAxMDsKIApAQCAtNjUyLDcgKzY1OSw2IEBACiAJCQlicmVhazsKIAkJbXNsZWVwKDEwKTsKIAl9Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIAogc3RhdGljIHZvaWQgc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC02ODYsMjggKzY5MiwyNiBAQAogc3RhdGljIHZvaWQgc3BjYTUwNEJfU2V0U2l6ZVR5cGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJdTggU2l6ZTsKLQlpbnQgcmM7CiAKIAlTaXplID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfU1BDQTUzMzoKLQkJcmVnX3dfcml2KGRldiwgMHgzMSwgMCwgMCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MzEsIDAsIDApOwogCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7Ci0JCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOworCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAJCXNwY2E1MHhfR2V0RmlybXdhcmUoZ3NwY2FfZGV2KTsKIAkJcmVnX3dfMShnc3BjYV9kZXYsIDB4MjQsIDAsIDgsIDIpOwkJLyogdHlwZSAqLwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MjQsIDgsIDEpOwogCiAJCXJlZ193XzEoZ3NwY2FfZGV2LCAweDI1LCAwLCA0LCBTaXplKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDI1LCA0LCAxKTsJCQkvKiBzaXplICovCi0JCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOworCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAKIAkJLyogSW5pdCB0aGUgY2FtIHdpZHRoIGhlaWdodCB3aXRoIHNvbWUgdmFsdWVzIGdldCBvbiBpbml0ID8gKi8KLQkJcmVnX3dfcml2KGRldiwgMHgzMSwgMCwgMHgwNCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MzEsIDAsIDB4MDQpOwogCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7Ci0JCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOworCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAvKiBjYXNlIEJSSURHRV9TUENBNTA0QjogKi8KQEAgLTcxNiw3ICs3MjAsNyBAQAogCQlyZWdfcihnc3BjYV9kZXYsIDB4MjUsIDQsIDEpOwkJCS8qIHNpemUgKi8KIAkJcmVnX3dfMShnc3BjYV9kZXYsIDB4MjcsIDAsIDAsIDYpOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MjcsIDAsIDEpOwkJCS8qIHR5cGUgKi8KLQkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCXNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUwNDoKIAkJU2l6ZSArPSAzOwpAQCAtNzMzLDggKzczNyw4IEBACiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NQQ0E1MDRDOgogCQkvKiBjYXB0dXJlIG1vZGUgKi8KLQkJcmVnX3dfcml2KGRldiwgMHhhMCwgKDB4MDUwMCB8IChTaXplICYgMHgwZikpLCAweDAwKTsKLQkJcmVnX3dfcml2KGRldiwgMHgyMCwgMHgwMSwgMHgwNTAwIHwgKFNpemUgJiAweDBmKSk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4YTAsICgweDA1MDAgfCAoU2l6ZSAmIDB4MGYpKSwgMHgwMCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MjAsIDB4MDEsIDB4MDUwMCB8IChTaXplICYgMHgwZikpOwogCQlicmVhazsKIAl9CiB9CkBAIC03NjIsMzcgKzc2NiwzMyBAQAogc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAl1MTYgcmVnOwogCiAJcmVnID0gc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUzNiA/IDB4MjBmMCA6IDB4MjFhNzsKLQlyZWdfd19yaXYoZGV2LCAweDAwLCByZWcsIHNkLT5icmlnaHRuZXNzKTsKKwlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweDAwLCByZWcsIHNkLT5icmlnaHRuZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJdTE2IHJlZzsKIAogCXJlZyA9IHNkLT5icmlkZ2UgPT0gQlJJREdFX1NQQ0E1MzYgPyAweDIwZjEgOiAweDIxYTg7Ci0JcmVnX3dfcml2KGRldiwgMHgwMCwgcmVnLCBzZC0+Y29udHJhc3QpOworCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MDAsIHJlZywgc2QtPmNvbnRyYXN0KTsKIH0KIAogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCXUxNiByZWc7CiAKIAlyZWcgPSBzZC0+YnJpZGdlID09IEJSSURHRV9TUENBNTM2ID8gMHgyMGY2IDogMHgyMWFlOwotCXJlZ193X3JpdihkZXYsIDB4MDAsIHJlZywgc2QtPmNvbG9ycyk7CisJcmVnX3dfcml2KGdzcGNhX2RldiwgMHgwMCwgcmVnLCBzZC0+Y29sb3JzKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9jdGxfcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBwb2xscmVnID0gMTsKIAogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKQEAgLTgwNywxNCArODA3LDE0IEBACiAJZGVmYXVsdDoKIC8qCWNhc2UgQlJJREdFX1NQQ0E1MzM6ICovCiAvKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMWFkKTsJLyogaHVlICovCi0JCXJlZ193X3JpdihkZXYsIDAsIDB4MDEsIDB4MjFhYyk7CS8qIHNhdC9odWUgKi8KLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMWEzKTsJLyogZ2FtbWEgKi8KKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHgwMCwgMHgyMWFkKTsJLyogaHVlICovCisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDAsIDB4MDEsIDB4MjFhYyk7CS8qIHNhdC9odWUgKi8KKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHgwMCwgMHgyMWEzKTsJLyogZ2FtbWEgKi8KIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJcmVnX3dfcml2KGRldiwgMCwgMHg0MCwgMHgyMGY1KTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMSwgMHgyMGY0KTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMDg5KTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHg0MCwgMHgyMGY1KTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHgwMSwgMHgyMGY0KTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHgwMCwgMHgyMDg5KTsKIAkJYnJlYWs7CiAJfQogCWlmIChwb2xscmVnKQpAQCAtODgxLDE4ICs4ODEsMTcgQEAKIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgaSwgZXJyX2NvZGU7CisJaW50IGk7CiAJdTggaW5mb1s2XTsKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX1NQQ0E1MDRCOgotCQlyZWdfd19yaXYoZGV2LCAweDFkLCAweDAwLCAwKTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMSwgMHgyMzA2KTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgwZDA0KTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMDAwKTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgxMywgMHgyMzAxKTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMzA2KTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMHgxZCwgMHgwMCwgMCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDAsIDB4MDEsIDB4MjMwNik7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDAsIDB4MDAsIDB4MGQwNCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDAsIDB4MDAsIDB4MjAwMCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDAsIDB4MTMsIDB4MjMwMSk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDAsIDB4MDAsIDB4MjMwNik7CiAJCS8qIGZhbGwgdGhydSAqLwogCWNhc2UgQlJJREdFX1NQQ0E1MzM6CiAJCXNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKQEAgLTkwNCwxMyArOTAzLDEzIEBACiAJCXJlZ193XzEoZ3NwY2FfZGV2LCAweDI0LCAwLCAwLCAwKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDI0LCAwLCAxKTsKIAkJc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOwotCQlyZWdfd19yaXYoZGV2LCAweDM0LCAwLCAwKTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMHgzNCwgMCwgMCk7CiAJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUwNEM6CS8qIHBjY2FtNjAwICovCiAJCVBERUJVRyhEX1NUUkVBTSwgIk9wZW5pbmcgU1BDQTUwNCAoUEMtQ0FNIDYwMCkiKTsKLQkJcmVnX3dfcml2KGRldiwgMHhlMCwgMHgwMDAwLCAweDAwMDApOwotCQlyZWdfd19yaXYoZGV2LCAweGUwLCAweDAwMDAsIDB4MDAwMSk7CS8qIHJlc2V0ICovCisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4ZTAsIDB4MDAwMCwgMHgwMDAwKTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMHhlMCwgMHgwMDAwLCAweDAwMDEpOwkvKiByZXNldCAqLwogCQlzcGNhNTA0X3dhaXRfc3RhdHVzKGdzcGNhX2Rldik7CiAJCWlmIChzZC0+c3VidHlwZSA9PSBMb2dpdGVjaENsaWNrU21hcnQ0MjApCiAJCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LApAQCAtOTE5LDEyICs5MTgsNyBAQAogCQllbHNlCiAJCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA0X3BjY2FtNjAwX29wZW5fZGF0YSwKIAkJCQlBUlJBWV9TSVpFKHNwY2E1MDRfcGNjYW02MDBfb3Blbl9kYXRhKSk7Ci0JCWVycl9jb2RlID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LAotCQkJCQkJcXRhYmxlX2NyZWF0aXZlX3BjY2FtKTsKLQkJaWYgKGVycl9jb2RlIDwgMCkgewotCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLCAic3BjYTUweF9zZXR1cF9xdGFibGUgZmFpbGVkIik7Ci0JCQlyZXR1cm4gZXJyX2NvZGU7Ci0JCX0KKwkJc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwgcXRhYmxlX2NyZWF0aXZlX3BjY2FtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIC8qCWNhc2UgQlJJREdFX1NQQ0E1MDQ6ICovCkBAIC05NTgsMjkgKzk1MiwyNCBAQAogCQkJCQkJCTYsIDAsIDB4ODYsIDEpOyAqLwogLyoJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZCAoZ3NwY2FfZGV2LCAweDI0LAogCQkJCQkJCTAsIDAsIDB4OUQsIDEpOyAqLwotCQkJcmVnX3dfcml2KGRldiwgMHgwMCwgMHgyNzBjLCAweDA1KTsgLyogTDkyIHNubzF0LnR4dCAqLwotCQkJcmVnX3dfcml2KGRldiwgMHgwMCwgMHgyMzEwLCAweDA1KTsKKwkJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MDAsIDB4MjcwYywgMHgwNSk7CisJCQkJCQkJLyogTDkyIHNubzF0LnR4dCAqLworCQkJcmVnX3dfcml2KGdzcGNhX2RldiwgMHgwMCwgMHgyMzEwLCAweDA1KTsKIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgwMSwKIAkJCQkJCQkweDBmLCAwLCAweGZmLCAwKTsKIAkJfQogCQkvKiBzZXR1cCBxdGFibGUgKi8KLQkJcmVnX3dfcml2KGRldiwgMCwgMHgyMDAwLCAwKTsKLQkJcmVnX3dfcml2KGRldiwgMCwgMHgyODgzLCAxKTsKLQkJZXJyX2NvZGUgPSBzcGNhNTB4X3NldHVwX3F0YWJsZShnc3BjYV9kZXYsCi0JCQkJCQlxdGFibGVfc3BjYTUwNF9kZWZhdWx0KTsKLQkJaWYgKGVycl9jb2RlIDwgMCkgewotCQkJUERFQlVHKERfRVJSLCAic3BjYTUweF9zZXR1cF9xdGFibGUgZmFpbGVkIik7Ci0JCQlyZXR1cm4gZXJyX2NvZGU7Ci0JCX0KKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHgyMDAwLCAwKTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMCwgMHgyODgzLCAxKTsKKwkJc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwgcXRhYmxlX3NwY2E1MDRfZGVmYXVsdCk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBlbmFibGU7CiAJaW50IGk7CiAJdTggaW5mb1s2XTsKQEAgLTEwMDUsMTMgKzk5NCwxMyBAQAogCQljYXNlIE1lZ2FwaXhWNDoKIAkJY2FzZSBMb2dpdGVjaENsaWNrU21hcnQ4MjA6CiAJCWNhc2UgTWVnYUltYWdlVkk6Ci0JCQlyZWdfd19yaXYoZGV2LCAweGYwLCAwLCAwKTsKKwkJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4ZjAsIDAsIDApOwogCQkJc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhnc3BjYV9kZXYpOwogCQkJcmVnX3IoZ3NwY2FfZGV2LCAweGYwLCA0LCAwKTsKIAkJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcmVnX3dfcml2KGRldiwgMHgzMSwgMCwgMHgwNCk7CisJCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweDMxLCAwLCAweDA0KTsKIAkJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKIAkJCXNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKIAkJCWJyZWFrOwpAQCAtMTA0OCw4ICsxMDM3LDkgQEAKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCAwLCAwKTsKIAkJfQogCQlzcGNhNTA0Ql9TZXRTaXplVHlwZShnc3BjYV9kZXYpOwotCQlyZWdfd19yaXYoZGV2LCAweDAwLCAweDI3MGMsIDB4MDUpOwkvKiBMOTIgc25vMXQudHh0ICovCi0JCXJlZ193X3JpdihkZXYsIDB4MDAsIDB4MjMxMCwgMHgwNSk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MDAsIDB4MjcwYywgMHgwNSk7CisJCQkJCQkJLyogTDkyIHNubzF0LnR4dCAqLworCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweDAwLCAweDIzMTAsIDB4MDUpOwogCQlicmVhazsKIAljYXNlIEJSSURHRV9TUENBNTA0QzoKIAkJaWYgKHNkLT5zdWJ0eXBlID09IExvZ2l0ZWNoQ2xpY2tTbWFydDQyMCkgewpAQCAtMTA2MSwzNiArMTA1MSwzNyBAQAogCQkJCUFSUkFZX1NJWkUoc3BjYTUwNF9wY2NhbTYwMF9pbml0X2RhdGEpKTsKIAkJfQogCQllbmFibGUgPSAoc2QtPmF1dG9nYWluID8gMHgwNCA6IDB4MDEpOwotCQlyZWdfd19yaXYoZGV2LCAweDBjLCAweDAwMDAsIGVuYWJsZSk7CS8qIGF1dG8gZXhwb3N1cmUgKi8KLQkJcmVnX3dfcml2KGRldiwgMHhiMCwgMHgwMDAwLCBlbmFibGUpOwkvKiBhdXRvIHdoaXRlbmVzcyAqLworCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweDBjLCAweDAwMDAsIGVuYWJsZSk7CisJCQkJCQkJLyogYXV0byBleHBvc3VyZSAqLworCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweGIwLCAweDAwMDAsIGVuYWJsZSk7CisJCQkJCQkJLyogYXV0byB3aGl0ZW5lc3MgKi8KIAogCQkvKiBzZXQgZGVmYXVsdCBleHBvc3VyZSBjb21wZW5zYXRpb24gYW5kIHdoaXRlbmVzcyBiYWxhbmNlICovCi0JCXJlZ193X3JpdihkZXYsIDB4MzAsIDB4MDAwMSwgODAwKTsJLyogfiAyMCBmcHMgKi8KLQkJcmVnX3dfcml2KGRldiwgMHgzMCwgMHgwMDAyLCAxNjAwKTsKKwkJcmVnX3dfcml2KGdzcGNhX2RldiwgMHgzMCwgMHgwMDAxLCA4MDApOwkvKiB+IDIwIGZwcyAqLworCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweDMwLCAweDAwMDIsIDE2MDApOwogCQlzcGNhNTA0Ql9TZXRTaXplVHlwZShnc3BjYV9kZXYpOwogCQlicmVhazsKIAl9CiAJaW5pdF9jdGxfcmVnKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAlkZWZhdWx0OgogLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KIC8qCWNhc2UgQlJJREdFX1NQQ0E1MzY6ICovCiAvKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KLQkJcmVnX3dfcml2KGRldiwgMHgzMSwgMCwgMCk7CisJCXJlZ193X3Jpdihnc3BjYV9kZXYsIDB4MzEsIDAsIDApOwogCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7CiAJCXNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUwNDoKIAljYXNlIEJSSURHRV9TUENBNTA0QzoKLQkJcmVnX3dfcml2KGRldiwgMHgwMCwgMHgyMDAwLCAweDAwMDApOworCQlyZWdfd19yaXYoZ3NwY2FfZGV2LCAweDAwLCAweDIwMDAsIDB4MDAwMCk7CiAKIAkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgewogCQkJLyogc3BjYTUwNGEgYWlwdGVrICovCkBAIC0xMTAyLDcgKzEwOTMsNyBAQAogCQkJCQkJCTB4MGYsIDB4MDAsIDB4ZmYsIDEpOwogCQl9IGVsc2UgewogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDAsIDApOwotCQkJcmVnX3dfcml2KGRldiwgMHgwMSwgMHgwMDBmLCAweDAwMDApOworCQkJcmVnX3dfcml2KGdzcGNhX2RldiwgMHgwMSwgMHgwMDBmLCAweDAwMDApOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEyMTYsNyArMTIwNyw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTEyMzQsNyArMTIyNSw3IEBACiAJc2QtPmNvbnRyYXN0ID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTEyNTIsNyArMTI0Myw3IEBACiAJc2QtPmNvbG9ycyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTEyOTIsNyArMTI4Myw3IEBACiAJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCA2OWU1ZGM0Li4xYTgwMGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC01MzQ1LDkgKzUzNDUsNiBAQAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCiAJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IwQTVfRVhQT1NVUkVHQUlOfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBNl9FWFBPU1VSRUJMQUNLTFZMfSwKLQogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LApAQCAtNTM2NCwyNyArNTM2MSwyNyBAQAogCXsweGEwLCAweGY3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAogCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAogCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCi0JezB4YTAsIDB4OTUsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAogCXsweGEwLCAweDAwLCAweDAxYWR9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAogCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjBBNV9FWFBPU1VSRUdBSU59LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMEE2X0VYUE9TVVJFQkxBQ0tMVkx9LAogCXt9CiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKIAl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjBBNV9FWFBPU1VSRUdBSU59LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMEE2X0VYUE9TVVJFQkxBQ0tMVkx9LAogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LApAQCAtNTQwMCwxMyArNTM5NywxNSBAQAogCXsweGEwLCAweDM3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAogCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAogCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCi0JezB4YTAsIDB4OTUsIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAogCXsweGEwLCAweDAwLCAweDAxYWR9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAogCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjBBNV9FWFBPU1VSRUdBSU59LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMEE2X0VYUE9TVVJFQkxBQ0tMVkx9LAogCXt9CiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfNTBIWltdID0gewpAQCAtNjQyNCwxMSArNjQyMywxMSBAQAogCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBlOwkJCS8qIFBBUzIwMkJDQiAqLwogCi0Jc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwMik7CQkvKiA/PyAqLworCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogVEFTNTEzMEMgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKIAlpZiAocmV0d29yZCAhPSAwKQotCQlyZXR1cm4gMHgwMjsJCQkvKiA/PyAqLworCQlyZXR1cm4gMHgwMjsJCQkvKiBUQVM1MTMwQyAqLwogb3ZfY2hlY2s6CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwkJLyogPz8gKi8KIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CkBAIC02NTA1LDYgKzY1MDQsOCBAQAogCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsKIAkvKiB2YWx1ZSAweDQwMDEgaXMgbWVhbmluZ2xlc3MgKi8KIAlpZiAocmV0d29yZCAhPSAweDQwMDEpIHsKKwkJaWYgKChyZXR3b3JkICYgMHhmZjAwKSA9PSAweDY0MDApCisJCQlyZXR1cm4gMHgwMjsJCS8qIFRBUzUxMzBDICovCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yKTsgaSsrKSB7CiAJCQlpZiAoY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbaV0ucmV2aXNpb24gPT0gcmV0d29yZCkgewogCQkJCXNkLT5jaGlwX3JldmlzaW9uID0gcmV0d29yZDsKQEAgLTY1MTUsNyArNjUxNiw3IEBACiAJCX0KIAl9CiAKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7CS8qIGNoZWNrID8/ICovCisJcmVnX3coZGV2LCAweDAxLCAweDAwMDApOwkvKiBjaGVjayBQQjAzMzAgKi8KIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMSk7CiAJcmVnX3coZGV2LCAweGRkLCAweDAwOGIpOwogCXJlZ193KGRldiwgMHgwYSwgMHgwMDEwKTsKQEAgLTY1MjQsNyArNjUyNSw3IEBACiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CiAJaWYgKHJldHdvcmQgIT0gMCkgewogCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7Ci0JCXJldHVybiAweDBhOwkJCS8qID8/ICovCisJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCAqLwogCX0KIAogCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsKQEAgLTY2NzMsNiArNjY3NCwxMCBAQAogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUI7CiAJCQlicmVhazsKKwkJY2FzZSAweDAyOgorCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgVEFTNTEzMEMiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMENYWDsKKwkJCWJyZWFrOwogCQljYXNlIDB4MDQ6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIENTMjEwMiIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9DUzIxMDI7CkBAIC02ODY2LDExICs2ODcxLDE0IEBACiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX09WNzYyMDoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CisJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKIAljYXNlIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTA6CiAvKgkJbXNsZWVwKDEwMCk7CQkJICogPz8gKi8KIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDIpOwkvKiAtLT4gMHg0MCAqLwogCQlyZWdfdyhkZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCiAJCXJlZ193KGRldiwgMHgxNSwgMHgwMWFlKTsKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1RBUzUxMzBDWFgpCisJCQlicmVhazsKIAkJcmVnX3coZGV2LCAweDBkLCAweDAwM2EpOwogCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKQEAgLTY4ODcsNiArNjg5NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgorCWNhc2UgU0VOU09SX1RBUzUxMzBDWFg6CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKIAkJLyogZmFsbCB0aHJ1ICovCiAJY2FzZSBTRU5TT1JfUE8yMDMwOgpAQCAtNjkyOCw2ICs2OTM3LDcgQEAKIAkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CisJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKIAkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CiAJCS8qIGZhbGwgdGhydSAqLwpAQCAtNzIyMCw3ICs3MjMwLDcgQEAKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMwMiksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9QQVMxMDZ9LAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgzMDFiKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwM2IpfSwKLQl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzA1YiksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9UQVM1MTMwQ19WRjAyNTB9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgzMDViKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwN2IpfSwKIAl7VVNCX0RFVklDRSgweDEwZmQsIDB4MDEyOCl9LAogCXtVU0JfREVWSUNFKDB4MTBmZCwgMHg4MDRkKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCmluZGV4IDFjOWJjOTQuLjUxZjM5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKICNpZmRlZiBIRFBWUl9ERUJVRwogCWVsc2UgewogCQloZXhfZHVtcF90b19idWZmZXIoZGV2LT51c2JjX2J1ZiwgNDYsIDE2LCAxLCBwcmludF9idWYsCi0JCQkJICAgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCQkJCSAgIDUqYnVmX3NpemUrMSwgMCk7CiAJCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCiAJCQkgIlN0YXR1cyByZXF1ZXN0IHJldHVybmVkLCBsZW4gJWQ6ICVzXG4iLAogCQkJIHJldCwgcHJpbnRfYnVmKTsKQEAgLTE2OCwxMyArMTY4LDEzIEBACiAKIAlyZXNwb25zZSA9IGRldi0+dXNiY19idWYrMzg7CiAjaWZkZWYgSERQVlJfREVCVUcKLQloZXhfZHVtcF90b19idWZmZXIocmVzcG9uc2UsIDgsIDE2LCAxLCBwcmludF9idWYsIHNpemVvZihwcmludF9idWYpLCAwKTsKKwloZXhfZHVtcF90b19idWZmZXIocmVzcG9uc2UsIDgsIDE2LCAxLCBwcmludF9idWYsIDUqYnVmX3NpemUrMSwgMCk7CiAJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwgImNoYWxsZW5nZTogJXNcbiIsCiAJCSBwcmludF9idWYpOwogI2VuZGlmCiAJY2hhbGxlbmdlKHJlc3BvbnNlKTsKICNpZmRlZiBIRFBWUl9ERUJVRwotCWhleF9kdW1wX3RvX2J1ZmZlcihyZXNwb25zZSwgOCwgMTYsIDEsIHByaW50X2J1Ziwgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCWhleF9kdW1wX3RvX2J1ZmZlcihyZXNwb25zZSwgOCwgMTYsIDEsIHByaW50X2J1ZiwgNSpidWZfc2l6ZSsxLCAwKTsKIAl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LCAiIHJlc3BvbnNlOiAlc1xuIiwKIAkJIHByaW50X2J1Zik7CiAjZW5kaWYKQEAgLTM3Niw4ICszNzYsOCBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgImRldmljZSBub3cgYXR0YWNoZWQgdG8gL2Rldi92aWRlbyVkXG4iLAotCQkgIGRldi0+dmlkZW9fZGV2LT5taW5vcik7CisJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAiZGV2aWNlIG5vdyBhdHRhY2hlZCB0byAlc1xuIiwKKwkJICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmlkZW9fZGV2KSk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtMzkxLDEzICszOTEsMTAgQEAKIHN0YXRpYyB2b2lkIGhkcHZyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7Ci0JaW50IG1pbm9yOwogCiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAotCW1pbm9yID0gZGV2LT52aWRlb19kZXYtPm1pbm9yOwotCiAJLyogcHJldmVudCBtb3JlIEkvTyBmcm9tIHN0YXJ0aW5nIGFuZCBzdG9wIGFueSBvbmdvaW5nICovCiAJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CiAJZGV2LT5zdGF0dXMgPSBTVEFUVVNfRElTQ09OTkVDVEVEOwpAQCAtNDI1LDcgKzQyMiw4IEBACiAKIAlhdG9taWNfZGVjKCZkZXZfbnIpOwogCi0JdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAiZGV2aWNlIC9kZXYvdmlkZW8lZCBkaXNjb25uZWN0ZWRcbiIsIG1pbm9yKTsKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJkZXZpY2UgJXMgZGlzY29ubmVjdGVkXG4iLAorCQkgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52aWRlb19kZXYpKTsKIAogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCWtmcmVlKGRldi0+dXNiY19idWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCmluZGV4IGI1NDM5Y2EuLmZkZDc4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKQEAgLTUyMyw3ICs1MjMsNyBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CiAKLQlpZiAodmlkZW9faXNfdW5yZWdpc3RlcmVkKGRldi0+dmlkZW9fZGV2KSkgeworCWlmICghdmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnZpZGVvX2RldikpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCA2NDM2MGQyLi5iODZlMzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMzUzLDYgKzM1Myw3IEBACiAJCWlyX3R5cGUgICAgID0gSVJfVFlQRV9SQzU7CiAJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlX3RhYmxlOwogCQlicmVhazsKKwljYXNlIDB4MGI6CiAJY2FzZSAweDQ3OgogCWNhc2UgMHg3MToKIAkJaWYgKGFkYXAtPmlkID09IEkyQ19IV19CX0NYMjM4OHggfHwKQEAgLTQyMiw3ICs0MjMsNyBAQAogCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBhbGwgc2V0dXAgYmVmb3JlIGdvaW5nIG9uICovCiAJaWYgKCFuYW1lIHx8ICFpci0+Z2V0X2tleSB8fCAhaXJfdHlwZSB8fCAhaXJfY29kZXMpIHsKLQkJZHByaW50aygxLCBERVZOQU1FICI6IFVuc3VwcG9ydGVkIGRldmljZSBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKKwkJZHByaW50aygxLCAiOiBVbnN1cHBvcnRlZCBkZXZpY2UgYXQgYWRkcmVzcyAweCUwMnhcbiIsCiAJCQlhZGRyKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CkBAIC00MzcsNyArNDM4LDcgQEAKIAkJIGRldl9uYW1lKCZjbGllbnQtPmRldikpOwogCiAJLyogaW5pdCArIHJlZ2lzdGVyIGlucHV0IGRldmljZSAqLwotCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlLCBpci0+aXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKQEAgLTQ0NSw3ICs0NDYsNyBAQAogCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5uYW1lOwogCWlucHV0X2Rldi0+cGh5cyAgICAgICA9IGlyLT5waHlzOwogCi0JZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpci0+aXJfY29kZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9mcmVlOwogCkBAIC00NTksOCArNDYwLDYgQEAKIAlyZXR1cm4gMDsKIAogIGVycl9vdXRfZnJlZToKLQlpcl9pbnB1dF9mcmVlKGlucHV0X2Rldik7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShpcik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ3Myw4ICs0NzIsNyBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogCiAJLyogdW5yZWdpc3RlciBkZXZpY2UgKi8KLQlpcl9pbnB1dF9mcmVlKGlyLT5pbnB1dCk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwlpcl9pbnB1dF91bnJlZ2lzdGVyKGlyLT5pbnB1dCk7CiAKIAkvKiBmcmVlIG1lbW9yeSAqLwogCWtmcmVlKGlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwppbmRleCBlNzA3ZWYzLi5iYWJjYWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCkBAIC05ODUsOCArOTg1LDggQEAKIAogCW11dGV4X2xvY2soJml0di0+c2VyaWFsaXplX2xvY2spOwogCWlmIChpdnR2X2luaXRfb25fZmlyc3Rfb3BlbihpdHYpKSB7Ci0JCUlWVFZfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBtaW5vciAlZFxuIiwKLQkJCQl2ZGV2LT5taW5vcik7CisJCUlWVFZfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBkZXZpY2UgJXNcbiIsCisJCQkgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSk7CiAJCW11dGV4X3VubG9jaygmaXR2LT5zZXJpYWxpemVfbG9jayk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCmluZGV4IDY3Njk5ZTMuLmUxMmM2MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKQEAgLTI0NSw2ICsyNDUsNyBAQAogewogCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbdHlwZV07CiAJaW50IHZmbF90eXBlID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS52ZmxfdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCBudW07CiAKIAlpZiAocy0+dmRldiA9PSBOVUxMKQpAQCAtMjY4LDI0ICsyNjksMjQgQEAKIAkJcy0+dmRldiA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQludW0gPSBzLT52ZGV2LT5udW07CisJbmFtZSA9IHZpZGVvX2RldmljZV9ub2RlX25hbWUocy0+dmRldik7CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgotCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgZm9yICVzICglZCBrQilcbiIsCi0JCQludW0sIHMtPm5hbWUsIGl0di0+b3B0aW9ucy5raWxvYnl0ZXNbdHlwZV0pOworCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlICVzIGZvciAlcyAoJWQga0IpXG4iLAorCQkJbmFtZSwgcy0+bmFtZSwgaXR2LT5vcHRpb25zLmtpbG9ieXRlc1t0eXBlXSk7CiAJCWJyZWFrOwogCWNhc2UgVkZMX1RZUEVfUkFESU86Ci0JCUlWVFZfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgcmFkaW8lZCBmb3IgJXNcbiIsCi0JCQludW0sIHMtPm5hbWUpOworCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlICVzIGZvciAlc1xuIiwKKwkJCW5hbWUsIHMtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIFZGTF9UWVBFX1ZCSToKIAkJaWYgKGl0di0+b3B0aW9ucy5raWxvYnl0ZXNbdHlwZV0pCi0JCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIGZvciAlcyAoJWQga0IpXG4iLAotCQkJCW51bSwgcy0+bmFtZSwgaXR2LT5vcHRpb25zLmtpbG9ieXRlc1t0eXBlXSk7CisJCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlICVzIGZvciAlcyAoJWQga0IpXG4iLAorCQkJCW5hbWUsIHMtPm5hbWUsIGl0di0+b3B0aW9ucy5raWxvYnl0ZXNbdHlwZV0pOwogCQllbHNlCi0JCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIGZvciAlc1xuIiwKLQkJCQludW0sIHMtPm5hbWUpOworCQkJSVZUVl9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSAlcyBmb3IgJXNcbiIsCisJCQkJbmFtZSwgcy0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKaW5kZXggMDFlMWVlZi4uYjQyMTg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKQEAgLTgwMCw4ICs4MDAsOCBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAlpZiAobWV5ZS5tY2hpcF9tb2RlID09IE1DSElQX0hJQ19NT0RFX0NPTlRfT1VUKSB7Ci0JCWlmIChrZmlmb19nZXQobWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCi0JCQkgICAgICBzaXplb2YoaW50KSkgIT0gc2l6ZW9mKGludCkpIHsKKwkJaWYgKGtmaWZvX291dF9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkJICAgICAgc2l6ZW9mKGludCksICZtZXllLmdyYWJxX2xvY2spICE9IHNpemVvZihpbnQpKSB7CiAJCQltY2hpcF9mcmVlX2ZyYW1lKCk7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCX0KQEAgLTgxMSw3ICs4MTEsOCBAQAogCQltZXllLmdyYWJfYnVmZmVyW3JlcW5yXS5zdGF0ZSA9IE1FWUVfQlVGX0RPTkU7CiAJCWRvX2dldHRpbWVvZmRheSgmbWV5ZS5ncmFiX2J1ZmZlcltyZXFucl0udGltZXN0YW1wKTsKIAkJbWV5ZS5ncmFiX2J1ZmZlcltyZXFucl0uc2VxdWVuY2UgPSBzZXF1ZW5jZSsrOwotCQlrZmlmb19wdXQobWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsIHNpemVvZihpbnQpKTsKKwkJa2ZpZm9faW5fbG9ja2VkKCZtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCQlzaXplb2YoaW50KSwgJm1leWUuZG9uZXFfbG9jayk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbWV5ZS5wcm9jX2xpc3QpOwogCX0gZWxzZSB7CiAJCWludCBzaXplOwpAQCAtODIwLDggKzgyMSw4IEBACiAJCQltY2hpcF9mcmVlX2ZyYW1lKCk7CiAJCQlnb3RvIGFnYWluOwogCQl9Ci0JCWlmIChrZmlmb19nZXQobWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCi0JCQkgICAgICBzaXplb2YoaW50KSkgIT0gc2l6ZW9mKGludCkpIHsKKwkJaWYgKGtmaWZvX291dF9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkJICAgICAgc2l6ZW9mKGludCksICZtZXllLmdyYWJxX2xvY2spICE9IHNpemVvZihpbnQpKSB7CiAJCQltY2hpcF9mcmVlX2ZyYW1lKCk7CiAJCQlnb3RvIGFnYWluOwogCQl9CkBAIC04MzEsNyArODMyLDggQEAKIAkJbWV5ZS5ncmFiX2J1ZmZlcltyZXFucl0uc3RhdGUgPSBNRVlFX0JVRl9ET05FOwogCQlkb19nZXR0aW1lb2ZkYXkoJm1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnRpbWVzdGFtcCk7CiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnNlcXVlbmNlID0gc2VxdWVuY2UrKzsKLQkJa2ZpZm9fcHV0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLCBzaXplb2YoaW50KSk7CisJCWtmaWZvX2luX2xvY2tlZCgmbWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCisJCQkJc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1leWUucHJvY19saXN0KTsKIAl9CiAJbWNoaXBfZnJlZV9mcmFtZSgpOwpAQCAtODU5LDggKzg2MSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTUVZRV9NQVhfQlVGTkJSUzsgaSsrKQogCQltZXllLmdyYWJfYnVmZmVyW2ldLnN0YXRlID0gTUVZRV9CVUZfVU5VU0VEOwotCWtmaWZvX3Jlc2V0KG1leWUuZ3JhYnEpOwotCWtmaWZvX3Jlc2V0KG1leWUuZG9uZXEpOworCWtmaWZvX3Jlc2V0KCZtZXllLmdyYWJxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5kb25lcSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkzMyw3ICs5MzUsOCBAQAogCQltY2hpcF9jb250X2NvbXByZXNzaW9uX3N0YXJ0KCk7CiAKIAltZXllLmdyYWJfYnVmZmVyWypuYl0uc3RhdGUgPSBNRVlFX0JVRl9VU0lORzsKLQlrZmlmb19wdXQobWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKiluYiwgc2l6ZW9mKGludCkpOworCWtmaWZvX2luX2xvY2tlZCgmbWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKiluYiwgc2l6ZW9mKGludCksCisJCQkgJm1leWUuZ3JhYnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC05NjUsNyArOTY4LDkgQEAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBNRVlFX0JVRl9ET05FOgogCQltZXllLmdyYWJfYnVmZmVyWyppXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKLQkJa2ZpZm9fZ2V0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnVudXNlZCwgc2l6ZW9mKGludCkpOworCQlpZiAoa2ZpZm9fb3V0X2xvY2tlZCgmbWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmdW51c2VkLAorCQkJCXNpemVvZihpbnQpLCAmbWV5ZS5kb25lcV9sb2NrKSAhPSBzaXplb2YoaW50KSkKKwkJCQkJYnJlYWs7CiAJfQogCSppID0gbWV5ZS5ncmFiX2J1ZmZlclsqaV0uc2l6ZTsKIAltdXRleF91bmxvY2soJm1leWUubG9jayk7CkBAIC0xNDUyLDcgKzE0NTcsOCBAQAogCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CiAJYnVmLT5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOwogCW1leWUuZ3JhYl9idWZmZXJbYnVmLT5pbmRleF0uc3RhdGUgPSBNRVlFX0JVRl9VU0lORzsKLQlrZmlmb19wdXQobWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKikmYnVmLT5pbmRleCwgc2l6ZW9mKGludCkpOworCWtmaWZvX2luX2xvY2tlZCgmbWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKikmYnVmLT5pbmRleCwKKwkJCXNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKTsKIAltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTE0NjcsMTkgKzE0NzMsMTkgQEAKIAogCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAKLQlpZiAoa2ZpZm9fbGVuKG1leWUuZG9uZXEpID09IDAgJiYgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwlpZiAoa2ZpZm9fbGVuKCZtZXllLmRvbmVxKSA9PSAwICYmIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CiAJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShtZXllLnByb2NfbGlzdCwKLQkJCQkgICAgIGtmaWZvX2xlbihtZXllLmRvbmVxKSAhPSAwKSA8IDApIHsKKwkJCQkgICAgIGtmaWZvX2xlbigmbWV5ZS5kb25lcSkgIT0gMCkgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJcmV0dXJuIC1FSU5UUjsKIAl9CiAKLQlpZiAoIWtmaWZvX2dldChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKLQkJICAgICAgIHNpemVvZihpbnQpKSkgeworCWlmICgha2ZpZm9fb3V0X2xvY2tlZCgmbWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCisJCSAgICAgICBzaXplb2YoaW50KSwgJm1leWUuZG9uZXFfbG9jaykpIHsKIAkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTE1MjksOCArMTUzNSw4IEBACiB7CiAJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAltY2hpcF9oaWNfc3RvcCgpOwotCWtmaWZvX3Jlc2V0KG1leWUuZ3JhYnEpOwotCWtmaWZvX3Jlc2V0KG1leWUuZG9uZXEpOworCWtmaWZvX3Jlc2V0KCZtZXllLmdyYWJxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5kb25lcSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUVZRV9NQVhfQlVGTkJSUzsgaSsrKQogCQltZXllLmdyYWJfYnVmZmVyW2ldLnN0YXRlID0gTUVZRV9CVUZfVU5VU0VEOwpAQCAtMTU3Miw3ICsxNTc4LDcgQEAKIAogCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJcG9sbF93YWl0KGZpbGUsICZtZXllLnByb2NfbGlzdCwgd2FpdCk7Ci0JaWYgKGtmaWZvX2xlbihtZXllLmRvbmVxKSkKKwlpZiAoa2ZpZm9fbGVuKCZtZXllLmRvbmVxKSkKIAkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKIAltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJcmV0dXJuIHJlczsKQEAgLTE2ODEsNyArMTY4Nyw2IEBACiAJLmZvcHMJCT0gJm1leWVfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZtZXllX2lvY3RsX29wcywKIAkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotCS5taW5vcgkJPSAtMSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTE3NDYsMTYgKzE3NTEsMTQgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmbWV5ZS5ncmFicV9sb2NrKTsKLQltZXllLmdyYWJxID0ga2ZpZm9fYWxsb2Moc2l6ZW9mKGludCkgKiBNRVlFX01BWF9CVUZOQlJTLCBHRlBfS0VSTkVMLAotCQkJCSAmbWV5ZS5ncmFicV9sb2NrKTsKLQlpZiAoSVNfRVJSKG1leWUuZ3JhYnEpKSB7CisJaWYgKGtmaWZvX2FsbG9jKCZtZXllLmdyYWJxLCBzaXplb2YoaW50KSAqIE1FWUVfTUFYX0JVRk5CUlMsCisJCQkJR0ZQX0tFUk5FTCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZXllOiBmaWZvIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBvdXRrZmlmb2FsbG9jMTsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJm1leWUuZG9uZXFfbG9jayk7Ci0JbWV5ZS5kb25lcSA9IGtmaWZvX2FsbG9jKHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywgR0ZQX0tFUk5FTCwKLQkJCQkgJm1leWUuZG9uZXFfbG9jayk7Ci0JaWYgKElTX0VSUihtZXllLmRvbmVxKSkgeworCWlmIChrZmlmb19hbGxvYygmbWV5ZS5kb25lcSwgc2l6ZW9mKGludCkgKiBNRVlFX01BWF9CVUZOQlJTLAorCQkJCUdGUF9LRVJORUwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogZmlmbyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0a2ZpZm9hbGxvYzI7CiAJfQpAQCAtMTg2OSw5ICsxODcyLDkgQEAKIG91dGVuYWJsZWRldjoKIAlzb255X3BpY19jYW1lcmFfY29tbWFuZChTT05ZX1BJQ19DT01NQU5EX1NFVENBTUVSQSwgMCk7CiBvdXRzb255cGllbmFibGU6Ci0Ja2ZpZm9fZnJlZShtZXllLmRvbmVxKTsKKwlrZmlmb19mcmVlKCZtZXllLmRvbmVxKTsKIG91dGtmaWZvYWxsb2MyOgotCWtmaWZvX2ZyZWUobWV5ZS5ncmFicSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5ncmFicSk7CiBvdXRrZmlmb2FsbG9jMToKIAl2ZnJlZShtZXllLmdyYWJfdGVtcCk7CiBvdXR2bWFsbG9jOgpAQCAtMTkwMiw4ICsxOTA1LDggQEAKIAogCXNvbnlfcGljX2NhbWVyYV9jb21tYW5kKFNPTllfUElDX0NPTU1BTkRfU0VUQ0FNRVJBLCAwKTsKIAotCWtmaWZvX2ZyZWUobWV5ZS5kb25lcSk7Ci0Ja2ZpZm9fZnJlZShtZXllLmdyYWJxKTsKKwlrZmlmb19mcmVlKCZtZXllLmRvbmVxKTsKKwlrZmlmb19mcmVlKCZtZXllLmdyYWJxKTsKIAogCXZmcmVlKG1leWUuZ3JhYl90ZW1wKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAppbmRleCA1ZjcwYTEwLi4xMzIxYWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaApAQCAtMzAzLDkgKzMwMyw5IEBACiAJc3RydWN0IG1leWVfZ3JhYl9idWZmZXIgZ3JhYl9idWZmZXJbTUVZRV9NQVhfQlVGTkJSU107CiAJaW50IHZtYV91c2VfY291bnRbTUVZRV9NQVhfQlVGTkJSU107IC8qIG1tYXAgY291bnQgKi8KIAlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIG11dGV4IGZvciBvcGVuL21tYXAuLi4gKi8KLQlzdHJ1Y3Qga2ZpZm8gKmdyYWJxOwkJLyogcXVldWUgZm9yIGJ1ZmZlcnMgdG8gYmUgZ3JhYmJlZCAqLworCXN0cnVjdCBrZmlmbyBncmFicTsJCS8qIHF1ZXVlIGZvciBidWZmZXJzIHRvIGJlIGdyYWJiZWQgKi8KIAlzcGlubG9ja190IGdyYWJxX2xvY2s7CQkvKiBsb2NrIHByb3RlY3RpbmcgdGhlIHF1ZXVlICovCi0Jc3RydWN0IGtmaWZvICpkb25lcTsJCS8qIHF1ZXVlIGZvciBncmFiYmVkIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3Qga2ZpZm8gZG9uZXE7CQkvKiBxdWV1ZSBmb3IgZ3JhYmJlZCBidWZmZXJzICovCiAJc3BpbmxvY2tfdCBkb25lcV9sb2NrOwkJLyogbG9jayBwcm90ZWN0aW5nIHRoZSBxdWV1ZSAqLwogCXdhaXRfcXVldWVfaGVhZF90IHByb2NfbGlzdDsJLyogd2FpdCBxdWV1ZSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldjsJLyogdmlkZW8gZGV2aWNlIHBhcmFtZXRlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKaW5kZXggNDUzODhkMi4uYjYyYzBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKQEAgLTE3LDkgKzE3LDExIEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCi0vKiBtdDltMDAxIGkyYyBhZGRyZXNzIDB4NWQKKy8qCisgKiBtdDltMDAxIGkyYyBhZGRyZXNzIDB4NWQKICAqIFRoZSBwbGF0Zm9ybSBoYXMgdG8gZGVmaW5lIGN0cnVjdCBpMmNfYm9hcmRfaW5mbyBvYmplY3RzIGFuZCBsaW5rIHRvIHRoZW0KLSAqIGZyb20gc3RydWN0IHNvY19jYW1lcmFfbGluayAqLworICogZnJvbSBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rCisgKi8KIAogLyogbXQ5bTAwMSBzZWxlY3RlZCByZWdpc3RlciBhZGRyZXNzZXMgKi8KICNkZWZpbmUgTVQ5TTAwMV9DSElQX1ZFUlNJT04JCTB4MDAKQEAgLTQ2LDQyICs0OCw1MCBAQAogI2RlZmluZSBNVDlNMDAxX0NPTFVNTl9TS0lQCQkyMAogI2RlZmluZSBNVDlNMDAxX1JPV19TS0lQCQkxMgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgbXQ5bTAwMV9jb2xvdXJfZm9ybWF0c1tdID0gewotCS8qIE9yZGVyIGltcG9ydGFudDogZmlyc3QgbmF0aXZlbHkgc3VwcG9ydGVkLAotCSAqIHNlY29uZCBzdXBwb3J0ZWQgd2l0aCBhIEdQSU8gZXh0ZW5kZXIgKi8KLQl7Ci0JCS5uYW1lCQk9ICJCYXllciAoc1JHQikgMTAgYml0IiwKLQkJLmRlcHRoCQk9IDEwLAotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjE2LAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0sIHsKLQkJLm5hbWUJCT0gIkJheWVyIChzUkdCKSA4IGJpdCIsCi0JCS5kZXB0aAkJPSA4LAotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JfQorLyogTVQ5TTAwMSBoYXMgb25seSBvbmUgZml4ZWQgY29sb3JzcGFjZSBwZXIgcGl4ZWxjb2RlICovCitzdHJ1Y3QgbXQ5bTAwMV9kYXRhZm10IHsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUJY29kZTsKKwllbnVtIHY0bDJfY29sb3JzcGFjZQkJY29sb3JzcGFjZTsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0c1tdID0geworLyogRmluZCBhIGRhdGEgZm9ybWF0IGJ5IGEgcGl4ZWwgY29kZSBpbiBhbiBhcnJheSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtdDltMDAxX2RhdGFmbXQgKm10OW0wMDFfZmluZF9kYXRhZm10KAorCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlLCBjb25zdCBzdHJ1Y3QgbXQ5bTAwMV9kYXRhZm10ICpmbXQsCisJaW50IG4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKGZtdFtpXS5jb2RlID09IGNvZGUpCisJCQlyZXR1cm4gZm10ICsgaTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10OW0wMDFfZGF0YWZtdCBtdDltMDAxX2NvbG91cl9mbXRzW10gPSB7CisJLyoKKwkgKiBPcmRlciBpbXBvcnRhbnQ6IGZpcnN0IG5hdGl2ZWx5IHN1cHBvcnRlZCwKKwkgKiBzZWNvbmQgc3VwcG9ydGVkIHdpdGggYSBHUElPIGV4dGVuZGVyCisJICovCisJe1Y0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCisJe1Y0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdDltMDAxX2RhdGFmbXQgbXQ5bTAwMV9tb25vY2hyb21lX2ZtdHNbXSA9IHsKIAkvKiBPcmRlciBpbXBvcnRhbnQgLSBzZWUgYWJvdmUgKi8KLQl7Ci0JCS5uYW1lCQk9ICJNb25vY2hyb21lIDEwIGJpdCIsCi0JCS5kZXB0aAkJPSAxMCwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWTE2LAotCX0sIHsKLQkJLm5hbWUJCT0gIk1vbm9jaHJvbWUgOCBiaXQiLAotCQkuZGVwdGgJCT0gOCwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwKLQl9LAorCXtWNEwyX01CVVNfRk1UX1kxMF8xWDEwLCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisJe1Y0TDJfTUJVU19GTVRfR1JFWThfMVg4LCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCiB9OwogCiBzdHJ1Y3QgbXQ5bTAwMSB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CS8qIFNlbnNvciB3aW5kb3cgKi8KLQlfX3UzMiBmb3VyY2M7CisJY29uc3Qgc3RydWN0IG10OW0wMDFfZGF0YWZtdCAqZm10OworCWNvbnN0IHN0cnVjdCBtdDltMDAxX2RhdGFmbXQgKmZtdHM7CisJaW50IG51bV9mbXRzOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMDAxKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCiAJdW5zaWduZWQgaW50IGdhaW47CiAJdW5zaWduZWQgaW50IGV4cG9zdXJlOworCXVuc2lnbmVkIHNob3J0IHlfc2tpcF90b3A7CS8qIExpbmVzIHRvIHNraXAgYXQgdGhlIHRvcCAqLwogCXVuc2lnbmVkIGNoYXIgYXV0b2V4cG9zdXJlOwogfTsKIApAQCAtMjA0LDggKzIxNCw3IEBACiAJY29uc3QgdTE2IGhibGFuayA9IDksIHZibGFuayA9IDI1OwogCXVuc2lnbmVkIGludCB0b3RhbF9oOwogCi0JaWYgKG10OW0wMDEtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8Ci0JICAgIG10OW0wMDEtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikKKwlpZiAobXQ5bTAwMS0+Zm10cyA9PSBtdDltMDAxX2NvbG91cl9mbXRzKQogCQkvKgogCQkgKiBCYXllciBmb3JtYXQgLSBldmVuIG51bWJlciBvZiByb3dzIGZvciBzaW1wbGljaXR5LAogCQkgKiBidXQgbGV0IHRoZSB1c2VyIHBsYXkgd2l0aCB0aGUgdG9wIHJvdy4KQEAgLTIyMiwxNSArMjMxLDE3IEBACiAJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LnRvcCwgJnJlY3QuaGVpZ2h0LAogCQkgICAgIE1UOU0wMDFfUk9XX1NLSVAsIE1UOU0wMDFfTUlOX0hFSUdIVCwgTVQ5TTAwMV9NQVhfSEVJR0hUKTsKIAotCXRvdGFsX2ggPSByZWN0LmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIHZibGFuazsKKwl0b3RhbF9oID0gcmVjdC5oZWlnaHQgKyBtdDltMDAxLT55X3NraXBfdG9wICsgdmJsYW5rOwogCiAJLyogQmxhbmtpbmcgYW5kIHN0YXJ0IHZhbHVlcyAtIGRlZmF1bHQuLi4gKi8KIAlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX0hPUklaT05UQUxfQkxBTktJTkcsIGhibGFuayk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfVkVSVElDQUxfQkxBTktJTkcsIHZibGFuayk7CiAKLQkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyCi0JICogY2FsbCB0byBpY2QtPnRyeV9mbXQoKSAqLworCS8qCisJICogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIHZlcmlmaWVkIHBlcgorCSAqIGNhbGwgdG8gaWNkLT50cnlfZm10KCkKKwkgKi8KIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9DT0xVTU5fU1RBUlQsIHJlY3QubGVmdCk7CiAJaWYgKCFyZXQpCkBAIC0yMzksNyArMjUwLDcgQEAKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9XSU5ET1dfV0lEVEgsIHJlY3Qud2lkdGggLSAxKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTAwMV9XSU5ET1dfSEVJR0hULAotCQkJCXJlY3QuaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wIC0gMSk7CisJCQkJcmVjdC5oZWlnaHQgKyBtdDltMDAxLT55X3NraXBfdG9wIC0gMSk7CiAJaWYgKCFyZXQgJiYgbXQ5bTAwMS0+YXV0b2V4cG9zdXJlKSB7CiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOU0wMDFfU0hVVFRFUl9XSURUSCwgdG90YWxfaCk7CiAJCWlmICghcmV0KSB7CkBAIC0yODMsMzIgKzI5NCwzMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMDAxX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCi0JcGl4LT53aWR0aAkJPSBtdDltMDAxLT5yZWN0LndpZHRoOwotCXBpeC0+aGVpZ2h0CQk9IG10OW0wMDEtPnJlY3QuaGVpZ2h0OwotCXBpeC0+cGl4ZWxmb3JtYXQJPSBtdDltMDAxLT5mb3VyY2M7Ci0JcGl4LT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7Ci0JcGl4LT5jb2xvcnNwYWNlCQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCW1mLT53aWR0aAk9IG10OW0wMDEtPnJlY3Qud2lkdGg7CisJbWYtPmhlaWdodAk9IG10OW0wMDEtPnJlY3QuaGVpZ2h0OworCW1mLT5jb2RlCT0gbXQ5bTAwMS0+Zm10LT5jb2RlOworCW1mLT5jb2xvcnNwYWNlCT0gbXQ5bTAwMS0+Zm10LT5jb2xvcnNwYWNlOworCW1mLT5maWVsZAk9IFY0TDJfRklFTERfTk9ORTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMDAxX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gdG9fbXQ5bTAwMShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCXN0cnVjdCB2NGwyX2Nyb3AgYSA9IHsKIAkJLmMgPSB7CiAJCQkubGVmdAk9IG10OW0wMDEtPnJlY3QubGVmdCwKIAkJCS50b3AJPSBtdDltMDAxLT5yZWN0LnRvcCwKLQkJCS53aWR0aAk9IHBpeC0+d2lkdGgsCi0JCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJCQkud2lkdGgJPSBtZi0+d2lkdGgsCisJCQkuaGVpZ2h0CT0gbWYtPmhlaWdodCwKIAkJfSwKIAl9OwogCWludCByZXQ7CkBAIC0zMTYsMjggKzMyNywzOSBAQAogCS8qIE5vIHN1cHBvcnQgZm9yIHNjYWxpbmcgc28gZmFyLCBqdXN0IGNyb3AuIFRPRE86IHVzZSBza2lwcGluZyAqLwogCXJldCA9IG10OW0wMDFfc19jcm9wKHNkLCAmYSk7CiAJaWYgKCFyZXQpIHsKLQkJcGl4LT53aWR0aCA9IG10OW0wMDEtPnJlY3Qud2lkdGg7Ci0JCXBpeC0+aGVpZ2h0ID0gbXQ5bTAwMS0+cmVjdC5oZWlnaHQ7Ci0JCW10OW0wMDEtPmZvdXJjYyA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJCW1mLT53aWR0aAk9IG10OW0wMDEtPnJlY3Qud2lkdGg7CisJCW1mLT5oZWlnaHQJPSBtdDltMDAxLT5yZWN0LmhlaWdodDsKKwkJbXQ5bTAwMS0+Zm10CT0gbXQ5bTAwMV9maW5kX2RhdGFmbXQobWYtPmNvZGUsCisJCQkJCW10OW0wMDEtPmZtdHMsIG10OW0wMDEtPm51bV9mbXRzKTsKKwkJbWYtPmNvbG9yc3BhY2UJPSBtdDltMDAxLT5mbXQtPmNvbG9yc3BhY2U7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMDAxX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSB0b19tdDltMDAxKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IG10OW0wMDFfZGF0YWZtdCAqZm10OwogCi0JdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXgtPndpZHRoLCBNVDlNMDAxX01JTl9XSURUSCwKKwl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJm1mLT53aWR0aCwgTVQ5TTAwMV9NSU5fV0lEVEgsCiAJCU1UOU0wMDFfTUFYX1dJRFRILCAxLAotCQkmcGl4LT5oZWlnaHQsIE1UOU0wMDFfTUlOX0hFSUdIVCArIGljZC0+eV9za2lwX3RvcCwKLQkJTVQ5TTAwMV9NQVhfSEVJR0hUICsgaWNkLT55X3NraXBfdG9wLCAwLCAwKTsKKwkJJm1mLT5oZWlnaHQsIE1UOU0wMDFfTUlOX0hFSUdIVCArIG10OW0wMDEtPnlfc2tpcF90b3AsCisJCU1UOU0wMDFfTUFYX0hFSUdIVCArIG10OW0wMDEtPnlfc2tpcF90b3AsIDAsIDApOwogCi0JaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCB8fAotCSAgICBwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KQotCQlwaXgtPmhlaWdodCA9IEFMSUdOKHBpeC0+aGVpZ2h0IC0gMSwgMik7CisJaWYgKG10OW0wMDEtPmZtdHMgPT0gbXQ5bTAwMV9jb2xvdXJfZm10cykKKwkJbWYtPmhlaWdodCA9IEFMSUdOKG1mLT5oZWlnaHQgLSAxLCAyKTsKKworCWZtdCA9IG10OW0wMDFfZmluZF9kYXRhZm10KG1mLT5jb2RlLCBtdDltMDAxLT5mbXRzLAorCQkJCSAgIG10OW0wMDEtPm51bV9mbXRzKTsKKwlpZiAoIWZtdCkgeworCQlmbXQgPSBtdDltMDAxLT5mbXQ7CisJCW1mLT5jb2RlID0gZm10LT5jb2RlOworCX0KKworCW1mLT5jb2xvcnNwYWNlCT0gZm10LT5jb2xvcnNwYWNlOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NTIsNyArNTc0LDcgQEAKIAkJaWYgKGN0cmwtPnZhbHVlKSB7CiAJCQljb25zdCB1MTYgdmJsYW5rID0gMjU7CiAJCQl1bnNpZ25lZCBpbnQgdG90YWxfaCA9IG10OW0wMDEtPnJlY3QuaGVpZ2h0ICsKLQkJCQlpY2QtPnlfc2tpcF90b3AgKyB2Ymxhbms7CisJCQkJbXQ5bTAwMS0+eV9za2lwX3RvcCArIHZibGFuazsKIAkJCWlmIChyZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX1NIVVRURVJfV0lEVEgsCiAJCQkJICAgICAgdG90YWxfaCkgPCAwKQogCQkJCXJldHVybiAtRUlPOwpAQCAtNTY4LDggKzU5MCwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBJbnRlcmZhY2UgYWN0aXZlLCBjYW4gdXNlIGkyYy4gSWYgaXQgZmFpbHMsIGl0IGNhbiBpbmRlZWQgbWVhbiwgdGhhdAotICogdGhpcyB3YXNuJ3Qgb3VyIGNhcHR1cmUgaW50ZXJmYWNlLCBzbywgd2Ugd2FpdCBmb3IgdGhlIHJpZ2h0IG9uZSAqLworLyoKKyAqIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0CisgKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lCisgKi8KIHN0YXRpYyBpbnQgbXQ5bTAwMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewpAQCAtNTc5LDggKzYwMywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCi0JICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gKi8KKwkvKgorCSAqIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCisJICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KKwkgKi8KIAlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAogCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01OTcsMTEgKzYyMywxMSBAQAogCWNhc2UgMHg4NDExOgogCWNhc2UgMHg4NDIxOgogCQltdDltMDAxLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5TTAwMUMxMlNUOwotCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX2NvbG91cl9mb3JtYXRzOworCQltdDltMDAxLT5mbXRzID0gbXQ5bTAwMV9jb2xvdXJfZm10czsKIAkJYnJlYWs7CiAJY2FzZSAweDg0MzE6CiAJCW10OW0wMDEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMDAxQzEyU1RNOwotCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0czsKKwkJbXQ5bTAwMS0+Zm10cyA9IG10OW0wMDFfbW9ub2Nocm9tZV9mbXRzOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKQEAgLTYwOSw3ICs2MzUsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpY2QtPm51bV9mb3JtYXRzID0gMDsKKwltdDltMDAxLT5udW1fZm10cyA9IDA7CiAKIAkvKgogCSAqIFRoaXMgaXMgYSAxMGJpdCBzZW5zb3IsIHNvIGJ5IGRlZmF1bHQgd2Ugb25seSBhbGxvdyAxMGJpdC4KQEAgLTYyMiwxNCArNjQ4LDE0IEBACiAJCWZsYWdzID0gU09DQU1fREFUQVdJRFRIXzEwOwogCiAJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKQotCQlpY2QtPm51bV9mb3JtYXRzKys7CisJCW10OW0wMDEtPm51bV9mbXRzKys7CiAJZWxzZQotCQlpY2QtPmZvcm1hdHMrKzsKKwkJbXQ5bTAwMS0+Zm10cysrOwogCiAJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCi0JCWljZC0+bnVtX2Zvcm1hdHMrKzsKKwkJbXQ5bTAwMS0+bnVtX2ZtdHMrKzsKIAotCW10OW0wMDEtPmZvdXJjYyA9IGljZC0+Zm9ybWF0cy0+Zm91cmNjOworCW10OW0wMDEtPmZtdCA9ICZtdDltMDAxLT5mbXRzWzBdOwogCiAJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlNMDAxIGNoaXAgSUQgJXggKCVzKVxuIiwgZGF0YSwKIAkJIGRhdGEgPT0gMHg4NDMxID8gIkMxMlNUTSIgOiAiQzEyU1QiKTsKQEAgLTY1NSw2ICs2ODEsMTYgQEAKIAkJaWNsLT5mcmVlX2J1cyhpY2wpOwogfQogCitzdGF0aWMgaW50IG10OW0wMDFfZ19za2lwX3RvcF9saW5lcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKmxpbmVzKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IHRvX210OW0wMDEoY2xpZW50KTsKKworCSpsaW5lcyA9IG10OW0wMDEtPnlfc2tpcF90b3A7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtdDltMDAxX3N1YmRldl9jb3JlX29wcyA9IHsKIAkuZ19jdHJsCQk9IG10OW0wMDFfZ19jdHJsLAogCS5zX2N0cmwJCT0gbXQ5bTAwMV9zX2N0cmwsCkBAIC02NjUsMTkgKzcwMSwzOCBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW50IG10OW0wMDFfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSAqY29kZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSB0b19tdDltMDAxKGNsaWVudCk7CisKKwlpZiAoKHVuc2lnbmVkIGludClpbmRleCA+PSBtdDltMDAxLT5udW1fZm10cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqY29kZSA9IG10OW0wMDEtPmZtdHNbaW5kZXhdLmNvZGU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG10OW0wMDFfc3ViZGV2X3ZpZGVvX29wcyA9IHsKIAkuc19zdHJlYW0JPSBtdDltMDAxX3Nfc3RyZWFtLAotCS5zX2ZtdAkJPSBtdDltMDAxX3NfZm10LAotCS5nX2ZtdAkJPSBtdDltMDAxX2dfZm10LAotCS50cnlfZm10CT0gbXQ5bTAwMV90cnlfZm10LAorCS5zX21idXNfZm10CT0gbXQ5bTAwMV9zX2ZtdCwKKwkuZ19tYnVzX2ZtdAk9IG10OW0wMDFfZ19mbXQsCisJLnRyeV9tYnVzX2ZtdAk9IG10OW0wMDFfdHJ5X2ZtdCwKIAkuc19jcm9wCQk9IG10OW0wMDFfc19jcm9wLAogCS5nX2Nyb3AJCT0gbXQ5bTAwMV9nX2Nyb3AsCiAJLmNyb3BjYXAJPSBtdDltMDAxX2Nyb3BjYXAsCisJLmVudW1fbWJ1c19mbXQJPSBtdDltMDAxX2VudW1fZm10LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9zZW5zb3Jfb3BzIG10OW0wMDFfc3ViZGV2X3NlbnNvcl9vcHMgPSB7CisJLmdfc2tpcF90b3BfbGluZXMJPSBtdDltMDAxX2dfc2tpcF90b3BfbGluZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBtdDltMDAxX3N1YmRldl9vcHMgPSB7CiAJLmNvcmUJPSAmbXQ5bTAwMV9zdWJkZXZfY29yZV9vcHMsCiAJLnZpZGVvCT0gJm10OW0wMDFfc3ViZGV2X3ZpZGVvX29wcywKKwkuc2Vuc29yCT0gJm10OW0wMDFfc3ViZGV2X3NlbnNvcl9vcHMsCiB9OwogCiBzdGF0aWMgaW50IG10OW0wMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTcxNCwxNSArNzY5LDE3IEBACiAKIAkvKiBTZWNvbmQgc3RhZ2UgcHJvYmUgLSB3aGVuIGEgY2FwdHVyZSBhZGFwdGVyIGlzIHRoZXJlICovCiAJaWNkLT5vcHMJCT0gJm10OW0wMDFfb3BzOwotCWljZC0+eV9za2lwX3RvcAkJPSAwOwogCisJbXQ5bTAwMS0+eV9za2lwX3RvcAk9IDA7CiAJbXQ5bTAwMS0+cmVjdC5sZWZ0CT0gTVQ5TTAwMV9DT0xVTU5fU0tJUDsKIAltdDltMDAxLT5yZWN0LnRvcAk9IE1UOU0wMDFfUk9XX1NLSVA7CiAJbXQ5bTAwMS0+cmVjdC53aWR0aAk9IE1UOU0wMDFfTUFYX1dJRFRIOwogCW10OW0wMDEtPnJlY3QuaGVpZ2h0CT0gTVQ5TTAwMV9NQVhfSEVJR0hUOwogCi0JLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKLQkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KKwkvKgorCSAqIFNpbXVsYXRlZCBhdXRvZXhwb3N1cmUuIElmIGVuYWJsZWQsIHdlIGNhbGN1bGF0ZSBzaHV0dGVyIHdpZHRoCisJICogb3Vyc2VsdmVzIGluIHRoZSBkcml2ZXIgYmFzZWQgb24gdmVydGljYWwgYmxhbmtpbmcgYW5kIGZyYW1lIHdpZHRoCisJICovCiAJbXQ5bTAwMS0+YXV0b2V4cG9zdXJlID0gMTsKIAogCXJldCA9IG10OW0wMDFfdmlkZW9fcHJvYmUoaWNkLCBjbGllbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCA5MGRhNjk5Li5kMzVmNTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTIzLDIzICsxMjMsMzQgQEAKICNkZWZpbmUgTVQ5TTExMV9NQVhfSEVJR0hUCTEwMjQKICNkZWZpbmUgTVQ5TTExMV9NQVhfV0lEVEgJMTI4MAogCi0jZGVmaW5lIENPTF9GTVQoX25hbWUsIF9kZXB0aCwgX2ZvdXJjYywgX2NvbG9yc3BhY2UpIFwKLQl7IC5uYW1lID0gX25hbWUsIC5kZXB0aCA9IF9kZXB0aCwgLmZvdXJjYyA9IF9mb3VyY2MsIFwKLQkuY29sb3JzcGFjZSA9IF9jb2xvcnNwYWNlIH0KLSNkZWZpbmUgUkdCX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjKSBcCi0JQ09MX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQikKLSNkZWZpbmUgSlBHX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjKSBcCi0JQ09MX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjLCBWNEwyX0NPTE9SU1BBQ0VfSlBFRykKKy8qIE1UOU0xMTEgaGFzIG9ubHkgb25lIGZpeGVkIGNvbG9yc3BhY2UgcGVyIHBpeGVsY29kZSAqLworc3RydWN0IG10OW0xMTFfZGF0YWZtdCB7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlCWNvZGU7CisJZW51bSB2NGwyX2NvbG9yc3BhY2UJCWNvbG9yc3BhY2U7Cit9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgbXQ5bTExMV9jb2xvdXJfZm9ybWF0c1tdID0gewotCUpQR19GTVQoIkNiWUNyWSAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1VZVlkpLAotCUpQR19GTVQoIkNyWUNiWSAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1ZZVVkpLAotCUpQR19GTVQoIllDYllDciAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1lVWVYpLAotCUpQR19GTVQoIllDcllDYiAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1lWWVUpLAotCVJHQl9GTVQoIlJHQiA1NjUiLCAxNiwgVjRMMl9QSVhfRk1UX1JHQjU2NSksCi0JUkdCX0ZNVCgiUkdCIDU1NSIsIDE2LCBWNEwyX1BJWF9GTVRfUkdCNTU1KSwKLQlSR0JfRk1UKCJCYXllciAoc1JHQikgMTAgYml0IiwgMTAsIFY0TDJfUElYX0ZNVF9TQkdHUjE2KSwKLQlSR0JfRk1UKCJCYXllciAoc1JHQikgOCBiaXQiLCA4LCBWNEwyX1BJWF9GTVRfU0JHR1I4KSwKKy8qIEZpbmQgYSBkYXRhIGZvcm1hdCBieSBhIHBpeGVsIGNvZGUgaW4gYW4gYXJyYXkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ5bTExMV9kYXRhZm10ICptdDltMTExX2ZpbmRfZGF0YWZtdCgKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZSwgY29uc3Qgc3RydWN0IG10OW0xMTFfZGF0YWZtdCAqZm10LAorCWludCBuKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmIChmbXRbaV0uY29kZSA9PSBjb2RlKQorCQkJcmV0dXJuIGZtdCArIGk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdDltMTExX2RhdGFmbXQgbXQ5bTExMV9jb2xvdXJfZm10c1tdID0geworCXtWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9CRSwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorCXtWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7VjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCisJe1Y0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorCXtWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBREhJX0xFLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiB9OwogCiBlbnVtIG10OW0xMTFfY29udGV4dCB7CkBAIC0xNTIsNyArMTYzLDcgQEAKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTExeCogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCWVudW0gbXQ5bTExMV9jb250ZXh0IGNvbnRleHQ7CiAJc3RydWN0IHY0bDJfcmVjdCByZWN0OwotCXUzMiBwaXhmbXQ7CisJY29uc3Qgc3RydWN0IG10OW0xMTFfZGF0YWZtdCAqZm10OwogCXVuc2lnbmVkIGludCBnYWluOwogCXVuc2lnbmVkIGNoYXIgYXV0b2V4cG9zdXJlOwogCXVuc2lnbmVkIGNoYXIgZGF0YXdpZHRoOwpAQCAtMjU4LDggKzI2OSw4IEBACiAJaW50IHdpZHRoID0gcmVjdC0+d2lkdGg7CiAJaW50IGhlaWdodCA9IHJlY3QtPmhlaWdodDsKIAotCWlmIChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCB8fAotCSAgICBtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCisJaWYgKG10OW0xMTEtPmZtdC0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggfHwKKwkgICAgbXQ5bTExMS0+Zm10LT5jb2RlID09IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfTEUpCiAJCWlzX3Jhd19mb3JtYXQgPSAxOwogCWVsc2UKIAkJaXNfcmF3X2Zvcm1hdCA9IDA7CkBAIC0zMDcsNyArMzE4LDggQEAKIAogc3RhdGljIGludCBtdDltMTExX3NldGZtdF9iYXllcjgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoY2xpZW50LCBNVDlNMTExX09VVEZNVF9QUk9DRVNTRURfQkFZRVIpOworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChjbGllbnQsIE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUiB8CisJCQkJICAgIE1UOU0xMTFfT1VURk1UX1JHQik7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtNDAxLDggKzQxMyw4IEBACiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAKLQlpZiAobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKLQkgICAgbXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KSB7CisJaWYgKG10OW0xMTEtPmZtdC0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggfHwKKwkgICAgbXQ5bTExMS0+Zm10LT5jb2RlID09IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfTEUpIHsKIAkJLyogQmF5ZXIgZm9ybWF0IC0gZXZlbiBzaXplIGxlbmd0aHMgKi8KIAkJcmVjdC0+d2lkdGgJPSBBTElHTihyZWN0LT53aWR0aCwgMik7CiAJCXJlY3QtPmhlaWdodAk9IEFMSUdOKHJlY3QtPmhlaWdodCwgMik7CkBAIC00NjAsMTIwICs0NzIsMTM5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG10OW0xMTFfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKLQlwaXgtPndpZHRoCQk9IG10OW0xMTEtPnJlY3Qud2lkdGg7Ci0JcGl4LT5oZWlnaHQJCT0gbXQ5bTExMS0+cmVjdC5oZWlnaHQ7Ci0JcGl4LT5waXhlbGZvcm1hdAk9IG10OW0xMTEtPnBpeGZtdDsKLQlwaXgtPmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORTsKLQlwaXgtPmNvbG9yc3BhY2UJCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJbWYtPndpZHRoCT0gbXQ5bTExMS0+cmVjdC53aWR0aDsKKwltZi0+aGVpZ2h0CT0gbXQ5bTExMS0+cmVjdC5oZWlnaHQ7CisJbWYtPmNvZGUJPSBtdDltMTExLT5mbXQtPmNvZGU7CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfcGl4Zm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiBwaXhmbXQpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldDsKIAotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgorCXN3aXRjaCAoY29kZSkgeworCWNhc2UgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4OgogCQlyZXQgPSBtdDltMTExX3NldGZtdF9iYXllcjgoY2xpZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxNjoKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfTEU6CiAJCXJldCA9IG10OW0xMTFfc2V0Zm10X2JheWVyMTAoY2xpZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NTVfMlg4X1BBREhJX0xFOgogCQlyZXQgPSBtdDltMTExX3NldGZtdF9yZ2I1NTUoY2xpZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFOgogCQlyZXQgPSBtdDltMTExX3NldGZtdF9yZ2I1NjUoY2xpZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOgogCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAwOwogCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDA7CiAJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihjbGllbnQpOwogCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfQkU6CiAJCW10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcyA9IDA7CiAJCW10OW0xMTEtPnN3YXBfeXV2X2NiX2NyID0gMTsKIAkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGNsaWVudCk7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRToKIAkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMTsKIAkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAwOwogCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFOgogCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAxOwogCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDE7CiAJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihjbGllbnQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlBpeGVsIGZvcm1hdCBub3QgaGFuZGxlZCA6ICV4XG4iLAotCQkJcGl4Zm10KTsKKwkJCWNvZGUpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCWlmICghcmV0KQotCQltdDltMTExLT5waXhmbXQgPSBwaXhmbXQ7Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMTExX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCWNvbnN0IHN0cnVjdCBtdDltMTExX2RhdGFmbXQgKmZtdDsKIAlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CiAJCS5sZWZ0CT0gbXQ5bTExMS0+cmVjdC5sZWZ0LAogCQkudG9wCT0gbXQ5bTExMS0+cmVjdC50b3AsCi0JCS53aWR0aAk9IHBpeC0+d2lkdGgsCi0JCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwkJLndpZHRoCT0gbWYtPndpZHRoLAorCQkuaGVpZ2h0CT0gbWYtPmhlaWdodCwKIAl9OwogCWludCByZXQ7CiAKKwlmbXQgPSBtdDltMTExX2ZpbmRfZGF0YWZtdChtZi0+Y29kZSwgbXQ5bTExMV9jb2xvdXJfZm10cywKKwkJCQkgICBBUlJBWV9TSVpFKG10OW0xMTFfY29sb3VyX2ZtdHMpKTsKKwlpZiAoIWZtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwKLQkJIiVzIGZtdD0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsIF9fZnVuY19fLAotCQlwaXgtPnBpeGVsZm9ybWF0LCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisJCSIlcyBjb2RlPSV4IGxlZnQ9JWQsIHRvcD0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxuIiwgX19mdW5jX18sCisJCW1mLT5jb2RlLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CiAKIAlyZXQgPSBtdDltMTExX21ha2VfcmVjdChjbGllbnQsICZyZWN0KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gbXQ5bTExMV9zZXRfcGl4Zm10KGNsaWVudCwgcGl4LT5waXhlbGZvcm1hdCk7Ci0JaWYgKCFyZXQpCi0JCW10OW0xMTEtPnJlY3QgPSByZWN0OworCQlyZXQgPSBtdDltMTExX3NldF9waXhmbXQoY2xpZW50LCBtZi0+Y29kZSk7CisJaWYgKCFyZXQpIHsKKwkJbXQ5bTExMS0+cmVjdAk9IHJlY3Q7CisJCW10OW0xMTEtPmZtdAk9IGZtdDsKKwkJbWYtPmNvbG9yc3BhY2UJPSBmbXQtPmNvbG9yc3BhY2U7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMTExX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCWJvb2wgYmF5ZXIgPSBwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKLQkJcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IG10OW0xMTFfZGF0YWZtdCAqZm10OworCWJvb2wgYmF5ZXIgPSBtZi0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggfHwKKwkJbWYtPmNvZGUgPT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRTsKKworCWZtdCA9IG10OW0xMTFfZmluZF9kYXRhZm10KG1mLT5jb2RlLCBtdDltMTExX2NvbG91cl9mbXRzLAorCQkJCSAgIEFSUkFZX1NJWkUobXQ5bTExMV9jb2xvdXJfZm10cykpOworCWlmICghZm10KSB7CisJCWZtdCA9IG10OW0xMTEtPmZtdDsKKwkJbWYtPmNvZGUgPSBmbXQtPmNvZGU7CisJfQogCiAJLyoKIAkgKiBXaXRoIEJheWVyIGZvcm1hdCBlbmZvcmNlIGV2ZW4gc2lkZSBsZW5ndGhzLCBidXQgbGV0IHRoZSB1c2VyIHBsYXkKIAkgKiB3aXRoIHRoZSBzdGFydGluZyBwaXhlbAogCSAqLwogCi0JaWYgKHBpeC0+aGVpZ2h0ID4gTVQ5TTExMV9NQVhfSEVJR0hUKQotCQlwaXgtPmhlaWdodCA9IE1UOU0xMTFfTUFYX0hFSUdIVDsKLQllbHNlIGlmIChwaXgtPmhlaWdodCA8IDIpCi0JCXBpeC0+aGVpZ2h0ID0gMjsKKwlpZiAobWYtPmhlaWdodCA+IE1UOU0xMTFfTUFYX0hFSUdIVCkKKwkJbWYtPmhlaWdodCA9IE1UOU0xMTFfTUFYX0hFSUdIVDsKKwllbHNlIGlmIChtZi0+aGVpZ2h0IDwgMikKKwkJbWYtPmhlaWdodCA9IDI7CiAJZWxzZSBpZiAoYmF5ZXIpCi0JCXBpeC0+aGVpZ2h0ID0gQUxJR04ocGl4LT5oZWlnaHQsIDIpOworCQltZi0+aGVpZ2h0ID0gQUxJR04obWYtPmhlaWdodCwgMik7CiAKLQlpZiAocGl4LT53aWR0aCA+IE1UOU0xMTFfTUFYX1dJRFRIKQotCQlwaXgtPndpZHRoID0gTVQ5TTExMV9NQVhfV0lEVEg7Ci0JZWxzZSBpZiAocGl4LT53aWR0aCA8IDIpCi0JCXBpeC0+d2lkdGggPSAyOworCWlmIChtZi0+d2lkdGggPiBNVDlNMTExX01BWF9XSURUSCkKKwkJbWYtPndpZHRoID0gTVQ5TTExMV9NQVhfV0lEVEg7CisJZWxzZSBpZiAobWYtPndpZHRoIDwgMikKKwkJbWYtPndpZHRoID0gMjsKIAllbHNlIGlmIChiYXllcikKLQkJcGl4LT53aWR0aCA9IEFMSUdOKHBpeC0+d2lkdGgsIDIpOworCQltZi0+d2lkdGggPSBBTElHTihtZi0+d2lkdGgsIDIpOworCisJbWYtPmNvbG9yc3BhY2UgPSBmbXQtPmNvbG9yc3BhY2U7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg2Myw3ICs4OTQsNyBAQAogCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwogCiAJbXQ5bTExMV9zZXRfY29udGV4dChjbGllbnQsIG10OW0xMTEtPmNvbnRleHQpOwotCW10OW0xMTFfc2V0X3BpeGZtdChjbGllbnQsIG10OW0xMTEtPnBpeGZtdCk7CisJbXQ5bTExMV9zZXRfcGl4Zm10KGNsaWVudCwgbXQ5bTExMS0+Zm10LT5jb2RlKTsKIAltdDltMTExX3NldHVwX3JlY3QoY2xpZW50LCAmbXQ5bTExMS0+cmVjdCk7CiAJbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIG10OW0xMTEtPmhmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfQ09MUyk7CiAJbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIG10OW0xMTEtPnZmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CkBAIC05NTIsOSArOTgzLDYgQEAKIAkJZ290byBlaTJjOwogCX0KIAotCWljZC0+Zm9ybWF0cyA9IG10OW0xMTFfY29sb3VyX2Zvcm1hdHM7Ci0JaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUobXQ5bTExMV9jb2xvdXJfZm9ybWF0cyk7Ci0KIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBhIE1UOU0xMXggY2hpcCBJRCAleFxuIiwgZGF0YSk7CiAKIGVpMmM6CkBAIC05NzEsMTMgKzk5OSwyNCBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW50IG10OW0xMTFfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSAqY29kZSkKK3sKKwlpZiAoKHVuc2lnbmVkIGludClpbmRleCA+PSBBUlJBWV9TSVpFKG10OW0xMTFfY29sb3VyX2ZtdHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpjb2RlID0gbXQ5bTExMV9jb2xvdXJfZm10c1tpbmRleF0uY29kZTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgbXQ5bTExMV9zdWJkZXZfdmlkZW9fb3BzID0gewotCS5zX2ZtdAkJPSBtdDltMTExX3NfZm10LAotCS5nX2ZtdAkJPSBtdDltMTExX2dfZm10LAotCS50cnlfZm10CT0gbXQ5bTExMV90cnlfZm10LAorCS5zX21idXNfZm10CT0gbXQ5bTExMV9zX2ZtdCwKKwkuZ19tYnVzX2ZtdAk9IG10OW0xMTFfZ19mbXQsCisJLnRyeV9tYnVzX2ZtdAk9IG10OW0xMTFfdHJ5X2ZtdCwKIAkuc19jcm9wCQk9IG10OW0xMTFfc19jcm9wLAogCS5nX2Nyb3AJCT0gbXQ5bTExMV9nX2Nyb3AsCiAJLmNyb3BjYXAJPSBtdDltMTExX2Nyb3BjYXAsCisJLmVudW1fbWJ1c19mbXQJPSBtdDltMTExX2VudW1fZm10LAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5bTExMV9zdWJkZXZfb3BzID0gewpAQCAtMTAxOSwxMiArMTA1OCwxMiBAQAogCiAJLyogU2Vjb25kIHN0YWdlIHByb2JlIC0gd2hlbiBhIGNhcHR1cmUgYWRhcHRlciBpcyB0aGVyZSAqLwogCWljZC0+b3BzCQk9ICZtdDltMTExX29wczsKLQlpY2QtPnlfc2tpcF90b3AJCT0gMDsKIAogCW10OW0xMTEtPnJlY3QubGVmdAk9IE1UOU0xMTFfTUlOX0RBUktfQ09MUzsKIAltdDltMTExLT5yZWN0LnRvcAk9IE1UOU0xMTFfTUlOX0RBUktfUk9XUzsKIAltdDltMTExLT5yZWN0LndpZHRoCT0gTVQ5TTExMV9NQVhfV0lEVEg7CiAJbXQ5bTExMS0+cmVjdC5oZWlnaHQJPSBNVDlNMTExX01BWF9IRUlHSFQ7CisJbXQ5bTExMS0+Zm10CQk9ICZtdDltMTExX2NvbG91cl9mbXRzWzBdOwogCiAJcmV0ID0gbXQ5bTExMV92aWRlb19wcm9iZShpY2QsIGNsaWVudCk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYwppbmRleCA2OTY2ZjY0Li5hOTA2MWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYwpAQCAtMTcsOSArMTcsMTEgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKLS8qIG10OXQwMzEgaTJjIGFkZHJlc3MgMHg1ZAorLyoKKyAqIG10OXQwMzEgaTJjIGFkZHJlc3MgMHg1ZAogICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgaTJjX2JvYXJkX2luZm8gYW5kIGxpbmsgdG8gaXQgZnJvbQotICogc3RydWN0IHNvY19jYW1lcmFfbGluayAqLworICogc3RydWN0IHNvY19jYW1lcmFfbGluaworICovCiAKIC8qIG10OXQwMzEgc2VsZWN0ZWQgcmVnaXN0ZXIgYWRkcmVzc2VzICovCiAjZGVmaW5lIE1UOVQwMzFfQ0hJUF9WRVJTSU9OCQkweDAwCkBAIC01OCwxNSArNjAsNiBAQAogCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8CVwKIAlTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfMTApCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBtdDl0MDMxX2NvbG91cl9mb3JtYXRzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiQmF5ZXIgKHNSR0IpIDEwIGJpdCIsCi0JCS5kZXB0aAkJPSAxMCwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMCwKLQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9Ci19OwotCiBzdHJ1Y3QgbXQ5dDAzMSB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CS8qIFNlbnNvciB3aW5kb3cgKi8KQEAgLTc0LDYgKzY3LDcgQEAKIAl1MTYgeHNraXA7CiAJdTE2IHlza2lwOwogCXVuc2lnbmVkIGludCBnYWluOworCXVuc2lnbmVkIHNob3J0IHlfc2tpcF90b3A7CS8qIExpbmVzIHRvIHNraXAgYXQgdGhlIHRvcCAqLwogCXVuc2lnbmVkIGludCBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIH07CkBAIC0yMDcsNiArMjAxLDcxIEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgTVQ5VDAzMV9CVVNfUEFSQU0pOwogfQogCitlbnVtIHsKKwlNVDlUMDMxX0NUUkxfVkZMSVAsCisJTVQ5VDAzMV9DVFJMX0hGTElQLAorCU1UOVQwMzFfQ1RSTF9HQUlOLAorCU1UOVQwMzFfQ1RSTF9FWFBPU1VSRSwKKwlNVDlUMDMxX0NUUkxfRVhQT1NVUkVfQVVUTywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgbXQ5dDAzMV9jb250cm9sc1tdID0geworCVtNVDlUMDMxX0NUUkxfVkZMSVBdID0geworCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJGbGlwIFZlcnRpY2FsbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sCisJW01UOVQwMzFfQ1RSTF9IRkxJUF0gPSB7CisJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkZsaXAgSG9yaXpvbnRhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorCVtNVDlUMDMxX0NUUkxfR0FJTl0gPSB7CisJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkJPSAiR2FpbiIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxMjcsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gNjQsCisJCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCisJfSwKKwlbTVQ5VDAzMV9DVFJMX0VYUE9TVVJFXSA9IHsKKwkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkJPSAiRXhwb3N1cmUiLAorCQkubWluaW11bQk9IDEsCisJCS5tYXhpbXVtCT0gMjU1LAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDI1NSwKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKKwl9LAorCVtNVDlUMDMxX0NUUkxfRVhQT1NVUkVfQVVUT10gPSB7CisJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiQXV0b21hdGljIEV4cG9zdXJlIiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG10OXQwMzFfb3BzID0geworCS5zZXRfYnVzX3BhcmFtCQk9IG10OXQwMzFfc2V0X2J1c19wYXJhbSwKKwkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5dDAzMV9xdWVyeV9idXNfcGFyYW0sCisJLmNvbnRyb2xzCQk9IG10OXQwMzFfY29udHJvbHMsCisJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG10OXQwMzFfY29udHJvbHMpLAorfTsKKwogLyogdGFyZ2V0IG11c3QgYmUgX2V2ZW5fICovCiBzdGF0aWMgdTE2IG10OXQwMzFfc2tpcChzMzIgKnNvdXJjZSwgczMyIHRhcmdldCwgczMyIG1heCkKIHsKQEAgLTIyNiwxMCArMjg1LDkgQEAKIH0KIAogLyogcmVjdCBpcyB0aGUgc2Vuc29yIHJlY3RhbmdsZSwgdGhlIGNhbGxlciBndWFyYW50ZWVzIHBhcmFtZXRlciB2YWxpZGl0eSAqLwotc3RhdGljIGludCBtdDl0MDMxX3NldF9wYXJhbXMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X3BhcmFtcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwgdTE2IHhza2lwLCB1MTYgeXNraXApCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOwogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOwogCWludCByZXQ7CiAJdTE2IHhiaW4sIHliaW47CkBAIC0yOTEsOCArMzQ5LDEwIEBACiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJuZXcgcGh5c2ljYWwgbGVmdCAldSwgdG9wICV1XG4iLAogCQlyZWN0LT5sZWZ0LCByZWN0LT50b3ApOwogCi0JLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIGd1YXJhbnRlZWQgYnkKLQkgKiBpY2QtPnRyeV9mbXRfY2FwKCksIHNvY19jYW1lcmFfc19jcm9wKCkgYW5kIHNvY19jYW1lcmFfY3JvcGNhcCgpICovCisJLyoKKwkgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgZ3VhcmFudGVlZCBieQorCSAqIGljZC0+dHJ5X2ZtdF9jYXAoKSwgc29jX2NhbWVyYV9zX2Nyb3AoKSBhbmQgc29jX2NhbWVyYV9jcm9wY2FwKCkKKwkgKi8KIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKIAlpZiAocmV0ID49IDApCkBAIC0zMDEsMTUgKzM2MSwxNCBAQAogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlUMDMxX1dJTkRPV19XSURUSCwgcmVjdC0+d2lkdGggLSAxKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVQwMzFfV0lORE9XX0hFSUdIVCwKLQkJCQlyZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgLSAxKTsKKwkJCQlyZWN0LT5oZWlnaHQgKyBtdDl0MDMxLT55X3NraXBfdG9wIC0gMSk7CiAJaWYgKHJldCA+PSAwICYmIG10OXQwMzEtPmF1dG9leHBvc3VyZSkgewotCQl1bnNpZ25lZCBpbnQgdG90YWxfaCA9IHJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIHZibGFuazsKKwkJdW5zaWduZWQgaW50IHRvdGFsX2ggPSByZWN0LT5oZWlnaHQgKyBtdDl0MDMxLT55X3NraXBfdG9wICsgdmJsYW5rOwogCQlyZXQgPSBzZXRfc2h1dHRlcihjbGllbnQsIHRvdGFsX2gpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCWNvbnN0IHUzMiBzaHV0dGVyX21heCA9IE1UOVQwMzFfTUFYX0hFSUdIVCArIHZibGFuazsKIAkJCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwgPQotCQkJCXNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywKLQkJCQkJCSAgICAgIFY0TDJfQ0lEX0VYUE9TVVJFKTsKKwkJCQkmbXQ5dDAzMV9jb250cm9sc1tNVDlUMDMxX0NUUkxfRVhQT1NVUkVdOwogCQkJbXQ5dDAzMS0+ZXhwb3N1cmUgPSAoc2h1dHRlcl9tYXggLyAyICsgKHRvdGFsX2ggLSAxKSAqCiAJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLwogCQkJCXNodXR0ZXJfbWF4ICsgcWN0cmwtPm1pbmltdW07CkBAIC0zMzQsNyArMzkzLDYgQEAKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSBhLT5jOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlyZWN0LndpZHRoID0gQUxJR04ocmVjdC53aWR0aCwgMik7CiAJcmVjdC5oZWlnaHQgPSBBTElHTihyZWN0LmhlaWdodCwgMik7CkBAIC0zNDUsNyArNDAzLDcgQEAKIAlzb2NfY2FtZXJhX2xpbWl0X3NpZGUoJnJlY3QudG9wLCAmcmVjdC5oZWlnaHQsCiAJCSAgICAgTVQ5VDAzMV9ST1dfU0tJUCwgTVQ5VDAzMV9NSU5fSEVJR0hULCBNVDlUMDMxX01BWF9IRUlHSFQpOwogCi0JcmV0dXJuIG10OXQwMzFfc2V0X3BhcmFtcyhpY2QsICZyZWN0LCBtdDl0MDMxLT54c2tpcCwgbXQ5dDAzMS0+eXNraXApOworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoY2xpZW50LCAmcmVjdCwgbXQ5dDAzMS0+eHNraXAsIG10OXQwMzEtPnlza2lwKTsKIH0KIAogc3RhdGljIGludCBtdDl0MDMxX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQpAQCAtMzczLDI3ICs0MzEsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl0MDMxX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5dDAzMV9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAotCXBpeC0+d2lkdGgJCT0gbXQ5dDAzMS0+cmVjdC53aWR0aCAvIG10OXQwMzEtPnhza2lwOwotCXBpeC0+aGVpZ2h0CQk9IG10OXQwMzEtPnJlY3QuaGVpZ2h0IC8gbXQ5dDAzMS0+eXNraXA7Ci0JcGl4LT5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9TR1JCRzEwOwotCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOwotCXBpeC0+Y29sb3JzcGFjZQkJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKwltZi0+d2lkdGgJPSBtdDl0MDMxLT5yZWN0LndpZHRoIC8gbXQ5dDAzMS0+eHNraXA7CisJbWYtPmhlaWdodAk9IG10OXQwMzEtPnJlY3QuaGVpZ2h0IC8gbXQ5dDAzMS0+eXNraXA7CisJbWYtPmNvZGUJPSBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMDsKKwltZi0+Y29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCW1mLT5maWVsZAk9IFY0TDJfRklFTERfTk9ORTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXQwMzFfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDl0MDMxX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAl1MTYgeHNraXAsIHlza2lwOwogCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IG10OXQwMzEtPnJlY3Q7CiAKQEAgLTQwMSwyNCArNDU4LDI5IEBACiAJICogdHJ5X2ZtdCBoYXMgcHV0IHdpZHRoIGFuZCBoZWlnaHQgd2l0aGluIGxpbWl0cy4KIAkgKiBTX0ZNVDogdXNlIGJpbm5pbmcgYW5kIHNraXBwaW5nIGZvciBzY2FsaW5nCiAJICovCi0JeHNraXAgPSBtdDl0MDMxX3NraXAoJnJlY3Qud2lkdGgsIHBpeC0+d2lkdGgsIE1UOVQwMzFfTUFYX1dJRFRIKTsKLQl5c2tpcCA9IG10OXQwMzFfc2tpcCgmcmVjdC5oZWlnaHQsIHBpeC0+aGVpZ2h0LCBNVDlUMDMxX01BWF9IRUlHSFQpOworCXhza2lwID0gbXQ5dDAzMV9za2lwKCZyZWN0LndpZHRoLCBtZi0+d2lkdGgsIE1UOVQwMzFfTUFYX1dJRFRIKTsKKwl5c2tpcCA9IG10OXQwMzFfc2tpcCgmcmVjdC5oZWlnaHQsIG1mLT5oZWlnaHQsIE1UOVQwMzFfTUFYX0hFSUdIVCk7CisKKwltZi0+Y29kZQk9IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwOworCW1mLT5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CiAKIAkvKiBtdDl0MDMxX3NldF9wYXJhbXMoKSBkb2Vzbid0IGNoYW5nZSB3aWR0aCBhbmQgaGVpZ2h0ICovCi0JcmV0dXJuIG10OXQwMzFfc2V0X3BhcmFtcyhpY2QsICZyZWN0LCB4c2tpcCwgeXNraXApOworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoY2xpZW50LCAmcmVjdCwgeHNraXAsIHlza2lwKTsKIH0KIAogLyoKICAqIElmIGEgdXNlciB3aW5kb3cgbGFyZ2VyIHRoYW4gc2Vuc29yIHdpbmRvdyBpcyByZXF1ZXN0ZWQsIHdlJ2xsIGluY3JlYXNlIHRoZQogICogc2Vuc29yIHdpbmRvdy4KICAqLwotc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCiAJdjRsX2JvdW5kX2FsaWduX2ltYWdlKAotCQkmcGl4LT53aWR0aCwgTVQ5VDAzMV9NSU5fV0lEVEgsIE1UOVQwMzFfTUFYX1dJRFRILCAxLAotCQkmcGl4LT5oZWlnaHQsIE1UOVQwMzFfTUlOX0hFSUdIVCwgTVQ5VDAzMV9NQVhfSEVJR0hULCAxLCAwKTsKKwkJJm1mLT53aWR0aCwgTVQ5VDAzMV9NSU5fV0lEVEgsIE1UOVQwMzFfTUFYX1dJRFRILCAxLAorCQkmbWYtPmhlaWdodCwgTVQ5VDAzMV9NSU5fSEVJR0hULCBNVDlUMDMxX01BWF9IRUlHSFQsIDEsIDApOworCisJbWYtPmNvZGUJPSBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMDsKKwltZi0+Y29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzksNTkgKzU0MSw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBtdDl0MDMxX2NvbnRyb2xzW10gPSB7Ci0JewotCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCi0JCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lCQk9ICJGbGlwIFZlcnRpY2FsbHkiLAotCQkubWluaW11bQk9IDAsCi0JCS5tYXhpbXVtCT0gMSwKLQkJLnN0ZXAJCT0gMSwKLQkJLmRlZmF1bHRfdmFsdWUJPSAwLAotCX0sIHsKLQkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAotCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkubmFtZQkJPSAiRmxpcCBIb3Jpem9udGFsbHkiLAotCQkubWluaW11bQk9IDAsCi0JCS5tYXhpbXVtCT0gMSwKLQkJLnN0ZXAJCT0gMSwKLQkJLmRlZmF1bHRfdmFsdWUJPSAwLAotCX0sIHsKLQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lCQk9ICJHYWluIiwKLQkJLm1pbmltdW0JPSAwLAotCQkubWF4aW11bQk9IDEyNywKLQkJLnN0ZXAJCT0gMSwKLQkJLmRlZmF1bHRfdmFsdWUJPSA2NCwKLQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKLQl9LCB7Ci0JCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKLQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUJCT0gIkV4cG9zdXJlIiwKLQkJLm1pbmltdW0JPSAxLAotCQkubWF4aW11bQk9IDI1NSwKLQkJLnN0ZXAJCT0gMSwKLQkJLmRlZmF1bHRfdmFsdWUJPSAyNTUsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCi0JfSwgewotCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkVfQVVUTywKLQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJLm5hbWUJCT0gIkF1dG9tYXRpYyBFeHBvc3VyZSIsCi0JCS5taW5pbXVtCT0gMCwKLQkJLm1heGltdW0JPSAxLAotCQkuc3RlcAkJPSAxLAotCQkuZGVmYXVsdF92YWx1ZQk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBtdDl0MDMxX29wcyA9IHsKLQkuc2V0X2J1c19wYXJhbQkJPSBtdDl0MDMxX3NldF9idXNfcGFyYW0sCi0JLnF1ZXJ5X2J1c19wYXJhbQk9IG10OXQwMzFfcXVlcnlfYnVzX3BhcmFtLAotCS5jb250cm9scwkJPSBtdDl0MDMxX2NvbnRyb2xzLAotCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShtdDl0MDMxX2NvbnRyb2xzKSwKLX07Ci0KIHN0YXRpYyBpbnQgbXQ5dDAzMV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CkBAIC01NjgsMTUgKzU3Nyw5IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOwogCWludCBkYXRhOwogCi0JcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoJm10OXQwMzFfb3BzLCBjdHJsLT5pZCk7Ci0KLQlpZiAoIXFjdHJsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX1ZGTElQOgogCQlpZiAoY3RybC0+dmFsdWUpCkBAIC01OTUsNiArNTk4LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXFjdHJsID0gJm10OXQwMzFfY29udHJvbHNbTVQ5VDAzMV9DVFJMX0dBSU5dOwogCQlpZiAoY3RybC0+dmFsdWUgPiBxY3RybC0+bWF4aW11bSB8fCBjdHJsLT52YWx1ZSA8IHFjdHJsLT5taW5pbXVtKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCS8qIFNlZSBEYXRhc2hlZXQgVGFibGUgNywgR2FpbiBzZXR0aW5ncy4gKi8KQEAgLTYzNCw2ICs2MzgsNyBAQAogCQltdDl0MDMxLT5nYWluID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCXFjdHJsID0gJm10OXQwMzFfY29udHJvbHNbTVQ5VDAzMV9DVFJMX0VYUE9TVVJFXTsKIAkJLyogbXQ5dDAzMSBoYXMgbWF4aW11bSA9PSBkZWZhdWx0ICovCiAJCWlmIChjdHJsLT52YWx1ZSA+IHFjdHJsLT5tYXhpbXVtIHx8IGN0cmwtPnZhbHVlIDwgcWN0cmwtPm1pbmltdW0pCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY1NywxMSArNjYyLDExIEBACiAJCQljb25zdCB1MTYgdmJsYW5rID0gTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSzsKIAkJCWNvbnN0IHUzMiBzaHV0dGVyX21heCA9IE1UOVQwMzFfTUFYX0hFSUdIVCArIHZibGFuazsKIAkJCXVuc2lnbmVkIGludCB0b3RhbF9oID0gbXQ5dDAzMS0+cmVjdC5oZWlnaHQgKwotCQkJCWljZC0+eV9za2lwX3RvcCArIHZibGFuazsKKwkJCQltdDl0MDMxLT55X3NraXBfdG9wICsgdmJsYW5rOwogCiAJCQlpZiAoc2V0X3NodXR0ZXIoY2xpZW50LCB0b3RhbF9oKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlxY3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybChpY2QtPm9wcywgVjRMMl9DSURfRVhQT1NVUkUpOworCQkJcWN0cmwgPSAmbXQ5dDAzMV9jb250cm9sc1tNVDlUMDMxX0NUUkxfRVhQT1NVUkVdOwogCQkJbXQ5dDAzMS0+ZXhwb3N1cmUgPSAoc2h1dHRlcl9tYXggLyAyICsgKHRvdGFsX2ggLSAxKSAqCiAJCQkJIChxY3RybC0+bWF4aW11bSAtIHFjdHJsLT5taW5pbXVtKSkgLwogCQkJCXNodXR0ZXJfbWF4ICsgcWN0cmwtPm1pbmltdW07CkBAIC02NjksMTUgKzY3NCwxOCBAQAogCQl9IGVsc2UKIAkJCW10OXQwMzEtPmF1dG9leHBvc3VyZSA9IDA7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotLyogSW50ZXJmYWNlIGFjdGl2ZSwgY2FuIHVzZSBpMmMuIElmIGl0IGZhaWxzLCBpdCBjYW4gaW5kZWVkIG1lYW4sIHRoYXQKLSAqIHRoaXMgd2Fzbid0IG91ciBjYXB0dXJlIGludGVyZmFjZSwgc28sIHdlIHdhaXQgZm9yIHRoZSByaWdodCBvbmUgKi8KKy8qCisgKiBJbnRlcmZhY2UgYWN0aXZlLCBjYW4gdXNlIGkyYy4gSWYgaXQgZmFpbHMsIGl0IGNhbiBpbmRlZWQgbWVhbiwgdGhhdAorICogdGhpcyB3YXNuJ3Qgb3VyIGNhcHR1cmUgaW50ZXJmYWNlLCBzbywgd2Ugd2FpdCBmb3IgdGhlIHJpZ2h0IG9uZQorICovCiBzdGF0aWMgaW50IG10OXQwMzFfdmlkZW9fcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSB0b19tdDl0MDMxKGNsaWVudCk7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKQEAgLTY5Miw4ICs3MDAsNiBAQAogCXN3aXRjaCAoZGF0YSkgewogCWNhc2UgMHgxNjIxOgogCQltdDl0MDMxLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5VDAzMTsKLQkJaWNkLT5mb3JtYXRzID0gbXQ5dDAzMV9jb2xvdXJfZm9ybWF0czsKLQkJaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUobXQ5dDAzMV9jb2xvdXJfZm9ybWF0cyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LApAQCAtNzE0LDYgKzcyMCwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbXQ5dDAzMV9nX3NraXBfdG9wX2xpbmVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqbGluZXMpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOworCisJKmxpbmVzID0gbXQ5dDAzMS0+eV9za2lwX3RvcDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG10OXQwMzFfc3ViZGV2X2NvcmVfb3BzID0gewogCS5nX2N0cmwJCT0gbXQ5dDAzMV9nX2N0cmwsCiAJLnNfY3RybAkJPSBtdDl0MDMxX3NfY3RybCwKQEAgLTcyNCwxOSArNzQwLDM1IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBpbnQgbXQ5dDAzMV9lbnVtX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgaW5kZXgsCisJCQkgICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQoreworCWlmIChpbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqY29kZSA9IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBtdDl0MDMxX3N1YmRldl92aWRlb19vcHMgPSB7CiAJLnNfc3RyZWFtCT0gbXQ5dDAzMV9zX3N0cmVhbSwKLQkuc19mbXQJCT0gbXQ5dDAzMV9zX2ZtdCwKLQkuZ19mbXQJCT0gbXQ5dDAzMV9nX2ZtdCwKLQkudHJ5X2ZtdAk9IG10OXQwMzFfdHJ5X2ZtdCwKKwkuc19tYnVzX2ZtdAk9IG10OXQwMzFfc19mbXQsCisJLmdfbWJ1c19mbXQJPSBtdDl0MDMxX2dfZm10LAorCS50cnlfbWJ1c19mbXQJPSBtdDl0MDMxX3RyeV9mbXQsCiAJLnNfY3JvcAkJPSBtdDl0MDMxX3NfY3JvcCwKIAkuZ19jcm9wCQk9IG10OXQwMzFfZ19jcm9wLAogCS5jcm9wY2FwCT0gbXQ5dDAzMV9jcm9wY2FwLAorCS5lbnVtX21idXNfZm10CT0gbXQ5dDAzMV9lbnVtX2ZtdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2Vuc29yX29wcyBtdDl0MDMxX3N1YmRldl9zZW5zb3Jfb3BzID0geworCS5nX3NraXBfdG9wX2xpbmVzCT0gbXQ5dDAzMV9nX3NraXBfdG9wX2xpbmVzLAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5dDAzMV9zdWJkZXZfb3BzID0gewogCS5jb3JlCT0gJm10OXQwMzFfc3ViZGV2X2NvcmVfb3BzLAogCS52aWRlbwk9ICZtdDl0MDMxX3N1YmRldl92aWRlb19vcHMsCisJLnNlbnNvcgk9ICZtdDl0MDMxX3N1YmRldl9zZW5zb3Jfb3BzLAogfTsKIAogc3RhdGljIGludCBtdDl0MDMxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCkBAIC03NDUsMTggKzc3NywxNiBAQAogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbDsKIAlpbnQgcmV0OwogCi0JaWYgKCFpY2QpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlUMDMxOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKGljZCkgeworCQlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwkJaWYgKCFpY2wpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTVQ5VDAzMSBkcml2ZXIgbmVlZHMgcGxhdGZvcm0gZGF0YVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCi0JaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7Ci0JaWYgKCFpY2wpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlUMDMxIGRyaXZlciBuZWVkcyBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWljZC0+b3BzID0gJm10OXQwMzFfb3BzOwogCX0KIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkgewpAQCAtNzcxLDE3ICs4MDEsMTYgQEAKIAogCXY0bDJfaTJjX3N1YmRldl9pbml0KCZtdDl0MDMxLT5zdWJkZXYsIGNsaWVudCwgJm10OXQwMzFfc3ViZGV2X29wcyk7CiAKLQkvKiBTZWNvbmQgc3RhZ2UgcHJvYmUgLSB3aGVuIGEgY2FwdHVyZSBhZGFwdGVyIGlzIHRoZXJlICovCi0JaWNkLT5vcHMJCT0gJm10OXQwMzFfb3BzOwotCWljZC0+eV9za2lwX3RvcAkJPSAwOwotCisJbXQ5dDAzMS0+eV9za2lwX3RvcAk9IDA7CiAJbXQ5dDAzMS0+cmVjdC5sZWZ0CT0gTVQ5VDAzMV9DT0xVTU5fU0tJUDsKIAltdDl0MDMxLT5yZWN0LnRvcAk9IE1UOVQwMzFfUk9XX1NLSVA7CiAJbXQ5dDAzMS0+cmVjdC53aWR0aAk9IE1UOVQwMzFfTUFYX1dJRFRIOwogCW10OXQwMzEtPnJlY3QuaGVpZ2h0CT0gTVQ5VDAzMV9NQVhfSEVJR0hUOwogCi0JLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKLQkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KKwkvKgorCSAqIFNpbXVsYXRlZCBhdXRvZXhwb3N1cmUuIElmIGVuYWJsZWQsIHdlIGNhbGN1bGF0ZSBzaHV0dGVyIHdpZHRoCisJICogb3Vyc2VsdmVzIGluIHRoZSBkcml2ZXIgYmFzZWQgb24gdmVydGljYWwgYmxhbmtpbmcgYW5kIGZyYW1lIHdpZHRoCisJICovCiAJbXQ5dDAzMS0+YXV0b2V4cG9zdXJlID0gMTsKIAogCW10OXQwMzEtPnhza2lwID0gMTsKQEAgLTc5NCw3ICs4MjMsOCBAQAogCW10OXQwMzFfZGlzYWJsZShjbGllbnQpOwogCiAJaWYgKHJldCkgewotCQlpY2QtPm9wcyA9IE5VTEw7CisJCWlmIChpY2QpCisJCQlpY2QtPm9wcyA9IE5VTEw7CiAJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCQlrZnJlZShtdDl0MDMxKTsKIAl9CkBAIC04MDcsNyArODM3LDggQEAKIAlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IHRvX210OXQwMzEoY2xpZW50KTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlpY2QtPm9wcyA9IE5VTEw7CisJaWYgKGljZCkKKwkJaWNkLT5vcHMgPSBOVUxMOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCWNsaWVudC0+ZHJpdmVyID0gTlVMTDsKIAlrZnJlZShtdDl0MDMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDExMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0ZGQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDExMi5jCkBAIC0wLDAgKzEsMTE3NyBAQAorLyoKKyAqIG10OXQxMTIgQ2FtZXJhIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIG92NzcyeCBkcml2ZXIsIG10OW0xMTEgZHJpdmVyLAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFJvYmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgorICogQ29weXJpZ2h0IDIwMDYtNyBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL210OXQxMTIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX21lZGlhYnVzLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKworLyogeW91IGNhbiBjaGVjayBQTEwvY2xvY2sgaW5mbyAqLworLyogI2RlZmluZSBFWFRfQ0xPQ0sgMjQwMDAwMDAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCW1hY3JvCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGZyYW1lIHNpemUKKyAqLworI2RlZmluZSBNQVhfV0lEVEggICAyMDQ4CisjZGVmaW5lIE1BWF9IRUlHSFQgIDE1MzYKKworI2RlZmluZSBWR0FfV0lEVEggICA2NDAKKyNkZWZpbmUgVkdBX0hFSUdIVCAgNDgwCisKKy8qCisgKiBtYWNybyBvZiByZWFkL3dyaXRlCisgKi8KKyNkZWZpbmUgRUNIRUNLRVIocmV0LCB4KQkJXAorCWRvIHsJCQkJXAorCQkocmV0KSA9ICh4KTsJCVwKKwkJaWYgKChyZXQpIDwgMCkJCVwKKwkJCXJldHVybiAocmV0KTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIGEsIGIpIFwKKwlFQ0hFQ0tFUihyZXQsIF9fbXQ5dDExMl9yZWdfd3JpdGUoY2xpZW50LCBhLCBiKSkKKyNkZWZpbmUgbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIGEsIGIpIFwKKwlFQ0hFQ0tFUihyZXQsIF9fbXQ5dDExMl9tY3Vfd3JpdGUoY2xpZW50LCBhLCBiKSkKKworI2RlZmluZSBtdDl0MTEyX3JlZ19tYXNrX3NldChyZXQsIGNsaWVudCwgYSwgYiwgYykgXAorCUVDSEVDS0VSKHJldCwgX19tdDl0MTEyX3JlZ19tYXNrX3NldChjbGllbnQsIGEsIGIsIGMpKQorI2RlZmluZSBtdDl0MTEyX21jdV9tYXNrX3NldChyZXQsIGNsaWVudCwgYSwgYiwgYykgXAorCUVDSEVDS0VSKHJldCwgX19tdDl0MTEyX21jdV9tYXNrX3NldChjbGllbnQsIGEsIGIsIGMpKQorCisjZGVmaW5lIG10OXQxMTJfcmVnX3JlYWQocmV0LCBjbGllbnQsIGEpIFwKKwlFQ0hFQ0tFUihyZXQsIF9fbXQ5dDExMl9yZWdfcmVhZChjbGllbnQsIGEpKQorCisvKgorICogTG9naWNhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgX1ZBUihpZCwgb2Zmc2V0LCBiYXNlKQkoYmFzZSB8IChpZCAmIDB4MWYpIDw8IDEwIHwgKG9mZnNldCAmIDB4M2ZmKSkKKyNkZWZpbmUgVkFSKGlkLCBvZmZzZXQpICBfVkFSKGlkLCBvZmZzZXQsIDB4MDAwMCkKKyNkZWZpbmUgVkFSOChpZCwgb2Zmc2V0KSBfVkFSKGlkLCBvZmZzZXQsIDB4ODAwMCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCXN0cnVjdAorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBtdDl0MTEyX2ZyYW1lX3NpemUgeworCXUxNiB3aWR0aDsKKwl1MTYgaGVpZ2h0OworfTsKKworc3RydWN0IG10OXQxMTJfZm9ybWF0IHsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZTsKKwllbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcnNwYWNlOworCXUxNiBmbXQ7CisJdTE2IG9yZGVyOworfTsKKworc3RydWN0IG10OXQxMTJfcHJpdiB7CisJc3RydWN0IHY0bDJfc3ViZGV2CQkgc3ViZGV2OworCXN0cnVjdCBtdDl0MTEyX2NhbWVyYV9pbmZvCSppbmZvOworCXN0cnVjdCBpMmNfY2xpZW50CQkqY2xpZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZQkgaWNkOworCXN0cnVjdCBtdDl0MTEyX2ZyYW1lX3NpemUJIGZyYW1lOworCWNvbnN0IHN0cnVjdCBtdDl0MTEyX2Zvcm1hdAkqZm9ybWF0OworCWludAkJCQkgbW9kZWw7CisJdTMyCQkJCSBmbGFnczsKKy8qIGZvciBmbGFncyAqLworI2RlZmluZSBJTklUX0RPTkUgICgxPDwwKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCXN1cHBvcnRlZCBmb3JtYXQKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ5dDExMl9mb3JtYXQgbXQ5dDExMl9jZm10c1tdID0geworCXsKKwkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5mbXQJCT0gMSwKKwkJLm9yZGVyCQk9IDAsCisJfSwgeworCQkuY29kZQkJPSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9CRSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLmZtdAkJPSAxLAorCQkub3JkZXIJCT0gMSwKKwl9LCB7CisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkuZm10CQk9IDEsCisJCS5vcmRlcgkJPSAyLAorCX0sIHsKKwkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfTEUsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5mbXQJCT0gMSwKKwkJLm9yZGVyCQk9IDMsCisJfSwgeworCQkuY29kZQkJPSBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEUsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5mbXQJCT0gOCwKKwkJLm9yZGVyCQk9IDIsCisJfSwgeworCQkuY29kZQkJPSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEUsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5mbXQJCT0gNCwKKwkJLm9yZGVyCQk9IDIsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQlnZW5lcmFsIGZ1bmN0aW9uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdDl0MTEyX3ByaXYgKnRvX210OXQxMTIoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLAorCQkJICAgIHN0cnVjdCBtdDl0MTEyX3ByaXYsCisJCQkgICAgc3ViZGV2KTsKK30KKworc3RhdGljIGludCBfX210OXQxMTJfcmVnX3JlYWQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGNvbW1hbmQpCit7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdOworCXU4IGJ1ZlsyXTsKKwlpbnQgcmV0OworCisJY29tbWFuZCA9IHN3YWIxNihjb21tYW5kKTsKKworCW1zZ1swXS5hZGRyICA9IGNsaWVudC0+YWRkcjsKKwltc2dbMF0uZmxhZ3MgPSAwOworCW1zZ1swXS5sZW4gICA9IDI7CisJbXNnWzBdLmJ1ZiAgID0gKHU4ICopJmNvbW1hbmQ7CisKKwltc2dbMV0uYWRkciAgPSBjbGllbnQtPmFkZHI7CisJbXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnWzFdLmxlbiAgID0gMjsKKwltc2dbMV0uYnVmICAgPSBidWY7CisKKwkvKgorCSAqIGlmIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIDwgMCwKKwkgKiBpdCBtZWFuIGVycm9yLgorCSAqIGVsc2UsIHVuZGVyIDE2Yml0IGlzIHZhbGlkIGRhdGEuCisJICovCisJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW1lbWNweSgmcmV0LCBidWYsIDIpOworCXJldHVybiBzd2FiMTYocmV0KTsKK30KKworc3RhdGljIGludCBfX210OXQxMTJfcmVnX3dyaXRlKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgdTE2IGNvbW1hbmQsIHUxNiBkYXRhKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwl1OCBidWZbNF07CisJaW50IHJldDsKKworCWNvbW1hbmQgPSBzd2FiMTYoY29tbWFuZCk7CisJZGF0YSA9IHN3YWIxNihkYXRhKTsKKworCW1lbWNweShidWYgKyAwLCAmY29tbWFuZCwgMik7CisJbWVtY3B5KGJ1ZiArIDIsICZkYXRhLCAgICAyKTsKKworCW1zZy5hZGRyICA9IGNsaWVudC0+YWRkcjsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gICA9IDQ7CisJbXNnLmJ1ZiAgID0gYnVmOworCisJLyoKKwkgKiBpMmNfdHJhbnNmZXIgcmV0dXJuIG1lc3NhZ2UgbGVuZ3RoLAorCSAqIGJ1dCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMCBpZiBjb3JyZWN0IGNhc2UKKwkgKi8KKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fbXQ5dDExMl9yZWdfbWFza19zZXQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIHUxNiAgY29tbWFuZCwKKwkJCQkgIHUxNiAgbWFzaywKKwkJCQkgIHUxNiAgc2V0KQoreworCWludCB2YWwgPSBfX210OXQxMTJfcmVnX3JlYWQoY2xpZW50LCBjb21tYW5kKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gc2V0ICYgbWFzazsKKworCXJldHVybiBfX210OXQxMTJfcmVnX3dyaXRlKGNsaWVudCwgY29tbWFuZCwgdmFsKTsKK30KKworLyogbWN1IGFjY2VzcyAqLworc3RhdGljIGludCBfX210OXQxMTJfbWN1X3JlYWQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGNvbW1hbmQpCit7CisJaW50IHJldDsKKworCXJldCA9IF9fbXQ5dDExMl9yZWdfd3JpdGUoY2xpZW50LCAweDA5OEUsIGNvbW1hbmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIF9fbXQ5dDExMl9yZWdfcmVhZChjbGllbnQsIDB4MDk5MCk7Cit9CisKK3N0YXRpYyBpbnQgX19tdDl0MTEyX21jdV93cml0ZShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgIHUxNiBjb21tYW5kLCB1MTYgZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gX19tdDl0MTEyX3JlZ193cml0ZShjbGllbnQsIDB4MDk4RSwgY29tbWFuZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gX19tdDl0MTEyX3JlZ193cml0ZShjbGllbnQsIDB4MDk5MCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgX19tdDl0MTEyX21jdV9tYXNrX3NldChjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgdTE2ICBjb21tYW5kLAorCQkJCSAgdTE2ICBtYXNrLAorCQkJCSAgdTE2ICBzZXQpCit7CisJaW50IHZhbCA9IF9fbXQ5dDExMl9tY3VfcmVhZChjbGllbnQsIGNvbW1hbmQpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBzZXQgJiBtYXNrOworCisJcmV0dXJuIF9fbXQ5dDExMl9tY3Vfd3JpdGUoY2xpZW50LCBjb21tYW5kLCB2YWwpOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfcmVzZXQoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmV0OworCisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAxYSwgMHgwMDAxLCAweDAwMDEpOworCW1zbGVlcCgxKTsKKwltdDl0MTEyX3JlZ19tYXNrX3NldChyZXQsIGNsaWVudCwgMHgwMDFhLCAweDAwMDEsIDB4MDAwMCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZuZGVmIEVYVF9DTE9DSworI2RlZmluZSBDTE9DS19JTkZPKGEsIGIpCisjZWxzZQorI2RlZmluZSBDTE9DS19JTkZPKGEsIGIpIG10OXQxMTJfY2xvY2tfaW5mbyhhLCBiKQorc3RhdGljIGludCBtdDl0MTEyX2Nsb2NrX2luZm8oY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGV4dCkKK3sKKwlpbnQgbSwgbiwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDc7CisJdTMyIHZjbywgY2xrOworCWNoYXIgKmVuYWJsZTsKKworCWV4dCAvPSAxMDAwOyAvKiBrYnl0ZSBvcmRlciAqLworCisJbXQ5dDExMl9yZWdfcmVhZChuLCBjbGllbnQsIDB4MDAxMik7CisJcDEgPSBuICYgMHgwMDBmOworCW4gPSBuID4+IDQ7CisJcDIgPSBuICYgMHgwMDBmOworCW4gPSBuID4+IDQ7CisJcDMgPSBuICYgMHgwMDBmOworCisJbXQ5dDExMl9yZWdfcmVhZChuLCBjbGllbnQsIDB4MDAyYSk7CisJcDQgPSBuICYgMHgwMDBmOworCW4gPSBuID4+IDQ7CisJcDUgPSBuICYgMHgwMDBmOworCW4gPSBuID4+IDQ7CisJcDYgPSBuICYgMHgwMDBmOworCisJbXQ5dDExMl9yZWdfcmVhZChuLCBjbGllbnQsIDB4MDAyYyk7CisJcDcgPSBuICYgMHgwMDBmOworCisJbXQ5dDExMl9yZWdfcmVhZChuLCBjbGllbnQsIDB4MDAxMCk7CisJbSA9IG4gJiAweDAwZmY7CisJbiA9IChuID4+IDgpICYgMHgwMDNmOworCisJZW5hYmxlID0gKCg2MDAwID4gZXh0KSB8fCAoNTQwMDAgPCBleHQpKSA/ICJYIiA6ICIiOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkVYVENMSyAgICAgICAgICA6ICUxMHUgSyAlc1xuIiwgZXh0LCBlbmFibGUpOworCisJdmNvID0gMiAqIG0gKiBleHQgLyAobisxKTsKKwllbmFibGUgPSAoKDM4NDAwMCA+IHZjbykgfHwgKDc2ODAwMCA8IHZjbykpID8gIlgiIDogIiI7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiVkNPICAgICAgICAgICAgIDogJTEwdSBLICVzXG4iLCB2Y28sIGVuYWJsZSk7CisKKwljbGsgPSB2Y28gLyAocDErMSkgLyAocDIrMSk7CisJZW5hYmxlID0gKDk2MDAwIDwgY2xrKSA/ICJYIiA6ICIiOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlBJWENMSyAgICAgICAgICA6ICUxMHUgSyAlc1xuIiwgY2xrLCBlbmFibGUpOworCisJY2xrID0gdmNvIC8gKHAzKzEpOworCWVuYWJsZSA9ICg3NjgwMDAgPCBjbGspID8gIlgiIDogIiI7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiTUlQSUNMSyAgICAgICAgIDogJTEwdSBLICVzXG4iLCBjbGssIGVuYWJsZSk7CisKKwljbGsgPSB2Y28gLyAocDYrMSk7CisJZW5hYmxlID0gKDk2MDAwIDwgY2xrKSA/ICJYIiA6ICIiOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIk1DVSBDTEsgICAgICAgICA6ICUxMHUgSyAlc1xuIiwgY2xrLCBlbmFibGUpOworCisJY2xrID0gdmNvIC8gKHA1KzEpOworCWVuYWJsZSA9ICg1NDAwMCA8IGNsaykgPyAiWCIgOiAiIjsKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJTT0MgQ0xLICAgICAgICAgOiAlMTB1IEsgJXNcbiIsIGNsaywgZW5hYmxlKTsKKworCWNsayA9IHZjbyAvIChwNCsxKTsKKwllbmFibGUgPSAoNzAwMDAgPCBjbGspID8gIlgiIDogIiI7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiU2Vuc29yIENMSyAgICAgIDogJTEwdSBLICVzXG4iLCBjbGssIGVuYWJsZSk7CisKKwljbGsgPSB2Y28gLyAocDcrMSk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRXh0ZXJuYWwgc2Vuc29yIDogJTEwdSBLXG4iLCBjbGspOworCisJY2xrID0gZXh0IC8gKG4rMSk7CisJZW5hYmxlID0gKCgyMDAwID4gY2xrKSB8fCAoMjQwMDAgPCBjbGspKSA/ICJYIiA6ICIiOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlBGRCAgICAgICAgICAgICA6ICUxMHUgSyAlc1xuIiwgY2xrLCBlbmFibGUpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbXQ5dDExMl9mcmFtZV9jaGVjayh1MzIgKndpZHRoLCB1MzIgKmhlaWdodCkKK3sKKwlpZiAoKndpZHRoID4gTUFYX1dJRFRIKQorCQkqd2lkdGggPSBNQVhfV0lEVEg7CisKKwlpZiAoKmhlaWdodCA+IE1BWF9IRUlHSFQpCisJCSpoZWlnaHQgPSBNQVhfSEVJR0hUOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfc2V0X2FfZnJhbWVfc2l6ZShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgIHUxNiB3aWR0aCwKKwkJCQkgICB1MTYgaGVpZ2h0KQoreworCWludCByZXQ7CisJdTE2IHdzdGFydCA9IChNQVhfV0lEVEggLSB3aWR0aCkgLyAyOworCXUxNiBoc3RhcnQgPSAoTUFYX0hFSUdIVCAtIGhlaWdodCkgLyAyOworCisJLyogKENvbnRleHQgQSkgSW1hZ2UgV2lkdGgvSGVpZ2h0ICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigyNiwgMCksIHdpZHRoKTsKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDI2LCAyKSwgaGVpZ2h0KTsKKworCS8qIChDb250ZXh0IEEpIE91dHB1dCBXaWR0aC9IZWlnaHQgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCA0MyksIDggKyB3aWR0aCk7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgNDUpLCA4ICsgaGVpZ2h0KTsKKworCS8qIChDb250ZXh0IEEpIFN0YXJ0IFJvdy9Db2x1bW4gKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCAyKSwgNCArIGhzdGFydCk7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgNCksIDQgKyB3c3RhcnQpOworCisJLyogKENvbnRleHQgQSkgRW5kIFJvdy9Db2x1bW4gKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCA2KSwgMTEgKyBoZWlnaHQgKyBoc3RhcnQpOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDgpLCAxMSArIHdpZHRoICArIHdzdGFydCk7CisKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxLCAwKSwgMHgwNik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OXQxMTJfc2V0X3BsbF9kaXZpZGVycyhjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICB1OCBtLCB1OCBuLAorCQkJCSAgICB1OCBwMSwgdTggcDIsIHU4IHAzLAorCQkJCSAgICB1OCBwNCwgdTggcDUsIHU4IHA2LAorCQkJCSAgICB1OCBwNykKK3sKKwlpbnQgcmV0OworCXUxNiB2YWw7CisKKwkvKiBOL00gKi8KKwl2YWwgPSAobiA8PCA4KSB8CisJICAgICAgKG0gPDwgMCk7CisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAxMCwgMHgzZmZmLCB2YWwpOworCisJLyogUDEvUDIvUDMgKi8KKwl2YWwgPSAoKHAzICYgMHgwRikgPDwgOCkgfAorCSAgICAgICgocDIgJiAweDBGKSA8PCA0KSB8CisJICAgICAgKChwMSAmIDB4MEYpIDw8IDApOworCW10OXQxMTJfcmVnX21hc2tfc2V0KHJldCwgY2xpZW50LCAweDAwMTIsIDB4MGZmZiwgdmFsKTsKKworCS8qIFA0L1A1L1A2ICovCisJdmFsID0gKDB4NyAgICAgICAgIDw8IDEyKSB8CisJICAgICAgKChwNiAmIDB4MEYpIDw8ICA4KSB8CisJICAgICAgKChwNSAmIDB4MEYpIDw8ICA0KSB8CisJICAgICAgKChwNCAmIDB4MEYpIDw8ICAwKTsKKwltdDl0MTEyX3JlZ19tYXNrX3NldChyZXQsIGNsaWVudCwgMHgwMDJBLCAweDdmZmYsIHZhbCk7CisKKwkvKiBQNyAqLworCXZhbCA9ICgweDEgICAgICAgICA8PCAxMikgfAorCSAgICAgICgocDcgJiAweDBGKSA8PCAgMCk7CisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAyQywgMHgxMDBmLCB2YWwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDl0MTEyX2luaXRfcGxsKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG10OXQxMTJfcHJpdiAqcHJpdiA9IHRvX210OXQxMTIoY2xpZW50KTsKKwlpbnQgZGF0YSwgaSwgcmV0OworCisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAxNCwgMHgwMDMsIDB4MDAwMSk7CisKKwkvKiBQTEwgY29udHJvbDogQllQQVNTIFBMTCA9IDg1MTcgKi8KKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgwMDE0LCAweDIxNDUpOworCisJLyogUmVwbGFjZSB0aGVzZSByZWdpc3RlcnMgd2hlbiBuZXcgdGltaW5nIHBhcmFtZXRlcnMgYXJlIGdlbmVyYXRlZCAqLworCW10OXQxMTJfc2V0X3BsbF9kaXZpZGVycyhjbGllbnQsCisJCQkJIHByaXYtPmluZm8tPmRpdmlkZXIubSwKKwkJCQkgcHJpdi0+aW5mby0+ZGl2aWRlci5uLAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnAxLAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnAyLAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnAzLAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnA0LAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnA1LAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnA2LAorCQkJCSBwcml2LT5pbmZvLT5kaXZpZGVyLnA3KTsKKworCS8qCisJICogVEVTVF9CWVBBU1MgIG9uCisJICogUExMX0VOQUJMRSAgIG9uCisJICogU0VMX0xPQ0tfREVUIG9uCisJICogVEVTVF9CWVBBU1MgIG9mZgorCSAqLworCW10OXQxMTJfcmVnX3dyaXRlKHJldCwgY2xpZW50LCAweDAwMTQsIDB4MjUyNSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDAxNCwgMHgyNTI3KTsKKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgwMDE0LCAweDM0MjcpOworCW10OXQxMTJfcmVnX3dyaXRlKHJldCwgY2xpZW50LCAweDAwMTQsIDB4MzAyNyk7CisKKwltZGVsYXkoMTApOworCisJLyoKKwkgKiBQTExfQllQQVNTIG9mZgorCSAqIFJlZmVyZW5jZSBjbG9jayBjb3VudAorCSAqIEkyQyBNYXN0ZXIgQ2xvY2sgRGl2aWRlcgorCSAqLworCW10OXQxMTJfcmVnX3dyaXRlKHJldCwgY2xpZW50LCAweDAwMTQsIDB4MzA0Nik7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDAyMiwgMHgwMTkwKTsKKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgzQjg0LCAweDAyMTIpOworCisJLyogRXh0ZXJuYWwgc2Vuc29yIGNsb2NrIGlzIFBMTCBieXBhc3MgKi8KKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgwMDJFLCAweDA1MDApOworCisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAxOCwgMHgwMDAyLCAweDAwMDIpOworCW10OXQxMTJfcmVnX21hc2tfc2V0KHJldCwgY2xpZW50LCAweDNCODIsIDB4MDAwNCwgMHgwMDA0KTsKKworCS8qIE1DVSBkaXNhYmxlZCAqLworCW10OXQxMTJfcmVnX21hc2tfc2V0KHJldCwgY2xpZW50LCAweDAwMTgsIDB4MDAwNCwgMHgwMDA0KTsKKworCS8qIG91dCBvZiBzdGFuZGJ5ICovCisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAxOCwgMHgwMDAxLCAwKTsKKworCW1kZWxheSg1MCk7CisKKwkvKgorCSAqIFN0YW5kYnkgV29ya2Fyb3VuZAorCSAqIERpc2FibGUgU2Vjb25kYXJ5IEkyQyBQYWRzCisJICovCisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDYxNCwgMHgwMDAxKTsKKwltZGVsYXkoMSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDYxNCwgMHgwMDAxKTsKKwltZGVsYXkoMSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDYxNCwgMHgwMDAxKTsKKwltZGVsYXkoMSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDYxNCwgMHgwMDAxKTsKKwltZGVsYXkoMSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDYxNCwgMHgwMDAxKTsKKwltZGVsYXkoMSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MDYxNCwgMHgwMDAxKTsKKwltZGVsYXkoMSk7CisKKwkvKiBwb2xsIHRvIHZlcmlmeSBvdXQgb2Ygc3RhbmRieS4gTXVzdCBQb2xsIHRoaXMgYml0ICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCW10OXQxMTJfcmVnX3JlYWQoZGF0YSwgY2xpZW50LCAweDAwMTgpOworCQlpZiAoMHg0MDAwICYgZGF0YSkKKwkJCWJyZWFrOworCisJCW1kZWxheSgxMCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDl0MTEyX2luaXRfc2V0dGluZyhjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCisJaW50IHJldDsKKworCS8qIEFkYXB0aXZlIE91dHB1dCBDbG9jayAoQSkgKi8KKwltdDl0MTEyX21jdV9tYXNrX3NldChyZXQsIGNsaWVudCwgVkFSKDI2LCAxNjApLCAweDAwNDAsIDB4MDAwMCk7CisKKwkvKiBSZWFkIE1vZGUgKEEpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgMTIpLCAweDAwMjQpOworCisJLyogRmluZSBDb3JyZWN0aW9uIChBKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDE1KSwgMHgwMENDKTsKKworCS8qIEZpbmUgSVQgTWluIChBKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDE3KSwgMHgwMWYxKTsKKworCS8qIEZpbmUgSVQgTWF4IE1hcmdpbiAoQSkgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCAxOSksIDB4MDBmRik7CisKKwkvKiBCYXNlIEZyYW1lIExpbmVzIChBKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDI5KSwgMHgwMzJEKTsKKworCS8qIE1pbiBMaW5lIExlbmd0aCAoQSkgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCAzMSksIDB4MDczYSk7CisKKwkvKiBMaW5lIExlbmd0aCAoQSkgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCAzNyksIDB4MDdkMCk7CisKKwkvKiBBZGFwdGl2ZSBPdXRwdXQgQ2xvY2sgKEIpICovCisJbXQ5dDExMl9tY3VfbWFza19zZXQocmV0LCBjbGllbnQsIFZBUigyNywgMTYwKSwgMHgwMDQwLCAweDAwMDApOworCisJLyogUm93IFN0YXJ0IChCKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDc0KSwgMHgwMDQpOworCisJLyogQ29sdW1uIFN0YXJ0IChCKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDc2KSwgMHgwMDQpOworCisJLyogUm93IEVuZCAoQikgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCA3OCksIDB4NjBCKTsKKworCS8qIENvbHVtbiBFbmQgKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgODApLCAweDgwQik7CisKKwkvKiBGaW5lIENvcnJlY3Rpb24gKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgODcpLCAweDAwOEMpOworCisJLyogRmluZSBJVCBNaW4gKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgODkpLCAweDAxRjEpOworCisJLyogRmluZSBJVCBNYXggTWFyZ2luIChCKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTgsIDkxKSwgMHgwMEZGKTsKKworCS8qIEJhc2UgRnJhbWUgTGluZXMgKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgMTAxKSwgMHgwNjY4KTsKKworCS8qIE1pbiBMaW5lIExlbmd0aCAoQikgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDE4LCAxMDMpLCAweDBBRjApOworCisJLyogTGluZSBMZW5ndGggKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgMTA5KSwgMHgwQUYwKTsKKworCS8qCisJICogRmxpY2tlciBEZWN0ZWN0aW9uIHJlZ2lzdGVycworCSAqIFRoaXMgc2VjdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgd2hlbmV2ZXIgbmV3IFRpbWluZyBmaWxlIGlzIGdlbmVyYXRlZAorCSAqIEFsbCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHJlcGxhY2VkCisJICogRm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgZ2VuZXJhdGVkIGZyb20gUmVnaXN0ZXIgV2l6YXJkIGJ1dCB1c2VyIGNhbgorCSAqIG1vZGlmeSB0aGVtLiBGb3IgZGV0YWlsIHNlZSBhdXRvIGZsaWNrZXIgZGV0ZWN0aW9uIHR1bmluZworCSAqLworCisJLyogRkRfRkRQRVJJT0RfU0VMRUNUICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoOCwgNSksIDB4MDEpOworCisJLyogUFJJX0JfQ09ORklHX0ZEX0FMR09fUlVOICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigyNywgMTcpLCAweDAwMDMpOworCisJLyogUFJJX0FfQ09ORklHX0ZEX0FMR09fUlVOICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigyNiwgMTcpLCAweDAwMDMpOworCisJLyoKKwkgKiBBRkQgcmFuZ2UgZGV0ZWN0aW9uIHR1bmluZyByZWdpc3RlcnMKKwkgKi8KKworCS8qIHNlYXJjaF9mMV81MCAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAxNjUpLCAweDI1KTsKKworCS8qIHNlYXJjaF9mMl81MCAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAxNjYpLCAweDI4KTsKKworCS8qIHNlYXJjaF9mMV82MCAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAxNjcpLCAweDJDKTsKKworCS8qIHNlYXJjaF9mMl82MCAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAxNjgpLCAweDJGKTsKKworCS8qIHBlcmlvZF81MEh6IChBKSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCA2OCksIDB4QkEpOworCisJLyogc2VjcmV0IHJlZ2lzdGVyIGJ5IGFwdGluYSAqLworCS8qIHBlcmlvZF81MEh6IChBIE1TQikgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxOCwgMzAzKSwgMHgwMCk7CisKKwkvKiBwZXJpb2RfNjBIeiAoQSkgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxOCwgNjkpLCAweDlCKTsKKworCS8qIHNlY3JldCByZWdpc3RlciBieSBhcHRpbmEgKi8KKwkvKiBwZXJpb2RfNjBIeiAoQSBNU0IpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoMTgsIDMwMSksIDB4MDApOworCisJLyogcGVyaW9kXzUwSHogKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoMTgsIDE0MCksIDB4ODIpOworCisJLyogc2VjcmV0IHJlZ2lzdGVyIGJ5IGFwdGluYSAqLworCS8qIHBlcmlvZF81MEh6IChCKSBNU0IgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxOCwgMzA0KSwgMHgwMCk7CisKKwkvKiBwZXJpb2RfNjBIeiAoQikgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxOCwgMTQxKSwgMHg2RCk7CisKKwkvKiBzZWNyZXQgcmVnaXN0ZXIgYnkgYXB0aW5hICovCisJLyogcGVyaW9kXzYwSHogKEIpIE1TQiAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAzMDIpLCAweDAwKTsKKworCS8qIEZEIE1vZGUgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCg4LCAyKSwgMHgxMCk7CisKKwkvKiBTdGF0X21pbiAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDgsIDkpLCAweDAyKTsKKworCS8qIFN0YXRfbWF4ICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoOCwgMTApLCAweDAzKTsKKworCS8qIE1pbl9hbXBsaXR1ZGUgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCg4LCAxMiksIDB4MEEpOworCisJLyogUlggRklGTyBXYXRlcm1hcmsgKEEpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgNzApLCAweDAwMTQpOworCisJLyogUlggRklGTyBXYXRlcm1hcmsgKEIpICovCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxOCwgMTQyKSwgMHgwMDE0KTsKKworCS8qIE1DTEs6IDE2TUh6CisJICogUENMSzogNzNNSHoKKwkgKiBDb3JlUGl4Q0xLOiAzNi41IE1IegorCSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAweDAwNDQpLCAxMzMpOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAweDAwNDUpLCAxMTApOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAweDAwOGMpLCAxMzApOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAweDAwOGQpLCAxMDgpOworCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoMTgsIDB4MDBBNSksIDI3KTsKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxOCwgMHgwMGE2KSwgMzApOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDE4LCAweDAwYTcpLCAzMik7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoMTgsIDB4MDBhOCksIDM1KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDExMl9hdXRvX2ZvY3VzX3NldHRpbmcoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmV0OworCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxMiwgMTMpLAkweDAwMEYpOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTIsIDIzKSwJMHgwRjBGKTsKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxLCAwKSwJMHgwNik7CisKKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgwNjE0LCAweDAwMDApOworCisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUjgoMSwgMCksCTB4MDUpOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDEyLCAyKSwJMHgwMik7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxMiwgMyksCTB4MDAwMik7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxNywgMyksCTB4ODAwMSk7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigxNywgMTEpLAkweDAwMjUpOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMTcsIDEzKSwJMHgwMTkzKTsKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxNywgMzMpLAkweDE4KTsKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxLCAwKSwJMHgwNSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OXQxMTJfYXV0b19mb2N1c190cmlnZ2VyKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJldDsKKworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVI4KDEyLCAyNSksIDB4MDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDl0MTEyX2luaXRfY2FtZXJhKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJldDsKKworCUVDSEVDS0VSKHJldCwgbXQ5dDExMl9yZXNldChjbGllbnQpKTsKKworCUVDSEVDS0VSKHJldCwgbXQ5dDExMl9pbml0X3BsbChjbGllbnQpKTsKKworCUVDSEVDS0VSKHJldCwgbXQ5dDExMl9pbml0X3NldHRpbmcoY2xpZW50KSk7CisKKwlFQ0hFQ0tFUihyZXQsIG10OXQxMTJfYXV0b19mb2N1c19zZXR0aW5nKGNsaWVudCkpOworCisJbXQ5dDExMl9yZWdfbWFza19zZXQocmV0LCBjbGllbnQsIDB4MDAxOCwgMHgwMDA0LCAwKTsKKworCS8qIEFuYWxvZyBzZXR0aW5nIEIgKi8KKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgzMDg0LCAweDI0MDkpOworCW10OXQxMTJfcmVnX3dyaXRlKHJldCwgY2xpZW50LCAweDMwOTIsIDB4MEE0OSk7CisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MzA5NCwgMHg0OTQ5KTsKKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgzMDk2LCAweDQ5NTApOworCisJLyoKKwkgKiBEaXNhYmxlIGFkYXB0aXZlIGNsb2NrCisJICogUFJJX0FfQ09ORklHX0pQRUdfT0JfVFhfQ09OVFJPTF9WQVIKKwkgKiBQUklfQl9DT05GSUdfSlBFR19PQl9UWF9DT05UUk9MX1ZBUgorCSAqLworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMjYsIDE2MCksIDB4MEEyRSk7CisJbXQ5dDExMl9tY3Vfd3JpdGUocmV0LCBjbGllbnQsIFZBUigyNywgMTYwKSwgMHgwQTJFKTsKKworCS8qIENvbmZpZ3VyZSBTVGF0dXMgaW4gU3RhdHVzX2JlZm9yZV9sZW5ndGggRm9ybWF0IGFuZCBlbmFibGUgaGVhZGVyICovCisJLyogUFJJX0JfQ09ORklHX0pQRUdfT0JfVFhfQ09OVFJPTF9WQVIgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDI3LCAxNDQpLCAweDBDQjQpOworCisJLyogRW5hYmxlIEpQRUcgaW4gY29udGV4dCBCICovCisJLyogUFJJX0JfQ09ORklHX0pQRUdfT0JfVFhfQ09OVFJPTF9WQVIgKi8KKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgyNywgMTQyKSwgMHgwMSk7CisKKwkvKiBEaXNhYmxlIERhY19UWExPICovCisJbXQ5dDExMl9yZWdfd3JpdGUocmV0LCBjbGllbnQsIDB4MzE2QywgMHgzNTBGKTsKKworCS8qIFNldCBtYXggc2xldyByYXRlcyAqLworCW10OXQxMTJfcmVnX3dyaXRlKHJldCwgY2xpZW50LCAweDFFLCAweDc3Nyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJc29jX2NhbWVyYV9vcHMKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG10OXQxMTJfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgdW5zaWduZWQgbG9uZwlmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5dDExMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOworCXN0cnVjdCBtdDl0MTEyX3ByaXYgKnByaXYgPSB0b19tdDl0MTEyKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJZmxhZ3MgfD0gKHByaXYtPmluZm8tPmZsYWdzICYgTVQ5VDExMl9GTEFHX1BDTEtfUklTSU5HX0VER0UpID8KKwkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIDogU09DQU1fUENMS19TQU1QTEVfRkFMTElORzsKKworCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE1UOVQxMTJfRkxBR19EQVRBV0lEVEhfOCkKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgbXQ5dDExMl9vcHMgPSB7CisJLnNldF9idXNfcGFyYW0JCT0gbXQ5dDExMl9zZXRfYnVzX3BhcmFtLAorCS5xdWVyeV9idXNfcGFyYW0JPSBtdDl0MTEyX3F1ZXJ5X2J1c19wYXJhbSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQl2NGwyX3N1YmRldl9jb3JlX29wcworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgbXQ5dDExMl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBtdDl0MTEyX3ByaXYgKnByaXYgPSB0b19tdDl0MTEyKGNsaWVudCk7CisKKwlpZC0+aWRlbnQgICAgPSBwcml2LT5tb2RlbDsKKwlpZC0+cmV2aXNpb24gPSAwOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IG10OXQxMTJfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCWludCAgICAgICAgICAgICAgICByZXQ7CisKKwlyZWctPnNpemUgPSAyOworCW10OXQxMTJfcmVnX3JlYWQocmV0LCBjbGllbnQsIHJlZy0+cmVnKTsKKworCXJlZy0+dmFsID0gKF9fdTY0KXJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCWludCByZXQ7CisKKwltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtdDl0MTEyX3N1YmRldl9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50CT0gbXQ5dDExMl9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyCT0gbXQ5dDExMl9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gbXQ5dDExMl9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQl2NGwyX3N1YmRldl92aWRlb19vcHMKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG10OXQxMTJfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXQxMTJfcHJpdiAqcHJpdiA9IHRvX210OXQxMTIoY2xpZW50KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZW5hYmxlKSB7CisJCS8qIEZJWE1FCisJCSAqCisJCSAqIElmIHVzZXIgc2VsZWN0ZWQgbGFyZ2Ugb3V0cHV0IHNpemUsCisJCSAqIGFuZCB1c2VkIGl0IGxvbmcgdGltZSwKKwkJICogbXQ5dDExMiBjYW1lcmEgd2lsbCBiZSB2ZXJ5IHdhcm0uCisJCSAqCisJCSAqIEJ1dCBjdXJyZW50IGRyaXZlciBjYW4gbm90IHN0b3AgbXQ5dDExMiBjYW1lcmEuCisJCSAqIFNvLCBzZXQgc21hbGwgc2l6ZSBoZXJlIHRvIHNvbHZlIHRoaXMgcHJvYmxlbS4KKwkJICovCisJCW10OXQxMTJfc2V0X2FfZnJhbWVfc2l6ZShjbGllbnQsIFZHQV9XSURUSCwgVkdBX0hFSUdIVCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCEocHJpdi0+ZmxhZ3MgJiBJTklUX0RPTkUpKSB7CisJCXUxNiBwYXJhbSA9IChNVDlUMTEyX0ZMQUdfUENMS19SSVNJTkdfRURHRSAmCisJCQkgICAgIHByaXYtPmluZm8tPmZsYWdzKSA/IDB4MDAwMSA6IDB4MDAwMDsKKworCQlFQ0hFQ0tFUihyZXQsIG10OXQxMTJfaW5pdF9jYW1lcmEoY2xpZW50KSk7CisKKwkJLyogSW52ZXJ0IFBDTEsgKERhdGEgc2FtcGxlZCBvbiBmYWxsaW5nIGVkZ2Ugb2YgcGl4Y2xrKSAqLworCQltdDl0MTEyX3JlZ193cml0ZShyZXQsIGNsaWVudCwgMHgzQzIwLCBwYXJhbSk7CisKKwkJbWRlbGF5KDUpOworCisJCXByaXYtPmZsYWdzIHw9IElOSVRfRE9ORTsKKwl9CisKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSKDI2LCA3KSwgcHJpdi0+Zm9ybWF0LT5mbXQpOworCW10OXQxMTJfbWN1X3dyaXRlKHJldCwgY2xpZW50LCBWQVIoMjYsIDkpLCBwcml2LT5mb3JtYXQtPm9yZGVyKTsKKwltdDl0MTEyX21jdV93cml0ZShyZXQsIGNsaWVudCwgVkFSOCgxLCAwKSwgMHgwNik7CisKKwltdDl0MTEyX3NldF9hX2ZyYW1lX3NpemUoY2xpZW50LAorCQkJCSBwcml2LT5mcmFtZS53aWR0aCwKKwkJCQkgcHJpdi0+ZnJhbWUuaGVpZ2h0KTsKKworCUVDSEVDS0VSKHJldCwgbXQ5dDExMl9hdXRvX2ZvY3VzX3RyaWdnZXIoY2xpZW50KSk7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZvcm1hdCA6ICVkXG4iLCBwcml2LT5mb3JtYXQtPmNvZGUpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAic2l6ZSAgIDogJWQgeCAlZFxuIiwKKwkJcHJpdi0+ZnJhbWUud2lkdGgsCisJCXByaXYtPmZyYW1lLmhlaWdodCk7CisKKwlDTE9DS19JTkZPKGNsaWVudCwgRVhUX0NMT0NLKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDExMl9zZXRfcGFyYW1zKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKKwkJCSAgICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlKQoreworCXN0cnVjdCBtdDl0MTEyX3ByaXYgKnByaXYgPSB0b19tdDl0MTEyKGNsaWVudCk7CisJaW50IGk7CisKKwlwcml2LT5mb3JtYXQgPSBOVUxMOworCisJLyoKKwkgKiBmcmFtZSBzaXplIGNoZWNrCisJICovCisJbXQ5dDExMl9mcmFtZV9jaGVjaygmd2lkdGgsICZoZWlnaHQpOworCisJLyoKKwkgKiBnZXQgY29sb3IgZm9ybWF0CisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ5dDExMl9jZm10cyk7IGkrKykKKwkJaWYgKG10OXQxMTJfY2ZtdHNbaV0uY29kZSA9PSBjb2RlKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKG10OXQxMTJfY2ZtdHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPmZyYW1lLndpZHRoICA9ICh1MTYpd2lkdGg7CisJcHJpdi0+ZnJhbWUuaGVpZ2h0ID0gKHUxNiloZWlnaHQ7CisKKwlwcml2LT5mb3JtYXQgPSBtdDl0MTEyX2NmbXRzICsgaTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQkJPSAwOworCWEtPmJvdW5kcy50b3AJCQk9IDA7CisJYS0+Ym91bmRzLndpZHRoCQkJPSBWR0FfV0lEVEg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSBWR0FfSEVJR0hUOworCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDExMl9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlhLT5jLmxlZnQJPSAwOworCWEtPmMudG9wCT0gMDsKKwlhLT5jLndpZHRoCT0gVkdBX1dJRFRIOworCWEtPmMuaGVpZ2h0CT0gVkdBX0hFSUdIVDsKKwlhLT50eXBlCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfc19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmYS0+YzsKKworCXJldHVybiBtdDl0MTEyX3NldF9wYXJhbXMoY2xpZW50LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LAorCQkJCSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRSk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDExMl9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5dDExMl9wcml2ICpwcml2ID0gdG9fbXQ5dDExMihjbGllbnQpOworCisJaWYgKCFwcml2LT5mb3JtYXQpIHsKKwkJaW50IHJldCA9IG10OXQxMTJfc2V0X3BhcmFtcyhjbGllbnQsIFZHQV9XSURUSCwgVkdBX0hFSUdIVCwKKwkJCQkJICAgICBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwltZi0+d2lkdGgJPSBwcml2LT5mcmFtZS53aWR0aDsKKwltZi0+aGVpZ2h0CT0gcHJpdi0+ZnJhbWUuaGVpZ2h0OworCS8qIFRPRE86IHNldCBjb2xvcnNwYWNlICovCisJbWYtPmNvZGUJPSBwcml2LT5mb3JtYXQtPmNvZGU7CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDExMl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKworCS8qIFRPRE86IHNldCBjb2xvcnNwYWNlICovCisJcmV0dXJuIG10OXQxMTJfc2V0X3BhcmFtcyhjbGllbnQsIG1mLT53aWR0aCwgbWYtPmhlaWdodCwgbWYtPmNvZGUpOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCit7CisJbXQ5dDExMl9mcmFtZV9jaGVjaygmbWYtPndpZHRoLCAmbWYtPmhlaWdodCk7CisKKwkvKiBUT0RPOiBzZXQgY29sb3JzcGFjZSAqLworCW1mLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQxMTJfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQoreworCWlmICgodW5zaWduZWQgaW50KWluZGV4ID49IEFSUkFZX1NJWkUobXQ5dDExMl9jZm10cykpCisJCXJldHVybiAtRUlOVkFMOworCisJKmNvZGUgPSBtdDl0MTEyX2NmbXRzW2luZGV4XS5jb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBtdDl0MTEyX3N1YmRldl92aWRlb19vcHMgPSB7CisJLnNfc3RyZWFtCT0gbXQ5dDExMl9zX3N0cmVhbSwKKwkuZ19tYnVzX2ZtdAk9IG10OXQxMTJfZ19mbXQsCisJLnNfbWJ1c19mbXQJPSBtdDl0MTEyX3NfZm10LAorCS50cnlfbWJ1c19mbXQJPSBtdDl0MTEyX3RyeV9mbXQsCisJLmNyb3BjYXAJPSBtdDl0MTEyX2Nyb3BjYXAsCisJLmdfY3JvcAkJPSBtdDl0MTEyX2dfY3JvcCwKKwkuc19jcm9wCQk9IG10OXQxMTJfc19jcm9wLAorCS5lbnVtX21idXNfZm10CT0gbXQ5dDExMl9lbnVtX2ZtdCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQlpMmMgZHJpdmVyCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5dDExMl9zdWJkZXZfb3BzID0geworCS5jb3JlCT0gJm10OXQxMTJfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZtdDl0MTEyX3N1YmRldl92aWRlb19vcHMsCit9OworCitzdGF0aWMgaW50IG10OXQxMTJfY2FtZXJhX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG10OXQxMTJfcHJpdiAqcHJpdiA9IHRvX210OXQxMTIoY2xpZW50KTsKKwljb25zdCBjaGFyICAgICAgICAgICpkZXZuYW1lOworCWludCAgICAgICAgICAgICAgICAgIGNoaXBpZDsKKworCS8qCisJICogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KKwkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LgorCSAqLworCWlmICghaWNkLT5kZXYucGFyZW50IHx8CisJICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogY2hlY2sgYW5kIHNob3cgY2hpcCBJRAorCSAqLworCW10OXQxMTJfcmVnX3JlYWQoY2hpcGlkLCBjbGllbnQsIDB4MDAwMCk7CisKKwlzd2l0Y2ggKGNoaXBpZCkgeworCWNhc2UgMHgyNjgwOgorCQlkZXZuYW1lID0gIm10OXQxMTEiOworCQlwcml2LT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5VDExMTsKKwkJYnJlYWs7CisJY2FzZSAweDI2ODI6CisJCWRldm5hbWUgPSAibXQ5dDExMiI7CisJCXByaXYtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlUMTEyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlByb2R1Y3QgSUQgZXJyb3IgJTA0eFxuIiwgY2hpcGlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiJXMgY2hpcCBJRCAlMDR4XG4iLCBkZXZuYW1lLCBjaGlwaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDExMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCit7CisJc3RydWN0IG10OXQxMTJfcHJpdiAgICAgICAgKnByaXY7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAgICAgKmljbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OworCisJaWYgKCFpY2QpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJtdDl0MTEyOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwlpZiAoIWljbCB8fCAhaWNsLT5wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5pbmZvID0gaWNsLT5wcml2OworCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgY2xpZW50LCAmbXQ5dDExMl9zdWJkZXZfb3BzKTsKKworCWljZC0+b3BzID0gJm10OXQxMTJfb3BzOworCisJcmV0ID0gbXQ5dDExMl9jYW1lcmFfcHJvYmUoaWNkLCBjbGllbnQpOworCWlmIChyZXQpIHsKKwkJaWNkLT5vcHMgPSBOVUxMOworCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwkJa2ZyZWUocHJpdik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDl0MTEyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtdDl0MTEyX3ByaXYgKnByaXYgPSB0b19tdDl0MTEyKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWNkLT5vcHMgPSBOVUxMOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKHByaXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbXQ5dDExMl9pZFtdID0geworCXsgIm10OXQxMTIiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG10OXQxMTJfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbXQ5dDExMl9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10OXQxMTIiLAorCX0sCisJLnByb2JlICAgID0gbXQ5dDExMl9wcm9iZSwKKwkucmVtb3ZlICAgPSBtdDl0MTEyX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBtdDl0MTEyX2lkLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCW1vZHVsZSBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IG10OXQxMTJfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm10OXQxMTJfaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdDl0MTEyX21vZHVsZV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm10OXQxMTJfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG10OXQxMTJfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQobXQ5dDExMl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29DIENhbWVyYSBkcml2ZXIgZm9yIG10OXQxMTIiKTsKK01PRFVMRV9BVVRIT1IoIkt1bmlub3JpIE1vcmltb3RvIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IDk5NTYwN2YuLjkxZGY3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0xOCw5ICsxOCwxMSBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAotLyogbXQ5djAyMiBpMmMgYWRkcmVzcyAweDQ4LCAweDRjLCAweDU4LCAweDVjCisvKgorICogbXQ5djAyMiBpMmMgYWRkcmVzcyAweDQ4LCAweDRjLCAweDU4LCAweDVjCiAgKiBUaGUgcGxhdGZvcm0gaGFzIHRvIGRlZmluZSBjdHJ1Y3QgaTJjX2JvYXJkX2luZm8gb2JqZWN0cyBhbmQgbGluayB0byB0aGVtCi0gKiBmcm9tIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKi8KKyAqIGZyb20gc3RydWN0IHNvY19jYW1lcmFfbGluaworICovCiAKIHN0YXRpYyBjaGFyICpzZW5zb3JfdHlwZTsKIG1vZHVsZV9wYXJhbShzZW5zb3JfdHlwZSwgY2hhcnAsIFNfSVJVR08pOwpAQCAtNjIsNDEgKzY0LDQ5IEBACiAjZGVmaW5lIE1UOVYwMjJfQ09MVU1OX1NLSVAJCTEKICNkZWZpbmUgTVQ5VjAyMl9ST1dfU0tJUAkJNAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgbXQ5djAyMl9jb2xvdXJfZm9ybWF0c1tdID0gewotCS8qIE9yZGVyIGltcG9ydGFudDogZmlyc3QgbmF0aXZlbHkgc3VwcG9ydGVkLAotCSAqIHNlY29uZCBzdXBwb3J0ZWQgd2l0aCBhIEdQSU8gZXh0ZW5kZXIgKi8KLQl7Ci0JCS5uYW1lCQk9ICJCYXllciAoc1JHQikgMTAgYml0IiwKLQkJLmRlcHRoCQk9IDEwLAotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjE2LAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0sIHsKLQkJLm5hbWUJCT0gIkJheWVyIChzUkdCKSA4IGJpdCIsCi0JCS5kZXB0aAkJPSA4LAotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JfQorLyogTVQ5VjAyMiBoYXMgb25seSBvbmUgZml4ZWQgY29sb3JzcGFjZSBwZXIgcGl4ZWxjb2RlICovCitzdHJ1Y3QgbXQ5djAyMl9kYXRhZm10IHsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUJY29kZTsKKwllbnVtIHY0bDJfY29sb3JzcGFjZQkJY29sb3JzcGFjZTsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0c1tdID0geworLyogRmluZCBhIGRhdGEgZm9ybWF0IGJ5IGEgcGl4ZWwgY29kZSBpbiBhbiBhcnJheSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtdDl2MDIyX2RhdGFmbXQgKm10OXYwMjJfZmluZF9kYXRhZm10KAorCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlLCBjb25zdCBzdHJ1Y3QgbXQ5djAyMl9kYXRhZm10ICpmbXQsCisJaW50IG4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKGZtdFtpXS5jb2RlID09IGNvZGUpCisJCQlyZXR1cm4gZm10ICsgaTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10OXYwMjJfZGF0YWZtdCBtdDl2MDIyX2NvbG91cl9mbXRzW10gPSB7CisJLyoKKwkgKiBPcmRlciBpbXBvcnRhbnQ6IGZpcnN0IG5hdGl2ZWx5IHN1cHBvcnRlZCwKKwkgKiBzZWNvbmQgc3VwcG9ydGVkIHdpdGggYSBHUElPIGV4dGVuZGVyCisJICovCisJe1Y0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCisJe1Y0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdDl2MDIyX2RhdGFmbXQgbXQ5djAyMl9tb25vY2hyb21lX2ZtdHNbXSA9IHsKIAkvKiBPcmRlciBpbXBvcnRhbnQgLSBzZWUgYWJvdmUgKi8KLQl7Ci0JCS5uYW1lCQk9ICJNb25vY2hyb21lIDEwIGJpdCIsCi0JCS5kZXB0aAkJPSAxMCwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWTE2LAotCX0sIHsKLQkJLm5hbWUJCT0gIk1vbm9jaHJvbWUgOCBiaXQiLAotCQkuZGVwdGgJCT0gOCwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwKLQl9LAorCXtWNEwyX01CVVNfRk1UX1kxMF8xWDEwLCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisJe1Y0TDJfTUJVU19GTVRfR1JFWThfMVg4LCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCiB9OwogCiBzdHJ1Y3QgbXQ5djAyMiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CS8qIFNlbnNvciB3aW5kb3cgKi8KLQlfX3UzMiBmb3VyY2M7CisJY29uc3Qgc3RydWN0IG10OXYwMjJfZGF0YWZtdCAqZm10OworCWNvbnN0IHN0cnVjdCBtdDl2MDIyX2RhdGFmbXQgKmZtdHM7CisJaW50IG51bV9mbXRzOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlWMDIyKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCiAJdTE2IGNoaXBfY29udHJvbDsKKwl1bnNpZ25lZCBzaG9ydCB5X3NraXBfdG9wOwkvKiBMaW5lcyB0byBza2lwIGF0IHRoZSB0b3AgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXQ5djAyMiAqdG9fbXQ5djAyMihjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtMTQzLDkgKzE1MywxMSBAQAogCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gdG9fbXQ5djAyMihjbGllbnQpOwogCWludCByZXQ7CiAKLQkvKiBBbG1vc3QgdGhlIGRlZmF1bHQgbW9kZTogbWFzdGVyLCBwYXJhbGxlbCwgc2ltdWx0YW5lb3VzLCBhbmQgYW4KKwkvKgorCSAqIEFsbW9zdCB0aGUgZGVmYXVsdCBtb2RlOiBtYXN0ZXIsIHBhcmFsbGVsLCBzaW11bHRhbmVvdXMsIGFuZCBhbgogCSAqIHVuZG9jdW1lbnRlZCBiaXQgMHgyMDAsIHdoaWNoIGlzIHByZXNlbnQgaW4gdGFibGUgNywgYnV0IG5vdCBpbiA4LAotCSAqIHBsdXMgc25hcHNob3QgbW9kZSB0byBkaXNhYmxlIHNjYW4gZm9yIG5vdyAqLworCSAqIHBsdXMgc25hcHNob3QgbW9kZSB0byBkaXNhYmxlIHNjYW4gZm9yIG5vdworCSAqLwogCW10OXYwMjItPmNoaXBfY29udHJvbCB8PSAweDEwOwogCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfQ0hJUF9DT05UUk9MLCBtdDl2MDIyLT5jaGlwX2NvbnRyb2wpOwogCWlmICghcmV0KQpAQCAtMjY1LDEyICsyNzcsMTAgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CiAJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0gYS0+YzsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogCS8qIEJheWVyIGZvcm1hdCAtIGV2ZW4gc2l6ZSBsZW5ndGhzICovCi0JaWYgKG10OXYwMjItPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4IHx8Ci0JICAgIG10OXYwMjItPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikgeworCWlmIChtdDl2MDIyLT5mbXRzID09IG10OXYwMjJfY29sb3VyX2ZtdHMpIHsKIAkJcmVjdC53aWR0aAk9IEFMSUdOKHJlY3Qud2lkdGgsIDIpOwogCQlyZWN0LmhlaWdodAk9IEFMSUdOKHJlY3QuaGVpZ2h0LCAyKTsKIAkJLyogTGV0IHRoZSB1c2VyIHBsYXkgd2l0aCB0aGUgc3RhcnRpbmcgcGl4ZWwgKi8KQEAgLTI4NywxMCArMjk3LDEwIEBACiAJaWYgKHJldCA+PSAwKSB7CiAJCWlmIChyZXQgJiAxKSAvKiBBdXRvZXhwb3N1cmUgKi8KIAkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfTUFYX1RPVEFMX1NIVVRURVJfV0lEVEgsCi0JCQkJCXJlY3QuaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgNDMpOworCQkJCQlyZWN0LmhlaWdodCArIG10OXYwMjItPnlfc2tpcF90b3AgKyA0Myk7CiAJCWVsc2UKIAkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfVE9UQUxfU0hVVFRFUl9XSURUSCwKLQkJCQkJcmVjdC5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgKyA0Myk7CisJCQkJCXJlY3QuaGVpZ2h0ICsgbXQ5djAyMi0+eV9za2lwX3RvcCArIDQzKTsKIAl9CiAJLyogU2V0dXAgZnJhbWUgZm9ybWF0OiBkZWZhdWx0cyBhcGFydCBmcm9tIHdpZHRoIGFuZCBoZWlnaHQgKi8KIAlpZiAoIXJldCkKQEAgLTI5OCw4ICszMDgsMTAgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9ST1dfU1RBUlQsIHJlY3QudG9wKTsKIAlpZiAoIXJldCkKLQkJLyogRGVmYXVsdCA5NCwgUGh5dGVjIGRyaXZlciBzYXlzOgotCQkgKiAid2lkdGggKyBob3Jpem9udGFsIGJsYW5rID49IDY2MCIgKi8KKwkJLyoKKwkJICogRGVmYXVsdCA5NCwgUGh5dGVjIGRyaXZlciBzYXlzOgorCQkgKiAid2lkdGggKyBob3Jpem9udGFsIGJsYW5rID49IDY2MCIKKwkJICovCiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIE1UOVYwMjJfSE9SSVpPTlRBTF9CTEFOS0lORywKIAkJCQlyZWN0LndpZHRoID4gNjYwIC0gNDMgPyA0MyA6CiAJCQkJNjYwIC0gcmVjdC53aWR0aCk7CkBAIC0zMDksNyArMzIxLDcgQEAKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgTVQ5VjAyMl9XSU5ET1dfV0lEVEgsIHJlY3Qud2lkdGgpOwogCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1dJTkRPV19IRUlHSFQsCi0JCQkJcmVjdC5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3ApOworCQkJCXJlY3QuaGVpZ2h0ICsgbXQ5djAyMi0+eV9za2lwX3RvcCk7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTM0Niw0NiArMzU4LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG10OXYwMjJfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKLQlwaXgtPndpZHRoCQk9IG10OXYwMjItPnJlY3Qud2lkdGg7Ci0JcGl4LT5oZWlnaHQJCT0gbXQ5djAyMi0+cmVjdC5oZWlnaHQ7Ci0JcGl4LT5waXhlbGZvcm1hdAk9IG10OXYwMjItPmZvdXJjYzsKLQlwaXgtPmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORTsKLQlwaXgtPmNvbG9yc3BhY2UJCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJbWYtPndpZHRoCT0gbXQ5djAyMi0+cmVjdC53aWR0aDsKKwltZi0+aGVpZ2h0CT0gbXQ5djAyMi0+cmVjdC5oZWlnaHQ7CisJbWYtPmNvZGUJPSBtdDl2MDIyLT5mbXQtPmNvZGU7CisJbWYtPmNvbG9yc3BhY2UJPSBtdDl2MDIyLT5mbXQtPmNvbG9yc3BhY2U7CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG10OXYwMjJfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJc3RydWN0IHY0bDJfY3JvcCBhID0gewogCQkuYyA9IHsKIAkJCS5sZWZ0CT0gbXQ5djAyMi0+cmVjdC5sZWZ0LAogCQkJLnRvcAk9IG10OXYwMjItPnJlY3QudG9wLAotCQkJLndpZHRoCT0gcGl4LT53aWR0aCwKLQkJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwkJCS53aWR0aAk9IG1mLT53aWR0aCwKKwkJCS5oZWlnaHQJPSBtZi0+aGVpZ2h0LAogCQl9LAogCX07CiAJaW50IHJldDsKIAotCS8qIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBzdXBwb3J0ZWQgZm9ybWF0LCBhcyB2ZXJpZmllZCBwZXIgY2FsbCB0bwotCSAqIGljZC0+dHJ5X2ZtdCgpLCBkYXRhd2lkdGggaXMgZnJvbSBvdXIgc3VwcG9ydGVkIGZvcm1hdCBsaXN0ICovCi0Jc3dpdGNoIChwaXgtPnBpeGVsZm9ybWF0KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6CisJLyoKKwkgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KKwkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdAorCSAqLworCXN3aXRjaCAobWYtPmNvZGUpIHsKKwljYXNlIFY0TDJfTUJVU19GTVRfR1JFWThfMVg4OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMDoKIAkJaWYgKG10OXYwMjItPm1vZGVsICE9IFY0TDJfSURFTlRfTVQ5VjAyMklYN0FUTSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxNjoKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYODoKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwOgogCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMzk5LDI2ICs0MTMsMzggQEAKIAkvKiBObyBzdXBwb3J0IGZvciBzY2FsaW5nIG9uIHRoaXMgY2FtZXJhLCBqdXN0IGNyb3AuICovCiAJcmV0ID0gbXQ5djAyMl9zX2Nyb3Aoc2QsICZhKTsKIAlpZiAoIXJldCkgewotCQlwaXgtPndpZHRoID0gbXQ5djAyMi0+cmVjdC53aWR0aDsKLQkJcGl4LT5oZWlnaHQgPSBtdDl2MDIyLT5yZWN0LmhlaWdodDsKLQkJbXQ5djAyMi0+Zm91cmNjID0gcGl4LT5waXhlbGZvcm1hdDsKKwkJbWYtPndpZHRoCT0gbXQ5djAyMi0+cmVjdC53aWR0aDsKKwkJbWYtPmhlaWdodAk9IG10OXYwMjItPnJlY3QuaGVpZ2h0OworCQltdDl2MDIyLT5mbXQJPSBtdDl2MDIyX2ZpbmRfZGF0YWZtdChtZi0+Y29kZSwKKwkJCQkJbXQ5djAyMi0+Zm10cywgbXQ5djAyMi0+bnVtX2ZtdHMpOworCQltZi0+Y29sb3JzcGFjZQk9IG10OXYwMjItPmZtdC0+Y29sb3JzcGFjZTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OXYwMjJfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IG10OXYwMjJfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKLQlpbnQgYWxpZ24gPSBwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TQkdHUjggfHwKLQkJcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKKwljb25zdCBzdHJ1Y3QgbXQ5djAyMl9kYXRhZm10ICpmbXQ7CisJaW50IGFsaWduID0gbWYtPmNvZGUgPT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4IHx8CisJCW1mLT5jb2RlID09IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwOwogCi0JdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZwaXgtPndpZHRoLCBNVDlWMDIyX01JTl9XSURUSCwKKwl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJm1mLT53aWR0aCwgTVQ5VjAyMl9NSU5fV0lEVEgsCiAJCU1UOVYwMjJfTUFYX1dJRFRILCBhbGlnbiwKLQkJJnBpeC0+aGVpZ2h0LCBNVDlWMDIyX01JTl9IRUlHSFQgKyBpY2QtPnlfc2tpcF90b3AsCi0JCU1UOVYwMjJfTUFYX0hFSUdIVCArIGljZC0+eV9za2lwX3RvcCwgYWxpZ24sIDApOworCQkmbWYtPmhlaWdodCwgTVQ5VjAyMl9NSU5fSEVJR0hUICsgbXQ5djAyMi0+eV9za2lwX3RvcCwKKwkJTVQ5VjAyMl9NQVhfSEVJR0hUICsgbXQ5djAyMi0+eV9za2lwX3RvcCwgYWxpZ24sIDApOworCisJZm10ID0gbXQ5djAyMl9maW5kX2RhdGFmbXQobWYtPmNvZGUsIG10OXYwMjItPmZtdHMsCisJCQkJICAgbXQ5djAyMi0+bnVtX2ZtdHMpOworCWlmICghZm10KSB7CisJCWZtdCA9IG10OXYwMjItPmZtdDsKKwkJbWYtPmNvZGUgPSBmbXQtPmNvZGU7CisJfQorCisJbWYtPmNvbG9yc3BhY2UJPSBmbXQtPmNvbG9yc3BhY2U7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNSw4ICs2NjEsMTAgQEAKIAkJCQkJICAgICAgNDggKyByYW5nZSAvIDIpIC8gcmFuZ2UgKyAxNjsKIAkJCWlmIChnYWluID49IDMyKQogCQkJCWdhaW4gJj0gfjE7Ci0JCQkvKiBUaGUgdXNlciB3YW50cyB0byBzZXQgZ2FpbiBtYW51YWxseSwgaG9wZSwgc2hlCi0JCQkgKiBrbm93cywgd2hhdCBzaGUncyBkb2luZy4uLiBTd2l0Y2ggQUdDIG9mZi4gKi8KKwkJCS8qCisJCQkgKiBUaGUgdXNlciB3YW50cyB0byBzZXQgZ2FpbiBtYW51YWxseSwgaG9wZSwgc2hlCisJCQkgKiBrbm93cywgd2hhdCBzaGUncyBkb2luZy4uLiBTd2l0Y2ggQUdDIG9mZi4KKwkJCSAqLwogCiAJCQlpZiAocmVnX2NsZWFyKGNsaWVudCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSwgMHgyKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CkBAIC02NTUsOCArNjgzLDEwIEBACiAJCQl1bnNpZ25lZCBsb25nIHJhbmdlID0gcWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bTsKIAkJCXVuc2lnbmVkIGxvbmcgc2h1dHRlciA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+bWluaW11bSkgKgogCQkJCQkJIDQ3OSArIHJhbmdlIC8gMikgLyByYW5nZSArIDE7Ci0JCQkvKiBUaGUgdXNlciB3YW50cyB0byBzZXQgc2h1dHRlciB3aWR0aCBtYW51YWxseSwgaG9wZSwKLQkJCSAqIHNoZSBrbm93cywgd2hhdCBzaGUncyBkb2luZy4uLiBTd2l0Y2ggQUVDIG9mZi4gKi8KKwkJCS8qCisJCQkgKiBUaGUgdXNlciB3YW50cyB0byBzZXQgc2h1dHRlciB3aWR0aCBtYW51YWxseSwgaG9wZSwKKwkJCSAqIHNoZSBrbm93cywgd2hhdCBzaGUncyBkb2luZy4uLiBTd2l0Y2ggQUVDIG9mZi4KKwkJCSAqLwogCiAJCQlpZiAocmVnX2NsZWFyKGNsaWVudCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSwgMHgxKSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CkBAIC02ODksOCArNzE5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0Ci0gKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lICovCisvKgorICogSW50ZXJmYWNlIGFjdGl2ZSwgY2FuIHVzZSBpMmMuIElmIGl0IGZhaWxzLCBpdCBjYW4gaW5kZWVkIG1lYW4sIHRoYXQKKyAqIHRoaXMgd2Fzbid0IG91ciBjYXB0dXJlIGludGVyZmFjZSwgc28sIHdlIHdhaXQgZm9yIHRoZSByaWdodCBvbmUKKyAqLwogc3RhdGljIGludCBtdDl2MDIyX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CkBAIC03MzMsMTcgKzc2NSwxNyBAQAogCQkJICAgICFzdHJjbXAoImNvbG9yIiwgc2Vuc29yX3R5cGUpKSkgewogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1BJWEVMX09QRVJBVElPTl9NT0RFLCA0IHwgMHgxMSk7CiAJCW10OXYwMjItPm1vZGVsID0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDOwotCQlpY2QtPmZvcm1hdHMgPSBtdDl2MDIyX2NvbG91cl9mb3JtYXRzOworCQltdDl2MDIyLT5mbXRzID0gbXQ5djAyMl9jb2xvdXJfZm10czsKIAl9IGVsc2UgewogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlWMDIyX1BJWEVMX09QRVJBVElPTl9NT0RFLCAweDExKTsKIAkJbXQ5djAyMi0+bW9kZWwgPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVE07Ci0JCWljZC0+Zm9ybWF0cyA9IG10OXYwMjJfbW9ub2Nocm9tZV9mb3JtYXRzOworCQltdDl2MDIyLT5mbXRzID0gbXQ5djAyMl9tb25vY2hyb21lX2ZtdHM7CiAJfQogCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZWkyYzsKIAotCWljZC0+bnVtX2Zvcm1hdHMgPSAwOworCW10OXYwMjItPm51bV9mbXRzID0gMDsKIAogCS8qCiAJICogVGhpcyBpcyBhIDEwYml0IHNlbnNvciwgc28gYnkgZGVmYXVsdCB3ZSBvbmx5IGFsbG93IDEwYml0LgpAQCAtNzU2LDE0ICs3ODgsMTQgQEAKIAkJZmxhZ3MgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCi0JCWljZC0+bnVtX2Zvcm1hdHMrKzsKKwkJbXQ5djAyMi0+bnVtX2ZtdHMrKzsKIAllbHNlCi0JCWljZC0+Zm9ybWF0cysrOworCQltdDl2MDIyLT5mbXRzKys7CiAKIAlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKLQkJaWNkLT5udW1fZm9ybWF0cysrOworCQltdDl2MDIyLT5udW1fZm10cysrOwogCi0JbXQ5djAyMi0+Zm91cmNjID0gaWNkLT5mb3JtYXRzLT5mb3VyY2M7CisJbXQ5djAyMi0+Zm10ID0gJm10OXYwMjItPmZtdHNbMF07CiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBhIE1UOVYwMjIgY2hpcCBJRCAleCwgJXMgc2Vuc29yXG4iLAogCQkgZGF0YSwgbXQ5djAyMi0+bW9kZWwgPT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNID8KQEAgLTc4Nyw2ICs4MTksMTYgQEAKIAkJaWNsLT5mcmVlX2J1cyhpY2wpOwogfQogCitzdGF0aWMgaW50IG10OXYwMjJfZ19za2lwX3RvcF9saW5lcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKmxpbmVzKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IHRvX210OXYwMjIoY2xpZW50KTsKKworCSpsaW5lcyA9IG10OXYwMjItPnlfc2tpcF90b3A7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtdDl2MDIyX3N1YmRldl9jb3JlX29wcyA9IHsKIAkuZ19jdHJsCQk9IG10OXYwMjJfZ19jdHJsLAogCS5zX2N0cmwJCT0gbXQ5djAyMl9zX2N0cmwsCkBAIC03OTcsMTkgKzgzOSwzOCBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW50IG10OXYwMjJfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSAqY29kZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSB0b19tdDl2MDIyKGNsaWVudCk7CisKKwlpZiAoKHVuc2lnbmVkIGludClpbmRleCA+PSBtdDl2MDIyLT5udW1fZm10cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqY29kZSA9IG10OXYwMjItPmZtdHNbaW5kZXhdLmNvZGU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG10OXYwMjJfc3ViZGV2X3ZpZGVvX29wcyA9IHsKIAkuc19zdHJlYW0JPSBtdDl2MDIyX3Nfc3RyZWFtLAotCS5zX2ZtdAkJPSBtdDl2MDIyX3NfZm10LAotCS5nX2ZtdAkJPSBtdDl2MDIyX2dfZm10LAotCS50cnlfZm10CT0gbXQ5djAyMl90cnlfZm10LAorCS5zX21idXNfZm10CT0gbXQ5djAyMl9zX2ZtdCwKKwkuZ19tYnVzX2ZtdAk9IG10OXYwMjJfZ19mbXQsCisJLnRyeV9tYnVzX2ZtdAk9IG10OXYwMjJfdHJ5X2ZtdCwKIAkuc19jcm9wCQk9IG10OXYwMjJfc19jcm9wLAogCS5nX2Nyb3AJCT0gbXQ5djAyMl9nX2Nyb3AsCiAJLmNyb3BjYXAJPSBtdDl2MDIyX2Nyb3BjYXAsCisJLmVudW1fbWJ1c19mbXQJPSBtdDl2MDIyX2VudW1fZm10LAorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9zZW5zb3Jfb3BzIG10OXYwMjJfc3ViZGV2X3NlbnNvcl9vcHMgPSB7CisJLmdfc2tpcF90b3BfbGluZXMJPSBtdDl2MDIyX2dfc2tpcF90b3BfbGluZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBtdDl2MDIyX3N1YmRldl9vcHMgPSB7CiAJLmNvcmUJPSAmbXQ5djAyMl9zdWJkZXZfY29yZV9vcHMsCiAJLnZpZGVvCT0gJm10OXYwMjJfc3ViZGV2X3ZpZGVvX29wcywKKwkuc2Vuc29yCT0gJm10OXYwMjJfc3ViZGV2X3NlbnNvcl9vcHMsCiB9OwogCiBzdGF0aWMgaW50IG10OXYwMjJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTg1MSw4ICs5MTIsNyBAQAogCSAqIE1UOVYwMjIgX3JlYWxseV8gY29ycnVwdHMgdGhlIGZpcnN0IHJlYWQgb3V0IGxpbmUuCiAJICogVE9ETzogdmVyaWZ5IG9uIGkuTVgzMQogCSAqLwotCWljZC0+eV9za2lwX3RvcAkJPSAxOwotCisJbXQ5djAyMi0+eV9za2lwX3RvcAk9IDE7CiAJbXQ5djAyMi0+cmVjdC5sZWZ0CT0gTVQ5VjAyMl9DT0xVTU5fU0tJUDsKIAltdDl2MDIyLT5yZWN0LnRvcAk9IE1UOVYwMjJfUk9XX1NLSVA7CiAJbXQ5djAyMi0+cmVjdC53aWR0aAk9IE1UOVYwMjJfTUFYX1dJRFRIOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214MV9jYW1lcmEuYwppbmRleCA3MjgwMjI5Li4yYmExNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214MV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214MV9jYW1lcmEuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX21lZGlhYnVzLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2ZpcS5oPgpAQCAtOTQsMTQgKzk1LDE2IEBACiAvKiBidWZmZXIgZm9yIG9uZSB2aWRlbyBmcmFtZSAqLwogc3RydWN0IG14MV9idWZmZXIgewogCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpmbXQ7Ci0JaW50IGlud29yazsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCQl2YjsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUJY29kZTsKKwlpbnQJCQkJaW53b3JrOwogfTsKIAotLyogaS5NWDEvaS5NWEwgaXMgb25seSBzdXBwb3NlZCB0byBoYW5kbGUgb25lIGNhbWVyYSBvbiBpdHMgQ2FtZXJhIFNlbnNvcgorLyoKKyAqIGkuTVgxL2kuTVhMIGlzIG9ubHkgc3VwcG9zZWQgdG8gaGFuZGxlIG9uZSBjYW1lcmEgb24gaXRzIENhbWVyYSBTZW5zb3IKICAqIEludGVyZmFjZS4gSWYgYW55b25lIGV2ZXIgYnVpbGRzIGhhcmR3YXJlIHRvIGVuYWJsZSBtb3JlIHRoYW4KLSAqIG9uZSBjYW1lcmEsIHRoZXkgd2lsbCBoYXZlIHRvIG1vZGlmeSB0aGlzIGRyaXZlciB0b28gKi8KKyAqIG9uZSBjYW1lcmEsIHRoZXkgd2lsbCBoYXZlIHRvIG1vZGlmeSB0aGlzIGRyaXZlciB0b28KKyAqLwogc3RydWN0IG14MV9jYW1lcmFfZGV2IHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0CQlzb2NfaG9zdDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UJKmljZDsKQEAgLTEyNiw5ICsxMjksMTMgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJaW50IGJ5dGVzX3Blcl9saW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUoaWNkLT51c2VyX3dpZHRoLAorCQkJCQkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOwogCi0JKnNpemUgPSBpY2QtPnVzZXJfd2lkdGggKiBpY2QtPnVzZXJfaGVpZ2h0ICoKLQkJKChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCArIDcpID4+IDMpOworCWlmIChieXRlc19wZXJfbGluZSA8IDApCisJCXJldHVybiBieXRlc19wZXJfbGluZTsKKworCSpzaXplID0gYnl0ZXNfcGVyX2xpbmUgKiBpY2QtPnVzZXJfaGVpZ2h0OwogCiAJaWYgKCEqY291bnQpCiAJCSpjb3VudCA9IDMyOwpAQCAtMTUxLDggKzE1OCwxMCBAQAogCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCi0JLyogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubwotCSAqIGxvbmdlciBpbiBTVEFURV9RVUVVRUQgb3IgU1RBVEVfQUNUSVZFICovCisJLyoKKwkgKiBUaGlzIHdhaXRzIHVudGlsIHRoaXMgYnVmZmVyIGlzIG91dCBvZiBkYW5nZXIsIGkuZS4sIHVudGlsIGl0IGlzIG5vCisJICogbG9uZ2VyIGluIFNUQVRFX1FVRVVFRCBvciBTVEFURV9BQ1RJVkUKKwkgKi8KIAl2aWRlb2J1Zl93YWl0b24odmIsIDAsIDApOwogCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOwogCkBAIC0xNjUsNiArMTc0LDExIEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBteDFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteDFfYnVmZmVyLCB2Yik7CiAJaW50IHJldDsKKwlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCisJCQkJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CisKKwlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQorCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CiAKIAlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKQEAgLTE3NCwyMiArMTg4LDI0IEBACiAKIAlCVUdfT04oTlVMTCA9PSBpY2QtPmN1cnJlbnRfZm10KTsKIAotCS8qIEkgdGhpbmssIGluIGJ1Zl9wcmVwYXJlIHlvdSBvbmx5IGhhdmUgdG8gcHJvdGVjdCBnbG9iYWwgZGF0YSwKLQkgKiB0aGUgYWN0dWFsIGJ1ZmZlciBpcyB5b3VycyAqLworCS8qCisJICogSSB0aGluaywgaW4gYnVmX3ByZXBhcmUgeW91IG9ubHkgaGF2ZSB0byBwcm90ZWN0IGdsb2JhbCBkYXRhLAorCSAqIHRoZSBhY3R1YWwgYnVmZmVyIGlzIHlvdXJzCisJICovCiAJYnVmLT5pbndvcmsgPSAxOwogCi0JaWYgKGJ1Zi0+Zm10CSE9IGljZC0+Y3VycmVudF9mbXQgfHwKKwlpZiAoYnVmLT5jb2RlCSE9IGljZC0+Y3VycmVudF9mbXQtPmNvZGUgfHwKIAkgICAgdmItPndpZHRoCSE9IGljZC0+dXNlcl93aWR0aCB8fAogCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+dXNlcl9oZWlnaHQgfHwKIAkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7Ci0JCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKKwkJYnVmLT5jb2RlCT0gaWNkLT5jdXJyZW50X2ZtdC0+Y29kZTsKIAkJdmItPndpZHRoCT0gaWNkLT51c2VyX3dpZHRoOwogCQl2Yi0+aGVpZ2h0CT0gaWNkLT51c2VyX2hlaWdodDsKIAkJdmItPmZpZWxkCT0gZmllbGQ7CiAJCXZiLT5zdGF0ZQk9IFZJREVPQlVGX05FRURTX0lOSVQ7CiAJfQogCi0JdmItPnNpemUgPSB2Yi0+d2lkdGggKiB2Yi0+aGVpZ2h0ICogKChidWYtPmZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKKwl2Yi0+c2l6ZSA9IGJ5dGVzX3Blcl9saW5lICogdmItPmhlaWdodDsKIAlpZiAoMCAhPSB2Yi0+YmFkZHIgJiYgdmItPmJzaXplIDwgdmItPnNpemUpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC0zODEsOCArMzk3LDEwIEBACiAKIAlsY2RjbGsgPSBjbGtfZ2V0X3JhdGUocGNkZXYtPmNsayk7CiAKLQkvKiBXZSB2ZXJpZnkgcGxhdGZvcm1fbWNsa18xMGtoeiAhPSAwLCBzbyBpZiBhbnlvbmUgYnJlYWtzIGl0LCBoZXJlCi0JICogdGhleSBnZXQgYSBuaWNlIE9vcHMgKi8KKwkvKgorCSAqIFdlIHZlcmlmeSBwbGF0Zm9ybV9tY2xrXzEwa2h6ICE9IDAsIHNvIGlmIGFueW9uZSBicmVha3MgaXQsIGhlcmUKKwkgKiB0aGV5IGdldCBhIG5pY2UgT29wcworCSAqLwogCWRpdiA9IChsY2RjbGsgKyAyICogbWNsayAtIDEpIC8gKDIgKiBtY2xrKSAtIDE7CiAKIAlkZXZfZGJnKHBjZGV2LT5pY2QtPmRldi5wYXJlbnQsCkBAIC00MjAsOCArNDM4LDEwIEBACiAJY2xrX2Rpc2FibGUocGNkZXYtPmNsayk7CiB9CiAKLS8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhYnNvbHV0ZWx5IGRlcGVuZCBvbiB0aGUgZmFjdCwgdGhhdAotICogdGhlcmUgY2FuIGJlIG9ubHkgb25lIGNhbWVyYSBvbiBpLk1YMS9pLk1YTCBjYW1lcmEgc2Vuc29yIGludGVyZmFjZSAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhYnNvbHV0ZWx5IGRlcGVuZCBvbiB0aGUgZmFjdCwgdGhhdAorICogdGhlcmUgY2FuIGJlIG9ubHkgb25lIGNhbWVyYSBvbiBpLk1YMS9pLk1YTCBjYW1lcmEgc2Vuc29yIGludGVyZmFjZQorICovCiBzdGF0aWMgaW50IG14MV9jYW1lcmFfYWRkX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKQEAgLTQ4NywxMiArNTA3LDEwIEBACiAKIAkvKiBNWDEgc3VwcG9ydHMgb25seSA4Yml0IGJ1c3dpZHRoICovCiAJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsCi0JCQkJCQkJICAgICAgIENTSV9CVVNfRkxBR1MpOworCQkJCQkJICAgICAgIENTSV9CVVNfRkxBR1MpOwogCWlmICghY29tbW9uX2ZsYWdzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWljZC0+YnVzd2lkdGggPSA4OwotCiAJLyogTWFrZSBjaG9pc2VzLCBiYXNlZCBvbiBwbGF0Zm9ybSBjaG9pY2UgKi8KIAlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIKSAmJgogCQkoY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0xPVykpIHsKQEAgLTU0NSw3ICs1NjMsOCBAQAogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOworCWludCByZXQsIGJ1c3dpZHRoOwogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOwogCWlmICgheGxhdGUpIHsKQEAgLTU1NCwxMiArNTczLDMzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgZik7Ci0JaWYgKCFyZXQpIHsKLQkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKLQkJaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKKwlidXN3aWR0aCA9IHhsYXRlLT5ob3N0X2ZtdC0+Yml0c19wZXJfc2FtcGxlOworCWlmIChidXN3aWR0aCA+IDgpIHsKKwkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LAorCQkJICJiaXRzLXBlci1zYW1wbGUgJWQgZm9yIGZvcm1hdCAleCB1bnN1cHBvcnRlZFxuIiwKKwkJCSBidXN3aWR0aCwgcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCW1mLndpZHRoCT0gcGl4LT53aWR0aDsKKwltZi5oZWlnaHQJPSBwaXgtPmhlaWdodDsKKwltZi5maWVsZAk9IHBpeC0+ZmllbGQ7CisJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKKwltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfbWJ1c19mbXQsICZtZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAobWYuY29kZSAhPSB4bGF0ZS0+Y29kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXgtPndpZHRoCQk9IG1mLndpZHRoOworCXBpeC0+aGVpZ2h0CQk9IG1mLmhlaWdodDsKKwlwaXgtPmZpZWxkCQk9IG1mLmZpZWxkOworCXBpeC0+Y29sb3JzcGFjZQkJPSBtZi5jb2xvcnNwYWNlOworCWljZC0+Y3VycmVudF9mbXQJPSB4bGF0ZTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU2NywxMCArNjA3LDM2IEBACiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOworCWludCByZXQ7CiAJLyogVE9ETzogbGltaXQgdG8gbXgxIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLwogCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKKwkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWYud2lkdGgJPSBwaXgtPndpZHRoOworCW1mLmhlaWdodAk9IHBpeC0+aGVpZ2h0OworCW1mLmZpZWxkCT0gcGl4LT5maWVsZDsKKwltZi5jb2xvcnNwYWNlCT0gcGl4LT5jb2xvcnNwYWNlOworCW1mLmNvZGUJCT0geGxhdGUtPmNvZGU7CisKIAkvKiBsaW1pdCB0byBzZW5zb3IgY2FwYWJpbGl0aWVzICovCi0JcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X21idXNfZm10LCAmbWYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGl4LT53aWR0aAk9IG1mLndpZHRoOworCXBpeC0+aGVpZ2h0CT0gbWYuaGVpZ2h0OworCXBpeC0+ZmllbGQJPSBtZi5maWVsZDsKKwlwaXgtPmNvbG9yc3BhY2UJPSBtZi5jb2xvcnNwYWNlOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXgxX2NhbWVyYV9yZXFidWZzKHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiwKQEAgLTU3OCwxMCArNjQ0LDEyIEBACiB7CiAJaW50IGk7CiAKLQkvKiBUaGlzIGlzIGZvciBsb2NraW5nIGRlYnVnZ2luZyBvbmx5LiBJIHJlbW92ZWQgc3BpbmxvY2tzIGFuZCBub3cgSQorCS8qCisJICogVGhpcyBpcyBmb3IgbG9ja2luZyBkZWJ1Z2dpbmcgb25seS4gSSByZW1vdmVkIHNwaW5sb2NrcyBhbmQgbm93IEkKIAkgKiBjaGVjayB3aGV0aGVyIC5wcmVwYXJlIGlzIGV2ZXIgY2FsbGVkIG9uIGEgbGlua2VkIGJ1ZmZlciwgb3Igd2hldGhlcgogCSAqIGEgZG1hIElSUSBjYW4gb2NjdXIgZm9yIGFuIGluLXdvcmsgb3IgdW5saW5rZWQgYnVmZmVyLiBVbnRpbCBub3cKLQkgKiBpdCBoYWRuJ3QgdHJpZ2dlcmVkICovCisJICogaXQgaGFkbid0IHRyaWdnZXJlZAorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBwLT5jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBteDFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YoaWNmLT52Yl92aWRxLmJ1ZnNbaV0sCiAJCQkJCQkgICAgICBzdHJ1Y3QgbXgxX2J1ZmZlciwgdmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwppbmRleCA3ZGI4MmJkLi5iZDI5N2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfbWVkaWFidXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CiAjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CkBAIC02Myw3ICs2NCw3IEBACiBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgewogCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCQkJdmI7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQJKmZtdDsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUJCWNvZGU7CiAKIAkvKiBPbmUgZGVzY3JpcHRvdCBwZXIgc2NhdHRlcmxpc3QgKHBlciBmcmFtZSkgKi8KIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJCSp0eGQ7CkBAIC0xMTgsOCArMTE5LDYgQEAKIAllbnVtIGlwdV9jaGFubmVsCWlkOwogfTsKIAotc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCk7Ci0KIHN0YXRpYyB1MzIgY3NpX3JlZ19yZWFkKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzLCBvZmZfdCByZWcpCiB7CiAJcmV0dXJuIF9fcmF3X3JlYWRsKG14My0+YmFzZSArIHJlZyk7CkBAIC0yMTEsMTcgKzIxMCwxNiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7Ci0JLyoKLQkgKiBiaXRzLXBlci1waXhlbCAoZGVwdGgpIGFzIHNwZWNpZmllZCBpbiBjYW1lcmEncyBwaXhlbCBmb3JtYXQgZG9lcwotCSAqIG5vdCBuZWNlc3NhcmlseSBtYXRjaCB3aGF0IHRoZSBjYW1lcmEgaW50ZXJmYWNlIHdyaXRlcyB0byBSQU0sIGJ1dAotCSAqIGl0IHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3Igbm93LgotCSAqLwotCXVuc2lnbmVkIGludCBicHAgPSBESVZfUk9VTkRfVVAoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGgsIDgpOworCWludCBieXRlc19wZXJfbGluZSA9IHNvY19tYnVzX2J5dGVzX3Blcl9saW5lKGljZC0+dXNlcl93aWR0aCwKKwkJCQkJCWljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10KTsKKworCWlmIChieXRlc19wZXJfbGluZSA8IDApCisJCXJldHVybiBieXRlc19wZXJfbGluZTsKIAogCWlmICghbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqc2l6ZSA9IGljZC0+dXNlcl93aWR0aCAqIGljZC0+dXNlcl9oZWlnaHQgKiBicHA7CisJKnNpemUgPSBieXRlc19wZXJfbGluZSAqIGljZC0+dXNlcl9oZWlnaHQ7CiAKIAlpZiAoISpjb3VudCkKIAkJKmNvdW50ID0gMzI7CkBAIC0yNDEsMjEgKzIzOSwyNiBAQAogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CiAJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7Ci0JLyogY3VycmVudF9mbXQgX211c3RfIGFsd2F5cyBiZSBzZXQgKi8KLQlzaXplX3QgbmV3X3NpemUgPSBpY2QtPnVzZXJfd2lkdGggKiBpY2QtPnVzZXJfaGVpZ2h0ICoKLQkJKChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCArIDcpID4+IDMpOworCXNpemVfdCBuZXdfc2l6ZTsKIAlpbnQgcmV0OworCWludCBieXRlc19wZXJfbGluZSA9IHNvY19tYnVzX2J5dGVzX3Blcl9saW5lKGljZC0+dXNlcl93aWR0aCwKKwkJCQkJCWljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10KTsKKworCWlmIChieXRlc19wZXJfbGluZSA8IDApCisJCXJldHVybiBieXRlc19wZXJfbGluZTsKKworCW5ld19zaXplID0gYnl0ZXNfcGVyX2xpbmUgKiBpY2QtPnVzZXJfaGVpZ2h0OwogCiAJLyoKIAkgKiBJIHRoaW5rLCBpbiBidWZfcHJlcGFyZSB5b3Ugb25seSBoYXZlIHRvIHByb3RlY3QgZ2xvYmFsIGRhdGEsCiAJICogdGhlIGFjdHVhbCBidWZmZXIgaXMgeW91cnMKIAkgKi8KIAotCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJaWYgKGJ1Zi0+Y29kZQkhPSBpY2QtPmN1cnJlbnRfZm10LT5jb2RlIHx8CiAJICAgIHZiLT53aWR0aAkhPSBpY2QtPnVzZXJfd2lkdGggfHwKIAkgICAgdmItPmhlaWdodAkhPSBpY2QtPnVzZXJfaGVpZ2h0IHx8CiAJICAgIHZiLT5maWVsZAkhPSBmaWVsZCkgewotCQlidWYtPmZtdAk9IGljZC0+Y3VycmVudF9mbXQ7CisJCWJ1Zi0+Y29kZQk9IGljZC0+Y3VycmVudF9mbXQtPmNvZGU7CiAJCXZiLT53aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKIAkJdmItPmhlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJCXZiLT5maWVsZAk9IGZpZWxkOwpAQCAtMzQ4LDEzICszNTEsMTMgQEAKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCA9IGJ1Zi0+dHhkOwogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4odHhkLT5jaGFuKTsKIAlzdHJ1Y3QgaWRtYWNfdmlkZW9fcGFyYW0gKnZpZGVvID0gJmljaGFuLT5wYXJhbXMudmlkZW87Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmRhdGFfZm10ID0gaWNkLT5jdXJyZW50X2ZtdDsKIAlkbWFfY29va2llX3QgY29va2llOworCXUzMiBmb3VyY2MgPSBpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjOwogCiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBvbmUgc2ctZWxlbWVudCAqLwotCXZpZGVvLT5vdXRfcGl4ZWxfZm10CT0gZm91cmNjX3RvX2lwdV9waXgoZGF0YV9mbXQtPmZvdXJjYyk7CisJdmlkZW8tPm91dF9waXhlbF9mbXQJPSBmb3VyY2NfdG9faXB1X3BpeChmb3VyY2MpOwogCXZpZGVvLT5vdXRfd2lkdGgJPSBpY2QtPnVzZXJfd2lkdGg7CiAJdmlkZW8tPm91dF9oZWlnaHQJPSBpY2QtPnVzZXJfaGVpZ2h0OwogCXZpZGVvLT5vdXRfc3RyaWRlCT0gaWNkLT51c2VyX3dpZHRoOwpAQCAtNTY0LDMwICs1NjcsMzcgQEAKIAkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8CiAJCVNPQ0FNX0RBVEFfQUNUSVZFX0xPVzsKIAotCS8qIElmIHJlcXVlc3RlZCBkYXRhIHdpZHRoIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sIHVzZSBpdCBvciBhbnkKLQkgKiBwb3NzaWJsZSBsb3dlciB2YWx1ZSAtIGkuTVgzMSBpcyBzbWFydCBlbm91Z2ggdG8gc2NoaWZ0IGJpdHMgKi8KLQlzd2l0Y2ggKGJ1c3dpZHRoKSB7Ci0JY2FzZSAxNToKLQkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIElmIHJlcXVlc3RlZCBkYXRhIHdpZHRoIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sIHVzZSBpdCBvciBhbnkKKwkgKiBwb3NzaWJsZSBsb3dlciB2YWx1ZSAtIGkuTVgzMSBpcyBzbWFydCBlbm91Z2ggdG8gc2NoaWZ0IGJpdHMKKwkgKi8KKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkKIAkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xNSB8IFNPQ0FNX0RBVEFXSURUSF8xMCB8CiAJCQlTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX0RBVEFXSURUSF80OwotCQlicmVhazsKLQljYXNlIDEwOgotCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKSkKLQkJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTApCiAJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTAgfCBTT0NBTV9EQVRBV0lEVEhfOCB8CiAJCQlTT0NBTV9EQVRBV0lEVEhfNDsKKwllbHNlIGlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzgpCisJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX0RBVEFXSURUSF80OworCWVsc2UgaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCkKKwkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF80OworCisJc3dpdGNoIChidXN3aWR0aCkgeworCWNhc2UgMTU6CisJCWlmICghKCpmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF8xNSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJaWYgKCEoKmZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIDg6Ci0JCWlmICghKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCkpCisJCWlmICghKCpmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfNDsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzQpKQorCQlpZiAoISgqZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfNCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF80OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfd2FybihteDNfY2FtLT5zb2NfaG9zdC52NGwyX2Rldi5kZXYsCkBAIC02MzYsOTEgKzY0Niw5MiBAQAogCQlwZGF0YS0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldjsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG14M19jYW1lcmFfZm9ybWF0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCBteDNfY2FtZXJhX2Zvcm1hdHNbXSA9IHsKIAl7Ci0JCS5uYW1lCQk9ICJCYXllciAoc1JHQikgOCBiaXQiLAotCQkuZGVwdGgJCT0gOCwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkubmFtZQkJCT0gIkJheWVyIEJHR1IgKHNSR0IpIDggYml0IiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCisJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfTk9ORSwKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKIAl9LCB7Ci0JCS5uYW1lCQk9ICJNb25vY2hyb21lIDggYml0IiwKLQkJLmRlcHRoCQk9IDgsCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0dSRVksCi0JCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9HUkVZLAorCQkubmFtZQkJCT0gIk1vbm9jaHJvbWUgOCBiaXQiLAorCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAogCX0sCiB9OwogCi1zdGF0aWMgYm9vbCBidXN3aWR0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLCBpbnQgZGVwdGgpCisvKiBUaGlzIHdpbGwgYmUgY29ycmVjdGVkIGFzIHdlIGdldCBtb3JlIGZvcm1hdHMgKi8KK3N0YXRpYyBib29sIG14M19jYW1lcmFfcGFja2luZ19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQpCiB7Ci0Jc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OwotCi0Jc3dpdGNoIChkZXB0aCkgewotCWNhc2UgNDoKLQkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCk7Ci0JY2FzZSA4OgotCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KTsKLQljYXNlIDEwOgotCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCk7Ci0JY2FzZSAxNToKLQkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpOwotCX0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuCWZtdC0+cGFja2luZyA9PSBTT0NfTUJVU19QQUNLSU5HX05PTkUgfHwKKwkJKGZtdC0+Yml0c19wZXJfc2FtcGxlID09IDggJiYKKwkJIGZtdC0+cGFja2luZyA9PSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSkgfHwKKwkJKGZtdC0+Yml0c19wZXJfc2FtcGxlID4gOCAmJgorCQkgZm10LT5wYWNraW5nID09IFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTYpOwogfQogCiBzdGF0aWMgaW50IG14M19jYW1lcmFfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBpZHgsCiAJCQkJICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwotCWludCBmb3JtYXRzID0gMCwgYnVzd2lkdGgsIHJldDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJaW50IGZvcm1hdHMgPSAwLCByZXQ7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGU7CisJY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQ7CiAKLQlidXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpZHhdLmRlcHRoOwotCi0JaWYgKCFidXN3aWR0aF9zdXBwb3J0ZWQoaWNpLCBidXN3aWR0aCkpCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fbWJ1c19mbXQsIGlkeCwgJmNvZGUpOworCWlmIChyZXQgPCAwKQorCQkvKiBObyBtb3JlIGZvcm1hdHMgKi8KIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBteDNfY2FtZXJhX3RyeV9idXNfcGFyYW0oaWNkLCBidXN3aWR0aCk7CisJZm10ID0gc29jX21idXNfZ2V0X2ZtdGRlc2MoY29kZSk7CisJaWYgKCFmbXQpIHsKKwkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsCisJCQkiSW52YWxpZCBmb3JtYXQgY29kZSAjJWQ6ICVkXG4iLCBpZHgsIGNvZGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBUaGlzIGFsc28gY2hlY2tzIHN1cHBvcnQgZm9yIHRoZSByZXF1ZXN0ZWQgYml0cy1wZXItc2FtcGxlICovCisJcmV0ID0gbXgzX2NhbWVyYV90cnlfYnVzX3BhcmFtKGljZCwgZm10LT5iaXRzX3Blcl9zYW1wbGUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoaWNkLT5mb3JtYXRzW2lkeF0uZm91cmNjKSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwOgogCQlmb3JtYXRzKys7CiAJCWlmICh4bGF0ZSkgewotCQkJeGxhdGUtPmhvc3RfZm10ID0gJm14M19jYW1lcmFfZm9ybWF0c1swXTsKLQkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwotCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CisJCQl4bGF0ZS0+aG9zdF9mbXQJPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzBdOworCQkJeGxhdGUtPmNvZGUJPSBjb2RlOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LAotCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAotCQkJCW14M19jYW1lcmFfZm9ybWF0c1swXS5uYW1lLAotCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nIGNvZGUgJWRcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsIGNvZGUpOwogCQl9Ci0JCWdvdG8gcGFzc3Rocm91Z2g7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgorCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfWTEwXzFYMTA6CiAJCWZvcm1hdHMrKzsKIAkJaWYgKHhsYXRlKSB7Ci0JCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzFdOwotCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7Ci0JCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlLT5ob3N0X2ZtdAk9ICZteDNfY2FtZXJhX2Zvcm1hdHNbMV07CisJCQl4bGF0ZS0+Y29kZQk9IGNvZGU7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsCi0JCQkJIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCi0JCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCi0JCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCQlkZXZfZGJnKGRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgY29kZSAlZFxuIiwKKwkJCQlteDNfY2FtZXJhX2Zvcm1hdHNbMV0ubmFtZSwgY29kZSk7CiAJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKLXBhc3N0aHJvdWdoOgotCQkvKiBHZW5lcmljIHBhc3MtdGhyb3VnaCAqLwotCQlmb3JtYXRzKys7Ci0JCWlmICh4bGF0ZSkgewotCQkJeGxhdGUtPmhvc3RfZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwotCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7Ci0JCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKLQkJCXhsYXRlKys7Ci0JCQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwKLQkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKLQkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKLQkJfQorCQlpZiAoIW14M19jYW1lcmFfcGFja2luZ19zdXBwb3J0ZWQoZm10KSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCisJZm9ybWF0cysrOworCWlmICh4bGF0ZSkgeworCQl4bGF0ZS0+aG9zdF9mbXQJPSBmbXQ7CisJCXhsYXRlLT5jb2RlCT0gY29kZTsKKwkJeGxhdGUrKzsKKwkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICV4IGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAorCQkJeGxhdGUtPmhvc3RfZm10LT5mb3VyY2MpOwogCX0KIAogCXJldHVybiBmb3JtYXRzOwpAQCAtODA0LDggKzgxNSw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwotCXN0cnVjdCB2NGwyX2Zvcm1hdCBmID0gey50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFfTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJaW50IHJldDsKIAogCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmcmVjdC0+bGVmdCwgJnJlY3QtPndpZHRoLCAwLCAyLCA0MDk2KTsKQEAgLTgxNiwxOSArODI2LDE5IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBUaGUgY2FwdHVyZSBkZXZpY2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0cyBvdXRwdXQgICovCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfZm10LCAmZik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfbWJ1c19mbXQsICZtZik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocGl4LT53aWR0aCAmIDcpIHsKKwlpZiAobWYud2lkdGggJiA3KSB7CiAJCS8qIE91Y2ghIFdlIGNhbiBvbmx5IGhhbmRsZSA4LWJ5dGUgYWxpZ25lZCB3aWR0aC4uLiAqLwotCQlzdHJpZGVfYWxpZ24oJnBpeC0+d2lkdGgpOwotCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsICZmKTsKKwkJc3RyaWRlX2FsaWduKCZtZi53aWR0aCk7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX21idXNfZm10LCAmbWYpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKHBpeC0+d2lkdGggIT0gaWNkLT51c2VyX3dpZHRoIHx8IHBpeC0+aGVpZ2h0ICE9IGljZC0+dXNlcl9oZWlnaHQpIHsKKwlpZiAobWYud2lkdGggIT0gaWNkLT51c2VyX3dpZHRoIHx8IG1mLmhlaWdodCAhPSBpY2QtPnVzZXJfaGVpZ2h0KSB7CiAJCS8qCiAJCSAqIFdlIG5vdyBrbm93IHBpeGVsIGZvcm1hdHMgYW5kIGNhbiBkZWNpZGUgdXBvbiBETUEtY2hhbm5lbChzKQogCQkgKiBTbyBmYXIgb25seSBkaXJlY3QgY2FtZXJhLXRvLW1lbW9yeSBpcyBzdXBwb3J0ZWQKQEAgLTgzOSwxNCArODQ5LDE0IEBACiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCBtZi53aWR0aCwgbWYuaGVpZ2h0KTsKIAl9CiAKIAlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlNlbnNvciBjcm9wcGVkICVkeCVkXG4iLAotCQlwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJCW1mLndpZHRoLCBtZi5oZWlnaHQpOwogCi0JaWNkLT51c2VyX3dpZHRoID0gcGl4LT53aWR0aDsKLQlpY2QtPnVzZXJfaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisJaWNkLT51c2VyX3dpZHRoCQk9IG1mLndpZHRoOworCWljZC0+dXNlcl9oZWlnaHQJPSBtZi5oZWlnaHQ7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODU5LDYgKzg2OSw3IEBACiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOwogCWludCByZXQ7CiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CkBAIC04ODMsMTEgKzg5NCwyNCBAQAogCiAJY29uZmlndXJlX2dlb21ldHJ5KG14M19jYW0sIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgZik7Ci0JaWYgKCFyZXQpIHsKLQkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKLQkJaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKLQl9CisJbWYud2lkdGgJPSBwaXgtPndpZHRoOworCW1mLmhlaWdodAk9IHBpeC0+aGVpZ2h0OworCW1mLmZpZWxkCT0gcGl4LT5maWVsZDsKKwltZi5jb2xvcnNwYWNlCT0gcGl4LT5jb2xvcnNwYWNlOworCW1mLmNvZGUJCT0geGxhdGUtPmNvZGU7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19tYnVzX2ZtdCwgJm1mKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtZi5jb2RlICE9IHhsYXRlLT5jb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpeC0+d2lkdGgJCT0gbWYud2lkdGg7CisJcGl4LT5oZWlnaHQJCT0gbWYuaGVpZ2h0OworCXBpeC0+ZmllbGQJCT0gbWYuZmllbGQ7CisJcGl4LT5jb2xvcnNwYWNlCQk9IG1mLmNvbG9yc3BhY2U7CisJaWNkLT5jdXJyZW50X2ZtdAk9IHhsYXRlOwogCiAJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTZW5zb3Igc2V0ICVkeCVkXG4iLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CiAKQEAgLTkwMCw4ICs5MjQsOCBAQAogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtZjsKIAlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwotCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKIAlpbnQgcmV0OwogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CkBAIC05MTYsMjMgKzk0MCwzNyBAQAogCWlmIChwaXgtPndpZHRoID4gNDA5NikKIAkJcGl4LT53aWR0aCA9IDQwOTY7CiAKLQlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGggKgotCQlESVZfUk9VTkRfVVAoeGxhdGUtPmhvc3RfZm10LT5kZXB0aCwgOCk7CisJcGl4LT5ieXRlc3BlcmxpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShwaXgtPndpZHRoLAorCQkJCQkJICAgIHhsYXRlLT5ob3N0X2ZtdCk7CisJaWYgKHBpeC0+Ynl0ZXNwZXJsaW5lIDwgMCkKKwkJcmV0dXJuIHBpeC0+Ynl0ZXNwZXJsaW5lOwogCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKIAotCS8qIGNhbWVyYSBoYXMgdG8gc2VlIGl0cyBmb3JtYXQsIGJ1dCB0aGUgdXNlciB0aGUgb3JpZ2luYWwgb25lICovCi0JcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CiAJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLwotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKLQlwaXgtPnBpeGVsZm9ybWF0ID0geGxhdGUtPmhvc3RfZm10LT5mb3VyY2M7CisJbWYud2lkdGgJPSBwaXgtPndpZHRoOworCW1mLmhlaWdodAk9IHBpeC0+aGVpZ2h0OworCW1mLmZpZWxkCT0gcGl4LT5maWVsZDsKKwltZi5jb2xvcnNwYWNlCT0gcGl4LT5jb2xvcnNwYWNlOworCW1mLmNvZGUJCT0geGxhdGUtPmNvZGU7CiAKLQlmaWVsZCA9IHBpeC0+ZmllbGQ7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgeworCXBpeC0+d2lkdGgJPSBtZi53aWR0aDsKKwlwaXgtPmhlaWdodAk9IG1mLmhlaWdodDsKKwlwaXgtPmNvbG9yc3BhY2UJPSBtZi5jb2xvcnNwYWNlOworCisJc3dpdGNoIChtZi5maWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9BTlk6CiAJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKLQkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX05PTkU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsCisJCQltZi5maWVsZCk7CisJCXJldCA9IC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTk2OCwxOCArMTAwNiwyNiBAQAogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3M7CiAJdTMyIGR3LCBzZW5zX2NvbmY7Ci0JaW50IHJldCA9IHRlc3RfcGxhdGZvcm1fcGFyYW0obXgzX2NhbSwgaWNkLT5idXN3aWR0aCwgJmJ1c19mbGFncyk7CisJY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQ7CisJaW50IGJ1c3dpZHRoOworCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CiAKKwlmbXQgPSBzb2NfbWJ1c19nZXRfZm10ZGVzYyhpY2QtPmN1cnJlbnRfZm10LT5jb2RlKTsKKwlpZiAoIWZtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidXN3aWR0aCA9IGZtdC0+Yml0c19wZXJfc2FtcGxlOworCXJldCA9IHRlc3RfcGxhdGZvcm1fcGFyYW0obXgzX2NhbSwgYnVzd2lkdGgsICZidXNfZmxhZ3MpOworCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewogCQlkZXZfd2FybihkZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkZXZfZGJnKGRldiwgInJlcXVlc3RlZCBidXMgd2lkdGggJWQgYml0OiAlZFxuIiwKLQkJaWNkLT5idXN3aWR0aCwgcmV0KTsKKwlkZXZfZGJnKGRldiwgInJlcXVlc3RlZCBidXMgd2lkdGggJWQgYml0OiAlZFxuIiwgYnVzd2lkdGgsIHJldCk7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEwMjcsOCArMTA3MywxMCBAQAogCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HOwogCX0KIAotCS8qIE1ha2UgdGhlIGNhbWVyYSB3b3JrIGluIHdpZGVzdCBjb21tb24gbW9kZSwgd2UnbGwgdGFrZSBjYXJlIG9mCi0JICogdGhlIHJlc3QgKi8KKwkvKgorCSAqIE1ha2UgdGhlIGNhbWVyYSB3b3JrIGluIHdpZGVzdCBjb21tb24gbW9kZSwgd2UnbGwgdGFrZSBjYXJlIG9mCisJICogdGhlIHJlc3QKKwkgKi8KIAlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIXzE1KQogCQljb21tb25fZmxhZ3MgPSAoY29tbW9uX2ZsYWdzICYgflNPQ0FNX0RBVEFXSURUSF9NQVNLKSB8CiAJCQlTT0NBTV9EQVRBV0lEVEhfMTU7CkBAIC0xMDc4LDcgKzExMjYsNyBAQAogCQlzZW5zX2NvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfUE9MX1NISUZUOwogCiAJLyogSnVzdCBkbyB3aGF0IHdlJ3JlIGFza2VkIHRvIGRvICovCi0Jc3dpdGNoICh4bGF0ZS0+aG9zdF9mbXQtPmRlcHRoKSB7CisJc3dpdGNoICh4bGF0ZS0+aG9zdF9mbXQtPmJpdHNfcGVyX3NhbXBsZSkgewogCWNhc2UgNDoKIAkJZHcgPSAwIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKIAkJYnJlYWs7CkBAIC0xMTUyLDggKzEyMDAsMTAgQEAKIAlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIChNWDNfQ0FNRVJBX0RBVEFXSURUSF80IHwKIAkJCU1YM19DQU1FUkFfREFUQVdJRFRIXzggfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCB8CiAJCQlNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkpKSB7Ci0JCS8qIFBsYXRmb3JtIGhhc24ndCBzZXQgYXZhaWxhYmxlIGRhdGEgd2lkdGhzLiBUaGlzIGlzIGJhZC4KLQkJICogV2FybiBhbmQgdXNlIGEgZGVmYXVsdC4gKi8KKwkJLyoKKwkJICogUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgZGF0YSB3aWR0aHMuIFRoaXMgaXMgYmFkLgorCQkgKiBXYXJuIGFuZCB1c2UgYSBkZWZhdWx0LgorCQkgKi8KIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIldBUk5JTkchIFBsYXRmb3JtIGhhc24ndCBzZXQgYXZhaWxhYmxlICIKIAkJCSAiZGF0YSB3aWR0aHMsIHVzaW5nIGRlZmF1bHQgOCBiaXRcbiIpOwogCQlteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyB8PSBNWDNfQ0FNRVJBX0RBVEFXSURUSF84OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDVmYzRhYzAuLjc0MDBlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTE0NTAsMTIgKzE0NTAsMTEgQEAKIAogc3RhdGljIGludCBvbWFwMjR4eGNhbV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwogCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IG9tYXAyNHh4Y2FtLnByaXY7CiAJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpmaDsKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwogCi0JaWYgKCFjYW0gfHwgIWNhbS0+dmZkIHx8IChjYW0tPnZmZC0+bWlub3IgIT0gbWlub3IpKQorCWlmICghY2FtIHx8ICFjYW0tPnZmZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwpAQCAtMTY2MCw3ICsxNjU5LDYgQEAKIAogCXN0cmxjcHkodmZkLT5uYW1lLCBDQU1fTkFNRSwgc2l6ZW9mKHZmZC0+bmFtZSkpOwogCXZmZC0+Zm9wcwkJID0gJm9tYXAyNHh4Y2FtX2ZvcHM7Ci0JdmZkLT5taW5vcgkJID0gLTE7CiAJdmZkLT5pb2N0bF9vcHMJCSA9ICZvbWFwMjR4eGNhbV9pb2N0bF9mb3BzOwogCiAJb21hcDI0eHhjYW1faHdpbml0KGNhbSk7CkBAIC0xNjcxLDE0ICsxNjY5LDE0IEBACiAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpIDwgMCkgewogCQlkZXZfZXJyKGNhbS0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIFY0TCBkZXZpY2VcbiIpOwotCQl2ZmQtPm1pbm9yID0gLTE7CiAJCXJ2YWwgPSAtRUJVU1k7CiAJCWdvdG8gZXJyOwogCX0KIAogCW9tYXAyNHh4Y2FtX3Bvd2Vyb25fcmVzZXQoY2FtKTsKIAotCWRldl9pbmZvKGNhbS0+ZGV2LCAicmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZFxuIiwgdmZkLT5taW5vcik7CisJZGV2X2luZm8oY2FtLT5kZXYsICJyZWdpc3RlcmVkIGRldmljZSAlc1xuIiwKKwkJIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmZkKSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTY5NSw3ICsxNjkzLDcgQEAKIAlvbWFwMjR4eGNhbV9zZW5zb3JfZXhpdChjYW0pOwogCiAJaWYgKGNhbS0+dmZkKSB7Ci0JCWlmIChjYW0tPnZmZC0+bWlub3IgPT0gLTEpIHsKKwkJaWYgKCF2aWRlb19pc19yZWdpc3RlcmVkKGNhbS0+dmZkKSkgewogCQkJLyoKIAkJCSAqIFRoZSBkZXZpY2Ugd2FzIG5ldmVyIHJlZ2lzdGVyZWQsIHNvIHJlbGVhc2UgdGhlCiAJCQkgKiB2aWRlb19kZXZpY2Ugc3RydWN0IGRpcmVjdGx5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IDBiYzJjZjUuLmUwYmNlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTQ2NzQsNyArNDY3NCw2IEBACiAJLm5hbWUgPQkJIk9WNTExIFVTQiBDYW1lcmEiLAogCS5mb3BzID0JCSZvdjUxMV9mb3BzLAogCS5yZWxlYXNlID0JdmlkZW9fZGV2aWNlX3JlbGVhc2UsCi0JLm1pbm9yID0JLTEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTg2Nyw4ICs1ODY2LDggQEAKIAlvdjUxMV9kZXZ1c2VkIHw9IDEgPDwgbnI7CiAJb3YtPm5yID0gbnI7CiAKLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRGV2aWNlIGF0ICVzIHJlZ2lzdGVyZWQgdG8gbWlub3IgJWRcbiIsCi0JCSBvdi0+dXNiX3BhdGgsIG92LT52ZGV2LT5taW5vcik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIkRldmljZSBhdCAlcyByZWdpc3RlcmVkIHRvICVzXG4iLAorCQkgb3YtPnVzYl9wYXRoLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKG92LT52ZGV2KSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG92KTsKIAlpZiAob3ZfY3JlYXRlX3N5c2ZzKG92LT52ZGV2KSkgewpAQCAtNTg3OCwxMyArNTg3NywxMyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCW11dGV4X2xvY2soJm92LT5sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5sb2NrKTsKIAogCXJldHVybiAwOwogCiBlcnJvcjoKIAlpZiAob3YtPnZkZXYpIHsKLQkJaWYgKC0xID09IG92LT52ZGV2LT5taW5vcikKKwkJaWYgKCF2aWRlb19pc19yZWdpc3RlcmVkKG92LT52ZGV2KSkKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKG92LT52ZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uob3YtPnZkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKaW5kZXggMjA1MjI5My4uM2E0NWU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX21lZGlhYnVzLmg+CiAjaW5jbHVkZSA8bWVkaWEvb3Y3NzJ4Lmg+CiAKIC8qCkBAIC0zODIsNyArMzgzLDggQEAKIH07CiAKIHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IHsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZm9ybWF0OworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlOworCWVudW0gdjRsMl9jb2xvcnNwYWNlIGNvbG9yc3BhY2U7CiAJdTggZHNwMzsKIAl1OCBjb20zOwogCXU4IGNvbTc7CkBAIC0zOTksNyArNDAxLDcgQEAKIHN0cnVjdCBvdjc3MnhfcHJpdiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgICAgIHN1YmRldjsKIAlzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvICAgICAgICAqaW5mbzsKLQljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCAqZm10OworCWNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0ICpjZm10OwogCWNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgICAgICp3aW47CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOwogCXVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICAgICAgICBmbGFnX3ZmbGlwOjE7CkBAIC00MzQsOTMgKzQzNiw1NyBAQAogfTsKIAogLyoKLSAqIHN1cHBvcnRlZCBmb3JtYXQgbGlzdAotICovCi0KLSNkZWZpbmUgU0VURk9VUkNDKHR5cGUpIC5uYW1lID0gKCN0eXBlKSwgLmZvdXJjYyA9IChWNEwyX1BJWF9GTVRfICMjIHR5cGUpCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgb3Y3NzJ4X2ZtdF9saXN0c1tdID0gewotCXsKLQkJU0VURk9VUkNDKFlVWVYpLAotCQkuZGVwdGggICAgICA9IDE2LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCX0sCi0JewotCQlTRVRGT1VSQ0MoWVZZVSksCi0JCS5kZXB0aCAgICAgID0gMTYsCi0JCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JfSwKLQl7Ci0JCVNFVEZPVVJDQyhVWVZZKSwKLQkJLmRlcHRoICAgICAgPSAxNiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQl9LAotCXsKLQkJU0VURk9VUkNDKFJHQjU1NSksCi0JCS5kZXB0aCAgICAgID0gMTYsCi0JCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JfSwKLQl7Ci0JCVNFVEZPVVJDQyhSR0I1NTVYKSwKLQkJLmRlcHRoICAgICAgPSAxNiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9LAotCXsKLQkJU0VURk9VUkNDKFJHQjU2NSksCi0JCS5kZXB0aCAgICAgID0gMTYsCi0JCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JfSwKLQl7Ci0JCVNFVEZPVVJDQyhSR0I1NjVYKSwKLQkJLmRlcHRoICAgICAgPSAxNiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9LAotfTsKLQotLyoKLSAqIGNvbG9yIGZvcm1hdCBsaXN0CisgKiBzdXBwb3J0ZWQgY29sb3IgZm9ybWF0IGxpc3QKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IG92NzcyeF9jZm10c1tdID0gewogCXsKLQkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzBdLAotCQkuZHNwMyAgID0gMHgwLAotCQkuY29tMyAgID0gU1dBUF9ZVVYsCi0JCS5jb203ICAgPSBPRk1UX1lVViwKKwkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEUsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5kc3AzCQk9IDB4MCwKKwkJLmNvbTMJCT0gU1dBUF9ZVVYsCisJCS5jb203CQk9IE9GTVRfWVVWLAogCX0sCiAJewotCQkuZm9ybWF0ID0gJm92NzcyeF9mbXRfbGlzdHNbMV0sCi0JCS5kc3AzICAgPSBVVl9PTiwKLQkJLmNvbTMgICA9IFNXQVBfWVVWLAotCQkuY29tNyAgID0gT0ZNVF9ZVVYsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFLAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkuZHNwMwkJPSBVVl9PTiwKKwkJLmNvbTMJCT0gU1dBUF9ZVVYsCisJCS5jb203CQk9IE9GTVRfWVVWLAogCX0sCiAJewotCQkuZm9ybWF0ID0gJm92NzcyeF9mbXRfbGlzdHNbMl0sCi0JCS5kc3AzICAgPSAweDAsCi0JCS5jb20zICAgPSAweDAsCi0JCS5jb203ICAgPSBPRk1UX1lVViwKKwkJLmNvZGUJCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5kc3AzCQk9IDB4MCwKKwkJLmNvbTMJCT0gMHgwLAorCQkuY29tNwkJPSBPRk1UX1lVViwKIAl9LAogCXsKLQkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzNdLAotCQkuZHNwMyAgID0gMHgwLAotCQkuY29tMyAgID0gU1dBUF9SR0IsCi0JCS5jb203ICAgPSBGTVRfUkdCNTU1IHwgT0ZNVF9SR0IsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9MRSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLmRzcDMJCT0gMHgwLAorCQkuY29tMwkJPSBTV0FQX1JHQiwKKwkJLmNvbTcJCT0gRk1UX1JHQjU1NSB8IE9GTVRfUkdCLAogCX0sCiAJewotCQkuZm9ybWF0ID0gJm92NzcyeF9mbXRfbGlzdHNbNF0sCi0JCS5kc3AzICAgPSAweDAsCi0JCS5jb20zICAgPSAweDAsCi0JCS5jb203ICAgPSBGTVRfUkdCNTU1IHwgT0ZNVF9SR0IsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9CRSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLmRzcDMJCT0gMHgwLAorCQkuY29tMwkJPSAweDAsCisJCS5jb203CQk9IEZNVF9SR0I1NTUgfCBPRk1UX1JHQiwKIAl9LAogCXsKLQkJLmZvcm1hdCA9ICZvdjc3MnhfZm10X2xpc3RzWzVdLAotCQkuZHNwMyAgID0gMHgwLAotCQkuY29tMyAgID0gU1dBUF9SR0IsCi0JCS5jb203ICAgPSBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLmRzcDMJCT0gMHgwLAorCQkuY29tMwkJPSBTV0FQX1JHQiwKKwkJLmNvbTcJCT0gRk1UX1JHQjU2NSB8IE9GTVRfUkdCLAogCX0sCiAJewotCQkuZm9ybWF0ID0gJm92NzcyeF9mbXRfbGlzdHNbNl0sCi0JCS5kc3AzICAgPSAweDAsCi0JCS5jb20zICAgPSAweDAsCi0JCS5jb203ICAgPSBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IsCisJCS5jb2RlCQk9IFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9CRSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLmRzcDMJCT0gMHgwLAorCQkuY29tMwkJPSAweDAsCisJCS5jb203CQk9IEZNVF9SR0I1NjUgfCBPRk1UX1JHQiwKIAl9LAogfTsKIApAQCAtNjQyLDE1ICs2MDgsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFwcml2LT53aW4gfHwgIXByaXYtPmZtdCkgeworCWlmICghcHJpdi0+d2luIHx8ICFwcml2LT5jZm10KSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibm9ybSBvciB3aW4gc2VsZWN0IGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKIAlvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIDApOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJmb3JtYXQgJXMsIHdpbiAlc1xuIiwKLQkJcHJpdi0+Zm10LT5mb3JtYXQtPm5hbWUsIHByaXYtPndpbi0+bmFtZSk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmb3JtYXQgJWQsIHdpbiAlc1xuIiwKKwkJcHJpdi0+Y2ZtdC0+Y29kZSwgcHJpdi0+d2luLT5uYW1lKTsKIAogCXJldHVybiAwOwogfQpAQCAtODA2LDggKzc3Miw4IEBACiAJcmV0dXJuIHdpbjsKIH0KIAotc3RhdGljIGludCBvdjc3Mnhfc2V0X3BhcmFtcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICB1MzIgKndpZHRoLCB1MzIgKmhlaWdodCwgdTMyIHBpeGZtdCkKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9wYXJhbXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyICp3aWR0aCwgdTMyICpoZWlnaHQsCisJCQkgICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlKQogewogCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOwogCWludCByZXQgPSAtRUlOVkFMOwpAQCAtODE3LDE0ICs3ODMsMTQgQEAKIAkvKgogCSAqIHNlbGVjdCBmb3JtYXQKIAkgKi8KLQlwcml2LT5mbXQgPSBOVUxMOworCXByaXYtPmNmbXQgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92NzcyeF9jZm10cyk7IGkrKykgewotCQlpZiAocGl4Zm10ID09IG92NzcyeF9jZm10c1tpXS5mb3JtYXQtPmZvdXJjYykgewotCQkJcHJpdi0+Zm10ID0gb3Y3NzJ4X2NmbXRzICsgaTsKKwkJaWYgKGNvZGUgPT0gb3Y3NzJ4X2NmbXRzW2ldLmNvZGUpIHsKKwkJCXByaXYtPmNmbXQgPSBvdjc3MnhfY2ZtdHMgKyBpOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKCFwcml2LT5mbXQpCisJaWYgKCFwcml2LT5jZm10KQogCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCiAJLyoKQEAgLTg5NCw3ICs4NjAsNyBAQAogCS8qCiAJICogc2V0IERTUF9DVFJMMwogCSAqLwotCXZhbCA9IHByaXYtPmZtdC0+ZHNwMzsKKwl2YWwgPSBwcml2LT5jZm10LT5kc3AzOwogCWlmICh2YWwpIHsKIAkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KGNsaWVudCwKIAkJCQkgICAgICBEU1BfQ1RSTDMsIFVWX01BU0ssIHZhbCk7CkBAIC05MDUsNyArODcxLDcgQEAKIAkvKgogCSAqIHNldCBDT00zCiAJICovCi0JdmFsID0gcHJpdi0+Zm10LT5jb20zOworCXZhbCA9IHByaXYtPmNmbXQtPmNvbTM7CiAJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfVkZMSVApCiAJCXZhbCB8PSBWRkxJUF9JTUc7CiAJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfSEZMSVApCkBAIC05MjMsOSArODg5LDkgQEAKIAkvKgogCSAqIHNldCBDT003CiAJICovCi0JdmFsID0gcHJpdi0+d2luLT5jb203X2JpdCB8IHByaXYtPmZtdC0+Y29tNzsKKwl2YWwgPSBwcml2LT53aW4tPmNvbTdfYml0IHwgcHJpdi0+Y2ZtdC0+Y29tNzsKIAlyZXQgPSBvdjc3MnhfbWFza19zZXQoY2xpZW50LAotCQkJICAgICAgQ09NNywgKFNMQ1RfTUFTSyB8IEZNVF9NQVNLIHwgT0ZNVF9NQVNLKSwKKwkJCSAgICAgIENPTTcsIFNMQ1RfTUFTSyB8IEZNVF9NQVNLIHwgT0ZNVF9NQVNLLAogCQkJICAgICAgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKQEAgLTk1MSw3ICs5MTcsNyBAQAogCiAJb3Y3NzJ4X3Jlc2V0KGNsaWVudCk7CiAJcHJpdi0+d2luID0gTlVMTDsKLQlwcml2LT5mbXQgPSBOVUxMOworCXByaXYtPmNmbXQgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk4MSw1NCArOTQ3LDc5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgb3Y3NzJ4X2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKLQlpZiAoIXByaXYtPndpbiB8fCAhcHJpdi0+Zm10KSB7CisJaWYgKCFwcml2LT53aW4gfHwgIXByaXYtPmNmbXQpIHsKIAkJdTMyIHdpZHRoID0gVkdBX1dJRFRILCBoZWlnaHQgPSBWR0FfSEVJR0hUOwogCQlpbnQgcmV0ID0gb3Y3NzJ4X3NldF9wYXJhbXMoY2xpZW50LCAmd2lkdGgsICZoZWlnaHQsCi0JCQkJCSAgICBWNEwyX1BJWF9GTVRfWVVZVik7CisJCQkJCSAgICBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlmLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQlwaXgtPndpZHRoCQk9IHByaXYtPndpbi0+d2lkdGg7Ci0JcGl4LT5oZWlnaHQJCT0gcHJpdi0+d2luLT5oZWlnaHQ7Ci0JcGl4LT5waXhlbGZvcm1hdAk9IHByaXYtPmZtdC0+Zm9ybWF0LT5mb3VyY2M7Ci0JcGl4LT5jb2xvcnNwYWNlCQk9IHByaXYtPmZtdC0+Zm9ybWF0LT5jb2xvcnNwYWNlOwotCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOworCW1mLT53aWR0aAk9IHByaXYtPndpbi0+d2lkdGg7CisJbWYtPmhlaWdodAk9IHByaXYtPndpbi0+aGVpZ2h0OworCW1mLT5jb2RlCT0gcHJpdi0+Y2ZtdC0+Y29kZTsKKwltZi0+Y29sb3JzcGFjZQk9IHByaXYtPmNmbXQtPmNvbG9yc3BhY2U7CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NzJ4X3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CisJaW50IHJldCA9IG92NzcyeF9zZXRfcGFyYW1zKGNsaWVudCwgJm1mLT53aWR0aCwgJm1mLT5oZWlnaHQsCisJCQkJICAgIG1mLT5jb2RlKTsKIAotCXJldHVybiBvdjc3Mnhfc2V0X3BhcmFtcyhjbGllbnQsICZwaXgtPndpZHRoLCAmcGl4LT5oZWlnaHQsCi0JCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICghcmV0KQorCQltZi0+Y29sb3JzcGFjZSA9IHByaXYtPmNmbXQtPmNvbG9yc3BhY2U7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG92NzcyeF90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCi0JCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKwkJCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOwogCWNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgKndpbjsKKwlpbnQgaTsKIAogCS8qCiAJICogc2VsZWN0IHN1aXRhYmxlIHdpbgogCSAqLwotCXdpbiA9IG92NzcyeF9zZWxlY3Rfd2luKHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwl3aW4gPSBvdjc3Mnhfc2VsZWN0X3dpbihtZi0+d2lkdGgsIG1mLT5oZWlnaHQpOwogCi0JcGl4LT53aWR0aCAgPSB3aW4tPndpZHRoOwotCXBpeC0+aGVpZ2h0ID0gd2luLT5oZWlnaHQ7Ci0JcGl4LT5maWVsZCAgPSBWNEwyX0ZJRUxEX05PTkU7CisJbWYtPndpZHRoCT0gd2luLT53aWR0aDsKKwltZi0+aGVpZ2h0CT0gd2luLT5oZWlnaHQ7CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X2NmbXRzKTsgaSsrKQorCQlpZiAobWYtPmNvZGUgPT0gb3Y3NzJ4X2NmbXRzW2ldLmNvZGUpCisJCQlicmVhazsKKworCWlmIChpID09IEFSUkFZX1NJWkUob3Y3NzJ4X2NmbXRzKSkgeworCQkvKiBVbnN1cHBvcnRlZCBmb3JtYXQgcmVxdWVzdGVkLiBQcm9wb3NlIGVpdGhlciAqLworCQlpZiAocHJpdi0+Y2ZtdCkgeworCQkJLyogdGhlIGN1cnJlbnQgb25lIG9yICovCisJCQltZi0+Y29sb3JzcGFjZSA9IHByaXYtPmNmbXQtPmNvbG9yc3BhY2U7CisJCQltZi0+Y29kZSA9IHByaXYtPmNmbXQtPmNvZGU7CisJCX0gZWxzZSB7CisJCQkvKiB0aGUgZGVmYXVsdCBvbmUgKi8KKwkJCW1mLT5jb2xvcnNwYWNlID0gb3Y3NzJ4X2NmbXRzWzBdLmNvbG9yc3BhY2U7CisJCQltZi0+Y29kZSA9IG92NzcyeF9jZm10c1swXS5jb2RlOworCQl9CisJfSBlbHNlIHsKKwkJLyogQWxzbyByZXR1cm4gdGhlIGNvbG9yc3BhY2UgKi8KKwkJbWYtPmNvbG9yc3BhY2UJPSBvdjc3MnhfY2ZtdHNbaV0uY29sb3JzcGFjZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNTcsOSArMTA0OCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWljZC0+Zm9ybWF0cyAgICAgPSBvdjc3MnhfZm10X2xpc3RzOwotCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG92NzcyeF9mbXRfbGlzdHMpOwotCiAJLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBwcm9kdWN0IElEIGFuZCBtYW51ZmFjdHVyZXIgSUQKIAkgKi8KQEAgLTExMDksMTMgKzEwOTcsMjQgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIGludCBvdjc3MnhfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQoreworCWlmICgodW5zaWduZWQgaW50KWluZGV4ID49IEFSUkFZX1NJWkUob3Y3NzJ4X2NmbXRzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqY29kZSA9IG92NzcyeF9jZm10c1tpbmRleF0uY29kZTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgb3Y3NzJ4X3N1YmRldl92aWRlb19vcHMgPSB7CiAJLnNfc3RyZWFtCT0gb3Y3NzJ4X3Nfc3RyZWFtLAotCS5nX2ZtdAkJPSBvdjc3MnhfZ19mbXQsCi0JLnNfZm10CQk9IG92NzcyeF9zX2ZtdCwKLQkudHJ5X2ZtdAk9IG92NzcyeF90cnlfZm10LAorCS5nX21idXNfZm10CT0gb3Y3NzJ4X2dfZm10LAorCS5zX21idXNfZm10CT0gb3Y3NzJ4X3NfZm10LAorCS50cnlfbWJ1c19mbXQJPSBvdjc3MnhfdHJ5X2ZtdCwKIAkuY3JvcGNhcAk9IG92NzcyeF9jcm9wY2FwLAogCS5nX2Nyb3AJCT0gb3Y3NzJ4X2dfY3JvcCwKKwkuZW51bV9tYnVzX2ZtdAk9IG92NzcyeF9lbnVtX2ZtdCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG92NzcyeF9zdWJkZXZfb3BzID0gewpAQCAtMTE0MywxMCArMTE0MiwxMCBAQAogCX0KIAogCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwotCWlmICghaWNsKQorCWlmICghaWNsIHx8ICFpY2wtPnByaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5mbyA9IGNvbnRhaW5lcl9vZihpY2wsIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8sIGxpbmspOworCWluZm8gPSBpY2wtPnByaXY7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKaW5kZXggYzgxYWUyMTkuLjQ3YmY2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYwpAQCAtMTU0LDE5ICsxNTQsMTAgQEAKIAl7IE9WOTY0MF9NVFhTLAkweDY1IH0sCiB9OwogCi0vKgotICogVE9ETzogdGhpcyBzZW5zb3IgYWxzbyBzdXBwb3J0cyBSR0I1NTUgYW5kIFJHQjU2NSBmb3JtYXRzLCBidXQgc3VwcG9ydCBmb3IKLSAqIHRoZW0gaGFzIG5vdCB5ZXQgYmVlbiBzdWZmaWNpZW50bHkgdGVzdGVkIGFuZCBzbyBpdCBpcyBub3QgaW5jbHVkZWQgd2l0aAotICogdGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuIFRvIHRlc3QgYW5kIGRlYnVnIHRoZXNlIGZvcm1hdHMgYWRkIHR3byBlbnRyaWVzCi0gKiB0byB0aGUgYmVsb3cgYXJyYXksIHNlZSBvdjcyMnguYyBmb3IgYW4gZXhhbXBsZS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG92OTY0MF9mbXRfbGlzdHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJVWVZZIiwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfVVlWWSwKLQkJLmRlcHRoCQk9IDE2LAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCX0sCitzdGF0aWMgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIG92OTY0MF9jb2Rlc1tdID0geworCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFLAorCVY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9MRSwKKwlWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsIG92OTY0MF9jb250cm9sc1tdID0gewpAQCAtNDM0LDIwICs0MjUsMjIgQEAKIH0KIAogLyogUHJlcGFyZSBuZWNlc3NhcnkgcmVnaXN0ZXIgY2hhbmdlcyBkZXBlbmRpbmcgb24gY29sb3IgZW5jb2RpbmcgKi8KLXN0YXRpYyB2b2lkIG92OTY0MF9hbHRlcl9yZWdzKHUzMiBwaXhmbXQsIHN0cnVjdCBvdjk2NDBfcmVnX2FsdCAqYWx0KQorc3RhdGljIHZvaWQgb3Y5NjQwX2FsdGVyX3JlZ3MoZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUsCisJCQkgICAgICBzdHJ1Y3Qgb3Y5NjQwX3JlZ19hbHQgKmFsdCkKIHsKLQlzd2l0Y2ggKHBpeGZtdCkgewotCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJc3dpdGNoIChjb2RlKSB7CisJZGVmYXVsdDoKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOgogCQlhbHQtPmNvbTEyCT0gT1Y5NjQwX0NPTTEyX1lVVl9BVkc7CiAJCWFsdC0+Y29tMTMJPSBPVjk2NDBfQ09NMTNfWV9ERUxBWV9FTiB8CiAJCQkJCU9WOTY0MF9DT00xM19ZVVZfRExZKDB4MDEpOwogCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEU6CiAJCWFsdC0+Y29tNwk9IE9WOTY0MF9DT003X1JHQjsKIAkJYWx0LT5jb20xMwk9IE9WOTY0MF9DT00xM19SR0JfQVZHOwogCQlhbHQtPmNvbTE1CT0gT1Y5NjQwX0NPTTE1X1JHQl81NTU7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwljYXNlIFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRToKIAkJYWx0LT5jb203CT0gT1Y5NjQwX0NPTTdfUkdCOwogCQlhbHQtPmNvbTEzCT0gT1Y5NjQwX0NPTTEzX1JHQl9BVkc7CiAJCWFsdC0+Y29tMTUJPSBPVjk2NDBfQ09NMTVfUkdCXzU2NTsKQEAgLTQ1Niw4ICs0NDksOCBAQAogfQogCiAvKiBTZXR1cCByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIHJlc29sdXRpb24gYW5kIGNvbG9yIGVuY29kaW5nICovCi1zdGF0aWMgaW50IG92OTY0MF93cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCXUzMiB3aWR0aCwgdTMyIHBpeGZtdCwgc3RydWN0IG92OTY0MF9yZWdfYWx0ICphbHRzKQorc3RhdGljIGludCBvdjk2NDBfd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgd2lkdGgsCisJCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlLCBzdHJ1Y3Qgb3Y5NjQwX3JlZ19hbHQgKmFsdHMpCiB7CiAJY29uc3Qgc3RydWN0IG92OTY0MF9yZWcJKm92OTY0MF9yZWdzLCAqbWF0cml4X3JlZ3M7CiAJaW50CQkJb3Y5NjQwX3JlZ3NfbGVuLCBtYXRyaXhfcmVnc19sZW47CkBAIC01MDAsNyArNDkzLDcgQEAKIAl9CiAKIAkvKiBzZWxlY3QgY29sb3IgbWF0cml4IGNvbmZpZ3VyYXRpb24gZm9yIGdpdmVuIGNvbG9yIGVuY29kaW5nICovCi0JaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkgeworCWlmIChjb2RlID09IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFKSB7CiAJCW1hdHJpeF9yZWdzCT0gb3Y5NjQwX3JlZ3NfeXV2OwogCQltYXRyaXhfcmVnc19sZW4JPSBBUlJBWV9TSVpFKG92OTY0MF9yZWdzX3l1dik7CiAJfSBlbHNlIHsKQEAgLTU2MiwxNSArNTU1LDE3IEBACiB9CiAKIC8qIHNldCB0aGUgZm9ybWF0IHdlIHdpbGwgY2FwdHVyZSBpbiAqLwotc3RhdGljIGludCBvdjk2NDBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBvdjk2NDBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAlzdHJ1Y3Qgb3Y5NjQwX3JlZ19hbHQgYWx0cyA9IHswfTsKKwllbnVtIHY0bDJfY29sb3JzcGFjZSBjc3BhY2U7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUgPSBtZi0+Y29kZTsKIAlpbnQgcmV0OwogCi0Jb3Y5NjQwX3Jlc19yb3VuZHVwKCZwaXgtPndpZHRoLCAmcGl4LT5oZWlnaHQpOwotCW92OTY0MF9hbHRlcl9yZWdzKHBpeC0+cGl4ZWxmb3JtYXQsICZhbHRzKTsKKwlvdjk2NDBfcmVzX3JvdW5kdXAoJm1mLT53aWR0aCwgJm1mLT5oZWlnaHQpOworCW92OTY0MF9hbHRlcl9yZWdzKG1mLT5jb2RlLCAmYWx0cyk7CiAKIAlvdjk2NDBfcmVzZXQoY2xpZW50KTsKIApAQCAtNTc4LDE2ICs1NzMsNTQgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIG92OTY0MF93cml0ZV9yZWdzKGNsaWVudCwgcGl4LT53aWR0aCwgcGl4LT5waXhlbGZvcm1hdCwgJmFsdHMpOworCXN3aXRjaCAoY29kZSkgeworCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NTVfMlg4X1BBREhJX0xFOgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFOgorCQljc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CisJCWNzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHOworCX0KKworCXJldCA9IG92OTY0MF93cml0ZV9yZWdzKGNsaWVudCwgbWYtPndpZHRoLCBjb2RlLCAmYWx0cyk7CisJaWYgKCFyZXQpIHsKKwkJbWYtPmNvZGUJPSBjb2RlOworCQltZi0+Y29sb3JzcGFjZQk9IGNzcGFjZTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG92OTY0MF90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgb3Y5NjQwX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJb3Y5NjQwX3Jlc19yb3VuZHVwKCZtZi0+d2lkdGgsICZtZi0+aGVpZ2h0KTsKIAotCW92OTY0MF9yZXNfcm91bmR1cCgmcGl4LT53aWR0aCwgJnBpeC0+aGVpZ2h0KTsKLQlwaXgtPmZpZWxkICA9IFY0TDJfRklFTERfTk9ORTsKKwltZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAKKwlzd2l0Y2ggKG1mLT5jb2RlKSB7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEU6CisJCW1mLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1mLT5jb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU7CisJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRToKKwkJbWYtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjk2NDBfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQoreworCWlmICgodW5zaWduZWQgaW50KWluZGV4ID49IEFSUkFZX1NJWkUob3Y5NjQwX2NvZGVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqY29kZSA9IG92OTY0MF9jb2Rlc1tpbmRleF07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzNyw5ICs2NzAsNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlpY2QtPmZvcm1hdHMJCT0gb3Y5NjQwX2ZtdF9saXN0czsKLQlpY2QtPm51bV9mb3JtYXRzCT0gQVJSQVlfU0laRShvdjk2NDBfZm10X2xpc3RzKTsKLQogCS8qCiAJICogY2hlY2sgYW5kIHNob3cgcHJvZHVjdCBJRCBhbmQgbWFudWZhY3R1cmVyIElECiAJICovCkBAIC03MDIsMTEgKzczMiwxMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgb3Y5NjQwX3ZpZGVvX29wcyA9IHsKLQkuc19zdHJlYW0JCT0gb3Y5NjQwX3Nfc3RyZWFtLAotCS5zX2ZtdAkJCT0gb3Y5NjQwX3NfZm10LAotCS50cnlfZm10CQk9IG92OTY0MF90cnlfZm10LAotCS5jcm9wY2FwCQk9IG92OTY0MF9jcm9wY2FwLAotCS5nX2Nyb3AJCQk9IG92OTY0MF9nX2Nyb3AsCisJLnNfc3RyZWFtCT0gb3Y5NjQwX3Nfc3RyZWFtLAorCS5zX21idXNfZm10CT0gb3Y5NjQwX3NfZm10LAorCS50cnlfbWJ1c19mbXQJPSBvdjk2NDBfdHJ5X2ZtdCwKKwkuZW51bV9tYnVzX2ZtdAk9IG92OTY0MF9lbnVtX2ZtdCwKKwkuY3JvcGNhcAk9IG92OTY0MF9jcm9wY2FwLAorCS5nX2Nyb3AJCT0gb3Y5NjQwX2dfY3JvcCwKIAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKaW5kZXggNzNlYzk3MC4uMTFhMmMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggNmFhNDhlMC4uY2M4ZGRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtMTUxLDE3ICsxNTEsNiBAQAogfTsKIAogCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Y0bF9uYW1lKGludCB2NGxfdHlwZSkKLXsKLQlzd2l0Y2ggKHY0bF90eXBlKSB7Ci0JY2FzZSBWRkxfVFlQRV9HUkFCQkVSOiByZXR1cm4gInZpZGVvIjsKLQljYXNlIFZGTF9UWVBFX1JBRElPOiByZXR1cm4gInJhZGlvIjsKLQljYXNlIFZGTF9UWVBFX1ZCSTogcmV0dXJuICJ2YmkiOwotCWRlZmF1bHQ6IHJldHVybiAiPyI7Ci0JfQotfQotCi0KIC8qCiAgKiBwdnJfaW9jdGwoKQogICoKQEAgLTg5MSwxMCArODgwLDggQEAKIAogc3RhdGljIHZvaWQgcHZyMl92NGwyX2Rldl9kZXN0cm95KHN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXApCiB7Ci0JaW50IG51bSA9IGRpcC0+ZGV2YmFzZS5udW07CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBkaXAtPnY0bHAtPmNoYW5uZWwubWNfaGVhZC0+aGR3OwogCWVudW0gcHZyMl9jb25maWcgY2ZnID0gZGlwLT5jb25maWc7Ci0JaW50IHY0bF90eXBlID0gZGlwLT52NGxfdHlwZTsKIAogCXB2cjJfaGR3X3Y0bF9zdG9yZV9taW5vcl9udW1iZXIoaGR3LGRpcC0+bWlub3JfdHlwZSwtMSk7CiAKQEAgLTkwNiw4ICs4OTMsOCBAQAogCSAgIGFyZSBnb25lLiAqLwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogdW5yZWdpc3RlcmVkIGRldmljZSAlcyV1IFslc11cbiIsCi0JICAgICAgIGdldF92NGxfbmFtZSh2NGxfdHlwZSksIG51bSwKKwlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiB1bnJlZ2lzdGVyZWQgZGV2aWNlICVzIFslc11cbiIsCisJICAgICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmRpcC0+ZGV2YmFzZSksCiAJICAgICAgIHB2cjJfY29uZmlnX2dldF9uYW1lKGNmZykpOwogCiB9CkBAIC0xMzE3LDggKzEzMDQsOCBAQAogCQkJIjogRmFpbGVkIHRvIHJlZ2lzdGVyIHB2cnVzYjIgdjRsIGRldmljZVxuIik7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogcmVnaXN0ZXJlZCBkZXZpY2UgJXMldSBbJXNdXG4iLAotCSAgICAgICBnZXRfdjRsX25hbWUoZGlwLT52NGxfdHlwZSksIGRpcC0+ZGV2YmFzZS5udW0sCisJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogcmVnaXN0ZXJlZCBkZXZpY2UgJXMgWyVzXVxuIiwKKwkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmZGlwLT5kZXZiYXNlKSwKIAkgICAgICAgcHZyMl9jb25maWdfZ2V0X25hbWUoZGlwLT5jb25maWcpKTsKIAogCXB2cjJfaGR3X3Y0bF9zdG9yZV9taW5vcl9udW1iZXIodnAtPmNoYW5uZWwubWNfaGVhZC0+aGR3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwppbmRleCA4OWI2MjBmLi5hZWE3ZTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwpAQCAtMTY5LDcgKzE2OSw2IEBACiAJLm5hbWUgPQkJIlBoaWxpcHMgV2ViY2FtIiwJLyogRmlsbGVkIGluIGxhdGVyICovCiAJLnJlbGVhc2UgPQl2aWRlb19kZXZpY2VfcmVsZWFzZSwKIAkuZm9wcyA9ICAgICAgICAgJnB3Y19mb3BzLAotCS5taW5vciA9ICAgICAgICAtMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODA3LDcgKzE4MDYsNyBAQAogCQlnb3RvIGVycl92aWRlb19yZWxlYXNlOwogCX0KIAotCVBXQ19JTkZPKCJSZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZC5cbiIsIHBkZXYtPnZkZXYtPm51bSk7CisJUFdDX0lORk8oIlJlZ2lzdGVyZWQgYXMgJXMuXG4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHBkZXYtPnZkZXYpKTsKIAogCS8qIG9jY3VweSBzbG90ICovCiAJaWYgKGhpbnQgPCBNQVhfREVWX0hJTlRTKQpAQCAtMTk0OCw3ICsxOTQ3LDkgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZnBzLCAiSW5pdGlhbCBmcmFtZXMgcGVyIHNlY29uZC4gVmFyaWVzIHdpdGggbW9kZWwsIHVzZWZ1bCByYW5nZSA1LTMwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGZidWZzLCAiTnVtYmVyIG9mIGludGVybmFsIGZyYW1lIGJ1ZmZlcnMgdG8gcmVzZXJ2ZSIpOwogTU9EVUxFX1BBUk1fREVTQyhtYnVmcywgIk51bWJlciBvZiBleHRlcm5hbCAobW1hcCgpZWQpIGltYWdlIGJ1ZmZlcnMiKTsKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19ERUJVRwogTU9EVUxFX1BBUk1fREVTQyh0cmFjZSwgIkZvciBkZWJ1Z2dpbmcgcHVycG9zZXMiKTsKKyNlbmRpZgogTU9EVUxFX1BBUk1fREVTQyhwb3dlcl9zYXZlLCAiVHVybiBwb3dlciBzYXZlIGZlYXR1cmUgaW4gY2FtZXJhIG9uIG9yIG9mZiIpOwogTU9EVUxFX1BBUk1fREVTQyhjb21wcmVzc2lvbiwgIlByZWZlcnJlZCBjb21wcmVzc2lvbiBxdWFsaXR5LiBSYW5nZSAwICh1bmNvbXByZXNzZWQpIHRvIDMgKGhpZ2ggY29tcHJlc3Npb24pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGxlZHMsICJMRUQgb24sb2ZmIHRpbWUgaW4gbWlsbGlzZWNvbmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IDUxYjY4M2MuLjI5NGY4NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX21lZGlhYnVzLmg+CiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIApAQCAtMTgzLDIzICsxODQsMjEgQEAKIC8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCiBzdHJ1Y3QgcHhhX2J1ZmZlciB7CiAJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLwotCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7Ci0KLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAgICAgICAgKmZtdDsKLQorCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIJCXZiOworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZQljb2RlOwogCS8qIG91ciBkZXNjcmlwdG9yIGxpc3RzIGZvciBZLCBVIGFuZCBWIGNoYW5uZWxzICovCi0Jc3RydWN0IHB4YV9jYW1fZG1hIGRtYXNbM107Ci0KLQlpbnQJCQlpbndvcms7Ci0KLQllbnVtIHB4YV9jYW1lcmFfYWN0aXZlX2RtYSBhY3RpdmVfZG1hOworCXN0cnVjdCBweGFfY2FtX2RtYQkJZG1hc1szXTsKKwlpbnQJCQkJaW53b3JrOworCWVudW0gcHhhX2NhbWVyYV9hY3RpdmVfZG1hCWFjdGl2ZV9kbWE7CiB9OwogCiBzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QJc29jX2hvc3Q7Ci0JLyogUFhBMjd4IGlzIG9ubHkgc3VwcG9zZWQgdG8gaGFuZGxlIG9uZSBjYW1lcmEgb24gaXRzIFF1aWNrIENhcHR1cmUKKwkvKgorCSAqIFBYQTI3eCBpcyBvbmx5IHN1cHBvc2VkIHRvIGhhbmRsZSBvbmUgY2FtZXJhIG9uIGl0cyBRdWljayBDYXB0dXJlCiAJICogaW50ZXJmYWNlLiBJZiBhbnlvbmUgZXZlciBidWlsZHMgaGFyZHdhcmUgdG8gZW5hYmxlIG1vcmUgdGhhbgotCSAqIG9uZSBjYW1lcmEsIHRoZXkgd2lsbCBoYXZlIHRvIG1vZGlmeSB0aGlzIGRyaXZlciB0b28gKi8KKwkgKiBvbmUgY2FtZXJhLCB0aGV5IHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhpcyBkcml2ZXIgdG9vCisJICovCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CiAJc3RydWN0IGNsawkJKmNsazsKIApAQCAtMjQxLDExICsyNDAsMTUgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJaW50IGJ5dGVzX3Blcl9saW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUoaWNkLT51c2VyX3dpZHRoLAorCQkJCQkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOworCisJaWYgKGJ5dGVzX3Blcl9saW5lIDwgMCkKKwkJcmV0dXJuIGJ5dGVzX3Blcl9saW5lOwogCiAJZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CiAKLQkqc2l6ZSA9IHJvdW5kdXAoaWNkLT51c2VyX3dpZHRoICogaWNkLT51c2VyX2hlaWdodCAqCi0JCQkoKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMyksIDgpOworCSpzaXplID0gYnl0ZXNfcGVyX2xpbmUgKiBpY2QtPnVzZXJfaGVpZ2h0OwogCiAJaWYgKDAgPT0gKmNvdW50KQogCQkqY291bnQgPSAzMjsKQEAgLTI2Nyw4ICsyNzAsMTAgQEAKIAlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJJmJ1Zi0+dmIsIGJ1Zi0+dmIuYmFkZHIsIGJ1Zi0+dmIuYnNpemUpOwogCi0JLyogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubwotCSAqIGxvbmdlciBpbiBTVEFURV9RVUVVRUQgb3IgU1RBVEVfQUNUSVZFICovCisJLyoKKwkgKiBUaGlzIHdhaXRzIHVudGlsIHRoaXMgYnVmZmVyIGlzIG91dCBvZiBkYW5nZXIsIGkuZS4sIHVudGlsIGl0IGlzIG5vCisJICogbG9uZ2VyIGluIFNUQVRFX1FVRVVFRCBvciBTVEFURV9BQ1RJVkUKKwkgKi8KIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOwogCXZpZGVvYnVmX2RtYV91bm1hcCh2cSwgZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZShkbWEpOwpAQCAtNDI5LDYgKzQzNCwxMSBAQAogCXN0cnVjdCBweGFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CiAJaW50IHJldDsKIAlpbnQgc2l6ZV95LCBzaXplX3UgPSAwLCBzaXplX3YgPSAwOworCWludCBieXRlc19wZXJfbGluZSA9IHNvY19tYnVzX2J5dGVzX3Blcl9saW5lKGljZC0+dXNlcl93aWR0aCwKKwkJCQkJCWljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10KTsKKworCWlmIChieXRlc19wZXJfbGluZSA8IDApCisJCXJldHVybiBieXRlc19wZXJfbGluZTsKIAogCWRldl9kYmcoZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwpAQCAtNDM3LDI5ICs0NDcsMzMgQEAKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZ2Yi0+cXVldWUpKTsKIAogI2lmZGVmIERFQlVHCi0JLyogVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSBpZiB3ZSBhY3R1YWxseSBmaWxsCi0JICogdGhlIGJ1ZmZlciB3aXRoIHNvbWV0aGluZyAqLworCS8qCisJICogVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSBpZiB3ZSBhY3R1YWxseSBmaWxsCisJICogdGhlIGJ1ZmZlciB3aXRoIHNvbWV0aGluZworCSAqLwogCW1lbXNldCgodm9pZCAqKXZiLT5iYWRkciwgMHhhYSwgdmItPmJzaXplKTsKICNlbmRpZgogCiAJQlVHX09OKE5VTEwgPT0gaWNkLT5jdXJyZW50X2ZtdCk7CiAKLQkvKiBJIHRoaW5rLCBpbiBidWZfcHJlcGFyZSB5b3Ugb25seSBoYXZlIHRvIHByb3RlY3QgZ2xvYmFsIGRhdGEsCi0JICogdGhlIGFjdHVhbCBidWZmZXIgaXMgeW91cnMgKi8KKwkvKgorCSAqIEkgdGhpbmssIGluIGJ1Zl9wcmVwYXJlIHlvdSBvbmx5IGhhdmUgdG8gcHJvdGVjdCBnbG9iYWwgZGF0YSwKKwkgKiB0aGUgYWN0dWFsIGJ1ZmZlciBpcyB5b3VycworCSAqLwogCWJ1Zi0+aW53b3JrID0gMTsKIAotCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJaWYgKGJ1Zi0+Y29kZQkhPSBpY2QtPmN1cnJlbnRfZm10LT5jb2RlIHx8CiAJICAgIHZiLT53aWR0aAkhPSBpY2QtPnVzZXJfd2lkdGggfHwKIAkgICAgdmItPmhlaWdodAkhPSBpY2QtPnVzZXJfaGVpZ2h0IHx8CiAJICAgIHZiLT5maWVsZAkhPSBmaWVsZCkgewotCQlidWYtPmZtdAk9IGljZC0+Y3VycmVudF9mbXQ7CisJCWJ1Zi0+Y29kZQk9IGljZC0+Y3VycmVudF9mbXQtPmNvZGU7CiAJCXZiLT53aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKIAkJdmItPmhlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJCXZiLT5maWVsZAk9IGZpZWxkOwogCQl2Yi0+c3RhdGUJPSBWSURFT0JVRl9ORUVEU19JTklUOwogCX0KIAotCXZiLT5zaXplID0gdmItPndpZHRoICogdmItPmhlaWdodCAqICgoYnVmLT5mbXQtPmRlcHRoICsgNykgPj4gMyk7CisJdmItPnNpemUgPSBieXRlc19wZXJfbGluZSAqIHZiLT5oZWlnaHQ7CiAJaWYgKDAgIT0gdmItPmJhZGRyICYmIHZiLT5ic2l6ZSA8IHZiLT5zaXplKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtODM0LDggKzg0OCwxMCBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKLQkvKiBXZSBtdXN0IHBhc3MgTlVMTCBhcyBkZXYgcG9pbnRlciwgdGhlbiBhbGwgcGNpXyogZG1hIG9wZXJhdGlvbnMKLQkgKiB0cmFuc2Zvcm0gdG8gbm9ybWFsIGRtYV8qIG9uZXMuICovCisJLyoKKwkgKiBXZSBtdXN0IHBhc3MgTlVMTCBhcyBkZXYgcG9pbnRlciwgdGhlbiBhbGwgcGNpXyogZG1hIG9wZXJhdGlvbnMKKwkgKiB0cmFuc2Zvcm0gdG8gbm9ybWFsIGRtYV8qIG9uZXMuCisJICovCiAJdmlkZW9idWZfcXVldWVfc2dfaW5pdChxLCAmcHhhX3ZpZGVvYnVmX29wcywgTlVMTCwgJnBjZGV2LT5sb2NrLAogCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9OT05FLAogCQkJCXNpemVvZihzdHJ1Y3QgcHhhX2J1ZmZlciksIGljZCk7CkBAIC0xMDUxLDExICsxMDY3LDE4IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAl1bnNpZ25lZCBsb25nIGR3LCBicHA7Ci0JdTMyIGNpY3IwLCBjaWNyMSwgY2ljcjIsIGNpY3IzLCBjaWNyNCA9IDA7CisJdTMyIGNpY3IwLCBjaWNyMSwgY2ljcjIsIGNpY3IzLCBjaWNyNCA9IDAsIHlfc2tpcF90b3A7CisJaW50IHJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHNlbnNvciwgZ19za2lwX3RvcF9saW5lcywgJnlfc2tpcF90b3ApOwogCi0JLyogRGF0YXdpZHRoIGlzIG5vdyBndWFyYW50ZWVkIHRvIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgdGhyZWUgdmFsdWVzLgotCSAqIFdlIGZpeCBiaXQtcGVyLXBpeGVsIGVxdWFsIHRvIGRhdGEtd2lkdGguLi4gKi8KKwlpZiAocmV0IDwgMCkKKwkJeV9za2lwX3RvcCA9IDA7CisKKwkvKgorCSAqIERhdGF3aWR0aCBpcyBub3cgZ3VhcmFudGVlZCB0byBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIHRocmVlIHZhbHVlcy4KKwkgKiBXZSBmaXggYml0LXBlci1waXhlbCBlcXVhbCB0byBkYXRhLXdpZHRoLi4uCisJICovCiAJc3dpdGNoIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLKSB7CiAJY2FzZSBTT0NBTV9EQVRBV0lEVEhfMTA6CiAJCWR3ID0gNDsKQEAgLTEwNjYsOCArMTA4OSwxMCBAQAogCQlicHAgPSAweDIwOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkvKiBBY3R1YWxseSBpdCBjYW4gb25seSBiZSA4IG5vdywKLQkJICogZGVmYXVsdCBpcyBqdXN0IHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgKi8KKwkJLyoKKwkJICogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgOCBub3csCisJCSAqIGRlZmF1bHQgaXMganVzdCB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzCisJCSAqLwogCWNhc2UgU09DQU1fREFUQVdJRFRIXzg6CiAJCWR3ID0gMjsKIAkJYnBwID0gMDsKQEAgLTExMTgsNyArMTE0Myw3IEBACiAKIAljaWNyMiA9IDA7CiAJY2ljcjMgPSBDSUNSM19MUEZfVkFMKGljZC0+dXNlcl9oZWlnaHQgLSAxKSB8Ci0JCUNJQ1IzX0JGV19WQUwobWluKCh1bnNpZ25lZCBzaG9ydCkyNTUsIGljZC0+eV9za2lwX3RvcCkpOworCQlDSUNSM19CRldfVkFMKG1pbigodTMyKTI1NSwgeV9za2lwX3RvcCkpOwogCWNpY3I0IHw9IHBjZGV2LT5tY2xrX2Rpdmlzb3I7CiAKIAlfX3Jhd193cml0ZWwoY2ljcjEsIHBjZGV2LT5iYXNlICsgQ0lDUjEpOwpAQCAtMTEzOCw5ICsxMTYzLDE1IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3M7Ci0JaW50IHJldCA9IHRlc3RfcGxhdGZvcm1fcGFyYW0ocGNkZXYsIGljZC0+YnVzd2lkdGgsICZidXNfZmxhZ3MpOworCWNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqZm10OworCWludCByZXQ7CiAJc3RydWN0IHB4YV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwogCisJZm10ID0gc29jX21idXNfZ2V0X2ZtdGRlc2MoaWNkLT5jdXJyZW50X2ZtdC0+Y29kZSk7CisJaWYgKCFmbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShwY2RldiwgZm10LT5iaXRzX3Blcl9zYW1wbGUsICZidXNfZmxhZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMjA0LDU5ICsxMjM1LDQ5IEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpID8gMCA6IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBweGFfY2FtZXJhX2Zvcm1hdHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgcHhhX2NhbWVyYV9mb3JtYXRzW10gPSB7CiAJewotCQkubmFtZQkJPSAiUGxhbmFyIFlVVjQyMiAxNiBiaXQiLAotCQkuZGVwdGgJCT0gMTYsCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVVjQyMlAsCi0JCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQLAorCQkubmFtZQkJCT0gIlBsYW5hciBZVVY0MjIgMTYgYml0IiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCisJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAogCX0sCiB9OwogCi1zdGF0aWMgYm9vbCBidXN3aWR0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBkZXB0aCkKKy8qIFRoaXMgd2lsbCBiZSBjb3JyZWN0ZWQgYXMgd2UgZ2V0IG1vcmUgZm9ybWF0cyAqLworc3RhdGljIGJvb2wgcHhhX2NhbWVyYV9wYWNraW5nX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgKmZtdCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwotCi0Jc3dpdGNoIChkZXB0aCkgewotCWNhc2UgODoKLQkJcmV0dXJuICEhKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfREFUQVdJRFRIXzgpOwotCWNhc2UgOToKLQkJcmV0dXJuICEhKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfREFUQVdJRFRIXzkpOwotCWNhc2UgMTA6Ci0JCXJldHVybiAhIShwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX0RBVEFXSURUSF8xMCk7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCByZXF1aXJlZF9idXN3aWR0aChjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZm10KQotewotCXN3aXRjaCAoZm10LT5mb3VyY2MpIHsKLQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgotCWNhc2UgVjRMMl9QSVhfRk1UX1ZZVVk6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6Ci0JCXJldHVybiA4OwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmbXQtPmRlcHRoOwotCX0KKwlyZXR1cm4JZm10LT5wYWNraW5nID09IFNPQ19NQlVTX1BBQ0tJTkdfTk9ORSB8fAorCQkoZm10LT5iaXRzX3Blcl9zYW1wbGUgPT0gOCAmJgorCQkgZm10LT5wYWNraW5nID09IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJKSB8fAorCQkoZm10LT5iaXRzX3Blcl9zYW1wbGUgPiA4ICYmCisJCSBmbXQtPnBhY2tpbmcgPT0gU09DX01CVVNfUEFDS0lOR19FWFRFTkQxNik7CiB9CiAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9nZXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGlkeCwKIAkJCQkgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwotCWludCBmb3JtYXRzID0gMCwgYnVzd2lkdGgsIHJldDsKKwlpbnQgZm9ybWF0cyA9IDAsIHJldDsKIAlzdHJ1Y3QgcHhhX2NhbSAqY2FtOworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlOworCWNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqZm10OwogCi0JYnVzd2lkdGggPSByZXF1aXJlZF9idXN3aWR0aChpY2QtPmZvcm1hdHMgKyBpZHgpOwotCi0JaWYgKCFidXN3aWR0aF9zdXBwb3J0ZWQoaWNkLCBidXN3aWR0aCkpCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fbWJ1c19mbXQsIGlkeCwgJmNvZGUpOworCWlmIChyZXQgPCAwKQorCQkvKiBObyBtb3JlIGZvcm1hdHMgKi8KIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBweGFfY2FtZXJhX3RyeV9idXNfcGFyYW0oaWNkLCBidXN3aWR0aCk7CisJZm10ID0gc29jX21idXNfZ2V0X2ZtdGRlc2MoY29kZSk7CisJaWYgKCFmbXQpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGZvcm1hdCBjb2RlICMlZDogJWRcbiIsIGlkeCwgY29kZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFRoaXMgYWxzbyBjaGVja3Mgc3VwcG9ydCBmb3IgdGhlIHJlcXVlc3RlZCBiaXRzLXBlci1zYW1wbGUgKi8KKwlyZXQgPSBweGFfY2FtZXJhX3RyeV9idXNfcGFyYW0oaWNkLCBmbXQtPmJpdHNfcGVyX3NhbXBsZSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCkBAIC0xMjcwLDQ1ICsxMjkxLDQwIEBACiAJCWNhbSA9IGljZC0+aG9zdF9wcml2OwogCX0KIAotCXN3aXRjaCAoaWNkLT5mb3JtYXRzW2lkeF0uZm91cmNjKSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOgogCQlmb3JtYXRzKys7CiAJCWlmICh4bGF0ZSkgewotCQkJeGxhdGUtPmhvc3RfZm10ID0gJnB4YV9jYW1lcmFfZm9ybWF0c1swXTsKLQkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwotCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CisJCQl4bGF0ZS0+aG9zdF9mbXQJPSAmcHhhX2NhbWVyYV9mb3JtYXRzWzBdOworCQkJeGxhdGUtPmNvZGUJPSBjb2RlOwogCQkJeGxhdGUrKzsKLQkJCWRldl9kYmcoZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyAlc1xuIiwKLQkJCQlweGFfY2FtZXJhX2Zvcm1hdHNbMF0ubmFtZSwKLQkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKKwkJCWRldl9kYmcoZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyBjb2RlICVkXG4iLAorCQkJCXB4YV9jYW1lcmFfZm9ybWF0c1swXS5uYW1lLCBjb2RlKTsKIAkJfQotCWNhc2UgVjRMMl9QSVhfRk1UX1ZZVVk6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6Ci0JCWZvcm1hdHMrKzsKLQkJaWYgKHhsYXRlKSB7Ci0JCQl4bGF0ZS0+aG9zdF9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7Ci0JCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKLQkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOwotCQkJeGxhdGUrKzsKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFOgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRToKKwljYXNlIFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRToKKwljYXNlIFY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9MRToKKwkJaWYgKHhsYXRlKQogCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHBhY2tlZFxuIiwKLQkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKLQkJfQorCQkJCWZtdC0+bmFtZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCi0JCWZvcm1hdHMrKzsKLQkJaWYgKHhsYXRlKSB7Ci0JCQl4bGF0ZS0+aG9zdF9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7Ci0JCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKLQkJCXhsYXRlLT5idXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpZHhdLmRlcHRoOwotCQkJeGxhdGUrKzsKKwkJaWYgKCFweGFfY2FtZXJhX3BhY2tpbmdfc3VwcG9ydGVkKGZtdCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHhsYXRlKQogCQkJZGV2X2RiZyhkZXYsCiAJCQkJIlByb3ZpZGluZyBmb3JtYXQgJXMgaW4gcGFzcy10aHJvdWdoIG1vZGVcbiIsCi0JCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7Ci0JCX0KKwkJCQlmbXQtPm5hbWUpOworCX0KKworCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCisJZm9ybWF0cysrOworCWlmICh4bGF0ZSkgeworCQl4bGF0ZS0+aG9zdF9mbXQJPSBmbXQ7CisJCXhsYXRlLT5jb2RlCT0gY29kZTsKKwkJeGxhdGUrKzsKIAl9CiAKIAlyZXR1cm4gZm9ybWF0czsKQEAgLTEzMjAsMTEgKzEzMzYsMTEgQEAKIAlpY2QtPmhvc3RfcHJpdiA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9jaGVja19mcmFtZShzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXgpCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUodTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQogewogCS8qIGxpbWl0IHRvIHB4YSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8KLQlyZXR1cm4gcGl4LT5oZWlnaHQgPCAzMiB8fCBwaXgtPmhlaWdodCA+IDIwNDggfHwgcGl4LT53aWR0aCA8IDQ4IHx8Ci0JCXBpeC0+d2lkdGggPiAyMDQ4IHx8IChwaXgtPndpZHRoICYgMHgwMSk7CisJcmV0dXJuIGhlaWdodCA8IDMyIHx8IGhlaWdodCA+IDIwNDggfHwgd2lkdGggPCA0OCB8fCB3aWR0aCA+IDIwNDggfHwKKwkJKHdpZHRoICYgMHgwMSk7CiB9CiAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKQEAgLTEzMzksOSArMTM1NSw5IEBACiAJCS5tYXN0ZXJfY2xvY2sgPSBwY2Rldi0+bWNsaywKIAkJLnBpeGVsX2Nsb2NrX21heCA9IHBjZGV2LT5jaWNsayAvIDQsCiAJfTsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZjsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4LCBwaXhfdG1wOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJc3RydWN0IHB4YV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OworCXUzMiBmb3VyY2MgPSBpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjOwogCWludCByZXQ7CiAKIAkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCkBAIC0xMzU4LDI3ICsxMzc0LDIzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfZm10LCAmZik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfbWJ1c19mbXQsICZtZik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlwaXhfdG1wID0gKnBpeDsKLQlpZiAocHhhX2NhbWVyYV9jaGVja19mcmFtZShwaXgpKSB7CisJaWYgKHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUobWYud2lkdGgsIG1mLmhlaWdodCkpIHsKIAkJLyoKIAkJICogQ2FtZXJhIGNyb3BwaW5nIHByb2R1Y2VkIGEgZnJhbWUgYmV5b25kIG91ciBjYXBhYmlsaXRpZXMuCiAJCSAqIEZJWE1FOiBqdXN0IGV4dHJhY3QgYSBzdWJmcmFtZSwgdGhhdCB3ZSBjYW4gcHJvY2Vzcy4KIAkJICovCi0JCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcGl4LT53aWR0aCwgNDgsIDIwNDgsIDEsCi0JCQkmcGl4LT5oZWlnaHQsIDMyLCAyMDQ4LCAwLAotCQkJaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjJQID8KLQkJCQk0IDogMCk7Ci0JCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgJmYpOworCQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJm1mLndpZHRoLCA0OCwgMjA0OCwgMSwKKwkJCSZtZi5oZWlnaHQsIDMyLCAyMDQ4LCAwLAorCQkJZm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjJQID8gNCA6IDApOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19tYnVzX2ZtdCwgJm1mKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCWlmIChweGFfY2FtZXJhX2NoZWNrX2ZyYW1lKHBpeCkpIHsKKwkJaWYgKHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUobWYud2lkdGgsIG1mLmhlaWdodCkpIHsKIAkJCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwKIAkJCQkgIkluY29uc2lzdGVudCBzdGF0ZS4gVXNlIFNfRk1UIHRvIHJlcGFpclxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzOTUsMTAgKzE0MDcsMTAgQEAKIAkJcmVjYWxjdWxhdGVfZmlmb190aW1lb3V0KHBjZGV2LCBzZW5zZS5waXhlbF9jbG9jayk7CiAJfQogCi0JaWNkLT51c2VyX3dpZHRoID0gcGl4LT53aWR0aDsKLQlpY2QtPnVzZXJfaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisJaWNkLT51c2VyX3dpZHRoCQk9IG1mLndpZHRoOworCWljZC0+dXNlcl9oZWlnaHQJPSBtZi5oZWlnaHQ7CiAKLQlweGFfY2FtZXJhX3NldHVwX2NpY3IoaWNkLCBjYW0tPmZsYWdzLCBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpOworCXB4YV9jYW1lcmFfc2V0dXBfY2ljcihpY2QsIGNhbS0+ZmxhZ3MsIGZvdXJjYyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQxMCwxNCArMTQyMiwxMyBAQAogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjYW1fZm10ID0gTlVMTDsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlID0gTlVMTDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSBzZW5zZSA9IHsKIAkJLm1hc3Rlcl9jbG9jayA9IHBjZGV2LT5tY2xrLAogCQkucGl4ZWxfY2xvY2tfbWF4ID0gcGNkZXYtPmNpY2xrIC8gNCwKIAl9OwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCXN0cnVjdCB2NGwyX2Zvcm1hdCBjYW1fZiA9ICpmOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJaW50IHJldDsKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKQEAgLTE0MjYsMjYgKzE0MzcsMzEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2FtX2ZtdCA9IHhsYXRlLT5jYW1fZm10OwotCiAJLyogSWYgUENMSyBpcyB1c2VkIHRvIGxhdGNoIGRhdGEgZnJvbSB0aGUgc2Vuc29yLCBjaGVjayBzZW5zZSAqLwogCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1BDTEtfRU4pCisJCS8qIFRoZSBjYWxsZXIgaG9sZHMgYSBtdXRleC4gKi8KIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAotCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW1fZm10LT5mb3VyY2M7Ci0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCAmY2FtX2YpOwotCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBwaXgtPnBpeGVsZm9ybWF0OwotCSpwaXggPSBjYW1fZi5mbXQucGl4OworCW1mLndpZHRoCT0gcGl4LT53aWR0aDsKKwltZi5oZWlnaHQJPSBwaXgtPmhlaWdodDsKKwltZi5maWVsZAk9IHBpeC0+ZmllbGQ7CisJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKKwltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfbWJ1c19mbXQsICZtZik7CisKKwlpZiAobWYuY29kZSAhPSB4bGF0ZS0+Y29kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpY2QtPnNlbnNlID0gTlVMTDsKIAogCWlmIChyZXQgPCAwKSB7CiAJCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgZm9yIGZvcm1hdCAleFxuIiwKIAkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKLQl9IGVsc2UgaWYgKHB4YV9jYW1lcmFfY2hlY2tfZnJhbWUocGl4KSkgeworCX0gZWxzZSBpZiAocHhhX2NhbWVyYV9jaGVja19mcmFtZShtZi53aWR0aCwgbWYuaGVpZ2h0KSkgewogCQlkZXZfd2FybihkZXYsCiAJCQkgIkNhbWVyYSBkcml2ZXIgcHJvZHVjZWQgYW4gdW5zdXBwb3J0ZWQgZnJhbWUgJWR4JWRcbiIsCi0JCQkgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQkJIG1mLndpZHRoLCBtZi5oZWlnaHQpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKIAkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7CkBAIC0xNDU3LDEwICsxNDczLDE0IEBACiAJCXJlY2FsY3VsYXRlX2ZpZm9fdGltZW91dChwY2Rldiwgc2Vuc2UucGl4ZWxfY2xvY2spOwogCX0KIAotCWlmICghcmV0KSB7Ci0JCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7Ci0JCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7Ci0JfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGl4LT53aWR0aAkJPSBtZi53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBtZi5oZWlnaHQ7CisJcGl4LT5maWVsZAkJPSBtZi5maWVsZDsKKwlwaXgtPmNvbG9yc3BhY2UJCT0gbWYuY29sb3JzcGFjZTsKKwlpY2QtPmN1cnJlbnRfZm10CT0geGxhdGU7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ2OCwxNyArMTQ4OCwxNiBAQAogc3RhdGljIGludCBweGFfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOwogCV9fdTMyIHBpeGZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7Ci0JZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwogCWludCByZXQ7CiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljaS0+djRsMl9kZXYuZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNDkyLDIyICsxNTExLDM2IEBACiAJCQkgICAgICAmcGl4LT5oZWlnaHQsIDMyLCAyMDQ4LCAwLAogCQkJICAgICAgcGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVY0MjJQID8gNCA6IDApOwogCi0JcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKLQkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUocGl4LT53aWR0aCwKKwkJCQkJCSAgICB4bGF0ZS0+aG9zdF9mbXQpOworCWlmIChwaXgtPmJ5dGVzcGVybGluZSA8IDApCisJCXJldHVybiBwaXgtPmJ5dGVzcGVybGluZTsKIAlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogcGl4LT5ieXRlc3BlcmxpbmU7CiAKLQkvKiBjYW1lcmEgaGFzIHRvIHNlZSBpdHMgZm9ybWF0LCBidXQgdGhlIHVzZXIgdGhlIG9yaWdpbmFsIG9uZSAqLwotCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOwogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X2ZtdCwgZik7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IHBpeGZtdDsKKwltZi53aWR0aAk9IHBpeC0+d2lkdGg7CisJbWYuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJbWYuZmllbGQJPSBwaXgtPmZpZWxkOworCW1mLmNvbG9yc3BhY2UJPSBwaXgtPmNvbG9yc3BhY2U7CisJbWYuY29kZQkJPSB4bGF0ZS0+Y29kZTsKIAotCWZpZWxkID0gcGl4LT5maWVsZDsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X21idXNfZm10LCAmbWYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKSB7Ci0JCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKLQkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOworCXBpeC0+d2lkdGgJPSBtZi53aWR0aDsKKwlwaXgtPmhlaWdodAk9IG1mLmhlaWdodDsKKwlwaXgtPmNvbG9yc3BhY2UJPSBtZi5jb2xvcnNwYWNlOworCisJc3dpdGNoIChtZi5maWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9BTlk6CisJY2FzZSBWNEwyX0ZJRUxEX05PTkU6CisJCXBpeC0+ZmllbGQJPSBWNEwyX0ZJRUxEX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE86IHN1cHBvcnQgaW50ZXJsYWNlZCBhdCBsZWFzdCBpbiBwYXNzLXRocm91Z2ggbW9kZSAqLworCQlkZXZfZXJyKGljZC0+ZGV2LnBhcmVudCwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLAorCQkJbWYuZmllbGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1MTksMTAgKzE1NTIsMTIgQEAKIHsKIAlpbnQgaTsKIAotCS8qIFRoaXMgaXMgZm9yIGxvY2tpbmcgZGVidWdnaW5nIG9ubHkuIEkgcmVtb3ZlZCBzcGlubG9ja3MgYW5kIG5vdyBJCisJLyoKKwkgKiBUaGlzIGlzIGZvciBsb2NraW5nIGRlYnVnZ2luZyBvbmx5LiBJIHJlbW92ZWQgc3BpbmxvY2tzIGFuZCBub3cgSQogCSAqIGNoZWNrIHdoZXRoZXIgLnByZXBhcmUgaXMgZXZlciBjYWxsZWQgb24gYSBsaW5rZWQgYnVmZmVyLCBvciB3aGV0aGVyCiAJICogYSBkbWEgSVJRIGNhbiBvY2N1ciBmb3IgYW4gaW4td29yayBvciB1bmxpbmtlZCBidWZmZXIuIFVudGlsIG5vdwotCSAqIGl0IGhhZG4ndCB0cmlnZ2VyZWQgKi8KKwkgKiBpdCBoYWRuJ3QgdHJpZ2dlcmVkCisJICovCiAJZm9yIChpID0gMDsgaSA8IHAtPmNvdW50OyBpKyspIHsKIAkJc3RydWN0IHB4YV9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZihpY2YtPnZiX3ZpZHEuYnVmc1tpXSwKIAkJCQkJCSAgICAgIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CkBAIC0xNjU3LDggKzE2OTIsMTAgQEAKIAlwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgPSBwY2Rldi0+cGRhdGEtPmZsYWdzOwogCWlmICghKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIChQWEFfQ0FNRVJBX0RBVEFXSURUSF84IHwKIAkJCVBYQV9DQU1FUkFfREFUQVdJRFRIXzkgfCBQWEFfQ0FNRVJBX0RBVEFXSURUSF8xMCkpKSB7Ci0JCS8qIFBsYXRmb3JtIGhhc24ndCBzZXQgYXZhaWxhYmxlIGRhdGEgd2lkdGhzLiBUaGlzIGlzIGJhZC4KLQkJICogV2FybiBhbmQgdXNlIGEgZGVmYXVsdC4gKi8KKwkJLyoKKwkJICogUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgZGF0YSB3aWR0aHMuIFRoaXMgaXMgYmFkLgorCQkgKiBXYXJuIGFuZCB1c2UgYSBkZWZhdWx0LgorCQkgKi8KIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIldBUk5JTkchIFBsYXRmb3JtIGhhc24ndCBzZXQgYXZhaWxhYmxlICIKIAkJCSAiZGF0YSB3aWR0aHMsIHVzaW5nIGRlZmF1bHQgMTAgYml0XG4iKTsKIAkJcGNkZXYtPnBsYXRmb3JtX2ZsYWdzIHw9IFBYQV9DQU1FUkFfREFUQVdJRFRIXzEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYwppbmRleCAzNzNmMmEzLi43ZTQyOTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYwpAQCAtMTMsOSArMTMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKKyNpbmNsdWRlIDxtZWRpYS9yajU0bjFjYjBjLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19tZWRpYWJ1cy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAjZGVmaW5lIFJKNTROMV9ERVZfQ09ERQkJCTB4MDQwMAogI2RlZmluZSBSSjU0TjFfREVWX0NPREUyCQkweDA0MDEKQEAgLTM4LDYgKzQwLDcgQEAKICNkZWZpbmUgUko1NE4xX0hfT0JFTl9PRlMJCTB4MDQxMwogI2RlZmluZSBSSjU0TjFfVl9PQkVOX09GUwkJMHgwNDE0CiAjZGVmaW5lIFJKNTROMV9SRVNJWkVfQ09OVFJPTAkJMHgwNDE1CisjZGVmaW5lIFJKNTROMV9TVElMTF9DT05UUk9MCQkweDA0MTcKICNkZWZpbmUgUko1NE4xX0lOQ19VU0VfU0VMX0gJCTB4MDQyNQogI2RlZmluZSBSSjU0TjFfSU5DX1VTRV9TRUxfTAkJMHgwNDI2CiAjZGVmaW5lIFJKNTROMV9NSVJST1JfU1RJTExfTU9ERQkweDA0MjcKQEAgLTQ5LDEwICs1MiwyMSBAQAogI2RlZmluZSBSSjU0TjFfUkFfU0VMX1VMCQkweDA1MzAKICNkZWZpbmUgUko1NE4xX0JZVEVfU1dBUAkJMHgwNTMxCiAjZGVmaW5lIFJKNTROMV9PVVRfU0lHUE8JCTB4MDUzYgorI2RlZmluZSBSSjU0TjFfV0JfU0VMX1dFSUdIVF9JCQkweDA1NGUKKyNkZWZpbmUgUko1NE4xX0JJVDhfV0IJCQkweDA1NjkKKyNkZWZpbmUgUko1NE4xX0hDQVBTX1dCCQkJMHgwNTZhCisjZGVmaW5lIFJKNTROMV9WQ0FQU19XQgkJCTB4MDU2YgorI2RlZmluZSBSSjU0TjFfSENBUEVfV0IJCQkweDA1NmMKKyNkZWZpbmUgUko1NE4xX1ZDQVBFX1dCCQkJMHgwNTZkCisjZGVmaW5lIFJKNTROMV9FWFBPU1VSRV9DT05UUk9MCQkweDA1OGMKICNkZWZpbmUgUko1NE4xX0ZSQU1FX0xFTkdUSF9TX0gJCTB4MDU5NQogI2RlZmluZSBSSjU0TjFfRlJBTUVfTEVOR1RIX1NfTAkJMHgwNTk2CiAjZGVmaW5lIFJKNTROMV9GUkFNRV9MRU5HVEhfUF9ICQkweDA1OTcKICNkZWZpbmUgUko1NE4xX0ZSQU1FX0xFTkdUSF9QX0wJCTB4MDU5OAorI2RlZmluZSBSSjU0TjFfUEVBS19ICQkJMHgwNWI3CisjZGVmaW5lIFJKNTROMV9QRUFLXzUwCQkJMHgwNWI4CisjZGVmaW5lIFJKNTROMV9QRUFLXzYwCQkJMHgwNWI5CisjZGVmaW5lIFJKNTROMV9QRUFLX0RJRkYJCTB4MDViYQogI2RlZmluZSBSSjU0TjFfSU9DCQkJMHgwNWVmCiAjZGVmaW5lIFJKNTROMV9UR19CWVBBU1MJCTB4MDcwMAogI2RlZmluZSBSSjU0TjFfUExMX0wJCQkweDA3MDEKQEAgLTY4LDYgKzgyLDcgQEAKICNkZWZpbmUgUko1NE4xX09DTEtfU0VMX0VOCQkweDA3MTMKICNkZWZpbmUgUko1NE4xX0NMS19SU1QJCQkweDA3MTcKICNkZWZpbmUgUko1NE4xX1JFU0VUX1NUQU5EQlkJCTB4MDcxOAorI2RlZmluZSBSSjU0TjFfRldGTEcJCQkweDA3ZmUKIAogI2RlZmluZSBFX0VYQ0xLCQkJCSgxIDw8IDcpCiAjZGVmaW5lIFNPRlRfU1REQlkJCQkoMSA8PCA0KQpAQCAtNzgsMjkgKzkzLDUzIEBACiAjZGVmaW5lIFJFU0laRV9IT0xEX1NFTAkJCSgxIDw8IDIpCiAjZGVmaW5lIFJFU0laRV9HTwkJCSgxIDw8IDEpCiAKKy8qCisgKiBXaGVuIGNyb3BwaW5nLCB0aGUgY2FtZXJhIGF1dG9tYXRpY2FsbHkgY2VudGVycyB0aGUgY3JvcHBlZCByZWdpb24sIHRoZXJlCisgKiBkb2Vzbid0IHNlZW0gdG8gYmUgYSB3YXkgdG8gc3BlY2lmeSBhbiBleHBsaWNpdCBsb2NhdGlvbiBvZiB0aGUgcmVjdGFuZ2xlLgorICovCiAjZGVmaW5lIFJKNTROMV9DT0xVTU5fU0tJUAkJMAogI2RlZmluZSBSSjU0TjFfUk9XX1NLSVAJCQkwCiAjZGVmaW5lIFJKNTROMV9NQVhfV0lEVEgJCTE2MDAKICNkZWZpbmUgUko1NE4xX01BWF9IRUlHSFQJCTEyMDAKIAorI2RlZmluZSBQTExfTAkJCQkyCisjZGVmaW5lIFBMTF9OCQkJCTB4MzEKKwogLyogSTJDIGFkZHJlc3NlczogMHg1MCwgMHg1MSwgMHg2MCwgMHg2MSAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgcmo1NG4xX2NvbG91cl9mb3JtYXRzW10gPSB7Ci0JewotCQkubmFtZQkJPSAiWVVZViIsCi0JCS5kZXB0aAkJPSAxNiwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwKLQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJSR0I1NjUiLAotCQkuZGVwdGgJCT0gMTYsCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKLQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9CisvKiBSSjU0TjFDQjBDIGhhcyBvbmx5IG9uZSBmaXhlZCBjb2xvcnNwYWNlIHBlciBwaXhlbGNvZGUgKi8KK3N0cnVjdCByajU0bjFfZGF0YWZtdCB7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlCWNvZGU7CisJZW51bSB2NGwyX2NvbG9yc3BhY2UJCWNvbG9yc3BhY2U7Cit9OworCisvKiBGaW5kIGEgZGF0YSBmb3JtYXQgYnkgYSBwaXhlbCBjb2RlIGluIGFuIGFycmF5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9kYXRhZm10ICpyajU0bjFfZmluZF9kYXRhZm10KAorCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlLCBjb25zdCBzdHJ1Y3Qgcmo1NG4xX2RhdGFmbXQgKmZtdCwKKwlpbnQgbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlpZiAoZm10W2ldLmNvZGUgPT0gY29kZSkKKwkJCXJldHVybiBmbXQgKyBpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX2RhdGFmbXQgcmo1NG4xX2NvbG91cl9mbXRzW10gPSB7CisJe1Y0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisJe1Y0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisJe1Y0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorCXtWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7VjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorCXtWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0xFLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCisJe1Y0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfQkUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7VjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURMT19CRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorCXtWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMCwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogfTsKIAogc3RydWN0IHJqNTRuMV9jbG9ja19kaXYgewotCXU4IHJhdGlvX3RnOworCXU4IHJhdGlvX3RnOwkvKiBjYW4gYmUgMCBvciBhbiBvZGQgbnVtYmVyICovCiAJdTggcmF0aW9fdDsKIAl1OCByYXRpb19yOwogCXU4IHJhdGlvX29wOwpAQCAtMTA5LDEyICsxNDgsMTQgQEAKIAogc3RydWN0IHJqNTRuMSB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKKwlzdHJ1Y3Qgcmo1NG4xX2Nsb2NrX2RpdiBjbGtfZGl2OworCWNvbnN0IHN0cnVjdCByajU0bjFfZGF0YWZtdCAqZm10OwogCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsJLyogU2Vuc29yIHdpbmRvdyAqLworCXVuc2lnbmVkIGludCB0Z2Nsa19taHo7CisJYm9vbCBhdXRvX3diOwogCXVuc2lnbmVkIHNob3J0IHdpZHRoOwkvKiBPdXRwdXQgd2luZG93ICovCiAJdW5zaWduZWQgc2hvcnQgaGVpZ2h0OwogCXVuc2lnbmVkIHNob3J0IHJlc2l6ZTsJLyogU2Vuc29yICogMTAyNCAvIHJlc2l6ZSA9IE91dHB1dCAqLwotCXN0cnVjdCByajU0bjFfY2xvY2tfZGl2IGNsa19kaXY7Ci0JdTMyIGZvdXJjYzsKIAl1bnNpZ25lZCBzaG9ydCBzY2FsZTsKIAl1OCBiYW5rOwogfTsKQEAgLTE3MSw3ICsyMTIsNyBAQAogCXsweDcxNCwgMHhmZn0sCiAJezB4NzE1LCAweGZmfSwKIAl7MHg3MTYsIDB4MWZ9LAotCXsweDdGRSwgMHgwMn0sCisJezB4N0ZFLCAyfSwKIH07CiAKIGNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua184W10gPSB7CkBAIC0zNTksNyArNDAwLDcgQEAKIAl7MHg4QkIsIDB4MDB9LAogCXsweDhCQywgMHhGRn0sCiAJezB4OEJELCAweDAwfSwKLQl7MHg4RkUsIDB4MDJ9LAorCXsweDhGRSwgMn0sCiB9OwogCiBjb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfMTBbXSA9IHsKQEAgLTQ0MCwxMCArNDgxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmo1NG4xX2VudW1fZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBpbmRleCwKKwkJCSAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSAqY29kZSkKK3sKKwlpZiAoKHVuc2lnbmVkIGludClpbmRleCA+PSBBUlJBWV9TSVpFKHJqNTRuMV9jb2xvdXJfZm10cykpCisJCXJldHVybiAtRUlOVkFMOworCisJKmNvZGUgPSByajU0bjFfY29sb3VyX2ZtdHNbaW5kZXhdLmNvZGU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcmo1NG4xX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0JLyogVE9ETzogc3RhcnQgLyBzdG9wIHN0cmVhbWluZyAqLwotCXJldHVybiAwOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKworCS8qIFN3aXRjaCBiZXR3ZWVuIHByZXZpZXcgYW5kIHN0aWxsIHNob3QgbW9kZXMgKi8KKwlyZXR1cm4gcmVnX3NldChjbGllbnQsIFJKNTROMV9TVElMTF9DT05UUk9MLCAoIWVuYWJsZSkgPDwgNywgMHg4MCk7CiB9CiAKIHN0YXRpYyBpbnQgcmo1NG4xX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC01MDIsNiArNTU1LDQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCByajU0bjFfc2Vuc29yX3NjYWxlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqaW5fdywgdTMyICppbl9oLAorCQkJICAgICAgIHUzMiAqb3V0X3csIHUzMiAqb3V0X2gpOworCitzdGF0aWMgaW50IHJqNTRuMV9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHJqNTRuMSAqcmo1NG4xID0gdG9fcmo1NG4xKGNsaWVudCk7CisJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZhLT5jOworCXVuc2lnbmVkIGludCBkdW1teSwgb3V0cHV0X3csIG91dHB1dF9oLAorCQlpbnB1dF93ID0gcmVjdC0+d2lkdGgsIGlucHV0X2ggPSByZWN0LT5oZWlnaHQ7CisJaW50IHJldDsKKworCS8qIGFyYml0cmFyeSBtaW5pbXVtIHdpZHRoIGFuZCBoZWlnaHQsIGVkZ2VzIHVuaW1wb3J0YW50ICovCisJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZkdW1teSwgJmlucHV0X3csCisJCSAgICAgUko1NE4xX0NPTFVNTl9TS0lQLCA4LCBSSjU0TjFfTUFYX1dJRFRIKTsKKworCXNvY19jYW1lcmFfbGltaXRfc2lkZSgmZHVtbXksICZpbnB1dF9oLAorCQkgICAgIFJKNTROMV9ST1dfU0tJUCwgOCwgUko1NE4xX01BWF9IRUlHSFQpOworCisJb3V0cHV0X3cgPSAoaW5wdXRfdyAqIDEwMjQgKyByajU0bjEtPnJlc2l6ZSAvIDIpIC8gcmo1NG4xLT5yZXNpemU7CisJb3V0cHV0X2ggPSAoaW5wdXRfaCAqIDEwMjQgKyByajU0bjEtPnJlc2l6ZSAvIDIpIC8gcmo1NG4xLT5yZXNpemU7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNjYWxpbmcgZm9yICV1eCV1IDogJXUgPSAldXgldVxuIiwKKwkJaW5wdXRfdywgaW5wdXRfaCwgcmo1NG4xLT5yZXNpemUsIG91dHB1dF93LCBvdXRwdXRfaCk7CisKKwlyZXQgPSByajU0bjFfc2Vuc29yX3NjYWxlKHNkLCAmaW5wdXRfdywgJmlucHV0X2gsICZvdXRwdXRfdywgJm91dHB1dF9oKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJqNTRuMS0+d2lkdGgJCT0gb3V0cHV0X3c7CisJcmo1NG4xLT5oZWlnaHQJCT0gb3V0cHV0X2g7CisJcmo1NG4xLT5yZXNpemUJCT0gcmV0OworCXJqNTRuMS0+cmVjdC53aWR0aAk9IGlucHV0X3c7CisJcmo1NG4xLT5yZWN0LmhlaWdodAk9IGlucHV0X2g7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByajU0bjFfZ19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwpAQCAtNTI3LDE2ICs2MTgsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByajU0bjFfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCByajU0bjFfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKIAlzdHJ1Y3Qgcmo1NG4xICpyajU0bjEgPSB0b19yajU0bjEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAotCXBpeC0+cGl4ZWxmb3JtYXQJPSByajU0bjEtPmZvdXJjYzsKLQlwaXgtPmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORTsKLQlwaXgtPndpZHRoCQk9IHJqNTRuMS0+d2lkdGg7Ci0JcGl4LT5oZWlnaHQJCT0gcmo1NG4xLT5oZWlnaHQ7CisJbWYtPmNvZGUJPSByajU0bjEtPmZtdC0+Y29kZTsKKwltZi0+Y29sb3JzcGFjZQk9IHJqNTRuMS0+Zm10LT5jb2xvcnNwYWNlOworCW1mLT5maWVsZAk9IFY0TDJfRklFTERfTk9ORTsKKwltZi0+d2lkdGgJPSByajU0bjEtPndpZHRoOworCW1mLT5oZWlnaHQJPSByajU0bjEtPmhlaWdodDsKIAogCXJldHVybiAwOwogfQpAQCAtNTUwLDExICs2NDIsNDQgQEAKIAkJCSAgICAgICB1MzIgKm91dF93LCB1MzIgKm91dF9oKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgcmo1NG4xICpyajU0bjEgPSB0b19yajU0bjEoY2xpZW50KTsKIAl1bnNpZ25lZCBpbnQgc2tpcCwgcmVzaXplLCBpbnB1dF93ID0gKmluX3csIGlucHV0X2ggPSAqaW5faCwKIAkJb3V0cHV0X3cgPSAqb3V0X3csIG91dHB1dF9oID0gKm91dF9oOwotCXUxNiBpbmNfc2VsOworCXUxNiBpbmNfc2VsLCB3Yl9iaXQ4LCB3Yl9sZWZ0LCB3Yl9yaWdodCwgd2JfdG9wLCB3Yl9ib3R0b207CisJdW5zaWduZWQgaW50IHBlYWssIHBlYWtfNTAsIHBlYWtfNjA7CiAJaW50IHJldDsKIAorCS8qCisJICogV2UgaGF2ZSBhIHByb2JsZW0gd2l0aCBjcm9wcywgd2hlcmUgdGhlIHdpbmRvdyBpcyBsYXJnZXIgdGhhbiA1MTJ4Mzg0CisJICogYW5kIG91dHB1dCB3aW5kb3cgaXMgbGFyZ2VyIHRoYW4gYSBoYWxmIG9mIHRoZSBpbnB1dCBvbmUuIEluIHRoaXMKKwkgKiBjYXNlIHdlIGhhdmUgdG8gZWl0aGVyIHJlZHVjZSB0aGUgaW5wdXQgd2luZG93IHRvIGVxdWFsIG9yIGJlbG93CisJICogNTEyeDM4NCBvciB0aGUgb3V0cHV0IHdpbmRvdyB0byBlcXVhbCBvciBiZWxvdyAxLzIgb2YgdGhlIGlucHV0LgorCSAqLworCWlmIChvdXRwdXRfdyA+IG1heCg1MTJVLCBpbnB1dF93IC8gMikpIHsKKwkJaWYgKDIgKiBvdXRwdXRfdyA+IFJKNTROMV9NQVhfV0lEVEgpIHsKKwkJCWlucHV0X3cgPSBSSjU0TjFfTUFYX1dJRFRIOworCQkJb3V0cHV0X3cgPSBSSjU0TjFfTUFYX1dJRFRIIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X3cgPSBvdXRwdXRfdyAqIDI7CisJCX0KKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkFkanVzdGVkIG91dHB1dCB3aWR0aDogaW4gJXUsIG91dCAldVxuIiwKKwkJCWlucHV0X3csIG91dHB1dF93KTsKKwl9CisKKwlpZiAob3V0cHV0X2ggPiBtYXgoMzg0VSwgaW5wdXRfaCAvIDIpKSB7CisJCWlmICgyICogb3V0cHV0X2ggPiBSSjU0TjFfTUFYX0hFSUdIVCkgeworCQkJaW5wdXRfaCA9IFJKNTROMV9NQVhfSEVJR0hUOworCQkJb3V0cHV0X2ggPSBSSjU0TjFfTUFYX0hFSUdIVCAvIDI7CisJCX0gZWxzZSB7CisJCQlpbnB1dF9oID0gb3V0cHV0X2ggKiAyOworCQl9CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJBZGp1c3RlZCBvdXRwdXQgaGVpZ2h0OiBpbiAldSwgb3V0ICV1XG4iLAorCQkJaW5wdXRfaCwgb3V0cHV0X2gpOworCX0KKworCS8qIElkZWE6IHVzZSB0aGUgcmVhZCBtb2RlIGZvciBzbmFwc2hvdHMsIGhhbmRsZSBzZXBhcmF0ZSBnZW9tZXRyaWVzICovCiAJcmV0ID0gcmo1NG4xX3NldF9yZWN0KGNsaWVudCwgUko1NE4xX1hfT1VUUFVUX1NJWkVfU19MLAogCQkJICAgICAgUko1NE4xX1lfT1VUUFVUX1NJWkVfU19MLAogCQkJICAgICAgUko1NE4xX1hZX09VVFBVVF9TSVpFX1NfSCwgb3V0cHV0X3csIG91dHB1dF9oKTsKQEAgLTU2NiwxNyArNjkxLDI3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAob3V0cHV0X3cgPiBpbnB1dF93IHx8IG91dHB1dF9oID4gaW5wdXRfaCkgeworCWlmIChvdXRwdXRfdyA+IGlucHV0X3cgJiYgb3V0cHV0X2ggPiBpbnB1dF9oKSB7CiAJCWlucHV0X3cgPSBvdXRwdXRfdzsKIAkJaW5wdXRfaCA9IG91dHB1dF9oOwogCiAJCXJlc2l6ZSA9IDEwMjQ7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgaW50IHJlc2l6ZV94LCByZXNpemVfeTsKLQkJcmVzaXplX3ggPSBpbnB1dF93ICogMTAyNCAvIG91dHB1dF93OwotCQlyZXNpemVfeSA9IGlucHV0X2ggKiAxMDI0IC8gb3V0cHV0X2g7CisJCXJlc2l6ZV94ID0gKGlucHV0X3cgKiAxMDI0ICsgb3V0cHV0X3cgLyAyKSAvIG91dHB1dF93OworCQlyZXNpemVfeSA9IChpbnB1dF9oICogMTAyNCArIG91dHB1dF9oIC8gMikgLyBvdXRwdXRfaDsKIAotCQlyZXNpemUgPSBtaW4ocmVzaXplX3gsIHJlc2l6ZV95KTsKKwkJLyogV2Ugd2FudCBtYXgocmVzaXplX3gsIHJlc2l6ZV95KSwgY2hlY2sgaWYgaXQgc3RpbGwgZml0cyAqLworCQlpZiAocmVzaXplX3ggPiByZXNpemVfeSAmJgorCQkgICAgKG91dHB1dF9oICogcmVzaXplX3ggKyA1MTIpIC8gMTAyNCA+IFJKNTROMV9NQVhfSEVJR0hUKQorCQkJcmVzaXplID0gKFJKNTROMV9NQVhfSEVJR0hUICogMTAyNCArIG91dHB1dF9oIC8gMikgLworCQkJCW91dHB1dF9oOworCQllbHNlIGlmIChyZXNpemVfeSA+IHJlc2l6ZV94ICYmCisJCQkgKG91dHB1dF93ICogcmVzaXplX3kgKyA1MTIpIC8gMTAyNCA+IFJKNTROMV9NQVhfV0lEVEgpCisJCQlyZXNpemUgPSAoUko1NE4xX01BWF9XSURUSCAqIDEwMjQgKyBvdXRwdXRfdyAvIDIpIC8KKwkJCQlvdXRwdXRfdzsKKwkJZWxzZQorCQkJcmVzaXplID0gbWF4KHJlc2l6ZV94LCByZXNpemVfeSk7CiAKIAkJLyogUHJvaGliaXRlZCB2YWx1ZSByYW5nZXMgKi8KIAkJc3dpdGNoIChyZXNpemUpIHsKQEAgLTU4OSwxMiArNzI0LDkgQEAKIAkJY2FzZSA4MTYwIC4uLiA4MTkxOgogCQkJcmVzaXplID0gODE1OTsKIAkJCWJyZWFrOwotCQljYXNlIDE2MzIwIC4uLiAxNjM4MzoKKwkJY2FzZSAxNjMyMCAuLi4gMTYzODQ6CiAJCQlyZXNpemUgPSAxNjMxOTsKIAkJfQotCi0JCWlucHV0X3cgPSBvdXRwdXRfdyAqIHJlc2l6ZSAvIDEwMjQ7Ci0JCWlucHV0X2ggPSBvdXRwdXRfaCAqIHJlc2l6ZSAvIDEwMjQ7CiAJfQogCiAJLyogU2V0IHNjYWxpbmcgKi8KQEAgLTYwNyw5ICs3MzksMTggQEAKIAogCS8qCiAJICogQ29uZmlndXJlIGEgc2tpcHBpbmcgYml0bWFzay4gVGhlIHNlbnNvciB3aWxsIHNlbGVjdCBhIHNraXBwaW5nIHZhbHVlCi0JICogYW1vbmcgc2V0IGJpdHMgYXV0b21hdGljYWxseS4KKwkgKiBhbW9uZyBzZXQgYml0cyBhdXRvbWF0aWNhbGx5LiBUaGlzIGlzIHZlcnkgdW5jbGVhciBpbiB0aGUgZGF0YXNoZWV0CisJICogdG9vLiBJIHdhcyB0b2xkLCBpbiB0aGlzIHJlZ2lzdGVyIG9uZSBlbmFibGVzIGFsbCBza2lwcGluZyB2YWx1ZXMsCisJICogdGhhdCBhcmUgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgcmVzaXplLCBhbmQgdGhlIGNhbWVyYSBzZWxlY3RzCisJICogYXV0b21hdGljYWxseSwgd2hpY2ggb25lcyB0byB1c2UuIEJ1dCBpdCBpcyB1bmNsZWFyIGhvdyB0byBpZGVudGlmeSwKKwkgKiB3aGljaCBjcm9wcGluZyB2YWx1ZXMgYXJlIG5lZWRlZC4gU2Vjb25kbHksIHdoeSBkb24ndCB3ZSBqdXN0IHNldCBhbGwKKwkgKiBiaXRzIGFuZCBsZXQgdGhlIGNhbWVyYSBjaG9vc2U/IFdvdWxkIGl0IGluY3JlYXNlIHByb2Nlc3NpbmcgdGltZSBhbmQKKwkgKiByZWR1Y2UgdGhlIGZyYW1lcmF0ZT8gVXNpbmcgMHhmZmZjIGZvciBJTkNfVVNFX1NFTCBkb2Vzbid0IHNlZW0gdG8KKwkgKiBpbXByb3ZlIHRoZSBpbWFnZSBxdWFsaXR5IG9yIHN0YWJpbGl0eSBmb3IgbGFyZ2VyIGZyYW1lcyAoc2VlIGNvbW1lbnQKKwkgKiBhYm92ZSksIGJ1dCBJIGRpZG4ndCBjaGVjayB0aGUgZnJhbWVyYXRlLgogCSAqLwogCXNraXAgPSBtaW4ocmVzaXplIC8gMTAyNCwgKHVuc2lnbmVkKTE1KTsKKwogCWluY19zZWwgPSAxIDw8IHNraXA7CiAKIAlpZiAoaW5jX3NlbCA8PSAyKQpAQCAtNjIxLDYgKzc2Miw0MyBAQAogCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfSU5DX1VTRV9TRUxfSCwgaW5jX3NlbCA+PiA4KTsKIAorCWlmICghcmo1NG4xLT5hdXRvX3diKSB7CisJCS8qIEF1dG8gd2hpdGUgYmFsYW5jZSB3aW5kb3cgKi8KKwkJd2JfbGVmdAkgID0gb3V0cHV0X3cgLyAxNjsKKwkJd2JfcmlnaHQgID0gKDMgKiBvdXRwdXRfdyAvIDQgLSAzKSAvIDQ7CisJCXdiX3RvcAkgID0gb3V0cHV0X2ggLyAxNjsKKwkJd2JfYm90dG9tID0gKDMgKiBvdXRwdXRfaCAvIDQgLSAzKSAvIDQ7CisJCXdiX2JpdDgJICA9ICgod2JfbGVmdCA+PiAyKSAmIDB4NDApIHwgKCh3Yl90b3AgPj4gNCkgJiAweDEwKSB8CisJCQkoKHdiX3JpZ2h0ID4+IDYpICYgNCkgfCAoKHdiX2JvdHRvbSA+PiA4KSAmIDEpOworCisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX0JJVDhfV0IsIHdiX2JpdDgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9IQ0FQU19XQiwgd2JfbGVmdCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1ZDQVBTX1dCLCB3Yl90b3ApOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9IQ0FQRV9XQiwgd2JfcmlnaHQpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9WQ0FQRV9XQiwgd2JfYm90dG9tKTsKKwl9CisKKwkvKiBBbnRpZmxpY2tlciAqLworCXBlYWsgPSAxMiAqIFJKNTROMV9NQVhfV0lEVEggKiAoMSA8PCAxNCkgKiByZXNpemUgLyByajU0bjEtPnRnY2xrX21oeiAvCisJCTEwMDAwOworCXBlYWtfNTAgPSBwZWFrIC8gNjsKKwlwZWFrXzYwID0gcGVhayAvIDU7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1BFQUtfSCwKKwkJCQkoKHBlYWtfNTAgPj4gNCkgJiAweGYwKSB8IChwZWFrXzYwID4+IDgpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1BFQUtfNTAsIHBlYWtfNTApOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfUEVBS182MCwgcGVha182MCk7CisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9QRUFLX0RJRkYsIHBlYWsgLyAxNTApOworCiAJLyogU3RhcnQgcmVzaXppbmcgKi8KIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1JFU0laRV9DT05UUk9MLApAQCAtNjI5LDggKzgwNyw2IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgInJlc2l6ZSAldSwgc2tpcCAldVxuIiwgcmVzaXplLCBza2lwKTsKLQogCS8qIENvbnN0YW50IHRha2VuIGZyb20gbWFudWZhY3R1cmVyJ3MgZXhhbXBsZSAqLwogCW1zbGVlcCgyMzApOwogCkBAIC02MzgsMTEgKzgxNCwxNCBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JKmluX3cgPSBpbnB1dF93OwotCSppbl9oID0gaW5wdXRfaDsKKwkqaW5fdyA9IChvdXRwdXRfdyAqIHJlc2l6ZSArIDUxMikgLyAxMDI0OworCSppbl9oID0gKG91dHB1dF9oICogcmVzaXplICsgNTEyKSAvIDEwMjQ7CiAJKm91dF93ID0gb3V0cHV0X3c7CiAJKm91dF9oID0gb3V0cHV0X2g7CiAKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNjYWxlZCBmb3IgJXV4JXUgOiAldSA9ICV1eCV1LCBza2lwICV1XG4iLAorCQkqaW5fdywgKmluX2gsIHJlc2l6ZSwgb3V0cHV0X3csIG91dHB1dF9oLCBza2lwKTsKKwogCXJldHVybiByZXNpemU7CiB9CiAKQEAgLTY1MywxNCArODMyLDE0IEBACiAKIAkvKiBFbmFibGUgZXh0ZXJuYWwgY2xvY2sgKi8KIAlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfUkVTRVRfU1RBTkRCWSwgRV9FWENMSyB8IFNPRlRfU1REQlkpOwotCS8qIExlYXZlIHN0YW5kLWJ5ICovCisJLyogTGVhdmUgc3RhbmQtYnkuIE5vdGU6IHVzZSB0aGlzIHdoZW4gaW1wbGVtZW50aW5nIHN1c3BlbmQgLyByZXN1bWUgKi8KIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1JFU0VUX1NUQU5EQlksIEVfRVhDTEspOwogCiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9QTExfTCwgMik7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9QTExfTCwgUExMX0wpOwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfUExMX04sIDB4MzEpOworCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfUExMX04sIFBMTF9OKTsKIAogCS8qIFRHQ0xLIGRpdmlkZXJzICovCiAJaWYgKCFyZXQpCkBAIC03MTksNiArODk4LDcgQEAKIAkJCSJSZXNldHRpbmcgUko1NE4xQ0IwQyBjbG9jayBmYWlsZWQ6ICVkIVxuIiwgcmV0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCiAJLyogU3RhcnQgdGhlIFBMTCAqLwogCXJldCA9IHJlZ19zZXQoY2xpZW50LCBSSjU0TjFfT0NMS19EU1AsIDEsIDEpOwogCkBAIC03MzEsNiArOTExLDcgQEAKIAogc3RhdGljIGludCByajU0bjFfcmVnX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKKwlzdHJ1Y3Qgcmo1NG4xICpyajU0bjEgPSB0b19yajU0bjEoY2xpZW50KTsKIAlpbnQgcmV0ID0gcmo1NG4xX3NldF9jbG9jayhjbGllbnQpOwogCiAJaWYgKCFyZXQpCkBAIC03NTMsMTQgKzkzNCwyNiBAQAogCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfWV9HQUlOLCAweDg0KTsKIAotCS8qIE1pcnJvciB0aGUgaW1hZ2UgYmFjazogZGVmYXVsdCBpcyB1cHNpZGUgZG93biBhbmQgbGVmdC10by1yaWdodC4uLiAqLworCS8qCisJICogTWlycm9yIHRoZSBpbWFnZSBiYWNrOiBkZWZhdWx0IGlzIHVwc2lkZSBkb3duIGFuZCBsZWZ0LXRvLXJpZ2h0Li4uCisJICogU2V0IG1hbnVhbCBwcmV2aWV3IC8gc3RpbGwgc2hvdCBzd2l0Y2hpbmcKKwkgKi8KIAlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3NldChjbGllbnQsIFJKNTROMV9NSVJST1JfU1RJTExfTU9ERSwgMywgMyk7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9NSVJST1JfU1RJTExfTU9ERSwgMHgyNyk7CiAKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlX211bHRpcGxlKGNsaWVudCwgYmFua180LCBBUlJBWV9TSVpFKGJhbmtfNCkpOworCisJLyogQXV0byBleHBvc3VyZSBhcmVhICovCiAJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9FWFBPU1VSRV9DT05UUk9MLCAweDgwKTsKKwkvKiBDaGVjayBjdXJyZW50IGF1dG8gV0IgY29uZmlnICovCisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ19yZWFkKGNsaWVudCwgUko1NE4xX1dCX1NFTF9XRUlHSFRfSSk7CisJaWYgKHJldCA+PSAwKSB7CisJCXJqNTRuMS0+YXV0b193YiA9IHJldCAmIDB4ODA7CiAJCXJldCA9IHJlZ193cml0ZV9tdWx0aXBsZShjbGllbnQsIGJhbmtfNSwgQVJSQVlfU0laRShiYW5rXzUpKTsKKwl9CiAJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZV9tdWx0aXBsZShjbGllbnQsIGJhbmtfOCwgQVJSQVlfU0laRShiYW5rXzgpKTsKIApAQCAtNzc3LDggKzk3MCw5IEBACiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9SRVNFVF9TVEFOREJZLAogCQkJCUVfRVhDTEsgfCBEU1BfUlNUWCB8IFRHX1JTVFggfCBTRU5fUlNUWCk7CiAKKwkvKiBTdGFydCByZWdpc3RlciB1cGRhdGU/IFNhbWUgcmVnaXN0ZXIgYXMgMHg/RkUgaW4gbWFueSBiYW5rXyogc2V0cyAqLwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCAweDdmZSwgMik7CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9GV0ZMRywgMik7CiAKIAkvKiBDb25zdGFudCB0YWtlbiBmcm9tIG1hbnVmYWN0dXJlcidzIGV4YW1wbGUgKi8KIAltc2xlZXAoNzAwKTsKQEAgLTc4NiwyNyArOTgwLDQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogRklYTUU6IHN0cmVhbWluZyBvdXRwdXQgb25seSB1cCB0byA4MDB4NjAwIGlzIGZ1bmN0aW9uYWwgKi8KLXN0YXRpYyBpbnQgcmo1NG4xX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCByajU0bjFfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHJqNTRuMSAqcmo1NG4xID0gdG9fcmo1NG4xKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IHJqNTRuMV9kYXRhZm10ICpmbXQ7CisJaW50IGFsaWduID0gbWYtPmNvZGUgPT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAgfHwKKwkJbWYtPmNvZGUgPT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9CRSB8fAorCQltZi0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0JFIHx8CisJCW1mLT5jb2RlID09IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfTEUgfHwKKwkJbWYtPmNvZGUgPT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURMT19MRTsKIAotCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogY29kZSA9ICVkLCB3aWR0aCA9ICV1LCBoZWlnaHQgPSAldVxuIiwKKwkJX19mdW5jX18sIG1mLT5jb2RlLCBtZi0+d2lkdGgsIG1mLT5oZWlnaHQpOwogCi0JaWYgKHBpeC0+d2lkdGggPiA4MDApCi0JCXBpeC0+d2lkdGggPSA4MDA7Ci0JaWYgKHBpeC0+aGVpZ2h0ID4gNjAwKQotCQlwaXgtPmhlaWdodCA9IDYwMDsKKwlmbXQgPSByajU0bjFfZmluZF9kYXRhZm10KG1mLT5jb2RlLCByajU0bjFfY29sb3VyX2ZtdHMsCisJCQkJICBBUlJBWV9TSVpFKHJqNTRuMV9jb2xvdXJfZm10cykpOworCWlmICghZm10KSB7CisJCWZtdCA9IHJqNTRuMS0+Zm10OworCQltZi0+Y29kZSA9IGZtdC0+Y29kZTsKKwl9CisKKwltZi0+ZmllbGQJPSBWNEwyX0ZJRUxEX05PTkU7CisJbWYtPmNvbG9yc3BhY2UJPSBmbXQtPmNvbG9yc3BhY2U7CisKKwl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJm1mLT53aWR0aCwgMTEyLCBSSjU0TjFfTUFYX1dJRFRILCBhbGlnbiwKKwkJCSAgICAgICZtZi0+aGVpZ2h0LCA4NCwgUko1NE4xX01BWF9IRUlHSFQsIGFsaWduLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJqNTRuMV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IHJqNTRuMV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCByajU0bjEgKnJqNTRuMSA9IHRvX3JqNTRuMShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCXVuc2lnbmVkIGludCBvdXRwdXRfdywgb3V0cHV0X2gsCisJY29uc3Qgc3RydWN0IHJqNTRuMV9kYXRhZm10ICpmbXQ7CisJdW5zaWduZWQgaW50IG91dHB1dF93LCBvdXRwdXRfaCwgbWF4X3csIG1heF9oLAogCQlpbnB1dF93ID0gcmo1NG4xLT5yZWN0LndpZHRoLCBpbnB1dF9oID0gcmo1NG4xLT5yZWN0LmhlaWdodDsKIAlpbnQgcmV0OwogCkBAIC04MTQsMTQgKzEwMjUsMTMgQEAKIAkgKiBUaGUgaG9zdCBkcml2ZXIgY2FuIGNhbGwgdXMgd2l0aG91dCAudHJ5X2ZtdCgpLCBzbywgd2UgaGF2ZSB0byB0YWtlCiAJICogY2FyZSBvdXJzZWxldmVzCiAJICovCi0JcmV0ID0gcmo1NG4xX3RyeV9mbXQoc2QsIGYpOworCXJqNTRuMV90cnlfZm10KHNkLCBtZik7CiAKIAkvKgogCSAqIFZlcmlmeSBpZiB0aGUgc2Vuc29yIGhhcyBqdXN0IGJlZW4gcG93ZXJlZCBvbi4gVE9ETzogcmVwbGFjZSB0aGlzCiAJICogd2l0aCBwcm9wZXIgUE0sIHdoZW4gYSBzdWl0YWJsZSBBUEkgaXMgYXZhaWxhYmxlLgogCSAqLwotCWlmICghcmV0KQotCQlyZXQgPSByZWdfcmVhZChjbGllbnQsIFJKNTROMV9SRVNFVF9TVEFOREJZKTsKKwlyZXQgPSByZWdfcmVhZChjbGllbnQsIFJKNTROMV9SRVNFVF9TVEFOREJZKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtODMxLDUwICsxMDQxLDEwNSBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBjb2RlID0gJWQsIHdpZHRoID0gJXUsIGhlaWdodCA9ICV1XG4iLAorCQlfX2Z1bmNfXywgbWYtPmNvZGUsIG1mLT53aWR0aCwgbWYtPmhlaWdodCk7CisKIAkvKiBSQV9TRUxfVUwgaXMgb25seSByZWxldmFudCBmb3IgcmF3IG1vZGVzLCBpZ25vcmVkIG90aGVyd2lzZS4gKi8KLQlzd2l0Y2ggKHBpeC0+cGl4ZWxmb3JtYXQpIHsKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCXN3aXRjaCAobWYtPmNvZGUpIHsKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFOgogCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfT1VUX1NFTCwgMCk7CiAJCWlmICghcmV0KQogCQkJcmV0ID0gcmVnX3NldChjbGllbnQsIFJKNTROMV9CWVRFX1NXQVAsIDgsIDgpOwogCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRToKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX09VVF9TRUwsIDApOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ19zZXQoY2xpZW50LCBSSjU0TjFfQllURV9TV0FQLCAwLCA4KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEU6CiAJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9PVVRfU0VMLCAweDExKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXQgPSByZWdfc2V0KGNsaWVudCwgUko1NE4xX0JZVEVfU1dBUCwgOCwgOCk7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0JFOgorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfT1VUX1NFTCwgMHgxMSk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3NldChjbGllbnQsIFJKNTROMV9CWVRFX1NXQVAsIDAsIDgpOworCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFETE9fTEU6CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9PVVRfU0VMLCA0KTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfc2V0KGNsaWVudCwgUko1NE4xX0JZVEVfU1dBUCwgOCwgOCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1JBX1NFTF9VTCwgMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRToKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX09VVF9TRUwsIDQpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ19zZXQoY2xpZW50LCBSSjU0TjFfQllURV9TV0FQLCA4LCA4KTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfUkFfU0VMX1VMLCA4KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0JFOgorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfT1VUX1NFTCwgNCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3NldChjbGllbnQsIFJKNTROMV9CWVRFX1NXQVAsIDAsIDgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9SQV9TRUxfVUwsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfQkU6CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9PVVRfU0VMLCA0KTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfc2V0KGNsaWVudCwgUko1NE4xX0JZVEVfU1dBUCwgMCwgOCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1JBX1NFTF9VTCwgOCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTA6CisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJKNTROMV9PVVRfU0VMLCA1KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKKwkvKiBTcGVjaWFsIGNhc2U6IGEgcmF3IG1vZGUgd2l0aCAxMCBiaXRzIG9mIGRhdGEgcGVyIGNsb2NrIHRpY2sgKi8KKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3NldChjbGllbnQsIFJKNTROMV9PQ0xLX1NFTF9FTiwKKwkJCSAgICAgIChtZi0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMCkgPDwgMSwgMik7CisKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIFN1cHBvcnRlZCBzY2FsZXMgMToxIC0gMToxNiAqLwotCWlmIChwaXgtPndpZHRoIDwgaW5wdXRfdyAvIDE2KQotCQlwaXgtPndpZHRoID0gaW5wdXRfdyAvIDE2OwotCWlmIChwaXgtPmhlaWdodCA8IGlucHV0X2ggLyAxNikKLQkJcGl4LT5oZWlnaHQgPSBpbnB1dF9oIC8gMTY7CisJLyogU3VwcG9ydGVkIHNjYWxlcyAxOjEgPj0gc2NhbGUgPiAxOjE2ICovCisJbWF4X3cgPSBtZi0+d2lkdGggKiAoMTYgKiAxMDI0IC0gMSkgLyAxMDI0OworCWlmIChpbnB1dF93ID4gbWF4X3cpCisJCWlucHV0X3cgPSBtYXhfdzsKKwltYXhfaCA9IG1mLT5oZWlnaHQgKiAoMTYgKiAxMDI0IC0gMSkgLyAxMDI0OworCWlmIChpbnB1dF9oID4gbWF4X2gpCisJCWlucHV0X2ggPSBtYXhfaDsKIAotCW91dHB1dF93ID0gcGl4LT53aWR0aDsKLQlvdXRwdXRfaCA9IHBpeC0+aGVpZ2h0OworCW91dHB1dF93ID0gbWYtPndpZHRoOworCW91dHB1dF9oID0gbWYtPmhlaWdodDsKIAogCXJldCA9IHJqNTRuMV9zZW5zb3Jfc2NhbGUoc2QsICZpbnB1dF93LCAmaW5wdXRfaCwgJm91dHB1dF93LCAmb3V0cHV0X2gpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0Jcmo1NG4xLT5mb3VyY2MJCT0gcGl4LT5waXhlbGZvcm1hdDsKKwlmbXQgPSByajU0bjFfZmluZF9kYXRhZm10KG1mLT5jb2RlLCByajU0bjFfY29sb3VyX2ZtdHMsCisJCQkJICBBUlJBWV9TSVpFKHJqNTRuMV9jb2xvdXJfZm10cykpOworCisJcmo1NG4xLT5mbXQJCT0gZm10OwogCXJqNTRuMS0+cmVzaXplCQk9IHJldDsKIAlyajU0bjEtPnJlY3Qud2lkdGgJPSBpbnB1dF93OwogCXJqNTRuMS0+cmVjdC5oZWlnaHQJPSBpbnB1dF9oOwogCXJqNTRuMS0+d2lkdGgJCT0gb3V0cHV0X3c7CiAJcmo1NG4xLT5oZWlnaHQJCT0gb3V0cHV0X2g7CiAKLQlwaXgtPndpZHRoCQk9IG91dHB1dF93OwotCXBpeC0+aGVpZ2h0CQk9IG91dHB1dF9oOwotCXBpeC0+ZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FOworCW1mLT53aWR0aAkJPSBvdXRwdXRfdzsKKwltZi0+aGVpZ2h0CQk9IG91dHB1dF9oOworCW1mLT5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkU7CisJbWYtPmNvbG9yc3BhY2UJCT0gZm10LT5jb2xvcnNwYWNlOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByajU0bjFfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCkBAIC05NjMsNiArMTIyOCwxNCBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDY2LAogCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAorCX0sIHsKKwkJLmlkCQk9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkF1dG8gd2hpdGUgYmFsYW5jZSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDEsCiAJfSwKIH07CiAKQEAgLTk3Niw2ICsxMjQ5LDcgQEAKIHN0YXRpYyBpbnQgcmo1NG4xX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzZC0+cHJpdjsKKwlzdHJ1Y3Qgcmo1NG4xICpyajU0bjEgPSB0b19yajU0bjEoY2xpZW50KTsKIAlpbnQgZGF0YTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTk5OCw2ICsxMjcyLDkgQEAKIAogCQljdHJsLT52YWx1ZSA9IGRhdGEgLyAyOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSByajU0bjEtPmF1dG9fd2I7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAwNyw2ICsxMjg0LDcgQEAKIHsKIAlpbnQgZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHJqNTRuMSAqcmo1NG4xID0gdG9fcmo1NG4xKGNsaWVudCk7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKIAogCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKCZyajU0bjFfb3BzLCBjdHJsLT5pZCk7CkBAIC0xMDM3LDYgKzEzMTUsMTMgQEAKIAkJZWxzZSBpZiAocmVnX3dyaXRlKGNsaWVudCwgUko1NE4xX1lfR0FJTiwgY3RybC0+dmFsdWUgKiAyKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CisJCS8qIEF1dG8gV0IgYXJlYSAtIHdob2xlIGltYWdlICovCisJCWlmIChyZWdfc2V0KGNsaWVudCwgUko1NE4xX1dCX1NFTF9XRUlHSFRfSSwgY3RybC0+dmFsdWUgPDwgNywKKwkJCSAgICAweDgwKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJcmo1NG4xLT5hdXRvX3diID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTA1NCwxMCArMTMzOSwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyByajU0bjFfc3ViZGV2X3ZpZGVvX29wcyA9IHsKIAkuc19zdHJlYW0JPSByajU0bjFfc19zdHJlYW0sCi0JLnNfZm10CQk9IHJqNTRuMV9zX2ZtdCwKLQkuZ19mbXQJCT0gcmo1NG4xX2dfZm10LAotCS50cnlfZm10CT0gcmo1NG4xX3RyeV9mbXQsCisJLnNfbWJ1c19mbXQJPSByajU0bjFfc19mbXQsCisJLmdfbWJ1c19mbXQJPSByajU0bjFfZ19mbXQsCisJLnRyeV9tYnVzX2ZtdAk9IHJqNTRuMV90cnlfZm10LAorCS5lbnVtX21idXNfZm10CT0gcmo1NG4xX2VudW1fZm10LAogCS5nX2Nyb3AJCT0gcmo1NG4xX2dfY3JvcCwKKwkuc19jcm9wCQk9IHJqNTRuMV9zX2Nyb3AsCiAJLmNyb3BjYXAJPSByajU0bjFfY3JvcGNhcCwKIH07CiAKQEAgLTEwNjYsMjEgKzEzNTMsMTMgQEAKIAkudmlkZW8JPSAmcmo1NG4xX3N1YmRldl92aWRlb19vcHMsCiB9OwogCi1zdGF0aWMgaW50IHJqNTRuMV9waW5fY29uZmlnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JLyoKLQkgKiBFeHBlcmltZW50YWxseSBmb3VuZCBvdXQgSU9DVFJMIHdpcmVkIHRvIDAuIFRPRE86IGFkZCB0byBwbGF0Zm9ybQotCSAqIGRhdGE6IDAgb3IgMSA8PCA3LgotCSAqLwotCXJldHVybiByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfSU9DLCAwKTsKLX0KLQogLyoKICAqIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0CiAgKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lCiAgKi8KIHN0YXRpYyBpbnQgcmo1NG4xX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKKwkJCSAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICBzdHJ1Y3Qgcmo1NG4xX3BkYXRhICpwcml2KQogewogCWludCBkYXRhMSwgZGF0YTI7CiAJaW50IHJldDsKQEAgLTExMDEsNyArMTM4MCw4IEBACiAJCWdvdG8gZWkyYzsKIAl9CiAKLQlyZXQgPSByajU0bjFfcGluX2NvbmZpZyhjbGllbnQpOworCS8qIENvbmZpZ3VyZSBJT0NUTCBwb2xhcml0eSBmcm9tIHRoZSBwbGF0Zm9ybSBkYXRhOiAwIG9yIDEgPDwgNy4gKi8KKwlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSSjU0TjFfSU9DLCBwcml2LT5pb2N0bF9oaWdoIDw8IDcpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVpMmM7CiAKQEAgLTExMTksNiArMTM5OSw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsOworCXN0cnVjdCByajU0bjFfcGRhdGEgKnJqNTRuMV9wcml2OwogCWludCByZXQ7CiAKIAlpZiAoIWljZCkgewpAQCAtMTEyNywxMSArMTQwOCwxMyBAQAogCX0KIAogCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwotCWlmICghaWNsKSB7CisJaWYgKCFpY2wgfHwgIWljbC0+cHJpdikgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlJKNTROMUNCMEM6IG1pc3NpbmcgcGxhdGZvcm0gZGF0YSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlyajU0bjFfcHJpdiA9IGljbC0+cHJpdjsKKwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQlkZXZfd2FybigmYWRhcHRlci0+ZGV2LAogCQkJICJJMkMtQWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgSTJDX0ZVTkNfU01CVVNfQllURVxuIik7CkBAIC0xMTUzLDEwICsxNDM2LDEyIEBACiAJcmo1NG4xLT5yZWN0LmhlaWdodAk9IFJKNTROMV9NQVhfSEVJR0hUOwogCXJqNTRuMS0+d2lkdGgJCT0gUko1NE4xX01BWF9XSURUSDsKIAlyajU0bjEtPmhlaWdodAkJPSBSSjU0TjFfTUFYX0hFSUdIVDsKLQlyajU0bjEtPmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwlyajU0bjEtPmZtdAkJPSAmcmo1NG4xX2NvbG91cl9mbXRzWzBdOwogCXJqNTRuMS0+cmVzaXplCQk9IDEwMjQ7CisJcmo1NG4xLT50Z2Nsa19taHoJPSAocmo1NG4xX3ByaXYtPm1jbGtfZnJlcSAvIFBMTF9MICogUExMX04pIC8KKwkJKGNsa19kaXYucmF0aW9fdGcgKyAxKSAvIChjbGtfZGl2LnJhdGlvX3QgKyAxKTsKIAotCXJldCA9IHJqNTRuMV92aWRlb19wcm9iZShpY2QsIGNsaWVudCk7CisJcmV0ID0gcmo1NG4xX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50LCByajU0bjFfcHJpdik7CiAJaWYgKHJldCA8IDApIHsKIAkJaWNkLT5vcHMgPSBOVUxMOwogCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKQEAgLTExNjQsOSArMTQ0OSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWNkLT5mb3JtYXRzCQk9IHJqNTRuMV9jb2xvdXJfZm9ybWF0czsKLQlpY2QtPm51bV9mb3JtYXRzCT0gQVJSQVlfU0laRShyajU0bjFfY29sb3VyX2Zvcm1hdHMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDQxNzY1ZjMuLmZiNzQyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTIzMyw3ICsyMzMsNiBAQAogCiAJc3RydWN0IHMyMjU1X2RtYXF1ZXVlCXZpZHFbTUFYX0NIQU5ORUxTXTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2ZGV2W01BWF9DSEFOTkVMU107Ci0Jc3RydWN0IGxpc3RfaGVhZAlzMjI1NV9kZXZsaXN0OwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCXN0cnVjdCBzMjI1NV9mdwkqZndfZGF0YTsKIAlzdHJ1Y3QgczIyNTVfcGlwZWluZm8JcGlwZXNbTUFYX1BJUEVfQlVGRkVSU107CkBAIC0zMTMsOCArMzEyLDYgQEAKIC8qIENoYW5uZWxzIG9uIGJveCBhcmUgaW4gcmV2ZXJzZSBvcmRlciAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgR19jaG5tYXBbTUFYX0NIQU5ORUxTXSA9IHszLCAyLCAxLCAwfTsKIAotc3RhdGljIExJU1RfSEVBRChzMjI1NV9kZXZsaXN0KTsKLQogc3RhdGljIGludCBkZWJ1ZzsKIHN0YXRpYyBpbnQgKnMyMjU1X2RlYnVnID0gJmRlYnVnOwogCkBAIC0xNTMzLDMyICsxNTMwLDI0IEBACiB9CiBzdGF0aWMgaW50IHMyMjU1X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IHMyMjU1X2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgczIyNTVfZmggKmZoOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWludCBpID0gMDsKIAlpbnQgY3VyX2NoYW5uZWwgPSAtMTsKIAlpbnQgc3RhdGU7Ci0JZHByaW50aygxLCAiczIyNTU6IG9wZW4gY2FsbGVkIChtaW5vcj0lZClcbiIsIG1pbm9yKTsKKworCWRwcmludGsoMSwgInMyMjU1OiBvcGVuIGNhbGxlZCAoZGV2PSVzKVxuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSk7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWxpc3RfZm9yX2VhY2gobGlzdCwgJnMyMjU1X2Rldmxpc3QpIHsKLQkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHMyMjU1X2RldiwgczIyNTVfZGV2bGlzdCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgewotCQkJaWYgKGgtPnZkZXZbaV0tPm1pbm9yID09IG1pbm9yKSB7Ci0JCQkJY3VyX2NoYW5uZWwgPSBpOwotCQkJCWRldiA9IGg7Ci0JCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCX0KLQkJfQotCX0KIAotCWlmICgoTlVMTCA9PSBkZXYpIHx8IChjdXJfY2hhbm5lbCA9PSAtMSkpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlwcmludGsoS0VSTl9JTkZPICJzMjI1NTogb3BlbnY0bCBubyBkZXZcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKGRldi0+dmRldltpXSA9PSB2ZGV2KSB7CisJCQljdXJfY2hhbm5lbCA9IGk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkgPT0gUzIyNTVfRldfRElTQ09OTkVDVElORykgewpAQCAtMTY2Miw4ICsxNjUxLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMjI1NV9xY3RybCk7IGkrKykKIAkJcWN0bF9yZWdzW2ldID0gczIyNTVfcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKIAotCWRwcmludGsoMSwgInMyMjU1ZHJ2OiBvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsCi0JCW1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0sIGRldi0+dXNlcnNbY3VyX2NoYW5uZWxdKTsKKwlkcHJpbnRrKDEsICJzMjI1NWRydjogb3BlbiBkZXY9JXMgdHlwZT0lcyB1c2Vycz0lZFxuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgdjRsMl90eXBlX25hbWVzW3R5cGVdLAorCQlkZXYtPnVzZXJzW2N1cl9jaGFubmVsXSk7CiAJZHByaW50aygyLCAiczIyNTVkcnY6IG9wZW46IGZoPTB4JTA4bHgsIGRldj0weCUwOGx4LCB2aWRxPTB4JTA4bHhcbiIsCiAJCSh1bnNpZ25lZCBsb25nKWZoLCAodW5zaWduZWQgbG9uZylkZXYsCiAJCSh1bnNpZ25lZCBsb25nKSZkZXYtPnZpZHFbY3VyX2NoYW5uZWxdKTsKQEAgLTE2OTksNyArMTY4OSw2IEBACiBzdGF0aWMgdm9pZCBzMjI1NV9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHRvX3MyMjU1X2RldihrcmVmKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCWludCBpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiczIyNTVkcnY6IGtyZWYgcHJvYmxlbVxuIik7CkBAIC0xNzMzLDEwICsxNzIyLDYgQEAKIAl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwogCWRwcmludGsoMSwgIiVzIiwgX19mdW5jX18pOwogCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzMjI1NV9kZXZsaXN0KSkgewotCQlsaXN0ID0gczIyNTVfZGV2bGlzdC5uZXh0OwotCQlsaXN0X2RlbChsaXN0KTsKLQl9CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CiAJa2ZyZWUoZGV2KTsKIH0KQEAgLTE3NDUsNyArMTczMCw4IEBACiB7CiAJc3RydWN0IHMyMjU1X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xNzY1LDggKzE3NTEsOCBAQAogCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwogCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgczIyNTVfZGVzdHJveSk7Ci0JZHByaW50aygxLCAiczIyNTU6IGNsb3NlIGNhbGxlZCAobWlub3I9JWQsIHVzZXJzPSVkKVxuIiwKLQkJbWlub3IsIGRldi0+dXNlcnNbZmgtPmNoYW5uZWxdKTsKKwlkcHJpbnRrKDEsICJzMjI1NTogY2xvc2UgY2FsbGVkIChkZXY9JXMsIHVzZXJzPSVkKVxuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgZGV2LT51c2Vyc1tmaC0+Y2hhbm5lbF0pOwogCWtmcmVlKGZoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MzAsNyArMTgxNiw2IEBACiAJLm5hbWUgPSAiczIyNTV2IiwKIAkuZm9wcyA9ICZzMjI1NV9mb3BzX3Y0bCwKIAkuaW9jdGxfb3BzID0gJnMyMjU1X2lvY3RsX29wcywKLQkubWlub3IgPSAtMSwKIAkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAogCS50dm5vcm1zID0gUzIyNTVfTk9STVMsCiAJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKQEAgLTE4NDMsNyArMTgyOCw2IEBACiAJaW50IGN1cl9uciA9IHZpZGVvX25yOwogCiAJLyogaW5pdGlhbGl6ZSBhbGwgdmlkZW8gNCBsaW51eCAqLwotCWxpc3RfYWRkX3RhaWwoJmRldi0+czIyNTVfZGV2bGlzdCwgJnMyMjU1X2Rldmxpc3QpOwogCS8qIHJlZ2lzdGVyIDQgdmlkZW8gZGV2aWNlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgewogCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxW2ldLmFjdGl2ZSk7CkBAIC0xODUzLDYgKzE4MzcsNyBAQAogCQlkZXYtPnZkZXZbaV0gPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAkJbWVtY3B5KGRldi0+dmRldltpXSwgJnRlbXBsYXRlLCBzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSkpOwogCQlkZXYtPnZkZXZbaV0tPnBhcmVudCA9ICZkZXYtPmludGVyZmFjZS0+ZGV2OworCQl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPnZkZXZbaV0sIGRldik7CiAJCWlmICh2aWRlb19uciA9PSAtMSkKIAkJCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZkZXZbaV0sCiAJCQkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwKQEAgLTE4ODAsNyArMTg2NSw3IEBACiAKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKLQkJaWYgKC0xICE9IGRldi0+dmRldltpXS0+bWlub3IpIHsKKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2LT52ZGV2W2ldKSkgewogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2W2ldKTsKIAkJCXByaW50ayhLRVJOX0lORk8gInMyMjU1IHVucmVnaXN0ZXJlZFxuIik7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKaW5kZXggYjYyNGE0Yy4uNWFiNmEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYwpAQCAtMTAzNiw3ICsxMDM2LDYgQEAKIAkubmFtZQkgID0gInNhYTUyNDZhIiwKIAkuZm9wcwkgID0gJnNhYV9mb3BzLAogCS5yZWxlYXNlICA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotCS5taW5vciAgICA9IC0xLAogfTsKIAogc3RhdGljIGludCBzYWE1MjQ2YV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA3ZTQwZDZkLi4wM2Y1NzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTcyMTEsOSArNzIxMSwzMSBAQAogCX0KIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCX1RSSU86CiAJeworCQl1OCB0ZW1wID0gMDsKKwkJaW50IHJjOwogCQl1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NjJ9OwogCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOSwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CiAJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwkJLyoKKwkJICogc2VuZCB3ZWFrIHVwIG1lc3NhZ2UgdG8gcGljMTZDNTA1IGNoaXAKKwkJICogQCBMaWZlVmlldyBGbHlEVkIgVHJpbworCQkgKi8KKwkJbXNnLmJ1ZiA9ICZ0ZW1wOworCQltc2cuYWRkciA9IDB4MGI7CisJCW1zZy5sZW4gPSAxOworCQlpZiAoMSAhPSBpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc2VuZCB3YWtlIHVwIGJ5dGUgdG8gcGljMTZDNTA1IgorCQkJCQkiKElSIGNoaXApIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCW1zZy5mbGFncyA9IEkyQ19NX1JEOworCQkJcmMgPSBpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByb2JlIElSIGNoaXAgQCBpMmMgMHglMDJ4OiAlc1xuIiwKKwkJCQkgICBkZXYtPm5hbWUsIG1zZy5hZGRyLAorCQkJCSAgICgxID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisJCQlpZiAocmMgPT0gMSkKKwkJCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9JMkM7CisJCX0KIAkJYnJlYWs7CiAJfQogCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfRFVPX0NBUkRCVVNfUFRWMzMxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IDBiYTdmNWEuLjlmODVlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTc5NywyNyArNzk3LDI4IEBACiAJdmZkLT5kZWJ1ZyAgID0gdmlkZW9fZGVidWc7CiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzICglcykiLAogCQkgZGV2LT5uYW1lLCB0eXBlLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CiAJcmV0dXJuIHZmZDsKIH0KIAogc3RhdGljIHZvaWQgc2FhNzEzNF91bnJlZ2lzdGVyX3ZpZGVvKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewogCWlmIChkZXYtPnZpZGVvX2RldikgewotCQlpZiAoLTEgIT0gZGV2LT52aWRlb19kZXYtPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnZpZGVvX2RldikpCiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CiAJCWVsc2UKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmlkZW9fZGV2KTsKIAkJZGV2LT52aWRlb19kZXYgPSBOVUxMOwogCX0KIAlpZiAoZGV2LT52YmlfZGV2KSB7Ci0JCWlmICgtMSAhPSBkZXYtPnZiaV9kZXYtPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnZiaV9kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52YmlfZGV2KTsKIAkJZGV2LT52YmlfZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldi0+cmFkaW9fZGV2KSB7Ci0JCWlmICgtMSAhPSBkZXYtPnJhZGlvX2Rldi0+bWlub3IpCisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+cmFkaW9fZGV2KSkKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+cmFkaW9fZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT5yYWRpb19kZXYpOwpAQCAtMTA0Niw4ICsxMDQ3LDggQEAKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCWdvdG8gZmFpbDQ7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFt2NGwyXVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnZpZGVvX2Rldi0+bnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBkZXZpY2UgJXMgW3Y0bDJdXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52aWRlb19kZXYpKTsKIAogCWRldi0+dmJpX2RldiA9IHZkZXZfaW5pdChkZXYsICZzYWE3MTM0X3ZpZGVvX3RlbXBsYXRlLCAidmJpIik7CiAKQEAgLTEwNTUsOCArMTA1Niw4IEBACiAJCQkJICAgIHZiaV9ucltkZXYtPm5yXSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbDQ7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+dmJpX2Rldi0+bnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsCisJICAgICAgIGRldi0+bmFtZSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZiaV9kZXYpKTsKIAogCWlmIChjYXJkX2hhc19yYWRpbyhkZXYpKSB7CiAJCWRldi0+cmFkaW9fZGV2ID0gdmRldl9pbml0KGRldiwmc2FhNzEzNF9yYWRpb190ZW1wbGF0ZSwicmFkaW8iKTsKQEAgLTEwNjQsOCArMTA2NSw4IEBACiAJCQkJCSAgICByYWRpb19ucltkZXYtPm5yXSk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBmYWlsNDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHJhZGlvJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGRldi0+cmFkaW9fZGV2LT5udW0pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT5yYWRpb19kZXYpKTsKIAl9CiAKIAkvKiBldmVyeXRoaW5nIHdvcmtlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IDI5Njc4OGMuLjdkZmVjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTg2LDE5ICs4NiwxMSBAQAogCiBzdGF0aWMgaW50IHRzX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnI7CiAKLQlsb2NrX2tlcm5lbCgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmc2FhNzEzNF9kZXZsaXN0LCBkZXZsaXN0KQotCQlpZiAoZGV2LT5lbXByZXNzX2RldiAmJiBkZXYtPmVtcHJlc3NfZGV2LT5taW5vciA9PSBtaW5vcikKLQkJCWdvdG8gZm91bmQ7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAtRU5PREVWOwotIGZvdW5kOgotCi0JZHByaW50aygib3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CisJZHByaW50aygib3BlbiBkZXY9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldikpOwogCWVyciA9IC1FQlVTWTsKIAlpZiAoIW11dGV4X3RyeWxvY2soJmRldi0+ZW1wcmVzc190c3EudmJfbG9jaykpCiAJCWdvdG8gZG9uZTsKQEAgLTQ4OSw3ICs0ODEsNiBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhNzEzNF9lbXByZXNzX3RlbXBsYXRlID0gewogCS5uYW1lICAgICAgICAgID0gInNhYTcxMzQtZW1wcmVzcyIsCiAJLmZvcHMgICAgICAgICAgPSAmdHNfZm9wcywKLQkubWlub3IJICAgICAgID0gLTEsCiAJLmlvY3RsX29wcyAgICAgPSAmdHNfaW9jdGxfb3BzLAogCiAJLnR2bm9ybXMJCQk9IFNBQTcxMzRfTk9STVMsCkBAIC01MzEsNiArNTIyLDcgQEAKIAogCUlOSVRfV09SSygmZGV2LT5lbXByZXNzX3dvcmtxdWV1ZSwgZW1wcmVzc19zaWduYWxfdXBkYXRlKTsKIAorCXZpZGVvX3NldF9kcnZkYXRhKGRldi0+ZW1wcmVzc19kZXYsIGRldik7CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+ZW1wcmVzc19kZXYsVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkgICAgZW1wcmVzc19ucltkZXYtPm5yXSk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTU0MCw4ICs1MzIsOCBAQAogCQlkZXYtPmVtcHJlc3NfZGV2ID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW21wZWddXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZW1wcmVzc19kZXYtPm51bSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlICVzIFttcGVnXVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+ZW1wcmVzc19kZXYpKTsKIAogCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmRldi0+ZW1wcmVzc190c3EsICZzYWE3MTM0X3RzX3FvcHMsCiAJCQkgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggNzQ0OTE4Yi4uZjhlOTg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0xMjcsNiArMTI3LDYxIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDaGlwIHNwZWNpZmljIEkyQyBrZXkgYnVpbGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGludCBnZXRfa2V5X2ZseWR2Yl90cmlvKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJaW50IGdwaW87CisJaW50IGF0dGVtcHQgPSAwOworCXVuc2lnbmVkIGNoYXIgYjsKKworCS8qIFdlIG5lZWQgdGhpcyB0byBhY2Nlc3MgR1BJIFVzZWQgYnkgdGhlIHNhYV9yZWFkbCBtYWNyby4gKi8KKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGlyLT5jLT5hZGFwdGVyLT5hbGdvX2RhdGE7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZHByaW50aygiZ2V0X2tleV9mbHlkdmJfdHJpbzogIgorCQkJICJnaXItPmMtPmFkYXB0ZXItPmFsZ29fZGF0YSBpcyBOVUxMIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIHJpc2luZyBTQUE3MTM0X0dQSUdQUkVTQ0FOIHJlYWRzIHRoZSBzdGF0dXMgKi8KKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCisJZ3BpbyA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpOworCisJaWYgKDB4NDAwMDAgJiB+Z3BpbykKKwkJcmV0dXJuIDA7IC8qIE5vIGJ1dHRvbiBwcmVzcyAqLworCisJLyogTm8gYnV0dG9uIHByZXNzIC0gb25seSBiZWZvcmUgZmlyc3Qga2V5IHByZXNzZWQgKi8KKwlpZiAoYiA9PSAweEZGKQorCQlyZXR1cm4gMDsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCS8qIHdlYWsgdXAgdGhlIElSIGNoaXAgKi8KKwliID0gMDsKKworCXdoaWxlICgxICE9IGkyY19tYXN0ZXJfc2VuZChpci0+YywgJmIsIDEpKSB7CisJCWlmICgoYXR0ZW1wdCsrKSA8IDEwKSB7CisJCQkvKgorCQkJICogd2FpdCBhIGJpdCBmb3IgbmV4dCBhdHRlbXB0IC0KKwkJCSAqIEkgZG9uJ3Qga25vdyBob3cgbWFrZSBpdCBiZXR0ZXIKKwkJCSAqLworCQkJbXNsZWVwKDEwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWkyY2RwcmludGsoInNlbmQgd2FrZSB1cCBieXRlIHRvIHBpYzE2QzUwNSAoSVIgY2hpcCkiCisJCQkgICAiZmFpbGVkICVkeFxuIiwgYXR0ZW1wdCk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoaXItPmMsICZiLCAxKSkgeworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJKmlyX2tleSA9IGI7CisJKmlyX3JhdyA9IGI7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2tleV9tc2lfdHZhbnl3aGVyZV9wbHVzKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwKIAkJCQkgICAgICAgdTMyICppcl9yYXcpCiB7CkBAIC02MjIsNiArNjc3LDcgQEAKIAkJbWFza19rZXl1cCAgID0gMHgwMjAwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKKwlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKIAkJcHJpbnRrKCIlczogT29wczogSVIgY29uZmlnIGVycm9yIFtjYXJkPSVkXVxuIiwKQEAgLTY1Miw3ICs3MDgsNyBAQAogCXNucHJpbnRmKGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpLCAicGNpLSVzL2lyMCIsCiAJCSBwY2lfbmFtZShkZXYtPnBjaSkpOwogCi0JZXJyID0gaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZpci0+aXIsIGlyX3R5cGUsIGlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgaXJfdHlwZSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX291dF9mcmVlOwogCkBAIC02NzIsNyArNzI4LDcgQEAKIAlkZXYtPnJlbW90ZSA9IGlyOwogCXNhYTcxMzRfaXJfc3RhcnQoZGV2LCBpcik7CiAKLQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmRldik7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCkBAIC02ODYsOCArNzQyLDYgQEAKIAlzYWE3MTM0X2lyX3N0b3AoZGV2KTsKIAlkZXYtPnJlbW90ZSA9IE5VTEw7CiAgZXJyX291dF9mcmVlOgotCWlyX2lucHV0X2ZyZWUoaW5wdXRfZGV2KTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKGlyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjk4LDggKzc1Miw3IEBACiAJCXJldHVybjsKIAogCXNhYTcxMzRfaXJfc3RvcChkZXYpOwotCWlyX2lucHV0X2ZyZWUoZGV2LT5yZW1vdGUtPmRldik7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5yZW1vdGUtPmRldik7CisJaXJfaW5wdXRfdW5yZWdpc3RlcihkZXYtPnJlbW90ZS0+ZGV2KTsKIAlrZnJlZShkZXYtPnJlbW90ZSk7CiAJZGV2LT5yZW1vdGUgPSBOVUxMOwogfQpAQCAtNzg4LDYgKzg0MSwxMiBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDY6CiAJCWluZm8uYWRkciA9IDB4NDA7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJfVFJJTzoKKwkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJGbHlEVkIgVHJpbyI7CisJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X2ZseWR2Yl90cmlvOworCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19mbHlkdmJfdGFibGU7CisJCWluZm8uYWRkciA9IDB4MGI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIk5vIEkyQyBJUiBzdXBwb3J0IGZvciBib2FyZCAleFxuIiwgZGV2LT5ib2FyZCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCmluZGV4IDM1ZjhkYWEuLmNiNzMyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwpAQCAtMTMyNiwzMyArMTMyNiwyNiBAQAogCiBzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBzYWE3MTM0X2ZoICpmaDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CiAJaW50IHJhZGlvID0gMDsKIAotCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkgewotCQlpZiAoZGV2LT52aWRlb19kZXYgJiYgKGRldi0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikpCi0JCQlnb3RvIGZvdW5kOwotCQlpZiAoZGV2LT5yYWRpb19kZXYgJiYgKGRldi0+cmFkaW9fZGV2LT5taW5vciA9PSBtaW5vcikpIHsKLQkJCXJhZGlvID0gMTsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQkJaWYgKGRldi0+dmJpX2RldiAmJiAoZGV2LT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikpIHsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQkJZ290byBmb3VuZDsKLQkJfQorCXN3aXRjaCAodmRldi0+dmZsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfVkJJOgorCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9SQURJTzoKKwkJcmFkaW8gPSAxOworCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7Ci0JcmV0dXJuIC1FTk9ERVY7CiAKLWZvdW5kOgotCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwotCi0JZHByaW50aygib3BlbiBtaW5vcj0lZCByYWRpbz0lZCB0eXBlPSVzXG4iLG1pbm9yLHJhZGlvLAotCQl2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCWRwcmludGsoIm9wZW4gZGV2PSVzIHJhZGlvPSVkIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCisJCXJhZGlvLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7CkBAIC0yNTAyLDcgKzI0OTUsNiBAQAogCS5uYW1lCQkJCT0gInNhYTcxMzQtdmlkZW8iLAogCS5mb3BzCQkJCT0gJnZpZGVvX2ZvcHMsCiAJLmlvY3RsX29wcyAJCQk9ICZ2aWRlb19pb2N0bF9vcHMsCi0JLm1pbm9yCQkJCT0gLTEsCiAJLnR2bm9ybXMJCQk9IFNBQTcxMzRfTk9STVMsCiAJLmN1cnJlbnRfbm9ybQkJCT0gVjRMMl9TVERfUEFMLAogfTsKQEAgLTI1MTEsNyArMjUwMyw2IEBACiAJLm5hbWUJCQk9ICJzYWE3MTM0LXJhZGlvIiwKIAkuZm9wcwkJCT0gJnJhZGlvX2ZvcHMsCiAJLmlvY3RsX29wcyAJCT0gJnJhZGlvX2lvY3RsX29wcywKLQkubWlub3IJCQk9IC0xLAogfTsKIAogaW50IHNhYTcxMzRfdmlkZW9faW5pdDEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKaW5kZXggODVmZmMyYy4uNDFkMDE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYwpAQCAtMTQyOCw4ICsxNDI4LDggQEAKIAkJZXJyKCJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiB2aWRlbyVkXG4iLAotCQkgc2U0MDEtPnZkZXYubnVtKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiAlc1xuIiwKKwkJIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJnNlNDAxLT52ZGV2KSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHNlNDAxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCBhNGYzNDcyLi5kNjkzNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZWRpYWJ1cy5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19tZWRpYWJ1cy5oPgogCiAvKiByZWdpc3RlciBvZmZzZXRzIGZvciBzaDc3MjIgLyBzaDc3MjMgKi8KIApAQCAtODUsNyArODcsNyBAQAogLyogcGVyIHZpZGVvIGZyYW1lIGJ1ZmZlciAqLwogc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyIHsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOyAvKiB2NGwgYnVmZmVyIG11c3QgYmUgZmlyc3QgKi8KLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZm10OworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlOwogfTsKIAogc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2IHsKQEAgLTEwNSw3ICsxMDcsOCBAQAogCiAJdTMyIGNmbGNyOwogCi0JdW5zaWduZWQgaW50IGlzX2ludGVybGFjZWQ6MTsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisKIAl1bnNpZ25lZCBpbnQgaW1hZ2VfbW9kZToxOwogCXVuc2lnbmVkIGludCBpc18xNmJpdDoxOwogfTsKQEAgLTExNCw4ICsxMTcsOCBAQAogCXN0cnVjdCB2NGwyX3JlY3QgY2V1X3JlY3Q7CiAJdW5zaWduZWQgaW50IGNhbV93aWR0aDsKIAl1bnNpZ25lZCBpbnQgY2FtX2hlaWdodDsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZXh0cmFfZm10OwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjYW1lcmFfZm10OworCWNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqZXh0cmFfZm10OworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFrZV9idXNfcGFyYW0oc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldikKQEAgLTE5NywxNiArMjAwLDE5IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JaW50IGJ5dGVzX3Blcl9waXhlbCA9IChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCArIDcpID4+IDM7CisJaW50IGJ5dGVzX3Blcl9saW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUoaWNkLT51c2VyX3dpZHRoLAorCQkJCQkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOwogCi0JKnNpemUgPSBQQUdFX0FMSUdOKGljZC0+dXNlcl93aWR0aCAqIGljZC0+dXNlcl9oZWlnaHQgKgotCQkJICAgYnl0ZXNfcGVyX3BpeGVsKTsKKwlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQorCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CisKKwkqc2l6ZSA9IGJ5dGVzX3Blcl9saW5lICogaWNkLT51c2VyX2hlaWdodDsKIAogCWlmICgwID09ICpjb3VudCkKIAkJKmNvdW50ID0gMjsKIAogCWlmIChwY2Rldi0+dmlkZW9fbGltaXQpIHsKLQkJd2hpbGUgKCpzaXplICogKmNvdW50ID4gcGNkZXYtPnZpZGVvX2xpbWl0KQorCQl3aGlsZSAoUEFHRV9BTElHTigqc2l6ZSkgKiAqY291bnQgPiBwY2Rldi0+dmlkZW9fbGltaXQpCiAJCQkoKmNvdW50KS0tOwogCX0KIApAQCAtMjQ5LDEwICsyNTUsMTMgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHBjZGV2LT5pY2Q7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHJfdG9wLCBwaHlzX2FkZHJfYm90dG9tOworCXVuc2lnbmVkIGxvbmcgdG9wMSwgdG9wMjsKKwl1bnNpZ25lZCBsb25nIGJvdHRvbTEsIGJvdHRvbTI7CiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0ID0gMDsKIAotCS8qIFRoZSBoYXJkd2FyZSBpcyBfdmVyeV8gcGlja3kgYWJvdXQgdGhpcyBzZXF1ZW5jZS4gRXNwZWNpYWxseQorCS8qCisJICogVGhlIGhhcmR3YXJlIGlzIF92ZXJ5XyBwaWNreSBhYm91dCB0aGlzIHNlcXVlbmNlLiBFc3BlY2lhbGx5CiAJICogdGhlIENFVV9DRVRDUl9NQUdJQyB2YWx1ZS4gSXQgc2VlbXMgbGlrZSB3ZSBuZWVkIHRvIGFja25vd2xlZGdlCiAJICogc2V2ZXJhbCBub3Qtc28td2VsbCBkb2N1bWVudGVkIGludGVycnVwdCBzb3VyY2VzIGluIENFVENSLgogCSAqLwpAQCAtMjc2LDI1ICsyODUsMzYgQEAKIAlpZiAoIXBjZGV2LT5hY3RpdmUpCiAJCXJldHVybiByZXQ7CiAKLQlwaHlzX2FkZHJfdG9wID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKTsKLQljZXVfd3JpdGUocGNkZXYsIENEQVlSLCBwaHlzX2FkZHJfdG9wKTsKLQlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKLQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPnVzZXJfd2lkdGg7Ci0JCWNldV93cml0ZShwY2RldiwgQ0RCWVIsIHBoeXNfYWRkcl9ib3R0b20pOworCWlmIChWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgPT0gcGNkZXYtPmZpZWxkKSB7CisJCXRvcDEJPSBDREJZUjsKKwkJdG9wMgk9IENEQkNSOworCQlib3R0b20xCT0gQ0RBWVI7CisJCWJvdHRvbTIJPSBDREFDUjsKKwl9IGVsc2UgeworCQl0b3AxCT0gQ0RBWVI7CisJCXRvcDIJPSBDREFDUjsKKwkJYm90dG9tMQk9IENEQllSOworCQlib3R0b20yCT0gQ0RCQ1I7CiAJfQogCi0Jc3dpdGNoIChpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpIHsKKwlwaHlzX2FkZHJfdG9wID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKTsKKwljZXVfd3JpdGUocGNkZXYsIHRvcDEsIHBoeXNfYWRkcl90b3ApOworCWlmIChWNEwyX0ZJRUxEX05PTkUgIT0gcGNkZXYtPmZpZWxkKSB7CisJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT51c2VyX3dpZHRoOworCQljZXVfd3JpdGUocGNkZXYsIGJvdHRvbTEsIHBoeXNfYWRkcl9ib3R0b20pOworCX0KKworCXN3aXRjaCAoaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQtPmZvdXJjYykgewogCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6CiAJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgogCWNhc2UgVjRMMl9QSVhfRk1UX05WNjE6CiAJCXBoeXNfYWRkcl90b3AgKz0gaWNkLT51c2VyX3dpZHRoICoKIAkJCWljZC0+dXNlcl9oZWlnaHQ7Ci0JCWNldV93cml0ZShwY2RldiwgQ0RBQ1IsIHBoeXNfYWRkcl90b3ApOwotCQlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKLQkJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsKLQkJCQlpY2QtPnVzZXJfd2lkdGg7Ci0JCQljZXVfd3JpdGUocGNkZXYsIENEQkNSLCBwaHlzX2FkZHJfYm90dG9tKTsKKwkJY2V1X3dyaXRlKHBjZGV2LCB0b3AyLCBwaHlzX2FkZHJfdG9wKTsKKwkJaWYgKFY0TDJfRklFTERfTk9ORSAhPSBwY2Rldi0+ZmllbGQpIHsKKwkJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT51c2VyX3dpZHRoOworCQkJY2V1X3dyaXRlKHBjZGV2LCBib3R0b20yLCBwaHlzX2FkZHJfYm90dG9tKTsKIAkJfQogCX0KIApAQCAtMzEwLDggKzMzMCwxMyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZjsKKwlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCisJCQkJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CiAJaW50IHJldDsKIAorCWlmIChieXRlc19wZXJfbGluZSA8IDApCisJCXJldHVybiBieXRlc19wZXJfbGluZTsKKwogCWJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyLCB2Yik7CiAKIAlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCkBAIC0zMjEsMjUgKzM0NiwyNyBAQAogCVdBUk5fT04oIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpOwogCiAjaWZkZWYgREVCVUcKLQkvKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIGlmIHdlIGFjdHVhbGx5IGZpbGwKLQkgKiB0aGUgYnVmZmVyIHdpdGggc29tZXRoaW5nICovCisJLyoKKwkgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIGlmIHdlIGFjdHVhbGx5IGZpbGwKKwkgKiB0aGUgYnVmZmVyIHdpdGggc29tZXRoaW5nCisJICovCiAJbWVtc2V0KCh2b2lkICopdmItPmJhZGRyLCAweGFhLCB2Yi0+YnNpemUpOwogI2VuZGlmCiAKIAlCVUdfT04oTlVMTCA9PSBpY2QtPmN1cnJlbnRfZm10KTsKIAotCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJaWYgKGJ1Zi0+Y29kZQkhPSBpY2QtPmN1cnJlbnRfZm10LT5jb2RlIHx8CiAJICAgIHZiLT53aWR0aAkhPSBpY2QtPnVzZXJfd2lkdGggfHwKIAkgICAgdmItPmhlaWdodAkhPSBpY2QtPnVzZXJfaGVpZ2h0IHx8CiAJICAgIHZiLT5maWVsZAkhPSBmaWVsZCkgewotCQlidWYtPmZtdAk9IGljZC0+Y3VycmVudF9mbXQ7CisJCWJ1Zi0+Y29kZQk9IGljZC0+Y3VycmVudF9mbXQtPmNvZGU7CiAJCXZiLT53aWR0aAk9IGljZC0+dXNlcl93aWR0aDsKIAkJdmItPmhlaWdodAk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJCXZiLT5maWVsZAk9IGZpZWxkOwogCQl2Yi0+c3RhdGUJPSBWSURFT0JVRl9ORUVEU19JTklUOwogCX0KIAotCXZiLT5zaXplID0gdmItPndpZHRoICogdmItPmhlaWdodCAqICgoYnVmLT5mbXQtPmRlcHRoICsgNykgPj4gMyk7CisJdmItPnNpemUgPSB2Yi0+aGVpZ2h0ICogYnl0ZXNfcGVyX2xpbmU7CiAJaWYgKDAgIT0gdmItPmJhZGRyICYmIHZiLT5ic2l6ZSA8IHZiLT5zaXplKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtNDU2LDYgKzQ4Myw3IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlpbnQgcmV0OwogCiAJaWYgKHBjZGV2LT5pY2QpCiAJCXJldHVybiAtRUJVU1k7CkBAIC00NjYsOSArNDk0LDExIEBACiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGljaS0+djRsMl9kZXYuZGV2KTsKIAotCXBjZGV2LT5pY2QgPSBpY2Q7CisJcmV0ID0gc2hfbW9iaWxlX2NldV9zb2Z0X3Jlc2V0KHBjZGV2KTsKKwlpZiAoIXJldCkKKwkJcGNkZXYtPmljZCA9IGljZDsKIAotCXJldHVybiBzaF9tb2JpbGVfY2V1X3NvZnRfcmVzZXQocGNkZXYpOworCXJldHVybiByZXQ7CiB9CiAKIC8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KQEAgLTU1OCwyNCArNTg4LDM1IEBACiAJCQlpbl93aWR0aCAqPSAyOwogCQkJbGVmdF9vZmZzZXQgKj0gMjsKIAkJfQotCQl3aWR0aCA9IGNkd2RyX3dpZHRoID0gb3V0X3dpZHRoOworCQl3aWR0aCA9IG91dF93aWR0aDsKKwkJY2R3ZHJfd2lkdGggPSBvdXRfd2lkdGg7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IHdfZmFjdG9yID0gKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMzsKKwkJaW50IGJ5dGVzX3Blcl9saW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUob3V0X3dpZHRoLAorCQkJCQkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOworCQl1bnNpZ25lZCBpbnQgd19mYWN0b3I7CiAKLQkJd2lkdGggPSBvdXRfd2lkdGggKiB3X2ZhY3RvciAvIDI7CisJCXdpZHRoID0gb3V0X3dpZHRoOwogCi0JCWlmICghcGNkZXYtPmlzXzE2Yml0KQotCQkJd19mYWN0b3IgKj0gMjsKKwkJc3dpdGNoIChpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+cGFja2luZykgeworCQljYXNlIFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJOgorCQkJd19mYWN0b3IgPSAyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3X2ZhY3RvciA9IDE7CisJCX0KIAotCQlpbl93aWR0aCA9IHJlY3QtPndpZHRoICogd19mYWN0b3IgLyAyOwotCQlsZWZ0X29mZnNldCA9IGxlZnRfb2Zmc2V0ICogd19mYWN0b3IgLyAyOworCQlpbl93aWR0aCA9IHJlY3QtPndpZHRoICogd19mYWN0b3I7CisJCWxlZnRfb2Zmc2V0ID0gbGVmdF9vZmZzZXQgKiB3X2ZhY3RvcjsKIAotCQljZHdkcl93aWR0aCA9IHdpZHRoICogMjsKKwkJaWYgKGJ5dGVzX3Blcl9saW5lIDwgMCkKKwkJCWNkd2RyX3dpZHRoID0gb3V0X3dpZHRoOworCQllbHNlCisJCQljZHdkcl93aWR0aCA9IGJ5dGVzX3Blcl9saW5lOwogCX0KIAogCWhlaWdodCA9IG91dF9oZWlnaHQ7CiAJaW5faGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwotCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlZCkgeworCWlmIChWNEwyX0ZJRUxEX05PTkUgIT0gcGNkZXYtPmZpZWxkKSB7CiAJCWhlaWdodCAvPSAyOwogCQlpbl9oZWlnaHQgLz0gMjsKIAkJdG9wX29mZnNldCAvPSAyOwpAQCAtNjQ2LDYgKzY4NywyMyBAQAogCWlmICghY29tbW9uX2ZsYWdzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIE1ha2UgY2hvaXNlcywgYmFzZWQgb24gcGxhdGZvcm0gcHJlZmVyZW5jZXMgKi8KKwlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIKSAmJgorCSAgICAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykpIHsKKwkJaWYgKHBjZGV2LT5wZGF0YS0+ZmxhZ3MgJiBTSF9DRVVfRkxBR19IU1lOQ19MT1cpCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChwY2Rldi0+cGRhdGEtPmZsYWdzICYgU0hfQ0VVX0ZMQUdfVlNZTkNfTE9XKQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfTE9XOworCX0KKwogCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTY2NywyNCArNzI1LDI0IEBACiAJdmFsdWUgPSAweDAwMDAwMDEwOyAvKiBkYXRhIGZldGNoIGJ5IGRlZmF1bHQgKi8KIAl5dXZfbGluZXNraXAgPSAwOwogCi0Jc3dpdGNoIChpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpIHsKKwlzd2l0Y2ggKGljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10LT5mb3VyY2MpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgogCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6CiAJCXl1dl9saW5lc2tpcCA9IDE7IC8qIHNraXAgZm9yIE5WMTIvMjEsIG5vIHNraXAgZm9yIE5WMTYvNjEgKi8KIAkJLyogZmFsbC10aHJvdWdoICovCiAJY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgotCQlzd2l0Y2ggKGNhbS0+Y2FtZXJhX2ZtdC0+Zm91cmNjKSB7Ci0JCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJCXN3aXRjaCAoY2FtLT5jb2RlKSB7CisJCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU6CiAJCQl2YWx1ZSA9IDB4MDAwMDAwMDA7IC8qIENiMCwgWTAsIENyMCwgWTEgKi8KIAkJCWJyZWFrOwotCQljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgorCQljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFOgogCQkJdmFsdWUgPSAweDAwMDAwMTAwOyAvKiBDcjAsIFkwLCBDYjAsIFkxICovCiAJCQlicmVhazsKLQkJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9MRToKIAkJCXZhbHVlID0gMHgwMDAwMDIwMDsgLyogWTAsIENiMCwgWTEsIENyMCAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CisJCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDhfTEU6CiAJCQl2YWx1ZSA9IDB4MDAwMDAzMDA7IC8qIFkwLCBDcjAsIFkxLCBDYjAgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNjkyLDggKzc1MCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9OVjIxIHx8Ci0JICAgIGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlY2MSkKKwlpZiAoaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlYyMSB8fAorCSAgICBpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9OVjYxKQogCQl2YWx1ZSBePSAweDAwMDAwMTAwOyAvKiBzd2FwIFUsIFYgdG8gY2hhbmdlIGZyb20gTlYxeC0+TlZ4MSAqLwogCiAJdmFsdWUgfD0gY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyA/IDEgPDwgMSA6IDA7CkBAIC03MDIsMTQgKzc2MCwyNyBAQAogCWNldV93cml0ZShwY2RldiwgQ0FNQ1IsIHZhbHVlKTsKIAogCWNldV93cml0ZShwY2RldiwgQ0FQQ1IsIDB4MDAzMDAwMDApOwotCWNldV93cml0ZShwY2RldiwgQ0FJRlIsIHBjZGV2LT5pc19pbnRlcmxhY2VkID8gMHgxMDEgOiAwKTsKKworCXN3aXRjaCAocGNkZXYtPmZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI6CisJCXZhbHVlID0gMHgxMDE7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUOgorCQl2YWx1ZSA9IDB4MTAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWx1ZSA9IDA7CisJCWJyZWFrOworCX0KKwljZXVfd3JpdGUocGNkZXYsIENBSUZSLCB2YWx1ZSk7CiAKIAlzaF9tb2JpbGVfY2V1X3NldF9yZWN0KGljZCwgaWNkLT51c2VyX3dpZHRoLCBpY2QtPnVzZXJfaGVpZ2h0KTsKIAltZGVsYXkoMSk7CiAKIAljZXVfd3JpdGUocGNkZXYsIENGTENSLCBwY2Rldi0+Y2ZsY3IpOwogCi0JLyogQSBmZXcgd29yZHMgYWJvdXQgYnl0ZSBvcmRlciAob2JzZXJ2ZWQgaW4gQmlnIEVuZGlhbiBtb2RlKQorCS8qCisJICogQSBmZXcgd29yZHMgYWJvdXQgYnl0ZSBvcmRlciAob2JzZXJ2ZWQgaW4gQmlnIEVuZGlhbiBtb2RlKQogCSAqCiAJICogSW4gZGF0YSBmZXRjaCBtb2RlIGJ5dGVzIGFyZSByZWNlaXZlZCBpbiBjaHVua3Mgb2YgOCBieXRlcy4KIAkgKiBEMCwgRDEsIEQyLCBEMywgRDQsIEQ1LCBENiwgRDcgKEQwIHJlY2VpdmVkIGZpcnN0KQpAQCAtNzM5LDcgKzgxMCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV90cnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3RyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgYnVzd2lkdGgpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKQEAgLTc0OCw0OCArODIwLDc1IEBACiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLAogCQkJCQkJICAgICAgIG1ha2VfYnVzX3BhcmFtKHBjZGV2KSk7Ci0JaWYgKCFjb21tb25fZmxhZ3MpCisJaWYgKCFjb21tb25fZmxhZ3MgfHwgYnVzd2lkdGggPiAxNiB8fAorCSAgICAoYnVzd2lkdGggPiA4ICYmICEoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIXzE2KSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBzaF9tb2JpbGVfY2V1X2Zvcm1hdHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgc2hfbW9iaWxlX2NldV9mb3JtYXRzW10gPSB7CiAJewotCQkubmFtZQkJPSAiTlYxMiIsCi0JCS5kZXB0aAkJPSAxMiwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfTlYxMiwKLQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQl9LAotCXsKLQkJLm5hbWUJCT0gIk5WMjEiLAotCQkuZGVwdGgJCT0gMTIsCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX05WMjEsCi0JCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJOVjE2IiwKLQkJLmRlcHRoCQk9IDE2LAotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9OVjE2LAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCX0sCi0JewotCQkubmFtZQkJPSAiTlY2MSIsCi0JCS5kZXB0aAkJPSAxNiwKLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfTlY2MSwKLQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX05WMTIsCisJCS5uYW1lCQkJPSAiTlYxMiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSAxMiwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX05WMjEsCisJCS5uYW1lCQkJPSAiTlYyMSIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSAxMiwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX05WMTYsCisJCS5uYW1lCQkJPSAiTlYxNiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSAxNiwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX05WNjEsCisJCS5uYW1lCQkJPSAiTlY2MSIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSAxNiwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAogCX0sCiB9OwogCisvKiBUaGlzIHdpbGwgYmUgY29ycmVjdGVkIGFzIHdlIGdldCBtb3JlIGZvcm1hdHMgKi8KK3N0YXRpYyBib29sIHNoX21vYmlsZV9jZXVfcGFja2luZ19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQpCit7CisJcmV0dXJuCWZtdC0+cGFja2luZyA9PSBTT0NfTUJVU19QQUNLSU5HX05PTkUgfHwKKwkJKGZtdC0+Yml0c19wZXJfc2FtcGxlID09IDggJiYKKwkJIGZtdC0+cGFja2luZyA9PSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSkgfHwKKwkJKGZtdC0+Yml0c19wZXJfc2FtcGxlID4gOCAmJgorCQkgZm10LT5wYWNraW5nID09IFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTYpOworfQorCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBpZHgsCiAJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAlpbnQgcmV0LCBrLCBuOwogCWludCBmb3JtYXRzID0gMDsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbTsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZTsKKwljb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgKmZtdDsKIAotCXJldCA9IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbShpY2QpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBlbnVtX21idXNfZm10LCBpZHgsICZjb2RlKTsKKwlpZiAocmV0IDwgMCkKKwkJLyogTm8gbW9yZSBmb3JtYXRzICovCisJCXJldHVybiAwOworCisJZm10ID0gc29jX21idXNfZ2V0X2ZtdGRlc2MoY29kZSk7CisJaWYgKCFmbXQpIHsKKwkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsCisJCQkiSW52YWxpZCBmb3JtYXQgY29kZSAjJWQ6ICVkXG4iLCBpZHgsIGNvZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBzaF9tb2JpbGVfY2V1X3RyeV9idXNfcGFyYW0oaWNkLCBmbXQtPmJpdHNfcGVyX3NhbXBsZSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCkBAIC04MDcsMTMgKzkwNiwxMyBAQAogCWlmICghaWR4KQogCQljYW0tPmV4dHJhX2ZtdCA9IE5VTEw7CiAKLQlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgewotCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgotCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CisJc3dpdGNoIChjb2RlKSB7CisJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRToKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFOgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfTEU6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOF9MRToKIAkJaWYgKGNhbS0+ZXh0cmFfZm10KQotCQkJZ290byBhZGRfc2luZ2xlX2Zvcm1hdDsKKwkJCWJyZWFrOwogCiAJCS8qCiAJCSAqIE91ciBjYXNlIGlzIHNpbXBsZSBzbyBmYXI6IGZvciBhbnkgb2YgdGhlIGFib3ZlIGZvdXIgY2FtZXJhCkBAIC04MjQsMzIgKzkyMywzMSBAQAogCQkgKiB0aGUgaG9zdF9wcml2IHBvaW50ZXIgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIGZvcm1hdCB5b3UncmUKIAkJICogZ29pbmcgdG8gYWRkIG5vdyBpcyBhbHJlYWR5IHRoZXJlLgogCQkgKi8KLQkJY2FtLT5leHRyYV9mbXQgPSAodm9pZCAqKXNoX21vYmlsZV9jZXVfZm9ybWF0czsKKwkJY2FtLT5leHRyYV9mbXQgPSBzaF9tb2JpbGVfY2V1X2Zvcm1hdHM7CiAKIAkJbiA9IEFSUkFZX1NJWkUoc2hfbW9iaWxlX2NldV9mb3JtYXRzKTsKIAkJZm9ybWF0cyArPSBuOwogCQlmb3IgKGsgPSAwOyB4bGF0ZSAmJiBrIDwgbjsgaysrKSB7Ci0JCQl4bGF0ZS0+aG9zdF9mbXQgPSAmc2hfbW9iaWxlX2NldV9mb3JtYXRzW2tdOwotCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7Ci0JCQl4bGF0ZS0+YnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKKwkJCXhsYXRlLT5ob3N0X2ZtdAk9ICZzaF9tb2JpbGVfY2V1X2Zvcm1hdHNba107CisJCQl4bGF0ZS0+Y29kZQk9IGNvZGU7CiAJCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAotCQkJCXNoX21vYmlsZV9jZXVfZm9ybWF0c1trXS5uYW1lLAotCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQkJZGV2X2RiZyhkZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nIGNvZGUgJWRcbiIsCisJCQkJc2hfbW9iaWxlX2NldV9mb3JtYXRzW2tdLm5hbWUsIGNvZGUpOwogCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci1hZGRfc2luZ2xlX2Zvcm1hdDoKLQkJLyogR2VuZXJpYyBwYXNzLXRocm91Z2ggKi8KLQkJZm9ybWF0cysrOwotCQlpZiAoeGxhdGUpIHsKLQkJCXhsYXRlLT5ob3N0X2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKLQkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OwotCQkJeGxhdGUtPmJ1c3dpZHRoID0gaWNkLT5mb3JtYXRzW2lkeF0uZGVwdGg7Ci0JCQl4bGF0ZSsrOwotCQkJZGV2X2RiZyhkZXYsCi0JCQkJIlByb3ZpZGluZyBmb3JtYXQgJXMgaW4gcGFzcy10aHJvdWdoIG1vZGVcbiIsCi0JCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7Ci0JCX0KKwkJaWYgKCFzaF9tb2JpbGVfY2V1X3BhY2tpbmdfc3VwcG9ydGVkKGZtdCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZW5lcmljIHBhc3MtdGhyb3VnaCAqLworCWZvcm1hdHMrKzsKKwlpZiAoeGxhdGUpIHsKKwkJeGxhdGUtPmhvc3RfZm10CT0gZm10OworCQl4bGF0ZS0+Y29kZQk9IGNvZGU7CisJCXhsYXRlKys7CisJCWRldl9kYmcoZGV2LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKKwkJCXhsYXRlLT5ob3N0X2ZtdC0+bmFtZSk7CiAJfQogCiAJcmV0dXJuIGZvcm1hdHM7CkBAIC0xMDI5LDE3ICsxMTI3LDE1IEBACiBzdGF0aWMgaW50IGdldF9jYW1lcmFfc2NhbGVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QsCiAJCQkgICAgIHVuc2lnbmVkIGludCAqc2NhbGVfaCwgdW5zaWduZWQgaW50ICpzY2FsZV92KQogewotCXN0cnVjdCB2NGwyX2Zvcm1hdCBmOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJaW50IHJldDsKIAotCWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgJmYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX21idXNfZm10LCAmbWYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JKnNjYWxlX2ggPSBjYWxjX2dlbmVyaWNfc2NhbGUocmVjdC0+d2lkdGgsIGYuZm10LnBpeC53aWR0aCk7Ci0JKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUocmVjdC0+aGVpZ2h0LCBmLmZtdC5waXguaGVpZ2h0KTsKKwkqc2NhbGVfaCA9IGNhbGNfZ2VuZXJpY19zY2FsZShyZWN0LT53aWR0aCwgbWYud2lkdGgpOworCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKHJlY3QtPmhlaWdodCwgbWYuaGVpZ2h0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA1NCwzMiArMTE1MCwyOSBAQAogCWlmICghY2V1X3JlY3QtPndpZHRoKSB7CiAJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCBmOwotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4OworCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOwogCQlpbnQgcmV0OwogCQkvKiBGaXJzdCB0aW1lICovCiAKLQkJZi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCi0JCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgJmYpOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19tYnVzX2ZtdCwgJm1mKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCWRldl9nZW8oZGV2LCAiY2FtZXJhIGZtdCAldXgldVxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQlkZXZfZ2VvKGRldiwgImNhbWVyYSBmbXQgJXV4JXVcbiIsIG1mLndpZHRoLCBtZi5oZWlnaHQpOwogCi0JCWlmIChwaXgtPndpZHRoID4gMjU2MCkgeworCQlpZiAobWYud2lkdGggPiAyNTYwKSB7CiAJCQljZXVfcmVjdC0+d2lkdGgJID0gMjU2MDsKLQkJCWNldV9yZWN0LT5sZWZ0CSA9IChwaXgtPndpZHRoIC0gMjU2MCkgLyAyOworCQkJY2V1X3JlY3QtPmxlZnQJID0gKG1mLndpZHRoIC0gMjU2MCkgLyAyOwogCQl9IGVsc2UgewotCQkJY2V1X3JlY3QtPndpZHRoCSA9IHBpeC0+d2lkdGg7CisJCQljZXVfcmVjdC0+d2lkdGgJID0gbWYud2lkdGg7CiAJCQljZXVfcmVjdC0+bGVmdAkgPSAwOwogCQl9CiAKLQkJaWYgKHBpeC0+aGVpZ2h0ID4gMTkyMCkgeworCQlpZiAobWYuaGVpZ2h0ID4gMTkyMCkgewogCQkJY2V1X3JlY3QtPmhlaWdodCA9IDE5MjA7Ci0JCQljZXVfcmVjdC0+dG9wCSA9IChwaXgtPmhlaWdodCAtIDE5MjApIC8gMjsKKwkJCWNldV9yZWN0LT50b3AJID0gKG1mLmhlaWdodCAtIDE5MjApIC8gMjsKIAkJfSBlbHNlIHsKLQkJCWNldV9yZWN0LT5oZWlnaHQgPSBwaXgtPmhlaWdodDsKKwkJCWNldV9yZWN0LT5oZWlnaHQgPSBtZi5oZWlnaHQ7CiAJCQljZXVfcmVjdC0+dG9wCSA9IDA7CiAJCX0KIApAQCAtMTA5NiwxMyArMTE4OSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsaWVudF9zX2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmLAotCQkJYm9vbCBjZXVfY2FuX3NjYWxlKQorc3RhdGljIGludCBjbGllbnRfc19mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZiwgYm9vbCBjZXVfY2FuX3NjYWxlKQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKLQl1bnNpZ25lZCBpbnQgd2lkdGggPSBwaXgtPndpZHRoLCBoZWlnaHQgPSBwaXgtPmhlaWdodCwgdG1wX3csIHRtcF9oOworCXVuc2lnbmVkIGludCB3aWR0aCA9IG1mLT53aWR0aCwgaGVpZ2h0ID0gbWYtPmhlaWdodCwgdG1wX3csIHRtcF9oOwogCXVuc2lnbmVkIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CiAJaW50IHJldDsKQEAgLTExMTYsMjkgKzEyMDgsMjkgQEAKIAltYXhfd2lkdGggPSBtaW4oY2FwLmJvdW5kcy53aWR0aCwgMjU2MCk7CiAJbWF4X2hlaWdodCA9IG1pbihjYXAuYm91bmRzLmhlaWdodCwgMTkyMCk7CiAKLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX21idXNfZm10LCBtZik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlkZXZfZ2VvKGRldiwgImNhbWVyYSBzY2FsZWQgdG8gJXV4JXVcbiIsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwlkZXZfZ2VvKGRldiwgImNhbWVyYSBzY2FsZWQgdG8gJXV4JXVcbiIsIG1mLT53aWR0aCwgbWYtPmhlaWdodCk7CiAKLQlpZiAoKHdpZHRoID09IHBpeC0+d2lkdGggJiYgaGVpZ2h0ID09IHBpeC0+aGVpZ2h0KSB8fCAhY2V1X2Nhbl9zY2FsZSkKKwlpZiAoKHdpZHRoID09IG1mLT53aWR0aCAmJiBoZWlnaHQgPT0gbWYtPmhlaWdodCkgfHwgIWNldV9jYW5fc2NhbGUpCiAJCXJldHVybiAwOwogCiAJLyogQ2FtZXJhIHNldCBhIGZvcm1hdCwgYnV0IGdlb21ldHJ5IGlzIG5vdCBwcmVjaXNlLCB0cnkgdG8gaW1wcm92ZSAqLwotCXRtcF93ID0gcGl4LT53aWR0aDsKLQl0bXBfaCA9IHBpeC0+aGVpZ2h0OworCXRtcF93ID0gbWYtPndpZHRoOworCXRtcF9oID0gbWYtPmhlaWdodDsKIAogCS8qIHdpZHRoIDw9IG1heF93aWR0aCAmJiBoZWlnaHQgPD0gbWF4X2hlaWdodCAtIGd1YXJhbnRlZWQgYnkgdHJ5X2ZtdCAqLwogCXdoaWxlICgod2lkdGggPiB0bXBfdyB8fCBoZWlnaHQgPiB0bXBfaCkgJiYKIAkgICAgICAgdG1wX3cgPCBtYXhfd2lkdGggJiYgdG1wX2ggPCBtYXhfaGVpZ2h0KSB7CiAJCXRtcF93ID0gbWluKDIgKiB0bXBfdywgbWF4X3dpZHRoKTsKIAkJdG1wX2ggPSBtaW4oMiAqIHRtcF9oLCBtYXhfaGVpZ2h0KTsKLQkJcGl4LT53aWR0aCA9IHRtcF93OwotCQlwaXgtPmhlaWdodCA9IHRtcF9oOwotCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOworCQltZi0+d2lkdGggPSB0bXBfdzsKKwkJbWYtPmhlaWdodCA9IHRtcF9oOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19tYnVzX2ZtdCwgbWYpOwogCQlkZXZfZ2VvKGRldiwgIkNhbWVyYSBzY2FsZWQgdG8gJXV4JXVcbiIsCi0JCQlwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJCQltZi0+d2lkdGgsIG1mLT5oZWlnaHQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuICovCiAJCQlkZXZfZXJyKGRldiwgIkNsaWVudCBmYWlsZWQgdG8gc2V0IGZvcm1hdDogJWRcbiIsIHJldCk7CkBAIC0xMTU2LDI3ICsxMjQ4LDI2IEBACiAgKi8KIHN0YXRpYyBpbnQgY2xpZW50X3NjYWxlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0LAogCQkJc3RydWN0IHY0bDJfcmVjdCAqc3ViX3JlY3QsIHN0cnVjdCB2NGwyX3JlY3QgKmNldV9yZWN0LAotCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmLCBib29sIGNldV9jYW5fc2NhbGUpCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZiwgYm9vbCBjZXVfY2FuX3NjYWxlKQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwotCXN0cnVjdCB2NGwyX2Zvcm1hdCBmX3RtcCA9ICpmOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeF90bXAgPSAmZl90bXAuZm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mX3RtcCA9ICptZjsKIAl1bnNpZ25lZCBpbnQgc2NhbGVfaCwgc2NhbGVfdjsKIAlpbnQgcmV0OwogCiAJLyogNS4gQXBwbHkgaXRlcmF0aXZlIGNhbWVyYSBTX0ZNVCBmb3IgY2FtZXJhIHVzZXIgd2luZG93LiAqLwotCXJldCA9IGNsaWVudF9zX2ZtdChpY2QsICZmX3RtcCwgY2V1X2Nhbl9zY2FsZSk7CisJcmV0ID0gY2xpZW50X3NfZm10KGljZCwgJm1mX3RtcCwgY2V1X2Nhbl9zY2FsZSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlkZXZfZ2VvKGRldiwgIjU6IGNhbWVyYSBzY2FsZWQgdG8gJXV4JXVcbiIsCi0JCXBpeF90bXAtPndpZHRoLCBwaXhfdG1wLT5oZWlnaHQpOworCQltZl90bXAud2lkdGgsIG1mX3RtcC5oZWlnaHQpOwogCiAJLyogNi4gUmV0cmlldmUgY2FtZXJhIG91dHB1dCB3aW5kb3cgKGdfZm10KSAqLwogCi0JLyogdW5uZWVkZWQgLSBpdCBpcyBhbHJlYWR5IGluICJmX3RtcCIgKi8KKwkvKiB1bm5lZWRlZCAtIGl0IGlzIGFscmVhZHkgaW4gIm1mX3RtcCIgKi8KIAogCS8qIDcuIENhbGN1bGF0ZSBuZXcgY2FtZXJhIHNjYWxlcy4gKi8KIAlyZXQgPSBnZXRfY2FtZXJhX3NjYWxlcyhzZCwgcmVjdCwgJnNjYWxlX2gsICZzY2FsZV92KTsKQEAgLTExODUsMTAgKzEyNzYsMTEgQEAKIAogCWRldl9nZW8oZGV2LCAiNzogY2FtZXJhIHNjYWxlcyAldToldVxuIiwgc2NhbGVfaCwgc2NhbGVfdik7CiAKLQljYW0tPmNhbV93aWR0aAkJPSBwaXhfdG1wLT53aWR0aDsKLQljYW0tPmNhbV9oZWlnaHQJCT0gcGl4X3RtcC0+aGVpZ2h0OwotCWYtPmZtdC5waXgud2lkdGgJPSBwaXhfdG1wLT53aWR0aDsKLQlmLT5mbXQucGl4LmhlaWdodAk9IHBpeF90bXAtPmhlaWdodDsKKwljYW0tPmNhbV93aWR0aAk9IG1mX3RtcC53aWR0aDsKKwljYW0tPmNhbV9oZWlnaHQJPSBtZl90bXAuaGVpZ2h0OworCW1mLT53aWR0aAk9IG1mX3RtcC53aWR0aDsKKwltZi0+aGVpZ2h0CT0gbWZfdG1wLmhlaWdodDsKKwltZi0+Y29sb3JzcGFjZQk9IG1mX3RtcC5jb2xvcnNwYWNlOwogCiAJLyoKIAkgKiA4LiBDYWxjdWxhdGUgbmV3IENFVSBjcm9wIC0gYXBwbHkgY2FtZXJhIHNjYWxlcyB0byBwcmV2aW91c2x5CkBAIC0xMjUyLDggKzEzNDQsNyBAQAogCXN0cnVjdCB2NGwyX3JlY3QgKmNhbV9yZWN0ID0gJmNhbV9jcm9wLmMsICpjZXVfcmVjdCA9ICZjYW0tPmNldV9yZWN0OwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZjsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi5mbXQucGl4OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJdW5zaWduZWQgaW50IHNjYWxlX2NvbWJfaCwgc2NhbGVfY29tYl92LCBzY2FsZV9jZXVfaCwgc2NhbGVfY2V1X3YsCiAJCW91dF93aWR0aCwgb3V0X2hlaWdodDsKIAl1MzIgY2Fwc3IsIGNmbGNyOwpAQCAtMTMwMiwyNiArMTM5MywyNSBAQAogCSAqIDUuIFVzaW5nIGFjdHVhbCBpbnB1dCB3aW5kb3cgYW5kIGNhbGN1bGF0ZWQgY29tYmluZWQgc2NhbGVzIGNhbGN1bGF0ZQogCSAqICAgIGNhbWVyYSB0YXJnZXQgb3V0cHV0IHdpbmRvdy4KIAkgKi8KLQlwaXgtPndpZHRoCQk9IHNjYWxlX2Rvd24oY2FtX3JlY3QtPndpZHRoLCBzY2FsZV9jb21iX2gpOwotCXBpeC0+aGVpZ2h0CQk9IHNjYWxlX2Rvd24oY2FtX3JlY3QtPmhlaWdodCwgc2NhbGVfY29tYl92KTsKKwltZi53aWR0aAk9IHNjYWxlX2Rvd24oY2FtX3JlY3QtPndpZHRoLCBzY2FsZV9jb21iX2gpOworCW1mLmhlaWdodAk9IHNjYWxlX2Rvd24oY2FtX3JlY3QtPmhlaWdodCwgc2NhbGVfY29tYl92KTsKIAotCWRldl9nZW8oZGV2LCAiNTogY2FtZXJhIHRhcmdldCAldXgldVxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCWRldl9nZW8oZGV2LCAiNTogY2FtZXJhIHRhcmdldCAldXgldVxuIiwgbWYud2lkdGgsIG1mLmhlaWdodCk7CiAKIAkvKiA2LiAtIDkuICovCi0JcGl4LT5waXhlbGZvcm1hdAk9IGNhbS0+Y2FtZXJhX2ZtdC0+Zm91cmNjOwotCXBpeC0+Y29sb3JzcGFjZQkJPSBjYW0tPmNhbWVyYV9mbXQtPmNvbG9yc3BhY2U7CisJbWYuY29kZQkJPSBjYW0tPmNvZGU7CisJbWYuZmllbGQJPSBwY2Rldi0+ZmllbGQ7CiAKIAljYXBzciA9IGNhcHR1cmVfc2F2ZV9yZXNldChwY2Rldik7CiAJZGV2X2RiZyhkZXYsICJDQVBTUiAweCV4LCBDRkxDUiAweCV4XG4iLCBjYXBzciwgcGNkZXYtPmNmbGNyKTsKIAogCS8qIE1ha2UgcmVsYXRpdmUgdG8gY2FtZXJhIHJlY3RhbmdsZSAqLwotCXJlY3QtPmxlZnQJCS09IGNhbV9yZWN0LT5sZWZ0OwotCXJlY3QtPnRvcAkJLT0gY2FtX3JlY3QtPnRvcDsKKwlyZWN0LT5sZWZ0CS09IGNhbV9yZWN0LT5sZWZ0OworCXJlY3QtPnRvcAktPSBjYW1fcmVjdC0+dG9wOwogCi0JZi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCi0JcmV0ID0gY2xpZW50X3NjYWxlKGljZCwgY2FtX3JlY3QsIHJlY3QsIGNldV9yZWN0LCAmZiwKLQkJCSAgIHBjZGV2LT5pbWFnZV9tb2RlICYmICFwY2Rldi0+aXNfaW50ZXJsYWNlZCk7CisJcmV0ID0gY2xpZW50X3NjYWxlKGljZCwgY2FtX3JlY3QsIHJlY3QsIGNldV9yZWN0LCAmbWYsCisJCQkgICBwY2Rldi0+aW1hZ2VfbW9kZSAmJgorCQkJICAgVjRMMl9GSUVMRF9OT05FID09IHBjZGV2LT5maWVsZCk7CiAKIAlkZXZfZ2VvKGRldiwgIjYtOTogJWRcbiIsIHJldCk7CiAKQEAgLTEzNjgsOCArMTQ1OCw3IEBACiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwotCXN0cnVjdCB2NGwyX2Zvcm1hdCBjYW1fZiA9ICpmOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9waXggPSAmY2FtX2YuZm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwpAQCAtMTM3OSwxOCArMTQ2OCwyMCBAQAogCXVuc2lnbmVkIGludCBzY2FsZV9jYW1faCwgc2NhbGVfY2FtX3Y7CiAJdTE2IHNjYWxlX3YsIHNjYWxlX2g7CiAJaW50IHJldDsKLQlib29sIGlzX2ludGVybGFjZWQsIGltYWdlX21vZGU7CisJYm9vbCBpbWFnZV9tb2RlOworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKIAogCXN3aXRjaCAocGl4LT5maWVsZCkgewotCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgotCQlpc19pbnRlcmxhY2VkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0ZJRUxEX0FOWToKIAlkZWZhdWx0OgogCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRF9UQjoKKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRF9CVDoKIAljYXNlIFY0TDJfRklFTERfTk9ORToKLQkJaXNfaW50ZXJsYWNlZCA9IGZhbHNlOworCQlmaWVsZCA9IHBpeC0+ZmllbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQlmaWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQjsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNDM4LDkgKzE1MjksMTEgQEAKIAkgKiA0LiBDYWxjdWxhdGUgY2FtZXJhIG91dHB1dCB3aW5kb3cgYnkgYXBwbHlpbmcgY29tYmluZWQgc2NhbGVzIHRvIHJlYWwKIAkgKiAgICBpbnB1dCB3aW5kb3cuCiAJICovCi0JY2FtX3BpeC0+d2lkdGggPSBzY2FsZV9kb3duKGNhbV9yZWN0LT53aWR0aCwgc2NhbGVfaCk7Ci0JY2FtX3BpeC0+aGVpZ2h0ID0gc2NhbGVfZG93bihjYW1fcmVjdC0+aGVpZ2h0LCBzY2FsZV92KTsKLQljYW1fcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisJbWYud2lkdGgJPSBzY2FsZV9kb3duKGNhbV9yZWN0LT53aWR0aCwgc2NhbGVfaCk7CisJbWYuaGVpZ2h0CT0gc2NhbGVfZG93bihjYW1fcmVjdC0+aGVpZ2h0LCBzY2FsZV92KTsKKwltZi5maWVsZAk9IHBpeC0+ZmllbGQ7CisJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKKwltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOwogCiAJc3dpdGNoIChwaXhmbXQpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgpAQCAtMTQ1Myw1MSArMTU0Niw2MSBAQAogCQlpbWFnZV9tb2RlID0gZmFsc2U7CiAJfQogCi0JZGV2X2dlbyhkZXYsICI0OiBjYW1lcmEgb3V0cHV0ICV1eCV1XG4iLAotCQljYW1fcGl4LT53aWR0aCwgY2FtX3BpeC0+aGVpZ2h0KTsKKwlkZXZfZ2VvKGRldiwgIjQ6IGNhbWVyYSBvdXRwdXQgJXV4JXVcbiIsIG1mLndpZHRoLCBtZi5oZWlnaHQpOwogCiAJLyogNS4gLSA5LiAqLwotCXJldCA9IGNsaWVudF9zY2FsZShpY2QsIGNhbV9yZWN0LCAmY2FtX3N1YnJlY3QsICZjZXVfcmVjdCwgJmNhbV9mLAotCQkJICAgaW1hZ2VfbW9kZSAmJiAhaXNfaW50ZXJsYWNlZCk7CisJcmV0ID0gY2xpZW50X3NjYWxlKGljZCwgY2FtX3JlY3QsICZjYW1fc3VicmVjdCwgJmNldV9yZWN0LCAmbWYsCisJCQkgICBpbWFnZV9tb2RlICYmIFY0TDJfRklFTERfTk9ORSA9PSBmaWVsZCk7CiAKIAlkZXZfZ2VvKGRldiwgIjUtOTogY2xpZW50IHNjYWxlICVkXG4iLCByZXQpOwogCiAJLyogRG9uZSB3aXRoIHRoZSBjYW1lcmEuIE5vdyBzZWUgaWYgd2UgY2FuIGltcHJvdmUgdGhlIHJlc3VsdCAqLwogCiAJZGV2X2RiZyhkZXYsICJDYW1lcmEgJWQgZm10ICV1eCV1LCByZXF1ZXN0ZWQgJXV4JXVcbiIsCi0JCXJldCwgY2FtX3BpeC0+d2lkdGgsIGNhbV9waXgtPmhlaWdodCwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQlyZXQsIG1mLndpZHRoLCBtZi5oZWlnaHQsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCWlmIChtZi5jb2RlICE9IHhsYXRlLT5jb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIDEwLiBVc2UgQ0VVIHNjYWxpbmcgdG8gc2NhbGUgdG8gdGhlIHJlcXVlc3RlZCB1c2VyIHdpbmRvdy4gKi8KIAogCS8qIFdlIGNhbm5vdCBzY2FsZSB1cCAqLwotCWlmIChwaXgtPndpZHRoID4gY2FtX3BpeC0+d2lkdGgpCi0JCXBpeC0+d2lkdGggPSBjYW1fcGl4LT53aWR0aDsKKwlpZiAocGl4LT53aWR0aCA+IG1mLndpZHRoKQorCQlwaXgtPndpZHRoID0gbWYud2lkdGg7CiAJaWYgKHBpeC0+d2lkdGggPiBjZXVfcmVjdC53aWR0aCkKIAkJcGl4LT53aWR0aCA9IGNldV9yZWN0LndpZHRoOwogCi0JaWYgKHBpeC0+aGVpZ2h0ID4gY2FtX3BpeC0+aGVpZ2h0KQotCQlwaXgtPmhlaWdodCA9IGNhbV9waXgtPmhlaWdodDsKKwlpZiAocGl4LT5oZWlnaHQgPiBtZi5oZWlnaHQpCisJCXBpeC0+aGVpZ2h0ID0gbWYuaGVpZ2h0OwogCWlmIChwaXgtPmhlaWdodCA+IGNldV9yZWN0LmhlaWdodCkKIAkJcGl4LT5oZWlnaHQgPSBjZXVfcmVjdC5oZWlnaHQ7CiAKLQkvKiBMZXQncyByb2NrOiBzY2FsZSBwaXgtPnt3aWR0aCB4IGhlaWdodH0gZG93biB0byB3aWR0aCB4IGhlaWdodCAqLwotCXNjYWxlX2ggPSBjYWxjX3NjYWxlKGNldV9yZWN0LndpZHRoLCAmcGl4LT53aWR0aCk7Ci0Jc2NhbGVfdiA9IGNhbGNfc2NhbGUoY2V1X3JlY3QuaGVpZ2h0LCAmcGl4LT5oZWlnaHQpOworCXBpeC0+Y29sb3JzcGFjZSA9IG1mLmNvbG9yc3BhY2U7CisKKwlpZiAoaW1hZ2VfbW9kZSkgeworCQkvKiBTY2FsZSBwaXgtPnt3aWR0aCB4IGhlaWdodH0gZG93biB0byB3aWR0aCB4IGhlaWdodCAqLworCQlzY2FsZV9oID0gY2FsY19zY2FsZShjZXVfcmVjdC53aWR0aCwgJnBpeC0+d2lkdGgpOworCQlzY2FsZV92ID0gY2FsY19zY2FsZShjZXVfcmVjdC5oZWlnaHQsICZwaXgtPmhlaWdodCk7CisKKwkJcGNkZXYtPmNmbGNyID0gc2NhbGVfaCB8IChzY2FsZV92IDw8IDE2KTsKKwl9IGVsc2UgeworCQlwaXgtPndpZHRoID0gY2V1X3JlY3Qud2lkdGg7CisJCXBpeC0+aGVpZ2h0ID0gY2V1X3JlY3QuaGVpZ2h0OworCQlzY2FsZV9oID0gc2NhbGVfdiA9IDA7CisJCXBjZGV2LT5jZmxjciA9IDA7CisJfQogCiAJZGV2X2dlbyhkZXYsICIxMDogVzogJXUgOiAweCV4ID0gJXUsIEg6ICV1IDogMHgleCA9ICV1XG4iLAogCQljZXVfcmVjdC53aWR0aCwgc2NhbGVfaCwgcGl4LT53aWR0aCwKIAkJY2V1X3JlY3QuaGVpZ2h0LCBzY2FsZV92LCBwaXgtPmhlaWdodCk7CiAKLQlwY2Rldi0+Y2ZsY3IgPSBzY2FsZV9oIHwgKHNjYWxlX3YgPDwgMTYpOworCWNhbS0+Y29kZQkJPSB4bGF0ZS0+Y29kZTsKKwljYW0tPmNldV9yZWN0CQk9IGNldV9yZWN0OworCWljZC0+Y3VycmVudF9mbXQJPSB4bGF0ZTsKIAotCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7Ci0JaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKLQljYW0tPmNhbWVyYV9mbXQgPSB4bGF0ZS0+Y2FtX2ZtdDsKLQljYW0tPmNldV9yZWN0ID0gY2V1X3JlY3Q7Ci0KLQlwY2Rldi0+aXNfaW50ZXJsYWNlZCA9IGlzX2ludGVybGFjZWQ7CisJcGNkZXYtPmZpZWxkID0gZmllbGQ7CiAJcGNkZXYtPmltYWdlX21vZGUgPSBpbWFnZV9tb2RlOwogCiAJcmV0dXJuIDA7CkBAIC0xNTA5LDYgKzE2MTIsNyBAQAogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtZjsKIAlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwogCWludCB3aWR0aCwgaGVpZ2h0OwogCWludCByZXQ7CkBAIC0xNTI3LDE4ICsxNjMxLDI3IEBACiAJd2lkdGggPSBwaXgtPndpZHRoOwogCWhlaWdodCA9IHBpeC0+aGVpZ2h0OwogCi0JcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKLQkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOwotCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKLQotCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUod2lkdGgsIHhsYXRlLT5ob3N0X2ZtdCk7CisJaWYgKHBpeC0+Ynl0ZXNwZXJsaW5lIDwgMCkKKwkJcmV0dXJuIHBpeC0+Ynl0ZXNwZXJsaW5lOworCXBpeC0+c2l6ZWltYWdlID0gaGVpZ2h0ICogcGl4LT5ieXRlc3BlcmxpbmU7CiAKIAkvKiBsaW1pdCB0byBzZW5zb3IgY2FwYWJpbGl0aWVzICovCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9mbXQsIGYpOwotCXBpeC0+cGl4ZWxmb3JtYXQgPSBwaXhmbXQ7CisJbWYud2lkdGgJPSBwaXgtPndpZHRoOworCW1mLmhlaWdodAk9IHBpeC0+aGVpZ2h0OworCW1mLmZpZWxkCT0gcGl4LT5maWVsZDsKKwltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOworCW1mLmNvbG9yc3BhY2UJPSBwaXgtPmNvbG9yc3BhY2U7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X21idXNfZm10LCAmbWYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJcGl4LT53aWR0aAk9IG1mLndpZHRoOworCXBpeC0+aGVpZ2h0CT0gbWYuaGVpZ2h0OworCXBpeC0+ZmllbGQJPSBtZi5maWVsZDsKKwlwaXgtPmNvbG9yc3BhY2UJPSBtZi5jb2xvcnNwYWNlOworCiAJc3dpdGNoIChwaXhmbXQpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgogCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6CkBAIC0xNTQ3LDIxICsxNjYwLDI1IEBACiAJCS8qIEZJWE1FOiBjaGVjayBhZ2FpbnN0IHJlY3RfbWF4IGFmdGVyIGNvbnZlcnRpbmcgc29jLWNhbWVyYSAqLwogCQkvKiBXZSBjYW4gc2NhbGUgcHJlY2lzZWx5LCBuZWVkIGEgYmlnZ2VyIGltYWdlIGZyb20gY2FtZXJhICovCiAJCWlmIChwaXgtPndpZHRoIDwgd2lkdGggfHwgcGl4LT5oZWlnaHQgPCBoZWlnaHQpIHsKLQkJCWludCB0bXBfdyA9IHBpeC0+d2lkdGgsIHRtcF9oID0gcGl4LT5oZWlnaHQ7Ci0JCQlwaXgtPndpZHRoID0gMjU2MDsKLQkJCXBpeC0+aGVpZ2h0ID0gMTkyMDsKLQkJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCB0cnlfZm10LCBmKTsKKwkJCS8qCisJCQkgKiBXZSBwcmVzdW1lLCB0aGUgc2Vuc29yIGJlaGF2ZXMgc2FuZWx5LCBpLmUuLCBpZgorCQkJICogcmVxdWVzdGVkIGEgYmlnZ2VyIHJlY3RhbmdsZSwgaXQgd2lsbCBub3QgcmV0dXJuIGEKKwkJCSAqIHNtYWxsZXIgb25lLgorCQkJICovCisJCQltZi53aWR0aCA9IDI1NjA7CisJCQltZi5oZWlnaHQgPSAxOTIwOworCQkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJLyogU2hvdWxkbid0IGFjdHVhbGx5IGhhcHBlbi4uLiAqLwogCQkJCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LAotCQkJCQkiRklYTUU6IHRyeV9mbXQoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKLQkJCQlwaXgtPndpZHRoID0gdG1wX3c7Ci0JCQkJcGl4LT5oZWlnaHQgPSB0bXBfaDsKKwkJCQkJIkZJWE1FOiBjbGllbnQgdHJ5X2ZtdCgpID0gJWRcbiIsIHJldCk7CisJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAkJfQotCQlpZiAocGl4LT53aWR0aCA+IHdpZHRoKQorCQkvKiBXZSB3aWxsIHNjYWxlIGV4YWN0bHkgKi8KKwkJaWYgKG1mLndpZHRoID4gd2lkdGgpCiAJCQlwaXgtPndpZHRoID0gd2lkdGg7Ci0JCWlmIChwaXgtPmhlaWdodCA+IGhlaWdodCkKKwkJaWYgKG1mLmhlaWdodCA+IGhlaWdodCkKIAkJCXBpeC0+aGVpZ2h0ID0gaGVpZ2h0OwogCX0KIApAQCAtMTU3MywxMCArMTY5MCwxMiBAQAogewogCWludCBpOwogCi0JLyogVGhpcyBpcyBmb3IgbG9ja2luZyBkZWJ1Z2dpbmcgb25seS4gSSByZW1vdmVkIHNwaW5sb2NrcyBhbmQgbm93IEkKKwkvKgorCSAqIFRoaXMgaXMgZm9yIGxvY2tpbmcgZGVidWdnaW5nIG9ubHkuIEkgcmVtb3ZlZCBzcGlubG9ja3MgYW5kIG5vdyBJCiAJICogY2hlY2sgd2hldGhlciAucHJlcGFyZSBpcyBldmVyIGNhbGxlZCBvbiBhIGxpbmtlZCBidWZmZXIsIG9yIHdoZXRoZXIKIAkgKiBhIGRtYSBJUlEgY2FuIG9jY3VyIGZvciBhbiBpbi13b3JrIG9yIHVubGlua2VkIGJ1ZmZlci4gVW50aWwgbm93Ci0JICogaXQgaGFkbid0IHRyaWdnZXJlZCAqLworCSAqIGl0IGhhZG4ndCB0cmlnZ2VyZWQKKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcC0+Y291bnQ7IGkrKykgewogCQlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZjsKIApAQCAtMTYyNCw4ICsxNzQzLDcgQEAKIAkJCQkgICAgICAgJnNoX21vYmlsZV9jZXVfdmlkZW9idWZfb3BzLAogCQkJCSAgICAgICBpY2QtPmRldi5wYXJlbnQsICZwY2Rldi0+bG9jaywKIAkJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCQkJCSAgICAgICBwY2Rldi0+aXNfaW50ZXJsYWNlZCA/Ci0JCQkJICAgICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCA6IFY0TDJfRklFTERfTk9ORSwKKwkJCQkgICAgICAgcGNkZXYtPmZpZWxkLAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyKSwKIAkJCQkgICAgICAgaWNkKTsKIH0KQEAgLTE2NTQsNyArMTc3Miw3IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6Ci0JCXN3aXRjaCAoaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjKSB7CisJCXN3aXRjaCAoaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQtPmZvdXJjYykgewogCQljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgogCQljYXNlIFY0TDJfUElYX0ZNVF9OVjIxOgogCQljYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgpAQCAtMTgyNSw3ICsxOTQzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX21vYmlsZV9jZXVfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9tb2JpbGVfY2V1X2Rldl9wbV9vcHMgPSB7CiAJLnJ1bnRpbWVfc3VzcGVuZCA9IHNoX21vYmlsZV9jZXVfcnVudGltZV9ub3AsCiAJLnJ1bnRpbWVfcmVzdW1lID0gc2hfbW9iaWxlX2NldV9ydW50aW1lX25vcCwKIH07CkBAIC0xODM2LDcgKzE5NTQsNyBAQAogCQkucG0JPSAmc2hfbW9iaWxlX2NldV9kZXZfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IHNoX21vYmlsZV9jZXVfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2V4aXRfcChzaF9tb2JpbGVfY2V1X3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9tb2JpbGVfY2V1X3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9tb2JpbGVfY2V1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwppbmRleCA0YTc3MTFjLi5jYmY4MDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCkBAIC0xMDA3LDggKzEwMDcsOCBAQAogCWVsc2UgaWYgKGNhbS0+c3RyZWFtICE9IFNUUkVBTV9PRkYpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJVUkIgdGltZW91dCByZWFjaGVkLiBUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuICIKLQkJICAgICAgICJUbyB1c2UgaXQsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAiVG8gdXNlIGl0LCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE3MzQsNyArMTczNCw4IEBACiAKIAljYW0gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNuOWMxMDJfZGV2aWNlLCBrcmVmKTsKIAotCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5udW0pOworCURCRygyLCAiVjRMMiBkZXZpY2UgJXMgZGVyZWdpc3RlcmVkIiwKKwkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBOVUxMKTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOwpAQCAtMTc5MSw4ICsxNzkyLDggQEAKIAl9CiAKIAlpZiAoY2FtLT51c2VycykgewotCQlEQkcoMiwgIkRldmljZSAvZGV2L3ZpZGVvJWQgaXMgYWxyZWFkeSBpbiB1c2UiLAotCQkgICAgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCURCRygyLCAiRGV2aWNlICVzIGlzIGFscmVhZHkgaW4gdXNlIiwKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJREJHKDMsICJTaW11bHRhbmVvdXMgb3BlbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKIAkJLyoKIAkJICAgb3BlbigpIG11c3QgZm9sbG93IHRoZSBvcGVuIGZsYWdzIGFuZCBzaG91bGQgYmxvY2sKQEAgLTE4NDUsNyArMTg0Niw3IEBACiAJY2FtLT5mcmFtZV9jb3VudCA9IDA7CiAJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOwogCi0JREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bnVtKTsKKwlEQkcoMywgIlZpZGVvIGRldmljZSAlcyBpcyBvcGVuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPm9wZW5fbXV0ZXgpOwpAQCAtMTg3MCw3ICsxODcxLDcgQEAKIAljYW0tPnVzZXJzLS07CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZjYW0tPndhaXRfb3BlbiwgMSk7CiAKLQlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgY2xvc2VkIiwgY2FtLT52NGxkZXYtPm51bSk7CisJREJHKDMsICJWaWRlbyBkZXZpY2UgJXMgY2xvc2VkIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCiAJa3JlZl9wdXQoJmNhbS0+a3JlZiwgc245YzEwMl9yZWxlYXNlX3Jlc291cmNlcyk7CiAKQEAgLTI0MzMsOCArMjQzNCw4IEBACiAJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlIHByb2JsZW1zLiBUbyAiCi0JCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICVzIGFnYWluLiIsCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ0Niw4ICsyNDQ3LDggQEAKIAkgICAgbmJ1ZmZlcnMgIT0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywgY2FtLT5pbykpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCi0JCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICVzIGFnYWluLiIsCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjY5MCw4ICsyNjkxLDggQEAKIAlpZiAoZXJyKSB7IC8qIGF0b21pYywgbm8gcm9sbGJhY2sgaW4gaW9jdGwoKSAqLwogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5udW0pOworCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI3MDIsOCArMjcwMyw4IEBACiAJICAgIG5idWZmZXJzICE9IHNuOWMxMDJfcmVxdWVzdF9idWZmZXJzKGNhbSwgbmJ1ZmZlcnMsIGNhbS0+aW8pKSB7CiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfRk1UIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCi0JCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICVzIGFnYWluLiIsCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjc0OCw5ICsyNzQ5LDkgQEAKIAllcnIgKz0gc245YzEwMl9zZXRfY29tcHJlc3Npb24oY2FtLCAmamMpOwogCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7Ci0JCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgotCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgotCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bnVtKTsKKwkJREJHKDEsICJWSURJT0NfU19KUEVHQ09NUCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gIgorCQkgICAgICAgIlRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMzMjgsNyArMzMyOSw2IEBACiAKIAlzdHJjcHkoY2FtLT52NGxkZXYtPm5hbWUsICJTTjlDMXh4IFBDIENhbWVyYSIpOwogCWNhbS0+djRsZGV2LT5mb3BzID0gJnNuOWMxMDJfZm9wczsKLQljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOwogCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJY2FtLT52NGxkZXYtPnBhcmVudCA9ICZ1ZGV2LT5kZXY7CiAKQEAgLTMzNDYsNyArMzM0Niw4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlEQkcoMiwgIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkIiwgY2FtLT52NGxkZXYtPm51bSk7CisJREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzICVzIiwKKwkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CiAJY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07CkBAIC0zMzk4LDkgKzMzOTksOSBAQAogCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIGNhbS0+djRsZGV2LT5uYW1lKTsKIAogCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgotCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKKwkJREJHKDIsICJEZXZpY2UgJXMgaXMgb3BlbiEgRGVyZWdpc3RyYXRpb24gYW5kIG1lbW9yeSAiCisJCSAgICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZC4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlzbjljMTAyX3N0b3BfdHJhbnNmZXIoY2FtKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA5NWZkZWIyLi42YjNmYmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfbWVkaWFidXMuaD4KIAogLyogRGVmYXVsdCB0byBWR0EgcmVzb2x1dGlvbiAqLwogI2RlZmluZSBERUZBVUxUX1dJRFRICTY0MApAQCAtNDAsMTggKzQxLDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoZGV2aWNlcyk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbG9jayk7CQkvKiBQcm90ZWN0cyB0aGUgbGlzdCBvZiBob3N0cyAqLwogCi1jb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqc29jX2NhbWVyYV9mb3JtYXRfYnlfZm91cmNjKAotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1bnNpZ25lZCBpbnQgZm91cmNjKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGljZC0+bnVtX2Zvcm1hdHM7IGkrKykKLQkJaWYgKGljZC0+Zm9ybWF0c1tpXS5mb3VyY2MgPT0gZm91cmNjKQotCQkJcmV0dXJuIGljZC0+Zm9ybWF0cyArIGk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfZm9ybWF0X2J5X2ZvdXJjYyk7Ci0KIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpCiB7CkBAIC0yMDcsMjEgKzE5NiwyNiBAQAogLyogQWx3YXlzIGVudGVyZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0JaW50IGksIGZtdHMgPSAwLCByZXQ7CisJaW50IGksIGZtdHMgPSAwLCByYXdfZm10cyA9IDAsIHJldDsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZTsKKworCXdoaWxlICghdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fbWJ1c19mbXQsIHJhd19mbXRzLCAmY29kZSkpCisJCXJhd19mbXRzKys7CiAKIAlpZiAoIWljaS0+b3BzLT5nZXRfZm9ybWF0cykKIAkJLyoKIAkJICogRmFsbGJhY2sgbW9kZSAtIHRoZSBob3N0IHdpbGwgaGF2ZSB0byBzZXJ2ZSBhbGwKIAkJICogc2Vuc29yLXByb3ZpZGVkIGZvcm1hdHMgb25lLXRvLW9uZSB0byB0aGUgdXNlcgogCQkgKi8KLQkJZm10cyA9IGljZC0+bnVtX2Zvcm1hdHM7CisJCWZtdHMgPSByYXdfZm10czsKIAllbHNlCiAJCS8qCiAJCSAqIEZpcnN0IHBhc3MgLSBvbmx5IGNvdW50IGZvcm1hdHMgdGhpcyBob3N0LXNlbnNvcgogCQkgKiBjb25maWd1cmF0aW9uIGNhbiBwcm92aWRlCiAJCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgaWNkLT5udW1fZm9ybWF0czsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCByYXdfZm10czsgaSsrKSB7CiAJCQlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Zvcm1hdHMoaWNkLCBpLCBOVUxMKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CkBAIC0yNDIsMTEgKzIzNiwxMiBAQAogCiAJLyogU2Vjb25kIHBhc3MgLSBhY3R1YWxseSBmaWxsIGRhdGEgZm9ybWF0cyAqLwogCWZtdHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBpY2QtPm51bV9mb3JtYXRzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IHJhd19mbXRzOyBpKyspCiAJCWlmICghaWNpLT5vcHMtPmdldF9mb3JtYXRzKSB7Ci0JCQlpY2QtPnVzZXJfZm9ybWF0c1tpXS5ob3N0X2ZtdCA9IGljZC0+Zm9ybWF0cyArIGk7Ci0JCQlpY2QtPnVzZXJfZm9ybWF0c1tpXS5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaTsKLQkJCWljZC0+dXNlcl9mb3JtYXRzW2ldLmJ1c3dpZHRoID0gaWNkLT5mb3JtYXRzW2ldLmRlcHRoOworCQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fbWJ1c19mbXQsIGksICZjb2RlKTsKKwkJCWljZC0+dXNlcl9mb3JtYXRzW2ldLmhvc3RfZm10ID0KKwkJCQlzb2NfbWJ1c19nZXRfZm10ZGVzYyhjb2RlKTsKKwkJCWljZC0+dXNlcl9mb3JtYXRzW2ldLmNvZGUgPSBjb2RlOwogCQl9IGVsc2UgewogCQkJcmV0ID0gaWNpLT5vcHMtPmdldF9mb3JtYXRzKGljZCwgaSwKIAkJCQkJCSAgICAmaWNkLT51c2VyX2Zvcm1hdHNbZm10c10pOwpAQCAtMjU1LDcgKzI1MCw3IEBACiAJCQlmbXRzICs9IHJldDsKIAkJfQogCi0JaWNkLT5jdXJyZW50X2ZtdCA9IGljZC0+dXNlcl9mb3JtYXRzWzBdLmhvc3RfZm10OworCWljZC0+Y3VycmVudF9mbXQgPSAmaWNkLT51c2VyX2Zvcm1hdHNbMF07CiAKIAlyZXR1cm4gMDsKIApAQCAtMjgxLDcgKzI3Niw3IEBACiAjZGVmaW5lIHBpeGZtdHN0cih4KSAoeCkgJiAweGZmLCAoKHgpID4+IDgpICYgMHhmZiwgKCh4KSA+PiAxNikgJiAweGZmLCBcCiAJKCh4KSA+PiAyNCkgJiAweGZmCiAKLS8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQsIG9yIGZyb20gdGhlIGZpcnN0IG9wZW4oMiksIHNlZSBjb21tZW50IHRoZXJlICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CkBAIC0zMDIsNyArMjk3LDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAoIWljZC0+Y3VycmVudF9mbXQgfHwKLQkJICAgaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjICE9IHBpeC0+cGl4ZWxmb3JtYXQpIHsKKwkJICAgaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQtPmZvdXJjYyAhPSBwaXgtPnBpeGVsZm9ybWF0KSB7CiAJCWRldl9lcnIoJmljZC0+ZGV2LAogCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzEwLDYgKzMwNSw3IEBACiAKIAlpY2QtPnVzZXJfd2lkdGgJCT0gcGl4LT53aWR0aDsKIAlpY2QtPnVzZXJfaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJaWNkLT5jb2xvcnNwYWNlCQk9IHBpeC0+Y29sb3JzcGFjZTsKIAlpY2YtPnZiX3ZpZHEuZmllbGQJPQogCQlpY2QtPmZpZWxkCT0gcGl4LT5maWVsZDsKIApAQCAtMzY5LDggKzM2NSw5IEBACiAJCQkJLndpZHRoCQk9IGljZC0+dXNlcl93aWR0aCwKIAkJCQkuaGVpZ2h0CQk9IGljZC0+dXNlcl9oZWlnaHQsCiAJCQkJLmZpZWxkCQk9IGljZC0+ZmllbGQsCi0JCQkJLnBpeGVsZm9ybWF0CT0gaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjLAotCQkJCS5jb2xvcnNwYWNlCT0gaWNkLT5jdXJyZW50X2ZtdC0+Y29sb3JzcGFjZSwKKwkJCQkuY29sb3JzcGFjZQk9IGljZC0+Y29sb3JzcGFjZSwKKwkJCQkucGl4ZWxmb3JtYXQJPQorCQkJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjLAogCQkJfSwKIAkJfTsKIApAQCAtMzkwLDcgKzM4NywxMiBAQAogCQkJZ290byBlaWNpYWRkOwogCQl9CiAKLQkJLyogVHJ5IHRvIGNvbmZpZ3VyZSB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycyAqLworCQkvKgorCQkgKiBUcnkgdG8gY29uZmlndXJlIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzLiBOb3RpY2U6IHRoaXMgaXMgdGhlCisJCSAqIHZlcnkgZmlyc3Qgb3Blbiwgc28sIHdlIGNhbm5vdCByYWNlIGFnYWluc3Qgb3RoZXIgY2FsbHMsCisJCSAqIGFwYXJ0IGZyb20gc29tZW9uZSBlbHNlIGNhbGxpbmcgb3BlbigpIHNpbXVsdGFuZW91c2x5LCBidXQKKwkJICogLnZpZGVvX2xvY2sgaXMgcHJvdGVjdGluZyB1cyBhZ2FpbnN0IGl0LgorCQkgKi8KIAkJcmV0ID0gc29jX2NhbWVyYV9zZXRfZm10KGljZiwgJmYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXNmbXQ7CkBAIC01MzQsNyArNTM2LDcgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZm9ybWF0OworCWNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqZm9ybWF0OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKQEAgLTU0Myw3ICs1NDUsOCBAQAogCiAJZm9ybWF0ID0gaWNkLT51c2VyX2Zvcm1hdHNbZi0+aW5kZXhdLmhvc3RfZm10OwogCi0Jc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm9ybWF0LT5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlpZiAoZm9ybWF0LT5uYW1lKQorCQlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCBmb3JtYXQtPm5hbWUsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOwogCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0LT5mb3VyY2M7CiAJcmV0dXJuIDA7CiB9CkBAIC01NjAsMTIgKzU2MywxNSBAQAogCXBpeC0+d2lkdGgJCT0gaWNkLT51c2VyX3dpZHRoOwogCXBpeC0+aGVpZ2h0CQk9IGljZC0+dXNlcl9oZWlnaHQ7CiAJcGl4LT5maWVsZAkJPSBpY2YtPnZiX3ZpZHEuZmllbGQ7Ci0JcGl4LT5waXhlbGZvcm1hdAk9IGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYzsKLQlwaXgtPmJ5dGVzcGVybGluZQk9IHBpeC0+d2lkdGggKgotCQlESVZfUk9VTkRfVVAoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGgsIDgpOworCXBpeC0+cGl4ZWxmb3JtYXQJPSBpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjOworCXBpeC0+Ynl0ZXNwZXJsaW5lCT0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUocGl4LT53aWR0aCwKKwkJCQkJCWljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10KTsKKwlwaXgtPmNvbG9yc3BhY2UJCT0gaWNkLT5jb2xvcnNwYWNlOworCWlmIChwaXgtPmJ5dGVzcGVybGluZSA8IDApCisJCXJldHVybiBwaXgtPmJ5dGVzcGVybGluZTsKIAlwaXgtPnNpemVpbWFnZQkJPSBwaXgtPmhlaWdodCAqIHBpeC0+Ynl0ZXNwZXJsaW5lOwogCWRldl9kYmcoJmljZC0+ZGV2LCAiY3VycmVudF9mbXQtPmZvdXJjYzogMHglMDh4XG4iLAotCQlpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpOworCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjIxLDggKzYyNywxMCBAQAogCiAJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAotCS8qIFRoaXMgY2FsbHMgYnVmX3JlbGVhc2UgZnJvbSBob3N0IGRyaXZlcidzIHZpZGVvYnVmX3F1ZXVlX29wcyBmb3IgYWxsCi0JICogcmVtYWluaW5nIGJ1ZmZlcnMuIFdoZW4gdGhlIGxhc3QgYnVmZmVyIGlzIGZyZWVkLCBzdG9wIGNhcHR1cmUgKi8KKwkvKgorCSAqIFRoaXMgY2FsbHMgYnVmX3JlbGVhc2UgZnJvbSBob3N0IGRyaXZlcidzIHZpZGVvYnVmX3F1ZXVlX29wcyBmb3IgYWxsCisJICogcmVtYWluaW5nIGJ1ZmZlcnMuIFdoZW4gdGhlIGxhc3QgYnVmZmVyIGlzIGZyZWVkLCBzdG9wIGNhcHR1cmUKKwkgKi8KIAl2aWRlb2J1Zl9zdHJlYW1vZmYoJmljZi0+dmJfdmlkcSk7CiAKIAl2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19zdHJlYW0sIDApOwpAQCAtODkyLDcgKzkwMCw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJc3RydWN0IGRldmljZSAqY29udHJvbCA9IE5VTEw7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRX07CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtZjsKIAlpbnQgcmV0OwogCiAJZGV2X2luZm8oZGV2LCAiUHJvYmluZyAlc1xuIiwgZGV2X25hbWUoZGV2KSk7CkBAIC05NjMsOSArOTcxLDExIEBACiAKIAkvKiBUcnkgdG8gaW1wcm92ZSBvdXIgZ3Vlc3Mgb2YgYSByZWFzb25hYmxlIHdpbmRvdyBmb3JtYXQgKi8KIAlzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7Ci0JaWYgKCF2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsICZmKSkgewotCQlpY2QtPnVzZXJfd2lkdGgJCT0gZi5mbXQucGl4LndpZHRoOwotCQlpY2QtPnVzZXJfaGVpZ2h0CT0gZi5mbXQucGl4LmhlaWdodDsKKwlpZiAoIXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX21idXNfZm10LCAmbWYpKSB7CisJCWljZC0+dXNlcl93aWR0aAkJPSBtZi53aWR0aDsKKwkJaWNkLT51c2VyX2hlaWdodAk9IG1mLmhlaWdodDsKKwkJaWNkLT5jb2xvcnNwYWNlCQk9IG1mLmNvbG9yc3BhY2U7CisJCWljZC0+ZmllbGQJCT0gbWYuZmllbGQ7CiAJfQogCiAJLyogRG8gd2UgaGF2ZSB0byBzeXNmc19yZW1vdmVfbGluaygpIGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpPyAqLwpAQCAtMTAwNCw4ICsxMDE0LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogVGhpcyBpcyBjYWxsZWQgb24gZGV2aWNlX3VucmVnaXN0ZXIsIHdoaWNoIG9ubHkgbWVhbnMgd2UgaGF2ZSB0byBkaXNjb25uZWN0Ci0gKiBmcm9tIHRoZSBob3N0LCBidXQgbm90IHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZGV2aWNlIGxpc3QgKi8KKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBvbiBkZXZpY2VfdW5yZWdpc3Rlciwgd2hpY2ggb25seSBtZWFucyB3ZSBoYXZlIHRvIGRpc2Nvbm5lY3QKKyAqIGZyb20gdGhlIGhvc3QsIGJ1dCBub3QgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBkZXZpY2UgbGlzdAorICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHRvX3NvY19jYW1lcmFfZGV2KGRldik7CkBAIC0xMjA1LDggKzEyMTcsMTAgQEAKIAl9CiAKIAlpZiAobnVtIDwgMCkKLQkJLyogb2ssIHdlIGhhdmUgMjU2IGNhbWVyYXMgb24gdGhpcyBob3N0Li4uCi0JCSAqIG1hbiwgc3RheSByZWFzb25hYmxlLi4uICovCisJCS8qCisJCSAqIG9rLCB3ZSBoYXZlIDI1NiBjYW1lcmFzIG9uIHRoaXMgaG9zdC4uLgorCQkgKiBtYW4sIHN0YXkgcmVhc29uYWJsZS4uLgorCQkgKi8KIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpY2QtPmRldm51bQkJPSBudW07CkBAIC0xMjY4LDcgKzEyODIsNiBAQAogCXZkZXYtPmZvcHMJCT0gJnNvY19jYW1lcmFfZm9wczsKIAl2ZGV2LT5pb2N0bF9vcHMJCT0gJnNvY19jYW1lcmFfaW9jdGxfb3BzOwogCXZkZXYtPnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0JdmRldi0+bWlub3IJCT0gLTE7CiAJdmRldi0+dHZub3JtcwkJPSBWNEwyX1NURF9VTktOT1dOOwogCiAJaWNkLT52ZGV2ID0gdmRldjsKQEAgLTEyOTEsOCArMTMwNCw3IEBACiAJICAgICFpY2QtPm9wcy0+c2V0X2J1c19wYXJhbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoaWNkLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAotCQkJCSAgICBpY2QtPnZkZXYtPm1pbm9yKTsKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoaWNkLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmaWNkLT5kZXYsICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTEzMzUsOSArMTM0NywxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIE9ubHkgY2FsbGVkIG9uIHJtbW9kIGZvciBlYWNoIHBsYXRmb3JtIGRldmljZSwgc2luY2UgdGhleSBhcmUgbm90CisvKgorICogT25seSBjYWxsZWQgb24gcm1tb2QgZm9yIGVhY2ggcGxhdGZvcm0gZGV2aWNlLCBzaW5jZSB0aGV5IGFyZSBub3QKICAqIGhvdC1wbHVnZ2FibGUuIE5vdyB3ZSBrbm93LCB0aGF0IGFsbCBvdXIgdXNlcnMgLSBob3N0cyBhbmQgZGV2aWNlcyBoYXZlCi0gKiBiZWVuIHVubG9hZGVkIGFscmVhZHkgKi8KKyAqIGJlZW4gdW5sb2FkZWQgYWxyZWFkeQorICovCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBzb2NfY2FtZXJhX3BkcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggYjZhNTc1Yy4uMTBiMDAzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTIyLDcgKzIyLDYgQEAKIAogc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBmb3JtYXQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqZ2V0X3ByaXYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTU4LDM2ICs1NywzNiBAQAogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAotCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCisJCQkJICAgICAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAotCXBpeC0+d2lkdGggPSBwLT5mb3JtYXQud2lkdGg7Ci0JcGl4LT5oZWlnaHQgPSBwLT5mb3JtYXQuaGVpZ2h0OworCW1mLT53aWR0aAk9IHAtPmZvcm1hdC53aWR0aDsKKwltZi0+aGVpZ2h0CT0gcC0+Zm9ybWF0LmhlaWdodDsKKwltZi0+Y29kZQk9IHAtPmZvcm1hdC5jb2RlOworCW1mLT5jb2xvcnNwYWNlCT0gcC0+Zm9ybWF0LmNvbG9yc3BhY2U7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc29jX2NhbWVyYV9wbGF0Zm9ybV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkJICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiAqcHJpdiA9IGdldF9wcml2KHBkZXYpOwotCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCXByaXYtPmZvcm1hdC5uYW1lID0gcC0+Zm9ybWF0X25hbWU7Ci0JcHJpdi0+Zm9ybWF0LmRlcHRoID0gcC0+Zm9ybWF0X2RlcHRoOwotCXByaXYtPmZvcm1hdC5mb3VyY2MgPSBwLT5mb3JtYXQucGl4ZWxmb3JtYXQ7Ci0JcHJpdi0+Zm9ybWF0LmNvbG9yc3BhY2UgPSBwLT5mb3JtYXQuY29sb3JzcGFjZTsKLQotCWljZC0+Zm9ybWF0cyA9ICZwcml2LT5mb3JtYXQ7Ci0JaWNkLT5udW1fZm9ybWF0cyA9IDE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgcGxhdGZvcm1fc3ViZGV2X2NvcmVfb3BzOwogCitzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGluZGV4LAorCQkJCQllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgKmNvZGUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKGluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpjb2RlID0gcC0+Zm9ybWF0LmNvZGU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHBsYXRmb3JtX3N1YmRldl92aWRlb19vcHMgPSB7CiAJLnNfc3RyZWFtCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zX3N0cmVhbSwKLQkudHJ5X2ZtdAk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdCwKKwkudHJ5X21idXNfZm10CT0gc29jX2NhbWVyYV9wbGF0Zm9ybV90cnlfZm10LAorCS5lbnVtX21idXNfZm10CT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9lbnVtX2ZtdCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHBsYXRmb3JtX3N1YmRldl9vcHMgPSB7CkBAIC0xMjgsMTMgKzEyNywxMCBAQAogCS8qIFNldCB0aGUgY29udHJvbCBkZXZpY2UgcmVmZXJlbmNlICovCiAJZGV2X3NldF9kcnZkYXRhKCZpY2QtPmRldiwgJnBkZXYtPmRldik7CiAKLQlpY2QtPnlfc2tpcF90b3AJCT0gMDsKLQlpY2QtPm9wcwkJPSAmc29jX2NhbWVyYV9wbGF0Zm9ybV9vcHM7CisJaWNkLT5vcHMgPSAmc29jX2NhbWVyYV9wbGF0Zm9ybV9vcHM7CiAKIAlpY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAotCXNvY19jYW1lcmFfcGxhdGZvcm1fdmlkZW9fcHJvYmUoaWNkLCBwZGV2KTsKLQogCXY0bDJfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgJnBsYXRmb3JtX3N1YmRldl9vcHMpOwogCXY0bDJfc2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldiwgcCk7CiAJc3RybmNweShwcml2LT5zdWJkZXYubmFtZSwgZGV2X25hbWUoJnBkZXYtPmRldiksIFY0TDJfU1VCREVWX05BTUVfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ1Yzg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIHNvYy1jYW1lcmEgbWVkaWEgYnVzIGhlbHBlciByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFidXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfbWVkaWFidXMuaD4KKworI2RlZmluZSBNQlVTX0lEWChmKSAoVjRMMl9NQlVTX0ZNVF8gIyMgZiAtIFY0TDJfTUJVU19GTVRfRklYRUQgLSAxKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10IG1idXNfZm10W10gPSB7CisJW01CVVNfSURYKFlVWVY4XzJYOF9MRSldID0geworCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLm5hbWUJCQk9ICJZVVlWIiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCisJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIFtNQlVTX0lEWChZVllVOF8yWDhfTEUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1lWWVUsCisJCS5uYW1lCQkJPSAiWVZZVSIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKKwl9LCBbTUJVU19JRFgoWVVZVjhfMlg4X0JFKV0gPSB7CisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQkubmFtZQkJCT0gIlVZVlkiLAorCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCisJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCisJfSwgW01CVVNfSURYKFlWWVU4XzJYOF9CRSldID0geworCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfVllVWSwKKwkJLm5hbWUJCQk9ICJWWVVZIiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCisJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIFtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0xFKV0gPSB7CisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NTUsCisJCS5uYW1lCQkJPSAiUkdCNTU1IiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCisJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIFtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0JFKV0gPSB7CisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NTVYLAorCQkubmFtZQkJCT0gIlJHQjU1NVgiLAorCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCisJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCisJfSwgW01CVVNfSURYKFJHQjU2NV8yWDhfTEUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKKwkJLm5hbWUJCQk9ICJSR0I1NjUiLAorCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCisJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCisJfSwgW01CVVNfSURYKFJHQjU2NV8yWDhfQkUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NVgsCisJCS5uYW1lCQkJPSAiUkdCNTY1WCIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKKwl9LCBbTUJVU19JRFgoU0JHR1I4XzFYOCldID0geworCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkubmFtZQkJCT0gIkJheWVyIDggQkdHUiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX05PTkUsCisJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCisJfSwgW01CVVNfSURYKFNCR0dSMTBfMVgxMCldID0geworCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKKwkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDEwLAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX0VYVEVORDE2LAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sIFtNQlVTX0lEWChHUkVZOF8xWDgpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX0dSRVksCisJCS5uYW1lCQkJPSAiR3JleSIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HX05PTkUsCisJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCisJfSwgW01CVVNfSURYKFkxMF8xWDEwKV0gPSB7CisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9ZMTAsCisJCS5uYW1lCQkJPSAiR3JleSAxMGJpdCIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSAxMCwKKwkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19FWFRFTkQxNiwKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKKwl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfTEUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCisJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKKwl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fTEUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCisJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURMTywKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKKwl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfQkUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCisJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9CRSwKKwl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fQkUpXSA9IHsKKwkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCisJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCisJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAorCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURMTywKKwkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9CRSwKKwl9LAorfTsKKworczMyIHNvY19tYnVzX2J5dGVzX3Blcl9saW5lKHUzMiB3aWR0aCwgY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICptZikKK3sKKwlzd2l0Y2ggKG1mLT5wYWNraW5nKSB7CisJY2FzZSBTT0NfTUJVU19QQUNLSU5HX05PTkU6CisJCXJldHVybiB3aWR0aCAqIG1mLT5iaXRzX3Blcl9zYW1wbGUgLyA4OworCWNhc2UgU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEk6CisJY2FzZSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURMTzoKKwljYXNlIFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTY6CisJCXJldHVybiB3aWR0aCAqIDI7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChzb2NfbWJ1c19ieXRlc19wZXJfbGluZSk7CisKK2NvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqc29jX21idXNfZ2V0X2ZtdGRlc2MoCisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUpCit7CisJaWYgKCh1bnNpZ25lZCBpbnQpKGNvZGUgLSBWNEwyX01CVVNfRk1UX0ZJWEVEKSA+IEFSUkFZX1NJWkUobWJ1c19mbXQpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbWJ1c19mbXQgKyBjb2RlIC0gVjRMMl9NQlVTX0ZNVF9GSVhFRCAtIDE7Cit9CitFWFBPUlRfU1lNQk9MKHNvY19tYnVzX2dldF9mbXRkZXNjKTsKKworc3RhdGljIGludCBfX2luaXQgc29jX21idXNfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc29jX21idXNfZXhpdCh2b2lkKQoreworfQorCittb2R1bGVfaW5pdChzb2NfbWJ1c19pbml0KTsKK21vZHVsZV9leGl0KHNvY19tYnVzX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oInNvYy1jYW1lcmEgbWVkaWEgYnVzIGludGVyZmFjZSIpOworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IDZiNDE4NjUuLmYwN2EwZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC0xMzA3LDcgKzEzMDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzdGtfdjRsX2RhdGEgPSB7CiAJLm5hbWUgPSAic3Rrd2ViY2FtIiwKLQkubWlub3IgPSAtMSwKIAkudHZub3JtcyA9IFY0TDJfU1REX1VOS05PV04sCiAJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX1VOS05PV04sCiAJLmZvcHMgPSAmdjRsX3N0a19mb3BzLApAQCAtMTMyNyw4ICsxMzI2LDggQEAKIAlpZiAoZXJyKQogCQlTVEtfRVJST1IoInY0bCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAllbHNlCi0JCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSBpcyBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlIgotCQkJIiAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5udW0pOworCQlTVEtfSU5GTygiU3ludGVrIFVTQjIuMCBDYW1lcmEgaXMgbm93IGNvbnRyb2xsaW5nIGRldmljZSAlc1xuIiwKKwkJCSB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZkZXYtPnZkZXYpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDE4LDggKzE0MTcsOCBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKIAlzdGtfcmVtb3ZlX3N5c2ZzX2ZpbGVzKCZkZXYtPnZkZXYpOwogCi0JU1RLX0lORk8oIlN5bnRlayBVU0IyLjAgQ2FtZXJhIHJlbGVhc2UgcmVzb3VyY2VzICIKLQkJInZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5udW0pOworCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSByZWxlYXNlIHJlc291cmNlcyBkZXZpY2UgJXNcbiIsCisJCSB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZkZXYtPnZkZXYpKTsKIAogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYwppbmRleCBlYWFkYTM5Li5hMDU3ODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYwpAQCAtMTkyMSw3ICsxOTIxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYV90ZW1wbGF0ZSA9IHsKIAkubmFtZSA9ICJTQUE3MTQ2QSIsCiAJLmZvcHMgPSAmc2FhX2ZvcHMsCi0JLm1pbm9yID0gLTEsCiAJLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKQEAgLTE5NzIsNyArMTk3MSw2IEBACiAKIAlzYWEtPmlkID0gcGRldi0+ZGV2aWNlOwogCXNhYS0+aXJxID0gcGRldi0+aXJxOwotCXNhYS0+dmlkZW9fZGV2Lm1pbm9yID0gLTE7CiAJc2FhLT5zYWE3MTQ2X2FkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZzYWEtPnJldmlzaW9uKTsKIApAQCAtMjEzNCw3ICsyMTMyLDcgQEAKIAlmcmVlX2lycShzYWEtPmlycSwgc2FhKTsKIAlpZiAoc2FhLT5zYWE3MTQ2X21lbSkKIAkJaW91bm1hcChzYWEtPnNhYTcxNDZfbWVtKTsKLQlpZiAoc2FhLT52aWRlb19kZXYubWlub3IgIT0gLTEpCisJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoJnNhYS0+dmlkZW9fZGV2KSkKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnNhYS0+dmlkZW9fZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKaW5kZXggNmE5MTcxNC4uNTkzOGFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCkBAIC0xNDA1LDcgKzE0MDUsNiBAQAogCS5uYW1lID0JCSJTVFYwNjgwIFVTQiBjYW1lcmEiLAogCS5mb3BzID0gICAgICAgICAmc3R2NjgwX2ZvcHMsCiAJLnJlbGVhc2UgPQl2aWRlb19kZXZpY2VfcmVsZWFzZSwKLQkubWlub3IgPSAJLTEsCiB9OwogCiBzdGF0aWMgaW50IHN0djY4MF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTE0NjcsOCArMTQ2Niw4IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZXJyb3JfdmRldjsKIAl9Ci0JUERFQlVHKDAsICJTVFYoaSk6IHJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsCi0JCXN0djY4MC0+dmRldi0+bnVtKTsKKwlQREVCVUcoMCwgIlNUVihpKTogcmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiAlcyIsCisJCXZpZGVvX2RldmljZV9ub2RlX25hbWUoc3R2NjgwLT52ZGV2KSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzdHY2ODApOwogCXJldHZhbCA9IHN0djY4MF9jcmVhdGVfc3lzZnNfZmlsZXMoc3R2NjgwLT52ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCmluZGV4IDI2OWFiMDQuLjViODAxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1lZGlhL3R3OTkxMC5oPgogCiAjZGVmaW5lIEdFVF9JRCh2YWwpICAoKHZhbCAmIDB4RjgpID4+IDMpCi0jZGVmaW5lIEdFVF9SZVYodmFsKSAodmFsICYgMHgwNykKKyNkZWZpbmUgR0VUX1JFVih2YWwpICh2YWwgJiAweDA3KQogCiAvKgogICogcmVnaXN0ZXIgb2Zmc2V0CkBAIC0xMTcsNyArMTE3LDcgQEAKICNkZWZpbmUgTENUTDI0CQkweDY4CiAjZGVmaW5lIExDVEwyNQkJMHg2OQogI2RlZmluZSBMQ1RMMjYJCTB4NkEKLSNkZWZpbmUgSFNHRUdJTgkJMHg2QgorI2RlZmluZSBIU0JFR0lOCQkweDZCCiAjZGVmaW5lIEhTRU5ECQkweDZDCiAjZGVmaW5lIE9WU0RMWQkJMHg2RAogI2RlZmluZSBPVlNFTkQJCTB4NkUKQEAgLTE1Miw3ICsxNTIsMTAgQEAKIAkJCSAvKiAxIDogbm9uLWF1dG8gKi8KICNkZWZpbmUgVlNDVEwgICAgICAgMHgwOCAvKiAxIDogVmVydGljYWwgb3V0IGN0cmwgYnkgRFZBTElEICovCiAJCQkgLyogMCA6IFZlcnRpY2FsIG91dCBjdHJsIGJ5IEhBQ1RJVkUgYW5kIERWQUxJRCAqLwotI2RlZmluZSBPRU4gICAgICAgICAweDA0IC8qIE91dHB1dCBFbmFibGUgdG9nZXRoZXIgd2l0aCBUUklfU0VMLiAqLworI2RlZmluZSBPRU5fVFJJX1NFTF9NQVNLCTB4MDcKKyNkZWZpbmUgT0VOX1RSSV9TRUxfQUxMX09OCTB4MDAgLyogRW5hYmxlIG91dHB1dCBmb3IgUmV2MC9SZXYxICovCisjZGVmaW5lIE9FTl9UUklfU0VMX0FMTF9PRkZfcjAJMHgwNiAvKiBBbGwgdHJpLXN0YXRlZCBmb3IgUmV2MCAqLworI2RlZmluZSBPRU5fVFJJX1NFTF9BTExfT0ZGX3IxCTB4MDcgLyogQWxsIHRyaS1zdGF0ZWQgZm9yIFJldjEgKi8KIAogLyogT1VUQ1RSMSAqLwogI2RlZmluZSBWU1BfTE8gICAgICAweDAwIC8qIDAgOiBWUyBwaW4gb3V0cHV0IHBvbGFyaXR5IGlzIGFjdGl2ZSBsb3cgKi8KQEAgLTE3OCwxMSArMTgxLDE4IEBACiAJCQkgICogYnV0IGFsbCByZWdpc3RlciBjb250ZW50IHJlbWFpbiB1bmNoYW5nZWQuCiAJCQkgICogVGhpcyBiaXQgaXMgc2VsZi1yZXNldHRpbmcuCiAJCQkgICovCisjZGVmaW5lIEFDTlRMMV9QRE5fTUFTSwkweDBlCisjZGVmaW5lIENMS19QRE4JCTB4MDggLyogc3lzdGVtIGNsb2NrIHBvd2VyIGRvd24gKi8KKyNkZWZpbmUgWV9QRE4JCTB4MDQgLyogTHVtYSBBREMgcG93ZXIgZG93biAqLworI2RlZmluZSBDX1BETgkJMHgwMiAvKiBDaHJvbWEgQURDIHBvd2VyIGRvd24gKi8KKworLyogQUNOVEwyICovCisjZGVmaW5lIEFDTlRMMl9QRE5fTUFTSwkweDQwCisjZGVmaW5lIFBMTF9QRE4JCTB4NDAgLyogUExMIHBvd2VyIGRvd24gKi8KIAogLyogVkJJQ05UTCAqLwotLyogUlRTRUwgOiBjb250cm9sIHRoZSByZWFsIHRpbWUgc2lnbmFsCi0qICAgICAgICAgIG91dHB1dCBmcm9tIHRoZSBNUE9VVCBwaW4KLSovCisKKy8qIFJUU0VMIDogY29udHJvbCB0aGUgcmVhbCB0aW1lIHNpZ25hbCBvdXRwdXQgZnJvbSB0aGUgTVBPVVQgcGluICovCiAjZGVmaW5lIFJUU0VMX01BU0sgIDB4MDcKICNkZWZpbmUgUlRTRUxfVkxPU1MgMHgwMCAvKiAwMDAwID0gVmlkZW8gbG9zcyAqLwogI2RlZmluZSBSVFNFTF9ITE9DSyAweDAxIC8qIDAwMDEgPSBILWxvY2sgKi8KQEAgLTIyNiwyOCArMjM2LDcgQEAKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgICAgICAgICAgICAgICAgc3ViZGV2OwogCXN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbyAgICAgICAqaW5mbzsKIAljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlOwotfTsKLQotLyoKLSAqIHJlZ2lzdGVyIHNldHRpbmdzCi0gKi8KLQotI2RlZmluZSBFTkRNQVJLRVIgeyAweGZmLCAweGZmIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCB0dzk5MTBfZGVmYXVsdF9yZWdzW10gPQotewotCXsgT1BGT1JNLCAgMHgwMCB9LAotCXsgT1VUQ1RSMSwgVlNQX0xPIHwgVlNTTF9WVkFMSUQgfCBIU1BfSEkgfCBIU1NMX0hTWU5DIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IHR3OTkxMF9jb2xvcl9mbXRbXSA9IHsKLQl7Ci0JCS5uYW1lICAgICAgID0gIlZZVVkiLAotCQkuZm91cmNjICAgICA9IFY0TDJfUElYX0ZNVF9WWVVZLAotCQkuZGVwdGggICAgICA9IDE2LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCi0JfQorCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb247CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsIHR3OTkxMF9udHNjX3NjYWxlc1tdID0gewpAQCAtMzQwLDEzICszMjksNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHR3OTkxMF9jcm9wcGluZ19jdHJsIHR3OTkxMF9jcm9wcGluZ19jdHJsID0gewotCS52ZGVsYXkgID0gMHgwMDEyLAotCS52YWN0aXZlID0gMHgwMEYwLAotCS5oZGVsYXkgID0gMHgwMDEwLAotCS5oYWN0aXZlID0gMHgwMkQwLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB0dzk5MTBfaHN5bmNfY3RybCB0dzk5MTBfaHN5bmNfY3RybCA9IHsKIAkuc3RhcnQgPSAweDAyNjAsCiAJLmVuZCAgID0gMHgwMzAwLApAQCAtMzYxLDYgKzM0MywxOSBAQAogCQkJICAgIHN1YmRldik7CiB9CiAKK3N0YXRpYyBpbnQgdHc5OTEwX21hc2tfc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCisJCQkgICB1OCBtYXNrLCB1OCBzZXQpCit7CisJczMyIHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBzZXQgJiBtYXNrOworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5kLCB2YWwpOworfQorCiBzdGF0aWMgaW50IHR3OTkxMF9zZXRfc2NhbGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlKQogewpAQCAtMzgzLDQ3ICszNzgsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9zZXRfY3JvcHBpbmcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHc5OTEwX2Nyb3BwaW5nX2N0cmwgKmNyb3BwaW5nKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQ1JPUF9ISSwKLQkJCQkJKGNyb3BwaW5nLT52ZGVsYXkgICYgMHgwMzAwKSA+PiAyIHwKLQkJCQkJKGNyb3BwaW5nLT52YWN0aXZlICYgMHgwMzAwKSA+PiA0IHwKLQkJCQkJKGNyb3BwaW5nLT5oZGVsYXkgICYgMHgwMzAwKSA+PiA2IHwKLQkJCQkJKGNyb3BwaW5nLT5oYWN0aXZlICYgMHgwMzAwKSA+PiA4KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBWREVMQVlfTE8sCi0JCQkJCWNyb3BwaW5nLT52ZGVsYXkgJiAweDAwRkYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFZBQ1RJVkVfTE8sCi0JCQkJCWNyb3BwaW5nLT52YWN0aXZlICYgMHgwMEZGKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBIREVMQVlfTE8sCi0JCQkJCWNyb3BwaW5nLT5oZGVsYXkgJiAweDAwRkYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEhBQ1RJVkVfTE8sCi0JCQkJCWNyb3BwaW5nLT5oYWN0aXZlICYgMHgwMEZGKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdHc5OTEwX3NldF9oc3luYyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICAgIGNvbnN0IHN0cnVjdCB0dzk5MTBfaHN5bmNfY3RybCAqaHN5bmMpCiB7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CiAJaW50IHJldDsKIAogCS8qIGJpdCAxMCAtIDMgKi8KLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSFNHRUdJTiwKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSFNCRUdJTiwKIAkJCQkJKGhzeW5jLT5zdGFydCAmIDB4MDdGOCkgPj4gMyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC00MzQsNTIgKzM5Niw0MyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJLyogU28gZmFyIG9ubHkgcmV2aXNpb25zIDAgYW5kIDEgaGF2ZSBiZWVuIHNlZW4gKi8KIAkvKiBiaXQgMiAtIDAgKi8KLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBIU0xPV0NUTCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSFNMT1dDVEwsCi0JCQkJCShyZXQgJiAweDg4KSAgICAgICAgICAgICAgICAgfAotCQkJCQkoaHN5bmMtPnN0YXJ0ICYgMHgwMDA3KSA8PCA0IHwKLQkJCQkJKGhzeW5jLT5lbmQgICAmIDB4MDAwNykpOworCWlmICgxID09IHByaXYtPnJldmlzaW9uKQorCQlyZXQgPSB0dzk5MTBfbWFza19zZXQoY2xpZW50LCBIU0xPV0NUTCwgMHg3NywKKwkJCQkgICAgICAoaHN5bmMtPnN0YXJ0ICYgMHgwMDA3KSA8PCA0IHwKKwkJCQkgICAgICAoaHN5bmMtPmVuZCAgICYgMHgwMDA3KSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF93cml0ZV9hcnJheShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQotewotCXdoaWxlICh2YWxzLT5yZWdfbnVtICE9IDB4ZmYpIHsKLQkJaW50IHJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJICAgIHZhbHMtPnJlZ19udW0sCi0JCQkJCQkgICAgdmFscy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCXZhbHMrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHc5OTEwX21hc2tfc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCi0JCQkgICB1OCBtYXNrLCB1OCBzZXQpCi17Ci0JczMyIHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQpOwotCWlmICh2YWwgPCAwKQotCQlyZXR1cm4gdmFsOwotCi0JdmFsICY9IH5tYXNrOwotCXZhbCB8PSBzZXQgJiBtYXNrOwotCi0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5kLCB2YWwpOwotfQotCiBzdGF0aWMgdm9pZCB0dzk5MTBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQUNOVEwxLCBTUkVTRVQpOworCXR3OTkxMF9tYXNrX3NldChjbGllbnQsIEFDTlRMMSwgU1JFU0VULCBTUkVTRVQpOwogCW1zbGVlcCgxKTsKIH0KIAorc3RhdGljIGludCB0dzk5MTBfcG93ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCXU4IGFjbnRsMTsKKwl1OCBhY250bDI7CisKKwlpZiAoZW5hYmxlKSB7CisJCWFjbnRsMSA9IDA7CisJCWFjbnRsMiA9IDA7CisJfSBlbHNlIHsKKwkJYWNudGwxID0gQ0xLX1BETiB8IFlfUEROIHwgQ19QRE47CisJCWFjbnRsMiA9IFBMTF9QRE47CisJfQorCisJcmV0ID0gdHc5OTEwX21hc2tfc2V0KGNsaWVudCwgQUNOVEwxLCBBQ05UTDFfUEROX01BU0ssIGFjbnRsMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gdHc5OTEwX21hc2tfc2V0KGNsaWVudCwgQUNOVEwyLCBBQ05UTDJfUEROX01BU0ssIGFjbnRsMik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwqCiB0dzk5MTBfc2VsZWN0X25vcm0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKIHsKQEAgLTUxOCwyNyArNDcxLDYyIEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOworCXU4IHZhbDsKKwlpbnQgcmV0OwogCi0JaWYgKCFlbmFibGUpCi0JCXJldHVybiAwOworCWlmICghZW5hYmxlKSB7CisJCXN3aXRjaCAocHJpdi0+cmV2aXNpb24pIHsKKwkJY2FzZSAwOgorCQkJdmFsID0gT0VOX1RSSV9TRUxfQUxMX09GRl9yMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl2YWwgPSBPRU5fVFJJX1NFTF9BTExfT0ZGX3IxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInVuLXN1cHBvcnRlZCByZXZpc2lvblxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXZhbCA9IE9FTl9UUklfU0VMX0FMTF9PTjsKIAotCWlmICghcHJpdi0+c2NhbGUpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJub3JtIHNlbGVjdCBlcnJvclxuIik7Ci0JCXJldHVybiAtRVBFUk07CisJCWlmICghcHJpdi0+c2NhbGUpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibm9ybSBzZWxlY3QgZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXMgJWR4JWRcbiIsCisJCQlwcml2LT5zY2FsZS0+bmFtZSwKKwkJCXByaXYtPnNjYWxlLT53aWR0aCwKKwkJCXByaXYtPnNjYWxlLT5oZWlnaHQpOwogCX0KIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXMgJWR4JWRcbiIsCi0JCSBwcml2LT5zY2FsZS0+bmFtZSwKLQkJIHByaXYtPnNjYWxlLT53aWR0aCwKLQkJIHByaXYtPnNjYWxlLT5oZWlnaHQpOworCXJldCA9IHR3OTkxMF9tYXNrX3NldChjbGllbnQsIE9QRk9STSwgT0VOX1RSSV9TRUxfTUFTSywgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCXJldHVybiAwOworCXJldHVybiB0dzk5MTBfcG93ZXIoY2xpZW50LCBlbmFibGUpOwogfQogCiBzdGF0aWMgaW50IHR3OTkxMF9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OworCXU4IHZhbCA9IFZTU0xfVlZBTElEIHwgSFNTTF9EVkFMSUQ7CisKKwkvKgorCSAqIHNldCBPVVRDVFIxCisJICoKKwkgKiBXZSB1c2UgVlZBTElEIGFuZCBEVkFMSUQgc2lnbmFscyB0byBjb250cm9sIFZTWU5DIGFuZCBIU1lOQworCSAqIG91dHB1dHMsIGluIHRoaXMgbW9kZSB0aGVpciBwb2xhcml0eSBpcyBpbnZlcnRlZC4KKwkgKi8KKwlpZiAoZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XKQorCQl2YWwgfD0gSFNQX0hJOworCisJaWYgKGZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0xPVykKKwkJdmFsIHw9IFZTUF9ISTsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1VUQ1RSMSwgdmFsKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdHc5OTEwX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKQEAgLTU0OCw2ICs1MzYsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyAgfCBTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XICB8CiAJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBwcml2LT5pbmZvLT5idXN3aWR0aDsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKQEAgLTU3Niw4ICs1NjUsMTEgQEAKIHN0YXRpYyBpbnQgdHc5OTEwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7CisKIAlpZC0+aWRlbnQgPSBWNEwyX0lERU5UX1RXOTkxMDsKLQlpZC0+cmV2aXNpb24gPSAwOworCWlkLT5yZXZpc2lvbiA9IHByaXYtPnJldmlzaW9uOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01OTYsNyArNTg4LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIHJldCAgICAgID0gaW50CisJLyoKKwkgKiByZXQgICAgICA9IGludAogCSAqIHJlZy0+dmFsID0gX191NjQKIAkgKi8KIAlyZWctPnZhbCA9IChfX3U2NClyZXQ7CkBAIC02MzcsOSArNjMwLDYgQEAKIAkgKiByZXNldCBoYXJkd2FyZQogCSAqLwogCXR3OTkxMF9yZXNldChjbGllbnQpOwotCXJldCA9IHR3OTkxMF93cml0ZV9hcnJheShjbGllbnQsIHR3OTkxMF9kZWZhdWx0X3JlZ3MpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOwogCiAJLyoKIAkgKiBzZXQgYnVzIHdpZHRoCkBAIC02ODgsMTMgKzY3OCw2IEBACiAJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CiAKIAkvKgotCSAqIHNldCBjcm9wcGluZwotCSAqLwotCXJldCA9IHR3OTkxMF9zZXRfY3JvcHBpbmcoY2xpZW50LCAmdHc5OTEwX2Nyb3BwaW5nX2N0cmwpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOwotCi0JLyoKIAkgKiBzZXQgaHN5bmMKIAkgKi8KIAlyZXQgPSB0dzk5MTBfc2V0X2hzeW5jKGNsaWVudCwgJnR3OTkxMF9oc3luY19jdHJsKTsKQEAgLTc2MiwxMSArNzQ1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHc5OTEwX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgdHc5OTEwX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gdG9fdHc5OTEwKGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKIAlpZiAoIXByaXYtPnNjYWxlKSB7CiAJCWludCByZXQ7CkBAIC03ODMsNzQgKzc2Niw3NiBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlmLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQlwaXgtPndpZHRoCQk9IHByaXYtPnNjYWxlLT53aWR0aDsKLQlwaXgtPmhlaWdodAkJPSBwcml2LT5zY2FsZS0+aGVpZ2h0OwotCXBpeC0+cGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfVllVWTsKLQlwaXgtPmNvbG9yc3BhY2UJCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQlwaXgtPmZpZWxkCQk9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwltZi0+d2lkdGgJPSBwcml2LT5zY2FsZS0+d2lkdGg7CisJbWYtPmhlaWdodAk9IHByaXYtPnNjYWxlLT5oZWlnaHQ7CisJbWYtPmNvZGUJPSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOF9CRTsKKwltZi0+Y29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHOworCW1mLT5maWVsZAk9IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IHR3OTkxMF9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNkLT5wcml2OwogCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCS8qIFNlZSB0dzk5MTBfc19jcm9wKCkgLSBubyBwcm9wZXIgY3JvcHBpbmcgc3VwcG9ydCAqLwogCXN0cnVjdCB2NGwyX2Nyb3AgYSA9IHsKIAkJLmMgPSB7CiAJCQkubGVmdAk9IDAsCiAJCQkudG9wCT0gMCwKLQkJCS53aWR0aAk9IHBpeC0+d2lkdGgsCi0JCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJCQkud2lkdGgJPSBtZi0+d2lkdGgsCisJCQkuaGVpZ2h0CT0gbWYtPmhlaWdodCwKIAkJfSwKIAl9OwotCWludCBpLCByZXQ7CisJaW50IHJldDsKKworCVdBUk5fT04obWYtPmZpZWxkICE9IFY0TDJfRklFTERfQU5ZICYmCisJCW1mLT5maWVsZCAhPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQpOwogCiAJLyoKIAkgKiBjaGVjayBjb2xvciBmb3JtYXQKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dzk5MTBfY29sb3JfZm10KTsgaSsrKQotCQlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSB0dzk5MTBfY29sb3JfZm10W2ldLmZvdXJjYykKLQkJCWJyZWFrOwotCi0JaWYgKGkgPT0gQVJSQVlfU0laRSh0dzk5MTBfY29sb3JfZm10KSkKKwlpZiAobWYtPmNvZGUgIT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWYtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKKwogCXJldCA9IHR3OTkxMF9zX2Nyb3Aoc2QsICZhKTsKIAlpZiAoIXJldCkgewotCQlwaXgtPndpZHRoID0gcHJpdi0+c2NhbGUtPndpZHRoOwotCQlwaXgtPmhlaWdodCA9IHByaXYtPnNjYWxlLT5oZWlnaHQ7CisJCW1mLT53aWR0aAk9IHByaXYtPnNjYWxlLT53aWR0aDsKKwkJbWYtPmhlaWdodAk9IHByaXYtPnNjYWxlLT5oZWlnaHQ7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHc5OTEwX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCB0dzk5MTBfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2QtPnByaXY7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCWNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCAqc2NhbGU7CiAKLQlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gcGl4LT5maWVsZCkgewotCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCX0gZWxzZSBpZiAoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEICE9IHBpeC0+ZmllbGQpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGaWVsZCB0eXBlIGludmFsaWQuXG4iKTsKKwlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gbWYtPmZpZWxkKSB7CisJCW1mLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVDsKKwl9IGVsc2UgaWYgKFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCAhPSBtZi0+ZmllbGQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGaWVsZCB0eXBlICVkIGludmFsaWQuXG4iLCBtZi0+ZmllbGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltZi0+Y29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFOworCW1mLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUc7CisKIAkvKgogCSAqIHNlbGVjdCBzdWl0YWJsZSBub3JtCiAJICovCi0Jc2NhbGUgPSB0dzk5MTBfc2VsZWN0X25vcm0oaWNkLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJc2NhbGUgPSB0dzk5MTBfc2VsZWN0X25vcm0oaWNkLCBtZi0+d2lkdGgsIG1mLT5oZWlnaHQpOwogCWlmICghc2NhbGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGl4LT53aWR0aCAgPSBzY2FsZS0+d2lkdGg7Ci0JcGl4LT5oZWlnaHQgPSBzY2FsZS0+aGVpZ2h0OworCW1mLT53aWR0aAk9IHNjYWxlLT53aWR0aDsKKwltZi0+aGVpZ2h0CT0gc2NhbGUtPmhlaWdodDsKIAogCXJldHVybiAwOwogfQpAQCAtODU5LDcgKzg0NCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IHRvX3R3OTkxMChjbGllbnQpOwotCXMzMiB2YWw7CisJczMyIGlkOwogCiAJLyoKIAkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgpAQCAtODc4LDIzICs4NjMsMjQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWNkLT5mb3JtYXRzICAgICA9IHR3OTkxMF9jb2xvcl9mbXQ7Ci0JaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUodHc5OTEwX2NvbG9yX2ZtdCk7Ci0KIAkvKgogCSAqIGNoZWNrIGFuZCBzaG93IFByb2R1Y3QgSUQKKwkgKiBTbyBmYXIgb25seSByZXZpc2lvbnMgMCBhbmQgMSBoYXZlIGJlZW4gc2VlbgogCSAqLwotCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIElEKTsKKwlpZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIElEKTsKKwlwcml2LT5yZXZpc2lvbiA9IEdFVF9SRVYoaWQpOworCWlkID0gR0VUX0lEKGlkKTsKIAotCWlmICgweDBCICE9IEdFVF9JRCh2YWwpIHx8Ci0JICAgIDB4MDAgIT0gR0VUX1JlVih2YWwpKSB7CisJaWYgKDB4MEIgIT0gaWQgfHwKKwkgICAgMHgwMSA8IHByaXYtPnJldmlzaW9uKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJIlByb2R1Y3QgSUQgZXJyb3IgJXg6JXhcbiIsIEdFVF9JRCh2YWwpLCBHRVRfUmVWKHZhbCkpOworCQkJIlByb2R1Y3QgSUQgZXJyb3IgJXg6JXhcbiIsCisJCQlpZCwgcHJpdi0+cmV2aXNpb24pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsCi0JCSAidHc5OTEwIFByb2R1Y3QgSUQgJTB4OiUweFxuIiwgR0VUX0lEKHZhbCksIEdFVF9SZVYodmFsKSk7CisJCSAidHc5OTEwIFByb2R1Y3QgSUQgJTB4OiUweFxuIiwgaWQsIHByaXYtPnJldmlzaW9uKTsKIAogCWljZC0+dmRldi0+dHZub3JtcyAgICAgID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTDsKIAlpY2QtPnZkZXYtPmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0M7CkBAIC05MTcsMTQgKzkwMywyNSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgaW50IHR3OTkxMF9lbnVtX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgaW5kZXgsCisJCQkgICBlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgKmNvZGUpCit7CisJaWYgKGluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpjb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDhfQkU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHR3OTkxMF9zdWJkZXZfdmlkZW9fb3BzID0gewogCS5zX3N0cmVhbQk9IHR3OTkxMF9zX3N0cmVhbSwKLQkuZ19mbXQJCT0gdHc5OTEwX2dfZm10LAotCS5zX2ZtdAkJPSB0dzk5MTBfc19mbXQsCi0JLnRyeV9mbXQJPSB0dzk5MTBfdHJ5X2ZtdCwKKwkuZ19tYnVzX2ZtdAk9IHR3OTkxMF9nX2ZtdCwKKwkuc19tYnVzX2ZtdAk9IHR3OTkxMF9zX2ZtdCwKKwkudHJ5X21idXNfZm10CT0gdHc5OTEwX3RyeV9mbXQsCiAJLmNyb3BjYXAJPSB0dzk5MTBfY3JvcGNhcCwKIAkuZ19jcm9wCQk9IHR3OTkxMF9nX2Nyb3AsCiAJLnNfY3JvcAkJPSB0dzk5MTBfc19jcm9wLAorCS5lbnVtX21idXNfZm10CT0gdHc5OTEwX2VudW1fZm10LAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdHc5OTEwX3N1YmRldl9vcHMgPSB7CkBAIC05NTQsMTAgKzk1MSwxMCBAQAogCX0KIAogCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwotCWlmICghaWNsKQorCWlmICghaWNsIHx8ICFpY2wtPnByaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5mbyA9IGNvbnRhaW5lcl9vZihpY2wsIHN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbywgbGluayk7CisJaW5mbyA9IGljbC0+cHJpdjsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKQEAgLTk3NSw3ICs5NzIsNyBAQAogCXY0bDJfaTJjX3N1YmRldl9pbml0KCZwcml2LT5zdWJkZXYsIGNsaWVudCwgJnR3OTkxMF9zdWJkZXZfb3BzKTsKIAogCWljZC0+b3BzICAgICA9ICZ0dzk5MTBfb3BzOwotCWljZC0+aWZhY2UgICA9IGluZm8tPmxpbmsuYnVzX2lkOworCWljZC0+aWZhY2UgICA9IGljbC0+YnVzX2lkOwogCiAJcmV0ID0gdHc5OTEwX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKaW5kZXggZGVhOGIzMi4uNWFjMzdjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwpAQCAtMTA1Myw5ICsxMDUzLDkgQEAKIAkJCSAiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIHN1Y2Nlc3NmdWxcbiIsIF9fZnVuY19fKTsKIAl9CiAKLQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzIG9uIC9kZXYvdmlkZW8lZDogY2FudmFzPSVzIHZpZGVvc2l6ZT0lc1xuIiwKKwlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzIG9uICVzOiBjYW52YXM9JXMgdmlkZW9zaXplPSVzXG4iLAogCQkgKHV2ZC0+aGFuZGxlICE9IE5VTEwpID8gdXZkLT5oYW5kbGUtPmRydk5hbWUgOiAiPz8/IiwKLQkJIHV2ZC0+dmRldi5udW0sIHRtcDIsIHRtcDEpOworCQkgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmdXZkLT52ZGV2KSwgdG1wMiwgdG1wMSk7CiAKIAl1c2JfZ2V0X2Rldih1dmQtPmRldik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKaW5kZXggNDVmY2UzOS4uNjAzMDQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwpAQCAtNzk2LDcgKzc5Niw2IEBACiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2aWNhbV90ZW1wbGF0ZSA9IHsKIAkubmFtZSAJCT0gIlZpQ2FtLWJhc2VkIFVTQiBDYW1lcmEiLAogCS5mb3BzIAkJPSAmdmljYW1fZm9wcywKLQkubWlub3IgCQk9IC0xLAogCS5yZWxlYXNlIAk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIApAQCAtODczLDggKzg3Miw4IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlZpQ2FtIHdlYmNhbSBkcml2ZXIgbm93IGNvbnRyb2xsaW5nIHZpZGVvIGRldmljZSAlZFxuIiwKLQkJCWNhbS0+dmRldi5udW0pOworCXByaW50ayhLRVJOX0lORk8gIlZpQ2FtIHdlYmNhbSBkcml2ZXIgbm93IGNvbnRyb2xsaW5nIGRldmljZSAlc1xuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmY2FtLT52ZGV2KSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBjYW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKaW5kZXggYzE5ZjUxZC4uMDYxMzkyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwpAQCAtMjE1LDggKzIxNSw4IEBACiAJbWVtY3B5KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAmaTJjX2FkYXBfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKIAotCXNwcmludGYodXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lICsgc3RybGVuKHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSksCi0JCSIgIyVkIiwgdXNidmlzaW9uLT52ZGV2LT5udW0pOworCXNwcmludGYodXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lLCAiJXMtJWQtJXMiLCBpMmNfYWRhcF90ZW1wbGF0ZS5uYW1lLAorCQl1c2J2aXNpb24tPmRldi0+YnVzLT5idXNudW0sIHVzYnZpc2lvbi0+ZGV2LT5kZXZwYXRoKTsKIAlQREVCVUcoREJHX0kyQywiQWRhcHRlcm5hbWU6ICVzIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKIAl1c2J2aXNpb24tPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmdXNidmlzaW9uLT5kZXYtPmRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwppbmRleCBjMDdiMGFjLi4xMDU0NTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwpAQCAtMTMyOCw3ICsxMzI4LDYgQEAKIAkuaW9jdGxfb3BzIAk9ICZ1c2J2aXNpb25faW9jdGxfb3BzLAogCS5uYW1lICAgICAgICAgICA9ICJ1c2J2aXNpb24tdmlkZW8iLAogCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCi0JLm1pbm9yCQk9IC0xLAogCS50dm5vcm1zICAgICAgICAgICAgICA9IFVTQlZJU0lPTl9OT1JNUywKIAkuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUwKIH07CkBAIC0xMzYyLDcgKzEzNjEsNiBAQAogCS5mb3BzCQk9ICZ1c2J2aXNpb25fcmFkaW9fZm9wcywKIAkubmFtZSAgICAgICAgICAgPSAidXNidmlzaW9uLXJhZGlvIiwKIAkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotCS5taW5vcgkJPSAtMSwKIAkuaW9jdGxfb3BzIAk9ICZ1c2J2aXNpb25fcmFkaW9faW9jdGxfb3BzLAogCiAJLnR2bm9ybXMgICAgICAgICAgICAgID0gVVNCVklTSU9OX05PUk1TLApAQCAtMTM4Miw3ICsxMzgwLDYgQEAKIAkuZm9wcwkJPSAmdXNidmlzaW9uX3ZiaV9mb3BzLAogCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiAJLm5hbWUgICAgICAgICAgID0gInVzYnZpc2lvbi12YmkiLAotCS5taW5vcgkJPSAtMSwKIH07CiAKIApAQCAtMTQwNCw3ICsxNDAxLDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCSp2ZGV2ID0gKnZkZXZfdGVtcGxhdGU7Ci0vLwl2ZGV2LT5taW5vciAgID0gLTE7CiAJdmRldi0+djRsMl9kZXYgPSAmdXNidmlzaW9uLT52NGwyX2RldjsKIAlzbnByaW50Zih2ZGV2LT5uYW1lLCBzaXplb2YodmRldi0+bmFtZSksICIlcyIsIG5hbWUpOwogCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIHVzYnZpc2lvbik7CkBAIC0xNDE2LDkgKzE0MTIsOSBAQAogewogCS8vIHZiaSBEZXZpY2U6CiAJaWYgKHVzYnZpc2lvbi0+dmJpKSB7Ci0JCVBERUJVRyhEQkdfUFJPQkUsICJ1bnJlZ2lzdGVyIC9kZXYvdmJpJWQgW3Y0bDJdIiwKLQkJICAgICAgIHVzYnZpc2lvbi0+dmJpLT5udW0pOwotCQlpZiAodXNidmlzaW9uLT52YmktPm1pbm9yICE9IC0xKSB7CisJCVBERUJVRyhEQkdfUFJPQkUsICJ1bnJlZ2lzdGVyICVzIFt2NGwyXSIsCisJCSAgICAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHVzYnZpc2lvbi0+dmJpKSk7CisJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKHVzYnZpc2lvbi0+dmJpKSkgewogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT52YmkpOwogCQl9IGVsc2UgewogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodXNidmlzaW9uLT52YmkpOwpAQCAtMTQyOCw5ICsxNDI0LDkgQEAKIAogCS8vIFJhZGlvIERldmljZToKIAlpZiAodXNidmlzaW9uLT5yZGV2KSB7Ci0JCVBERUJVRyhEQkdfUFJPQkUsICJ1bnJlZ2lzdGVyIC9kZXYvcmFkaW8lZCBbdjRsMl0iLAotCQkgICAgICAgdXNidmlzaW9uLT5yZGV2LT5udW0pOwotCQlpZiAodXNidmlzaW9uLT5yZGV2LT5taW5vciAhPSAtMSkgeworCQlQREVCVUcoREJHX1BST0JFLCAidW5yZWdpc3RlciAlcyBbdjRsMl0iLAorCQkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh1c2J2aXNpb24tPnJkZXYpKTsKKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQodXNidmlzaW9uLT5yZGV2KSkgewogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT5yZGV2KTsKIAkJfSBlbHNlIHsKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHVzYnZpc2lvbi0+cmRldik7CkBAIC0xNDQwLDkgKzE0MzYsOSBAQAogCiAJLy8gVmlkZW8gRGV2aWNlOgogCWlmICh1c2J2aXNpb24tPnZkZXYpIHsKLQkJUERFQlVHKERCR19QUk9CRSwgInVucmVnaXN0ZXIgL2Rldi92aWRlbyVkIFt2NGwyXSIsCi0JCSAgICAgICB1c2J2aXNpb24tPnZkZXYtPm51bSk7Ci0JCWlmICh1c2J2aXNpb24tPnZkZXYtPm1pbm9yICE9IC0xKSB7CisJCVBERUJVRyhEQkdfUFJPQkUsICJ1bnJlZ2lzdGVyICVzIFt2NGwyXSIsCisJCSAgICAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHVzYnZpc2lvbi0+dmRldikpOworCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCh1c2J2aXNpb24tPnZkZXYpKSB7CiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnZkZXYpOwogCQl9IGVsc2UgewogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodXNidmlzaW9uLT52ZGV2KTsKQEAgLTE0NjYsOCArMTQ2Miw4IEBACiAJCQkJICB2aWRlb19ucik8MCkgewogCQlnb3RvIGVycl9leGl0OwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJVU0JWaXNpb25bJWRdOiByZWdpc3RlcmVkIFVTQlZpc2lvbiBWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIFt2NGwyXVxuIiwKLQkgICAgICAgdXNidmlzaW9uLT5uciwgdXNidmlzaW9uLT52ZGV2LT5udW0pOworCXByaW50ayhLRVJOX0lORk8gIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFZpZGVvIGRldmljZSAlcyBbdjRsMl1cbiIsCisJICAgICAgIHVzYnZpc2lvbi0+bnIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodXNidmlzaW9uLT52ZGV2KSk7CiAKIAkvLyBSYWRpbyBEZXZpY2U6CiAJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5SYWRpbykgewpAQCAtMTQ4Myw4ICsxNDc5LDggQEAKIAkJCQkJICByYWRpb19ucik8MCkgewogCQkJZ290byBlcnJfZXhpdDsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPICJVU0JWaXNpb25bJWRdOiByZWdpc3RlcmVkIFVTQlZpc2lvbiBSYWRpbyBkZXZpY2UgL2Rldi9yYWRpbyVkIFt2NGwyXVxuIiwKLQkJICAgICAgIHVzYnZpc2lvbi0+bnIsIHVzYnZpc2lvbi0+cmRldi0+bnVtKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gUmFkaW8gZGV2aWNlICVzIFt2NGwyXVxuIiwKKwkJICAgICAgIHVzYnZpc2lvbi0+bnIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodXNidmlzaW9uLT5yZGV2KSk7CiAJfQogCS8vIHZiaSBEZXZpY2U6CiAJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS52YmkpIHsKQEAgLTE0OTksOCArMTQ5NSw4IEBACiAJCQkJCSAgdmJpX25yKTwwKSB7CiAJCQlnb3RvIGVycl9leGl0OwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFZCSSBkZXZpY2UgL2Rldi92YmklZCBbdjRsMl0gKE5vdCBXb3JraW5nIFlldCEpXG4iLAotCQkgICAgICAgdXNidmlzaW9uLT5uciwgdXNidmlzaW9uLT52YmktPm51bSk7CisJCXByaW50ayhLRVJOX0lORk8gIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFZCSSBkZXZpY2UgJXMgW3Y0bDJdIChOb3QgV29ya2luZyBZZXQhKVxuIiwKKwkJICAgICAgIHVzYnZpc2lvbi0+bnIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodXNidmlzaW9uLT52YmkpKTsKIAl9CiAJLy8gYWxsIGRvbmUKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCBjMzFiYzUwLi4zOTFjY2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC0xNjUxLDcgKzE2NTEsNiBAQAogCSAqIGdldCBhbm90aGVyIG9uZS4KIAkgKi8KIAl2ZGV2LT5wYXJlbnQgPSAmZGV2LT5pbnRmLT5kZXY7Ci0JdmRldi0+bWlub3IgPSAtMTsKIAl2ZGV2LT5mb3BzID0gJnV2Y19mb3BzOwogCXZkZXYtPnJlbGVhc2UgPSB1dmNfcmVsZWFzZTsKIAlzdHJsY3B5KHZkZXYtPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mIHZkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwppbmRleCAwNTEzOWE0Li45YTk4MDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCXV2Y193YXJuX29uY2Uoc3RyZWFtLT5kZXYsIFVWQ19XQVJOX01JTk1BWCwgIlVWQyBub24gIgogCQkJImNvbXBsaWFuY2UgLSBHRVRfTUlOL01BWChQUk9CRSkgaW5jb3JyZWN0bHkgIgogCQkJInN1cHBvcnRlZC4gRW5hYmxpbmcgd29ya2Fyb3VuZC5cbiIpOwotCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mIGN0cmwpOworCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mICpjdHJsKTsKIAkJY3RybC0+d0NvbXBRdWFsaXR5ID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilkYXRhKTsKIAkJcmV0ID0gMDsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggZThlNWFmZi4uMzZiNWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMTAyNCwzICsxMDI0LDUwIEBACiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsX2JvdW5kX2FsaWduX2ltYWdlKTsKKworLyoqCisgKiB2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyAtIGZpbGwgZGVzY3JpcHRpb24gb2YgYSBkaWdpdGFsIHZpZGVvIHByZXNldAorICogQHByZXNldCAtIHByZXNldCB2YWx1ZQorICogQGluZm8gLSBwb2ludGVyIHRvIHN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0CisgKgorICogZHJpdmVycyBjYW4gdXNlIHRoaXMgaGVscGVyIGZ1bmN0aW9uIHRvIGZpbGwgZGVzY3JpcHRpb24gb2YgZHYgcHJlc2V0CisgKiBpbiBpbmZvLgorICovCitpbnQgdjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8odTMyIHByZXNldCwgc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgKmluZm8pCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2R2X3ByZXNldF9pbmZvIHsKKwkJdTE2IHdpZHRoOworCQl1MTYgaGVpZ2h0OworCQljb25zdCBjaGFyICpuYW1lOworCX0gZHZfcHJlc2V0c1tdID0geworCQl7IDAsIDAsICJJbnZhbGlkIiB9LAkJLyogVjRMMl9EVl9JTlZBTElEICovCisJCXsgNzIwLCAgNDgwLCAiNDgwcEA1OS45NCIgfSwJLyogVjRMMl9EVl80ODBQNTlfOTQgKi8KKwkJeyA3MjAsICA1NzYsICI1NzZwQDUwIiB9LAkvKiBWNEwyX0RWXzU3NlA1MCAqLworCQl7IDEyODAsIDcyMCwgIjcyMHBAMjQiIH0sCS8qIFY0TDJfRFZfNzIwUDI0ICovCisJCXsgMTI4MCwgNzIwLCAiNzIwcEAyNSIgfSwJLyogVjRMMl9EVl83MjBQMjUgKi8KKwkJeyAxMjgwLCA3MjAsICI3MjBwQDMwIiB9LAkvKiBWNEwyX0RWXzcyMFAzMCAqLworCQl7IDEyODAsIDcyMCwgIjcyMHBANTAiIH0sCS8qIFY0TDJfRFZfNzIwUDUwICovCisJCXsgMTI4MCwgNzIwLCAiNzIwcEA1OS45NCIgfSwJLyogVjRMMl9EVl83MjBQNTlfOTQgKi8KKwkJeyAxMjgwLCA3MjAsICI3MjBwQDYwIiB9LAkvKiBWNEwyX0RWXzcyMFA2MCAqLworCQl7IDE5MjAsIDEwODAsICIxMDgwaUAyOS45NyIgfSwJLyogVjRMMl9EVl8xMDgwSTI5Xzk3ICovCisJCXsgMTkyMCwgMTA4MCwgIjEwODBpQDMwIiB9LAkvKiBWNEwyX0RWXzEwODBJMzAgKi8KKwkJeyAxOTIwLCAxMDgwLCAiMTA4MGlAMjUiIH0sCS8qIFY0TDJfRFZfMTA4MEkyNSAqLworCQl7IDE5MjAsIDEwODAsICIxMDgwaUA1MCIgfSwJLyogVjRMMl9EVl8xMDgwSTUwICovCisJCXsgMTkyMCwgMTA4MCwgIjEwODBpQDYwIiB9LAkvKiBWNEwyX0RWXzEwODBJNjAgKi8KKwkJeyAxOTIwLCAxMDgwLCAiMTA4MHBAMjQiIH0sCS8qIFY0TDJfRFZfMTA4MFAyNCAqLworCQl7IDE5MjAsIDEwODAsICIxMDgwcEAyNSIgfSwJLyogVjRMMl9EVl8xMDgwUDI1ICovCisJCXsgMTkyMCwgMTA4MCwgIjEwODBwQDMwIiB9LAkvKiBWNEwyX0RWXzEwODBQMzAgKi8KKwkJeyAxOTIwLCAxMDgwLCAiMTA4MHBANTAiIH0sCS8qIFY0TDJfRFZfMTA4MFA1MCAqLworCQl7IDE5MjAsIDEwODAsICIxMDgwcEA2MCIgfSwJLyogVjRMMl9EVl8xMDgwUDYwICovCisJfTsKKworCWlmIChpbmZvID09IE5VTEwgfHwgcHJlc2V0ID49IEFSUkFZX1NJWkUoZHZfcHJlc2V0cykpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5mby0+cHJlc2V0ID0gcHJlc2V0OworCWluZm8tPndpZHRoID0gZHZfcHJlc2V0c1twcmVzZXRdLndpZHRoOworCWluZm8tPmhlaWdodCA9IGR2X3ByZXNldHNbcHJlc2V0XS5oZWlnaHQ7CisJc3RybGNweShpbmZvLT5uYW1lLCBkdl9wcmVzZXRzW3ByZXNldF0ubmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKaW5kZXggOTk3OTc1ZC4uYzQxNTBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKQEAgLTEwNzcsNiArMTA3NywxMiBAQAogCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgogCWNhc2UgVklESU9DX0RCR19HX0NISVBfSURFTlQ6CiAJY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6CisJY2FzZSBWSURJT0NfRU5VTV9EVl9QUkVTRVRTOgorCWNhc2UgVklESU9DX1NfRFZfUFJFU0VUOgorCWNhc2UgVklESU9DX0dfRFZfUFJFU0VUOgorCWNhc2UgVklESU9DX1FVRVJZX0RWX1BSRVNFVDoKKwljYXNlIFZJRElPQ19TX0RWX1RJTUlOR1M6CisJY2FzZSBWSURJT0NfR19EVl9USU1JTkdTOgogCQlyZXQgPSBkb192aWRlb19pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggNTAwY2JlOS4uNzA5MDY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIAlpZiAoIXZkZXYtPmZvcHMtPnJlYWQpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICh2aWRlb19pc191bnJlZ2lzdGVyZWQodmRldikpCisJaWYgKCF2aWRlb19pc19yZWdpc3RlcmVkKHZkZXYpKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gdmRldi0+Zm9wcy0+cmVhZChmaWxwLCBidWYsIHN6LCBvZmYpOwogfQpAQCAtMjAxLDcgKzIwMSw3IEBACiAKIAlpZiAoIXZkZXYtPmZvcHMtPndyaXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAodmlkZW9faXNfdW5yZWdpc3RlcmVkKHZkZXYpKQorCWlmICghdmlkZW9faXNfcmVnaXN0ZXJlZCh2ZGV2KSkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIHZkZXYtPmZvcHMtPndyaXRlKGZpbHAsIGJ1Ziwgc3osIG9mZik7CiB9CkBAIC0yMTAsNyArMjEwLDcgQEAKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAotCWlmICghdmRldi0+Zm9wcy0+cG9sbCB8fCB2aWRlb19pc191bnJlZ2lzdGVyZWQodmRldikpCisJaWYgKCF2ZGV2LT5mb3BzLT5wb2xsIHx8ICF2aWRlb19pc19yZWdpc3RlcmVkKHZkZXYpKQogCQlyZXR1cm4gREVGQVVMVF9QT0xMTUFTSzsKIAlyZXR1cm4gdmRldi0+Zm9wcy0+cG9sbChmaWxwLCBwb2xsKTsKIH0KQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAJaWYgKCF2ZGV2LT5mb3BzLT5nZXRfdW5tYXBwZWRfYXJlYSkKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JaWYgKHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkKKwlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQodmRldikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiB2ZGV2LT5mb3BzLT5nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7CiB9CkBAIC0yNjAsOCArMjYwLDcgQEAKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAotCWlmICghdmRldi0+Zm9wcy0+bW1hcCB8fAotCSAgICB2aWRlb19pc191bnJlZ2lzdGVyZWQodmRldikpCisJaWYgKCF2ZGV2LT5mb3BzLT5tbWFwIHx8ICF2aWRlb19pc19yZWdpc3RlcmVkKHZkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gdmRldi0+Zm9wcy0+bW1hcChmaWxwLCB2bSk7CiB9CkBAIC0yNzcsNyArMjc2LDcgQEAKIAl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAkvKiByZXR1cm4gRU5PREVWIGlmIHRoZSB2aWRlbyBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZAogCSAgIGFscmVhZHkgb3IgaWYgaXQgaXMgbm90IHJlZ2lzdGVyZWQgYW55bW9yZS4gKi8KLQlpZiAodmRldiA9PSBOVUxMIHx8IHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkgeworCWlmICh2ZGV2ID09IE5VTEwgfHwgIXZpZGVvX2lzX3JlZ2lzdGVyZWQodmRldikpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNTUxLDEwICs1NTAsMTEgQEAKIAl2ZGV2LT5kZXYucmVsZWFzZSA9IHY0bDJfZGV2aWNlX3JlbGVhc2U7CiAKIAlpZiAobnIgIT0gLTEgJiYgbnIgIT0gdmRldi0+bnVtICYmIHdhcm5faWZfbnJfaW5fdXNlKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVxdWVzdGVkICVzJWQsIGdvdCAlcyVkXG4iLAotCQkJCV9fZnVuY19fLCBuYW1lX2Jhc2UsIG5yLCBuYW1lX2Jhc2UsIHZkZXYtPm51bSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZXF1ZXN0ZWQgJXMlZCwgZ290ICVzXG4iLCBfX2Z1bmNfXywKKwkJCW5hbWVfYmFzZSwgbnIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldikpOwogCiAJLyogUGFydCA1OiBBY3RpdmF0ZSB0aGlzIG1pbm9yLiBUaGUgY2hhciBkZXZpY2UgY2FuIG5vdyBiZSB1c2VkLiAqLworCXNldF9iaXQoVjRMMl9GTF9SRUdJU1RFUkVELCAmdmRldi0+ZmxhZ3MpOwogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwogCXZpZGVvX2RldmljZVt2ZGV2LT5taW5vcl0gPSB2ZGV2OwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CkBAIC01OTMsMTEgKzU5MywxMSBAQAogdm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQogewogCS8qIENoZWNrIGlmIHZkZXYgd2FzIGV2ZXIgcmVnaXN0ZXJlZCBhdCBhbGwgKi8KLQlpZiAoIXZkZXYgfHwgdmRldi0+bWlub3IgPCAwKQorCWlmICghdmRldiB8fCAhdmlkZW9faXNfcmVnaXN0ZXJlZCh2ZGV2KSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7Ci0Jc2V0X2JpdChWNEwyX0ZMX1VOUkVHSVNURVJFRCwgJnZkZXYtPmZsYWdzKTsKKwljbGVhcl9iaXQoVjRMMl9GTF9SRUdJU1RFUkVELCAmdmRldi0+ZmxhZ3MpOwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnZkZXYtPmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCmluZGV4IDMwY2MzMzQ3Li40YjExMjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtMjg0LDYgKzI4NCwxMiBAQAogCVtfSU9DX05SKFZJRElPQ19EQkdfR19DSElQX0lERU5UKV0gPSAiVklESU9DX0RCR19HX0NISVBfSURFTlQiLAogCVtfSU9DX05SKFZJRElPQ19TX0hXX0ZSRVFfU0VFSyldICAgPSAiVklESU9DX1NfSFdfRlJFUV9TRUVLIiwKICNlbmRpZgorCVtfSU9DX05SKFZJRElPQ19FTlVNX0RWX1BSRVNFVFMpXSAgPSAiVklESU9DX0VOVU1fRFZfUFJFU0VUUyIsCisJW19JT0NfTlIoVklESU9DX1NfRFZfUFJFU0VUKV0JICAgPSAiVklESU9DX1NfRFZfUFJFU0VUIiwKKwlbX0lPQ19OUihWSURJT0NfR19EVl9QUkVTRVQpXQkgICA9ICJWSURJT0NfR19EVl9QUkVTRVQiLAorCVtfSU9DX05SKFZJRElPQ19RVUVSWV9EVl9QUkVTRVQpXSAgPSAiVklESU9DX1FVRVJZX0RWX1BSRVNFVCIsCisJW19JT0NfTlIoVklESU9DX1NfRFZfVElNSU5HUyldICAgICA9ICJWSURJT0NfU19EVl9USU1JTkdTIiwKKwlbX0lPQ19OUihWSURJT0NfR19EVl9USU1JTkdTKV0gICAgID0gIlZJRElPQ19HX0RWX1RJTUlOR1MiLAogfTsKICNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKIApAQCAtMTEzNSw2ICsxMTQxLDE5IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqcCA9IGFyZzsKIAorCQkvKgorCQkgKiBXZSBzZXQgdGhlIGZsYWdzIGZvciBDQVBfUFJFU0VUUywgQ0FQX0NVU1RPTV9USU1JTkdTICYKKwkJICogQ0FQX1NURCBoZXJlIGJhc2VkIG9uIGlvY3RsIGhhbmRsZXIgcHJvdmlkZWQgYnkgdGhlCisJCSAqIGRyaXZlci4gSWYgdGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgdGhlc2UKKwkJICogZm9yIGEgc3BlY2lmaWMgaW5wdXQsIGl0IG11c3Qgb3ZlcnJpZGUgdGhlc2UgZmxhZ3MuCisJCSAqLworCQlpZiAob3BzLT52aWRpb2Nfc19zdGQpCisJCQlwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9JTl9DQVBfU1REOworCQlpZiAob3BzLT52aWRpb2Nfc19kdl9wcmVzZXQpCisJCQlwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9JTl9DQVBfUFJFU0VUUzsKKwkJaWYgKG9wcy0+dmlkaW9jX3NfZHZfdGltaW5ncykKKwkJCXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0lOX0NBUF9DVVNUT01fVElNSU5HUzsKKwogCQlpZiAoIW9wcy0+dmlkaW9jX2VudW1faW5wdXQpCiAJCQlicmVhazsKIApAQCAtMTE3OSw2ICsxMTk4LDE5IEBACiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9vdXRwdXQpCiAJCQlicmVhazsKIAorCQkvKgorCQkgKiBXZSBzZXQgdGhlIGZsYWdzIGZvciBDQVBfUFJFU0VUUywgQ0FQX0NVU1RPTV9USU1JTkdTICYKKwkJICogQ0FQX1NURCBoZXJlIGJhc2VkIG9uIGlvY3RsIGhhbmRsZXIgcHJvdmlkZWQgYnkgdGhlCisJCSAqIGRyaXZlci4gSWYgdGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgdGhlc2UKKwkJICogZm9yIGEgc3BlY2lmaWMgb3V0cHV0LCBpdCBtdXN0IG92ZXJyaWRlIHRoZXNlIGZsYWdzLgorCQkgKi8KKwkJaWYgKG9wcy0+dmlkaW9jX3Nfc3RkKQorCQkJcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfT1VUX0NBUF9TVEQ7CisJCWlmIChvcHMtPnZpZGlvY19zX2R2X3ByZXNldCkKKwkJCXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX09VVF9DQVBfUFJFU0VUUzsKKwkJaWYgKG9wcy0+dmlkaW9jX3NfZHZfdGltaW5ncykKKwkJCXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX09VVF9DQVBfQ1VTVE9NX1RJTUlOR1M7CisKIAkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9vdXRwdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgpAQCAtMTc5NCw2ICsxODI2LDEyMSBAQAogCQl9CiAJCWJyZWFrOwogCX0KKwljYXNlIFZJRElPQ19FTlVNX0RWX1BSRVNFVFM6CisJeworCQlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCAqcCA9IGFyZzsKKworCQlpZiAoIW9wcy0+dmlkaW9jX2VudW1fZHZfcHJlc2V0cykKKwkJCWJyZWFrOworCisJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZHZfcHJlc2V0cyhmaWxlLCBmaCwgcCk7CisJCWlmICghcmV0KQorCQkJZGJnYXJnKGNtZCwKKwkJCQkiaW5kZXg9JWQsIHByZXNldD0lZCwgbmFtZT0lcywgd2lkdGg9JWQsIgorCQkJCSIgaGVpZ2h0PSVkICIsCisJCQkJcC0+aW5kZXgsIHAtPnByZXNldCwgcC0+bmFtZSwgcC0+d2lkdGgsCisJCQkJcC0+aGVpZ2h0KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfRFZfUFJFU0VUOgorCXsKKwkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwID0gYXJnOworCisJCWlmICghb3BzLT52aWRpb2Nfc19kdl9wcmVzZXQpCisJCQlicmVhazsKKworCQlkYmdhcmcoY21kLCAicHJlc2V0PSVkXG4iLCBwLT5wcmVzZXQpOworCQlyZXQgPSBvcHMtPnZpZGlvY19zX2R2X3ByZXNldChmaWxlLCBmaCwgcCk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0RWX1BSRVNFVDoKKwl7CisJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcCA9IGFyZzsKKworCQlpZiAoIW9wcy0+dmlkaW9jX2dfZHZfcHJlc2V0KQorCQkJYnJlYWs7CisKKwkJcmV0ID0gb3BzLT52aWRpb2NfZ19kdl9wcmVzZXQoZmlsZSwgZmgsIHApOworCQlpZiAoIXJldCkKKwkJCWRiZ2FyZyhjbWQsICJwcmVzZXQ9JWRcbiIsIHAtPnByZXNldCk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWV9EVl9QUkVTRVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnAgPSBhcmc7CisKKwkJaWYgKCFvcHMtPnZpZGlvY19xdWVyeV9kdl9wcmVzZXQpCisJCQlicmVhazsKKworCQlyZXQgPSBvcHMtPnZpZGlvY19xdWVyeV9kdl9wcmVzZXQoZmlsZSwgZmgsIHApOworCQlpZiAoIXJldCkKKwkJCWRiZ2FyZyhjbWQsICJwcmVzZXQ9JWRcbiIsIHAtPnByZXNldCk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0RWX1RJTUlOR1M6CisJeworCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICpwID0gYXJnOworCisJCWlmICghb3BzLT52aWRpb2Nfc19kdl90aW1pbmdzKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChwLT50eXBlKSB7CisJCWNhc2UgVjRMMl9EVl9CVF82NTZfMTEyMDoKKwkJCWRiZ2FyZzIoImJ0LTY1Ni8xMTIwOmludGVybGFjZWQ9JWQsIHBpeGVsY2xvY2s9JWxsZCwiCisJCQkJIiB3aWR0aD0lZCwgaGVpZ2h0PSVkLCBwb2xhcml0aWVzPSV4LCIKKwkJCQkiIGhmcm9udHBvcmNoPSVkLCBoc3luYz0lZCwgaGJhY2twb3JjaD0lZCwiCisJCQkJIiB2ZnJvbnRwb3JjaD0lZCwgdnN5bmM9JWQsIHZiYWNrcG9yY2g9JWQsIgorCQkJCSIgaWxfdmZyb250cG9yY2g9JWQsIGlsX3ZzeW5jPSVkLCIKKwkJCQkiIGlsX3ZiYWNrcG9yY2g9JWRcbiIsCisJCQkJcC0+YnQuaW50ZXJsYWNlZCwgcC0+YnQucGl4ZWxjbG9jaywKKwkJCQlwLT5idC53aWR0aCwgcC0+YnQuaGVpZ2h0LCBwLT5idC5wb2xhcml0aWVzLAorCQkJCXAtPmJ0Lmhmcm9udHBvcmNoLCBwLT5idC5oc3luYywKKwkJCQlwLT5idC5oYmFja3BvcmNoLCBwLT5idC52ZnJvbnRwb3JjaCwKKwkJCQlwLT5idC52c3luYywgcC0+YnQudmJhY2twb3JjaCwKKwkJCQlwLT5idC5pbF92ZnJvbnRwb3JjaCwgcC0+YnQuaWxfdnN5bmMsCisJCQkJcC0+YnQuaWxfdmJhY2twb3JjaCk7CisJCQlyZXQgPSBvcHMtPnZpZGlvY19zX2R2X3RpbWluZ3MoZmlsZSwgZmgsIHApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmdhcmcyKCJVbmtub3duIHR5cGUgJWQhXG4iLCBwLT50eXBlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0RWX1RJTUlOR1M6CisJeworCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICpwID0gYXJnOworCisJCWlmICghb3BzLT52aWRpb2NfZ19kdl90aW1pbmdzKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gb3BzLT52aWRpb2NfZ19kdl90aW1pbmdzKGZpbGUsIGZoLCBwKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXN3aXRjaCAocC0+dHlwZSkgeworCQkJY2FzZSBWNEwyX0RWX0JUXzY1Nl8xMTIwOgorCQkJCWRiZ2FyZzIoImJ0LTY1Ni8xMTIwOmludGVybGFjZWQ9JWQsIgorCQkJCQkiIHBpeGVsY2xvY2s9JWxsZCwiCisJCQkJCSIgd2lkdGg9JWQsIGhlaWdodD0lZCwgcG9sYXJpdGllcz0leCwiCisJCQkJCSIgaGZyb250cG9yY2g9JWQsIGhzeW5jPSVkLCIKKwkJCQkJIiBoYmFja3BvcmNoPSVkLCB2ZnJvbnRwb3JjaD0lZCwiCisJCQkJCSIgdnN5bmM9JWQsIHZiYWNrcG9yY2g9JWQsIgorCQkJCQkiIGlsX3Zmcm9udHBvcmNoPSVkLCBpbF92c3luYz0lZCwiCisJCQkJCSIgaWxfdmJhY2twb3JjaD0lZFxuIiwKKwkJCQkJcC0+YnQuaW50ZXJsYWNlZCwgcC0+YnQucGl4ZWxjbG9jaywKKwkJCQkJcC0+YnQud2lkdGgsIHAtPmJ0LmhlaWdodCwKKwkJCQkJcC0+YnQucG9sYXJpdGllcywgcC0+YnQuaGZyb250cG9yY2gsCisJCQkJCXAtPmJ0LmhzeW5jLCBwLT5idC5oYmFja3BvcmNoLAorCQkJCQlwLT5idC52ZnJvbnRwb3JjaCwgcC0+YnQudnN5bmMsCisJCQkJCXAtPmJ0LnZiYWNrcG9yY2gsIHAtPmJ0LmlsX3Zmcm9udHBvcmNoLAorCQkJCQlwLT5idC5pbF92c3luYywgcC0+YnQuaWxfdmJhY2twb3JjaCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRiZ2FyZzIoIlVua25vd24gdHlwZSAlZCFcbiIsIHAtPnR5cGUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwppbmRleCBkMjVmMjg0Li4yMmMwMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwpAQCAtMTQxLDkgKzE0MSwxMSBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgcHJldl9wZm4sIHRoaXNfcGZuOwogCXVuc2lnbmVkIGxvbmcgcGFnZXNfZG9uZSwgdXNlcl9hZGRyZXNzOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJaW50IHJldDsKIAotCW1lbS0+c2l6ZSA9IFBBR0VfQUxJR04odmItPnNpemUpOworCW9mZnNldCA9IHZiLT5iYWRkciAmIH5QQUdFX01BU0s7CisJbWVtLT5zaXplID0gUEFHRV9BTElHTih2Yi0+c2l6ZSArIG9mZnNldCk7CiAJbWVtLT5pc191c2VycHRyID0gMDsKIAlyZXQgPSAtRUlOVkFMOwogCkBAIC0xNjYsNyArMTY4LDcgQEAKIAkJCWJyZWFrOwogCiAJCWlmIChwYWdlc19kb25lID09IDApCi0JCQltZW0tPmRtYV9oYW5kbGUgPSB0aGlzX3BmbiA8PCBQQUdFX1NISUZUOworCQkJbWVtLT5kbWFfaGFuZGxlID0gKHRoaXNfcGZuIDw8IFBBR0VfU0hJRlQpICsgb2Zmc2V0OwogCQllbHNlIGlmICh0aGlzX3BmbiAhPSAocHJldl9wZm4gKyAxKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggYjAzNGE4MS4uYTE1ZDFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTQwNjgsNyArNDA2OCw2IEBACiAJLmZvcHMJCT0gJnZpbm9fZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZ2aW5vX2lvY3RsX29wcywKIAkudHZub3JtcyAJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0sCi0JLm1pbm9yCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgdmlub19tb2R1bGVfY2xlYW51cChpbnQgc3RhZ2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDc3MDVmYzYuLjM3NjMyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0xMTQ4LDcgKzExNDgsOCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWRwcmludGsoZGV2LCAxLCAib3BlbiAvZGV2L3ZpZGVvJWQgdHlwZT0lcyB1c2Vycz0lZFxuIiwgZGV2LT52ZmQtPm51bSwKKwlkcHJpbnRrKGRldiwgMSwgIm9wZW4gJXMgdHlwZT0lcyB1c2Vycz0lZFxuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZmZCksCiAJCXY0bDJfdHlwZV9uYW1lc1tWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdLCBkZXYtPnVzZXJzKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCkBAIC0xMjIxLDggKzEyMjIsNyBAQAogCXN0cnVjdCB2aXZpX2ZoICAgICAgICAgKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB2aXZpX2RldiAqZGV2ICAgICAgID0gZmgtPmRldjsKIAlzdHJ1Y3Qgdml2aV9kbWFxdWV1ZSAqdmlkcSA9ICZkZXYtPnZpZHE7Ci0KLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAKIAl2aXZpX3N0b3BfdGhyZWFkKHZpZHEpOwogCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKQEAgLTEyMzQsOCArMTIzNCw4IEBACiAJZGV2LT51c2Vycy0tOwogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAKLQlkcHJpbnRrKGRldiwgMSwgImNsb3NlIGNhbGxlZCAobWlub3I9JWQsIHVzZXJzPSVkKVxuIiwKLQkJbWlub3IsIGRldi0+dXNlcnMpOworCWRwcmludGsoZGV2LCAxLCAiY2xvc2UgY2FsbGVkIChkZXY9JXMsIHVzZXJzPSVkKVxuIiwKKwkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgZGV2LT51c2Vycyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyOTYsNyArMTI5Niw2IEBACiAJLm5hbWUJCT0gInZpdmkiLAogCS5mb3BzICAgICAgICAgICA9ICZ2aXZpX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmdml2aV9pb2N0bF9vcHMsCi0JLm1pbm9yCQk9IC0xLAogCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiAKIAkudHZub3JtcyAgICAgICAgICAgICAgPSBWNEwyX1NURF81MjVfNjAsCkBAIC0xMzE3LDggKzEzMTYsOCBAQAogCQlsaXN0X2RlbChsaXN0KTsKIAkJZGV2ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgdml2aV9kZXYsIHZpdmlfZGV2bGlzdCk7CiAKLQkJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAidW5yZWdpc3RlcmluZyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQlkZXYtPnZmZC0+bnVtKTsKKwkJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAidW5yZWdpc3RlcmluZyAlc1xuIiwKKwkJCXZpZGVvX2RldmljZV9ub2RlX25hbWUoZGV2LT52ZmQpKTsKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmQpOwogCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIAkJa2ZyZWUoZGV2KTsKQEAgLTEzNzIsMTUgKzEzNzEsMTIgQEAKIAkvKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUsIGxldCdzIGFkZCBpdCB0byBkZXZpY2UgbGlzdCAqLwogCWxpc3RfYWRkX3RhaWwoJmRldi0+dml2aV9kZXZsaXN0LCAmdml2aV9kZXZsaXN0KTsKIAotCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAoJWkpIiwKLQkJCXZpdmlfdGVtcGxhdGUubmFtZSwgdmZkLT5udW0pOwotCiAJaWYgKHZpZGVvX25yID49IDApCiAJCXZpZGVvX25yKys7CiAKIAlkZXYtPnZmZCA9IHZmZDsKLQl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZFxuIiwKLQkJCXZmZC0+bnVtKTsKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzICVzXG4iLAorCQkgIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmZkKSk7CiAJcmV0dXJuIDA7CiAKIHJlbF92ZGV2OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCAzN2ZjZGM0Li5kODA3ZWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtMjMyMyw5ICsyMzIzLDkgQEAKIGVycm9yOgogCWNhbS0+c2Vuc29yX2luaXRpYWxpemVkID0gMDsKIAljYW0tPnNlbnNvciA9IENDX1VOS05PV047Ci0JREJHKDEsICJJbWFnZSBzZW5zb3IgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGZvciAlcyAoL2Rldi92aWRlbyVkKS4gIgorCURCRygxLCAiSW1hZ2Ugc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCBmb3IgJXMgKCVzKS4gIgogCSAgICAgICAiVHJ5IHRvIGRldGFjaCBhbmQgYXR0YWNoIHRoaXMgZGV2aWNlIGFnYWluIiwKLQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5udW0pCisJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSkKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNTcxLDcgKzI1NzEsOCBAQAogewogCW11dGV4X2xvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiAKLQlEQkcoMiwgIlY0TCBkZXZpY2UgZGVyZWdpc3RlcmVkOiAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bnVtKQorCURCRygyLCAiVjRMIGRldmljZSBkZXJlZ2lzdGVyZWQ6ICVzIiwKKwkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpCiAKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAJbGlzdF9kZWwoJmNhbS0+djRsbGlzdCk7CkBAIC0yNjA1LDE3ICsyNjA2LDE5IEBACiAKIAlpZiAoY2FtLT5zZW5zb3IgPT0gQ0NfVU5LTk9XTikgewogCQlEQkcoMiwgIk5vIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgYnkgdGhlICIKLQkJICAgICAgICInb3ZjYW1jaGlwJyBtb2R1bGUgZm9yIHRoZSAlcyAoL2Rldi92aWRlbyVkKS4gTWFrZSAiCi0JCSAgICAgICAic3VyZSBpdCBpcyBsb2FkZWQgKmJlZm9yZSogKHJlKWNvbm5lY3RpbmcgdGhlIGNhbWVyYS4iLAotCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5udW0pCisJCSAgICAgICAiJ292Y2FtY2hpcCcgbW9kdWxlIGZvciB0aGUgJXMgKCVzKS4gTWFrZSBzdXJlICIKKwkJICAgICAgICJpdCBpcyBsb2FkZWQgKmJlZm9yZSogKHJlKWNvbm5lY3RpbmcgdGhlIGNhbWVyYS4iLAorCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSkKIAkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiJXMgKC9kZXYvdmlkZW8lZCkgaGFzIGJlZW4gYWxyZWFkeSBvY2N1cGllZCBieSAnJXMnIiwKLQkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bnVtLCBjYW0tPmNvbW1hbmQpCisJCURCRygyLCAiJXMgKCVzKSBoYXMgYmVlbiBhbHJlYWR5IG9jY3VwaWVkIGJ5ICclcyciLAorCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSwgY2FtLT5jb21tYW5kKQogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKXx8KGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKIAkJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKQEAgLTI2MzYsOCArMjYzOSw4IEBACiAJCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKIAl9CiAKLQlEQkcoNSwgIk9wZW5pbmcgJyVzJywgL2Rldi92aWRlbyVkIC4uLiIsCi0JICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bnVtKQorCURCRyg1LCAiT3BlbmluZyAnJXMnLCAlcyAuLi4iLAorCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpCiAKIAljYW0tPnN0cmVhbWluZyA9IDA7CiAJY2FtLT5taXNjb25maWd1cmVkID0gMDsKQEAgLTI4NzQsOCArMjg3Nyw3IEBACiAJCQkubWlud2lkdGggPSBjYW0tPm1pbndpZHRoLAogCQkJLm1pbmhlaWdodCA9IGNhbS0+bWluaGVpZ2h0LAogCQl9OwotCQlzcHJpbnRmKGNhcC5uYW1lLCAiVzk5Nls4N11DRiBVU0IgQ2FtZXJhICMlZCIsCi0JCQljYW0tPnY0bGRldi0+bnVtKTsKKwkJc3ByaW50ZihjYXAubmFtZSwgIlc5OTZbODddQ0YgVVNCIENhbWVyYSIpOwogCQljYXAubWF4d2lkdGggPSAoY2FtLT51cHNjYWxpbmcgJiYgdzk5NjhjZl92cHApCiAJCQkgICAgICAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9XSURUSCwgY2FtLT5tYXh3aWR0aCkKIAkJCQkgOiBjYW0tPm1heHdpZHRoOwpAQCAtMzQ4NSw3ICszNDg3LDYgQEAKIAogCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSk7CiAJY2FtLT52NGxkZXYtPmZvcHMgPSAmdzk5NjhjZl9mb3BzOwotCWNhbS0+djRsZGV2LT5taW5vciA9IHZpZGVvX25yW2Rldl9ucl07CiAJY2FtLT52NGxkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgY2FtKTsKIAljYW0tPnY0bGRldi0+djRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKQEAgLTM1MDEsNyArMzUwMiw4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlEQkcoMiwgIlY0TCBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bnVtKQorCURCRygyLCAiVjRMIGRldmljZSByZWdpc3RlcmVkIGFzICVzIiwKKwkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpCiAKIAkvKiBTZXQgc29tZSBiYXNpYyBjb25zdGFudHMgKi8KIAl3OTk2OGNmX2NvbmZpZ3VyZV9jYW1lcmEoY2FtLCB1ZGV2LCBtb2RfaWQsIGRldl9ucik7CkBAIC0zNTU3LDEwICszNTU5LDEwIEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJmNhbS0+b3Blbik7CiAKIAkJaWYgKGNhbS0+dXNlcnMpIHsKLQkJCURCRygyLCAiVGhlIGRldmljZSBpcyBvcGVuICgvZGV2L3ZpZGVvJWQpISAiCisJCQlEQkcoMiwgIlRoZSBkZXZpY2UgaXMgb3BlbiAoJXMpISAiCiAJCQkgICAgICAgIlByb2Nlc3MgbmFtZTogJXMuIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgogCQkJICAgICAgICJkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLiIsCi0JCQkgICAgY2FtLT52NGxkZXYtPm51bSwgY2FtLT5jb21tYW5kKQorCQkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpLCBjYW0tPmNvbW1hbmQpCiAJCQljYW0tPm1pc2NvbmZpZ3VyZWQgPSAxOwogCQkJdzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwppbmRleCAzMTJhNzEzLi5lNDRlNGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKQEAgLTUzOCw4ICs1MzgsOCBAQAogCWVsc2UgaWYgKGNhbS0+c3RyZWFtICE9IFNUUkVBTV9PRkYpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJVUkIgdGltZW91dCByZWFjaGVkLiBUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIFRvICIKLQkJICAgICAgICJ1c2UgaXQsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAidXNlIGl0LCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTY0MCw3ICs2NDAsOCBAQAogewogCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHpjMDMwMV9kZXZpY2UsCiAJCQkJCQkga3JlZik7Ci0JREJHKDIsICJWNEwyIGRldmljZSAvZGV2L3ZpZGVvJWQgZGVyZWdpc3RlcmVkIiwgY2FtLT52NGxkZXYtPm51bSk7CisJREJHKDIsICJWNEwyIGRldmljZSAlcyBkZXJlZ2lzdGVyZWQiLAorCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIE5VTEwpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2KTsKIAl1c2JfcHV0X2RldihjYW0tPnVzYmRldik7CkBAIC02NzksNyArNjgwLDggQEAKIAl9CiAKIAlpZiAoY2FtLT51c2VycykgewotCQlEQkcoMiwgIkRldmljZSAvZGV2L3ZpZGVvJWQgaXMgYnVzeS4uLiIsIGNhbS0+djRsZGV2LT5udW0pOworCQlEQkcoMiwgIkRldmljZSAlcyBpcyBidXN5Li4uIiwKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJREJHKDMsICJTaW11bHRhbmVvdXMgb3BlbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKIAkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkJICAgIChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpKSB7CkBAIC03MjIsNyArNzI0LDggQEAKIAljYW0tPmZyYW1lX2NvdW50ID0gMDsKIAl6YzAzMDFfZW1wdHlfZnJhbWVxdWV1ZXMoY2FtKTsKIAotCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuIiwgY2FtLT52NGxkZXYtPm51bSk7CisJREJHKDMsICJWaWRlbyBkZXZpY2UgJXMgaXMgb3BlbiIsCisJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmY2FtLT5vcGVuX211dGV4KTsKQEAgLTc0Niw3ICs3NDksOCBAQAogCWNhbS0+dXNlcnMtLTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+d2FpdF9vcGVuLCAxKTsKIAotCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bnVtKTsKKwlEQkcoMywgIlZpZGVvIGRldmljZSAlcyBjbG9zZWQiLAorCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAKIAlrcmVmX3B1dCgmY2FtLT5rcmVmLCB6YzAzMDFfcmVsZWFzZV9yZXNvdXJjZXMpOwogCkBAIC0xMjc2LDggKzEyODAsOCBAQAogCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5udW0pOworCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTEyODksOCArMTI5Myw4IEBACiAJICAgIG5idWZmZXJzICE9IHpjMDMwMV9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywgY2FtLT5pbykpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCi0JCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAotCQkgICAgY2FtLT52NGxkZXYtPm51bSk7CisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICVzIGFnYWluLiIsCisJCSAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTQ3MSw4ICsxNDc1LDggQEAKIAlpZiAoZXJyKSB7IC8qIGF0b21pYywgbm8gcm9sbGJhY2sgaW4gaW9jdGwoKSAqLwogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gVG8gIgotCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKLQkJICAgIGNhbS0+djRsZGV2LT5udW0pOworCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAlcyBhZ2Fpbi4iLAorCQkgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShjYW0tPnY0bGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE0ODMsOCArMTQ4Nyw4IEBACiAJICAgIG5idWZmZXJzICE9IHpjMDMwMV9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywgY2FtLT5pbykpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2Ygbm90IGVub3VnaCBtZW1vcnkuIFRvICIKLQkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKKwkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gJXMgYWdhaW4uIiwKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNTMwLDggKzE1MzQsOCBAQAogCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgotCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgotCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bnVtKTsKKwkJICAgICAgICJwcm9ibGVtcy4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICVzIGFnYWluLiIsCisJCSAgICAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+djRsZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTk4NCw3ICsxOTg4LDYgQEAKIAogCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgIlpDMDMwMVtQXSBQQyBDYW1lcmEiKTsKIAljYW0tPnY0bGRldi0+Zm9wcyA9ICZ6YzAzMDFfZm9wczsKLQljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOwogCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJY2FtLT52NGxkZXYtPnBhcmVudCA9ICZ1ZGV2LT5kZXY7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CkBAIC0yMDAzLDcgKzIwMDYsOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5udW0pOworCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAlcyIsCisJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAogCWNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCA9IGZvcmNlX211bm1hcFtkZXZfbnJdOwogCWNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgPSBmcmFtZV90aW1lb3V0W2Rldl9ucl07CkBAIC0yMDQwLDkgKzIwNDQsOSBAQAogCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIGNhbS0+djRsZGV2LT5uYW1lKTsKIAogCWlmIChjYW0tPnVzZXJzKSB7Ci0JCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgorCQlEQkcoMiwgIkRldmljZSAlcyBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgogCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkLiIsCi0JCSAgICBjYW0tPnY0bGRldi0+bnVtKTsKKwkJICAgIHZpZGVvX2RldmljZV9ub2RlX25hbWUoY2FtLT52NGxkZXYpKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJemMwMzAxX3N0b3BfdHJhbnNmZXIoY2FtKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggZTlmNzJjYS4uMmRkZmZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0zMzg3LDYgKzMzODcsNSBAQAogCS5pb2N0bF9vcHMgPSAmem9yYW5faW9jdGxfb3BzLAogCS5yZWxlYXNlID0gJnpvcmFuX3ZkZXZfcmVsZWFzZSwKIAkudHZub3JtcyA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTSwKLQkubWlub3IgPSAtMQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwppbmRleCAyZWYxMTBiLi5mMGVhZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwpAQCAtMTQ1NSw3ICsxNDU1LDYgQEAKIAkuZm9wcyA9ICZ6cjM2NHh4X2ZvcHMsCiAJLmlvY3RsX29wcyA9ICZ6cjM2NHh4X2lvY3RsX29wcywKIAkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotCS5taW5vciA9IC0xLAogfTsKIAogCkBAIC0xNjM1LDggKzE2MzQsOCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmNhbS0+c2xvY2spOwogCi0JZGV2X2luZm8oJnVkZXYtPmRldiwgRFJJVkVSX0RFU0MgIiBjb250cm9sbGluZyB2aWRlbyBkZXZpY2UgJWRcbiIsCi0JCSBjYW0tPnZkZXYtPm51bSk7CisJZGV2X2luZm8oJnVkZXYtPmRldiwgRFJJVkVSX0RFU0MgIiBjb250cm9sbGluZyBkZXZpY2UgJXNcbiIsCisJCSB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGNhbS0+dmRldikpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDYxMGU5MTQuLjg1YmM2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogewogCXU4CQlfX2lvbWVtICptZW07CiAJaW50CQkgaWk7Ci0JdW5zaWduZWQgbG9uZwkgbWVtX3BoeXM7CisJcmVzb3VyY2Vfc2l6ZV90CSBtZW1fcGh5czsKIAl1bnNpZ25lZCBsb25nCSBwb3J0OwogCXUzMgkJIG1zaXplOwogCXUzMgkJIHBzaXplOwpAQCAtMTY3Nyw4ICsxNjc3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlvYy0+bWVtbWFwID0gbWVtOwotCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIm1lbSA9ICVwLCBtZW1fcGh5cyA9ICVseFxuIiwKLQkgICAgaW9jLT5uYW1lLCBtZW0sIG1lbV9waHlzKSk7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAibWVtID0gJXAsIG1lbV9waHlzID0gJWxseFxuIiwKKwkgICAgaW9jLT5uYW1lLCBtZW0sICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtX3BoeXMpKTsKIAogCWlvYy0+bWVtX3BoeXMgPSBtZW1fcGh5czsKIAlpb2MtPmNoaXAgPSAoU1lTSUZfUkVHUyBfX2lvbWVtICopbWVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCmluZGV4IDcwNDVjNDUuLjk0OWE2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKQEAgLTExMSwxMCArMTExLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEkyT19TTkZPUk1BVF9MQU40OF9NQUM6CS8qIExBTi00OCBNQUMgQWRkcmVzcyAqLwotCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICJMQU4tNDggTUFDIGFkZHJlc3MgQCAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCi0JCQkgICBzZXJpYWxub1syXSwgc2VyaWFsbm9bM10sCi0JCQkgICBzZXJpYWxub1s0XSwgc2VyaWFsbm9bNV0sIHNlcmlhbG5vWzZdLCBzZXJpYWxub1s3XSk7CisJCXNlcV9wcmludGYoc2VxLCAiTEFOLTQ4IE1BQyBhZGRyZXNzIEAgJXBNIiwgJnNlcmlhbG5vWzJdKTsKIAkJYnJlYWs7CiAKIAljYXNlIEkyT19TTkZPUk1BVF9XQU46CS8qIFdBTiBNQUMgQWRkcmVzcyAqLwpAQCAtMTI2LDEwICsxMjMsOCBAQAogCWNhc2UgSTJPX1NORk9STUFUX0xBTjY0X01BQzoJLyogTEFOLTY0IE1BQyBBZGRyZXNzICovCiAJCS8qIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgYSBMQU4tNjQgYWRkcmVzcyByZWFsbHkgbG9va3MgbGlrZT8/ICovCiAJCXNlcV9wcmludGYoc2VxLAotCQkJICAgIkxBTi02NCBNQUMgYWRkcmVzcyBAIFs/OiUwMlg6JTAyWDo/XSAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCi0JCQkgICBzZXJpYWxub1s4XSwgc2VyaWFsbm9bOV0sCi0JCQkgICBzZXJpYWxub1syXSwgc2VyaWFsbm9bM10sCi0JCQkgICBzZXJpYWxub1s0XSwgc2VyaWFsbm9bNV0sIHNlcmlhbG5vWzZdLCBzZXJpYWxub1s3XSk7CisJCQkgICAiTEFOLTY0IE1BQyBhZGRyZXNzIEAgWz86JTAyWDolMDJYOj9dICVwTSIsCisJCQkgICBzZXJpYWxub1s4XSwgc2VyaWFsbm9bOV0sICZzZXJpYWxub1syXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBJMk9fU05GT1JNQVRfRERNOgkvKiBJMk8gRERNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC84OHBtODYwNy5jIGIvZHJpdmVycy9tZmQvODhwbTg2MDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNmNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvODhwbTg2MDcuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIEJhc2UgZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjA3Lmg+CisKKworI2RlZmluZSBQTTg2MDdfUkVHX1JFU09VUkNFKF9zdGFydCwgX2VuZCkJCVwKK3sJCQkJCQkJXAorCS5zdGFydAk9IFBNODYwN18jI19zdGFydCwJCQlcCisJLmVuZAk9IFBNODYwN18jI19lbmQsCQkJXAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCQkJXAorfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBtODYwN19yZWd1bGF0b3JfcmVzb3VyY2VzW10gPSB7CisJUE04NjA3X1JFR19SRVNPVVJDRShCVUNLMSwgQlVDSzEpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoQlVDSzIsIEJVQ0syKSwKKwlQTTg2MDdfUkVHX1JFU09VUkNFKEJVQ0szLCBCVUNLMyksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8xLCAgTERPMSksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8yLCAgTERPMiksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8zLCAgTERPMyksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE80LCAgTERPNCksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE81LCAgTERPNSksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE82LCAgTERPNiksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE83LCAgTERPNyksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE84LCAgTERPOCksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE85LCAgTERPOSksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8xMCwgTERPMTApLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMTIsIExETzEyKSwKKwlQTTg2MDdfUkVHX1JFU09VUkNFKExETzE0LCBMRE8xNCksCit9OworCisjZGVmaW5lIFBNODYwN19SRUdfREVWUyhfbmFtZSwgX2lkKQkJCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQkJPSAiODhwbTg2MDctIiAjX25hbWUsCQkJCVwKKwkubnVtX3Jlc291cmNlcwk9IDEsCQkJCQkJXAorCS5yZXNvdXJjZXMJPSAmcG04NjA3X3JlZ3VsYXRvcl9yZXNvdXJjZXNbUE04NjA3X0lEXyMjX2lkXSwJXAorfQorCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHBtODYwN19kZXZzW10gPSB7CisJUE04NjA3X1JFR19ERVZTKGJ1Y2sxLCBCVUNLMSksCisJUE04NjA3X1JFR19ERVZTKGJ1Y2syLCBCVUNLMiksCisJUE04NjA3X1JFR19ERVZTKGJ1Y2szLCBCVUNLMyksCisJUE04NjA3X1JFR19ERVZTKGxkbzEsICBMRE8xKSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvMiwgIExETzIpLAorCVBNODYwN19SRUdfREVWUyhsZG8zLCAgTERPMyksCisJUE04NjA3X1JFR19ERVZTKGxkbzQsICBMRE80KSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvNSwgIExETzUpLAorCVBNODYwN19SRUdfREVWUyhsZG82LCAgTERPNiksCisJUE04NjA3X1JFR19ERVZTKGxkbzcsICBMRE83KSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvOCwgIExETzgpLAorCVBNODYwN19SRUdfREVWUyhsZG85LCAgTERPOSksCisJUE04NjA3X1JFR19ERVZTKGxkbzEwLCBMRE8xMCksCisJUE04NjA3X1JFR19ERVZTKGxkbzEyLCBMRE8xMiksCisJUE04NjA3X1JFR19ERVZTKGxkbzE0LCBMRE8xNCksCit9OworCitzdGF0aWMgaW5saW5lIGludCBwbTg2MDdfcmVhZF9kZXZpY2Uoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLAorCQkJCSAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpkZXN0KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjaGlwLT5jbGllbnQ7CisJdW5zaWduZWQgY2hhciBkYXRhOworCWludCByZXQ7CisKKwlkYXRhID0gKHVuc2lnbmVkIGNoYXIpcmVnOworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsICZkYXRhLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihpMmMsIGRlc3QsIGJ5dGVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG04NjA3X3dyaXRlX2RldmljZShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsCisJCQkJICAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNoaXAtPmNsaWVudDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltieXRlcyArIDFdOworCWludCByZXQ7CisKKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcilyZWc7CisJbWVtY3B5KCZidWZbMV0sIHNyYywgYnl0ZXMpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgYnVmLCBieXRlcyArIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitpbnQgcG04NjA3X3JlZ19yZWFkKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IGNoaXAtPnJlYWQoY2hpcCwgcmVnLCAxLCAmZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIChpbnQpZGF0YTsKK30KK0VYUE9SVF9TWU1CT0wocG04NjA3X3JlZ19yZWFkKTsKKworaW50IHBtODYwN19yZWdfd3JpdGUoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gY2hpcC0+d3JpdGUoY2hpcCwgcmVnLCAxLCAmZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHBtODYwN19yZWdfd3JpdGUpOworCitpbnQgcG04NjA3X2J1bGtfcmVhZChzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsCisJCSAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IGNoaXAtPnJlYWQoY2hpcCwgcmVnLCBjb3VudCwgYnVmKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG04NjA3X2J1bGtfcmVhZCk7CisKK2ludCBwbTg2MDdfYnVsa193cml0ZShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsCisJCSAgICAgIGludCBjb3VudCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBjaGlwLT53cml0ZShjaGlwLCByZWcsIGNvdW50LCBidWYpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbTg2MDdfYnVsa193cml0ZSk7CisKK2ludCBwbTg2MDdfc2V0X2JpdHMoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLAorCQkgICAgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gY2hpcC0+cmVhZChjaGlwLCByZWcsIDEsICZ2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXZhbHVlICY9IH5tYXNrOworCXZhbHVlIHw9IGRhdGE7CisJcmV0ID0gY2hpcC0+d3JpdGUoY2hpcCwgcmVnLCAxLCAmdmFsdWUpOworb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG04NjA3X3NldF9iaXRzKTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcG04NjA3X2lkX3RhYmxlW10gPSB7CisJeyAiODhQTTg2MDciLCAwIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcG04NjA3X2lkX3RhYmxlKTsKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MDdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgcG04NjA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXA7CisJaW50IGksIGNvdW50OworCWludCByZXQ7CisKKwljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYwN19jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwLT5jbGllbnQgPSBjbGllbnQ7CisJY2hpcC0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWNoaXAtPnJlYWQgPSBwbTg2MDdfcmVhZF9kZXZpY2U7CisJY2hpcC0+d3JpdGUgPSBwbTg2MDdfd3JpdGVfZGV2aWNlOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOworCisJbXV0ZXhfaW5pdCgmY2hpcC0+aW9fbG9jayk7CisJZGV2X3NldF9kcnZkYXRhKGNoaXAtPmRldiwgY2hpcCk7CisKKwlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgUE04NjA3X0NISVBfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQ0hJUCBJRDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKHJldCAmIENISVBfSURfTUFTSykgPT0gQ0hJUF9JRCkKKwkJZGV2X2luZm8oY2hpcC0+ZGV2LCAiTWFydmVsbCA4OFBNODYwNyAoSUQ6ICUwMngpIGRldGVjdGVkXG4iLAorCQkJIHJldCk7CisJZWxzZSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGRldGVjdCBNYXJ2ZWxsIDg4UE04NjA3LiAiCisJCQkiQ2hpcCBJRDogJTAyeFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWNoaXAtPmNoaXBfaWQgPSByZXQ7CisKKwlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgUE04NjA3X0JVQ0szKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZWFkIEJVQ0szIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChyZXQgJiBQTTg2MDdfQlVDSzNfRE9VQkxFKQorCQljaGlwLT5idWNrM19kb3VibGUgPSAxOworCisJcmV0ID0gcG04NjA3X3JlZ19yZWFkKGNoaXAsIFBNODYwN19NSVNDMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBNSVNDMSByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocGRhdGEtPmkyY19wb3J0ID09IFBJMkNfUE9SVCkKKwkJcmV0IHw9IFBNODYwN19NSVNDMV9QSTJDOworCWVsc2UKKwkJcmV0ICY9IH5QTTg2MDdfTUlTQzFfUEkyQzsKKwlyZXQgPSBwbTg2MDdfcmVnX3dyaXRlKGNoaXAsIFBNODYwN19NSVNDMSwgcmV0KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byB3cml0ZSBNSVNDMSByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCisJY291bnQgPSBBUlJBWV9TSVpFKHBtODYwN19kZXZzKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCBpLCAmcG04NjA3X2RldnNbaV0sCisJCQkJICAgICAgMSwgTlVMTCwgMCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHN1YmRldnNcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGNoaXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtODYwN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW1mZF9yZW1vdmVfZGV2aWNlcyhjaGlwLT5kZXYpOworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcG04NjA3X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICI4OFBNODYwNyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHBtODYwN19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBtODYwN19yZW1vdmUpLAorCS5pZF90YWJsZQk9IHBtODYwN19pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBtODYwN19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmcG04NjA3X2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciA4OFBNODYwNyBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKHBtODYwN19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHBtODYwN19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnBtODYwN19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQocG04NjA3X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBNSUMgRHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA3Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCBhMjk2ZTcxLi44NzgyOTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTEwMywxMCArMTAzLDEwIEBACiAJICBjZWxsIHBob25lcyBhbmQgUERBcy4KIAogY29uZmlnIFRXTDQwMzBfQ09SRQotCWJvb2wgIlRleGFzIEluc3RydW1lbnRzIFRXTDQwMzAvVFBTNjU5eDAgU3VwcG9ydCIKKwlib29sICJUZXhhcyBJbnN0cnVtZW50cyBUV0w0MDMwL1RXTDUwMzAvVFdMNjAzMC9UUFM2NTl4MCBTdXBwb3J0IgogCWRlcGVuZHMgb24gSTJDPXkgJiYgR0VORVJJQ19IQVJESVJRUwogCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBUV0w0MDMwIGZhbWlseSBjaGlwIG9uIHlvdXIgYm9hcmQuCisJICBTYXkgeWVzIGhlcmUgaWYgeW91IGhhdmUgVFdMNDAzMCAvIFRXTDYwMzAgZmFtaWx5IGNoaXAgb24geW91ciBib2FyZC4KIAkgIFRoaXMgY29yZSBkcml2ZXIgcHJvdmlkZXMgcmVnaXN0ZXIgYWNjZXNzIGFuZCBJUlEgaGFuZGxpbmcKIAkgIGZhY2lsaXRpZXMsIGFuZCByZWdpc3RlcnMgZGV2aWNlcyBmb3IgdGhlIHZhcmlvdXMgZnVuY3Rpb25zCiAJICBzbyB0aGF0IGZ1bmN0aW9uLXNwZWNpZmljIGRyaXZlcnMgY2FuIGJpbmQgdG8gdGhlbS4KQEAgLTE3NCw2ICsxNzQsMTYgQEAKIAkgIGluZGl2aWR1YWwgY29tcG9uZW50cyBsaWtlIExDRCBiYWNrbGlnaHQsIHZvbHRhZ2UgcmVndWxhdG9ycywKIAkgIExFRHMgYW5kIGJhdHRlcnktY2hhcmdlciB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy4KIAorY29uZmlnIFBNSUNfQURQNTUyMAorCWJvb2wgIkFuYWxvZyBEZXZpY2VzIEFEUDU1MjAvMDEgTUZEIFBNSUMgQ29yZSBTdXBwb3J0IgorCWRlcGVuZHMgb24gSTJDPXkKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFENTUyMCBhbmQgQURQNTUwMSwKKwkgIE11bHRpZnVuY3Rpb24gUG93ZXIgTWFuYWdlbWVudCBJQy4gVGhpcyBpbmNsdWRlcworCSAgdGhlIEkyQyBkcml2ZXIgYW5kIHRoZSBjb3JlIEFQSXMgX29ubHlfLCB5b3UgaGF2ZSB0byBzZWxlY3QKKwkgIGluZGl2aWR1YWwgY29tcG9uZW50cyBsaWtlIExDRCBiYWNrbGlnaHQsIExFRHMsIEdQSU9zIGFuZCBLZXBhZAorCSAgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCisKIGNvbmZpZyBNRkRfV004NDAwCiAJdHJpc3RhdGUgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODQwMCIKIAlzZWxlY3QgTUZEX0NPUkUKQEAgLTE4NSwxMiArMTk1LDEyIEBACiAJICB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGV2aWNlLgogCiBjb25maWcgTUZEX1dNODMxWAotCXRyaXN0YXRlICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzMXggUE1JQ3MiCisJYm9vbCAiU3VwcG9ydCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004MzF4LzJ4IFBNSUNzIgogCXNlbGVjdCBNRkRfQ09SRQotCWRlcGVuZHMgb24gSTJDCisJZGVwZW5kcyBvbiBJMkM9eQogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIHRoZSBXb2xmc29uIE1pY3JvZWxlY3JvbmljcyBXTTgzMXggUE1JQ3MuICBUaGlzCi0JICBkcml2ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlLAorCSAgU3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjcm9uaWNzIFdNODMxeCBhbmQgV004MzJ4IFBNSUNzLgorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlLAogCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlCiAJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCiAKQEAgLTMxOSw2ICszMjksMjUgQEAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgUENBUCBBU0lDIHByZXNlbnQgb24gRVpYIFBob25lcy4gVGhpcyBpcwogCSAgbmVlZGVkIGZvciBNTUMsIFRvdWNoU2NyZWVuLCBTb3VuZCwgVVNCLCBldGMuLgogCitjb25maWcgTUZEXzg4UE04NjA3CisJYm9vbCAiU3VwcG9ydCBNYXJ2ZWxsIDg4UE04NjA3IgorCWRlcGVuZHMgb24gSTJDPXkKKwlzZWxlY3QgTUZEX0NPUkUKKwloZWxwCisJICBUaGlzIHN1cHBvcnRzIGZvciBNYXJ2ZWxsIDg4UE04NjA3IFBvd2VyIE1hbmFnZW1lbnQgSUMuIFRoaXMgaW5jbHVkZXMKKwkgIHRoZSBJMkMgZHJpdmVyIGFuZCB0aGUgY29yZSBBUElzIF9vbmx5XywgeW91IGhhdmUgdG8gc2VsZWN0CisJICBpbmRpdmlkdWFsIGNvbXBvbmVudHMgbGlrZSB2b2x0YWdlIHJlZ3VsYXRvcnMsIFJUQyBhbmQKKwkgIGJhdHRlcnktY2hhcmdlciB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy4KKworY29uZmlnIEFCNDUwMF9DT1JFCisJdHJpc3RhdGUgIlNULUVyaWNzc29uJ3MgQUI0NTAwIE1peGVkIFNpZ25hbCBQb3dlciBtYW5hZ2VtZW50IGNoaXAiCisJZGVwZW5kcyBvbiBTUEkKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGFjY2VzcyB0byBBQjQ1MDAgcG93ZXIgbWFuYWdlbWVudAorCSAgY2hpcC4gVGhpcyBjb25uZWN0cyB0byBVODUwMCBvbiB0aGUgU1NQL1NQSSBidXMgYW5kIGV4cG9ydHMKKwkgIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciB0aGUgZGV2aWNlcyB0byBnZXQgYWNjZXNzIHRvIHRoaXMgY2hpcC4KKwkgIFRoaXMgY2hpcCBlbWJlZHMgdmFyaW91cyBvdGhlciBtdWx0aW1lZGlhIGZ1bnRpb25hbGl0aWVzIGFzIHdlbGwuCisKIGVuZG1lbnUKIAogbWVudSAiTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQppbmRleCAxMTM1MGMxLi5jYTJmMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQpAQCAtMTksMTMgKzE5LDE0IEBACiB3bTgzMXgtb2JqcwkJCTo9IHdtODMxeC1jb3JlLm8gd204MzF4LWlycS5vIHdtODMxeC1vdHAubwogb2JqLSQoQ09ORklHX01GRF9XTTgzMVgpCSs9IHdtODMxeC5vCiB3bTgzNTAtb2JqcwkJCTo9IHdtODM1MC1jb3JlLm8gd204MzUwLXJlZ21hcC5vIHdtODM1MC1ncGlvLm8KK3dtODM1MC1vYmpzCQkJKz0gd204MzUwLWlycS5vCiBvYmotJChDT05GSUdfTUZEX1dNODM1MCkJKz0gd204MzUwLm8KIG9iai0kKENPTkZJR19NRkRfV004MzUwX0kyQykJKz0gd204MzUwLWkyYy5vCiAKIG9iai0kKENPTkZJR19UUFM2NTAxMCkJCSs9IHRwczY1MDEwLm8KIG9iai0kKENPTkZJR19NRU5FTEFVUykJCSs9IG1lbmVsYXVzLm8KIAotb2JqLSQoQ09ORklHX1RXTDQwMzBfQ09SRSkJKz0gdHdsNDAzMC1jb3JlLm8gdHdsNDAzMC1pcnEubworb2JqLSQoQ09ORklHX1RXTDQwMzBfQ09SRSkJKz0gdHdsLWNvcmUubyB0d2w0MDMwLWlycS5vIHR3bDYwMzAtaXJxLm8KIG9iai0kKENPTkZJR19UV0w0MDMwX1BPV0VSKSAgICArPSB0d2w0MDMwLXBvd2VyLm8KIG9iai0kKENPTkZJR19UV0w0MDMwX0NPREVDKQkrPSB0d2w0MDMwLWNvZGVjLm8KIApAQCAtNTIsMyArNTMsNiBAQAogb2JqLSQoQ09ORklHX1BDRjUwNjMzX0dQSU8pCSs9IHBjZjUwNjMzLWdwaW8ubwogb2JqLSQoQ09ORklHX0FCMzEwMF9DT1JFKQkrPSBhYjMxMDAtY29yZS5vCiBvYmotJChDT05GSUdfQUIzMTAwX09UUCkJKz0gYWIzMTAwLW90cC5vCitvYmotJChDT05GSUdfQUI0NTAwX0NPUkUpCSs9IGFiNDUwMC1jb3JlLm8KK29iai0kKENPTkZJR19NRkRfODhQTTg2MDcpCSs9IDg4cG04NjA3Lm8KK29iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCmluZGV4IDYxMzQ4MTAuLmZkNDJhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwpAQCAtOTAwLDkgKzkwMCw2IEBACiAJCWdvdG8gZXhpdF9ub190ZXN0cmVnX2NsaWVudDsKIAl9CiAKLQlzdHJsY3B5KGFiMzEwMC0+dGVzdHJlZ19jbGllbnQtPm5hbWUsIGlkLT5uYW1lLAotCQlzaXplb2YoYWIzMTAwLT50ZXN0cmVnX2NsaWVudC0+bmFtZSkpOwotCiAJZXJyID0gYWIzMTAwX3NldHVwKGFiMzEwMCk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X25vX3NldHVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWI0NTAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2FiNDUwMC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0NGMxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL2FiNDUwMC1jb3JlLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24KKyAqCisgKiBBdXRob3I6IFNyaW5pZGhpIEtBU0FHQVIgPHNyaW5pZGhpLmthc2FnYXJAc3Rlcmljc3Nvbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisgKiBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQUI0NTAwIGlzIGEgY29tcGFuaW9uIHBvd2VyIG1hbmFnZW1lbnQgY2hpcCB1c2VkIHdpdGggVTg1MDAuCisgKiBPbiB0aGlzIHBsYXRmb3JtLCB0aGlzIGlzIGludGVyZmFjZWQgd2l0aCBTU1AwIGNvbnRyb2xsZXIKKyAqIHdoaWNoIGlzIGEgQVJNIHByaW1lY2VsbCBwbDAyMi4KKyAqCisgKiBBdCB0aGUgbW9tZW50IHRoZSBtb2R1bGUganVzdCBleHBvcnRzIHJlYWQvd3JpdGUgZmVhdHVyZXMuCisgKiBJbnRlcnJ1cHQgbWFuYWdlbWVudCB0byBiZSBhZGRlZCAtIFRPRE8uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hYjQ1MDAuaD4KKworLyoganVzdCByZXF1aXJlZCBpZiBwcm9iZSBmYWlscywgd2UgbmVlZCB0bworICogdW5yZWdpc3RlciB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhYjQ1MDBfZHJpdmVyOworCisvKgorICogVGhpcyBmdW50aW9uIHdyaXRlcyB0byBhbnkgQUI0NTAwIHJlZ2lzdGVycyB1c2luZworICogU1BJIHByb3RvY29sICYgIGJlZm9yZSBpdCB3cml0ZXMgaXQgcGFja3MgdGhlIGRhdGEKKyAqIGluIHRoZSBiZWxvdyAyNCBiaXQgZnJhbWUgZm9ybWF0CisgKgorICoJICp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICoJICp8IDIzfDIyLi4uMTh8MTcuLi4uLi4uMTB8OXw4fDcuLi4uLi4wfAorICoJICp8IHIvdyAgYmFuayAgICAgICBhZHIgICAgICAgICAgZGF0YSAgfAorICoJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0CisgKiBjb250ZXh0CisgKi8KK2ludCBhYjQ1MDBfd3JpdGUoc3RydWN0IGFiNDUwMCAqYWI0NTAwLCB1bnNpZ25lZCBjaGFyIGJsb2NrLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXI7CisJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgc3BpX2RhdGEgPQorCQlibG9jayA8PCAxOCB8IGFkZHIgPDwgMTAgfCBkYXRhOworCisJbXV0ZXhfbG9jaygmYWI0NTAwLT5sb2NrKTsKKwlhYjQ1MDAtPnR4X2J1ZlswXSA9IHNwaV9kYXRhOworCWFiNDUwMC0+cnhfYnVmWzBdID0gMDsKKworCXhmZXIudHhfYnVmCT0gYWI0NTAwLT50eF9idWY7CisJeGZlci5yeF9idWYgCT0gTlVMTDsKKwl4ZmVyLmxlbgk9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXIsICZtc2cpOworCisJZXJyID0gc3BpX3N5bmMoYWI0NTAwLT5zcGksICZtc2cpOworCW11dGV4X3VubG9jaygmYWI0NTAwLT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGFiNDUwMF93cml0ZSk7CisKK2ludCBhYjQ1MDBfcmVhZChzdHJ1Y3QgYWI0NTAwICphYjQ1MDAsIHVuc2lnbmVkIGNoYXIgYmxvY2ssCisJCXVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXI7CisJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKKwl1bnNpZ25lZCBsb25nIHNwaV9kYXRhID0KKwkJMSA8PCAyMyB8IGJsb2NrIDw8IDE4IHwgYWRkciA8PCAxMDsKKworCW11dGV4X2xvY2soJmFiNDUwMC0+bG9jayk7CisJYWI0NTAwLT50eF9idWZbMF0gPSBzcGlfZGF0YTsKKwlhYjQ1MDAtPnJ4X2J1ZlswXSA9IDA7CisKKwl4ZmVyLnR4X2J1Zgk9IGFiNDUwMC0+dHhfYnVmOworCXhmZXIucnhfYnVmIAk9IGFiNDUwMC0+cnhfYnVmOworCXhmZXIubGVuCT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisKKwlzcGlfc3luYyhhYjQ1MDAtPnNwaSwgJm1zZyk7CisJbXV0ZXhfdW5sb2NrKCZhYjQ1MDAtPmxvY2spOworCisJcmV0dXJuICBhYjQ1MDAtPnJ4X2J1ZlswXTsKK30KK0VYUE9SVF9TWU1CT0woYWI0NTAwX3JlYWQpOworCisvKiByZWY6IGFiMzEwMCBjb3JlICovCisjZGVmaW5lIEFCNDUwMF9ERVZJQ0UoZGV2bmFtZSwgZGV2aWQpCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFiNDUwMF8jI2Rldm5hbWUjI19kZXZpY2UgPSB7CVwKKwkubmFtZQk9IGRldmlkLAkJCQkJXAorCS5pZAk9IC0xLAkJCQkJCVwKK30KKworLyogbGlzdCBvZiBjaGlsZGVybiBkZXZpY2VzIG9mIGFiNDUwMCAtIGFsbCBhcmUKKyAqIG5vdCBwb3B1bGF0ZWQgaGVyZSAtIFRPRE8KKyAqLworQUI0NTAwX0RFVklDRShjaGFyZ2VyLCAiYWI0NTAwLWNoYXJnZXIiKTsKK0FCNDUwMF9ERVZJQ0UoYXVkaW8sICJhYjQ1MDAtYXVkaW8iKTsKK0FCNDUwMF9ERVZJQ0UodXNiLCAiYWI0NTAwLXVzYiIpOworQUI0NTAwX0RFVklDRSh0dm91dCwgImFiNDUwMC10dm91dCIpOworQUI0NTAwX0RFVklDRShzaW0sICJhYjQ1MDAtc2ltIik7CitBQjQ1MDBfREVWSUNFKGdwYWRjLCAiYWI0NTAwLWdwYWRjIik7CitBQjQ1MDBfREVWSUNFKGNsa21ndCwgImFiNDUwMC1jbGttZ3QiKTsKK0FCNDUwMF9ERVZJQ0UobWlzYywgImFiNDUwMC1taXNjIik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphYjQ1MDBfcGxhdGZvcm1fZGV2c1tdID0geworCSZhYjQ1MDBfY2hhcmdlcl9kZXZpY2UsCisJJmFiNDUwMF9hdWRpb19kZXZpY2UsCisJJmFiNDUwMF91c2JfZGV2aWNlLAorCSZhYjQ1MDBfdHZvdXRfZGV2aWNlLAorCSZhYjQ1MDBfc2ltX2RldmljZSwKKwkmYWI0NTAwX2dwYWRjX2RldmljZSwKKwkmYWI0NTAwX2Nsa21ndF9kZXZpY2UsCisJJmFiNDUwMF9taXNjX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFiNDUwMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhYjQ1MDAJKmFiNDUwMDsKKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uOworCWludCBlcnIgPSAwOworCWludCBpOworCisJYWI0NTAwID0ga3phbGxvYyhzaXplb2YgKmFiNDUwMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhYjQ1MDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgQUI0NTAwXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBub3RfZGV0ZWN0OworCX0KKworCWFiNDUwMC0+c3BpID0gc3BpOworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGFiNDUwMCk7CisKKwltdXRleF9pbml0KCZhYjQ1MDAtPmxvY2spOworCisJLyogcmVhZCB0aGUgcmV2aXNpb24gcmVnaXN0ZXIgKi8KKwlyZXZpc2lvbiA9IGFiNDUwMF9yZWFkKGFiNDUwMCwgQUI0NTAwX01JU0MsIEFCNDUwMF9SRVZfUkVHKTsKKworCS8qIHJldmlzaW9uIGlkIDB4MCBpcyBmb3IgZWFybHkgZHJvcCwgMHgxMCBpcyBmb3IgY3V0MS4wICovCisJaWYgKHJldmlzaW9uID09IDB4MCB8fCByZXZpc2lvbiA9PSAweDEwKQorCQlkZXZfaW5mbygmc3BpLT5kZXYsICJEZXRlY3RlZCBjaGlwOiAlcywgcmV2aXNpb24gPSAleFxuIiwKKwkJCWFiNDUwMF9kcml2ZXIuZHJpdmVyLm5hbWUsIHJldmlzaW9uKTsKKwllbHNlCXsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmtub3duIGNoaXA6IDB4JXhcbiIsIHJldmlzaW9uKTsKKwkJZ290byBub3RfZGV0ZWN0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFiNDUwMF9wbGF0Zm9ybV9kZXZzKTsgaSsrKQl7CisJCWFiNDUwMF9wbGF0Zm9ybV9kZXZzW2ldLT5kZXYucGFyZW50ID0KKwkJCSZzcGktPmRldjsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoYWI0NTAwX3BsYXRmb3JtX2RldnNbaV0sIGFiNDUwMCk7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIGFiNDUwMCBwbGF0Zm9ybSBkZXZpY2VzICovCisJcGxhdGZvcm1fYWRkX2RldmljZXMoYWI0NTAwX3BsYXRmb3JtX2RldnMsCisJCQlBUlJBWV9TSVpFKGFiNDUwMF9wbGF0Zm9ybV9kZXZzKSk7CisKKwlyZXR1cm4gZXJyOworCisgbm90X2RldGVjdDoKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFiNDUwMF9kcml2ZXIpOworCWtmcmVlKGFiNDUwMCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWI0NTAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhYjQ1MDAgKmFiNDUwMCA9CisJCXNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJa2ZyZWUoYWI0NTAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWI0NTAwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhYjQ1MDAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGFiNDUwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWI0NTAwX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFiNDUwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFiNDUwMF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWI0NTAwX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFiNDUwMF9kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwoYWI0NTAwX2luaXQpOworbW9kdWxlX2V4aXQoYWI0NTAwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTcmluaWRoaSBLQVNBR0FSIDxzcmluaWRoaS5rYXNhZ2FyQHN0ZXJpY3Nzb24uY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFCNDUwMCBjb3JlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWRwNTUyMC5jIGIvZHJpdmVycy9tZmQvYWRwNTUyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjY0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9hZHA1NTIwLmMKQEAgLTAsMCArMSwzNzkgQEAKKy8qCisgKiBCYXNlIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgQURQNTUyMC9BRFA1NTAxIE1GRCBQTUlDcworICogTENEIEJhY2tsaWdodDogZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibAorICogTEVEcwkJOiBkcml2ZXJzL2xlZC9sZWRzLWFkcDU1MjAKKyAqIEdQSU8JCTogZHJpdmVycy9ncGlvL2FkcDU1MjAtZ3BpbyAoQURQNTUyMCBvbmx5KQorICogS2V5cwkJOiBkcml2ZXJzL2lucHV0L2tleWJvYXJkL2FkcDU1MjAta2V5cyAoQURQNTUyMCBvbmx5KQorICoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBEZXJpdmVkIGZyb20gZGE5MDN4OgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbXB1bGFiLCBMdGQuCisgKiAJTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogCUVyaWMgTWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworc3RydWN0IGFkcDU1MjBfY2hpcCB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbm90aWZpZXJfbGlzdDsKKwlpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaWQ7Cit9OworCitzdGF0aWMgaW50IF9fYWRwNTUyMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJaW50IHJlZywgdWludDhfdCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHJlYWRpbmcgYXQgMHglMDJ4XG4iLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKworCSp2YWwgPSAodWludDhfdClyZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19hZHA1NTIwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJIGludCByZWcsIHVpbnQ4X3QgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHdyaXRpbmcgMHglMDJ4IHRvIDB4JTAyeFxuIiwKKwkJCQl2YWwsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fYWRwNTUyMF9hY2tfYml0cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLAorCQkJICAgICAgdWludDhfdCBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKworCXJldCA9IF9fYWRwNTUyMF9yZWFkKGNsaWVudCwgcmVnLCAmcmVnX3ZhbCk7CisKKwlpZiAoIXJldCkgeworCQlyZWdfdmFsIHw9IGJpdF9tYXNrOworCQlyZXQgPSBfX2FkcDU1MjBfd3JpdGUoY2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KKworCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGFkcDU1MjBfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCkKK3sKKwlyZXR1cm4gX19hZHA1NTIwX3dyaXRlKHRvX2kyY19jbGllbnQoZGV2KSwgcmVnLCB2YWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWRwNTUyMF93cml0ZSk7CisKK2ludCBhZHA1NTIwX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90ICp2YWwpCit7CisJcmV0dXJuIF9fYWRwNTUyMF9yZWFkKHRvX2kyY19jbGllbnQoZGV2KSwgcmVnLCB2YWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWRwNTUyMF9yZWFkKTsKKworaW50IGFkcDU1MjBfc2V0X2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKQoreworCXN0cnVjdCBhZHA1NTIwX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJcmV0ID0gX19hZHA1NTIwX3JlYWQoY2hpcC0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKworCWlmICghcmV0ICYmICgocmVnX3ZhbCAmIGJpdF9tYXNrKSA9PSAwKSkgeworCQlyZWdfdmFsIHw9IGJpdF9tYXNrOworCQlyZXQgPSBfX2FkcDU1MjBfd3JpdGUoY2hpcC0+Y2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KKworCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFkcDU1MjBfc2V0X2JpdHMpOworCitpbnQgYWRwNTUyMF9jbHJfYml0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgYml0X21hc2spCit7CisJc3RydWN0IGFkcDU1MjBfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXQgPSBfX2FkcDU1MjBfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJnJlZ192YWwpOworCisJaWYgKCFyZXQgJiYgKHJlZ192YWwgJiBiaXRfbWFzaykpIHsKKwkJcmVnX3ZhbCAmPSB+Yml0X21hc2s7CisJCXJldCA9IF9fYWRwNTUyMF93cml0ZShjaGlwLT5jbGllbnQsIHJlZywgcmVnX3ZhbCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWRwNTUyMF9jbHJfYml0cyk7CisKK2ludCBhZHA1NTIwX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXN0cnVjdCBhZHA1NTIwX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChjaGlwLT5pcnEpIHsKKwkJYWRwNTUyMF9zZXRfYml0cyhjaGlwLT5kZXYsIEFEUDU1MjBfSU5URVJSVVBUX0VOQUJMRSwKKwkJCWV2ZW50cyAmIChBRFA1NTIwX0tQX0lFTiB8IEFEUDU1MjBfS1JfSUVOIHwKKwkJCUFEUDU1MjBfT1ZQX0lFTiB8IEFEUDU1MjBfQ01QUl9JRU4pKTsKKworCQlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmNoaXAtPm5vdGlmaWVyX2xpc3QsCisJCQkgbmIpOworCX0KKworCXJldHVybiAtRU5PREVWOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWRwNTUyMF9yZWdpc3Rlcl9ub3RpZmllcik7CisKK2ludCBhZHA1NTIwX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCXVuc2lnbmVkIGludCBldmVudHMpCit7CisJc3RydWN0IGFkcDU1MjBfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJYWRwNTUyMF9jbHJfYml0cyhjaGlwLT5kZXYsIEFEUDU1MjBfSU5URVJSVVBUX0VOQUJMRSwKKwkJZXZlbnRzICYgKEFEUDU1MjBfS1BfSUVOIHwgQURQNTUyMF9LUl9JRU4gfAorCQlBRFA1NTIwX09WUF9JRU4gfCBBRFA1NTIwX0NNUFJfSUVOKSk7CisKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmY2hpcC0+bm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWRwNTUyMF91bnJlZ2lzdGVyX25vdGlmaWVyKTsKKworc3RhdGljIGlycXJldHVybl90IGFkcDU1MjBfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhZHA1NTIwX2NoaXAgKmNoaXAgPSBkYXRhOworCXVuc2lnbmVkIGludCBldmVudHM7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBfX2FkcDU1MjBfcmVhZChjaGlwLT5jbGllbnQsIEFEUDU1MjBfTU9ERV9TVEFUVVMsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWV2ZW50cyA9ICByZWdfdmFsICYgKEFEUDU1MjBfT1ZQX0lOVCB8IEFEUDU1MjBfQ01QUl9JTlQgfAorCQlBRFA1NTIwX0dQSV9JTlQgfCBBRFA1NTIwX0tSX0lOVCB8IEFEUDU1MjBfS1BfSU5UKTsKKworCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmNoaXAtPm5vdGlmaWVyX2xpc3QsIGV2ZW50cywgTlVMTCk7CisJLyogQUNLLCBTdGlja3kgYml0cyBhcmUgVzFDICovCisJX19hZHA1NTIwX2Fja19iaXRzKGNoaXAtPmNsaWVudCwgQURQNTUyMF9NT0RFX1NUQVRVUywgZXZlbnRzKTsKKworb3V0OgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX3JlbW92ZV9zdWJkZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp1bnVzZWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfcmVtb3ZlX3N1YmRldnMoc3RydWN0IGFkcDU1MjBfY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGNoaXAtPmRldiwgTlVMTCwgX19yZW1vdmVfc3ViZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYWRwNTUyMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFkcDU1MjBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGFkcDU1MjBfY2hpcCAqY2hpcDsKKwlpbnQgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJTTUJVUyBXb3JkIERhdGEgbm90IFN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOworCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKKworCWNoaXAtPmRldiA9ICZjbGllbnQtPmRldjsKKwljaGlwLT5pcnEgPSBjbGllbnQtPmlycTsKKwljaGlwLT5pZCA9IGlkLT5kcml2ZXJfZGF0YTsKKwltdXRleF9pbml0KCZjaGlwLT5sb2NrKTsKKworCWlmIChjaGlwLT5pcnEpIHsKKwkJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZjaGlwLT5ub3RpZmllcl9saXN0KTsKKworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjaGlwLT5pcnEsIE5VTEwsIGFkcDU1MjBfaXJxX3RocmVhZCwKKwkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAorCQkJCSJhZHA1NTIwIiwgY2hpcCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAorCQkJCQljaGlwLT5pcnEpOworCQkJZ290byBvdXRfZnJlZV9jaGlwOworCQl9CisJfQorCisJcmV0ID0gYWRwNTUyMF93cml0ZShjaGlwLT5kZXYsIEFEUDU1MjBfTU9ERV9TVEFUVVMsIEFEUDU1MjBfblNUTkJZKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlXG4iKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJaWYgKHBkYXRhLT5rZXlzKSB7CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShjaGlwLT5kZXYsICJhZHA1NTIwLWtleXMiLAorCQkJCWNoaXAtPmlkLCBwZGF0YS0+a2V5cywgc2l6ZW9mKCpwZGF0YS0+a2V5cykpOworCQlpZiAoSVNfRVJSKHBkZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBkZXYpOworCQkJZ290byBvdXRfcmVtb3ZlX3N1YmRldnM7CisJCX0KKwl9CisKKwlpZiAocGRhdGEtPmdwaW8pIHsKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKGNoaXAtPmRldiwgImFkcDU1MjAtZ3BpbyIsCisJCQkJY2hpcC0+aWQsIHBkYXRhLT5ncGlvLCBzaXplb2YoKnBkYXRhLT5ncGlvKSk7CisJCWlmIChJU19FUlIocGRldikpIHsKKwkJCXJldCA9IFBUUl9FUlIocGRldik7CisJCQlnb3RvIG91dF9yZW1vdmVfc3ViZGV2czsKKwkJfQorCX0KKworCWlmIChwZGF0YS0+bGVkcykgeworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoY2hpcC0+ZGV2LCAiYWRwNTUyMC1sZWQiLAorCQkJCWNoaXAtPmlkLCBwZGF0YS0+bGVkcywgc2l6ZW9mKCpwZGF0YS0+bGVkcykpOworCQlpZiAoSVNfRVJSKHBkZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBkZXYpOworCQkJZ290byBvdXRfcmVtb3ZlX3N1YmRldnM7CisJCX0KKwl9CisKKwlpZiAocGRhdGEtPmJhY2tsaWdodCkgeworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoY2hpcC0+ZGV2LAorCQkJCQkJImFkcDU1MjAtYmFja2xpZ2h0IiwKKwkJCQkJCWNoaXAtPmlkLAorCQkJCQkJcGRhdGEtPmJhY2tsaWdodCwKKwkJCQkJCXNpemVvZigqcGRhdGEtPmJhY2tsaWdodCkpOworCQlpZiAoSVNfRVJSKHBkZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBkZXYpOworCQkJZ290byBvdXRfcmVtb3ZlX3N1YmRldnM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3JlbW92ZV9zdWJkZXZzOgorCWFkcDU1MjBfcmVtb3ZlX3N1YmRldnMoY2hpcCk7CisKK291dF9mcmVlX2lycToKKwlpZiAoY2hpcC0+aXJxKQorCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCitvdXRfZnJlZV9jaGlwOgorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGNoaXApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKCZjbGllbnQtPmRldik7CisKKwlpZiAoY2hpcC0+aXJxKQorCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCisJYWRwNTUyMF9yZW1vdmVfc3ViZGV2cyhjaGlwKTsKKwlhZHA1NTIwX3dyaXRlKGNoaXAtPmRldiwgQURQNTUyMF9NT0RFX1NUQVRVUywgMCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWRwNTUyMF9zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKCZjbGllbnQtPmRldik7CisKKwlhZHA1NTIwX2Nscl9iaXRzKGNoaXAtPmRldiwgQURQNTUyMF9NT0RFX1NUQVRVUywgQURQNTUyMF9uU1ROQlkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkcDU1MjBfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOworCisJYWRwNTUyMF9zZXRfYml0cyhjaGlwLT5kZXYsIEFEUDU1MjBfTU9ERV9TVEFUVVMsIEFEUDU1MjBfblNUTkJZKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkcDU1MjBfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGFkcDU1MjBfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWRwNTUyMF9pZFtdID0geworCXsgInBtaWMtYWRwNTUyMCIsIElEX0FEUDU1MjAgfSwKKwl7ICJwbWljLWFkcDU1MDEiLCBJRF9BRFA1NTAxIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkcDU1MjBfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRwNTUyMF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiYWRwNTUyMCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkcDU1MjBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZHA1NTIwX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhZHA1NTIwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZHA1NTIwX3Jlc3VtZSwKKwkuaWRfdGFibGUgCT0gYWRwNTUyMF9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkcDU1MjBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWRwNTUyMF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWRwNTUyMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFkcDU1MjBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHA1NTIwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZHA1NTIwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFA1NTIwKDAxKSBQTUlDLU1GRCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FzaWMzLmMgYi9kcml2ZXJzL21mZC9hc2ljMy5jCmluZGV4IDYzYTJhNjYuLmUyMjEyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvYXNpYzMuYwpAQCAtOTA4LDcgKzkwOCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhc2ljM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFzaWMzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAJc3RydWN0IGFzaWMzICphc2ljID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9lengtcGNhcC5jIGIvZHJpdmVycy9tZmQvZXp4LXBjYXAuYwppbmRleCA4NzYyODg5MS4uZGY0MDVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZXp4LXBjYXAuYworKysgYi9kcml2ZXJzL21mZC9lengtcGNhcC5jCkBAIC0zODcsNyArMzg3LDYgQEAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKHN1YmRldi0+bmFtZSwgc3ViZGV2LT5pZCk7CiAJcGRldi0+ZGV2LnBhcmVudCA9ICZwY2FwLT5zcGktPmRldjsKIAlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHN1YmRldi0+cGxhdGZvcm1fZGF0YTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY2FwKTsKIAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWMxMzc4My1jb3JlLmMgYi9kcml2ZXJzL21mZC9tYzEzNzgzLWNvcmUuYwppbmRleCBlMzU0ZDI5Li5hMWFkZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tYzEzNzgzLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9tYzEzNzgzLWNvcmUuYwpAQCAtMSwyODYgKzEsNTQ5IEBACiAvKgorICogQ29weXJpZ2h0IDIwMDkgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogbG9vc2VseSBiYXNlZCBvbiBhbiBlYXJsaWVyIGRyaXZlciB0aGF0IGhhcwogICogQ29weXJpZ2h0IDIwMDkgUGVuZ3V0cm9uaXgsIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KICAqCi0gKiBUaGlzIGNvZGUgaXMgaW4gcGFydHMgYmFzZWQgb24gd204MzUwLWNvcmUuYyBhbmQgcGNmNTA2MzMtY29yZS5jCi0gKgotICogSW5pdGlhbCBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIGZ1bmRlZCBieQotICogUGh5dGVjIE1lc3N0ZWNobmlrIEdtYkgsIGh0dHA6Ly93d3cucGh5dGVjLmRlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My1wcml2YXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMtcHJpdmF0ZS5oPgogCi0jZGVmaW5lIE1DMTM3ODNfTUFYX1JFR19OVU0JMHgzZgotI2RlZmluZSBNQzEzNzgzX0ZSQU1FX01BU0sJMHgwMGZmZmZmZgotI2RlZmluZSBNQzEzNzgzX01BWF9SRUdfTlVNCTB4M2YKLSNkZWZpbmUgTUMxMzc4M19SRUdfTlVNX1NISUZUCTB4MTkKLSNkZWZpbmUgTUMxMzc4M19XUklURV9CSVRfU0hJRlQJMzEKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMAkwCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfQURDRE9ORUkJKDEgPDwgMCkKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMF9BRENCSVNET05FSQkoMSA8PCAxKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQwX1RTSQkJKDEgPDwgMikKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMF9XSElHSEkJCSgxIDw8IDMpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfV0xPV0kJCSgxIDw8IDQpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfQ0hHREVUSQkoMSA8PCA2KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQwX0NIR09WSQkJKDEgPDwgNykKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMF9DSEdSRVZJCSgxIDw8IDgpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfQ0hHU0hPUlRJCSgxIDw8IDkpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfQ0NDVkkJCSgxIDw8IDEwKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQwX0NIR0NVUlJJCSgxIDw8IDExKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQwX0JQT05JCQkoMSA8PCAxMikKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMF9MT0JBVExJCSgxIDw8IDEzKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQwX0xPQkFUSEkJKDEgPDwgMTQpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfVURQSQkJKDEgPDwgMTUpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfVVNCSQkJKDEgPDwgMTYpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDBfSURJCQkoMSA8PCAxOSkKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMF9TRTFJCQkoMSA8PCAyMSkKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMF9DS0RFVEkJCSgxIDw8IDIyKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQwX1VETUkJCSgxIDw8IDIzKQogCi1zdGF0aWMgaW5saW5lIGludCBzcGlfcncoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggKiBidWYsIHNpemVfdCBsZW4pCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzAJMQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX0FEQ0RPTkVNCU1DMTM3ODNfSVJRU1RBVDBfQURDRE9ORUkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMF9BRENCSVNET05FTQlNQzEzNzgzX0lSUVNUQVQwX0FEQ0JJU0RPTkVJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfVFNNCQlNQzEzNzgzX0lSUVNUQVQwX1RTSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX1dISUdITQkJTUMxMzc4M19JUlFTVEFUMF9XSElHSEkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMF9XTE9XTQkJTUMxMzc4M19JUlFTVEFUMF9XTE9XSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX0NIR0RFVE0JTUMxMzc4M19JUlFTVEFUMF9DSEdERVRJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfQ0hHT1ZNCQlNQzEzNzgzX0lSUVNUQVQwX0NIR09WSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX0NIR1JFVk0JTUMxMzc4M19JUlFTVEFUMF9DSEdSRVZJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfQ0hHU0hPUlRNCU1DMTM3ODNfSVJRU1RBVDBfQ0hHU0hPUlRJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfQ0NDVk0JCU1DMTM3ODNfSVJRU1RBVDBfQ0NDVkkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMF9DSEdDVVJSTQlNQzEzNzgzX0lSUVNUQVQwX0NIR0NVUlJJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfQlBPTk0JCU1DMTM3ODNfSVJRU1RBVDBfQlBPTkkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMF9MT0JBVExNCU1DMTM3ODNfSVJRU1RBVDBfTE9CQVRMSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX0xPQkFUSE0JTUMxMzc4M19JUlFTVEFUMF9MT0JBVEhJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfVURQTQkJTUMxMzc4M19JUlFTVEFUMF9VRFBJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfVVNCTQkJTUMxMzc4M19JUlFTVEFUMF9VU0JJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzBfSURNCQlNQzEzNzgzX0lSUVNUQVQwX0lESQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX1NFMU0JCU1DMTM3ODNfSVJRU1RBVDBfU0UxSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0swX0NLREVUTQkJTUMxMzc4M19JUlFTVEFUMF9DS0RFVEkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMF9VRE1NCQlNQzEzNzgzX0lSUVNUQVQwX1VETUkKKworI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxCTMKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV8xSFpJCQkoMSA8PCAwKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX1RPREFJCQkoMSA8PCAxKQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX09OT0ZEMUkJKDEgPDwgMykKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9PTk9GRDJJCSgxIDw8IDQpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDFfT05PRkQzSQkoMSA8PCA1KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX1NZU1JTVEkJKDEgPDwgNikKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9SVENSU1RJCSgxIDw8IDcpCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDFfUENJCQkoMSA8PCA4KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX1dBUk1JCQkoMSA8PCA5KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX01FTUhMREkJKDEgPDwgMTApCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDFfUFdSUkRZSQkoMSA8PCAxMSkKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9USFdBUk5MSQkoMSA8PCAxMikKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9USFdBUk5ISQkoMSA8PCAxMykKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9DTEtJCQkoMSA8PCAxNCkKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9TRU1BRkkJCSgxIDw8IDE1KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX01DMkJJCQkoMSA8PCAxNykKKyNkZWZpbmUgTUMxMzc4M19JUlFTVEFUMV9IU0RFVEkJCSgxIDw8IDE4KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX0hTTEkJCSgxIDw8IDE5KQorI2RlZmluZSBNQzEzNzgzX0lSUVNUQVQxX0FMU1BUSEkJKDEgPDwgMjApCisjZGVmaW5lIE1DMTM3ODNfSVJRU1RBVDFfQUhTU0hPUlRJCSgxIDw8IDIxKQorCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzEJNAorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxXzFIWk0JCU1DMTM3ODNfSVJRU1RBVDFfMUhaSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX1RPREFNCQlNQzEzNzgzX0lSUVNUQVQxX1RPREFJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzFfT05PRkQxTQlNQzEzNzgzX0lSUVNUQVQxX09OT0ZEMUkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9PTk9GRDJNCU1DMTM3ODNfSVJRU1RBVDFfT05PRkQySQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX09OT0ZEM00JTUMxMzc4M19JUlFTVEFUMV9PTk9GRDNJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzFfU1lTUlNUTQlNQzEzNzgzX0lSUVNUQVQxX1NZU1JTVEkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9SVENSU1RNCU1DMTM3ODNfSVJRU1RBVDFfUlRDUlNUSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX1BDTQkJTUMxMzc4M19JUlFTVEFUMV9QQ0kKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9XQVJNTQkJTUMxMzc4M19JUlFTVEFUMV9XQVJNSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX01FTUhMRE0JTUMxMzc4M19JUlFTVEFUMV9NRU1ITERJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzFfUFdSUkRZTQlNQzEzNzgzX0lSUVNUQVQxX1BXUlJEWUkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9USFdBUk5MTQlNQzEzNzgzX0lSUVNUQVQxX1RIV0FSTkxJCisjZGVmaW5lIE1DMTM3ODNfSVJRTUFTSzFfVEhXQVJOSE0JTUMxMzc4M19JUlFTVEFUMV9USFdBUk5ISQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX0NMS00JCU1DMTM3ODNfSVJRU1RBVDFfQ0xLSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX1NFTUFGTQkJTUMxMzc4M19JUlFTVEFUMV9TRU1BRkkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9NQzJCTQkJTUMxMzc4M19JUlFTVEFUMV9NQzJCSQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX0hTREVUTQkJTUMxMzc4M19JUlFTVEFUMV9IU0RFVEkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9IU0xNCQlNQzEzNzgzX0lSUVNUQVQxX0hTTEkKKyNkZWZpbmUgTUMxMzc4M19JUlFNQVNLMV9BTFNQVEhNCU1DMTM3ODNfSVJRU1RBVDFfQUxTUFRISQorI2RlZmluZSBNQzEzNzgzX0lSUU1BU0sxX0FIU1NIT1JUTQlNQzEzNzgzX0lSUVNUQVQxX0FIU1NIT1JUSQorCisjZGVmaW5lIE1DMTM3ODNfQURDMQkJNDQKKyNkZWZpbmUgTUMxMzc4M19BREMxX0FERU4JCSgxIDw8IDApCisjZGVmaW5lIE1DMTM3ODNfQURDMV9SQU5ECQkoMSA8PCAxKQorI2RlZmluZSBNQzEzNzgzX0FEQzFfQURTRUwJCSgxIDw8IDMpCisjZGVmaW5lIE1DMTM3ODNfQURDMV9BU0MJCSgxIDw8IDIwKQorI2RlZmluZSBNQzEzNzgzX0FEQzFfQURUUklHSUdOCQkoMSA8PCAyMSkKKworI2RlZmluZSBNQzEzNzgzX05VTVJFR1MgMHgzZgorCit2b2lkIG1jMTM3ODNfbG9jayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MykKIHsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7Ci0JCS50eF9idWYgPSAoY29uc3Qgdm9pZCAqKWJ1ZiwKLQkJLnJ4X2J1ZiA9IGJ1ZiwKLQkJLmxlbiA9IGxlbiwKLQkJLmNzX2NoYW5nZSA9IDAsCi0JCS5kZWxheV91c2VjcyA9IDAsCi0JfTsKKwlpZiAoIW11dGV4X3RyeWxvY2soJm1jMTM3ODMtPmxvY2spKSB7CisJCWRldl9kYmcoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAid2FpdCBmb3IgJXMgZnJvbSAlcGZcbiIsCisJCQkJX19mdW5jX18sIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisKKwkJbXV0ZXhfbG9jaygmbWMxMzc4My0+bG9jayk7CisJfQorCWRldl9kYmcoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAiJXMgZnJvbSAlcGZcbiIsCisJCQlfX2Z1bmNfXywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KK0VYUE9SVF9TWU1CT0wobWMxMzc4M19sb2NrKTsKKwordm9pZCBtYzEzNzgzX3VubG9jayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MykKK3sKKwlkZXZfZGJnKCZtYzEzNzgzLT5zcGlkZXYtPmRldiwgIiVzIGZyb20gJXBmXG4iLAorCQkJX19mdW5jX18sIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJbXV0ZXhfdW5sb2NrKCZtYzEzNzgzLT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wobWMxMzc4M191bmxvY2spOworCisjZGVmaW5lIE1DMTM3ODNfUkVHT0ZGU0VUX1NISUZUIDI1CitpbnQgbWMxMzc4M19yZWdfcmVhZChzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyICp2YWwpCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCWludCByZXQ7CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmbWMxMzc4My0+bG9jaykpOworCisJaWYgKG9mZnNldCA+IE1DMTM3ODNfTlVNUkVHUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdmFsID0gb2Zmc2V0IDw8IE1DMTM3ODNfUkVHT0ZGU0VUX1NISUZUOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCisJdC50eF9idWYgPSB2YWw7CisJdC5yeF9idWYgPSB2YWw7CisJdC5sZW4gPSBzaXplb2YodTMyKTsKIAogCXNwaV9tZXNzYWdlX2luaXQoJm0pOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0JaWYgKHNwaV9zeW5jKHNwaSwgJm0pICE9IDAgfHwgbS5zdGF0dXMgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGxlbiAtIG0uYWN0dWFsX2xlbmd0aDsKKworCXJldCA9IHNwaV9zeW5jKG1jMTM3ODMtPnNwaWRldiwgJm0pOworCisJLyogZXJyb3IgaW4gbWVzc2FnZS5zdGF0dXMgaW1wbGllcyBlcnJvciByZXR1cm4gZnJvbSBzcGlfc3luYyAqLworCUJVR19PTighcmV0ICYmIG0uc3RhdHVzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqdmFsICY9IDB4ZmZmZmZmOworCisJZGV2X3ZkYmcoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAiWzB4JTAyeF0gLT4gMHglMDZ4XG4iLCBvZmZzZXQsICp2YWwpOworCisJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfcmVnX3JlYWQpOwogCi1zdGF0aWMgaW50IG1jMTM3ODNfcmVhZChzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IHJlZ19udW0sIHUzMiAqcmVnX3ZhbCkKK2ludCBtYzEzNzgzX3JlZ193cml0ZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHZhbCkKIHsKLQl1bnNpZ25lZCBpbnQgZnJhbWUgPSAwOwotCWludCByZXQgPSAwOwotCi0JaWYgKHJlZ19udW0gPiBNQzEzNzgzX01BWF9SRUdfTlVNKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZyYW1lIHw9IHJlZ19udW0gPDwgTUMxMzc4M19SRUdfTlVNX1NISUZUOwotCi0JcmV0ID0gc3BpX3J3KG1jMTM3ODMtPnNwaV9kZXZpY2UsICh1OCAqKSZmcmFtZSwgNCk7Ci0KLQkqcmVnX3ZhbCA9IGZyYW1lICYgTUMxMzc4M19GUkFNRV9NQVNLOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtYzEzNzgzX3dyaXRlKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgcmVnX251bSwgdTMyIHJlZ192YWwpCi17Ci0JdW5zaWduZWQgaW50IGZyYW1lID0gMDsKLQotCWlmIChyZWdfbnVtID4gTUMxMzc4M19NQVhfUkVHX05VTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmcmFtZSB8PSAoMSA8PCBNQzEzNzgzX1dSSVRFX0JJVF9TSElGVCk7Ci0JZnJhbWUgfD0gcmVnX251bSA8PCBNQzEzNzgzX1JFR19OVU1fU0hJRlQ7Ci0JZnJhbWUgfD0gcmVnX3ZhbCAmIE1DMTM3ODNfRlJBTUVfTUFTSzsKLQotCXJldHVybiBzcGlfcncobWMxMzc4My0+c3BpX2RldmljZSwgKHU4ICopJmZyYW1lLCA0KTsKLX0KLQotaW50IG1jMTM3ODNfcmVnX3JlYWQoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCByZWdfbnVtLCB1MzIgKnJlZ192YWwpCi17CisJdTMyIGJ1ZjsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJm1jMTM3ODMtPmlvX2xvY2spOwotCXJldCA9IG1jMTM3ODNfcmVhZChtYzEzNzgzLCByZWdfbnVtLCByZWdfdmFsKTsKLQltdXRleF91bmxvY2soJm1jMTM3ODMtPmlvX2xvY2spOworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZtYzEzNzgzLT5sb2NrKSk7CiAKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWMxMzc4M19yZWdfcmVhZCk7CisJZGV2X3ZkYmcoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAiWzB4JTAyeF0gPC0gMHglMDZ4XG4iLCBvZmZzZXQsIHZhbCk7CiAKLWludCBtYzEzNzgzX3JlZ193cml0ZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IHJlZ19udW0sIHUzMiByZWdfdmFsKQotewotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZtYzEzNzgzLT5pb19sb2NrKTsKLQlyZXQgPSBtYzEzNzgzX3dyaXRlKG1jMTM3ODMsIHJlZ19udW0sIHJlZ192YWwpOwotCW11dGV4X3VubG9jaygmbWMxMzc4My0+aW9fbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWMxMzc4M19yZWdfd3JpdGUpOwotCi0vKioKLSAqIG1jMTM3ODNfc2V0X2JpdHMgLSBCaXRtYXNrIHdyaXRlCi0gKgotICogQG1jMTM3ODM6IFBvaW50ZXIgdG8gbWMxMzc4MyBjb250cm9sIHN0cnVjdHVyZQotICogQHJlZzogICAgUmVnaXN0ZXIgdG8gYWNjZXNzCi0gKiBAbWFzazogICBNYXNrIG9mIGJpdHMgdG8gY2hhbmdlCi0gKiBAdmFsOiAgICBWYWx1ZSB0byBzZXQgZm9yIG1hc2tlZCBiaXRzCi0gKi8KLWludCBtYzEzNzgzX3NldF9iaXRzKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQl1MzIgdG1wOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZtYzEzNzgzLT5pb19sb2NrKTsKLQotCXJldCA9IG1jMTM3ODNfcmVhZChtYzEzNzgzLCByZWcsICZ0bXApOwotCXRtcCA9ICh0bXAgJiB+bWFzaykgfCB2YWw7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBtYzEzNzgzX3dyaXRlKG1jMTM3ODMsIHJlZywgdG1wKTsKLQotCW11dGV4X3VubG9jaygmbWMxMzc4My0+aW9fbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWMxMzc4M19zZXRfYml0cyk7Ci0KLWludCBtYzEzNzgzX3JlZ2lzdGVyX2lycShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwKLQkJdm9pZCAoKmhhbmRsZXIpIChpbnQsIHZvaWQgKiksIHZvaWQgKmRhdGEpCi17Ci0JaWYgKGlycSA8IDAgfHwgaXJxID4gTUMxMzc4M19OVU1fSVJRIHx8ICFoYW5kbGVyKQorCWlmIChvZmZzZXQgPiBNQzEzNzgzX05VTVJFR1MgfHwgdmFsID4gMHhmZmZmZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKFdBUk5fT04obWMxMzc4My0+aXJxX2hhbmRsZXJbaXJxXS5oYW5kbGVyKSkKKwlidWYgPSAxIDw8IDMxIHwgb2Zmc2V0IDw8IE1DMTM3ODNfUkVHT0ZGU0VUX1NISUZUIHwgdmFsOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCisJdC50eF9idWYgPSAmYnVmOworCXQucnhfYnVmID0gJmJ1ZjsKKwl0LmxlbiA9IHNpemVvZih1MzIpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCXJldCA9IHNwaV9zeW5jKG1jMTM3ODMtPnNwaWRldiwgJm0pOworCisJQlVHX09OKCFyZXQgJiYgbS5zdGF0dXMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtYzEzNzgzX3JlZ193cml0ZSk7CisKK2ludCBtYzEzNzgzX3JlZ19ybXcoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXUzMiBtYXNrLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdTMyIHZhbHJlYWQ7CisKKwlCVUdfT04odmFsICYgfm1hc2spOworCisJcmV0ID0gbWMxMzc4M19yZWdfcmVhZChtYzEzNzgzLCBvZmZzZXQsICZ2YWxyZWFkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFscmVhZCA9ICh2YWxyZWFkICYgfm1hc2spIHwgdmFsOworCisJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZnNldCwgdmFscmVhZCk7Cit9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfcmVnX3Jtdyk7CisKK2ludCBtYzEzNzgzX21hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgb2ZmbWFzayA9IGlycSA8IDI0ID8gTUMxMzc4M19JUlFNQVNLMCA6IE1DMTM3ODNfSVJRTUFTSzE7CisJdTMyIGlycWJpdCA9IDEgPDwgKGlycSA8IDI0ID8gaXJxIDogaXJxIC0gMjQpOworCXUzMiBtYXNrOworCisJaWYgKGlycSA8IDAgfHwgaXJxID49IE1DMTM3ODNfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIG9mZm1hc2ssICZtYXNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG1hc2sgJiBpcnFiaXQpCisJCS8qIGFscmVhZHkgbWFza2VkICovCisJCXJldHVybiAwOworCisJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZm1hc2ssIG1hc2sgfCBpcnFiaXQpOworfQorRVhQT1JUX1NZTUJPTChtYzEzNzgzX21hc2spOworCitpbnQgbWMxMzc4M191bm1hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgb2ZmbWFzayA9IGlycSA8IDI0ID8gTUMxMzc4M19JUlFNQVNLMCA6IE1DMTM3ODNfSVJRTUFTSzE7CisJdTMyIGlycWJpdCA9IDEgPDwgKGlycSA8IDI0ID8gaXJxIDogaXJxIC0gMjQpOworCXUzMiBtYXNrOworCisJaWYgKGlycSA8IDAgfHwgaXJxID49IE1DMTM3ODNfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIG9mZm1hc2ssICZtYXNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCEobWFzayAmIGlycWJpdCkpCisJCS8qIGFscmVhZHkgdW5tYXNrZWQgKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4Mywgb2ZmbWFzaywgbWFzayAmIH5pcnFiaXQpOworfQorRVhQT1JUX1NZTUJPTChtYzEzNzgzX3VubWFzayk7CisKK2ludCBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAorCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRldikKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmbWMxMzc4My0+bG9jaykpOworCUJVR19PTighaGFuZGxlcik7CisKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTUMxMzc4M19OVU1fSVJRKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtYzEzNzgzLT5pcnFoYW5kbGVyW2lycV0pCiAJCXJldHVybiAtRUJVU1k7CiAKLQltdXRleF9sb2NrKCZtYzEzNzgzLT5pb19sb2NrKTsKLQltYzEzNzgzLT5pcnFfaGFuZGxlcltpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOwotCW1jMTM3ODMtPmlycV9oYW5kbGVyW2lycV0uZGF0YSA9IGRhdGE7Ci0JbXV0ZXhfdW5sb2NrKCZtYzEzNzgzLT5pb19sb2NrKTsKKwltYzEzNzgzLT5pcnFoYW5kbGVyW2lycV0gPSBoYW5kbGVyOworCW1jMTM3ODMtPmlycWRhdGFbaXJxXSA9IGRldjsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobWMxMzc4M19yZWdpc3Rlcl9pcnEpOworRVhQT1JUX1NZTUJPTChtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKTsKIAotaW50IG1jMTM3ODNfZnJlZV9pcnEoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCitpbnQgbWMxMzc4M19pcnFfcmVxdWVzdChzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwKKwkJaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkZXYpCiB7Ci0JaWYgKGlycSA8IDAgfHwgaXJxID4gTUMxMzc4M19OVU1fSVJRKQorCWludCByZXQ7CisKKwlyZXQgPSBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKG1jMTM3ODMsIGlycSwgaGFuZGxlciwgbmFtZSwgZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWMxMzc4M191bm1hc2sobWMxMzc4MywgaXJxKTsKKwlpZiAocmV0KSB7CisJCW1jMTM3ODMtPmlycWhhbmRsZXJbaXJxXSA9IE5VTEw7CisJCW1jMTM3ODMtPmlycWRhdGFbaXJxXSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX3JlcXVlc3QpOworCitpbnQgbWMxMzc4M19pcnFfZnJlZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwgdm9pZCAqZGV2KQoreworCWludCByZXQ7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJm1jMTM3ODMtPmxvY2spKTsKKworCWlmIChpcnEgPCAwIHx8IGlycSA+PSBNQzEzNzgzX05VTV9JUlEgfHwgIW1jMTM3ODMtPmlycWhhbmRsZXJbaXJxXSB8fAorCQkJbWMxMzc4My0+aXJxZGF0YVtpcnFdICE9IGRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZtYzEzNzgzLT5pb19sb2NrKTsKLQltYzEzNzgzLT5pcnFfaGFuZGxlcltpcnFdLmhhbmRsZXIgPSBOVUxMOwotCW11dGV4X3VubG9jaygmbWMxMzc4My0+aW9fbG9jayk7CisJcmV0ID0gbWMxMzc4M19tYXNrKG1jMTM3ODMsIGlycSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1jMTM3ODMtPmlycWhhbmRsZXJbaXJxXSA9IE5VTEw7CisJbWMxMzc4My0+aXJxZGF0YVtpcnFdID0gTlVMTDsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobWMxMzc4M19mcmVlX2lycSk7CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX2ZyZWUpOwogCi1zdGF0aWMgdm9pZCBtYzEzNzgzX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgbWMxMzc4M19pcnFoYW5kbGVyKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQogewotCXN0cnVjdCBtYzEzNzgzICptYzEzNzgzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtYzEzNzgzLCB3b3JrKTsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgYWRjX3N0czsKLQotCS8qIGNoZWNrIGlmIHRoZSBhZGMgaGFzIGZpbmlzaGVkIGFueSBjb21wbGV0aW9uICovCi0JbWMxMzc4M19yZWdfcmVhZChtYzEzNzgzLCBNQzEzNzgzX1JFR19JTlRFUlJVUFRfU1RBVFVTXzAsICZhZGNfc3RzKTsKLQltYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19JTlRFUlJVUFRfU1RBVFVTXzAsCi0JCQlhZGNfc3RzICYgTUMxMzc4M19JTlRfU1RBVF9BRENET05FSSk7Ci0KLQlpZiAoYWRjX3N0cyAmIE1DMTM3ODNfSU5UX1NUQVRfQURDRE9ORUkpCi0JCWNvbXBsZXRlX2FsbCgmbWMxMzc4My0+YWRjX2RvbmUpOwotCi0JZm9yIChpID0gMDsgaSA8IE1DMTM3ODNfTlVNX0lSUTsgaSsrKQotCQlpZiAobWMxMzc4My0+aXJxX2hhbmRsZXJbaV0uaGFuZGxlcikKLQkJCW1jMTM3ODMtPmlycV9oYW5kbGVyW2ldLmhhbmRsZXIoaSwKLQkJCQkJbWMxMzc4My0+aXJxX2hhbmRsZXJbaV0uZGF0YSk7Ci0JZW5hYmxlX2lycShtYzEzNzgzLT5pcnEpOworCXJldHVybiBtYzEzNzgzLT5pcnFoYW5kbGVyW2lycV0oaXJxLCBtYzEzNzgzLT5pcnFkYXRhW2lycV0pOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWMxMzc4M19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoraW50IG1jMTM3ODNfYWNraXJxKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQogewotCXN0cnVjdCBtYzEzNzgzICptYzEzNzgzID0gZGV2X2lkOworCXVuc2lnbmVkIGludCBvZmZzdGF0ID0gaXJxIDwgMjQgPyBNQzEzNzgzX0lSUVNUQVQwIDogTUMxMzc4M19JUlFTVEFUMTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMSA8PCAoaXJxIDwgMjQgPyBpcnEgOiBpcnEgLSAyNCk7CiAKLQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlCVUdfT04oaXJxIDwgMCB8fCBpcnEgPj0gTUMxMzc4M19OVU1fSVJRKTsKIAotCXNjaGVkdWxlX3dvcmsoJm1jMTM3ODMtPndvcmspOworCXJldHVybiBtYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBvZmZzdGF0LCB2YWwpOworfQorRVhQT1JUX1NZTUJPTChtYzEzNzgzX2Fja2lycSk7CisKKy8qCisgKiByZXR1cm5zOiBudW1iZXIgb2YgaGFuZGxlZCBpcnFzIG9yIG5lZ2F0aXZlIGVycm9yCisgKiBsb2NraW5nOiBob2xkcyBtYzEzNzgzLT5sb2NrCisgKi8KK3N0YXRpYyBpbnQgbWMxMzc4M19pcnFfaGFuZGxlKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLAorCQl1bnNpZ25lZCBpbnQgb2Zmc3RhdCwgdW5zaWduZWQgaW50IG9mZm1hc2ssIGludCBiYXNlaXJxKQoreworCXUzMiBzdGF0LCBtYXNrOworCWludCByZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIG9mZnN0YXQsICZzdGF0KTsKKwlpbnQgbnVtX2hhbmRsZWQgPSAwOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQobWMxMzc4Mywgb2ZmbWFzaywgJm1hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl3aGlsZSAoc3RhdCAmIH5tYXNrKSB7CisJCWludCBpcnEgPSBfX2ZmcyhzdGF0ICYgfm1hc2spOworCisJCXN0YXQgJj0gfigxIDw8IGlycSk7CisKKwkJaWYgKGxpa2VseShtYzEzNzgzLT5pcnFoYW5kbGVyW2Jhc2VpcnEgKyBpcnFdKSkgeworCQkJaXJxcmV0dXJuX3QgaGFuZGxlZDsKKworCQkJaGFuZGxlZCA9IG1jMTM3ODNfaXJxaGFuZGxlcihtYzEzNzgzLCBiYXNlaXJxICsgaXJxKTsKKwkJCWlmIChoYW5kbGVkID09IElSUV9IQU5ETEVEKQorCQkJCW51bV9oYW5kbGVkKys7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZtYzEzNzgzLT5zcGlkZXYtPmRldiwKKwkJCQkJIkJVRzogaXJxICV1IGJ1dCBubyBoYW5kbGVyXG4iLAorCQkJCQliYXNlaXJxICsgaXJxKTsKKworCQkJbWFzayB8PSAxIDw8IGlycTsKKworCQkJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4Mywgb2ZmbWFzaywgbWFzayk7CisJCX0KKwl9CisKKwlyZXR1cm4gbnVtX2hhbmRsZWQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYzEzNzgzX2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MyA9IGRhdGE7CisJaXJxcmV0dXJuX3QgcmV0OworCWludCBoYW5kbGVkID0gMDsKKworCW1jMTM3ODNfbG9jayhtYzEzNzgzKTsKKworCXJldCA9IG1jMTM3ODNfaXJxX2hhbmRsZShtYzEzNzgzLCBNQzEzNzgzX0lSUVNUQVQwLAorCQkJTUMxMzc4M19JUlFNQVNLMCwgTUMxMzc4M19JUlFfQURDRE9ORSk7CisJaWYgKHJldCA+IDApCisJCWhhbmRsZWQgPSAxOworCisJcmV0ID0gbWMxMzc4M19pcnFfaGFuZGxlKG1jMTM3ODMsIE1DMTM3ODNfSVJRU1RBVDEsCisJCQlNQzEzNzgzX0lSUU1BU0sxLCBNQzEzNzgzX0lSUV8xSFopOworCWlmIChyZXQgPiAwKQorCQloYW5kbGVkID0gMTsKKworCW1jMTM3ODNfdW5sb2NrKG1jMTM3ODMpOworCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKKyNkZWZpbmUgTUMxMzc4M19BREMxX0NIQU4wX1NISUZUCTUKKyNkZWZpbmUgTUMxMzc4M19BREMxX0NIQU4xX1NISUZUCTgKKworc3RydWN0IG1jMTM3ODNfYWRjZG9uZV9kYXRhIHsKKwlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MzsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworfTsKKworc3RhdGljIGlycXJldHVybl90IG1jMTM3ODNfaGFuZGxlcl9hZGNkb25lKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1jMTM3ODNfYWRjZG9uZV9kYXRhICphZGNkb25lX2RhdGEgPSBkYXRhOworCisJbWMxMzc4M19hY2tpcnEoYWRjZG9uZV9kYXRhLT5tYzEzNzgzLCBpcnEpOworCisJY29tcGxldGVfYWxsKCZhZGNkb25lX2RhdGEtPmRvbmUpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKiBzZXQgYWRjIHRvIHRzIGludGVycnVwdCBtb2RlLCB3aGljaCBnZW5lcmF0ZXMgdG91Y2hzY3JlZW4gd2FrZXVwIGludGVycnVwdCAqLwotc3RhdGljIGlubGluZSB2b2lkIG1jMTM3ODNfYWRjX3NldF90c19pcnFfbW9kZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MykKLXsKLQl1bnNpZ25lZCBpbnQgcmVnX2FkYzAsIHJlZ19hZGMxOwotCi0JcmVnX2FkYzAgPSBNQzEzNzgzX0FEQzBfQURSRUZFTiB8IE1DMTM3ODNfQURDMF9BRFJFRk1PREUKLQkJCXwgTUMxMzc4M19BREMwX1RTTU9EMDsKLQlyZWdfYWRjMSA9IE1DMTM3ODNfQURDMV9BREVOIHwgTUMxMzc4M19BREMxX0FEVFJJR0lHTjsKLQotCW1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0FEQ18wLCByZWdfYWRjMCk7Ci0JbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfQURDXzEsIHJlZ19hZGMxKTsKLX0KKyNkZWZpbmUgTUMxMzc4M19BRENfV09SS0lORyAoMSA8PCAxNikKIAogaW50IG1jMTM3ODNfYWRjX2RvX2NvbnZlcnNpb24oc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIHVuc2lnbmVkIGludCBtb2RlLAogCQl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50ICpzYW1wbGUpCiB7Ci0JdW5zaWduZWQgaW50IHJlZ19hZGMwLCByZWdfYWRjMTsKLQlpbnQgaTsKKwl1MzIgYWRjMCwgYWRjMSwgb2xkX2FkYzA7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgbWMxMzc4M19hZGNkb25lX2RhdGEgYWRjZG9uZV9kYXRhID0geworCQkubWMxMzc4MyA9IG1jMTM3ODMsCisJfTsKKwlpbml0X2NvbXBsZXRpb24oJmFkY2RvbmVfZGF0YS5kb25lKTsKIAotCW11dGV4X2xvY2soJm1jMTM3ODMtPmFkY19jb252X2xvY2spOworCWRldl9kYmcoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCS8qIHNldCB1cCBhdXRvIGluY3JlbWVudGluZyBhbnl3YXkgdG8gbWFrZSBxdWljayByZWFkICovCi0JcmVnX2FkYzAgPSAgTUMxMzc4M19BREMwX0FESU5DMSB8IE1DMTM3ODNfQURDMF9BRElOQzI7Ci0JLyogZW5hYmxlIHRoZSBhZGMsIGlnbm9yZSBleHRlcm5hbCB0cmlnZ2VyaW5nIGFuZCBzZXQgQVNDIHRvIHRyaWdnZXIKLQkgKiBjb252ZXJzaW9uICovCi0JcmVnX2FkYzEgPSAgTUMxMzc4M19BREMxX0FERU4gfCBNQzEzNzgzX0FEQzFfQURUUklHSUdOCi0JCXwgTUMxMzc4M19BREMxX0FTQzsKKwltYzEzNzgzX2xvY2sobWMxMzc4Myk7CiAKLQkvKiBzZXR1cCBjaGFubmVsIG51bWJlciAqLworCWlmIChtYzEzNzgzLT5mbGFncyAmIE1DMTM3ODNfQURDX1dPUktJTkcpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwltYzEzNzgzLT5mbGFncyB8PSBNQzEzNzgzX0FEQ19XT1JLSU5HOworCisJbWMxMzc4M19yZWdfcmVhZChtYzEzNzgzLCBNQzEzNzgzX0FEQzAsICZvbGRfYWRjMCk7CisKKwlhZGMwID0gTUMxMzc4M19BREMwX0FESU5DMSB8IE1DMTM3ODNfQURDMF9BRElOQzI7CisJYWRjMSA9IE1DMTM3ODNfQURDMV9BREVOIHwgTUMxMzc4M19BREMxX0FEVFJJR0lHTiB8IE1DMTM3ODNfQURDMV9BU0M7CisKIAlpZiAoY2hhbm5lbCA+IDcpCi0JCXJlZ19hZGMxIHw9IE1DMTM3ODNfQURDMV9BRFNFTDsKKwkJYWRjMSB8PSBNQzEzNzgzX0FEQzFfQURTRUw7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIE1DMTM3ODNfQURDX01PREVfVFM6Ci0JCS8qIGVuYWJsZXMgdG91Y2ggc2NyZWVuIHJlZmVyZW5jZSBtb2RlIGFuZCBzZXQgdG91Y2hzY3JlZW4gbW9kZQotCQkgKiB0byBwb3NpdGlvbiBtb2RlICovCi0JCXJlZ19hZGMwIHw9IE1DMTM3ODNfQURDMF9BRFJFRkVOIHwgTUMxMzc4M19BREMwX0FEUkVGTU9ERQotCQkJfCBNQzEzNzgzX0FEQzBfVFNNT0QwIHwgTUMxMzc4M19BREMwX1RTTU9EMTsKLQkJcmVnX2FkYzEgfD0gNCA8PCBNQzEzNzgzX0FEQzFfQ0hBTjFfU0hJRlQ7CisJCWFkYzAgfD0gTUMxMzc4M19BREMwX0FEUkVGRU4gfCBNQzEzNzgzX0FEQzBfVFNNT0QwIHwKKwkJCU1DMTM3ODNfQURDMF9UU01PRDE7CisJCWFkYzEgfD0gNCA8PCBNQzEzNzgzX0FEQzFfQ0hBTjFfU0hJRlQ7CiAJCWJyZWFrOworCiAJY2FzZSBNQzEzNzgzX0FEQ19NT0RFX1NJTkdMRV9DSEFOOgotCQlyZWdfYWRjMSB8PSAoY2hhbm5lbCAmIDB4NykgPDwgTUMxMzc4M19BREMxX0NIQU4wX1NISUZUOwotCQlyZWdfYWRjMSB8PSBNQzEzNzgzX0FEQzFfUkFORDsKKwkJYWRjMCB8PSBvbGRfYWRjMCAmIE1DMTM3ODNfQURDMF9UU01PRF9NQVNLOworCQlhZGMxIHw9IChjaGFubmVsICYgMHg3KSA8PCBNQzEzNzgzX0FEQzFfQ0hBTjBfU0hJRlQ7CisJCWFkYzEgfD0gTUMxMzc4M19BREMxX1JBTkQ7CiAJCWJyZWFrOworCiAJY2FzZSBNQzEzNzgzX0FEQ19NT0RFX01VTFRfQ0hBTjoKLQkJcmVnX2FkYzEgfD0gNCA8PCBNQzEzNzgzX0FEQzFfQ0hBTjFfU0hJRlQ7CisJCWFkYzAgfD0gb2xkX2FkYzAgJiBNQzEzNzgzX0FEQzBfVFNNT0RfTUFTSzsKKwkJYWRjMSB8PSA0IDw8IE1DMTM3ODNfQURDMV9DSEFOMV9TSElGVDsKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgorCQltYzEzNzgzX3VubG9jayhtYzEzNzgzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfQURDXzAsIHJlZ19hZGMwKTsKLQltYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19BRENfMSwgcmVnX2FkYzEpOworCWRldl9kYmcoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAiJXM6IHJlcXVlc3QgaXJxXG4iLCBfX2Z1bmNfXyk7CisJbWMxMzc4M19pcnFfcmVxdWVzdChtYzEzNzgzLCBNQzEzNzgzX0lSUV9BRENET05FLAorCQkJbWMxMzc4M19oYW5kbGVyX2FkY2RvbmUsIF9fZnVuY19fLCAmYWRjZG9uZV9kYXRhKTsKKwltYzEzNzgzX2Fja2lycShtYzEzNzgzLCBNQzEzNzgzX0lSUV9BRENET05FKTsKIAotCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmbWMxMzc4My0+YWRjX2RvbmUpOworCW1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0FEQ18wLCBhZGMwKTsKKwltYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19BRENfMSwgYWRjMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQltYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0FEQ18yLCAmc2FtcGxlW2ldKTsKKwltYzEzNzgzX3VubG9jayhtYzEzNzgzKTsKIAotCWlmIChtYzEzNzgzLT50c19hY3RpdmUpCi0JCW1jMTM3ODNfYWRjX3NldF90c19pcnFfbW9kZShtYzEzNzgzKTsKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmYWRjZG9uZV9kYXRhLmRvbmUsIEhaKTsKIAotCW11dGV4X3VubG9jaygmbWMxMzc4My0+YWRjX2NvbnZfbG9jayk7CisJaWYgKCFyZXQpCisJCXJldCA9IC1FVElNRURPVVQ7CiAKLQlyZXR1cm4gMDsKKwltYzEzNzgzX2xvY2sobWMxMzc4Myk7CisKKwltYzEzNzgzX2lycV9mcmVlKG1jMTM3ODMsIE1DMTM3ODNfSVJRX0FEQ0RPTkUsICZhZGNkb25lX2RhdGEpOworCisJaWYgKHJldCA+IDApCisJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQobWMxMzc4MywKKwkJCQkJTUMxMzc4M19SRUdfQURDXzIsICZzYW1wbGVbaV0pOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfQorCisJaWYgKG1vZGUgPT0gTUMxMzc4M19BRENfTU9ERV9UUykKKwkJLyogcmVzdG9yZSBUU01PRCAqLworCQltYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19BRENfMCwgb2xkX2FkYzApOworCisJbWMxMzc4My0+ZmxhZ3MgJj0gfk1DMTM3ODNfQURDX1dPUktJTkc7CitvdXQ6CisJbWMxMzc4M191bmxvY2sobWMxMzc4Myk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWMxMzc4M19hZGNfZG9fY29udmVyc2lvbik7CiAKLXZvaWQgbWMxMzc4M19hZGNfc2V0X3RzX3N0YXR1cyhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IHN0YXR1cykKK3N0YXRpYyBpbnQgbWMxMzc4M19hZGRfc3ViZGV2aWNlX3BkYXRhKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLAorCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpwZGF0YSwgc2l6ZV90IHBkYXRhX3NpemUpCiB7Ci0JbWMxMzc4My0+dHNfYWN0aXZlID0gc3RhdHVzOworCXN0cnVjdCBtZmRfY2VsbCBjZWxsID0geworCQkubmFtZSA9IG5hbWUsCisJCS5wbGF0Zm9ybV9kYXRhID0gcGRhdGEsCisJCS5kYXRhX3NpemUgPSBwZGF0YV9zaXplLAorCX07CisKKwlyZXR1cm4gbWZkX2FkZF9kZXZpY2VzKCZtYzEzNzgzLT5zcGlkZXYtPmRldiwgLTEsICZjZWxsLCAxLCBOVUxMLCAwKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKG1jMTM3ODNfYWRjX3NldF90c19zdGF0dXMpOworCitzdGF0aWMgaW50IG1jMTM3ODNfYWRkX3N1YmRldmljZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gbWMxMzc4M19hZGRfc3ViZGV2aWNlX3BkYXRhKG1jMTM3ODMsIG5hbWUsIE5VTEwsIDApOworfQogCiBzdGF0aWMgaW50IG1jMTM3ODNfY2hlY2tfcmV2aXNpb24oc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMpCiB7CiAJdTMyIHJldl9pZCwgcmV2MSwgcmV2MiwgZmluaWQsIGljaWQ7CiAKLQltYzEzNzgzX3JlYWQobWMxMzc4MywgTUMxMzc4M19SRUdfUkVWSVNJT04sICZyZXZfaWQpOworCW1jMTM3ODNfcmVnX3JlYWQobWMxMzc4MywgTUMxMzc4M19SRUdfUkVWSVNJT04sICZyZXZfaWQpOwogCiAJcmV2MSA9IChyZXZfaWQgJiAweDAxOCkgPj4gMzsKIAlyZXYyID0gKHJldl9pZCAmIDB4MDA3KTsKQEAgLTI5MiwzOCArNTU1LDI0IEBACiAJCXJldjEgPSAzOwogCiAJaWYgKHJldjEgPT0gMCB8fCBpY2lkICE9IDIpIHsKLQkJZGV2X2VycihtYzEzNzgzLT5kZXYsICJObyBNQzEzNzgzIGRldGVjdGVkLlxuIik7CisJCWRldl9lcnIoJm1jMTM3ODMtPnNwaWRldi0+ZGV2LCAiTm8gTUMxMzc4MyBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQltYzEzNzgzLT5yZXZpc2lvbiA9ICgocmV2MSAqIDEwKSArIHJldjIpOwotCWRldl9pbmZvKG1jMTM3ODMtPmRldiwgIk1DMTM3ODMgUmV2ICVkLiVkIEZpblZlciAleCBkZXRlY3RlZFxuIiwgcmV2MSwKLQkgICAgICAgcmV2MiwgZmluaWQpOworCWRldl9pbmZvKCZtYzEzNzgzLT5zcGlkZXYtPmRldiwKKwkJCSJNQzEzNzgzIFJldiAlZC4lZCBGaW5WZXIgJXggZGV0ZWN0ZWRcbiIsCisJCQlyZXYxLCByZXYyLCBmaW5pZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlZ2lzdGVyIGEgY2xpZW50IGRldmljZS4gIFRoaXMgaXMgbm9uLWZhdGFsIHNpbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8KLSAqIGZhaWwgdGhlIGVudGlyZSBkZXZpY2UgaW5pdCBkdWUgdG8gYSBzaW5nbGUgcGxhdGZvcm0gZGV2aWNlIGZhaWxpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIG1jMTM3ODNfY2xpZW50X2Rldl9yZWdpc3RlcihzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywKLQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgbWZkX2NlbGwgY2VsbCA9IHt9OwotCi0JY2VsbC5uYW1lID0gbmFtZTsKLQotCW1mZF9hZGRfZGV2aWNlcyhtYzEzNzgzLT5kZXYsIC0xLCAmY2VsbCwgMSwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IG1jMTM3ODNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgbWMxMzc4M19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBtYzEzNzgzICptYzEzNzgzOwotCXN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnNwaS0+ZGV2KTsKIAlpbnQgcmV0OwogCi0JbWMxMzc4MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYzEzNzgzKSwgR0ZQX0tFUk5FTCk7CisJbWMxMzc4MyA9IGt6YWxsb2Moc2l6ZW9mKCptYzEzNzgzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYzEzNzgzKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMzMyLDk2ICs1ODEsMTA0IEBACiAJc3BpLT5iaXRzX3Blcl93b3JkID0gMzI7CiAJc3BpX3NldHVwKHNwaSk7CiAKLQltYzEzNzgzLT5zcGlfZGV2aWNlID0gc3BpOwotCW1jMTM3ODMtPmRldiA9ICZzcGktPmRldjsKLQltYzEzNzgzLT5pcnEgPSBzcGktPmlycTsKKwltYzEzNzgzLT5zcGlkZXYgPSBzcGk7CiAKLQlJTklUX1dPUksoJm1jMTM3ODMtPndvcmssIG1jMTM3ODNfaXJxX3dvcmspOwotCW11dGV4X2luaXQoJm1jMTM3ODMtPmlvX2xvY2spOwotCW11dGV4X2luaXQoJm1jMTM3ODMtPmFkY19jb252X2xvY2spOwotCWluaXRfY29tcGxldGlvbigmbWMxMzc4My0+YWRjX2RvbmUpOworCW11dGV4X2luaXQoJm1jMTM3ODMtPmxvY2spOworCW1jMTM3ODNfbG9jayhtYzEzNzgzKTsKIAorCXJldCA9IG1jMTM3ODNfY2hlY2tfcmV2aXNpb24obWMxMzc4Myk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmV2aXNpb247CisKKwkvKiBtYXNrIGFsbCBpcnFzICovCisJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19JUlFNQVNLMCwgMHgwMGZmZmZmZik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbWFzazsKKworCXJldCA9IG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfSVJRTUFTSzEsIDB4MDBmZmZmZmYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX21hc2s7CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzcGktPmlycSwgTlVMTCwgbWMxMzc4M19pcnFfdGhyZWFkLAorCQkJSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklHR0VSX0hJR0gsICJtYzEzNzgzIiwgbWMxMzc4Myk7CisKKwlpZiAocmV0KSB7CitlcnJfbWFzazoKK2Vycl9yZXZpc2lvbjoKKwkJbXV0ZXhfdW5sb2NrKCZtYzEzNzgzLT5sb2NrKTsKKwkJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJCWtmcmVlKG1jMTM3ODMpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoaXMgc2hvdWxkIGdvIGF3YXkgKEJFR0lOKSAqLwogCWlmIChwZGF0YSkgewogCQltYzEzNzgzLT5mbGFncyA9IHBkYXRhLT5mbGFnczsKIAkJbWMxMzc4My0+cmVndWxhdG9ycyA9IHBkYXRhLT5yZWd1bGF0b3JzOwogCQltYzEzNzgzLT5udW1fcmVndWxhdG9ycyA9IHBkYXRhLT5udW1fcmVndWxhdG9yczsKIAl9CisJLyogVGhpcyBzaG91bGQgZ28gYXdheSAoRU5EKSAqLwogCi0JaWYgKG1jMTM3ODNfY2hlY2tfcmV2aXNpb24obWMxMzc4MykpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0OworCWlmIChwZGF0YS0+ZmxhZ3MgJiBNQzEzNzgzX1VTRV9BREMpCisJCW1jMTM3ODNfYWRkX3N1YmRldmljZShtYzEzNzgzLCAibWMxMzc4My1hZGMiKTsKKworCWlmIChwZGF0YS0+ZmxhZ3MgJiBNQzEzNzgzX1VTRV9DT0RFQykKKwkJbWMxMzc4M19hZGRfc3ViZGV2aWNlKG1jMTM3ODMsICJtYzEzNzgzLWNvZGVjIik7CisKKwlpZiAocGRhdGEtPmZsYWdzICYgTUMxMzc4M19VU0VfUkVHVUxBVE9SKSB7CisJCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhIHJlZ3VsYXRvcl9wZGF0YSA9IHsKKwkJCS5udW1fcmVndWxhdG9ycyA9IHBkYXRhLT5udW1fcmVndWxhdG9ycywKKwkJCS5yZWd1bGF0b3JzID0gcGRhdGEtPnJlZ3VsYXRvcnMsCisJCX07CisKKwkJbWMxMzc4M19hZGRfc3ViZGV2aWNlX3BkYXRhKG1jMTM3ODMsICJtYzEzNzgzLXJlZ3VsYXRvciIsCisJCQkJJnJlZ3VsYXRvcl9wZGF0YSwgc2l6ZW9mKHJlZ3VsYXRvcl9wZGF0YSkpOwogCX0KIAotCS8qIGNsZWFyIGFuZCBtYXNrIGFsbCBpbnRlcnJ1cHRzICovCi0JbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfSU5URVJSVVBUX1NUQVRVU18wLCAweDAwZmZmZmZmKTsKLQltYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19JTlRFUlJVUFRfTUFTS18wLCAweDAwZmZmZmZmKTsKLQltYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19JTlRFUlJVUFRfU1RBVFVTXzEsIDB4MDBmZmZmZmYpOwotCW1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0lOVEVSUlVQVF9NQVNLXzEsIDB4MDBmZmZmZmYpOworCWlmIChwZGF0YS0+ZmxhZ3MgJiBNQzEzNzgzX1VTRV9SVEMpCisJCW1jMTM3ODNfYWRkX3N1YmRldmljZShtYzEzNzgzLCAibWMxMzc4My1ydGMiKTsKIAotCS8qIHVubWFzayBhZGNkb25lIGludGVycnVwdHMgKi8KLQltYzEzNzgzX3NldF9iaXRzKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0lOVEVSUlVQVF9NQVNLXzAsCi0JCQlNQzEzNzgzX0lOVF9NQVNLX0FEQ0RPTkVNLCAwKTsKKwlpZiAocGRhdGEtPmZsYWdzICYgTUMxMzc4M19VU0VfVE9VQ0hTQ1JFRU4pCisJCW1jMTM3ODNfYWRkX3N1YmRldmljZShtYzEzNzgzLCAibWMxMzc4My10cyIpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEobWMxMzc4My0+aXJxLCBtYzEzNzgzX2ludGVycnVwdCwKLQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfSElHSCwgIm1jMTM3ODMiLAotCQkJbWMxMzc4Myk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfb3V0OwotCi0JaWYgKG1jMTM3ODMtPmZsYWdzICYgTUMxMzc4M19VU0VfQ09ERUMpCi0JCW1jMTM3ODNfY2xpZW50X2Rldl9yZWdpc3RlcihtYzEzNzgzLCAibWMxMzc4My1jb2RlYyIpOwotCWlmIChtYzEzNzgzLT5mbGFncyAmIE1DMTM3ODNfVVNFX0FEQykKLQkJbWMxMzc4M19jbGllbnRfZGV2X3JlZ2lzdGVyKG1jMTM3ODMsICJtYzEzNzgzLWFkYyIpOwotCWlmIChtYzEzNzgzLT5mbGFncyAmIE1DMTM3ODNfVVNFX1JUQykKLQkJbWMxMzc4M19jbGllbnRfZGV2X3JlZ2lzdGVyKG1jMTM3ODMsICJtYzEzNzgzLXJ0YyIpOwotCWlmIChtYzEzNzgzLT5mbGFncyAmIE1DMTM3ODNfVVNFX1JFR1VMQVRPUikKLQkJbWMxMzc4M19jbGllbnRfZGV2X3JlZ2lzdGVyKG1jMTM3ODMsICJtYzEzNzgzLXJlZ3VsYXRvciIpOwotCWlmIChtYzEzNzgzLT5mbGFncyAmIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOKQotCQltYzEzNzgzX2NsaWVudF9kZXZfcmVnaXN0ZXIobWMxMzc4MywgIm1jMTM3ODMtdHMiKTsKKwltYzEzNzgzX3VubG9jayhtYzEzNzgzKTsKIAogCXJldHVybiAwOwotCi1lcnJfb3V0OgotCWtmcmVlKG1jMTM3ODMpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG1jMTM3ODNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IG1jMTM3ODMgKm1jMTM3ODM7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAotCW1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQotCWZyZWVfaXJxKG1jMTM3ODMtPmlycSwgbWMxMzc4Myk7CisJZnJlZV9pcnEobWMxMzc4My0+c3BpZGV2LT5pcnEsIG1jMTM3ODMpOwogCiAJbWZkX3JlbW92ZV9kZXZpY2VzKCZzcGktPmRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHBtaWNfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1jMTM3ODNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCSAgIC5uYW1lID0gIm1jMTM3ODMiLAotCQkgICAuYnVzID0gJnNwaV9idXNfdHlwZSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gIm1jMTM3ODMiLAorCQkuYnVzID0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBtYzEzNzgzX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYzEzNzgzX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBwbWljX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG1jMTM3ODNfaW5pdCh2b2lkKQogewotCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZwbWljX2RyaXZlcik7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJm1jMTM3ODNfZHJpdmVyKTsKIH0KLXN1YnN5c19pbml0Y2FsbChwbWljX2luaXQpOworc3Vic3lzX2luaXRjYWxsKG1jMTM3ODNfaW5pdCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBwbWljX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYzEzNzgzX2V4aXQodm9pZCkKIHsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnBtaWNfZHJpdmVyKTsKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJm1jMTM3ODNfZHJpdmVyKTsKIH0KLW1vZHVsZV9leGl0KHBtaWNfZXhpdCk7Cittb2R1bGVfZXhpdChtYzEzNzgzX2V4aXQpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNvcmUvUHJvdG9jb2wgZHJpdmVyIGZvciBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDIik7Ci1NT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KK01PRFVMRV9ERVNDUklQVElPTigiQ29yZSBkcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzEzNzgzIFBNSUMiKTsKK01PRFVMRV9BVVRIT1IoIlV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9wY2Y1MDYzMy1hZGMuYyBiL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWFkYy5jCmluZGV4IDNkMzFlOTcuLjZkMmU4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWFkYy5jCisrKyBiL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWFkYy5jCkBAIC0yMDksMTcgKzIwOSwxNiBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2Y1MDYzM19hZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGNmNTA2MzNfc3ViZGV2X3BkYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBwY2Y1MDYzM19hZGMgKmFkYzsKIAogCWFkYyA9IGt6YWxsb2Moc2l6ZW9mKCphZGMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlhZGMtPnBjZiA9IHBkYXRhLT5wY2Y7CisJYWRjLT5wY2YgPSBkZXZfdG9fcGNmNTA2MzMocGRldi0+ZGV2LnBhcmVudCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWRjKTsKIAotCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShwZGF0YS0+cGNmLCBQQ0Y1MDYzM19JUlFfQURDUkRZLAorCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShhZGMtPnBjZiwgUENGNTA2MzNfSVJRX0FEQ1JEWSwKIAkJCQkJcGNmNTA2MzNfYWRjX2lycSwgYWRjKTsKIAogCW11dGV4X2luaXQoJmFkYy0+cXVldWVfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jIGIvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jCmluZGV4IGQyNmQ3NzQuLjAzZGNjOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCiBpbnQgcGNmNTA2MzNfaXJxX21hc2soc3RydWN0IHBjZjUwNjMzICpwY2YsIGludCBpcnEpCiB7Ci0JZGV2X2luZm8ocGNmLT5kZXYsICJNYXNraW5nIElSUSAlZFxuIiwgaXJxKTsKKwlkZXZfZGJnKHBjZi0+ZGV2LCAiTWFza2luZyBJUlEgJWRcbiIsIGlycSk7CiAKIAlyZXR1cm4gX19wY2Y1MDYzM19pcnFfbWFza19zZXQocGNmLCBpcnEsIDEpOwogfQpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIGludCBwY2Y1MDYzM19pcnFfdW5tYXNrKHN0cnVjdCBwY2Y1MDYzMyAqcGNmLCBpbnQgaXJxKQogewotCWRldl9pbmZvKHBjZi0+ZGV2LCAiVW5tYXNraW5nIElSUSAlZFxuIiwgaXJxKTsKKwlkZXZfZGJnKHBjZi0+ZGV2LCAiVW5tYXNraW5nIElSUSAlZFxuIiwgaXJxKTsKIAogCXJldHVybiBfX3BjZjUwNjMzX2lycV9tYXNrX3NldChwY2YsIGlycSwgMCk7CiB9CkBAIC0zNDUsNiArMzQ1LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyogZGVmZWF0IDhzIGRlYXRoIGZyb20gbG93c3lzIG9uIEE1ICovCisJcGNmNTA2MzNfcmVnX3dyaXRlKHBjZiwgUENGNTA2MzNfUkVHX09PQ1NIRFdOLCAgMHgwNCk7CisKIAkvKiBXZSBpbW1lZGlhdGVseSByZWFkIHRoZSB1c2IgYW5kIGFkYXB0ZXIgc3RhdHVzLiBXZSB0aHVzIG1ha2Ugc3VyZQogCSAqIG9ubHkgb2YgVVNCSU5TL1VTQlJFTSBJUlEgaGFuZGxlcnMgYXJlIGNhbGxlZCAqLwogCWlmIChwY2ZfaW50WzBdICYgKFBDRjUwNjMzX0lOVDFfVVNCSU5TIHwgUENGNTA2MzNfSU5UMV9VU0JSRU0pKSB7CkBAIC00NTMsNyArNDU2LDYgQEAKIHBjZjUwNjMzX2NsaWVudF9kZXZfcmVnaXN0ZXIoc3RydWN0IHBjZjUwNjMzICpwY2YsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoqcGRldikKIHsKLQlzdHJ1Y3QgcGNmNTA2MzNfc3ViZGV2X3BkYXRhICpzdWJkZXZfcGRhdGE7CiAJaW50IHJldDsKIAogCSpwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIC0xKTsKQEAgLTQ2MiwxNSArNDY0LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCXN1YmRldl9wZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpzdWJkZXZfcGRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN1YmRldl9wZGF0YSkgewotCQlkZXZfZXJyKHBjZi0+ZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBzdWJkZXYgcGRhdGFcbiIpOwotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KCpwZGV2KTsKLQl9Ci0KLQlzdWJkZXZfcGRhdGEtPnBjZiA9IHBjZjsKLQlwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoKnBkZXYsIHN1YmRldl9wZGF0YSwgc2l6ZW9mKCpzdWJkZXZfcGRhdGEpKTsKLQogCSgqcGRldiktPmRldi5wYXJlbnQgPSBwY2YtPmRldjsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoKnBkZXYpOwpAQCAtNDgyLDEzICs0NzUsMTMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwY2Y1MDYzM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBwY2Y1MDYzM19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcGNmNTA2MzMgKnBjZjsKIAlpbnQgcmV0ID0gMCwgaTsKIAl1OCByZXNbNV07CiAKLQlwY2YgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlwY2YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qIE1ha2Ugc3VyZSBvdXIgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBub3QgY2FsbGVkCiAJICogaGVuY2Vmb3J0aCAqLwpAQCAtNTIzLDEyICs1MTYsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBjZjUwNjMzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHBjZjUwNjMzX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOwogCWludCByZXQ7CiAKLQlwY2YgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlwY2YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qIFdyaXRlIHRoZSBzYXZlZCBtYXNrIHJlZ2lzdGVycyAqLwogCXJldCA9IHBjZjUwNjMzX3dyaXRlX2Jsb2NrKHBjZiwgUENGNTA2MzNfUkVHX0lOVDFNLApAQCAtNTYwLDkgKzU1MywxNCBAQAogewogCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOwogCXN0cnVjdCBwY2Y1MDYzM19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IGksIHJldDsKIAlpbnQgdmVyc2lvbiwgdmFyaWFudDsKIAorCWlmICghY2xpZW50LT5pcnEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNaXNzaW5nIElSUVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwogCXBjZiA9IGt6YWxsb2Moc2l6ZW9mKCpwY2YpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBjZikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NzcsNiArNTc1LDEyIEBACiAJcGNmLT5pcnEgPSBjbGllbnQtPmlycTsKIAlwY2YtPndvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicGNmNTA2MzMiKTsKIAorCWlmICghcGNmLT53b3JrX3F1ZXVlKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jIHdvcmtxdWV1ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCiAJSU5JVF9XT1JLKCZwY2YtPmlycV93b3JrLCBwY2Y1MDYzM19pcnFfd29ya2VyKTsKIAogCXZlcnNpb24gPSBwY2Y1MDYzM19yZWdfcmVhZChwY2YsIDApOwpAQCAtNTg0LDcgKzU4OCw3IEBACiAJaWYgKHZlcnNpb24gPCAwIHx8IHZhcmlhbnQgPCAwKSB7CiAJCWRldl9lcnIocGNmLT5kZXYsICJVbmFibGUgdG8gcHJvYmUgcGNmNTA2MzNcbiIpOwogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZGVzdHJveV93b3JrcXVldWU7CiAJfQogCiAJZGV2X2luZm8ocGNmLT5kZXYsICJQcm9iZWQgZGV2aWNlIHZlcnNpb24gJWQgdmFyaWFudCAlZFxuIiwKQEAgLTU5OCw2ICs2MDIsMTQgQEAKIAlwY2Y1MDYzM19yZWdfd3JpdGUocGNmLCBQQ0Y1MDYzM19SRUdfSU5UNE0sIDB4MDApOwogCXBjZjUwNjMzX3JlZ193cml0ZShwY2YsIFBDRjUwNjMzX1JFR19JTlQ1TSwgMHgwMCk7CiAKKwlyZXQgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgcGNmNTA2MzNfaXJxLAorCQkJCQlJUlFGX1RSSUdHRVJfTE9XLCAicGNmNTA2MzMiLCBwY2YpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBjZi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJRICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9kZXN0cm95X3dvcmtxdWV1ZTsKKwl9CisKIAkvKiBDcmVhdGUgc3ViIGRldmljZXMgKi8KIAlwY2Y1MDYzM19jbGllbnRfZGV2X3JlZ2lzdGVyKHBjZiwgInBjZjUwNjMzLWlucHV0IiwKIAkJCQkJCSZwY2YtPmlucHV0X3BkZXYpOwpAQCAtNjEzLDMxICs2MjUsMTggQEAKIAogCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY2Y1MDYzMy1yZWdsdHIiLCBpKTsKIAkJaWYgKCFwZGV2KSB7Ci0JCQlkZXZfZXJyKHBjZi0+ZGV2LCAiQ2Fubm90IGNyZWF0ZSByZWd1bGF0b3JcbiIpOworCQkJZGV2X2VycihwY2YtPmRldiwgIkNhbm5vdCBjcmVhdGUgcmVndWxhdG9yICVkXG4iLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJcGRldi0+ZGV2LnBhcmVudCA9IHBjZi0+ZGV2OwotCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICZwZGF0YS0+cmVnX2luaXRfZGF0YVtpXTsKLQkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIHBjZik7CisJCXBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCAmcGRhdGEtPnJlZ19pbml0X2RhdGFbaV0sCisJCQkJCXNpemVvZihwZGF0YS0+cmVnX2luaXRfZGF0YVtpXSkpOwogCQlwY2YtPnJlZ3VsYXRvcl9wZGV2W2ldID0gcGRldjsKIAogCQlwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCX0KIAotCWlmIChjbGllbnQtPmlycSkgewotCQlyZXQgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgcGNmNTA2MzNfaXJxLAotCQkJCUlSUUZfVFJJR0dFUl9MT1csICJwY2Y1MDYzMyIsIHBjZik7Ci0KLQkJaWYgKHJldCkgewotCQkJZGV2X2VycihwY2YtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUSAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGV2X2VycihwY2YtPmRldiwgIk5vIElSUSBjb25maWd1cmVkXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJaWYgKGVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSkgPCAwKQogCQlkZXZfZXJyKHBjZi0+ZGV2LCAiSVJRICV1IGNhbm5vdCBiZSBlbmFibGVkIGFzIHdha2UtdXAgc291cmNlIgogCQkJImluIHRoaXMgaGFyZHdhcmUgcmV2aXNpb24iLCBjbGllbnQtPmlycSk7CkBAIC02NTEsOSArNjUwLDEyIEBACiAKIAlyZXR1cm4gMDsKIAotZXJyOgorZXJyX2Rlc3Ryb3lfd29ya3F1ZXVlOgogCWRlc3Ryb3lfd29ya3F1ZXVlKHBjZi0+d29ya19xdWV1ZSk7CitlcnJfZnJlZToKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShwY2YpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjg2LDEyICs2ODgsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwY2Y1MDYzM19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAicGNmNTA2MzMiLAotCQkuc3VzcGVuZCA9IHBjZjUwNjMzX3N1c3BlbmQsCi0JCS5yZXN1bWUJPSBwY2Y1MDYzM19yZXN1bWUsCiAJfSwKIAkuaWRfdGFibGUgPSBwY2Y1MDYzM19pZF90YWJsZSwKIAkucHJvYmUgPSBwY2Y1MDYzM19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AocGNmNTA2MzNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHBjZjUwNjMzX3N1c3BlbmQsCisJLnJlc3VtZQk9IHBjZjUwNjMzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjZjUwNjMzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1MDEwLmMgYi9kcml2ZXJzL21mZC90cHM2NTAxMC5jCmluZGV4IGFjZjhiOWQuLmU1OTU1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1MDEwLmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjUwMTAuYwpAQCAtNjM3LDcgKzYzNyw3IEBACiAJCQkJdHBzLCBERUJVR19GT1BTKTsKIAogCS8qIG9wdGlvbmFsbHkgcmVnaXN0ZXIgR1BJT3MgKi8KLQlpZiAoYm9hcmQgJiYgYm9hcmQtPmJhc2UgPiAwKSB7CisJaWYgKGJvYXJkICYmIGJvYXJkLT5iYXNlICE9IDApIHsKIAkJdHBzLT5vdXRtYXNrID0gYm9hcmQtPm91dG1hc2s7CiAKIAkJdHBzLT5jaGlwLmxhYmVsID0gY2xpZW50LT5uYW1lOwpAQCAtOTY0LDYgKzk2NCwzNCBAQAogfQogRVhQT1JUX1NZTUJPTCh0cHM2NTAxMF9jb25maWdfdnJlZ3MxKTsKIAoraW50IHRwczY1MDEwX2NvbmZpZ192ZGNkYzIodW5zaWduZWQgdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisJaW50CSBzdGF0dXM7CisKKwlpZiAoIXRoZV90cHMpCisJCXJldHVybiAtRU5PREVWOworCisJYyA9IHRoZV90cHMtPmNsaWVudDsKKwltdXRleF9sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKKworCXByX2RlYnVnKCIlczogdmRjZGMyIDB4JTAyeFxuIiwgRFJJVkVSX05BTUUsCisJCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYywgVFBTX1ZEQ0RDMikpOworCisJc3RhdHVzID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjLCBUUFNfVkRDREMyLCB2YWx1ZSk7CisKKwlpZiAoc3RhdHVzICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byB3cml0ZSB2ZGNkYzIgcmVnaXN0ZXJcbiIsCisJCQlEUklWRVJfTkFNRSk7CisJZWxzZQorCQlwcl9kZWJ1ZygiJXM6IHZyZWdzMSAweCUwMnhcbiIsIERSSVZFUl9OQU1FLAorCQkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjLCBUUFNfVkRDREMyKSk7CisKKwltdXRleF91bmxvY2soJnRoZV90cHMtPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MKHRwczY1MDEwX2NvbmZpZ192ZGNkYzIpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogdHBzNjUwMTNfc2V0X2xvd19wd3IgcGFyYW1ldGVyOgogICogbW9kZTogT04gb3IgT0ZGCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2wtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTc2MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwpAQCAtMCwwICsxLDEwNzYgQEAKKy8qCisgKiB0d2xfY29yZS5jIC0gZHJpdmVyIGZvciBUV0w0MDMwL1RXTDUwMzAvVFdMNjBYMC9UUFM2NTl4MCBQTQorICogYW5kIGF1ZGlvIENPREVDIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIE1vZGlmaWNhdGlvbnMgdG8gZGVmZXIgaW50ZXJydXB0IGhhbmRsaW5nIHRvIGEga2VybmVsIHRocmVhZDoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIENvZGUgY2xlYW51cCBhbmQgbW9kaWZpY2F0aW9ucyB0byBJUlEgaGFuZGxlci4KKyAqIGJ5IHN5ZWQga2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNlbmRpZgorCisvKgorICogVGhlIFRXTDQwMzAgIlRyaXRvbiAyIiBpcyBvbmUgb2YgYSBmYW1pbHkgb2YgYSBtdWx0aS1mdW5jdGlvbiAiUG93ZXIKKyAqIE1hbmFnZW1lbnQgYW5kIFN5c3RlbSBDb21wYW5pb24gRGV2aWNlIiBjaGlwcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvcgorICogdXNlIGluIE9NQVAyIGFuZCBPTUFQIDMgYmFzZWQgc3lzdGVtcy4gIEl0cyBjb250cm9sIGludGVyZmFjZXMgdXNlIEkyQywKKyAqIG9mdGVuIGF0IGFyb3VuZCAzIE1iaXQvc2VjLCBpbmNsdWRpbmcgZm9yIGludGVycnVwdCBoYW5kbGluZy4KKyAqCisgKiBUaGlzIGRyaXZlciBjb3JlIHByb3ZpZGVzIGdlbmlycSBzdXBwb3J0IGZvciB0aGUgaW50ZXJydXB0cyBlbWl0dGVkLAorICogYnkgdGhlIHZhcmlvdXMgbW9kdWxlcywgYW5kIGV4cG9ydHMgcmVnaXN0ZXIgYWNjZXNzIHByaW1pdGl2ZXMuCisgKgorICogRklYTUUgdGhpcyBkcml2ZXIgY3VycmVudGx5IHJlcXVpcmVzIHVzZSBvZiB0aGUgZmlyc3QgaW50ZXJydXB0IGxpbmUKKyAqIChhbmQgYXNzb2NpYXRlZCByZWdpc3RlcnMpLgorICovCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCQkidHdsIgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2tleXBhZCgpCWZhbHNlCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfR1BJT19UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzApIFwKKwl8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfcmVndWxhdG9yKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19yZWd1bGF0b3IoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX01BREMpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfTUFEQ19NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfbWFkYygpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfbWFkYygpCWZhbHNlCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UV0w0MDMwX1BPV0VSCisjZGVmaW5lIHR3bF9oYXNfcG93ZXIoKSAgICAgICAgdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19wb3dlcigpICAgICAgICBmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfcnRjKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ydGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0JfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3VzYigpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfdXNiKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9XQVRDSERPRykgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfV0FUQ0hET0dfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3dhdGNoZG9nKCkgICAgICAgIHRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfd2F0Y2hkb2coKSAgICAgICAgZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9DT0RFQykgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9DT0RFQ19NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfY29kZWMoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2NvZGVjKCkJZmFsc2UKKyNlbmRpZgorCisvKiBUcml0b24gQ29yZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiAoQkVHSU4pICovCisKKy8qIExhc3QgLSBmb3IgaW5kZXggbWF4Ki8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTEFTVAkJVFdMNDAzMF9NT0RVTEVfU0VDVVJFRF9SRUcKKworI2RlZmluZSBUV0xfTlVNX1NMQVZFUwkJNAorCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT04pIFwKKwl8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9UV0w0MDMwX1BXQlVUVE9OX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19wd3JidXR0b24oKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX3B3cmJ1dHRvbigpCWZhbHNlCisjZW5kaWYKKworI2RlZmluZSBTVUJfQ0hJUF9JRDAgMAorI2RlZmluZSBTVUJfQ0hJUF9JRDEgMQorI2RlZmluZSBTVUJfQ0hJUF9JRDIgMgorI2RlZmluZSBTVUJfQ0hJUF9JRDMgMworCisjZGVmaW5lIFRXTF9NT0RVTEVfTEFTVCBUV0w0MDMwX01PRFVMRV9MQVNUCisKKy8qIEJhc2UgQWRkcmVzcyBkZWZucyBmb3IgdHdsNDAzMF9tYXBbXSAqLworCisvKiBzdWJjaGlwL3NsYXZlIDAgLSBVU0IgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1VTQgkJMHgwMDAwCisKKy8qIHN1YmNoaXAvc2xhdmUgMSAtIEFVRCBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQVVESU9fVk9JQ0UJMHgwMDAwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9HUElPCQkweDAwOTgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVEJSCQkweDAwODUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BJSAkJMHgwMDgwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9URVNUCQkweDAwNEMKKworLyogc3ViY2hpcC9zbGF2ZSAyIC0gQVVYIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTCTB4MDBCOQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTEVECQkweDAwRUUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BREMJCTB4MDAwMAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UJMHgwMDc0CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UJMHgwMEFBCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00wCQkweDAwRjgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTTEJCTB4MDBGQgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQQkJMHgwMEVGCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV01CCQkweDAwRjEKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0tFWVBBRAkJMHgwMEQyCisKKyNkZWZpbmUgVFdMNTAzMV9CQVNFQUREX0FDQ0VTU09SWQkweDAwNzQgLyogUmVwbGFjZXMgTWFpbiBDaGFyZ2UgKi8KKyNkZWZpbmUgVFdMNTAzMV9CQVNFQUREX0lOVEVSUlVQVFMJMHgwMEI5IC8qIERpZmZlcmVudCB0aGFuIFRXTDQwMzAncworCQkJCQkJICBvbmUgKi8KKworLyogc3ViY2hpcC9zbGF2ZSAzIC0gUE9XRVIgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0JBQ0tVUAkJMHgwMDE0CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlQJCTB4MDAyRQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUE1fTUFTVEVSCTB4MDAzNgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUE1fUkVDRUlWRVIJMHgwMDVCCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9SVEMJCTB4MDAxQworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfU0VDVVJFRF9SRUcJMHgwMDAwCisKKy8qIFRyaXRvbiBDb3JlIGludGVybmFsIGluZm9ybWF0aW9uIChFTkQpICovCisKKworLyogc3ViY2hpcC9zbGF2ZSAwIDB4NDggLSBQT1dFUiAqLworI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfUlRDCQkweDAwMDAKKyNkZWZpbmUgVFdMNjAzMF9CQVNFQUREX01FTQkJMHgwMDE3CisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9QTV9NQVNURVIJMHgwMDFGCisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9QTV9TTEFWRV9NSVNDCTB4MDAzMCAvKiBQTV9SRUNFSVZFUiAqLworI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfUE1fTUlTQwkJMHgwMEUyCisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9QTV9QVVBECQkweDAwRjAKKworLyogc3ViY2hpcC9zbGF2ZSAxIDB4NDkgLSBGRUFUVVJFICovCisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9VU0IJCTB4MDAwMAorI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfR1BBRENfQ1RSTAkweDAwMkUKKyNkZWZpbmUgVFdMNjAzMF9CQVNFQUREX0FVWAkJMHgwMDkwCisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9QV00JCTB4MDBCQQorI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfR0FTR0FVR0UJMHgwMEMwCisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9QSUgJCTB4MDBEMAorI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfQ0hBUkdFUgkJMHgwMEUwCisKKy8qIHN1YmNoaXAvc2xhdmUgMiAweDRBIC0gREZUICovCisjZGVmaW5lIFRXTDYwMzBfQkFTRUFERF9ESUVJRAkJMHgwMEMwCisKKy8qIHN1YmNoaXAvc2xhdmUgMyAweDRCIC0gQVVESU8gKi8KKyNkZWZpbmUgVFdMNjAzMF9CQVNFQUREX0FVRElPCQkweDAwMDAKKyNkZWZpbmUgVFdMNjAzMF9CQVNFQUREX1JTVgkJMHgwMDAwCisKKy8qIEZldyBwb3dlciB2YWx1ZXMgKi8KKyNkZWZpbmUgUl9DRkdfQk9PVAkJCTB4MDUKKyNkZWZpbmUgUl9QUk9URUNUX0tFWQkJCTB4MEUKKworLyogYWNjZXNzIGNvbnRyb2wgdmFsdWVzIGZvciBSX1BST1RFQ1RfS0VZICovCisjZGVmaW5lIEtFWV9VTkxPQ0sxCQkJMHhjZQorI2RlZmluZSBLRVlfVU5MT0NLMgkJCTB4ZWMKKyNkZWZpbmUgS0VZX0xPQ0sJCQkweDAwCisKKy8qIHNvbWUgZmllbGRzIGluIFJfQ0ZHX0JPT1QgKi8KKyNkZWZpbmUgSEZDTEtfRlJFUV8xOXAyX01IWgkJKDEgPDwgMCkKKyNkZWZpbmUgSEZDTEtfRlJFUV8yNl9NSFoJCSgyIDw8IDApCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMzhwNF9NSFoJCSgzIDw8IDApCisjZGVmaW5lIEhJR0hfUEVSRl9TUQkJCSgxIDw8IDMpCisjZGVmaW5lIENLMzJLX0xPV1BXUl9FTgkJCSgxIDw8IDcpCisKKworLyogY2hpcC1zcGVjaWZpYyBmZWF0dXJlIGZsYWdzLCBmb3IgaTJjX2RldmljZV9pZC5kcml2ZXJfZGF0YSAqLworI2RlZmluZSBUV0w0MDMwX1ZBVVgyCQlCSVQoMCkJLyogcHJlLTUwMzAgdm9sdGFnZSByYW5nZXMgKi8KKyNkZWZpbmUgVFBTX1NVQlNFVAkJQklUKDEpCS8qIHRwczY1OVsyM10wIGhhdmUgZmV3ZXIgTERPcyAqLworI2RlZmluZSBUV0w1MDMxCQkJQklUKDIpICAvKiB0d2w1MDMxIGhhcyBkaWZmZXJlbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRXTDYwMzBfQ0xBU1MJCUJJVCgzKQkvKiBUV0w2MDMwIGNsYXNzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGlzIGRyaXZlciBhY3RpdmUsIGJvdW5kIHRvIGEgY2hpcD8gKi8KK3N0YXRpYyBib29sIGludXNlOworCitzdGF0aWMgdW5zaWduZWQgaW50IHR3bF9pZDsKK3Vuc2lnbmVkIGludCB0d2xfcmV2KHZvaWQpCit7CisJcmV0dXJuIHR3bF9pZDsKK30KK0VYUE9SVF9TWU1CT0wodHdsX3Jldik7CisKKy8qIFN0cnVjdHVyZSBmb3IgZWFjaCBUV0w0MDMwL1RXTDYwMzAgU2xhdmUgKi8KK3N0cnVjdCB0d2xfY2xpZW50IHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXU4IGFkZHJlc3M7CisKKwkvKiBtYXggbnVtYiBvZiBpMmNfbXNnIHJlcXVpcmVkIGlzIGZvciByZWFkID0yICovCisJc3RydWN0IGkyY19tc2cgeGZlcl9tc2dbMl07CisKKwkvKiBUbyBsb2NrIGFjY2VzcyB0byB4ZmVyX21zZyAqLworCXN0cnVjdCBtdXRleCB4ZmVyX2xvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IHR3bF9jbGllbnQgdHdsX21vZHVsZXNbVFdMX05VTV9TTEFWRVNdOworCisKKy8qIG1hcHBpbmcgdGhlIG1vZHVsZSBpZCB0byBzbGF2ZSBpZCBhbmQgYmFzZSBhZGRyZXNzICovCitzdHJ1Y3QgdHdsX21hcHBpbmcgeworCXVuc2lnbmVkIGNoYXIgc2lkOwkvKiBTbGF2ZSBJRCAqLworCXVuc2lnbmVkIGNoYXIgYmFzZTsJLyogYmFzZSBhZGRyZXNzICovCit9Oworc3RydWN0IHR3bF9tYXBwaW5nICp0d2xfbWFwOworCitzdGF0aWMgc3RydWN0IHR3bF9tYXBwaW5nIHR3bDQwMzBfbWFwW1RXTDQwMzBfTU9EVUxFX0xBU1QgKyAxXSA9IHsKKwkvKgorCSAqIE5PVEU6ICBkb24ndCBjaGFuZ2UgdGhpcyB0YWJsZSB3aXRob3V0IHVwZGF0aW5nIHRoZQorCSAqIDxsaW51eC9pMmMvdHdsLmg+IGRlZmluZXMgZm9yIFRXTDQwMzBfTU9EVUxFXyoKKwkgKiBzbyB0aGV5IGNvbnRpbnVlIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGlzIHRhYmxlLgorCSAqLworCisJeyAwLCBUV0w0MDMwX0JBU0VBRERfVVNCIH0sCisKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9BVURJT19WT0lDRSB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX0dQSU8gfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9JTlRCUiB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1BJSCB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1RFU1QgfSwKKworCXsgMiwgVFdMNDAzMF9CQVNFQUREX0tFWVBBRCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BREMgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTEVEIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV00wIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMSB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTUEgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01CIH0sCisJeyAyLCBUV0w1MDMxX0JBU0VBRERfQUNDRVNTT1JZIH0sCisJeyAyLCBUV0w1MDMxX0JBU0VBRERfSU5URVJSVVBUUyB9LAorCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfQkFDS1VQIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfSU5UIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfUE1fTUFTVEVSIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfUE1fUkVDRUlWRVIgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9SVEMgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRyB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0d2xfbWFwcGluZyB0d2w2MDMwX21hcFtdID0geworCS8qCisJICogTk9URTogIGRvbid0IGNoYW5nZSB0aGlzIHRhYmxlIHdpdGhvdXQgdXBkYXRpbmcgdGhlCisJICogPGxpbnV4L2kyYy90d2wuaD4gZGVmaW5lcyBmb3IgVFdMNDAzMF9NT0RVTEVfKgorCSAqIHNvIHRoZXkgY29udGludWUgdG8gbWF0Y2ggdGhlIG9yZGVyIGluIHRoaXMgdGFibGUuCisJICovCisJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9VU0IgfSwKKwl7IFNVQl9DSElQX0lEMywgVFdMNjAzMF9CQVNFQUREX0FVRElPIH0sCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9ESUVJRCB9LAorCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCisJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9QSUggfSwKKworCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9SU1YgfSwKKwl7IFNVQl9DSElQX0lEMSwgVFdMNjAzMF9CQVNFQUREX0dQQURDX0NUUkwgfSwKKwl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAorCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCisKKwl7IFNVQl9DSElQX0lEMSwgVFdMNjAzMF9CQVNFQUREX0NIQVJHRVIgfSwKKwl7IFNVQl9DSElQX0lEMSwgVFdMNjAzMF9CQVNFQUREX0dBU0dBVUdFIH0sCisJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9QV00gfSwKKwl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAorCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCisKKwl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAorCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9SU1YgfSwKKwl7IFNVQl9DSElQX0lEMCwgVFdMNjAzMF9CQVNFQUREX1BNX01BU1RFUiB9LAorCXsgU1VCX0NISVBfSUQwLCBUV0w2MDMwX0JBU0VBRERfUE1fU0xBVkVfTUlTQyB9LAorCisJeyBTVUJfQ0hJUF9JRDAsIFRXTDYwMzBfQkFTRUFERF9SVEMgfSwKKwl7IFNVQl9DSElQX0lEMCwgVFdMNjAzMF9CQVNFQUREX01FTSB9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgRnVuY3Rpb25zICovCisKKy8qKgorICogdHdsX2kyY193cml0ZSAtIFdyaXRlcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAvVFdMNTAzMC9UV0w2MFgwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IGFuIGFycmF5IG9mIG51bV9ieXRlcysxIGNvbnRhaW5pbmcgZGF0YSB0byB3cml0ZQorICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcyAoanVzdCBvZmZzZXQgd2lsbCBkbykKKyAqIEBudW1fYnl0ZXM6IG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlcgorICoKKyAqIElNUE9SVEFOVDogZm9yICd2YWx1ZScgcGFyYW1ldGVyOiBBbGxvY2F0ZSB2YWx1ZSBudW1fYnl0ZXMrMSBhbmQKKyAqIHZhbGlkIGRhdGEgc3RhcnRzIGF0IE9mZnNldCAxLgorICoKKyAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gLSAwIGlzIHN1Y2Nlc3MKKyAqLworaW50IHR3bF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdW5zaWduZWQgbnVtX2J5dGVzKQoreworCWludCByZXQ7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsX2NsaWVudCAqdHdsOworCXN0cnVjdCBpMmNfbXNnICptc2c7CisKKwlpZiAodW5saWtlbHkobW9kX25vID4gVFdMX01PRFVMRV9MQVNUKSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG1vZHVsZSBudW1iZXIgJWRcbiIsIERSSVZFUl9OQU1FLCBtb2Rfbm8pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlzaWQgPSB0d2xfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2xfbW9kdWxlc1tzaWRdOworCisJaWYgKHVubGlrZWx5KCFpbnVzZSkpIHsKKwkJcHJfZXJyKCIlczogY2xpZW50ICVkIGlzIG5vdCBpbml0aWFsaXplZFxuIiwgRFJJVkVSX05BTUUsIHNpZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCW11dGV4X2xvY2soJnR3bC0+eGZlcl9sb2NrKTsKKwkvKgorCSAqIFtNU0cxXTogZmlsbCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhCisJICogZmlsbCB0aGUgZGF0YSBUeCBidWZmZXIKKwkgKi8KKwltc2cgPSAmdHdsLT54ZmVyX21zZ1swXTsKKwltc2ctPmFkZHIgPSB0d2wtPmFkZHJlc3M7CisJbXNnLT5sZW4gPSBudW1fYnl0ZXMgKyAxOworCW1zZy0+ZmxhZ3MgPSAwOworCW1zZy0+YnVmID0gdmFsdWU7CisJLyogb3ZlciB3cml0ZSB0aGUgZmlyc3QgYnl0ZSBvZiBidWZmZXIgd2l0aCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyAqLworCSp2YWx1ZSA9IHR3bF9tYXBbbW9kX25vXS5iYXNlICsgcmVnOworCXJldCA9IGkyY190cmFuc2Zlcih0d2wtPmNsaWVudC0+YWRhcHRlciwgdHdsLT54ZmVyX21zZywgMSk7CisJbXV0ZXhfdW5sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisKKwkvKiBpMmNfdHJhbnNmZXIgcmV0dXJucyBudW1iZXIgb2YgbWVzc2FnZXMgdHJhbnNmZXJyZWQgKi8KKwlpZiAocmV0ICE9IDEpIHsKKwkJcHJfZXJyKCIlczogaTJjX3dyaXRlIGZhaWxlZCB0byB0cmFuc2ZlciBhbGwgbWVzc2FnZXNcbiIsCisJCQlEUklWRVJfTkFNRSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQorRVhQT1JUX1NZTUJPTCh0d2xfaTJjX3dyaXRlKTsKKworLyoqCisgKiB0d2xfaTJjX3JlYWQgLSBSZWFkcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAvVFdMNTAzMC9UV0w2MFgwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IGFuIGFycmF5IG9mIG51bV9ieXRlcyBjb250YWluaW5nIGRhdGEgdG8gYmUgcmVhZAorICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcyAoanVzdCBvZmZzZXQgd2lsbCBkbykKKyAqIEBudW1fYnl0ZXM6IG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlcgorICoKKyAqIFJldHVybnMgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIG51bV9ieXRlcyBpcyBzdWNjZXNzIGVsc2UgZmFpbHVyZS4KKyAqLworaW50IHR3bF9pMmNfcmVhZCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1bnNpZ25lZCBudW1fYnl0ZXMpCit7CisJaW50IHJldDsKKwl1OCB2YWw7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsX2NsaWVudCAqdHdsOworCXN0cnVjdCBpMmNfbXNnICptc2c7CisKKwlpZiAodW5saWtlbHkobW9kX25vID4gVFdMX01PRFVMRV9MQVNUKSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG1vZHVsZSBudW1iZXIgJWRcbiIsIERSSVZFUl9OQU1FLCBtb2Rfbm8pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlzaWQgPSB0d2xfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2xfbW9kdWxlc1tzaWRdOworCisJaWYgKHVubGlrZWx5KCFpbnVzZSkpIHsKKwkJcHJfZXJyKCIlczogY2xpZW50ICVkIGlzIG5vdCBpbml0aWFsaXplZFxuIiwgRFJJVkVSX05BTUUsIHNpZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCW11dGV4X2xvY2soJnR3bC0+eGZlcl9sb2NrKTsKKwkvKiBbTVNHMV0gZmlsbCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gMTsKKwltc2ctPmZsYWdzID0gMDsJLyogUmVhZCB0aGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwl2YWwgPSB0d2xfbWFwW21vZF9ub10uYmFzZSArIHJlZzsKKwltc2ctPmJ1ZiA9ICZ2YWw7CisJLyogW01TRzJdIGZpbGwgdGhlIGRhdGEgcnggYnVmZmVyICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMV07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+ZmxhZ3MgPSBJMkNfTV9SRDsJLyogUmVhZCB0aGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwltc2ctPmxlbiA9IG51bV9ieXRlczsJLyogb25seSBuIGJ5dGVzICovCisJbXNnLT5idWYgPSB2YWx1ZTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIodHdsLT5jbGllbnQtPmFkYXB0ZXIsIHR3bC0+eGZlcl9tc2csIDIpOworCW11dGV4X3VubG9jaygmdHdsLT54ZmVyX2xvY2spOworCisJLyogaTJjX3RyYW5zZmVyIHJldHVybnMgbnVtYmVyIG9mIG1lc3NhZ2VzIHRyYW5zZmVycmVkICovCisJaWYgKHJldCAhPSAyKSB7CisJCXByX2VycigiJXM6IGkyY19yZWFkIGZhaWxlZCB0byB0cmFuc2ZlciBhbGwgbWVzc2FnZXNcbiIsCisJCQlEUklWRVJfTkFNRSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQorRVhQT1JUX1NZTUJPTCh0d2xfaTJjX3JlYWQpOworCisvKioKKyAqIHR3bF9pMmNfd3JpdGVfdTggLSBXcml0ZXMgYSA4IGJpdCByZWdpc3RlciBpbiBUV0w0MDMwL1RXTDUwMzAvVFdMNjBYMAorICogQG1vZF9ubzogbW9kdWxlIG51bWJlcgorICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbiA4IGJpdAorICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcyAoanVzdCBvZmZzZXQgd2lsbCBkbykKKyAqCisgKiBSZXR1cm5zIHJlc3VsdCBvZiBvcGVyYXRpb24gLSAwIGlzIHN1Y2Nlc3MKKyAqLworaW50IHR3bF9pMmNfd3JpdGVfdTgodTggbW9kX25vLCB1OCB2YWx1ZSwgdTggcmVnKQoreworCisJLyogMiBieXRlcyBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSBvZmZzZXQgMCBpcyB1c2VkIGJ5IGkyY193cml0ZSAqLworCXU4IHRlbXBfYnVmZmVyWzJdID0geyAwIH07CisJLyogb2Zmc2V0IDEgY29udGFpbnMgdGhlIGRhdGEgKi8KKwl0ZW1wX2J1ZmZlclsxXSA9IHZhbHVlOworCXJldHVybiB0d2xfaTJjX3dyaXRlKG1vZF9ubywgdGVtcF9idWZmZXIsIHJlZywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR3bF9pMmNfd3JpdGVfdTgpOworCisvKioKKyAqIHR3bF9pMmNfcmVhZF91OCAtIFJlYWRzIGEgOCBiaXQgcmVnaXN0ZXIgZnJvbSBUV0w0MDMwL1RXTDUwMzAvVFdMNjBYMAorICogQG1vZF9ubzogbW9kdWxlIG51bWJlcgorICogQHZhbHVlOiB0aGUgdmFsdWUgcmVhZCA4IGJpdAorICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcyAoanVzdCBvZmZzZXQgd2lsbCBkbykKKyAqCisgKiBSZXR1cm5zIHJlc3VsdCBvZiBvcGVyYXRpb24gLSAwIGlzIHN1Y2Nlc3MKKyAqLworaW50IHR3bF9pMmNfcmVhZF91OCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnKQoreworCXJldHVybiB0d2xfaTJjX3JlYWQobW9kX25vLCB2YWx1ZSwgcmVnLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wodHdsX2kyY19yZWFkX3U4KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2UgKgorYWRkX251bWJlcmVkX2NoaWxkKHVuc2lnbmVkIGNoaXAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBudW0sCisJCXZvaWQgKnBkYXRhLCB1bnNpZ25lZCBwZGF0YV9sZW4sCisJCWJvb2wgY2FuX3dha2V1cCwgaW50IGlycTAsIGludCBpcnExKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisJc3RydWN0IHR3bF9jbGllbnQJKnR3bCA9ICZ0d2xfbW9kdWxlc1tjaGlwXTsKKwlpbnQJCQlzdGF0dXM7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIG51bSk7CisJaWYgKCFwZGV2KSB7CisJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsICJjYW4ndCBhbGxvYyBkZXZcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgY2FuX3dha2V1cCk7CisJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCisJaWYgKHBkYXRhKSB7CisJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YSwgcGRhdGFfbGVuKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGFkZCBwbGF0Zm9ybV9kYXRhXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKGlycTApIHsKKwkJc3RydWN0IHJlc291cmNlIHJbMl0gPSB7CisJCQl7IC5zdGFydCA9IGlycTAsIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLCB9LAorCQkJeyAuc3RhcnQgPSBpcnExLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwgfSwKKwkJfTsKKworCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCBpcnExID8gMiA6IDEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGlycXNcbiIpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCitlcnI6CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJZGV2X2VycigmdHdsLT5jbGllbnQtPmRldiwgImNhbid0IGFkZCAlcyBkZXZcbiIsIG5hbWUpOworCQlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOworCX0KKwlyZXR1cm4gJnBkZXYtPmRldjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICphZGRfY2hpbGQodW5zaWduZWQgY2hpcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqcGRhdGEsIHVuc2lnbmVkIHBkYXRhX2xlbiwKKwkJYm9vbCBjYW5fd2FrZXVwLCBpbnQgaXJxMCwgaW50IGlycTEpCit7CisJcmV0dXJuIGFkZF9udW1iZXJlZF9jaGlsZChjaGlwLCBuYW1lLCAtMSwgcGRhdGEsIHBkYXRhX2xlbiwKKwkJY2FuX3dha2V1cCwgaXJxMCwgaXJxMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICoKK2FkZF9yZWd1bGF0b3JfbGlua2VkKGludCBudW0sIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpwZGF0YSwKKwkJc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgKmNvbnN1bWVycywKKwkJdW5zaWduZWQgbnVtX2NvbnN1bWVycykKK3sKKwl1bnNpZ25lZCBzdWJfY2hpcF9pZDsKKwkvKiByZWd1bGF0b3IgZnJhbWV3b3JrIGRlbWFuZHMgaW5pdF9kYXRhIC4uLiAqLworCWlmICghcGRhdGEpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNvbnN1bWVycykgeworCQlwZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXMgPSBjb25zdW1lcnM7CisJCXBkYXRhLT5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBudW1fY29uc3VtZXJzOworCX0KKworCS8qIE5PVEU6ICB3ZSBjdXJyZW50bHkgaWdub3JlIHJlZ3VsYXRvciBJUlFzLCBlLmcuIGZvciBzaG9ydCBjaXJjdWl0cyAqLworCXN1Yl9jaGlwX2lkID0gdHdsX21hcFtUV0xfTU9EVUxFX1BNX01BU1RFUl0uc2lkOworCXJldHVybiBhZGRfbnVtYmVyZWRfY2hpbGQoc3ViX2NoaXBfaWQsICJ0d2xfcmVnIiwgbnVtLAorCQlwZGF0YSwgc2l6ZW9mKCpwZGF0YSksIGZhbHNlLCAwLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2UgKgorYWRkX3JlZ3VsYXRvcihpbnQgbnVtLCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcGRhdGEpCit7CisJcmV0dXJuIGFkZF9yZWd1bGF0b3JfbGlua2VkKG51bSwgcGRhdGEsIE5VTEwsIDApOworfQorCisvKgorICogTk9URTogIFdlIGtub3cgdGhlIGZpcnN0IDggSVJRcyBhZnRlciBwZGF0YS0+YmFzZV9pcnEgYXJlCisgKiBmb3IgdGhlIFBJSCwgYW5kIHRoZSBuZXh0IGFyZSBmb3IgdGhlIFBXUl9JTlQgU0lILCBzaW5jZQorICogdGhhdCdzIGhvdyB0d2xfaW5pdF9pcnEoKSBzZXRzIHRoaW5ncyB1cC4KKyAqLworCitzdGF0aWMgaW50CithZGRfY2hpbGRyZW4oc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMpCit7CisJc3RydWN0IGRldmljZQkqY2hpbGQ7CisJdW5zaWduZWQgc3ViX2NoaXBfaWQ7CisKKwlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpICYmCisJICAgICEoZmVhdHVyZXMgJiAoVFBTX1NVQlNFVCB8IFRXTDUwMzEpKSkgeworCQljaGlsZCA9IGFkZF9jaGlsZCgzLCAidHdsNDAzMF9iY2kiLAorCQkJCXBkYXRhLT5iY2ksIHNpemVvZigqcGRhdGEtPmJjaSksCisJCQkJZmFsc2UsCisJCQkJLyogaXJxMCA9IENIR19QUkVTLCBpcnExID0gQkNJICovCisJCQkJcGRhdGEtPmlycV9iYXNlICsgQkNJX1BSRVNfSU5UUl9PRkZTRVQsCisJCQkJcGRhdGEtPmlycV9iYXNlICsgQkNJX0lOVFJfT0ZGU0VUKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisJfQorCisJaWYgKHR3bF9oYXNfZ3BpbygpICYmIHBkYXRhLT5ncGlvKSB7CisJCWNoaWxkID0gYWRkX2NoaWxkKFNVQl9DSElQX0lEMSwgInR3bDQwMzBfZ3BpbyIsCisJCQkJcGRhdGEtPmdwaW8sIHNpemVvZigqcGRhdGEtPmdwaW8pLAorCQkJCWZhbHNlLCBwZGF0YS0+aXJxX2Jhc2UgKyBHUElPX0lOVFJfT0ZGU0VULCAwKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisJfQorCisJaWYgKHR3bF9oYXNfa2V5cGFkKCkgJiYgcGRhdGEtPmtleXBhZCkgeworCQljaGlsZCA9IGFkZF9jaGlsZChTVUJfQ0hJUF9JRDIsICJ0d2w0MDMwX2tleXBhZCIsCisJCQkJcGRhdGEtPmtleXBhZCwgc2l6ZW9mKCpwZGF0YS0+a2V5cGFkKSwKKwkJCQl0cnVlLCBwZGF0YS0+aXJxX2Jhc2UgKyBLRVlQQURfSU5UUl9PRkZTRVQsIDApOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwl9CisKKwlpZiAodHdsX2hhc19tYWRjKCkgJiYgcGRhdGEtPm1hZGMpIHsKKwkJY2hpbGQgPSBhZGRfY2hpbGQoMiwgInR3bDQwMzBfbWFkYyIsCisJCQkJcGRhdGEtPm1hZGMsIHNpemVvZigqcGRhdGEtPm1hZGMpLAorCQkJCXRydWUsIHBkYXRhLT5pcnFfYmFzZSArIE1BRENfSU5UUl9PRkZTRVQsIDApOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwl9CisKKwlpZiAodHdsX2hhc19ydGMoKSkgeworCQkvKgorCQkgKiBSRVZJU0lUIHBsYXRmb3JtX2RhdGEgaGVyZSBjdXJyZW50bHkgbWlnaHQgZXhwb3NlIHRoZQorCQkgKiAibXNlY3VyZSIgbGluZSAuLi4gYnV0IGZvciBub3cgd2UganVzdCBleHBlY3QgYm9hcmQKKwkJICogc2V0dXAgdG8gdGVsbCB0aGUgY2hpcCAiaXQncyBhbHdheXMgb2sgdG8gU0VUX1RJTUUiLgorCQkgKiBFdmVudHVhbGx5LCBMaW51eCBtaWdodCBiZWNvbWUgbW9yZSBhd2FyZSBvZiBzdWNoCisJCSAqIEhXIHNlY3VyaXR5IGNvbmNlcm5zLCBhbmQgImxlYXN0IHByaXZpbGVnZSIuCisJCSAqLworCQlzdWJfY2hpcF9pZCA9IHR3bF9tYXBbVFdMX01PRFVMRV9SVENdLnNpZDsKKwkJY2hpbGQgPSBhZGRfY2hpbGQoc3ViX2NoaXBfaWQsICJ0d2xfcnRjIiwKKwkJCQlOVUxMLCAwLAorCQkJCXRydWUsIHBkYXRhLT5pcnFfYmFzZSArIFJUQ19JTlRSX09GRlNFVCwgMCk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCX0KKworCWlmICh0d2xfaGFzX3VzYigpICYmIHBkYXRhLT51c2IgJiYgdHdsX2NsYXNzX2lzXzQwMzAoKSkgeworCisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjUgPSB7CisJCQkuc3VwcGx5ID0JInVzYjF2NSIsCisJCX07CisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjggPSB7CisJCQkuc3VwcGx5ID0JInVzYjF2OCIsCisJCX07CisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IzdjEgPSB7CisJCQkuc3VwcGx5ID0JInVzYjN2MSIsCisJCX07CisKKwkvKiBGaXJzdCBhZGQgdGhlIHJlZ3VsYXRvcnMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGJ5IHRyYW5zY2VpdmVyICovCisJCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpKSB7CisJCQkvKiB0aGlzIGlzIGEgdGVtcGxhdGUgdGhhdCBnZXRzIGNvcGllZCAqLworCQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdXNiX2ZpeGVkID0geworCQkJCS5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0KKwkJCQkJUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJCQkuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPQorCQkJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJCX07CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWNSwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IxdjUsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjgsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiMXY4LCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCM1YxLAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjN2MSwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJfQorCisJCWNoaWxkID0gYWRkX2NoaWxkKDAsICJ0d2w0MDMwX3VzYiIsCisJCQkJcGRhdGEtPnVzYiwgc2l6ZW9mKCpwZGF0YS0+dXNiKSwKKwkJCQl0cnVlLAorCQkJCS8qIGlycTAgPSBVU0JfUFJFUywgaXJxMSA9IFVTQiAqLworCQkJCXBkYXRhLT5pcnFfYmFzZSArIFVTQl9QUkVTX0lOVFJfT0ZGU0VULAorCQkJCXBkYXRhLT5pcnFfYmFzZSArIFVTQl9JTlRSX09GRlNFVCk7CisKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJLyogd2UgbmVlZCB0byBjb25uZWN0IHJlZ3VsYXRvcnMgdG8gdGhpcyB0cmFuc2NlaXZlciAqLworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiBjaGlsZCkgeworCQkJdXNiMXY1LmRldiA9IGNoaWxkOworCQkJdXNiMXY4LmRldiA9IGNoaWxkOworCQkJdXNiM3YxLmRldiA9IGNoaWxkOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfd2F0Y2hkb2coKSkgeworCQljaGlsZCA9IGFkZF9jaGlsZCgwLCAidHdsNDAzMF93ZHQiLCBOVUxMLCAwLCBmYWxzZSwgMCwgMCk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCX0KKworCWlmICh0d2xfaGFzX3B3cmJ1dHRvbigpKSB7CisJCWNoaWxkID0gYWRkX2NoaWxkKDEsICJ0d2w0MDMwX3B3cmJ1dHRvbiIsCisJCQkJTlVMTCwgMCwgdHJ1ZSwgcGRhdGEtPmlycV9iYXNlICsgOCArIDAsIDApOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwl9CisKKwlpZiAodHdsX2hhc19jb2RlYygpICYmIHBkYXRhLT5jb2RlYykgeworCQljaGlsZCA9IGFkZF9jaGlsZCgxLCAidHdsNDAzMF9jb2RlYyIsCisJCQkJcGRhdGEtPmNvZGVjLCBzaXplb2YoKnBkYXRhLT5jb2RlYyksCisJCQkJZmFsc2UsIDAsIDApOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwl9CisKKwkvKiB0d2w0MDMwIHJlZ3VsYXRvcnMgKi8KKwlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiB0d2xfY2xhc3NfaXNfNDAzMCgpKSB7CisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WUExMMSwgcGRhdGEtPnZwbGwxKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZJTywgcGRhdGEtPnZpbyk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WREQxLCBwZGF0YS0+dmRkMSk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WREQyLCBwZGF0YS0+dmRkMik7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WTU1DMSwgcGRhdGEtPnZtbWMxKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZEQUMsIHBkYXRhLT52ZGFjKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKChmZWF0dXJlcyAmIFRXTDQwMzBfVkFVWDIpCisJCQkJCT8gVFdMNDAzMF9SRUdfVkFVWDJfNDAzMAorCQkJCQk6IFRXTDQwMzBfUkVHX1ZBVVgyLAorCQkJCXBkYXRhLT52YXV4Mik7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WSU5UQU5BMSwgcGRhdGEtPnZpbnRhbmExKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZJTlRBTkEyLCBwZGF0YS0+dmludGFuYTIpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVklOVERJRywgcGRhdGEtPnZpbnRkaWcpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwl9CisKKwkvKiBtYXliZSBhZGQgTERPcyB0aGF0IGFyZSBvbWl0dGVkIG9uIGNvc3QtcmVkdWNlZCBwYXJ0cyAqLworCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmICEoZmVhdHVyZXMgJiBUUFNfU1VCU0VUKQorCSAgJiYgdHdsX2NsYXNzX2lzXzQwMzAoKSkgeworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVlBMTDIsIHBkYXRhLT52cGxsMik7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WTU1DMiwgcGRhdGEtPnZtbWMyKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZTSU0sIHBkYXRhLT52c2ltKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZBVVgxLCBwZGF0YS0+dmF1eDEpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVkFVWDMsIHBkYXRhLT52YXV4Myk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WQVVYNCwgcGRhdGEtPnZhdXg0KTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisJfQorCisJLyogdHdsNjAzMCByZWd1bGF0b3JzICovCisJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgdHdsX2NsYXNzX2lzXzYwMzAoKSkgeworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVk1NQywgcGRhdGEtPnZtbWMpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVlBQLCBwZGF0YS0+dnBwKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDYwMzBfUkVHX1ZVU0lNLCBwZGF0YS0+dnVzaW0pOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVkFOQSwgcGRhdGEtPnZhbmEpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVkNYSU8sIHBkYXRhLT52Y3hpbyk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w2MDMwX1JFR19WREFDLCBwZGF0YS0+dmRhYyk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w2MDMwX1JFR19WVVNCLCBwZGF0YS0+dnVzYik7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w2MDMwX1JFR19WQVVYMV82MDMwLCBwZGF0YS0+dmF1eDEpOworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVkFVWDJfNjAzMCwgcGRhdGEtPnZhdXgyKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDYwMzBfUkVHX1ZBVVgzXzYwMzAsIHBkYXRhLT52YXV4Myk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhlc2UgdGhyZWUgZnVuY3Rpb25zIGluaXRpYWxpemUgdGhlIG9uLWNoaXAgY2xvY2sgZnJhbWV3b3JrLAorICogbGV0dGluZyBpdCBnZW5lcmF0ZSB0aGUgcmlnaHQgZnJlcXVlbmNpZXMgZm9yIFVTQiwgTUFEQywgYW5kCisgKiBvdGhlciBwdXJwb3Nlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19pbml0IHByb3RlY3RfcG1fbWFzdGVyKHZvaWQpCit7CisJaW50IGUgPSAwOworCisJZSA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMX01PRFVMRV9QTV9NQVNURVIsIEtFWV9MT0NLLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB1bnByb3RlY3RfcG1fbWFzdGVyKHZvaWQpCit7CisJaW50IGUgPSAwOworCisJZSB8PSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfVU5MT0NLMSwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWUgfD0gdHdsX2kyY193cml0ZV91OChUV0xfTU9EVUxFX1BNX01BU1RFUiwgS0VZX1VOTE9DSzIsCisJCQlSX1BST1RFQ1RfS0VZKTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgY2xvY2tzX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IHR3bDQwMzBfY2xvY2tfaW5pdF9kYXRhICpjbG9jaykKK3sKKwlpbnQgZSA9IDA7CisJc3RydWN0IGNsayAqb3NjOworCXUzMiByYXRlOworCXU4IGN0cmwgPSBIRkNMS19GUkVRXzI2X01IWjsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQlvc2MgPSBjbGtfZ2V0KGRldiwgIm9zY19jayIpOworCWVsc2UKKwkJb3NjID0gY2xrX2dldChkZXYsICJvc2Nfc3lzX2NrIik7CisKKwlpZiAoSVNfRVJSKG9zYykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2tpcHBpbmcgdHdsIGludGVybmFsIGNsb2NrIGluaXQgYW5kICIKKwkJCQkidXNpbmcgYm9vdGxvYWRlciB2YWx1ZSAodW5rbm93biBvc2MgcmF0ZSlcbiIpOworCQlyZXR1cm47CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShvc2MpOworCWNsa19wdXQob3NjKTsKKworI2Vsc2UKKwkvKiBSRVZJU0lUIGZvciBub24tT01BUCBzeXN0ZW1zLCBwYXNzIHRoZSBjbG9jayByYXRlIGZyb20KKwkgKiBib2FyZCBpbml0IGNvZGUsIHVzaW5nIHBsYXRmb3JtX2RhdGEuCisJICovCisJb3NjID0gRVJSX1BUUigtRUlPKTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIlNraXBwaW5nIHR3bCBpbnRlcm5hbCBjbG9jayBpbml0IGFuZCAiCisJICAgICAgICJ1c2luZyBib290bG9hZGVyIHZhbHVlICh1bmtub3duIG9zYyByYXRlKVxuIik7CisKKwlyZXR1cm47CisjZW5kaWYKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMTkyMDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzE5cDJfTUhaOworCQlicmVhazsKKwljYXNlIDI2MDAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8yNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMzg0MDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzM4cDRfTUhaOworCQlicmVhazsKKwl9CisKKwljdHJsIHw9IEhJR0hfUEVSRl9TUTsKKwlpZiAoY2xvY2sgJiYgY2xvY2stPmNrMzJrX2xvd3B3cl9lbmFibGUpCisJCWN0cmwgfD0gQ0szMktfTE9XUFdSX0VOOworCisJZSB8PSB1bnByb3RlY3RfcG1fbWFzdGVyKCk7CisJLyogZWZmZWN0LT5NQURDK1VTQiBjayBlbiAqLworCWUgfD0gdHdsX2kyY193cml0ZV91OChUV0xfTU9EVUxFX1BNX01BU1RFUiwgY3RybCwgUl9DRkdfQk9PVCk7CisJZSB8PSBwcm90ZWN0X3BtX21hc3RlcigpOworCisJaWYgKGUgPCAwKQorCQlwcl9lcnIoIiVzOiBjbG9jayBpbml0IGVyciBbJWRdXG4iLCBEUklWRVJfTkFNRSwgZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCB0d2w0MDMwX2luaXRfaXJxKGludCBpcnFfbnVtLCB1bnNpZ25lZCBpcnFfYmFzZSwgdW5zaWduZWQgaXJxX2VuZCk7CitpbnQgdHdsNDAzMF9leGl0X2lycSh2b2lkKTsKK2ludCB0d2w0MDMwX2luaXRfY2hpcF9pcnEoY29uc3QgY2hhciAqY2hpcCk7CitpbnQgdHdsNjAzMF9pbml0X2lycShpbnQgaXJxX251bSwgdW5zaWduZWQgaXJxX2Jhc2UsIHVuc2lnbmVkIGlycV9lbmQpOworaW50IHR3bDYwMzBfZXhpdF9pcnEodm9pZCk7CisKK3N0YXRpYyBpbnQgdHdsX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXVuc2lnbmVkIGk7CisJaW50IHN0YXR1czsKKworCWlmICh0d2xfY2xhc3NfaXNfNDAzMCgpKQorCQlzdGF0dXMgPSB0d2w0MDMwX2V4aXRfaXJxKCk7CisJZWxzZQorCQlzdGF0dXMgPSB0d2w2MDMwX2V4aXRfaXJxKCk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBUV0xfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2xfY2xpZW50CSp0d2wgPSAmdHdsX21vZHVsZXNbaV07CisKKwkJaWYgKHR3bC0+Y2xpZW50ICYmIHR3bC0+Y2xpZW50ICE9IGNsaWVudCkKKwkJCWkyY191bnJlZ2lzdGVyX2RldmljZSh0d2wtPmNsaWVudCk7CisJCXR3bF9tb2R1bGVzW2ldLmNsaWVudCA9IE5VTEw7CisJfQorCWludXNlID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKKy8qIE5PVEU6ICB0aGlzIGRyaXZlciBvbmx5IGhhbmRsZXMgYSBzaW5nbGUgdHdsNDAzMC90cHM2NTl4MCBjaGlwICovCitzdGF0aWMgaW50IF9faW5pdAordHdsX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQJCQkJc3RhdHVzOworCXVuc2lnbmVkCQkJaTsKKwlzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YT9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpID09IDApIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJjYW4ndCB0YWxrIEkyQz9cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoaW51c2UpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJkcml2ZXIgaXMgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBUV0xfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2xfY2xpZW50CSp0d2wgPSAmdHdsX21vZHVsZXNbaV07CisKKwkJdHdsLT5hZGRyZXNzID0gY2xpZW50LT5hZGRyICsgaTsKKwkJaWYgKGkgPT0gMCkKKwkJCXR3bC0+Y2xpZW50ID0gY2xpZW50OworCQllbHNlIHsKKwkJCXR3bC0+Y2xpZW50ID0gaTJjX25ld19kdW1teShjbGllbnQtPmFkYXB0ZXIsCisJCQkJCXR3bC0+YWRkcmVzcyk7CisJCQlpZiAoIXR3bC0+Y2xpZW50KSB7CisJCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhdHRhY2ggY2xpZW50ICVkXG4iLCBpKTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfQorCQltdXRleF9pbml0KCZ0d2wtPnhmZXJfbG9jayk7CisJfQorCWludXNlID0gdHJ1ZTsKKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSkgJiBUV0w2MDMwX0NMQVNTKSB7CisJCXR3bF9pZCA9IFRXTDYwMzBfQ0xBU1NfSUQ7CisJCXR3bF9tYXAgPSAmdHdsNjAzMF9tYXBbMF07CisJfSBlbHNlIHsKKwkJdHdsX2lkID0gVFdMNDAzMF9DTEFTU19JRDsKKwkJdHdsX21hcCA9ICZ0d2w0MDMwX21hcFswXTsKKwl9CisKKwkvKiBzZXR1cCBjbG9jayBmcmFtZXdvcmsgKi8KKwljbG9ja3NfaW5pdCgmY2xpZW50LT5kZXYsIHBkYXRhLT5jbG9jayk7CisKKwkvKiBsb2FkIHBvd2VyIGV2ZW50IHNjcmlwdHMgKi8KKwlpZiAodHdsX2hhc19wb3dlcigpICYmIHBkYXRhLT5wb3dlcikKKwkJdHdsNDAzMF9wb3dlcl9pbml0KHBkYXRhLT5wb3dlcik7CisKKwkvKiBNYXliZSBpbml0IHRoZSBUMiBJbnRlcnJ1cHQgc3Vic3lzdGVtICovCisJaWYgKGNsaWVudC0+aXJxCisJCQkmJiBwZGF0YS0+aXJxX2Jhc2UKKwkJCSYmIHBkYXRhLT5pcnFfZW5kID4gcGRhdGEtPmlycV9iYXNlKSB7CisJCWlmICh0d2xfY2xhc3NfaXNfNDAzMCgpKSB7CisJCQl0d2w0MDMwX2luaXRfY2hpcF9pcnEoaWQtPm5hbWUpOworCQkJc3RhdHVzID0gdHdsNDAzMF9pbml0X2lycShjbGllbnQtPmlycSwgcGRhdGEtPmlycV9iYXNlLAorCQkJcGRhdGEtPmlycV9lbmQpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gdHdsNjAzMF9pbml0X2lycShjbGllbnQtPmlycSwgcGRhdGEtPmlycV9iYXNlLAorCQkJcGRhdGEtPmlycV9lbmQpOworCQl9CisKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGZhaWw7CisJfQorCisJc3RhdHVzID0gYWRkX2NoaWxkcmVuKHBkYXRhLCBpZC0+ZHJpdmVyX2RhdGEpOworZmFpbDoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJdHdsX3JlbW92ZShjbGllbnQpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0d2xfaWRzW10gPSB7CisJeyAidHdsNDAzMCIsIFRXTDQwMzBfVkFVWDIgfSwJLyogIlRyaXRvbiAyIiAqLworCXsgInR3bDUwMzAiLCAwIH0sCQkvKiBUMiB1cGRhdGVkICovCisJeyAidHdsNTAzMSIsIFRXTDUwMzEgfSwJCS8qIFRXTDUwMzAgdXBkYXRlZCAqLworCXsgInRwczY1OTUwIiwgMCB9LAkJLyogY2F0YWxvZyB2ZXJzaW9uIG9mIHR3bDUwMzAgKi8KKwl7ICJ0cHM2NTkzMCIsIFRQU19TVUJTRVQgfSwJLyogZmV3ZXIgTERPcyBhbmQgREFDczsgbm8gY2hhcmdlciAqLworCXsgInRwczY1OTIwIiwgVFBTX1NVQlNFVCB9LAkvKiBmZXdlciBMRE9zOyBubyBjb2RlYyBvciBjaGFyZ2VyICovCisJeyAidHdsNjAzMCIsIFRXTDYwMzBfQ0xBU1MgfSwJLyogIlBob2VuaXggcG93ZXIgY2hpcCIgKi8KKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR3bF9pZHMpOworCisvKiBPbmUgQ2xpZW50IERyaXZlciAsIDQgQ2xpZW50cyAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHR3bF9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gdHdsX2lkcywKKwkucHJvYmUJCT0gdHdsX3Byb2JlLAorCS5yZW1vdmUJCT0gdHdsX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR3bF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0d2xfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbCh0d2xfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d2xfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0d2xfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHR3bF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDIENvcmUgaW50ZXJmYWNlIGZvciBUV0wiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29kZWMuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29kZWMuYwppbmRleCA3N2I5MTQ5Li43MDBiMTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvZGVjLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb2RlYy5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90d2w0MDMwLWNvZGVjLmg+CiAKQEAgLTU2LDcgKzU2LDcgQEAKIAlzdHJ1Y3QgdHdsNDAzMF9jb2RlYyAqY29kZWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0d2w0MDMwX2NvZGVjX2Rldik7CiAJdTggdmFsOwogCi0JdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgJnZhbCwKKwl0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZ2YWwsCiAJCQljb2RlYy0+cmVzb3VyY2VbaWRdLnJlZyk7CiAKIAlpZiAoZW5hYmxlKQpAQCAtNjQsNyArNjQsNyBAQAogCWVsc2UKIAkJdmFsICY9IH5jb2RlYy0+cmVzb3VyY2VbaWRdLm1hc2s7CiAKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAogCQkJCQl2YWwsIGNvZGVjLT5yZXNvdXJjZVtpZF0ucmVnKTsKIAogCXJldHVybiB2YWw7CkBAIC03NSw3ICs3NSw3IEBACiAJc3RydWN0IHR3bDQwMzBfY29kZWMgKmNvZGVjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodHdsNDAzMF9jb2RlY19kZXYpOwogCXU4IHZhbDsKIAotCXR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZ2YWwsCisJdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmdmFsLAogCQkJY29kZWMtPnJlc291cmNlW2lkXS5yZWcpOwogCiAJcmV0dXJuIHZhbDsKQEAgLTE4Myw3ICsxODMsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIGF1ZGlvX21jbGtcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKIAkJCQkJdmFsLCBUV0w0MDMwX1JFR19BUExMX0NUTCk7CiAKIAljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0d2w0MDMwX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDQ0OWNkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODc5ICswLDAgQEAKLS8qCi0gKiB0d2w0MDMwX2NvcmUuYyAtIGRyaXZlciBmb3IgVFdMNDAzMC9UUFM2NTl4MCBQTSBhbmQgYXVkaW8gQ09ERUMgZGV2aWNlcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogTW9kaWZpY2F0aW9ucyB0byBkZWZlciBpbnRlcnJ1cHQgaGFuZGxpbmcgdG8gYSBrZXJuZWwgdGhyZWFkOgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBCYXNlZCBvbiB0bHYzMjBhaWMyMy5jOgotICogQ29weXJpZ2h0IChjKSBieSBLYWkgU3ZhaG4gPGthaS5zdmFobkBub2tpYS5jb20+Ci0gKgotICogQ29kZSBjbGVhbnVwIGFuZCBtb2RpZmljYXRpb25zIHRvIElSUSBoYW5kbGVyLgotICogYnkgc3llZCBraGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNlbmRpZgotCi0vKgotICogVGhlIFRXTDQwMzAgIlRyaXRvbiAyIiBpcyBvbmUgb2YgYSBmYW1pbHkgb2YgYSBtdWx0aS1mdW5jdGlvbiAiUG93ZXIKLSAqIE1hbmFnZW1lbnQgYW5kIFN5c3RlbSBDb21wYW5pb24gRGV2aWNlIiBjaGlwcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvcgotICogdXNlIGluIE9NQVAyIGFuZCBPTUFQIDMgYmFzZWQgc3lzdGVtcy4gIEl0cyBjb250cm9sIGludGVyZmFjZXMgdXNlIEkyQywKLSAqIG9mdGVuIGF0IGFyb3VuZCAzIE1iaXQvc2VjLCBpbmNsdWRpbmcgZm9yIGludGVycnVwdCBoYW5kbGluZy4KLSAqCi0gKiBUaGlzIGRyaXZlciBjb3JlIHByb3ZpZGVzIGdlbmlycSBzdXBwb3J0IGZvciB0aGUgaW50ZXJydXB0cyBlbWl0dGVkLAotICogYnkgdGhlIHZhcmlvdXMgbW9kdWxlcywgYW5kIGV4cG9ydHMgcmVnaXN0ZXIgYWNjZXNzIHByaW1pdGl2ZXMuCi0gKgotICogRklYTUUgdGhpcyBkcml2ZXIgY3VycmVudGx5IHJlcXVpcmVzIHVzZSBvZiB0aGUgZmlyc3QgaW50ZXJydXB0IGxpbmUKLSAqIChhbmQgYXNzb2NpYXRlZCByZWdpc3RlcnMpLgotICovCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUJCQkidHdsNDAzMCIKLQotI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUlkpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZX01PRFVMRSkKLSNkZWZpbmUgdHdsX2hhc19iY2koKQkJdHJ1ZQotI2Vsc2UKLSNkZWZpbmUgdHdsX2hhc19iY2koKQkJZmFsc2UKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMF9NT0RVTEUpCi0jZGVmaW5lIHR3bF9oYXNfa2V5cGFkKCkJdHJ1ZQotI2Vsc2UKLSNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQlmYWxzZQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19HUElPX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMF9NT0RVTEUpCi0jZGVmaW5lIHR3bF9oYXNfZ3BpbygpCXRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfZ3BpbygpCWZhbHNlCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzBfTU9EVUxFKQotI2RlZmluZSB0d2xfaGFzX3JlZ3VsYXRvcigpCXRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfcmVndWxhdG9yKCkJZmFsc2UKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9NQURDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX01BRENfTU9EVUxFKQotI2RlZmluZSB0d2xfaGFzX21hZGMoKQl0cnVlCi0jZWxzZQotI2RlZmluZSB0d2xfaGFzX21hZGMoKQlmYWxzZQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVFdMNDAzMF9QT1dFUgotI2RlZmluZSB0d2xfaGFzX3Bvd2VyKCkgICAgICAgIHRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfcG93ZXIoKSAgICAgICAgZmFsc2UKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzBfTU9EVUxFKQotI2RlZmluZSB0d2xfaGFzX3J0YygpCXRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfcnRjKCkJZmFsc2UKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0IpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfVVNCX01PRFVMRSkKLSNkZWZpbmUgdHdsX2hhc191c2IoKQl0cnVlCi0jZWxzZQotI2RlZmluZSB0d2xfaGFzX3VzYigpCWZhbHNlCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfV0FUQ0hET0cpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19UV0w0MDMwX1dBVENIRE9HX01PRFVMRSkKLSNkZWZpbmUgdHdsX2hhc193YXRjaGRvZygpICAgICAgICB0cnVlCi0jZWxzZQotI2RlZmluZSB0d2xfaGFzX3dhdGNoZG9nKCkgICAgICAgIGZhbHNlCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUMpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUNfTU9EVUxFKQotI2RlZmluZSB0d2xfaGFzX2NvZGVjKCkJdHJ1ZQotI2Vsc2UKLSNkZWZpbmUgdHdsX2hhc19jb2RlYygpCWZhbHNlCi0jZW5kaWYKLQotLyogVHJpdG9uIENvcmUgaW50ZXJuYWwgaW5mb3JtYXRpb24gKEJFR0lOKSAqLwotCi0vKiBMYXN0IC0gZm9yIGluZGV4IG1heCovCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0xBU1QJCVRXTDQwMzBfTU9EVUxFX1NFQ1VSRURfUkVHCi0KLSNkZWZpbmUgVFdMNDAzMF9OVU1fU0xBVkVTCQk0Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9UV0w0MDMwX1BXUkJVVFRPTikgXAotCXx8IGRlZmluZWQoQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdCVVRUT05fTU9EVUxFKQotI2RlZmluZSB0d2xfaGFzX3B3cmJ1dHRvbigpCXRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfcHdyYnV0dG9uKCkJZmFsc2UKLSNlbmRpZgotCi0vKiBCYXNlIEFkZHJlc3MgZGVmbnMgZm9yIHR3bDQwMzBfbWFwW10gKi8KLQotLyogc3ViY2hpcC9zbGF2ZSAwIC0gVVNCIElEICovCi0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9VU0IJCTB4MDAwMAotCi0vKiBzdWJjaGlwL3NsYXZlIDEgLSBBVUQgSUQgKi8KLSNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0FVRElPX1ZPSUNFCTB4MDAwMAotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfR1BJTwkJMHgwMDk4Ci0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRCUgkJMHgwMDg1Ci0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QSUgJCTB4MDA4MAotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfVEVTVAkJMHgwMDRDCi0KLS8qIHN1YmNoaXAvc2xhdmUgMiAtIEFVWCBJRCAqLwotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5URVJSVVBUUwkweDAwQjkKLSNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0xFRAkJMHgwMEVFCi0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9NQURDCQkweDAwMDAKLSNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BSU5fQ0hBUkdFCTB4MDA3NAotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFJFQ0hBUkdFCTB4MDBBQQotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNMAkJMHgwMEY4Ci0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00xCQkweDAwRkIKLSNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTUEJCTB4MDBFRgotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQgkJMHgwMEYxCi0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9LRVlQQUQJCTB4MDBEMgotCi0vKiBzdWJjaGlwL3NsYXZlIDMgLSBQT1dFUiBJRCAqLwotI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQkFDS1VQCQkweDAwMTQKLSNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVAkJMHgwMDJFCi0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIJMHgwMDM2Ci0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUgkweDAwNUIKLSNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1JUQwkJMHgwMDFDCi0jZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRwkweDAwMDAKLQotLyogVHJpdG9uIENvcmUgaW50ZXJuYWwgaW5mb3JtYXRpb24gKEVORCkgKi8KLQotCi0vKiBGZXcgcG93ZXIgdmFsdWVzICovCi0jZGVmaW5lIFJfQ0ZHX0JPT1QJCQkweDA1Ci0jZGVmaW5lIFJfUFJPVEVDVF9LRVkJCQkweDBFCi0KLS8qIGFjY2VzcyBjb250cm9sIHZhbHVlcyBmb3IgUl9QUk9URUNUX0tFWSAqLwotI2RlZmluZSBLRVlfVU5MT0NLMQkJCTB4Y2UKLSNkZWZpbmUgS0VZX1VOTE9DSzIJCQkweGVjCi0jZGVmaW5lIEtFWV9MT0NLCQkJMHgwMAotCi0vKiBzb21lIGZpZWxkcyBpbiBSX0NGR19CT09UICovCi0jZGVmaW5lIEhGQ0xLX0ZSRVFfMTlwMl9NSFoJCSgxIDw8IDApCi0jZGVmaW5lIEhGQ0xLX0ZSRVFfMjZfTUhaCQkoMiA8PCAwKQotI2RlZmluZSBIRkNMS19GUkVRXzM4cDRfTUhaCQkoMyA8PCAwKQotI2RlZmluZSBISUdIX1BFUkZfU1EJCQkoMSA8PCAzKQotCi0KLS8qIGNoaXAtc3BlY2lmaWMgZmVhdHVyZSBmbGFncywgZm9yIGkyY19kZXZpY2VfaWQuZHJpdmVyX2RhdGEgKi8KLSNkZWZpbmUgVFdMNDAzMF9WQVVYMgkJQklUKDApCS8qIHByZS01MDMwIHZvbHRhZ2UgcmFuZ2VzICovCi0jZGVmaW5lIFRQU19TVUJTRVQJCUJJVCgxKQkvKiB0cHM2NTlbMjNdMCBoYXZlIGZld2VyIExET3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogaXMgZHJpdmVyIGFjdGl2ZSwgYm91bmQgdG8gYSBjaGlwPyAqLwotc3RhdGljIGJvb2wgaW51c2U7Ci0KLS8qIFN0cnVjdHVyZSBmb3IgZWFjaCBUV0w0MDMwIFNsYXZlICovCi1zdHJ1Y3QgdHdsNDAzMF9jbGllbnQgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JdTggYWRkcmVzczsKLQotCS8qIG1heCBudW1iIG9mIGkyY19tc2cgcmVxdWlyZWQgaXMgZm9yIHJlYWQgPTIgKi8KLQlzdHJ1Y3QgaTJjX21zZyB4ZmVyX21zZ1syXTsKLQotCS8qIFRvIGxvY2sgYWNjZXNzIHRvIHhmZXJfbXNnICovCi0Jc3RydWN0IG11dGV4IHhmZXJfbG9jazsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgdHdsNDAzMF9tb2R1bGVzW1RXTDQwMzBfTlVNX1NMQVZFU107Ci0KLQotLyogbWFwcGluZyB0aGUgbW9kdWxlIGlkIHRvIHNsYXZlIGlkIGFuZCBiYXNlIGFkZHJlc3MgKi8KLXN0cnVjdCB0d2w0MDMwbWFwcGluZyB7Ci0JdW5zaWduZWQgY2hhciBzaWQ7CS8qIFNsYXZlIElEICovCi0JdW5zaWduZWQgY2hhciBiYXNlOwkvKiBiYXNlIGFkZHJlc3MgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMG1hcHBpbmcgdHdsNDAzMF9tYXBbVFdMNDAzMF9NT0RVTEVfTEFTVCArIDFdID0gewotCS8qCi0JICogTk9URTogIGRvbid0IGNoYW5nZSB0aGlzIHRhYmxlIHdpdGhvdXQgdXBkYXRpbmcgdGhlCi0JICogPGxpbnV4L2kyYy90d2w0MDMwLmg+IGRlZmluZXMgZm9yIFRXTDQwMzBfTU9EVUxFXyoKLQkgKiBzbyB0aGV5IGNvbnRpbnVlIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGlzIHRhYmxlLgotCSAqLwotCi0JeyAwLCBUV0w0MDMwX0JBU0VBRERfVVNCIH0sCi0KLQl7IDEsIFRXTDQwMzBfQkFTRUFERF9BVURJT19WT0lDRSB9LAotCXsgMSwgVFdMNDAzMF9CQVNFQUREX0dQSU8gfSwKLQl7IDEsIFRXTDQwMzBfQkFTRUFERF9JTlRCUiB9LAotCXsgMSwgVFdMNDAzMF9CQVNFQUREX1BJSCB9LAotCXsgMSwgVFdMNDAzMF9CQVNFQUREX1RFU1QgfSwKLQotCXsgMiwgVFdMNDAzMF9CQVNFQUREX0tFWVBBRCB9LAotCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BREMgfSwKLQl7IDIsIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTIH0sCi0JeyAyLCBUV0w0MDMwX0JBU0VBRERfTEVEIH0sCi0JeyAyLCBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UgfSwKLQl7IDIsIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UgfSwKLQl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV00wIH0sCi0JeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMSB9LAotCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTUEgfSwKLQl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01CIH0sCi0KLQl7IDMsIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAgfSwKLQl7IDMsIFRXTDQwMzBfQkFTRUFERF9JTlQgfSwKLQl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIgfSwKLQl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUiB9LAotCXsgMywgVFdMNDAzMF9CQVNFQUREX1JUQyB9LAotCXsgMywgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHIH0sCi19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBFeHBvcnRlZCBGdW5jdGlvbnMgKi8KLQotLyoqCi0gKiB0d2w0MDMwX2kyY193cml0ZSAtIFdyaXRlcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKLSAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKLSAqIEB2YWx1ZTogYW4gYXJyYXkgb2YgbnVtX2J5dGVzKzEgY29udGFpbmluZyBkYXRhIHRvIHdyaXRlCi0gKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQotICogQG51bV9ieXRlczogbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCi0gKgotICogSU1QT1JUQU5UOiBmb3IgJ3ZhbHVlJyBwYXJhbWV0ZXI6IEFsbG9jYXRlIHZhbHVlIG51bV9ieXRlcysxIGFuZAotICogdmFsaWQgZGF0YSBzdGFydHMgYXQgT2Zmc2V0IDEuCi0gKgotICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcwotICovCi1pbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdW5zaWduZWQgbnVtX2J5dGVzKQotewotCWludCByZXQ7Ci0JaW50IHNpZDsKLQlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgKnR3bDsKLQlzdHJ1Y3QgaTJjX21zZyAqbXNnOwotCi0JaWYgKHVubGlrZWx5KG1vZF9ubyA+IFRXTDQwMzBfTU9EVUxFX0xBU1QpKSB7Ci0JCXByX2VycigiJXM6IGludmFsaWQgbW9kdWxlIG51bWJlciAlZFxuIiwgRFJJVkVSX05BTUUsIG1vZF9ubyk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCXNpZCA9IHR3bDQwMzBfbWFwW21vZF9ub10uc2lkOwotCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbc2lkXTsKLQotCWlmICh1bmxpa2VseSghaW51c2UpKSB7Ci0JCXByX2VycigiJXM6IGNsaWVudCAlZCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIERSSVZFUl9OQU1FLCBzaWQpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQltdXRleF9sb2NrKCZ0d2wtPnhmZXJfbG9jayk7Ci0JLyoKLQkgKiBbTVNHMV06IGZpbGwgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgZGF0YQotCSAqIGZpbGwgdGhlIGRhdGEgVHggYnVmZmVyCi0JICovCi0JbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07Ci0JbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOwotCW1zZy0+bGVuID0gbnVtX2J5dGVzICsgMTsKLQltc2ctPmZsYWdzID0gMDsKLQltc2ctPmJ1ZiA9IHZhbHVlOwotCS8qIG92ZXIgd3JpdGUgdGhlIGZpcnN0IGJ5dGUgb2YgYnVmZmVyIHdpdGggdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQkqdmFsdWUgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7Ci0JcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAxKTsKLQltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKLQotCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY193cml0ZSk7Ci0KLS8qKgotICogdHdsNDAzMF9pMmNfcmVhZCAtIFJlYWRzIGEgbiBiaXQgcmVnaXN0ZXIgaW4gVFdMNDAzMAotICogQG1vZF9ubzogbW9kdWxlIG51bWJlcgotICogQHZhbHVlOiBhbiBhcnJheSBvZiBudW1fYnl0ZXMgY29udGFpbmluZyBkYXRhIHRvIGJlIHJlYWQKLSAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCi0gKiBAbnVtX2J5dGVzOiBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIKLSAqCi0gKiBSZXR1cm5zIHJlc3VsdCBvZiBvcGVyYXRpb24gLSBudW1fYnl0ZXMgaXMgc3VjY2VzcyBlbHNlIGZhaWx1cmUuCi0gKi8KLWludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHVuc2lnbmVkIG51bV9ieXRlcykKLXsKLQlpbnQgcmV0OwotCXU4IHZhbDsKLQlpbnQgc2lkOwotCXN0cnVjdCB0d2w0MDMwX2NsaWVudCAqdHdsOwotCXN0cnVjdCBpMmNfbXNnICptc2c7Ci0KLQlpZiAodW5saWtlbHkobW9kX25vID4gVFdMNDAzMF9NT0RVTEVfTEFTVCkpIHsKLQkJcHJfZXJyKCIlczogaW52YWxpZCBtb2R1bGUgbnVtYmVyICVkXG4iLCBEUklWRVJfTkFNRSwgbW9kX25vKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0Jc2lkID0gdHdsNDAzMF9tYXBbbW9kX25vXS5zaWQ7Ci0JdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tzaWRdOwotCi0JaWYgKHVubGlrZWx5KCFpbnVzZSkpIHsKLQkJcHJfZXJyKCIlczogY2xpZW50ICVkIGlzIG5vdCBpbml0aWFsaXplZFxuIiwgRFJJVkVSX05BTUUsIHNpZCk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCW11dGV4X2xvY2soJnR3bC0+eGZlcl9sb2NrKTsKLQkvKiBbTVNHMV0gZmlsbCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhICovCi0JbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07Ci0JbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOwotCW1zZy0+bGVuID0gMTsKLQltc2ctPmZsYWdzID0gMDsJLyogUmVhZCB0aGUgcmVnaXN0ZXIgdmFsdWUgKi8KLQl2YWwgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7Ci0JbXNnLT5idWYgPSAmdmFsOwotCS8qIFtNU0cyXSBmaWxsIHRoZSBkYXRhIHJ4IGJ1ZmZlciAqLwotCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzFdOwotCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKLQltc2ctPmZsYWdzID0gSTJDX01fUkQ7CS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHZhbHVlICovCi0JbXNnLT5sZW4gPSBudW1fYnl0ZXM7CS8qIG9ubHkgbiBieXRlcyAqLwotCW1zZy0+YnVmID0gdmFsdWU7Ci0JcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAyKTsKLQltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKLQotCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY19yZWFkKTsKLQotLyoqCi0gKiB0d2w0MDMwX2kyY193cml0ZV91OCAtIFdyaXRlcyBhIDggYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKLSAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKLSAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gOCBiaXQKLSAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCi0gKgotICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCi0gKi8KLWludCB0d2w0MDMwX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbHVlLCB1OCByZWcpCi17Ci0KLQkvKiAyIGJ5dGVzIG9mZnNldCAxIGNvbnRhaW5zIHRoZSBkYXRhIG9mZnNldCAwIGlzIHVzZWQgYnkgaTJjX3dyaXRlICovCi0JdTggdGVtcF9idWZmZXJbMl0gPSB7IDAgfTsKLQkvKiBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSAqLwotCXRlbXBfYnVmZmVyWzFdID0gdmFsdWU7Ci0JcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlKG1vZF9ubywgdGVtcF9idWZmZXIsIHJlZywgMSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHR3bDQwMzBfaTJjX3dyaXRlX3U4KTsKLQotLyoqCi0gKiB0d2w0MDMwX2kyY19yZWFkX3U4IC0gUmVhZHMgYSA4IGJpdCByZWdpc3RlciBmcm9tIFRXTDQwMzAKLSAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKLSAqIEB2YWx1ZTogdGhlIHZhbHVlIHJlYWQgOCBiaXQKLSAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCi0gKgotICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCi0gKi8KLWludCB0d2w0MDMwX2kyY19yZWFkX3U4KHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcpCi17Ci0JcmV0dXJuIHR3bDQwMzBfaTJjX3JlYWQobW9kX25vLCB2YWx1ZSwgcmVnLCAxKTsKLX0KLUVYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfcmVhZF91OCk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICoKLWFkZF9udW1iZXJlZF9jaGlsZCh1bnNpZ25lZCBjaGlwLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnVtLAotCQl2b2lkICpwZGF0YSwgdW5zaWduZWQgcGRhdGFfbGVuLAotCQlib29sIGNhbl93YWtldXAsIGludCBpcnEwLCBpbnQgaXJxMSkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwotCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tjaGlwXTsKLQlpbnQJCQlzdGF0dXM7Ci0KLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIG51bSk7Ci0JaWYgKCFwZGV2KSB7Ci0JCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsICJjYW4ndCBhbGxvYyBkZXZcbiIpOwotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgY2FuX3dha2V1cCk7Ci0JcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OwotCi0JaWYgKHBkYXRhKSB7Ci0JCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YSwgcGRhdGFfbGVuKTsKLQkJaWYgKHN0YXR1cyA8IDApIHsKLQkJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGFkZCBwbGF0Zm9ybV9kYXRhXG4iKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfQotCi0JaWYgKGlycTApIHsKLQkJc3RydWN0IHJlc291cmNlIHJbMl0gPSB7Ci0JCQl7IC5zdGFydCA9IGlycTAsIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLCB9LAotCQkJeyAuc3RhcnQgPSBpcnExLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwgfSwKLQkJfTsKLQotCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCBpcnExID8gMiA6IDEpOwotCQlpZiAoc3RhdHVzIDwgMCkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGlycXNcbiIpOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0KLQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCi1lcnI6Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKLQkJZGV2X2VycigmdHdsLT5jbGllbnQtPmRldiwgImNhbid0IGFkZCAlcyBkZXZcbiIsIG5hbWUpOwotCQlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOwotCX0KLQlyZXR1cm4gJnBkZXYtPmRldjsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICphZGRfY2hpbGQodW5zaWduZWQgY2hpcCwgY29uc3QgY2hhciAqbmFtZSwKLQkJdm9pZCAqcGRhdGEsIHVuc2lnbmVkIHBkYXRhX2xlbiwKLQkJYm9vbCBjYW5fd2FrZXVwLCBpbnQgaXJxMCwgaW50IGlycTEpCi17Ci0JcmV0dXJuIGFkZF9udW1iZXJlZF9jaGlsZChjaGlwLCBuYW1lLCAtMSwgcGRhdGEsIHBkYXRhX2xlbiwKLQkJY2FuX3dha2V1cCwgaXJxMCwgaXJxMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICoKLWFkZF9yZWd1bGF0b3JfbGlua2VkKGludCBudW0sIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpwZGF0YSwKLQkJc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgKmNvbnN1bWVycywKLQkJdW5zaWduZWQgbnVtX2NvbnN1bWVycykKLXsKLQkvKiByZWd1bGF0b3IgZnJhbWV3b3JrIGRlbWFuZHMgaW5pdF9kYXRhIC4uLiAqLwotCWlmICghcGRhdGEpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGNvbnN1bWVycykgewotCQlwZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXMgPSBjb25zdW1lcnM7Ci0JCXBkYXRhLT5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBudW1fY29uc3VtZXJzOwotCX0KLQotCS8qIE5PVEU6ICB3ZSBjdXJyZW50bHkgaWdub3JlIHJlZ3VsYXRvciBJUlFzLCBlLmcuIGZvciBzaG9ydCBjaXJjdWl0cyAqLwotCXJldHVybiBhZGRfbnVtYmVyZWRfY2hpbGQoMywgInR3bDQwMzBfcmVnIiwgbnVtLAotCQlwZGF0YSwgc2l6ZW9mKCpwZGF0YSksIGZhbHNlLCAwLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2UgKgotYWRkX3JlZ3VsYXRvcihpbnQgbnVtLCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcGRhdGEpCi17Ci0JcmV0dXJuIGFkZF9yZWd1bGF0b3JfbGlua2VkKG51bSwgcGRhdGEsIE5VTEwsIDApOwotfQotCi0vKgotICogTk9URTogIFdlIGtub3cgdGhlIGZpcnN0IDggSVJRcyBhZnRlciBwZGF0YS0+YmFzZV9pcnEgYXJlCi0gKiBmb3IgdGhlIFBJSCwgYW5kIHRoZSBuZXh0IGFyZSBmb3IgdGhlIFBXUl9JTlQgU0lILCBzaW5jZQotICogdGhhdCdzIGhvdyB0d2xfaW5pdF9pcnEoKSBzZXRzIHRoaW5ncyB1cC4KLSAqLwotCi1zdGF0aWMgaW50Ci1hZGRfY2hpbGRyZW4oc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMpCi17Ci0Jc3RydWN0IGRldmljZQkqY2hpbGQ7Ci0KLQlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpICYmICEoZmVhdHVyZXMgJiBUUFNfU1VCU0VUKSkgewotCQljaGlsZCA9IGFkZF9jaGlsZCgzLCAidHdsNDAzMF9iY2kiLAotCQkJCXBkYXRhLT5iY2ksIHNpemVvZigqcGRhdGEtPmJjaSksCi0JCQkJZmFsc2UsCi0JCQkJLyogaXJxMCA9IENIR19QUkVTLCBpcnExID0gQkNJICovCi0JCQkJcGRhdGEtPmlycV9iYXNlICsgOCArIDEsIHBkYXRhLT5pcnFfYmFzZSArIDIpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQl9Ci0KLQlpZiAodHdsX2hhc19ncGlvKCkgJiYgcGRhdGEtPmdwaW8pIHsKLQkJY2hpbGQgPSBhZGRfY2hpbGQoMSwgInR3bDQwMzBfZ3BpbyIsCi0JCQkJcGRhdGEtPmdwaW8sIHNpemVvZigqcGRhdGEtPmdwaW8pLAotCQkJCWZhbHNlLCBwZGF0YS0+aXJxX2Jhc2UgKyAwLCAwKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0JfQotCi0JaWYgKHR3bF9oYXNfa2V5cGFkKCkgJiYgcGRhdGEtPmtleXBhZCkgewotCQljaGlsZCA9IGFkZF9jaGlsZCgyLCAidHdsNDAzMF9rZXlwYWQiLAotCQkJCXBkYXRhLT5rZXlwYWQsIHNpemVvZigqcGRhdGEtPmtleXBhZCksCi0JCQkJdHJ1ZSwgcGRhdGEtPmlycV9iYXNlICsgMSwgMCk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQotCWlmICh0d2xfaGFzX21hZGMoKSAmJiBwZGF0YS0+bWFkYykgewotCQljaGlsZCA9IGFkZF9jaGlsZCgyLCAidHdsNDAzMF9tYWRjIiwKLQkJCQlwZGF0YS0+bWFkYywgc2l6ZW9mKCpwZGF0YS0+bWFkYyksCi0JCQkJdHJ1ZSwgcGRhdGEtPmlycV9iYXNlICsgMywgMCk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQotCWlmICh0d2xfaGFzX3J0YygpKSB7Ci0JCS8qCi0JCSAqIFJFVklTSVQgcGxhdGZvcm1fZGF0YSBoZXJlIGN1cnJlbnRseSBtaWdodCBleHBvc2UgdGhlCi0JCSAqICJtc2VjdXJlIiBsaW5lIC4uLiBidXQgZm9yIG5vdyB3ZSBqdXN0IGV4cGVjdCBib2FyZAotCQkgKiBzZXR1cCB0byB0ZWxsIHRoZSBjaGlwICJpdCdzIGFsd2F5cyBvayB0byBTRVRfVElNRSIuCi0JCSAqIEV2ZW50dWFsbHksIExpbnV4IG1pZ2h0IGJlY29tZSBtb3JlIGF3YXJlIG9mIHN1Y2gKLQkJICogSFcgc2VjdXJpdHkgY29uY2VybnMsIGFuZCAibGVhc3QgcHJpdmlsZWdlIi4KLQkJICovCi0JCWNoaWxkID0gYWRkX2NoaWxkKDMsICJ0d2w0MDMwX3J0YyIsCi0JCQkJTlVMTCwgMCwKLQkJCQl0cnVlLCBwZGF0YS0+aXJxX2Jhc2UgKyA4ICsgMywgMCk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQotCWlmICh0d2xfaGFzX3VzYigpICYmIHBkYXRhLT51c2IpIHsKLQotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY1ID0gewotCQkJLnN1cHBseSA9CSJ1c2IxdjUiLAotCQl9OwotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY4ID0gewotCQkJLnN1cHBseSA9CSJ1c2IxdjgiLAotCQl9OwotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiM3YxID0gewotCQkJLnN1cHBseSA9CSJ1c2IzdjEiLAotCQl9OwotCi0JLyogRmlyc3QgYWRkIHRoZSByZWd1bGF0b3JzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBieSB0cmFuc2NlaXZlciAqLwotCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSkgewotCQkJLyogdGhpcyBpcyBhIHRlbXBsYXRlIHRoYXQgZ2V0cyBjb3BpZWQgKi8KLQkJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHVzYl9maXhlZCA9IHsKLQkJCQkuY29uc3RyYWludHMudmFsaWRfbW9kZXNfbWFzayA9Ci0JCQkJCVJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCi0JCQkJLmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0KLQkJCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JCQl9OwotCi0JCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjUsCi0JCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiMXY1LCAxKTsKLQkJCWlmIChJU19FUlIoY2hpbGQpKQotCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY4LAotCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjF2OCwgMSk7Ci0JCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjNWMSwKLQkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IzdjEsIDEpOwotCQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCi0JCX0KLQotCQljaGlsZCA9IGFkZF9jaGlsZCgwLCAidHdsNDAzMF91c2IiLAotCQkJCXBkYXRhLT51c2IsIHNpemVvZigqcGRhdGEtPnVzYiksCi0JCQkJdHJ1ZSwKLQkJCQkvKiBpcnEwID0gVVNCX1BSRVMsIGlycTEgPSBVU0IgKi8KLQkJCQlwZGF0YS0+aXJxX2Jhc2UgKyA4ICsgMiwgcGRhdGEtPmlycV9iYXNlICsgNCk7Ci0KLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJLyogd2UgbmVlZCB0byBjb25uZWN0IHJlZ3VsYXRvcnMgdG8gdGhpcyB0cmFuc2NlaXZlciAqLwotCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiBjaGlsZCkgewotCQkJdXNiMXY1LmRldiA9IGNoaWxkOwotCQkJdXNiMXY4LmRldiA9IGNoaWxkOwotCQkJdXNiM3YxLmRldiA9IGNoaWxkOwotCQl9Ci0JfQotCi0JaWYgKHR3bF9oYXNfd2F0Y2hkb2coKSkgewotCQljaGlsZCA9IGFkZF9jaGlsZCgwLCAidHdsNDAzMF93ZHQiLCBOVUxMLCAwLCBmYWxzZSwgMCwgMCk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQotCWlmICh0d2xfaGFzX3B3cmJ1dHRvbigpKSB7Ci0JCWNoaWxkID0gYWRkX2NoaWxkKDEsICJ0d2w0MDMwX3B3cmJ1dHRvbiIsCi0JCQkJTlVMTCwgMCwgdHJ1ZSwgcGRhdGEtPmlycV9iYXNlICsgOCArIDAsIDApOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQl9Ci0KLQlpZiAodHdsX2hhc19jb2RlYygpICYmIHBkYXRhLT5jb2RlYykgewotCQljaGlsZCA9IGFkZF9jaGlsZCgxLCAidHdsNDAzMF9jb2RlYyIsCi0JCQkJcGRhdGEtPmNvZGVjLCBzaXplb2YoKnBkYXRhLT5jb2RlYyksCi0JCQkJZmFsc2UsIDAsIDApOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQl9Ci0KLQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSkgewotCQkvKgotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVlBMTDEsIHBkYXRhLT52cGxsMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCQkqLwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WTU1DMSwgcGRhdGEtPnZtbWMxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZEQUMsIHBkYXRhLT52ZGFjKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKChmZWF0dXJlcyAmIFRXTDQwMzBfVkFVWDIpCi0JCQkJCT8gVFdMNDAzMF9SRUdfVkFVWDJfNDAzMAotCQkJCQk6IFRXTDQwMzBfUkVHX1ZBVVgyLAotCQkJCXBkYXRhLT52YXV4Mik7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCX0KLQotCS8qIG1heWJlIGFkZCBMRE9zIHRoYXQgYXJlIG9taXR0ZWQgb24gY29zdC1yZWR1Y2VkIHBhcnRzICovCi0JaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgIShmZWF0dXJlcyAmIFRQU19TVUJTRVQpKSB7Ci0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WUExMMiwgcGRhdGEtPnZwbGwyKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZNTUMyLCBwZGF0YS0+dm1tYzIpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVlNJTSwgcGRhdGEtPnZzaW0pOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVkFVWDEsIHBkYXRhLT52YXV4MSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WQVVYMywgcGRhdGEtPnZhdXgzKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZBVVg0LCBwZGF0YS0+dmF1eDQpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBpbml0aWFsaXplIHRoZSBvbi1jaGlwIGNsb2NrIGZyYW1ld29yaywKLSAqIGxldHRpbmcgaXQgZ2VuZXJhdGUgdGhlIHJpZ2h0IGZyZXF1ZW5jaWVzIGZvciBVU0IsIE1BREMsIGFuZAotICogb3RoZXIgcHVycG9zZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBwcm90ZWN0X3BtX21hc3Rlcih2b2lkKQotewotCWludCBlID0gMDsKLQotCWUgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9MT0NLLAotCQkJUl9QUk9URUNUX0tFWSk7Ci0JcmV0dXJuIGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB1bnByb3RlY3RfcG1fbWFzdGVyKHZvaWQpCi17Ci0JaW50IGUgPSAwOwotCi0JZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0sxLAotCQkJUl9QUk9URUNUX0tFWSk7Ci0JZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0syLAotCQkJUl9QUk9URUNUX0tFWSk7Ci0JcmV0dXJuIGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZSA9IDA7Ci0Jc3RydWN0IGNsayAqb3NjOwotCXUzMiByYXRlOwotCXU4IGN0cmwgPSBIRkNMS19GUkVRXzI2X01IWjsKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0JaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQlvc2MgPSBjbGtfZ2V0KGRldiwgIm9zY19jayIpOwotCWVsc2UKLQkJb3NjID0gY2xrX2dldChkZXYsICJvc2Nfc3lzX2NrIik7Ci0KLQlpZiAoSVNfRVJSKG9zYykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2tpcHBpbmcgdHdsNDAzMCBpbnRlcm5hbCBjbG9jayBpbml0IGFuZCAiCi0JCQkJInVzaW5nIGJvb3Rsb2FkZXIgdmFsdWUgKHVua25vd24gb3NjIHJhdGUpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUob3NjKTsKLQljbGtfcHV0KG9zYyk7Ci0KLSNlbHNlCi0JLyogUkVWSVNJVCBmb3Igbm9uLU9NQVAgc3lzdGVtcywgcGFzcyB0aGUgY2xvY2sgcmF0ZSBmcm9tCi0JICogYm9hcmQgaW5pdCBjb2RlLCB1c2luZyBwbGF0Zm9ybV9kYXRhLgotCSAqLwotCW9zYyA9IEVSUl9QVFIoLUVJTyk7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJTa2lwcGluZyB0d2w0MDMwIGludGVybmFsIGNsb2NrIGluaXQgYW5kICIKLQkgICAgICAgInVzaW5nIGJvb3Rsb2FkZXIgdmFsdWUgKHVua25vd24gb3NjIHJhdGUpXG4iKTsKLQotCXJldHVybjsKLSNlbmRpZgotCi0Jc3dpdGNoIChyYXRlKSB7Ci0JY2FzZSAxOTIwMDAwMDoKLQkJY3RybCA9IEhGQ0xLX0ZSRVFfMTlwMl9NSFo7Ci0JCWJyZWFrOwotCWNhc2UgMjYwMDAwMDA6Ci0JCWN0cmwgPSBIRkNMS19GUkVRXzI2X01IWjsKLQkJYnJlYWs7Ci0JY2FzZSAzODQwMDAwMDoKLQkJY3RybCA9IEhGQ0xLX0ZSRVFfMzhwNF9NSFo7Ci0JCWJyZWFrOwotCX0KLQotCWN0cmwgfD0gSElHSF9QRVJGX1NROwotCWUgfD0gdW5wcm90ZWN0X3BtX21hc3RlcigpOwotCS8qIGVmZmVjdC0+TUFEQytVU0IgY2sgZW4gKi8KLQllIHw9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgY3RybCwgUl9DRkdfQk9PVCk7Ci0JZSB8PSBwcm90ZWN0X3BtX21hc3RlcigpOwotCi0JaWYgKGUgPCAwKQotCQlwcl9lcnIoIiVzOiBjbG9jayBpbml0IGVyciBbJWRdXG4iLCBEUklWRVJfTkFNRSwgZSk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWludCB0d2xfaW5pdF9pcnEoaW50IGlycV9udW0sIHVuc2lnbmVkIGlycV9iYXNlLCB1bnNpZ25lZCBpcnFfZW5kKTsKLWludCB0d2xfZXhpdF9pcnEodm9pZCk7Ci0KLXN0YXRpYyBpbnQgdHdsNDAzMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1bnNpZ25lZCBpOwotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSB0d2xfZXhpdF9pcnEoKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKLQotCWZvciAoaSA9IDA7IGkgPCBUV0w0MDMwX05VTV9TTEFWRVM7IGkrKykgewotCQlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQJKnR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbaV07Ci0KLQkJaWYgKHR3bC0+Y2xpZW50ICYmIHR3bC0+Y2xpZW50ICE9IGNsaWVudCkKLQkJCWkyY191bnJlZ2lzdGVyX2RldmljZSh0d2wtPmNsaWVudCk7Ci0JCXR3bDQwMzBfbW9kdWxlc1tpXS5jbGllbnQgPSBOVUxMOwotCX0KLQlpbnVzZSA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi0vKiBOT1RFOiAgdGhpcyBkcml2ZXIgb25seSBoYW5kbGVzIGEgc2luZ2xlIHR3bDQwMzAvdHBzNjU5eDAgY2hpcCAqLwotc3RhdGljIGludCBfX2luaXQKLXR3bDQwMzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCWludAkJCQlzdGF0dXM7Ci0JdW5zaWduZWQJCQlpOwotCXN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCWlmICghcGRhdGEpIHsKLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykgPT0gMCkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNhbid0IHRhbGsgSTJDP1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChpbnVzZSkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImRyaXZlciBpcyBhbHJlYWR5IGluIHVzZVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IFRXTDQwMzBfTlVNX1NMQVZFUzsgaSsrKSB7Ci0JCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tpXTsKLQotCQl0d2wtPmFkZHJlc3MgPSBjbGllbnQtPmFkZHIgKyBpOwotCQlpZiAoaSA9PSAwKQotCQkJdHdsLT5jbGllbnQgPSBjbGllbnQ7Ci0JCWVsc2UgewotCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKLQkJCQkJdHdsLT5hZGRyZXNzKTsKLQkJCWlmICghdHdsLT5jbGllbnQpIHsKLQkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCQkJImNhbid0IGF0dGFjaCBjbGllbnQgJWRcbiIsIGkpOwotCQkJCXN0YXR1cyA9IC1FTk9NRU07Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQkJc3RybGNweSh0d2wtPmNsaWVudC0+bmFtZSwgaWQtPm5hbWUsCi0JCQkJCXNpemVvZih0d2wtPmNsaWVudC0+bmFtZSkpOwotCQl9Ci0JCW11dGV4X2luaXQoJnR3bC0+eGZlcl9sb2NrKTsKLQl9Ci0JaW51c2UgPSB0cnVlOwotCi0JLyogc2V0dXAgY2xvY2sgZnJhbWV3b3JrICovCi0JY2xvY2tzX2luaXQoJmNsaWVudC0+ZGV2KTsKLQotCS8qIGxvYWQgcG93ZXIgZXZlbnQgc2NyaXB0cyAqLwotCWlmICh0d2xfaGFzX3Bvd2VyKCkgJiYgcGRhdGEtPnBvd2VyKQotCQl0d2w0MDMwX3Bvd2VyX2luaXQocGRhdGEtPnBvd2VyKTsKLQotCS8qIE1heWJlIGluaXQgdGhlIFQyIEludGVycnVwdCBzdWJzeXN0ZW0gKi8KLQlpZiAoY2xpZW50LT5pcnEKLQkJCSYmIHBkYXRhLT5pcnFfYmFzZQotCQkJJiYgcGRhdGEtPmlycV9lbmQgPiBwZGF0YS0+aXJxX2Jhc2UpIHsKLQkJc3RhdHVzID0gdHdsX2luaXRfaXJxKGNsaWVudC0+aXJxLCBwZGF0YS0+aXJxX2Jhc2UsIHBkYXRhLT5pcnFfZW5kKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlnb3RvIGZhaWw7Ci0JfQotCi0Jc3RhdHVzID0gYWRkX2NoaWxkcmVuKHBkYXRhLCBpZC0+ZHJpdmVyX2RhdGEpOwotZmFpbDoKLQlpZiAoc3RhdHVzIDwgMCkKLQkJdHdsNDAzMF9yZW1vdmUoY2xpZW50KTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHdsNDAzMF9pZHNbXSA9IHsKLQl7ICJ0d2w0MDMwIiwgVFdMNDAzMF9WQVVYMiB9LAkvKiAiVHJpdG9uIDIiICovCi0JeyAidHdsNTAzMCIsIDAgfSwJCS8qIFQyIHVwZGF0ZWQgKi8KLQl7ICJ0cHM2NTk1MCIsIDAgfSwJCS8qIGNhdGFsb2cgdmVyc2lvbiBvZiB0d2w1MDMwICovCi0JeyAidHBzNjU5MzAiLCBUUFNfU1VCU0VUIH0sCS8qIGZld2VyIExET3MgYW5kIERBQ3M7IG5vIGNoYXJnZXIgKi8KLQl7ICJ0cHM2NTkyMCIsIFRQU19TVUJTRVQgfSwJLyogZmV3ZXIgTERPczsgbm8gY29kZWMgb3IgY2hhcmdlciAqLwotCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdHdsNDAzMF9pZHMpOwotCi0vKiBPbmUgQ2xpZW50IERyaXZlciAsIDQgQ2xpZW50cyAqLwotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHR3bDQwMzBfZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9IERSSVZFUl9OQU1FLAotCS5pZF90YWJsZQk9IHR3bDQwMzBfaWRzLAotCS5wcm9iZQkJPSB0d2w0MDMwX3Byb2JlLAotCS5yZW1vdmUJCT0gdHdsNDAzMF9yZW1vdmUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0d2w0MDMwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnR3bDQwMzBfZHJpdmVyKTsKLX0KLXN1YnN5c19pbml0Y2FsbCh0d2w0MDMwX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHdsNDAzMF9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnR3bDQwMzBfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KHR3bDQwMzBfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzLCBJbmMuIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkkyQyBDb3JlIGludGVyZmFjZSBmb3IgVFdMNDAzMCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMKaW5kZXggZmIxOTRmZS4uMjBkMjliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCi0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAKIAogLyoKQEAgLTc0LDYgKzc0LDggQEAKIAl1OAllZHJfb2Zmc2V0OwogCXU4CWJ5dGVzX2VkcjsJCS8qIGJ5dGVsZW4gb2YgRURSICovCiAKKwl1OAlpcnFfbGluZXM7CQkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGlycSBsaW5lcyAqLworCiAJLyogU0lSIGlnbm9yZWQgLS0gc2V0IGludGVycnVwdCwgZm9yIHRlc3Rpbmcgb25seSAqLwogCXN0cnVjdCBpcnFfZGF0YSB7CiAJCXU4CWlzcl9vZmZzZXQ7CkBAIC04Miw2ICs4NCw5IEBACiAJLyogKyAyIGJ5dGVzIHBhZGRpbmcgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2loICpzaWhfbW9kdWxlczsKK3N0YXRpYyBpbnQgbnJfc2loX21vZHVsZXM7CisKICNkZWZpbmUgU0lIX0lOSVRJQUxJWkVSKG1vZG5hbWUsIG5iaXRzKSBcCiAJLm1vZHVsZQkJPSBUV0w0MDMwX01PRFVMRV8gIyMgbW9kbmFtZSwgXAogCS5jb250cm9sX29mZnNldCA9IFRXTDQwMzBfICMjIG1vZG5hbWUgIyMgX1NJSF9DVFJMLCBcCkBAIC04OSw2ICs5NCw3IEBACiAJLmJ5dGVzX2l4cgk9IERJVl9ST1VORF9VUChuYml0cywgOCksIFwKIAkuZWRyX29mZnNldAk9IFRXTDQwMzBfICMjIG1vZG5hbWUgIyMgX0VEUiwgXAogCS5ieXRlc19lZHIJPSBESVZfUk9VTkRfVVAoKDIqKG5iaXRzKSksIDgpLCBcCisJLmlycV9saW5lcwk9IDIsIFwKIAkubWFzayA9IHsgeyBcCiAJCS5pc3Jfb2Zmc2V0CT0gVFdMNDAzMF8gIyMgbW9kbmFtZSAjIyBfSVNSMSwgXAogCQkuaW1yX29mZnNldAk9IFRXTDQwMzBfICMjIG1vZG5hbWUgIyMgX0lNUjEsIFwKQEAgLTEwNyw3ICsxMTMsOCBAQAogLyogT3JkZXIgaW4gdGhpcyB0YWJsZSBtYXRjaGVzIG9yZGVyIGluIFBJSF9JU1IuICBUaGF0IGlzLAogICogQklUKG4pIGluIFBJSF9JU1IgaXMgc2loX21vZHVsZXNbbl0uCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2loIHNpaF9tb2R1bGVzWzZdID0geworLyogc2loX21vZHVsZXNfdHdsNDAzMCBpcyB1c2VkIGJvdGggaW4gdHdsNDAzMCBhbmQgdHdsNTAzMCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzaWggc2loX21vZHVsZXNfdHdsNDAzMFs2XSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lCQk9ICJncGlvIiwKIAkJLm1vZHVsZQkJPSBUV0w0MDMwX01PRFVMRV9HUElPLApAQCAtMTE4LDYgKzEyNSw3IEBACiAJCS8qIE5vdGU6ICphbGwqIG9mIHRoZXNlIElSUXMgZGVmYXVsdCB0byBuby10cmlnZ2VyICovCiAJCS5lZHJfb2Zmc2V0CT0gUkVHX0dQSU9fRURSMSwKIAkJLmJ5dGVzX2Vkcgk9IDUsCisJCS5pcnFfbGluZXMJPSAyLAogCQkubWFzayA9IHsgewogCQkJLmlzcl9vZmZzZXQJPSBSRUdfR1BJT19JU1IxQSwKIAkJCS5pbXJfb2Zmc2V0CT0gUkVHX0dQSU9fSU1SMUEsCkBAIC0xNDAsNiArMTQ4LDcgQEAKIAkJLmVkcl9vZmZzZXQJPSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMSwKIAkJLyogTm90ZTogbW9zdCBvZiB0aGVzZSBJUlFzIGRlZmF1bHQgdG8gbm8tdHJpZ2dlciAqLwogCQkuYnl0ZXNfZWRyCT0gMywKKwkJLmlycV9saW5lcwk9IDIsCiAJCS5tYXNrID0geyB7CiAJCQkuaXNyX29mZnNldAk9IFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQSwKIAkJCS5pbXJfb2Zmc2V0CT0gVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFBLApAQCAtMTY0LDYgKzE3Myw5OSBAQAogCQkvKiB0aGVyZSBhcmUgbm8gU0lIIG1vZHVsZXMgIzYgb3IgIzcgLi4uICovCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNpaCBzaWhfbW9kdWxlc190d2w1MDMxWzhdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gImdwaW8iLAorCQkubW9kdWxlCQk9IFRXTDQwMzBfTU9EVUxFX0dQSU8sCisJCS5jb250cm9sX29mZnNldAk9IFJFR19HUElPX1NJSF9DVFJMLAorCQkuc2V0X2Nvcgk9IHRydWUsCisJCS5iaXRzCQk9IFRXTDQwMzBfR1BJT19NQVgsCisJCS5ieXRlc19peHIJPSAzLAorCQkvKiBOb3RlOiAqYWxsKiBvZiB0aGVzZSBJUlFzIGRlZmF1bHQgdG8gbm8tdHJpZ2dlciAqLworCQkuZWRyX29mZnNldAk9IFJFR19HUElPX0VEUjEsCisJCS5ieXRlc19lZHIJPSA1LAorCQkuaXJxX2xpbmVzCT0gMiwKKwkJLm1hc2sgPSB7IHsKKwkJCS5pc3Jfb2Zmc2V0CT0gUkVHX0dQSU9fSVNSMUEsCisJCQkuaW1yX29mZnNldAk9IFJFR19HUElPX0lNUjFBLAorCQl9LCB7CisJCQkuaXNyX29mZnNldAk9IFJFR19HUElPX0lTUjFCLAorCQkJLmltcl9vZmZzZXQJPSBSRUdfR1BJT19JTVIxQiwKKwkJfSwgfSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gImtleXBhZCIsCisJCS5zZXRfY29yCT0gdHJ1ZSwKKwkJU0lIX0lOSVRJQUxJWkVSKEtFWVBBRF9LRVlQLCA0KQorCX0sCisJWzJdID0geworCQkubmFtZQkJPSAiYmNpIiwKKwkJLm1vZHVsZQkJPSBUV0w1MDMxX01PRFVMRV9JTlRFUlJVUFRTLAorCQkuY29udHJvbF9vZmZzZXQJPSBUV0w1MDMxX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTCwKKwkJLmJpdHMJCT0gNywKKwkJLmJ5dGVzX2l4cgk9IDEsCisJCS5lZHJfb2Zmc2V0CT0gVFdMNTAzMV9JTlRFUlJVUFRTX0JDSUVEUjEsCisJCS8qIE5vdGU6IG1vc3Qgb2YgdGhlc2UgSVJRcyBkZWZhdWx0IHRvIG5vLXRyaWdnZXIgKi8KKwkJLmJ5dGVzX2Vkcgk9IDIsCisJCS5pcnFfbGluZXMJPSAyLAorCQkubWFzayA9IHsgeworCQkJLmlzcl9vZmZzZXQJPSBUV0w1MDMxX0lOVEVSUlVQVFNfQkNJSVNSMSwKKwkJCS5pbXJfb2Zmc2V0CT0gVFdMNTAzMV9JTlRFUlJVUFRTX0JDSUlNUjEsCisJCX0sIHsKKwkJCS5pc3Jfb2Zmc2V0CT0gVFdMNTAzMV9JTlRFUlJVUFRTX0JDSUlTUjIsCisJCQkuaW1yX29mZnNldAk9IFRXTDUwMzFfSU5URVJSVVBUU19CQ0lJTVIyLAorCQl9LCB9LAorCX0sCisJWzNdID0geworCQkubmFtZQkJPSAibWFkYyIsCisJCVNJSF9JTklUSUFMSVpFUihNQURDLCA0KQorCX0sCisJWzRdID0geworCQkvKiBVU0IgZG9lc24ndCB1c2UgdGhlIHNhbWUgU0lIIG9yZ2FuaXphdGlvbiAqLworCQkubmFtZQkJPSAidXNiIiwKKwl9LAorCVs1XSA9IHsKKwkJLm5hbWUJCT0gInBvd2VyIiwKKwkJLnNldF9jb3IJPSB0cnVlLAorCQlTSUhfSU5JVElBTElaRVIoSU5UX1BXUiwgOCkKKwl9LAorCVs2XSA9IHsKKwkJLyoKKwkJICogQUNJIGRvZXNuJ3QgdXNlIHRoZSBzYW1lIFNJSCBvcmdhbml6YXRpb24uCisJCSAqIEZvciBleGFtcGxlLCBpdCBzdXBwb3J0cyBvbmx5IG9uZSBpbnRlcnJ1cHQgbGluZQorCQkgKi8KKwkJLm5hbWUJCT0gImFjaSIsCisJCS5tb2R1bGUJCT0gVFdMNTAzMV9NT0RVTEVfQUNDRVNTT1JZLAorCQkuYml0cwkJPSA5LAorCQkuYnl0ZXNfaXhyCT0gMiwKKwkJLmlycV9saW5lcwk9IDEsCisJCS5tYXNrID0geyB7CisJCQkuaXNyX29mZnNldAk9IFRXTDUwMzFfQUNJSURSX0xTQiwKKwkJCS5pbXJfb2Zmc2V0CT0gVFdMNTAzMV9BQ0lJTVJfTFNCLAorCQl9LCB9LAorCisJfSwKKwlbN10gPSB7CisJCS8qIEFjY2Vzc29yeSAqLworCQkubmFtZQkJPSAiYWNjIiwKKwkJLm1vZHVsZQkJPSBUV0w1MDMxX01PRFVMRV9BQ0NFU1NPUlksCisJCS5jb250cm9sX29mZnNldAk9IFRXTDUwMzFfQUNDU0lIQ1RSTCwKKwkJLmJpdHMJCT0gMiwKKwkJLmJ5dGVzX2l4cgk9IDEsCisJCS5lZHJfb2Zmc2V0CT0gVFdMNTAzMV9BQ0NFRFIxLAorCQkvKiBOb3RlOiBtb3N0IG9mIHRoZXNlIElSUXMgZGVmYXVsdCB0byBuby10cmlnZ2VyICovCisJCS5ieXRlc19lZHIJPSAxLAorCQkuaXJxX2xpbmVzCT0gMiwKKwkJLm1hc2sgPSB7IHsKKwkJCS5pc3Jfb2Zmc2V0CT0gVFdMNTAzMV9BQ0NJU1IxLAorCQkJLmltcl9vZmZzZXQJPSBUV0w1MDMxX0FDQ0lNUjEsCisJCX0sIHsKKwkJCS5pc3Jfb2Zmc2V0CT0gVFdMNTAzMV9BQ0NJU1IyLAorCQkJLmltcl9vZmZzZXQJPSBUV0w1MDMxX0FDQ0lNUjIsCisJCX0sIH0sCisJfSwKK307CisKICN1bmRlZiBUV0w0MDMwX01PRFVMRV9LRVlQQURfS0VZUAogI3VuZGVmIFRXTDQwMzBfTU9EVUxFX0lOVF9QV1IKICN1bmRlZiBUV0w0MDMwX0lOVF9QV1JfRURSCkBAIC0xOTQsNyArMjk2LDcgQEAKIAkJLyogV2FpdCBmb3IgSVJRLCB0aGVuIHJlYWQgUElIIGlycSBzdGF0dXMgKGFsc28gYmxvY2tpbmcpICovCiAJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmaXJxX2V2ZW50KTsKIAotCQlyZXQgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BJSCwgJnBpaF9pc3IsCisJCXJldCA9IHR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QSUgsICZwaWhfaXNyLAogCQkJCQkgIFJFR19QSUhfSVNSX1AxKTsKIAkJaWYgKHJldCkgewogCQkJcHJfd2FybmluZygidHdsNDAzMDogSTJDIGVycm9yICVkIHJlYWRpbmcgUElIIElTUlxuIiwKQEAgLTI4NCwxMyArMzg2LDE3IEBACiAJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiBvdXIgbGluZSAqLwogCW1lbXNldChidWYsIDB4ZmYsIHNpemVvZiBidWYpOwogCXNpaCA9IHNpaF9tb2R1bGVzOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpaF9tb2R1bGVzKTsgaSsrLCBzaWgrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl9zaWhfbW9kdWxlczsgaSsrLCBzaWgrKykgewogCiAJCS8qIHNraXAgVVNCIC0tIGl0J3MgZnVua3kgKi8KIAkJaWYgKCFzaWgtPmJ5dGVzX2l4cikKIAkJCWNvbnRpbnVlOwogCi0JCXN0YXR1cyA9IHR3bDQwMzBfaTJjX3dyaXRlKHNpaC0+bW9kdWxlLCBidWYsCisJCS8qIE5vdCBhbGwgdGhlIFNJSCBtb2R1bGVzIHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJydXB0IGxpbmVzICovCisJCWlmIChzaWgtPmlycV9saW5lcyA8PSBsaW5lKQorCQkJY29udGludWU7CisKKwkJc3RhdHVzID0gdHdsX2kyY193cml0ZShzaWgtPm1vZHVsZSwgYnVmLAogCQkJCXNpaC0+bWFza1tsaW5lXS5pbXJfb2Zmc2V0LCBzaWgtPmJ5dGVzX2l4cik7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJcHJfZXJyKCJ0d2w0MDMwOiBlcnIgJWQgaW5pdGlhbGl6aW5nICVzICVzXG4iLApAQCAtMzA0LDcgKzQxMCw3IEBACiAJCSAqIEFuZCBmb3IgUFdSX0lOVCBpdCdzIG5vdCBkb2N1bWVudGVkLi4uCiAJCSAqLwogCQlpZiAoc2loLT5zZXRfY29yKSB7Ci0JCQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZV91OChzaWgtPm1vZHVsZSwKKwkJCXN0YXR1cyA9IHR3bF9pMmNfd3JpdGVfdTgoc2loLT5tb2R1bGUsCiAJCQkJCVRXTDQwMzBfU0lIX0NUUkxfQ09SX01BU0ssCiAJCQkJCXNpaC0+Y29udHJvbF9vZmZzZXQpOwogCQkJaWYgKHN0YXR1cyA8IDApCkBAIC0zMTQsNyArNDIwLDcgQEAKIAl9CiAKIAlzaWggPSBzaWhfbW9kdWxlczsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaWhfbW9kdWxlcyk7IGkrKywgc2loKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc2loX21vZHVsZXM7IGkrKywgc2loKyspIHsKIAkJdTggcnhidWZbNF07CiAJCWludCBqOwogCkBAIC0zMjIsMjAgKzQyOCwyNCBAQAogCQlpZiAoIXNpaC0+Ynl0ZXNfaXhyKQogCQkJY29udGludWU7CiAKKwkJLyogTm90IGFsbCB0aGUgU0lIIG1vZHVsZXMgc3VwcG9ydCBtdWx0aXBsZSBpbnRlcnJ1cHQgbGluZXMgKi8KKwkJaWYgKHNpaC0+aXJxX2xpbmVzIDw9IGxpbmUpCisJCQljb250aW51ZTsKKwogCQkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdCBzdGF0dXMuICBFaXRoZXIgdGhlIHJlYWQgd2FzCiAJCSAqIGVub3VnaCwgb3Igd2UgbmVlZCB0byB3cml0ZSB0aG9zZSBiaXRzLiAgUmVwZWF0LCBpbgogCQkgKiBjYXNlIGFuIElSUSBpcyBwZW5kaW5nIChQRU5ERElTPTApIC4uLiB0aGF0J3Mgbm90CiAJCSAqIHVuY29tbW9uIHdpdGggUFdSX0lOVC5QV1JPTi4KIAkJICovCiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCXN0YXR1cyA9IHR3bDQwMzBfaTJjX3JlYWQoc2loLT5tb2R1bGUsIHJ4YnVmLAorCQkJc3RhdHVzID0gdHdsX2kyY19yZWFkKHNpaC0+bW9kdWxlLCByeGJ1ZiwKIAkJCQlzaWgtPm1hc2tbbGluZV0uaXNyX29mZnNldCwgc2loLT5ieXRlc19peHIpOwogCQkJaWYgKHN0YXR1cyA8IDApCiAJCQkJcHJfZXJyKCJ0d2w0MDMwOiBlcnIgJWQgaW5pdGlhbGl6aW5nICVzICVzXG4iLAogCQkJCQlzdGF0dXMsIHNpaC0+bmFtZSwgIklTUiIpOwogCiAJCQlpZiAoIXNpaC0+c2V0X2NvcikKLQkJCQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZShzaWgtPm1vZHVsZSwgYnVmLAorCQkJCXN0YXR1cyA9IHR3bF9pMmNfd3JpdGUoc2loLT5tb2R1bGUsIGJ1ZiwKIAkJCQkJc2loLT5tYXNrW2xpbmVdLmlzcl9vZmZzZXQsCiAJCQkJCXNpaC0+Ynl0ZXNfaXhyKTsKIAkJCS8qIGVsc2UgQ09SPTEgbWVhbnMgcmVhZCBzdWZmaWNlZC4KQEAgLTQwNCw3ICs1MTQsNyBAQAogCQlyZXR1cm47CiAKIAkvKiB3cml0ZSB0aGUgd2hvbGUgbWFzayAuLi4gc2ltcGxlciB0aGFuIHN1YnNldHRpbmcgaXQgKi8KLQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZShzaWgtPm1vZHVsZSwgaW1yLmJ5dGVzLAorCXN0YXR1cyA9IHR3bF9pMmNfd3JpdGUoc2loLT5tb2R1bGUsIGltci5ieXRlcywKIAkJCXNpaC0+bWFza1tpcnFfbGluZV0uaW1yX29mZnNldCwgc2loLT5ieXRlc19peHIpOwogCWlmIChzdGF0dXMpCiAJCXByX2VycigidHdsNDAzMDogJXMsICVzIC0tPiAlZFxuIiwgX19mdW5jX18sCkBAIC00MzUsNyArNTQ1LDcgQEAKIAkgKiBhbnkgcHJvY2Vzc29yIG9uIHRoZSBvdGhlciBJUlEgbGluZSwgRURSIHJlZ2lzdGVycyBhcmUKIAkgKiBzaGFyZWQuCiAJICovCi0Jc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZChzaWgtPm1vZHVsZSwgYnl0ZXMgKyAxLAorCXN0YXR1cyA9IHR3bF9pMmNfcmVhZChzaWgtPm1vZHVsZSwgYnl0ZXMgKyAxLAogCQkJc2loLT5lZHJfb2Zmc2V0LCBzaWgtPmJ5dGVzX2Vkcik7CiAJaWYgKHN0YXR1cykgewogCQlwcl9lcnIoInR3bDQwMzA6ICVzLCAlcyAtLT4gJWRcbiIsIF9fZnVuY19fLApAQCAtNDY5LDcgKzU3OSw3IEBACiAJfQogCiAJLyogV3JpdGUgKi8KLQlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZShzaWgtPm1vZHVsZSwgYnl0ZXMsCisJc3RhdHVzID0gdHdsX2kyY193cml0ZShzaWgtPm1vZHVsZSwgYnl0ZXMsCiAJCQlzaWgtPmVkcl9vZmZzZXQsIHNpaC0+Ynl0ZXNfZWRyKTsKIAlpZiAoc3RhdHVzKQogCQlwcl9lcnIoInR3bDQwMzA6ICVzLCAlcyAtLT4gJWRcbiIsIF9fZnVuY19fLApAQCAtNTU0LDcgKzY2NCw3IEBACiAJLyogRklYTUUgbmVlZCByZXRyeS1vbi1lcnJvciAuLi4gKi8KIAogCWlzci53b3JkID0gMDsKLQlzdGF0dXMgPSB0d2w0MDMwX2kyY19yZWFkKHNpaC0+bW9kdWxlLCBpc3IuYnl0ZXMsCisJc3RhdHVzID0gdHdsX2kyY19yZWFkKHNpaC0+bW9kdWxlLCBpc3IuYnl0ZXMsCiAJCQlzaWgtPm1hc2tbaXJxX2xpbmVdLmlzcl9vZmZzZXQsIHNpaC0+Ynl0ZXNfaXhyKTsKIAogCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiBsZTMyX3RvX2NwdShpc3Iud29yZCk7CkBAIC02MTEsNyArNzIxLDcgQEAKIAogCS8qIG9ubHkgc3VwcG9ydCBtb2R1bGVzIHdpdGggc3RhbmRhcmQgY2xlYXItb24tcmVhZCBmb3Igbm93ICovCiAJZm9yIChzaWhfbW9kID0gMCwgc2loID0gc2loX21vZHVsZXM7Ci0JCQlzaWhfbW9kIDwgQVJSQVlfU0laRShzaWhfbW9kdWxlcyk7CisJCQlzaWhfbW9kIDwgbnJfc2loX21vZHVsZXM7CiAJCQlzaWhfbW9kKyssIHNpaCsrKSB7CiAJCWlmIChzaWgtPm1vZHVsZSA9PSBtb2R1bGUgJiYgc2loLT5zZXRfY29yKSB7CiAJCQlpZiAoIVdBUk4oKGlycV9iYXNlICsgc2loLT5iaXRzKSA+IE5SX0lSUVMsCkBAIC02NjgsNyArNzc4LDcgQEAKIC8qIEZJWE1FIHBhc3MgaW4gd2hpY2ggaW50ZXJydXB0IGxpbmUgd2UnbGwgdXNlIC4uLiAqLwogI2RlZmluZSB0d2xfaXJxX2xpbmUJMAogCi1pbnQgdHdsX2luaXRfaXJxKGludCBpcnFfbnVtLCB1bnNpZ25lZCBpcnFfYmFzZSwgdW5zaWduZWQgaXJxX2VuZCkKK2ludCB0d2w0MDMwX2luaXRfaXJxKGludCBpcnFfbnVtLCB1bnNpZ25lZCBpcnFfYmFzZSwgdW5zaWduZWQgaXJxX2VuZCkKIHsKIAlzdGF0aWMgc3RydWN0IGlycV9jaGlwCXR3bDQwMzBfaXJxX2NoaXA7CiAKQEAgLTcyOCw3ICs4MzgsOCBAQAogCQlnb3RvIGZhaWxfcnFpcnE7CiAJfQogCi0JdGFzayA9IGt0aHJlYWRfcnVuKHR3bDQwMzBfaXJxX3RocmVhZCwgKHZvaWQgKilpcnFfbnVtLCAidHdsNDAzMC1pcnEiKTsKKwl0YXNrID0ga3RocmVhZF9ydW4odHdsNDAzMF9pcnFfdGhyZWFkLCAodm9pZCAqKShsb25nKWlycV9udW0sCisJCQkJCQkJCSJ0d2w0MDMwLWlycSIpOwogCWlmIChJU19FUlIodGFzaykpIHsKIAkJcHJfZXJyKCJ0d2w0MDMwOiBjb3VsZCBub3QgY3JlYXRlIGlycSAlZCB0aHJlYWQhXG4iLCBpcnFfbnVtKTsKIAkJc3RhdHVzID0gUFRSX0VSUih0YXNrKTsKQEAgLTc0Nyw3ICs4NTgsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCB0d2xfZXhpdF9pcnEodm9pZCkKK2ludCB0d2w0MDMwX2V4aXRfaXJxKHZvaWQpCiB7CiAJLyogRklYTUUgdW5kbyB0d2xfaW5pdF9pcnEoKSAqLwogCWlmICh0d2w0MDMwX2lycV9iYXNlKSB7CkBAIC03NTYsMyArODY3LDE2IEBACiAJfQogCXJldHVybiAwOwogfQorCitpbnQgdHdsNDAzMF9pbml0X2NoaXBfaXJxKGNvbnN0IGNoYXIgKmNoaXApCit7CisJaWYgKCFzdHJjbXAoY2hpcCwgInR3bDUwMzEiKSkgeworCQlzaWhfbW9kdWxlcyA9IHNpaF9tb2R1bGVzX3R3bDUwMzE7CisJCW5yX3NpaF9tb2R1bGVzID0gQVJSQVlfU0laRShzaWhfbW9kdWxlc190d2w1MDMxKTsKKwl9IGVsc2UgeworCQlzaWhfbW9kdWxlcyA9IHNpaF9tb2R1bGVzX3R3bDQwMzA7CisJCW5yX3NpaF9tb2R1bGVzID0gQVJSQVlfU0laRShzaWhfbW9kdWxlc190d2w0MDMwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwppbmRleCBkNDIzZTBjLi4wODE1MjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTY3LDE5ICs2NywzNSBAQAogI2RlZmluZSBSX0tFWV8xCQkJMHhDMAogI2RlZmluZSBSX0tFWV8yCQkJMHgwQwogCi0vKiByZXNvdXJjZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIERFVkdST1VQX09GRlNFVAkJMAorLyogcmVzb3VyY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAgIDxSRVNPVVJDRT5fREVWX0dSUCAgIGF0IGFkZHJlc3MgJ24rMCcKKyAgIDxSRVNPVVJDRT5fVFlQRSAgICAgIGF0IGFkZHJlc3MgJ24rMScKKyAgIDxSRVNPVVJDRT5fUkVNQVAgICAgIGF0IGFkZHJlc3MgJ24rMicKKyAgIDxSRVNPVVJDRT5fREVESUNBVEVEIGF0IGFkZHJlc3MgJ24rMycKKyovCisjZGVmaW5lIERFVl9HUlBfT0ZGU0VUCQkwCiAjZGVmaW5lIFRZUEVfT0ZGU0VUCQkxCisjZGVmaW5lIFJFTUFQX09GRlNFVAkJMgorI2RlZmluZSBERURJQ0FURURfT0ZGU0VUCTMKIAotLyogQml0IHBvc2l0aW9ucyAqLwotI2RlZmluZSBERVZHUk9VUF9TSElGVAkJNQotI2RlZmluZSBERVZHUk9VUF9NQVNLCQkoNyA8PCBERVZHUk9VUF9TSElGVCkKKy8qIEJpdCBwb3NpdGlvbnMgaW4gdGhlIHJlZ2lzdGVycyAqLworCisvKiA8UkVTT1VSQ0U+X0RFVl9HUlAgKi8KKyNkZWZpbmUgREVWX0dSUF9TSElGVAkJNQorI2RlZmluZSBERVZfR1JQX01BU0sJCSg3IDw8IERFVl9HUlBfU0hJRlQpCisKKy8qIDxSRVNPVVJDRT5fVFlQRSAqLwogI2RlZmluZSBUWVBFX1NISUZUCQkwCiAjZGVmaW5lIFRZUEVfTUFTSwkJKDcgPDwgVFlQRV9TSElGVCkKICNkZWZpbmUgVFlQRTJfU0hJRlQJCTMKICNkZWZpbmUgVFlQRTJfTUFTSwkJKDMgPDwgVFlQRTJfU0hJRlQpCiAKKy8qIDxSRVNPVVJDRT5fUkVNQVAgKi8KKyNkZWZpbmUgU0xFRVBfU1RBVEVfU0hJRlQJMAorI2RlZmluZSBTTEVFUF9TVEFURV9NQVNLCSgweGYgPDwgU0xFRVBfU1RBVEVfU0hJRlQpCisjZGVmaW5lIE9GRl9TVEFURV9TSElGVAkJNAorI2RlZmluZSBPRkZfU1RBVEVfTUFTSwkJKDB4ZiA8PCBPRkZfU1RBVEVfU0hJRlQpCisKIHN0YXRpYyB1OCByZXNfY29uZmlnX2FkZHJzW10gPSB7CiAJW1JFU19WQVVYMV0JPSAweDE3LAogCVtSRVNfVkFVWDJdCT0gMHgxYiwKQEAgLTExNSwxMSArMTMxLDExIEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgYWRkcmVzcywKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgYWRkcmVzcywKIAkJCQlSX01FTU9SWV9BRERSRVNTKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQllcnIgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGJ5dGUsCisJZXJyID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGJ5dGUsCiAJCQkJUl9NRU1PUllfREFUQSk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTE3NiwxOCArMTkyLDE4IEBACiAJdTggZGF0YTsKIAogCS8qIFNldCBTTEVFUCB0byBBQ1RJVkUgU0VRIGFkZHJlc3MgZm9yIFAzICovCi0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBhZGRyZXNzLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBhZGRyZXNzLAogCQkJCVJfU0VRX0FERF9TMkEzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAogCS8qIFAzIExWTF9XQUtFVVAgc2hvdWxkIGJlIG9uIExFVkVMICovCi0JZXJyID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsICZkYXRhLAorCWVyciA9IHR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsICZkYXRhLAogCQkJCVJfUDNfU1dfRVZFTlRTKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAlkYXRhIHw9IExWTF9XQUtFVVA7Ci0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhLAogCQkJCVJfUDNfU1dfRVZFTlRTKTsKIG91dDoKIAlpZiAoZXJyKQpAQCAtMjAxLDQyICsyMTcsNDIgQEAKIAl1OCBkYXRhOwogCiAJLyogU2V0IFNMRUVQIHRvIEFDVElWRSBTRVEgYWRkcmVzcyBmb3IgUDEgYW5kIFAyICovCi0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBhZGRyZXNzLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBhZGRyZXNzLAogCQkJCVJfU0VRX0FERF9TMkExMik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAkvKiBQMS9QMiBMVkxfV0FLRVVQIHNob3VsZCBiZSBvbiBMRVZFTCAqLwotCWVyciA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAmZGF0YSwKKwllcnIgPSB0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAmZGF0YSwKIAkJCQlSX1AxX1NXX0VWRU5UUyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAlkYXRhIHw9IExWTF9XQUtFVVA7Ci0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhLAogCQkJCVJfUDFfU1dfRVZFTlRTKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWVyciA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAmZGF0YSwKKwllcnIgPSB0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAmZGF0YSwKIAkJCQlSX1AyX1NXX0VWRU5UUyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAlkYXRhIHw9IExWTF9XQUtFVVA7Ci0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhLAogCQkJCVJfUDJfU1dfRVZFTlRTKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAogCWlmIChtYWNoaW5lX2lzX29tYXBfMzQzMHNkcCgpIHx8IG1hY2hpbmVfaXNfb21hcF9sZHAoKSkgewogCQkvKiBEaXNhYmxpbmcgQUMgY2hhcmdlciBlZmZlY3Qgb24gc2xlZXAtYWN0aXZlIHRyYW5zaXRpb25zICovCi0JCWVyciA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAmZGF0YSwKKwkJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJmRhdGEsCiAJCQkJCVJfQ0ZHX1AxX1RSQU5TSVRJT04pOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWRhdGEgJj0gfigxPDwxKTsKLQkJZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBkYXRhICwKKwkJZXJyID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGRhdGEgLAogCQkJCQlSX0NGR19QMV9UUkFOU0lUSU9OKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwpAQCAtMjU0LDcgKzI3MCw3IEBACiAJaW50IGVycjsKIAogCS8qIFNldCBBQ1RJVkUgdG8gU0xFRVAgU0VRIGFkZHJlc3MgaW4gVDIgbWVtb3J5Ki8KLQllcnIgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGFkZHJlc3MsCisJZXJyID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGFkZHJlc3MsCiAJCQkJUl9TRVFfQUREX0EyUyk7CiAKIAlpZiAoZXJyKQpAQCAtMjY5LDQxICsyODUsNDEgQEAKIAl1OCByZF9kYXRhOwogCiAJLyogU2V0IFdBUk0gUkVTRVQgU0VRIGFkZHJlc3MgZm9yIFAxICovCi0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBhZGRyZXNzLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBhZGRyZXNzLAogCQkJCVJfU0VRX0FERF9XQVJNKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAogCS8qIFAxL1AyL1AzIGVuYWJsZSBXQVJNUkVTRVQgKi8KLQllcnIgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnJkX2RhdGEsCisJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnJkX2RhdGEsCiAJCQkJUl9QMV9TV19FVkVOVFMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJcmRfZGF0YSB8PSBFTkFCTEVfV0FSTVJFU0VUOwotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgcmRfZGF0YSwKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgcmRfZGF0YSwKIAkJCQlSX1AxX1NXX0VWRU5UUyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnJkX2RhdGEsCisJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnJkX2RhdGEsCiAJCQkJUl9QMl9TV19FVkVOVFMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJcmRfZGF0YSB8PSBFTkFCTEVfV0FSTVJFU0VUOwotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgcmRfZGF0YSwKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgcmRfZGF0YSwKIAkJCQlSX1AyX1NXX0VWRU5UUyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnJkX2RhdGEsCisJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnJkX2RhdGEsCiAJCQkJUl9QM19TV19FVkVOVFMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJcmRfZGF0YSB8PSBFTkFCTEVfV0FSTVJFU0VUOwotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgcmRfZGF0YSwKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgcmRfZGF0YSwKIAkJCQlSX1AzX1NXX0VWRU5UUyk7CiBvdXQ6CiAJaWYgKGVycikKQEAgLTMxNyw2ICszMzMsNyBAQAogCWludCBlcnI7CiAJdTggdHlwZTsKIAl1OCBncnA7CisJdTggcmVtYXA7CiAKIAlpZiAocmNvbmZpZy0+cmVzb3VyY2UgPiBUT1RBTF9SRVNPVVJDRVMpIHsKIAkJcHJfZXJyKCJUV0w0MDMwIFJlc291cmNlICVkIGRvZXMgbm90IGV4aXN0XG4iLApAQCAtMzI3LDE5ICszNDQsMTkgQEAKIAlyY29uZmlnX2FkZHIgPSByZXNfY29uZmlnX2FkZHJzW3Jjb25maWctPnJlc291cmNlXTsKIAogCS8qIFNldCByZXNvdXJjZSBncm91cCAqLwotCWVyciA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsICZncnAsCi0JCQkJcmNvbmZpZ19hZGRyICsgREVWR1JPVVBfT0ZGU0VUKTsKKwllcnIgPSB0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsICZncnAsCisJCQkgICAgICByY29uZmlnX2FkZHIgKyBERVZfR1JQX09GRlNFVCk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoIlRXTDQwMzAgUmVzb3VyY2UgJWQgZ3JvdXAgY291bGQgbm90IGJlIHJlYWRcbiIsCiAJCQlyY29uZmlnLT5yZXNvdXJjZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKHJjb25maWctPmRldmdyb3VwID49IDApIHsKLQkJZ3JwICY9IH5ERVZHUk9VUF9NQVNLOwotCQlncnAgfD0gcmNvbmZpZy0+ZGV2Z3JvdXAgPDwgREVWR1JPVVBfU0hJRlQ7Ci0JCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAotCQkJCQlncnAsIHJjb25maWdfYWRkciArIERFVkdST1VQX09GRlNFVCk7CisJaWYgKHJjb25maWctPmRldmdyb3VwICE9IFRXTDQwMzBfUkVTQ09ORklHX1VOREVGKSB7CisJCWdycCAmPSB+REVWX0dSUF9NQVNLOworCQlncnAgfD0gcmNvbmZpZy0+ZGV2Z3JvdXAgPDwgREVWX0dSUF9TSElGVDsKKwkJZXJyID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKKwkJCQkgICAgICAgZ3JwLCByY29uZmlnX2FkZHIgKyBERVZfR1JQX09GRlNFVCk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcl9lcnIoIlRXTDQwMzAgZmFpbGVkIHRvIHByb2dyYW0gZGV2Z3JvdXBcbiIpOwogCQkJcmV0dXJuIGVycjsKQEAgLTM0Nyw3ICszNjQsNyBAQAogCX0KIAogCS8qIFNldCByZXNvdXJjZSB0eXBlcyAqLwotCWVyciA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsICZ0eXBlLAorCWVyciA9IHR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgJnR5cGUsCiAJCQkJcmNvbmZpZ19hZGRyICsgVFlQRV9PRkZTRVQpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByX2VycigiVFdMNDAzMCBSZXNvdXJjZSAlZCB0eXBlIGNvdWxkIG5vdCBiZSByZWFkXG4iLApAQCAtMzU1LDIzICszNzIsNTAgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAocmNvbmZpZy0+dHlwZSA+PSAwKSB7CisJaWYgKHJjb25maWctPnR5cGUgIT0gVFdMNDAzMF9SRVNDT05GSUdfVU5ERUYpIHsKIAkJdHlwZSAmPSB+VFlQRV9NQVNLOwogCQl0eXBlIHw9IHJjb25maWctPnR5cGUgPDwgVFlQRV9TSElGVDsKIAl9CiAKLQlpZiAocmNvbmZpZy0+dHlwZTIgPj0gMCkgeworCWlmIChyY29uZmlnLT50eXBlMiAhPSBUV0w0MDMwX1JFU0NPTkZJR19VTkRFRikgewogCQl0eXBlICY9IH5UWVBFMl9NQVNLOwogCQl0eXBlIHw9IHJjb25maWctPnR5cGUyIDw8IFRZUEUyX1NISUZUOwogCX0KIAotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsCiAJCQkJdHlwZSwgcmNvbmZpZ19hZGRyICsgVFlQRV9PRkZTRVQpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByX2VycigiVFdMNDAzMCBmYWlsZWQgdG8gcHJvZ3JhbSByZXNvdXJjZSB0eXBlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBTZXQgcmVtYXAgc3RhdGVzICovCisJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAmcmVtYXAsCisJCQkgICAgICByY29uZmlnX2FkZHIgKyBSRU1BUF9PRkZTRVQpOworCWlmIChlcnIgPCAwKSB7CisJCXByX2VycigiVFdMNDAzMCBSZXNvdXJjZSAlZCByZW1hcCBjb3VsZCBub3QgYmUgcmVhZFxuIiwKKwkJCXJjb25maWctPnJlc291cmNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAocmNvbmZpZy0+cmVtYXBfb2ZmICE9IFRXTDQwMzBfUkVTQ09ORklHX1VOREVGKSB7CisJCXJlbWFwICY9IH5PRkZfU1RBVEVfTUFTSzsKKwkJcmVtYXAgfD0gcmNvbmZpZy0+cmVtYXBfb2ZmIDw8IE9GRl9TVEFURV9TSElGVDsKKwl9CisKKwlpZiAocmNvbmZpZy0+cmVtYXBfc2xlZXAgIT0gVFdMNDAzMF9SRVNDT05GSUdfVU5ERUYpIHsKKwkJcmVtYXAgJj0gflNMRUVQX1NUQVRFX01BU0s7CisJCXJlbWFwIHw9IHJjb25maWctPnJlbWFwX29mZiA8PCBTTEVFUF9TVEFURV9TSElGVDsKKwl9CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCQkJICAgICAgIHJlbWFwLAorCQkJICAgICAgIHJjb25maWdfYWRkciArIFJFTUFQX09GRlNFVCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJfZXJyKCJUV0w0MDMwIGZhaWxlZCB0byBwcm9ncmFtIHJlbWFwXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI0LDEyICs0NjgsMTIgQEAKIAlzdHJ1Y3QgdHdsNDAzMF9yZXNjb25maWcgKnJlc2NvbmZpZzsKIAl1OCBhZGRyZXNzID0gdHdsNDAzMF9zdGFydF9zY3JpcHRfYWRkcmVzczsKIAotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMSwKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMSwKIAkJCQlSX1BST1RFQ1RfS0VZKTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9jazsKIAotCWVyciA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMiwKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMiwKIAkJCQlSX1BST1RFQ1RfS0VZKTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9jazsKQEAgLTQ1Miw3ICs0OTYsNyBAQAogCQl9CiAJfQogCi0JZXJyID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAwLCBSX1BST1RFQ1RfS0VZKTsKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUl9QUk9URUNUX0tFWSk7CiAJaWYgKGVycikKIAkJcHJfZXJyKCJUV0w0MDMwIFVuYWJsZSB0byByZWxvY2sgcmVnaXN0ZXJzXG4iKTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w2MDMwLWlycS5jIGIvZHJpdmVycy9tZmQvdHdsNjAzMC1pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGJmMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHdsNjAzMC1pcnEuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIHR3bDYwMzAtaXJxLmMgLSBUV0w2MDMwIGlycSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBNb2RpZmljYXRpb25zIHRvIGRlZmVyIGludGVycnVwdCBoYW5kbGluZyB0byBhIGtlcm5lbCB0aHJlYWQ6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEJhc2VkIG9uIHRsdjMyMGFpYzIzLmM6CisgKiBDb3B5cmlnaHQgKGMpIGJ5IEthaSBTdmFobiA8a2FpLnN2YWhuQG5va2lhLmNvbT4KKyAqCisgKiBDb2RlIGNsZWFudXAgYW5kIG1vZGlmaWNhdGlvbnMgdG8gSVJRIGhhbmRsZXIuCisgKiBieSBzeWVkIGtoYXNpbSA8eDBraGFzaW1AdGkuY29tPgorICoKKyAqIFRXTDYwMzAgc3BlY2lmaWMgY29kZSBhbmQgSVJRIGhhbmRsaW5nIGNoYW5nZXMgYnkKKyAqIEphZ2FkZWVzaCBCaGFza2FyIFBha2FyYXZvb3IgPGotcGFrYXJhdm9vckB0aS5jb20+CisgKiBCYWxhamkgVCBLIDxiYWxhaml0a0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgorCisvKgorICogVFdMNjAzMCAodW5saWtlIGl0cyBwcmVkZWNlc3NvcnMsIHdoaWNoIGhhZCB0d28gbGV2ZWwgaW50ZXJydXB0IGhhbmRsaW5nKQorICogdGhyZWUgaW50ZXJydXB0IHJlZ2lzdGVycyBJTlRfU1RTX0EsIElOVF9TVFNfQiBhbmQgSU5UX1NUU19DLgorICogSXQgZXhwb3NlcyBzdGF0dXMgYml0cyBzYXlpbmcgd2hvIGhhcyByYWlzZWQgYW4gaW50ZXJydXB0LiBUaGVyZSBhcmUKKyAqIHRocmVlIG1hc2sgcmVnaXN0ZXJzIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlc2Ugc3RhdHVzIHJlZ2lzdGVycywgdGhhdAorICogZW5hYmxlcy9kaXNhYmxlcyB0aGVzZSBpbnRlcnJ1cHRzLgorICoKKyAqIFdlIHNldCB1cCBJUlFzIHN0YXJ0aW5nIGF0IGEgcGxhdGZvcm0tc3BlY2lmaWVkIGJhc2UuIEFuIGludGVycnVwdCBtYXAgdGFibGUsCisgKiBzcGVjaWZpZXMgbWFwcGluZyBiZXR3ZWVuIGludGVycnVwdCBudW1iZXIgYW5kIHRoZSBhc3NvY2lhdGVkIG1vZHVsZS4KKyAqCisgKi8KKworc3RhdGljIGludCB0d2w2MDMwX2ludGVycnVwdF9tYXBwaW5nWzI0XSA9IHsKKwlQV1JfSU5UUl9PRkZTRVQsCS8qIEJpdCAwCVBXUk9OCQkJKi8KKwlQV1JfSU5UUl9PRkZTRVQsCS8qIEJpdCAxCVJQV1JPTgkJCSovCisJUFdSX0lOVFJfT0ZGU0VULAkvKiBCaXQgMglCQVRfVkxPVwkJKi8KKwlSVENfSU5UUl9PRkZTRVQsCS8qIEJpdCAzCVJUQ19BTEFSTQkJKi8KKwlSVENfSU5UUl9PRkZTRVQsCS8qIEJpdCA0CVJUQ19QRVJJT0QJCSovCisJSE9URElFX0lOVFJfT0ZGU0VULAkvKiBCaXQgNQlIT1RfRElFCQkJKi8KKwlTTVBTTERPX0lOVFJfT0ZGU0VULAkvKiBCaXQgNglWWFhYX1NIT1JUCQkqLworCVNNUFNMRE9fSU5UUl9PRkZTRVQsCS8qIEJpdCA3CVZNTUNfU0hPUlQJCSovCisKKwlTTVBTTERPX0lOVFJfT0ZGU0VULAkvKiBCaXQgOAlWVVNJTV9TSE9SVAkJKi8KKwlCQVRERVRFQ1RfSU5UUl9PRkZTRVQsCS8qIEJpdCA5CUJBVAkJCSovCisJU0lNREVURUNUX0lOVFJfT0ZGU0VULAkvKiBCaXQgMTAJU0lNCQkJKi8KKwlNTUNERVRFQ1RfSU5UUl9PRkZTRVQsCS8qIEJpdCAxMQlNTUMJCQkqLworCVJTVl9JTlRSX09GRlNFVCwgIAkvKiBCaXQgMTIJUmVzZXJ2ZWQJCSovCisJTUFEQ19JTlRSX09GRlNFVCwJLyogQml0IDEzCUdQQURDX1JUX0VPQwkJKi8KKwlNQURDX0lOVFJfT0ZGU0VULAkvKiBCaXQgMTQJR1BBRENfU1dfRU9DCQkqLworCUdBU0dBVUdFX0lOVFJfT0ZGU0VULAkvKiBCaXQgMTUJQ0NfQVVUT0NBTAkJKi8KKworCVVTQk9UR19JTlRSX09GRlNFVCwJLyogQml0IDE2CUlEX1dLVVAJCQkqLworCVVTQk9UR19JTlRSX09GRlNFVCwJLyogQml0IDE3CVZCVVNfV0tVUAkJKi8KKwlVU0JPVEdfSU5UUl9PRkZTRVQsCS8qIEJpdCAxOAlJRAkJCSovCisJVVNCT1RHX0lOVFJfT0ZGU0VULAkvKiBCaXQgMTkJVkJVUwkJCSovCisJQ0hBUkdFUl9JTlRSX09GRlNFVCwJLyogQml0IDIwCUNIUkdfQ1RSTAkJKi8KKwlDSEFSR0VSX0lOVFJfT0ZGU0VULAkvKiBCaXQgMjEJRVhUX0NIUkcJCSovCisJQ0hBUkdFUl9JTlRSX09GRlNFVCwJLyogQml0IDIyCUlOVF9DSFJHCQkqLworCVJTVl9JTlRSX09GRlNFVCwJLyogQml0IDIzCVJlc2VydmVkCQkqLworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCB0d2w2MDMwX2lycV9iYXNlOworCitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gaXJxX2V2ZW50OworCisvKgorICogVGhpcyB0aHJlYWQgcHJvY2Vzc2VzIGludGVycnVwdHMgcmVwb3J0ZWQgYnkgdGhlIFByaW1hcnkgSW50ZXJydXB0IEhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQgdHdsNjAzMF9pcnFfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJbG9uZyBpcnEgPSAobG9uZylkYXRhOworCXN0YXRpYyB1bnNpZ25lZCBpMmNfZXJyb3JzOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfaTJjX2Vycm9ycyA9IDEwMDsKKwlpbnQgcmV0OworCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgaTsKKwkJdW5pb24geworCQl1OCBieXRlc1s0XTsKKwkJdTMyIGludF9zdHM7CisJCX0gc3RzOworCisJCS8qIFdhaXQgZm9yIElSUSwgdGhlbiByZWFkIFBJSCBpcnEgc3RhdHVzIChhbHNvIGJsb2NraW5nKSAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmlycV9ldmVudCk7CisKKwkJLyogcmVhZCBJTlRfU1RTX0EsIEIgYW5kIEMgaW4gb25lIHNob3QgdXNpbmcgYSBidXJzdCByZWFkICovCisJCXJldCA9IHR3bF9pMmNfcmVhZChUV0xfTU9EVUxFX1BJSCwgc3RzLmJ5dGVzLAorCQkJCVJFR19JTlRfU1RTX0EsIDMpOworCQlpZiAocmV0KSB7CisJCQlwcl93YXJuaW5nKCJ0d2w2MDMwOiBJMkMgZXJyb3IgJWQgcmVhZGluZyBQSUggSVNSXG4iLAorCQkJCQlyZXQpOworCQkJaWYgKCsraTJjX2Vycm9ycyA+PSBtYXhfaTJjX2Vycm9ycykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiTWF4aW11bSBJMkMgZXJyb3IgY291bnQiCisJCQkJCQkiIGV4Y2VlZGVkLiAgVGVybWluYXRpbmcgJXMuXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQkJY29tcGxldGUoJmlycV9ldmVudCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKworCQlzdHMuYnl0ZXNbM10gPSAwOyAvKiBPbmx5IDI0IGJpdHMgYXJlIHZhbGlkKi8KKworCQlmb3IgKGkgPSAwOyBzdHMuaW50X3N0czsgc3RzLmludF9zdHMgPj49IDEsIGkrKykgeworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCWlmIChzdHMuaW50X3N0cyAmIDB4MSkgeworCQkJCWludCBtb2R1bGVfaXJxID0gdHdsNjAzMF9pcnFfYmFzZSArCisJCQkJCXR3bDYwMzBfaW50ZXJydXB0X21hcHBpbmdbaV07CisJCQkJc3RydWN0IGlycV9kZXNjICpkID0gaXJxX3RvX2Rlc2MobW9kdWxlX2lycSk7CisKKwkJCQlpZiAoIWQpIHsKKwkJCQkJcHJfZXJyKCJ0d2w2MDMwOiBJbnZhbGlkIFNJSCBJUlE6ICVkXG4iLAorCQkJCQkgICAgICAgbW9kdWxlX2lycSk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJCS8qIFRoZXNlIGNhbid0IGJlIG1hc2tlZCAuLi4gYWx3YXlzIHdhcm4KKwkJCQkgKiBpZiB3ZSBnZXQgYW55IHN1cnByaXNlcy4KKwkJCQkgKi8KKwkJCQlpZiAoZC0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKQorCQkJCQlub3RlX2ludGVycnVwdChtb2R1bGVfaXJxLCBkLAorCQkJCQkJCUlSUV9OT05FKTsKKwkJCQllbHNlCisJCQkJCWQtPmhhbmRsZV9pcnEobW9kdWxlX2lycSwgZCk7CisKKwkJCX0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQl9CisJCXJldCA9IHR3bF9pMmNfd3JpdGUoVFdMX01PRFVMRV9QSUgsIHN0cy5ieXRlcywKKwkJCQlSRUdfSU5UX1NUU19BLCAzKTsgLyogY2xlYXIgSU5UX1NUU19BICovCisJCWlmIChyZXQpCisJCQlwcl93YXJuaW5nKCJ0d2w2MDMwOiBJMkMgZXJyb3IgaW4gY2xlYXJpbmcgUElIIElTUlxuIik7CisKKwkJZW5hYmxlX2lycShpcnEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogaGFuZGxlX3R3bDYwMzBfaW50KCkgaXMgdGhlIGRlc2MtPmhhbmRsZSBtZXRob2QgZm9yIHRoZSB0d2w2MDMwIGludGVycnVwdC4KKyAqIFRoaXMgaXMgYSBjaGFpbmVkIGludGVycnVwdCwgc28gdGhlcmUgaXMgbm8gZGVzYy0+YWN0aW9uIG1ldGhvZCBmb3IgaXQuCisgKiBOb3cgd2UgbmVlZCB0byBxdWVyeSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW4gdGhlIHR3bDYwMzAgdG8gZGV0ZXJtaW5lCisgKiB3aGljaCBtb2R1bGUgaXMgZ2VuZXJhdGluZyB0aGUgaW50ZXJydXB0IHJlcXVlc3QuICBIb3dldmVyLCB3ZSBjYW4ndCBkbyBpMmMKKyAqIHRyYW5zYWN0aW9ucyBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgbXVzdCBkZWZlciB0aGF0IHdvcmsgdG8gYSBrZXJuZWwKKyAqIHRocmVhZC4gIEFsbCB3ZSBkbyBoZXJlIGlzIGFja25vd2xlZGdlIGFuZCBtYXNrIHRoZSBpbnRlcnJ1cHQgYW5kIHdha2V1cAorICogdGhlIGtlcm5lbCB0aHJlYWQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfdHdsNjAzMF9waWgoaW50IGlycSwgdm9pZCAqZGV2aWQpCit7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJY29tcGxldGUoZGV2aWQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2lycShpbnQgaXJxKQoreworI2lmZGVmIENPTkZJR19BUk0KKwkvKiBBUk0gcmVxdWlyZXMgYW4gZXh0cmEgc3RlcCB0byBjbGVhciBJUlFfTk9SRVFVRVNULCB3aGljaCBpdAorCSAqIHNldHMgb24gYmVoYWxmIG9mIGV2ZXJ5IGlycV9jaGlwLiAgQWxzbyBzZXRzIElSUV9OT1BST0JFLgorCSAqLworCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKyNlbHNlCisJLyogc2FtZSBlZmZlY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyAqLworCXNldF9pcnFfbm9wcm9iZShpcnEpOworI2VuZGlmCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCB0d2w2MDMwX2lycV9uZXh0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHR3bDYwMzBfaW50ZXJydXB0X3VubWFzayh1OCBiaXRfbWFzaywgdTggb2Zmc2V0KQoreworCWludCByZXQ7CisJdTggdW5tYXNrX3ZhbHVlOworCXJldCA9IHR3bF9pMmNfcmVhZF91OChUV0xfTU9EVUxFX1BJSCwgJnVubWFza192YWx1ZSwKKwkJCVJFR19JTlRfU1RTX0EgKyBvZmZzZXQpOworCXVubWFza192YWx1ZSAmPSAofihiaXRfbWFzaykpOworCXJldCB8PSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUElILCB1bm1hc2tfdmFsdWUsCisJCQlSRUdfSU5UX1NUU19BICsgb2Zmc2V0KTsgLyogdW5tYXNrIElOVF9NU0tfQS9CL0MgKi8KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w2MDMwX2ludGVycnVwdF91bm1hc2spOworCitpbnQgdHdsNjAzMF9pbnRlcnJ1cHRfbWFzayh1OCBiaXRfbWFzaywgdTggb2Zmc2V0KQoreworCWludCByZXQ7CisJdTggbWFza192YWx1ZTsKKwlyZXQgPSB0d2xfaTJjX3JlYWRfdTgoVFdMX01PRFVMRV9QSUgsICZtYXNrX3ZhbHVlLAorCQkJUkVHX0lOVF9TVFNfQSArIG9mZnNldCk7CisJbWFza192YWx1ZSB8PSAoYml0X21hc2spOworCXJldCB8PSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUElILCBtYXNrX3ZhbHVlLAorCQkJUkVHX0lOVF9TVFNfQSArIG9mZnNldCk7IC8qIG1hc2sgSU5UX01TS19BL0IvQyAqLworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHR3bDYwMzBfaW50ZXJydXB0X21hc2spOworCitpbnQgdHdsNjAzMF9pbml0X2lycShpbnQgaXJxX251bSwgdW5zaWduZWQgaXJxX2Jhc2UsIHVuc2lnbmVkIGlycV9lbmQpCit7CisKKwlpbnQJc3RhdHVzID0gMDsKKwlpbnQJaTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CisJaW50IHJldDsKKwl1OCBtYXNrWzRdOworCisJc3RhdGljIHN0cnVjdCBpcnFfY2hpcAl0d2w2MDMwX2lycV9jaGlwOworCW1hc2tbMV0gPSAweEZGOworCW1hc2tbMl0gPSAweEZGOworCW1hc2tbM10gPSAweEZGOworCXJldCA9IHR3bF9pMmNfd3JpdGUoVFdMX01PRFVMRV9QSUgsICZtYXNrWzBdLAorCQkJUkVHX0lOVF9NU0tfTElORV9BLCAzKTsgLyogTUFTSyBBTEwgSU5UIExJTkVTICovCisJcmV0ID0gdHdsX2kyY193cml0ZShUV0xfTU9EVUxFX1BJSCwgJm1hc2tbMF0sCisJCQlSRUdfSU5UX01TS19TVFNfQSwgMyk7IC8qIE1BU0sgQUxMIElOVCBTVFMgKi8KKwlyZXQgPSB0d2xfaTJjX3dyaXRlKFRXTF9NT0RVTEVfUElILCAmbWFza1swXSwKKwkJCVJFR19JTlRfU1RTX0EsIDMpOyAvKiBjbGVhciBJTlRfU1RTX0EsQixDICovCisKKwl0d2w2MDMwX2lycV9iYXNlID0gaXJxX2Jhc2U7CisKKwkvKiBpbnN0YWxsIGFuIGlycSBoYW5kbGVyIGZvciBlYWNoIG9mIHRoZSBtb2R1bGVzOworCSAqIGNsb25lIGR1bW15IGlycV9jaGlwIHNpbmNlIFBJSCBjYW4ndCAqZG8qIGFueXRoaW5nCisJICovCisJdHdsNjAzMF9pcnFfY2hpcCA9IGR1bW15X2lycV9jaGlwOworCXR3bDYwMzBfaXJxX2NoaXAubmFtZSA9ICJ0d2w2MDMwIjsKKwl0d2w2MDMwX2lycV9jaGlwLnNldF90eXBlID0gTlVMTDsKKworCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2VuZDsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmdHdsNjAzMF9pcnFfY2hpcCwKKwkJCQloYW5kbGVfc2ltcGxlX2lycSk7CisJCWFjdGl2YXRlX2lycShpKTsKKwl9CisKKwl0d2w2MDMwX2lycV9uZXh0ID0gaTsKKwlwcl9pbmZvKCJ0d2w2MDMwOiAlcyAoaXJxICVkKSBjaGFpbmluZyBJUlFzICVkLi4lZFxuIiwgIlBJSCIsCisJCQlpcnFfbnVtLCBpcnFfYmFzZSwgdHdsNjAzMF9pcnFfbmV4dCAtIDEpOworCisJLyogaW5zdGFsbCBhbiBpcnEgaGFuZGxlciB0byBkZW11bHRpcGxleCB0aGUgVFdMNjAzMCBpbnRlcnJ1cHQgKi8KKwlpbml0X2NvbXBsZXRpb24oJmlycV9ldmVudCk7CisJdGFzayA9IGt0aHJlYWRfcnVuKHR3bDYwMzBfaXJxX3RocmVhZCwgKHZvaWQgKilpcnFfbnVtLCAidHdsNjAzMC1pcnEiKTsKKwlpZiAoSVNfRVJSKHRhc2spKSB7CisJCXByX2VycigidHdsNjAzMDogY291bGQgbm90IGNyZWF0ZSBpcnEgJWQgdGhyZWFkIVxuIiwgaXJxX251bSk7CisJCXN0YXR1cyA9IFBUUl9FUlIodGFzayk7CisJCWdvdG8gZmFpbF9rdGhyZWFkOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycV9udW0sIGhhbmRsZV90d2w2MDMwX3BpaCwgSVJRRl9ESVNBQkxFRCwKKwkJCQkiVFdMNjAzMC1QSUgiLCAmaXJxX2V2ZW50KTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcl9lcnIoInR3bDYwMzA6IGNvdWxkIG5vdCBjbGFpbSBpcnElZDogJWRcbiIsIGlycV9udW0sIHN0YXR1cyk7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCXJldHVybiBzdGF0dXM7CitmYWlsX2lycToKKwlmcmVlX2lycShpcnFfbnVtLCAmaXJxX2V2ZW50KTsKKworZmFpbF9rdGhyZWFkOgorCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2VuZDsgaSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHR3bDYwMzBfZXhpdF9pcnEodm9pZCkKK3sKKworCWlmICh0d2w2MDMwX2lycV9iYXNlKSB7CisJCXByX2VycigidHdsNjAzMDogY2FuJ3QgeWV0IGNsZWFuIHVwIElSUXM/XG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYwppbmRleCA3ZjI3NTc2Li40YjIwMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1jb3JlLmMKQEAgLTkwLDkgKzkwLDEwIEBACiBFWFBPUlRfU1lNQk9MX0dQTCh3bTgzMXhfaXNpbmt2X3ZhbHVlcyk7CiAKIGVudW0gd204MzF4X3BhcmVudCB7Ci0JV004MzEwID0gMCwKLQlXTTgzMTEgPSAxLAotCVdNODMxMiA9IDIsCisJV004MzEwID0gMHg4MzEwLAorCVdNODMxMSA9IDB4ODMxMSwKKwlXTTgzMTIgPSAweDgzMTIsCisJV004MzIwID0gMHg4MzIwLAogfTsKIAogc3RhdGljIGludCB3bTgzMXhfcmVnX2xvY2tlZChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIHVuc2lnbmVkIHNob3J0IHJlZykKQEAgLTQ3OCw2ICs0NzksMjAgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3bTgzMjBfZGNkYzRfYnVja19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IFdNODMxWF9EQzRfQ09OVFJPTCwKKwkJLmVuZCAgID0gV004MzJYX0RDNF9TTEVFUF9DT05UUk9MLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgPSAiVVYiLAorCQkuc3RhcnQgPSBXTTgzMVhfSVJRX1VWX0RDNCwKKwkJLmVuZCAgID0gV004MzFYX0lSUV9VVl9EQzQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHdtODMxeF9ncGlvX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gV004MzFYX0lSUV9HUElPXzEsCkBAIC03OTQsNiArODA5LDkgQEAKIAogc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB3bTgzMTBfZGV2c1tdID0gewogCXsKKwkJLm5hbWUgPSAid204MzF4LWJhY2t1cCIsCisJfSwKKwl7CiAJCS5uYW1lID0gIndtODMxeC1idWNrdiIsCiAJCS5pZCA9IDEsCiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfZGNkYzFfcmVzb3VyY2VzKSwKQEAgLTk0Nyw2ICs5NjUsOSBAQAogCiBzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHdtODMxMV9kZXZzW10gPSB7CiAJeworCQkubmFtZSA9ICJ3bTgzMXgtYmFja3VwIiwKKwl9LAorCXsKIAkJLm5hbWUgPSAid204MzF4LWJ1Y2t2IiwKIAkJLmlkID0gMSwKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9kY2RjMV9yZXNvdXJjZXMpLApAQCAtMTA4MSw2ICsxMTAyLDkgQEAKIAogc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB3bTgzMTJfZGV2c1tdID0gewogCXsKKwkJLm5hbWUgPSAid204MzF4LWJhY2t1cCIsCisJfSwKKwl7CiAJCS5uYW1lID0gIndtODMxeC1idWNrdiIsCiAJCS5pZCA9IDEsCiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfZGNkYzFfcmVzb3VyY2VzKSwKQEAgLTEyMzcsNiArMTI2MSwxMzcgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB3bTgzMjBfZGV2c1tdID0geworCXsKKwkJLm5hbWUgPSAid204MzF4LWJhY2t1cCIsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1idWNrdiIsCisJCS5pZCA9IDEsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfZGNkYzFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9kY2RjMV9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1idWNrdiIsCisJCS5pZCA9IDIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfZGNkYzJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9kY2RjMl9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1idWNrcCIsCisJCS5pZCA9IDMsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfZGNkYzNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9kY2RjM19yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1idWNrcCIsCisJCS5pZCA9IDQsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMjBfZGNkYzRfYnVja19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzIwX2RjZGM0X2J1Y2tfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X2dwaW9fcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtaHdtb24iLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtbGRvIiwKKwkJLmlkID0gMSwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9sZG8xX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB3bTgzMXhfbGRvMV9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1sZG8iLAorCQkuaWQgPSAyLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X2xkbzJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9sZG8yX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAid204MzF4LWxkbyIsCisJCS5pZCA9IDMsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfbGRvM19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X2xkbzNfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtbGRvIiwKKwkJLmlkID0gNCwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9sZG80X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB3bTgzMXhfbGRvNF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1sZG8iLAorCQkuaWQgPSA1LAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X2xkbzVfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9sZG81X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAid204MzF4LWxkbyIsCisJCS5pZCA9IDYsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfbGRvNl9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X2xkbzZfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtYWxkbyIsCisJCS5pZCA9IDcsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfbGRvN19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X2xkbzdfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtYWxkbyIsCisJCS5pZCA9IDgsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfbGRvOF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X2xkbzhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtYWxkbyIsCisJCS5pZCA9IDksCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfbGRvOV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X2xkbzlfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtYWxkbyIsCisJCS5pZCA9IDEwLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X2xkbzEwX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB3bTgzMXhfbGRvMTBfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtYWxpdmUtbGRvIiwKKwkJLmlkID0gMTEsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfbGRvMTFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9sZG8xMV9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1vbiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfb25fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9vbl9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1ydGMiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3J0Y19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X3J0Y19yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODMxeC1zdGF0dXMiLAorCQkuaWQgPSAxLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3N0YXR1czFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHdtODMxeF9zdGF0dXMxX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAid204MzF4LXN0YXR1cyIsCisJCS5pZCA9IDIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfc3RhdHVzMl9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X3N0YXR1czJfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTgzMXgtd2F0Y2hkb2ciLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3dkdF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X3dkdF9yZXNvdXJjZXMsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgYmFja2xpZ2h0X2RldnNbXSA9IHsKIAl7CiAJCS5uYW1lID0gIndtODMxeC1iYWNrbGlnaHQiLApAQCAtMTI4Miw1MCArMTQzNywzNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwkvKiBTb21lIGVuZ2luZWVyaW5nIHNhbXBsZXMgZG8gbm90IGhhdmUgdGhlIElEIHNldCwgcmVseSBvbgorCSAqIHRoZSBkZXZpY2UgYmVpbmcgcmVnaXN0ZXJlZCBjb3JyZWN0bHkuCisJICovCisJaWYgKHJldCA9PSAwKSB7CisJCWRldl9pbmZvKHdtODMxeC0+ZGV2LCAiRGV2aWNlIGlzIGFuIGVuZ2luZWVyaW5nIHNhbXBsZVxuIik7CisJCXJldCA9IGlkOworCX0KKwogCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAweDgzMTA6CisJY2FzZSBXTTgzMTA6CiAJCXBhcmVudCA9IFdNODMxMDsKLQkJc3dpdGNoIChyZXYpIHsKLQkJY2FzZSAwOgotCQkJZGV2X2luZm8od204MzF4LT5kZXYsICJXTTgzMTAgcmV2aXNpb24gJWNcbiIsCi0JCQkJICdBJyArIHJldik7Ci0JCQlicmVhazsKLQkJfQorCQl3bTgzMXgtPm51bV9ncGlvID0gMTY7CisJCWRldl9pbmZvKHdtODMxeC0+ZGV2LCAiV004MzEwIHJldmlzaW9uICVjXG4iLCAnQScgKyByZXYpOwogCQlicmVhazsKIAotCWNhc2UgMHg4MzExOgorCWNhc2UgV004MzExOgogCQlwYXJlbnQgPSBXTTgzMTE7Ci0JCXN3aXRjaCAocmV2KSB7Ci0JCWNhc2UgMDoKLQkJCWRldl9pbmZvKHdtODMxeC0+ZGV2LCAiV004MzExIHJldmlzaW9uICVjXG4iLAotCQkJCSAnQScgKyByZXYpOwotCQkJYnJlYWs7Ci0JCX0KKwkJd204MzF4LT5udW1fZ3BpbyA9IDE2OworCQlkZXZfaW5mbyh3bTgzMXgtPmRldiwgIldNODMxMSByZXZpc2lvbiAlY1xuIiwgJ0EnICsgcmV2KTsKIAkJYnJlYWs7CiAKLQljYXNlIDB4ODMxMjoKKwljYXNlIFdNODMxMjoKIAkJcGFyZW50ID0gV004MzEyOwotCQlzd2l0Y2ggKHJldikgewotCQljYXNlIDA6Ci0JCQlkZXZfaW5mbyh3bTgzMXgtPmRldiwgIldNODMxMiByZXZpc2lvbiAlY1xuIiwKLQkJCQkgJ0EnICsgcmV2KTsKLQkJCWJyZWFrOwotCQl9CisJCXdtODMxeC0+bnVtX2dwaW8gPSAxNjsKKwkJZGV2X2luZm8od204MzF4LT5kZXYsICJXTTgzMTIgcmV2aXNpb24gJWNcbiIsICdBJyArIHJldik7CiAJCWJyZWFrOwogCi0JY2FzZSAwOgotCQkvKiBTb21lIGVuZ2luZWVyaW5nIHNhbXBsZXMgZG8gbm90IGhhdmUgdGhlIElEIHNldCwKLQkJICogcmVseSBvbiB0aGUgZGV2aWNlIGJlaW5nIHJlZ2lzdGVyZWQgY29ycmVjdGx5LgotCQkgKiBUaGlzIHdpbGwgbmVlZCByZXZpc2l0aW5nIGZvciBmdXR1cmUgZGV2aWNlcyB3aXRoCi0JCSAqIG11bHRpcGxlIGRpZXMuCi0JCSAqLwotCQlwYXJlbnQgPSBpZDsKLQkJc3dpdGNoIChyZXYpIHsKLQkJY2FzZSAwOgotCQkJZGV2X2luZm8od204MzF4LT5kZXYsICJXTTgzMSVkIEVTIHJldmlzaW9uICVjXG4iLAotCQkJCSBwYXJlbnQsICdBJyArIHJldik7Ci0JCQlicmVhazsKLQkJfQorCWNhc2UgV004MzIwOgorCQlwYXJlbnQgPSBXTTgzMjA7CisJCXdtODMxeC0+bnVtX2dwaW8gPSAxMjsKKwkJZGV2X2luZm8od204MzF4LT5kZXYsICJXTTgzMjAgcmV2aXNpb24gJWNcbiIsICdBJyArIHJldik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTEzMzgsNyArMTQ4MCw3IEBACiAJICogY3VycmVudCBwYXJ0cy4KIAkgKi8KIAlpZiAocGFyZW50ICE9IGlkKQotCQlkZXZfd2Fybih3bTgzMXgtPmRldiwgIkRldmljZSB3YXMgcmVnaXN0ZXJlZCBhcyBhIFdNODMxJWx1XG4iLAorCQlkZXZfd2Fybih3bTgzMXgtPmRldiwgIkRldmljZSB3YXMgcmVnaXN0ZXJlZCBhcyBhIFdNJWx4XG4iLAogCQkJIGlkKTsKIAogCS8qIEJvb3RzdHJhcCB0aGUgdXNlciBrZXkgKi8KQEAgLTEzNzEsMTggKzE1MTMsMjQgQEAKIAljYXNlIFdNODMxMDoKIAkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCAtMSwKIAkJCQkgICAgICB3bTgzMTBfZGV2cywgQVJSQVlfU0laRSh3bTgzMTBfZGV2cyksCi0JCQkJICAgICAgTlVMTCwgMCk7CisJCQkJICAgICAgTlVMTCwgd204MzF4LT5pcnFfYmFzZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBXTTgzMTE6CiAJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh3bTgzMXgtPmRldiwgLTEsCiAJCQkJICAgICAgd204MzExX2RldnMsIEFSUkFZX1NJWkUod204MzExX2RldnMpLAotCQkJCSAgICAgIE5VTEwsIDApOworCQkJCSAgICAgIE5VTEwsIHdtODMxeC0+aXJxX2Jhc2UpOwogCQlicmVhazsKIAogCWNhc2UgV004MzEyOgogCQlyZXQgPSBtZmRfYWRkX2RldmljZXMod204MzF4LT5kZXYsIC0xLAogCQkJCSAgICAgIHdtODMxMl9kZXZzLCBBUlJBWV9TSVpFKHdtODMxMl9kZXZzKSwKKwkJCQkgICAgICBOVUxMLCB3bTgzMXgtPmlycV9iYXNlKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODMyMDoKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCAtMSwKKwkJCQkgICAgICB3bTgzMjBfZGV2cywgQVJSQVlfU0laRSh3bTgzMjBfZGV2cyksCiAJCQkJICAgICAgTlVMTCwgMCk7CiAJCWJyZWFrOwogCkBAIC0xMzk5LDcgKzE1NDcsOCBAQAogCWlmIChwZGF0YSAmJiBwZGF0YS0+YmFja2xpZ2h0KSB7CiAJCS8qIFRyZWF0IGVycm9ycyBhcyBub24tY3JpdGljYWwgKi8KIAkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCAtMSwgYmFja2xpZ2h0X2RldnMsCi0JCQkJICAgICAgQVJSQVlfU0laRShiYWNrbGlnaHRfZGV2cyksIE5VTEwsIDApOworCQkJCSAgICAgIEFSUkFZX1NJWkUoYmFja2xpZ2h0X2RldnMpLCBOVUxMLAorCQkJCSAgICAgIHdtODMxeC0+aXJxX2Jhc2UpOwogCQlpZiAocmV0IDwgMCkKIAkJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gYWRkIGJhY2tsaWdodDogJWRcbiIsCiAJCQkJcmV0KTsKQEAgLTE1MTEsNiArMTY2MCw3IEBACiAJeyAid204MzEwIiwgV004MzEwIH0sCiAJeyAid204MzExIiwgV004MzExIH0sCiAJeyAid204MzEyIiwgV004MzEyIH0sCisJeyAid204MzIwIiwgV004MzIwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODMxeF9pMmNfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCmluZGV4IGFjMDU2ZWEuLjMwMTMyNzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtMzM5LDExMCArMzQwLDcxIEBACiAJcmV0dXJuIFdNODMxWF9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSyAtIDEgKyBpcnFfZGF0YS0+cmVnOwogfQogCi1zdGF0aWMgdm9pZCBfX3dtODMxeF9lbmFibGVfaXJxKHN0cnVjdCB3bTgzMXggKndtODMxeCwgaW50IGlycSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdtODMxeF9pcnFfZGF0YSAqaXJxX3RvX3dtODMxeF9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LAorCQkJCQkJCWludCBpcnEpCiB7Ci0Jc3RydWN0IHdtODMxeF9pcnFfZGF0YSAqaXJxX2RhdGEgPSAmd204MzF4X2lycXNbaXJxXTsKLQotCXdtODMxeC0+aXJxX21hc2tzW2lycV9kYXRhLT5yZWcgLSAxXSAmPSB+aXJxX2RhdGEtPm1hc2s7Ci0Jd204MzF4X3JlZ193cml0ZSh3bTgzMXgsIGlycV9kYXRhX3RvX21hc2tfcmVnKGlycV9kYXRhKSwKLQkJCSB3bTgzMXgtPmlycV9tYXNrc1tpcnFfZGF0YS0+cmVnIC0gMV0pOworCXJldHVybiAmd204MzF4X2lycXNbaXJxIC0gd204MzF4LT5pcnFfYmFzZV07CiB9CiAKLXZvaWQgd204MzF4X2VuYWJsZV9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LCBpbnQgaXJxKQorc3RhdGljIHZvaWQgd204MzF4X2lycV9sb2NrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JbXV0ZXhfbG9jaygmd204MzF4LT5pcnFfbG9jayk7Ci0JX193bTgzMXhfZW5hYmxlX2lycSh3bTgzMXgsIGlycSk7Ci0JbXV0ZXhfdW5sb2NrKCZ3bTgzMXgtPmlycV9sb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODMxeF9lbmFibGVfaXJxKTsKLQotc3RhdGljIHZvaWQgX193bTgzMXhfZGlzYWJsZV9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LCBpbnQgaXJxKQotewotCXN0cnVjdCB3bTgzMXhfaXJxX2RhdGEgKmlycV9kYXRhID0gJndtODMxeF9pcnFzW2lycV07Ci0KLQl3bTgzMXgtPmlycV9tYXNrc1tpcnFfZGF0YS0+cmVnIC0gMV0gfD0gaXJxX2RhdGEtPm1hc2s7Ci0Jd204MzF4X3JlZ193cml0ZSh3bTgzMXgsIGlycV9kYXRhX3RvX21hc2tfcmVnKGlycV9kYXRhKSwKLQkJCSB3bTgzMXgtPmlycV9tYXNrc1tpcnFfZGF0YS0+cmVnIC0gMV0pOwotfQotCi12b2lkIHdtODMxeF9kaXNhYmxlX2lycShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCBpcnEpCi17Ci0JbXV0ZXhfbG9jaygmd204MzF4LT5pcnFfbG9jayk7Ci0JX193bTgzMXhfZGlzYWJsZV9pcnEod204MzF4LCBpcnEpOwotCW11dGV4X3VubG9jaygmd204MzF4LT5pcnFfbG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh3bTgzMXhfZGlzYWJsZV9pcnEpOwotCi1pbnQgd204MzF4X3JlcXVlc3RfaXJxKHN0cnVjdCB3bTgzMXggKndtODMxeCwKLQkJICAgICAgIHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB2b2lkICpkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gV004MzFYX05VTV9JUlFTKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCiAJbXV0ZXhfbG9jaygmd204MzF4LT5pcnFfbG9jayk7Cit9CiAKLQlpZiAod204MzF4X2lycXNbaXJxXS5oYW5kbGVyKSB7Ci0JCWRldl9lcnIod204MzF4LT5kZXYsICJBbHJlYWR5IGhhdmUgaGFuZGxlciBmb3IgSVJRICVkXG4iLCBpcnEpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKK3N0YXRpYyB2b2lkIHdtODMxeF9pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204MzF4LT5pcnFfbWFza3NfY3VyKTsgaSsrKSB7CisJCS8qIElmIHRoZXJlJ3MgYmVlbiBhIGNoYW5nZSBpbiB0aGUgbWFzayB3cml0ZSBpdCBiYWNrCisJCSAqIHRvIHRoZSBoYXJkd2FyZS4gKi8KKwkJaWYgKHdtODMxeC0+aXJxX21hc2tzX2N1cltpXSAhPSB3bTgzMXgtPmlycV9tYXNrc19jYWNoZVtpXSkgeworCQkJd204MzF4LT5pcnFfbWFza3NfY2FjaGVbaV0gPSB3bTgzMXgtPmlycV9tYXNrc19jdXJbaV07CisJCQl3bTgzMXhfcmVnX3dyaXRlKHdtODMxeCwKKwkJCQkJIFdNODMxWF9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSyArIGksCisJCQkJCSB3bTgzMXgtPmlycV9tYXNrc19jdXJbaV0pOworCQl9CiAJfQogCi0Jd204MzF4X2lycXNbaXJxXS5oYW5kbGVyID0gaGFuZGxlcjsKLQl3bTgzMXhfaXJxc1tpcnFdLmhhbmRsZXJfZGF0YSA9IGRldjsKLQotCV9fd204MzF4X2VuYWJsZV9pcnEod204MzF4LCBpcnEpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bTgzMXgtPmlycV9sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh3bTgzMXhfcmVxdWVzdF9pcnEpOwotCi12b2lkIHdtODMxeF9mcmVlX2lycShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRhdGEpCi17Ci0JaWYgKGlycSA8IDAgfHwgaXJxID49IFdNODMxWF9OVU1fSVJRUykKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmd204MzF4LT5pcnFfbG9jayk7Ci0KLQl3bTgzMXhfaXJxc1tpcnFdLmhhbmRsZXIgPSBOVUxMOwotCXdtODMxeF9pcnFzW2lycV0uaGFuZGxlcl9kYXRhID0gTlVMTDsKLQotCV9fd204MzF4X2Rpc2FibGVfaXJxKHdtODMxeCwgaXJxKTsKLQogCW11dGV4X3VubG9jaygmd204MzF4LT5pcnFfbG9jayk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh3bTgzMXhfZnJlZV9pcnEpOwogCi0KLXN0YXRpYyB2b2lkIHdtODMxeF9oYW5kbGVfaXJxKHN0cnVjdCB3bTgzMXggKndtODMxeCwgaW50IGlycSwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIHdtODMxeF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IHdtODMxeF9pcnFfZGF0YSAqaXJxX2RhdGEgPSAmd204MzF4X2lycXNbaXJxXTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCB3bTgzMXhfaXJxX2RhdGEgKmlycV9kYXRhID0gaXJxX3RvX3dtODMxeF9pcnEod204MzF4LCBpcnEpOwogCi0JaWYgKGlycV9kYXRhLT5oYW5kbGVyKSB7Ci0JCWlycV9kYXRhLT5oYW5kbGVyKGlycSwgaXJxX2RhdGEtPmhhbmRsZXJfZGF0YSk7Ci0JCXdtODMxeF9yZWdfd3JpdGUod204MzF4LCBpcnFfZGF0YV90b19zdGF0dXNfcmVnKGlycV9kYXRhKSwKLQkJCQkgaXJxX2RhdGEtPm1hc2spOwotCX0gZWxzZSB7Ci0JCWRldl9lcnIod204MzF4LT5kZXYsICJVbmhhbmRsZWQgSVJRICVkLCBtYXNraW5nXG4iLCBpcnEpOwotCQlfX3dtODMxeF9kaXNhYmxlX2lycSh3bTgzMXgsIGlycSk7Ci0JfQorCXdtODMxeC0+aXJxX21hc2tzX2N1cltpcnFfZGF0YS0+cmVnIC0gMV0gJj0gfmlycV9kYXRhLT5tYXNrOwogfQogCi0vKiBNYWluIGludGVycnVwdCBoYW5kbGluZyBvY2N1cnMgaW4gYSB3b3JrcXVldWUgc2luY2Ugd2UgbmVlZAotICogaW50ZXJydXB0cyBlbmFibGVkIHRvIGludGVyYWN0IHdpdGggdGhlIGNoaXAuICovCi1zdGF0aWMgdm9pZCB3bTgzMXhfaXJxX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCB3bTgzMXhfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODMxeCwgaXJxX3dvcmspOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJc3RydWN0IHdtODMxeF9pcnFfZGF0YSAqaXJxX2RhdGEgPSBpcnFfdG9fd204MzF4X2lycSh3bTgzMXgsIGlycSk7CisKKwl3bTgzMXgtPmlycV9tYXNrc19jdXJbaXJxX2RhdGEtPnJlZyAtIDFdIHw9IGlycV9kYXRhLT5tYXNrOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHdtODMxeF9pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJ3bTgzMXgiLAorCS5idXNfbG9jayA9IHdtODMxeF9pcnFfbG9jaywKKwkuYnVzX3N5bmNfdW5sb2NrID0gd204MzF4X2lycV9zeW5jX3VubG9jaywKKwkubWFzayA9IHdtODMxeF9pcnFfbWFzaywKKwkudW5tYXNrID0gd204MzF4X2lycV91bm1hc2ssCit9OworCisvKiBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJpbWFyeSBpbnRlcnJ1cHQgb2NjdXJzIGluIGEgdGhyZWFkIHNvIHRoYXQKKyAqIHdlIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBkZXZpY2Ugb3ZlciBJMkMgb3IgU1BJLiAqLworc3RhdGljIGlycXJldHVybl90IHdtODMxeF9pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcHJpbWFyeTsKLQlpbnQgc3RhdHVzX3JlZ3NbNV07Ci0JaW50IHJlYWRbNV0gPSB7IDAgfTsKKwlpbnQgc3RhdHVzX3JlZ3NbV004MzFYX05VTV9JUlFfUkVHU10gPSB7IDAgfTsKKwlpbnQgcmVhZFtXTTgzMVhfTlVNX0lSUV9SRUdTXSA9IHsgMCB9OwogCWludCAqc3RhdHVzOwogCiAJcHJpbWFyeSA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIFdNODMxWF9TWVNURU1fSU5URVJSVVBUUyk7CkBAIC00NTIsOCArNDE0LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbXV0ZXhfbG9jaygmd204MzF4LT5pcnFfbG9jayk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzMXhfaXJxcyk7IGkrKykgewogCQlpbnQgb2Zmc2V0ID0gd204MzF4X2lycXNbaV0ucmVnIC0gMTsKIApAQCAtNDcxLDQxICs0MzEsMzQgQEAKIAkJCQlkZXZfZXJyKHdtODMxeC0+ZGV2LAogCQkJCQkiRmFpbGVkIHRvIHJlYWQgSVJRIHN0YXR1czogJWRcbiIsCiAJCQkJCSpzdGF0dXMpOwotCQkJCWdvdG8gb3V0X2xvY2s7CisJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCS8qIE1hc2sgb3V0IHRoZSBkaXNhYmxlZCBJUlFzICovCi0JCQkqc3RhdHVzICY9IH53bTgzMXgtPmlycV9tYXNrc1tvZmZzZXRdOwogCQkJcmVhZFtvZmZzZXRdID0gMTsKIAkJfQogCi0JCWlmICgqc3RhdHVzICYgd204MzF4X2lycXNbaV0ubWFzaykKLQkJCXdtODMxeF9oYW5kbGVfaXJxKHdtODMxeCwgaSwgKnN0YXR1cyk7CisJCS8qIFJlcG9ydCBpdCBpZiBpdCBpc24ndCBtYXNrZWQsIG9yIGZvcmdldCB0aGUgc3RhdHVzLiAqLworCQlpZiAoKCpzdGF0dXMgJiB+d204MzF4LT5pcnFfbWFza3NfY3VyW29mZnNldF0pCisJCSAgICAmIHdtODMxeF9pcnFzW2ldLm1hc2spCisJCQloYW5kbGVfbmVzdGVkX2lycSh3bTgzMXgtPmlycV9iYXNlICsgaSk7CisJCWVsc2UKKwkJCSpzdGF0dXMgJj0gfndtODMxeF9pcnFzW2ldLm1hc2s7CiAJfQogCi1vdXRfbG9jazoKLQltdXRleF91bmxvY2soJndtODMxeC0+aXJxX2xvY2spOwogb3V0OgotCWVuYWJsZV9pcnEod204MzF4LT5pcnEpOwotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfY3B1X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRhdGE7Ci0KLQkvKiBTaHV0IHRoZSBpbnRlcnJ1cHQgdG8gdGhlIENQVSB1cCBhbmQgc2NoZWR1bGUgdGhlIGFjdHVhbAotCSAqIGhhbmRsZXI7IHdlIGNhbid0IGNoZWNrIHRoYXQgdGhlIElSUSBpcyBhc3NlcnRlZC4gKi8KLQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQotCXF1ZXVlX3dvcmsod204MzF4LT5pcnFfd3EsICZ3bTgzMXgtPmlycV93b3JrKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0dXNfcmVncyk7IGkrKykgeworCQlpZiAoc3RhdHVzX3JlZ3NbaV0pCisJCQl3bTgzMXhfcmVnX3dyaXRlKHdtODMxeCwgV004MzFYX0lOVEVSUlVQVF9TVEFUVVNfMSArIGksCisJCQkJCSBzdGF0dXNfcmVnc1tpXSk7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBpbnQgd204MzF4X2lycV9pbml0KHN0cnVjdCB3bTgzMXggKndtODMxeCwgaW50IGlycSkKIHsKLQlpbnQgaSwgcmV0OworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKnBkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IGksIGN1cl9pcnEsIHJldDsKIAogCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOwogCkBAIC01MTUsNDEgKzQ2OCw1MyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQotCXdtODMxeC0+aXJxX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIndtODMxeC1pcnEiKTsKLQlpZiAoIXdtODMxeC0+aXJxX3dxKSB7Ci0JCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgSVJRIHdvcmtlclxuIik7Ci0JCXJldHVybiAtRVNSQ0g7CisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmlycV9iYXNlKSB7CisJCWRldl9lcnIod204MzF4LT5kZXYsCisJCQkiTm8gaW50ZXJydXB0IGJhc2Ugc3BlY2lmaWVkLCBubyBpbnRlcnJ1cHRzXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJd204MzF4LT5pcnEgPSBpcnE7Ci0JSU5JVF9XT1JLKCZ3bTgzMXgtPmlycV93b3JrLCB3bTgzMXhfaXJxX3dvcmtlcik7CisJd204MzF4LT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKIAogCS8qIE1hc2sgdGhlIGluZGl2aWR1YWwgaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzMXgtPmlycV9tYXNrcyk7IGkrKykgewotCQl3bTgzMXgtPmlycV9tYXNrc1tpXSA9IDB4ZmZmZjsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzMXgtPmlycV9tYXNrc19jdXIpOyBpKyspIHsKKwkJd204MzF4LT5pcnFfbWFza3NfY3VyW2ldID0gMHhmZmZmOworCQl3bTgzMXgtPmlycV9tYXNrc19jYWNoZVtpXSA9IDB4ZmZmZjsKIAkJd204MzF4X3JlZ193cml0ZSh3bTgzMXgsIFdNODMxWF9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSyArIGksCiAJCQkJIDB4ZmZmZik7CiAJfQogCi0JLyogRW5hYmxlIHRvcCBsZXZlbCBpbnRlcnJ1cHRzLCB3ZSBtYXNrIGF0IHNlY29uZGFyeSBsZXZlbCAqLwotCXdtODMxeF9yZWdfd3JpdGUod204MzF4LCBXTTgzMVhfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSywgMCk7CisJLyogUmVnaXN0ZXIgdGhlbSB3aXRoIGdlbmlycSAqLworCWZvciAoY3VyX2lycSA9IHdtODMxeC0+aXJxX2Jhc2U7CisJICAgICBjdXJfaXJxIDwgQVJSQVlfU0laRSh3bTgzMXhfaXJxcykgKyB3bTgzMXgtPmlycV9iYXNlOworCSAgICAgY3VyX2lycSsrKSB7CisJCXNldF9pcnFfY2hpcF9kYXRhKGN1cl9pcnEsIHdtODMxeCk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihjdXJfaXJxLCAmd204MzF4X2lycV9jaGlwLAorCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKGN1cl9pcnEsIDEpOwogCi0JLyogV2UncmUgZ29vZCB0byBnby4gIFdlIHNldCBJUlFGX1NIQVJFRCBzaW5jZSB0aGVyZSdzIGEKLQkgKiBjaGFuY2UgdGhlIGRyaXZlciB3aWxsIGludGVyb3BlcmF0ZSB3aXRoIGFub3RoZXIgZHJpdmVyIGJ1dAotCSAqIHRoZSBuZWVkIHRvIGRpc2FibGUgdGhlIElSUSB3aGlsZSBoYW5kaW5nIHZpYSBJMkMvU1BJIG1lYW5zCi0JICogdGhhdCB0aGlzIG1heSBicmVhayBhbmQgcGVyZm9ybWFuY2Ugd2lsbCBiZSBpbXBhY3RlZC4gIElmCi0JICogdGhpcyBkb2VzIGhhcHBlbiBpdCdzIGEgaGFyZHdhcmUgZGVzaWduIGlzc3VlIGFuZCB0aGUgb25seQotCSAqIG90aGVyIGFsdGVybmF0aXZlIHdvdWxkIGJlIHBvbGxpbmcuCi0JICovCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3bTgzMXhfY3B1X2lycSwgSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfU0hBUkVELAotCQkJICAid204MzF4Iiwgd204MzF4KTsKKwkJLyogQVJNIG5lZWRzIHVzIHRvIGV4cGxpY2l0bHkgZmxhZyB0aGUgSVJRIGFzIHZhbGlkCisJCSAqIGFuZCB3aWxsIHNldCB0aGVtIG5vcHJvYmUgd2hlbiB3ZSBkbyBzby4gKi8KKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoY3VyX2lycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCQlzZXRfaXJxX25vcHJvYmUoY3VyX2lycSk7CisjZW5kaWYKKwl9CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIHdtODMxeF9pcnFfdGhyZWFkLAorCQkJCSAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsCisJCQkJICAgIndtODMxeCIsIHdtODMxeCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlEgJWQ6ICVkXG4iLAogCQkJaXJxLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIEVuYWJsZSB0b3AgbGV2ZWwgaW50ZXJydXB0cywgd2UgbWFzayBhdCBzZWNvbmRhcnkgbGV2ZWwgKi8KKwl3bTgzMXhfcmVnX3dyaXRlKHdtODMxeCwgV004MzFYX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDApOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCmluZGV4IGJhMjdjOWQuLjg0ODVhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwpAQCAtMzM3LDczMyArMzM3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfdW5sb2NrKTsKIAotc3RhdGljIHZvaWQgd204MzUwX2lycV9jYWxsX2hhbmRsZXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQotewotCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKLQotCWlmICh3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIpCi0JCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlcih3bTgzNTAsIGlycSwgd204MzUwLT5pcnFbaXJxXS5kYXRhKTsKLQllbHNlIHsKLQkJZGV2X2Vycih3bTgzNTAtPmRldiwgImlycSAlZCBub2JvZHkgY2FyZWQuIG5vdyBtYXNrZWQuXG4iLAotCQkJaXJxKTsKLQkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgaXJxKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgYSB0aHJlYWRlZCBJUlEgaGFuZGxlciBzbyBjYW4gYWNjZXNzIEkyQy9TUEkuICBTaW5jZSBhbGwKLSAqIGludGVycnVwdHMgYXJlIGNsZWFyIG9uIHJlYWQgdGhlIElSUSBsaW5lIHdpbGwgYmUgcmVhc3NlcnRlZCBhbmQKLSAqIHRoZSBwaHlzaWNhbCBJUlEgd2lsbCBiZSBoYW5kbGVkIGFnYWluIGlmIGFub3RoZXIgaW50ZXJydXB0IGlzCi0gKiBhc3NlcnRlZCB3aGlsZSB3ZSBydW4gLSBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBldmVudHMgdGhpcyBpcyBhCi0gKiByYXJlIG9jY3VycmVuY2Ugc28gd2Ugc2F2ZSBJMkMvU1BJIHJlYWRzLgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd204MzUwX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRhdGE7Ci0JdTE2IGxldmVsX29uZSwgc3RhdHVzMSwgc3RhdHVzMiwgY29tcDsKLQotCS8qIFRPRE86IFVzZSBibG9jayByZWFkcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlPyAqLwotCWxldmVsX29uZSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9TWVNURU1fSU5URVJSVVBUUykKLQkJJiB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0spOwotCXN0YXR1czEgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xKQotCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0spOwotCXN0YXR1czIgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yKQotCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0spOwotCWNvbXAgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTKQotCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0spOwotCi0JLyogb3ZlciBjdXJyZW50ICovCi0JaWYgKGxldmVsX29uZSAmIFdNODM1MF9PQ19JTlQpIHsKLQkJdTE2IG9jOwotCi0JCW9jID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX09WRVJfQ1VSUkVOVF9JTlRfU1RBVFVTKTsKLQkJb2MgJj0gfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX1NUQVRVU19NQVNLKTsKLQotCQlpZiAob2MgJiBXTTgzNTBfT0NfTFNfRUlOVCkJLyogbGltaXQgc3dpdGNoICovCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfT0NfTFMpOwotCX0KLQotCS8qIHVuZGVyIHZvbHRhZ2UgKi8KLQlpZiAobGV2ZWxfb25lICYgV004MzUwX1VWX0lOVCkgewotCQl1MTYgdXY7Ci0KLQkJdXYgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTKTsKLQkJdXYgJj0gfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSyk7Ci0KLQkJaWYgKHV2ICYgV004MzUwX1VWX0RDMV9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0RDMSk7Ci0JCWlmICh1diAmIFdNODM1MF9VVl9EQzJfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9EQzIpOwotCQlpZiAodXYgJiBXTTgzNTBfVVZfREMzX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVZfREMzKTsKLQkJaWYgKHV2ICYgV004MzUwX1VWX0RDNF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0RDNCk7Ci0JCWlmICh1diAmIFdNODM1MF9VVl9EQzVfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9EQzUpOwotCQlpZiAodXYgJiBXTTgzNTBfVVZfREM2X0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVZfREM2KTsKLQkJaWYgKHV2ICYgV004MzUwX1VWX0xETzFfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9MRE8xKTsKLQkJaWYgKHV2ICYgV004MzUwX1VWX0xETzJfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9MRE8yKTsKLQkJaWYgKHV2ICYgV004MzUwX1VWX0xETzNfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9MRE8zKTsKLQkJaWYgKHV2ICYgV004MzUwX1VWX0xETzRfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9MRE80KTsKLQl9Ci0KLQkvKiBjaGFyZ2VyLCBSVEMgKi8KLQlpZiAoc3RhdHVzMSkgewotCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfQkFUX0hPVF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9DSEdfQkFUX0hPVCk7Ci0JCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19CQVRfQ09MRF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9DSEdfQkFUX0NPTEQpOwotCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfQkFUX0ZBSUxfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMKTsKLQkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX1RPX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1RPKTsKLQkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX0VORF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX0NIR19FTkQpOwotCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfU1RBUlRfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DSEdfU1RBUlQpOwotCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfRkFTVF9SRFlfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQ0hHX0ZBU1RfUkRZKTsKLQkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX1ZCQVRUX0xUXzNQOV9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5KTsKLQkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX1ZCQVRUX0xUXzNQMV9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxKTsKLQkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX1ZCQVRUX0xUXzJQODVfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODUpOwotCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9SVENfQUxNX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfUlRDX0FMTSk7Ci0JCWlmIChzdGF0dXMxICYgV004MzUwX1JUQ19TRUNfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9SVENfU0VDKTsKLQkJaWYgKHN0YXR1czEgJiBXTTgzNTBfUlRDX1BFUl9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1JUQ19QRVIpOwotCX0KLQotCS8qIGN1cnJlbnQgc2luaywgc3lzdGVtLCBhdXggYWRjICovCi0JaWYgKHN0YXR1czIpIHsKLQkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQ1MxX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfQ1MxKTsKLQkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQ1MyX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfQ1MyKTsKLQotCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9TWVNfSFlTVF9DT01QX0ZBSUxfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfU1lTX0hZU1RfQ09NUF9GQUlMKTsKLQkJaWYgKHN0YXR1czIgJiBXTTgzNTBfU1lTX0NISVBfR1QxMTVfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfU1lTX0NISVBfR1QxMTUpOwotCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9TWVNfQ0hJUF9HVDE0MF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9TWVNfQ0hJUF9HVDE0MCk7Ci0JCWlmIChzdGF0dXMyICYgV004MzUwX1NZU19XRE9HX1RPX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCi0JCQkJCQlXTTgzNTBfSVJRX1NZU19XRE9HX1RPKTsKLQotCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9BVVhBRENfREFUQVJEWV9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9BVVhBRENfREFUQVJEWSk7Ci0JCWlmIChzdGF0dXMyICYgV004MzUwX0FVWEFEQ19EQ09NUDRfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQVVYQURDX0RDT01QNCk7Ci0JCWlmIChzdGF0dXMyICYgV004MzUwX0FVWEFEQ19EQ09NUDNfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQVVYQURDX0RDT01QMyk7Ci0JCWlmIChzdGF0dXMyICYgV004MzUwX0FVWEFEQ19EQ09NUDJfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQVVYQURDX0RDT01QMik7Ci0JCWlmIChzdGF0dXMyICYgV004MzUwX0FVWEFEQ19EQ09NUDFfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQVVYQURDX0RDT01QMSk7Ci0KLQkJaWYgKHN0YXR1czIgJiBXTTgzNTBfVVNCX0xJTUlUX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVNCX0xJTUlUKTsKLQl9Ci0KLQkvKiB3YWtlLCBjb2RlYywgZXh0ICovCi0JaWYgKGNvbXApIHsKLQkJaWYgKGNvbXAgJiBXTTgzNTBfV0tVUF9PRkZfU1RBVEVfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfV0tVUF9PRkZfU1RBVEUpOwotCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX0hJQl9TVEFURV9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9XS1VQX0hJQl9TVEFURSk7Ci0JCWlmIChjb21wICYgV004MzUwX1dLVVBfQ09OVl9GQVVMVF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9XS1VQX0NPTlZfRkFVTFQpOwotCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX1dET0dfUlNUX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCi0JCQkJCQlXTTgzNTBfSVJRX1dLVVBfV0RPR19SU1QpOwotCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX0dQX1BXUl9PTl9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9XS1VQX0dQX1BXUl9PTik7Ci0JCWlmIChjb21wICYgV004MzUwX1dLVVBfT05LRVlfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9XS1VQX09OS0VZKTsKLQkJaWYgKGNvbXAgJiBXTTgzNTBfV0tVUF9HUF9XQUtFVVBfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfV0tVUF9HUF9XQUtFVVApOwotCi0JCWlmIChjb21wICYgV004MzUwX0NPREVDX0pDS19ERVRfTF9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAotCQkJCQkJV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOwotCQlpZiAoY29tcCAmIFdNODM1MF9DT0RFQ19KQ0tfREVUX1JfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCVdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKLQkJaWYgKGNvbXAgJiBXTTgzNTBfQ09ERUNfTUlDU0NEX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCi0JCQkJCQlXTTgzNTBfSVJRX0NPREVDX01JQ1NDRCk7Ci0JCWlmIChjb21wICYgV004MzUwX0NPREVDX01JQ0RfRUlOVCkKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19NSUNEKTsKLQotCQlpZiAoY29tcCAmIFdNODM1MF9FWFRfVVNCX0ZCX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfRVhUX1VTQl9GQik7Ci0JCWlmIChjb21wICYgV004MzUwX0VYVF9XQUxMX0ZCX0VJTlQpCi0JCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCi0JCQkJCQlXTTgzNTBfSVJRX0VYVF9XQUxMX0ZCKTsKLQkJaWYgKGNvbXAgJiBXTTgzNTBfRVhUX0JBVF9GQl9FSU5UKQotCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX0VYVF9CQVRfRkIpOwotCX0KLQotCWlmIChsZXZlbF9vbmUgJiBXTTgzNTBfR1BfSU5UKSB7Ci0JCWludCBpOwotCQl1MTYgZ3BpbzsKLQotCQlncGlvID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fSU5UX1NUQVRVUyk7Ci0JCWdwaW8gJj0gfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0spOwotCi0JCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7Ci0JCQlpZiAoZ3BpbyAmICgxIDw8IGkpKQotCQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKLQkJCQkJCQlXTTgzNTBfSVJRX0dQSU8oaSkpOwotCQl9Ci0JfQotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1pbnQgd204MzUwX3JlZ2lzdGVyX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCi0JCQl2b2lkICgqaGFuZGxlcikgKHN0cnVjdCB3bTgzNTAgKiwgaW50LCB2b2lkICopLAotCQkJdm9pZCAqZGF0YSkKLXsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPiBXTTgzNTBfTlVNX0lSUSB8fCAhaGFuZGxlcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAod204MzUwLT5pcnFbaXJxXS5oYW5kbGVyKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbXV0ZXhfbG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOwotCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlciA9IGhhbmRsZXI7Ci0Jd204MzUwLT5pcnFbaXJxXS5kYXRhID0gZGF0YTsKLQltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX3JlZ2lzdGVyX2lycSk7Ci0KLWludCB3bTgzNTBfZnJlZV9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQotewotCWlmIChpcnEgPCAwIHx8IGlycSA+IFdNODM1MF9OVU1fSVJRKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKLQl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIgPSBOVUxMOwotCW11dGV4X3VubG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2ZyZWVfaXJxKTsKLQotaW50IHdtODM1MF9tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpCi17Ci0Jc3dpdGNoIChpcnEpIHsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX0JBVF9IT1Q6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9DSEdfQkFUX0hPVF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX0JBVF9DT0xEOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX0JBVF9DT0xEX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DSEdfQkFUX0ZBSUw6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9DSEdfQkFUX0ZBSUxfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19UTzoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NIR19UT19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX0VORDoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NIR19FTkRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19TVEFSVDoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NIR19TVEFSVF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX0ZBU1RfUkRZOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX0ZBU1RfUkRZX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9SVENfUEVSOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fUlRDX1BFUl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfUlRDX1NFQzoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1JUQ19TRUNfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1JUQ19BTE06Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9SVENfQUxNX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5OgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX1ZCQVRUX0xUXzNQOV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQMToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NIR19WQkFUVF9MVF8zUDFfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8yUDg1OgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX1ZCQVRUX0xUXzJQODVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NTMToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NTMV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ1MyOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQ1MyX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9VU0JfTElNSVQ6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9VU0JfTElNSVRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQVVYQURDX0RBVEFSRFlfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDQ6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9BVVhBRENfRENPTVA0X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVAzOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQVVYQURDX0RDT01QM19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMjoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0FVWEFEQ19EQ09NUDJfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDE6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9BVVhBRENfRENPTVAxX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9TWVNfSFlTVF9DT01QX0ZBSUw6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9TWVNfSFlTVF9DT01QX0ZBSUxfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1NZU19DSElQX0dUMTE1OgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fU1lTX0NISVBfR1QxMTVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1NZU19DSElQX0dUMTQwOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fU1lTX0NISVBfR1QxNDBfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1NZU19XRE9HX1RPOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fU1lTX1dET0dfVE9fRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0xETzQ6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9VVl9MRE80X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9VVl9MRE8zOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfTERPM19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfVVZfTERPMjoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1VWX0xETzJfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0xETzE6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9VVl9MRE8xX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9VVl9EQzY6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9VVl9EQzZfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDNToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1VWX0RDNV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfVVZfREM0OgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfREM0X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9VVl9EQzM6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9VVl9EQzNfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDMjoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1VWX0RDMl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfVVZfREMxOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfREMxX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9PQ19MUzoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fT0NfTFNfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0VYVF9VU0JfRkI6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9FWFRfVVNCX0ZCX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9FWFRfV0FMTF9GQjoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0VYVF9XQUxMX0ZCX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9FWFRfQkFUX0ZCOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fRVhUX0JBVF9GQl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fQ09ERUNfSkNLX0RFVF9MX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1I6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9DT0RFQ19KQ0tfREVUX1JfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ1NDRDoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NPREVDX01JQ1NDRF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ09ERUNfTUlDRDoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0NPREVDX01JQ0RfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfT0ZGX1NUQVRFOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fV0tVUF9PRkZfU1RBVEVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfSElCX1NUQVRFOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fV0tVUF9ISUJfU1RBVEVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfQ09OVl9GQVVMVDoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfQ09OVl9GQVVMVF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfV0tVUF9XRE9HX1JTVDoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfT0ZGX1NUQVRFX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9XS1VQX0dQX1BXUl9PTjoKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfR1BfUFdSX09OX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9XS1VQX09OS0VZOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fV0tVUF9PTktFWV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfV0tVUF9HUF9XQUtFVVA6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX0dQX1dBS0VVUF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygwKToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQMF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygxKToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQMV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygyKToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQMl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygzKToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQM19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg0KToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQNF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg1KToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQNV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg2KToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQNl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg3KToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQN19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg4KToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQOF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg5KToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQOV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygxMCk6Ci0JCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAotCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJICAgICAgIFdNODM1MF9JTV9HUDEwX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9HUElPKDExKToKLQkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCi0JCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkgICAgICAgV004MzUwX0lNX0dQMTFfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTIpOgotCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKLQkJCQkgICAgICAgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAotCQkJCSAgICAgICBXTTgzNTBfSU1fR1AxMl9FSU5UKTsKLQlkZWZhdWx0OgotCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIkF0dGVtcHRpbmcgdG8gbWFzayB1bmtub3duIElSUSAlZFxuIiwKLQkJCSBpcnEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfbWFza19pcnEpOwotCi1pbnQgd204MzUwX3VubWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQotewotCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfSE9UOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fQ0hHX0JBVF9IT1RfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfQ09MRDoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCQkgV004MzUwX0lNX0NIR19CQVRfQ09MRF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fQ0hHX0JBVF9GQUlMX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DSEdfVE86Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9DSEdfVE9fRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19FTkQ6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9DSEdfRU5EX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DSEdfU1RBUlQ6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9DSEdfU1RBUlRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19GQVNUX1JEWToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCQkgV004MzUwX0lNX0NIR19GQVNUX1JEWV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfUlRDX1BFUjoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCQkgV004MzUwX0lNX1JUQ19QRVJfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1JUQ19TRUM6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9SVENfU0VDX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9SVENfQUxNOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fUlRDX0FMTV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQOToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCQkgV004MzUwX0lNX0NIR19WQkFUVF9MVF8zUDlfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDE6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfM1AxX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAotCQkJCQkgV004MzUwX0lNX0NIR19WQkFUVF9MVF8yUDg1X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9DUzE6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9DUzFfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0NTMjoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgV004MzUwX0lNX0NTMl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfVVNCX0xJTUlUOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fVVNCX0xJTUlUX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9BVVhBRENfREFUQVJEWToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgV004MzUwX0lNX0FVWEFEQ19EQVRBUkRZX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVA0OgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fQVVYQURDX0RDT01QNF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMzoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgV004MzUwX0lNX0FVWEFEQ19EQ09NUDNfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDI6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9BVVhBRENfRENPTVAyX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVAxOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fQVVYQURDX0RDT01QMV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfU1lTX0hZU1RfQ09NUF9GQUlMOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fU1lTX0hZU1RfQ09NUF9GQUlMX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDExNToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgV004MzUwX0lNX1NZU19DSElQX0dUMTE1X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDE0MDoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgV004MzUwX0lNX1NZU19DSElQX0dUMTQwX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9TWVNfV0RPR19UTzoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgV004MzUwX0lNX1NZU19XRE9HX1RPX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9VVl9MRE80OgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX1VWX0xETzRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0xETzM6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fVVZfTERPM19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfVVZfTERPMjoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9MRE8yX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9VVl9MRE8xOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX1VWX0xETzFfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDNjoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9EQzZfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDNToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9EQzVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDNDoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9EQzRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDMzoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9EQzNfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDMjoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9EQzJfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1VWX0RDMToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9VVl9EQzFfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX09DX0xTOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX09WRVJfQ1VSUkVOVF9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fT0NfTFNfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0VYVF9VU0JfRkI6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fRVhUX1VTQl9GQl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfRVhUX1dBTExfRkI6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fRVhUX1dBTExfRkJfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0VYVF9CQVRfRkI6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fRVhUX0JBVF9GQl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0NPREVDX0pDS19ERVRfTF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0NPREVDX0pDS19ERVRfUl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ09ERUNfTUlDU0NEOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0NPREVDX01JQ1NDRF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfQ09ERUNfTUlDRDoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9DT0RFQ19NSUNEX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9XS1VQX09GRl9TVEFURToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9XS1VQX09GRl9TVEFURV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfV0tVUF9ISUJfU1RBVEU6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fV0tVUF9ISUJfU1RBVEVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfQ09OVl9GQVVMVDoKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9XS1VQX0NPTlZfRkFVTFRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfV0RPR19SU1Q6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fV0tVUF9PRkZfU1RBVEVfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfR1BfUFdSX09OOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX1dLVVBfR1BfUFdSX09OX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9XS1VQX09OS0VZOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX1dLVVBfT05LRVlfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX1dLVVBfR1BfV0FLRVVQOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX1dLVVBfR1BfV0FLRVVQX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9HUElPKDApOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0dQMF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygxKToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9HUDFfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0dQSU8oMik6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fR1AyX0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9HUElPKDMpOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0dQM19FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg0KToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9HUDRfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0dQSU8oNSk6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fR1A1X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9HUElPKDYpOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0dQNl9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTyg3KToKLQkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKLQkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKLQkJCQkJIFdNODM1MF9JTV9HUDdfRUlOVCk7Ci0JY2FzZSBXTTgzNTBfSVJRX0dQSU8oOCk6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fR1A4X0VJTlQpOwotCWNhc2UgV004MzUwX0lSUV9HUElPKDkpOgotCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAotCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAotCQkJCQkgV004MzUwX0lNX0dQOV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygxMCk6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fR1AxMF9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygxMSk6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fR1AxMV9FSU5UKTsKLQljYXNlIFdNODM1MF9JUlFfR1BJTygxMik6Ci0JCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCi0JCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCi0JCQkJCSBXTTgzNTBfSU1fR1AxMl9FSU5UKTsKLQlkZWZhdWx0OgotCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIkF0dGVtcHRpbmcgdG8gdW5tYXNrIHVua25vd24gSVJRICVkXG4iLAotCQkJIGlycSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF91bm1hc2tfaXJxKTsKLQogaW50IHdtODM1MF9yZWFkX2F1eGFkYyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBjaGFubmVsLCBpbnQgc2NhbGUsIGludCB2cmVmKQogewogCXUxNiByZWcsIHJlc3VsdCA9IDA7CkBAIC0xMjY0LDcgKzUzNyw3IEBACiAJaW50IHJldDsKIAogCSpwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIC0xKTsKLQlpZiAocGRldiA9PSBOVUxMKSB7CisJaWYgKCpwZGV2ID09IE5VTEwpIHsKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlc1xuIiwgbmFtZSk7CiAJCXJldHVybjsKIAl9CkBAIC0xNDA5LDQ5ICs2ODIsMTggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDB4RkZGRik7Ci0Jd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywgMHhGRkZGKTsKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLCAweEZGRkYpOwotCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssIDB4RkZGRik7Ci0Jd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywgMHhGRkZGKTsKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLCAweEZGRkYpOwotCiAJbXV0ZXhfaW5pdCgmd204MzUwLT5hdXhhZGNfbXV0ZXgpOwotCW11dGV4X2luaXQoJndtODM1MC0+aXJxX211dGV4KTsKLQlpZiAoaXJxKSB7Ci0JCWludCBmbGFncyA9IElSUUZfT05FU0hPVDsKIAotCQlpZiAocGRhdGEgJiYgcGRhdGEtPmlycV9oaWdoKSB7Ci0JCQlmbGFncyB8PSBJUlFGX1RSSUdHRVJfSElHSDsKLQotCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCi0JCQkJCVdNODM1MF9JUlFfUE9MKTsKLQkJfSBlbHNlIHsKLQkJCWZsYWdzIHw9IElSUUZfVFJJR0dFUl9MT1c7Ci0KLQkJCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCi0JCQkJCSAgV004MzUwX0lSUV9QT0wpOwotCQl9Ci0KLQkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLCB3bTgzNTBfaXJxLCBmbGFncywKLQkJCQkJICAgIndtODM1MCIsIHdtODM1MCk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWRcbiIsCi0JCQkJcmV0KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGV2X2Vycih3bTgzNTAtPmRldiwgIk5vIElSUSBjb25maWd1cmVkXG4iKTsKKwlyZXQgPSB3bTgzNTBfaXJxX2luaXQod204MzUwLCBpcnEsIHBkYXRhKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7Ci0JfQotCXdtODM1MC0+Y2hpcF9pcnEgPSBpcnE7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmluaXQpIHsKIAkJcmV0ID0gcGRhdGEtPmluaXQod204MzUwKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiUGxhdGZvcm0gaW5pdCgpIGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfaXJxOwogCQl9CiAJfQogCkBAIC0xNDcwLDYgKzcxMiw4IEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2lycToKKwl3bTgzNTBfaXJxX2V4aXQod204MzUwKTsKIGVycjoKIAlrZnJlZSh3bTgzNTAtPnJlZ19jYWNoZSk7CiAJcmV0dXJuIHJldDsKQEAgLTE0OTMsNyArNzM3LDggQEAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bTgzNTAtPmdwaW8ucGRldik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5jb2RlYy5wZGV2KTsKIAotCWZyZWVfaXJxKHdtODM1MC0+Y2hpcF9pcnEsIHdtODM1MCk7CisJd204MzUwX2lycV9leGl0KHdtODM1MCk7CisKIAlrZnJlZSh3bTgzNTAtPnJlZ19jYWNoZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGV2aWNlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWlycS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWlycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZGY1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC93bTgzNTAtaXJxLmMKQEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKiB3bTgzNTAtaXJxLmMgIC0tICBJUlEgc3VwcG9ydCBmb3IgV29sZnNvbiBXTTgzNTAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCwgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCwgTWFyayBCcm93bgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9hdWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29tcGFyYXRvci5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvcG1pYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3dkdC5oPgorCisjZGVmaW5lIFdNODM1MF9OVU1fSVJRX1JFR1MgNworCisjZGVmaW5lIFdNODM1MF9JTlRfT0ZGU0VUXzEgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTlRfT0ZGU0VUXzIgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9QT1dFUl9VUF9JTlRfT0ZGU0VUICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9PRkZTRVQgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX09GRlNFVCAgICAgICAgICA0CisjZGVmaW5lIFdNODM1MF9HUElPX0lOVF9PRkZTRVQgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9DT01QQVJBVE9SX0lOVF9PRkZTRVQgICAgICAgICAgICA2CisKK3N0cnVjdCB3bTgzNTBfaXJxX2RhdGEgeworCWludCBwcmltYXJ5OworCWludCByZWc7CisJaW50IG1hc2s7CisJaW50IHByaW1hcnlfb25seTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd204MzUwX2lycV9kYXRhIHdtODM1MF9pcnFzW10gPSB7CisJW1dNODM1MF9JUlFfT0NfTFNdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9PQ19JTlQsCisJCS5yZWcgPSBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX09DX0xTX0VJTlQsCisJCS5wcmltYXJ5X29ubHkgPSAxLAorCX0sCisJW1dNODM1MF9JUlFfVVZfREMxXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfVVZfSU5ULAorCQkucmVnID0gV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfVVZfREMxX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9VVl9EQzJdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9VVl9JTlQsCisJCS5yZWcgPSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9VVl9EQzJfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1VWX0RDM10gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1VWX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX1VWX0RDM19FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfVVZfREM0XSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfVVZfSU5ULAorCQkucmVnID0gV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfVVZfREM0X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9VVl9EQzVdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9VVl9JTlQsCisJCS5yZWcgPSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9VVl9EQzVfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1VWX0RDNl0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1VWX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX1VWX0RDNl9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfVVZfTERPMV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1VWX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX1VWX0xETzFfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1VWX0xETzJdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9VVl9JTlQsCisJCS5yZWcgPSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9VVl9MRE8yX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9VVl9MRE8zXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfVVZfSU5ULAorCQkucmVnID0gV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfVVZfTERPM19FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfVVZfTERPNF0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1VWX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX1VWX0xETzRfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0NIR19CQVRfSE9UXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQ0hHX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzEsCisJCS5tYXNrID0gV004MzUwX0NIR19CQVRfSE9UX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DSEdfQkFUX0NPTERdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9DSEdfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMSwKKwkJLm1hc2sgPSBXTTgzNTBfQ0hHX0JBVF9DT0xEX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DSEdfQkFUX0ZBSUxdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9DSEdfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMSwKKwkJLm1hc2sgPSBXTTgzNTBfQ0hHX0JBVF9GQUlMX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DSEdfVE9dID0geworCQkucHJpbWFyeSA9IFdNODM1MF9DSEdfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMSwKKwkJLm1hc2sgPSBXTTgzNTBfQ0hHX1RPX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DSEdfRU5EXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQ0hHX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzEsCisJCS5tYXNrID0gV004MzUwX0NIR19FTkRfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0NIR19TVEFSVF0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0NIR19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8xLAorCQkubWFzayA9IFdNODM1MF9DSEdfU1RBUlRfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0NIR19GQVNUX1JEWV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0NIR19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8xLAorCQkubWFzayA9IFdNODM1MF9DSEdfRkFTVF9SRFlfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDldID0geworCQkucHJpbWFyeSA9IFdNODM1MF9DSEdfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMSwKKwkJLm1hc2sgPSBXTTgzNTBfQ0hHX1ZCQVRUX0xUXzNQOV9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQMV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0NIR19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8xLAorCQkubWFzayA9IFdNODM1MF9DSEdfVkJBVFRfTFRfM1AxX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0NIR19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8xLAorCQkubWFzayA9IFdNODM1MF9DSEdfVkJBVFRfTFRfMlA4NV9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfUlRDX0FMTV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1JUQ19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8xLAorCQkubWFzayA9IFdNODM1MF9SVENfQUxNX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9SVENfU0VDXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfUlRDX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzEsCisJCS5tYXNrID0gV004MzUwX1JUQ19TRUNfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1JUQ19QRVJdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9SVENfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMSwKKwkJLm1hc2sgPSBXTTgzNTBfUlRDX1BFUl9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfQ1MxXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQ1NfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMiwKKwkJLm1hc2sgPSBXTTgzNTBfQ1MxX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DUzJdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9DU19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8yLAorCQkubWFzayA9IFdNODM1MF9DUzJfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1NZU19IWVNUX0NPTVBfRkFJTF0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1NZU19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8yLAorCQkubWFzayA9IFdNODM1MF9TWVNfSFlTVF9DT01QX0ZBSUxfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1NZU19DSElQX0dUMTE1XSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfU1lTX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzIsCisJCS5tYXNrID0gV004MzUwX1NZU19DSElQX0dUMTE1X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9TWVNfQ0hJUF9HVDE0MF0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1NZU19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8yLAorCQkubWFzayA9IFdNODM1MF9TWVNfQ0hJUF9HVDE0MF9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfU1lTX1dET0dfVE9dID0geworCQkucHJpbWFyeSA9IFdNODM1MF9TWVNfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMiwKKwkJLm1hc2sgPSBXTTgzNTBfU1lTX1dET0dfVE9fRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQVVYQURDX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzIsCisJCS5tYXNrID0gV004MzUwX0FVWEFEQ19EQVRBUkRZX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9BVVhBRENfRENPTVA0XSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQVVYQURDX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzIsCisJCS5tYXNrID0gV004MzUwX0FVWEFEQ19EQ09NUDRfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDNdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9BVVhBRENfSU5ULAorCQkucmVnID0gV004MzUwX0lOVF9PRkZTRVRfMiwKKwkJLm1hc2sgPSBXTTgzNTBfQVVYQURDX0RDT01QM19FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfQVVYQURDX0RDT01QMl0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0FVWEFEQ19JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8yLAorCQkubWFzayA9IFdNODM1MF9BVVhBRENfRENPTVAyX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9BVVhBRENfRENPTVAxXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQVVYQURDX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9JTlRfT0ZGU0VUXzIsCisJCS5tYXNrID0gV004MzUwX0FVWEFEQ19EQ09NUDFfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1VTQl9MSU1JVF0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1VTQl9JTlQsCisJCS5yZWcgPSBXTTgzNTBfSU5UX09GRlNFVF8yLAorCQkubWFzayA9IFdNODM1MF9VU0JfTElNSVRfRUlOVCwKKwkJLnByaW1hcnlfb25seSA9IDEsCisJfSwKKwlbV004MzUwX0lSUV9XS1VQX09GRl9TVEFURV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1dLVVBfSU5ULAorCQkucmVnID0gV004MzUwX0NPTVBBUkFUT1JfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfV0tVUF9PRkZfU1RBVEVfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1dLVVBfSElCX1NUQVRFXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfV0tVUF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9XS1VQX0hJQl9TVEFURV9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfV0tVUF9DT05WX0ZBVUxUXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfV0tVUF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9XS1VQX0NPTlZfRkFVTFRfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1dLVVBfV0RPR19SU1RdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9XS1VQX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9DT01QQVJBVE9SX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX1dLVVBfV0RPR19SU1RfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX1dLVVBfR1BfUFdSX09OXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfV0tVUF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9XS1VQX0dQX1BXUl9PTl9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfV0tVUF9PTktFWV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX1dLVVBfSU5ULAorCQkucmVnID0gV004MzUwX0NPTVBBUkFUT1JfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfV0tVUF9PTktFWV9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfV0tVUF9HUF9XQUtFVVBdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9XS1VQX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9DT01QQVJBVE9SX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX1dLVVBfR1BfV0FLRVVQX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0xdID0geworCQkucHJpbWFyeSA9IFdNODM1MF9DT0RFQ19JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9DT0RFQ19KQ0tfREVUX0xfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUl0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0NPREVDX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9DT01QQVJBVE9SX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX0NPREVDX0pDS19ERVRfUl9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfQ09ERUNfTUlDU0NEXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQ09ERUNfSU5ULAorCQkucmVnID0gV004MzUwX0NPTVBBUkFUT1JfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfQ09ERUNfTUlDU0NEX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9DT0RFQ19NSUNEXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfQ09ERUNfSU5ULAorCQkucmVnID0gV004MzUwX0NPTVBBUkFUT1JfSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfQ09ERUNfTUlDRF9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfRVhUX1VTQl9GQl0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0VYVF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9FWFRfVVNCX0ZCX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9FWFRfV0FMTF9GQl0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0VYVF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9FWFRfV0FMTF9GQl9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfRVhUX0JBVF9GQl0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0VYVF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9FWFRfQkFUX0ZCX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDApXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1AwX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDEpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1AxX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDIpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1AyX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDMpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1AzX0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDQpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1A0X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDUpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1A1X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDYpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1A2X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDcpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1A3X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDgpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1A4X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDkpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1A5X0VJTlQsCisJfSwKKwlbV004MzUwX0lSUV9HUElPKDEwKV0gPSB7CisJCS5wcmltYXJ5ID0gV004MzUwX0dQX0lOVCwKKwkJLnJlZyA9IFdNODM1MF9HUElPX0lOVF9PRkZTRVQsCisJCS5tYXNrID0gV004MzUwX0dQMTBfRUlOVCwKKwl9LAorCVtXTTgzNTBfSVJRX0dQSU8oMTEpXSA9IHsKKwkJLnByaW1hcnkgPSBXTTgzNTBfR1BfSU5ULAorCQkucmVnID0gV004MzUwX0dQSU9fSU5UX09GRlNFVCwKKwkJLm1hc2sgPSBXTTgzNTBfR1AxMV9FSU5ULAorCX0sCisJW1dNODM1MF9JUlFfR1BJTygxMildID0geworCQkucHJpbWFyeSA9IFdNODM1MF9HUF9JTlQsCisJCS5yZWcgPSBXTTgzNTBfR1BJT19JTlRfT0ZGU0VULAorCQkubWFzayA9IFdNODM1MF9HUDEyX0VJTlQsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwltdXRleF9sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisKKwlpZiAod204MzUwLT5pcnFbaXJxXS5oYW5kbGVyKQorCQl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIoaXJxLCB3bTgzNTAtPmlycVtpcnFdLmRhdGEpOworCWVsc2UgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiaXJxICVkIG5vYm9keSBjYXJlZC4gbm93IG1hc2tlZC5cbiIsCisJCQlpcnEpOworCQl3bTgzNTBfbWFza19pcnEod204MzUwLCBpcnEpOworCX0KKworCW11dGV4X3VubG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOworfQorCisvKgorICogVGhpcyBpcyBhIHRocmVhZGVkIElSUSBoYW5kbGVyIHNvIGNhbiBhY2Nlc3MgSTJDL1NQSS4gIFNpbmNlIGFsbAorICogaW50ZXJydXB0cyBhcmUgY2xlYXIgb24gcmVhZCB0aGUgSVJRIGxpbmUgd2lsbCBiZSByZWFzc2VydGVkIGFuZAorICogdGhlIHBoeXNpY2FsIElSUSB3aWxsIGJlIGhhbmRsZWQgYWdhaW4gaWYgYW5vdGhlciBpbnRlcnJ1cHQgaXMKKyAqIGFzc2VydGVkIHdoaWxlIHdlIHJ1biAtIGluIHRoZSBub3JtYWwgY291cnNlIG9mIGV2ZW50cyB0aGlzIGlzIGEKKyAqIHJhcmUgb2NjdXJyZW5jZSBzbyB3ZSBzYXZlIEkyQy9TUEkgcmVhZHMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzNTBfaXJxKGludCBpcnEsIHZvaWQgKmlycV9kYXRhKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGlycV9kYXRhOworCXUxNiBsZXZlbF9vbmU7CisJdTE2IHN1Yl9yZWdbV004MzUwX05VTV9JUlFfUkVHU107CisJaW50IHJlYWRfZG9uZVtXTTgzNTBfTlVNX0lSUV9SRUdTXTsKKwlzdHJ1Y3Qgd204MzUwX2lycV9kYXRhICpkYXRhOworCWludCBpOworCisJLyogVE9ETzogVXNlIGJsb2NrIHJlYWRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/ICovCisJbGV2ZWxfb25lID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTKQorCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSyk7CisKKwlpZiAoIWxldmVsX29uZSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJbWVtc2V0KCZyZWFkX2RvbmUsIDAsIHNpemVvZihyZWFkX2RvbmUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODM1MF9pcnFzKTsgaSsrKSB7CisJCWRhdGEgPSAmd204MzUwX2lycXNbaV07CisKKwkJaWYgKCEobGV2ZWxfb25lICYgZGF0YS0+cHJpbWFyeSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXJlYWRfZG9uZVtkYXRhLT5yZWddKSB7CisJCQlzdWJfcmVnW2RhdGEtPnJlZ10gPQorCQkJCXdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzEgKworCQkJCQkJZGF0YS0+cmVnKTsKKwkJCXN1Yl9yZWdbZGF0YS0+cmVnXSAmPQorCQkJCX53bTgzNTBfcmVnX3JlYWQod204MzUwLAorCQkJCQkJIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSyArCisJCQkJCQkgZGF0YS0+cmVnKTsKKwkJCXJlYWRfZG9uZVtkYXRhLT5yZWddID0gMTsKKwkJfQorCisJCWlmIChzdWJfcmVnW2RhdGEtPnJlZ10gJiBkYXRhLT5tYXNrKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBpKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCB3bTgzNTBfcmVnaXN0ZXJfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKKwkJCWlycV9oYW5kbGVyX3QgaGFuZGxlciwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJaWYgKGlycSA8IDAgfHwgaXJxID4gV004MzUwX05VTV9JUlEgfHwgIWhhbmRsZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCXdtODM1MC0+aXJxW2lycV0uZGF0YSA9IGRhdGE7CisJbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisKKwl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIGlycSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdpc3Rlcl9pcnEpOworCitpbnQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPiBXTTgzNTBfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTgzNTBfbWFza19pcnEod204MzUwLCBpcnEpOworCisJbXV0ZXhfbG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOworCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlciA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZnJlZV9pcnEpOworCitpbnQgd204MzUwX21hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsKKwkJCSAgICAgICB3bTgzNTBfaXJxc1tpcnFdLnJlZywKKwkJCSAgICAgICB3bTgzNTBfaXJxc1tpcnFdLm1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX21hc2tfaXJxKTsKKworaW50IHdtODM1MF91bm1hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKworCQkJCSB3bTgzNTBfaXJxc1tpcnFdLnJlZywKKwkJCQkgd204MzUwX2lycXNbaXJxXS5tYXNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF91bm1hc2tfaXJxKTsKKworaW50IHdtODM1MF9pcnFfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCisJCSAgICBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCByZXQ7CisJaW50IGZsYWdzID0gSVJRRl9PTkVTSE9UOworCisJaWYgKCFpcnEpIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIk5vIElSUSBjb25maWd1cmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9TWVNURU1fSU5URVJSVVBUU19NQVNLLCAweEZGRkYpOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssIDB4RkZGRik7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywgMHhGRkZGKTsKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLCAweEZGRkYpOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssIDB4RkZGRik7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywgMHhGRkZGKTsKKworCW11dGV4X2luaXQoJndtODM1MC0+aXJxX211dGV4KTsKKwl3bTgzNTAtPmNoaXBfaXJxID0gaXJxOworCisJaWYgKHBkYXRhICYmIHBkYXRhLT5pcnFfaGlnaCkgeworCQlmbGFncyB8PSBJUlFGX1RSSUdHRVJfSElHSDsKKworCQl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfU1lTVEVNX0NPTlRST0xfMSwKKwkJCQlXTTgzNTBfSVJRX1BPTCk7CisJfSBlbHNlIHsKKwkJZmxhZ3MgfD0gSVJRRl9UUklHR0VSX0xPVzsKKworCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9TWVNURU1fQ09OVFJPTF8xLAorCQkJCSAgV004MzUwX0lSUV9QT0wpOworCX0KKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwgTlVMTCwgd204MzUwX2lycSwgZmxhZ3MsCisJCQkJICAgIndtODM1MCIsIHdtODM1MCk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bTgzNTBfaXJxX2V4aXQoc3RydWN0IHdtODM1MCAqd204MzUwKQoreworCWZyZWVfaXJxKHdtODM1MC0+Y2hpcF9pcnEsIHdtODM1MCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMKaW5kZXggN2NjYzFlYS4uZTk2NTEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzUwLXJlZ21hcC5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1yZWdtYXAuYwpAQCAtMzE3MCwxNCArMzE3MCw2IEBACiB9OwogI2VuZGlmCiAKLS8qIFRoZSByZWdpc3RlciBkZWZhdWx0cyBmb3IgdGhlIGNvbmZpZyBtb2RlIHVzZWQgbXVzdCBiZSBjb21waWxlZCBpbiBidXQKLSAqIGR1ZSB0byB0aGUgaW1wYWN0IG9uIGtlcm5lbCBzaXplIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUKLSAqLwotI2lmbmRlZiBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQotI3dhcm5pbmcgTm8gV004MzUwIGNvbmZpZyBtb2RlcyBzdXBwb3J0ZWQgLSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZQotI3dhcm5pbmcgTUZEX1dNODM1MF9DT05GSUdfTU9ERV9uIG9wdGlvbnMgZnJvbSB0aGUgYm9hcmQgZHJpdmVyLgotI2VuZGlmCi0KIC8qCiAgKiBBY2Nlc3MgbWFza3MuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggMmMxNmNhNi4uZTM1NTFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTEzLDYgKzEzLDIwIEBACiAKIGlmIE1JU0NfREVWSUNFUwogCitjb25maWcgQUQ1MjVYX0RQT1QKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ1MjV4IERpZ2l0YWwgUG90ZW50aW9tZXRlcnMiCisJZGVwZW5kcyBvbiBJMkMgJiYgU1lTRlMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlLCB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcworCSAgQUQ1MjU4LCBBRDUyNTksIEFENTI1MSwgQUQ1MjUyLCBBRDUyNTMsIEFENTI1NCBhbmQgQUQ1MjU1CisJICBkaWdpdGFsIHBvdGVudGlvbWV0ZXIgY2hpcHMuCisKKwkgIFNlZSBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9hZDUyNXhfZHBvdC50eHQgZm9yIHRoZQorCSAgdXNlcnNwYWNlIGludGVyZmFjZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWQ1MjV4X2Rwb3QuCisKIGNvbmZpZyBBVE1FTF9QV00KIAl0cmlzdGF0ZSAiQXRtZWwgQVQzMi9BVDkxIFBXTSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxU0FNOTI2MyB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxQ0FQOQpAQCAtMTczLDYgKzE4NywzMSBAQAogCSAgdGhpcyBmZWF0dXJlIHdpbGwgYWxsb3cgZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIGJldHdlZW4gU1NJcwogCSAgYmFzZWQgb24gYSBuZXR3b3JrIGFkYXB0ZXIgYW5kIERNQSBtZXNzYWdpbmcuCiAKK2NvbmZpZyBDUzU1MzVfTUZHUFQKKwl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBHZW9kZSBNdWx0aS1GdW5jdGlvbiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKE1GR1BUKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhY2Nlc3MgdG8gTUZHUFQgZnVuY3Rpb25hbGl0eSBmb3Igb3RoZXIKKwkgIGRyaXZlcnMgdGhhdCBuZWVkIHRpbWVycy4gIE1GR1BUcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBDUzU1MzUgYW5kCisJICBDUzU1MzYgY29tcGFuaW9uIGNoaXBzIHRoYXQgYXJlIGZvdW5kIGluIEFNRCBHZW9kZSBhbmQgc2V2ZXJhbAorCSAgb3RoZXIgcGxhdGZvcm1zLiAgVGhleSBoYXZlIGEgYmV0dGVyIHJlc29sdXRpb24gYW5kIG1heCBpbnRlcnZhbAorCSAgdGhhbiB0aGUgZ2VuZXJpYyBQSVQsIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBhcyBoaWdoLXJlcyB0aW1lcnMuCisJICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBlbmFibGUgdGhpcyBtYW51YWxseTsgb3RoZXIgZHJpdmVycyB0aGF0CisJICBtYWtlIHVzZSBvZiBpdCBzaG91bGQgZW5hYmxlIGl0LgorCitjb25maWcgQ1M1NTM1X01GR1BUX0RFRkFVTFRfSVJRCisJaW50CisJZGVwZW5kcyBvbiBDUzU1MzVfTUZHUFQKKwlkZWZhdWx0IDcKKwloZWxwCisJICBNRkdQVHMgb24gdGhlIENTNTUzNSByZXF1aXJlIGFuIGludGVycnVwdC4gIFRoZSBzZWxlY3RlZCBJUlEKKwkgIGNhbiBiZSBvdmVycmlkZGVuIGFzIGEgbW9kdWxlIG9wdGlvbiBhcyB3ZWxsIGFzIGJ5IGRyaXZlciB0aGF0CisJICB1c2UgdGhlIGNzNTUzNV9tZmdwdF8gQVBJOyBob3dldmVyLCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBtaWdodAorCSAgd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgSVJRIGJ5IGRlZmF1bHQuICBUaGlzIGlzIGhlcmUgZm9yCisJICBhcmNoaXRlY3R1cmVzIHRvIHNldCBhcyBuZWNlc3NhcnkuCisKIGNvbmZpZyBIUF9JTE8KIAl0cmlzdGF0ZSAiQ2hhbm5lbCBpbnRlcmZhY2UgZHJpdmVyIGZvciBIUCBpTE8vaUxPMiBwcm9jZXNzb3IiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTIxMCwxOSArMjQ5LDYgQEAKIAlUaGlzIG9wdGlvbiBlbmFibGVzIGFkZGl0aW9uIGRlYnVnZ2luZyBjb2RlIGZvciB0aGUgU0dJIEdSVSBkcml2ZXIuIElmCiAJeW91IGFyZSB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgREVMTF9MQVBUT1AKLQl0cmlzdGF0ZSAiRGVsbCBMYXB0b3AgRXh0cmFzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gWDg2Ci0JZGVwZW5kcyBvbiBEQ0RCQVMKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQotCWRlcGVuZHMgb24gUkZLSUxMCi0JZGVwZW5kcyBvbiBQT1dFUl9TVVBQTFkKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciByZmtpbGwgYW5kIGJhY2tsaWdodCBjb250cm9sIHRvIERlbGwKLQlsYXB0b3BzLgotCiBjb25maWcgSVNMMjkwMDMKIAl0cmlzdGF0ZSAiSW50ZXJzaWwgSVNMMjkwMDMgYW1iaWVudCBsaWdodCBzZW5zb3IiCiAJZGVwZW5kcyBvbiBJMkMgJiYgU1lTRlMKQEAgLTI1Niw2ICsyODIsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGRzMTY4Mi4KIAorY29uZmlnIFRJX0RBQzc1MTIKKwl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgREFDNzUxMiIKKwlkZXBlbmRzIG9uIFNQSSAmJiBTWVNGUworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMKKwkgIERBQzc1MTIgMTYtYml0IGRpZ2l0YWwtdG8tYW5hbG9nIGNvbnZlcnRlci4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlcyB0aV9kYWM3NTEyLgorCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9jMnBvcnQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9taXNjL2VlcHJvbS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21pc2MvY2I3MTAvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQppbmRleCA5MDZhMGVkLi4wNDlmZjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBvYmotJChDT05GSUdfSUJNX0FTTSkJCSs9IGlibWFzbS8KIG9iai0kKENPTkZJR19IRFBVX0ZFQVRVUkVTKQkrPSBoZHB1ZnRycy8KK29iai0kKENPTkZJR19BRDUyNVhfRFBPVCkJKz0gYWQ1MjV4X2Rwb3Qubwogb2JqLSQoQ09ORklHX0FUTUVMX1BXTSkJCSs9IGF0bWVsX3B3bS5vCiBvYmotJChDT05GSUdfQVRNRUxfU1NDKQkJKz0gYXRtZWwtc3NjLm8KIG9iai0kKENPTkZJR19BVE1FTF9UQ0xJQikJKz0gYXRtZWxfdGNsaWIubwpAQCAtMTcsMTAgKzE4LDEyIEBACiBvYmotJChDT05GSUdfS0dEQl9URVNUUykJKz0ga2dkYnRzLm8KIG9iai0kKENPTkZJR19TR0lfWFApCQkrPSBzZ2kteHAvCiBvYmotJChDT05GSUdfU0dJX0dSVSkJCSs9IHNnaS1ncnUvCitvYmotJChDT05GSUdfQ1M1NTM1X01GR1BUKQkrPSBjczU1MzUtbWZncHQubwogb2JqLSQoQ09ORklHX0hQX0lMTykJCSs9IGhwaWxvLm8KIG9iai0kKENPTkZJR19JU0wyOTAwMykJCSs9IGlzbDI5MDAzLm8KIG9iai0kKENPTkZJR19FUDkzWFhfUFdNKQkrPSBlcDkzeHhfcHdtLm8KIG9iai0kKENPTkZJR19EUzE2ODIpCQkrPSBkczE2ODIubworb2JqLSQoQ09ORklHX1RJX0RBQzc1MTIpCSs9IHRpX2RhYzc1MTIubwogb2JqLSQoQ09ORklHX0MyUE9SVCkJCSs9IGMycG9ydC8KIG9iai0kKENPTkZJR19JV01DMzIwMFRPUCkgICAgICArPSBpd21jMzIwMHRvcC8KIG9iai15CQkJCSs9IGVlcHJvbS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9hZDUyNXhfZHBvdC5jIGIvZHJpdmVycy9taXNjL2FkNTI1eF9kcG90LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhNTlmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9hZDUyNXhfZHBvdC5jCkBAIC0wLDAgKzEsNjY2IEBACisvKgorICogYWQ1MjV4X2Rwb3Q6IERyaXZlciBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFENTI1eCBkaWdpdGFsIHBvdGVudGlvbWV0ZXJzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQW5hbG9nIERldmljZXMsIEluYy4KKyAqIEF1dGhvcjogTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KKyAqCisgKiBERVZJRAkJI1dpcGVycwkJI1Bvc2l0aW9ucyAJUmVzaXN0b3IgT3B0aW9ucyAoa09obSkKKyAqIEFENTI1OAkJMQkJNjQJCTEsIDEwLCA1MCwgMTAwCisgKiBBRDUyNTkJCTEJCTI1NgkJNSwgMTAsIDUwLCAxMDAKKyAqIEFENTI1MQkJMgkJNjQJCTEsIDEwLCA1MCwgMTAwCisgKiBBRDUyNTIJCTIJCTI1NgkJMSwgMTAsIDUwLCAxMDAKKyAqIEFENTI1NQkJMwkJNTEyCQkyNSwgMjUwCisgKiBBRDUyNTMJCTQJCTY0CQkxLCAxMCwgNTAsIDEwMAorICogQUQ1MjU0CQk0CQkyNTYJCTEsIDEwLCA1MCwgMTAwCisgKgorICogU2VlIERvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2FkNTI1eF9kcG90LnR4dCBmb3IgbW9yZSBpbmZvLgorICoKKyAqIGRlcml2ZWQgZnJvbSBhZDUyNTguYworICogQ29weXJpZ2h0IChjKSAyMDA5IEN5YmVyIFN3aXRjaGluZywgSW5jLgorICogQXV0aG9yOiBDaHJpcyBWZXJnZXMgPGNocmlzdkBjeWJlcnN3aXRjaGluZy5jb20+CisgKgorICogZGVyaXZlZCBmcm9tIGFkNTI1Mi5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRQkJCSJhZDUyNXhfZHBvdCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCQkiMC4xIgorCitlbnVtIGRwb3RfZGV2aWQgeworCUFENTI1OF9JRCwKKwlBRDUyNTlfSUQsCisJQUQ1MjUxX0lELAorCUFENTI1Ml9JRCwKKwlBRDUyNTNfSUQsCisJQUQ1MjU0X0lELAorCUFENTI1NV9JRCwKK307CisKKyNkZWZpbmUgQUQ1MjU4X01BWF9QT1NJVElPTgkJNjQKKyNkZWZpbmUgQUQ1MjU5X01BWF9QT1NJVElPTgkJMjU2CisjZGVmaW5lIEFENTI1MV9NQVhfUE9TSVRJT04JCTY0CisjZGVmaW5lIEFENTI1Ml9NQVhfUE9TSVRJT04JCTI1NgorI2RlZmluZSBBRDUyNTNfTUFYX1BPU0lUSU9OCQk2NAorI2RlZmluZSBBRDUyNTRfTUFYX1BPU0lUSU9OCQkyNTYKKyNkZWZpbmUgQUQ1MjU1X01BWF9QT1NJVElPTgkJNTEyCisKKyNkZWZpbmUgQUQ1MjVYX1JEQUMwCQkwCisjZGVmaW5lIEFENTI1WF9SREFDMQkJMQorI2RlZmluZSBBRDUyNVhfUkRBQzIJCTIKKyNkZWZpbmUgQUQ1MjVYX1JEQUMzCQkzCisKKyNkZWZpbmUgQUQ1MjVYX1JFR19UT0wJCTB4MTgKKyNkZWZpbmUgQUQ1MjVYX1RPTF9SREFDMAkoQUQ1MjVYX1JFR19UT0wgfCBBRDUyNVhfUkRBQzApCisjZGVmaW5lIEFENTI1WF9UT0xfUkRBQzEJKEFENTI1WF9SRUdfVE9MIHwgQUQ1MjVYX1JEQUMxKQorI2RlZmluZSBBRDUyNVhfVE9MX1JEQUMyCShBRDUyNVhfUkVHX1RPTCB8IEFENTI1WF9SREFDMikKKyNkZWZpbmUgQUQ1MjVYX1RPTF9SREFDMwkoQUQ1MjVYX1JFR19UT0wgfCBBRDUyNVhfUkRBQzMpCisKKy8qIFJEQUMtdG8tRUVQUk9NIEludGVyZmFjZSBDb21tYW5kcyAqLworI2RlZmluZSBBRDUyNVhfSTJDX1JEQUMJCSgweDAwIDw8IDUpCisjZGVmaW5lIEFENTI1WF9JMkNfRUVQUk9NCSgweDAxIDw8IDUpCisjZGVmaW5lIEFENTI1WF9JMkNfQ01ECQkoMHg4MCkKKworI2RlZmluZSBBRDUyNVhfREVDX0FMTF82REIJKEFENTI1WF9JMkNfQ01EIHwgKDB4NCA8PCAzKSkKKyNkZWZpbmUgQUQ1MjVYX0lOQ19BTExfNkRCCShBRDUyNVhfSTJDX0NNRCB8ICgweDkgPDwgMykpCisjZGVmaW5lIEFENTI1WF9ERUNfQUxMCQkoQUQ1MjVYX0kyQ19DTUQgfCAoMHg2IDw8IDMpKQorI2RlZmluZSBBRDUyNVhfSU5DX0FMTAkJKEFENTI1WF9JMkNfQ01EIHwgKDB4QiA8PCAzKSkKKworc3RhdGljIHMzMiBhZDUyNXhfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOworc3RhdGljIHMzMiBhZDUyNXhfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSk7CisKKy8qCisgKiBDbGllbnQgZGF0YSAoZWFjaCBjbGllbnQgZ2V0cyBpdHMgb3duKQorICovCisKK3N0cnVjdCBkcG90X2RhdGEgeworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKKwl1bnNpZ25lZCByZGFjX21hc2s7CisJdW5zaWduZWQgbWF4X3BvczsKKwl1bnNpZ25lZCBkZXZpZDsKK307CisKKy8qIHN5c2ZzIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgc3NpemVfdCBzeXNmc19zaG93X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLCB1MzIgcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGRwb3RfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXMzMiB2YWx1ZTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwl2YWx1ZSA9IGFkNTI1eF9yZWFkKGNsaWVudCwgcmVnKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCS8qCisJICogTGV0IHNvbWVvbmUgZWxzZSBkZWFsIHdpdGggY29udmVydGluZyB0aGlzIC4uLgorCSAqIHRoZSB0b2xlcmFuY2UgaXMgYSB0d28tYnl0ZSB2YWx1ZSB3aGVyZSB0aGUgTVNCCisJICogaXMgYSBzaWduICsgaW50ZWdlciB2YWx1ZSwgYW5kIHRoZSBMU0IgaXMgYQorCSAqIGRlY2ltYWwgdmFsdWUuICBTZWUgcGFnZSAxOCBvZiB0aGUgQUQ1MjU4CisJICogZGF0YXNoZWV0IChSZXYuIEEpIGZvciBtb3JlIGRldGFpbHMuCisJICovCisKKwlpZiAocmVnICYgQUQ1MjVYX1JFR19UT0wpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0eFxuIiwgdmFsdWUgJiAweEZGRkYpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbHVlICYgZGF0YS0+cmRhY19tYXNrKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3lzZnNfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgdTMyIHJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkcG90X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAodmFsdWUgPiBkYXRhLT5yZGFjX21hc2spCisJCXZhbHVlID0gZGF0YS0+cmRhY19tYXNrOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWFkNTI1eF93cml0ZShjbGllbnQsIHJlZywgdmFsdWUpOworCWlmIChyZWcgJiBBRDUyNVhfSTJDX0VFUFJPTSkKKwkJbXNsZWVwKDI2KTsJLyogU2xlZXAgd2hpbGUgdGhlIEVFUFJPTSB1cGRhdGVzICovCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2RvX2NtZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIHUzMiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgZHBvdF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJYWQ1MjV4X3dyaXRlKGNsaWVudCwgcmVnLCAwKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3JkYWMwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsIEFENTI1WF9JMkNfUkRBQyB8IEFENTI1WF9SREFDMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yZGFjMChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX1JEQUMgfCBBRDUyNVhfUkRBQzApOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocmRhYzAsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JkYWMwLCBzZXRfcmRhYzApOworCitzdGF0aWMgc3NpemVfdCBzaG93X2VlcHJvbTAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHN5c2ZzX3Nob3dfcmVnKGRldiwgYXR0ciwgYnVmLCBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9lZXByb20wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlZXByb20wLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19lZXByb20wLCBzZXRfZWVwcm9tMCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdG9sZXJhbmNlMChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsCisJCQkgICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9UT0xfUkRBQzApOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodG9sZXJhbmNlMCwgU19JUlVHTywgc2hvd190b2xlcmFuY2UwLCBOVUxMKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3JkYWMxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsIEFENTI1WF9JMkNfUkRBQyB8IEFENTI1WF9SREFDMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yZGFjMShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX1JEQUMgfCBBRDUyNVhfUkRBQzEpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocmRhYzEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JkYWMxLCBzZXRfcmRhYzEpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2VlcHJvbTEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHN5c2ZzX3Nob3dfcmVnKGRldiwgYXR0ciwgYnVmLCBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9lZXByb20xKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlZXByb20xLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19lZXByb20xLCBzZXRfZWVwcm9tMSk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdG9sZXJhbmNlMShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsCisJCQkgICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9UT0xfUkRBQzEpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodG9sZXJhbmNlMSwgU19JUlVHTywgc2hvd190b2xlcmFuY2UxLCBOVUxMKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3JkYWMyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsIEFENTI1WF9JMkNfUkRBQyB8IEFENTI1WF9SREFDMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yZGFjMihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX1JEQUMgfCBBRDUyNVhfUkRBQzIpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocmRhYzIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JkYWMyLCBzZXRfcmRhYzIpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2VlcHJvbTIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHN5c2ZzX3Nob3dfcmVnKGRldiwgYXR0ciwgYnVmLCBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9lZXByb20yKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMik7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlZXByb20yLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19lZXByb20yLCBzZXRfZWVwcm9tMik7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdG9sZXJhbmNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsCisJCQkgICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9UT0xfUkRBQzIpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodG9sZXJhbmNlMiwgU19JUlVHTywgc2hvd190b2xlcmFuY2UyLCBOVUxMKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3JkYWMzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsIEFENTI1WF9JMkNfUkRBQyB8IEFENTI1WF9SREFDMyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yZGFjMyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX1JEQUMgfCBBRDUyNVhfUkRBQzMpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocmRhYzMsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JkYWMzLCBzZXRfcmRhYzMpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2VlcHJvbTMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHN5c2ZzX3Nob3dfcmVnKGRldiwgYXR0ciwgYnVmLCBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9lZXByb20zKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX3NldF9yZWcoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9SREFDMyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlZXByb20zLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19lZXByb20zLCBzZXRfZWVwcm9tMyk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdG9sZXJhbmNlMyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3lzZnNfc2hvd19yZWcoZGV2LCBhdHRyLCBidWYsCisJCQkgICAgICBBRDUyNVhfSTJDX0VFUFJPTSB8IEFENTI1WF9UT0xfUkRBQzMpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodG9sZXJhbmNlMywgU19JUlVHTywgc2hvd190b2xlcmFuY2UzLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNTI1eF9hdHRyaWJ1dGVzX3dpcGVyc1s0XVs0XSA9IHsKKwl7CisJCSZkZXZfYXR0cl9yZGFjMC5hdHRyLAorCQkmZGV2X2F0dHJfZWVwcm9tMC5hdHRyLAorCQkmZGV2X2F0dHJfdG9sZXJhbmNlMC5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmZGV2X2F0dHJfcmRhYzEuYXR0ciwKKwkJJmRldl9hdHRyX2VlcHJvbTEuYXR0ciwKKwkJJmRldl9hdHRyX3RvbGVyYW5jZTEuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJmRldl9hdHRyX3JkYWMyLmF0dHIsCisJCSZkZXZfYXR0cl9lZXByb20yLmF0dHIsCisJCSZkZXZfYXR0cl90b2xlcmFuY2UyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZkZXZfYXR0cl9yZGFjMy5hdHRyLAorCQkmZGV2X2F0dHJfZWVwcm9tMy5hdHRyLAorCQkmZGV2X2F0dHJfdG9sZXJhbmNlMy5hdHRyLAorCQlOVUxMCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ1MjV4X2dyb3VwX3dpcGVyc1tdID0geworCXsuYXR0cnMgPSBhZDUyNXhfYXR0cmlidXRlc193aXBlcnNbQUQ1MjVYX1JEQUMwXX0sCisJey5hdHRycyA9IGFkNTI1eF9hdHRyaWJ1dGVzX3dpcGVyc1tBRDUyNVhfUkRBQzFdfSwKKwl7LmF0dHJzID0gYWQ1MjV4X2F0dHJpYnV0ZXNfd2lwZXJzW0FENTI1WF9SREFDMl19LAorCXsuYXR0cnMgPSBhZDUyNXhfYXR0cmlidXRlc193aXBlcnNbQUQ1MjVYX1JEQUMzXX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzc2l6ZV90IHNldF9pbmNfYWxsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX2RvX2NtZChkZXYsIGF0dHIsIGJ1ZiwgY291bnQsIEFENTI1WF9JTkNfQUxMKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGluY19hbGwsIFNfSVdVU1IsIE5VTEwsIHNldF9pbmNfYWxsKTsKKworc3RhdGljIHNzaXplX3Qgc2V0X2RlY19hbGwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gc3lzZnNfZG9fY21kKGRldiwgYXR0ciwgYnVmLCBjb3VudCwgQUQ1MjVYX0RFQ19BTEwpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZGVjX2FsbCwgU19JV1VTUiwgTlVMTCwgc2V0X2RlY19hbGwpOworCitzdGF0aWMgc3NpemVfdCBzZXRfaW5jX2FsbF82ZGIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBzeXNmc19kb19jbWQoZGV2LCBhdHRyLCBidWYsIGNvdW50LCBBRDUyNVhfSU5DX0FMTF82REIpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaW5jX2FsbF82ZGIsIFNfSVdVU1IsIE5VTEwsIHNldF9pbmNfYWxsXzZkYik7CisKK3N0YXRpYyBzc2l6ZV90IHNldF9kZWNfYWxsXzZkYihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN5c2ZzX2RvX2NtZChkZXYsIGF0dHIsIGJ1ZiwgY291bnQsIEFENTI1WF9ERUNfQUxMXzZEQik7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWNfYWxsXzZkYiwgU19JV1VTUiwgTlVMTCwgc2V0X2RlY19hbGxfNmRiKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNTI1eF9hdHRyaWJ1dGVzX2NvbW1hbmRzW10gPSB7CisJJmRldl9hdHRyX2luY19hbGwuYXR0ciwKKwkmZGV2X2F0dHJfZGVjX2FsbC5hdHRyLAorCSZkZXZfYXR0cl9pbmNfYWxsXzZkYi5hdHRyLAorCSZkZXZfYXR0cl9kZWNfYWxsXzZkYi5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkNTI1eF9ncm91cF9jb21tYW5kcyA9IHsKKwkuYXR0cnMgPSBhZDUyNXhfYXR0cmlidXRlc19jb21tYW5kcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGRldmljZSBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBhZDUyNXhfcmVhZCAtIHJldHVybiB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIKKyAqIG9uIHRoZSBBRDUyNTggZGV2aWNlLgorICogQGNsaWVudDogdmFsdWUgcmV0dXJuZWQgZnJvbSBpMmNfbmV3X2RldmljZSgpCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICoKKyAqIElmIHRoZSB0b2xlcmFuY2UgcmVnaXN0ZXIgaXMgc3BlY2lmaWVkLCAyIGJ5dGVzIGFyZSByZXR1cm5lZC4KKyAqIE90aGVyd2lzZSwgMSBieXRlIGlzIHJldHVybmVkLiAgQSBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IKKyAqIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIHJlZ2lzdGVyLgorICovCitzdGF0aWMgczMyIGFkNTI1eF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwlzdHJ1Y3QgZHBvdF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoKHJlZyAmIEFENTI1WF9SRUdfVE9MKSB8fCAoZGF0YS0+bWF4X3BvcyA+IDI1NikpCisJCXJldHVybiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAocmVnICYgMHhGOCkgfAorCQkJCQkJKChyZWcgJiAweDcpIDw8IDEpKTsKKwllbHNlCisJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworfQorCisvKioKKyAqIGFkNTI1eF93cml0ZSAtIHN0b3JlIHRoZSBnaXZlbiB2YWx1ZSBpbiB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyIG9uCisgKiB0aGUgQUQ1MjU4IGRldmljZS4KKyAqIEBjbGllbnQ6IHZhbHVlIHJldHVybmVkIGZyb20gaTJjX25ld19kZXZpY2UoKQorICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHdyaXRlCisgKiBAdmFsdWU6IHRoZSBieXRlIHRvIHN0b3JlIGluIHRoZSByZWdpc3RlcgorICoKKyAqIEZvciBjZXJ0YWluIGluc3RydWN0aW9ucyB0aGF0IGRvIG5vdCByZXF1aXJlIGEgZGF0YSBieXRlLCAiTlVMTCIKKyAqIHNob3VsZCBiZSBzcGVjaWZpZWQgZm9yIHRoZSAidmFsdWUiIHBhcmFtZXRlci4gIFRoZXNlIGluc3RydWN0aW9ucworICogaW5jbHVkZSBOT1AsIFJFU1RPUkVfRlJPTV9FRVBST00sIGFuZCBTVE9SRV9UT19FRVBST00uCisgKgorICogQSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcKKyAqIHRoZSByZWdpc3Rlci4KKyAqLworc3RhdGljIHMzMiBhZDUyNXhfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHBvdF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwkvKiBPbmx5IHdyaXRlIHRoZSBpbnN0cnVjdGlvbiBieXRlIGZvciBjZXJ0YWluIGNvbW1hbmRzICovCisJaWYgKHJlZyAmIEFENTI1WF9JMkNfQ01EKQorCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCByZWcpOworCisJaWYgKGRhdGEtPm1heF9wb3MgPiAyNTYpCisJCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgKHJlZyAmIDB4RjgpIHwKKwkJCQkJCSgocmVnICYgMHg3KSA8PCAxKSwgdmFsdWUpOworCWVsc2UKKwkJLyogQWxsIG90aGVyIHJlZ2lzdGVycyByZXF1aXJlIGluc3RydWN0aW9uICsgZGF0YSBieXRlcyAqLworCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IGFkNTI1eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlzdHJ1Y3QgZHBvdF9kYXRhICpkYXRhOworCWludCBlcnIgPSAwOworCisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEUpKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBJMkMgZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBkcml2ZXJcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcG90X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXN3aXRjaCAoaWQtPmRyaXZlcl9kYXRhKSB7CisJY2FzZSBBRDUyNThfSUQ6CisJCWRhdGEtPm1heF9wb3MgPSBBRDUyNThfTUFYX1BPU0lUSU9OOworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMwXSk7CisJCWJyZWFrOworCWNhc2UgQUQ1MjU5X0lEOgorCQlkYXRhLT5tYXhfcG9zID0gQUQ1MjU5X01BWF9QT1NJVElPTjsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMF0pOworCQlicmVhazsKKwljYXNlIEFENTI1MV9JRDoKKwkJZGF0YS0+bWF4X3BvcyA9IEFENTI1MV9NQVhfUE9TSVRJT047CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzFdKTsKKwkJZXJyIHw9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzNdKTsKKwkJZXJyIHw9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWQ1MjV4X2dyb3VwX2NvbW1hbmRzKTsKKwkJYnJlYWs7CisJY2FzZSBBRDUyNTJfSUQ6CisJCWRhdGEtPm1heF9wb3MgPSBBRDUyNTJfTUFYX1BPU0lUSU9OOworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMxXSk7CisJCWVyciB8PSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMzXSk7CisJCWVyciB8PSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmFkNTI1eF9ncm91cF9jb21tYW5kcyk7CisJCWJyZWFrOworCWNhc2UgQUQ1MjUzX0lEOgorCQlkYXRhLT5tYXhfcG9zID0gQUQ1MjUzX01BWF9QT1NJVElPTjsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMF0pOworCQllcnIgfD0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMV0pOworCQllcnIgfD0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMl0pOworCQllcnIgfD0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDM10pOworCQllcnIgfD0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZhZDUyNXhfZ3JvdXBfY29tbWFuZHMpOworCQlicmVhazsKKwljYXNlIEFENTI1NF9JRDoKKwkJZGF0YS0+bWF4X3BvcyA9IEFENTI1NF9NQVhfUE9TSVRJT047CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzBdKTsKKwkJZXJyIHw9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzFdKTsKKwkJZXJyIHw9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzJdKTsKKwkJZXJyIHw9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzNdKTsKKwkJZXJyIHw9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWQ1MjV4X2dyb3VwX2NvbW1hbmRzKTsKKwkJYnJlYWs7CisJY2FzZSBBRDUyNTVfSUQ6CisJCWRhdGEtPm1heF9wb3MgPSBBRDUyNTVfTUFYX1BPU0lUSU9OOworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMwXSk7CisJCWVyciB8PSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMxXSk7CisJCWVyciB8PSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMyXSk7CisJCWVyciB8PSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmFkNTI1eF9ncm91cF9jb21tYW5kcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZnMgaG9va3NcbiIpOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwlkYXRhLT5kZXZpZCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlkYXRhLT5yZGFjX21hc2sgPSBkYXRhLT5tYXhfcG9zIC0gMTsKKworCWRldl9pbmZvKGRldiwgIiVzICVkLVBvc2l0aW9uIERpZ2l0YWwgUG90ZW50aW9tZXRlciByZWdpc3RlcmVkXG4iLAorCQkgaWQtPm5hbWUsIGRhdGEtPm1heF9wb3MpOworCisJcmV0dXJuIDA7CisKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKK2V4aXQ6CisJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGNsaWVudFxuIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWQ1MjV4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkcG90X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisKKwlzd2l0Y2ggKGRhdGEtPmRldmlkKSB7CisJY2FzZSBBRDUyNThfSUQ6CisJY2FzZSBBRDUyNTlfSUQ6CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMF0pOworCQlicmVhazsKKwljYXNlIEFENTI1MV9JRDoKKwljYXNlIEFENTI1Ml9JRDoKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMxXSk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDM10pOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmFkNTI1eF9ncm91cF9jb21tYW5kcyk7CisJCWJyZWFrOworCWNhc2UgQUQ1MjUzX0lEOgorCWNhc2UgQUQ1MjU0X0lEOgorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzBdKTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMxXSk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMl0pOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzNdKTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZhZDUyNXhfZ3JvdXBfY29tbWFuZHMpOworCQlicmVhazsKKwljYXNlIEFENTI1NV9JRDoKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgJmFkNTI1eF9ncm91cF93aXBlcnNbQUQ1MjVYX1JEQUMwXSk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICZhZDUyNXhfZ3JvdXBfd2lwZXJzW0FENTI1WF9SREFDMV0pOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAmYWQ1MjV4X2dyb3VwX3dpcGVyc1tBRDUyNVhfUkRBQzJdKTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZhZDUyNXhfZ3JvdXBfY29tbWFuZHMpOworCQlicmVhazsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWQ1MjV4X2lkdGFibGVbXSA9IHsKKwl7ImFkNTI1OCIsIEFENTI1OF9JRH0sCisJeyJhZDUyNTkiLCBBRDUyNTlfSUR9LAorCXsiYWQ1MjUxIiwgQUQ1MjUxX0lEfSwKKwl7ImFkNTI1MiIsIEFENTI1Ml9JRH0sCisJeyJhZDUyNTMiLCBBRDUyNTNfSUR9LAorCXsiYWQ1MjU0IiwgQUQ1MjU0X0lEfSwKKwl7ImFkNTI1NSIsIEFENTI1NV9JRH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZDUyNXhfaWR0YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZDUyNXhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICB9LAorCS5pZF90YWJsZSA9IGFkNTI1eF9pZHRhYmxlLAorCS5wcm9iZSA9IGFkNTI1eF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWQ1MjV4X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZDUyNXhfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWQ1MjV4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFkNTI1eF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFkNTI1eF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFkNTI1eF9kcml2ZXIpOworfQorCittb2R1bGVfZXhpdChhZDUyNXhfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzIFZlcmdlcyA8Y2hyaXN2QGN5YmVyc3dpdGNoaW5nLmNvbT4sICIKKwkgICAgICAiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4sICIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRDUyNTgvOSBkaWdpdGFsIHBvdGVudGlvbWV0ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMgYi9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExMDQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIENTNTUzNS9DUzU1MzYgTXVsdGktRnVuY3Rpb24gR2VuZXJhbCBQdXJwb3NlIFRpbWVycyAoTUZHUFQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBkZWJpYW4ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAY29sbGFib3JhLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIE1GR1BUcyBhcmUgZG9jdW1lbnRlZCBpbiBBTUQgR2VvZGUgQ1M1NTM2IENvbXBhbmlvbiBEZXZpY2UgRGF0YSBCb29rLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgorCisjZGVmaW5lIERSVl9OQU1FICJjczU1MzUtbWZncHQiCisjZGVmaW5lIE1GR1BUX0JBUiAyCisKK3N0YXRpYyBpbnQgbWZncHRfcmVzZXRfdGltZXJzOworbW9kdWxlX3BhcmFtX25hbWVkKG1mZ3B0Zml4LCBtZmdwdF9yZXNldF90aW1lcnMsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1mZ3B0Zml4LCAiUmVzZXQgdGhlIE1GR1BUIHRpbWVycyBkdXJpbmcgaW5pdDsgIgorCQkicmVxdWlyZWQgYnkgc29tZSBicm9rZW4gQklPU2VzIChpZSwgVGlueUJJT1MgPCAwLjk5KS4iKTsKKworc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciB7CisJc3RydWN0IGNzNTUzNV9tZmdwdF9jaGlwICpjaGlwOworCWludCBucjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3M1NTM1X21mZ3B0X2NoaXAgeworCURFQ0xBUkVfQklUTUFQKGF2YWlsLCBNRkdQVF9NQVhfVElNRVJTKTsKKwlyZXNvdXJjZV9zaXplX3QgYmFzZTsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgaW5pdGlhbGl6ZWQ7Cit9IGNzNTUzNV9tZmdwdF9jaGlwOworCitpbnQgY3M1NTM1X21mZ3B0X3RvZ2dsZV9ldmVudChzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICp0aW1lciwgaW50IGNtcCwKKwkJaW50IGV2ZW50LCBpbnQgZW5hYmxlKQoreworCXVpbnQzMl90IG1zciwgbWFzaywgdmFsdWUsIGR1bW15OworCWludCBzaGlmdCA9IChjbXAgPT0gTUZHUFRfQ01QMSkgPyAwIDogODsKKworCWlmICghdGltZXIpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgbWFwcyBmb3IgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9ucyA2LjE3LjEueCBvZgorCSAqIHRoZSBBTUQgR2VvZGUgQ1M1NTM2IENvbXBhbmlvbiBEZXZpY2UgRGF0YSBCb29rLgorCSAqLworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1GR1BUX0VWRU5UX1JFU0VUOgorCQkvKgorCQkgKiBYWFg6IEFjY29yZGluZyB0byB0aGUgZG9jcywgd2UgY2Fubm90IHJlc2V0IHRpbWVycyBhYm92ZQorCQkgKiA2OyB0aGF0IGlzLCByZXNldHMgZm9yIDcgYW5kIDggd2lsbCBiZSBpZ25vcmVkLiAgSXMgdGhpcworCQkgKiBhIHByb2JsZW0/ICAgLWRpbGluZ2VyCisJCSAqLworCQltc3IgPSBNU1JfTUZHUFRfTlI7CisJCW1hc2sgPSAxIDw8ICh0aW1lci0+bnIgKyAyNCk7CisJCWJyZWFrOworCisJY2FzZSBNRkdQVF9FVkVOVF9OTUk6CisJCW1zciA9IE1TUl9NRkdQVF9OUjsKKwkJbWFzayA9IDEgPDwgKHRpbWVyLT5uciArIHNoaWZ0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1GR1BUX0VWRU5UX0lSUToKKwkJbXNyID0gTVNSX01GR1BUX0lSUTsKKwkJbWFzayA9IDEgPDwgKHRpbWVyLT5uciArIHNoaWZ0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZG1zcihtc3IsIHZhbHVlLCBkdW1teSk7CisKKwlpZiAoZW5hYmxlKQorCQl2YWx1ZSB8PSBtYXNrOworCWVsc2UKKwkJdmFsdWUgJj0gfm1hc2s7CisKKwl3cm1zcihtc3IsIHZhbHVlLCBkdW1teSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjczU1MzVfbWZncHRfdG9nZ2xlX2V2ZW50KTsKKworaW50IGNzNTUzNV9tZmdwdF9zZXRfaXJxKHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyLCBpbnQgY21wLCBpbnQgKmlycSwKKwkJaW50IGVuYWJsZSkKK3sKKwl1aW50MzJfdCB6c2VsLCBscGMsIGR1bW15OworCWludCBzaGlmdDsKKworCWlmICghdGltZXIpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBNRkdQVHMgY29tZSBpbiBwYWlycyBzaGFyaW5nIHRoZWlyIElSUSBsaW5lcy4gSWYgVlNBCisJICogaXMgdXNpbmcgdGhlIHNhbWUgQ01QIG9mIHRoZSB0aW1lcidzIFNpYW1lc2UgdHdpbiwgdGhlIElSUSBpcyBzZXQgdG8KKwkgKiAyLCBhbmQgd2UgbXVzdG4ndCB1c2Ugbm9yIGNoYW5nZSBpdC4KKwkgKiBYWFg6IExpa2V3aXNlLCAyIExpbnV4IGRyaXZlcnMgbWlnaHQgY2xhc2ggaWYgdGhlIDJuZCBvdmVyd3JpdGVzIHRoZQorCSAqIElSUSBvZiB0aGUgMXN0LiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBmb3JjaW5nIGFuIElSUSwgY2FsbGluZyB0aGlzCisJICogd2l0aCAqaXJxPT0wIGlzIHNhZmUuIEN1cnJlbnRseSB0aGVyZSBfYXJlXyBubyAyIGRyaXZlcnMuCisJICovCisJcmRtc3IoTVNSX1BJQ19aU0VMX0xPVywgenNlbCwgZHVtbXkpOworCXNoaWZ0ID0gKChjbXAgPT0gTUZHUFRfQ01QMSA/IDAgOiA0KSArIHRpbWVyLT5uciAlIDQpICogNDsKKwlpZiAoKCh6c2VsID4+IHNoaWZ0KSAmIDB4RikgPT0gMikKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBDaG9vc2UgSVJROiBpZiBub25lIHN1cHBsaWVkLCBrZWVwIElSUSBhbHJlYWR5IHNldCBvciB1c2UgZGVmYXVsdCAqLworCWlmICghKmlycSkKKwkJKmlycSA9ICh6c2VsID4+IHNoaWZ0KSAmIDB4RjsKKwlpZiAoISppcnEpCisJCSppcnEgPSBDT05GSUdfQ1M1NTM1X01GR1BUX0RFRkFVTFRfSVJROworCisJLyogQ2FuJ3QgdXNlIElSUSBpZiBpdCdzIDAgKD1kaXNhYmxlZCksIDIsIG9yIHJvdXRlZCB0byBMUEMgKi8KKwlpZiAoKmlycSA8IDEgfHwgKmlycSA9PSAyIHx8ICppcnEgPiAxNSkKKwkJcmV0dXJuIC1FSU87CisJcmRtc3IoTVNSX1BJQ19JUlFNX0xQQywgbHBjLCBkdW1teSk7CisJaWYgKGxwYyAmICgxIDw8ICppcnEpKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIEFsbCBjaG9zZW4gYW5kIGNoZWNrZWQgLSBnbyBmb3IgaXQgKi8KKwlpZiAoY3M1NTM1X21mZ3B0X3RvZ2dsZV9ldmVudCh0aW1lciwgY21wLCBNRkdQVF9FVkVOVF9JUlEsIGVuYWJsZSkpCisJCXJldHVybiAtRUlPOworCWlmIChlbmFibGUpIHsKKwkJenNlbCA9ICh6c2VsICYgfigweEYgPDwgc2hpZnQpKSB8ICgqaXJxIDw8IHNoaWZ0KTsKKwkJd3Jtc3IoTVNSX1BJQ19aU0VMX0xPVywgenNlbCwgZHVtbXkpOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3M1NTM1X21mZ3B0X3NldF9pcnEpOworCitzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICpjczU1MzVfbWZncHRfYWxsb2NfdGltZXIoaW50IHRpbWVyX25yLCBpbnQgZG9tYWluKQoreworCXN0cnVjdCBjczU1MzVfbWZncHRfY2hpcCAqbWZncHQgPSAmY3M1NTM1X21mZ3B0X2NoaXA7CisJc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqdGltZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG1heDsKKworCWlmICghbWZncHQtPmluaXRpYWxpemVkKQorCQlnb3RvIGRvbmU7CisKKwkvKiBvbmx5IGFsbG9jYXRlIHRpbWVycyBmcm9tIHRoZSB3b3JraW5nIGRvbWFpbiBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoZG9tYWluID09IE1GR1BUX0RPTUFJTl9XT1JLSU5HKQorCQltYXggPSA2OworCWVsc2UKKwkJbWF4ID0gTUZHUFRfTUFYX1RJTUVSUzsKKworCWlmICh0aW1lcl9uciA+PSBtYXgpIHsKKwkJLyogcHJvZ3JhbW1lciBlcnJvci4gIHNpbGx5IHByb2dyYW1tZXJzISAqLworCQlXQVJOX09OKDEpOworCQlnb3RvIGRvbmU7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1mZ3B0LT5sb2NrLCBmbGFncyk7CisJaWYgKHRpbWVyX25yIDwgMCkgeworCQl1bnNpZ25lZCBsb25nIHQ7CisKKwkJLyogdHJ5IHRvIGZpbmQgYW55IGF2YWlsYWJsZSB0aW1lciAqLworCQl0ID0gZmluZF9maXJzdF9iaXQobWZncHQtPmF2YWlsLCBtYXgpOworCQkvKiBzZXQgdGltZXJfbnIgdG8gLTEgaWYgbm8gdGltZXJzIGF2YWlsYWJsZSAqLworCQl0aW1lcl9uciA9IHQgPCBtYXggPyAoaW50KSB0IDogLTE7CisJfSBlbHNlIHsKKwkJLyogY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCB0aW1lcidzIGF2YWlsYWJsZSAqLworCQlpZiAodGVzdF9iaXQodGltZXJfbnIsIG1mZ3B0LT5hdmFpbCkpCisJCQl0aW1lcl9uciA9IC0xOworCX0KKworCWlmICh0aW1lcl9uciA+PSAwKQorCQkvKiBpZiB0aW1lcl9uciBpcyBub3QgLTEsIGl0J3MgYW4gYXZhaWxhYmxlIHRpbWVyICovCisJCV9fY2xlYXJfYml0KHRpbWVyX25yLCBtZmdwdC0+YXZhaWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mZ3B0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAodGltZXJfbnIgPCAwKQorCQlnb3RvIGRvbmU7CisKKwl0aW1lciA9IGttYWxsb2Moc2l6ZW9mKCp0aW1lciksIEdGUF9LRVJORUwpOworCWlmICghdGltZXIpIHsKKwkJLyogYXcgaGVsbCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWZncHQtPmxvY2ssIGZsYWdzKTsKKwkJX19zZXRfYml0KHRpbWVyX25yLCBtZmdwdC0+YXZhaWwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZmdwdC0+bG9jaywgZmxhZ3MpOworCQlnb3RvIGRvbmU7CisJfQorCXRpbWVyLT5jaGlwID0gbWZncHQ7CisJdGltZXItPm5yID0gdGltZXJfbnI7CisJZGV2X2luZm8oJm1mZ3B0LT5wZGV2LT5kZXYsICJyZWdpc3RlcmVkIHRpbWVyICVkXG4iLCB0aW1lcl9ucik7CisKK2RvbmU6CisJcmV0dXJuIHRpbWVyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3M1NTM1X21mZ3B0X2FsbG9jX3RpbWVyKTsKKworLyoKKyAqIFhYWDogVGhpcyBmcmVlcyB0aGUgdGltZXIgbWVtb3J5LCBidXQgbmV2ZXIgcmVzZXRzIHRoZSBhY3R1YWwgaGFyZHdhcmUKKyAqIHRpbWVyLiAgVGhlIG9sZCBnZW9kZV9tZmdwdCBjb2RlIGRpZCB0aGlzOyBpdCB3b3VsZCBiZSBnb29kIHRvIGZpZ3VyZQorICogb3V0IGEgd2F5IHRvIGFjdHVhbGx5IHJlbGVhc2UgdGhlIGhhcmR3YXJlIHRpbWVyLiAgU2VlIGNvbW1lbnRzIGJlbG93LgorICovCit2b2lkIGNzNTUzNV9tZmdwdF9mcmVlX3RpbWVyKHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyKQoreworCWtmcmVlKHRpbWVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNzNTUzNV9tZmdwdF9mcmVlX3RpbWVyKTsKKwordWludDE2X3QgY3M1NTM1X21mZ3B0X3JlYWQoc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqdGltZXIsIHVpbnQxNl90IHJlZykKK3sKKwlyZXR1cm4gaW53KHRpbWVyLT5jaGlwLT5iYXNlICsgcmVnICsgKHRpbWVyLT5uciAqIDgpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNzNTUzNV9tZmdwdF9yZWFkKTsKKwordm9pZCBjczU1MzVfbWZncHRfd3JpdGUoc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqdGltZXIsIHVpbnQxNl90IHJlZywKKwkJdWludDE2X3QgdmFsdWUpCit7CisJb3V0dyh2YWx1ZSwgdGltZXItPmNoaXAtPmJhc2UgKyByZWcgKyAodGltZXItPm5yICogOCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3M1NTM1X21mZ3B0X3dyaXRlKTsKKworLyoKKyAqIFRoaXMgaXMgYSBzbGVkZ2VoYW1tZXIgdGhhdCByZXNldHMgYWxsIE1GR1BUIHRpbWVycy4gVGhpcyBpcyByZXF1aXJlZCBieQorICogc29tZSBicm9rZW4gQklPU2VzIHdoaWNoIGxlYXZlIHRoZSBzeXN0ZW0gaW4gYW4gdW5zdGFibGUgc3RhdGUKKyAqIChUaW55QklPUyAwLjk4LCBmb3IgZXhhbXBsZTsgZml4ZWQgaW4gMC45OSkuICBJdCdzIHVuY2VydGFpbiBhcyB0bworICogd2hldGhlciBvciBub3QgdGhpcyBzZWNyZXQgTVNSIGNhbiBiZSB1c2VkIHRvIHJlbGVhc2UgaW5kaXZpZHVhbCB0aW1lcnMuCisgKiBKb3JkYW4gdGVsbHMgbWUgdGhhdCBoZSBhbmQgTWl0Y2ggb25jZSBwbGF5ZWQgdy8gaXQsIGJ1dCBpdCdzIHVuY2xlYXIKKyAqIHdoYXQgdGhlIHJlc3VsdHMgb2YgdGhhdCB3ZXJlIChhbmQgdGhleSBleHBlcmllbmNlZCBzb21lIGluc3RhYmlsaXR5KS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHJlc2V0X2FsbF90aW1lcnModm9pZCkKK3sKKwl1aW50MzJfdCB2YWwsIGR1bW15OworCisJLyogVGhlIGZvbGxvd2luZyB1bmRvY3VtZW50ZWQgYml0IHJlc2V0cyB0aGUgTUZHUFQgdGltZXJzICovCisJdmFsID0gMHhGRjsgZHVtbXkgPSAwOworCXdybXNyKE1TUl9NRkdQVF9TRVRVUCwgdmFsLCBkdW1teSk7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIGFueSBNRkdQVHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGtlcm5lbCB0byB1c2UuICBJbiBtb3N0CisgKiBjYXNlcywgZmlybXdhcmUgdGhhdCB1c2VzIEFNRCdzIFZTQSBjb2RlIHdpbGwgY2xhaW0gYWxsIHRpbWVycyBkdXJpbmcKKyAqIGJvb3R1cDsgd2UgY2VydGFpbmx5IGRvbid0IHdhbnQgdG8gdGFrZSB0aGVtIGlmIHRoZXkncmUgYWxyZWFkeSBpbiB1c2UuCisgKiBJbiBvdGhlciBjYXNlcyAoc3VjaCBhcyB3aXRoIFZTQWxlc3MgT3BlbkZpcm13YXJlKSwgdGhlIHN5c3RlbSBmaXJtd2FyZQorICogbGVhdmVzIHRpbWVycyBhdmFpbGFibGUgZm9yIHVzIHRvIHVzZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2Nhbl90aW1lcnMoc3RydWN0IGNzNTUzNV9tZmdwdF9jaGlwICptZmdwdCkKK3sKKwlzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyIHRpbWVyID0geyAuY2hpcCA9IG1mZ3B0IH07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdGltZXJzID0gMDsKKwl1aW50MTZfdCB2YWw7CisJaW50IGk7CisKKwkvKiBiaW9zIHdvcmthcm91bmQgKi8KKwlpZiAobWZncHRfcmVzZXRfdGltZXJzKQorCQlyZXNldF9hbGxfdGltZXJzKCk7CisKKwkvKiBqdXN0IHRvIGJlIHNhZmUsIHByb3RlY3QgdGhpcyBzZWN0aW9uIHcvIGxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWZncHQtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUZHUFRfTUFYX1RJTUVSUzsgaSsrKSB7CisJCXRpbWVyLm5yID0gaTsKKwkJdmFsID0gY3M1NTM1X21mZ3B0X3JlYWQoJnRpbWVyLCBNRkdQVF9SRUdfU0VUVVApOworCQlpZiAoISh2YWwgJiBNRkdQVF9TRVRVUF9TRVRVUCkpIHsKKwkJCV9fc2V0X2JpdChpLCBtZmdwdC0+YXZhaWwpOworCQkJdGltZXJzKys7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZncHQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiB0aW1lcnM7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNzNTUzNV9tZmdwdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwlpbnQgZXJyLCB0OworCisJLyogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGdldCB0aGUgTUZHUFQgYmFzZSBhZGRyZXNzOyBvbmUgaXMgYnkKKwkgKiBmZXRjaGluZyBpdCBmcm9tIE1TUl9MQkFSX01GR1BULCB0aGUgb3RoZXIgaXMgYnkgcmVhZGluZyB0aGUKKwkgKiBQQ0kgQkFSIGluZm8uICBUaGUgbGF0dGVyIG1ldGhvZCBpcyBlYXNpZXIgKGVzcGVjaWFsbHkgYWNyb3NzCisJICogZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMpLCBzbyB3ZSdsbCBzdGljayB3aXRoIHRoYXQgZm9yIG5vdy4gIElmCisJICogaXQgdHVybnMgb3V0IHRvIGJlIHVucmVsaWFibGUgaW4gdGhlIGZhY2Ugb2YgY3JhcHB5IEJJT1Nlcywgd2UKKwkgKiBjYW4gYWx3YXlzIGdvIGJhY2sgdG8gdXNpbmcgTVNScy4uICovCisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9pbyhwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBkZXZpY2UgSU9cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIE1GR1BUX0JBUiwgRFJWX05BTUUpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgUENJIEJBUiAjJWRcbiIsIE1GR1BUX0JBUik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIGRyaXZlci1zcGVjaWZpYyBzdHJ1Y3QgKi8KKwljczU1MzVfbWZncHRfY2hpcC5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIE1GR1BUX0JBUik7CisJY3M1NTM1X21mZ3B0X2NoaXAucGRldiA9IHBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJmNzNTUzNV9tZmdwdF9jaGlwLmxvY2spOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImFsbG9jYXRlZCBQQ0kgQkFSICMlZDogYmFzZSAweCVsbHhcbiIsIE1GR1BUX0JBUiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGNzNTUzNV9tZmdwdF9jaGlwLmJhc2UpOworCisJLyogZGV0ZWN0IHRoZSBhdmFpbGFibGUgdGltZXJzICovCisJdCA9IHNjYW5fdGltZXJzKCZjczU1MzVfbWZncHRfY2hpcCk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgRFJWX05BTUUgIjogJWQgTUZHUFQgdGltZXJzIGF2YWlsYWJsZVxuIiwgdCk7CisJY3M1NTM1X21mZ3B0X2NoaXAuaW5pdGlhbGl6ZWQgPSAxOworCXJldHVybiAwOworCitkb25lOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjczU1MzVfbWZncHRfcGNpX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05TLCBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9JU0EpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBKSB9LAorCXsgMCwgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3M1NTM1X21mZ3B0X3BjaV90YmwpOworCisvKgorICogSnVzdCBsaWtlIHdpdGggdGhlIGNzNTUzNS1ncGlvIGRyaXZlciwgd2UgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCBQQ0kgZHJpdmVyCisgKiByZWdpc3RyYXRpb24gc3R1ZmYuICBJdCBvbmx5IGFsbG93cyBvbmx5IG9uZSBkcml2ZXIgdG8gYmluZCB0byBlYWNoIFBDSQorICogZGV2aWNlLCBhbmQgd2Ugd2FudCB0aGUgR1BJTyBhbmQgTUZHUFQgZHJpdmVycyB0byBiZSBhYmxlIHRvIHNoYXJlIGEgUENJCisgKiBkZXZpY2UuICBJbnN0ZWFkLCB3ZSBtYW51YWxseSBzY2FuIGZvciB0aGUgUENJIGRldmljZSwgcmVxdWVzdCBhIHNpbmdsZQorICogcmVnaW9uLCBhbmQga2VlcCB0cmFjayBvZiB0aGUgZGV2aWNlcyB0aGF0IHdlJ3JlIHVzaW5nLgorICovCisKK3N0YXRpYyBpbnQgX19pbml0IGNzNTUzNV9tZmdwdF9zY2FuX3BjaSh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWludCBlcnIgPSAtRU5PREVWOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3M1NTM1X21mZ3B0X3BjaV90YmwpOyBpKyspIHsKKwkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKGNzNTUzNV9tZmdwdF9wY2lfdGJsW2ldLnZlbmRvciwKKwkJCQljczU1MzVfbWZncHRfcGNpX3RibFtpXS5kZXZpY2UsIE5VTEwpOworCQlpZiAocGRldikgeworCQkJZXJyID0gY3M1NTM1X21mZ3B0X3Byb2JlKHBkZXYsCisJCQkJCSZjczU1MzVfbWZncHRfcGNpX3RibFtpXSk7CisJCQlpZiAoZXJyKQorCQkJCXBjaV9kZXZfcHV0KHBkZXYpOworCisJCQkvKiB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgQ1M1NTM1LzYgc291dGhicmlkZ2UgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgY3M1NTM1X21mZ3B0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY3M1NTM1X21mZ3B0X3NjYW5fcGNpKCk7Cit9CisKK21vZHVsZV9pbml0KGNzNTUzNV9tZmdwdF9pbml0KTsKKworTU9EVUxFX0FVVEhPUigiQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGNvbGxhYm9yYS5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1M1NTM1L0NTNTUzNiBNRkdQVCB0aW1lciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vZWVwcm9tLmMgYi9kcml2ZXJzL21pc2MvZWVwcm9tL2VlcHJvbS5jCmluZGV4IDJjMjcxOTMuLmY5MzllYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vZWVwcm9tLmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9lZXByb20uYwpAQCAtMzIsOSArMzIsNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwKIAkJCQkJMHg1NSwgMHg1NiwgMHg1NywgSTJDX0NMSUVOVF9FTkQgfTsKIAotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoZWVwcm9tKTsKLQogCiAvKiBTaXplIG9mIEVFUFJPTSBpbiBieXRlcyAqLwogI2RlZmluZSBFRVBST01fU0laRQkJMjU2CkBAIC0xMzUsOCArMTMyLDcgQEAKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBlZXByb21fZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgZWVwcm9tX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCkBAIC0yMzMsNyArMjI5LDcgQEAKIAogCS5jbGFzcwkJPSBJMkNfQ0xBU1NfRERDIHwgSTJDX0NMQVNTX1NQRCwKIAkuZGV0ZWN0CQk9IGVlcHJvbV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlZXByb21faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCmluZGV4IGU5ZWFlNGEuLjFlYWM2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYworKysgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKQEAgLTM5MSw2ICszOTEsNyBAQAogCVtFTkNMT1NVUkVfU1RBVFVTX05PVF9JTlNUQUxMRURdID0gIm5vdCBpbnN0YWxsZWQiLAogCVtFTkNMT1NVUkVfU1RBVFVTX1VOS05PV05dID0gInVua25vd24iLAogCVtFTkNMT1NVUkVfU1RBVFVTX1VOQVZBSUxBQkxFXSA9ICJ1bmF2YWlsYWJsZSIsCisJW0VOQ0xPU1VSRV9TVEFUVVNfTUFYXSA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZW5jbG9zdXJlX3R5cGUgW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWNzOTMyczQwMS5jIGIvZHJpdmVycy9taXNjL2ljczkzMnM0MDEuYwppbmRleCA0YmI3YTNhLi4zOTVhNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWNzOTMyczQwMS5jCisrKyBiL2RyaXZlcnMvbWlzYy9pY3M5MzJzNDAxLmMKQEAgLTMwLDkgKzMwLDYgQEAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDY5LCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShpY3M5MzJzNDAxKTsKLQogLyogSUNTOTMyUzQwMSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSUNTOTMyUzQwMV9SRUdfQ0ZHMgkJCTB4MDEKICNkZWZpbmUgCUlDUzkzMlM0MDFfQ0ZHMV9TUFJFQUQJCTB4MDEKQEAgLTEwNiwxMiArMTAzLDEyIEBACiAKIHN0YXRpYyBpbnQgaWNzOTMyczQwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGljczkzMnM0MDFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorc3RhdGljIGludCBpY3M5MzJzNDAxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBpY3M5MzJzNDAxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGljczkzMnM0MDFfaWRbXSA9IHsKLQl7ICJpY3M5MzJzNDAxIiwgaWNzOTMyczQwMSB9LAorCXsgImljczkzMnM0MDEiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGljczkzMnM0MDFfaWQpOwpAQCAtMTI1LDcgKzEyMiw3IEBACiAJLnJlbW92ZQkJPSBpY3M5MzJzNDAxX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBpY3M5MzJzNDAxX2lkLAogCS5kZXRlY3QJCT0gaWNzOTMyczQwMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGljczkzMnM0MDFfZGF0YSAqaWNzOTMyczQwMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTQxMyw3ICs0MTAsNyBAQAogfQogCiAvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgaWNzOTMyczQwMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCitzdGF0aWMgaW50IGljczkzMnM0MDFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaW9jNC5jIGIvZHJpdmVycy9taXNjL2lvYzQuYwppbmRleCA2MGIwYjFhLi4wOWRjYjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaW9jNC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pb2M0LmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICogZXZlbiB0aG91Z2ggdGhlIGZvbGxvd2luZyBjb2RlIHV0aWxpemVzIGV4dGVybmFsIGludGVycnVwdCByZWdpc3RlcnMKICAqIHRvIHBlcmZvcm0gdGhlIHNwZWVkIGNhbGN1bGF0aW9uLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIHZvaWQgX19kZXZpbml0CiBpb2M0X2Nsb2NrX2NhbGlicmF0ZShzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkKQogewogCXVuaW9uIGlvYzRfaW50X291dCBpbnRfb3V0OwpAQCAtMjMwLDcgKzIzMCw3IEBACiAgKiBvbiB0aGUgc2FtZSBQQ0kgYnVzIGF0IHNsb3QgbnVtYmVyIDMgdG8gZGlmZmVyZW50aWF0ZSBJTzkgZnJvbSBJTzEwLgogICogSWYgbmVpdGhlciBpcyBwcmVzZW50LCBpdCdzIGEgUENJLVJULgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50CitzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdAogaW9jNF92YXJpYW50KHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJcmV0dXJuIElPQzRfVkFSSUFOVF9QQ0lfUlQ7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgdm9pZCBfX2RldmluaXQKIGlvYzRfbG9hZF9tb2R1bGVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAkvKiBhcmcganVzdCBoYXMgdG8gYmUgZnJlZWQgKi8KQEAgLTI4MCw3ICsyODAsNyBAQAogfQogCiAvKiBBZGRzIGEgbmV3IGluc3RhbmNlIG9mIGFuIElPQzQgY2FyZCAqLwotc3RhdGljIGludAorc3RhdGljIGludCBfX2RldmluaXQKIGlvYzRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJc3RydWN0IGlvYzRfZHJpdmVyX2RhdGEgKmlkZDsKQEAgLTQyNSw3ICs0MjUsNyBAQAogfQogCiAvKiBSZW1vdmVzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhbiBJT0M0IGNhcmQuICovCi1zdGF0aWMgdm9pZAorc3RhdGljIHZvaWQgX19kZXZleGl0CiBpb2M0X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgKmlzOwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJLm5hbWUgPSAiSU9DNCIsCiAJLmlkX3RhYmxlID0gaW9jNF9pZF90YWJsZSwKIAkucHJvYmUgPSBpb2M0X3Byb2JlLAotCS5yZW1vdmUgPSBpb2M0X3JlbW92ZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaW9jNF9yZW1vdmUpLAogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlvYzRfaWRfdGFibGUpOwpAQCAtNDg2LDE0ICs0ODYsMTQgQEAKICAqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIE1vZHVsZSBsb2FkICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdAorc3RhdGljIGludCBfX2luaXQKIGlvYzRfaW5pdCh2b2lkKQogewogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpb2M0X2RyaXZlcik7CiB9CiAKIC8qIE1vZHVsZSB1bmxvYWQgKi8KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdAorc3RhdGljIHZvaWQgX19leGl0CiBpb2M0X2V4aXQodm9pZCkKIHsKIAkvKiBFbnN1cmUgaW9jNF9sb2FkX21vZHVsZXMoKSBoYXMgY29tcGxldGVkIGJlZm9yZSBleGl0aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvZnctZG93bmxvYWQuYyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9mdy1kb3dubG9hZC5jCmluZGV4IDUwZDQzMWU0Li45ZGJhZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvZnctZG93bmxvYWQuYworKysgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvZnctZG93bmxvYWQuYwpAQCAtNDMsMTUgKzQzLDE0IEBACiAJc3RydWN0IGl3bWN0X3BhcnNlciAqcGFyc2VyID0gJnByaXYtPnBhcnNlcjsKIAlzdHJ1Y3QgaXdtY3RfZndfaGRyICpmd19oZHIgPSAmcGFyc2VyLT52ZXJzaW9uczsKIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIi0tPlxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiLS0+XG4iKTsKIAogCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiZmlsZV9zaXplPSV6ZFxuIiwgZmlsZV9zaXplKTsKIAogCXBhcnNlci0+ZmlsZSA9IGZpbGU7CiAJcGFyc2VyLT5maWxlX3NpemUgPSBmaWxlX3NpemU7CiAJcGFyc2VyLT5jdXJfcG9zID0gMDsKLQlwYXJzZXItPmJ1ZiA9IE5VTEw7Ci0KKwlwYXJzZXItPmVudHJ5X3BvaW50ID0gMDsKIAlwYXJzZXItPmJ1ZiA9IGt6YWxsb2MoYmxvY2tfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXJzZXItPmJ1ZikgewogCQlMT0dfRVJST1IocHJpdiwgRldfRE9XTkxPQUQsICJremFsbG9jIGVycm9yXG4iKTsKQEAgLTcwLDcgKzY5LDcgQEAKIAogCXBhcnNlci0+Y3VyX3BvcyArPSBzaXplb2Yoc3RydWN0IGl3bWN0X2Z3X2hkcik7CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICI8LS1cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIjwtLVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMyw3ICsxMTIsNyBAQAogCXN0cnVjdCBpd21jdF9kYmcgKmRiZyA9ICZwcml2LT5kYmc7CiAJc3RydWN0IGl3bWN0X2Z3X3NlY19oZHIgKnNlY19oZHI7CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICItLT5cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIi0tPlxuIik7CiAKIAl3aGlsZSAocGFyc2VyLT5jdXJfcG9zICsgc2l6ZW9mKHN0cnVjdCBpd21jdF9md19zZWNfaGRyKQogCQk8PSBwYXJzZXItPmZpbGVfc2l6ZSkgewpAQCAtMTUyLDcgKzE1MSw3IEBACiAJCQkiZmluaXNoZWQgd2l0aCBzZWN0aW9uIGN1cl9wb3M9JXpkXG4iLCBwYXJzZXItPmN1cl9wb3MpOwogCX0KIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIjwtLVxuIik7CisJTE9HX1RSQUNFKHByaXYsIElOSVQsICI8LS1cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjcsNyArMTY2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgY21kID0gMDsKIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIi0tPlxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiLS0+XG4iKTsKIAlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgIkRvd25sb2FkIGFkZHJlc3MgMHgleCBzaXplIDB4JXp4XG4iLAogCQkJCWFkZHIsIHNlY19zaXplKTsKIApAQCAtMjI5LDcgKzIyOCw3IEBACiAJCWhkci0+Y21kID0gY3B1X3RvX2xlMzIoY21kKTsKIAkJLyogc2VuZCBpdCBkb3duICovCiAJCS8qIFRPRE86IGFkZCBtb3JlIHByb3BlciBzZW5kaW5nIGFuZCBlcnJvciBjaGVja2luZyAqLwotCQlyZXQgPSBpd21jdF90eChwcml2LCAwLCBwYXJzZXItPmJ1ZiwgdHJhbnNfc2l6ZSk7CisJCXJldCA9IGl3bWN0X3R4KHByaXYsIHBhcnNlci0+YnVmLCB0cmFuc19zaXplKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwKIAkJCQkiaXdtY3RfdHggcmV0dXJuZWQgJWRcbiIsIHJldCk7CkBAIC0yNTEsNyArMjUwLDcgQEAKIAlpZiAoc2VudCA8IHNlY19zaXplKQogCQlyZXQgPSAtRUlOVkFMOwogZXhpdDoKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICI8LS1cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIjwtLVxuIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjYyLDcgKzI2MSw3IEBACiAJaW50IHJldDsKIAl1MzIgY21kOwogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiLS0+XG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICItLT5cbiIpOwogCiAJbWVtc2V0KHBhcnNlci0+YnVmLCAwLCBwYXJzZXItPmJ1Zl9zaXplKTsKIAljbWQgPSBJV01DX0NNRF9TSUdOQVRVUkUgPDwgQ01EX0hEUl9TSUdOQVRVUkVfUE9TOwpAQCAtMjgxLDExICsyODAsMTEgQEAKIAlMT0dfSEVYRFVNUChGV19ET1dOTE9BRCwgcGFyc2VyLT5idWYsIHNpemVvZigqaGRyKSk7CiAJLyogc2VuZCBpdCBkb3duICovCiAJLyogVE9ETzogYWRkIG1vcmUgcHJvcGVyIHNlbmRpbmcgYW5kIGVycm9yIGNoZWNraW5nICovCi0JcmV0ID0gaXdtY3RfdHgocHJpdiwgMCwgcGFyc2VyLT5idWYsIElXTUNfU0RJT19CTEtfU0laRSk7CisJcmV0ID0gaXdtY3RfdHgocHJpdiwgcGFyc2VyLT5idWYsIElXTUNfU0RJT19CTEtfU0laRSk7CiAJaWYgKHJldCkKIAkJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICJpd21jdF90eCByZXR1cm5lZCAlZCIsIHJldCk7CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICI8LS1cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIjwtLVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5OCw4ICsyOTcsMTYgQEAKIAlfX2xlMzIgYWRkcjsKIAlpbnQgcmV0OwogCi0JLyogY2xlYXIgcGFyc2VyIHN0cnVjdCAqLwotCW1lbXNldCgmcHJpdi0+cGFyc2VyLCAwLCBzaXplb2Yoc3RydWN0IGl3bWN0X3BhcnNlcikpOworCisJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICJiYXJrZXIgZG93bmxvYWQgcmVxdWVzdCAweCV4IGlzOlxuIiwKKwkJCXByaXYtPmJhcmtlcik7CisJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICIqKioqKioqICBUb3AgRlcgJXMgcmVxdWVzdGVkICoqKioqKioqXG4iLAorCQkJKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfVE9QX01TSykgPyAid2FzIiA6ICJub3QiKTsKKwlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgIioqKioqKiogIEdQUyBGVyAlcyByZXF1ZXN0ZWQgKioqKioqKipcbiIsCisJCQkocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9HUFNfTVNLKSA/ICJ3YXMiIDogIm5vdCIpOworCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiKioqKioqKiAgQlQgRlcgJXMgcmVxdWVzdGVkICoqKioqKioqXG4iLAorCQkJKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfQlRfTVNLKSA/ICJ3YXMiIDogIm5vdCIpOworCiAKIAkvKiBnZXQgdGhlIGZpcm13YXJlICovCiAJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmcmF3LCBmd19uYW1lLCAmcHJpdi0+ZnVuYy0+ZGV2KTsKQEAgLTMxNyw2ICszMjQsNyBAQAogCiAJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICJSZWFkIGZpcm13YXJlICclcydcbiIsIGZ3X25hbWUpOwogCisJLyogY2xlYXIgcGFyc2VyIHN0cnVjdCAqLwogCXJldCA9IGl3bWN0X2Z3X3BhcnNlcl9pbml0KHByaXYsIHJhdy0+ZGF0YSwgcmF3LT5zaXplLCBwcml2LT50cmFuc19sZW4pOwogCWlmIChyZXQgPCAwKSB7CiAJCUxPR19FUlJPUihwcml2LCBGV19ET1dOTE9BRCwKQEAgLTMyNCw3ICszMzIsNiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyogY2hlY2tzdW0gICovCiAJaWYgKCFpd21jdF9jaGVja3N1bShwcml2KSkgewogCQlMT0dfRVJST1IocHJpdiwgRldfRE9XTkxPQUQsICJjaGVja3N1bSBlcnJvclxuIik7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0zMzMsMjMgKzM0MCwxOCBAQAogCiAJLyogZG93bmxvYWQgZmlybXdhcmUgdG8gZGV2aWNlICovCiAJd2hpbGUgKGl3bWN0X3BhcnNlX25leHRfc2VjdGlvbihwcml2LCAmcGRhdGEsICZsZW4sICZhZGRyKSkgewotCQlpZiAoaXdtY3RfZG93bmxvYWRfc2VjdGlvbihwcml2LCBwZGF0YSwgbGVuLCBhZGRyKSkgeworCQlyZXQgPSBpd21jdF9kb3dubG9hZF9zZWN0aW9uKHByaXYsIHBkYXRhLCBsZW4sIGFkZHIpOworCQlpZiAocmV0KSB7CiAJCQlMT0dfRVJST1IocHJpdiwgRldfRE9XTkxPQUQsCiAJCQkJICAiJXMgZG93bmxvYWQgc2VjdGlvbiBmYWlsZWRcbiIsIGZ3X25hbWUpOwotCQkJcmV0ID0gLUVJTzsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KIAotCWl3bWN0X2tpY2tfZncocHJpdiwgISEocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9KVU1QX01TSykpOworCXJldCA9IGl3bWN0X2tpY2tfZncocHJpdiwgISEocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9KVU1QX01TSykpOwogCiBleGl0OgogCWtmcmVlKHByaXYtPnBhcnNlci5idWYpOwotCi0JaWYgKHJhdykKLQkJcmVsZWFzZV9maXJtd2FyZShyYXcpOwotCi0JcmF3ID0gTlVMTDsKLQorCXJlbGVhc2VfZmlybXdhcmUocmF3KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2l3bWMzMjAwdG9wLmggYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvaXdtYzMyMDB0b3AuaAppbmRleCA0M2JkNTEwLi43NDBmZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvaXdtYzMyMDB0b3AuaAorKysgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvaXdtYzMyMDB0b3AuaApAQCAtMTk2LDkgKzE5Niw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCByZWFkX3JlcV9saXN0OwogfTsKIAotZXh0ZXJuIGludCBpd21jdF90eChzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGFkZHIsCi0JCXZvaWQgKnNyYywgaW50IGNvdW50KTsKLQorZXh0ZXJuIGludCBpd21jdF90eChzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwgdm9pZCAqc3JjLCBpbnQgY291bnQpOwogZXh0ZXJuIGludCBpd21jdF9md19sb2FkKHN0cnVjdCBpd21jdF9wcml2ICpwcml2KTsKIAogZXh0ZXJuIHZvaWQgaXdtY3RfZGJnX2luaXRfcGFyYW1zKHN0cnVjdCBpd21jdF9wcml2ICpkcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2xvZy5oIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2xvZy5oCmluZGV4IGFiYTgxMjEuLjQ0MzRiYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9sb2cuaAorKysgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbG9nLmgKQEAgLTM3LDEzICszNywyNiBAQAogI2RlZmluZSBMT0dfU0VWX0lORk8JCQkzCiAjZGVmaW5lIExPR19TRVZfSU5GT0VYCQkJNAogCi0jZGVmaW5lIExPR19TRVZfRklMVEVSX0FMTAkJXAotCShCSVQoTE9HX1NFVl9DUklUSUNBTCkgfAlcCi0JIEJJVChMT0dfU0VWX0VSUk9SKSAgICB8CVwKLQkgQklUKExPR19TRVZfV0FSTklORykgIHwgCVwKLQkgQklUKExPR19TRVZfSU5GTykgICAgIHwJXAorLyogTG9nIGxldmVscyBub3QgZGVmaW5lZCBmb3IgRlcgKi8KKyNkZWZpbmUgTE9HX1NFVl9UUkFDRQkJCTUKKyNkZWZpbmUgTE9HX1NFVl9EVU1QCQkJNgorCisjZGVmaW5lIExPR19TRVZfRldfRklMVEVSX0FMTAkJXAorCShCSVQoTE9HX1NFVl9DUklUSUNBTCkJfAlcCisJIEJJVChMT0dfU0VWX0VSUk9SKQl8CVwKKwkgQklUKExPR19TRVZfV0FSTklORykJfCAJXAorCSBCSVQoTE9HX1NFVl9JTkZPKQl8CVwKIAkgQklUKExPR19TRVZfSU5GT0VYKSkKIAorI2RlZmluZSBMT0dfU0VWX0ZJTFRFUl9BTEwJCVwKKwkoQklUKExPR19TRVZfQ1JJVElDQUwpCXwJXAorCSBCSVQoTE9HX1NFVl9FUlJPUikJfAlcCisJIEJJVChMT0dfU0VWX1dBUk5JTkcpCXwgCVwKKwkgQklUKExPR19TRVZfSU5GTykJfAlcCisJIEJJVChMT0dfU0VWX0lORk9FWCkJfAlcCisJIEJJVChMT0dfU0VWX1RSQUNFKQl8CVwKKwkgQklUKExPR19TRVZfRFVNUCkpCisKIC8qIGxvZyBzb3VyY2UgKi8KICNkZWZpbmUgTE9HX1NSQ19JTklUCQkJMAogI2RlZmluZSBMT0dfU1JDX0RFQlVHRlMJCQkxCkBAIC0xMDQsMTYgKzExNywxNiBAQAogCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhcmdzKTsJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIExPR19JTkZPRVgocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCQkJCVwKKyNkZWZpbmUgTE9HX1RSQUNFKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmIChpd21jdF9sb2dkZWZzW0xPR19TUkNfICMjIHNyY10gJiBCSVQoTE9HX1NFVl9JTkZPRVgpKQlcCisJaWYgKGl3bWN0X2xvZ2RlZnNbTE9HX1NSQ18gIyMgc3JjXSAmIEJJVChMT0dfU0VWX1RSQUNFKSkJXAogCQlkZXZfZGJnKHByaXYyZGV2KHByaXYpLCAiJXMgJWQ6ICIgZm10LAkJCVwKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sICMjYXJncyk7CQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBMT0dfSEVYRFVNUChzcmMsIHB0ciwgbGVuKQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoaXdtY3RfbG9nZGVmc1tMT0dfU1JDXyAjIyBzcmNdICYgQklUKExPR19TRVZfSU5GT0VYKSkJXAorCWlmIChpd21jdF9sb2dkZWZzW0xPR19TUkNfICMjIHNyY10gJiBCSVQoTE9HX1NFVl9EVU1QKSkJXAogCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfTk9ORSwJXAogCQkJCTE2LCAxLCBwdHIsIGxlbiwgZmFsc2UpOwkJXAogfSB3aGlsZSAoMCkKQEAgLTE0Miw3ICsxNTUsNyBAQAogI2RlZmluZSBMT0dfRVJST1IocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCiAjZGVmaW5lIExPR19XQVJOSU5HKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQogI2RlZmluZSBMT0dfSU5GTyhwcml2LCBzcmMsIGZtdCwgYXJncy4uLikKLSNkZWZpbmUgTE9HX0lORk9FWChwcml2LCBzcmMsIGZtdCwgYXJncy4uLikKKyNkZWZpbmUgTE9HX1RSQUNFKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQogI2RlZmluZSBMT0dfSEVYRFVNUChzcmMsIHB0ciwgbGVuKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdtY3RfbG9nX3RvcF9tZXNzYWdlKHN0cnVjdCBpd21jdF9wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMKaW5kZXggZmFmY2FhNC4uZGQwYTM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYworKysgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jCkBAIC00OSw2ICs0OSwyMCBAQAogTU9EVUxFX0FVVEhPUihEUklWRVJfQ09QWVJJR0hUKTsKIE1PRFVMRV9GSVJNV0FSRShGV19OQU1FKEZXX0FQSV9WRVIpKTsKIAorCitzdGF0aWMgaW5saW5lIGludCBfX2l3bWN0X3R4KHN0cnVjdCBpd21jdF9wcml2ICpwcml2LCB2b2lkICpzcmMsIGludCBjb3VudCkKK3sKKwlyZXR1cm4gc2Rpb19tZW1jcHlfdG9pbyhwcml2LT5mdW5jLCBJV01DX1NESU9fREFUQV9BRERSLCBzcmMsIGNvdW50KTsKKworfQoraW50IGl3bWN0X3R4KHN0cnVjdCBpd21jdF9wcml2ICpwcml2LCB2b2lkICpzcmMsIGludCBjb3VudCkKK3sKKwlpbnQgcmV0OworCXNkaW9fY2xhaW1faG9zdChwcml2LT5mdW5jKTsKKwlyZXQgPSAgX19pd21jdF90eChwcml2LCBzcmMsIGNvdW50KTsKKwlzZGlvX3JlbGVhc2VfaG9zdChwcml2LT5mdW5jKTsKKwlyZXR1cm4gcmV0OworfQogLyoKICAqIFRoaXMgd29ya2VycyBtYWluIHRhc2sgaXMgdG8gd2FpdCBmb3IgT1BfT1BSX0FMSVZFCiAgKiBmcm9tIFRPUCBGVyB1bnRpbCBBTElWRV9NU0dfVElNT1VUIHRpbWVvdXQgaXMgZWxhcHNlZC4KQEAgLTY2LDcgKzgwLDcgQEAKIAogCXJldCA9IGJ1c19yZXNjYW5fZGV2aWNlcyhwcml2LT5mdW5jLT5kZXYuYnVzKTsKIAlpZiAocmV0IDwgMCkKLQkJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICJidXNfcmVzY2FuX2RldmljZXMgRkFJTEVEISEhXG4iKTsKKwkJTE9HX0lORk8ocHJpdiwgSU5JVCwgImJ1c19yZXNjYW5fZGV2aWNlcyBGQUlMRUQhISFcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBvcF90b3BfbWVzc2FnZShzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwgc3RydWN0IHRvcF9tc2cgKm1zZykKQEAgLTEzNyw3ICsxNTEsNyBAQAogCWludCByZXQ7CiAJdTggKmJ1ZjsKIAotCUxPR19JTkZPRVgocHJpdiwgRldfTVNHLCAiU2VuZGluZyBoY21kOlxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX01TRywgIlNlbmRpbmcgaGNtZDpcbiIpOwogCiAJLyogYWRkIHBhZGRpbmcgdG8gMjU2IGZvciBJV01DICovCiAJKChzdHJ1Y3QgdG9wX21zZyAqKWNtZCktPmhkci5mbGFncyB8PSBDTURfRkxBR19QQURESU5HXzI1NjsKQEAgLTE1OCwyNyArMTcyLDEyIEBACiAJfQogCiAJbWVtY3B5KGJ1ZiwgY21kLCBsZW4pOwotCi0Jc2Rpb19jbGFpbV9ob3N0KHByaXYtPmZ1bmMpOwotCXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocHJpdi0+ZnVuYywgSVdNQ19TRElPX0RBVEFfQUREUiwgYnVmLAotCQkJICAgICAgIEZXX0hDTURfQkxPQ0tfU0laRSk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QocHJpdi0+ZnVuYyk7CisJcmV0ID0gaXdtY3RfdHgocHJpdiwgYnVmLCBGV19IQ01EX0JMT0NLX1NJWkUpOwogCiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaXdtY3RfdHgoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLAotCXZvaWQgKnNyYywgaW50IGNvdW50KQotewotCWludCByZXQ7Ci0KLQlzZGlvX2NsYWltX2hvc3QocHJpdi0+ZnVuYyk7Ci0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhwcml2LT5mdW5jLCBhZGRyLCBzcmMsIGNvdW50KTsKLQlzZGlvX3JlbGVhc2VfaG9zdChwcml2LT5mdW5jKTsKLQotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyB2b2lkIGl3bWN0X2lycV9yZWFkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewpAQCAtMTkyLDcgKzE5MSw3IEBACiAKIAlwcml2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgaXdtY3RfcHJpdiwgaXNyX3dvcmtlcik7CiAKLQlMT0dfSU5GTyhwcml2LCBJUlEsICJlbnRlciBpd21jdF9pcnFfcmVhZF93b3JrZXIgJXBcbiIsIHdzKTsKKwlMT0dfVFJBQ0UocHJpdiwgSVJRLCAiZW50ZXIgaXdtY3RfaXJxX3JlYWRfd29ya2VyICVwXG4iLCB3cyk7CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIHdpdGggZGV2aWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJc2Rpb19jbGFpbV9ob3N0KHByaXYtPmZ1bmMpOwpAQCAtMjczLDggKzI3Miw3IEBACiAKIAkJaWYgKGJhcmtlciAmIEJBUktFUl9ETkxPQURfU1lOQ19NU0spIHsKIAkJCS8qIFNlbmQgdGhlIHNhbWUgYmFya2VyIGJhY2sgKi8KLQkJCXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocHJpdi0+ZnVuYywgSVdNQ19TRElPX0RBVEFfQUREUiwKLQkJCQkJICAgICAgIGJ1ZiwgaW9zaXplKTsKKwkJCXJldCA9IF9faXdtY3RfdHgocHJpdiwgYnVmLCBpb3NpemUpOwogCQkJaWYgKHJldCkgewogCQkJCUxPR19FUlJPUihwcml2LCBJUlEsCiAJCQkJCSAiZXJyb3IgJWQgZWNob2luZyBiYXJrZXJcbiIsIHJldCk7CkBAIC0yOTIsMTUgKzI5MCw2IEBACiAKIAlzZGlvX3JlbGVhc2VfaG9zdChwcml2LT5mdW5jKTsKIAotCi0JTE9HX0lORk8ocHJpdiwgSVJRLCAiYmFya2VyIGRvd25sb2FkIHJlcXVlc3QgMHgleCBpczpcbiIsIHByaXYtPmJhcmtlcik7Ci0JTE9HX0lORk8ocHJpdiwgSVJRLCAiKioqKioqKiAgVG9wIEZXICVzIHJlcXVlc3RlZCAqKioqKioqKlxuIiwKLQkJCShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX1RPUF9NU0spID8gIndhcyIgOiAibm90Iik7Ci0JTE9HX0lORk8ocHJpdiwgSVJRLCAiKioqKioqKiAgR1BTIEZXICVzIHJlcXVlc3RlZCAqKioqKioqKlxuIiwKLQkJCShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX0dQU19NU0spID8gIndhcyIgOiAibm90Iik7Ci0JTE9HX0lORk8ocHJpdiwgSVJRLCAiKioqKioqKiAgQlQgRlcgJXMgcmVxdWVzdGVkICoqKioqKioqXG4iLAotCQkJKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfQlRfTVNLKSA/ICJ3YXMiIDogIm5vdCIpOwotCiAJaWYgKHByaXYtPmRiZy5md19kb3dubG9hZCkKIAkJaXdtY3RfZndfbG9hZChwcml2KTsKIAllbHNlCkBAIC0zMTIsNyArMzAxLDcgQEAKIAlzZGlvX3JlbGVhc2VfaG9zdChwcml2LT5mdW5jKTsKIGV4aXQ6CiAJa2ZyZWUoYnVmKTsKLQlMT0dfSU5GTyhwcml2LCBJUlEsICJleGl0IGl3bWN0X2lycV9yZWFkX3dvcmtlclxuIik7CisJTE9HX1RSQUNFKHByaXYsIElSUSwgImV4aXQgaXdtY3RfaXJxX3JlYWRfd29ya2VyXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgaXdtY3RfaXJxKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCkBAIC0zMjUsMTIgKzMxNCwxMiBAQAogCiAJcHJpdiA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CiAKLQlMT0dfSU5GTyhwcml2LCBJUlEsICJlbnRlciBpd21jdF9pcnFcbiIpOworCUxPR19UUkFDRShwcml2LCBJUlEsICJlbnRlciBpd21jdF9pcnFcbiIpOwogCiAJLyogcmVhZCB0aGUgZnVuY3Rpb24ncyBzdGF0dXMgcmVnaXN0ZXIgKi8KIAl2YWwgPSBzZGlvX3JlYWRiKGZ1bmMsIElXTUNfU0RJT19JTlRSX1NUQVRVU19BRERSLCAmcmV0KTsKIAotCUxPR19JTkZPKHByaXYsIElSUSwgImlpciB2YWx1ZSA9ICVkLCByZXQ9JWRcbiIsIHZhbCwgcmV0KTsKKwlMT0dfVFJBQ0UocHJpdiwgSVJRLCAiaWlyIHZhbHVlID0gJWQsIHJldD0lZFxuIiwgdmFsLCByZXQpOwogCiAJaWYgKCF2YWwpIHsKIAkJTE9HX0VSUk9SKHByaXYsIElSUSwgImlpciA9IDAsIGV4aXRpbmcgSVNSXG4iKTsKQEAgLTM3Miw3ICszNjEsNyBAQAogCiAJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmlzcl93b3JrZXIpOwogCi0JTE9HX0lORk8ocHJpdiwgSVJRLCAiZXhpdCBpd21jdF9pcnFcbiIpOworCUxPR19UUkFDRShwcml2LCBJUlEsICJleGl0IGl3bWN0X2lycVxuIik7CiAKIAlyZXR1cm47CiAKQEAgLTY2MCw3ICs2NDksNyBAQAogCiAJLyogRGVmYXVsdCBsb2cgZmlsdGVyIHNldHRpbmdzICovCiAJaXdtY3RfbG9nX3NldF9maWx0ZXIoTE9HX1NSQ19BTEwsIExPR19TRVZfRklMVEVSX1JVTlRJTUUpOwotCWl3bWN0X2xvZ19zZXRfZmlsdGVyKExPR19TUkNfRldfTVNHLCBMT0dfU0VWX0ZJTFRFUl9BTEwpOworCWl3bWN0X2xvZ19zZXRfZmlsdGVyKExPR19TUkNfRldfTVNHLCBMT0dfU0VWX0ZXX0ZJTFRFUl9BTEwpOwogCWl3bWN0X2xvZ19zZXRfZndfZmlsdGVyKExPR19TUkNfQUxMLCBGV19MT0dfU0VWX0ZJTFRFUl9SVU5USU1FKTsKIAogCXJjID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoJml3bWN0X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnUuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCmluZGV4IGY5M2YwM2EuLjNhZDc2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCkBAIC01Myw2ICs1MywxNyBAQAogCWludAlmcmVlX3VzZXJfY2JyOwogfTsKIAorLyoKKyAqIFN0YXRpY3RpY3Mga2VwdCBmb3IgZWFjaCBjb250ZXh0LgorICovCitzdHJ1Y3QgZ3J1X2dzZWdfc3RhdGlzdGljcyB7CisJdW5zaWduZWQgbG9uZwlmbW1fdGxibWlzczsKKwl1bnNpZ25lZCBsb25nCXVwbV90bGJtaXNzOworCXVuc2lnbmVkIGxvbmcJdGxiZHJvcGluOworCXVuc2lnbmVkIGxvbmcJY29udGV4dF9zdG9sZW47CisJdW5zaWduZWQgbG9uZwlyZXNlcnZlZFsxMF07Cit9OworCiAvKiBGbGFncyBmb3IgR1JVIG9wdGlvbnMgb24gdGhlIGdydV9jcmVhdGVfY29udGV4dCgpIGNhbGwgKi8KIC8qIFNlbGVjdCBvbmUgb2YgdGhlIGZvbGxvdyA0IG9wdGlvbnMgdG8gc3BlY2lmeSBob3cgVExCIG1pc3NlcyBhcmUgaGFuZGxlZCAqLwogI2RlZmluZSBHUlVfT1BUX01JU1NfREVGQVVMVAkweDAwMDAJLyogVXNlIGRlZmF1bHQgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCmluZGV4IDNjOWMwNjYuLmQ5NTU4N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKQEAgLTM0LDE3ICszNCwxNyBAQAogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjZGVmaW5lIF9fZmx1c2hfY2FjaGUocCkJCWlhNjRfZmMoKHVuc2lnbmVkIGxvbmcpcCkKIC8qIFVzZSB2b2xhdGlsZSBvbiBJQTY0IHRvIGVuc3VyZSBvcmRlcmluZyB2aWEgc3Q0LnJlbCAqLwotI2RlZmluZSBncnVfb3JkZXJlZF9zdG9yZV9pbnQocCwgdikJCQkJCVwKKyNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfdWxvbmcocCwgdikJCQkJCVwKIAkJZG8gewkJCQkJCQlcCiAJCQliYXJyaWVyKCk7CQkJCQlcCi0JCQkqKCh2b2xhdGlsZSBpbnQgKikocCkpID0gdjsgLyogZm9yY2Ugc3QucmVsICovCVwKKwkJCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikocCkpID0gdjsgLyogZm9yY2Ugc3QucmVsICovCVwKIAkJfSB3aGlsZSAoMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKICNkZWZpbmUgX19mbHVzaF9jYWNoZShwKQkJY2xmbHVzaChwKQotI2RlZmluZSBncnVfb3JkZXJlZF9zdG9yZV9pbnQocCwgdikJCQkJCVwKKyNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfdWxvbmcocCwgdikJCQkJCVwKIAkJZG8gewkJCQkJCQlcCiAJCQliYXJyaWVyKCk7CQkJCQlcCi0JCQkqKGludCAqKXAgPSB2OwkJCQkJXAorCQkJKih1bnNpZ25lZCBsb25nICopcCA9IHY7CQkJXAogCQl9IHdoaWxlICgwKQogI2Vsc2UKICNlcnJvciAiVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgpAQCAtMTI5LDggKzEyOSwxMyBAQAogICovCiBzdHJ1Y3QgZ3J1X2luc3RydWN0aW9uIHsKICAgICAvKiBEVyAwICovCi0gICAgdW5zaWduZWQgaW50CQlvcDMyOyAgICAvKiBpY21kLHh0eXBlLGlhYTAsaW1hLG9wYyAqLwotICAgIHVuc2lnbmVkIGludAkJdHJpMDsKKyAgICB1bmlvbiB7CisgICAgCXVuc2lnbmVkIGxvbmcJCW9wNjQ7ICAgIC8qIGljbWQseHR5cGUsaWFhMCxpbWEsb3BjLHRyaTAgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQJb3AzMjsKKwkJdW5zaWduZWQgaW50CXRyaTA7CisJfTsKKyAgICB9OwogICAgIHVuc2lnbmVkIGxvbmcJCXRyaTFfYnVmc2l6ZTsJCS8qIERXIDEgKi8KICAgICB1bnNpZ25lZCBsb25nCQliYWRkcjA7CQkJLyogRFcgMiAqLwogICAgIHVuc2lnbmVkIGxvbmcJCW5lbGVtOwkJCS8qIERXIDMgKi8KQEAgLTE0MCw3ICsxNDUsNyBAQAogICAgIHVuc2lnbmVkIGxvbmcJCWF2YWx1ZTsJCQkvKiBEVyA3ICovCiB9OwogCi0vKiBTb21lIHNoaWZ0cyBhbmQgbWFza3MgZm9yIHRoZSBsb3cgMzIgYml0cyBvZiBhIEdSVSBjb21tYW5kICovCisvKiBTb21lIHNoaWZ0cyBhbmQgbWFza3MgZm9yIHRoZSBsb3cgNjQgYml0cyBvZiBhIEdSVSBjb21tYW5kICovCiAjZGVmaW5lIEdSVV9DQl9JQ01EX1NIRlQJMAogI2RlZmluZSBHUlVfQ0JfSUNNRF9NQVNLCTB4MQogI2RlZmluZSBHUlVfQ0JfWFRZUEVfU0hGVAk4CkBAIC0xNTUsNiArMTYwLDEwIEBACiAjZGVmaW5lIEdSVV9DQl9PUENfTUFTSwkJMHhmZgogI2RlZmluZSBHUlVfQ0JfRVhPUENfU0hGVAkyNAogI2RlZmluZSBHUlVfQ0JfRVhPUENfTUFTSwkweGZmCisjZGVmaW5lIEdSVV9JREVGMl9TSEZUCQkzMgorI2RlZmluZSBHUlVfSURFRjJfTUFTSwkJMHgzZmZmZgorI2RlZmluZSBHUlVfSVNUQVRVU19TSEZUCTU2CisjZGVmaW5lIEdSVV9JU1RBVFVTX01BU0sJMHgzCiAKIC8qIEdSVSBpbnN0cnVjdGlvbiBvcGNvZGVzIChvcGMgZmllbGQpICovCiAjZGVmaW5lIE9QX05PUAkJMHgwMApAQCAtMjU2LDYgKzI2NSw3IEBACiAjZGVmaW5lIENCRV9DQVVTRV9QUk9UT0NPTF9TVEFURV9EQVRBX0VSUk9SCSgxIDw8IDE2KQogI2RlZmluZSBDQkVfQ0FVU0VfUkFfUkVTUE9OU0VfREFUQV9FUlJPUgkoMSA8PCAxNykKICNkZWZpbmUgQ0JFX0NBVVNFX0hBX1JFU1BPTlNFX0RBVEFfRVJST1IJKDEgPDwgMTgpCisjZGVmaW5lIENCRV9DQVVTRV9GT1JDRURfRVJST1IJCQkoMSA8PCAxOSkKIAogLyogQ0JFIGNicmV4ZWNzdGF0dXMgYml0cyAqLwogI2RlZmluZSBDQlJfRVhTX0FCT1JUX09DQ19CSVQJCQkwCkBAIC0yNjQsMTMgKzI3NCwxNSBAQAogI2RlZmluZSBDQlJfRVhTX1FVRVVFRF9CSVQJCQkzCiAjZGVmaW5lIENCUl9FWFNfVExCX0lOVkFMX0JJVAkJCTQKICNkZWZpbmUgQ0JSX0VYU19FWENFUFRJT05fQklUCQkJNQorI2RlZmluZSBDQlJfRVhTX0NCX0lOVF9QRU5ESU5HX0JJVAkJNgogCiAjZGVmaW5lIENCUl9FWFNfQUJPUlRfT0NDCQkJKDEgPDwgQ0JSX0VYU19BQk9SVF9PQ0NfQklUKQogI2RlZmluZSBDQlJfRVhTX0lOVF9PQ0MJCQkJKDEgPDwgQ0JSX0VYU19JTlRfT0NDX0JJVCkKICNkZWZpbmUgQ0JSX0VYU19QRU5ESU5HCQkJCSgxIDw8IENCUl9FWFNfUEVORElOR19CSVQpCiAjZGVmaW5lIENCUl9FWFNfUVVFVUVECQkJCSgxIDw8IENCUl9FWFNfUVVFVUVEX0JJVCkKLSNkZWZpbmUgQ0JSX1RMQl9JTlZBTAkJCQkoMSA8PCBDQlJfRVhTX1RMQl9JTlZBTF9CSVQpCisjZGVmaW5lIENCUl9FWFNfVExCX0lOVkFMCQkJKDEgPDwgQ0JSX0VYU19UTEJfSU5WQUxfQklUKQogI2RlZmluZSBDQlJfRVhTX0VYQ0VQVElPTgkJCSgxIDw8IENCUl9FWFNfRVhDRVBUSU9OX0JJVCkKKyNkZWZpbmUgQ0JSX0VYU19DQl9JTlRfUEVORElORwkJCSgxIDw8IENCUl9FWFNfQ0JfSU5UX1BFTkRJTkdfQklUKQogCiAvKgogICogRXhjZXB0aW9ucyBhcmUgcmV0cmllZCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcy4gSWYgYW55IE9USEVSIGJpdHMgYXJlIHNldApAQCAtMjk2LDEyICszMDgsMTQgQEAKIAogCiAvKiBHZW5lcmF0ZSB0aGUgbG93IHdvcmQgb2YgYSBHUlUgaW5zdHJ1Y3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1fX29wd29yZCh1bnNpZ25lZCBjaGFyIG9wY29kZSwgdW5zaWduZWQgY2hhciBleG9wYywgdW5zaWduZWQgY2hhciB4dHlwZSwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19vcGR3b3JkKHVuc2lnbmVkIGNoYXIgb3Bjb2RlLCB1bnNpZ25lZCBjaGFyIGV4b3BjLCB1bnNpZ25lZCBjaGFyIHh0eXBlLAogICAgICAgIHVuc2lnbmVkIGNoYXIgaWFhMCwgdW5zaWduZWQgY2hhciBpYWExLAotICAgICAgIHVuc2lnbmVkIGNoYXIgaW1hKQorICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlZjIsIHVuc2lnbmVkIGNoYXIgaW1hKQogewogICAgIHJldHVybiAoMSA8PCBHUlVfQ0JfSUNNRF9TSEZUKSB8CisJICAgKCh1bnNpZ25lZCBsb25nKUNCU19BQ1RJVkUgPDwgR1JVX0lTVEFUVVNfU0hGVCkgfAorCSAgIChpZGVmMjw8IEdSVV9JREVGMl9TSEZUKSB8CiAJICAgKGlhYTAgPDwgR1JVX0NCX0lBQTBfU0hGVCkgfAogCSAgIChpYWExIDw8IEdSVV9DQl9JQUExX1NIRlQpIHwKIAkgICAoaW1hIDw8IEdSVV9DQl9JTUFfU0hGVCkgfApAQCAtMzE5LDEyICszMzMsMTMgQEAKIH0KIAogLyoKLSAqIFN0b3JlIHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSBjb21tYW5kIGluY2x1ZGluZyB0aGUgInN0YXJ0IiBiaXQuIFRoZW4KKyAqIFN0b3JlIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBjb21tYW5kIGluY2x1ZGluZyB0aGUgInN0YXJ0IiBiaXQuIFRoZW4KICAqIHN0YXJ0IHRoZSBpbnN0cnVjdGlvbiBleGVjdXRpbmcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oc3RydWN0IGdydV9pbnN0cnVjdGlvbiAqaW5zLCBpbnQgb3AzMikKK3N0YXRpYyBpbmxpbmUgdm9pZCBncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oc3RydWN0IGdydV9pbnN0cnVjdGlvbiAqaW5zLCB1bnNpZ25lZCBsb25nIG9wNjQpCiB7Ci0JZ3J1X29yZGVyZWRfc3RvcmVfaW50KGlucywgb3AzMik7CisJZ3J1X29yZGVyZWRfc3RvcmVfdWxvbmcoaW5zLCBvcDY0KTsKKwltYigpOwogCWdydV9mbHVzaF9jYWNoZShpbnMpOwogfQogCkBAIC0zNDAsNiArMzU1LDMwIEBACiAgKiAgICAgCS0gbmVsZW0gYW5kIHN0cmlkZSBhcmUgaW4gZWxlbWVudHMKICAqICAgICAJLSB0cmkwL3RyaTEgaXMgaW4gYnl0ZXMgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgc2VnbWVudC4KICAqLworc3RhdGljIGlubGluZSB2b2lkIGdydV92bG9hZF9waHlzKHZvaWQgKmNiLCB1bnNpZ25lZCBsb25nIGdwYSwKKwkJdW5zaWduZWQgaW50IHRyaTAsIGludCBpYWEsIHVuc2lnbmVkIGxvbmcgaGludHMpCit7CisJc3RydWN0IGdydV9pbnN0cnVjdGlvbiAqaW5zID0gKHN0cnVjdCBncnVfaW5zdHJ1Y3Rpb24gKiljYjsKKworCWlucy0+YmFkZHIwID0gKGxvbmcpZ3BhIHwgKCh1bnNpZ25lZCBsb25nKWlhYSA8PCA2Mik7CisJaW5zLT5uZWxlbSA9IDE7CisJaW5zLT5vcDFfc3RyaWRlID0gMTsKKwlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wZHdvcmQoT1BfVkxPQUQsIDAsIFhUWVBFX0RXLCBpYWEsIDAsCisJCQkJCSh1bnNpZ25lZCBsb25nKXRyaTAsIENCX0lNQShoaW50cykpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdydV92c3RvcmVfcGh5cyh2b2lkICpjYiwgdW5zaWduZWQgbG9uZyBncGEsCisJCXVuc2lnbmVkIGludCB0cmkwLCBpbnQgaWFhLCB1bnNpZ25lZCBsb25nIGhpbnRzKQoreworCXN0cnVjdCBncnVfaW5zdHJ1Y3Rpb24gKmlucyA9IChzdHJ1Y3QgZ3J1X2luc3RydWN0aW9uICopY2I7CisKKwlpbnMtPmJhZGRyMCA9IChsb25nKWdwYSB8ICgodW5zaWduZWQgbG9uZylpYWEgPDwgNjIpOworCWlucy0+bmVsZW0gPSAxOworCWlucy0+b3AxX3N0cmlkZSA9IDE7CisJZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcGR3b3JkKE9QX1ZTVE9SRSwgMCwgWFRZUEVfRFcsIGlhYSwgMCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpdHJpMCwgQ0JfSU1BKGhpbnRzKSkpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X3Zsb2FkKHZvaWQgKmNiLCB1bnNpZ25lZCBsb25nIG1lbV9hZGRyLAogCQl1bnNpZ25lZCBpbnQgdHJpMCwgdW5zaWduZWQgY2hhciB4dHlwZSwgdW5zaWduZWQgbG9uZyBuZWxlbSwKIAkJdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgaGludHMpCkBAIC0zNDgsMTAgKzM4Nyw5IEBACiAKIAlpbnMtPmJhZGRyMCA9IChsb25nKW1lbV9hZGRyOwogCWlucy0+bmVsZW0gPSBuZWxlbTsKLQlpbnMtPnRyaTAgPSB0cmkwOwogCWlucy0+b3AxX3N0cmlkZSA9IHN0cmlkZTsKLQlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wd29yZChPUF9WTE9BRCwgMCwgeHR5cGUsIElBQV9SQU0sIDAsCi0JCQkJCUNCX0lNQShoaW50cykpKTsKKwlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wZHdvcmQoT1BfVkxPQUQsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZyl0cmkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfdnN0b3JlKHZvaWQgKmNiLCB1bnNpZ25lZCBsb25nIG1lbV9hZGRyLApAQCAtMzYyLDEwICs0MDAsOSBAQAogCiAJaW5zLT5iYWRkcjAgPSAobG9uZyltZW1fYWRkcjsKIAlpbnMtPm5lbGVtID0gbmVsZW07Ci0JaW5zLT50cmkwID0gdHJpMDsKIAlpbnMtPm9wMV9zdHJpZGUgPSBzdHJpZGU7Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfVlNUT1JFLCAwLCB4dHlwZSwgSUFBX1JBTSwgMCwKLQkJCQkJQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9WU1RPUkUsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQl0cmkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfaXZsb2FkKHZvaWQgKmNiLCB1bnNpZ25lZCBsb25nIG1lbV9hZGRyLApAQCAtMzc2LDEwICs0MTMsOSBAQAogCiAJaW5zLT5iYWRkcjAgPSAobG9uZyltZW1fYWRkcjsKIAlpbnMtPm5lbGVtID0gbmVsZW07Ci0JaW5zLT50cmkwID0gdHJpMDsKIAlpbnMtPnRyaTFfYnVmc2l6ZSA9IHRyaTE7Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfSVZMT0FELCAwLCB4dHlwZSwgSUFBX1JBTSwgMCwKLQkJCQkJQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9JVkxPQUQsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQl0cmkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfaXZzdG9yZSh2b2lkICpjYiwgdW5zaWduZWQgbG9uZyBtZW1fYWRkciwKQEAgLTM5MCwxMCArNDI2LDkgQEAKIAogCWlucy0+YmFkZHIwID0gKGxvbmcpbWVtX2FkZHI7CiAJaW5zLT5uZWxlbSA9IG5lbGVtOwotCWlucy0+dHJpMCA9IHRyaTA7CiAJaW5zLT50cmkxX2J1ZnNpemUgPSB0cmkxOwotCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3B3b3JkKE9QX0lWU1RPUkUsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAotCQkJCQlDQl9JTUEoaGludHMpKSk7CisJZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcGR3b3JkKE9QX0lWU1RPUkUsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQl0cmkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfdnNldCh2b2lkICpjYiwgdW5zaWduZWQgbG9uZyBtZW1fYWRkciwKQEAgLTQwNiw4ICs0NDEsOCBAQAogCWlucy0+b3AyX3ZhbHVlX2JhZGRyMSA9IHZhbHVlOwogCWlucy0+bmVsZW0gPSBuZWxlbTsKIAlpbnMtPm9wMV9zdHJpZGUgPSBzdHJpZGU7Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfVlNFVCwgMCwgeHR5cGUsIElBQV9SQU0sIDAsCi0JCQkJCSBDQl9JTUEoaGludHMpKSk7CisJZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcGR3b3JkKE9QX1ZTRVQsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQkgMCwgQ0JfSU1BKGhpbnRzKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X2l2c2V0KHZvaWQgKmNiLCB1bnNpZ25lZCBsb25nIG1lbV9hZGRyLApAQCAtNDIwLDggKzQ1NSw4IEBACiAJaW5zLT5vcDJfdmFsdWVfYmFkZHIxID0gdmFsdWU7CiAJaW5zLT5uZWxlbSA9IG5lbGVtOwogCWlucy0+dHJpMV9idWZzaXplID0gdHJpMTsKLQlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wd29yZChPUF9JVlNFVCwgMCwgeHR5cGUsIElBQV9SQU0sIDAsCi0JCQkJCUNCX0lNQShoaW50cykpKTsKKwlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wZHdvcmQoT1BfSVZTRVQsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfdmZsdXNoKHZvaWQgKmNiLCB1bnNpZ25lZCBsb25nIG1lbV9hZGRyLApAQCAtNDMzLDE1ICs0NjgsMTUgQEAKIAlpbnMtPmJhZGRyMCA9IChsb25nKW1lbV9hZGRyOwogCWlucy0+b3AxX3N0cmlkZSA9IHN0cmlkZTsKIAlpbnMtPm5lbGVtID0gbmVsZW07Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfVkZMVVNILCAwLCB4dHlwZSwgSUFBX1JBTSwgMCwKLQkJCQkJQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9WRkxVU0gsIDAsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfbm9wKHZvaWQgKmNiLCBpbnQgaGludHMpCiB7CiAJc3RydWN0IGdydV9pbnN0cnVjdGlvbiAqaW5zID0gKHZvaWQgKiljYjsKIAotCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3B3b3JkKE9QX05PUCwgMCwgMCwgMCwgMCwgQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9OT1AsIDAsIDAsIDAsIDAsIDAsIENCX0lNQShoaW50cykpKTsKIH0KIAogCkBAIC00NTUsMTAgKzQ5MCw5IEBACiAJaW5zLT5iYWRkcjAgPSAobG9uZylzcmM7CiAJaW5zLT5vcDJfdmFsdWVfYmFkZHIxID0gKGxvbmcpZGVzdDsKIAlpbnMtPm5lbGVtID0gbmVsZW07Ci0JaW5zLT50cmkwID0gdHJpMDsKIAlpbnMtPnRyaTFfYnVmc2l6ZSA9IGJ1ZnNpemU7Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfQkNPUFksIDAsIHh0eXBlLCBJQUFfUkFNLAotCQkJCQlJQUFfUkFNLCBDQl9JTUEoaGludHMpKSk7CisJZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcGR3b3JkKE9QX0JDT1BZLCAwLCB4dHlwZSwgSUFBX1JBTSwKKwkJCQkJSUFBX1JBTSwgdHJpMCwgQ0JfSU1BKGhpbnRzKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X2JzdG9yZSh2b2lkICpjYiwgY29uc3QgdW5zaWduZWQgbG9uZyBzcmMsCkBAIC00NzAsOSArNTA0LDggQEAKIAlpbnMtPmJhZGRyMCA9IChsb25nKXNyYzsKIAlpbnMtPm9wMl92YWx1ZV9iYWRkcjEgPSAobG9uZylkZXN0OwogCWlucy0+bmVsZW0gPSBuZWxlbTsKLQlpbnMtPnRyaTAgPSB0cmkwOwotCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3B3b3JkKE9QX0JTVE9SRSwgMCwgeHR5cGUsIDAsIElBQV9SQU0sCi0JCQkJCUNCX0lNQShoaW50cykpKTsKKwlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wZHdvcmQoT1BfQlNUT1JFLCAwLCB4dHlwZSwgMCwgSUFBX1JBTSwKKwkJCQkJdHJpMCwgQ0JfSU1BKGhpbnRzKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X2dhbWlyKHZvaWQgKmNiLCBpbnQgZXhvcGMsIHVuc2lnbmVkIGxvbmcgc3JjLApAQCAtNDgxLDggKzUxNCw4IEBACiAJc3RydWN0IGdydV9pbnN0cnVjdGlvbiAqaW5zID0gKHZvaWQgKiljYjsKIAogCWlucy0+YmFkZHIwID0gKGxvbmcpc3JjOwotCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3B3b3JkKE9QX0dBTUlSLCBleG9wYywgeHR5cGUsIElBQV9SQU0sIDAsCi0JCQkJCUNCX0lNQShoaW50cykpKTsKKwlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wZHdvcmQoT1BfR0FNSVIsIGV4b3BjLCB4dHlwZSwgSUFBX1JBTSwgMCwKKwkJCQkJMCwgQ0JfSU1BKGhpbnRzKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X2dhbWlycih2b2lkICpjYiwgaW50IGV4b3BjLCB1bnNpZ25lZCBsb25nIHNyYywKQEAgLTQ5MSw4ICs1MjQsOCBAQAogCXN0cnVjdCBncnVfaW5zdHJ1Y3Rpb24gKmlucyA9ICh2b2lkICopY2I7CiAKIAlpbnMtPmJhZGRyMCA9IChsb25nKXNyYzsKLQlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wd29yZChPUF9HQU1JUlIsIGV4b3BjLCB4dHlwZSwgSUFBX1JBTSwgMCwKLQkJCQkJQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9HQU1JUlIsIGV4b3BjLCB4dHlwZSwgSUFBX1JBTSwgMCwKKwkJCQkJMCwgQ0JfSU1BKGhpbnRzKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X2dhbWVyKHZvaWQgKmNiLCBpbnQgZXhvcGMsIHVuc2lnbmVkIGxvbmcgc3JjLApAQCAtNTA1LDggKzUzOCw4IEBACiAJaW5zLT5iYWRkcjAgPSAobG9uZylzcmM7CiAJaW5zLT5vcDFfc3RyaWRlID0gb3BlcmFuZDE7CiAJaW5zLT5vcDJfdmFsdWVfYmFkZHIxID0gb3BlcmFuZDI7Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfR0FNRVIsIGV4b3BjLCB4dHlwZSwgSUFBX1JBTSwgMCwKLQkJCQkJQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9HQU1FUiwgZXhvcGMsIHh0eXBlLCBJQUFfUkFNLCAwLAorCQkJCQkwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfZ2FtZXJyKHZvaWQgKmNiLCBpbnQgZXhvcGMsIHVuc2lnbmVkIGxvbmcgc3JjLApAQCAtNTE4LDggKzU1MSw4IEBACiAJaW5zLT5iYWRkcjAgPSAobG9uZylzcmM7CiAJaW5zLT5vcDFfc3RyaWRlID0gb3BlcmFuZDE7CiAJaW5zLT5vcDJfdmFsdWVfYmFkZHIxID0gb3BlcmFuZDI7Ci0JZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcHdvcmQoT1BfR0FNRVJSLCBleG9wYywgeHR5cGUsIElBQV9SQU0sIDAsCi0JCQkJCUNCX0lNQShoaW50cykpKTsKKwlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wZHdvcmQoT1BfR0FNRVJSLCBleG9wYywgeHR5cGUsIElBQV9SQU0sIDAsCisJCQkJCTAsIENCX0lNQShoaW50cykpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdydV9nYW14cih2b2lkICpjYiwgdW5zaWduZWQgbG9uZyBzcmMsCkBAIC01MjksOCArNTYyLDggQEAKIAogCWlucy0+YmFkZHIwID0gKGxvbmcpc3JjOwogCWlucy0+bmVsZW0gPSA0OwotCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3B3b3JkKE9QX0dBTVhSLCBFT1BfWFJfQ1NXQVAsIFhUWVBFX0RXLAotCQkJCSBJQUFfUkFNLCAwLCBDQl9JTUEoaGludHMpKSk7CisJZ3J1X3N0YXJ0X2luc3RydWN0aW9uKGlucywgX19vcGR3b3JkKE9QX0dBTVhSLCBFT1BfWFJfQ1NXQVAsIFhUWVBFX0RXLAorCQkJCSBJQUFfUkFNLCAwLCAwLCBDQl9JTUEoaGludHMpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfbWVzcSh2b2lkICpjYiwgdW5zaWduZWQgbG9uZyBxdWV1ZSwKQEAgLTU0MSw5ICs1NzQsOCBAQAogCiAJaW5zLT5iYWRkcjAgPSAobG9uZylxdWV1ZTsKIAlpbnMtPm5lbGVtID0gbmVsZW07Ci0JaW5zLT50cmkwID0gdHJpMDsKLQlncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oaW5zLCBfX29wd29yZChPUF9NRVNRLCAwLCBYVFlQRV9DTCwgSUFBX1JBTSwgMCwKLQkJCQkJQ0JfSU1BKGhpbnRzKSkpOworCWdydV9zdGFydF9pbnN0cnVjdGlvbihpbnMsIF9fb3Bkd29yZChPUF9NRVNRLCAwLCBYVFlQRV9DTCwgSUFBX1JBTSwgMCwKKwkJCQkJdHJpMCwgQ0JfSU1BKGhpbnRzKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ3J1X2dldF9hbW9fdmFsdWUodm9pZCAqY2IpCkBAIC02NjIsNiArNjk0LDE0IEBACiAJZ3J1X3dhaXRfYWJvcnRfcHJvYyhjYik7CiB9CiAKKy8qCisgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIGdzZWcKKyAqIAlwCS0gQW55IHZhbGlkIHBvaW50ZXIgd2l0aGluIHRoZSBnc2VnCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ3J1X2dldF9nc2VnX3BvaW50ZXIgKHZvaWQgKnApCit7CisJcmV0dXJuICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXAgJiB+KEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkpOworfQogCiAvKgogICogR2V0IGEgcG9pbnRlciB0byBhIGNvbnRyb2wgYmxvY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCmluZGV4IDY3OWUwMTcuLjM4NjU3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYwpAQCAtNDAsNiArNDAsMTIgQEAKICNpbmNsdWRlICJncnVfaW5zdHJ1Y3Rpb25zLmgiCiAjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgogCisvKiBSZXR1cm4gY29kZXMgZm9yIHZ0b3AgZnVuY3Rpb25zICovCisjZGVmaW5lIFZUT1BfU1VDQ0VTUyAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlRPUF9JTlZBTElEICAgICAgICAgICAgICAgLTEKKyNkZWZpbmUgVlRPUF9SRVRSWSAgICAgICAgICAgICAgICAgLTIKKworCiAvKgogICogVGVzdCBpZiBhIHBoeXNpY2FsIGFkZHJlc3MgaXMgYSB2YWxpZCBHUlUgR1NFRyBhZGRyZXNzCiAgKi8KQEAgLTkwLDE5ICs5NiwyMiBAQAogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0Jc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cyA9IE5VTEw7CisJc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCXZtYSA9IGdydV9maW5kX3ZtYSh2YWRkcik7Ci0JaWYgKHZtYSkKLQkJZ3RzID0gZ3J1X2FsbG9jX3RocmVhZF9zdGF0ZSh2bWEsIFRTSUQodmFkZHIsIHZtYSkpOwotCWlmIChndHMpIHsKLQkJbXV0ZXhfbG9jaygmZ3RzLT50c19jdHhsb2NrKTsKLQkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCX0gZWxzZSB7Ci0JCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCX0KKwlpZiAoIXZtYSkKKwkJZ290byBlcnI7CiAKKwlndHMgPSBncnVfYWxsb2NfdGhyZWFkX3N0YXRlKHZtYSwgVFNJRCh2YWRkciwgdm1hKSk7CisJaWYgKElTX0VSUihndHMpKQorCQlnb3RvIGVycjsKKwltdXRleF9sb2NrKCZndHMtPnRzX2N0eGxvY2spOworCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gZ3RzOworCitlcnI6CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIGd0czsKIH0KIApAQCAtMTIyLDM5ICsxMzEsMTUgQEAKICAqIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSB1c2VyIGZyb20gc2VlaW5nIGEgc3RhbGUgY2IuaXN0YXR1cyB0aGF0IHdpbGwKICAqIGNoYW5nZSBhcyBzb29uIGFzIHRoZSBURkggcmVzdGFydCBpcyBjb21wbGV0ZS4gUmFjZXMgbWF5IGNhdXNlIGFuCiAgKiBvY2Nhc2lvbmFsIGZhaWx1cmUgdG8gY2xlYXIgdGhlIGNiLmlzdGF0dXMsIGJ1dCB0aGF0IGlzIG9rLgotICoKLSAqIElmIHRoZSBjYiBhZGRyZXNzIGlzIG5vdCB2YWxpZCAoc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dC4uLiksIG5vdGhpbmcKLSAqIGJhZCB3aWxsIGhhcHBlbi4uIFRoZSBnZXRfdXNlcigpL3B1dF91c2VyKCkgd2lsbCBmYWlsIGJ1dCB0aGVyZQotICogYXJlIG5vIGJhZCBzaWRlLWVmZmVjdHMuCiAgKi8KLXN0YXRpYyB2b2lkIGdydV9jYl9zZXRfaXN0YXR1c19hY3RpdmUodW5zaWduZWQgbG9uZyBfX3VzZXIgKmNiKQorc3RhdGljIHZvaWQgZ3J1X2NiX3NldF9pc3RhdHVzX2FjdGl2ZShzdHJ1Y3QgZ3J1X2luc3RydWN0aW9uX2JpdHMgKmNiaykKIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBncnVfaW5zdHJ1Y3Rpb25fYml0cyBiaXRzOwotCQl1bnNpZ25lZCBsb25nIGR3OwotCX0gdTsKLQotCWlmIChjYikgewotCQlnZXRfdXNlcih1LmR3LCBjYik7Ci0JCXUuYml0cy5pc3RhdHVzID0gQ0JTX0FDVElWRTsKLQkJcHV0X3VzZXIodS5kdywgY2IpOworCWlmIChjYmspIHsKKwkJY2JrLT5pc3RhdHVzID0gQ0JTX0FDVElWRTsKIAl9CiB9CiAKIC8qCi0gKiBDb252ZXJ0IGEgaW50ZXJydXB0IElSUSB0byBhIHBvaW50ZXIgdG8gdGhlIEdSVSBHVFMgdGhhdCBjYXVzZWQgdGhlCi0gKiBpbnRlcnJ1cHQuIEludGVycnVwdHMgYXJlIGFsd2F5cyBzZW50IHRvIGEgY3B1IG9uIHRoZSBibGFkZSB0aGF0IGNvbnRhaW5zIHRoZQotICogR1JVIChleGNlcHQgZm9yIGhlYWRsZXNzIGJsYWRlcyB3aGljaCBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQpLiBBIGJsYWRlCi0gKiBoYXMgTiBncnVzOyBhIGJsb2NrIG9mIE4gY29uc2VjdXRpdmUgSVJRcyBpcyBhc3NpZ25lZCB0byB0aGUgR1JVcy4gVGhlIElSUQotICogbnVtYmVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEdSVSBjaGlwbGV0IG9uIHRoZSBsb2NhbCBibGFkZSB0aGF0IGNhdXNlZCB0aGUKLSAqIGludGVycnVwdC4gQWx3YXlzIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3J1X3N0YXRlICppcnFfdG9fZ3J1KGludCBpcnEpCi17Ci0JcmV0dXJuICZncnVfYmFzZVt1dl9udW1hX2JsYWRlX2lkKCldLT5ic19ncnVzW2lycSAtIElSUV9HUlVdOwotfQotCi0vKgogICogUmVhZCAmIGNsZWFyIGEgVEZNCiAgKgogICogVGhlIEdSVSBoYXMgYW4gYXJyYXkgb2YgZmF1bHQgbWFwcy4gQSBtYXAgaXMgcHJpdmF0ZSB0byBhIGNwdQpAQCAtMjA3LDEwICsxOTIsMTEgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCS8qIFpaWiBOZWVkIHRvIGhhbmRsZSBIVUdFIHBhZ2VzICovCi0JaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQlyZXR1cm4gLUVGQVVMVDsKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJKnBhZ2VzaGlmdCA9IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpID8gSFBBR0VfU0hJRlQgOiBQQUdFX1NISUZUOworI2Vsc2UKIAkqcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDsKKyNlbmRpZgogCWlmIChnZXRfdXNlcl9wYWdlcwogCSAgICAoY3VycmVudCwgY3VycmVudC0+bW0sIHZhZGRyLCAxLCB3cml0ZSwgMCwgJnBhZ2UsIE5VTEwpIDw9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjY4LDcgKzI1NCw2IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMwMSwxNiArMjg2LDcxIEBACiAJcGFkZHIgPSBwYWRkciAmIH4oKDFVTCA8PCBwcykgLSAxKTsKIAkqZ3BhID0gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShwYWRkcik7CiAJKnBhZ2VzaGlmdCA9IHBzOwotCXJldHVybiAwOworCXJldHVybiBWVE9QX1NVQ0NFU1M7CiAKIGludmFsOgotCXJldHVybiAtMTsKKwlyZXR1cm4gVlRPUF9JTlZBTElEOwogdXBtOgotCXJldHVybiAtMjsKKwlyZXR1cm4gVlRPUF9SRVRSWTsKIH0KIAogCiAvKgorICogRmx1c2ggYSBDQkUgZnJvbSBjYWNoZS4gVGhlIENCRSBpcyBjbGVhbiBpbiB0aGUgY2FjaGUuIERpcnR5IHRoZQorICogQ0JFIGNhY2hlbGluZSBzbyB0aGF0IHRoZSBsaW5lIHdpbGwgYmUgd3JpdHRlbiBiYWNrIHRvIGhvbWUgYWdlbnQuCisgKiBPdGhlcndpc2UgdGhlIGxpbmUgbWF5IGJlIHNpbGVudGx5IGRyb3BwZWQuIFRoaXMgaGFzIG5vIGltcGFjdAorICogZXhjZXB0IG9uIHBlcmZvcm1hbmNlLgorICovCitzdGF0aWMgdm9pZCBncnVfZmx1c2hfY2FjaGVfY2JlKHN0cnVjdCBncnVfY29udHJvbF9ibG9ja19leHRlbmRlZCAqY2JlKQoreworCWlmICh1bmxpa2VseShjYmUpKSB7CisJCWNiZS0+Y2JyZXhlY3N0YXR1cyA9IDA7ICAgICAgICAgLyogbWFrZSBDTCBkaXJ0eSAqLworCQlncnVfZmx1c2hfY2FjaGUoY2JlKTsKKwl9Cit9CisKKy8qCisgKiBQcmVsb2FkIHRoZSBUTEIgd2l0aCBlbnRyaWVzIHRoYXQgbWF5IGJlIHJlcXVpcmVkLiBDdXJyZW50bHksIHByZWxvYWRpbmcKKyAqIGlzIGltcGxlbWVudGVkIG9ubHkgZm9yIEJDT1BZLiBQcmVsb2FkICA8dGxiX3ByZWxvYWRfY291bnQ+IHBhZ2VzIE9SIHRvCisgKiB0aGUgZW5kIG9mIHRoZSBiY29weSB0cmFuZmVyLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKyAqLworc3RhdGljIHZvaWQgZ3J1X3ByZWxvYWRfdGxiKHN0cnVjdCBncnVfc3RhdGUgKmdydSwKKwkJCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBhdG9taWMsCisJCQl1bnNpZ25lZCBsb25nIGZhdWx0X3ZhZGRyLCBpbnQgYXNpZCwgaW50IHdyaXRlLAorCQkJdW5zaWduZWQgY2hhciB0bGJfcHJlbG9hZF9jb3VudCwKKwkJCXN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAorCQkJc3RydWN0IGdydV9jb250cm9sX2Jsb2NrX2V4dGVuZGVkICpjYmUpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9IDAsIGdwYTsKKwlpbnQgcmV0LCBwYWdlc2hpZnQ7CisKKwlpZiAoY2JlLT5vcGNjcHkgIT0gT1BfQkNPUFkpCisJCXJldHVybjsKKworCWlmIChmYXVsdF92YWRkciA9PSBjYmUtPmNiZV9iYWRkcjApCisJCXZhZGRyID0gZmF1bHRfdmFkZHIgKyBHUlVfQ0FDSEVfTElORV9CWVRFUyAqIGNiZS0+Y2JlX3NyY19jbCAtIDE7CisJZWxzZSBpZiAoZmF1bHRfdmFkZHIgPT0gY2JlLT5jYmVfYmFkZHIxKQorCQl2YWRkciA9IGZhdWx0X3ZhZGRyICsgKDEgPDwgY2JlLT54dHlwZWNweSkgKiBjYmUtPmNiZV9uZWxlbWN1ciAtIDE7CisKKwlmYXVsdF92YWRkciAmPSBQQUdFX01BU0s7CisJdmFkZHIgJj0gUEFHRV9NQVNLOworCXZhZGRyID0gbWluKHZhZGRyLCBmYXVsdF92YWRkciArIHRsYl9wcmVsb2FkX2NvdW50ICogUEFHRV9TSVpFKTsKKworCXdoaWxlICh2YWRkciA+IGZhdWx0X3ZhZGRyKSB7CisJCXJldCA9IGdydV92dG9wKGd0cywgdmFkZHIsIHdyaXRlLCBhdG9taWMsICZncGEsICZwYWdlc2hpZnQpOworCQlpZiAocmV0IHx8IHRmaF93cml0ZV9vbmx5KHRmaCwgZ3BhLCBHQUFfUkFNLCB2YWRkciwgYXNpZCwgd3JpdGUsCisJCQkJCSAgR1JVX1BBR0VTSVpFKHBhZ2VzaGlmdCkpKQorCQkJcmV0dXJuOworCQlncnVfZGJnKGdydWRldiwKKwkJCSIlczogZ2lkICVkLCBndHMgMHglcCwgdGZoIDB4JXAsIHZhZGRyIDB4JWx4LCBhc2lkIDB4JXgsIHJ3ICVkLCBwcyAlZCwgZ3BhIDB4JWx4XG4iLAorCQkJYXRvbWljID8gImF0b21pYyIgOiAibm9uLWF0b21pYyIsIGdydS0+Z3NfZ2lkLCBndHMsIHRmaCwKKwkJCXZhZGRyLCBhc2lkLCB3cml0ZSwgcGFnZXNoaWZ0LCBncGEpOworCQl2YWRkciAtPSBQQUdFX1NJWkU7CisJCVNUQVQodGxiX3ByZWxvYWRfcGFnZSk7CisJfQorfQorCisvKgogICogRHJvcCBhIFRMQiBlbnRyeSBpbnRvIHRoZSBHUlUuIFRoZSBmYXVsdCBpcyBkZXNjcmliZWQgYnkgaW5mbyBpbiBhbiBURkguCiAgKglJbnB1dDoKICAqCQljYiAgICBBZGRyZXNzIG9mIHVzZXIgQ0JSLiBOdWxsIGlmIG5vdCBydW5uaW5nIGluIHVzZXIgY29udGV4dApAQCAtMzIwLDExICszNjAsMTQgQEAKICAqIAkJPCAwID0gZXJyb3IgY29kZQogICoKICAqLwotc3RhdGljIGludCBncnVfdHJ5X2Ryb3BpbihzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLAorc3RhdGljIGludCBncnVfdHJ5X2Ryb3BpbihzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsCisJCQkgIHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsCiAJCQkgIHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAotCQkJICB1bnNpZ25lZCBsb25nIF9fdXNlciAqY2IpCisJCQkgIHN0cnVjdCBncnVfaW5zdHJ1Y3Rpb25fYml0cyAqY2JrKQogewotCWludCBwYWdlc2hpZnQgPSAwLCBhc2lkLCB3cml0ZSwgcmV0LCBhdG9taWMgPSAhY2I7CisJc3RydWN0IGdydV9jb250cm9sX2Jsb2NrX2V4dGVuZGVkICpjYmUgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgdGxiX3ByZWxvYWRfY291bnQgPSBndHMtPnRzX3RsYl9wcmVsb2FkX2NvdW50OworCWludCBwYWdlc2hpZnQgPSAwLCBhc2lkLCB3cml0ZSwgcmV0LCBhdG9taWMgPSAhY2JrLCBpbmRleHdheTsKIAl1bnNpZ25lZCBsb25nIGdwYSA9IDAsIHZhZGRyID0gMDsKIAogCS8qCkBAIC0zMzUsMjQgKzM3OCwzNCBAQAogCSAqLwogCiAJLyoKKwkgKiBQcmVmZXRjaCB0aGUgQ0JFIGlmIGRvaW5nIFRMQiBwcmVsb2FkaW5nCisJICovCisJaWYgKHVubGlrZWx5KHRsYl9wcmVsb2FkX2NvdW50KSkgeworCQljYmUgPSBncnVfdGZoX3RvX2NiZSh0ZmgpOworCQlwcmVmZXRjaHcoY2JlKTsKKwl9CisKKwkvKgogCSAqIEVycm9yIGlmIFRGSCBzdGF0ZSBpcyBJRExFIG9yIEZNTSBtb2RlICYgdGhlIHVzZXIgaXNzdWluZyBhIFVQTSBjYWxsLgogCSAqIE1pZ2h0IGJlIGEgaGFyZHdhcmUgcmFjZSBPUiBhIHN0dXBpZCB1c2VyLiBJZ25vcmUgRk1NIGJlY2F1c2UgRk1NCiAJICogaXMgYSB0cmFuc2llbnQgc3RhdGUuCiAJICovCiAJaWYgKHRmaC0+c3RhdHVzICE9IFRGSFNUQVRVU19FWENFUFRJT04pIHsKIAkJZ3J1X2ZsdXNoX2NhY2hlKHRmaCk7CisJCXN5bmNfY29yZSgpOwogCQlpZiAodGZoLT5zdGF0dXMgIT0gVEZIU1RBVFVTX0VYQ0VQVElPTikKIAkJCWdvdG8gZmFpbG5vZXhjZXB0aW9uOwogCQlTVEFUKHRmaF9zdGFsZV9vbl9mYXVsdCk7CiAJfQogCWlmICh0ZmgtPnN0YXRlID09IFRGSFNUQVRFX0lETEUpCiAJCWdvdG8gZmFpbGlkbGU7Ci0JaWYgKHRmaC0+c3RhdGUgPT0gVEZIU1RBVEVfTUlTU19GTU0gJiYgY2IpCisJaWYgKHRmaC0+c3RhdGUgPT0gVEZIU1RBVEVfTUlTU19GTU0gJiYgY2JrKQogCQlnb3RvIGZhaWxmbW07CiAKIAl3cml0ZSA9ICh0ZmgtPmNhdXNlICYgVEZIQ0FVU0VfVExCX01PRCkgIT0gMDsKIAl2YWRkciA9IHRmaC0+bWlzc3ZhZGRyOwogCWFzaWQgPSB0ZmgtPm1pc3Nhc2lkOworCWluZGV4d2F5ID0gdGZoLT5pbmRleHdheTsKIAlpZiAoYXNpZCA9PSAwKQogCQlnb3RvIGZhaWxub2FzaWQ7CiAKQEAgLTM2Niw0MSArNDE5LDUxIEBACiAJCWdvdG8gZmFpbGFjdGl2ZTsKIAogCXJldCA9IGdydV92dG9wKGd0cywgdmFkZHIsIHdyaXRlLCBhdG9taWMsICZncGEsICZwYWdlc2hpZnQpOwotCWlmIChyZXQgPT0gLTEpCisJaWYgKHJldCA9PSBWVE9QX0lOVkFMSUQpCiAJCWdvdG8gZmFpbGludmFsOwotCWlmIChyZXQgPT0gLTIpCisJaWYgKHJldCA9PSBWVE9QX1JFVFJZKQogCQlnb3RvIGZhaWx1cG07CiAKIAlpZiAoIShndHMtPnRzX3NpemVhdmFpbCAmIEdSVV9TSVpFQVZBSUwocGFnZXNoaWZ0KSkpIHsKIAkJZ3RzLT50c19zaXplYXZhaWwgfD0gR1JVX1NJWkVBVkFJTChwYWdlc2hpZnQpOwotCQlpZiAoYXRvbWljIHx8ICFncnVfdXBkYXRlX2NjaChndHMsIDApKSB7CisJCWlmIChhdG9taWMgfHwgIWdydV91cGRhdGVfY2NoKGd0cykpIHsKIAkJCWd0cy0+dHNfZm9yY2VfY2NoX3JlbG9hZCA9IDE7CiAJCQlnb3RvIGZhaWx1cG07CiAJCX0KIAl9Ci0JZ3J1X2NiX3NldF9pc3RhdHVzX2FjdGl2ZShjYik7CisKKwlpZiAodW5saWtlbHkoY2JlKSAmJiBwYWdlc2hpZnQgPT0gUEFHRV9TSElGVCkgeworCQlncnVfcHJlbG9hZF90bGIoZ3J1LCBndHMsIGF0b21pYywgdmFkZHIsIGFzaWQsIHdyaXRlLCB0bGJfcHJlbG9hZF9jb3VudCwgdGZoLCBjYmUpOworCQlncnVfZmx1c2hfY2FjaGVfY2JlKGNiZSk7CisJfQorCisJZ3J1X2NiX3NldF9pc3RhdHVzX2FjdGl2ZShjYmspOworCWd0cy0+dXN0YXRzLnRsYmRyb3BpbisrOwogCXRmaF93cml0ZV9yZXN0YXJ0KHRmaCwgZ3BhLCBHQUFfUkFNLCB2YWRkciwgYXNpZCwgd3JpdGUsCiAJCQkgIEdSVV9QQUdFU0laRShwYWdlc2hpZnQpKTsKLQlTVEFUKHRsYl9kcm9waW4pOwogCWdydV9kYmcoZ3J1ZGV2LAotCQkiJXM6IHRmaCAweCVwLCB2YWRkciAweCVseCwgYXNpZCAweCV4LCBwcyAlZCwgZ3BhIDB4JWx4XG4iLAotCQlyZXQgPyAibm9uLWF0b21pYyIgOiAiYXRvbWljIiwgdGZoLCB2YWRkciwgYXNpZCwKLQkJcGFnZXNoaWZ0LCBncGEpOworCQkiJXM6IGdpZCAlZCwgZ3RzIDB4JXAsIHRmaCAweCVwLCB2YWRkciAweCVseCwgYXNpZCAweCV4LCBpbmRleHdheSAweCV4LCIKKwkJIiBydyAlZCwgcHMgJWQsIGdwYSAweCVseFxuIiwKKwkJYXRvbWljID8gImF0b21pYyIgOiAibm9uLWF0b21pYyIsIGdydS0+Z3NfZ2lkLCBndHMsIHRmaCwgdmFkZHIsIGFzaWQsCisJCWluZGV4d2F5LCB3cml0ZSwgcGFnZXNoaWZ0LCBncGEpOworCVNUQVQodGxiX2Ryb3Bpbik7CiAJcmV0dXJuIDA7CiAKIGZhaWxub2FzaWQ6CiAJLyogTm8gYXNpZCAoZGVsYXllZCB1bmxvYWQpLiAqLwogCVNUQVQodGxiX2Ryb3Bpbl9mYWlsX25vX2FzaWQpOwogCWdydV9kYmcoZ3J1ZGV2LCAiRkFJTEVEIG5vX2FzaWQgdGZoOiAweCVwLCB2YWRkciAweCVseFxuIiwgdGZoLCB2YWRkcik7Ci0JaWYgKCFjYikKKwlpZiAoIWNiaykKIAkJdGZoX3VzZXJfcG9sbGluZ19tb2RlKHRmaCk7CiAJZWxzZQogCQlncnVfZmx1c2hfY2FjaGUodGZoKTsKKwlncnVfZmx1c2hfY2FjaGVfY2JlKGNiZSk7CiAJcmV0dXJuIC1FQUdBSU47CiAKIGZhaWx1cG06CiAJLyogQXRvbWljIGZhaWx1cmUgc3dpdGNoIENCUiB0byBVUE0gKi8KIAl0ZmhfdXNlcl9wb2xsaW5nX21vZGUodGZoKTsKKwlncnVfZmx1c2hfY2FjaGVfY2JlKGNiZSk7CiAJU1RBVCh0bGJfZHJvcGluX2ZhaWxfdXBtKTsKIAlncnVfZGJnKGdydWRldiwgIkZBSUxFRCB1cG0gdGZoOiAweCVwLCB2YWRkciAweCVseFxuIiwgdGZoLCB2YWRkcik7CiAJcmV0dXJuIDE7CkBAIC00MDgsNiArNDcxLDcgQEAKIGZhaWxmbW06CiAJLyogRk1NIHN0YXRlIG9uIFVQTSBjYWxsICovCiAJZ3J1X2ZsdXNoX2NhY2hlKHRmaCk7CisJZ3J1X2ZsdXNoX2NhY2hlX2NiZShjYmUpOwogCVNUQVQodGxiX2Ryb3Bpbl9mYWlsX2ZtbSk7CiAJZ3J1X2RiZyhncnVkZXYsICJGQUlMRUQgZm1tIHRmaDogMHglcCwgc3RhdGUgJWRcbiIsIHRmaCwgdGZoLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CkBAIC00MTUsMTcgKzQ3OSwyMCBAQAogZmFpbG5vZXhjZXB0aW9uOgogCS8qIFRGSCBzdGF0dXMgZGlkIG5vdCBzaG93IGV4Y2VwdGlvbiBwZW5kaW5nICovCiAJZ3J1X2ZsdXNoX2NhY2hlKHRmaCk7Ci0JaWYgKGNiKQotCQlncnVfZmx1c2hfY2FjaGUoY2IpOworCWdydV9mbHVzaF9jYWNoZV9jYmUoY2JlKTsKKwlpZiAoY2JrKQorCQlncnVfZmx1c2hfY2FjaGUoY2JrKTsKIAlTVEFUKHRsYl9kcm9waW5fZmFpbF9ub19leGNlcHRpb24pOwotCWdydV9kYmcoZ3J1ZGV2LCAiRkFJTEVEIG5vbi1leGNlcHRpb24gdGZoOiAweCVwLCBzdGF0dXMgJWQsIHN0YXRlICVkXG4iLCB0ZmgsIHRmaC0+c3RhdHVzLCB0ZmgtPnN0YXRlKTsKKwlncnVfZGJnKGdydWRldiwgIkZBSUxFRCBub24tZXhjZXB0aW9uIHRmaDogMHglcCwgc3RhdHVzICVkLCBzdGF0ZSAlZFxuIiwKKwkJdGZoLCB0ZmgtPnN0YXR1cywgdGZoLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CiAKIGZhaWxpZGxlOgogCS8qIFRGSCBzdGF0ZSB3YXMgaWRsZSAgLSBubyBtaXNzIHBlbmRpbmcgKi8KIAlncnVfZmx1c2hfY2FjaGUodGZoKTsKLQlpZiAoY2IpCi0JCWdydV9mbHVzaF9jYWNoZShjYik7CisJZ3J1X2ZsdXNoX2NhY2hlX2NiZShjYmUpOworCWlmIChjYmspCisJCWdydV9mbHVzaF9jYWNoZShjYmspOwogCVNUQVQodGxiX2Ryb3Bpbl9mYWlsX2lkbGUpOwogCWdydV9kYmcoZ3J1ZGV2LCAiRkFJTEVEIGlkbGUgdGZoOiAweCVwLCBzdGF0ZSAlZFxuIiwgdGZoLCB0ZmgtPnN0YXRlKTsKIAlyZXR1cm4gMDsKQEAgLTQzMywxNiArNTAwLDE4IEBACiBmYWlsaW52YWw6CiAJLyogQWxsIGVycm9ycyAoYXRvbWljICYgbm9uLWF0b21pYykgc3dpdGNoIENCUiB0byBFWENFUFRJT04gc3RhdGUgKi8KIAl0ZmhfZXhjZXB0aW9uKHRmaCk7CisJZ3J1X2ZsdXNoX2NhY2hlX2NiZShjYmUpOwogCVNUQVQodGxiX2Ryb3Bpbl9mYWlsX2ludmFsaWQpOwogCWdydV9kYmcoZ3J1ZGV2LCAiRkFJTEVEIGludmFsIHRmaDogMHglcCwgdmFkZHIgMHglbHhcbiIsIHRmaCwgdmFkZHIpOwogCXJldHVybiAtRUZBVUxUOwogCiBmYWlsYWN0aXZlOgogCS8qIFJhbmdlIGludmFsaWRhdGUgYWN0aXZlLiBTd2l0Y2ggdG8gVVBNIGlmZiBhdG9taWMgKi8KLQlpZiAoIWNiKQorCWlmICghY2JrKQogCQl0ZmhfdXNlcl9wb2xsaW5nX21vZGUodGZoKTsKIAllbHNlCiAJCWdydV9mbHVzaF9jYWNoZSh0ZmgpOworCWdydV9mbHVzaF9jYWNoZV9jYmUoY2JlKTsKIAlTVEFUKHRsYl9kcm9waW5fZmFpbF9yYW5nZV9hY3RpdmUpOwogCWdydV9kYmcoZ3J1ZGV2LCAiRkFJTEVEIHJhbmdlIGFjdGl2ZTogdGZoIDB4JXAsIHZhZGRyIDB4JWx4XG4iLAogCQl0ZmgsIHZhZGRyKTsKQEAgLTQ1NSwzMSArNTI0LDQxIEBACiAgKiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBpcyByZWdpc3RlcmVkIHdpdGggbGludXgKICAqIGludGVycnVwdCBoYW5kbGVycy4KICAqLwotaXJxcmV0dXJuX3QgZ3J1X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IGdydV9pbnRyKGludCBjaGlwbGV0LCBpbnQgYmxhZGUpCiB7CiAJc3RydWN0IGdydV9zdGF0ZSAqZ3J1OwogCXN0cnVjdCBncnVfdGxiX2ZhdWx0X21hcCBpbWFwLCBkbWFwOwogCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHM7CiAJc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmggPSBOVUxMOworCXN0cnVjdCBjb21wbGV0aW9uICpjbXA7CiAJaW50IGNicm51bSwgY3R4bnVtOwogCiAJU1RBVChpbnRyKTsKIAotCWdydSA9IGlycV90b19ncnUoaXJxKTsKKwlncnUgPSAmZ3J1X2Jhc2VbYmxhZGVdLT5ic19ncnVzW2NoaXBsZXRdOwogCWlmICghZ3J1KSB7Ci0JCWRldl9lcnIoZ3J1ZGV2LCAiR1JVOiBpbnZhbGlkIGludGVycnVwdDogY3B1ICVkLCBpcnEgJWRcbiIsCi0JCQlyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBpcnEpOworCQlkZXZfZXJyKGdydWRldiwgIkdSVTogaW52YWxpZCBpbnRlcnJ1cHQ6IGNwdSAlZCwgY2hpcGxldCAlZFxuIiwKKwkJCXJhd19zbXBfcHJvY2Vzc29yX2lkKCksIGNoaXBsZXQpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCWdldF9jbGVhcl9mYXVsdF9tYXAoZ3J1LCAmaW1hcCwgJmRtYXApOworCWdydV9kYmcoZ3J1ZGV2LAorCQkiY3B1ICVkLCBjaGlwbGV0ICVkLCBnaWQgJWQsIGltYXAgJTAxNmx4ICUwMTZseCwgZG1hcCAlMDE2bHggJTAxNmx4XG4iLAorCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNoaXBsZXQsIGdydS0+Z3NfZ2lkLAorCQlpbWFwLmZhdWx0X2JpdHNbMF0sIGltYXAuZmF1bHRfYml0c1sxXSwKKwkJZG1hcC5mYXVsdF9iaXRzWzBdLCBkbWFwLmZhdWx0X2JpdHNbMV0pOwogCiAJZm9yX2VhY2hfY2JyX2luX3RmbShjYnJudW0sIGRtYXAuZmF1bHRfYml0cykgewotCQljb21wbGV0ZShncnUtPmdzX2JsYWRlLT5ic19hc3luY193cSk7CisJCVNUQVQoaW50cl9jYnIpOworCQljbXAgPSBncnUtPmdzX2JsYWRlLT5ic19hc3luY193cTsKKwkJaWYgKGNtcCkKKwkJCWNvbXBsZXRlKGNtcCk7CiAJCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBjYnJfZG9uZSAlZCwgZG9uZSAlZFxuIiwKLQkJCWdydS0+Z3NfZ2lkLCBjYnJudW0sIGdydS0+Z3NfYmxhZGUtPmJzX2FzeW5jX3dxLT5kb25lKTsKKwkJCWdydS0+Z3NfZ2lkLCBjYnJudW0sIGNtcCA/IGNtcC0+ZG9uZSA6IC0xKTsKIAl9CiAKIAlmb3JfZWFjaF9jYnJfaW5fdGZtKGNicm51bSwgaW1hcC5mYXVsdF9iaXRzKSB7CisJCVNUQVQoaW50cl90ZmgpOwogCQl0ZmggPSBnZXRfdGZoX2J5X2luZGV4KGdydSwgY2JybnVtKTsKIAkJcHJlZmV0Y2h3KHRmaCk7CS8qIEhlbHBzIG9uIGhkdywgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCiAKQEAgLTQ5MiwxNCArNTcxLDIwIEBACiAJCWN0eG51bSA9IHRmaC0+Y3R4bnVtOwogCQlndHMgPSBncnUtPmdzX2d0c1tjdHhudW1dOwogCisJCS8qIFNwdXJpb3VzIGludGVycnVwdHMgY2FuIGNhdXNlIHRoaXMuIElnbm9yZS4gKi8KKwkJaWYgKCFndHMpIHsKKwkJCVNUQVQoaW50cl9zcHVyaW91cyk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qCiAJCSAqIFRoaXMgaXMgcnVubmluZyBpbiBpbnRlcnJ1cHQgY29udGV4dC4gVHJ5bG9jayB0aGUgbW1hcF9zZW0uCiAJCSAqIElmIGl0IGZhaWxzLCByZXRyeSB0aGUgZmF1bHQgaW4gdXNlciBjb250ZXh0LgogCQkgKi8KKwkJZ3RzLT51c3RhdHMuZm1tX3RsYm1pc3MrKzsKIAkJaWYgKCFndHMtPnRzX2ZvcmNlX2NjaF9yZWxvYWQgJiYKIAkJCQkJZG93bl9yZWFkX3RyeWxvY2soJmd0cy0+dHNfbW0tPm1tYXBfc2VtKSkgewotCQkJZ3RzLT51c3RhdHMuZm1tX3RsYmRyb3BpbisrOwotCQkJZ3J1X3RyeV9kcm9waW4oZ3RzLCB0ZmgsIE5VTEwpOworCQkJZ3J1X3RyeV9kcm9waW4oZ3J1LCBndHMsIHRmaCwgTlVMTCk7CiAJCQl1cF9yZWFkKCZndHMtPnRzX21tLT5tbWFwX3NlbSk7CiAJCX0gZWxzZSB7CiAJCQl0ZmhfdXNlcl9wb2xsaW5nX21vZGUodGZoKTsKQEAgLTUwOSwyMCArNTk0LDQzIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitpcnFyZXR1cm5fdCBncnUwX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXJldHVybiBncnVfaW50cigwLCB1dl9udW1hX2JsYWRlX2lkKCkpOworfQorCitpcnFyZXR1cm5fdCBncnUxX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXJldHVybiBncnVfaW50cigxLCB1dl9udW1hX2JsYWRlX2lkKCkpOworfQorCitpcnFyZXR1cm5fdCBncnVfaW50cl9tYmxhZGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWludCBibGFkZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2JsYWRlKGJsYWRlKSB7CisJCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKGJsYWRlKSkKKwkJCWNvbnRpbnVlOworCQkgZ3J1X2ludHIoMCwgYmxhZGUpOworCQkgZ3J1X2ludHIoMSwgYmxhZGUpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIAogc3RhdGljIGludCBncnVfdXNlcl9kcm9waW4oc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywKIAkJCSAgIHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAotCQkJICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKmNiKQorCQkJICAgdm9pZCAqY2IpCiB7CiAJc3RydWN0IGdydV9tbV9zdHJ1Y3QgKmdtcyA9IGd0cy0+dHNfZ21zOwogCWludCByZXQ7CiAKLQlndHMtPnVzdGF0cy51cG1fdGxiZHJvcGluKys7CisJZ3RzLT51c3RhdHMudXBtX3RsYm1pc3MrKzsKIAl3aGlsZSAoMSkgewogCQl3YWl0X2V2ZW50KGdtcy0+bXNfd2FpdF9xdWV1ZSwKIAkJCSAgIGF0b21pY19yZWFkKCZnbXMtPm1zX3JhbmdlX2FjdGl2ZSkgPT0gMCk7CiAJCXByZWZldGNodyh0ZmgpOwkvKiBIZWxwcyBvbiBoZHcsIHJlcXVpcmVkIGZvciBlbXVsYXRvciAqLwotCQlyZXQgPSBncnVfdHJ5X2Ryb3BpbihndHMsIHRmaCwgY2IpOworCQlyZXQgPSBncnVfdHJ5X2Ryb3BpbihndHMtPnRzX2dydSwgZ3RzLCB0ZmgsIGNiKTsKIAkJaWYgKHJldCA8PSAwKQogCQkJcmV0dXJuIHJldDsKIAkJU1RBVChjYWxsX29zX3dhaXRfcXVldWUpOwpAQCAtNTM4LDUyICs2NDYsNDEgQEAKIHsKIAlzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaDsKIAlzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzOwotCXVuc2lnbmVkIGxvbmcgX191c2VyICpjYnA7CisJdm9pZCAqY2JrOwogCWludCB1Y2JudW0sIGNicm51bSwgcmV0ID0gLUVJTlZBTDsKIAogCVNUQVQoY2FsbF9vcyk7Ci0JZ3J1X2RiZyhncnVkZXYsICJhZGRyZXNzIDB4JWx4XG4iLCBjYik7CiAKIAkvKiBzYW5pdHkgY2hlY2sgdGhlIGNiIHBvaW50ZXIgKi8KIAl1Y2JudW0gPSBnZXRfY2JfbnVtYmVyKCh2b2lkICopY2IpOwogCWlmICgoY2IgJiAoR1JVX0hBTkRMRV9TVFJJREUgLSAxKSkgfHwgdWNibnVtID49IEdSVV9OVU1fQ0IpCiAJCXJldHVybiAtRUlOVkFMOwotCWNicCA9ICh1bnNpZ25lZCBsb25nICopY2I7CiAKIAlndHMgPSBncnVfZmluZF9sb2NrX2d0cyhjYik7CiAJaWYgKCFndHMpCiAJCXJldHVybiAtRUlOVkFMOworCWdydV9kYmcoZ3J1ZGV2LCAiYWRkcmVzcyAweCVseCwgZ2lkICVkLCBndHMgMHglcFxuIiwgY2IsIGd0cy0+dHNfZ3J1ID8gZ3RzLT50c19ncnUtPmdzX2dpZCA6IC0xLCBndHMpOwogCiAJaWYgKHVjYm51bSA+PSBndHMtPnRzX2Nicl9hdV9jb3VudCAqIEdSVV9DQlJfQVVfU0laRSkKIAkJZ290byBleGl0OwogCi0JLyoKLQkgKiBJZiBmb3JjZV91bmxvYWQgaXMgc2V0LCB0aGUgVVBNIFRMQiBmYXVsdCBpcyBwaG9ueS4gVGhlIHRhc2sKLQkgKiBoYXMgbWlncmF0ZWQgdG8gYW5vdGhlciBub2RlIGFuZCB0aGUgR1NFRyBtdXN0IGJlIG1vdmVkLiBKdXN0Ci0JICogdW5sb2FkIHRoZSBjb250ZXh0LiBUaGUgdGFzayB3aWxsIHBhZ2UgZmF1bHQgYW5kIGFzc2lnbiBhIG5ldwotCSAqIGNvbnRleHQuCi0JICovCi0JaWYgKGd0cy0+dHNfdGdpZF9vd25lciA9PSBjdXJyZW50LT50Z2lkICYmIGd0cy0+dHNfYmxhZGUgPj0gMCAmJgotCQkJCWd0cy0+dHNfYmxhZGUgIT0gdXZfbnVtYV9ibGFkZV9pZCgpKSB7Ci0JCVNUQVQoY2FsbF9vc19vZmZub2RlX3JlZmVyZW5jZSk7Ci0JCWd0cy0+dHNfZm9yY2VfdW5sb2FkID0gMTsKLQl9CisJZ3J1X2NoZWNrX2NvbnRleHRfcGxhY2VtZW50KGd0cyk7CiAKIAkvKgogCSAqIENDSCBtYXkgY29udGFpbiBzdGFsZSBkYXRhIGlmIHRzX2ZvcmNlX2NjaF9yZWxvYWQgaXMgc2V0LgogCSAqLwogCWlmIChndHMtPnRzX2dydSAmJiBndHMtPnRzX2ZvcmNlX2NjaF9yZWxvYWQpIHsKIAkJZ3RzLT50c19mb3JjZV9jY2hfcmVsb2FkID0gMDsKLQkJZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKTsKKwkJZ3J1X3VwZGF0ZV9jY2goZ3RzKTsKIAl9CiAKIAlyZXQgPSAtRUFHQUlOOwogCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKLQlpZiAoZ3RzLT50c19mb3JjZV91bmxvYWQpIHsKLQkJZ3J1X3VubG9hZF9jb250ZXh0KGd0cywgMSk7Ci0JfSBlbHNlIGlmIChndHMtPnRzX2dydSkgeworCWlmIChndHMtPnRzX2dydSkgewogCQl0ZmggPSBnZXRfdGZoX2J5X2luZGV4KGd0cy0+dHNfZ3J1LCBjYnJudW0pOwotCQlyZXQgPSBncnVfdXNlcl9kcm9waW4oZ3RzLCB0ZmgsIGNicCk7CisJCWNiayA9IGdldF9nc2VnX2Jhc2VfYWRkcmVzc19jYihndHMtPnRzX2dydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsCisJCQkJZ3RzLT50c19jdHhudW0sIHVjYm51bSk7CisJCXJldCA9IGdydV91c2VyX2Ryb3BpbihndHMsIHRmaCwgY2JrKTsKIAl9CiBleGl0OgogCWdydV91bmxvY2tfZ3RzKGd0cyk7CkBAIC02MDUsMTEgKzcwMiwxMSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZXhjZGV0LCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihleGNkZXQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlncnVfZGJnKGdydWRldiwgImFkZHJlc3MgMHglbHhcbiIsIGV4Y2RldC5jYik7CiAJZ3RzID0gZ3J1X2ZpbmRfbG9ja19ndHMoZXhjZGV0LmNiKTsKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlncnVfZGJnKGdydWRldiwgImFkZHJlc3MgMHglbHgsIGdpZCAlZCwgZ3RzIDB4JXBcbiIsIGV4Y2RldC5jYiwgZ3RzLT50c19ncnUgPyBndHMtPnRzX2dydS0+Z3NfZ2lkIDogLTEsIGd0cyk7CiAJdWNibnVtID0gZ2V0X2NiX251bWJlcigodm9pZCAqKWV4Y2RldC5jYik7CiAJaWYgKHVjYm51bSA+PSBndHMtPnRzX2Nicl9hdV9jb3VudCAqIEdSVV9DQlJfQVVfU0laRSkgewogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNjE3LDYgKzcxNCw3IEBACiAJCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAkJY2JlID0gZ2V0X2NiZV9ieV9pbmRleChndHMtPnRzX2dydSwgY2JybnVtKTsKIAkJZ3J1X2ZsdXNoX2NhY2hlKGNiZSk7CS8qIENCRSBub3QgY29oZXJlbnQgKi8KKwkJc3luY19jb3JlKCk7CQkvKiBtYWtlIHN1cmUgd2UgYXJlIGhhdmUgY3VycmVudCBkYXRhICovCiAJCWV4Y2RldC5vcGMgPSBjYmUtPm9wY2NweTsKIAkJZXhjZGV0LmV4b3BjID0gY2JlLT5leG9wY2NweTsKIAkJZXhjZGV0LmVjYXVzZSA9IGNiZS0+ZWNhdXNlOwpAQCAtNjI0LDcgKzcyMiw3IEBACiAJCWV4Y2RldC5leGNlcHRkZXQxID0gY2JlLT5pZGVmM3VwZDsKIAkJZXhjZGV0LmNicnN0YXRlID0gY2JlLT5jYnJzdGF0ZTsKIAkJZXhjZGV0LmNicmV4ZWNzdGF0dXMgPSBjYmUtPmNicmV4ZWNzdGF0dXM7Ci0JCWdydV9mbHVzaF9jYWNoZShjYmUpOworCQlncnVfZmx1c2hfY2FjaGVfY2JlKGNiZSk7CiAJCXJldCA9IDA7CiAJfSBlbHNlIHsKIAkJcmV0ID0gLUVBR0FJTjsKQEAgLTczMyw2ICs4MzEsMTEgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YocmVxKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJLyoKKwkgKiBUaGUgbGlicmFyeSBjcmVhdGVzIGFycmF5cyBvZiBjb250ZXh0cyBmb3IgdGhyZWFkZWQgcHJvZ3JhbXMuCisJICogSWYgbm8gZ3RzIGV4aXN0cyBpbiB0aGUgYXJyYXksIHRoZSBjb250ZXh0IGhhcyBuZXZlciBiZWVuIHVzZWQgJiBhbGwKKwkgKiBzdGF0aXN0aWNzIGFyZSBpbXBsaWNpdGx5IDAuCisJICovCiAJZ3RzID0gZ3J1X2ZpbmRfbG9ja19ndHMocmVxLmdzZWcpOwogCWlmIChndHMpIHsKIAkJbWVtY3B5KCZyZXEuc3RhdHMsICZndHMtPnVzdGF0cywgc2l6ZW9mKGd0cy0+dXN0YXRzKSk7CkBAIC03NjIsMTEgKzg2NSwyNSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlncnVfZGJnKGdydWRldiwgIm9wICVkLCBnc2VnIDB4JWx4LCB2YWx1ZTEgMHglbHhcbiIsIHJlcS5vcCwgcmVxLmdzZWcsIHJlcS52YWwxKTsKIAotCWd0cyA9IGdydV9hbGxvY19sb2NrZWRfZ3RzKHJlcS5nc2VnKTsKLQlpZiAoIWd0cykKLQkJcmV0dXJuIC1FSU5WQUw7CisJZ3RzID0gZ3J1X2ZpbmRfbG9ja19ndHMocmVxLmdzZWcpOworCWlmICghZ3RzKSB7CisJCWd0cyA9IGdydV9hbGxvY19sb2NrZWRfZ3RzKHJlcS5nc2VnKTsKKwkJaWYgKElTX0VSUihndHMpKQorCQkJcmV0dXJuIFBUUl9FUlIoZ3RzKTsKKwl9CiAKIAlzd2l0Y2ggKHJlcS5vcCkgeworCWNhc2Ugc2NvX2JsYWRlX2NoaXBsZXQ6CisJCS8qIFNlbGVjdCBibGFkZS9jaGlwbGV0IGZvciBHUlUgY29udGV4dCAqLworCQlpZiAocmVxLnZhbDEgPCAtMSB8fCByZXEudmFsMSA+PSBHUlVfTUFYX0JMQURFUyB8fCAhZ3J1X2Jhc2VbcmVxLnZhbDFdIHx8CisJCSAgICByZXEudmFsMCA8IC0xIHx8IHJlcS52YWwwID49IEdSVV9DSElQTEVUU19QRVJfSFVCKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJZ3RzLT50c191c2VyX2JsYWRlX2lkID0gcmVxLnZhbDE7CisJCQlndHMtPnRzX3VzZXJfY2hpcGxldF9pZCA9IHJlcS52YWwwOworCQkJZ3J1X2NoZWNrX2NvbnRleHRfcGxhY2VtZW50KGd0cyk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBzY29fZ3NlZ19vd25lcjoKICAJCS8qIFJlZ2lzdGVyIHRoZSBjdXJyZW50IHRhc2sgYXMgdGhlIEdTRUcgb3duZXIgKi8KIAkJZ3RzLT50c190Z2lkX293bmVyID0gY3VycmVudC0+dGdpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwppbmRleCBjZTVlZGE5Li5jYjNiNGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCkBAIC0zNSw2ICszNSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjaW5jbHVkZSAiZ3J1LmgiCiAjaW5jbHVkZSAiZ3J1bGliLmgiCkBAIC0xMzAsNyArMTMzLDYgQEAKIAlzdHJ1Y3QgZ3J1X3ZtYV9kYXRhICp2ZGF0YTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHJlcSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTUwLDYgKzE1Miw3IEBACiAJCXZkYXRhLT52ZF9kc3JfYXVfY291bnQgPQogCQkgICAgR1JVX0RTX0JZVEVTX1RPX0FVKHJlcS5kYXRhX3NlZ21lbnRfYnl0ZXMpOwogCQl2ZGF0YS0+dmRfY2JyX2F1X2NvdW50ID0gR1JVX0NCX0NPVU5UX1RPX0FVKHJlcS5jb250cm9sX2Jsb2Nrcyk7CisJCXZkYXRhLT52ZF90bGJfcHJlbG9hZF9jb3VudCA9IHJlcS50bGJfcHJlbG9hZF9jb3VudDsKIAkJcmV0ID0gMDsKIAl9CiAJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CkBAIC0xOTAsNyArMTkzLDcgQEAKIHsKIAlpbnQgZXJyID0gLUVCQURSUUM7CiAKLQlncnVfZGJnKGdydWRldiwgImZpbGUgJXBcbiIsIGZpbGUpOworCWdydV9kYmcoZ3J1ZGV2LCAiZmlsZSAlcCwgcmVxIDB4JXgsIDB4JWx4XG4iLCBmaWxlLCByZXEsIGFyZyk7CiAKIAlzd2l0Y2ggKHJlcSkgewogCWNhc2UgR1JVX0NSRUFURV9DT05URVhUOgpAQCAtMjMyLDIzICsyMzUsMjQgQEAKICAqIHN5c3RlbS4KICAqLwogc3RhdGljIHZvaWQgZ3J1X2luaXRfY2hpcGxldChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsIHVuc2lnbmVkIGxvbmcgcGFkZHIsCi0JCQkgICAgIHZvaWQgKnZhZGRyLCBpbnQgbmlkLCBpbnQgYmlkLCBpbnQgZ3J1bnVtKQorCQkJICAgICB2b2lkICp2YWRkciwgaW50IGJsYWRlX2lkLCBpbnQgY2hpcGxldF9pZCkKIHsKIAlzcGluX2xvY2tfaW5pdCgmZ3J1LT5nc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZ3J1LT5nc19hc2lkX2xvY2spOwogCWdydS0+Z3NfZ3J1X2Jhc2VfcGFkZHIgPSBwYWRkcjsKIAlncnUtPmdzX2dydV9iYXNlX3ZhZGRyID0gdmFkZHI7Ci0JZ3J1LT5nc19naWQgPSBiaWQgKiBHUlVfQ0hJUExFVFNfUEVSX0JMQURFICsgZ3J1bnVtOwotCWdydS0+Z3NfYmxhZGUgPSBncnVfYmFzZVtiaWRdOwotCWdydS0+Z3NfYmxhZGVfaWQgPSBiaWQ7CisJZ3J1LT5nc19naWQgPSBibGFkZV9pZCAqIEdSVV9DSElQTEVUU19QRVJfQkxBREUgKyBjaGlwbGV0X2lkOworCWdydS0+Z3NfYmxhZGUgPSBncnVfYmFzZVtibGFkZV9pZF07CisJZ3J1LT5nc19ibGFkZV9pZCA9IGJsYWRlX2lkOworCWdydS0+Z3NfY2hpcGxldF9pZCA9IGNoaXBsZXRfaWQ7CiAJZ3J1LT5nc19jYnJfbWFwID0gKEdSVV9DQlJfQVUgPT0gNjQpID8gfjAgOiAoMVVMIDw8IEdSVV9DQlJfQVUpIC0gMTsKIAlncnUtPmdzX2Rzcl9tYXAgPSAoMVVMIDw8IEdSVV9EU1JfQVUpIC0gMTsKIAlncnUtPmdzX2FzaWRfbGltaXQgPSBNQVhfQVNJRDsKIAlncnVfdGdoX2ZsdXNoX2luaXQoZ3J1KTsKIAlpZiAoZ3J1LT5nc19naWQgPj0gZ3J1X21heF9naWRzKQogCQlncnVfbWF4X2dpZHMgPSBncnUtPmdzX2dpZCArIDE7Ci0JZ3J1X2RiZyhncnVkZXYsICJiaWQgJWQsIG5pZCAlZCwgZ2lkICVkLCB2YWRkciAlcCAoMHglbHgpXG4iLAotCQliaWQsIG5pZCwgZ3J1LT5nc19naWQsIGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsCisJZ3J1X2RiZyhncnVkZXYsICJiaWQgJWQsIGdpZCAlZCwgdmFkZHIgJXAgKDB4JWx4KVxuIiwKKwkJYmxhZGVfaWQsIGdydS0+Z3NfZ2lkLCBncnUtPmdzX2dydV9iYXNlX3ZhZGRyLAogCQlncnUtPmdzX2dydV9iYXNlX3BhZGRyKTsKIH0KIApAQCAtMjY0LDEyICsyNjgsMTAgQEAKIAogCW1heF91c2VyX2NicnMgPSBHUlVfTlVNX0NCOwogCW1heF91c2VyX2Rzcl9ieXRlcyA9IEdSVV9OVU1fRFNSX0JZVEVTOwotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQliaWQgPSB1dl9ub2RlX3RvX2JsYWRlX2lkKG5pZCk7Ci0JCXBub2RlID0gdXZfbm9kZV90b19wbm9kZShuaWQpOwotCQlpZiAoYmlkIDwgMCB8fCBncnVfYmFzZVtiaWRdKQotCQkJY29udGludWU7Ci0JCXBhZ2UgPSBhbGxvY19wYWdlc19leGFjdF9ub2RlKG5pZCwgR0ZQX0tFUk5FTCwgb3JkZXIpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2JsYWRlKGJpZCkgeworCQlwbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKGJpZCk7CisJCW5pZCA9IHV2X2JsYWRlX3RvX21lbW9yeV9uaWQoYmlkKTsvKiAtMSBpZiBubyBtZW1vcnkgb24gYmxhZGUgKi8KKwkJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLCBHRlBfS0VSTkVMLCBvcmRlcik7CiAJCWlmICghcGFnZSkKIAkJCWdvdG8gZmFpbDsKIAkJZ3J1X2Jhc2VbYmlkXSA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKQEAgLTI4NSw3ICsyODcsNyBAQAogCQkJCWNoaXArKywgZ3J1KyspIHsKIAkJCXBhZGRyID0gZ3J1X2NoaXBsZXRfcGFkZHIoZ3J1X2Jhc2VfcGFkZHIsIHBub2RlLCBjaGlwKTsKIAkJCXZhZGRyID0gZ3J1X2NoaXBsZXRfdmFkZHIoZ3J1X2Jhc2VfdmFkZHIsIHBub2RlLCBjaGlwKTsKLQkJCWdydV9pbml0X2NoaXBsZXQoZ3J1LCBwYWRkciwgdmFkZHIsIG5pZCwgYmlkLCBjaGlwKTsKKwkJCWdydV9pbml0X2NoaXBsZXQoZ3J1LCBwYWRkciwgdmFkZHIsIGJpZCwgY2hpcCk7CiAJCQluID0gaHdlaWdodDY0KGdydS0+Z3NfY2JyX21hcCkgKiBHUlVfQ0JSX0FVX1NJWkU7CiAJCQljYnJzID0gbWF4KGNicnMsIG4pOwogCQkJbiA9IGh3ZWlnaHQ2NChncnUtPmdzX2Rzcl9tYXApICogR1JVX0RTUl9BVV9CWVRFUzsKQEAgLTI5OCwzOSArMzAwLDIxNSBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCWZvciAobmlkLS07IG5pZCA+PSAwOyBuaWQtLSkKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylncnVfYmFzZVtuaWRdLCBvcmRlcik7CisJZm9yIChiaWQtLTsgYmlkID49IDA7IGJpZC0tKQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWdydV9iYXNlW2JpZF0sIG9yZGVyKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIHZvaWQgZ3J1X2ZyZWVfdGFibGVzKHZvaWQpCit7CisJaW50IGJpZDsKKwlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZW9mKHN0cnVjdCBncnVfc3RhdGUpICoKKwkJCSAgICAgIEdSVV9DSElQTEVUU19QRVJfQkxBREUpOworCisJZm9yIChiaWQgPSAwOyBiaWQgPCBHUlVfTUFYX0JMQURFUzsgYmlkKyspCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZ3J1X2Jhc2VbYmlkXSwgb3JkZXIpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncnVfY2hpcGxldF9jcHVfdG9fbW1yKGludCBjaGlwbGV0LCBpbnQgY3B1LCBpbnQgKmNvcmVwKQoreworCXVuc2lnbmVkIGxvbmcgbW1yID0gMDsKKwlpbnQgY29yZTsKKworCS8qCisJICogV2UgdGFyZ2V0IHRoZSBjb3JlcyBvZiBhIGJsYWRlIGFuZCBub3QgdGhlIGh5cGVydGhyZWFkcyB0aGVtc2VsdmVzLgorCSAqIFRoZXJlIGlzIGEgbWF4IG9mIDggY29yZXMgcGVyIHNvY2tldCBhbmQgMiBzb2NrZXRzIHBlciBibGFkZSwKKwkgKiBtYWtpbmcgZm9yIGEgbWF4IHRvdGFsIG9mIDE2IGNvcmVzIChpLmUuLCAxNiBDUFVzIHdpdGhvdXQKKwkgKiBoeXBlcnRocmVhZGluZyBhbmQgMzIgQ1BVcyB3aXRoIGh5cGVydGhyZWFkaW5nKS4KKwkgKi8KKwljb3JlID0gdXZfY3B1X2NvcmVfbnVtYmVyKGNwdSkgKyBVVl9NQVhfSU5UX0NPUkVTICogdXZfY3B1X3NvY2tldF9udW1iZXIoY3B1KTsKKwlpZiAoY29yZSA+PSBHUlVfTlVNX1RGTSB8fCB1dl9jcHVfaHRfbnVtYmVyKGNwdSkpCisJCXJldHVybiAwOworCisJaWYgKGNoaXBsZXQgPT0gMCkgeworCQltbXIgPSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJRyArCisJCSAgICBjb3JlICogKFVWSF9HUjBfVExCX0lOVDFfQ09ORklHIC0gVVZIX0dSMF9UTEJfSU5UMF9DT05GSUcpOworCX0gZWxzZSBpZiAoY2hpcGxldCA9PSAxKSB7CisJCW1tciA9IFVWSF9HUjFfVExCX0lOVDBfQ09ORklHICsKKwkJICAgIGNvcmUgKiAoVVZIX0dSMV9UTEJfSU5UMV9DT05GSUcgLSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJRyk7CisJfSBlbHNlIHsKKwkJQlVHKCk7CisJfQorCisJKmNvcmVwID0gY29yZTsKKwlyZXR1cm4gbW1yOworfQorCiAjaWZkZWYgQ09ORklHX0lBNjQKIAotc3RhdGljIGludCBnZXRfYmFzZV9pcnEodm9pZCkKK3N0YXRpYyBpbnQgZ3J1X2lycV9jb3VudFtHUlVfQ0hJUExFVFNfUEVSX0JMQURFXTsKKworc3RhdGljIHZvaWQgZ3J1X25vb3AodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gSVJRX0dSVTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncnVfY2hpcFtHUlVfQ0hJUExFVFNfUEVSX0JMQURFXSA9IHsKKwlbMCAuLi4gR1JVX0NISVBMRVRTX1BFUl9CTEFERSAtIDFdIHsKKwkJLm1hc2sJCT0gZ3J1X25vb3AsCisJCS51bm1hc2sJCT0gZ3J1X25vb3AsCisJCS5hY2sJCT0gZ3J1X25vb3AKKwl9Cit9OworCitzdGF0aWMgaW50IGdydV9jaGlwbGV0X3NldHVwX3RsYl9pcnEoaW50IGNoaXBsZXQsIGNoYXIgKmlycV9uYW1lLAorCQkJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlciwgaW50IGNwdSwgaW50IGJsYWRlKQoreworCXVuc2lnbmVkIGxvbmcgbW1yOworCWludCBpcnEgPSBJUlFfR1JVICsgY2hpcGxldDsKKwlpbnQgcmV0LCBjb3JlOworCisJbW1yID0gZ3J1X2NoaXBsZXRfY3B1X3RvX21tcihjaGlwbGV0LCBjcHUsICZjb3JlKTsKKwlpZiAobW1yID09IDApCisJCXJldHVybiAwOworCisJaWYgKGdydV9pcnFfY291bnRbY2hpcGxldF0gPT0gMCkgeworCQlncnVfY2hpcFtjaGlwbGV0XS5uYW1lID0gaXJxX25hbWU7CisJCXJldCA9IHNldF9pcnFfY2hpcChpcnEsICZncnVfY2hpcFtjaGlwbGV0XSk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9pcnFfY2hpcCBmYWlsZWQsIGVycm5vPSVkXG4iLAorCQkJICAgICAgIEdSVV9EUklWRVJfSURfU1RSLCAtcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGlycV9oYW5kbGVyLCAwLCBpcnFfbmFtZSwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZCwgZXJybm89JWRcbiIsCisJCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIsIC1yZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlncnVfaXJxX2NvdW50W2NoaXBsZXRdKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3J1X2NoaXBsZXRfdGVhcmRvd25fdGxiX2lycShpbnQgY2hpcGxldCwgaW50IGNwdSwgaW50IGJsYWRlKQoreworCXVuc2lnbmVkIGxvbmcgbW1yOworCWludCBjb3JlLCBpcnEgPSBJUlFfR1JVICsgY2hpcGxldDsKKworCWlmIChncnVfaXJxX2NvdW50W2NoaXBsZXRdID09IDApCisJCXJldHVybjsKKworCW1tciA9IGdydV9jaGlwbGV0X2NwdV90b19tbXIoY2hpcGxldCwgY3B1LCAmY29yZSk7CisJaWYgKG1tciA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoLS1ncnVfaXJxX2NvdW50W2NoaXBsZXRdID09IDApCisJCWZyZWVfaXJxKGlycSwgTlVMTCk7CiB9CiAKICNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAogCi1zdGF0aWMgdm9pZCBub29wKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgaW50IGdydV9jaGlwbGV0X3NldHVwX3RsYl9pcnEoaW50IGNoaXBsZXQsIGNoYXIgKmlycV9uYW1lLAorCQkJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlciwgaW50IGNwdSwgaW50IGJsYWRlKQogeworCXVuc2lnbmVkIGxvbmcgbW1yOworCWludCBpcnEsIGNvcmU7CisJaW50IHJldDsKKworCW1tciA9IGdydV9jaGlwbGV0X2NwdV90b19tbXIoY2hpcGxldCwgY3B1LCAmY29yZSk7CisJaWYgKG1tciA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlycSA9IHV2X3NldHVwX2lycShpcnFfbmFtZSwgY3B1LCBibGFkZSwgbW1yLCBVVl9BRkZJTklUWV9DUFUpOworCWlmIChpcnEgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHV2X3NldHVwX2lycSBmYWlsZWQsIGVycm5vPSVkXG4iLAorCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIsIC1pcnEpOworCQlyZXR1cm4gaXJxOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaXJxX2hhbmRsZXIsIDAsIGlycV9uYW1lLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXV2X3RlYXJkb3duX2lycShpcnEpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWQsIGVycm5vPSVkXG4iLAorCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIsIC1yZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlncnVfYmFzZVtibGFkZV0tPmJzX2dydXNbY2hpcGxldF0uZ3NfaXJxW2NvcmVdID0gaXJxOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGdydV9jaGlwID0gewotCS5uYW1lCQk9ICJncnUiLAotCS5tYXNrCQk9IG5vb3AsCi0JLnVubWFzawkJPSBub29wLAotCS5hY2sJCT0gbm9vcCwKLX07Ci0KLXN0YXRpYyBpbnQgZ2V0X2Jhc2VfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBncnVfY2hpcGxldF90ZWFyZG93bl90bGJfaXJxKGludCBjaGlwbGV0LCBpbnQgY3B1LCBpbnQgYmxhZGUpCiB7Ci0Jc2V0X2lycV9jaGlwKElSUV9HUlUsICZncnVfY2hpcCk7Ci0Jc2V0X2lycV9jaGlwKElSUV9HUlUgKyAxLCAmZ3J1X2NoaXApOwotCXJldHVybiBJUlFfR1JVOworCWludCBpcnEsIGNvcmU7CisJdW5zaWduZWQgbG9uZyBtbXI7CisKKwltbXIgPSBncnVfY2hpcGxldF9jcHVfdG9fbW1yKGNoaXBsZXQsIGNwdSwgJmNvcmUpOworCWlmIChtbXIpIHsKKwkJaXJxID0gZ3J1X2Jhc2VbYmxhZGVdLT5ic19ncnVzW2NoaXBsZXRdLmdzX2lycVtjb3JlXTsKKwkJaWYgKGlycSkgeworCQkJZnJlZV9pcnEoaXJxLCBOVUxMKTsKKwkJCXV2X3RlYXJkb3duX2lycShpcnEpOworCQl9CisJfQogfQorCiAjZW5kaWYKIAorc3RhdGljIHZvaWQgZ3J1X3RlYXJkb3duX3RsYl9pcnFzKHZvaWQpCit7CisJaW50IGJsYWRlOworCWludCBjcHU7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlibGFkZSA9IHV2X2NwdV90b19ibGFkZV9pZChjcHUpOworCQlncnVfY2hpcGxldF90ZWFyZG93bl90bGJfaXJxKDAsIGNwdSwgYmxhZGUpOworCQlncnVfY2hpcGxldF90ZWFyZG93bl90bGJfaXJxKDEsIGNwdSwgYmxhZGUpOworCX0KKwlmb3JfZWFjaF9wb3NzaWJsZV9ibGFkZShibGFkZSkgeworCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyhibGFkZSkpCisJCQljb250aW51ZTsKKwkJZ3J1X2NoaXBsZXRfdGVhcmRvd25fdGxiX2lycSgwLCAwLCBibGFkZSk7CisJCWdydV9jaGlwbGV0X3RlYXJkb3duX3RsYl9pcnEoMSwgMCwgYmxhZGUpOworCX0KK30KKworc3RhdGljIGludCBncnVfc2V0dXBfdGxiX2lycXModm9pZCkKK3sKKwlpbnQgYmxhZGU7CisJaW50IGNwdTsKKwlpbnQgcmV0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJYmxhZGUgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwkJcmV0ID0gZ3J1X2NoaXBsZXRfc2V0dXBfdGxiX2lycSgwLCAiR1JVMF9UTEIiLCBncnUwX2ludHIsIGNwdSwgYmxhZGUpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGV4aXQxOworCisJCXJldCA9IGdydV9jaGlwbGV0X3NldHVwX3RsYl9pcnEoMSwgIkdSVTFfVExCIiwgZ3J1MV9pbnRyLCBjcHUsIGJsYWRlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBleGl0MTsKKwl9CisJZm9yX2VhY2hfcG9zc2libGVfYmxhZGUoYmxhZGUpIHsKKwkJaWYgKHV2X2JsYWRlX25yX3Bvc3NpYmxlX2NwdXMoYmxhZGUpKQorCQkJY29udGludWU7CisJCXJldCA9IGdydV9jaGlwbGV0X3NldHVwX3RsYl9pcnEoMCwgIkdSVTBfVExCIiwgZ3J1X2ludHJfbWJsYWRlLCAwLCBibGFkZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gZXhpdDE7CisKKwkJcmV0ID0gZ3J1X2NoaXBsZXRfc2V0dXBfdGxiX2lycSgxLCAiR1JVMV9UTEIiLCBncnVfaW50cl9tYmxhZGUsIDAsIGJsYWRlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBleGl0MTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdDE6CisJZ3J1X3RlYXJkb3duX3RsYl9pcnFzKCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIGdydV9pbml0CiAgKgpAQCAtMzM4LDggKzUxNiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGdydV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCwgaXJxLCBjaGlwOwotCWNoYXIgaWRbMTBdOworCWludCByZXQ7CiAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQogCQlyZXR1cm4gMDsKQEAgLTM1NCw0MSArNTMxLDI5IEBACiAJZ3J1X2VuZF9wYWRkciA9IGdydV9zdGFydF9wYWRkciArIEdSVV9NQVhfQkxBREVTICogR1JVX1NJWkU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiR1JVIHNwYWNlOiAweCVseCAtIDB4JWx4XG4iLAogCSAgICAgICBncnVfc3RhcnRfcGFkZHIsIGdydV9lbmRfcGFkZHIpOwotCWlycSA9IGdldF9iYXNlX2lycSgpOwotCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOyBjaGlwKyspIHsKLQkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxICsgY2hpcCwgZ3J1X2ludHIsIDAsIGlkLCBOVUxMKTsKLQkJLyogVE9ETzogZml4IGlycSBoYW5kbGluZyBvbiB4ODYuIEZvciBub3cgaWdub3JlIGZhaWx1cmUgYmVjYXVzZQotCQkgKiBpbnRlcnJ1cHRzIGFyZSBub3QgcmVxdWlyZWQgJiBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZCAqLwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiEhIVdBUk5JTkc6IEdSVSBpZ25vcmluZyByZXF1ZXN0IGZhaWx1cmUhISFcbiIpOwotCQkJcmV0ID0gMDsKLQkJfQotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIpOwotCQkJZ290byBleGl0MTsKLQkJfQotCX0KLQogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmdydV9taXNjZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iLAogCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIpOwotCQlnb3RvIGV4aXQxOworCQlnb3RvIGV4aXQwOwogCX0KIAogCXJldCA9IGdydV9wcm9jX2luaXQoKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHByb2MgaW5pdCBmYWlsZWRcbiIsIEdSVV9EUklWRVJfSURfU1RSKTsKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MTsKIAl9CiAKIAlyZXQgPSBncnVfaW5pdF90YWJsZXMoZ3J1X3N0YXJ0X3BhZGRyLCBncnVfc3RhcnRfdmFkZHIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogaW5pdCB0YWJsZXMgZmFpbGVkXG4iLCBHUlVfRFJJVkVSX0lEX1NUUik7Ci0JCWdvdG8gZXhpdDM7CisJCWdvdG8gZXhpdDI7CiAJfQorCisJcmV0ID0gZ3J1X3NldHVwX3RsYl9pcnFzKCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGV4aXQzOworCiAJZ3J1X2tzZXJ2aWNlc19pbml0KCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogdiVzXG4iLCBHUlVfRFJJVkVSX0lEX1NUUiwKQEAgLTM5NiwzMSArNTYxLDI0IEBACiAJcmV0dXJuIDA7CiAKIGV4aXQzOgotCWdydV9wcm9jX2V4aXQoKTsKKwlncnVfZnJlZV90YWJsZXMoKTsKIGV4aXQyOgotCW1pc2NfZGVyZWdpc3RlcigmZ3J1X21pc2NkZXYpOworCWdydV9wcm9jX2V4aXQoKTsKIGV4aXQxOgotCWZvciAoLS1jaGlwOyBjaGlwID49IDA7IGNoaXAtLSkKLQkJZnJlZV9pcnEoaXJxICsgY2hpcCwgTlVMTCk7CisJbWlzY19kZXJlZ2lzdGVyKCZncnVfbWlzY2Rldik7CitleGl0MDoKIAlyZXR1cm4gcmV0OwogCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBncnVfZXhpdCh2b2lkKQogewotCWludCBpLCBiaWQ7Ci0JaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgZ3J1X3N0YXRlKSAqCi0JCQkgICAgICBHUlVfQ0hJUExFVFNfUEVSX0JMQURFKTsKLQogCWlmICghaXNfdXZfc3lzdGVtKCkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOyBpKyspCi0JCWZyZWVfaXJxKElSUV9HUlUgKyBpLCBOVUxMKTsKKwlncnVfdGVhcmRvd25fdGxiX2lycXMoKTsKIAlncnVfa3NlcnZpY2VzX2V4aXQoKTsKLQlmb3IgKGJpZCA9IDA7IGJpZCA8IEdSVV9NQVhfQkxBREVTOyBiaWQrKykKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylncnVfYmFzZVtiaWRdLCBvcmRlcik7Ci0KKwlncnVfZnJlZV90YWJsZXMoKTsKIAltaXNjX2RlcmVnaXN0ZXIoJmdydV9taXNjZGV2KTsKIAlncnVfcHJvY19leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmMKaW5kZXggMzdlN2NmYy4uMmYzMGJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuYwpAQCAtMjcsOSArMjcsMTEgQEAKICNpZmRlZiBDT05GSUdfSUE2NAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNkZWZpbmUgR1JVX09QRVJBVElPTl9USU1FT1VUCSgoKGN5Y2xlc190KSBsb2NhbF9jcHVfZGF0YS0+aXRjX2ZyZXEpKjEwKQorI2RlZmluZSBDTEtTMk5TRUMoYykJCSgoYykgKjEwMDAwMDAwMDAgLyBsb2NhbF9jcHVfZGF0YS0+aXRjX2ZyZXEpCiAjZWxzZQogI2luY2x1ZGUgPGFzbS90c2MuaD4KICNkZWZpbmUgR1JVX09QRVJBVElPTl9USU1FT1VUCSgoY3ljbGVzX3QpIHRzY19raHoqMTAqMTAwMCkKKyNkZWZpbmUgQ0xLUzJOU0VDKGMpCQkoKGMpICogMTAwMDAwMCAvIHRzY19raHopCiAjZW5kaWYKIAogLyogRXh0cmFjdCB0aGUgc3RhdHVzIGZpZWxkIGZyb20gYSBrZXJuZWwgaGFuZGxlICovCkBAIC0zOSwyMSArNDEsMzkgQEAKIAogc3RhdGljIHZvaWQgdXBkYXRlX21jc19zdGF0cyhlbnVtIG1jc19vcCBvcCwgdW5zaWduZWQgbG9uZyBjbGtzKQogeworCXVuc2lnbmVkIGxvbmcgbnNlYzsKKworCW5zZWMgPSBDTEtTMk5TRUMoY2xrcyk7CiAJYXRvbWljX2xvbmdfaW5jKCZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0uY291bnQpOwotCWF0b21pY19sb25nX2FkZChjbGtzLCAmbWNzX29wX3N0YXRpc3RpY3Nbb3BdLnRvdGFsKTsKLQlpZiAobWNzX29wX3N0YXRpc3RpY3Nbb3BdLm1heCA8IGNsa3MpCi0JCW1jc19vcF9zdGF0aXN0aWNzW29wXS5tYXggPSBjbGtzOworCWF0b21pY19sb25nX2FkZChuc2VjLCAmbWNzX29wX3N0YXRpc3RpY3Nbb3BdLnRvdGFsKTsKKwlpZiAobWNzX29wX3N0YXRpc3RpY3Nbb3BdLm1heCA8IG5zZWMpCisJCW1jc19vcF9zdGF0aXN0aWNzW29wXS5tYXggPSBuc2VjOwogfQogCiBzdGF0aWMgdm9pZCBzdGFydF9pbnN0cnVjdGlvbih2b2lkICpoKQogewogCXVuc2lnbmVkIGxvbmcgKncwID0gaDsKIAotCXdtYigpOwkJLyogc2V0dGluZyBDTUQgYml0IG11c3QgYmUgbGFzdCAqLwotCSp3MCA9ICp3MCB8IDE7CisJd21iKCk7CQkvKiBzZXR0aW5nIENNRC9TVEFUVVMgYml0cyBtdXN0IGJlIGxhc3QgKi8KKwkqdzAgPSAqdzAgfCAweDIwMDAxOwogCWdydV9mbHVzaF9jYWNoZShoKTsKIH0KIAorc3RhdGljIHZvaWQgcmVwb3J0X2luc3RydWN0aW9uX3RpbWVvdXQodm9pZCAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIGdvZmYgPSBHU0VHUE9GRigodW5zaWduZWQgbG9uZyloKTsKKwljaGFyICppZCA9ICI/Pz8iOworCisJaWYgKFRZUEVfSVMoQ0NILCBnb2ZmKSkKKwkJaWQgPSAiQ0NIIjsKKwllbHNlIGlmIChUWVBFX0lTKFRHSCwgZ29mZikpCisJCWlkID0gIlRHSCI7CisJZWxzZSBpZiAoVFlQRV9JUyhURkgsIGdvZmYpKQorCQlpZCA9ICJURkgiOworCisJcGFuaWMoS0VSTl9BTEVSVCAiR1JVICVwICglcykgaXMgbWFsZnVuY3Rpb25pbmdcbiIsIGgsIGlkKTsKK30KKwogc3RhdGljIGludCB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKHZvaWQgKmgsIGVudW0gbWNzX29wIG9wYykKIHsKIAlpbnQgc3RhdHVzOwpAQCAtNjQsOSArODQsMTAgQEAKIAkJc3RhdHVzID0gR0VUX01TRUdfSEFORExFX1NUQVRVUyhoKTsKIAkJaWYgKHN0YXR1cyAhPSBDQ0hTVEFUVVNfQUNUSVZFKQogCQkJYnJlYWs7Ci0JCWlmIChHUlVfT1BFUkFUSU9OX1RJTUVPVVQgPCAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpCi0JCQlwYW5pYygiR1JVICVwIGlzIG1hbGZ1bmN0aW9uaW5nOiBzdGFydCAlbGQsIGVuZCAlbGRcbiIsCi0JCQkgICAgICBoLCBzdGFydF90aW1lLCAodW5zaWduZWQgbG9uZylnZXRfY3ljbGVzKCkpOworCQlpZiAoR1JVX09QRVJBVElPTl9USU1FT1VUIDwgKGdldF9jeWNsZXMoKSAtIHN0YXJ0X3RpbWUpKSB7CisJCQlyZXBvcnRfaW5zdHJ1Y3Rpb25fdGltZW91dChoKTsKKwkJCXN0YXJ0X3RpbWUgPSBnZXRfY3ljbGVzKCk7CisJCX0KIAl9CiAJaWYgKGdydV9vcHRpb25zICYgT1BUX1NUQVRTKQogCQl1cGRhdGVfbWNzX3N0YXRzKG9wYywgZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSk7CkBAIC03NSw5ICs5NiwxOCBAQAogCiBpbnQgY2NoX2FsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKQogeworCWludCByZXQ7CisKIAljY2gtPm9wYyA9IENDSE9QX0FMTE9DQVRFOwogCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7Ci0JcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoLCBjY2hvcF9hbGxvY2F0ZSk7CisJcmV0ID0gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2FsbG9jYXRlKTsKKworCS8qCisJICogU3RvcCBzcGVjdWxhdGlvbiBpbnRvIHRoZSBHU0VHIGJlaW5nIG1hcHBlZCBieSB0aGUgcHJldmlvdXMgQUxMT0NBVEUuCisJICogVGhlIEdTRUcgbWVtb3J5IGRvZXMgbm90IGV4aXN0IHVudGlsIHRoZSBBTExPQ0FURSBjb21wbGV0ZXMuCisJICovCisJc3luY19jb3JlKCk7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGNjaF9zdGFydChzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKQEAgLTk2LDkgKzEyNiwxOCBAQAogCiBpbnQgY2NoX2RlYWxsb2NhdGUoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpCiB7CisJaW50IHJldDsKKwogCWNjaC0+b3BjID0gQ0NIT1BfREVBTExPQ0FURTsKIAlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCwgY2Nob3BfZGVhbGxvY2F0ZSk7CisJcmV0ID0gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2RlYWxsb2NhdGUpOworCisJLyoKKwkgKiBTdG9wIHNwZWN1bGF0aW9uIGludG8gdGhlIEdTRUcgYmVpbmcgdW5tYXBwZWQgYnkgdGhlIHByZXZpb3VzCisJICogREVBTExPQ0FURS4KKwkgKi8KKwlzeW5jX2NvcmUoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgY2NoX2ludGVycnVwdF9zeW5jKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZQpAQCAtMTI2LDE3ICsxNjUsMjAgQEAKIAlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZSh0Z2gsIHRnaG9wX2ludmFsaWRhdGUpOwogfQogCi12b2lkIHRmaF93cml0ZV9vbmx5KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAotCQkJCSAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJICBpbnQgYXNpZCwgaW50IGRpcnR5LCBpbnQgcGFnZXNpemUpCitpbnQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsCisJCQkJICB1bnNpZ25lZCBsb25nIHBhZGRyLCBpbnQgZ2FhLAorCQkJCSAgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGFzaWQsIGludCBkaXJ0eSwKKwkJCQkgIGludCBwYWdlc2l6ZSkKIHsKIAl0ZmgtPmZpbGxhc2lkID0gYXNpZDsKIAl0ZmgtPmZpbGx2YWRkciA9IHZhZGRyOwotCXRmaC0+cGZuID0gcGZuOworCXRmaC0+cGZuID0gcGFkZHIgPj4gR1JVX1BBRERSX1NISUZUOworCXRmaC0+Z2FhID0gZ2FhOwogCXRmaC0+ZGlydHkgPSBkaXJ0eTsKIAl0ZmgtPnBhZ2VzaXplID0gcGFnZXNpemU7CiAJdGZoLT5vcGMgPSBURkhPUF9XUklURV9PTkxZOwogCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUodGZoLCB0ZmhvcF93cml0ZV9vbmx5KTsKIH0KIAogdm9pZCB0Zmhfd3JpdGVfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAppbmRleCBmNDQxMTIyLi4zZjk5OGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCkBAIC05MSw2ICs5MSwxMiBAQAogLyogQ29udmVydCBhbiBhcmJpdHJhcnkgaGFuZGxlIGFkZHJlc3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgR1JVIHNlZ21lbnQgKi8KICNkZWZpbmUgR1JVQkFTRShoKQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKShoKSAmIH4oR1JVX1NJWkUgLSAxKSkpCiAKKy8qIFRlc3QgYSB2YWxpZCBoYW5kbGUgYWRkcmVzcyB0byBkZXRlcm1pbmUgdGhlIHR5cGUgKi8KKyNkZWZpbmUgVFlQRV9JUyhobiwgaCkJCSgoaCkgPj0gR1JVXyMjaG4jI19CQVNFICYmIChoKSA8CVwKKwkJR1JVXyMjaG4jI19CQVNFICsgR1JVX05VTV8jI2huICogR1JVX0hBTkRMRV9TVFJJREUgJiYgICBcCisJCSgoKGgpICYgKEdSVV9IQU5ETEVfU1RSSURFIC0gMSkpID09IDApKQorCisKIC8qIEdlbmVyYWwgYWRkcmVzc2luZyBtYWNyb3MuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9nc2VnX2Jhc2VfYWRkcmVzcyh2b2lkICpiYXNlLCBpbnQgY3R4bnVtKQogewpAQCAtMTU4LDYgKzE2NCwxNiBAQAogCXJldHVybiB2YWRkciArIEdSVV9TSVpFICogKDIgKiBwbm9kZSAgKyBjaGlwbGV0KTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfZXh0ZW5kZWQgKmdydV90ZmhfdG9fY2JlKAorCQkJCQlzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCkKK3sKKwl1bnNpZ25lZCBsb25nIGNiZTsKKworCWNiZSA9ICh1bnNpZ25lZCBsb25nKXRmaCAtIEdSVV9URkhfQkFTRSArIEdSVV9DQkVfQkFTRTsKKwlyZXR1cm4gKHN0cnVjdCBncnVfY29udHJvbF9ibG9ja19leHRlbmRlZCopY2JlOworfQorCisKIAogCiAvKgpAQCAtMjM2LDYgKzI1MiwxNyBAQAogCVRHSFNUQVRFX1JFU1RBUlRfQ1RYLAogfTsKIAorZW51bSBncnVfdGdoX2NhdXNlIHsKKwlUR0hDQVVTRV9SUl9FQ0MsCisJVEdIQ0FVU0VfVExCX0VDQywKKwlUR0hDQVVTRV9MUlVfRUNDLAorCVRHSENBVVNFX1BTX0VDQywKKwlUR0hDQVVTRV9NVUxfRVJSLAorCVRHSENBVVNFX0RBVEFfRVJSLAorCVRHSENBVVNFX1NXX0ZPUkNFCit9OworCisKIC8qCiAgKiBURkggLSBUTEIgR2xvYmFsIEhhbmRsZQogICogCVVzZWQgZm9yIFRMQiBkcm9waW5zIGludG8gdGhlIEdSVSBUTEIuCkBAIC00NDAsNiArNDY3LDEyIEBACiAJdW5zaWduZWQgaW50IGNicmV4ZWNzdGF0dXM6ODsKIH07CiAKKy8qIENCRSBmaWVsZHMgZm9yIGFjdGl2ZSBCQ09QWSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgY2JlX2JhZGRyMAlpZGVmMXVwZAorI2RlZmluZSBjYmVfYmFkZHIxCWlkZWYzdXBkCisjZGVmaW5lIGNiZV9zcmNfY2wJaWRlZjZjcHkKKyNkZWZpbmUgY2JlX25lbGVtY3VyCWlkZWY1dXBkCisKIGVudW0gZ3J1X2Nicl9zdGF0ZSB7CiAJQ0JSU1RBVEVfSU5BQ1RJVkUsCiAJQ0JSU1RBVEVfSURMRSwKQEAgLTQ4Nyw4ICs1MjAsOCBAQAogaW50IHRnaF9pbnZhbGlkYXRlKHN0cnVjdCBncnVfdGxiX2dsb2JhbF9oYW5kbGUgKnRnaCwgdW5zaWduZWQgbG9uZyB2YWRkciwKIAl1bnNpZ25lZCBsb25nIHZhZGRybWFzaywgaW50IGFzaWQsIGludCBwYWdlc2l6ZSwgaW50IGdsb2JhbCwgaW50IG4sCiAJdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwKTsKLXZvaWQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsIHVuc2lnbmVkIGxvbmcgcGZuLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSk7CitpbnQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsIHVuc2lnbmVkIGxvbmcgcGFkZHIsCisJaW50IGdhYSwgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGFzaWQsIGludCBkaXJ0eSwgaW50IHBhZ2VzaXplKTsKIHZvaWQgdGZoX3dyaXRlX3Jlc3RhcnQoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsIHVuc2lnbmVkIGxvbmcgcGFkZHIsCiAJaW50IGdhYSwgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGFzaWQsIGludCBkaXJ0eSwgaW50IHBhZ2VzaXplKTsKIHZvaWQgdGZoX3Jlc3RhcnQoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a2R1bXAuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtkdW1wLmMKaW5kZXggNTVlYWJmYS4uOWIyMDYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a2R1bXAuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrZHVtcC5jCkBAIC00NCw3ICs0NCw4IEBACiAKIHN0YXRpYyBpbnQgZ3J1X2R1bXBfY29udGV4dF9kYXRhKHZvaWQgKmdydWJhc2UsCiAJCQlzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCwKLQkJCXZvaWQgX191c2VyICp1YnVmLCBpbnQgY3R4bnVtLCBpbnQgZHNyY250KQorCQkJdm9pZCBfX3VzZXIgKnVidWYsIGludCBjdHhudW0sIGludCBkc3JjbnQsCisJCQlpbnQgZmx1c2hfY2JycykKIHsKIAl2b2lkICpjYiwgKmNiZSwgKnRmaCwgKmdzZWc7CiAJaW50IGksIHNjcjsKQEAgLTU1LDYgKzU2LDggQEAKIAl0ZmggPSBncnViYXNlICsgR1JVX1RGSF9CQVNFOwogCiAJZm9yX2VhY2hfY2JyX2luX2FsbG9jYXRpb25fbWFwKGksICZjY2gtPmNicl9hbGxvY2F0aW9uX21hcCwgc2NyKSB7CisJCWlmIChmbHVzaF9jYnJzKQorCQkJZ3J1X2ZsdXNoX2NhY2hlKGNiKTsKIAkJaWYgKGdydV91c2VyX2NvcHlfaGFuZGxlKCZ1YnVmLCBjYikpCiAJCQlnb3RvIGZhaWw7CiAJCWlmIChncnVfdXNlcl9jb3B5X2hhbmRsZSgmdWJ1ZiwgdGZoICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFKSkKQEAgLTExNSw3ICsxMTgsNyBAQAogCiBzdGF0aWMgaW50IGdydV9kdW1wX2NvbnRleHQoc3RydWN0IGdydV9zdGF0ZSAqZ3J1LCBpbnQgY3R4bnVtLAogCQl2b2lkIF9fdXNlciAqdWJ1Ziwgdm9pZCBfX3VzZXIgKnVidWZlbmQsIGNoYXIgZGF0YV9vcHQsCi0JCWNoYXIgbG9ja19jY2gpCisJCWNoYXIgbG9ja19jY2gsIGNoYXIgZmx1c2hfY2JycykKIHsKIAlzdHJ1Y3QgZ3J1X2R1bXBfY29udGV4dF9oZWFkZXIgaGRyOwogCXN0cnVjdCBncnVfZHVtcF9jb250ZXh0X2hlYWRlciBfX3VzZXIgKnVoZHIgPSB1YnVmOwpAQCAtMTU5LDggKzE2Miw3IEBACiAJCQlyZXQgPSAtRUZCSUc7CiAJCWVsc2UKIAkJCXJldCA9IGdydV9kdW1wX2NvbnRleHRfZGF0YShncnViYXNlLCBjY2gsIHVidWYsIGN0eG51bSwKLQkJCQkJCQlkc3JjbnQpOwotCisJCQkJCQkJZHNyY250LCBmbHVzaF9jYnJzKTsKIAl9CiAJaWYgKGNjaF9sb2NrZWQpCiAJCXVubG9ja19jY2hfaGFuZGxlKGNjaCk7CkBAIC0yMTUsNyArMjE3LDggQEAKIAlmb3IgKGN0eG51bSA9IDA7IGN0eG51bSA8IEdSVV9OVU1fQ0NIOyBjdHhudW0rKykgewogCQlpZiAocmVxLmN0eG51bSA9PSBjdHhudW0gfHwgcmVxLmN0eG51bSA8IDApIHsKIAkJCXJldCA9IGdydV9kdW1wX2NvbnRleHQoZ3J1LCBjdHhudW0sIHVidWYsIHVidWZlbmQsCi0JCQkJCQlyZXEuZGF0YV9vcHQsIHJlcS5sb2NrX2NjaCk7CisJCQkJCQlyZXEuZGF0YV9vcHQsIHJlcS5sb2NrX2NjaCwKKwkJCQkJCXJlcS5mbHVzaF9jYnJzKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZmFpbDsKIAkJCXVidWYgKz0gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYwppbmRleCA3NjZlMjFlLi4zNDc0OWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSAiZ3J1LmgiCiAjaW5jbHVkZSAiZ3J1bGliLmgiCiAjaW5jbHVkZSAiZ3J1dGFibGVzLmgiCkBAIC05Nyw5ICs5OCw2IEBACiAjZGVmaW5lIEFTWU5DX0hBTl9UT19CSUQoaCkJKChoKSAtIDEpCiAjZGVmaW5lIEFTWU5DX0JJRF9UT19IQU4oYikJKChiKSArIDEpCiAjZGVmaW5lIEFTWU5DX0hBTl9UT19CUyhoKQlncnVfYmFzZVtBU1lOQ19IQU5fVE9fQklEKGgpXQotI2RlZmluZSBLQ0JfVE9fR0lEKGNiKQkJKChjYiAtIGdydV9zdGFydF92YWRkcikgLwkJXAotCQkJCQkoR1JVX1NJWkUgKiBHUlVfQ0hJUExFVFNfUEVSX0JMQURFKSkKLSNkZWZpbmUgS0NCX1RPX0JTKGNiKQkJZ3J1X2Jhc2VbS0NCX1RPX0dJRChjYildCiAKICNkZWZpbmUgR1JVX05VTV9LRVJORUxfQ0JSCTEKICNkZWZpbmUgR1JVX05VTV9LRVJORUxfRFNSX0JZVEVTIDI1NgpAQCAtMTYwLDggKzE1OCwxMCBAQAogCXVwX3JlYWQoJmJzLT5ic19rZ3RzX3NlbWEpOwogCWRvd25fd3JpdGUoJmJzLT5ic19rZ3RzX3NlbWEpOwogCi0JaWYgKCFicy0+YnNfa2d0cykKLQkJYnMtPmJzX2tndHMgPSBncnVfYWxsb2NfZ3RzKE5VTEwsIDAsIDAsIDAsIDApOworCWlmICghYnMtPmJzX2tndHMpIHsKKwkJYnMtPmJzX2tndHMgPSBncnVfYWxsb2NfZ3RzKE5VTEwsIDAsIDAsIDAsIDAsIDApOworCQlicy0+YnNfa2d0cy0+dHNfdXNlcl9ibGFkZV9pZCA9IGJsYWRlX2lkOworCX0KIAlrZ3RzID0gYnMtPmJzX2tndHM7CiAKIAlpZiAoIWtndHMtPnRzX2dydSkgewpAQCAtMTcyLDkgKzE3Miw5IEBACiAJCWtndHMtPnRzX2Rzcl9hdV9jb3VudCA9IEdSVV9EU19CWVRFU19UT19BVSgKIAkJCUdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUyAqIG5jcHVzICsKIAkJCQlicy0+YnNfYXN5bmNfZHNyX2J5dGVzKTsKLQkJd2hpbGUgKCFncnVfYXNzaWduX2dydV9jb250ZXh0KGtndHMsIGJsYWRlX2lkKSkgeworCQl3aGlsZSAoIWdydV9hc3NpZ25fZ3J1X2NvbnRleHQoa2d0cykpIHsKIAkJCW1zbGVlcCgxKTsKLQkJCWdydV9zdGVhbF9jb250ZXh0KGtndHMsIGJsYWRlX2lkKTsKKwkJCWdydV9zdGVhbF9jb250ZXh0KGtndHMpOwogCQl9CiAJCWdydV9sb2FkX2NvbnRleHQoa2d0cyk7CiAJCWdydSA9IGJzLT5ic19rZ3RzLT50c19ncnU7CkBAIC0yMDAsMTMgKzIwMCwxNSBAQAogCQlicyA9IGdydV9iYXNlW2JpZF07CiAJCWlmICghYnMpCiAJCQljb250aW51ZTsKKworCQkvKiBJZ25vcmUgYnVzeSBjb250ZXh0cy4gRG9uJ3Qgd2FudCB0byBibG9jayBoZXJlLiAgKi8KIAkJaWYgKGRvd25fd3JpdGVfdHJ5bG9jaygmYnMtPmJzX2tndHNfc2VtYSkpIHsKIAkJCWtndHMgPSBicy0+YnNfa2d0czsKIAkJCWlmIChrZ3RzICYmIGtndHMtPnRzX2dydSkKIAkJCQlncnVfdW5sb2FkX2NvbnRleHQoa2d0cywgMCk7Ci0JCQlrZnJlZShrZ3RzKTsKIAkJCWJzLT5ic19rZ3RzID0gTlVMTDsKIAkJCXVwX3dyaXRlKCZicy0+YnNfa2d0c19zZW1hKTsKKwkJCWtmcmVlKGtndHMpOwogCQl9IGVsc2UgewogCQkJcmV0Kys7CiAJCX0KQEAgLTIyMCwxMyArMjIyLDIxIEBACiBzdGF0aWMgc3RydWN0IGdydV9ibGFkZV9zdGF0ZSAqZ3J1X2xvY2tfa2VybmVsX2NvbnRleHQoaW50IGJsYWRlX2lkKQogewogCXN0cnVjdCBncnVfYmxhZGVfc3RhdGUgKmJzOworCWludCBiaWQ7CiAKIAlTVEFUKGxvY2tfa2VybmVsX2NvbnRleHQpOwotCWJzID0gZ3J1X2Jhc2VbYmxhZGVfaWRdOworYWdhaW46CisJYmlkID0gYmxhZGVfaWQgPCAwID8gdXZfbnVtYV9ibGFkZV9pZCgpIDogYmxhZGVfaWQ7CisJYnMgPSBncnVfYmFzZVtiaWRdOwogCisJLyogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1pZ3JhdGlvbiBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBzZW1hICovCiAJZG93bl9yZWFkKCZicy0+YnNfa2d0c19zZW1hKTsKKwlpZiAoYmxhZGVfaWQgPCAwICYmIGJpZCAhPSB1dl9udW1hX2JsYWRlX2lkKCkpIHsKKwkJdXBfcmVhZCgmYnMtPmJzX2tndHNfc2VtYSk7CisJCWdvdG8gYWdhaW47CisJfQogCWlmICghYnMtPmJzX2tndHMgfHwgIWJzLT5ic19rZ3RzLT50c19ncnUpCi0JCWdydV9sb2FkX2tlcm5lbF9jb250ZXh0KGJzLCBibGFkZV9pZCk7CisJCWdydV9sb2FkX2tlcm5lbF9jb250ZXh0KGJzLCBiaWQpOwogCXJldHVybiBiczsKIAogfQpAQCAtMjU1LDcgKzI2NSw3IEBACiAKIAlCVUdfT04oZHNyX2J5dGVzID4gR1JVX05VTV9LRVJORUxfRFNSX0JZVEVTKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlicyA9IGdydV9sb2NrX2tlcm5lbF9jb250ZXh0KHV2X251bWFfYmxhZGVfaWQoKSk7CisJYnMgPSBncnVfbG9ja19rZXJuZWxfY29udGV4dCgtMSk7CiAJbGNwdSA9IHV2X2JsYWRlX3Byb2Nlc3Nvcl9pZCgpOwogCSpjYiA9IGJzLT5rZXJuZWxfY2IgKyBsY3B1ICogR1JVX0hBTkRMRV9TVFJJREU7CiAJKmRzciA9IGJzLT5rZXJuZWxfZHNyICsgbGNwdSAqIEdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUzsKQEAgLTM4NCwxMyArMzk0LDMxIEBACiAJCXN0cnVjdCBjb250cm9sX2Jsb2NrX2V4dGVuZGVkX2V4Y19kZXRhaWwgKmV4Y2RldCkKIHsKIAlzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfZXh0ZW5kZWQgKmNiZTsKLQlzdHJ1Y3QgZ3J1X2JsYWRlX3N0YXRlICpiczsKLQlpbnQgY2JybnVtOworCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICprZ3RzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG9mZjsKKwlpbnQgY2JybnVtLCBiaWQ7CiAKLQlicyA9IEtDQl9UT19CUyhjYik7Ci0JY2JybnVtID0gdGhyZWFkX2Nicl9udW1iZXIoYnMtPmJzX2tndHMsIGdldF9jYl9udW1iZXIoY2IpKTsKKwkvKgorCSAqIExvY2F0ZSBrZ3RzIGZvciBjYi4gVGhpcyBhbGdvcml0aG0gaXMgU0xPVyBidXQKKwkgKiB0aGlzIGZ1bmN0aW9uIGlzIHJhcmVseSBjYWxsZWQgKGllLiwgYWxtb3N0IG5ldmVyKS4KKwkgKiBQZXJmb3JtYW5jZSBkb2VzIG5vdCBtYXR0ZXIuCisJICovCisJZm9yX2VhY2hfcG9zc2libGVfYmxhZGUoYmlkKSB7CisJCWlmICghZ3J1X2Jhc2VbYmlkXSkKKwkJCWJyZWFrOworCQlrZ3RzID0gZ3J1X2Jhc2VbYmlkXS0+YnNfa2d0czsKKwkJaWYgKCFrZ3RzIHx8ICFrZ3RzLT50c19ncnUpCisJCQljb250aW51ZTsKKwkJb2ZmID0gY2IgLSBrZ3RzLT50c19ncnUtPmdzX2dydV9iYXNlX3ZhZGRyOworCQlpZiAob2ZmIDwgR1JVX1NJWkUpCisJCQlicmVhazsKKwkJa2d0cyA9IE5VTEw7CisJfQorCUJVR19PTigha2d0cyk7CisJY2JybnVtID0gdGhyZWFkX2Nicl9udW1iZXIoa2d0cywgZ2V0X2NiX251bWJlcihjYikpOwogCWNiZSA9IGdldF9jYmUoR1JVQkFTRShjYiksIGNicm51bSk7CiAJZ3J1X2ZsdXNoX2NhY2hlKGNiZSk7CS8qIENCRSBub3QgY29oZXJlbnQgKi8KKwlzeW5jX2NvcmUoKTsKIAlleGNkZXQtPm9wYyA9IGNiZS0+b3BjY3B5OwogCWV4Y2RldC0+ZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCWV4Y2RldC0+ZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC00MDksOCArNDM3LDggQEAKIAlpZiAocmV0ID4gMCAmJiBnZW4tPmlzdGF0dXMgPT0gQ0JTX0VYQ0VQVElPTikgewogCQlncnVfZ2V0X2NiX2V4Y2VwdGlvbl9kZXRhaWwoY2IsICZleGNkZXQpOwogCQlzbnByaW50ZihidWYsIHNpemUsCi0JCQkiR1JVIGV4Y2VwdGlvbjogY2IgJXAsIG9wYyAlZCwgZXhvcGMgJWQsIGVjYXVzZSAweCV4LCIKLQkJCSJleGNkZXQwIDB4JWx4LCBleGNkZXQxIDB4JXgiLAorCQkJIkdSVTolZCBleGNlcHRpb246IGNiICVwLCBvcGMgJWQsIGV4b3BjICVkLCBlY2F1c2UgMHgleCwiCisJCQkiZXhjZGV0MCAweCVseCwgZXhjZGV0MSAweCV4Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkJZ2VuLCBleGNkZXQub3BjLCBleGNkZXQuZXhvcGMsIGV4Y2RldC5lY2F1c2UsCiAJCQlleGNkZXQuZXhjZXB0ZGV0MCwgZXhjZGV0LmV4Y2VwdGRldDEpOwogCX0gZWxzZSB7CkBAIC00NTcsOSArNDg1LDEwIEBACiAJaW50IHJldDsKIAogCXJldCA9IGdlbi0+aXN0YXR1czsKLQlpZiAocmV0ICE9IENCU19FWENFUFRJT04pCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIGdydV9yZXRyeV9leGNlcHRpb24oY2IpOworCWlmIChyZXQgPT0gQ0JTX0VYQ0VQVElPTikKKwkJcmV0ID0gZ3J1X3JldHJ5X2V4Y2VwdGlvbihjYik7CisJcm1iKCk7CisJcmV0dXJuIHJldDsKIAogfQogCkBAIC00NzEsNyArNTAwLDcgQEAKIAlyZXQgPSBncnVfd2FpdF9pZGxlX29yX2V4Y2VwdGlvbihnZW4pOwogCWlmIChyZXQgPT0gQ0JTX0VYQ0VQVElPTikKIAkJcmV0ID0gZ3J1X3JldHJ5X2V4Y2VwdGlvbihjYik7Ci0KKwlybWIoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MzgsNyArNTY3LDcgQEAKIAltcWQtPm1xID0gbXE7CiAJbXFkLT5tcV9ncGEgPSB1dl9ncGEobXEpOwogCW1xZC0+cWxpbmVzID0gcWxpbmVzOwotCW1xZC0+aW50ZXJydXB0X3Bub2RlID0gVVZfTkFTSURfVE9fUE5PREUobmFzaWQpOworCW1xZC0+aW50ZXJydXB0X3Bub2RlID0gbmFzaWQgPj4gMTsKIAltcWQtPmludGVycnVwdF92ZWN0b3IgPSB2ZWN0b3I7CiAJbXFkLT5pbnRlcnJ1cHRfYXBpY2lkID0gYXBpY2lkOwogCXJldHVybiAwOwpAQCAtNTk4LDYgKzYyNyw4IEBACiAJCQkJcmV0ID0gTVFFX1VORVhQRUNURURfQ0JfRVJSOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0JTU19QQUdFX09WRVJGTE9XOgorCQkJU1RBVChtZXNxX25vb3BfcGFnZV9vdmVyZmxvdyk7CisJCQkvKiBmYWxsdGhydSAqLwogCQlkZWZhdWx0OgogCQkJQlVHKCk7CiAJCX0KQEAgLTY3MywxOCArNzA0LDYgQEAKIH0KIAogLyoKLSAqIFNlbmQgYSBjcm9zcy1wYXJ0aXRpb24gaW50ZXJydXB0IHRvIHRoZSBTU0kgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0Ci0gKiBtZXNzYWdlIHF1ZXVlLiBOb3JtYWxseSwgdGhlIGludGVycnVwdCBpcyBhdXRvbWF0aWNhbGx5IGRlbGl2ZXJlZCBieSBoYXJkd2FyZQotICogYnV0IHNvbWUgZXJyb3IgY29uZGl0aW9ucyByZXF1aXJlIGV4cGxpY2l0IGRlbGl2ZXJ5LgotICovCi1zdGF0aWMgdm9pZCBzZW5kX21lc3NhZ2VfcXVldWVfaW50ZXJydXB0KHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQpCi17Ci0JaWYgKG1xZC0+aW50ZXJydXB0X3ZlY3RvcikKLQkJdXZfaHViX3NlbmRfaXBpKG1xZC0+aW50ZXJydXB0X3Bub2RlLCBtcWQtPmludGVycnVwdF9hcGljaWQsCi0JCQkJbXFkLT5pbnRlcnJ1cHRfdmVjdG9yKTsKLX0KLQotLyoKICAqIEhhbmRsZSBhIFBVVCBmYWlsdXJlLiBOb3RlOiBpZiBtZXNzYWdlIHdhcyBhIDItbGluZSBtZXNzYWdlLCBvbmUgb2YgdGhlCiAgKiBsaW5lcyBtaWdodCBoYXZlIHN1Y2Nlc3NmdWxseSBoYXZlIGJlZW4gd3JpdHRlbi4gQmVmb3JlIHNlbmRpbmcgdGhlCiAgKiBtZXNzYWdlLCAicHJlc2VudCIgbXVzdCBiZSBjbGVhcmVkIGluIEJPVEggbGluZXMgdG8gcHJldmVudCB0aGUgcmVjZWl2ZXIKQEAgLTY5Myw3ICs3MTIsOCBAQAogc3RhdGljIGludCBzZW5kX21lc3NhZ2VfcHV0X25hY2tlZCh2b2lkICpjYiwgc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKIAkJCXZvaWQgKm1lc2csIGludCBsaW5lcykKIHsKLQl1bnNpZ25lZCBsb25nIG07CisJdW5zaWduZWQgbG9uZyBtLCAqdmFsID0gbWVzZywgZ3BhLCBzYXZlOworCWludCByZXQ7CiAKIAltID0gbXFkLT5tcV9ncGEgKyAoZ3J1X2dldF9hbW9fdmFsdWVfaGVhZChjYikgPDwgNik7CiAJaWYgKGxpbmVzID09IDIpIHsKQEAgLTcwNCw3ICs3MjQsMjYgQEAKIAlncnVfdnN0b3JlKGNiLCBtLCBncnVfZ2V0X3RyaShtZXNnKSwgWFRZUEVfQ0wsIGxpbmVzLCAxLCBJTUEpOwogCWlmIChncnVfd2FpdChjYikgIT0gQ0JTX0lETEUpCiAJCXJldHVybiBNUUVfVU5FWFBFQ1RFRF9DQl9FUlI7Ci0Jc2VuZF9tZXNzYWdlX3F1ZXVlX2ludGVycnVwdChtcWQpOworCisJaWYgKCFtcWQtPmludGVycnVwdF92ZWN0b3IpCisJCXJldHVybiBNUUVfT0s7CisKKwkvKgorCSAqIFNlbmQgYSBjcm9zcy1wYXJ0aXRpb24gaW50ZXJydXB0IHRvIHRoZSBTU0kgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0CisJICogbWVzc2FnZSBxdWV1ZS4gTm9ybWFsbHksIHRoZSBpbnRlcnJ1cHQgaXMgYXV0b21hdGljYWxseSBkZWxpdmVyZWQgYnkKKwkgKiBoYXJkd2FyZSBidXQgc29tZSBlcnJvciBjb25kaXRpb25zIHJlcXVpcmUgZXhwbGljaXQgZGVsaXZlcnkuCisJICogVXNlIHRoZSBHUlUgdG8gZGVsaXZlciB0aGUgaW50ZXJydXB0LiBPdGhlcndpc2UgcGFydGl0aW9uIGZhaWx1cmVzCisJICogY291bGQgY2F1c2UgdW5yZWNvdmVyZWQgZXJyb3JzLgorCSAqLworCWdwYSA9IHV2X2dsb2JhbF9ncnVfbW1yX2FkZHJlc3MobXFkLT5pbnRlcnJ1cHRfcG5vZGUsIFVWSF9JUElfSU5UKTsKKwlzYXZlID0gKnZhbDsKKwkqdmFsID0gdXZfaHViX2lwaV92YWx1ZShtcWQtPmludGVycnVwdF9hcGljaWQsIG1xZC0+aW50ZXJydXB0X3ZlY3RvciwKKwkJCQlkZXN0X0ZpeGVkKTsKKwlncnVfdnN0b3JlX3BoeXMoY2IsIGdwYSwgZ3J1X2dldF90cmkobWVzZyksIElBQV9SRUdJU1RFUiwgSU1BKTsKKwlyZXQgPSBncnVfd2FpdChjYik7CisJKnZhbCA9IHNhdmU7CisJaWYgKHJldCAhPSBDQlNfSURMRSkKKwkJcmV0dXJuIE1RRV9VTkVYUEVDVEVEX0NCX0VSUjsKIAlyZXR1cm4gTVFFX09LOwogfQogCkBAIC03MzksNiArNzc4LDkgQEAKIAkJU1RBVChtZXNxX3NlbmRfcHV0X25hY2tlZCk7CiAJCXJldCA9IHNlbmRfbWVzc2FnZV9wdXRfbmFja2VkKGNiLCBtcWQsIG1lc2csIGxpbmVzKTsKIAkJYnJlYWs7CisJY2FzZSBDQlNTX1BBR0VfT1ZFUkZMT1c6CisJCVNUQVQobWVzcV9wYWdlX292ZXJmbG93KTsKKwkJLyogZmFsbHRocnUgKi8KIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CkBAIC04MzEsNyArODczLDYgQEAKIAlpbnQgcHJlc2VudCA9IG1oZHItPnByZXNlbnQ7CiAKIAkvKiBza2lwIE5PT1AgbWVzc2FnZXMgKi8KLQlTVEFUKG1lc3FfcmVjZWl2ZSk7CiAJd2hpbGUgKHByZXNlbnQgPT0gTVFTX05PT1ApIHsKIAkJZ3J1X2ZyZWVfbWVzc2FnZShtcWQsIG1oZHIpOwogCQltaGRyID0gbXEtPm5leHQ7CkBAIC04NTEsNiArODkyLDcgQEAKIAlpZiAobWhkci0+bGluZXMgPT0gMikKIAkJcmVzdG9yZV9wcmVzZW50MihtaGRyLCBtaGRyLT5wcmVzZW50Mik7CiAKKwlTVEFUKG1lc3FfcmVjZWl2ZSk7CiAJcmV0dXJuIG1oZHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncnVfZ2V0X25leHRfbWVzc2FnZSk7CkBAIC04NTgsNiArOTAwLDI5IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdSVSBEQVRBIENPUFkgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCisgKiBMb2FkIGEgRFcgZnJvbSBhIGdsb2JhbCBHUEEuIFRoZSBHUEEgY2FuIGJlIGEgbWVtb3J5IG9yIE1NUiBhZGRyZXNzLgorICovCitpbnQgZ3J1X3JlYWRfZ3BhKHVuc2lnbmVkIGxvbmcgKnZhbHVlLCB1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwl2b2lkICpjYjsKKwl2b2lkICpkc3I7CisJaW50IHJldCwgaWFhOworCisJU1RBVChyZWFkX2dwYSk7CisJaWYgKGdydV9nZXRfY3B1X3Jlc291cmNlcyhHUlVfTlVNX0tFUk5FTF9EU1JfQllURVMsICZjYiwgJmRzcikpCisJCXJldHVybiBNUUVfQlVHX05PX1JFU09VUkNFUzsKKwlpYWEgPSBncGEgPj4gNjI7CisJZ3J1X3Zsb2FkX3BoeXMoY2IsIGdwYSwgZ3J1X2dldF90cmkoZHNyKSwgaWFhLCBJTUEpOworCXJldCA9IGdydV93YWl0KGNiKTsKKwlpZiAocmV0ID09IENCU19JRExFKQorCQkqdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKilkc3I7CisJZ3J1X2ZyZWVfY3B1X3Jlc291cmNlcyhjYiwgZHNyKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ3J1X3JlYWRfZ3BhKTsKKworCisvKgogICogQ29weSBhIGJsb2NrIG9mIGRhdGEgdXNpbmcgdGhlIEdSVSByZXNvdXJjZXMKICAqLwogaW50IGdydV9jb3B5X2dwYSh1bnNpZ25lZCBsb25nIGRlc3RfZ3BhLCB1bnNpZ25lZCBsb25nIHNyY19ncGEsCkBAIC04OTgsMjQgKzk2MywyNCBAQAogCiAJZ3J1X3Zsb2FkKGNiLCB1dl9ncGEoJndvcmQwKSwgZ3J1X2dldF90cmkoZHNyKSwgWFRZUEVfRFcsIDEsIDEsIElNQSk7CiAJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiR1JVIHF1aWNrdGVzdDA6IENCUiBmYWlsdXJlIDFcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiR1JVOiVkIHF1aWNrdGVzdDA6IENCUiBmYWlsdXJlIDFcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoKnAgIT0gTUFHSUMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdSVTogcXVpY2t0ZXN0MCBiYWQgbWFnaWMgMHglbHhcbiIsICpwKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkdSVTolZCBxdWlja3Rlc3QwIGJhZCBtYWdpYyAweCVseFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCAqcCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAJZ3J1X3ZzdG9yZShjYiwgdXZfZ3BhKCZ3b3JkMSksIGdydV9nZXRfdHJpKGRzciksIFhUWVBFX0RXLCAxLCAxLCBJTUEpOwogCWlmIChncnVfd2FpdChjYikgIT0gQ0JTX0lETEUpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdSVSBxdWlja3Rlc3QwOiBDQlIgZmFpbHVyZSAyXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkdSVTolZCBxdWlja3Rlc3QwOiBDQlIgZmFpbHVyZSAyXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHdvcmQwICE9IHdvcmQxIHx8IHdvcmQxICE9IE1BR0lDKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAgICAiR1JVIHF1aWNrdGVzdDAgZXJyOiBmb3VuZCAweCVseCwgZXhwZWN0ZWQgMHglbHhcbiIsCi0JCSAgICAgd29yZDEsIE1BR0lDKTsKKwkJICAgICAgICJHUlU6JWQgcXVpY2t0ZXN0MCBlcnI6IGZvdW5kIDB4JWx4LCBleHBlY3RlZCAweCVseFxuIiwKKwkJICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHdvcmQxLCBNQUdJQyk7CiAJCWdvdG8gZG9uZTsKIAl9CiAJcmV0ID0gMDsKQEAgLTk1Miw4ICsxMDE3LDExIEBACiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAl9Ci0JaWYgKHJldCAhPSBNUUVfUVVFVUVfRlVMTCB8fCBpICE9IDQpCisJaWYgKHJldCAhPSBNUUVfUVVFVUVfRlVMTCB8fCBpICE9IDQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkdSVTolZCBxdWlja3Rlc3QxOiB1bmV4cGVjdCBzdGF0dXMgJWQsIGkgJWRcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJldCwgaSk7CiAJCWdvdG8gZG9uZTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCW0gPSBncnVfZ2V0X25leHRfbWVzc2FnZSgmbXFkKTsKQEAgLTk2MSw3ICsxMDI5LDEyIEBACiAJCQlicmVhazsKIAkJZ3J1X2ZyZWVfbWVzc2FnZSgmbXFkLCBtKTsKIAl9Ci0JcmV0ID0gKGkgPT0gNCkgPyAwIDogLUVJTzsKKwlpZiAoaSAhPSA0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJHUlU6JWQgcXVpY2t0ZXN0MjogYmFkIG1lc3NhZ2UsIGkgJWQsIG0gJXAsIG04ICVkXG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpLCBtLCBtID8gbVs4XSA6IC0xKTsKKwkJZ290byBkb25lOworCX0KKwlyZXQgPSAwOwogCiBkb25lOgogCWtmcmVlKHApOwpAQCAtOTc3LDYgKzEwNTAsNyBAQAogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgKmJ1ZjsKIAl2b2lkICpjYjAsICpjYjsKKwlzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfc3RhdHVzICpnZW47CiAJaW50IGksIGssIGlzdGF0dXMsIGJ5dGVzOwogCiAJYnl0ZXMgPSBudW1jYiAqIDQgKiA4OwpAQCAtOTk2LDIwICsxMDcwLDMwIEBACiAJCQkJWFRZUEVfRFcsIDQsIDEsIElNQV9JTlRFUlJVUFQpOwogCiAJcmV0ID0gMDsKLQlmb3IgKGsgPSAwOyBrIDwgbnVtY2I7IGsrKykgeworCWsgPSBudW1jYjsKKwlkbyB7CiAJCWdydV93YWl0X2FzeW5jX2NicihoYW4pOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtY2I7IGkrKykgewogCQkJY2IgPSBjYjAgKyBpICogR1JVX0hBTkRMRV9TVFJJREU7CiAJCQlpc3RhdHVzID0gZ3J1X2NoZWNrX3N0YXR1cyhjYik7Ci0JCQlpZiAoaXN0YXR1cyA9PSBDQlNfQUNUSVZFKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGlzdGF0dXMgPT0gQ0JTX0VYQ0VQVElPTikKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJZWxzZSBpZiAoYnVmW2ldIHx8IGJ1ZltpICsgMV0gfHwgYnVmW2kgKyAyXSB8fAotCQkJCQlidWZbaSArIDNdKQotCQkJCXJldCA9IC1FSU87CisJCQlpZiAoaXN0YXR1cyAhPSBDQlNfQUNUSVZFICYmIGlzdGF0dXMgIT0gQ0JTX0NBTExfT1MpCisJCQkJYnJlYWs7CiAJCX0KLQl9CisJCWlmIChpID09IG51bWNiKQorCQkJY29udGludWU7CisJCWlmIChpc3RhdHVzICE9IENCU19JRExFKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiR1JVOiVkIHF1aWNrdGVzdDI6IGNiICVkLCBleGNlcHRpb25cbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaSk7CisJCQlyZXQgPSAtRUZBVUxUOworCQl9IGVsc2UgaWYgKGJ1Zls0ICogaV0gfHwgYnVmWzQgKiBpICsgMV0gfHwgYnVmWzQgKiBpICsgMl0gfHwKKwkJCQlidWZbNCAqIGkgKyAzXSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdSVTolZCBxdWlja3Rlc3QyOmNiICVkLCAgYnVmIDB4JWx4LCAweCVseCwgMHglbHgsIDB4JWx4XG4iLAorCQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgaSwgYnVmWzQgKiBpXSwgYnVmWzQgKiBpICsgMV0sIGJ1Zls0ICogaSArIDJdLCBidWZbNCAqIGkgKyAzXSk7CisJCQlyZXQgPSAtRUlPOworCQl9CisJCWstLTsKKwkJZ2VuID0gY2I7CisJCWdlbi0+aXN0YXR1cyA9IENCU19DQUxMX09TOyAvKiBkb24ndCBoYW5kbGUgdGhpcyBDQlIgYWdhaW4gKi8KKwl9IHdoaWxlIChrKTsKIAlCVUdfT04oY21wLmRvbmUpOwogCiAJZ3J1X3VubG9ja19hc3luY19yZXNvdXJjZShoYW4pOwpAQCAtMTAxOSw2ICsxMTAzLDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2RlZmluZSBCVUZTSVpFIDIwMAorc3RhdGljIGludCBxdWlja3Rlc3QzKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWNoYXIgYnVmMVtCVUZTSVpFXSwgYnVmMltCVUZTSVpFXTsKKwlpbnQgcmV0ID0gMDsKKworCW1lbXNldChidWYyLCAwLCBzaXplb2YoYnVmMikpOworCW1lbXNldChidWYxLCBnZXRfY3ljbGVzKCkgJiAyNTUsIHNpemVvZihidWYxKSk7CisJZ3J1X2NvcHlfZ3BhKHV2X2dwYShidWYyKSwgdXZfZ3BhKGJ1ZjEpLCBCVUZTSVpFKTsKKwlpZiAobWVtY21wKGJ1ZjEsIGJ1ZjIsIEJVRlNJWkUpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJHUlU6JWQgcXVpY2t0ZXN0MyBlcnJvclxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJcmV0ID0gLUVJTzsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIERlYnVnZ2luZyBvbmx5LiBVc2VyIGhvb2sgZm9yIHZhcmlvdXMga2VybmVsIHRlc3RzCiAgKiBvZiBkcml2ZXIgJiBncnUuCkBAIC0xMDM3LDYgKzExMzcsOSBAQAogCWNhc2UgMjoKIAkJcmV0ID0gcXVpY2t0ZXN0MihhcmcpOwogCQlicmVhazsKKwljYXNlIDM6CisJCXJldCA9IHF1aWNrdGVzdDMoYXJnKTsKKwkJYnJlYWs7CiAJY2FzZSA5OToKIAkJcmV0ID0gZ3J1X2ZyZWVfa2VybmVsX2NvbnRleHRzKCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaAppbmRleCBkNjBkMzRiLi4wMmFhOTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaApAQCAtMTMxLDYgKzEzMSwyMCBAQAogCiAKIC8qCisgKiBSZWFkIGEgR1JVIGdsb2JhbCBHUEEuIFNvdXJjZSBjYW4gYmUgbG9jYXRlZCBpbiBhIHJlbW90ZSBwYXJ0aXRpb24uCisgKgorICogICAgSW5wdXQ6CisgKiAgICAJdmFsdWUJCW1lbW9yeSBhZGRyZXNzIHdoZXJlIE1NUiB2YWx1ZSBpcyByZXR1cm5lZAorICogICAgCWdwYQkJc291cmNlIG51bWFsaW5rIHBoeXNpY2FsIGFkZHJlc3Mgb2YgR1BBCisgKgorICogICAgT3V0cHV0OgorICoJMAkJT0sKKyAqCT4wCQllcnJvcgorICovCitpbnQgZ3J1X3JlYWRfZ3BhKHVuc2lnbmVkIGxvbmcgKnZhbHVlLCB1bnNpZ25lZCBsb25nIGdwYSk7CisKKworLyoKICAqIENvcHkgZGF0YSB1c2luZyB0aGUgR1JVLiBTb3VyY2Ugb3IgZGVzdGluYXRpb24gY2FuIGJlIGxvY2F0ZWQgaW4gYSByZW1vdGUKICAqIHBhcnRpdGlvbi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVsaWIuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWxpYi5oCmluZGV4IDg4OWJjNDQuLmU3N2QxYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWxpYi5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWxpYi5oCkBAIC02MywxOCArNjMsOSBAQAogI2RlZmluZSBUSFJFQURfUE9JTlRFUihwLCB0aCkJCShwICsgR1JVX0dTRUdfUEFHRVNJWkUgKiAodGgpKQogI2RlZmluZSBHU0VHX1NUQVJUKGNiKQkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoY2IpICYgfihHUlVfR1NFR19QQUdFU0laRSAtIDEpKSkKIAotLyoKLSAqIFN0YXRpY3RpY3Mga2VwdCBvbiBhIHBlci1HVFMgYmFzaXMuCi0gKi8KLXN0cnVjdCBndHNfc3RhdGlzdGljcyB7Ci0JdW5zaWduZWQgbG9uZwlmbW1fdGxiZHJvcGluOwotCXVuc2lnbmVkIGxvbmcJdXBtX3RsYmRyb3BpbjsKLQl1bnNpZ25lZCBsb25nCWNvbnRleHRfc3RvbGVuOwotfTsKLQogc3RydWN0IGdydV9nZXRfZ3NlZ19zdGF0aXN0aWNzX3JlcSB7Ci0JdW5zaWduZWQgbG9uZwkJZ3NlZzsKLQlzdHJ1Y3QgZ3RzX3N0YXRpc3RpY3MJc3RhdHM7CisJdW5zaWduZWQgbG9uZwkJCWdzZWc7CisJc3RydWN0IGdydV9nc2VnX3N0YXRpc3RpY3MJc3RhdHM7CiB9OwogCiAvKgpAQCAtODYsNiArNzcsNyBAQAogCXVuc2lnbmVkIGludAkJY29udHJvbF9ibG9ja3M7CiAJdW5zaWduZWQgaW50CQltYXhpbXVtX3RocmVhZF9jb3VudDsKIAl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7CisJdW5zaWduZWQgY2hhcgkJdGxiX3ByZWxvYWRfY291bnQ7CiB9OwogCiAvKgpAQCAtOTgsMTEgKzkwLDEyIEBACiAvKgogICogU3RydWN0dXJlIHVzZWQgdG8gc2V0IGNvbnRleHQgb3B0aW9ucwogICovCi1lbnVtIHtzY29fZ3NlZ19vd25lciwgc2NvX2NjaF9yZXFfc2xpY2V9OworZW51bSB7c2NvX2dzZWdfb3duZXIsIHNjb19jY2hfcmVxX3NsaWNlLCBzY29fYmxhZGVfY2hpcGxldH07CiBzdHJ1Y3QgZ3J1X3NldF9jb250ZXh0X29wdGlvbl9yZXEgewogCXVuc2lnbmVkIGxvbmcJZ3NlZzsKIAlpbnQJCW9wOwotCXVuc2lnbmVkIGxvbmcJdmFsMTsKKwlpbnQJCXZhbDA7CisJbG9uZwkJdmFsMTsKIH07CiAKIC8qCkBAIC0xMjQsNiArMTE3LDggQEAKIAlpbnQJCWN0eG51bTsKIAljaGFyCQlkYXRhX29wdDsKIAljaGFyCQlsb2NrX2NjaDsKKwljaGFyCQlmbHVzaF9jYnJzOworCWNoYXIJCWZpbGxbMTBdOwogCXBpZF90CQlwaWQ7CiAJdm9pZAkJKmJ1ZjsKIAlzaXplX3QJCWJ1ZmxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYwppbmRleCAzYmM2NDNkLi5mODUzOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgogI2luY2x1ZGUgImdydS5oIgogI2luY2x1ZGUgImdydXRhYmxlcy5oIgpAQCAtNDgsMTIgKzQ5LDIwIEBACiAvKgogICogU2VsZWN0IGEgZ3J1IGZhdWx0IG1hcCB0byBiZSB1c2VkIGJ5IHRoZSBjdXJyZW50IGNwdS4gTm90ZSB0aGF0CiAgKiBtdWx0aXBsZSBjcHVzIG1heSBiZSB1c2luZyB0aGUgc2FtZSBtYXAuCi0gKglaWlogc2hvdWxkICJzaGlmdCIgYmUgdXNlZD8/IERlcGVuZHMgb24gSFQgY3B1IG51bWJlcmluZwogICoJWlpaIHNob3VsZCBiZSBpbmxpbmUgYnV0IGRpZCBub3Qgd29yayBvbiBlbXVsYXRvcgogICovCiBpbnQgZ3J1X2NwdV9mYXVsdF9tYXBfaWQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfSUE2NAogCXJldHVybiB1dl9ibGFkZV9wcm9jZXNzb3JfaWQoKSAlIEdSVV9OVU1fVEZNOworI2Vsc2UKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpZCwgY29yZTsKKworCWNvcmUgPSB1dl9jcHVfY29yZV9udW1iZXIoY3B1KTsKKwlpZCA9IGNvcmUgKyBVVl9NQVhfSU5UX0NPUkVTICogdXZfY3B1X3NvY2tldF9udW1iZXIoY3B1KTsKKwlyZXR1cm4gaWQ7CisjZW5kaWYKIH0KIAogLyotLS0tLS0tLS0gQVNJRCBNYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4Niw3ICsyOTUsOCBAQAogdm9pZCBndHNfZHJvcChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzKQogewogCWlmIChndHMgJiYgYXRvbWljX2RlY19yZXR1cm4oJmd0cy0+dHNfcmVmY250KSA9PSAwKSB7Ci0JCWdydV9kcm9wX21tdV9ub3RpZmllcihndHMtPnRzX2dtcyk7CisJCWlmIChndHMtPnRzX2dtcykKKwkJCWdydV9kcm9wX21tdV9ub3RpZmllcihndHMtPnRzX2dtcyk7CiAJCWtmcmVlKGd0cyk7CiAJCVNUQVQoZ3RzX2ZyZWUpOwogCX0KQEAgLTMxMCwxNiArMzIwLDE4IEBACiAgKiBBbGxvY2F0ZSBhIHRocmVhZCBzdGF0ZSBzdHJ1Y3R1cmUuCiAgKi8KIHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpncnVfYWxsb2NfZ3RzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlpbnQgY2JyX2F1X2NvdW50LCBpbnQgZHNyX2F1X2NvdW50LCBpbnQgb3B0aW9ucywgaW50IHRzaWQpCisJCWludCBjYnJfYXVfY291bnQsIGludCBkc3JfYXVfY291bnQsCisJCXVuc2lnbmVkIGNoYXIgdGxiX3ByZWxvYWRfY291bnQsIGludCBvcHRpb25zLCBpbnQgdHNpZCkKIHsKIAlzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzOworCXN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXM7CiAJaW50IGJ5dGVzOwogCiAJYnl0ZXMgPSBEU1JfQllURVMoZHNyX2F1X2NvdW50KSArIENCUl9CWVRFUyhjYnJfYXVfY291bnQpOwogCWJ5dGVzICs9IHNpemVvZihzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSk7CiAJZ3RzID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFndHMpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCVNUQVQoZ3RzX2FsbG9jKTsKIAltZW1zZXQoZ3RzLCAwLCBzaXplb2Yoc3RydWN0IGdydV90aHJlYWRfc3RhdGUpKTsgLyogemVybyBvdXQgaGVhZGVyICovCkBAIC0zMjcsNyArMzM5LDEwIEBACiAJbXV0ZXhfaW5pdCgmZ3RzLT50c19jdHhsb2NrKTsKIAlndHMtPnRzX2Nicl9hdV9jb3VudCA9IGNicl9hdV9jb3VudDsKIAlndHMtPnRzX2Rzcl9hdV9jb3VudCA9IGRzcl9hdV9jb3VudDsKKwlndHMtPnRzX3RsYl9wcmVsb2FkX2NvdW50ID0gdGxiX3ByZWxvYWRfY291bnQ7CiAJZ3RzLT50c191c2VyX29wdGlvbnMgPSBvcHRpb25zOworCWd0cy0+dHNfdXNlcl9ibGFkZV9pZCA9IC0xOworCWd0cy0+dHNfdXNlcl9jaGlwbGV0X2lkID0gLTE7CiAJZ3RzLT50c190c2lkID0gdHNpZDsKIAlndHMtPnRzX2N0eG51bSA9IE5VTExDVFg7CiAJZ3RzLT50c190bGJfaW50X3NlbGVjdCA9IC0xOwpAQCAtMzM2LDkgKzM1MSwxMCBAQAogCWlmICh2bWEpIHsKIAkJZ3RzLT50c19tbSA9IGN1cnJlbnQtPm1tOwogCQlndHMtPnRzX3ZtYSA9IHZtYTsKLQkJZ3RzLT50c19nbXMgPSBncnVfcmVnaXN0ZXJfbW11X25vdGlmaWVyKCk7Ci0JCWlmICghZ3RzLT50c19nbXMpCisJCWdtcyA9IGdydV9yZWdpc3Rlcl9tbXVfbm90aWZpZXIoKTsKKwkJaWYgKElTX0VSUihnbXMpKQogCQkJZ290byBlcnI7CisJCWd0cy0+dHNfZ21zID0gZ21zOwogCX0KIAogCWdydV9kYmcoZ3J1ZGV2LCAiYWxsb2MgZ3RzICVwXG4iLCBndHMpOwpAQCAtMzQ2LDcgKzM2Miw3IEBACiAKIGVycjoKIAlndHNfZHJvcChndHMpOwotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfQ0FTVChnbXMpOwogfQogCiAvKgpAQCAtMzYwLDYgKzM3Niw3IEBACiAJaWYgKCF2ZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKKwlTVEFUKHZkYXRhX2FsbG9jKTsKIAlJTklUX0xJU1RfSEVBRCgmdmRhdGEtPnZkX2hlYWQpOwogCXNwaW5fbG9ja19pbml0KCZ2ZGF0YS0+dmRfbG9jayk7CiAJZ3J1X2RiZyhncnVkZXYsICJhbGxvYyB2ZGF0YSAlcFxuIiwgdmRhdGEpOwpAQCAtMzkyLDEwICs0MDksMTIgQEAKIAlzdHJ1Y3QgZ3J1X3ZtYV9kYXRhICp2ZGF0YSA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsICpuZ3RzOwogCi0JZ3RzID0gZ3J1X2FsbG9jX2d0cyh2bWEsIHZkYXRhLT52ZF9jYnJfYXVfY291bnQsIHZkYXRhLT52ZF9kc3JfYXVfY291bnQsCisJZ3RzID0gZ3J1X2FsbG9jX2d0cyh2bWEsIHZkYXRhLT52ZF9jYnJfYXVfY291bnQsCisJCQkgICAgdmRhdGEtPnZkX2Rzcl9hdV9jb3VudCwKKwkJCSAgICB2ZGF0YS0+dmRfdGxiX3ByZWxvYWRfY291bnQsCiAJCQkgICAgdmRhdGEtPnZkX3VzZXJfb3B0aW9ucywgdHNpZCk7Ci0JaWYgKCFndHMpCi0JCXJldHVybiBOVUxMOworCWlmIChJU19FUlIoZ3RzKSkKKwkJcmV0dXJuIGd0czsKIAogCXNwaW5fbG9jaygmdmRhdGEtPnZkX2xvY2spOwogCW5ndHMgPSBncnVfZmluZF9jdXJyZW50X2d0c19ub2xvY2sodmRhdGEsIHRzaWQpOwpAQCAtNDkzLDYgKzUxMiw5IEBACiAJCQltZW1zZXQoY2JlICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFLCAwLAogCQkJCQkJR1JVX0NBQ0hFX0xJTkVfQllURVMpOwogCQl9CisJCS8qIEZsdXNoIENCRSB0byBoaWRlIHJhY2UgaW4gY29udGV4dCByZXN0YXJ0ICovCisJCW1iKCk7CisJCWdydV9mbHVzaF9jYWNoZShjYmUgKyBpICogR1JVX0hBTkRMRV9TVFJJREUpOwogCQljYiArPSBHUlVfSEFORExFX1NUUklERTsKIAl9CiAKQEAgLTUxMyw2ICs1MzUsMTIgQEAKIAljYiA9IGdzZWcgKyBHUlVfQ0JfQkFTRTsKIAljYmUgPSBncnViYXNlICsgR1JVX0NCRV9CQVNFOwogCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKKworCS8qIENCRXMgbWF5IG5vdCBiZSBjb2hlcmVudC4gRmx1c2ggdGhlbSBmcm9tIGNhY2hlICovCisJZm9yX2VhY2hfY2JyX2luX2FsbG9jYXRpb25fbWFwKGksICZjYnJtYXAsIHNjcikKKwkJZ3J1X2ZsdXNoX2NhY2hlKGNiZSArIGkgKiBHUlVfSEFORExFX1NUUklERSk7CisJbWIoKTsJCS8qIExldCB0aGUgQ0wgZmx1c2ggY29tcGxldGUgKi8KKwogCWdydV9wcmVmZXRjaF9jb250ZXh0KGdzZWcsIGNiLCBjYmUsIGNicm1hcCwgbGVuZ3RoKTsKIAogCWZvcl9lYWNoX2Nicl9pbl9hbGxvY2F0aW9uX21hcChpLCAmY2JybWFwLCBzY3IpIHsKQEAgLTUzMyw3ICs1NjEsOCBAQAogCQl6YXBfdm1hX3B0ZXMoZ3RzLT50c192bWEsIFVHUlVBRERSKGd0cyksIEdSVV9HU0VHX1BBR0VTSVpFKTsKIAljY2ggPSBnZXRfY2NoKGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsIGN0eG51bSk7CiAKLQlncnVfZGJnKGdydWRldiwgImd0cyAlcFxuIiwgZ3RzKTsKKwlncnVfZGJnKGdydWRldiwgImd0cyAlcCwgY2JybWFwIDB4JWx4LCBkc3JtYXAgMHglbHhcbiIsCisJCWd0cywgZ3RzLT50c19jYnJfbWFwLCBndHMtPnRzX2Rzcl9tYXApOwogCWxvY2tfY2NoX2hhbmRsZShjY2gpOwogCWlmIChjY2hfaW50ZXJydXB0X3N5bmMoY2NoKSkKIAkJQlVHKCk7CkBAIC01NDksNyArNTc4LDYgQEAKIAogCWlmIChjY2hfZGVhbGxvY2F0ZShjY2gpKQogCQlCVUcoKTsKLQlndHMtPnRzX2ZvcmNlX3VubG9hZCA9IDA7CS8qIHRzX2ZvcmNlX3VubG9hZCBsb2NrZWQgYnkgQ0NIIGxvY2sgKi8KIAl1bmxvY2tfY2NoX2hhbmRsZShjY2gpOwogCiAJZ3J1X2ZyZWVfZ3J1X2NvbnRleHQoZ3RzKTsKQEAgLTU2NSw5ICs1OTMsNyBAQAogCXN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoOwogCWludCBpLCBlcnIsIGFzaWQsIGN0eG51bSA9IGd0cy0+dHNfY3R4bnVtOwogCi0JZ3J1X2RiZyhncnVkZXYsICJndHMgJXBcbiIsIGd0cyk7CiAJY2NoID0gZ2V0X2NjaChncnUtPmdzX2dydV9iYXNlX3ZhZGRyLCBjdHhudW0pOwotCiAJbG9ja19jY2hfaGFuZGxlKGNjaCk7CiAJY2NoLT50Zm1fZmF1bHRfYml0X2VuYWJsZSA9CiAJICAgIChndHMtPnRzX3VzZXJfb3B0aW9ucyA9PSBHUlVfT1BUX01JU1NfRk1NX1BPTEwKQEAgLTU5MSw2ICs2MTcsNyBAQAogCQljY2gtPnVubWFwX2VuYWJsZSA9IDE7CiAJCWNjaC0+dGZtX2RvbmVfYml0X2VuYWJsZSA9IDE7CiAJCWNjaC0+Y2JfaW50X2VuYWJsZSA9IDE7CisJCWNjaC0+dGxiX2ludF9zZWxlY3QgPSAwOwkvKiBGb3Igbm93LCBpbnRzIGdvIHRvIGNwdSAwICovCiAJfSBlbHNlIHsKIAkJY2NoLT51bm1hcF9lbmFibGUgPSAwOwogCQljY2gtPnRmbV9kb25lX2JpdF9lbmFibGUgPSAwOwpAQCAtNjE2LDE3ICs2NDMsMTggQEAKIAlpZiAoY2NoX3N0YXJ0KGNjaCkpCiAJCUJVRygpOwogCXVubG9ja19jY2hfaGFuZGxlKGNjaCk7CisKKwlncnVfZGJnKGdydWRldiwgImdpZCAlZCwgZ3RzICVwLCBjYnJtYXAgMHglbHgsIGRzcm1hcCAweCVseCwgdGllICVkLCB0aXMgJWRcbiIsCisJCWd0cy0+dHNfZ3J1LT5nc19naWQsIGd0cywgZ3RzLT50c19jYnJfbWFwLCBndHMtPnRzX2Rzcl9tYXAsCisJCShndHMtPnRzX3VzZXJfb3B0aW9ucyA9PSBHUlVfT1BUX01JU1NfRk1NX0lOVFIpLCBndHMtPnRzX3RsYl9pbnRfc2VsZWN0KTsKIH0KIAogLyoKICAqIFVwZGF0ZSBmaWVsZHMgaW4gYW4gYWN0aXZlIENDSDoKICAqIAktIHJldGFyZ2V0IGludGVycnVwdHMgb24gbG9jYWwgYmxhZGUKICAqIAktIHVwZGF0ZSBzaXplYXZhaWwgbWFzawotICogCS0gZm9yY2UgYSBkZWxheWVkIGNvbnRleHQgdW5sb2FkIGJ5IGNsZWFyaW5nIHRoZSBDQ0ggYXNpZHMuIFRoaXMKLSAqIAkgIGZvcmNlcyBUTEIgbWlzc2VzIGZvciBuZXcgR1JVIGluc3RydWN0aW9ucy4gVGhlIGNvbnRleHQgaXMgdW5sb2FkZWQKLSAqIAkgIHdoZW4gdGhlIG5leHQgVExCIG1pc3Mgb2NjdXJzLgogICovCi1pbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGZvcmNlX3VubG9hZCkKK2ludCBncnVfdXBkYXRlX2NjaChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzKQogewogCXN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoOwogCXN0cnVjdCBncnVfc3RhdGUgKmdydSA9IGd0cy0+dHNfZ3J1OwpAQCAtNjQwLDIxICs2NjgsMTMgQEAKIAkJCWdvdG8gZXhpdDsKIAkJaWYgKGNjaF9pbnRlcnJ1cHQoY2NoKSkKIAkJCUJVRygpOwotCQlpZiAoIWZvcmNlX3VubG9hZCkgewotCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCQljY2gtPnNpemVhdmFpbFtpXSA9IGd0cy0+dHNfc2l6ZWF2YWlsOwotCQkJZ3RzLT50c190bGJfaW50X3NlbGVjdCA9IGdydV9jcHVfZmF1bHRfbWFwX2lkKCk7Ci0JCQljY2gtPnRsYl9pbnRfc2VsZWN0ID0gZ3J1X2NwdV9mYXVsdF9tYXBfaWQoKTsKLQkJCWNjaC0+dGZtX2ZhdWx0X2JpdF9lbmFibGUgPQotCQkJICAoZ3RzLT50c191c2VyX29wdGlvbnMgPT0gR1JVX09QVF9NSVNTX0ZNTV9QT0xMCi0JCQkgICAgfHwgZ3RzLT50c191c2VyX29wdGlvbnMgPT0gR1JVX09QVF9NSVNTX0ZNTV9JTlRSKTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCQkJY2NoLT5hc2lkW2ldID0gMDsKLQkJCWNjaC0+dGZtX2ZhdWx0X2JpdF9lbmFibGUgPSAwOwotCQkJY2NoLT50bGJfaW50X2VuYWJsZSA9IDA7Ci0JCQlndHMtPnRzX2ZvcmNlX3VubG9hZCA9IDE7Ci0JCX0KKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWNjaC0+c2l6ZWF2YWlsW2ldID0gZ3RzLT50c19zaXplYXZhaWw7CisJCWd0cy0+dHNfdGxiX2ludF9zZWxlY3QgPSBncnVfY3B1X2ZhdWx0X21hcF9pZCgpOworCQljY2gtPnRsYl9pbnRfc2VsZWN0ID0gZ3J1X2NwdV9mYXVsdF9tYXBfaWQoKTsKKwkJY2NoLT50Zm1fZmF1bHRfYml0X2VuYWJsZSA9CisJCSAgKGd0cy0+dHNfdXNlcl9vcHRpb25zID09IEdSVV9PUFRfTUlTU19GTU1fUE9MTAorCQkgICAgfHwgZ3RzLT50c191c2VyX29wdGlvbnMgPT0gR1JVX09QVF9NSVNTX0ZNTV9JTlRSKTsKIAkJaWYgKGNjaF9zdGFydChjY2gpKQogCQkJQlVHKCk7CiAJCXJldCA9IDE7CkBAIC02NzksNyArNjk5LDU0IEBACiAKIAlncnVfZGJnKGdydWRldiwgInJldGFyZ2V0IGZyb20gJWQgdG8gJWRcbiIsIGd0cy0+dHNfdGxiX2ludF9zZWxlY3QsCiAJCWdydV9jcHVfZmF1bHRfbWFwX2lkKCkpOwotCXJldHVybiBncnVfdXBkYXRlX2NjaChndHMsIDApOworCXJldHVybiBncnVfdXBkYXRlX2NjaChndHMpOworfQorCisvKgorICogQ2hlY2sgaWYgYSBHUlUgY29udGV4dCBpcyBhbGxvd2VkIHRvIHVzZSBhIHNwZWNpZmljIGNoaXBsZXQuIEJ5IGRlZmF1bHQKKyAqIGEgY29udGV4dCBpcyBhc3NpZ25lZCB0byBhbnkgYmxhZGUtbG9jYWwgY2hpcGxldC4gSG93ZXZlciwgdXNlcnMgY2FuCisgKiBvdmVycmlkZSB0aGlzLgorICogCVJldHVybnMgMSBpZiBhc3NpZ25tZW50IGFsbG93ZWQsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZ3J1X2NoZWNrX2NoaXBsZXRfYXNzaWdubWVudChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsCisJCQkJCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpCit7CisJaW50IGJsYWRlX2lkOworCWludCBjaGlwbGV0X2lkOworCisJYmxhZGVfaWQgPSBndHMtPnRzX3VzZXJfYmxhZGVfaWQ7CisJaWYgKGJsYWRlX2lkIDwgMCkKKwkJYmxhZGVfaWQgPSB1dl9udW1hX2JsYWRlX2lkKCk7CisKKwljaGlwbGV0X2lkID0gZ3RzLT50c191c2VyX2NoaXBsZXRfaWQ7CisJcmV0dXJuIGdydS0+Z3NfYmxhZGVfaWQgPT0gYmxhZGVfaWQgJiYKKwkJKGNoaXBsZXRfaWQgPCAwIHx8IGNoaXBsZXRfaWQgPT0gZ3J1LT5nc19jaGlwbGV0X2lkKTsKK30KKworLyoKKyAqIFVubG9hZCB0aGUgZ3J1IGNvbnRleHQgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIHRoZSBjb3JyZWN0IGJsYWRlIG9yCisgKiBjaGlwbGV0LiBNaXNhc3NpZ25tZW50IGNhbiBvY2N1ciBpZiB0aGUgcHJvY2VzcyBtaWdyYXRlcyB0byBhIGRpZmZlcmVudAorICogYmxhZGUgb3IgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgc2VsZWN0ZWQgYmxhZGUvY2hpcGxldC4KKyAqLwordm9pZCBncnVfY2hlY2tfY29udGV4dF9wbGFjZW1lbnQoc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cykKK3sKKwlzdHJ1Y3QgZ3J1X3N0YXRlICpncnU7CisKKwkvKgorCSAqIElmIHRoZSBjdXJyZW50IHRhc2sgaXMgdGhlIGNvbnRleHQgb3duZXIsIHZlcmlmeSB0aGF0IHRoZQorCSAqIGNvbnRleHQgaXMgY29ycmVjdGx5IHBsYWNlZC4gVGhpcyB0ZXN0IGlzIHNraXBwZWQgZm9yIG5vbi1vd25lcgorCSAqIHJlZmVyZW5jZXMuIFB0aHJlYWQgYXBwcyB1c2Ugbm9uLW93bmVyIHJlZmVyZW5jZXMgdG8gdGhlIENCUnMuCisJICovCisJZ3J1ID0gZ3RzLT50c19ncnU7CisJaWYgKCFncnUgfHwgZ3RzLT50c190Z2lkX293bmVyICE9IGN1cnJlbnQtPnRnaWQpCisJCXJldHVybjsKKworCWlmICghZ3J1X2NoZWNrX2NoaXBsZXRfYXNzaWdubWVudChncnUsIGd0cykpIHsKKwkJU1RBVChjaGVja19jb250ZXh0X3VubG9hZCk7CisJCWdydV91bmxvYWRfY29udGV4dChndHMsIDEpOworCX0gZWxzZSBpZiAoZ3J1X3JldGFyZ2V0X2ludHIoZ3RzKSkgeworCQlTVEFUKGNoZWNrX2NvbnRleHRfcmV0YXJnZXRfaW50cik7CisJfQogfQogCiAKQEAgLTcxMiwxMyArNzc5LDE3IEBACiAJfQogfQogCi12b2lkIGdydV9zdGVhbF9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBibGFkZV9pZCkKK3ZvaWQgZ3J1X3N0ZWFsX2NvbnRleHQoc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cykKIHsKIAlzdHJ1Y3QgZ3J1X2JsYWRlX3N0YXRlICpibGFkZTsKIAlzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsICpncnUwOwogCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpuZ3RzID0gTlVMTDsKIAlpbnQgY3R4bnVtLCBjdHhudW0wLCBmbGFnID0gMCwgY2JyLCBkc3I7CisJaW50IGJsYWRlX2lkOwogCisJYmxhZGVfaWQgPSBndHMtPnRzX3VzZXJfYmxhZGVfaWQ7CisJaWYgKGJsYWRlX2lkIDwgMCkKKwkJYmxhZGVfaWQgPSB1dl9udW1hX2JsYWRlX2lkKCk7CiAJY2JyID0gZ3RzLT50c19jYnJfYXVfY291bnQ7CiAJZHNyID0gZ3RzLT50c19kc3JfYXVfY291bnQ7CiAKQEAgLTcyOSwzNSArODAwLDM5IEBACiAJZ3J1ID0gYmxhZGUtPmJzX2xydV9ncnU7CiAJaWYgKGN0eG51bSA9PSAwKQogCQlncnUgPSBuZXh0X2dydShibGFkZSwgZ3J1KTsKKwlibGFkZS0+YnNfbHJ1X2dydSA9IGdydTsKKwlibGFkZS0+YnNfbHJ1X2N0eG51bSA9IGN0eG51bTsKIAljdHhudW0wID0gY3R4bnVtOwogCWdydTAgPSBncnU7CiAJd2hpbGUgKDEpIHsKLQkJaWYgKGNoZWNrX2dydV9yZXNvdXJjZXMoZ3J1LCBjYnIsIGRzciwgR1JVX05VTV9DQ0gpKQotCQkJYnJlYWs7Ci0JCXNwaW5fbG9jaygmZ3J1LT5nc19sb2NrKTsKLQkJZm9yICg7IGN0eG51bSA8IEdSVV9OVU1fQ0NIOyBjdHhudW0rKykgewotCQkJaWYgKGZsYWcgJiYgZ3J1ID09IGdydTAgJiYgY3R4bnVtID09IGN0eG51bTApCisJCWlmIChncnVfY2hlY2tfY2hpcGxldF9hc3NpZ25tZW50KGdydSwgZ3RzKSkgeworCQkJaWYgKGNoZWNrX2dydV9yZXNvdXJjZXMoZ3J1LCBjYnIsIGRzciwgR1JVX05VTV9DQ0gpKQogCQkJCWJyZWFrOwotCQkJbmd0cyA9IGdydS0+Z3NfZ3RzW2N0eG51bV07Ci0JCQkvKgotCQkJICogV2UgYXJlIGdyYWJiaW5nIGxvY2tzIG91dCBvZiBvcmRlciwgc28gdHJ5bG9jayBpcwotCQkJICogbmVlZGVkLiBHVFNzIGFyZSB1c3VhbGx5IG5vdCBsb2NrZWQsIHNvIHRoZSBvZGRzIG9mCi0JCQkgKiBzdWNjZXNzIGFyZSBoaWdoLiBJZiB0cnlsb2NrIGZhaWxzLCB0cnkgdG8gc3RlYWwgYQotCQkJICogZGlmZmVyZW50IEdTRUcuCi0JCQkgKi8KLQkJCWlmIChuZ3RzICYmIGlzX2d0c19zdGVhbGFibGUobmd0cywgYmxhZGUpKQorCQkJc3Bpbl9sb2NrKCZncnUtPmdzX2xvY2spOworCQkJZm9yICg7IGN0eG51bSA8IEdSVV9OVU1fQ0NIOyBjdHhudW0rKykgeworCQkJCWlmIChmbGFnICYmIGdydSA9PSBncnUwICYmIGN0eG51bSA9PSBjdHhudW0wKQorCQkJCQlicmVhazsKKwkJCQluZ3RzID0gZ3J1LT5nc19ndHNbY3R4bnVtXTsKKwkJCQkvKgorCQkJIAkqIFdlIGFyZSBncmFiYmluZyBsb2NrcyBvdXQgb2Ygb3JkZXIsIHNvIHRyeWxvY2sgaXMKKwkJCSAJKiBuZWVkZWQuIEdUU3MgYXJlIHVzdWFsbHkgbm90IGxvY2tlZCwgc28gdGhlIG9kZHMgb2YKKwkJCSAJKiBzdWNjZXNzIGFyZSBoaWdoLiBJZiB0cnlsb2NrIGZhaWxzLCB0cnkgdG8gc3RlYWwgYQorCQkJIAkqIGRpZmZlcmVudCBHU0VHLgorCQkJIAkqLworCQkJCWlmIChuZ3RzICYmIGlzX2d0c19zdGVhbGFibGUobmd0cywgYmxhZGUpKQorCQkJCQlicmVhazsKKwkJCQluZ3RzID0gTlVMTDsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZncnUtPmdzX2xvY2spOworCQkJaWYgKG5ndHMgfHwgKGZsYWcgJiYgZ3J1ID09IGdydTAgJiYgY3R4bnVtID09IGN0eG51bTApKQogCQkJCWJyZWFrOwotCQkJbmd0cyA9IE5VTEw7Ci0JCQlmbGFnID0gMTsKIAkJfQotCQlzcGluX3VubG9jaygmZ3J1LT5nc19sb2NrKTsKLQkJaWYgKG5ndHMgfHwgKGZsYWcgJiYgZ3J1ID09IGdydTAgJiYgY3R4bnVtID09IGN0eG51bTApKQorCQlpZiAoZmxhZyAmJiBncnUgPT0gZ3J1MCkKIAkJCWJyZWFrOworCQlmbGFnID0gMTsKIAkJY3R4bnVtID0gMDsKIAkJZ3J1ID0gbmV4dF9ncnUoYmxhZGUsIGdydSk7CiAJfQotCWJsYWRlLT5ic19scnVfZ3J1ID0gZ3J1OwotCWJsYWRlLT5ic19scnVfY3R4bnVtID0gY3R4bnVtOwogCXNwaW5fdW5sb2NrKCZibGFkZS0+YnNfbG9jayk7CiAKIAlpZiAobmd0cykgewpAQCAtNzc2LDE5ICs4NTEsMzQgQEAKIH0KIAogLyoKKyAqIEFzc2lnbiBhIGdydSBjb250ZXh0LgorICovCitzdGF0aWMgaW50IGdydV9hc3NpZ25fY29udGV4dF9udW1iZXIoc3RydWN0IGdydV9zdGF0ZSAqZ3J1KQoreworCWludCBjdHhudW07CisKKwljdHhudW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZncnUtPmdzX2NvbnRleHRfbWFwLCBHUlVfTlVNX0NDSCk7CisJX19zZXRfYml0KGN0eG51bSwgJmdydS0+Z3NfY29udGV4dF9tYXApOworCXJldHVybiBjdHhudW07Cit9CisKKy8qCiAgKiBTY2FuIHRoZSBHUlVzIG9uIHRoZSBsb2NhbCBibGFkZSAmIGFzc2lnbiBhIEdSVSBjb250ZXh0LgogICovCi1zdHJ1Y3QgZ3J1X3N0YXRlICpncnVfYXNzaWduX2dydV9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsCi0JCQkJCQlpbnQgYmxhZGUpCitzdHJ1Y3QgZ3J1X3N0YXRlICpncnVfYXNzaWduX2dydV9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpCiB7CiAJc3RydWN0IGdydV9zdGF0ZSAqZ3J1LCAqZ3J1eDsKIAlpbnQgaSwgbWF4X2FjdGl2ZV9jb250ZXh0czsKKwlpbnQgYmxhZGVfaWQgPSBndHMtPnRzX3VzZXJfYmxhZGVfaWQ7CiAKLQorCWlmIChibGFkZV9pZCA8IDApCisJCWJsYWRlX2lkID0gdXZfbnVtYV9ibGFkZV9pZCgpOwogYWdhaW46CiAJZ3J1ID0gTlVMTDsKIAltYXhfYWN0aXZlX2NvbnRleHRzID0gR1JVX05VTV9DQ0g7Ci0JZm9yX2VhY2hfZ3J1X29uX2JsYWRlKGdydXgsIGJsYWRlLCBpKSB7CisJZm9yX2VhY2hfZ3J1X29uX2JsYWRlKGdydXgsIGJsYWRlX2lkLCBpKSB7CisJCWlmICghZ3J1X2NoZWNrX2NoaXBsZXRfYXNzaWdubWVudChncnV4LCBndHMpKQorCQkJY29udGludWU7CiAJCWlmIChjaGVja19ncnVfcmVzb3VyY2VzKGdydXgsIGd0cy0+dHNfY2JyX2F1X2NvdW50LAogCQkJCQlndHMtPnRzX2Rzcl9hdV9jb3VudCwKIAkJCQkJbWF4X2FjdGl2ZV9jb250ZXh0cykpIHsKQEAgLTgwOSwxMiArODk5LDkgQEAKIAkJcmVzZXJ2ZV9ncnVfcmVzb3VyY2VzKGdydSwgZ3RzKTsKIAkJZ3RzLT50c19ncnUgPSBncnU7CiAJCWd0cy0+dHNfYmxhZGUgPSBncnUtPmdzX2JsYWRlX2lkOwotCQlndHMtPnRzX2N0eG51bSA9Ci0JCSAgICBmaW5kX2ZpcnN0X3plcm9fYml0KCZncnUtPmdzX2NvbnRleHRfbWFwLCBHUlVfTlVNX0NDSCk7Ci0JCUJVR19PTihndHMtPnRzX2N0eG51bSA9PSBHUlVfTlVNX0NDSCk7CisJCWd0cy0+dHNfY3R4bnVtID0gZ3J1X2Fzc2lnbl9jb250ZXh0X251bWJlcihncnUpOwogCQlhdG9taWNfaW5jKCZndHMtPnRzX3JlZmNudCk7CiAJCWdydS0+Z3NfZ3RzW2d0cy0+dHNfY3R4bnVtXSA9IGd0czsKLQkJX19zZXRfYml0KGd0cy0+dHNfY3R4bnVtLCAmZ3J1LT5nc19jb250ZXh0X21hcCk7CiAJCXNwaW5fdW5sb2NrKCZncnUtPmdzX2xvY2spOwogCiAJCVNUQVQoYXNzaWduX2NvbnRleHQpOwpAQCAtODQyLDcgKzkyOSw2IEBACiB7CiAJc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0czsKIAl1bnNpZ25lZCBsb25nIHBhZGRyLCB2YWRkcjsKLQlpbnQgYmxhZGVfaWQ7CiAKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzOwogCWdydV9kYmcoZ3J1ZGV2LCAidm1hICVwLCB2YWRkciAweCVseCAoMHglbHgpXG4iLApAQCAtODU3LDI4ICs5NDMsMTggQEAKIGFnYWluOgogCW11dGV4X2xvY2soJmd0cy0+dHNfY3R4bG9jayk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JYmxhZGVfaWQgPSB1dl9udW1hX2JsYWRlX2lkKCk7CiAKLQlpZiAoZ3RzLT50c19ncnUpIHsKLQkJaWYgKGd0cy0+dHNfZ3J1LT5nc19ibGFkZV9pZCAhPSBibGFkZV9pZCkgewotCQkJU1RBVChtaWdyYXRlZF9ub3Bmbl91bmxvYWQpOwotCQkJZ3J1X3VubG9hZF9jb250ZXh0KGd0cywgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZ3J1X3JldGFyZ2V0X2ludHIoZ3RzKSkKLQkJCQlTVEFUKG1pZ3JhdGVkX25vcGZuX3JldGFyZ2V0KTsKLQkJfQotCX0KKwlncnVfY2hlY2tfY29udGV4dF9wbGFjZW1lbnQoZ3RzKTsKIAogCWlmICghZ3RzLT50c19ncnUpIHsKIAkJU1RBVChsb2FkX3VzZXJfY29udGV4dCk7Ci0JCWlmICghZ3J1X2Fzc2lnbl9ncnVfY29udGV4dChndHMsIGJsYWRlX2lkKSkgeworCQlpZiAoIWdydV9hc3NpZ25fZ3J1X2NvbnRleHQoZ3RzKSkgewogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCW11dGV4X3VubG9jaygmZ3RzLT50c19jdHhsb2NrKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQlzY2hlZHVsZV90aW1lb3V0KEdSVV9BU1NJR05fREVMQVkpOyAgLyogdHJ1ZSBoYWNrIFpaWiAqLwotCQkJYmxhZGVfaWQgPSB1dl9udW1hX2JsYWRlX2lkKCk7CiAJCQlpZiAoZ3RzLT50c19zdGVhbF9qaWZmaWVzICsgR1JVX1NURUFMX0RFTEFZIDwgamlmZmllcykKLQkJCQlncnVfc3RlYWxfY29udGV4dChndHMsIGJsYWRlX2lkKTsKKwkJCQlncnVfc3RlYWxfY29udGV4dChndHMpOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCQlncnVfbG9hZF9jb250ZXh0KGd0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCmluZGV4IDNmMjM3NWMuLjc3NjhiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCkBAIC0zNiw4ICszNiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBhdG9taWNfbG9uZ19yZWFkKHYpOwogCi0JaWYgKHZhbCkKLQkJc2VxX3ByaW50ZihzLCAiJTE2bHUgJXNcbiIsIHZhbCwgaWQpOworCXNlcV9wcmludGYocywgIiUxNmx1ICVzXG4iLCB2YWwsIGlkKTsKIH0KIAogc3RhdGljIGludCBzdGF0aXN0aWNzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQpAQCAtNDYsNyArNDUsOCBAQAogCXByaW50c3RhdChzLCB2ZGF0YV9mcmVlKTsKIAlwcmludHN0YXQocywgZ3RzX2FsbG9jKTsKIAlwcmludHN0YXQocywgZ3RzX2ZyZWUpOwotCXByaW50c3RhdChzLCB2ZGF0YV9kb3VibGVfYWxsb2MpOworCXByaW50c3RhdChzLCBnbXNfYWxsb2MpOworCXByaW50c3RhdChzLCBnbXNfZnJlZSk7CiAJcHJpbnRzdGF0KHMsIGd0c19kb3VibGVfYWxsb2NhdGUpOwogCXByaW50c3RhdChzLCBhc3NpZ25fY29udGV4dCk7CiAJcHJpbnRzdGF0KHMsIGFzc2lnbl9jb250ZXh0X2ZhaWxlZCk7CkBAIC01OSwyOCArNTksMjUgQEAKIAlwcmludHN0YXQocywgc3RlYWxfa2VybmVsX2NvbnRleHQpOwogCXByaW50c3RhdChzLCBzdGVhbF9jb250ZXh0X2ZhaWxlZCk7CiAJcHJpbnRzdGF0KHMsIG5vcGZuKTsKLQlwcmludHN0YXQocywgYnJlYWtfY293KTsKIAlwcmludHN0YXQocywgYXNpZF9uZXcpOwogCXByaW50c3RhdChzLCBhc2lkX25leHQpOwogCXByaW50c3RhdChzLCBhc2lkX3dyYXApOwogCXByaW50c3RhdChzLCBhc2lkX3JldXNlKTsKIAlwcmludHN0YXQocywgaW50cik7CisJcHJpbnRzdGF0KHMsIGludHJfY2JyKTsKKwlwcmludHN0YXQocywgaW50cl90ZmgpOworCXByaW50c3RhdChzLCBpbnRyX3NwdXJpb3VzKTsKIAlwcmludHN0YXQocywgaW50cl9tbV9sb2NrX2ZhaWxlZCk7CiAJcHJpbnRzdGF0KHMsIGNhbGxfb3MpOwotCXByaW50c3RhdChzLCBjYWxsX29zX29mZm5vZGVfcmVmZXJlbmNlKTsKLQlwcmludHN0YXQocywgY2FsbF9vc19jaGVja19mb3JfYnVnKTsKIAlwcmludHN0YXQocywgY2FsbF9vc193YWl0X3F1ZXVlKTsKIAlwcmludHN0YXQocywgdXNlcl9mbHVzaF90bGIpOwogCXByaW50c3RhdChzLCB1c2VyX3VubG9hZF9jb250ZXh0KTsKIAlwcmludHN0YXQocywgdXNlcl9leGNlcHRpb24pOwogCXByaW50c3RhdChzLCBzZXRfY29udGV4dF9vcHRpb24pOwotCXByaW50c3RhdChzLCBtaWdyYXRlX2NoZWNrKTsKLQlwcmludHN0YXQocywgbWlncmF0ZWRfcmV0YXJnZXQpOwotCXByaW50c3RhdChzLCBtaWdyYXRlZF91bmxvYWQpOwotCXByaW50c3RhdChzLCBtaWdyYXRlZF91bmxvYWRfZGVsYXkpOwotCXByaW50c3RhdChzLCBtaWdyYXRlZF9ub3Bmbl9yZXRhcmdldCk7Ci0JcHJpbnRzdGF0KHMsIG1pZ3JhdGVkX25vcGZuX3VubG9hZCk7CisJcHJpbnRzdGF0KHMsIGNoZWNrX2NvbnRleHRfcmV0YXJnZXRfaW50cik7CisJcHJpbnRzdGF0KHMsIGNoZWNrX2NvbnRleHRfdW5sb2FkKTsKIAlwcmludHN0YXQocywgdGxiX2Ryb3Bpbik7CisJcHJpbnRzdGF0KHMsIHRsYl9wcmVsb2FkX3BhZ2UpOwogCXByaW50c3RhdChzLCB0bGJfZHJvcGluX2ZhaWxfbm9fYXNpZCk7CiAJcHJpbnRzdGF0KHMsIHRsYl9kcm9waW5fZmFpbF91cG0pOwogCXByaW50c3RhdChzLCB0bGJfZHJvcGluX2ZhaWxfaW52YWxpZCk7CkBAIC04OCwxNiArODUsMTUgQEAKIAlwcmludHN0YXQocywgdGxiX2Ryb3Bpbl9mYWlsX2lkbGUpOwogCXByaW50c3RhdChzLCB0bGJfZHJvcGluX2ZhaWxfZm1tKTsKIAlwcmludHN0YXQocywgdGxiX2Ryb3Bpbl9mYWlsX25vX2V4Y2VwdGlvbik7Ci0JcHJpbnRzdGF0KHMsIHRsYl9kcm9waW5fZmFpbF9ub19leGNlcHRpb25fd2FyKTsKIAlwcmludHN0YXQocywgdGZoX3N0YWxlX29uX2ZhdWx0KTsKIAlwcmludHN0YXQocywgbW11X2ludmFsaWRhdGVfcmFuZ2UpOwogCXByaW50c3RhdChzLCBtbXVfaW52YWxpZGF0ZV9wYWdlKTsKLQlwcmludHN0YXQocywgbW11X2NsZWFyX2ZsdXNoX3lvdW5nKTsKIAlwcmludHN0YXQocywgZmx1c2hfdGxiKTsKIAlwcmludHN0YXQocywgZmx1c2hfdGxiX2dydSk7CiAJcHJpbnRzdGF0KHMsIGZsdXNoX3RsYl9ncnVfdGdoKTsKIAlwcmludHN0YXQocywgZmx1c2hfdGxiX2dydV96ZXJvX2FzaWQpOwogCXByaW50c3RhdChzLCBjb3B5X2dwYSk7CisJcHJpbnRzdGF0KHMsIHJlYWRfZ3BhKTsKIAlwcmludHN0YXQocywgbWVzcV9yZWNlaXZlKTsKIAlwcmludHN0YXQocywgbWVzcV9yZWNlaXZlX25vbmUpOwogCXByaW50c3RhdChzLCBtZXNxX3NlbmQpOwpAQCAtMTA4LDcgKzEwNCw2IEBACiAJcHJpbnRzdGF0KHMsIG1lc3Ffc2VuZF9xbGltaXRfcmVhY2hlZCk7CiAJcHJpbnRzdGF0KHMsIG1lc3Ffc2VuZF9hbW9fbmFja2VkKTsKIAlwcmludHN0YXQocywgbWVzcV9zZW5kX3B1dF9uYWNrZWQpOwotCXByaW50c3RhdChzLCBtZXNxX3FmX25vdF9mdWxsKTsKIAlwcmludHN0YXQocywgbWVzcV9xZl9sb2NrZWQpOwogCXByaW50c3RhdChzLCBtZXNxX3FmX25vb3Bfbm90X2Z1bGwpOwogCXByaW50c3RhdChzLCBtZXNxX3FmX3N3aXRjaF9oZWFkX2ZhaWxlZCk7CkBAIC0xMTgsNiArMTEzLDcgQEAKIAlwcmludHN0YXQocywgbWVzcV9ub29wX3FsaW1pdF9yZWFjaGVkKTsKIAlwcmludHN0YXQocywgbWVzcV9ub29wX2Ftb19uYWNrZWQpOwogCXByaW50c3RhdChzLCBtZXNxX25vb3BfcHV0X25hY2tlZCk7CisJcHJpbnRzdGF0KHMsIG1lc3Ffbm9vcF9wYWdlX292ZXJmbG93KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzLDggKzEyOSwxMCBAQAogCWludCBvcDsKIAl1bnNpZ25lZCBsb25nIHRvdGFsLCBjb3VudCwgbWF4OwogCXN0YXRpYyBjaGFyICppZFtdID0geyJjY2hfYWxsb2NhdGUiLCAiY2NoX3N0YXJ0IiwgImNjaF9pbnRlcnJ1cHQiLAotCQkiY2NoX2ludGVycnVwdF9zeW5jIiwgImNjaF9kZWFsbG9jYXRlIiwgInRnaF9pbnZhbGlkYXRlIn07CisJCSJjY2hfaW50ZXJydXB0X3N5bmMiLCAiY2NoX2RlYWxsb2NhdGUiLCAidGZoX3dyaXRlX29ubHkiLAorCQkidGZoX3dyaXRlX3Jlc3RhcnQiLCAidGdoX2ludmFsaWRhdGUifTsKIAorCXNlcV9wcmludGYocywgIiUtMjBzJTEycyUxMnMlMTJzXG4iLCAiI2lkIiwgImNvdW50IiwgImF2ZXItY2xrcyIsICJtYXgtY2xrcyIpOwogCWZvciAob3AgPSAwOyBvcCA8IG1jc29wX2xhc3Q7IG9wKyspIHsKIAkJY291bnQgPSBhdG9taWNfbG9uZ19yZWFkKCZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0uY291bnQpOwogCQl0b3RhbCA9IGF0b21pY19sb25nX3JlYWQoJm1jc19vcF9zdGF0aXN0aWNzW29wXS50b3RhbCk7CkBAIC0xNTQsNiArMTUyLDcgQEAKIAogc3RhdGljIGludCBvcHRpb25zX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQogeworCXNlcV9wcmludGYocywgIiNiaXRtYXNrOiAxPXRyYWNlLCAyPXN0YXRpc3RpY3NcbiIpOwogCXNlcV9wcmludGYocywgIjB4JWx4XG4iLCBncnVfb3B0aW9ucyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODMsMTYgKzE4MiwxNyBAQAogCWNvbnN0IGNoYXIgKm1vZGVbXSA9IHsgIj8/IiwgIlVQTSIsICJJTlRSIiwgIk9TX1BPTEwiIH07CiAKIAlpZiAoZ2lkID09IDApCi0JCXNlcV9wcmludGYoZmlsZSwgIiMlNXMlNXMlNnMlOXMlNnMlOHMlOHNcbiIsICJnaWQiLCAiYmlkIiwKLQkJCSAgICJjdHgjIiwgInBpZCIsICJjYnJzIiwgImRzYnl0ZXMiLCAibW9kZSIpOworCQlzZXFfcHJpbnRmKGZpbGUsICIjJTVzJTVzJTZzJTdzJTlzJTZzJThzJThzXG4iLCAiZ2lkIiwgImJpZCIsCisJCQkgICAiY3R4IyIsICJhc2lkIiwgInBpZCIsICJjYnJzIiwgImRzYnl0ZXMiLCAibW9kZSIpOwogCWlmIChncnUpCiAJCWZvciAoaSA9IDA7IGkgPCBHUlVfTlVNX0NDSDsgaSsrKSB7CiAJCQl0cyA9IGdydS0+Z3NfZ3RzW2ldOwogCQkJaWYgKCF0cykKIAkJCQljb250aW51ZTsKLQkJCXNlcV9wcmludGYoZmlsZSwgIiAlNWQlNWQlNmQlOWQlNmQlOGQlOHNcbiIsCisJCQlzZXFfcHJpbnRmKGZpbGUsICIgJTVkJTVkJTZkJTdkJTlkJTZkJThkJThzXG4iLAogCQkJCSAgIGdydS0+Z3NfZ2lkLCBncnUtPmdzX2JsYWRlX2lkLCBpLAotCQkJCSAgIHRzLT50c190Z2lkX293bmVyLAorCQkJCSAgIGlzX2tlcm5lbF9jb250ZXh0KHRzKSA/IDAgOiB0cy0+dHNfZ21zLT5tc19hc2lkc1tnaWRdLm10X2FzaWQsCisJCQkJICAgaXNfa2VybmVsX2NvbnRleHQodHMpID8gMCA6IHRzLT50c190Z2lkX293bmVyLAogCQkJCSAgIHRzLT50c19jYnJfYXVfY291bnQgKiBHUlVfQ0JSX0FVX1NJWkUsCiAJCQkJICAgdHMtPnRzX2Nicl9hdV9jb3VudCAqIEdSVV9EU1JfQVVfQllURVMsCiAJCQkJICAgbW9kZVt0cy0+dHNfdXNlcl9vcHRpb25zICYKQEAgLTM1NSw3ICszNTUsNyBAQAogCQlmb3IgKHAgPSBwcm9jX2ZpbGVzOyBwLT5uYW1lOyBwKyspCiAJCQlpZiAocC0+ZW50cnkpCiAJCQkJcmVtb3ZlX3Byb2NfZW50cnkocC0+bmFtZSwgcHJvY19ncnUpOwotCQlyZW1vdmVfcHJvY19lbnRyeSgiZ3J1IiwgTlVMTCk7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJncnUiLCBwcm9jX2dydS0+cGFyZW50KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKaW5kZXggNDY5OTBiYy4uMDJhNzdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKQEAgLTE2MSw3ICsxNjEsNyBAQAogI2RlZmluZSBHUlVfTUFYX0dSVVMJCShHUlVfTUFYX0JMQURFUyAqIEdSVV9DSElQTEVUU19QRVJfQkxBREUpCiAKICNkZWZpbmUgR1JVX0RSSVZFUl9JRF9TVFIJIlNHSSBHUlUgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgR1JVX0RSSVZFUl9WRVJTSU9OX1NUUgkiMC44MCIKKyNkZWZpbmUgR1JVX0RSSVZFUl9WRVJTSU9OX1NUUgkiMC44NSIKIAogLyoKICAqIEdSVSBzdGF0aXN0aWNzLgpAQCAtMTcxLDcgKzE3MSw4IEBACiAJYXRvbWljX2xvbmdfdCB2ZGF0YV9mcmVlOwogCWF0b21pY19sb25nX3QgZ3RzX2FsbG9jOwogCWF0b21pY19sb25nX3QgZ3RzX2ZyZWU7Ci0JYXRvbWljX2xvbmdfdCB2ZGF0YV9kb3VibGVfYWxsb2M7CisJYXRvbWljX2xvbmdfdCBnbXNfYWxsb2M7CisJYXRvbWljX2xvbmdfdCBnbXNfZnJlZTsKIAlhdG9taWNfbG9uZ190IGd0c19kb3VibGVfYWxsb2NhdGU7CiAJYXRvbWljX2xvbmdfdCBhc3NpZ25fY29udGV4dDsKIAlhdG9taWNfbG9uZ190IGFzc2lnbl9jb250ZXh0X2ZhaWxlZDsKQEAgLTE4NCwyOCArMTg1LDI1IEBACiAJYXRvbWljX2xvbmdfdCBzdGVhbF9rZXJuZWxfY29udGV4dDsKIAlhdG9taWNfbG9uZ190IHN0ZWFsX2NvbnRleHRfZmFpbGVkOwogCWF0b21pY19sb25nX3Qgbm9wZm47Ci0JYXRvbWljX2xvbmdfdCBicmVha19jb3c7CiAJYXRvbWljX2xvbmdfdCBhc2lkX25ldzsKIAlhdG9taWNfbG9uZ190IGFzaWRfbmV4dDsKIAlhdG9taWNfbG9uZ190IGFzaWRfd3JhcDsKIAlhdG9taWNfbG9uZ190IGFzaWRfcmV1c2U7CiAJYXRvbWljX2xvbmdfdCBpbnRyOworCWF0b21pY19sb25nX3QgaW50cl9jYnI7CisJYXRvbWljX2xvbmdfdCBpbnRyX3RmaDsKKwlhdG9taWNfbG9uZ190IGludHJfc3B1cmlvdXM7CiAJYXRvbWljX2xvbmdfdCBpbnRyX21tX2xvY2tfZmFpbGVkOwogCWF0b21pY19sb25nX3QgY2FsbF9vczsKLQlhdG9taWNfbG9uZ190IGNhbGxfb3Nfb2Zmbm9kZV9yZWZlcmVuY2U7Ci0JYXRvbWljX2xvbmdfdCBjYWxsX29zX2NoZWNrX2Zvcl9idWc7CiAJYXRvbWljX2xvbmdfdCBjYWxsX29zX3dhaXRfcXVldWU7CiAJYXRvbWljX2xvbmdfdCB1c2VyX2ZsdXNoX3RsYjsKIAlhdG9taWNfbG9uZ190IHVzZXJfdW5sb2FkX2NvbnRleHQ7CiAJYXRvbWljX2xvbmdfdCB1c2VyX2V4Y2VwdGlvbjsKIAlhdG9taWNfbG9uZ190IHNldF9jb250ZXh0X29wdGlvbjsKLQlhdG9taWNfbG9uZ190IG1pZ3JhdGVfY2hlY2s7Ci0JYXRvbWljX2xvbmdfdCBtaWdyYXRlZF9yZXRhcmdldDsKLQlhdG9taWNfbG9uZ190IG1pZ3JhdGVkX3VubG9hZDsKLQlhdG9taWNfbG9uZ190IG1pZ3JhdGVkX3VubG9hZF9kZWxheTsKLQlhdG9taWNfbG9uZ190IG1pZ3JhdGVkX25vcGZuX3JldGFyZ2V0OwotCWF0b21pY19sb25nX3QgbWlncmF0ZWRfbm9wZm5fdW5sb2FkOworCWF0b21pY19sb25nX3QgY2hlY2tfY29udGV4dF9yZXRhcmdldF9pbnRyOworCWF0b21pY19sb25nX3QgY2hlY2tfY29udGV4dF91bmxvYWQ7CiAJYXRvbWljX2xvbmdfdCB0bGJfZHJvcGluOworCWF0b21pY19sb25nX3QgdGxiX3ByZWxvYWRfcGFnZTsKIAlhdG9taWNfbG9uZ190IHRsYl9kcm9waW5fZmFpbF9ub19hc2lkOwogCWF0b21pY19sb25nX3QgdGxiX2Ryb3Bpbl9mYWlsX3VwbTsKIAlhdG9taWNfbG9uZ190IHRsYl9kcm9waW5fZmFpbF9pbnZhbGlkOwpAQCAtMjEzLDE3ICsyMTEsMTYgQEAKIAlhdG9taWNfbG9uZ190IHRsYl9kcm9waW5fZmFpbF9pZGxlOwogCWF0b21pY19sb25nX3QgdGxiX2Ryb3Bpbl9mYWlsX2ZtbTsKIAlhdG9taWNfbG9uZ190IHRsYl9kcm9waW5fZmFpbF9ub19leGNlcHRpb247Ci0JYXRvbWljX2xvbmdfdCB0bGJfZHJvcGluX2ZhaWxfbm9fZXhjZXB0aW9uX3dhcjsKIAlhdG9taWNfbG9uZ190IHRmaF9zdGFsZV9vbl9mYXVsdDsKIAlhdG9taWNfbG9uZ190IG1tdV9pbnZhbGlkYXRlX3JhbmdlOwogCWF0b21pY19sb25nX3QgbW11X2ludmFsaWRhdGVfcGFnZTsKLQlhdG9taWNfbG9uZ190IG1tdV9jbGVhcl9mbHVzaF95b3VuZzsKIAlhdG9taWNfbG9uZ190IGZsdXNoX3RsYjsKIAlhdG9taWNfbG9uZ190IGZsdXNoX3RsYl9ncnU7CiAJYXRvbWljX2xvbmdfdCBmbHVzaF90bGJfZ3J1X3RnaDsKIAlhdG9taWNfbG9uZ190IGZsdXNoX3RsYl9ncnVfemVyb19hc2lkOwogCiAJYXRvbWljX2xvbmdfdCBjb3B5X2dwYTsKKwlhdG9taWNfbG9uZ190IHJlYWRfZ3BhOwogCiAJYXRvbWljX2xvbmdfdCBtZXNxX3JlY2VpdmU7CiAJYXRvbWljX2xvbmdfdCBtZXNxX3JlY2VpdmVfbm9uZTsKQEAgLTIzNSw3ICsyMzIsNyBAQAogCWF0b21pY19sb25nX3QgbWVzcV9zZW5kX3FsaW1pdF9yZWFjaGVkOwogCWF0b21pY19sb25nX3QgbWVzcV9zZW5kX2Ftb19uYWNrZWQ7CiAJYXRvbWljX2xvbmdfdCBtZXNxX3NlbmRfcHV0X25hY2tlZDsKLQlhdG9taWNfbG9uZ190IG1lc3FfcWZfbm90X2Z1bGw7CisJYXRvbWljX2xvbmdfdCBtZXNxX3BhZ2Vfb3ZlcmZsb3c7CiAJYXRvbWljX2xvbmdfdCBtZXNxX3FmX2xvY2tlZDsKIAlhdG9taWNfbG9uZ190IG1lc3FfcWZfbm9vcF9ub3RfZnVsbDsKIAlhdG9taWNfbG9uZ190IG1lc3FfcWZfc3dpdGNoX2hlYWRfZmFpbGVkOwpAQCAtMjQ1LDExICsyNDIsMTMgQEAKIAlhdG9taWNfbG9uZ190IG1lc3Ffbm9vcF9xbGltaXRfcmVhY2hlZDsKIAlhdG9taWNfbG9uZ190IG1lc3Ffbm9vcF9hbW9fbmFja2VkOwogCWF0b21pY19sb25nX3QgbWVzcV9ub29wX3B1dF9uYWNrZWQ7CisJYXRvbWljX2xvbmdfdCBtZXNxX25vb3BfcGFnZV9vdmVyZmxvdzsKIAogfTsKIAogZW51bSBtY3Nfb3Age2NjaG9wX2FsbG9jYXRlLCBjY2hvcF9zdGFydCwgY2Nob3BfaW50ZXJydXB0LCBjY2hvcF9pbnRlcnJ1cHRfc3luYywKLQljY2hvcF9kZWFsbG9jYXRlLCB0Z2hvcF9pbnZhbGlkYXRlLCBtY3NvcF9sYXN0fTsKKwljY2hvcF9kZWFsbG9jYXRlLCB0ZmhvcF93cml0ZV9vbmx5LCB0ZmhvcF93cml0ZV9yZXN0YXJ0LAorCXRnaG9wX2ludmFsaWRhdGUsIG1jc29wX2xhc3R9OwogCiBzdHJ1Y3QgbWNzX29wX3N0YXRpc3RpYyB7CiAJYXRvbWljX2xvbmdfdAljb3VudDsKQEAgLTI1OSw4ICsyNTgsOCBAQAogCiBleHRlcm4gc3RydWN0IG1jc19vcF9zdGF0aXN0aWMgbWNzX29wX3N0YXRpc3RpY3NbbWNzb3BfbGFzdF07CiAKLSNkZWZpbmUgT1BUX0RQUklOVAkxCi0jZGVmaW5lIE9QVF9TVEFUUwkyCisjZGVmaW5lIE9QVF9EUFJJTlQJCTEKKyNkZWZpbmUgT1BUX1NUQVRTCQkyCiAKIAogI2RlZmluZSBJUlFfR1JVCQkJMTEwCS8qIFN0YXJ0aW5nIElSUSBudW1iZXIgZm9yIGludGVycnVwdHMgKi8KQEAgLTI4Myw3ICsyODIsNyBAQAogI2RlZmluZSBncnVfZGJnKGRldiwgZm10LCB4Li4uKQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmIChncnVfb3B0aW9ucyAmIE9QVF9EUFJJTlQpCQkJCVwKLQkJCWRldl9kYmcoZGV2LCAiJXM6ICIgZm10LCBfX2Z1bmNfXywgeCk7CQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiR1JVOiVkICVzOiAiIGZtdCwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgeCk7XAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBncnVfZGJnKHguLi4pCkBAIC0yOTcsMTMgKzI5Niw3IEBACiAjZGVmaW5lIEFTSURfSU5DCTgJLyogbnVtYmVyIG9mIHJlZ2lvbnMgKi8KIAogLyogR2VuZXJhdGUgYSBHUlUgYXNpZCB2YWx1ZSBmcm9tIGEgR1JVIGJhc2UgYXNpZCAmIGEgdmlydHVhbCBhZGRyZXNzLiAqLwotI2lmIGRlZmluZWQgQ09ORklHX0lBNjQKICNkZWZpbmUgVkFERFJfSElfQklUCQk2NAotI2VsaWYgZGVmaW5lZCBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFZBRERSX0hJX0JJVAkJNDgKLSNlbHNlCi0jZXJyb3IgIlVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIKLSNlbmRpZgogI2RlZmluZSBHUlVSRUdJT04oYWRkcikJCSgoYWRkcikgPj4gKFZBRERSX0hJX0JJVCAtIDMpICYgMykKICNkZWZpbmUgR1JVQVNJRChhc2lkLCBhZGRyKQkoKGFzaWQpICsgR1JVUkVHSU9OKGFkZHIpKQogCkBAIC0zNDUsNiArMzM4LDcgQEAKIAlsb25nCQkJdmRfdXNlcl9vcHRpb25zOy8qIG1pc2MgdXNlciBvcHRpb24gZmxhZ3MgKi8KIAlpbnQJCQl2ZF9jYnJfYXVfY291bnQ7CiAJaW50CQkJdmRfZHNyX2F1X2NvdW50OworCXVuc2lnbmVkIGNoYXIJCXZkX3RsYl9wcmVsb2FkX2NvdW50OwogfTsKIAogLyoKQEAgLTM2MCw2ICszNTQsNyBAQAogCXN0cnVjdCBncnVfc3RhdGUJKnRzX2dydTsJLyogR1JVIHdoZXJlIHRoZSBjb250ZXh0IGlzCiAJCQkJCQkgICBsb2FkZWQgKi8KIAlzdHJ1Y3QgZ3J1X21tX3N0cnVjdAkqdHNfZ21zOwkvKiBhc2lkICYgaW9wcm9jIHN0cnVjdCAqLworCXVuc2lnbmVkIGNoYXIJCXRzX3RsYl9wcmVsb2FkX2NvdW50OyAvKiBUTEIgcHJlbG9hZCBwYWdlcyAqLwogCXVuc2lnbmVkIGxvbmcJCXRzX2Nicl9tYXA7CS8qIG1hcCBvZiBhbGxvY2F0ZWQgQ0JScyAqLwogCXVuc2lnbmVkIGxvbmcJCXRzX2Rzcl9tYXA7CS8qIG1hcCBvZiBhbGxvY2F0ZWQgREFUQQogCQkJCQkJICAgcmVzb3VyY2VzICovCkBAIC0zNjgsNiArMzYzLDggQEAKIAlsb25nCQkJdHNfdXNlcl9vcHRpb25zOy8qIG1pc2MgdXNlciBvcHRpb24gZmxhZ3MgKi8KIAlwaWRfdAkJCXRzX3RnaWRfb3duZXI7CS8qIHRhc2sgdGhhdCBpcyB1c2luZyB0aGUKIAkJCQkJCSAgIGNvbnRleHQgLSBmb3IgbWlncmF0aW9uICovCisJc2hvcnQJCQl0c191c2VyX2JsYWRlX2lkOy8qIHVzZXIgc2VsZWN0ZWQgYmxhZGUgKi8KKwljaGFyCQkJdHNfdXNlcl9jaGlwbGV0X2lkOy8qIHVzZXIgc2VsZWN0ZWQgY2hpcGxldCAqLwogCXVuc2lnbmVkIHNob3J0CQl0c19zaXplYXZhaWw7CS8qIFBhZ2VzaXplcyBpbiB1c2UgKi8KIAlpbnQJCQl0c190c2lkOwkvKiB0aHJlYWQgdGhhdCBvd25zIHRoZQogCQkJCQkJICAgc3RydWN0dXJlICovCkBAIC0zODQsMTMgKzM4MSwxMSBAQAogCWNoYXIJCQl0c19ibGFkZTsJLyogSWYgPj0gMCwgbWlncmF0ZSBjb250ZXh0IGlmCiAJCQkJCQkgICByZWYgZnJvbSBkaWZlcmVudCBibGFkZSAqLwogCWNoYXIJCQl0c19mb3JjZV9jY2hfcmVsb2FkOwotCWNoYXIJCQl0c19mb3JjZV91bmxvYWQ7LyogZm9yY2UgY29udGV4dCB0byBiZSB1bmxvYWRlZAotCQkJCQkJICAgYWZ0ZXIgbWlncmF0aW9uICovCiAJY2hhcgkJCXRzX2Nicl9pZHhbR1JVX0NCUl9BVV07LyogQ0JSIG51bWJlcnMgb2YgZWFjaAogCQkJCQkJCSAgYWxsb2NhdGVkIENCICovCiAJaW50CQkJdHNfZGF0YV92YWxpZDsJLyogSW5kaWNhdGVzIGlmIHRzX2dkYXRhIGhhcwogCQkJCQkJICAgdmFsaWQgZGF0YSAqLwotCXN0cnVjdCBndHNfc3RhdGlzdGljcwl1c3RhdHM7CQkvKiBVc2VyIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgZ3J1X2dzZWdfc3RhdGlzdGljcyB1c3RhdHM7CS8qIFVzZXIgc3RhdGlzdGljcyAqLwogCXVuc2lnbmVkIGxvbmcJCXRzX2dkYXRhWzBdOwkvKiBzYXZlIGFyZWEgZm9yIEdSVSBkYXRhIChDQiwKIAkJCQkJCSAgIERTLCBDQkUpICovCiB9OwpAQCAtNDIyLDYgKzQxNyw3IEBACiAJCQkJCQkJICAgZ3J1IHNlZ21lbnRzICg2NCkgKi8KIAl1bnNpZ25lZCBzaG9ydAkJZ3NfZ2lkOwkJCS8qIHVuaXF1ZSBHUlUgbnVtYmVyICovCiAJdW5zaWduZWQgc2hvcnQJCWdzX2JsYWRlX2lkOwkJLyogYmxhZGUgb2YgR1JVICovCisJdW5zaWduZWQgY2hhcgkJZ3NfY2hpcGxldF9pZDsJCS8qIGJsYWRlIGNoaXBsZXQgb2YgR1JVICovCiAJdW5zaWduZWQgY2hhcgkJZ3NfdGdoX2xvY2FsX3NoaWZ0OwkvKiB1c2VkIHRvIHBpY2sgVEdIIGZvcgogCQkJCQkJCSAgIGxvY2FsIGZsdXNoICovCiAJdW5zaWduZWQgY2hhcgkJZ3NfdGdoX2ZpcnN0X3JlbW90ZTsJLyogc3RhcnRpbmcgVEdIIyBmb3IKQEAgLTQ1Myw2ICs0NDksNyBAQAogCQkJCQkJCSAgIGluIHVzZSAqLwogCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlCSpnc19ndHNbR1JVX05VTV9DQ0hdOwkvKiBHVFMgY3VycmVudGx5IHVzaW5nCiAJCQkJCQkJICAgdGhlIGNvbnRleHQgKi8KKwlpbnQJCQlnc19pcnFbR1JVX05VTV9URk1dOwkvKiBJbnRlcnJ1cHQgaXJxcyAqLwogfTsKIAogLyoKQEAgLTYxOSw2ICs2MTYsMTUgQEAKIAlyZXR1cm4gIWd0cy0+dHNfbW07CiB9CiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSBmb3IgTmVoZWxlbS1FWC4gQSBtb3JlIGdlbmVyYWwgc2NoZW1lIGlzIG5lZWRlZCBmb3IKKyAqIGZ1dHVyZSBwcm9jZXNzb3JzLgorICovCisjZGVmaW5lIFVWX01BWF9JTlRfQ09SRVMJCTgKKyNkZWZpbmUgdXZfY3B1X3NvY2tldF9udW1iZXIocCkJCSgoY3B1X3BoeXNpY2FsX2lkKHApID4+IDUpICYgMSkKKyNkZWZpbmUgdXZfY3B1X2h0X251bWJlcihwKQkJKGNwdV9waHlzaWNhbF9pZChwKSAmIDEpCisjZGVmaW5lIHV2X2NwdV9jb3JlX251bWJlcihwKQkJKCgoY3B1X3BoeXNpY2FsX2lkKHApID4+IDIpICYgNCkgfAlcCisJCQkJCSgoY3B1X3BoeXNpY2FsX2lkKHApID4+IDEpICYgMykpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzICYgZXh0ZXJucwogICovCkBAIC02MzMsMjQgKzYzOSwyNiBAQAogCQkJCSp2bWEsIGludCB0c2lkKTsKIGV4dGVybiBzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3J1X2FsbG9jX3RocmVhZF9zdGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QKIAkJCQkqdm1hLCBpbnQgdHNpZCk7Ci1leHRlcm4gc3RydWN0IGdydV9zdGF0ZSAqZ3J1X2Fzc2lnbl9ncnVfY29udGV4dChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLAotCQlpbnQgYmxhZGUpOworZXh0ZXJuIHN0cnVjdCBncnVfc3RhdGUgKmdydV9hc3NpZ25fZ3J1X2NvbnRleHQoc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cyk7CiBleHRlcm4gdm9pZCBncnVfbG9hZF9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpOwotZXh0ZXJuIHZvaWQgZ3J1X3N0ZWFsX2NvbnRleHQoc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGJsYWRlX2lkKTsKK2V4dGVybiB2b2lkIGdydV9zdGVhbF9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpOwogZXh0ZXJuIHZvaWQgZ3J1X3VubG9hZF9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBzYXZlc3RhdGUpOwotZXh0ZXJuIGludCBncnVfdXBkYXRlX2NjaChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLCBpbnQgZm9yY2VfdW5sb2FkKTsKK2V4dGVybiBpbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cyk7CiBleHRlcm4gdm9pZCBndHNfZHJvcChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzKTsKIGV4dGVybiB2b2lkIGdydV90Z2hfZmx1c2hfaW5pdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpOwogZXh0ZXJuIGludCBncnVfa3NlcnZpY2VzX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBncnVfa3NlcnZpY2VzX2V4aXQodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgZ3J1MF9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgZ3J1MV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgZ3J1X2ludHJfbWJsYWRlKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBleHRlcm4gaW50IGdydV9kdW1wX2NoaXBsZXRfcmVxdWVzdCh1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gbG9uZyBncnVfZ2V0X2dzZWdfc3RhdGlzdGljcyh1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgZ3J1X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGV4dGVybiBpbnQgZ3J1X2hhbmRsZV91c2VyX2NhbGxfb3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiBpbnQgZ3J1X3VzZXJfZmx1c2hfdGxiKHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgZ3J1X3VzZXJfdW5sb2FkX2NvbnRleHQodW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludCBncnVfZ2V0X2V4Y2VwdGlvbl9kZXRhaWwodW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludCBncnVfc2V0X2NvbnRleHRfb3B0aW9uKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBncnVfY2hlY2tfY29udGV4dF9wbGFjZW1lbnQoc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cyk7CiBleHRlcm4gaW50IGdydV9jcHVfZmF1bHRfbWFwX2lkKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ3J1X2ZpbmRfdm1hKHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogZXh0ZXJuIHZvaWQgZ3J1X2ZsdXNoX2FsbF90bGIoc3RydWN0IGdydV9zdGF0ZSAqZ3J1KTsKQEAgLTY1OCw3ICs2NjYsOCBAQAogZXh0ZXJuIHZvaWQgZ3J1X3Byb2NfZXhpdCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpncnVfYWxsb2NfZ3RzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlpbnQgY2JyX2F1X2NvdW50LCBpbnQgZHNyX2F1X2NvdW50LCBpbnQgb3B0aW9ucywgaW50IHRzaWQpOworCQlpbnQgY2JyX2F1X2NvdW50LCBpbnQgZHNyX2F1X2NvdW50LAorCQl1bnNpZ25lZCBjaGFyIHRsYl9wcmVsb2FkX2NvdW50LCBpbnQgb3B0aW9ucywgaW50IHRzaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ3J1X3Jlc2VydmVfY2JfcmVzb3VyY2VzKHN0cnVjdCBncnVfc3RhdGUgKmdydSwKIAkJaW50IGNicl9hdV9jb3VudCwgY2hhciAqY2JtYXApOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ3J1X3Jlc2VydmVfZHNfcmVzb3VyY2VzKHN0cnVjdCBncnVfc3RhdGUgKmdydSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0bGJwdXJnZS5jCmluZGV4IDFkMTI1MDkuLjI0MGE2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGxicHVyZ2UuYwpAQCAtMTg0LDggKzE4NCw4IEBACiAJCQlTVEFUKGZsdXNoX3RsYl9ncnVfdGdoKTsKIAkJCWFzaWQgPSBHUlVBU0lEKGFzaWQsIHN0YXJ0KTsKIAkJCWdydV9kYmcoZ3J1ZGV2LAotCSIgIEZMVVNIIGdydWlkICVkLCBhc2lkIDB4JXgsIG51bSAlbGQsIGNibWFwIDB4JXhcbiIsCi0JCQkJZ2lkLCBhc2lkLCBudW0sIGFzaWRzLT5tdF9jdHhiaXRtYXApOworCSIgIEZMVVNIIGdydWlkICVkLCBhc2lkIDB4JXgsIHZhZGRyIDB4JWx4LCB2YW1hc2sgMHgleCwgbnVtICVsZCwgY2JtYXAgMHgleFxuIiwKKwkJCSAgICAgIGdpZCwgYXNpZCwgc3RhcnQsIGdydXBhZ2VzaXplLCBudW0sIGFzaWRzLT5tdF9jdHhiaXRtYXApOwogCQkJdGdoID0gZ2V0X2xvY2tfdGdoX2hhbmRsZShncnUpOwogCQkJdGdoX2ludmFsaWRhdGUodGdoLCBzdGFydCwgfjAsIGFzaWQsIGdydXBhZ2VzaXplLCAwLAogCQkJCSAgICAgICBudW0gLSAxLCBhc2lkcy0+bXRfY3R4Yml0bWFwKTsKQEAgLTI5OSw2ICsyOTksNyBAQAogewogCXN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXM7CiAJc3RydWN0IG1tdV9ub3RpZmllciAqbW47CisJaW50IGVycjsKIAogCW1uID0gbW11X2ZpbmRfb3BzKGN1cnJlbnQtPm1tLCAmZ3J1X21tdW9wcyk7CiAJaWYgKG1uKSB7CkBAIC0zMDcsMTYgKzMwOCwyMiBAQAogCX0gZWxzZSB7CiAJCWdtcyA9IGt6YWxsb2Moc2l6ZW9mKCpnbXMpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGdtcykgeworCQkJU1RBVChnbXNfYWxsb2MpOwogCQkJc3Bpbl9sb2NrX2luaXQoJmdtcy0+bXNfYXNpZF9sb2NrKTsKIAkJCWdtcy0+bXNfbm90aWZpZXIub3BzID0gJmdydV9tbXVvcHM7CiAJCQlhdG9taWNfc2V0KCZnbXMtPm1zX3JlZmNudCwgMSk7CiAJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnbXMtPm1zX3dhaXRfcXVldWUpOwotCQkJX19tbXVfbm90aWZpZXJfcmVnaXN0ZXIoJmdtcy0+bXNfbm90aWZpZXIsIGN1cnJlbnQtPm1tKTsKKwkJCWVyciA9IF9fbW11X25vdGlmaWVyX3JlZ2lzdGVyKCZnbXMtPm1zX25vdGlmaWVyLCBjdXJyZW50LT5tbSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CiAJZ3J1X2RiZyhncnVkZXYsICJnbXMgJXAsIHJlZmNudCAlZFxuIiwgZ21zLAogCQlhdG9taWNfcmVhZCgmZ21zLT5tc19yZWZjbnQpKTsKIAlyZXR1cm4gZ21zOworZXJyb3I6CisJa2ZyZWUoZ21zKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiB2b2lkIGdydV9kcm9wX21tdV9ub3RpZmllcihzdHJ1Y3QgZ3J1X21tX3N0cnVjdCAqZ21zKQpAQCAtMzI3LDYgKzMzNCw3IEBACiAJCWlmICghZ21zLT5tc19yZWxlYXNlZCkKIAkJCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZnbXMtPm1zX25vdGlmaWVyLCBjdXJyZW50LT5tbSk7CiAJCWtmcmVlKGdtcyk7CisJCVNUQVQoZ21zX2ZyZWUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cC5oIGIvZHJpdmVycy9taXNjL3NnaS14cC94cC5oCmluZGV4IDIyNzUxMjYuLjg1MWIyZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHAuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwLmgKQEAgLTMzOSw2ICszMzksNyBAQAogZXh0ZXJuIHU4IHhwX3JlZ2lvbl9zaXplOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyAoKnhwX3BhKSAodm9pZCAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nICgqeHBfc29ja2V0X3BhKSAodW5zaWduZWQgbG9uZyk7CiBleHRlcm4gZW51bSB4cF9yZXR2YWwgKCp4cF9yZW1vdGVfbWVtY3B5KSAodW5zaWduZWQgbG9uZywgY29uc3QgdW5zaWduZWQgbG9uZywKIAkJICAgICAgIHNpemVfdCk7CiBleHRlcm4gaW50ICgqeHBfY3B1X3RvX25hc2lkKSAoaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBfbWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cF9tYWluLmMKaW5kZXggNzg5Njg0OS4uMDFiZTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cF9tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cF9tYWluLmMKQEAgLTQ0LDYgKzQ0LDkgQEAKIHVuc2lnbmVkIGxvbmcgKCp4cF9wYSkgKHZvaWQgKmFkZHIpOwogRVhQT1JUX1NZTUJPTF9HUEwoeHBfcGEpOwogCit1bnNpZ25lZCBsb25nICgqeHBfc29ja2V0X3BhKSAodW5zaWduZWQgbG9uZyBncGEpOworRVhQT1JUX1NZTUJPTF9HUEwoeHBfc29ja2V0X3BhKTsKKwogZW51bSB4cF9yZXR2YWwgKCp4cF9yZW1vdGVfbWVtY3B5KSAodW5zaWduZWQgbG9uZyBkc3RfZ3BhLAogCQkJCSAgICBjb25zdCB1bnNpZ25lZCBsb25nIHNyY19ncGEsIHNpemVfdCBsZW4pOwogRVhQT1JUX1NZTUJPTF9HUEwoeHBfcmVtb3RlX21lbWNweSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwX3NuMi5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cF9zbjIuYwppbmRleCBmYjNlYzlkLi5kOGU0NjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwX3NuMi5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBfc24yLmMKQEAgLTg0LDYgKzg0LDE1IEBACiB9CiAKIC8qCisgKiBDb252ZXJ0IGEgZ2xvYmFsIHBoeXNpY2FsIHRvIGEgc29ja2V0IHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCit4cF9zb2NrZXRfcGFfc24yKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXJldHVybiBncGE7Cit9CisKKy8qCiAgKiBXcmFwcGVyIGZvciBidGVfY29weSgpLgogICoKICAqCWRzdF9wYSAtIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSB0cmFuc2Zlci4KQEAgLTE2Miw2ICsxNzEsNyBAQAogCXhwX3JlZ2lvbl9zaXplID0gc25fcmVnaW9uX3NpemU7CiAKIAl4cF9wYSA9IHhwX3BhX3NuMjsKKwl4cF9zb2NrZXRfcGEgPSB4cF9zb2NrZXRfcGFfc24yOwogCXhwX3JlbW90ZV9tZW1jcHkgPSB4cF9yZW1vdGVfbWVtY3B5X3NuMjsKIAl4cF9jcHVfdG9fbmFzaWQgPSB4cF9jcHVfdG9fbmFzaWRfc24yOwogCXhwX2V4cGFuZF9tZW1wcm90ZWN0ID0geHBfZXhwYW5kX21lbXByb3RlY3Rfc24yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cF91di5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cF91di5jCmluZGV4IGQyMzg1NzYuLmEwZDA5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBfdXYuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwX3V2LmMKQEAgLTMyLDEyICszMiw0NCBAQAogCXJldHVybiB1dl9ncGEoYWRkcik7CiB9CiAKKy8qCisgKiBDb252ZXJ0IGEgZ2xvYmFsIHBoeXNpY2FsIHRvIHNvY2tldCBwaHlzaWNhbCBhZGRyZXNzLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworeHBfc29ja2V0X3BhX3V2KHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXJldHVybiB1dl9ncGFfdG9fc29jX3BoeXNfcmFtKGdwYSk7Cit9CisKK3N0YXRpYyBlbnVtIHhwX3JldHZhbAoreHBfcmVtb3RlX21tcl9yZWFkKHVuc2lnbmVkIGxvbmcgZHN0X2dwYSwgY29uc3QgdW5zaWduZWQgbG9uZyBzcmNfZ3BhLAorCQkgICBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyAqZHN0X3ZhID0gX192YSh1dl9ncGFfdG9fc29jX3BoeXNfcmFtKGRzdF9ncGEpKTsKKworCUJVR19PTighdXZfZ3BhX2luX21tcl9zcGFjZShzcmNfZ3BhKSk7CisJQlVHX09OKGxlbiAhPSA4KTsKKworCXJldCA9IGdydV9yZWFkX2dwYShkc3RfdmEsIHNyY19ncGEpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIHhwU3VjY2VzczsKKworCWRldl9lcnIoeHAsICJncnVfcmVhZF9ncGEoKSBmYWlsZWQsIGRzdF9ncGE9MHglMDE2bHggc3JjX2dwYT0weCUwMTZseCAiCisJCSJsZW49JWxkXG4iLCBkc3RfZ3BhLCBzcmNfZ3BhLCBsZW4pOworCXJldHVybiB4cEdydUNvcHlFcnJvcjsKK30KKworCiBzdGF0aWMgZW51bSB4cF9yZXR2YWwKIHhwX3JlbW90ZV9tZW1jcHlfdXYodW5zaWduZWQgbG9uZyBkc3RfZ3BhLCBjb25zdCB1bnNpZ25lZCBsb25nIHNyY19ncGEsCiAJCSAgICBzaXplX3QgbGVuKQogewogCWludCByZXQ7CiAKKwlpZiAodXZfZ3BhX2luX21tcl9zcGFjZShzcmNfZ3BhKSkKKwkJcmV0dXJuIHhwX3JlbW90ZV9tbXJfcmVhZChkc3RfZ3BhLCBzcmNfZ3BhLCBsZW4pOworCiAJcmV0ID0gZ3J1X2NvcHlfZ3BhKGRzdF9ncGEsIHNyY19ncGEsIGxlbik7CiAJaWYgKHJldCA9PSAwKQogCQlyZXR1cm4geHBTdWNjZXNzOwpAQCAtMTIzLDYgKzE1NSw3IEBACiAJeHBfcmVnaW9uX3NpemUgPSBzbl9yZWdpb25fc2l6ZTsKIAogCXhwX3BhID0geHBfcGFfdXY7CisJeHBfc29ja2V0X3BhID0geHBfc29ja2V0X3BhX3V2OwogCXhwX3JlbW90ZV9tZW1jcHkgPSB4cF9yZW1vdGVfbWVtY3B5X3V2OwogCXhwX2NwdV90b19uYXNpZCA9IHhwX2NwdV90b19uYXNpZF91djsKIAl4cF9leHBhbmRfbWVtcHJvdGVjdCA9IHhwX2V4cGFuZF9tZW1wcm90ZWN0X3V2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfcGFydGl0aW9uLmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19wYXJ0aXRpb24uYwppbmRleCA2NTg3N2JjLi45YTYyNjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19wYXJ0aXRpb24uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19wYXJ0aXRpb24uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlICJ4cGMuaCIKKyNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CiAKIC8qIFhQQyBpcyBleGl0aW5nIGZsYWcgKi8KIGludCB4cGNfZXhpdGluZzsKQEAgLTkyLDggKzkzLDEyIEBACiAJCQlicmVhazsKIAogCQkvKiAhISEgTDFfQ0FDSEVfQUxJR04oKSBpcyBvbmx5IGEgc24yLWJ0ZV9jb3B5IHJlcXVpcmVtZW50ICovCi0JCWlmIChMMV9DQUNIRV9BTElHTihsZW4pID4gYnVmX2xlbikgewotCQkJa2ZyZWUoYnVmX2Jhc2UpOworCQlpZiAoaXNfc2h1YigpKQorCQkJbGVuID0gTDFfQ0FDSEVfQUxJR04obGVuKTsKKworCQlpZiAobGVuID4gYnVmX2xlbikgeworCQkJaWYgKGJ1Zl9iYXNlICE9IE5VTEwpCisJCQkJa2ZyZWUoYnVmX2Jhc2UpOwogCQkJYnVmX2xlbiA9IEwxX0NBQ0hFX0FMSUdOKGxlbik7CiAJCQlidWYgPSB4cGNfa21hbGxvY19jYWNoZWxpbmVfYWxpZ25lZChidWZfbGVuLCBHRlBfS0VSTkVMLAogCQkJCQkJCSAgICAmYnVmX2Jhc2UpOwpAQCAtMTA1LDcgKzExMCw3IEBACiAJCQl9CiAJCX0KIAotCQlyZXQgPSB4cF9yZW1vdGVfbWVtY3B5KHhwX3BhKGJ1ZiksIHJwX3BhLCBidWZfbGVuKTsKKwkJcmV0ID0geHBfcmVtb3RlX21lbWNweSh4cF9wYShidWYpLCBycF9wYSwgbGVuKTsKIAkJaWYgKHJldCAhPSB4cFN1Y2Nlc3MpIHsKIAkJCWRldl9kYmcoeHBjX3BhcnQsICJ4cF9yZW1vdGVfbWVtY3B5IGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCWJyZWFrOwpAQCAtMTQzLDcgKzE0OCw3IEBACiAJCWRldl9lcnIoeHBjX3BhcnQsICJTQUwgZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVzZXJ2ZWQgcGFnZVxuIik7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQotCXJwID0gKHN0cnVjdCB4cGNfcnN2ZF9wYWdlICopX192YShycF9wYSk7CisJcnAgPSAoc3RydWN0IHhwY19yc3ZkX3BhZ2UgKilfX3ZhKHhwX3NvY2tldF9wYShycF9wYSkpOwogCiAJaWYgKHJwLT5TQUxfdmVyc2lvbiA8IDMpIHsKIAkJLyogU0FMX3ZlcnNpb25zIDwgMyBoYWQgYSBTQUxfcGFydGlkIGRlZmluZWQgYXMgYSB1OCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKaW5kZXggYjViYmU1OS4uODcyNWQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jCkBAIC0xNTcsMjIgKzE1NywyNCBAQAogewogCWludCByZXQ7CiAKLSNpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKLQlyZXQgPSB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyhtcS0+bW1yX2JsYWRlLCB1dl9ncGEobXEtPmFkZHJlc3MpLAotCQkJCQkgbXEtPm9yZGVyLCAmbXEtPm1tcl9vZmZzZXQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoeHBjX3BhcnQsICJ1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYygpIGZhaWxlZCwgIgotCQkJInJldD0lZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0jZWxpZiBkZWZpbmVkIENPTkZJR19JQTY0X0dFTkVSSUMgfHwgZGVmaW5lZCBDT05GSUdfSUE2NF9TR0lfVVYKLQlyZXQgPSBzbl9tcV93YXRjaGxpc3RfYWxsb2MobXEtPm1tcl9ibGFkZSwgKHZvaWQgKil1dl9ncGEobXEtPmFkZHJlc3MpLAorI2lmIGRlZmluZWQgQ09ORklHX0lBNjRfR0VORVJJQyB8fCBkZWZpbmVkIENPTkZJR19JQTY0X1NHSV9VVgorCWludCBtbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtcS0+bW1yX2JsYWRlKTsKKworCXJldCA9IHNuX21xX3dhdGNobGlzdF9hbGxvYyhtbXJfcG5vZGUsICh2b2lkICopdXZfZ3BhKG1xLT5hZGRyZXNzKSwKIAkJCQkgICAgbXEtPm9yZGVyLCAmbXEtPm1tcl9vZmZzZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoeHBjX3BhcnQsICJzbl9tcV93YXRjaGxpc3RfYWxsb2MoKSBmYWlsZWQsIHJldD0lZFxuIiwKIAkJCXJldCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQorI2VsaWYgZGVmaW5lZCBDT05GSUdfWDg2XzY0CisJcmV0ID0gdXZfYmlvc19tcV93YXRjaGxpc3RfYWxsb2ModXZfZ3BhKG1xLT5hZGRyZXNzKSwKKwkJCQkJIG1xLT5vcmRlciwgJm1xLT5tbXJfb2Zmc2V0KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAidXZfYmlvc19tcV93YXRjaGxpc3RfYWxsb2MoKSBmYWlsZWQsICIKKwkJCSJyZXQ9JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQogI2Vsc2UKIAkjZXJyb3Igbm90IGEgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpAQCAtMTg1LDEyICsxODcsMTMgQEAKIHhwY19ncnVfbXFfd2F0Y2hsaXN0X2ZyZWVfdXYoc3RydWN0IHhwY19ncnVfbXFfdXYgKm1xKQogewogCWludCByZXQ7CisJaW50IG1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1xLT5tbXJfYmxhZGUpOwogCiAjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzY0Ci0JcmV0ID0gdXZfYmlvc19tcV93YXRjaGxpc3RfZnJlZShtcS0+bW1yX2JsYWRlLCBtcS0+d2F0Y2hsaXN0X251bSk7CisJcmV0ID0gdXZfYmlvc19tcV93YXRjaGxpc3RfZnJlZShtbXJfcG5vZGUsIG1xLT53YXRjaGxpc3RfbnVtKTsKIAlCVUdfT04ocmV0ICE9IEJJT1NfU1RBVFVTX1NVQ0NFU1MpOwogI2VsaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCi0JcmV0ID0gc25fbXFfd2F0Y2hsaXN0X2ZyZWUobXEtPm1tcl9ibGFkZSwgbXEtPndhdGNobGlzdF9udW0pOworCXJldCA9IHNuX21xX3dhdGNobGlzdF9mcmVlKG1tcl9wbm9kZSwgbXEtPndhdGNobGlzdF9udW0pOwogCUJVR19PTihyZXQgIT0gU0FMUkVUX09LKTsKICNlbHNlCiAJI2Vycm9yIG5vdCBhIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uCkBAIC0yMDQsNiArMjA3LDcgQEAKIAllbnVtIHhwX3JldHZhbCB4cF9yZXQ7CiAJaW50IHJldDsKIAlpbnQgbmlkOworCWludCBuYXNpZDsKIAlpbnQgcGdfb3JkZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHhwY19ncnVfbXFfdXYgKm1xOwpAQCAtMjU5LDkgKzI2MywxMSBAQAogCQlnb3RvIG91dF81OwogCX0KIAorCW5hc2lkID0gVVZfUE5PREVfVE9fTkFTSUQodXZfY3B1X3RvX3Bub2RlKGNwdSkpOworCiAJbW1yX3ZhbHVlID0gKHN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICopJm1xLT5tbXJfdmFsdWU7CiAJcmV0ID0gZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKG1xLT5ncnVfbXFfZGVzYywgbXEtPmFkZHJlc3MsIG1xX3NpemUsCi0JCQkJICAgICAgIG5pZCwgbW1yX3ZhbHVlLT52ZWN0b3IsIG1tcl92YWx1ZS0+ZGVzdCk7CisJCQkJICAgICBuYXNpZCwgbW1yX3ZhbHVlLT52ZWN0b3IsIG1tcl92YWx1ZS0+ZGVzdCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoeHBjX3BhcnQsICJncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoKSByZXR1cm5lZCAiCiAJCQkiZXJyb3I9JWRcbiIsIHJldCk7CkBAIC05NDYsMTEgKzk1MiwxMyBAQAogCQloZWFkLT5maXJzdCA9IGZpcnN0LT5uZXh0OwogCQlpZiAoaGVhZC0+Zmlyc3QgPT0gTlVMTCkKIAkJCWhlYWQtPmxhc3QgPSBOVUxMOworCisJCWhlYWQtPm5fZW50cmllcy0tOworCQlCVUdfT04oaGVhZC0+bl9lbnRyaWVzIDwgMCk7CisKKwkJZmlyc3QtPm5leHQgPSBOVUxMOwogCX0KLQloZWFkLT5uX2VudHJpZXMtLTsKLQlCVUdfT04oaGVhZC0+bl9lbnRyaWVzIDwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgaXJxX2ZsYWdzKTsKLQlmaXJzdC0+bmV4dCA9IE5VTEw7CiAJcmV0dXJuIGZpcnN0OwogfQogCkBAIC0xMDE5LDcgKzEwMjcsOCBAQAogCXhwY19zZW5kX2FjdGl2YXRlX0lSUV9wYXJ0X3V2KHBhcnQsICZtc2csIHNpemVvZihtc2cpLAogCQkJCSAgICAgIFhQQ19BQ1RJVkFURV9NUV9NU0dfU1lOQ19BQ1RfU1RBVEVfVVYpOwogCi0Jd2hpbGUgKHBhcnQtPnNuLnV2LnJlbW90ZV9hY3Rfc3RhdGUgIT0gWFBDX1BfQVNfQUNUSVZBVElORykgeworCXdoaWxlICghKChwYXJ0LT5zbi51di5yZW1vdGVfYWN0X3N0YXRlID09IFhQQ19QX0FTX0FDVElWQVRJTkcpIHx8CisJCSAocGFydC0+c24udXYucmVtb3RlX2FjdF9zdGF0ZSA9PSBYUENfUF9BU19BQ1RJVkUpKSkgewogCiAJCWRldl9kYmcoeHBjX3BhcnQsICJ3YWl0aW5nIHRvIG1ha2UgZmlyc3QgY29udGFjdCB3aXRoICIKIAkJCSJwYXJ0aXRpb24gJWRcbiIsIFhQQ19QQVJUSUQocGFydCkpOwpAQCAtMTQyMiw3ICsxNDMxLDYgQEAKIAltc2dfc2xvdCA9IGNoX3V2LT5yZWN2X21zZ19zbG90cyArCiAJICAgIChtc2ctPmhkci5tc2dfc2xvdF9udW1iZXIgJSBjaC0+cmVtb3RlX25lbnRyaWVzKSAqIGNoLT5lbnRyeV9zaXplOwogCi0JQlVHX09OKG1zZy0+aGRyLm1zZ19zbG90X251bWJlciAhPSBtc2dfc2xvdC0+aGRyLm1zZ19zbG90X251bWJlcik7CiAJQlVHX09OKG1zZ19zbG90LT5oZHIuc2l6ZSAhPSAwKTsKIAogCW1lbWNweShtc2dfc2xvdCwgbXNnLCBtc2ctPmhkci5zaXplKTsKQEAgLTE2NDYsOCArMTY1NCw2IEBACiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB4cGNfbm90aWZ5X21xX21zZ2hkcl91dikpOwogCWlmIChyZXQgIT0geHBTdWNjZXNzKQogCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04oJnhwY19wYXJ0aXRpb25zW2NoLT5wYXJ0aWRdLCByZXQpOwotCi0JbXNnLT5oZHIubXNnX3Nsb3RfbnVtYmVyICs9IGNoLT5yZW1vdGVfbmVudHJpZXM7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHBjX2FyY2hfb3BlcmF0aW9ucyB4cGNfYXJjaF9vcHNfdXYgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGlfZGFjNzUxMi5jIGIvZHJpdmVycy9taXNjL3RpX2RhYzc1MTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2YyMjlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL3RpX2RhYzc1MTIuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqICBkYWM3NTEyLmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvcgorICogCVRleGFzIEluc3RydW1lbnRzIERBQzc1MTIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2RlZmluZSBEQUM3NTEyX0RSVl9OQU1FCSJkYWM3NTEyIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjEuMCIKKworc3RhdGljIHNzaXplX3QgZGFjNzUxMl9zdG9yZV92YWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIHRtcFsyXTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wWzBdID0gdmFsID4+IDg7CisJdG1wWzFdID0gdmFsICYgMHhmZjsKKwlzcGlfd3JpdGUoc3BpLCB0bXAsIHNpemVvZih0bXApKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VTUiwgTlVMTCwgZGFjNzUxMl9zdG9yZV92YWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFjNzUxMl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3ZhbHVlLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGFjNzUxMl9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGRhYzc1MTJfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhYzc1MTJfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0OworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKwlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3BpLT5kZXYua29iaiwgJmRhYzc1MTJfYXR0cl9ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhYzc1MTJfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzcGktPmRldi5rb2JqLCAmZGFjNzUxMl9hdHRyX2dyb3VwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGRhYzc1MTJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gREFDNzUxMl9EUlZfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBkYWM3NTEyX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChkYWM3NTEyX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYWM3NTEyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmZGFjNzUxMl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGFjNzUxMl9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZkYWM3NTEyX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRBQzc1MTIgMTYtYml0IERBQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOworCittb2R1bGVfaW5pdChkYWM3NTEyX2luaXQpOworbW9kdWxlX2V4aXQoZGFjNzUxMl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2NvcmUvS2NvbmZpZwppbmRleCBhYjM3YTZkLi5iYjIyZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvY29yZS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiBjb25maWcgTU1DX1VOU0FGRV9SRVNVTUUKLQlib29sICJBbGxvdyB1bnNhZmUgcmVzdW1lIChEQU5HRVJPVVMpIgorCWJvb2wgIkFzc3VtZSBNTUMvU0QgY2FyZHMgYXJlIG5vbi1yZW1vdmFibGUgKERBTkdFUk9VUykiCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBNTUMgbGF5ZXIgd2lsbCBhc3N1bWUgdGhhdCBhbGwgY2FyZHMKIAkgIHN0YXllZCBpbiB0aGVpciByZXNwZWN0aXZlIHNsb3RzIGR1cmluZyB0aGUgc3VzcGVuZC4gVGhlCkBAIC0xNCwzICsxNCw1IEBACiAJICBUaGlzIG9wdGlvbiBpcyB1c3VhbGx5IGp1c3QgZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2hpY2ggdXNlCiAJICBhIE1NQy9TRCBjYXJkIGZvciByb290ZnMuIE1vc3QgcGVvcGxlIHNob3VsZCBzYXkgTiBoZXJlLgogCisJICBUaGlzIG9wdGlvbiBzZXRzIGEgZGVmYXVsdCB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwkgIG1vZHVsZSBwYXJhbWV0ZXIgInJlbW92YWJsZT0wIiBvciAicmVtb3ZhYmxlPTEiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwppbmRleCA3ZGFiMmU1Li4zMGFjZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwpAQCAtNDgsNiArNDgsMjIgQEAKIG1vZHVsZV9wYXJhbSh1c2Vfc3BpX2NyYywgYm9vbCwgMCk7CiAKIC8qCisgKiBXZSBub3JtYWxseSB0cmVhdCBjYXJkcyBhcyByZW1vdmVkIGR1cmluZyBzdXNwZW5kIGlmIHRoZXkgYXJlIG5vdAorICoga25vd24gdG8gYmUgb24gYSBub24tcmVtb3ZhYmxlIGJ1cywgdG8gYXZvaWQgdGhlIHJpc2sgb2Ygd3JpdGluZworICogYmFjayBkYXRhIHRvIGEgZGlmZmVyZW50IGNhcmQgYWZ0ZXIgcmVzdW1lLiAgQWxsb3cgdGhpcyB0byBiZQorICogb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgKi8KKyNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKK2ludCBtbWNfYXNzdW1lX3JlbW92YWJsZTsKKyNlbHNlCitpbnQgbW1jX2Fzc3VtZV9yZW1vdmFibGUgPSAxOworI2VuZGlmCittb2R1bGVfcGFyYW1fbmFtZWQocmVtb3ZhYmxlLCBtbWNfYXNzdW1lX3JlbW92YWJsZSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKAorCXJlbW92YWJsZSwKKwkiTU1DL1NEIGNhcmRzIGFyZSByZW1vdmFibGUgYW5kIG1heSBiZSByZW1vdmVkIGR1cmluZyBzdXNwZW5kIik7CisKKy8qCiAgKiBJbnRlcm5hbCBmdW5jdGlvbi4gU2NoZWR1bGUgZGVsYXllZCB3b3JrIGluIHRoZSBNTUMgd29yayBxdWV1ZS4KICAqLwogc3RhdGljIGludCBtbWNfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCmluZGV4IDY3YWU2YWIuLmE4MTFjNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCkBAIC01NCw3ICs1NCw5IEBACiBpbnQgbW1jX2F0dGFjaF9zZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOwogaW50IG1tY19hdHRhY2hfc2RpbyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOwogCisvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCB1c2Vfc3BpX2NyYzsKK2V4dGVybiBpbnQgbW1jX2Fzc3VtZV9yZW1vdmFibGU7CiAKIC8qIERlYnVnZnMgaW5mb3JtYXRpb24gZm9yIGhvc3RzIGFuZCBjYXJkcyAqLwogdm9pZCBtbWNfYWRkX2hvc3RfZGVidWdmcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKaW5kZXggYmZlZmNlMy4uYzExMTg5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCkBAIC02MDIsMjUgKzYwMiw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19vcHMgPSB7Ci0JLmF3YWtlID0gbW1jX2F3YWtlLAotCS5zbGVlcCA9IG1tY19zbGVlcCwKLQkucmVtb3ZlID0gbW1jX3JlbW92ZSwKLQkuZGV0ZWN0ID0gbW1jX2RldGVjdCwKLQkuc3VzcGVuZCA9IG1tY19zdXNwZW5kLAotCS5yZXN1bWUgPSBtbWNfcmVzdW1lLAotCS5wb3dlcl9yZXN0b3JlID0gbW1jX3Bvd2VyX3Jlc3RvcmUsCi19OwotCi1zdGF0aWMgdm9pZCBtbWNfYXR0YWNoX2J1c19vcHMoc3RydWN0IG1tY19ob3N0ICpob3N0KQotewotCW1tY19hdHRhY2hfYnVzKGhvc3QsICZtbWNfb3BzKTsKLX0KLQotI2Vsc2UKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfb3BzID0gewogCS5hd2FrZSA9IG1tY19hd2FrZSwKIAkuc2xlZXAgPSBtbWNfc2xlZXAsCkBAIC02NDUsMTUgKzYyNiwxMyBAQAogewogCWNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyAqYnVzX29wczsKIAotCWlmIChob3N0LT5jYXBzICYgTU1DX0NBUF9OT05SRU1PVkFCTEUpCisJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8fCAhbW1jX2Fzc3VtZV9yZW1vdmFibGUpCiAJCWJ1c19vcHMgPSAmbW1jX29wc191bnNhZmU7CiAJZWxzZQogCQlidXNfb3BzID0gJm1tY19vcHM7CiAJbW1jX2F0dGFjaF9idXMoaG9zdCwgYnVzX29wcyk7CiB9CiAKLSNlbmRpZgotCiAvKgogICogU3RhcnRpbmcgcG9pbnQgZm9yIE1NQyBjYXJkIGluaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwppbmRleCAxMGIyYTRkLi5mZGQ0MTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCkBAIC02MDYsMjMgKzYwNiw2IEBACiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIH0KIAotI2lmZGVmIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19zZF9vcHMgPSB7Ci0JLnJlbW92ZSA9IG1tY19zZF9yZW1vdmUsCi0JLmRldGVjdCA9IG1tY19zZF9kZXRlY3QsCi0JLnN1c3BlbmQgPSBtbWNfc2Rfc3VzcGVuZCwKLQkucmVzdW1lID0gbW1jX3NkX3Jlc3VtZSwKLQkucG93ZXJfcmVzdG9yZSA9IG1tY19zZF9wb3dlcl9yZXN0b3JlLAotfTsKLQotc3RhdGljIHZvaWQgbW1jX3NkX2F0dGFjaF9idXNfb3BzKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKLXsKLQltbWNfYXR0YWNoX2J1cyhob3N0LCAmbW1jX3NkX29wcyk7Ci19Ci0KLSNlbHNlCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2J1c19vcHMgbW1jX3NkX29wcyA9IHsKIAkucmVtb3ZlID0gbW1jX3NkX3JlbW92ZSwKIAkuZGV0ZWN0ID0gbW1jX3NkX2RldGVjdCwKQEAgLTY0MywxNSArNjI2LDEzIEBACiB7CiAJY29uc3Qgc3RydWN0IG1tY19idXNfb3BzICpidXNfb3BzOwogCi0JaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX05PTlJFTU9WQUJMRSkKKwlpZiAoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfTk9OUkVNT1ZBQkxFIHx8ICFtbWNfYXNzdW1lX3JlbW92YWJsZSkKIAkJYnVzX29wcyA9ICZtbWNfc2Rfb3BzX3Vuc2FmZTsKIAllbHNlCiAJCWJ1c19vcHMgPSAmbW1jX3NkX29wczsKIAltbWNfYXR0YWNoX2J1cyhob3N0LCBidXNfb3BzKTsKIH0KIAotI2VuZGlmCi0KIC8qCiAgKiBTdGFydGluZyBwb2ludCBmb3IgU0QgY2FyZCBpbml0LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCmluZGV4IGNkYjg0NWIuLjA2YjY0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCkBAIC01MTYsNyArNTE2LDggQEAKIAkgKiBUaGUgbnVtYmVyIG9mIGZ1bmN0aW9ucyBvbiB0aGUgY2FyZCBpcyBlbmNvZGVkIGluc2lkZQogCSAqIHRoZSBvY3IuCiAJICovCi0JY2FyZC0+c2Rpb19mdW5jcyA9IGZ1bmNzID0gKG9jciAmIDB4NzAwMDAwMDApID4+IDI4OworCWZ1bmNzID0gKG9jciAmIDB4NzAwMDAwMDApID4+IDI4OworCWNhcmQtPnNkaW9fZnVuY3MgPSAwOwogCiAJLyoKIAkgKiBJZiBuZWVkZWQsIGRpc2Nvbm5lY3QgY2FyZCBkZXRlY3Rpb24gcHVsbC11cCByZXNpc3Rvci4KQEAgLTUyOCw3ICs1MjksNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSAoYnV0IGRvbid0IGFkZCkgYWxsIHByZXNlbnQgZnVuY3Rpb25zLgogCSAqLwotCWZvciAoaSA9IDA7aSA8IGZ1bmNzO2krKykgeworCWZvciAoaSA9IDA7IGkgPCBmdW5jczsgaSsrLCBjYXJkLT5zZGlvX2Z1bmNzKyspIHsKIAkJZXJyID0gc2Rpb19pbml0X2Z1bmMoaG9zdC0+Y2FyZCwgaSArIDEpOwogCQlpZiAoZXJyKQogCQkJZ290byByZW1vdmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKaW5kZXggZDM3NDY0ZS4uOWUwNjBjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwpAQCAtMjQ4LDEyICsyNDgsMTUgQEAKIC8qCiAgKiBVbnJlZ2lzdGVyIGEgU0RJTyBmdW5jdGlvbiB3aXRoIHRoZSBkcml2ZXIgbW9kZWwsIGFuZAogICogKGV2ZW50dWFsbHkpIGZyZWUgaXQuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdGhyb3VnaCBlcnJvciBwYXRocyB3aGVyZSBzZGlvX2FkZF9mdW5jKCkgd2FzCisgKiBuZXZlciBleGVjdXRlZCAoYmVjYXVzZSBhIGZhaWx1cmUgb2NjdXJyZWQgYXQgYW4gZWFybGllciBwb2ludCkuCiAgKi8KIHZvaWQgc2Rpb19yZW1vdmVfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQogewotCWlmIChzZGlvX2Z1bmNfcHJlc2VudChmdW5jKSkKLQkJZGV2aWNlX2RlbCgmZnVuYy0+ZGV2KTsKKwlpZiAoIXNkaW9fZnVuY19wcmVzZW50KGZ1bmMpKQorCQlyZXR1cm47CiAKKwlkZXZpY2VfZGVsKCZmdW5jLT5kZXYpOwogCXB1dF9kZXZpY2UoJmZ1bmMtPmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwppbmRleCBmODVkY2Q1Li45NTM4Mzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCkBAIC05NywyNiArOTcsNTYgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BlZWRfdW5pdFs4XSA9CiAJeyAxMDAwMCwgMTAwMDAwLCAxMDAwMDAwLCAxMDAwMDAwMCwgMCwgMCwgMCwgMCB9OwogCi0vKiBGVU5DRSB0dXBsZXMgd2l0aCB0aGVzZSB0eXBlcyBnZXQgcGFzc2VkIHRvIFNESU8gZHJpdmVycyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZnVuY2VfdHlwZV93aGl0ZWxpc3RbXSA9IHsKLQk0IC8qIENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCB1c2VkIGluIEJyb2FkY29tIGNhcmRzICovCisKK3R5cGVkZWYgaW50ICh0cGxfcGFyc2VfdCkoc3RydWN0IG1tY19jYXJkICosIHN0cnVjdCBzZGlvX2Z1bmMgKiwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQpOworCitzdHJ1Y3QgY2lzX3RwbCB7CisJdW5zaWduZWQgY2hhciBjb2RlOworCXVuc2lnbmVkIGNoYXIgbWluX3NpemU7CisJdHBsX3BhcnNlX3QgKnBhcnNlOwogfTsKIAotc3RhdGljIGludCBjaXN0cGxfZnVuY2Vfd2hpdGVsaXN0ZWQodW5zaWduZWQgY2hhciB0eXBlKQorc3RhdGljIGludCBjaXNfdHBsX3BhcnNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKKwkJCSBjb25zdCBjaGFyICp0cGxfZGVzY3IsCisJCQkgY29uc3Qgc3RydWN0IGNpc190cGwgKnRwbCwgaW50IHRwbF9jb3VudCwKKwkJCSB1bnNpZ25lZCBjaGFyIGNvZGUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaXplKQogewotCWludCBpOworCWludCBpLCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdW5jZV90eXBlX3doaXRlbGlzdCk7IGkrKykgewotCQlpZiAoZnVuY2VfdHlwZV93aGl0ZWxpc3RbaV0gPT0gdHlwZSkKLQkJCXJldHVybiAxOworCS8qIGxvb2sgZm9yIGEgbWF0Y2hpbmcgY29kZSBpbiB0aGUgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHBsX2NvdW50OyBpKyssIHRwbCsrKSB7CisJCWlmICh0cGwtPmNvZGUgPT0gY29kZSkKKwkJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoaSA8IHRwbF9jb3VudCkgeworCQlpZiAoc2l6ZSA+PSB0cGwtPm1pbl9zaXplKSB7CisJCQlpZiAodHBsLT5wYXJzZSkKKwkJCQlyZXQgPSB0cGwtPnBhcnNlKGNhcmQsIGZ1bmMsIGJ1Ziwgc2l6ZSk7CisJCQllbHNlCisJCQkJcmV0ID0gLUVJTFNFUTsJLyoga25vd24gdHVwbGUsIG5vdCBwYXJzZWQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIGludmFsaWQgdHVwbGUgKi8KKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKHJldCAmJiByZXQgIT0gLUVJTFNFUSAmJiByZXQgIT0gLUVOT0VOVCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkICVzIHR1cGxlIDB4JTAyeCAoJXUgYnl0ZXMpXG4iLAorCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgdHBsX2Rlc2NyLCBjb2RlLCBzaXplKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHVua25vd24gdHVwbGUgKi8KKwkJcmV0ID0gLUVOT0VOVDsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNpc3RwbF9mdW5jZV9jb21tb24oc3RydWN0IG1tY19jYXJkICpjYXJkLAorc3RhdGljIGludCBjaXN0cGxfZnVuY2VfY29tbW9uKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKIAkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNpemUpCiB7Ci0JaWYgKHNpemUgPCAweDA0IHx8IGJ1ZlswXSAhPSAwKQorCS8qIE9ubHkgdmFsaWQgZm9yIHRoZSBjb21tb24gQ0lTIChmdW5jdGlvbiAwKSAqLworCWlmIChmdW5jKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRQTEZFX0ZOMF9CTEtfU0laRSAqLwpAQCAtMTI5LDIwICsxNTksMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaXN0cGxfZnVuY2VfZnVuYyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLAorc3RhdGljIGludCBjaXN0cGxfZnVuY2VfZnVuYyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkKIHsKIAl1bnNpZ25lZCB2c247CiAJdW5zaWduZWQgbWluX3NpemU7CiAKLQkvKiBsZXQgU0RJTyBkcml2ZXJzIHRha2UgY2FyZSBvZiB3aGl0ZWxpc3RlZCBGVU5DRSB0dXBsZXMgKi8KLQlpZiAoY2lzdHBsX2Z1bmNlX3doaXRlbGlzdGVkKGJ1ZlswXSkpCi0JCXJldHVybiAtRUlMU0VROworCS8qIE9ubHkgdmFsaWQgZm9yIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uJ3MgQ0lTICgxLTcpICovCisJaWYgKCFmdW5jKQorCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogVGhpcyB0dXBsZSBoYXMgYSBkaWZmZXJlbnQgbGVuZ3RoIGRlcGVuZGluZyBvbiB0aGUgU0RJTyBzcGVjCisJICogdmVyc2lvbi4KKwkgKi8KIAl2c24gPSBmdW5jLT5jYXJkLT5jY2NyLnNkaW9fdnNuOwogCW1pbl9zaXplID0gKHZzbiA9PSBTRElPX1NESU9fUkVWXzFfMDApID8gMjggOiA0MjsKIAotCWlmIChzaXplIDwgbWluX3NpemUgfHwgYnVmWzBdICE9IDEpCisJaWYgKHNpemUgPCBtaW5fc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUUExGRV9NQVhfQkxLX1NJWkUgKi8KQEAgLTE1NywzOSArMTkxLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBLbm93biBUUExGRV9UWVBFcyB0YWJsZSBmb3IgQ0lTVFBMX0ZVTkNFIHR1cGxlcy4KKyAqCisgKiBOb3RlIHRoYXQsIHVubGlrZSBQQ01DSUEsIENJU1RQTF9GVU5DRSB0dXBsZXMgYXJlIG5vdCBwYXJzZWQgZGVwZW5kaW5nCisgKiBvbiB0aGUgVFBMRklEX0ZVTkNUSU9OIHZhbHVlIG9mIHRoZSBwcmV2aW91cyBDSVNUUExfRlVOQ0lEIGFzIG9uIFNESU8KKyAqIFRQTEZJRF9GVU5DVElPTiBpcyBhbHdheXMgaGFyZGNvZGVkIHRvIDB4MEMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2lzX3RwbCBjaXNfdHBsX2Z1bmNlX2xpc3RbXSA9IHsKKwl7CTB4MDAsCTQsCWNpc3RwbF9mdW5jZV9jb21tb24JCX0sCisJewkweDAxLAkwLAljaXN0cGxfZnVuY2VfZnVuYwkJfSwKKwl7CTB4MDQsCTErMSs2LAkvKiBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQgKi8JfSwKK307CisKIHN0YXRpYyBpbnQgY2lzdHBsX2Z1bmNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkKIHsKLQlpbnQgcmV0OworCWlmIChzaXplIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIFRoZXJlIHNob3VsZCBiZSB0d28gdmVyc2lvbnMgb2YgdGhlIENJU1RQTF9GVU5DRSB0dXBsZSwKLQkgKiBvbmUgZm9yIHRoZSBjb21tb24gQ0lTIChmdW5jdGlvbiAwKSBhbmQgYSB2ZXJzaW9uIHVzZWQgYnkKLQkgKiB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbidzIENJUyAoMS03KS4gWWV0LCB0aGUgbGF0ZXIgaGFzIGEKLQkgKiBkaWZmZXJlbnQgbGVuZ3RoIGRlcGVuZGluZyBvbiB0aGUgU0RJTyBzcGVjIHZlcnNpb24uCi0JICovCi0JaWYgKGZ1bmMpCi0JCXJldCA9IGNpc3RwbF9mdW5jZV9mdW5jKGZ1bmMsIGJ1Ziwgc2l6ZSk7Ci0JZWxzZQotCQlyZXQgPSBjaXN0cGxfZnVuY2VfY29tbW9uKGNhcmQsIGJ1Ziwgc2l6ZSk7Ci0KLQlpZiAocmV0ICYmIHJldCAhPSAtRUlMU0VRKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBDSVNUUExfRlVOQ0Ugc2l6ZSAldSAiCi0JCSAgICAgICAidHlwZSAldVxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLCBzaXplLCBidWZbMF0pOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGNpc190cGxfcGFyc2UoY2FyZCwgZnVuYywgIkNJU1RQTF9GVU5DRSIsCisJCQkgICAgIGNpc190cGxfZnVuY2VfbGlzdCwKKwkJCSAgICAgQVJSQVlfU0laRShjaXNfdHBsX2Z1bmNlX2xpc3QpLAorCQkJICAgICBidWZbMF0sIGJ1Ziwgc2l6ZSk7CiB9CiAKLXR5cGVkZWYgaW50ICh0cGxfcGFyc2VfdCkoc3RydWN0IG1tY19jYXJkICosIHN0cnVjdCBzZGlvX2Z1bmMgKiwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQpOwotCi1zdHJ1Y3QgY2lzX3RwbCB7Ci0JdW5zaWduZWQgY2hhciBjb2RlOwotCXVuc2lnbmVkIGNoYXIgbWluX3NpemU7Ci0JdHBsX3BhcnNlX3QgKnBhcnNlOwotfTsKLQorLyogS25vd24gVFBMX0NPREVzIHRhYmxlIGZvciBDSVMgdHVwbGVzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNpc190cGwgY2lzX3RwbF9saXN0W10gPSB7CiAJewkweDE1LAkzLAljaXN0cGxfdmVyc18xCQl9LAogCXsJMHgyMCwJNCwJY2lzdHBsX21hbmZpZAkJfSwKQEAgLTI2OCw0NiArMjk1LDM4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCk7IGkrKykKLQkJCWlmIChjaXNfdHBsX2xpc3RbaV0uY29kZSA9PSB0cGxfY29kZSkKLQkJCQlicmVhazsKLQkJaWYgKGkgPCBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCkpIHsKLQkJCWNvbnN0IHN0cnVjdCBjaXNfdHBsICp0cGwgPSBjaXNfdHBsX2xpc3QgKyBpOwotCQkJaWYgKHRwbF9saW5rIDwgdHBsLT5taW5fc2l6ZSkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IGJhZCBDSVMgdHVwbGUgMHglMDJ4IgotCQkJCSAgICAgICAiIChsZW5ndGggPSAldSwgZXhwZWN0ZWQgPj0gJXUpXG4iLAotCQkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCi0JCQkJICAgICAgIHRwbF9jb2RlLCB0cGxfbGluaywgdHBsLT5taW5fc2l6ZSk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCX0gZWxzZSBpZiAodHBsLT5wYXJzZSkgewotCQkJCXJldCA9IHRwbC0+cGFyc2UoY2FyZCwgZnVuYywKLQkJCQkJCSB0aGlzLT5kYXRhLCB0cGxfbGluayk7Ci0JCQl9CisJCS8qIFRyeSB0byBwYXJzZSB0aGUgQ0lTIHR1cGxlICovCisJCXJldCA9IGNpc190cGxfcGFyc2UoY2FyZCwgZnVuYywgIkNJUyIsCisJCQkJICAgIGNpc190cGxfbGlzdCwgQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpLAorCQkJCSAgICB0cGxfY29kZSwgdGhpcy0+ZGF0YSwgdHBsX2xpbmspOworCQlpZiAocmV0ID09IC1FSUxTRVEgfHwgcmV0ID09IC1FTk9FTlQpIHsKIAkJCS8qCi0JCQkgKiBXZSBkb24ndCBuZWVkIHRoZSB0dXBsZSBhbnltb3JlIGlmIGl0IHdhcwotCQkJICogc3VjY2Vzc2Z1bGx5IHBhcnNlZCBieSB0aGUgU0RJTyBjb3JlIG9yIGlmIGl0IGlzCi0JCQkgKiBub3QgZ29pbmcgdG8gYmUgcGFyc2VkIGJ5IFNESU8gZHJpdmVycy4KKwkJCSAqIFRoZSB0dXBsZSBpcyB1bmtub3duIG9yIGtub3duIGJ1dCBub3QgcGFyc2VkLgorCQkJICogUXVldWUgdGhlIHR1cGxlIGZvciB0aGUgZnVuY3Rpb24gZHJpdmVyLgogCQkJICovCi0JCQlpZiAoIXJldCB8fCByZXQgIT0gLUVJTFNFUSkKLQkJCQlrZnJlZSh0aGlzKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHVua25vd24gdHVwbGUgKi8KLQkJCXJldCA9IC1FSUxTRVE7Ci0JCX0KLQotCQlpZiAocmV0ID09IC1FSUxTRVEpIHsKLQkJCS8qIHRoaXMgdHVwbGUgaXMgdW5rbm93biB0byB0aGUgY29yZSBvciB3aGl0ZWxpc3RlZCAqLwogCQkJdGhpcy0+bmV4dCA9IE5VTEw7CiAJCQl0aGlzLT5jb2RlID0gdHBsX2NvZGU7CiAJCQl0aGlzLT5zaXplID0gdHBsX2xpbms7CiAJCQkqcHJldiA9IHRoaXM7CiAJCQlwcmV2ID0gJnRoaXMtPm5leHQ7Ci0JCQlwcmludGsoS0VSTl9ERUJVRwotCQkJICAgICAgICIlczogcXVldWluZyBDSVMgdHVwbGUgMHglMDJ4IGxlbmd0aCAldVxuIiwKLQkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIHRwbF9jb2RlLCB0cGxfbGluayk7CisKKwkJCWlmIChyZXQgPT0gLUVOT0VOVCkgeworCQkJCS8qIHdhcm4gYWJvdXQgdW5rbm93biB0dXBsZXMgKi8KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcXVldWluZyB1bmtub3duIgorCQkJCSAgICAgICAiIENJUyB0dXBsZSAweCUwMnggKCV1IGJ5dGVzKVxuIiwKKwkJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAorCQkJCSAgICAgICB0cGxfY29kZSwgdHBsX2xpbmspOworCQkJfQorCiAJCQkvKiBrZWVwIG9uIGFuYWx5emluZyB0dXBsZXMgKi8KIAkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgZG9uJ3QgbmVlZCB0aGUgdHVwbGUgYW55bW9yZSBpZiBpdCB3YXMKKwkJCSAqIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYnkgdGhlIFNESU8gY29yZSBvciBpZiBpdCBpcworCQkJICogbm90IGdvaW5nIHRvIGJlIHF1ZXVlZCBmb3IgYSBkcml2ZXIuCisJCQkgKi8KKwkJCWtmcmVlKHRoaXMpOwogCQl9CiAKIAkJcHRyICs9IHRwbF9saW5rOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IGUwNGI3NTEuLmNlMWQyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTQ0LDYgKzQ0LDE5IEBACiAJICBUaGlzIGlzIHNpbGVudCBLY29uZmlnIHN5bWJvbCB0aGF0IGlzIHNlbGVjdGVkIGJ5IHRoZSBkcml2ZXJzIHRoYXQKIAkgIG5lZWQgdG8gb3ZlcndyaXRlIFNESENJIElPIG1lbW9yeSBhY2Nlc3NvcnMuCiAKK2NvbmZpZyBNTUNfU0RIQ0lfQklHX0VORElBTl8zMkJJVF9CWVRFX1NXQVBQRVIKKwlib29sCisJc2VsZWN0IE1NQ19TREhDSV9JT19BQ0NFU1NPUlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBkcml2ZXJzIHJ1bm5pbmcgb24gYmlnIGVuZGlhbiBob3N0cworCSAgYW5kIHBlcmZvcm1pbmcgSS9PIHRvIGEgU0RIQ0kgY29udHJvbGxlciB0aHJvdWdoIGEgYnVzIHRoYXQKKwkgIGltcGxlbWVudHMgYSBoYXJkd2FyZSBieXRlIHN3YXBwZXIgdXNpbmcgYSAzMi1iaXQgZGF0dW0uCisJICBUaGlzIGVuZGlhbiBtYXBwaW5nIG1vZGUgaXMgY2FsbGVkICJkYXRhIGludmFyaWFuY2UiIGFuZAorCSAgaGFzIHRoZSBlZmZlY3Qgb2Ygc2NyYW1ibGluZyB0aGUgYWRkcmVzc2VzIGFuZCBmb3JtYXRzIG9mIGRhdGEKKwkgIGFjY2Vzc2VkIGluIHNpemVzIG90aGVyIHRoYW4gdGhlIGRhdHVtIHNpemUuCisKKwkgIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHRoZSBGcmVlc2NhbGUgZVNESEMgYW5kIE5pbnRlbmRvIFdpaSBTREhDSS4KKwogY29uZmlnIE1NQ19TREhDSV9QQ0kKIAl0cmlzdGF0ZSAiU0RIQ0kgc3VwcG9ydCBvbiBQQ0kgYnVzIgogCWRlcGVuZHMgb24gTU1DX1NESENJICYmIFBDSQpAQCAtNzUsMTEgKzg4LDI5IEBACiBjb25maWcgTU1DX1NESENJX09GCiAJdHJpc3RhdGUgIlNESENJIHN1cHBvcnQgb24gT3BlbkZpcm13YXJlIHBsYXRmb3JtcyIKIAlkZXBlbmRzIG9uIE1NQ19TREhDSSAmJiBQUENfT0YKLQlzZWxlY3QgTU1DX1NESENJX0lPX0FDQ0VTU09SUwogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgT0Ygc3VwcG9ydCBmb3IgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyCi0JICBJbnRlcmZhY2VzLiBTbyBmYXIsIG9ubHkgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyIGlzIGtub3duCi0JICB0byBleGlzdCBvbiBPRiBwbGF0Zm9ybXMuCisJICBJbnRlcmZhY2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTU1DX1NESENJX09GX0VTREhDCisJYm9vbCAiU0RIQ0kgT0Ygc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gTU1DX1NESENJX09GCisJc2VsZWN0IE1NQ19TREhDSV9CSUdfRU5ESUFOXzMyQklUX0JZVEVfU1dBUFBFUgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgRnJlZXNjYWxlIGVTREhDIGNvbnRyb2xsZXIgc3VwcG9ydC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE1NQ19TREhDSV9PRl9ITFdECisJYm9vbCAiU0RIQ0kgT0Ygc3VwcG9ydCBmb3IgdGhlIE5pbnRlbmRvIFdpaSBTREhDSSBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIE1NQ19TREhDSV9PRgorCXNlbGVjdCBNTUNfU0RIQ0lfQklHX0VORElBTl8zMkJJVF9CWVRFX1NXQVBQRVIKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKFNESENJKQorCSAgZm91bmQgaW4gdGhlICJIb2xseXdvb2QiIGNoaXBzZXQgb2YgdGhlIE5pbnRlbmRvIFdpaSB2aWRlbyBnYW1lCisJICBjb25zb2xlLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0yNTEsNiArMjgyLDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtdnNkaW8uCiAKK2NvbmZpZyBNTUNfREFWSU5DSQorICAgICAgICB0cmlzdGF0ZSAiVEkgREFWSU5DSSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gQVJDSF9EQVZJTkNJCisgICAgICAgIGhlbHAKKyAgICAgICAgICBUaGlzIHNlbGVjdHMgdGhlIFRJIERBVklOQ0kgTXVsdGltZWRpYSBjYXJkIEludGVyZmFjZS4KKyAgICAgICAgICBJZiB5b3UgaGF2ZSBhbiBEQVZJTkNJIGJvYXJkIHdpdGggYSBNdWx0aW1lZGlhIENhcmQgc2xvdCwKKyAgICAgICAgICBzYXkgWSBvciBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX1NQSQogCXRyaXN0YXRlICJNTUMvU0QvU0RJTyBvdmVyIFNQSSIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgIUhJR0hNRU0gJiYgSEFTX0RNQQpAQCAtMzU3LDMgKzM5NiwyMiBAQAogCSAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFNESF9CRklOCisJdHJpc3RhdGUgIkJsYWNrZmluIFNlY3VyZSBEaWdpdGFsIEhvc3Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1NQyAmJiAoKEJGNTR4ICYmICFCRjU0NCkgfHwgKEJGNTF4ICYmICFCRjUxMikpCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIEJsYWNrZmluIG9uLWNoaXAKKwkgIFNlY3VyZSBEaWdpdGFsIEhvc3QgaW50ZXJmYWNlLiAgVGhpcyBpbmNsdWRlcyBzdXBwb3J0IGZvciBNTUMgYW5kCisJICBTRCBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmZpbl9zZGguCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBTREhfQkZJTl9NSVNTSU5HX0NNRF9QVUxMVVBfV09SS0FST1VORAorCWJvb2wgIkJsYWNrZmluIEVaa2l0IE1pc3NpbmcgU0RIX0NNRCBQdWxsIFVwIFJlc2lzdG9yIFdvcmthcm91bmQiCisJZGVwZW5kcyBvbiBTREhfQkZJTgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgU0QtQ2FyZHMgbWF5IHdvcmsgb24gdGhlIEVaa2l0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKaW5kZXggYWJjYjA0MC4uM2QyNTNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCkBAIC0xMyw3ICsxMyw2IEBACiBvYmotJChDT05GSUdfTU1DX1NESENJKQkJKz0gc2RoY2kubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9QQ0kpCSs9IHNkaGNpLXBjaS5vCiBvYmotJChDT05GSUdfTU1DX1JJQ09IX01NQykJKz0gcmljb2hfbW1jLm8KLW9iai0kKENPTkZJR19NTUNfU0RIQ0lfT0YpCSs9IHNkaGNpLW9mLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUExURk0pCSs9IHNkaGNpLXBsdGZtLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUzNDKQkrPSBzZGhjaS1zM2Mubwogb2JqLSQoQ09ORklHX01NQ19XQlNEKQkJKz0gd2JzZC5vCkBAIC0yNSw2ICsyNCw3IEBACiBvYmotJChDT05GSUdfTU1DX1RJRk1fU0QpCSs9IHRpZm1fc2Qubwogb2JqLSQoQ09ORklHX01NQ19NU003WDAwQSkJKz0gbXNtX3NkY2Mubwogb2JqLSQoQ09ORklHX01NQ19NVlNESU8pCSs9IG12c2Rpby5vCitvYmotJChDT05GSUdfTU1DX0RBVklOQ0kpICAgICAgICs9IGRhdmluY2lfbW1jLm8KIG9iai0kKENPTkZJR19NTUNfU1BJKQkJKz0gbW1jX3NwaS5vCiBpZmVxICgkKENPTkZJR19PRikseSkKIG9iai0kKENPTkZJR19NTUNfU1BJKQkJKz0gb2ZfbW1jX3NwaS5vCkBAIC0zNCw2ICszNCwxMiBAQAogb2JqLSQoQ09ORklHX01NQ19UTUlPKQkJKz0gdG1pb19tbWMubwogb2JqLSQoQ09ORklHX01NQ19DQjcxMCkJKz0gY2I3MTAtbW1jLm8KIG9iai0kKENPTkZJR19NTUNfVklBX1NETU1DKQkrPSB2aWEtc2RtbWMubworb2JqLSQoQ09ORklHX1NESF9CRklOKQkJKz0gYmZpbl9zZGgubworCitvYmotJChDT05GSUdfTU1DX1NESENJX09GKQkrPSBzZGhjaS1vZi5vCitzZGhjaS1vZi15CQkJCTo9IHNkaGNpLW9mLWNvcmUubworc2RoY2ktb2YtJChDT05GSUdfTU1DX1NESENJX09GX0VTREhDKQkrPSBzZGhjaS1vZi1lc2RoYy5vCitzZGhjaS1vZi0kKENPTkZJR19NTUNfU0RIQ0lfT0ZfSExXRCkJKz0gc2RoY2ktb2YtaGx3ZC5vCiAKIGlmZXEgKCQoQ09ORklHX0NCNzEwX0RFQlVHKSx5KQogCUNGTEFHUy1jYjcxMC1tbWMJKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKaW5kZXggZmMyNTU4Ni4uODA3MjEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKworI2luY2x1ZGUgPG1hY2gvYXRtZWwtbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTkyLDYgKzk0LDcgQEAKICAqIEBuZWVkX2Nsb2NrX3VwZGF0ZTogVXBkYXRlIHRoZSBjbG9jayByYXRlIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0LgogICogQG5lZWRfcmVzZXQ6IFJlc2V0IGNvbnRyb2xsZXIgYmVmb3JlIG5leHQgcmVxdWVzdC4KICAqIEBtb2RlX3JlZzogVmFsdWUgb2YgdGhlIE1SIHJlZ2lzdGVyLgorICogQGNmZ19yZWc6IFZhbHVlIG9mIHRoZSBDRkcgcmVnaXN0ZXIuCiAgKiBAYnVzX2h6OiBUaGUgcmF0ZSBvZiBAbWNrIGluIEh6LiBUaGlzIGZvcm1zIHRoZSBiYXNpcyBmb3IgTU1DIGJ1cwogICoJcmF0ZSBhbmQgdGltZW91dCBjYWxjdWxhdGlvbnMuCiAgKiBAbWFwYmFzZTogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgTU1JTyByZWdpc3RlcnMuCkBAIC0xNTUsNiArMTU4LDcgQEAKIAlib29sCQkJbmVlZF9jbG9ja191cGRhdGU7CiAJYm9vbAkJCW5lZWRfcmVzZXQ7CiAJdTMyCQkJbW9kZV9yZWc7CisJdTMyCQkJY2ZnX3JlZzsKIAl1bnNpZ25lZCBsb25nCQlidXNfaHo7CiAJdW5zaWduZWQgbG9uZwkJbWFwYmFzZTsKIAlzdHJ1Y3QgY2xrCQkqbWNrOwpAQCAtMjIzLDYgKzIyNywxOSBAQAogfQogCiAvKgorICogVGhlIG5ldyBNQ0kyIG1vZHVsZSBpc24ndCAxMDAlIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIE1DSSBtb2R1bGUsCisgKiBhbmQgaXQgaGFzIGEgZmV3IG5pY2UgZmVhdHVyZXMgd2hpY2ggd2Ugd2FudCB0byB1c2UuLi4KKyAqLworc3RhdGljIGlubGluZSBib29sIGF0bWNpX2lzX21jaTIodm9pZCkKK3sKKwlpZiAoY3B1X2lzX2F0OTFzYW05ZzQ1KCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisKKy8qCiAgKiBUaGUgZGVidWdmcyBzdHVmZiBiZWxvdyBpcyBtb3N0bHkgb3B0aW1pemVkIGF3YXkgd2hlbgogICogQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQuCiAgKi8KQEAgLTM1NywxMiArMzc0LDMzIEBACiAJCQlidWZbTUNJX0JMS1IgLyA0XSwKIAkJCWJ1ZltNQ0lfQkxLUiAvIDRdICYgMHhmZmZmLAogCQkJKGJ1ZltNQ0lfQkxLUiAvIDRdID4+IDE2KSAmIDB4ZmZmZik7CisJaWYgKGF0bWNpX2lzX21jaTIoKSkKKwkJc2VxX3ByaW50ZihzLCAiQ1NUT1I6XHQweCUwOHhcbiIsIGJ1ZltNQ0lfQ1NUT1IgLyA0XSk7CiAKIAkvKiBEb24ndCByZWFkIFJTUFIgYW5kIFJEUjsgaXQgd2lsbCBjb25zdW1lIHRoZSBkYXRhIHRoZXJlICovCiAKIAlhdG1jaV9zaG93X3N0YXR1c19yZWcocywgIlNSIiwgYnVmW01DSV9TUiAvIDRdKTsKIAlhdG1jaV9zaG93X3N0YXR1c19yZWcocywgIklNUiIsIGJ1ZltNQ0lfSU1SIC8gNF0pOwogCisJaWYgKGF0bWNpX2lzX21jaTIoKSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9IGJ1ZltNQ0lfRE1BIC8gNF07CisJCXNlcV9wcmludGYocywgIkRNQTpcdDB4JTA4eCBPRkZTRVQ9JXUgQ0hLU0laRT0ldSVzXG4iLAorCQkJCXZhbCwgdmFsICYgMywKKwkJCQkoKHZhbCA+PiA0KSAmIDMpID8KKwkJCQkJMSA8PCAoKCh2YWwgPj4gNCkgJiAzKSArIDEpIDogMSwKKwkJCQl2YWwgJiBNQ0lfRE1BRU4gPyAiIERNQUVOIiA6ICIiKTsKKworCQl2YWwgPSBidWZbTUNJX0NGRyAvIDRdOworCQlzZXFfcHJpbnRmKHMsICJDRkc6XHQweCUwOHglcyVzJXMlc1xuIiwKKwkJCQl2YWwsCisJCQkJdmFsICYgTUNJX0NGR19GSUZPTU9ERV8xREFUQSA/ICIgRklGT01PREVfT05FX0RBVEEiIDogIiIsCisJCQkJdmFsICYgTUNJX0NGR19GRVJSQ1RSTF9DT1IgPyAiIEZFUlJDVFJMX0NMRUFSX09OX1JFQUQiIDogIiIsCisJCQkJdmFsICYgTUNJX0NGR19IU01PREUgPyAiIEhTTU9ERSIgOiAiIiwKKwkJCQl2YWwgJiBNQ0lfQ0ZHX0xTWU5DID8gIiBMU1lOQyIgOiAiIik7CisJfQorCiAJa2ZyZWUoYnVmKTsKIAogCXJldHVybiAwOwpAQCAtNTU3LDYgKzU5NSwxMCBAQAogCiAJZGV2X3ZkYmcoJmhvc3QtPnBkZXYtPmRldiwgIkRNQSBjb21wbGV0ZVxuIik7CiAKKwlpZiAoYXRtY2lfaXNfbWNpMigpKQorCQkvKiBEaXNhYmxlIERNQSBoYXJkd2FyZSBoYW5kc2hha2luZyBvbiBNQ0kgKi8KKwkJbWNpX3dyaXRlbChob3N0LCBETUEsIG1jaV9yZWFkbChob3N0LCBETUEpICYgfk1DSV9ETUFFTik7CisKIAlhdG1jaV9kbWFfY2xlYW51cChob3N0KTsKIAogCS8qCkBAIC01OTIsNyArNjM0LDcgQEAKIH0KIAogc3RhdGljIGludAotYXRtY2lfc3VibWl0X2RhdGFfZG1hKHN0cnVjdCBhdG1lbF9tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK2F0bWNpX3ByZXBhcmVfZGF0YV9kbWEoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqZGVzYzsKQEAgLTYyNCw2ICs2NjYsOSBAQAogCWlmICghY2hhbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoYXRtY2lfaXNfbWNpMigpKQorCQltY2lfd3JpdGVsKGhvc3QsIERNQSwgTUNJX0RNQV9DSEtTSVpFKDMpIHwgTUNJX0RNQUVOKTsKKwogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCiAJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAllbHNlCkBAIC02NDEsMTAgKzY4Niw2IEBACiAJaG9zdC0+ZG1hLmRhdGFfZGVzYyA9IGRlc2M7CiAJZGVzYy0+Y2FsbGJhY2sgPSBhdG1jaV9kbWFfY29tcGxldGU7CiAJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBob3N0OwotCWRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKLQotCS8qIEdvISAqLwotCWNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7CiAKIAlyZXR1cm4gMDsKIHVubWFwX2V4aXQ6CkBAIC02NTIsMTMgKzY5MywyNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCitzdGF0aWMgdm9pZCBhdG1jaV9zdWJtaXRfZGF0YShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQoreworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuID0gaG9zdC0+ZGF0YV9jaGFuOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqZGVzYyA9IGhvc3QtPmRtYS5kYXRhX2Rlc2M7CisKKwlpZiAoY2hhbikgeworCQlkZXNjLT50eF9zdWJtaXQoZGVzYyk7CisJCWNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7CisJfQorfQorCiAjZWxzZSAvKiBDT05GSUdfTU1DX0FUTUVMTUNJX0RNQSAqLwogCi1zdGF0aWMgaW50IGF0bWNpX3N1Ym1pdF9kYXRhX2RtYShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCitzdGF0aWMgaW50IGF0bWNpX3ByZXBhcmVfZGF0YV9kbWEoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCitzdGF0aWMgdm9pZCBhdG1jaV9zdWJtaXRfZGF0YShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KSB7fQorCiBzdGF0aWMgdm9pZCBhdG1jaV9zdG9wX2RtYShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KQogewogCS8qIERhdGEgdHJhbnNmZXIgd2FzIHN0b3BwZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyICovCkBAIC02NzIsNyArNzI2LDcgQEAKICAqIFJldHVybnMgYSBtYXNrIG9mIGludGVycnVwdCBmbGFncyB0byBiZSBlbmFibGVkIGFmdGVyIHRoZSB3aG9sZQogICogcmVxdWVzdCBoYXMgYmVlbiBwcmVwYXJlZC4KICAqLwotc3RhdGljIHUzMiBhdG1jaV9zdWJtaXRfZGF0YShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCitzdGF0aWMgdTMyIGF0bWNpX3ByZXBhcmVfZGF0YShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdTMyIGlmbGFnczsKIApAQCAtNjgzLDcgKzczNyw3IEBACiAJaG9zdC0+ZGF0YSA9IGRhdGE7CiAKIAlpZmxhZ3MgPSBBVE1DSV9EQVRBX0VSUk9SX0ZMQUdTOwotCWlmIChhdG1jaV9zdWJtaXRfZGF0YV9kbWEoaG9zdCwgZGF0YSkpIHsKKwlpZiAoYXRtY2lfcHJlcGFyZV9kYXRhX2RtYShob3N0LCBkYXRhKSkgewogCQlob3N0LT5kYXRhX2NoYW4gPSBOVUxMOwogCiAJCS8qCkBAIC03MjksNiArNzgzLDggQEAKIAkJbWNpX3dyaXRlbChob3N0LCBDUiwgTUNJX0NSX1NXUlNUKTsKIAkJbWNpX3dyaXRlbChob3N0LCBDUiwgTUNJX0NSX01DSUVOKTsKIAkJbWNpX3dyaXRlbChob3N0LCBNUiwgaG9zdC0+bW9kZV9yZWcpOworCQlpZiAoYXRtY2lfaXNfbWNpMigpKQorCQkJbWNpX3dyaXRlbChob3N0LCBDRkcsIGhvc3QtPmNmZ19yZWcpOwogCQlob3N0LT5uZWVkX3Jlc2V0ID0gZmFsc2U7CiAJfQogCW1jaV93cml0ZWwoaG9zdCwgU0RDUiwgc2xvdC0+c2RjX3JlZyk7CkBAIC03NDQsNiArODAwLDcgQEAKIAkJd2hpbGUgKCEobWNpX3JlYWRsKGhvc3QsIFNSKSAmIE1DSV9DTURSRFkpKQogCQkJY3B1X3JlbGF4KCk7CiAJfQorCWlmbGFncyA9IDA7CiAJZGF0YSA9IG1ycS0+ZGF0YTsKIAlpZiAoZGF0YSkgewogCQlhdG1jaV9zZXRfdGltZW91dChob3N0LCBzbG90LCBkYXRhKTsKQEAgLTc1MywxNSArODEwLDE3IEBACiAJCQkJfCBNQ0lfQkxLTEVOKGRhdGEtPmJsa3N6KSk7CiAJCWRldl92ZGJnKCZzbG90LT5tbWMtPmNsYXNzX2RldiwgIkJMS1I9MHglMDh4XG4iLAogCQkJTUNJX0JDTlQoZGF0YS0+YmxvY2tzKSB8IE1DSV9CTEtMRU4oZGF0YS0+Ymxrc3opKTsKKworCQlpZmxhZ3MgfD0gYXRtY2lfcHJlcGFyZV9kYXRhKGhvc3QsIGRhdGEpOwogCX0KIAotCWlmbGFncyA9IE1DSV9DTURSRFk7CisJaWZsYWdzIHw9IE1DSV9DTURSRFk7CiAJY21kID0gbXJxLT5jbWQ7CiAJY21kZmxhZ3MgPSBhdG1jaV9wcmVwYXJlX2NvbW1hbmQoc2xvdC0+bW1jLCBjbWQpOwogCWF0bWNpX3N0YXJ0X2NvbW1hbmQoaG9zdCwgY21kLCBjbWRmbGFncyk7CiAKIAlpZiAoZGF0YSkKLQkJaWZsYWdzIHw9IGF0bWNpX3N1Ym1pdF9kYXRhKGhvc3QsIGRhdGEpOworCQlhdG1jaV9zdWJtaXRfZGF0YShob3N0KTsKIAogCWlmIChtcnEtPnN0b3ApIHsKIAkJaG9zdC0+c3RvcF9jbWRyID0gYXRtY2lfcHJlcGFyZV9jb21tYW5kKHNsb3QtPm1tYywgbXJxLT5zdG9wKTsKQEAgLTg1Nyw2ICs5MTYsOCBAQAogCQkJY2xrX2VuYWJsZShob3N0LT5tY2spOwogCQkJbWNpX3dyaXRlbChob3N0LCBDUiwgTUNJX0NSX1NXUlNUKTsKIAkJCW1jaV93cml0ZWwoaG9zdCwgQ1IsIE1DSV9DUl9NQ0lFTik7CisJCQlpZiAoYXRtY2lfaXNfbWNpMigpKQorCQkJCW1jaV93cml0ZWwoaG9zdCwgQ0ZHLCBob3N0LT5jZmdfcmVnKTsKIAkJfQogCiAJCS8qCkBAIC0xMDk1LDYgKzExNTYsOCBAQAogCQkJCW1jaV93cml0ZWwoaG9zdCwgQ1IsIE1DSV9DUl9TV1JTVCk7CiAJCQkJbWNpX3dyaXRlbChob3N0LCBDUiwgTUNJX0NSX01DSUVOKTsKIAkJCQltY2lfd3JpdGVsKGhvc3QsIE1SLCBob3N0LT5tb2RlX3JlZyk7CisJCQkJaWYgKGF0bWNpX2lzX21jaTIoKSkKKwkJCQkJbWNpX3dyaXRlbChob3N0LCBDRkcsIGhvc3QtPmNmZ19yZWcpOwogCiAJCQkJaG9zdC0+ZGF0YSA9IE5VTEw7CiAJCQkJaG9zdC0+Y21kID0gTlVMTDsKQEAgLTE1ODQsMTQgKzE2NDcsNDcgQEAKICNpZmRlZiBDT05GSUdfTU1DX0FUTUVMTUNJX0RNQQogc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCiB7Ci0Jc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gc2xhdmU7CisJc3RydWN0IG1jaV9kbWFfZGF0YQkqc2wgPSBzbGF2ZTsKIAotCWlmIChkd3MtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKLQkJY2hhbi0+cHJpdmF0ZSA9IGR3czsKKwlpZiAoc2wgJiYgZmluZF9zbGF2ZV9kZXYoc2wpID09IGNoYW4tPmRldmljZS0+ZGV2KSB7CisJCWNoYW4tPnByaXZhdGUgPSBzbGF2ZV9kYXRhX3B0cihzbCk7CiAJCXJldHVybiB0cnVlOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXJldHVybiBmYWxzZTsKKwl9CiB9CisKK3N0YXRpYyB2b2lkIGF0bWNpX2NvbmZpZ3VyZV9kbWEoc3RydWN0IGF0bWVsX21jaSAqaG9zdCkKK3sKKwlzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEJKnBkYXRhOworCisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcGRhdGEgPSBob3N0LT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YSAmJiBmaW5kX3NsYXZlX2RldihwZGF0YS0+ZG1hX3NsYXZlKSkgeworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCXNldHVwX2RtYV9hZGRyKHBkYXRhLT5kbWFfc2xhdmUsCisJCQkgICAgICAgaG9zdC0+bWFwYmFzZSArIE1DSV9URFIsCisJCQkgICAgICAgaG9zdC0+bWFwYmFzZSArIE1DSV9SRFIpOworCisJCS8qIFRyeSB0byBncmFiIGEgRE1BIGNoYW5uZWwgKi8KKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCQlob3N0LT5kbWEuY2hhbiA9CisJCQlkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgcGRhdGEtPmRtYV9zbGF2ZSk7CisJfQorCWlmICghaG9zdC0+ZG1hLmNoYW4pCisJCWRldl9ub3RpY2UoJmhvc3QtPnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlLCB1c2luZyBQSU9cbiIpOworCWVsc2UKKwkJZGV2X2luZm8oJmhvc3QtPnBkZXYtPmRldiwKKwkJCQkJIlVzaW5nICVzIGZvciBETUEgdHJhbnNmZXJzXG4iLAorCQkJCQlkbWFfY2hhbl9uYW1lKGhvc3QtPmRtYS5jaGFuKSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgYXRtY2lfY29uZmlndXJlX2RtYShzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KSB7fQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xNjQ1LDIyICsxNzQxLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKIAotI2lmZGVmIENPTkZJR19NTUNfQVRNRUxNQ0lfRE1BCi0JaWYgKHBkYXRhLT5kbWFfc2xhdmUuZG1hX2RldikgewotCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPmRtYV9zbGF2ZTsKLQkJZG1hX2NhcF9tYXNrX3QgbWFzazsKLQotCQlkd3MtPnR4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgTUNJX1REUjsKLQkJZHdzLT5yeF9yZWcgPSByZWdzLT5zdGFydCArIE1DSV9SRFI7Ci0KLQkJLyogVHJ5IHRvIGdyYWIgYSBETUEgY2hhbm5lbCAqLwotCQlkbWFfY2FwX3plcm8obWFzayk7Ci0JCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7Ci0JCWhvc3QtPmRtYS5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7Ci0JfQotCWlmICghaG9zdC0+ZG1hLmNoYW4pCi0JCWRldl9ub3RpY2UoJnBkZXYtPmRldiwgIkRNQSBub3QgYXZhaWxhYmxlLCB1c2luZyBQSU9cbiIpOwotI2VuZGlmIC8qIENPTkZJR19NTUNfQVRNRUxNQ0lfRE1BICovCisJYXRtY2lfY29uZmlndXJlX2RtYShob3N0KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0M2E1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYwpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIGJmaW5fc2RoLmMgLSBBbmFsb2cgRGV2aWNlcyBCbGFja2ZpbiBTREggQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2UgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjZGVmaW5lIERSSVZFUl9OQU1FCSJiZmluLXNkaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorI2luY2x1ZGUgPGFzbS9iZmluX3NkaC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQkY1MXgpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUFdSX0NUTAkJYmZpbl9yZWFkX1JTSV9QV1JfQ1RMCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BXUl9DVEwJCWJmaW5fd3JpdGVfUlNJX1BXUl9DVEwKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9DTEtfQ1RMCQliZmluX3JlYWRfUlNJX0NMS19DVEwKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ0xLX0NUTAkJYmZpbl93cml0ZV9SU0lfQ0xLX0NUTAorI2RlZmluZSBiZmluX3dyaXRlX1NESF9BUkdVTUVOVAkJYmZpbl93cml0ZV9SU0lfQVJHVU1FTlQKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ09NTUFORAkJYmZpbl93cml0ZV9SU0lfQ09NTUFORAorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX1RJTUVSCWJmaW5fd3JpdGVfUlNJX0RBVEFfVElNRVIKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTAJCWJmaW5fcmVhZF9SU0lfUkVTUE9OU0UwCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UxCQliZmluX3JlYWRfUlNJX1JFU1BPTlNFMQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMgkJYmZpbl9yZWFkX1JTSV9SRVNQT05TRTIKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTMJCWJmaW5fcmVhZF9SU0lfUkVTUE9OU0UzCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfTEdUSAliZmluX3dyaXRlX1JTSV9EQVRBX0xHVEgKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX0NUTAkJYmZpbl9yZWFkX1JTSV9EQVRBX0NUTAorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX0NUTAkJYmZpbl93cml0ZV9SU0lfREFUQV9DVEwKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX0NOVAkJYmZpbl9yZWFkX1JTSV9EQVRBX0NOVAorI2RlZmluZSBiZmluX3dyaXRlX1NESF9TVEFUVVNfQ0xSCWJmaW5fd3JpdGVfUlNJX1NUQVRVU19DTFIKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9FX1NUQVRVUwkJYmZpbl9yZWFkX1JTSV9FX1NUQVRVUworI2RlZmluZSBiZmluX3dyaXRlX1NESF9FX1NUQVRVUwkJYmZpbl93cml0ZV9SU0lfRV9TVEFUVVMKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVMJCWJmaW5fcmVhZF9SU0lfU1RBVFVTCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX01BU0swCQliZmluX3dyaXRlX1JTSV9NQVNLMAorI2RlZmluZSBiZmluX3JlYWRfU0RIX0NGRwkJYmZpbl9yZWFkX1JTSV9DRkcKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ0ZHCQliZmluX3dyaXRlX1JTSV9DRkcKKyNlbmRpZgorCitzdHJ1Y3QgZG1hX2Rlc2NfYXJyYXkgeworCXVuc2lnbmVkIGxvbmcJc3RhcnRfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydAljZmc7CisJdW5zaWduZWQgc2hvcnQJeF9jb3VudDsKKwlzaG9ydAkJeF9tb2RpZnk7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgc2RoX2hvc3QgeworCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCWludAkJCWlycTsKKwlpbnQJCQlzdGF0X2lycTsKKwlpbnQJCQlkbWFfY2g7CisJaW50CQkJZG1hX2RpcjsKKwlzdHJ1Y3QgZG1hX2Rlc2NfYXJyYXkJKnNnX2NwdTsKKwlkbWFfYWRkcl90CQlzZ19kbWE7CisJaW50CQkJZG1hX2xlbjsKKworCXVuc2lnbmVkIGludAkJaW1hc2s7CisJdW5zaWduZWQgaW50CQlwb3dlcl9tb2RlOworCXVuc2lnbmVkIGludAkJY2xrX2RpdjsKKworCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOworCXN0cnVjdCBtbWNfY29tbWFuZAkqY21kOworCXN0cnVjdCBtbWNfZGF0YQkJKmRhdGE7Cit9OworCitzdGF0aWMgc3RydWN0IGJmaW5fc2RfaG9zdCAqZ2V0X3NkaF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworfQorCitzdGF0aWMgdm9pZCBzZGhfc3RvcF9jbG9jayhzdHJ1Y3Qgc2RoX2hvc3QgKmhvc3QpCit7CisJYmZpbl93cml0ZV9TREhfQ0xLX0NUTChiZmluX3JlYWRfU0RIX0NMS19DVEwoKSAmIH5DTEtfRSk7CisJU1NZTkMoKTsKK30KKworc3RhdGljIHZvaWQgc2RoX2VuYWJsZV9zdGF0X2lycShzdHJ1Y3Qgc2RoX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWhvc3QtPmltYXNrIHw9IG1hc2s7CisJYmZpbl93cml0ZV9TREhfTUFTSzAobWFzayk7CisJU1NZTkMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaF9kaXNhYmxlX3N0YXRfaXJxKHN0cnVjdCBzZGhfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJaG9zdC0+aW1hc2sgJj0gfm1hc2s7CisJYmZpbl93cml0ZV9TREhfTUFTSzAoaG9zdC0+aW1hc2spOworCVNTWU5DKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNkaF9zZXR1cF9kYXRhKHN0cnVjdCBzZGhfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGRhdGFfY3RsOworCXVuc2lnbmVkIGludCBkbWFfY2ZnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIGVudGVyIGZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgZGF0YS0+ZmxhZ3MpOworCWhvc3QtPmRhdGEgPSBkYXRhOworCWRhdGFfY3RsID0gMDsKKwlkbWFfY2ZnID0gMDsKKworCWxlbmd0aCA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzOworCWJmaW5fd3JpdGVfU0RIX0RBVEFfTEdUSChsZW5ndGgpOworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfU1RSRUFNKQorCQlkYXRhX2N0bCB8PSBEVFhfTU9ERTsKKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCWRhdGFfY3RsIHw9IERUWF9ESVI7CisJLyogT25seSBzdXBwb3J0cyBwb3dlci1vZi0yIGJsb2NrIHNpemUgKi8KKwlpZiAoZGF0YS0+Ymxrc3ogJiAoZGF0YS0+Ymxrc3ogLSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGF0YV9jdGwgfD0gKChmZnMoZGF0YS0+Ymxrc3opIC0gMSkgPDwgNCk7CisKKwliZmluX3dyaXRlX1NESF9EQVRBX0NUTChkYXRhX2N0bCk7CisKKwliZmluX3dyaXRlX1NESF9EQVRBX1RJTUVSKDB4RkZGRik7CisJU1NZTkMoKTsKKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJaG9zdC0+ZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRTsKKwkJZG1hX2NmZyB8PSBXTlI7CisJfSBlbHNlCisJCWhvc3QtPmRtYV9kaXIgPSBETUFfVE9fREVWSUNFOworCisJc2RoX2VuYWJsZV9zdGF0X2lycShob3N0LCAoREFUX0NSQ19GQUlMIHwgREFUX1RJTUVfT1VUIHwgREFUX0VORCkpOworCWhvc3QtPmRtYV9sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgaG9zdC0+ZG1hX2Rpcik7CisjaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCisJZG1hX2NmZyB8PSBETUFGTE9XX0FSUkFZIHwgTkRTSVpFXzUgfCBSRVNUQVJUIHwgV0RTSVpFXzMyIHwgRE1BRU47CisJeworCQlpbnQgaTsKKwkJZm9yX2VhY2hfc2coZGF0YS0+c2csIHNnLCBob3N0LT5kbWFfbGVuLCBpKSB7CisJCQlob3N0LT5zZ19jcHVbaV0uc3RhcnRfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCWhvc3QtPnNnX2NwdVtpXS5jZmcgPSBkbWFfY2ZnOworCQkJaG9zdC0+c2dfY3B1W2ldLnhfY291bnQgPSBzZ19kbWFfbGVuKHNnKSAvIDQ7CisJCQlob3N0LT5zZ19jcHVbaV0ueF9tb2RpZnkgPSA0OworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlZDogc3RhcnRfYWRkcjoweCVseCwgIgorCQkJCSJjZmc6MHgleCwgeF9jb3VudDoweCV4LCB4X21vZGlmeToweCV4XG4iLAorCQkJCWksIGhvc3QtPnNnX2NwdVtpXS5zdGFydF9hZGRyLAorCQkJCWhvc3QtPnNnX2NwdVtpXS5jZmcsIGhvc3QtPnNnX2NwdVtpXS54X2NvdW50LAorCQkJCWhvc3QtPnNnX2NwdVtpXS54X21vZGlmeSk7CisJCX0KKwl9CisJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpaG9zdC0+c2dfY3B1LAorCQkodW5zaWduZWQgaW50KWhvc3QtPnNnX2NwdSArCisJCQlob3N0LT5kbWFfbGVuICogc2l6ZW9mKHN0cnVjdCBkbWFfZGVzY19hcnJheSkpOworCS8qIFNldCB0aGUgbGFzdCBkZXNjcmlwdG9yIHRvIHN0b3AgbW9kZSAqLworCWhvc3QtPnNnX2NwdVtob3N0LT5kbWFfbGVuIC0gMV0uY2ZnICY9IH4oRE1BRkxPVyB8IE5EU0laRSk7CisJaG9zdC0+c2dfY3B1W2hvc3QtPmRtYV9sZW4gLSAxXS5jZmcgfD0gRElfRU47CisKKwlzZXRfZG1hX2N1cnJfZGVzY19hZGRyKGhvc3QtPmRtYV9jaCwgKHVuc2lnbmVkIGxvbmcgKilob3N0LT5zZ19kbWEpOworCXNldF9kbWFfeF9jb3VudChob3N0LT5kbWFfY2gsIDApOworCXNldF9kbWFfeF9tb2RpZnkoaG9zdC0+ZG1hX2NoLCAwKTsKKwlzZXRfZG1hX2NvbmZpZyhob3N0LT5kbWFfY2gsIGRtYV9jZmcpOworI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1MXgpCisJLyogUlNJIERNQSBkb2Vzbid0IHdvcmsgaW4gYXJyYXkgbW9kZSAqLworCWRtYV9jZmcgfD0gV0RTSVpFXzMyIHwgRE1BRU47CisJc2V0X2RtYV9zdGFydF9hZGRyKGhvc3QtPmRtYV9jaCwgc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnWzBdKSk7CisJc2V0X2RtYV94X2NvdW50KGhvc3QtPmRtYV9jaCwgbGVuZ3RoIC8gNCk7CisJc2V0X2RtYV94X21vZGlmeShob3N0LT5kbWFfY2gsIDQpOworCXNldF9kbWFfY29uZmlnKGhvc3QtPmRtYV9jaCwgZG1hX2NmZyk7CisjZW5kaWYKKwliZmluX3dyaXRlX1NESF9EQVRBX0NUTChiZmluX3JlYWRfU0RIX0RBVEFfQ1RMKCkgfCBEVFhfRE1BX0UgfCBEVFhfRSk7CisKKwlTU1lOQygpOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlcyBleGl0XG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkaF9zdGFydF9jbWQoc3RydWN0IHNkaF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgc2RoX2NtZDsKKwl1bnNpZ25lZCBpbnQgc3RhdF9tYXNrOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlcyBlbnRlciBjbWQ6IDB4JXBcbiIsIF9fZnVuY19fLCBjbWQpOworCVdBUk5fT04oaG9zdC0+Y21kICE9IE5VTEwpOworCWhvc3QtPmNtZCA9IGNtZDsKKworCXNkaF9jbWQgPSAwOworCXN0YXRfbWFzayA9IDA7CisKKwlzZGhfY21kIHw9IGNtZC0+b3Bjb2RlOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJc2RoX2NtZCB8PSBDTURfUlNQOworCQlzdGF0X21hc2sgfD0gQ01EX1JFU1BfRU5EOworCX0gZWxzZSB7CisJCXN0YXRfbWFzayB8PSBDTURfU0VOVDsKKwl9CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KQorCQlzZGhfY21kIHw9IENNRF9MX1JTUDsKKworCXN0YXRfbWFzayB8PSBDTURfQ1JDX0ZBSUwgfCBDTURfVElNRV9PVVQ7CisKKwlzZGhfZW5hYmxlX3N0YXRfaXJxKGhvc3QsIHN0YXRfbWFzayk7CisKKwliZmluX3dyaXRlX1NESF9BUkdVTUVOVChjbWQtPmFyZyk7CisJYmZpbl93cml0ZV9TREhfQ09NTUFORChzZGhfY21kIHwgQ01EX0UpOworCWJmaW5fd3JpdGVfU0RIX0NMS19DVEwoYmZpbl9yZWFkX1NESF9DTEtfQ1RMKCkgfCBDTEtfRSk7CisJU1NZTkMoKTsKK30KKworc3RhdGljIHZvaWQgc2RoX2ZpbmlzaF9yZXF1ZXN0KHN0cnVjdCBzZGhfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWhvc3QtPm1ycSA9IE5VTEw7CisJaG9zdC0+Y21kID0gTlVMTDsKKwlob3N0LT5kYXRhID0gTlVMTDsKKwltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKK30KKworc3RhdGljIGludCBzZGhfY21kX2RvbmUoc3RydWN0IHNkaF9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgc3RhdCkKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgZW50ZXIgY21kOiAlcFxuIiwgX19mdW5jX18sIGNtZCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAwOworCisJaG9zdC0+Y21kID0gTlVMTDsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCWNtZC0+cmVzcFswXSA9IGJmaW5fcmVhZF9TREhfUkVTUE9OU0UwKCk7CisJCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJCWNtZC0+cmVzcFsxXSA9IGJmaW5fcmVhZF9TREhfUkVTUE9OU0UxKCk7CisJCQljbWQtPnJlc3BbMl0gPSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMigpOworCQkJY21kLT5yZXNwWzNdID0gYmZpbl9yZWFkX1NESF9SRVNQT05TRTMoKTsKKwkJfQorCX0KKwlpZiAoc3RhdCAmIENNRF9USU1FX09VVCkKKwkJY21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJZWxzZSBpZiAoc3RhdCAmIENNRF9DUkNfRkFJTCAmJiBjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpCisJCWNtZC0+ZXJyb3IgPSAtRUlMU0VROworCisJc2RoX2Rpc2FibGVfc3RhdF9pcnEoaG9zdCwgKENNRF9TRU5UIHwgQ01EX1JFU1BfRU5EIHwgQ01EX1RJTUVfT1VUIHwgQ01EX0NSQ19GQUlMKSk7CisKKwlpZiAoaG9zdC0+ZGF0YSAmJiAhY21kLT5lcnJvcikgeworCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCQkJcmV0ID0gc2RoX3NldHVwX2RhdGEoaG9zdCwgaG9zdC0+ZGF0YSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiAwOworCQl9CisKKwkJc2RoX2VuYWJsZV9zdGF0X2lycShob3N0LCBEQVRfRU5EIHwgUlhfT1ZFUlJVTiB8IFRYX1VOREVSUlVOIHwgREFUX1RJTUVfT1VUKTsKKwl9IGVsc2UKKwkJc2RoX2ZpbmlzaF9yZXF1ZXN0KGhvc3QsIGhvc3QtPm1ycSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzZGhfZGF0YV9kb25lKHN0cnVjdCBzZGhfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHN0YXQpCit7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgZW50ZXIgc3RhdDogMHgleFxuIiwgX19mdW5jX18sIHN0YXQpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlkaXNhYmxlX2RtYShob3N0LT5kbWFfY2gpOworCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sCisJCSAgICAgaG9zdC0+ZG1hX2Rpcik7CisKKwlpZiAoc3RhdCAmIERBVF9USU1FX09VVCkKKwkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCWVsc2UgaWYgKHN0YXQgJiBEQVRfQ1JDX0ZBSUwpCisJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwllbHNlIGlmIChzdGF0ICYgKFJYX09WRVJSVU4gfCBUWF9VTkRFUlJVTikpCisJCWRhdGEtPmVycm9yID0gLUVJTzsKKworCWlmICghZGF0YS0+ZXJyb3IpCisJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OworCWVsc2UKKwkJZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsKKworCXNkaF9kaXNhYmxlX3N0YXRfaXJxKGhvc3QsIERBVF9FTkQgfCBEQVRfVElNRV9PVVQgfCBEQVRfQ1JDX0ZBSUwgfCBSWF9PVkVSUlVOIHwgVFhfVU5ERVJSVU4pOworCWJmaW5fd3JpdGVfU0RIX1NUQVRVU19DTFIoREFUX0VORF9TVEFUIHwgREFUX1RJTUVPVVRfU1RBVCB8IFwKKwkJCURBVF9DUkNfRkFJTF9TVEFUIHwgREFUX0JMS19FTkRfU1RBVCB8IFJYX09WRVJSVU4gfCBUWF9VTkRFUlJVTik7CisJYmZpbl93cml0ZV9TREhfREFUQV9DVEwoMCk7CisJU1NZTkMoKTsKKworCWhvc3QtPmRhdGEgPSBOVUxMOworCWlmIChob3N0LT5tcnEtPnN0b3ApIHsKKwkJc2RoX3N0b3BfY2xvY2soaG9zdCk7CisJCXNkaF9zdGFydF9jbWQoaG9zdCwgaG9zdC0+bXJxLT5zdG9wKTsKKwl9IGVsc2UgeworCQlzZGhfZmluaXNoX3JlcXVlc3QoaG9zdCwgaG9zdC0+bXJxKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2RoX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCBzZGhfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIGVudGVyLCBtcnA6JXAsIGNtZDolcFxuIiwgX19mdW5jX18sIG1ycSwgbXJxLT5jbWQpOworCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOworCisJaG9zdC0+bXJxID0gbXJxOworCWhvc3QtPmRhdGEgPSBtcnEtPmRhdGE7CisKKwlpZiAobXJxLT5kYXRhICYmIG1ycS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CisJCXJldCA9IHNkaF9zZXR1cF9kYXRhKGhvc3QsIG1ycS0+ZGF0YSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CisJfQorCisJc2RoX3N0YXJ0X2NtZChob3N0LCBtcnEtPmNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQoreworCXN0cnVjdCBzZGhfaG9zdCAqaG9zdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjbGtfY3RsID0gMDsKKwl1MTYgcHdyX2N0bCA9IDA7CisJdTE2IGNmZzsKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJaWYgKGlvcy0+Y2xvY2spIHsKKwkJdW5zaWduZWQgbG9uZyAgc3lzX2NsaywgaW9zX2NsazsKKwkJdW5zaWduZWQgY2hhciBjbGtfZGl2OworCQlpb3NfY2xrID0gMiAqIGlvcy0+Y2xvY2s7CisJCXN5c19jbGsgPSBnZXRfc2NsaygpOworCQljbGtfZGl2ID0gc3lzX2NsayAvIGlvc19jbGs7CisJCWlmIChzeXNfY2xrICUgaW9zX2NsayA9PSAwKQorCQkJY2xrX2RpdiAtPSAxOworCQljbGtfZGl2ID0gbWluX3QodW5zaWduZWQgY2hhciwgY2xrX2RpdiwgMHhGRik7CisJCWNsa19jdGwgfD0gY2xrX2RpdjsKKwkJY2xrX2N0bCB8PSBDTEtfRTsKKwkJaG9zdC0+Y2xrX2RpdiA9IGNsa19kaXY7CisJfSBlbHNlCisJCXNkaF9zdG9wX2Nsb2NrKGhvc3QpOworCisJaWYgKGlvcy0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOKQorI2lmZGVmIENPTkZJR19TREhfQkZJTl9NSVNTSU5HX0NNRF9QVUxMVVBfV09SS0FST1VORAorCQlwd3JfY3RsIHw9IFJPRF9DVEw7CisjZWxzZQorCQlwd3JfY3RsIHw9IFNEX0NNRF9PRCB8IFJPRF9DVEw7CisjZW5kaWYKKworCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpIHsKKwkJY2ZnID0gYmZpbl9yZWFkX1NESF9DRkcoKTsKKwkJY2ZnICY9IH5QRF9TRERBVDM7CisJCWNmZyB8PSBQVVBfU0REQVQzOworCQkvKiBFbmFibGUgNCBiaXQgU0RJTyAqLworCQljZmcgfD0gKFNENEUgfCBNV0UpOworCQliZmluX3dyaXRlX1NESF9DRkcoY2ZnKTsKKwkJY2xrX2N0bCB8PSBXSURFX0JVUzsKKwl9IGVsc2UgeworCQljZmcgPSBiZmluX3JlYWRfU0RIX0NGRygpOworCQljZmcgfD0gTVdFOworCQliZmluX3dyaXRlX1NESF9DRkcoY2ZnKTsKKwl9CisKKwliZmluX3dyaXRlX1NESF9DTEtfQ1RMKGNsa19jdGwpOworCisJaG9zdC0+cG93ZXJfbW9kZSA9IGlvcy0+cG93ZXJfbW9kZTsKKwlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PTikKKwkJcHdyX2N0bCB8PSBQV1JfT047CisKKwliZmluX3dyaXRlX1NESF9QV1JfQ1RMKHB3cl9jdGwpOworCVNTWU5DKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIlNESDogY2xrX2RpdiA9IDB4JXggYWN0dWFsIGNsb2NrOiVsZCBleHBlY3RlZCBjbG9jazolZFxuIiwKKwkJaG9zdC0+Y2xrX2RpdiwKKwkJaG9zdC0+Y2xrX2RpdiA/IGdldF9zY2xrKCkgLyAoMiAqIChob3N0LT5jbGtfZGl2ICsgMSkpIDogMCwKKwkJaW9zLT5jbG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHNkaF9vcHMgPSB7CisJLnJlcXVlc3QJPSBzZGhfcmVxdWVzdCwKKwkuc2V0X2lvcwk9IHNkaF9zZXRfaW9zLAorfTsKKworc3RhdGljIGlycXJldHVybl90IHNkaF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKQoreworCXN0cnVjdCBzZGhfaG9zdCAqaG9zdCA9IGRldmlkOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlcyBlbnRlciwgaXJxX3N0YXQ6IDB4JTA0eFxuIiwgX19mdW5jX18sCisJCWdldF9kbWFfY3Vycl9pcnFzdGF0KGhvc3QtPmRtYV9jaCkpOworCWNsZWFyX2RtYV9pcnFzdGF0KGhvc3QtPmRtYV9jaCk7CisJU1NZTkMoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNkaF9zdGF0X2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3Qgc2RoX2hvc3QgKmhvc3QgPSBkZXZpZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWludCBoYW5kbGVkID0gMDsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlzdGF0dXMgPSBiZmluX3JlYWRfU0RIX0VfU1RBVFVTKCk7CisJaWYgKHN0YXR1cyAmIFNEX0NBUkRfREVUKSB7CisJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7CisJCWJmaW5fd3JpdGVfU0RIX0VfU1RBVFVTKFNEX0NBUkRfREVUKTsKKwl9CisJc3RhdHVzID0gYmZpbl9yZWFkX1NESF9TVEFUVVMoKTsKKwlpZiAoc3RhdHVzICYgKENNRF9TRU5UIHwgQ01EX1JFU1BfRU5EIHwgQ01EX1RJTUVfT1VUIHwgQ01EX0NSQ19GQUlMKSkgeworCQloYW5kbGVkIHw9IHNkaF9jbWRfZG9uZShob3N0LCBzdGF0dXMpOworCQliZmluX3dyaXRlX1NESF9TVEFUVVNfQ0xSKENNRF9TRU5UX1NUQVQgfCBDTURfUkVTUF9FTkRfU1RBVCB8IFwKKwkJCQlDTURfVElNRU9VVF9TVEFUIHwgQ01EX0NSQ19GQUlMX1NUQVQpOworCQlTU1lOQygpOworCX0KKworCXN0YXR1cyA9IGJmaW5fcmVhZF9TREhfU1RBVFVTKCk7CisJaWYgKHN0YXR1cyAmIChEQVRfRU5EIHwgREFUX1RJTUVfT1VUIHwgREFUX0NSQ19GQUlMIHwgUlhfT1ZFUlJVTiB8IFRYX1VOREVSUlVOKSkKKwkJaGFuZGxlZCB8PSBzZGhfZGF0YV9kb25lKGhvc3QsIHN0YXR1cyk7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIGV4aXRcblxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCBzZGhfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgYmZpbl9zZF9ob3N0ICpkcnZfZGF0YSA9IGdldF9zZGhfZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKCFkcnZfZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRyaXZlciBkYXRhXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKCptbWMpLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1tYykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltbWMtPm9wcyA9ICZzZGhfb3BzOworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDMyOworCW1tYy0+bWF4X3NlZ19zaXplID0gMSA8PCAxNjsKKwltbWMtPm1heF9ibGtfc2l6ZSA9IDEgPDwgMTE7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gMSA8PCAxMTsKKwltbWMtPm1heF9yZXFfc2l6ZSA9IFBBR0VfU0laRTsKKwltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCW1tYy0+Zl9tYXggPSBnZXRfc2NsaygpOworCW1tYy0+Zl9taW4gPSBtbWMtPmZfbWF4ID4+IDk7CisJbW1jLT5jYXBzID0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF9ORUVEU19QT0xMOworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPm1tYyA9IG1tYzsKKworCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKKwlob3N0LT5pcnEgPSBkcnZfZGF0YS0+aXJxX2ludDA7CisJaG9zdC0+ZG1hX2NoID0gZHJ2X2RhdGEtPmRtYV9jaGFuOworCisJcmV0ID0gcmVxdWVzdF9kbWEoaG9zdC0+ZG1hX2NoLCBEUklWRVJfTkFNRSAiRE1BIik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbFxuIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXQgPSBzZXRfZG1hX2NhbGxiYWNrKGhvc3QtPmRtYV9jaCwgc2RoX2RtYV9pcnEsIGhvc3QpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgRE1BIGlycVxuIik7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaG9zdC0+c2dfY3B1ID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CisJbW1jX2FkZF9ob3N0KG1tYyk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHNkaF9zdGF0X2lycSwgMCwgIlNESCBTdGF0dXMgSVJRIiwgaG9zdCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBzdGF0dXMgaXJxXG4iKTsKKwkJZ290byBvdXQzOworCX0KKworCXJldCA9IHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KGRydl9kYXRhLT5waW5fcmVxLCBEUklWRVJfTkFNRSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBwZXJpcGhlcmFsIHBpbnNcbiIpOworCQlnb3RvIG91dDQ7CisJfQorI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQorCS8qIFNlY3VyZSBEaWdpdGFsIEhvc3Qgc2hhcmVzIERNQSB3aXRoIE5hbmQgY29udHJvbGxlciAqLworCWJmaW5fd3JpdGVfRE1BQzFfUEVSSU1VWChiZmluX3JlYWRfRE1BQzFfUEVSSU1VWCgpIHwgMHgxKTsKKyNlbmRpZgorCisJYmZpbl93cml0ZV9TREhfQ0ZHKGJmaW5fcmVhZF9TREhfQ0ZHKCkgfCBDTEtTX0VOKTsKKwlTU1lOQygpOworCisJLyogRGlzYWJsZSBjYXJkIGluc2VydGluZyBkZXRlY3Rpb24gcGluLiBzZXQgTU1DX0NBUF9ORUVTX1BPTEwsIGFuZAorCSAqIG1tYyBzdGFjayB3aWxsIGRvIHRoZSBkZXRlY3Rpb24uCisJICovCisJYmZpbl93cml0ZV9TREhfQ0ZHKChiZmluX3JlYWRfU0RIX0NGRygpICYgMHgxRikgfCAoUFVQX1NEREFUIHwgUFVQX1NEREFUMykpOworCVNTWU5DKCk7CisKKwlyZXR1cm4gMDsKKworb3V0NDoKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworb3V0MzoKKwltbWNfcmVtb3ZlX2hvc3QobW1jKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKK291dDI6CisJZnJlZV9kbWEoaG9zdC0+ZG1hX2NoKTsKK291dDE6CisJbW1jX2ZyZWVfaG9zdChtbWMpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzZGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKG1tYykgeworCQlzdHJ1Y3Qgc2RoX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJCW1tY19yZW1vdmVfaG9zdChtbWMpOworCisJCXNkaF9zdG9wX2Nsb2NrKGhvc3QpOworCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCQlmcmVlX2RtYShob3N0LT5kbWFfY2gpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKKworCQltbWNfZnJlZV9ob3N0KG1tYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc2RoX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBiZmluX3NkX2hvc3QgKmRydl9kYXRhID0gZ2V0X3NkaF9kYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlpZiAobW1jKQorCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KG1tYywgc3RhdGUpOworCisJYmZpbl93cml0ZV9TREhfUFdSX0NUTChiZmluX3JlYWRfU0RIX1BXUl9DVEwoKSAmIH5QV1JfT04pOworCXBlcmlwaGVyYWxfZnJlZV9saXN0KGRydl9kYXRhLT5waW5fcmVxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2RoX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBiZmluX3NkX2hvc3QgKmRydl9kYXRhID0gZ2V0X3NkaF9kYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChkcnZfZGF0YS0+cGluX3JlcSwgRFJJVkVSX05BTUUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBwZXJpcGhlcmFsIHBpbnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJmaW5fd3JpdGVfU0RIX1BXUl9DVEwoYmZpbl9yZWFkX1NESF9QV1JfQ1RMKCkgfCBQV1JfT04pOworI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQorCS8qIFNlY3VyZSBEaWdpdGFsIEhvc3Qgc2hhcmVzIERNQSB3aXRoIE5hbmQgY29udHJvbGxlciAqLworCWJmaW5fd3JpdGVfRE1BQzFfUEVSSU1VWChiZmluX3JlYWRfRE1BQzFfUEVSSU1VWCgpIHwgMHgxKTsKKyNlbmRpZgorCWJmaW5fd3JpdGVfU0RIX0NGRyhiZmluX3JlYWRfU0RIX0NGRygpIHwgQ0xLU19FTik7CisJU1NZTkMoKTsKKworCWJmaW5fd3JpdGVfU0RIX0NGRygoYmZpbl9yZWFkX1NESF9DRkcoKSAmIDB4MUYpIHwgKFBVUF9TRERBVCB8IFBVUF9TRERBVDMpKTsKKwlTU1lOQygpOworCisJaWYgKG1tYykKKwkJcmV0ID0gbW1jX3Jlc3VtZV9ob3N0KG1tYyk7CisKKwlyZXR1cm4gcmV0OworfQorI2Vsc2UKKyMgZGVmaW5lIHNkaF9zdXNwZW5kIE5VTEwKKyMgZGVmaW5lIHNkaF9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZGhfZHJpdmVyID0geworCS5wcm9iZSAgID0gc2RoX3Byb2JlLAorCS5yZW1vdmUgID0gX19kZXZleGl0X3Aoc2RoX3JlbW92ZSksCisJLnN1c3BlbmQgPSBzZGhfc3VzcGVuZCwKKwkucmVzdW1lICA9IHNkaF9yZXN1bWUsCisJLmRyaXZlciAgPSB7CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkaF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2RoX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzZGhfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZGhfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZGhfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNkaF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCbGFja2ZpbiBTZWN1cmUgRGlnaXRhbCBIb3N0IERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2xpZmYgQ2FpLCBSb3kgSHVhbmciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ1ZTdjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYwpAQCAtMCwwICsxLDEzNDkgQEAKKy8qCisgKiBkYXZpbmNpX21tYy5jIC0gVEkgRGFWaW5jaSBNTUMvU0QvU0RJTyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGV4YXMgSW5zdHJ1bWVudHMuCisgKiAgICAgICBPcmlnaW5hbCBhdXRob3I6IFB1cnVzaG90YW0gS3VtYXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisKKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgorCisvKgorICogUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBEQVZJTkNJX01NQ0NUTCAgICAgICAweDAwIC8qIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0NMSyAgICAgICAweDA0IC8qIE1lbW9yeSBDbG9jayBDb250cm9sIFJlZ2lzdGVyICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1NUMCAgICAgICAweDA4IC8qIFN0YXR1cyBSZWdpc3RlciAwICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1NUMSAgICAgICAweDBDIC8qIFN0YXR1cyBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0lNICAgICAgICAweDEwIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1RPUiAgICAgICAweDE0IC8qIFJlc3BvbnNlIFRpbWUtT3V0IFJlZ2lzdGVyICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1RPRCAgICAgICAweDE4IC8qIERhdGEgUmVhZCBUaW1lLU91dCBSZWdpc3RlciAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0JMRU4gICAgICAweDFDIC8qIEJsb2NrIExlbmd0aCBSZWdpc3RlciAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ05CTEsgICAgICAweDIwIC8qIE51bWJlciBvZiBCbG9ja3MgUmVnaXN0ZXIgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ05CTEMgICAgICAweDI0IC8qIE51bWJlciBvZiBCbG9ja3MgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSBEQVZJTkNJX01NQ0RSUiAgICAgICAweDI4IC8qIERhdGEgUmVjZWl2ZSBSZWdpc3RlciAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0RYUiAgICAgICAweDJDIC8qIERhdGEgVHJhbnNtaXQgUmVnaXN0ZXIgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0NNRCAgICAgICAweDMwIC8qIENvbW1hbmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0FSR0hMICAgICAweDM0IC8qIEFyZ3VtZW50IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1JTUDAxICAgICAweDM4IC8qIFJlc3BvbnNlIFJlZ2lzdGVyIDAgYW5kIDEgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1JTUDIzICAgICAweDNDIC8qIFJlc3BvbnNlIFJlZ2lzdGVyIDAgYW5kIDEgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1JTUDQ1ICAgICAweDQwIC8qIFJlc3BvbnNlIFJlZ2lzdGVyIDAgYW5kIDEgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ1JTUDY3ICAgICAweDQ0IC8qIFJlc3BvbnNlIFJlZ2lzdGVyIDAgYW5kIDEgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0RSU1AgICAgICAweDQ4IC8qIERhdGEgUmVzcG9uc2UgUmVnaXN0ZXIgICAgICAgICAgICAqLworI2RlZmluZSBEQVZJTkNJX01NQ0VUT0sgICAgICAweDRDCisjZGVmaW5lIERBVklOQ0lfTU1DQ0lEWCAgICAgIDB4NTAgLyogQ29tbWFuZCBJbmRleCBSZWdpc3RlciAgICAgICAgICAgICovCisjZGVmaW5lIERBVklOQ0lfTU1DQ0tDICAgICAgIDB4NTQKKyNkZWZpbmUgREFWSU5DSV9NTUNUT1JDICAgICAgMHg1OAorI2RlZmluZSBEQVZJTkNJX01NQ1RPREMgICAgICAweDVDCisjZGVmaW5lIERBVklOQ0lfTU1DQkxOQyAgICAgIDB4NjAKKyNkZWZpbmUgREFWSU5DSV9TRElPQ1RMICAgICAgMHg2NAorI2RlZmluZSBEQVZJTkNJX1NESU9TVDAgICAgICAweDY4CisjZGVmaW5lIERBVklOQ0lfU0RJT0VOICAgICAgIDB4NkMKKyNkZWZpbmUgREFWSU5DSV9TRElPU1QgICAgICAgMHg3MAorI2RlZmluZSBEQVZJTkNJX01NQ0ZJRk9DVEwgICAweDc0IC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAqLworCisvKiBEQVZJTkNJX01NQ0NUTCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNTUNDVExfREFUUlNUICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgTU1DQ1RMX0NNRFJTVCAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIE1NQ0NUTF9XSURUSF80X0JJVCAgICAoMSA8PCAyKQorI2RlZmluZSBNTUNDVExfREFURUdfRElTQUJMRUQgKDAgPDwgNikKKyNkZWZpbmUgTU1DQ1RMX0RBVEVHX1JJU0lORyAgICgxIDw8IDYpCisjZGVmaW5lIE1NQ0NUTF9EQVRFR19GQUxMSU5HICAoMiA8PCA2KQorI2RlZmluZSBNTUNDVExfREFURUdfQk9USCAgICAgKDMgPDwgNikKKyNkZWZpbmUgTU1DQ1RMX1BFUk1EUl9MRSAgICAgICgwIDw8IDkpCisjZGVmaW5lIE1NQ0NUTF9QRVJNRFJfQkUgICAgICAoMSA8PCA5KQorI2RlZmluZSBNTUNDVExfUEVSTURYX0xFICAgICAgKDAgPDwgMTApCisjZGVmaW5lIE1NQ0NUTF9QRVJNRFhfQkUgICAgICAoMSA8PCAxMCkKKworLyogREFWSU5DSV9NTUNDTEsgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTU1DQ0xLX0NMS0VOICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIE1NQ0NMS19DTEtSVF9NQVNLICAgICAoMHhGRiA8PCAwKQorCisvKiBJUlEgYml0IGRlZmluaXRpb25zLCBmb3IgREFWSU5DSV9NTUNTVDAgYW5kIERBVklOQ0lfTU1DSU0gKi8KKyNkZWZpbmUgTU1DU1QwX0RBVERORSAgICAgICAgIEJJVCgwKQkvKiBkYXRhIGRvbmUgKi8KKyNkZWZpbmUgTU1DU1QwX0JTWURORSAgICAgICAgIEJJVCgxKQkvKiBidXN5IGRvbmUgKi8KKyNkZWZpbmUgTU1DU1QwX1JTUERORSAgICAgICAgIEJJVCgyKQkvKiBjb21tYW5kIGRvbmUgKi8KKyNkZWZpbmUgTU1DU1QwX1RPVVRSRCAgICAgICAgIEJJVCgzKQkvKiBkYXRhIHJlYWQgdGltZW91dCAqLworI2RlZmluZSBNTUNTVDBfVE9VVFJTICAgICAgICAgQklUKDQpCS8qIGNvbW1hbmQgcmVzcG9uc2UgdGltZW91dCAqLworI2RlZmluZSBNTUNTVDBfQ1JDV1IgICAgICAgICAgQklUKDUpCS8qIGRhdGEgd3JpdGUgQ1JDIGVycm9yICovCisjZGVmaW5lIE1NQ1NUMF9DUkNSRCAgICAgICAgICBCSVQoNikJLyogZGF0YSByZWFkIENSQyBlcnJvciAqLworI2RlZmluZSBNTUNTVDBfQ1JDUlMgICAgICAgICAgQklUKDcpCS8qIGNvbW1hbmQgcmVzcG9uc2UgQ1JDIGVycm9yICovCisjZGVmaW5lIE1NQ1NUMF9EWFJEWSAgICAgICAgICBCSVQoOSkJLyogZGF0YSB0cmFuc21pdCByZWFkeSAoZmlmbyBlbXB0eSkgKi8KKyNkZWZpbmUgTU1DU1QwX0RSUkRZICAgICAgICAgIEJJVCgxMCkJLyogZGF0YSByZWNlaXZlIHJlYWR5IChkYXRhIGluIGZpZm8pKi8KKyNkZWZpbmUgTU1DU1QwX0RBVEVEICAgICAgICAgIEJJVCgxMSkJLyogREFUMyBlZGdlIGRldGVjdCAqLworI2RlZmluZSBNTUNTVDBfVFJORE5FICAgICAgICAgQklUKDEyKQkvKiB0cmFuc2ZlciBkb25lICovCisKKy8qIERBVklOQ0lfTU1DU1QxIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1NQ1NUMV9CVVNZICAgICAgICAgICAoMSA8PCAwKQorCisvKiBEQVZJTkNJX01NQ0NNRCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNTUNDTURfQ01EX01BU0sgICAgICAgKDB4M0YgPDwgMCkKKyNkZWZpbmUgTU1DQ01EX1BQTEVOICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIE1NQ0NNRF9CU1lFWFAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBNTUNDTURfUlNQRk1UX01BU0sgICAgKDMgPDwgOSkKKyNkZWZpbmUgTU1DQ01EX1JTUEZNVF9OT05FICAgICgwIDw8IDkpCisjZGVmaW5lIE1NQ0NNRF9SU1BGTVRfUjE0NTYgICAoMSA8PCA5KQorI2RlZmluZSBNTUNDTURfUlNQRk1UX1IyICAgICAgKDIgPDwgOSkKKyNkZWZpbmUgTU1DQ01EX1JTUEZNVF9SMyAgICAgICgzIDw8IDkpCisjZGVmaW5lIE1NQ0NNRF9EVFJXICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgTU1DQ01EX1NUUk1UUCAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBNTUNDTURfV0RBVFggICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIE1NQ0NNRF9JTklUQ0sgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgTU1DQ01EX0RDTFIgICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBNTUNDTURfRE1BVFJJRyAgICAgICAgKDEgPDwgMTYpCisKKy8qIERBVklOQ0lfTU1DRklGT0NUTCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNTUNGSUZPQ1RMX0ZJRk9SU1QgICAgKDEgPDwgMCkKKyNkZWZpbmUgTU1DRklGT0NUTF9GSUZPRElSX1dSICgxIDw8IDEpCisjZGVmaW5lIE1NQ0ZJRk9DVExfRklGT0RJUl9SRCAoMCA8PCAxKQorI2RlZmluZSBNTUNGSUZPQ1RMX0ZJRk9MRVYgICAgKDEgPDwgMikgLyogMCA9IDEyOCBiaXRzLCAxID0gMjU2IGJpdHMgKi8KKyNkZWZpbmUgTU1DRklGT0NUTF9BQ0NXRF80ICAgICgwIDw8IDMpIC8qIGFjY2VzcyB3aWR0aCBvZiA0IGJ5dGVzICAgICovCisjZGVmaW5lIE1NQ0ZJRk9DVExfQUNDV0RfMyAgICAoMSA8PCAzKSAvKiBhY2Nlc3Mgd2lkdGggb2YgMyBieXRlcyAgICAqLworI2RlZmluZSBNTUNGSUZPQ1RMX0FDQ1dEXzIgICAgKDIgPDwgMykgLyogYWNjZXNzIHdpZHRoIG9mIDIgYnl0ZXMgICAgKi8KKyNkZWZpbmUgTU1DRklGT0NUTF9BQ0NXRF8xICAgICgzIDw8IDMpIC8qIGFjY2VzcyB3aWR0aCBvZiAxIGJ5dGUgICAgICovCisKKworLyogTU1DU0QgSW5pdCBjbG9jayBpbiBIeiBpbiBvcGVuZHJhaW4gbW9kZSAqLworI2RlZmluZSBNTUNTRF9JTklUX0NMT0NLCQkyMDAwMDAKKworLyoKKyAqIE9uZSBzY2F0dGVybGlzdCBkbWEgInNlZ21lbnQiIGlzIGF0IG1vc3QgTUFYX0NDTlQgcndfdGhyZXNob2xkIHVuaXRzLAorICogYW5kIHdlIGhhbmRsZSB1cCB0byBOUl9TRyBzZWdtZW50cy4gIE1NQ19CTE9DS19CT1VOQ0Uga2lja3MgaW4gb25seQorICogZm9yIGRyaXZlcnMgd2l0aCBtYXhfaHdfc2VncyA9PSAxLCBtYWtpbmcgdGhlIHNlZ21lbnRzIGJpZ2dlciAoNjRLQikKKyAqIHRoYW4gdGhlIHBhZ2Ugb3IgdHdvIHRoYXQncyBvdGhlcndpc2UgdHlwaWNhbC4gIE5SX1NHID09IDE2IGdpdmVzIGF0CisgKiBsZWFzdCB0aGUgc2FtZSB0aHJvdWdocHV0IGJvb3N0LCB1c2luZyBFRE1BIHRyYW5zZmVyIGxpbmthZ2UgaW5zdGVhZAorICogb2Ygc3BlbmRpbmcgQ1BVIHRpbWUgY29weWluZyBwYWdlcy4KKyAqLworI2RlZmluZSBNQVhfQ0NOVAkoKDEgPDwgMTYpIC0gMSkKKworI2RlZmluZSBOUl9TRwkJMTYKKworc3RhdGljIHVuc2lnbmVkIHJ3X3RocmVzaG9sZCA9IDMyOworbW9kdWxlX3BhcmFtKHJ3X3RocmVzaG9sZCwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJ3X3RocmVzaG9sZCwKKwkJIlJlYWQvV3JpdGUgdGhyZXNob2xkLiBEZWZhdWx0ID0gMzIiKTsKKworc3RhdGljIHVuc2lnbmVkIF9faW5pdGRhdGEgdXNlX2RtYSA9IDE7Cittb2R1bGVfcGFyYW0odXNlX2RtYSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJXaGV0aGVyIHRvIHVzZSBETUEgb3Igbm90LiBEZWZhdWx0ID0gMSIpOworCitzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCB7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CisJc3RydWN0IG1tY19kYXRhICpkYXRhOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBpbnQgbW1jX2lucHV0X2NsazsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzOworCWludCBpcnE7CisJdW5zaWduZWQgY2hhciBidXNfbW9kZTsKKworI2RlZmluZSBEQVZJTkNJX01NQ19EQVRBRElSX05PTkUJMAorI2RlZmluZSBEQVZJTkNJX01NQ19EQVRBRElSX1JFQUQJMQorI2RlZmluZSBEQVZJTkNJX01NQ19EQVRBRElSX1dSSVRFCTIKKwl1bnNpZ25lZCBjaGFyIGRhdGFfZGlyOworCisJLyogYnVmZmVyIGlzIHVzZWQgZHVyaW5nIFBJTyBvZiBvbmUgc2NhdHRlcmxpc3Qgc2VnbWVudCwgYW5kCisJICogaXMgdXBkYXRlZCBhbG9uZyB3aXRoIGJ1ZmZlcl9ieXRlc19sZWZ0LiAgYnl0ZXNfbGVmdCBhcHBsaWVzCisJICogdG8gYWxsIE4gYmxvY2tzIG9mIHRoZSBQSU8gdHJhbnNmZXIuCisJICovCisJdTggKmJ1ZmZlcjsKKwl1MzIgYnVmZmVyX2J5dGVzX2xlZnQ7CisJdTMyIGJ5dGVzX2xlZnQ7CisKKwl1MzIgcnhkbWEsIHR4ZG1hOworCWJvb2wgdXNlX2RtYTsKKwlib29sIGRvX2RtYTsKKworCS8qIFNjYXR0ZXJsaXN0IERNQSB1c2VzIG9uZSBvciBtb3JlIHBhcmFtZXRlciBSQU0gZW50cmllczoKKwkgKiB0aGUgbWFpbiBvbmUgKGFzc29jaWF0ZWQgd2l0aCByeGRtYSBvciB0eGRtYSkgcGx1cyB6ZXJvIG9yCisJICogbW9yZSBsaW5rcy4gIFRoZSBlbnRyaWVzIGZvciBhIGdpdmVuIHRyYW5zZmVyIGRpZmZlciBvbmx5CisJICogYnkgbWVtb3J5IGJ1ZmZlciAoYWRkcmVzcywgbGVuZ3RoKSBhbmQgbGluayBmaWVsZC4KKwkgKi8KKwlzdHJ1Y3QgZWRtYWNjX3BhcmFtCXR4X3RlbXBsYXRlOworCXN0cnVjdCBlZG1hY2NfcGFyYW0JcnhfdGVtcGxhdGU7CisJdW5zaWduZWQJCW5fbGluazsKKwl1MzIJCQlsaW5rc1tOUl9TRyAtIDFdOworCisJLyogRm9yIFBJTyB3ZSB3YWxrIHNjYXR0ZXJsaXN0cyBvbmUgc2VnbWVudCBhdCBhIHRpbWUuICovCisJdW5zaWduZWQgaW50CQlzZ19sZW47CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCS8qIFZlcnNpb24gb2YgdGhlIE1NQy9TRCBjb250cm9sbGVyICovCisJdTggdmVyc2lvbjsKKwkvKiBmb3IgbnMgaW4gb25lIGN5Y2xlIGNhbGN1bGF0aW9uICovCisJdW5zaWduZWQgbnNfaW5fb25lX2N5Y2xlOworI2lmZGVmIENPTkZJR19DUFVfRlJFUQorCXN0cnVjdCBub3RpZmllcl9ibG9jawlmcmVxX3RyYW5zaXRpb247CisjZW5kaWYKK307CisKKworLyogUElPIG9ubHkgKi8KK3N0YXRpYyB2b2lkIG1tY19kYXZpbmNpX3NnX3RvX2J1ZihzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCkKK3sKKwlob3N0LT5idWZmZXJfYnl0ZXNfbGVmdCA9IHNnX2RtYV9sZW4oaG9zdC0+c2cpOworCWhvc3QtPmJ1ZmZlciA9IHNnX3ZpcnQoaG9zdC0+c2cpOworCWlmIChob3N0LT5idWZmZXJfYnl0ZXNfbGVmdCA+IGhvc3QtPmJ5dGVzX2xlZnQpCisJCWhvc3QtPmJ1ZmZlcl9ieXRlc19sZWZ0ID0gaG9zdC0+Ynl0ZXNfbGVmdDsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9maWZvX2RhdGFfdHJhbnMoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsCisJCQkJCXVuc2lnbmVkIGludCBuKQoreworCXU4ICpwOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGhvc3QtPmJ1ZmZlcl9ieXRlc19sZWZ0ID09IDApIHsKKwkJaG9zdC0+c2cgPSBzZ19uZXh0KGhvc3QtPmRhdGEtPnNnKTsKKwkJbW1jX2RhdmluY2lfc2dfdG9fYnVmKGhvc3QpOworCX0KKworCXAgPSBob3N0LT5idWZmZXI7CisJaWYgKG4gPiBob3N0LT5idWZmZXJfYnl0ZXNfbGVmdCkKKwkJbiA9IGhvc3QtPmJ1ZmZlcl9ieXRlc19sZWZ0OworCWhvc3QtPmJ1ZmZlcl9ieXRlc19sZWZ0IC09IG47CisJaG9zdC0+Ynl0ZXNfbGVmdCAtPSBuOworCisJLyogTk9URTogIHdlIG5ldmVyIHRyYW5zZmVyIG1vcmUgdGhhbiByd190aHJlc2hvbGQgYnl0ZXMKKwkgKiB0by9mcm9tIHRoZSBmaWZvIGhlcmU7IHRoZXJlJ3Mgbm8gSS9PIG92ZXJsYXAuCisJICogVGhpcyBhbHNvIGFzc3VtZXMgdGhhdCBhY2Nlc3Mgd2lkdGgoIGkuZS4gQUNDV0QpIGlzIDQgYnl0ZXMKKwkgKi8KKwlpZiAoaG9zdC0+ZGF0YV9kaXIgPT0gREFWSU5DSV9NTUNfREFUQURJUl9XUklURSkgeworCQlmb3IgKGkgPSAwOyBpIDwgKG4gPj4gMik7IGkrKykgeworCQkJd3JpdGVsKCooKHUzMiAqKXApLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNEWFIpOworCQkJcCA9IHAgKyA0OworCQl9CisJCWlmIChuICYgMykgeworCQkJaW93cml0ZThfcmVwKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0RYUiwgcCwgKG4gJiAzKSk7CisJCQlwID0gcCArIChuICYgMyk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgKG4gPj4gMik7IGkrKykgeworCQkJKigodTMyICopcCkgPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNEUlIpOworCQkJcCAgPSBwICsgNDsKKwkJfQorCQlpZiAobiAmIDMpIHsKKwkJCWlvcmVhZDhfcmVwKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0RSUiwgcCwgKG4gJiAzKSk7CisJCQlwID0gcCArIChuICYgMyk7CisJCX0KKwl9CisJaG9zdC0+YnVmZmVyID0gcDsKK30KKworc3RhdGljIHZvaWQgbW1jX2RhdmluY2lfc3RhcnRfY29tbWFuZChzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCwKKwkJc3RydWN0IG1tY19jb21tYW5kICpjbWQpCit7CisJdTMyIGNtZF9yZWcgPSAwOworCXUzMiBpbV92YWw7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRCVkLCBhcmcgMHglMDh4JXNcbiIsCisJCWNtZC0+b3Bjb2RlLCBjbWQtPmFyZywKKwkJKHsgY2hhciAqczsKKwkJc3dpdGNoIChtbWNfcmVzcF90eXBlKGNtZCkpIHsKKwkJY2FzZSBNTUNfUlNQX1IxOgorCQkJcyA9ICIsIFIxL1I1L1I2L1I3IHJlc3BvbnNlIjsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19SU1BfUjFCOgorCQkJcyA9ICIsIFIxYiByZXNwb25zZSI7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfUlNQX1IyOgorCQkJcyA9ICIsIFIyIHJlc3BvbnNlIjsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19SU1BfUjM6CisJCQlzID0gIiwgUjMvUjQgcmVzcG9uc2UiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzID0gIiwgKFI/IHJlc3BvbnNlKSI7CisJCQlicmVhazsKKwkJfTsgczsgfSkpOworCWhvc3QtPmNtZCA9IGNtZDsKKworCXN3aXRjaCAobW1jX3Jlc3BfdHlwZShjbWQpKSB7CisJY2FzZSBNTUNfUlNQX1IxQjoKKwkJLyogVGhlcmUncyBzb21lIHNwZWMgY29uZnVzaW9uIGFib3V0IHdoZW4gUjFCIGlzCisJCSAqIGFsbG93ZWQsIGJ1dCBpZiB0aGUgY2FyZCBkb2Vzbid0IGlzc3VlIGEgQlVTWQorCQkgKiB0aGVuIGl0J3MgaGFybWxlc3MgZm9yIHVzIHRvIGFsbG93IGl0LgorCQkgKi8KKwkJY21kX3JlZyB8PSBNTUNDTURfQlNZRVhQOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgTU1DX1JTUF9SMToJCS8qIDQ4IGJpdHMsIENSQyAqLworCQljbWRfcmVnIHw9IE1NQ0NNRF9SU1BGTVRfUjE0NTY7CisJCWJyZWFrOworCWNhc2UgTU1DX1JTUF9SMjoJCS8qIDEzNiBiaXRzLCBDUkMgKi8KKwkJY21kX3JlZyB8PSBNTUNDTURfUlNQRk1UX1IyOworCQlicmVhazsKKwljYXNlIE1NQ19SU1BfUjM6CQkvKiA0OCBiaXRzLCBubyBDUkMgKi8KKwkJY21kX3JlZyB8PSBNTUNDTURfUlNQRk1UX1IzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljbWRfcmVnIHw9IE1NQ0NNRF9SU1BGTVRfTk9ORTsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJ1bmtub3duIHJlc3BfdHlwZSAlMDR4XG4iLAorCQkJbW1jX3Jlc3BfdHlwZShjbWQpKTsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IGNvbW1hbmQgaW5kZXggKi8KKwljbWRfcmVnIHw9IGNtZC0+b3Bjb2RlOworCisJLyogRW5hYmxlIEVETUEgdHJhbnNmZXIgdHJpZ2dlcnMgKi8KKwlpZiAoaG9zdC0+ZG9fZG1hKQorCQljbWRfcmVnIHw9IE1NQ0NNRF9ETUFUUklHOworCisJaWYgKGhvc3QtPnZlcnNpb24gPT0gTU1DX0NUTFJfVkVSU0lPTl8yICYmIGhvc3QtPmRhdGEgIT0gTlVMTCAmJgorCQkJaG9zdC0+ZGF0YV9kaXIgPT0gREFWSU5DSV9NTUNfREFUQURJUl9SRUFEKQorCQljbWRfcmVnIHw9IE1NQ0NNRF9ETUFUUklHOworCisJLyogU2V0dGluZyB3aGV0aGVyIGNvbW1hbmQgaW52b2x2ZXMgZGF0YSB0cmFuc2ZlciBvciBub3QgKi8KKwlpZiAoY21kLT5kYXRhKQorCQljbWRfcmVnIHw9IE1NQ0NNRF9XREFUWDsKKworCS8qIFNldHRpbmcgd2hldGhlciBzdHJlYW0gb3IgYmxvY2sgdHJhbnNmZXIgKi8KKwlpZiAoY21kLT5mbGFncyAmIE1NQ19EQVRBX1NUUkVBTSkKKwkJY21kX3JlZyB8PSBNTUNDTURfU1RSTVRQOworCisJLyogU2V0dGluZyB3aGV0aGVyIGRhdGEgcmVhZCBvciB3cml0ZSAqLworCWlmIChob3N0LT5kYXRhX2RpciA9PSBEQVZJTkNJX01NQ19EQVRBRElSX1dSSVRFKQorCQljbWRfcmVnIHw9IE1NQ0NNRF9EVFJXOworCisJaWYgKGhvc3QtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX1BVU0hQVUxMKQorCQljbWRfcmVnIHw9IE1NQ0NNRF9QUExFTjsKKworCS8qIHNldCBDb21tYW5kIHRpbWVvdXQgKi8KKwl3cml0ZWwoMHgxRkZGLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNUT1IpOworCisJLyogRW5hYmxlIGludGVycnVwdCAoY2FsY3VsYXRlIGhlcmUsIGRlZmVyIHVudGlsIEZJRk8gaXMgc3R1ZmZlZCkuICovCisJaW1fdmFsID0gIE1NQ1NUMF9SU1BETkUgfCBNTUNTVDBfQ1JDUlMgfCBNTUNTVDBfVE9VVFJTOworCWlmIChob3N0LT5kYXRhX2RpciA9PSBEQVZJTkNJX01NQ19EQVRBRElSX1dSSVRFKSB7CisJCWltX3ZhbCB8PSBNTUNTVDBfREFURE5FIHwgTU1DU1QwX0NSQ1dSOworCisJCWlmICghaG9zdC0+ZG9fZG1hKQorCQkJaW1fdmFsIHw9IE1NQ1NUMF9EWFJEWTsKKwl9IGVsc2UgaWYgKGhvc3QtPmRhdGFfZGlyID09IERBVklOQ0lfTU1DX0RBVEFESVJfUkVBRCkgeworCQlpbV92YWwgfD0gTU1DU1QwX0RBVERORSB8IE1NQ1NUMF9DUkNSRCB8IE1NQ1NUMF9UT1VUUkQ7CisKKwkJaWYgKCFob3N0LT5kb19kbWEpCisJCQlpbV92YWwgfD0gTU1DU1QwX0RSUkRZOworCX0KKworCS8qCisJICogQmVmb3JlIG5vbi1ETUEgV1JJVEUgY29tbWFuZHMgdGhlIGNvbnRyb2xsZXIgbmVlZHMgcHJpbWluZzoKKwkgKiBGSUZPIHNob3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCAzMiBieXRlcyBpLmUuIHdoYXRldmVyIGlzIHRoZSBGSUZPIHNpemUKKwkgKi8KKwlpZiAoIWhvc3QtPmRvX2RtYSAmJiAoaG9zdC0+ZGF0YV9kaXIgPT0gREFWSU5DSV9NTUNfREFUQURJUl9XUklURSkpCisJCWRhdmluY2lfZmlmb19kYXRhX3RyYW5zKGhvc3QsIHJ3X3RocmVzaG9sZCk7CisKKwl3cml0ZWwoY21kLT5hcmcsIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0FSR0hMKTsKKwl3cml0ZWwoY21kX3JlZywgIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NNRCk7CisJd3JpdGVsKGltX3ZhbCwgaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DSU0pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBETUEgaW5mcmFzdHJ1Y3R1cmUgKi8KKworc3RhdGljIHZvaWQgZGF2aW5jaV9hYm9ydF9kbWEoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QpCit7CisJaW50IHN5bmNfZGV2OworCisJaWYgKGhvc3QtPmRhdGFfZGlyID09IERBVklOQ0lfTU1DX0RBVEFESVJfUkVBRCkKKwkJc3luY19kZXYgPSBob3N0LT5yeGRtYTsKKwllbHNlCisJCXN5bmNfZGV2ID0gaG9zdC0+dHhkbWE7CisKKwllZG1hX3N0b3Aoc3luY19kZXYpOworCWVkbWFfY2xlYW5fY2hhbm5lbChzeW5jX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkCittbWNfZGF2aW5jaV94ZmVyX2RvbmUoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2RtYV9jYih1bnNpZ25lZCBjaGFubmVsLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCWlmIChETUFfQ09NUExFVEUgIT0gY2hfc3RhdHVzKSB7CisJCXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0ID0gZGF0YTsKKworCQkvKiBDdXJyZW50bHkgbWVhbnM6ICBETUEgRXZlbnQgTWlzc2VkLCBvciAibnVsbCIgdHJhbnNmZXIKKwkJICogcmVxdWVzdCB3YXMgc2Vlbi4gIEluIHRoZSBmdXR1cmUsIFRDIGVycm9ycyAobGlrZSBiYWQKKwkJICogYWRkcmVzc2VzKSBtaWdodCBiZSBwcmVzZW50ZWQgdG9vLgorCQkgKi8KKwkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiRE1BICVzIGVycm9yXG4iLAorCQkJKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQkJPyAid3JpdGUiIDogInJlYWQiKTsKKwkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRUlPOworCQltbWNfZGF2aW5jaV94ZmVyX2RvbmUoaG9zdCwgaG9zdC0+ZGF0YSk7CisJfQorfQorCisvKiBTZXQgdXAgdHggb3IgcnggdGVtcGxhdGUsIHRvIGJlIG1vZGlmaWVkIGFuZCB1cGRhdGVkIGxhdGVyICovCitzdGF0aWMgdm9pZCBfX2luaXQgbW1jX2RhdmluY2lfZG1hX3NldHVwKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LAorCQlib29sIHR4LCBzdHJ1Y3QgZWRtYWNjX3BhcmFtICp0ZW1wbGF0ZSkKK3sKKwl1bnNpZ25lZAlzeW5jX2RldjsKKwljb25zdCB1MTYJYWNudCA9IDQ7CisJY29uc3QgdTE2CWJjbnQgPSByd190aHJlc2hvbGQgPj4gMjsKKwljb25zdCB1MTYJY2NudCA9IDA7CisJdTMyCQlzcmNfcG9ydCA9IDA7CisJdTMyCQlkc3RfcG9ydCA9IDA7CisJczE2CQlzcmNfYmlkeCwgZHN0X2JpZHg7CisJczE2CQlzcmNfY2lkeCwgZHN0X2NpZHg7CisKKwkvKgorCSAqIEEtQiBTeW5jIHRyYW5zZmVyOiAgZWFjaCBETUEgcmVxdWVzdCBpcyBmb3Igb25lICJmcmFtZSIgb2YKKwkgKiByd190aHJlc2hvbGQgYnl0ZXMsIGJyb2tlbiBpbnRvICJhY250Ii1zaXplIGNodW5rcyByZXBlYXRlZAorCSAqICJiY250IiB0aW1lcy4gIEVhY2ggc2VnbWVudCBuZWVkcyAiY2NudCIgc3VjaCBmcmFtZXM7IHNpbmNlCisJICogd2UgdGVsbCB0aGUgYmxvY2sgbGF5ZXIgb3VyIG1tYy0+bWF4X3NlZ19zaXplIGxpbWl0LCB3ZSBjYW4KKwkgKiB0cnVzdCAobGF0ZXIpIHRoYXQgaXQncyB3aXRoaW4gYm91bmRzLgorCSAqCisJICogVGhlIEZJRk9zIGFyZSByZWFkL3dyaXR0ZW4gaW4gNC1ieXRlIGNodW5rcyAoYWNudCA9PSA0KSBhbmQKKwkgKiBFRE1BIHdpbGwgb3B0aW1pemUgbWVtb3J5IG9wZXJhdGlvbnMgdG8gdXNlIGxhcmdlciBidXJzdHMuCisJICovCisJaWYgKHR4KSB7CisJCXN5bmNfZGV2ID0gaG9zdC0+dHhkbWE7CisKKwkJLyogc3JjX3BydCwgY2NudCwgYW5kIGxpbmsgdG8gYmUgc2V0IHVwIGxhdGVyICovCisJCXNyY19iaWR4ID0gYWNudDsKKwkJc3JjX2NpZHggPSBhY250ICogYmNudDsKKworCQlkc3RfcG9ydCA9IGhvc3QtPm1lbV9yZXMtPnN0YXJ0ICsgREFWSU5DSV9NTUNEWFI7CisJCWRzdF9iaWR4ID0gMDsKKwkJZHN0X2NpZHggPSAwOworCX0gZWxzZSB7CisJCXN5bmNfZGV2ID0gaG9zdC0+cnhkbWE7CisKKwkJc3JjX3BvcnQgPSBob3N0LT5tZW1fcmVzLT5zdGFydCArIERBVklOQ0lfTU1DRFJSOworCQlzcmNfYmlkeCA9IDA7CisJCXNyY19jaWR4ID0gMDsKKworCQkvKiBkc3RfcHJ0LCBjY250LCBhbmQgbGluayB0byBiZSBzZXQgdXAgbGF0ZXIgKi8KKwkJZHN0X2JpZHggPSBhY250OworCQlkc3RfY2lkeCA9IGFjbnQgKiBiY250OworCX0KKworCS8qCisJICogV2UgY2FuJ3QgdXNlIEZJRk8gbW9kZSBmb3IgdGhlIEZJRk9zIGJlY2F1c2UgTU1DIEZJRk8gYWRkcmVzc2VzCisJICogYXJlIG5vdCAyNTYtYml0ICgzMi1ieXRlKSBhbGlnbmVkLiAgU28gd2UgdXNlIElOQ1IsIGFuZCB0aGUgVzhCSVQKKwkgKiBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKwkgKi8KKwllZG1hX3NldF9zcmMoc3luY19kZXYsIHNyY19wb3J0LCBJTkNSLCBXOEJJVCk7CisJZWRtYV9zZXRfZGVzdChzeW5jX2RldiwgZHN0X3BvcnQsIElOQ1IsIFc4QklUKTsKKworCWVkbWFfc2V0X3NyY19pbmRleChzeW5jX2Rldiwgc3JjX2JpZHgsIHNyY19jaWR4KTsKKwllZG1hX3NldF9kZXN0X2luZGV4KHN5bmNfZGV2LCBkc3RfYmlkeCwgZHN0X2NpZHgpOworCisJZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKHN5bmNfZGV2LCBhY250LCBiY250LCBjY250LCA4LCBBQlNZTkMpOworCisJZWRtYV9yZWFkX3Nsb3Qoc3luY19kZXYsIHRlbXBsYXRlKTsKKworCS8qIGRvbid0IGJvdGhlciB3aXRoIGlycXMgb3IgY2hhaW5pbmcgKi8KKwl0ZW1wbGF0ZS0+b3B0IHw9IEVETUFfQ0hBTl9TTE9UKHN5bmNfZGV2KSA8PCAxMjsKK30KKworc3RhdGljIHZvaWQgbW1jX2RhdmluY2lfc2VuZF9kbWFfcmVxdWVzdChzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCwKKwkJc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXN0cnVjdCBlZG1hY2NfcGFyYW0JKnRlbXBsYXRlOworCWludAkJCWNoYW5uZWwsIHNsb3Q7CisJdW5zaWduZWQJCWxpbms7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwl1bnNpZ25lZAkJc2dfbGVuOworCXVuc2lnbmVkCQlieXRlc19sZWZ0ID0gaG9zdC0+Ynl0ZXNfbGVmdDsKKwljb25zdCB1bnNpZ25lZAkJc2hpZnQgPSBmZnMocndfdGhyZXNob2xkKSAtIDE7OworCisJaWYgKGhvc3QtPmRhdGFfZGlyID09IERBVklOQ0lfTU1DX0RBVEFESVJfV1JJVEUpIHsKKwkJdGVtcGxhdGUgPSAmaG9zdC0+dHhfdGVtcGxhdGU7CisJCWNoYW5uZWwgPSBob3N0LT50eGRtYTsKKwl9IGVsc2UgeworCQl0ZW1wbGF0ZSA9ICZob3N0LT5yeF90ZW1wbGF0ZTsKKwkJY2hhbm5lbCA9IGhvc3QtPnJ4ZG1hOworCX0KKworCS8qIFdlIGtub3cgc2dfbGVuIGFuZCBjY250IHdpbGwgbmV2ZXIgYmUgb3V0IG9mIHJhbmdlIGJlY2F1c2UKKwkgKiB3ZSB0b2xkIHRoZSBtbWMgbGF5ZXIgd2hpY2ggaW4gdHVybiB0ZWxscyB0aGUgYmxvY2sgbGF5ZXIKKwkgKiB0byBlbnN1cmUgdGhhdCBpdCBvbmx5IGhhbmRzIHVzIG9uZSBzY2F0dGVybGlzdCBzZWdtZW50CisJICogcGVyIEVETUEgUEFSQU0gZW50cnkuICBVcGRhdGUgdGhlIFBBUkFNCisJICogZW50cmllcyBuZWVkZWQgZm9yIGVhY2ggc2VnbWVudCBvZiB0aGlzIHNjYXR0ZXJsaXN0LgorCSAqLworCWZvciAoc2xvdCA9IGNoYW5uZWwsIGxpbmsgPSAwLCBzZyA9IGRhdGEtPnNnLCBzZ19sZW4gPSBob3N0LT5zZ19sZW47CisJCQlzZ19sZW4tLSAhPSAwICYmIGJ5dGVzX2xlZnQ7CisJCQlzZyA9IHNnX25leHQoc2cpLCBzbG90ID0gaG9zdC0+bGlua3NbbGluaysrXSkgeworCQl1MzIJCWJ1ZiA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJdW5zaWduZWQJY291bnQgPSBzZ19kbWFfbGVuKHNnKTsKKworCQl0ZW1wbGF0ZS0+bGlua19iY250cmxkID0gc2dfbGVuCisJCQkJPyAoRURNQV9DSEFOX1NMT1QoaG9zdC0+bGlua3NbbGlua10pIDw8IDUpCisJCQkJOiAweGZmZmY7CisKKwkJaWYgKGNvdW50ID4gYnl0ZXNfbGVmdCkKKwkJCWNvdW50ID0gYnl0ZXNfbGVmdDsKKwkJYnl0ZXNfbGVmdCAtPSBjb3VudDsKKworCQlpZiAoaG9zdC0+ZGF0YV9kaXIgPT0gREFWSU5DSV9NTUNfREFUQURJUl9XUklURSkKKwkJCXRlbXBsYXRlLT5zcmMgPSBidWY7CisJCWVsc2UKKwkJCXRlbXBsYXRlLT5kc3QgPSBidWY7CisJCXRlbXBsYXRlLT5jY250ID0gY291bnQgPj4gc2hpZnQ7CisKKwkJZWRtYV93cml0ZV9zbG90KHNsb3QsIHRlbXBsYXRlKTsKKwl9CisKKwlpZiAoaG9zdC0+dmVyc2lvbiA9PSBNTUNfQ1RMUl9WRVJTSU9OXzIpCisJCWVkbWFfY2xlYXJfZXZlbnQoY2hhbm5lbCk7CisKKwllZG1hX3N0YXJ0KGNoYW5uZWwpOworfQorCitzdGF0aWMgaW50IG1tY19kYXZpbmNpX3N0YXJ0X2RtYV90cmFuc2ZlcihzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCwKKwkJc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWludCBpOworCWludCBtYXNrID0gcndfdGhyZXNob2xkIC0gMTsKKworCWhvc3QtPnNnX2xlbiA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAorCQkJCSgoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQk6IERNQV9GUk9NX0RFVklDRSkpOworCisJLyogbm8gaW5kaXZpZHVhbCBETUEgc2VnbWVudCBzaG91bGQgbmVlZCBhIHBhcnRpYWwgRklGTyAqLworCWZvciAoaSA9IDA7IGkgPCBob3N0LT5zZ19sZW47IGkrKykgeworCQlpZiAoc2dfZG1hX2xlbihkYXRhLT5zZyArIGkpICYgbWFzaykgeworCQkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkJZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKKwkJCQkJKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlob3N0LT5kb19kbWEgPSAxOworCW1tY19kYXZpbmNpX3NlbmRfZG1hX3JlcXVlc3QoaG9zdCwgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZQorZGF2aW5jaV9yZWxlYXNlX2RtYV9jaGFubmVscyhzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZAlpOworCisJaWYgKCFob3N0LT51c2VfZG1hKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9saW5rOyBpKyspCisJCWVkbWFfZnJlZV9zbG90KGhvc3QtPmxpbmtzW2ldKTsKKworCWVkbWFfZnJlZV9jaGFubmVsKGhvc3QtPnR4ZG1hKTsKKwllZG1hX2ZyZWVfY2hhbm5lbChob3N0LT5yeGRtYSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfYWNxdWlyZV9kbWFfY2hhbm5lbHMoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QpCit7CisJaW50IHIsIGk7CisKKwkvKiBBY3F1aXJlIG1hc3RlciBETUEgd3JpdGUgY2hhbm5lbCAqLworCXIgPSBlZG1hX2FsbG9jX2NoYW5uZWwoaG9zdC0+dHhkbWEsIG1tY19kYXZpbmNpX2RtYV9jYiwgaG9zdCwKKwkJCUVWRU5UUV9ERUZBVUxUKTsKKwlpZiAociA8IDApIHsKKwkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiYWxsb2MgJXMgY2hhbm5lbCBlcnIgJWRcbiIsCisJCQkJInR4Iiwgcik7CisJCXJldHVybiByOworCX0KKwltbWNfZGF2aW5jaV9kbWFfc2V0dXAoaG9zdCwgdHJ1ZSwgJmhvc3QtPnR4X3RlbXBsYXRlKTsKKworCS8qIEFjcXVpcmUgbWFzdGVyIERNQSByZWFkIGNoYW5uZWwgKi8KKwlyID0gZWRtYV9hbGxvY19jaGFubmVsKGhvc3QtPnJ4ZG1hLCBtbWNfZGF2aW5jaV9kbWFfY2IsIGhvc3QsCisJCQlFVkVOVFFfREVGQVVMVCk7CisJaWYgKHIgPCAwKSB7CisJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgImFsbG9jICVzIGNoYW5uZWwgZXJyICVkXG4iLAorCQkJCSJyeCIsIHIpOworCQlnb3RvIGZyZWVfbWFzdGVyX3dyaXRlOworCX0KKwltbWNfZGF2aW5jaV9kbWFfc2V0dXAoaG9zdCwgZmFsc2UsICZob3N0LT5yeF90ZW1wbGF0ZSk7CisKKwkvKiBBbGxvY2F0ZSBwYXJhbWV0ZXIgUkFNIHNsb3RzLCB3aGljaCB3aWxsIGxhdGVyIGJlIGJvdW5kIHRvIGEKKwkgKiBjaGFubmVsIGFzIG5lZWRlZCB0byBoYW5kbGUgYSBzY2F0dGVybGlzdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShob3N0LT5saW5rcyk7IGkrKykgeworCQlyID0gZWRtYV9hbGxvY19zbG90KEVETUFfQ1RMUihob3N0LT50eGRtYSksIEVETUFfU0xPVF9BTlkpOworCQlpZiAociA8IDApIHsKKwkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiZG1hIFBhUkFNIGFsbG9jIC0tPiAlZFxuIiwKKwkJCQlyKTsKKwkJCWJyZWFrOworCQl9CisJCWhvc3QtPmxpbmtzW2ldID0gcjsKKwl9CisJaG9zdC0+bl9saW5rID0gaTsKKworCXJldHVybiAwOworCitmcmVlX21hc3Rlcl93cml0ZToKKwllZG1hX2ZyZWVfY2hhbm5lbChob3N0LT50eGRtYSk7CisKKwlyZXR1cm4gcjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK21tY19kYXZpbmNpX3ByZXBhcmVfZGF0YShzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCit7CisJaW50IGZpZm9fbGV2ID0gKHJ3X3RocmVzaG9sZCA9PSAzMikgPyBNTUNGSUZPQ1RMX0ZJRk9MRVYgOiAwOworCWludCB0aW1lb3V0OworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IHJlcS0+ZGF0YTsKKworCWlmIChob3N0LT52ZXJzaW9uID09IE1NQ19DVExSX1ZFUlNJT05fMikKKwkJZmlmb19sZXYgPSAocndfdGhyZXNob2xkID09IDY0KSA/IE1NQ0ZJRk9DVExfRklGT0xFViA6IDA7CisKKwlob3N0LT5kYXRhID0gZGF0YTsKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWhvc3QtPmRhdGFfZGlyID0gREFWSU5DSV9NTUNfREFUQURJUl9OT05FOworCQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQkxFTik7CisJCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNOQkxLKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgJXMsICVkIGJsb2NrcyBvZiAlZCBieXRlc1xuIiwKKwkJKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfU1RSRUFNKSA/ICJzdHJlYW0iIDogImJsb2NrIiwKKwkJKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpID8gIndyaXRlIiA6ICJyZWFkIiwKKwkJZGF0YS0+YmxvY2tzLCBkYXRhLT5ibGtzeik7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIgIERUTyAlZCBjeWNsZXMgKyAlZCBuc1xuIiwKKwkJZGF0YS0+dGltZW91dF9jbGtzLCBkYXRhLT50aW1lb3V0X25zKTsKKwl0aW1lb3V0ID0gZGF0YS0+dGltZW91dF9jbGtzICsKKwkJKGRhdGEtPnRpbWVvdXRfbnMgLyBob3N0LT5uc19pbl9vbmVfY3ljbGUpOworCWlmICh0aW1lb3V0ID4gMHhmZmZmKQorCQl0aW1lb3V0ID0gMHhmZmZmOworCisJd3JpdGVsKHRpbWVvdXQsIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ1RPRCk7CisJd3JpdGVsKGRhdGEtPmJsb2NrcywgaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DTkJMSyk7CisJd3JpdGVsKGRhdGEtPmJsa3N6LCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNCTEVOKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgRklGTyAqLworCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCWNhc2UgTU1DX0RBVEFfV1JJVEU6CisJCWhvc3QtPmRhdGFfZGlyID0gREFWSU5DSV9NTUNfREFUQURJUl9XUklURTsKKwkJd3JpdGVsKGZpZm9fbGV2IHwgTU1DRklGT0NUTF9GSUZPRElSX1dSIHwgTU1DRklGT0NUTF9GSUZPUlNULAorCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DRklGT0NUTCk7CisJCXdyaXRlbChmaWZvX2xldiB8IE1NQ0ZJRk9DVExfRklGT0RJUl9XUiwKKwkJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0ZJRk9DVEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWhvc3QtPmRhdGFfZGlyID0gREFWSU5DSV9NTUNfREFUQURJUl9SRUFEOworCQl3cml0ZWwoZmlmb19sZXYgfCBNTUNGSUZPQ1RMX0ZJRk9ESVJfUkQgfCBNTUNGSUZPQ1RMX0ZJRk9SU1QsCisJCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNGSUZPQ1RMKTsKKwkJd3JpdGVsKGZpZm9fbGV2IHwgTU1DRklGT0NUTF9GSUZPRElSX1JELAorCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DRklGT0NUTCk7CisJCWJyZWFrOworCX0KKworCWhvc3QtPmJ1ZmZlciA9IE5VTEw7CisJaG9zdC0+Ynl0ZXNfbGVmdCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OworCisJLyogRm9yIG5vdyB3ZSB0cnkgdG8gdXNlIERNQSB3aGVuZXZlciB3ZSB3b24ndCBuZWVkIHBhcnRpYWwgRklGTworCSAqIHJlYWRzIG9yIHdyaXRlcywgZWl0aGVyIGZvciB0aGUgd2hvbGUgdHJhbnNmZXIgKGFzIHRlc3RlZCBoZXJlKQorCSAqIG9yIGZvciBhbnkgaW5kaXZpZHVhbCBzY2F0dGVybGlzdCBzZWdtZW50ICh0ZXN0ZWQgd2hlbiB3ZSBjYWxsCisJICogc3RhcnRfZG1hX3RyYW5zZmVyKS4KKwkgKgorCSAqIFdoaWxlIHdlICpjb3VsZCogY2hhbmdlIHRoYXQsIHVudXN1YWwgYmxvY2sgc2l6ZXMgYXJlIHJhcmVseQorCSAqIHVzZWQuICBUaGUgb2NjYXNpb25hbCBmYWxsYmFjayB0byBQSU8gc2hvdWxkJ3QgaHVydC4KKwkgKi8KKwlpZiAoaG9zdC0+dXNlX2RtYSAmJiAoaG9zdC0+Ynl0ZXNfbGVmdCAmIChyd190aHJlc2hvbGQgLSAxKSkgPT0gMAorCQkJJiYgbW1jX2RhdmluY2lfc3RhcnRfZG1hX3RyYW5zZmVyKGhvc3QsIGRhdGEpID09IDApIHsKKwkJLyogemVybyB0aGlzIHRvIGVuc3VyZSB3ZSB0YWtlIG5vIFBJTyBwYXRocyAqLworCQlob3N0LT5ieXRlc19sZWZ0ID0gMDsKKwl9IGVsc2UgeworCQkvKiBSZXZlcnQgdG8gQ1BVIENvcHkgKi8KKwkJaG9zdC0+c2dfbGVuID0gZGF0YS0+c2dfbGVuOworCQlob3N0LT5zZyA9IGhvc3QtPmRhdGEtPnNnOworCQltbWNfZGF2aW5jaV9zZ190b19idWYoaG9zdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtbWNfZGF2aW5jaV9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoOTAwKTsKKwl1MzIgbW1jc3QxID0gMDsKKworCS8qIENhcmQgbWF5IHN0aWxsIGJlIHNlbmRpbmcgQlVTWSBhZnRlciBhIHByZXZpb3VzIG9wZXJhdGlvbiwKKwkgKiB0eXBpY2FsbHkgc29tZSBraW5kIG9mIHdyaXRlLiAgSWYgc28sIHdlIGNhbid0IHByb2NlZWQgeWV0LgorCSAqLworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQltbWNzdDEgID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DU1QxKTsKKwkJaWYgKCEobW1jc3QxICYgTU1DU1QxX0JVU1kpKQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0KKwlpZiAobW1jc3QxICYgTU1DU1QxX0JVU1kpIHsKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJzdGlsbCBCVVNZPyBiYWQgLi4uIFxuIik7CisJCXJlcS0+Y21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCW1tY19yZXF1ZXN0X2RvbmUobW1jLCByZXEpOworCQlyZXR1cm47CisJfQorCisJaG9zdC0+ZG9fZG1hID0gMDsKKwltbWNfZGF2aW5jaV9wcmVwYXJlX2RhdGEoaG9zdCwgcmVxKTsKKwltbWNfZGF2aW5jaV9zdGFydF9jb21tYW5kKGhvc3QsIHJlcS0+Y21kKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfZnJlcV9mb3JfY2FyZChzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCwKKwl1bnNpZ25lZCBpbnQgbW1jX3JlcV9mcmVxKQoreworCXVuc2lnbmVkIGludCBtbWNfZnJlcSA9IDAsIG1tY19wY2xrID0gMCwgbW1jX3B1c2hfcHVsbF9kaXZpc29yID0gMDsKKworCW1tY19wY2xrID0gaG9zdC0+bW1jX2lucHV0X2NsazsKKwlpZiAobW1jX3JlcV9mcmVxICYmIG1tY19wY2xrID4gKDIgKiBtbWNfcmVxX2ZyZXEpKQorCQltbWNfcHVzaF9wdWxsX2Rpdmlzb3IgPSAoKHVuc2lnbmVkIGludCltbWNfcGNsaworCQkJCS8gKDIgKiBtbWNfcmVxX2ZyZXEpKSAtIDE7CisJZWxzZQorCQltbWNfcHVzaF9wdWxsX2Rpdmlzb3IgPSAwOworCisJbW1jX2ZyZXEgPSAodW5zaWduZWQgaW50KW1tY19wY2xrCisJCS8gKDIgKiAobW1jX3B1c2hfcHVsbF9kaXZpc29yICsgMSkpOworCisJaWYgKG1tY19mcmVxID4gbW1jX3JlcV9mcmVxKQorCQltbWNfcHVzaF9wdWxsX2Rpdmlzb3IgPSBtbWNfcHVzaF9wdWxsX2Rpdmlzb3IgKyAxOworCS8qIENvbnZlcnQgbnMgdG8gY2xvY2sgY3ljbGVzICovCisJaWYgKG1tY19yZXFfZnJlcSA8PSA0MDAwMDApCisJCWhvc3QtPm5zX2luX29uZV9jeWNsZSA9ICgxMDAwMDAwKSAvICgoKG1tY19wY2xrCisJCQkJLyAoMiAqIChtbWNfcHVzaF9wdWxsX2Rpdmlzb3IgKyAxKSkpLzEwMDApKTsKKwllbHNlCisJCWhvc3QtPm5zX2luX29uZV9jeWNsZSA9ICgxMDAwMDAwKSAvICgoKG1tY19wY2xrCisJCQkJLyAoMiAqIChtbWNfcHVzaF9wdWxsX2Rpdmlzb3IgKyAxKSkpLzEwMDAwMDApKTsKKworCXJldHVybiBtbWNfcHVzaF9wdWxsX2Rpdmlzb3I7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV9jbGtfZGl2aWRlcihzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwl1bnNpZ25lZCBpbnQgb3Blbl9kcmFpbl9mcmVxID0gMCwgbW1jX3BjbGsgPSAwOworCXVuc2lnbmVkIGludCBtbWNfcHVzaF9wdWxsX2ZyZXEgPSAwOworCXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChpb3MtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTikgeworCQl1MzIgdGVtcDsKKworCQkvKiBJZ25vcmluZyB0aGUgaW5pdCBjbG9jayB2YWx1ZSBwYXNzZWQgZm9yIGZpeGluZyB0aGUgaW50ZXIKKwkJICogb3BlcmFiaWxpdHkgd2l0aCBkaWZmZXJlbnQgY2FyZHMuCisJCSAqLworCQlvcGVuX2RyYWluX2ZyZXEgPSAoKHVuc2lnbmVkIGludCltbWNfcGNsaworCQkJCS8gKDIgKiBNTUNTRF9JTklUX0NMT0NLKSkgLSAxOworCisJCWlmIChvcGVuX2RyYWluX2ZyZXEgPiAweEZGKQorCQkJb3Blbl9kcmFpbl9mcmVxID0gMHhGRjsKKworCQl0ZW1wID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ0xLKSAmIH5NTUNDTEtfQ0xLUlRfTUFTSzsKKwkJdGVtcCB8PSBvcGVuX2RyYWluX2ZyZXE7CisJCXdyaXRlbCh0ZW1wLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDTEspOworCisJCS8qIENvbnZlcnQgbnMgdG8gY2xvY2sgY3ljbGVzICovCisJCWhvc3QtPm5zX2luX29uZV9jeWNsZSA9ICgxMDAwMDAwKSAvIChNTUNTRF9JTklUX0NMT0NLLzEwMDApOworCX0gZWxzZSB7CisJCXUzMiB0ZW1wOworCQltbWNfcHVzaF9wdWxsX2ZyZXEgPSBjYWxjdWxhdGVfZnJlcV9mb3JfY2FyZChob3N0LCBpb3MtPmNsb2NrKTsKKworCQlpZiAobW1jX3B1c2hfcHVsbF9mcmVxID4gMHhGRikKKwkJCW1tY19wdXNoX3B1bGxfZnJlcSA9IDB4RkY7CisKKwkJdGVtcCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NMSykgJiB+TU1DQ0xLX0NMS0VOOworCQl3cml0ZWwodGVtcCwgaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ0xLKTsKKworCQl1ZGVsYXkoMTApOworCisJCXRlbXAgPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDTEspICYgfk1NQ0NMS19DTEtSVF9NQVNLOworCQl0ZW1wIHw9IG1tY19wdXNoX3B1bGxfZnJlcTsKKwkJd3JpdGVsKHRlbXAsIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NMSyk7CisKKwkJd3JpdGVsKHRlbXAgfCBNTUNDTEtfQ0xLRU4sIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NMSyk7CisKKwkJdWRlbGF5KDEwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1tY19kYXZpbmNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJdW5zaWduZWQgaW50IG1tY19wY2xrID0gMDsKKwlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwltbWNfcGNsayA9IGhvc3QtPm1tY19pbnB1dF9jbGs7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCSJjbG9jayAlZEh6IGJ1c21vZGUgJWQgcG93ZXJtb2RlICVkIFZkZCAlMDR4XG4iLAorCQlpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsCisJCWlvcy0+dmRkKTsKKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRW5hYmxpbmcgNCBiaXQgbW9kZVxuIik7CisJCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpIHwgTU1DQ1RMX1dJRFRIXzRfQklULAorCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkRpc2FibGluZyA0IGJpdCBtb2RlXG4iKTsKKwkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgJiB+TU1DQ1RMX1dJRFRIXzRfQklULAorCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwl9CisKKwljYWxjdWxhdGVfY2xrX2RpdmlkZXIobW1jLCBpb3MpOworCisJaG9zdC0+YnVzX21vZGUgPSBpb3MtPmJ1c19tb2RlOworCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7CisJCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKKwkJYm9vbCBsb3NlID0gdHJ1ZTsKKworCQkvKiBTZW5kIGNsb2NrIGN5Y2xlcywgcG9sbCBjb21wbGV0aW9uICovCisJCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNBUkdITCk7CisJCXdyaXRlbChNTUNDTURfSU5JVENLLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDTUQpOworCQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXUzMiB0bXAgPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNTVDApOworCisJCQlpZiAodG1wICYgTU1DU1QwX1JTUERORSkgeworCQkJCWxvc2UgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNwdV9yZWxheCgpOworCQl9CisJCWlmIChsb3NlKQorCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAicG93ZXJ1cCB0aW1lb3V0XG4iKTsKKwl9CisKKwkvKiBGSVhNRSBvbiBwb3dlciBPRkYsIHJlc2V0IHRoaW5ncyAuLi4gKi8KK30KKworc3RhdGljIHZvaWQKK21tY19kYXZpbmNpX3hmZXJfZG9uZShzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWhvc3QtPmRhdGEgPSBOVUxMOworCisJaWYgKGhvc3QtPmRvX2RtYSkgeworCQlkYXZpbmNpX2Fib3J0X2RtYShob3N0KTsKKworCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAorCQkJICAgICAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJCSAgICAgPyBETUFfVE9fREVWSUNFCisJCQkgICAgIDogRE1BX0ZST01fREVWSUNFKTsKKwkJaG9zdC0+ZG9fZG1hID0gZmFsc2U7CisJfQorCWhvc3QtPmRhdGFfZGlyID0gREFWSU5DSV9NTUNfREFUQURJUl9OT05FOworCisJaWYgKCFkYXRhLT5zdG9wIHx8IChob3N0LT5jbWQgJiYgaG9zdC0+Y21kLT5lcnJvcikpIHsKKwkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIGRhdGEtPm1ycSk7CisJCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNJTSk7CisJfSBlbHNlCisJCW1tY19kYXZpbmNpX3N0YXJ0X2NvbW1hbmQoaG9zdCwgZGF0YS0+c3RvcCk7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2NtZF9kb25lKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LAorCQkJCSBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlob3N0LT5jbWQgPSBOVUxMOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikgeworCQkJLyogcmVzcG9uc2UgdHlwZSAyICovCisJCQljbWQtPnJlc3BbM10gPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNSU1AwMSk7CisJCQljbWQtPnJlc3BbMl0gPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNSU1AyMyk7CisJCQljbWQtPnJlc3BbMV0gPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNSU1A0NSk7CisJCQljbWQtPnJlc3BbMF0gPSByZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNSU1A2Nyk7CisJCX0gZWxzZSB7CisJCQkvKiByZXNwb25zZSB0eXBlcyAxLCAxYiwgMywgNCwgNSwgNiAqLworCQkJY21kLT5yZXNwWzBdID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DUlNQNjcpOworCQl9CisJfQorCisJaWYgKGhvc3QtPmRhdGEgPT0gTlVMTCB8fCBjbWQtPmVycm9yKSB7CisJCWlmIChjbWQtPmVycm9yID09IC1FVElNRURPVVQpCisJCQljbWQtPm1ycS0+Y21kLT5yZXRyaWVzID0gMDsKKwkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIGNtZC0+bXJxKTsKKwkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0lNKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkYXZpbmNpX2Fib3J0X2RhdGEoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwl1MzIgdGVtcDsKKworCS8qIHJlc2V0IGNvbW1hbmQgYW5kIGRhdGEgc3RhdGUgbWFjaGluZXMgKi8KKwl0ZW1wID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwl3cml0ZWwodGVtcCB8IE1NQ0NUTF9DTURSU1QgfCBNTUNDVExfREFUUlNULAorCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCisJdGVtcCAmPSB+KE1NQ0NUTF9DTURSU1QgfCBNTUNDVExfREFUUlNUKTsKKwl1ZGVsYXkoMTApOworCXdyaXRlbCh0ZW1wLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbW1jX2RhdmluY2lfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqKWRldl9pZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBxc3RhdHVzOworCWludCBlbmRfY29tbWFuZCA9IDA7CisJaW50IGVuZF90cmFuc2ZlciA9IDA7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKKworCWlmIChob3N0LT5jbWQgPT0gTlVMTCAmJiBob3N0LT5kYXRhID09IE5VTEwpIHsKKwkJc3RhdHVzID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DU1QwKTsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkiU3B1cmlvdXMgaW50ZXJydXB0IDB4JTA0eFxuIiwgc3RhdHVzKTsKKwkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IGZyb20gbW1jc2QgKi8KKwkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0lNKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXN0YXR1cyA9IHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ1NUMCk7CisJcXN0YXR1cyA9IHN0YXR1czsKKworCS8qIGhhbmRsZSBGSUZPIGZpcnN0IHdoZW4gdXNpbmcgUElPIGZvciBkYXRhLgorCSAqIGJ5dGVzX2xlZnQgd2lsbCBkZWNyZWFzZSB0byB6ZXJvIGFzIEkvTyBwcm9ncmVzcyBhbmQgc3RhdHVzIHdpbGwKKwkgKiByZWFkIHplcm8gb3ZlciBpdGVyYXRpb24gYmVjYXVzZSB0aGlzIGNvbnRyb2xsZXIgc3RhdHVzCisJICogcmVnaXN0ZXIoTU1DU1QwKSByZXBvcnRzIGFueSBzdGF0dXMgb25seSBvbmNlIGFuZCBpdCBpcyBjbGVhcmVkCisJICogYnkgcmVhZC4gU28sIGl0IGlzIG5vdCB1bmJvdW5lZCBsb29wIGV2ZW4gaW4gdGhlIGNhc2Ugb2YKKwkgKiBub24tZG1hLgorCSAqLworCXdoaWxlIChob3N0LT5ieXRlc19sZWZ0ICYmIChzdGF0dXMgJiAoTU1DU1QwX0RYUkRZIHwgTU1DU1QwX0RSUkRZKSkpIHsKKwkJZGF2aW5jaV9maWZvX2RhdGFfdHJhbnMoaG9zdCwgcndfdGhyZXNob2xkKTsKKwkJc3RhdHVzID0gcmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DU1QwKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlicmVhazsKKwkJcXN0YXR1cyB8PSBzdGF0dXM7CisJfQorCisJaWYgKHFzdGF0dXMgJiBNTUNTVDBfREFURE5FKSB7CisJCS8qIEFsbCBibG9ja3Mgc2VudC9yZWNlaXZlZCwgYW5kIENSQyBjaGVja3MgcGFzc2VkICovCisJCWlmIChkYXRhICE9IE5VTEwpIHsKKwkJCWlmICgoaG9zdC0+ZG9fZG1hID09IDApICYmIChob3N0LT5ieXRlc19sZWZ0ID4gMCkpIHsKKwkJCQkvKiBpZiBkYXRhc2l6ZSA8IHJ3X3RocmVzaG9sZAorCQkJCSAqIG5vIFJYIGludHMgYXJlIGdlbmVyYXRlZAorCQkJCSAqLworCQkJCWRhdmluY2lfZmlmb19kYXRhX3RyYW5zKGhvc3QsIGhvc3QtPmJ5dGVzX2xlZnQpOworCQkJfQorCQkJZW5kX3RyYW5zZmVyID0gMTsKKwkJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OworCQl9IGVsc2UgeworCQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkJCSJEQVRETkUgd2l0aCBubyBob3N0LT5kYXRhXG4iKTsKKwkJfQorCX0KKworCWlmIChxc3RhdHVzICYgTU1DU1QwX1RPVVRSRCkgeworCQkvKiBSZWFkIGRhdGEgdGltZW91dCAqLworCQlkYXRhLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCWVuZF90cmFuc2ZlciA9IDE7CisKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkicmVhZCBkYXRhIHRpbWVvdXQsIHN0YXR1cyAleFxuIiwKKwkJCXFzdGF0dXMpOworCisJCWRhdmluY2lfYWJvcnRfZGF0YShob3N0LCBkYXRhKTsKKwl9CisKKwlpZiAocXN0YXR1cyAmIChNTUNTVDBfQ1JDV1IgfCBNTUNTVDBfQ1JDUkQpKSB7CisJCS8qIERhdGEgQ1JDIGVycm9yICovCisJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwkJZW5kX3RyYW5zZmVyID0gMTsKKworCQkvKiBOT1RFOiAgdGhpcyBjb250cm9sbGVyIHVzZXMgQ1JDV1IgdG8gcmVwb3J0IGJvdGggQ1JDCisJCSAqIGVycm9ycyBhbmQgdGltZW91dHMgKG9uIHdyaXRlcykuICBNTUNEUlNQIHZhbHVlcyBhcmUKKwkJICogb25seSB3ZWFrbHkgZG9jdW1lbnRlZCwgYnV0IDB4OWYgd2FzIGNsZWFybHkgYSB0aW1lb3V0CisJCSAqIGNhc2UgYW5kIHRoZSB0d28gdGhyZWUtYml0IHBhdHRlcm5zIGluIHZhcmlvdXMgU0Qgc3BlY3MKKwkJICogKDEwMSwgMDEwKSBhcmVuJ3QgcGFydCBvZiBpdCAuLi4KKwkJICovCisJCWlmIChxc3RhdHVzICYgTU1DU1QwX0NSQ1dSKSB7CisJCQl1MzIgdGVtcCA9IHJlYWRiKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0RSU1ApOworCisJCQlpZiAodGVtcCA9PSAweDlmKQorCQkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJfQorCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImRhdGEgJXMgJXMgZXJyb3JcbiIsCisJCQkocXN0YXR1cyAmIE1NQ1NUMF9DUkNXUikgPyAid3JpdGUiIDogInJlYWQiLAorCQkJKGRhdGEtPmVycm9yID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIkNSQyIpOworCisJCWRhdmluY2lfYWJvcnRfZGF0YShob3N0LCBkYXRhKTsKKwl9CisKKwlpZiAocXN0YXR1cyAmIE1NQ1NUMF9UT1VUUlMpIHsKKwkJLyogQ29tbWFuZCB0aW1lb3V0ICovCisJCWlmIChob3N0LT5jbWQpIHsKKwkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCSJDTUQlZCB0aW1lb3V0LCBzdGF0dXMgJXhcbiIsCisJCQkJaG9zdC0+Y21kLT5vcGNvZGUsIHFzdGF0dXMpOworCQkJaG9zdC0+Y21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQlpZiAoZGF0YSkgeworCQkJCWVuZF90cmFuc2ZlciA9IDE7CisJCQkJZGF2aW5jaV9hYm9ydF9kYXRhKGhvc3QsIGRhdGEpOworCQkJfSBlbHNlCisJCQkJZW5kX2NvbW1hbmQgPSAxOworCQl9CisJfQorCisJaWYgKHFzdGF0dXMgJiBNTUNTVDBfQ1JDUlMpIHsKKwkJLyogQ29tbWFuZCBDUkMgZXJyb3IgKi8KKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJDb21tYW5kIENSQyBlcnJvclxuIik7CisJCWlmIChob3N0LT5jbWQpIHsKKwkJCWhvc3QtPmNtZC0+ZXJyb3IgPSAtRUlMU0VROworCQkJZW5kX2NvbW1hbmQgPSAxOworCQl9CisJfQorCisJaWYgKHFzdGF0dXMgJiBNTUNTVDBfUlNQRE5FKSB7CisJCS8qIEVuZCBvZiBjb21tYW5kIHBoYXNlICovCisJCWVuZF9jb21tYW5kID0gKGludCkgaG9zdC0+Y21kOworCX0KKworCWlmIChlbmRfY29tbWFuZCkKKwkJbW1jX2RhdmluY2lfY21kX2RvbmUoaG9zdCwgaG9zdC0+Y21kKTsKKwlpZiAoZW5kX3RyYW5zZmVyKQorCQltbWNfZGF2aW5jaV94ZmVyX2RvbmUoaG9zdCwgZGF0YSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKG1tYy0+cGFyZW50KTsKKwlzdHJ1Y3QgZGF2aW5jaV9tbWNfY29uZmlnICpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghY29uZmlnIHx8ICFjb25maWctPmdldF9jZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIGNvbmZpZy0+Z2V0X2NkKHBkZXYtPmlkKTsKK30KKworc3RhdGljIGludCBtbWNfZGF2aW5jaV9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPnBhcmVudCk7CisJc3RydWN0IGRhdmluY2lfbW1jX2NvbmZpZyAqY29uZmlnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIWNvbmZpZyB8fCAhY29uZmlnLT5nZXRfcm8pCisJCXJldHVybiAtRU5PU1lTOworCXJldHVybiBjb25maWctPmdldF9ybyhwZGV2LT5pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHsKKwkucmVxdWVzdAk9IG1tY19kYXZpbmNpX3JlcXVlc3QsCisJLnNldF9pb3MJPSBtbWNfZGF2aW5jaV9zZXRfaW9zLAorCS5nZXRfY2QJCT0gbW1jX2RhdmluY2lfZ2V0X2NkLAorCS5nZXRfcm8JCT0gbW1jX2RhdmluY2lfZ2V0X3JvLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19DUFVfRlJFUQorc3RhdGljIGludCBtbWNfZGF2aW5jaV9jcHVmcmVxX3RyYW5zaXRpb24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0OworCXVuc2lnbmVkIGludCBtbWNfcGNsazsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaG9zdCA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IG1tY19kYXZpbmNpX2hvc3QsIGZyZXFfdHJhbnNpdGlvbik7CisJbW1jID0gaG9zdC0+bW1jOworCW1tY19wY2xrID0gY2xrX2dldF9yYXRlKGhvc3QtPmNsayk7CisKKwlpZiAodmFsID09IENQVUZSRVFfUE9TVENIQU5HRSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbW1jLT5sb2NrLCBmbGFncyk7CisJCWhvc3QtPm1tY19pbnB1dF9jbGsgPSBtbWNfcGNsazsKKwkJY2FsY3VsYXRlX2Nsa19kaXZpZGVyKG1tYywgJm1tYy0+aW9zKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW1jLT5sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1tY19kYXZpbmNpX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QpCit7CisJaG9zdC0+ZnJlcV90cmFuc2l0aW9uLm5vdGlmaWVyX2NhbGwgPSBtbWNfZGF2aW5jaV9jcHVmcmVxX3RyYW5zaXRpb247CisKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmaG9zdC0+ZnJlcV90cmFuc2l0aW9uLAorCQkJCQkgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1tY19kYXZpbmNpX2NwdWZyZXFfZGVyZWdpc3RlcihzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCkKK3sKKwljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJmhvc3QtPmZyZXFfdHJhbnNpdGlvbiwKKwkJCQkgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtbWNfZGF2aW5jaV9jcHVmcmVxX3JlZ2lzdGVyKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX2RhdmluY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0KQoreworfQorI2VuZGlmCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9tbWNzZF9ob3N0KHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0KQoreworCS8qIERBVCBsaW5lIHBvcnRpb24gaXMgZGlhYmxlZCBhbmQgaW4gcmVzZXQgc3RhdGUgKi8KKwl3cml0ZWwocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSB8IE1NQ0NUTF9EQVRSU1QsCisJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCk7CisKKwkvKiBDTUQgbGluZSBwb3J0aW9uIGlzIGRpYWJsZWQgYW5kIGluIHJlc2V0IHN0YXRlICovCisJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgfCBNTUNDVExfQ01EUlNULAorCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCisJdWRlbGF5KDEwKTsKKworCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDTEspOworCXdyaXRlbChNTUNDTEtfQ0xLRU4sIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NMSyk7CisKKwl3cml0ZWwoMHgxRkZGLCBob3N0LT5iYXNlICsgREFWSU5DSV9NTUNUT1IpOworCXdyaXRlbCgweEZGRkYsIGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ1RPRCk7CisKKwl3cml0ZWwocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSAmIH5NTUNDVExfREFUUlNULAorCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpICYgfk1NQ0NUTF9DTURSU1QsCisJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCk7CisKKwl1ZGVsYXkoMTApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkYXZpbmNpX21tY3NkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhdmluY2lfbW1jX2NvbmZpZyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IE5VTEw7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqciwgKm1lbSA9IE5VTEw7CisJaW50IHJldCA9IDAsIGlycSA9IDA7CisJc2l6ZV90IG1lbV9zaXplOworCisJLyogUkVWSVNJVDogIHdoZW4gd2UncmUgZnVsbHkgY29udmVydGVkLCBmYWlsIGlmIHBkYXRhIGlzIE5VTEwgKi8KKworCXJldCA9IC1FTk9ERVY7CisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIXIgfHwgaXJxID09IE5PX0lSUSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRUJVU1k7CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOworCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgbWVtX3NpemUsIHBkZXYtPm5hbWUpOworCWlmICghbWVtKQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FTk9NRU07CisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpCisJCWdvdG8gb3V0OworCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+bW1jID0gbW1jOwkvKiBJbXBvcnRhbnQgKi8KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmICghcikKKwkJZ290byBvdXQ7CisJaG9zdC0+cnhkbWEgPSByLT5zdGFydDsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCWlmICghcikKKwkJZ290byBvdXQ7CisJaG9zdC0+dHhkbWEgPSByLT5zdGFydDsKKworCWhvc3QtPm1lbV9yZXMgPSBtZW07CisJaG9zdC0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtX3NpemUpOworCWlmICghaG9zdC0+YmFzZSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRU5YSU87CisJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiTU1DU0RDTEsiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOworCQlnb3RvIG91dDsKKwl9CisJY2xrX2VuYWJsZShob3N0LT5jbGspOworCWhvc3QtPm1tY19pbnB1dF9jbGsgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKTsKKworCWluaXRfbW1jc2RfaG9zdChob3N0KTsKKworCWhvc3QtPnVzZV9kbWEgPSB1c2VfZG1hOworCWhvc3QtPmlycSA9IGlycTsKKworCWlmIChob3N0LT51c2VfZG1hICYmIGRhdmluY2lfYWNxdWlyZV9kbWFfY2hhbm5lbHMoaG9zdCkgIT0gMCkKKwkJaG9zdC0+dXNlX2RtYSA9IDA7CisKKwkvKiBSRVZJU0lUOiAgc29tZWRheSwgc3VwcG9ydCBJUlEtZHJpdmVuIGNhcmQgZGV0ZWN0aW9uLiAgKi8KKwltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCisJaWYgKCFwZGF0YSB8fCBwZGF0YS0+d2lyZXMgPT0gNCB8fCBwZGF0YS0+d2lyZXMgPT0gMCkKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKworCWhvc3QtPnZlcnNpb24gPSBwZGF0YS0+dmVyc2lvbjsKKworCW1tYy0+b3BzID0gJm1tY19kYXZpbmNpX29wczsKKwltbWMtPmZfbWluID0gMzEyNTAwOworCW1tYy0+Zl9tYXggPSAyNTAwMDAwMDsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPm1heF9mcmVxKQorCQltbWMtPmZfbWF4ID0gcGRhdGEtPm1heF9mcmVxOworCWlmIChwZGF0YSAmJiBwZGF0YS0+Y2FwcykKKwkJbW1jLT5jYXBzIHw9IHBkYXRhLT5jYXBzOworCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisKKwkvKiBXaXRoIG5vIGlvbW11IGNvYWxlc2NpbmcgcGFnZXMsIGVhY2ggcGh5c19zZWcgaXMgYSBod19zZWcuCisJICogRWFjaCBod19zZWcgdXNlcyBvbmUgRURNQSBwYXJhbWV0ZXIgUkFNIHNsb3QsIGFsd2F5cyBvbmUKKwkgKiBjaGFubmVsIGFuZCB0aGVuIHVzdWFsbHkgc29tZSBsaW5rZWQgc2xvdHMuCisJICovCisJbW1jLT5tYXhfaHdfc2Vncwk9IDEgKyBob3N0LT5uX2xpbms7CisJbW1jLT5tYXhfcGh5c19zZWdzCT0gbW1jLT5tYXhfaHdfc2VnczsKKworCS8qIEVETUEgbGltaXQgcGVyIGh3IHNlZ21lbnQgKG9uZSBvciB0d28gTUJ5dGVzKSAqLworCW1tYy0+bWF4X3NlZ19zaXplCT0gTUFYX0NDTlQgKiByd190aHJlc2hvbGQ7CisKKwkvKiBNTUMvU0QgY29udHJvbGxlciBsaW1pdHMgZm9yIG11bHRpYmxvY2sgcmVxdWVzdHMgKi8KKwltbWMtPm1heF9ibGtfc2l6ZQk9IDQwOTU7ICAvKiBCTEVOIGlzIDEyIGJpdHMgKi8KKwltbWMtPm1heF9ibGtfY291bnQJPSA2NTUzNTsgLyogTkJMSyBpcyAxNiBiaXRzICovCisJbW1jLT5tYXhfcmVxX3NpemUJPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAibWF4X3BoeXNfc2Vncz0lZFxuIiwgbW1jLT5tYXhfcGh5c19zZWdzKTsKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIm1heF9od19zZWdzPSVkXG4iLCBtbWMtPm1heF9od19zZWdzKTsKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIm1heF9ibGtfc2l6ZT0lZFxuIiwgbW1jLT5tYXhfYmxrX3NpemUpOworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAibWF4X3JlcV9zaXplPSVkXG4iLCBtbWMtPm1heF9yZXFfc2l6ZSk7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJtYXhfc2VnX3NpemU9JWRcbiIsIG1tYy0+bWF4X3NlZ19zaXplKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCisJcmV0ID0gbW1jX2RhdmluY2lfY3B1ZnJlcV9yZWdpc3Rlcihob3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxXG4iKTsKKwkJZ290byBjcHVfZnJlcV9mYWlsOworCX0KKworCXJldCA9IG1tY19hZGRfaG9zdChtbWMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbW1jX2RhdmluY2lfaXJxLCAwLCBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZW5hbWVfcmVnaW9uKG1lbSwgbW1jX2hvc3RuYW1lKG1tYykpOworCisJZGV2X2luZm8obW1jX2Rldihob3N0LT5tbWMpLCAiVXNpbmcgJXMsICVkLWJpdCBtb2RlXG4iLAorCQlob3N0LT51c2VfZG1hID8gIkRNQSIgOiAiUElPIiwKKwkJKG1tYy0+Y2FwcyAmIE1NQ19DQVBfNF9CSVRfREFUQSkgPyA0IDogMSk7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCW1tY19kYXZpbmNpX2NwdWZyZXFfZGVyZWdpc3Rlcihob3N0KTsKK2NwdV9mcmVxX2ZhaWw6CisJaWYgKGhvc3QpIHsKKwkJZGF2aW5jaV9yZWxlYXNlX2RtYV9jaGFubmVscyhob3N0KTsKKworCQlpZiAoaG9zdC0+Y2xrKSB7CisJCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCQkJY2xrX3B1dChob3N0LT5jbGspOworCQl9CisKKwkJaWYgKGhvc3QtPmJhc2UpCisJCQlpb3VubWFwKGhvc3QtPmJhc2UpOworCX0KKworCWlmIChtbWMpCisJCW1tY19mcmVlX2hvc3QobW1jKTsKKworCWlmIChtZW0pCisJCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInByb2JlIGVyciAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGRhdmluY2lfbW1jc2RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmIChob3N0KSB7CisJCW1tY19kYXZpbmNpX2NwdWZyZXFfZGVyZWdpc3Rlcihob3N0KTsKKworCQltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKKwkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKworCQlkYXZpbmNpX3JlbGVhc2VfZG1hX2NoYW5uZWxzKGhvc3QpOworCisJCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CisJCWNsa19wdXQoaG9zdC0+Y2xrKTsKKworCQlpb3VubWFwKGhvc3QtPmJhc2UpOworCisJCXJlbGVhc2VfcmVzb3VyY2UoaG9zdC0+bWVtX3Jlcyk7CisKKwkJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGRhdmluY2lfbW1jc2Rfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9tbWNzZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIG1tY19yZXN1bWVfaG9zdChob3N0LT5tbWMpOworfQorI2Vsc2UKKyNkZWZpbmUgZGF2aW5jaV9tbWNzZF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgZGF2aW5jaV9tbWNzZF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhdmluY2lfbW1jc2RfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJkYXZpbmNpX21tYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZQkJPSBfX2V4aXRfcChkYXZpbmNpX21tY3NkX3JlbW92ZSksCisJLnN1c3BlbmQJPSBkYXZpbmNpX21tY3NkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBkYXZpbmNpX21tY3NkX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfbW1jc2RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRhdmluY2lfbW1jc2RfZHJpdmVyLAorCQkJCSAgICAgZGF2aW5jaV9tbWNzZF9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChkYXZpbmNpX21tY3NkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF2aW5jaV9tbWNzZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhdmluY2lfbW1jc2RfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhdmluY2lfbW1jc2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIEluZGlhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1NQy9TRCBkcml2ZXIgZm9yIERhdmluY2kgTU1DIGNvbnRyb2xsZXIiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCmluZGV4IGRiYTQ2MDAuLmIzMTk0NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKQEAgLTM4LDEwICszOCw5IEBACiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2h0Y19wd3JzaW5rLmg+CiAKICNpbmNsdWRlICJtc21fc2RjYy5oIgogCkBAIC03NzUsMTMgKzc3NCwxMSBAQAogCiAJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAljYXNlIE1NQ19QT1dFUl9PRkY6Ci0JCWh0Y19wd3JzaW5rX3NldChQV1JTSU5LX1NEQ0FSRCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgTU1DX1BPV0VSX1VQOgogCQlwd3IgfD0gTUNJX1BXUl9VUDsKIAkJYnJlYWs7CiAJY2FzZSBNTUNfUE9XRVJfT046Ci0JCWh0Y19wd3JzaW5rX3NldChQV1JTSU5LX1NEQ0FSRCwgMTAwKTsKIAkJcHdyIHw9IE1DSV9QV1JfT047CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCmluZGV4IDg4NjcxNTIuLjYwYTJiNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwpAQCAtNjc5LDE3ICs2NzksMTcgQEAKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3QgbXhjbWNpX2hvc3QgKmhvc3QgPSBOVUxMOwotCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvcmVzLCAqcjsKIAlpbnQgcmV0ID0gMCwgaXJxOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaS5NWCBTREhDIGRyaXZlclxuIik7CiAKLQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpb3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIXIgfHwgaXJxIDwgMCkKKwlpZiAoIWlvcmVzIHx8IGlycSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgcGRldi0+bmFtZSk7CisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihpb3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9yZXMpLCBwZGV2LT5uYW1lKTsKIAlpZiAoIXIpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTgwOSw3ICs4MDksNyBAQAogb3V0X2ZyZWU6CiAJbW1jX2ZyZWVfaG9zdChtbWMpOwogb3V0X3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPnJlcykpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpb3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaW9yZXMpKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCmluZGV4IDBjNDRkNTYuLjBjN2E2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKIGVudW0gewogCUNEX0dQSU8gPSAwLAogCVdQX0dQSU8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IDVmOTcwZTIuLmM2ZDdlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNDU5LDggKzE0NTksMTAgQEAKIAkJZ290byBlcnJfaW9yZW1hcDsKIAogCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKLQlpZiAoSVNfRVJSKGhvc3QtPmljbGspKQorCWlmIChJU19FUlIoaG9zdC0+aWNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5pY2xrKTsKIAkJZ290byBlcnJfZnJlZV9tbWNfaG9zdDsKKwl9CiAJY2xrX2VuYWJsZShob3N0LT5pY2xrKTsKIAogCWhvc3QtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKQEAgLTE1MDAsMTAgKzE1MDIsOCBAQAogZXJyX2ZyZWVfZmNsazoKIAljbGtfcHV0KGhvc3QtPmZjbGspOwogZXJyX2ZyZWVfaWNsazoKLQlpZiAoaG9zdC0+aWNsayAhPSBOVUxMKSB7Ci0JCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwotCQljbGtfcHV0KGhvc3QtPmljbGspOwotCX0KKwljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKKwljbGtfcHV0KGhvc3QtPmljbGspOwogZXJyX2ZyZWVfbW1jX2hvc3Q6CiAJaW91bm1hcChob3N0LT52aXJ0X2Jhc2UpOwogZXJyX2lvcmVtYXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwppbmRleCBiYjQ3ZmY0Li4wZDc4M2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKQEAgLTgyOCw3ICs4MjgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFtY2lfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHB4YW1jaV9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBweGFtY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YW1jaV9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggOTQxYTRkMy4uZDk2ZTFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC04MjAsNyArODIwLDcgQEAKIHN0YXRpYyB2b2lkIGZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxID0gaG9zdC0+bXJxOwotCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gaG9zdC0+Y21kX2lzX3N0b3AgPyBtcnEtPnN0b3AgOiBtcnEtPmNtZDsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKIAlpbnQgZGVidWdfYXNfZmFpbHVyZSA9IDA7CiAKIAlpZiAoaG9zdC0+Y29tcGxldGVfd2hhdCAhPSBDT01QTEVUSU9OX0ZJTkFMSVpFKQpAQCAtODI4LDYgKzgyOCw3IEBACiAKIAlpZiAoIW1ycSkKIAkJcmV0dXJuOworCWNtZCA9IGhvc3QtPmNtZF9pc19zdG9wID8gbXJxLT5zdG9wIDogbXJxLT5jbWQ7CiAKIAlpZiAoY21kLT5kYXRhICYmIChjbWQtPmVycm9yID09IDApICYmCiAJICAgIChjbWQtPmRhdGEtPmVycm9yID09IDApKSB7CkBAIC0xMzAyLDEwICsxMzAzLDggQEAKIAlpZiAocGRhdGEtPm5vX3dwcm90ZWN0KQogCQlyZXR1cm4gMDsKIAotCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fd3Byb3RlY3QpOwotCi0JaWYgKHBkYXRhLT53cHJvdGVjdF9pbnZlcnQpCi0JCXJldCA9ICFyZXQ7CisJcmV0ID0gZ3Bpb19nZXRfdmFsdWUocGRhdGEtPmdwaW9fd3Byb3RlY3QpID8gMSA6IDA7CisJcmV0IF49IHBkYXRhLT53cHJvdGVjdF9pbnZlcnQ7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTY1NCw3ICsxNjUzLDcgQEAKIAkJCWdvdG8gcHJvYmVfZnJlZV9pcnE7CiAJCX0KIAotCQlob3N0LT5pcnFfY2QgPSBzM2MyNDEwX2dwaW9fZ2V0aXJxKGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCk7CisJCWhvc3QtPmlycV9jZCA9IGdwaW9fdG9faXJxKGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCk7CiAKIAkJaWYgKGhvc3QtPmlycV9jZCA+PSAwKSB7CiAJCQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxX2NkLCBzM2NtY2lfaXJxX2NkLApAQCAtMTg5Miw3ICsxODkxLDcgQEAKIAlyZXR1cm4gbW1jX3Jlc3VtZV9ob3N0KG1tYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzM2NtY2lfcG0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgczNjbWNpX3BtID0gewogCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlMzMxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogT3BlbkZpcm13YXJlIGJpbmRpbmdzIGZvciBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3JzOiBYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICoJICAgIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlICJzZGhjaS1vZi5oIgorI2luY2x1ZGUgInNkaGNpLmgiCisKKyNpZmRlZiBDT05GSUdfTU1DX1NESENJX0JJR19FTkRJQU5fMzJCSVRfQllURV9TV0FQUEVSCisKKy8qCisgKiBUaGVzZSBhY2Nlc3NvcnMgYXJlIGRlc2lnbmVkIGZvciBiaWcgZW5kaWFuIGhvc3RzIGRvaW5nIEkvTyB0bworICogbGl0dGxlIGVuZGlhbiBjb250cm9sbGVycyBpbmNvcnBvcmF0aW5nIGEgMzItYml0IGhhcmR3YXJlIGJ5dGUgc3dhcHBlci4KKyAqLworCit1MzIgc2RoY2lfYmUzMmJzX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiBpbl9iZTMyKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3UxNiBzZGhjaV9iZTMyYnNfcmVhZHcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIGluX2JlMTYoaG9zdC0+aW9hZGRyICsgKHJlZyBeIDB4MikpOworfQorCit1OCBzZGhjaV9iZTMyYnNfcmVhZGIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIGluXzgoaG9zdC0+aW9hZGRyICsgKHJlZyBeIDB4MykpOworfQorCit2b2lkIHNkaGNpX2JlMzJic193cml0ZWwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpCit7CisJb3V0X2JlMzIoaG9zdC0+aW9hZGRyICsgcmVnLCB2YWwpOworfQorCit2b2lkIHNkaGNpX2JlMzJic193cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCWludCBiYXNlID0gcmVnICYgfjB4MzsKKwlpbnQgc2hpZnQgPSAocmVnICYgMHgyKSAqIDg7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgU0RIQ0lfVFJBTlNGRVJfTU9ERToKKwkJLyoKKwkJICogUG9zdHBvbmUgdGhpcyB3cml0ZSwgd2UgbXVzdCBkbyBpdCB0b2dldGhlciB3aXRoIGEKKwkJICogY29tbWFuZCB3cml0ZSB0aGF0IGlzIGRvd24gYmVsb3cuCisJCSAqLworCQlvZl9ob3N0LT54ZmVyX21vZGVfc2hhZG93ID0gdmFsOworCQlyZXR1cm47CisJY2FzZSBTREhDSV9DT01NQU5EOgorCQlzZGhjaV9iZTMyYnNfd3JpdGVsKGhvc3QsIHZhbCA8PCAxNiB8IG9mX2hvc3QtPnhmZXJfbW9kZV9zaGFkb3csCisJCQkJICAgIFNESENJX1RSQU5TRkVSX01PREUpOworCQlyZXR1cm47CisJfQorCWNscnNldGJpdHNfYmUzMihob3N0LT5pb2FkZHIgKyBiYXNlLCAweGZmZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Cit9CisKK3ZvaWQgc2RoY2lfYmUzMmJzX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQoreworCWludCBiYXNlID0gcmVnICYgfjB4MzsKKwlpbnQgc2hpZnQgPSAocmVnICYgMHgzKSAqIDg7CisKKwljbHJzZXRiaXRzX2JlMzIoaG9zdC0+aW9hZGRyICsgYmFzZSAsIDB4ZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Cit9CisjZW5kaWYgLyogQ09ORklHX01NQ19TREhDSV9CSUdfRU5ESUFOXzMyQklUX0JZVEVfU1dBUFBFUiAqLworCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgc2RoY2lfb2Zfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKworCXJldHVybiBtbWNfc3VzcGVuZF9ob3N0KGhvc3QtPm1tYywgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHNkaGNpX29mX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CisKKwlyZXR1cm4gbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPm1tYyk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgc2RoY2lfb2Zfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHNkaGNpX29mX3Jlc3VtZSBOVUxMCisKKyNlbmRpZgorCitzdGF0aWMgYm9vbCBfX2RldmluaXQgc2RoY2lfb2Zfd3BfaW52ZXJ0ZWQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic2RoY2ksd3AtaW52ZXJ0ZWQiLCBOVUxMKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBPbGQgZGV2aWNlIHRyZWVzIGRvbid0IGhhdmUgdGhlIHdwLWludmVydGVkIHByb3BlcnR5LiAqLworCXJldHVybiBtYWNoaW5lX2lzKG1wYzgzN3hfcmRiKSB8fCBtYWNoaW5lX2lzKG1wYzgzN3hfbWRzKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2RoY2lfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKKwlzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSAqc2RoY2lfb2ZfZGF0YSA9IG1hdGNoLT5kYXRhOworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0OworCWNvbnN0IHUzMiAqY2xrOworCWludCBzaXplOworCWludCByZXQ7CisKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhvc3QgPSBzZGhjaV9hbGxvY19ob3N0KCZvZmRldi0+ZGV2LCBzaXplb2YoKm9mX2hvc3QpKTsKKwlpZiAoSVNfRVJSKGhvc3QpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgaG9zdCk7CisKKwlob3N0LT5pb2FkZHIgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFob3N0LT5pb2FkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWRkcl9tYXA7CisJfQorCisJaG9zdC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmICghaG9zdC0+aXJxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX25vX2lycTsKKwl9CisKKwlob3N0LT5od19uYW1lID0gZGV2X25hbWUoJm9mZGV2LT5kZXYpOworCWlmIChzZGhjaV9vZl9kYXRhKSB7CisJCWhvc3QtPnF1aXJrcyA9IHNkaGNpX29mX2RhdGEtPnF1aXJrczsKKwkJaG9zdC0+b3BzID0gJnNkaGNpX29mX2RhdGEtPm9wczsKKwl9CisKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic2RoY2ksMS1iaXQtb25seSIsIE5VTEwpKQorCQlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfRk9SQ0VfMV9CSVRfREFUQTsKKworCWlmIChzZGhjaV9vZl93cF9pbnZlcnRlZChucCkpCisJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUOworCisJY2xrID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2xvY2stZnJlcXVlbmN5IiwgJnNpemUpOworCWlmIChjbGsgJiYgc2l6ZSA9PSBzaXplb2YoKmNsaykgJiYgKmNsaykKKwkJb2ZfaG9zdC0+Y2xvY2sgPSAqY2xrOworCisJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYWRkX2hvc3Q7CisKKwlyZXR1cm4gMDsKKworZXJyX2FkZF9ob3N0OgorCWlycV9kaXNwb3NlX21hcHBpbmcoaG9zdC0+aXJxKTsKK2Vycl9ub19pcnE6CisJaW91bm1hcChob3N0LT5pb2FkZHIpOworZXJyX2FkZHJfbWFwOgorCXNkaGNpX2ZyZWVfaG9zdChob3N0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzZGhjaV9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCisJc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgMCk7CisJc2RoY2lfZnJlZV9ob3N0KGhvc3QpOworCWlycV9kaXNwb3NlX21hcHBpbmcoaG9zdC0+aXJxKTsKKwlpb3VubWFwKGhvc3QtPmlvYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNkaGNpX29mX21hdGNoW10gPSB7CisjaWZkZWYgQ09ORklHX01NQ19TREhDSV9PRl9FU0RIQworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZXNkaGMiLCAuZGF0YSA9ICZzZGhjaV9lc2RoYywgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LWVzZGhjIiwgLmRhdGEgPSAmc2RoY2lfZXNkaGMsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsZXNkaGMiLCAuZGF0YSA9ICZzZGhjaV9lc2RoYywgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfT0ZfSExXRAorCXsgLmNvbXBhdGlibGUgPSAibmludGVuZG8saG9sbHl3b29kLXNkaGNpIiwgLmRhdGEgPSAmc2RoY2lfaGx3ZCwgfSwKKyNlbmRpZgorCXsgLmNvbXBhdGlibGUgPSAiZ2VuZXJpYy1zZGhjaSIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2RoY2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzZGhjaV9vZl9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gInNkaGNpLW9mIiwKKwkubWF0Y2hfdGFibGUgPSBzZGhjaV9vZl9tYXRjaCwKKwkucHJvYmUgPSBzZGhjaV9vZl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2RoY2lfb2ZfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHNkaGNpX29mX3N1c3BlbmQsCisJLnJlc3VtZQk9IHNkaGNpX29mX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkaGNpX29mX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzZGhjaV9vZl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc2RoY2lfb2ZfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZGhjaV9vZl9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNkaGNpX29mX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzZGhjaV9vZl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIE9GIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4sICIKKwkgICAgICAiQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWVzZGhjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWVzZGhjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViMTFhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQXV0aG9yczogWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4KKyAqCSAgICBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlICJzZGhjaS1vZi5oIgorI2luY2x1ZGUgInNkaGNpLmgiCisKKy8qCisgKiBPcHMgYW5kIHF1aXJrcyBmb3IgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyLgorICovCisKKyNkZWZpbmUgRVNESENfRE1BX1NZU0NUTAkweDQwYworI2RlZmluZSBFU0RIQ19ETUFfU05PT1AJCTB4MDAwMDAwNDAKKworI2RlZmluZSBFU0RIQ19TWVNURU1fQ09OVFJPTAkweDJjCisjZGVmaW5lIEVTREhDX0NMT0NLX01BU0sJMHgwMDAwZmZmMAorI2RlZmluZSBFU0RIQ19QUkVESVZfU0hJRlQJOAorI2RlZmluZSBFU0RIQ19ESVZJREVSX1NISUZUCTQKKyNkZWZpbmUgRVNESENfQ0xPQ0tfUEVSRU4JMHgwMDAwMDAwNAorI2RlZmluZSBFU0RIQ19DTE9DS19IQ0tFTgkweDAwMDAwMDAyCisjZGVmaW5lIEVTREhDX0NMT0NLX0lQR0VOCTB4MDAwMDAwMDEKKworI2RlZmluZSBFU0RIQ19IT1NUX0NPTlRST0xfUkVTCTB4MDUKKworc3RhdGljIHUxNiBlc2RoY19yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwl1MTYgcmV0OworCisJaWYgKHVubGlrZWx5KHJlZyA9PSBTREhDSV9IT1NUX1ZFUlNJT04pKQorCQlyZXQgPSBpbl9iZTE2KGhvc3QtPmlvYWRkciArIHJlZyk7CisJZWxzZQorCQlyZXQgPSBzZGhjaV9iZTMyYnNfcmVhZHcoaG9zdCwgcmVnKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlc2RoY193cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJaWYgKHJlZyA9PSBTREhDSV9CTE9DS19TSVpFKSB7CisJCS8qCisJCSAqIFR3byBsYXN0IERNQSBiaXRzIGFyZSByZXNlcnZlZCwgYW5kIGZpcnN0IG9uZSBpcyB1c2VkIGZvcgorCQkgKiBub24tc3RhbmRhcmQgYmxrc3ogb2YgNDA5NiBieXRlcyB0aGF0IHdlIGRvbid0IHN1cHBvcnQKKwkJICogeWV0LiBTbyBjbGVhciB0aGUgRE1BIGJvdW5kYXJ5IGJpdHMuCisJCSAqLworCQl2YWwgJj0gflNESENJX01BS0VfQkxLU1ooMHg3LCAwKTsKKwl9CisJc2RoY2lfYmUzMmJzX3dyaXRldyhob3N0LCB2YWwsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVzZGhjX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQoreworCS8qIFByZXZlbnQgU0RIQ0kgY29yZSBmcm9tIHdyaXRpbmcgcmVzZXJ2ZWQgYml0cyAoZS5nLiBISVNQRCkuICovCisJaWYgKHJlZyA9PSBTREhDSV9IT1NUX0NPTlRST0wpCisJCXZhbCAmPSB+RVNESENfSE9TVF9DT05UUk9MX1JFUzsKKwlzZGhjaV9iZTMyYnNfd3JpdGViKGhvc3QsIHZhbCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfc2V0X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJaW50IHByZV9kaXYgPSAyOworCWludCBkaXYgPSAxOworCisJY2xyYml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX1NZU1RFTV9DT05UUk9MLCBFU0RIQ19DTE9DS19JUEdFTiB8CisJCSAgRVNESENfQ0xPQ0tfSENLRU4gfCBFU0RIQ19DTE9DS19QRVJFTiB8IEVTREhDX0NMT0NLX01BU0spOworCisJaWYgKGNsb2NrID09IDApCisJCWdvdG8gb3V0OworCisJd2hpbGUgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gMTYgPiBjbG9jayAmJiBwcmVfZGl2IDwgMjU2KQorCQlwcmVfZGl2ICo9IDI7CisKKwl3aGlsZSAoaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyBkaXYgPiBjbG9jayAmJiBkaXYgPCAxNikKKwkJZGl2Kys7CisKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImRlc2lyZWQgU0QgY2xvY2s6ICVkLCBhY3R1YWw6ICVkXG4iLAorCQljbG9jaywgaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyBkaXYpOworCisJcHJlX2RpdiA+Pj0gMTsKKwlkaXYtLTsKKworCXNldGJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAorCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfAorCQkgIGRpdiA8PCBFU0RIQ19ESVZJREVSX1NISUZUIHwgcHJlX2RpdiA8PCBFU0RIQ19QUkVESVZfU0hJRlQpOworCW1kZWxheSgxMDApOworb3V0OgorCWhvc3QtPmNsb2NrID0gY2xvY2s7Cit9CisKK3N0YXRpYyBpbnQgZXNkaGNfZW5hYmxlX2RtYShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzZXRiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfRE1BX1NZU0NUTCwgRVNESENfRE1BX1NOT09QKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfbWF4X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKworCXJldHVybiBvZl9ob3N0LT5jbG9jazsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfbWluX2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKworCXJldHVybiBvZl9ob3N0LT5jbG9jayAvIDI1NiAvIDE2OworfQorCitzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSBzZGhjaV9lc2RoYyA9IHsKKwkucXVpcmtzID0gU0RIQ0lfUVVJUktfRk9SQ0VfQkxLX1NaXzIwNDggfAorCQkgIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTiB8CisJCSAgU0RIQ0lfUVVJUktfTk9fQlVTWV9JUlEgfAorCQkgIFNESENJX1FVSVJLX05PTlNUQU5EQVJEX0NMT0NLIHwKKwkJICBTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSyB8CisJCSAgU0RIQ0lfUVVJUktfUElPX05FRURTX0RFTEFZIHwKKwkJICBTREhDSV9RVUlSS19SRVNUT1JFX0lSUVNfQUZURVJfUkVTRVQgfAorCQkgIFNESENJX1FVSVJLX05PX0NBUkRfTk9fUkVTRVQsCisJLm9wcyA9IHsKKwkJLnJlYWRsID0gc2RoY2lfYmUzMmJzX3JlYWRsLAorCQkucmVhZHcgPSBlc2RoY19yZWFkdywKKwkJLnJlYWRiID0gc2RoY2lfYmUzMmJzX3JlYWRiLAorCQkud3JpdGVsID0gc2RoY2lfYmUzMmJzX3dyaXRlbCwKKwkJLndyaXRldyA9IGVzZGhjX3dyaXRldywKKwkJLndyaXRlYiA9IGVzZGhjX3dyaXRlYiwKKwkJLnNldF9jbG9jayA9IGVzZGhjX3NldF9jbG9jaywKKwkJLmVuYWJsZV9kbWEgPSBlc2RoY19lbmFibGVfZG1hLAorCQkuZ2V0X21heF9jbG9jayA9IGVzZGhjX2dldF9tYXhfY2xvY2ssCisJCS5nZXRfbWluX2Nsb2NrID0gZXNkaGNfZ2V0X21pbl9jbG9jaywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtaGx3ZC5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1obHdkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxMTdmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtaGx3ZC5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWhsd2QuYworICoKKyAqIE5pbnRlbmRvIFdpaSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBHYW1lQ3ViZSBMaW51eCBUZWFtCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxiZXJ0IEhlcnJhbnoKKyAqCisgKiBCYXNlZCBvbiBzZGhjaS1vZi1lc2RoYy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcnM6IFhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+CisgKgkgICAgQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgInNkaGNpLW9mLmgiCisjaW5jbHVkZSAic2RoY2kuaCIKKworLyoKKyAqIE9wcyBhbmQgcXVpcmtzIGZvciB0aGUgTmludGVuZG8gV2lpIFNESENJIGNvbnRyb2xsZXJzLgorICovCisKKy8qCisgKiBXZSBuZWVkIGEgc21hbGwgZGVsYXkgYWZ0ZXIgZWFjaCB3cml0ZSwgb3IgdGhpbmdzIGdvIGhvcnJpYmx5IHdyb25nLgorICovCisjZGVmaW5lIFNESENJX0hMV0RfV1JJVEVfREVMQVkJNSAvKiB1c2VjcyAqLworCitzdGF0aWMgdm9pZCBzZGhjaV9obHdkX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlzZGhjaV9iZTMyYnNfd3JpdGVsKGhvc3QsIHZhbCwgcmVnKTsKKwl1ZGVsYXkoU0RIQ0lfSExXRF9XUklURV9ERUxBWSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2hsd2Rfd3JpdGV3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MTYgdmFsLCBpbnQgcmVnKQoreworCXNkaGNpX2JlMzJic193cml0ZXcoaG9zdCwgdmFsLCByZWcpOworCXVkZWxheShTREhDSV9ITFdEX1dSSVRFX0RFTEFZKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfaGx3ZF93cml0ZWIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IHZhbCwgaW50IHJlZykKK3sKKwlzZGhjaV9iZTMyYnNfd3JpdGViKGhvc3QsIHZhbCwgcmVnKTsKKwl1ZGVsYXkoU0RIQ0lfSExXRF9XUklURV9ERUxBWSk7Cit9CisKK3N0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2hsd2QgPSB7CisJLnF1aXJrcyA9IFNESENJX1FVSVJLXzMyQklUX0RNQV9BRERSIHwKKwkJICBTREhDSV9RVUlSS18zMkJJVF9ETUFfU0laRSwKKwkub3BzID0geworCQkucmVhZGwgPSBzZGhjaV9iZTMyYnNfcmVhZGwsCisJCS5yZWFkdyA9IHNkaGNpX2JlMzJic19yZWFkdywKKwkJLnJlYWRiID0gc2RoY2lfYmUzMmJzX3JlYWRiLAorCQkud3JpdGVsID0gc2RoY2lfaGx3ZF93cml0ZWwsCisJCS53cml0ZXcgPSBzZGhjaV9obHdkX3dyaXRldywKKwkJLndyaXRlYiA9IHNkaGNpX2hsd2Rfd3JpdGViLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWFiOTE2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0vKgotICogT3BlbkZpcm13YXJlIGJpbmRpbmdzIGZvciBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgotICoJICAgIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlICJzZGhjaS5oIgotCi1zdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSB7Ci0JdW5zaWduZWQgaW50IHF1aXJrczsKLQlzdHJ1Y3Qgc2RoY2lfb3BzIG9wczsKLX07Ci0KLXN0cnVjdCBzZGhjaV9vZl9ob3N0IHsKLQl1bnNpZ25lZCBpbnQgY2xvY2s7Ci0JdTE2IHhmZXJfbW9kZV9zaGFkb3c7Ci19OwotCi0vKgotICogT3BzIGFuZCBxdWlya3MgZm9yIHRoZSBGcmVlc2NhbGUgZVNESEMgY29udHJvbGxlci4KLSAqLwotCi0jZGVmaW5lIEVTREhDX0RNQV9TWVNDVEwJMHg0MGMKLSNkZWZpbmUgRVNESENfRE1BX1NOT09QCQkweDAwMDAwMDQwCi0KLSNkZWZpbmUgRVNESENfU1lTVEVNX0NPTlRST0wJMHgyYwotI2RlZmluZSBFU0RIQ19DTE9DS19NQVNLCTB4MDAwMGZmZjAKLSNkZWZpbmUgRVNESENfUFJFRElWX1NISUZUCTgKLSNkZWZpbmUgRVNESENfRElWSURFUl9TSElGVAk0Ci0jZGVmaW5lIEVTREhDX0NMT0NLX1BFUkVOCTB4MDAwMDAwMDQKLSNkZWZpbmUgRVNESENfQ0xPQ0tfSENLRU4JMHgwMDAwMDAwMgotI2RlZmluZSBFU0RIQ19DTE9DS19JUEdFTgkweDAwMDAwMDAxCi0KLSNkZWZpbmUgRVNESENfSE9TVF9DT05UUk9MX1JFUwkweDA1Ci0KLXN0YXRpYyB1MzIgZXNkaGNfcmVhZGwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCi17Ci0JcmV0dXJuIGluX2JlMzIoaG9zdC0+aW9hZGRyICsgcmVnKTsKLX0KLQotc3RhdGljIHUxNiBlc2RoY19yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKLXsKLQl1MTYgcmV0OwotCi0JaWYgKHVubGlrZWx5KHJlZyA9PSBTREhDSV9IT1NUX1ZFUlNJT04pKQotCQlyZXQgPSBpbl9iZTE2KGhvc3QtPmlvYWRkciArIHJlZyk7Ci0JZWxzZQotCQlyZXQgPSBpbl9iZTE2KGhvc3QtPmlvYWRkciArIChyZWcgXiAweDIpKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTggZXNkaGNfcmVhZGIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCi17Ci0JcmV0dXJuIGluXzgoaG9zdC0+aW9hZGRyICsgKHJlZyBeIDB4MykpOwotfQotCi1zdGF0aWMgdm9pZCBlc2RoY193cml0ZWwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpCi17Ci0Jb3V0X2JlMzIoaG9zdC0+aW9hZGRyICsgcmVnLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBlc2RoY193cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCi17Ci0Jc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCWludCBiYXNlID0gcmVnICYgfjB4MzsKLQlpbnQgc2hpZnQgPSAocmVnICYgMHgyKSAqIDg7Ci0KLQlzd2l0Y2ggKHJlZykgewotCWNhc2UgU0RIQ0lfVFJBTlNGRVJfTU9ERToKLQkJLyoKLQkJICogUG9zdHBvbmUgdGhpcyB3cml0ZSwgd2UgbXVzdCBkbyBpdCB0b2dldGhlciB3aXRoIGEKLQkJICogY29tbWFuZCB3cml0ZSB0aGF0IGlzIGRvd24gYmVsb3cuCi0JCSAqLwotCQlvZl9ob3N0LT54ZmVyX21vZGVfc2hhZG93ID0gdmFsOwotCQlyZXR1cm47Ci0JY2FzZSBTREhDSV9DT01NQU5EOgotCQllc2RoY193cml0ZWwoaG9zdCwgdmFsIDw8IDE2IHwgb2ZfaG9zdC0+eGZlcl9tb2RlX3NoYWRvdywKLQkJCSAgICAgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7Ci0JCXJldHVybjsKLQljYXNlIFNESENJX0JMT0NLX1NJWkU6Ci0JCS8qCi0JCSAqIFR3byBsYXN0IERNQSBiaXRzIGFyZSByZXNlcnZlZCwgYW5kIGZpcnN0IG9uZSBpcyB1c2VkIGZvcgotCQkgKiBub24tc3RhbmRhcmQgYmxrc3ogb2YgNDA5NiBieXRlcyB0aGF0IHdlIGRvbid0IHN1cHBvcnQKLQkJICogeWV0LiBTbyBjbGVhciB0aGUgRE1BIGJvdW5kYXJ5IGJpdHMuCi0JCSAqLwotCQl2YWwgJj0gflNESENJX01BS0VfQkxLU1ooMHg3LCAwKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JfQotCWNscnNldGJpdHNfYmUzMihob3N0LT5pb2FkZHIgKyBiYXNlLCAweGZmZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVzZGhjX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQotewotCWludCBiYXNlID0gcmVnICYgfjB4MzsKLQlpbnQgc2hpZnQgPSAocmVnICYgMHgzKSAqIDg7Ci0KLQkvKiBQcmV2ZW50IFNESENJIGNvcmUgZnJvbSB3cml0aW5nIHJlc2VydmVkIGJpdHMgKGUuZy4gSElTUEQpLiAqLwotCWlmIChyZWcgPT0gU0RIQ0lfSE9TVF9DT05UUk9MKQotCQl2YWwgJj0gfkVTREhDX0hPU1RfQ09OVFJPTF9SRVM7Ci0KLQljbHJzZXRiaXRzX2JlMzIoaG9zdC0+aW9hZGRyICsgYmFzZSAsIDB4ZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVzZGhjX3NldF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGNsb2NrKQotewotCWludCBwcmVfZGl2ID0gMjsKLQlpbnQgZGl2ID0gMTsKLQotCWNscmJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAotCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfCBFU0RIQ19DTE9DS19NQVNLKTsKLQotCWlmIChjbG9jayA9PSAwKQotCQlnb3RvIG91dDsKLQotCXdoaWxlIChob3N0LT5tYXhfY2xrIC8gcHJlX2RpdiAvIDE2ID4gY2xvY2sgJiYgcHJlX2RpdiA8IDI1NikKLQkJcHJlX2RpdiAqPSAyOwotCi0Jd2hpbGUgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gZGl2ID4gY2xvY2sgJiYgZGl2IDwgMTYpCi0JCWRpdisrOwotCi0JZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJkZXNpcmVkIFNEIGNsb2NrOiAlZCwgYWN0dWFsOiAlZFxuIiwKLQkJY2xvY2ssIGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gZGl2KTsKLQotCXByZV9kaXYgPj49IDE7Ci0JZGl2LS07Ci0KLQlzZXRiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfU1lTVEVNX0NPTlRST0wsIEVTREhDX0NMT0NLX0lQR0VOIHwKLQkJICBFU0RIQ19DTE9DS19IQ0tFTiB8IEVTREhDX0NMT0NLX1BFUkVOIHwKLQkJICBkaXYgPDwgRVNESENfRElWSURFUl9TSElGVCB8IHByZV9kaXYgPDwgRVNESENfUFJFRElWX1NISUZUKTsKLQltZGVsYXkoMTAwKTsKLW91dDoKLQlob3N0LT5jbG9jayA9IGNsb2NrOwotfQotCi1zdGF0aWMgaW50IGVzZGhjX2VuYWJsZV9kbWEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCi17Ci0Jc2V0Yml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX0RNQV9TWVNDVEwsIEVTREhDX0RNQV9TTk9PUCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXNkaGNfZ2V0X21heF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0KLQlyZXR1cm4gb2ZfaG9zdC0+Y2xvY2s7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXNkaGNfZ2V0X21pbl9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0KLQlyZXR1cm4gb2ZfaG9zdC0+Y2xvY2sgLyAyNTYgLyAxNjsKLX0KLQotc3RhdGljIHN0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2VzZGhjID0gewotCS5xdWlya3MgPSBTREhDSV9RVUlSS19GT1JDRV9CTEtfU1pfMjA0OCB8Ci0JCSAgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OIHwKLQkJICBTREhDSV9RVUlSS19OT19CVVNZX0lSUSB8Ci0JCSAgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sgfAotCQkgIFNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLIHwKLQkJICBTREhDSV9RVUlSS19QSU9fTkVFRFNfREVMQVkgfAotCQkgIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVCB8Ci0JCSAgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVCwKLQkub3BzID0gewotCQkucmVhZGwgPSBlc2RoY19yZWFkbCwKLQkJLnJlYWR3ID0gZXNkaGNfcmVhZHcsCi0JCS5yZWFkYiA9IGVzZGhjX3JlYWRiLAotCQkud3JpdGVsID0gZXNkaGNfd3JpdGVsLAotCQkud3JpdGV3ID0gZXNkaGNfd3JpdGV3LAotCQkud3JpdGViID0gZXNkaGNfd3JpdGViLAotCQkuc2V0X2Nsb2NrID0gZXNkaGNfc2V0X2Nsb2NrLAotCQkuZW5hYmxlX2RtYSA9IGVzZGhjX2VuYWJsZV9kbWEsCi0JCS5nZXRfbWF4X2Nsb2NrID0gZXNkaGNfZ2V0X21heF9jbG9jaywKLQkJLmdldF9taW5fY2xvY2sgPSBlc2RoY19nZXRfbWluX2Nsb2NrLAotCX0sCi19OwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgc2RoY2lfb2Zfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQotCXJldHVybiBtbWNfc3VzcGVuZF9ob3N0KGhvc3QtPm1tYywgc3RhdGUpOwotfQotCi1zdGF0aWMgaW50IHNkaGNpX29mX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKLXsKLQlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0KLQlyZXR1cm4gbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPm1tYyk7Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgc2RoY2lfb2Zfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHNkaGNpX29mX3Jlc3VtZSBOVUxMCi0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBfX2RldmluaXQgc2RoY2lfb2Zfd3BfaW52ZXJ0ZWQoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic2RoY2ksd3AtaW52ZXJ0ZWQiLCBOVUxMKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQkvKiBPbGQgZGV2aWNlIHRyZWVzIGRvbid0IGhhdmUgdGhlIHdwLWludmVydGVkIHByb3BlcnR5LiAqLwotCXJldHVybiBtYWNoaW5lX2lzKG1wYzgzN3hfcmRiKSB8fCBtYWNoaW5lX2lzKG1wYzgzN3hfbWRzKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc2RoY2lfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKLQlzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSAqc2RoY2lfb2ZfZGF0YSA9IG1hdGNoLT5kYXRhOwotCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OwotCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0OwotCWNvbnN0IHUzMiAqY2xrOwotCWludCBzaXplOwotCWludCByZXQ7Ci0KLQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWhvc3QgPSBzZGhjaV9hbGxvY19ob3N0KCZvZmRldi0+ZGV2LCBzaXplb2YoKm9mX2hvc3QpKTsKLQlpZiAoSVNfRVJSKGhvc3QpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgaG9zdCk7Ci0KLQlob3N0LT5pb2FkZHIgPSBvZl9pb21hcChucCwgMCk7Ci0JaWYgKCFob3N0LT5pb2FkZHIpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfYWRkcl9tYXA7Ci0JfQotCi0JaG9zdC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwotCWlmICghaG9zdC0+aXJxKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX25vX2lycTsKLQl9Ci0KLQlob3N0LT5od19uYW1lID0gZGV2X25hbWUoJm9mZGV2LT5kZXYpOwotCWlmIChzZGhjaV9vZl9kYXRhKSB7Ci0JCWhvc3QtPnF1aXJrcyA9IHNkaGNpX29mX2RhdGEtPnF1aXJrczsKLQkJaG9zdC0+b3BzID0gJnNkaGNpX29mX2RhdGEtPm9wczsKLQl9Ci0KLQlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic2RoY2ksMS1iaXQtb25seSIsIE5VTEwpKQotCQlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfRk9SQ0VfMV9CSVRfREFUQTsKLQotCWlmIChzZGhjaV9vZl93cF9pbnZlcnRlZChucCkpCi0JCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUOwotCi0JY2xrID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2xvY2stZnJlcXVlbmN5IiwgJnNpemUpOwotCWlmIChjbGsgJiYgc2l6ZSA9PSBzaXplb2YoKmNsaykgJiYgKmNsaykKLQkJb2ZfaG9zdC0+Y2xvY2sgPSAqY2xrOwotCi0JcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfYWRkX2hvc3Q7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2FkZF9ob3N0OgotCWlycV9kaXNwb3NlX21hcHBpbmcoaG9zdC0+aXJxKTsKLWVycl9ub19pcnE6Ci0JaW91bm1hcChob3N0LT5pb2FkZHIpOwotZXJyX2FkZHJfbWFwOgotCXNkaGNpX2ZyZWVfaG9zdChob3N0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzZGhjaV9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCi17Ci0Jc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwotCi0Jc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgMCk7Ci0Jc2RoY2lfZnJlZV9ob3N0KGhvc3QpOwotCWlycV9kaXNwb3NlX21hcHBpbmcoaG9zdC0+aXJxKTsKLQlpb3VubWFwKGhvc3QtPmlvYWRkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNkaGNpX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1lc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZXNkaGMiLCAuZGF0YSA9ICZzZGhjaV9lc2RoYywgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbCxlc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiZ2VuZXJpYy1zZGhjaSIsIH0sCi0Je30sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2RoY2lfb2ZfbWF0Y2gpOwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzZGhjaV9vZl9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lID0gInNkaGNpLW9mIiwKLQkubWF0Y2hfdGFibGUgPSBzZGhjaV9vZl9tYXRjaCwKLQkucHJvYmUgPSBzZGhjaV9vZl9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2RoY2lfb2ZfcmVtb3ZlKSwKLQkuc3VzcGVuZCA9IHNkaGNpX29mX3N1c3BlbmQsCi0JLnJlc3VtZQk9IHNkaGNpX29mX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNkaGNpX29mX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzZGhjaV9vZl9kcml2ZXIpOwotfQotbW9kdWxlX2luaXQoc2RoY2lfb2ZfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzZGhjaV9vZl9leGl0KHZvaWQpCi17Ci0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNkaGNpX29mX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChzZGhjaV9vZl9leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIE9GIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4sICIKLQkgICAgICAiQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwOWFkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogT3BlbkZpcm13YXJlIGJpbmRpbmdzIGZvciBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3JzOiBYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICoJICAgIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1NESENJX09GX0gKKyNkZWZpbmUgX19TREhDSV9PRl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgInNkaGNpLmgiCisKK3N0cnVjdCBzZGhjaV9vZl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgcXVpcmtzOworCXN0cnVjdCBzZGhjaV9vcHMgb3BzOworfTsKKworc3RydWN0IHNkaGNpX29mX2hvc3QgeworCXVuc2lnbmVkIGludCBjbG9jazsKKwl1MTYgeGZlcl9tb2RlX3NoYWRvdzsKK307CisKK2V4dGVybiB1MzIgc2RoY2lfYmUzMmJzX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKTsKK2V4dGVybiB1MTYgc2RoY2lfYmUzMmJzX3JlYWR3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKTsKK2V4dGVybiB1OCBzZGhjaV9iZTMyYnNfcmVhZGIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOworZXh0ZXJuIHZvaWQgc2RoY2lfYmUzMmJzX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZyk7CitleHRlcm4gdm9pZCBzZGhjaV9iZTMyYnNfd3JpdGV3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MTYgdmFsLCBpbnQgcmVnKTsKK2V4dGVybiB2b2lkIHNkaGNpX2JlMzJic193cml0ZWIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IHZhbCwgaW50IHJlZyk7CisKK2V4dGVybiBzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSBzZGhjaV9lc2RoYzsKK2V4dGVybiBzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSBzZGhjaV9obHdkOworCisjZW5kaWYgLyogX19TREhDSV9PRl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwppbmRleCBlMDM1NjY0Li41YzNhMTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKQEAgLTI4NSw2ICsyODUsNzMgQEAKIAkucmVzdW1lCQk9IGptaWNyb25fcmVzdW1lLAogfTsKIAorLyogU3lzS29ubmVjdCBDYXJkQnVzMlNESU8gZXh0cmEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU0tUX0NUUkwJCTB4MjAwCisjZGVmaW5lIFNZU0tUX1JERklGT19TVEFUCTB4MjA0CisjZGVmaW5lIFNZU0tUX1dSRklGT19TVEFUCTB4MjA4CisjZGVmaW5lIFNZU0tUX1BPV0VSX0RBVEEJMHgyMGMKKyNkZWZpbmUgICBTWVNLVF9QT1dFUl8zMzAJMHhlZgorI2RlZmluZSAgIFNZU0tUX1BPV0VSXzMwMAkweGY4CisjZGVmaW5lICAgU1lTS1RfUE9XRVJfMTg0CTB4Y2MKKyNkZWZpbmUgU1lTS1RfUE9XRVJfQ01ECQkweDIwZAorI2RlZmluZSAgIFNZU0tUX1BPV0VSX1NUQVJUCSgxIDw8IDcpCisjZGVmaW5lIFNZU0tUX1BPV0VSX1NUQVRVUwkweDIwZQorI2RlZmluZSAgIFNZU0tUX1BPV0VSX1NUQVRVU19PSwkoMSA8PCAwKQorI2RlZmluZSBTWVNLVF9CT0FSRF9SRVYJCTB4MjEwCisjZGVmaW5lIFNZU0tUX0NISVBfUkVWCQkweDIxMQorI2RlZmluZSBTWVNLVF9DT05GX0RBVEEJCTB4MjEyCisjZGVmaW5lICAgU1lTS1RfQ09ORl9EQVRBXzFWOAkoMSA8PCAyKQorI2RlZmluZSAgIFNZU0tUX0NPTkZfREFUQV8yVjUJKDEgPDwgMSkKKyNkZWZpbmUgICBTWVNLVF9DT05GX0RBVEFfM1YzCSgxIDw8IDApCisKK3N0YXRpYyBpbnQgc3lza3RfcHJvYmUoc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwKQoreworCWlmICgoY2hpcC0+cGRldi0+Y2xhc3MgJiAweDAwMDBGRikgPT0gUENJX1NESENJX0lGVkVORE9SKSB7CisJCWNoaXAtPnBkZXYtPmNsYXNzICY9IH4weDAwMDBGRjsKKwkJY2hpcC0+cGRldi0+Y2xhc3MgfD0gUENJX1NESENJX0lGRE1BOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeXNrdF9wcm9iZV9zbG90KHN0cnVjdCBzZGhjaV9wY2lfc2xvdCAqc2xvdCkKK3sKKwlpbnQgdG0sIHBzOworCisJdTggYm9hcmRfcmV2ID0gcmVhZGIoc2xvdC0+aG9zdC0+aW9hZGRyICsgU1lTS1RfQk9BUkRfUkVWKTsKKwl1OCAgY2hpcF9yZXYgPSByZWFkYihzbG90LT5ob3N0LT5pb2FkZHIgKyBTWVNLVF9DSElQX1JFVik7CisJZGV2X2luZm8oJnNsb3QtPmNoaXAtPnBkZXYtPmRldiwgIlN5c0tvbm5lY3QgQ2FyZEJ1czJTRElPLCAiCisJCQkJCSAiYm9hcmQgcmV2ICVkLiVkLCBjaGlwIHJldiAlZC4lZFxuIiwKKwkJCQkJIGJvYXJkX3JldiA+PiA0LCBib2FyZF9yZXYgJiAweGYsCisJCQkJCSBjaGlwX3JldiA+PiA0LCAgY2hpcF9yZXYgJiAweGYpOworCWlmIChjaGlwX3JldiA+PSAweDIwKQorCQlzbG90LT5ob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfRk9SQ0VfRE1BOworCisJd3JpdGViKFNZU0tUX1BPV0VSXzMzMCwgc2xvdC0+aG9zdC0+aW9hZGRyICsgU1lTS1RfUE9XRVJfREFUQSk7CisJd3JpdGViKFNZU0tUX1BPV0VSX1NUQVJULCBzbG90LT5ob3N0LT5pb2FkZHIgKyBTWVNLVF9QT1dFUl9DTUQpOworCXVkZWxheSg1MCk7CisJdG0gPSAxMDsgIC8qIFdhaXQgbWF4IDEgbXMgKi8KKwlkbyB7CisJCXBzID0gcmVhZHcoc2xvdC0+aG9zdC0+aW9hZGRyICsgU1lTS1RfUE9XRVJfU1RBVFVTKTsKKwkJaWYgKHBzICYgU1lTS1RfUE9XRVJfU1RBVFVTX09LKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKC0tdG0pOworCWlmICghdG0pIHsKKwkJZGV2X2Vycigmc2xvdC0+Y2hpcC0+cGRldi0+ZGV2LAorCQkJInBvd2VyIHJlZ3VsYXRvciBuZXZlciBzdGFiaWxpemVkIik7CisJCXdyaXRlYigwLCBzbG90LT5ob3N0LT5pb2FkZHIgKyBTWVNLVF9QT1dFUl9DTUQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfc3lza3QgPSB7CisJLnF1aXJrcwkJPSBTREhDSV9RVUlSS19OT19TSU1VTFRfVkREX0FORF9QT1dFUiwKKwkucHJvYmUJCT0gc3lza3RfcHJvYmUsCisJLnByb2JlX3Nsb3QJPSBzeXNrdF9wcm9iZV9zbG90LAorfTsKKwogc3RhdGljIGludCB2aWFfcHJvYmUoc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwKQogewogCWlmIChjaGlwLT5wZGV2LT5yZXZpc2lvbiA9PSAweDEwKQpAQCAtMzYzLDYgKzQzMCwxNCBAQAogCX0sCiAKIAl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULAorCQkuZGV2aWNlCQk9IDB4ODAwMCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX3N5c2t0LAorCX0sCisKKwl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9WSUEsCiAJCS5kZXZpY2UJCT0gMHg5NWQwLAogCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCBjZTVmMWQ3Li44NDJmNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC04LDYgKzgsOCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KKyNpZm5kZWYgX19TREhDSV9ICisjZGVmaW5lIF9fU0RIQ0lfSAogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtNDA4LDMgKzQxMCw1IEBACiBleHRlcm4gaW50IHNkaGNpX3N1c3BlbmRfaG9zdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgc2RoY2lfcmVzdW1lX2hvc3Qoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwogI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NESENJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwppbmRleCA5MTk5MWI0Li43Y2NjYzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCkBAIC01OTEsNyArNTkxLDcgQEAKIAlkaXNhYmxlX21tY19pcnFzKGhvc3QsIFRNSU9fTUFTS19BTEwpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCB0bWlvX21tY19pcnEsIElSUUZfRElTQUJMRUQgfAotCQlJUlFGX1RSSUdHRVJfRkFMTElORywgInRtaW8tbW1jIiwgaG9zdCk7CisJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCBkZXZfbmFtZSgmZGV2LT5kZXYpLCBob3N0KTsKIAlpZiAocmV0KQogCQlnb3RvIHVubWFwX2NuZjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCBlNzU2M2E5Li41ZmJmMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtNDMsMTUgKzQzLDE3IEBACiAvLyBkZWJ1Z2dpbmcsIHR1cm5zIG9mZiBidWZmZXIgd3JpdGUgbW9kZSBpZiBzZXQgdG8gMQogI2RlZmluZSBGT1JDRV9XT1JEX1dSSVRFIDAKIAotI2RlZmluZSBNQU5VRkFDVFVSRVJfSU5URUwJMHgwMDg5CisvKiBJbnRlbCBjaGlwcyAqLwogI2RlZmluZSBJODI4MDJBQgkweDAwYWQKICNkZWZpbmUgSTgyODAyQUMJMHgwMGFjCiAjZGVmaW5lIFBGMzhGNDQ3NgkweDg4MWMKLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NUICAgICAgICAgMHgwMDIwCisvKiBTVE1pY3JvZWxlY3Ryb25pY3MgY2hpcHMgKi8KICNkZWZpbmUgTTUwTFBXMDgwICAgICAgIDB4MDAyRgogI2RlZmluZSBNNTBGTFcwODBBCTB4MDA4MAogI2RlZmluZSBNNTBGTFcwODBCCTB4MDA4MQorLyogQXRtZWwgY2hpcHMgKi8KICNkZWZpbmUgQVQ0OUJWNjQwRAkweDAyZGUKKyNkZWZpbmUgQVQ0OUJWNjQwRFQJMHgwMmRiCiAKIHN0YXRpYyBpbnQgY2ZpX2ludGVsZXh0X3JlYWQgKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosIHVfY2hhciAqKTsKIHN0YXRpYyBpbnQgY2ZpX2ludGVsZXh0X3dyaXRlX3dvcmRzKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosIGNvbnN0IHVfY2hhciAqKTsKQEAgLTE5OSw2ICsyMDEsMTYgQEAKIAljZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dE1heCA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZpeHVwX2F0NDlidjY0MGR4X2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKnBhcmFtKQoreworCXN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OworCXN0cnVjdCBjZmlfcHJpX2ludGVsZXh0ICpjZmlwID0gY2ZpLT5jbWRzZXRfcHJpdjsKKworCWNmaXAtPkZlYXR1cmVTdXBwb3J0IHw9ICgxIDw8IDUpOworCW10ZC0+ZmxhZ3MgfD0gTVREX1BPV0VSVVBfTE9DSzsKK30KKwogI2lmZGVmIENNRFNFVDAwMDFfRElTQUJMRV9FUkFTRV9TVVNQRU5EX09OX1dSSVRFCiAvKiBTb21lIEludGVsIFN0cmF0YSBGbGFzaCBwcmlvciB0byBGUE8gcmV2aXNpb24gQyBoYXMgYnVncyBpbiB0aGlzIGFyZWEgKi8KIHN0YXRpYyB2b2lkIGZpeHVwX2ludGVsX3N0cmF0YWZsYXNoKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB2b2lkKiBwYXJhbSkKQEAgLTI4Myw2ICsyOTUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNmaV9maXh1cCBjZmlfZml4dXBfdGFibGVbXSA9IHsKIAl7IENGSV9NRlJfQVRNRUwsIENGSV9JRF9BTlksIGZpeHVwX2NvbnZlcnRfYXRtZWxfcHJpLCBOVUxMIH0sCisJeyBDRklfTUZSX0FUTUVMLCBBVDQ5QlY2NDBELCBmaXh1cF9hdDQ5YnY2NDBkeF9sb2NrLCBOVUxMIH0sCisJeyBDRklfTUZSX0FUTUVMLCBBVDQ5QlY2NDBEVCwgZml4dXBfYXQ0OWJ2NjQwZHhfbG9jaywgTlVMTCB9LAogI2lmZGVmIENNRFNFVDAwMDFfRElTQUJMRV9FUkFTRV9TVVNQRU5EX09OX1dSSVRFCiAJeyBDRklfTUZSX0FOWSwgQ0ZJX0lEX0FOWSwgZml4dXBfaW50ZWxfc3RyYXRhZmxhc2gsIE5VTEwgfSwKICNlbmRpZgpAQCAtMjk0LDE2ICszMDgsMTYgQEAKICNlbmRpZgogCXsgQ0ZJX01GUl9TVCwgMHgwMGJhLCAvKiBNMjhXMzIwQ1QgKi8gZml4dXBfc3RfbTI4dzMyMGN0LCBOVUxMIH0sCiAJeyBDRklfTUZSX1NULCAweDAwYmIsIC8qIE0yOFczMjBDQiAqLyBmaXh1cF9zdF9tMjh3MzIwY2IsIE5VTEwgfSwKLQl7IE1BTlVGQUNUVVJFUl9JTlRFTCwgQ0ZJX0lEX0FOWSwgZml4dXBfdW5sb2NrX3Bvd2VydXBfbG9jaywgTlVMTCwgfSwKKwl7IENGSV9NRlJfSU5URUwsIENGSV9JRF9BTlksIGZpeHVwX3VubG9ja19wb3dlcnVwX2xvY2ssIE5VTEwsIH0sCiAJeyAwLCAwLCBOVUxMLCBOVUxMIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZpX2ZpeHVwIGplZGVjX2ZpeHVwX3RhYmxlW10gPSB7Ci0JeyBNQU5VRkFDVFVSRVJfSU5URUwsIEk4MjgwMkFCLCAgIGZpeHVwX3VzZV9md2hfbG9jaywgTlVMTCwgfSwKLQl7IE1BTlVGQUNUVVJFUl9JTlRFTCwgSTgyODAyQUMsICAgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAotCXsgTUFOVUZBQ1RVUkVSX1NULCAgICBNNTBMUFcwODAsICBmaXh1cF91c2VfZndoX2xvY2ssIE5VTEwsIH0sCi0JeyBNQU5VRkFDVFVSRVJfU1QsICAgIE01MEZMVzA4MEEsIGZpeHVwX3VzZV9md2hfbG9jaywgTlVMTCwgfSwKLQl7IE1BTlVGQUNUVVJFUl9TVCwgICAgTTUwRkxXMDgwQiwgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAorCXsgQ0ZJX01GUl9JTlRFTCwgSTgyODAyQUIsICAgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAorCXsgQ0ZJX01GUl9JTlRFTCwgSTgyODAyQUMsICAgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAorCXsgQ0ZJX01GUl9TVCwgICAgTTUwTFBXMDgwLCAgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAorCXsgQ0ZJX01GUl9TVCwgICAgTTUwRkxXMDgwQSwgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAorCXsgQ0ZJX01GUl9TVCwgICAgTTUwRkxXMDgwQiwgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAogCXsgMCwgMCwgTlVMTCwgTlVMTCB9CiB9Owogc3RhdGljIHN0cnVjdCBjZmlfZml4dXAgZml4dXBfdGFibGVbXSA9IHsKQEAgLTMxOSw3ICszMzMsNyBAQAogc3RhdGljIHZvaWQgY2ZpX2ZpeHVwX21ham9yX21pbm9yKHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpLAogCQkJCQkJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmV4dHApCiB7Ci0JaWYgKGNmaS0+bWZyID09IE1BTlVGQUNUVVJFUl9JTlRFTCAmJgorCWlmIChjZmktPm1mciA9PSBDRklfTUZSX0lOVEVMICYmCiAJCQljZmktPmlkID09IFBGMzhGNDQ3NiAmJiBleHRwLT5NaW5vclZlcnNpb24gPT0gJzMnKQogCQlleHRwLT5NaW5vclZlcnNpb24gPSAnMSc7CiB9CkBAIC0yMjM1LDcgKzIyNDksNyBAQAogCiAJLyogU29tZSBjaGlwcyBoYXZlIE9UUCBsb2NhdGVkIGluIHRoZSBfdG9wXyBwYXJ0aXRpb24gb25seS4KIAkgICBGb3IgZXhhbXBsZTogSW50ZWwgMjhGMjU2TDE4VCAoVCBtZWFucyB0b3AtcGFyYW1ldGVyIGRldmljZSkgKi8KLQlpZiAoY2ZpLT5tZnIgPT0gTUFOVUZBQ1RVUkVSX0lOVEVMKSB7CisJaWYgKGNmaS0+bWZyID09IENGSV9NRlJfSU5URUwpIHsKIAkJc3dpdGNoIChjZmktPmlkKSB7CiAJCWNhc2UgMHg4ODBiOgogCQljYXNlIDB4ODgwYzoKQEAgLTI1NjQsNiArMjU3OCw3IEBACiAJCWlmICghcmV0KSB7CiAJCQltYXBfd3JpdGUobWFwLCBDTUQoMHhmZiksIGNoaXAtPnN0YXJ0KTsKIAkJCWNoaXAtPnN0YXRlID0gRkxfU0hVVERPV047CisJCQlwdXRfY2hpcChtYXAsIGNoaXAsIGNoaXAtPnN0YXJ0KTsKIAkJfQogCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwppbmRleCA5NGJiNjFlLi5mMzYwMGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwpAQCAtNDkwLDEwICs0OTAsNiBAQAogCX0KICNlbmRpZgogCi0JLyogRklYTUU6IGVyYXNlLXN1c3BlbmQtcHJvZ3JhbSBpcyBicm9rZW4uICBTZWUKLQkgICBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9waXBlcm1haWwvbGludXgtbXRkLzIwMDMtRGVjZW1iZXIvMDA5MDAxLmh0bWwgKi8KLQlwcmludGsoS0VSTl9OT1RJQ0UgImNmaV9jbWRzZXRfMDAwMjogRGlzYWJsaW5nIGVyYXNlLXN1c3BlbmQtcHJvZ3JhbSBkdWUgdG8gY29kZSBicm9rZW5uZXNzLlxuIik7Ci0KIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCXJldHVybiBtdGQ7CiAKQEAgLTU3Myw3ICs1NjksNiBAQAogCiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIldhaXRpbmcgZm9yIGNoaXAgdG8gYmUgcmVhZHkgdGltZWQgb3V0LlxuIik7Ci0JCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwpAQCAtNTg5LDE1ICs1ODQsOSBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgRkxfRVJBU0lORzoKLQkJaWYgKG1vZGUgPT0gRkxfV1JJVElORykgLyogRklYTUU6IEVyYXNlLXN1c3BlbmQtcHJvZ3JhbSBhcHBlYXJzIGJyb2tlbi4gKi8KLQkJCWdvdG8gc2xlZXA7Ci0KLQkJaWYgKCEoICAgbW9kZSA9PSBGTF9SRUFEWQotCQkgICAgICB8fCBtb2RlID09IEZMX1BPSU5UCi0JCSAgICAgIHx8ICFjZmlwCi0JCSAgICAgIHx8IChtb2RlID09IEZMX1dSSVRJTkcgJiYgKGNmaXAtPkVyYXNlU3VzcGVuZCAmIDB4MikpCi0JCSAgICAgIHx8IChtb2RlID09IEZMX1dSSVRJTkcgJiYgKGNmaXAtPkVyYXNlU3VzcGVuZCAmIDB4MSkKLQkJICAgICkpKQorCQlpZiAoIWNmaXAgfHwgIShjZmlwLT5FcmFzZVN1c3BlbmQgJiAoMHgxfDB4MikpIHx8CisJCSAgICAhKG1vZGUgPT0gRkxfUkVBRFkgfHwgbW9kZSA9PSBGTF9QT0lOVCB8fAorCQkgICAgKG1vZGUgPT0gRkxfV1JJVElORyAmJiAoY2ZpcC0+RXJhc2VTdXNwZW5kICYgMHgyKSkpKQogCQkJZ290byBzbGVlcDsKIAogCQkvKiBXZSBjb3VsZCBjaGVjayB0byBzZWUgaWYgd2UncmUgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2VjdG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwppbmRleCBjNWE4NGZkLi5jYTU4NGQwIDEwMDc1NQotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKQEAgLTcxLDYgKzcxLDEzIEBACiAJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwogCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKQogCQlyZXR1cm4gMTsKKwkvKiBzb21lIG9sZCBTU1QgY2hpcHMsIGUuZy4gMzlWRjE2MHgvMzlWRjMyMHggKi8KKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4QUEsIDB4NTU1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHg1NSwgMHgyQUFBLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkKKwkJcmV0dXJuIDE7CiAJLyogUVJZIG5vdCBmb3VuZCAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKaW5kZXggNzM2YTNiZS4uMWJlYzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCkBAIC0xNDIsOCArMTQyLDggQEAKIAogLyogU1QgLSB3d3cuc3QuY29tICovCiAjZGVmaW5lIE0yOUY4MDBBQgkweDAwNTgKLSNkZWZpbmUgTTI5VzgwMERUCTB4MDBENwotI2RlZmluZSBNMjlXODAwREIJMHgwMDVCCisjZGVmaW5lIE0yOVc4MDBEVAkweDIyRDcKKyNkZWZpbmUgTTI5VzgwMERCCTB4MjI1QgogI2RlZmluZSBNMjlXNDAwRFQJMHgwMEVFCiAjZGVmaW5lIE0yOVc0MDBEQgkweDAwRUYKICNkZWZpbmUgTTI5VzE2MERUCTB4MjJDNApAQCAtMTU3NSw3ICsxNTc1LDcgQEAKIAkJLmRldl9pZAkJPSBNMjlXODAwRFQsCiAJCS5uYW1lCQk9ICJTVCBNMjlXODAwRFQiLAogCQkuZGV2dHlwZXMJPSBDRklfREVWSUNFVFlQRV9YMTZ8Q0ZJX0RFVklDRVRZUEVfWDgsCi0JCS51YWRkcgkJPSBNVERfVUFERFJfMHg1NTU1XzB4MkFBQSwJLyogPz8/PyAqLworCQkudWFkZHIJCT0gTVREX1VBRERSXzB4MEFBQV8weDA1NTUsCiAJCS5kZXZfc2l6ZQk9IFNJWkVfMU1pQiwKIAkJLmNtZF9zZXQJPSBQX0lEX0FNRF9TVEQsCiAJCS5ucl9yZWdpb25zCT0gNCwKQEAgLTE1OTAsNyArMTU5MCw3IEBACiAJCS5kZXZfaWQJCT0gTTI5VzgwMERCLAogCQkubmFtZQkJPSAiU1QgTTI5VzgwMERCIiwKIAkJLmRldnR5cGVzCT0gQ0ZJX0RFVklDRVRZUEVfWDE2fENGSV9ERVZJQ0VUWVBFX1g4LAotCQkudWFkZHIJCT0gTVREX1VBRERSXzB4NTU1NV8weDJBQUEsCS8qID8/Pz8gKi8KKwkJLnVhZGRyCQk9IE1URF9VQUREUl8weDBBQUFfMHgwNTU1LAogCQkuZGV2X3NpemUJPSBTSVpFXzFNaUIsCiAJCS5jbWRfc2V0CT0gUF9JRF9BTURfU1RELAogCQkubnJfcmVnaW9ucwk9IDQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCA0YzE5MjY5Li5mM2Y0NzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KQEAgLTI5LDkgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAKLQotI2RlZmluZSBGTEFTSF9QQUdFU0laRQkJMjU2Ci0KIC8qIEZsYXNoIG9wY29kZXMuICovCiAjZGVmaW5lCU9QQ09ERV9XUkVOCQkweDA2CS8qIFdyaXRlIGVuYWJsZSAqLwogI2RlZmluZQlPUENPREVfUkRTUgkJMHgwNQkvKiBSZWFkIHN0YXR1cyByZWdpc3RlciAqLwpAQCAtNjEsNyArNTksNyBAQAogCiAvKiBEZWZpbmUgbWF4IHRpbWVzIHRvIGNoZWNrIHN0YXR1cyByZWdpc3RlciBiZWZvcmUgd2UgZ2l2ZSB1cC4gKi8KICNkZWZpbmUJTUFYX1JFQURZX1dBSVRfSklGRklFUwkoNDAgKiBIWikJLyogTTI1UDE2IHNwZWNzIDQwcyBtYXggY2hpcCBlcmFzZSAqLwotI2RlZmluZQlDTURfU0laRQkJNAorI2RlZmluZQlNQVhfQ01EX1NJWkUJCTQKIAogI2lmZGVmIENPTkZJR19NMjVQWFhfVVNFX0ZBU1RfUkVBRAogI2RlZmluZSBPUENPREVfUkVBRCAJT1BDT0RFX0ZBU1RfUkVBRApAQCAtNzgsOCArNzYsMTAgQEAKIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IG10ZF9pbmZvCQltdGQ7CiAJdW5zaWduZWQJCXBhcnRpdGlvbmVkOjE7CisJdTE2CQkJcGFnZV9zaXplOworCXUxNgkJCWFkZHJfd2lkdGg7CiAJdTgJCQllcmFzZV9vcGNvZGU7Ci0JdTgJCQljb21tYW5kW0NNRF9TSVpFICsgRkFTVF9SRUFEX0RVTU1ZX0JZVEVdOworCXU4CQkJKmNvbW1hbmQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtMjVwICptdGRfdG9fbTI1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKQEAgLTE5OCw2ICsxOTgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbTI1cF9hZGRyMmNtZChzdHJ1Y3QgbTI1cCAqZmxhc2gsIHVuc2lnbmVkIGludCBhZGRyLCB1OCAqY21kKQoreworCS8qIG9wY29kZSBpcyBpbiBjbWRbMF0gKi8KKwljbWRbMV0gPSBhZGRyID4+IChmbGFzaC0+YWRkcl93aWR0aCAqIDggLSAgOCk7CisJY21kWzJdID0gYWRkciA+PiAoZmxhc2gtPmFkZHJfd2lkdGggKiA4IC0gMTYpOworCWNtZFszXSA9IGFkZHIgPj4gKGZsYXNoLT5hZGRyX3dpZHRoICogOCAtIDI0KTsKK30KKworc3RhdGljIGludCBtMjVwX2NtZHN6KHN0cnVjdCBtMjVwICpmbGFzaCkKK3sKKwlyZXR1cm4gMSArIGZsYXNoLT5hZGRyX3dpZHRoOworfQorCiAvKgogICogRXJhc2Ugb25lIHNlY3RvciBvZiBmbGFzaCBtZW1vcnkgYXQgb2Zmc2V0IGBgb2Zmc2V0Jycgd2hpY2ggaXMgYW55CiAgKiBhZGRyZXNzIHdpdGhpbiB0aGUgc2VjdG9yIHdoaWNoIHNob3VsZCBiZSBlcmFzZWQuCkBAIC0yMTksMTEgKzIzMiw5IEBACiAKIAkvKiBTZXQgdXAgY29tbWFuZCBidWZmZXIuICovCiAJZmxhc2gtPmNvbW1hbmRbMF0gPSBmbGFzaC0+ZXJhc2Vfb3Bjb2RlOwotCWZsYXNoLT5jb21tYW5kWzFdID0gb2Zmc2V0ID4+IDE2OwotCWZsYXNoLT5jb21tYW5kWzJdID0gb2Zmc2V0ID4+IDg7Ci0JZmxhc2gtPmNvbW1hbmRbM10gPSBvZmZzZXQ7CisJbTI1cF9hZGRyMmNtZChmbGFzaCwgb2Zmc2V0LCBmbGFzaC0+Y29tbWFuZCk7CiAKLQlzcGlfd3JpdGUoZmxhc2gtPnNwaSwgZmxhc2gtPmNvbW1hbmQsIENNRF9TSVpFKTsKKwlzcGlfd3JpdGUoZmxhc2gtPnNwaSwgZmxhc2gtPmNvbW1hbmQsIG0yNXBfY21kc3ooZmxhc2gpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI1LDcgKzMzNiw3IEBACiAJICogU2hvdWxkIGFkZCAxIGJ5dGUgRFVNTVlfQllURS4KIAkgKi8KIAl0WzBdLnR4X2J1ZiA9IGZsYXNoLT5jb21tYW5kOwotCXRbMF0ubGVuID0gQ01EX1NJWkUgKyBGQVNUX1JFQURfRFVNTVlfQllURTsKKwl0WzBdLmxlbiA9IG0yNXBfY21kc3ooZmxhc2gpICsgRkFTVF9SRUFEX0RVTU1ZX0JZVEU7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKIAogCXRbMV0ucnhfYnVmID0gYnVmOwpAQCAtMzUyLDEzICszNjMsMTEgQEAKIAogCS8qIFNldCB1cCB0aGUgd3JpdGUgZGF0YSBidWZmZXIuICovCiAJZmxhc2gtPmNvbW1hbmRbMF0gPSBPUENPREVfUkVBRDsKLQlmbGFzaC0+Y29tbWFuZFsxXSA9IGZyb20gPj4gMTY7Ci0JZmxhc2gtPmNvbW1hbmRbMl0gPSBmcm9tID4+IDg7Ci0JZmxhc2gtPmNvbW1hbmRbM10gPSBmcm9tOworCW0yNXBfYWRkcjJjbWQoZmxhc2gsIGZyb20sIGZsYXNoLT5jb21tYW5kKTsKIAogCXNwaV9zeW5jKGZsYXNoLT5zcGksICZtKTsKIAotCSpyZXRsZW4gPSBtLmFjdHVhbF9sZW5ndGggLSBDTURfU0laRSAtIEZBU1RfUkVBRF9EVU1NWV9CWVRFOworCSpyZXRsZW4gPSBtLmFjdHVhbF9sZW5ndGggLSBtMjVwX2NtZHN6KGZsYXNoKSAtIEZBU1RfUkVBRF9EVU1NWV9CWVRFOwogCiAJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CiAKQEAgLTM5Niw3ICs0MDUsNyBAQAogCW1lbXNldCh0LCAwLCAoc2l6ZW9mIHQpKTsKIAogCXRbMF0udHhfYnVmID0gZmxhc2gtPmNvbW1hbmQ7Ci0JdFswXS5sZW4gPSBDTURfU0laRTsKKwl0WzBdLmxlbiA9IG0yNXBfY21kc3ooZmxhc2gpOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CiAKIAl0WzFdLnR4X2J1ZiA9IGJ1ZjsKQEAgLTQxNCw0MSArNDIzLDM2IEBACiAKIAkvKiBTZXQgdXAgdGhlIG9wY29kZSBpbiB0aGUgd3JpdGUgYnVmZmVyLiAqLwogCWZsYXNoLT5jb21tYW5kWzBdID0gT1BDT0RFX1BQOwotCWZsYXNoLT5jb21tYW5kWzFdID0gdG8gPj4gMTY7Ci0JZmxhc2gtPmNvbW1hbmRbMl0gPSB0byA+PiA4OwotCWZsYXNoLT5jb21tYW5kWzNdID0gdG87CisJbTI1cF9hZGRyMmNtZChmbGFzaCwgdG8sIGZsYXNoLT5jb21tYW5kKTsKIAotCS8qIHdoYXQgcGFnZSBkbyB3ZSBzdGFydCB3aXRoPyAqLwotCXBhZ2Vfb2Zmc2V0ID0gdG8gJSBGTEFTSF9QQUdFU0laRTsKKwlwYWdlX29mZnNldCA9IHRvICYgKGZsYXNoLT5wYWdlX3NpemUgLSAxKTsKIAogCS8qIGRvIGFsbCB0aGUgYnl0ZXMgZml0IG9udG8gb25lIHBhZ2U/ICovCi0JaWYgKHBhZ2Vfb2Zmc2V0ICsgbGVuIDw9IEZMQVNIX1BBR0VTSVpFKSB7CisJaWYgKHBhZ2Vfb2Zmc2V0ICsgbGVuIDw9IGZsYXNoLT5wYWdlX3NpemUpIHsKIAkJdFsxXS5sZW4gPSBsZW47CiAKIAkJc3BpX3N5bmMoZmxhc2gtPnNwaSwgJm0pOwogCi0JCSpyZXRsZW4gPSBtLmFjdHVhbF9sZW5ndGggLSBDTURfU0laRTsKKwkJKnJldGxlbiA9IG0uYWN0dWFsX2xlbmd0aCAtIG0yNXBfY21kc3ooZmxhc2gpOwogCX0gZWxzZSB7CiAJCXUzMiBpOwogCiAJCS8qIHRoZSBzaXplIG9mIGRhdGEgcmVtYWluaW5nIG9uIHRoZSBmaXJzdCBwYWdlICovCi0JCXBhZ2Vfc2l6ZSA9IEZMQVNIX1BBR0VTSVpFIC0gcGFnZV9vZmZzZXQ7CisJCXBhZ2Vfc2l6ZSA9IGZsYXNoLT5wYWdlX3NpemUgLSBwYWdlX29mZnNldDsKIAogCQl0WzFdLmxlbiA9IHBhZ2Vfc2l6ZTsKIAkJc3BpX3N5bmMoZmxhc2gtPnNwaSwgJm0pOwogCi0JCSpyZXRsZW4gPSBtLmFjdHVhbF9sZW5ndGggLSBDTURfU0laRTsKKwkJKnJldGxlbiA9IG0uYWN0dWFsX2xlbmd0aCAtIG0yNXBfY21kc3ooZmxhc2gpOwogCi0JCS8qIHdyaXRlIGV2ZXJ5dGhpbmcgaW4gUEFHRVNJWkUgY2h1bmtzICovCisJCS8qIHdyaXRlIGV2ZXJ5dGhpbmcgaW4gZmxhc2gtPnBhZ2Vfc2l6ZSBjaHVua3MgKi8KIAkJZm9yIChpID0gcGFnZV9zaXplOyBpIDwgbGVuOyBpICs9IHBhZ2Vfc2l6ZSkgewogCQkJcGFnZV9zaXplID0gbGVuIC0gaTsKLQkJCWlmIChwYWdlX3NpemUgPiBGTEFTSF9QQUdFU0laRSkKLQkJCQlwYWdlX3NpemUgPSBGTEFTSF9QQUdFU0laRTsKKwkJCWlmIChwYWdlX3NpemUgPiBmbGFzaC0+cGFnZV9zaXplKQorCQkJCXBhZ2Vfc2l6ZSA9IGZsYXNoLT5wYWdlX3NpemU7CiAKIAkJCS8qIHdyaXRlIHRoZSBuZXh0IHBhZ2UgdG8gZmxhc2ggKi8KLQkJCWZsYXNoLT5jb21tYW5kWzFdID0gKHRvICsgaSkgPj4gMTY7Ci0JCQlmbGFzaC0+Y29tbWFuZFsyXSA9ICh0byArIGkpID4+IDg7Ci0JCQlmbGFzaC0+Y29tbWFuZFszXSA9ICh0byArIGkpOworCQkJbTI1cF9hZGRyMmNtZChmbGFzaCwgdG8gKyBpLCBmbGFzaC0+Y29tbWFuZCk7CiAKIAkJCXRbMV0udHhfYnVmID0gYnVmICsgaTsKIAkJCXRbMV0ubGVuID0gcGFnZV9zaXplOwpAQCAtNDYwLDcgKzQ2NCw3IEBACiAJCQlzcGlfc3luYyhmbGFzaC0+c3BpLCAmbSk7CiAKIAkJCWlmIChyZXRsZW4pCi0JCQkJKnJldGxlbiArPSBtLmFjdHVhbF9sZW5ndGggLSBDTURfU0laRTsKKwkJCQkqcmV0bGVuICs9IG0uYWN0dWFsX2xlbmd0aCAtIG0yNXBfY21kc3ooZmxhc2gpOwogCQl9CiAJfQogCkBAIC00OTIsNyArNDk2LDcgQEAKIAltZW1zZXQodCwgMCwgKHNpemVvZiB0KSk7CiAKIAl0WzBdLnR4X2J1ZiA9IGZsYXNoLT5jb21tYW5kOwotCXRbMF0ubGVuID0gQ01EX1NJWkU7CisJdFswXS5sZW4gPSBtMjVwX2NtZHN6KGZsYXNoKTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwogCiAJdFsxXS50eF9idWYgPSBidWY7CkBAIC01MTEsOSArNTE1LDcgQEAKIAkvKiBTdGFydCB3cml0ZSBmcm9tIG9kZCBhZGRyZXNzLiAqLwogCWlmIChhY3R1YWwpIHsKIAkJZmxhc2gtPmNvbW1hbmRbMF0gPSBPUENPREVfQlA7Ci0JCWZsYXNoLT5jb21tYW5kWzFdID0gdG8gPj4gMTY7Ci0JCWZsYXNoLT5jb21tYW5kWzJdID0gdG8gPj4gODsKLQkJZmxhc2gtPmNvbW1hbmRbM10gPSB0bzsKKwkJbTI1cF9hZGRyMmNtZChmbGFzaCwgdG8sIGZsYXNoLT5jb21tYW5kKTsKIAogCQkvKiB3cml0ZSBvbmUgYnl0ZS4gKi8KIAkJdFsxXS5sZW4gPSAxOwpAQCAtNTIxLDE3ICs1MjMsMTUgQEAKIAkJcmV0ID0gd2FpdF90aWxsX3JlYWR5KGZsYXNoKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gdGltZV9vdXQ7Ci0JCSpyZXRsZW4gKz0gbS5hY3R1YWxfbGVuZ3RoIC0gQ01EX1NJWkU7CisJCSpyZXRsZW4gKz0gbS5hY3R1YWxfbGVuZ3RoIC0gbTI1cF9jbWRzeihmbGFzaCk7CiAJfQogCXRvICs9IGFjdHVhbDsKIAogCWZsYXNoLT5jb21tYW5kWzBdID0gT1BDT0RFX0FBSV9XUDsKLQlmbGFzaC0+Y29tbWFuZFsxXSA9IHRvID4+IDE2OwotCWZsYXNoLT5jb21tYW5kWzJdID0gdG8gPj4gODsKLQlmbGFzaC0+Y29tbWFuZFszXSA9IHRvOworCW0yNXBfYWRkcjJjbWQoZmxhc2gsIHRvLCBmbGFzaC0+Y29tbWFuZCk7CiAKIAkvKiBXcml0ZSBvdXQgbW9zdCBvZiB0aGUgZGF0YSBoZXJlLiAqLwotCWNtZF9zeiA9IENNRF9TSVpFOworCWNtZF9zeiA9IG0yNXBfY21kc3ooZmxhc2gpOwogCWZvciAoOyBhY3R1YWwgPCBsZW4gLSAxOyBhY3R1YWwgKz0gMikgewogCQl0WzBdLmxlbiA9IGNtZF9zejsKIAkJLyogd3JpdGUgdHdvIGJ5dGVzLiAqLwpAQCAtNTU1LDEwICs1NTUsOCBAQAogCWlmIChhY3R1YWwgIT0gbGVuKSB7CiAJCXdyaXRlX2VuYWJsZShmbGFzaCk7CiAJCWZsYXNoLT5jb21tYW5kWzBdID0gT1BDT0RFX0JQOwotCQlmbGFzaC0+Y29tbWFuZFsxXSA9IHRvID4+IDE2OwotCQlmbGFzaC0+Y29tbWFuZFsyXSA9IHRvID4+IDg7Ci0JCWZsYXNoLT5jb21tYW5kWzNdID0gdG87Ci0JCXRbMF0ubGVuID0gQ01EX1NJWkU7CisJCW0yNXBfYWRkcjJjbWQoZmxhc2gsIHRvLCBmbGFzaC0+Y29tbWFuZCk7CisJCXRbMF0ubGVuID0gbTI1cF9jbWRzeihmbGFzaCk7CiAJCXRbMV0ubGVuID0gMTsKIAkJdFsxXS50eF9idWYgPSBidWYgKyBhY3R1YWw7CiAKQEAgLTU2Niw3ICs1NjQsNyBAQAogCQlyZXQgPSB3YWl0X3RpbGxfcmVhZHkoZmxhc2gpOwogCQlpZiAocmV0KQogCQkJZ290byB0aW1lX291dDsKLQkJKnJldGxlbiArPSBtLmFjdHVhbF9sZW5ndGggLSBDTURfU0laRTsKKwkJKnJldGxlbiArPSBtLmFjdHVhbF9sZW5ndGggLSBtMjVwX2NtZHN6KGZsYXNoKTsKIAkJd3JpdGVfZGlzYWJsZShmbGFzaCk7CiAJfQogCkBAIC01ODIsOCArNTgwLDYgQEAKICAqLwogCiBzdHJ1Y3QgZmxhc2hfaW5mbyB7Ci0JY2hhcgkJKm5hbWU7Ci0KIAkvKiBKRURFQyBpZCB6ZXJvIG1lYW5zICJubyBJRCIgKG1vc3Qgb2xkZXIgY2hpcHMpOyBvdGhlcndpc2UgaXQgaGFzCiAJICogYSBoaWdoIGJ5dGUgb2YgemVybyBwbHVzIHRocmVlIGRhdGEgYnl0ZXM6IHRoZSBtYW51ZmFjdHVyZXIgaWQsCiAJICogdGhlbiBhIHR3byBieXRlIGRldmljZSBpZC4KQEAgLTU5Nyw4NyArNTkzLDExOSBAQAogCXVuc2lnbmVkCXNlY3Rvcl9zaXplOwogCXUxNgkJbl9zZWN0b3JzOwogCisJdTE2CQlwYWdlX3NpemU7CisJdTE2CQlhZGRyX3dpZHRoOworCiAJdTE2CQlmbGFnczsKICNkZWZpbmUJU0VDVF80SwkJMHgwMQkJLyogT1BDT0RFX0JFXzRLIHdvcmtzIHVuaWZvcm1seSAqLworI2RlZmluZQlNMjVQX05PX0VSQVNFCTB4MDIJCS8qIE5vIGVyYXNlIGNvbW1hbmQgbmVlZGVkICovCiB9OwogCisjZGVmaW5lIElORk8oX2plZGVjX2lkLCBfZXh0X2lkLCBfc2VjdG9yX3NpemUsIF9uX3NlY3RvcnMsIF9mbGFncykJXAorCSgoa2VybmVsX3Vsb25nX3QpJihzdHJ1Y3QgZmxhc2hfaW5mbykgewkJCQlcCisJCS5qZWRlY19pZCA9IChfamVkZWNfaWQpLAkJCQlcCisJCS5leHRfaWQgPSAoX2V4dF9pZCksCQkJCQlcCisJCS5zZWN0b3Jfc2l6ZSA9IChfc2VjdG9yX3NpemUpLAkJCQlcCisJCS5uX3NlY3RvcnMgPSAoX25fc2VjdG9ycyksCQkJCVwKKwkJLnBhZ2Vfc2l6ZSA9IDI1NiwJCQkJCVwKKwkJLmFkZHJfd2lkdGggPSAzLAkJCQkJXAorCQkuZmxhZ3MgPSAoX2ZsYWdzKSwJCQkJCVwKKwl9KQorCisjZGVmaW5lIENBVDI1X0lORk8oX3NlY3Rvcl9zaXplLCBfbl9zZWN0b3JzLCBfcGFnZV9zaXplLCBfYWRkcl93aWR0aCkJXAorCSgoa2VybmVsX3Vsb25nX3QpJihzdHJ1Y3QgZmxhc2hfaW5mbykgewkJCQlcCisJCS5zZWN0b3Jfc2l6ZSA9IChfc2VjdG9yX3NpemUpLAkJCQlcCisJCS5uX3NlY3RvcnMgPSAoX25fc2VjdG9ycyksCQkJCVwKKwkJLnBhZ2Vfc2l6ZSA9IChfcGFnZV9zaXplKSwJCQkJXAorCQkuYWRkcl93aWR0aCA9IChfYWRkcl93aWR0aCksCQkJCVwKKwkJLmZsYWdzID0gTTI1UF9OT19FUkFTRSwJCQkJCVwKKwl9KQogCiAvKiBOT1RFOiBkb3VibGUgY2hlY2sgY29tbWFuZCBzZXRzIGFuZCBtZW1vcnkgb3JnYW5pemF0aW9uIHdoZW4geW91IGFkZAogICogbW9yZSBmbGFzaCBjaGlwcy4gIFRoaXMgY3VycmVudCBsaXN0IGZvY3Vzc2VzIG9uIG5ld2VyIGNoaXBzLCB3aGljaAogICogaGF2ZSBiZWVuIGNvbnZlcmdpbmcgb24gY29tbWFuZCBzZXRzIHdoaWNoIGluY2x1ZGluZyBKRURFQyBJRC4KICAqLwotc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvIF9fZGV2aW5pdGRhdGEgbTI1cF9kYXRhIFtdID0gewotCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgbTI1cF9pZHNbXSA9IHsKIAkvKiBBdG1lbCAtLSBzb21lIGFyZSAoY29uZnVzaW5nbHkpIG1hcmtldGVkIGFzICJEYXRhRmxhc2giICovCi0JeyAiYXQyNWZzMDEwIiwgIDB4MWY2NjAxLCAwLCAzMiAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNWZzMDQwIiwgIDB4MWY2NjA0LCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNWZzMDEwIiwgIElORk8oMHgxZjY2MDEsIDAsIDMyICogMTAyNCwgICA0LCBTRUNUXzRLKSB9LAorCXsgImF0MjVmczA0MCIsICBJTkZPKDB4MWY2NjA0LCAwLCA2NCAqIDEwMjQsICAgOCwgU0VDVF80SykgfSwKIAotCXsgImF0MjVkZjA0MWEiLCAweDFmNDQwMSwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAotCXsgImF0MjVkZjY0MSIsICAweDFmNDgwMCwgMCwgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNWRmMDQxYSIsIElORk8oMHgxZjQ0MDEsIDAsIDY0ICogMTAyNCwgICA4LCBTRUNUXzRLKSB9LAorCXsgImF0MjVkZjY0MSIsICBJTkZPKDB4MWY0ODAwLCAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SykgfSwKIAotCXsgImF0MjZmMDA0IiwgICAweDFmMDQwMCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAotCXsgImF0MjZkZjA4MWEiLCAweDFmNDUwMSwgMCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKLQl7ICJhdDI2ZGYxNjFhIiwgMHgxZjQ2MDEsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNmRmMzIxIiwgIDB4MWY0NzAxLCAwLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAorCXsgImF0MjZmMDA0IiwgICBJTkZPKDB4MWYwNDAwLCAwLCA2NCAqIDEwMjQsICA4LCBTRUNUXzRLKSB9LAorCXsgImF0MjZkZjA4MWEiLCBJTkZPKDB4MWY0NTAxLCAwLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLKSB9LAorCXsgImF0MjZkZjE2MWEiLCBJTkZPKDB4MWY0NjAxLCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLKSB9LAorCXsgImF0MjZkZjMyMSIsICBJTkZPKDB4MWY0NzAxLCAwLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLKSB9LAogCiAJLyogTWFjcm9uaXggKi8KLQl7ICJteDI1bDMyMDVkIiwgMHhjMjIwMTYsIDAsIDY0ICogMTAyNCwgNjQsIH0sCi0JeyAibXgyNWw2NDA1ZCIsIDB4YzIyMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgfSwKLQl7ICJteDI1bDEyODA1ZCIsIDB4YzIyMDE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgfSwKLQl7ICJteDI1bDEyODU1ZSIsIDB4YzIyNjE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgfSwKKwl7ICJteDI1bDQwMDVhIiwgIElORk8oMHhjMjIwMTMsIDAsIDY0ICogMTAyNCwgICA4LCBTRUNUXzRLKSB9LAorCXsgIm14MjVsMzIwNWQiLCAgSU5GTygweGMyMjAxNiwgMCwgNjQgKiAxMDI0LCAgNjQsIDApIH0sCisJeyAibXgyNWw2NDA1ZCIsICBJTkZPKDB4YzIyMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgMCkgfSwKKwl7ICJteDI1bDEyODA1ZCIsIElORk8oMHhjMjIwMTgsIDAsIDY0ICogMTAyNCwgMjU2LCAwKSB9LAorCXsgIm14MjVsMTI4NTVlIiwgSU5GTygweGMyMjYxOCwgMCwgNjQgKiAxMDI0LCAyNTYsIDApIH0sCiAKIAkvKiBTcGFuc2lvbiAtLSBzaW5nbGUgKGxhcmdlKSBzZWN0b3Igc2l6ZSBvbmx5LCBhdCBsZWFzdAogCSAqIGZvciB0aGUgY2hpcHMgbGlzdGVkIGhlcmUgKHdpdGhvdXQgYm9vdCBzZWN0b3JzKS4KIAkgKi8KLQl7ICJzMjVzbDAwNGEiLCAweDAxMDIxMiwgMCwgNjQgKiAxMDI0LCA4LCB9LAotCXsgInMyNXNsMDA4YSIsIDB4MDEwMjEzLCAwLCA2NCAqIDEwMjQsIDE2LCB9LAotCXsgInMyNXNsMDE2YSIsIDB4MDEwMjE0LCAwLCA2NCAqIDEwMjQsIDMyLCB9LAotCXsgInMyNXNsMDMyYSIsIDB4MDEwMjE1LCAwLCA2NCAqIDEwMjQsIDY0LCB9LAotCXsgInMyNXNsMDY0YSIsIDB4MDEwMjE2LCAwLCA2NCAqIDEwMjQsIDEyOCwgfSwKLQl7ICJzMjVzbDEyODAwIiwgMHgwMTIwMTgsIDB4MDMwMCwgMjU2ICogMTAyNCwgNjQsIH0sCi0JeyAiczI1c2wxMjgwMSIsIDB4MDEyMDE4LCAweDAzMDEsIDY0ICogMTAyNCwgMjU2LCB9LAotCXsgInMyNWZsMTI5cDAiLCAweDAxMjAxOCwgMHg0ZDAwLCAyNTYgKiAxMDI0LCA2NCwgfSwKLQl7ICJzMjVmbDEyOXAxIiwgMHgwMTIwMTgsIDB4NGQwMSwgNjQgKiAxMDI0LCAyNTYsIH0sCisJeyAiczI1c2wwMDRhIiwgIElORk8oMHgwMTAyMTIsICAgICAgMCwgIDY0ICogMTAyNCwgICA4LCAwKSB9LAorCXsgInMyNXNsMDA4YSIsICBJTkZPKDB4MDEwMjEzLCAgICAgIDAsICA2NCAqIDEwMjQsICAxNiwgMCkgfSwKKwl7ICJzMjVzbDAxNmEiLCAgSU5GTygweDAxMDIxNCwgICAgICAwLCAgNjQgKiAxMDI0LCAgMzIsIDApIH0sCisJeyAiczI1c2wwMzJhIiwgIElORk8oMHgwMTAyMTUsICAgICAgMCwgIDY0ICogMTAyNCwgIDY0LCAwKSB9LAorCXsgInMyNXNsMDY0YSIsICBJTkZPKDB4MDEwMjE2LCAgICAgIDAsICA2NCAqIDEwMjQsIDEyOCwgMCkgfSwKKwl7ICJzMjVzbDEyODAwIiwgSU5GTygweDAxMjAxOCwgMHgwMzAwLCAyNTYgKiAxMDI0LCAgNjQsIDApIH0sCisJeyAiczI1c2wxMjgwMSIsIElORk8oMHgwMTIwMTgsIDB4MDMwMSwgIDY0ICogMTAyNCwgMjU2LCAwKSB9LAorCXsgInMyNWZsMTI5cDAiLCBJTkZPKDB4MDEyMDE4LCAweDRkMDAsIDI1NiAqIDEwMjQsICA2NCwgMCkgfSwKKwl7ICJzMjVmbDEyOXAxIiwgSU5GTygweDAxMjAxOCwgMHg0ZDAxLCAgNjQgKiAxMDI0LCAyNTYsIDApIH0sCiAKIAkvKiBTU1QgLS0gbGFyZ2UgZXJhc2Ugc2l6ZXMgYXJlICJvdmVybGF5cyIsICJzZWN0b3JzIiBhcmUgNEsgKi8KLQl7ICJzc3QyNXZmMDQwYiIsIDB4YmYyNThkLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV2ZjA4MGIiLCAweGJmMjU4ZSwgMCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKLQl7ICJzc3QyNXZmMDE2YiIsIDB4YmYyNTQxLCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAotCXsgInNzdDI1dmYwMzJiIiwgMHhiZjI1NGEsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV3ZjUxMiIsICAweGJmMjUwMSwgMCwgNjQgKiAxMDI0LCAxLCBTRUNUXzRLLCB9LAotCXsgInNzdDI1d2YwMTAiLCAgMHhiZjI1MDIsIDAsIDY0ICogMTAyNCwgMiwgU0VDVF80SywgfSwKLQl7ICJzc3QyNXdmMDIwIiwgIDB4YmYyNTAzLCAwLCA2NCAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV3ZjA0MCIsICAweGJmMjUwNCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgInNzdDI1dmYwNDBiIiwgSU5GTygweGJmMjU4ZCwgMCwgNjQgKiAxMDI0LCAgOCwgU0VDVF80SykgfSwKKwl7ICJzc3QyNXZmMDgwYiIsIElORk8oMHhiZjI1OGUsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEspIH0sCisJeyAic3N0MjV2ZjAxNmIiLCBJTkZPKDB4YmYyNTQxLCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLKSB9LAorCXsgInNzdDI1dmYwMzJiIiwgSU5GTygweGJmMjU0YSwgMCwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SykgfSwKKwl7ICJzc3QyNXdmNTEyIiwgIElORk8oMHhiZjI1MDEsIDAsIDY0ICogMTAyNCwgIDEsIFNFQ1RfNEspIH0sCisJeyAic3N0MjV3ZjAxMCIsICBJTkZPKDB4YmYyNTAyLCAwLCA2NCAqIDEwMjQsICAyLCBTRUNUXzRLKSB9LAorCXsgInNzdDI1d2YwMjAiLCAgSU5GTygweGJmMjUwMywgMCwgNjQgKiAxMDI0LCAgNCwgU0VDVF80SykgfSwKKwl7ICJzc3QyNXdmMDQwIiwgIElORk8oMHhiZjI1MDQsIDAsIDY0ICogMTAyNCwgIDgsIFNFQ1RfNEspIH0sCiAKIAkvKiBTVCBNaWNyb2VsZWN0cm9uaWNzIC0tIG5ld2VyIHByb2R1Y3Rpb24gbWF5IGhhdmUgZmVhdHVyZSB1cGRhdGVzICovCi0JeyAibTI1cDA1IiwgIDB4MjAyMDEwLCAgMCwgMzIgKiAxMDI0LCAyLCB9LAotCXsgIm0yNXAxMCIsICAweDIwMjAxMSwgIDAsIDMyICogMTAyNCwgNCwgfSwKLQl7ICJtMjVwMjAiLCAgMHgyMDIwMTIsICAwLCA2NCAqIDEwMjQsIDQsIH0sCi0JeyAibTI1cDQwIiwgIDB4MjAyMDEzLCAgMCwgNjQgKiAxMDI0LCA4LCB9LAotCXsgIm0yNXA4MCIsICAgICAgICAgMCwgIDAsIDY0ICogMTAyNCwgMTYsIH0sCi0JeyAibTI1cDE2IiwgIDB4MjAyMDE1LCAgMCwgNjQgKiAxMDI0LCAzMiwgfSwKLQl7ICJtMjVwMzIiLCAgMHgyMDIwMTYsICAwLCA2NCAqIDEwMjQsIDY0LCB9LAotCXsgIm0yNXA2NCIsICAweDIwMjAxNywgIDAsIDY0ICogMTAyNCwgMTI4LCB9LAotCXsgIm0yNXAxMjgiLCAweDIwMjAxOCwgMCwgMjU2ICogMTAyNCwgNjQsIH0sCisJeyAibTI1cDA1IiwgIElORk8oMHgyMDIwMTAsICAwLCAgMzIgKiAxMDI0LCAgIDIsIDApIH0sCisJeyAibTI1cDEwIiwgIElORk8oMHgyMDIwMTEsICAwLCAgMzIgKiAxMDI0LCAgIDQsIDApIH0sCisJeyAibTI1cDIwIiwgIElORk8oMHgyMDIwMTIsICAwLCAgNjQgKiAxMDI0LCAgIDQsIDApIH0sCisJeyAibTI1cDQwIiwgIElORk8oMHgyMDIwMTMsICAwLCAgNjQgKiAxMDI0LCAgIDgsIDApIH0sCisJeyAibTI1cDgwIiwgIElORk8oMHgyMDIwMTQsICAwLCAgNjQgKiAxMDI0LCAgMTYsIDApIH0sCisJeyAibTI1cDE2IiwgIElORk8oMHgyMDIwMTUsICAwLCAgNjQgKiAxMDI0LCAgMzIsIDApIH0sCisJeyAibTI1cDMyIiwgIElORk8oMHgyMDIwMTYsICAwLCAgNjQgKiAxMDI0LCAgNjQsIDApIH0sCisJeyAibTI1cDY0IiwgIElORk8oMHgyMDIwMTcsICAwLCAgNjQgKiAxMDI0LCAxMjgsIDApIH0sCisJeyAibTI1cDEyOCIsIElORk8oMHgyMDIwMTgsICAwLCAyNTYgKiAxMDI0LCAgNjQsIDApIH0sCiAKLQl7ICJtNDVwZTEwIiwgMHgyMDQwMTEsICAwLCA2NCAqIDEwMjQsIDIsIH0sCi0JeyAibTQ1cGU4MCIsIDB4MjA0MDE0LCAgMCwgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJtNDVwZTE2IiwgMHgyMDQwMTUsICAwLCA2NCAqIDEwMjQsIDMyLCB9LAorCXsgIm00NXBlMTAiLCBJTkZPKDB4MjA0MDExLCAgMCwgNjQgKiAxMDI0LCAgICAyLCAwKSB9LAorCXsgIm00NXBlODAiLCBJTkZPKDB4MjA0MDE0LCAgMCwgNjQgKiAxMDI0LCAgIDE2LCAwKSB9LAorCXsgIm00NXBlMTYiLCBJTkZPKDB4MjA0MDE1LCAgMCwgNjQgKiAxMDI0LCAgIDMyLCAwKSB9LAogCi0JeyAibTI1cGU4MCIsIDB4MjA4MDE0LCAgMCwgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJtMjVwZTE2IiwgMHgyMDgwMTUsICAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgIm0yNXBlODAiLCBJTkZPKDB4MjA4MDE0LCAgMCwgNjQgKiAxMDI0LCAxNiwgICAgICAgMCkgfSwKKwl7ICJtMjVwZTE2IiwgSU5GTygweDIwODAxNSwgIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEspIH0sCiAKIAkvKiBXaW5ib25kIC0tIHcyNXggImJsb2NrcyIgYXJlIDY0SywgInNlY3RvcnMiIGFyZSA0S2lCICovCi0JeyAidzI1eDEwIiwgMHhlZjMwMTEsIDAsIDY0ICogMTAyNCwgMiwgU0VDVF80SywgfSwKLQl7ICJ3MjV4MjAiLCAweGVmMzAxMiwgMCwgNjQgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAotCXsgIncyNXg0MCIsIDB4ZWYzMDEzLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDgwIiwgMHhlZjMwMTQsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDE2IiwgMHhlZjMwMTUsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDMyIiwgMHhlZjMwMTYsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDY0IiwgMHhlZjMwMTcsIDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAotfTsKKwl7ICJ3MjV4MTAiLCBJTkZPKDB4ZWYzMDExLCAwLCA2NCAqIDEwMjQsICAyLCAgU0VDVF80SykgfSwKKwl7ICJ3MjV4MjAiLCBJTkZPKDB4ZWYzMDEyLCAwLCA2NCAqIDEwMjQsICA0LCAgU0VDVF80SykgfSwKKwl7ICJ3MjV4NDAiLCBJTkZPKDB4ZWYzMDEzLCAwLCA2NCAqIDEwMjQsICA4LCAgU0VDVF80SykgfSwKKwl7ICJ3MjV4ODAiLCBJTkZPKDB4ZWYzMDE0LCAwLCA2NCAqIDEwMjQsICAxNiwgU0VDVF80SykgfSwKKwl7ICJ3MjV4MTYiLCBJTkZPKDB4ZWYzMDE1LCAwLCA2NCAqIDEwMjQsICAzMiwgU0VDVF80SykgfSwKKwl7ICJ3MjV4MzIiLCBJTkZPKDB4ZWYzMDE2LCAwLCA2NCAqIDEwMjQsICA2NCwgU0VDVF80SykgfSwKKwl7ICJ3MjV4NjQiLCBJTkZPKDB4ZWYzMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SykgfSwKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvICpfX2RldmluaXQgamVkZWNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKKwkvKiBDYXRhbHlzdCAvIE9uIFNlbWljb25kdWN0b3IgLS0gbm9uLUpFREVDICovCisJeyAiY2F0MjVjMTEiLCBDQVQyNV9JTkZPKCAgMTYsIDgsIDE2LCAxKSB9LAorCXsgImNhdDI1YzAzIiwgQ0FUMjVfSU5GTyggIDMyLCA4LCAxNiwgMikgfSwKKwl7ICJjYXQyNWMwOSIsIENBVDI1X0lORk8oIDEyOCwgOCwgMzIsIDIpIH0sCisJeyAiY2F0MjVjMTciLCBDQVQyNV9JTkZPKCAyNTYsIDgsIDMyLCAyKSB9LAorCXsgImNhdDI1MTI4IiwgQ0FUMjVfSU5GTygyMDQ4LCA4LCA2NCwgMikgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIG0yNXBfaWRzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkICpfX2RldmluaXQgamVkZWNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQJCQl0bXA7CiAJdTgJCQljb2RlID0gT1BDT0RFX1JESUQ7CkBAIC03MDIsMTggKzczMCwyNCBAQAogCWplZGVjID0gamVkZWMgPDwgODsKIAlqZWRlYyB8PSBpZFsyXTsKIAorCS8qCisJICogU29tZSBjaGlwcyAobGlrZSBOdW1vbnl4IE0yNVA4MCkgaGF2ZSBKRURFQyBhbmQgbm9uLUpFREVDIHZhcmlhbnRzLAorCSAqIHdoaWNoIGRlcGVuZCBvbiB0ZWNobm9sb2d5IHByb2Nlc3MuIE9mZmljaWFsbHkgUkRJRCBjb21tYW5kIGRvZXNuJ3QKKwkgKiBleGlzdCBmb3Igbm9uLUpFREVDIGNoaXBzLCBidXQgZm9yIGNvbXBhdGliaWxpdHkgdGhleSByZXR1cm4gSUQgMC4KKwkgKi8KKwlpZiAoamVkZWMgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKIAlleHRfamVkZWMgPSBpZFszXSA8PCA4IHwgaWRbNF07CiAKLQlmb3IgKHRtcCA9IDAsIGluZm8gPSBtMjVwX2RhdGE7Ci0JCQl0bXAgPCBBUlJBWV9TSVpFKG0yNXBfZGF0YSk7Ci0JCQl0bXArKywgaW5mbysrKSB7CisJZm9yICh0bXAgPSAwOyB0bXAgPCBBUlJBWV9TSVpFKG0yNXBfaWRzKSAtIDE7IHRtcCsrKSB7CisJCWluZm8gPSAodm9pZCAqKW0yNXBfaWRzW3RtcF0uZHJpdmVyX2RhdGE7CiAJCWlmIChpbmZvLT5qZWRlY19pZCA9PSBqZWRlYykgewogCQkJaWYgKGluZm8tPmV4dF9pZCAhPSAwICYmIGluZm8tPmV4dF9pZCAhPSBleHRfamVkZWMpCiAJCQkJY29udGludWU7Ci0JCQlyZXR1cm4gaW5mbzsKKwkJCXJldHVybiAmbTI1cF9pZHNbdG1wXTsKIAkJfQogCX0KLQlkZXZfZXJyKCZzcGktPmRldiwgInVucmVjb2duaXplZCBKRURFQyBpZCAlMDZ4XG4iLCBqZWRlYyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTcyNSw2ICs3NTksNyBAQAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtMjVwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CisJY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQJKmlkID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YQkqZGF0YTsKIAlzdHJ1Y3QgbTI1cAkJCSpmbGFzaDsKIAlzdHJ1Y3QgZmxhc2hfaW5mbwkJKmluZm87CkBAIC03MzcsNTAgKzc3Miw2NSBAQAogCSAqLwogCWRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChkYXRhICYmIGRhdGEtPnR5cGUpIHsKLQkJZm9yIChpID0gMCwgaW5mbyA9IG0yNXBfZGF0YTsKLQkJCQlpIDwgQVJSQVlfU0laRShtMjVwX2RhdGEpOwotCQkJCWkrKywgaW5mbysrKSB7Ci0JCQlpZiAoc3RyY21wKGRhdGEtPnR5cGUsIGluZm8tPm5hbWUpID09IDApCi0JCQkJYnJlYWs7CisJCWNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkICpwbGF0X2lkOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0yNXBfaWRzKSAtIDE7IGkrKykgeworCQkJcGxhdF9pZCA9ICZtMjVwX2lkc1tpXTsKKwkJCWlmIChzdHJjbXAoZGF0YS0+dHlwZSwgcGxhdF9pZC0+bmFtZSkpCisJCQkJY29udGludWU7CisJCQlicmVhazsKIAkJfQogCi0JCS8qIHVucmVjb2duaXplZCBjaGlwPyAqLwotCQlpZiAoaSA9PSBBUlJBWV9TSVpFKG0yNXBfZGF0YSkpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogdW5yZWNvZ25pemVkIGlkICVzXG4iLAotCQkJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCBkYXRhLT50eXBlKTsKLQkJCWluZm8gPSBOVUxMOworCQlpZiAocGxhdF9pZCkKKwkJCWlkID0gcGxhdF9pZDsKKwkJZWxzZQorCQkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAidW5yZWNvZ25pemVkIGlkICVzXG4iLCBkYXRhLT50eXBlKTsKKwl9CiAKLQkJLyogcmVjb2duaXplZDsgaXMgdGhhdCBjaGlwIHJlYWxseSB3aGF0J3MgdGhlcmU/ICovCi0JCX0gZWxzZSBpZiAoaW5mby0+amVkZWNfaWQpIHsKLQkJCXN0cnVjdCBmbGFzaF9pbmZvCSpjaGlwID0gamVkZWNfcHJvYmUoc3BpKTsKKwlpbmZvID0gKHZvaWQgKilpZC0+ZHJpdmVyX2RhdGE7CiAKLQkJCWlmICghY2hpcCB8fCBjaGlwICE9IGluZm8pIHsKLQkJCQlkZXZfd2Fybigmc3BpLT5kZXYsICJmb3VuZCAlcywgZXhwZWN0ZWQgJXNcbiIsCi0JCQkJCQljaGlwID8gY2hpcC0+bmFtZSA6ICJVTktOT1dOIiwKLQkJCQkJCWluZm8tPm5hbWUpOwotCQkJCWluZm8gPSBOVUxMOwotCQkJfQorCWlmIChpbmZvLT5qZWRlY19pZCkgeworCQljb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqamlkOworCisJCWppZCA9IGplZGVjX3Byb2JlKHNwaSk7CisJCWlmICghamlkKSB7CisJCQlkZXZfaW5mbygmc3BpLT5kZXYsICJub24tSkVERUMgdmFyaWFudCBvZiAlc1xuIiwKKwkJCQkgaWQtPm5hbWUpOworCQl9IGVsc2UgaWYgKGppZCAhPSBpZCkgeworCQkJLyoKKwkJCSAqIEpFREVDIGtub3dzIGJldHRlciwgc28gb3ZlcndyaXRlIHBsYXRmb3JtIElELiBXZQorCQkJICogY2FuJ3QgdHJ1c3QgcGFydGl0aW9ucyBhbnkgbG9uZ2VyLCBidXQgd2UnbGwgbGV0CisJCQkgKiBtdGQgYXBwbHkgdGhlbSBhbnl3YXksIHNpbmNlIHNvbWUgcGFydGl0aW9ucyBtYXkgYmUKKwkJCSAqIG1hcmtlZCByZWFkLW9ubHksIGFuZCB3ZSBkb24ndCB3YW50IHRvIGxvc2UgdGhhdAorCQkJICogaW5mb3JtYXRpb24sIGV2ZW4gaWYgaXQncyBub3QgMTAwJSBhY2N1cmF0ZS4KKwkJCSAqLworCQkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAiZm91bmQgJXMsIGV4cGVjdGVkICVzXG4iLAorCQkJCSBqaWQtPm5hbWUsIGlkLT5uYW1lKTsKKwkJCWlkID0gamlkOworCQkJaW5mbyA9ICh2b2lkICopamlkLT5kcml2ZXJfZGF0YTsKIAkJfQotCX0gZWxzZQotCQlpbmZvID0gamVkZWNfcHJvYmUoc3BpKTsKLQotCWlmICghaW5mbykKLQkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJZmxhc2ggPSBremFsbG9jKHNpemVvZiAqZmxhc2gsIEdGUF9LRVJORUwpOwogCWlmICghZmxhc2gpCiAJCXJldHVybiAtRU5PTUVNOworCWZsYXNoLT5jb21tYW5kID0ga21hbGxvYyhNQVhfQ01EX1NJWkUgKyBGQVNUX1JFQURfRFVNTVlfQllURSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbGFzaC0+Y29tbWFuZCkgeworCQlrZnJlZShmbGFzaCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWZsYXNoLT5zcGkgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmZmxhc2gtPmxvY2spOwogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGZsYXNoKTsKIAogCS8qCi0JICogQXRtZWwgc2VyaWFsIGZsYXNoIHRlbmQgdG8gcG93ZXIgdXAKLQkgKiB3aXRoIHRoZSBzb2Z0d2FyZSBwcm90ZWN0aW9uIGJpdHMgc2V0CisJICogQXRtZWwgYW5kIFNTVCBzZXJpYWwgZmxhc2ggdGVuZCB0byBwb3dlcgorCSAqIHVwIHdpdGggdGhlIHNvZnR3YXJlIHByb3RlY3Rpb24gYml0cyBzZXQKIAkgKi8KIAotCWlmIChpbmZvLT5qZWRlY19pZCA+PiAxNiA9PSAweDFmKSB7CisJaWYgKGluZm8tPmplZGVjX2lkID4+IDE2ID09IDB4MWYgfHwKKwkgICAgaW5mby0+amVkZWNfaWQgPj4gMTYgPT0gMHhiZikgewogCQl3cml0ZV9lbmFibGUoZmxhc2gpOwogCQl3cml0ZV9zcihmbGFzaCwgMCk7CiAJfQpAQCAtODEyLDkgKzg2MiwxNCBAQAogCQlmbGFzaC0+bXRkLmVyYXNlc2l6ZSA9IGluZm8tPnNlY3Rvcl9zaXplOwogCX0KIAotCWZsYXNoLT5tdGQuZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBNMjVQX05PX0VSQVNFKQorCQlmbGFzaC0+bXRkLmZsYWdzIHw9IE1URF9OT19FUkFTRTsKIAotCWRldl9pbmZvKCZzcGktPmRldiwgIiVzICglbGxkIEtieXRlcylcbiIsIGluZm8tPm5hbWUsCisJZmxhc2gtPm10ZC5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OworCWZsYXNoLT5wYWdlX3NpemUgPSBpbmZvLT5wYWdlX3NpemU7CisJZmxhc2gtPmFkZHJfd2lkdGggPSBpbmZvLT5hZGRyX3dpZHRoOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJXMgKCVsbGQgS2J5dGVzKVxuIiwgaWQtPm5hbWUsCiAJCQkobG9uZyBsb25nKWZsYXNoLT5tdGQuc2l6ZSA+PiAxMCk7CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwyLApAQCAtODg4LDggKzk0MywxMCBAQAogCQlzdGF0dXMgPSBkZWxfbXRkX3BhcnRpdGlvbnMoJmZsYXNoLT5tdGQpOwogCWVsc2UKIAkJc3RhdHVzID0gZGVsX210ZF9kZXZpY2UoJmZsYXNoLT5tdGQpOwotCWlmIChzdGF0dXMgPT0gMCkKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJa2ZyZWUoZmxhc2gtPmNvbW1hbmQpOwogCQlrZnJlZShmbGFzaCk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC05MDAsNiArOTU3LDcgQEAKIAkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCisJLmlkX3RhYmxlCT0gbTI1cF9pZHMsCiAJLnByb2JlCT0gbTI1cF9wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AobTI1cF9yZW1vdmUpLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCmluZGV4IDkzZTM2MjcuLjE5ODE3NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCkBAIC02MzYsNiArNjM2LDcgQEAKIAlzdHJ1Y3QgbXRkX2luZm8JCQkqZGV2aWNlOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJY2hhcgkJCQkqb3RwX3RhZyA9ICIiOworCWludAkJCQllcnIgPSAwOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCkBAIC02OTMsMTMgKzY5NCwyMyBAQAogCiAJCWlmIChucl9wYXJ0cyA+IDApIHsKIAkJCXByaXYtPnBhcnRpdGlvbmVkID0gMTsKLQkJCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoZGV2aWNlLCBwYXJ0cywgbnJfcGFydHMpOworCQkJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKGRldmljZSwgcGFydHMsIG5yX3BhcnRzKTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIGlmIChwZGF0YSAmJiBwZGF0YS0+bnJfcGFydHMpCiAJCWRldl93YXJuKCZzcGktPmRldiwgImlnbm9yaW5nICVkIGRlZmF1bHQgcGFydGl0aW9ucyBvbiAlc1xuIiwKIAkJCQlwZGF0YS0+bnJfcGFydHMsIGRldmljZS0+bmFtZSk7CiAKLQlyZXR1cm4gYWRkX210ZF9kZXZpY2UoZGV2aWNlKSA9PSAxID8gLUVOT0RFViA6IDA7CisJaWYgKGFkZF9tdGRfZGV2aWNlKGRldmljZSkgPT0gMSkKKwkJZXJyID0gLUVOT0RFVjsKKworb3V0OgorCWlmICghZXJyKQorCQlyZXR1cm4gMDsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCWtmcmVlKHByaXYpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fZGV2aW5pdApAQCAtOTMyLDggKzk0MywxMCBAQAogCQlzdGF0dXMgPSBkZWxfbXRkX3BhcnRpdGlvbnMoJmZsYXNoLT5tdGQpOwogCWVsc2UKIAkJc3RhdHVzID0gZGVsX210ZF9kZXZpY2UoJmZsYXNoLT5tdGQpOwotCWlmIChzdGF0dXMgPT0gMCkKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CiAJCWtmcmVlKGZsYXNoKTsKKwl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDg0N2UyMTRhLi40YzM2NGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0zNTksMTIgKzM1OSw2IEBACiAJICB0aGUgU0ExMTAwIGFuZCBTQTExMTAsIGluY2x1ZGluZyB0aGUgQXNzYWJldCBhbmQgdGhlIENvbXBhcSBpUEFRLgogCSAgSWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLCBzYXkgJ1knLgogCi1jb25maWcgTVREX0lQQVEKLQl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gQ29tcGFxL0hQIGlQQVEiCi0JZGVwZW5kcyBvbiBJUEFRX0hBTkRIRUxEICYmIE1URF9DRkkKLQloZWxwCi0JICBUaGlzIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgb24tYm9hcmQgZmxhc2ggb2YgdGhlIGlQQVEuCi0KIGNvbmZpZyBNVERfREMyMTI4NQogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBEQzIxMjg1IEZvb3RicmlkZ2UiCiAJZGVwZW5kcyBvbiBNVERfQ0ZJICYmIEFSQ0hfRk9PVEJSSURHRSAmJiBNVERfQ09NUExFWF9NQVBQSU5HUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggYWUyZjZkYi4uY2UzMTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC0yNCwxMiArMjQsMTIgQEAKIG9iai0kKENPTkZJR19NVERfT0NUQUdPTikJKz0gb2N0YWdvbi01MDY2Lm8KIG9iai0kKENPTkZJR19NVERfUEhZU01BUCkJKz0gcGh5c21hcC5vCiBvYmotJChDT05GSUdfTVREX1BIWVNNQVBfT0YpCSs9IHBoeXNtYXBfb2Yubworb2JqLSQoQ09ORklHX01URF9QSVNNTykJCSs9IHBpc21vLm8KIG9iai0kKENPTkZJR19NVERfUE1DX01TUF9FVk0pICAgKz0gcG1jbXNwLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfUENNQ0lBKQkrPSBwY21jaWFtdGQubwogb2JqLSQoQ09ORklHX01URF9SUFhMSVRFKQkrPSBycHhsaXRlLm8KIG9iai0kKENPTkZJR19NVERfVFFNOFhYTCkJKz0gdHFtOHh4bC5vCiBvYmotJChDT05GSUdfTVREX1NBMTEwMCkJKz0gc2ExMTAwLWZsYXNoLm8KLW9iai0kKENPTkZJR19NVERfSVBBUSkJCSs9IGlwYXEtZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9TQkNfR1hYKQkrPSBzYmNfZ3h4Lm8KIG9iai0kKENPTkZJR19NVERfU0M1MjBDRFApCSs9IHNjNTIwY2RwLm8KIG9iai0kKENPTkZJR19NVERfTkVUU0M1MjApCSs9IG5ldHNjNTIwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXBhcS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NzA4ZTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gaVBBUSBIYW5kaGVsZHMgKGVpdGhlciBTQTExMDAgb3IgUFhBMjUwIGJhc2VkKQotICoKLSAqIChDKSAyMDAwIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+Ci0gKiAoQykgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSA8amFtZXkuaGlja3NAaHAuY29tPgotICogKEMpIDIwMDMgQ2hyaXN0aWFuIFBlbGxlZ3JpbiA8Y2hyaUBhc2NlbnNpdC5jb20+LCA8Y2hyaUBpbmZpcy51bml2LnRzLml0PjogY29uY2F0ZW5hdGlvbiBvZiBtdWx0aXBsZSBmbGFzaGVzCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaWZkZWYgQ09ORklHX01URF9DT05DQVQKLSNpbmNsdWRlIDxsaW51eC9tdGQvY29uY2F0Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2gzNjAwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLQotI2lmbmRlZiBDT05GSUdfSVBBUV9IQU5ESEVMRAotI2Vycm9yIFRoaXMgaXMgZm9yIGlQQVEgSGFuZGhlbGRzIG9ubHkKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQTExMDBfSk9STkFEQTU2WAotCi1zdGF0aWMgdm9pZCBqb3JuYWRhNTZ4X3NldF92cHAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCB2cHApCi17Ci0JaWYgKHZwcCkKLQkJR1BTUiA9IEdQSU9fR1BJTzI2OwotCWVsc2UKLQkJR1BDUiA9IEdQSU9fR1BJTzI2OwotCUdQRFIgfD0gR1BJT19HUElPMjY7Ci19Ci0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwCi0KLXN0YXRpYyB2b2lkIGpvcm5hZGE3MjBfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHZwcCkKLXsKLQlpZiAodnBwKQotCQlQUFNSIHw9IDB4ODA7Ci0JZWxzZQotCQlQUFNSICY9IH4weDgwOwotCVBQRFIgfD0gMHg4MDsKLX0KLQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYX0lQQVFfQ1MgMgkJLyogTnVtYmVyIG9mIENTIHdlIGFyZSBnb2luZyB0byB0ZXN0ICovCi0KLSNkZWZpbmUgSVBBUV9NQVBfSU5JVChYKSBcCi0JeyBcCi0JCW5hbWU6CQkiSVBBUSBmbGFzaCAiIFgsIFwKLQl9Ci0KLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBpcGFxX21hcFtNQVhfSVBBUV9DU10gPSB7Ci0JSVBBUV9NQVBfSU5JVCgiYmFuayAxIiksCi0JSVBBUV9NQVBfSU5JVCgiYmFuayAyIikKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm15X3N1Yl9tdGRbTUFYX0lQQVFfQ1NdID0gewotCU5VTEwsCi0JTlVMTAotfTsKLQotLyoKLSAqIEhlcmUgYXJlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGtub3duIElQQVEtYmFzZWQgZGV2aWNlcy4KLSAqIFNlZSBpbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmggZm9yIGRlZmluaXRpb24gb2YgdGhlIG10ZF9wYXJ0aXRpb24KLSAqIHN0cnVjdHVyZS4KLSAqCi0gKiBUaGUgKl9tYXhfZmxhc2hfc2l6ZSBpcyB0aGUgbWF4aW11bSBwb3NzaWJsZSBtYXBwZWQgZmxhc2ggc2l6ZSB3aGljaAotICogaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBhY3R1YWwgZmxhc2ggc2l6ZS4gIEl0IG11c3QgYmUgbm8gbW9yZSB0aGFuCi0gKiB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSAic3RydWN0IG1hcF9kZXNjICpfaW9fZGVzYyIgbWFwcGluZwotICogZGVmaW5pdGlvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS4KLSAqCi0gKiBQbGVhc2Uga2VlcCB0aGVzZSBpbiBhbHBoYWJldGljYWwgb3JkZXIsIGFuZCBmb3JtYXR0ZWQgYXMgcGVyIGV4aXN0aW5nCi0gKiBlbnRyaWVzLiAgVGhhbmtzLgotICovCi0KLSNpZmRlZiBDT05GSUdfSVBBUV9IQU5ESEVMRAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaDN4eHhfbWF4X2ZsYXNoX3NpemUgPSAweDA0MDAwMDAwOwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzeHh4X3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCW5hbWU6CQkiSDNYWFggYm9vdCBmaXJtd2FyZSIsCi0jaWZuZGVmIENPTkZJR19MQUIKLQkJc2l6ZToJCTB4MDAwNDAwMDAsCi0jZWxzZQotCQlzaXplOgkJMHgwMDA4MDAwMCwKLSNlbmRpZgotCQlvZmZzZXQ6CQkwLAotI2lmbmRlZiBDT05GSUdfTEFCCi0JCW1hc2tfZmxhZ3M6CU1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLSNlbmRpZgotCX0sCi0JewotCQluYW1lOgkJIkgzWFhYIHJvb3QgamZmczIiLAotI2lmbmRlZiBDT05GSUdfTEFCCi0JCXNpemU6CQkweDIwMDAwMDAgLSAyKjB4NDAwMDAsIC8qIFdhcm5pbmcsIHRoaXMgaXMgZml4ZWQgbGF0ZXIgKi8KLQkJb2Zmc2V0OgkJMHgwMDA0MDAwMCwKLSNlbHNlCi0JCXNpemU6CQkweDIwMDAwMDAgLSAweDQwMDAwIC0gMHg4MDAwMCwgLyogV2FybmluZywgdGhpcyBpcyBmaXhlZCBsYXRlciAqLwotCQlvZmZzZXQ6CQkweDAwMDgwMDAwLAotI2VuZGlmCi0JfSwKLQl7Ci0JCW5hbWU6CQkiYXNzZXQiLAotCQlzaXplOgkJMHg0MDAwMCwKLQkJb2Zmc2V0OgkJMHgyMDAwMDAwIC0gMHg0MDAwMCwgLyogV2FybmluZywgdGhpcyBpcyBmaXhlZCBsYXRlciAqLwotCQltYXNrX2ZsYWdzOglNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfQotfTsKLQotI2lmbmRlZiBDT05GSUdfTVREX0NPTkNBVAotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzeHh4X3BhcnRpdGlvbnNfYmFuazJbXSA9IHsKLQkvKiB0aGlzIGlzIHVzZWQgb25seSBvbiAyIENTIG1hY2hpbmVzIHdoZW4gY29uY2F0IGlzIG5vdCBwcmVzZW50ICovCi0JewotCQluYW1lOgkJInNlY29uZCBIM1hYWCByb290IGpmZnMyIiwKLQkJc2l6ZToJCTB4MTAwMDAwMCAtIDB4NDAwMDAsIC8qIFdhcm5pbmcsIHRoaXMgaXMgZml4ZWQgbGF0ZXIgKi8KLQkJb2Zmc2V0OgkJMHgwMDAwMDAwMCwKLQl9LAotCXsKLQkJbmFtZToJCSJzZWNvbmQgYXNzZXQiLAotCQlzaXplOgkJMHg0MDAwMCwKLQkJb2Zmc2V0OgkJMHgxMDAwMDAwIC0gMHg0MDAwMCwgLyogV2FybmluZywgdGhpcyBpcyBmaXhlZCBsYXRlciAqLwotCQltYXNrX2ZsYWdzOglNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfQotfTsKLSNlbmRpZgotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwYXFfdnBwX2xvY2spOwotCi1zdGF0aWMgdm9pZCBoM3h4eF9zZXRfdnBwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgdnBwKQotewotCXN0YXRpYyBpbnQgbmVzdCA9IDA7Ci0KLQlzcGluX2xvY2soJmlwYXFfdnBwX2xvY2spOwotCWlmICh2cHApCi0JCW5lc3QrKzsKLQllbHNlCi0JCW5lc3QtLTsKLQlpZiAobmVzdCkKLQkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fVlBQX09OLCAxKTsKLQllbHNlCi0JCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX1ZQUF9PTiwgMCk7Ci0Jc3Bpbl91bmxvY2soJmlwYXFfdnBwX2xvY2spOwotfQotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NBMTEwMF9KT1JOQURBNTZYKSB8fCBkZWZpbmVkKENPTkZJR19TQTExMDBfSk9STkFEQTcyMCkKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGpvcm5hZGFfbWF4X2ZsYXNoX3NpemUgPSAweDAyMDAwMDAwOwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGpvcm5hZGFfcGFydGl0aW9uc1tdID0gewotCXsKLQkJbmFtZToJCSJKb3JuYWRhIGJvb3QgZmlybXdhcmUiLAotCQlzaXplOgkJMHgwMDA0MDAwMCwKLQkJb2Zmc2V0OgkJMCwKLQkJbWFza19mbGFnczoJTVREX1dSSVRFQUJMRSwgIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sIHsKLQkJbmFtZToJCSJKb3JuYWRhIHJvb3QgamZmczIiLAotCQlzaXplOgkJTVREUEFSVF9TSVpfRlVMTCwKLQkJb2Zmc2V0OgkJMHgwMDA0MDAwMCwKLQl9Ci19OwotI2VuZGlmCi0KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydHM7Ci1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NfcGh5c1tdID0gewotI2lmZGVmIENPTkZJR19BUkNIX1NBMTEwMAotCVNBMTEwMF9DUzBfUEhZUywKLQlTQTExMDBfQ1MxX1BIWVMsCi0JU0ExMTAwX0NTMl9QSFlTLAotCVNBMTEwMF9DUzNfUEhZUywKLQlTQTExMDBfQ1M0X1BIWVMsCi0JU0ExMTAwX0NTNV9QSFlTLAotI2Vsc2UKLQlQWEFfQ1MwX1BIWVMsCi0JUFhBX0NTMV9QSFlTLAotCVBYQV9DUzJfUEhZUywKLQlQWEFfQ1MzX1BIWVMsCi0JUFhBX0NTNF9QSFlTLAotCVBYQV9DUzVfUEhZUywKLSNlbmRpZgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBoMTkwMF9zcGVjaWFsX2Nhc2Uodm9pZCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlwYXFfbXRkX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMgPSBOVUxMOwotCWludCBuYl9wYXJ0cyA9IDA7Ci0JaW50IHBhcnNlZF9ucl9wYXJ0cyA9IDA7Ci0JY29uc3QgY2hhciAqcGFydF90eXBlOwotCWludCBpOyAvKiB1c2VkIHdoZW4gd2UgaGF2ZSA+MSBmbGFzaCBjaGlwcyAqLwotCXVuc2lnbmVkIGxvbmcgdG90X2ZsYXNoc2l6ZSA9IDA7IC8qIHVzZWQgd2hlbiB3ZSBoYXZlID4xIGZsYXNoIGNoaXBzICovCi0KLQkvKiBEZWZhdWx0IGZsYXNoIGJhbmt3aWR0aCAqLwotCS8vIGlwYXFfbWFwLmJhbmt3aWR0aCA9IChNU0MwICYgTVNDX1JCVykgPyAyIDogNDsKLQotCWlmIChtYWNoaW5lX2lzX2gxOTAwKCkpCi0JewotCQkvKiBGb3Igb3VyIGludGVudHMsIHRoZSBoMTkwMCBpcyBub3QgYSByZWFsIGlQQVEsIHNvIHdlIHNwZWNpYWwtY2FzZSBpdC4gKi8KLQkJcmV0dXJuIGgxOTAwX3NwZWNpYWxfY2FzZSgpOwotCX0KLQotCWlmIChtYWNoaW5lX2lzX2gzMTAwKCkgfHwgbWFjaGluZV9pc19oMTkwMCgpKQotCQlmb3IoaT0wOyBpPE1BWF9JUEFRX0NTOyBpKyspCi0JCQlpcGFxX21hcFtpXS5iYW5rd2lkdGggPSAyOwotCWVsc2UKLQkJZm9yKGk9MDsgaTxNQVhfSVBBUV9DUzsgaSsrKQotCQkJaXBhcV9tYXBbaV0uYmFua3dpZHRoID0gNDsKLQotCS8qCi0JICogU3RhdGljIHBhcnRpdGlvbiBkZWZpbml0aW9uIHNlbGVjdGlvbgotCSAqLwotCXBhcnRfdHlwZSA9ICJzdGF0aWMiOwotCi0Jc2ltcGxlX21hcF9pbml0KCZpcGFxX21hcFswXSk7Ci0Jc2ltcGxlX21hcF9pbml0KCZpcGFxX21hcFsxXSk7Ci0KLSNpZmRlZiBDT05GSUdfSVBBUV9IQU5ESEVMRAotCWlmIChtYWNoaW5lX2lzX2lwYXEoKSkgewotCQlwYXJ0cyA9IGgzeHh4X3BhcnRpdGlvbnM7Ci0JCW5iX3BhcnRzID0gQVJSQVlfU0laRShoM3h4eF9wYXJ0aXRpb25zKTsKLQkJZm9yKGk9MDsgaTxNQVhfSVBBUV9DUzsgaSsrKSB7Ci0JCQlpcGFxX21hcFtpXS5zaXplID0gaDN4eHhfbWF4X2ZsYXNoX3NpemU7Ci0JCQlpcGFxX21hcFtpXS5zZXRfdnBwID0gaDN4eHhfc2V0X3ZwcDsKLQkJCWlwYXFfbWFwW2ldLnBoeXMgPSBjc19waHlzW2ldOwotCQkJaXBhcV9tYXBbaV0udmlydCA9IGlvcmVtYXAoY3NfcGh5c1tpXSwgMHgwNDAwMDAwMCk7Ci0JCQlpZiAobWFjaGluZV9pc19oMzEwMCAoKSB8fCBtYWNoaW5lX2lzX2gxOTAwKCkpCi0JCQkJaXBhcV9tYXBbaV0uYmFua3dpZHRoID0gMjsKLQkJfQotCQlpZiAobWFjaGluZV9pc19oMzYwMCgpKSB7Ci0JCQkvKiBObyBhc3NldCBwYXJ0aXRpb24gaGVyZSAqLwotCQkJaDN4eHhfcGFydGl0aW9uc1sxXS5zaXplICs9IDB4NDAwMDA7Ci0JCQluYl9wYXJ0cy0tOwotCQl9Ci0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfSDU0MDAKLQlpZiAobWFjaGluZV9pc19oNTQwMCgpKSB7Ci0JCWlwYXFfbWFwWzBdLnNpemUgPSAweDAyMDAwMDAwOwotCQlpcGFxX21hcFsxXS5zaXplID0gMHgwMjAwMDAwMDsKLQkJaXBhcV9tYXBbMV0ucGh5cyA9IDB4MDIwMDAwMDA7Ci0JCWlwYXFfbWFwWzFdLnZpcnQgPSBpcGFxX21hcFswXS52aXJ0ICsgMHgwMjAwMDAwMDsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9IMTkwMAotCWlmIChtYWNoaW5lX2lzX2gxOTAwKCkpIHsKLQkJaXBhcV9tYXBbMF0uc2l6ZSA9IDB4MDA0MDAwMDA7Ci0JCWlwYXFfbWFwWzFdLnNpemUgPSAweDAyMDAwMDAwOwotCQlpcGFxX21hcFsxXS5waHlzID0gMHgwMDA4MDAwMDsKLQkJaXBhcV9tYXBbMV0udmlydCA9IGlwYXFfbWFwWzBdLnZpcnQgKyAweDAwMDgwMDAwOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NBMTEwMF9KT1JOQURBNTZYCi0JaWYgKG1hY2hpbmVfaXNfam9ybmFkYTU2eCgpKSB7Ci0JCXBhcnRzID0gam9ybmFkYV9wYXJ0aXRpb25zOwotCQluYl9wYXJ0cyA9IEFSUkFZX1NJWkUoam9ybmFkYV9wYXJ0aXRpb25zKTsKLQkJaXBhcV9tYXBbMF0uc2l6ZSA9IGpvcm5hZGFfbWF4X2ZsYXNoX3NpemU7Ci0JCWlwYXFfbWFwWzBdLnNldF92cHAgPSBqb3JuYWRhNTZ4X3NldF92cHA7Ci0JCWlwYXFfbWFwWzBdLnZpcnQgPSAoX191MzIpaW9yZW1hcCgweDAsIDB4MDQwMDAwMDApOwotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQTExMDBfSk9STkFEQTcyMAotCWlmIChtYWNoaW5lX2lzX2pvcm5hZGE3MjAoKSkgewotCQlwYXJ0cyA9IGpvcm5hZGFfcGFydGl0aW9uczsKLQkJbmJfcGFydHMgPSBBUlJBWV9TSVpFKGpvcm5hZGFfcGFydGl0aW9ucyk7Ci0JCWlwYXFfbWFwWzBdLnNpemUgPSBqb3JuYWRhX21heF9mbGFzaF9zaXplOwotCQlpcGFxX21hcFswXS5zZXRfdnBwID0gam9ybmFkYTcyMF9zZXRfdnBwOwotCX0KLSNlbmRpZgotCi0KLQlpZiAobWFjaGluZV9pc19pcGFxKCkpIHsgLyogZm9yIGlQQVFzIG9ubHkgKi8KLQkJZm9yKGk9MDsgaTxNQVhfSVBBUV9DUzsgaSsrKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgImlQQVEgZmxhc2g6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1cywgd2luZG93PSVseCB3aXRoIENGSS5cbiIsIGlwYXFfbWFwW2ldLmJhbmt3aWR0aCo4LCBpcGFxX21hcFtpXS52aXJ0KTsKLQkJCW15X3N1Yl9tdGRbaV0gPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZpcGFxX21hcFtpXSk7Ci0JCQlpZiAoIW15X3N1Yl9tdGRbaV0pIHsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgImlQQVEgZmxhc2g6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1cywgd2luZG93PSVseCB3aXRoIEpFREVDLlxuIiwgaXBhcV9tYXBbaV0uYmFua3dpZHRoKjgsIGlwYXFfbWFwW2ldLnZpcnQpOwotCQkJCW15X3N1Yl9tdGRbaV0gPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJmlwYXFfbWFwW2ldKTsKLQkJCX0KLQkJCWlmICghbXlfc3ViX210ZFtpXSkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAiaVBBUSBmbGFzaDogZmFpbGVkIHRvIGZpbmQgZmxhc2guXG4iKTsKLQkJCQlpZiAoaSkKLQkJCQkJYnJlYWs7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gLUVOWElPOwotCQkJfSBlbHNlCi0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICJpUEFRIGZsYXNoOiBmb3VuZCAlZCBieXRlc1xuIiwgbXlfc3ViX210ZFtpXS0+c2l6ZSk7Ci0KLQkJCS8qIGRvIHdlIHJlYWxseSBuZWVkIHRoaXMgZGVidWdnaW5nPyAtLWpvc2h1YSAyMDAzMDcwMyAqLwotCQkJLy8gcHJpbnRrKCJteV9zdWJfbXRkWyVkXT0lcFxuIiwgaSwgbXlfc3ViX210ZFtpXSk7Ci0JCQlteV9zdWJfbXRkW2ldLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQkJdG90X2ZsYXNoc2l6ZSArPSBteV9zdWJfbXRkW2ldLT5zaXplOwotCQl9Ci0jaWZkZWYgQ09ORklHX01URF9DT05DQVQKLQkJLyogZml4IHRoZSBhc3NldCBsb2NhdGlvbiAqLwotIwlpZmRlZiBDT05GSUdfTEFCCi0JCWgzeHh4X3BhcnRpdGlvbnNbMV0uc2l6ZSA9IHRvdF9mbGFzaHNpemUgLSAweDQwMDAwIC0gMHg4MDAwMCAvKiBleHRyYSBiaWcgYm9vdCBibG9jayAqLzsKLSMJZWxzZQotCQloM3h4eF9wYXJ0aXRpb25zWzFdLnNpemUgPSB0b3RfZmxhc2hzaXplIC0gMiAqIDB4NDAwMDA7Ci0jCWVuZGlmCi0JCWgzeHh4X3BhcnRpdGlvbnNbMl0ub2Zmc2V0ID0gdG90X2ZsYXNoc2l6ZSAtIDB4NDAwMDA7Ci0JCS8qIGFuZCBjb25jYXQgdGhlIGRldmljZXMgKi8KLQkJbXltdGQgPSBtdGRfY29uY2F0X2NyZWF0ZSgmbXlfc3ViX210ZFswXSwgaSwKLQkJCQkJICAiaXBhcSIpOwotCQlpZiAoIW15bXRkKSB7Ci0JCQlwcmludGsoIkNhbm5vdCBjcmVhdGUgaVBBUSBjb25jYXQgZGV2aWNlXG4iKTsKLQkJCXJldHVybiAtRU5YSU87Ci0JCX0KLSNlbHNlCi0JCW15bXRkID0gbXlfc3ViX210ZFswXTsKLQotCQkvKgotCQkgKkluIHRoZSB2ZXJ5IG5lYXIgZnV0dXJlLCBjb21tYW5kIGxpbmUgcGFydGl0aW9uIHBhcnNpbmcKLQkJICogd2lsbCB1c2UgdGhlIGRldmljZSBuYW1lIGFzICdtdGQtaWQnIGluc3RlYWQgb2YgYSB2YWx1ZQotCQkgKiBwYXNzZWQgdG8gdGhlIHBhcnNlX2NtZGxpbmVfcGFydGl0aW9ucygpIHJvdXRpbmUuIFNpbmNlCi0JCSAqIHRoZSBib290bGRyIHNheXMgJ2lwYXEnLCBtYWtlIHN1cmUgaXQgY29udGludWVzIHRvIHdvcmsuCi0JCSAqLwotCQlteW10ZC0+bmFtZSA9ICJpcGFxIjsKLQotCQlpZiAoKG1hY2hpbmVfaXNfaDM2MDAoKSkpIHsKLSMJaWZkZWYgQ09ORklHX0xBQgotCQkJaDN4eHhfcGFydGl0aW9uc1sxXS5zaXplID0gbXlfc3ViX210ZFswXS0+c2l6ZSAtIDB4ODAwMDA7Ci0jCWVsc2UKLQkJCWgzeHh4X3BhcnRpdGlvbnNbMV0uc2l6ZSA9IG15X3N1Yl9tdGRbMF0tPnNpemUgLSAweDQwMDAwOwotIwllbmRpZgotCQkJbmJfcGFydHMgPSAyOwotCQl9IGVsc2UgewotIwlpZmRlZiBDT05GSUdfTEFCCi0JCQloM3h4eF9wYXJ0aXRpb25zWzFdLnNpemUgPSBteV9zdWJfbXRkWzBdLT5zaXplIC0gMHg0MDAwMCAtIDB4ODAwMDA7IC8qIGV4dHJhIGJpZyBib290IGJsb2NrICovCi0jCWVsc2UKLQkJCWgzeHh4X3BhcnRpdGlvbnNbMV0uc2l6ZSA9IG15X3N1Yl9tdGRbMF0tPnNpemUgLSAyKjB4NDAwMDA7Ci0jCWVuZGlmCi0JCQloM3h4eF9wYXJ0aXRpb25zWzJdLm9mZnNldCA9IG15X3N1Yl9tdGRbMF0tPnNpemUgLSAweDQwMDAwOwotCQl9Ci0KLQkJaWYgKG15X3N1Yl9tdGRbMV0pIHsKLSMJaWZkZWYgQ09ORklHX0xBQgotCQkJaDN4eHhfcGFydGl0aW9uc19iYW5rMlswXS5zaXplID0gbXlfc3ViX210ZFsxXS0+c2l6ZSAtIDB4ODAwMDA7Ci0jCWVsc2UKLQkJCWgzeHh4X3BhcnRpdGlvbnNfYmFuazJbMF0uc2l6ZSA9IG15X3N1Yl9tdGRbMV0tPnNpemUgLSAweDQwMDAwOwotIwllbmRpZgotCQkJaDN4eHhfcGFydGl0aW9uc19iYW5rMlsxXS5vZmZzZXQgPSBteV9zdWJfbXRkWzFdLT5zaXplIC0gMHg0MDAwMDsKLQkJfQotI2VuZGlmCi0JfQotCWVsc2UgewotCQkvKgotCQkgKiBOb3cgbGV0J3MgcHJvYmUgZm9yIHRoZSBhY3R1YWwgZmxhc2guICBEbyBpdCBoZXJlIHNpbmNlCi0JCSAqIHNwZWNpZmljIG1hY2hpbmUgc2V0dGluZ3MgbWlnaHQgaGF2ZSBiZWVuIHNldCBhYm92ZS4KLQkJICovCi0JCXByaW50ayhLRVJOX05PVElDRSAiSVBBUSBmbGFzaDogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzLCB3aW5kb3c9JWx4XG4iLCBpcGFxX21hcFswXS5iYW5rd2lkdGgqOCwgaXBhcV9tYXBbMF0udmlydCk7Ci0JCW15bXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmaXBhcV9tYXBbMF0pOwotCQlpZiAoIW15bXRkKQotCQkJcmV0dXJuIC1FTlhJTzsKLQkJbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JfQotCi0KLQkvKgotCSAqIER5bmFtaWMgcGFydGl0aW9uIHNlbGVjdGlvbiBzdHVmZiAobWlnaHQgb3ZlcnJpZGUgdGhlIHN0YXRpYyBvbmVzKQotCSAqLwotCi0JIGkgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydF9wcm9iZXMsICZwYXJzZWRfcGFydHMsIDApOwotCi0JIGlmIChpID4gMCkgewotCQkgbmJfcGFydHMgPSBwYXJzZWRfbnJfcGFydHMgPSBpOwotCQkgcGFydHMgPSBwYXJzZWRfcGFydHM7Ci0JCSBwYXJ0X3R5cGUgPSAiZHluYW1pYyI7Ci0JIH0KLQotCSBpZiAoIXBhcnRzKSB7Ci0JCSBwcmludGsoS0VSTl9OT1RJQ0UgIklQQVEgZmxhc2g6IG5vIHBhcnRpdGlvbiBpbmZvIGF2YWlsYWJsZSwgcmVnaXN0ZXJpbmcgd2hvbGUgZmxhc2ggYXQgb25jZVxuIik7Ci0JCSBhZGRfbXRkX2RldmljZShteW10ZCk7Ci0jaWZuZGVmIENPTkZJR19NVERfQ09OQ0FUCi0JCSBpZiAobXlfc3ViX210ZFsxXSkKLQkJCSBhZGRfbXRkX2RldmljZShteV9zdWJfbXRkWzFdKTsKLSNlbmRpZgotCSB9IGVsc2UgewotCQkgcHJpbnRrKEtFUk5fTk9USUNFICJVc2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgcGFydF90eXBlKTsKLQkJIGFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIG5iX3BhcnRzKTsKLSNpZm5kZWYgQ09ORklHX01URF9DT05DQVQKLQkJIGlmIChteV9zdWJfbXRkWzFdKQotCQkJIGFkZF9tdGRfcGFydGl0aW9ucyhteV9zdWJfbXRkWzFdLCBoM3h4eF9wYXJ0aXRpb25zX2JhbmsyLCBBUlJBWV9TSVpFKGgzeHh4X3BhcnRpdGlvbnNfYmFuazIpKTsKLSNlbmRpZgotCSB9Ci0KLQkgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcGFxX210ZF9jbGVhbnVwKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAobXltdGQpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKG15bXRkKTsKLSNpZm5kZWYgQ09ORklHX01URF9DT05DQVQKLQkJaWYgKG15X3N1Yl9tdGRbMV0pCi0JCQlkZWxfbXRkX3BhcnRpdGlvbnMobXlfc3ViX210ZFsxXSk7Ci0jZW5kaWYKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotI2lmZGVmIENPTkZJR19NVERfQ09OQ0FUCi0JCWZvcihpPTA7IGk8TUFYX0lQQVFfQ1M7IGkrKykKLSNlbHNlCi0JCQlmb3IoaT0xOyBpPE1BWF9JUEFRX0NTOyBpKyspCi0jZW5kaWYKLQkJCXsKLQkJCQlpZiAobXlfc3ViX210ZFtpXSkKLQkJCQkJbWFwX2Rlc3Ryb3kobXlfc3ViX210ZFtpXSk7Ci0JCQl9Ci0JCWtmcmVlKHBhcnNlZF9wYXJ0cyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBoMTkwMF9zcGVjaWFsX2Nhc2Uodm9pZCkKLXsKLQkvKiBUaGUgaVBBUSBoMTkwMCBpcyBhIHNwZWNpYWwgY2FzZSAtIGl0IGhhcyB3ZWlyZCBST00uICovCi0Jc2ltcGxlX21hcF9pbml0KCZpcGFxX21hcFswXSk7Ci0JaXBhcV9tYXBbMF0uc2l6ZSA9IDB4ODAwMDA7Ci0JaXBhcV9tYXBbMF0uc2V0X3ZwcCA9IGgzeHh4X3NldF92cHA7Ci0JaXBhcV9tYXBbMF0ucGh5cyA9IDB4MDsKLQlpcGFxX21hcFswXS52aXJ0ID0gaW9yZW1hcCgweDAsIDB4MDQwMDAwMDApOwotCWlwYXFfbWFwWzBdLmJhbmt3aWR0aCA9IDI7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgImlQQVEgZmxhc2g6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1cywgd2luZG93PSVseCB3aXRoIEpFREVDLlxuIiwgaXBhcV9tYXBbMF0uYmFua3dpZHRoKjgsIGlwYXFfbWFwWzBdLnZpcnQpOwotCW15bXRkID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZpcGFxX21hcFswXSk7Ci0JaWYgKCFteW10ZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JYWRkX210ZF9kZXZpY2UobXltdGQpOwotCXByaW50ayhLRVJOX05PVElDRSAiaVBBUSBmbGFzaDogcmVnaXN0ZXJlZCBoMTkxMCBmbGFzaFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotbW9kdWxlX2luaXQoaXBhcV9tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChpcGFxX210ZF9jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiSmFtZXkgSGlja3MiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSVBBUSBDRkkgbWFwIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIk1JVCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKaW5kZXggNzIxNGI4Ny4uN2IwNTE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAkgKiBub3QgYXR0ZW1wdCB0byBkbyBhIGRpcmVjdCBhY2Nlc3Mgb24gdXMuCiAJICovCiAJaW5mby0+bWFwLnBoeXMgPSBOT19YSVA7Ci0JaW5mby0+bWFwLnNpemUgPSBkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDE7CisJaW5mby0+bWFwLnNpemUgPSByZXNvdXJjZV9zaXplKGRldi0+cmVzb3VyY2UpOwogCiAJLyoKIAkgKiBXZSBvbmx5IHN1cHBvcnQgMTYtYml0IGFjY2Vzc2VzIGZvciBub3cuIElmIGFuZCB3aGVuCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlpbmZvLT5tYXAuY29weV9mcm9tID0gaXhwNHh4X2NvcHlfZnJvbSwKIAogCWluZm8tPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLT5zdGFydCwKLQkJCWRldi0+cmVzb3VyY2UtPmVuZCAtIGRldi0+cmVzb3VyY2UtPnN0YXJ0ICsgMSwKKwkJCXJlc291cmNlX3NpemUoZGV2LT5yZXNvdXJjZSksCiAJCQkiSVhQNFhYRmxhc2giKTsKIAlpZiAoIWluZm8tPnJlcykgewogCQlwcmludGsoS0VSTl9FUlIgIklYUDRYWEZsYXNoOiBDb3VsZCBub3QgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKQEAgLTIzMyw3ICsyMzMsNyBAQAogCX0KIAogCWluZm8tPm1hcC52aXJ0ID0gaW9yZW1hcChkZXYtPnJlc291cmNlLT5zdGFydCwKLQkJCQkgZGV2LT5yZXNvdXJjZS0+ZW5kIC0gZGV2LT5yZXNvdXJjZS0+c3RhcnQgKyAxKTsKKwkJCQkgcmVzb3VyY2Vfc2l6ZShkZXYtPnJlc291cmNlKSk7CiAJaWYgKCFpbmZvLT5tYXAudmlydCkgewogCQlwcmludGsoS0VSTl9FUlIgIklYUDRYWEZsYXNoOiBGYWlsZWQgdG8gaW9yZW1hcCByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwppbmRleCAzODA2NDhlLi5kOTYwM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwpAQCAtNDgsMjMgKzQ4LDIyIEBACiAKIAlpZiAoaW5mby0+Y210ZCkgewogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCQlpZiAoaW5mby0+bnJfcGFydHMgfHwgcGh5c21hcF9kYXRhLT5ucl9wYXJ0cykKKwkJaWYgKGluZm8tPm5yX3BhcnRzIHx8IHBoeXNtYXBfZGF0YS0+bnJfcGFydHMpIHsKIAkJCWRlbF9tdGRfcGFydGl0aW9ucyhpbmZvLT5jbXRkKTsKLQkJZWxzZQorCisJCQlpZiAoaW5mby0+bnJfcGFydHMpCisJCQkJa2ZyZWUoaW5mby0+cGFydHMpOworCQl9IGVsc2UgewogCQkJZGVsX210ZF9kZXZpY2UoaW5mby0+Y210ZCk7CisJCX0KICNlbHNlCiAJCWRlbF9tdGRfZGV2aWNlKGluZm8tPmNtdGQpOwogI2VuZGlmCi0JfQotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCWlmIChpbmZvLT5ucl9wYXJ0cykKLQkJa2ZyZWUoaW5mby0+cGFydHMpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTVREX0NPTkNBVAotCWlmIChpbmZvLT5jbXRkICE9IGluZm8tPm10ZFswXSkKLQkJbXRkX2NvbmNhdF9kZXN0cm95KGluZm8tPmNtdGQpOworCQlpZiAoaW5mby0+Y210ZCAhPSBpbmZvLT5tdGRbMF0pCisJCQltdGRfY29uY2F0X2Rlc3Ryb3koaW5mby0+Y210ZCk7CiAjZW5kaWYKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1JFU09VUkNFUzsgaSsrKSB7CiAJCWlmIChpbmZvLT5tdGRbaV0gIT0gTlVMTCkKQEAgLTEzMCw3ICsxMjksNyBAQAogCQkJCQkJIGluZm8tPm1hcFtpXS5zaXplKTsKIAkJaWYgKGluZm8tPm1hcFtpXS52aXJ0ID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2ggcmVnaW9uXG4iKTsKLQkJCWVyciA9IEVJTzsKKwkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKaW5kZXggNzRmYTA3NS4uYjEzZjY0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCkBAIC0yMCwxNCArMjAsMjMgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAorI2RlZmluZSBDQUNIRUxJTkVTSVpFCTMyCisKIHN0YXRpYyB2b2lkIHB4YTJ4eF9tYXBfaW52YWxfY2FjaGUoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgZnJvbSwKIAkJCQkgICAgICBzc2l6ZV90IGxlbikKIHsKLQlmbHVzaF9pb3JlbWFwX3JlZ2lvbihtYXAtPnBoeXMsIG1hcC0+Y2FjaGVkLCBmcm9tLCBsZW4pOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZyltYXAtPmNhY2hlZCArIGZyb207CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIGxlbjsKKworCXN0YXJ0ICY9IH4oQ0FDSEVMSU5FU0laRSAtIDEpOworCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQkvKiBpbnZhbGlkYXRlIEQgY2FjaGUgbGluZSAqLworCQlhc20gdm9sYXRpbGUgKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM2LCAxIiA6IDogInIiIChzdGFydCkpOworCQlzdGFydCArPSBDQUNIRUxJTkVTSVpFOworCX0KIH0KIAogc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCmluZGV4IGQ3YTQ3NTcuLmYzYWY4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCXBsYXQtPmV4aXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzYV9pbmZvICpfX2luaXQKK3N0YXRpYyBzdHJ1Y3Qgc2FfaW5mbyAqX19kZXZpbml0CiBzYTExMDBfc2V0dXBfbXRkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0KQogewogCXN0cnVjdCBzYV9pbmZvICppbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMKaW5kZXggMWY3MzI5Ny4uODJhZmFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jCkBAIC02MTIsMTYgKzYxMiwxNSBAQAogCiAJdGVzdF9mbGFzaF9kYXRhID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbik7CiAJLyogTmVlZCB0byBjb3VudCBob3cgbWFueSBiaXRzIGFyZSBzZXQgLSB0byBmaW5kIG91dCB3aGljaAotCSAqIGZ1bmN0aW9uX2RhdGEgZWxlbWVudCBoYXMgZGV0YWlscyBvZiB0aGUgbWVtb3J5IGNhcmQ6Ci0JICogdXNpbmcgQnJpYW4gS2VybmlnaGFuJ3MvUGV0ZXIgV2VnbmVyJ3MgbWV0aG9kICovCi0JZm9yIChjID0gMDsgdGVzdF9mbGFzaF9kYXRhOyBjKyspCi0JCXRlc3RfZmxhc2hfZGF0YSAmPSB0ZXN0X2ZsYXNoX2RhdGEgLSAxOworCSAqIGZ1bmN0aW9uX2RhdGEgZWxlbWVudCBoYXMgZGV0YWlscyBvZiB0aGUgbWVtb3J5IGNhcmQKKwkgKi8KKwljID0gaHdlaWdodF9sb25nKHRlc3RfZmxhc2hfZGF0YSk7CiAKIAliYXNpY19mbGFzaF9kYXRhID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbl9kYXRhW2MgLSAxXSk7CiAKIAljYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lbWNhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpIHsKLQkJZXJyb3IgPSBFTk9NRU07CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsX25vbWVtOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKaW5kZXggNjRlMmIzNy4uYzgyZTA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYworKysgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCkBAIC04NCw5ICs4NCw2IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJxID0gdHItPmJsa2NvcmVfcHJpdi0+cnE7CiAJc3RydWN0IHJlcXVlc3QgKnJlcSA9IE5VTEw7CiAKLQkvKiB3ZSBtaWdodCBnZXQgaW52b2x2ZWQgd2hlbiBtZW1vcnkgZ2V0cyBsb3csIHNvIHVzZSBQRl9NRU1BTExPQyAqLwotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwotCiAJc3Bpbl9sb2NrX2lycShycS0+cXVldWVfbG9jayk7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewpAQCAtMzgxLDcgKzM3OCw3IEBACiAJdHItPmJsa2NvcmVfcHJpdi0+dGhyZWFkID0ga3RocmVhZF9ydW4obXRkX2Jsa3RyYW5zX3RocmVhZCwgdHIsCiAJCQkiJXNkIiwgdHItPm5hbWUpOwogCWlmIChJU19FUlIodHItPmJsa2NvcmVfcHJpdi0+dGhyZWFkKSkgewotCQlpbnQgcmV0ID0gUFRSX0VSUih0ci0+YmxrY29yZV9wcml2LT50aHJlYWQpOworCQlyZXQgPSBQVFJfRVJSKHRyLT5ibGtjb3JlX3ByaXYtPnRocmVhZCk7CiAJCWJsa19jbGVhbnVwX3F1ZXVlKHRyLT5ibGtjb3JlX3ByaXYtPnJxKTsKIAkJdW5yZWdpc3Rlcl9ibGtkZXYodHItPm1ham9yLCB0ci0+bmFtZSk7CiAJCWtmcmVlKHRyLT5ibGtjb3JlX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29yZS5jIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCmluZGV4IDQ2N2E0ZjEuLmMzNTZjMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCQlmb3IgKGk9MDsgaTwgTUFYX01URF9ERVZJQ0VTOyBpKyspCiAJCQlpZiAobXRkX3RhYmxlW2ldID09IG10ZCkKIAkJCQlyZXQgPSBtdGRfdGFibGVbaV07Ci0JfSBlbHNlIGlmIChudW0gPCBNQVhfTVREX0RFVklDRVMpIHsKKwl9IGVsc2UgaWYgKG51bSA+PSAwICYmIG51bSA8IE1BWF9NVERfREVWSUNFUykgewogCQlyZXQgPSBtdGRfdGFibGVbbnVtXTsKIAkJaWYgKG10ZCAmJiBtdGQgIT0gcmV0KQogCQkJcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZG9vcHMuYyBiL2RyaXZlcnMvbXRkL210ZG9vcHMuYwppbmRleCAxMDYwMzM3Li5hNzE0ZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRvb3BzLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkb29wcy5jCkBAIC0yOSwxNCArMjksMzQgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ttc2dfZHVtcC5oPgorCisvKiBNYXhpbXVtIE1URCBwYXJ0aXRpb24gc2l6ZSAqLworI2RlZmluZSBNVERPT1BTX01BWF9NVERfU0laRSAoOCAqIDEwMjQgKiAxMDI0KQogCiAjZGVmaW5lIE1URE9PUFNfS0VSTk1TR19NQUdJQyAweDVkMDA1ZDAwCi0jZGVmaW5lIE9PUFNfUEFHRV9TSVpFIDQwOTYKKyNkZWZpbmUgTVRET09QU19IRUFERVJfU0laRSAgIDgKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVjb3JkX3NpemUgPSA0MDk2OworbW9kdWxlX3BhcmFtKHJlY29yZF9zaXplLCB1bG9uZywgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlY29yZF9zaXplLAorCQkicmVjb3JkIHNpemUgZm9yIE1URCBPT1BTIHBhZ2VzIGluIGJ5dGVzIChkZWZhdWx0IDQwOTYpIik7CisKK3N0YXRpYyBjaGFyIG10ZGRldls4MF07Cittb2R1bGVfcGFyYW1fc3RyaW5nKG10ZGRldiwgbXRkZGV2LCA4MCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKG10ZGRldiwKKwkJIm5hbWUgb3IgaW5kZXggbnVtYmVyIG9mIHRoZSBNVEQgZGV2aWNlIHRvIHVzZSIpOworCitzdGF0aWMgaW50IGR1bXBfb29wcyA9IDE7Cittb2R1bGVfcGFyYW0oZHVtcF9vb3BzLCBpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhkdW1wX29vcHMsCisJCSJzZXQgdG8gMSB0byBkdW1wIG9vcHNlcywgMCB0byBvbmx5IGR1bXAgcGFuaWNzIChkZWZhdWx0IDEpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkb29wc19jb250ZXh0IHsKKwlzdHJ1Y3Qga21zZ19kdW1wZXIgZHVtcDsKKwogCWludCBtdGRfaW5kZXg7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfZXJhc2U7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfd3JpdGU7CkBAIC00NCwyOCArNjQsNDMgQEAKIAlpbnQgb29wc19wYWdlczsKIAlpbnQgbmV4dHBhZ2U7CiAJaW50IG5leHRjb3VudDsKLQljaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgKm9vcHNfcGFnZV91c2VkOwogCiAJdm9pZCAqb29wc19idWY7Ci0KLQkvKiB3cml0ZWNvdW50IGFuZCBkaXNhYmxpbmcgcmVhZHkgYXJlIHNwaW4gbG9jayBwcm90ZWN0ZWQgKi8KLQlzcGlubG9ja190IHdyaXRlY291bnRfbG9jazsKLQlpbnQgcmVhZHk7Ci0JaW50IHdyaXRlY291bnQ7CiB9IG9vcHNfY3h0OwogCitzdGF0aWMgdm9pZCBtYXJrX3BhZ2VfdXNlZChzdHJ1Y3QgbXRkb29wc19jb250ZXh0ICpjeHQsIGludCBwYWdlKQoreworCXNldF9iaXQocGFnZSwgY3h0LT5vb3BzX3BhZ2VfdXNlZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfcGFnZV91bnVzZWQoc3RydWN0IG10ZG9vcHNfY29udGV4dCAqY3h0LCBpbnQgcGFnZSkKK3sKKwljbGVhcl9iaXQocGFnZSwgY3h0LT5vb3BzX3BhZ2VfdXNlZCk7Cit9CisKK3N0YXRpYyBpbnQgcGFnZV9pc191c2VkKHN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCwgaW50IHBhZ2UpCit7CisJcmV0dXJuIHRlc3RfYml0KHBhZ2UsIGN4dC0+b29wc19wYWdlX3VzZWQpOworfQorCiBzdGF0aWMgdm9pZCBtdGRvb3BzX2VyYXNlX2NhbGxiYWNrKHN0cnVjdCBlcmFzZV9pbmZvICpkb25lKQogewogCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0X3EgPSAod2FpdF9xdWV1ZV9oZWFkX3QgKilkb25lLT5wcml2OwogCXdha2VfdXAod2FpdF9xKTsKIH0KIAotc3RhdGljIGludCBtdGRvb3BzX2VyYXNlX2Jsb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgb2Zmc2V0KQorc3RhdGljIGludCBtdGRvb3BzX2VyYXNlX2Jsb2NrKHN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCwgaW50IG9mZnNldCkKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOworCXUzMiBzdGFydF9wYWdlX29mZnNldCA9IG10ZF9kaXZfYnlfZWIob2Zmc2V0LCBtdGQpICogbXRkLT5lcmFzZXNpemU7CisJdTMyIHN0YXJ0X3BhZ2UgPSBzdGFydF9wYWdlX29mZnNldCAvIHJlY29yZF9zaXplOworCXUzMiBlcmFzZV9wYWdlcyA9IG10ZC0+ZXJhc2VzaXplIC8gcmVjb3JkX3NpemU7CiAJc3RydWN0IGVyYXNlX2luZm8gZXJhc2U7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogCWludCByZXQ7CisJaW50IHBhZ2U7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3YWl0X3EpOwogCWVyYXNlLm10ZCA9IG10ZDsKQEAgLTgxLDI1ICsxMTYsMjQgQEAKIAlpZiAocmV0KSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZ3YWl0X3EsICZ3YWl0KTsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm10ZG9vcHM6IGVyYXNlIG9mIHJlZ2lvbiBbMHglbGx4LCAweCVsbHhdICIKLQkJCQkgICAgICJvbiBcIiVzXCIgZmFpbGVkXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyllcmFzZS5hZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKWVyYXNlLmxlbiwgbXRkLT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRkb29wczogZXJhc2Ugb2YgcmVnaW9uIFsweCVsbHgsIDB4JWxseF0gb24gXCIlc1wiIGZhaWxlZFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXJhc2UuYWRkciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXJhc2UubGVuLCBtdGRkZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXNjaGVkdWxlKCk7ICAvKiBXYWl0IGZvciBlcmFzZSB0byBmaW5pc2guICovCiAJcmVtb3ZlX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwogCisJLyogTWFyayBwYWdlcyBhcyB1bnVzZWQgKi8KKwlmb3IgKHBhZ2UgPSBzdGFydF9wYWdlOyBwYWdlIDwgc3RhcnRfcGFnZSArIGVyYXNlX3BhZ2VzOyBwYWdlKyspCisJCW1hcmtfcGFnZV91bnVzZWQoY3h0LCBwYWdlKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBtdGRvb3BzX2luY19jb3VudGVyKHN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCkKIHsKLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwotCXNpemVfdCByZXRsZW47Ci0JdTMyIGNvdW50OwotCWludCByZXQ7Ci0KIAljeHQtPm5leHRwYWdlKys7CiAJaWYgKGN4dC0+bmV4dHBhZ2UgPj0gY3h0LT5vb3BzX3BhZ2VzKQogCQljeHQtPm5leHRwYWdlID0gMDsKQEAgLTEwNywyNSArMTQxLDEzIEBACiAJaWYgKGN4dC0+bmV4dGNvdW50ID09IDB4ZmZmZmZmZmYpCiAJCWN4dC0+bmV4dGNvdW50ID0gMDsKIAotCXJldCA9IG10ZC0+cmVhZChtdGQsIGN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSwgNCwKLQkJCSZyZXRsZW4sICh1X2NoYXIgKikgJmNvdW50KTsKLQlpZiAoKHJldGxlbiAhPSA0KSB8fCAoKHJldCA8IDApICYmIChyZXQgIT0gLUVVQ0xFQU4pKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IFJlYWQgZmFpbHVyZSBhdCAlZCAoJXRkIG9mIDQgcmVhZCkiCi0JCQkJIiwgZXJyICVkLlxuIiwgY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFLAotCQkJCXJldGxlbiwgcmV0KTsKKwlpZiAocGFnZV9pc191c2VkKGN4dCwgY3h0LT5uZXh0cGFnZSkpIHsKIAkJc2NoZWR1bGVfd29yaygmY3h0LT53b3JrX2VyYXNlKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIFNlZSBpZiB3ZSBuZWVkIHRvIGVyYXNlIHRoZSBuZXh0IGJsb2NrICovCi0JaWYgKGNvdW50ICE9IDB4ZmZmZmZmZmYpIHsKLQkJc2NoZWR1bGVfd29yaygmY3h0LT53b3JrX2VyYXNlKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICJtdGRvb3BzOiBSZWFkeSAlZCwgJWQgKG5vIGVyYXNlKVxuIiwKLQkJCWN4dC0+bmV4dHBhZ2UsIGN4dC0+bmV4dGNvdW50KTsKLQljeHQtPnJlYWR5ID0gMTsKKwlwcmludGsoS0VSTl9ERUJVRyAibXRkb29wczogcmVhZHkgJWQsICVkIChubyBlcmFzZSlcbiIsCisJICAgICAgIGN4dC0+bmV4dHBhZ2UsIGN4dC0+bmV4dGNvdW50KTsKIH0KIAogLyogU2NoZWR1bGVkIHdvcmsgLSB3aGVuIHdlIGNhbid0IHByb2NlZWQgd2l0aG91dCBlcmFzaW5nIGEgYmxvY2sgKi8KQEAgLTE0MCw0NyArMTYyLDQ3IEBACiAJaWYgKCFtdGQpCiAJCXJldHVybjsKIAotCW1vZCA9IChjeHQtPm5leHRwYWdlICogT09QU19QQUdFX1NJWkUpICUgbXRkLT5lcmFzZXNpemU7CisJbW9kID0gKGN4dC0+bmV4dHBhZ2UgKiByZWNvcmRfc2l6ZSkgJSBtdGQtPmVyYXNlc2l6ZTsKIAlpZiAobW9kICE9IDApIHsKLQkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAoKG10ZC0+ZXJhc2VzaXplIC0gbW9kKSAvIE9PUFNfUEFHRV9TSVpFKTsKKwkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAoKG10ZC0+ZXJhc2VzaXplIC0gbW9kKSAvIHJlY29yZF9zaXplKTsKIAkJaWYgKGN4dC0+bmV4dHBhZ2UgPj0gY3h0LT5vb3BzX3BhZ2VzKQogCQkJY3h0LT5uZXh0cGFnZSA9IDA7CiAJfQogCiAJd2hpbGUgKG10ZC0+YmxvY2tfaXNiYWQpIHsKLQkJcmV0ID0gbXRkLT5ibG9ja19pc2JhZChtdGQsIGN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSk7CisJCXJldCA9IG10ZC0+YmxvY2tfaXNiYWQobXRkLCBjeHQtPm5leHRwYWdlICogcmVjb3JkX3NpemUpOwogCQlpZiAoIXJldCkKIAkJCWJyZWFrOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBibG9ja19pc2JhZCBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IGJsb2NrX2lzYmFkIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQkJcmV0dXJuOwogCQl9CiBiYWRibG9jazoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRkb29wczogQmFkIGJsb2NrIGF0ICUwOHhcbiIsCi0JCQkJY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRkb29wczogYmFkIGJsb2NrIGF0ICUwOGx4XG4iLAorCQkgICAgICAgY3h0LT5uZXh0cGFnZSAqIHJlY29yZF9zaXplKTsKIAkJaSsrOwotCQljeHQtPm5leHRwYWdlID0gY3h0LT5uZXh0cGFnZSArIChtdGQtPmVyYXNlc2l6ZSAvIE9PUFNfUEFHRV9TSVpFKTsKKwkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAobXRkLT5lcmFzZXNpemUgLyByZWNvcmRfc2l6ZSk7CiAJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwotCQlpZiAoaSA9PSAoY3h0LT5vb3BzX3BhZ2VzIC8gKG10ZC0+ZXJhc2VzaXplIC8gT09QU19QQUdFX1NJWkUpKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBBbGwgYmxvY2tzIGJhZCFcbiIpOworCQlpZiAoaSA9PSBjeHQtPm9vcHNfcGFnZXMgLyAobXRkLT5lcmFzZXNpemUgLyByZWNvcmRfc2l6ZSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogYWxsIGJsb2NrcyBiYWQhXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCWZvciAoaiA9IDAsIHJldCA9IC0xOyAoaiA8IDMpICYmIChyZXQgPCAwKTsgaisrKQotCQlyZXQgPSBtdGRvb3BzX2VyYXNlX2Jsb2NrKG10ZCwgY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFKTsKKwkJcmV0ID0gbXRkb29wc19lcmFzZV9ibG9jayhjeHQsIGN4dC0+bmV4dHBhZ2UgKiByZWNvcmRfc2l6ZSk7CiAKIAlpZiAocmV0ID49IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm10ZG9vcHM6IFJlYWR5ICVkLCAlZCBcbiIsIGN4dC0+bmV4dHBhZ2UsIGN4dC0+bmV4dGNvdW50KTsKLQkJY3h0LT5yZWFkeSA9IDE7CisJCXByaW50ayhLRVJOX0RFQlVHICJtdGRvb3BzOiByZWFkeSAlZCwgJWRcbiIsCisJCSAgICAgICBjeHQtPm5leHRwYWdlLCBjeHQtPm5leHRjb3VudCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAobXRkLT5ibG9ja19tYXJrYmFkICYmIChyZXQgPT0gLUVJTykpIHsKLQkJcmV0ID0gbXRkLT5ibG9ja19tYXJrYmFkKG10ZCwgY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFKTsKKwlpZiAobXRkLT5ibG9ja19tYXJrYmFkICYmIHJldCA9PSAtRUlPKSB7CisJCXJldCA9IG10ZC0+YmxvY2tfbWFya2JhZChtdGQsIGN4dC0+bmV4dHBhZ2UgKiByZWNvcmRfc2l6ZSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IGJsb2NrX21hcmtiYWQgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBibG9ja19tYXJrYmFkIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTkxLDM2ICsyMTMsMzcgQEAKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwogCXNpemVfdCByZXRsZW47CisJdTMyICpoZHI7CiAJaW50IHJldDsKIAotCWlmIChjeHQtPndyaXRlY291bnQgPCBPT1BTX1BBR0VfU0laRSkKLQkJbWVtc2V0KGN4dC0+b29wc19idWYgKyBjeHQtPndyaXRlY291bnQsIDB4ZmYsCi0JCQkJCU9PUFNfUEFHRV9TSVpFIC0gY3h0LT53cml0ZWNvdW50KTsKKwkvKiBBZGQgbXRkb29wcyBoZWFkZXIgdG8gdGhlIGJ1ZmZlciAqLworCWhkciA9IGN4dC0+b29wc19idWY7CisJaGRyWzBdID0gY3h0LT5uZXh0Y291bnQ7CisJaGRyWzFdID0gTVRET09QU19LRVJOTVNHX01BR0lDOwogCiAJaWYgKHBhbmljKQotCQlyZXQgPSBtdGQtPnBhbmljX3dyaXRlKG10ZCwgY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFLAotCQkJCQlPT1BTX1BBR0VfU0laRSwgJnJldGxlbiwgY3h0LT5vb3BzX2J1Zik7CisJCXJldCA9IG10ZC0+cGFuaWNfd3JpdGUobXRkLCBjeHQtPm5leHRwYWdlICogcmVjb3JkX3NpemUsCisJCQkJCXJlY29yZF9zaXplLCAmcmV0bGVuLCBjeHQtPm9vcHNfYnVmKTsKIAllbHNlCi0JCXJldCA9IG10ZC0+d3JpdGUobXRkLCBjeHQtPm5leHRwYWdlICogT09QU19QQUdFX1NJWkUsCi0JCQkJCU9PUFNfUEFHRV9TSVpFLCAmcmV0bGVuLCBjeHQtPm9vcHNfYnVmKTsKKwkJcmV0ID0gbXRkLT53cml0ZShtdGQsIGN4dC0+bmV4dHBhZ2UgKiByZWNvcmRfc2l6ZSwKKwkJCQkJcmVjb3JkX3NpemUsICZyZXRsZW4sIGN4dC0+b29wc19idWYpOwogCi0JY3h0LT53cml0ZWNvdW50ID0gMDsKLQotCWlmICgocmV0bGVuICE9IE9PUFNfUEFHRV9TSVpFKSB8fCAocmV0IDwgMCkpCi0JCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogV3JpdGUgZmFpbHVyZSBhdCAlZCAoJXRkIG9mICVkIHdyaXR0ZW4pLCBlcnIgJWQuXG4iLAotCQkJY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFLCByZXRsZW4sCU9PUFNfUEFHRV9TSVpFLCByZXQpOworCWlmIChyZXRsZW4gIT0gcmVjb3JkX3NpemUgfHwgcmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiB3cml0ZSBmYWlsdXJlIGF0ICVsZCAoJXRkIG9mICVsZCB3cml0dGVuKSwgZXJyb3IgJWRcbiIsCisJCSAgICAgICBjeHQtPm5leHRwYWdlICogcmVjb3JkX3NpemUsIHJldGxlbiwgcmVjb3JkX3NpemUsIHJldCk7CisJbWFya19wYWdlX3VzZWQoY3h0LCBjeHQtPm5leHRwYWdlKTsKKwltZW1zZXQoY3h0LT5vb3BzX2J1ZiwgMHhmZiwgcmVjb3JkX3NpemUpOwogCiAJbXRkb29wc19pbmNfY291bnRlcihjeHQpOwogfQogCi0KIHN0YXRpYyB2b2lkIG10ZG9vcHNfd29ya2Z1bmNfd3JpdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCA9CiAJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG10ZG9vcHNfY29udGV4dCwgd29ya193cml0ZSk7CiAKIAltdGRvb3BzX3dyaXRlKGN4dCwgMCk7Ci19CQkJCQkKK30KIAogc3RhdGljIHZvaWQgZmluZF9uZXh0X3Bvc2l0aW9uKHN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCkKIHsKQEAgLTIzMCwyOCArMjUzLDMzIEBACiAJc2l6ZV90IHJldGxlbjsKIAogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBjeHQtPm9vcHNfcGFnZXM7IHBhZ2UrKykgewotCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBwYWdlICogT09QU19QQUdFX1NJWkUsIDgsICZyZXRsZW4sICh1X2NoYXIgKikgJmNvdW50WzBdKTsKLQkJaWYgKChyZXRsZW4gIT0gOCkgfHwgKChyZXQgPCAwKSAmJiAocmV0ICE9IC1FVUNMRUFOKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogUmVhZCBmYWlsdXJlIGF0ICVkICgldGQgb2YgOCByZWFkKSIKLQkJCQkiLCBlcnIgJWQuXG4iLCBwYWdlICogT09QU19QQUdFX1NJWkUsIHJldGxlbiwgcmV0KTsKKwkJLyogQXNzdW1lIHRoZSBwYWdlIGlzIHVzZWQgKi8KKwkJbWFya19wYWdlX3VzZWQoY3h0LCBwYWdlKTsKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcGFnZSAqIHJlY29yZF9zaXplLCBNVERPT1BTX0hFQURFUl9TSVpFLAorCQkJCSZyZXRsZW4sICh1X2NoYXIgKikgJmNvdW50WzBdKTsKKwkJaWYgKHJldGxlbiAhPSBNVERPT1BTX0hFQURFUl9TSVpFIHx8CisJCQkJKHJldCA8IDAgJiYgcmV0ICE9IC1FVUNMRUFOKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiByZWFkIGZhaWx1cmUgYXQgJWxkICgldGQgb2YgJWQgcmVhZCksIGVyciAlZFxuIiwKKwkJCSAgICAgICBwYWdlICogcmVjb3JkX3NpemUsIHJldGxlbiwKKwkJCSAgICAgICBNVERPT1BTX0hFQURFUl9TSVpFLCByZXQpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoY291bnRbMV0gIT0gTVRET09QU19LRVJOTVNHX01BR0lDKQotCQkJY29udGludWU7CisJCWlmIChjb3VudFswXSA9PSAweGZmZmZmZmZmICYmIGNvdW50WzFdID09IDB4ZmZmZmZmZmYpCisJCQltYXJrX3BhZ2VfdW51c2VkKGN4dCwgcGFnZSk7CiAJCWlmIChjb3VudFswXSA9PSAweGZmZmZmZmZmKQogCQkJY29udGludWU7CiAJCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7CiAJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKLQkJfSBlbHNlIGlmICgoY291bnRbMF0gPCAweDQwMDAwMDAwKSAmJiAobWF4Y291bnQgPiAweGMwMDAwMDAwKSkgeworCQl9IGVsc2UgaWYgKGNvdW50WzBdIDwgMHg0MDAwMDAwMCAmJiBtYXhjb3VudCA+IDB4YzAwMDAwMDApIHsKIAkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudFswXSA+IG1heGNvdW50KSAmJiAoY291bnRbMF0gPCAweGMwMDAwMDAwKSkgeworCQl9IGVsc2UgaWYgKGNvdW50WzBdID4gbWF4Y291bnQgJiYgY291bnRbMF0gPCAweGMwMDAwMDAwKSB7CiAJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKLQkJfSBlbHNlIGlmICgoY291bnRbMF0gPiBtYXhjb3VudCkgJiYgKGNvdW50WzBdID4gMHhjMDAwMDAwMCkKLQkJCQkJJiYgKG1heGNvdW50ID4gMHg4MDAwMDAwMCkpIHsKKwkJfSBlbHNlIGlmIChjb3VudFswXSA+IG1heGNvdW50ICYmIGNvdW50WzBdID4gMHhjMDAwMDAwMAorCQkJCQkmJiBtYXhjb3VudCA+IDB4ODAwMDAwMDApIHsKIAkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwogCQl9CkBAIC0yNjksMzcgKzI5Nyw5MSBAQAogCW10ZG9vcHNfaW5jX2NvdW50ZXIoY3h0KTsKIH0KIAorc3RhdGljIHZvaWQgbXRkb29wc19kb19kdW1wKHN0cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyLAorCQllbnVtIGttc2dfZHVtcF9yZWFzb24gcmVhc29uLCBjb25zdCBjaGFyICpzMSwgdW5zaWduZWQgbG9uZyBsMSwKKwkJY29uc3QgY2hhciAqczIsIHVuc2lnbmVkIGxvbmcgbDIpCit7CisJc3RydWN0IG10ZG9vcHNfY29udGV4dCAqY3h0ID0gY29udGFpbmVyX29mKGR1bXBlciwKKwkJCXN0cnVjdCBtdGRvb3BzX2NvbnRleHQsIGR1bXApOworCXVuc2lnbmVkIGxvbmcgczFfc3RhcnQsIHMyX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbDFfY3B5LCBsMl9jcHk7CisJY2hhciAqZHN0OworCisJLyogT25seSBkdW1wIG9vcHNlcyBpZiBkdW1wX29vcHMgaXMgc2V0ICovCisJaWYgKHJlYXNvbiA9PSBLTVNHX0RVTVBfT09QUyAmJiAhZHVtcF9vb3BzKQorCQlyZXR1cm47CisKKwlkc3QgPSBjeHQtPm9vcHNfYnVmICsgTVRET09QU19IRUFERVJfU0laRTsgLyogU2tpcCB0aGUgaGVhZGVyICovCisJbDJfY3B5ID0gbWluKGwyLCByZWNvcmRfc2l6ZSAtIE1URE9PUFNfSEVBREVSX1NJWkUpOworCWwxX2NweSA9IG1pbihsMSwgcmVjb3JkX3NpemUgLSBNVERPT1BTX0hFQURFUl9TSVpFIC0gbDJfY3B5KTsKKworCXMyX3N0YXJ0ID0gbDIgLSBsMl9jcHk7CisJczFfc3RhcnQgPSBsMSAtIGwxX2NweTsKKworCW1lbWNweShkc3QsIHMxICsgczFfc3RhcnQsIGwxX2NweSk7CisJbWVtY3B5KGRzdCArIGwxX2NweSwgczIgKyBzMl9zdGFydCwgbDJfY3B5KTsKKworCS8qIFBhbmljcyBtdXN0IGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkgKi8KKwlpZiAocmVhc29uID09IEtNU0dfRFVNUF9QQU5JQykgeworCQlpZiAoIWN4dC0+bXRkLT5wYW5pY193cml0ZSkKKwkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogQ2Fubm90IHdyaXRlIGZyb20gcGFuaWMgd2l0aG91dCBwYW5pY193cml0ZVxuIik7CisJCWVsc2UKKwkJCW10ZG9vcHNfd3JpdGUoY3h0LCAxKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZvciBvdGhlciBjYXNlcywgc2NoZWR1bGUgd29yayB0byB3cml0ZSBpdCAibmljZWx5IiAqLworCXNjaGVkdWxlX3dvcmsoJmN4dC0+d29ya193cml0ZSk7Cit9CiAKIHN0YXRpYyB2b2lkIG10ZG9vcHNfbm90aWZ5X2FkZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgbXRkb29wc19jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7CisJdTY0IG10ZG9vcHNfcGFnZXMgPSBkaXZfdTY0KG10ZC0+c2l6ZSwgcmVjb3JkX3NpemUpOworCWludCBlcnI7CiAKLQlpZiAoY3h0LT5uYW1lICYmICFzdHJjbXAobXRkLT5uYW1lLCBjeHQtPm5hbWUpKQorCWlmICghc3RyY21wKG10ZC0+bmFtZSwgbXRkZGV2KSkKIAkJY3h0LT5tdGRfaW5kZXggPSBtdGQtPmluZGV4OwogCi0JaWYgKChtdGQtPmluZGV4ICE9IGN4dC0+bXRkX2luZGV4KSB8fCBjeHQtPm10ZF9pbmRleCA8IDApCisJaWYgKG10ZC0+aW5kZXggIT0gY3h0LT5tdGRfaW5kZXggfHwgY3h0LT5tdGRfaW5kZXggPCAwKQogCQlyZXR1cm47CiAKLQlpZiAobXRkLT5zaXplIDwgKG10ZC0+ZXJhc2VzaXplICogMikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNVEQgcGFydGl0aW9uICVkIG5vdCBiaWcgZW5vdWdoIGZvciBtdGRvb3BzXG4iLAotCQkJCW10ZC0+aW5kZXgpOworCWlmIChtdGQtPnNpemUgPCBtdGQtPmVyYXNlc2l6ZSAqIDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBNVEQgcGFydGl0aW9uICVkIG5vdCBiaWcgZW5vdWdoIGZvciBtdGRvb3BzXG4iLAorCQkgICAgICAgbXRkLT5pbmRleCk7CisJCXJldHVybjsKKwl9CisJaWYgKG10ZC0+ZXJhc2VzaXplIDwgcmVjb3JkX3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBlcmFzZWJsb2NrIHNpemUgb2YgTVREIHBhcnRpdGlvbiAlZCB0b28gc21hbGxcbiIsCisJCSAgICAgICBtdGQtPmluZGV4KTsKKwkJcmV0dXJuOworCX0KKwlpZiAobXRkLT5zaXplID4gTVRET09QU19NQVhfTVREX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBtdGQlZCBpcyB0b28gbGFyZ2UgKGxpbWl0IGlzICVkIE1pQilcbiIsCisJCSAgICAgICBtdGQtPmluZGV4LCBNVERPT1BTX01BWF9NVERfU0laRSAvIDEwMjQgLyAxMDI0KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChtdGQtPmVyYXNlc2l6ZSA8IE9PUFNfUEFHRV9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJhc2VibG9jayBzaXplIG9mIE1URCBwYXJ0aXRpb24gJWQgdG9vIHNtYWxsXG4iLAotCQkJCW10ZC0+aW5kZXgpOworCS8qIG9vcHNfcGFnZV91c2VkIGlzIGEgYml0IGZpZWxkICovCisJY3h0LT5vb3BzX3BhZ2VfdXNlZCA9IHZtYWxsb2MoRElWX1JPVU5EX1VQKG10ZG9vcHNfcGFnZXMsCisJCQlCSVRTX1BFUl9MT05HKSk7CisJaWYgKCFjeHQtPm9vcHNfcGFnZV91c2VkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogY291bGQgbm90IGFsbG9jYXRlIHBhZ2UgYXJyYXlcbiIpOworCQlyZXR1cm47CisJfQorCisJY3h0LT5kdW1wLmR1bXAgPSBtdGRvb3BzX2RvX2R1bXA7CisJZXJyID0ga21zZ19kdW1wX3JlZ2lzdGVyKCZjeHQtPmR1bXApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiByZWdpc3RlcmluZyBrbXNnIGR1bXBlciBmYWlsZWQsIGVycm9yICVkXG4iLCBlcnIpOworCQl2ZnJlZShjeHQtPm9vcHNfcGFnZV91c2VkKTsKKwkJY3h0LT5vb3BzX3BhZ2VfdXNlZCA9IE5VTEw7CiAJCXJldHVybjsKIAl9CiAKIAljeHQtPm10ZCA9IG10ZDsKLQlpZiAobXRkLT5zaXplID4gSU5UX01BWCkKLQkJY3h0LT5vb3BzX3BhZ2VzID0gSU5UX01BWCAvIE9PUFNfUEFHRV9TSVpFOwotCWVsc2UKLQkJY3h0LT5vb3BzX3BhZ2VzID0gKGludCltdGQtPnNpemUgLyBPT1BTX1BBR0VfU0laRTsKLQorCWN4dC0+b29wc19wYWdlcyA9IChpbnQpbXRkLT5zaXplIC8gcmVjb3JkX3NpemU7CiAJZmluZF9uZXh0X3Bvc2l0aW9uKGN4dCk7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJtdGRvb3BzOiBBdHRhY2hlZCB0byBNVEQgZGV2aWNlICVkXG4iLCBtdGQtPmluZGV4KTsKIH0KIApAQCAtMzA3LDE0OSArMzg5LDc4IEBACiB7CiAJc3RydWN0IG10ZG9vcHNfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0OwogCi0JaWYgKChtdGQtPmluZGV4ICE9IGN4dC0+bXRkX2luZGV4KSB8fCBjeHQtPm10ZF9pbmRleCA8IDApCisJaWYgKG10ZC0+aW5kZXggIT0gY3h0LT5tdGRfaW5kZXggfHwgY3h0LT5tdGRfaW5kZXggPCAwKQogCQlyZXR1cm47CiAKKwlpZiAoa21zZ19kdW1wX3VucmVnaXN0ZXIoJmN4dC0+ZHVtcCkgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdGRvb3BzOiBjb3VsZCBub3QgdW5yZWdpc3RlciBrbXNnX2R1bXBlclxuIik7CisKIAljeHQtPm10ZCA9IE5VTEw7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIH0KIAotc3RhdGljIHZvaWQgbXRkb29wc19jb25zb2xlX3N5bmModm9pZCkKLXsKLQlzdHJ1Y3QgbXRkb29wc19jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjeHQtPnJlYWR5IHx8ICFtdGQgfHwgY3h0LT53cml0ZWNvdW50ID09IDApCi0JCXJldHVybjsKLQotCS8qIAotCSAqICBPbmNlIHJlYWR5IGlzIDAgYW5kIHdlJ3ZlIGhlbGQgdGhlIGxvY2sgbm8gZnVydGhlciB3cml0ZXMgdG8gdGhlIAotCSAqICBidWZmZXIgd2lsbCBoYXBwZW4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3h0LT53cml0ZWNvdW50X2xvY2ssIGZsYWdzKTsKLQlpZiAoIWN4dC0+cmVhZHkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3h0LT53cml0ZWNvdW50X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQljeHQtPnJlYWR5ID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjeHQtPndyaXRlY291bnRfbG9jaywgZmxhZ3MpOwotCi0JaWYgKG10ZC0+cGFuaWNfd3JpdGUgJiYgaW5faW50ZXJydXB0KCkpCi0JCS8qIEludGVycnVwdCBjb250ZXh0LCB3ZSdyZSBnb2luZyB0byBwYW5pYyBzbyB0cnkgYW5kIGxvZyAqLwotCQltdGRvb3BzX3dyaXRlKGN4dCwgMSk7Ci0JZWxzZQotCQlzY2hlZHVsZV93b3JrKCZjeHQtPndvcmtfd3JpdGUpOwotfQotCi1zdGF0aWMgdm9pZAotbXRkb29wc19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQotewotCXN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCA9IGNvLT5kYXRhOwotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gY3h0LT5tdGQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghb29wc19pbl9wcm9ncmVzcykgewotCQltdGRvb3BzX2NvbnNvbGVfc3luYygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFjeHQtPnJlYWR5IHx8ICFtdGQpCi0JCXJldHVybjsKLQotCS8qIExvY2tpbmcgb24gd3JpdGVjb3VudCBlbnN1cmVzIHNlcXVlbnRpYWwgd3JpdGVzIHRvIHRoZSBidWZmZXIgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3h0LT53cml0ZWNvdW50X2xvY2ssIGZsYWdzKTsKLQotCS8qIENoZWNrIHJlYWR5IHN0YXR1cyBkaWRuJ3QgY2hhbmdlIHdoaWxzdCB3YWl0aW5nIGZvciB0aGUgbG9jayAqLwotCWlmICghY3h0LT5yZWFkeSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjeHQtPndyaXRlY291bnRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGN4dC0+d3JpdGVjb3VudCA9PSAwKSB7Ci0JCXUzMiAqc3RhbXAgPSBjeHQtPm9vcHNfYnVmOwotCQkqc3RhbXArKyA9IGN4dC0+bmV4dGNvdW50OwotCQkqc3RhbXAgPSBNVERPT1BTX0tFUk5NU0dfTUFHSUM7Ci0JCWN4dC0+d3JpdGVjb3VudCA9IDg7Ci0JfQotCi0JaWYgKChjb3VudCArIGN4dC0+d3JpdGVjb3VudCkgPiBPT1BTX1BBR0VfU0laRSkKLQkJY291bnQgPSBPT1BTX1BBR0VfU0laRSAtIGN4dC0+d3JpdGVjb3VudDsKLQotCW1lbWNweShjeHQtPm9vcHNfYnVmICsgY3h0LT53cml0ZWNvdW50LCBzLCBjb3VudCk7Ci0JY3h0LT53cml0ZWNvdW50ICs9IGNvdW50OwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3h0LT53cml0ZWNvdW50X2xvY2ssIGZsYWdzKTsKLQotCWlmIChjeHQtPndyaXRlY291bnQgPT0gT09QU19QQUdFX1NJWkUpCi0JCW10ZG9vcHNfY29uc29sZV9zeW5jKCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG10ZG9vcHNfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCi17Ci0Jc3RydWN0IG10ZG9vcHNfY29udGV4dCAqY3h0ID0gY28tPmRhdGE7Ci0KLQlpZiAoY3h0LT5tdGRfaW5kZXggIT0gLTEgfHwgY3h0LT5uYW1lKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmIChvcHRpb25zKSB7Ci0JCWN4dC0+bmFtZSA9IGtzdHJkdXAob3B0aW9ucywgR0ZQX0tFUk5FTCk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoY28tPmluZGV4ID09IC0xKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN4dC0+bXRkX2luZGV4ID0gY28tPmluZGV4OwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgc3RydWN0IG10ZF9ub3RpZmllciBtdGRvb3BzX25vdGlmaWVyID0gewogCS5hZGQJPSBtdGRvb3BzX25vdGlmeV9hZGQsCiAJLnJlbW92ZQk9IG10ZG9vcHNfbm90aWZ5X3JlbW92ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBtdGRvb3BzX2NvbnNvbGUgPSB7Ci0JLm5hbWUJCT0gInR0eU1URCIsCi0JLndyaXRlCQk9IG10ZG9vcHNfY29uc29sZV93cml0ZSwKLQkuc2V0dXAJCT0gbXRkb29wc19jb25zb2xlX3NldHVwLAotCS51bmJsYW5rCT0gbXRkb29wc19jb25zb2xlX3N5bmMsCi0JLmluZGV4CQk9IC0xLAotCS5kYXRhCQk9ICZvb3BzX2N4dCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG10ZG9vcHNfY29uc29sZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdGRvb3BzX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbXRkb29wc19jb250ZXh0ICpjeHQgPSAmb29wc19jeHQ7CisJaW50IG10ZF9pbmRleDsKKwljaGFyICplbmRwOwogCisJaWYgKHN0cmxlbihtdGRkZXYpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBtdGQgZGV2aWNlIChtdGRkZXY9bmFtZS9udW1iZXIpIG11c3QgYmUgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKChyZWNvcmRfc2l6ZSAmIDQwOTUpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiByZWNvcmRfc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNDA5NlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmVjb3JkX3NpemUgPCA0MDk2KSB7CisJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogcmVjb3JkX3NpemUgbXVzdCBiZSBvdmVyIDQwOTYgYnl0ZXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTZXR1cCB0aGUgTVREIGRldmljZSB0byB1c2UgKi8KIAljeHQtPm10ZF9pbmRleCA9IC0xOwotCWN4dC0+b29wc19idWYgPSB2bWFsbG9jKE9PUFNfUEFHRV9TSVpFKTsKLQlzcGluX2xvY2tfaW5pdCgmY3h0LT53cml0ZWNvdW50X2xvY2spOworCW10ZF9pbmRleCA9IHNpbXBsZV9zdHJ0b3VsKG10ZGRldiwgJmVuZHAsIDApOworCWlmICgqZW5kcCA9PSAnXDAnKQorCQljeHQtPm10ZF9pbmRleCA9IG10ZF9pbmRleDsKKwlpZiAoY3h0LT5tdGRfaW5kZXggPiBNQVhfTVREX0RFVklDRVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBpbnZhbGlkIG10ZCBkZXZpY2UgbnVtYmVyICgldSkgZ2l2ZW5cbiIsCisJCQkJbXRkX2luZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCisJY3h0LT5vb3BzX2J1ZiA9IHZtYWxsb2MocmVjb3JkX3NpemUpOwogCWlmICghY3h0LT5vb3BzX2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBtdGRvb3BzIGJ1ZmZlciB3b3Jrc3BhY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgd29ya3NwYWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW1lbXNldChjeHQtPm9vcHNfYnVmLCAweGZmLCByZWNvcmRfc2l6ZSk7CiAKIAlJTklUX1dPUksoJmN4dC0+d29ya19lcmFzZSwgbXRkb29wc193b3JrZnVuY19lcmFzZSk7CiAJSU5JVF9XT1JLKCZjeHQtPndvcmtfd3JpdGUsIG10ZG9vcHNfd29ya2Z1bmNfd3JpdGUpOwogCi0JcmVnaXN0ZXJfY29uc29sZSgmbXRkb29wc19jb25zb2xlKTsKIAlyZWdpc3Rlcl9tdGRfdXNlcigmbXRkb29wc19ub3RpZmllcik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBtdGRvb3BzX2NvbnNvbGVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG10ZG9vcHNfZXhpdCh2b2lkKQogewogCXN0cnVjdCBtdGRvb3BzX2NvbnRleHQgKmN4dCA9ICZvb3BzX2N4dDsKIAogCXVucmVnaXN0ZXJfbXRkX3VzZXIoJm10ZG9vcHNfbm90aWZpZXIpOwotCXVucmVnaXN0ZXJfY29uc29sZSgmbXRkb29wc19jb25zb2xlKTsKLQlrZnJlZShjeHQtPm5hbWUpOwogCXZmcmVlKGN4dC0+b29wc19idWYpOworCXZmcmVlKGN4dC0+b29wc19wYWdlX3VzZWQpOwogfQogCiAKLXN1YnN5c19pbml0Y2FsbChtdGRvb3BzX2NvbnNvbGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChtdGRvb3BzX2NvbnNvbGVfZXhpdCk7Cittb2R1bGVfaW5pdChtdGRvb3BzX2luaXQpOworbW9kdWxlX2V4aXQobXRkb29wc19leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggMGUzNWUxYS4uNjc3Y2Q1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtMjAxLDYgKzIwMSwyMiBAQAogCSAgd2hlbiB0aGUgaXMgTkFORCBjaGlwIHNlbGVjdGVkIG9yIHJlbGVhc2VkLCBidXQgd2lsbCBzYXZlCiAJICBhcHByb3hpbWF0ZWx5IDVtQSBvZiBwb3dlciB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgaGFwcGVuaW5nLgogCitjb25maWcgTVREX05BTkRfQkNNX1VNSQorCXRyaXN0YXRlICJOQU5EIEZsYXNoIHN1cHBvcnQgZm9yIEJDTSBSZWZlcmVuY2UgQm9hcmRzIgorCWRlcGVuZHMgb24gQVJDSF9CQ01SSU5HICYmIE1URF9OQU5ECisJaGVscAorCSAgVGhpcyBlbmFibGVzIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24gdGhlIEJDTSBVTUkgYmxvY2suCisKKwkgIE5vIGJvYXJkIHNwZWNmaWMgc3VwcG9ydCBpcyBkb25lIGJ5IHRoaXMgZHJpdmVyLCBlYWNoIGJvYXJkCisJICBtdXN0IGFkdmVydGlzZSBhIHBsYXRmb3JtX2RldmljZSBmb3IgdGhlIGRyaXZlciB0byBhdHRhY2guCisKK2NvbmZpZyBNVERfTkFORF9CQ01fVU1JX0hXQ1MKKwlib29sICJCQ00gVU1JIE5BTkQgSGFyZHdhcmUgQ1MiCisJZGVwZW5kcyBvbiBNVERfTkFORF9CQ01fVU1JCisJaGVscAorCSAgRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIEJDTSBVTUkgYmxvY2sncyBpbnRlcm5hbCBDUyB1c2luZyBOQU5ELgorCSAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBrbm93IHRoZSBleHRlcm5hbCBOQU5EIENTIGNhbiB0b2dnbGUuCisKIGNvbmZpZyBNVERfTkFORF9ESVNLT05DSElQCiAJdHJpc3RhdGUgIkRpc2tPbkNoaXAgMjAwMCwgTWlsbGVubml1bSBhbmQgTWlsbGVubml1bSBQbHVzIChOQU5EIHJlaW1wbGVtZW50YXRpb24pIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCkBAIC0yNzUsMTQgKzI5MSw2IEBACiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggb24gU2hhcnAgU0wgU2VyaWVzIChDN3h4ICsgb3RoZXJzKSIKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBCiAKLWNvbmZpZyBNVERfTkFORF9CQVNMRVJfRVhDSVRFCi0JdHJpc3RhdGUgICJTdXBwb3J0IGZvciBOQU5EIEZsYXNoIG9uIEJhc2xlciBlWGNpdGUiCi0JZGVwZW5kcyBvbiBCQVNMRVJfRVhDSVRFCi0JaGVscAotICAgICAgICAgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBkZXZpY2UgZm91bmQgb24gdGhlCi0gICAgICAgICAgQmFzbGVyIGVYY2l0ZSBTbWFydCBDYW1lcmEuIElmIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgZHJpdmVyCi0gICAgICAgICAgd2lsbCBiZSBuYW1lZCBleGNpdGVfbmFuZGZsYXNoLgotCiBjb25maWcgTVREX05BTkRfQ0FGRQogCXRyaXN0YXRlICJOQU5EIHN1cHBvcnQgZm9yIE9MUEMgQ0FGw4kgY2hpcCIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKaW5kZXggNjk1MGQzZC4uMTQwN2JkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCkBAIC0yNyw3ICsyNyw2IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfR1BJTykJCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX01URF9OQU5EX09NQVAyKSAJCSs9IG9tYXAyLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9DTV9YMjcwKQkJKz0gY214MjcwX25hbmQubwotb2JqLSQoQ09ORklHX01URF9OQU5EX0JBU0xFUl9FWENJVEUpCSs9IGV4Y2l0ZV9uYW5kZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1BYQTN4eCkJCSs9IHB4YTN4eF9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9UTUlPKQkJKz0gdG1pb19uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9QTEFURk9STSkJCSs9IHBsYXRfbmFuZC5vCkBAIC00Miw1ICs0MSw2IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfVFhYOU5ERk1DKQkrPSB0eHg5bmRmbWMubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1c5MFA5MTApCQkrPSB3OTBwOTEwX25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX05PTUFESUspCQkrPSBub21hZGlrX25hbmQubworb2JqLSQoQ09ORklHX01URF9OQU5EX0JDTV9VTUkpCQkrPSBiY21fdW1pX25hbmQubyBuYW5kX2JjbV91bWkubwogCiBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMKaW5kZXggNmQ5NjQ5MS4uMmQ2NzczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jCkBAIC0zNzIsMTUgKzM3Miw2IEBACiAJcmV0dXJuIF9fYWxhdWRhX3JlYWRfcGFnZShtdGQsIGZyb20sIGlnbm9yZV9idWYsIG9vYik7CiB9CiAKLXN0YXRpYyBpbnQgcG9wY291bnQ4KHU4IGMpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlmb3IgKCA7IGM7IGM+Pj0xKQotCQlyZXQgKz0gYyAmIDE7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBhbGF1ZGFfaXNiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCiB7CiAJdTggb29iWzE2XTsKQEAgLTM5MSw3ICszODIsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogQSBibG9jayBpcyBtYXJrZWQgYmFkIGlmIHR3byBvciBtb3JlIGJpdHMgYXJlIHplcm8gKi8KLQlyZXR1cm4gcG9wY291bnQ4KG9vYls1XSkgPj0gNyA/IDAgOiAxOworCXJldHVybiBod2VpZ2h0OChvb2JbNV0pID49IDcgPyAwIDogMTsKIH0KIAogc3RhdGljIGludCBhbGF1ZGFfYm91bmNlX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwppbmRleCBmOGU5OTc1Li41MjRlNmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMTkyLDcgKzE5Miw2IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBhdG1lbF9uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7Ci0JdWludDMyX3QgKmVjY3BvcyA9IG5hbmRfY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCXVuc2lnbmVkIGludCBlY2NfdmFsdWU7CiAKIAkvKiBnZXQgdGhlIGZpcnN0IDIgRUNDIGJ5dGVzICovCkBAIC00NjQsNyArNDYzLDcgQEAKIAlpZiAoaG9zdC0+Ym9hcmQtPmRldF9waW4pIHsKIAkJaWYgKGdwaW9fZ2V0X3ZhbHVlKGhvc3QtPmJvYXJkLT5kZXRfcGluKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gU21hcnRNZWRpYSBjYXJkIGluc2VydGVkLlxuIik7Ci0JCQlyZXMgPSBFTlhJTzsKKwkJCXJlcyA9IC1FTlhJTzsKIAkJCWdvdG8gZXJyX25vX2NhcmQ7CiAJCX0KIAl9CkBAIC01MzUsNyArNTM0LDcgQEAKIAogCWlmICgoIXBhcnRpdGlvbnMpIHx8IChudW1fcGFydGl0aW9ucyA9PSAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsX25hbmQ6IE5vIHBhcnRpdGlvbnMgZGVmaW5lZCwgb3IgdW5zdXBwb3J0ZWQgZGV2aWNlLlxuIik7Ci0JCXJlcyA9IEVOWElPOworCQlyZXMgPSAtRU5YSU87CiAJCWdvdG8gZXJyX25vX3BhcnRpdGlvbnM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfYmNoLmMgYi9kcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfYmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzMDY2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYmNtX3VtaV9iY2guYwpAQCAtMCwwICsxLDIxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlICJuYW5kX2JjbV91bWkuaCIKKworLyogLS0tLSBFeHRlcm5hbCBWYXJpYWJsZSBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gRXh0ZXJuYWwgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgYmNtX3VtaV9iY2hfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpOworc3RhdGljIHZvaWQgYmNtX3VtaV9iY2hfd3JpdGVfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1aW50OF90ICpidWYpOworCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorKiogbmFuZF9od19lY2Nvb2IKKyoqIE5ldyBvb2IgcGxhY2VtZW50IGJsb2NrIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBlY2MgZ2VuZXJhdGlvbi4KKyovCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfaHdfZWNjb29iXzUxMiA9IHsKKwkvKiBSZXNlcnZlIDUgZm9yIEJJIGluZGljYXRvciAqLworCS5vb2JmcmVlID0geworI2lmIChOQU5EX0VDQ19OVU1fQllURVMgPiAzKQorCQkgICAgey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gMn0KKyNlbHNlCisJCSAgICB7Lm9mZnNldCA9IDAsIC5sZW5ndGggPSA1fSwKKwkJICAgIHsub2Zmc2V0ID0gNiwgLmxlbmd0aCA9IDd9CisjZW5kaWYKKwkJICAgIH0KK307CisKKy8qCisqKiBXZSB0cmVhdCB0aGUgT09CIGZvciBhIDJLIHBhZ2UgYXMgaWYgaXQgd2VyZSA0IDUxMiBieXRlIG9vYnMsCisqKiBleGNlcHQgdGhlIEJJIGlzIGF0IGJ5dGUgMC4KKyovCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfaHdfZWNjb29iXzIwNDggPSB7CisJLyogUmVzZXJ2ZSAwIGFzIEJJIGluZGljYXRvciAqLworCS5vb2JmcmVlID0geworI2lmIChOQU5EX0VDQ19OVU1fQllURVMgPiAxMCkKKwkJICAgIHsub2Zmc2V0ID0gMSwgLmxlbmd0aCA9IDJ9LAorI2VsaWYgKE5BTkRfRUNDX05VTV9CWVRFUyA+IDcpCisJCSAgICB7Lm9mZnNldCA9IDEsIC5sZW5ndGggPSA1fSwKKwkJICAgIHsub2Zmc2V0ID0gMTYsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gMzIsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gNDgsIC5sZW5ndGggPSA2fQorI2Vsc2UKKwkJICAgIHsub2Zmc2V0ID0gMSwgLmxlbmd0aCA9IDh9LAorCQkgICAgey5vZmZzZXQgPSAxNiwgLmxlbmd0aCA9IDl9LAorCQkgICAgey5vZmZzZXQgPSAzMiwgLmxlbmd0aCA9IDl9LAorCQkgICAgey5vZmZzZXQgPSA0OCwgLmxlbmd0aCA9IDl9CisjZW5kaWYKKwkJICAgIH0KK307CisKKy8qIFdlIHRyZWF0IHRoZSBPT0IgZm9yIGEgNEsgcGFnZSBhcyBpZiBpdCB3ZXJlIDggNTEyIGJ5dGUgb29icywKKyAqIGV4Y2VwdCB0aGUgQkkgaXMgYXQgYnl0ZSAwLiAqLworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYl80MDk2ID0geworCS8qIFJlc2VydmUgMCBhcyBCSSBpbmRpY2F0b3IgKi8KKwkub29iZnJlZSA9IHsKKyNpZiAoTkFORF9FQ0NfTlVNX0JZVEVTID4gMTApCisJCSAgICB7Lm9mZnNldCA9IDEsIC5sZW5ndGggPSAyfSwKKwkJICAgIHsub2Zmc2V0ID0gMTYsIC5sZW5ndGggPSAzfSwKKwkJICAgIHsub2Zmc2V0ID0gMzIsIC5sZW5ndGggPSAzfSwKKwkJICAgIHsub2Zmc2V0ID0gNDgsIC5sZW5ndGggPSAzfSwKKwkJICAgIHsub2Zmc2V0ID0gNjQsIC5sZW5ndGggPSAzfSwKKwkJICAgIHsub2Zmc2V0ID0gODAsIC5sZW5ndGggPSAzfSwKKwkJICAgIHsub2Zmc2V0ID0gOTYsIC5sZW5ndGggPSAzfSwKKwkJICAgIHsub2Zmc2V0ID0gMTEyLCAubGVuZ3RoID0gM30KKyNlbHNlCisJCSAgICB7Lm9mZnNldCA9IDEsIC5sZW5ndGggPSA1fSwKKwkJICAgIHsub2Zmc2V0ID0gMTYsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gMzIsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gNDgsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gNjQsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gODAsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gOTYsIC5sZW5ndGggPSA2fSwKKwkJICAgIHsub2Zmc2V0ID0gMTEyLCAubGVuZ3RoID0gNn0KKyNlbmRpZgorCQkgICAgfQorfTsKKworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qID09PT0gUHVibGljIEZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBiY21fdW1pX2JjaF9yZWFkX3BhZ2VfaHdlY2MgLSBoYXJkd2FyZSBlY2MgYmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uCisqICBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyogIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyogIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgYmNtX3VtaV9iY2hfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCSAgICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICogYnVmLAorCQkJCQkJIGludCBwYWdlKQoreworCWludCBzZWN0b3JJZHggPSAwOworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKmRhdGFwID0gYnVmOworCXVpbnQ4X3QgZWNjQ2FsY1tOQU5EX0VDQ19OVU1fQllURVNdOworCWludCBzZWN0b3JPb2JTaXplID0gbXRkLT5vb2JzaXplIC8gZWNjc3RlcHM7CisJaW50IHN0YXQ7CisKKwlmb3IgKHNlY3RvcklkeCA9IDA7IHNlY3RvcklkeCA8IGVjY3N0ZXBzOworCQkJc2VjdG9ySWR4KyssIGRhdGFwICs9IGVjY3NpemUpIHsKKwkJaWYgKHNlY3RvcklkeCA+IDApIHsKKwkJCS8qIFNlZWsgdG8gcGFnZSBsb2NhdGlvbiB3aXRoaW4gc2VjdG9yICovCisJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUk5ET1VULCBzZWN0b3JJZHggKiBlY2NzaXplLAorCQkJCSAgICAgIC0xKTsKKwkJfQorCisJCS8qIEVuYWJsZSBoYXJkd2FyZSBFQ0MgYmVmb3JlIHJlYWRpbmcgdGhlIGJ1ZiAqLworCQluYW5kX2JjbV91bWlfYmNoX2VuYWJsZV9yZWFkX2h3ZWNjKCk7CisKKwkJLyogUmVhZCBpbiBkYXRhICovCisJCWJjbV91bWlfbmFuZF9yZWFkX2J1ZihtdGQsIGRhdGFwLCBlY2NzaXplKTsKKworCQkvKiBQYXVzZSBoYXJkd2FyZSBFQ0MgYWZ0ZXIgcmVhZGluZyB0aGUgYnVmICovCisJCW5hbmRfYmNtX3VtaV9iY2hfcGF1c2VfcmVhZF9lY2NfY2FsYygpOworCisJCS8qIFJlYWQgdGhlIE9PQiBFQ0MgKi8KKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JORE9VVCwKKwkJCSAgICAgIG10ZC0+d3JpdGVzaXplICsgc2VjdG9ySWR4ICogc2VjdG9yT29iU2l6ZSwgLTEpOworCQluYW5kX2JjbV91bWlfYmNoX3JlYWRfb29iRWNjKG10ZC0+d3JpdGVzaXplLCBlY2NDYWxjLAorCQkJCQkgICAgIE5BTkRfRUNDX05VTV9CWVRFUywKKwkJCQkJICAgICBjaGlwLT5vb2JfcG9pICsKKwkJCQkJICAgICBzZWN0b3JJZHggKiBzZWN0b3JPb2JTaXplKTsKKworCQkvKiBDb3JyZWN0IGFueSBFQ0MgZGV0ZWN0ZWQgZXJyb3JzICovCisJCXN0YXQgPQorCQkgICAgbmFuZF9iY21fdW1pX2JjaF9jb3JyZWN0X3BhZ2UoZGF0YXAsIGVjY0NhbGMsCisJCQkJCQkgIE5BTkRfRUNDX05VTV9CWVRFUyk7CisKKwkJLyogVXBkYXRlIFN0YXRzICovCisJCWlmIChzdGF0IDwgMCkgeworI2lmIGRlZmluZWQoTkFORF9CQ01fVU1JX0RFQlVHKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgdW5jb3JyX2VyciBzZWN0b3JJZHg9JWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHNlY3RvcklkeCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzIGRhdGEgJTAyeCAlMDJ4ICUwMnggJTAyeCAiCisJCQkJCSAiJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgZGF0YXBbMF0sIGRhdGFwWzFdLCBkYXRhcFsyXSwgZGF0YXBbM10sCisJCQkgICAgICAgZGF0YXBbNF0sIGRhdGFwWzVdLCBkYXRhcFs2XSwgZGF0YXBbN10pOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlcyBlY2MgICUwMnggJTAyeCAlMDJ4ICUwMnggIgorCQkJCQkgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKKwkJCQkJICIlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgZWNjQ2FsY1swXSwgZWNjQ2FsY1sxXSwgZWNjQ2FsY1syXSwKKwkJCSAgICAgICBlY2NDYWxjWzNdLCBlY2NDYWxjWzRdLCBlY2NDYWxjWzVdLCBlY2NDYWxjWzZdLAorCQkJICAgICAgIGVjY0NhbGNbN10sIGVjY0NhbGNbOF0sIGVjY0NhbGNbOV0sIGVjY0NhbGNbMTBdLAorCQkJICAgICAgIGVjY0NhbGNbMTFdLCBlY2NDYWxjWzEyXSk7CisJCQlCVUcoKTsKKyNlbmRpZgorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChOQU5EX0JDTV9VTUlfREVCVUcpCisJCQlpZiAoc3RhdCA+IDApIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICIlcyAlZCBjb3JyZWN0YWJsZV9lcnJvcnMgZGV0ZWN0ZWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBzdGF0KTsKKwkJCX0KKyNlbmRpZgorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBiY21fdW1pX2JjaF93cml0ZV9wYWdlX2h3ZWNjIC0gaGFyZHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyogIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorKiAgQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorKiAgQGJ1ZjoJZGF0YSBidWZmZXIKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGJjbV91bWlfYmNoX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBzZWN0b3JJZHggPSAwOworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCWNvbnN0IHVpbnQ4X3QgKmRhdGFwID0gYnVmOworCXVpbnQ4X3QgKm9vYnAgPSBjaGlwLT5vb2JfcG9pOworCWludCBzZWN0b3JPb2JTaXplID0gbXRkLT5vb2JzaXplIC8gZWNjc3RlcHM7CisKKwlmb3IgKHNlY3RvcklkeCA9IDA7IHNlY3RvcklkeCA8IGVjY3N0ZXBzOworCSAgICAgc2VjdG9ySWR4KyssIGRhdGFwICs9IGVjY3NpemUsIG9vYnAgKz0gc2VjdG9yT29iU2l6ZSkgeworCQkvKiBFbmFibGUgaGFyZHdhcmUgRUNDIGJlZm9yZSB3cml0aW5nIHRoZSBidWYgKi8KKwkJbmFuZF9iY21fdW1pX2JjaF9lbmFibGVfd3JpdGVfaHdlY2MoKTsKKwkJYmNtX3VtaV9uYW5kX3dyaXRlX2J1ZihtdGQsIGRhdGFwLCBlY2NzaXplKTsKKwkJbmFuZF9iY21fdW1pX2JjaF93cml0ZV9vb2JFY2MobXRkLT53cml0ZXNpemUsIG9vYnAsCisJCQkJCSAgICAgIE5BTkRfRUNDX05VTV9CWVRFUyk7CisJfQorCisJYmNtX3VtaV9uYW5kX3dyaXRlX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9iY21fdW1pX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdiY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9iY21fdW1pX25hbmQuYwpAQCAtMCwwICsxLDU4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPG1hY2gvcmVnX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ191bWkuaD4KKworI2luY2x1ZGUgIm5hbmRfYmNtX3VtaS5oIgorCisjaW5jbHVkZSA8bWFjaC9tZW1vcnlfc2V0dGluZ3MuaD4KKworI2RlZmluZSBVU0VfRE1BIDEKKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCisvKiAtLS0tIEV4dGVybmFsIFZhcmlhYmxlIERlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBFeHRlcm5hbCBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFByaXZhdGUgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGNvbnN0IGNoYXIgZ0Jhbm5lcltdID0gS0VSTl9JTkZPIFwKKwkiQkNNIFVNSSBNVEQgTkFORCBEcml2ZXI6IDEuMDBcbiI7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK2NvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKyNlbmRpZgorCisjaWYgTkFORF9FQ0NfQkNICitzdGF0aWMgdWludDhfdCBzY2FuX2ZmX3BhdHRlcm5bXSA9IHsgMHhmZiB9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGxhcmdlcGFnZV9iYnQgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gMCwKKwkubGVuID0gMSwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgorfTsKKyNlbmRpZgorCisvKgorKiogUHJlYWxsb2NhdGUgYSBidWZmZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIHRoaXMgZXZlcnkgZG1hIG9wZXJhdGlvbi4KKyoqIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIHByZWFsbG9jYXRlZCBjb2hlcmVudCBETUEgYnVmZmVyLgorKi8KKyNpZiBVU0VfRE1BCisjZGVmaW5lIERNQV9NSU5fQlVGTEVOCTUxMgorI2RlZmluZSBETUFfTUFYX0JVRkxFTglQQUdFX1NJWkUKKyNkZWZpbmUgVVNFX0RJUkVDVF9JTyhsZW4pCSgoKGxlbikgPCBETUFfTUlOX0JVRkxFTikgfHwgXAorCSgobGVuKSA+IERNQV9NQVhfQlVGTEVOKSkKKworLyoKKyAqIFRoZSBjdXJyZW50IE5BTkQgZGF0YSBzcGFjZSBnb2VzIGZyb20gMHg4MDAwMTkwMCB0byAweDgwMDAxRkZGLAorICogd2hpY2ggaXMgb25seSAweDcwMCA9IDE3OTIgYnl0ZXMgbG9uZy4gVGhpcyBpcyB0b28gc21hbGwgZm9yIDJLLCA0SyBwYWdlCisgKiBzaXplIE5BTkQgZmxhc2guIE5lZWQgdG8gYnJlYWsgdGhlIERNQSBkb3duIHRvIG11bHRpcGxlIDFLcy4KKyAqCisgKiBOZWVkIHRvIG1ha2Ugc3VyZSBSRUdfTkFORF9EQVRBX1BBRERSICsgRE1BX01BWF9MRU4gPCAweDgwMDAyMDAwCisgKi8KKyNkZWZpbmUgRE1BX01BWF9MRU4gICAgICAgICAgICAgMTAyNAorCisjZWxzZSAvKiAhVVNFX0RNQSAqLworI2RlZmluZSBETUFfTUlOX0JVRkxFTiAgICAgICAgICAwCisjZGVmaW5lIERNQV9NQVhfQlVGTEVOICAgICAgICAgIDAKKyNkZWZpbmUgVVNFX0RJUkVDVF9JTyhsZW4pICAgICAgMQorI2VuZGlmCisvKiAtLS0tIFByaXZhdGUgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHZvaWQgYmNtX3VtaV9uYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKiBidWYsIGludCBsZW4pOworc3RhdGljIHZvaWQgYmNtX3VtaV9uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICogYnVmLAorCQkJCSAgIGludCBsZW4pOworCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYm9hcmRfbXRkOworc3RhdGljIHZvaWQgX19pb21lbSAqYmNtX3VtaV9pb19iYXNlOworc3RhdGljIHZvaWQgKnZpcnRQdHI7CitzdGF0aWMgZG1hX2FkZHJfdCBwaHlzUHRyOworc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIG5hbmRfY29tcDsKKworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBOQU5EX0VDQ19CQ0gKKyNpbmNsdWRlICJiY21fdW1pX2JjaC5jIgorI2Vsc2UKKyNpbmNsdWRlICJiY21fdW1pX2hhbW1pbmcuYyIKKyNlbmRpZgorCisjaWYgVVNFX0RNQQorCisvKiBIYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBETUEgZmluaXNoZXMuICovCitzdGF0aWMgdm9pZCBuYW5kX2RtYV9oYW5kbGVyKERNQV9EZXZpY2VfdCBkZXYsIGludCByZWFzb24sIHZvaWQgKnVzZXJEYXRhKQoreworCWNvbXBsZXRlKCZuYW5kX2NvbXApOworfQorCitzdGF0aWMgaW50IG5hbmRfZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGRtYV9zZXRfZGV2aWNlX2hhbmRsZXIoRE1BX0RFVklDRV9OQU5EX01FTV9UT19NRU0sCisJCW5hbmRfZG1hX2hhbmRsZXIsIE5VTEwpOworCWlmIChyYyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hX3NldF9kZXZpY2VfaGFuZGxlciBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwl2aXJ0UHRyID0KKwkgICAgZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIERNQV9NQVhfQlVGTEVOLCAmcGh5c1B0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKHZpcnRQdHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5BTkQgLSBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBETUEgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfZG1hX3Rlcm0odm9pZCkKK3sKKwlpZiAodmlydFB0ciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBETUFfTUFYX0JVRkxFTiwgdmlydFB0ciwgcGh5c1B0cik7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfZG1hX3JlYWQodm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWludCBvZmZzZXQgPSAwOworCWludCB0bXBfbGVuID0gMDsKKwlpbnQgbGVuX2xlZnQgPSBsZW47CisJRE1BX0hhbmRsZV90IGhuZGw7CisKKwlpZiAodmlydFB0ciA9PSBOVUxMKQorCQlwYW5pYygibmFuZF9kbWFfcmVhZDogdmlydFB0ciA9PSBOVUxMXG4iKTsKKworCWlmICgodm9pZCAqKXBoeXNQdHIgPT0gTlVMTCkKKwkJcGFuaWMoIm5hbmRfZG1hX3JlYWQ6IHBoeXNQdHIgPT0gTlVMTFxuIik7CisKKwlobmRsID0gZG1hX3JlcXVlc3RfY2hhbm5lbChETUFfREVWSUNFX05BTkRfTUVNX1RPX01FTSk7CisJaWYgKGhuZGwgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm5hbmRfZG1hX3JlYWQ6IHVuYWJsZSB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbDogJWRcbiIsCisJCSAgICAgICAoaW50KWhuZGwpOworCQlwYW5pYygiXG4iKTsKKwl9CisKKwl3aGlsZSAobGVuX2xlZnQgPiAwKSB7CisJCWlmIChsZW5fbGVmdCA+IERNQV9NQVhfTEVOKSB7CisJCQl0bXBfbGVuID0gRE1BX01BWF9MRU47CisJCQlsZW5fbGVmdCAtPSBETUFfTUFYX0xFTjsKKwkJfSBlbHNlIHsKKwkJCXRtcF9sZW4gPSBsZW5fbGVmdDsKKwkJCWxlbl9sZWZ0ID0gMDsKKwkJfQorCisJCWluaXRfY29tcGxldGlvbigmbmFuZF9jb21wKTsKKwkJZG1hX3RyYW5zZmVyX21lbV90b19tZW0oaG5kbCwgUkVHX05BTkRfREFUQV9QQUREUiwKKwkJCQkJcGh5c1B0ciArIG9mZnNldCwgdG1wX2xlbik7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm5hbmRfY29tcCk7CisKKwkJb2Zmc2V0ICs9IHRtcF9sZW47CisJfQorCisJZG1hX2ZyZWVfY2hhbm5lbChobmRsKTsKKworCWlmIChidWYgIT0gTlVMTCkKKwkJbWVtY3B5KGJ1ZiwgdmlydFB0ciwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgbmFuZF9kbWFfd3JpdGUoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWludCBvZmZzZXQgPSAwOworCWludCB0bXBfbGVuID0gMDsKKwlpbnQgbGVuX2xlZnQgPSBsZW47CisJRE1BX0hhbmRsZV90IGhuZGw7CisKKwlpZiAoYnVmID09IE5VTEwpCisJCXBhbmljKCJuYW5kX2RtYV93cml0ZTogYnVmID09IE5VTExcbiIpOworCisJaWYgKHZpcnRQdHIgPT0gTlVMTCkKKwkJcGFuaWMoIm5hbmRfZG1hX3dyaXRlOiB2aXJ0UHRyID09IE5VTExcbiIpOworCisJaWYgKCh2b2lkICopcGh5c1B0ciA9PSBOVUxMKQorCQlwYW5pYygibmFuZF9kbWFfd3JpdGU6IHBoeXNQdHIgPT0gTlVMTFxuIik7CisKKwltZW1jcHkodmlydFB0ciwgYnVmLCBsZW4pOworCisKKwlobmRsID0gZG1hX3JlcXVlc3RfY2hhbm5lbChETUFfREVWSUNFX05BTkRfTUVNX1RPX01FTSk7CisJaWYgKGhuZGwgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm5hbmRfZG1hX3dyaXRlOiB1bmFibGUgdG8gYWxsb2NhdGUgZG1hIGNoYW5uZWw6ICVkXG4iLAorCQkgICAgICAgKGludClobmRsKTsKKwkJcGFuaWMoIlxuIik7CisJfQorCisJd2hpbGUgKGxlbl9sZWZ0ID4gMCkgeworCQlpZiAobGVuX2xlZnQgPiBETUFfTUFYX0xFTikgeworCQkJdG1wX2xlbiA9IERNQV9NQVhfTEVOOworCQkJbGVuX2xlZnQgLT0gRE1BX01BWF9MRU47CisJCX0gZWxzZSB7CisJCQl0bXBfbGVuID0gbGVuX2xlZnQ7CisJCQlsZW5fbGVmdCA9IDA7CisJCX0KKworCQlpbml0X2NvbXBsZXRpb24oJm5hbmRfY29tcCk7CisJCWRtYV90cmFuc2Zlcl9tZW1fdG9fbWVtKGhuZGwsIHBoeXNQdHIgKyBvZmZzZXQsCisJCQkJCVJFR19OQU5EX0RBVEFfUEFERFIsIHRtcF9sZW4pOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZuYW5kX2NvbXApOworCisJCW9mZnNldCArPSB0bXBfbGVuOworCX0KKworCWRtYV9mcmVlX2NoYW5uZWwoaG5kbCk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBuYW5kX2JjbV91bWlfZGV2X3JlYWR5KCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBiY21fdW1pX25hbmRfaW5pdGh3CisqCisqICAgVGhpcyByb3V0aW5lIGRvZXMgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSAoYm9hcmQtc3BlY2lmaWMpCisqICAgaW5pdGlhbGl6YXRpb25zLiAgVGhpcyBpbmNsdWRlcyBzZXR0aW5nIHVwIHRoZSB0aW1pbmdzLCBldGMuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYmNtX3VtaV9uYW5kX2luaXRodyh2b2lkKQoreworCS8qIENvbmZpZ3VyZSBuYW5kIHRpbWluZyBwYXJhbWV0ZXJzICovCisJUkVHX1VNSV9OQU5EX1RDUiAmPSB+MHg3ZmZmZjsKKwlSRUdfVU1JX05BTkRfVENSIHw9IEhXX0NGR19OQU5EX1RDUjsKKworI2lmICFkZWZpbmVkKENPTkZJR19NVERfTkFORF9CQ01fVU1JX0hXQ1MpCisJLyogZW5hYmxlIHNvZnR3YXJlIGNvbnRyb2wgb2YgQ1MgKi8KKwlSRUdfVU1JX05BTkRfVENSIHw9IFJFR19VTUlfTkFORF9UQ1JfQ1NfU1dDVFJMOworI2VuZGlmCisKKwkvKiBrZWVwIE5BTkQgY2hpcCBzZWxlY3QgYXNzZXJ0ZWQgKi8KKwlSRUdfVU1JX05BTkRfUkNTUiB8PSBSRUdfVU1JX05BTkRfUkNTUl9DU19BU1NFUlRFRDsKKworCVJFR19VTUlfTkFORF9UQ1IgJj0gflJFR19VTUlfTkFORF9UQ1JfV09SRDE2OworCS8qIGVuYWJsZSB3cml0ZXMgdG8gZmxhc2ggKi8KKwlSRUdfVU1JX01NRF9JQ1IgfD0gUkVHX1VNSV9NTURfSUNSX0ZMQVNIX1dQOworCisJd3JpdGVsKE5BTkRfQ01EX1JFU0VULCBiY21fdW1pX2lvX2Jhc2UgKyBSRUdfTkFORF9DTURfT0ZGU0VUKTsKKwluYW5kX2JjbV91bWlfd2FpdF90aWxsX3JlYWR5KCk7CisKKyNpZiBOQU5EX0VDQ19CQ0gKKwluYW5kX2JjbV91bWlfYmNoX2NvbmZpZ19lY2MoTkFORF9FQ0NfTlVNX0JZVEVTKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qIFVzZWQgdG8gdHVybiBsYXRjaCB0aGUgcHJvcGVyIHJlZ2lzdGVyIGZvciBhY2Nlc3MuICovCitzdGF0aWMgdm9pZCBiY21fdW1pX25hbmRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGludCBjdHJsKQoreworCS8qIHNlbmQgY29tbWFuZCB0byBoYXJkd2FyZSAqLworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCWlmIChjdHJsICYgTkFORF9DTEUpIHsKKwkJCWNoaXAtPklPX0FERFJfVyA9IGJjbV91bWlfaW9fYmFzZSArIFJFR19OQU5EX0NNRF9PRkZTRVQ7CisJCQlnb3RvIENNRDsKKwkJfQorCQlpZiAoY3RybCAmIE5BTkRfQUxFKSB7CisJCQljaGlwLT5JT19BRERSX1cgPQorCQkJICAgIGJjbV91bWlfaW9fYmFzZSArIFJFR19OQU5EX0FERFJfT0ZGU0VUOworCQkJZ290byBDTUQ7CisJCX0KKwkJY2hpcC0+SU9fQUREUl9XID0gYmNtX3VtaV9pb19iYXNlICsgUkVHX05BTkRfREFUQThfT0ZGU0VUOworCX0KKworQ01EOgorCS8qIFNlbmQgY29tbWFuZCB0byBjaGlwIGRpcmVjdGx5ICovCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOworfQorCitzdGF0aWMgdm9pZCBiY21fdW1pX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKiBidWYsCisJCQkJICAgaW50IGxlbikKK3sKKwlpZiAoVVNFX0RJUkVDVF9JTyhsZW4pKSB7CisJCS8qIERvIGl0IHRoZSBvbGQgd2F5IGlmIHRoZSBidWZmZXIgaXMgc21hbGwgb3IgdG9vIGxhcmdlLgorCQkgKiBQcm9iYWJseSBxdWlja2VyIHRoYW4gc3RhcnRpbmcgYW5kIGNoZWNraW5nIGRtYS4gKi8KKwkJaW50IGk7CisJCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJd3JpdGViKGJ1ZltpXSwgdGhpcy0+SU9fQUREUl9XKTsKKwl9CisjaWYgVVNFX0RNQQorCWVsc2UKKwkJbmFuZF9kbWFfd3JpdGUoYnVmLCBsZW4pOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGJjbV91bWlfbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICogYnVmLCBpbnQgbGVuKQoreworCWlmIChVU0VfRElSRUNUX0lPKGxlbikpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJYnVmW2ldID0gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKKwl9CisjaWYgVVNFX0RNQQorCWVsc2UKKwkJbmFuZF9kbWFfcmVhZChidWYsIGxlbik7CisjZW5kaWYKK30KKworc3RhdGljIHVpbnQ4X3QgcmVhZGJhY2tidWZbTkFORF9NQVhfUEFHRVNJWkVdOworc3RhdGljIGludCBiY21fdW1pX25hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICogYnVmLAorCQkJCSAgIGludCBsZW4pCit7CisJLyoKKwkgKiBUcnkgdG8gcmVhZGJhY2sgcGFnZSB3aXRoIEVDQyBjb3JyZWN0aW9uLiBUaGlzIGlzIG5lY2Vzc2FyeQorCSAqIGZvciBNTEMgcGFydHMgd2hpY2ggbWF5IGhhdmUgcGVybWFuZW50bHkgc3R1Y2sgYml0cy4KKwkgKi8KKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQgPSBjaGlwLT5lY2MucmVhZF9wYWdlKG10ZCwgY2hpcCwgcmVhZGJhY2tidWYsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKwllbHNlIHsKKwkJaWYgKG1lbWNtcChyZWFkYmFja2J1ZiwgYnVmLCBsZW4pID09IDApCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJjbV91bWlfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCBlcnIgPSAwOworCisJcHJpbnRrKGdCYW5uZXIpOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJYm9hcmRfbXRkID0KKwkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwKKwkJICAgIEdGUF9LRVJORUwpOworCWlmICghYm9hcmRfbXRkKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCWlmICghcikKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIG1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KKwliY21fdW1pX2lvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCisJaWYgKCFiY21fdW1pX2lvX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb3JlbWFwIHRvIGFjY2VzcyBCQ00gVU1JIE5BTkQgY2hpcCBmYWlsZWRcbiIpOworCQlrZnJlZShib2FyZF9tdGQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJmJvYXJkX210ZFsxXSk7CisKKwkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQoKGNoYXIgKilib2FyZF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQoKGNoYXIgKil0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCisJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KKwlib2FyZF9tdGQtPnByaXYgPSB0aGlzOworCisJLyogSW5pdGlhbGl6ZSB0aGUgTkFORCBoYXJkd2FyZS4gICovCisJaWYgKGJjbV91bWlfbmFuZF9pbml0aHcoKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJCQ00gVU1JIE5BTkQgY2hpcCBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOworCQlpb3VubWFwKGJjbV91bWlfaW9fYmFzZSk7CisJCWtmcmVlKGJvYXJkX210ZCk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8KKwl0aGlzLT5JT19BRERSX1cgPSBiY21fdW1pX2lvX2Jhc2UgKyBSRUdfTkFORF9EQVRBOF9PRkZTRVQ7CisJdGhpcy0+SU9fQUREUl9SID0gYmNtX3VtaV9pb19iYXNlICsgUkVHX05BTkRfREFUQThfT0ZGU0VUOworCisJLyogU2V0IGNvbW1hbmQgZGVsYXkgdGltZSwgc2VlIGRhdGFzaGVldCBmb3IgY29ycmVjdCB2YWx1ZSAqLworCXRoaXMtPmNoaXBfZGVsYXkgPSAwOworCS8qIEFzc2lnbiB0aGUgZGV2aWNlIHJlYWR5IGZ1bmN0aW9uLCBpZiBhdmFpbGFibGUgKi8KKwl0aGlzLT5kZXZfcmVhZHkgPSBuYW5kX2Rldl9yZWFkeTsKKwl0aGlzLT5vcHRpb25zID0gMDsKKworCXRoaXMtPndyaXRlX2J1ZiA9IGJjbV91bWlfbmFuZF93cml0ZV9idWY7CisJdGhpcy0+cmVhZF9idWYgPSBiY21fdW1pX25hbmRfcmVhZF9idWY7CisJdGhpcy0+dmVyaWZ5X2J1ZiA9IGJjbV91bWlfbmFuZF92ZXJpZnlfYnVmOworCisJdGhpcy0+Y21kX2N0cmwgPSBiY21fdW1pX25hbmRfaHdjb250cm9sOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CisJdGhpcy0+ZWNjLnNpemUgPSA1MTI7CisJdGhpcy0+ZWNjLmJ5dGVzID0gTkFORF9FQ0NfTlVNX0JZVEVTOworI2lmIE5BTkRfRUNDX0JDSAorCXRoaXMtPmVjYy5yZWFkX3BhZ2UgPSBiY21fdW1pX2JjaF9yZWFkX3BhZ2VfaHdlY2M7CisJdGhpcy0+ZWNjLndyaXRlX3BhZ2UgPSBiY21fdW1pX2JjaF93cml0ZV9wYWdlX2h3ZWNjOworI2Vsc2UKKwl0aGlzLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhNTEyOworCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBiY21fdW1pX2hhbW1pbmdfZ2V0X2h3X2VjYzsKKwl0aGlzLT5lY2MuaHdjdGwgPSBiY21fdW1pX2hhbW1pbmdfZW5hYmxlX2h3ZWNjOworI2VuZGlmCisKKyNpZiBVU0VfRE1BCisJZXJyID0gbmFuZF9kbWFfaW5pdCgpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKKyNlbmRpZgorCisJLyogRmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgZGV2aWNlIHRoYXQgd2UgaGF2ZS4KKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgdG8gZmlndXJlIG91dCB3aGljaCBFQ0MKKwkgKiBsYXlvdXQgd2UnbGwgYmUgdXNpbmcuCisJICovCisKKwllcnIgPSBuYW5kX3NjYW5faWRlbnQoYm9hcmRfbXRkLCAxKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF9zY2FuIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWlvdW5tYXAoYmNtX3VtaV9pb19iYXNlKTsKKwkJa2ZyZWUoYm9hcmRfbXRkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBOb3cgdGhhdCB3ZSBrbm93IHRoZSBuYW5kIHNpemUsIHdlIGNhbiBzZXR1cCB0aGUgRUNDIGxheW91dCAqLworCisJc3dpdGNoIChib2FyZF9tdGQtPndyaXRlc2l6ZSkgewkvKiB3cml0ZXNpemUgaXMgdGhlIHBhZ2VzaXplICovCisJY2FzZSA0MDk2OgorCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzQwOTY7CisJCWJyZWFrOworCWNhc2UgMjA0ODoKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl8yMDQ4OworCQlicmVhazsKKwljYXNlIDUxMjoKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl81MTI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXsKKwkJCXByaW50ayhLRVJOX0VSUiAiTkFORCAtIFVucmVjb2duaXplZCBwYWdlc2l6ZTogJWRcbiIsCisJCQkJCSBib2FyZF9tdGQtPndyaXRlc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworI2lmIE5BTkRfRUNDX0JDSAorCWlmIChib2FyZF9tdGQtPndyaXRlc2l6ZSA+IDUxMikgeworCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkKKwkJCWxhcmdlcGFnZV9iYnQub3B0aW9ucyA9IE5BTkRfQkJUX1NDQU4yTkRQQUdFOworCQl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gJmxhcmdlcGFnZV9iYnQ7CisJfQorI2VuZGlmCisKKwkvKiBOb3cgZmluaXNoIG9mZiB0aGUgc2Nhbiwgbm93IHRoYXQgZWNjLmxheW91dCBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8KKworCWVyciA9IG5hbmRfc2Nhbl90YWlsKGJvYXJkX210ZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfc2NhbiBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlpb3VubWFwKGJjbV91bWlfaW9fYmFzZSk7CisJCWtmcmVlKGJvYXJkX210ZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKwl7CisJCWludCBucl9wYXJ0aXRpb25zOworCQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydGl0aW9uX2luZm87CisKKwkJYm9hcmRfbXRkLT5uYW1lID0gImJjbV91bWktbmFuZCI7CisJCW5yX3BhcnRpdGlvbnMgPQorCQkgICAgcGFyc2VfbXRkX3BhcnRpdGlvbnMoYm9hcmRfbXRkLCBwYXJ0X3Byb2JlcywKKwkJCQkJICZwYXJ0aXRpb25faW5mbywgMCk7CisKKwkJaWYgKG5yX3BhcnRpdGlvbnMgPD0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJCQ00gVU1JIE5BTkQ6IFRvbyBmZXcgcGFydGl0aW9ucyAtICVkXG4iLAorCQkJICAgICAgIG5yX3BhcnRpdGlvbnMpOworCQkJaW91bm1hcChiY21fdW1pX2lvX2Jhc2UpOworCQkJa2ZyZWUoYm9hcmRfbXRkKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWFkZF9tdGRfcGFydGl0aW9ucyhib2FyZF9tdGQsIHBhcnRpdGlvbl9pbmZvLCBucl9wYXJ0aXRpb25zKTsKKwl9CisKKwkvKiBSZXR1cm4gaGFwcHkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21fdW1pX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisjaWYgVVNFX0RNQQorCW5hbmRfZG1hX3Rlcm0oKTsKKyNlbmRpZgorCisJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCisJbmFuZF9yZWxlYXNlKGJvYXJkX210ZCk7CisKKwkvKiB1bm1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KKwlpb3VubWFwKGJjbV91bWlfaW9fYmFzZSk7CisKKwkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLworCWtmcmVlKGJvYXJkX210ZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBiY21fdW1pX25hbmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlwcmludGsoS0VSTl9FUlIgIk1URCBOQU5EIHN1c3BlbmQgaXMgYmVpbmcgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21fdW1pX25hbmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICJNVEQgTkFORCByZXN1bWUgaXMgYmVpbmcgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGJjbV91bWlfbmFuZF9zdXNwZW5kICAgTlVMTAorI2RlZmluZSBiY21fdW1pX25hbmRfcmVzdW1lICAgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuYW5kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJiY20tbmFuZCIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IGJjbV91bWlfbmFuZF9wcm9iZSwKKwkucmVtb3ZlID0gYmNtX3VtaV9uYW5kX3JlbW92ZSwKKwkuc3VzcGVuZCA9IGJjbV91bWlfbmFuZF9zdXNwZW5kLAorCS5yZXN1bWUgPSBiY21fdW1pX25hbmRfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmFuZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbmFuZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5hbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobmFuZF9pbml0KTsKK21vZHVsZV9leGl0KG5hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkJyb2FkY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJDTSBVTUkgTVREIE5BTkQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2RhdmluY2lfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9kYXZpbmNpX25hbmQuYwppbmRleCBmMTNmNWI5Li5mZTNlYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2RhdmluY2lfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZGF2aW5jaV9uYW5kLmMKQEAgLTU5MSw2ICs1OTEsOCBAQAogCiAJLyogb3B0aW9ucyBzdWNoIGFzIE5BTkRfVVNFX0ZMQVNIX0JCVCBvciAxNi1iaXQgd2lkdGhzICovCiAJaW5mby0+Y2hpcC5vcHRpb25zCT0gcGRhdGEtPm9wdGlvbnM7CisJaW5mby0+Y2hpcC5iYnRfdGQJPSBwZGF0YS0+YmJ0X3RkOworCWluZm8tPmNoaXAuYmJ0X21kCT0gcGRhdGEtPmJidF9tZDsKIAogCWluZm8tPmlvYWRkcgkJPSAodWludDMyX3QgX19mb3JjZSkgdmFkZHI7CiAKQEAgLTU5OSw3ICs2MDEsNyBAQAogCWluZm8tPm1hc2tfY2hpcHNlbAk9IHBkYXRhLT5tYXNrX2NoaXBzZWw7CiAKIAkvKiB1c2UgbmFuZGJvb3QtY2FwYWJsZSBBTEUvQ0xFIG1hc2tzIGJ5IGRlZmF1bHQgKi8KLQlpbmZvLT5tYXNrX2FsZQkJPSBwZGF0YS0+bWFza19jbGUgPyA6IE1BU0tfQUxFOworCWluZm8tPm1hc2tfYWxlCQk9IHBkYXRhLT5tYXNrX2FsZSA/IDogTUFTS19BTEU7CiAJaW5mby0+bWFza19jbGUJCT0gcGRhdGEtPm1hc2tfY2xlID8gOiBNQVNLX0NMRTsKIAogCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jIGIvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNDQ2ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoKLSogIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKLSogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyLnFiYXNsZXJ3ZWIuY29tPgotKiAgT3JpZ2luYWwgY29kZSBieSBUaGllcyBNb2VsbGVyIDx0aGllcy5tb2VsbGVyQGJhc2xlcndlYi5jb20+Ci0qCi0qICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0qICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKgotKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0qICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoKLSogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+Ci0KLSNpbmNsdWRlIDxleGNpdGVfbmFuZGZsYXNoLmg+Ci0KLSNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICIwLjEiCi0KLS8qIEkvTyByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIEVYQ0lURV9OQU5ERkxBU0hfREFUQV9CWVRFICAgMHgwMAotI2RlZmluZSBFWENJVEVfTkFOREZMQVNIX1NUQVRVU19CWVRFIDB4MGMKLSNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9BRERSX0JZVEUgICAweDEwCi0jZGVmaW5lIEVYQ0lURV9OQU5ERkxBU0hfQ01EX0JZVEUgICAgMHgxNAotCi0vKiBwcmVmaXggZm9yIGRlYnVnIG91dHB1dCAqLwotc3RhdGljIGNvbnN0IGNoYXIgbW9kdWxlX2lkW10gPSAiZXhjaXRlX25hbmRmbGFzaCI7Ci0KLS8qCi0gKiBwYXJ0aXRpb24gZGVmaW5pdGlvbgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXSA9IHsKLQl7Ci0JCS5uYW1lID0gImVYY2l0ZSBSb290RlMiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCi0JfQotfTsKLQotc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKgotZXhjaXRlX25hbmRfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkgY29uc3QgY2hhciAqYmFzZW5hbWUpCi17Ci0JY2hhciBidWZbODBdOwotCi0JaWYgKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzXyV1IiwgYmFzZW5hbWUsIGQtPmlkKSA+PSBzaXplb2YgYnVmKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkLCBmbGFncywgYnVmKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotZXhjaXRlX25hbmRfbWFwX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZCwgY29uc3QgY2hhciAqYmFzZW5hbWUpCi17Ci0Jdm9pZCAqcmVzdWx0ID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmNvbnN0IHIgPQotCSAgICBleGNpdGVfbmFuZF9nZXRfcmVzb3VyY2UoZCwgSU9SRVNPVVJDRV9NRU0sIGJhc2VuYW1lKTsKLQotCWlmIChyKQotCQlyZXN1bHQgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCArIDEgLSByLT5zdGFydCk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY29udHJvbGxlciBhbmQgbXRkIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSB7Ci0Jc3RydWN0IG10ZF9pbmZvIGJvYXJkX210ZDsKLQlzdHJ1Y3QgbmFuZF9jaGlwIGJvYXJkX2NoaXA7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzOwotCXZvaWQgX19pb21lbSAqdGd0OwotfTsKLQotLyogQ29udHJvbCBmdW5jdGlvbiAqLwotc3RhdGljIHZvaWQgZXhjaXRlX25hbmRfY29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGN0cmwpCi17Ci0Jc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCBkID0KLQkgICAgY29udGFpbmVyX29mKG10ZCwgc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEsIGJvYXJkX210ZCk7Ci0KLQlzd2l0Y2ggKGN0cmwpIHsKLQljYXNlIE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX0NUUkxfQ0xFOgotCQlkLT50Z3QgPSBkLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9DTURfQllURTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUUkxfQ0hBTkdFIHwgTkFORF9DVFJMX0FMRToKLQkJZC0+dGd0ID0gZC0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfQUREUl9CWVRFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX05DRToKLQkJZC0+dGd0ID0gZC0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfREFUQV9CWVRFOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCi0JCV9fcmF3X3dyaXRlYihjbWQsIGQtPnRndCk7Ci19Ci0KLS8qIFJldHVybiAwIGlmIGZsYXNoIGlzIGJ1c3ksIDEgaWYgcmVhZHkgKi8KLXN0YXRpYyBpbnQgZXhjaXRlX25hbmRfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCBkcnZkYXRhID0KLQkgICAgY29udGFpbmVyX29mKG10ZCwgc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEsIGJvYXJkX210ZCk7Ci0KLQlyZXR1cm4gX19yYXdfcmVhZGIoZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfU1RBVFVTX0JZVEUpOwotfQotCi0vKgotICogQ2FsbGVkIGJ5IGRldmljZSBsYXllciB0byByZW1vdmUgdGhlIGRyaXZlci4KLSAqIFRoZSBiaW5kaW5nIHRvIHRoZSBtdGQgYW5kIGFsbCBhbGxvY2F0ZWQKLSAqIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuCi0gKi8KLXN0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCB0aGlzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci0KLQlpZiAodW5saWtlbHkoIXRoaXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCAlcyB3aXRob3V0IHByaXZhdGUgZGF0YSEhIiwKLQkJICAgICAgIG1vZHVsZV9pZCwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBmaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvIGlzIHJlbGVhc2Ugb3VyIG10ZAotCSAqIHRoZW4gZ28gdGhyb3VnaCBmcmVlaW5nIHRoZSByZXNvdXJjZSB1c2VkCi0JICovCi0JbmFuZF9yZWxlYXNlKCZ0aGlzLT5ib2FyZF9tdGQpOwotCi0JLyogZnJlZSB0aGUgY29tbW9uIHJlc291cmNlcyAqLwotCWlvdW5tYXAodGhpcy0+cmVncyk7Ci0Ja2ZyZWUodGhpcyk7Ci0KLQlERUJVRyhNVERfREVCVUdfTEVWRUwxLCAiJXM6IHJlbW92ZWRcbiIsIG1vZHVsZV9pZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgYnkgZGV2aWNlIGxheWVyIHdoZW4gaXQgZmluZHMgYSBkZXZpY2UgbWF0Y2hpbmcKLSAqIG9uZSBvdXIgZHJpdmVyIGNhbiBoYW5kbGUuIFRoaXMgY29kZSBjaGVja3MgdG8gc2VlIGlmCi0gKiBpdCBjYW4gYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSByZXNvdXJjZXMgdGhlbiBjYWxscyB0aGUKLSAqIG5hbmQgbGF5ZXIgdG8gbG9vayBmb3IgZGV2aWNlcy4KLSovCi1zdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICpkcnZkYXRhOwkvKiBwcml2YXRlIGRyaXZlciBkYXRhICovCi0Jc3RydWN0IG5hbmRfY2hpcCAqYm9hcmRfY2hpcDsJLyogcHJpdmF0ZSBmbGFzaCBjaGlwIGRhdGEgKi8KLQlzdHJ1Y3QgbXRkX2luZm8gKmJvYXJkX210ZDsJLyogbXRkIGluZm8gZm9yIHRoaXMgYm9hcmQgKi8KLQlpbnQgc2Nhbl9yZXM7Ci0KLQlkcnZkYXRhID0ga3phbGxvYyhzaXplb2YoKmRydmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoIWRydmRhdGEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgZHJ2ZGF0YVxuIiwKLQkJICAgICAgIG1vZHVsZV9pZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIGJpbmQgcHJpdmF0ZSBkYXRhIGludG8gZHJpdmVyICovCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgbWFwIHRoZSByZXNvdXJjZSAqLwotCWRydmRhdGEtPnJlZ3MgPQotCQlleGNpdGVfbmFuZF9tYXBfcmVncyhwZGV2LCBFWENJVEVfTkFOREZMQVNIX1JFU09VUkNFX1JFR1MpOwotCi0JaWYgKHVubGlrZWx5KCFkcnZkYXRhLT5yZWdzKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIsCi0JCSAgICAgICBtb2R1bGVfaWQpOwotCQlrZnJlZShkcnZkYXRhKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0JCi0JZHJ2ZGF0YS0+dGd0ID0gZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfREFUQV9CWVRFOwotCi0JLyogaW5pdGlhbGlzZSBvdXIgY2hpcCAqLwotCWJvYXJkX2NoaXAgPSAmZHJ2ZGF0YS0+Ym9hcmRfY2hpcDsKLQlib2FyZF9jaGlwLT5JT19BRERSX1IgPSBib2FyZF9jaGlwLT5JT19BRERSX1cgPQotCQlkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9EQVRBX0JZVEU7Ci0JYm9hcmRfY2hpcC0+Y21kX2N0cmwgPSBleGNpdGVfbmFuZF9jb250cm9sOwotCWJvYXJkX2NoaXAtPmRldl9yZWFkeSA9IGV4Y2l0ZV9uYW5kX2RldnJlYWR5OwotCWJvYXJkX2NoaXAtPmNoaXBfZGVsYXkgPSAyNTsKLQlib2FyZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0KLQkvKiBsaW5rIGNoaXAgdG8gbXRkICovCi0JYm9hcmRfbXRkID0gJmRydmRhdGEtPmJvYXJkX210ZDsKLQlib2FyZF9tdGQtPnByaXYgPSBib2FyZF9jaGlwOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMiwgIiVzOiBkZXZpY2Ugc2NhblxuIiwgbW9kdWxlX2lkKTsKLQlzY2FuX3JlcyA9IG5hbmRfc2NhbigmZHJ2ZGF0YS0+Ym9hcmRfbXRkLCAxKTsKLQotCWlmIChsaWtlbHkoIXNjYW5fcmVzKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAiJXM6IHJlZ2lzdGVyIHBhcnRpdGlvbnNcbiIsIG1vZHVsZV9pZCk7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucygmZHJ2ZGF0YS0+Ym9hcmRfbXRkLCBwYXJ0aXRpb25faW5mbywKLQkJCQkgICBBUlJBWV9TSVpFKHBhcnRpdGlvbl9pbmZvKSk7Ci0JfSBlbHNlIHsKLQkJaW91bm1hcChkcnZkYXRhLT5yZWdzKTsKLQkJa2ZyZWUoZHJ2ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZSBzY2FuIGZhaWxlZFxuIiwgbW9kdWxlX2lkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBleGNpdGVfbmFuZF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiZXhjaXRlX25hbmQiLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSBleGNpdGVfbmFuZF9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQotfTsKLQotc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfaW5pdCh2b2lkKQotewotCXByX2luZm8oIkJhc2xlciBlWGNpdGUgbmFuZCBmbGFzaCBkcml2ZXIgVmVyc2lvbiAiCi0JCUVYQ0lURV9OQU5ERkxBU0hfVkVSU0lPTiAiXG4iKTsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhjaXRlX25hbmRfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChleGNpdGVfbmFuZF9pbml0KTsKLW1vZHVsZV9leGl0KGV4Y2l0ZV9uYW5kX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQmFzbGVyIGVYY2l0ZSBOQU5ELUZsYXNoIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwppbmRleCBkZGQzN2QyLi5hZTMwZmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwpAQCAtMjM3LDEyICsyMzcsMTUgQEAKIAogCWN0cmwtPnVzZV9tZHIgPSAwOwogCi0JZGV2X3ZkYmcoY3RybC0+ZGV2LAotCSAgICAgICAgICJmc2xfZWxiY19ydW5fY29tbWFuZDogc3RhdD0lMDh4IG1kcj0lMDh4IGZtcj0lMDh4XG4iLAotCSAgICAgICAgIGN0cmwtPnN0YXR1cywgY3RybC0+bWRyLCBpbl9iZTMyKCZsYmMtPmZtcikpOworCWlmIChjdHJsLT5zdGF0dXMgIT0gTFRFU1JfQ0MpIHsKKwkJZGV2X2luZm8oY3RybC0+ZGV2LAorCQkgICAgICAgICAiY29tbWFuZCBmYWlsZWQ6IGZpciAleCBmY3IgJXggc3RhdHVzICV4IG1kciAleFxuIiwKKwkJICAgICAgICAgaW5fYmUzMigmbGJjLT5maXIpLCBpbl9iZTMyKCZsYmMtPmZjciksCisJCSAgICAgICAgIGN0cmwtPnN0YXR1cywgY3RybC0+bWRyKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCi0JLyogcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5vbi16ZXJvKSAqLwotCXJldHVybiBjdHJsLT5zdGF0dXMgPT0gTFRFU1JfQ0MgPyAwIDogLUVJTzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZnNsX2VsYmNfZG9fcmVhZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgb29iKQpAQCAtMjUzLDE3ICsyNTYsMTcgQEAKIAogCWlmIChwcml2LT5wYWdlX3NpemUpIHsKIAkJb3V0X2JlMzIoJmxiYy0+ZmlyLAotCQkgICAgICAgICAoRklSX09QX0NXMCA8PCBGSVJfT1AwX1NISUZUKSB8CisJCSAgICAgICAgIChGSVJfT1BfQ00wIDw8IEZJUl9PUDBfU0hJRlQpIHwKIAkJICAgICAgICAgKEZJUl9PUF9DQSAgPDwgRklSX09QMV9TSElGVCkgfAogCQkgICAgICAgICAoRklSX09QX1BBICA8PCBGSVJfT1AyX1NISUZUKSB8Ci0JCSAgICAgICAgIChGSVJfT1BfQ1cxIDw8IEZJUl9PUDNfU0hJRlQpIHwKKwkJICAgICAgICAgKEZJUl9PUF9DTTEgPDwgRklSX09QM19TSElGVCkgfAogCQkgICAgICAgICAoRklSX09QX1JCVyA8PCBGSVJfT1A0X1NISUZUKSk7CiAKIAkJb3V0X2JlMzIoJmxiYy0+ZmNyLCAoTkFORF9DTURfUkVBRDAgPDwgRkNSX0NNRDBfU0hJRlQpIHwKIAkJICAgICAgICAgICAgICAgICAgICAoTkFORF9DTURfUkVBRFNUQVJUIDw8IEZDUl9DTUQxX1NISUZUKSk7CiAJfSBlbHNlIHsKIAkJb3V0X2JlMzIoJmxiYy0+ZmlyLAotCQkgICAgICAgICAoRklSX09QX0NXMCA8PCBGSVJfT1AwX1NISUZUKSB8CisJCSAgICAgICAgIChGSVJfT1BfQ00wIDw8IEZJUl9PUDBfU0hJRlQpIHwKIAkJICAgICAgICAgKEZJUl9PUF9DQSAgPDwgRklSX09QMV9TSElGVCkgfAogCQkgICAgICAgICAoRklSX09QX1BBICA8PCBGSVJfT1AyX1NISUZUKSB8CiAJCSAgICAgICAgIChGSVJfT1BfUkJXIDw8IEZJUl9PUDNfU0hJRlQpKTsKQEAgLTMzMiw3ICszMzUsNyBAQAogCWNhc2UgTkFORF9DTURfUkVBRElEOgogCQlkZXZfdmRiZyhjdHJsLT5kZXYsICJmc2xfZWxiY19jbWRmdW5jOiBOQU5EX0NNRF9SRUFESUQuXG4iKTsKIAotCQlvdXRfYmUzMigmbGJjLT5maXIsIChGSVJfT1BfQ1cwIDw8IEZJUl9PUDBfU0hJRlQpIHwKKwkJb3V0X2JlMzIoJmxiYy0+ZmlyLCAoRklSX09QX0NNMCA8PCBGSVJfT1AwX1NISUZUKSB8CiAJCSAgICAgICAgICAgICAgICAgICAgKEZJUl9PUF9VQSAgPDwgRklSX09QMV9TSElGVCkgfAogCQkgICAgICAgICAgICAgICAgICAgIChGSVJfT1BfUkJXIDw8IEZJUl9PUDJfU0hJRlQpKTsKIAkJb3V0X2JlMzIoJmxiYy0+ZmNyLCBOQU5EX0NNRF9SRUFESUQgPDwgRkNSX0NNRDBfU0hJRlQpOwpAQCAtMzU5LDE2ICszNjIsMjAgQEAKIAkJZGV2X3ZkYmcoY3RybC0+ZGV2LCAiZnNsX2VsYmNfY21kZnVuYzogTkFORF9DTURfRVJBU0UyLlxuIik7CiAKIAkJb3V0X2JlMzIoJmxiYy0+ZmlyLAotCQkgICAgICAgICAoRklSX09QX0NXMCA8PCBGSVJfT1AwX1NISUZUKSB8CisJCSAgICAgICAgIChGSVJfT1BfQ00wIDw8IEZJUl9PUDBfU0hJRlQpIHwKIAkJICAgICAgICAgKEZJUl9PUF9QQSAgPDwgRklSX09QMV9TSElGVCkgfAotCQkgICAgICAgICAoRklSX09QX0NNMSA8PCBGSVJfT1AyX1NISUZUKSk7CisJCSAgICAgICAgIChGSVJfT1BfQ00yIDw8IEZJUl9PUDJfU0hJRlQpIHwKKwkJICAgICAgICAgKEZJUl9PUF9DVzEgPDwgRklSX09QM19TSElGVCkgfAorCQkgICAgICAgICAoRklSX09QX1JTICA8PCBGSVJfT1A0X1NISUZUKSk7CiAKIAkJb3V0X2JlMzIoJmxiYy0+ZmNyLAogCQkgICAgICAgICAoTkFORF9DTURfRVJBU0UxIDw8IEZDUl9DTUQwX1NISUZUKSB8Ci0JCSAgICAgICAgIChOQU5EX0NNRF9FUkFTRTIgPDwgRkNSX0NNRDFfU0hJRlQpKTsKKwkJICAgICAgICAgKE5BTkRfQ01EX1NUQVRVUyA8PCBGQ1JfQ01EMV9TSElGVCkgfAorCQkgICAgICAgICAoTkFORF9DTURfRVJBU0UyIDw8IEZDUl9DTUQyX1NISUZUKSk7CiAKIAkJb3V0X2JlMzIoJmxiYy0+ZmJjciwgMCk7CiAJCWN0cmwtPnJlYWRfYnl0ZXMgPSAwOworCQljdHJsLT51c2VfbWRyID0gMTsKIAogCQlmc2xfZWxiY19ydW5fY29tbWFuZChtdGQpOwogCQlyZXR1cm47CkBAIC0zODMsNDAgKzM5MCw0MSBAQAogCiAJCWN0cmwtPmNvbHVtbiA9IGNvbHVtbjsKIAkJY3RybC0+b29iID0gMDsKKwkJY3RybC0+dXNlX21kciA9IDE7CisKKwkJZmNyID0gKE5BTkRfQ01EX1NUQVRVUyAgIDw8IEZDUl9DTUQxX1NISUZUKSB8CisJCSAgICAgIChOQU5EX0NNRF9TRVFJTiAgICA8PCBGQ1JfQ01EMl9TSElGVCkgfAorCQkgICAgICAoTkFORF9DTURfUEFHRVBST0cgPDwgRkNSX0NNRDNfU0hJRlQpOwogCiAJCWlmIChwcml2LT5wYWdlX3NpemUpIHsKLQkJCWZjciA9IChOQU5EX0NNRF9TRVFJTiA8PCBGQ1JfQ01EMF9TSElGVCkgfAotCQkJICAgICAgKE5BTkRfQ01EX1BBR0VQUk9HIDw8IEZDUl9DTUQxX1NISUZUKTsKLQogCQkJb3V0X2JlMzIoJmxiYy0+ZmlyLAotCQkJICAgICAgICAgKEZJUl9PUF9DVzAgPDwgRklSX09QMF9TSElGVCkgfAorCQkJICAgICAgICAgKEZJUl9PUF9DTTIgPDwgRklSX09QMF9TSElGVCkgfAogCQkJICAgICAgICAgKEZJUl9PUF9DQSAgPDwgRklSX09QMV9TSElGVCkgfAogCQkJICAgICAgICAgKEZJUl9PUF9QQSAgPDwgRklSX09QMl9TSElGVCkgfAogCQkJICAgICAgICAgKEZJUl9PUF9XQiAgPDwgRklSX09QM19TSElGVCkgfAotCQkJICAgICAgICAgKEZJUl9PUF9DVzEgPDwgRklSX09QNF9TSElGVCkpOworCQkJICAgICAgICAgKEZJUl9PUF9DTTMgPDwgRklSX09QNF9TSElGVCkgfAorCQkJICAgICAgICAgKEZJUl9PUF9DVzEgPDwgRklSX09QNV9TSElGVCkgfAorCQkJICAgICAgICAgKEZJUl9PUF9SUyAgPDwgRklSX09QNl9TSElGVCkpOwogCQl9IGVsc2UgewotCQkJZmNyID0gKE5BTkRfQ01EX1BBR0VQUk9HIDw8IEZDUl9DTUQxX1NISUZUKSB8Ci0JCQkgICAgICAoTkFORF9DTURfU0VRSU4gPDwgRkNSX0NNRDJfU0hJRlQpOwotCiAJCQlvdXRfYmUzMigmbGJjLT5maXIsCi0JCQkgICAgICAgICAoRklSX09QX0NXMCA8PCBGSVJfT1AwX1NISUZUKSB8CisJCQkgICAgICAgICAoRklSX09QX0NNMCA8PCBGSVJfT1AwX1NISUZUKSB8CiAJCQkgICAgICAgICAoRklSX09QX0NNMiA8PCBGSVJfT1AxX1NISUZUKSB8CiAJCQkgICAgICAgICAoRklSX09QX0NBICA8PCBGSVJfT1AyX1NISUZUKSB8CiAJCQkgICAgICAgICAoRklSX09QX1BBICA8PCBGSVJfT1AzX1NISUZUKSB8CiAJCQkgICAgICAgICAoRklSX09QX1dCICA8PCBGSVJfT1A0X1NISUZUKSB8Ci0JCQkgICAgICAgICAoRklSX09QX0NXMSA8PCBGSVJfT1A1X1NISUZUKSk7CisJCQkgICAgICAgICAoRklSX09QX0NNMyA8PCBGSVJfT1A1X1NISUZUKSB8CisJCQkgICAgICAgICAoRklSX09QX0NXMSA8PCBGSVJfT1A2X1NISUZUKSB8CisJCQkgICAgICAgICAoRklSX09QX1JTICA8PCBGSVJfT1A3X1NISUZUKSk7CiAKIAkJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKIAkJCQkvKiBPT0IgYXJlYSAtLT4gUkVBRE9PQiAqLwogCQkJCWNvbHVtbiAtPSBtdGQtPndyaXRlc2l6ZTsKIAkJCQlmY3IgfD0gTkFORF9DTURfUkVBRE9PQiA8PCBGQ1JfQ01EMF9TSElGVDsKIAkJCQljdHJsLT5vb2IgPSAxOwotCQkJfSBlbHNlIGlmIChjb2x1bW4gPCAyNTYpIHsKKwkJCX0gZWxzZSB7CisJCQkJV0FSTl9PTihjb2x1bW4gIT0gMCk7CiAJCQkJLyogRmlyc3QgMjU2IGJ5dGVzIC0tPiBSRUFEMCAqLwogCQkJCWZjciB8PSBOQU5EX0NNRF9SRUFEMCA8PCBGQ1JfQ01EMF9TSElGVDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogU2Vjb25kIDI1NiBieXRlcyAtLT4gUkVBRDEgKi8KLQkJCQlmY3IgfD0gTkFORF9DTURfUkVBRDEgPDwgRkNSX0NNRDBfU0hJRlQ7CiAJCQl9CiAJCX0KIApAQCAtNjI4LDIyICs2MzYsNiBAQAogewogCXN0cnVjdCBmc2xfZWxiY19tdGQgKnByaXYgPSBjaGlwLT5wcml2OwogCXN0cnVjdCBmc2xfZWxiY19jdHJsICpjdHJsID0gcHJpdi0+Y3RybDsKLQlzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmxiYyA9IGN0cmwtPnJlZ3M7Ci0KLQlpZiAoY3RybC0+c3RhdHVzICE9IExURVNSX0NDKQotCQlyZXR1cm4gTkFORF9TVEFUVVNfRkFJTDsKLQotCS8qIFVzZSBSRUFEX1NUQVRVUyBjb21tYW5kLCBidXQgd2FpdCBmb3IgdGhlIGRldmljZSB0byBiZSByZWFkeSAqLwotCWN0cmwtPnVzZV9tZHIgPSAwOwotCW91dF9iZTMyKCZsYmMtPmZpciwKLQkgICAgICAgICAoRklSX09QX0NXMCA8PCBGSVJfT1AwX1NISUZUKSB8Ci0JICAgICAgICAgKEZJUl9PUF9SQlcgPDwgRklSX09QMV9TSElGVCkpOwotCW91dF9iZTMyKCZsYmMtPmZjciwgTkFORF9DTURfU1RBVFVTIDw8IEZDUl9DTUQwX1NISUZUKTsKLQlvdXRfYmUzMigmbGJjLT5mYmNyLCAxKTsKLQlzZXRfYWRkcihtdGQsIDAsIDAsIDApOwotCWN0cmwtPnJlYWRfYnl0ZXMgPSAxOwotCi0JZnNsX2VsYmNfcnVuX2NvbW1hbmQobXRkKTsKIAogCWlmIChjdHJsLT5zdGF0dXMgIT0gTFRFU1JfQ0MpCiAJCXJldHVybiBOQU5EX1NUQVRVU19GQUlMOwpAQCAtNjUxLDggKzY0Myw3IEBACiAJLyogVGhlIGNoaXAgYWx3YXlzIHNlZW1zIHRvIHJlcG9ydCB0aGF0IGl0IGlzCiAJICogd3JpdGUtcHJvdGVjdGVkLCBldmVuIHdoZW4gaXQgaXMgbm90LgogCSAqLwotCXNldGJpdHM4KGN0cmwtPmFkZHIsIE5BTkRfU1RBVFVTX1dQKTsKLQlyZXR1cm4gZnNsX2VsYmNfcmVhZF9ieXRlKG10ZCk7CisJcmV0dXJuIChjdHJsLT5tZHIgJiAweGZmKSB8IE5BTkRfU1RBVFVTX1dQOwogfQogCiBzdGF0aWMgaW50IGZzbF9lbGJjX2NoaXBfaW5pdF90YWlsKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtOTQ2LDYgKzkzNywxMyBAQAogewogCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAorCS8qCisJICogTkFORCB0cmFuc2FjdGlvbnMgY2FuIHRpZSB1cCB0aGUgYnVzIGZvciBhIGxvbmcgdGltZSwgc28gc2V0IHRoZQorCSAqIGJ1cyB0aW1lb3V0IHRvIG1heCBieSBjbGVhcmluZyBMQkNSW0JNVF0gKGhpZ2hlc3QgYmFzZSBjb3VudGVyCisJICogdmFsdWUpIGFuZCBzZXR0aW5nIExCQ1JbQk1UUFNdIHRvIHRoZSBoaWdoZXN0IHByZXNjYWxlciB2YWx1ZS4KKwkgKi8KKwljbHJzZXRiaXRzX2JlMzIoJmxiYy0+bGJjciwgTEJDUl9CTVQsIDE1KTsKKwogCS8qIGNsZWFyIGV2ZW50IHJlZ2lzdGVycyAqLwogCXNldGJpdHMzMigmbGJjLT5sdGVzciwgTFRFU1JfTkFORF9NQVNLKTsKIAlvdXRfYmUzMigmbGJjLT5sdGVhdHIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYwppbmRleCBkMTIwY2Q4Li4wNzFhNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYwpAQCAtMTEyLDcgKzExMiw3IEBACiAKIAlpZiAobWNoaXBfbnIgPT0gLTEpIHsKIAkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLCAwIHwgTkFORF9DVFJMX0NIQU5HRSk7Ci0JfSBlbHNlIGlmIChtY2hpcF9uciA+PSAwKSB7CisJfSBlbHNlIGlmIChtY2hpcF9uciA+PSAwICYmIG1jaGlwX25yIDwgTkFORF9NQVhfQ0hJUFMpIHsKIAkJZnVuLT5tY2hpcF9udW1iZXIgPSBtY2hpcF9ucjsKIAkJY2hpcC0+SU9fQUREUl9SID0gZnVuLT5pb19iYXNlICsgZnVuLT5tY2hpcF9vZmZzZXRzW21jaGlwX25yXTsKIAkJY2hpcC0+SU9fQUREUl9XID0gY2hpcC0+SU9fQUREUl9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCmluZGV4IDY1YjI2ZDUuLjQ1ZGVjNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKQEAgLTMzLDkgKzMzLDEzIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm14Y19uYW5kIgogCisjZGVmaW5lIG5mY19pc192MjEoKQkJKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzUoKSkKKyNkZWZpbmUgbmZjX2lzX3YxKCkJCShjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDI3KCkpCisKIC8qIEFkZHJlc3NlcyBmb3IgTkZDIHJlZ2lzdGVycyAqLwogI2RlZmluZSBORkNfQlVGX1NJWkUJCTB4RTAwCiAjZGVmaW5lIE5GQ19CVUZfQUREUgkJMHhFMDQKQEAgLTQ2LDI0ICs1MCwxNCBAQAogI2RlZmluZSBORkNfUlNMVE1BSU5fQVJFQQkweEUwRQogI2RlZmluZSBORkNfUlNMVFNQQVJFX0FSRUEJMHhFMTAKICNkZWZpbmUgTkZDX1dSUFJPVAkJMHhFMTIKLSNkZWZpbmUgTkZDX1VOTE9DS1NUQVJUX0JMS0FERFIJMHhFMTQKLSNkZWZpbmUgTkZDX1VOTE9DS0VORF9CTEtBRERSCTB4RTE2CisjZGVmaW5lIE5GQ19WMV9VTkxPQ0tTVEFSVF9CTEtBRERSCTB4ZTE0CisjZGVmaW5lIE5GQ19WMV9VTkxPQ0tFTkRfQkxLQUREUgkweGUxNgorI2RlZmluZSBORkNfVjIxX1VOTE9DS1NUQVJUX0JMS0FERFIJMHhlMjAKKyNkZWZpbmUgTkZDX1YyMV9VTkxPQ0tFTkRfQkxLQUREUgkweGUyMgogI2RlZmluZSBORkNfTkZfV1JQUlNUCQkweEUxOAogI2RlZmluZSBORkNfQ09ORklHMQkJMHhFMUEKICNkZWZpbmUgTkZDX0NPTkZJRzIJCTB4RTFDCiAKLS8qIEFkZHJlc3NlcyBmb3IgTkZDIFJBTSBCVUZGRVIgTWFpbiBhcmVhIDAgKi8KLSNkZWZpbmUgTUFJTl9BUkVBMAkJMHgwMDAKLSNkZWZpbmUgTUFJTl9BUkVBMQkJMHgyMDAKLSNkZWZpbmUgTUFJTl9BUkVBMgkJMHg0MDAKLSNkZWZpbmUgTUFJTl9BUkVBMwkJMHg2MDAKLQotLyogQWRkcmVzc2VzIGZvciBORkMgU1BBUkUgQlVGRkVSIFNwYXJlIGFyZWEgMCAqLwotI2RlZmluZSBTUEFSRV9BUkVBMAkJMHg4MDAKLSNkZWZpbmUgU1BBUkVfQVJFQTEJCTB4ODEwCi0jZGVmaW5lIFNQQVJFX0FSRUEyCQkweDgyMAotI2RlZmluZSBTUEFSRV9BUkVBMwkJMHg4MzAKLQogLyogU2V0IElOVCB0byAwLCBGQ01EIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgogICogZm9yIENvbW1hbmQgb3BlcmF0aW9uICovCiAjZGVmaW5lIE5GQ19DTUQgICAgICAgICAgICAweDEKQEAgLTEwNiw0OCArMTAwLDY2IEBACiAJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAKKwl2b2lkCQkJKnNwYXJlMDsKKwl2b2lkCQkJKm1haW5fYXJlYTA7CisJdm9pZAkJCSptYWluX2FyZWExOworCisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKIAl2b2lkIF9faW9tZW0JCSpyZWdzOwotCWludAkJCXNwYXJlX29ubHk7CiAJaW50CQkJc3RhdHVzX3JlcXVlc3Q7Ci0JaW50CQkJcGFnZXNpemVfMms7Ci0JdWludDE2X3QJCWNvbF9hZGRyOwogCXN0cnVjdCBjbGsJCSpjbGs7CiAJaW50CQkJY2xrX2FjdDsKIAlpbnQJCQlpcnE7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdAlpcnFfd2FpdHE7CisKKwl1aW50OF90CQkJKmRhdGFfYnVmOworCXVuc2lnbmVkIGludAkJYnVmX3N0YXJ0OworCWludAkJCXNwYXJlX2xlbjsKIH07CiAKLS8qIERlZmluZSBkZWxheXMgaW4gbWljcm9zZWMgZm9yIE5BTkQgZGV2aWNlIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgVFJPUF9VU19ERUxBWSAgIDIwMDAKLS8qIE1hY3JvcyB0byBnZXQgYnl0ZSBhbmQgYml0IHBvc2l0aW9ucyBvZiBFQ0MgKi8KLSNkZWZpbmUgQ09MUE9TKHgpICAoKHgpID4+IDMpCi0jZGVmaW5lIEJJVFBPUyh4KSAoKHgpICYgMHhmKQotCi0vKiBEZWZpbmUgc2luZ2xlIGJpdCBFcnJvciBwb3NpdGlvbnMgaW4gTWFpbiAmIFNwYXJlIGFyZWEgKi8KLSNkZWZpbmUgTUFJTl9TSU5HTEVCSVRfRVJST1IgMHg0Ci0jZGVmaW5lIFNQQVJFX1NJTkdMRUJJVF9FUlJPUiAweDEKLQogLyogT09CIHBsYWNlbWVudCBibG9jayBmb3IgdXNlIHdpdGggaGFyZHdhcmUgZWNjIGdlbmVyYXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9od19lY2Nvb2JfOCA9IHsKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZHYxX2h3X2VjY29vYl9zbWFsbHBhZ2UgPSB7CiAJLmVjY2J5dGVzID0gNSwKIAkuZWNjcG9zID0gezYsIDcsIDgsIDksIDEwfSwKLQkub29iZnJlZSA9IHt7MCwgNX0sIHsxMSwgNX0sIH0KKwkub29iZnJlZSA9IHt7MCwgNX0sIHsxMiwgNH0sIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9od19lY2Nvb2JfMTYgPSB7Ci0JLmVjY2J5dGVzID0gNSwKLQkuZWNjcG9zID0gezYsIDcsIDgsIDksIDEwfSwKLQkub29iZnJlZSA9IHt7MCwgNX0sIHsxMSwgNX0sIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9od19lY2Nvb2JfNjQgPSB7CitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmR2MV9od19lY2Nvb2JfbGFyZ2VwYWdlID0gewogCS5lY2NieXRlcyA9IDIwLAogCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTAsIDIyLCAyMywgMjQsIDI1LCAyNiwKIAkJICAgMzgsIDM5LCA0MCwgNDEsIDQyLCA1NCwgNTUsIDU2LCA1NywgNTh9LAogCS5vb2JmcmVlID0ge3syLCA0fSwgezExLCAxMH0sIHsyNywgMTB9LCB7NDMsIDEwfSwgezU5LCA1fSwgfQogfTsKIAorLyogT09CIGRlc2NyaXB0aW9uIGZvciA1MTIgYnl0ZSBwYWdlcyB3aXRoIDE2IGJ5dGUgT09CICovCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmR2Ml9od19lY2Nvb2Jfc21hbGxwYWdlID0geworCS5lY2NieXRlcyA9IDEgKiA5LAorCS5lY2Nwb3MgPSB7CisJCSA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUKKwl9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDAsIC5sZW5ndGggPSA1fQorCX0KK307CisKKy8qIE9PQiBkZXNjcmlwdGlvbiBmb3IgMjA0OCBieXRlIHBhZ2VzIHdpdGggNjQgYnl0ZSBPT0IgKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZHYyX2h3X2VjY29vYl9sYXJnZXBhZ2UgPSB7CisJLmVjY2J5dGVzID0gNCAqIDksCisJLmVjY3BvcyA9IHsKKwkJIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKwkJMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKwkJMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKKwkJNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MworCX0sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMiwgLmxlbmd0aCA9IDR9LAorCQl7Lm9mZnNldCA9IDE2LCAubGVuZ3RoID0gN30sCisJCXsub2Zmc2V0ID0gMzIsIC5sZW5ndGggPSA3fSwKKwkJey5vZmZzZXQgPSA0OCwgLmxlbmd0aCA9IDd9CisJfQorfTsKKwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogI2VuZGlmCkBAIC0xNzAsMTAgKzE4MiwxMCBAQAogLyogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgTkFOREZDIHRvIHdhaXQgZm9yIHRoZSBiYXNpYyBvcGVyYXRpb24gdG8KICAqIGNvbXBsZXRlIGJ5IGNoZWNraW5nIHRoZSBJTlQgYml0IG9mIGNvbmZpZzIgcmVnaXN0ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIHdhaXRfb3BfZG9uZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgaW50IG1heF9yZXRyaWVzLAotCQkJCXVpbnQxNl90IHBhcmFtLCBpbnQgdXNlaXJxKQorc3RhdGljIHZvaWQgd2FpdF9vcF9kb25lKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCBpbnQgdXNlaXJxKQogewogCXVpbnQzMl90IHRtcDsKKwlpbnQgbWF4X3JldHJpZXMgPSAyMDAwOwogCiAJaWYgKHVzZWlycSkgewogCQlpZiAoKHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKSA9PSAwKSB7CkBAIC0yMDAsOCArMjEyLDggQEAKIAkJCXVkZWxheSgxKTsKIAkJfQogCQlpZiAobWF4X3JldHJpZXMgPCAwKQotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzKCVkKTogSU5UIG5vdCBzZXRcbiIsCi0JCQkgICAgICBfX2Z1bmNfXywgcGFyYW0pOworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBJTlQgbm90IHNldFxuIiwKKwkJCSAgICAgIF9fZnVuY19fKTsKIAl9CiB9CiAKQEAgLTIxNSw3ICsyMjcsNyBAQAogCXdyaXRldyhORkNfQ01ELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOwogCiAJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCi0Jd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGNtZCwgdXNlaXJxKTsKKwl3YWl0X29wX2RvbmUoaG9zdCwgdXNlaXJxKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBhZGRyZXNzIChvciBwYXJ0aWFsIGFkZHJlc3MpIHRvIHRoZQpAQCAtMjI5LDgyICsyNDEsNDcgQEAKIAl3cml0ZXcoTkZDX0FERFIsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CiAKIAkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KLQl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgYWRkciwgaXNsYXN0KTsKKwl3YWl0X29wX2RvbmUoaG9zdCwgaXNsYXN0KTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0aGUgTkFOREZDIHRvIGluaXRhdGUgdGhlIHRyYW5zZmVyCi0gKiBvZiBkYXRhIGN1cnJlbnRseSBpbiB0aGUgTkFOREZDIFJBTSBidWZmZXIgdG8gdGhlIE5BTkQgZGV2aWNlLiAqLwotc3RhdGljIHZvaWQgc2VuZF9wcm9nX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAotCQkJaW50IHNwYXJlX29ubHkpCitzdGF0aWMgdm9pZCBzZW5kX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBvcHMpCiB7Ci0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfcHJvZ19wYWdlICglZClcbiIsIHNwYXJlX29ubHkpOworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwlpbnQgYnVmcywgaTsKIAotCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KLQl3cml0ZXcoYnVmX2lkLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKKwlpZiAobmZjX2lzX3YxKCkgJiYgbXRkLT53cml0ZXNpemUgPiA1MTIpCisJCWJ1ZnMgPSA0OworCWVsc2UKKwkJYnVmcyA9IDE7CiAKLQkvKiBDb25maWd1cmUgc3BhcmUgb3IgcGFnZStzcGFyZSBhY2Nlc3MgKi8KLQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKSB7Ci0JCXVpbnQxNl90IGNvbmZpZzEgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCQlpZiAoc3BhcmVfb25seSkKLQkJCWNvbmZpZzEgfD0gTkZDX1NQX0VOOwotCQllbHNlCi0JCQljb25maWcxICY9IH4oTkZDX1NQX0VOKTsKLQkJd3JpdGV3KGNvbmZpZzEsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJZm9yIChpID0gMDsgaSA8IGJ1ZnM7IGkrKykgeworCisJCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KKwkJd3JpdGV3KGksIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJCXdyaXRldyhvcHMsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJCXdhaXRfb3BfZG9uZShob3N0LCB0cnVlKTsKIAl9Ci0KLQl3cml0ZXcoTkZDX0lOUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOwotCi0JLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCi0Jd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOwotfQotCi0vKiBSZXF1ZXN0cyBOQU5ERkMgdG8gaW5pdGF0ZWQgdGhlIHRyYW5zZmVyIG9mIGRhdGEgZnJvbSB0aGUKLSAqIE5BTkQgZGV2aWNlIGludG8gaW4gdGhlIE5BTkRGQyByYW0gYnVmZmVyLiAqLwotc3RhdGljIHZvaWQgc2VuZF9yZWFkX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAotCQlpbnQgc3BhcmVfb25seSkKLXsKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9yZWFkX3BhZ2UgKCVkKVxuIiwgc3BhcmVfb25seSk7Ci0KLQkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgcGFnZSByZWFkL3dyaXRlICovCi0Jd3JpdGV3KGJ1Zl9pZCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7Ci0KLQkvKiBDb25maWd1cmUgc3BhcmUgb3IgcGFnZStzcGFyZSBhY2Nlc3MgKi8KLQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKSB7Ci0JCXVpbnQzMl90IGNvbmZpZzEgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCQlpZiAoc3BhcmVfb25seSkKLQkJCWNvbmZpZzEgfD0gTkZDX1NQX0VOOwotCQllbHNlCi0JCQljb25maWcxICY9IH5ORkNfU1BfRU47Ci0JCXdyaXRldyhjb25maWcxLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCX0KLQotCXdyaXRldyhORkNfT1VUUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOwotCi0JLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCi0Jd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOwogfQogCiAvKiBSZXF1ZXN0IHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlIE5BTkQgZGV2aWNlIElELiAqLwogc3RhdGljIHZvaWQgc2VuZF9yZWFkX2lkKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaG9zdC0+bmFuZDsKLQl1aW50MTZfdCB0bXA7CiAKIAkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgZGV2aWNlIElEIG91dHB1dCAqLwogCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOwogCi0JLyogUmVhZCBJRCBpbnRvIG1haW4gYnVmZmVyICovCi0JdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKLQl0bXAgJj0gfk5GQ19TUF9FTjsKLQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCiAJd3JpdGV3KE5GQ19JRCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKIAogCS8qIFdhaXQgZm9yIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwotCXdhaXRfb3BfZG9uZShob3N0LCBUUk9QX1VTX0RFTEFZLCAwLCB0cnVlKTsKKwl3YWl0X29wX2RvbmUoaG9zdCwgdHJ1ZSk7CiAKIAlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKLQkJdm9pZCBfX2lvbWVtICptYWluX2J1ZiA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUEwOworCQl2b2lkIF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+bWFpbl9hcmVhMDsKIAkJLyogY29tcHJlc3MgdGhlIElEIGluZm8gKi8KIAkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgMiksIG1haW5fYnVmICsgMSk7CiAJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDQpLCBtYWluX2J1ZiArIDIpOwpAQCAtMzEyLDE1ICsyODksMTYgQEAKIAkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgOCksIG1haW5fYnVmICsgNCk7CiAJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDEwKSwgbWFpbl9idWYgKyA1KTsKIAl9CisJbWVtY3B5KGhvc3QtPmRhdGFfYnVmLCBob3N0LT5tYWluX2FyZWEwLCAxNik7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdGhlIE5BTkRGQyB0byBwZXJmb3JtIGEgcmVhZCBvZiB0aGUKICAqIE5BTkQgZGV2aWNlIHN0YXR1cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMuICovCiBzdGF0aWMgdWludDE2X3QgZ2V0X2Rldl9zdGF0dXMoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QpCiB7Ci0Jdm9pZCBfX2lvbWVtICptYWluX2J1ZiA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUExOworCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5tYWluX2FyZWExOwogCXVpbnQzMl90IHN0b3JlOwotCXVpbnQxNl90IHJldCwgdG1wOworCXVpbnQxNl90IHJldDsKIAkvKiBJc3N1ZSBzdGF0dXMgcmVxdWVzdCB0byBOQU5EIGRldmljZSAqLwogCiAJLyogc3RvcmUgdGhlIG1haW4gYXJlYTEgZmlyc3Qgd29yZCwgbGF0ZXIgZG8gcmVjb3ZlcnkgKi8KQEAgLTMyOSwxNSArMzA3LDEwIEBACiAJICogY29ycnVwdGlvbiBvZiByZWFkL3dyaXRlIGJ1ZmZlciBvbiBzdGF0dXMgcmVxdWVzdHMuICovCiAJd3JpdGV3KDEsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOwogCi0JLyogUmVhZCBzdGF0dXMgaW50byBtYWluIGJ1ZmZlciAqLwotCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7Ci0JdG1wICY9IH5ORkNfU1BfRU47Ci0Jd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKLQogCXdyaXRldyhORkNfU1RBVFVTLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOwogCiAJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCi0Jd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIDAsIHRydWUpOworCXdhaXRfb3BfZG9uZShob3N0LCB0cnVlKTsKIAogCS8qIFN0YXR1cyBpcyBwbGFjZWQgaW4gZmlyc3Qgd29yZCBvZiBtYWluIGJ1ZmZlciAqLwogCS8qIGdldCBzdGF0dXMsIHRoZW4gcmVjb3ZlcnkgYXJlYSAxIGRhdGEgKi8KQEAgLTM5NywzMiArMzcwLDE0IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCXVpbnQ4X3QgcmV0ID0gMDsKLQl1aW50MTZfdCBjb2wsIHJkX3dvcmQ7Ci0JdWludDE2X3QgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMDsKLQl1aW50MTZfdCBfX2lvbWVtICpzcGFyZV9idWYgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTA7CisJdWludDhfdCByZXQ7CiAKIAkvKiBDaGVjayBmb3Igc3RhdHVzIHJlcXVlc3QgKi8KIAlpZiAoaG9zdC0+c3RhdHVzX3JlcXVlc3QpCiAJCXJldHVybiBnZXRfZGV2X3N0YXR1cyhob3N0KSAmIDB4RkY7CiAKLQkvKiBHZXQgY29sdW1uIGZvciAxNi1iaXQgYWNjZXNzICovCi0JY29sID0gaG9zdC0+Y29sX2FkZHIgPj4gMTsKLQotCS8qIElmIHdlIGFyZSBhY2Nlc3NpbmcgdGhlIHNwYXJlIHJlZ2lvbiAqLwotCWlmIChob3N0LT5zcGFyZV9vbmx5KQotCQlyZF93b3JkID0gcmVhZHcoJnNwYXJlX2J1Zltjb2xdKTsKLQllbHNlCi0JCXJkX3dvcmQgPSByZWFkdygmbWFpbl9idWZbY29sXSk7Ci0KLQkvKiBQaWNrIHVwcGVyL2xvd2VyIGJ5dGUgb2Ygd29yZCBmcm9tIFJBTSBidWZmZXIgKi8KLQlpZiAoaG9zdC0+Y29sX2FkZHIgJiAweDEpCi0JCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhGRjsKLQllbHNlCi0JCXJldCA9IHJkX3dvcmQgJiAweEZGOwotCi0JLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCi0JaG9zdC0+Y29sX2FkZHIrKzsKKwlyZXQgPSAqKHVpbnQ4X3QgKikoaG9zdC0+ZGF0YV9idWYgKyBob3N0LT5idWZfc3RhcnQpOworCWhvc3QtPmJ1Zl9zdGFydCsrOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQzMSwzMyArMzg2LDEwIEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCXVpbnQxNl90IGNvbCwgcmRfd29yZCwgcmV0OwotCXVpbnQxNl90IF9faW9tZW0gKnA7CisJdWludDE2X3QgcmV0OwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywKLQkgICAgICAibXhjX25hbmRfcmVhZF93b3JkKGNvbCA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIpOwotCi0JY29sID0gaG9zdC0+Y29sX2FkZHI7Ci0JLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCi0JaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCi0JCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKLQotCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKLQkJcCA9IChob3N0LT5yZWdzICsgTUFJTl9BUkVBMCkgKyAoY29sID4+IDEpOwotCWVsc2UKLQkJcCA9IChob3N0LT5yZWdzICsgU1BBUkVfQVJFQTApICsgKChjb2wgLSBtdGQtPndyaXRlc2l6ZSkgPj4gMSk7Ci0KLQlpZiAoY29sICYgMSkgewotCQlyZF93b3JkID0gcmVhZHcocCk7Ci0JCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhmZjsKLQkJcmRfd29yZCA9IHJlYWR3KCZwWzFdKTsKLQkJcmV0IHw9IChyZF93b3JkIDw8IDgpICYgMHhmZjAwOwotCi0JfSBlbHNlCi0JCXJldCA9IHJlYWR3KHApOwotCi0JLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCi0JaG9zdC0+Y29sX2FkZHIgPSBjb2wgKyAyOworCXJldCA9ICoodWludDE2X3QgKikoaG9zdC0+ZGF0YV9idWYgKyBob3N0LT5idWZfc3RhcnQpOworCWhvc3QtPmJ1Zl9zdGFydCArPSAyOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ3MCw5NCArNDAyLDE0IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCWludCBuLCBjb2wsIGkgPSAwOworCXUxNiBjb2wgPSBob3N0LT5idWZfc3RhcnQ7CisJaW50IG4gPSBtdGQtPm9vYnNpemUgKyBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCi0JICAgICAgIm14Y19uYW5kX3dyaXRlX2J1Zihjb2wgPSAlZCwgbGVuID0gJWQpXG4iLCBob3N0LT5jb2xfYWRkciwKLQkgICAgICBsZW4pOworCW4gPSBtaW4obiwgbGVuKTsKIAotCWNvbCA9IGhvc3QtPmNvbF9hZGRyOworCW1lbWNweShob3N0LT5kYXRhX2J1ZiArIGNvbCwgYnVmLCBuKTsKIAotCS8qIEFkanVzdCBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLwotCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSAmJiBob3N0LT5zcGFyZV9vbmx5KQotCQljb2wgKz0gbXRkLT53cml0ZXNpemU7Ci0KLQluID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUgLSBjb2w7Ci0JbiA9IG1pbihsZW4sIG4pOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywKLQkgICAgICAiJXM6JWQ6IGNvbCA9ICVkLCBuID0gJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgY29sLCBuKTsKLQotCXdoaWxlIChuKSB7Ci0JCXZvaWQgX19pb21lbSAqcDsKLQotCQlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUpCi0JCQlwID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTAgKyAoY29sICYgfjMpOwotCQllbHNlCi0JCQlwID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwIC0KLQkJCQkJCW10ZC0+d3JpdGVzaXplICsgKGNvbCAmIH4zKTsKLQotCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6JWQ6IHAgPSAlcFxuIiwgX19mdW5jX18sCi0JCSAgICAgIF9fTElORV9fLCBwKTsKLQotCQlpZiAoKChjb2wgfCAoaW50KSZidWZbaV0pICYgMykgfHwgbiA8IDE2KSB7Ci0JCQl1aW50MzJfdCBkYXRhID0gMDsKLQotCQkJaWYgKGNvbCAmIDMgfHwgbiA8IDQpCi0JCQkJZGF0YSA9IHJlYWRsKHApOwotCi0JCQlzd2l0Y2ggKGNvbCAmIDMpIHsKLQkJCWNhc2UgMDoKLQkJCQlpZiAobikgewotCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmZmZmZjAwKSB8Ci0JCQkJCSAgICAoYnVmW2krK10gPDwgMCk7Ci0JCQkJCW4tLTsKLQkJCQkJY29sKys7Ci0JCQkJfQotCQkJY2FzZSAxOgotCQkJCWlmIChuKSB7Ci0JCQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmZmZjAwZmYpIHwKLQkJCQkJICAgIChidWZbaSsrXSA8PCA4KTsKLQkJCQkJbi0tOwotCQkJCQljb2wrKzsKLQkJCQl9Ci0JCQljYXNlIDI6Ci0JCQkJaWYgKG4pIHsKLQkJCQkJZGF0YSA9IChkYXRhICYgMHhmZjAwZmZmZikgfAotCQkJCQkgICAgKGJ1ZltpKytdIDw8IDE2KTsKLQkJCQkJbi0tOwotCQkJCQljb2wrKzsKLQkJCQl9Ci0JCQljYXNlIDM6Ci0JCQkJaWYgKG4pIHsKLQkJCQkJZGF0YSA9IChkYXRhICYgMHgwMGZmZmZmZikgfAotCQkJCQkgICAgKGJ1ZltpKytdIDw8IDI0KTsKLQkJCQkJbi0tOwotCQkJCQljb2wrKzsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXdyaXRlbChkYXRhLCBwKTsKLQkJfSBlbHNlIHsKLQkJCWludCBtID0gbXRkLT53cml0ZXNpemUgLSBjb2w7Ci0KLQkJCWlmIChjb2wgPj0gbXRkLT53cml0ZXNpemUpCi0JCQkJbSArPSBtdGQtPm9vYnNpemU7Ci0KLQkJCW0gPSBtaW4obiwgbSkgJiB+MzsKLQotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKLQkJCSAgICAgICIlczolZDogbiA9ICVkLCBtID0gJWQsIGkgPSAlZCwgY29sID0gJWRcbiIsCi0JCQkgICAgICBfX2Z1bmNfXywgIF9fTElORV9fLCBuLCBtLCBpLCBjb2wpOwotCi0JCQltZW1jcHkocCwgJmJ1ZltpXSwgbSk7Ci0JCQljb2wgKz0gbTsKLQkJCWkgKz0gbTsKLQkJCW4gLT0gbTsKLQkJfQotCX0KLQkvKiBVcGRhdGUgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KLQlob3N0LT5jb2xfYWRkciA9IGNvbDsKKwlob3N0LT5idWZfc3RhcnQgKz0gbjsKIH0KIAogLyogUmVhZCB0aGUgZGF0YSBidWZmZXIgZnJvbSB0aGUgTkFORCBGbGFzaC4gVG8gcmVhZCB0aGUgZGF0YSBmcm9tIE5BTkQKQEAgLTU2OCw3NSArNDIwLDE0IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCWludCBuLCBjb2wsIGkgPSAwOworCXUxNiBjb2wgPSBob3N0LT5idWZfc3RhcnQ7CisJaW50IG4gPSBtdGQtPm9vYnNpemUgKyBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCi0JICAgICAgIm14Y19uYW5kX3JlYWRfYnVmKGNvbCA9ICVkLCBsZW4gPSAlZClcbiIsIGhvc3QtPmNvbF9hZGRyLCBsZW4pOworCW4gPSBtaW4obiwgbGVuKTsKIAotCWNvbCA9IGhvc3QtPmNvbF9hZGRyOworCW1lbWNweShidWYsIGhvc3QtPmRhdGFfYnVmICsgY29sLCBsZW4pOwogCi0JLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCi0JaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCi0JCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKLQotCW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZSAtIGNvbDsKLQluID0gbWluKGxlbiwgbik7Ci0KLQl3aGlsZSAobikgewotCQl2b2lkIF9faW9tZW0gKnA7Ci0KLQkJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplKQotCQkJcCA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUEwICsgKGNvbCAmIH4zKTsKLQkJZWxzZQotCQkJcCA9IGhvc3QtPnJlZ3MgKyBTUEFSRV9BUkVBMCAtCi0JCQkJCW10ZC0+d3JpdGVzaXplICsgKGNvbCAmIH4zKTsKLQotCQlpZiAoKChjb2wgfCAoaW50KSZidWZbaV0pICYgMykgfHwgbiA8IDE2KSB7Ci0JCQl1aW50MzJfdCBkYXRhOwotCi0JCQlkYXRhID0gcmVhZGwocCk7Ci0JCQlzd2l0Y2ggKGNvbCAmIDMpIHsKLQkJCWNhc2UgMDoKLQkJCQlpZiAobikgewotCQkJCQlidWZbaSsrXSA9ICh1aW50OF90KSAoZGF0YSk7Ci0JCQkJCW4tLTsKLQkJCQkJY29sKys7Ci0JCQkJfQotCQkJY2FzZSAxOgotCQkJCWlmIChuKSB7Ci0JCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhID4+IDgpOwotCQkJCQluLS07Ci0JCQkJCWNvbCsrOwotCQkJCX0KLQkJCWNhc2UgMjoKLQkJCQlpZiAobikgewotCQkJCQlidWZbaSsrXSA9ICh1aW50OF90KSAoZGF0YSA+PiAxNik7Ci0JCQkJCW4tLTsKLQkJCQkJY29sKys7Ci0JCQkJfQotCQkJY2FzZSAzOgotCQkJCWlmIChuKSB7Ci0JCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhID4+IDI0KTsKLQkJCQkJbi0tOwotCQkJCQljb2wrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgbSA9IG10ZC0+d3JpdGVzaXplIC0gY29sOwotCi0JCQlpZiAoY29sID49IG10ZC0+d3JpdGVzaXplKQotCQkJCW0gKz0gbXRkLT5vb2JzaXplOwotCi0JCQltID0gbWluKG4sIG0pICYgfjM7Ci0JCQltZW1jcHkoJmJ1ZltpXSwgcCwgbSk7Ci0JCQljb2wgKz0gbTsKLQkJCWkgKz0gbTsKLQkJCW4gLT0gbTsKLQkJfQotCX0KLQkvKiBVcGRhdGUgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KLQlob3N0LT5jb2xfYWRkciA9IGNvbDsKLQorCWhvc3QtPmJ1Zl9zdGFydCArPSBsZW47CiB9CiAKIC8qIFVzZWQgYnkgdGhlIHVwcGVyIGxheWVyIHRvIHZlcmlmeSB0aGUgZGF0YSBpbiBOQU5EIEZsYXNoCkBAIC02NTQsMjMgKzQ0NSw2IEBACiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwogCi0jaWZkZWYgQ09ORklHX01URF9OQU5EX01YQ19GT1JDRV9DRQotCWlmIChjaGlwID4gMCkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAotCQkgICAgICAiRVJST1I6ICBJbGxlZ2FsIGNoaXAgc2VsZWN0IChjaGlwID0gJWQpXG4iLCBjaGlwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChjaGlwID09IC0xKSB7Ci0JCXdyaXRldyhyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpICYgfk5GQ19DRSwKLQkJCQlob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCQlyZXR1cm47Ci0JfQotCi0Jd3JpdGV3KHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSkgfCBORkNfQ0UsCi0JCQlob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotI2VuZGlmCi0KIAlzd2l0Y2ggKGNoaXApIHsKIAljYXNlIC0xOgogCQkvKiBEaXNhYmxlIHRoZSBORkMgY2xvY2sgKi8KQEAgLTY5Miw5NCArNDY2LDQwIEBACiAJfQogfQogCi0vKiBVc2VkIGJ5IHRoZSB1cHBlciBsYXllciB0byB3cml0ZSBjb21tYW5kIHRvIE5BTkQgRmxhc2ggZm9yCi0gKiBkaWZmZXJlbnQgb3BlcmF0aW9ucyB0byBiZSBjYXJyaWVkIG91dCBvbiBOQU5EIEZsYXNoICovCi1zdGF0aWMgdm9pZCBteGNfbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLAotCQkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCisvKgorICogRnVuY3Rpb24gdG8gdHJhbnNmZXIgZGF0YSB0by9mcm9tIHNwYXJlIGFyZWEuCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfc3BhcmUoc3RydWN0IG10ZF9pbmZvICptdGQsIGJvb2wgYmZyb20pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IHRoaXMtPnByaXY7CisJdTE2IGksIGo7CisJdTE2IG4gPSBtdGQtPndyaXRlc2l6ZSA+PiA5OworCXU4ICpkID0gaG9zdC0+ZGF0YV9idWYgKyBtdGQtPndyaXRlc2l6ZTsKKwl1OCAqcyA9IGhvc3QtPnNwYXJlMDsKKwl1MTYgdCA9IGhvc3QtPnNwYXJlX2xlbjsKKworCWogPSAobXRkLT5vb2JzaXplIC8gbiA+PiAxKSA8PCAxOworCisJaWYgKGJmcm9tKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQorCQkJbWVtY3B5KGQgKyBpICogaiwgcyArIGkgKiB0LCBqKTsKKworCQkvKiB0aGUgbGFzdCBzZWN0aW9uICovCisJCW1lbWNweShkICsgaSAqIGosIHMgKyBpICogdCwgbXRkLT5vb2JzaXplIC0gaSAqIGopOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQorCQkJbWVtY3B5KCZzW2kgKiB0XSwgJmRbaSAqIGpdLCBqKTsKKworCQkvKiB0aGUgbGFzdCBzZWN0aW9uICovCisJCW1lbWNweSgmc1tpICogdF0sICZkW2kgKiBqXSwgbXRkLT5vb2JzaXplIC0gaSAqIGopOworCX0KK30KKworc3RhdGljIHZvaWQgbXhjX2RvX2FkZHJfY3ljbGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCWludCB1c2VpcnEgPSB0cnVlOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywKLQkgICAgICAibXhjX25hbmRfY29tbWFuZCAoY21kID0gMHgleCwgY29sID0gMHgleCwgcGFnZSA9IDB4JXgpXG4iLAotCSAgICAgIGNvbW1hbmQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKLQotCS8qIFJlc2V0IGNvbW1hbmQgc3RhdGUgaW5mb3JtYXRpb24gKi8KLQlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IGZhbHNlOwotCi0JLyogQ29tbWFuZCBwcmUtcHJvY2Vzc2luZyBzdGVwICovCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0KLQljYXNlIE5BTkRfQ01EX1NUQVRVUzoKLQkJaG9zdC0+Y29sX2FkZHIgPSAwOwotCQlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IHRydWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NNRF9SRUFEMDoKLQkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW47Ci0JCWhvc3QtPnNwYXJlX29ubHkgPSBmYWxzZTsKLQkJdXNlaXJxID0gZmFsc2U7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NNRF9SRUFET09COgotCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKLQkJaG9zdC0+c3BhcmVfb25seSA9IHRydWU7Ci0JCXVzZWlycSA9IGZhbHNlOwotCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCi0JCQljb21tYW5kID0gTkFORF9DTURfUkVBRDA7IC8qIG9ubHkgUkVBRDAgaXMgdmFsaWQgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ01EX1NFUUlOOgotCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7Ci0JCQkvKgotCQkJICogRklYTUU6IGJlZm9yZSBzZW5kIFNFUUlOIGNvbW1hbmQgZm9yIHdyaXRlIE9PQiwKLQkJCSAqIFdlIG11c3QgcmVhZCBvbmUgcGFnZSBvdXQuCi0JCQkgKiBGb3IgSzlGMUdYWCBoYXMgbm8gUkVBRDEgY29tbWFuZCB0byBzZXQgY3VycmVudCBIVwotCQkJICogcG9pbnRlciB0byBzcGFyZSBhcmVhLCB3ZSBtdXN0IHdyaXRlIHRoZSB3aG9sZSBwYWdlCi0JCQkgKiBpbmNsdWRpbmcgT09CIHRvZ2V0aGVyLgotCQkJICovCi0JCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCi0JCQkJLyogY2FsbCBvdXJzZWxmIHRvIHJlYWQgYSBwYWdlICovCi0JCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLAotCQkJCQkJcGFnZV9hZGRyKTsKLQotCQkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW4gLSBtdGQtPndyaXRlc2l6ZTsKLQkJCWhvc3QtPnNwYXJlX29ubHkgPSB0cnVlOwotCi0JCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHNwYXJlIHJlZ2lvbiAqLwotCQkJaWYgKCFob3N0LT5wYWdlc2l6ZV8yaykKLQkJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFET09CLCBmYWxzZSk7Ci0JCX0gZWxzZSB7Ci0JCQlob3N0LT5zcGFyZV9vbmx5ID0gZmFsc2U7Ci0JCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKLQotCQkJLyogU2V0IHByb2dyYW0gcG9pbnRlciB0byBwYWdlIHN0YXJ0ICovCi0JCQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKQotCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQUQwLCBmYWxzZSk7Ci0JCX0KLQkJdXNlaXJxID0gZmFsc2U7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKLQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7Ci0KLQkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7Ci0JCQkvKiBkYXRhIGluIDQgYXJlYXMgZGF0YXMgKi8KLQkJCXNlbmRfcHJvZ19wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOwotCQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7Ci0JCQlzZW5kX3Byb2dfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKLQkJfQotCi0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NNRF9FUkFTRTE6Ci0JCXVzZWlycSA9IGZhbHNlOwotCQlicmVhazsKLQl9Ci0KLQkvKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4gKi8KLQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB1c2VpcnEpOwogCiAJLyogV3JpdGUgb3V0IGNvbHVtbiBhZGRyZXNzLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoY29sdW1uICE9IC0xKSB7CkBAIC03OTEsNyArNTExLDcgQEAKIAkJICogdGhlIGZ1bGwgcGFnZS4KIAkJICovCiAJCXNlbmRfYWRkcihob3N0LCAwLCBwYWdlX2FkZHIgPT0gLTEpOwotCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKIAkJCS8qIGFub3RoZXIgY29sIGFkZHIgY3ljbGUgZm9yIDJrIHBhZ2UgKi8KIAkJCXNlbmRfYWRkcihob3N0LCAwLCBmYWxzZSk7CiAJfQpAQCAtODAxLDcgKzUyMSw3IEBACiAJCS8qIHBhZGRyXzAgLSBwX2FkZHJfNyAqLwogCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciAmIDB4ZmYpLCBmYWxzZSk7CiAKLQkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikgewogCQkJaWYgKG10ZC0+c2l6ZSA+PSAweDEwMDAwMDAwKSB7CiAJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCiAJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCBmYWxzZSk7CkBAIC04MjAsNTIgKzU0MCwxMzYgQEAKIAkJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYsIHRydWUpOwogCQl9CiAJfQorfQogCi0JLyogQ29tbWFuZCBwb3N0LXByb2Nlc3Npbmcgc3RlcCAqLworLyogVXNlZCBieSB0aGUgdXBwZXIgbGF5ZXIgdG8gd3JpdGUgY29tbWFuZCB0byBOQU5EIEZsYXNoIGZvcgorICogZGlmZmVyZW50IG9wZXJhdGlvbnMgdG8gYmUgY2FycmllZCBvdXQgb24gTkFORCBGbGFzaCAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwKKwkJCQlpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIm14Y19uYW5kX2NvbW1hbmQgKGNtZCA9IDB4JXgsIGNvbCA9IDB4JXgsIHBhZ2UgPSAweCV4KVxuIiwKKwkgICAgICBjb21tYW5kLCBjb2x1bW4sIHBhZ2VfYWRkcik7CisKKwkvKiBSZXNldCBjb21tYW5kIHN0YXRlIGluZm9ybWF0aW9uICovCisJaG9zdC0+c3RhdHVzX3JlcXVlc3QgPSBmYWxzZTsKKworCS8qIENvbW1hbmQgcHJlLXByb2Nlc3Npbmcgc3RlcCAqLwogCXN3aXRjaCAoY29tbWFuZCkgewogCi0JY2FzZSBOQU5EX0NNRF9SRVNFVDoKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwkJaG9zdC0+YnVmX3N0YXJ0ID0gMDsKKwkJaG9zdC0+c3RhdHVzX3JlcXVlc3QgPSB0cnVlOworCisJCXNlbmRfY21kKGhvc3QsIGNvbW1hbmQsIHRydWUpOworCQlteGNfZG9fYWRkcl9jeWNsZShtdGQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKIAkJYnJlYWs7CiAKLQljYXNlIE5BTkRfQ01EX1JFQURPT0I6CiAJY2FzZSBOQU5EX0NNRF9SRUFEMDoKLQkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7Ci0JCQkvKiBzZW5kIHJlYWQgY29uZmlybSBjb21tYW5kICovCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMCkKKwkJCWhvc3QtPmJ1Zl9zdGFydCA9IGNvbHVtbjsKKwkJZWxzZQorCQkJaG9zdC0+YnVmX3N0YXJ0ID0gY29sdW1uICsgbXRkLT53cml0ZXNpemU7CisKKwkJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyKQorCQkJY29tbWFuZCA9IE5BTkRfQ01EX1JFQUQwOyAvKiBvbmx5IFJFQUQwIGlzIHZhbGlkICovCisKKwkJc2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgZmFsc2UpOworCQlteGNfZG9fYWRkcl9jeWNsZShtdGQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKKworCQlpZiAobXRkLT53cml0ZXNpemUgPiA1MTIpCiAJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFEU1RBUlQsIHRydWUpOwotCQkJLyogcmVhZCBmb3IgZWFjaCBBUkVBICovCi0JCQlzZW5kX3JlYWRfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKLQkJCXNlbmRfcmVhZF9wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOwotCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7Ci0JCQlzZW5kX3JlYWRfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKLQkJfSBlbHNlCi0JCQlzZW5kX3JlYWRfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKworCQlzZW5kX3BhZ2UobXRkLCBORkNfT1VUUFVUKTsKKworCQltZW1jcHkoaG9zdC0+ZGF0YV9idWYsIGhvc3QtPm1haW5fYXJlYTAsIG10ZC0+d3JpdGVzaXplKTsKKwkJY29weV9zcGFyZShtdGQsIHRydWUpOwogCQlicmVhazsKIAotCWNhc2UgTkFORF9DTURfUkVBRElEOgotCQlob3N0LT5jb2xfYWRkciA9IDA7Ci0JCXNlbmRfcmVhZF9pZChob3N0KTsKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkvKgorCQkJICogRklYTUU6IGJlZm9yZSBzZW5kIFNFUUlOIGNvbW1hbmQgZm9yIHdyaXRlIE9PQiwKKwkJCSAqIFdlIG11c3QgcmVhZCBvbmUgcGFnZSBvdXQuCisJCQkgKiBGb3IgSzlGMUdYWCBoYXMgbm8gUkVBRDEgY29tbWFuZCB0byBzZXQgY3VycmVudCBIVworCQkJICogcG9pbnRlciB0byBzcGFyZSBhcmVhLCB3ZSBtdXN0IHdyaXRlIHRoZSB3aG9sZSBwYWdlCisJCQkgKiBpbmNsdWRpbmcgT09CIHRvZ2V0aGVyLgorCQkJICovCisJCQlpZiAobXRkLT53cml0ZXNpemUgPiA1MTIpCisJCQkJLyogY2FsbCBvdXJzZWxmIHRvIHJlYWQgYSBwYWdlICovCisJCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLAorCQkJCQkJcGFnZV9hZGRyKTsKKworCQkJaG9zdC0+YnVmX3N0YXJ0ID0gY29sdW1uOworCisJCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHNwYXJlIHJlZ2lvbiAqLworCQkJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikKKwkJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFET09CLCBmYWxzZSk7CisJCX0gZWxzZSB7CisJCQlob3N0LT5idWZfc3RhcnQgPSBjb2x1bW47CisKKwkJCS8qIFNldCBwcm9ncmFtIHBvaW50ZXIgdG8gcGFnZSBzdGFydCAqLworCQkJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikKKwkJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFEMCwgZmFsc2UpOworCQl9CisKKwkJc2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgZmFsc2UpOworCQlteGNfZG9fYWRkcl9jeWNsZShtdGQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQltZW1jcHkoaG9zdC0+bWFpbl9hcmVhMCwgaG9zdC0+ZGF0YV9idWYsIG10ZC0+d3JpdGVzaXplKTsKKwkJY29weV9zcGFyZShtdGQsIGZhbHNlKTsKKwkJc2VuZF9wYWdlKG10ZCwgTkZDX0lOUFVUKTsKKwkJc2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgdHJ1ZSk7CisJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOwogCQlicmVhazsKIAotCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCWNhc2UgTkFORF9DTURfUkVBRElEOgorCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB0cnVlKTsKKwkJbXhjX2RvX2FkZHJfY3ljbGUobXRkLCBjb2x1bW4sIHBhZ2VfYWRkcik7CisJCXNlbmRfcmVhZF9pZChob3N0KTsKKwkJaG9zdC0+YnVmX3N0YXJ0ID0gY29sdW1uOwogCQlicmVhazsKIAorCWNhc2UgTkFORF9DTURfRVJBU0UxOgogCWNhc2UgTkFORF9DTURfRVJBU0UyOgorCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCBmYWxzZSk7CisJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOworCiAJCWJyZWFrOwogCX0KIH0KIAotLyogRGVmaW5lIHNvbWUgZ2VuZXJpYyBiYWQgLyBnb29kIGJsb2NrIHNjYW4gcGF0dGVybiB3aGljaCBhcmUgdXNlZAotICogd2hpbGUgc2Nhbm5pbmcgYSBkZXZpY2UgZm9yIGZhY3RvcnkgbWFya2VkIGdvb2QgLyBiYWQgYmxvY2tzLiAqLwotc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKKy8qCisgKiBUaGUgZ2VuZXJpYyBmbGFzaCBiYnQgZGVjcmlwdG9ycyBvdmVybGFwIHdpdGggb3VyIGVjYworICogaGFyZHdhcmUsIHNvIGRlZmluZSBzb21lIGkuTVggc3BlY2lmaWMgb25lcy4KKyAqLworc3RhdGljIHVpbnQ4X3QgYmJ0X3BhdHRlcm5bXSA9IHsgJ0InLCAnYicsICd0JywgJzAnIH07CitzdGF0aWMgdWludDhfdCBtaXJyb3JfcGF0dGVybltdID0geyAnMScsICd0JywgJ2InLCAnQicgfTsKIAotc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBzbWFsbHBhZ2VfbWVtb3J5YmFzZWQgPSB7Ci0JLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSwKLQkub2ZmcyA9IDUsCi0JLmxlbiA9IDEsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgYmJ0X21haW5fZGVzY3IgPSB7CisJLm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfCBOQU5EX0JCVF9XUklURQorCSAgICB8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwgTkFORF9CQlRfUEVSQ0hJUCwKKwkub2ZmcyA9IDAsCisJLmxlbiA9IDQsCisJLnZlcm9mZnMgPSA0LAorCS5tYXhibG9ja3MgPSA0LAorCS5wYXR0ZXJuID0gYmJ0X3BhdHRlcm4sCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9taXJyb3JfZGVzY3IgPSB7CisJLm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfCBOQU5EX0JCVF9XUklURQorCSAgICB8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwgTkFORF9CQlRfUEVSQ0hJUCwKKwkub2ZmcyA9IDAsCisJLmxlbiA9IDQsCisJLnZlcm9mZnMgPSA0LAorCS5tYXhibG9ja3MgPSA0LAorCS5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm4sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBteGNuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtODc3LDEyICs2ODEsMTYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1aW50MTZfdCB0bXA7CiAJaW50IGVyciA9IDAsIG5yX3BhcnRzID0gMDsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKm9vYl9zbWFsbHBhZ2UsICpvb2JfbGFyZ2VwYWdlOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGNfbmFuZF9ob3N0KSwgR0ZQX0tFUk5FTCk7CisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGNfbmFuZF9ob3N0KSArIE5BTkRfTUFYX1BBR0VTSVpFICsKKwkJCU5BTkRfTUFYX09PQlNJWkUsIEdGUF9LRVJORUwpOwogCWlmICghaG9zdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlob3N0LT5kYXRhX2J1ZiA9ICh1aW50OF90ICopKGhvc3QgKyAxKTsKKwogCWhvc3QtPmRldiA9ICZwZGV2LT5kZXY7CiAJLyogc3RydWN0dXJlcyBtdXN0IGJlIGxpbmtlZCAqLwogCXRoaXMgPSAmaG9zdC0+bmFuZDsKQEAgLTg5MCw3ICs2OTgsNyBAQAogCW10ZC0+cHJpdiA9IHRoaXM7CiAJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCW10ZC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JbXRkLT5uYW1lID0gIm14Y19uYW5kIjsKKwltdGQtPm5hbWUgPSBEUklWRVJfTkFNRTsKIAogCS8qIDUwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSA1OwpAQCAtOTIwLDQ0ICs3MjgsNDQgQEAKIAkJZ290byBlcmVzOwogCX0KIAotCWhvc3QtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwotCWlmICghaG9zdC0+cmVncykgeworCWhvc3QtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFob3N0LT5iYXNlKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJlczsKIAl9CiAKKwlob3N0LT5tYWluX2FyZWEwID0gaG9zdC0+YmFzZTsKKwlob3N0LT5tYWluX2FyZWExID0gaG9zdC0+YmFzZSArIDB4MjAwOworCisJaWYgKG5mY19pc192MjEoKSkgeworCQlob3N0LT5yZWdzID0gaG9zdC0+YmFzZSArIDB4MTAwMDsKKwkJaG9zdC0+c3BhcmUwID0gaG9zdC0+YmFzZSArIDB4MTAwMDsKKwkJaG9zdC0+c3BhcmVfbGVuID0gNjQ7CisJCW9vYl9zbWFsbHBhZ2UgPSAmbmFuZHYyX2h3X2VjY29vYl9zbWFsbHBhZ2U7CisJCW9vYl9sYXJnZXBhZ2UgPSAmbmFuZHYyX2h3X2VjY29vYl9sYXJnZXBhZ2U7CisJfSBlbHNlIGlmIChuZmNfaXNfdjEoKSkgeworCQlob3N0LT5yZWdzID0gaG9zdC0+YmFzZTsKKwkJaG9zdC0+c3BhcmUwID0gaG9zdC0+YmFzZSArIDB4ODAwOworCQlob3N0LT5zcGFyZV9sZW4gPSAxNjsKKwkJb29iX3NtYWxscGFnZSA9ICZuYW5kdjFfaHdfZWNjb29iX3NtYWxscGFnZTsKKwkJb29iX2xhcmdlcGFnZSA9ICZuYW5kdjFfaHdfZWNjb29iX2xhcmdlcGFnZTsKKwl9IGVsc2UKKwkJQlVHKCk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdCBhbmQgc3BhcmUgZW5hYmxlICovCiAJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKIAl0bXAgfD0gTkZDX0lOVF9NU0s7CisJdG1wICY9IH5ORkNfU1BfRU47CiAJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhvc3QtPmlycV93YWl0cSk7CiAKIAlob3N0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCi0JZXJyID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBteGNfbmZjX2lycSwgMCwgIm14Y19uZCIsIGhvc3QpOworCWVyciA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbXhjX25mY19pcnEsIDAsIERSSVZFUl9OQU1FLCBob3N0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVpcnE7CiAKLQlpZiAocGRhdGEtPmh3X2VjYykgewotCQl0aGlzLT5lY2MuY2FsY3VsYXRlID0gbXhjX25hbmRfY2FsY3VsYXRlX2VjYzsKLQkJdGhpcy0+ZWNjLmh3Y3RsID0gbXhjX25hbmRfZW5hYmxlX2h3ZWNjOwotCQl0aGlzLT5lY2MuY29ycmVjdCA9IG14Y19uYW5kX2NvcnJlY3RfZGF0YTsKLQkJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKLQkJdGhpcy0+ZWNjLnNpemUgPSA1MTI7Ci0JCXRoaXMtPmVjYy5ieXRlcyA9IDM7Ci0JCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7Ci0JCXRtcCB8PSBORkNfRUNDX0VOOwotCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCX0gZWxzZSB7Ci0JCXRoaXMtPmVjYy5zaXplID0gNTEyOwotCQl0aGlzLT5lY2MuYnl0ZXMgPSAzOwotCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7Ci0JCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKLQkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKLQkJdG1wICY9IH5ORkNfRUNDX0VOOwotCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCX0KLQogCS8qIFJlc2V0IE5BTkQgKi8KIAl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CiAKQEAgLTk2NiwxNiArNzc0LDQ3IEBACiAJd3JpdGV3KDB4MiwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcpOwogCiAJLyogQmxvY2tzIHRvIGJlIHVubG9ja2VkICovCi0Jd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19VTkxPQ0tTVEFSVF9CTEtBRERSKTsKLQl3cml0ZXcoMHg0MDAwLCBob3N0LT5yZWdzICsgTkZDX1VOTE9DS0VORF9CTEtBRERSKTsKKwlpZiAobmZjX2lzX3YyMSgpKSB7CisJCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfVjIxX1VOTE9DS1NUQVJUX0JMS0FERFIpOworCSAgICAgICAgd3JpdGV3KDB4ZmZmZiwgaG9zdC0+cmVncyArIE5GQ19WMjFfVU5MT0NLRU5EX0JMS0FERFIpOworCQl0aGlzLT5lY2MuYnl0ZXMgPSA5OworCX0gZWxzZSBpZiAobmZjX2lzX3YxKCkpIHsKKwkJd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19WMV9VTkxPQ0tTVEFSVF9CTEtBRERSKTsKKwkgICAgICAgIHdyaXRldygweDQwMDAsIGhvc3QtPnJlZ3MgKyBORkNfVjFfVU5MT0NLRU5EX0JMS0FERFIpOworCQl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCX0gZWxzZQorCQlCVUcoKTsKIAogCS8qIFVubG9jayBCbG9jayBDb21tYW5kIGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlICovCiAJd3JpdGV3KDB4NCwgaG9zdC0+cmVncyArIE5GQ19XUlBST1QpOwogCisJdGhpcy0+ZWNjLnNpemUgPSA1MTI7CisJdGhpcy0+ZWNjLmxheW91dCA9IG9vYl9zbWFsbHBhZ2U7CisKKwlpZiAocGRhdGEtPmh3X2VjYykgeworCQl0aGlzLT5lY2MuY2FsY3VsYXRlID0gbXhjX25hbmRfY2FsY3VsYXRlX2VjYzsKKwkJdGhpcy0+ZWNjLmh3Y3RsID0gbXhjX25hbmRfZW5hYmxlX2h3ZWNjOworCQl0aGlzLT5lY2MuY29ycmVjdCA9IG14Y19uYW5kX2NvcnJlY3RfZGF0YTsKKwkJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJdG1wIHw9IE5GQ19FQ0NfRU47CisJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJfSBlbHNlIHsKKwkJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOworCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQl0bXAgJj0gfk5GQ19FQ0NfRU47CisJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJfQorCiAJLyogTkFORCBidXMgd2lkdGggZGV0ZXJtaW5lcyBhY2Nlc3MgZnVudGlvbnMgdXNlZCBieSB1cHBlciBsYXllciAqLwotCWlmIChwZGF0YS0+d2lkdGggPT0gMikgeworCWlmIChwZGF0YS0+d2lkdGggPT0gMikKIAkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OwotCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzE2OworCisJaWYgKHBkYXRhLT5mbGFzaF9iYnQpIHsKKwkJdGhpcy0+YmJ0X3RkID0gJmJidF9tYWluX2Rlc2NyOworCQl0aGlzLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsKKwkJLyogdXBkYXRlIGZsYXNoIGJhc2VkIGJidCAqLworCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKIAl9CiAKIAkvKiBmaXJzdCBzY2FuIHRvIGZpbmQgdGhlIGRldmljZSBhbmQgZ2V0IHRoZSBwYWdlIHNpemUgKi8KQEAgLTk4NCwzOCArODIzLDggQEAKIAkJZ290byBlc2NhbjsKIAl9CiAKLQlpZiAobXRkLT53cml0ZXNpemUgPT0gMjA0OCkgewotCQlob3N0LT5wYWdlc2l6ZV8yayA9IDE7Ci0JCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAmc21hbGxwYWdlX21lbW9yeWJhc2VkOwotCX0KLQotCWlmICh0aGlzLT5lY2MubW9kZSA9PSBOQU5EX0VDQ19IVykgewotCQlzd2l0Y2ggKG10ZC0+b29ic2l6ZSkgewotCQljYXNlIDg6Ci0JCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7Ci0JCQlicmVhazsKLQkJY2FzZSAxNjoKLQkJCXRoaXMtPmVjYy5sYXlvdXQgPSAmbmFuZF9od19lY2Nvb2JfMTY7Ci0JCQlicmVhazsKLQkJY2FzZSA2NDoKLQkJCXRoaXMtPmVjYy5sYXlvdXQgPSAmbmFuZF9od19lY2Nvb2JfNjQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIHBhZ2Ugc2l6ZSBub3QgaGFuZGxlZCBieSBIVyBFQ0MgKi8KLQkJCS8qIHN3aXRjaGluZyBiYWNrIHRvIHNvZnQgRUNDICovCi0JCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKLQkJCXRoaXMtPmVjYy5ieXRlcyA9IDM7Ci0JCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7Ci0JCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0JCQl0aGlzLT5lY2MuY2FsY3VsYXRlID0gTlVMTDsKLQkJCXRoaXMtPmVjYy5jb3JyZWN0ID0gTlVMTDsKLQkJCXRoaXMtPmVjYy5od2N0bCA9IE5VTEw7Ci0JCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOwotCQkJdG1wICY9IH5ORkNfRUNDX0VOOwotCQkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWlmIChtdGQtPndyaXRlc2l6ZSA9PSAyMDQ4KQorCQl0aGlzLT5lY2MubGF5b3V0ID0gb29iX2xhcmdlcGFnZTsKIAogCS8qIHNlY29uZCBwaGFzZSBzY2FuICovCiAJaWYgKG5hbmRfc2Nhbl90YWlsKG10ZCkpIHsKQEAgLTEwNDMsNyArODUyLDcgQEAKIGVzY2FuOgogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiBlaXJxOgotCWlvdW5tYXAoaG9zdC0+cmVncyk7CisJaW91bm1hcChob3N0LT5iYXNlKTsKIGVyZXM6CiAJY2xrX3B1dChob3N0LT5jbGspOwogZWNsazoKQEAgLTEwNjIsNyArODcxLDcgQEAKIAogCW5hbmRfcmVsZWFzZSgmaG9zdC0+bXRkKTsKIAlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwotCWlvdW5tYXAoaG9zdC0+cmVncyk7CisJaW91bm1hcChob3N0LT5iYXNlKTsKIAlrZnJlZShob3N0KTsKIAogCXJldHVybiAwOwpAQCAtMTExMyw3ICs5MjIsNyBAQAogCS5kcml2ZXIgPSB7CiAJCSAgIC5uYW1lID0gRFJJVkVSX05BTUUsCiAJCSAgIH0sCi0JLnJlbW92ZSA9IF9fZXhpdF9wKG14Y25kX3JlbW92ZSksCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG14Y25kX3JlbW92ZSksCiAJLnN1c3BlbmQgPSBteGNuZF9zdXNwZW5kLAogCS5yZXN1bWUgPSBteGNuZF9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggMjk1N2NjNy4uOGYyOTU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC00MjgsNiArNDI4LDI4IEBACiAJcmV0dXJuIG5hbmRfaXNiYWRfYmJ0KG10ZCwgb2ZzLCBhbGxvd2JidCk7CiB9CiAKKy8qKgorICogcGFuaWNfbmFuZF93YWl0X3JlYWR5IC0gW0dFTkVSSUNdIFdhaXQgZm9yIHRoZSByZWFkeSBwaW4gYWZ0ZXIgY29tbWFuZHMuCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRpbWVvOglUaW1lb3V0CisgKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBuYW5kX3dhaXRfcmVhZHkgdXNlZCB3aGVuIG5lZWRpbmcgdG8gd2FpdCBpbiBpbnRlcnJ1cHQKKyAqIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHBhbmljX25hbmRfd2FpdF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgbG9uZyB0aW1lbykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCBpOworCisJLyogV2FpdCBmb3IgdGhlIGRldmljZSB0byBnZXQgcmVhZHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW87IGkrKykgeworCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KG10ZCkpCisJCQlicmVhazsKKwkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCQltZGVsYXkoMSk7CisJfQorfQorCiAvKgogICogV2FpdCBmb3IgdGhlIHJlYWR5IHBpbiwgYWZ0ZXIgYSBjb21tYW5kCiAgKiBUaGUgdGltZW91dCBpcyBjYXRjaGVkIGxhdGVyLgpAQCAtNDM3LDYgKzQ1OSwxMCBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdW5zaWduZWQgbG9uZyB0aW1lbyA9IGppZmZpZXMgKyAyOwogCisJLyogNDAwbXMgdGltZW91dCAqLworCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCBvb3BzX2luX3Byb2dyZXNzKQorCQlyZXR1cm4gcGFuaWNfbmFuZF93YWl0X3JlYWR5KG10ZCwgNDAwKTsKKwogCWxlZF90cmlnZ2VyX2V2ZW50KG5hbmRfbGVkX3RyaWdnZXIsIExFRF9GVUxMKTsKIAkvKiB3YWl0IHVudGlsIGNvbW1hbmQgaXMgcHJvY2Vzc2VkIG9yIHRpbWVvdXQgb2NjdXJlcyAqLwogCWRvIHsKQEAgLTY3Miw2ICs2OTgsMjIgQEAKIH0KIAogLyoqCisgKiBwYW5pY19uYW5kX2dldF9kZXZpY2UgLSBbR0VORVJJQ10gR2V0IGNoaXAgZm9yIHNlbGVjdGVkIGFjY2VzcworICogQGNoaXA6CXRoZSBuYW5kIGNoaXAgZGVzY3JpcHRvcgorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBuZXdfc3RhdGU6CXRoZSBzdGF0ZSB3aGljaCBpcyByZXF1ZXN0ZWQKKyAqCisgKiBVc2VkIHdoZW4gaW4gcGFuaWMsIG5vIGxvY2tzIGFyZSB0YWtlbi4KKyAqLworc3RhdGljIHZvaWQgcGFuaWNfbmFuZF9nZXRfZGV2aWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCSAgICAgIHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbmV3X3N0YXRlKQoreworCS8qIEhhcmR3YXJlIGNvbnRyb2xsZXIgc2hhcmVkIGFtb25nIGluZGVwZW5kZW5kIGRldmljZXMgKi8KKwljaGlwLT5jb250cm9sbGVyLT5hY3RpdmUgPSBjaGlwOworCWNoaXAtPnN0YXRlID0gbmV3X3N0YXRlOworfQorCisvKioKICAqIG5hbmRfZ2V0X2RldmljZSAtIFtHRU5FUklDXSBHZXQgY2hpcCBmb3Igc2VsZWN0ZWQgYWNjZXNzCiAgKiBAY2hpcDoJdGhlIG5hbmQgY2hpcCBkZXNjcmlwdG9yCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNjk4LDggKzc0MCwxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKG5ld19zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpIHsKLQkJc3Bpbl91bmxvY2sobG9jayk7Ci0JCXJldHVybiAoY2hpcC0+c3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKSA/IDAgOiAtRUFHQUlOOworCQlpZiAoY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpIHsKKwkJCWNoaXAtPnN0YXRlID0gRkxfUE1fU1VTUEVOREVEOworCQkJc3Bpbl91bmxvY2sobG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrKGxvY2spOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCWFkZF93YWl0X3F1ZXVlKHdxLCAmd2FpdCk7CkBAIC03MTAsNiArNzU4LDMyIEBACiB9CiAKIC8qKgorICogcGFuaWNfbmFuZF93YWl0IC0gW0dFTkVSSUNdICB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGRvbmUKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2hpcDoJTkFORCBjaGlwIHN0cnVjdHVyZQorICogQHRpbWVvOglUaW1lb3V0CisgKgorICogV2FpdCBmb3IgY29tbWFuZCBkb25lLiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBuYW5kX3dhaXQgdXNlZCB3aGVuCisgKiB3ZSBhcmUgaW4gaW50ZXJydXB0IGNvbnRleHQuIE1heSBoYXBwZW4gd2hlbiBpbiBwYW5pYyBhbmQgdHJ5aW5nIHRvIHdyaXRlCisgKiBhbiBvb3BzIHRyb3VnaCBtdGRvb3BzLgorICovCitzdGF0aWMgdm9pZCBwYW5pY19uYW5kX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgICAgdW5zaWduZWQgbG9uZyB0aW1lbykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgdGltZW87IGkrKykgeworCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KSB7CisJCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KG10ZCkpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoY2hpcC0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkKKwkJCQlicmVhazsKKwkJfQorCQltZGVsYXkoMSk7CisgICAgICAgIH0KK30KKworLyoqCiAgKiBuYW5kX3dhaXQgLSBbREVGQVVMVF0gIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMgZG9uZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBjaGlwOglOQU5EIGNoaXAgc3RydWN0dXJlCkBAIC03NDAsMTUgKzgxNCwxOSBAQAogCWVsc2UKIAkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVUywgLTEsIC0xKTsKIAotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lbykpIHsKLQkJaWYgKGNoaXAtPmRldl9yZWFkeSkgewotCQkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJaWYgKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpCi0JCQkJYnJlYWs7CisJaWYgKGluX2ludGVycnVwdCgpIHx8IG9vcHNfaW5fcHJvZ3Jlc3MpCisJCXBhbmljX25hbmRfd2FpdChtdGQsIGNoaXAsIHRpbWVvKTsKKwllbHNlIHsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvKSkgeworCQkJaWYgKGNoaXAtPmRldl9yZWFkeSkgeworCQkJCWlmIChjaGlwLT5kZXZfcmVhZHkobXRkKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmIChjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWNvbmRfcmVzY2hlZCgpOwogCQl9Ci0JCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlsZWRfdHJpZ2dlcl9ldmVudChuYW5kX2xlZF90cmlnZ2VyLCBMRURfT0ZGKTsKIApAQCAtMTk0OSw2ICsyMDI3LDQ1IEBACiB9CiAKIC8qKgorICogcGFuaWNfbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCisgKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQorICoKKyAqIE5BTkQgd3JpdGUgd2l0aCBFQ0MuIFVzZWQgd2hlbiBwZXJmb3JtaW5nIHdyaXRlcyBpbiBpbnRlcnJ1cHQgY29udGV4dCwgdGhpcworICogbWF5IGZvciBleGFtcGxlIGJlIGNhbGxlZCBieSBtdGRvb3BzIHdoZW4gd3JpdGluZyBhbiBvb3BzIHdoaWxlIGluIHBhbmljLgorICovCitzdGF0aWMgaW50IHBhbmljX25hbmRfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwkJCSAgICBzaXplX3QgKnJldGxlbiwgY29uc3QgdWludDhfdCAqYnVmKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldDsKKworCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KKwlpZiAoKHRvICsgbGVuKSA+IG10ZC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJLyogV2FpdCBmb3IgdGhlIGRldmljZSB0byBnZXQgcmVhZHkuICAqLworCXBhbmljX25hbmRfd2FpdChtdGQsIGNoaXAsIDQwMCk7CisKKwkvKiBHcmFiIHRoZSBkZXZpY2UuICAqLworCXBhbmljX25hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1dSSVRJTkcpOworCisJY2hpcC0+b3BzLmxlbiA9IGxlbjsKKwljaGlwLT5vcHMuZGF0YnVmID0gKHVpbnQ4X3QgKilidWY7CisJY2hpcC0+b3BzLm9vYmJ1ZiA9IE5VTEw7CisKKwlyZXQgPSBuYW5kX2RvX3dyaXRlX29wcyhtdGQsIHRvLCAmY2hpcC0+b3BzKTsKKworCSpyZXRsZW4gPSBjaGlwLT5vcHMucmV0bGVuOworCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIHdpdGggRUNDCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCkBAIC0yNjQ1LDcgKzI3NjIsOCBAQAogCXR5cGUgPSBuYW5kX2dldF9mbGFzaF90eXBlKG10ZCwgY2hpcCwgYnVzdywgJm5hbmRfbWFmX2lkKTsKIAogCWlmIChJU19FUlIodHlwZSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gTkFORCBkZXZpY2UgZm91bmQhISFcbiIpOworCQlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9TQ0FOX1NJTEVOVF9OT0RFVikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBOQU5EIGRldmljZSBmb3VuZC5cbiIpOwogCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKIAkJcmV0dXJuIFBUUl9FUlIodHlwZSk7CiAJfQpAQCAtMjg3Nyw2ICsyOTk1LDcgQEAKIAltdGQtPnVucG9pbnQgPSBOVUxMOwogCW10ZC0+cmVhZCA9IG5hbmRfcmVhZDsKIAltdGQtPndyaXRlID0gbmFuZF93cml0ZTsKKwltdGQtPnBhbmljX3dyaXRlID0gcGFuaWNfbmFuZF93cml0ZTsKIAltdGQtPnJlYWRfb29iID0gbmFuZF9yZWFkX29vYjsKIAltdGQtPndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iOwogCW10ZC0+c3luYyA9IG5hbmRfc3luYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iY21fdW1pLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmNtX3VtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTZiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmNtX3VtaS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPG1hY2gvcmVnX3VtaS5oPgorI2luY2x1ZGUgIm5hbmRfYmNtX3VtaS5oIgorI2lmZGVmIEJPT1QwX0JVSUxECisjaW5jbHVkZSA8dWFydC5oPgorI2VuZGlmCisKKy8qIC0tLS0gRXh0ZXJuYWwgVmFyaWFibGUgRGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIEV4dGVybmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHJpdmF0ZSBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFByaXZhdGUgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQcml2YXRlIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHJpdmF0ZSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBOQU5EX0VDQ19CQ0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBuYW5kX2JjaF9lY2NfZmxpcF9iaXQgLSBSb3V0aW5lIHRvIGZsaXAgYW4gZXJyb3JlZCBiaXQKKyoKKyogIFBVUlBPU0U6CisqICAgICBUaGlzIGlzIGEgaGVscGVyIHJvdXRpbmUgdGhhdCBmbGlwcyB0aGUgYml0ICgwIC0+IDEgb3IgMSAtPiAwKSBvZiB0aGUKKyogICAgIGVycm9yZWQgYml0IHNwZWNpZmllZAorKgorKiAgUEFSQU1FVEVSUzoKKyogICAgIGRhdGFwIC0gQ29udGFpbmVyIHRoYXQgaG9sZHMgdGhlIDUxMiBieXRlIGRhdGEKKyogICAgIGVycm9yTG9jYXRpb24gLSBMb2NhdGlvbiBvZiB0aGUgYml0IHRoYXQgbmVlZHMgdG8gYmUgZmxpcHBlZAorKgorKiAgUkVUVVJOUzoKKyogICAgIE5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBuYW5kX2JjbV91bWlfYmNoX2VjY19mbGlwX2JpdCh1aW50OF90ICpkYXRhcCwgaW50IGVycm9yTG9jYXRpb24pCit7CisJaW50IGxvY1dpdGhpbkFCeXRlID0gKGVycm9yTG9jYXRpb24gJiBSRUdfVU1JX0JDSF9FUlJfTE9DX0JZVEUpID4+IDA7CisJaW50IGxvY1dpdGhpbkFXb3JkID0gKGVycm9yTG9jYXRpb24gJiBSRUdfVU1JX0JDSF9FUlJfTE9DX1dPUkQpID4+IDM7CisJaW50IGxvY1dpdGhpbkFQYWdlID0gKGVycm9yTG9jYXRpb24gJiBSRUdfVU1JX0JDSF9FUlJfTE9DX1BBR0UpID4+IDU7CisKKwl1aW50OF90IGVycm9yQnl0ZSA9IDA7CisJdWludDhfdCBieXRlTWFzayA9IDEgPDwgbG9jV2l0aGluQUJ5dGU7CisKKwkvKiBCQ0ggdXNlcyBiaWcgZW5kaWFuLCBuZWVkIHRvIGNoYW5nZSB0aGUgbG9jYXRpb24KKwkgKiBiaXRzIHRvIGxpdHRsZSBlbmRpYW4gKi8KKwlsb2NXaXRoaW5BV29yZCA9IDMgLSBsb2NXaXRoaW5BV29yZDsKKworCWVycm9yQnl0ZSA9IGRhdGFwW2xvY1dpdGhpbkFQYWdlICogc2l6ZW9mKHVpbnQzMl90KSArIGxvY1dpdGhpbkFXb3JkXTsKKworI2lmZGVmIEJPT1QwX0JVSUxECisJcHV0aGV4cygiXG5FQ0MgQ29ycmVjdCBPZmZzZXQ6ICIsCisJCWxvY1dpdGhpbkFQYWdlICogc2l6ZW9mKHVpbnQzMl90KSArIGxvY1dpdGhpbkFXb3JkKTsKKwlwdXRoZXhzKCIgZXJyb3JCeXRlOiIsIGVycm9yQnl0ZSk7CisJcHV0aGV4OCgiIEJpdDogIiwgbG9jV2l0aGluQUJ5dGUpOworI2VuZGlmCisKKwlpZiAoZXJyb3JCeXRlICYgYnl0ZU1hc2spIHsKKwkJLyogYml0IG5lZWRzIHRvIGJlIGNsZWFyZWQgKi8KKwkJZXJyb3JCeXRlICY9IH5ieXRlTWFzazsKKwl9IGVsc2UgeworCQkvKiBiaXQgbmVlZHMgdG8gYmUgc2V0ICovCisJCWVycm9yQnl0ZSB8PSBieXRlTWFzazsKKwl9CisKKwkvKiB3cml0ZSBiYWNrIHRoZSB2YWx1ZSB3aXRoIHRoZSBmaXhlZCBiaXQgKi8KKwlkYXRhcFtsb2NXaXRoaW5BUGFnZSAqIHNpemVvZih1aW50MzJfdCkgKyBsb2NXaXRoaW5BV29yZF0gPSBlcnJvckJ5dGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBuYW5kX2NvcnJlY3RfcGFnZV9iY2ggLSBSb3V0aW5lIHRvIGNvcnJlY3QgYml0IGVycm9ycyB3aGVuIHJlYWRpbmcgTkFORAorKgorKiAgUFVSUE9TRToKKyogICAgIFRoaXMgcm91dGluZSByZWFkcyB0aGUgQkNIIHJlZ2lzdGVycyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBiaXQKKyogICAgIGVycm9ycyBkdXJpbmcgdGhlIHJlYWQgb2YgdGhlIGxhc3QgNTEyIGJ5dGVzIG9mIGRhdGEgKyBFQ0MgYnl0ZXMuICBJZgorKiAgICAgZXJyb3JzIGV4aXN0cywgdGhlIHJvdXRpbmUgZml4ZXMgaXQuCisqCisqICBQQVJBTUVURVJTOgorKiAgICAgZGF0YXAgLSBDb250YWluZXIgdGhhdCBob2xkcyB0aGUgNTEyIGJ5dGUgZGF0YQorKgorKiAgUkVUVVJOUzoKKyogICAgIDAgb3IgZ3JlYXRlciA9IE51bWJlciBvZiBlcnJvcnMgY29ycmVjdGVkCisqICAgICAgICAgICAgICAgICAgICAoTm8gZXJyb3JzIGFyZSBmb3VuZCBvciBlcnJvcnMgaGF2ZSBiZWVuIGZpeGVkKQorKiAgICAtMSA9IEVycm9yKHMpIGNhbm5vdCBiZSBmaXhlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBuYW5kX2JjbV91bWlfYmNoX2NvcnJlY3RfcGFnZSh1aW50OF90ICpkYXRhcCwgdWludDhfdCAqcmVhZEVjY0RhdGEsCisJCQkJICBpbnQgbnVtRWNjQnl0ZXMpCit7CisJaW50IG51bUVycm9yczsKKwlpbnQgZXJyb3JMb2NhdGlvbjsKKwlpbnQgaWR4OworCXVpbnQzMl90IHJlZ1ZhbHVlOworCisJLyogd2FpdCBmb3IgcmVhZCBFQ0MgdG8gYmUgdmFsaWQgKi8KKwlyZWdWYWx1ZSA9IG5hbmRfYmNtX3VtaV9iY2hfcG9sbF9yZWFkX2VjY19jYWxjKCk7CisKKwkvKgorCSAqIHJlYWQgdGhlIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiB0aGVyZQorCSAqIGFyZSBlcnJvcidlZCBiaXRzCisJICogc2VlIGlmIGVycm9ycyBhcmUgY29ycmVjdGlibGUKKwkgKi8KKwlpZiAoKHJlZ1ZhbHVlICYgUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfVU5DT1JSX0VSUikgPiAwKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1FY2NCeXRlczsgaSsrKSB7CisJCQlpZiAocmVhZEVjY0RhdGFbaV0gIT0gMHhmZikgeworCQkJCS8qIGVycm9ycyBjYW5ub3QgYmUgZml4ZWQsIHJldHVybiAtMSAqLworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCQkvKiBJZiBFQ0MgaXMgdW5wcm9ncmFtbWVkIHRoZW4gd2UgY2FuJ3QgY29ycmVjdCwKKwkJICogYXNzdW1lIGV2ZXJ5dGhpbmcgT0sgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChyZWdWYWx1ZSAmIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX0NPUlJfRVJSKSA9PSAwKSB7CisJCS8qIG5vIGVycm9ycyAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEZpeCBlcnJvcmVkIGJpdHMgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKwkgKiAxLiBSZWFkIHRoZSBudW1iZXIgb2YgZXJyb3JzIGluIHRoZSBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKwkgKiAyLiBSZWFkIHRoZSBlcnJvciBsb2NhdGlvbiByZWdpc3RlcnMgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyCisJICogICAgb2YgZXJyb3JzIHJlcG9ydGVkCisJICogMy4gSW52ZXJ0IHRoZSBiaXQgaW4gdGhlIGRhdGEKKwkgKi8KKwludW1FcnJvcnMgPSAocmVnVmFsdWUgJiBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19OQl9DT1JSX0VSUk9SKSA+PiAyMDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnVtRXJyb3JzOyBpZHgrKykgeworCQllcnJvckxvY2F0aW9uID0KKwkJICAgIFJFR19VTUlfQkNIX0VSUl9MT0NfQUREUihpZHgpICYgUkVHX1VNSV9CQ0hfRVJSX0xPQ19NQVNLOworCisJCS8qIEZsaXAgYml0ICovCisJCW5hbmRfYmNtX3VtaV9iY2hfZWNjX2ZsaXBfYml0KGRhdGFwLCBlcnJvckxvY2F0aW9uKTsKKwl9CisJLyogRXJyb3JzIGNvcnJlY3RlZCAqLworCXJldHVybiBudW1FcnJvcnM7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iY21fdW1pLmggYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmNtX3VtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZWMyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmNtX3VtaS5oCkBAIC0wLDAgKzEsMzU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBOQU5EX0JDTV9VTUlfSAorI2RlZmluZSBOQU5EX0JDTV9VTUlfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPG1hY2gvcmVnX3VtaS5oPgorI2luY2x1ZGUgPG1hY2gvcmVnX25hbmQuaD4KKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisKKy8qIC0tLS0gQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgKENGR19HTE9CQUxfQ0hJUF9GQU1JTFkgPT0gQ0ZHX0dMT0JBTF9DSElQX0ZBTUlMWV9CQ01SSU5HKQorI2RlZmluZSBOQU5EX0VDQ19CQ0ggKENGR19HTE9CQUxfQ0hJUF9SRVYgPiAweEEwKQorI2Vsc2UKKyNkZWZpbmUgTkFORF9FQ0NfQkNIIDAKKyNlbmRpZgorCisjZGVmaW5lIENGR19HTE9CQUxfTkFORF9FQ0NfQkNIX05VTV9CWVRFUwkxMworCisjaWYgTkFORF9FQ0NfQkNICisjaWZkZWYgQk9PVDBfQlVJTEQKKyNkZWZpbmUgTkFORF9FQ0NfTlVNX0JZVEVTIDEzCisjZWxzZQorI2RlZmluZSBOQU5EX0VDQ19OVU1fQllURVMgQ0ZHX0dMT0JBTF9OQU5EX0VDQ19CQ0hfTlVNX0JZVEVTCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIE5BTkRfRUNDX05VTV9CWVRFUyAzCisjZW5kaWYKKworI2RlZmluZSBOQU5EX0RBVEFfQUNDRVNTX1NJWkUgNTEyCisKKy8qIC0tLS0gVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2ludCBuYW5kX2JjbV91bWlfYmNoX2NvcnJlY3RfcGFnZSh1aW50OF90ICpkYXRhcCwgdWludDhfdCAqcmVhZEVjY0RhdGEsCisJCQkJICBpbnQgbnVtRWNjQnl0ZXMpOworCisvKiBDaGVjayBpbiBkZXZpY2UgaXMgcmVhZHkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5hbmRfYmNtX3VtaV9kZXZfcmVhZHkodm9pZCkKK3sKKwlyZXR1cm4gUkVHX1VNSV9OQU5EX1JDU1IgJiBSRUdfVU1JX05BTkRfUkNTUl9SRFk7Cit9CisKKy8qIFdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmFuZF9iY21fdW1pX3dhaXRfdGlsbF9yZWFkeSh2b2lkKQoreworCXdoaWxlIChuYW5kX2JjbV91bWlfZGV2X3JlYWR5KCkgPT0gMCkKKwkJOworfQorCisvKiBFbmFibGUgSGFtbWluZyBFQ0MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW5kX2JjbV91bWlfaGFtbWluZ19lbmFibGVfaHdlY2Modm9pZCkKK3sKKwkvKiBkaXNhYmxlIGFuZCByZXNldCBFQ0MsIDUxMiBieXRlIHBhZ2UgKi8KKwlSRUdfVU1JX05BTkRfRUNDX0NTUiAmPSB+KFJFR19VTUlfTkFORF9FQ0NfQ1NSX0VDQ19FTkFCTEUgfAorCQlSRUdfVU1JX05BTkRfRUNDX0NTUl8yNTZCWVRFKTsKKwkvKiBlbmFibGUgRUNDICovCisJUkVHX1VNSV9OQU5EX0VDQ19DU1IgfD0gUkVHX1VNSV9OQU5EX0VDQ19DU1JfRUNDX0VOQUJMRTsKK30KKworI2lmIE5BTkRfRUNDX0JDSAorLyogQkNIIEVDQyBzcGVjaWZpY3MgKi8KKyNkZWZpbmUgRUNDX0JJVFNfUEVSX0NPUlJFQ1RBQkxFX0JJVCAxMworCisvKiBFbmFibGUgQkNIIFJlYWQgRUNDICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmFuZF9iY21fdW1pX2JjaF9lbmFibGVfcmVhZF9od2VjYyh2b2lkKQoreworCS8qIGRpc2FibGUgYW5kIHJlc2V0IEVDQyAqLworCVJFR19VTUlfQkNIX0NUUkxfU1RBVFVTID0gUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfUkRfRUNDX1ZBTElEOworCS8qIFR1cm4gb24gRUNDICovCisJUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVMgPSBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19FQ0NfUkRfRU47Cit9CisKKy8qIEVuYWJsZSBCQ0ggV3JpdGUgRUNDICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmFuZF9iY21fdW1pX2JjaF9lbmFibGVfd3JpdGVfaHdlY2Modm9pZCkKK3sKKwkvKiBkaXNhYmxlIGFuZCByZXNldCBFQ0MgKi8KKwlSRUdfVU1JX0JDSF9DVFJMX1NUQVRVUyA9IFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX1dSX0VDQ19WQUxJRDsKKwkvKiBUdXJuIG9uIEVDQyAqLworCVJFR19VTUlfQkNIX0NUUkxfU1RBVFVTID0gUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfRUNDX1dSX0VOOworfQorCisvKiBDb25maWcgbnVtYmVyIG9mIEJDSCBFQ0MgYnl0ZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW5kX2JjbV91bWlfYmNoX2NvbmZpZ19lY2ModWludDhfdCBudW1FY2NCeXRlcykKK3sKKwl1aW50MzJfdCBuVmFsdWU7CisJdWludDMyX3QgdFZhbHVlOworCXVpbnQzMl90IGtWYWx1ZTsKKwl1aW50MzJfdCBudW1CaXRzID0gbnVtRWNjQnl0ZXMgKiA4OworCisJLyogZGlzYWJsZSBhbmQgcmVzZXQgRUNDICovCisJUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVMgPQorCSAgICBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19XUl9FQ0NfVkFMSUQgfAorCSAgICBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVU19SRF9FQ0NfVkFMSUQ7CisKKwkvKiBFdmVyeSBjb3JyZWN0aWJsZSBiaXQgcmVxdWlyZXMgMTMgRUNDIGJpdHMgKi8KKwl0VmFsdWUgPSAodWludDMyX3QpIChudW1CaXRzIC8gRUNDX0JJVFNfUEVSX0NPUlJFQ1RBQkxFX0JJVCk7CisKKwkvKiBUb3RhbCBkYXRhIGluIG51bWJlciBvZiBiaXRzIGZvciBnZW5lcmF0aW5nIGFuZCBjb21wdXRpbmcgQkNIIEVDQyAqLworCW5WYWx1ZSA9IChOQU5EX0RBVEFfQUNDRVNTX1NJWkUgKyBudW1FY2NCeXRlcykgKiA4OworCisJLyogSyBwYXJhbWV0ZXIgaXMgdXNlZCBpbnRlcm5hbGx5LiAgSyA9IE4gLSAoVCAqIDEzKSAqLworCWtWYWx1ZSA9IG5WYWx1ZSAtICh0VmFsdWUgKiBFQ0NfQklUU19QRVJfQ09SUkVDVEFCTEVfQklUKTsKKworCS8qIFdyaXRlIHRoZSBzZXR0aW5ncyAqLworCVJFR19VTUlfQkNIX04gPSBuVmFsdWU7CisJUkVHX1VNSV9CQ0hfVCA9IHRWYWx1ZTsKKwlSRUdfVU1JX0JDSF9LID0ga1ZhbHVlOworfQorCisvKiBQYXVzZSBkdXJpbmcgRUNDIHJlYWQgY2FsY3VsYXRpb24gdG8gc2tpcCBieXRlcyBpbiBPT0IgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW5kX2JjbV91bWlfYmNoX3BhdXNlX3JlYWRfZWNjX2NhbGModm9pZCkKK3sKKwlSRUdfVU1JX0JDSF9DVFJMX1NUQVRVUyA9CisJICAgIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX0VDQ19SRF9FTiB8CisJICAgIFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTX1BBVVNFX0VDQ19ERUM7Cit9CisKKy8qIFJlc3VtZSBkdXJpbmcgRUNDIHJlYWQgY2FsY3VsYXRpb24gYWZ0ZXIgc2tpcHBpbmcgYnl0ZXMgaW4gT09CICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmFuZF9iY21fdW1pX2JjaF9yZXN1bWVfcmVhZF9lY2NfY2FsYyh2b2lkKQoreworCVJFR19VTUlfQkNIX0NUUkxfU1RBVFVTID0gUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfRUNDX1JEX0VOOworfQorCisvKiBQb2xsIHJlYWQgRUNDIGNhbGMgdG8gY2hlY2sgd2hlbiBoYXJkd2FyZSBjb21wbGV0ZXMgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbmFuZF9iY21fdW1pX2JjaF9wb2xsX3JlYWRfZWNjX2NhbGModm9pZCkKK3sKKwl1aW50MzJfdCByZWdWYWw7CisKKwlkbyB7CisJCS8qIHdhaXQgZm9yIEVDQyB0byBiZSB2YWxpZCAqLworCQlyZWdWYWwgPSBSRUdfVU1JX0JDSF9DVFJMX1NUQVRVUzsKKwl9IHdoaWxlICgocmVnVmFsICYgUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfUkRfRUNDX1ZBTElEKSA9PSAwKTsKKworCXJldHVybiByZWdWYWw7Cit9CisKKy8qIFBvbGwgd3JpdGUgRUNDIGNhbGMgdG8gY2hlY2sgd2hlbiBoYXJkd2FyZSBjb21wbGV0ZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW5kX2JjbV91bWlfYmNoX3BvbGxfd3JpdGVfZWNjX2NhbGModm9pZCkKK3sKKwkvKiB3YWl0IGZvciBFQ0MgdG8gYmUgdmFsaWQgKi8KKwl3aGlsZSAoKFJFR19VTUlfQkNIX0NUUkxfU1RBVFVTICYgUkVHX1VNSV9CQ0hfQ1RSTF9TVEFUVVNfV1JfRUNDX1ZBTElEKQorCSAgICAgICA9PSAwKQorCQk7Cit9CisKKy8qIFJlYWQgdGhlIE9PQiBhbmQgRUNDLCBmb3Iga2VybmVsIHdyaXRlIE9PQiB0byBhIGJ1ZmZlciAqLworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoU1RBTkRBTE9ORSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW5kX2JjbV91bWlfYmNoX3JlYWRfb29iRWNjKHVpbnQzMl90IHBhZ2VTaXplLAorCXVpbnQ4X3QgKmVjY0NhbGMsIGludCBudW1FY2NCeXRlcywgdWludDhfdCAqb29icCkKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbmFuZF9iY21fdW1pX2JjaF9yZWFkX29vYkVjYyh1aW50MzJfdCBwYWdlU2l6ZSwKKwl1aW50OF90ICplY2NDYWxjLCBpbnQgbnVtRWNjQnl0ZXMpCisjZW5kaWYKK3sKKwlpbnQgZWNjUG9zID0gMDsKKwlpbnQgbnVtVG9SZWFkID0gMTY7CS8qIFRoZXJlIGFyZSAxNiBieXRlcyBwZXIgc2VjdG9yIGluIHRoZSBPT0IgKi8KKworCS8qIEVDQyBpcyBhbHJlYWR5IHBhdXNlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkICovCisKKwlpZiAocGFnZVNpemUgPT0gTkFORF9EQVRBX0FDQ0VTU19TSVpFKSB7CisJCXdoaWxlIChudW1Ub1JlYWQgPiBudW1FY2NCeXRlcykgeworCQkJLyogc2tpcCBmcmVlIG9vYiByZWdpb24gKi8KKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisJCQkqb29icCsrID0gUkVHX05BTkRfREFUQTg7CisjZWxzZQorCQkJUkVHX05BTkRfREFUQTg7CisjZW5kaWYKKwkJCW51bVRvUmVhZC0tOworCQl9CisKKwkJLyogcmVhZCBFQ0MgYnl0ZXMgYmVmb3JlIEJJICovCisJCW5hbmRfYmNtX3VtaV9iY2hfcmVzdW1lX3JlYWRfZWNjX2NhbGMoKTsKKworCQl3aGlsZSAobnVtVG9SZWFkID4gMTEpIHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisJCQkqb29icCA9IFJFR19OQU5EX0RBVEE4OworCQkJZWNjQ2FsY1tlY2NQb3MrK10gPSAqb29icDsKKwkJCW9vYnArKzsKKyNlbHNlCisJCQllY2NDYWxjW2VjY1BvcysrXSA9IFJFR19OQU5EX0RBVEE4OworI2VuZGlmCisJCX0KKworCQluYW5kX2JjbV91bWlfYmNoX3BhdXNlX3JlYWRfZWNjX2NhbGMoKTsKKworCQlpZiAobnVtVG9SZWFkID09IDExKSB7CisJCQkvKiByZWFkIEJJICovCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChTVEFOREFMT05FKQorCQkJKm9vYnArKyA9IFJFR19OQU5EX0RBVEE4OworI2Vsc2UKKwkJCVJFR19OQU5EX0RBVEE4OworI2VuZGlmCisJCQludW1Ub1JlYWQtLTsKKwkJfQorCisJCS8qIHJlYWQgRUNDIGJ5dGVzICovCisJCW5hbmRfYmNtX3VtaV9iY2hfcmVzdW1lX3JlYWRfZWNjX2NhbGMoKTsKKwkJd2hpbGUgKG51bVRvUmVhZCkgeworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoU1RBTkRBTE9ORSkKKwkJCSpvb2JwID0gUkVHX05BTkRfREFUQTg7CisJCQllY2NDYWxjW2VjY1BvcysrXSA9ICpvb2JwOworCQkJb29icCsrOworI2Vsc2UKKwkJCWVjY0NhbGNbZWNjUG9zKytdID0gUkVHX05BTkRfREFUQTg7CisjZW5kaWYKKwkJCW51bVRvUmVhZC0tOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2tpcCBCSSAqLworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoU1RBTkRBTE9ORSkKKwkJKm9vYnArKyA9IFJFR19OQU5EX0RBVEE4OworI2Vsc2UKKwkJUkVHX05BTkRfREFUQTg7CisjZW5kaWYKKwkJbnVtVG9SZWFkLS07CisKKwkJd2hpbGUgKG51bVRvUmVhZCA+IG51bUVjY0J5dGVzKSB7CisJCQkvKiBza2lwIGZyZWUgb29iIHJlZ2lvbiAqLworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoU1RBTkRBTE9ORSkKKwkJCSpvb2JwKysgPSBSRUdfTkFORF9EQVRBODsKKyNlbHNlCisJCQlSRUdfTkFORF9EQVRBODsKKyNlbmRpZgorCQkJbnVtVG9SZWFkLS07CisJCX0KKworCQkvKiByZWFkIEVDQyBieXRlcyAqLworCQluYW5kX2JjbV91bWlfYmNoX3Jlc3VtZV9yZWFkX2VjY19jYWxjKCk7CisJCXdoaWxlIChudW1Ub1JlYWQpIHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisJCQkqb29icCA9IFJFR19OQU5EX0RBVEE4OworCQkJZWNjQ2FsY1tlY2NQb3MrK10gPSAqb29icDsKKwkJCW9vYnArKzsKKyNlbHNlCisJCQllY2NDYWxjW2VjY1BvcysrXSA9IFJFR19OQU5EX0RBVEE4OworI2VuZGlmCisJCQludW1Ub1JlYWQtLTsKKwkJfQorCX0KK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIHdyaXRlIEVDQyAqLworc3RhdGljIGlubGluZSB2b2lkIE5BTkRfQkNNX1VNSV9FQ0NfV1JJVEUoaW50IG51bUVjY0J5dGVzLCBpbnQgZWNjQnl0ZVBvcywKKwkJCQkJICB1aW50OF90ICpvb2JwLCB1aW50OF90IGVjY1ZhbCkKK3sKKwlpZiAoZWNjQnl0ZVBvcyA8PSBudW1FY2NCeXRlcykKKwkJKm9vYnAgPSBlY2NWYWw7Cit9CisKKy8qIFdyaXRlIE9PQiB3aXRoIEVDQyAqLworc3RhdGljIGlubGluZSB2b2lkIG5hbmRfYmNtX3VtaV9iY2hfd3JpdGVfb29iRWNjKHVpbnQzMl90IHBhZ2VTaXplLAorCQkJCQkJIHVpbnQ4X3QgKm9vYnAsIGludCBudW1FY2NCeXRlcykKK3sKKwl1aW50MzJfdCBlY2NWYWwgPSAweGZmZmZmZmZmOworCisJLyogd2FpdCBmb3Igd3JpdGUgRUNDIHRvIGJlIHZhbGlkICovCisJbmFuZF9iY21fdW1pX2JjaF9wb2xsX3dyaXRlX2VjY19jYWxjKCk7CisKKwkvKgorCSAqKiBHZXQgdGhlIGhhcmR3YXJlIGVjYyBmcm9tIHRoZSAzMi1iaXQgcmVzdWx0IHJlZ2lzdGVycy4KKwkgKiogUmVhZCBhZnRlciA1MTIgYnl0ZSBhY2Nlc3Nlcy4gRm9ybWF0IEIzQjJCMUIwCisJICoqIHdoZXJlIEIzID0gZWNjMywgZXRjLgorCSAqLworCisJaWYgKHBhZ2VTaXplID09IE5BTkRfREFUQV9BQ0NFU1NfU0laRSkgeworCQkvKiBOb3cgZmlsbCBpbiB0aGUgRUNDIGJ5dGVzICovCisJCWlmIChudW1FY2NCeXRlcyA+PSAxMykKKwkJCWVjY1ZhbCA9IFJFR19VTUlfQkNIX1dSX0VDQ18zOworCisJCS8qIFVzdWFsbHkgd2Ugc2tpcCBDTSBpbiBvb2JbMCwxXSAqLworCQlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxNSwgJm9vYnBbMF0sCisJCQkoZWNjVmFsID4+IDE2KSAmIDB4ZmYpOworCQlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxNCwgJm9vYnBbMV0sCisJCQkoZWNjVmFsID4+IDgpICYgMHhmZik7CisKKwkJLyogV3JpdGUgRUNDIGluIG9vYlsyLDMsNF0gKi8KKwkJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgMTMsICZvb2JwWzJdLAorCQkJZWNjVmFsICYgMHhmZik7CS8qIEVDQyAxMiAqLworCisJCWlmIChudW1FY2NCeXRlcyA+PSA5KQorCQkJZWNjVmFsID0gUkVHX1VNSV9CQ0hfV1JfRUNDXzI7CisKKwkJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgMTIsICZvb2JwWzNdLAorCQkJKGVjY1ZhbCA+PiAyNCkgJiAweGZmKTsJLyogRUNDMTEgKi8KKwkJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgMTEsICZvb2JwWzRdLAorCQkJKGVjY1ZhbCA+PiAxNikgJiAweGZmKTsJLyogRUNDMTAgKi8KKworCQkvKiBBbHdheXMgU2tpcCBCSSBpbiBvb2JbNV0gKi8KKwl9IGVsc2UgeworCQkvKiBBbHdheXMgU2tpcCBCSSBpbiBvb2JbMF0gKi8KKworCQkvKiBOb3cgZmlsbCBpbiB0aGUgRUNDIGJ5dGVzICovCisJCWlmIChudW1FY2NCeXRlcyA+PSAxMykKKwkJCWVjY1ZhbCA9IFJFR19VTUlfQkNIX1dSX0VDQ18zOworCisJCS8qIFVzdWFsbHkgc2tpcCBDTSBpbiBvb2JbMSwyXSAqLworCQlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxNSwgJm9vYnBbMV0sCisJCQkoZWNjVmFsID4+IDE2KSAmIDB4ZmYpOworCQlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxNCwgJm9vYnBbMl0sCisJCQkoZWNjVmFsID4+IDgpICYgMHhmZik7CisKKwkJLyogV3JpdGUgRUNDIGluIG9vYlszLTE1XSAqLworCQlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxMywgJm9vYnBbM10sCisJCQllY2NWYWwgJiAweGZmKTsJLyogRUNDMTIgKi8KKworCQlpZiAobnVtRWNjQnl0ZXMgPj0gOSkKKwkJCWVjY1ZhbCA9IFJFR19VTUlfQkNIX1dSX0VDQ18yOworCisJCU5BTkRfQkNNX1VNSV9FQ0NfV1JJVEUobnVtRWNjQnl0ZXMsIDEyLCAmb29icFs0XSwKKwkJCShlY2NWYWwgPj4gMjQpICYgMHhmZik7CS8qIEVDQzExICovCisJCU5BTkRfQkNNX1VNSV9FQ0NfV1JJVEUobnVtRWNjQnl0ZXMsIDExLCAmb29icFs1XSwKKwkJCShlY2NWYWwgPj4gMTYpICYgMHhmZik7CS8qIEVDQzEwICovCisJfQorCisJLyogRmlsbCBpbiB0aGUgcmVtYWluZGVyIG9mIEVDQyBsb2NhdGlvbnMgKi8KKwlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxMCwgJm9vYnBbNl0sCisJCShlY2NWYWwgPj4gOCkgJiAweGZmKTsJLyogRUNDOSAqLworCU5BTkRfQkNNX1VNSV9FQ0NfV1JJVEUobnVtRWNjQnl0ZXMsIDksICZvb2JwWzddLAorCQllY2NWYWwgJiAweGZmKTsJLyogRUNDOCAqLworCisJaWYgKG51bUVjY0J5dGVzID49IDUpCisJCWVjY1ZhbCA9IFJFR19VTUlfQkNIX1dSX0VDQ18xOworCisJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgOCwgJm9vYnBbOF0sCisJCShlY2NWYWwgPj4gMjQpICYgMHhmZik7CS8qIEVDQzcgKi8KKwlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCA3LCAmb29icFs5XSwKKwkJKGVjY1ZhbCA+PiAxNikgJiAweGZmKTsJLyogRUNDNiAqLworCU5BTkRfQkNNX1VNSV9FQ0NfV1JJVEUobnVtRWNjQnl0ZXMsIDYsICZvb2JwWzEwXSwKKwkJKGVjY1ZhbCA+PiA4KSAmIDB4ZmYpOwkvKiBFQ0M1ICovCisJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgNSwgJm9vYnBbMTFdLAorCQllY2NWYWwgJiAweGZmKTsJLyogRUNDNCAqLworCisJaWYgKG51bUVjY0J5dGVzID49IDEpCisJCWVjY1ZhbCA9IFJFR19VTUlfQkNIX1dSX0VDQ18wOworCisJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgNCwgJm9vYnBbMTJdLAorCQkoZWNjVmFsID4+IDI0KSAmIDB4ZmYpOwkvKiBFQ0MzICovCisJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgMywgJm9vYnBbMTNdLAorCQkoZWNjVmFsID4+IDE2KSAmIDB4ZmYpOwkvKiBFQ0MyICovCisJTkFORF9CQ01fVU1JX0VDQ19XUklURShudW1FY2NCeXRlcywgMiwgJm9vYnBbMTRdLAorCQkoZWNjVmFsID4+IDgpICYgMHhmZik7CS8qIEVDQzEgKi8KKwlOQU5EX0JDTV9VTUlfRUNDX1dSSVRFKG51bUVjY0J5dGVzLCAxLCAmb29icFsxNV0sCisJCWVjY1ZhbCAmIDB4ZmYpOwkvKiBFQ0MwICovCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5BTkRfQkNNX1VNSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKaW5kZXggOTIzMjBhNi4uMjcxYjhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwpAQCAtMTUwLDIwICsxNTAsMTkgQEAKIH07CiAKIC8qKgotICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LzUxMi1ieXRlCisgKiBfX25hbmRfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIDMtYnl0ZSBFQ0MgZm9yIDI1Ni81MTItYnl0ZQogICoJCQkgYmxvY2sKLSAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKICAqIEBidWY6CWlucHV0IGJ1ZmZlciB3aXRoIHJhdyBkYXRhCisgKiBAZWNjc2l6ZToJZGF0YSBieXRlcyBwZXIgZWNjIHN0ZXAgKDI1NiBvciA1MTIpCiAgKiBAY29kZToJb3V0cHV0IGJ1ZmZlciB3aXRoIEVDQwogICovCi1pbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCit2b2lkIF9fbmFuZF9jYWxjdWxhdGVfZWNjKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGVjY3NpemUsCiAJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjb2RlKQogewogCWludCBpOwogCWNvbnN0IHVpbnQzMl90ICpicCA9ICh1aW50MzJfdCAqKWJ1ZjsKIAkvKiAyNTYgb3IgNTEyIGJ5dGVzL2VjYyAgKi8KLQljb25zdCB1aW50MzJfdCBlY2NzaXplX211bHQgPQotCQkJKCgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPmVjYy5zaXplKSA+PiA4OworCWNvbnN0IHVpbnQzMl90IGVjY3NpemVfbXVsdCA9IGVjY3NpemUgPj4gODsKIAl1aW50MzJfdCBjdXI7CQkvKiBjdXJyZW50IHZhbHVlIGluIGJ1ZmZlciAqLwogCS8qIHJwMC4ucnAxNS4ucnAxNyBhcmUgdGhlIHZhcmlvdXMgYWNjdW11bGF0ZWQgcGFyaXRpZXMgKHBlciBieXRlKSAqLwogCXVpbnQzMl90IHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OwpAQCAtNDEyLDYgKzQxMSwyMiBAQAogCQkgICAgKGludnBhcml0eVtwYXIgJiAweDU1XSA8PCAyKSB8CiAJCSAgICAoaW52cGFyaXR5W3JwMTddIDw8IDEpIHwKIAkJICAgIChpbnZwYXJpdHlbcnAxNl0gPDwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fbmFuZF9jYWxjdWxhdGVfZWNjKTsKKworLyoqCisgKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzLWJ5dGUgRUNDIGZvciAyNTYvNTEyLWJ5dGUKKyAqCQkJIGJsb2NrCisgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlCisgKiBAYnVmOglpbnB1dCBidWZmZXIgd2l0aCByYXcgZGF0YQorICogQGNvZGU6CW91dHB1dCBidWZmZXIgd2l0aCBFQ0MKKyAqLworaW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqY29kZSkKK3sKKwlfX25hbmRfY2FsY3VsYXRlX2VjYyhidWYsCisJCQkoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSwgY29kZSk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmFuZF9jYWxjdWxhdGVfZWNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKaW5kZXggY2QwNzExYi4uNzI4MTAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhjYWNoZV9maWxlLCAgICAgIkZpbGUgdG8gdXNlIHRvIGNhY2hlIG5hbmQgcGFnZXMgaW5zdGVhZCBvZiBtZW1vcnkiKTsKIAogLyogVGhlIGxhcmdlc3QgcG9zc2libGUgcGFnZSBzaXplICovCi0jZGVmaW5lIE5TX0xBUkdFU1RfUEFHRV9TSVpFCTIwNDgKKyNkZWZpbmUgTlNfTEFSR0VTVF9QQUdFX1NJWkUJNDA5NgogCiAvKiBUaGUgcHJlZml4IGZvciBzaW11bGF0b3Igb3V0cHV0ICovCiAjZGVmaW5lIE5TX09VVFBVVF9QUkVGSVggIltuYW5kc2ltXSIKQEAgLTI1OSw3ICsyNTksOCBAQAogI2RlZmluZSBPUFRfU01BUlRNRURJQSAgIDB4MDAwMDAwMTAgLyogU21hcnRNZWRpYSB0ZWNobm9sb2d5IGNoaXBzICovCiAjZGVmaW5lIE9QVF9BVVRPSU5DUiAgICAgMHgwMDAwMDAyMCAvKiBwYWdlIG51bWJlciBhdXRvIGluY3RpbWVudGF0aW9uIGlzIHBvc3NpYmxlICovCiAjZGVmaW5lIE9QVF9QQUdFNTEyXzhCSVQgMHgwMDAwMDA0MCAvKiA1MTItYnl0ZSBwYWdlIGNoaXBzIHdpdGggOC1iaXQgYnVzIHdpZHRoICovCi0jZGVmaW5lIE9QVF9MQVJHRVBBR0UgICAgKE9QVF9QQUdFMjA0OCkgLyogMjA0OC1ieXRlIHBhZ2UgY2hpcHMgKi8KKyNkZWZpbmUgT1BUX1BBR0U0MDk2ICAgICAweDAwMDAwMDgwIC8qIDQwOTYtYnl0ZSBwYWdlIGNoaXBzICovCisjZGVmaW5lIE9QVF9MQVJHRVBBR0UgICAgKE9QVF9QQUdFMjA0OCB8IE9QVF9QQUdFNDA5NikgLyogMjA0OCAmIDQwOTYtYnl0ZSBwYWdlIGNoaXBzICovCiAjZGVmaW5lIE9QVF9TTUFMTFBBR0UgICAgKE9QVF9QQUdFMjU2ICB8IE9QVF9QQUdFNTEyKSAgLyogMjU2IGFuZCA1MTItYnl0ZSBwYWdlIGNoaXBzICovCiAKIC8qIFJlbW92ZSBhY3Rpb24gYml0cyBmdG9tIHN0YXRlICovCkBAIC01ODgsNiArNTg5LDggQEAKIAkJCW5zLT5vcHRpb25zIHw9IE9QVF9QQUdFNTEyXzhCSVQ7CiAJfSBlbHNlIGlmIChucy0+Z2VvbS5wZ3N6ID09IDIwNDgpIHsKIAkJbnMtPm9wdGlvbnMgfD0gT1BUX1BBR0UyMDQ4OworCX0gZWxzZSBpZiAobnMtPmdlb20ucGdzeiA9PSA0MDk2KSB7CisJCW5zLT5vcHRpb25zIHw9IE9QVF9QQUdFNDA5NjsKIAl9IGVsc2UgewogCQlOU19FUlIoImluaXRfbmFuZHNpbTogdW5rbm93biBwYWdlIHNpemUgJXVcbiIsIG5zLT5nZW9tLnBnc3opOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbm9tYWRpa19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL25vbWFkaWtfbmFuZC5jCmluZGV4IDdjMzAyZDUuLjY2MTIzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbm9tYWRpa19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9ub21hZGlrX25hbmQuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBub21hZGlrX25hbmRfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5vbWFkaWtfbmFuZF9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSBub21hZGlrX25hbmRfc3VzcGVuZCwKIAkucmVzdW1lID0gbm9tYWRpa19uYW5kX3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9wbGF0X25hbmQuYwppbmRleCA0ZTE2YzZmLi44ZDQ2NzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcGxhdF9uYW5kLmMKQEAgLTM0LDcgKzM0LDEyIEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcGxhdF9uYW5kX2RhdGEgKmRhdGE7Ci0JaW50IHJlcyA9IDA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGVyciA9IDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOWElPOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZGV2aWNlIHN0cnVjdHVyZSAoYW5kIHplcm8gaXQpICovCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbGF0X25hbmRfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtNDMsMTIgKzQ4LDE4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRhdGEtPmlvX2Jhc2UgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWRhdGEtPmlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGRhdGEtPmlvX2Jhc2UgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gLUVJTzsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfcmVsZWFzZV9pbzsKIAl9CiAKIAlkYXRhLT5jaGlwLnByaXYgPSAmZGF0YTsKQEAgLTc0LDI0ICs4NSwyNCBAQAogCiAJLyogSGFuZGxlIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR1cCAqLwogCWlmIChwZGF0YS0+Y3RybC5wcm9iZSkgewotCQlyZXMgPSBwZGF0YS0+Y3RybC5wcm9iZShwZGV2KTsKLQkJaWYgKHJlcykKKwkJZXJyID0gcGRhdGEtPmN0cmwucHJvYmUocGRldik7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KIAlpZiAobmFuZF9zY2FuKCZkYXRhLT5tdGQsIDEpKSB7Ci0JCXJlcyA9IC1FTlhJTzsKKwkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dDsKIAl9CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAlpZiAocGRhdGEtPmNoaXAucGFydF9wcm9iZV90eXBlcykgewotCQlyZXMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucygmZGF0YS0+bXRkLAorCQllcnIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucygmZGF0YS0+bXRkLAogCQkJCQlwZGF0YS0+Y2hpcC5wYXJ0X3Byb2JlX3R5cGVzLAogCQkJCQkmZGF0YS0+cGFydHMsIDApOwotCQlpZiAocmVzID4gMCkgewotCQkJYWRkX210ZF9wYXJ0aXRpb25zKCZkYXRhLT5tdGQsIGRhdGEtPnBhcnRzLCByZXMpOworCQlpZiAoZXJyID4gMCkgeworCQkJYWRkX210ZF9wYXJ0aXRpb25zKCZkYXRhLT5tdGQsIGRhdGEtPnBhcnRzLCBlcnIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC05OSwxNCArMTEwLDE0IEBACiAJCXBkYXRhLT5jaGlwLnNldF9wYXJ0cyhkYXRhLT5tdGQuc2l6ZSwgJnBkYXRhLT5jaGlwKTsKIAlpZiAocGRhdGEtPmNoaXAucGFydGl0aW9ucykgewogCQlkYXRhLT5wYXJ0cyA9IHBkYXRhLT5jaGlwLnBhcnRpdGlvbnM7Ci0JCXJlcyA9IGFkZF9tdGRfcGFydGl0aW9ucygmZGF0YS0+bXRkLCBkYXRhLT5wYXJ0cywKKwkJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKCZkYXRhLT5tdGQsIGRhdGEtPnBhcnRzLAogCQkJcGRhdGEtPmNoaXAubnJfcGFydGl0aW9ucyk7CiAJfSBlbHNlCiAjZW5kaWYKLQlyZXMgPSBhZGRfbXRkX2RldmljZSgmZGF0YS0+bXRkKTsKKwllcnIgPSBhZGRfbXRkX2RldmljZSgmZGF0YS0+bXRkKTsKIAotCWlmICghcmVzKQotCQlyZXR1cm4gcmVzOworCWlmICghZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJbmFuZF9yZWxlYXNlKCZkYXRhLT5tdGQpOwogb3V0OgpAQCAtMTE0LDggKzEyNSwxMSBAQAogCQlwZGF0YS0+Y3RybC5yZW1vdmUocGRldik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaW91bm1hcChkYXRhLT5pb19iYXNlKTsKK291dF9yZWxlYXNlX2lvOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworb3V0X2ZyZWU6CiAJa2ZyZWUoZGF0YSk7Ci0JcmV0dXJuIHJlczsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMTI1LDYgKzEzOSw5IEBACiB7CiAJc3RydWN0IHBsYXRfbmFuZF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAluYW5kX3JlbGVhc2UoJmRhdGEtPm10ZCk7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCkBAIC0xMzQsNiArMTUxLDcgQEAKIAlpZiAocGRhdGEtPmN0cmwucmVtb3ZlKQogCQlwZGF0YS0+Y3RybC5yZW1vdmUocGRldik7CiAJaW91bm1hcChkYXRhLT5pb19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwppbmRleCA2OGI1YjNhLi5mYTZlOWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAJY2hpcC0+c2VsZWN0X2NoaXAgID0gczNjMjQxMF9uYW5kX3NlbGVjdF9jaGlwOwogCWNoaXAtPmNoaXBfZGVsYXkgICA9IDUwOwogCWNoaXAtPnByaXYJICAgPSBubXRkOwotCWNoaXAtPm9wdGlvbnMJICAgPSAwOworCWNoaXAtPm9wdGlvbnMJICAgPSBzZXQtPm9wdGlvbnM7CiAJY2hpcC0+Y29udHJvbGxlciAgID0gJmluZm8tPmNvbnRyb2xsZXI7CiAKIAlzd2l0Y2ggKGluZm8tPmNwdV90eXBlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3R4eDluZGZtYy5jIGIvZHJpdmVycy9tdGQvbmFuZC90eHg5bmRmbWMuYwppbmRleCA3M2FmODMyLi44NjM1MTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3R4eDluZGZtYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdHh4OW5kZm1jLmMKQEAgLTQyOSwxMSArNDI5LDEwIEBACiAJCWNoaXAgPSBtdGQtPnByaXY7CiAJCXR4eDlfcHJpdiA9IGNoaXAtPnByaXY7CiAKKwkJbmFuZF9yZWxlYXNlKG10ZCk7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JCWRlbF9tdGRfcGFydGl0aW9ucyhtdGQpOwogCQlrZnJlZShkcnZkYXRhLT5wYXJ0c1tpXSk7CiAjZW5kaWYKLQkJZGVsX210ZF9kZXZpY2UobXRkKTsKIAkJa2ZyZWUodHh4OV9wcml2LT5tdGRuYW1lKTsKIAkJa2ZyZWUodHh4OV9wcml2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKaW5kZXggODZjNGY2ZGMuLjc1ZjM4YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKQEAgLTExMiwxMCArMTEyLDI0IEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXUzMiBzeXNjZmc7CiAKLQlpZiAoc3RhdGUgPT0gRkxfUkVTRVRJTkcpIHsKLQkJaW50IGk7CisJaWYgKHN0YXRlID09IEZMX1JFU0VUSU5HIHx8IHN0YXRlID09IEZMX1BSRVBBUklOR19FUkFTRSB8fAorCSAgICBzdGF0ZSA9PSBGTF9WRVJJRllJTkdfRVJBU0UpIHsKKwkJaW50IGkgPSAyMTsKKwkJdW5zaWduZWQgaW50IGludHJfZmxhZ3MgPSBPTkVOQU5EX0lOVF9NQVNURVI7CiAKLQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIEZMX1JFU0VUSU5HOgorCQkJaW50cl9mbGFncyB8PSBPTkVOQU5EX0lOVF9SRVNFVDsKKwkJCWJyZWFrOworCQljYXNlIEZMX1BSRVBBUklOR19FUkFTRToKKwkJCWludHJfZmxhZ3MgfD0gT05FTkFORF9JTlRfRVJBU0U7CisJCQlicmVhazsKKwkJY2FzZSBGTF9WRVJJRllJTkdfRVJBU0U6CisJCQlpID0gMTAxOworCQkJYnJlYWs7CisJCX0KKworCQl3aGlsZSAoLS1pKSB7CiAJCQl1ZGVsYXkoMSk7CiAJCQlpbnRyID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKIAkJCWlmIChpbnRyICYgT05FTkFORF9JTlRfTUFTVEVSKQpAQCAtMTI2LDcgKzE0MCw3IEBACiAJCQl3YWl0X2VycigiY29udHJvbGxlciBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWlmICghKGludHIgJiBPTkVOQU5EX0lOVF9SRVNFVCkpIHsKKwkJaWYgKChpbnRyICYgaW50cl9mbGFncykgIT0gaW50cl9mbGFncykgewogCQkJd2FpdF9lcnIoInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKaW5kZXggZmY2NmU0My4uZjYzYjFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCkBAIC0xLDE3ICsxLDE5IEBACiAvKgogICogIGxpbnV4L2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgU2Ftc3VuZyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCDCqSAyMDA1LTIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCDCqSAyMDA3IE5va2lhIENvcnBvcmF0aW9uCisgKgogICogIEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CiAgKgogICogIENyZWRpdHM6CiAgKglBZHJpYW4gSHVudGVyIDxleHQtYWRyaWFuLmh1bnRlckBub2tpYS5jb20+OgogICoJYXV0by1wbGFjZW1lbnQgc3VwcG9ydCwgcmVhZC13aGlsZSBsb2FkIHN1cHBvcnQsIHZhcmlvdXMgZml4ZXMKLSAqCUNvcHlyaWdodCAoQykgTm9raWEgQ29ycG9yYXRpb24sIDIwMDcKICAqCiAgKglWaXNoYWsgRyA8dmlzaGFrLmcgYXQgc2Ftc3VuZy5jb20+LCBSb2hpdCBIYWdhcmd1bmRnaSA8aC5yb2hpdCBhdCBzYW1zdW5nLmNvbT4KICAqCUZsZXgtT25lTkFORCBzdXBwb3J0Ci0gKglDb3B5cmlnaHQgKEMpIFNhbXN1bmcgRWxlY3Ryb25pY3MsIDIwMDgKKyAqCUFtdWwgS3VtYXIgU2FoYSA8YW11bC5zYWhhIGF0IHNhbXN1bmcuY29tPgorICoJT1RQIHN1cHBvcnQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTMyLDYgKzM0LDEzIEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAorLyoKKyAqIE11bHRpYmxvY2sgZXJhc2UgaWYgbnVtYmVyIG9mIGJsb2NrcyB0byBlcmFzZSBpcyAyIG9yIG1vcmUuCisgKiBNYXhpbXVtIG51bWJlciBvZiBibG9ja3MgZm9yIHNpbXVsdGFuZW91cyBlcmFzZSBpcyA2NC4KKyAqLworI2RlZmluZSBNQl9FUkFTRV9NSU5fQkxLX0NPVU5UIDIKKyNkZWZpbmUgTUJfRVJBU0VfTUFYX0JMS19DT1VOVCA2NAorCiAvKiBEZWZhdWx0IEZsZXgtT25lTkFORCBib3VuZGFyeSBhbmQgbG9jayByZXNwZWN0aXZlbHkgKi8KIHN0YXRpYyBpbnQgZmxleF9iZHJ5W01BWF9ESUVTICogMl0gPSB7IC0xLCAwLCAtMSwgMCB9OwogCkBAIC00Myw2ICs1MiwxOCBAQAogCQkJCSIgICAgOiAwLT5TZXQgYm91bmRhcnkgaW4gdW5sb2NrZWQgc3RhdHVzIgogCQkJCSIgICAgOiAxLT5TZXQgYm91bmRhcnkgaW4gbG9ja2VkIHN0YXR1cyIpOwogCisvKiBEZWZhdWx0IE9uZU5BTkQvRmxleC1PbmVOQU5EIE9UUCBvcHRpb25zKi8KK3N0YXRpYyBpbnQgb3RwOworCittb2R1bGVfcGFyYW0ob3RwLCBpbnQsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyhvdHAsCSJDb3JyZXNwb25kaW5nIGJlaGF2aW91ciBvZiBPbmVOQU5EIGluIE9UUCIKKwkJCSJTeW50YXggOiBvdHA9TE9DS19UWVBFIgorCQkJIkxPQ0tfVFlQRSA6IEtleXMgaXNzdWVkLCBmb3Igc3BlY2lmaWMgT1RQIExvY2sgdHlwZSIKKwkJCSIJICAgOiAwIC0+IERlZmF1bHQgKE5vIEJsb2NrcyBMb2NrZWQpIgorCQkJIgkgICA6IDEgLT4gT1RQIEJsb2NrIGxvY2siCisJCQkiCSAgIDogMiAtPiAxc3QgQmxvY2sgbG9jayIKKwkJCSIJICAgOiAzIC0+IEJPVEggT1RQIEJsb2NrIGFuZCAxc3QgQmxvY2sgbG9jayIpOworCiAvKioKICAqICBvbmVuYW5kX29vYl8xMjggLSBvb2IgaW5mbyBmb3IgRmxleC1PbmVuYW5kIHdpdGggNEtCIHBhZ2UKICAqICBGb3Igbm93LCB3ZSBleHBvc2Ugb25seSA2NCBvdXQgb2YgODAgZWNjIGJ5dGVzCkBAIC0zMzksNiArMzYwLDggQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9ORU5BTkRfQ01EX0VSQVNFOgorCWNhc2UgT05FTkFORF9DTURfTVVMVElCTE9DS19FUkFTRToKKwljYXNlIE9ORU5BTkRfQ01EX0VSQVNFX1ZFUklGWToKIAljYXNlIE9ORU5BTkRfQ01EX0JVRkZFUlJBTToKIAljYXNlIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1M6CiAJCWJsb2NrID0gb25lbmFuZF9ibG9jayh0aGlzLCBhZGRyKTsKQEAgLTQ4Myw3ICs1MDYsNyBAQAogCQlpZiAoaW50ZXJydXB0ICYgZmxhZ3MpCiAJCQlicmVhazsKIAotCQlpZiAoc3RhdGUgIT0gRkxfUkVBRElORykKKwkJaWYgKHN0YXRlICE9IEZMX1JFQURJTkcgJiYgc3RhdGUgIT0gRkxfUFJFUEFSSU5HX0VSQVNFKQogCQkJY29uZF9yZXNjaGVkKCk7CiAJfQogCS8qIFRvIGdldCBjb3JyZWN0IGludGVycnVwdCBzdGF0dXMgaW4gdGltZW91dCBjYXNlICovCkBAIC01MDAsMjUgKzUyMyw0MCBAQAogCQlpbnQgZWNjID0gb25lbmFuZF9yZWFkX2VjYyh0aGlzKTsKIAkJaWYgKGVjYykgewogCQkJaWYgKGVjYyAmIE9ORU5BTkRfRUNDXzJCSVRfQUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dhaXQ6IEVDQyBlcnJvciA9IDB4JTA0eFxuIiwgZWNjKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFQ0MgZXJyb3IgPSAweCUwNHhcbiIsCisJCQkJCV9fZnVuY19fLCBlY2MpOwogCQkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOwogCQkJCXJldHVybiAtRUJBRE1TRzsKIAkJCX0gZWxzZSBpZiAoZWNjICYgT05FTkFORF9FQ0NfMUJJVF9BTEwpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAib25lbmFuZF93YWl0OiBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgPSAweCUwNHhcbiIsIGVjYyk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgPSAweCUwNHhcbiIsCisJCQkJCV9fZnVuY19fLCBlY2MpOwogCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOwogCQkJfQogCQl9CiAJfSBlbHNlIGlmIChzdGF0ZSA9PSBGTF9SRUFESU5HKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiByZWFkIHRpbWVvdXQhIGN0cmw9MHglMDR4IGludHI9MHglMDR4XG4iLCBjdHJsLCBpbnRlcnJ1cHQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWFkIHRpbWVvdXQhIGN0cmw9MHglMDR4IGludHI9MHglMDR4XG4iLAorCQkJX19mdW5jX18sIGN0cmwsIGludGVycnVwdCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChzdGF0ZSA9PSBGTF9QUkVQQVJJTkdfRVJBU0UgJiYgIShpbnRlcnJ1cHQgJiBPTkVOQU5EX0lOVF9FUkFTRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbWIgZXJhc2UgdGltZW91dCEgY3RybD0weCUwNHggaW50cj0weCUwNHhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY3RybCwgaW50ZXJydXB0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKCEoaW50ZXJydXB0ICYgT05FTkFORF9JTlRfTUFTVEVSKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0ISBjdHJsPTB4JTA0eCBpbnRyPTB4JTA0eFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBjdHJsLCBpbnRlcnJ1cHQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBJZiB0aGVyZSdzIGNvbnRyb2xsZXIgZXJyb3IsIGl0J3MgYSByZWFsIGVycm9yICovCiAJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dhaXQ6IGNvbnRyb2xsZXIgZXJyb3IgPSAweCUwNHhcbiIsCi0JCQljdHJsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY29udHJvbGxlciBlcnJvciA9IDB4JTA0eFxuIiwKKwkJCV9fZnVuY19fLCBjdHJsKTsKIAkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfTE9DSykKLQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiBpdCdzIGxvY2tlZCBlcnJvci5cbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaXQncyBsb2NrZWQgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTAxNSw3ICsxMDUzLDggQEAKIAkvKiBXZSBhcmUgYXR0ZW1wdGluZyB0byByZXJlYWQsIHNvIGRlY3JlbWVudCBzdGF0cy5mYWlsZWQKIAkgKiB3aGljaCB3YXMgaW5jcmVtZW50ZWQgYnkgb25lbmFuZF93YWl0IGR1ZSB0byByZWFkIGZhaWx1cmUKIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJvbmVuYW5kX3JlY292ZXJfbHNiOiBBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSB1bmNvcnJlY3RhYmxlIHJlYWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSB1bmNvcnJlY3RhYmxlIHJlYWRcbiIsCisJCV9fZnVuY19fKTsKIAltdGQtPmVjY19zdGF0cy5mYWlsZWQtLTsKIAogCS8qIElzc3VlIHRoZSBMU0IgcGFnZSByZWNvdmVyeSBjb21tYW5kICovCkBAIC0xMDQ2LDcgKzEwODUsOCBAQAogCWludCByZXQgPSAwOwogCWludCB3cml0ZXNpemUgPSB0aGlzLT53cml0ZXNpemU7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF9tbGNfcmVhZF9vcHNfbm9sb2NrOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLAorCSAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOwogCiAJaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX0FVVE8pCiAJCW9vYnNpemUgPSB0aGlzLT5lY2NsYXlvdXQtPm9vYmF2YWlsOwpAQCAtMTA1Nyw3ICsxMDk3LDggQEAKIAogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAoZnJvbSArIGxlbiA+IG10ZC0+c2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfbWxjX3JlYWRfb3BzX25vbG9jazogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iLAorCQkJX19mdW5jX18pOwogCQlvcHMtPnJldGxlbiA9IDA7CiAJCW9wcy0+b29icmV0bGVuID0gMDsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTQ2LDcgKzExODcsOCBAQAogCWludCByZXQgPSAwLCBib3VuZGFyeSA9IDA7CiAJaW50IHdyaXRlc2l6ZSA9IHRoaXMtPndyaXRlc2l6ZTsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3JlYWRfb3BzX25vbG9jazogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwKKwkJCV9fZnVuY19fLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOwogCiAJaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX0FVVE8pCiAJCW9vYnNpemUgPSB0aGlzLT5lY2NsYXlvdXQtPm9vYmF2YWlsOwpAQCAtMTE1Nyw3ICsxMTk5LDggQEAKIAogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9yZWFkX29wc19ub2xvY2s6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIiwKKwkJCV9fZnVuY19fKTsKIAkJb3BzLT5yZXRsZW4gPSAwOwogCQlvcHMtPm9vYnJldGxlbiA9IDA7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI3NSw3ICsxMzE4LDggQEAKIAogCWZyb20gKz0gb3BzLT5vb2JvZmZzOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfcmVhZF9vb2Jfbm9sb2NrOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLAorCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKIAogCS8qIEluaXRpYWxpemUgcmV0dXJuIGxlbmd0aCB2YWx1ZSAqLwogCW9wcy0+b29icmV0bGVuID0gMDsKQEAgLTEyODgsNyArMTMzMiw4IEBACiAJY29sdW1uID0gZnJvbSAmIChtdGQtPm9vYnNpemUgLSAxKTsKIAogCWlmICh1bmxpa2VseShjb2x1bW4gPj0gb29ic2l6ZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3JlYWRfb29iX25vbG9jazogQXR0ZW1wdGVkIHRvIHN0YXJ0IHJlYWQgb3V0c2lkZSBvb2JcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0ZWQgdG8gc3RhcnQgcmVhZCBvdXRzaWRlIG9vYlxuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMjk2LDcgKzEzNDEsOCBAQAogCWlmICh1bmxpa2VseShmcm9tID49IG10ZC0+c2l6ZSB8fAogCQkgICAgIGNvbHVtbiArIGxlbiA+ICgobXRkLT5zaXplID4+IHRoaXMtPnBhZ2Vfc2hpZnQpIC0KIAkJCQkgICAgIChmcm9tID4+IHRoaXMtPnBhZ2Vfc2hpZnQpKSAqIG9vYnNpemUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9yZWFkX29vYl9ub2xvY2s6IEF0dGVtcHRlZCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQXR0ZW1wdGVkIHRvIHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTMxOSw3ICsxMzY1LDggQEAKIAkJCXJldCA9IG9uZW5hbmRfcmVjb3Zlcl9sc2IobXRkLCBmcm9tLCByZXQpOwogCiAJCWlmIChyZXQgJiYgcmV0ICE9IC1FQkFETVNHKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfcmVhZF9vb2Jfbm9sb2NrOiByZWFkIGZhaWxlZCA9IDB4JXhcbiIsIHJldCk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWFkIGZhaWxlZCA9IDB4JXhcbiIsCisJCQkJX19mdW5jX18sIHJldCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNDUwLDIwICsxNDk3LDIxIEBACiAJaWYgKGludGVycnVwdCAmIE9ORU5BTkRfSU5UX1JFQUQpIHsKIAkJaW50IGVjYyA9IG9uZW5hbmRfcmVhZF9lY2ModGhpcyk7CiAJCWlmIChlY2MgJiBPTkVOQU5EX0VDQ18yQklUX0FMTCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAib25lbmFuZF9iYnRfd2FpdDogZWNjIGVycm9yID0gMHglMDR4IgotCQkJCSIsIGNvbnRyb2xsZXIgZXJyb3IgMHglMDR4XG4iLCBlY2MsIGN0cmwpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGVjYyBlcnJvciA9IDB4JTA0eCwgIgorCQkJCSJjb250cm9sbGVyIGVycm9yIDB4JTA0eFxuIiwKKwkJCQlfX2Z1bmNfXywgZWNjLCBjdHJsKTsKIAkJCXJldHVybiBPTkVOQU5EX0JCVF9SRUFEX0VDQ19FUlJPUjsKIAkJfQogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9iYnRfd2FpdDogcmVhZCB0aW1lb3V0ISIKLQkJCSJjdHJsPTB4JTA0eCBpbnRyPTB4JTA0eFxuIiwgY3RybCwgaW50ZXJydXB0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVhZCB0aW1lb3V0ISBjdHJsPTB4JTA0eCBpbnRyPTB4JTA0eFxuIiwKKwkJCV9fZnVuY19fLCBjdHJsLCBpbnRlcnJ1cHQpOwogCQlyZXR1cm4gT05FTkFORF9CQlRfUkVBRF9GQVRBTF9FUlJPUjsKIAl9CiAKIAkvKiBJbml0aWFsIGJhZCBibG9jayBjYXNlOiAweDI0MDAgb3IgMHgwNDAwICovCiAJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm9uZW5hbmRfYmJ0X3dhaXQ6ICIKLQkJCSJjb250cm9sbGVyIGVycm9yID0gMHglMDR4XG4iLCBjdHJsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjb250cm9sbGVyIGVycm9yID0gMHglMDR4XG4iLAorCQkJX19mdW5jX18sIGN0cmwpOwogCQlyZXR1cm4gT05FTkFORF9CQlRfUkVBRF9FUlJPUjsKIAl9CiAKQEAgLTE0ODcsMTQgKzE1MzUsMTYgQEAKIAlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CiAJdV9jaGFyICpidWYgPSBvcHMtPm9vYmJ1ZjsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX2JidF9yZWFkX29vYjogZnJvbSA9IDB4JTA4eCwgbGVuID0gJXppXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCBsZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogZnJvbSA9IDB4JTA4eCwgbGVuID0gJXppXG4iLAorCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludCkgZnJvbSwgbGVuKTsKIAogCS8qIEluaXRpYWxpemUgcmV0dXJuIHZhbHVlICovCiAJb3BzLT5vb2JyZXRsZW4gPSAwOwogCiAJLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLwogCWlmICh1bmxpa2VseSgoZnJvbSArIGxlbikgPiBtdGQtPnNpemUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9iYnRfcmVhZF9vb2I6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIE9ORU5BTkRfQkJUX1JFQURfRkFUQUxfRVJST1I7CiAJfQogCkBAIC0xNjYxLDIxICsxNzExLDIzIEBACiAJLyogV2FpdCBmb3IgYW55IGV4aXN0aW5nIG9wZXJhdGlvbiB0byBjbGVhciAqLwogCW9uZW5hbmRfcGFuaWNfd2FpdChtdGQpOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfcGFuaWNfd3JpdGU6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwKLQkgICAgICAodW5zaWduZWQgaW50KSB0bywgKGludCkgbGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwKKwkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOwogCiAJLyogSW5pdGlhbGl6ZSByZXRsZW4sIGluIGNhc2Ugb2YgZWFybHkgZXhpdCAqLwogCSpyZXRsZW4gPSAwOwogCiAJLyogRG8gbm90IGFsbG93IHdyaXRlcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAodW5saWtlbHkoKHRvICsgbGVuKSA+IG10ZC0+c2l6ZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3BhbmljX3dyaXRlOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEF0dGVtcHQgd3JpdGUgdG8gcGFzdCBlbmQgb2YgZGV2aWNlXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBSZWplY3Qgd3JpdGVzLCB3aGljaCBhcmUgbm90IHBhZ2UgYWxpZ25lZCAqLwogICAgICAgICBpZiAodW5saWtlbHkoTk9UQUxJR05FRCh0bykgfHwgTk9UQUxJR05FRChsZW4pKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAib25lbmFuZF9wYW5pY193cml0ZTogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0IHRvIHdyaXRlIG5vdCBwYWdlIGFsaWduZWQgZGF0YVxuIiwKKwkJCV9fZnVuY19fKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICAgfQogCkBAIC0xNzExLDcgKzE3NjMsNyBAQAogCQl9CiAKIAkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3BhbmljX3dyaXRlOiB3cml0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3cml0ZSBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTc5Miw3ICsxODQ0LDggQEAKIAl1X2NoYXIgKm9vYmJ1ZjsKIAlpbnQgcmV0ID0gMDsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3dyaXRlX29wc19ub2xvY2s6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCisJCV9fZnVuY19fLCAodW5zaWduZWQgaW50KSB0bywgKGludCkgbGVuKTsKIAogCS8qIEluaXRpYWxpemUgcmV0bGVuLCBpbiBjYXNlIG9mIGVhcmx5IGV4aXQgKi8KIAlvcHMtPnJldGxlbiA9IDA7CkBAIC0xODAwLDEzICsxODUzLDE1IEBACiAKIAkvKiBEbyBub3QgYWxsb3cgd3JpdGVzIHBhc3QgZW5kIG9mIGRldmljZSAqLwogCWlmICh1bmxpa2VseSgodG8gKyBsZW4pID4gbXRkLT5zaXplKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb3BzX25vbG9jazogQXR0ZW1wdCB3cml0ZSB0byBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogUmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KICAgICAgICAgaWYgKHVubGlrZWx5KE5PVEFMSUdORUQodG8pIHx8IE5PVEFMSUdORUQobGVuKSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb3BzX25vbG9jazogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0IHRvIHdyaXRlIG5vdCBwYWdlIGFsaWduZWQgZGF0YVxuIiwKKwkJCV9fZnVuY19fKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICAgfQogCkBAIC0xODc5LDcgKzE5MzQsOCBAQAogCQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgcHJldiwgIXJldCAmJiAhcHJldl9zdWJwYWdlKTsKIAkJCWlmIChyZXQpIHsKIAkJCQl3cml0dGVuIC09IHByZXZsZW47Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dyaXRlX29wc19ub2xvY2s6IHdyaXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3cml0ZSBmYWlsZWQgJWRcbiIsCisJCQkJCV9fZnVuY19fLCByZXQpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0xODg3LDcgKzE5NDMsOCBAQAogCQkJCS8qIE9ubHkgY2hlY2sgdmVyaWZ5IHdyaXRlIHR1cm4gb24gKi8KIAkJCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeShtdGQsIGJ1ZiAtIGxlbiwgdG8gLSBsZW4sIGxlbik7CiAJCQkJaWYgKHJldCkKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dyaXRlX29wc19ub2xvY2s6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHZlcmlmeSBmYWlsZWQgJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmV0KTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTkwNSwxNCArMTk2MiwxNiBAQAogCQkJLyogSW4gcGFydGlhbCBwYWdlIHdyaXRlIHdlIGRvbid0IHVwZGF0ZSBidWZmZXJyYW0gKi8KIAkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIHRvLCAhcmV0ICYmICFzdWJwYWdlKTsKIAkJCWlmIChyZXQpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb3BzX25vbG9jazogd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdyaXRlIGZhaWxlZCAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJldCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCS8qIE9ubHkgY2hlY2sgdmVyaWZ5IHdyaXRlIHR1cm4gb24gKi8KIAkJCXJldCA9IG9uZW5hbmRfdmVyaWZ5KG10ZCwgYnVmLCB0bywgdGhpc2xlbik7CiAJCQlpZiAocmV0KSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dyaXRlX29wc19ub2xvY2s6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdmVyaWZ5IGZhaWxlZCAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJldCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTE5NjgsNyArMjAyNyw4IEBACiAKIAl0byArPSBvcHMtPm9vYm9mZnM7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF93cml0ZV9vb2Jfbm9sb2NrOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLAorCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CiAKIAkvKiBJbml0aWFsaXplIHJldGxlbiwgaW4gY2FzZSBvZiBlYXJseSBleGl0ICovCiAJb3BzLT5vb2JyZXRsZW4gPSAwOwpAQCAtMTk4MSwxNCArMjA0MSwxNSBAQAogCWNvbHVtbiA9IHRvICYgKG10ZC0+b29ic2l6ZSAtIDEpOwogCiAJaWYgKHVubGlrZWx5KGNvbHVtbiA+PSBvb2JzaXplKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb29iX25vbG9jazogQXR0ZW1wdGVkIHRvIHN0YXJ0IHdyaXRlIG91dHNpZGUgb29iXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQXR0ZW1wdGVkIHRvIHN0YXJ0IHdyaXRlIG91dHNpZGUgb29iXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIE5BTkQ6IERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlICovCiAJaWYgKHVubGlrZWx5KGNvbHVtbiArIGxlbiA+IG9vYnNpemUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vb2Jfbm9sb2NrOiAiCi0JCSAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0IHRvIHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2VcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTk5Niw3ICsyMDU3LDggQEAKIAlpZiAodW5saWtlbHkodG8gPj0gbXRkLT5zaXplIHx8CiAJCSAgICAgY29sdW1uICsgbGVuID4gKChtdGQtPnNpemUgPj4gdGhpcy0+cGFnZV9zaGlmdCkgLQogCQkJCSAgICAgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpKSAqIG9vYnNpemUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vb2Jfbm9sb2NrOiBBdHRlbXB0ZWQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQXR0ZW1wdGVkIHRvIHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMDM4LDEzICsyMTAwLDE0IEBACiAKIAkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb29iX25vbG9jazogd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGUgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJcmV0ID0gb25lbmFuZF92ZXJpZnlfb29iKG10ZCwgb29iYnVmLCB0byk7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vb2Jfbm9sb2NrOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdmVyaWZ5IGZhaWxlZCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIxNDAsNzggKzIyMDMsMTg2IEBACiAJcmV0dXJuIGJibS0+aXNiYWRfYmJ0KG10ZCwgb2ZzLCBhbGxvd2JidCk7CiB9CiAKLS8qKgotICogb25lbmFuZF9lcmFzZSAtIFtNVEQgSW50ZXJmYWNlXSBlcmFzZSBibG9jayhzKQotICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSBpbnN0cgkJZXJhc2UgaW5zdHJ1Y3Rpb24KLSAqCi0gKiBFcmFzZSBvbmUgb3JlIG1vcmUgYmxvY2tzCi0gKi8KLXN0YXRpYyBpbnQgb25lbmFuZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQorCitzdGF0aWMgaW50IG9uZW5hbmRfbXVsdGlibG9ja19lcmFzZV92ZXJpZnkoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGludCBibG9ja19zaXplOwogCWxvZmZfdCBhZGRyID0gaW5zdHItPmFkZHI7Ci0JbG9mZl90IGxlbiA9IGluc3RyLT5sZW47Ci0JaW50IHJldCA9IDAsIGk7Ci0Jc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqcmVnaW9uID0gTlVMTDsKLQlsb2ZmX3QgcmVnaW9uX2VuZCA9IDA7CisJaW50IGxlbiA9IGluc3RyLT5sZW47CisJdW5zaWduZWQgaW50IGJsb2NrX3NpemUgPSAoMSA8PCB0aGlzLT5lcmFzZV9zaGlmdCk7CisJaW50IHJldCA9IDA7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF9lcmFzZTogc3RhcnQgPSAweCUwMTJsbHgsIGxlbiA9ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGluc3RyLT5hZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKSBpbnN0ci0+bGVuKTsKLQotCS8qIERvIG5vdCBhbGxvdyBlcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAodW5saWtlbHkoKGxlbiArIGFkZHIpID4gbXRkLT5zaXplKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IEVyYXNlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChGTEVYT05FTkFORCh0aGlzKSkgewotCQkvKiBGaW5kIHRoZSBlcmFzZXJlZ2lvbiBvZiB0aGlzIGFkZHJlc3MgKi8KLQkJaSA9IGZsZXhvbmVuYW5kX3JlZ2lvbihtdGQsIGFkZHIpOwotCQlyZWdpb24gPSAmbXRkLT5lcmFzZXJlZ2lvbnNbaV07Ci0KLQkJYmxvY2tfc2l6ZSA9IHJlZ2lvbi0+ZXJhc2VzaXplOwotCQlyZWdpb25fZW5kID0gcmVnaW9uLT5vZmZzZXQgKyByZWdpb24tPmVyYXNlc2l6ZSAqIHJlZ2lvbi0+bnVtYmxvY2tzOwotCi0JCS8qIFN0YXJ0IGFkZHJlc3Mgd2l0aGluIHJlZ2lvbiBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5LgotCQkgKiBFcmFzZSByZWdpb24ncyBzdGFydCBvZmZzZXQgaXMgYWx3YXlzIGJsb2NrIHN0YXJ0IGFkZHJlc3MuCi0JCSAqLwotCQlpZiAodW5saWtlbHkoKGFkZHIgLSByZWdpb24tPm9mZnNldCkgJiAoYmxvY2tfc2l6ZSAtIDEpKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX2VyYXNlOiBVbmFsaWduZWQgYWRkcmVzc1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwl3aGlsZSAobGVuKSB7CisJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9FUkFTRV9WRVJJRlksIGFkZHIsIGJsb2NrX3NpemUpOworCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfVkVSSUZZSU5HX0VSQVNFKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHZlcmlmeSwgYmxvY2sgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG9uZW5hbmRfYmxvY2sodGhpcywgYWRkcikpOworCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKKwkJCWluc3RyLT5mYWlsX2FkZHIgPSBhZGRyOworCQkJcmV0dXJuIC0xOwogCQl9Ci0JfSBlbHNlIHsKLQkJYmxvY2tfc2l6ZSA9IDEgPDwgdGhpcy0+ZXJhc2Vfc2hpZnQ7Ci0KLQkJLyogU3RhcnQgYWRkcmVzcyBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5ICovCi0JCWlmICh1bmxpa2VseShhZGRyICYgKGJsb2NrX3NpemUgLSAxKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwkJbGVuIC09IGJsb2NrX3NpemU7CisJCWFkZHIgKz0gYmxvY2tfc2l6ZTsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQkvKiBMZW5ndGggbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLwotCWlmICh1bmxpa2VseShsZW4gJiAoYmxvY2tfc2l6ZSAtIDEpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IExlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKy8qKgorICogb25lbmFuZF9tdWx0aWJsb2NrX2VyYXNlIC0gW0ludGVybmFsXSBlcmFzZSBibG9jayhzKSB1c2luZyBtdWx0aWJsb2NrIGVyYXNlCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGluc3RyCQllcmFzZSBpbnN0cnVjdGlvbgorICogQHBhcmFtIHJlZ2lvbgllcmFzZSByZWdpb24KKyAqCisgKiBFcmFzZSBvbmUgb3IgbW9yZSBibG9ja3MgdXAgdG8gNjQgYmxvY2sgYXQgYSB0aW1lCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9tdWx0aWJsb2NrX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCSAgICBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCQkJICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJbG9mZl90IGFkZHIgPSBpbnN0ci0+YWRkcjsKKwlpbnQgbGVuID0gaW5zdHItPmxlbjsKKwlpbnQgZWJfY291bnQgPSAwOworCWludCByZXQgPSAwOworCWludCBiZHJ5X2Jsb2NrID0gMDsKIAotCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047Ci0KLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9FUkFTSU5HKTsKLQotCS8qIExvb3AgdGhyb3VnaCB0aGUgYmxvY2tzICovCiAJaW5zdHItPnN0YXRlID0gTVREX0VSQVNJTkc7CiAKKwlpZiAoT05FTkFORF9JU19ERFAodGhpcykpIHsKKwkJbG9mZl90IGJkcnlfYWRkciA9IHRoaXMtPmNoaXBzaXplID4+IDE7CisJCWlmIChhZGRyIDwgYmRyeV9hZGRyICYmIChhZGRyICsgbGVuKSA+IGJkcnlfYWRkcikKKwkJCWJkcnlfYmxvY2sgPSBiZHJ5X2FkZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQ7CisJfQorCisJLyogUHJlLWNoZWNrIGJicyAqLworCXdoaWxlIChsZW4pIHsKKwkJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGJhZCBibG9jaywgd2UgZG8gbm90IGVyYXNlIGJhZCBibG9ja3MgKi8KKwkJaWYgKG9uZW5hbmRfYmxvY2tfaXNiYWRfbm9sb2NrKG10ZCwgYWRkciwgMCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBhdHRlbXB0IHRvIGVyYXNlIGEgYmFkIGJsb2NrICIKKwkJCSAgICAgICAiYXQgYWRkciAweCUwMTJsbHhcbiIsCisJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpIGFkZHIpOworCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWxlbiAtPSBibG9ja19zaXplOworCQlhZGRyICs9IGJsb2NrX3NpemU7CisJfQorCisJbGVuID0gaW5zdHItPmxlbjsKKwlhZGRyID0gaW5zdHItPmFkZHI7CisKKwkvKiBsb29wIG92ZXIgNjQgZWIgYmF0Y2hlcyAqLworCXdoaWxlIChsZW4pIHsKKwkJc3RydWN0IGVyYXNlX2luZm8gdmVyaWZ5X2luc3RyID0gKmluc3RyOworCQlpbnQgbWF4X2ViX2NvdW50ID0gTUJfRVJBU0VfTUFYX0JMS19DT1VOVDsKKworCQl2ZXJpZnlfaW5zdHIuYWRkciA9IGFkZHI7CisJCXZlcmlmeV9pbnN0ci5sZW4gPSAwOworCisJCS8qIGRvIG5vdCBjcm9zcyBjaGlwIGJvdW5kYXJ5ICovCisJCWlmIChiZHJ5X2Jsb2NrKSB7CisJCQlpbnQgdGhpc19ibG9jayA9IChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsKKworCQkJaWYgKHRoaXNfYmxvY2sgPCBiZHJ5X2Jsb2NrKSB7CisJCQkJbWF4X2ViX2NvdW50ID0gbWluKG1heF9lYl9jb3VudCwKKwkJCQkJCSAgIChiZHJ5X2Jsb2NrIC0gdGhpc19ibG9jaykpOworCQkJfQorCQl9CisKKwkJZWJfY291bnQgPSAwOworCisJCXdoaWxlIChsZW4gPiBibG9ja19zaXplICYmIGViX2NvdW50IDwgKG1heF9lYl9jb3VudCAtIDEpKSB7CisJCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfTVVMVElCTE9DS19FUkFTRSwKKwkJCQkgICAgICBhZGRyLCBibG9ja19zaXplKTsKKwkJCW9uZW5hbmRfaW52YWxpZGF0ZV9idWZmZXJyYW0obXRkLCBhZGRyLCBibG9ja19zaXplKTsKKworCQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1BSRVBBUklOR19FUkFTRSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIG11bHRpYmxvY2sgZXJhc2UsICIKKwkJCQkgICAgICAgImJsb2NrICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgICAgb25lbmFuZF9ibG9jayh0aGlzLCBhZGRyKSk7CisJCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKKwkJCQlpbnN0ci0+ZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktOT1dOOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlsZW4gLT0gYmxvY2tfc2l6ZTsKKwkJCWFkZHIgKz0gYmxvY2tfc2l6ZTsKKwkJCWViX2NvdW50Kys7CisJCX0KKworCQkvKiBsYXN0IGJsb2NrIG9mIDY0LWViIHNlcmllcyAqLworCQljb25kX3Jlc2NoZWQoKTsKKwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0VSQVNFLCBhZGRyLCBibG9ja19zaXplKTsKKwkJb25lbmFuZF9pbnZhbGlkYXRlX2J1ZmZlcnJhbShtdGQsIGFkZHIsIGJsb2NrX3NpemUpOworCisJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9FUkFTSU5HKTsKKwkJLyogQ2hlY2sgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCBlcmFzZSwgYmxvY2sgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG9uZW5hbmRfYmxvY2sodGhpcywgYWRkcikpOworCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKKwkJCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWxlbiAtPSBibG9ja19zaXplOworCQlhZGRyICs9IGJsb2NrX3NpemU7CisJCWViX2NvdW50Kys7CisKKwkJLyogdmVyaWZ5ICovCisJCXZlcmlmeV9pbnN0ci5sZW4gPSBlYl9jb3VudCAqIGJsb2NrX3NpemU7CisJCWlmIChvbmVuYW5kX211bHRpYmxvY2tfZXJhc2VfdmVyaWZ5KG10ZCwgJnZlcmlmeV9pbnN0cikpIHsKKwkJCWluc3RyLT5zdGF0ZSA9IHZlcmlmeV9pbnN0ci5zdGF0ZTsKKwkJCWluc3RyLT5mYWlsX2FkZHIgPSB2ZXJpZnlfaW5zdHIuZmFpbF9hZGRyOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIG9uZW5hbmRfYmxvY2tfYnlfYmxvY2tfZXJhc2UgLSBbSW50ZXJuYWxdIGVyYXNlIGJsb2NrKHMpIHVzaW5nIHJlZ3VsYXIgZXJhc2UKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gaW5zdHIJCWVyYXNlIGluc3RydWN0aW9uCisgKiBAcGFyYW0gcmVnaW9uCWVyYXNlIHJlZ2lvbgorICogQHBhcmFtIGJsb2NrX3NpemUJZXJhc2UgYmxvY2sgc2l6ZQorICoKKyAqIEVyYXNlIG9uZSBvciBtb3JlIGJsb2NrcyBvbmUgYmxvY2sgYXQgYSB0aW1lCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9ibG9ja19ieV9ibG9ja19lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJc3RydWN0IGVyYXNlX2luZm8gKmluc3RyLAorCQkJCQlzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICpyZWdpb24sCisJCQkJCXVuc2lnbmVkIGludCBibG9ja19zaXplKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJbG9mZl90IGFkZHIgPSBpbnN0ci0+YWRkcjsKKwlpbnQgbGVuID0gaW5zdHItPmxlbjsKKwlsb2ZmX3QgcmVnaW9uX2VuZCA9IDA7CisJaW50IHJldCA9IDA7CisKKwlpZiAocmVnaW9uKSB7CisJCS8qIHJlZ2lvbiBpcyBzZXQgZm9yIEZsZXgtT25lTkFORCAqLworCQlyZWdpb25fZW5kID0gcmVnaW9uLT5vZmZzZXQgKyByZWdpb24tPmVyYXNlc2l6ZSAqIHJlZ2lvbi0+bnVtYmxvY2tzOworCX0KKworCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOworCisJLyogTG9vcCB0aHJvdWdoIHRoZSBibG9ja3MgKi8KIAl3aGlsZSAobGVuKSB7CiAJCWNvbmRfcmVzY2hlZCgpOwogCiAJCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBiYWQgYmxvY2ssIHdlIGRvIG5vdCBlcmFzZSBiYWQgYmxvY2tzICovCiAJCWlmIChvbmVuYW5kX2Jsb2NrX2lzYmFkX25vbG9jayhtdGQsIGFkZHIsIDApKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAib25lbmFuZF9lcmFzZTogYXR0ZW1wdCB0byBlcmFzZSBhIGJhZCBibG9jayBhdCBhZGRyIDB4JTAxMmxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYXR0ZW1wdCB0byBlcmFzZSBhIGJhZCBibG9jayAiCisJCQkJCSJhdCBhZGRyIDB4JTAxMmxseFxuIiwKKwkJCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpIGFkZHIpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJCWdvdG8gZXJhc2VfZXhpdDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0VSQVNFLCBhZGRyLCBibG9ja19zaXplKTsKQEAgLTIyMjEsMTEgKzIzOTIsMTEgQEAKIAkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX0VSQVNJTkcpOwogCQkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCiAJCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9lcmFzZTogRmFpbGVkIGVyYXNlLCBibG9jayAlZFxuIiwKLQkJCQkJCSBvbmVuYW5kX2Jsb2NrKHRoaXMsIGFkZHIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCBlcmFzZSwgYmxvY2sgJWRcbiIsCisJCQkJX19mdW5jX18sIG9uZW5hbmRfYmxvY2sodGhpcywgYWRkcikpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJCWluc3RyLT5mYWlsX2FkZHIgPSBhZGRyOwotCQkJZ290byBlcmFzZV9leGl0OworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCQlsZW4gLT0gYmxvY2tfc2l6ZTsKQEAgLTIyNDEsMjUgKzI0MTIsODggQEAKIAogCQkJaWYgKGxlbiAmIChibG9ja19zaXplIC0gMSkpIHsKIAkJCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBhdCBNVEQgcGFydGl0aW9uaW5nIGxldmVsLiAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOwotCQkJCWdvdG8gZXJhc2VfZXhpdDsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFsaWduZWQgYWRkcmVzc1xuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQl9CisJfQorCXJldHVybiAwOworfQogCisvKioKKyAqIG9uZW5hbmRfZXJhc2UgLSBbTVREIEludGVyZmFjZV0gZXJhc2UgYmxvY2socykKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gaW5zdHIJCWVyYXNlIGluc3RydWN0aW9uCisgKgorICogRXJhc2Ugb25lIG9yIG1vcmUgYmxvY2tzCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgaW50IGJsb2NrX3NpemU7CisJbG9mZl90IGFkZHIgPSBpbnN0ci0+YWRkcjsKKwlsb2ZmX3QgbGVuID0gaW5zdHItPmxlbjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICpyZWdpb24gPSBOVUxMOworCWxvZmZfdCByZWdpb25fb2Zmc2V0ID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogc3RhcnQ9MHglMDEybGx4LCBsZW49JWxsdVxuIiwgX19mdW5jX18sCisJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5zdHItPmFkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGluc3RyLT5sZW4pOworCisJLyogRG8gbm90IGFsbG93IGVyYXNlIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICh1bmxpa2VseSgobGVuICsgYWRkcikgPiBtdGQtPnNpemUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVyYXNlIHBhc3QgZW5kIG9mIGRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKKwlpZiAoRkxFWE9ORU5BTkQodGhpcykpIHsKKwkJLyogRmluZCB0aGUgZXJhc2VyZWdpb24gb2YgdGhpcyBhZGRyZXNzICovCisJCWludCBpID0gZmxleG9uZW5hbmRfcmVnaW9uKG10ZCwgYWRkcik7CiAKLWVyYXNlX2V4aXQ6CisJCXJlZ2lvbiA9ICZtdGQtPmVyYXNlcmVnaW9uc1tpXTsKKwkJYmxvY2tfc2l6ZSA9IHJlZ2lvbi0+ZXJhc2VzaXplOwogCi0JcmV0ID0gaW5zdHItPnN0YXRlID09IE1URF9FUkFTRV9ET05FID8gMCA6IC1FSU87CisJCS8qIFN0YXJ0IGFkZHJlc3Mgd2l0aGluIHJlZ2lvbiBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5LgorCQkgKiBFcmFzZSByZWdpb24ncyBzdGFydCBvZmZzZXQgaXMgYWx3YXlzIGJsb2NrIHN0YXJ0IGFkZHJlc3MuCisJCSAqLworCQlyZWdpb25fb2Zmc2V0ID0gcmVnaW9uLT5vZmZzZXQ7CisJfSBlbHNlCisJCWJsb2NrX3NpemUgPSAxIDw8IHRoaXMtPmVyYXNlX3NoaWZ0OworCisJLyogU3RhcnQgYWRkcmVzcyBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5ICovCisJaWYgKHVubGlrZWx5KChhZGRyIC0gcmVnaW9uX29mZnNldCkgJiAoYmxvY2tfc2l6ZSAtIDEpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFsaWduZWQgYWRkcmVzc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBMZW5ndGggbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLworCWlmICh1bmxpa2VseShsZW4gJiAoYmxvY2tfc2l6ZSAtIDEpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBMZW5ndGggbm90IGJsb2NrIGFsaWduZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKKworCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLworCW9uZW5hbmRfZ2V0X2RldmljZShtdGQsIEZMX0VSQVNJTkcpOworCisJaWYgKHJlZ2lvbiB8fCBpbnN0ci0+bGVuIDwgTUJfRVJBU0VfTUlOX0JMS19DT1VOVCAqIGJsb2NrX3NpemUpIHsKKwkJLyogcmVnaW9uIGlzIHNldCBmb3IgRmxleC1PbmVOQU5EIChubyBtYiBlcmFzZSkgKi8KKwkJcmV0ID0gb25lbmFuZF9ibG9ja19ieV9ibG9ja19lcmFzZShtdGQsIGluc3RyLAorCQkJCQkJICAgcmVnaW9uLCBibG9ja19zaXplKTsKKwl9IGVsc2UgeworCQlyZXQgPSBvbmVuYW5kX211bHRpYmxvY2tfZXJhc2UobXRkLCBpbnN0ciwgYmxvY2tfc2l6ZSk7CisJfQogCiAJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW9uZW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAogCS8qIERvIGNhbGwgYmFjayBmdW5jdGlvbiAqLwotCWlmICghcmV0KQorCWlmICghcmV0KSB7CisJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwogCQltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMjcyLDcgKzI1MDYsNyBAQAogICovCiBzdGF0aWMgdm9pZCBvbmVuYW5kX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfc3luYzogY2FsbGVkXG4iKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6IGNhbGxlZFxuIiwgX19mdW5jX18pOwogCiAJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCiAJb25lbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfU1lOQ0lORyk7CkBAIC0yNDA2LDcgKzI2NDAsOCBAQAogCQkvKiBDaGVjayBsb2NrIHN0YXR1cyAqLwogCQlzdGF0dXMgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1dQX1NUQVRVUyk7CiAJCWlmICghKHN0YXR1cyAmIHdwX3N0YXR1c19tYXNrKSkKLQkJCXByaW50ayhLRVJOX0VSUiAid3Agc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdwIHN0YXR1cyA9IDB4JXhcbiIsCisJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjQzNSw3ICsyNjcwLDggQEAKIAkJLyogQ2hlY2sgbG9jayBzdGF0dXMgKi8KIAkJc3RhdHVzID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19XUF9TVEFUVVMpOwogCQlpZiAoIShzdGF0dXMgJiB3cF9zdGF0dXNfbWFzaykpCi0JCQlwcmludGsoS0VSTl9FUlIgImJsb2NrID0gJWQsIHdwIHN0YXR1cyA9IDB4JXhcbiIsIGJsb2NrLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmxvY2sgPSAlZCwgd3Agc3RhdHVzID0gMHgleFxuIiwKKwkJCQlfX2Z1bmNfXywgYmxvY2ssIHN0YXR1cyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNTAyLDcgKzI3MzgsOCBAQAogCQkvKiBDaGVjayBsb2NrIHN0YXR1cyAqLwogCQlzdGF0dXMgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1dQX1NUQVRVUyk7CiAJCWlmICghKHN0YXR1cyAmIE9ORU5BTkRfV1BfVVMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImJsb2NrID0gJWQsIHdwIHN0YXR1cyA9IDB4JXhcbiIsIGJsb2NrLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmxvY2sgPSAlZCwgd3Agc3RhdHVzID0gMHgleFxuIiwKKwkJCQlfX2Z1bmNfXywgYmxvY2ssIHN0YXR1cyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTI1NTcsNiArMjc5NCwyMDggQEAKIAogI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9PVFAKIAorLyoqCisgKiBvbmVuYW5kX290cF9jb21tYW5kIC0gU2VuZCBPVFAgc3BlY2lmaWMgY29tbWFuZCB0byBPbmVOQU5EIGRldmljZQorICogQHBhcmFtIG10ZAkgTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBjbWQJIHRoZSBjb21tYW5kIHRvIGJlIHNlbnQKKyAqIEBwYXJhbSBhZGRyCSBvZmZzZXQgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvCisgKiBAcGFyYW0gbGVuCSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBvciB3cml0ZQorICovCitzdGF0aWMgaW50IG9uZW5hbmRfb3RwX2NvbW1hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIGxvZmZfdCBhZGRyLAorCQkJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgdmFsdWUsIGJsb2NrLCBwYWdlOworCisJLyogQWRkcmVzcyB0cmFuc2xhdGlvbiAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPTkVOQU5EX0NNRF9PVFBfQUNDRVNTOgorCQlibG9jayA9IChpbnQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsKKwkJcGFnZSA9IC0xOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJsb2NrID0gKGludCkgKGFkZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpOworCQlwYWdlID0gKGludCkgKGFkZHIgPj4gdGhpcy0+cGFnZV9zaGlmdCk7CisKKwkJaWYgKE9ORU5BTkRfSVNfMlBMQU5FKHRoaXMpKSB7CisJCQkvKiBNYWtlIHRoZSBldmVuIGJsb2NrIG51bWJlciAqLworCQkJYmxvY2sgJj0gfjE7CisJCQkvKiBJcyBpdCB0aGUgb2RkIHBsYW5lPyAqLworCQkJaWYgKGFkZHIgJiB0aGlzLT53cml0ZXNpemUpCisJCQkJYmxvY2srKzsKKwkJCXBhZ2UgPj49IDE7CisJCX0KKwkJcGFnZSAmPSB0aGlzLT5wYWdlX21hc2s7CisJCWJyZWFrOworCX0KKworCWlmIChibG9jayAhPSAtMSkgeworCQkvKiBXcml0ZSAnREZTLCBGQkEnIG9mIEZsYXNoICovCisJCXZhbHVlID0gb25lbmFuZF9ibG9ja19hZGRyZXNzKHRoaXMsIGJsb2NrKTsKKwkJdGhpcy0+d3JpdGVfd29yZCh2YWx1ZSwgdGhpcy0+YmFzZSArCisJCQkJT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEpOworCX0KKworCWlmIChwYWdlICE9IC0xKSB7CisJCS8qIE5vdyB3ZSB1c2UgcGFnZSBzaXplIG9wZXJhdGlvbiAqLworCQlpbnQgc2VjdG9ycyA9IDQsIGNvdW50ID0gNDsKKwkJaW50IGRhdGFyYW07CisKKwkJc3dpdGNoIChjbWQpIHsKKwkJZGVmYXVsdDoKKwkJCWlmIChPTkVOQU5EX0lTXzJQTEFORSh0aGlzKSAmJiBjbWQgPT0gT05FTkFORF9DTURfUFJPRykKKwkJCQljbWQgPSBPTkVOQU5EX0NNRF8yWF9QUk9HOworCQkJZGF0YXJhbSA9IE9ORU5BTkRfQ1VSUkVOVF9CVUZGRVJSQU0odGhpcyk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFdyaXRlICdGUEEsIEZTQScgb2YgRmxhc2ggKi8KKwkJdmFsdWUgPSBvbmVuYW5kX3BhZ2VfYWRkcmVzcyhwYWdlLCBzZWN0b3JzKTsKKwkJdGhpcy0+d3JpdGVfd29yZCh2YWx1ZSwgdGhpcy0+YmFzZSArCisJCQkJT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzgpOworCisJCS8qIFdyaXRlICdCU0EsIEJTQycgb2YgRGF0YVJBTSAqLworCQl2YWx1ZSA9IG9uZW5hbmRfYnVmZmVyX2FkZHJlc3MoZGF0YXJhbSwgc2VjdG9ycywgY291bnQpOworCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQlVGRkVSKTsKKwl9CisKKwkvKiBJbnRlcnJ1cHQgY2xlYXIgKi8KKwl0aGlzLT53cml0ZV93b3JkKE9ORU5BTkRfSU5UX0NMRUFSLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKKworCS8qIFdyaXRlIGNvbW1hbmQgKi8KKwl0aGlzLT53cml0ZV93b3JkKGNtZCwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NPTU1BTkQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb25lbmFuZF9vdHBfd3JpdGVfb29iX25vbG9jayAtIFtJbnRlcm5hbF0gT25lTkFORCB3cml0ZSBvdXQtb2YtYmFuZCwgc3BlY2lmaWMgdG8gT1RQCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gd3JpdGUgdG8KKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGEgdG8gd3JpdGUKKyAqCisgKiBPbmVOQU5EIHdyaXRlIG91dC1vZi1iYW5kIG9ubHkgZm9yIE9UUAorICovCitzdGF0aWMgaW50IG9uZW5hbmRfb3RwX3dyaXRlX29vYl9ub2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCQkgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgY29sdW1uLCByZXQgPSAwLCBvb2JzaXplOworCWludCB3cml0dGVuID0gMDsKKwl1X2NoYXIgKm9vYmJ1ZjsKKwlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CisJY29uc3QgdV9jaGFyICpidWYgPSBvcHMtPm9vYmJ1ZjsKKwlpbnQgYmxvY2ssIHZhbHVlLCBzdGF0dXM7CisKKwl0byArPSBvcHMtPm9vYm9mZnM7CisKKwkvKiBJbml0aWFsaXplIHJldGxlbiwgaW4gY2FzZSBvZiBlYXJseSBleGl0ICovCisJb3BzLT5vb2JyZXRsZW4gPSAwOworCisJb29ic2l6ZSA9IG10ZC0+b29ic2l6ZTsKKworCWNvbHVtbiA9IHRvICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCisJb29iYnVmID0gdGhpcy0+b29iX2J1ZjsKKworCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgd3JpdGUgKi8KKwl3aGlsZSAod3JpdHRlbiA8IGxlbikgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgb29ic2l6ZSwgbGVuIC0gd3JpdHRlbik7CisKKwkJY29uZF9yZXNjaGVkKCk7CisKKwkJYmxvY2sgPSAoaW50KSAodG8gPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpOworCQkvKgorCQkgKiBXcml0ZSAnREZTLCBGQkEnIG9mIEZsYXNoCisJCSAqIEFkZDogRjEwMGggRFE9REZTLCBGQkEKKwkJICovCisKKwkJdmFsdWUgPSBvbmVuYW5kX2Jsb2NrX2FkZHJlc3ModGhpcywgYmxvY2spOworCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsKKwkJCQlPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSk7CisKKwkJLyoKKwkJICogU2VsZWN0IERhdGFSQU0gZm9yIEREUAorCQkgKiBBZGQ6IEYxMDFoIERRPURCUworCQkgKi8KKworCQl2YWx1ZSA9IG9uZW5hbmRfYnVmZmVycmFtX2FkZHJlc3ModGhpcywgYmxvY2spOworCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsKKwkJCQlPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CisJCU9ORU5BTkRfU0VUX05FWFRfQlVGRkVSUkFNKHRoaXMpOworCisJCS8qCisJCSAqIEVudGVyIE9UUCBhY2Nlc3MgbW9kZQorCQkgKi8KKwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOworCQl0aGlzLT53YWl0KG10ZCwgRkxfT1RQSU5HKTsKKworCQkvKiBXZSBzZW5kIGRhdGEgdG8gc3BhcmUgcmFtIHdpdGggb29ic2l6ZQorCQkgKiB0byBwcmV2ZW50IGJ5dGUgYWNjZXNzICovCisJCW1lbWNweShvb2JidWYgKyBjb2x1bW4sIGJ1ZiwgdGhpc2xlbik7CisKKwkJLyoKKwkJICogV3JpdGUgRGF0YSBpbnRvIERhdGFSQU0KKwkJICogQWRkOiA4dGggV29yZAorCQkgKiBpbiBzZWN0b3IwL3NwYXJlL3BhZ2UwCisJCSAqIERRPVhYRkNoCisJCSAqLworCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLAorCQkJCQlvb2JidWYsIDAsIG10ZC0+b29ic2l6ZSk7CisKKwkJb25lbmFuZF9vdHBfY29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1BST0dPT0IsIHRvLCBtdGQtPm9vYnNpemUpOworCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMCk7CisJCWlmIChPTkVOQU5EX0lTXzJQTEFORSh0aGlzKSkgeworCQkJT05FTkFORF9TRVRfQlVGRkVSUkFNMSh0aGlzKTsKKwkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIHRvICsgdGhpcy0+d3JpdGVzaXplLCAwKTsKKwkJfQorCisJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGUgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogRXhpdCBPVFAgYWNjZXNzIG1vZGUgKi8KKwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwkJdGhpcy0+d2FpdChtdGQsIEZMX1JFU0VUSU5HKTsKKworCQlzdGF0dXMgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJc3RhdHVzICY9IDB4NjA7CisKKwkJaWYgKHN0YXR1cyA9PSAweDYwKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiXG5CTE9DS1x0U1RBVFVTXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIxc3QgQmxvY2tcdExPQ0tFRFxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiT1RQIEJsb2NrXHRMT0NLRURcbiIpOworCQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDIwKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiXG5CTE9DS1x0U1RBVFVTXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIxc3QgQmxvY2tcdExPQ0tFRFxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiT1RQIEJsb2NrXHRVTi1MT0NLRURcbiIpOworCQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDQwKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiXG5CTE9DS1x0U1RBVFVTXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIxc3QgQmxvY2tcdFVOLUxPQ0tFRFxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiT1RQIEJsb2NrXHRMT0NLRURcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlYm9vdCB0byBjaGVja1xuIik7CisJCX0KKworCQl3cml0dGVuICs9IHRoaXNsZW47CisJCWlmICh3cml0dGVuID09IGxlbikKKwkJCWJyZWFrOworCisJCXRvICs9IG10ZC0+d3JpdGVzaXplOworCQlidWYgKz0gdGhpc2xlbjsKKwkJY29sdW1uID0gMDsKKwl9CisKKwlvcHMtPm9vYnJldGxlbiA9IHdyaXR0ZW47CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBJbnRlcm5hbCBPVFAgb3BlcmF0aW9uICovCiB0eXBlZGVmIGludCAoKm90cF9vcF90KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZvcm0sIHNpemVfdCBsZW4sCiAJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CkBAIC0yNjU5LDExICszMDk4LDExIEBACiAJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKIAlpbnQgcmV0OwogCi0JLyogRW50ZXIgT1RQIGFjY2VzcyBtb2RlICovCi0JdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOwotCXRoaXMtPndhaXQobXRkLCBGTF9PVFBJTkcpOwotCiAJaWYgKEZMRVhPTkVOQU5EKHRoaXMpKSB7CisKKwkJLyogRW50ZXIgT1RQIGFjY2VzcyBtb2RlICovCisJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9PVFBfQUNDRVNTLCAwLCAwKTsKKwkJdGhpcy0+d2FpdChtdGQsIEZMX09UUElORyk7CiAJCS8qCiAJCSAqIEZvciBGbGV4LU9uZU5BTkQsIHdlIHdyaXRlIGxvY2sgbWFyayB0byAxc3Qgd29yZCBvZiBzZWN0b3IgNCBvZgogCQkgKiBtYWluIGFyZWEgb2YgcGFnZSA0OS4KQEAgLTI2NzQsMTkgKzMxMTMsMTkgQEAKIAkJb3BzLm9vYmJ1ZiA9IE5VTEw7CiAJCXJldCA9IG9uZW5hbmRfd3JpdGVfb3BzX25vbG9jayhtdGQsIG10ZC0+d3JpdGVzaXplICogNDksICZvcHMpOwogCQkqcmV0bGVuID0gb3BzLnJldGxlbjsKKworCQkvKiBFeGl0IE9UUCBhY2Nlc3MgbW9kZSAqLworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVTRVQsIDAsIDApOworCQl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOwogCX0gZWxzZSB7CiAJCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKIAkJb3BzLm9vYmxlbiA9IGxlbjsKIAkJb3BzLm9vYmJ1ZiA9IGJ1ZjsKIAkJb3BzLm9vYm9mZnMgPSAwOwotCQlyZXQgPSBvbmVuYW5kX3dyaXRlX29vYl9ub2xvY2sobXRkLCBmcm9tLCAmb3BzKTsKKwkJcmV0ID0gb25lbmFuZF9vdHBfd3JpdGVfb29iX25vbG9jayhtdGQsIGZyb20sICZvcHMpOwogCQkqcmV0bGVuID0gb3BzLm9vYnJldGxlbjsKIAl9CiAKLQkvKiBFeGl0IE9UUCBhY2Nlc3MgbW9kZSAqLwotCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRVNFVCwgMCwgMCk7Ci0JdGhpcy0+d2FpdChtdGQsIEZMX1JFU0VUSU5HKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MTcsMTYgKzMxNTYsMjEgQEAKIAlpZiAoZGVuc2l0eSA8IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfNTEyTWIpCiAJCW90cF9wYWdlcyA9IDIwOwogCWVsc2UKLQkJb3RwX3BhZ2VzID0gMTA7CisJCW90cF9wYWdlcyA9IDUwOwogCiAJaWYgKG1vZGUgPT0gTVREX09UUF9GQUNUT1JZKSB7CiAJCWZyb20gKz0gbXRkLT53cml0ZXNpemUgKiBvdHBfcGFnZXM7Ci0JCW90cF9wYWdlcyA9IDY0IC0gb3RwX3BhZ2VzOworCQlvdHBfcGFnZXMgPSBPTkVOQU5EX1BBR0VTX1BFUl9CTE9DSyAtIG90cF9wYWdlczsKIAl9CiAKIAkvKiBDaGVjayBVc2VyL0ZhY3RvcnkgYm91bmRhcnkgKi8KLQlpZiAoKChtdGQtPndyaXRlc2l6ZSAqIG90cF9wYWdlcykgLSAoZnJvbSArIGxlbikpIDwgMCkKLQkJcmV0dXJuIDA7CisJaWYgKG1vZGUgPT0gTVREX09UUF9VU0VSKSB7CisJCWlmIChtdGQtPndyaXRlc2l6ZSAqIG90cF9wYWdlcyA8IGZyb20gKyBsZW4pCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpZiAobXRkLT53cml0ZXNpemUgKiBvdHBfcGFnZXMgPCAgbGVuKQorCQkJcmV0dXJuIDA7CisJfQogCiAJb25lbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfT1RQSU5HKTsKIAl3aGlsZSAobGVuID4gMCAmJiBvdHBfcGFnZXMgPiAwKSB7CkBAIC0yNzQ5LDEzICszMTkzLDEyIEBACiAJCQkqcmV0bGVuICs9IHNpemVvZihzdHJ1Y3Qgb3RwX2luZm8pOwogCQl9IGVsc2UgewogCQkJc2l6ZV90IHRtcF9yZXRsZW47Ci0JCQlpbnQgc2l6ZSA9IGxlbjsKIAogCQkJcmV0ID0gYWN0aW9uKG10ZCwgZnJvbSwgbGVuLCAmdG1wX3JldGxlbiwgYnVmKTsKIAotCQkJYnVmICs9IHNpemU7Ci0JCQlsZW4gLT0gc2l6ZTsKLQkJCSpyZXRsZW4gKz0gc2l6ZTsKKwkJCWJ1ZiArPSB0bXBfcmV0bGVuOworCQkJbGVuIC09IHRtcF9yZXRsZW47CisJCQkqcmV0bGVuICs9IHRtcF9yZXRsZW47CiAKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CkBAIC0yODY4LDIxICszMzExLDExIEBACiAJdV9jaGFyICpidWYgPSBGTEVYT05FTkFORCh0aGlzKSA/IHRoaXMtPnBhZ2VfYnVmIDogdGhpcy0+b29iX2J1ZjsKIAlzaXplX3QgcmV0bGVuOwogCWludCByZXQ7CisJdW5zaWduZWQgaW50IG90cF9sb2NrX29mZnNldCA9IE9ORU5BTkRfT1RQX0xPQ0tfT0ZGU0VUOwogCiAJbWVtc2V0KGJ1ZiwgMHhmZiwgRkxFWE9ORU5BTkQodGhpcykgPyB0aGlzLT53cml0ZXNpemUKIAkJCQkJCSA6IG10ZC0+b29ic2l6ZSk7CiAJLyoKLQkgKiBOb3RlOiBPVFAgbG9jayBvcGVyYXRpb24KLQkgKiAgICAgICBPVFAgYmxvY2sgOiAweFhYRkMKLQkgKiAgICAgICAxc3QgYmxvY2sgOiAweFhYRjMgKElmIGNoaXAgc3VwcG9ydCkKLQkgKiAgICAgICBCb3RoICAgICAgOiAweFhYRjAgKElmIGNoaXAgc3VwcG9ydCkKLQkgKi8KLQlpZiAoRkxFWE9ORU5BTkQodGhpcykpCi0JCWJ1ZltGTEVYT05FTkFORF9PVFBfTE9DS19PRkZTRVRdID0gMHhGQzsKLQllbHNlCi0JCWJ1ZltPTkVOQU5EX09UUF9MT0NLX09GRlNFVF0gPSAweEZDOwotCi0JLyoKIAkgKiBXcml0ZSBsb2NrIG1hcmsgdG8gOHRoIHdvcmQgb2Ygc2VjdG9yMCBvZiBwYWdlMCBvZiB0aGUgc3BhcmUwLgogCSAqIFdlIHdyaXRlIDE2IGJ5dGVzIHNwYXJlIGFyZWEgaW5zdGVhZCBvZiAyIGJ5dGVzLgogCSAqIEZvciBGbGV4LU9uZU5BTkQsIHdlIHdyaXRlIGxvY2sgbWFyayB0byAxc3Qgd29yZCBvZiBzZWN0b3IgNCBvZgpAQCAtMjg5MiwxMCArMzMyNSwzMCBAQAogCWZyb20gPSAwOwogCWxlbiA9IEZMRVhPTkVOQU5EKHRoaXMpID8gbXRkLT53cml0ZXNpemUgOiAxNjsKIAorCS8qCisJICogTm90ZTogT1RQIGxvY2sgb3BlcmF0aW9uCisJICogICAgICAgT1RQIGJsb2NrIDogMHhYWEZDCQkJWFggMTExMSAxMTAwCisJICogICAgICAgMXN0IGJsb2NrIDogMHhYWEYzIChJZiBjaGlwIHN1cHBvcnQpCVhYIDExMTEgMDAxMQorCSAqICAgICAgIEJvdGggICAgICA6IDB4WFhGMCAoSWYgY2hpcCBzdXBwb3J0KQlYWCAxMTExIDAwMDAKKwkgKi8KKwlpZiAoRkxFWE9ORU5BTkQodGhpcykpCisJCW90cF9sb2NrX29mZnNldCA9IEZMRVhPTkVOQU5EX09UUF9MT0NLX09GRlNFVDsKKworCS8qIE9ORU5BTkRfT1RQX0FSRUEgfCBPTkVOQU5EX09UUF9CTE9DSzAgfCBPTkVOQU5EX09UUF9BUkVBX0JMT0NLMCAqLworCWlmIChvdHAgPT0gMSkKKwkJYnVmW290cF9sb2NrX29mZnNldF0gPSAweEZDOworCWVsc2UgaWYgKG90cCA9PSAyKQorCQlidWZbb3RwX2xvY2tfb2Zmc2V0XSA9IDB4RjM7CisJZWxzZSBpZiAob3RwID09IDMpCisJCWJ1ZltvdHBfbG9ja19vZmZzZXRdID0gMHhGMDsKKwllbHNlIGlmIChvdHAgIT0gMCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIltPbmVOQU5EXSBJbnZhbGlkIG9wdGlvbiBzZWxlY3RlZCBmb3IgT1RQXG4iKTsKKwogCXJldCA9IG9uZW5hbmRfb3RwX3dhbGsobXRkLCBmcm9tLCBsZW4sICZyZXRsZW4sIGJ1ZiwgZG9fb3RwX2xvY2ssIE1URF9PVFBfVVNFUik7CiAKIAlyZXR1cm4gcmV0ID8gOiByZXRsZW47CiB9CisKICNlbmRpZgkvKiBDT05GSUdfTVREX09ORU5BTkRfT1RQICovCiAKIC8qKgpAQCAtMzE3Miw3ICszNjI1LDggQEAKIAkJCQlicmVhazsKIAogCQlpZiAoaSAhPSBtdGQtPm9vYnNpemUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJsb2NrICVkIG5vdCBlcmFzZWQuXG4iLCBibG9jayk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQmxvY2sgJWQgbm90IGVyYXNlZC5cbiIsCisJCQkJX19mdW5jX18sIGJsb2NrKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMzIwNCw4ICszNjU4LDggQEAKIAlibGtzcGVyZGllID4+PSBPTkVOQU5EX0lTX0REUCh0aGlzKSA/IDEgOiAwOwogCiAJaWYgKGJvdW5kYXJ5ID49IGJsa3NwZXJkaWUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmbGV4b25lbmFuZF9zZXRfYm91bmRhcnk6IEludmFsaWQgYm91bmRhcnkgdmFsdWUuICIKLQkJCQkiQm91bmRhcnkgbm90IGNoYW5nZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBib3VuZGFyeSB2YWx1ZS4gIgorCQkJCSJCb3VuZGFyeSBub3QgY2hhbmdlZC5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zMjE0LDcgKzM2NjgsOCBAQAogCW5ldyA9IGJvdW5kYXJ5ICsgKGRpZSAqIHRoaXMtPmRlbnNpdHlfbWFzayk7CiAJcmV0ID0gZmxleG9uZW5hbmRfY2hlY2tfYmxvY2tzX2VyYXNlZChtdGQsIG1pbihvbGQsIG5ldykgKyAxLCBtYXgob2xkLCBuZXcpKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmxleG9uZW5hbmRfc2V0X2JvdW5kYXJ5OiBQbGVhc2UgZXJhc2UgYmxvY2tzIGJlZm9yZSBib3VuZGFyeSBjaGFuZ2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQbGVhc2UgZXJhc2UgYmxvY2tzICIKKwkJCQkiYmVmb3JlIGJvdW5kYXJ5IGNoYW5nZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzIyNywxMiArMzY4MiwxMiBAQAogCiAJdGhpc2JvdW5kYXJ5ID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX0RBVEFSQU0pOwogCWlmICgodGhpc2JvdW5kYXJ5ID4+IEZMRVhPTkVOQU5EX1BJX1VOTE9DS19TSElGVCkgIT0gMykgewotCQlwcmludGsoS0VSTl9FUlIgImZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeTogYm91bmRhcnkgbG9ja2VkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYm91bmRhcnkgbG9ja2VkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IDE7CiAJCWdvdG8gb3V0OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gImZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeTogQ2hhbmdpbmcgZGllICVkIGJvdW5kYXJ5OiAlZCVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gIkNoYW5naW5nIGRpZSAlZCBib3VuZGFyeTogJWQlc1xuIiwKIAkJCWRpZSwgYm91bmRhcnksIGxvY2sgPyAiKExvY2tlZCkiIDogIihVbmxvY2tlZCkiKTsKIAogCWFkZHIgPSBkaWUgPyB0aGlzLT5kaWVzaXplWzBdIDogMDsKQEAgLTMyNDMsNyArMzY5OCw4IEBACiAJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0VSQVNFLCBhZGRyLCAwKTsKIAlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfRVJBU0lORyk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeTogRmFpbGVkIFBJIGVyYXNlIGZvciBEaWUgJWRcbiIsIGRpZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCBQSSBlcmFzZSBmb3IgRGllICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRpZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzI1MSw3ICszNzA3LDggQEAKIAl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPRywgYWRkciwgMCk7CiAJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmbGV4b25lbmFuZF9zZXRfYm91bmRhcnk6IEZhaWxlZCBQSSB3cml0ZSBmb3IgRGllICVkXG4iLCBkaWUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgUEkgd3JpdGUgZm9yIERpZSAlZFxuIiwKKwkJCV9fZnVuY19fLCBkaWUpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM0MDgsOCArMzg2NSw4IEBACiAJaWYgKHRoaXMtPnN0YXRlID09IEZMX1BNX1NVU1BFTkRFRCkKIAkJb25lbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJyZXN1bWUoKSBjYWxsZWQgZm9yIHRoZSBjaGlwIHdoaWNoIGlzIG5vdCIKLQkJCQkiaW4gc3VzcGVuZGVkIHN0YXRlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzdW1lKCkgY2FsbGVkIGZvciB0aGUgY2hpcCB3aGljaCBpcyBub3QgIgorCQkJCSJpbiBzdXNwZW5kZWQgc3RhdGVcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoqCkBAIC0zNDY0LDcgKzM5MjEsOCBAQAogCWlmICghdGhpcy0+cGFnZV9idWYpIHsKIAkJdGhpcy0+cGFnZV9idWYgPSBremFsbG9jKG10ZC0+d3JpdGVzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0aGlzLT5wYWdlX2J1ZikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3NjYW4oKTogQ2FuJ3QgYWxsb2NhdGUgcGFnZV9idWZcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgcGFnZV9idWZcbiIsCisJCQkJX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJdGhpcy0+b3B0aW9ucyB8PSBPTkVOQU5EX1BBR0VCVUZfQUxMT0M7CkBAIC0zNDcyLDcgKzM5MzAsOCBAQAogCWlmICghdGhpcy0+b29iX2J1ZikgewogCQl0aGlzLT5vb2JfYnVmID0ga3phbGxvYyhtdGQtPm9vYnNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXRoaXMtPm9vYl9idWYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9zY2FuKCk6IENhbid0IGFsbG9jYXRlIG9vYl9idWZcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgb29iX2J1ZlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlpZiAodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfUEFHRUJVRl9BTExPQykgewogCQkJCXRoaXMtPm9wdGlvbnMgJj0gfk9ORU5BTkRfUEFHRUJVRl9BTExPQzsKIAkJCQlrZnJlZSh0aGlzLT5wYWdlX2J1Zik7CkBAIC0zNTA1LDggKzM5NjQsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIE9PQiBzY2hlbWUgZGVmaW5lZCBmb3Igb29ic2l6ZSAlZFxuIiwKLQkJCW10ZC0+b29ic2l6ZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBPT0Igc2NoZW1lIGRlZmluZWQgZm9yIG9vYnNpemUgJWRcbiIsCisJCQlfX2Z1bmNfXywgbXRkLT5vb2JzaXplKTsKIAkJbXRkLT5zdWJwYWdlX3NmdCA9IDA7CiAJCS8qIFRvIHByZXZlbnQga2VybmVsIG9vcHMgKi8KIAkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzMyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdGVzdHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC90ZXN0cy9NYWtlZmlsZQppbmRleCBjMWQ1MDEzLi5iNDRkY2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC90ZXN0cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC90ZXN0cy9NYWtlZmlsZQpAQCAtNSwzICs1LDQgQEAKIG9iai0kKENPTkZJR19NVERfVEVTVFMpICs9IG10ZF9zdHJlc3N0ZXN0Lm8KIG9iai0kKENPTkZJR19NVERfVEVTVFMpICs9IG10ZF9zdWJwYWdldGVzdC5vCiBvYmotJChDT05GSUdfTVREX1RFU1RTKSArPSBtdGRfdG9ydHVyZXRlc3Qubworb2JqLSQoQ09ORklHX01URF9URVNUUykgKz0gbXRkX25hbmRlY2N0ZXN0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9uYW5kZWNjdGVzdC5jIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX25hbmRlY2N0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmMzEwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9uYW5kZWNjdGVzdC5jCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9NT0RVTEUpCisKK3N0YXRpYyB2b2lkIGluamVjdF9zaW5nbGVfYml0X2Vycm9yKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmFuZG9tMzIoKSAlIChzaXplICogQklUU19QRVJfQllURSk7CisKKwlfX2NoYW5nZV9iaXQob2Zmc2V0LCBkYXRhKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGF0YVs1MTJdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZXJyb3JfZGF0YVs1MTJdOworCitzdGF0aWMgaW50IG5hbmRfZWNjX3Rlc3QoY29uc3Qgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgY2hhciBjb2RlWzNdOworCXVuc2lnbmVkIGNoYXIgZXJyb3JfY29kZVszXTsKKwljaGFyIHRlc3RuYW1lWzMwXTsKKworCUJVR19PTihzaXplb2YoZGF0YSkgPCBzaXplKTsKKworCXNwcmludGYodGVzdG5hbWUsICJuYW5kLWVjYy0lenUiLCBzaXplKTsKKworCWdldF9yYW5kb21fYnl0ZXMoZGF0YSwgc2l6ZSk7CisKKwltZW1jcHkoZXJyb3JfZGF0YSwgZGF0YSwgc2l6ZSk7CisJaW5qZWN0X3NpbmdsZV9iaXRfZXJyb3IoZXJyb3JfZGF0YSwgc2l6ZSk7CisKKwlfX25hbmRfY2FsY3VsYXRlX2VjYyhkYXRhLCBzaXplLCBjb2RlKTsKKwlfX25hbmRfY2FsY3VsYXRlX2VjYyhlcnJvcl9kYXRhLCBzaXplLCBlcnJvcl9jb2RlKTsKKwlfX25hbmRfY29ycmVjdF9kYXRhKGVycm9yX2RhdGEsIGNvZGUsIGVycm9yX2NvZGUsIHNpemUpOworCisJaWYgKCFtZW1jbXAoZGF0YSwgZXJyb3JfZGF0YSwgc2l6ZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXRkX25hbmRlY2N0ZXN0OiBvayAtICVzXG4iLCB0ZXN0bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCXByaW50ayhLRVJOX0VSUiAibXRkX25hbmRlY2N0ZXN0OiBub3Qgb2sgLSAlc1xuIiwgdGVzdG5hbWUpOworCisJcHJpbnRrKEtFUk5fREVCVUcgImhleGR1bXAgb2YgZGF0YTpcbiIpOworCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCA0LAorCQkJZGF0YSwgc2l6ZSwgZmFsc2UpOworCXByaW50ayhLRVJOX0RFQlVHICJoZXhkdW1wIG9mIGVycm9yIGRhdGE6XG4iKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgNCwKKwkJCWVycm9yX2RhdGEsIHNpemUsIGZhbHNlKTsKKworCXJldHVybiAtMTsKK30KKworI2Vsc2UKKworc3RhdGljIGludCBuYW5kX2VjY190ZXN0KGNvbnN0IHNpemVfdCBzaXplKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgZWNjX3Rlc3RfaW5pdCh2b2lkKQoreworCXNyYW5kb20zMihqaWZmaWVzKTsKKworCW5hbmRfZWNjX3Rlc3QoMjU2KTsKKwluYW5kX2VjY190ZXN0KDUxMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVjY190ZXN0X2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoZWNjX3Rlc3RfaW5pdCk7Cittb2R1bGVfZXhpdChlY2NfdGVzdF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJOQU5EIEVDQyBmdW5jdGlvbiB0ZXN0IG1vZHVsZSIpOworTU9EVUxFX0FVVEhPUigiQWtpbm9idSBNaXRhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC90ZXN0cy9tdGRfb29idGVzdC5jIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX29vYnRlc3QuYwppbmRleCA1NTUzY2Q0Li41ODEzOTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC90ZXN0cy9tdGRfb29idGVzdC5jCisrKyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9vb2J0ZXN0LmMKQEAgLTM0Myw3ICszNDMsNiBAQAogCQlwcmludGsoUFJJTlRfUFJFRiAiZXJyb3I6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGJidCwgMCAsIGViY250KTsKIAogCXByaW50ayhQUklOVF9QUkVGICJzY2FubmluZyBmb3IgYmFkIGVyYXNlYmxvY2tzXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgZWJjbnQ7ICsraSkgewpAQCAtMzkyLDcgKzM5MSw2IEBACiAJICAgICAgIG10ZC0+d3JpdGVzaXplLCBlYmNudCwgcGdjbnQsIG10ZC0+b29ic2l6ZSk7CiAKIAllcnIgPSAtRU5PTUVNOwotCW10ZC0+ZXJhc2VzaXplID0gbXRkLT5lcmFzZXNpemU7CiAJcmVhZGJ1ZiA9IGttYWxsb2MobXRkLT5lcmFzZXNpemUsIEdGUF9LRVJORUwpOwogCWlmICghcmVhZGJ1ZikgewogCQlwcmludGsoUFJJTlRfUFJFRiAiZXJyb3I6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOwpAQCAtNDc2LDE4ICs0NzQsMTAgQEAKIAl1c2VfbGVuX21heCA9IG10ZC0+ZWNjbGF5b3V0LT5vb2JhdmFpbDsKIAl2YXJ5X29mZnNldCA9IDE7CiAJc2ltcGxlX3NyYW5kKDUpOwotCXByaW50ayhQUklOVF9QUkVGICJ3cml0aW5nIE9PQnMgb2Ygd2hvbGUgZGV2aWNlXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgZWJjbnQ7ICsraSkgewotCQlpZiAoYmJ0W2ldKQotCQkJY29udGludWU7Ci0JCWVyciA9IHdyaXRlX2VyYXNlYmxvY2soaSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQkJaWYgKGkgJSAyNTYgPT0gMCkKLQkJCXByaW50ayhQUklOVF9QUkVGICJ3cml0dGVuIHVwIHRvIGVyYXNlYmxvY2sgJXVcbiIsIGkpOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0JcHJpbnRrKFBSSU5UX1BSRUYgIndyaXR0ZW4gJXUgZXJhc2VibG9ja3NcbiIsIGkpOworCisJZXJyID0gd3JpdGVfd2hvbGVfZGV2aWNlKCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CiAKIAkvKiBDaGVjayBhbGwgZXJhc2VibG9ja3MgKi8KIAl1c2Vfb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9wYWdldGVzdC5jIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3BhZ2V0ZXN0LmMKaW5kZXggMTAzY2FjNC4uY2UxN2NiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3BhZ2V0ZXN0LmMKKysrIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3BhZ2V0ZXN0LmMKQEAgLTUyMyw2ICs1MjMsNyBAQAogCWRvX2Rpdih0bXAsIG10ZC0+ZXJhc2VzaXplKTsKIAllYmNudCA9IHRtcDsKIAlwZ2NudCA9IG10ZC0+ZXJhc2VzaXplIC8gbXRkLT53cml0ZXNpemU7CisJcGdzaXplID0gbXRkLT53cml0ZXNpemU7CiAKIAlwcmludGsoUFJJTlRfUFJFRiAiTVREIGRldmljZSBzaXplICVsbHUsIGVyYXNlYmxvY2sgc2l6ZSAldSwgIgogCSAgICAgICAicGFnZSBzaXplICV1LCBjb3VudCBvZiBlcmFzZWJsb2NrcyAldSwgcGFnZXMgcGVyICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IDc4YjcxNjcuLjVkZjQ2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMzc1LDcgKzM3NSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2b3J0ZXhfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHZvcnRleF9wY2lfdGJsKSA9IHsKIAl7IDB4MTBCNywgMHg1OTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF8zQzU5MCB9LAogCXsgMHgxMEI3LCAweDU5MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIXzNDNTkyIH0sCiAJeyAweDEwQjcsIDB4NTk3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfM0M1OTcgfSwKQEAgLTgzNyw3ICs4MzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdm9ydGV4X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2b3J0ZXhfcG1fb3BzID0gewogCS5zdXNwZW5kID0gdm9ydGV4X3N1c3BlbmQsCiAJLnJlc3VtZSA9IHZvcnRleF9yZXN1bWUsCiAJLmZyZWV6ZSA9IHZvcnRleF9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCAzZjQ1MmJjLi45ZDU5NjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiBzdGF0aWMgaW50IGNwX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3BfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCVBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5KSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UVFRFQ0gsCVBDSV9ERVZJQ0VfSURfVFRURUNIX01DMzIyKSwgfSwKIAl7IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggMjVmNzMzOS4uMzIxZTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtMjMxLDcgKzIzMSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTM5X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydGw4MTM5X3BjaV90YmwpID0gewogCXsweDEwZWMsIDB4ODEzOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDEwZWMsIDB4ODEzOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDExMTMsIDB4MTIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggNmM1MjFiNC4uNWJlNmEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0xOTUzLDYgKzE5NTMsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L2ZzX2VuZXQvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL25ldC9vY3Rlb24vS2NvbmZpZyIKKwogZW5kaWYgIyBORVRfRVRIRVJORVQKIAogIwpAQCAtMjYxNiw2ICsyNjE4LDI4IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBJWEdCRVZGCisgICAgICAgdHJpc3RhdGUgIkludGVsKFIpIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydCIKKyAgICAgICBkZXBlbmRzIG9uIFBDSV9NU0kKKyAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSA4MjU5OSB2aXJ0dWFsIGZ1bmN0aW9ucy4gIEZvciBtb3JlCisgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmCisgICAgICAgICBEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgICAgICAgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL3NiL0NTLTAwODQ0MS5odG0+CisKKyAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0LCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydAorICAgICAgICAgd2Vic2l0ZSBhdDoKKworICAgICAgICAgPGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbT4KKworICAgICAgICAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluCisgICAgICAgICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmV2Zi50eHQ+LgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisgICAgICAgICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWQKKyAgICAgICAgIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS4KKwogY29uZmlnIElYR0IKIAl0cmlzdGF0ZSAiSW50ZWwoUikgUFJPLzEwR2JFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggMjQ2MzIzZC4uNjc0NmU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIG9iai0kKENPTkZJR19JR0IpICs9IGlnYi8KIG9iai0kKENPTkZJR19JR0JWRikgKz0gaWdidmYvCiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLworb2JqLSQoQ09ORklHX0lYR0JFVkYpICs9IGl4Z2JldmYvCiBvYmotJChDT05GSUdfSVhHQikgKz0gaXhnYi8KIG9iai0kKENPTkZJR19JUDEwMDApICs9IGlwZy5vCiBvYmotJChDT05GSUdfQ0hFTFNJT19UMSkgKz0gY2hlbHNpby8KQEAgLTI4NSwzICsyODYsNSBAQAogb2JqLSQoQ09ORklHX1NGQykgKz0gc2ZjLwogCiBvYmotJChDT05GSUdfV0lNQVgpICs9IHdpbWF4LworCitvYmotJChDT05GSUdfT0NURU9OX01HTVRfRVRIRVJORVQpICs9IG9jdGVvbi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggZDgyYTlhOS4uZWM2MjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmMKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NHSV9BQ0VOSUMJMHgwMDA5CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFjZW5pY19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWNlbmljX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9BTFRFT04sIFBDSV9ERVZJQ0VfSURfQUxURU9OX0FDRU5JQ19GSUJSRSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIDB4ZmZmZjAwLCB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTFRFT04sIFBDSV9ERVZJQ0VfSURfQUxURU9OX0FDRU5JQ19DT1BQRVIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwppbmRleCA3NjZhYWJmLi41NDVjNzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGR5bmFtaWNfaXBnLCBib29sLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHluYW1pY19pcGcsICJFbmFibGUgb3IgRGlzYWJsZSBkeW5hbWljIElQRywgMTogRW5hYmxlLCAwOiBEaXNhYmxlIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ4MTExZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYW1kODExMWVfcGNpX3RibCkgPSB7CiAKIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRDgxMTFFXzc0NjIsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCmluZGV4IGRiZjRkZTMuLmI2OGUxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjb20yMDAyMHBjaV9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNvbTIwMDIwcGNpX2lkX3RhYmxlKSA9IHsKIAl7IDB4MTU3MSwgMHhhMDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyAweDE1NzEsIDB4YTAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgMHgxNTcxLCAweGEwMDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCmluZGV4IGIyNTQ2N2EuLmJmNzJkNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwpAQCAtOSw2ICs5LDggQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KKwogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMCw5ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPG1hY2gvZXA5M3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJlcDkzeHgtZXRoIgogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjAuMSIKQEAgLTE4NSw3ICsxODcsNDcgQEAKICNkZWZpbmUgd3J3KGVwLCBvZmYsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKICNkZWZpbmUgd3JsKGVwLCBvZmYsIHZhbCkJX19yYXdfd3JpdGVsKCh2YWwpLCAoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKIAotc3RhdGljIGludCBlcDkzeHhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcpOworc3RhdGljIGludCBlcDkzeHhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGRhdGE7CisJaW50IGk7CisKKwl3cmwoZXAsIFJFR19NSUlDTUQsIFJFR19NSUlDTURfUkVBRCB8IChwaHlfaWQgPDwgNSkgfCByZWcpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKChyZGwoZXAsIFJFR19NSUlTVFMpICYgUkVHX01JSVNUU19CVVNZKSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaSA9PSAxMCkgeworCQlwcl9pbmZvKCJtZGlvIHJlYWQgdGltZWQgb3V0XG4iKTsKKwkJZGF0YSA9IDB4ZmZmZjsKKwl9IGVsc2UgeworCQlkYXRhID0gcmRsKGVwLCBSRUdfTUlJREFUQSk7CisJfQorCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcsIGludCBkYXRhKQoreworCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJd3JsKGVwLCBSRUdfTUlJREFUQSwgZGF0YSk7CisJd3JsKGVwLCBSRUdfTUlJQ01ELCBSRUdfTUlJQ01EX1dSSVRFIHwgKHBoeV9pZCA8PCA1KSB8IHJlZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAoKHJkbChlcCwgUkVHX01JSVNUUykgJiBSRUdfTUlJU1RTX0JVU1kpID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmIChpID09IDEwKQorCQlwcl9pbmZvKCJtZGlvIHdyaXRlIHRpbWVkIG91dFxuIik7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXA5M3h4X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjE3LDE0ICsyNTksMTEgQEAKIAkJcnN0YXQtPnJzdGF0MSA9IDA7CiAKIAkJaWYgKCEocnN0YXQwICYgUlNUQVQwX0VPRikpCi0JCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IG5vdCBlbmQtb2YtZnJhbWUgIgotCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJCXByX2NyaXQoIm5vdCBlbmQtb2YtZnJhbWUgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CiAJCWlmICghKHJzdGF0MCAmIFJTVEFUMF9FT0IpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3J4OiBub3QgZW5kLW9mLWJ1ZmZlciAiCi0JCQkJCSAiICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOworCQkJcHJfY3JpdCgibm90IGVuZC1vZi1idWZmZXIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CiAJCWlmICgocnN0YXQxICYgUlNUQVQxX0JVRkZFUl9JTkRFWCkgPj4gMTYgIT0gZW50cnkpCi0JCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IGVudHJ5IG1pc21hdGNoICIKLQkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CisJCQlwcl9jcml0KCJlbnRyeSBtaXNtYXRjaCAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKIAogCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfUldFKSkgewogCQkJZXAtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtMjQxLDggKzI4MCw3IEBACiAKIAkJbGVuZ3RoID0gcnN0YXQxICYgUlNUQVQxX0ZSQU1FX0xFTkdUSDsKIAkJaWYgKGxlbmd0aCA+IE1BWF9QS1RfU0laRSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJlcDkzeHhfcng6IGludmFsaWQgbGVuZ3RoICIKLQkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CisJCQlwcl9ub3RpY2UoImludmFsaWQgbGVuZ3RoICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOwogCQkJZ290byBlcnI7CiAJCX0KIApAQCAtMzcxLDExICs0MDksOSBAQAogCQl0c3RhdC0+dHN0YXQwID0gMDsKIAogCQlpZiAodHN0YXQwICYgVFNUQVQwX0ZBKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3R4X2NvbXBsZXRlOiBmcmFtZSBhYm9ydGVkICIKLQkJCQkJICIgJS44eFxuIiwgdHN0YXQwKTsKKwkJCXByX2NyaXQoImZyYW1lIGFib3J0ZWQgJS44eFxuIiwgdHN0YXQwKTsKIAkJaWYgKCh0c3RhdDAgJiBUU1RBVDBfQlVGRkVSX0lOREVYKSAhPSBlbnRyeSkKLQkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF90eF9jb21wbGV0ZTogZW50cnkgbWlzbWF0Y2ggIgotCQkJCQkgIiAlLjh4XG4iLCB0c3RhdDApOworCQkJcHJfY3JpdCgiZW50cnkgbWlzbWF0Y2ggJS44eFxuIiwgdHN0YXQwKTsKIAogCQlpZiAodHN0YXQwICYgVFNUQVQwX1RYV0UpIHsKIAkJCWludCBsZW5ndGggPSBlcC0+ZGVzY3MtPnRkZXNjW2VudHJ5XS50ZGVzYzEgJiAweGZmZjsKQEAgLTUzNiw3ICs1NzIsNyBAQAogCX0KIAogCWlmIChpID09IDEwKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgRFJWX01PRFVMRV9OQU1FICI6IGh3IGZhaWxlZCB0byByZXNldFxuIik7CisJCXByX2NyaXQoImh3IGZhaWxlZCB0byByZXNldFxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNTgxLDcgKzYxNyw3IEBACiAJfQogCiAJaWYgKGkgPT0gMTApIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTU9EVUxFX05BTUUgIjogaHcgZmFpbGVkIHRvIHN0YXJ0XG4iKTsKKwkJcHJfY3JpdCgiaHcgZmFpbGVkIHRvIHN0YXJ0XG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC02MTcsNyArNjUzLDcgQEAKIAl9CiAKIAlpZiAoaSA9PSAxMCkKLQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTU9EVUxFX05BTUUgIjogaHcgZmFpbGVkIHRvIHJlc2V0XG4iKTsKKwkJcHJfY3JpdCgiaHcgZmFpbGVkIHRvIHJlc2V0XG4iKTsKIH0KIAogc3RhdGljIGludCBlcDkzeHhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNjgxLDQ4ICs3MTcsNiBAQAogCXJldHVybiBnZW5lcmljX21paV9pb2N0bCgmZXAtPm1paSwgZGF0YSwgY21kLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBlcDkzeHhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcpCi17Ci0Jc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGRhdGE7Ci0JaW50IGk7Ci0KLQl3cmwoZXAsIFJFR19NSUlDTUQsIFJFR19NSUlDTURfUkVBRCB8IChwaHlfaWQgPDwgNSkgfCByZWcpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJaWYgKChyZGwoZXAsIFJFR19NSUlTVFMpICYgUkVHX01JSVNUU19CVVNZKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlpZiAoaSA9PSAxMCkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9NT0RVTEVfTkFNRSAiOiBtZGlvIHJlYWQgdGltZWQgb3V0XG4iKTsKLQkJZGF0YSA9IDB4ZmZmZjsKLQl9IGVsc2UgewotCQlkYXRhID0gcmRsKGVwLCBSRUdfTUlJREFUQSk7Ci0JfQotCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIGVwOTN4eF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcsIGludCBkYXRhKQotewotCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCi0Jd3JsKGVwLCBSRUdfTUlJREFUQSwgZGF0YSk7Ci0Jd3JsKGVwLCBSRUdfTUlJQ01ELCBSRUdfTUlJQ01EX1dSSVRFIHwgKHBoeV9pZCA8PCA1KSB8IHJlZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlpZiAoKHJkbChlcCwgUkVHX01JSVNUUykgJiBSRUdfTUlJU1RTX0JVU1kpID09IDApCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQotCWlmIChpID09IDEwKQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9NT0RVTEVfTkFNRSAiOiBtZGlvIHdyaXRlIHRpbWVkIG91dFxuIik7Ci19Ci0KIHN0YXRpYyB2b2lkIGVwOTN4eF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSk7CkBAIC04MjUsMTIgKzgxOSwxOSBAQAogCXN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCWludCBpcnE7CiAJaW50IGVycjsKIAogCWlmIChwZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCWRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIW1lbSB8fCBpcnEgPCAwKQorCQlyZXR1cm4gLUVOWElPOworCiAJZGV2ID0gZXA5M3h4X2Rldl9hbGxvYyhkYXRhKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTg0MiwyMyArODQzLDIxIEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JZXAtPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKLQkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKLQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwllcC0+cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwKKwkJCQkgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIAlpZiAoZXAtPnJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JZXAtPmJhc2VfYWRkciA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCk7CisJZXAtPmJhc2VfYWRkciA9IGlvcmVtYXAobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAlpZiAoZXAtPmJhc2VfYWRkciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGV0aGVybmV0IHJlZ2lzdGVyc1xuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyX291dDsKIAl9Ci0JZXAtPmlycSA9IHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0OworCWVwLT5pcnEgPSBpcnE7CiAKIAllcC0+bWlpLnBoeV9pZCA9IGRhdGEtPnBoeV9pZDsKIAllcC0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKQEAgLTg3NywxMSArODc2LDggQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBlcDkzeHggb24tY2hpcCBldGhlcm5ldCwgSVJRICVkLCAiCi0JCQkgIiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4LlxuIiwgZGV2LT5uYW1lLAotCQkJZXAtPmlycSwgZGF0YS0+ZGV2X2FkZHJbMF0sIGRhdGEtPmRldl9hZGRyWzFdLAotCQkJZGF0YS0+ZGV2X2FkZHJbMl0sIGRhdGEtPmRldl9hZGRyWzNdLAotCQkJZGF0YS0+ZGV2X2FkZHJbNF0sIGRhdGEtPmRldl9hZGRyWzVdKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogZXA5M3h4IG9uLWNoaXAgZXRoZXJuZXQsIElSUSAlZCwgJXBNXG4iLAorCQkJZGV2LT5uYW1lLCBlcC0+aXJxLCBkZXYtPmRldl9hZGRyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwppbmRleCA2OTFiODFlLi5jM2RmYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXJldCA9IGl4cDR4eF9tZGlvX2NtZChidXMsIHBoeV9pZCwgbG9jYXRpb24sIDEsIHZhbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRpb19sb2NrLCBmbGFncyk7CiAjaWYgREVCVUdfTURJTwotCXByaW50ayhLRVJOX0RFQlVHICIlcyAjJWk6IE1JSSByZWFkIFslaV0gPC0gMHglWCwgZXJyID0gJWlcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzICMlaTogTUlJIHdyaXRlIFslaV0gPC0gMHglWCwgZXJyID0gJWlcbiIsCiAJICAgICAgIGJ1cy0+bmFtZSwgcGh5X2lkLCBsb2NhdGlvbiwgdmFsLCByZXQpOwogI2VuZGlmCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCAyZjRiZTU5Li5kOTgwOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0zNSw3ICszNSw3IEBACiAgKiB7IFZlbmRvciBJRCwgRGV2aWNlIElELCBTdWJWZW5kb3IgSUQsIFN1YkRldmljZSBJRCwKICAqICAgQ2xhc3MsIENsYXNzIE1hc2ssIHByaXZhdGUgZGF0YSAobm90IHVzZWQpIH0KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0bDFjX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhdGwxY19wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wxQyl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDJDKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtMjU5NiwxMSArMjU5Niw4IEBACiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAlpZiAobmV0aWZfbXNnX3Byb2JlKGFkYXB0ZXIpKQotCQlkZXZfZGJnKCZwZGV2LT5kZXYsCi0JCQkibWFjIGFkZHJlc3MgOiAlMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeFxuIiwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzBdLCBhZGFwdGVyLT5ody5tYWNfYWRkclsxXSwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzJdLCBhZGFwdGVyLT5ody5tYWNfYWRkclszXSwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzRdLCBhZGFwdGVyLT5ody5tYWNfYWRkcls1XSk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1hYyBhZGRyZXNzIDogJXBNXG4iLAorCQkJYWRhcHRlci0+aHcubWFjX2FkZHIpOwogCiAJYXRsMWNfaHdfc2V0X21hY19hZGRyKCZhZGFwdGVyLT5odyk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5jb21tb25fdGFzaywgYXRsMWNfY29tbW9uX3Rhc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IDA4ZjhjMDkuLmQ1OWY4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMWVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0bDFlX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFFKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgMHgxMDY2KX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtMjM3OCwxMCArMjM3OCw3IEBACiAKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwotCWRldl9kYmcoJnBkZXYtPmRldiwgIm1hYyBhZGRyZXNzIDogJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMnhcbiIsCi0JCQlhZGFwdGVyLT5ody5tYWNfYWRkclswXSwgYWRhcHRlci0+aHcubWFjX2FkZHJbMV0sCi0JCQlhZGFwdGVyLT5ody5tYWNfYWRkclsyXSwgYWRhcHRlci0+aHcubWFjX2FkZHJbM10sCi0JCQlhZGFwdGVyLT5ody5tYWNfYWRkcls0XSwgYWRhcHRlci0+aHcubWFjX2FkZHJbNV0pOworCWRldl9kYmcoJnBkZXYtPmRldiwgIm1hYyBhZGRyZXNzIDogJXBNXG4iLCBhZGFwdGVyLT5ody5tYWNfYWRkcik7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGF0bDFlX3Jlc2V0X3Rhc2spOwogCUlOSVRfV09SSygmYWRhcHRlci0+bGlua19jaGdfdGFzaywgYXRsMWVfbGlua19jaGdfdGFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCmluZGV4IGI2Y2YzMjYuLjliYTU0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIC8qCiAgKiBhdGwxX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGwxX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhdGwxX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDEpfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwppbmRleCBlYzUyNTI5Li40MGNmOWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwpAQCAtNjMsNyArNjMsNyBAQAogLyoKICAqIGF0bDJfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0bDJfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0bDJfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMil9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCx9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDQ4NjlhZGIuLjQ0YjY2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX0I0NF9QQ0kKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiNDRfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGI0NF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9CQ000NDAxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX0JDTTQ0MDFCMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9CQ000NDAxQjEpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKaW5kZXggMTAyYWRlMS4uN2Y2NGQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMTYwNywzICsxNjA3LDMzIEBACiAJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQorCitleHRlcm4gaW50IGJlX2NtZF9nZXRfc2VlcHJvbV9kYXRhKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX2NtZF9yZXFfc2VlcHJvbV9yZWFkICpyZXE7CisJc3RydWN0IGJlX3NnZSAqc2dlOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJcmVxID0gbm9uZW1iX2NtZC0+dmE7CisJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxLAorCQkJT1BDT0RFX0NPTU1PTl9TRUVQUk9NX1JFQUQpOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX1NFRVBST01fUkVBRCwgc2l6ZW9mKCpyZXEpKTsKKworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQtPmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPnNpemUpOworCisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworCisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IGMwMDJiODMuLmNiMzE4OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0NSRUFURQkJCQkxMgogI2RlZmluZSBPUENPREVfQ09NTU9OX0VRX0NSRUFURQkJCQkxMwogI2RlZmluZSBPUENPREVfQ09NTU9OX01DQ19DUkVBVEUgICAgICAgIAkJMjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9TRUVQUk9NX1JFQUQJCQkzMAogI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfUlhfRklMVEVSICAgIAkJMzQKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfRldfVkVSU0lPTgkJCTM1CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fU0VUX0ZMT1dfQ09OVFJPTAkJCTM2CkBAIC04NTQsNiArODU1LDE5IEBACiAJdTggIHJjdl9idWZmWzQwOTZdOwogfTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqIFNFRVBST00gUmVhZCAqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBCRV9SRUFEX1NFRVBST01fTEVOIDEwMjQKK3N0cnVjdCBiZV9jbWRfcmVxX3NlZXByb21fcmVhZCB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCByc3ZkMFtCRV9SRUFEX1NFRVBST01fTEVOXTsKK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9zZWVwcm9tX3JlYWQgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggc2VlcHJvbV9kYXRhW0JFX1JFQURfU0VFUFJPTV9MRU5dOworfTsKKwogZXh0ZXJuIGludCBiZV9wY2lfZm51bV9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hY19hZGRyLApAQCAtOTI2LDUgKzk0MCw4IEBACiAJCQkJdTMyIG51bV9wa3RzLCB1NjQgcGF0dGVybik7CiBleHRlcm4gaW50IGJlX2NtZF9kZHJfZG1hX3Rlc3Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBwYXR0ZXJuLAogCQkJdTMyIGJ5dGVfY250LCBzdHJ1Y3QgYmVfZG1hX21lbSAqY21kKTsKK2V4dGVybiBpbnQgYmVfY21kX2dldF9zZWVwcm9tX2RhdGEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwogZXh0ZXJuIGludCBiZV9jbWRfc2V0X2xvb3BiYWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwKIAkJCQl1OCBsb29wYmFja190eXBlLCB1OCBlbmFibGUpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKaW5kZXggNWQwMDFjNC4uZjE4YzAyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwpAQCAtNTY3LDEyICs1NjcsNTcgQEAKIAlyZXR1cm4gYmVfbG9hZF9mdyhhZGFwdGVyLCBmaWxlX25hbWUpOwogfQogCitzdGF0aWMgaW50CitiZV9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJldHVybiBCRV9SRUFEX1NFRVBST01fTEVOOworfQorCitzdGF0aWMgaW50CitiZV9yZWFkX2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKKwkJCXVpbnQ4X3QgKmRhdGEpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBiZV9kbWFfbWVtIGVlcHJvbV9jbWQ7CisJc3RydWN0IGJlX2NtZF9yZXNwX3NlZXByb21fcmVhZCAqcmVzcDsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFlZXByb20tPmxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZXByb20tPm1hZ2ljID0gQkVfVkVORE9SX0lEIHwgKGFkYXB0ZXItPnBkZXYtPmRldmljZTw8MTYpOworCisJbWVtc2V0KCZlZXByb21fY21kLCAwLCBzaXplb2Yoc3RydWN0IGJlX2RtYV9tZW0pKTsKKwllZXByb21fY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfc2VlcHJvbV9yZWFkKTsKKwllZXByb21fY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZWVwcm9tX2NtZC5zaXplLAorCQkJCSZlZXByb21fY21kLmRtYSk7CisKKwlpZiAoIWVlcHJvbV9jbWQudmEpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuIENvdWxkIG5vdCByZWFkIGVlcHJvbVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXN0YXR1cyA9IGJlX2NtZF9nZXRfc2VlcHJvbV9kYXRhKGFkYXB0ZXIsICZlZXByb21fY21kKTsKKworCWlmICghc3RhdHVzKSB7CisJCXJlc3AgPSAoc3RydWN0IGJlX2NtZF9yZXNwX3NlZXByb21fcmVhZCAqKSBlZXByb21fY21kLnZhOworCQltZW1jcHkoZGF0YSwgcmVzcC0+c2VlcHJvbV9kYXRhLCBlZXByb20tPmxlbik7CisJfQorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZWVwcm9tX2NtZC5zaXplLCBlZXByb21fY21kLnZhLAorCQkJZWVwcm9tX2NtZC5kbWEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBiZV9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gYmVfZ2V0X2RydmluZm8sCiAJLmdldF93b2wgPSBiZV9nZXRfd29sLAogCS5zZXRfd29sID0gYmVfc2V0X3dvbCwKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfZWVwcm9tX2xlbiA9IGJlX2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tID0gYmVfcmVhZF9lZXByb20sCiAJLmdldF9jb2FsZXNjZSA9IGJlX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gYmVfc2V0X2NvYWxlc2NlLAogCS5nZXRfcmluZ3BhcmFtID0gYmVfZ2V0X3JpbmdwYXJhbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA2NWRmMWRlLi5iMWMyMGU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNjE0NSw2ICs2MTQ1LDEwIEBACiAJUkVHX1dSKGJwLCBCTlgyX1BDSV9NU0lYX1RCTF9PRkZfQklSLCBCTlgyX1BDSV9HUkNfV0lORE9XMl9CQVNFKTsKIAlSRUdfV1IoYnAsIEJOWDJfUENJX01TSVhfUEJBX09GRl9CSVQsIEJOWDJfUENJX0dSQ19XSU5ET1czX0JBU0UpOwogCisJLyogIE5lZWQgdG8gZmx1c2ggdGhlIHByZXZpb3VzIHRocmVlIHdyaXRlcyB0byBlbnN1cmUgTVNJLVgKKwkgKiAgaXMgc2V0dXAgcHJvcGVybHkgKi8KKwlSRUdfUkQoYnAsIEJOWDJfUENJX01TSVhfQ09OVFJPTCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQk5YMl9NQVhfTVNJWF9WRUM7IGkrKykgewogCQltc2l4X2VudFtpXS5lbnRyeSA9IGk7CiAJCW1zaXhfZW50W2ldLnZlY3RvciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKaW5kZXggMzA2YzJiOC4uY2E0ZWQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiB9OwogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBibngyeF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYm54MnhfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTApLCBCQ001NzcxMCB9LAogCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExKSwgQkNNNTc3MTEgfSwKIAl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMUUpLCBCQ001NzcxMUUgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDNmMDA3MWMuLjZhNDJhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMjYxNSw2ICsyNjE1LDE3IEBACiAJdW5zaWduZWQgY2hhciAqYXJwX3B0cjsKIAlfX2JlMzIgc2lwLCB0aXA7CiAKKwlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSB7CisJCS8qCisJCSAqIFdoZW4gdXNpbmcgVkxBTlMgYW5kIGJvbmRpbmcsIGRldiBhbmQgb3Jpdl9kZXYgbWF5IGJlCisJCSAqIGluY29ycmVjdCBpZiB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlIHN1cHBvcnRzIFZMQU4KKwkJICogYWNjZWxlcmF0aW9uLiAgV2l0aCB0aGlzIGNoYW5nZSBBUlAgdmFsaWRhdGlvbiBub3cKKwkJICogd29ya3MgZm9yIGhvc3RzIG9ubHkgcmVhY2hhYmxlIG9uIHRoZSBWTEFOIGludGVyZmFjZS4KKwkJICovCisJCWRldiA9IHZsYW5fZGV2X3JlYWxfZGV2KGRldik7CisJCW9yaWdfZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZGV2X25ldChza2ItPmRldiksc2tiLT5za2JfaWlmKTsKKwl9CisKIAlpZiAoIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfQk9ORElORykgfHwgIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnCmluZGV4IGNkMGYyZDYuLjI3ZDFkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnCkBAIC0xMSwxMiArMTEsMTMgQEAKIAogY29uZmlnIENBTl9NUEM1WFhYCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBNUEM1eHh4IG9uYm9hcmQgQ0FOIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBQUENfTVBDNTJ4eAorCWRlcGVuZHMgb24gKFBQQ19NUEM1Mnh4IHx8IFBQQ19NUEM1MTJ4KQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNUEM1eHh4Ci0JICBvbmJvYXJkIENBTiBjb250cm9sbGVyLgorCSAgb25ib2FyZCBDQU4gY29udHJvbGxlci4gQ3VycmVudGx5LCB0aGUgTVBDNTIwMCwgTVBDNTIwMEIgYW5kCisJICBNUEM1MTIxIChSZXYuIDIgYW5kIGxhdGVyKSBhcmUgc3VwcG9ydGVkLgogCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1zY2FuLW1wYzV4eHgua28uCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCmluZGV4IDFkZTZmNjMuLmY3MzQ4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAKQEAgLTM2LDIyICszNywyMSBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJtcGM1eHh4X2NhbiIKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9jZG1faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBtcGM1eHh4X2Nhbl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwl1MzIgKCpnZXRfY2xvY2spKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBjaGFyICpjbG9ja19uYW1lLAorCQkJIGludCAqbXNjYW5fY2xrc3JjKTsKK307CisKKyNpZmRlZiBDT05GSUdfUFBDX01QQzUyMDAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgbXBjNTJ4eF9jZG1faWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1jZG0iLCB9LAogCXt9CiB9OwogCi0vKgotICogR2V0IGZyZXF1ZW5jeSBvZiB0aGUgTVNDQU4gY2xvY2sgc291cmNlCi0gKgotICogRWl0aGVyIHRoZSBvc2NpbGxhdG9yIGNsb2NrIChTWVNfWFRBTF9JTikgb3IgdGhlIElQIGJ1cyBjbG9jayAoSVBfQ0xLKQotICogY2FuIGJlIHNlbGVjdGVkLiBBY2NvcmRpbmcgdG8gdGhlIE1QQzUyMDAgdXNlcidzIG1hbnVhbCwgdGhlIG9zY2lsbGF0b3IKLSAqIGNsb2NrIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIGFzIGl0IGhhcyBsZXNzIGppdHRlciBidXQgZHVlIHRvIGEgaGFyZHdhcmUKLSAqIGJ1ZywgaXQgY2FuIG5vdCBiZSBzZWxlY3RlZCBmb3IgdGhlIG9sZCBNUEM1MjAwIFJldi4gQSBjaGlwcy4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50ICBfX2RldmluaXQgbXBjNTJ4eF9jYW5fY2xvY2tfZnJlcShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZiwKLQkJCQkJCSAgICAgIGludCBjbG9ja19zcmMpCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGM1Mnh4X2Nhbl9nZXRfY2xvY2soc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkJCSAgIGludCAqbXNjYW5fY2xrc3JjKQogewogCXVuc2lnbmVkIGludCBwdnI7CiAJc3RydWN0IG1wYzUyeHhfY2RtICBfX2lvbWVtICpjZG07CkBAIC02MSwxMSArNjEsMjQgQEAKIAogCXB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKIAotCWZyZXEgPSBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KG9mLT5ub2RlKTsKKwkvKgorCSAqIEVpdGhlciB0aGUgb3NjaWxsYXRvciBjbG9jayAoU1lTX1hUQUxfSU4pIG9yIHRoZSBJUCBidXMgY2xvY2sKKwkgKiAoSVBfQ0xLKSBjYW4gYmUgc2VsZWN0ZWQgYXMgTVNDQU4gY2xvY2sgc291cmNlLiBBY2NvcmRpbmcgdG8KKwkgKiB0aGUgTVBDNTIwMCB1c2VyJ3MgbWFudWFsLCB0aGUgb3NjaWxsYXRvciBjbG9jayBpcyB0aGUgYmV0dGVyCisJICogY2hvaWNlIGFzIGl0IGhhcyBsZXNzIGppdHRlci4gRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBzZWxlY3RlZAorCSAqIGJ5IGRlZmF1bHQuIFVuZm9ydHVuYXRlbHksIGl0IGNhbiBub3QgYmUgc2VsZWN0ZWQgZm9yIHRoZSBvbGQKKwkgKiBNUEM1MjAwIFJldi4gQSBjaGlwcyBkdWUgdG8gYSBoYXJkd2FyZSBidWcgKGNoZWNrIGVycmF0YSkuCisJICovCisJaWYgKGNsb2NrX25hbWUgJiYgc3RyY21wKGNsb2NrX25hbWUsICJpcCIpID09IDApCisJCSptc2Nhbl9jbGtzcmMgPSBNU0NBTl9DTEtTUkNfQlVTOworCWVsc2UKKwkJKm1zY2FuX2Nsa3NyYyA9IE1TQ0FOX0NMS1NSQ19YVEFMOworCisJZnJlcSA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kob2ZkZXYtPm5vZGUpOwogCWlmICghZnJlcSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY2xvY2tfc3JjID09IE1TQ0FOX0NMS1NSQ19CVVMgfHwgcHZyID09IDB4ODA4MjIwMTEpCisJaWYgKCptc2Nhbl9jbGtzcmMgPT0gTVNDQU5fQ0xLU1JDX0JVUyB8fCBwdnIgPT0gMHg4MDgyMjAxMSkKIAkJcmV0dXJuIGZyZXE7CiAKIAkvKiBEZXRlcm1pbmUgU1lTX1hUQUxfSU4gZnJlcXVlbmN5IGZyb20gdGhlIGNsb2NrIGRvbWFpbiBzZXR0aW5ncyAqLwpAQCAtNzUsNyArODgsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAJY2RtID0gb2ZfaW9tYXAobnBfY2RtLCAwKTsKLQlvZl9ub2RlX3B1dChucF9jZG0pOwogCiAJaWYgKGluXzgoJmNkbS0+aXBiX2Nsa19zZWwpICYgMHgxKQogCQlmcmVxICo9IDI7CkBAIC04NCwyNiArOTYsMTc0IEBACiAJZnJlcSAqPSAodmFsICYgKDEgPDwgNSkpID8gOCA6IDQ7CiAJZnJlcSAvPSAodmFsICYgKDEgPDwgNikpID8gMTIgOiAxNjsKIAorCW9mX25vZGVfcHV0KG5wX2NkbSk7CiAJaW91bm1hcChjZG0pOwogCiAJcmV0dXJuIGZyZXE7CiB9CisjZWxzZSAvKiAhQ09ORklHX1BQQ19NUEM1MjAwICovCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGM1Mnh4X2Nhbl9nZXRfY2xvY2soc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkJCSAgIGludCAqbXNjYW5fY2xrc3JjKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTIwMCAqLworCisjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CitzdHJ1Y3QgbXBjNTEyeF9jbG9ja2N0bCB7CisJdTMyIHNwbXI7CQkvKiBTeXN0ZW0gUExMIE1vZGUgUmVnICovCisJdTMyIHNjY3JbMl07CQkvKiBTeXN0ZW0gQ2xrIEN0cmwgUmVnIDEgJiAyICovCisJdTMyIHNjZnIxOwkJLyogU3lzdGVtIENsayBGcmVxIFJlZyAxICovCisJdTMyIHNjZnIyOwkJLyogU3lzdGVtIENsayBGcmVxIFJlZyAyICovCisJdTMyIHJlc2VydmVkOworCXUzMiBiY3I7CQkvKiBCcmVhZCBDcnVtYiBSZWcgKi8KKwl1MzIgcGNjclsxMl07CQkvKiBQU0MgQ2xrIEN0cmwgUmVnIDAtMTEgKi8KKwl1MzIgc3BjY3I7CQkvKiBTUERJRiBDbGsgQ3RybCBSZWcgKi8KKwl1MzIgY2NjcjsJCS8qIENGTSBDbGsgQ3RybCBSZWcgKi8KKwl1MzIgZGNjcjsJCS8qIERJVSBDbGsgQ25mZyBSZWcgKi8KKwl1MzIgbWNjcls0XTsJCS8qIE1TQ0FOIENsayBDdHJsIFJlZyAxLTMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgbXBjNTEyeF9jbG9ja19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWNsb2NrIiwgfSwKKwl7fQorfTsKKworc3RhdGljIHUzMiBfX2RldmluaXQgbXBjNTEyeF9jYW5fZ2V0X2Nsb2NrKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCQkgICBjb25zdCBjaGFyICpjbG9ja19uYW1lLAorCQkJCQkgICBpbnQgKm1zY2FuX2Nsa3NyYykKK3sKKwlzdHJ1Y3QgbXBjNTEyeF9jbG9ja2N0bCBfX2lvbWVtICpjbG9ja2N0bDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wX2Nsb2NrOworCXN0cnVjdCBjbGsgKnN5c19jbGssICpyZWZfY2xrOworCWludCBwbGVuLCBjbG9ja2lkeCwgY2xvY2tzcmMgPSAtMTsKKwl1MzIgc3lzX2ZyZXEsIHZhbCwgY2xvY2tkaXYgPSAxLCBmcmVxID0gMDsKKwljb25zdCB1MzIgKnB2YWw7CisKKwlucF9jbG9jayA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBtcGM1MTJ4X2Nsb2NrX2lkcyk7CisJaWYgKCFucF9jbG9jaykgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCBjbG9jayBub2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNsb2NrY3RsID0gb2ZfaW9tYXAobnBfY2xvY2ssIDApOworCWlmICghY2xvY2tjdGwpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IG1hcCBjbG9jayByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgdGhlIE1TQ0FOIGRldmljZSBpbmRleCBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCisJcHZhbCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgInJlZyIsICZwbGVuKTsKKwlCVUdfT04oIXB2YWwgfHwgcGxlbiA8IHNpemVvZigqcHZhbCkpOworCWNsb2NraWR4ID0gKCpwdmFsICYgMHg4MCkgPyAxIDogMDsKKwlpZiAoKnB2YWwgJiAweDIwMDApCisJCWNsb2NraWR4ICs9IDI7CisKKwkvKgorCSAqIENsb2NrIHNvdXJjZSBhbmQgZGl2aWRlciBzZWxlY3Rpb246IDMgZGlmZmVyZW50IGNsb2NrIHNvdXJjZXMKKwkgKiBjYW4gYmUgc2VsZWN0ZWQ6ICJpcCIsICJyZWYiIG9yICJzeXMiLiBGb3IgdGhlIGxhdHRlciB0d28sIGEKKwkgKiBjbG9jayBkaXZpZGVyIGNhbiBiZSBkZWZpbmVkIGFzIHdlbGwuIElmIHRoZSBjbG9jayBzb3VyY2UgaXMKKwkgKiBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBkZXZpY2UgdHJlZSwgd2UgZmlyc3QgdHJ5IHRvIGZpbmQgYW4KKwkgKiBvcHRpbWFsIENBTiBzb3VyY2UgY2xvY2sgYmFzZWQgb24gdGhlIHN5c3RlbSBjbG9jay4gSWYgdGhhdAorCSAqIGlzIG5vdCBwb3NzbGlibGUsIHRoZSByZWZlcmVuY2UgY2xvY2sgd2lsbCBiZSB1c2VkLgorCSAqLworCWlmIChjbG9ja19uYW1lICYmICFzdHJjbXAoY2xvY2tfbmFtZSwgImlwIikpIHsKKwkJKm1zY2FuX2Nsa3NyYyA9IE1TQ0FOX0NMS1NSQ19JUFM7CisJCWZyZXEgPSBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KG9mZGV2LT5ub2RlKTsKKwl9IGVsc2UgeworCQkqbXNjYW5fY2xrc3JjID0gTVNDQU5fQ0xLU1JDX0JVUzsKKworCQlwdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLAorCQkJCSAgICAgICAiZnNsLG1zY2FuLWNsb2NrLWRpdmlkZXIiLCAmcGxlbik7CisJCWlmIChwdmFsICYmIHBsZW4gPT0gc2l6ZW9mKCpwdmFsKSkKKwkJCWNsb2NrZGl2ID0gKnB2YWw7CisJCWlmICghY2xvY2tkaXYpCisJCQljbG9ja2RpdiA9IDE7CisKKwkJaWYgKCFjbG9ja19uYW1lIHx8ICFzdHJjbXAoY2xvY2tfbmFtZSwgInN5cyIpKSB7CisJCQlzeXNfY2xrID0gY2xrX2dldCgmb2ZkZXYtPmRldiwgInN5c19jbGsiKTsKKwkJCWlmICghc3lzX2NsaykgeworCQkJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgc3lzX2Nsa1xuIik7CisJCQkJZ290byBleGl0X3VubWFwOworCQkJfQorCQkJLyogR2V0IGFuZCByb3VuZCB1cC9kb3duIHN5cyBjbG9jayByYXRlICovCisJCQlzeXNfZnJlcSA9IDEwMDAwMDAgKgorCQkJCSgoY2xrX2dldF9yYXRlKHN5c19jbGspICsgNDk5OTk5KSAvIDEwMDAwMDApOworCisJCQlpZiAoIWNsb2NrX25hbWUpIHsKKwkJCQkvKiBBIG11bHRpcGxlIG9mIDE2IE1IeiB3b3VsZCBiZSBvcHRpbWFsICovCisJCQkJaWYgKChzeXNfZnJlcSAlIDE2MDAwMDAwKSA9PSAwKSB7CisJCQkJCWNsb2Nrc3JjID0gMDsKKwkJCQkJY2xvY2tkaXYgPSBzeXNfZnJlcSAvIDE2MDAwMDAwOworCQkJCQlmcmVxID0gc3lzX2ZyZXEgLyBjbG9ja2RpdjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWNsb2Nrc3JjID0gMDsKKwkJCQlmcmVxID0gc3lzX2ZyZXEgLyBjbG9ja2RpdjsKKwkJCX0KKwkJfQorCisJCWlmIChjbG9ja3NyYyA8IDApIHsKKwkJCXJlZl9jbGsgPSBjbGtfZ2V0KCZvZmRldi0+ZGV2LCAicmVmX2NsayIpOworCQkJaWYgKCFyZWZfY2xrKSB7CisJCQkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IGdldCByZWZfY2xrXG4iKTsKKwkJCQlnb3RvIGV4aXRfdW5tYXA7CisJCQl9CisJCQljbG9ja3NyYyA9IDE7CisJCQlmcmVxID0gY2xrX2dldF9yYXRlKHJlZl9jbGspIC8gY2xvY2tkaXY7CisJCX0KKwl9CisKKwkvKiBEaXNhYmxlIGNsb2NrICovCisJb3V0X2JlMzIoJmNsb2NrY3RsLT5tY2NyW2Nsb2NraWR4XSwgMHgwKTsKKwlpZiAoY2xvY2tzcmMgPj0gMCkgeworCQkvKiBTZXQgc291cmNlIGFuZCBkaXZpZGVyICovCisJCXZhbCA9IChjbG9ja3NyYyA8PCAxNCkgfCAoKGNsb2NrZGl2IC0gMSkgPDwgMTcpOworCQlvdXRfYmUzMigmY2xvY2tjdGwtPm1jY3JbY2xvY2tpZHhdLCB2YWwpOworCQkvKiBFbmFibGUgY2xvY2sgKi8KKwkJb3V0X2JlMzIoJmNsb2NrY3RsLT5tY2NyW2Nsb2NraWR4XSwgdmFsIHwgMHgxMDAwMCk7CisJfQorCisJLyogRW5hYmxlIE1TQ0FOIGNsb2NrIGRvbWFpbiAqLworCXZhbCA9IGluX2JlMzIoJmNsb2NrY3RsLT5zY2NyWzFdKTsKKwlpZiAoISh2YWwgJiAoMSA8PCAyNSkpKQorCQlvdXRfYmUzMigmY2xvY2tjdGwtPnNjY3JbMV0sIHZhbCB8ICgxIDw8IDI1KSk7CisKKwlkZXZfZGJnKCZvZmRldi0+ZGV2LCAidXNpbmcgJyVzJyB3aXRoIGZyZXF1ZW5jeSBkaXZpZGVyICVkXG4iLAorCQkqbXNjYW5fY2xrc3JjID09IE1TQ0FOX0NMS1NSQ19JUFMgPyAiaXBzX2NsayIgOgorCQljbG9ja3NyYyA9PSAxID8gInJlZl9jbGsiIDogInN5c19jbGsiLCBjbG9ja2Rpdik7CisKK2V4aXRfdW5tYXA6CisJb2Zfbm9kZV9wdXQobnBfY2xvY2spOworCWlvdW5tYXAoY2xvY2tjdGwpOworCisJcmV0dXJuIGZyZXE7Cit9CisjZWxzZSAvKiAhQ09ORklHX1BQQ19NUEM1MTJ4ICovCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGM1MTJ4X2Nhbl9nZXRfY2xvY2soc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkJCSAgIGludCAqbXNjYW5fY2xrc3JjKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1eHh4X2Nhbl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKmRhdGEgPSAoc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKilpZC0+ZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbXNjYW5fcHJpdiAqcHJpdjsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JY29uc3QgY2hhciAqY2xrX3NyYzsKLQlpbnQgZXJyLCBpcnEsIGNsb2NrX3NyYzsKKwljb25zdCBjaGFyICpjbG9ja19uYW1lID0gTlVMTDsKKwlpbnQgaXJxLCBtc2Nhbl9jbGtzcmMgPSAwOworCWludCBlcnIgPSAtRU5PTUVNOwogCi0JYmFzZSA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgaW9yZW1hcFxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdF9yZWxlYXNlX21lbTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CkBAIC0xMTQsMzcgKzI3NCwyNyBAQAogCX0KIAogCWRldiA9IGFsbG9jX21zY2FuZGV2KCk7Ci0JaWYgKCFkZXYpIHsKLQkJZXJyID0gLUVOT01FTTsKKwlpZiAoIWRldikKIAkJZ290byBleGl0X2Rpc3Bvc2VfaXJxOwotCX0KIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXYtPnJlZ19iYXNlID0gYmFzZTsKIAlkZXYtPmlycSA9IGlycTsKIAotCS8qCi0JICogRWl0aGVyIHRoZSBvc2NpbGxhdG9yIGNsb2NrIChTWVNfWFRBTF9JTikgb3IgdGhlIElQIGJ1cyBjbG9jawotCSAqIChJUF9DTEspIGNhbiBiZSBzZWxlY3RlZCBhcyBNU0NBTiBjbG9jayBzb3VyY2UuIEFjY29yZGluZyB0bwotCSAqIHRoZSBNUEM1MjAwIHVzZXIncyBtYW51YWwsIHRoZSBvc2NpbGxhdG9yIGNsb2NrIGlzIHRoZSBiZXR0ZXIKLQkgKiBjaG9pY2UgYXMgaXQgaGFzIGxlc3Mgaml0dGVyLiBGb3IgdGhpcyByZWFzb24sIGl0IGlzIHNlbGVjdGVkCi0JICogYnkgZGVmYXVsdC4KLQkgKi8KLQljbGtfc3JjID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZnNsLG1zY2FuLWNsb2NrLXNvdXJjZSIsIE5VTEwpOwotCWlmIChjbGtfc3JjICYmIHN0cmNtcChjbGtfc3JjLCAiaXAiKSA9PSAwKQotCQljbG9ja19zcmMgPSBNU0NBTl9DTEtTUkNfQlVTOwotCWVsc2UKLQkJY2xvY2tfc3JjID0gTVNDQU5fQ0xLU1JDX1hUQUw7Ci0JcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBtcGM1Mnh4X2Nhbl9jbG9ja19mcmVxKG9mZGV2LCBjbG9ja19zcmMpOworCWNsb2NrX25hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmc2wsbXNjYW4tY2xvY2stc291cmNlIiwgTlVMTCk7CisKKwlCVUdfT04oIWRhdGEpOworCXByaXYtPnR5cGUgPSBkYXRhLT50eXBlOworCXByaXYtPmNhbi5jbG9jay5mcmVxID0gZGF0YS0+Z2V0X2Nsb2NrKG9mZGV2LCBjbG9ja19uYW1lLAorCQkJCQkgICAgICAgJm1zY2FuX2Nsa3NyYyk7CiAJaWYgKCFwcml2LT5jYW4uY2xvY2suZnJlcSkgewotCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgZ2V0IE1TQ0FOIGNsb2NrIGZyZXF1ZW5jeVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgTVNDQU4gY2xvY2sgcHJvcGVydGllc1xuIik7CiAJCWdvdG8gZXhpdF9mcmVlX21zY2FuOwogCX0KIAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCi0JZXJyID0gcmVnaXN0ZXJfbXNjYW5kZXYoZGV2LCBjbG9ja19zcmMpOworCWVyciA9IHJlZ2lzdGVyX21zY2FuZGV2KGRldiwgbXNjYW5fY2xrc3JjKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJyZWdpc3RlcmluZyAlcyBmYWlsZWQgKGVycj0lZClcbiIsCiAJCQlEUlZfTkFNRSwgZXJyKTsKQEAgLTE2NCw3ICszMTQsNyBAQAogCWlycV9kaXNwb3NlX21hcHBpbmcoaXJxKTsKIGV4aXRfdW5tYXBfbWVtOgogCWlvdW5tYXAoYmFzZSk7Ci1leGl0X3JlbGVhc2VfbWVtOgorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjI1LDggKzM3NSwyMCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSBfX2RldmluaXRkYXRhIG1wYzUyMDBfY2FuX2RhdGEgPSB7CisJLnR5cGUgPSBNU0NBTl9UWVBFX01QQzUyMDAsCisJLmdldF9jbG9jayA9IG1wYzUyeHhfY2FuX2dldF9jbG9jaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSBfX2RldmluaXRkYXRhIG1wYzUxMjFfY2FuX2RhdGEgPSB7CisJLnR5cGUgPSBNU0NBTl9UWVBFX01QQzUxMjEsCisJLmdldF9jbG9jayA9IG1wYzUxMnhfY2FuX2dldF9jbG9jaywKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgbXBjNXh4eF9jYW5fdGFibGVbXSA9IHsKLQl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4ifSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIiwgLmRhdGEgPSAmbXBjNTIwMF9jYW5fZGF0YSwgfSwKKwkvKiBOb3RlIHRoYXQgb25seSBNUEM1MTIxIFJldi4gMiAoYW5kIGxhdGVyKSBpcyBzdXBwb3J0ZWQgKi8KKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIiwgLmRhdGEgPSAmbXBjNTEyMV9jYW5fZGF0YSwgfSwKIAl7fSwKIH07CiAKQEAgLTI1NSw1ICs0MTcsNSBAQAogbW9kdWxlX2V4aXQobXBjNXh4eF9jYW5fZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIldvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTVBDNTIwMCBDQU4gZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNUEM1eHh4IENBTiBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKaW5kZXggMDczNDZmODguLjUwMGQxODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgQW5kcmV5IFZvbGtvdiA8YXZvbGtvdkB2YXJtYS1lbC5jb20+LAogICogICAgICAgICAgICAgICAgICAgICAgICAgVmFybWEgRWxlY3Ryb25pY3MgT3kKICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPgotICogQ29weXRpZ2h0IChDKSAyMDA4LTIwMDkgUGVuZ3V0cm9uaXggPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBlbmd1dHJvbml4IDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTUyLDYgKzE1MiwxMiBAQAogCXByaXYtPnNoYWRvd19jYW5yaWVyID0gMDsKIAlwcml2LT5mbGFncyA9IDA7CiAKKwlpZiAocHJpdi0+dHlwZSA9PSBNU0NBTl9UWVBFX01QQzUxMjEpIHsKKwkJLyogQ2xlYXIgcGVuZGluZyBidXMtb2ZmIGNvbmRpdGlvbiAqLworCQlpZiAoaW5fOCgmcmVncy0+Y2FubWlzYykgJiBNU0NBTl9CT0hPTEQpCisJCQlvdXRfOCgmcmVncy0+Y2FubWlzYywgTVNDQU5fQk9IT0xEKTsKKwl9CisKIAllcnIgPSBtc2Nhbl9zZXRfbW9kZShkZXYsIE1TQ0FOX05PUk1BTF9NT0RFKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTYzLDggKzE2OSwyOSBAQAogCW91dF84KCZyZWdzLT5jYW50aWVyLCAwKTsKIAogCS8qIEVuYWJsZSByZWNlaXZlIGludGVycnVwdHMuICovCi0Jb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIE1TQ0FOX09WUklFIHwgTVNDQU5fUlhGSUUgfCBNU0NBTl9DU0NJRSB8Ci0JICAgICAgTVNDQU5fUlNUQVRFMSB8IE1TQ0FOX1JTVEFURTAgfCBNU0NBTl9UU1RBVEUxIHwgTVNDQU5fVFNUQVRFMCk7CisJb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIE1TQ0FOX1JYX0lOVFNfRU5BQkxFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zY2FuX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXNjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocHJpdi0+dHlwZSA9PSBNU0NBTl9UWVBFX01QQzUxMjEpIHsKKwkJc3RydWN0IG1zY2FuX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IG1zY2FuX3JlZ3MgKilwcml2LT5yZWdfYmFzZTsKKworCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQlXQVJOKCEoaW5fOCgmcmVncy0+Y2FubWlzYykgJiBNU0NBTl9CT0hPTEQpLAorCQkgICAgICJidXMtb2ZmIHN0YXRlIGV4cGVjdGVkIik7CisJCW91dF84KCZyZWdzLT5jYW5taXNjLCBNU0NBTl9CT0hPTEQpOworCQkvKiBSZS1lbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAqLworCQlvdXRfOCgmcmVncy0+Y2FucmllciwgTVNDQU5fUlhfSU5UU19FTkFCTEUpOworCX0gZWxzZSB7CisJCWlmIChwcml2LT5jYW4uc3RhdGUgPD0gQ0FOX1NUQVRFX0JVU19PRkYpCisJCQltc2Nhbl9zZXRfbW9kZShkZXYsIE1TQ0FOX0lOSVRfTU9ERSk7CisJCXJldHVybiBtc2Nhbl9zdGFydChkZXYpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTc3LDggKzIwNCwxMSBAQAogCWludCBpLCBydHIsIGJ1Zl9pZDsKIAl1MzIgY2FuX2lkOwogCi0JaWYgKGZyYW1lLT5jYW5fZGxjID4gOCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNrYi0+bGVuICE9IHNpemVvZigqZnJhbWUpIHx8IGZyYW1lLT5jYW5fZGxjID4gOCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQogCiAJb3V0XzgoJnJlZ3MtPmNhbnRpZXIsIDApOwogCkBAIC0zNTksOSArMzg5LDEyIEBACiAJCQkgKiBhdXRvbWF0aWNhbGx5LiBUbyBhdm9pZCB0aGF0IHdlIHN0b3AgdGhlIGNoaXAgZG9pbmcKIAkJCSAqIGEgbGlnaHQtd2VpZ2h0IHN0b3AgKHdlIGFyZSBpbiBpcnEtY29udGV4dCkuCiAJCQkgKi8KLQkJCW91dF84KCZyZWdzLT5jYW50aWVyLCAwKTsKLQkJCW91dF84KCZyZWdzLT5jYW5yaWVyLCAwKTsKLQkJCXNldGJpdHM4KCZyZWdzLT5jYW5jdGwwLCBNU0NBTl9TTFBSUSB8IE1TQ0FOX0lOSVRSUSk7CisJCQlpZiAocHJpdi0+dHlwZSAhPSBNU0NBTl9UWVBFX01QQzUxMjEpIHsKKwkJCQlvdXRfOCgmcmVncy0+Y2FudGllciwgMCk7CisJCQkJb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIDApOworCQkJCXNldGJpdHM4KCZyZWdzLT5jYW5jdGwwLAorCQkJCQkgTVNDQU5fU0xQUlEgfCBNU0NBTl9JTklUUlEpOworCQkJfQogCQkJY2FuX2J1c19vZmYoZGV2KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDkxLDkgKzUyNCw3IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENBTl9NT0RFX1NUQVJUOgotCQlpZiAocHJpdi0+Y2FuLnN0YXRlIDw9IENBTl9TVEFURV9CVVNfT0ZGKQotCQkJbXNjYW5fc2V0X21vZGUoZGV2LCBNU0NBTl9JTklUX01PREUpOwotCQlyZXQgPSBtc2Nhbl9zdGFydChkZXYpOworCQlyZXQgPSBtc2Nhbl9yZXN0YXJ0KGRldik7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKQEAgLTU5MiwxOCArNjIzLDIxIEBACiAgICAgICAgLm5kb19zdGFydF94bWl0ICAgICAgICAgPSBtc2Nhbl9zdGFydF94bWl0LAogfTsKIAotaW50IHJlZ2lzdGVyX21zY2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjbG9ja19zcmMpCitpbnQgcmVnaXN0ZXJfbXNjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1zY2FuX2Nsa3NyYykKIHsKIAlzdHJ1Y3QgbXNjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG1zY2FuX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IG1zY2FuX3JlZ3MgKilwcml2LT5yZWdfYmFzZTsKIAl1OCBjdGwxOwogCiAJY3RsMSA9IGluXzgoJnJlZ3MtPmNhbmN0bDEpOwotCWlmIChjbG9ja19zcmMpCisJaWYgKG1zY2FuX2Nsa3NyYykKIAkJY3RsMSB8PSBNU0NBTl9DTEtTUkM7CiAJZWxzZQogCQljdGwxICY9IH5NU0NBTl9DTEtTUkM7CiAKKwlpZiAocHJpdi0+dHlwZSA9PSBNU0NBTl9UWVBFX01QQzUxMjEpCisJCWN0bDEgfD0gTVNDQU5fQk9STTsgLyogYnVzLW9mZiByZWNvdmVyeSB1cG9uIHJlcXVlc3QgKi8KKwogCWN0bDEgfD0gTVNDQU5fQ0FORTsKIAlvdXRfOCgmcmVncy0+Y2FuY3RsMSwgY3RsMSk7CiAJdWRlbGF5KDEwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uaCBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5oCmluZGV4IDAwZmM0YWEuLjRmZjk2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5oCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5oCkBAIC0zOCwxOCArMzgsMjAgQEAKICNkZWZpbmUgTVNDQU5fQ0xLU1JDCQkweDQwCiAjZGVmaW5lIE1TQ0FOX0xPT1BCCQkweDIwCiAjZGVmaW5lIE1TQ0FOX0xJU1RFTgkJMHgxMAorI2RlZmluZSBNU0NBTl9CT1JNCQkweDA4CiAjZGVmaW5lIE1TQ0FOX1dVUE0JCTB4MDQKICNkZWZpbmUgTVNDQU5fU0xQQUsJCTB4MDIKICNkZWZpbmUgTVNDQU5fSU5JVEFLCQkweDAxCiAKLS8qIFVzZSB0aGUgTVBDNTIwMCBNU0NBTiB2YXJpYW50PyAqLworLyogVXNlIHRoZSBNUEM1WFhYIE1TQ0FOIHZhcmlhbnQ/ICovCiAjaWZkZWYgQ09ORklHX1BQQwotI2RlZmluZSBNU0NBTl9GT1JfTVBDNTIwMAorI2RlZmluZSBNU0NBTl9GT1JfTVBDNVhYWAogI2VuZGlmCiAKLSNpZmRlZiBNU0NBTl9GT1JfTVBDNTIwMAorI2lmZGVmIE1TQ0FOX0ZPUl9NUEM1WFhYCiAjZGVmaW5lIE1TQ0FOX0NMS1NSQ19CVVMJMAogI2RlZmluZSBNU0NBTl9DTEtTUkNfWFRBTAlNU0NBTl9DTEtTUkMKKyNkZWZpbmUgTVNDQU5fQ0xLU1JDX0lQUwlNU0NBTl9DTEtTUkMKICNlbHNlCiAjZGVmaW5lIE1TQ0FOX0NMS1NSQ19CVVMJTVNDQU5fQ0xLU1JDCiAjZGVmaW5lIE1TQ0FOX0NMS1NSQ19YVEFMCTAKQEAgLTEzNiw3ICsxMzgsNyBAQAogI2RlZmluZSBNU0NBTl9FRkZfUlRSX1NISUZUCTAKICNkZWZpbmUgTVNDQU5fRUZGX0ZMQUdTCQkweDE4CS8qIElERSArIFNSUiAqLwogCi0jaWZkZWYgTVNDQU5fRk9SX01QQzUyMDAKKyNpZmRlZiBNU0NBTl9GT1JfTVBDNVhYWAogI2RlZmluZSBfTVNDQU5fUkVTRVJWRURfKG4sIG51bSkgdTggX3JlcyMjbltudW1dCiAjZGVmaW5lIF9NU0NBTl9SRVNFUlZFRF9EU1JfU0laRQkyCiAjZWxzZQpAQCAtMTY1LDY3ICsxNjcsNjYgQEAKIAl1OCBjYW50YnNlbDsJCQkJLyogKyAweDE0ICAgICAweDBhICovCiAJdTggY2FuaWRhYzsJCQkJLyogKyAweDE1ICAgICAweDBiICovCiAJdTggcmVzZXJ2ZWQ7CQkJCS8qICsgMHgxNiAgICAgMHgwYyAqLwotCV9NU0NBTl9SRVNFUlZFRF8oNiwgNSk7CQkJLyogKyAweDE3ICAgICAgICAgICovCi0jaWZuZGVmIE1TQ0FOX0ZPUl9NUEM1MjAwCi0JdTggY2FubWlzYzsJCQkJLyogICAgICAgICAgICAweDBkICovCi0jZW5kaWYKKwlfTVNDQU5fUkVTRVJWRURfKDYsIDIpOwkJCS8qICsgMHgxNyAgICAgICAgICAqLworCXU4IGNhbm1pc2M7CQkJCS8qICsgMHgxOSAgICAgMHgwZCAqLworCV9NU0NBTl9SRVNFUlZFRF8oNywgMik7CQkJLyogKyAweDFhICAgICAgICAgICovCiAJdTggY2FucnhlcnI7CQkJCS8qICsgMHgxYyAgICAgMHgwZSAqLwogCXU4IGNhbnR4ZXJyOwkJCQkvKiArIDB4MWQgICAgIDB4MGYgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDcsIDIpOwkJCS8qICsgMHgxZSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oOCwgMik7CQkJLyogKyAweDFlICAgICAgICAgICovCiAJdTE2IGNhbmlkYXIxXzA7CQkJCS8qICsgMHgyMCAgICAgMHgxMCAqLwotCV9NU0NBTl9SRVNFUlZFRF8oOCwgMik7CQkJLyogKyAweDIyICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXyg5LCAyKTsJCQkvKiArIDB4MjIgICAgICAgICAgKi8KIAl1MTYgY2FuaWRhcjNfMjsJCQkJLyogKyAweDI0ICAgICAweDEyICovCi0JX01TQ0FOX1JFU0VSVkVEXyg5LCAyKTsJCQkvKiArIDB4MjYgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDEwLCAyKTsJCS8qICsgMHgyNiAgICAgICAgICAqLwogCXUxNiBjYW5pZG1yMV8wOwkJCQkvKiArIDB4MjggICAgIDB4MTQgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDEwLCAyKTsJCS8qICsgMHgyYSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTEsIDIpOwkJLyogKyAweDJhICAgICAgICAgICovCiAJdTE2IGNhbmlkbXIzXzI7CQkJCS8qICsgMHgyYyAgICAgMHgxNiAqLwotCV9NU0NBTl9SRVNFUlZFRF8oMTEsIDIpOwkJLyogKyAweDJlICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxMiwgMik7CQkvKiArIDB4MmUgICAgICAgICAgKi8KIAl1MTYgY2FuaWRhcjVfNDsJCQkJLyogKyAweDMwICAgICAweDE4ICovCi0JX01TQ0FOX1JFU0VSVkVEXygxMiwgMik7CQkvKiArIDB4MzIgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDEzLCAyKTsJCS8qICsgMHgzMiAgICAgICAgICAqLwogCXUxNiBjYW5pZGFyN182OwkJCQkvKiArIDB4MzQgICAgIDB4MWEgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDEzLCAyKTsJCS8qICsgMHgzNiAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTQsIDIpOwkJLyogKyAweDM2ICAgICAgICAgICovCiAJdTE2IGNhbmlkbXI1XzQ7CQkJCS8qICsgMHgzOCAgICAgMHgxYyAqLwotCV9NU0NBTl9SRVNFUlZFRF8oMTQsIDIpOwkJLyogKyAweDNhICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxNSwgMik7CQkvKiArIDB4M2EgICAgICAgICAgKi8KIAl1MTYgY2FuaWRtcjdfNjsJCQkJLyogKyAweDNjICAgICAweDFlICovCi0JX01TQ0FOX1JFU0VSVkVEXygxNSwgMik7CQkvKiArIDB4M2UgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDE2LCAyKTsJCS8qICsgMHgzZSAgICAgICAgICAqLwogCXN0cnVjdCB7CiAJCXUxNiBpZHIxXzA7CQkJLyogKyAweDQwICAgICAweDIwICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDE2LCAyKTsJLyogKyAweDQyICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMTcsIDIpOwkvKiArIDB4NDIgICAgICAgICAgKi8KIAkJdTE2IGlkcjNfMjsJCQkvKiArIDB4NDQgICAgIDB4MjIgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMTcsIDIpOwkvKiArIDB4NDYgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygxOCwgMik7CS8qICsgMHg0NiAgICAgICAgICAqLwogCQl1MTYgZHNyMV8wOwkJCS8qICsgMHg0OCAgICAgMHgyNCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygxOCwgMik7CS8qICsgMHg0YSAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDE5LCAyKTsJLyogKyAweDRhICAgICAgICAgICovCiAJCXUxNiBkc3IzXzI7CQkJLyogKyAweDRjICAgICAweDI2ICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDE5LCAyKTsJLyogKyAweDRlICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjAsIDIpOwkvKiArIDB4NGUgICAgICAgICAgKi8KIAkJdTE2IGRzcjVfNDsJCQkvKiArIDB4NTAgICAgIDB4MjggKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjAsIDIpOwkvKiArIDB4NTIgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyMSwgMik7CS8qICsgMHg1MiAgICAgICAgICAqLwogCQl1MTYgZHNyN182OwkJCS8qICsgMHg1NCAgICAgMHgyYSAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyMSwgMik7CS8qICsgMHg1NiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDIyLCAyKTsJLyogKyAweDU2ICAgICAgICAgICovCiAJCXU4IGRscjsJCQkJLyogKyAweDU4ICAgICAweDJjICovCi0JCSB1ODo4OwkJCQkvKiArIDB4NTkgICAgIDB4MmQgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjIsIDIpOwkvKiArIDB4NWEgICAgICAgICAgKi8KKwkJdTggcmVzZXJ2ZWQ7CQkJLyogKyAweDU5ICAgICAweDJkICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjMsIDIpOwkvKiArIDB4NWEgICAgICAgICAgKi8KIAkJdTE2IHRpbWU7CQkJLyogKyAweDVjICAgICAweDJlICovCiAJfSByeDsKLQkgX01TQ0FOX1JFU0VSVkVEXygyMywgMik7CQkvKiArIDB4NWUgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDI0LCAyKTsJCS8qICsgMHg1ZSAgICAgICAgICAqLwogCXN0cnVjdCB7CiAJCXUxNiBpZHIxXzA7CQkJLyogKyAweDYwICAgICAweDMwICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDI0LCAyKTsJLyogKyAweDYyICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjUsIDIpOwkvKiArIDB4NjIgICAgICAgICAgKi8KIAkJdTE2IGlkcjNfMjsJCQkvKiArIDB4NjQgICAgIDB4MzIgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjUsIDIpOwkvKiArIDB4NjYgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyNiwgMik7CS8qICsgMHg2NiAgICAgICAgICAqLwogCQl1MTYgZHNyMV8wOwkJCS8qICsgMHg2OCAgICAgMHgzNCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyNiwgMik7CS8qICsgMHg2YSAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDI3LCAyKTsJLyogKyAweDZhICAgICAgICAgICovCiAJCXUxNiBkc3IzXzI7CQkJLyogKyAweDZjICAgICAweDM2ICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDI3LCAyKTsJLyogKyAweDZlICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjgsIDIpOwkvKiArIDB4NmUgICAgICAgICAgKi8KIAkJdTE2IGRzcjVfNDsJCQkvKiArIDB4NzAgICAgIDB4MzggKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjgsIDIpOwkvKiArIDB4NzIgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyOSwgMik7CS8qICsgMHg3MiAgICAgICAgICAqLwogCQl1MTYgZHNyN182OwkJCS8qICsgMHg3NCAgICAgMHgzYSAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyOSwgMik7CS8qICsgMHg3NiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDMwLCAyKTsJLyogKyAweDc2ICAgICAgICAgICovCiAJCXU4IGRscjsJCQkJLyogKyAweDc4ICAgICAweDNjICovCiAJCXU4IHRicHI7CQkJLyogKyAweDc5ICAgICAweDNkICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDMwLCAyKTsJLyogKyAweDdhICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMzEsIDIpOwkvKiArIDB4N2EgICAgICAgICAgKi8KIAkJdTE2IHRpbWU7CQkJLyogKyAweDdjICAgICAweDNlICovCiAJfSB0eDsKLQkgX01TQ0FOX1JFU0VSVkVEXygzMSwgMik7CQkvKiArIDB4N2UgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDMyLCAyKTsJCS8qICsgMHg3ZSAgICAgICAgICAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICN1bmRlZiBfTVNDQU5fUkVTRVJWRURfCkBAIC0yMzcsNiArMjM4LDE1IEBACiAjZGVmaW5lIE1TQ0FOX1BPV0VST0ZGX01PREUJKE1TQ0FOX0NTV0FJIHwgTVNDQU5fU0xQUlEpCiAjZGVmaW5lIE1TQ0FOX1NFVF9NT0RFX1JFVFJJRVMJMjU1CiAjZGVmaW5lIE1TQ0FOX0VDSE9fU0tCX01BWAkzCisjZGVmaW5lIE1TQ0FOX1JYX0lOVFNfRU5BQkxFCShNU0NBTl9PVlJJRSB8IE1TQ0FOX1JYRklFIHwgTVNDQU5fQ1NDSUUgfCBcCisJCQkJIE1TQ0FOX1JTVEFURTEgfCBNU0NBTl9SU1RBVEUwIHwgXAorCQkJCSBNU0NBTl9UU1RBVEUxIHwgTVNDQU5fVFNUQVRFMCkKKworLyogTVNDQU4gdHlwZSB2YXJpYW50cyAqLworZW51bSB7CisJTVNDQU5fVFlQRV9NUEM1MjAwLAorCU1TQ0FOX1RZUEVfTVBDNTEyMQorfTsKIAogI2RlZmluZSBCVFIwX0JSUF9NQVNLCQkweDNmCiAjZGVmaW5lIEJUUjBfU0pXX1NISUZUCQk2CkBAIC0yNzAsNiArMjgwLDcgQEAKIAogc3RydWN0IG1zY2FuX3ByaXYgewogCXN0cnVjdCBjYW5fcHJpdiBjYW47CS8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciAqLworCXVuc2lnbmVkIGludCB0eXBlOyAJLyogTVNDQU4gdHlwZSB2YXJpYW50cyAqLwogCWxvbmcgb3Blbl90aW1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsJLyogaW9yZW1hcCdlZCBhZGRyZXNzIHRvIHJlZ2lzdGVycyAqLwpAQCAtMjg1LDEyICsyOTYsNyBAQAogfTsKIAogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19tc2NhbmRldih2b2lkKTsKLS8qCi0gKiBjbG9ja19zcmM6Ci0gKgkxID0gVGhlIE1TQ0FOIGNsb2NrIHNvdXJjZSBpcyB0aGUgb25jaGlwIEJ1cyBDbG9jay4KLSAqCTAgPSBUaGUgTVNDQU4gY2xvY2sgc291cmNlIGlzIHRoZSBjaGlwIE9zY2lsbGF0b3IgQ2xvY2suCi0gKi8KLWV4dGVybiBpbnQgcmVnaXN0ZXJfbXNjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNsb2NrX3NyYyk7CitleHRlcm4gaW50IHJlZ2lzdGVyX21zY2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtc2Nhbl9jbGtzcmMpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9tc2NhbmRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2VuZGlmIC8qIF9fTVNDQU5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMKaW5kZXggZmQwNDc4OS4uODczMDA2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvZW1zX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2Vtc19wY2kuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICNkZWZpbmUgRU1TX1BDSV9CQVNFX1NJWkUgIDQwOTYgLyogc2l6ZSBvZiBjb250cm9sbGVyIGFyZWEgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVtc19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZW1zX3BjaV90YmwpID0gewogCS8qIENQQy1QQ0kgdjEgKi8KIAl7UENJX1ZFTkRPUl9JRF9TSUVNRU5TLCAweDIxMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBDUEMtUENJIHYyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMKaW5kZXggN2RkNzc2OS4uNDQxZTc3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAva3Zhc2VyX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2t2YXNlcl9wY2kuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEtWQVNFUl9QQ0lfVkVORE9SX0lEMiAgICAgMHgxYTA3ICAgIC8qIHRoZSBQQ0kgZGV2aWNlIGFuZCB2ZW5kb3IgSURzICovCiAjZGVmaW5lIEtWQVNFUl9QQ0lfREVWSUNFX0lEMiAgICAgMHgwMDA4CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrdmFzZXJfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGt2YXNlcl9wY2lfdGJsKSA9IHsKIAl7S1ZBU0VSX1BDSV9WRU5ET1JfSUQxLCBLVkFTRVJfUENJX0RFVklDRV9JRDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7S1ZBU0VSX1BDSV9WRU5ET1JfSUQyLCBLVkFTRVJfUENJX0RFVklDRV9JRDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7IDAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IGY4NTdhZmUuLmIzYTAzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCUNBU19CTUNSX1NQRUVEMTAwMHxCTUNSX0ZVTExEUExYIC8qIDUgOiAxMDAwYnQgZnVsbCBkdXBsZXggKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYXNfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2FzX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9TVU4sIFBDSV9ERVZJQ0VfSURfU1VOX0NBU1NJTkksCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfU0FUVVJOLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKaW5kZXggNjk5ZDIyYy4uZjY0NjJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlyZXR1cm4gYWRhcHRlci0+cGFyYW1zLmlzX2FzaWM7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0MV9wY2lfdGJsW107CitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdDFfcGNpX3RibFtdOwogCiBzdGF0aWMgaW5saW5lIGludCBhZGFwdGVyX21hdGNoZXNfdHlwZShjb25zdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJICAgICAgIGludCB2ZXJzaW9uLCBpbnQgcmV2aXNpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCA4YzY1OGNmLi4xMDlkMjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAJfQogCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKnApKTsKIAotCXN0ID0gcGVyX2NwdV9wdHIoc2dlLT5wb3J0X3N0YXRzW3AtPmlmZl0sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3QgPSB0aGlzX2NwdV9wdHIoc2dlLT5wb3J0X3N0YXRzW3AtPmlmZl0pOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+cG9ydFtwLT5pZmZdLmRldik7CiAJaWYgKChhZGFwdGVyLT5mbGFncyAmIFJYX0NTVU1fRU5BQkxFRCkgJiYgcC0+Y3N1bSA9PSAweGZmZmYgJiYKQEAgLTE3ODAsOCArMTc4MCw3IEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNnZSAqc2dlID0gYWRhcHRlci0+c2dlOwotCXN0cnVjdCBzZ2VfcG9ydF9zdGF0cyAqc3QgPSBwZXJfY3B1X3B0cihzZ2UtPnBvcnRfc3RhdHNbZGV2LT5pZl9wb3J0XSwKLQkJCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3RydWN0IHNnZV9wb3J0X3N0YXRzICpzdCA9IHRoaXNfY3B1X3B0cihzZ2UtPnBvcnRfc3RhdHNbZGV2LT5pZl9wb3J0XSk7CiAJc3RydWN0IGNwbF90eF9wa3QgKmNwbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IgPSBza2I7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3Vici5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKaW5kZXggMTc3MjBjNi4uMjQwMmQzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiB9OwogCi1zdHJ1Y3QgcGNpX2RldmljZV9pZCB0MV9wY2lfdGJsW10gPSB7CitERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0MV9wY2lfdGJsKSA9IHsKIAlDSF9ERVZJQ0UoOCwgMCwgQ0hfQlJEX1QxMTBfMUNVKSwKIAlDSF9ERVZJQ0UoOCwgMSwgQ0hfQlJEX1QxMTBfMUNVKSwKIAlDSF9ERVZJQ0UoNywgMCwgQ0hfQlJEX04xMTBfMUYpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCmluZGV4IDg5YmVjOWMuLjczNjIyZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKQEAgLTgwLDcgKzgwLDcgQEAKICNkZWZpbmUgQ0hfREVWSUNFKGRldmlkLCBpZHgpIFwKIAl7IFBDSV9WRU5ET1JfSURfQ0hFTFNJTywgZGV2aWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGlkeCB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeGdiM19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3hnYjNfcGNpX3RibCkgPSB7CiAJQ0hfREVWSUNFKDB4MjAsIDApLAkvKiBQRTkwMDAgKi8KIAlDSF9ERVZJQ0UoMHgyMSwgMSksCS8qIFQzMDJFICovCiAJQ0hfREVWSUNFKDB4MjIsIDIpLAkvKiBUMzEwRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCmluZGV4IDc1MDY0ZWUuLjk0OTgzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKQEAgLTEyNTIsNyArMTI1Miw3IEBACiAJc3RydWN0IG10dXRhYiBtdHV0YWI7CiAJdW5zaWduZWQgaW50IGwydF9jYXBhY2l0eTsKIAotCXQgPSBrY2FsbG9jKDEsIHNpemVvZigqdCksIEdGUF9LRVJORUwpOworCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwogCWlmICghdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlZnh4LmMgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCmluZGV4IDZhNmVhMDMuLjk4ZGEwODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlZnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZGVmeHguYwpAQCAtMTA1MiwxMiArMTA1Miw5IEBACiAJCWJvYXJkX25hbWUgPSAiREVGRUEiOwogCWlmIChkZnhfYnVzX3BjaSkKIAkJYm9hcmRfbmFtZSA9ICJERUZQQSI7Ci0JcHJfaW5mbygiJXM6ICVzIGF0ICVzYWRkciA9IDB4JWxseCwgSVJRID0gJWQsICIKLQkJIkhhcmR3YXJlIGFkZHIgPSAlMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWFxuIiwKKwlwcl9pbmZvKCIlczogJXMgYXQgJXNhZGRyID0gMHglbGx4LCBJUlEgPSAlZCwgSGFyZHdhcmUgYWRkciA9ICVwTUZcbiIsCiAJCXByaW50X25hbWUsIGJvYXJkX25hbWUsIGRmeF91c2VfbW1pbyA/ICIiIDogIkkvTyAiLAotCQkobG9uZyBsb25nKWJhcl9zdGFydCwgZGV2LT5pcnEsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCQkobG9uZyBsb25nKWJhcl9zdGFydCwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCiAJLyoKIAkgKiBHZXQgbWVtb3J5IGZvciBkZXNjcmlwdG9yIGJsb2NrLCBjb25zdW1lciBibG9jaywgYW5kIG90aGVyIGJ1ZmZlcnMKQEAgLTM2MzEsNyArMzYyOCw3IEBACiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7CiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZGZ4X3BjaV91bnJlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICopOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGZ4X3BjaV90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRmeF9wY2lfdGFibGUpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfRkRESSkgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmggYi9kcml2ZXJzL25ldC9kbDJrLmgKaW5kZXggMjY2ZWM4Ny4uN2NhYWIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGwyay5oCisrKyBiL2RyaXZlcnMvbmV0L2RsMmsuaApAQCAtNTM3LDcgKzUzNyw3IEBACiAgICAgICAgIGRyaXZlcl9kYXRhICAgICAgICAgICAgIERhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyLgogKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJpb19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocmlvX3BjaV90YmwpID0gewogCXsweDExODYsIDB4NDAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7MHgxM2YwLCAweDEwMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IDBjYmUzYzAuLmIzNzczMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC0xNjQ2LDcgKzE2NDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZG05MDAwX2Rydl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZG05MDAwX2Rydl9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBkbTkwMDBfZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBkbTkwMDBfZHJ2X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggODM5ZmIyYi4uNWM3YTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAjZGVmaW5lIElOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRShkZXZpY2VfaWQsIGljaCkge1wKIAlQQ0lfVkVORE9SX0lEX0lOVEVMLCBkZXZpY2VfaWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFwKIAlQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4LCAweEZGRkYwMCwgaWNoIH0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlMTAwX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZTEwMF9pZF90YWJsZSkgPSB7CiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTAyOSwgMCksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTAzMCwgMCksCiAJSU5URUxfODI1NVhfRVRIRVJORVRfREVWSUNFKDB4MTAzMSwgMyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggN2U4NTVmOS4uOWVjNzQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtNDIsNyArNDIsNyBAQAogICogTWFjcm8gZXhwYW5kcyB0by4uLgogICogICB7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBkZXZpY2VfaWQpfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZTEwMDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGUxMDAwX3BjaV90YmwpID0gewogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMDApLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMDEpLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMDQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IGM0NTk2NWEuLmMzNzQ1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTUzMjcsNyArNTMyNyw3IEBACiAJLnJlc3VtZSA9IGUxMDAwX2lvX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlMTAwMF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZTEwMDBfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcxRUJfQ09QUEVSKSwgYm9hcmRfODI1NzEgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUiksIGJvYXJkXzgyNTcxIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3MSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2hjYWxsLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfaGNhbGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3ZDFjMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfaGNhbGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiAgbGludXgvZHJpdmVycy9uZXQvZWhlYS9laGVhX2hjYWxsLmgKLSAqCi0gKiAgZUhFQSBldGhlcm5ldCBkZXZpY2UgZHJpdmVyIGZvciBJQk0gZVNlcnZlciBTeXN0ZW0gcAotICoKLSAqICAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA2Ci0gKgotICogIEF1dGhvcnM6Ci0gKiAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KLSAqICAgICAgIEphbi1CZXJuZCBUaGVtYW5uIDx0aGVtYW5uQGRlLmlibS5jb20+Ci0gKiAgICAgICBUaG9tYXMgS2xlaW4gPHRrbGVpbkBkZS5pYm0uY29tPgotICoKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fRUhFQV9IQ0FMTF9IX18KLSNkZWZpbmUgX19FSEVBX0hDQUxMX0hfXwotCi0vKioKLSAqIFRoaXMgZmlsZSBjb250YWlucyBIQ0FMTCBkZWZpbmVzIHRoYXQgYXJlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhcHByb3ByaWF0ZQotICoga2VybmVsIGZpbGVzIGxhdGVyCi0gKi8KLQotI2RlZmluZSBIX0FMTE9DX0hFQV9SRVNPVVJDRSAgIDB4Mjc4Ci0jZGVmaW5lIEhfTU9ESUZZX0hFQV9RUCAgICAgICAgMHgyNTAKLSNkZWZpbmUgSF9RVUVSWV9IRUFfUVAgICAgICAgICAweDI1NAotI2RlZmluZSBIX1FVRVJZX0hFQSAgICAgICAgICAgIDB4MjU4Ci0jZGVmaW5lIEhfUVVFUllfSEVBX1BPUlQgICAgICAgMHgyNUMKLSNkZWZpbmUgSF9NT0RJRllfSEVBX1BPUlQgICAgICAweDI2MAotI2RlZmluZSBIX1JFR19CQ01DICAgICAgICAgICAgIDB4MjY0Ci0jZGVmaW5lIEhfREVSRUdfQkNNQyAgICAgICAgICAgMHgyNjgKLSNkZWZpbmUgSF9SRUdJU1RFUl9IRUFfUlBBR0VTICAweDI2QwotI2RlZmluZSBIX0RJU0FCTEVfQU5EX0dFVF9IRUEgIDB4MjcwCi0jZGVmaW5lIEhfR0VUX0hFQV9JTkZPICAgICAgICAgMHgyNzQKLSNkZWZpbmUgSF9BRERfQ09OTiAgICAgICAgICAgICAweDI4NAotI2RlZmluZSBIX0RFTF9DT05OICAgICAgICAgICAgIDB4Mjg4Ci0KLSNlbmRpZgkvKiBfX0VIRUFfSENBTExfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuaAppbmRleCBmMzYyOGM4Li4yZjgxNzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSAiZWhlYS5oIgogI2luY2x1ZGUgImVoZWFfaHcuaCIKLSNpbmNsdWRlICJlaGVhX2hjYWxsLmgiCiAKIC8qIFNvbWUgYWJicmV2aWF0aW9ucyB1c2VkIGhlcmU6CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCBlMWMyMDc2Li5lZTAxZjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMzQsNyArMzQsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gMTBHIEV0aGVybmV0IERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjEuMC4xMDAiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xLjAuMjQxYSIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodCAyMDA4LTIwMDkgQ2lzY28gU3lzdGVtcywgSW5jIgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAKQEAgLTg5LDkgKzg5LDEyIEBACiAJc3BpbmxvY2tfdCBkZXZjbWRfbG9jazsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggbWNfYWRkcltFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlNdW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG1jX2NvdW50OwogCWludCBjc3VtX3J4X2VuYWJsZWQ7CiAJdTMyIHBvcnRfbXR1OworCXUzMiByeF9jb2FsZXNjZV91c2VjczsKKwl1MzIgdHhfY29hbGVzY2VfdXNlY3M7CiAKIAkvKiB3b3JrIHF1ZXVlIGNhY2hlIGxpbmUgc2VjdGlvbiAqLwogCV9fX19jYWNoZWxpbmVfYWxpZ25lZCBzdHJ1Y3Qgdm5pY193cSB3cVtFTklDX1dRX01BWF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwppbmRleCBmODc1NzUxLi5jODFiYzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVNDT19WSUNfRU5FVCAgICAgICAgIDB4MDA0MyAgLyogZXRoZXJuZXQgdm5pYyAqLwogCiAvKiBTdXBwb3J0ZWQgZGV2aWNlcyAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVuaWNfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlbmljX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9WREVWSUNFKENJU0NPLCBQQ0lfREVWSUNFX0lEX0NJU0NPX1ZJQ19FTkVUKSB9LAogCXsgMCwgfQkvKiBlbmQgb2YgdGFibGUgKi8KIH07CkBAIC0yNjEsNiArMjYxLDYyIEBACiAJZW5pYy0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCitzdGF0aWMgaW50IGVuaWNfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjbWQpCit7CisJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MgPSBlbmljLT50eF9jb2FsZXNjZV91c2VjczsKKwllY21kLT5yeF9jb2FsZXNjZV91c2VjcyA9IGVuaWMtPnJ4X2NvYWxlc2NlX3VzZWNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWNtZCkKK3sKKwlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTMyIHR4X2NvYWxlc2NlX3VzZWNzOworCXUzMiByeF9jb2FsZXNjZV91c2VjczsKKworCXR4X2NvYWxlc2NlX3VzZWNzID0gbWluX3QodTMyLAorCQlJTlRSX0NPQUxFU0NFX0hXX1RPX1VTRUMoVk5JQ19JTlRSX1RJTUVSX01BWCksCisJCWVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzKTsKKwlyeF9jb2FsZXNjZV91c2VjcyA9IG1pbl90KHUzMiwKKwkJSU5UUl9DT0FMRVNDRV9IV19UT19VU0VDKFZOSUNfSU5UUl9USU1FUl9NQVgpLAorCQllY21kLT5yeF9jb2FsZXNjZV91c2Vjcyk7CisKKwlzd2l0Y2ggKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy0+dmRldikpIHsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9JTlRYOgorCQlpZiAodHhfY29hbGVzY2VfdXNlY3MgIT0gcnhfY29hbGVzY2VfdXNlY3MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoJmVuaWMtPmludHJbRU5JQ19JTlRYX1dRX1JRXSwKKwkJCUlOVFJfQ09BTEVTQ0VfVVNFQ19UT19IVyh0eF9jb2FsZXNjZV91c2VjcykpOworCQlicmVhazsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0k6CisJCWlmICh0eF9jb2FsZXNjZV91c2VjcyAhPSByeF9jb2FsZXNjZV91c2VjcykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXZuaWNfaW50cl9jb2FsZXNjaW5nX3RpbWVyX3NldCgmZW5pYy0+aW50clswXSwKKwkJCUlOVFJfQ09BTEVTQ0VfVVNFQ19UT19IVyh0eF9jb2FsZXNjZV91c2VjcykpOworCQlicmVhazsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOgorCQl2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoJmVuaWMtPmludHJbRU5JQ19NU0lYX1dRXSwKKwkJCUlOVFJfQ09BTEVTQ0VfVVNFQ19UT19IVyh0eF9jb2FsZXNjZV91c2VjcykpOworCQl2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSwKKwkJCUlOVFJfQ09BTEVTQ0VfVVNFQ19UT19IVyhyeF9jb2FsZXNjZV91c2VjcykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwllbmljLT50eF9jb2FsZXNjZV91c2VjcyA9IHR4X2NvYWxlc2NlX3VzZWNzOworCWVuaWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gcnhfY29hbGVzY2VfdXNlY3M7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlbmljX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBlbmljX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBlbmljX2dldF9kcnZpbmZvLApAQCAtMjc4LDYgKzMzNCw4IEBACiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAogCS5zZXRfdHNvID0gZW5pY19zZXRfdHNvLAorCS5nZXRfY29hbGVzY2UgPSBlbmljX2dldF9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlID0gZW5pY19zZXRfY29hbGVzY2UsCiAJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogCS5zZXRfZmxhZ3MgPSBldGh0b29sX29wX3NldF9mbGFncywKIH07CkBAIC0zNjMsMTIgKzQyMSwxMiBAQAogCXUzMiBtdHUgPSB2bmljX2Rldl9tdHUoZW5pYy0+dmRldik7CiAKIAlpZiAobXR1ICYmIG10dSAhPSBlbmljLT5wb3J0X210dSkgeworCQllbmljLT5wb3J0X210dSA9IG10dTsKIAkJaWYgKG10dSA8IGVuaWMtPm5ldGRldi0+bXR1KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKIAkJCQkiJXM6IGludGVyZmFjZSBNVFUgKCVkKSBzZXQgaGlnaGVyICIKIAkJCQkidGhhbiBzd2l0Y2ggcG9ydCBNVFUgKCVkKVxuIiwKIAkJCQllbmljLT5uZXRkZXYtPm5hbWUsIGVuaWMtPm5ldGRldi0+bXR1LCBtdHUpOwotCQllbmljLT5wb3J0X210dSA9IG10dTsKIAl9CiB9CiAKQEAgLTY3Myw3ICs3MzEsNyBAQAogCiAvKiBuZXRpZl90eF9sb2NrIGhlbGQsIHByb2Nlc3MgY29udGV4dCB3aXRoIEJIcyBkaXNhYmxlZCwgb3IgQkggKi8KIHN0YXRpYyBuZXRkZXZfdHhfdCBlbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCB2bmljX3dxICp3cSA9ICZlbmljLT53cVswXTsKQEAgLTc3MSw2ICs4MjksNyBAQAogCWludCBwcm9taXNjID0gKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPyAxIDogMDsKIAlpbnQgYWxsbXVsdGkgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKIAkgICAgKG5ldGRldi0+bWNfY291bnQgPiBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlMpOworCXVuc2lnbmVkIGludCBmbGFncyA9IG5ldGRldi0+ZmxhZ3MgfCAoYWxsbXVsdGkgPyBJRkZfQUxMTVVMVEkgOiAwKTsKIAl1OCBtY19hZGRyW0VOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSU11bRVRIX0FMRU5dOwogCXVuc2lnbmVkIGludCBtY19jb3VudCA9IG5ldGRldi0+bWNfY291bnQ7CiAJdW5zaWduZWQgaW50IGksIGo7CkBAIC03ODAsOCArODM5LDExIEBACiAKIAlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAotCXZuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYy0+dmRldiwgZGlyZWN0ZWQsCi0JCW11bHRpY2FzdCwgYnJvYWRjYXN0LCBwcm9taXNjLCBhbGxtdWx0aSk7CisJaWYgKGVuaWMtPmZsYWdzICE9IGZsYWdzKSB7CisJCWVuaWMtPmZsYWdzID0gZmxhZ3M7CisJCXZuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYy0+dmRldiwgZGlyZWN0ZWQsCisJCQltdWx0aWNhc3QsIGJyb2FkY2FzdCwgcHJvbWlzYywgYWxsbXVsdGkpOworCX0KIAogCS8qIElzIHRoZXJlIGFuIGVhc2llciB3YXk/ICBUcnlpbmcgdG8gbWluaW1pemUgdG8KIAkgKiBjYWxscyB0byBhZGQvZGVsIG11bHRpY2FzdCBhZGRycy4gIFdlIGtlZXAgdGhlCkBAIC0xMDg0LDM0ICsxMTQ2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZW5pY19ycV9kcm9wX2J1ZihzdHJ1Y3Qgdm5pY19ycSAqcnEsCi0Jc3RydWN0IGNxX2Rlc2MgKmNxX2Rlc2MsIHN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmLAotCWludCBza2lwcGVkLCB2b2lkICpvcGFxdWUpCi17Ci0Jc3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHJxLT52ZGV2KTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYnVmLT5vc19idWY7Ci0KLQlpZiAoc2tpcHBlZCkKLQkJcmV0dXJuOwotCi0JcGNpX3VubWFwX3NpbmdsZShlbmljLT5wZGV2LCBidWYtPmRtYV9hZGRyLAotCQlidWYtPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci19Ci0KLXN0YXRpYyBpbnQgZW5pY19ycV9zZXJ2aWNlX2Ryb3Aoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBzdHJ1Y3QgY3FfZGVzYyAqY3FfZGVzYywKLQl1OCB0eXBlLCB1MTYgcV9udW1iZXIsIHUxNiBjb21wbGV0ZWRfaW5kZXgsIHZvaWQgKm9wYXF1ZSkKLXsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IHZuaWNfZGV2X3ByaXYodmRldik7Ci0KLQl2bmljX3JxX3NlcnZpY2UoJmVuaWMtPnJxW3FfbnVtYmVyXSwgY3FfZGVzYywKLQkJY29tcGxldGVkX2luZGV4LCBWTklDX1JRX1JFVFVSTl9ERVNDLAotCQllbmljX3JxX2Ryb3BfYnVmLCBvcGFxdWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZW5pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZW5pYywgbmFwaSk7CkBAIC0xMTE5LDYgKzExNTMsNyBAQAogCXVuc2lnbmVkIGludCBycV93b3JrX3RvX2RvID0gYnVkZ2V0OwogCXVuc2lnbmVkIGludCB3cV93b3JrX3RvX2RvID0gLTE7IC8qIG5vIGxpbWl0ICovCiAJdW5zaWduZWQgaW50ICB3b3JrX2RvbmUsIHJxX3dvcmtfZG9uZSwgd3Ffd29ya19kb25lOworCWludCBlcnI7CiAKIAkvKiBTZXJ2aWNlIFJRIChmaXJzdCkgYW5kIFdRCiAJICovCkBAIC0xMTQyLDE2ICsxMTc3LDE5IEBACiAJCQkwIC8qIGRvbid0IHVubWFzayBpbnRyICovLAogCQkJMCAvKiBkb24ndCByZXNldCBpbnRyIHRpbWVyICovKTsKIAotCWlmIChycV93b3JrX2RvbmUgPiAwKSB7CisJZXJyID0gdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKIAotCQkvKiBSZXBsZW5pc2ggUlEKLQkJICovCisJLyogQnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkLiBTdGF5IGluIHBvbGxpbmcKKwkgKiBtb2RlIHNvIHdlIGNhbiB0cnkgdG8gZmlsbCB0aGUgcmluZyBhZ2Fpbi4KKwkgKi8KIAotCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljLT5ycV9hbGxvY19idWYpOworCWlmIChlcnIpCisJCXJxX3dvcmtfZG9uZSA9IHJxX3dvcmtfdG9fZG87CiAKLQl9IGVsc2UgeworCWlmIChycV93b3JrX2RvbmUgPCBycV93b3JrX3RvX2RvKSB7CiAKLQkJLyogSWYgbm8gd29yayBkb25lLCBmbHVzaCBhbGwgTFJPcyBhbmQgZXhpdCBwb2xsaW5nCisJCS8qIFNvbWUgd29yayBkb25lLCBidXQgbm90IGVub3VnaCB0byBzdGF5IGluIHBvbGxpbmcsCisJCSAqIGZsdXNoIGFsbCBMUk9zIGFuZCBleGl0IHBvbGxpbmcKIAkJICovCiAKIAkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKQEAgLTExNzAsNiArMTIwOCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKIAl1bnNpZ25lZCBpbnQgd29ya190b19kbyA9IGJ1ZGdldDsKIAl1bnNpZ25lZCBpbnQgd29ya19kb25lOworCWludCBlcnI7CiAKIAkvKiBTZXJ2aWNlIFJRCiAJICovCkBAIC0xMTc3LDI1ICsxMjE2LDMwIEBACiAJd29ya19kb25lID0gdm5pY19jcV9zZXJ2aWNlKCZlbmljLT5jcVtFTklDX0NRX1JRXSwKIAkJd29ya190b19kbywgZW5pY19ycV9zZXJ2aWNlLCBOVUxMKTsKIAotCWlmICh3b3JrX2RvbmUgPiAwKSB7CisJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCisJICogY3ljbGUuICBBbiBpbnRyIGV2ZW50IGlzIHRoZSBjb21wbGV0aW9uIG9mIGEKKwkgKiBSUSBwYWNrZXQuCisJICovCiAKLQkJLyogUmVwbGVuaXNoIFJRCi0JCSAqLwotCi0JCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7Ci0KLQkJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCi0JCSAqIGN5Y2xlLiAgQW4gaW50ciBldmVudCBpcyB0aGUgY29tcGxldGlvbiBvZiBhCi0JCSAqIFJRIHBhY2tldC4KLQkJICovCi0KKwlpZiAod29ya19kb25lID4gMCkKIAkJdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0sCiAJCQl3b3JrX2RvbmUsCiAJCQkwIC8qIGRvbid0IHVubWFzayBpbnRyICovLAogCQkJMCAvKiBkb24ndCByZXNldCBpbnRyIHRpbWVyICovKTsKLQl9IGVsc2UgewogCi0JCS8qIElmIG5vIHdvcmsgZG9uZSwgZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZworCWVyciA9IHZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7CisKKwkvKiBCdWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuIFN0YXkgaW4gcG9sbGluZyBtb2RlCisJICogc28gd2UgY2FuIHRyeSB0byBmaWxsIHRoZSByaW5nIGFnYWluLgorCSAqLworCisJaWYgKGVycikKKwkJd29ya19kb25lID0gd29ya190b19kbzsKKworCWlmICh3b3JrX2RvbmUgPCB3b3JrX3RvX2RvKSB7CisKKwkJLyogU29tZSB3b3JrIGRvbmUsIGJ1dCBub3QgZW5vdWdoIHRvIHN0YXkgaW4gcG9sbGluZywKKwkJICogZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZwogCQkgKi8KIAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQpAQCAtMTMwNCw2ICsxMzQ4LDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgZW5pY19zeW5jaHJvbml6ZV9pcnFzKHN0cnVjdCBlbmljICplbmljKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3dpdGNoICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpKSB7CisJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfSU5UWDoKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0k6CisJCXN5bmNocm9uaXplX2lycShlbmljLT5wZGV2LT5pcnEpOworCQlicmVhazsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOgorCQlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGVuaWMtPm1zaXhfZW50cnlbaV0udmVjdG9yKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGVuaWNfbm90aWZ5X3NldChzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKIAlpbnQgZXJyOwpAQCAtMTM2MCwxMSArMTQyMiwxMyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKSB7Ci0JCWVyciA9IHZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbaV0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7Ci0JCWlmIChlcnIpIHsKKwkJdm5pY19ycV9maWxsKCZlbmljLT5ycVtpXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKKwkJLyogTmVlZCBhdCBsZWFzdCBvbmUgYnVmZmVyIG9uIHJpbmcgdG8gZ2V0IGdvaW5nICovCisJCWlmICh2bmljX3JxX2Rlc2NfdXNlZCgmZW5pYy0+cnFbaV0pID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCQkiJXM6IFVuYWJsZSB0byBhbGxvYyByZWNlaXZlIGJ1ZmZlcnMuXG4iLAogCQkJCW5ldGRldi0+bmFtZSk7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X25vdGlmeV91bnNldDsKIAkJfQogCX0KQEAgLTE0MDksMTYgKzE0NzMsMTkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCisJZm9yIChpID0gMDsgaSA8IGVuaWMtPmludHJfY291bnQ7IGkrKykKKwkJdm5pY19pbnRyX21hc2soJmVuaWMtPmludHJbaV0pOworCisJZW5pY19zeW5jaHJvbml6ZV9pcnFzKGVuaWMpOworCiAJZGVsX3RpbWVyX3N5bmMoJmVuaWMtPm5vdGlmeV90aW1lcik7CiAKIAlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAl2bmljX2Rldl9kaXNhYmxlKGVuaWMtPnZkZXYpOwogCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJbmFwaV9kaXNhYmxlKCZlbmljLT5uYXBpKTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKQotCQl2bmljX2ludHJfbWFzaygmZW5pYy0+aW50cltpXSk7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+d3FfY291bnQ7IGkrKykgewogCQllcnIgPSB2bmljX3dxX2Rpc2FibGUoJmVuaWMtPndxW2ldKTsKQEAgLTE0MzYsMTEgKzE1MDMsNiBAQAogCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CiAKLQkodm9pZCl2bmljX2NxX3NlcnZpY2UoJmVuaWMtPmNxW0VOSUNfQ1FfUlFdLAotCQktMSwgZW5pY19ycV9zZXJ2aWNlX2Ryb3AsIE5VTEwpOwotCSh2b2lkKXZuaWNfY3Ffc2VydmljZSgmZW5pYy0+Y3FbRU5JQ19DUV9XUV0sCi0JCS0xLCBlbmljX3dxX3NlcnZpY2UsIE5VTEwpOwotCiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPndxX2NvdW50OyBpKyspCiAJCXZuaWNfd3FfY2xlYW4oJmVuaWMtPndxW2ldLCBlbmljX2ZyZWVfd3FfYnVmKTsKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+cnFfY291bnQ7IGkrKykKQEAgLTE3NjIsNyArMTgyNCw4IEBACiAJZXJyID0gZW5pY19zZXRfaW50cl9tb2RlKGVuaWMpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlLCBhYm9ydGluZy5cbiIpOworCQkJIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlIGJhc2VkIG9uIHJlc291cmNlICIKKwkJCSJjb3VudHMgYW5kIHN5c3RlbSBjYXBhYmlsaXRpZXMsIGFib3J0aW5nLlxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xOTg2LDYgKzIwNDksOSBAQAogCQlnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDsKIAl9CiAKKwllbmljLT50eF9jb2FsZXNjZV91c2VjcyA9IGVuaWMtPmNvbmZpZy5pbnRyX3RpbWVyX3VzZWM7CisJZW5pYy0+cnhfY29hbGVzY2VfdXNlY3MgPSBlbmljLT50eF9jb2FsZXNjZV91c2VjczsKKwogCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZlbmljX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmVuaWNfZXRodG9vbF9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKaW5kZXggMzIxMTExNC4uMDI4MzliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYwpAQCAtNjYsMjEgKzY2LDIxIEBACiAJR0VUX0NPTkZJRyh3cV9kZXNjX2NvdW50KTsKIAlHRVRfQ09ORklHKHJxX2Rlc2NfY291bnQpOwogCUdFVF9DT05GSUcobXR1KTsKLQlHRVRfQ09ORklHKGludHJfdGltZXIpOwogCUdFVF9DT05GSUcoaW50cl90aW1lcl90eXBlKTsKIAlHRVRfQ09ORklHKGludHJfbW9kZSk7CisJR0VUX0NPTkZJRyhpbnRyX3RpbWVyX3VzZWMpOwogCiAJYy0+d3FfZGVzY19jb3VudCA9CiAJCW1pbl90KHUzMiwgRU5JQ19NQVhfV1FfREVTQ1MsCiAJCW1heF90KHUzMiwgRU5JQ19NSU5fV1FfREVTQ1MsCiAJCWMtPndxX2Rlc2NfY291bnQpKTsKLQljLT53cV9kZXNjX2NvdW50ICY9IDB4ZmZmZmZmZjA7IC8qIG11c3QgYmUgYWxpZ25lZCB0byBncm91cHMgb2YgMTYgKi8KKwljLT53cV9kZXNjX2NvdW50ICY9IDB4ZmZmZmZmZTA7IC8qIG11c3QgYmUgYWxpZ25lZCB0byBncm91cHMgb2YgMzIgKi8KIAogCWMtPnJxX2Rlc2NfY291bnQgPQogCQltaW5fdCh1MzIsIEVOSUNfTUFYX1JRX0RFU0NTLAogCQltYXhfdCh1MzIsIEVOSUNfTUlOX1JRX0RFU0NTLAogCQljLT5ycV9kZXNjX2NvdW50KSk7Ci0JYy0+cnFfZGVzY19jb3VudCAmPSAweGZmZmZmZmYwOyAvKiBtdXN0IGJlIGFsaWduZWQgdG8gZ3JvdXBzIG9mIDE2ICovCisJYy0+cnFfZGVzY19jb3VudCAmPSAweGZmZmZmZmUwOyAvKiBtdXN0IGJlIGFsaWduZWQgdG8gZ3JvdXBzIG9mIDMyICovCiAKIAlpZiAoYy0+bXR1ID09IDApCiAJCWMtPm10dSA9IDE1MDA7CkBAIC04OCwxNSArODgsMTcgQEAKIAkJbWF4X3QodTE2LCBFTklDX01JTl9NVFUsCiAJCWMtPm10dSkpOwogCi0JYy0+aW50cl90aW1lciA9IG1pbl90KHUxNiwgVk5JQ19JTlRSX1RJTUVSX01BWCwgYy0+aW50cl90aW1lcik7CisJYy0+aW50cl90aW1lcl91c2VjID0gbWluX3QodTMyLAorCQlJTlRSX0NPQUxFU0NFX0hXX1RPX1VTRUMoVk5JQ19JTlRSX1RJTUVSX01BWCksCisJCWMtPmludHJfdGltZXJfdXNlYyk7CiAKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyBNQUMgYWRkciAlcE0gd3EvcnEgJWQvJWRcbiIsCiAJCWVuaWMtPm1hY19hZGRyLCBjLT53cV9kZXNjX2NvdW50LCBjLT5ycV9kZXNjX2NvdW50KTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyBtdHUgJWQgY3N1bSB0eC9yeCAlZC8lZCB0c28vbHJvICVkLyVkICIKLQkJImludHIgdGltZXIgJWRcbiIsCisJCSJpbnRyIHRpbWVyICVkIHVzZWNcbiIsCiAJCWMtPm10dSwgRU5JQ19TRVRUSU5HKGVuaWMsIFRYQ1NVTSksCiAJCUVOSUNfU0VUVElORyhlbmljLCBSWENTVU0pLCBFTklDX1NFVFRJTkcoZW5pYywgVFNPKSwKLQkJRU5JQ19TRVRUSU5HKGVuaWMsIExSTyksIGMtPmludHJfdGltZXIpOworCQlFTklDX1NFVFRJTkcoZW5pYywgTFJPKSwgYy0+aW50cl90aW1lcl91c2VjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAzLDcgKzMwNSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKSB7CiAJCXZuaWNfaW50cl9pbml0KCZlbmljLT5pbnRyW2ldLAotCQkJZW5pYy0+Y29uZmlnLmludHJfdGltZXIsCisJCQlJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcoZW5pYy0+Y29uZmlnLmludHJfdGltZXJfdXNlYyksCiAJCQllbmljLT5jb25maWcuaW50cl90aW1lcl90eXBlLAogCQkJbWFza19vbl9hc3NlcnRpb24pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwppbmRleCAyOWE0OGU4Li42OWI5YjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCkBAIC0zNiw3ICszNiw2IEBACiB9OwogCiAjZGVmaW5lIFZOSUNfREVWX0NBUF9JTklUCTB4MDAwMQotI2RlZmluZSBWTklDX0RFVl9DQVBfUEVSQkkJMHgwMDAyCiAKIHN0cnVjdCB2bmljX2RldiB7CiAJdm9pZCAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19lbmV0LmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZW5ldC5oCmluZGV4IDYzMzJhYzkuLjhlZWI2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19lbmV0LmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2VuZXQuaApAQCAtMjAsNiArMjAsMTAgQEAKICNpZm5kZWYgX1ZOSUNfRU5JQ19IXwogI2RlZmluZSBfVk5JQ19FTklDX0hfCiAKKy8qIEhhcmR3YXJlIGludHIgY29hbGVzY2UgdGltZXIgaXMgaW4gdW5pdHMgb2YgMS41dXMgKi8KKyNkZWZpbmUgSU5UUl9DT0FMRVNDRV9VU0VDX1RPX0hXKHVzZWMpICgodXNlYykgKiAyLzMpCisjZGVmaW5lIElOVFJfQ09BTEVTQ0VfSFdfVE9fVVNFQyh1c2VjKSAoKHVzZWMpICogMy8yKQorCiAvKiBEZXZpY2Utc3BlY2lmaWMgcmVnaW9uOiBlbmV0IGNvbmZpZ3VyYXRpb24gKi8KIHN0cnVjdCB2bmljX2VuZXRfY29uZmlnIHsKIAl1MzIgZmxhZ3M7CkBAIC0zMCw2ICszNCw3IEBACiAJdTggaW50cl90aW1lcl90eXBlOwogCXU4IGludHJfbW9kZTsKIAljaGFyIGRldm5hbWVbMTZdOworCXUzMiBpbnRyX3RpbWVyX3VzZWM7CiB9OwogCiAjZGVmaW5lIFZFTkVURl9UU08JCTB4MQkvKiBUU08gZW5hYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMKaW5kZXggMWY4Nzg2ZC4uMzkzNDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jCkBAIC01MCwxMiArNTAsMTggQEAKIHZvaWQgdm5pY19pbnRyX2luaXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwgdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdGltZXIsCiAJdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdHlwZSwgdW5zaWduZWQgaW50IG1hc2tfb25fYXNzZXJ0aW9uKQogewotCWlvd3JpdGUzMihjb2FsZXNjaW5nX3RpbWVyLCAmaW50ci0+Y3RybC0+Y29hbGVzY2luZ190aW1lcik7CisJdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KGludHIsIGNvYWxlc2NpbmdfdGltZXIpOwogCWlvd3JpdGUzMihjb2FsZXNjaW5nX3R5cGUsICZpbnRyLT5jdHJsLT5jb2FsZXNjaW5nX3R5cGUpOwogCWlvd3JpdGUzMihtYXNrX29uX2Fzc2VydGlvbiwgJmludHItPmN0cmwtPm1hc2tfb25fYXNzZXJ0aW9uKTsKIAlpb3dyaXRlMzIoMCwgJmludHItPmN0cmwtPmludF9jcmVkaXRzKTsKIH0KIAordm9pZCB2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwKKwl1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190aW1lcikKK3sKKwlpb3dyaXRlMzIoY29hbGVzY2luZ190aW1lciwgJmludHItPmN0cmwtPmNvYWxlc2NpbmdfdGltZXIpOworfQorCiB2b2lkIHZuaWNfaW50cl9jbGVhbihzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKQogewogCWlvd3JpdGUzMigwLCAmaW50ci0+Y3RybC0+aW50X2NyZWRpdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKaW5kZXggOWE1MzYwNC4uMmZlNmM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCkBAIC02MSw2ICs2MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdm5pY19pbnRyX21hc2soc3RydWN0IHZuaWNfaW50ciAqaW50cikKIHsKIAlpb3dyaXRlMzIoMSwgJmludHItPmN0cmwtPm1hc2spOworCSh2b2lkKWlvcmVhZDMyKCZpbnRyLT5jdHJsLT5tYXNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfaW50cl9yZXR1cm5fY3JlZGl0cyhzdHJ1Y3Qgdm5pY19pbnRyICppbnRyLApAQCAtMTAxLDYgKzEwMiw4IEBACiAJdW5zaWduZWQgaW50IGluZGV4KTsKIHZvaWQgdm5pY19pbnRyX2luaXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwgdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdGltZXIsCiAJdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdHlwZSwgdW5zaWduZWQgaW50IG1hc2tfb25fYXNzZXJ0aW9uKTsKK3ZvaWQgdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KHN0cnVjdCB2bmljX2ludHIgKmludHIsCisJdW5zaWduZWQgaW50IGNvYWxlc2NpbmdfdGltZXIpOwogdm9pZCB2bmljX2ludHJfY2xlYW4oc3RydWN0IHZuaWNfaW50ciAqaW50cik7CiAKICNlbmRpZiAvKiBfVk5JQ19JTlRSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmgKaW5kZXggZWVhZjMyOS4uY2Y4MGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaApAQCAtNDEsMTIgKzQxLDEyIEBACiAjZGVmaW5lIE5JQ19DRkdfSUdfVkxBTl9TVFJJUF9FTl9NQVNLX0ZJRUxECTFVTAogI2RlZmluZSBOSUNfQ0ZHX0lHX1ZMQU5fU1RSSVBfRU5fU0hJRlQJCTI0CiAKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX0lQVjQJCSgxIDw8IDApCi0jZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNAkJKDEgPDwgMSkKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX0lQVjYJCSgxIDw8IDIpCi0jZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNgkJKDEgPDwgMykKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX0lQVjZfRVgJCSgxIDw8IDQpCi0jZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNl9FWAkoMSA8PCA1KQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNAkJKDEgPDwgMSkKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY0CQkoMSA8PCAyKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNgkJKDEgPDwgMykKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2CQkoMSA8PCA0KQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNl9FWAkJKDEgPDwgNSkKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2X0VYCSgxIDw8IDYpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bmljX3NldF9uaWNfY2ZnKHUzMiAqbmljX2NmZywKIAl1OCByc3NfZGVmYXVsdF9jcHUsIHU4IHJzc19oYXNoX3R5cGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggNDE0OTRmNy4uMWY4YjExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlcGljX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlcGljX3BjaV90YmwpID0gewogCXsgMHgxMEI4LCAweDAwMDUsIDB4MTA5MiwgMHgwQUI0LCAwLCAwLCBTTVNDXzgzQzE3MF8wIH0sCiAJeyAweDEwQjgsIDB4MDAwNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU01TQ184M0MxNzAgfSwKIAl7IDB4MTBCOCwgMHgwMDA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVhbG54LmMgYi9kcml2ZXJzL25ldC9mZWFsbnguYwppbmRleCBkYWM0ZTU5Li5lNmE5ODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtMTk0MSw3ICsxOTQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZlYWxueF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZmVhbG54X3BjaV90YmwpID0gewogCXsweDE1MTYsIDB4MDgwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezB4MTUxNiwgMHgwODAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxfSwKIAl7MHgxNTE2LCAweDA4OTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCAzYzM0MDQ4Li4zZWI3MTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtNjE5OCw3ICs2MTk4LDcgQEAKICNkZWZpbmUgbnZfcmVzdW1lIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfdGJsKSA9IHsKIAl7CS8qIG5Gb3JjZSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoMHgxMERFLCAweDAxQzMpLAogCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggZWE4NTA3NS4uZGQ3MmM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtMTk5MCw3ICsxOTkwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoYW1hY2hpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShoYW1hY2hpX3BjaV90YmwpID0gewogCXsgMHgxMzE4LCAweDA5MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggOTBmODkwZS4uMGMyZjJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0yMTAsNyArMjEwLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwMTAwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShocDEwMF9wY2lfdGJsKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9KMjU4NUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9KMjU4NUIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgUENJX0RFVklDRV9JRF9IUF9KMjk3MEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggOTMzYzY0Zi4uZDk2Nzk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlbYm9hcmRfODI1NzVdID0gJmUxMDAwXzgyNTc1X2luZm8sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWdiX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpZ2JfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgwX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgwX0ZJQkVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1ODBfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKQEAgLTQxMDUsNiArNDEwNSw5IEBACiAJdTMyIGljciA9IHJkMzIoRTEwMDBfSUNSKTsKIAkvKiByZWFkaW5nIElDUiBjYXVzZXMgYml0IDMxIG9mIEVJQ1IgdG8gYmUgY2xlYXJlZCAqLwogCisJaWYgKGljciAmIEUxMDAwX0lDUl9EUlNUQSkKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisKIAlpZiAoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CiAJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KIAkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOwpAQCAtNDcyOCw2ICs0NzMxLDkgQEAKIAogCWlnYl93cml0ZV9pdHIocV92ZWN0b3IpOwogCisJaWYgKGljciAmIEUxMDAwX0lDUl9EUlNUQSkKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisKIAlpZiAoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CiAJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KIAkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOwpAQCAtNDc2Nyw2ICs0NzczLDkgQEAKIAlpZiAoIShpY3IgJiBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCisJaWYgKGljciAmIEUxMDAwX0lDUl9EUlNUQSkKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisKIAlpZiAoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CiAJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KIAkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwppbmRleCAwZGJkMDMyLi5hNmMzOTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwpAQCAtMjYwOCwxMSArMjYwOCw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsKFIpIDgyNTc2IFZpcnR1YWwgRnVuY3Rpb25cbiIpOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBZGRyZXNzOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgICAvKiBNQUMgYWRkcmVzcyAqLwotCSAgICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sCi0JICAgICAgICAgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKLQkgICAgICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQWRkcmVzczogJXBNXG4iLCBuZXRkZXYtPmRldl9hZGRyKTsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZFxuIiwgaHctPm1hYy50eXBlKTsKIH0KIApAQCAtMjc3OCwxMSArMjc3NCw4IEBACiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgTUFDIEFkZHJlc3M6ICIKLQkJICAgICAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwKLQkJICAgICAgICBuZXRkZXYtPmRldl9hZGRyWzJdLCBuZXRkZXYtPmRldl9hZGRyWzNdLAotCQkgICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIE1BQyBBZGRyZXNzOiAlcE1cbiIsCisJCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkcik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyX2h3X2luaXQ7CiAJfQpAQCAtMjg4NCw3ICsyODc3LDcgQEAKIAkucmVzdW1lID0gaWdidmZfaW9fcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlnYnZmX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpZ2J2Zl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfVkYpLCBib2FyZF92ZiB9LAogCXsgfSAvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCmluZGV4IDhlYzE1YWIuLjgxYTRjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAkgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlvYzNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlvYzNfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NHSSwgUENJX0RFVklDRV9JRF9TR0lfSU9DMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBnLmMgYi9kcml2ZXJzL25ldC9pcGcuYwppbmRleCBiYThkMjQ2Li40OWYzNWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcGcuYworKysgYi9kcml2ZXJzL25ldC9pcGcuYwpAQCAtOTIsNyArOTIsNyBAQAogCSJELUxpbmsgTklDIElQMTAwMEEiCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXBnX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlwZ19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKFNVTkRBTkNFLAkweDEwMjMpLCAwIH0sCiAJeyBQQ0lfVkRFVklDRShTVU5EQU5DRSwJMHgyMDIxKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoU1VOREFOQ0UsCTB4MTAyMSksIDIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwppbmRleCAyZDdiNWMxLi5iN2U2NjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCkBAIC0xODQsNyArMTg0LDcgQEAKICNkZWZpbmUgQ09ORklHMEhfRE1BX09OX05PUlggQ09ORklHMEhfRE1BX09GRnwgT0JPRV9DT05GSUcwSF9FTkRNQUMKICNkZWZpbmUgQ09ORklHMEhfRE1BX09OIENPTkZJRzBIX0RNQV9PTl9OT1JYIHwgT0JPRV9DT05GSUcwSF9FTlJYCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0b3Nob2JvZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodG9zaG9ib2VfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1RPU0hJQkEsIFBDSV9ERVZJQ0VfSURfRklSNzAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgUENJX1ZFTkRPUl9JRF9UT1NISUJBLCBQQ0lfREVWSUNFX0lEX0ZJUkQwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCmluZGV4IGZkZGI0ZWYuLjY1MzNjMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZpYV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodmlhX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9WSUEsIDB4ODIzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwwLDAsMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9WSUEsIDB4MzEwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwwLDAsMSB9LAogCXsgUENJX1ZFTkRPUl9JRF9WSUEsIDB4MzA3NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwwLDAsMiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCBiZDNjNmI1Li4yMDlkNGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtNTksNyArNTksNyBAQAogCiBzdGF0aWMgLyogY29uc3QgKi8gY2hhciBkcml2ZXJuYW1lW10gPSBEUklWRVJfTkFNRTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZsc2lfaXJkYV90YWJsZSBbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh2bHNpX2lyZGFfdGFibGUpID0gewogCXsKIAkJLmNsYXNzID0gICAgICAgIFBDSV9DTEFTU19XSVJFTEVTU19JUkRBIDw8IDgsCiAJCS5jbGFzc19tYXNrID0JUENJX0NMQVNTX1NVQkNMQVNTX01BU0sgPDwgOCwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBiY2QwZjAxLi42YzJkOTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXhnYl9wY2lfdGJsKSA9IHsKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0NYNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKaW5kZXggMjFiNDFmNC4uMWRkODY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKQEAgLTMzLDcgKzMzLDggQEAKIG9iai0kKENPTkZJR19JWEdCRSkgKz0gaXhnYmUubwogCiBpeGdiZS1vYmpzIDo9IGl4Z2JlX21haW4ubyBpeGdiZV9jb21tb24ubyBpeGdiZV9ldGh0b29sLm8gXAotICAgICAgICAgICAgICBpeGdiZV84MjU5OS5vIGl4Z2JlXzgyNTk4Lm8gaXhnYmVfcGh5Lm8KKyAgICAgICAgICAgICAgaXhnYmVfODI1OTkubyBpeGdiZV84MjU5OC5vIGl4Z2JlX3BoeS5vIGl4Z2JlX3NyaW92Lm8gXAorICAgICAgICAgICAgICBpeGdiZV9tYngubwogCiBpeGdiZS0kKENPTkZJR19JWEdCRV9EQ0IpICs9ICBpeGdiZV9kY2IubyBpeGdiZV9kY2JfODI1OTgubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9kY2JfODI1OTkubyBpeGdiZV9kY2JfbmwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggOGRhOGViNS4uZWQ3MzU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC05OCw2ICs5OCwyMyBAQAogCiAjZGVmaW5lIElYR0JFX01BWF9SU0NfSU5UX1JBVEUgICAgICAgICAgMTYyNzYwCiAKKyNkZWZpbmUgSVhHQkVfTUFYX1ZGX01DX0VOVFJJRVMgICAgICAgICAzMAorI2RlZmluZSBJWEdCRV9NQVhfVkZfRlVOQ1RJT05TICAgICAgICAgIDY0CisjZGVmaW5lIElYR0JFX01BWF9WRlRBX0VOVFJJRVMgICAgICAgICAgMTI4CisjZGVmaW5lIE1BWF9FTVVMQVRJT05fTUFDX0FERFJTICAgICAgICAgMTYKKyNkZWZpbmUgVk1EUV9QKHApICAgKChwKSArIGFkYXB0ZXItPm51bV92ZnMpCisKK3N0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgeworCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJlc3Nlc1tFVEhfQUxFTl07CisJdTE2IHZmX21jX2hhc2hlc1tJWEdCRV9NQVhfVkZfTUNfRU5UUklFU107CisJdTE2IG51bV92Zl9tY19oYXNoZXM7CisJdTE2IGRlZmF1bHRfdmZfdmxhbl9pZDsKKwl1MTYgdmxhbnNfZW5hYmxlZDsKKwl1bnNpZ25lZCBjaGFyIGVtX21hY19hZGRyZXNzZXNbTUFYX0VNVUxBVElPTl9NQUNfQUREUlMgKiBFVEhfQUxFTl07CisJYm9vbCBjbGVhcl90b19zZW5kOworCWludCByYXI7Cit9OworCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTE3MSw3ICsxODgsNyBAQAogZW51bSBpeGdiZV9yaW5nX2ZfZW51bSB7CiAJUklOR19GX05PTkUgPSAwLAogCVJJTkdfRl9EQ0IsCi0JUklOR19GX1ZNRFEsCisJUklOR19GX1ZNRFEsICAvKiBTUi1JT1YgdXNlcyB0aGUgc2FtZSByaW5nIGZlYXR1cmUgKi8KIAlSSU5HX0ZfUlNTLAogCVJJTkdfRl9GRElSLAogI2lmZGVmIElYR0JFX0ZDT0UKQEAgLTE4Myw3ICsyMDAsNyBAQAogCiAjZGVmaW5lIElYR0JFX01BWF9EQ0JfSU5ESUNFUyAgIDgKICNkZWZpbmUgSVhHQkVfTUFYX1JTU19JTkRJQ0VTICAxNgotI2RlZmluZSBJWEdCRV9NQVhfVk1EUV9JTkRJQ0VTIDE2CisjZGVmaW5lIElYR0JFX01BWF9WTURRX0lORElDRVMgNjQKICNkZWZpbmUgSVhHQkVfTUFYX0ZESVJfSU5ESUNFUyA2NAogI2lmZGVmIElYR0JFX0ZDT0UKICNkZWZpbmUgSVhHQkVfTUFYX0ZDT0VfSU5ESUNFUyAgOApAQCAtMjg4LDYgKzMwNSw4IEBACiAJLyogUlggKi8KIAlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOyAvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwogCWludCBudW1fcnhfcXVldWVzOworCWludCBudW1fcnhfcG9vbHM7CQkvKiA9PSBudW1fcnhfcXVldWVzIGluIDgyNTk4ICovCisJaW50IG51bV9yeF9xdWV1ZXNfcGVyX3Bvb2w7CS8qIDEgaWYgODI1OTgsIGNhbiBiZSBtYW55IGlmIDgyNTk5ICovCiAJdTY0IGh3X2NzdW1fcnhfZXJyb3I7CiAJdTY0IGh3X3J4X25vX2RtYV9yZXNvdXJjZXM7CiAJdTY0IG5vbl9lb3BfZGVzY3M7CkBAIC0zMzAsNiArMzQ5LDggQEAKICNkZWZpbmUgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSAgICAgICAgICh1MzIpKDEgPDwgMjcpCiAjZGVmaW5lIElYR0JFX0ZMQUdfRkNPRV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI4KQogI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOSkKKyNkZWZpbmUgSVhHQkVfRkxBR19TUklPVl9DQVBBQkxFICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMzApCisjZGVmaW5lIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDMxKQogCiAJdTMyIGZsYWdzMjsKICNkZWZpbmUgSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEpCkBAIC0zNzksNiArNDAwLDExIEBACiAJdTY0IHJzY190b3RhbF9mbHVzaDsKIAl1MzIgd29sOwogCXUxNiBlZXByb21fdmVyc2lvbjsKKworCS8qIFNSLUlPViAqLworCURFQ0xBUkVfQklUTUFQKGFjdGl2ZV92ZnMsIElYR0JFX01BWF9WRl9GVU5DVElPTlMpOworCXVuc2lnbmVkIGludCBudW1fdmZzOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmaW5mbzsKIH07CiAKIGVudW0gaXhiZ2Vfc3RhdGVfdCB7CkBAIC00NDAsNiArNDY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGZsZXhfYnl0ZSk7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBsNHR5cGUpOworZXh0ZXJuIHZvaWQgaXhnYmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAjaWZkZWYgSVhHQkVfRkNPRQogZXh0ZXJuIHZvaWQgaXhnYmVfY29uZmlndXJlX2Zjb2Uoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBpeGdiZV9mc28oc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwppbmRleCA1MzgzNDA1Li45ZWMyOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCisjaW5jbHVkZSAiaXhnYmVfbWJ4LmgiCiAKICNkZWZpbmUgSVhHQkVfODI1OTlfTUFYX1RYX1FVRVVFUyAxMjgKICNkZWZpbmUgSVhHQkVfODI1OTlfTUFYX1JYX1FVRVVFUyAxMjgKQEAgLTk1MSw4ICs5NTIsNiBAQAogCiAJbXNsZWVwKDUwKTsKIAotCi0KIAkvKgogCSAqIFN0b3JlIHRoZSBvcmlnaW5hbCBBVVRPQy9BVVRPQzIgdmFsdWVzIGlmIHRoZXkgaGF2ZSBub3QgYmVlbgogCSAqIHN0b3JlZCBvZmYgeWV0LiAgT3RoZXJ3aXNlIHJlc3RvcmUgdGhlIHN0b3JlZCBvcmlnaW5hbApAQCAtMTA5NSw5ICsxMDk0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmxhbl9vbikKIHsKIAl1MzIgcmVnaW5kZXg7CisJdTMyIHZsdmZfaW5kZXg7CiAJdTMyIGJpdGluZGV4OwogCXUzMiBiaXRzOwogCXUzMiBmaXJzdF9lbXB0eV9zbG90OworCXUzMiB2dF9jdGw7CiAKIAlpZiAodmxhbiA+IDQwOTUpCiAJCXJldHVybiBJWEdCRV9FUlJfUEFSQU07CkBAIC0xMTI0LDc3ICsxMTI1LDg1IEBACiAKIAogCS8qIFBhcnQgMgotCSAqIElmIHRoZSB2aW5kIGlzIHNldAorCSAqIElmIFZUIG1vZGUgaXMgc2V0CiAJICogICBFaXRoZXIgdmxhbl9vbgogCSAqICAgICBtYWtlIHN1cmUgdGhlIHZsYW4gaXMgaW4gVkxWRgogCSAqICAgICBzZXQgdGhlIHZpbmQgYml0IGluIHRoZSBtYXRjaGluZyBWTFZGQgogCSAqICAgT3IgIXZsYW5fb24KIAkgKiAgICAgY2xlYXIgdGhlIHBvb2wgYml0IGFuZCBwb3NzaWJseSB0aGUgdmluZAogCSAqLwotCWlmICh2aW5kKSB7Ci0JCS8qIGZpbmQgdGhlIHZsYW5pZCBvciB0aGUgZmlyc3QgZW1wdHkgc2xvdCAqLwotCQlmaXJzdF9lbXB0eV9zbG90ID0gMDsKKwl2dF9jdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRfQ1RMKTsKKwlpZiAoISh2dF9jdGwgJiBJWEdCRV9WVF9DVExfVlRfRU5BQkxFKSkKKwkJZ290byBvdXQ7CiAKLQkJZm9yIChyZWdpbmRleCA9IDE7IHJlZ2luZGV4IDwgSVhHQkVfVkxWRl9FTlRSSUVTOyByZWdpbmRleCsrKSB7Ci0JCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpKTsKLQkJCWlmICghYml0cyAmJiAhZmlyc3RfZW1wdHlfc2xvdCkKLQkJCQlmaXJzdF9lbXB0eV9zbG90ID0gcmVnaW5kZXg7Ci0JCQllbHNlIGlmICgoYml0cyAmIDB4MEZGRikgPT0gdmxhbikKLQkJCQlicmVhazsKLQkJfQorCS8qIGZpbmQgdGhlIHZsYW5pZCBvciB0aGUgZmlyc3QgZW1wdHkgc2xvdCAqLworCWZpcnN0X2VtcHR5X3Nsb3QgPSAwOwogCi0JCWlmIChyZWdpbmRleCA+PSBJWEdCRV9WTFZGX0VOVFJJRVMpIHsKLQkJCWlmIChmaXJzdF9lbXB0eV9zbG90KQotCQkJCXJlZ2luZGV4ID0gZmlyc3RfZW1wdHlfc2xvdDsKLQkJCWVsc2UgewotCQkJCWh3X2RiZyhodywgIk5vIHNwYWNlIGluIFZMVkYuXG4iKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCi0JCWlmICh2bGFuX29uKSB7Ci0JCQkvKiBzZXQgdGhlIHBvb2wgYml0ICovCi0JCQlpZiAodmluZCA8IDMyKSB7Ci0JCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgICAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7Ci0JCQkJYml0cyB8PSAoMSA8PCB2aW5kKTsKLQkJCQlJWEdCRV9XUklURV9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpLCBiaXRzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7Ci0JCQkJYml0cyB8PSAoMSA8PCB2aW5kKTsKLQkJCQlJWEdCRV9XUklURV9SRUcoaHcsCi0JCQkJICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpLCBiaXRzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGNsZWFyIHRoZSBwb29sIGJpdCAqLwotCQkJaWYgKHZpbmQgPCAzMikgewotCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJCQkgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOwotCQkJYml0cyAmPSB+KDEgPDwgdmluZCk7Ci0JCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSwgYml0cyk7Ci0JCQkJYml0cyB8PSBJWEdCRV9SRUFEX1JFRyhodywKLQkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOwotCQkJfSBlbHNlIHsKLQkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKLQkJCQliaXRzICY9IH4oMSA8PCB2aW5kKTsKLQkJCQlJWEdCRV9XUklURV9SRUcoaHcsCi0JCQkJICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpLCBiaXRzKTsKLQkJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgICAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYml0cykKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCksCi0JCQkgICAgICAgICAgICAgICAgKElYR0JFX1ZMVkZfVklFTiB8IHZsYW4pKTsKLQkJZWxzZQotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSwgMCk7CisJZm9yICh2bHZmX2luZGV4ID0gMTsgdmx2Zl9pbmRleCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgdmx2Zl9pbmRleCsrKSB7CisJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxWRih2bHZmX2luZGV4KSk7CisJCWlmICghYml0cyAmJiAhZmlyc3RfZW1wdHlfc2xvdCkKKwkJCWZpcnN0X2VtcHR5X3Nsb3QgPSB2bHZmX2luZGV4OworCQllbHNlIGlmICgoYml0cyAmIDB4MEZGRikgPT0gdmxhbikKKwkJCWJyZWFrOwogCX0KIAorCWlmICh2bHZmX2luZGV4ID49IElYR0JFX1ZMVkZfRU5UUklFUykgeworCQlpZiAoZmlyc3RfZW1wdHlfc2xvdCkKKwkJCXZsdmZfaW5kZXggPSBmaXJzdF9lbXB0eV9zbG90OworCQllbHNlIHsKKwkJCWh3X2RiZyhodywgIk5vIHNwYWNlIGluIFZMVkYuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHZsYW5fb24pIHsKKwkJLyogc2V0IHRoZSBwb29sIGJpdCAqLworCQlpZiAodmluZCA8IDMyKSB7CisJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJCSAgICAgIElYR0JFX1ZMVkZCKHZsdmZfaW5kZXggKiAyKSk7CisJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCQlJWEdCRV9WTFZGQih2bHZmX2luZGV4ICogMiksIGJpdHMpOworCQl9IGVsc2UgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCUlYR0JFX1ZMVkZCKCh2bHZmX2luZGV4ICogMikgKyAxKSk7CisJCQliaXRzIHw9ICgxIDw8ICh2aW5kIC0gMzIpKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQlJWEdCRV9WTFZGQigodmx2Zl9pbmRleCAqIDIpICsgMSksIGJpdHMpOworCQl9CisJfSBlbHNlIHsKKwkJLyogY2xlYXIgdGhlIHBvb2wgYml0ICovCisJCWlmICh2aW5kIDwgMzIpIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkJICAgICAgSVhHQkVfVkxWRkIodmx2Zl9pbmRleCAqIDIpKTsKKwkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCQlJWEdCRV9WTFZGQih2bHZmX2luZGV4ICogMiksIGJpdHMpOworCQkJYml0cyB8PSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkJSVhHQkVfVkxWRkIoKHZsdmZfaW5kZXggKiAyKSArIDEpKTsKKwkJfSBlbHNlIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQlJWEdCRV9WTFZGQigodmx2Zl9pbmRleCAqIDIpICsgMSkpOworCQkJYml0cyAmPSB+KDEgPDwgKHZpbmQgLSAzMikpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCUlYR0JFX1ZMVkZCKCh2bHZmX2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCQkgICAgICAgSVhHQkVfVkxWRkIodmx2Zl9pbmRleCAqIDIpKTsKKwkJfQorCX0KKworCWlmIChiaXRzKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRih2bHZmX2luZGV4KSwKKwkJCQkoSVhHQkVfVkxWRl9WSUVOIHwgdmxhbikpOworCQkvKiBpZiBiaXRzIGlzIG5vbi16ZXJvIHRoZW4gc29tZSBwb29scy9WRnMgYXJlIHN0aWxsCisJCSAqIHVzaW5nIHRoaXMgVkxBTiBJRC4gIEZvcmNlIHRoZSBWRlRBIGVudHJ5IHRvIG9uICovCisJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCkpOworCQliaXRzIHw9ICgxIDw8IGJpdGluZGV4KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRBKHJlZ2luZGV4KSwgYml0cyk7CisJfQorCWVsc2UKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHZsdmZfaW5kZXgpLCAwKTsKKwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtMjY1NSw0ICsyNjY0LDUgQEAKIAkubWFjX29wcyAgICAgICAgICAgICAgICA9ICZtYWNfb3BzXzgyNTk5LAogCS5lZXByb21fb3BzICAgICAgICAgICAgID0gJmVlcHJvbV9vcHNfODI1OTksCiAJLnBoeV9vcHMgICAgICAgICAgICAgICAgPSAmcGh5X29wc184MjU5OSwKKwkubWJ4X29wcyAgICAgICAgICAgICAgICA9ICZtYnhfb3BzXzgyNTk5LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggNjg4YjhjYS4uMWNlZGI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTEyNzgsMTkgKzEyNzgsMTEgQEAKIAkJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBSQVIwIGZvciBsYXRlciByZWZlcmVuY2UgKi8KIAkJaHctPm1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody0+bWFjLmFkZHIpOwogCi0JCWh3X2RiZyhodywgIiBLZWVwaW5nIEN1cnJlbnQgUkFSMCBBZGRyID0lLjJYICUuMlggJS4yWCAiLAotCQkgICAgICAgaHctPm1hYy5hZGRyWzBdLCBody0+bWFjLmFkZHJbMV0sCi0JCSAgICAgICBody0+bWFjLmFkZHJbMl0pOwotCQlod19kYmcoaHcsICIlLjJYICUuMlggJS4yWFxuIiwgaHctPm1hYy5hZGRyWzNdLAotCQkgICAgICAgaHctPm1hYy5hZGRyWzRdLCBody0+bWFjLmFkZHJbNV0pOworCQlod19kYmcoaHcsICIgS2VlcGluZyBDdXJyZW50IFJBUjAgQWRkciA9JXBNXG4iLCBody0+bWFjLmFkZHIpOwogCX0gZWxzZSB7CiAJCS8qIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MuICovCiAJCWh3X2RiZyhodywgIk92ZXJyaWRpbmcgTUFDIEFkZHJlc3MgaW4gUkFSWzBdXG4iKTsKLQkJaHdfZGJnKGh3LCAiIE5ldyBNQUMgQWRkciA9JS4yWCAlLjJYICUuMlggIiwKLQkJICAgICAgIGh3LT5tYWMuYWRkclswXSwgaHctPm1hYy5hZGRyWzFdLAotCQkgICAgICAgaHctPm1hYy5hZGRyWzJdKTsKLQkJaHdfZGJnKGh3LCAiJS4yWCAlLjJYICUuMlhcbiIsIGh3LT5tYWMuYWRkclszXSwKLQkJICAgICAgIGh3LT5tYWMuYWRkcls0XSwgaHctPm1hYy5hZGRyWzVdKTsKKwkJaHdfZGJnKGh3LCAiIE5ldyBNQUMgQWRkciA9JXBNXG4iLCBody0+bWFjLmFkZHIpOwogCiAJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggMGJkNDlkMy4uYTAxMDdiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtMTg2NywxMSArMTg2NywyMiBAQAogCQlpZiAoaXhnYmVfaW50cl90ZXN0KGFkYXB0ZXIsICZkYXRhWzJdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKKwkJLyogSWYgU1JJT1Ygb3IgVk1EcSBpcyBlbmFibGVkIHRoZW4gc2tpcCBNQUMKKwkJICogbG9vcGJhY2sgZGlhZ25vc3RpYy4gKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8CisJCQkJICAgICAgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7CisJCQlEUFJJTlRLKEhXLCBJTkZPLCAiU2tpcCBNQUMgbG9vcGJhY2sgZGlhZ25vc3RpYyBpbiBWVCAiCisJCQkJIm1vZGVcbiIpOworCQkJZGF0YVszXSA9IDA7CisJCQlnb3RvIHNraXBfbG9vcGJhY2s7CisJCX0KKwogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAkJRFBSSU5USyhIVywgSU5GTywgImxvb3BiYWNrIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQlpZiAoaXhnYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCAmZGF0YVszXSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCitza2lwX2xvb3BiYWNrOgogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAogCQljbGVhcl9iaXQoX19JWEdCRV9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDJhZDc1NGMuLjgxOTcxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJpeGdiZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgorI2luY2x1ZGUgIml4Z2JlX3NyaW92LmgiCiAKIGNoYXIgaXhnYmVfZHJpdmVyX25hbWVbXSA9ICJpeGdiZSI7CiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfc3RyaW5nW10gPQpAQCAtNjcsNyArNjgsNyBAQAogICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCiAgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXhnYmVfcGNpX3RibCkgPSB7CiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTgpLAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUKSwKQEAgLTEyNCw2ICsxMjUsMTMgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF92ZnM7Cittb2R1bGVfcGFyYW0obWF4X3ZmcywgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF92ZnMsICJNYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBhbGxvY2F0ZSAiCisgICAgICAgICAgICAgICAgICJwZXIgcGh5c2ljYWwgZnVuY3Rpb24iKTsKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xMzEsNiArMTM5LDQxIEBACiAKICNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCAzCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9kaXNhYmxlX3NyaW92KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGdjcjsKKwl1MzIgZ3BpZTsKKwl1MzIgdm1kY3RsOworCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiBkaXNhYmxlIGlvdiBhbmQgYWxsb3cgdGltZSBmb3IgdHJhbnNhY3Rpb25zIHRvIGNsZWFyICovCisJcGNpX2Rpc2FibGVfc3Jpb3YoYWRhcHRlci0+cGRldik7CisjZW5kaWYKKworCS8qIHR1cm4gb2ZmIGRldmljZSBJT1YgbW9kZSAqLworCWdjciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HQ1JfRVhUKTsKKwlnY3IgJj0gfihJWEdCRV9HQ1JfRVhUX1NSSU9WKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dDUl9FWFQsIGdjcik7CisJZ3BpZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUElFKTsKKwlncGllICY9IH5JWEdCRV9HUElFX1ZUTU9ERV9NQVNLOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisKKwkvKiBzZXQgZGVmYXVsdCBwb29sIGJhY2sgdG8gMCAqLworCXZtZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCXZtZGN0bCAmPSB+SVhHQkVfVlRfQ1RMX1BPT0xfTUFTSzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZUX0NUTCwgdm1kY3RsKTsKKworCS8qIHRha2UgYSBicmVhdGhlciB0aGVuIGNsZWFuIHVwIGRyaXZlciBkYXRhICovCisJbXNsZWVwKDEwMCk7CisJaWYgKGFkYXB0ZXItPnZmaW5mbykKKwkJa2ZyZWUoYWRhcHRlci0+dmZpbmZvKTsKKwlhZGFwdGVyLT52ZmluZm8gPSBOVUxMOworCisJYWRhcHRlci0+bnVtX3ZmcyA9IDA7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKK30KKwogc3RhdGljIHZvaWQgaXhnYmVfcmVsZWFzZV9od19jb250cm9sKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBjdHJsX2V4dDsKQEAgLTEwMjUsNyArMTA2OCwxMiBAQAogCiAJLyogc2V0IHVwIHRvIGF1dG9jbGVhciB0aW1lciwgYW5kIHRoZSB2ZWN0b3JzICovCiAJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7Ci0JbWFzayAmPSB+KElYR0JFX0VJTVNfT1RIRVIgfCBJWEdCRV9FSU1TX0xTQyk7CisJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCW1hc2sgJj0gfihJWEdCRV9FSU1TX09USEVSIHwKKwkJCSAgSVhHQkVfRUlNU19NQUlMQk9YIHwKKwkJCSAgSVhHQkVfRUlNU19MU0MpOworCWVsc2UKKwkJbWFzayAmPSB+KElYR0JFX0VJTVNfT1RIRVIgfCBJWEdCRV9FSU1TX0xTQyk7CiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlBQywgbWFzayk7CiB9CiAKQEAgLTEyNTQsNiArMTMwMiw5IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCisJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX01BSUxCT1gpCisJCWl4Z2JlX21zZ190YXNrKGFkYXB0ZXIpOworCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKQEAgLTE3NjgsNiArMTgxOSw4IEBACiAJCW1hc2sgfD0gSVhHQkVfRUlNU19FQ0M7CiAJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMTsKIAkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAyOworCQlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJCW1hc2sgfD0gSVhHQkVfRUlNU19NQUlMQk9YOwogCX0KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFIHx8CiAJICAgIGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkKQEAgLTE3NzYsNiArMTgyOSwxMSBAQAogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOwogCWl4Z2JlX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIsIH4wKTsKIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCisJaWYgKGFkYXB0ZXItPm51bV92ZnMgPiAzMikgeworCQl1MzIgZWl0cnNlbCA9ICgxIDw8IChhZGFwdGVyLT5udW1fdmZzIC0gMzIpKSAtIDE7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFJTRUwsIGVpdHJzZWwpOworCX0KIH0KIAogLyoqCkBAIC0xOTA1LDYgKzE5NjMsOCBAQAogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCAweEZGRkYwMDAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQ19FWCgwKSwgfjApOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDEpLCB+MCk7CisJCWlmIChhZGFwdGVyLT5udW1fdmZzID4gMzIpCisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSU0VMLCAwKTsKIAl9CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewpAQCAtMTk4OSwxOCArMjA0OSwzMiBAQAogCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewogCQl1MzIgcnR0ZGNzOworCQl1MzIgbWFzazsKIAogCQkvKiBkaXNhYmxlIHRoZSBhcmJpdGVyIHdoaWxlIHNldHRpbmcgTVRRQyAqLwogCQlydHRkY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKIAkJcnR0ZGNzIHw9IElYR0JFX1JUVERDU19BUkJESVM7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCBydHRkY3MpOwogCi0JCS8qIFdlIGVuYWJsZSA4IHRyYWZmaWMgY2xhc3NlcywgRENCIG9ubHkgKi8KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRRQywgKElYR0JFX01UUUNfUlRfRU5BIHwKLQkJCSAgICAgICAgICAgICAgICBJWEdCRV9NVFFDXzhUQ184VFEpKTsKLQkJZWxzZQorCQkvKiBzZXQgdHJhbnNtaXQgcG9vbCBsYXlvdXQgKi8KKwkJbWFzayA9IChJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQgfCBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKTsKKwkJc3dpdGNoIChhZGFwdGVyLT5mbGFncyAmIG1hc2spIHsKKworCQljYXNlIChJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpOgorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLAorCQkJCQkoSVhHQkVfTVRRQ19WVF9FTkEgfCBJWEdCRV9NVFFDXzY0VkYpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgorCQkJLyogV2UgZW5hYmxlIDggdHJhZmZpYyBjbGFzc2VzLCBEQ0Igb25seSAqLworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLAorCQkJCSAgICAgIChJWEdCRV9NVFFDX1JUX0VOQSB8IElYR0JFX01UUUNfOFRDXzhUUSkpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRRQywgSVhHQkVfTVRRQ182NFFfMVBCKTsKKwkJCWJyZWFrOworCQl9CiAKIAkJLyogcmUtZWFibGUgdGhlIGFyYml0ZXIgKi8KIAkJcnR0ZGNzICY9IH5JWEdCRV9SVFREQ1NfQVJCRElTOwpAQCAtMjA1OSwxMiArMjEzMywxNiBAQAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIAkJCQkgfCBJWEdCRV9GTEFHX0RDQl9FTkFCTEVECiAjZW5kaWYKKwkJCQkgfCBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQKIAkJCQkpOwogCiAJc3dpdGNoIChtYXNrKSB7CiAJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6CiAJCW1ycWMgPSBJWEdCRV9NUlFDX1JTU0VOOwogCQlicmVhazsKKwljYXNlIChJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpOgorCQltcnFjID0gSVhHQkVfTVJRQ19WTURRRU47CisJCWJyZWFrOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIAljYXNlIChJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKToKIAkJbXJxYyA9IElYR0JFX01SUUNfUlQ4VENFTjsKQEAgLTIxNDUsNyArMjIyMyw5IEBACiAJaW50IHJ4X2J1Zl9sZW47CiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCi0JYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCS8qIERvIG5vdCB1c2UgcGFja2V0IHNwbGl0IGlmIHdlJ3JlIGluIFNSLUlPViBNb2RlICovCisJaWYgKCFhZGFwdGVyLT5udW1fdmZzKQorCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CiAKIAkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CkBAIC0yMTU3LDcgKzIyMzcsOSBAQAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0lQVjRIRFIgfAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0lQVjZIRFIgfAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0wySERSOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QU1JUWVBFKDApLCBwc3J0eXBlKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkJSVhHQkVfUFNSVFlQRShhZGFwdGVyLT5udW1fdmZzKSwKKwkJCQkJcHNydHlwZSk7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCkgJiYKQEAgLTIyNDMsNiArMjMyNSwzMCBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEUlhDVEwsIHJkcnhjdGwpOwogCX0KIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkgeworCQl1MzIgdnRfcmVnX2JpdHM7CisJCXUzMiByZWdfb2Zmc2V0LCB2Zl9zaGlmdDsKKwkJdTMyIHZtZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCQl2dF9yZWdfYml0cyA9IElYR0JFX1ZNRF9DVExfVk1EUV9FTgorCQkJfCBJWEdCRV9WVF9DVExfUkVQTEVOOworCQl2dF9yZWdfYml0cyB8PSAoYWRhcHRlci0+bnVtX3ZmcyA8PAorCQkJCUlYR0JFX1ZUX0NUTF9QT09MX1NISUZUKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVF9DVEwsIHZtZGN0bCB8IHZ0X3JlZ19iaXRzKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCAwKTsKKworCQl2Zl9zaGlmdCA9IGFkYXB0ZXItPm51bV92ZnMgJSAzMjsKKwkJcmVnX29mZnNldCA9IGFkYXB0ZXItPm51bV92ZnMgLyAzMjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDApLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDEpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDApLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDEpLCAwKTsKKwkJLyogRW5hYmxlIG9ubHkgdGhlIFBGJ3MgcG9vbCBmb3IgVHgvUnggKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKHJlZ19vZmZzZXQpLCAoMSA8PCB2Zl9zaGlmdCkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEUocmVnX29mZnNldCksICgxIDw8IHZmX3NoaWZ0KSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZEVFhHU1dDLCBJWEdCRV9QRkRUWEdTV0NfVlRfTEJFTik7CisJCWl4Z2JlX3NldF92bW9scihodywgYWRhcHRlci0+bnVtX3Zmcyk7CisJfQorCiAJLyogUHJvZ3JhbSBNUlFDIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHF1ZXVlcyAqLwogCW1ycWMgPSBpeGdiZV9zZXR1cF9tcnFjKGFkYXB0ZXIpOwogCkBAIC0yMjc0LDYgKzIzODAsMjAgQEAKIAl9CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKIAorCWlmIChhZGFwdGVyLT5udW1fdmZzKSB7CisJCXUzMiByZWc7CisKKwkJLyogTWFwIFBGIE1BQyBhZGRyZXNzIGluIFJBUiBFbnRyeSAwIHRvIGZpcnN0IHBvb2wKKwkJICogZm9sbG93aW5nIFZGcyAqLworCQlody0+bWFjLm9wcy5zZXRfdm1kcShodywgMCwgYWRhcHRlci0+bnVtX3Zmcyk7CisKKwkJLyogU2V0IHVwIFZGIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHNlbGVjdGVkIFZUIE1vZGUsIGkuZS4KKwkJICogNjQgVkZzIGZvciBTUi1JT1YgKi8KKwkJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dDUl9FWFQpOworCQlyZWcgfD0gSVhHQkVfR0NSX0VYVF9TUklPVjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HQ1JfRVhULCByZWcpOworCX0KKwogCXJ4Y3N1bSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENTVU0pOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8fApAQCAtMjQxNCw3ICsyNTM0LDcgQEAKICAqIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgaGFyZHdhcmUgZm9yIHByb3BlciB1bmljYXN0LCBtdWx0aWNhc3QgYW5kCiAgKiBwcm9taXNjdW91cyBtb2RlLgogICoqLwotc3RhdGljIHZvaWQgaXhnYmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3ZvaWQgaXhnYmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTI0NTQsNiArMjU3NCw4IEBACiAJCWFkZHJfbGlzdCA9IG5ldGRldi0+bWNfbGlzdC0+ZG1pX2FkZHI7CiAJaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdChodywgYWRkcl9saXN0LCBhZGRyX2NvdW50LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfYWRkcl9saXN0X2l0cik7CisJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCWl4Z2JlX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfbmFwaV9lbmFibGVfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjcxNCw2ICsyODM2LDEwIEBACiAJCQkvKiBNU0kgb25seSAqLwogCQkJZ3BpZSA9IDA7CiAJCX0KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKSB7CisJCQlncGllICY9IH5JWEdCRV9HUElFX1ZUTU9ERV9NQVNLOworCQkJZ3BpZSB8PSBJWEdCRV9HUElFX1ZUTU9ERV82NDsKKwkJfQogCQkvKiBYWFg6IHRvIGludGVycnVwdCBpbW1lZGlhdGVseSBmb3IgRUlDUyB3cml0ZXMsIGVuYWJsZSB0aGlzICovCiAJCS8qIGdwaWUgfD0gSVhHQkVfR1BJRV9FSU1FTjsgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HUElFLCBncGllKTsKQEAgLTI3ODgsNiArMjkxNCwxOCBAQAogCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlpbnQgd2FpdF9sb29wID0gMTA7CisJCQkvKiBwb2xsIGZvciBUeCBFbmFibGUgcmVhZHkgKi8KKwkJCWRvIHsKKwkJCQltc2xlZXAoMSk7CisJCQkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CisJCQl9IHdoaWxlICgtLXdhaXRfbG9vcCAmJgorCQkJICAgICAgICAgISh0eGRjdGwgJiBJWEdCRV9UWERDVExfRU5BQkxFKSk7CisJCQlpZiAoIXdhaXRfbG9vcCkKKwkJCQlEUFJJTlRLKERSViwgRVJSLCAiQ291bGQgbm90IGVuYWJsZSAiCisJCQkJICAgICAgICAiVHggUXVldWUgJWRcbiIsIGopOworCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7CkBAIC0yOTIzLDcgKzMwNjEsOCBAQAogCX0KIAogCS8qIHJlcHJvZ3JhbSB0aGUgUkFSWzBdIGluIGNhc2UgdXNlciBjaGFuZ2VkIGl0LiAqLwotCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKwlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIGFkYXB0ZXItPm51bV92ZnMsCisJCQkgICAgSVhHQkVfUkFIX0FWKTsKIH0KIAogLyoqCkBAIC0zMjkxLDYgKzM0MzAsMTkgQEAKIH0KIAogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KKy8qKgorICogaXhnYmVfc2V0X3NyaW92X3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBJT1YgdXNlCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIElPViBkb2Vzbid0IGFjdHVhbGx5IHVzZSBhbnl0aGluZywgc28ganVzdCBOQUsgdGhlCisgKiByZXF1ZXN0IGZvciBub3cgYW5kIGxldCB0aGUgb3RoZXIgcXVldWUgcm91dGluZXMKKyAqIGZpZ3VyZSBvdXQgd2hhdCB0byBkby4KKyAqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3NldF9zcmlvdl9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogaXhnYmVfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGFudAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKQEAgLTMzMDQsNiArMzQ1NiwxNSBAQAogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfc2V0X251bV9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJLyogU3RhcnQgd2l0aCBiYXNlIGNhc2UgKi8KKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fcnhfcG9vbHMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXNfcGVyX3Bvb2wgPSAxOworCisJaWYgKGl4Z2JlX3NldF9zcmlvdl9xdWV1ZXMoYWRhcHRlcikpCisJCXJldHVybjsKKwogI2lmZGVmIElYR0JFX0ZDT0UKIAlpZiAoaXhnYmVfc2V0X2Zjb2VfcXVldWVzKGFkYXB0ZXIpKQogCQlnb3RvIGRvbmU7CkBAIC0zNTc1LDYgKzM3MzYsMjQgQEAKIAogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIC8qKgorICogaXhnYmVfY2FjaGVfcmluZ19zcmlvdiAtIERlc2NyaXB0b3IgcmluZyB0byByZWdpc3RlciBtYXBwaW5nIGZvciBzcmlvdgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBTUi1JT1YgZG9lc24ndCB1c2UgYW55IGRlc2NyaXB0b3IgcmluZ3MgYnV0IGNoYW5nZXMgdGhlIGRlZmF1bHQgaWYKKyAqIG5vIG90aGVyIG1hcHBpbmcgaXMgdXNlZC4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9jYWNoZV9yaW5nX3NyaW92KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWFkYXB0ZXItPnJ4X3JpbmdbMF0ucmVnX2lkeCA9IGFkYXB0ZXItPm51bV92ZnMgKiAyOworCWFkYXB0ZXItPnR4X3JpbmdbMF0ucmVnX2lkeCA9IGFkYXB0ZXItPm51bV92ZnMgKiAyOworCWlmIChhZGFwdGVyLT5udW1fdmZzKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworLyoqCiAgKiBpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCiAgKgpAQCAtMzU5MSw2ICszNzcwLDkgQEAKIAlhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHggPSAwOwogCWFkYXB0ZXItPnR4X3JpbmdbMF0ucmVnX2lkeCA9IDA7CiAKKwlpZiAoaXhnYmVfY2FjaGVfcmluZ19zcmlvdihhZGFwdGVyKSkKKwkJcmV0dXJuOworCiAjaWZkZWYgSVhHQkVfRkNPRQogCWlmIChpeGdiZV9jYWNoZV9yaW5nX2Zjb2UoYWRhcHRlcikpCiAJCXJldHVybjsKQEAgLTM3MDAsNiArMzg4Miw5IEBACiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEU7CiAJYWRhcHRlci0+YXRyX3NhbXBsZV9yYXRlID0gMDsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpCisJCWl4Z2JlX2Rpc2FibGVfc3Jpb3YoYWRhcHRlcik7CisKIAlpeGdiZV9zZXRfbnVtX3F1ZXVlcyhhZGFwdGVyKTsKIAogCWVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwpAQCAtNTQ4NCw3ICs1NjY5LDggQEAKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KGh3LT5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDAsIElYR0JFX1JBSF9BVik7CisJaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5hZGRyLCBhZGFwdGVyLT5udW1fdmZzLAorCQkJICAgIElYR0JFX1JBSF9BVik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU2MTcsNiArNTgwMyw2MSBAQAogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIH07CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBpeGdiZV9wcm9iZV92ZihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppaSkKK3sKKyNpZmRlZiBDT05GSUdfUENJX0lPVgorCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGVycjsKKworCWlmIChody0+bWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk5RUIgfHwgIW1heF92ZnMpCisJCXJldHVybjsKKworCS8qIFRoZSA4MjU5OSBzdXBwb3J0cyB1cCB0byA2NCBWRnMgcGVyIHBoeXNpY2FsIGZ1bmN0aW9uCisJICogYnV0IHRoaXMgaW1wbGVtZW50YXRpb24gbGltaXRzIGFsbG9jYXRpb24gdG8gNjMgc28gdGhhdAorCSAqIGJhc2ljIG5ldHdvcmtpbmcgcmVzb3VyY2VzIGFyZSBzdGlsbCBhdmFpbGFibGUgdG8gdGhlCisJICogcGh5c2ljYWwgZnVuY3Rpb24KKwkgKi8KKwlhZGFwdGVyLT5udW1fdmZzID0gKG1heF92ZnMgPiA2MykgPyA2MyA6IG1heF92ZnM7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEOworCWVyciA9IHBjaV9lbmFibGVfc3Jpb3YoYWRhcHRlci0+cGRldiwgYWRhcHRlci0+bnVtX3Zmcyk7CisJaWYgKGVycikgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsCisJCQkiRmFpbGVkIHRvIGVuYWJsZSBQQ0kgc3Jpb3Y6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9ub3ZmczsKKwl9CisJLyogSWYgY2FsbCB0byBlbmFibGUgVkZzIHN1Y2NlZWRlZCB0aGVuIGFsbG9jYXRlIG1lbW9yeQorCSAqIGZvciBwZXIgVkYgY29udHJvbCBzdHJ1Y3R1cmVzLgorCSAqLworCWFkYXB0ZXItPnZmaW5mbyA9CisJCWtjYWxsb2MoYWRhcHRlci0+bnVtX3ZmcywKKwkJCXNpemVvZihzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkYXB0ZXItPnZmaW5mbykgeworCQkvKiBOb3cgdGhhdCB3ZSdyZSBzdXJlIFNSLUlPViBpcyBlbmFibGVkCisJCSAqIGFuZCBtZW1vcnkgYWxsb2NhdGVkIHNldCB1cCB0aGUgbWFpbGJveCBwYXJhbWV0ZXJzCisJCSAqLworCQlpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoaHcpOworCQltZW1jcHkoJmh3LT5tYngub3BzLCBpaS0+bWJ4X29wcywKKwkJICAgICAgIHNpemVvZihody0+bWJ4Lm9wcykpOworCisJCS8qIERpc2FibGUgUlNDIHdoZW4gaW4gU1ItSU9WIG1vZGUgKi8KKwkJYWRhcHRlci0+ZmxhZ3MyICY9IH4oSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUgfAorCQkJCSAgICAgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpOworCQlyZXR1cm47CisJfQorCisJLyogT2ggb2ggKi8KKwlEUFJJTlRLKFBST0JFLCBFUlIsCisJCSJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBWRiAiCisJCSJEYXRhIFN0b3JhZ2UgLSBTUklPViBkaXNhYmxlZFxuIik7CisJcGNpX2Rpc2FibGVfc3Jpb3YoYWRhcHRlci0+cGRldik7CisKK2Vycl9ub3ZmczoKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19TUklPVl9FTkFCTEVEOworCWFkYXB0ZXItPm51bV92ZnMgPSAwOworI2VuZGlmIC8qIENPTkZJR19QQ0lfSU9WICovCit9CisKIC8qKgogICogaXhnYmVfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZQogICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CkBAIC01NzkxLDYgKzYwMzIsOCBAQAogCQlnb3RvIGVycl9zd19pbml0OwogCX0KIAorCWl4Z2JlX3Byb2JlX3ZmKGFkYXB0ZXIsIGlpKTsKKwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKIAkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9JUF9DU1VNIHwKIAkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9IV19WTEFOX1RYIHwKQEAgLTU4MTEsNiArNjA1NCw5IEBACiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKQorCQlhZGFwdGVyLT5mbGFncyAmPSB+KElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgfAorCQkJCSAgICBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKTsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIApAQCAtNTkzNyw2ICs2MTgzLDEzIEBACiAJCWl4Z2JlX3NldHVwX2RjYShhZGFwdGVyKTsKIAl9CiAjZW5kaWYKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgSU5GTywgIklPViBpcyBlbmFibGVkIHdpdGggJWQgVkZzXG4iLAorCQkJYWRhcHRlci0+bnVtX3Zmcyk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdmZzOyBpKyspCisJCQlpeGdiZV92Zl9jb25maWd1cmF0aW9uKHBkZXYsIChpIHwgMHgxMDAwMDAwMCkpOworCX0KKwogCS8qIGFkZCBzYW4gbWFjIGFkZHIgdG8gbmV0ZGV2ICovCiAJaXhnYmVfYWRkX3Nhbm1hY19uZXRkZXYobmV0ZGV2KTsKIApAQCAtNTk0OSw2ICs2MjAyLDggQEAKIAlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogZXJyX3N3X2luaXQ6CiBlcnJfZWVwcm9tOgorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkKKwkJaXhnYmVfZGlzYWJsZV9zcmlvdihhZGFwdGVyKTsKIAljbGVhcl9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CkBAIC02MDE3LDYgKzYyNzIsOSBAQAogCWlmIChuZXRkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkKKwkJaXhnYmVfZGlzYWJsZV9zcmlvdihhZGFwdGVyKTsKKwogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWY5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYwpAQCAtMCwwICsxLDQ3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgorI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgorI2luY2x1ZGUgIml4Z2JlX21ieC5oIgorCisvKioKKyAqICBpeGdiZV9yZWFkX21ieCAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gcmVhZAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bHkgcmVhZCBtZXNzYWdlIGZyb20gYnVmZmVyCisgKiovCitzMzIgaXhnYmVfcmVhZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggKi8KKwlpZiAoc2l6ZSA+IG1ieC0+c2l6ZSkKKwkJc2l6ZSA9IG1ieC0+c2l6ZTsKKworCWlmIChtYngtPm9wcy5yZWFkKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzMzIgaXhnYmVfd3JpdGVfbWJ4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChzaXplID4gbWJ4LT5zaXplKQorCQlyZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWVsc2UgaWYgKG1ieC0+b3BzLndyaXRlKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19mb3JfbXNnIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgbWFpbAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGl4Z2JlX2NoZWNrX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfbXNnKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19mb3JfYWNrIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgQUNLCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaXhnYmVfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9yc3QgLSBjaGVja3MgdG8gc2VlIGlmIG90aGVyIHNpZGUgaGFzIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaXhnYmVfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QpCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfcnN0KGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3BvbGxfZm9yX21zZyAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICoqLworc3RhdGljIHMzMiBpeGdiZV9wb2xsX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIWNvdW50ZG93biB8fCAhbWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoY291bnRkb3duICYmIG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCkpIHsKKwkJY291bnRkb3duLS07CisJCWlmICghY291bnRkb3duKQorCQkJYnJlYWs7CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KKworCS8qIGlmIHdlIGZhaWxlZCwgYWxsIGZ1dHVyZSBwb3N0ZWQgbWVzc2FnZXMgZmFpbCB1bnRpbCByZXNldCAqLworCWlmICghY291bnRkb3duKQorCQltYngtPnRpbWVvdXQgPSAwOworb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogSVhHQkVfRVJSX01CWDsKK30KKworLyoqCisgKiAgaXhnYmVfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3BvbGxfZm9yX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghY291bnRkb3duIHx8ICFtYngtPm9wcy5jaGVja19mb3JfYWNrKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChjb3VudGRvd24gJiYgbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKSkgeworCQljb3VudGRvd24tLTsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorCisJLyogaWYgd2UgZmFpbGVkLCBhbGwgZnV0dXJlIHBvc3RlZCBtZXNzYWdlcyBmYWlsIHVudGlsIHJlc2V0ICovCisJaWYgKCFjb3VudGRvd24pCisJCW1ieC0+dGltZW91dCA9IDA7CitvdXQ6CisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiBJWEdCRV9FUlJfTUJYOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZAorICogIGNvcGllZCBpdCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFtYngtPm9wcy5yZWFkKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9wb2xsX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwkvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlciBhbmQKKyAqICByZWNlaXZlZCBhbiBhY2sgdG8gdGhhdCBtZXNzYWdlIHdpdGhpbiBkZWxheSAqIHRpbWVvdXQgcGVyaW9kCisgKiovCitzMzIgaXhnYmVfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogZXhpdCBpZiBlaXRoZXIgd2UgY2FuJ3Qgd3JpdGUgb3IgdGhlcmUgaXNuJ3QgYSBkZWZpbmVkIHRpbWVvdXQgKi8KKwlpZiAoIW1ieC0+b3BzLndyaXRlIHx8ICFtYngtPnRpbWVvdXQpCisJCWdvdG8gb3V0OworCisJLyogc2VuZCBtc2cgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCS8qIGlmIG1zZyBzZW50IHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhbiBhY2sgKi8KKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBpeGdiZV9wb2xsX2Zvcl9hY2soaHcsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2luaXRfbWJ4X29wc19nZW5lcmljIC0gSW5pdGlhbGl6ZSBNQiBmdW5jdGlvbiBwb2ludGVycworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFNldHVwIHRoZSBtYWlsYm94IHJlYWQgYW5kIHdyaXRlIG1lc3NhZ2UgZnVuY3Rpb24gcG9pbnRlcnMKKyAqKi8KK3ZvaWQgaXhnYmVfaW5pdF9tYnhfb3BzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJbWJ4LT5vcHMucmVhZF9wb3N0ZWQgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYng7CisJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaXhnYmVfd3JpdGVfcG9zdGVkX21ieDsKK30KKworc3RhdGljIHMzMiBpeGdiZV9jaGVja19mb3JfYml0X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBtYXNrLCBzMzIgaW5kZXgpCit7CisJdTMyIG1idmZpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUJWRklDUihpbmRleCkpOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChtYnZmaWNyICYgbWFzaykgeworCQlyZXRfdmFsID0gMDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NQlZGSUNSKGluZGV4KSwgbWFzayk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9tc2dfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgc2VudCBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpeGdiZV9jaGVja19mb3JfbXNnX3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCXMzMiBpbmRleCA9IElYR0JFX01CVkZJQ1JfSU5ERVgodmZfbnVtYmVyKTsKKwl1MzIgdmZfYml0ID0gdmZfbnVtYmVyICUgMTY7CisKKwlpZiAoIWl4Z2JlX2NoZWNrX2Zvcl9iaXRfcGYoaHcsIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxIDw8IHZmX2JpdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJlcXMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfY2hlY2tfZm9yX2Fja19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBBQ0tlZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2hlY2tfZm9yX2Fja19wZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKwlzMzIgaW5kZXggPSBJWEdCRV9NQlZGSUNSX0lOREVYKHZmX251bWJlcik7CisJdTMyIHZmX2JpdCA9IHZmX251bWJlciAlIDE2OworCisJaWYgKCFpeGdiZV9jaGVja19mb3JfYml0X3BmKGh3LCBJWEdCRV9NQlZGSUNSX1ZGQUNLX1ZGMSA8PCB2Zl9iaXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5hY2tzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9yc3RfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2NoZWNrX2Zvcl9yc3RfcGYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcmVnX29mZnNldCA9ICh2Zl9udW1iZXIgPCAzMikgPyAwIDogMTsKKwl1MzIgdmZfc2hpZnQgPSB2Zl9udW1iZXIgJSAzMjsKKwl1MzIgdmZscmUgPSAwOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXZmbHJlID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTFJFKHJlZ19vZmZzZXQpKTsKKworCWlmICh2ZmxyZSAmICgxIDw8IHZmX3NoaWZ0KSkgeworCQlyZXRfdmFsID0gMDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRkxSRUMocmVnX29mZnNldCksICgxIDw8IHZmX3NoaWZ0KSk7CisJCWh3LT5tYnguc3RhdHMucnN0cysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYgLSBvYnRhaW4gbWFpbGJveCBsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJuIFNVQ0NFU1MgaWYgd2Ugb2J0YWluZWQgdGhlIG1haWxib3ggbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisJdTMyIHAydl9tYWlsYm94OworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZNQUlMQk9YKHZmX251bWJlciksIElYR0JFX1BGTUFJTEJPWF9QRlUpOworCisJLyogcmVzZXJ2ZSBtYWlsYm94IGZvciB2ZiB1c2UgKi8KKwlwMnZfbWFpbGJveCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QRk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKHAydl9tYWlsYm94ICYgSVhHQkVfUEZNQUlMQk9YX1BGVSkKKwkJcmV0X3ZhbCA9IDA7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfbWJ4X3BmIC0gUGxhY2VzIGEgbWVzc2FnZSBpbiB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfd3JpdGVfbWJ4X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWw7CisJdTE2IGk7CisKKwkvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi8KKwlyZXRfdmFsID0gaXhnYmVfb2J0YWluX21ieF9sb2NrX3BmKGh3LCB2Zl9udW1iZXIpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dF9ub193cml0ZTsKKworCS8qIGZsdXNoIG1zZyBhbmQgYWNrcyBhcyB3ZSBhcmUgb3ZlcndyaXRpbmcgdGhlIG1lc3NhZ2UgYnVmZmVyICovCisJaXhnYmVfY2hlY2tfZm9yX21zZ19wZihodywgdmZfbnVtYmVyKTsKKwlpeGdiZV9jaGVja19mb3JfYWNrX3BmKGh3LCB2Zl9udW1iZXIpOworCisJLyogY29weSB0aGUgY2FsbGVyIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUdfQVJSQVkoaHcsIElYR0JFX1BGTUJNRU0odmZfbnVtYmVyKSwgaSwgbXNnW2ldKTsKKworCS8qIEludGVycnVwdCBWRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGFuZCByZWxlYXNlIGJ1ZmZlciovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QRk1BSUxCT1godmZfbnVtYmVyKSwgSVhHQkVfUEZNQUlMQk9YX1NUUyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfdHgrKzsKKworb3V0X25vX3dyaXRlOgorCXJldHVybiByZXRfdmFsOworCit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfbWJ4X3BmIC0gUmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggYnVmZmVyIHRvIHRoZSBjYWxsZXIncworICogIG1lbW9yeSBidWZmZXIuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlcmUgd2FzCisgKiAgYSBtZXNzYWdlIGR1ZSB0byBhIFZGIHJlcXVlc3Qgc28gbm8gcG9sbGluZyBmb3IgbWVzc2FnZSBpcyBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfbWJ4X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgaTsKKworCS8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqLworCXJldF92YWwgPSBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYoaHcsIHZmX251bWJlcik7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0X25vX3JlYWQ7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQltc2dbaV0gPSBJWEdCRV9SRUFEX1JFR19BUlJBWShodywgSVhHQkVfUEZNQk1FTSh2Zl9udW1iZXIpLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBtZXNzYWdlIGFuZCByZWxlYXNlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZNQUlMQk9YKHZmX251bWJlciksIElYR0JFX1BGTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKK291dF9ub19yZWFkOgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYgLSBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBJbml0aWFsaXplcyB0aGUgaHctPm1ieCBzdHJ1Y3QgdG8gY29ycmVjdCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqLwordm9pZCBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0dXJuOworCisJbWJ4LT50aW1lb3V0ID0gMDsKKwltYngtPnVzZWNfZGVsYXkgPSAwOworCisJbWJ4LT5zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisKKwltYngtPnN0YXRzLm1zZ3NfdHggPSAwOworCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJbWJ4LT5zdGF0cy5yZXFzID0gMDsKKwltYngtPnN0YXRzLmFja3MgPSAwOworCW1ieC0+c3RhdHMucnN0cyA9IDA7Cit9CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBtYnhfb3BzXzgyNTk5ID0geworCS5yZWFkICAgICAgICAgICAgICAgICAgID0gaXhnYmVfcmVhZF9tYnhfcGYsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSBpeGdiZV93cml0ZV9tYnhfcGYsCisJLnJlYWRfcG9zdGVkICAgICAgICAgICAgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYngsCisJLndyaXRlX3Bvc3RlZCAgICAgICAgICAgPSBpeGdiZV93cml0ZV9wb3N0ZWRfbWJ4LAorCS5jaGVja19mb3JfbXNnICAgICAgICAgID0gaXhnYmVfY2hlY2tfZm9yX21zZ19wZiwKKwkuY2hlY2tfZm9yX2FjayAgICAgICAgICA9IGl4Z2JlX2NoZWNrX2Zvcl9hY2tfcGYsCisJLmNoZWNrX2Zvcl9yc3QgICAgICAgICAgPSBpeGdiZV9jaGVja19mb3JfcnN0X3BmLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdhYjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVhHQkVfTUJYX0hfCisjZGVmaW5lIF9JWEdCRV9NQlhfSF8KKworI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKKworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfU0laRSAgICAgICAgMTYgLyogMTYgMzIgYml0IHdvcmRzIC0gNjQgYnl0ZXMgKi8KKyNkZWZpbmUgSVhHQkVfRVJSX01CWCAgICAgICAgICAgICAgIC0xMDAKKworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1ggICAgICAgICAgICAgMHgwMDJGQworI2RlZmluZSBJWEdCRV9WRk1CTUVNICAgICAgICAgICAgICAgMHgwMDIwMAorCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWCh4KSAgICAgICAgICAoMHgwNEIwMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1BGTUJNRU0odmZuKSAgICAgICAgICAoMHgxMzAwMCArICg2NCAqIHZmbikpCisKKyNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9WRlUgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9QRlUgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9SVkZVICAweDAwMDAwMDEwIC8qIFJlc2V0IFZGVSAtIHVzZWQgd2hlbiBWRiBzdHVjayAqLworCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfTUFTSyAweDAwMDBGRkZGIC8qIGJpdHMgZm9yIFZGIG1lc3NhZ2VzICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxICAweDAwMDAwMDAxIC8qIGJpdCBmb3IgVkYgMSBtZXNzYWdlICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZBQ0tfTUFTSyAweEZGRkYwMDAwIC8qIGJpdHMgZm9yIFZGIGFja3MgKi8KKyNkZWZpbmUgSVhHQkVfTUJWRklDUl9WRkFDS19WRjEgIDB4MDAwMTAwMDAgLyogYml0IGZvciBWRiAxIGFjayAqLworCisKKy8qIElmIGl0J3MgYSBJWEdCRV9WRl8qIG1zZyB0aGVuIGl0IG9yaWdpbmF0ZXMgaW4gdGhlIFZGIGFuZCBpcyBzZW50IHRvIHRoZQorICogUEYuICBUaGUgcmV2ZXJzZSBpcyB0cnVlIGlmIGl0IGlzIElYR0JFX1BGXyouCisgKiBNZXNzYWdlIEFDSydzIGFyZSB0aGUgdmFsdWUgb3InZCB3aXRoIDB4RjAwMDAwMDAKKyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0FDSyAgICAgIDB4ODAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBBQ0sgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHVFlQRV9OQUNLICAgICAweDQwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgdG8gc2VuZCByZXF1ZXN0cyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dJTkZPX1NISUZUICAgIDE2CisvKiBiaXRzIDIzOjE2IGFyZSB1c2VkIGZvciBleHJhIGluZm8gZm9yIGNlcnRhaW4gbWVzc2FnZXMgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHSU5GT19NQVNLICAgICAoMHhGRiA8PCBJWEdCRV9WVF9NU0dJTkZPX1NISUZUKQorCisjZGVmaW5lIElYR0JFX1ZGX1JFU0VUICAgICAgICAgICAgMHgwMSAvKiBWRiByZXF1ZXN0cyByZXNldCAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTUFDX0FERFIgICAgIDB4MDIgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1BQyBhZGRyICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9NVUxUSUNBU1QgICAgMHgwMyAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUMgYWRkciAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfVkxBTiAgICAgICAgIDB4MDQgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZMQU4gKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX0xQRSAgICAgICAgICAweDA1IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTU9MUi5MUEUgKi8KKworLyogbGVuZ3RoIG9mIHBlcm1hbmVudCBhZGRyZXNzIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBQRiAqLworI2RlZmluZSBJWEdCRV9WRl9QRVJNQUREUl9NU0dfTEVOIDQKKy8qIHdvcmQgaW4gcGVybWFuZW50IGFkZHJlc3MgbWVzc2FnZSB3aXRoIHRoZSBjdXJyZW50IG11bHRpY2FzdCB0eXBlICovCisjZGVmaW5lIElYR0JFX1ZGX01DX1RZUEVfV09SRCAgICAgMworCisjZGVmaW5lIElYR0JFX1BGX0NPTlRST0xfTVNHICAgICAgMHgwMTAwIC8qIFBGIGNvbnRyb2wgbWVzc2FnZSAqLworCisjZGVmaW5lIElYR0JFX1ZGX01CWF9JTklUX1RJTUVPVVQgMjAwMCAvKiBudW1iZXIgb2YgcmV0cmllcyBvbiBtYWlsYm94ICovCisjZGVmaW5lIElYR0JFX1ZGX01CWF9JTklUX0RFTEFZICAgNTAwICAvKiBtaWNyb3NlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCisKK3MzMiBpeGdiZV9yZWFkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpeGdiZV93cml0ZV9tYngoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaXhnYmVfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGl4Z2JlX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaXhnYmVfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2KTsKK3MzMiBpeGdiZV9jaGVja19mb3JfYWNrKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYpOworczMyIGl4Z2JlX2NoZWNrX2Zvcl9yc3Qoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7Cit2b2lkIGl4Z2JlX2luaXRfbWJ4X29wc19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGl4Z2JlX2h3ICopOworCitleHRlcm4gc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIG1ieF9vcHNfODI1OTk7CisKKyNlbmRpZiAvKiBfSVhHQkVfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGJjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpAQCAtMCwwICsxLDMzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpZmRlZiBORVRJRl9GX0hXX1ZMQU5fVFgKKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIml4Z2JlLmgiCisKKyNpbmNsdWRlICJpeGdiZV9zcmlvdi5oIgorCitpbnQgaXhnYmVfc2V0X3ZmX211bHRpY2FzdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgaW50IGVudHJpZXMsIHUxNiAqaGFzaF9saXN0LCB1MzIgdmYpCit7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZpbmZvID0gJmFkYXB0ZXItPnZmaW5mb1t2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHNvIG1hbnkgaGFzaCB2YWx1ZXMgc3VwcG9ydGVkICovCisJZW50cmllcyA9IG1pbihlbnRyaWVzLCBJWEdCRV9NQVhfVkZfTUNfRU5UUklFUyk7CisKKwkvKgorCSAqIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmaW5mby0+bnVtX3ZmX21jX2hhc2hlcyA9IGVudHJpZXM7CisKKwkvKgorCSAqIFZGcyBhcmUgbGltaXRlZCB0byB1c2luZyB0aGUgTVRBIGhhc2ggdGFibGUgZm9yIHRoZWlyIG11bHRpY2FzdAorCSAqIGFkZHJlc3NlcworCSAqLworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJdmZpbmZvLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07OworCX0KKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaXhnYmVfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZpbmZvOworCWludCBpLCBqOworCXUzMiB2ZWN0b3JfYml0OworCXUzMiB2ZWN0b3JfcmVnOworCXUzMiBtdGFfcmVnOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV92ZnM7IGkrKykgeworCQl2ZmluZm8gPSAmYWRhcHRlci0+dmZpbmZvW2ldOworCQlmb3IgKGogPSAwOyBqIDwgdmZpbmZvLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspIHsKKwkJCWh3LT5hZGRyX2N0cmwubXRhX2luX3VzZSsrOworCQkJdmVjdG9yX3JlZyA9ICh2ZmluZm8tPnZmX21jX2hhc2hlc1tqXSA+PiA1KSAmIDB4N0Y7CisJCQl2ZWN0b3JfYml0ID0gdmZpbmZvLT52Zl9tY19oYXNoZXNbal0gJiAweDFGOworCQkJbXRhX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NVEEodmVjdG9yX3JlZykpOworCQkJbXRhX3JlZyB8PSAoMSA8PCB2ZWN0b3JfYml0KTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRBKHZlY3Rvcl9yZWcpLCBtdGFfcmVnKTsKKwkJfQorCX0KK30KKworaW50IGl4Z2JlX3NldF92Zl92bGFuKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkLCBpbnQgdmlkLCB1MzIgdmYpCit7CisJdTMyIGN0cmw7CisKKwkvKiBDaGVjayBpZiBnbG9iYWwgVkxBTiBhbHJlYWR5IHNldCwgaWYgbm90IHNldCBpdCAqLworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOworCWlmICghKGN0cmwgJiBJWEdCRV9WTE5DVFJMX1ZGRSkpIHsKKwkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwl9CisKKwlyZXR1cm4gYWRhcHRlci0+aHcubWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgdmYsIChib29sKWFkZCk7Cit9CisKKwordm9pZCBpeGdiZV9zZXRfdm1vbHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZmKQoreworCXUzMiB2bW9sciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTU9MUih2ZikpOworCXZtb2xyIHw9IChJWEdCRV9WTU9MUl9BVVBFIHwKKwkJICBJWEdCRV9WTU9MUl9ST01QRSB8CisJCSAgSVhHQkVfVk1PTFJfUk9QRSB8CisJCSAgSVhHQkVfVk1PTFJfQkFNKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZNT0xSKHZmKSwgdm1vbHIpOworfQorCitpbmxpbmUgdm9pZCBpeGdiZV92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkvKiByZXNldCBvZmZsb2FkcyB0byBkZWZhdWx0cyAqLworCWl4Z2JlX3NldF92bW9scihodywgdmYpOworCisKKwkvKiByZXNldCBtdWx0aWNhc3QgdGFibGUgYXJyYXkgZm9yIHZmICovCisJYWRhcHRlci0+dmZpbmZvW3ZmXS5udW1fdmZfbWNfaGFzaGVzID0gMDsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyID4gMCkgeworCQlhZGFwdGVyLT5ody5tYWMub3BzLmNsZWFyX3JhcigmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyKTsKKwkJYWRhcHRlci0+dmZpbmZvW3ZmXS5yYXIgPSAtMTsKKwl9Cit9CisKK2ludCBpeGdiZV9zZXRfdmZfbWFjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlhZGFwdGVyLT52ZmluZm9bdmZdLnJhciA9IGh3LT5tYWMub3BzLnNldF9yYXIoaHcsIHZmICsgMSwgbWFjX2FkZHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZmLCBJWEdCRV9SQUhfQVYpOworCWlmIChhZGFwdGVyLT52ZmluZm9bdmZdLnJhciA8IDApIHsKKwkJRFBSSU5USyhEUlYsIEVSUiwgIkNvdWxkIG5vdCBzZXQgTUFDIEZpbHRlciBmb3IgVkYgJWRcbiIsIHZmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweShhZGFwdGVyLT52ZmluZm9bdmZdLnZmX21hY19hZGRyZXNzZXMsIG1hY19hZGRyLCA2KTsKKworCXJldHVybiAwOworfQorCitpbnQgaXhnYmVfdmZfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGV2ZW50X21hc2spCit7CisJdW5zaWduZWQgY2hhciB2Zl9tYWNfYWRkcls2XTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmZuID0gKGV2ZW50X21hc2sgJiAweDNmKTsKKworCWJvb2wgZW5hYmxlID0gKChldmVudF9tYXNrICYgMHgxMDAwMDAwMFUpICE9IDApOworCisJaWYgKGVuYWJsZSkgeworCQlyYW5kb21fZXRoZXJfYWRkcih2Zl9tYWNfYWRkcik7CisJCURQUklOVEsoUFJPQkUsIElORk8sICJJT1Y6IFZGICVkIGlzIGVuYWJsZWQgIgorCQkgICAgICAgIm1hYyAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJICAgICAgIHZmbiwKKwkJICAgICAgIHZmX21hY19hZGRyWzBdLCB2Zl9tYWNfYWRkclsxXSwgdmZfbWFjX2FkZHJbMl0sCisJCSAgICAgICB2Zl9tYWNfYWRkclszXSwgdmZfbWFjX2FkZHJbNF0sIHZmX21hY19hZGRyWzVdKTsKKwkJLyoKKwkJICogU3RvcmUgYXdheSB0aGUgVkYgInBlcm1hbmFuZXQiIE1BQyBhZGRyZXNzLCBpdCB3aWxsIGFzaworCQkgKiBmb3IgaXQgbGF0ZXIuCisJCSAqLworCQltZW1jcHkoYWRhcHRlci0+dmZpbmZvW3Zmbl0udmZfbWFjX2FkZHJlc3NlcywgdmZfbWFjX2FkZHIsIDYpOworCX0KKworCXJldHVybiAwOworfQorCitpbmxpbmUgdm9pZCBpeGdiZV92Zl9yZXNldF9tc2coc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiByZWc7CisJdTMyIHJlZ19vZmZzZXQsIHZmX3NoaWZ0OworCisJdmZfc2hpZnQgPSB2ZiAlIDMyOworCXJlZ19vZmZzZXQgPSB2ZiAvIDMyOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRFKHJlZ19vZmZzZXQpKTsKKwlyZWcgfD0gKHJlZyB8ICgxIDw8IHZmX3NoaWZ0KSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKHJlZ19vZmZzZXQpLCByZWcpOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkUocmVnX29mZnNldCkpOworCXJlZyB8PSAocmVnIHwgKDEgPDwgdmZfc2hpZnQpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkUocmVnX29mZnNldCksIHJlZyk7CisKKwlpeGdiZV92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmVfcmN2X21zZ19mcm9tX3ZmKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCWludCBlbnRyaWVzOworCXUxNiAqaGFzaF9saXN0OworCWludCBhZGQsIHZpZDsKKworCXJldHZhbCA9IGl4Z2JlX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKElYR0JFX1ZUX01TR1RZUEVfQUNLIHwgSVhHQkVfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHZpcnR1YWwgZnVuY3Rpb24gcmVzZXQgaXQgc2hvdWxkIG5vdCBiZQorCSAqIGFsbG93ZWQgdG8gc3RhcnQgYW55IGNvbmZpZ3VyYXRpb24uCisJICovCisKKwlpZiAobXNnYnVmWzBdID09IElYR0JFX1ZGX1JFU0VUKSB7CisJCXVuc2lnbmVkIGNoYXIgKnZmX21hYyA9IGFkYXB0ZXItPnZmaW5mb1t2Zl0udmZfbWFjX2FkZHJlc3NlczsKKwkJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJCURQUklOVEsoUFJPQkUsIElORk8sICJWRiBSZXNldCBtc2cgcmVjZWl2ZWQgZnJvbSB2ZiAlZFxuIiwgdmYpOworCQlhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQgPSBmYWxzZTsKKwkJaXhnYmVfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKwkJYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCQkvKiByZXBseSB0byByZXNldCB3aXRoIGFjayBhbmQgdmYgbWFjIGFkZHJlc3MgKi8KKwkJbXNnYnVmWzBdID0gSVhHQkVfVkZfUkVTRVQgfCBJWEdCRV9WVF9NU0dUWVBFX0FDSzsKKwkJbWVtY3B5KGFkZHIsIHZmX21hYywgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwkJLyoKKwkJICogUGlnZ3liYWNrIHRoZSBtdWx0aWNhc3QgZmlsdGVyIHR5cGUgc28gVkYgY2FuIGNvbXB1dGUgdGhlCisJCSAqIGNvcnJlY3QgdmVjdG9ycworCQkgKi8KKwkJbXNnYnVmWzNdID0gaHctPm1hYy5tY19maWx0ZXJfdHlwZTsKKwkJaXhnYmVfd3JpdGVfbWJ4KGh3LCBtc2didWYsIElYR0JFX1ZGX1BFUk1BRERSX01TR19MRU4sIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kKSB7CisJCW1zZ2J1ZlswXSB8PSBJWEdCRV9WVF9NU0dUWVBFX05BQ0s7CisJCWl4Z2JlX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJc3dpdGNoICgobXNnYnVmWzBdICYgMHhGRkZGKSkgeworCWNhc2UgSVhHQkVfVkZfU0VUX01BQ19BRERSOgorCQl7CisJCQl1OCAqbmV3X21hYyA9ICgodTggKikoJm1zZ2J1ZlsxXSkpOworCQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobmV3X21hYykpCisJCQkJaXhnYmVfc2V0X3ZmX21hYyhhZGFwdGVyLCB2ZiwgbmV3X21hYyk7CisJCQllbHNlCisJCQkJcmV0dmFsID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUOgorCQllbnRyaWVzID0gKG1zZ2J1ZlswXSAmIElYR0JFX1ZUX01TR0lORk9fTUFTSykKKwkJICAgICAgICAgID4+IElYR0JFX1ZUX01TR0lORk9fU0hJRlQ7CisJCWhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCQlyZXR2YWwgPSBpeGdiZV9zZXRfdmZfbXVsdGljYXN0cyhhZGFwdGVyLCBlbnRyaWVzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xpc3QsIHZmKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9WRl9TRVRfTFBFOgorCQlXQVJOX09OKChtc2didWZbMF0gJiAweEZGRkYpID09IElYR0JFX1ZGX1NFVF9MUEUpOworCQlicmVhazsKKwljYXNlIElYR0JFX1ZGX1NFVF9WTEFOOgorCQlhZGQgPSAobXNnYnVmWzBdICYgSVhHQkVfVlRfTVNHSU5GT19NQVNLKQorCQkgICAgICA+PiBJWEdCRV9WVF9NU0dJTkZPX1NISUZUOworCQl2aWQgPSAobXNnYnVmWzFdICYgSVhHQkVfVkxWRl9WTEFOSURfTUFTSyk7CisJCXJldHZhbCA9IGl4Z2JlX3NldF92Zl92bGFuKGFkYXB0ZXIsIGFkZCwgdmlkLCB2Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEsoRFJWLCBFUlIsICJVbmhhbmRsZWQgTXNnICU4Ljh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSBJWEdCRV9FUlJfTUJYOworCQlicmVhazsKKwl9CisKKwkvKiBub3RpZnkgdGhlIFZGIG9mIHRoZSByZXN1bHRzIG9mIHdoYXQgaXQgc2VudCB1cyAqLworCWlmIChyZXR2YWwpCisJCW1zZ2J1ZlswXSB8PSBJWEdCRV9WVF9NU0dUWVBFX05BQ0s7CisJZWxzZQorCQltc2didWZbMF0gfD0gSVhHQkVfVlRfTVNHVFlQRV9BQ0s7CisKKwltc2didWZbMF0gfD0gSVhHQkVfVlRfTVNHVFlQRV9DVFM7CisKKwlpeGdiZV93cml0ZV9tYngoaHcsIG1zZ2J1ZiwgMSwgdmYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgaXhnYmVfcmN2X2Fja19mcm9tX3ZmKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gSVhHQkVfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQpCisJCWl4Z2JlX3dyaXRlX21ieChodywgJm1zZywgMSwgdmYpOworfQorCit2b2lkIGl4Z2JlX21zZ190YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHZmOworCisJZm9yICh2ZiA9IDA7IHZmIDwgYWRhcHRlci0+bnVtX3ZmczsgdmYrKykgeworCQkvKiBwcm9jZXNzIGFueSByZXNldCByZXF1ZXN0cyAqLworCQlpZiAoIWl4Z2JlX2NoZWNrX2Zvcl9yc3QoaHcsIHZmKSkKKwkJCWl4Z2JlX3ZmX3Jlc2V0X2V2ZW50KGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBtZXNzYWdlcyBwZW5kaW5nICovCisJCWlmICghaXhnYmVfY2hlY2tfZm9yX21zZyhodywgdmYpKQorCQkJaXhnYmVfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaXhnYmVfY2hlY2tfZm9yX2FjayhodywgdmYpKQorCQkJaXhnYmVfcmN2X2Fja19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NGIyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lYR0JFX1NSSU9WX0hfCisjZGVmaW5lIF9JWEdCRV9TUklPVl9IXworCitpbnQgaXhnYmVfc2V0X3ZmX211bHRpY2FzdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJpZXMsIHUxNiAqaGFzaF9saXN0LCB1MzIgdmYpOwordm9pZCBpeGdiZV9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGl4Z2JlX3NldF92Zl92bGFuKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkLCBpbnQgdmlkLCB1MzIgdmYpOwordm9pZCBpeGdiZV9zZXRfdm1vbHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZmKTsKK3ZvaWQgaXhnYmVfdmZfcmVzZXRfZXZlbnQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2Zik7Cit2b2lkIGl4Z2JlX3ZmX3Jlc2V0X21zZyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKTsKK3ZvaWQgaXhnYmVfbXNnX3Rhc2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGl4Z2JlX3NldF92Zl9tYWMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKTsKK2ludCBpeGdiZV92Zl9jb25maWd1cmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgZXZlbnRfbWFzayk7Cit2b2lkIGl4Z2JlX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9JWEdCRV9TUklPVl9IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKaW5kZXggODQ2NTBjNi4uZWM4YWQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMjc3LDYgKzI3Nyw3IEBACiAjZGVmaW5lIElYR0JFX0RUWENUTCAgICAweDA3RTAwCiAKICNkZWZpbmUgSVhHQkVfRE1BVFhDVEwgIDB4MDRBODAKKyNkZWZpbmUgSVhHQkVfUEZEVFhHU1dDICAgICAweDA4MjIwCiAjZGVmaW5lIElYR0JFX0RUWE1YU1pSUSAgICAgMHgwODEwMAogI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdMICAgIDB4MDRBODgKICNkZWZpbmUgSVhHQkVfRFRYVENQRkxHSCAgICAweDA0QThDCkBAIC0yODcsNiArMjg4LDggQEAKICNkZWZpbmUgSVhHQkVfRE1BVFhDVExfTlMgICAgICAgMHgyIC8qIE5vIFNub29wIExTTyBoZHIgYnVmZmVyICovCiAjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX0dEViAgICAgIDB4OCAvKiBHbG9iYWwgRG91YmxlIFZMQU4gKi8KICNkZWZpbmUgSVhHQkVfRE1BVFhDVExfVlRfU0hJRlQgMTYgIC8qIFZMQU4gRXRoZXJUeXBlICovCisKKyNkZWZpbmUgSVhHQkVfUEZEVFhHU1dDX1ZUX0xCRU4gMHgxIC8qIExvY2FsIEwyIFZUIHN3aXRjaCBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTChfaSkgICAgKDB4MDcyMDAgKyAoKF9pKSAqIDQpKSAvKiAxNiBvZiB0aGVzZSAoMC0xNSkgKi8KIC8qIFR4IERDQSBDb250cm9sIHJlZ2lzdGVyIDogMTI4IG9mIHRoZXNlICgwLTEyNykgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShfaSkgICgweDA2MDBDICsgKChfaSkgKiAweDQwKSkKQEAgLTQ5Nyw2ICs1MDAsNyBAQAogLyogRENCIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9SVFJQQ1MgICAgICAweDAyNDMwCiAjZGVmaW5lIElYR0JFX1JUVERDUyAgICAgIDB4MDQ5MDAKKyNkZWZpbmUgSVhHQkVfUlRURENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBEQ0IgYXJiaXRlciBkaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX1JUVFBDUyAgICAgIDB4MENEMDAKICNkZWZpbmUgSVhHQkVfUlRSVVAyVEMgICAgMHgwMzAyMAogI2RlZmluZSBJWEdCRV9SVFRVUDJUQyAgICAweDBDODAwCkBAIC03MzAsNiArNzM0LDEzIEBACiAjZGVmaW5lIElYR0JFX0dDUl9DTVBMX1RNT1VUX1JFU0VORCAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBJWEdCRV9HQ1JfQ0FQX1ZFUjIgICAgICAgICAgICAgIDB4MDAwNDAwMDAKIAorI2RlZmluZSBJWEdCRV9HQ1JfRVhUX01TSVhfRU4gICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfR0NSX0VYVF9WVF9NT0RFXzE2ICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX0dDUl9FWFRfVlRfTU9ERV8zMiAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9HQ1JfRVhUX1ZUX01PREVfNjQgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfR0NSX0VYVF9TUklPViAgICAgICAgICAgICAoSVhHQkVfR0NSX0VYVF9NU0lYX0VOIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9HQ1JfRVhUX1ZUX01PREVfNjQpCisKIC8qIFRpbWUgU3luYyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfVFNZTkNSWENUTCAweDA1MTg4IC8qIFJ4IFRpbWUgU3luYyBDb250cm9sIHJlZ2lzdGVyIC0gUlcgKi8KICNkZWZpbmUgSVhHQkVfVFNZTkNUWENUTCAweDA4QzAwIC8qIFR4IFRpbWUgU3luYyBDb250cm9sIHJlZ2lzdGVyIC0gUlcgKi8KQEAgLTEwNjUsNiArMTA3Niw4IEBACiAvKiBWRlJFIGJpdG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfVkZSRV9FTkFCTEVfQUxMICAgMHhGRkZGRkZGRgogCisjZGVmaW5lIElYR0JFX1ZGX0lOSVRfVElNRU9VVCAgIDIwMCAvKiBOdW1iZXIgb2YgcmV0cmllcyB0byBjbGVhciBSU1RJICovCisKIC8qIFJESE1QTiBhbmQgVERITVBOIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDQUREUiAgICAgICAweDAwN0ZGODAwCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDUkRSRVEgICAgICAweDAwODAwMDAwCkBAIC0xMjk1LDYgKzEzMDgsNyBAQAogLyogVkxBTiBwb29sIGZpbHRlcmluZyBtYXNrcyAqLwogI2RlZmluZSBJWEdCRV9WTFZGX1ZJRU4gICAgICAgICAweDgwMDAwMDAwICAvKiBmaWx0ZXIgaXMgdmFsaWQgKi8KICNkZWZpbmUgSVhHQkVfVkxWRl9FTlRSSUVTICAgICAgNjQKKyNkZWZpbmUgSVhHQkVfVkxWRl9WTEFOSURfTUFTSyAgMHgwMDAwMEZGRgogCiAjZGVmaW5lIElYR0JFX0VUSEVSTkVUX0lFRUVfVkxBTl9UWVBFIDB4ODEwMCAgLyogODAyLjFxIHByb3RvY29sICovCiAKQEAgLTE4NDMsNiArMTg1NywxMiBAQAogI2RlZmluZSBJWEdCRV9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUICAweDAwMEQgLyogUHJpb3JpdHkgaW4gdXBwZXIgMyBvZiAxNiAqLwogI2RlZmluZSBJWEdCRV9UWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUICBJWEdCRV9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUCiAKKy8qIFNSLUlPViBzcGVjaWZpYyBtYWNyb3MgKi8KKyNkZWZpbmUgSVhHQkVfTUJWRklDUl9JTkRFWCh2Zl9udW1iZXIpICAgKHZmX251bWJlciA+PiA0KQorI2RlZmluZSBJWEdCRV9NQlZGSUNSKF9pKSAgICAgICAgICAgICAgICAoMHgwMDcxMCArIChfaSAqIDQpKQorI2RlZmluZSBJWEdCRV9WRkxSRShfaSkgICAgICAgICAgICAgICAgICAoKChfaSAmIDEpID8gMHgwMDFDMCA6IDB4MDA2MDApKQorI2RlZmluZSBJWEdCRV9WRkxSRUMoX2kpICAgICAgICAgICAgICAgICAoMHgwMDcwMCArIChfaSAqIDQpKQorCiAvKiBMaXR0bGUgRW5kaWFuIGRlZmluZXMgKi8KICNpZm5kZWYgX19sZTMyCiAjZGVmaW5lIF9fbGUzMiAgdTMyCkBAIC0yNDYzLDYgKzI0ODMsMzcgQEAKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc3BlZWRfZmliZXI7CiB9OwogCisjaW5jbHVkZSAiaXhnYmVfbWJ4LmgiCisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyB7CisJczMyICgqaW5pdF9wYXJhbXMpKHN0cnVjdCBpeGdiZV9odyAqaHcpOworCXMzMiAoKnJlYWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2LCAgdTE2KTsKKwlzMzIgKCp3cml0ZSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CisJczMyICgqcmVhZF9wb3N0ZWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2LCAgdTE2KTsKKwlzMzIgKCp3cml0ZV9wb3N0ZWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworCXMzMiAoKmNoZWNrX2Zvcl9tc2cpKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYpOworCXMzMiAoKmNoZWNrX2Zvcl9hY2spKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYpOworCXMzMiAoKmNoZWNrX2Zvcl9yc3QpKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYpOworfTsKKworc3RydWN0IGl4Z2JlX21ieF9zdGF0cyB7CisJdTMyIG1zZ3NfdHg7CisJdTMyIG1zZ3Nfcng7CisKKwl1MzIgYWNrczsKKwl1MzIgcmVxczsKKwl1MzIgcnN0czsKK307CisKK3N0cnVjdCBpeGdiZV9tYnhfaW5mbyB7CisJc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIG9wczsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X3N0YXRzIHN0YXRzOworCXUzMiB0aW1lb3V0OworCXUzMiB1c2VjX2RlbGF5OworCXUzMiB2MnBfbWFpbGJveDsKKwl1MTYgc2l6ZTsKK307CisKIHN0cnVjdCBpeGdiZV9odyB7CiAJdTggX19pb21lbQkJCSpod19hZGRyOwogCXZvaWQJCQkJKmJhY2s7CkBAIC0yNDcyLDYgKzI1MjMsNyBAQAogCXN0cnVjdCBpeGdiZV9waHlfaW5mbwkJcGh5OwogCXN0cnVjdCBpeGdiZV9lZXByb21faW5mbwllZXByb207CiAJc3RydWN0IGl4Z2JlX2J1c19pbmZvCQlidXM7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvCQltYng7CiAJdTE2CQkJCWRldmljZV9pZDsKIAl1MTYJCQkJdmVuZG9yX2lkOwogCXUxNgkJCQlzdWJzeXN0ZW1fZGV2aWNlX2lkOwpAQCAtMjQ4Niw2ICsyNTM4LDcgQEAKIAlzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMJKm1hY19vcHM7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zCSplZXByb21fb3BzOwogCXN0cnVjdCBpeGdiZV9waHlfb3BlcmF0aW9ucwkqcGh5X29wczsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMJKm1ieF9vcHM7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9peGdiZXZmL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGUwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL01ha2VmaWxlCkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisjIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorIyBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisjIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisjCisjIENvbnRhY3QgSW5mb3JtYXRpb246CisjIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorIyBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIE1ha2VmaWxlIGZvciB0aGUgSW50ZWwoUikgODI1OTkgVkYgZXRoZXJuZXQgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19JWEdCRVZGKSArPSBpeGdiZXZmLm8KKworaXhnYmV2Zi1vYmpzIDo9IHZmLm8gXAorICAgICAgICAgICAgICAgIG1ieC5vIFwKKyAgICAgICAgICAgICAgICBldGh0b29sLm8gXAorICAgICAgICAgICAgICAgIGl4Z2JldmZfbWFpbi5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0ZmRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvZGVmaW5lcy5oCkBAIC0wLDAgKzEsMjkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRVZGX0RFRklORVNfSF8KKyNkZWZpbmUgX0lYR0JFVkZfREVGSU5FU19IXworCisvKiBEZXZpY2UgSURzICovCisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9WRiAgICAgICAgICAgMHgxMEVECisKKyNkZWZpbmUgSVhHQkVfVkZfSVJRX0NMRUFSX01BU0sgICAgICAgICA3CisjZGVmaW5lIElYR0JFX1ZGX01BWF9UWF9RVUVVRVMgICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9WRl9NQVhfUlhfUVVFVUVTICAgICAgICAgIDEKKyNkZWZpbmUgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTICAgICA2CisKKy8qIExpbmsgc3BlZWQgKi8KK3R5cGVkZWYgdTMyIGl4Z2JlX2xpbmtfc3BlZWQ7CisjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgICAgICAgMHgwMDIwCisjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMICAgICAgMHgwMDgwCisKKyNkZWZpbmUgSVhHQkVfQ1RSTF9SU1QgICAgICAgICAgMHgwNDAwMDAwMCAvKiBSZXNldCAoU1cpICovCisjZGVmaW5lIElYR0JFX1JYRENUTF9FTkFCTEUgICAgIDB4MDIwMDAwMDAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCisjZGVmaW5lIElYR0JFX1RYRENUTF9FTkFCTEUgICAgIDB4MDIwMDAwMDAgLyogRW5hYmxlIHNwZWNpZmljIFR4IFF1ZXVlICovCisjZGVmaW5lIElYR0JFX0xJTktTX1VQICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRUQgICAgICAgMHgyMDAwMDAwMAorCisvKiBOdW1iZXIgb2YgVHJhbnNtaXQgYW5kIFJlY2VpdmUgRGVzY3JpcHRvcnMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggKi8KKyNkZWZpbmUgSVhHQkVfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUgIDgKKyNkZWZpbmUgSVhHQkVfUkVRX1JYX0RFU0NSSVBUT1JfTVVMVElQTEUgIDgKKyNkZWZpbmUgSVhHQkVfUkVRX1RYX0JVRkZFUl9HUkFOVUxBUklUWSAgIDEwMjQKKworLyogSW50ZXJydXB0IFZlY3RvciBBbGxvY2F0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9JVkFSX0FMTE9DX1ZBTCAgICAweDgwIC8qIEludGVycnVwdCBBbGxvY2F0aW9uIHZhbGlkICovCisKKyNkZWZpbmUgSVhHQkVfVkZfSU5JVF9USU1FT1VUICAgMjAwIC8qIE51bWJlciBvZiByZXRyaWVzIHRvIGNsZWFyIFJTVEkgKi8KKworLyogUmVjZWl2ZSBDb25maWcgbWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlhDVFJMX1JYRU4gICAgICAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFJlY2VpdmVyICovCisjZGVmaW5lIElYR0JFX1JYQ1RSTF9ETUJZUFMgICAgIDB4MDAwMDAwMDIgIC8qIERlc2NyaXB0b3IgTW9uaXRvciBCeXBhc3MgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCisjZGVmaW5lIElYR0JFX1JYRENUTF9WTUUgICAgICAgIDB4NDAwMDAwMDAgIC8qIFZMQU4gbW9kZSBlbmFibGUgKi8KKworLyogRENBIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTiAoMSA8PCAxMSkgLyogVHggRGVzYyB3cml0ZWJhY2sgUk8gYml0ICovCisKKy8qIFBTUlRZUEUgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfVENQSERSICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9VRFBIRFIgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0lQVjRIRFIgICAweDAwMDAwMTAwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNkhEUiAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9MMkhEUiAgICAgMHgwMDAwMTAwMAorCisvKiBTUlJDVEwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVCAgICAgMTAgICAgIC8qIHNvIG1hbnkgS0JzICovCisjZGVmaW5lIElYR0JFX1NSUkNUTF9SRE1UU19TSElGVCAgICAgICAgMjIKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX01BU0sgICAgICAgICAweDAxQzAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9EUk9QX0VOICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVQS1RfTUFTSyAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSX01BU0sgICAgICAweDAwMDAzRjAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9MRUdBQ1kgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRiAweDAyMDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVQgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9SRVBMSUNBVElPTl9MQVJHRV9QS1QgMHgwODAwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfSERSX1NQTElUX0FMV0FZUyAweDBBMDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9NQVNLICAgICAgMHgwRTAwMDAwMAorCisvKiBSZWNlaXZlIERlc2NyaXB0b3IgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0REICAgICAgICAgMHgwMSAgICAvKiBEZXNjcmlwdG9yIERvbmUgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRU9QICAgICAgICAweDAyICAgIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRkxNICAgICAgICAweDA0ICAgIC8qIEZEaXIgTWF0Y2ggKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVlAgICAgICAgICAweDA4ICAgIC8qIElFRUUgVkxBTiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX05FWFRQX01BU0sgICAweDAwMEZGRkYwIC8qIE5leHQgRGVzY3JpcHRvciBJbmRleCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfU0hJRlQgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQQ1MgICAgICAweDEwICAgIC8qIFVEUCB4c3VtIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTDRDUyAgICAgICAweDIwICAgIC8qIEw0IHhzdW0gY2FsY3VsYXRlZCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9JUENTICAgICAgIDB4NDAgICAgLyogSVAgeHN1bSBjYWxjdWxhdGVkICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1BJRiAgICAgICAgMHg4MCAgICAvKiBwYXNzZWQgaW4tZXhhY3QgZmlsdGVyICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0NSQ1YgICAgICAgMHgxMDAgICAvKiBTcGVjdWxhdGl2ZSBDUkMgVmFsaWQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVkVYVCAgICAgICAweDIwMCAgIC8qIDFzdCBWTEFOIGZvdW5kICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUFYgICAgICAgMHg0MDAgICAvKiBWYWxpZCBVRFAgY2hlY2tzdW0gKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRFlOSU5UICAgICAweDgwMCAgIC8qIFBrdCBjYXVzZWQgSU5UIHZpYSBEWU5JTlQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVFMgICAgICAgICAweDEwMDAwIC8qIFRpbWUgU3RhbXAgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfU0VDUCAgICAgICAweDIwMDAwIC8qIFNlY3VyaXR5IFByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTEIgICAgICAgICAweDQwMDAwIC8qIExvb3BiYWNrIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9BQ0sgICAgICAgIDB4ODAwMCAgLyogQUNLIFBhY2tldCBpbmRpY2F0aW9uICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfQ0UgICAgICAgICAgMHgwMSAgICAvKiBDUkMgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9MRSAgICAgICAgICAweDAyICAgIC8qIExlbmd0aCBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERfRVJSX1BFICAgICAgICAgIDB4MDggICAgLyogUGFja2V0IEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfT1NFICAgICAgICAgMHgxMCAgICAvKiBPdmVyc2l6ZSBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERfRVJSX1VTRSAgICAgICAgIDB4MjAgICAgLyogVW5kZXJzaXplIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfVENQRSAgICAgICAgMHg0MCAgICAvKiBUQ1AvVURQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfSVBFICAgICAgICAgMHg4MCAgICAvKiBJUCBDaGVja3N1bSBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX01BU0sgICAgIDB4RkZGMDAwMDAgLyogUkRFU0MuRVJST1JTIG1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9TSElGVCAgICAyMCAgICAgICAgIC8qIFJERVNDLkVSUk9SUyBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0hCTyAgICAgIDB4MDA4MDAwMDAgLypIZWFkZXIgQnVmZmVyIE92ZXJmbG93ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfQ0UgICAgICAgMHgwMTAwMDAwMCAvKiBDUkMgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9MRSAgICAgICAweDAyMDAwMDAwIC8qIExlbmd0aCBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1BFICAgICAgIDB4MDgwMDAwMDAgLyogUGFja2V0IEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfT1NFICAgICAgMHgxMDAwMDAwMCAvKiBPdmVyc2l6ZSBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1VTRSAgICAgIDB4MjAwMDAwMDAgLyogVW5kZXJzaXplIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfVENQRSAgICAgMHg0MDAwMDAwMCAvKiBUQ1AvVURQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfSVBFICAgICAgMHg4MDAwMDAwMCAvKiBJUCBDaGVja3N1bSBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERfVkxBTl9JRF9NQVNLICAgIDB4MEZGRiAgLyogVkxBTiBJRCBpcyBpbiBsb3dlciAxMiBiaXRzICovCisjZGVmaW5lIElYR0JFX1JYRF9QUklfTUFTSyAgICAgICAgMHhFMDAwICAvKiBQcmlvcml0eSBpcyBpbiB1cHBlciAzIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1BSSV9TSElGVCAgICAgICAxMworI2RlZmluZSBJWEdCRV9SWERfQ0ZJX01BU0sgICAgICAgIDB4MTAwMCAgLyogQ0ZJIGlzIGJpdCAxMiAqLworI2RlZmluZSBJWEdCRV9SWERfQ0ZJX1NISUZUICAgICAgIDEyCisKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfREQgICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9ERCAgLyogRG9uZSAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9FT1AgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0VPUCAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZMTSAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRkxNIC8qIEZEaXIgTWF0Y2ggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfVlAgICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9WUCAgLyogSUVFRSBWTEFOIFBrdCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9NQVNLICAgICAgICAgIDB4MDAwRkZGRkYgLyogU3RhdC9ORVhUUDogYml0IDAtMTkgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkNFT0ZTICAgICAgICAweDAwMDAwMDQwIC8qIEZDb0UgRU9GL1NPRiBTdGF0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVCAgICAgICAgMHgwMDAwMDAzMCAvKiBGQ29FIFBrdCBTdGF0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVF9OT01UQ0ggMHgwMDAwMDAwMCAvKiAwMDogTm8gQ3R4dCBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GQ1NUQVRfTk9ERFAgIDB4MDAwMDAwMTAgLyogMDE6IEN0eHQgdy9vIEREUCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GQ1NUQVRfRkNQUlNQIDB4MDAwMDAwMjAgLyogMTA6IFJlY3YuIEZDUF9SU1AgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkNTVEFUX0REUCAgICAweDAwMDAwMDMwIC8qIDExOiBDdHh0IHcvIEREUCAqLworCisjZGVmaW5lIElYR0JFX1JYREFEVl9SU1NUWVBFX01BU0sgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLICAgICAgIDB4MDAwMEZGRjAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTS19FWCAgICAweDAwMDFGRkYwCisjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fTUFTSyAgICAgMHgwMDAwN0ZFMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUlNDQ05UX01BU0sgICAgICAgIDB4MDAxRTAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1JTQ0NOVF9TSElGVCAgICAgICAxNworI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX1NISUZUICAgIDUKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NQTElUSEVBREVSX0VOICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9TUEggICAgICAgICAgICAgICAgMHg4MDAwCisKKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSyAoIFwKKwkJCQkgICAgICBJWEdCRV9SWERfRVJSX0NFIHwgIFwKKwkJCQkgICAgICBJWEdCRV9SWERfRVJSX0xFIHwgIFwKKwkJCQkgICAgICBJWEdCRV9SWERfRVJSX1BFIHwgIFwKKwkJCQkgICAgICBJWEdCRV9SWERfRVJSX09TRSB8IFwKKwkJCQkgICAgICBJWEdCRV9SWERfRVJSX1VTRSkKKworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAorCQkJCQkgSVhHQkVfUlhEQURWX0VSUl9DRSB8ICBcCisJCQkJCSBJWEdCRV9SWERBRFZfRVJSX0xFIHwgIFwKKwkJCQkJIElYR0JFX1JYREFEVl9FUlJfUEUgfCAgXAorCQkJCQkgSVhHQkVfUlhEQURWX0VSUl9PU0UgfCBcCisJCQkJCSBJWEdCRV9SWERBRFZfRVJSX1VTRSkKKworI2RlZmluZSBJWEdCRV9UWERfUE9QVFNfSVhTTSAweDAxICAgICAgIC8qIEluc2VydCBJUCBjaGVja3N1bSAqLworI2RlZmluZSBJWEdCRV9UWERfUE9QVFNfVFhTTSAweDAyICAgICAgIC8qIEluc2VydCBUQ1AvVURQIGNoZWNrc3VtICovCisjZGVmaW5lIElYR0JFX1RYRF9DTURfRU9QICAgIDB4MDEwMDAwMDAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9UWERfQ01EX0lGQ1MgICAweDAyMDAwMDAwIC8qIEluc2VydCBGQ1MgKEV0aGVybmV0IENSQykgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9JQyAgICAgMHgwNDAwMDAwMCAvKiBJbnNlcnQgQ2hlY2tzdW0gKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9SUyAgICAgMHgwODAwMDAwMCAvKiBSZXBvcnQgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1RYRF9DTURfREVYVCAgIDB4MjAwMDAwMDAgLyogRGVzY3JpcHRvciBleHRlbnNpb24gKDAgPSBsZWdhY3kpICovCisjZGVmaW5lIElYR0JFX1RYRF9DTURfVkxFICAgIDB4NDAwMDAwMDAgLyogQWRkIFZMQU4gdGFnICovCisjZGVmaW5lIElYR0JFX1RYRF9TVEFUX0REICAgIDB4MDAwMDAwMDEgLyogRGVzY3JpcHRvciBEb25lICovCisKKy8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwordW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgeworCXN0cnVjdCB7CisJCV9fbGU2NCBidWZmZXJfYWRkcjsgICAgICAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZiAqLworCQlfX2xlMzIgY21kX3R5cGVfbGVuOworCQlfX2xlMzIgb2xpbmZvX3N0YXR1czsKKwl9IHJlYWQ7CisJc3RydWN0IHsKKwkJX19sZTY0IHJzdmQ7ICAgICAgIC8qIFJlc2VydmVkICovCisJCV9fbGUzMiBueHRzZXFfc2VlZDsKKwkJX19sZTMyIHN0YXR1czsKKwl9IHdiOworfTsKKworLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gQWR2YW5jZWQgKi8KK3VuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjIHsKKwlzdHJ1Y3QgeworCQlfX2xlNjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqLworCQlfX2xlNjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLworCX0gcmVhZDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJdW5pb24geworCQkJCV9fbGUzMiBkYXRhOworCQkJCXN0cnVjdCB7CisJCQkJCV9fbGUxNiBwa3RfaW5mbzsgLyogUlNTLCBQa3QgdHlwZSAqLworCQkJCQlfX2xlMTYgaGRyX2luZm87IC8qIFNwbGl0aGRyLCBoZHJsZW4gKi8KKwkJCQl9IGhzX3JzczsKKwkJCX0gbG9fZHdvcmQ7CisJCQl1bmlvbiB7CisJCQkJX19sZTMyIHJzczsgLyogUlNTIEhhc2ggKi8KKwkJCQlzdHJ1Y3QgeworCQkJCQlfX2xlMTYgaXBfaWQ7IC8qIElQIGlkICovCisJCQkJCV9fbGUxNiBjc3VtOyAvKiBQYWNrZXQgQ2hlY2tzdW0gKi8KKwkJCQl9IGNzdW1faXA7CisJCQl9IGhpX2R3b3JkOworCQl9IGxvd2VyOworCQlzdHJ1Y3QgeworCQkJX19sZTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLworCQkJX19sZTE2IGxlbmd0aDsgLyogUGFja2V0IGxlbmd0aCAqLworCQkJX19sZTE2IHZsYW47IC8qIFZMQU4gdGFnICovCisJCX0gdXBwZXI7CisJfSB3YjsgIC8qIHdyaXRlYmFjayAqLworfTsKKworLyogQ29udGV4dCBkZXNjcmlwdG9ycyAqLworc3RydWN0IGl4Z2JlX2Fkdl90eF9jb250ZXh0X2Rlc2MgeworCV9fbGUzMiB2bGFuX21hY2lwX2xlbnM7CisJX19sZTMyIHNlcW51bV9zZWVkOworCV9fbGUzMiB0eXBlX3R1Y21kX21saGw7CisJX19sZTMyIG1zc19sNGxlbl9pZHg7Cit9OworCisvKiBBZHYgVHJhbnNtaXQgRGVzY3JpcHRvciBDb25maWcgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfTUFTSyAgMHgwMEYwMDAwMCAvKiBEVFlQIG1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfQ1RYVCAgMHgwMDIwMDAwMCAvKiBBZHZhbmNlZCBDb250ZXh0IERlc2MgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfREFUQSAgMHgwMDMwMDAwMCAvKiBBZHZhbmNlZCBEYXRhIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RDTURfRU9QICAgSVhHQkVfVFhEX0NNRF9FT1AgIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RDTURfSUZDUyAgSVhHQkVfVFhEX0NNRF9JRkNTIC8qIEluc2VydCBGQ1MgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RDTURfUlMgICAgSVhHQkVfVFhEX0NNRF9SUyAgIC8qIFJlcG9ydCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RDTURfREVYVCAgSVhHQkVfVFhEX0NNRF9ERVhUIC8qIERlc2MgZXh0ICgxPUFkdikgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0RDTURfVkxFICAgSVhHQkVfVFhEX0NNRF9WTEUgIC8qIFZMQU4gcGt0IGVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9UU0UgICAweDgwMDAwMDAwIC8qIFRDUCBTZWcgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9TVEFUX0REICAgIElYR0JFX1RYRF9TVEFUX0REICAvKiBEZXNjcmlwdG9yIERvbmUgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQVjQgICAgICAweDAwMDAwNDAwICAvKiBJUCBQYWNrZXQgVHlwZTogMT1JUHY0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9JUFY2ICAgICAgMHgwMDAwMDAwMCAgLyogSVAgUGFja2V0IFR5cGU6IDA9SVB2NiAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1VEUCAgIDB4MDAwMDAwMDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFVEUCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUCAgIDB4MDAwMDA4MDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFRDUCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1NDVFAgIDB4MDAwMDEwMDAgIC8qIEw0IFBhY2tldCBUWVBFIG9mIFNDVFAgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0lEWF9TSElGVCAgNCAvKiBBZHYgZGVzYyBJbmRleCBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfUE9QVFNfU0hJRlQgICAgICA4ICAvKiBBZHYgZGVzYyBQT1BUUyBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfUE9QVFNfSVhTTSAoSVhHQkVfVFhEX1BPUFRTX0lYU00gPDwgXAorCQkJCSBJWEdCRV9BRFZUWERfUE9QVFNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19UWFNNIChJWEdCRV9UWERfUE9QVFNfVFhTTSA8PCBcCisJCQkJIElYR0JFX0FEVlRYRF9QT1BUU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQURWVFhEX1BBWUxFTl9TSElGVCAgICAxNCAvKiBBZHYgZGVzYyBQQVlMRU4gc2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX01BQ0xFTl9TSElGVCAgICA5ICAvKiBBZHYgY3R4dCBkZXNjIG1hYyBsZW4gc2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1ZMQU5fU0hJRlQgICAgICAxNiAgLyogQWR2IGN0eHQgdmxhbiB0YWcgc2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0w0TEVOX1NISUZUICAgICA4ICAvKiBBZHYgY3R4dCBMNExFTiBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTVNTX1NISUZUICAgICAgIDE2ICAvKiBBZHYgY3R4dCBNU1Mgc2hpZnQgKi8KKworLyogSW50ZXJydXB0IHJlZ2lzdGVyIGJpdG1hc2tzICovCisKKy8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBSZWFkICovCisjZGVmaW5lIElYR0JFX0VJQ1JfUlRYX1FVRVVFICAgIDB4MDAwMEZGRkYgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNSX01BSUxCT1ggICAgICAweDAwMDgwMDAwIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1JfT1RIRVIgICAgICAgIDB4ODAwMDAwMDAgLyogSW50ZXJydXB0IENhdXNlIEFjdGl2ZSAqLworCisvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgQ2F1c2UgU2V0ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19PVEhFUiAgICAgICAgSVhHQkVfRUlDUl9PVEhFUiAgICAgLyogSU5UIENhdXNlIEFjdGl2ZSAqLworCisvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSU1TX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLworI2RlZmluZSBJWEdCRV9FSU1TX09USEVSICAgICAgICBJWEdCRV9FSUNSX09USEVSICAgICAvKiBJTlQgQ2F1c2UgQWN0aXZlICovCisKKy8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIENsZWFyICovCisjZGVmaW5lIElYR0JFX0VJTUNfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19PVEhFUiAgICAgICAgSVhHQkVfRUlDUl9PVEhFUiAgICAgLyogSU5UIENhdXNlIEFjdGl2ZSAqLworCisjZGVmaW5lIElYR0JFX0VJTVNfRU5BQkxFX01BU0sgKCBcCisJCQkJSVhHQkVfRUlNU19SVFhfUVVFVUUgICAgICAgfCBcCisJCQkJSVhHQkVfRUlNU19NQUlMQk9YICAgICAgICAgfCBcCisJCQkJSVhHQkVfRUlNU19PVEhFUikKKworI2RlZmluZSBJWEdCRV9FSVRSX0NOVF9XRElTICAgICAweDgwMDAwMDAwCisKKy8qIEVycm9yIENvZGVzICovCisjZGVmaW5lIElYR0JFX0VSUl9JTlZBTElEX01BQ19BRERSICAgICAgICAgICAgICAtMQorI2RlZmluZSBJWEdCRV9FUlJfUkVTRVRfRkFJTEVEICAgICAgICAgICAgICAgICAgLTIKKworI2VuZGlmIC8qIF9JWEdCRVZGX0RFRklORVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5YmUwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jCkBAIC0wLDAgKzEsNzE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBldGh0b29sIHN1cHBvcnQgZm9yIGl4Z2JldmYgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiaXhnYmV2Zi5oIgorCisjZGVmaW5lIElYR0JFX0FMTF9SQVJfRU5UUklFUyAxNgorCisjaWZkZWYgRVRIVE9PTF9HU1RBVFMKK3N0cnVjdCBpeGdiZV9zdGF0cyB7CisJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworCWludCBzaXplb2Zfc3RhdDsKKwlpbnQgc3RhdF9vZmZzZXQ7CisJaW50IGJhc2Vfc3RhdF9vZmZzZXQ7Cit9OworCisjZGVmaW5lIElYR0JFVkZfU1RBVChtLCBiKSAgc2l6ZW9mKCgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqKTApLT5tKSwgXAorCQkJICAgIG9mZnNldG9mKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIsIG0pLCAgICAgIFwKKwkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyLCBiKQorc3RhdGljIHN0cnVjdCBpeGdiZV9zdGF0cyBpeGdiZV9nc3RyaW5nc19zdGF0c1tdID0geworCXsicnhfcGFja2V0cyIsIElYR0JFVkZfU1RBVChzdGF0cy52ZmdwcmMsIHN0YXRzLmJhc2VfdmZncHJjKX0sCisJeyJ0eF9wYWNrZXRzIiwgSVhHQkVWRl9TVEFUKHN0YXRzLnZmZ3B0Yywgc3RhdHMuYmFzZV92ZmdwdGMpfSwKKwl7InJ4X2J5dGVzIiwgSVhHQkVWRl9TVEFUKHN0YXRzLnZmZ29yYywgc3RhdHMuYmFzZV92ZmdvcmMpfSwKKwl7InR4X2J5dGVzIiwgSVhHQkVWRl9TVEFUKHN0YXRzLnZmZ290Yywgc3RhdHMuYmFzZV92ZmdvdGMpfSwKKwl7InR4X2J1c3kiLCBJWEdCRVZGX1NUQVQodHhfYnVzeSwgemVyb19iYXNlKX0sCisJeyJtdWx0aWNhc3QiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZtcHJjLCBzdGF0cy5iYXNlX3ZmbXByYyl9LAorCXsicnhfY3N1bV9vZmZsb2FkX2dvb2QiLCBJWEdCRVZGX1NUQVQoaHdfY3N1bV9yeF9nb29kLCB6ZXJvX2Jhc2UpfSwKKwl7InJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiLCBJWEdCRVZGX1NUQVQoaHdfY3N1bV9yeF9lcnJvciwgemVyb19iYXNlKX0sCisJeyJ0eF9jc3VtX29mZmxvYWRfY3R4dCIsIElYR0JFVkZfU1RBVChod19jc3VtX3R4X2dvb2QsIHplcm9fYmFzZSl9LAorCXsicnhfaGVhZGVyX3NwbGl0IiwgSVhHQkVWRl9TVEFUKHJ4X2hkcl9zcGxpdCwgemVyb19iYXNlKX0sCit9OworCisjZGVmaW5lIElYR0JFX1FVRVVFX1NUQVRTX0xFTiAwCisjZGVmaW5lIElYR0JFX0dMT0JBTF9TVEFUU19MRU4JQVJSQVlfU0laRShpeGdiZV9nc3RyaW5nc19zdGF0cykKKworI2RlZmluZSBJWEdCRVZGX1NUQVRTX0xFTiAoSVhHQkVfR0xPQkFMX1NUQVRTX0xFTiArIElYR0JFX1FVRVVFX1NUQVRTX0xFTikKKyNlbmRpZiAvKiBFVEhUT09MX0dTVEFUUyAqLworI2lmZGVmIEVUSFRPT0xfVEVTVAorc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CisJIlJlZ2lzdGVyIHRlc3QgIChvZmZsaW5lKSIsCisJIkxpbmsgdGVzdCAgIChvbi9vZmZsaW5lKSIKK307CisjZGVmaW5lIElYR0JFX1RFU1RfTEVOIChzaXplb2YoaXhnYmVfZ3N0cmluZ3NfdGVzdCkgLyBFVEhfR1NUUklOR19MRU4pCisjZW5kaWYgLyogRVRIVE9PTF9URVNUICovCisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbGlua19zcGVlZCA9IDA7CisJYm9vbCBsaW5rX3VwOworCisJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKKwllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9EVU1NWTE7CisJZWNtZC0+cG9ydCA9IC0xOworCisJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisKKwlpZiAobGlua191cCkgeworCQllY21kLT5zcGVlZCA9IChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSA/CisJCQkgICAgICAgU1BFRURfMTAwMDAgOiBTUEVFRF8xMDAwOworCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9IGVsc2UgeworCQllY21kLT5zcGVlZCA9IC0xOworCQllY21kLT5kdXBsZXggPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBpeGdiZXZmX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuIGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAoZGF0YSkKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQ7CisJZWxzZQorCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQ7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWlmICghYWRhcHRlci0+ZGV2X2Nsb3NlZCkKKwkJCWl4Z2JldmZfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKKwlpZiAoZGF0YSkgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwl9IGVsc2UgeworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CisJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKKwkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBpeGdiZXZmX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBhZGFwdGVyLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5tc2dfZW5hYmxlID0gZGF0YTsKK30KKworI2RlZmluZSBJWEdCRV9HRVRfU1RBVChfQV8sIF9SXykgKF9BXy0+c3RhdHMuX1JfKQorCitzdGF0aWMgY2hhciAqaXhnYmV2Zl9yZWdfbmFtZXNbXSA9IHsKKwkiSVhHQkVfVkZDVFJMIiwKKwkiSVhHQkVfVkZTVEFUVVMiLAorCSJJWEdCRV9WRkxJTktTIiwKKwkiSVhHQkVfVkZSWE1FTVdSQVAiLAorCSJJWEdCRV9WRlJUSU1FUiIsCisJIklYR0JFX1ZURUlDUiIsCisJIklYR0JFX1ZURUlDUyIsCisJIklYR0JFX1ZURUlNUyIsCisJIklYR0JFX1ZURUlNQyIsCisJIklYR0JFX1ZURUlBQyIsCisJIklYR0JFX1ZURUlBTSIsCisJIklYR0JFX1ZURUlUUiIsCisJIklYR0JFX1ZUSVZBUiIsCisJIklYR0JFX1ZUSVZBUl9NSVNDIiwKKwkiSVhHQkVfVkZSREJBTDAiLAorCSJJWEdCRV9WRlJEQkFMMSIsCisJIklYR0JFX1ZGUkRCQUgwIiwKKwkiSVhHQkVfVkZSREJBSDEiLAorCSJJWEdCRV9WRlJETEVOMCIsCisJIklYR0JFX1ZGUkRMRU4xIiwKKwkiSVhHQkVfVkZSREgwIiwKKwkiSVhHQkVfVkZSREgxIiwKKwkiSVhHQkVfVkZSRFQwIiwKKwkiSVhHQkVfVkZSRFQxIiwKKwkiSVhHQkVfVkZSWERDVEwwIiwKKwkiSVhHQkVfVkZSWERDVEwxIiwKKwkiSVhHQkVfVkZTUlJDVEwwIiwKKwkiSVhHQkVfVkZTUlJDVEwxIiwKKwkiSVhHQkVfVkZQU1JUWVBFIiwKKwkiSVhHQkVfVkZUREJBTDAiLAorCSJJWEdCRV9WRlREQkFMMSIsCisJIklYR0JFX1ZGVERCQUgwIiwKKwkiSVhHQkVfVkZUREJBSDEiLAorCSJJWEdCRV9WRlRETEVOMCIsCisJIklYR0JFX1ZGVERMRU4xIiwKKwkiSVhHQkVfVkZUREgwIiwKKwkiSVhHQkVfVkZUREgxIiwKKwkiSVhHQkVfVkZURFQwIiwKKwkiSVhHQkVfVkZURFQxIiwKKwkiSVhHQkVfVkZUWERDVEwwIiwKKwkiSVhHQkVfVkZUWERDVEwxIiwKKwkiSVhHQkVfVkZURFdCQUwwIiwKKwkiSVhHQkVfVkZURFdCQUwxIiwKKwkiSVhHQkVfVkZURFdCQUgwIiwKKwkiSVhHQkVfVkZURFdCQUgxIgorfTsKKworCitzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIChBUlJBWV9TSVpFKGl4Z2JldmZfcmVnX25hbWVzKSkgKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAorCQkJICAgICB2b2lkICpwKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyICpyZWdzX2J1ZmYgPSBwOworCXUzMiByZWdzX2xlbiA9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuKG5ldGRldik7CisJdTggaTsKKworCW1lbXNldChwLCAwLCByZWdzX2xlbik7CisKKwlyZWdzLT52ZXJzaW9uID0gKDEgPDwgMjQpIHwgaHctPnJldmlzaW9uX2lkIDw8IDE2IHwgaHctPmRldmljZV9pZDsKKworCS8qIEdlbmVyYWwgUmVnaXN0ZXJzICovCisJcmVnc19idWZmWzBdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGQ1RSTCk7CisJcmVnc19idWZmWzFdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGU1RBVFVTKTsKKwlyZWdzX2J1ZmZbMl0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CisJcmVnc19idWZmWzNdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUlhNRU1XUkFQKTsKKwlyZWdzX2J1ZmZbNF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSVElNRVIpOworCisJLyogSW50ZXJydXB0ICovCisJLyogZG9uJ3QgcmVhZCBFSUNSIGJlY2F1c2UgaXQgY2FuIGNsZWFyIGludGVycnVwdCBjYXVzZXMsIGluc3RlYWQKKwkgKiByZWFkIEVJQ1Mgd2hpY2ggaXMgYSBzaGFkb3cgYnV0IGRvZXNuJ3QgY2xlYXIgRUlDUiAqLworCXJlZ3NfYnVmZls1XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQ1MpOworCXJlZ3NfYnVmZls2XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQ1MpOworCXJlZ3NfYnVmZls3XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJTVMpOworCXJlZ3NfYnVmZls4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJTUMpOworCXJlZ3NfYnVmZls5XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQUMpOworCXJlZ3NfYnVmZlsxMF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSUFNKTsKKwlyZWdzX2J1ZmZbMTFdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlUUigwKSk7CisJcmVnc19idWZmWzEyXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVElWQVIoMCkpOworCXJlZ3NfYnVmZlsxM10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRJVkFSX01JU0MpOworCisJLyogUmVjZWl2ZSBETUEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMTQgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJEQkFMKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMTYgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJEQkFIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMTggKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJETEVOKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMjAgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJESChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzIyICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSRFQoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyNCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMjYgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlNSUkNUTChpKSk7CisKKwkvKiBSZWNlaXZlICovCisJcmVnc19idWZmWzI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlBTUlRZUEUpOworCisJLyogVHJhbnNtaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMjkgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREQkFMKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMzEgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREQkFIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMzMgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRETEVOKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMzUgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRESChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzM3ICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZURFQoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszOSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbNDEgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREV0JBTChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzQzICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZURFdCQUgoaSkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXhnYmV2Zl9yZWdfbmFtZXMpOyBpKyspCisJCWh3X2RiZyhodywgIiVzXHQlOC44eFxuIiwgaXhnYmV2Zl9yZWdfbmFtZXNbaV0sIHJlZ3NfYnVmZltpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3RybGNweShkcnZpbmZvLT5kcml2ZXIsIGl4Z2JldmZfZHJpdmVyX25hbWUsIDMyKTsKKwlzdHJsY3B5KGRydmluZm8tPnZlcnNpb24sIGl4Z2JldmZfZHJpdmVyX3ZlcnNpb24sIDMyKTsKKworCXN0cmxjcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIDQpOworCXN0cmxjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLCAzMik7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcgPSBhZGFwdGVyLT5yeF9yaW5nOworCisJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBJWEdCRVZGX01BWF9SWEQ7CisJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBJWEdCRVZGX01BWF9UWEQ7CisJcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X3BlbmRpbmcgPSByeF9yaW5nLT5jb3VudDsKKwlyaW5nLT50eF9wZW5kaW5nID0gdHhfcmluZy0+Y291bnQ7CisJcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKK30KKworc3RhdGljIGludCBpeGdiZXZmX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcgPSBOVUxMLCAqcnhfcmluZyA9IE5VTEw7CisJaW50IGksIGVycjsKKwl1MzIgbmV3X3J4X2NvdW50LCBuZXdfdHhfY291bnQ7CisJYm9vbCBuZWVkX3R4X3VwZGF0ZSA9IGZhbHNlOworCWJvb2wgbmVlZF9yeF91cGRhdGUgPSBmYWxzZTsKKworCWlmICgocmluZy0+cnhfbWluaV9wZW5kaW5nKSB8fCAocmluZy0+cnhfanVtYm9fcGVuZGluZykpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV3X3J4X2NvdW50ID0gbWF4KHJpbmctPnJ4X3BlbmRpbmcsICh1MzIpSVhHQkVWRl9NSU5fUlhEKTsKKwluZXdfcnhfY291bnQgPSBtaW4obmV3X3J4X2NvdW50LCAodTMyKUlYR0JFVkZfTUFYX1JYRCk7CisJbmV3X3J4X2NvdW50ID0gQUxJR04obmV3X3J4X2NvdW50LCBJWEdCRV9SRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CisKKwluZXdfdHhfY291bnQgPSBtYXgocmluZy0+dHhfcGVuZGluZywgKHUzMilJWEdCRVZGX01JTl9UWEQpOworCW5ld190eF9jb3VudCA9IG1pbihuZXdfdHhfY291bnQsICh1MzIpSVhHQkVWRl9NQVhfVFhEKTsKKwluZXdfdHhfY291bnQgPSBBTElHTihuZXdfdHhfY291bnQsIElYR0JFX1JFUV9UWF9ERVNDUklQVE9SX01VTFRJUExFKTsKKworCWlmICgobmV3X3R4X2NvdW50ID09IGFkYXB0ZXItPnR4X3JpbmctPmNvdW50KSAmJgorCSAgICAobmV3X3J4X2NvdW50ID09IGFkYXB0ZXItPnJ4X3JpbmctPmNvdW50KSkgeworCQkvKiBub3RoaW5nIHRvIGRvICovCisJCXJldHVybiAwOworCX0KKworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgeworCQl0eF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0eF9yaW5nKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfc2V0dXA7CisJCX0KKwkJbWVtY3B5KHR4X3JpbmcsIGFkYXB0ZXItPnR4X3JpbmcsCisJCSAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3JpbmcpKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQkJdHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKKwkJCWVyciA9IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkJCQkJICZ0eF9yaW5nW2ldKTsKKwkJCWlmIChlcnIpIHsKKwkJCQl3aGlsZSAoaSkgeworCQkJCQlpLS07CisJCQkJCWl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCQkJICAmdHhfcmluZ1tpXSk7CisJCQkJfQorCQkJCWtmcmVlKHR4X3JpbmcpOworCQkJCWdvdG8gZXJyX3NldHVwOworCQkJfQorCQkJdHhfcmluZ1tpXS52X2lkeCA9IGFkYXB0ZXItPnR4X3JpbmdbaV0udl9pZHg7CisJCX0KKwkJbmVlZF90eF91cGRhdGUgPSB0cnVlOworCX0KKworCWlmIChuZXdfcnhfY291bnQgIT0gYWRhcHRlci0+cnhfcmluZ19jb3VudCkgeworCQlyeF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCghcnhfcmluZykgJiYgKG5lZWRfdHhfdXBkYXRlKSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3J4X3NldHVwOworCQl9CisJCW1lbWNweShyeF9yaW5nLCBhZGFwdGVyLT5yeF9yaW5nLAorCQkgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9yaW5nKSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCXJ4X3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7CisJCQllcnIgPSBpeGdiZXZmX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJCSAmcnhfcmluZ1tpXSk7CisJCQlpZiAoZXJyKSB7CisJCQkJd2hpbGUgKGkpIHsKKwkJCQkJaS0tOworCQkJCQlpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkJCQkJCSAgJnJ4X3JpbmdbaV0pOworCQkJCX0KKwkJCQlrZnJlZShyeF9yaW5nKTsKKwkJCQlnb3RvIGVycl9yeF9zZXR1cDsKKwkJCX0KKwkJCXJ4X3JpbmdbaV0udl9pZHggPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnZfaWR4OworCQl9CisJCW5lZWRfcnhfdXBkYXRlID0gdHJ1ZTsKKwl9CisKK2Vycl9yeF9zZXR1cDoKKwkvKiBpZiByaW5ncyBuZWVkIHRvIGJlIHVwZGF0ZWQsIGhlcmUncyB0aGUgcGxhY2UgdG8gZG8gaXQgaW4gb25lIHNob3QgKi8KKwlpZiAobmVlZF90eF91cGRhdGUgfHwgbmVlZF9yeF91cGRhdGUpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJCWl4Z2JldmZfZG93bihhZGFwdGVyKTsKKwl9CisKKwkvKiB0eCAqLworCWlmIChuZWVkX3R4X3VwZGF0ZSkgeworCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwkJYWRhcHRlci0+dHhfcmluZyA9IHR4X3Jpbmc7CisJCXR4X3JpbmcgPSBOVUxMOworCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OworCX0KKworCS8qIHJ4ICovCisJaWYgKG5lZWRfcnhfdXBkYXRlKSB7CisJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworCQlhZGFwdGVyLT5yeF9yaW5nID0gcnhfcmluZzsKKwkJcnhfcmluZyA9IE5VTEw7CisJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CisJfQorCisJLyogc3VjY2VzcyEgKi8KKwllcnIgPSAwOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWl4Z2JldmZfdXAoYWRhcHRlcik7CisKK2Vycl9zZXR1cDoKKwljbGVhcl9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0cmluZ3NldCkKK3sKKyAgICAgICBzd2l0Y2ggKHN0cmluZ3NldCkgeworICAgICAgIGNhc2UgRVRIX1NTX1RFU1Q6CisJICAgICAgIHJldHVybiBJWEdCRV9URVNUX0xFTjsKKyAgICAgICBjYXNlIEVUSF9TU19TVEFUUzoKKwkgICAgICAgcmV0dXJuIElYR0JFX0dMT0JBTF9TVEFUU19MRU47CisgICAgICAgZGVmYXVsdDoKKwkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGk7CisKKwlpeGdiZXZmX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CisJCWNoYXIgKnAgPSAoY2hhciAqKWFkYXB0ZXIgKworCQkJaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CisJCWNoYXIgKmIgPSAoY2hhciAqKWFkYXB0ZXIgKworCQkJaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbaV0uYmFzZV9zdGF0X29mZnNldDsKKwkJZGF0YVtpXSA9ICgoaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0KKwkJCSAgICBzaXplb2YodTY0KSkgPyAqKHU2NCAqKXAgOiAqKHUzMiAqKXApIC0KKwkJCSAgKChpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQorCQkJICAgIHNpemVvZih1NjQpKSA/ICoodTY0ICopYiA6ICoodTMyICopYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsCisJCQkJdTggKmRhdGEpCit7CisJY2hhciAqcCA9IChjaGFyICopZGF0YTsKKwlpbnQgaTsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfVEVTVDoKKwkJbWVtY3B5KGRhdGEsICppeGdiZV9nc3RyaW5nc190ZXN0LAorCQkgICAgICAgSVhHQkVfVEVTVF9MRU4gKiBFVEhfR1NUUklOR19MRU4pOworCQlicmVhazsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX0dMT0JBTF9TVEFUU19MRU47IGkrKykgeworCQkJbWVtY3B5KHAsIGl4Z2JlX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9saW5rX3Rlc3Qoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJYm9vbCBsaW5rX3VwOworCXUzMiBsaW5rX3NwZWVkID0gMDsKKwkqZGF0YSA9IDA7CisKKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIHRydWUpOworCWlmICghbGlua191cCkKKwkJKmRhdGEgPSAxOworCisJcmV0dXJuICpkYXRhOworfQorCisvKiBldGh0b29sIHJlZ2lzdGVyIHRlc3QgZGF0YSAqLworc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgeworCXUxNiByZWc7CisJdTggIGFycmF5X2xlbjsKKwl1OCAgdGVzdF90eXBlOworCXUzMiBtYXNrOworCXUzMiB3cml0ZTsKK307CisKKy8qIEluIHRoZSBoYXJkd2FyZSwgcmVnaXN0ZXJzIGFyZSBsYWlkIG91dCBlaXRoZXIgc2luZ2x5LCBpbiBhcnJheXMKKyAqIHNwYWNlZCAweDQwIGJ5dGVzIGFwYXJ0LCBvciBpbiBjb250aWd1b3VzIHRhYmxlcy4gIFdlIGFzc3VtZQorICogbW9zdCB0ZXN0cyB0YWtlIHBsYWNlIG9uIGFycmF5cyBvciBzaW5nbGUgcmVnaXN0ZXJzIChoYW5kbGVkCisgKiBhcyBhIHNpbmdsZS1lbGVtZW50IGFycmF5KSBhbmQgc3BlY2lhbC1jYXNlIHRoZSB0YWJsZXMuCisgKiBUYWJsZSB0ZXN0cyBhcmUgYWx3YXlzIHBhdHRlcm4gdGVzdHMuCisgKgorICogV2UgYWxzbyBtYWtlIHByb3Zpc2lvbiBmb3Igc29tZSByZXF1aXJlZCBzZXR1cCBzdGVwcyBieSBzcGVjaWZ5aW5nCisgKiByZWdpc3RlcnMgdG8gYmUgd3JpdHRlbiB3aXRob3V0IGFueSByZWFkLWJhY2sgdGVzdGluZy4KKyAqLworCisjZGVmaW5lIFBBVFRFUk5fVEVTVAkxCisjZGVmaW5lIFNFVF9SRUFEX1RFU1QJMgorI2RlZmluZSBXUklURV9OT19URVNUCTMKKyNkZWZpbmUgVEFCTEUzMl9URVNUCTQKKyNkZWZpbmUgVEFCTEU2NF9URVNUX0xPCTUKKyNkZWZpbmUgVEFCTEU2NF9URVNUX0hJCTYKKworLyogZGVmYXVsdCBWRiByZWdpc3RlciB0ZXN0ICovCitzdGF0aWMgc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgcmVnX3Rlc3RfdmZbXSA9IHsKKwl7IElYR0JFX1ZGUkRCQUwoMCksIDIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkY4MCB9LAorCXsgSVhHQkVfVkZSREJBSCgwKSwgMiwgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBJWEdCRV9WRlJETEVOKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4MDAwRkZGODAsIDB4MDAwRkZGRkYgfSwKKwl7IElYR0JFX1ZGUlhEQ1RMKDApLCAyLCBXUklURV9OT19URVNULCAwLCBJWEdCRV9SWERDVExfRU5BQkxFIH0sCisJeyBJWEdCRV9WRlJEVCgwKSwgMiwgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCisJeyBJWEdCRV9WRlJYRENUTCgwKSwgMiwgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAorCXsgSVhHQkVfVkZUREJBTCgwKSwgMiwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBJWEdCRV9WRlREQkFIKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IElYR0JFX1ZGVERMRU4oMCksIDIsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkY4MCwgMHgwMDBGRkY4MCB9LAorCXsgMCwgMCwgMCwgMCB9Cit9OworCisjZGVmaW5lIFJFR19QQVRURVJOX1RFU1QoUiwgTSwgVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdTMyIHBhdCwgdmFsLCBiZWZvcmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwljb25zdCB1MzIgX3Rlc3RbXSA9IHsweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGfTsgXAorCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRShfdGVzdCk7IHBhdCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICBcCisJCWJlZm9yZSA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgXAorCQl3cml0ZWwoKF90ZXN0W3BhdF0gJiBXKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgIFwKKwkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmICh2YWwgIT0gKF90ZXN0W3BhdF0gJiBXICYgTSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJaHdfZGJnKCZhZGFwdGVyLT5odywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJInBhdHRlcm4gdGVzdCByZWcgJTA0WCBmYWlsZWQ6IGdvdCAiICAgICAgICAgICAgICAgICAgXAorCQkJIjB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJUiwgdmFsLCAoX3Rlc3RbcGF0XSAmIFcgJiBNKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJKmRhdGEgPSBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJd3JpdGVsKGJlZm9yZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgXAorCQkJcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJd3JpdGVsKGJlZm9yZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBSRUdfU0VUX0FORF9DSEVDSyhSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXUzMiB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl3cml0ZWwoKFcgJiBNKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKChXICYgTSkgIT0gKHZhbCAmIE0pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcHJpbnRrKEtFUk5fRVJSICJzZXQvY2hlY2sgcmVnICUwNFggdGVzdCBmYWlsZWQ6IGdvdCAweCUwOFggIiBcCisJCQkJICJleHBlY3RlZCAweCUwOFhcbiIsIFIsICh2YWwgJiBNKSwgKFcgJiBNKSk7IFwKKwkJKmRhdGEgPSBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgXAorCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9yZWdfdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCit7CisJc3RydWN0IGl4Z2JldmZfcmVnX3Rlc3QgKnRlc3Q7CisJdTMyIGk7CisKKwl0ZXN0ID0gcmVnX3Rlc3RfdmY7CisKKwkvKgorCSAqIFBlcmZvcm0gdGhlIHJlZ2lzdGVyIHRlc3QsIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGVzdCB0YWJsZQorCSAqIHVudGlsIHdlIGVpdGhlciBmYWlsIG9yIHJlYWNoIHRoZSBudWxsIGVudHJ5LgorCSAqLworCXdoaWxlICh0ZXN0LT5yZWcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRlc3QtPmFycmF5X2xlbjsgaSsrKSB7CisJCQlzd2l0Y2ggKHRlc3QtPnRlc3RfdHlwZSkgeworCQkJY2FzZSBQQVRURVJOX1RFU1Q6CisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDB4NDApLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0VUX1JFQURfVEVTVDoKKwkJCQlSRUdfU0VUX0FORF9DSEVDSyh0ZXN0LT5yZWcgKyAoaSAqIDB4NDApLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgV1JJVEVfTk9fVEVTVDoKKwkJCQl3cml0ZWwodGVzdC0+d3JpdGUsCisJCQkJICAgICAgIChhZGFwdGVyLT5ody5od19hZGRyICsgdGVzdC0+cmVnKQorCQkJCSAgICAgICArIChpICogMHg0MCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBUQUJMRTMyX1RFU1Q6CisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDQpLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVEFCTEU2NF9URVNUX0xPOgorCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsgKGkgKiA4KSwKKwkJCQkJCXRlc3QtPm1hc2ssCisJCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRBQkxFNjRfVEVTVF9ISToKKwkJCQlSRUdfUEFUVEVSTl9URVNUKCh0ZXN0LT5yZWcgKyA0KSArIChpICogOCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXRlc3QrKzsKKwl9CisKKwkqZGF0YSA9IDA7CisJcmV0dXJuICpkYXRhOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRoX3Rlc3QsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlib29sIGlmX3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CisKKwlzZXRfYml0KF9fSVhHQkVWRl9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCWlmIChldGhfdGVzdC0+ZmxhZ3MgPT0gRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQkvKiBPZmZsaW5lIHRlc3RzICovCisKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywgIm9mZmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisKKwkJLyogTGluayB0ZXN0IHBlcmZvcm1lZCBiZWZvcmUgaGFyZHdhcmUgcmVzZXQgc28gYXV0b25lZyBkb2Vzbid0CisJCSAqIGludGVyZmVyZSB3aXRoIHRlc3QgcmVzdWx0ICovCisJCWlmIChpeGdiZXZmX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVsxXSkpCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCisJCWlmIChpZl9ydW5uaW5nKQorCQkJLyogaW5kaWNhdGUgd2UncmUgaW4gdGVzdCBtb2RlICovCisJCQlkZXZfY2xvc2UobmV0ZGV2KTsKKwkJZWxzZQorCQkJaXhnYmV2Zl9yZXNldChhZGFwdGVyKTsKKworCQlod19kYmcoJmFkYXB0ZXItPmh3LCAicmVnaXN0ZXIgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCWlmIChpeGdiZXZmX3JlZ190ZXN0KGFkYXB0ZXIsICZkYXRhWzBdKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkJaXhnYmV2Zl9yZXNldChhZGFwdGVyKTsKKworCQljbGVhcl9iaXQoX19JWEdCRVZGX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJCWlmIChpZl9ydW5uaW5nKQorCQkJZGV2X29wZW4obmV0ZGV2KTsKKwl9IGVsc2UgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LCAib25saW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOworCQkvKiBPbmxpbmUgdGVzdHMgKi8KKwkJaWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzFdKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkJLyogT25saW5lIHRlc3RzIGFyZW4ndCBydW47IHBhc3MgYnkgZGVmYXVsdCAqLworCQlkYXRhWzBdID0gMDsKKworCQljbGVhcl9iaXQoX19JWEdCRVZGX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJfQorCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDQgKiAxMDAwKTsKK30KKworc3RhdGljIGludCBpeGdiZXZmX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJaWYgKCFhZGFwdGVyLT5kZXZfY2xvc2VkKQorCQkJaXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JldmZfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBpeGdiZXZmX2dldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8gICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiAgICAgICAgICAgPSBpeGdiZXZmX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MgICAgICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3JlZ3MsCisJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBpeGdiZXZmX253YXlfcmVzZXQsCisJLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfcmluZ3BhcmFtICAgICAgICAgID0gaXhnYmV2Zl9nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtICAgICAgICAgID0gaXhnYmV2Zl9zZXRfcmluZ3BhcmFtLAorCS5nZXRfcnhfY3N1bSAgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gICAgICAgICAgICA9IGl4Z2JldmZfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSAgICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtLAorCS5nZXRfc2cgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X21zZ2xldmVsICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfbXNnbGV2ZWwsCisJLmdldF90c28gICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gICAgICAgICAgICAgICAgPSBpeGdiZXZmX3NldF90c28sCisJLnNlbGZfdGVzdCAgICAgICAgICAgICAgPSBpeGdiZXZmX2RpYWdfdGVzdCwKKwkuZ2V0X3NzZXRfY291bnQgICAgICAgICA9IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQsCisJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZXZmX2dldF9zdHJpbmdzLAorCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gaXhnYmV2Zl9nZXRfZXRodG9vbF9zdGF0cywKK307CisKK3ZvaWQgaXhnYmV2Zl9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmaXhnYmV2Zl9ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmYuaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDE1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmYuaApAQCAtMCwwICsxLDMxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVhHQkVWRl9IXworI2RlZmluZSBfSVhHQkVWRl9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2Zi5oIgorCisvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAorICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCitzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgeworCXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCBkbWE7CisJdW5zaWduZWQgbG9uZyB0aW1lX3N0YW1wOworCXUxNiBsZW5ndGg7CisJdTE2IG5leHRfdG9fd2F0Y2g7CisJdTE2IG1hcHBlZF9hc19wYWdlOworfTsKKworc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgZG1hOworCXN0cnVjdCBwYWdlICpwYWdlOworCWRtYV9hZGRyX3QgcGFnZV9kbWE7CisJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworfTsKKworc3RydWN0IGl4Z2JldmZfcmluZyB7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcjsgIC8qIGJhY2tsaW5rICovCisJdm9pZCAqZGVzYzsJCQkvKiBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5ICovCisJZG1hX2FkZHJfdCBkbWE7CQkJLyogcGh5cy4gYWRkcmVzcyBvZiBkZXNjcmlwdG9yIHJpbmcgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsJCS8qIGxlbmd0aCBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBjb3VudDsJCS8qIGFtb3VudCBvZiBkZXNjcmlwdG9ycyAqLworCXVuc2lnbmVkIGludCBuZXh0X3RvX3VzZTsKKwl1bnNpZ25lZCBpbnQgbmV4dF90b19jbGVhbjsKKworCWludCBxdWV1ZV9pbmRleDsgLyogbmVlZGVkIGZvciBtdWx0aXF1ZXVlIHF1ZXVlIG1hbmFnZW1lbnQgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJCXN0cnVjdCBpeGdiZXZmX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87CisJfTsKKworCXUxNiBoZWFkOworCXUxNiB0YWlsOworCisJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOworCXVuc2lnbmVkIGludCB0b3RhbF9wYWNrZXRzOworCisJdTE2IHJlZ19pZHg7IC8qIGhvbGRzIHRoZSBzcGVjaWFsIHZhbHVlIHRoYXQgZ2V0cyB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIKKwkJICAgICAgKiBvZmZzZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmluZywgd2hpY2ggaXMgZGlmZmVyZW50CisJCSAgICAgICogZm9yIERDQiBhbmQgUlNTIG1vZGVzICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisJLyogY3B1IGZvciB0eCBxdWV1ZSAqLworCWludCBjcHU7CisjZW5kaWYKKworCXU2NCB2X2lkeDsgLyogbWFwcyBkaXJlY3RseSB0byB0aGUgaW5kZXggZm9yIHRoaXMgcmluZyBpbiB0aGUgaGFyZHdhcmUKKwkJICAgICogdmVjdG9yIGFycmF5LCBjYW4gYWxzbyBiZSB1c2VkIGZvciBmaW5kaW5nIHRoZSBiaXQgaW4gRUlDUgorCQkgICAgKiBhbmQgZnJpZW5kcyB0aGF0IHJlcHJlc2VudHMgdGhlIHZlY3RvciBmb3IgdGhpcyByaW5nICovCisKKwl1MTYgd29ya19saW1pdDsgICAgICAgICAgICAgICAgLyogbWF4IHdvcmsgcGVyIGludGVycnVwdCAqLworCXUxNiByeF9idWZfbGVuOworfTsKKworZW51bSBpeGdiZXZmX3JpbmdfZl9lbnVtIHsKKwlSSU5HX0ZfTk9ORSA9IDAsCisJUklOR19GX0FSUkFZX1NJWkUgICAgICAvKiBtdXN0IGJlIGxhc3QgaW4gZW51bSBzZXQgKi8KK307CisKK3N0cnVjdCBpeGdiZXZmX3JpbmdfZmVhdHVyZSB7CisJaW50IGluZGljZXM7CisJaW50IG1hc2s7Cit9OworCisvKiBIb3cgbWFueSBSeCBCdWZmZXJzIGRvIHdlIGJ1bmRsZSBpbnRvIG9uZSB3cml0ZSB0byB0aGUgaGFyZHdhcmUgPyAqLworI2RlZmluZSBJWEdCRVZGX1JYX0JVRkZFUl9XUklURQkxNgkvKiBNdXN0IGJlIHBvd2VyIG9mIDIgKi8KKworI2RlZmluZSBNQVhfUlhfUVVFVUVTIDEKKyNkZWZpbmUgTUFYX1RYX1FVRVVFUyAxCisKKyNkZWZpbmUgSVhHQkVWRl9ERUZBVUxUX1RYRCAgIDEwMjQKKyNkZWZpbmUgSVhHQkVWRl9ERUZBVUxUX1JYRCAgIDUxMgorI2RlZmluZSBJWEdCRVZGX01BWF9UWEQgICAgICAgNDA5NgorI2RlZmluZSBJWEdCRVZGX01JTl9UWEQgICAgICAgNjQKKyNkZWZpbmUgSVhHQkVWRl9NQVhfUlhEICAgICAgIDQwOTYKKyNkZWZpbmUgSVhHQkVWRl9NSU5fUlhEICAgICAgIDY0CisKKy8qIFN1cHBvcnRlZCBSeCBCdWZmZXIgU2l6ZXMgKi8KKyNkZWZpbmUgSVhHQkVWRl9SWEJVRkZFUl82NCAgICA2NCAgICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCisjZGVmaW5lIElYR0JFVkZfUlhCVUZGRVJfMTI4ICAgMTI4ICAgIC8qIFVzZWQgZm9yIHBhY2tldCBzcGxpdCAqLworI2RlZmluZSBJWEdCRVZGX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KKyNkZWZpbmUgSVhHQkVWRl9SWEJVRkZFUl8yMDQ4ICAyMDQ4CisjZGVmaW5lIElYR0JFVkZfTUFYX1JYQlVGRkVSICAgMTYzODQgIC8qIGxhcmdlc3Qgc2l6ZSBmb3Igc2luZ2xlIGRlc2NyaXB0b3IgKi8KKworI2RlZmluZSBJWEdCRVZGX1JYX0hEUl9TSVpFIElYR0JFVkZfUlhCVUZGRVJfMjU2CisKKyNkZWZpbmUgTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUgKFZMQU5fRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKQorCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX0NTVU0JCSh1MzIpKDEpCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU4JCSh1MzIpKDEgPDwgMSkKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVFNPCQkodTMyKSgxIDw8IDIpCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX0lQVjQJCSh1MzIpKDEgPDwgMykKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfRkNPRQkJKHUzMikoMSA8PCA0KQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19GU08JCSh1MzIpKDEgPDwgNSkKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9QUklPX01BU0sJMHgwMDAwZTAwMAorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUCTE2CisKKy8qIE1BWF9NU0lYX1FfVkVDVE9SUyBvZiB0aGVzZSBhcmUgYWxsb2NhdGVkLAorICogYnV0IHdlIG9ubHkgdXNlIG9uZSBwZXIgcXVldWUtc3BlY2lmaWMgdmVjdG9yLgorICovCitzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciB7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlERUNMQVJFX0JJVE1BUChyeHJfaWR4LCBNQVhfUlhfUVVFVUVTKTsgLyogUnggcmluZyBpbmRpY2VzICovCisJREVDTEFSRV9CSVRNQVAodHhyX2lkeCwgTUFYX1RYX1FVRVVFUyk7IC8qIFR4IHJpbmcgaW5kaWNlcyAqLworCXU4IHJ4cl9jb3VudDsgICAgIC8qIFJ4IHJpbmcgY291bnQgYXNzaWduZWQgdG8gdGhpcyB2ZWN0b3IgKi8KKwl1OCB0eHJfY291bnQ7ICAgICAvKiBUeCByaW5nIGNvdW50IGFzc2lnbmVkIHRvIHRoaXMgdmVjdG9yICovCisJdTggdHhfaXRyOworCXU4IHJ4X2l0cjsKKwl1MzIgZWl0cjsKKwlpbnQgdl9pZHg7CSAgLyogdmVjdG9yIGluZGV4IGluIGxpc3QgKi8KK307CisKKy8qIEhlbHBlciBtYWNyb3MgdG8gc3dpdGNoIGJldHdlZW4gaW50cy9zZWMgYW5kIHdoYXQgdGhlIHJlZ2lzdGVyIHVzZXMuCisgKiBBbmQgeWVzLCBpdCdzIHRoZSBzYW1lIG1hdGggZ29pbmcgYm90aCB3YXlzLiAgVGhlIGxvd2VzdCB2YWx1ZQorICogc3VwcG9ydGVkIGJ5IGFsbCBvZiB0aGUgaXhnYmUgaGFyZHdhcmUgaXMgOC4KKyAqLworI2RlZmluZSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoX2VpdHIpIFwKKwkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDgpCisjZGVmaW5lIEVJVFJfUkVHX1RPX0lOVFNfUEVSX1NFQyBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcKKworI2RlZmluZSBJWEdCRV9ERVNDX1VOVVNFRChSKSBcCisJKCgoKFIpLT5uZXh0X3RvX2NsZWFuID4gKFIpLT5uZXh0X3RvX3VzZSkgPyAwIDogKFIpLT5jb3VudCkgKyBcCisJKFIpLT5uZXh0X3RvX2NsZWFuIC0gKFIpLT5uZXh0X3RvX3VzZSAtIDEpCisKKyNkZWZpbmUgSVhHQkVfUlhfREVTQ19BRFYoUiwgaSkJICAgIFwKKwkoJigoKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQorI2RlZmluZSBJWEdCRV9UWF9ERVNDX0FEVihSLCBpKQkgICAgXAorCSgmKCgodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCisjZGVmaW5lIElYR0JFX1RYX0NUWFRERVNDX0FEVihSLCBpKQkgICAgXAorCSgmKCgoc3RydWN0IGl4Z2JlX2Fkdl90eF9jb250ZXh0X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCisKKyNkZWZpbmUgSVhHQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgICAgICAgIDE2MTI4CisKKyNkZWZpbmUgT1RIRVJfVkVDVE9SIDEKKyNkZWZpbmUgTk9OX1FfVkVDVE9SUyAoT1RIRVJfVkVDVE9SKQorCisjZGVmaW5lIE1BWF9NU0lYX1FfVkVDVE9SUyAyCisjZGVmaW5lIE1BWF9NU0lYX0NPVU5UIDIKKworI2RlZmluZSBNSU5fTVNJWF9RX1ZFQ1RPUlMgMgorI2RlZmluZSBNSU5fTVNJWF9DT1VOVCAoTUlOX01TSVhfUV9WRUNUT1JTICsgTk9OX1FfVkVDVE9SUykKKworLyogYm9hcmQgc3BlY2lmaWMgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IGl4Z2JldmZfYWRhcHRlciB7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisjaWZkZWYgTkVUSUZfRl9IV19WTEFOX1RYCisJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOworI2VuZGlmCisJdTE2IGJkX251bWJlcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3JbTUFYX01TSVhfUV9WRUNUT1JTXTsKKwljaGFyIG5hbWVbTUFYX01TSVhfQ09VTlRdW0lGTkFNU0laICsgOV07CisKKwkvKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAqLworCXUzMiBpdHJfc2V0dGluZzsKKwl1MTYgZWl0cl9sb3c7CisJdTE2IGVpdHJfaGlnaDsKKworCS8qIFRYICovCisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZzsJLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlpbnQgbnVtX3R4X3F1ZXVlczsKKwl1NjQgcmVzdGFydF9xdWV1ZTsKKwl1NjQgaHdfY3N1bV90eF9nb29kOworCXU2NCBsc2NfaW50OworCXU2NCBod190c29fY3R4dDsKKwl1NjQgaHdfdHNvNl9jdHh0OworCXUzMiB0eF90aW1lb3V0X2NvdW50OworCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CisKKwkvKiBSWCAqLworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3Jpbmc7CS8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCisJaW50IG51bV9yeF9xdWV1ZXM7CisJaW50IG51bV9yeF9wb29sczsgICAgICAgICAgICAgICAvKiA9PSBudW1fcnhfcXVldWVzIGluIDgyNTk4ICovCisJaW50IG51bV9yeF9xdWV1ZXNfcGVyX3Bvb2w7CS8qIDEgaWYgODI1OTgsIGNhbiBiZSBtYW55IGlmIDgyNTk5ICovCisJdTY0IGh3X2NzdW1fcnhfZXJyb3I7CisJdTY0IGh3X3J4X25vX2RtYV9yZXNvdXJjZXM7CisJdTY0IGh3X2NzdW1fcnhfZ29vZDsKKwl1NjQgbm9uX2VvcF9kZXNjczsKKwlpbnQgbnVtX21zaXhfdmVjdG9yczsKKwlpbnQgbWF4X21zaXhfcV92ZWN0b3JzOyAgICAgICAgIC8qIHRydWUgY291bnQgb2YgcV92ZWN0b3JzIGZvciBkZXZpY2UgKi8KKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nX2ZlYXR1cmUgcmluZ19mZWF0dXJlW1JJTkdfRl9BUlJBWV9TSVpFXTsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOworCisJdTY0IHJ4X2hkcl9zcGxpdDsKKwl1MzIgYWxsb2NfcnhfcGFnZV9mYWlsZWQ7CisJdTMyIGFsbG9jX3J4X2J1ZmZfZmFpbGVkOworCisJLyogU29tZSBmZWF0dXJlcyBuZWVkIHRyaS1zdGF0ZSBjYXBhYmlsaXR5LAorCSAqIHRodXMgdGhlIGFkZGl0aW9uYWwgKl9DQVBBQkxFIGZsYWdzLgorCSAqLworCXUzMiBmbGFnczsKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQgICAgICAgICAgICAgICh1MzIpKDEpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfMUJVRl9DQVBBQkxFICAgICAgICAgICAgICAodTMyKSgxIDw8IDEpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfUFNfQ0FQQUJMRSAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDIpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDMpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fTkVUUE9MTCAgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDQpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU1JUl9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDUpCisjZGVmaW5lIElYR0JFX0ZMQUdfTVFfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDYpCisjZGVmaW5lIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSAgICAgICAgICAgICAodTMyKSgxIDw8IDcpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fV0FUQ0hET0dfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDgpCisJLyogT1MgZGVmaW5lZCBzdHJ1Y3RzICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CisKKwkvKiBzdHJ1Y3RzIGRlZmluZWQgaW4gaXhnYmVfdmYuaCAqLworCXN0cnVjdCBpeGdiZV9odyBodzsKKwl1MTYgbXNnX2VuYWJsZTsKKwlzdHJ1Y3QgaXhnYmV2Zl9od19zdGF0cyBzdGF0czsKKwl1NjQgemVyb19iYXNlOworCS8qIEludGVycnVwdCBUaHJvdHRsZSBSYXRlICovCisJdTMyIGVpdHJfcGFyYW07CisKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXUzMiAqY29uZmlnX3NwYWNlOworCXU2NCB0eF9idXN5OworCXVuc2lnbmVkIGludCB0eF9yaW5nX2NvdW50OworCXVuc2lnbmVkIGludCByeF9yaW5nX2NvdW50OworCisJdTMyIGxpbmtfc3BlZWQ7CisJYm9vbCBsaW5rX3VwOworCXVuc2lnbmVkIGxvbmcgbGlua19jaGVja190aW1lb3V0OworCisJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CisJYm9vbCBuZXRkZXZfcmVnaXN0ZXJlZDsKKwlib29sIGRldl9jbG9zZWQ7Cit9OworCitlbnVtIGl4YmdldmZfc3RhdGVfdCB7CisJX19JWEdCRVZGX1RFU1RJTkcsCisJX19JWEdCRVZGX1JFU0VUVElORywKKwlfX0lYR0JFVkZfRE9XTgorfTsKKworZW51bSBpeGdiZXZmX2JvYXJkcyB7CisJYm9hcmRfODI1OTlfdmYsCit9OworCitleHRlcm4gc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX3ZmX2luZm87CitleHRlcm4gc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIGl4Z2JldmZfbWJ4X29wczsKKworLyogbmVlZGVkIGJ5IGV0aHRvb2wuYyAqLworZXh0ZXJuIGNoYXIgaXhnYmV2Zl9kcml2ZXJfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgaXhnYmV2Zl9kcml2ZXJfdmVyc2lvbltdOworCitleHRlcm4gaW50IGl4Z2JldmZfdXAoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZXZmX2Rvd24oc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZXZmX3JlaW5pdF9sb2NrZWQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZXZmX3Jlc2V0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgaXhnYmV2Zl9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gaW50IGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiwKKwkJCQkgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICopOworZXh0ZXJuIGludCBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICosCisJCQkJICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqLAorCQkJCSAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKik7CitleHRlcm4gdm9pZCBpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiwKKwkJCQkgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICopOworZXh0ZXJuIHZvaWQgaXhnYmV2Zl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CisKKyNpZmRlZiBFVEhUT09MX09QU19DT01QQVQKK2V4dGVybiBpbnQgZXRodG9vbF9pb2N0bChzdHJ1Y3QgaWZyZXEgKmlmcik7CisKKyNlbmRpZgorZXh0ZXJuIHZvaWQgaXhnYmVfbmFwaV9hZGRfYWxsKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgaXhnYmVfbmFwaV9kZWxfYWxsKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjaWZkZWYgREVCVUcKK2V4dGVybiBjaGFyICppeGdiZXZmX2dldF9od19kZXZfbmFtZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKKyNkZWZpbmUgaHdfZGJnKGh3LCBmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIGl4Z2JldmZfZ2V0X2h3X2Rldl9uYW1lKGh3KSwgIyNhcmcpCisjZWxzZQorI2RlZmluZSBod19kYmcoaHcsIGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX0lYR0JFVkZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTQ0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCkBAIC0wLDAgKzEsMzU3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgQ29weXJpZ2h0IChjKTIwMDYgLSAyMDA3IE15cmljb20sIEluYy4gZm9yIHNvbWUgTFJPIHNwZWNpZmljIGNvZGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorCisjaW5jbHVkZSAiaXhnYmV2Zi5oIgorCitjaGFyIGl4Z2JldmZfZHJpdmVyX25hbWVbXSA9ICJpeGdiZXZmIjsKK3N0YXRpYyBjb25zdCBjaGFyIGl4Z2JldmZfZHJpdmVyX3N0cmluZ1tdID0KKwkiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvbiI7CisKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC4wLWswIgorY29uc3QgY2hhciBpeGdiZXZmX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKK3N0YXRpYyBjaGFyIGl4Z2JldmZfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppeGdiZXZmX2luZm9fdGJsW10gPSB7CisJW2JvYXJkXzgyNTk5X3ZmXSA9ICZpeGdiZXZmX3ZmX2luZm8sCit9OworCisvKiBpeGdiZXZmX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCisgKgorICogV2lsZGNhcmQgZW50cmllcyAoUENJX0FOWV9JRCkgc2hvdWxkIGNvbWUgbGFzdAorICogTGFzdCBlbnRyeSBtdXN0IGJlIGFsbCAwcworICoKKyAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAorICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7CisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfVkYpLAorCWJvYXJkXzgyNTk5X3ZmfSwKKworCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7MCwgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpeGdiZXZmX3BjaV90YmwpOworCitNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbChSKSA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworCisjZGVmaW5lIERFRkFVTFRfREVCVUdfTEVWRUxfU0hJRlQgMworCisvKiBmb3J3YXJkIGRlY2xzICovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9pdHJfbXNpeChzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IpOworc3RhdGljIHZvaWQgaXhnYmV2Zl93cml0ZV9laXRyKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCB2X2lkeCwKKwkJCSAgICAgICB1MzIgaXRyX3JlZyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX3JlbGVhc2VfcnhfZGVzYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nLAorCQkJCQkgICB1MzIgdmFsKQoreworCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCisJd21iKCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJEVChyeF9yaW5nLT5yZWdfaWR4KSwgdmFsKTsKK30KKworLyoKKyAqIGl4Z2JlX3NldF9pdmFyIC0gc2V0IHRoZSBJVkFSIHJlZ2lzdGVycywgbWFwcGluZyBpbnRlcnJ1cHQgY2F1c2VzIHRvIHZlY3RvcnMKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0CisgKiBAZGlyZWN0aW9uOiAwIGZvciBSeCwgMSBmb3IgVHgsIC0xIGZvciBvdGhlciBjYXVzZXMKKyAqIEBxdWV1ZTogcXVldWUgdG8gbWFwIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCB0bworICogQG1zaXhfdmVjdG9yOiB0aGUgdmVjdG9yIHRvIG1hcCB0byB0aGUgY29ycmVzcG9uZGluZyBxdWV1ZQorICoKKyAqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9zZXRfaXZhcihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCBzOCBkaXJlY3Rpb24sCisJCQkgICAgIHU4IHF1ZXVlLCB1OCBtc2l4X3ZlY3RvcikKK3sKKwl1MzIgaXZhciwgaW5kZXg7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpZiAoZGlyZWN0aW9uID09IC0xKSB7CisJCS8qIG90aGVyIGNhdXNlcyAqLworCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJaXZhciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVElWQVJfTUlTQyk7CisJCWl2YXIgJj0gfjB4RkY7CisJCWl2YXIgfD0gbXNpeF92ZWN0b3I7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRJVkFSX01JU0MsIGl2YXIpOworCX0gZWxzZSB7CisJCS8qIHR4IG9yIHJ4IGNhdXNlcyAqLworCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJaW5kZXggPSAoKDE2ICogKHF1ZXVlICYgMSkpICsgKDggKiBkaXJlY3Rpb24pKTsKKwkJaXZhciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVElWQVIocXVldWUgPj4gMSkpOworCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8IGluZGV4KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVElWQVIocXVldWUgPj4gMSksIGl2YXIpOworCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyCisJCQkJCSAgICAgICAqdHhfYnVmZmVyX2luZm8pCit7CisJaWYgKHR4X2J1ZmZlcl9pbmZvLT5kbWEpIHsKKwkJaWYgKHR4X2J1ZmZlcl9pbmZvLT5tYXBwZWRfYXNfcGFnZSkKKwkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJICAgICAgIHR4X2J1ZmZlcl9pbmZvLT5kbWEsCisJCQkJICAgICAgIHR4X2J1ZmZlcl9pbmZvLT5sZW5ndGgsCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQllbHNlCisJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCSB0eF9idWZmZXJfaW5mby0+ZG1hLAorCQkJCQkgdHhfYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gMDsKKwl9CisJaWYgKHR4X2J1ZmZlcl9pbmZvLT5za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkodHhfYnVmZmVyX2luZm8tPnNrYik7CisJCXR4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCX0KKwl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CisJLyogdHhfYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmV2Zl9jaGVja190eF9oYW5nKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nLAorCQkJCQkgdW5zaWduZWQgaW50IGVvcCkKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBoZWFkLCB0YWlsOworCisJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGVvcCAqLworCWhlYWQgPSByZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPmhlYWQpOworCXRhaWwgPSByZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gZmFsc2U7CisJaWYgKChoZWFkICE9IHRhaWwpICYmCisJICAgIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCAmJgorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArIEhaKSkgeworCQkvKiBkZXRlY3RlZCBUeCB1bml0IGhhbmcgKi8KKwkJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2M7CisJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKKwkJICAgICAgICIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlZD5cbiIKKwkJICAgICAgICIgIFRESCwgVERUICAgICAgICAgICAgIDwleD4sIDwleD5cbiIKKwkJICAgICAgICIgIG5leHRfdG9fdXNlICAgICAgICAgIDwleD5cbiIKKwkJICAgICAgICIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5cbiIKKwkJICAgICAgICJ0eF9idWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgorCQkgICAgICAgIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIKKwkJICAgICAgICIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAorCQkgICAgICAgdHhfcmluZy0+cXVldWVfaW5kZXgsCisJCSAgICAgICBoZWFkLCB0YWlsLAorCQkgICAgICAgdHhfcmluZy0+bmV4dF90b191c2UsIGVvcCwKKwkJICAgICAgIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwgamlmZmllcyk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworI2RlZmluZSBJWEdCRV9NQVhfVFhEX1BXUgkxNAorI2RlZmluZSBJWEdCRV9NQVhfREFUQV9QRVJfVFhECSgxIDw8IElYR0JFX01BWF9UWERfUFdSKQorCisvKiBUeCBEZXNjcmlwdG9ycyBuZWVkZWQsIHdvcnN0IGNhc2UgKi8KKyNkZWZpbmUgVFhEX1VTRV9DT1VOVChTKSAoKChTKSA+PiBJWEdCRV9NQVhfVFhEX1BXUikgKyBcCisJCQkgKCgoUykgJiAoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCAtIDEpKSA/IDEgOiAwKSkKKyNpZmRlZiBNQVhfU0tCX0ZSQUdTCisjZGVmaW5lIERFU0NfTkVFREVEIChUWERfVVNFX0NPVU5UKElYR0JFX01BWF9EQVRBX1BFUl9UWEQpIC8qIHNrYi0+ZGF0YSAqLyArIFwKKwlNQVhfU0tCX0ZSQUdTICogVFhEX1VTRV9DT1VOVChQQUdFX1NJWkUpICsgMSkgICAgICAvKiBmb3IgY29udGV4dCAqLworI2Vsc2UKKyNkZWZpbmUgREVTQ19ORUVERUQgVFhEX1VTRV9DT1VOVChJWEdCRV9NQVhfREFUQV9QRVJfVFhEKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAdHhfcmluZzogdHggcmluZyB0byBjbGVhbgorICoqLworc3RhdGljIGJvb2wgaXhnYmV2Zl9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MsICplb3BfZGVzYzsKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXVuc2lnbmVkIGludCBpLCBlb3AsIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXMgPSAwLCB0b3RhbF9wYWNrZXRzID0gMDsKKworCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCWVvcCA9IHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CisJZW9wX2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKKworCXdoaWxlICgoZW9wX2Rlc2MtPndiLnN0YXR1cyAmIGNwdV90b19sZTMyKElYR0JFX1RYRF9TVEFUX0REKSkgJiYKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCkpIHsKKwkJYm9vbCBjbGVhbmVkID0gZmFsc2U7CisJCWZvciAoIDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOworCQkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKKwkJCXNrYiA9IHR4X2J1ZmZlcl9pbmZvLT5za2I7CisKKwkJCWlmIChjbGVhbmVkICYmIHNrYikgeworCQkJCXVuc2lnbmVkIGludCBzZWdzLCBieXRlY291bnQ7CisKKwkJCQkvKiBnc29fc2VncyBpcyBjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgdGNwICovCisJCQkJc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPzogMTsKKwkJCQkvKiBtdWx0aXBseSBkYXRhIGNodW5rcyBieSBzaXplIG9mIGhlYWRlcnMgKi8KKwkJCQlieXRlY291bnQgPSAoKHNlZ3MgLSAxKSAqIHNrYl9oZWFkbGVuKHNrYikpICsKKwkJCQkJICAgIHNrYi0+bGVuOworCQkJCXRvdGFsX3BhY2tldHMgKz0gc2VnczsKKwkJCQl0b3RhbF9ieXRlcyArPSBieXRlY291bnQ7CisJCQl9CisKKwkJCWl4Z2JldmZfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwKKwkJCQkJCQkgICB0eF9idWZmZXJfaW5mbyk7CisKKwkJCXR4X2Rlc2MtPndiLnN0YXR1cyA9IDA7CisKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCQl9CisKKwkJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwkJZW9wX2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKKwl9CisKKwl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKKworI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQorCWlmICh1bmxpa2VseShjb3VudCAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKKwkJICAgICAoSVhHQkVfREVTQ19VTlVTRUQodHhfcmluZykgPj0gVFhfV0FLRV9USFJFU0hPTEQpKSkgeworCQkvKiBNYWtlIHN1cmUgdGhhdCBhbnlib2R5IHN0b3BwaW5nIHRoZSBxdWV1ZSBhZnRlciB0aGlzCisJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgorCQkgKi8KKwkJc21wX21iKCk7CisjaWZkZWYgSEFWRV9UWF9NUQorCQlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpICYmCisJCSAgICAhdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CisJCQkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJCX0KKyNlbHNlCisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgJiYKKwkJICAgICF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQkJKythZGFwdGVyLT5yZXN0YXJ0X3F1ZXVlOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpIHsKKwkJaWYgKGl4Z2JldmZfY2hlY2tfdHhfaGFuZyhhZGFwdGVyLCB0eF9yaW5nLCBpKSkgeworCQkJLyogc2NoZWR1bGUgaW1tZWRpYXRlIHJlc2V0IGlmIHdlIGJlbGlldmUgd2UgaHVuZyAqLworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJ0eCBoYW5nICVkIGRldGVjdGVkLCByZXNldHRpbmcgYWRhcHRlclxuIiwKKwkJCSAgICAgICBhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50ICsgMSk7CisJCQlpeGdiZXZmX3R4X3RpbWVvdXQoYWRhcHRlci0+bmV0ZGV2KTsKKwkJfQorCX0KKworCS8qIHJlLWFybSB0aGUgaW50ZXJydXB0ICovCisJaWYgKChjb3VudCA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KSAmJgorCSAgICAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSkgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlDUywgdHhfcmluZy0+dl9pZHgpOworCX0KKworCXR4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX2J5dGVzOworCXR4X3JpbmctPnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsKKworCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF9ieXRlczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOworCisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpOworfQorCisvKioKKyAqIGl4Z2JldmZfcmVjZWl2ZV9za2IgLSBTZW5kIGEgY29tcGxldGVkIHBhY2tldCB1cCB0aGUgc3RhY2sKKyAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCisgKiBAc2tiOiBwYWNrZXQgdG8gc2VuZCB1cAorICogQHN0YXR1czogaGFyZHdhcmUgaW5kaWNhdGlvbiBvZiBzdGF0dXMgb2YgcmVjZWl2ZQorICogQHJ4X3Jpbmc6IHJ4IGRlc2NyaXB0b3IgcmluZyAoZm9yIGEgc3BlY2lmaWMgcXVldWUpIHRvIHNldHVwCisgKiBAcnhfZGVzYzogcnggZGVzY3JpcHRvcgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9yZWNlaXZlX3NrYihzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc3RhdHVzLAorCQkJCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJpbmcsCisJCQkJdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCWJvb2wgaXNfdmxhbiA9IChzdGF0dXMgJiBJWEdCRV9SWERfU1RBVF9WUCk7CisJdTE2IHRhZyA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnZsYW4pOworCWludCByZXQ7CisKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fTkVUUE9MTCkpIHsKKwkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4pCisJCQl2bGFuX2dyb19yZWNlaXZlKCZxX3ZlY3Rvci0+bmFwaSwKKwkJCQkJIGFkYXB0ZXItPnZsZ3JwLAorCQkJCQkgdGFnLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZxX3ZlY3Rvci0+bmFwaSwgc2tiKTsKKwl9IGVsc2UgeworCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbikKKwkJCXJldCA9IHZsYW5faHdhY2NlbF9yeChza2IsIGFkYXB0ZXItPnZsZ3JwLCB0YWcpOworCQllbHNlCisJCQlyZXQgPSBuZXRpZl9yeChza2IpOworCX0KK30KKworLyoqCisgKiBpeGdiZXZmX3J4X2NoZWNrc3VtIC0gaW5kaWNhdGUgaW4gc2tiIGlmIGh3IGluZGljYXRlZCBhIGdvb2QgY2tzdW0KKyAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc3RhdHVzX2VycjogaGFyZHdhcmUgaW5kaWNhdGlvbiBvZiBzdGF0dXMgb2YgcmVjZWl2ZQorICogQHNrYjogc2tiIGN1cnJlbnRseSBiZWluZyByZWNlaXZlZCBhbmQgbW9kaWZpZWQKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX3J4X2NoZWNrc3VtKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgIHUzMiBzdGF0dXNfZXJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCS8qIFJ4IGNzdW0gZGlzYWJsZWQgKi8KKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEKSkKKwkJcmV0dXJuOworCisJLyogaWYgSVAgYW5kIGVycm9yICovCisJaWYgKChzdGF0dXNfZXJyICYgSVhHQkVfUlhEX1NUQVRfSVBDUykgJiYKKwkgICAgKHN0YXR1c19lcnIgJiBJWEdCRV9SWERBRFZfRVJSX0lQRSkpIHsKKwkJYWRhcHRlci0+aHdfY3N1bV9yeF9lcnJvcisrOworCQlyZXR1cm47CisJfQorCisJaWYgKCEoc3RhdHVzX2VyciAmIElYR0JFX1JYRF9TVEFUX0w0Q1MpKQorCQlyZXR1cm47CisKKwlpZiAoc3RhdHVzX2VyciAmIElYR0JFX1JYREFEVl9FUlJfVENQRSkgeworCQlhZGFwdGVyLT5od19jc3VtX3J4X2Vycm9yKys7CisJCXJldHVybjsKKwl9CisKKwkvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovCisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlhZGFwdGVyLT5od19jc3VtX3J4X2dvb2QrKzsKK30KKworLyoqCisgKiBpeGdiZXZmX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBwYWNrZXQgc3BsaXQKKyAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcsCisJCQkJICAgICBpbnQgY2xlYW5lZF9jb3VudCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2M7CisJc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyICpiaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZzeiA9IHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKyBORVRfSVBfQUxJR047CisKKwlpID0gcnhfcmluZy0+bmV4dF90b191c2U7CisJYmkgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CisKKwl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CisJCXJ4X2Rlc2MgPSBJWEdCRV9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CisKKwkJaWYgKCFiaS0+cGFnZV9kbWEgJiYKKwkJICAgIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkpIHsKKwkJCWlmICghYmktPnBhZ2UpIHsKKwkJCQliaS0+cGFnZSA9IG5ldGRldl9hbGxvY19wYWdlKGFkYXB0ZXItPm5ldGRldik7CisJCQkJaWYgKCFiaS0+cGFnZSkgeworCQkJCQlhZGFwdGVyLT5hbGxvY19yeF9wYWdlX2ZhaWxlZCsrOworCQkJCQlnb3RvIG5vX2J1ZmZlcnM7CisJCQkJfQorCQkJCWJpLT5wYWdlX29mZnNldCA9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIHVzZSBhIGhhbGYgcGFnZSBpZiB3ZSdyZSByZS11c2luZyAqLworCQkJCWJpLT5wYWdlX29mZnNldCBePSAoUEFHRV9TSVpFIC8gMik7CisJCQl9CisKKwkJCWJpLT5wYWdlX2RtYSA9IHBjaV9tYXBfcGFnZShwZGV2LCBiaS0+cGFnZSwKKwkJCQkJCSAgICBiaS0+cGFnZV9vZmZzZXQsCisJCQkJCQkgICAgKFBBR0VfU0laRSAvIDIpLAorCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKworCQlza2IgPSBiaS0+c2tiOworCQlpZiAoIXNrYikgeworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsCisJCQkJCQkJICAgICAgIGJ1ZnN6KTsKKworCQkJaWYgKCFza2IpIHsKKwkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE1ha2UgYnVmZmVyIGFsaWdubWVudCAyIGJleW9uZCBhIDE2IGJ5dGUgYm91bmRhcnkKKwkJCSAqIHRoaXMgd2lsbCByZXN1bHQgaW4gYSAxNiBieXRlIGFsaWduZWQgSVAgaGVhZGVyIGFmdGVyCisJCQkgKiB0aGUgMTQgYnl0ZSBNQUMgaGVhZGVyIGlzIHJlbW92ZWQKKwkJCSAqLworCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCisJCQliaS0+c2tiID0gc2tiOworCQl9CisJCWlmICghYmktPmRtYSkgeworCQkJYmktPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkJCSByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKwkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKKwkJICogZWFjaCB3cml0ZS1iYWNrIGVyYXNlcyB0aGlzIGluZm8uICovCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgeworCQkJcnhfZGVzYy0+cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGJpLT5wYWdlX2RtYSk7CisJCQlyeF9kZXNjLT5yZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoYmktPmRtYSk7CisJCX0gZWxzZSB7CisJCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoYmktPmRtYSk7CisJCX0KKworCQlpKys7CisJCWlmIChpID09IHJ4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJCWJpID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOworCX0KKworbm9fYnVmZmVyczoKKwlpZiAocnhfcmluZy0+bmV4dF90b191c2UgIT0gaSkgeworCQlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CisJCWlmIChpLS0gPT0gMCkKKwkJCWkgPSAocnhfcmluZy0+Y291bnQgLSAxKTsKKworCQlpeGdiZXZmX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsIHJ4X3JpbmcsIGkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfaXJxX2VuYWJsZV9xdWV1ZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgICB1NjQgcW1hc2spCit7CisJdTMyIG1hc2s7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCW1hc2sgPSAocW1hc2sgJiAweEZGRkZGRkZGKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlNUywgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGl4Z2JldmZfZ2V0X2hkcl9pbmZvKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjKQoreworCXJldHVybiByeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5oc19yc3MuaGRyX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGl4Z2JldmZfZ2V0X3BrdF9pbmZvKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjKQoreworCXJldHVybiByeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5oc19yc3MucGt0X2luZm87Cit9CisKK3N0YXRpYyBib29sIGl4Z2JldmZfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciwKKwkJCQkgc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZywKKwkJCQkgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MsICpuZXh0X3J4ZDsKKwlzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvLCAqbmV4dF9idWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgbGVuLCBzdGF0ZXJyOworCXUxNiBoZHJfaW5mbzsKKwlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CisJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzID0gMCwgdG90YWxfcnhfcGFja2V0cyA9IDA7CisKKwlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKKwlyeF9kZXNjID0gSVhHQkVfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOworCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOworCXJ4X2J1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOworCisJd2hpbGUgKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9ERCkgeworCQl1MzIgdXBwZXJfbGVuID0gMDsKKwkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKKwkJCWJyZWFrOworCQkoKndvcmtfZG9uZSkrKzsKKworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKKwkJCWhkcl9pbmZvID0gbGUxNl90b19jcHUoaXhnYmV2Zl9nZXRfaGRyX2luZm8ocnhfZGVzYykpOworCQkJbGVuID0gKGhkcl9pbmZvICYgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9NQVNLKSA+PgorCQkJICAgICAgIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQ7CisJCQlpZiAoaGRyX2luZm8gJiBJWEdCRV9SWERBRFZfU1BIKQorCQkJCWFkYXB0ZXItPnJ4X2hkcl9zcGxpdCsrOworCQkJaWYgKGxlbiA+IElYR0JFVkZfUlhfSERSX1NJWkUpCisJCQkJbGVuID0gSVhHQkVWRl9SWF9IRFJfU0laRTsKKwkJCXVwcGVyX2xlbiA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aCk7CisJCX0gZWxzZSB7CisJCQlsZW4gPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGgpOworCQl9CisJCWNsZWFuZWQgPSB0cnVlOworCQlza2IgPSByeF9idWZmZXJfaW5mby0+c2tiOworCQlwcmVmZXRjaChza2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOworCQlyeF9idWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKworCQlpZiAocnhfYnVmZmVyX2luZm8tPmRtYSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCByeF9idWZmZXJfaW5mby0+ZG1hLAorCQkJCQkgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeF9idWZmZXJfaW5mby0+ZG1hID0gMDsKKwkJCXNrYl9wdXQoc2tiLCBsZW4pOworCQl9CisKKwkJaWYgKHVwcGVyX2xlbikgeworCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hLAorCQkJCSAgICAgICBQQUdFX1NJWkUgLyAyLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hID0gMDsKKwkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsCisJCQkJCSAgIHJ4X2J1ZmZlcl9pbmZvLT5wYWdlLAorCQkJCQkgICByeF9idWZmZXJfaW5mby0+cGFnZV9vZmZzZXQsCisJCQkJCSAgIHVwcGVyX2xlbik7CisKKwkJCWlmICgocnhfcmluZy0+cnhfYnVmX2xlbiA+IChQQUdFX1NJWkUgLyAyKSkgfHwKKwkJCSAgICAocGFnZV9jb3VudChyeF9idWZmZXJfaW5mby0+cGFnZSkgIT0gMSkpCisJCQkJcnhfYnVmZmVyX2luZm8tPnBhZ2UgPSBOVUxMOworCQkJZWxzZQorCQkJCWdldF9wYWdlKHJ4X2J1ZmZlcl9pbmZvLT5wYWdlKTsKKworCQkJc2tiLT5sZW4gKz0gdXBwZXJfbGVuOworCQkJc2tiLT5kYXRhX2xlbiArPSB1cHBlcl9sZW47CisJCQlza2ItPnRydWVzaXplICs9IHVwcGVyX2xlbjsKKwkJfQorCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKworCQluZXh0X3J4ZCA9IElYR0JFX1JYX0RFU0NfQURWKCpyeF9yaW5nLCBpKTsKKwkJcHJlZmV0Y2gobmV4dF9yeGQpOworCQljbGVhbmVkX2NvdW50Kys7CisKKwkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CisKKwkJaWYgKCEoc3RhdGVyciAmIElYR0JFX1JYRF9TVEFUX0VPUCkpIHsKKwkJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgeworCQkJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBuZXh0X2J1ZmZlci0+c2tiOworCQkJCXJ4X2J1ZmZlcl9pbmZvLT5kbWEgPSBuZXh0X2J1ZmZlci0+ZG1hOworCQkJCW5leHRfYnVmZmVyLT5za2IgPSBza2I7CisJCQkJbmV4dF9idWZmZXItPmRtYSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXNrYi0+bmV4dCA9IG5leHRfYnVmZmVyLT5za2I7CisJCQkJc2tiLT5uZXh0LT5wcmV2ID0gc2tiOworCQkJfQorCQkJYWRhcHRlci0+bm9uX2VvcF9kZXNjcysrOworCQkJZ290byBuZXh0X2Rlc2M7CisJCX0KKworCQkvKiBFUlJfTUFTSyB3aWxsIG9ubHkgaGF2ZSB2YWxpZCBiaXRzIGlmIEVPUCBzZXQgKi8KKwkJaWYgKHVubGlrZWx5KHN0YXRlcnIgJiBJWEdCRV9SWERBRFZfRVJSX0ZSQU1FX0VSUl9NQVNLKSkgeworCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCWdvdG8gbmV4dF9kZXNjOworCQl9CisKKwkJaXhnYmV2Zl9yeF9jaGVja3N1bShhZGFwdGVyLCBzdGF0ZXJyLCBza2IpOworCisJCS8qIHByb2JhYmx5IGEgbGl0dGxlIHNrZXdlZCBkdWUgdG8gcmVtb3ZpbmcgQ1JDICovCisJCXRvdGFsX3J4X2J5dGVzICs9IHNrYi0+bGVuOworCQl0b3RhbF9yeF9wYWNrZXRzKys7CisKKwkJLyoKKwkJICogV29yayBhcm91bmQgaXNzdWUgb2Ygc29tZSB0eXBlcyBvZiBWTSB0byBWTSBsb29wIGJhY2sKKwkJICogcGFja2V0cyBub3QgZ2V0dGluZyBzcGxpdCBjb3JyZWN0bHkKKwkJICovCisJCWlmIChzdGF0ZXJyICYgSVhHQkVfUlhEX1NUQVRfTEIpIHsKKwkJCXUzMiBoZWFkZXJfZml4dXBfbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworCQkJaWYgKGhlYWRlcl9maXh1cF9sZW4gPCAxNCkKKwkJCQlza2JfcHVzaChza2IsIGhlYWRlcl9maXh1cF9sZW4pOworCQl9CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXB0ZXItPm5ldGRldik7CisKKwkJaXhnYmV2Zl9yZWNlaXZlX3NrYihxX3ZlY3Rvciwgc2tiLCBzdGF0ZXJyLCByeF9yaW5nLCByeF9kZXNjKTsKKwkJYWRhcHRlci0+bmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworbmV4dF9kZXNjOgorCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOworCisJCS8qIHJldHVybiBzb21lIGJ1ZmZlcnMgdG8gaGFyZHdhcmUsIG9uZSBhdCBhIHRpbWUgaXMgdG9vIHNsb3cgKi8KKwkJaWYgKGNsZWFuZWRfY291bnQgPj0gSVhHQkVWRl9SWF9CVUZGRVJfV1JJVEUpIHsKKwkJCWl4Z2JldmZfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyLCByeF9yaW5nLAorCQkJCQkJIGNsZWFuZWRfY291bnQpOworCQkJY2xlYW5lZF9jb3VudCA9IDA7CisJCX0KKworCQkvKiB1c2UgcHJlZmV0Y2hlZCB2YWx1ZXMgKi8KKwkJcnhfZGVzYyA9IG5leHRfcnhkOworCQlyeF9idWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKworCQlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yKTsKKwl9CisKKwlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKKwljbGVhbmVkX2NvdW50ID0gSVhHQkVfREVTQ19VTlVTRUQocnhfcmluZyk7CisKKwlpZiAoY2xlYW5lZF9jb3VudCkKKwkJaXhnYmV2Zl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIHJ4X3JpbmcsIGNsZWFuZWRfY291bnQpOworCisJcnhfcmluZy0+dG90YWxfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOworCXJ4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9yeF9ieXRlczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMucnhfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOworCisJcmV0dXJuIGNsZWFuZWQ7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl9yeG9ubHkgLSBtc2l4IChha2Egb25lIHNob3QpIHJ4IGNsZWFuIHJvdXRpbmUKKyAqIEBuYXBpOiBuYXBpIHN0cnVjdCB3aXRoIG91ciBkZXZpY2VzIGluZm8gaW4gaXQKKyAqIEBidWRnZXQ6IGFtb3VudCBvZiB3b3JrIGRyaXZlciBpcyBhbGxvd2VkIHRvIGRvIHRoaXMgcGFzcywgaW4gcGFja2V0cworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW1pemVkIGZvciBjbGVhbmluZyBvbmUgcXVldWUgb25seSBvbiBhIHNpbmdsZQorICogcV92ZWN0b3IhISEKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9jbGVhbl9yeG9ubHkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciwgbmFwaSk7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcgPSBOVUxMOworCWludCB3b3JrX2RvbmUgPSAwOworCWxvbmcgcl9pZHg7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7CisKKwlpeGdiZXZmX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKworCS8qIElmIGFsbCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKKwkJCWl4Z2JldmZfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCWl4Z2JldmZfaXJxX2VuYWJsZV9xdWV1ZXMoYWRhcHRlciwgcnhfcmluZy0+dl9pZHgpOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl9yeG9ubHlfbWFueSAtIG1zaXggKGFrYSBvbmUgc2hvdCkgcnggY2xlYW4gcm91dGluZQorICogQG5hcGk6IG5hcGkgc3RydWN0IHdpdGggb3VyIGRldmljZXMgaW5mbyBpbiBpdAorICogQGJ1ZGdldDogYW1vdW50IG9mIHdvcmsgZHJpdmVyIGlzIGFsbG93ZWQgdG8gZG8gdGhpcyBwYXNzLCBpbiBwYWNrZXRzCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFuIG1vcmUgdGhhbiBvbmUgcnggcXVldWUgYXNzb2NpYXRlZCB3aXRoIGEKKyAqIHFfdmVjdG9yLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX2NsZWFuX3J4b25seV9tYW55KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IgPQorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IsIG5hcGkpOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nID0gTlVMTDsKKwlpbnQgd29ya19kb25lID0gMCwgaTsKKwlsb25nIHJfaWR4OworCXU2NCBlbmFibGVfbWFzayA9IDA7CisKKwkvKiBhdHRlbXB0IHRvIGRpc3RyaWJ1dGUgYnVkZ2V0IHRvIGVhY2ggcXVldWUgZmFpcmx5LCBidXQgZG9uJ3QgYWxsb3cKKwkgKiB0aGUgYnVkZ2V0IHRvIGdvIGJlbG93IDEgYmVjYXVzZSB3ZSdsbCBleGl0IHBvbGxpbmcgKi8KKwlidWRnZXQgLz0gKHFfdmVjdG9yLT5yeHJfY291bnQgPzogMSk7CisJYnVkZ2V0ID0gbWF4KGJ1ZGdldCwgMSk7CisJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CisJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgeworCQlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7CisJCWl4Z2JldmZfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOworCQllbmFibGVfbWFzayB8PSByeF9yaW5nLT52X2lkeDsKKwkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAorCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJfQorCisjaWZuZGVmIEhBVkVfTkVUREVWX05BUElfTElTVAorCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQorCQl3b3JrX2RvbmUgPSAwOworCisjZW5kaWYKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7CisKKwkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDEpCisJCQlpeGdiZXZmX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CisJCWlmICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlpeGdiZXZmX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIsIGVuYWJsZV9tYXNrKTsKKwl9CisKKwlyZXR1cm4gd29ya19kb25lOworfQorCisKKy8qKgorICogaXhnYmV2Zl9jb25maWd1cmVfbXNpeCAtIENvbmZpZ3VyZSBNU0ktWCBoYXJkd2FyZQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogaXhnYmV2Zl9jb25maWd1cmVfbXNpeCBzZXRzIHVwIHRoZSBoYXJkd2FyZSB0byBwcm9wZXJseSBnZW5lcmF0ZSBNU0ktWAorICogaW50ZXJydXB0cy4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY29uZmlndXJlX21zaXgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaSwgaiwgcV92ZWN0b3JzLCB2X2lkeCwgcl9pZHg7CisJdTMyIG1hc2s7CisKKwlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCS8qCisJICogUG9wdWxhdGUgdGhlIElWQVIgdGFibGUgYW5kIHNldCB0aGUgSVRSIHZhbHVlcyB0byB0aGUKKwkgKiBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyLgorCSAqLworCWZvciAodl9pZHggPSAwOyB2X2lkeCA8IHFfdmVjdG9yczsgdl9pZHgrKykgeworCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKKwkJLyogWFhYIGZvcl9lYWNoX2JpdCguLi4pICovCisJCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCisJCQkJICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XS5yZWdfaWR4OworCQkJaXhnYmV2Zl9zZXRfaXZhcihhZGFwdGVyLCAwLCBqLCB2X2lkeCk7CisJCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCisJCQkJCSAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJCX0KKwkJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKKwkJCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlpeGdiZXZmX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKKwkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKKwkJCQkJICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkJICAgICAgcl9pZHggKyAxKTsKKwkJfQorCisJCS8qIGlmIHRoaXMgaXMgYSB0eCBvbmx5IHZlY3RvciBoYWx2ZSB0aGUgaW50ZXJydXB0IHJhdGUgKi8KKwkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQlxX3ZlY3Rvci0+ZWl0ciA9IChhZGFwdGVyLT5laXRyX3BhcmFtID4+IDEpOworCQllbHNlIGlmIChxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJLyogcnggb25seSAqLworCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOworCisJCWl4Z2JldmZfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgcV92ZWN0b3ItPmVpdHIpOworCX0KKworCWl4Z2JldmZfc2V0X2l2YXIoYWRhcHRlciwgLTEsIDEsIHZfaWR4KTsKKworCS8qIHNldCB1cCB0byBhdXRvY2xlYXIgdGltZXIsIGFuZCB0aGUgdmVjdG9ycyAqLworCW1hc2sgPSBJWEdCRV9FSU1TX0VOQUJMRV9NQVNLOworCW1hc2sgJj0gfklYR0JFX0VJTVNfT1RIRVI7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJQUMsIG1hc2spOworfQorCitlbnVtIGxhdGVuY3lfcmFuZ2UgeworCWxvd2VzdF9sYXRlbmN5ID0gMCwKKwlsb3dfbGF0ZW5jeSA9IDEsCisJYnVsa19sYXRlbmN5ID0gMiwKKwlsYXRlbmN5X2ludmFsaWQgPSAyNTUKK307CisKKy8qKgorICogaXhnYmV2Zl91cGRhdGVfaXRyIC0gdXBkYXRlIHRoZSBkeW5hbWljIElUUiB2YWx1ZSBiYXNlZCBvbiBzdGF0aXN0aWNzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyCisgKiBAZWl0cjogZWl0ciBzZXR0aW5nIChpbnRzIHBlciBzZWMpIHRvIGdpdmUgbGFzdCB0aW1lc2xpY2UKKyAqIEBpdHJfc2V0dGluZzogY3VycmVudCB0aHJvdHRsZSByYXRlIGluIGludHMvc2Vjb25kCisgKiBAcGFja2V0czogdGhlIG51bWJlciBvZiBwYWNrZXRzIGR1cmluZyB0aGlzIG1lYXN1cmVtZW50IGludGVydmFsCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgZHVyaW5nIHRoaXMgbWVhc3VyZW1lbnQgaW50ZXJ2YWwKKyAqCisgKiAgICAgIFN0b3JlcyBhIG5ldyBJVFIgdmFsdWUgYmFzZWQgb24gcGFja2V0cyBhbmQgYnl0ZQorICogICAgICBjb3VudHMgZHVyaW5nIHRoZSBsYXN0IGludGVycnVwdC4gIFRoZSBhZHZhbnRhZ2Ugb2YgcGVyIGludGVycnVwdAorICogICAgICBjb21wdXRhdGlvbiBpcyBmYXN0ZXIgdXBkYXRlcyBhbmQgbW9yZSBhY2N1cmF0ZSBJVFIgZm9yIHRoZSBjdXJyZW50CisgKiAgICAgIHRyYWZmaWMgcGF0dGVybi4gIENvbnN0YW50cyBpbiB0aGlzIGZ1bmN0aW9uIHdlcmUgY29tcHV0ZWQKKyAqICAgICAgYmFzZWQgb24gdGhlb3JldGljYWwgbWF4aW11bSB3aXJlIHNwZWVkIGFuZCB0aHJlc2hvbGRzIHdlcmUgc2V0IGJhc2VkCisgKiAgICAgIG9uIHRlc3RpbmcgZGF0YSBhcyB3ZWxsIGFzIGF0dGVtcHRpbmcgdG8gbWluaW1pemUgcmVzcG9uc2UgdGltZQorICogICAgICB3aGlsZSBpbmNyZWFzaW5nIGJ1bGsgdGhyb3VnaHB1dC4KKyAqKi8KK3N0YXRpYyB1OCBpeGdiZXZmX3VwZGF0ZV9pdHIoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgdTMyIGVpdHIsIHU4IGl0cl9zZXR0aW5nLAorCQkJICAgICBpbnQgcGFja2V0cywgaW50IGJ5dGVzKQoreworCXVuc2lnbmVkIGludCByZXR2YWwgPSBpdHJfc2V0dGluZzsKKwl1MzIgdGltZXBhc3NlZF91czsKKwl1NjQgYnl0ZXNfcGVyaW50OworCisJaWYgKHBhY2tldHMgPT0gMCkKKwkJZ290byB1cGRhdGVfaXRyX2RvbmU7CisKKworCS8qIHNpbXBsZSB0aHJvdHRsZXJhdGUgbWFuYWdlbWVudAorCSAqICAgIDAtMjBNQi9zIGxvd2VzdCAoMTAwMDAwIGludHMvcykKKwkgKiAgIDIwLTEwME1CL3MgbG93ICAgKDIwMDAwIGludHMvcykKKwkgKiAgMTAwLTEyNDlNQi9zIGJ1bGsgKDgwMDAgaW50cy9zKQorCSAqLworCS8qIHdoYXQgd2FzIGxhc3QgaW50ZXJydXB0IHRpbWVzbGljZT8gKi8KKwl0aW1lcGFzc2VkX3VzID0gMTAwMDAwMC9laXRyOworCWJ5dGVzX3BlcmludCA9IGJ5dGVzIC8gdGltZXBhc3NlZF91czsgLyogYnl0ZXMvdXNlYyAqLworCisJc3dpdGNoIChpdHJfc2V0dGluZykgeworCWNhc2UgbG93ZXN0X2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPiBhZGFwdGVyLT5laXRyX2xvdykKKwkJCXJldHZhbCA9IGxvd19sYXRlbmN5OworCQlicmVhazsKKwljYXNlIGxvd19sYXRlbmN5OgorCQlpZiAoYnl0ZXNfcGVyaW50ID4gYWRhcHRlci0+ZWl0cl9oaWdoKQorCQkJcmV0dmFsID0gYnVsa19sYXRlbmN5OworCQllbHNlIGlmIChieXRlc19wZXJpbnQgPD0gYWRhcHRlci0+ZWl0cl9sb3cpCisJCQlyZXR2YWwgPSBsb3dlc3RfbGF0ZW5jeTsKKwkJYnJlYWs7CisJY2FzZSBidWxrX2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPD0gYWRhcHRlci0+ZWl0cl9oaWdoKQorCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CisJCWJyZWFrOworCX0KKwordXBkYXRlX2l0cl9kb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogaXhnYmV2Zl93cml0ZV9laXRyIC0gd3JpdGUgVlRFSVRSIHJlZ2lzdGVyIGluIGhhcmR3YXJlIHNwZWNpZmljIHdheQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEB2X2lkeDogdmVjdG9yIGluZGV4IGludG8gcV92ZWN0b3IgYXJyYXkKKyAqIEBpdHJfcmVnOiBuZXcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiAqcmVnaXN0ZXIqIGZvcm1hdCwgbm90IGludHMvcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWFkZSB0byBiZSBjYWxsZWQgYnkgZXRodG9vbCBhbmQgYnkgdGhlIGRyaXZlcgorICogd2hlbiBpdCBuZWVkcyB0byB1cGRhdGUgVlRFSVRSIHJlZ2lzdGVycyBhdCBydW50aW1lLiAgSGFyZHdhcmUKKyAqIHNwZWNpZmljIHF1aXJrcy9kaWZmZXJlbmNlcyBhcmUgdGFrZW4gY2FyZSBvZiBoZXJlLgorICovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3dyaXRlX2VpdHIoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LAorCQkJICAgICAgIHUzMiBpdHJfcmVnKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpdHJfcmVnID0gRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGl0cl9yZWcpOworCisJLyoKKwkgKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW4KKwkgKiBpbW1lZGlhdGUgYXNzZXJ0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKwkgKi8KKwlpdHJfcmVnIHw9IElYR0JFX0VJVFJfQ05UX1dESVM7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlUUih2X2lkeCksIGl0cl9yZWcpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9pdHJfbXNpeChzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXUzMiBuZXdfaXRyOworCXU4IGN1cnJlbnRfaXRyLCByZXRfaXRyOworCWludCBpLCByX2lkeCwgdl9pZHggPSBxX3ZlY3Rvci0+dl9pZHg7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZywgKnR4X3Jpbmc7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CisJCXR4X3JpbmcgPSAmKGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdKTsKKwkJcmV0X2l0ciA9IGl4Z2JldmZfdXBkYXRlX2l0cihhZGFwdGVyLCBxX3ZlY3Rvci0+ZWl0ciwKKwkJCQkJICAgICBxX3ZlY3Rvci0+dHhfaXRyLAorCQkJCQkgICAgIHR4X3JpbmctPnRvdGFsX3BhY2tldHMsCisJCQkJCSAgICAgdHhfcmluZy0+dG90YWxfYnl0ZXMpOworCQkvKiBpZiB0aGUgcmVzdWx0IGZvciB0aGlzIHF1ZXVlIHdvdWxkIGRlY3JlYXNlIGludGVycnVwdAorCQkgKiByYXRlIGZvciB0aGlzIHZlY3RvciB0aGVuIHVzZSB0aGF0IHJlc3VsdCAqLworCQlxX3ZlY3Rvci0+dHhfaXRyID0gKChxX3ZlY3Rvci0+dHhfaXRyID4gcmV0X2l0cikgPworCQkJCSAgICBxX3ZlY3Rvci0+dHhfaXRyIC0gMSA6IHJldF9pdHIpOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CisJCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcmV0X2l0ciA9IGl4Z2JldmZfdXBkYXRlX2l0cihhZGFwdGVyLCBxX3ZlY3Rvci0+ZWl0ciwKKwkJCQkJICAgICBxX3ZlY3Rvci0+cnhfaXRyLAorCQkJCQkgICAgIHJ4X3JpbmctPnRvdGFsX3BhY2tldHMsCisJCQkJCSAgICAgcnhfcmluZy0+dG90YWxfYnl0ZXMpOworCQkvKiBpZiB0aGUgcmVzdWx0IGZvciB0aGlzIHF1ZXVlIHdvdWxkIGRlY3JlYXNlIGludGVycnVwdAorCQkgKiByYXRlIGZvciB0aGlzIHZlY3RvciB0aGVuIHVzZSB0aGF0IHJlc3VsdCAqLworCQlxX3ZlY3Rvci0+cnhfaXRyID0gKChxX3ZlY3Rvci0+cnhfaXRyID4gcmV0X2l0cikgPworCQkJCSAgICBxX3ZlY3Rvci0+cnhfaXRyIC0gMSA6IHJldF9pdHIpOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwljdXJyZW50X2l0ciA9IG1heChxX3ZlY3Rvci0+cnhfaXRyLCBxX3ZlY3Rvci0+dHhfaXRyKTsKKworCXN3aXRjaCAoY3VycmVudF9pdHIpIHsKKwkvKiBjb3VudHMgYW5kIHBhY2tldHMgaW4gdXBkYXRlX2l0ciBhcmUgZGVwZW5kZW50IG9uIHRoZXNlIG51bWJlcnMgKi8KKwljYXNlIGxvd2VzdF9sYXRlbmN5OgorCQluZXdfaXRyID0gMTAwMDAwOworCQlicmVhazsKKwljYXNlIGxvd19sYXRlbmN5OgorCQluZXdfaXRyID0gMjAwMDA7IC8qIGFrYSBod2l0ciA9IH4yMDAgKi8KKwkJYnJlYWs7CisJY2FzZSBidWxrX2xhdGVuY3k6CisJZGVmYXVsdDoKKwkJbmV3X2l0ciA9IDgwMDA7CisJCWJyZWFrOworCX0KKworCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CisJCXUzMiBpdHJfcmVnOworCisJCS8qIHNhdmUgdGhlIGFsZ29yaXRobSB2YWx1ZSBoZXJlLCBub3QgdGhlIHNtb290aGVkIG9uZSAqLworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CisJCS8qIGRvIGFuIGV4cG9uZW50aWFsIHNtb290aGluZyAqLworCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkwKS8xMDApICsgKChuZXdfaXRyICogMTApLzEwMCk7CisJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7CisJCWl4Z2JldmZfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgaXRyX3JlZyk7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYmV2Zl9tc2l4X21ieChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVpY3I7CisKKwllaWNyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUyk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJQ1IsIGVpY3IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYmV2Zl9tc2l4X2NsZWFuX3R4KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yID0gZGF0YTsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgICAgICp0eF9yaW5nOworCWludCBpLCByX2lkeDsKKworCWlmICghcV92ZWN0b3ItPnR4cl9jb3VudCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgeworCQl0eF9yaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwkJdHhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CisJCWl4Z2JldmZfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsIHR4X3JpbmcpOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQorCQlpeGdiZXZmX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogaXhnYmVfbXNpeF9jbGVhbl9yeCAtIHNpbmdsZSB1bnNoYXJlZCB2ZWN0b3IgcnggY2xlYW4gKGFsbCBxdWV1ZXMpCisgKiBAaXJxOiB1bnVzZWQKKyAqIEBkYXRhOiBwb2ludGVyIHRvIG91ciBxX3ZlY3RvciBzdHJ1Y3QgZm9yIHRoaXMgaW50ZXJydXB0IHZlY3RvcgorICoqLworc3RhdGljIGlycXJldHVybl90IGl4Z2JldmZfbXNpeF9jbGVhbl9yeChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGRhdGE7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBpeGdiZXZmX3JpbmcgICpyeF9yaW5nOworCWludCByX2lkeDsKKwlpbnQgaTsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CisJCXJ4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwlpZiAoIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhpcyB2ZWN0b3Igb25seSAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1DLCByeF9yaW5nLT52X2lkeCk7CisJbmFwaV9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOworCisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpeGdiZXZmX21zaXhfY2xlYW5fbWFueShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCWl4Z2JldmZfbXNpeF9jbGVhbl9yeChpcnEsIGRhdGEpOworCWl4Z2JldmZfbXNpeF9jbGVhbl90eChpcnEsIGRhdGEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX3ZlY3Rvcl90b19yeHEoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYSwgaW50IHZfaWR4LAorCQkJCSAgICAgaW50IHJfaWR4KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGEtPnFfdmVjdG9yW3ZfaWR4XTsKKworCXNldF9iaXQocl9pZHgsIHFfdmVjdG9yLT5yeHJfaWR4KTsKKwlxX3ZlY3Rvci0+cnhyX2NvdW50Kys7CisJYS0+cnhfcmluZ1tyX2lkeF0udl9pZHggPSAxIDw8IHZfaWR4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX3ZlY3Rvcl90b190eHEoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYSwgaW50IHZfaWR4LAorCQkJCSAgICAgaW50IHRfaWR4KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGEtPnFfdmVjdG9yW3ZfaWR4XTsKKworCXNldF9iaXQodF9pZHgsIHFfdmVjdG9yLT50eHJfaWR4KTsKKwlxX3ZlY3Rvci0+dHhyX2NvdW50Kys7CisJYS0+dHhfcmluZ1t0X2lkeF0udl9pZHggPSAxIDw8IHZfaWR4OworfQorCisvKioKKyAqIGl4Z2JldmZfbWFwX3JpbmdzX3RvX3ZlY3RvcnMgLSBNYXBzIGRlc2NyaXB0b3IgcmluZ3MgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgZGVzY3JpcHRvciByaW5ncyB0byB0aGUgcXVldWUtc3BlY2lmaWMgdmVjdG9ycworICogd2Ugd2VyZSBhbGxvdHRlZCB0aHJvdWdoIHRoZSBNU0ktWCBlbmFibGluZyBjb2RlLiAgSWRlYWxseSwgd2UnZCBoYXZlCisgKiBvbmUgdmVjdG9yIHBlciByaW5nL3F1ZXVlLCBidXQgb24gYSBjb25zdHJhaW5lZCB2ZWN0b3IgYnVkZ2V0LCB3ZQorICogZ3JvdXAgdGhlIHJpbmdzIGFzICJlZmZpY2llbnRseSIgYXMgcG9zc2libGUuICBZb3Ugd291bGQgYWRkIG5ldworICogbWFwcGluZyBjb25maWd1cmF0aW9ucyBpbiBoZXJlLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX21hcF9yaW5nc190b192ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfdmVjdG9yczsKKwlpbnQgdl9zdGFydCA9IDA7CisJaW50IHJ4cl9pZHggPSAwLCB0eHJfaWR4ID0gMDsKKwlpbnQgcnhyX3JlbWFpbmluZyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJaW50IHR4cl9yZW1haW5pbmcgPSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOworCWludCBpLCBqOworCWludCBycXB2LCB0cXB2OworCWludCBlcnIgPSAwOworCisJcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisKKwkvKgorCSAqIFRoZSBpZGVhbCBjb25maWd1cmF0aW9uLi4uCisJICogV2UgaGF2ZSBlbm91Z2ggdmVjdG9ycyB0byBtYXAgb25lIHBlciBxdWV1ZS4KKwkgKi8KKwlpZiAocV92ZWN0b3JzID09IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fdHhfcXVldWVzKSB7CisJCWZvciAoOyByeHJfaWR4IDwgcnhyX3JlbWFpbmluZzsgdl9zdGFydCsrLCByeHJfaWR4KyspCisJCQltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCB2X3N0YXJ0LCByeHJfaWR4KTsKKworCQlmb3IgKDsgdHhyX2lkeCA8IHR4cl9yZW1haW5pbmc7IHZfc3RhcnQrKywgdHhyX2lkeCsrKQorCQkJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgdl9zdGFydCwgdHhyX2lkeCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdmVjdG9ycyBmb3IgYSAxLXRvLTEKKwkgKiBtYXBwaW5nLCB3ZSdsbCBoYXZlIHRvIGdyb3VwIHRoZW0gc28gdGhlcmUgYXJlCisJICogbXVsdGlwbGUgcXVldWVzIHBlciB2ZWN0b3IuCisJICovCisJLyogUmUtYWRqdXN0aW5nICpxcHYgdGFrZXMgY2FyZSBvZiB0aGUgcmVtYWluZGVyLiAqLworCWZvciAoaSA9IHZfc3RhcnQ7IGkgPCBxX3ZlY3RvcnM7IGkrKykgeworCQlycXB2ID0gRElWX1JPVU5EX1VQKHJ4cl9yZW1haW5pbmcsIHFfdmVjdG9ycyAtIGkpOworCQlmb3IgKGogPSAwOyBqIDwgcnFwdjsgaisrKSB7CisJCQltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCBpLCByeHJfaWR4KTsKKwkJCXJ4cl9pZHgrKzsKKwkJCXJ4cl9yZW1haW5pbmctLTsKKwkJfQorCX0KKwlmb3IgKGkgPSB2X3N0YXJ0OyBpIDwgcV92ZWN0b3JzOyBpKyspIHsKKwkJdHFwdiA9IERJVl9ST1VORF9VUCh0eHJfcmVtYWluaW5nLCBxX3ZlY3RvcnMgLSBpKTsKKwkJZm9yIChqID0gMDsgaiA8IHRxcHY7IGorKykgeworCQkJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgaSwgdHhyX2lkeCk7CisJCQl0eHJfaWR4Kys7CisJCQl0eHJfcmVtYWluaW5nLS07CisJCX0KKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfcmVxdWVzdF9tc2l4X2lycXMgLSBJbml0aWFsaXplIE1TSS1YIGludGVycnVwdHMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIGl4Z2JldmZfcmVxdWVzdF9tc2l4X2lycXMgYWxsb2NhdGVzIE1TSS1YIHZlY3RvcnMgYW5kIHJlcXVlc3RzCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIGtlcm5lbC4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9yZXF1ZXN0X21zaXhfaXJxcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKik7CisJaW50IGksIHZlY3RvciwgcV92ZWN0b3JzLCBlcnI7CisJaW50IHJpID0gMCwgdGkgPSAwOworCisJLyogRGVjcmVtZW50IGZvciBPdGhlciBhbmQgVENQIFRpbWVyIHZlY3RvcnMgKi8KKwlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworI2RlZmluZSBTRVRfSEFORExFUihfdikgKCgoX3YpLT5yeHJfY291bnQgJiYgKF92KS0+dHhyX2NvdW50KSAgICAgICAgICBcCisJCQkJCSAgPyAmaXhnYmV2Zl9tc2l4X2NsZWFuX21hbnkgOiBcCisJCQkgIChfdiktPnJ4cl9jb3VudCA/ICZpeGdiZXZmX21zaXhfY2xlYW5fcnggICA6IFwKKwkJCSAgKF92KS0+dHhyX2NvdW50ID8gJml4Z2JldmZfbXNpeF9jbGVhbl90eCAgIDogXAorCQkJICBOVUxMKQorCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgcV92ZWN0b3JzOyB2ZWN0b3IrKykgeworCQloYW5kbGVyID0gU0VUX0hBTkRMRVIoYWRhcHRlci0+cV92ZWN0b3JbdmVjdG9yXSk7CisKKwkJaWYgKGhhbmRsZXIgPT0gJml4Z2JldmZfbXNpeF9jbGVhbl9yeCkgeworCQkJc3ByaW50ZihhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sICIlcy0lcy0lZCIsCisJCQkJbmV0ZGV2LT5uYW1lLCAicngiLCByaSsrKTsKKwkJfSBlbHNlIGlmIChoYW5kbGVyID09ICZpeGdiZXZmX21zaXhfY2xlYW5fdHgpIHsKKwkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAorCQkJCW5ldGRldi0+bmFtZSwgInR4IiwgdGkrKyk7CisJCX0gZWxzZSBpZiAoaGFuZGxlciA9PSAmaXhnYmV2Zl9tc2l4X2NsZWFuX21hbnkpIHsKKwkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAorCQkJCW5ldGRldi0+bmFtZSwgIlR4UngiLCB2ZWN0b3IpOworCQl9IGVsc2UgeworCQkJLyogc2tpcCB0aGlzIHVudXNlZCBxX3ZlY3RvciAqLworCQkJY29udGludWU7CisJCX0KKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJCSAgaGFuZGxlciwgMCwgYWRhcHRlci0+bmFtZVt2ZWN0b3JdLAorCQkJCSAgYWRhcHRlci0+cV92ZWN0b3JbdmVjdG9yXSk7CisJCWlmIChlcnIpIHsKKwkJCWh3X2RiZygmYWRhcHRlci0+aHcsCisJCQkgICAgICAgInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgTVNJWCBpbnRlcnJ1cHQgIgorCQkJICAgICAgICJFcnJvcjogJWRcbiIsIGVycik7CisJCQlnb3RvIGZyZWVfcXVldWVfaXJxczsKKwkJfQorCX0KKworCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXM6bWJ4IiwgbmV0ZGV2LT5uYW1lKTsKKwllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCisJCQkgICZpeGdiZXZmX21zaXhfbWJ4LCAwLCBhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sIG5ldGRldik7CisJaWYgKGVycikgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgInJlcXVlc3RfaXJxIGZvciBtc2l4X21ieCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGZyZWVfcXVldWVfaXJxczsKKwl9CisKKwlyZXR1cm4gMDsKKworZnJlZV9xdWV1ZV9pcnFzOgorCWZvciAoaSA9IHZlY3RvciAtIDE7IGkgPj0gMDsgaS0tKQorCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbLS12ZWN0b3JdLnZlY3RvciwKKwkJCSAmKGFkYXB0ZXItPnFfdmVjdG9yW2ldKSk7CisJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwlrZnJlZShhZGFwdGVyLT5tc2l4X2VudHJpZXMpOworCWFkYXB0ZXItPm1zaXhfZW50cmllcyA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcmVzZXRfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIHFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW2ldOworCQliaXRtYXBfemVybyhxX3ZlY3Rvci0+cnhyX2lkeCwgTUFYX1JYX1FVRVVFUyk7CisJCWJpdG1hcF96ZXJvKHFfdmVjdG9yLT50eHJfaWR4LCBNQVhfVFhfUVVFVUVTKTsKKwkJcV92ZWN0b3ItPnJ4cl9jb3VudCA9IDA7CisJCXFfdmVjdG9yLT50eHJfY291bnQgPSAwOworCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CisJfQorfQorCisvKioKKyAqIGl4Z2JldmZfcmVxdWVzdF9pcnEgLSBpbml0aWFsaXplIGludGVycnVwdHMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIEF0dGVtcHRzIHRvIGNvbmZpZ3VyZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBiZXN0IGF2YWlsYWJsZQorICogY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBhbmQga2VybmVsLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX3JlcXVlc3RfaXJxKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBpeGdiZXZmX3JlcXVlc3RfbXNpeF9pcnFzKGFkYXB0ZXIpOworCisJaWYgKGVycikKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJyZXF1ZXN0X2lycSBmYWlsZWQsIEVycm9yICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9mcmVlX2lycShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IGksIHFfdmVjdG9yczsKKworCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7CisKKwlpID0gcV92ZWN0b3JzIC0gMTsKKworCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsIG5ldGRldik7CisJaS0tOworCisJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkgYWRhcHRlci0+cV92ZWN0b3JbaV0pOworCX0KKworCWl4Z2JldmZfcmVzZXRfcV92ZWN0b3JzKGFkYXB0ZXIpOworfQorCisvKioKKyAqIGl4Z2JldmZfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX2lycV9kaXNhYmxlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1DLCB+MCk7CisKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQorCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7Cit9CisKKy8qKgorICogaXhnYmV2Zl9pcnFfZW5hYmxlIC0gRW5hYmxlIGRlZmF1bHQgaW50ZXJydXB0IGdlbmVyYXRpb24gc2V0dGluZ3MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoqLworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfaXJxX2VuYWJsZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgIGJvb2wgcXVldWVzLCBib29sIGZsdXNoKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIG1hc2s7CisJdTY0IHFtYXNrOworCisJbWFzayA9IChJWEdCRV9FSU1TX0VOQUJMRV9NQVNLICYgfklYR0JFX0VJTVNfUlRYX1FVRVVFKTsKKwlxbWFzayA9IH4wOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJTVMsIG1hc2spOworCisJaWYgKHF1ZXVlcykKKwkJaXhnYmV2Zl9pcnFfZW5hYmxlX3F1ZXVlcyhhZGFwdGVyLCBxbWFzayk7CisKKwlpZiAoZmx1c2gpCisJCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKK30KKworLyoqCisgKiBpeGdiZXZmX2NvbmZpZ3VyZV90eCAtIENvbmZpZ3VyZSA4MjU5OSBWRiBUcmFuc21pdCBVbml0IGFmdGVyIFJlc2V0CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIFR4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfdHgoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1NjQgdGRiYTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBpLCBqLCB0ZGxlbiwgdHhjdHJsOworCisJLyogU2V0dXAgdGhlIEhXIFR4IEhlYWQgYW5kIFRhaWwgZGVzY3JpcHRvciBwb2ludGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcmluZyAqcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW2ldOworCQlqID0gcmluZy0+cmVnX2lkeDsKKwkJdGRiYSA9IHJpbmctPmRtYTsKKwkJdGRsZW4gPSByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUREJBTChqKSwKKwkJCQkodGRiYSAmIERNQV9CSVRfTUFTSygzMikpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlREQkFIKGopLCAodGRiYSA+PiAzMikpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVERMRU4oaiksIHRkbGVuKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRESChqKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZURFQoaiksIDApOworCQlhZGFwdGVyLT50eF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9WRlRESChqKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS50YWlsID0gSVhHQkVfVkZURFQoaik7CisJCS8qIERpc2FibGUgVHggSGVhZCBXcml0ZWJhY2sgUk8gYml0LCBzaW5jZSB0aGlzIGhvc2VzCisJCSAqIGJvb2trZWVwaW5nIGlmIHRoaW5ncyBhcmVuJ3QgZGVsaXZlcmVkIGluIG9yZGVyLgorCQkgKi8KKwkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGRENBX1RYQ1RSTChqKSk7CisJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRkRDQV9UWENUUkwoaiksIHR4Y3RybCk7CisJfQorfQorCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQJMgorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2NvbmZpZ3VyZV9zcnJjdGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IGluZGV4KQoreworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3Jpbmc7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgc3JyY3RsOworCisJcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2luZGV4XTsKKworCXNycmN0bCA9IElYR0JFX1NSUkNUTF9EUk9QX0VOOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCXUxNiBidWZzeiA9IElYR0JFVkZfUlhCVUZGRVJfMjA0ODsKKwkJLyogZ3JvdyB0aGUgYW1vdW50IHdlIGNhbiByZWNlaXZlIG9uIGxhcmdlIHBhZ2UgbWFjaGluZXMgKi8KKwkJaWYgKGJ1ZnN6IDwgKFBBR0VfU0laRSAvIDIpKQorCQkJYnVmc3ogPSAoUEFHRV9TSVpFIC8gMik7CisJCS8qIGNhcCB0aGUgYnVmc3ogYXQgb3VyIGxhcmdlc3QgZGVzY3JpcHRvciBzaXplICovCisJCWJ1ZnN6ID0gbWluKCh1MTYpSVhHQkVWRl9NQVhfUlhCVUZGRVIsIGJ1ZnN6KTsKKworCQlzcnJjdGwgfD0gYnVmc3ogPj4gSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOworCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVM7CisJCXNycmN0bCB8PSAoKElYR0JFVkZfUlhfSERSX1NJWkUgPDwKKwkJCSAgIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQpICYKKwkJCSAgIElYR0JFX1NSUkNUTF9CU0laRUhEUl9NQVNLKTsKKwl9IGVsc2UgeworCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUY7CisKKwkJaWYgKHJ4X3JpbmctPnJ4X2J1Zl9sZW4gPT0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpCisJCQlzcnJjdGwgfD0gSVhHQkVWRl9SWEJVRkZFUl8yMDQ4ID4+CisJCQkJSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOworCQllbHNlCisJCQlzcnJjdGwgfD0gcnhfcmluZy0+cnhfYnVmX2xlbiA+PgorCQkJCUlYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwl9CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlNSUkNUTChpbmRleCksIHNycmN0bCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jb25maWd1cmVfcnggLSBDb25maWd1cmUgODI1OTkgVkYgUmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIFJ4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfcngoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1NjQgcmRiYTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IG1heF9mcmFtZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKKwlpbnQgaSwgajsKKwl1MzIgcmRsZW47CisJaW50IHJ4X2J1Zl9sZW47CisKKwkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCisJaWYgKG5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7CisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfQ0FQQUJMRSkKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwkJZWxzZQorCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwl9IGVsc2UgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYXzFCVUZfQ0FQQUJMRSkKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwl9CisKKwkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCS8qIFBTUlRZUEUgbXVzdCBiZSBpbml0aWFsaXplZCBpbiA4MjU5OSAqLworCQl1MzIgcHNydHlwZSA9IElYR0JFX1BTUlRZUEVfVENQSERSIHwKKwkJCUlYR0JFX1BTUlRZUEVfVURQSERSIHwKKwkJCUlYR0JFX1BTUlRZUEVfSVBWNEhEUiB8CisJCQlJWEdCRV9QU1JUWVBFX0lQVjZIRFIgfAorCQkJSVhHQkVfUFNSVFlQRV9MMkhEUjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlBTUlRZUEUsIHBzcnR5cGUpOworCQlyeF9idWZfbGVuID0gSVhHQkVWRl9SWF9IRFJfU0laRTsKKwl9IGVsc2UgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUFNSVFlQRSwgMCk7CisJCWlmIChuZXRkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCisJCQlyeF9idWZfbGVuID0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkU7CisJCWVsc2UKKwkJCXJ4X2J1Zl9sZW4gPSBBTElHTihtYXhfZnJhbWUsIDEwMjQpOworCX0KKworCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CisJLyogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKKwkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXJkYmEgPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmRtYTsKKwkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJEQkFMKGopLAorCQkJCShyZGJhICYgRE1BX0JJVF9NQVNLKDMyKSkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRCQUgoaiksIChyZGJhID4+IDMyKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSRExFTihqKSwgcmRsZW4pOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRIKGopLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJEVChqKSwgMCk7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uaGVhZCA9IElYR0JFX1ZGUkRIKGopOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnRhaWwgPSBJWEdCRV9WRlJEVChqKTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9idWZfbGVuID0gcnhfYnVmX2xlbjsKKworCQlpeGdiZXZmX2NvbmZpZ3VyZV9zcnJjdGwoYWRhcHRlciwgaik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaSwgajsKKwl1MzIgY3RybDsKKworCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopKTsKKwkJY3RybCB8PSBJWEdCRV9SWERDVExfVk1FOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopLCBjdHJsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqdl9uZXRkZXY7CisKKwkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLworCWlmIChody0+bWFjLm9wcy5zZXRfdmZ0YSkKKwkJaHctPm1hYy5vcHMuc2V0X3ZmdGEoaHcsIHZpZCwgMCwgdHJ1ZSk7CisJLyoKKwkgKiBDb3B5IGZlYXR1cmUgZmxhZ3MgZnJvbSBuZXRkZXYgdG8gdGhlIHZsYW4gbmV0ZGV2IGZvciB0aGlzIHZpZC4KKwkgKiBUaGlzIGFsbG93cyB0aGluZ3MgbGlrZSBUU08gdG8gYnViYmxlIGRvd24gdG8gb3VyIHZsYW4gZGV2aWNlLgorCSAqLworCXZfbmV0ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQpOworCXZfbmV0ZGV2LT5mZWF0dXJlcyB8PSBhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzOworCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCB2X25ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlpeGdiZXZmX2lycV9kaXNhYmxlKGFkYXB0ZXIpOworCisJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOworCisJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJaXhnYmV2Zl9pcnFfZW5hYmxlKGFkYXB0ZXIsIHRydWUsIHRydWUpOworCisJLyogcmVtb3ZlIFZJRCBmcm9tIGZpbHRlciB0YWJsZSAqLworCWlmIChody0+bWFjLm9wcy5zZXRfdmZ0YSkKKwkJaHctPm1hYy5vcHMuc2V0X3ZmdGEoaHcsIHZpZCwgMCwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWl4Z2JldmZfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKKworCWlmIChhZGFwdGVyLT52bGdycCkgeworCQl1MTYgdmlkOworCQlmb3IgKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgeworCQkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpCisJCQkJY29udGludWU7CisJCQlpeGdiZXZmX3ZsYW5fcnhfYWRkX3ZpZChhZGFwdGVyLT5uZXRkZXYsIHZpZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1OCAqaXhnYmV2Zl9hZGRyX2xpc3RfaXRyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICoqbWNfYWRkcl9wdHIsCisJCQkJIHUzMiAqdm1kcSkKK3sKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKKwl1OCAqYWRkciA9ICptY19hZGRyX3B0cjsKKwkqdm1kcSA9IDA7CisKKwltY19wdHIgPSBjb250YWluZXJfb2YoYWRkciwgc3RydWN0IGRldl9tY19saXN0LCBkbWlfYWRkclswXSk7CisJaWYgKG1jX3B0ci0+bmV4dCkKKwkJKm1jX2FkZHJfcHRyID0gbWNfcHRyLT5uZXh0LT5kbWlfYWRkcjsKKwllbHNlCisJCSptY19hZGRyX3B0ciA9IE5VTEw7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyoqCisgKiBpeGdiZXZmX3NldF9yeF9tb2RlIC0gTXVsdGljYXN0IHNldAorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoZSBzZXRfcnhfbWV0aG9kIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgbXVsdGljYXN0IGFkZHJlc3MKKyAqIGxpc3Qgb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZsYWdzIGFyZSB1cGRhdGVkLiAgVGhpcyByb3V0aW5lIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlIGZvciBwcm9wZXIgbXVsdGljYXN0IG1vZGUuCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1OCAqYWRkcl9saXN0ID0gTlVMTDsKKwlpbnQgYWRkcl9jb3VudCA9IDA7CisKKwkvKiByZXByb2dyYW0gbXVsdGljYXN0IGxpc3QgKi8KKwlhZGRyX2NvdW50ID0gbmV0ZGV2LT5tY19jb3VudDsKKwlpZiAoYWRkcl9jb3VudCkKKwkJYWRkcl9saXN0ID0gbmV0ZGV2LT5tY19saXN0LT5kbWlfYWRkcjsKKwlpZiAoaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdCkKKwkJaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdChodywgYWRkcl9saXN0LCBhZGRyX2NvdW50LAorCQkJCQkJaXhnYmV2Zl9hZGRyX2xpc3RfaXRyKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9uYXBpX2VuYWJsZV9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcV9pZHg7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yOworCWludCBxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IHFfdmVjdG9yczsgcV9pZHgrKykgeworCQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7CisJCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdOworCQlpZiAoIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQljb250aW51ZTsKKwkJbmFwaSA9ICZxX3ZlY3Rvci0+bmFwaTsKKwkJaWYgKHFfdmVjdG9yLT5yeHJfY291bnQgPiAxKQorCQkJbmFwaS0+cG9sbCA9ICZpeGdiZXZmX2NsZWFuX3J4b25seV9tYW55OworCisJCW5hcGlfZW5hYmxlKG5hcGkpOworCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9uYXBpX2Rpc2FibGVfYWxsKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4OworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlpbnQgcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisKKwlmb3IgKHFfaWR4ID0gMDsgcV9pZHggPCBxX3ZlY3RvcnM7IHFfaWR4KyspIHsKKwkJcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvcltxX2lkeF07CisJCWlmICghcV92ZWN0b3ItPnJ4cl9jb3VudCkKKwkJCWNvbnRpbnVlOworCQluYXBpX2Rpc2FibGUoJnFfdmVjdG9yLT5uYXBpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfY29uZmlndXJlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgaTsKKworCWl4Z2JldmZfc2V0X3J4X21vZGUobmV0ZGV2KTsKKworCWl4Z2JldmZfcmVzdG9yZV92bGFuKGFkYXB0ZXIpOworCisJaXhnYmV2Zl9jb25maWd1cmVfdHgoYWRhcHRlcik7CisJaXhnYmV2Zl9jb25maWd1cmVfcngoYWRhcHRlcik7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCWl4Z2JldmZfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyLCByaW5nLCByaW5nLT5jb3VudCk7CisJCXJpbmctPm5leHRfdG9fdXNlID0gcmluZy0+Y291bnQgLSAxOworCQl3cml0ZWwocmluZy0+bmV4dF90b191c2UsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByaW5nLT50YWlsKTsKKwl9Cit9CisKKyNkZWZpbmUgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTCAxMAorc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcnhfZGVzY19xdWV1ZV9lbmFibGUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJCWludCByeHIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaiA9IGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5yZWdfaWR4OworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IElYR0JFX01BWF9SWF9ERVNDX1BPTEw7IGsrKykgeworCQlpZiAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopKSAmIElYR0JFX1JYRENUTF9FTkFCTEUpCisJCQlicmVhazsKKwkJZWxzZQorCQkJbXNsZWVwKDEpOworCX0KKwlpZiAoayA+PSBJWEdCRV9NQVhfUlhfREVTQ19QT0xMKSB7CisJCWh3X2RiZyhodywgIlJYRENUTC5FTkFCTEUgb24gUnggcXVldWUgJWQgIgorCQkgICAgICAgIm5vdCBzZXQgd2l0aGluIHRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcnhyKTsKKwl9CisKKwlpeGdiZXZmX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsICZhZGFwdGVyLT5yeF9yaW5nW3J4cl0sCisJCQkJKGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5jb3VudCAtIDEpKTsKK30KKworc3RhdGljIGludCBpeGdiZXZmX3VwX2NvbXBsZXRlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpLCBqID0gMDsKKwlpbnQgbnVtX3J4X3JpbmdzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwl1MzIgdHhkY3RsLCByeGRjdGw7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSk7CisJCS8qIGVuYWJsZSBXVEhSRVNIPTggZGVzY3JpcHRvcnMsIHRvIGVuY291cmFnZSBidXJzdCB3cml0ZWJhY2sgKi8KKwkJdHhkY3RsIHw9ICg4IDw8IDE2KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSwgdHhkY3RsKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSk7CisJCXR4ZGN0bCB8PSBJWEdCRV9UWERDVExfRU5BQkxFOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGopLCB0eGRjdGwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcnhfcmluZ3M7IGkrKykgeworCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaikpOworCQlyeGRjdGwgfD0gSVhHQkVfUlhEQ1RMX0VOQUJMRTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJYRENUTChqKSwgcnhkY3RsKTsKKwkJaXhnYmV2Zl9yeF9kZXNjX3F1ZXVlX2VuYWJsZShhZGFwdGVyLCBpKTsKKwl9CisKKwlpeGdiZXZmX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOworCisJaWYgKGh3LT5tYWMub3BzLnNldF9yYXIpIHsKKwkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoaHctPm1hYy5hZGRyKSkKKwkJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCk7CisJCWVsc2UKKwkJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMucGVybV9hZGRyLCAwKTsKKwl9CisKKwljbGVhcl9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CisJaXhnYmV2Zl9uYXBpX2VuYWJsZV9hbGwoYWRhcHRlcik7CisKKwkvKiBlbmFibGUgdHJhbnNtaXRzICovCisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOworCisJLyogYnJpbmcgdGhlIGxpbmsgdXAgaW4gdGhlIHdhdGNoZG9nLCB0aGlzIGNvdWxkIHJhY2Ugd2l0aCBvdXIgZmlyc3QKKwkgKiBsaW5rIHVwIGludGVycnVwdCBidXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSAqLworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKKwlhZGFwdGVyLT5saW5rX2NoZWNrX3RpbWVvdXQgPSBqaWZmaWVzOworCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOworCXJldHVybiAwOworfQorCitpbnQgaXhnYmV2Zl91cChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnI7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWl4Z2JldmZfY29uZmlndXJlKGFkYXB0ZXIpOworCisJZXJyID0gaXhnYmV2Zl91cF9jb21wbGV0ZShhZGFwdGVyKTsKKworCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMsIG1heSBhdXRvIG1hc2sgKi8KKwlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSUNSKTsKKworCWl4Z2JldmZfaXJxX2VuYWJsZShhZGFwdGVyLCB0cnVlLCB0cnVlKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl9yeF9yaW5nIC0gRnJlZSBSeCBCdWZmZXJzIHBlciBRdWV1ZQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAcnhfcmluZzogcmluZyB0byBmcmVlIGJ1ZmZlcnMgZnJvbQorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jbGVhbl9yeF9yaW5nKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBGcmVlIGFsbCB0aGUgUnggcmluZyBza19idWZmcyAqLworCisJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKKworCQlyeF9idWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKwkJaWYgKHJ4X2J1ZmZlcl9pbmZvLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcnhfYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkJIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcnhfYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJCX0KKwkJaWYgKHJ4X2J1ZmZlcl9pbmZvLT5za2IpIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWZmZXJfaW5mby0+c2tiOworCQkJcnhfYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCQlkbyB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnRoaXMgPSBza2I7CisJCQkJc2tiID0gc2tiLT5wcmV2OworCQkJCWRldl9rZnJlZV9za2IodGhpcyk7CisJCQl9IHdoaWxlIChza2IpOworCQl9CisJCWlmICghcnhfYnVmZmVyX2luZm8tPnBhZ2UpCisJCQljb250aW51ZTsKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hLCBQQUdFX1NJWkUgLyAyLAorCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJ4X2J1ZmZlcl9pbmZvLT5wYWdlX2RtYSA9IDA7CisJCXB1dF9wYWdlKHJ4X2J1ZmZlcl9pbmZvLT5wYWdlKTsKKwkJcnhfYnVmZmVyX2luZm8tPnBhZ2UgPSBOVUxMOworCQlyeF9idWZmZXJfaW5mby0+cGFnZV9vZmZzZXQgPSAwOworCX0KKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OworCW1lbXNldChyeF9yaW5nLT5yeF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiBaZXJvIG91dCB0aGUgZGVzY3JpcHRvciByaW5nICovCisJbWVtc2V0KHJ4X3JpbmctPmRlc2MsIDAsIHJ4X3JpbmctPnNpemUpOworCisJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOworCisJaWYgKHJ4X3JpbmctPmhlYWQpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+aGVhZCk7CisJaWYgKHJ4X3JpbmctPnRhaWwpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl90eF9yaW5nIC0gRnJlZSBUeCBCdWZmZXJzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0eF9yaW5nOiByaW5nIHRvIGJlIGNsZWFuZWQKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fdHhfcmluZyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIEZyZWUgYWxsIHRoZSBUeCByaW5nIHNrX2J1ZmZzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgdHhfcmluZy0+Y291bnQ7IGkrKykgeworCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJaXhnYmV2Zl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLCB0eF9idWZmZXJfaW5mbyk7CisJfQorCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7CisJbWVtc2V0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKKworCW1lbXNldCh0eF9yaW5nLT5kZXNjLCAwLCB0eF9yaW5nLT5zaXplKTsKKworCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKKwl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKKworCWlmICh0eF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPmhlYWQpOworCWlmICh0eF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fYWxsX3J4X3JpbmdzIC0gRnJlZSBSeCBCdWZmZXJzIGZvciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlpeGdiZXZmX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fYWxsX3R4X3JpbmdzIC0gRnJlZSBUeCBCdWZmZXJzIGZvciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fYWxsX3R4X3JpbmdzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlpeGdiZXZmX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworfQorCit2b2lkIGl4Z2JldmZfZG93bihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgdHhkY3RsOworCWludCBpLCBqOworCisJLyogc2lnbmFsIHRoYXQgd2UgYXJlIGRvd24gdG8gdGhlIGludGVycnVwdCBoYW5kbGVyICovCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKwkvKiBkaXNhYmxlIHJlY2VpdmVzICovCisKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CisKKwltc2xlZXAoMTApOworCisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisKKwlpeGdiZXZmX2lycV9kaXNhYmxlKGFkYXB0ZXIpOworCisJaXhnYmV2Zl9uYXBpX2Rpc2FibGVfYWxsKGFkYXB0ZXIpOworCisJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKKwkvKiBjYW4ndCBjYWxsIGZsdXNoIHNjaGVkdWxlZCB3b3JrIGhlcmUgYmVjYXVzZSBpdCBjYW4gZGVhZGxvY2sKKwkgKiBpZiBsaW5rd2F0Y2hfZXZlbnQgdHJpZXMgdG8gYWNxdWlyZSB0aGUgcnRubF9sb2NrIHdoaWNoIHdlIGFyZQorCSAqIGhvbGRpbmcgKi8KKwl3aGlsZSAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0spCisJCW1zbGVlcCgxKTsKKworCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaiksCisJCQkJKHR4ZGN0bCAmIH5JWEdCRV9UWERDVExfRU5BQkxFKSk7CisJfQorCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKworCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKKwkJaXhnYmV2Zl9yZXNldChhZGFwdGVyKTsKKworCWl4Z2JldmZfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOworCWl4Z2JldmZfY2xlYW5fYWxsX3J4X3JpbmdzKGFkYXB0ZXIpOworfQorCit2b2lkIGl4Z2JldmZfcmVpbml0X2xvY2tlZChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCWl4Z2JldmZfZG93bihhZGFwdGVyKTsKKwlpeGdiZXZmX3VwKGFkYXB0ZXIpOworCisJY2xlYXJfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Cit9CisKK3ZvaWQgaXhnYmV2Zl9yZXNldChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmIChody0+bWFjLm9wcy5yZXNldF9odyhodykpCisJCWh3X2RiZyhodywgIlBGIHN0aWxsIHJlc2V0dGluZ1xuIik7CisJZWxzZQorCQlody0+bWFjLm9wcy5pbml0X2h3KGh3KTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGFkYXB0ZXItPmh3Lm1hYy5hZGRyKSkgeworCQltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsCisJCSAgICAgICBuZXRkZXYtPmFkZHJfbGVuKTsKKwkJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwKKwkJICAgICAgIG5ldGRldi0+YWRkcl9sZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9hY3F1aXJlX21zaXhfdmVjdG9ycyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgaW50IHZlY3RvcnMpCit7CisJaW50IGVyciwgdmVjdG9yX3RocmVzaG9sZDsKKworCS8qIFdlJ2xsIHdhbnQgYXQgbGVhc3QgMyAodmVjdG9yX3RocmVzaG9sZCk6CisJICogMSkgVHhRWzBdIENsZWFudXAKKwkgKiAyKSBSeFFbMF0gQ2xlYW51cAorCSAqIDMpIE90aGVyIChMaW5rIFN0YXR1cyBDaGFuZ2UsIGV0Yy4pCisJICovCisJdmVjdG9yX3RocmVzaG9sZCA9IE1JTl9NU0lYX0NPVU5UOworCisJLyogVGhlIG1vcmUgd2UgZ2V0LCB0aGUgbW9yZSB3ZSB3aWxsIGFzc2lnbiB0byBUeC9SeCBDbGVhbnVwCisJICogZm9yIHRoZSBzZXBhcmF0ZSBxdWV1ZXMuLi53aGVyZSBSeCBDbGVhbnVwID49IFR4IENsZWFudXAuCisJICogUmlnaHQgbm93LCB3ZSBzaW1wbHkgY2FyZSBhYm91dCBob3cgbWFueSB3ZSdsbCBnZXQ7IHdlJ2xsCisJICogc2V0IHRoZW0gdXAgbGF0ZXIgd2hpbGUgcmVxdWVzdGluZyBpcnEncy4KKwkgKi8KKwl3aGlsZSAodmVjdG9ycyA+PSB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCisJCQkJICAgICAgdmVjdG9ycyk7CisJCWlmICghZXJyKSAvKiBTdWNjZXNzIGluIGFjcXVpcmluZyBhbGwgcmVxdWVzdGVkIHZlY3RvcnMuICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoZXJyIDwgMCkKKwkJCXZlY3RvcnMgPSAwOyAvKiBOYXN0eSBmYWlsdXJlLCBxdWl0IG5vdyAqLworCQllbHNlIC8qIGVyciA9PSBudW1iZXIgb2YgdmVjdG9ycyB3ZSBzaG91bGQgdHJ5IGFnYWluIHdpdGggKi8KKwkJCXZlY3RvcnMgPSBlcnI7CisJfQorCisJaWYgKHZlY3RvcnMgPCB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCS8qIENhbid0IGFsbG9jYXRlIGVub3VnaCBNU0ktWCBpbnRlcnJ1cHRzPyAgT2ggd2VsbC4KKwkJICogVGhpcyBqdXN0IG1lYW5zIHdlJ2xsIGdvIHdpdGggZWl0aGVyIGEgc2luZ2xlIE1TSQorCQkgKiB2ZWN0b3Igb3IgZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHRzLgorCQkgKi8KKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgTVNJLVggaW50ZXJydXB0c1xuIik7CisJCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CisJCWFkYXB0ZXItPm1zaXhfZW50cmllcyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQWRqdXN0IGZvciBvbmx5IHRoZSB2ZWN0b3JzIHdlJ2xsIHVzZSwgd2hpY2ggaXMgbWluaW11bQorCQkgKiBvZiBtYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTLCBvciB0aGUgbnVtYmVyIG9mCisJCSAqIHZlY3RvcnMgd2Ugd2VyZSBhbGxvY2F0ZWQuCisJCSAqLworCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gdmVjdG9yczsKKwl9Cit9CisKKy8qCisgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBxdWV1ZSBhbGxvY2F0aW9uIHJvdXRpbmUuICBUaGUgb3JkZXIgaGVyZSBpcyB2ZXJ5CisgKiBpbXBvcnRhbnQsIHN0YXJ0aW5nIHdpdGggdGhlICJtb3N0IiBudW1iZXIgb2YgZmVhdHVyZXMgdHVybmVkIG9uIGF0IG9uY2UsCisgKiBhbmQgZW5kaW5nIHdpdGggdGhlIHNtYWxsZXN0IHNldCBvZiBmZWF0dXJlcy4gIFRoaXMgd2F5IGxhcmdlIGNvbWJpbmF0aW9ucworICogY2FuIGJlIGFsbG9jYXRlZCBpZiB0aGV5J3JlIHR1cm5lZCBvbiwgYW5kIHNtYWxsZXIgY29tYmluYXRpb25zIGFyZSB0aGUKKyAqIGZhbGx0aHJvdWdoIGNvbmRpdGlvbnMuCisgKgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9zZXRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIFN0YXJ0IHdpdGggYmFzZSBjYXNlICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3J4X3Bvb2xzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzX3Blcl9wb29sID0gMTsKK30KKworLyoqCisgKiBpeGdiZXZmX2FsbG9jX3F1ZXVlcyAtIEFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsIHJpbmdzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFdlIGFsbG9jYXRlIG9uZSByaW5nIHBlciBxdWV1ZSBhdCBydW4tdGltZSBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZQorICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuICBUaGUgcG9sbGluZ19uZXRkZXYgYXJyYXkgaXMKKyAqIGludGVuZGVkIGZvciBNdWx0aXF1ZXVlLCBidXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGEgc2luZ2xlIHF1ZXVlLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJYWRhcHRlci0+dHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+dHhfcmluZykKKwkJZ290byBlcnJfdHhfcmluZ19hbGxvY2F0aW9uOworCisJYWRhcHRlci0+cnhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+cnhfcmluZykKKwkJZ290byBlcnJfcnhfcmluZ19hbGxvY2F0aW9uOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+dHhfcmluZ19jb3VudDsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yeF9yaW5nX2FsbG9jYXRpb246CisJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CitlcnJfdHhfcmluZ19hbGxvY2F0aW9uOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5IC0gc2V0IE1TSS1YIG9yIEZBSUwgaWYgbm90IHN1cHBvcnRlZAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBBdHRlbXB0IHRvIGNvbmZpZ3VyZSB0aGUgaW50ZXJydXB0cyB1c2luZyB0aGUgYmVzdCBhdmFpbGFibGUKKyAqIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUgYW5kIHRoZSBrZXJuZWwuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVyciA9IDA7CisJaW50IHZlY3Rvciwgdl9idWRnZXQ7CisKKwkvKgorCSAqIEl0J3MgZWFzeSB0byBiZSBncmVlZHkgZm9yIE1TSS1YIHZlY3RvcnMsIGJ1dCBpdCByZWFsbHkKKwkgKiBkb2Vzbid0IGRvIHVzIG11Y2ggZ29vZCBpZiB3ZSBoYXZlIGEgbG90IG1vcmUgdmVjdG9ycworCSAqIHRoYW4gQ1BVJ3MuICBTbyBsZXQncyBiZSBjb25zZXJ2YXRpdmUgYW5kIG9ubHkgYXNrIGZvcgorCSAqIChyb3VnaGx5KSB0d2ljZSB0aGUgbnVtYmVyIG9mIHZlY3RvcnMgYXMgdGhlcmUgYXJlIENQVSdzLgorCSAqLworCXZfYnVkZ2V0ID0gbWluKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkgICAgICAgKGludCkobnVtX29ubGluZV9jcHVzKCkgKiAyKSkgKyBOT05fUV9WRUNUT1JTOworCisJLyogQSBmYWlsdXJlIGluIE1TSS1YIGVudHJ5IGFsbG9jYXRpb24gaXNuJ3QgZmF0YWwsIGJ1dCBpdCBkb2VzCisJICogbWVhbiB3ZSBkaXNhYmxlIE1TSS1YIGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlci4gKi8KKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKHZfYnVkZ2V0LAorCQkJCQlzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IHZfYnVkZ2V0OyB2ZWN0b3IrKykKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0uZW50cnkgPSB2ZWN0b3I7CisKKwlpeGdiZXZmX2FjcXVpcmVfbXNpeF92ZWN0b3JzKGFkYXB0ZXIsIHZfYnVkZ2V0KTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaXhnYmV2Zl9hbGxvY19xX3ZlY3RvcnMgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVycnVwdCB2ZWN0b3JzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFdlIGFsbG9jYXRlIG9uZSBxX3ZlY3RvciBwZXIgcXVldWUgaW50ZXJydXB0LiAgSWYgYWxsb2NhdGlvbiBmYWlscyB3ZQorICogcmV0dXJuIC1FTk9NRU0uCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfYWxsb2NfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4LCBudW1fcV92ZWN0b3JzOworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlpbnQgbmFwaV92ZWN0b3JzOworCWludCAoKnBvbGwpKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOworCisJbnVtX3FfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCW5hcGlfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJcG9sbCA9ICZpeGdiZXZmX2NsZWFuX3J4b25seTsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IG51bV9xX3ZlY3RvcnM7IHFfaWR4KyspIHsKKwkJcV92ZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciksIEdGUF9LRVJORUwpOworCQlpZiAoIXFfdmVjdG9yKQorCQkJZ290byBlcnJfb3V0OworCQlxX3ZlY3Rvci0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCXFfdmVjdG9yLT52X2lkeCA9IHFfaWR4OworCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CisJCWlmIChxX2lkeCA8IG5hcGlfdmVjdG9ycykKKwkJCW5ldGlmX25hcGlfYWRkKGFkYXB0ZXItPm5ldGRldiwgJnFfdmVjdG9yLT5uYXBpLAorCQkJCSAgICAgICAoKnBvbGwpLCA2NCk7CisJCWFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XSA9IHFfdmVjdG9yOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCXdoaWxlIChxX2lkeCkgeworCQlxX2lkeC0tOworCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XTsKKwkJbmV0aWZfbmFwaV9kZWwoJnFfdmVjdG9yLT5uYXBpKTsKKwkJa2ZyZWUocV92ZWN0b3IpOworCQlhZGFwdGVyLT5xX3ZlY3RvcltxX2lkeF0gPSBOVUxMOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKiBpeGdiZXZmX2ZyZWVfcV92ZWN0b3JzIC0gRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBpbnRlcnJ1cHQgdmVjdG9ycworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSBxX3ZlY3RvcnMuICBJbiBhZGRpdGlvbiBpZgorICogTkFQSSBpcyBlbmFibGVkIGl0IHdpbGwgZGVsZXRlIGFueSByZWZlcmVuY2VzIHRvIHRoZSBOQVBJIHN0cnVjdCBwcmlvcgorICogdG8gZnJlZWluZyB0aGUgcV92ZWN0b3IuCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX2ZyZWVfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4LCBudW1fcV92ZWN0b3JzOworCWludCBuYXBpX3ZlY3RvcnM7CisKKwludW1fcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisJbmFwaV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IG51bV9xX3ZlY3RvcnM7IHFfaWR4KyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdOworCisJCWFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XSA9IE5VTEw7CisJCWlmIChxX2lkeCA8IG5hcGlfdmVjdG9ycykKKwkJCW5ldGlmX25hcGlfZGVsKCZxX3ZlY3Rvci0+bmFwaSk7CisJCWtmcmVlKHFfdmVjdG9yKTsKKwl9Cit9CisKKy8qKgorICogaXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eSAtIFJlc2V0IE1TSVggc2V0dXAKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CisJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKworCXJldHVybjsKK30KKworLyoqCisgKiBpeGdiZXZmX2luaXRfaW50ZXJydXB0X3NjaGVtZSAtIERldGVybWluZSBpZiBNU0lYIGlzIHN1cHBvcnRlZCBhbmQgaW5pdAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzICovCisJaXhnYmV2Zl9zZXRfbnVtX3F1ZXVlcyhhZGFwdGVyKTsKKworCWVyciA9IGl4Z2JldmZfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gc2V0dXAgaW50ZXJydXB0IGNhcGFiaWxpdGllc1xuIik7CisJCWdvdG8gZXJyX3NldF9pbnRlcnJ1cHQ7CisJfQorCisJZXJyID0gaXhnYmV2Zl9hbGxvY19xX3ZlY3RvcnMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWUgIgorCQkgICAgICAgInZlY3RvcnNcbiIpOworCQlnb3RvIGVycl9hbGxvY19xX3ZlY3RvcnM7CisJfQorCisJZXJyID0gaXhnYmV2Zl9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CisJCWdvdG8gZXJyX2FsbG9jX3F1ZXVlczsKKwl9CisKKwlod19kYmcoJmFkYXB0ZXItPmh3LCAiTXVsdGlxdWV1ZSAlczogUnggUXVldWUgY291bnQgPSAldSwgIgorCSAgICAgICAiVHggUXVldWUgY291bnQgPSAldVxuIiwKKwkgICAgICAgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAxKSA/ICJFbmFibGVkIiA6CisJICAgICAgICJEaXNhYmxlZCIsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOworCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKworCXJldHVybiAwOworZXJyX2FsbG9jX3F1ZXVlczoKKwlpeGdiZXZmX2ZyZWVfcV92ZWN0b3JzKGFkYXB0ZXIpOworZXJyX2FsbG9jX3FfdmVjdG9yczoKKwlpeGdiZXZmX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworZXJyX3NldF9pbnRlcnJ1cHQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlcworICogKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIGl4Z2JldmZfc3dfaW5pdCBpbml0aWFsaXplcyB0aGUgQWRhcHRlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlLgorICogRmllbGRzIGFyZSBpbml0aWFsaXplZCBiYXNlZCBvbiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIGFuZAorICogT1MgbmV0d29yayBkZXZpY2Ugc2V0dGluZ3MgKE1UVSBzaXplKS4KKyAqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGl4Z2JldmZfc3dfaW5pdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBlcnI7CisKKwkvKiBQQ0kgY29uZmlnIHNwYWNlIGluZm8gKi8KKworCWh3LT52ZW5kb3JfaWQgPSBwZGV2LT52ZW5kb3I7CisJaHctPmRldmljZV9pZCA9IHBkZXYtPmRldmljZTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZody0+cmV2aXNpb25faWQpOworCWh3LT5zdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlody0+c3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisKKwlody0+bWJ4Lm9wcy5pbml0X3BhcmFtcyhodyk7CisJaHctPm1hYy5tYXhfdHhfcXVldWVzID0gTUFYX1RYX1FVRVVFUzsKKwlody0+bWFjLm1heF9yeF9xdWV1ZXMgPSBNQVhfUlhfUVVFVUVTOworCWVyciA9IGh3LT5tYWMub3BzLnJlc2V0X2h3KGh3KTsKKwlpZiAoZXJyKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCSAgICAgICAgICJQRiBzdGlsbCBpbiByZXNldCBzdGF0ZSwgYXNzaWduaW5nIG5ldyBhZGRyZXNzXG4iKTsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoaHctPm1hYy5hZGRyKTsKKwl9IGVsc2UgeworCQllcnIgPSBody0+bWFjLm9wcy5pbml0X2h3KGh3KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpbml0X3NoYXJlZF9jb2RlIGZhaWxlZDogJWRcbiIsIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovCisJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDIwMDAwOworCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKKworCS8qIHNldCBkZWZhdWx0cyBmb3IgZWl0ciBpbiBNZWdhQnl0ZXMgKi8KKwlhZGFwdGVyLT5laXRyX2xvdyA9IDEwOworCWFkYXB0ZXItPmVpdHJfaGlnaCA9IDIwOworCisJLyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqLworCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBJWEdCRVZGX0RFRkFVTFRfVFhEOworCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBJWEdCRVZGX0RFRkFVTFRfUlhEOworCisJLyogZW5hYmxlIHJ4IGNzdW0gYnkgZGVmYXVsdCAqLworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEOworCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwcmMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZHUFJDKTsKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdPUkNfTFNCKTsKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYyB8PQorCQkoKCh1NjQpKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdPUkNfTVNCKSkpIDw8IDMyKTsKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ3B0YyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdQVEMpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3RjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR09UQ19MU0IpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3RjIHw9CisJCSgoKHU2NCkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR09UQ19NU0IpKSkgPDwgMzIpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZtcHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTVBSQyk7CisKKwlhZGFwdGVyLT5zdGF0cy5iYXNlX3ZmZ3ByYyA9IGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZncHJjOworCWFkYXB0ZXItPnN0YXRzLmJhc2VfdmZnb3JjID0gYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvcmM7CisJYWRhcHRlci0+c3RhdHMuYmFzZV92ZmdwdGMgPSBhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ3B0YzsKKwlhZGFwdGVyLT5zdGF0cy5iYXNlX3ZmZ290YyA9IGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3RjOworCWFkYXB0ZXItPnN0YXRzLmJhc2VfdmZtcHJjID0gYWRhcHRlci0+c3RhdHMubGFzdF92Zm1wcmM7Cit9CisKKyNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzJiaXQocmVnLCBsYXN0X2NvdW50ZXIsIGNvdW50ZXIpCVwKKwl7CQkJCQkJCVwKKwkJdTMyIGN1cnJlbnRfY291bnRlciA9IElYR0JFX1JFQURfUkVHKGh3LCByZWcpOwlcCisJCWlmIChjdXJyZW50X2NvdW50ZXIgPCBsYXN0X2NvdW50ZXIpCQlcCisJCQljb3VudGVyICs9IDB4MTAwMDAwMDAwTEw7CQlcCisJCWxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjsJCQlcCisJCWNvdW50ZXIgJj0gMHhGRkZGRkZGRjAwMDAwMDAwTEw7CQlcCisJCWNvdW50ZXIgfD0gY3VycmVudF9jb3VudGVyOwkJCVwKKwl9CisKKyNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQocmVnX2xzYiwgcmVnX21zYiwgbGFzdF9jb3VudGVyLCBjb3VudGVyKSBcCisJewkJCQkJCQkJIFwKKwkJdTY0IGN1cnJlbnRfY291bnRlcl9sc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX2xzYik7CSBcCisJCXU2NCBjdXJyZW50X2NvdW50ZXJfbXNiID0gSVhHQkVfUkVBRF9SRUcoaHcsIHJlZ19tc2IpOwkgXAorCQl1NjQgY3VycmVudF9jb3VudGVyID0gKGN1cnJlbnRfY291bnRlcl9tc2IgPDwgMzIpIHwgICAgICBcCisJCQljdXJyZW50X2NvdW50ZXJfbHNiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoY3VycmVudF9jb3VudGVyIDwgbGFzdF9jb3VudGVyKQkJCSBcCisJCQljb3VudGVyICs9IDB4MTAwMDAwMDAwMExMOwkJCSBcCisJCWxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjsJCQkJIFwKKwkJY291bnRlciAmPSAweEZGRkZGRkYwMDAwMDAwMDBMTDsJCQkgXAorCQljb3VudGVyIHw9IGN1cnJlbnRfY291bnRlcjsJCQkJIFwKKwl9CisvKioKKyAqIGl4Z2JldmZfdXBkYXRlX3N0YXRzIC0gVXBkYXRlIHRoZSBib2FyZCBzdGF0aXN0aWNzIGNvdW50ZXJzLgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCit2b2lkIGl4Z2JldmZfdXBkYXRlX3N0YXRzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCVVQREFURV9WRl9DT1VOVEVSXzMyYml0KElYR0JFX1ZGR1BSQywgYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwcmMsCisJCQkJYWRhcHRlci0+c3RhdHMudmZncHJjKTsKKwlVUERBVEVfVkZfQ09VTlRFUl8zMmJpdChJWEdCRV9WRkdQVEMsIGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZncHRjLAorCQkJCWFkYXB0ZXItPnN0YXRzLnZmZ3B0Yyk7CisJVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQoSVhHQkVfVkZHT1JDX0xTQiwgSVhHQkVfVkZHT1JDX01TQiwKKwkJCQlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYywKKwkJCQlhZGFwdGVyLT5zdGF0cy52ZmdvcmMpOworCVVQREFURV9WRl9DT1VOVEVSXzM2Yml0KElYR0JFX1ZGR09UQ19MU0IsIElYR0JFX1ZGR09UQ19NU0IsCisJCQkJYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvdGMsCisJCQkJYWRhcHRlci0+c3RhdHMudmZnb3RjKTsKKwlVUERBVEVfVkZfQ09VTlRFUl8zMmJpdChJWEdCRV9WRk1QUkMsIGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZtcHJjLAorCQkJCWFkYXB0ZXItPnN0YXRzLnZmbXByYyk7CisKKwkvKiBGaWxsIG91dCB0aGUgT1Mgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KKwlhZGFwdGVyLT5uZXRfc3RhdHMubXVsdGljYXN0ID0gYWRhcHRlci0+c3RhdHMudmZtcHJjIC0KKwkJYWRhcHRlci0+c3RhdHMuYmFzZV92Zm1wcmM7Cit9CisKKy8qKgorICogaXhnYmV2Zl93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjaworICogQGRhdGE6IHBvaW50ZXIgdG8gYWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZworICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopZGF0YTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXU2NCBlaWNzID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKKwkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcworCSAqLworCisJaWYgKHRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlnb3RvIHdhdGNoZG9nX3Nob3J0X2NpcmN1aXQ7CisKKwkvKiBnZXQgb25lIGJpdCBmb3IgZXZlcnkgYWN0aXZlIHR4L3J4IGludGVycnVwdCB2ZWN0b3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcXYgPSBhZGFwdGVyLT5xX3ZlY3RvcltpXTsKKwkJaWYgKHF2LT5yeHJfY291bnQgfHwgcXYtPnR4cl9jb3VudCkKKwkJCWVpY3MgfD0gKDEgPDwgaSk7CisJfQorCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJQ1MsICh1MzIpZWljcyk7CisKK3dhdGNoZG9nX3Nob3J0X2NpcmN1aXQ6CisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7Cit9CisKKy8qKgorICogaXhnYmV2Zl90eF90aW1lb3V0IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOworCWFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgcmVzZXRfdGFzayk7CisKKwkvKiBJZiB3ZSdyZSBhbHJlYWR5IGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KKwlpZiAodGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKKwkgICAgdGVzdF9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCisJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOworCisJaXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworfQorCisvKioKKyAqIGl4Z2JldmZfd2F0Y2hkb2dfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gYnJpbmcgbGluayB1cAorICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl93YXRjaGRvZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwKKwkJCQkJCSAgICAgICB3YXRjaGRvZ190YXNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGxpbmtfc3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCWJvb2wgbGlua191cCA9IGFkYXB0ZXItPmxpbmtfdXA7CisKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7CisKKwkvKgorCSAqIEFsd2F5cyBjaGVjayB0aGUgbGluayBvbiB0aGUgd2F0Y2hkb2cgYmVjYXVzZSB3ZSBoYXZlCisJICogbm8gTFNDIGludGVycnVwdAorCSAqLworCWlmIChody0+bWFjLm9wcy5jaGVja19saW5rKSB7CisJCWlmICgoaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsCisJCQkJCSAgICAmbGlua191cCwgZmFsc2UpKSAhPSAwKSB7CisJCQlhZGFwdGVyLT5saW5rX3VwID0gbGlua191cDsKKwkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJCQlnb3RvIHBmX2hhc19yZXNldDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGFsd2F5cyBhc3N1bWUgbGluayBpcyB1cCwgaWYgbm8gY2hlY2sgbGluaworCQkgKiBmdW5jdGlvbiAqLworCQlsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWxpbmtfdXAgPSB0cnVlOworCX0KKwlhZGFwdGVyLT5saW5rX3VwID0gbGlua191cDsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKKworCWlmIChsaW5rX3VwKSB7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlod19kYmcoJmFkYXB0ZXItPmh3LCAiTklDIExpbmsgaXMgVXAgJXMsICIsCisJCQkgICAgICAgKChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSA/CisJCQkJIjEwIEdicHMiIDogIjEgR2JwcyIpKTsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQl9IGVsc2UgeworCQkJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLworCQkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOworCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJaHdfZGJnKCZhZGFwdGVyLT5odywgIk5JQyBMaW5rIGlzIERvd25cbiIpOworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQl9CisJfQorCitwZl9oYXNfcmVzZXQ6CisJaXhnYmV2Zl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CisKKwkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyIGV2ZXJ5IHdhdGNoZG9nIHBlcmlvZCAqLworCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gdHJ1ZTsKKworCS8qIFJlc2V0IHRoZSB0aW1lciAqLworCWlmICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCisJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArICgyICogSFopKSk7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLOworfQorCisvKioKKyAqIGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMgLSBGcmVlIFR4IFJlc291cmNlcyBwZXIgUXVldWUKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHR4X3Jpbmc6IFR4IGRlc2NyaXB0b3IgcmluZyBmb3IgYSBzcGVjaWZpYyBxdWV1ZQorICoKKyAqIEZyZWUgYWxsIHRyYW5zbWl0IHNvZnR3YXJlIHJlc291cmNlcworICoqLwordm9pZCBpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKworCWl4Z2JldmZfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCB0eF9yaW5nKTsKKworCXZmcmVlKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKTsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHR4X3JpbmctPnNpemUsIHR4X3JpbmctPmRlc2MsIHR4X3JpbmctPmRtYSk7CisKKwl0eF9yaW5nLT5kZXNjID0gTlVMTDsKK30KKworLyoqCisgKiBpeGdiZXZmX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyAtIEZyZWUgVHggUmVzb3VyY2VzIGZvciBBbGwgUXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBGcmVlIGFsbCB0cmFuc21pdCBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJICAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisKK30KKworLyoqCisgKiBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyAtIGFsbG9jYXRlIFR4IHJlc291cmNlcyAoRGVzY3JpcHRvcnMpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0eF9yaW5nOiAgICB0eCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK2ludCBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBzaXplOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCisJCWdvdG8gZXJyOworCW1lbXNldCh0eF9yaW5nLT50eF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CisKKwl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKKwkJCQkJICAgICAmdHhfcmluZy0+ZG1hKTsKKwlpZiAoIXR4X3JpbmctPmRlc2MpCisJCWdvdG8gZXJyOworCisJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOworCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOworCXR4X3JpbmctPndvcmtfbGltaXQgPSB0eF9yaW5nLT5jb3VudDsKKwlyZXR1cm4gMDsKKworZXJyOgorCXZmcmVlKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKTsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IE5VTEw7CisJaHdfZGJnKCZhZGFwdGVyLT5odywgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0cmFuc21pdCAiCisJICAgICAgICJkZXNjcmlwdG9yIHJpbmdcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyAtIGFsbG9jYXRlIGFsbCBxdWV1ZXMgVHggcmVzb3VyY2VzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2l0aCBhbiBlcnJvciwgdGhlbiBpdCdzIHBvc3NpYmxlIG9uZSBvcgorICogbW9yZSBvZiB0aGUgcmluZ3MgaXMgcG9wdWxhdGVkICh3aGlsZSB0aGUgcmVzdCBhcmUgbm90KS4gIEl0IGlzIHRoZQorICogY2FsbGVycyBkdXR5IHRvIGNsZWFuIHRob3NlIG9ycGhhbmVkIHJpbmdzLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWVyciA9IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWYgKCFlcnIpCisJCQljb250aW51ZTsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzIC0gYWxsb2NhdGUgUnggcmVzb3VyY2VzIChEZXNjcmlwdG9ycykKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHJ4X3Jpbmc6ICAgIHJ4IGRlc2NyaXB0b3IgcmluZyAoZm9yIGEgc3BlY2lmaWMgcXVldWUpIHRvIHNldHVwCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK2ludCBpeGdiZXZmX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBzaXplOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gdm1hbGxvYyBidWZmZXIgbWVtb3J5IGZvciAiCisJCSAgICAgICAidGhlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJfQorCW1lbXNldChyeF9yaW5nLT5yeF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiBSb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCisJcnhfcmluZy0+c2l6ZSA9IHJ4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjKTsKKwlyeF9yaW5nLT5zaXplID0gQUxJR04ocnhfcmluZy0+c2l6ZSwgNDA5Nik7CisKKwlyeF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwKKwkJCQkJICAgICAmcnhfcmluZy0+ZG1hKTsKKworCWlmICghcnhfcmluZy0+ZGVzYykgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJICAgICAgICJ0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOworCQl2ZnJlZShyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyk7CisJCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gTlVMTDsKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJfQorCisJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOworCisJcmV0dXJuIDA7CithbGxvY19mYWlsZWQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogaXhnYmV2Zl9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzIC0gYWxsb2NhdGUgYWxsIHF1ZXVlcyBSeCByZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aXRoIGFuIGVycm9yLCB0aGVuIGl0J3MgcG9zc2libGUgb25lIG9yCisgKiBtb3JlIG9mIHRoZSByaW5ncyBpcyBwb3B1bGF0ZWQgKHdoaWxlIHRoZSByZXN0IGFyZSBub3QpLiAgSXQgaXMgdGhlCisgKiBjYWxsZXJzIGR1dHkgdG8gY2xlYW4gdGhvc2Ugb3JwaGFuZWQgcmluZ3MuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZXZmX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJZXJyID0gaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZiAoIWVycikKKwkJCWNvbnRpbnVlOworCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkgICAgICAgIkFsbG9jYXRpb24gZm9yIFJ4IFF1ZXVlICV1IGZhaWxlZFxuIiwgaSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfZnJlZV9yeF9yZXNvdXJjZXMgLSBGcmVlIFJ4IFJlc291cmNlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAcnhfcmluZzogcmluZyB0byBjbGVhbiB0aGUgcmVzb3VyY2VzIGZyb20KKyAqCisgKiBGcmVlIGFsbCByZWNlaXZlIHNvZnR3YXJlIHJlc291cmNlcworICoqLwordm9pZCBpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpeGdiZXZmX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgcnhfcmluZyk7CisKKwl2ZnJlZShyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyk7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCByeF9yaW5nLT5zaXplLCByeF9yaW5nLT5kZXNjLCByeF9yaW5nLT5kbWEpOworCisJcnhfcmluZy0+ZGVzYyA9IE5VTEw7Cit9CisKKy8qKgorICogaXhnYmV2Zl9mcmVlX2FsbF9yeF9yZXNvdXJjZXMgLSBGcmVlIFJ4IFJlc291cmNlcyBmb3IgQWxsIFF1ZXVlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogRnJlZSBhbGwgcmVjZWl2ZSBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJICAmYWRhcHRlci0+cnhfcmluZ1tpXSk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9vcGVuIC0gQ2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBtYWRlIGFjdGl2ZQorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKgorICogVGhlIG9wZW4gZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBtYWRlCisgKiBhY3RpdmUgYnkgdGhlIHN5c3RlbSAoSUZGX1VQKS4gIEF0IHRoaXMgcG9pbnQgYWxsIHJlc291cmNlcyBuZWVkZWQKKyAqIGZvciB0cmFuc21pdCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zIGFyZSBhbGxvY2F0ZWQsIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBPUywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIHN0YXJ0ZWQsCisgKiBhbmQgdGhlIHN0YWNrIGlzIG5vdGlmaWVkIHRoYXQgdGhlIGludGVyZmFjZSBpcyByZWFkeS4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgZXJyOworCisJLyogZGlzYWxsb3cgb3BlbiBkdXJpbmcgdGVzdCAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChody0+YWRhcHRlcl9zdG9wcGVkKSB7CisJCWl4Z2JldmZfcmVzZXQoYWRhcHRlcik7CisJCS8qIGlmIGFkYXB0ZXIgaXMgc3RpbGwgc3RvcHBlZCB0aGVuIFBGIGlzbid0IHVwIGFuZAorCQkgKiB0aGUgdmYgY2FuJ3Qgc3RhcnQuICovCisJCWlmIChody0+YWRhcHRlcl9zdG9wcGVkKSB7CisJCQllcnIgPSBJWEdCRV9FUlJfTUJYOworCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RhcnQgLSBwZXJoYXBzIHRoZSBQRiIKKwkJCSAgICAgICAiRHJpdmVyIGlzbid0IHVwIHlldFxuIik7CisJCQlnb3RvIGVycl9zZXR1cF9yZXNldDsKKwkJfQorCX0KKworCS8qIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3JzICovCisJZXJyID0gaXhnYmV2Zl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3NldHVwX3R4OworCisJLyogYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9ycyAqLworCWVyciA9IGl4Z2JldmZfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zZXR1cF9yeDsKKworCWl4Z2JldmZfY29uZmlndXJlKGFkYXB0ZXIpOworCisJLyoKKwkgKiBNYXAgdGhlIFR4L1J4IHJpbmdzIHRvIHRoZSB2ZWN0b3JzIHdlIHdlcmUgYWxsb3R0ZWQuCisJICogaWYgcmVxdWVzdF9pcnEgd2lsbCBiZSBjYWxsZWQgaW4gdGhpcyBmdW5jdGlvbiBtYXBfcmluZ3MKKwkgKiBtdXN0IGJlIGNhbGxlZCAqYmVmb3JlKiB1cF9jb21wbGV0ZQorCSAqLworCWl4Z2JldmZfbWFwX3JpbmdzX3RvX3ZlY3RvcnMoYWRhcHRlcik7CisKKwllcnIgPSBpeGdiZXZmX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VwOworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cywgbWF5IGF1dG8gbWFzayAqLworCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQ1IpOworCWVyciA9IGl4Z2JldmZfcmVxdWVzdF9pcnEoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxX2lycTsKKworCWl4Z2JldmZfaXJxX2VuYWJsZShhZGFwdGVyLCB0cnVlLCB0cnVlKTsKKworCXJldHVybiAwOworCitlcnJfcmVxX2lycToKKwlpeGdiZXZmX2Rvd24oYWRhcHRlcik7CitlcnJfdXA6CisJaXhnYmV2Zl9mcmVlX2lycShhZGFwdGVyKTsKK2Vycl9zZXR1cF9yeDoKKwlpeGdiZXZmX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9zZXR1cF90eDoKKwlpeGdiZXZmX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCitlcnJfc2V0dXBfcmVzZXQ6CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwKKyAqCisgKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAorICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAorICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCisgKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpeGdiZXZmX2Rvd24oYWRhcHRlcik7CisJaXhnYmV2Zl9mcmVlX2lycShhZGFwdGVyKTsKKworCWl4Z2JldmZfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl90c28oc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHhfZmxhZ3MsIHU4ICpoZHJfbGVuKQoreworCXN0cnVjdCBpeGdiZV9hZHZfdHhfY29udGV4dF9kZXNjICpjb250ZXh0X2Rlc2M7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXUzMiB2bGFuX21hY2lwX2xlbnMgPSAwLCB0eXBlX3R1Y21kX21saGw7CisJdTMyIG1zc19sNGxlbl9pZHgsIGw0bGVuOworCisJaWYgKHNrYl9pc19nc28oc2tiKSkgeworCQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkgeworCQkJZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWw0bGVuID0gdGNwX2hkcmxlbihza2IpOworCQkqaGRyX2xlbiArPSBsNGxlbjsKKworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJCQlpcGgtPnRvdF9sZW4gPSAwOworCQkJaXBoLT5jaGVjayA9IDA7CisJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsCisJCQkJCQkJCSBpcGgtPmRhZGRyLCAwLAorCQkJCQkJCQkgSVBQUk9UT19UQ1AsCisJCQkJCQkJCSAwKTsKKwkJCWFkYXB0ZXItPmh3X3Rzb19jdHh0Kys7CisJCX0gZWxzZSBpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1RDUFY2KSB7CisJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiA9IDA7CisJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0KKwkJCSAgICB+Y3N1bV9pcHY2X21hZ2ljKCZpcHY2X2hkcihza2IpLT5zYWRkciwKKwkJCQkJICAgICAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCisJCQkJCSAgICAgMCwgSVBQUk9UT19UQ1AsIDApOworCQkJYWRhcHRlci0+aHdfdHNvNl9jdHh0Kys7CisJCX0KKworCQlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CisKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCWNvbnRleHRfZGVzYyA9IElYR0JFX1RYX0NUWFRERVNDX0FEVigqdHhfcmluZywgaSk7CisKKwkJLyogVkxBTiBNQUNMRU4gSVBMRU4gKi8KKwkJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikKKwkJCXZsYW5fbWFjaXBfbGVucyB8PQorCQkJCSh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU5fTUFTSyk7CisJCXZsYW5fbWFjaXBfbGVucyB8PSAoKHNrYl9uZXR3b3JrX29mZnNldChza2IpKSA8PAorCQkJCSAgICBJWEdCRV9BRFZUWERfTUFDTEVOX1NISUZUKTsKKwkJKmhkcl9sZW4gKz0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CisJCXZsYW5fbWFjaXBfbGVucyB8PQorCQkJKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CisJCSpoZHJfbGVuICs9CisJCQkoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTsKKwkJY29udGV4dF9kZXNjLT52bGFuX21hY2lwX2xlbnMgPSBjcHVfdG9fbGUzMih2bGFuX21hY2lwX2xlbnMpOworCQljb250ZXh0X2Rlc2MtPnNlcW51bV9zZWVkID0gMDsKKworCQkvKiBBRFYgRFRZUCBUVUNNRCBNS1JMT0MvSVNDU0lIRURMRU4gKi8KKwkJdHlwZV90dWNtZF9tbGhsID0gKElYR0JFX1RYRF9DTURfREVYVCB8CisJCQkJICAgIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQpOworCisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKKwkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQljb250ZXh0X2Rlc2MtPnR5cGVfdHVjbWRfbWxobCA9IGNwdV90b19sZTMyKHR5cGVfdHVjbWRfbWxobCk7CisKKwkJLyogTVNTIEw0TEVOIElEWCAqLworCQltc3NfbDRsZW5faWR4ID0KKwkJCShza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplIDw8IElYR0JFX0FEVlRYRF9NU1NfU0hJRlQpOworCQltc3NfbDRsZW5faWR4IHw9IChsNGxlbiA8PCBJWEdCRV9BRFZUWERfTDRMRU5fU0hJRlQpOworCQkvKiB1c2UgaW5kZXggMSBmb3IgVFNPICovCisJCW1zc19sNGxlbl9pZHggfD0gKDEgPDwgSVhHQkVfQURWVFhEX0lEWF9TSElGVCk7CisJCWNvbnRleHRfZGVzYy0+bXNzX2w0bGVuX2lkeCA9IGNwdV90b19sZTMyKG1zc19sNGxlbl9pZHgpOworCisJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOworCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXhnYmV2Zl90eF9jc3VtKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHhfZmxhZ3MpCit7CisJc3RydWN0IGl4Z2JlX2Fkdl90eF9jb250ZXh0X2Rlc2MgKmNvbnRleHRfZGVzYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXUzMiB2bGFuX21hY2lwX2xlbnMgPSAwLCB0eXBlX3R1Y21kX21saGwgPSAwOworCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgfHwKKwkgICAgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikpIHsKKwkJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJY29udGV4dF9kZXNjID0gSVhHQkVfVFhfQ1RYVERFU0NfQURWKCp0eF9yaW5nLCBpKTsKKworCQlpZiAodHhfZmxhZ3MgJiBJWEdCRV9UWF9GTEFHU19WTEFOKQorCQkJdmxhbl9tYWNpcF9sZW5zIHw9ICh0eF9mbGFncyAmCisJCQkJCSAgICBJWEdCRV9UWF9GTEFHU19WTEFOX01BU0spOworCQl2bGFuX21hY2lwX2xlbnMgfD0gKHNrYl9uZXR3b3JrX29mZnNldChza2IpIDw8CisJCQkJICAgIElYR0JFX0FEVlRYRF9NQUNMRU5fU0hJRlQpOworCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJCXZsYW5fbWFjaXBfbGVucyB8PSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCisJCQkJCSAgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CisKKwkJY29udGV4dF9kZXNjLT52bGFuX21hY2lwX2xlbnMgPSBjcHVfdG9fbGUzMih2bGFuX21hY2lwX2xlbnMpOworCQljb250ZXh0X2Rlc2MtPnNlcW51bV9zZWVkID0gMDsKKworCQl0eXBlX3R1Y21kX21saGwgfD0gKElYR0JFX1RYRF9DTURfREVYVCB8CisJCQkJICAgIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQpOworCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9JUFY0OworCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQorCQkJCQkgICAgSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQkJYnJlYWs7CisJCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCisJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQorCQkJCQkJSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgICAgICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCAiCisJCQkJCSAgICAgICAicHJvdG89JXghXG4iLAorCQkJCQkgICAgICAgc2tiLT5wcm90b2NvbCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJY29udGV4dF9kZXNjLT50eXBlX3R1Y21kX21saGwgPSBjcHVfdG9fbGUzMih0eXBlX3R1Y21kX21saGwpOworCQkvKiB1c2UgaW5kZXggemVybyBmb3IgdHggY2hlY2tzdW0gb2ZmbG9hZCAqLworCQljb250ZXh0X2Rlc2MtPm1zc19sNGxlbl9pZHggPSAwOworCisJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCWFkYXB0ZXItPmh3X2NzdW1fdHhfZ29vZCsrOworCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl90eF9tYXAoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR4X2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgZmlyc3QpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJdW5zaWduZWQgaW50IGY7CisKKwlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CisKKwlsZW4gPSBtaW4oc2tiX2hlYWRsZW4oc2tiKSwgdG90YWwpOworCXdoaWxlIChsZW4pIHsKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCXNpemUgPSBtaW4obGVuLCAodW5zaWduZWQgaW50KUlYR0JFX01BWF9EQVRBX1BFUl9UWEQpOworCisJCXR4X2J1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOworCQl0eF9idWZmZXJfaW5mby0+bWFwcGVkX2FzX3BhZ2UgPSBmYWxzZTsKKwkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgIHNrYi0+ZGF0YSArIG9mZnNldCwKKwkJCQkJCSAgICAgc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgdHhfYnVmZmVyX2luZm8tPmRtYSkpCisJCQlnb3RvIGRtYV9lcnJvcjsKKwkJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQl0eF9idWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisKKwkJbGVuIC09IHNpemU7CisJCXRvdGFsIC09IHNpemU7CisJCW9mZnNldCArPSBzaXplOworCQljb3VudCsrOworCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJfQorCisJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKKwkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CisJCWxlbiA9IG1pbigodW5zaWduZWQgaW50KWZyYWctPnNpemUsIHRvdGFsKTsKKwkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisKKwkJd2hpbGUgKGxlbikgeworCQkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCQlzaXplID0gbWluKGxlbiwgKHVuc2lnbmVkIGludClJWEdCRV9NQVhfREFUQV9QRVJfVFhEKTsKKworCQkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CisJCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQkJICAgZnJhZy0+cGFnZSwKKwkJCQkJCQkgICBvZmZzZXQsCisJCQkJCQkJICAgc2l6ZSwKKwkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXR4X2J1ZmZlcl9pbmZvLT5tYXBwZWRfYXNfcGFnZSA9IHRydWU7CisJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHR4X2J1ZmZlcl9pbmZvLT5kbWEpKQorCQkJCWdvdG8gZG1hX2Vycm9yOworCQkJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCQlsZW4gLT0gc2l6ZTsKKwkJCXRvdGFsIC09IHNpemU7CisJCQlvZmZzZXQgKz0gc2l6ZTsKKwkJCWNvdW50Kys7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwkJfQorCQlpZiAodG90YWwgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IDApCisJCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7CisJZWxzZQorCQlpID0gaSAtIDE7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0uc2tiID0gc2tiOworCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKKworCXJldHVybiBjb3VudDsKKworZG1hX2Vycm9yOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKworCS8qIGNsZWFyIHRpbWVzdGFtcCBhbmQgZG1hIG1hcHBpbmdzIGZvciBmYWlsZWQgdHhfYnVmZmVyX2luZm8gbWFwICovCisJdHhfYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSAwOworCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gMDsKKwljb3VudC0tOworCisJLyogY2xlYXIgdGltZXN0YW1wIGFuZCBkbWEgbWFwcGluZ3MgZm9yIHJlbWFpbmluZyBwb3J0aW9uIG9mIHBhY2tldCAqLworCXdoaWxlIChjb3VudCA+PSAwKSB7CisJCWNvdW50LS07CisJCWktLTsKKwkJaWYgKGkgPCAwKQorCQkJaSArPSB0eF9yaW5nLT5jb3VudDsKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCWl4Z2JldmZfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgdHhfYnVmZmVyX2luZm8pOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl90eF9xdWV1ZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nLCBpbnQgdHhfZmxhZ3MsCisJCQkgICAgIGludCBjb3VudCwgdTMyIHBheWxlbiwgdTggaGRyX2xlbikKK3sKKwl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYyA9IE5VTEw7CisJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1MzIgb2xpbmZvX3N0YXR1cyA9IDAsIGNtZF90eXBlX2xlbiA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwl1MzIgdHhkX2NtZCA9IElYR0JFX1RYRF9DTURfRU9QIHwgSVhHQkVfVFhEX0NNRF9SUyB8IElYR0JFX1RYRF9DTURfSUZDUzsKKworCWNtZF90eXBlX2xlbiB8PSBJWEdCRV9BRFZUWERfRFRZUF9EQVRBOworCisJY21kX3R5cGVfbGVuIHw9IElYR0JFX0FEVlRYRF9EQ01EX0lGQ1MgfCBJWEdCRV9BRFZUWERfRENNRF9ERVhUOworCisJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikKKwkJY21kX3R5cGVfbGVuIHw9IElYR0JFX0FEVlRYRF9EQ01EX1ZMRTsKKworCWlmICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1RTTykgeworCQljbWRfdHlwZV9sZW4gfD0gSVhHQkVfQURWVFhEX0RDTURfVFNFOworCisJCW9saW5mb19zdGF0dXMgfD0gSVhHQkVfVFhEX1BPUFRTX1RYU00gPDwKKwkJCUlYR0JFX0FEVlRYRF9QT1BUU19TSElGVDsKKworCQkvKiB1c2UgaW5kZXggMSBjb250ZXh0IGZvciB0c28gKi8KKwkJb2xpbmZvX3N0YXR1cyB8PSAoMSA8PCBJWEdCRV9BRFZUWERfSURYX1NISUZUKTsKKwkJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfSVBWNCkKKwkJCW9saW5mb19zdGF0dXMgfD0gSVhHQkVfVFhEX1BPUFRTX0lYU00gPDwKKwkJCQlJWEdCRV9BRFZUWERfUE9QVFNfU0hJRlQ7CisKKwl9IGVsc2UgaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfQ1NVTSkKKwkJb2xpbmZvX3N0YXR1cyB8PSBJWEdCRV9UWERfUE9QVFNfVFhTTSA8PAorCQkJSVhHQkVfQURWVFhEX1BPUFRTX1NISUZUOworCisJb2xpbmZvX3N0YXR1cyB8PSAoKHBheWxlbiAtIGhkcl9sZW4pIDw8IElYR0JFX0FEVlRYRF9QQVlMRU5fU0hJRlQpOworCisJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCXdoaWxlIChjb3VudC0tKSB7CisJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOworCQl0eF9kZXNjLT5yZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQodHhfYnVmZmVyX2luZm8tPmRtYSk7CisJCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuID0KKwkJCWNwdV90b19sZTMyKGNtZF90eXBlX2xlbiB8IHR4X2J1ZmZlcl9pbmZvLT5sZW5ndGgpOworCQl0eF9kZXNjLT5yZWFkLm9saW5mb19zdGF0dXMgPSBjcHVfdG9fbGUzMihvbGluZm9fc3RhdHVzKTsKKwkJaSsrOworCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCWkgPSAwOworCX0KKworCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuIHw9IGNwdV90b19sZTMyKHR4ZF9jbWQpOworCisJLyoKKwkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CisJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKKwkgKiBzdWNoIGFzIElBLTY0KS4KKwkgKi8KKwl3bWIoKTsKKworCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKwl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworfQorCitzdGF0aWMgaW50IF9faXhnYmV2Zl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywgaW50IHNpemUpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCS8qIEhlcmJlcnQncyBvcmlnaW5hbCBwYXRjaCBoYWQ6CisJICogIHNtcF9tYl9fYWZ0ZXJfbmV0aWZfc3RvcF9xdWV1ZSgpOworCSAqIGJ1dCBzaW5jZSB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0LCBqdXN0IG9wZW4gY29kZSBpdC4gKi8KKwlzbXBfbWIoKTsKKworCS8qIFdlIG5lZWQgdG8gY2hlY2sgYWdhaW4gaW4gYSBjYXNlIGFub3RoZXIgQ1BVIGhhcyBqdXN0CisJICogbWFkZSByb29tIGF2YWlsYWJsZS4gKi8KKwlpZiAobGlrZWx5KElYR0JFX0RFU0NfVU5VU0VEKHR4X3JpbmcpIDwgc2l6ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBBIHJlcHJpZXZlISAtIHVzZSBzdGFydF9xdWV1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgY2FsbCBzY2hlZHVsZSAqLworCW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpeGdiZXZmX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywgaW50IHNpemUpCit7CisJaWYgKGxpa2VseShJWEdCRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBzaXplKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIF9faXhnYmV2Zl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZzsKKwl1bnNpZ25lZCBpbnQgZmlyc3Q7CisJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKKwl1OCBoZHJfbGVuID0gMDsKKwlpbnQgcl9pZHggPSAwLCB0c287CisJaW50IGNvdW50ID0gMDsKKworCXVuc2lnbmVkIGludCBmOworCisJdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKKworCWlmIChhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdHhfZmxhZ3MgfD0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCXR4X2ZsYWdzIDw8PSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUOworCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19WTEFOOworCX0KKworCS8qIGZvdXIgdGhpbmdzIGNhbiBjYXVzZSB1cyB0byBuZWVkIGEgY29udGV4dCBkZXNjcmlwdG9yICovCisJaWYgKHNrYl9pc19nc28oc2tiKSB8fAorCSAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgfHwKKwkgICAgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikpCisJCWNvdW50Kys7CisKKwljb3VudCArPSBUWERfVVNFX0NPVU5UKHNrYl9oZWFkbGVuKHNrYikpOworCWZvciAoZiA9IDA7IGYgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmKyspCisJCWNvdW50ICs9IFRYRF9VU0VfQ09VTlQoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXS5zaXplKTsKKworCWlmIChpeGdiZXZmX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBjb3VudCkpIHsKKwkJYWRhcHRlci0+dHhfYnVzeSsrOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJZmlyc3QgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfSVBWNDsKKwl0c28gPSBpeGdiZXZmX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLCAmaGRyX2xlbik7CisJaWYgKHRzbyA8IDApIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAodHNvKQorCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19UU087CisJZWxzZSBpZiAoaXhnYmV2Zl90eF9jc3VtKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MpICYmCisJCSAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCisJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX0NTVU07CisKKwlpeGdiZXZmX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAorCQkJIGl4Z2JldmZfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsIGZpcnN0KSwKKwkJCSBza2ItPmxlbiwgaGRyX2xlbik7CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCWl4Z2JldmZfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIERFU0NfTkVFREVEKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKy8qKgorICogaXhnYmV2Zl9nZXRfc3RhdHMgLSBHZXQgU3lzdGVtIE5ldHdvcmsgU3RhdGlzdGljcworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KKyAqIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3R1YWxseSB1cGRhdGVkIGZyb20gdGhlIHRpbWVyIGNhbGxiYWNrLgorICoqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppeGdiZXZmX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogb25seSByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdHMgKi8KKwlyZXR1cm4gJmFkYXB0ZXItPm5ldF9zdGF0czsKK30KKworLyoqCisgKiBpeGdiZXZmX3NldF9tYWMgLSBDaGFuZ2UgdGhlIEV0aGVybmV0IEFkZHJlc3Mgb2YgdGhlIE5JQworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQHA6IHBvaW50ZXIgdG8gYW4gYWRkcmVzcyBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkoaHctPm1hYy5hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCWlmIChody0+bWFjLm9wcy5zZXRfcmFyKQorCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBuZXdfbXR1OiBuZXcgdmFsdWUgZm9yIG1heGltdW0gZnJhbWUgc2l6ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgbWF4X2ZyYW1lID0gbmV3X210dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CisKKwkvKiBNVFUgPCA2OCBpcyBhbiBlcnJvciBhbmQgY2F1c2VzIHByb2JsZW1zIG9uIHNvbWUga2VybmVscyAqLworCWlmICgobmV3X210dSA8IDY4KSB8fCAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWh3X2RiZygmYWRhcHRlci0+aHcsICJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwKKwkgICAgICAgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOworCS8qIG11c3Qgc2V0IG5ldyBNVFUgYmVmb3JlIGNhbGxpbmcgZG93biBvciB1cCAqLworCW5ldGRldi0+bXR1ID0gbmV3X210dTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWl4Z2JldmZfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWl4Z2JldmZfZG93bihhZGFwdGVyKTsKKwkJaXhnYmV2Zl9mcmVlX2lycShhZGFwdGVyKTsKKwkJaXhnYmV2Zl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CisJCWl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCX0KKworI2lmZGVmIENPTkZJR19QTQorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworI2VuZGlmCisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKyNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4Z2JlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9ICZpeGdiZXZmX29wZW4sCisJLm5kb19zdG9wCQk9ICZpeGdiZXZmX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSAmaXhnYmV2Zl94bWl0X2ZyYW1lLAorCS5uZG9fZ2V0X3N0YXRzCQk9ICZpeGdiZXZmX2dldF9zdGF0cywKKwkubmRvX3NldF9yeF9tb2RlCT0gJml4Z2JldmZfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSAmaXhnYmV2Zl9zZXRfcnhfbW9kZSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9ICZpeGdiZXZmX3NldF9tYWMsCisJLm5kb19jaGFuZ2VfbXR1CQk9ICZpeGdiZXZmX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9ICZpeGdiZXZmX3R4X3RpbWVvdXQsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gJml4Z2JldmZfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9ICZpeGdiZXZmX3ZsYW5fcnhfYWRkX3ZpZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSAmaXhnYmV2Zl92bGFuX3J4X2tpbGxfdmlkLAorfTsKKyNlbmRpZiAvKiBIQVZFX05FVF9ERVZJQ0VfT1BTICovCisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfYXNzaWduX25ldGRldl9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworI2lmZGVmIEhBVkVfTkVUX0RFVklDRV9PUFMKKwlkZXYtPm5ldGRldl9vcHMgPSAmaXhnYmVfbmV0ZGV2X29wczsKKyNlbHNlIC8qIEhBVkVfTkVUX0RFVklDRV9PUFMgKi8KKwlkZXYtPm9wZW4gPSAmaXhnYmV2Zl9vcGVuOworCWRldi0+c3RvcCA9ICZpeGdiZXZmX2Nsb3NlOworCisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmaXhnYmV2Zl94bWl0X2ZyYW1lOworCisJZGV2LT5nZXRfc3RhdHMgPSAmaXhnYmV2Zl9nZXRfc3RhdHM7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmaXhnYmV2Zl9zZXRfcnhfbW9kZTsKKwlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZpeGdiZXZmX3NldF9tYWM7CisJZGV2LT5jaGFuZ2VfbXR1ID0gJml4Z2JldmZfY2hhbmdlX210dTsKKwlkZXYtPnR4X3RpbWVvdXQgPSAmaXhnYmV2Zl90eF90aW1lb3V0OworCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9ICZpeGdiZXZmX3ZsYW5fcnhfcmVnaXN0ZXI7CisJZGV2LT52bGFuX3J4X2FkZF92aWQgPSAmaXhnYmV2Zl92bGFuX3J4X2FkZF92aWQ7CisJZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gJml4Z2JldmZfdmxhbl9yeF9raWxsX3ZpZDsKKyNlbmRpZiAvKiBIQVZFX05FVF9ERVZJQ0VfT1BTICovCisJaXhnYmV2Zl9zZXRfZXRodG9vbF9vcHMoZGV2KTsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOworfQorCisvKioKKyAqIGl4Z2JldmZfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKiBAZW50OiBlbnRyeSBpbiBpeGdiZXZmX3BjaV90YmwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoKKyAqIGl4Z2JldmZfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuCisgKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBhZGFwdGVyIHByaXZhdGUgc3RydWN0dXJlLAorICogYW5kIGEgaGFyZHdhcmUgcmVzZXQgb2NjdXIuCisgKiovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpeGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppaSA9IGl4Z2JldmZfaW5mb190YmxbZW50LT5kcml2ZXJfZGF0YV07CisJc3RhdGljIGludCBjYXJkc19mb3VuZDsKKwlpbnQgZXJyLCBwY2lfdXNpbmdfZGFjOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAmJgorCSAgICAhcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXBjaV91c2luZ19kYWMgPSAxOworCX0gZWxzZSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCWlmIChlcnIpIHsKKwkJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAorCQkJCQkJCSAgRE1BX0JJVF9NQVNLKDMyKSk7CisJCQlpZiAoZXJyKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdXNhYmxlIERNQSAiCisJCQkJCSJjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CisJCQkJZ290byBlcnJfZG1hOworCQkJfQorCQl9CisJCXBjaV91c2luZ19kYWMgPSAwOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaXhnYmV2Zl9kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfcmVxdWVzdF9yZWdpb25zIGZhaWxlZCAweCV4XG4iLCBlcnIpOworCQlnb3RvIGVycl9wY2lfcmVnOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisjaWZkZWYgSEFWRV9UWF9NUQorCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyKSwKKwkJCQkgICBNQVhfVFhfUVVFVUVTKTsKKyNlbHNlCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIpKTsKKyNlbmRpZgorCWlmICghbmV0ZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OworCX0KKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBkZXYtPmRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTsKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5wZGV2ID0gcGRldjsKKwlodyA9ICZhZGFwdGVyLT5odzsKKwlody0+YmFjayA9IGFkYXB0ZXI7CisJYWRhcHRlci0+bXNnX2VuYWJsZSA9ICgxIDw8IERFRkFVTFRfREVCVUdfTEVWRUxfU0hJRlQpIC0gMTsKKworCS8qCisJICogY2FsbCBzYXZlIHN0YXRlIGhlcmUgaW4gc3RhbmRhbG9uZSBkcml2ZXIgYmVjYXVzZSBpdCByZWxpZXMgb24KKwkgKiBhZGFwdGVyIHN0cnVjdCB0byBleGlzdCwgYW5kIG5lZWRzIHRvIGNhbGwgbmV0ZGV2X3ByaXYKKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKworCWh3LT5od19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWh3LT5od19hZGRyKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJaXhnYmV2Zl9hc3NpZ25fbmV0ZGV2X29wcyhuZXRkZXYpOworCisJYWRhcHRlci0+YmRfbnVtYmVyID0gY2FyZHNfZm91bmQ7CisKKwkvKiBTZXR1cCBodyBhcGkgKi8KKwltZW1jcHkoJmh3LT5tYWMub3BzLCBpaS0+bWFjX29wcywgc2l6ZW9mKGh3LT5tYWMub3BzKSk7CisJaHctPm1hYy50eXBlICA9IGlpLT5tYWM7CisKKwltZW1jcHkoJmh3LT5tYngub3BzLCAmaXhnYmV2Zl9tYnhfb3BzLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zKSk7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9QU19DQVBBQkxFOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEU7CisKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwllcnIgPSBpeGdiZXZmX3N3X2luaXQoYWRhcHRlcik7CisKKwlpeGdiZXZmX2luaXRfbGFzdF9jb3VudGVyX3N0YXRzKGFkYXB0ZXIpOworCisjaWZkZWYgTUFYX1NLQl9GUkFHUworCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKKwkJCSAgIE5FVElGX0ZfSVBfQ1NVTSB8CisJCQkgICBORVRJRl9GX0hXX1ZMQU5fVFggfAorCQkJICAgTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCSAgIE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CisKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKworCWlmIChwY2lfdXNpbmdfZGFjKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKworI2VuZGlmIC8qIE1BWF9TS0JfRlJBR1MgKi8KKworCS8qIFRoZSBIVyBNQUMgYWRkcmVzcyB3YXMgc2V0IGFuZC9vciBkZXRlcm1pbmVkIGluIHN3X2luaXQgKi8KKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBNQUMgYWRkcmVzc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX3N3X2luaXQ7CisJfQorCisJaW5pdF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gJml4Z2JldmZfd2F0Y2hkb2c7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGl4Z2JldmZfcmVzZXRfdGFzayk7CisJSU5JVF9XT1JLKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrLCBpeGdiZXZmX3dhdGNoZG9nX3Rhc2spOworCisJZXJyID0gaXhnYmV2Zl9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3dfaW5pdDsKKworCS8qIHBpY2sgdXAgdGhlIFBDSSBidXMgc2V0dGluZ3MgZm9yIHJlcG9ydGluZyBsYXRlciAqLworCWlmIChody0+bWFjLm9wcy5nZXRfYnVzX2luZm8pCisJCWh3LT5tYWMub3BzLmdldF9idXNfaW5mbyhodyk7CisKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCisJYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQgPSB0cnVlOworCisJLyogcHJpbnQgdGhlIE1BQyBhZGRyZXNzICovCisJaHdfZGJnKGh3LCAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnhcbiIsCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMV0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMl0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbM10sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCisJaHdfZGJnKGh3LCAiTUFDOiAlZFxuIiwgaHctPm1hYy50eXBlKTsKKworCWh3X2RiZyhodywgIkxSTyBpcyBkaXNhYmxlZCBcbiIpOworCisJaHdfZGJnKGh3LCAiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvblxuIik7CisJY2FyZHNfZm91bmQrKzsKKwlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorZXJyX3N3X2luaXQ6CisJaXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwlpb3VubWFwKGh3LT5od19hZGRyKTsKK2Vycl9pb3JlbWFwOgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitlcnJfYWxsb2NfZXRoZXJkZXY6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9wY2lfcmVnOgorZXJyX2RtYToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX3JlbW92ZSAtIERldmljZSBSZW1vdmFsIFJvdXRpbmUKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICoKKyAqIGl4Z2JldmZfcmVtb3ZlIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGVydCB0aGUgZHJpdmVyCisgKiB0aGF0IGl0IHNob3VsZCByZWxlYXNlIGEgUENJIGRldmljZS4gIFRoZSBjb3VsZCBiZSBjYXVzZWQgYnkgYQorICogSG90LVBsdWcgZXZlbnQsIG9yIGJlY2F1c2UgdGhlIGRyaXZlciBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20KKyAqIG1lbW9yeS4KKyAqKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpeGdiZXZmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlpZiAoYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQpIHsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwkJYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQgPSBmYWxzZTsKKwl9CisKKwlpeGdiZXZmX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCisJaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCisJaHdfZGJnKCZhZGFwdGVyLT5odywgIlJlbW92ZSBjb21wbGV0ZVxuIik7CisKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiZXZmX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSBpeGdiZXZmX2RyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9IGl4Z2JldmZfcGNpX3RibCwKKwkucHJvYmUgICAgPSBpeGdiZXZmX3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGl4Z2JldmZfcmVtb3ZlKSwKKwkuc2h1dGRvd24gPSBpeGdiZXZmX3NodXRkb3duLAorfTsKKworLyoqCisgKiBpeGdiZV9pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQorICoKKyAqIGl4Z2JlX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKKyAqIGxvYWRlZC4gQWxsIGl0IGRvZXMgaXMgcmVnaXN0ZXIgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KKyAqKi8KK3N0YXRpYyBpbnQgX19pbml0IGl4Z2JldmZfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCXByaW50ayhLRVJOX0lORk8gIml4Z2JldmY6ICVzIC0gdmVyc2lvbiAlc1xuIiwgaXhnYmV2Zl9kcml2ZXJfc3RyaW5nLAorCSAgICAgICBpeGdiZXZmX2RyaXZlcl92ZXJzaW9uKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBpeGdiZXZmX2NvcHlyaWdodCk7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpeGdiZXZmX2RyaXZlcik7CisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaXhnYmV2Zl9pbml0X21vZHVsZSk7CisKKy8qKgorICogaXhnYmVfZXhpdF9tb2R1bGUgLSBEcml2ZXIgRXhpdCBDbGVhbnVwIFJvdXRpbmUKKyAqCisgKiBpeGdiZV9leGl0X21vZHVsZSBpcyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZW1vdmVkCisgKiBmcm9tIG1lbW9yeS4KKyAqKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBpeGdiZXZmX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpeGdiZXZmX2RyaXZlcik7Cit9CisKKyNpZmRlZiBERUJVRworLyoqCisgKiBpeGdiZV9nZXRfaHdfZGV2X25hbWUgLSByZXR1cm4gZGV2aWNlIG5hbWUgc3RyaW5nCisgKiB1c2VkIGJ5IGhhcmR3YXJlIGxheWVyIHRvIHByaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICoqLworY2hhciAqaXhnYmV2Zl9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJcmV0dXJuIGFkYXB0ZXItPm5ldGRldi0+bmFtZTsKK30KKworI2VuZGlmCittb2R1bGVfZXhpdChpeGdiZXZmX2V4aXRfbW9kdWxlKTsKKworLyogaXhnYmV2Zl9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTQzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5jCkBAIC0wLDAgKzEsMzQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWJ4LmgiCisKKy8qKgorICogIGl4Z2JldmZfcG9sbF9mb3JfbXNnIC0gV2FpdCBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9wb2xsX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwl3aGlsZSAoY291bnRkb3duICYmIG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcpKSB7CisJCWNvdW50ZG93bi0tOworCQl1ZGVsYXkobWJ4LT51ZGVsYXkpOworCX0KKworCS8qIGlmIHdlIGZhaWxlZCwgYWxsIGZ1dHVyZSBwb3N0ZWQgbWVzc2FnZXMgZmFpbCB1bnRpbCByZXNldCAqLworCWlmICghY291bnRkb3duKQorCQltYngtPnRpbWVvdXQgPSAwOworCisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiBJWEdCRV9FUlJfTUJYOworfQorCisvKioKKyAqICBpeGdiZXZmX3BvbGxfZm9yX2FjayAtIFdhaXQgZm9yIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfcG9sbF9mb3JfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlpbnQgY291bnRkb3duID0gbWJ4LT50aW1lb3V0OworCisJd2hpbGUgKGNvdW50ZG93biAmJiBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3KSkgeworCQljb3VudGRvd24tLTsKKwkJdWRlbGF5KG1ieC0+dWRlbGF5KTsKKwl9CisKKwkvKiBpZiB3ZSBmYWlsZWQsIGFsbCBmdXR1cmUgcG9zdGVkIG1lc3NhZ2VzIGZhaWwgdW50aWwgcmVzZXQgKi8KKwlpZiAoIWNvdW50ZG93bikKKwkJbWJ4LT50aW1lb3V0ID0gMDsKKworCXJldHVybiBjb3VudGRvd24gPyAwIDogSVhHQkVfRVJSX01CWDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24gYW5kCisgKiAgY29waWVkIGl0IGludG8gdGhlIHJlY2VpdmUgYnVmZmVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3JlYWRfcG9zdGVkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisKKwlyZXRfdmFsID0gaXhnYmV2Zl9wb2xsX2Zvcl9tc2coaHcpOworCisJLyogaWYgYWNrIHJlY2VpdmVkIHJlYWQgbWVzc2FnZSwgb3RoZXJ3aXNlIHdlIHRpbWVkIG91dCAqLworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWQoaHcsIG1zZywgc2l6ZSk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyIGFuZAorICogIHJlY2VpdmVkIGFuIGFjayB0byB0aGF0IG1lc3NhZ2Ugd2l0aGluIGRlbGF5ICogdGltZW91dCBwZXJpb2QKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsOworCisJLyogc2VuZCBtc2cgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSk7CisKKwkvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gaXhnYmV2Zl9wb2xsX2Zvcl9hY2soaHcpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfcmVhZF92MnBfbWFpbGJveCAtIHJlYWQgdjJwIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCB0aGUgdjJwIG1haWxib3ggd2l0aG91dCBsb3NpbmcgdGhlIHJlYWQgdG8KKyAqICBjbGVhciBzdGF0dXMgYml0cy4KKyAqKi8KK3N0YXRpYyB1MzIgaXhnYmV2Zl9yZWFkX3YycF9tYWlsYm94KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHYycF9tYWlsYm94ID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTUFJTEJPWCk7CisKKwl2MnBfbWFpbGJveCB8PSBody0+bWJ4LnYycF9tYWlsYm94OworCWh3LT5tYngudjJwX21haWxib3ggfD0gdjJwX21haWxib3ggJiBJWEdCRV9WRk1BSUxCT1hfUjJDX0JJVFM7CisKKwlyZXR1cm4gdjJwX21haWxib3g7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZiAtIERldGVybWluZSBpZiBhIHN0YXR1cyBiaXQgd2FzIHNldAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1hc2s6IGJpdG1hc2sgZm9yIGJpdHMgdG8gYmUgdGVzdGVkIGFuZCBjbGVhcmVkCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb3IgdGhlIHJlYWQgdG8gY2xlYXIgYml0cyB3aXRoaW4KKyAqICB0aGUgVjJQIG1haWxib3guCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgbWFzaykKK3sKKwl1MzIgdjJwX21haWxib3ggPSBpeGdiZXZmX3JlYWRfdjJwX21haWxib3goaHcpOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmICh2MnBfbWFpbGJveCAmIG1hc2spCisJCXJldF92YWwgPSAwOworCisJaHctPm1ieC52MnBfbWFpbGJveCAmPSB+bWFzazsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX2NoZWNrX2Zvcl9tc2dfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgc2VudCBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJucyAwIGlmIHRoZSBQRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisKKwlpZiAoIWl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZihodywgSVhHQkVfVkZNQUlMQk9YX1BGU1RTKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5yZXFzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfZm9yX2Fja192ZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFBGIGhhcyBBQ0snZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIHJldHVybnMgMCBpZiB0aGUgUEYgaGFzIHNldCB0aGUgQUNLIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFpeGdiZXZmX2NoZWNrX2Zvcl9iaXRfdmYoaHcsIElYR0JFX1ZGTUFJTEJPWF9QRkFDSykpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWh3LT5tYnguc3RhdHMuYWNrcysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX2NoZWNrX2Zvcl9yc3RfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zIHRydWUgaWYgdGhlIFBGIGhhcyBzZXQgdGhlIHJlc2V0IGRvbmUgYml0IG9yIGVsc2UgZmFsc2UKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19mb3JfcnN0X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFpeGdiZXZmX2NoZWNrX2Zvcl9iaXRfdmYoaHcsIChJWEdCRV9WRk1BSUxCT1hfUlNURCB8CisJCQkJCSBJWEdCRV9WRk1BSUxCT1hfUlNUSSkpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJzdHMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9vYnRhaW5fbWJ4X2xvY2tfdmYgLSBvYnRhaW4gbWFpbGJveCBsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJuIDAgaWYgd2Ugb2J0YWluZWQgdGhlIG1haWxib3ggbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZXZmX29idGFpbl9tYnhfbG9ja192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGTUFJTEJPWCwgSVhHQkVfVkZNQUlMQk9YX1ZGVSk7CisKKwkvKiByZXNlcnZlIG1haWxib3ggZm9yIHZmIHVzZSAqLworCWlmIChpeGdiZXZmX3JlYWRfdjJwX21haWxib3goaHcpICYgSVhHQkVfVkZNQUlMQk9YX1ZGVSkKKwkJcmV0X3ZhbCA9IDA7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl93cml0ZV9tYnhfdmYgLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfd3JpdGVfbWJ4X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSkKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgaTsKKworCisJLyogbG9jayB0aGUgbWFpbGJveCB0byBwcmV2ZW50IHBmL3ZmIHJhY2UgY29uZGl0aW9uICovCisJcmV0X3ZhbCA9IGl4Z2JldmZfb2J0YWluX21ieF9sb2NrX3ZmKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXRfbm9fd3JpdGU7CisKKwkvKiBmbHVzaCBtc2cgYW5kIGFja3MgYXMgd2UgYXJlIG92ZXJ3cml0aW5nIHRoZSBtZXNzYWdlIGJ1ZmZlciAqLworCWl4Z2JldmZfY2hlY2tfZm9yX21zZ192Zihodyk7CisJaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmKGh3KTsKKworCS8qIGNvcHkgdGhlIGNhbGxlciBzcGVjaWZpZWQgbWVzc2FnZSB0byB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHX0FSUkFZKGh3LCBJWEdCRV9WRk1CTUVNLCBpLCBtc2dbaV0pOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3R4Kys7CisKKwkvKiBEcm9wIFZGVSBhbmQgaW50ZXJydXB0IHRoZSBQRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50ICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRk1BSUxCT1gsIElYR0JFX1ZGTUFJTEJPWF9SRVEpOworCitvdXRfbm9fd3JpdGU6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfcmVhZF9tYnhfdmYgLSBSZWFkcyBhIG1lc3NhZ2UgZnJvbSB0aGUgaW5ib3ggaW50ZW5kZWQgZm9yIHZmCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bHkgcmVhZCBtZXNzYWdlIGZyb20gYnVmZmVyCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfcmVhZF9tYnhfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCS8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqLworCXJldF92YWwgPSBpeGdiZXZmX29idGFpbl9tYnhfbG9ja192Zihodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0X25vX3JlYWQ7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggbWVtb3J5IGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCW1zZ1tpXSA9IElYR0JFX1JFQURfUkVHX0FSUkFZKGh3LCBJWEdCRV9WRk1CTUVNLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHJlY2VpcHQgYW5kIHJlbGVhc2UgbWFpbGJveCwgdGhlbiB3ZSdyZSBkb25lICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRk1BSUxCT1gsIElYR0JFX1ZGTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKK291dF9ub19yZWFkOgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZiAtIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgdmYgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEluaXRpYWxpemVzIHRoZSBody0+bWJ4IHN0cnVjdCB0byBjb3JyZWN0IHZhbHVlcyBmb3IgdmYgbWFpbGJveAorICovCitzMzIgaXhnYmV2Zl9pbml0X21ieF9wYXJhbXNfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJLyogc3RhcnQgbWFpbGJveCBhcyB0aW1lZCBvdXQgYW5kIGxldCB0aGUgcmVzZXRfaHcgY2FsbCBzZXQgdGhlIHRpbWVvdXQKKwkgKiB2YWx1ZSB0byBiZWdpbiBjb21tdW5pY2F0aW9ucyAqLworCW1ieC0+dGltZW91dCA9IDA7CisJbWJ4LT51ZGVsYXkgPSBJWEdCRV9WRl9NQlhfSU5JVF9ERUxBWTsKKworCW1ieC0+c2l6ZSA9IElYR0JFX1ZGTUFJTEJPWF9TSVpFOworCisJbWJ4LT5zdGF0cy5tc2dzX3R4ID0gMDsKKwltYngtPnN0YXRzLm1zZ3NfcnggPSAwOworCW1ieC0+c3RhdHMucmVxcyA9IDA7CisJbWJ4LT5zdGF0cy5hY2tzID0gMDsKKwltYngtPnN0YXRzLnJzdHMgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBpeGdiZXZmX21ieF9vcHMgPSB7CisJLmluaXRfcGFyYW1zICAgPSBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZiwKKwkucmVhZCAgICAgICAgICA9IGl4Z2JldmZfcmVhZF9tYnhfdmYsCisJLndyaXRlICAgICAgICAgPSBpeGdiZXZmX3dyaXRlX21ieF92ZiwKKwkucmVhZF9wb3N0ZWQgICA9IGl4Z2JldmZfcmVhZF9wb3N0ZWRfbWJ4LAorCS53cml0ZV9wb3N0ZWQgID0gaXhnYmV2Zl93cml0ZV9wb3N0ZWRfbWJ4LAorCS5jaGVja19mb3JfbXNnID0gaXhnYmV2Zl9jaGVja19mb3JfbXNnX3ZmLAorCS5jaGVja19mb3JfYWNrID0gaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmLAorCS5jaGVja19mb3JfcnN0ID0gaXhnYmV2Zl9jaGVja19mb3JfcnN0X3ZmLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZTBiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lYR0JFX01CWF9IXworI2RlZmluZSBfSVhHQkVfTUJYX0hfCisKKyNpbmNsdWRlICJ2Zi5oIgorCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9TSVpFICAgICAgICAxNiAvKiAxNiAzMiBiaXQgd29yZHMgLSA2NCBieXRlcyAqLworI2RlZmluZSBJWEdCRV9FUlJfTUJYICAgICAgICAgICAgICAgLTEwMAorCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWCAgICAgICAgICAgICAweDAwMkZDCisjZGVmaW5lIElYR0JFX1ZGTUJNRU0gICAgICAgICAgICAgICAweDAwMjAwCisKKy8qIERlZmluZSBtYWlsYm94IHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1JFUSAgICAgIDB4MDAwMDAwMDEgLyogUmVxdWVzdCBmb3IgUEYgUmVhZHkgYml0ICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9BQ0sgICAgICAweDAwMDAwMDAyIC8qIEFjayBQRiBtZXNzYWdlIHJlY2VpdmVkICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9WRlUgICAgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9QRlUgICAgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9QRlNUUyAgICAweDAwMDAwMDEwIC8qIFBGIHdyb3RlIGEgbWVzc2FnZSBpbiB0aGUgTUIgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1BGQUNLICAgIDB4MDAwMDAwMjAgLyogUEYgYWNrIHRoZSBwcmV2aW91cyBWRiBtc2cgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1JTVEkgICAgIDB4MDAwMDAwNDAgLyogUEYgaGFzIHJlc2V0IGluZGljYXRpb24gKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1JTVEQgICAgIDB4MDAwMDAwODAgLyogUEYgaGFzIGluZGljYXRlZCByZXNldCBkb25lICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9SMkNfQklUUyAweDAwMDAwMEIwIC8qIEFsbCByZWFkIHRvIGNsZWFyIGJpdHMgKi8KKworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1goeCkgICAgICAgICAgKDB4MDRCMDAgKyAoNCAqIHgpKQorI2RlZmluZSBJWEdCRV9QRk1CTUVNKHZmbikgICAgICAgICAgKDB4MTMwMDAgKyAoNjQgKiB2Zm4pKQorCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9TVFMgICAweDAwMDAwMDAxIC8qIEluaXRpYXRlIG1lc3NhZ2Ugc2VuZCB0byBWRiAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfQUNLICAgMHgwMDAwMDAwMiAvKiBBY2sgbWVzc2FnZSByZWN2J2QgZnJvbSBWRiAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfVkZVICAgMHgwMDAwMDAwNCAvKiBWRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfUEZVICAgMHgwMDAwMDAwOCAvKiBQRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfUlZGVSAgMHgwMDAwMDAxMCAvKiBSZXNldCBWRlUgLSB1c2VkIHdoZW4gVkYgc3R1Y2sgKi8KKworI2RlZmluZSBJWEdCRV9NQlZGSUNSX1ZGUkVRX01BU0sgMHgwMDAwRkZGRiAvKiBiaXRzIGZvciBWRiBtZXNzYWdlcyAqLworI2RlZmluZSBJWEdCRV9NQlZGSUNSX1ZGUkVRX1ZGMSAgMHgwMDAwMDAwMSAvKiBiaXQgZm9yIFZGIDEgbWVzc2FnZSAqLworI2RlZmluZSBJWEdCRV9NQlZGSUNSX1ZGQUNLX01BU0sgMHhGRkZGMDAwMCAvKiBiaXRzIGZvciBWRiBhY2tzICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZBQ0tfVkYxICAweDAwMDEwMDAwIC8qIGJpdCBmb3IgVkYgMSBhY2sgKi8KKworCisvKiBJZiBpdCdzIGEgSVhHQkVfVkZfKiBtc2cgdGhlbiBpdCBvcmlnaW5hdGVzIGluIHRoZSBWRiBhbmQgaXMgc2VudCB0byB0aGUKKyAqIFBGLiAgVGhlIHJldmVyc2UgaXMgdHJ1ZSBpZiBpdCBpcyBJWEdCRV9QRl8qLgorICogTWVzc2FnZSBBQ0sncyBhcmUgdGhlIHZhbHVlIG9yJ2Qgd2l0aCAweEYwMDAwMDAwCisgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHVFlQRV9BQ0sgICAgICAweDgwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKwkJCQkJICAgICAgICogdGhpcyBhcmUgdGhlIEFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX05BQ0sgICAgIDB4NDAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorCQkJCQkgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisJCQkJCSAgICAgICAqICBjbGVhciB0byBzZW5kIHJlcXVlc3RzICovCisjZGVmaW5lIElYR0JFX1ZUX01TR0lORk9fU0hJRlQgICAgMTYKKy8qIGJpdHMgMjM6MTYgYXJlIHVzZWQgZm9yIGV4cmEgaW5mbyBmb3IgY2VydGFpbiBtZXNzYWdlcyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dJTkZPX01BU0sgICAgICgweEZGIDw8IElYR0JFX1ZUX01TR0lORk9fU0hJRlQpCisKKyNkZWZpbmUgSVhHQkVfVkZfUkVTRVQgICAgICAgICAgICAweDAxIC8qIFZGIHJlcXVlc3RzIHJlc2V0ICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9NQUNfQUREUiAgICAgMHgwMiAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUFDIGFkZHIgKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX01VTFRJQ0FTVCAgICAweDAzIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQyBhZGRyICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9WTEFOICAgICAgICAgMHgwNCAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVkxBTiAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTFBFICAgICAgICAgIDB4MDUgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZNT0xSLkxQRSAqLworCisvKiBsZW5ndGggb2YgcGVybWFuZW50IGFkZHJlc3MgbWVzc2FnZSByZXR1cm5lZCBmcm9tIFBGICovCisjZGVmaW5lIElYR0JFX1ZGX1BFUk1BRERSX01TR19MRU4gNAorLyogd29yZCBpbiBwZXJtYW5lbnQgYWRkcmVzcyBtZXNzYWdlIHdpdGggdGhlIGN1cnJlbnQgbXVsdGljYXN0IHR5cGUgKi8KKyNkZWZpbmUgSVhHQkVfVkZfTUNfVFlQRV9XT1JEICAgICAzCisKKyNkZWZpbmUgSVhHQkVfUEZfQ09OVFJPTF9NU0cgICAgICAweDAxMDAgLyogUEYgY29udHJvbCBtZXNzYWdlICovCisKKyNkZWZpbmUgSVhHQkVfVkZfTUJYX0lOSVRfVElNRU9VVCAyMDAwIC8qIG51bWJlciBvZiByZXRyaWVzIG9uIG1haWxib3ggKi8KKyNkZWZpbmUgSVhHQkVfVkZfTUJYX0lOSVRfREVMQVkgICA1MDAgIC8qIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMgKi8KKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgSFcgc3RydWN0ICovCitzdHJ1Y3QgaXhnYmVfaHc7CisKK3MzMiBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZihzdHJ1Y3QgaXhnYmVfaHcgKik7CisKKyNlbmRpZiAvKiBfSVhHQkVfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjc1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRVZGX1JFR1NfSF8KKyNkZWZpbmUgX0lYR0JFVkZfUkVHU19IXworCisjZGVmaW5lIElYR0JFX1ZGQ1RSTCAgICAgICAgICAgMHgwMDAwMAorI2RlZmluZSBJWEdCRV9WRlNUQVRVUyAgICAgICAgIDB4MDAwMDgKKyNkZWZpbmUgSVhHQkVfVkZMSU5LUyAgICAgICAgICAweDAwMDEwCisjZGVmaW5lIElYR0JFX1ZGUlRJTUVSICAgICAgICAgMHgwMDA0OAorI2RlZmluZSBJWEdCRV9WRlJYTUVNV1JBUCAgICAgIDB4MDMxOTAKKyNkZWZpbmUgSVhHQkVfVlRFSUNSICAgICAgICAgICAweDAwMTAwCisjZGVmaW5lIElYR0JFX1ZURUlDUyAgICAgICAgICAgMHgwMDEwNAorI2RlZmluZSBJWEdCRV9WVEVJTVMgICAgICAgICAgIDB4MDAxMDgKKyNkZWZpbmUgSVhHQkVfVlRFSU1DICAgICAgICAgICAweDAwMTBDCisjZGVmaW5lIElYR0JFX1ZURUlBQyAgICAgICAgICAgMHgwMDExMAorI2RlZmluZSBJWEdCRV9WVEVJQU0gICAgICAgICAgIDB4MDAxMTQKKyNkZWZpbmUgSVhHQkVfVlRFSVRSKHgpICAgICAgICAoMHgwMDgyMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1ZUSVZBUih4KSAgICAgICAgKDB4MDAxMjAgKyAoNCAqIHgpKQorI2RlZmluZSBJWEdCRV9WVElWQVJfTUlTQyAgICAgIDB4MDAxNDAKKyNkZWZpbmUgSVhHQkVfVlRSU0NJTlQoeCkgICAgICAoMHgwMDE4MCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUkRCQUwoeCkgICAgICAgKDB4MDEwMDAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJEQkFIKHgpICAgICAgICgweDAxMDA0ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZSRExFTih4KSAgICAgICAoMHgwMTAwOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUkRIKHgpICAgICAgICAgKDB4MDEwMTAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJEVCh4KSAgICAgICAgICgweDAxMDE4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZSWERDVEwoeCkgICAgICAoMHgwMTAyOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGU1JSQ1RMKHgpICAgICAgKDB4MDEwMTQgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJTQ0NUTCh4KSAgICAgICgweDAxMDJDICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZQU1JUWVBFICAgICAgICAweDAwMzAwCisjZGVmaW5lIElYR0JFX1ZGVERCQUwoeCkgICAgICAgKDB4MDIwMDAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlREQkFIKHgpICAgICAgICgweDAyMDA0ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZURExFTih4KSAgICAgICAoMHgwMjAwOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERIKHgpICAgICAgICAgKDB4MDIwMTAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlREVCh4KSAgICAgICAgICgweDAyMDE4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZUWERDVEwoeCkgICAgICAoMHgwMjAyOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERXQkFMKHgpICAgICAgKDB4MDIwMzggKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlREV0JBSCh4KSAgICAgICgweDAyMDNDICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZEQ0FfUlhDVFJMKHgpICAoMHgwMTAwQyArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGRENBX1RYQ1RSTCh4KSAgKDB4MDIwMGMgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRkdQUkMgICAgICAgICAgIDB4MDEwMUMKKyNkZWZpbmUgSVhHQkVfVkZHUFRDICAgICAgICAgICAweDAyMDFDCisjZGVmaW5lIElYR0JFX1ZGR09SQ19MU0IgICAgICAgMHgwMTAyMAorI2RlZmluZSBJWEdCRV9WRkdPUkNfTVNCICAgICAgIDB4MDEwMjQKKyNkZWZpbmUgSVhHQkVfVkZHT1RDX0xTQiAgICAgICAweDAyMDIwCisjZGVmaW5lIElYR0JFX1ZGR09UQ19NU0IgICAgICAgMHgwMjAyNAorI2RlZmluZSBJWEdCRV9WRk1QUkMgICAgICAgICAgIDB4MDEwMzQKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCisKKyNkZWZpbmUgSVhHQkVfUkVBRF9SRUcoYSwgcmVnKSByZWFkbCgoYSktPmh3X2FkZHIgKyAocmVnKSkKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoIFwKKyAgICB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpICsgKChvZmZzZXQpIDw8IDIpKSkpCisKKyNkZWZpbmUgSVhHQkVfUkVBRF9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQpICggXAorICAgIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpICsgKChvZmZzZXQpIDw8IDIpKSkKKworI2RlZmluZSBJWEdCRV9XUklURV9GTFVTSChhKSAoSVhHQkVfUkVBRF9SRUcoYSwgSVhHQkVfVkZTVEFUVVMpKQorCisjZW5kaWYgLyogX0lYR0JFVkZfUkVHU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNWRlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ2Zi5oIgorCisvKioKKyAqICBpeGdiZXZmX3N0YXJ0X2h3X3ZmIC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgYnkgZmlsbGluZyB0aGUgYnVzIGluZm8gc3RydWN0dXJlIGFuZCBtZWRpYSB0eXBlLCBjbGVhcnMKKyAqICBhbGwgb24gY2hpcCBjb3VudGVycywgaW5pdGlhbGl6ZXMgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycywgbXVsdGljYXN0CisgKiAgdGFibGUsIFZMQU4gZmlsdGVyIHRhYmxlLCBjYWxscyByb3V0aW5lIHRvIHNldCB1cCBsaW5rIGFuZCBmbG93IGNvbnRyb2wKKyAqICBzZXR0aW5ncywgYW5kIGxlYXZlcyB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3N0YXJ0X2h3X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJLyogQ2xlYXIgYWRhcHRlciBzdG9wcGVkIGZsYWcgKi8KKwlody0+YWRhcHRlcl9zdG9wcGVkID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9pbml0X2h3X3ZmIC0gdmlydHVhbCBmdW5jdGlvbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgYnkgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSBhbmQgdGhlbiBzdGFydGluZworICogIHRoZSBoYXJkd2FyZQorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2luaXRfaHdfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzID0gaHctPm1hYy5vcHMuc3RhcnRfaHcoaHcpOworCisJaHctPm1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody0+bWFjLmFkZHIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9yZXNldF9od192ZiAtIFBlcmZvcm1zIGhhcmR3YXJlIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBSZXNldHMgdGhlIGhhcmR3YXJlIGJ5IHJlc2V0aW5nIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cywgbWFza3MgYW5kCisgKiAgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3Jlc2V0X2h3X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwl1MzIgdGltZW91dCA9IElYR0JFX1ZGX0lOSVRfVElNRU9VVDsKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX01BQ19BRERSOworCXUzMiBtc2didWZbSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTl07CisJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisKKwkvKiBDYWxsIGFkYXB0ZXIgc3RvcCB0byBkaXNhYmxlIHR4L3J4IGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJaHctPm1hYy5vcHMuc3RvcF9hZGFwdGVyKGh3KTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZDVFJMLCBJWEdCRV9DVFJMX1JTVCk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogd2UgY2Fubm90IHJlc2V0IHdoaWxlIHRoZSBSU1RJIC8gUlNURCBiaXRzIGFyZSBhc3NlcnRlZCAqLworCXdoaWxlICghbWJ4LT5vcHMuY2hlY2tfZm9yX3JzdChodykgJiYgdGltZW91dCkgeworCQl0aW1lb3V0LS07CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoIXRpbWVvdXQpCisJCXJldHVybiBJWEdCRV9FUlJfUkVTRVRfRkFJTEVEOworCisJLyogbWFpbGJveCB0aW1lb3V0IGNhbiBub3cgYmVjb21lIGFjdGl2ZSAqLworCW1ieC0+dGltZW91dCA9IElYR0JFX1ZGX01CWF9JTklUX1RJTUVPVVQ7CisKKwltc2didWZbMF0gPSBJWEdCRV9WRl9SRVNFVDsKKwltYngtPm9wcy53cml0ZV9wb3N0ZWQoaHcsIG1zZ2J1ZiwgMSk7CisKKwltc2xlZXAoMTApOworCisJLyogc2V0IG91ciAicGVybV9hZGRyIiBiYXNlZCBvbiBpbmZvIHByb3ZpZGVkIGJ5IFBGICovCisJLyogYWxzbyBzZXQgdXAgdGhlIG1jX2ZpbHRlcl90eXBlIHdoaWNoIGlzIHBpZ2d5IGJhY2tlZAorCSAqIG9uIHRoZSBtYWMgYWRkcmVzcyBpbiB3b3JkIDMgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZF9wb3N0ZWQoaHcsIG1zZ2J1ZiwgSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTik7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCisJaWYgKG1zZ2J1ZlswXSAhPSAoSVhHQkVfVkZfUkVTRVQgfCBJWEdCRV9WVF9NU0dUWVBFX0FDSykpCisJCXJldHVybiBJWEdCRV9FUlJfSU5WQUxJRF9NQUNfQUREUjsKKworCW1lbWNweShody0+bWFjLnBlcm1fYWRkciwgYWRkciwgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwlody0+bWFjLm1jX2ZpbHRlcl90eXBlID0gbXNnYnVmW0lYR0JFX1ZGX01DX1RZUEVfV09SRF07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zdG9wX2h3X3ZmIC0gR2VuZXJpYyBzdG9wIFR4L1J4IHVuaXRzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIHRoZSBhZGFwdGVyX3N0b3BwZWQgZmxhZyB3aXRoaW4gaXhnYmVfaHcgc3RydWN0LiBDbGVhcnMgaW50ZXJydXB0cywKKyAqICBkaXNhYmxlcyB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cy4gVGhlIGFkYXB0ZXJfc3RvcHBlZCBmbGFnIGlzIHVzZWQgYnkKKyAqICB0aGUgc2hhcmVkIGNvZGUgYW5kIGRyaXZlcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBhZGFwdGVyIGlzIGluIGEgc3RvcHBlZAorICogIHN0YXRlIGFuZCBzaG91bGQgbm90IHRvdWNoIHRoZSBoYXJkd2FyZS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9zdG9wX2h3X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIG51bWJlcl9vZl9xdWV1ZXM7CisJdTMyIHJlZ192YWw7CisJdTE2IGk7CisKKwkvKgorCSAqIFNldCB0aGUgYWRhcHRlcl9zdG9wcGVkIGZsYWcgc28gb3RoZXIgZHJpdmVyIGZ1bmN0aW9ucyBzdG9wIHRvdWNoaW5nCisJICogdGhlIGhhcmR3YXJlCisJICovCisJaHctPmFkYXB0ZXJfc3RvcHBlZCA9IHRydWU7CisKKwkvKiBEaXNhYmxlIHRoZSByZWNlaXZlIHVuaXQgYnkgc3RvcHBlZCBlYWNoIHF1ZXVlICovCisJbnVtYmVyX29mX3F1ZXVlcyA9IGh3LT5tYWMubWF4X3J4X3F1ZXVlczsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX3F1ZXVlczsgaSsrKSB7CisJCXJlZ192YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaSkpOworCQlpZiAocmVnX3ZhbCAmIElYR0JFX1JYRENUTF9FTkFCTEUpIHsKKwkJCXJlZ192YWwgJj0gfklYR0JFX1JYRENUTF9FTkFCTEU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGkpLCByZWdfdmFsKTsKKwkJfQorCX0KKworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCS8qIENsZWFyIGludGVycnVwdCBtYXNrIHRvIHN0b3AgZnJvbSBpbnRlcnJ1cHRzIGJlaW5nIGdlbmVyYXRlZCAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1DLCBJWEdCRV9WRl9JUlFfQ0xFQVJfTUFTSyk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUik7CisKKwkvKiBEaXNhYmxlIHRoZSB0cmFuc21pdCB1bml0LiAgRWFjaCBxdWV1ZSBtdXN0IGJlIGRpc2FibGVkLiAqLworCW51bWJlcl9vZl9xdWV1ZXMgPSBody0+bWFjLm1heF90eF9xdWV1ZXM7CisJZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9xdWV1ZXM7IGkrKykgeworCQlyZWdfdmFsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGkpKTsKKwkJaWYgKHJlZ192YWwgJiBJWEdCRV9UWERDVExfRU5BQkxFKSB7CisJCQlyZWdfdmFsICY9IH5JWEdCRV9UWERDVExfRU5BQkxFOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChpKSwgcmVnX3ZhbCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9tdGFfdmVjdG9yIC0gRGV0ZXJtaW5lcyBiaXQtdmVjdG9yIGluIG11bHRpY2FzdCB0YWJsZSB0byBzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG1jX2FkZHI6IHRoZSBtdWx0aWNhc3QgYWRkcmVzcworICoKKyAqICBFeHRyYWN0cyB0aGUgMTIgYml0cywgZnJvbSBhIG11bHRpY2FzdCBhZGRyZXNzLCB0byBkZXRlcm1pbmUgd2hpY2gKKyAqICBiaXQtdmVjdG9yIHRvIHNldCBpbiB0aGUgbXVsdGljYXN0IHRhYmxlLiBUaGUgaGFyZHdhcmUgdXNlcyAxMiBiaXRzLCBmcm9tCisgKiAgaW5jb21pbmcgcnggbXVsdGljYXN0IGFkZHJlc3NlcywgdG8gZGV0ZXJtaW5lIHRoZSBiaXQtdmVjdG9yIHRvIGNoZWNrIGluCisgKiAgdGhlIE1UQS4gV2hpY2ggb2YgdGhlIDQgY29tYmluYXRpb24sIG9mIDEyLWJpdHMsIHRoZSBoYXJkd2FyZSB1c2VzIGlzIHNldAorICogIGJ5IHRoZSBNTyBmaWVsZCBvZiB0aGUgTUNTVENUUkwuIFRoZSBNTyBmaWVsZCBpcyBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uCisgKiAgdG8gbWNfZmlsdGVyX3R5cGUuCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfbXRhX3ZlY3RvcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWNfYWRkcikKK3sKKwl1MzIgdmVjdG9yID0gMDsKKworCXN3aXRjaCAoaHctPm1hYy5tY19maWx0ZXJfdHlwZSkgeworCWNhc2UgMDogICAvKiB1c2UgYml0cyBbNDc6MzZdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSA+PiA0KSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA0KSk7CisJCWJyZWFrOworCWNhc2UgMTogICAvKiB1c2UgYml0cyBbNDY6MzVdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSA+PiAzKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA1KSk7CisJCWJyZWFrOworCWNhc2UgMjogICAvKiB1c2UgYml0cyBbNDU6MzRdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSA+PiAyKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA2KSk7CisJCWJyZWFrOworCWNhc2UgMzogICAvKiB1c2UgYml0cyBbNDM6MzJdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSkgfCAoKCh1MTYpbWNfYWRkcls1XSkgPDwgOCkpOworCQlicmVhazsKKwlkZWZhdWx0OiAgLyogSW52YWxpZCBtY19maWx0ZXJfdHlwZSAqLworCQlicmVhazsKKwl9CisKKwkvKiB2ZWN0b3IgY2FuIG9ubHkgYmUgMTItYml0cyBvciBib3VuZGFyeSB3aWxsIGJlIGV4Y2VlZGVkICovCisJdmVjdG9yICY9IDB4RkZGOworCXJldHVybiB2ZWN0b3I7Cit9CisKKy8qKgorICogIGl4Z2JldmZfZ2V0X21hY19hZGRyX3ZmIC0gUmVhZCBkZXZpY2UgTUFDIGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYWNfYWRkcjogcG9pbnRlciB0byBzdG9yYWdlIGZvciByZXRyaWV2ZWQgTUFDIGFkZHJlc3MKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9nZXRfbWFjX2FkZHJfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1hY19hZGRyKQoreworCW1lbWNweShtYWNfYWRkciwgaHctPm1hYy5wZXJtX2FkZHIsIElYR0JFX0VUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zZXRfcmFyX3ZmIC0gc2V0IGRldmljZSBNQUMgYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaW5kZXg6IFJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciB0byB3cml0ZQorICogIEBhZGRyOiBBZGRyZXNzIHRvIHB1dCBpbnRvIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcgorICogIEB2bWRxOiBVbnVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3NldF9yYXJfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4LCB1OCAqYWRkciwKKwkJCSAgICAgIHUzMiB2bWRxKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJdTMyIG1zZ2J1ZlszXTsKKwl1OCAqbXNnX2FkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJczMyIHJldF92YWw7CisKKwltZW1zZXQobXNnYnVmLCAwLCBzaXplb2YobXNnYnVmKSk7CisJbXNnYnVmWzBdID0gSVhHQkVfVkZfU0VUX01BQ19BRERSOworCW1lbWNweShtc2dfYWRkciwgYWRkciwgNik7CisJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCAzKTsKKworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWRfcG9zdGVkKGh3LCBtc2didWYsIDMpOworCisJbXNnYnVmWzBdICY9IH5JWEdCRV9WVF9NU0dUWVBFX0NUUzsKKworCS8qIGlmIG5hY2tlZCB0aGUgYWRkcmVzcyB3YXMgcmVqZWN0ZWQsIHVzZSAicGVybV9hZGRyIiAqLworCWlmICghcmV0X3ZhbCAmJgorCSAgICAobXNnYnVmWzBdID09IChJWEdCRV9WRl9TRVRfTUFDX0FERFIgfCBJWEdCRV9WVF9NU0dUWVBFX05BQ0spKSkKKwkJaXhnYmV2Zl9nZXRfbWFjX2FkZHJfdmYoaHcsIGh3LT5tYWMuYWRkcik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl91cGRhdGVfbWNfYWRkcl9saXN0X3ZmIC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQorICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCisgKiAgQG5leHQ6IGNhbGxlciBzdXBwbGllZCBmdW5jdGlvbiB0byByZXR1cm4gbmV4dCBhZGRyZXNzIGluIGxpc3QKKyAqCisgKiAgVXBkYXRlcyB0aGUgTXVsdGljYXN0IFRhYmxlIEFycmF5LgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1jX2FkZHJfbGlzdCwKKwkJCQkJdTMyIG1jX2FkZHJfY291bnQsCisJCQkJCWl4Z2JlX21jX2FkZHJfaXRyIG5leHQpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwl1MzIgbXNnYnVmW0lYR0JFX1ZGTUFJTEJPWF9TSVpFXTsKKwl1MTYgKnZlY3Rvcl9saXN0ID0gKHUxNiAqKSZtc2didWZbMV07CisJdTMyIHZlY3RvcjsKKwl1MzIgY250LCBpOworCXUzMiB2bWRxOworCisJLyogRWFjaCBlbnRyeSBpbiB0aGUgbGlzdCB1c2VzIDEgMTYgYml0IHdvcmQuICBXZSBoYXZlIDMwCisJICogMTYgYml0IHdvcmRzIGF2YWlsYWJsZSBpbiBvdXIgSFcgbXNnIGJ1ZmZlciAobWludXMgMSBmb3IgdGhlCisJICogbXNnIHR5cGUpLiAgVGhhdCdzIDMwIGhhc2ggdmFsdWVzIGlmIHdlIHBhY2sgJ2VtIHJpZ2h0LiAgSWYKKwkgKiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMwIE1DIGFkZHJlc3NlcyB0byBhZGQgdGhlbiBwdW50IHRoZQorCSAqIGV4dHJhcyBmb3Igbm93IGFuZCB0aGVuIGFkZCBjb2RlIHRvIGhhbmRsZSBtb3JlIHRoYW4gMzAgbGF0ZXIuCisJICogSXQgd291bGQgYmUgdW51c3VhbCBmb3IgYSBzZXJ2ZXIgdG8gcmVxdWVzdCB0aGF0IG1hbnkgbXVsdGktY2FzdAorCSAqIGFkZHJlc3NlcyBleGNlcHQgZm9yIGluIGxhcmdlIGVudGVycHJpc2UgbmV0d29yayBlbnZpcm9ubWVudHMuCisJICovCisKKwljbnQgPSAobWNfYWRkcl9jb3VudCA+IDMwKSA/IDMwIDogbWNfYWRkcl9jb3VudDsKKwltc2didWZbMF0gPSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUOworCW1zZ2J1ZlswXSB8PSBjbnQgPDwgSVhHQkVfVlRfTVNHSU5GT19TSElGVDsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQl2ZWN0b3IgPSBpeGdiZXZmX210YV92ZWN0b3IoaHcsIG5leHQoaHcsICZtY19hZGRyX2xpc3QsICZ2bWRxKSk7CisJCXZlY3Rvcl9saXN0W2ldID0gdmVjdG9yOworCX0KKworCW1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCBJWEdCRV9WRk1BSUxCT1hfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zZXRfdmZ0YV92ZiAtIFNldC9VbnNldCB2bGFuIGZpbHRlciB0YWJsZSBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmxhbjogMTIgYml0IFZMQU4gSUQKKyAqICBAdmluZDogdW51c2VkIGJ5IFZGIGRyaXZlcnMKKyAqICBAdmxhbl9vbjogaWYgdHJ1ZSB0aGVuIHNldCBiaXQsIGVsc2UgY2xlYXIgYml0CisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfc2V0X3ZmdGFfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZsYW4sIHUzMiB2aW5kLAorCQkJICAgICAgIGJvb2wgdmxhbl9vbikKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXUzMiBtc2didWZbMl07CisKKwltc2didWZbMF0gPSBJWEdCRV9WRl9TRVRfVkxBTjsKKwltc2didWZbMV0gPSB2bGFuOworCS8qIFNldHRpbmcgdGhlIDggYml0IGZpZWxkIE1TRyBJTkZPIHRvIFRSVUUgaW5kaWNhdGVzICJhZGQiICovCisJbXNnYnVmWzBdIHw9IHZsYW5fb24gPDwgSVhHQkVfVlRfTVNHSU5GT19TSElGVDsKKworCXJldHVybiBtYngtPm9wcy53cml0ZV9wb3N0ZWQoaHcsIG1zZ2J1ZiwgMik7Cit9CisKKy8qKgorICogIGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYgLSBTZXR1cCBNQUMgbGluayBzZXR0aW5ncworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisgKiAgQGF1dG9uZWc6IFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogVW51c2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgRG8gbm90aGluZyBhbmQgcmV0dXJuIHN1Y2Nlc3MuICBWRiBkcml2ZXJzIGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UKKyAqICBnbG9iYWwgc2V0dGluZ3MuICBNYWludGFpbmVkIGZvciBkcml2ZXIgY29tcGF0aWJpbGl0eS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9zZXR1cF9tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCSAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAorCQkJCSAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYgLSBHZXQgbGluay9zcGVlZCBzdGF0dXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAbGlua191cDogdHJ1ZSBpcyBsaW5rIGlzIHVwLCBmYWxzZSBvdGhlcndpc2UKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgUmVhZHMgdGhlIGxpbmtzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiBsaW5rIGlzIHVwIGFuZCB0aGUgY3VycmVudCBzcGVlZAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKwkJCQkgICAgIGJvb2wgKmxpbmtfdXAsCisJCQkJICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwl1MzIgbGlua3NfcmVnOworCisJaWYgKCEoaHctPm1ieC5vcHMuY2hlY2tfZm9yX3JzdChodykpKSB7CisJCSpsaW5rX3VwID0gZmFsc2U7CisJCSpzcGVlZCA9IDA7CisJCXJldHVybiAtMTsKKwl9CisKKwlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CisKKwlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApCisJCSpsaW5rX3VwID0gdHJ1ZTsKKwllbHNlCisJCSpsaW5rX3VwID0gZmFsc2U7CisKKwlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfU1BFRUQpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCWVsc2UKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9tYWNfb3BzID0geworCS5pbml0X2h3ICAgICAgICAgICAgID0gaXhnYmV2Zl9pbml0X2h3X3ZmLAorCS5yZXNldF9odyAgICAgICAgICAgID0gaXhnYmV2Zl9yZXNldF9od192ZiwKKwkuc3RhcnRfaHcgICAgICAgICAgICA9IGl4Z2JldmZfc3RhcnRfaHdfdmYsCisJLmdldF9tYWNfYWRkciAgICAgICAgPSBpeGdiZXZmX2dldF9tYWNfYWRkcl92ZiwKKwkuc3RvcF9hZGFwdGVyICAgICAgICA9IGl4Z2JldmZfc3RvcF9od192ZiwKKwkuc2V0dXBfbGluayAgICAgICAgICA9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsCisJLmNoZWNrX2xpbmsgICAgICAgICAgPSBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmLAorCS5zZXRfcmFyICAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfcmFyX3ZmLAorCS51cGRhdGVfbWNfYWRkcl9saXN0ID0gaXhnYmV2Zl91cGRhdGVfbWNfYWRkcl9saXN0X3ZmLAorCS5zZXRfdmZ0YSAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfdmZ0YV92ZiwKK307CisKK3N0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl92Zl9pbmZvID0geworCS5tYWMgPSBpeGdiZV9tYWNfODI1OTlfdmYsCisJLm1hY19vcHMgPSAmaXhnYmV2Zl9tYWNfb3BzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OTYwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19JWEdCRV9WRl9IX18KKyNkZWZpbmUgX19JWEdCRV9WRl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgImRlZmluZXMuaCIKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAibWJ4LmgiCisKK3N0cnVjdCBpeGdiZV9odzsKKworLyogaXRlcmF0b3IgdHlwZSBmb3Igd2Fsa2luZyBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyAqLwordHlwZWRlZiB1OCogKCppeGdiZV9tY19hZGRyX2l0cikgKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICoqbWNfYWRkcl9wdHIsCisJCQkJICB1MzIgKnZtZHEpOworc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X2h3KShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqcmVzZXRfaHcpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpzdGFydF9odykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNsZWFyX2h3X2NudHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJZW51bSBpeGdiZV9tZWRpYV90eXBlICgqZ2V0X21lZGlhX3R5cGUpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl1MzIgKCpnZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZ2V0X21hY19hZGRyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKik7CisJczMyICgqc3RvcF9hZGFwdGVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZ2V0X2J1c19pbmZvKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisKKwkvKiBMaW5rICovCisJczMyICgqc2V0dXBfbGluaykoc3RydWN0IGl4Z2JlX2h3ICosIGl4Z2JlX2xpbmtfc3BlZWQsIGJvb2wsIGJvb2wpOworCXMzMiAoKmNoZWNrX2xpbmspKHN0cnVjdCBpeGdiZV9odyAqLCBpeGdiZV9saW5rX3NwZWVkICosIGJvb2wgKiwgYm9vbCk7CisJczMyICgqZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKShzdHJ1Y3QgaXhnYmVfaHcgKiwgaXhnYmVfbGlua19zcGVlZCAqLAorCQkJCSAgICAgYm9vbCAqKTsKKworCS8qIFJBUiwgTXVsdGljYXN0LCBWTEFOICovCisJczMyICgqc2V0X3Jhcikoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiwgdTggKiwgdTMyKTsKKwlzMzIgKCppbml0X3J4X2FkZHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqdXBkYXRlX21jX2FkZHJfbGlzdCkoc3RydWN0IGl4Z2JlX2h3ICosIHU4ICosIHUzMiwKKwkJCQkgICBpeGdiZV9tY19hZGRyX2l0cik7CisJczMyICgqZW5hYmxlX21jKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZGlzYWJsZV9tYykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNsZWFyX3ZmdGEpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpzZXRfdmZ0YSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiwgdTMyLCBib29sKTsKK307CisKK2VudW0gaXhnYmVfbWFjX3R5cGUgeworCWl4Z2JlX21hY191bmtub3duID0gMCwKKwlpeGdiZV9tYWNfODI1OTlfdmYsCisJaXhnYmVfbnVtX21hY3MKK307CisKK3N0cnVjdCBpeGdiZV9tYWNfaW5mbyB7CisJc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIG9wczsKKwl1OCBhZGRyWzZdOworCXU4IHBlcm1fYWRkcls2XTsKKworCWVudW0gaXhnYmVfbWFjX3R5cGUgdHlwZTsKKworCXMzMiAgbWNfZmlsdGVyX3R5cGU7CisKKwlib29sIGdldF9saW5rX3N0YXR1czsKKwl1MzIgIG1heF90eF9xdWV1ZXM7CisJdTMyICBtYXhfcnhfcXVldWVzOworCXUzMiAgbWF4X21zaXhfdmVjdG9yczsKK307CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyB7CisJczMyICgqaW5pdF9wYXJhbXMpKHN0cnVjdCBpeGdiZV9odyAqaHcpOworCXMzMiAoKnJlYWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2KTsKKwlzMzIgKCp3cml0ZSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYpOworCXMzMiAoKnJlYWRfcG9zdGVkKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNik7CisJczMyICgqd3JpdGVfcG9zdGVkKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX21zZykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNoZWNrX2Zvcl9hY2spKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpjaGVja19mb3JfcnN0KShzdHJ1Y3QgaXhnYmVfaHcgKik7Cit9OworCitzdHJ1Y3QgaXhnYmVfbWJ4X3N0YXRzIHsKKwl1MzIgbXNnc190eDsKKwl1MzIgbXNnc19yeDsKKworCXUzMiBhY2tzOworCXUzMiByZXFzOworCXUzMiByc3RzOworfTsKKworc3RydWN0IGl4Z2JlX21ieF9pbmZvIHsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMgb3BzOworCXN0cnVjdCBpeGdiZV9tYnhfc3RhdHMgc3RhdHM7CisJdTMyIHRpbWVvdXQ7CisJdTMyIHVkZWxheTsKKwl1MzIgdjJwX21haWxib3g7CisJdTE2IHNpemU7Cit9OworCitzdHJ1Y3QgaXhnYmVfaHcgeworCXZvaWQgKmJhY2s7CisKKwl1OCBfX2lvbWVtICpod19hZGRyOworCXU4ICpmbGFzaF9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKKworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyBtYWM7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvIG1ieDsKKworCXUxNiBkZXZpY2VfaWQ7CisJdTE2IHN1YnN5c3RlbV92ZW5kb3JfaWQ7CisJdTE2IHN1YnN5c3RlbV9kZXZpY2VfaWQ7CisJdTE2IHZlbmRvcl9pZDsKKworCXU4ICByZXZpc2lvbl9pZDsKKwlib29sIGFkYXB0ZXJfc3RvcHBlZDsKK307CisKK3N0cnVjdCBpeGdiZXZmX2h3X3N0YXRzIHsKKwl1NjQgYmFzZV92ZmdwcmM7CisJdTY0IGJhc2VfdmZncHRjOworCXU2NCBiYXNlX3ZmZ29yYzsKKwl1NjQgYmFzZV92ZmdvdGM7CisJdTY0IGJhc2VfdmZtcHJjOworCisJdTY0IGxhc3RfdmZncHJjOworCXU2NCBsYXN0X3ZmZ3B0YzsKKwl1NjQgbGFzdF92ZmdvcmM7CisJdTY0IGxhc3RfdmZnb3RjOworCXU2NCBsYXN0X3ZmbXByYzsKKworCXU2NCB2ZmdwcmM7CisJdTY0IHZmZ3B0YzsKKwl1NjQgdmZnb3JjOworCXU2NCB2ZmdvdGM7CisJdTY0IHZmbXByYzsKK307CisKK3N0cnVjdCBpeGdiZXZmX2luZm8geworCWVudW0gaXhnYmVfbWFjX3R5cGUJCW1hYzsKKwlzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMJKm1hY19vcHM7Cit9OworCisjZW5kaWYgLyogX19JWEdCRV9WRl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCA3OTJiODhmLi4yNmVlZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtMjk5NCw3ICsyOTk0LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgam1lX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShqbWVfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShKTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwKSB9LAogCXsgUENJX1ZERVZJQ0UoSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI2MCkgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMgYi9kcml2ZXJzL25ldC9saWI4MjU5Ni5jCmluZGV4IGIxMTdmN2YuLmI2MGVmZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvbGliODI1OTYuYwpAQCAtMTA5NCwxMSArMTA5NCw5IEBACiAJCXJldHVybiBpOwogCX07CiAKLQlERUIoREVCX1BST0JFLCBwcmludGsoS0VSTl9JTkZPICIlczogODI1OTYgYXQgJSMzbHgsIiwKLQkJCSAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIpKTsKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlERUIoREVCX1BST0JFLCBwcmludGsoIiAlMi4yWCIsIGRldi0+ZGV2X2FkZHJbaV0pKTsKLQlERUIoREVCX1BST0JFLCBwcmludGsoIiBJUlEgJWQuXG4iLCBkZXYtPmlycSkpOworCURFQihERUJfUFJPQkUsIHByaW50ayhLRVJOX0lORk8gIiVzOiA4MjU5NiBhdCAlIzNseCwgJXBNIElSUSAlZC5cbiIsCisJCQkgICAgICBkZXYtPm5hbWUsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLAorCQkJICAgICAgZGV2LT5pcnEpKTsKIAlERUIoREVCX0lOSVQsIHByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgIiVzOiBkbWEgYXQgMHglcCAoJWQgYnl0ZXMpLCBscC0+c2NiIGF0IDB4JXBcbiIsCiAJCQkgICAgIGRldi0+bmFtZSwgZG1hLCAoaW50KXNpemVvZihzdHJ1Y3QgaTU5Nl9kbWEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKaW5kZXggZWFlNGFkNy4uYjlmY2M5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYworKysgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCkBAIC04MSw3ICs4MSw3IEBACiAKIAkvKiBpdCdzIE9LIHRvIHVzZSBwZXJfY3B1X3B0cigpIGJlY2F1c2UgQkhzIGFyZSBvZmYgKi8KIAlwY3B1X2xzdGF0cyA9IGRldi0+bWxfcHJpdjsKLQlsYl9zdGF0cyA9IHBlcl9jcHVfcHRyKHBjcHVfbHN0YXRzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWxiX3N0YXRzID0gdGhpc19jcHVfcHRyKHBjcHVfbHN0YXRzKTsKIAogCWxlbiA9IHNrYi0+bGVuOwogCWlmIChsaWtlbHkobmV0aWZfcngoc2tiKSA9PSBORVRfUlhfU1VDQ0VTUykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hYzgzOTAuYyBiL2RyaXZlcnMvbmV0L21hYzgzOTAuYwppbmRleCBmOGZhMGMzLi5hODc2ODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWM4MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjODM5MC5jCkBAIC0xNyw2ICsxNyw4IEBACiAvKiAyMDAyLTEyLTMwOiBUcnkgdG8gc3VwcG9ydCBtb3JlIGNhcmRzLCBzb21lIGNsdWVzIGZyb20gTmV0QlNEIGRyaXZlciAqLwogLyogMjAwMy0xMi0yNjogTWFrZSBzdXJlIEFzYW50ZSBjYXJkcyBhbHdheXMgd29yay4gKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTM0LDMxICszNiwzNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2h3dGVzdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci0JIm1hYzgzOTAuYzogdjAuNCAyMDAxLTA1LTE1IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4gYW5kIG90aGVyc1xuIjsKKwkidjAuNCAyMDAxLTA1LTE1IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4gYW5kIG90aGVyc1xuIjsKIAogI2RlZmluZSBFSV9TSElGVCh4KQkoZWlfbG9jYWwtPnJlZ19vZmZzZXRbeF0pCi0jZGVmaW5lIGVpX2luYihwb3J0KSAgIGluXzgocG9ydCkKLSNkZWZpbmUgZWlfb3V0Yih2YWwscG9ydCkgIG91dF84KHBvcnQsdmFsKQotI2RlZmluZSBlaV9pbmJfcChwb3J0KSAgIGluXzgocG9ydCkKLSNkZWZpbmUgZWlfb3V0Yl9wKHZhbCxwb3J0KSAgb3V0XzgocG9ydCx2YWwpCisjZGVmaW5lIGVpX2luYihwb3J0KQlpbl84KHBvcnQpCisjZGVmaW5lIGVpX291dGIodmFsLCBwb3J0KQlvdXRfOChwb3J0LCB2YWwpCisjZGVmaW5lIGVpX2luYl9wKHBvcnQpCWluXzgocG9ydCkKKyNkZWZpbmUgZWlfb3V0Yl9wKHZhbCwgcG9ydCkJb3V0XzgocG9ydCwgdmFsKQogCiAjaW5jbHVkZSAibGliODM5MC5jIgogCiAjZGVmaW5lIFdEX1NUQVJUX1BHCQkJMHgwMAkvKiBGaXJzdCBwYWdlIG9mIFRYIGJ1ZmZlciAqLwogI2RlZmluZSBDQUJMRVRST05fUlhfU1RBUlRfUEcJCTB4MDAgICAgLyogRmlyc3QgcGFnZSBvZiBSWCBidWZmZXIgKi8KICNkZWZpbmUgQ0FCTEVUUk9OX1JYX1NUT1BfUEcJCTB4MzAgICAgLyogTGFzdCBwYWdlICsxIG9mIFJYIHJpbmcgKi8KLSNkZWZpbmUgQ0FCTEVUUk9OX1RYX1NUQVJUX1BHCQlDQUJMRVRST05fUlhfU1RPUF9QRyAgLyogRmlyc3QgcGFnZSBvZiBUWCBidWZmZXIgKi8KKyNkZWZpbmUgQ0FCTEVUUk9OX1RYX1NUQVJUX1BHCQlDQUJMRVRST05fUlhfU1RPUF9QRworCQkJCQkJLyogRmlyc3QgcGFnZSBvZiBUWCBidWZmZXIgKi8KIAotLyogVW5mb3J0dW5hdGVseSBpdCBzZWVtcyB3ZSBoYXZlIHRvIGhhcmRjb2RlIHRoZXNlIGZvciB0aGUgbW9tZW50ICovCi0vKiBTaG91bGRuJ3QgdGhlIGNhcmQga25vdyBhYm91dCB0aGlzPyBEb2VzIGFueW9uZSBrbm93IHdoZXJlIHRvIHJlYWQgaXQgb2ZmIHRoZSBjYXJkPyBEbyB3ZSB0cnVzdCB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgY2FyZD8gKi8KKy8qCisgKiBVbmZvcnR1bmF0ZWx5IGl0IHNlZW1zIHdlIGhhdmUgdG8gaGFyZGNvZGUgdGhlc2UgZm9yIHRoZSBtb21lbnQKKyAqIFNob3VsZG4ndCB0aGUgY2FyZCBrbm93IGFib3V0IHRoaXM/CisgKiBEb2VzIGFueW9uZSBrbm93IHdoZXJlIHRvIHJlYWQgaXQgb2ZmIHRoZSBjYXJkPworICogRG8gd2UgdHJ1c3QgdGhlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNhcmQ/CisgKi8KIAogI2RlZmluZSBEQVlOQV84MzkwX0JBU0UJCTB4ODAwMDAKICNkZWZpbmUgREFZTkFfODM5MF9NRU0JCTB4MDAwMDAKQEAgLTgwLDcgKzg3LDcgQEAKIAlNQUM4MzkwX0tJTkVUSUNTLAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjYXJkbmFtZVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNhcmRuYW1lW10gPSB7CiAJImFwcGxlIiwKIAkiYXNhbnRlIiwKIAkiZmFyYWxsb24iLApAQCAtOTAsNyArOTcsNyBAQAogCSJraW5ldGljcyIsCiB9OwogCi1zdGF0aWMgaW50IHdvcmQxNltdID0geworc3RhdGljIGNvbnN0IGludCB3b3JkMTZbXSA9IHsKIAkxLCAvKiBhcHBsZSAqLwogCTEsIC8qIGFzYW50ZSAqLwogCTEsIC8qIGZhcmFsbG9uICovCkBAIC0xMDEsNyArMTA4LDcgQEAKIH07CiAKIC8qIG9uIHdoaWNoIGNhcmRzIGRvIHdlIHVzZSBOdUJ1cyByZXNvdXJjZXM/ICovCi1zdGF0aWMgaW50IHVzZXJlc291cmNlc1tdID0geworc3RhdGljIGNvbnN0IGludCB1c2VyZXNvdXJjZXNbXSA9IHsKIAkxLCAvKiBhcHBsZSAqLwogCTEsIC8qIGFzYW50ZSAqLwogCTEsIC8qIGZhcmFsbG9uICovCkBAIC0xMTcsMjIgKzEyNCwyMiBAQAogCUFDQ0VTU18xNiwKIH07CiAKLWV4dGVybiBpbnQgbWFjODM5MF9tZW10ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgbWFjODM5MF9pbml0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBzdHJ1Y3QgbnVidXNfZGV2ICogbmRldiwKK2V4dGVybiBpbnQgbWFjODM5MF9tZW10ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBtYWM4MzkwX2luaXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG51YnVzX2RldiAqbmRldiwKIAkJCSAgIGVudW0gbWFjODM5MF90eXBlIHR5cGUpOwogCi1zdGF0aWMgaW50IG1hYzgzOTBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IG1hYzgzOTBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBtYWM4MzkwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG1hYzgzOTBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBtYWM4MzkwX25vX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaW50ZXJsYW5fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIFNhbmUgKDMyLWJpdCBjaHVuayBtZW1vcnkgcmVhZC93cml0ZSkgLSBTb21lIEZhcmFsbG9uIGFuZCBBcHBsZSBkbyB0aGlzKi8KIHN0YXRpYyB2b2lkIHNhbmVfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgZTgzOTBfcGt0X2hkciAqaGRyLCBpbnQgcmluZ19wYWdlKTsKLXN0YXRpYyB2b2lkIHNhbmVfYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBjb3VudCwKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKiBza2IsIGludCByaW5nX29mZnNldCk7Ci1zdGF0aWMgdm9pZCBzYW5lX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IGNvdW50LAotCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZiwgY29uc3QgaW50IHN0YXJ0X3BhZ2UpOworc3RhdGljIHZvaWQgc2FuZV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCByaW5nX29mZnNldCk7CitzdGF0aWMgdm9pZCBzYW5lX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGNvbnN0IGludCBzdGFydF9wYWdlKTsKIAogLyogZGF5bmFfbWVtY3B5IHRvIGFuZCBmcm9tIGNhcmQgKi8KIHN0YXRpYyB2b2lkIGRheW5hX21lbWNweV9mcm9tY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp0bywKQEAgLTE0OCw4ICsxNTUsOCBAQAogc3RhdGljIHZvaWQgZGF5bmFfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKIAkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzdGFydF9wYWdlKTsKIAotI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsYixjKQltZW1jcHkoKGEpLCh2b2lkICopKGIpLChjKSkKLSNkZWZpbmUgbWVtY3B5X3RvaW8oYSxiLGMpCW1lbWNweSgodm9pZCAqKShhKSwoYiksKGMpKQorI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsIGIsIGMpCW1lbWNweSgoYSksICh2b2lkICopKGIpLCAoYykpCisjZGVmaW5lIG1lbWNweV90b2lvKGEsIGIsIGMpCW1lbWNweSgodm9pZCAqKShhKSwgKGIpLCAoYykpCiAKIC8qIFNsb3cgU2FuZSAoMTYtYml0IGNodW5rIG1lbW9yeSByZWFkL3dyaXRlKSBDYWJsZXRyb24gdXNlcyB0aGlzICovCiBzdGF0aWMgdm9pZCBzbG93X3NhbmVfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xNjQsNzAgKzE3MSw3MiBAQAogc3RhdGljIGVudW0gbWFjODM5MF90eXBlIF9faW5pdCBtYWM4MzkwX2lkZW50KHN0cnVjdCBudWJ1c19kZXYgKmRldikKIHsKIAlzd2l0Y2ggKGRldi0+ZHJfc3cpIHsKLQkJY2FzZSBOVUJVU19EUlNXXzNDT006Ci0JCQlzd2l0Y2ggKGRldi0+ZHJfaHcpIHsKLQkJCQljYXNlIE5VQlVTX0RSSFdfQVBQTEVfU09OSUNfTkI6Ci0JCQkJY2FzZSBOVUJVU19EUkhXX0FQUExFX1NPTklDX0xDOgotCQkJCWNhc2UgTlVCVVNfRFJIV19TT05ORVQ6Ci0JCQkJCXJldHVybiBNQUM4MzkwX05PTkU7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBNQUM4MzkwX0FQUExFOwotCQkJCQlicmVhazsKLQkJCX0KKwljYXNlIE5VQlVTX0RSU1dfM0NPTToKKwkJc3dpdGNoIChkZXYtPmRyX2h3KSB7CisJCWNhc2UgTlVCVVNfRFJIV19BUFBMRV9TT05JQ19OQjoKKwkJY2FzZSBOVUJVU19EUkhXX0FQUExFX1NPTklDX0xDOgorCQljYXNlIE5VQlVTX0RSSFdfU09OTkVUOgorCQkJcmV0dXJuIE1BQzgzOTBfTk9ORTsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE1BQzgzOTBfQVBQTEU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAotCQljYXNlIE5VQlVTX0RSU1dfQVBQTEU6Ci0JCQlzd2l0Y2ggKGRldi0+ZHJfaHcpIHsKLQkJCQljYXNlIE5VQlVTX0RSSFdfQVNBTlRFX0xDOgotCQkJCQlyZXR1cm4gTUFDODM5MF9OT05FOwotCQkJCQlicmVhazsKLQkJCQljYXNlIE5VQlVTX0RSSFdfQ0FCTEVUUk9OOgotCQkJCQlyZXR1cm4gTUFDODM5MF9DQUJMRVRST047Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBNQUM4MzkwX0FQUExFOwotCQkJCQlicmVhazsKLQkJCX0KKwljYXNlIE5VQlVTX0RSU1dfQVBQTEU6CisJCXN3aXRjaCAoZGV2LT5kcl9odykgeworCQljYXNlIE5VQlVTX0RSSFdfQVNBTlRFX0xDOgorCQkJcmV0dXJuIE1BQzgzOTBfTk9ORTsKIAkJCWJyZWFrOworCQljYXNlIE5VQlVTX0RSSFdfQ0FCTEVUUk9OOgorCQkJcmV0dXJuIE1BQzgzOTBfQ0FCTEVUUk9OOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTUFDODM5MF9BUFBMRTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCi0JCWNhc2UgTlVCVVNfRFJTV19BU0FOVEU6Ci0JCQlyZXR1cm4gTUFDODM5MF9BU0FOVEU7Ci0JCQlicmVhazsKKwljYXNlIE5VQlVTX0RSU1dfQVNBTlRFOgorCQlyZXR1cm4gTUFDODM5MF9BU0FOVEU7CisJCWJyZWFrOwogCi0JCWNhc2UgTlVCVVNfRFJTV19URUNIV09SS1M6Ci0JCWNhc2UgTlVCVVNfRFJTV19EQVlOQTI6Ci0JCWNhc2UgTlVCVVNfRFJTV19EQVlOQV9MQzoKLQkJCWlmIChkZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfQ0FCTEVUUk9OKQotCQkJCXJldHVybiBNQUM4MzkwX0NBQkxFVFJPTjsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gTUFDODM5MF9BUFBMRTsKLQkJCWJyZWFrOworCWNhc2UgTlVCVVNfRFJTV19URUNIV09SS1M6CisJY2FzZSBOVUJVU19EUlNXX0RBWU5BMjoKKwljYXNlIE5VQlVTX0RSU1dfREFZTkFfTEM6CisJCWlmIChkZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfQ0FCTEVUUk9OKQorCQkJcmV0dXJuIE1BQzgzOTBfQ0FCTEVUUk9OOworCQllbHNlCisJCQlyZXR1cm4gTUFDODM5MF9BUFBMRTsKKwkJYnJlYWs7CiAKLQkJY2FzZSBOVUJVU19EUlNXX0ZBUkFMTE9OOgotCQkJcmV0dXJuIE1BQzgzOTBfRkFSQUxMT047Ci0JCQlicmVhazsKKwljYXNlIE5VQlVTX0RSU1dfRkFSQUxMT046CisJCXJldHVybiBNQUM4MzkwX0ZBUkFMTE9OOworCQlicmVhazsKIAotCQljYXNlIE5VQlVTX0RSU1dfS0lORVRJQ1M6Ci0JCQlzd2l0Y2ggKGRldi0+ZHJfaHcpIHsKLQkJCQljYXNlIE5VQlVTX0RSSFdfSU5URVJMQU46Ci0JCQkJCXJldHVybiBNQUM4MzkwX0lOVEVSTEFOOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gTUFDODM5MF9LSU5FVElDUzsKLQkJCQkJYnJlYWs7Ci0JCQl9CisJY2FzZSBOVUJVU19EUlNXX0tJTkVUSUNTOgorCQlzd2l0Y2ggKGRldi0+ZHJfaHcpIHsKKwkJY2FzZSBOVUJVU19EUkhXX0lOVEVSTEFOOgorCQkJcmV0dXJuIE1BQzgzOTBfSU5URVJMQU47CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBNQUM4MzkwX0tJTkVUSUNTOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAKLQkJY2FzZSBOVUJVU19EUlNXX0RBWU5BOgotCQkJLy8gVGhlc2UgY29ycmVzcG9uZCB0byBEYXluYSBTb25pYyBjYXJkcwotCQkJLy8gd2hpY2ggdXNlIHRoZSBtYWNzb25pYyBkcml2ZXIKLQkJCWlmIChkZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfU01DOTE5NCB8fAotCQkJCWRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19JTlRFUkxBTiApCi0JCQkJcmV0dXJuIE1BQzgzOTBfTk9ORTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gTUFDODM5MF9EQVlOQTsKLQkJCWJyZWFrOworCWNhc2UgTlVCVVNfRFJTV19EQVlOQToKKwkJLyoKKwkJICogVGhlc2UgY29ycmVzcG9uZCB0byBEYXluYSBTb25pYyBjYXJkcworCQkgKiB3aGljaCB1c2UgdGhlIG1hY3NvbmljIGRyaXZlcgorCQkgKi8KKwkJaWYgKGRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19TTUM5MTk0IHx8CisJCSAgICBkZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfSU5URVJMQU4pCisJCQlyZXR1cm4gTUFDODM5MF9OT05FOworCQllbHNlCisJCQlyZXR1cm4gTUFDODM5MF9EQVlOQTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiBNQUM4MzkwX05PTkU7CiB9CkBAIC0yMzcsMTQgKzI0NiwxNCBAQAogCXVuc2lnbmVkIGxvbmcgb3V0ZGF0YSA9IDB4QTVBMEI1QjA7CiAJdW5zaWduZWQgbG9uZyBpbmRhdGEgPSAgMHgwMDAwMDAwMDsKIAkvKiBUcnkgd3JpdGluZyAzMiBiaXRzICovCi0JbWVtY3B5KChjaGFyICopbWVtYmFzZSwgKGNoYXIgKikmb3V0ZGF0YSwgNCk7CisJbWVtY3B5KG1lbWJhc2UsICZvdXRkYXRhLCA0KTsKIAkvKiBOb3cgY29tcGFyZSB0aGVtICovCiAJaWYgKG1lbWNtcCgoY2hhciAqKSZvdXRkYXRhLCAoY2hhciAqKW1lbWJhc2UsIDQpID09IDApCiAJCXJldHVybiBBQ0NFU1NfMzI7CiAJLyogV3JpdGUgMTYgYml0IG91dHB1dCAqLwotCXdvcmRfbWVtY3B5X3RvY2FyZCgoY2hhciAqKW1lbWJhc2UsIChjaGFyICopJm91dGRhdGEsIDQpOworCXdvcmRfbWVtY3B5X3RvY2FyZChtZW1iYXNlLCAmb3V0ZGF0YSwgNCk7CiAJLyogTm93IHJlYWQgaXQgYmFjayAqLwotCXdvcmRfbWVtY3B5X2Zyb21jYXJkKChjaGFyICopJmluZGF0YSwgKGNoYXIgKiltZW1iYXNlLCA0KTsKKwl3b3JkX21lbWNweV9mcm9tY2FyZCgmaW5kYXRhLCBtZW1iYXNlLCA0KTsKIAlpZiAob3V0ZGF0YSA9PSBpbmRhdGEpCiAJCXJldHVybiBBQ0NFU1NfMTY7CiAJcmV0dXJuIEFDQ0VTU19VTktOT1dOOwpAQCAtMjU4LDcgKzI2Nyw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCS8qIENoZWNrIHVwIHRvIDMySyBpbiA0SyBpbmNyZW1lbnRzICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqbSA9ICh1bnNpZ25lZCBzaG9ydCAqKSAobWVtYmFzZSArIChpICogMHgxMDAwKSk7CisJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICptID0gKHVuc2lnbmVkIHNob3J0ICopKG1lbWJhc2UgKyAoaSAqIDB4MTAwMCkpOwogCiAJCS8qIFVud3JpdGVhYmxlIC0gd2UgaGF2ZSBhIGZ1bGx5IGRlY29kZWQgY2FyZCBhbmQgdGhlCiAJCSAgIFJBTSBlbmQgbG9jYXRlZCAqLwpAQCAtMjczLDI4ICsyODIsMTI3IEBACiAKIAkJLyogY2hlY2sgZm9yIHBhcnRpYWwgZGVjb2RlIGFuZCB3cmFwICovCiAJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLQkJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHVuc2lnbmVkIHNob3J0ICopIChtZW1iYXNlICsgKGogKiAweDEwMDApKTsKKwkJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHVuc2lnbmVkIHNob3J0ICopKG1lbWJhc2UgKyAoaiAqIDB4MTAwMCkpOwogCQkJaWYgKCpwICE9ICgweEE1QTAgfCBqKSkKIAkJCQlicmVhazsKLSAJCX0KLSAJfQorCQl9CisJfQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkvKiBpbiBhbnkgY2FzZSwgd2Ugc3RvcHBlZCBvbmNlIHdlIHRyaWVkIG9uZSBibG9jayB0b28gbWFueSwKLSAgICAgICAgICAgb3Igb25jZSB3ZSByZWFjaGVkIDMySyAqLwotIAlyZXR1cm4gaSAqIDB4MTAwMDsKKwkvKgorCSAqIGluIGFueSBjYXNlLCB3ZSBzdG9wcGVkIG9uY2Ugd2UgdHJpZWQgb25lIGJsb2NrIHRvbyBtYW55LAorCSAqIG9yIG9uY2Ugd2UgcmVhY2hlZCAzMksKKwkgKi8KKwlyZXR1cm4gaSAqIDB4MTAwMDsKK30KKworc3RhdGljIGJvb2wgX19pbml0IG1hYzgzOTBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbnVidXNfZGV2ICpuZGV2LAorCQkJCWVudW0gbWFjODM5MF90eXBlIGNhcmR0eXBlKQoreworCXN0cnVjdCBudWJ1c19kaXIgZGlyOworCXN0cnVjdCBudWJ1c19kaXJlbnQgZW50OworCWludCBvZmZzZXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmk7CisKKwlwcmludGtfb25jZShLRVJOX0lORk8gcHJfZm10KCIlcyIpLCB2ZXJzaW9uKTsKKworCWRldi0+aXJxID0gU0xPVDJJUlEobmRldi0+Ym9hcmQtPnNsb3QpOworCS8qIFRoaXMgaXMgZ2V0dGluZyB0byBiZSBhIGhhYml0ICovCisJZGV2LT5iYXNlX2FkZHIgPSAobmRldi0+Ym9hcmQtPnNsb3RfYWRkciB8CisJCQkgICgobmRldi0+Ym9hcmQtPnNsb3QgJiAweGYpIDw8IDIwKSk7CisKKwkvKgorCSAqIEdldCBzb21lIE51YnVzIGluZm8gLSB3ZSB3aWxsIHRydXN0IHRoZSBjYXJkJ3MgaWRlYQorCSAqIG9mIHdoZXJlIGl0cyBtZW1vcnkgYW5kIHJlZ2lzdGVycyBhcmUuCisJICovCisKKwlpZiAobnVidXNfZ2V0X2Z1bmNfZGlyKG5kZXYsICZkaXIpID09IC0xKSB7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBnZXQgTnVidXMgZnVuY3Rpb25hbCBkaXJlY3RvcnkgZm9yIHNsb3QgJVghXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJaWYgKG51YnVzX2ZpbmRfcnNyYygmZGlyLCBOVUJVU19SRVNJRF9NQUNfQUREUkVTUywgJmVudCkgPT0gLTEpIHsKKwkJcHJfaW5mbygiJXM6IENvdWxkbid0IGdldCBNQUMgYWRkcmVzcyFcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwludWJ1c19nZXRfcnNyY19tZW0oZGV2LT5kZXZfYWRkciwgJmVudCwgNik7CisKKwlpZiAodXNlcmVzb3VyY2VzW2NhcmR0eXBlXSA9PSAxKSB7CisJCW51YnVzX3Jld2luZGRpcigmZGlyKTsKKwkJaWYgKG51YnVzX2ZpbmRfcnNyYygmZGlyLCBOVUJVU19SRVNJRF9NSU5PUl9CQVNFT1MsCisJCQkJICAgICZlbnQpID09IC0xKSB7CisJCQlwcl9lcnIoIiVzOiBNZW1vcnkgb2Zmc2V0IHJlc291cmNlIGZvciBzbG90ICVYIG5vdCBmb3VuZCFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJbnVidXNfZ2V0X3JzcmNfbWVtKCZvZmZzZXQsICZlbnQsIDQpOworCQlkZXYtPm1lbV9zdGFydCA9IGRldi0+YmFzZV9hZGRyICsgb2Zmc2V0OworCQkvKiB5ZXMsIHRoaXMgaXMgaG93IHRoZSBBcHBsZSBkcml2ZXIgZG9lcyBpdCAqLworCQlkZXYtPmJhc2VfYWRkciA9IGRldi0+bWVtX3N0YXJ0ICsgMHgxMDAwMDsKKwkJbnVidXNfcmV3aW5kZGlyKCZkaXIpOworCQlpZiAobnVidXNfZmluZF9yc3JjKCZkaXIsIE5VQlVTX1JFU0lEX01JTk9SX0xFTkdUSCwKKwkJCQkgICAgJmVudCkgPT0gLTEpIHsKKwkJCXByX2luZm8oIiVzOiBNZW1vcnkgbGVuZ3RoIHJlc291cmNlIGZvciBzbG90ICVYIG5vdCBmb3VuZCwgcHJvYmluZ1xuIiwKKwkJCQlkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKKwkJCW9mZnNldCA9IG1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7CisJCX0gZWxzZSB7CisJCQludWJ1c19nZXRfcnNyY19tZW0oJm9mZnNldCwgJmVudCwgNCk7CisJCX0KKwkJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBvZmZzZXQ7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjYXJkdHlwZSkgeworCQljYXNlIE1BQzgzOTBfS0lORVRJQ1M6CisJCWNhc2UgTUFDODM5MF9EQVlOQTogLyogaXQncyB0aGUgc2FtZSAqLworCQkJZGV2LT5iYXNlX2FkZHIgPSAoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKKwkJCQkJICAgICAgIERBWU5BXzgzOTBfQkFTRSk7CisJCQlkZXYtPm1lbV9zdGFydCA9IChpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKworCQkJCQkgICAgICAgREFZTkFfODM5MF9NRU0pOworCQkJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKworCQkJCSAgICAgICBtYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOworCQkJYnJlYWs7CisJCWNhc2UgTUFDODM5MF9JTlRFUkxBTjoKKwkJCWRldi0+YmFzZV9hZGRyID0gKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCisJCQkJCSAgICAgICBJTlRFUkxBTl84MzkwX0JBU0UpOworCQkJZGV2LT5tZW1fc3RhcnQgPSAoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKKwkJCQkJICAgICAgIElOVEVSTEFOXzgzOTBfTUVNKTsKKwkJCWRldi0+bWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsKKwkJCQkgICAgICAgbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKKwkJCWJyZWFrOworCQljYXNlIE1BQzgzOTBfQ0FCTEVUUk9OOgorCQkJZGV2LT5iYXNlX2FkZHIgPSAoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKKwkJCQkJICAgICAgIENBQkxFVFJPTl84MzkwX0JBU0UpOworCQkJZGV2LT5tZW1fc3RhcnQgPSAoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKKwkJCQkJICAgICAgIENBQkxFVFJPTl84MzkwX01FTSk7CisJCQkvKiBUaGUgYmFzZSBhZGRyZXNzIGlzIHVucmVhZGFibGUgaWYgMHgwMAorCQkJICogaGFzIGJlZW4gd3JpdHRlbiB0byB0aGUgY29tbWFuZCByZWdpc3RlcgorCQkJICogUmVzZXQgdGhlIGNoaXAgYnkgd3JpdGluZyBFODM5MF9OT0RNQSArCisJCQkgKiAgIEU4MzkwX1BBR0UwICsgRTgzOTBfU1RPUCBqdXN0IHRvIGJlCisJCQkgKiAgIHN1cmUKKwkJCSAqLworCQkJaSA9ICh2b2lkICopZGV2LT5iYXNlX2FkZHI7CisJCQkqaSA9IDB4MjE7CisJCQlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArCisJCQkJICAgICAgIG1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJfZXJyKCJDYXJkIHR5cGUgJXMgaXMgdW5zdXBwb3J0ZWQsIHNvcnJ5XG4iLAorCQkJICAgICAgIG5kZXYtPmJvYXJkLT5uYW1lKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOwogfQogCiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBtYWM4MzkwX3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmk7Ci0JaW50IHZlcnNpb25fZGlzcCA9IDA7Ci0Jc3RydWN0IG51YnVzX2RldiAqIG5kZXYgPSBOVUxMOworCXN0cnVjdCBudWJ1c19kZXYgKm5kZXYgPSBOVUxMOwogCWludCBlcnIgPSAtRU5PREVWOwogCi0Jc3RydWN0IG51YnVzX2RpciBkaXI7Ci0Jc3RydWN0IG51YnVzX2RpcmVudCBlbnQ7Ci0JaW50IG9mZnNldDsKIAlzdGF0aWMgdW5zaWduZWQgaW50IHNsb3RzOwogCiAJZW51bSBtYWM4MzkwX3R5cGUgY2FyZHR5cGU7CkBAIC0zMTEsMTE4ICs0MTksMTkgQEAKIAlpZiAodW5pdCA+PSAwKQogCQlzcHJpbnRmKGRldi0+bmFtZSwgImV0aCVkIiwgdW5pdCk7CiAKLQl3aGlsZSAoKG5kZXYgPSBudWJ1c19maW5kX3R5cGUoTlVCVVNfQ0FUX05FVFdPUkssIE5VQlVTX1RZUEVfRVRIRVJORVQsIG5kZXYpKSkgeworCXdoaWxlICgobmRldiA9IG51YnVzX2ZpbmRfdHlwZShOVUJVU19DQVRfTkVUV09SSywgTlVCVVNfVFlQRV9FVEhFUk5FVCwKKwkJCQkgICAgICAgbmRldikpKSB7CiAJCS8qIEhhdmUgd2Ugc2VlbiBpdCBhbHJlYWR5PyAqLwotCQlpZiAoc2xvdHMgJiAoMTw8bmRldi0+Ym9hcmQtPnNsb3QpKQorCQlpZiAoc2xvdHMgJiAoMSA8PCBuZGV2LT5ib2FyZC0+c2xvdCkpCiAJCQljb250aW51ZTsKLQkJc2xvdHMgfD0gMTw8bmRldi0+Ym9hcmQtPnNsb3Q7CisJCXNsb3RzIHw9IDEgPDwgbmRldi0+Ym9hcmQtPnNsb3Q7CiAKLQkJaWYgKChjYXJkdHlwZSA9IG1hYzgzOTBfaWRlbnQobmRldikpID09IE1BQzgzOTBfTk9ORSkKKwkJY2FyZHR5cGUgPSBtYWM4MzkwX2lkZW50KG5kZXYpOworCQlpZiAoY2FyZHR5cGUgPT0gTUFDODM5MF9OT05FKQogCQkJY29udGludWU7CiAKLQkJaWYgKHZlcnNpb25fZGlzcCA9PSAwKSB7Ci0JCQl2ZXJzaW9uX2Rpc3AgPSAxOwotCQkJcHJpbnRrKHZlcnNpb24pOwotCQl9Ci0KLQkJZGV2LT5pcnEgPSBTTE9UMklSUShuZGV2LT5ib2FyZC0+c2xvdCk7Ci0JCS8qIFRoaXMgaXMgZ2V0dGluZyB0byBiZSBhIGhhYml0ICovCi0JCWRldi0+YmFzZV9hZGRyID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkciB8ICgobmRldi0+Ym9hcmQtPnNsb3QmMHhmKSA8PCAyMCk7Ci0KLQkJLyogR2V0IHNvbWUgTnVidXMgaW5mbyAtIHdlIHdpbGwgdHJ1c3QgdGhlIGNhcmQncyBpZGVhCi0JCSAgIG9mIHdoZXJlIGl0cyBtZW1vcnkgYW5kIHJlZ2lzdGVycyBhcmUuICovCi0KLQkJaWYgKG51YnVzX2dldF9mdW5jX2RpcihuZGV2LCAmZGlyKSA9PSAtMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGdldCBOdWJ1cyBmdW5jdGlvbmFsIgotCQkJCQkiIGRpcmVjdG9yeSBmb3Igc2xvdCAlWCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJCWlmICghbWFjODM5MF9pbml0KGRldiwgbmRldiwgY2FyZHR5cGUpKQogCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JCWlmICgobnVidXNfZmluZF9yc3JjKCZkaXIsIE5VQlVTX1JFU0lEX01BQ19BRERSRVNTLCAmZW50KSkgPT0gLTEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VsZG4ndCBnZXQgTUFDIGFkZHJlc3MhXG4iLAotCQkJCQlkZXYtPm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSB7Ci0JCQludWJ1c19nZXRfcnNyY19tZW0oZGV2LT5kZXZfYWRkciwgJmVudCwgNik7Ci0JCX0KLQotCQlpZiAodXNlcmVzb3VyY2VzW2NhcmR0eXBlXSA9PSAxKSB7Ci0JCQludWJ1c19yZXdpbmRkaXIoJmRpcik7Ci0JCQlpZiAobnVidXNfZmluZF9yc3JjKCZkaXIsIE5VQlVTX1JFU0lEX01JTk9SX0JBU0VPUywgJmVudCkgPT0gLTEpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNZW1vcnkgb2Zmc2V0IHJlc291cmNlIgotCQkJCQkJIiBmb3Igc2xvdCAlWCBub3QgZm91bmQhXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCW51YnVzX2dldF9yc3JjX21lbSgmb2Zmc2V0LCAmZW50LCA0KTsKLQkJCWRldi0+bWVtX3N0YXJ0ID0gZGV2LT5iYXNlX2FkZHIgKyBvZmZzZXQ7Ci0JCQkvKiB5ZXMsIHRoaXMgaXMgaG93IHRoZSBBcHBsZSBkcml2ZXIgZG9lcyBpdCAqLwotCQkJZGV2LT5iYXNlX2FkZHIgPSBkZXYtPm1lbV9zdGFydCArIDB4MTAwMDA7Ci0JCQludWJ1c19yZXdpbmRkaXIoJmRpcik7Ci0JCQlpZiAobnVidXNfZmluZF9yc3JjKCZkaXIsIE5VQlVTX1JFU0lEX01JTk9SX0xFTkdUSCwgJmVudCkgPT0gLTEpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTWVtb3J5IGxlbmd0aCByZXNvdXJjZSIKLQkJCQkJCSAiIGZvciBzbG90ICVYIG5vdCBmb3VuZCIKLQkJCQkJCSAiLCBwcm9iaW5nXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKLQkJCQlvZmZzZXQgPSBtYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW51YnVzX2dldF9yc3JjX21lbSgmb2Zmc2V0LCAmZW50LCA0KTsKLQkJCQl9Ci0JCQlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIG9mZnNldDsKLQkJfSBlbHNlIHsKLQkJCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQkJCQljYXNlIE1BQzgzOTBfS0lORVRJQ1M6Ci0JCQkJY2FzZSBNQUM4MzkwX0RBWU5BOiAvKiBpdCdzIHRoZSBzYW1lICovCi0JCQkJCWRldi0+YmFzZV9hZGRyID0KLQkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwotCQkJCQkJREFZTkFfODM5MF9CQVNFKTsKLQkJCQkJZGV2LT5tZW1fc3RhcnQgPQotCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCi0JCQkJCQlEQVlOQV84MzkwX01FTSk7Ci0JCQkJCWRldi0+bWVtX2VuZCA9Ci0JCQkJCQlkZXYtPm1lbV9zdGFydCArCi0JCQkJCQltYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIE1BQzgzOTBfSU5URVJMQU46Ci0JCQkJCWRldi0+YmFzZV9hZGRyID0KLQkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwotCQkJCQkJSU5URVJMQU5fODM5MF9CQVNFKTsKLQkJCQkJZGV2LT5tZW1fc3RhcnQgPQotCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCi0JCQkJCQlJTlRFUkxBTl84MzkwX01FTSk7Ci0JCQkJCWRldi0+bWVtX2VuZCA9Ci0JCQkJCQlkZXYtPm1lbV9zdGFydCArCi0JCQkJCQltYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIE1BQzgzOTBfQ0FCTEVUUk9OOgotCQkJCQlkZXYtPmJhc2VfYWRkciA9Ci0JCQkJCQkoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKLQkJCQkJCUNBQkxFVFJPTl84MzkwX0JBU0UpOwotCQkJCQlkZXYtPm1lbV9zdGFydCA9Ci0JCQkJCQkoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKLQkJCQkJCUNBQkxFVFJPTl84MzkwX01FTSk7Ci0JCQkJCS8qIFRoZSBiYXNlIGFkZHJlc3MgaXMgdW5yZWFkYWJsZSBpZiAweDAwCi0JCQkJCSAqIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKLQkJCQkJICogUmVzZXQgdGhlIGNoaXAgYnkgd3JpdGluZyBFODM5MF9OT0RNQSArCi0JCQkJCSAqICAgRTgzOTBfUEFHRTAgKyBFODM5MF9TVE9QIGp1c3QgdG8gYmUKLQkJCQkJICogICBzdXJlCi0JCQkJCSAqLwotCQkJCQlpID0gKHZvaWQgKilkZXYtPmJhc2VfYWRkcjsKLQkJCQkJKmkgPSAweDIxOwotCQkJCQlkZXYtPm1lbV9lbmQgPQotCQkJCQkJZGV2LT5tZW1fc3RhcnQgKwotCQkJCQkJbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OgotCQkJCQlwcmludGsoS0VSTl9FUlIgIkNhcmQgdHlwZSAlcyBpcyIKLQkJCQkJICAgICAgICIgdW5zdXBwb3J0ZWQsIHNvcnJ5XG4iLAotCQkJCQkgICAgICAgbmRldi0+Ym9hcmQtPm5hbWUpOwotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQogCiAJCS8qIERvIHRoZSBuYXN0eSA4MzkwIHN0dWZmICovCiAJCWlmICghbWFjODM5MF9pbml0ZGV2KGRldiwgbmRldiwgY2FyZHR5cGUpKQpAQCAtNDU4LDcgKzQ2Nyw3IEBACiAJCWRldl9tYWM4OTBbaV0gPSBkZXY7CiAJfQogCWlmICghaSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1hYzgzOTAuYzogTm8gdXNlYWJsZSBjYXJkcyBmb3VuZCwgZHJpdmVyIE5PVCBpbnN0YWxsZWQuXG4iKTsKKwkJcHJfbm90aWNlKCJObyB1c2VhYmxlIGNhcmRzIGZvdW5kLCBkcml2ZXIgTk9UIGluc3RhbGxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CkBAIC00OTMsMjIgKzUwMiwyMyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBtYWM4MzkwX2luaXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIHN0cnVjdCBudWJ1c19kZXYgKiBuZGV2LAotCQkJICAgIGVudW0gbWFjODM5MF90eXBlIHR5cGUpCitzdGF0aWMgaW50IF9faW5pdCBtYWM4MzkwX2luaXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBudWJ1c19kZXYgKm5kZXYsCisJCQkJICBlbnVtIG1hYzgzOTBfdHlwZSB0eXBlKQogewotCXN0YXRpYyB1MzIgZndyZDRfb2Zmc2V0c1sxNl09eworCXN0YXRpYyB1MzIgZndyZDRfb2Zmc2V0c1sxNl0gPSB7CiAJCTAsICAgICAgNCwgICAgICA4LCAgICAgIDEyLAogCQkxNiwgICAgIDIwLCAgICAgMjQsICAgICAyOCwKIAkJMzIsICAgICAzNiwgICAgIDQwLCAgICAgNDQsCiAJCTQ4LCAgICAgNTIsICAgICA1NiwgICAgIDYwCiAJfTsKLQlzdGF0aWMgdTMyIGJhY2s0X29mZnNldHNbMTZdPXsKKwlzdGF0aWMgdTMyIGJhY2s0X29mZnNldHNbMTZdID0gewogCQk2MCwgICAgIDU2LCAgICAgNTIsICAgICA0OCwKIAkJNDQsICAgICA0MCwgICAgIDM2LCAgICAgMzIsCiAJCTI4LCAgICAgMjQsICAgICAyMCwgICAgIDE2LAogCQkxMiwgICAgIDgsICAgICAgNCwgICAgICAwCiAJfTsKLQlzdGF0aWMgdTMyIGZ3cmQyX29mZnNldHNbMTZdPXsKKwlzdGF0aWMgdTMyIGZ3cmQyX29mZnNldHNbMTZdID0gewogCQkwLCAgICAgIDIsICAgICAgNCwgICAgICA2LAogCQk4LCAgICAgMTAsICAgICAxMiwgICAgIDE0LAogCQkxNiwgICAgMTgsICAgICAyMCwgICAgIDIyLApAQCAtNTI2LDQ3ICs1MzYsNDcgQEAKIAogCS8qIENhYmxldHJvbidzIFRYL1JYIGJ1ZmZlcnMgYXJlIGJhY2t3YXJkcyAqLwogCWlmICh0eXBlID09IE1BQzgzOTBfQ0FCTEVUUk9OKSB7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IENBQkxFVFJPTl9UWF9TVEFSVF9QRzsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5yeF9zdGFydF9wYWdlID0gQ0FCTEVUUk9OX1JYX1NUQVJUX1BHOwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnN0b3BfcGFnZSA9IENBQkxFVFJPTl9SWF9TVE9QX1BHOwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJtZW1fc3RhcnQgPSBkZXYtPm1lbV9zdGFydDsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5ybWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsgQ0FCTEVUUk9OX1JYX1NUT1BfUEcqMjU2OworCQllaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IENBQkxFVFJPTl9UWF9TVEFSVF9QRzsKKwkJZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPSBDQUJMRVRST05fUlhfU1RBUlRfUEc7CisJCWVpX3N0YXR1cy5zdG9wX3BhZ2UgPSBDQUJMRVRST05fUlhfU1RPUF9QRzsKKwkJZWlfc3RhdHVzLnJtZW1fc3RhcnQgPSBkZXYtPm1lbV9zdGFydDsKKwkJZWlfc3RhdHVzLnJtZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBDQUJMRVRST05fUlhfU1RPUF9QRyoyNTY7CiAJfSBlbHNlIHsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy50eF9zdGFydF9wYWdlID0gV0RfU1RBUlRfUEc7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA9IFdEX1NUQVJUX1BHICsgVFhfUEFHRVM7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMuc3RvcF9wYWdlID0gKGRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0KS8yNTY7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMucm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0ICsgVFhfUEFHRVMqMjU2OwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJtZW1fZW5kID0gZGV2LT5tZW1fZW5kOworCQllaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IFdEX1NUQVJUX1BHOworCQllaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA9IFdEX1NUQVJUX1BHICsgVFhfUEFHRVM7CisJCWVpX3N0YXR1cy5zdG9wX3BhZ2UgPSAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQpLzI1NjsKKwkJZWlfc3RhdHVzLnJtZW1fc3RhcnQgPSBkZXYtPm1lbV9zdGFydCArIFRYX1BBR0VTKjI1NjsKKwkJZWlfc3RhdHVzLnJtZW1fZW5kID0gZGV2LT5tZW1fZW5kOwogCX0KIAogCS8qIEZpbGwgaW4gbW9kZWwtc3BlY2lmaWMgaW5mb3JtYXRpb24gYW5kIGZ1bmN0aW9ucyAqLwotCXN3aXRjaCh0eXBlKSB7CisJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNQUM4MzkwX0ZBUkFMTE9OOgogCWNhc2UgTUFDODM5MF9BUFBMRToKLQkJc3dpdGNoKG1hYzgzOTBfdGVzdGlvKGRldi0+bWVtX3N0YXJ0KSkgewotCQkJY2FzZSBBQ0NFU1NfVU5LTk9XTjoKLQkJCQlwcmludGsoIkRvbid0IGtub3cgaG93IHRvIGFjY2VzcyBjYXJkIG1lbW9yeSFcbiIpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJCWJyZWFrOworCQlzd2l0Y2ggKG1hYzgzOTBfdGVzdGlvKGRldi0+bWVtX3N0YXJ0KSkgeworCQljYXNlIEFDQ0VTU19VTktOT1dOOgorCQkJcHJfaW5mbygiRG9uJ3Qga25vdyBob3cgdG8gYWNjZXNzIGNhcmQgbWVtb3J5IVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOwogCi0JCQljYXNlIEFDQ0VTU18xNjoKLQkJCQkvKiAxNiBiaXQgY2FyZCwgcmVnaXN0ZXIgbWFwIGlzIHJldmVyc2VkICovCi0JCQkJZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSAmbWFjODM5MF9ub19yZXNldDsKLQkJCQllaV9zdGF0dXMuYmxvY2tfaW5wdXQgPSAmc2xvd19zYW5lX2Jsb2NrX2lucHV0OwotCQkJCWVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSAmc2xvd19zYW5lX2Jsb2NrX291dHB1dDsKLQkJCQllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJnNsb3dfc2FuZV9nZXRfODM5MF9oZHI7Ci0JCQkJZWlfc3RhdHVzLnJlZ19vZmZzZXQgPSBiYWNrNF9vZmZzZXRzOwotCQkJCWJyZWFrOworCQljYXNlIEFDQ0VTU18xNjoKKwkJCS8qIDE2IGJpdCBjYXJkLCByZWdpc3RlciBtYXAgaXMgcmV2ZXJzZWQgKi8KKwkJCWVpX3N0YXR1cy5yZXNldF84MzkwID0gJm1hYzgzOTBfbm9fcmVzZXQ7CisJCQllaV9zdGF0dXMuYmxvY2tfaW5wdXQgPSAmc2xvd19zYW5lX2Jsb2NrX2lucHV0OworCQkJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZzbG93X3NhbmVfYmxvY2tfb3V0cHV0OworCQkJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZzbG93X3NhbmVfZ2V0XzgzOTBfaGRyOworCQkJZWlfc3RhdHVzLnJlZ19vZmZzZXQgPSBiYWNrNF9vZmZzZXRzOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgQUNDRVNTXzMyOgotCQkJCS8qIDMyIGJpdCBjYXJkLCByZWdpc3RlciBtYXAgaXMgcmV2ZXJzZWQgKi8KLQkJCQllaV9zdGF0dXMucmVzZXRfODM5MCA9ICZtYWM4MzkwX25vX3Jlc2V0OwotCQkJCWVpX3N0YXR1cy5ibG9ja19pbnB1dCA9ICZzYW5lX2Jsb2NrX2lucHV0OwotCQkJCWVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSAmc2FuZV9ibG9ja19vdXRwdXQ7Ci0JCQkJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZzYW5lX2dldF84MzkwX2hkcjsKLQkJCQllaV9zdGF0dXMucmVnX29mZnNldCA9IGJhY2s0X29mZnNldHM7Ci0JCQkJYWNjZXNzX2JpdG1vZGUgPSAxOwotCQkJCWJyZWFrOworCQljYXNlIEFDQ0VTU18zMjoKKwkJCS8qIDMyIGJpdCBjYXJkLCByZWdpc3RlciBtYXAgaXMgcmV2ZXJzZWQgKi8KKwkJCWVpX3N0YXR1cy5yZXNldF84MzkwID0gJm1hYzgzOTBfbm9fcmVzZXQ7CisJCQllaV9zdGF0dXMuYmxvY2tfaW5wdXQgPSAmc2FuZV9ibG9ja19pbnB1dDsKKwkJCWVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSAmc2FuZV9ibG9ja19vdXRwdXQ7CisJCQllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJnNhbmVfZ2V0XzgzOTBfaGRyOworCQkJZWlfc3RhdHVzLnJlZ19vZmZzZXQgPSBiYWNrNF9vZmZzZXRzOworCQkJYWNjZXNzX2JpdG1vZGUgPSAxOworCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTYwOCwyNCArNjE4LDI1IEBACiAJCWVpX3N0YXR1cy5ibG9ja19pbnB1dCA9ICZzbG93X3NhbmVfYmxvY2tfaW5wdXQ7CiAJCWVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSAmc2xvd19zYW5lX2Jsb2NrX291dHB1dDsKIAkJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZzbG93X3NhbmVfZ2V0XzgzOTBfaGRyOwotCSAgICAgICAgZWlfc3RhdHVzLnJlZ19vZmZzZXQgPSBmd3JkNF9vZmZzZXRzOwotCSAgICAgICAgYnJlYWs7CisJCWVpX3N0YXR1cy5yZWdfb2Zmc2V0ID0gZndyZDRfb2Zmc2V0czsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIkNhcmQgdHlwZSAlcyBpcyB1bnN1cHBvcnRlZCwgc29ycnlcbiIsIG5kZXYtPmJvYXJkLT5uYW1lKTsKKwkJcHJfZXJyKCJDYXJkIHR5cGUgJXMgaXMgdW5zdXBwb3J0ZWQsIHNvcnJ5XG4iLAorCQkgICAgICAgbmRldi0+Ym9hcmQtPm5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlfX05TODM5MF9pbml0KGRldiwgMCk7CiAKIAkvKiBHb29kLCBkb25lLCBub3cgc3BpdCBvdXQgc29tZSBtZXNzYWdlcyAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBpbiBzbG90ICVYICh0eXBlICVzKVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QsIGNhcmRuYW1lW3R5cGVdKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJNQUMgJXBNIElSUSAlZCwgJWQgS0Igc2hhcmVkIG1lbW9yeSBhdCAlI2x4LCAlZC1iaXQgYWNjZXNzLlxuIiwKLQkgICAgICAgZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEsCi0JICAgICAgICh1bnNpZ25lZCBpbnQpKGRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0KSA+PiAxMCwKLQkgICAgICAgZGV2LT5tZW1fc3RhcnQsIGFjY2Vzc19iaXRtb2RlID8gMzIgOiAxNik7CisJcHJfaW5mbygiJXM6ICVzIGluIHNsb3QgJVggKHR5cGUgJXMpXG4iLAorCQlkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCwKKwkJY2FyZG5hbWVbdHlwZV0pOworCXByX2luZm8oIk1BQyAlcE0gSVJRICVkLCAlZCBLQiBzaGFyZWQgbWVtb3J5IGF0ICUjbHgsICVkLWJpdCBhY2Nlc3MuXG4iLAorCQlkZXYtPmRldl9hZGRyLCBkZXYtPmlycSwKKwkJKHVuc2lnbmVkIGludCkoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQpID4+IDEwLAorCQlkZXYtPm1lbV9zdGFydCwgYWNjZXNzX2JpdG1vZGUgPyAzMiA6IDE2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMzLDcgKzY0NCw3IEBACiB7CiAJX19laV9vcGVuKGRldik7CiAJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBfX2VpX2ludGVycnVwdCwgMCwgIjgzOTAgRXRoZXJuZXQiLCBkZXYpKSB7Ci0JCXByaW50ayAoIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlwcl9pbmZvKCIlczogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCXJldHVybiAwOwpAQCAtNjUwLDcyICs2NjEsNzEgQEAKIHsKIAllaV9zdGF0dXMudHhpbmcgPSAwOwogCWlmIChlaV9kZWJ1ZyA+IDEpCi0JCXByaW50aygicmVzZXQgbm90IHN1cHBvcnRlZFxuIik7CisJCXByX2luZm8oInJlc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwogCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgaW50ZXJsYW5fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1bnNpZ25lZCBjaGFyICp0YXJnZXQ9bnVidXNfc2xvdF9hZGRyKElSUTJTTE9UKGRldi0+aXJxKSk7CisJdW5zaWduZWQgY2hhciAqdGFyZ2V0ID0gbnVidXNfc2xvdF9hZGRyKElSUTJTTE9UKGRldi0+aXJxKSk7CiAJaWYgKGVpX2RlYnVnID4gMSkKLQkJcHJpbnRrKCJOZWVkIHRvIHJlc2V0IHRoZSBOUzgzOTAgdD0lbHUuLi4iLCBqaWZmaWVzKTsKKwkJcHJfaW5mbygiTmVlZCB0byByZXNldCB0aGUgTlM4MzkwIHQ9JWx1Li4uIiwgamlmZmllcyk7CiAJZWlfc3RhdHVzLnR4aW5nID0gMDsKIAl0YXJnZXRbMHhDMDAwMF0gPSAwOwogCWlmIChlaV9kZWJ1ZyA+IDEpCi0JCXByaW50aygicmVzZXQgY29tcGxldGVcbiIpOworCQlwcl9jb250KCJyZXNldCBjb21wbGV0ZVxuIik7CiAJcmV0dXJuOwogfQogCiAvKiBkYXluYV9tZW1jcHlfZnJvbWlvL2RheW5hX21lbWNweV90b2lvICovCiAvKiBkaXJlY3RseSBmcm9tIGRheW5hcG9ydC5jIGJ5IEFsYW4gQ294ICovCi1zdGF0aWMgdm9pZCBkYXluYV9tZW1jcHlfZnJvbWNhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdG8sIGludCBmcm9tLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBkYXluYV9tZW1jcHlfZnJvbWNhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdG8sIGludCBmcm9tLAorCQkJCSAgaW50IGNvdW50KQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnB0cjsKLQl1bnNpZ25lZCBjaGFyICp0YXJnZXQ9dG87Ci0JZnJvbTw8PTE7CS8qIHdvcmQsIHNraXAgb3ZlcmhlYWQgKi8KLQlwdHI9KHVuc2lnbmVkIGNoYXIgKikoZGV2LT5tZW1fc3RhcnQrZnJvbSk7CisJdW5zaWduZWQgY2hhciAqdGFyZ2V0ID0gdG87CisJZnJvbSA8PD0gMTsJLyogd29yZCwgc2tpcCBvdmVyaGVhZCAqLworCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopKGRldi0+bWVtX3N0YXJ0K2Zyb20pOwogCS8qIExlYWRpbmcgYnl0ZT8gKi8KLQlpZiAoZnJvbSYyKSB7CisJaWYgKGZyb20gJiAyKSB7CiAJCSp0YXJnZXQrKyA9IHB0clstMV07CiAJCXB0ciArPSAyOwogCQljb3VudC0tOwogCX0KLQl3aGlsZShjb3VudD49MikKLQl7CisJd2hpbGUgKGNvdW50ID49IDIpIHsKIAkJKih1bnNpZ25lZCBzaG9ydCAqKXRhcmdldCA9ICoodW5zaWduZWQgc2hvcnQgdm9sYXRpbGUgKilwdHI7CiAJCXB0ciArPSA0OwkJCS8qIHNraXAgY3J1ZnQgKi8KIAkJdGFyZ2V0ICs9IDI7Ci0JCWNvdW50LT0yOworCQljb3VudCAtPSAyOwogCX0KIAkvKiBUcmFpbGluZyBieXRlPyAqLwotCWlmKGNvdW50KQorCWlmIChjb3VudCkKIAkJKnRhcmdldCA9ICpwdHI7CiB9CiAKLXN0YXRpYyB2b2lkIGRheW5hX21lbWNweV90b2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRvLCBjb25zdCB2b2lkICpmcm9tLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBkYXluYV9tZW1jcHlfdG9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0bywKKwkJCQljb25zdCB2b2lkICpmcm9tLCBpbnQgY291bnQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnB0cjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzcmM9ZnJvbTsKLQl0bzw8PTE7CS8qIHdvcmQsIHNraXAgb3ZlcmhlYWQgKi8KLQlwdHI9KHVuc2lnbmVkIHNob3J0ICopKGRldi0+bWVtX3N0YXJ0K3RvKTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSBmcm9tOworCXRvIDw8PSAxOwkvKiB3b3JkLCBza2lwIG92ZXJoZWFkICovCisJcHRyID0gKHVuc2lnbmVkIHNob3J0ICopKGRldi0+bWVtX3N0YXJ0K3RvKTsKIAkvKiBMZWFkaW5nIGJ5dGU/ICovCi0JaWYgKHRvJjIpIHsgLyogYXZvaWQgYSBieXRlIHdyaXRlIChzdG9tcHMgb24gb3RoZXIgZGF0YSkgKi8KKwlpZiAodG8gJiAyKSB7CQkvKiBhdm9pZCBhIGJ5dGUgd3JpdGUgKHN0b21wcyBvbiBvdGhlciBkYXRhKSAqLwogCQlwdHJbLTFdID0gKHB0clstMV0mMHhGRjAwKXwqc3JjKys7CiAJCXB0cisrOwogCQljb3VudC0tOwogCX0KLQl3aGlsZShjb3VudD49MikKLQl7Ci0JCSpwdHIrKz0qKHVuc2lnbmVkIHNob3J0ICopc3JjOwkJLyogQ29weSBhbmQgKi8KKwl3aGlsZSAoY291bnQgPj0gMikgeworCQkqcHRyKysgPSAqKHVuc2lnbmVkIHNob3J0ICopc3JjOwkvKiBDb3B5IGFuZCAqLwogCQlwdHIrKzsJCQkvKiBza2lwIGNydWZ0ICovCiAJCXNyYyArPSAyOwotCQljb3VudC09MjsKKwkJY291bnQgLT0gMjsKIAl9CiAJLyogVHJhaWxpbmcgYnl0ZT8gKi8KLQlpZihjb3VudCkKLQl7CisJaWYgKGNvdW50KSB7CiAJCS8qIGNhcmQgZG9lc24ndCBsaWtlIGJ5dGUgd3JpdGVzICovCi0JCSpwdHI9KCpwdHImMHgwMEZGKXwoKnNyYyA8PCA4KTsKKwkJKnB0ciA9ICgqcHRyICYgMHgwMEZGKSB8ICgqc3JjIDw8IDgpOwogCX0KIH0KIApAQCAtNzM4LDExICs3NDgsMTQgQEAKIAlpZiAoeGZlcl9zdGFydCArIGNvdW50ID4gZWlfc3RhdHVzLnJtZW1fZW5kKSB7CiAJCS8qIFdlIG11c3Qgd3JhcCB0aGUgaW5wdXQgbW92ZS4gKi8KIAkJaW50IHNlbWlfY291bnQgPSBlaV9zdGF0dXMucm1lbV9lbmQgLSB4ZmVyX3N0YXJ0OwotCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwgc2VtaV9jb3VudCk7CisJCW1lbWNweV9mcm9taW8oc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLAorCQkJICAgICAgc2VtaV9jb3VudCk7CiAJCWNvdW50IC09IHNlbWlfY291bnQ7Ci0JCW1lbWNweV90b2lvKHNrYi0+ZGF0YSArIHNlbWlfY291bnQsIChjaGFyICopZWlfc3RhdHVzLnJtZW1fc3RhcnQsIGNvdW50KTsKKwkJbWVtY3B5X3RvaW8oc2tiLT5kYXRhICsgc2VtaV9jb3VudCwKKwkJCSAgICAoY2hhciAqKWVpX3N0YXR1cy5ybWVtX3N0YXJ0LCBjb3VudCk7CiAJfSBlbHNlIHsKLQkJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsIGNvdW50KTsKKwkJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsCisJCQkgICAgICBjb3VudCk7CiAJfQogfQogCkBAIC03NTUsMTYgKzc2OCwxOCBAQAogfQogCiAvKiBkYXluYSBibG9jayBpbnB1dC9vdXRwdXQgKi8KLXN0YXRpYyB2b2lkIGRheW5hX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZTgzOTBfcGt0X2hkciAqaGRyLCBpbnQgcmluZ19wYWdlKQorc3RhdGljIHZvaWQgZGF5bmFfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwgaW50IHJpbmdfcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIGhkcl9zdGFydCA9IChyaW5nX3BhZ2UgLSBXRF9TVEFSVF9QRyk8PDg7CiAKLQlkYXluYV9tZW1jcHlfZnJvbWNhcmQoZGV2LCAodm9pZCAqKWhkciwgaGRyX3N0YXJ0LCA0KTsKKwlkYXluYV9tZW1jcHlfZnJvbWNhcmQoZGV2LCBoZHIsIGhkcl9zdGFydCwgNCk7CiAJLyogRml4IGVuZGlhbm5lc3MgKi8KLQloZHItPmNvdW50PShoZHItPmNvdW50JjB4RkYpPDw4fChoZHItPmNvdW50Pj44KTsKKwloZHItPmNvdW50ID0gKGhkci0+Y291bnQgJiAweEZGKSA8PCA4IHwgKGhkci0+Y291bnQgPj4gOCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRheW5hX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJpbmdfb2Zmc2V0KQorc3RhdGljIHZvaWQgZGF5bmFfYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJpbmdfb2Zmc2V0KQogewogCXVuc2lnbmVkIGxvbmcgeGZlcl9iYXNlID0gcmluZ19vZmZzZXQgLSAoV0RfU1RBUlRfUEc8PDgpOwogCXVuc2lnbmVkIGxvbmcgeGZlcl9zdGFydCA9IHhmZXJfYmFzZStkZXYtPm1lbV9zdGFydDsKQEAgLTc3Miw4ICs3ODcsNyBAQAogCS8qIE5vdGUgdGhlIG9mZnNldCBtYXRoIGlzIGRvbmUgaW4gY2FyZCBtZW1vcnkgc3BhY2Ugd2hpY2ggaXMgd29yZAogCSAgIHBlciBsb25nIG9udG8gb3VyIHNwYWNlLiAqLwogCi0JaWYgKHhmZXJfc3RhcnQgKyBjb3VudCA+IGVpX3N0YXR1cy5ybWVtX2VuZCkKLQl7CisJaWYgKHhmZXJfc3RhcnQgKyBjb3VudCA+IGVpX3N0YXR1cy5ybWVtX2VuZCkgewogCQkvKiBXZSBtdXN0IHdyYXAgdGhlIGlucHV0IG1vdmUuICovCiAJCWludCBzZW1pX2NvdW50ID0gZWlfc3RhdHVzLnJtZW1fZW5kIC0geGZlcl9zdGFydDsKIAkJZGF5bmFfbWVtY3B5X2Zyb21jYXJkKGRldiwgc2tiLT5kYXRhLCB4ZmVyX2Jhc2UsIHNlbWlfY291bnQpOwpAQCAtNzgxLDE1ICs3OTUsMTQgQEAKIAkJZGF5bmFfbWVtY3B5X2Zyb21jYXJkKGRldiwgc2tiLT5kYXRhICsgc2VtaV9jb3VudCwKIAkJCQkgICAgICBlaV9zdGF0dXMucm1lbV9zdGFydCAtIGRldi0+bWVtX3N0YXJ0LAogCQkJCSAgICAgIGNvdW50KTsKLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQlkYXluYV9tZW1jcHlfZnJvbWNhcmQoZGV2LCBza2ItPmRhdGEsIHhmZXJfYmFzZSwgY291bnQpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZGF5bmFfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCWludCBzdGFydF9wYWdlKQorc3RhdGljIHZvaWQgZGF5bmFfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICAgICAgaW50IHN0YXJ0X3BhZ2UpCiB7CiAJbG9uZyBzaG1lbSA9IChzdGFydF9wYWdlIC0gV0RfU1RBUlRfUEcpPDw4OwogCkBAIC03OTcsNDAgKzgxMCwzOSBAQAogfQogCiAvKiBDYWJsZXRyb24gYmxvY2sgSS9PICovCi1zdGF0aWMgdm9pZCBzbG93X3NhbmVfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsCi0JaW50IHJpbmdfcGFnZSkKK3N0YXRpYyB2b2lkIHNsb3dfc2FuZV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZTgzOTBfcGt0X2hkciAqaGRyLAorCQkJCSAgIGludCByaW5nX3BhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBoZHJfc3RhcnQgPSAocmluZ19wYWdlIC0gV0RfU1RBUlRfUEcpPDw4OwotCXdvcmRfbWVtY3B5X2Zyb21jYXJkKCh2b2lkICopaGRyLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0K2hkcl9zdGFydCwgNCk7CisJd29yZF9tZW1jcHlfZnJvbWNhcmQoaGRyLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgaGRyX3N0YXJ0LCA0KTsKIAkvKiBSZWdpc3RlciBlbmRpYW5pc20gLSBmaXggaGVyZSByYXRoZXIgdGhhbiA4MzkwLmMgKi8KIAloZHItPmNvdW50ID0gKGhkci0+Y291bnQmMHhGRik8PDh8KGhkci0+Y291bnQ+PjgpOwogfQogCi1zdGF0aWMgdm9pZCBzbG93X3NhbmVfYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCWludCByaW5nX29mZnNldCkKK3N0YXRpYyB2b2lkIHNsb3dfc2FuZV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCisJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyB4ZmVyX2Jhc2UgPSByaW5nX29mZnNldCAtIChXRF9TVEFSVF9QRzw8OCk7CiAJdW5zaWduZWQgbG9uZyB4ZmVyX3N0YXJ0ID0geGZlcl9iYXNlK2Rldi0+bWVtX3N0YXJ0OwogCi0JaWYgKHhmZXJfc3RhcnQgKyBjb3VudCA+IGVpX3N0YXR1cy5ybWVtX2VuZCkKLQl7CisJaWYgKHhmZXJfc3RhcnQgKyBjb3VudCA+IGVpX3N0YXR1cy5ybWVtX2VuZCkgewogCQkvKiBXZSBtdXN0IHdyYXAgdGhlIGlucHV0IG1vdmUuICovCiAJCWludCBzZW1pX2NvdW50ID0gZWlfc3RhdHVzLnJtZW1fZW5kIC0geGZlcl9zdGFydDsKLQkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsKLQkJCXhmZXJfYmFzZSwgc2VtaV9jb3VudCk7CisJCXdvcmRfbWVtY3B5X2Zyb21jYXJkKHNrYi0+ZGF0YSwKKwkJCQkgICAgIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsCisJCQkJICAgICBzZW1pX2NvdW50KTsKIAkJY291bnQgLT0gc2VtaV9jb3VudDsKIAkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhICsgc2VtaV9jb3VudCwKIAkJCQkgICAgIChjaGFyICopZWlfc3RhdHVzLnJtZW1fc3RhcnQsIGNvdW50KTsKLQl9Ci0JZWxzZQotCXsKLQkJd29yZF9tZW1jcHlfZnJvbWNhcmQoc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsKLQkJCXhmZXJfYmFzZSwgY291bnQpOworCX0gZWxzZSB7CisJCXdvcmRfbWVtY3B5X2Zyb21jYXJkKHNrYi0+ZGF0YSwKKwkJCQkgICAgIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsIGNvdW50KTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3dfc2FuZV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCi0JaW50IHN0YXJ0X3BhZ2UpCitzdGF0aWMgdm9pZCBzbG93X3NhbmVfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzdGFydF9wYWdlKQogewogCWxvbmcgc2htZW0gPSAoc3RhcnRfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKIApAQCAtODQzLDEwICs4NTUsMTAgQEAKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqZnJvbSA9IGZwOwogCiAJY291bnQrKzsKLQljb3VudC89MjsKKwljb3VudCAvPSAyOwogCi0Jd2hpbGUoY291bnQtLSkKLQkJKnRvKys9KmZyb20rKzsKKwl3aGlsZSAoY291bnQtLSkKKwkJKnRvKysgPSAqZnJvbSsrOwogfQogCiBzdGF0aWMgdm9pZCB3b3JkX21lbWNweV9mcm9tY2FyZCh2b2lkICp0cCwgY29uc3Qgdm9pZCAqZnAsIGludCBjb3VudCkKQEAgLTg1NSwxMCArODY3LDEwIEBACiAJY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmZyb20gPSBmcDsKIAogCWNvdW50Kys7Ci0JY291bnQvPTI7CisJY291bnQgLz0gMjsKIAotCXdoaWxlKGNvdW50LS0pCi0JCSp0bysrPSpmcm9tKys7CisJd2hpbGUgKGNvdW50LS0pCisJCSp0bysrID0gKmZyb20rKzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2FsbG9jLmMgYi9kcml2ZXJzL25ldC9tbHg0L2FsbG9jLmMKaW5kZXggYWQ5NWQ1Zi4uOGM4NTE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9hbGxvYy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvYWxsb2MuYwpAQCAtNzIsMzUgKzcyLDYgQEAKIAltbHg0X2JpdG1hcF9mcmVlX3JhbmdlKGJpdG1hcCwgb2JqLCAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9hbGlnbmVkX3JhbmdlKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKLQkJCQkJdTMyIHN0YXJ0LCB1MzIgbmJpdHMsCi0JCQkJCWludCBsZW4sIGludCBhbGlnbikKLXsKLQl1bnNpZ25lZCBsb25nIGVuZCwgaTsKLQotYWdhaW46Ci0Jc3RhcnQgPSBBTElHTihzdGFydCwgYWxpZ24pOwotCi0Jd2hpbGUgKChzdGFydCA8IG5iaXRzKSAmJiB0ZXN0X2JpdChzdGFydCwgYml0bWFwKSkKLQkJc3RhcnQgKz0gYWxpZ247Ci0KLQlpZiAoc3RhcnQgPj0gbmJpdHMpCi0JCXJldHVybiAtMTsKLQotCWVuZCA9IHN0YXJ0K2xlbjsKLQlpZiAoZW5kID4gbmJpdHMpCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IHN0YXJ0ICsgMTsgaSA8IGVuZDsgaSsrKSB7Ci0JCWlmICh0ZXN0X2JpdChpLCBiaXRtYXApKSB7Ci0JCQlzdGFydCA9IGkgKyAxOwotCQkJZ290byBhZ2FpbjsKLQkJfQotCX0KLQotCXJldHVybiBzdGFydDsKLX0KLQogdTMyIG1seDRfYml0bWFwX2FsbG9jX3JhbmdlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCBpbnQgY250LCBpbnQgYWxpZ24pCiB7CiAJdTMyIG9iaiwgaTsKQEAgLTExMCwxMyArODEsMTMgQEAKIAogCXNwaW5fbG9jaygmYml0bWFwLT5sb2NrKTsKIAotCW9iaiA9IGZpbmRfYWxpZ25lZF9yYW5nZShiaXRtYXAtPnRhYmxlLCBiaXRtYXAtPmxhc3QsCi0JCQkJIGJpdG1hcC0+bWF4LCBjbnQsIGFsaWduKTsKKwlvYmogPSBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJlYShiaXRtYXAtPnRhYmxlLCBiaXRtYXAtPm1heCwKKwkJCQliaXRtYXAtPmxhc3QsIGNudCwgYWxpZ24gLSAxKTsKIAlpZiAob2JqID49IGJpdG1hcC0+bWF4KSB7CiAJCWJpdG1hcC0+dG9wID0gKGJpdG1hcC0+dG9wICsgYml0bWFwLT5tYXggKyBiaXRtYXAtPnJlc2VydmVkX3RvcCkKIAkJCQkmIGJpdG1hcC0+bWFzazsKLQkJb2JqID0gZmluZF9hbGlnbmVkX3JhbmdlKGJpdG1hcC0+dGFibGUsIDAsIGJpdG1hcC0+bWF4LAotCQkJCQkgY250LCBhbGlnbik7CisJCW9iaiA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGJpdG1hcC0+dGFibGUsIGJpdG1hcC0+bWF4LAorCQkJCQkJMCwgY250LCBhbGlnbiAtIDEpOwogCX0KIAogCWlmIChvYmogPCBiaXRtYXAtPm1heCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCmluZGV4IDNjMTY2MDIuLjA0ZjQyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZncuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKQEAgLTkwLDYgKzkwLDcgQEAKIAkJWyA5XSA9ICJRX0tleSB2aW9sYXRpb24gY291bnRlciIsCiAJCVsxMF0gPSAiVk1NIiwKIAkJWzEyXSA9ICJEUERQIiwKKwkJWzE1XSA9ICJCaWcgTFNPIGhlYWRlcnMiLAogCQlbMTZdID0gIk1XIHN1cHBvcnQiLAogCQlbMTddID0gIkFQTSBzdXBwb3J0IiwKIAkJWzE4XSA9ICJBdG9taWMgb3BzIHN1cHBvcnQiLApAQCAtMjM1LDcgKzIzNiw3IEBACiAJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfTVBUX09GRlNFVCk7CiAJZGV2X2NhcC0+bWF4X21wdHMgPSAxIDw8IChmaWVsZCAmIDB4M2YpOwogCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUlNWRF9FUV9PRkZTRVQpOwotCWRldl9jYXAtPnJlc2VydmVkX2VxcyA9IDEgPDwgKGZpZWxkICYgMHhmKTsKKwlkZXZfY2FwLT5yZXNlcnZlZF9lcXMgPSBmaWVsZCAmIDB4ZjsKIAlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX01BWF9FUV9PRkZTRVQpOwogCWRldl9jYXAtPm1heF9lcXMgPSAxIDw8IChmaWVsZCAmIDB4Zik7CiAJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9SU1ZEX01UVF9PRkZTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCAyOTFhNTA1Li41OGY3Zjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIAlyZXR1cm4gX19tbHg0X2luaXRfb25lKHBkZXYsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWx4NF9wY2lfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtbHg0X3BjaV90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzQwKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFNEUiAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM0YSkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBERFIgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNTQpIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgUURSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwppbmRleCAzZmNiMWMzLi5jMDg4NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKQEAgLTQwODUsNyArNDA4NSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlSSUNPTV9NWVJJMTBHRV9aOEUgCTB4MDAwOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZUklDT01fTVlSSTEwR0VfWjhFXzkJMHgwMDA5CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBteXJpMTBnZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobXlyaTEwZ2VfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NWVJJQ09NLCBQQ0lfREVWSUNFX0lEX01ZUklDT01fTVlSSTEwR0VfWjhFKX0sCiAJe1BDSV9ERVZJQ0UKIAkgKFBDSV9WRU5ET1JfSURfTVlSSUNPTSwgUENJX0RFVklDRV9JRF9NWVJJQ09NX01ZUkkxMEdFX1o4RV85KX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCmluZGV4IGIzNTEzYWQuLjhiNDMxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCkBAIC03MTYsMTAgKzcxNiwxMCBAQAogCXBhZFswXSA9IE1ZUklfUEFEX0xFTjsKIAlwYWRbMV0gPSAweGFiOwogCi0JLyogU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMyB3ZSBwdXQgdGhlIGxlbmd0aAotCSAqIGluIGhlcmUgaW5zdGVhZC4gSXQgaXMgdXAgdG8gdGhlIDgwMi4yIGxheWVyIHRvIGNhcnJ5IHByb3RvY29sIGluZm9ybWF0aW9uLgorCS8qIFNldCB0aGUgcHJvdG9jb2wgdHlwZS4gRm9yIGEgcGFja2V0IG9mIHR5cGUgRVRIX1BfODAyXzMvMiB3ZSBwdXQgdGhlCisJICogbGVuZ3RoIGluIGhlcmUgaW5zdGVhZC4KIAkgKi8KLQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykKKwlpZiAodHlwZSAhPSBFVEhfUF84MDJfMyAmJiB0eXBlICE9IEVUSF9QXzgwMl8yKQogCQlldGgtPmhfcHJvdG8gPSBodG9ucyh0eXBlKTsKIAllbHNlCiAJCWV0aC0+aF9wcm90byA9IGh0b25zKGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggNzk3ZmUxNi4uMmQ3YjNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJeyAiTmF0U2VtaSBEUDgzODFbNTZdIiwgMCwgMjQgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuYXRzZW1pX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5hdHNlbWlfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX05TLCAweDAwMjAsIDB4MTJkOSwgICAgIDB4MDAwYywgICAgIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlMsIDB4MDAyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKaW5kZXggM2ZjZWJiNy4uODVhZWM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYworKysgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5lMmtfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5lMmtfcGNpX3RibCkgPSB7CiAJeyAweDEwZWMsIDB4ODAyOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfUmVhbFRla19SVExfODAyOSB9LAogCXsgMHgxMDUwLCAweDA5NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX1dpbmJvbmRfODlDOTQwIH0sCiAJeyAweDExZjYsIDB4MTQwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfQ29tcGV4X1JMMjAwMCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggOWJjNWJkMWQuLjgyNjRhZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtNDIwLDcgKzQyMCw3IEBACiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpOwogCiAvKiBVTklGSUVEIFJPTUlNQUdFICoqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE5YX1VOSV9GV19NSU5fU0laRQkJMHgzZWIwMDAKKyNkZWZpbmUgTlhfVU5JX0ZXX01JTl9TSVpFCQkweGM4MDAwCiAjZGVmaW5lIE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTAkweDAKICNkZWZpbmUgTlhfVU5JX0RJUl9TRUNUX0JPT1RMRAkJMHg2CiAjZGVmaW5lIE5YX1VOSV9ESVJfU0VDVF9GVwkJMHg3CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGQxMzhmYzIuLjYzODM2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC05NjksNyArOTY5LDggQEAKICNkZWZpbmUgTlhfREVWX1JFQURZCQkzCiAjZGVmaW5lIE5YX0RFVl9ORUVEX1JFU0VUCTQKICNkZWZpbmUgTlhfREVWX05FRURfUVVJU0NFTlQJNQotI2RlZmluZSBOWF9ERVZfRkFJTEVECQk2CisjZGVmaW5lIE5YX0RFVl9ORUVEX0FFUiAJNgorI2RlZmluZSBOWF9ERVZfRkFJTEVECQk3CiAKICNkZWZpbmUgTlhfUkNPREVfRFJJVkVSX0lORk8JCTB4MjAwMDAwMDAKICNkZWZpbmUgTlhfUkNPREVfRFJJVkVSX0NBTl9SRUxPQUQJMHg0MDAwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDY0Y2ZmNjguLjMzM2JkMzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCkBAIC03ODAsNiArNzgwLDkgQEAKIAlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJcmV0dXJuIDE7CiAKKwlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJcmV0dXJuIDE7CisKIAkvKiBsYXN0IGF0dGVtcHQgaGFkIGZhaWxlZCAqLwogCWlmIChOWFJEMzIoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkgPT0gUEhBTl9JTklUSUFMSVpFX0ZBSUxFRCkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggOWY5ZDYwOC4uZGVmNGEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMvTmV0WGVuICgxLzEwKSBHYkUgQ29udmVyZ2VkIEV0aGVybmV0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtODQsNiArODUsNyBAQAogc3RhdGljIHZvaWQgbmV0eGVuX2NyZWF0ZV9kaWFnX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIG5ldHhlbl9yZW1vdmVfZGlhZ19lbnRyaWVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKK3N0YXRpYyBpbnQgbnhfZGV2X3JlcXVlc3RfYWVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgaW50IG54X2RlY3JfZGV2X3JlZl9jbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbnQgbmV0eGVuX2Nhbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCkBAIC05OCw3ICsxMDAsNyBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTkVUWEVOLCAoZGV2aWNlKSksIFwKIAkuY2xhc3MgPSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4LCAuY2xhc3NfbWFzayA9IH4wfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmV0eGVuX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5ldHhlbl9wY2lfdGJsKSA9IHsKIAlFTlRSWShQQ0lfREVWSUNFX0lEX05YMjAzMV8xMEdYU1IpLAogCUVOVFJZKFBDSV9ERVZJQ0VfSURfTlgyMDMxXzEwR0NYNCksCiAJRU5UUlkoUENJX0RFVklDRV9JRF9OWDIwMzFfNEdDVSksCkBAIC0xMjYyLDYgKzEyNjQsOSBAQAogCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKSkpCiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMocGRldi0+cmV2aXNpb24pKQorCQlwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyKSk7CkBAIC0xNDA5LDE3ICsxNDE0LDE5IEBACiAKIAluZXR4ZW5fcmVsZWFzZV9maXJtd2FyZShhZGFwdGVyKTsKIAorCWlmIChOWF9JU19SRVZJU0lPTl9QMyhwZGV2LT5yZXZpc2lvbikpCisJCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIH0KLXN0YXRpYyBpbnQgX19uZXR4ZW5fbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorCitzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2RldGFjaF9mdW5jKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlpbnQgcmV0dmFsOwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCkBAIC0xNDM4LDUzICsxNDQ1LDIyIEBACiAJbnhfZGVjcl9kZXZfcmVmX2NudChhZGFwdGVyKTsKIAogCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQotCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JfQotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCWlmIChfX25ldHhlbl9uaWNfc2h1dGRvd24ocGRldikpCi0JCXJldHVybjsKLX0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQKLW5ldHhlbl9uaWNfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBfX25ldHhlbl9uaWNfc2h1dGRvd24ocGRldik7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1uZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19hdHRhY2hfZnVuYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpbnQgZXJyOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwogCWFkYXB0ZXItPmFody5jcmJfd2luID0gLTE7CiAJYWRhcHRlci0+YWh3Lm9jbV93aW4gPSAtMTsKIApAQCAtMTUwMywxMSArMTQ3OSwxMCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X2RldGFjaDsKIAotCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7Ci0KIAkJbmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX1VQKTsKIAl9CiAKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7CiAJcmV0dXJuIDA7CiAKQEAgLTE1MTcsNiArMTQ5Miw4NSBAQAogCW54X2RlY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CiAJcmV0dXJuIGVycjsKIH0KKworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgbmV0eGVuX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKworCWlmIChueF9kZXZfcmVxdWVzdF9hZXIoYWRhcHRlcikpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisKKwluZXR4ZW5fbmljX2RldGFjaF9mdW5jKGFkYXB0ZXIpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5ldHhlbl9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gbmV0eGVuX25pY19hdHRhY2hfZnVuYyhwZGV2KTsKKworCXJldHVybiBlcnIgPyBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUIDogUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCitzdGF0aWMgdm9pZCBuZXR4ZW5faW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOworfQorCitzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW5ldHhlbl9uaWNfZGV0YWNoX2Z1bmMoYWRhcHRlcik7CisKKwlpZiAocGNpX3NhdmVfc3RhdGUocGRldikpCisJCXJldHVybjsKKworCWlmIChuZXR4ZW5fbmljX3dvbF9zdXBwb3J0ZWQoYWRhcHRlcikpIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKKwl9CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0dmFsOworCisJbmV0eGVuX25pY19kZXRhY2hfZnVuYyhhZGFwdGVyKTsKKworCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiBuZXR4ZW5fbmljX2F0dGFjaF9mdW5jKHBkZXYpOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0yMTA0LDIwICsyMTU4LDQ5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgdm9pZAotbnhfZGV2X3JlcXVlc3RfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludAorbnhfZGV2X3JlcXVlc3RfYWVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgc3RhdGU7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAKIAlzdGF0ZSA9IE5YUkQzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFKTsKIAotCWlmIChzdGF0ZSAhPSBOWF9ERVZfSU5JVEFMSVpJTkcpCi0JCU5YV1IzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFLCBOWF9ERVZfTkVFRF9SRVNFVCk7CisJaWYgKHN0YXRlID09IE5YX0RFVl9ORUVEX0FFUikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChzdGF0ZSA9PSBOWF9ERVZfUkVBRFkpIHsKKwkJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUsIE5YX0RFVl9ORUVEX0FFUik7CisJCXJldCA9IDA7CisJfQogCiAJbmV0eGVuX2FwaV91bmxvY2soYWRhcHRlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorbnhfZGV2X3JlcXVlc3RfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0ZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChuZXR4ZW5fYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiByZXQ7CisKKwlzdGF0ZSA9IE5YUkQzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFKTsKKworCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9SRVNFVCkKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChzdGF0ZSAhPSBOWF9ERVZfSU5JVEFMSVpJTkcgJiYgc3RhdGUgIT0gTlhfREVWX05FRURfQUVSKSB7CisJCU5YV1IzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFLCBOWF9ERVZfTkVFRF9SRVNFVCk7CisJCXJldCA9IDA7CisJfQorCisJbmV0eGVuX2FwaV91bmxvY2soYWRhcHRlcik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CkBAIC0yMjY5LDE3ICsyMzUyLDI5IEBACiAJdTMyIHN0YXRlLCBoZWFydGJpdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCisJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CisJaWYgKHN0YXRlID09IE5YX0RFVl9ORUVEX0FFUikKKwkJcmV0dXJuIDA7CisKIAlpZiAobmV0eGVuX25pY19jaGVja190ZW1wKGFkYXB0ZXIpKQogCQlnb3RvIGRldGFjaDsKIAogCWlmIChhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0KSB7Ci0JCW54X2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpOworCQlpZiAobnhfZGV2X3JlcXVlc3RfcmVzZXQoYWRhcHRlcikpCisJCQlyZXR1cm4gMDsKIAkJZ290byBkZXRhY2g7CiAJfQogCi0Jc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7Ci0JaWYgKHN0YXRlID09IE5YX0RFVl9ORUVEX1JFU0VUKQotCQlnb3RvIGRldGFjaDsKKwkvKiBOWF9ERVZfTkVFRF9SRVNFVCwgdGhpcyBzdGF0ZSBjYW4gYmUgbWFya2VkIGluIHR3byBjYXNlcworCSAqIDEuIFR4IHRpbWVvdXQgMi4gRncgaGFuZworCSAqIFNlbmQgcmVxdWVzdCB0byBkZXN0cm95IGNvbnRleHQgaW4gY2FzZSBvZiB0eCB0aW1lb3V0IG9ubHkKKwkgKiBhbmQgZG9lc24ndCByZXF1aXJlZCBpbiBjYXNlIG9mIEZ3IGhhbmcKKwkgKi8KKwlpZiAoc3RhdGUgPT0gTlhfREVWX05FRURfUkVTRVQpIHsKKwkJYWRhcHRlci0+bmVlZF9md19yZXNldCA9IDE7CisJCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQkJZ290byBkZXRhY2g7CisJfQogCiAJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCXJldHVybiAwOwpAQCAtMjI4OCwxMiArMjM4MywxNyBAQAogCWlmIChoZWFydGJpdCAhPSBhZGFwdGVyLT5oZWFydGJpdCkgewogCQlhZGFwdGVyLT5oZWFydGJpdCA9IGhlYXJ0Yml0OwogCQlhZGFwdGVyLT5md19mYWlsX2NudCA9IDA7CisJCWlmIChhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0KQorCQkJZ290byBkZXRhY2g7CiAJCXJldHVybiAwOwogCX0KIAogCWlmICgrK2FkYXB0ZXItPmZ3X2ZhaWxfY250IDwgRldfRkFJTF9USFJFU0gpCiAJCXJldHVybiAwOwogCisJaWYgKG54X2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpKQorCQlyZXR1cm4gMDsKKwogCWNsZWFyX2JpdChfX05YX0ZXX0FUVEFDSEVELCAmYWRhcHRlci0+c3RhdGUpOwogCiAJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiZmlybXdhcmUgaGFuZyBkZXRlY3RlZFxuIik7CkBAIC0yNzIzLDYgKzI4MjMsMTIgQEAKIHsgfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIG5ldHhlbl9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBuZXR4ZW5faW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBuZXR4ZW5faW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbmV0eGVuX2lvX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXR4ZW5fZHJpdmVyID0gewogCS5uYW1lID0gbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBuZXR4ZW5fcGNpX3RibCwKQEAgLTI3MzIsNyArMjgzOCw4IEBACiAJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lLAogI2VuZGlmCi0JLnNodXRkb3duID0gbmV0eGVuX25pY19zaHV0ZG93bgorCS5zaHV0ZG93biA9IG5ldHhlbl9uaWNfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJm5ldHhlbl9lcnJfaGFuZGxlcgogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IDJhZWQyYjMuLjBlMjYwY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC01OCw3ICs1OCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5pdV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobml1X3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1VOLCAweGFiY2QpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCAxZjYzMjdkLi5hM2I2YWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0yMjkyLDcgKzIyOTIsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5zODM4MjBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5zODM4MjBfcGNpX3RibCkgPSB7CiAJeyAweDEwMGIsIDB4MDAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgLmRyaXZlcl9kYXRhID0gMCwgfSwKIAl7IDAsIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb2N0ZW9uL0tjb25maWcgYi9kcml2ZXJzL25ldC9vY3Rlb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU2YmJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvb2N0ZW9uL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIE9DVEVPTl9NR01UX0VUSEVSTkVUCisJdHJpc3RhdGUgIk9jdGVvbiBNYW5hZ2VtZW50IHBvcnQgZXRoZXJuZXQgZHJpdmVyIChDTjVYWFgsIENONlhYWCkiCisJZGVwZW5kcyBvbiAgQ1BVX0NBVklVTV9PQ1RFT04KKwlzZWxlY3QgUEhZTElCCisJc2VsZWN0IE1ESU9fT0NURU9OCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgbWFuYWdlbWVudAorCSAgcG9ydCBvbiBDYXZpdW0gTmV0d29ya3MnIE9jdGVvbiBDTjU3WFgsIENONTZYWCwgQ041NVhYLAorCSAgQ041NFhYLCBDTjUyWFgsIGFuZCBDTjZYWFggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vY3Rlb24vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9vY3Rlb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZWRlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9vY3Rlb24vTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACisKK29iai0kKENPTkZJR19PQ1RFT05fTUdNVF9FVEhFUk5FVCkJKz0gb2N0ZW9uX21nbXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMgYi9kcml2ZXJzL25ldC9vY3Rlb24vb2N0ZW9uX21nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ4Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKQEAgLTAsMCArMSwxMTczIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IENhdml1bSBOZXR3b3JrcworICovCisKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisjaW5jbHVkZSA8YXNtL29jdGVvbi9jdm14LW1peHgtZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1hZ2wtZGVmcy5oPgorCisjZGVmaW5lIERSVl9OQU1FICJvY3Rlb25fbWdtdCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMCIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OIFwKKwkiQ2F2aXVtIE5ldHdvcmtzIE9jdGVvbiBNSUkgKG1hbmFnZW1lbnQpIHBvcnQgTmV0d29yayBEcml2ZXIiCisKKyNkZWZpbmUgT0NURU9OX01HTVRfTkFQSV9XRUlHSFQgMTYKKworLyoKKyAqIFJpbmcgc2l6ZXMgdGhhdCBhcmUgcG93ZXJzIG9mIHR3byBhbGxvdyBmb3IgbW9yZSBlZmZpY2llbnQgbW9kdWxvCisgKiBvcGVydGlvbnMuCisgKi8KKyNkZWZpbmUgT0NURU9OX01HTVRfUlhfUklOR19TSVpFIDUxMgorI2RlZmluZSBPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUgMTI4CisKKy8qIEFsbG93IDggYnl0ZXMgZm9yIHZsYW4gYW5kIEZDUy4gKi8KKyNkZWZpbmUgT0NURU9OX01HTVRfUlhfSEVBRFJPT00gKEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU4pCisKK3VuaW9uIG1nbXRfcG9ydF9yaW5nX2VudHJ5IHsKKwl1NjQgZDY0OworCXN0cnVjdCB7CisJCXU2NCAgICByZXNlcnZlZF82Ml82MzoyOworCQkvKiBMZW5ndGggb2YgdGhlIGJ1ZmZlci9wYWNrZXQgaW4gYnl0ZXMgKi8KKwkJdTY0ICAgIGxlbjoxNDsKKwkJLyogRm9yIFRYLCBzaWduYWxzIHRoYXQgdGhlIHBhY2tldCBzaG91bGQgYmUgdGltZXN0YW1wZWQgKi8KKwkJdTY0ICAgIHRzdGFtcDoxOworCQkvKiBUaGUgUlggZXJyb3IgY29kZSAqLworCQl1NjQgICAgY29kZTo3OworI2RlZmluZSBSSU5HX0VOVFJZX0NPREVfRE9ORSAweGYKKyNkZWZpbmUgUklOR19FTlRSWV9DT0RFX01PUkUgMHgxMAorCQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgKi8KKwkJdTY0ICAgIGFkZHI6NDA7CisJfSBzOworfTsKKworc3RydWN0IG9jdGVvbl9tZ210IHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCBwb3J0OworCWludCBpcnE7CisJdTY0ICp0eF9yaW5nOworCWRtYV9hZGRyX3QgdHhfcmluZ19oYW5kbGU7CisJdW5zaWduZWQgaW50IHR4X25leHQ7CisJdW5zaWduZWQgaW50IHR4X25leHRfY2xlYW47CisJdW5zaWduZWQgaW50IHR4X2N1cnJlbnRfZmlsbDsKKwkvKiBUaGUgdHhfbGlzdCBsb2NrIGFsc28gcHJvdGVjdHMgdGhlIHJpbmcgcmVsYXRlZCB2YXJpYWJsZXMgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X2xpc3Q7CisKKwkvKiBSWCB2YXJpYWJsZXMgb25seSB0b3VjaGVkIGluIG5hcGlfcG9sbC4gIE5vIGxvY2tpbmcgbmVjZXNzYXJ5LiAqLworCXU2NCAqcnhfcmluZzsKKwlkbWFfYWRkcl90IHJ4X3JpbmdfaGFuZGxlOworCXVuc2lnbmVkIGludCByeF9uZXh0OworCXVuc2lnbmVkIGludCByeF9uZXh0X2ZpbGw7CisJdW5zaWduZWQgaW50IHJ4X2N1cnJlbnRfZmlsbDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X2xpc3Q7CisKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IGxhc3RfZHVwbGV4OworCXVuc2lnbmVkIGludCBsYXN0X2xpbms7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF9jbGVhbl90YXNrbGV0OworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Cit9OworCitzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF9zZXRfcnhfaXJxKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJdW5pb24gY3ZteF9taXh4X2ludGVuYSBtaXhfaW50ZW5hOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCW1peF9pbnRlbmEudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSU5URU5BKHBvcnQpKTsKKwltaXhfaW50ZW5hLnMuaXRoZW5hID0gZW5hYmxlID8gMSA6IDA7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0lOVEVOQShwb3J0KSwgbWl4X2ludGVuYS51NjQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfc2V0X3R4X2lycShzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAsIGludCBlbmFibGUpCit7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIGN2bXhfbWl4eF9pbnRlbmEgbWl4X2ludGVuYTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwltaXhfaW50ZW5hLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9NSVhYX0lOVEVOQShwb3J0KSk7CisJbWl4X2ludGVuYS5zLm90aGVuYSA9IGVuYWJsZSA/IDEgOiAwOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9JTlRFTkEocG9ydCksIG1peF9pbnRlbmEudTY0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fbWdtdF9lbmFibGVfcnhfaXJxKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCkKK3sKKwlvY3Rlb25fbWdtdF9zZXRfcnhfaXJxKHAsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX21nbXRfZGlzYWJsZV9yeF9pcnEoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCW9jdGVvbl9tZ210X3NldF9yeF9pcnEocCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fbWdtdF9lbmFibGVfdHhfaXJxKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCkKK3sKKwlvY3Rlb25fbWdtdF9zZXRfdHhfaXJxKHAsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX21nbXRfZGlzYWJsZV90eF9pcnEoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCW9jdGVvbl9tZ210X3NldF90eF9pcnEocCwgMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmluZ19tYXhfZmlsbCh1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCXJldHVybiByaW5nX3NpemUgLSA4OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJpbmdfc2l6ZV90b19ieXRlcyh1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCXJldHVybiByaW5nX3NpemUgKiBzaXplb2YodW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF9yeF9maWxsX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKworCXdoaWxlIChwLT5yeF9jdXJyZW50X2ZpbGwgPCByaW5nX21heF9maWxsKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSkpIHsKKwkJdW5zaWduZWQgaW50IHNpemU7CisJCXVuaW9uIG1nbXRfcG9ydF9yaW5nX2VudHJ5IHJlOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJCS8qIENONTZYWCBwYXNzIDEgbmVlZHMgOCBieXRlcyBvZiBwYWRkaW5nLiAgKi8KKwkJc2l6ZSA9IG5ldGRldi0+bXR1ICsgT0NURU9OX01HTVRfUlhfSEVBRFJPT00gKyA4ICsgTkVUX0lQX0FMSUdOOworCisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBzaXplKTsKKwkJaWYgKCFza2IpCisJCQlicmVhazsKKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQlfX3NrYl9xdWV1ZV90YWlsKCZwLT5yeF9saXN0LCBza2IpOworCisJCXJlLmQ2NCA9IDA7CisJCXJlLnMubGVuID0gc2l6ZTsKKwkJcmUucy5hZGRyID0gZG1hX21hcF9zaW5nbGUocC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgIHNpemUsCisJCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogUHV0IGl0IGluIHRoZSByaW5nLiAgKi8KKwkJcC0+cnhfcmluZ1twLT5yeF9uZXh0X2ZpbGxdID0gcmUuZDY0OworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwLT5kZXYsIHAtPnJ4X3JpbmdfaGFuZGxlLAorCQkJCQkgICByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfUlhfUklOR19TSVpFKSwKKwkJCQkJICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQlwLT5yeF9uZXh0X2ZpbGwgPQorCQkJKHAtPnJ4X25leHRfZmlsbCArIDEpICUgT0NURU9OX01HTVRfUlhfUklOR19TSVpFOworCQlwLT5yeF9jdXJyZW50X2ZpbGwrKzsKKwkJLyogUmluZyB0aGUgYmVsbC4gICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9JUklORzIocG9ydCksIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfY2xlYW5fdHhfYnVmZmVycyhzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnApCit7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIGN2bXhfbWl4eF9vcmNudCBtaXhfb3JjbnQ7CisJdW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkgcmU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgY2xlYW5lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1peF9vcmNudC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9PUkNOVChwb3J0KSk7CisJd2hpbGUgKG1peF9vcmNudC5zLm9yY250KSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHAtPmRldiwgcC0+dHhfcmluZ19oYW5kbGUsCisJCQkJCXJpbmdfc2l6ZV90b19ieXRlcyhPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUpLAorCQkJCQlETUFfQklESVJFQ1RJT05BTCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJCXJlLmQ2NCA9IHAtPnR4X3JpbmdbcC0+dHhfbmV4dF9jbGVhbl07CisJCXAtPnR4X25leHRfY2xlYW4gPQorCQkJKHAtPnR4X25leHRfY2xlYW4gKyAxKSAlIE9DVEVPTl9NR01UX1RYX1JJTkdfU0laRTsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmcC0+dHhfbGlzdCk7CisKKwkJbWl4X29yY250LnU2NCA9IDA7CisJCW1peF9vcmNudC5zLm9yY250ID0gMTsKKworCQkvKiBBY2tub3dsZWRnZSB0byBoYXJkd2FyZSB0aGF0IHdlIGhhdmUgdGhlIGJ1ZmZlci4gICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9PUkNOVChwb3J0KSwgbWl4X29yY250LnU2NCk7CisJCXAtPnR4X2N1cnJlbnRfZmlsbC0tOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJCWRtYV91bm1hcF9zaW5nbGUocC0+ZGV2LCByZS5zLmFkZHIsIHJlLnMubGVuLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJY2xlYW5lZCsrOworCisJCW1peF9vcmNudC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9PUkNOVChwb3J0KSk7CisJfQorCisJaWYgKGNsZWFuZWQgJiYgbmV0aWZfcXVldWVfc3RvcHBlZChwLT5uZXRkZXYpKQorCQluZXRpZl93YWtlX3F1ZXVlKHAtPm5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X2NsZWFuX3R4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gKHN0cnVjdCBvY3Rlb25fbWdtdCAqKWFyZzsKKwlvY3Rlb25fbWdtdF9jbGVhbl90eF9idWZmZXJzKHApOworCW9jdGVvbl9tZ210X2VuYWJsZV90eF9pcnEocCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IGRyb3AsIGJhZDsKKworCS8qIFRoZXNlIHJlYWRzIGFsc28gY2xlYXIgdGhlIGNvdW50IHJlZ2lzdGVycy4gICovCisJZHJvcCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19QS1RTX0RSUChwb3J0KSk7CisJYmFkID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfQkFEKHBvcnQpKTsKKworCWlmIChkcm9wIHx8IGJhZCkgeworCQkvKiBEbyBhbiBhdG9taWMgdXBkYXRlLiAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCQluZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycyArPSBiYWQ7CisJCW5ldGRldi0+c3RhdHMucnhfZHJvcHBlZCArPSBkcm9wOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF91cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdW5pb24gY3ZteF9hZ2xfZ214X3R4eF9zdGF0MCBzMDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQxIHMxOworCisJLyogVGhlc2UgcmVhZHMgYWxzbyBjbGVhciB0aGUgY291bnQgcmVnaXN0ZXJzLiAgKi8KKwlzMC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfQUdMX0dNWF9UWFhfU1RBVDAocG9ydCkpOworCXMxLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX1RYWF9TVEFUMShwb3J0KSk7CisKKwlpZiAoczAucy54c2RlZiB8fCBzMC5zLnhzY29sIHx8IHMxLnMuc2NvbCB8fCBzMS5zLm1jb2wpIHsKKwkJLyogRG8gYW4gYXRvbWljIHVwZGF0ZS4gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0gczAucy54c2RlZiArIHMwLnMueHNjb2w7CisJCW5ldGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBzMS5zLnNjb2wgKyBzMS5zLm1jb2w7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBEZXF1ZXVlIGEgcmVjZWl2ZSBza2IgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHJpbmcgZW50cnkuICBUaGUgcmluZworICogZW50cnkgaXMgcmV0dXJuZWQsICpwc2tiIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIHNrYi4KKyAqLworc3RhdGljIHU2NCBvY3Rlb25fbWdtdF9kZXF1ZXVlX3J4X2J1ZmZlcihzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAsCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCit7CisJdW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkgcmU7CisKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShwLT5kZXYsIHAtPnJ4X3JpbmdfaGFuZGxlLAorCQkJCXJpbmdfc2l6ZV90b19ieXRlcyhPQ1RFT05fTUdNVF9SWF9SSU5HX1NJWkUpLAorCQkJCURNQV9CSURJUkVDVElPTkFMKTsKKworCXJlLmQ2NCA9IHAtPnJ4X3JpbmdbcC0+cnhfbmV4dF07CisJcC0+cnhfbmV4dCA9IChwLT5yeF9uZXh0ICsgMSkgJSBPQ1RFT05fTUdNVF9SWF9SSU5HX1NJWkU7CisJcC0+cnhfY3VycmVudF9maWxsLS07CisJKnBza2IgPSBfX3NrYl9kZXF1ZXVlKCZwLT5yeF9saXN0KTsKKworCWRtYV91bm1hcF9zaW5nbGUocC0+ZGV2LCByZS5zLmFkZHIsCisJCQkgRVRIX0ZSQU1FX0xFTiArIE9DVEVPTl9NR01UX1JYX0hFQURST09NLAorCQkJIERNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gcmUuZDY0OworfQorCisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfcmVjZWl2ZV9vbmUoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCWludCBwb3J0ID0gcC0+cG9ydDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcC0+bmV0ZGV2OworCXVuaW9uIGN2bXhfbWl4eF9pcmNudCBtaXhfaXJjbnQ7CisJdW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkgcmU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldzsKKwl1bmlvbiBtZ210X3BvcnRfcmluZ19lbnRyeSByZTI7CisJaW50IHJjID0gMTsKKworCisJcmUuZDY0ID0gb2N0ZW9uX21nbXRfZGVxdWV1ZV9yeF9idWZmZXIocCwgJnNrYik7CisJaWYgKGxpa2VseShyZS5zLmNvZGUgPT0gUklOR19FTlRSWV9DT0RFX0RPTkUpKSB7CisJCS8qIEEgZ29vZCBwYWNrZXQsIHNlbmQgaXQgdXAuICovCisJCXNrYl9wdXQoc2tiLCByZS5zLmxlbik7Citnb29kOgorCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCQluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJcmMgPSAwOworCX0gZWxzZSBpZiAocmUucy5jb2RlID09IFJJTkdfRU5UUllfQ09ERV9NT1JFKSB7CisJCS8qCisJCSAqIFBhY2tldCBzcGxpdCBhY3Jvc3Mgc2ticy4gIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZQorCQkgKiBpbmNyZWFzZSB0aGUgTVRVLiAgQnVmZmVycyB0aGF0IGFyZSBhbHJlYWR5IGluIHRoZQorCQkgKiByeCByaW5nIGNhbiB0aGVuIGVuZCB1cCBiZWluZyB0b28gc21hbGwuICBBcyB0aGUgcngKKwkJICogcmluZyBpcyByZWZpbGxlZCwgYnVmZmVycyBzaXplZCBmb3IgdGhlIG5ldyBNVFUKKwkJICogd2lsbCBiZSB1c2VkIGFuZCB3ZSBzaG91bGQgZ28gYmFjayB0byB0aGUgbm9ybWFsCisJCSAqIG5vbi1zcGxpdCBjYXNlLgorCQkgKi8KKwkJc2tiX3B1dChza2IsIHJlLnMubGVuKTsKKwkJZG8geworCQkJcmUyLmQ2NCA9IG9jdGVvbl9tZ210X2RlcXVldWVfcnhfYnVmZmVyKHAsICZza2IyKTsKKwkJCWlmIChyZTIucy5jb2RlICE9IFJJTkdfRU5UUllfQ09ERV9NT1JFCisJCQkJJiYgcmUyLnMuY29kZSAhPSBSSU5HX0VOVFJZX0NPREVfRE9ORSkKKwkJCQlnb3RvIHNwbGl0X2Vycm9yOworCQkJc2tiX3B1dChza2IyLCAgcmUyLnMubGVuKTsKKwkJCXNrYl9uZXcgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBza2IyLT5sZW4sCisJCQkJCQkgIEdGUF9BVE9NSUMpOworCQkJaWYgKCFza2JfbmV3KQorCQkJCWdvdG8gc3BsaXRfZXJyb3I7CisJCQlpZiAoc2tiX2NvcHlfYml0cyhza2IyLCAwLCBza2JfdGFpbF9wb2ludGVyKHNrYl9uZXcpLAorCQkJCQkgIHNrYjItPmxlbikpCisJCQkJZ290byBzcGxpdF9lcnJvcjsKKwkJCXNrYl9wdXQoc2tiX25ldywgc2tiMi0+bGVuKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IyKTsKKwkJCXNrYiA9IHNrYl9uZXc7CisJCX0gd2hpbGUgKHJlMi5zLmNvZGUgPT0gUklOR19FTlRSWV9DT0RFX01PUkUpOworCQlnb3RvIGdvb2Q7CisJfSBlbHNlIHsKKwkJLyogU29tZSBvdGhlciBlcnJvciwgZGlzY2FyZCBpdC4gKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJLyoKKwkJICogRXJyb3Igc3RhdGlzdGljcyBhcmUgYWNjdW11bGF0ZWQgaW4KKwkJICogb2N0ZW9uX21nbXRfdXBkYXRlX3J4X3N0YXRzLgorCQkgKi8KKwl9CisJZ290byBkb25lOworc3BsaXRfZXJyb3I6CisJLyogRGlzY2FyZCB0aGUgd2hvbGUgbWVzcy4gKi8KKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWRldl9rZnJlZV9za2JfYW55KHNrYjIpOworCXdoaWxlIChyZTIucy5jb2RlID09IFJJTkdfRU5UUllfQ09ERV9NT1JFKSB7CisJCXJlMi5kNjQgPSBvY3Rlb25fbWdtdF9kZXF1ZXVlX3J4X2J1ZmZlcihwLCAmc2tiMik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYjIpOworCX0KKwluZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCitkb25lOgorCS8qIFRlbGwgdGhlIGhhcmR3YXJlIHdlIHByb2Nlc3NlZCBhIHBhY2tldC4gICovCisJbWl4X2lyY250LnU2NCA9IDA7CisJbWl4X2lyY250LnMuaXJjbnQgPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9JUkNOVChwb3J0KSwgbWl4X2lyY250LnU2NCk7CisJcmV0dXJuIHJjOworCit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfcmVjZWl2ZV9wYWNrZXRzKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCwgaW50IGJ1ZGdldCkKK3sKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJdW5zaWduZWQgaW50IHdvcmtfZG9uZSA9IDA7CisJdW5pb24gY3ZteF9taXh4X2lyY250IG1peF9pcmNudDsKKwlpbnQgcmM7CisKKworCW1peF9pcmNudC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9JUkNOVChwb3J0KSk7CisJd2hpbGUgKHdvcmtfZG9uZSA8IGJ1ZGdldCAmJiBtaXhfaXJjbnQucy5pcmNudCkgeworCisJCXJjID0gb2N0ZW9uX21nbXRfcmVjZWl2ZV9vbmUocCk7CisJCWlmICghcmMpCisJCQl3b3JrX2RvbmUrKzsKKworCQkvKiBDaGVjayBmb3IgbW9yZSBwYWNrZXRzLiAqLworCQltaXhfaXJjbnQudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVJDTlQocG9ydCkpOworCX0KKworCW9jdGVvbl9tZ210X3J4X2ZpbGxfcmluZyhwLT5uZXRkZXYpOworCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworc3RhdGljIGludCBvY3Rlb25fbWdtdF9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3Qgb2N0ZW9uX21nbXQsIG5hcGkpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwLT5uZXRkZXY7CisJdW5zaWduZWQgaW50IHdvcmtfZG9uZSA9IDA7CisKKwl3b3JrX2RvbmUgPSBvY3Rlb25fbWdtdF9yZWNlaXZlX3BhY2tldHMocCwgYnVkZ2V0KTsKKworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJLyogV2Ugc3RvcHBlZCBiZWNhdXNlIG5vIG1vcmUgcGFja2V0cyB3ZXJlIGF2YWlsYWJsZS4gKi8KKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJb2N0ZW9uX21nbXRfZW5hYmxlX3J4X2lycShwKTsKKwl9CisJb2N0ZW9uX21nbXRfdXBkYXRlX3J4X3N0YXRzKG5ldGRldik7CisKKwlyZXR1cm4gd29ya19kb25lOworfQorCisvKiBSZXNldCB0aGUgaGFyZHdhcmUgdG8gY2xlYW4gc3RhdGUuICAqLworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfcmVzZXRfaHcoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCXVuaW9uIGN2bXhfbWl4eF9jdGwgbWl4X2N0bDsKKwl1bmlvbiBjdm14X21peHhfYmlzdCBtaXhfYmlzdDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfYmlzdCBhZ2xfZ214X2Jpc3Q7CisKKwltaXhfY3RsLnU2NCA9IDA7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0NUTChwLT5wb3J0KSwgbWl4X2N0bC51NjQpOworCWRvIHsKKwkJbWl4X2N0bC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9DVEwocC0+cG9ydCkpOworCX0gd2hpbGUgKG1peF9jdGwucy5idXN5KTsKKwltaXhfY3RsLnMucmVzZXQgPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9DVEwocC0+cG9ydCksIG1peF9jdGwudTY0KTsKKwljdm14X3JlYWRfY3NyKENWTVhfTUlYWF9DVEwocC0+cG9ydCkpOworCWN2bXhfd2FpdCg2NCk7CisKKwltaXhfYmlzdC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9CSVNUKHAtPnBvcnQpKTsKKwlpZiAobWl4X2Jpc3QudTY0KQorCQlkZXZfd2FybihwLT5kZXYsICJNSVggZmFpbGVkIEJJU1QgKDB4JTAxNmxseClcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW1peF9iaXN0LnU2NCk7CisKKwlhZ2xfZ214X2Jpc3QudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfQklTVCk7CisJaWYgKGFnbF9nbXhfYmlzdC51NjQpCisJCWRldl93YXJuKHAtPmRldiwgIkFHTCBmYWlsZWQgQklTVCAoMHglMDE2bGx4KVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKWFnbF9nbXhfYmlzdC51NjQpOworfQorCitzdHJ1Y3Qgb2N0ZW9uX21nbXRfY2FtX3N0YXRlIHsKKwl1NjQgY2FtWzZdOworCXU2NCBjYW1fbWFzazsKKwlpbnQgY2FtX2luZGV4OworfTsKKworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfY2FtX3N0YXRlX2FkZChzdHJ1Y3Qgb2N0ZW9uX21nbXRfY2FtX3N0YXRlICpjcywKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJY3MtPmNhbVtpXSB8PSAodTY0KWFkZHJbaV0gPDwgKDggKiAoY3MtPmNhbV9pbmRleCkpOworCWNzLT5jYW1fbWFzayB8PSAoMVVMTCA8PCBjcy0+Y2FtX2luZGV4KTsKKwljcy0+Y2FtX2luZGV4Kys7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X3NldF9yeF9maWx0ZXJpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKwlpbnQgaTsKKwl1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jdGwgYWRyX2N0bDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfcHJ0eF9jZmcgYWdsX2dteF9wcnR4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHByZXZfcGFja2V0X2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgY2FtX21vZGUgPSAxOyAvKiAxIC0gQWNjZXB0IG9uIENBTSBtYXRjaCAqLworCXVuc2lnbmVkIGludCBtdWx0aWNhc3RfbW9kZSA9IDE7IC8qIDEgLSBSZWplY3QgYWxsIG11bHRpY2FzdC4gICovCisJc3RydWN0IG9jdGVvbl9tZ210X2NhbV9zdGF0ZSBjYW1fc3RhdGU7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKmxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWludCBhdmFpbGFibGVfY2FtX2VudHJpZXM7CisKKwltZW1zZXQoJmNhbV9zdGF0ZSwgMCwgc2l6ZW9mKGNhbV9zdGF0ZSkpOworCisJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IG5ldGRldi0+ZGV2X2FkZHJzLmNvdW50ID4gNykgeworCQljYW1fbW9kZSA9IDA7CisJCWF2YWlsYWJsZV9jYW1fZW50cmllcyA9IDg7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT25lIENBTSBlbnRyeSBmb3IgdGhlIHByaW1hcnkgYWRkcmVzcywgbGVhdmVzIHNldmVuCisJCSAqIGZvciB0aGUgc2Vjb25kYXJ5IGFkZHJlc3Nlcy4KKwkJICovCisJCWF2YWlsYWJsZV9jYW1fZW50cmllcyA9IDcgLSBuZXRkZXYtPmRldl9hZGRycy5jb3VudDsKKwl9CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKKwkJaWYgKGNhbV9tb2RlID09IDAgfHwgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCSAgICB8fCBuZXRkZXYtPm1jX2NvdW50ICA+IGF2YWlsYWJsZV9jYW1fZW50cmllcykKKwkJCW11bHRpY2FzdF9tb2RlID0gMjsgLyogMSAtIEFjY2VwdCBhbGwgbXVsdGljYXN0LiAgKi8KKwkJZWxzZQorCQkJbXVsdGljYXN0X21vZGUgPSAwOyAvKiAwIC0gVXNlIENBTS4gICovCisJfQorCisJaWYgKGNhbV9tb2RlID09IDEpIHsKKwkJLyogQWRkIHByaW1hcnkgYWRkcmVzcy4gKi8KKwkJb2N0ZW9uX21nbXRfY2FtX3N0YXRlX2FkZCgmY2FtX3N0YXRlLCBuZXRkZXYtPmRldl9hZGRyKTsKKwkJbGlzdF9mb3JfZWFjaChwb3MsICZuZXRkZXYtPmRldl9hZGRycy5saXN0KSB7CisJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmh3X2FkZHI7CisJCQlod19hZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7CisJCQlvY3Rlb25fbWdtdF9jYW1fc3RhdGVfYWRkKCZjYW1fc3RhdGUsIGh3X2FkZHItPmFkZHIpOworCQkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCX0KKwl9CisJaWYgKG11bHRpY2FzdF9tb2RlID09IDApIHsKKwkJaSA9IG5ldGRldi0+bWNfY291bnQ7CisJCWxpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7CisJCXdoaWxlIChpLS0pIHsKKwkJCW9jdGVvbl9tZ210X2NhbV9zdGF0ZV9hZGQoJmNhbV9zdGF0ZSwgbGlzdC0+ZGFfYWRkcik7CisJCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJfQorCX0KKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgcGFja2V0IEkvTy4gKi8KKwlhZ2xfZ214X3BydHgudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCkpOworCXByZXZfcGFja2V0X2VuYWJsZSA9IGFnbF9nbXhfcHJ0eC5zLmVuOworCWFnbF9nbXhfcHJ0eC5zLmVuID0gMDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCksIGFnbF9nbXhfcHJ0eC51NjQpOworCisKKwlhZHJfY3RsLnU2NCA9IDA7CisJYWRyX2N0bC5zLmNhbV9tb2RlID0gY2FtX21vZGU7CisJYWRyX2N0bC5zLm1jc3QgPSBtdWx0aWNhc3RfbW9kZTsKKwlhZHJfY3RsLnMuYmNzdCA9IDE7ICAgICAvKiBBbGxvdyBicm9hZGNhc3QgKi8KKworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfQURSX0NUTChwb3J0KSwgYWRyX2N0bC51NjQpOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMChwb3J0KSwgY2FtX3N0YXRlLmNhbVswXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMShwb3J0KSwgY2FtX3N0YXRlLmNhbVsxXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMihwb3J0KSwgY2FtX3N0YXRlLmNhbVsyXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMyhwb3J0KSwgY2FtX3N0YXRlLmNhbVszXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNNChwb3J0KSwgY2FtX3N0YXRlLmNhbVs0XSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNNShwb3J0KSwgY2FtX3N0YXRlLmNhbVs1XSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNX0VOKHBvcnQpLCBjYW1fc3RhdGUuY2FtX21hc2spOworCisJLyogUmVzdG9yZSBwYWNrZXQgSS9PLiAqLworCWFnbF9nbXhfcHJ0eC5zLmVuID0gcHJldl9wYWNrZXRfZW5hYmxlOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9QUlRYX0NGRyhwb3J0KSwgYWdsX2dteF9wcnR4LnU2NCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IGFkZHI7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoc2EtPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgc2EtPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworCW9jdGVvbl9tZ210X3NldF9yeF9maWx0ZXJpbmcobmV0ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jdGVvbl9tZ210X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJaW50IHNpemVfd2l0aG91dF9mY3MgPSBuZXdfbXR1ICsgT0NURU9OX01HTVRfUlhfSEVBRFJPT007CisKKwkvKgorCSAqIExpbWl0IHRoZSBNVFUgdG8gbWFrZSBzdXJlIHRoZSBldGhlcm5ldCBwYWNrZXRzIGFyZSBiZXR3ZWVuCisJICogNjQgYnl0ZXMgYW5kIDE2MzgzIGJ5dGVzLgorCSAqLworCWlmIChzaXplX3dpdGhvdXRfZmNzIDwgNjQgfHwgc2l6ZV93aXRob3V0X2ZjcyA+IDE2MzgzKSB7CisJCWRldl93YXJuKHAtPmRldiwgIk1UVSBtdXN0IGJlIGJldHdlZW4gJWQgYW5kICVkLlxuIiwKKwkJCSA2NCAtIE9DVEVPTl9NR01UX1JYX0hFQURST09NLAorCQkJIDE2MzgzIC0gT0NURU9OX01HTVRfUlhfSEVBRFJPT00pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUlhYX0ZSTV9NQVgocG9ydCksIHNpemVfd2l0aG91dF9mY3MpOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfSkFCQkVSKHBvcnQpLAorCQkgICAgICAgKHNpemVfd2l0aG91dF9mY3MgKyA3KSAmIDB4ZmZmOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9tZ210X2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKwl1bmlvbiBjdm14X21peHhfaXNyIG1peHhfaXNyOworCisJbWl4eF9pc3IudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpLAorCQkgICAgICAgY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpKSk7CisJY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpKTsKKworCWlmIChtaXh4X2lzci5zLmlydGhyZXNoKSB7CisJCW9jdGVvbl9tZ210X2Rpc2FibGVfcnhfaXJxKHApOworCQluYXBpX3NjaGVkdWxlKCZwLT5uYXBpKTsKKwl9CisJaWYgKG1peHhfaXNyLnMub3J0aHJlc2gpIHsKKwkJb2N0ZW9uX21nbXRfZGlzYWJsZV90eF9pcnEocCk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnAtPnR4X2NsZWFuX3Rhc2tsZXQpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBvY3Rlb25fbWdtdF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXAtPnBoeWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwLT5waHlkZXYsIGlmX21paShycSksIGNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJdW5pb24gY3ZteF9hZ2xfZ214X3BydHhfY2ZnIHBydHhfY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxpbmtfY2hhbmdlZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCWlmIChwLT5waHlkZXYtPmxpbmspIHsKKwkJaWYgKCFwLT5sYXN0X2xpbmspCisJCQlsaW5rX2NoYW5nZWQgPSAxOworCQlpZiAocC0+bGFzdF9kdXBsZXggIT0gcC0+cGh5ZGV2LT5kdXBsZXgpIHsKKwkJCXAtPmxhc3RfZHVwbGV4ID0gcC0+cGh5ZGV2LT5kdXBsZXg7CisJCQlwcnR4X2NmZy51NjQgPQorCQkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX1BSVFhfQ0ZHKHBvcnQpKTsKKwkJCXBydHhfY2ZnLnMuZHVwbGV4ID0gcC0+cGh5ZGV2LT5kdXBsZXg7CisJCQljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCksCisJCQkJICAgICAgIHBydHhfY2ZnLnU2NCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocC0+bGFzdF9saW5rKQorCQkJbGlua19jaGFuZ2VkID0gLTE7CisJfQorCXAtPmxhc3RfbGluayA9IHAtPnBoeWRldi0+bGluazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAobGlua19jaGFuZ2VkICE9IDApIHsKKwkJaWYgKGxpbmtfY2hhbmdlZCA+IDApIHsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCXByX2luZm8oIiVzOiBMaW5rIGlzIHVwIC0gJWQvJXNcbiIsIG5ldGRldi0+bmFtZSwKKwkJCQlwLT5waHlkZXYtPnNwZWVkLAorCQkJCURVUExFWF9GVUxMID09IHAtPnBoeWRldi0+ZHVwbGV4ID8KKwkJCQkiRnVsbCIgOiAiSGFsZiIpOworCQl9IGVsc2UgeworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCXByX2luZm8oIiVzOiBMaW5rIGlzIGRvd25cbiIsIG5ldGRldi0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWNoYXIgcGh5X2lkWzIwXTsKKworCWlmIChvY3Rlb25faXNfc2ltdWxhdGlvbigpKSB7CisJCS8qIE5vIFBIWXMgaW4gdGhlIHNpbXVsYXRvci4gKi8KKwkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbnByaW50ZihwaHlfaWQsIHNpemVvZihwaHlfaWQpLCBQSFlfSURfRk1ULCAiMCIsIHAtPnBvcnQpOworCisJcC0+cGh5ZGV2ID0gcGh5X2Nvbm5lY3QobmV0ZGV2LCBwaHlfaWQsIG9jdGVvbl9tZ210X2FkanVzdF9saW5rLCAwLAorCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCisJaWYgKElTX0VSUihwLT5waHlkZXYpKSB7CisJCXAtPnBoeWRldiA9IE5VTEw7CisJCXJldHVybiAtMTsKKwl9CisKKwlwaHlfc3RhcnRfYW5lZyhwLT5waHlkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIGN2bXhfbWl4eF9jdGwgbWl4X2N0bDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfaW5mX21vZGUgYWdsX2dteF9pbmZfbW9kZTsKKwl1bmlvbiBjdm14X21peHhfb3JpbmcxIG9yaW5nMTsKKwl1bmlvbiBjdm14X21peHhfaXJpbmcxIGlyaW5nMTsKKwl1bmlvbiBjdm14X2FnbF9nbXhfcHJ0eF9jZmcgcHJ0eF9jZmc7CisJdW5pb24gY3ZteF9hZ2xfZ214X3J4eF9mcm1fY3RsIHJ4eF9mcm1fY3RsOworCXVuaW9uIGN2bXhfbWl4eF9pcmh3bSBtaXhfaXJod207CisJdW5pb24gY3ZteF9taXh4X29yaHdtIG1peF9vcmh3bTsKKwl1bmlvbiBjdm14X21peHhfaW50ZW5hIG1peF9pbnRlbmE7CisJc3RydWN0IHNvY2thZGRyIHNhOworCisJLyogQWxsb2NhdGUgcmluZyBidWZmZXJzLiAgKi8KKwlwLT50eF9yaW5nID0ga3phbGxvYyhyaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwLT50eF9yaW5nKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwLT50eF9yaW5nX2hhbmRsZSA9CisJCWRtYV9tYXBfc2luZ2xlKHAtPmRldiwgcC0+dHhfcmluZywKKwkJCSAgICAgICByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCSAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJcC0+dHhfbmV4dCA9IDA7CisJcC0+dHhfbmV4dF9jbGVhbiA9IDA7CisJcC0+dHhfY3VycmVudF9maWxsID0gMDsKKworCisJcC0+cnhfcmluZyA9IGt6YWxsb2MocmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghcC0+cnhfcmluZykKKwkJZ290byBlcnJfbm9tZW07CisJcC0+cnhfcmluZ19oYW5kbGUgPQorCQlkbWFfbWFwX3NpbmdsZShwLT5kZXYsIHAtPnJ4X3JpbmcsCisJCQkgICAgICAgcmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCisJcC0+cnhfbmV4dCA9IDA7CisJcC0+cnhfbmV4dF9maWxsID0gMDsKKwlwLT5yeF9jdXJyZW50X2ZpbGwgPSAwOworCisJb2N0ZW9uX21nbXRfcmVzZXRfaHcocCk7CisKKwltaXhfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9NSVhYX0NUTChwb3J0KSk7CisKKwkvKiBCcmluZyBpdCBvdXQgb2YgcmVzZXQgaWYgbmVlZGVkLiAqLworCWlmIChtaXhfY3RsLnMucmVzZXQpIHsKKwkJbWl4X2N0bC5zLnJlc2V0ID0gMDsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0NUTChwb3J0KSwgbWl4X2N0bC51NjQpOworCQlkbyB7CisJCQltaXhfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9NSVhYX0NUTChwb3J0KSk7CisJCX0gd2hpbGUgKG1peF9jdGwucy5yZXNldCk7CisJfQorCisJYWdsX2dteF9pbmZfbW9kZS51NjQgPSAwOworCWFnbF9nbXhfaW5mX21vZGUucy5lbiA9IDE7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX0lORl9NT0RFLCBhZ2xfZ214X2luZl9tb2RlLnU2NCk7CisKKwlvcmluZzEudTY0ID0gMDsKKwlvcmluZzEucy5vYmFzZSA9IHAtPnR4X3JpbmdfaGFuZGxlID4+IDM7CisJb3JpbmcxLnMub3NpemUgPSBPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX09SSU5HMShwb3J0KSwgb3JpbmcxLnU2NCk7CisKKwlpcmluZzEudTY0ID0gMDsKKwlpcmluZzEucy5pYmFzZSA9IHAtPnJ4X3JpbmdfaGFuZGxlID4+IDM7CisJaXJpbmcxLnMuaXNpemUgPSBPQ1RFT05fTUdNVF9SWF9SSU5HX1NJWkU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0lSSU5HMShwb3J0KSwgaXJpbmcxLnU2NCk7CisKKwkvKiBEaXNhYmxlIHBhY2tldCBJL08uICovCisJcHJ0eF9jZmcudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCkpOworCXBydHhfY2ZnLnMuZW4gPSAwOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9QUlRYX0NGRyhwb3J0KSwgcHJ0eF9jZmcudTY0KTsKKworCW1lbWNweShzYS5zYV9kYXRhLCBuZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJb2N0ZW9uX21nbXRfc2V0X21hY19hZGRyZXNzKG5ldGRldiwgJnNhKTsKKworCW9jdGVvbl9tZ210X2NoYW5nZV9tdHUobmV0ZGV2LCBuZXRkZXYtPm10dSk7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgcG9ydCBIVy4gUGFja2V0cyBhcmUgbm90IGFsbG93ZWQgdW50aWwKKwkgKiBjdm14X21nbXRfcG9ydF9lbmFibGUoKSBpcyBjYWxsZWQuCisJICovCisJbWl4X2N0bC51NjQgPSAwOworCW1peF9jdGwucy5jcmNfc3RyaXAgPSAxOyAgICAvKiBTdHJpcCB0aGUgZW5kaW5nIENSQyAqLworCW1peF9jdGwucy5lbiA9IDE7ICAgICAgICAgICAvKiBFbmFibGUgdGhlIHBvcnQgKi8KKwltaXhfY3RsLnMubmJ0YXJiID0gMDsgICAgICAgLyogQXJiaXRyYXRpb24gbW9kZSAqLworCS8qIE1JSSBDQi1yZXF1ZXN0IEZJRk8gcHJvZ3JhbW1hYmxlIGhpZ2ggd2F0ZXJtYXJrICovCisJbWl4X2N0bC5zLm1ycV9od20gPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9DVEwocG9ydCksIG1peF9jdGwudTY0KTsKKworCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMV9YKQorCSAgICB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMV9YKSkgeworCQkvKgorCQkgKiBGb3JjZSBjb21wZW5zYXRpb24gdmFsdWVzLCBhcyB0aGV5IGFyZSBub3QKKwkJICogZGV0ZXJtaW5lZCBwcm9wZXJseSBieSBIVworCQkgKi8KKwkJdW5pb24gY3ZteF9hZ2xfZ214X2Rydl9jdGwgZHJ2X2N0bDsKKworCQlkcnZfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX0RSVl9DVEwpOworCQlpZiAocG9ydCkgeworCQkJZHJ2X2N0bC5zLmJ5cF9lbjEgPSAxOworCQkJZHJ2X2N0bC5zLm5jdGwxID0gNjsKKwkJCWRydl9jdGwucy5wY3RsMSA9IDY7CisJCX0gZWxzZSB7CisJCQlkcnZfY3RsLnMuYnlwX2VuID0gMTsKKwkJCWRydl9jdGwucy5uY3RsID0gNjsKKwkJCWRydl9jdGwucy5wY3RsID0gNjsKKwkJfQorCQljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfRFJWX0NUTCwgZHJ2X2N0bC51NjQpOworCX0KKworCW9jdGVvbl9tZ210X3J4X2ZpbGxfcmluZyhuZXRkZXYpOworCisJLyogQ2xlYXIgc3RhdGlzdGljcy4gKi8KKwkvKiBDbGVhciBvbiByZWFkLiAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfQ1RMKHBvcnQpLCAxKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfRFJQKHBvcnQpLCAwKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfQkFEKHBvcnQpLCAwKTsKKworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9UWFhfU1RBVFNfQ1RMKHBvcnQpLCAxKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfVFhYX1NUQVQwKHBvcnQpLCAwKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfVFhYX1NUQVQxKHBvcnQpLCAwKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpLCBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9JU1IocG9ydCkpKTsKKworCWlmIChyZXF1ZXN0X2lycShwLT5pcnEsIG9jdGVvbl9tZ210X2ludGVycnVwdCwgMCwgbmV0ZGV2LT5uYW1lLAorCQkJbmV0ZGV2KSkgeworCQlkZXZfZXJyKHAtPmRldiwgInJlcXVlc3RfaXJxKCVkKSBmYWlsZWQuXG4iLCBwLT5pcnEpOworCQlnb3RvIGVycl9ub2lycTsKKwl9CisKKwkvKiBJbnRlcnJ1cHQgZXZlcnkgc2luZ2xlIFJYIHBhY2tldCAqLworCW1peF9pcmh3bS51NjQgPSAwOworCW1peF9pcmh3bS5zLmlyaHdtID0gMDsKKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSVJIV00ocG9ydCksIG1peF9pcmh3bS51NjQpOworCisJLyogSW50ZXJydXB0IHdoZW4gd2UgaGF2ZSA1IG9yIG1vcmUgcGFja2V0cyB0byBjbGVhbi4gICovCisJbWl4X29yaHdtLnU2NCA9IDA7CisJbWl4X29yaHdtLnMub3Jod20gPSA1OworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9PUkhXTShwb3J0KSwgbWl4X29yaHdtLnU2NCk7CisKKwkvKiBFbmFibGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgaW50ZXJydXB0cyAqLworCW1peF9pbnRlbmEudTY0ID0gMDsKKwltaXhfaW50ZW5hLnMuaXRoZW5hID0gMTsKKwltaXhfaW50ZW5hLnMub3RoZW5hID0gMTsKKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSU5URU5BKHBvcnQpLCBtaXhfaW50ZW5hLnU2NCk7CisKKworCS8qIEVuYWJsZSBwYWNrZXQgSS9PLiAqLworCisJcnh4X2ZybV9jdGwudTY0ID0gMDsKKwlyeHhfZnJtX2N0bC5zLnByZV9hbGlnbiA9IDE7CisJLyoKKwkgKiBXaGVuIHNldCwgZGlzYWJsZXMgdGhlIGxlbmd0aCBjaGVjayBmb3Igbm9uLW1pbiBzaXplZCBwa3RzCisJICogd2l0aCBwYWRkaW5nIGluIHRoZSBjbGllbnQgZGF0YS4KKwkgKi8KKwlyeHhfZnJtX2N0bC5zLnBhZF9sZW4gPSAxOworCS8qIFdoZW4gc2V0LCBkaXNhYmxlcyB0aGUgbGVuZ3RoIGNoZWNrIGZvciBWTEFOIHBrdHMgKi8KKwlyeHhfZnJtX2N0bC5zLnZsYW5fbGVuID0gMTsKKwkvKiBXaGVuIHNldCwgUFJFQU1CTEUgY2hlY2tpbmcgaXMgIGxlc3Mgc3RyaWN0ICovCisJcnh4X2ZybV9jdGwucy5wcmVfZnJlZSA9IDE7CisJLyogQ29udHJvbCBQYXVzZSBGcmFtZXMgY2FuIG1hdGNoIHN0YXRpb24gU01BQyAqLworCXJ4eF9mcm1fY3RsLnMuY3RsX3NtYWMgPSAwOworCS8qIENvbnRyb2wgUGF1c2UgRnJhbWVzIGNhbiBtYXRjaCBnbG9iYWxseSBhc3NpZ24gTXVsdGljYXN0IGFkZHJlc3MgKi8KKwlyeHhfZnJtX2N0bC5zLmN0bF9tY3N0ID0gMTsKKwkvKiBGb3J3YXJkIHBhdXNlIGluZm9ybWF0aW9uIHRvIFRYIGJsb2NrICovCisJcnh4X2ZybV9jdGwucy5jdGxfYmNrID0gMTsKKwkvKiBEcm9wIENvbnRyb2wgUGF1c2UgRnJhbWVzICovCisJcnh4X2ZybV9jdGwucy5jdGxfZHJwID0gMTsKKwkvKiBTdHJpcCBvZmYgdGhlIHByZWFtYmxlICovCisJcnh4X2ZybV9jdGwucy5wcmVfc3RycCA9IDE7CisJLyoKKwkgKiBUaGlzIHBvcnQgaXMgY29uZmlndXJlZCB0byBzZW5kIFBSRUFNQkxFK1NGRCB0byBiZWdpbiBldmVyeQorCSAqIGZyYW1lLiAgR01YIGNoZWNrcyB0aGF0IHRoZSBQUkVBTUJMRSBpcyBzZW50IGNvcnJlY3RseS4KKwkgKi8KKwlyeHhfZnJtX2N0bC5zLnByZV9jaGsgPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfRlJNX0NUTChwb3J0KSwgcnh4X2ZybV9jdGwudTY0KTsKKworCS8qIEVuYWJsZSB0aGUgQUdMIGJsb2NrICovCisJYWdsX2dteF9pbmZfbW9kZS51NjQgPSAwOworCWFnbF9nbXhfaW5mX21vZGUucy5lbiA9IDE7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX0lORl9NT0RFLCBhZ2xfZ214X2luZl9tb2RlLnU2NCk7CisKKwkvKiBDb25maWd1cmUgdGhlIHBvcnQgZHVwbGV4IGFuZCBlbmFibGVzICovCisJcHJ0eF9jZmcudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCkpOworCXBydHhfY2ZnLnMudHhfZW4gPSAxOworCXBydHhfY2ZnLnMucnhfZW4gPSAxOworCXBydHhfY2ZnLnMuZW4gPSAxOworCXAtPmxhc3RfZHVwbGV4ID0gMTsKKwlwcnR4X2NmZy5zLmR1cGxleCA9IHAtPmxhc3RfZHVwbGV4OworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9QUlRYX0NGRyhwb3J0KSwgcHJ0eF9jZmcudTY0KTsKKworCXAtPmxhc3RfbGluayA9IDA7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKworCWlmIChvY3Rlb25fbWdtdF9pbml0X3BoeShuZXRkZXYpKSB7CisJCWRldl9lcnIocC0+ZGV2LCAiQ2Fubm90IGluaXRpYWxpemUgUEhZLlxuIik7CisJCWdvdG8gZXJyX25vaXJxOworCX0KKworCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwluYXBpX2VuYWJsZSgmcC0+bmFwaSk7CisKKwlyZXR1cm4gMDsKK2Vycl9ub2lycToKKwlvY3Rlb25fbWdtdF9yZXNldF9odyhwKTsKKwlkbWFfdW5tYXBfc2luZ2xlKHAtPmRldiwgcC0+cnhfcmluZ19oYW5kbGUsCisJCQkgcmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWtmcmVlKHAtPnJ4X3JpbmcpOworZXJyX25vbWVtOgorCWRtYV91bm1hcF9zaW5nbGUocC0+ZGV2LCBwLT50eF9yaW5nX2hhbmRsZSwKKwkJCSByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJa2ZyZWUocC0+dHhfcmluZyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluYXBpX2Rpc2FibGUoJnAtPm5hcGkpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWlmIChwLT5waHlkZXYpCisJCXBoeV9kaXNjb25uZWN0KHAtPnBoeWRldik7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCisJb2N0ZW9uX21nbXRfcmVzZXRfaHcocCk7CisKKworCWZyZWVfaXJxKHAtPmlycSwgbmV0ZGV2KTsKKworCS8qIGRtYV91bm1hcCBpcyBhIG5vcCBvbiBPY3Rlb24sIHNvIGp1c3QgZnJlZSBldmVyeXRoaW5nLiAgKi8KKwlza2JfcXVldWVfcHVyZ2UoJnAtPnR4X2xpc3QpOworCXNrYl9xdWV1ZV9wdXJnZSgmcC0+cnhfbGlzdCk7CisKKwlkbWFfdW5tYXBfc2luZ2xlKHAtPmRldiwgcC0+cnhfcmluZ19oYW5kbGUsCisJCQkgcmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWtmcmVlKHAtPnJ4X3JpbmcpOworCisJZG1hX3VubWFwX3NpbmdsZShwLT5kZXYsIHAtPnR4X3JpbmdfaGFuZGxlLAorCQkJIHJpbmdfc2l6ZV90b19ieXRlcyhPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUpLAorCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwlrZnJlZShwLT50eF9yaW5nKTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIG1nbXRfcG9ydF9yaW5nX2VudHJ5IHJlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZS5kNjQgPSAwOworCXJlLnMubGVuID0gc2tiLT5sZW47CisJcmUucy5hZGRyID0gZG1hX21hcF9zaW5nbGUocC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJICAgc2tiLT5sZW4sCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CisKKwlpZiAodW5saWtlbHkocC0+dHhfY3VycmVudF9maWxsID49CisJCSAgICAgcmluZ19tYXhfZmlsbChPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT50eF9saXN0LmxvY2ssIGZsYWdzKTsKKworCQlkbWFfdW5tYXBfc2luZ2xlKHAtPmRldiwgcmUucy5hZGRyLCByZS5zLmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJX19za2JfcXVldWVfdGFpbCgmcC0+dHhfbGlzdCwgc2tiKTsKKworCS8qIFB1dCBpdCBpbiB0aGUgcmluZy4gICovCisJcC0+dHhfcmluZ1twLT50eF9uZXh0XSA9IHJlLmQ2NDsKKwlwLT50eF9uZXh0ID0gKHAtPnR4X25leHQgKyAxKSAlIE9DVEVPTl9NR01UX1RYX1JJTkdfU0laRTsKKwlwLT50eF9jdXJyZW50X2ZpbGwrKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocC0+ZGV2LCBwLT50eF9yaW5nX2hhbmRsZSwKKwkJCQkgICByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCQkgICBETUFfQklESVJFQ1RJT05BTCk7CisKKwluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJLyogUmluZyB0aGUgYmVsbC4gICovCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX09SSU5HMihwb3J0KSwgMSk7CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlvY3Rlb25fbWdtdF9jbGVhbl90eF9idWZmZXJzKHApOworCW9jdGVvbl9tZ210X3VwZGF0ZV90eF9zdGF0cyhuZXRkZXYpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW9jdGVvbl9tZ210X3JlY2VpdmVfcGFja2V0cyhwLCAxNik7CisJb2N0ZW9uX21nbXRfdXBkYXRlX3J4X3N0YXRzKG5ldGRldik7CisJcmV0dXJuOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RybmNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKKwlzdHJuY3B5KGluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sICJOL0EiLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlpbmZvLT5uX3N0YXRzID0gMDsKKwlpbmZvLT50ZXN0aW5mb19sZW4gPSAwOworCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKKwlpbmZvLT5lZWR1bXBfbGVuID0gMDsKK30KKworc3RhdGljIGludCBvY3Rlb25fbWdtdF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChwLT5waHlkZXYpCisJCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KHAtPnBoeWRldiwgY21kKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG9jdGVvbl9tZ210X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHAtPnBoeWRldikKKwkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocC0+cGh5ZGV2LCBjbWQpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb2N0ZW9uX21nbXRfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvID0gb2N0ZW9uX21nbXRfZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3NldHRpbmdzID0gb2N0ZW9uX21nbXRfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgPSBvY3Rlb25fbWdtdF9zZXRfc2V0dGluZ3MKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb2N0ZW9uX21nbXRfb3BzID0geworCS5uZG9fb3BlbiA9CQkJb2N0ZW9uX21nbXRfb3BlbiwKKwkubmRvX3N0b3AgPQkJCW9jdGVvbl9tZ210X3N0b3AsCisJLm5kb19zdGFydF94bWl0ID0JCW9jdGVvbl9tZ210X3htaXQsCisJLm5kb19zZXRfcnhfbW9kZSA9IAkJb2N0ZW9uX21nbXRfc2V0X3J4X2ZpbHRlcmluZywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9CW9jdGVvbl9tZ210X3NldF9yeF9maWx0ZXJpbmcsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPQkJb2N0ZW9uX21nbXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwgPSAJCW9jdGVvbl9tZ210X2lvY3RsLAorCS5uZG9fY2hhbmdlX210dSA9CQlvY3Rlb25fbWdtdF9jaGFuZ2VfbXR1LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPQkJb2N0ZW9uX21nbXRfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fbWdtdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzX2lycTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcDsKKwlpbnQgaTsKKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb2N0ZW9uX21nbXQpKTsKKwlpZiAobmV0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG5ldGRldik7CisJcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmcC0+bmFwaSwgb2N0ZW9uX21nbXRfbmFwaV9wb2xsLAorCQkgICAgICAgT0NURU9OX01HTVRfTkFQSV9XRUlHSFQpOworCisJcC0+bmV0ZGV2ID0gbmV0ZGV2OworCXAtPmRldiA9ICZwZGV2LT5kZXY7CisKKwlwLT5wb3J0ID0gcGRldi0+aWQ7CisJc25wcmludGYobmV0ZGV2LT5uYW1lLCBJRk5BTVNJWiwgIm1nbXQlZCIsIHAtPnBvcnQpOworCisJcmVzX2lycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXNfaXJxKQorCQlnb3RvIGVycjsKKworCXAtPmlycSA9IHJlc19pcnEtPnN0YXJ0OworCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnAtPnR4X2xpc3QpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnAtPnJ4X2xpc3QpOworCXRhc2tsZXRfaW5pdCgmcC0+dHhfY2xlYW5fdGFza2xldCwKKwkJICAgICBvY3Rlb25fbWdtdF9jbGVhbl90eF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwKTsKKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZvY3Rlb25fbWdtdF9vcHM7CisJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZvY3Rlb25fbWdtdF9ldGh0b29sX29wczsKKworCisJLyogVGhlIG1nbXQgcG9ydHMgZ2V0IHRoZSBmaXJzdCBOIE1BQ3MuICAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSBvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbaV07CisJbmV0ZGV2LT5kZXZfYWRkcls1XSArPSBwLT5wb3J0OworCisJaWYgKHAtPnBvcnQgPj0gb2N0ZW9uX2Jvb3RpbmZvLT5tYWNfYWRkcl9jb3VudCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkVycm9yICVzOiBVc2luZyBNQUMgb3V0c2lkZSBvZiB0aGUgYXNzaWduZWQgcmFuZ2U6ICVwTVxuIiwKKwkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2LT5kZXZfYWRkcik7CisKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpCisJCWdvdG8gZXJyOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlyZXR1cm4gMDsKK2VycjoKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBvY3Rlb25fbWdtdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25fbWdtdF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gIm9jdGVvbl9tZ210IiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IG9jdGVvbl9tZ210X3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aob2N0ZW9uX21nbXRfcmVtb3ZlKSwKK307CisKK2V4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOworCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fbWdtdF9tb2RfaW5pdCh2b2lkKQoreworCS8qIEZvcmNlIG91ciBtZGlvYnVzIGRyaXZlciBtb2R1bGUgdG8gYmUgbG9hZGVkIGZpcnN0LiAqLworCW9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KCk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2N0ZW9uX21nbXRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9jdGVvbl9tZ210X21vZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9jdGVvbl9tZ210X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9jdGVvbl9tZ210X21vZF9pbml0KTsKK21vZHVsZV9leGl0KG9jdGVvbl9tZ210X21vZF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBEYW5leSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCmluZGV4IDE2NzNlYjAuLmQ0NGQ0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYworKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBhc2VtaV9tYWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBhc2VtaV9tYWNfcGNpX3RibCkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEFTRU1JLCAweGEwMDUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEFTRU1JLCAweGEwMDYpIH0sCiAJeyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwppbmRleCA0ODBhZjQwLi4yMDI3MzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYworKysgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwpAQCAtMjExLDcgKzIxMSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRkcnZfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5ldGRydl9wY2lfdGJsKSA9IHsKIAl7MHgxMGVjLCAweDgxMzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzkgfSwKIAl7MHgxMGVjLCAweDgxMzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIE5FVERSVl9DQiB9LAogCXsweDExMTMsIDB4MTIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU01DMTIxMVRYIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDgxYmFmZDUuLjJlZTU3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0yNzAsNyArMjcwLDcgQEAKIAkgICAgLyogZm9yIG1hc3Rlci9zbGF2ZSBtdWx0aWZ1bmN0aW9uIGNhcmRzICovCiAJICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQkJSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CisJCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAl9CiAgICAgfSBlbHNlIHsKIAkvKiBUaGlzIHNob3VsZCBiZSB0d28gMTYtcG9ydCB3aW5kb3dzICovCkBAIC0xMDY1LDE0ICsxMDY1LDExIEBACiAJICAgCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AoMHgwMCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAkKIAkvKgogCSAqCVNsb3cgcGhhc2Ugd2l0aCBsb2NrIGhlbGQuCiAJICovCiAJIAotCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7Ci0JCiAJZWlfbG9jYWwtPmlycWxvY2sgPSAxOwogCiAJc2VuZF9sZW5ndGggPSBtYXgobGVuZ3RoLCBFVEhfWkxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA4YWQ4Mzg0Li44MTNhY2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiAhPSAwKSB7CiAgICAgCWxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQkJSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CisJCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlyZXQgPSBtZmNfdHJ5X2lvX3BvcnQobGluayk7CiAJaWYgKHJldCAhPSAwKSBnb3RvIGZhaWxlZDsKICAgICB9IGVsc2UgaWYgKGNhcmR0eXBlID09IFVOR0VSTUFOTikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCBjMjY1MWFlLi43NzZjYWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJICAgIC8qIGZvciBtYXN0ZXIvc2xhdmUgbXVsdGlmdW5jdGlvbiBjYXJkcyAqLwogCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9Ci0JCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworCQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJfQogICAgIH0gZWxzZSB7CiAJLyogVGhpcyBzaG91bGQgYmUgdHdvIDE2LXBvcnQgd2luZG93cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCBjYzQ4NTNiYy4uNmRkNDg2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTQ1NCw3ICs0NTQsNyBAQAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQotCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCmluZGV4IGEyZWRhMjguLjQ2NmZjNzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAkgICAgbGluay0+Y29uZi5TdGF0dXMgfD0gQ0NTUl9BVURJT19FTkE7CiAJfQotCWxpbmstPmlycS5BdHRyaWJ1dGVzIHw9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEIDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyB8PSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aW8uTnVtUG9ydHMyID0gODsKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCWlmIChsb2NhbC0+ZGluZ28pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCBlMTU0Njc3Li4wZGM3ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC01OSw3ICs1OSw3IEBACiAvKgogICogUENJIGRldmljZSBpZGVudGlmaWVycyBmb3IgIm5ldyBzdHlsZSIgTGludXggUENJIERldmljZSBEcml2ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY25ldDMyX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY25ldDMyX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfTEFOQ0VfSE9NRSksIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRSksIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggZDVkOGUxYy4uZmM1OTM4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC0xMTUsNCArMTE1LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBtZGlvLWdwaW8uCiAKK2NvbmZpZyBNRElPX09DVEVPTgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBNRElPIGJ1c2VzIG9uIE9jdGVvbiBTT0NzIgorCWRlcGVuZHMgb24gIENQVV9DQVZJVU1fT0NURU9OCisJZGVmYXVsdCB5CisJaGVscAorCisJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE9jdGVvbiBNRElPIGJ1c3Nlcy4KKwkgIEl0IGlzIHJlcXVpcmVkIGJ5IHRoZSBPY3Rlb24gRXRoZXJuZXQgZGV2aWNlIGRyaXZlcnMuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgWS4KKwogZW5kaWYgIyBQSFlMSUIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBlZGZhYWM0Li4xMzQyNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC0yMCwzICsyMCw0IEBACiBvYmotJChDT05GSUdfTURJT19HUElPKQkJKz0gbWRpby1ncGlvLm8KIG9iai0kKENPTkZJR19OQVRJT05BTF9QSFkpCSs9IG5hdGlvbmFsLm8KIG9iai0kKENPTkZJR19TVEUxMFhQKQkJKz0gc3RlMTBYcC5vCitvYmotJChDT05GSUdfTURJT19PQ1RFT04pCSs9IG1kaW8tb2N0ZW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhNDQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IENhdml1bSBOZXR3b3JrcworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgorI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1zbWl4LWRlZnMuaD4KKworI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wIgorI2RlZmluZSBEUlZfREVTQ1JJUFRJT04gIkNhdml1bSBOZXR3b3JrcyBPY3Rlb24gU01JL01ESU8gZHJpdmVyIgorCitzdHJ1Y3Qgb2N0ZW9uX21kaW9idXMgeworCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOworCWludCB1bml0OworCWludCBwaHlfaXJxW1BIWV9NQVhfQUREUl07Cit9OworCitzdGF0aWMgaW50IG9jdGVvbl9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21kaW9idXMgKnAgPSBidXMtPnByaXY7CisJdW5pb24gY3ZteF9zbWl4X2NtZCBzbWlfY21kOworCXVuaW9uIGN2bXhfc21peF9yZF9kYXQgc21pX3JkOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXNtaV9jbWQudTY0ID0gMDsKKwlzbWlfY21kLnMucGh5X29wID0gMTsgLyogTURJT19DTEFVU0VfMjJfUkVBRCAqLworCXNtaV9jbWQucy5waHlfYWRyID0gcGh5X2lkOworCXNtaV9jbWQucy5yZWdfYWRyID0gcmVnbnVtOworCWN2bXhfd3JpdGVfY3NyKENWTVhfU01JWF9DTUQocC0+dW5pdCksIHNtaV9jbWQudTY0KTsKKworCWRvIHsKKwkJLyoKKwkJICogV2FpdCAxMDAwIGNsb2NrcyBzbyB3ZSBkb24ndCBzYXR1cmF0ZSB0aGUgUlNMIGJ1cworCQkgKiBkb2luZyByZWFkcy4KKwkJICovCisJCWN2bXhfd2FpdCgxMDAwKTsKKwkJc21pX3JkLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9TTUlYX1JEX0RBVChwLT51bml0KSk7CisJfSB3aGlsZSAoc21pX3JkLnMucGVuZGluZyAmJiAtLXRpbWVvdXQpOworCisJaWYgKHNtaV9yZC5zLnZhbCkKKwkJcmV0dXJuIHNtaV9yZC5zLmRhdDsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IG9jdGVvbl9tZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsCisJCQkJaW50IHJlZ251bSwgdTE2IHZhbCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21kaW9idXMgKnAgPSBidXMtPnByaXY7CisJdW5pb24gY3ZteF9zbWl4X2NtZCBzbWlfY21kOworCXVuaW9uIGN2bXhfc21peF93cl9kYXQgc21pX3dyOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXNtaV93ci51NjQgPSAwOworCXNtaV93ci5zLmRhdCA9IHZhbDsKKwljdm14X3dyaXRlX2NzcihDVk1YX1NNSVhfV1JfREFUKHAtPnVuaXQpLCBzbWlfd3IudTY0KTsKKworCXNtaV9jbWQudTY0ID0gMDsKKwlzbWlfY21kLnMucGh5X29wID0gMDsgLyogTURJT19DTEFVU0VfMjJfV1JJVEUgKi8KKwlzbWlfY21kLnMucGh5X2FkciA9IHBoeV9pZDsKKwlzbWlfY21kLnMucmVnX2FkciA9IHJlZ251bTsKKwljdm14X3dyaXRlX2NzcihDVk1YX1NNSVhfQ01EKHAtPnVuaXQpLCBzbWlfY21kLnU2NCk7CisKKwlkbyB7CisJCS8qCisJCSAqIFdhaXQgMTAwMCBjbG9ja3Mgc28gd2UgZG9uJ3Qgc2F0dXJhdGUgdGhlIFJTTCBidXMKKwkJICogZG9pbmcgcmVhZHMuCisJCSAqLworCQljdm14X3dhaXQoMTAwMCk7CisJCXNtaV93ci51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfU01JWF9XUl9EQVQocC0+dW5pdCkpOworCX0gd2hpbGUgKHNtaV93ci5zLnBlbmRpbmcgJiYgLS10aW1lb3V0KTsKKworCWlmICh0aW1lb3V0IDw9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZGlvYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9jdGVvbl9tZGlvYnVzICpidXM7CisJaW50IGk7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlidXMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBUaGUgcGxhdGZvcm1fZGV2aWNlIGlkIGlzIG91ciB1bml0IG51bWJlci4gICovCisJYnVzLT51bml0ID0gcGRldi0+aWQ7CisKKwlidXMtPm1paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7CisKKwlpZiAoIWJ1cy0+bWlpX2J1cykKKwkJZ290byBlcnI7CisKKwkvKgorCSAqIFN0YW5kYXJkIE9jdGVvbiBldmFsdWF0aW9uIGJvYXJkcyBkb24ndCBzdXBwb3J0IHBoeQorCSAqIGludGVycnVwdHMsIHdlIG5lZWQgdG8gcG9sbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWJ1cy0+cGh5X2lycVtpXSA9IFBIWV9QT0xMOworCisJYnVzLT5taWlfYnVzLT5wcml2ID0gYnVzOworCWJ1cy0+bWlpX2J1cy0+aXJxID0gYnVzLT5waHlfaXJxOworCWJ1cy0+bWlpX2J1cy0+bmFtZSA9ICJtZGlvLW9jdGVvbiI7CisJc25wcmludGYoYnVzLT5taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBidXMtPnVuaXQpOworCWJ1cy0+bWlpX2J1cy0+cGFyZW50ID0gJnBkZXYtPmRldjsKKworCWJ1cy0+bWlpX2J1cy0+cmVhZCA9IG9jdGVvbl9tZGlvYnVzX3JlYWQ7CisJYnVzLT5taWlfYnVzLT53cml0ZSA9IG9jdGVvbl9tZGlvYnVzX3dyaXRlOworCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGJ1cyk7CisKKwllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cy0+bWlpX2J1cyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCisJcmV0dXJuIDA7CitlcnJfcmVnaXN0ZXI6CisJbWRpb2J1c19mcmVlKGJ1cy0+bWlpX2J1cyk7CisKK2VycjoKKwlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGJ1cyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2V4aXQgb2N0ZW9uX21kaW9idXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9jdGVvbl9tZGlvYnVzICpidXM7CisKKwlidXMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnVzLT5taWlfYnVzKTsKKwltZGlvYnVzX2ZyZWUoYnVzLT5taWlfYnVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2N0ZW9uX21kaW9idXNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJtZGlvLW9jdGVvbiIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBvY3Rlb25fbWRpb2J1c19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG9jdGVvbl9tZGlvYnVzX3JlbW92ZSksCit9OworCit2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpCit7CisJLyogTGV0IGV0aGVybmV0IGRyaXZlcnMgZm9yY2UgdXMgdG8gYmUgbG9hZGVkLiAgKi8KK30KK0VYUE9SVF9TWU1CT0wob2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3kpOworCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fbWRpb2J1c19tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9jdGVvbl9tZGlvYnVzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvY3Rlb25fbWRpb2J1c19tb2RfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvY3Rlb25fbWRpb2J1c19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvY3Rlb25fbWRpb2J1c19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChvY3Rlb25fbWRpb2J1c19tb2RfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FVVEhPUigiRGF2aWQgRGFuZXkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCmluZGV4IDUxMjNiYjkuLmVkMjY0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGIDI5IC8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KICNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JTSAgMzAgLyogSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9DVFJMX1NUQVRVUyAxNyAvKiBNb2RlL1N0YXR1cyBSZWdpc3RlciAqLwogCiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDEgKDE8PDEpIC8qIEF1dG8tTmVnb3RpYXRpb24gUGFnZSBSZWNlaXZlZCAqLwogI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQyICgxPDwyKSAvKiBQYXJhbGxlbCBEZXRlY3Rpb24gRmF1bHQgKi8KQEAgLTM3LDggKzM4LDEwIEBACiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVF9BTEwgKDB4MGUpCiAKICNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UX1BIWUxJQl9FVkVOVFMgXAotCShNSUlfTEFOODNDMTg1X0lTRl9JTlQ2IHwgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNCkKKwkoTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNiB8IE1JSV9MQU44M0MxODVfSVNGX0lOVDQgfCBcCisJIE1JSV9MQU44M0MxODVfSVNGX0lOVDcpCiAKKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9FRFBXUkRPV04JKDEgPDwgMTMpIC8qIEVEUFdSRE9XTiAqLwogCiBzdGF0aWMgaW50IHNtc2NfcGh5X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CkBAIC01OSw5ICs2MiwyMyBAQAogCiBzdGF0aWMgaW50IHNtc2NfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CisJaW50IHJjID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTEFOODNDMTg1X0NUUkxfU1RBVFVTKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBFbmFibGUgZW5lcmd5IGRldGVjdCBtb2RlIGZvciB0aGlzIFNNU0MgVHJhbnNjZWl2ZXJzICovCisJcmMgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTEFOODNDMTg1X0NUUkxfU1RBVFVTLAorCQkgICAgICAgcmMgfCBNSUlfTEFOODNDMTg1X0VEUFdSRE9XTik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCiAJcmV0dXJuIHNtc2NfcGh5X2Fja19pbnRlcnJ1cHQgKHBoeWRldik7CiB9CiAKK3N0YXRpYyBpbnQgbGFuOTExeF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXJldHVybiBzbXNjX3BoeV9hY2tfaW50ZXJydXB0KHBoeWRldik7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBsYW44M2MxODVfZHJpdmVyID0gewogCS5waHlfaWQJCT0gMHgwMDA3YzBhMCwgLyogT1VJPTB4MDA4MDBmLCBNb2RlbCM9MHgwYSAqLwpAQCAtMTQ3LDcgKzE2NCw3IEBACiAJLyogYmFzaWMgZnVuY3Rpb25zICovCiAJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKLQkuY29uZmlnX2luaXQJPSBzbXNjX3BoeV9jb25maWdfaW5pdCwKKwkuY29uZmlnX2luaXQJPSBsYW45MTF4X2NvbmZpZ19pbml0LAogCiAJLyogSVJRIHJlbGF0ZWQgKi8KIAkuYWNrX2ludGVycnVwdAk9IHNtc2NfcGh5X2Fja19pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKaW5kZXggZGQzNTA2Ni4uZjkyMjI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwpAQCAtNjEsNyArNjEsNyBAQAogbW9kdWxlX3BhcmFtKG1zaSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobXNpLCAiVHVybiBvbiBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBxbDN4eHhfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocWwzeHh4X3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTDMwMjJfREVWSUNFX0lEKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFFMMzAzMl9ERVZJQ0VfSUQpfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDg2MmMxYWEuLmVlMGUyYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC01NCwxMiArNTQsOCBAQAogI2RlZmluZSBSWF9SSU5HX1NIQURPV19TUEFDRQkoc2l6ZW9mKHU2NCkgKyBcCiAJCU1BWF9EQl9QQUdFU19QRVJfQlEoTlVNX1NNQUxMX0JVRkZFUlMpICogc2l6ZW9mKHU2NCkgKyBcCiAJCU1BWF9EQl9QQUdFU19QRVJfQlEoTlVNX0xBUkdFX0JVRkZFUlMpICogc2l6ZW9mKHU2NCkpCi0jZGVmaW5lIFNNQUxMX0JVRkZFUl9TSVpFIDUxMgotI2RlZmluZSBTTUFMTF9CVUZfTUFQX1NJWkUgKFNNQUxMX0JVRkZFUl9TSVpFIC8gMikKICNkZWZpbmUgTEFSR0VfQlVGRkVSX01BWF9TSVpFIDgxOTIKICNkZWZpbmUgTEFSR0VfQlVGRkVSX01JTl9TSVpFIDIwNDgKLSNkZWZpbmUgTUFYX1NQTElUX1NJWkUgMTAyMwotI2RlZmluZSBRTEdFX1NCX1BBRCAzMgogCiAjZGVmaW5lIE1BWF9DUSAxMjgKICNkZWZpbmUgREZMVF9DT0FMRVNDRV9XQUlUIDEwMAkvKiAxMDAgdXNlYyB3YWl0IGZvciBjb2FsZXNjaW5nICovCkBAIC03MzcsNiArNzMzLDIxIEBACiAJUFJCX01YX0RBVEEgPSAweGZjLAkvKiBVc2Ugc2VtYXBob3JlICovCiB9OwogCisjaWZkZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKKyNkZWZpbmUgU01BTExfQlVGRkVSX1NJWkUgMjU2CisjZGVmaW5lIFNNQUxMX0JVRl9NQVBfU0laRSBTTUFMTF9CVUZGRVJfU0laRQorI2RlZmluZSBTUExUX1NFVFRJTkcgIEZTQ19EQlJTVF8xMDI0CisjZGVmaW5lIFNQTFRfTEVOIDAKKyNkZWZpbmUgUUxHRV9TQl9QQUQgMAorI2Vsc2UKKyNkZWZpbmUgU01BTExfQlVGRkVSX1NJWkUgNTEyCisjZGVmaW5lIFNNQUxMX0JVRl9NQVBfU0laRSAoU01BTExfQlVGRkVSX1NJWkUgLyAyKQorI2RlZmluZSBTUExUX1NFVFRJTkcgIEZTQ19TSAorI2RlZmluZSBTUExUX0xFTiAoU1BMVF9IRFJfRVAgfCBcCisJbWluKFNNQUxMX0JVRl9NQVBfU0laRSwgMTAyMykpCisjZGVmaW5lIFFMR0VfU0JfUEFEIDMyCisjZW5kaWYKKwogLyoKICAqIENBTSBvdXRwdXQgZm9ybWF0LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwppbmRleCA3MDdiMzkxLi4xNjdhM2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKQEAgLTczLDcgKzczLDcgQEAKIG1vZHVsZV9wYXJhbShxbGdlX2lycV90eXBlLCBpbnQsIE1TSVhfSVJRKTsKIE1PRFVMRV9QQVJNX0RFU0MocWxnZV9pcnFfdHlwZSwgIjAgPSBNU0ktWCwgMSA9IE1TSSwgMiA9IExlZ2FjeS4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsZ2VfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocWxnZV9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtNDUyLDkgKzQ1Miw3IEBACiAJaWYgKHNldCkgewogCQlhZGRyID0gJnFkZXYtPm5kZXYtPmRldl9hZGRyWzBdOwogCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJIlNldCBNYWMgYWRkciAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCWFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sIGFkZHJbM10sCi0JCQlhZGRyWzRdLCBhZGRyWzVdKTsKKwkJCSJTZXQgTWFjIGFkZHIgJXBNXG4iLCBhZGRyKTsKIAl9IGVsc2UgewogCQltZW1zZXQoemVyb19tYWNfYWRkciwgMCwgRVRIX0FMRU4pOwogCQlhZGRyID0gJnplcm9fbWFjX2FkZHJbMF07CkBAIC0xNDMzLDYgKzE0MzEsMjU0IEBACiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCisvKiBQcm9jZXNzIGFuIGluYm91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCitzdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY19yeF9ncm9fcGFnZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCisJCQkJCXN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3AsCisJCQkJCXUzMiBsZW5ndGgsCisJCQkJCXUxNiB2bGFuX2lkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjID0gcWxfZ2V0X2N1cnJfbGNodW5rKHFkZXYsIHJ4X3JpbmcpOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnJ4X2ZyYWc7CisJaW50IG5yX2ZyYWdzOworCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZyeF9yaW5nLT5uYXBpOworCisJbmFwaS0+ZGV2ID0gcWRldi0+bmRldjsKKworCXNrYiA9IG5hcGlfZ2V0X2ZyYWdzKG5hcGkpOworCWlmICghc2tiKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJDb3VsZG4ndCBnZXQgYW4gc2tiLCBleGl0aW5nLlxuIik7CisJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKKwkJcHV0X3BhZ2UobGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSk7CisJCXJldHVybjsKKwl9CisJcHJlZmV0Y2gobGJxX2Rlc2MtPnAucGdfY2h1bmsudmEpOworCXJ4X2ZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlyeF9mcmFnICs9IG5yX2ZyYWdzOworCXJ4X2ZyYWctPnBhZ2UgPSBsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlOworCXJ4X2ZyYWctPnBhZ2Vfb2Zmc2V0ID0gbGJxX2Rlc2MtPnAucGdfY2h1bmsub2Zmc2V0OworCXJ4X2ZyYWctPnNpemUgPSBsZW5ndGg7CisKKwlza2ItPmxlbiArPSBsZW5ndGg7CisJc2tiLT5kYXRhX2xlbiArPSBsZW5ndGg7CisJc2tiLT50cnVlc2l6ZSArPSBsZW5ndGg7CisJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOworCisJcnhfcmluZy0+cnhfcGFja2V0cysrOworCXJ4X3JpbmctPnJ4X2J5dGVzICs9IGxlbmd0aDsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5jcV9pZCk7CisJaWYgKHFkZXYtPnZsZ3JwICYmICh2bGFuX2lkICE9IDB4ZmZmZikpCisJCXZsYW5fZ3JvX2ZyYWdzKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwgdmxhbl9pZCk7CisJZWxzZQorCQluYXBpX2dyb19mcmFncyhuYXBpKTsKK30KKworLyogUHJvY2VzcyBhbiBpbmJvdW5kIGNvbXBsZXRpb24gZnJvbSBhbiByeCByaW5nLiAqLworc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNfcnhfcGFnZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCisJCQkJCXN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3AsCisJCQkJCXUzMiBsZW5ndGgsCisJCQkJCXUxNiB2bGFuX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl2b2lkICphZGRyOworCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYyA9IHFsX2dldF9jdXJyX2xjaHVuayhxZGV2LCByeF9yaW5nKTsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcnhfcmluZy0+bmFwaTsKKworCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgbGVuZ3RoKTsKKwlpZiAoIXNrYikgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiQ291bGRuJ3QgZ2V0IGFuIHNrYiwgIgorCQkJCSJuZWVkIHRvIHVud2luZCEuXG4iKTsKKwkJcnhfcmluZy0+cnhfZHJvcHBlZCsrOworCQlwdXRfcGFnZShsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlKTsKKwkJcmV0dXJuOworCX0KKworCWFkZHIgPSBsYnFfZGVzYy0+cC5wZ19jaHVuay52YTsKKwlwcmVmZXRjaChhZGRyKTsKKworCisJLyogRnJhbWUgZXJyb3IsIHNvIGRyb3AgdGhlIHBhY2tldC4gKi8KKwlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX0VSUl9NQVNLKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJSZWNlaXZlIGVycm9yLCBmbGFnczIgPSAweCV4XG4iLAorCQkJCWliX21hY19yc3AtPmZsYWdzMik7CisJCXJ4X3JpbmctPnJ4X2Vycm9ycysrOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyogVGhlIG1heCBmcmFtZXNpemUgZmlsdGVyIG9uIHRoaXMgY2hpcCBpcyBzZXQgaGlnaGVyIHRoYW4KKwkgKiBNVFUgc2luY2UgRkNvRSB1c2VzIDJrIGZyYW1lcy4KKwkgKi8KKwlpZiAoc2tiLT5sZW4gPiBuZGV2LT5tdHUgKyBFVEhfSExFTikgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU2VnbWVudCB0b28gc21hbGwsIGRyb3BwaW5nLlxuIik7CisJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1jcHkoc2tiX3B1dChza2IsIEVUSF9ITEVOKSwgYWRkciwgRVRIX0hMRU4pOworCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKKwkJIiVkIGJ5dGVzIG9mIGhlYWRlcnMgYW5kIGRhdGEgaW4gbGFyZ2UuIENoYWluICIKKwkJInBhZ2UgdG8gbmV3IHNrYiBhbmQgcHVsbCB0YWlsLlxuIiwgbGVuZ3RoKTsKKwlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCAwLCBsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlLAorCQkJCWxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldCtFVEhfSExFTiwKKwkJCQlsZW5ndGgtRVRIX0hMRU4pOworCXNrYi0+bGVuICs9IGxlbmd0aC1FVEhfSExFTjsKKwlza2ItPmRhdGFfbGVuICs9IGxlbmd0aC1FVEhfSExFTjsKKwlza2ItPnRydWVzaXplICs9IGxlbmd0aC1FVEhfSExFTjsKKworCXJ4X3JpbmctPnJ4X3BhY2tldHMrKzsKKwlyeF9yaW5nLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwlpZiAocWRldi0+cnhfY3N1bSAmJgorCQkhKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19DU1VNX0VSUl9NQVNLKSkgeworCQkvKiBUQ1AgZnJhbWUuICovCisJCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVCkgeworCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAorCQkJCQkiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0gZWxzZSBpZiAoKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSAmJgorCQkJCShpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfVjQpKSB7CisJCQkvKiBVbmZyYWdtZW50ZWQgaXB2NCBVRFAgZnJhbWUuICovCisJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiLT5kYXRhOworCQkJaWYgKCEoaXBoLT5mcmFnX29mZiAmCisJCQkJY3B1X3RvX2JlMTYoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKKwkJCQkJCSJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJfQorCQl9CisJfQorCisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctPmNxX2lkKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwkJaWYgKHFkZXYtPnZsZ3JwICYmICh2bGFuX2lkICE9IDB4ZmZmZikpCisJCQl2bGFuX2dyb19yZWNlaXZlKG5hcGksIHFkZXYtPnZsZ3JwLCB2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CisJfSBlbHNlIHsKKwkJaWYgKHFkZXYtPnZsZ3JwICYmICh2bGFuX2lkICE9IDB4ZmZmZikpCisJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBxZGV2LT52bGdycCwgdmxhbl9pZCk7CisJCWVsc2UKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJfQorCXJldHVybjsKK2Vycl9vdXQ6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlwdXRfcGFnZShsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlKTsKK30KKworLyogUHJvY2VzcyBhbiBpbmJvdW5kIGNvbXBsZXRpb24gZnJvbSBhbiByeCByaW5nLiAqLworc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNfcnhfc2tiKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAorCQkJCQlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZywKKwkJCQkJc3RydWN0IGliX21hY19pb2NiX3JzcCAqaWJfbWFjX3JzcCwKKwkJCQkJdTMyIGxlbmd0aCwKKwkJCQkJdTE2IHZsYW5faWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gTlVMTDsKKwlzdHJ1Y3QgYnFfZGVzYyAqc2JxX2Rlc2MgPSBxbF9nZXRfY3Vycl9zYnVmKHJ4X3JpbmcpOworCisJc2tiID0gc2JxX2Rlc2MtPnAuc2tiOworCS8qIEFsbG9jYXRlIG5ld19za2IgYW5kIGNvcHkgKi8KKwluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LCBsZW5ndGggKyBORVRfSVBfQUxJR04pOworCWlmIChuZXdfc2tiID09IE5VTEwpIHsKKwkJUVBSSU5USyhxZGV2LCBQUk9CRSwgRVJSLAorCQkJIk5vIHNrYiBhdmFpbGFibGUsIGRyb3AgdGhlIHBhY2tldC5cbiIpOworCQlyeF9yaW5nLT5yeF9kcm9wcGVkKys7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKKwltZW1jcHkoc2tiX3B1dChuZXdfc2tiLCBsZW5ndGgpLCBza2ItPmRhdGEsIGxlbmd0aCk7CisJc2tiID0gbmV3X3NrYjsKKworCS8qIEZyYW1lIGVycm9yLCBzbyBkcm9wIHRoZSBwYWNrZXQuICovCisJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiUmVjZWl2ZSBlcnJvciwgZmxhZ3MyID0gMHgleFxuIiwKKwkJCQkJaWJfbWFjX3JzcC0+ZmxhZ3MyKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcnhfcmluZy0+cnhfZXJyb3JzKys7CisJCXJldHVybjsKKwl9CisKKwkvKiBsb29wYmFjayBzZWxmIHRlc3QgZm9yIGV0aHRvb2wgKi8KKwlpZiAodGVzdF9iaXQoUUxfU0VMRlRFU1QsICZxZGV2LT5mbGFncykpIHsKKwkJcWxfY2hlY2tfbGJfZnJhbWUocWRldiwgc2tiKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBtYXggZnJhbWVzaXplIGZpbHRlciBvbiB0aGlzIGNoaXAgaXMgc2V0IGhpZ2hlciB0aGFuCisJICogTVRVIHNpbmNlIEZDb0UgdXNlcyAyayBmcmFtZXMuCisJICovCisJaWYgKHNrYi0+bGVuID4gbmRldi0+bXR1ICsgRVRIX0hMRU4pIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcnhfcmluZy0+cnhfZHJvcHBlZCsrOworCQlyZXR1cm47CisJfQorCisJcHJlZmV0Y2goc2tiLT5kYXRhKTsKKwlza2ItPmRldiA9IG5kZXY7CisJaWYgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spIHsKKwkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiJXMlcyVzIE11bHRpY2FzdC5cbiIsCisJCQkoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCUlCX01BQ19JT0NCX1JTUF9NX0hBU0ggPyAiSGFzaCIgOiAiIiwKKwkJCShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQorCQkJSUJfTUFDX0lPQ0JfUlNQX01fUkVHID8gIlJlZ2lzdGVyZWQiIDogIiIsCisJCQkoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCUlCX01BQ19JT0NCX1JTUF9NX1BST00gPyAiUHJvbWlzY3VvdXMiIDogIiIpOworCX0KKwlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1ApCisJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIlByb21pc2N1b3VzIFBhY2tldC5cbiIpOworCisJcnhfcmluZy0+cnhfcGFja2V0cysrOworCXJ4X3JpbmctPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCS8qIElmIHJ4IGNoZWNrc3VtIGlzIG9uLCBhbmQgdGhlcmUgYXJlIG5vCisJICogY3N1bSBvciBmcmFtZSBlcnJvcnMuCisJICovCisJaWYgKHFkZXYtPnJ4X2NzdW0gJiYKKwkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKKwkJLyogVENQIGZyYW1lLiAqLworCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKKwkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKKwkJCQkJIlRDUCBjaGVja3N1bSBkb25lIVxuIik7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQl9IGVsc2UgaWYgKChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVSkgJiYKKwkJCQkoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX1Y0KSkgeworCQkJLyogVW5mcmFnbWVudGVkIGlwdjQgVURQIGZyYW1lLiAqLworCQkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopIHNrYi0+ZGF0YTsKKwkJCWlmICghKGlwaC0+ZnJhZ19vZmYgJgorCQkJCWNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCisJCQkJCQkiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcnhfcmluZy0+bmFwaSwgcWRldi0+dmxncnAsCisJCQkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOworCX0gZWxzZSB7CisJCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCX0KK30KKwogc3RhdGljIHZvaWQgcWxfcmVhbGlnbl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIHsKIAl2b2lkICp0ZW1wX2FkZHIgPSBza2ItPmRhdGE7CkBAIC0xNjQ2LDE0ICsxODkyLDEzIEBACiB9CiAKIC8qIFByb2Nlc3MgYW4gaW5ib3VuZCBjb21wbGV0aW9uIGZyb20gYW4gcnggcmluZy4gKi8KLXN0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3J4X2ludHIoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCitzdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY19zcGxpdF9yeF9pbnRyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCSAgIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nLAotCQkJCSAgIHN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3ApCisJCQkJICAgc3RydWN0IGliX21hY19pb2NiX3JzcCAqaWJfbWFjX3JzcCwKKwkJCQkgICB1MTYgdmxhbl9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JdTE2IHZsYW5faWQgPSAobGUxNl90b19jcHUoaWJfbWFjX3JzcC0+dmxhbl9pZCkgJgotCQkJSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSykKIAogCVFMX0RVTVBfSUJfTUFDX1JTUChpYl9tYWNfcnNwKTsKIApAQCAtMTc1Myw2ICsxOTk4LDY1IEBACiAJfQogfQogCisvKiBQcm9jZXNzIGFuIGluYm91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBxbF9wcm9jZXNzX21hY19yeF9pbnRyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAorCQkJCQlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZywKKwkJCQkJc3RydWN0IGliX21hY19pb2NiX3JzcCAqaWJfbWFjX3JzcCkKK3sKKwl1MzIgbGVuZ3RoID0gbGUzMl90b19jcHUoaWJfbWFjX3JzcC0+ZGF0YV9sZW4pOworCXUxNiB2bGFuX2lkID0gKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSA/CisJCQkoKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKKwkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spKSA6IDB4ZmZmZjsKKworCVFMX0RVTVBfSUJfTUFDX1JTUChpYl9tYWNfcnNwKTsKKworCWlmIChpYl9tYWNfcnNwLT5mbGFnczQgJiBJQl9NQUNfSU9DQl9SU1BfSFYpIHsKKwkJLyogVGhlIGRhdGEgYW5kIGhlYWRlcnMgYXJlIHNwbGl0IGludG8KKwkJICogc2VwYXJhdGUgYnVmZmVycy4KKwkJICovCisJCXFsX3Byb2Nlc3NfbWFjX3NwbGl0X3J4X2ludHIocWRldiwgcnhfcmluZywgaWJfbWFjX3JzcCwKKwkJCQkJCXZsYW5faWQpOworCX0gZWxzZSBpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX0RTKSB7CisJCS8qIFRoZSBkYXRhIGZpdCBpbiBhIHNpbmdsZSBzbWFsbCBidWZmZXIuCisJCSAqIEFsbG9jYXRlIGEgbmV3IHNrYiwgY29weSB0aGUgZGF0YSBhbmQKKwkJICogcmV0dXJuIHRoZSBidWZmZXIgdG8gdGhlIGZyZWUgcG9vbC4KKwkJICovCisJCXFsX3Byb2Nlc3NfbWFjX3J4X3NrYihxZGV2LCByeF9yaW5nLCBpYl9tYWNfcnNwLAorCQkJCQkJbGVuZ3RoLCB2bGFuX2lkKTsKKwl9IGVsc2UgaWYgKChpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfREwpICYmCisJCSEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0NTVU1fRVJSX01BU0spICYmCisJCShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVCkpIHsKKwkJLyogVENQIHBhY2tldCBpbiBhIHBhZ2UgY2h1bmsgdGhhdCdzIGJlZW4gY2hlY2tzdW1tZWQuCisJCSAqIFRhY2sgaXQgb24gdG8gb3VyIEdSTyBza2IgYW5kIGxldCBpdCBnby4KKwkJICovCisJCXFsX3Byb2Nlc3NfbWFjX3J4X2dyb19wYWdlKHFkZXYsIHJ4X3JpbmcsIGliX21hY19yc3AsCisJCQkJCQlsZW5ndGgsIHZsYW5faWQpOworCX0gZWxzZSBpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX0RMKSB7CisJCS8qIE5vbi1UQ1AgcGFja2V0IGluIGEgcGFnZSBjaHVuay4gQWxsb2NhdGUgYW4KKwkJICogc2tiLCB0YWNrIGl0IG9uIGZyYWdzLCBhbmQgc2VuZCBpdCB1cC4KKwkJICovCisJCXFsX3Byb2Nlc3NfbWFjX3J4X3BhZ2UocWRldiwgcnhfcmluZywgaWJfbWFjX3JzcCwKKwkJCQkJCWxlbmd0aCwgdmxhbl9pZCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOworCisJCS8qIEZyZWUgc21hbGwgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIElBTCAqLworCQlsYnFfZGVzYyA9IHFsX2dldF9jdXJyX3NidWYocnhfcmluZyk7CisJCVFQUklOVEsocWRldiwgUlhfRVJSLCBFUlIsICJEcm9wcGluZyBmcmFtZSwgbGVuICVkID4gbXR1ICVkXG4iLAorCQkJbGVuZ3RoLCBxZGV2LT5uZGV2LT5tdHUpOworCisJCS8qIFVud2luZCB0aGUgbGFyZ2UgYnVmZmVycyBmb3IgdGhpcyBmcmFtZS4gKi8KKwkJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJCWxicV9kZXNjID0gcWxfZ2V0X2N1cnJfbGNodW5rKHFkZXYsIHJ4X3JpbmcpOworCQkJbGVuZ3RoIC09IChsZW5ndGggPCByeF9yaW5nLT5sYnFfYnVmX3NpemUpID8KKwkJCQlsZW5ndGggOiByeF9yaW5nLT5sYnFfYnVmX3NpemU7CisJCQlwdXRfcGFnZShsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlKTsKKwkJfQorCX0KKworCXJldHVybiAodW5zaWduZWQgbG9uZylsZW5ndGg7Cit9CisKIC8qIFByb2Nlc3MgYW4gb3V0Ym91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCiBzdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY190eF9pbnRyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCSAgIHN0cnVjdCBvYl9tYWNfaW9jYl9yc3AgKm1hY19yc3ApCkBAIC0zMzMyLDE1ICszNjM2LDE1IEBACiAKIAkvKiBFbmFibGUgdGhlIGZ1bmN0aW9uLCBzZXQgcGFnZXNpemUsIGVuYWJsZSBlcnJvciBjaGVja2luZy4gKi8KIAl2YWx1ZSA9IEZTQ19GRSB8IEZTQ19FUENfSU5CT1VORCB8IEZTQ19FUENfT1VUQk9VTkQgfAotCSAgICBGU0NfRUMgfCBGU0NfVk1fUEFHRV80SyB8IEZTQ19TSDsKKwkgICAgRlNDX0VDIHwgRlNDX1ZNX1BBR0VfNEs7CisJdmFsdWUgfD0gU1BMVF9TRVRUSU5HOwogCiAJLyogU2V0L2NsZWFyIGhlYWRlciBzcGxpdHRpbmcuICovCiAJbWFzayA9IEZTQ19WTV9QQUdFU0laRV9NQVNLIHwKIAkgICAgRlNDX0RCTF9NQVNLIHwgRlNDX0RCUlNUX01BU0sgfCAodmFsdWUgPDwgMTYpOwogCXFsX3dyaXRlMzIocWRldiwgRlNDLCBtYXNrIHwgdmFsdWUpOwogCi0JcWxfd3JpdGUzMihxZGV2LCBTUExUX0hEUiwgU1BMVF9IRFJfRVAgfAotCQltaW4oU01BTExfQlVGX01BUF9TSVpFLCBNQVhfU1BMSVRfU0laRSkpOworCXFsX3dyaXRlMzIocWRldiwgU1BMVF9IRFIsIFNQTFRfTEVOKTsKIAogCS8qIFNldCBSWCBwYWNrZXQgcm91dGluZyB0byB1c2UgcG9ydC9wY2kgZnVuY3Rpb24gb24gd2hpY2ggdGhlCiAJICogcGFja2V0IGFycml2ZWQgb24gaW4gYWRkaXRpb24gdG8gdXN1YWwgZnJhbWUgcm91dGluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IGYwM2UyZTQuLmQ2OGJhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcjYwNDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHI2MDQwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JEQywgMHg2MDQwKSB9LAogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggYWNmYzVhMy4uYzFiYjI0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4KHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMDEoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTY5X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydGw4MTY5X3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODEyOSksIDAsIDAsIFJUTF9DRkdfMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODEzNiksIDAsIDAsIFJUTF9DRkdfMiB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODE2NyksIDAsIDAsIFJUTF9DRkdfMCB9LApAQCAtMzE4OCwxNSArMzE4OCwxMCBAQAogCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKSB7CiAJCXUzMiB4aWQgPSBSVExfUjMyKFR4Q29uZmlnKSAmIDB4OWNmMGY4ZmY7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0IDB4JWx4LCAiCi0JCSAgICAgICAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngsICIKLQkJICAgICAgICJYSUQgJTA4eCBJUlEgJWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCAweCVseCwgJXBNLCBYSUQgJTA4eCBJUlEgJWRcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsCiAJCSAgICAgICBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5uYW1lLAotCQkgICAgICAgZGV2LT5iYXNlX2FkZHIsCi0JCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLAotCQkgICAgICAgZGV2LT5kZXZfYWRkclsyXSwgZGV2LT5kZXZfYWRkclszXSwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0sIHhpZCwgZGV2LT5pcnEpOworCQkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsIHhpZCwgZGV2LT5pcnEpOwogCX0KIAogCXJ0bDgxNjlfaW5pdF9waHkoZGV2LCB0cCk7CkBAIC00ODU5LDcgKzQ4NTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcnRsODE2OV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnRsODE2OV9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSBydGw4MTY5X3N1c3BlbmQsCiAJLnJlc3VtZSA9IHJ0bDgxNjlfcmVzdW1lLAogCS5mcmVlemUgPSBydGw4MTY5X3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ycnVubmVyLmMgYi9kcml2ZXJzL25ldC9ycnVubmVyLmMKaW5kZXggMWMyNTcwOS4uMjY2YmFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcnJ1bm5lci5jCisrKyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuYwpAQCAtMTY4OCw3ICsxNjg4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBycl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnJfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0VTU0VOVElBTCwgUENJX0RFVklDRV9JRF9FU1NFTlRJQUxfUk9BRFJVTk5FUiwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IGNjNDIxODYuLmFjNjE4OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTUyMyw3ICs1MjMsNyBAQAogICogUzJJTyBkZXZpY2UgdGFibGUuCiAgKiBUaGlzIHRhYmxlIGxpc3RzIGFsbCB0aGUgZGV2aWNlcyB0aGF0IHRoaXMgZHJpdmVyIHN1cHBvcnRzLgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgczJpb190YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHMyaW9fdGJsKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX1MySU9fV0lOLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX1MySU9fVU5JLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCmluZGV4IGUzNTA1MDMuLmZkOGNiNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYworKysgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKQEAgLTE1ODksNyArMTU4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzYzkyMDMxX3BjaV9kZXZpY2VfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIDB4MjAzMSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHg4MTM5KSB9LAogCXsgUENJX0RFVklDRSgweDEwODgsIDB4MjAzMSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCAxMDNlOGIwLi42MmQ1Y2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBQQ0kgZGV2aWNlIElEIHRhYmxlICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZ4X3BjaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZWZ4X3BjaV90YWJsZSkgPSB7CiAJe1BDSV9ERVZJQ0UoRUZYX1ZFTkRJRF9TRkMsIEZBTENPTl9BX1BfREVWSUQpLAogCSAuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJmZhbGNvbl9hMV9uaWNfdHlwZX0sCiAJe1BDSV9ERVZJQ0UoRUZYX1ZFTkRJRF9TRkMsIEZBTENPTl9CX1BfREVWSUQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCA3NDAyYjg1Li40MmEzNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMTQ3MywxMyArMTQ3Myw5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAotCS8qIHByaXRudCBkZXZpY2UgaW5mb21hdGlvbiAqLwotCXByX2luZm8oIkJhc2UgYWRkcmVzcyBhdCAweCV4LCAiLAotCSAgICAgICAodTMyKW5kZXYtPmJhc2VfYWRkcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotCQlwcmludGsoIiUwMlg6IiwgbmRldi0+ZGV2X2FkZHJbaV0pOwotCXByaW50aygiJTAyWCwgSVJRICVkLlxuIiwgbmRldi0+ZGV2X2FkZHJbaV0sIG5kZXYtPmlycSk7CisJLyogcHJpbnQgZGV2aWNlIGluZm9tYXRpb24gKi8KKwlwcl9pbmZvKCJCYXNlIGFkZHJlc3MgYXQgMHgleCwgJXBNLCBJUlEgJWQuXG4iLAorCSAgICAgICAodTMyKW5kZXYtPmJhc2VfYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmlycSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzMTkwLmMgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwppbmRleCAzMTIzM2I0Li42MjZkZTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXMxOTAuYworKysgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJeyAiU2lTIDE5MSBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBhZGFwdGVyIiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczE5MF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2lzMTkwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCAweDAxOTApLCAwLCAwLCAwIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4MDE5MSksIDAsIDAsIDEgfSwKIAl7IDAsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IDczNjBkNGIuLjIwYzVjZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkiU2lTIDkwMCBQQ0kgRmFzdCBFdGhlcm5ldCIsCiAJIlNpUyA3MDE2IFBDSSBGYXN0IEV0aGVybmV0IgogfTsKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM5MDBfcGNpX3RibCBbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzaXM5MDBfcGNpX3RibCkgPSB7CiAJe1BDSV9WRU5ET1JfSURfU0ksIFBDSV9ERVZJQ0VfSURfU0lfOTAwLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBTSVNfOTAwfSwKIAl7UENJX1ZFTkRPUl9JRF9TSSwgUENJX0RFVklDRV9JRF9TSV83MDE2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggZGIyMTZhNy4uNmI5NTVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIGV4dGVybiB2b2lkIG1hY19kcnZfY2xlYXJfcnhfcXVldWUoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX3R4X2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBxdWV1ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza2ZkZGlfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNrZmRkaV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU0ssIFBDSV9ERVZJQ0VfSURfU0tfRlAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyB9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC00MzUsMTMgKzQzNSw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAJcmVhZF9hZGRyZXNzKHNtYywgTlVMTCk7Ci0JcHJfZGVidWcoS0VSTl9JTkZPICJIVy1BZGRyOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVswXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVsxXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVsyXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVszXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVs0XSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVs1XSk7CisJcHJfZGVidWcoS0VSTl9JTkZPICJIVy1BZGRyOiAlcE1GXG4iLCBzbWMtPmh3LmZkZGlfY2Fub25fYWRkci5hKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYSwgNik7CiAKIAlzbXRfcmVzZXRfZGVmYXVsdHMoc21jLCAwKTsKQEAgLTg5MCwxNSArODg0LDggQEAKIAkJCQkJCQkgIChzdHJ1Y3QgZmRkaV9hZGRyICopZG1pLT5kbWlfYWRkciwgCiAJCQkJCQkJICAxKTsKIAotCQkJCQlwcl9kZWJ1ZyhLRVJOX0lORk8gIkVOQUJMRSBNQyBBRERSRVNTOiIpOwotCQkJCQlwcl9kZWJ1ZygiICUwMnggJTAyeCAlMDJ4ICIsCi0JCQkJCSAgICAgICBkbWktPmRtaV9hZGRyWzBdLAotCQkJCQkgICAgICAgZG1pLT5kbWlfYWRkclsxXSwKLQkJCQkJICAgICAgIGRtaS0+ZG1pX2FkZHJbMl0pOwotCQkJCQlwcl9kZWJ1ZygiJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQkJCSAgICAgICBkbWktPmRtaV9hZGRyWzNdLAotCQkJCQkgICAgICAgZG1pLT5kbWlfYWRkcls0XSwKLQkJCQkJICAgICAgIGRtaS0+ZG1pX2FkZHJbNV0pOworCQkJCQlwcl9kZWJ1ZyhLRVJOX0lORk8gIkVOQUJMRSBNQyBBRERSRVNTOiAlcE1GXG4iLAorCQkJCQkJZG1pLT5kbWlfYWRkcik7CiAJCQkJCWRtaSA9IGRtaS0+bmV4dDsKIAkJCQl9CS8vIGZvcgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMzc5YTNkYy4uNWZmNDZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtNzgsNyArNzgsNyBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwPW5vbmUsLi4uLDE2PWFsbCkiKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNrZ2VfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShza2dlX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF8zQ09NLCBQQ0lfREVWSUNFX0lEXzNDT01fM0M5NDApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0NPTSwgUENJX0RFVklDRV9JRF8zQ09NXzNDOTQwQikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfR0UpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggMWMwMWI5Ni4uOGFlODUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMzE3Niw3ICszMTc2LDkgQEAKIHN0YXRpYyB2b2lkIHNreTJfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluZXRpZl90eF9sb2NrKGRldik7CiAJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsJLyogc3RvcCB0eHEgKi8KKwkJbmV0aWZfdHhfdW5sb2NrKGRldik7CiAJCXNreTJfZG93bihkZXYpOwogCX0KIH0KQEAgLTM4MzcsNiArMzgzOSw1MCBAQAogCXJldHVybiAweDQwMDA7CiB9CiAKK3N0YXRpYyBpbnQgc2t5Ml9yZWdfYWNjZXNzX29rKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgaW50IGIpCit7CisJLyogVGhpcyBjb21wbGljYXRlZCBzd2l0Y2ggc3RhdGVtZW50IGlzIHRvIG1ha2Ugc3VyZSBhbmQKKwkgKiBvbmx5IGFjY2VzcyByZWdpb25zIHRoYXQgYXJlIHVucmVzZXJ2ZWQuCisJICogU29tZSBibG9ja3MgYXJlIG9ubHkgdmFsaWQgb24gZHVhbCBwb3J0IGNhcmRzLgorCSAqLworCXN3aXRjaCAoYikgeworCS8qIHNlY29uZCBwb3J0ICovCisJY2FzZSA1OgkJLyogVHggQXJiaXRlciAyICovCisJY2FzZSA5OgkJLyogUlgyICovCisJY2FzZSAxNCAuLi4gMTU6CS8qIFRYMiAqLworCWNhc2UgMTc6IGNhc2UgMTk6IC8qIFJhbSBCdWZmZXIgMiAqLworCWNhc2UgMjIgLi4uIDIzOiAvKiBUeCBSYW0gQnVmZmVyIDIgKi8KKwljYXNlIDI1OgkvKiBSeCBNQUMgRmlmbyAxICovCisJY2FzZSAyNzoJLyogVHggTUFDIEZpZm8gMiAqLworCWNhc2UgMzE6CS8qIEdQSFkgMiAqLworCWNhc2UgNDAgLi4uIDQ3OiAvKiBQYXR0ZXJuIFJhbSAyICovCisJY2FzZSA1MjogY2FzZSA1NDogLyogVENQIFNlZ21lbnRhdGlvbiAyICovCisJY2FzZSAxMTIgLi4uIDExNjogLyogR01BQyAyICovCisJCXJldHVybiBody0+cG9ydHMgPiAxOworCisJY2FzZSAwOgkJLyogQ29udHJvbCAqLworCWNhc2UgMjoJCS8qIE1hYyBhZGRyZXNzICovCisJY2FzZSA0OgkJLyogVHggQXJiaXRlciAxICovCisJY2FzZSA3OgkJLyogUENJIGV4cHJlc3MgcmVnICovCisJY2FzZSA4OgkJLyogUlgxICovCisJY2FzZSAxMiAuLi4gMTM6IC8qIFRYMSAqLworCWNhc2UgMTY6IGNhc2UgMTg6LyogUnggUmFtIEJ1ZmZlciAxICovCisJY2FzZSAyMCAuLi4gMjE6IC8qIFR4IFJhbSBCdWZmZXIgMSAqLworCWNhc2UgMjQ6CS8qIFJ4IE1BQyBGaWZvIDEgKi8KKwljYXNlIDI2OgkvKiBUeCBNQUMgRmlmbyAxICovCisJY2FzZSAyOCAuLi4gMjk6IC8qIERlc2NyaXB0b3IgYW5kIHN0YXR1cyB1bml0ICovCisJY2FzZSAzMDoJLyogR1BIWSAxKi8KKwljYXNlIDMyIC4uLiAzOTogLyogUGF0dGVybiBSYW0gMSAqLworCWNhc2UgNDg6IGNhc2UgNTA6IC8qIFRDUCBTZWdtZW50YXRpb24gMSAqLworCWNhc2UgNTYgLi4uIDYwOgkvKiBQQ0kgc3BhY2UgKi8KKwljYXNlIDgwIC4uLiA4NDoJLyogR01BQyAxICovCisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiAvKgogICogUmV0dXJucyBjb3B5IG9mIGNvbnRyb2wgcmVnaXN0ZXIgcmVnaW9uCiAgKiBOb3RlOiBldGh0b29sX2dldF9yZWdzIGFsd2F5cyBwcm92aWRlcyBmdWxsIHNpemUgKDE2aykgYnVmZmVyCkBAIC0zODUxLDU1ICszODk3LDEzIEBACiAJcmVncy0+dmVyc2lvbiA9IDE7CiAKIAlmb3IgKGIgPSAwOyBiIDwgMTI4OyBiKyspIHsKLQkJLyogVGhpcyBjb21wbGljYXRlZCBzd2l0Y2ggc3RhdGVtZW50IGlzIHRvIG1ha2Ugc3VyZSBhbmQKLQkJICogb25seSBhY2Nlc3MgcmVnaW9ucyB0aGF0IGFyZSB1bnJlc2VydmVkLgotCQkgKiBTb21lIGJsb2NrcyBhcmUgb25seSB2YWxpZCBvbiBkdWFsIHBvcnQgY2FyZHMuCi0JCSAqIGFuZCBibG9jayAzIGhhcyBzb21lIHNwZWNpYWwgZGlhZ25vc3RpYyByZWdpc3RlcnMgdGhhdAotCQkgKiBhcmUgcG9pc29uLgotCQkgKi8KLQkJc3dpdGNoIChiKSB7Ci0JCWNhc2UgMzoKLQkJCS8qIHNraXAgZGlhZ25vc3RpYyByYW0gcmVnaW9uICovCisJCS8qIHNraXAgcG9pc29ub3VzIGRpYWdub3N0aWMgcmFtIHJlZ2lvbiBpbiBibG9jayAzICovCisJCWlmIChiID09IDMpCiAJCQltZW1jcHlfZnJvbWlvKHAgKyAweDEwLCBpbyArIDB4MTAsIDEyOCAtIDB4MTApOwotCQkJYnJlYWs7Ci0KLQkJLyogZHVhbCBwb3J0IGNhcmRzIG9ubHkgKi8KLQkJY2FzZSA1OgkJLyogVHggQXJiaXRlciAyICovCi0JCWNhc2UgOTogCS8qIFJYMiAqLwotCQljYXNlIDE0IC4uLiAxNToJLyogVFgyICovCi0JCWNhc2UgMTc6IGNhc2UgMTk6IC8qIFJhbSBCdWZmZXIgMiAqLwotCQljYXNlIDIyIC4uLiAyMzogLyogVHggUmFtIEJ1ZmZlciAyICovCi0JCWNhc2UgMjU6IAkvKiBSeCBNQUMgRmlmbyAxICovCi0JCWNhc2UgMjc6IAkvKiBUeCBNQUMgRmlmbyAyICovCi0JCWNhc2UgMzE6CS8qIEdQSFkgMiAqLwotCQljYXNlIDQwIC4uLiA0NzogLyogUGF0dGVybiBSYW0gMiAqLwotCQljYXNlIDUyOiBjYXNlIDU0OiAvKiBUQ1AgU2VnbWVudGF0aW9uIDIgKi8KLQkJY2FzZSAxMTIgLi4uIDExNjogLyogR01BQyAyICovCi0JCQlpZiAoc2t5Mi0+aHctPnBvcnRzID09IDEpCi0JCQkJZ290byByZXNlcnZlZDsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIDA6CQkvKiBDb250cm9sICovCi0JCWNhc2UgMjoJCS8qIE1hYyBhZGRyZXNzICovCi0JCWNhc2UgNDoJCS8qIFR4IEFyYml0ZXIgMSAqLwotCQljYXNlIDc6CQkvKiBQQ0kgZXhwcmVzcyByZWcgKi8KLQkJY2FzZSA4OgkJLyogUlgxICovCi0JCWNhc2UgMTIgLi4uIDEzOiAvKiBUWDEgKi8KLQkJY2FzZSAxNjogY2FzZSAxODovKiBSeCBSYW0gQnVmZmVyIDEgKi8KLQkJY2FzZSAyMCAuLi4gMjE6IC8qIFR4IFJhbSBCdWZmZXIgMSAqLwotCQljYXNlIDI0OiAJLyogUnggTUFDIEZpZm8gMSAqLwotCQljYXNlIDI2OiAJLyogVHggTUFDIEZpZm8gMSAqLwotCQljYXNlIDI4IC4uLiAyOTogLyogRGVzY3JpcHRvciBhbmQgc3RhdHVzIHVuaXQgKi8KLQkJY2FzZSAzMDoJLyogR1BIWSAxKi8KLQkJY2FzZSAzMiAuLi4gMzk6IC8qIFBhdHRlcm4gUmFtIDEgKi8KLQkJY2FzZSA0ODogY2FzZSA1MDogLyogVENQIFNlZ21lbnRhdGlvbiAxICovCi0JCWNhc2UgNTYgLi4uIDYwOgkvKiBQQ0kgc3BhY2UgKi8KLQkJY2FzZSA4MCAuLi4gODQ6CS8qIEdNQUMgMSAqLworCQllbHNlIGlmIChza3kyX3JlZ19hY2Nlc3Nfb2soc2t5Mi0+aHcsIGIpKQogCQkJbWVtY3B5X2Zyb21pbyhwLCBpbywgMTI4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotcmVzZXJ2ZWQ6CisJCWVsc2UKIAkJCW1lbXNldChwLCAwLCAxMjgpOwotCQl9CiAKIAkJcCArPSAxMjg7CiAJCWlvICs9IDEyODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwppbmRleCA0NGViYmFhLi4zYzVhNGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCkBAIC0yMDE3LDEwICsyMDE3LDggQEAKIAkJCQkJInNldCB1c2luZyBpZmNvbmZpZ1xuIiwgZGV2LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFByaW50IHRoZSBFdGhlcm5ldCBhZGRyZXNzICovCi0JCQlwcmludGsoIiVzOiBFdGhlcm5ldCBhZGRyOiAiLCBkZXYtPm5hbWUpOwotCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJCQlwcmludGsoIiUyLjJ4OiIsIGRldi0+ZGV2X2FkZHJbaV0pOwotCQkJcHJpbnRrKCIlMi4yeFxuIiwgZGV2LT5kZXZfYWRkcls1XSk7CisJCQlwcmludGsoIiVzOiBFdGhlcm5ldCBhZGRyOiAlcE1cbiIsCisJCQkJZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKIAkJfQogCiAJCWlmIChscC0+cGh5X3R5cGUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCA3ODE1YmZjLi41NDc5OTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMjA2LDIxICsyMDYsNiBAQAogCX0KIH0KIAotI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQKQotCi0vKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KLSNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkwCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAotI2RlZmluZSBTTUNfSU9fU0hJRlQJCTAKLSNkZWZpbmUgU01DX05PV0FJVAkJMQotCi0jZGVmaW5lIFNNQ19pbncoYSwgcikJCXJlYWR3KChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJcmVhZHN3KChhKSArIChyKSwgcCwgbCkKLSNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCXdyaXRlc3coKGEpICsgKHIpLCBwLCBsKQotI2RlZmluZQlTTUNfSVJRX0ZMQUdTCQkoLTEpCS8qIGZyb20gcmVzb3VyY2UgKi8KLQogI2VsaWYJZGVmaW5lZChDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWKQogCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggMjBkNjA5NS4uNDk0Y2Q5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0yMTU0LDcgKzIxNTQsNyBAQAogCXJldHVybiAodG8gPT0gMCkgPyAtRUlPIDogMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNtc2M5MTF4X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzbXNjOTExeF9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBzbXNjOTExeF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc21zYzkxMXhfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IDEyZjBmNWQuLjE0OTVhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtODAsNyArODAsNyBAQAogCWludCBsYXN0X2NhcnJpZXI7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc21zYzk0MjBfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbXNjOTQyMF9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEXzk0MjAsIFBDSV9ERVZJQ0VfSURfOTQyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggMjE4NTI0OC4uMTYxOTE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtNzIsNyArNzIsNyBAQAogCiBjaGFyIHNwaWRlcl9uZXRfZHJpdmVyX25hbWVbXSA9ICJzcGlkZXJuZXQiOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3BpZGVyX25ldF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc3BpZGVyX25ldF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU1BJREVSX05FVCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKaW5kZXggOTVkYjYwYS4uYzgxMjUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYworKysgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIAlDSF82OTE1ID0gMCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdGFyZmlyZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc3RhcmZpcmVfcGNpX3RibCkgPSB7CiAJeyAweDkwMDQsIDB4NjkxNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfNjkxNSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKaW5kZXggMzVlYWE1Mi4uZmIyODc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKQEAgLTQsOCArNCw5IEBACiAJc2VsZWN0IFBIWUxJQgogCWRlcGVuZHMgb24gTkVUREVWSUNFUyAmJiBDUFVfU1VCVFlQRV9TVDQwCiAJaGVscAotCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU1QgTUFDIDEwLzEwMC8xMDAwIG9uLWNoaXAgRXRoZXJuZXQKLQkgIGNvbnRyb2xsZXJzLiBTVCBFdGhlcm5ldCBJUHMgYXJlIGJ1aWx0IGFyb3VuZCBhIFN5bm9wc3lzIElQIENvcmUuCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYXJlIGJ1aWx0IGFyb3VuZCBhCisJICBTeW5vcHN5cyBJUCBDb3JlIGFuZCBmdWxseSB0ZXN0ZWQgb24gdGhlIFNUTWljcm9lbGVjdHJvbmljcworCSAgcGxhdGZvcm1zLgogCiBpZiBTVE1NQUNfRVRICiAKQEAgLTMyLDcgKzMzLDggQEAKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBVc2UgYW4gZXh0ZXJuYWwgdGltZXIgZm9yIG1pdGlnYXRpbmcgdGhlIG51bWJlciBvZiBuZXR3b3JrCi0JICBpbnRlcnJ1cHRzLgorCSAgaW50ZXJydXB0cy4gQ3VycmVudGx5LCBmb3IgU0ggYXJjaGl0ZWN0dXJlcywgaXQgaXMgcG9zc2libGUKKwkgIHRvIHVzZSB0aGUgVE1VIGNoYW5uZWwgMiBhbmQgdGhlIFNILVJUQyBkZXZpY2UuCiAKIGNob2ljZQogICAgICAgICBwcm9tcHQgIlNlbGVjdCBUaW1lciBkZXZpY2UiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUKaW5kZXggYjJkN2E1NS4uYzc3NmFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19TVE1NQUNfRVRIKSArPSBzdG1tYWMubwogc3RtbWFjLSQoQ09ORklHX1NUTU1BQ19USU1FUikgKz0gc3RtbWFjX3RpbWVyLm8KLXN0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gXAotCQltYWMxMDAubyAgZ21hYy5vICQoc3RtbWFjLXkpCitzdG1tYWMtb2Jqczo9IHN0bW1hY19tYWluLm8gc3RtbWFjX2V0aHRvb2wubyBzdG1tYWNfbWRpby5vCVwKKwkgICAgICBkd21hY19saWIubyBkd21hYzEwMDBfY29yZS5vICBkd21hYzEwMDBfZG1hLm8JXAorCSAgICAgIGR3bWFjMTAwLm8gJChzdG1tYWMteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaAppbmRleCBlNDllNTE4Li43MjY3YmNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaApAQCAtMjMsMTMyICsyMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZGVzY3MuaCIKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIERNQSBDUlMgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIE1hcHBpbmcKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFCQkweDAwMDAxMDAwCS8qIEJ1cyBNb2RlICovCi0jZGVmaW5lIERNQV9YTVRfUE9MTF9ERU1BTkQJMHgwMDAwMTAwNAkvKiBUcmFuc21pdCBQb2xsIERlbWFuZCAqLwotI2RlZmluZSBETUFfUkNWX1BPTExfREVNQU5ECTB4MDAwMDEwMDgJLyogUmVjZWl2ZWQgUG9sbCBEZW1hbmQgKi8KLSNkZWZpbmUgRE1BX1JDVl9CQVNFX0FERFIJMHgwMDAwMTAwYwkvKiBSZWNlaXZlIExpc3QgQmFzZSAqLwotI2RlZmluZSBETUFfVFhfQkFTRV9BRERSCTB4MDAwMDEwMTAJLyogVHJhbnNtaXQgTGlzdCBCYXNlICovCi0jZGVmaW5lIERNQV9TVEFUVVMJCTB4MDAwMDEwMTQJLyogU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIERNQV9DT05UUk9MCQkweDAwMDAxMDE4CS8qIEN0cmwgKE9wZXJhdGlvbmFsIE1vZGUpICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQQkJMHgwMDAwMTAxYwkvKiBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfQ1RSCTB4MDAwMDEwMjAJLyogTWlzc2VkIEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgRE1BX0NVUl9UWF9CVUZfQUREUgkweDAwMDAxMDUwCS8qIEN1cnJlbnQgSG9zdCBUeCBCdWZmZXIgKi8KLSNkZWZpbmUgRE1BX0NVUl9SWF9CVUZfQUREUgkweDAwMDAxMDU0CS8qIEN1cnJlbnQgSG9zdCBSeCBCdWZmZXIgKi8KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBETUFfQ09OVFJPTF9TVAkJMHgwMDAwMjAwMAkvKiBTdGFydC9TdG9wIFRyYW5zbWlzc2lvbiAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9TUgkJMHgwMDAwMDAwMgkvKiBTdGFydC9TdG9wIFJlY2VpdmUgKi8KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIERNQSBJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyIGRlZmluZXMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKiogTk9STUFMIElOVEVSUlVQVCAqKioqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfTklFIDB4MDAwMTAwMDAJLyogTm9ybWFsIFN1bW1hcnkgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1RJRSAweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEludGVycnVwdCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfVFVFIDB4MDAwMDAwMDQJLyogVHJhbnNtaXQgQnVmZmVyIFVuYXZhaWxhYmxlICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9SSUUgMHgwMDAwMDA0MAkvKiBSZWNlaXZlIEludGVycnVwdCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfRVJFIDB4MDAwMDQwMDAJLyogRWFybHkgUmVjZWl2ZSAqLwotCi0jZGVmaW5lIERNQV9JTlRSX05PUk1BTAkoRE1BX0lOVFJfRU5BX05JRSB8IERNQV9JTlRSX0VOQV9SSUUgfCBcCi0JCQlETUFfSU5UUl9FTkFfVElFKQotCi0vKioqKiBBQk5PUk1BTCBJTlRFUlJVUFQgKioqKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX0FJRSAweDAwMDA4MDAwCS8qIEFibm9ybWFsIFN1bW1hcnkgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX0ZCRSAweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfRVRFIDB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1JXRSAweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1JTRSAweDAwMDAwMTAwCS8qIFJlY2VpdmUgU3RvcHBlZCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfUlVFIDB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1VORSAweDAwMDAwMDIwCS8qIFR4IFVuZGVyZmxvdyAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfT1ZFIDB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfVEpFIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9UU0UgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBTdG9wcGVkICovCi0KLSNkZWZpbmUgRE1BX0lOVFJfQUJOT1JNQUwJKERNQV9JTlRSX0VOQV9BSUUgfCBETUFfSU5UUl9FTkFfRkJFIHwgXAotCQkJCURNQV9JTlRSX0VOQV9VTkUpCi0KLS8qIERNQSBkZWZhdWx0IGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lIERNQV9JTlRSX0RFRkFVTFRfTUFTSwkoRE1BX0lOVFJfTk9STUFMIHwgRE1BX0lOVFJfQUJOT1JNQUwpCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBETUEgU3RhdHVzIHJlZ2lzdGVyIGRlZmluZXMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIERNQV9TVEFUVVNfR1BJCQkweDEwMDAwMDAwCS8qIFBNVCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAJLyogTU1DIGludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX0dMSQkJMHgwNDAwMDAwMAkvKiBHTUFDIExpbmUgaW50ZXJmYWNlIGludC4gKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAKLSNkZWZpbmUgRE1BX1NUQVRVU19FQl9NQVNLCTB4MDAzODAwMDAJLyogRXJyb3IgQml0cyBNYXNrICovCi0jZGVmaW5lIERNQV9TVEFUVVNfRUJfVFhfQUJPUlQJMHgwMDA4MDAwMAkvKiBFcnJvciBCaXRzIC0gVFggQWJvcnQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19FQl9SWF9BQk9SVAkweDAwMTAwMDAwCS8qIEVycm9yIEJpdHMgLSBSWCBBYm9ydCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RTX01BU0sJMHgwMDcwMDAwMAkvKiBUcmFuc21pdCBQcm9jZXNzIFN0YXRlICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVFNfU0hJRlQJMjAKLSNkZWZpbmUgRE1BX1NUQVRVU19SU19NQVNLCTB4MDAwZTAwMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0YXRlICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUlNfU0hJRlQJMTcKLSNkZWZpbmUgRE1BX1NUQVRVU19OSVMJMHgwMDAxMDAwMAkvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19BSVMJMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLwotI2RlZmluZSBETUFfU1RBVFVTX0VSSQkweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfRkJJCTB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yIEludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX0VUSQkweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0IEludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1JXVAkweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgVGltZW91dCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1JQUwkweDAwMDAwMTAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdG9wcGVkICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUlUJMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLwotI2RlZmluZSBETUFfU1RBVFVTX1JJCTB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19VTkYJMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBVbmRlcmZsb3cgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19PVkYJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVEpUCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyIFRpbWVvdXQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19UVQkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RQUwkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RvcHBlZCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCi0KLS8qIE90aGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgSEFTSF9UQUJMRV9TSVpFIDY0Ci0jZGVmaW5lIFBBVVNFX1RJTUUgMHgyMDAKLQotLyogRmxvdyBDb250cm9sIGRlZmluZXMgKi8KLSNkZWZpbmUgRkxPV19PRkYJMAotI2RlZmluZSBGTE9XX1JYCQkxCi0jZGVmaW5lIEZMT1dfVFgJCTIKLSNkZWZpbmUgRkxPV19BVVRPCShGTE9XX1RYIHwgRkxPV19SWCkKLQotLyogRE1BIFNUT1JFLUFORC1GT1JXQVJEIE9wZXJhdGlvbiBNb2RlICovCi0jZGVmaW5lIFNGX0RNQV9NT0RFIDEKLQotI2RlZmluZSBIV19DU1VNIDEKLSNkZWZpbmUgTk9fSFdfQ1NVTSAwCi0KLS8qIEdNQUMgVFggRklGTyBpcyA4SywgUnggRklGTyBpcyAxNksgKi8KLSNkZWZpbmUgQlVGX1NJWkVfMTZLaUIgMTYzODQKLSNkZWZpbmUgQlVGX1NJWkVfOEtpQiA4MTkyCi0jZGVmaW5lIEJVRl9TSVpFXzRLaUIgNDA5NgotI2RlZmluZSBCVUZfU0laRV8yS2lCIDIwNDgKLQotLyogUG93ZXIgRG93biBhbmQgV09MICovCi0jZGVmaW5lIFBNVF9OT1RfU1VQUE9SVEVEIDAKLSNkZWZpbmUgUE1UX1NVUFBPUlRFRCAxCi0KLS8qIENvbW1vbiBNQUMgZGVmaW5lcyAqLwotI2RlZmluZSBNQUNfQ1RSTF9SRUcJCTB4MDAwMDAwMDAJLyogTUFDIENvbnRyb2wgKi8KLSNkZWZpbmUgTUFDX0VOQUJMRV9UWAkJMHgwMDAwMDAwOAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KLSNkZWZpbmUgTUFDX1JOQUJMRV9SWAkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlciBFbmFibGUgKi8KLQotLyogTUFDIE1hbmFnZW1lbnQgQ291bnRlcnMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTU1DX0NPTlRST0wJCTB4MDAwMDAxMDAJLyogTU1DIENvbnRyb2wgKi8KLSNkZWZpbmUgTU1DX0hJR0hfSU5UUgkJMHgwMDAwMDEwNAkvKiBNTUMgSGlnaCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTU1DX0xPV19JTlRSCQkweDAwMDAwMTA4CS8qIE1NQyBMb3cgSW50ZXJydXB0ICovCi0jZGVmaW5lIE1NQ19ISUdIX0lOVFJfTUFTSwkweDAwMDAwMTBjCS8qIE1NQyBIaWdoIEludGVycnVwdCBNYXNrICovCi0jZGVmaW5lIE1NQ19MT1dfSU5UUl9NQVNLCTB4MDAwMDAxMTAJLyogTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAqLwotCi0jZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fTUFTSwkweDAwMDNmZjgJLyogTWF4aW11bSBGcmFtZSBTaXplICovCi0jZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fU0hJRlQJMwotI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJBTUUJCTB4N0ZGCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAKIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgewogCS8qIFRyYW5zbWl0IGVycm9ycyAqLwpAQCAtMTk4LDY2ICs3Myw2MiBAQAogCXVuc2lnbmVkIGxvbmcgbm9ybWFsX2lycV9uOwogfTsKIAotLyogR01BQyBjb3JlIGNhbiBjb21wdXRlIHRoZSBjaGVja3N1bXMgaW4gSFcuICovCi1lbnVtIHJ4X2ZyYW1lX3N0YXR1cyB7CisjZGVmaW5lIEhBU0hfVEFCTEVfU0laRSA2NAorI2RlZmluZSBQQVVTRV9USU1FIDB4MjAwCisKKy8qIEZsb3cgQ29udHJvbCBkZWZpbmVzICovCisjZGVmaW5lIEZMT1dfT0ZGCTAKKyNkZWZpbmUgRkxPV19SWAkJMQorI2RlZmluZSBGTE9XX1RYCQkyCisjZGVmaW5lIEZMT1dfQVVUTwkoRkxPV19UWCB8IEZMT1dfUlgpCisKKyNkZWZpbmUgU0ZfRE1BX01PREUgMSAvKiBETUEgU1RPUkUtQU5ELUZPUldBUkQgT3BlcmF0aW9uIE1vZGUgKi8KKworI2RlZmluZSBIV19DU1VNIDEKKyNkZWZpbmUgTk9fSFdfQ1NVTSAwCitlbnVtIHJ4X2ZyYW1lX3N0YXR1cyB7IC8qIElQQyBzdGF0dXMgKi8KIAlnb29kX2ZyYW1lID0gMCwKIAlkaXNjYXJkX2ZyYW1lID0gMSwKIAljc3VtX25vbmUgPSAyLAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19zZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHU4IGFkZHJbNl0sCi0JCQkgdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpCi17Ci0JdW5zaWduZWQgbG9uZyBkYXRhOworZW51bSB0eF9kbWFfaXJxX3N0YXR1cyB7CisJdHhfaGFyZF9lcnJvciA9IDEsCisJdHhfaGFyZF9lcnJvcl9idW1wX3RjID0gMiwKKwloYW5kbGVfdHhfcnggPSAzLAorfTsKIAotCWRhdGEgPSAoYWRkcls1XSA8PCA4KSB8IGFkZHJbNF07Ci0Jd3JpdGVsKGRhdGEsIGlvYWRkciArIGhpZ2gpOwotCWRhdGEgPSAoYWRkclszXSA8PCAyNCkgfCAoYWRkclsyXSA8PCAxNikgfCAoYWRkclsxXSA8PCA4KSB8IGFkZHJbMF07Ci0Jd3JpdGVsKGRhdGEsIGlvYWRkciArIGxvdyk7CisvKiBHTUFDIFRYIEZJRk8gaXMgOEssIFJ4IEZJRk8gaXMgMTZLICovCisjZGVmaW5lIEJVRl9TSVpFXzE2S2lCIDE2Mzg0CisjZGVmaW5lIEJVRl9TSVpFXzhLaUIgODE5MgorI2RlZmluZSBCVUZfU0laRV80S2lCIDQwOTYKKyNkZWZpbmUgQlVGX1NJWkVfMktpQiAyMDQ4CiAKLQlyZXR1cm47Ci19CisvKiBQb3dlciBEb3duIGFuZCBXT0wgKi8KKyNkZWZpbmUgUE1UX05PVF9TVVBQT1JURUQgMAorI2RlZmluZSBQTVRfU1VQUE9SVEVEIDEKIAotc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19nZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsCi0JCQkJdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGhpZ2gsCi0JCQkJdW5zaWduZWQgaW50IGxvdykKLXsKLQl1bnNpZ25lZCBpbnQgaGlfYWRkciwgbG9fYWRkcjsKKy8qIENvbW1vbiBNQUMgZGVmaW5lcyAqLworI2RlZmluZSBNQUNfQ1RSTF9SRUcJCTB4MDAwMDAwMDAJLyogTUFDIENvbnRyb2wgKi8KKyNkZWZpbmUgTUFDX0VOQUJMRV9UWAkJMHgwMDAwMDAwOAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgTUFDX1JOQUJMRV9SWAkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlciBFbmFibGUgKi8KIAotCS8qIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIGhhcmR3YXJlICovCi0JaGlfYWRkciA9IHJlYWRsKGlvYWRkciArIGhpZ2gpOwotCWxvX2FkZHIgPSByZWFkbChpb2FkZHIgKyBsb3cpOworLyogTUFDIE1hbmFnZW1lbnQgQ291bnRlcnMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1DX0NPTlRST0wJCTB4MDAwMDAxMDAJLyogTU1DIENvbnRyb2wgKi8KKyNkZWZpbmUgTU1DX0hJR0hfSU5UUgkJMHgwMDAwMDEwNAkvKiBNTUMgSGlnaCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTU1DX0xPV19JTlRSCQkweDAwMDAwMTA4CS8qIE1NQyBMb3cgSW50ZXJydXB0ICovCisjZGVmaW5lIE1NQ19ISUdIX0lOVFJfTUFTSwkweDAwMDAwMTBjCS8qIE1NQyBIaWdoIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIE1NQ19MT1dfSU5UUl9NQVNLCTB4MDAwMDAxMTAJLyogTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAqLwogCi0JLyogRXh0cmFjdCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGlnaCBhbmQgbG93IHdvcmRzICovCi0JYWRkclswXSA9IGxvX2FkZHIgJiAweGZmOwotCWFkZHJbMV0gPSAobG9fYWRkciA+PiA4KSAmIDB4ZmY7Ci0JYWRkclsyXSA9IChsb19hZGRyID4+IDE2KSAmIDB4ZmY7Ci0JYWRkclszXSA9IChsb19hZGRyID4+IDI0KSAmIDB4ZmY7Ci0JYWRkcls0XSA9IGhpX2FkZHIgJiAweGZmOwotCWFkZHJbNV0gPSAoaGlfYWRkciA+PiA4KSAmIDB4ZmY7CisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fTUFTSwkweDAwMDNmZjgJLyogTWF4aW11bSBGcmFtZSBTaXplICovCisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fU0hJRlQJMworI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJBTUUJCTB4N0ZGCiAKLQlyZXR1cm47Ci19Ci0KLXN0cnVjdCBzdG1tYWNfb3BzIHsKLQkvKiBNQUMgY29yZSBpbml0aWFsaXphdGlvbiAqLwotCXZvaWQgKCpjb3JlX2luaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkcikgX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCS8qIERNQSBjb3JlIGluaXRpYWxpemF0aW9uICovCi0JaW50ICgqZG1hX2luaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCk7Ci0JLyogRHVtcCBNQUMgcmVnaXN0ZXJzICovCi0Jdm9pZCAoKmR1bXBfbWFjX3JlZ3MpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7Ci0JLyogRHVtcCBETUEgcmVnaXN0ZXJzICovCi0Jdm9pZCAoKmR1bXBfZG1hX3JlZ3MpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7Ci0JLyogU2V0IHR4L3J4IHRocmVzaG9sZCBpbiB0aGUgY3NyNiByZWdpc3RlcgotCSAqIEFuIGludmFsaWQgdmFsdWUgZW5hYmxlcyB0aGUgc3RvcmUtYW5kLWZvcndhcmQgbW9kZSAqLwotCXZvaWQgKCpkbWFfbW9kZSkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLCBpbnQgcnhtb2RlKTsKLQkvKiBUbyB0cmFjayBleHRyYSBzdGF0aXN0aWMgKGlmIHN1cHBvcnRlZCkgKi8KLQl2b2lkICgqZG1hX2RpYWdub3N0aWNfZnIpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKLQkvKiBSWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KK3N0cnVjdCBzdG1tYWNfZGVzY19vcHMgeworCS8qIERNQSBSWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KIAl2b2lkICgqaW5pdF9yeF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplLAotCQkJCWludCBkaXNhYmxlX3J4X2ljKTsKLQkvKiBUWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KKwkJCSAgICAgIGludCBkaXNhYmxlX3J4X2ljKTsKKwkvKiBETUEgVFggZGVzY3JpcHRvciByaW5nIGluaXRpYWxpemF0aW9uICovCiAJdm9pZCAoKmluaXRfdHhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSk7CiAKIAkvKiBJbnZva2VkIGJ5IHRoZSB4bWl0IGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIHR4IGRlc2NyaXB0b3IgKi8KQEAgLTI4MSw3ICsxNTIsNiBAQAogCS8qIEdldCB0aGUgYnVmZmVyIHNpemUgZnJvbSB0aGUgZGVzY3JpcHRvciAqLwogCWludCAoKmdldF90eF9sZW4pIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOwogCS8qIEhhbmRsZSBleHRyYSBldmVudHMgb24gc3BlY2lmaWMgaW50ZXJydXB0cyBodyBkZXBlbmRlbnQgKi8KLQl2b2lkICgqaG9zdF9pcnFfc3RhdHVzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOwogCWludCAoKmdldF9yeF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CiAJdm9pZCAoKnNldF9yeF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CiAJLyogR2V0IHRoZSByZWNlaXZlIGZyYW1lIHNpemUgKi8KQEAgLTI4OSw2ICsxNTksMzcgQEAKIAkvKiBSZXR1cm4gdGhlIHJlY2VwdGlvbiBzdGF0dXMgbG9va2luZyBhdCB0aGUgUkRFUzEgKi8KIAlpbnQgKCpyeF9zdGF0dXMpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAogCQkJICBzdHJ1Y3QgZG1hX2Rlc2MgKnApOworfTsKKworc3RydWN0IHN0bW1hY19kbWFfb3BzIHsKKwkvKiBETUEgY29yZSBpbml0aWFsaXphdGlvbiAqLworCWludCAoKmluaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCk7CisJLyogRHVtcCBETUEgcmVnaXN0ZXJzICovCisJdm9pZCAoKmR1bXBfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBTZXQgdHgvcnggdGhyZXNob2xkIGluIHRoZSBjc3I2IHJlZ2lzdGVyCisJICogQW4gaW52YWxpZCB2YWx1ZSBlbmFibGVzIHRoZSBzdG9yZS1hbmQtZm9yd2FyZCBtb2RlICovCisJdm9pZCAoKmRtYV9tb2RlKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsIGludCByeG1vZGUpOworCS8qIFRvIHRyYWNrIGV4dHJhIHN0YXRpc3RpYyAoaWYgc3VwcG9ydGVkKSAqLworCXZvaWQgKCpkbWFfZGlhZ25vc3RpY19mcikgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpOworCXZvaWQgKCplbmFibGVfZG1hX3RyYW5zbWlzc2lvbikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqZW5hYmxlX2RtYV9pcnEpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKmRpc2FibGVfZG1hX2lycSkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqc3RhcnRfdHgpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKnN0b3BfdHgpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKnN0YXJ0X3J4KSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCXZvaWQgKCpzdG9wX3J4KSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCWludCAoKmRtYV9pbnRlcnJ1cHQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwKKwkJCSAgICAgIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngpOworfTsKKworc3RydWN0IHN0bW1hY19vcHMgeworCS8qIE1BQyBjb3JlIGluaXRpYWxpemF0aW9uICovCisJdm9pZCAoKmNvcmVfaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJLyogRHVtcCBNQUMgcmVnaXN0ZXJzICovCisJdm9pZCAoKmR1bXBfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBIYW5kbGUgZXh0cmEgZXZlbnRzIG9uIHNwZWNpZmljIGludGVycnVwdHMgaHcgZGVwZW5kZW50ICovCisJdm9pZCAoKmhvc3RfaXJxX3N0YXR1cykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKIAkvKiBNdWx0aWNhc3QgZmlsdGVyIHNldHRpbmcgKi8KIAl2b2lkICgqc2V0X2ZpbHRlcikgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCS8qIEZsb3cgY29udHJvbCBzZXR0aW5nICovCkBAIC0yOTgsOSArMTk5LDkgQEAKIAl2b2lkICgqcG10KSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAJLyogU2V0L0dldCBVbmljYXN0IE1BQyBhZGRyZXNzZXMgKi8KIAl2b2lkICgqc2V0X3VtYWNfYWRkcikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOworCQkJICAgICAgIHVuc2lnbmVkIGludCByZWdfbik7CiAJdm9pZCAoKmdldF91bWFjX2FkZHIpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKLQkJCSAgICAgdW5zaWduZWQgaW50IHJlZ19uKTsKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOwogfTsKIAogc3RydWN0IG1hY19saW5rIHsKQEAgLTMxNCwxNyArMjE1LDE5IEBACiAJdW5zaWduZWQgaW50IGRhdGE7CS8qIE1JSSBEYXRhICovCiB9OwogCi1zdHJ1Y3QgaHdfY2FwIHsKLQl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogQ29yZSBWZXJzaW9uIHJlZ2lzdGVyIChHTUFDKSAqLwotCXVuc2lnbmVkIGludCBwbXQ7CS8qIFBvd2VyLURvd24gbW9kZSAoR01BQykgKi8KLQlzdHJ1Y3QgbWFjX2xpbmsgbGluazsKLQlzdHJ1Y3QgbWlpX3JlZ3MgbWlpOwotfTsKLQogc3RydWN0IG1hY19kZXZpY2VfaW5mbyB7Ci0Jc3RydWN0IGh3X2NhcCBodzsKLQlzdHJ1Y3Qgc3RtbWFjX29wcyAqb3BzOworCXN0cnVjdCBzdG1tYWNfb3BzCSptYWM7CisJc3RydWN0IHN0bW1hY19kZXNjX29wcwkqZGVzYzsKKwlzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMJKmRtYTsKKwl1bnNpZ25lZCBpbnQgcG10OwkvKiBzdXBwb3J0IFBvd2VyLURvd24gKi8KKwlzdHJ1Y3QgbWlpX3JlZ3MgbWlpOwkvKiBNSUkgcmVnaXN0ZXIgQWRkcmVzc2VzICovCisJc3RydWN0IG1hY19saW5rIGxpbms7CiB9OwogCi1zdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpnbWFjX3NldHVwKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1zdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmR3bWFjMTAwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGFkZHIpOworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZHdtYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIHZvaWQgc3RtbWFjX3NldF9tYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdTggYWRkcls2XSwKKwkJCQl1bnNpZ25lZCBpbnQgaGlnaCwgdW5zaWduZWQgaW50IGxvdyk7CitleHRlcm4gdm9pZCBzdG1tYWNfZ2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCXVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kZXNjcy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKaW5kZXggNmQyYTBiMi4uNjNhMDNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBIZWFkZXIgRmlsZSB0byBkZXNjcmliZSB0aGUgRE1BIGRlc2NyaXB0b3JzCi0gIFVzZSBlbmhhbmNlZCBkZXNjcmlwdG9ycyBpbiBjYXNlIG9mIEdNQUMgQ29yZXMuCisgIEhlYWRlciBGaWxlIHRvIGRlc2NyaWJlIHRoZSBETUEgZGVzY3JpcHRvcnMuCisgIEVuaGFuY2VkIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBpbiBjYXNlIG9mIERXTUFDMTAwMCBDb3Jlcy4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmRkZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwLmMKQEAgLTAsMCArMSw1MzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIE1BQyAxMC8xMDAgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVyCisgIGN1cnJlbnRseSB0ZXN0ZWQgb24gYWxsIHRoZSBTVCBib2FyZHMgYmFzZWQgb24gU1RiNzEwOSBhbmQgc3R4NzIwMCBTb0NzLgorCisgIERXQyBFdGhlciBNQUMgMTAvMTAwIFVuaXZlcnNhbCB2ZXJzaW9uIDQuMCBoYXMgYmVlbiB1c2VkIGZvciBkZXZlbG9waW5nCisgIHRoaXMgY29kZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJkd21hYzEwMC5oIgorI2luY2x1ZGUgImR3bWFjX2RtYS5oIgorCisjdW5kZWYgRFdNQUMxMDBfREVCVUcKKy8qI2RlZmluZSBEV01BQzEwMF9ERUJVRyovCisjaWZkZWYgRFdNQUMxMDBfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwl3cml0ZWwoKHZhbHVlIHwgTUFDX0NPUkVfSU5JVCksIGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJd3JpdGVsKEVUSF9QXzgwMjFRLCBpb2FkZHIgKyBNQUNfVkxBTjEpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9kdW1wX21hY19yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXByX2luZm8oIlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCQkiXHQgIERXTUFDIDEwMCBDU1IgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgorCQkiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAorCQkodW5zaWduZWQgaW50KWlvYWRkcik7CisJcHJfaW5mbygiXHRjb250cm9sIHJlZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19DT05UUk9MLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCkpOworCXByX2luZm8oIlx0YWRkciBISSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiAiLCBNQUNfQUREUl9ISUdILAorCQlyZWFkbChpb2FkZHIgKyBNQUNfQUREUl9ISUdIKSk7CisJcHJfaW5mbygiXHRhZGRyIExPIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0FERFJfTE9XLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfQUREUl9MT1cpKTsKKwlwcl9pbmZvKCJcdG11bHRpY2FzdCBoYXNoIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTUFDX0hBU0hfSElHSCwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCkpOworCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNQUNfSEFTSF9MT1csIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0xPVykpOworCXByX2luZm8oIlx0ZmxvdyBjb250cm9sIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTUFDX0ZMT1dfQ1RSTCwgcmVhZGwoaW9hZGRyICsgTUFDX0ZMT1dfQ1RSTCkpOworCXByX2luZm8oIlx0VkxBTjEgdGFnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX1ZMQU4xLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfVkxBTjEpKTsKKwlwcl9pbmZvKCJcdFZMQU4yIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMiwKKwkJcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4yKSk7CisJcHJfaW5mbygiXG5cdE1BQyBtYW5hZ2VtZW50IGNvdW50ZXIgcmVnaXN0ZXJzXG4iKTsKKwlwcl9pbmZvKCJcdCBNTUMgY3J0bCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19DT05UUk9MLCByZWFkbChpb2FkZHIgKyBNTUNfQ09OVFJPTCkpOworCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19ISUdIX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19ISUdIX0lOVFIpKTsKKwlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19MT1dfSU5UUiwgcmVhZGwoaW9hZGRyICsgTU1DX0xPV19JTlRSKSk7CisJcHJfaW5mbygiXHQgTU1DIEhpZ2ggSW50ZXJydXB0IE1hc2sgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNTUNfSElHSF9JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19ISUdIX0lOVFJfTUFTSykpOworCXByX2luZm8oIlx0IE1NQyBMb3cgSW50ZXJydXB0IE1hc2sgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNTUNfTE9XX0lOVFJfTUFTSywgcmVhZGwoaW9hZGRyICsgTU1DX0xPV19JTlRSX01BU0spKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsCisJCQkgICB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJLyogRW5hYmxlIEFwcGxpY2F0aW9uIEFjY2VzcyBieSB3cml0aW5nIHRvIERNQSBDU1IwICovCisJd3JpdGVsKERNQV9CVVNfTU9ERV9ERUZBVUxUIHwgKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSwKKwkgICAgICAgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKworCS8qIE1hc2sgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIENTUjcgKi8KKwl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBpb2FkZHIgKyBETUFfSU5UUl9FTkEpOworCisJLyogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUlgvVFggZGVzY3JpcHRvciBsaXN0cyBtdXN0IGJlIHdyaXR0ZW4gaW50bworCSAqIERNQSBDU1IzIGFuZCBDU1I0LCByZXNwZWN0aXZlbHkuICovCisJd3JpdGVsKGRtYV90eCwgaW9hZGRyICsgRE1BX1RYX0JBU0VfQUREUik7CisJd3JpdGVsKGRtYV9yeCwgaW9hZGRyICsgRE1BX1JDVl9CQVNFX0FERFIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3JlIGFuZCBGb3J3YXJkIGNhcGFiaWxpdHkgaXMgbm90IHVzZWQgYXQgYWxsLi4KKyAqIFRoZSB0cmFuc21pdCB0aHJlc2hvbGQgY2FuIGJlIHByb2dyYW1tZWQgYnkKKyAqIHNldHRpbmcgdGhlIFRUQyBiaXRzIGluIHRoZSBETUEgY29udHJvbCByZWdpc3Rlci4qLworc3RhdGljIHZvaWQgZHdtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAorCQkJCSAgICAgIGludCByeG1vZGUpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlpZiAodHhtb2RlIDw9IDMyKQorCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKKwllbHNlIGlmICh0eG1vZGUgPD0gNjQpCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCWVsc2UKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfZHVtcF9kbWFfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgaTsKKworCURCRyhLRVJOX0RFQlVHICJEV01BQyAxMDAgRE1BIENTUiBcbiIpOworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCXByX2RlYnVnKCJcdCBDU1IlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCisJCSAgICAgICAoRE1BX0JVU19NT0RFICsgaSAqIDQpLAorCQkgICAgICAgcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFICsgaSAqIDQpKTsKKwlEQkcoS0VSTl9ERUJVRyAiXHQgQ1NSMjAgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICBETUFfQ1VSX1RYX0JVRl9BRERSLCByZWFkbChpb2FkZHIgKyBETUFfQ1VSX1RYX0JVRl9BRERSKSk7CisJREJHKEtFUk5fREVCVUcgIlx0IENTUjIxIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgRE1BX0NVUl9SWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9SWF9CVUZfQUREUikpOworCXJldHVybjsKK30KKworLyogRE1BIGNvbnRyb2xsZXIgaGFzIHR3byBjb3VudGVycyB0byB0cmFjayB0aGUgbnVtYmVyIG9mCisgKiB0aGUgcmVjZWl2ZSBtaXNzZWQgZnJhbWVzLiAqLworc3RhdGljIHZvaWQgZHdtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCXUzMiBjc3I4ID0gcmVhZGwoaW9hZGRyICsgRE1BX01JU1NFRF9GUkFNRV9DVFIpOworCisJaWYgKHVubGlrZWx5KGNzcjgpKSB7CisJCWlmIChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkUpIHsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSAweDgwMDsKKwkJCXgtPnJ4X292ZXJmbG93X2NudHIgKz0gMHg4MDA7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgb3ZlX2NudHI7CisJCQlvdmVfY250ciA9ICgoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFX0NOVFIpID4+IDE3KTsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSBvdmVfY250cjsKKwkJCXgtPnJ4X292ZXJmbG93X2NudHIgKz0gb3ZlX2NudHI7CisJCX0KKworCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFX00pIHsKKwkJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IDB4ZmZmZjsKKwkJCXgtPnJ4X21pc3NlZF9jbnRyICs9IDB4ZmZmZjsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBtaXNzX2YgPSAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfTV9DTlRSKTsKKwkJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IG1pc3NfZjsKKwkJCXgtPnJ4X21pc3NlZF9jbnRyICs9IG1pc3NfZjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZ2V0X3R4X2ZyYW1lX3N0YXR1cyh2b2lkICpkYXRhLAorCQkJCSAgICAgIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkpKSB7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5ub19jYXJyaWVyKSkgeworCQkJeC0+dHhfY2FycmllcisrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lmxvc3NfY2FycmllcikpIHsKKwkJCXgtPnR4X2xvc3NjYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkoKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkgfHwKKwkJCSAgICAgKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSB8fAorCQkJICAgICAocC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24pKSkKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLnR4LmNvbGxpc2lvbl9jb3VudDsKKwkJcmV0ID0gLTE7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCkpIHsKKwkJeC0+dHhfaGVhcnRiZWF0Kys7CisJCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCXJldCA9IC0xOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZGVmZXJyZWQpKQorCQl4LT50eF9kZWZlcnJlZCsrOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfdHhfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIGlmIGVhY2ggaW5jb21pbmcgZnJhbWUgaGFzIHNvbWUgZXJyb3JzCisgKiBhbmQsIGlmIHJlcXVpcmVkLCB1cGRhdGVzIHRoZSBtdWx0aWNhc3Qgc3RhdGlzdGljcy4KKyAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgaXQgcmV0dXJucyBjc3VtX25vbmUgYmVjYXN1ZSB0aGUgZGV2aWNlCisgKiBpcyBub3QgYWJsZSB0byBjb21wdXRlIHRoZSBjc3VtIGluIEhXLiAqLworc3RhdGljIGludCBkd21hYzEwMF9nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGNzdW1fbm9uZTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxhc3RfZGVzY3JpcHRvciA9PSAwKSkgeworCQlwcl93YXJuaW5nKCJkd21hYzEwMCBFcnJvcjogT3ZlcnNpemVkIEV0aGVybmV0ICIKKwkJCSAgICJmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnNcbiIpOworCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXR1cm4gZGlzY2FyZF9mcmFtZTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmRlc2NyaXB0b3JfZXJyb3IpKQorCQkJeC0+cnhfZGVzYysrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucGFydGlhbF9mcmFtZV9lcnJvcikpCisJCQl4LT5yeF9wYXJ0aWFsKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5ydW5fZnJhbWUpKQorCQkJeC0+cnhfcnVudCsrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZnJhbWVfdG9vX2xvbmcpKQorCQkJeC0+cnhfdG9vbG9uZysrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY29sbGlzaW9uKSkgeworCQkJeC0+cnhfY29sbGlzaW9uKys7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5jcmNfZXJyb3IpKSB7CisJCQl4LT5yeF9jcmMrKzsKKwkJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CisJCX0KKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmRyaWJibGluZykpCisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubGVuZ3RoX2Vycm9yKSkgeworCQl4LT5yeF9sZW5naHQrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lm1paV9lcnJvcikpIHsKKwkJeC0+cnhfbWlpKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmIChwLT5kZXMwMS5yeC5tdWx0aWNhc3RfZnJhbWUpIHsKKwkJeC0+cnhfbXVsdGljYXN0Kys7CisJCXN0YXRzLT5tdWx0aWNhc3QrKzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfaXJxX3N0YXR1cyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgIHVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfZ2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19nZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBNQUNfQUREUl9ISUdILCBNQUNfQUREUl9MT1cpOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX1BSOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BNIHwgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyB8CisJCQkgICBNQUNfQ09OVFJPTF9IUCk7CisJfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IEhBU0hfVEFCTEVfU0laRSkKKwkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX1BNOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKTsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0xPVyk7CisJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDApIHsJLyogbm8gbXVsdGljYXN0ICovCisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGIHwKKwkJCSAgIE1BQ19DT05UUk9MX0hPIHwgTUFDX0NPTlRST0xfSFApOworCX0gZWxzZSB7CisJCWludCBpOworCQl1MzIgbWNfZmlsdGVyWzJdOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKworCQkvKiBQZXJmZWN0IGZpbHRlciBtb2RlIGZvciBwaHlzaWNhbCBhZGRyZXNzIGFuZCBIYXNoCisJCSAgIGZpbHRlciBmb3IgbXVsdGljYXN0ICovCisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX0hQOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BNIHwgTUFDX0NPTlRST0xfUFIgfAorCQkJICAgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyk7CisKKwkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJCSAgICAgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJLyogVGhlIHVwcGVyIDYgYml0cyBvZiB0aGUgY2FsY3VsYXRlZCBDUkMgYXJlIHVzZWQgdG8KKwkJCSAqIGluZGV4IHRoZSBjb250ZW5zIG9mIHRoZSBoYXNoIHRhYmxlICovCisJCQlpbnQgYml0X25yID0KKwkJCSAgICBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCisJCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAorCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KKwkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOworCQl9CisJCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIE1BQ19IQVNIX0xPVyk7CisJCXdyaXRlbChtY19maWx0ZXJbMV0sIGlvYWRkciArIE1BQ19IQVNIX0hJR0gpOworCX0KKworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgTUFDX0NPTlRST0wpOworCisJREJHKEtFUk5fSU5GTyAiJXM6IENUUkwgcmVnOiAweCUwOHggSGFzaCByZWdzOiAiCisJICAgICJISSAweCUwOHgsIExPIDB4JTA4eFxuIiwKKwkgICAgX19mdW5jX18sIHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSwKKwkgICAgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCksIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0xPVykpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfZmxvd19jdHJsKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAorCQkJICAgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQoreworCXVuc2lnbmVkIGludCBmbG93ID0gTUFDX0ZMT1dfQ1RSTF9FTkFCTEU7CisKKwlpZiAoZHVwbGV4KQorCQlmbG93IHw9IChwYXVzZV90aW1lIDw8IE1BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOworCXdyaXRlbChmbG93LCBpb2FkZHIgKyBNQUNfRkxPV19DVFJMKTsKKworCXJldHVybjsKK30KKworLyogTm8gUE1UIG1vZHVsZSBzdXBwb3J0ZWQgZm9yIHRoaXMgRXRoZXJuZXQgQ29udHJvbGxlci4KKyAqIFRlc3RlZCBvbiBTVCBwbGF0Zm9ybXMgb25seS4KKyAqLworc3RhdGljIHZvaWQgZHdtYWMxMDBfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9pbml0X3J4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplLAorCQkJCWludCBkaXNhYmxlX3J4X2ljKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByaW5nX3NpemU7IGkrKykgeworCQlwLT5kZXMwMS5yeC5vd24gPSAxOworCQlwLT5kZXMwMS5yeC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV8yS2lCIC0gMTsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLnJ4LmVuZF9yaW5nID0gMTsKKwkJaWYgKGRpc2FibGVfcnhfaWMpCisJCQlwLT5kZXMwMS5yeC5kaXNhYmxlX2ljID0gMTsKKwkJcCsrOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLnR4Lm93biA9IDA7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS50eC5lbmRfcmluZyA9IDE7CisJCXArKzsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwX2dldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnR4Lm93bjsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5yeC5vd247Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3NldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEudHgub3duID0gMTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfc2V0X3J4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5yeC5vd24gPSAxOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwX2dldF90eF9scyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfcmVsZWFzZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlpbnQgdGVyID0gcC0+ZGVzMDEudHguZW5kX3Jpbmc7CisKKwkvKiBjbGVhbiBmaWVsZCB1c2VkIHdpdGhpbiB0aGUgeG1pdCAqLworCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSAwOworCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDA7CisJcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gMDsKKworCS8qIGNsZWFuIHN0YXR1cyByZXBvcnRlZCAqLworCXAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkgPSAwOworCXAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvciA9IDA7CisJcC0+ZGVzMDEudHgubm9fY2FycmllciA9IDA7CisJcC0+ZGVzMDEudHgubG9zc19jYXJyaWVyID0gMDsKKwlwLT5kZXMwMS50eC5leGNlc3NpdmVfZGVmZXJyYWwgPSAwOworCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zID0gMDsKKwlwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbiA9IDA7CisJcC0+ZGVzMDEudHguaGVhcnRiZWF0X2ZhaWwgPSAwOworCXAtPmRlczAxLnR4LmRlZmVycmVkID0gMDsKKworCS8qIHNldCB0ZXJtaW5hdGlvbiBmaWVsZCAqLworCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gdGVyOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9wcmVwYXJlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCisJCQkJICAgaW50IGNzdW1fZmxhZykKK3sKKwlwLT5kZXMwMS50eC5maXJzdF9zZWdtZW50ID0gaXNfZnM7CisJcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gbGVuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9jbGVhcl90eF9pYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEudHguaW50ZXJydXB0ID0gMDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfY2xvc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMTsKKwlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAxOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwX2dldF9yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5yeC5mcmFtZV9sZW5ndGg7Cit9CisKK3N0cnVjdCBzdG1tYWNfb3BzIGR3bWFjMTAwX29wcyA9IHsKKwkuY29yZV9pbml0ID0gZHdtYWMxMDBfY29yZV9pbml0LAorCS5kdW1wX3JlZ3MgPSBkd21hYzEwMF9kdW1wX21hY19yZWdzLAorCS5ob3N0X2lycV9zdGF0dXMgPSBkd21hYzEwMF9pcnFfc3RhdHVzLAorCS5zZXRfZmlsdGVyID0gZHdtYWMxMDBfc2V0X2ZpbHRlciwKKwkuZmxvd19jdHJsID0gZHdtYWMxMDBfZmxvd19jdHJsLAorCS5wbXQgPSBkd21hYzEwMF9wbXQsCisJLnNldF91bWFjX2FkZHIgPSBkd21hYzEwMF9zZXRfdW1hY19hZGRyLAorCS5nZXRfdW1hY19hZGRyID0gZHdtYWMxMDBfZ2V0X3VtYWNfYWRkciwKK307CisKK3N0cnVjdCBzdG1tYWNfZG1hX29wcyBkd21hYzEwMF9kbWFfb3BzID0geworCS5pbml0ID0gZHdtYWMxMDBfZG1hX2luaXQsCisJLmR1bXBfcmVncyA9IGR3bWFjMTAwX2R1bXBfZG1hX3JlZ3MsCisJLmRtYV9tb2RlID0gZHdtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlLAorCS5kbWFfZGlhZ25vc3RpY19mciA9IGR3bWFjMTAwX2RtYV9kaWFnbm9zdGljX2ZyLAorCS5lbmFibGVfZG1hX3RyYW5zbWlzc2lvbiA9IGR3bWFjX2VuYWJsZV9kbWFfdHJhbnNtaXNzaW9uLAorCS5lbmFibGVfZG1hX2lycSA9IGR3bWFjX2VuYWJsZV9kbWFfaXJxLAorCS5kaXNhYmxlX2RtYV9pcnEgPSBkd21hY19kaXNhYmxlX2RtYV9pcnEsCisJLnN0YXJ0X3R4ID0gZHdtYWNfZG1hX3N0YXJ0X3R4LAorCS5zdG9wX3R4ID0gZHdtYWNfZG1hX3N0b3BfdHgsCisJLnN0YXJ0X3J4ID0gZHdtYWNfZG1hX3N0YXJ0X3J4LAorCS5zdG9wX3J4ID0gZHdtYWNfZG1hX3N0b3BfcngsCisJLmRtYV9pbnRlcnJ1cHQgPSBkd21hY19kbWFfaW50ZXJydXB0LAorfTsKKworc3RydWN0IHN0bW1hY19kZXNjX29wcyBkd21hYzEwMF9kZXNjX29wcyA9IHsKKwkudHhfc3RhdHVzID0gZHdtYWMxMDBfZ2V0X3R4X2ZyYW1lX3N0YXR1cywKKwkucnhfc3RhdHVzID0gZHdtYWMxMDBfZ2V0X3J4X2ZyYW1lX3N0YXR1cywKKwkuZ2V0X3R4X2xlbiA9IGR3bWFjMTAwX2dldF90eF9sZW4sCisJLmluaXRfcnhfZGVzYyA9IGR3bWFjMTAwX2luaXRfcnhfZGVzYywKKwkuaW5pdF90eF9kZXNjID0gZHdtYWMxMDBfaW5pdF90eF9kZXNjLAorCS5nZXRfdHhfb3duZXIgPSBkd21hYzEwMF9nZXRfdHhfb3duZXIsCisJLmdldF9yeF9vd25lciA9IGR3bWFjMTAwX2dldF9yeF9vd25lciwKKwkucmVsZWFzZV90eF9kZXNjID0gZHdtYWMxMDBfcmVsZWFzZV90eF9kZXNjLAorCS5wcmVwYXJlX3R4X2Rlc2MgPSBkd21hYzEwMF9wcmVwYXJlX3R4X2Rlc2MsCisJLmNsZWFyX3R4X2ljID0gZHdtYWMxMDBfY2xlYXJfdHhfaWMsCisJLmNsb3NlX3R4X2Rlc2MgPSBkd21hYzEwMF9jbG9zZV90eF9kZXNjLAorCS5nZXRfdHhfbHMgPSBkd21hYzEwMF9nZXRfdHhfbHMsCisJLnNldF90eF9vd25lciA9IGR3bWFjMTAwX3NldF90eF9vd25lciwKKwkuc2V0X3J4X293bmVyID0gZHdtYWMxMDBfc2V0X3J4X293bmVyLAorCS5nZXRfcnhfZnJhbWVfbGVuID0gZHdtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmR3bWFjMTAwX3NldHVwKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKKworCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCXByX2luZm8oIlx0RFdNQUMxMDBcbiIpOworCisJbWFjLT5tYWMgPSAmZHdtYWMxMDBfb3BzOworCW1hYy0+ZGVzYyA9ICZkd21hYzEwMF9kZXNjX29wczsKKwltYWMtPmRtYSA9ICZkd21hYzEwMF9kbWFfb3BzOworCisJbWFjLT5wbXQgPSBQTVRfTk9UX1NVUFBPUlRFRDsKKwltYWMtPmxpbmsucG9ydCA9IE1BQ19DT05UUk9MX1BTOworCW1hYy0+bGluay5kdXBsZXggPSBNQUNfQ09OVFJPTF9GOworCW1hYy0+bGluay5zcGVlZCA9IDA7CisJbWFjLT5taWkuYWRkciA9IE1BQ19NSUlfQUREUjsKKwltYWMtPm1paS5kYXRhID0gTUFDX01JSV9EQVRBOworCisJcmV0dXJuIG1hYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkY2EwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDAuaApAQCAtMCwwICsxLDIyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBHTUFDX0NPTlRST0wJCTB4MDAwMDAwMDAJLyogQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUgkweDAwMDAwMDA0CS8qIEZyYW1lIEZpbHRlciAqLworI2RlZmluZSBHTUFDX0hBU0hfSElHSAkJMHgwMDAwMDAwOAkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBIaWdoICovCisjZGVmaW5lIEdNQUNfSEFTSF9MT1cJCTB4MDAwMDAwMGMJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93ICovCisjZGVmaW5lIEdNQUNfTUlJX0FERFIJCTB4MDAwMDAwMTAJLyogTUlJIEFkZHJlc3MgKi8KKyNkZWZpbmUgR01BQ19NSUlfREFUQQkJMHgwMDAwMDAxNAkvKiBNSUkgRGF0YSAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTAkJMHgwMDAwMDAxOAkvKiBGbG93IENvbnRyb2wgKi8KKyNkZWZpbmUgR01BQ19WTEFOX1RBRwkJMHgwMDAwMDAxYwkvKiBWTEFOIFRhZyAqLworI2RlZmluZSBHTUFDX1ZFUlNJT04JCTB4MDAwMDAwMjAJLyogR01BQyBDT1JFIFZlcnNpb24gKi8KKyNkZWZpbmUgR01BQ19XQUtFVVBfRklMVEVSCTB4MDAwMDAwMjgJLyogV2FrZS11cCBGcmFtZSBGaWx0ZXIgKi8KKworI2RlZmluZSBHTUFDX0lOVF9TVEFUVVMJCTB4MDAwMDAwMzgJLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworZW51bSBkd21hYzEwMDBfaXJxX3N0YXR1cyB7CisJdGltZV9zdGFtcF9pcnEgPSAweDAyMDAsCisJbW1jX3J4X2NzdW1fb2ZmbG9hZF9pcnEgPSAweDAwODAsCisJbW1jX3R4X2lycSA9IDB4MDA0MCwKKwltbWNfcnhfaXJxID0gMHgwMDIwLAorCW1tY19pcnEgPSAweDAwMTAsCisJcG10X2lycSA9IDB4MDAwOCwKKwlwY3NfYW5lX2lycSA9IDB4MDAwNCwKKwlwY3NfbGlua19pcnEgPSAweDAwMDIsCisJcmdtaWlfaXJxID0gMHgwMDAxLAorfTsKKyNkZWZpbmUgR01BQ19JTlRfTUFTSwkJMHgwMDAwMDAzYwkvKiBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworCisvKiBQTVQgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIEdNQUNfUE1UCQkweDAwMDAwMDJjCitlbnVtIHBvd2VyX2V2ZW50IHsKKwlwb2ludGVyX3Jlc2V0ID0gMHg4MDAwMDAwMCwKKwlnbG9iYWxfdW5pY2FzdCA9IDB4MDAwMDAyMDAsCisJd2FrZV91cF9yeF9mcmFtZSA9IDB4MDAwMDAwNDAsCisJbWFnaWNfZnJhbWUgPSAweDAwMDAwMDIwLAorCXdha2VfdXBfZnJhbWVfZW4gPSAweDAwMDAwMDA0LAorCW1hZ2ljX3BrdF9lbiA9IDB4MDAwMDAwMDIsCisJcG93ZXJfZG93biA9IDB4MDAwMDAwMDEsCit9OworCisvKiBHTUFDIEhXIEFERFIgcmVncyAqLworI2RlZmluZSBHTUFDX0FERFJfSElHSChyZWcpCQkoMHgwMDAwMDA0MCsocmVnICogOCkpCisjZGVmaW5lIEdNQUNfQUREUl9MT1cocmVnKQkJKDB4MDAwMDAwNDQrKHJlZyAqIDgpKQorI2RlZmluZSBHTUFDX01BWF9VTklDQVNUX0FERFJFU1NFUwkxNgorCisjZGVmaW5lIEdNQUNfQU5fQ1RSTAkweDAwMDAwMGMwCS8qIEFOIGNvbnRyb2wgKi8KKyNkZWZpbmUgR01BQ19BTl9TVEFUVVMJMHgwMDAwMDBjNAkvKiBBTiBzdGF0dXMgKi8KKyNkZWZpbmUgR01BQ19BTkVfQURWCTB4MDAwMDAwYzgJLyogQXV0by1OZWcuIEFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUgR01BQ19BTkVfTElOSwkweDAwMDAwMGNjCS8qIEF1dG8tTmVnLiBsaW5rIHBhcnRlbmVyIGFiaWxpdHkgKi8KKyNkZWZpbmUgR01BQ19BTkVfRVhQCTB4MDAwMDAwZDAJLyogQU5FIGV4cGFuc2lvbiAqLworI2RlZmluZSBHTUFDX1RCSQkweDAwMDAwMGQ0CS8qIFRCSSBleHRlbmQgc3RhdHVzICovCisjZGVmaW5lIEdNQUNfR01JSV9TVEFUVVMgMHgwMDAwMDBkOAkvKiBTL1ItR01JSSBzdGF0dXMgKi8KKworLyogR01BQyBDb25maWd1cmF0aW9uIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1RDCTB4MDEwMDAwMDAJLyogVHJhbnNtaXQgQ29uZi4gaW4gUkdNSUkvU0dNSUkgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1dECTB4MDA4MDAwMDAJLyogRGlzYWJsZSBXYXRjaGRvZyBvbiByZWNlaXZlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9KRAkweDAwNDAwMDAwCS8qIEphYmJlciBkaXNhYmxlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9CRQkweDAwMjAwMDAwCS8qIEZyYW1lIEJ1cnN0IEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfSkUJMHgwMDEwMDAwMAkvKiBKdW1ibyBmcmFtZSAqLworZW51bSBpbnRlcl9mcmFtZV9nYXAgeworCUdNQUNfQ09OVFJPTF9JRkdfODggPSAweDAwMDQwMDAwLAorCUdNQUNfQ09OVFJPTF9JRkdfODAgPSAweDAwMDIwMDAwLAorCUdNQUNfQ09OVFJPTF9JRkdfNDAgPSAweDAwMGUwMDAwLAorfTsKKyNkZWZpbmUgR01BQ19DT05UUk9MX0RDUlMJMHgwMDAxMDAwMCAvKiBEaXNhYmxlIGNhcnJpZXIgc2Vuc2UgZHVyaW5nIHR4ICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9QUwkJMHgwMDAwODAwMCAvKiBQb3J0IFNlbGVjdCAwOkdNSSAxOk1JSSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRkVTCTB4MDAwMDQwMDAgLyogU3BlZWQgMDoxMCAxOjEwMCAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRE8JCTB4MDAwMDIwMDAgLyogRGlzYWJsZSBSeCBPd24gKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0xNCQkweDAwMDAxMDAwIC8qIExvb3AtYmFjayBtb2RlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9ETQkJMHgwMDAwMDgwMCAvKiBEdXBsZXggTW9kZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfSVBDCTB4MDAwMDA0MDAgLyogQ2hlY2tzdW0gT2ZmbG9hZCAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRFIJCTB4MDAwMDAyMDAgLyogRGlzYWJsZSBSZXRyeSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfTFVECTB4MDAwMDAxMDAgLyogTGluayB1cC9kb3duICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9BQ1MJMHgwMDAwMDA4MCAvKiBBdXRvbWF0aWMgUGFkIFN0cmlwcGluZyAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfREMJCTB4MDAwMDAwMTAgLyogRGVmZXJyYWwgQ2hlY2sgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1RFCQkweDAwMDAwMDA4IC8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfUkUJCTB4MDAwMDAwMDQgLyogUmVjZWl2ZXIgRW5hYmxlICovCisKKyNkZWZpbmUgR01BQ19DT1JFX0lOSVQgKEdNQUNfQ09OVFJPTF9KRCB8IEdNQUNfQ09OVFJPTF9QUyB8IEdNQUNfQ09OVFJPTF9BQ1MgfCBcCisJCQlHTUFDX0NPTlRST0xfSVBDIHwgR01BQ19DT05UUk9MX0pFIHwgR01BQ19DT05UUk9MX0JFKQorCisvKiBHTUFDIEZyYW1lIEZpbHRlciBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1BSCTB4MDAwMDAwMDEJLyogUHJvbWlzY3VvdXMgTW9kZSAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IVUMJMHgwMDAwMDAwMgkvKiBIYXNoIFVuaWNhc3QgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSE1DCTB4MDAwMDAwMDQJLyogSGFzaCBNdWx0aWNhc3QgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfREFJRgkweDAwMDAwMDA4CS8qIERBIEludmVyc2UgRmlsdGVyaW5nICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1BNCTB4MDAwMDAwMTAJLyogUGFzcyBhbGwgbXVsdGljYXN0ICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RCRgkweDAwMDAwMDIwCS8qIERpc2FibGUgQnJvYWRjYXN0IGZyYW1lcyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9TQUlGCTB4MDAwMDAxMDAJLyogSW52ZXJzZSBGaWx0ZXJpbmcgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FGCTB4MDAwMDAyMDAJLyogU291cmNlIEFkZHJlc3MgRmlsdGVyICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hQRgkweDAwMDAwNDAwCS8qIEhhc2ggb3IgcGVyZmVjdCBGaWx0ZXIgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfUkEJMHg4MDAwMDAwMAkvKiBSZWNlaXZlIGFsbCBtb2RlICovCisvKiBHTUlJIEFERFIgIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19NSUlfQUREUl9XUklURQkweDAwMDAwMDAyCS8qIE1JSSBXcml0ZSAqLworI2RlZmluZSBHTUFDX01JSV9BRERSX0JVU1kJMHgwMDAwMDAwMQkvKiBNSUkgQnVzeSAqLworLyogR01BQyBGTE9XIENUUkwgZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9NQVNLCTB4ZmZmZjAwMDAJLyogUGF1c2UgVGltZSBNYXNrICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1BUX1NISUZUCTE2CisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1JGRQkweDAwMDAwMDA0CS8qIFJ4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfVEZFCTB4MDAwMDAwMDIJLyogVHggRmxvdyBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9GQ0JfQlBBCTB4MDAwMDAwMDEJLyogRmxvdyBDb250cm9sIEJ1c3kgLi4uICovCisKKy8qLS0tIERNQSBCTE9DSyBkZWZpbmVzIC0tLSovCisvKiBETUEgQnVzIE1vZGUgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfQlVTX01PREVfU0ZUX1JFU0VUCTB4MDAwMDAwMDEJLyogU29mdHdhcmUgUmVzZXQgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RBCQkweDAwMDAwMDAyCS8qIEFyYml0cmF0aW9uIHNjaGVtZSAqLworI2RlZmluZSBETUFfQlVTX01PREVfRFNMX01BU0sJMHgwMDAwMDA3YwkvKiBEZXNjcmlwdG9yIFNraXAgTGVuZ3RoICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EU0xfU0hJRlQJMgkvKiAgIChpbiBEV09SRFMpICAgICAgKi8KKy8qIFByb2dyYW1tYWJsZSBidXJzdCBsZW5ndGggKHBhc3NlZCB0aG9ydWdoIHBsYXRmb3JtKSovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfTUFTSwkweDAwMDAzZjAwCS8qIFByb2dyYW1tYWJsZSBCdXJzdCBMZW4gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1BCTF9TSElGVAk4CisKK2VudW0gcnhfdHhfcHJpb3JpdHlfcmF0aW8geworCWRvdWJsZV9yYXRpbyA9IDB4MDAwMDQwMDAsCS8qMjoxICovCisJdHJpcGxlX3JhdGlvID0gMHgwMDAwODAwMCwJLyozOjEgKi8KKwlxdWFkcnVwbGVfcmF0aW8gPSAweDAwMDBjMDAwLAkvKjQ6MSAqLworfTsKKworI2RlZmluZSBETUFfQlVTX01PREVfRkIJCTB4MDAwMTAwMDAJLyogRml4ZWQgYnVyc3QgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1JQQkxfTUFTSwkweDAwM2UwMDAwCS8qIFJ4LVByb2dyYW1tYWJsZSBCdXJzdCBMZW4gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1JQQkxfU0hJRlQJMTcKKyNkZWZpbmUgRE1BX0JVU19NT0RFX1VTUAkweDAwODAwMDAwCisjZGVmaW5lIERNQV9CVVNfTU9ERV80UEJMCTB4MDEwMDAwMDAKKyNkZWZpbmUgRE1BX0JVU19NT0RFX0FBTAkweDAyMDAwMDAwCisKKy8qIERNQSBDUlMgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIE1hcHBpbmcgKi8KKyNkZWZpbmUgRE1BX0hPU1RfVFhfREVTQwkgIDB4MDAwMDEwNDgJLyogQ3VycmVudCBIb3N0IFR4IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRE1BX0hPU1RfUlhfREVTQwkgIDB4MDAwMDEwNGMJLyogQ3VycmVudCBIb3N0IFJ4IGRlc2NyaXB0b3IgKi8KKy8qICBETUEgQnVzIE1vZGUgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX01BU0sJICAweDAwMDBjMDAwCS8qIFJ4L1R4IHByaW9yaXR5IHJhdGlvICovCisjZGVmaW5lIERNQV9CVVNfUFJfUkFUSU9fU0hJRlQJICAxNAorI2RlZmluZSBETUFfQlVTX0ZCCSAgCSAgMHgwMDAxMDAwMAkvKiBGaXhlZCBCdXJzdCAqLworCisvKiBETUEgb3BlcmF0aW9uIG1vZGUgZGVmaW5lcyAoc3RhcnQvc3RvcCB0eC9yeCBhcmUgcGxhY2VkIGluIGNvbW1vbiBoZWFkZXIpKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfRFQJCTB4MDQwMDAwMDAgLyogRGlzYWJsZSBEcm9wIFRDUC9JUCBjc3VtIGVycm9yICovCisjZGVmaW5lIERNQV9DT05UUk9MX1JTRgkJMHgwMjAwMDAwMCAvKiBSZWNlaXZlIFN0b3JlIGFuZCBGb3J3YXJkICovCisjZGVmaW5lIERNQV9DT05UUk9MX0RGRgkJMHgwMTAwMDAwMCAvKiBEaXNhYWJsZSBmbHVzaGluZyAqLworLyogVGhyZXNob2xkIGZvciBBY3RpdmF0aW5nIHRoZSBGQyAqLworZW51bSByZmEgeworCWFjdF9mdWxsX21pbnVzXzEgPSAweDAwODAwMDAwLAorCWFjdF9mdWxsX21pbnVzXzIgPSAweDAwODAwMjAwLAorCWFjdF9mdWxsX21pbnVzXzMgPSAweDAwODAwNDAwLAorCWFjdF9mdWxsX21pbnVzXzQgPSAweDAwODAwNjAwLAorfTsKKy8qIFRocmVzaG9sZCBmb3IgRGVhY3RpdmF0aW5nIHRoZSBGQyAqLworZW51bSByZmQgeworCWRlYWNfZnVsbF9taW51c18xID0gMHgwMDQwMDAwMCwKKwlkZWFjX2Z1bGxfbWludXNfMiA9IDB4MDA0MDA4MDAsCisJZGVhY19mdWxsX21pbnVzXzMgPSAweDAwNDAxMDAwLAorCWRlYWNfZnVsbF9taW51c180ID0gMHgwMDQwMTgwMCwKK307CisjZGVmaW5lIERNQV9DT05UUk9MX1RTRgkJMHgwMDIwMDAwMCAvKiBUcmFuc21pdCAgU3RvcmUgYW5kIEZvcndhcmQgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfRlRGCQkweDAwMTAwMDAwIC8qIEZsdXNoIHRyYW5zbWl0IEZJRk8gKi8KKworZW51bSB0dGNfY29udHJvbCB7CisJRE1BX0NPTlRST0xfVFRDXzY0ID0gMHgwMDAwMDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMTI4ID0gMHgwMDAwNDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMTkyID0gMHgwMDAwODAwMCwKKwlETUFfQ09OVFJPTF9UVENfMjU2ID0gMHgwMDAwYzAwMCwKKwlETUFfQ09OVFJPTF9UVENfNDAgPSAweDAwMDEwMDAwLAorCURNQV9DT05UUk9MX1RUQ18zMiA9IDB4MDAwMTQwMDAsCisJRE1BX0NPTlRST0xfVFRDXzI0ID0gMHgwMDAxODAwMCwKKwlETUFfQ09OVFJPTF9UVENfMTYgPSAweDAwMDFjMDAwLAorfTsKKyNkZWZpbmUgRE1BX0NPTlRST0xfVENfVFhfTUFTSwkweGZmZmUzZmZmCisKKyNkZWZpbmUgRE1BX0NPTlRST0xfRUZDCQkweDAwMDAwMTAwCisjZGVmaW5lIERNQV9DT05UUk9MX0ZFRgkJMHgwMDAwMDA4MAorI2RlZmluZSBETUFfQ09OVFJPTF9GVUYJCTB4MDAwMDAwNDAKKworZW51bSBydGNfY29udHJvbCB7CisJRE1BX0NPTlRST0xfUlRDXzY0ID0gMHgwMDAwMDAwMCwKKwlETUFfQ09OVFJPTF9SVENfMzIgPSAweDAwMDAwMDA4LAorCURNQV9DT05UUk9MX1JUQ185NiA9IDB4MDAwMDAwMTAsCisJRE1BX0NPTlRST0xfUlRDXzEyOCA9IDB4MDAwMDAwMTgsCit9OworI2RlZmluZSBETUFfQ09OVFJPTF9UQ19SWF9NQVNLCTB4ZmZmZmZmZTcKKworI2RlZmluZSBETUFfQ09OVFJPTF9PU0YJMHgwMDAwMDAwNAkvKiBPcGVyYXRlIG9uIHNlY29uZCBmcmFtZSAqLworCisvKiBNTUMgcmVnaXN0ZXJzIG9mZnNldCAqLworI2RlZmluZSBHTUFDX01NQ19DVFJMICAgICAgMHgxMDAKKyNkZWZpbmUgR01BQ19NTUNfUlhfSU5UUiAgIDB4MTA0CisjZGVmaW5lIEdNQUNfTU1DX1RYX0lOVFIgICAweDEwOAorI2RlZmluZSBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQgICAweDIwOAorCisjdW5kZWYgRFdNQUMxMDAwX0RFQlVHCisvKiAjZGVmaW5lIERXTUFDMTAwMF9fREVCVUcgKi8KKyN1bmRlZiBGUkFNRV9GSUxURVJfREVCVUcKKy8qICNkZWZpbmUgRlJBTUVfRklMVEVSX0RFQlVHICovCisjaWZkZWYgRFdNQUMxMDAwX19ERUJVRworI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBzdG1tYWNfZG1hX29wcyBkd21hYzEwMDBfZG1hX29wczsKK2V4dGVybiBzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3bWFjMTAwMF9kZXNjX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDBfY29yZS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4ZWFjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDBfY29yZS5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBHTUFDIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlciBmb3IgU1QgU29Dcy4KKyAgRFdDIEV0aGVyIE1BQyAxMC8xMDAvMTAwMCBVbml2ZXJzYWwgdmVyc2lvbiAzLjQxYSAgaGFzIGJlZW4gdXNlZCBmb3IKKyAgZGV2ZWxvcGluZyB0aGlzIGNvZGUuCisKKyAgVGhpcyBvbmx5IGltcGxlbWVudHMgdGhlIG1hYyBjb3JlIGZ1bmN0aW9ucyBmb3IgdGhpcyBjaGlwLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlICJkd21hYzEwMDAuaCIKKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBHTUFDX0NPTlRST0wpOworCXZhbHVlIHw9IEdNQUNfQ09SRV9JTklUOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgR01BQ19DT05UUk9MKTsKKworCS8qIFNUQnVzIEJyaWRnZSBDb25maWd1cmF0aW9uICovCisJLyp3cml0ZWwoMHhjNTYwOCwgaW9hZGRyICsgMHgwMDAwNzAwMCk7Ki8KKworCS8qIEZyZWV6ZSBNTUMgY291bnRlcnMgKi8KKwl3cml0ZWwoMHg4LCBpb2FkZHIgKyBHTUFDX01NQ19DVFJMKTsKKwkvKiBNYXNrIEdNQUMgaW50ZXJydXB0cyAqLworCXdyaXRlbCgweDIwNywgaW9hZGRyICsgR01BQ19JTlRfTUFTSyk7CisKKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCS8qIFRhZyBkZXRlY3Rpb24gd2l0aG91dCBmaWx0ZXJpbmcgKi8KKwl3cml0ZWwoMHgwLCBpb2FkZHIgKyBHTUFDX1ZMQU5fVEFHKTsKKyNlbmRpZgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2R1bXBfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgaTsKKwlwcl9pbmZvKCJcdERXTUFDMTAwMCByZWdzIChiYXNlIGFkZHIgPSAweCU4eClcbiIsICh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKKworCWZvciAoaSA9IDA7IGkgPCA1NTsgaSsrKSB7CisJCWludCBvZmZzZXQgPSBpICogNDsKKwkJcHJfaW5mbygiXHRSZWcgTm8uICVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJCW9mZnNldCwgcmVhZGwoaW9hZGRyICsgb2Zmc2V0KSk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkJdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19zZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBHTUFDX0FERFJfSElHSChyZWdfbiksCisJCQkJR01BQ19BRERSX0xPVyhyZWdfbikpOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfZ2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX2dldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIEdNQUNfQUREUl9ISUdIKHJlZ19uKSwKKwkJCQlHTUFDX0FERFJfTE9XKHJlZ19uKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworCisJREJHKEtFUk5fSU5GTyAiJXM6ICMgbWNhc3RzICVkLCAjIHVuaWNhc3QgJWRcbiIsCisJICAgIF9fZnVuY19fLCBkZXYtPm1jX2NvdW50LCBkZXYtPnVjLmNvdW50KTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUFI7CisJZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBIQVNIX1RBQkxFX1NJWkUpCisJCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BNOwkvKiBwYXNzIGFsbCBtdWx0aSAqLworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7CisJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeworCQlpbnQgaTsKKwkJdTMyIG1jX2ZpbHRlclsyXTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisKKwkJLyogSGFzaCBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLworCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX0hNQzsKKworCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7CisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKKwkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bworCQkJICAgaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KKwkJCWludCBiaXRfbnIgPQorCQkJICAgIGJpdHJldjMyKH5jcmMzMl9sZSh+MCwgbWNsaXN0LT5kbWlfYWRkciwgNikpID4+IDI2OworCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCisJCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAorCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KKwkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOworCQl9CisJCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIEdNQUNfSEFTSF9MT1cpOworCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7CisJfQorCisJLyogSGFuZGxlIG11bHRpcGxlIHVuaWNhc3QgYWRkcmVzc2VzIChwZXJmZWN0IGZpbHRlcmluZykqLworCWlmIChkZXYtPnVjLmNvdW50ID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCisJCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycworCQkgICBhcmUgcmVxdWlyZWQgKi8KKwkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7CisJZWxzZSB7CisJCWludCByZWcgPSAxOworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZGV2LT51Yy5saXN0LCBsaXN0KSB7CisJCQkJZHdtYWMxMDAwX3NldF91bWFjX2FkZHIoaW9hZGRyLCBoYS0+YWRkciwgcmVnKTsKKwkJCQlyZWcrKzsKKwkJfQorCX0KKworI2lmZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRworCS8qIEVuYWJsZSBSZWNlaXZlIGFsbCBtb2RlICh0byBkZWJ1ZyBmaWx0ZXJpbmdfZmFpbCBlcnJvcnMpICovCisJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUkE7CisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKTsKKworCURCRyhLRVJOX0lORk8gIlx0RnJhbWUgRmlsdGVyIHJlZzogMHglMDh4XG5cdEhhc2ggcmVnczogIgorCSAgICAiSEkgMHglMDh4LCBMTyAweCUwOHhcbiIsIHJlYWRsKGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKSwKKwkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpLCByZWFkbChpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9mbG93X2N0cmwodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQoreworCXVuc2lnbmVkIGludCBmbG93ID0gMDsKKworCURCRyhLRVJOX0RFQlVHICJHTUFDIEZsb3ctQ29udHJvbDpcbiIpOworCWlmIChmYyAmIEZMT1dfUlgpIHsKKwkJREJHKEtFUk5fREVCVUcgIlx0UmVjZWl2ZSBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1JGRTsKKwl9CisJaWYgKGZjICYgRkxPV19UWCkgeworCQlEQkcoS0VSTl9ERUJVRyAiXHRUcmFuc21pdCBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1RGRTsKKwl9CisKKwlpZiAoZHVwbGV4KSB7CisJCURCRyhLRVJOX0RFQlVHICJcdGR1cGxleCBtb2RlOiBwYXVzZSB0aW1lOiAlZFxuIiwgcGF1c2VfdGltZSk7CisJCWZsb3cgfD0gKHBhdXNlX3RpbWUgPDwgR01BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOworCX0KKworCXdyaXRlbChmbG93LCBpb2FkZHIgKyBHTUFDX0ZMT1dfQ1RSTCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJdW5zaWduZWQgaW50IHBtdCA9IDA7CisKKwlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOworCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKKwkJcG10IHw9IGdsb2JhbF91bmljYXN0OworCX0KKworCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKKworCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLworCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCisJCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOworCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKKwkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7CisJfQorCisJcmV0dXJuOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyBkd21hYzEwMDBfb3BzID0geworCS5jb3JlX2luaXQgPSBkd21hYzEwMDBfY29yZV9pbml0LAorCS5kdW1wX3JlZ3MgPSBkd21hYzEwMDBfZHVtcF9yZWdzLAorCS5ob3N0X2lycV9zdGF0dXMgPSBkd21hYzEwMDBfaXJxX3N0YXR1cywKKwkuc2V0X2ZpbHRlciA9IGR3bWFjMTAwMF9zZXRfZmlsdGVyLAorCS5mbG93X2N0cmwgPSBkd21hYzEwMDBfZmxvd19jdHJsLAorCS5wbXQgPSBkd21hYzEwMDBfcG10LAorCS5zZXRfdW1hY19hZGRyID0gZHdtYWMxMDAwX3NldF91bWFjX2FkZHIsCisJLmdldF91bWFjX2FkZHIgPSBkd21hYzEwMDBfZ2V0X3VtYWNfYWRkciwKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmR3bWFjMTAwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7CisJdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7CisKKwlwcl9pbmZvKCJcdERXTUFDMTAwMCAtIHVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XG4iLAorCQkoKHVpZCAmIDB4MDAwMGZmMDApID4+IDgpLCAodWlkICYgMHgwMDAwMDBmZikpOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCisJbWFjLT5tYWMgPSAmZHdtYWMxMDAwX29wczsKKwltYWMtPmRlc2MgPSAmZHdtYWMxMDAwX2Rlc2Nfb3BzOworCW1hYy0+ZG1hID0gJmR3bWFjMTAwMF9kbWFfb3BzOworCisJbWFjLT5wbXQgPSBQTVRfU1VQUE9SVEVEOworCW1hYy0+bGluay5wb3J0ID0gR01BQ19DT05UUk9MX1BTOworCW1hYy0+bGluay5kdXBsZXggPSBHTUFDX0NPTlRST0xfRE07CisJbWFjLT5saW5rLnNwZWVkID0gR01BQ19DT05UUk9MX0ZFUzsKKwltYWMtPm1paS5hZGRyID0gR01BQ19NSUlfQUREUjsKKwltYWMtPm1paS5kYXRhID0gR01BQ19NSUlfREFUQTsKKworCXJldHVybiBtYWM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2RtYS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI0NTUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9kbWEuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgR01BQyBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIgZm9yIFNUIFNvQ3MuCisgIERXQyBFdGhlciBNQUMgMTAvMTAwLzEwMDAgVW5pdmVyc2FsIHZlcnNpb24gMy40MWEgIGhhcyBiZWVuIHVzZWQgZm9yCisgIGRldmVsb3BpbmcgdGhpcyBjb2RlLgorCisgIFRoaXMgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGRtYSBhbmQgZGVzY3JpcHRvcnMuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkd21hYzEwMDAuaCIKKyNpbmNsdWRlICJkd21hY19kbWEuaCIKKworc3RhdGljIGludCBkd21hYzEwMDBfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsCisJCQkgICAgICB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJdmFsdWUgPSAvKiBETUFfQlVTX01PREVfRkIgfCAqLyBETUFfQlVTX01PREVfNFBCTCB8CisJICAgICgocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpIHwKKwkgICAgIChwYmwgPDwgRE1BX0JVU19NT0RFX1JQQkxfU0hJRlQpKTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfREEKKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfREE7CS8qIFJ4IGhhcyBwcmlvcml0eSBvdmVyIHR4ICovCisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisKKwkvKiBNYXNrIGludGVycnVwdHMgYnkgd3JpdGluZyB0byBDU1I3ICovCisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKworCS8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFJYL1RYIGRlc2NyaXB0b3IgbGlzdHMgbXVzdCBiZSB3cml0dGVuIGludG8KKwkgKiBETUEgQ1NSMyBhbmQgQ1NSNCwgcmVzcGVjdGl2ZWx5LiAqLworCXdyaXRlbChkbWFfdHgsIGlvYWRkciArIERNQV9UWF9CQVNFX0FERFIpOworCXdyaXRlbChkbWFfcngsIGlvYWRkciArIERNQV9SQ1ZfQkFTRV9BRERSKTsKKworCXJldHVybiAwOworfQorCisvKiBUcmFuc21pdCBGSUZPIGZsdXNoIG9wZXJhdGlvbiAqLworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2ZsdXNoX3R4X2ZpZm8odW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJd3JpdGVsKChjc3I2IHwgRE1BX0NPTlRST0xfRlRGKSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCkgJiBETUFfQ09OVFJPTF9GVEYpKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKKwkJCQkgICAgaW50IHJ4bW9kZSkKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOworCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOworCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQorCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLworCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKKwl9IGVsc2UgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCisJCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7CisJCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKKwkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOworCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVzaG9sZCAqLworCQlpZiAodHhtb2RlIDw9IDMyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7CisJCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7CisJfQorCisJaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7CisJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOworCX0gZWxzZSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKKwkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKKwkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOworCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7CisJCWlmIChyeG1vZGUgPD0gMzIpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKKwkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7CisJCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7CisJfQorCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKKy8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwKKwkJICBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9kdW1wX2RtYV9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIiBETUEgcmVnaXN0ZXJzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykgeworCQlpZiAoKGkgPCA5KSB8fCAoaSA+IDE3KSkgeworCQkJaW50IG9mZnNldCA9IGkgKiA0OworCQkJcHJfZXJyKCJcdCBSZWcgTm8uICVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJCSAgICAgICAoRE1BX0JVU19NT0RFICsgb2Zmc2V0KSwKKwkJCSAgICAgICByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUgKyBvZmZzZXQpKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCXN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFRYIGVycm9yLi4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXR4KTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5qYWJiZXJfdGltZW91dCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRqYWJiZXJfdGltZW91dCBlcnJvclxuIik7CisJCQl4LT50eF9qYWJiZXIrKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZnJhbWVfZmx1c2hlZCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRmcmFtZV9mbHVzaGVkIGVycm9yXG4iKTsKKwkJCXgtPnR4X2ZyYW1lX2ZsdXNoZWQrKzsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOworCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKKwkJCXgtPnR4X2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7CisJCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7CisJCQl4LT50eF9kZWZlcnJlZCsrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguaXBfaGVhZGVyX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdFRYIElQIGhlYWRlciBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X2lwX2hlYWRlcl9lcnJvcisrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5wYXlsb2FkX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdEFkZHIvUGF5bG9hZCBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X3BheWxvYWRfZXJyb3IrKzsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlyZXQgPSAtMTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmRlZmVycmVkKSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogdHggZGVmZXJyZWRcbiIpOworCQl4LT50eF9kZWZlcnJlZCsrOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5ldHgudmxhbl9mcmFtZSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogVkxBTiBmcmFtZVxuIik7CisJCXgtPnR4X3ZsYW4rKzsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9jb2VfcmRlczAoaW50IGlwY19lcnIsIGludCB0eXBlLCBpbnQgcGF5bG9hZF9lcnIpCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJdTMyIHN0YXR1cyA9ICh0eXBlIDw8IDIgfCBpcGNfZXJyIDw8IDEgfCBwYXlsb2FkX2VycikgJiAweDc7CisKKwkvKiBiaXRzIDUgNyAwIHwgRnJhbWUgc3RhdHVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgMCAwIDAgfCBJRUVFIDgwMi4zIFR5cGUgZnJhbWUgKGxlbmdodCA8IDE1MzYgb2N0ZWN0cykKKwkgKiAgICAgIDEgMCAwIHwgSVB2NC82IE5vIENTVU0gZXJyb3JTLgorCSAqICAgICAgMSAwIDEgfCBJUHY0LzYgQ1NVTSBQQVlMT0FEIGVycm9yCisJICogICAgICAxIDEgMCB8IElQdjQvNiBDU1VNIElQIEhSIGVycm9yCisJICogICAgICAxIDEgMSB8IElQdjQvNiBJUCBQQVlMT0FEIEFORCBIRUFERVIgZXJyb3JTCisJICogICAgICAwIDAgMSB8IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FECisJICogICAgICAwIDEgMSB8IENPRSBieXBhc3NlZC4uIG5vIElQdjQvNiBmcmFtZQorCSAqICAgICAgMCAxIDAgfCBSZXNlcnZlZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IDB4MCkgeworCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSUVFRSA4MDIuMyBUeXBlIGZyYW1lLlxuIik7CisJCXJldCA9IGdvb2RfZnJhbWU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg0KSB7CisJCURCRyhLRVJOX0lORk8gIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgTm8gQ1NVTSBlcnJvclMuXG4iKTsKKwkJcmV0ID0gZ29vZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDUpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NikgeworCQlEQkcoS0VSTl9FUlIgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIEVycm9yLlxuIik7CisJCXJldCA9IGNzdW1fbm9uZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDcpIHsKKwkJREJHKEtFUk5fRVJSCisJCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBIZWFkZXIgYW5kIFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4MSkgeworCQlEQkcoS0VSTl9FUlIKKwkJICAgICJSWCBEZXMwIHN0YXR1czogSVB2NC82IHVuc3VwcG9ydGVkIElQIFBBWUxPQUQuXG4iKTsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDMpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogTm8gSVB2NCwgSVB2NiBmcmFtZS5cbiIpOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LCBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIEVycm9yIFN1bW1hcnkuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5lcngpOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRlc2NyaXB0b3JfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0ZGVzY3JpcHRvciBlcnJvclxuIik7CisJCQl4LT5yeF9kZXNjKys7CisJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngub3ZlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0b3ZlcmZsb3cgZXJyb3JcbiIpOworCQkJeC0+cnhfZ21hY19vdmVyZmxvdysrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvcikpCisJCQlEQkcoS0VSTl9FUlIgIlx0SVBDIENzdW0gRXJyb3IvR2lhbnQgZnJhbWVcbiIpOworCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5yZWNlaXZlX3dhdGNoZG9nKSkgeworCQkJREJHKEtFUk5fRVJSICJcdHJlY2VpdmVfd2F0Y2hkb2cgZXJyb3JcbiIpOworCQkJeC0+cnhfd2F0Y2hkb2crKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX2dtaWkpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0UmVjZWl2ZSBFcnJvclxuIik7CisJCQl4LT5yeF9taWkrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmNyY19lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRDUkMgZXJyb3JcbiIpOworCQkJeC0+cnhfY3JjKys7CisJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQl9CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCisJLyogQWZ0ZXIgYSBwYXlsb2FkIGNzdW0gZXJyb3IsIHRoZSBFUyBiaXQgaXMgc2V0LgorCSAqIEl0IGRvZXNuJ3QgbWF0Y2ggd2l0aCB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgaW50byB0aGUgZGF0YWJvb2suCisJICogQXQgYW55IHJhdGUsIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgQ1NVTSBodyBjb21wdXRhdGlvbiBpcyBvaworCSAqIGFuZCByZXBvcnQgdGhpcyBpbmZvIHRvIHRoZSB1cHBlciBsYXllcnMuICovCisJcmV0ID0gZHdtYWMxMDAwX2NvZV9yZGVzMChwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IsCisJCXAtPmRlczAxLmVyeC5mcmFtZV90eXBlLCBwLT5kZXMwMS5lcngucGF5bG9hZF9jc3VtX2Vycm9yKTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZHJpYmJsaW5nKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGRyaWJibGluZyBlcnJvclxuIik7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguc2FfZmlsdGVyX2ZhaWwpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWCA6IFNvdXJjZSBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKKwkJeC0+c2FfcnhfZmlsdGVyX2ZhaWwrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kYV9maWx0ZXJfZmFpbCkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogRGVzdGluYXRpb24gQWRkcmVzcyBmaWx0ZXIgZmFpbFxuIik7CisJCXgtPmRhX3J4X2ZpbHRlcl9mYWlsKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGVuZ3RoX2Vycm9yKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGxlbmd0aF9lcnJvciBlcnJvclxuIik7CisJCXgtPnJ4X2xlbmdodCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5lcngudmxhbl90YWcpIHsKKwkJREJHKEtFUk5fSU5GTyAiR01BQyBSWDogVkxBTiBmcmFtZSB0YWdnZWRcbiIpOworCQl4LT5yeF92bGFuKys7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLmVyeC5vd24gPSAxOworCQlwLT5kZXMwMS5lcnguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfOEtpQiAtIDE7CisJCS8qIFRvIHN1cHBvcnQganVtYm8gZnJhbWVzICovCisJCXAtPmRlczAxLmVyeC5idWZmZXIyX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLmVyeC5lbmRfcmluZyA9IDE7CisJCWlmIChkaXNhYmxlX3J4X2ljKQorCQkJcC0+ZGVzMDEuZXJ4LmRpc2FibGVfaWMgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOworCQlwKys7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHgub3duOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5lcngub3duOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgub3duID0gMTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9scyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmV0eC5sYXN0X3NlZ21lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOworCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3ByZXBhcmVfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgaW50IGNzdW1fZmxhZykKK3sKKwlwLT5kZXMwMS5ldHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOworCWlmICh1bmxpa2VseShsZW4gPiBCVUZfU0laRV80S2lCKSkgeworCQlwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfNEtpQjsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjJfc2l6ZSA9IGxlbiAtIEJVRl9TSVpFXzRLaUI7CisJfSBlbHNlIHsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKKwl9CisJaWYgKGxpa2VseShjc3VtX2ZsYWcpKQorCQlwLT5kZXMwMS5ldHguY2hlY2tzdW1faW5zZXJ0aW9uID0gY2ljX2Z1bGw7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9jbGVhcl90eF9pYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXR4LmludGVycnVwdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKKwlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKK30KKworc3RhdGljIGludCBkd21hYzEwMDBfZ2V0X3J4X2ZyYW1lX2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmVyeC5mcmFtZV9sZW5ndGg7Cit9CisKK3N0cnVjdCBzdG1tYWNfZG1hX29wcyBkd21hYzEwMDBfZG1hX29wcyA9IHsKKwkuaW5pdCA9IGR3bWFjMTAwMF9kbWFfaW5pdCwKKwkuZHVtcF9yZWdzID0gZHdtYWMxMDAwX2R1bXBfZG1hX3JlZ3MsCisJLmRtYV9tb2RlID0gZHdtYWMxMDAwX2RtYV9vcGVyYXRpb25fbW9kZSwKKwkuZG1hX2RpYWdub3N0aWNfZnIgPSBkd21hYzEwMDBfZG1hX2RpYWdub3N0aWNfZnIsCisJLmVuYWJsZV9kbWFfdHJhbnNtaXNzaW9uID0gZHdtYWNfZW5hYmxlX2RtYV90cmFuc21pc3Npb24sCisJLmVuYWJsZV9kbWFfaXJxID0gZHdtYWNfZW5hYmxlX2RtYV9pcnEsCisJLmRpc2FibGVfZG1hX2lycSA9IGR3bWFjX2Rpc2FibGVfZG1hX2lycSwKKwkuc3RhcnRfdHggPSBkd21hY19kbWFfc3RhcnRfdHgsCisJLnN0b3BfdHggPSBkd21hY19kbWFfc3RvcF90eCwKKwkuc3RhcnRfcnggPSBkd21hY19kbWFfc3RhcnRfcngsCisJLnN0b3BfcnggPSBkd21hY19kbWFfc3RvcF9yeCwKKwkuZG1hX2ludGVycnVwdCA9IGR3bWFjX2RtYV9pbnRlcnJ1cHQsCit9OworCitzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3bWFjMTAwMF9kZXNjX29wcyA9IHsKKwkudHhfc3RhdHVzID0gZHdtYWMxMDAwX2dldF90eF9mcmFtZV9zdGF0dXMsCisJLnJ4X3N0YXR1cyA9IGR3bWFjMTAwMF9nZXRfcnhfZnJhbWVfc3RhdHVzLAorCS5nZXRfdHhfbGVuID0gZHdtYWMxMDAwX2dldF90eF9sZW4sCisJLmluaXRfcnhfZGVzYyA9IGR3bWFjMTAwMF9pbml0X3J4X2Rlc2MsCisJLmluaXRfdHhfZGVzYyA9IGR3bWFjMTAwMF9pbml0X3R4X2Rlc2MsCisJLmdldF90eF9vd25lciA9IGR3bWFjMTAwMF9nZXRfdHhfb3duZXIsCisJLmdldF9yeF9vd25lciA9IGR3bWFjMTAwMF9nZXRfcnhfb3duZXIsCisJLnJlbGVhc2VfdHhfZGVzYyA9IGR3bWFjMTAwMF9yZWxlYXNlX3R4X2Rlc2MsCisJLnByZXBhcmVfdHhfZGVzYyA9IGR3bWFjMTAwMF9wcmVwYXJlX3R4X2Rlc2MsCisJLmNsZWFyX3R4X2ljID0gZHdtYWMxMDAwX2NsZWFyX3R4X2ljLAorCS5jbG9zZV90eF9kZXNjID0gZHdtYWMxMDAwX2Nsb3NlX3R4X2Rlc2MsCisJLmdldF90eF9scyA9IGR3bWFjMTAwMF9nZXRfdHhfbHMsCisJLnNldF90eF9vd25lciA9IGR3bWFjMTAwMF9zZXRfdHhfb3duZXIsCisJLnNldF9yeF9vd25lciA9IGR3bWFjMTAwMF9zZXRfcnhfb3duZXIsCisJLmdldF9yeF9mcmFtZV9sZW4gPSBkd21hYzEwMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfZG1hLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4NDhkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19kbWEuaApAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgRFdNQUMgRE1BIEhlYWRlciBmaWxlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCisjZGVmaW5lIERNQV9CVVNfTU9ERQkJMHgwMDAwMTAwMAkvKiBCdXMgTW9kZSAqLworI2RlZmluZSBETUFfWE1UX1BPTExfREVNQU5ECTB4MDAwMDEwMDQJLyogVHJhbnNtaXQgUG9sbCBEZW1hbmQgKi8KKyNkZWZpbmUgRE1BX1JDVl9QT0xMX0RFTUFORAkweDAwMDAxMDA4CS8qIFJlY2VpdmVkIFBvbGwgRGVtYW5kICovCisjZGVmaW5lIERNQV9SQ1ZfQkFTRV9BRERSCTB4MDAwMDEwMGMJLyogUmVjZWl2ZSBMaXN0IEJhc2UgKi8KKyNkZWZpbmUgRE1BX1RYX0JBU0VfQUREUgkweDAwMDAxMDEwCS8qIFRyYW5zbWl0IExpc3QgQmFzZSAqLworI2RlZmluZSBETUFfU1RBVFVTCQkweDAwMDAxMDE0CS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ09OVFJPTAkJMHgwMDAwMTAxOAkvKiBDdHJsIChPcGVyYXRpb25hbCBNb2RlKSAqLworI2RlZmluZSBETUFfSU5UUl9FTkEJCTB4MDAwMDEwMWMJLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX0NUUgkweDAwMDAxMDIwCS8qIE1pc3NlZCBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIERNQV9DVVJfVFhfQlVGX0FERFIJMHgwMDAwMTA1MAkvKiBDdXJyZW50IEhvc3QgVHggQnVmZmVyICovCisjZGVmaW5lIERNQV9DVVJfUlhfQlVGX0FERFIJMHgwMDAwMTA1NAkvKiBDdXJyZW50IEhvc3QgUnggQnVmZmVyICovCisKKy8qIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1QJCTB4MDAwMDIwMDAJLyogU3RhcnQvU3RvcCBUcmFuc21pc3Npb24gKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1IJCTB4MDAwMDAwMDIJLyogU3RhcnQvU3RvcCBSZWNlaXZlICovCisKKy8qIERNQSBOb3JtYWwgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9OSUUgMHgwMDAxMDAwMAkvKiBOb3JtYWwgU3VtbWFyeSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVElFIDB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UVUUgMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JJRSAweDAwMDAwMDQwCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9FUkUgMHgwMDAwNDAwMAkvKiBFYXJseSBSZWNlaXZlICovCisKKyNkZWZpbmUgRE1BX0lOVFJfTk9STUFMCShETUFfSU5UUl9FTkFfTklFIHwgRE1BX0lOVFJfRU5BX1JJRSB8IFwKKwkJCURNQV9JTlRSX0VOQV9USUUpCisKKy8qIERNQSBBYm5vcm1hbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0FJRSAweDAwMDA4MDAwCS8qIEFibm9ybWFsIFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0ZCRSAweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfRVRFIDB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JXRSAweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JTRSAweDAwMDAwMTAwCS8qIFJlY2VpdmUgU3RvcHBlZCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUlVFIDB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1VORSAweDAwMDAwMDIwCS8qIFR4IFVuZGVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfT1ZFIDB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVEpFIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UU0UgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBTdG9wcGVkICovCisKKyNkZWZpbmUgRE1BX0lOVFJfQUJOT1JNQUwJKERNQV9JTlRSX0VOQV9BSUUgfCBETUFfSU5UUl9FTkFfRkJFIHwgXAorCQkJCURNQV9JTlRSX0VOQV9VTkUpCisKKy8qIERNQSBkZWZhdWx0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIERNQV9JTlRSX0RFRkFVTFRfTUFTSwkoRE1BX0lOVFJfTk9STUFMIHwgRE1BX0lOVFJfQUJOT1JNQUwpCisKKy8qIERNQSBTdGF0dXMgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfU1RBVFVTX0dQSQkJMHgxMDAwMDAwMAkvKiBQTVQgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfR01JCQkweDA4MDAwMDAwCS8qIE1NQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAJLyogR01BQyBMaW5lIGludGVyZmFjZSBpbnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9NQVNLCTB4MDAzODAwMDAJLyogRXJyb3IgQml0cyBNYXNrICovCisjZGVmaW5lIERNQV9TVEFUVVNfRUJfVFhfQUJPUlQJMHgwMDA4MDAwMAkvKiBFcnJvciBCaXRzIC0gVFggQWJvcnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9SWF9BQk9SVAkweDAwMTAwMDAwCS8qIEVycm9yIEJpdHMgLSBSWCBBYm9ydCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RTX01BU0sJMHgwMDcwMDAwMAkvKiBUcmFuc21pdCBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFNfU0hJRlQJMjAKKyNkZWZpbmUgRE1BX1NUQVRVU19SU19NQVNLCTB4MDAwZTAwMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlNfU0hJRlQJMTcKKyNkZWZpbmUgRE1BX1NUQVRVU19OSVMJMHgwMDAxMDAwMAkvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19BSVMJMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLworI2RlZmluZSBETUFfU1RBVFVTX0VSSQkweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRkJJCTB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0VUSQkweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0IEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JXVAkweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgVGltZW91dCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JQUwkweDAwMDAwMTAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdG9wcGVkICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlUJMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1JJCTB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19VTkYJMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBVbmRlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19PVkYJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVEpUCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyIFRpbWVvdXQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UVQkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1RQUwkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RvcHBlZCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisKK2V4dGVybiB2b2lkIGR3bWFjX2VuYWJsZV9kbWFfdHJhbnNtaXNzaW9uKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2VuYWJsZV9kbWFfaXJxKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2Rpc2FibGVfZG1hX2lycSh1bnNpZ25lZCBsb25nIGlvYWRkcik7CitleHRlcm4gdm9pZCBkd21hY19kbWFfc3RhcnRfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpOworZXh0ZXJuIHZvaWQgZHdtYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpOworZXh0ZXJuIHZvaWQgZHdtYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiBpbnQgZHdtYWNfZG1hX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGlvYWRkciwKKwkJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGFkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jCkBAIC0wLDAgKzEsMjYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZHdtYWNfZG1hLmgiCisKKyN1bmRlZiBEV01BQ19ETUFfREVCVUcKKyNpZmRlZiBEV01BQ19ETUFfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLwordm9pZCBkd21hY19lbmFibGVfZG1hX3RyYW5zbWlzc2lvbih1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl3cml0ZWwoMSwgaW9hZGRyICsgRE1BX1hNVF9QT0xMX0RFTUFORCk7Cit9CisKK3ZvaWQgZHdtYWNfZW5hYmxlX2RtYV9pcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKK30KKwordm9pZCBkd21hY19kaXNhYmxlX2RtYV9pcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJd3JpdGVsKDAsIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXZhbHVlICY9IH5ETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKwordm9pZCBkd21hY19kbWFfc3RvcF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NSOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCisjaWZkZWYgRFdNQUNfRE1BX0RFQlVHCitzdGF0aWMgdm9pZCBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUodW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJc3RhdGUgPSAoc3RhdHVzICYgRE1BX1NUQVRVU19UU19NQVNLKSA+PiBETUFfU1RBVFVTX1RTX1NISUZUOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoKKwkJcHJfaW5mbygiLSBUWCAoU3RvcHBlZCk6IFJlc2V0IG9yIFN0b3AgY29tbWFuZFxuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6RmV0Y2hpbmcgdGhlIFR4IGRlc2NcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBlbmQgb2YgdHhcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBSZWFkaW5nIHRoZSBkYXRhICIKKwkJICAgICAgICJhbmQgcXVldWluZyB0aGUgZGF0YSBpbnRvIHRoZSBUeCBidWZcbiIpOworCQlicmVhazsKKwljYXNlIDY6CisJCXByX2luZm8oIi0gVFggKFN1c3BlbmRlZCk6IFR4IEJ1ZmYgVW5kZXJmbG93ICIKKwkJICAgICAgICJvciBhbiB1bmF2YWlsYWJsZSBUcmFuc21pdCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTogQ2xvc2luZyBUeCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCisJCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgorCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorI2VuZGlmCisKK2ludCBkd21hY19kbWFfaW50ZXJydXB0KHVuc2lnbmVkIGxvbmcgaW9hZGRyLAorCQkJc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCkKK3sKKwlpbnQgcmV0ID0gMDsKKwkvKiByZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKENTUjUpICovCisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgRE1BX1NUQVRVUyk7CisKKwlEQkcoSU5GTywgIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKKyNpZmRlZiBEV01BQ19ETUFfREVCVUcKKwkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHByb2Nlc3Mgc3RhdGVzIChDU1I1IHJlZ2lzdGVyKSAqLworCXNob3dfdHhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CisJc2hvd19yeF9wcm9jZXNzX3N0YXRlKGludHJfc3RhdHVzKTsKKyNlbmRpZgorCS8qIEFCTk9STUFMIGludGVycnVwdHMgKi8KKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0FJUykpIHsKKwkJREJHKElORk8sICJDU1I1WzE1XSBETUEgQUJOT1JNQUwgSVJROiAiKTsKKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19VTkYpKSB7CisJCQlEQkcoSU5GTywgInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CisJCQlyZXQgPSB0eF9oYXJkX2Vycm9yX2J1bXBfdGM7CisJCQl4LT50eF91bmRlZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RKVCkpIHsKKwkJCURCRyhJTkZPLCAidHJhbnNtaXQgamFiYmVyXG4iKTsKKwkJCXgtPnR4X2phYmJlcl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKKwkJCURCRyhJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7CisJCQl4LT5yeF9vdmVyZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JVKSkgeworCQkJREJHKElORk8sICJyZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZVxuIik7CisJCQl4LT5yeF9idWZfdW5hdl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JQUykpIHsKKwkJCURCRyhJTkZPLCAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJeC0+cnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgeworCQkJREJHKElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKKwkJCXgtPnJ4X3dhdGNoZG9nX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRVRJKSkgeworCQkJREJHKElORk8sICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOworCQkJeC0+dHhfZWFybHlfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19UUFMpKSB7CisJCQlEQkcoSU5GTywgInRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQl4LT50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7CisJCQlyZXQgPSB0eF9oYXJkX2Vycm9yOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgeworCQkJREJHKElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOworCQkJeC0+ZmF0YWxfYnVzX2Vycm9yX2lycSsrOworCQkJcmV0ID0gdHhfaGFyZF9lcnJvcjsKKwkJfQorCX0KKwkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLworCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7CisJCXgtPm5vcm1hbF9pcnFfbisrOworCQlpZiAobGlrZWx5KChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUkkpIHx8CisJCQkgKGludHJfc3RhdHVzICYgKERNQV9TVEFUVVNfVEkpKSkpCisJCQkJcmV0ID0gaGFuZGxlX3R4X3J4OworCX0KKwkvKiBPcHRpb25hbCBoYXJkd2FyZSBibG9ja3MsIGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkICovCisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYKKwkJICAgICAoRE1BX1NUQVRVU19HUEkgfCBETUFfU1RBVFVTX0dNSSB8IERNQV9TVEFUVVNfR0xJKSkpCisJCXByX2luZm8oIiVzOiB1bmV4cGVjdGVkIHN0YXR1cyAlMDh4XG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KKwl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOworCisJREJHKElORk8sICJcblxuIik7CisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIHN0bW1hY19zZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHU4IGFkZHJbNl0sCisJCQkgdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJZGF0YSA9IChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgaGlnaCk7CisJZGF0YSA9IChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KSB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgbG93KTsKKworCXJldHVybjsKK30KKwordm9pZCBzdG1tYWNfZ2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJIHVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KQoreworCXVuc2lnbmVkIGludCBoaV9hZGRyLCBsb19hZGRyOworCisJLyogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwloaV9hZGRyID0gcmVhZGwoaW9hZGRyICsgaGlnaCk7CisJbG9fYWRkciA9IHJlYWRsKGlvYWRkciArIGxvdyk7CisKKwkvKiBFeHRyYWN0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBoaWdoIGFuZCBsb3cgd29yZHMgKi8KKwlhZGRyWzBdID0gbG9fYWRkciAmIDB4ZmY7CisJYWRkclsxXSA9IChsb19hZGRyID4+IDgpICYgMHhmZjsKKwlhZGRyWzJdID0gKGxvX2FkZHIgPj4gMTYpICYgMHhmZjsKKwlhZGRyWzNdID0gKGxvX2FkZHIgPj4gMjQpICYgMHhmZjsKKwlhZGRyWzRdID0gaGlfYWRkciAmIDB4ZmY7CisJYWRkcls1XSA9IChoaV9hZGRyID4+IDgpICYgMHhmZjsKKworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNTg2ZWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDY5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBHTUFDIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlciBmb3IgU1QgU29Dcy4KLSAgRFdDIEV0aGVyIE1BQyAxMC8xMDAvMTAwMCBVbml2ZXJzYWwgdmVyc2lvbiAzLjQxYSAgaGFzIGJlZW4gdXNlZCBmb3IKLSAgZGV2ZWxvcGluZyB0aGlzIGNvZGUuCi0KLSAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLSAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KLSAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLQotICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotCi0jaW5jbHVkZSAic3RtbWFjLmgiCi0jaW5jbHVkZSAiZ21hYy5oIgotCi0jdW5kZWYgR01BQ19ERUJVRwotLyojZGVmaW5lIEdNQUNfREVCVUcqLwotI3VuZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRwotLyojZGVmaW5lIEZSQU1FX0ZJTFRFUl9ERUJVRyovCi0jaWZkZWYgR01BQ19ERUJVRwotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZ21hY19kdW1wX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0JcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0JICAgICAgICJcdCAgR01BQyByZWdpc3RlcnMgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgotCSAgICAgICAiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KWlvYWRkcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTU7IGkrKykgewotCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7Ci0JCXByX2luZm8oIlx0UmVnIE5vLiAlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCi0JCSAgICAgICBvZmZzZXQsIHJlYWRsKGlvYWRkciArIG9mZnNldCkpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgZ21hY19kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCkKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCS8qIERNQSBTVyByZXNldCAqLwotCXZhbHVlIHw9IERNQV9CVVNfTU9ERV9TRlRfUkVTRVQ7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCWRvIHt9IHdoaWxlICgocmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKSAmIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQpKTsKLQotCXZhbHVlID0gLyogRE1BX0JVU19NT0RFX0ZCIHwgKi8gRE1BX0JVU19NT0RFXzRQQkwgfAotCSAgICAoKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSB8Ci0JICAgICAocGJsIDw8IERNQV9CVVNfTU9ERV9SUEJMX1NISUZUKSk7Ci0KLSNpZmRlZiBDT05GSUdfU1RNTUFDX0RBCi0JdmFsdWUgfD0gRE1BX0JVU19NT0RFX0RBOwkvKiBSeCBoYXMgcHJpb3JpdHkgb3ZlciB0eCAqLwotI2VuZGlmCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Ci0KLQkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCi0JICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KLQl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKLQl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVHJhbnNtaXQgRklGTyBmbHVzaCBvcGVyYXRpb24gKi8KLXN0YXRpYyB2b2lkIGdtYWNfZmx1c2hfdHhfZmlmbyh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl3cml0ZWwoKGNzcjYgfCBETUFfQ09OVFJPTF9GVEYpLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKSAmIERNQV9DT05UUk9MX0ZURikpOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKLQkJCQkgICAgaW50IHJ4bW9kZSkKLXsKLQl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOwotCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCi0JCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOwotCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQotCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLwotCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKLQl9IGVsc2UgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCi0JCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7Ci0JCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKLQkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOwotCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVzaG9sZCAqLwotCQlpZiAodHhtb2RlIDw9IDMyKQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7Ci0JCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKLQkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OwotCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OwotCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOwotCQllbHNlCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7Ci0JfQotCi0JaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7Ci0JCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOwotCX0gZWxzZSB7Ci0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKLQkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKLQkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOwotCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7Ci0JCWlmIChyeG1vZGUgPD0gMzIpCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKLQkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7Ci0JCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKLQkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OwotCQllbHNlCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7Ci0JfQotCi0Jd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQlyZXR1cm47Ci19Ci0KLS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCi1zdGF0aWMgdm9pZCBnbWFjX2RtYV9kaWFnbm9zdGljX2ZyKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0JcHJfaW5mbygiIERNQSByZWdpc3RlcnNcbiIpOwotCWZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKSB7Ci0JCWlmICgoaSA8IDkpIHx8IChpID4gMTcpKSB7Ci0JCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7Ci0JCQlwcl9lcnIoIlx0IFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAotCQkJICAgICAgIChETUFfQlVTX01PREUgKyBvZmZzZXQpLAotCQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIG9mZnNldCkpOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5lcnJvcl9zdW1tYXJ5KSkgewotCQlEQkcoS0VSTl9FUlIgIkdNQUMgVFggZXJyb3IuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5ldHgpOwotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmphYmJlcl90aW1lb3V0KSkgewotCQkJREJHKEtFUk5fRVJSICJcdGphYmJlcl90aW1lb3V0IGVycm9yXG4iKTsKLQkJCXgtPnR4X2phYmJlcisrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5mcmFtZV9mbHVzaGVkKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGZyYW1lX2ZsdXNoZWQgZXJyb3JcbiIpOwotCQkJeC0+dHhfZnJhbWVfZmx1c2hlZCsrOwotCQkJZ21hY19mbHVzaF90eF9maWZvKGlvYWRkcik7Ci0JCX0KLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOwotCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKLQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKLQkJCXgtPnR4X2NhcnJpZXIrKzsKLQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOwotCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKLQkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7Ci0JCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7Ci0JCQl4LT50eF9kZWZlcnJlZCsrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKLQkJCWdtYWNfZmx1c2hfdHhfZmlmbyhpb2FkZHIpOwotCQkJeC0+dHhfdW5kZXJmbG93Kys7Ci0JCX0KLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmlwX2hlYWRlcl9lcnJvcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRUWCBJUCBoZWFkZXIgY3N1bSBlcnJvclxuIik7Ci0JCQl4LT50eF9pcF9oZWFkZXJfZXJyb3IrKzsKLQkJfQotCi0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgucGF5bG9hZF9lcnJvcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRBZGRyL1BheWxvYWQgY3N1bSBlcnJvclxuIik7Ci0JCQl4LT50eF9wYXlsb2FkX2Vycm9yKys7Ci0JCQlnbWFjX2ZsdXNoX3R4X2ZpZm8oaW9hZGRyKTsKLQkJfQotCi0JCXJldCA9IC0xOwotCX0KLQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZGVmZXJyZWQpKSB7Ci0JCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiB0eCBkZWZlcnJlZFxuIik7Ci0JCXgtPnR4X2RlZmVycmVkKys7Ci0JfQotI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECi0JaWYgKHAtPmRlczAxLmV0eC52bGFuX2ZyYW1lKSB7Ci0JCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiBWTEFOIGZyYW1lXG4iKTsKLQkJeC0+dHhfdmxhbisrOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOwotfQotCi1zdGF0aWMgaW50IGdtYWNfY29lX3JkZXMwKGludCBpcGNfZXJyLCBpbnQgdHlwZSwgaW50IHBheWxvYWRfZXJyKQotewotCWludCByZXQgPSBnb29kX2ZyYW1lOwotCXUzMiBzdGF0dXMgPSAodHlwZSA8PCAyIHwgaXBjX2VyciA8PCAxIHwgcGF5bG9hZF9lcnIpICYgMHg3OwotCi0JLyogYml0cyA1IDcgMCB8IEZyYW1lIHN0YXR1cwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgIDAgMCAwIHwgSUVFRSA4MDIuMyBUeXBlIGZyYW1lIChsZW5naHQgPCAxNTM2IG9jdGVjdHMpCi0JICogICAgICAxIDAgMCB8IElQdjQvNiBObyBDU1VNIGVycm9yUy4KLQkgKiAgICAgIDEgMCAxIHwgSVB2NC82IENTVU0gUEFZTE9BRCBlcnJvcgotCSAqICAgICAgMSAxIDAgfCBJUHY0LzYgQ1NVTSBJUCBIUiBlcnJvcgotCSAqICAgICAgMSAxIDEgfCBJUHY0LzYgSVAgUEFZTE9BRCBBTkQgSEVBREVSIGVycm9yUwotCSAqICAgICAgMCAwIDEgfCBJUHY0LzYgdW5zdXBwb3J0ZWQgSVAgUEFZTE9BRAotCSAqICAgICAgMCAxIDEgfCBDT0UgYnlwYXNzZWQuLiBubyBJUHY0LzYgZnJhbWUKLQkgKiAgICAgIDAgMSAwIHwgUmVzZXJ2ZWQuCi0JICovCi0JaWYgKHN0YXR1cyA9PSAweDApIHsKLQkJREJHKEtFUk5fSU5GTyAiUlggRGVzMCBzdGF0dXM6IElFRUUgODAyLjMgVHlwZSBmcmFtZS5cbiIpOwotCQlyZXQgPSBnb29kX2ZyYW1lOwotCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NCkgewotCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSVB2NC82IE5vIENTVU0gZXJyb3JTLlxuIik7Ci0JCXJldCA9IGdvb2RfZnJhbWU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg1KSB7Ci0JCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBQYXlsb2FkIEVycm9yLlxuIik7Ci0JCXJldCA9IGNzdW1fbm9uZTsKLQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDYpIHsKLQkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IEhlYWRlciBFcnJvci5cbiIpOwotCQlyZXQgPSBjc3VtX25vbmU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg3KSB7Ci0JCURCRyhLRVJOX0VSUgotCQkgICAgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIGFuZCBQYXlsb2FkIEVycm9yLlxuIik7Ci0JCXJldCA9IGNzdW1fbm9uZTsKLQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDEpIHsKLQkJREJHKEtFUk5fRVJSCi0JCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FELlxuIik7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHgzKSB7Ci0JCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IE5vIElQdjQsIElQdjYgZnJhbWUuXG4iKTsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwKQotewotCWludCByZXQgPSBnb29kX2ZyYW1lOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7Ci0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWCBFcnJvciBTdW1tYXJ5Li4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXJ4KTsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kZXNjcmlwdG9yX2Vycm9yKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGRlc2NyaXB0b3IgZXJyb3JcbiIpOwotCQkJeC0+cnhfZGVzYysrOwotCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4Lm92ZXJmbG93X2Vycm9yKSkgewotCQkJREJHKEtFUk5fRVJSICJcdG92ZXJmbG93IGVycm9yXG4iKTsKLQkJCXgtPnJ4X2dtYWNfb3ZlcmZsb3crKzsKLQkJfQotCi0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IpKQotCQkJREJHKEtFUk5fRVJSICJcdElQQyBDc3VtIEVycm9yL0dpYW50IGZyYW1lXG4iKTsKLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmxhdGVfY29sbGlzaW9uKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGxhdGVfY29sbGlzaW9uIGVycm9yXG4iKTsKLQkJCXN0YXRzLT5jb2xsaXNpb25zKys7Ci0JCQlzdGF0cy0+Y29sbGlzaW9ucysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngucmVjZWl2ZV93YXRjaGRvZykpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRyZWNlaXZlX3dhdGNoZG9nIGVycm9yXG4iKTsKLQkJCXgtPnJ4X3dhdGNoZG9nKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5lcnJvcl9nbWlpKSkgewotCQkJREJHKEtFUk5fRVJSICJcdFJlY2VpdmUgRXJyb3JcbiIpOwotCQkJeC0+cnhfbWlpKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5jcmNfZXJyb3IpKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0Q1JDIGVycm9yXG4iKTsKLQkJCXgtPnJ4X2NyYysrOwotCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJfQotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQotCS8qIEFmdGVyIGEgcGF5bG9hZCBjc3VtIGVycm9yLCB0aGUgRVMgYml0IGlzIHNldC4KLQkgKiBJdCBkb2Vzbid0IG1hdGNoIHdpdGggdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGludG8gdGhlIGRhdGFib29rLgotCSAqIEF0IGFueSByYXRlLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIENTVU0gaHcgY29tcHV0YXRpb24gaXMgb2sKLQkgKiBhbmQgcmVwb3J0IHRoaXMgaW5mbyB0byB0aGUgdXBwZXIgbGF5ZXJzLiAqLwotCXJldCA9IGdtYWNfY29lX3JkZXMwKHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvciwKLQkJcC0+ZGVzMDEuZXJ4LmZyYW1lX3R5cGUsIHAtPmRlczAxLmVyeC5wYXlsb2FkX2NzdW1fZXJyb3IpOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kcmliYmxpbmcpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWDogZHJpYmJsaW5nIGVycm9yXG4iKTsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5zYV9maWx0ZXJfZmFpbCkpIHsKLQkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogU291cmNlIEFkZHJlc3MgZmlsdGVyIGZhaWxcbiIpOwotCQl4LT5zYV9yeF9maWx0ZXJfZmFpbCsrOwotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRhX2ZpbHRlcl9mYWlsKSkgewotCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlggOiBEZXN0aW5hdGlvbiBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKLQkJeC0+ZGFfcnhfZmlsdGVyX2ZhaWwrKzsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5sZW5ndGhfZXJyb3IpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWDogbGVuZ3RoX2Vycm9yIGVycm9yXG4iKTsKLQkJeC0+cnhfbGVuZ2h0Kys7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECi0JaWYgKHAtPmRlczAxLmVyeC52bGFuX3RhZykgewotCQlEQkcoS0VSTl9JTkZPICJHTUFDIFJYOiBWTEFOIGZyYW1lIHRhZ2dlZFxuIik7Ci0JCXgtPnJ4X3ZsYW4rKzsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKLQotCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLwotCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKLQkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKLQkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCi0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCi0JCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOwotCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKLQkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLwotCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBHTUFDX0NPTlRST0wpOwotCXZhbHVlIHw9IEdNQUNfQ09SRV9JTklUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgR01BQ19DT05UUk9MKTsKLQotCS8qIFNUQnVzIEJyaWRnZSBDb25maWd1cmF0aW9uICovCi0JLyp3cml0ZWwoMHhjNTYwOCwgaW9hZGRyICsgMHgwMDAwNzAwMCk7Ki8KLQotCS8qIEZyZWV6ZSBNTUMgY291bnRlcnMgKi8KLQl3cml0ZWwoMHg4LCBpb2FkZHIgKyBHTUFDX01NQ19DVFJMKTsKLQkvKiBNYXNrIEdNQUMgaW50ZXJydXB0cyAqLwotCXdyaXRlbCgweDIwNywgaW9hZGRyICsgR01BQ19JTlRfTUFTSyk7Ci0KLSNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAotCS8qIFRhZyBkZXRlY3Rpb24gd2l0aG91dCBmaWx0ZXJpbmcgKi8KLQl3cml0ZWwoMHgwLCBpb2FkZHIgKyBHTUFDX1ZMQU5fVEFHKTsKLSNlbmRpZgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJCXVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAotCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJCXVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAotCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwotCi0JREJHKEtFUk5fSU5GTyAiJXM6ICMgbWNhc3RzICVkLCAjIHVuaWNhc3QgJWRcbiIsCi0JICAgIF9fZnVuY19fLCBkZXYtPm1jX2NvdW50LCBkZXYtPnVjX2NvdW50KTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUFI7Ci0JZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBIQVNIX1RBQkxFX1NJWkUpCi0JCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewotCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BNOwkvKiBwYXNzIGFsbCBtdWx0aSAqLwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewotCQlpbnQgaTsKLQkJdTMyIG1jX2ZpbHRlclsyXTsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0KLQkJLyogSGFzaCBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLwotCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX0hNQzsKLQotCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bwotCQkJICAgaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KLQkJCWludCBiaXRfbnIgPQotCQkJICAgIGJpdHJldjMyKH5jcmMzMl9sZSh+MCwgbWNsaXN0LT5kbWlfYWRkciwgNikpID4+IDI2OwotCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCi0JCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAotCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KLQkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOwotCQl9Ci0JCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIEdNQUNfSEFTSF9MT1cpOwotCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7Ci0JfQotCi0JLyogSGFuZGxlIG11bHRpcGxlIHVuaWNhc3QgYWRkcmVzc2VzIChwZXJmZWN0IGZpbHRlcmluZykqLwotCWlmIChkZXYtPnVjX2NvdW50ID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCi0JCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycwotCQkgICBhcmUgcmVxdWlyZWQgKi8KLQkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7Ci0JZWxzZSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqdWNfcHRyID0gZGV2LT51Y19saXN0OwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrKSB7Ci0JCQkJZ21hY19zZXRfdW1hY19hZGRyKGlvYWRkciwgdWNfcHRyLT5kYV9hZGRyLAotCQkJCQkJaSArIDEpOwotCi0JCQkJREJHKEtFUk5fSU5GTyAiXHQlZCAiCi0JCQkJIi0gVW5pY2FzdCBhZGRyICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDoiCi0JCQkJIiUwMnhcbiIsIGkgKyAxLAotCQkJCXVjX3B0ci0+ZGFfYWRkclswXSwgdWNfcHRyLT5kYV9hZGRyWzFdLAotCQkJCXVjX3B0ci0+ZGFfYWRkclsyXSwgdWNfcHRyLT5kYV9hZGRyWzNdLAotCQkJCXVjX3B0ci0+ZGFfYWRkcls0XSwgdWNfcHRyLT5kYV9hZGRyWzVdKTsKLQkJCQl1Y19wdHIgPSB1Y19wdHItPm5leHQ7Ci0JCX0KLQl9Ci0KLSNpZmRlZiBGUkFNRV9GSUxURVJfREVCVUcKLQkvKiBFbmFibGUgUmVjZWl2ZSBhbGwgbW9kZSAodG8gZGVidWcgZmlsdGVyaW5nX2ZhaWwgZXJyb3JzKSAqLwotCXZhbHVlIHw9IEdNQUNfRlJBTUVfRklMVEVSX1JBOwotI2VuZGlmCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUik7Ci0KLQlEQkcoS0VSTl9JTkZPICJcdEZyYW1lIEZpbHRlciByZWc6IDB4JTA4eFxuXHRIYXNoIHJlZ3M6ICIKLQkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLCByZWFkbChpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUiksCi0JICAgIHJlYWRsKGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0xPVykpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2Zsb3dfY3RybCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKLQkJCSAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpCi17Ci0JdW5zaWduZWQgaW50IGZsb3cgPSAwOwotCi0JREJHKEtFUk5fREVCVUcgIkdNQUMgRmxvdy1Db250cm9sOlxuIik7Ci0JaWYgKGZjICYgRkxPV19SWCkgewotCQlEQkcoS0VSTl9ERUJVRyAiXHRSZWNlaXZlIEZsb3ctQ29udHJvbCBPTlxuIik7Ci0JCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfUkZFOwotCX0KLQlpZiAoZmMgJiBGTE9XX1RYKSB7Ci0JCURCRyhLRVJOX0RFQlVHICJcdFRyYW5zbWl0IEZsb3ctQ29udHJvbCBPTlxuIik7Ci0JCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfVEZFOwotCX0KLQotCWlmIChkdXBsZXgpIHsKLQkJREJHKEtFUk5fREVCVUcgIlx0ZHVwbGV4IG1vZGU6IHBhdXNlIHRpbWU6ICVkXG4iLCBwYXVzZV90aW1lKTsKLQkJZmxvdyB8PSAocGF1c2VfdGltZSA8PCBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVCk7Ci0JfQotCi0Jd3JpdGVsKGZsb3csIGlvYWRkciArIEdNQUNfRkxPV19DVFJMKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCi17Ci0JdW5zaWduZWQgaW50IHBtdCA9IDA7Ci0KLQlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7Ci0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOwotCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKLQl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKLQkJcG10IHw9IGdsb2JhbF91bmljYXN0OwotCX0KLQotCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfaW5pdF9yeF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKLQkJCQlpbnQgZGlzYWJsZV9yeF9pYykKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKLQkJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Ci0JCXAtPmRlczAxLmVyeC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKLQkJLyogVG8gc3VwcG9ydCBqdW1ibyBmcmFtZXMgKi8KLQkJcC0+ZGVzMDEuZXJ4LmJ1ZmZlcjJfc2l6ZSA9IEJVRl9TSVpFXzhLaUIgLSAxOwotCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQotCQkJcC0+ZGVzMDEuZXJ4LmVuZF9yaW5nID0gMTsKLQkJaWYgKGRpc2FibGVfcnhfaWMpCi0JCQlwLT5kZXMwMS5lcnguZGlzYWJsZV9pYyA9IDE7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKLQkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7Ci0JCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCi0JCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOwotCQlwKys7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGdtYWNfZ2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEuZXR4Lm93bjsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLmVyeC5vd247Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHgub3duID0gMTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQotewotCXAtPmRlczAxLmVyeC5vd24gPSAxOwotfQotCi1zdGF0aWMgaW50IGdtYWNfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEuZXR4Lmxhc3Rfc2VnbWVudDsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQotewotCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7Ci0KLQltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOwotCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19wcmVwYXJlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCi0JCQkJIGludCBjc3VtX2ZsYWcpCi17Ci0JcC0+ZGVzMDEuZXR4LmZpcnN0X3NlZ21lbnQgPSBpc19mczsKLQlpZiAodW5saWtlbHkobGVuID4gQlVGX1NJWkVfNEtpQikpIHsKLQkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzRLaUI7Ci0JCXAtPmRlczAxLmV0eC5idWZmZXIyX3NpemUgPSBsZW4gLSBCVUZfU0laRV80S2lCOwotCX0gZWxzZSB7Ci0JCXAtPmRlczAxLmV0eC5idWZmZXIxX3NpemUgPSBsZW47Ci0JfQotCWlmIChsaWtlbHkoY3N1bV9mbGFnKSkKLQkJcC0+ZGVzMDEuZXR4LmNoZWNrc3VtX2luc2VydGlvbiA9IGNpY19mdWxsOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKLQlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS5lcnguZnJhbWVfbGVuZ3RoOwotfQotCi1zdHJ1Y3Qgc3RtbWFjX29wcyBnbWFjX2RyaXZlciA9IHsKLQkuY29yZV9pbml0ID0gZ21hY19jb3JlX2luaXQsCi0JLmR1bXBfbWFjX3JlZ3MgPSBnbWFjX2R1bXBfcmVncywKLQkuZG1hX2luaXQgPSBnbWFjX2RtYV9pbml0LAotCS5kdW1wX2RtYV9yZWdzID0gZ21hY19kdW1wX2RtYV9yZWdzLAotCS5kbWFfbW9kZSA9IGdtYWNfZG1hX29wZXJhdGlvbl9tb2RlLAotCS5kbWFfZGlhZ25vc3RpY19mciA9IGdtYWNfZG1hX2RpYWdub3N0aWNfZnIsCi0JLnR4X3N0YXR1cyA9IGdtYWNfZ2V0X3R4X2ZyYW1lX3N0YXR1cywKLQkucnhfc3RhdHVzID0gZ21hY19nZXRfcnhfZnJhbWVfc3RhdHVzLAotCS5nZXRfdHhfbGVuID0gZ21hY19nZXRfdHhfbGVuLAotCS5zZXRfZmlsdGVyID0gZ21hY19zZXRfZmlsdGVyLAotCS5mbG93X2N0cmwgPSBnbWFjX2Zsb3dfY3RybCwKLQkucG10ID0gZ21hY19wbXQsCi0JLmluaXRfcnhfZGVzYyA9IGdtYWNfaW5pdF9yeF9kZXNjLAotCS5pbml0X3R4X2Rlc2MgPSBnbWFjX2luaXRfdHhfZGVzYywKLQkuZ2V0X3R4X293bmVyID0gZ21hY19nZXRfdHhfb3duZXIsCi0JLmdldF9yeF9vd25lciA9IGdtYWNfZ2V0X3J4X293bmVyLAotCS5yZWxlYXNlX3R4X2Rlc2MgPSBnbWFjX3JlbGVhc2VfdHhfZGVzYywKLQkucHJlcGFyZV90eF9kZXNjID0gZ21hY19wcmVwYXJlX3R4X2Rlc2MsCi0JLmNsZWFyX3R4X2ljID0gZ21hY19jbGVhcl90eF9pYywKLQkuY2xvc2VfdHhfZGVzYyA9IGdtYWNfY2xvc2VfdHhfZGVzYywKLQkuZ2V0X3R4X2xzID0gZ21hY19nZXRfdHhfbHMsCi0JLnNldF90eF9vd25lciA9IGdtYWNfc2V0X3R4X293bmVyLAotCS5zZXRfcnhfb3duZXIgPSBnbWFjX3NldF9yeF9vd25lciwKLQkuZ2V0X3J4X2ZyYW1lX2xlbiA9IGdtYWNfZ2V0X3J4X2ZyYW1lX2xlbiwKLQkuaG9zdF9pcnFfc3RhdHVzID0gZ21hY19pcnFfc3RhdHVzLAotCS5zZXRfdW1hY19hZGRyID0gZ21hY19zZXRfdW1hY19hZGRyLAotCS5nZXRfdW1hY19hZGRyID0gZ21hY19nZXRfdW1hY19hZGRyLAotfTsKLQotc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZ21hY19zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7Ci0JdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7Ci0KLQlwcl9pbmZvKCJcdEdNQUMgLSB1c2VyIElEOiAweCV4LCBTeW5vcHN5cyBJRDogMHgleFxuIiwKLQkgICAgICAgKCh1aWQgJiAweDAwMDBmZjAwKSA+PiA4KSwgKHVpZCAmIDB4MDAwMDAwZmYpKTsKLQotCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCW1hYy0+b3BzID0gJmdtYWNfZHJpdmVyOwotCW1hYy0+aHcucG10ID0gUE1UX1NVUFBPUlRFRDsKLQltYWMtPmh3LmxpbmsucG9ydCA9IEdNQUNfQ09OVFJPTF9QUzsKLQltYWMtPmh3LmxpbmsuZHVwbGV4ID0gR01BQ19DT05UUk9MX0RNOwotCW1hYy0+aHcubGluay5zcGVlZCA9IEdNQUNfQ09OVFJPTF9GRVM7Ci0JbWFjLT5ody5taWkuYWRkciA9IEdNQUNfTUlJX0FERFI7Ci0JbWFjLT5ody5taWkuZGF0YSA9IEdNQUNfTUlJX0RBVEE7Ci0KLQlyZXR1cm4gbWFjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODJkNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgotICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgotCi0gIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBHTUFDX0NPTlRST0wJCTB4MDAwMDAwMDAJLyogQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUgkweDAwMDAwMDA0CS8qIEZyYW1lIEZpbHRlciAqLwotI2RlZmluZSBHTUFDX0hBU0hfSElHSAkJMHgwMDAwMDAwOAkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBIaWdoICovCi0jZGVmaW5lIEdNQUNfSEFTSF9MT1cJCTB4MDAwMDAwMGMJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93ICovCi0jZGVmaW5lIEdNQUNfTUlJX0FERFIJCTB4MDAwMDAwMTAJLyogTUlJIEFkZHJlc3MgKi8KLSNkZWZpbmUgR01BQ19NSUlfREFUQQkJMHgwMDAwMDAxNAkvKiBNSUkgRGF0YSAqLwotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTAkJMHgwMDAwMDAxOAkvKiBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUgR01BQ19WTEFOX1RBRwkJMHgwMDAwMDAxYwkvKiBWTEFOIFRhZyAqLwotI2RlZmluZSBHTUFDX1ZFUlNJT04JCTB4MDAwMDAwMjAJLyogR01BQyBDT1JFIFZlcnNpb24gKi8KLSNkZWZpbmUgR01BQ19XQUtFVVBfRklMVEVSCTB4MDAwMDAwMjgJLyogV2FrZS11cCBGcmFtZSBGaWx0ZXIgKi8KLQotI2RlZmluZSBHTUFDX0lOVF9TVEFUVVMJCTB4MDAwMDAwMzgJLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotZW51bSBnbWFjX2lycV9zdGF0dXMgewotCXRpbWVfc3RhbXBfaXJxID0gMHgwMjAwLAotCW1tY19yeF9jc3VtX29mZmxvYWRfaXJxID0gMHgwMDgwLAotCW1tY190eF9pcnEgPSAweDAwNDAsCi0JbW1jX3J4X2lycSA9IDB4MDAyMCwKLQltbWNfaXJxID0gMHgwMDEwLAotCXBtdF9pcnEgPSAweDAwMDgsCi0JcGNzX2FuZV9pcnEgPSAweDAwMDQsCi0JcGNzX2xpbmtfaXJxID0gMHgwMDAyLAotCXJnbWlpX2lycSA9IDB4MDAwMSwKLX07Ci0jZGVmaW5lIEdNQUNfSU5UX01BU0sJCTB4MDAwMDAwM2MJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLQotLyogUE1UIENvbnRyb2wgYW5kIFN0YXR1cyAqLwotI2RlZmluZSBHTUFDX1BNVAkJMHgwMDAwMDAyYwotZW51bSBwb3dlcl9ldmVudCB7Ci0JcG9pbnRlcl9yZXNldCA9IDB4ODAwMDAwMDAsCi0JZ2xvYmFsX3VuaWNhc3QgPSAweDAwMDAwMjAwLAotCXdha2VfdXBfcnhfZnJhbWUgPSAweDAwMDAwMDQwLAotCW1hZ2ljX2ZyYW1lID0gMHgwMDAwMDAyMCwKLQl3YWtlX3VwX2ZyYW1lX2VuID0gMHgwMDAwMDAwNCwKLQltYWdpY19wa3RfZW4gPSAweDAwMDAwMDAyLAotCXBvd2VyX2Rvd24gPSAweDAwMDAwMDAxLAotfTsKLQotLyogR01BQyBIVyBBRERSIHJlZ3MgKi8KLSNkZWZpbmUgR01BQ19BRERSX0hJR0gocmVnKQkJKDB4MDAwMDAwNDArKHJlZyAqIDgpKQotI2RlZmluZSBHTUFDX0FERFJfTE9XKHJlZykJCSgweDAwMDAwMDQ0KyhyZWcgKiA4KSkKLSNkZWZpbmUgR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMJMTYKLQotI2RlZmluZSBHTUFDX0FOX0NUUkwJMHgwMDAwMDBjMAkvKiBBTiBjb250cm9sICovCi0jZGVmaW5lIEdNQUNfQU5fU1RBVFVTCTB4MDAwMDAwYzQJLyogQU4gc3RhdHVzICovCi0jZGVmaW5lIEdNQUNfQU5FX0FEVgkweDAwMDAwMGM4CS8qIEF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCi0jZGVmaW5lIEdNQUNfQU5FX0xJTksJMHgwMDAwMDBjYwkvKiBBdXRvLU5lZy4gbGluayBwYXJ0ZW5lciBhYmlsaXR5ICovCi0jZGVmaW5lIEdNQUNfQU5FX0VYUAkweDAwMDAwMGQwCS8qIEFORSBleHBhbnNpb24gKi8KLSNkZWZpbmUgR01BQ19UQkkJMHgwMDAwMDBkNAkvKiBUQkkgZXh0ZW5kIHN0YXR1cyAqLwotI2RlZmluZSBHTUFDX0dNSUlfU1RBVFVTIDB4MDAwMDAwZDgJLyogUy9SLUdNSUkgc3RhdHVzICovCi0KLS8qIEdNQUMgQ29uZmlndXJhdGlvbiBkZWZpbmVzICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9UQwkweDAxMDAwMDAwCS8qIFRyYW5zbWl0IENvbmYuIGluIFJHTUlJL1NHTUlJICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9XRAkweDAwODAwMDAwCS8qIERpc2FibGUgV2F0Y2hkb2cgb24gcmVjZWl2ZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfSkQJMHgwMDQwMDAwMAkvKiBKYWJiZXIgZGlzYWJsZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfQkUJMHgwMDIwMDAwMAkvKiBGcmFtZSBCdXJzdCBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0pFCTB4MDAxMDAwMDAJLyogSnVtYm8gZnJhbWUgKi8KLWVudW0gaW50ZXJfZnJhbWVfZ2FwIHsKLQlHTUFDX0NPTlRST0xfSUZHXzg4ID0gMHgwMDA0MDAwMCwKLQlHTUFDX0NPTlRST0xfSUZHXzgwID0gMHgwMDAyMDAwMCwKLQlHTUFDX0NPTlRST0xfSUZHXzQwID0gMHgwMDBlMDAwMCwKLX07Ci0jZGVmaW5lIEdNQUNfQ09OVFJPTF9EQ1JTCTB4MDAwMTAwMDAgLyogRGlzYWJsZSBjYXJyaWVyIHNlbnNlIGR1cmluZyB0eCAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfUFMJCTB4MDAwMDgwMDAgLyogUG9ydCBTZWxlY3QgMDpHTUkgMTpNSUkgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0ZFUwkweDAwMDA0MDAwIC8qIFNwZWVkIDA6MTAgMToxMDAgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RPCQkweDAwMDAyMDAwIC8qIERpc2FibGUgUnggT3duICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9MTQkJMHgwMDAwMTAwMCAvKiBMb29wLWJhY2sgbW9kZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfRE0JCTB4MDAwMDA4MDAgLyogRHVwbGV4IE1vZGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0lQQwkweDAwMDAwNDAwIC8qIENoZWNrc3VtIE9mZmxvYWQgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RSCQkweDAwMDAwMjAwIC8qIERpc2FibGUgUmV0cnkgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0xVRAkweDAwMDAwMTAwIC8qIExpbmsgdXAvZG93biAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfQUNTCTB4MDAwMDAwODAgLyogQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RDCQkweDAwMDAwMDEwIC8qIERlZmVycmFsIENoZWNrICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9URQkJMHgwMDAwMDAwOCAvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX1JFCQkweDAwMDAwMDA0IC8qIFJlY2VpdmVyIEVuYWJsZSAqLwotCi0jZGVmaW5lIEdNQUNfQ09SRV9JTklUIChHTUFDX0NPTlRST0xfSkQgfCBHTUFDX0NPTlRST0xfUFMgfCBHTUFDX0NPTlRST0xfQUNTIHwgXAotCQkJR01BQ19DT05UUk9MX0lQQyB8IEdNQUNfQ09OVFJPTF9KRSB8IEdNQUNfQ09OVFJPTF9CRSkKLQotLyogR01BQyBGcmFtZSBGaWx0ZXIgZGVmaW5lcyAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUgkweDAwMDAwMDAxCS8qIFByb21pc2N1b3VzIE1vZGUgKi8KLSNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFVDCTB4MDAwMDAwMDIJLyogSGFzaCBVbmljYXN0ICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hNQwkweDAwMDAwMDA0CS8qIEhhc2ggTXVsdGljYXN0ICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RBSUYJMHgwMDAwMDAwOAkvKiBEQSBJbnZlcnNlIEZpbHRlcmluZyAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QTQkweDAwMDAwMDEwCS8qIFBhc3MgYWxsIG11bHRpY2FzdCAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQkYJMHgwMDAwMDAyMAkvKiBEaXNhYmxlIEJyb2FkY2FzdCBmcmFtZXMgKi8KLSNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FJRgkweDAwMDAwMTAwCS8qIEludmVyc2UgRmlsdGVyaW5nICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBRgkweDAwMDAwMjAwCS8qIFNvdXJjZSBBZGRyZXNzIEZpbHRlciAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IUEYJMHgwMDAwMDQwMAkvKiBIYXNoIG9yIHBlcmZlY3QgRmlsdGVyICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1JBCTB4ODAwMDAwMDAJLyogUmVjZWl2ZSBhbGwgbW9kZSAqLwotLyogR01JSSBBRERSICBkZWZpbmVzICovCi0jZGVmaW5lIEdNQUNfTUlJX0FERFJfV1JJVEUJMHgwMDAwMDAwMgkvKiBNSUkgV3JpdGUgKi8KLSNkZWZpbmUgR01BQ19NSUlfQUREUl9CVVNZCTB4MDAwMDAwMDEJLyogTUlJIEJ1c3kgKi8KLS8qIEdNQUMgRkxPVyBDVFJMIGRlZmluZXMgKi8KLSNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfTUFTSwkweGZmZmYwMDAwCS8qIFBhdXNlIFRpbWUgTWFzayAqLwotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVAkxNgotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9SRkUJMHgwMDAwMDAwNAkvKiBSeCBGbG93IENvbnRyb2wgRW5hYmxlICovCi0jZGVmaW5lIEdNQUNfRkxPV19DVFJMX1RGRQkweDAwMDAwMDAyCS8qIFR4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19GTE9XX0NUUkxfRkNCX0JQQQkweDAwMDAwMDAxCS8qIEZsb3cgQ29udHJvbCBCdXN5IC4uLiAqLwotCi0vKi0tLSBETUEgQkxPQ0sgZGVmaW5lcyAtLS0qLwotLyogRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFX1NGVF9SRVNFVAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFJlc2V0ICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9EQQkJMHgwMDAwMDAwMgkvKiBBcmJpdHJhdGlvbiBzY2hlbWUgKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9NQVNLCTB4MDAwMDAwN2MJLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLwotI2RlZmluZSBETUFfQlVTX01PREVfRFNMX1NISUZUCTIJLyogICAoaW4gRFdPUkRTKSAgICAgICovCi0vKiBQcm9ncmFtbWFibGUgYnVyc3QgbGVuZ3RoIChwYXNzZWQgdGhvcnVnaCBwbGF0Zm9ybSkqLwotI2RlZmluZSBETUFfQlVTX01PREVfUEJMX01BU0sJMHgwMDAwM2YwMAkvKiBQcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfU0hJRlQJOAotCi1lbnVtIHJ4X3R4X3ByaW9yaXR5X3JhdGlvIHsKLQlkb3VibGVfcmF0aW8gPSAweDAwMDA0MDAwLAkvKjI6MSAqLwotCXRyaXBsZV9yYXRpbyA9IDB4MDAwMDgwMDAsCS8qMzoxICovCi0JcXVhZHJ1cGxlX3JhdGlvID0gMHgwMDAwYzAwMCwJLyo0OjEgKi8KLX07Ci0KLSNkZWZpbmUgRE1BX0JVU19NT0RFX0ZCCQkweDAwMDEwMDAwCS8qIEZpeGVkIGJ1cnN0ICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX01BU0sJMHgwMDNlMDAwMAkvKiBSeC1Qcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX1NISUZUCTE3Ci0jZGVmaW5lIERNQV9CVVNfTU9ERV9VU1AJMHgwMDgwMDAwMAotI2RlZmluZSBETUFfQlVTX01PREVfNFBCTAkweDAxMDAwMDAwCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9BQUwJMHgwMjAwMDAwMAotCi0vKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCi0jZGVmaW5lIERNQV9IT1NUX1RYX0RFU0MJICAweDAwMDAxMDQ4CS8qIEN1cnJlbnQgSG9zdCBUeCBkZXNjcmlwdG9yICovCi0jZGVmaW5lIERNQV9IT1NUX1JYX0RFU0MJICAweDAwMDAxMDRjCS8qIEN1cnJlbnQgSG9zdCBSeCBkZXNjcmlwdG9yICovCi0vKiAgRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19NQVNLCSAgMHgwMDAwYzAwMAkvKiBSeC9UeCBwcmlvcml0eSByYXRpbyAqLwotI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX1NISUZUCSAgMTQKLSNkZWZpbmUgRE1BX0JVU19GQgkgIAkgIDB4MDAwMTAwMDAJLyogRml4ZWQgQnVyc3QgKi8KLQotLyogRE1BIG9wZXJhdGlvbiBtb2RlIGRlZmluZXMgKHN0YXJ0L3N0b3AgdHgvcnggYXJlIHBsYWNlZCBpbiBjb21tb24gaGVhZGVyKSovCi0jZGVmaW5lIERNQV9DT05UUk9MX0RUCQkweDA0MDAwMDAwIC8qIERpc2FibGUgRHJvcCBUQ1AvSVAgY3N1bSBlcnJvciAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9SU0YJCTB4MDIwMDAwMDAgLyogUmVjZWl2ZSBTdG9yZSBhbmQgRm9yd2FyZCAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9ERkYJCTB4MDEwMDAwMDAgLyogRGlzYWFibGUgZmx1c2hpbmcgKi8KLS8qIFRocmVzaG9sZCBmb3IgQWN0aXZhdGluZyB0aGUgRkMgKi8KLWVudW0gcmZhIHsKLQlhY3RfZnVsbF9taW51c18xID0gMHgwMDgwMDAwMCwKLQlhY3RfZnVsbF9taW51c18yID0gMHgwMDgwMDIwMCwKLQlhY3RfZnVsbF9taW51c18zID0gMHgwMDgwMDQwMCwKLQlhY3RfZnVsbF9taW51c180ID0gMHgwMDgwMDYwMCwKLX07Ci0vKiBUaHJlc2hvbGQgZm9yIERlYWN0aXZhdGluZyB0aGUgRkMgKi8KLWVudW0gcmZkIHsKLQlkZWFjX2Z1bGxfbWludXNfMSA9IDB4MDA0MDAwMDAsCi0JZGVhY19mdWxsX21pbnVzXzIgPSAweDAwNDAwODAwLAotCWRlYWNfZnVsbF9taW51c18zID0gMHgwMDQwMTAwMCwKLQlkZWFjX2Z1bGxfbWludXNfNCA9IDB4MDA0MDE4MDAsCi19OwotI2RlZmluZSBETUFfQ09OVFJPTF9UU0YJCTB4MDAyMDAwMDAgLyogVHJhbnNtaXQgIFN0b3JlIGFuZCBGb3J3YXJkICovCi0jZGVmaW5lIERNQV9DT05UUk9MX0ZURgkJMHgwMDEwMDAwMCAvKiBGbHVzaCB0cmFuc21pdCBGSUZPICovCi0KLWVudW0gdHRjX2NvbnRyb2wgewotCURNQV9DT05UUk9MX1RUQ182NCA9IDB4MDAwMDAwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzEyOCA9IDB4MDAwMDQwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzE5MiA9IDB4MDAwMDgwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzI1NiA9IDB4MDAwMGMwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzQwID0gMHgwMDAxMDAwMCwKLQlETUFfQ09OVFJPTF9UVENfMzIgPSAweDAwMDE0MDAwLAotCURNQV9DT05UUk9MX1RUQ18yNCA9IDB4MDAwMTgwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzE2ID0gMHgwMDAxYzAwMCwKLX07Ci0jZGVmaW5lIERNQV9DT05UUk9MX1RDX1RYX01BU0sJMHhmZmZlM2ZmZgotCi0jZGVmaW5lIERNQV9DT05UUk9MX0VGQwkJMHgwMDAwMDEwMAotI2RlZmluZSBETUFfQ09OVFJPTF9GRUYJCTB4MDAwMDAwODAKLSNkZWZpbmUgRE1BX0NPTlRST0xfRlVGCQkweDAwMDAwMDQwCi0KLWVudW0gcnRjX2NvbnRyb2wgewotCURNQV9DT05UUk9MX1JUQ182NCA9IDB4MDAwMDAwMDAsCi0JRE1BX0NPTlRST0xfUlRDXzMyID0gMHgwMDAwMDAwOCwKLQlETUFfQ09OVFJPTF9SVENfOTYgPSAweDAwMDAwMDEwLAotCURNQV9DT05UUk9MX1JUQ18xMjggPSAweDAwMDAwMDE4LAotfTsKLSNkZWZpbmUgRE1BX0NPTlRST0xfVENfUlhfTUFTSwkweGZmZmZmZmU3Ci0KLSNkZWZpbmUgRE1BX0NPTlRST0xfT1NGCTB4MDAwMDAwMDQJLyogT3BlcmF0ZSBvbiBzZWNvbmQgZnJhbWUgKi8KLQotLyogTU1DIHJlZ2lzdGVycyBvZmZzZXQgKi8KLSNkZWZpbmUgR01BQ19NTUNfQ1RSTCAgICAgIDB4MTAwCi0jZGVmaW5lIEdNQUNfTU1DX1JYX0lOVFIgICAweDEwNAotI2RlZmluZSBHTUFDX01NQ19UWF9JTlRSICAgMHgxMDgKLSNkZWZpbmUgR01BQ19NTUNfUlhfQ1NVTV9PRkZMT0FEICAgMHgyMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MTcxYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgTUFDIDEwLzEwMCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIKLSAgY3VycmVudGx5IHRlc3RlZCBvbiBhbGwgdGhlIFNUIGJvYXJkcyBiYXNlZCBvbiBTVGI3MTA5IGFuZCBzdHg3MjAwIFNvQ3MuCi0KLSAgRFdDIEV0aGVyIE1BQyAxMC8xMDAgVW5pdmVyc2FsIHZlcnNpb24gNC4wIGhhcyBiZWVuIHVzZWQgZm9yIGRldmVsb3BpbmcKLSAgdGhpcyBjb2RlLgotCi0gIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi0gIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCi0gIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCi0KLSAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgIm1hYzEwMC5oIgotCi0jdW5kZWYgTUFDMTAwX0RFQlVHCi0vKiNkZWZpbmUgTUFDMTAwX0RFQlVHKi8KLSNpZmRlZiBNQUMxMDBfREVCVUcKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIG1hYzEwMF9jb3JlX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpOwotCi0Jd3JpdGVsKCh2YWx1ZSB8IE1BQ19DT1JFX0lOSVQpLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7Ci0KLSNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAotCXdyaXRlbChFVEhfUF84MDIxUSwgaW9hZGRyICsgTUFDX1ZMQU4xKTsKLSNlbmRpZgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfbWFjX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0JICAgICAgICJcdCAgTUFDMTAwIENTUiAoYmFzZSBhZGRyID0gMHglOHgpXG4iCi0JICAgICAgICJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKLQlwcl9pbmZvKCJcdGNvbnRyb2wgcmVnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0NPTlRST0wsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSk7Ci0JcHJfaW5mbygiXHRhZGRyIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuICIsIE1BQ19BRERSX0hJR0gsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0hJR0gpKTsKLQlwcl9pbmZvKCJcdGFkZHIgTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfQUREUl9MT1csCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0xPVykpOwotCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggSEkgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCQkJTUFDX0hBU0hfSElHSCwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCkpOwotCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCQkJTUFDX0hBU0hfTE9XLCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9MT1cpKTsKLQlwcl9pbmZvKCJcdGZsb3cgY29udHJvbCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCi0JCU1BQ19GTE9XX0NUUkwsIHJlYWRsKGlvYWRkciArIE1BQ19GTE9XX0NUUkwpKTsKLQlwcl9pbmZvKCJcdFZMQU4xIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMSwKLQkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4xKSk7Ci0JcHJfaW5mbygiXHRWTEFOMiB0YWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfVkxBTjIsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19WTEFOMikpOwotCXByX2luZm8oIlxuXHRNQUMgbWFuYWdlbWVudCBjb3VudGVyIHJlZ2lzdGVyc1xuIik7Ci0JcHJfaW5mbygiXHQgTU1DIGNydGwgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfQ09OVFJPTCwgcmVhZGwoaW9hZGRyICsgTU1DX0NPTlRST0wpKTsKLQlwcl9pbmZvKCJcdCBNTUMgSGlnaCBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfSElHSF9JTlRSLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSKSk7Ci0JcHJfaW5mbygiXHQgTU1DIExvdyBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfTE9XX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUikpOwotCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgICAgTU1DX0hJR0hfSU5UUl9NQVNLLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spKTsKLQlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgICAgTU1DX0xPV19JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUl9NQVNLKSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwKLQkJCSAgIHUzMiBkbWFfcngpCi17Ci0JdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKLQkvKiBETUEgU1cgcmVzZXQgKi8KLQl2YWx1ZSB8PSBETUFfQlVTX01PREVfU0ZUX1JFU0VUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKLQlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSkgJiBETUFfQlVTX01PREVfU0ZUX1JFU0VUKSk7Ci0KLQkvKiBFbmFibGUgQXBwbGljYXRpb24gQWNjZXNzIGJ5IHdyaXRpbmcgdG8gRE1BIENTUjAgKi8KLQl3cml0ZWwoRE1BX0JVU19NT0RFX0RFRkFVTFQgfCAocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpLAotCSAgICAgICBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Ci0KLQkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCi0JICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KLQl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKLQl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogU3RvcmUgYW5kIEZvcndhcmQgY2FwYWJpbGl0eSBpcyBub3QgdXNlZCBhdCBhbGwuLgotICogVGhlIHRyYW5zbWl0IHRocmVzaG9sZCBjYW4gYmUgcHJvZ3JhbW1lZCBieQotICogc2V0dGluZyB0aGUgVFRDIGJpdHMgaW4gdGhlIERNQSBjb250cm9sIHJlZ2lzdGVyLiovCi1zdGF0aWMgdm9pZCBtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAotCQkJCSAgICAgIGludCByeG1vZGUpCi17Ci0JdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlpZiAodHhtb2RlIDw9IDMyKQotCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKLQllbHNlIGlmICh0eG1vZGUgPD0gNjQpCi0JCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OwotCWVsc2UKLQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OwotCi0Jd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0KLQlEQkcoS0VSTl9ERUJVRyAiTUFDMTAwIERNQSBDU1IgXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQotCQlwcl9kZWJ1ZygiXHQgQ1NSJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAotCQkgICAgICAgKERNQV9CVVNfTU9ERSArIGkgKiA0KSwKLQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIGkgKiA0KSk7Ci0JREJHKEtFUk5fREVCVUcgIlx0IENTUjIwIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgRE1BX0NVUl9UWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9UWF9CVUZfQUREUikpOwotCURCRyhLRVJOX0RFQlVHICJcdCBDU1IyMSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCi0JICAgIERNQV9DVVJfUlhfQlVGX0FERFIsIHJlYWRsKGlvYWRkciArIERNQV9DVVJfUlhfQlVGX0FERFIpKTsKLQlyZXR1cm47Ci19Ci0KLS8qIERNQSBjb250cm9sbGVyIGhhcyB0d28gY291bnRlcnMgdG8gdHJhY2sgdGhlIG51bWJlciBvZgotICAgdGhlIHJlY2VpdmUgbWlzc2VkIGZyYW1lcy4gKi8KLXN0YXRpYyB2b2lkIG1hYzEwMF9kbWFfZGlhZ25vc3RpY19mcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKLQl1MzIgY3NyOCA9IHJlYWRsKGlvYWRkciArIERNQV9NSVNTRURfRlJBTUVfQ1RSKTsKLQotCWlmICh1bmxpa2VseShjc3I4KSkgewotCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFKSB7Ci0JCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gMHg4MDA7Ci0JCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IDB4ODAwOwotCQl9IGVsc2UgewotCQkJdW5zaWduZWQgaW50IG92ZV9jbnRyOwotCQkJb3ZlX2NudHIgPSAoKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9DTlRSKSA+PiAxNyk7Ci0JCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gb3ZlX2NudHI7Ci0JCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IG92ZV9jbnRyOwotCQl9Ci0KLQkJaWYgKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9NKSB7Ci0JCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSAweGZmZmY7Ci0JCQl4LT5yeF9taXNzZWRfY250ciArPSAweGZmZmY7Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgbWlzc19mID0gKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX01fQ05UUik7Ci0JCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSBtaXNzX2Y7Ci0JCQl4LT5yeF9taXNzZWRfY250ciArPSBtaXNzX2Y7Ci0JCX0KLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IpKSB7Ci0JCQl4LT50eF91bmRlcmZsb3crKzsKLQkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5ub19jYXJyaWVyKSkgewotCQkJeC0+dHhfY2FycmllcisrOwotCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lmxvc3NfY2FycmllcikpIHsKLQkJCXgtPnR4X2xvc3NjYXJyaWVyKys7Ci0JCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkoKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkgfHwKLQkJCSAgICAgKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSB8fAotCQkJICAgICAocC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24pKSkKLQkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLnR4LmNvbGxpc2lvbl9jb3VudDsKLQkJcmV0ID0gLTE7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCkpIHsKLQkJeC0+dHhfaGVhcnRiZWF0Kys7Ci0JCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7Ci0JCXJldCA9IC0xOwotCX0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZGVmZXJyZWQpKQotCQl4LT50eF9kZWZlcnJlZCsrOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyBpZiBlYWNoIGluY29taW5nIGZyYW1lIGhhcyBzb21lIGVycm9ycwotICogYW5kLCBpZiByZXF1aXJlZCwgdXBkYXRlcyB0aGUgbXVsdGljYXN0IHN0YXRpc3RpY3MuCi0gKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHJldHVybnMgY3N1bV9ub25lIGJlY2FzdWUgdGhlIGRldmljZQotICogaXMgbm90IGFibGUgdG8gY29tcHV0ZSB0aGUgY3N1bSBpbiBIVy4gKi8KLXN0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JaW50IHJldCA9IGNzdW1fbm9uZTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxhc3RfZGVzY3JpcHRvciA9PSAwKSkgewotCQlwcl93YXJuaW5nKCJtYWMxMDAgRXJyb3I6IE92ZXJzaXplZCBFdGhlcm5ldCAiCi0JCQkgICAiZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzXG4iKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJcmV0dXJuIGRpc2NhcmRfZnJhbWU7Ci0JfQotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kZXNjcmlwdG9yX2Vycm9yKSkKLQkJCXgtPnJ4X2Rlc2MrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LnBhcnRpYWxfZnJhbWVfZXJyb3IpKQotCQkJeC0+cnhfcGFydGlhbCsrOwotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucnVuX2ZyYW1lKSkKLQkJCXgtPnJ4X3J1bnQrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmZyYW1lX3Rvb19sb25nKSkKLQkJCXgtPnJ4X3Rvb2xvbmcrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmNvbGxpc2lvbikpIHsKLQkJCXgtPnJ4X2NvbGxpc2lvbisrOwotCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY3JjX2Vycm9yKSkgewotCQkJeC0+cnhfY3JjKys7Ci0JCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOwotCQl9Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kcmliYmxpbmcpKQotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxlbmd0aF9lcnJvcikpIHsKLQkJeC0+cnhfbGVuZ2h0Kys7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5taWlfZXJyb3IpKSB7Ci0JCXgtPnJ4X21paSsrOwotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQlpZiAocC0+ZGVzMDEucngubXVsdGljYXN0X2ZyYW1lKSB7Ci0JCXgtPnJ4X211bHRpY2FzdCsrOwotCQlzdGF0cy0+bXVsdGljYXN0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hYzEwMF9pcnFfc3RhdHVzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2dldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUFI7Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPIHwKLQkJCSAgIE1BQ19DT05UUk9MX0hQKTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gSEFTSF9UQUJMRV9TSVpFKQotCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUE07Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUFIgfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPKTsKLQkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0hJR0gpOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCkgewkvKiBubyBtdWx0aWNhc3QgKi8KLQkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfAotCQkJICAgTUFDX0NPTlRST0xfSE8gfCBNQUNfQ09OVFJPTF9IUCk7Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0JCXUzMiBtY19maWx0ZXJbMl07Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCi0JCS8qIFBlcmZlY3QgZmlsdGVyIG1vZGUgZm9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kIEhhc2gKLQkJICAgZmlsdGVyIGZvciBtdWx0aWNhc3QgKi8KLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfSFA7Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGCi0JCQkgICB8IE1BQ19DT05UUk9MX0hPKTsKLQotCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bwotCQkJICogaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KLQkJCWludCBiaXRfbnIgPQotCQkJICAgIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7Ci0JCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KLQkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0Ci0JCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLwotCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7Ci0JCX0KLQkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKLQkJd3JpdGVsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7Ci0JfQotCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7Ci0KLQlEQkcoS0VSTl9JTkZPICIlczogQ1RSTCByZWc6IDB4JTA4eCBIYXNoIHJlZ3M6ICIKLQkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLAotCSAgICBfX2Z1bmNfXywgcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpLAotCSAgICByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfZmxvd19jdHJsKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAotCQkJICAgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQotewotCXVuc2lnbmVkIGludCBmbG93ID0gTUFDX0ZMT1dfQ1RSTF9FTkFCTEU7Ci0KLQlpZiAoZHVwbGV4KQotCQlmbG93IHw9IChwYXVzZV90aW1lIDw8IE1BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOwotCXdyaXRlbChmbG93LCBpb2FkZHIgKyBNQUNfRkxPV19DVFJMKTsKLQotCXJldHVybjsKLX0KLQotLyogTm8gUE1UIG1vZHVsZSBzdXBwb3J0ZWQgaW4gb3VyIFNvQyAgZm9yIHRoZSBFdGhlcm5ldCBDb250cm9sbGVyLiAqLwotc3RhdGljIHZvaWQgbWFjMTAwX3BtdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCi0JCQkJaW50IGRpc2FibGVfcnhfaWMpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7Ci0JCXAtPmRlczAxLnJ4Lm93biA9IDE7Ci0JCXAtPmRlczAxLnJ4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzJLaUIgLSAxOwotCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQotCQkJcC0+ZGVzMDEucnguZW5kX3JpbmcgPSAxOwotCQlpZiAoZGlzYWJsZV9yeF9pYykKLQkJCXAtPmRlczAxLnJ4LmRpc2FibGVfaWMgPSAxOwotCQlwKys7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7Ci0JCXAtPmRlczAxLnR4Lm93biA9IDA7Ci0JCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCi0JCQlwLT5kZXMwMS50eC5lbmRfcmluZyA9IDE7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS50eC5vd247Ci19Ci0KLXN0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLnJ4Lm93bjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEudHgub3duID0gMTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEucngub3duID0gMTsKLX0KLQotc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50OwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfcmVsZWFzZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlpbnQgdGVyID0gcC0+ZGVzMDEudHguZW5kX3Jpbmc7Ci0KLQkvKiBjbGVhbiBmaWVsZCB1c2VkIHdpdGhpbiB0aGUgeG1pdCAqLwotCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSAwOwotCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDA7Ci0JcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gMDsKLQotCS8qIGNsZWFuIHN0YXR1cyByZXBvcnRlZCAqLwotCXAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkgPSAwOwotCXAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvciA9IDA7Ci0JcC0+ZGVzMDEudHgubm9fY2FycmllciA9IDA7Ci0JcC0+ZGVzMDEudHgubG9zc19jYXJyaWVyID0gMDsKLQlwLT5kZXMwMS50eC5leGNlc3NpdmVfZGVmZXJyYWwgPSAwOwotCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zID0gMDsKLQlwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbiA9IDA7Ci0JcC0+ZGVzMDEudHguaGVhcnRiZWF0X2ZhaWwgPSAwOwotCXAtPmRlczAxLnR4LmRlZmVycmVkID0gMDsKLQotCS8qIHNldCB0ZXJtaW5hdGlvbiBmaWVsZCAqLwotCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gdGVyOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfcHJlcGFyZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAotCQkJCSAgIGludCBjc3VtX2ZsYWcpCi17Ci0JcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOwotCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfY2xvc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMTsKLQlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAxOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfcnhfZnJhbWVfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEucnguZnJhbWVfbGVuZ3RoOwotfQotCi1zdHJ1Y3Qgc3RtbWFjX29wcyBtYWMxMDBfZHJpdmVyID0gewotCS5jb3JlX2luaXQgPSBtYWMxMDBfY29yZV9pbml0LAotCS5kdW1wX21hY19yZWdzID0gbWFjMTAwX2R1bXBfbWFjX3JlZ3MsCi0JLmRtYV9pbml0ID0gbWFjMTAwX2RtYV9pbml0LAotCS5kdW1wX2RtYV9yZWdzID0gbWFjMTAwX2R1bXBfZG1hX3JlZ3MsCi0JLmRtYV9tb2RlID0gbWFjMTAwX2RtYV9vcGVyYXRpb25fbW9kZSwKLQkuZG1hX2RpYWdub3N0aWNfZnIgPSBtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIsCi0JLnR4X3N0YXR1cyA9IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzLAotCS5yeF9zdGF0dXMgPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX3N0YXR1cywKLQkuZ2V0X3R4X2xlbiA9IG1hYzEwMF9nZXRfdHhfbGVuLAotCS5zZXRfZmlsdGVyID0gbWFjMTAwX3NldF9maWx0ZXIsCi0JLmZsb3dfY3RybCA9IG1hYzEwMF9mbG93X2N0cmwsCi0JLnBtdCA9IG1hYzEwMF9wbXQsCi0JLmluaXRfcnhfZGVzYyA9IG1hYzEwMF9pbml0X3J4X2Rlc2MsCi0JLmluaXRfdHhfZGVzYyA9IG1hYzEwMF9pbml0X3R4X2Rlc2MsCi0JLmdldF90eF9vd25lciA9IG1hYzEwMF9nZXRfdHhfb3duZXIsCi0JLmdldF9yeF9vd25lciA9IG1hYzEwMF9nZXRfcnhfb3duZXIsCi0JLnJlbGVhc2VfdHhfZGVzYyA9IG1hYzEwMF9yZWxlYXNlX3R4X2Rlc2MsCi0JLnByZXBhcmVfdHhfZGVzYyA9IG1hYzEwMF9wcmVwYXJlX3R4X2Rlc2MsCi0JLmNsZWFyX3R4X2ljID0gbWFjMTAwX2NsZWFyX3R4X2ljLAotCS5jbG9zZV90eF9kZXNjID0gbWFjMTAwX2Nsb3NlX3R4X2Rlc2MsCi0JLmdldF90eF9scyA9IG1hYzEwMF9nZXRfdHhfbHMsCi0JLnNldF90eF9vd25lciA9IG1hYzEwMF9zZXRfdHhfb3duZXIsCi0JLnNldF9yeF9vd25lciA9IG1hYzEwMF9zZXRfcnhfb3duZXIsCi0JLmdldF9yeF9mcmFtZV9sZW4gPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKLQkuaG9zdF9pcnFfc3RhdHVzID0gbWFjMTAwX2lycV9zdGF0dXMsCi0JLnNldF91bWFjX2FkZHIgPSBtYWMxMDBfc2V0X3VtYWNfYWRkciwKLQkuZ2V0X3VtYWNfYWRkciA9IG1hYzEwMF9nZXRfdW1hY19hZGRyLAotfTsKLQotc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjMTAwX3NldHVwKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKLQotCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCXByX2luZm8oIlx0TUFDIDEwLzEwMFxuIik7Ci0KLQltYWMtPm9wcyA9ICZtYWMxMDBfZHJpdmVyOwotCW1hYy0+aHcucG10ID0gUE1UX05PVF9TVVBQT1JURUQ7Ci0JbWFjLT5ody5saW5rLnBvcnQgPSBNQUNfQ09OVFJPTF9QUzsKLQltYWMtPmh3LmxpbmsuZHVwbGV4ID0gTUFDX0NPTlRST0xfRjsKLQltYWMtPmh3Lmxpbmsuc3BlZWQgPSAwOwotCW1hYy0+aHcubWlpLmFkZHIgPSBNQUNfTUlJX0FERFI7Ci0JbWFjLT5ody5taWkuZGF0YSA9IE1BQ19NSUlfREFUQTsKLQotCXJldHVybiBtYWM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKaW5kZXggNmQyZWFlMy4uYmEzNWU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaApAQCAtMjAsNyArMjAsOCBAQAogICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSJPY3RfMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiSmFuXzIwMTAiCisjaW5jbHVkZSA8bGludXgvc3RtbWFjLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKICNkZWZpbmUgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKQEAgLTU3LDcgKzU4LDcgQEAKIAlpbnQgcnhfY3N1bTsKIAl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zejsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjX3R5cGU7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHc7CiAKIAlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzIHhzdGF0czsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKQEAgLTY5LDYgKzcwLDcgQEAKIAlpbnQgcGh5X21hc2s7CiAJaW50ICgqcGh5X3Jlc2V0KSAodm9pZCAqcHJpdik7CiAJdm9pZCAoKmZpeF9tYWNfc3BlZWQpICh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOworCXZvaWQgKCpidXNfc2V0dXApKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKIAl2b2lkICpic3BfcHJpdjsKIAogCWludCBwaHlfaXJxOwpAQCAtOTMsNiArOTUsMjggQEAKICNlbmRpZgogfTsKIAorI2lmZGVmIENPTkZJR19TVE1fRFJJVkVSUworI2luY2x1ZGUgPGxpbnV4L3N0bS9wYWQuaD4KK3N0YXRpYyBpbmxpbmUgaW50IHN0bW1hY19jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIFBhZCByb3V0aW5nIHNldHVwICovCisJaWYgKElTX0VSUihkZXZtX3N0bV9wYWRfY2xhaW0oJnBkZXYtPmRldiwgcGxhdF9kYXQtPnBhZF9jb25maWcsCisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZXF1ZXN0IHBhZHMhXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCXJldHVybiByZXQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc3RtbWFjX2NsYWltX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogZXh0ZXJuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIGV4dGVybiBpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogZXh0ZXJuIHZvaWQgc3RtbWFjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKaW5kZXggNjk0ZWJlNi4uMGFiZWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9waHkuaD4KIAogI2luY2x1ZGUgInN0bW1hYy5oIgorI2luY2x1ZGUgImR3bWFjX2RtYS5oIgogCiAjZGVmaW5lIFJFR19TUEFDRV9TSVpFCTB4MTA1NAogI2RlZmluZSBNQUMxMDBfRVRIVE9PTF9OQU1FCSJzdF9tYWMxMDAiCkBAIC0yNjgsOCArMjY5LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmV0ZGV2LT5iYXNlX2FkZHI7Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAotCQkJCQkgICAgICAgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CisJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAorCQkJCQkgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjgzLDggKzI4NCw4IEBACiAJaW50IGk7CiAKIAkvKiBVcGRhdGUgSFcgc3RhdHMgaWYgc3VwcG9ydGVkICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX2RpYWdub3N0aWNfZnIoJmRldi0+c3RhdHMsICZwcml2LT54c3RhdHMsCi0JCQkJCSAgICAgICBpb2FkZHIpOworCXByaXYtPmh3LT5kbWEtPmRtYV9kaWFnbm9zdGljX2ZyKCZkZXYtPnN0YXRzLCAodm9pZCAqKSAmcHJpdi0+eHN0YXRzLAorCQkJCQkgaW9hZGRyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBTVE1NQUNfU1RBVFNfTEVOOyBpKyspIHsKIAkJY2hhciAqcCA9IChjaGFyICopcHJpdiArIHN0bW1hY19nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggNTA4ZmJhOC4uYTY3MzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpAQCAtNDUsNyArNDQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0bS9zb2MuaD4KICNpbmNsdWRlICJzdG1tYWMuaCIKIAogI2RlZmluZSBTVE1NQUNfUkVTT1VSQ0VfTkFNRQkic3RtbWFjZXRoIgpAQCAtMjI2LDQxICsyMjQsMzggQEAKIAkJaWYgKHBoeWRldi0+ZHVwbGV4ICE9IHByaXYtPm9sZGR1cGxleCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCWlmICghKHBoeWRldi0+ZHVwbGV4KSkKLQkJCQljdHJsICY9IH5wcml2LT5tYWNfdHlwZS0+aHcubGluay5kdXBsZXg7CisJCQkJY3RybCAmPSB+cHJpdi0+aHctPmxpbmsuZHVwbGV4OwogCQkJZWxzZQotCQkJCWN0cmwgfD0gcHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsuZHVwbGV4OworCQkJCWN0cmwgfD0gcHJpdi0+aHctPmxpbmsuZHVwbGV4OwogCQkJcHJpdi0+b2xkZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CiAJCX0KIAkJLyogRmxvdyBDb250cm9sIG9wZXJhdGlvbiAqLwogCQlpZiAocGh5ZGV2LT5wYXVzZSkKLQkJCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAotCQkJCQkJICAgICAgIGZjLCBwYXVzZV90aW1lKTsKKwkJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAorCQkJCQkJIGZjLCBwYXVzZV90aW1lKTsKIAogCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSBwcml2LT5zcGVlZCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgewogCQkJY2FzZSAxMDAwOgogCQkJCWlmIChsaWtlbHkocHJpdi0+aXNfZ21hYykpCi0JCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDEwMDoKIAkJCWNhc2UgMTA6CiAJCQkJaWYgKHByaXYtPmlzX2dtYWMpIHsKLQkJCQkJY3RybCB8PSBwcml2LT5tYWNfdHlwZS0+aHcubGluay5wb3J0OworCQkJCQljdHJsIHw9IHByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMCkgewotCQkJCQkJY3RybCB8PQotCQkJCQkJICAgIHByaXYtPm1hY190eXBlLT5ody5saW5rLgotCQkJCQkJICAgIHNwZWVkOworCQkJCQkJY3RybCB8PSBwcml2LT5ody0+bGluay5zcGVlZDsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCWN0cmwgJj0KLQkJCQkJCSAgICB+KHByaXYtPm1hY190eXBlLT5ody4KLQkJCQkJCSAgICAgIGxpbmsuc3BlZWQpOworCQkJCQkJY3RybCAmPSB+KHByaXYtPmh3LT5saW5rLnNwZWVkKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7Ci0JCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJfQotCQkJCXByaXYtPmZpeF9tYWNfc3BlZWQocHJpdi0+YnNwX3ByaXYsCi0JCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CisJCQkJaWYgKGxpa2VseShwcml2LT5maXhfbWFjX3NwZWVkKSkKKwkJCQkJcHJpdi0+Zml4X21hY19zcGVlZChwcml2LT5ic3BfcHJpdiwKKwkJCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKQEAgLTMwNSw4ICszMDAsOCBAQAogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CS8qIFBIWSB0byBjb25uZWN0ICovCi0JY2hhciBidXNfaWRbQlVTX0lEX1NJWkVdOworCWNoYXIgcGh5X2lkW01JSV9CVVNfSURfU0laRSArIDNdOworCWNoYXIgYnVzX2lkW01JSV9CVVNfSURfU0laRV07CiAKIAlwcml2LT5vbGRsaW5rID0gMDsKIAlwcml2LT5zcGVlZCA9IDA7CkBAIC0zMTgsNyArMzEzLDggQEAKIAl9CiAKIAlzbnByaW50ZihidXNfaWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcHJpdi0+YnVzX2lkKTsKLQlzbnByaW50ZihwaHlfaWQsIEJVU19JRF9TSVpFLCBQSFlfSURfRk1ULCBidXNfaWQsIHByaXYtPnBoeV9hZGRyKTsKKwlzbnByaW50ZihwaHlfaWQsIE1JSV9CVVNfSURfU0laRSArIDMsIFBIWV9JRF9GTVQsIGJ1c19pZCwKKwkJIHByaXYtPnBoeV9hZGRyKTsKIAlwcl9kZWJ1Zygic3RtbWFjX2luaXRfcGh5OiAgdHJ5aW5nIHRvIGF0dGFjaCB0byAlc1xuIiwgcGh5X2lkKTsKIAogCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X2lkLCAmc3RtbWFjX2FkanVzdF9saW5rLCAwLApAQCAtNTA4LDggKzUwNCw4IEBACiAJcHJpdi0+Y3VyX3R4ID0gMDsKIAogCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsIHJ4c2l6ZSwgZGlzX2ljKTsKLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCB0eHNpemUpOworCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCByeHNpemUsIGRpc19pYyk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CiAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKSB7CiAJCXByX2luZm8oIlJYIGRlc2NyaXB0b3IgcmluZzpcbiIpOwpAQCAtNTQ0LDggKzU0MCw4IEBACiAJCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBpOwogCQkJaWYgKHAtPmRlczIpCiAJCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHAtPmRlczIsCi0JCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCi0JCQkJIERNQV9UT19ERVZJQ0UpOworCQkJCQkJIHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfbGVuKHApLAorCQkJCQkJIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+dHhfc2tidWZmW2ldKTsKIAkJCXByaXYtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCX0KQEAgLTU3NSw1MCArNTcxLDYgQEAKIH0KIAogLyoqCi0gKiBzdG1tYWNfZG1hX3N0YXJ0X3R4Ci0gKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKLSAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSB0eCBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bW1hY19kbWFfc3RvcF90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0JdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOwotCXJldHVybjsKLX0KLQotLyoqCi0gKiBzdG1tYWNfZG1hX3N0YXJ0X3J4Ci0gKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKLSAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSByeCBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSAmPSB+RE1BX0NPTlRST0xfU1I7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKgogICogIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUgLSBIVyBETUEgb3BlcmF0aW9uIG1vZGUKICAqICBAcHJpdiA6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZS4KICAqICBEZXNjcmlwdGlvbjogaXQgc2V0cyB0aGUgRE1BIG9wZXJhdGlvbiBtb2RlOiB0eC9yeCBETUEgdGhyZXNob2xkcwpAQCAtNjI5LDE4ICs1ODEsMTggQEAKIHsKIAlpZiAoIXByaXYtPmlzX2dtYWMpIHsKIAkJLyogTUFDIDEwLzEwMCAqLwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOworCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOwogCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOwogCX0gZWxzZSB7CiAJCWlmICgocHJpdi0+ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKSAmJiAodHhfY29lKSkgewotCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCi0JCQkJCQkgICAgICBTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOworCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCQlTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOwogCQkJdGMgPSBTRl9ETUFfTU9ERTsKIAkJCXByaXYtPnR4X2NvZSA9IEhXX0NTVU07CiAJCX0gZWxzZSB7CiAJCQkvKiBDaGVja3N1bSBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc29mdHdhcmUuICovCi0JCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCi0JCQkJCQkgICAgICBTRl9ETUFfTU9ERSk7CisJCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCisJCQkJCQlTRl9ETUFfTU9ERSk7CiAJCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOwogCQl9CiAJfQpAQCAtNjQ5LDg4ICs2MDEsNiBAQAogCXJldHVybjsKIH0KIAotI2lmZGVmIFNUTU1BQ19ERUJVRwotLyoqCi0gKiBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUKLSAqIEBzdGF0dXM6IHR4IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkCi0gKiBEZXNjcmlwdGlvbjogaXQgc2hvd3MgdGhlIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgZm9yIENTUjVbMjI6MjBdCi0gKi8KLXN0YXRpYyB2b2lkIHNob3dfdHhfcHJvY2Vzc19zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdHVzKQotewotCXVuc2lnbmVkIGludCBzdGF0ZTsKLQlzdGF0ZSA9IChzdGF0dXMgJiBETUFfU1RBVFVTX1RTX01BU0spID4+IERNQV9TVEFUVVNfVFNfU0hJRlQ7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSAwOgotCQlwcl9pbmZvKCItIFRYIChTdG9wcGVkKTogUmVzZXQgb3IgU3RvcCBjb21tYW5kXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTpGZXRjaGluZyB0aGUgVHggZGVzY1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFdhaXRpbmcgZm9yIGVuZCBvZiB0eFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFJlYWRpbmcgdGhlIGRhdGEgIgotCQkgICAgICAgImFuZCBxdWV1aW5nIHRoZSBkYXRhIGludG8gdGhlIFR4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJcHJfaW5mbygiLSBUWCAoU3VzcGVuZGVkKTogVHggQnVmZiBVbmRlcmZsb3cgIgotCQkgICAgICAgIm9yIGFuIHVuYXZhaWxhYmxlIFRyYW5zbWl0IGRlc2NyaXB0b3JcbiIpOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBDbG9zaW5nIFR4IGRlc2NyaXB0b3JcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotCi0vKioKLSAqIHNob3dfcnhfcHJvY2Vzc19zdGF0ZQotICogQHN0YXR1czogcnggZGVzY3JpcHRvciBzdGF0dXMgZmllbGQKLSAqIERlc2NyaXB0aW9uOiBpdCBzaG93cyB0aGUgIFJlY2VpdmUgUHJvY2VzcyBTdGF0ZSBmb3IgQ1NSNVsxOToxN10KLSAqLwotc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCi17Ci0JdW5zaWduZWQgaW50IHN0YXRlOwotCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIDA6Ci0JCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCi0JCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgotCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KIC8qKgogICogc3RtbWFjX3R4OgogICogQHByaXY6IHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZQpAQCAtNzQ4LDE2ICs2MTgsMTYgQEAKIAkJc3RydWN0IGRtYV9kZXNjICpwID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CiAKIAkJLyogQ2hlY2sgaWYgdGhlIGRlc2NyaXB0b3IgaXMgb3duZWQgYnkgdGhlIERNQS4gKi8KLQkJaWYgKHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9vd25lcihwKSkKKwkJaWYgKHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfb3duZXIocCkpCiAJCQlicmVhazsKIAogCQkvKiBWZXJpZnkgdHggZXJyb3IgYnkgbG9va2luZyBhdCB0aGUgbGFzdCBzZWdtZW50ICovCi0JCWxhc3QgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfdHhfbHMocCk7CisJCWxhc3QgPSBwcml2LT5ody0+ZGVzYy0+Z2V0X3R4X2xzKHApOwogCQlpZiAobGlrZWx5KGxhc3QpKSB7CiAJCQlpbnQgdHhfZXJyb3IgPQotCQkJICAgIHByaXYtPm1hY190eXBlLT5vcHMtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKLQkJCQkJCQkgICAmcHJpdi0+eHN0YXRzLAotCQkJCQkJCSAgIHAsIGlvYWRkcik7CisJCQkJcHJpdi0+aHctPmRlc2MtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCQkgICZwcml2LT54c3RhdHMsIHAsCisJCQkJCQkJICBpb2FkZHIpOwogCQkJaWYgKGxpa2VseSh0eF9lcnJvciA9PSAwKSkgewogCQkJCXByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCXByaXYtPnhzdGF0cy50eF9wa3RfbisrOwpAQCAtNzY5LDcgKzYzOSw3IEBACiAKIAkJaWYgKGxpa2VseShwLT5kZXMyKSkKIAkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBwLT5kZXMyLAotCQkJCQkgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xlbihwKSwKKwkJCQkJIHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfbGVuKHApLAogCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCWlmICh1bmxpa2VseShwLT5kZXMzKSkKIAkJCXAtPmRlczMgPSAwOwpAQCAtNzkwLDcgKzY2MCw3IEBACiAJCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJfQogCi0JCXByaXYtPm1hY190eXBlLT5vcHMtPnJlbGVhc2VfdHhfZGVzYyhwKTsKKwkJcHJpdi0+aHctPmRlc2MtPnJlbGVhc2VfdHhfZGVzYyhwKTsKIAogCQllbnRyeSA9ICgrK3ByaXYtPmRpcnR5X3R4KSAlIHR4c2l6ZTsKIAl9CkBAIC04MTQsNyArNjg0LDcgQEAKIAkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CiAJZWxzZQogI2VuZGlmCi0Jd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOworCQlwcml2LT5ody0+ZG1hLT5lbmFibGVfZG1hX2lycShwcml2LT5kZXYtPmJhc2VfYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZGlzYWJsZV9pcnEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtODI0LDcgKzY5NCw3IEBACiAJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CiAJZWxzZQogI2VuZGlmCi0Jd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKwkJcHJpdi0+aHctPmRtYS0+ZGlzYWJsZV9kbWFfaXJxKHByaXYtPmRldi0+YmFzZV9hZGRyKTsKIH0KIAogc3RhdGljIGludCBzdG1tYWNfaGFzX3dvcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtODMyLDcgKzcwMiw3IEBACiAJdW5zaWduZWQgaW50IGhhc193b3JrID0gMDsKIAlpbnQgcnhyZXQsIHR4X3dvcmsgPSAwOwogCi0JcnhyZXQgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKKwlyeHJldCA9IHByaXYtPmh3LT5kZXNjLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKIAkJKHByaXYtPmN1cl9yeCAlIHByaXYtPmRtYV9yeF9zaXplKSk7CiAKIAlpZiAocHJpdi0+ZGlydHlfdHggIT0gcHJpdi0+Y3VyX3R4KQpAQCAtODgzLDEyICs3NTMsMTIgQEAKIHsKIAluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CiAKLQlzdG1tYWNfZG1hX3N0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOworCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOwogCWRtYV9mcmVlX3R4X3NrYnVmcyhwcml2KTsKLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCBwcml2LT5kbWFfdHhfc2l6ZSk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9zaXplKTsKIAlwcml2LT5kaXJ0eV90eCA9IDA7CiAJcHJpdi0+Y3VyX3R4ID0gMDsKLQlzdG1tYWNfZG1hX3N0YXJ0X3R4KHByaXYtPmRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF90eChwcml2LT5kZXYtPmJhc2VfYWRkcik7CiAKIAlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKQEAgLTg5Niw5NSArNzY2LDI3IEBACiAJcmV0dXJuOwogfQogCi0vKioKLSAqIHN0bW1hY19kbWFfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIKLSAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBEZXNjcmlwdGlvbjogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIgKERNQSkuCi0gKi8KLXN0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisKK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JLyogcmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIChDU1I1KSAqLwotCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIERNQV9TVEFUVVMpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gcHJpdi0+ZGV2LT5iYXNlX2FkZHI7CisJaW50IHN0YXR1czsKIAotCURCRyhpbnRyLCBJTkZPLCAiJXM6IFtDU1I1OiAweCUwOHhdXG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCXN0YXR1cyA9IHByaXYtPmh3LT5kbWEtPmRtYV9pbnRlcnJ1cHQocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCSAgICAgICZwcml2LT54c3RhdHMpOworCWlmIChsaWtlbHkoc3RhdHVzID09IGhhbmRsZV90eF9yeCkpCisJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7CiAKLSNpZmRlZiBTVE1NQUNfREVCVUcKLQkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHRyYW5zbWl0IHByb2Nlc3Mgc3RhdGUgKENTUjUgcmVnaXN0ZXIpICovCi0JaWYgKG5ldGlmX21zZ190eF9kb25lKHByaXYpKQotCQlzaG93X3R4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOwotCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKHByaXYpKQotCQlzaG93X3J4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOwotI2VuZGlmCi0JLyogQUJOT1JNQUwgaW50ZXJydXB0cyAqLwotCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfQUlTKSkgewotCQlEQkcoaW50ciwgSU5GTywgIkNTUjVbMTVdIERNQSBBQk5PUk1BTCBJUlE6ICIpOwotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1VORikpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgdW5kZXJmbG93XG4iKTsKLQkJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkgJiYgKHRjIDw9IDI1NikpIHsKLQkJCQkvKiBUcnkgdG8gYnVtcCB1cCB0aGUgdGhyZXNob2xkICovCi0JCQkJdGMgKz0gNjQ7Ci0JCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUoaW9hZGRyLCB0YywKLQkJCQkJICAgICAgU0ZfRE1BX01PREUpOwotCQkJCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKLQkJCX0KLQkJCXN0bW1hY190eF9lcnIocHJpdik7Ci0JCQlwcml2LT54c3RhdHMudHhfdW5kZWZsb3dfaXJxKys7CisJZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzID09IHR4X2hhcmRfZXJyb3JfYnVtcF90YykpIHsKKwkJLyogVHJ5IHRvIGJ1bXAgdXAgdGhlIGRtYSB0aHJlc2hvbGQgb24gdGhpcyBmYWlsdXJlICovCisJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkgJiYgKHRjIDw9IDI1NikpIHsKKwkJCXRjICs9IDY0OworCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUoaW9hZGRyLCB0YywgU0ZfRE1BX01PREUpOworCQkJcHJpdi0+eHN0YXRzLnRocmVzaG9sZCA9IHRjOwogCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVEpUKSkgewotCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCBqYWJiZXJcbiIpOwotCQkJcHJpdi0+eHN0YXRzLnR4X2phYmJlcl9pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7Ci0JCQlwcml2LT54c3RhdHMucnhfb3ZlcmZsb3dfaXJxKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SVSkpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAicmVjZWl2ZSBidWZmZXIgdW5hdmFpbGFibGVcbiIpOwotCQkJcHJpdi0+eHN0YXRzLnJ4X2J1Zl91bmF2X2lycSsrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlBTKSkgewotCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHByb2Nlc3Mgc3RvcHBlZFxuIik7Ci0JCQlwcml2LT54c3RhdHMucnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgewotCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKLQkJCXByaXYtPnhzdGF0cy5yeF93YXRjaGRvZ19pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0VUSSkpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgZWFybHkgaW50ZXJydXB0XG4iKTsKLQkJCXByaXYtPnhzdGF0cy50eF9lYXJseV9pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RQUykpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKLQkJCXByaXYtPnhzdGF0cy50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7Ci0JCQlzdG1tYWNfdHhfZXJyKHByaXYpOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgewotCQkJREJHKGludHIsIElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOwotCQkJcHJpdi0+eHN0YXRzLmZhdGFsX2J1c19lcnJvcl9pcnErKzsKLQkJCXN0bW1hY190eF9lcnIocHJpdik7Ci0JCX0KLQl9Ci0KLQkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLwotCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7Ci0JCXByaXYtPnhzdGF0cy5ub3JtYWxfaXJxX24rKzsKLQkJaWYgKGxpa2VseSgoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JJKSB8fAotCQkJIChpbnRyX3N0YXR1cyAmIChETUFfU1RBVFVTX1RJKSkpKQotCQkJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7Ci0JfQotCi0JLyogT3B0aW9uYWwgaGFyZHdhcmUgYmxvY2tzLCBpbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCAqLwotCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmCi0JCSAgICAgKERNQV9TVEFUVVNfR1BJIHwgRE1BX1NUQVRVU19HTUkgfCBETUFfU1RBVFVTX0dMSSkpKQotCQlwcl9pbmZvKCIlczogdW5leHBlY3RlZCBzdGF0dXMgJTA4eFxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKLQotCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KLQl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOwotCi0JREJHKGludHIsIElORk8sICJcblxuIik7CisJCXN0bW1hY190eF9lcnIocHJpdik7CisJfSBlbHNlIGlmICh1bmxpa2VseShzdGF0dXMgPT0gdHhfaGFyZF9lcnJvcikpCisJCXN0bW1hY190eF9lcnIocHJpdik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMDU4LDE3ICs4NjAsMjAgQEAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKGRldik7CiAKIAkvKiBETUEgaW5pdGlhbGl6YXRpb24gYW5kIFNXIHJlc2V0ICovCi0JaWYgKHVubGlrZWx5KHByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9pbml0KGlvYWRkciwKLQkJcHJpdi0+cGJsLCBwcml2LT5kbWFfdHhfcGh5LCBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7CisJaWYgKHVubGlrZWx5KHByaXYtPmh3LT5kbWEtPmluaXQoaW9hZGRyLCBwcml2LT5wYmwsIHByaXYtPmRtYV90eF9waHksCisJCQkJCSBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7CiAKIAkJcHJfZXJyKCIlczogRE1BIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQ29weSB0aGUgTUFDIGFkZHIgaW50byB0aGUgSFcgICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3VtYWNfYWRkcihpb2FkZHIsIGRldi0+ZGV2X2FkZHIsIDApOworCXByaXYtPmh3LT5tYWMtPnNldF91bWFjX2FkZHIoaW9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKKwkvKiBJZiByZXF1aXJlZCwgcGVyZm9ybSBodyBzZXR1cCBvZiB0aGUgYnVzLiAqLworCWlmIChwcml2LT5idXNfc2V0dXApCisJCXByaXYtPmJ1c19zZXR1cChpb2FkZHIpOwogCS8qIEluaXRpYWxpemUgdGhlIE1BQyBDb3JlICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y29yZV9pbml0KGlvYWRkcik7CisJcHJpdi0+aHctPm1hYy0+Y29yZV9pbml0KGlvYWRkcik7CiAKIAlwcml2LT5zaHV0ZG93biA9IDA7CiAKQEAgLTEwODksMTYgKzg5NCwxNiBAQAogCiAJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqLwogCURCRyhwcm9iZSwgREVCVUcsICIlczogRE1BIFJYL1RYIHByb2Nlc3NlcyBzdGFydGVkLi4uXG4iLCBkZXYtPm5hbWUpOwotCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKLQlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RhcnRfdHgoaW9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF9yeChpb2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOwogI2VuZGlmCiAJLyogRHVtcCBETUEvTUFDIHJlZ2lzdGVycyAqLwogCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZHVtcF9tYWNfcmVncyhpb2FkZHIpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kdW1wX2RtYV9yZWdzKGlvYWRkcik7CisJCXByaXYtPmh3LT5tYWMtPmR1bXBfcmVncyhpb2FkZHIpOworCQlwcml2LT5ody0+ZG1hLT5kdW1wX3JlZ3MoaW9hZGRyKTsKIAl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2KQpAQCAtMTE0Miw4ICs5NDcsOCBAQAogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJLyogU3RvcCBUWC9SWCBETUEgYW5kIGNsZWFyIHRoZSBkZXNjcmlwdG9ycyAqLwotCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7Ci0Jc3RtbWFjX2RtYV9zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdG9wX3R4KGRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKIAogCS8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqLwogCWZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYpOwpAQCAtMTIxNCw4ICsxMDE5LDggQEAKIAkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAogCQkJCQkgICAgQlVGX1NJWkVfOEtpQiwgRE1BX1RPX0RFVklDRSk7CiAJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIEJVRl9TSVpFXzhLaUIsCi0JCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBCVUZfU0laRV84S2lCLAorCQkJCQkJY3N1bV9pbnNlcnRpb24pOwogCiAJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3R4KSAlIHR4c2l6ZTsKIAkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OwpAQCAtMTIyNCwxNiArMTAyOSwxNiBAQAogCQkJCQlza2ItPmRhdGEgKyBCVUZfU0laRV84S2lCLAogCQkJCQlidWYyX3NpemUsIERNQV9UT19ERVZJQ0UpOwogCQlkZXNjLT5kZXMzID0gZGVzYy0+ZGVzMiArIEJVRl9TSVpFXzRLaUI7Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAwLAotCQkJCQkJICAgICBidWYyX3NpemUsIGNzdW1faW5zZXJ0aW9uKTsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3R4X293bmVyKGRlc2MpOworCQlwcml2LT5ody0+ZGVzYy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGJ1ZjJfc2l6ZSwKKwkJCQkJCWNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnNldF90eF9vd25lcihkZXNjKTsKIAkJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAogCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CiAJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIG5vcGFnZWRfbGVuLAotCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPmh3LT5kZXNjLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCisJCQkJCQljc3VtX2luc2VydGlvbik7CiAJfQogCXJldHVybiBlbnRyeTsKIH0KQEAgLTEzMDEsOCArMTEwNiw4IEBACiAJCXVuc2lnbmVkIGludCBub3BhZ2VkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKIAkJCQkJbm9wYWdlZF9sZW4sIERNQV9UT19ERVZJQ0UpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCi0JCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBub3BhZ2VkX2xlbiwKKwkJCQkJCWNzdW1faW5zZXJ0aW9uKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmZyYWdzOyBpKyspIHsKQEAgLTEzMTcsMjEgKzExMjIsMjAgQEAKIAkJCQkJICBmcmFnLT5wYWdlX29mZnNldCwKIAkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGxlbiwKLQkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZGVzYyk7CisJCXByaXYtPmh3LT5kZXNjLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwgbGVuLCBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPmh3LT5kZXNjLT5zZXRfdHhfb3duZXIoZGVzYyk7CiAJfQogCiAJLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpdGlvbiBvbmx5IGZvciB0aGUgbGF0ZXN0IHNlZ21lbnQgKi8KLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbG9zZV90eF9kZXNjKGRlc2MpOworCXByaXYtPmh3LT5kZXNjLT5jbG9zZV90eF9kZXNjKGRlc2MpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVyICovCiAJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xlYXJfdHhfaWMoZGVzYyk7CisJCXByaXYtPmh3LT5kZXNjLT5jbGVhcl90eF9pYyhkZXNjKTsKICNlbmRpZgogCS8qIFRvIGF2b2lkIHJhaXNlIGNvbmRpdGlvbiAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihmaXJzdCk7CisJcHJpdi0+aHctPmRlc2MtPnNldF90eF9vd25lcihmaXJzdCk7CiAKIAlwcml2LT5jdXJfdHgrKzsKIApAQCAtMTM1Myw4ICsxMTU3LDcgQEAKIAogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQkvKiBDU1IxIGVuYWJsZXMgdGhlIHRyYW5zbWl0IERNQSB0byBjaGVjayBmb3IgbmV3IGRlc2NyaXB0b3IgKi8KLQl3cml0ZWwoMSwgZGV2LT5iYXNlX2FkZHIgKyBETUFfWE1UX1BPTExfREVNQU5EKTsKKwlwcml2LT5ody0+ZG1hLT5lbmFibGVfZG1hX3RyYW5zbWlzc2lvbihkZXYtPmJhc2VfYWRkcik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTM5MSw3ICsxMTk0LDcgQEAKIAkJCX0KIAkJCVJYX0RCRyhLRVJOX0lORk8gIlx0cmVmaWxsIGVudHJ5ICMlZFxuIiwgZW50cnkpOwogCQl9Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF9yeF9vd25lcihwICsgZW50cnkpOworCQlwcml2LT5ody0+ZGVzYy0+c2V0X3J4X293bmVyKHAgKyBlbnRyeSk7CiAJfQogCXJldHVybjsKIH0KQEAgLTE0MTIsNyArMTIxNSw3IEBACiAJfQogI2VuZGlmCiAJY291bnQgPSAwOwotCXdoaWxlICghcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X293bmVyKHApKSB7CisJd2hpbGUgKCFwcml2LT5ody0+ZGVzYy0+Z2V0X3J4X293bmVyKHApKSB7CiAJCWludCBzdGF0dXM7CiAKIAkJaWYgKGNvdW50ID49IGxpbWl0KQpAQCAtMTQyNSwxNSArMTIyOCwxNCBAQAogCQlwcmVmZXRjaChwX25leHQpOwogCiAJCS8qIHJlYWQgdGhlIHN0YXR1cyBvZiB0aGUgaW5jb21pbmcgZnJhbWUgKi8KLQkJc3RhdHVzID0gKHByaXYtPm1hY190eXBlLT5vcHMtPnJ4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKLQkJCQkJCQkgJnByaXYtPnhzdGF0cywgcCkpOworCQlzdGF0dXMgPSAocHJpdi0+aHctPmRlc2MtPnJ4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCSAgICAmcHJpdi0+eHN0YXRzLCBwKSk7CiAJCWlmICh1bmxpa2VseShzdGF0dXMgPT0gZGlzY2FyZF9mcmFtZSkpCiAJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQllbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQkvKiBMZW5ndGggc2hvdWxkIG9taXQgdGhlIENSQyAqLwotCQkJaW50IGZyYW1lX2xlbiA9Ci0JCQkgICAgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X2ZyYW1lX2xlbihwKSAtIDQ7CisJCQlpbnQgZnJhbWVfbGVuID0gcHJpdi0+aHctPmRlc2MtPmdldF9yeF9mcmFtZV9sZW4ocCkgLSA0OwogCiAjaWZkZWYgU1RNTUFDX1JYX0RFQlVHCiAJCQlpZiAoZnJhbWVfbGVuID4gRVRIX0ZSQU1FX0xFTikKQEAgLTE1NjksNyArMTM3MSw3IEBACiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X2ZpbHRlcihkZXYpOworCXByaXYtPmh3LT5tYWMtPnNldF9maWx0ZXIoZGV2KTsKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiAJcmV0dXJuOwogfQpAQCAtMTYyMyw5ICsxNDI1LDEwIEBACiAJaWYgKHByaXYtPmlzX2dtYWMpIHsKIAkJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAkJLyogVG8gaGFuZGxlIEdNQUMgb3duIGludGVycnVwdHMgKi8KLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aG9zdF9pcnFfc3RhdHVzKGlvYWRkcik7CisJCXByaXYtPmh3LT5tYWMtPmhvc3RfaXJxX3N0YXR1cyhpb2FkZHIpOwogCX0KLQlzdG1tYWNfZG1hX2ludGVycnVwdChkZXYpOworCisJc3RtbWFjX2RtYV9pbnRlcnJ1cHQocHJpdik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNzQ0LDcgKzE1NDcsNyBAQAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIHN0bW1hY19wb2xsLCA2NCk7CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CisJcHJpdi0+aHctPm1hYy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCiAJCXByX3dhcm5pbmcoIlx0bm8gdmFsaWQgTUFDIGFkZHJlc3M7IgpAQCAtMTc3OSwxNiArMTU4MiwxNiBAQAogCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmRldmljZTsKIAogCWlmIChwcml2LT5pc19nbWFjKQotCQlkZXZpY2UgPSBnbWFjX3NldHVwKGlvYWRkcik7CisJCWRldmljZSA9IGR3bWFjMTAwMF9zZXR1cChpb2FkZHIpOwogCWVsc2UKLQkJZGV2aWNlID0gbWFjMTAwX3NldHVwKGlvYWRkcik7CisJCWRldmljZSA9IGR3bWFjMTAwX3NldHVwKGlvYWRkcik7CiAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5tYWNfdHlwZSA9IGRldmljZTsKKwlwcml2LT5odyA9IGRldmljZTsKIAotCXByaXYtPndvbGVuYWJsZWQgPSBwcml2LT5tYWNfdHlwZS0+aHcucG10OwkvKiBQTVQgc3VwcG9ydGVkICovCisJcHJpdi0+d29sZW5hYmxlZCA9IHByaXYtPmh3LT5wbXQ7CS8qIFBNVCBzdXBwb3J0ZWQgKi8KIAlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQogCQlwcml2LT53b2xvcHRzID0gV0FLRV9NQUdJQzsJCS8qIE1hZ2ljIEZyYW1lICovCiAKQEAgLTE3OTcsOCArMTYwMCw3IEBACiAKIHN0YXRpYyBpbnQgc3RtbWFjcGh5X2R2cl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0X3N0bW1hY3BoeV9kYXRhICpwbGF0X2RhdDsKLQlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqKSgocGRldi0+ZGV2KS5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCXByX2RlYnVnKCJzdG1tYWNwaHlfZHZyX3Byb2JlOiBhZGRlZCBwaHkgZm9yIGJ1cyAlZFxuIiwKIAkgICAgICAgcGxhdF9kYXQtPmJ1c19pZCk7CkBAIC0xODMwLDkgKzE2MzIsNyBAQAogc3RhdGljIGludCBzdG1tYWNfYXNzb2NpYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gKHN0cnVjdCBzdG1tYWNfcHJpdiAqKWRhdGE7Ci0Jc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKnBsYXRfZGF0OwotCi0JcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlEQkcocHJvYmUsIERFQlVHLCAiJXM6IGNoZWNraW5nIHBoeSBmb3IgYnVzICVkXG4iLCBfX2Z1bmNfXywKIAkJcGxhdF9kYXQtPmJ1c19pZCk7CkBAIC0xOTIyLDcgKzE3MjIsNyBAQAogCXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlwcml2LT5kZXZpY2UgPSAmKHBkZXYtPmRldik7CiAJcHJpdi0+ZGV2ID0gbmRldjsKLQlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKikoKHBkZXYtPmRldikucGxhdGZvcm1fZGF0YSk7CisJcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlwcml2LT5idXNfaWQgPSBwbGF0X2RhdC0+YnVzX2lkOwogCXByaXYtPnBibCA9IHBsYXRfZGF0LT5wYmw7CS8qIFRMSSAqLwogCXByaXYtPmlzX2dtYWMgPSBwbGF0X2RhdC0+aGFzX2dtYWM7CS8qIEdNQUMgaXMgb24gYm9hcmQgKi8KQEAgLTE5MzIsNiArMTczMiwxMSBAQAogCS8qIFNldCB0aGUgSS9PIGJhc2UgYWRkciAqLwogCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiAKKwkvKiBWZXJpZnkgZW1iZWRkZWQgcmVzb3VyY2UgZm9yIHRoZSBwbGF0Zm9ybSAqLworCXJldCA9IHN0bW1hY19jbGFpbV9yZXNvdXJjZShwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKIAkvKiBNQUMgSFcgcmV2aWNlIGRldGVjdGlvbiAqLwogCXJldCA9IHN0bW1hY19tYWNfZGV2aWNlX3NldHVwKG5kZXYpOwogCWlmIChyZXQgPCAwKQpAQCAtMTk1Miw2ICsxNzU3LDcgQEAKIAl9CiAKIAlwcml2LT5maXhfbWFjX3NwZWVkID0gcGxhdF9kYXQtPmZpeF9tYWNfc3BlZWQ7CisJcHJpdi0+YnVzX3NldHVwID0gcGxhdF9kYXQtPmJ1c19zZXR1cDsKIAlwcml2LT5ic3BfcHJpdiA9IHBsYXRfZGF0LT5ic3BfcHJpdjsKIAogCXByX2luZm8oIlx0JXMgLSAoZGV2LiBuYW1lOiAlcyAtIGlkOiAlZCwgSVJRICMlZFxuIgpAQCAtMTk4NiwxMiArMTc5MiwxMyBAQAogc3RhdGljIGludCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlwcl9pbmZvKCIlczpcblx0cmVtb3ZpbmcgZHJpdmVyIiwgX19mdW5jX18pOwogCi0Jc3RtbWFjX2RtYV9zdG9wX3J4KG5kZXYtPmJhc2VfYWRkcik7Ci0Jc3RtbWFjX2RtYV9zdG9wX3R4KG5kZXYtPmJhc2VfYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RvcF9yeChuZGV2LT5iYXNlX2FkZHIpOworCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgobmRldi0+YmFzZV9hZGRyKTsKIAogCXN0bW1hY19tYWNfZGlzYWJsZV9yeChuZGV2LT5iYXNlX2FkZHIpOwogCXN0bW1hY19tYWNfZGlzYWJsZV90eChuZGV2LT5iYXNlX2FkZHIpOwpAQCAtMjAzOCwyMSArMTg0NSwyMCBAQAogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCiAJCS8qIFN0b3AgVFgvUlggRE1BICovCi0JCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7Ci0JCXN0bW1hY19kbWFfc3RvcF9yeChkZXYtPmJhc2VfYWRkcik7CisJCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgoZGV2LT5iYXNlX2FkZHIpOworCQlwcml2LT5ody0+ZG1hLT5zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKIAkJLyogQ2xlYXIgdGhlIFJ4L1R4IGRlc2NyaXB0b3JzICovCi0JCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsCi0JCQkJCQkgIHByaXYtPmRtYV9yeF9zaXplLCBkaXNfaWMpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LAotCQkJCQkJICBwcml2LT5kbWFfdHhfc2l6ZSk7CisJCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfcnhfc2l6ZSwKKwkJCQkJICAgICBkaXNfaWMpOworCQlwcml2LT5ody0+ZGVzYy0+aW5pdF90eF9kZXNjKHByaXYtPmRtYV90eCwgcHJpdi0+ZG1hX3R4X3NpemUpOwogCiAJCXN0bW1hY19tYWNfZGlzYWJsZV90eChkZXYtPmJhc2VfYWRkcik7CiAKIAkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCYocGRldi0+ZGV2KSkpIHsKIAkJCS8qIEVuYWJsZSBQb3dlciBkb3duIG1vZGUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBNVCByZWdzICovCiAJCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQotCQkJCXByaXYtPm1hY190eXBlLT5vcHMtPnBtdChkZXYtPmJhc2VfYWRkciwKLQkJCQkJCQkgcHJpdi0+d29sb3B0cyk7CisJCQkJcHJpdi0+aHctPm1hYy0+cG10KGRldi0+YmFzZV9hZGRyLAorCQkJCQkJICAgcHJpdi0+d29sb3B0cyk7CiAJCX0gZWxzZSB7CiAJCQlzdG1tYWNfbWFjX2Rpc2FibGVfcngoZGV2LT5iYXNlX2FkZHIpOwogCQl9CkBAIC0yMDkzLDE1ICsxODk5LDE1IEBACiAJICogZnJvbSBhbm90aGVyIGRldmljZXMgKGUuZy4gc2VyaWFsIGNvbnNvbGUpLiAqLwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmKHBkZXYtPmRldikpKQogCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQotCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cG10KGRldi0+YmFzZV9hZGRyLCAwKTsKKwkJCXByaXYtPmh3LT5tYWMtPnBtdChkZXYtPmJhc2VfYWRkciwgMCk7CiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAKIAkvKiBFbmFibGUgdGhlIE1BQyBhbmQgRE1BICovCiAJc3RtbWFjX21hY19lbmFibGVfcngoaW9hZGRyKTsKIAlzdG1tYWNfbWFjX2VuYWJsZV90eChpb2FkZHIpOwotCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKLQlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RhcnRfdHgoaW9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF9yeChpb2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwppbmRleCA4NDk4NTUyLi5mZmZlMWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtMjQsNyArMjQsNiBAQAogICBNYWludGFpbmVyOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKQEAgLTQ4LDggKzQ3LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmFkZHI7Ci0JdW5zaWduZWQgaW50IG1paV9kYXRhID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5kYXRhOworCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPmh3LT5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5ody0+bWlpLmRhdGE7CiAKIAlpbnQgZGF0YTsKIAl1MTYgcmVnVmFsdWUgPSAoKChwaHlhZGRyIDw8IDExKSAmICgweDAwMDBGODAwKSkgfApAQCAtODAsOCArNzksOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKLQl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmRhdGE7CisJdW5zaWduZWQgaW50IG1paV9hZGRyZXNzID0gcHJpdi0+aHctPm1paS5hZGRyOworCXVuc2lnbmVkIGludCBtaWlfZGF0YSA9IHByaXYtPmh3LT5taWkuZGF0YTsKIAogCXUxNiB2YWx1ZSA9CiAJICAgICgoKHBoeWFkZHIgPDwgMTEpICYgKDB4MDAwMEY4MDApKSB8ICgocGh5cmVnIDw8IDYpICYgKDB4MDAwMDA3QzApKSkKQEAgLTExMiw3ICsxMTEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5ody0+bWlpLmFkZHI7CiAKIAlpZiAocHJpdi0+cGh5X3Jlc2V0KSB7CiAJCXByX2RlYnVnKCJzdG1tYWNfbWRpb19yZXNldDogY2FsbGluZyBwaHlfcmVzZXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKaW5kZXggZDU4ZTE4OS4uMGM5NzJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCkBAIC0yMDYsNyArMjA2LDcgQEAKICNkZWZpbmUgVVNFX0lPX09QUyAxCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN1bmRhbmNlX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzdW5kYW5jZV9wY2lfdGJsKSA9IHsKIAl7IDB4MTE4NiwgMHgxMDAyLCAweDExODYsIDB4MTAwMiwgMCwgMCwgMCB9LAogCXsgMHgxMTg2LCAweDEwMDIsIDB4MTE4NiwgMHgxMDAzLCAwLCAwLCAxIH0sCiAJeyAweDExODYsIDB4MTAwMiwgMHgxMTg2LCAweDEwMTIsIDAsIDAsIDIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggYjU3MWExYi4uYjU1Y2ViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZSBHRU1fTU9EVUxFX05BTUUJImdlbSIKICNkZWZpbmUgUEZYIEdFTV9NT0RVTEVfTkFNRSAiOiAiCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBnZW1fcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGdlbV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU1VOLCBQQ0lfREVWSUNFX0lEX1NVTl9HRU0sCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCA2NzYyZjFjLi43NmNjZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5obWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5obWUuYwpAQCAtMzIxMSw3ICszMjExLDcgQEAKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoYXBweW1lYWxfcGNpX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhhcHB5bWVhbF9wY2lfaWRzKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TVU4sIFBDSV9ERVZJQ0VfSURfU1VOX0hBUFBZTUVBTCkgfSwKIAl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYyBiL2RyaXZlcnMvbmV0L3N1bnZuZXQuYwppbmRleCBiYzc0ZGIwLi5kNjU3NjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW52bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCkBAIC0xMDYyLDEwICsxMDYyLDcgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfZGV2OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdW4gTERPTSB2bmV0ICIsIGRldi0+bmFtZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlwcmludGsoIiUyLjJ4JWMiLCBkZXYtPmRldl9hZGRyW2ldLCBpID09IDUgPyAnXG4nIDogJzonKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogU3VuIExET00gdm5ldCAlcE1cbiIsIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAKIAlsaXN0X2FkZCgmdnAtPmxpc3QsICZ2bmV0X2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggNzVhNjY5ZC4uMDMzNDA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNjUsNyArNjUsNyBAQAogCXsgIlRPU0hJQkEgVEMzNTgxNS9UWDQ5MzkiIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGMzNTgxNV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodGMzNTgxNV9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RPU0hJQkFfMiwgUENJX0RFVklDRV9JRF9UT1NISUJBX1RDMzU4MTVDRiksIC5kcml2ZXJfZGF0YSA9IFRDMzU4MTVDRiB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEMzNTgxNV9OV1UpLCAuZHJpdmVyX2RhdGEgPSBUQzM1ODE1X05XVSB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEMzNTgxNV9UWDQ5MzkpLCAuZHJpdmVyX2RhdGEgPSBUQzM1ODE1X1RYNDkzOSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmMgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwppbmRleCA4MGI0MDRmLi5iOTA3YmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuYworKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwpAQCAtNjQsNyArNjQsNyBAQAogCiAjaW5jbHVkZSAidGVodXRpLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIGJkeF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmR4X3BjaV90YmwpID0gewogCXsweDFGQzksIDB4MzAwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezB4MUZDOSwgMHgzMDEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7MHgxRkM5LCAweDMwMTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCAzYTc0ZDIxLi5iMDYzMGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiBtb2R1bGVfcGFyYW0odGczX2RlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0ZzNfZGVidWcsICJUaWdvbjMgYml0bWFwcGVkIGRlYnVnZ2luZyBtZXNzYWdlIGVuYWJsZSB2YWx1ZSIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGczX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0ZzNfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDEpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90bGFuLmMgYi9kcml2ZXJzL25ldC90bGFuLmMKaW5kZXggZmFiYWVmZi4uNjEzOTQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3RsYW4uYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJeyAiQ29tcGFxIE5ldEZsZXgtMy9FIiwgVExBTl9BREFQVEVSX0FDVElWSVRZX0xFRCwgMHg4MyB9LCAvKiBFSVNBIGNhcmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0bGFuX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0bGFuX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQ09NUEFRLCBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggY2Y1NTJkMS4uYjBkN2RiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTExNyw3ICsxMTcsNyBAQAogICoJd2lsbCBiZSBzdHVjayB3aXRoIDE1NTUgbGluZXMgb2YgaGV4ICMncyBpbiB0aGUgY29kZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeGxfcGNpX3RibFtdID0KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh4bF9wY2lfdGJsKSA9CiB7CiAJe1BDSV9WRU5ET1JfSURfM0NPTSxQQ0lfREVWSUNFX0lEXzNDT01fM0MzNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyB9CQkJLyogdGVybWluYXRlIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKaW5kZXggYjlkYjFiNS4uNTE1ZjEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2RlZmluZSBBQllTU19JT19FWFRFTlQgNjQKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFieXNzX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhYnlzc19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTUFER0UsIFBDSV9ERVZJQ0VfSURfTUFER0VfTUsyLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX05FVFdPUktfVE9LRU5fUklORyA8PCA4LCAweDAwZmZmZmZmLCB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCmluZGV4IGQ2Y2NkNTkuLjNmOWQ1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSA9ICJMYW5TdHJlYW1lci5jIHYwLjQuMCAwMy8wOC8wMSAtIE1pa2UgU3VsbGl2YW5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgIHYwLjUuMyAxMS8xMy8wMiAtIEtlbnQgWW9kZXIiOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RyZWFtZXJfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHN0cmVhbWVyX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9ERVZJQ0VfSURfSUJNX1RSLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJe30JLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCBkZjMyMDI1Li5mMDEwYTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogc3RhdGljIGludCBuZXR3b3JrX21vbml0b3JbT0xZTVBJQ19NQVhfQURBUFRFUlNdID0gezAsfTsKIG1vZHVsZV9wYXJhbV9hcnJheShuZXR3b3JrX21vbml0b3IsIGludCwgTlVMTCwgMCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvbHltcGljX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShvbHltcGljX3BjaV90YmwpID0gewogCXtQQ0lfVkVORE9SX0lEX0lCTSxQQ0lfREVWSUNFX0lEX0lCTV9UUl9XQUtFLFBDSV9BTllfSUQsUENJX0FOWV9JRCx9LAogCXsgfSAJLyogVGVybWluYXRpbmcgRW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKaW5kZXggZjkyZmU4Ni4uZDRjN2MwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYwpAQCAtNTcsNyArNTcsNyBAQAogCXsgezB4MDMsIDB4MDF9LCAiM0NvbSBUb2tlbiBMaW5rIFZlbG9jaXR5In0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdG1zcGNpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0bXNwY2lfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0RFVklDRV9JRF9DT01QQVFfVE9LRU5SSU5HLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9UUiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAogCXsgUENJX1ZFTkRPUl9JRF9UQ09OUkFELCBQQ0lfREVWSUNFX0lEX1RDT05SQURfVE9LRU5SSU5HLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggZDQyNTVkNC4uODdlYTM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtMzM3LDcgKzMzNyw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRlX29rX3RvX2FkdmVydGlzZSAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1MzIgbmV3X21lZGlhKTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRlX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9ERUMsIFBDSV9ERVZJQ0VfSURfREVDX1RVTElQLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9ERUMsIFBDSV9ERVZJQ0VfSURfREVDX1RVTElQX1BMVVMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKaW5kZXggNmY0NGViZi4uMmQ5ZjA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtMjA4OSw3ICsyMDg5LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkbWZlX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkbWZlX3BjaV90YmwpID0gewogCXsgMHgxMjgyLCAweDkxMzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFBDSV9ETTkxMzJfSUQgfSwKIAl7IDB4MTI4MiwgMHg5MTAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBQQ0lfRE05MTAyX0lEIH0sCiAJeyAweDEyODIsIDB4OTEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUENJX0RNOTEwMF9JRCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCmluZGV4IDU5NTc3N2QuLmNiZmRkOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHVsaXBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHR1bGlwX3BjaV90YmwpID0gewogCXsgMHgxMDExLCAweDAwMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIERDMjExNDAgfSwKIAl7IDB4MTAxMSwgMHgwMDE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBEQzIxMTQzIH0sCiAJeyAweDExQUQsIDB4MDAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgTEM4MkMxNjggfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCBmYTAxOWNhLi5kNTQ5MDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC0xNzgzLDcgKzE3ODMsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1bGk1MjZ4X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh1bGk1MjZ4X3BjaV90YmwpID0gewogCXsgMHgxMEI5LCAweDUyNjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFBDSV9VTEk1MjYxX0lEIH0sCiAJeyAweDEwQjksIDB4NTI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUENJX1VMSTUyNjNfSUQgfSwKIAl7IDAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDg2OWE3YTAuLjIzMzk1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJQ2FuSGF2ZU1JST0xLCBIYXNCcm9rZW5UeD0yLCBBbHdheXNGRFg9NCwgRkRYT25Ob01JST04LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHc4NDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHc4NDBfcGNpX3RibCkgPSB7CiAJeyAweDEwNTAsIDB4MDg0MCwgUENJX0FOWV9JRCwgMHg4MTUzLCAgICAgMCwgMCwgMCB9LAogCXsgMHgxMDUwLCAweDA4NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDEgfSwKIAl7IDB4MTFmNiwgMHgyMDExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCmluZGV4IDk5MjRjNGMuLmM4NDEyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4aXJjb21fcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeGlyY29tX3BjaV90YWJsZSkgPSB7CiAJezB4MTE1RCwgMHgwMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJezAsfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggMzlmMWZjNi4uNmU0Zjc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAgKiBiaXQgOCBpbmRpY2F0ZXMgaWYgdGhpcyBpcyBhICgwKSBjb3BwZXIgb3IgKDEpIGZpYmVyIGNhcmQKICAqIGJpdHMgMTItMTYgaW5kaWNhdGUgY2FyZCB0eXBlOiAoMCkgY2xpZW50IGFuZCAoMSkgc2VydmVyCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0eXBob29uX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0eXBob29uX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCxUWVBIT09OX1RYIH0sCiAJeyBQQ0lfVkVORE9SX0lEXzNDT00sIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBfVFhfOTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCAyMmI4N2U2Li43ZDNmYTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTg5NywxMSArODk3LDkgQEAKIAkJZjV1MDExX3J4bW9kZShjYXRjLCBjYXRjLT5yeG1vZGUpOwogCX0KIAlkYmcoIkluaXQgZG9uZS4iKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgVVNCIEV0aGVybmV0IGF0IHVzYi0lcy0lcywgIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgVVNCIEV0aGVybmV0IGF0IHVzYi0lcy0lcywgJXBNLlxuIiwKIAkgICAgICAgbmV0ZGV2LT5uYW1lLCAoY2F0Yy0+aXNfZjV1MDExKSA/ICJCZWxraW4gRjVVMDExIiA6ICJDQVRDIEVMMTIxMEEgTmV0TWF0ZSIsCi0JICAgICAgIHVzYmRldi0+YnVzLT5idXNfbmFtZSwgdXNiZGV2LT5kZXZwYXRoKTsKLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSBwcmludGsoIiUyLjJ4OiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOwotCXByaW50aygiJTIuMnguXG4iLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKKwkgICAgICAgdXNiZGV2LT5idXMtPmJ1c19uYW1lLCB1c2JkZXYtPmRldnBhdGgsIG5ldGRldi0+ZGV2X2FkZHIpOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2F0Yyk7CiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZpbnRmLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKaW5kZXggZmQxOWRiMC4uMjFhYzEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYworKysgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCkBAIC0zMTMsMjAgKzMxMywxNyBAQAogewogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQlkYmcoIiVzOiBTZXR0aW5nIE1BQyBhZGRyZXNzIHRvICIsIG5ldGRldi0+bmFtZSk7Ci0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJZGJnKCIlMDJYOiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOwotCWRiZygiJTAyWFxuIiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7CisJZGJnKCIlczogU2V0dGluZyBNQUMgYWRkcmVzcyB0byAlcE1cbiIsIG5ldGRldi0+bmFtZSwgbmV0ZGV2LT5kZXZfYWRkcik7CiAJLyogU2V0IHRoZSBJRFIgcmVnaXN0ZXJzLiAqLwogCXNldF9yZWdpc3RlcnMoZGV2LCBJRFIsIG5ldGRldi0+YWRkcl9sZW4sIG5ldGRldi0+ZGV2X2FkZHIpOwogI2lmZGVmIEVFUFJPTV9XUklURQogCXsKKwlpbnQgaTsKIAl1OCBjcjsKIAkvKiBHZXQgdGhlIENSIGNvbnRlbnRzLiAqLwogCWdldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguYwppbmRleCA2MzA5OWM1Li4zYTE1ZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jCkBAIC0xNTMsMTUgKzE1MywxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpyY3YgPSBOVUxMOwogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXYsICpyY3ZfcHJpdjsKIAlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzLCAqcmN2X3N0YXRzOwotCWludCBsZW5ndGgsIGNwdTsKKwlpbnQgbGVuZ3RoOwogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJcmN2ID0gcHJpdi0+cGVlcjsKIAlyY3ZfcHJpdiA9IG5ldGRldl9wcml2KHJjdik7CiAKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKLQlyY3Zfc3RhdHMgPSBwZXJfY3B1X3B0cihyY3ZfcHJpdi0+c3RhdHMsIGNwdSk7CisJc3RhdHMgPSB0aGlzX2NwdV9wdHIocHJpdi0+c3RhdHMpOworCXJjdl9zdGF0cyA9IHRoaXNfY3B1X3B0cihyY3ZfcHJpdi0+c3RhdHMpOwogCiAJaWYgKCEocmN2LT5mbGFncyAmIElGRl9VUCkpCiAJCWdvdG8gdHhfZHJvcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggNjExYjgwNC4uYTdlMGM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogLyogQmV3YXJlIG9mIFBDSSBwb3N0ZWQgd3JpdGVzICovCiAjZGVmaW5lIElPU1lOQwlkbyB7IGlvcmVhZDgoaW9hZGRyICsgU3RhdGlvbkFkZHIpOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcmhpbmVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJoaW5lX3BjaV90YmwpID0gewogCXsgMHgxMTA2LCAweDMwNDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCS8qIFZUODZDMTAwQSAqLwogCXsgMHgxMTA2LCAweDMwNjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCS8qIFZUNjEwMiAqLwogCXsgMHgxMTA2LCAweDMxMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCS8qIDYxMDV7LEwsTE9NfSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCBjOTNmNThmLi5mMTU0ODVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAgKglEZXNjcmliZSB0aGUgUENJIGRldmljZSBpZGVudGlmaWVycyB0aGF0IHdlIHN1cHBvcnQgaW4gdGhpcwogICoJZGV2aWNlIGRyaXZlci4gVXNlZCBmb3IgaG90cGx1ZyBhdXRvbG9hZGluZy4KICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZlbG9jaXR5X2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh2ZWxvY2l0eV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV82MTJYKSB9LAogCXsgfQogfTsKQEAgLTI3MDIsMTAgKzI3MDIsOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2cHRyLT5kZXY7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXNcbiIsIGRldi0+bmFtZSwgZ2V0X2NoaXBfbmFtZSh2cHRyLT5jaGlwX2lkKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEV0aGVybmV0IEFkZHJlc3M6ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlkZXYtPm5hbWUsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFdGhlcm5ldCBBZGRyZXNzOiAlcE1cbiIsCisJCWRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIHN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCAxY2ViOWQwLi5iODk2ZjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0zNSw3ICszNSw3IEBACiAgKiBQQ0kgRGV2aWNlIElEIFRhYmxlCiAgKiBMYXN0IGVudHJ5IG11c3QgYmUgYWxsIDBzCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2bXhuZXQzX3BjaWlkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodm14bmV0M19wY2lpZF90YWJsZSkgPSB7CiAJe1BDSV9WREVWSUNFKFZNV0FSRSwgUENJX0RFVklDRV9JRF9WTVdBUkVfVk1YTkVUMyl9LAogCXswfQogfTsKQEAgLTI2ODksNyArMjY4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB2bXhuZXQzX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2bXhuZXQzX3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHZteG5ldDNfc3VzcGVuZCwKIAkucmVzdW1lID0gdm14bmV0M19yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKaW5kZXggYjk2ODVlOC4uYTY2MDZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC01NCw3ICs1NCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk5ldGVyaW9uJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PIgogCSJWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlciIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnhnZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodnhnZV9pZF90YWJsZSkgPSB7CiAJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9USVRBTl9XSU4sIFBDSV9BTllfSUQsCiAJUENJX0FOWV9JRH0sCiAJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9USVRBTl9VTkksIFBDSV9BTllfSUQsCkBAIC00Mjk3LDEwICs0Mjk3LDggQEAKIAl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBOZXRlcmlvbiAlcyBTZXJ2ZXIgQWRhcHRlciIsCiAJCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wcm9kdWN0X2Rlc2MpOwogCi0JdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCi0JCSIlczogTUFDIEFERFI6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKLQkJdmRldi0+bmRldi0+bmFtZSwgbWFjYWRkclswXSwgbWFjYWRkclsxXSwgbWFjYWRkclsyXSwKLQkJbWFjYWRkclszXSwgbWFjYWRkcls0XSwgbWFjYWRkcls1XSk7CisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTUFDIEFERFI6ICVwTSIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIG1hY2FkZHIpOwogCiAJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTGluayBXaWR0aCB4JWQiLAogCQl2ZGV2LT5uZGV2LT5uYW1lLCB2eGdlX2h3X2RldmljZV9saW5rX3dpZHRoX2dldChobGRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCAzZjc1OWRhLi5mODhjMDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtMjA1MCw3ICsyMDUwLDcgQEAKIF9fc2V0dXAoImRzY2M0LnNldHVwPSIsIGRzY2M0X3NldHVwKTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZHNjYzRfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRzY2M0X3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9TSUVNRU5TLCBQQ0lfREVWSUNFX0lEX1NJRU1FTlNfRFNDQzQsCiAJICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMCx9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCA5YmMyZTM2Li40MGQ3MjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTUyOCw3ICs1MjgsNyBAQAogLyoKICAqICAgICAgUENJIElEIGxvb2t1cCB0YWJsZQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZnN0X3BjaV9kZXZfaWRbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGZzdF9wY2lfZGV2X2lkKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9GQVJTSVRFLCBQQ0lfREVWSUNFX0lEX0ZBUlNJVEVfVDJQLCBQQ0lfQU5ZX0lELCAKIAkgUENJX0FOWV9JRCwgMCwgMCwgRlNUX1RZUEVfVDJQfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IDRiNmYyN2UuLmIyNzg1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogc3RhdGljIGludCBMTUNfUEtUX0JVRl9TWiA9IDE1NDI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBsbWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGxtY19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9GQVNULAogCSAgUENJX1ZFTkRPUl9JRF9MTUMsIFBDSV9BTllfSUQgfSwKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9GQVNULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCmluZGV4IGFlYzRkMzkuLmY0ZjFjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYworKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogI3VuZGVmCVBDMzAwX0RFQlVHX1JYCiAjdW5kZWYJUEMzMDBfREVCVUdfT1RIRVIKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNwY19wY2lfZGV2X2lkW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjcGNfcGNpX2Rldl9pZCkgPSB7CiAJLyogUEMzMDAvUlNWIG9yIFBDMzAwL1gyMSwgMiBjaGFuICovCiAJezB4MTIwZSwgMHgzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB4MzAwfSwKIAkvKiBQQzMwMC9SU1Ygb3IgUEMzMDAvWDIxLCAxIGNoYW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMKaW5kZXggNjBlY2U1NC4uYzdhYjNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjMzAwX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjMzAwX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9DWUNMQURFUywgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8xLCBQQ0lfQU5ZX0lELAogCSAgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9DWUNMQURFUywgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8yLCBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGYxMzQwZmEuLmUyY2ZmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaTIwMF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2kyMDBfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgUENJX1ZFTkRPUl9JRF9QTFgsCiAJICBQQ0lfREVWSUNFX0lEX1BMWF9QQ0kyMDBTWU4sIDAsIDAsIDAgfSwKIAl7IDAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKaW5kZXggZGFlZThhMC4uNTQxYzcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd2FueGxfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUod2FueGxfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NCRSwgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwxMDAsIFBDSV9BTllfSUQsCiAJICBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NCRSwgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwyMDAsIFBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggOTZhNjE1Zi4uNmNlYWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtMzAxLDI0ICszMDEsMTUgQEAKIAkvKiBFeHRyYWN0IE1BQyBhZGRyZXNzcyAqLwogCWRkaSA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAlCVUlMRF9CVUdfT04oRVRIX0FMRU4gIT0gc2l6ZW9mKGRkaS0+bWFjX2FkZHJlc3MpKTsKLQlkX3ByaW50ZigyLCBkZXYsICJHRVQgREVWSUNFIElORk86IG1hYyBhZGRyICIKLQkJICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJIGRkaS0+bWFjX2FkZHJlc3NbMF0sIGRkaS0+bWFjX2FkZHJlc3NbMV0sCi0JCSBkZGktPm1hY19hZGRyZXNzWzJdLCBkZGktPm1hY19hZGRyZXNzWzNdLAotCQkgZGRpLT5tYWNfYWRkcmVzc1s0XSwgZGRpLT5tYWNfYWRkcmVzc1s1XSk7CisJZF9wcmludGYoMiwgZGV2LCAiR0VUIERFVklDRSBJTkZPOiBtYWMgYWRkciAlcE1cbiIsCisJCSBkZGktPm1hY19hZGRyZXNzKTsKIAlpZiAoIW1lbWNtcChuZXRfZGV2LT5wZXJtX2FkZHIsIGRkaS0+bWFjX2FkZHJlc3MsCiAJCSAgIHNpemVvZihkZGktPm1hY19hZGRyZXNzKSkpCiAJCWdvdG8gb2s7CiAJZGV2X3dhcm4oZGV2LCAid2FybmluZzogZGV2aWNlIHJlcG9ydHMgYSBkaWZmZXJlbnQgTUFDIGFkZHJlc3MgIgogCQkgInRvIHRoYXQgb2YgYm9vdCBtb2RlJ3NcbiIpOwotCWRldl93YXJuKGRldiwgImRldmljZSByZXBvcnRzICAgICAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJIGRkaS0+bWFjX2FkZHJlc3NbMF0sIGRkaS0+bWFjX2FkZHJlc3NbMV0sCi0JCSBkZGktPm1hY19hZGRyZXNzWzJdLCBkZGktPm1hY19hZGRyZXNzWzNdLAotCQkgZGRpLT5tYWNfYWRkcmVzc1s0XSwgZGRpLT5tYWNfYWRkcmVzc1s1XSk7Ci0JZGV2X3dhcm4oZGV2LCAiYm9vdCBtb2RlIHJlcG9ydGVkICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgbmV0X2Rldi0+cGVybV9hZGRyWzBdLCBuZXRfZGV2LT5wZXJtX2FkZHJbMV0sCi0JCSBuZXRfZGV2LT5wZXJtX2FkZHJbMl0sIG5ldF9kZXYtPnBlcm1fYWRkclszXSwKLQkJIG5ldF9kZXYtPnBlcm1fYWRkcls0XSwgbmV0X2Rldi0+cGVybV9hZGRyWzVdKTsKKwlkZXZfd2FybihkZXYsICJkZXZpY2UgcmVwb3J0cyAgICAgJXBNXG4iLCBkZGktPm1hY19hZGRyZXNzKTsKKwlkZXZfd2FybihkZXYsICJib290IG1vZGUgcmVwb3J0ZWQgJXBNXG4iLCBuZXRfZGV2LT5wZXJtX2FkZHIpOwogCWlmICghbWVtY21wKHplcm9tYWMsIGRkaS0+bWFjX2FkZHJlc3MsIHNpemVvZih6ZXJvbWFjKSkpCiAJCWRldl9lcnIoZGV2LCAiZGV2aWNlIHJlcG9ydHMgYW4gaW52YWxpZCBNQUMgYWRkcmVzcywgIgogCQkJIm5vdCB1cGRhdGluZ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCmluZGV4IDY0Y2RmZWIuLmU4MDNhN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCkBAIC0xMDQxLDIxICsxMDQxLDE0IEBACiAJCWRldl9lcnIoZGV2LCAiQk06IHJlYWQgbWFjIGFkZHIgZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKIAkJZ290byBlcnJvcl9yZWFkX21hYzsKIAl9Ci0JZF9wcmludGYoMiwgZGV2LAotCQkgIm1hYyBhZGRyIGlzICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgYWNrX2J1Zi5hY2tfcGxbMF0sIGFja19idWYuYWNrX3BsWzFdLAotCQkgYWNrX2J1Zi5hY2tfcGxbMl0sIGFja19idWYuYWNrX3BsWzNdLAotCQkgYWNrX2J1Zi5hY2tfcGxbNF0sIGFja19idWYuYWNrX3BsWzVdKTsKKwlkX3ByaW50ZigyLCBkZXYsICJtYWMgYWRkciBpcyAlcE1cbiIsIGFja19idWYuYWNrX3BsKTsKIAlpZiAoaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPT0gMSkgewogCQlhY2tfYnVmLmFja19wbFswXSA9IDB4MDA7CiAJCWFja19idWYuYWNrX3BsWzFdID0gMHgxNjsKIAkJYWNrX2J1Zi5hY2tfcGxbMl0gPSAweGQzOwogCQlnZXRfcmFuZG9tX2J5dGVzKCZhY2tfYnVmLmFja19wbFszXSwgMyk7CiAJCWRldl9lcnIoZGV2LCAiQk0gaXMgTUFDIGFkZHIgaW1wYWlyZWQsIGZha2luZyBNQUMgYWRkciB0byAiCi0JCQkibWFjIGFkZHIgaXMgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCQlhY2tfYnVmLmFja19wbFswXSwgYWNrX2J1Zi5hY2tfcGxbMV0sCi0JCQlhY2tfYnVmLmFja19wbFsyXSwgYWNrX2J1Zi5hY2tfcGxbM10sCi0JCQlhY2tfYnVmLmFja19wbFs0XSwgYWNrX2J1Zi5hY2tfcGxbNV0pOworCQkJIm1hYyBhZGRyIGlzICVwTVxuIiwgYWNrX2J1Zi5hY2tfcGwpOwogCQlyZXN1bHQgPSAwOwogCX0KIAluZXRfZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCmluZGV4IDM5NDEwMDEuLmU2Y2EzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKQEAgLTM5LDcgKzM5LDcgQEAKIG1vZHVsZV9wYXJhbSh0eF9yaW5nX3NpemUsIHVpbnQsIDApOwogbW9kdWxlX3BhcmFtKHJ4X3Jpbmdfc2l6ZSwgdWludCwgMCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZG04MjExX3BjaV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWRtODIxMV9wY2lfaWRfdGFibGUpID0gewogCS8qIEFETXRlayBBRE04MjExICovCiAJeyBQQ0lfREVWSUNFKDB4MTBCNywgMHg2MDAwKSB9LCAvKiAzQ29tIDNDUlNIUFc3OTYgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxMjAwLCAweDgyMDEpIH0sIC8qID8gKi8KQEAgLTE0MDAsMTUgKzE0MDAsMTUgQEAKIH0KIAogc3RhdGljIGludCBhZG04MjExX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKKwkJcHJpdi0+bW9kZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTQxNiw4ICsxNDE2LDggQEAKIAogCUFETTgyMTFfSURMRSgpOwogCi0JQURNODIxMV9DU1JfV1JJVEUoUEFSMCwgbGUzMl90b19jcHUoKihfX2xlMzIgKiljb25mLT5tYWNfYWRkcikpOwotCUFETTgyMTFfQ1NSX1dSSVRFKFBBUjEsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopKGNvbmYtPm1hY19hZGRyICsgNCkpKTsKKwlBRE04MjExX0NTUl9XUklURShQQVIwLCBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXZpZi0+YWRkcikpOworCUFETTgyMTFfQ1NSX1dSSVRFKFBBUjEsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopKHZpZi0+YWRkciArIDQpKSk7CiAKIAlhZG04MjExX3VwZGF0ZV9tb2RlKGRldik7CiAKQEAgLTE0MjcsNyArMTQyNyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFkbTgyMTFfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGFkbTgyMTFfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCA0MzMxZDY3Li4zN2U0YWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIERSVl9OQU1FICJhaXJvIgogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcmRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2FyZF9pZHMpID0gewogCXsgMHgxNGI5LCAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMHgxNGI5LCAweDQ1MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7IDB4MTRiOSwgMHg0ODAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwppbmRleCAyNTE3MzY0Li4wZmI0MTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpAQCAtMTc4OSw3ICsxNzg5LDcgQEAKIH0KIAogc3RhdGljIGludCBhdDc2X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQgPSAwOwpAQCAtMTc5OCw3ICsxNzk4LDcgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm10eCk7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CiAJCWJyZWFrOwpAQCAtMTgxNCw3ICsxODE0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYXQ3Nl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaAppbmRleCA5Zjk0NTk4Li5iOTlhOGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmgKQEAgLTEwOSw3ICsxMDksNiBAQAogCWJvb2wgaGFzX3BsY3A7CiB9OwogCi0jZGVmaW5lIEFSOTE3MF9OVU1fTUFYX0JBX1JFVFJZCTUKICNkZWZpbmUgQVI5MTcwX05VTV9USUQJMTYKICNkZWZpbmUgV01FX0JBX0JNUF9TSVpFICAgICAgICAgNjQKICNkZWZpbmUgQVI5MTcwX05VTV9NQVhfQUdHX0xFTgkoMiAqIFdNRV9CQV9CTVBfU0laRSkKQEAgLTE0Myw3ICsxNDIsNiBAQAogCXUxNiB0aWQ7CiAJZW51bSBhcjkxNzBfdGlkX3N0YXRlIHN0YXRlOwogCWJvb2wgYWN0aXZlOwotCXU4IHJldHJ5OwogfTsKIAogI2RlZmluZSBBUjkxNzBfUVVFVUVfVElNRU9VVAkJNjQKQEAgLTE1NCw2ICsxNTIsOCBAQAogCiAjZGVmaW5lIEFSOTE3MF9OVU1fVFhfU1RBVFVTCQkxMjgKICNkZWZpbmUgQVI5MTcwX05VTV9UWF9BR0dfTUFYCQkzMAorI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX0hBUkQgICAgICAgQVI5MTcwX1RYUV9ERVBUSAorI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX1NPRlQgICAgICAgKEFSOTE3MF9UWFFfREVQVEggLSAxMCkKIAogc3RydWN0IGFyOTE3MCB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CkBAIC0yNDgsMTMgKzI0OCw4IEBACiAJdW5zaWduZWQgaW50IGFtcGR1X21heF9sZW47CiB9OwogCi0jZGVmaW5lIEFSOTE3MF9UWF9GTEFHX1dBSVRfRk9SX0FDSwlCSVQoMCkKLSNkZWZpbmUgQVI5MTcwX1RYX0ZMQUdfTk9fQUNLCQlCSVQoMSkKLSNkZWZpbmUgQVI5MTcwX1RYX0ZMQUdfQkxPQ0tfQUNLCUJJVCgyKQotCiBzdHJ1Y3QgYXI5MTcwX3R4X2luZm8gewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCiAjZGVmaW5lIElTX1NUQVJURUQoYSkJCSgoKHN0cnVjdCBhcjkxNzAgKilhKS0+c3RhdGUgPj0gQVI5MTcwX1NUQVJURUQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmgKaW5kZXggNzAxZGRiNy4uMGExZDRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvaHcuaApAQCAtMjc2LDYgKzI3Niw3IEBACiAjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUkFURV9QUk9CRQkJMHg4MDAwCiAKIC8qIGVpdGhlci1vciAqLworI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9NQVNLCQkJMHgwMDAwMDAwMwogI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9DQ0sJCQkweDAwMDAwMDAwCiAjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX09GRE0JCQkweDAwMDAwMDAxCiAjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX0hUCQkJMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMKaW5kZXggZGRjOGMwOS4uODU3ZTg2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMxX0FDMF9UWE9QLAogCQkJYXItPmVkY2ZbMF0udHhvcCB8IGFyLT5lZGNmWzFdLnR4b3AgPDwgMTYpOwogCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzNfQUMyX1RYT1AsCi0JCQlhci0+ZWRjZlsxXS50eG9wIHwgYXItPmVkY2ZbM10udHhvcCA8PCAxNik7CisJCQlhci0+ZWRjZlsyXS50eG9wIHwgYXItPmVkY2ZbM10udHhvcCA8PCAxNik7CiAKIAlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKaW5kZXggZjlkNmRiOC4uNGQyN2Y3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKQEAgLTE5NCwxMiArMTk0LDE1IEBACiAJcmV0dXJuIGFyOTE3MF9nZXRfc2VxX2goKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhKTsKIH0KIAorc3RhdGljIGlubGluZSB1MTYgYXI5MTcwX2dldF90aWRfaChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXJldHVybiAoaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikpWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTE2IGFyOTE3MF9nZXRfdGlkKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKLQotCXJldHVybiAoaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikpWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CisJcmV0dXJuIGFyOTE3MF9nZXRfdGlkX2goKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHR4Yy0+ZnJhbWVfZGF0YSk7CiB9CiAKICNkZWZpbmUgR0VUX05FWFRfU0VRKHNlcSkJKChzZXEgKyAxKSAmIDB4MGZmZikKQEAgLTIxMywxMCArMjE2LDEwIEBACiAJc3RydWN0IGFyOTE3MF90eF9pbmZvICphcmluZm8gPSAodm9pZCAqKSB0eGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogPT4gRlJBTUUgW3NrYjolcCwgcTolZCwgREE6WyVwTV0gZmxhZ3M6JXggczolZCAiCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA9PiBGUkFNRSBbc2tiOiVwLCBxOiVkLCBEQTpbJXBNXSBzOiVkICIKIAkJCSAgIm1hY19jdHJsOiUwNHgsIHBoeV9jdHJsOiUwOHgsIHRpbWVvdXQ6WyVkIG1zXV1cbiIsCiAJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHNrYiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCi0JICAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSwgYXJpbmZvLT5mbGFncywgYXI5MTcwX2dldF9zZXFfaChoZHIpLAorCSAgICAgICBpZWVlODAyMTFfZ2V0X0RBKGhkciksIGFyOTE3MF9nZXRfc2VxX2goaGRyKSwKIAkgICAgICAgbGUxNl90b19jcHUodHhjLT5tYWNfY29udHJvbCksIGxlMzJfdG9fY3B1KHR4Yy0+cGh5X2NvbnRyb2wpLAogCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGFyaW5mby0+dGltZW91dCAtIGppZmZpZXMpKTsKIH0KQEAgLTQzMCw3ICs0MzMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCWFyLT50eF9zdGF0c1txdWV1ZV0ubGVuLS07CiAKLQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhci0+dHhfcGVuZGluZ1txdWV1ZV0pKSB7CisJaWYgKGFyLT50eF9zdGF0c1txdWV1ZV0ubGVuIDwgQVI5MTcwX05VTV9UWF9MSU1JVF9TT0ZUKSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3YWtlIHF1ZXVlICVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgcXVldWUpOwpAQCAtNDQwLDIyICs0NDMsMTcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKIAotCWlmIChhcmluZm8tPmZsYWdzICYgQVI5MTcwX1RYX0ZMQUdfQkxPQ0tfQUNLKSB7Ci0JCWFyOTE3MF90eF9hbXBkdV9jYWxsYmFjayhhciwgc2tiKTsKLQl9IGVsc2UgaWYgKGFyaW5mby0+ZmxhZ3MgJiBBUjkxNzBfVFhfRkxBR19XQUlUX0ZPUl9BQ0spIHsKLQkJYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9UWF9USU1FT1VUKTsKLQotCQlza2JfcXVldWVfdGFpbCgmYXItPnR4X3N0YXR1c1txdWV1ZV0sIHNrYik7Ci0JfSBlbHNlIGlmIChhcmluZm8tPmZsYWdzICYgQVI5MTcwX1RYX0ZMQUdfTk9fQUNLKSB7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spIHsKIAkJYXI5MTcwX3R4X3N0YXR1cyhhciwgc2tiLCBBUjkxNzBfVFhfU1RBVFVTX0ZBSUxFRCk7CiAJfSBlbHNlIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bnN1cHBvcnRlZCBmcmFtZSBmbGFncyFcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKLQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQlhcjkxNzBfdHhfYW1wZHVfY2FsbGJhY2soYXIsIHNrYik7CisJCX0gZWxzZSB7CisJCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOworCisJCQlza2JfcXVldWVfdGFpbCgmYXItPnR4X3N0YXR1c1txdWV1ZV0sIHNrYik7CisJCX0KIAl9CiAKIAlpZiAoIWFyLT50eF9zdGF0c1txdWV1ZV0ubGVuICYmCkBAIC0xNDA3LDE3ICsxNDA1LDYgQEAKIAogCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCiAJICAgICAoaXNfdmFsaWRfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKSkgewotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7Ci0JCQlpZiAodW5saWtlbHkoIWluZm8tPmNvbnRyb2wuc3RhKSkKLQkJCQlnb3RvIGVycl9vdXQ7Ci0KLQkJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19BR0dSKTsKLQkJCWFyaW5mby0+ZmxhZ3MgPSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0s7Ci0KLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUpOwogCQkvKgogCQkgKiBXQVJOSU5HOgogCQkgKiBQdXR0aW5nIHRoZSBRb1MgcXVldWUgYml0cyBpbnRvIGFuIHVuZXhwbG9yZWQgdGVycml0b3J5IGlzCkBAIC0xNDMxLDEyICsxNDE4LDE3IEBACiAKIAkJdHhjLT5waHlfY29udHJvbCB8PQogCQkJY3B1X3RvX2xlMzIocXVldWUgPDwgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQpOwotCQlhcmluZm8tPmZsYWdzID0gQVI5MTcwX1RYX0ZMQUdfV0FJVF9GT1JfQUNLOwotCX0gZWxzZSB7Ci0JCWFyaW5mby0+ZmxhZ3MgPSBBUjkxNzBfVFhfRkxBR19OT19BQ0s7CisKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQkJaWYgKHVubGlrZWx5KCFpbmZvLT5jb250cm9sLnN0YSkpCisJCQkJZ290byBlcnJfb3V0OworCisJCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfQUdHUik7CisJCX0gZWxzZSB7CisJCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfUkFURV9QUk9CRSk7CisJCX0KIAl9CiAKLW91dDoKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKQEAgLTE2NzEsOCArMTY2Myw3IEBACiAJCSAqIHRlbGwgdGhlIEZXL0hXIHRoYXQgdGhpcyBpcyB0aGUgbGFzdCBmcmFtZSwKIAkJICogdGhhdCB3YXkgaXQgd2lsbCB3YWl0IGZvciB0aGUgaW1tZWRpYXRlIGJsb2NrIGFjay4KIAkJICovCi0JCWlmIChsaWtlbHkoc2tiX3BlZWtfdGFpbCgmYWdnKSkpCi0JCQlhcjkxNzBfdHhfaW5kaWNhdGVfaW1tYmEoYXIsIHNrYl9wZWVrX3RhaWwoJmFnZykpOworCQlhcjkxNzBfdHhfaW5kaWNhdGVfaW1tYmEoYXIsIHNrYl9wZWVrX3RhaWwoJmFnZykpOwogCiAjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZ2VuZXJhdGVkIEEtTVBEVSBsb29rcyBsaWtlIHRoaXM6XG4iLApAQCAtMTcxNiw2ICsxNzA3LDIxIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCQlmcmFtZXMgPSBtaW4oYXItPnR4X3N0YXRzW2ldLmxpbWl0IC0gYXItPnR4X3N0YXRzW2ldLmxlbiwKKwkJCSAgICAgc2tiX3F1ZXVlX2xlbigmYXItPnR4X3BlbmRpbmdbaV0pKTsKKworCQlpZiAocmVtYWluaW5nX3NwYWNlIDwgZnJhbWVzKSB7CisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1b3RhIHJlYWNoZWQgcXVldWU6JWQsICIKKwkJCSAgICAgICAicmVtYWluaW5nIHNsb3RzOiVkLCBuZWVkZWQ6JWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSwgcmVtYWluaW5nX3NwYWNlLAorCQkJICAgICAgIGZyYW1lcyk7CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisJCQlmcmFtZXMgPSByZW1haW5pbmdfc3BhY2U7CisJCX0KKworCQlhci0+dHhfc3RhdHNbaV0ubGVuICs9IGZyYW1lczsKKwkJYXItPnR4X3N0YXRzW2ldLmNvdW50ICs9IGZyYW1lczsKIAkJaWYgKGFyLT50eF9zdGF0c1tpXS5sZW4gPj0gYXItPnR4X3N0YXRzW2ldLmxpbWl0KSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHF1ZXVlICVkIGZ1bGxcbiIsCkBAIC0xNzMzLDI1ICsxNzM5LDggQEAKIAkJCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7CiAjZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGFyLT5odywgaSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwotCQkJY29udGludWU7CiAJCX0KIAotCQlmcmFtZXMgPSBtaW4oYXItPnR4X3N0YXRzW2ldLmxpbWl0IC0gYXItPnR4X3N0YXRzW2ldLmxlbiwKLQkJCSAgICAgc2tiX3F1ZXVlX2xlbigmYXItPnR4X3BlbmRpbmdbaV0pKTsKLQotCQlpZiAocmVtYWluaW5nX3NwYWNlIDwgZnJhbWVzKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1b3RhIHJlYWNoZWQgcXVldWU6JWQsICIKLQkJCSAgICAgICAicmVtYWluaW5nIHNsb3RzOiVkLCBuZWVkZWQ6JWRcbiIsCi0JCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSwgcmVtYWluaW5nX3NwYWNlLAotCQkJICAgICAgIGZyYW1lcyk7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCQlmcmFtZXMgPSByZW1haW5pbmdfc3BhY2U7Ci0JCX0KLQotCQlhci0+dHhfc3RhdHNbaV0ubGVuICs9IGZyYW1lczsKLQkJYXItPnR4X3N0YXRzW2ldLmNvdW50ICs9IGZyYW1lczsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoIWZyYW1lcykKQEAgLTE3NzMsNyArMTc2Miw3IEBACiAJCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKIAkJCQkJICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9UWF9USU1FT1VUKTsKIAotCQkJaWYgKGFyaW5mby0+ZmxhZ3MgPT0gQVI5MTcwX1RYX0ZMQUdfQkxPQ0tfQUNLKQorCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKIAkJCQlhdG9taWNfaW5jKCZhci0+dHhfYW1wZHVfcGVuZGluZyk7CiAKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKQEAgLTE3ODQsNyArMTc3Myw3IEBACiAKIAkJCWVyciA9IGFyLT50eChhciwgc2tiKTsKIAkJCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCQkJaWYgKGFyaW5mby0+ZmxhZ3MgPT0gQVI5MTcwX1RYX0ZMQUdfQkxPQ0tfQUNLKQorCQkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCiAJCQkJCWF0b21pY19kZWMoJmFyLT50eF9hbXBkdV9wZW5kaW5nKTsKIAogCQkJCWZyYW1lc19mYWlsZWQrKzsKQEAgLTE5NTAsNyArMTkzOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYXI5MTcwX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSAmYXItPmNvbW1vbjsKQEAgLTE5NjMsOCArMTk1Miw4IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWFyLT52aWYgPSBjb25mLT52aWY7Ci0JbWVtY3B5KGNvbW1vbi0+bWFjYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlhci0+dmlmID0gdmlmOworCW1lbWNweShjb21tb24tPm1hY2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCiAJaWYgKG1vZHBhcmFtX25vaHdjcnlwdCB8fCAoYXItPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkgewogCQlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IHRydWU7CkBAIC0xOTg0LDcgKzE5NzMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBhcjkxNzBfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKIApAQCAtMjM2Niw3ICsyMzU1LDYgQEAKIAkJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOwogCQkJc3RhX2luZm8tPmFnZ1tpXS5hY3RpdmUgPSBmYWxzZTsKIAkJCXN0YV9pbmZvLT5hZ2dbaV0uc3NuID0gMDsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0ucmV0cnkgPSAwOwogCQkJc3RhX2luZm8tPmFnZ1tpXS50aWQgPSBpOwogCQkJSU5JVF9MSVNUX0hFQUQoJnN0YV9pbmZvLT5hZ2dbaV0ubGlzdCk7CiAJCQlza2JfcXVldWVfaGVhZF9pbml0KCZzdGFfaW5mby0+YWdnW2ldLnF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCmluZGV4IGUwNzk5ZDkuLjBmMzYxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwpAQCAtODQsNiArODQsOCBAQAogCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyMykgfSwKIAkvKiBaLUNvbSBVQjgyIEFCRyAqLwogCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNikgfSwKKwkvKiBTcGhhaXJvbiBIb21lbGluayAxMjAyICovCisJeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDI3KSB9LAogCS8qIEFyY2FkeWFuIFdONzUxMiAqLwogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZjUyMikgfSwKIAkvKiBQbGFuZXggR1dVUzMwMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKaW5kZXggZTYzYjdjNC4uNzJlNWVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCkBAIC04Myw3ICs4Myw3IEBACiAKIAogLyogS25vd24gUENJIGlkcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0aDVrX3BjaV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAyMDcpIH0sIC8qIDUyMTAgZWFybHkgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNykgfSwgLyogNTIxMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSB9LCAvKiA1MzExIC0gdGhpcyBpcyBvbiBBSEIgYnVzICEqLwpAQCAtMjI1LDkgKzIyNSw5IEBACiBzdGF0aWMgaW50IGF0aDVrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGF0aDVrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogc3RhdGljIHZvaWQgYXRoNWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHN0YXRpYyBpbnQgYXRoNWtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CiBzdGF0aWMgdTY0IGF0aDVrX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwpAQCAtMjc3Myw3ICsyNzczLDcgQEAKIH0KIAogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJaW50IHJldDsKQEAgLTI3ODQsMjIgKzI3ODQsMjIgQEAKIAkJZ290byBlbmQ7CiAJfQogCi0Jc2MtPnZpZiA9IGNvbmYtPnZpZjsKKwlzYy0+dmlmID0gdmlmOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXNjLT5vcG1vZGUgPSBjb25mLT50eXBlOworCQlzYy0+b3Btb2RlID0gdmlmLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBlbmQ7CiAJfQogCi0JYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIGNvbmYtPm1hY19hZGRyKTsKKwlhdGg1a19od19zZXRfbGxhZGRyKHNjLT5haCwgdmlmLT5hZGRyKTsKIAlhdGg1a19tb2RlX3NldHVwKHNjKTsKIAogCXJldCA9IDA7CkBAIC0yODEwLDEzICsyODEwLDEzIEBACiAKIHN0YXRpYyB2b2lkCiBhdGg1a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAl1OCBtYWNbRVRIX0FMRU5dID0ge307CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0JaWYgKHNjLT52aWYgIT0gY29uZi0+dmlmKQorCWlmIChzYy0+dmlmICE9IHZpZikKIAkJZ290byBlbmQ7CiAKIAlhdGg1a19od19zZXRfbGxhZGRyKHNjLT5haCwgbWFjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggZTJjZWYyZi4uOWYxZjUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTQ1Myw3ICs0NTMsNiBAQAogCWludCBpcnE7CiAJc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7CiAJc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7Ci0Jc3BpbmxvY2tfdCBhbmlfbG9jazsKIAlzcGlubG9ja190IHNjX3BtX2xvY2s7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCmluZGV4IGI2NmY3MmQuLjU5MmYxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCkBAIC0yODksMjMgKzI4OSw0OSBAQAogCWlmIChzYy0+Y3VyX3JhdGVfdGFibGUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQltYXggPSA4MCArIHNjLT5jdXJfcmF0ZV90YWJsZS0+cmF0ZV9jbnQgKiA2NDsKKwltYXggPSA4MCArIHNjLT5jdXJfcmF0ZV90YWJsZS0+cmF0ZV9jbnQgKiAxMDI0OwogCWJ1ZiA9IGttYWxsb2MobWF4ICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAlidWZbbWF4XSA9IDA7CiAKLQlsZW4gKz0gc3ByaW50ZihidWYsICIlNXMgJTE1cyAlOHMgJTlzICUzc1xuXG4iLCAiUmF0ZSIsICJTdWNjZXNzIiwKLQkJICAgICAgICJSZXRyaWVzIiwgIlhSZXRyaWVzIiwgIlBFUiIpOworCWxlbiArPSBzcHJpbnRmKGJ1ZiwgIiU2cyAlNnMgJTZzICIKKwkJICAgICAgICIlMTBzICUxMHMgJTEwcyAlMTBzXG4iLAorCQkgICAgICAgIkhUIiwgIk1DUyIsICJSYXRlIiwKKwkJICAgICAgICJTdWNjZXNzIiwgIlJldHJpZXMiLCAiWFJldHJpZXMiLCAiUEVSIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7CiAJCXUzMiByYXRla2JwcyA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRla2JwczsKIAkJc3RydWN0IGF0aF9yY19zdGF0cyAqc3RhdHMgPSAmc2MtPmRlYnVnLnN0YXRzLnJjc3RhdHNbaV07CisJCWNoYXIgbWNzWzVdOworCQljaGFyIGh0bW9kZVs1XTsKKwkJaW50IHVzZWRfbWNzID0gMCwgdXNlZF9odG1vZGUgPSAwOworCisJCWlmIChXTEFOX1JDX1BIWV9IVChzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9baV0ucGh5KSkgeworCQkJdXNlZF9tY3MgPSBzbnByaW50ZihtY3MsIDUsICIlZCIsCisJCQkJc2MtPmN1cl9yYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlKTsKKworCQkJaWYgKFdMQU5fUkNfUEhZXzQwKHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5waHkpKQorCQkJCXVzZWRfaHRtb2RlID0gc25wcmludGYoaHRtb2RlLCA1LCAiSFQ0MCIpOworCQkJZWxzZSBpZiAoV0xBTl9SQ19QSFlfMjAoc2MtPmN1cl9yYXRlX3RhYmxlLT5pbmZvW2ldLnBoeSkpCisJCQkJdXNlZF9odG1vZGUgPSBzbnByaW50ZihodG1vZGUsIDUsICJIVDIwIik7CisJCQllbHNlCisJCQkJdXNlZF9odG1vZGUgPSBzbnByaW50ZihodG1vZGUsIDUsICI/Pz8/Iik7CisJCX0KKworCQltY3NbdXNlZF9tY3NdID0gJ1wwJzsKKwkJaHRtb2RlW3VzZWRfaHRtb2RlXSA9ICdcMCc7CiAKIAkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4IC0gbGVuLAotCQkJIiUzdS4lZDogJTh1ICU4dSAlOHUgJTh1XG4iLCByYXRla2JwcyAvIDEwMDAsCi0JCQkocmF0ZWticHMgJSAxMDAwKSAvIDEwMCwgc3RhdHMtPnN1Y2Nlc3MsCi0JCQlzdGF0cy0+cmV0cmllcywgc3RhdHMtPnhyZXRyaWVzLAorCQkJIiU2cyAlNnMgJTN1LiVkOiAiCisJCQkiJTEwdSAlMTB1ICUxMHUgJTEwdVxuIiwKKwkJCWh0bW9kZSwKKwkJCW1jcywKKwkJCXJhdGVrYnBzIC8gMTAwMCwKKwkJCShyYXRla2JwcyAlIDEwMDApIC8gMTAwLAorCQkJc3RhdHMtPnN1Y2Nlc3MsCisJCQlzdGF0cy0+cmV0cmllcywKKwkJCXN0YXRzLT54cmV0cmllcywKIAkJCXN0YXRzLT5wZXIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAyZWM2MWYwLi45NDc0ZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMzQzLDMwICszNDMsNiBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqYXRoOWtfaHdfZGV2bmFtZSh1MTYgZGV2aWQpCi17Ci0Jc3dpdGNoIChkZXZpZCkgewotCWNhc2UgQVI1NDE2X0RFVklEX1BDSToKLQkJcmV0dXJuICJBdGhlcm9zIDU0MTYiOwotCWNhc2UgQVI1NDE2X0RFVklEX1BDSUU6Ci0JCXJldHVybiAiQXRoZXJvcyA1NDE4IjsKLQljYXNlIEFSOTE2MF9ERVZJRF9QQ0k6Ci0JCXJldHVybiAiQXRoZXJvcyA5MTYwIjsKLQljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6Ci0JCXJldHVybiAiQXRoZXJvcyA5MTAwIjsKLQljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6Ci0JY2FzZSBBUjkyODBfREVWSURfUENJRToKLQkJcmV0dXJuICJBdGhlcm9zIDkyODAiOwotCWNhc2UgQVI5Mjg1X0RFVklEX1BDSUU6Ci0JCXJldHVybiAiQXRoZXJvcyA5Mjg1IjsKLQljYXNlIEFSNTQxNl9ERVZJRF9BUjkyODdfUENJOgotCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0lFOgotCQlyZXR1cm4gIkF0aGVyb3MgOTI4NyI7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBpOwpAQCAtMzkyLDcgKzM2OCw3IEBACiAJCWFoLT5jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKIAl9CiAKLQlhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiA9IHRydWU7CisJYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24gPSB0cnVlOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRoaXMgZm9yIFBDSSBkZXZpY2VzIG9ubHkgKENhcmRidXMsIFBDSSwgbWluaVBDSSkKQEAgLTExODQsNyArMTE2MCw3IEBACiAJCUFSX0lNUl9SWE9STiB8CiAJCUFSX0lNUl9CQ05NSVNDOwogCi0JaWYgKGFoLT5jb25maWcuaW50cl9taXRpZ2F0aW9uKQorCWlmIChhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbikKIAkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKIAllbHNlCiAJCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfUlhPSzsKQEAgLTEyNjYsMTIgKzEyNDIsNiBAQAogCQlhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChhaCwgYWgtPmdsb2JhbHR4dGltZW91dCk7CiB9CiAKLWNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKQotewotCXJldHVybiB2ZW5kb3JpZCA9PSBBVEhFUk9TX1ZFTkRPUl9JRCA/Ci0JCWF0aDlrX2h3X2Rldm5hbWUoZGV2aWQpIDogTlVMTDsKLX0KLQogdm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CkBAIC0yMTIxLDcgKzIwOTEsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9PQlMsIDgpOwogCi0JaWYgKGFoLT5jb25maWcuaW50cl9taXRpZ2F0aW9uKSB7CisJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKSB7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfTEFTVCwgNTAwKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9GSVJTVCwgMjAwMCk7CiAJfQpAQCAtMjc4MSw3ICsyNzUxLDcgQEAKIAogCQkqbWFza2VkID0gaXNyICYgQVRIOUtfSU5UX0NPTU1PTjsKIAotCQlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24pIHsKKwkJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKSB7CiAJCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCiAJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CiAJCX0KQEAgLTI5MTQsNyArMjg4NCw3IEBACiAJfQogCWlmIChpbnRzICYgQVRIOUtfSU5UX1JYKSB7CiAJCW1hc2sgfD0gQVJfSU1SX1JYRVJSOwotCQlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24pCisJCWlmIChhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbikKIAkJCW1hc2sgfD0gQVJfSU1SX1JYTUlOVFIgfCBBUl9JTVJfUlhJTlRNOwogCQllbHNlCiAJCQltYXNrIHw9IEFSX0lNUl9SWE9LIHwgQVJfSU1SX1JYREVTQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggZTJiMGM3My4uODg0OTQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTIxMiw3ICsyMTIsNyBAQAogCXUzMiBjY2tfdHJpZ19sb3c7CiAJdTMyIGVuYWJsZV9hbmk7CiAJaW50IHNlcmlhbGl6ZV9yZWdtb2RlOwotCWJvb2wgaW50cl9taXRpZ2F0aW9uOworCWJvb2wgcnhfaW50cl9taXRpZ2F0aW9uOwogI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCiAjZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKICNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggOTk2ZWI5MC4uNzlmYmJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0zNjMsMTQgKzM2Myw2IEBACiAJc2hvcnRfY2FsX2ludGVydmFsID0gKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApID8KIAkJQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMIDogQVRIX1NUQV9TSE9SVF9DQUxJTlRFUlZBTDsKIAotCS8qCi0JKiBkb24ndCBjYWxpYnJhdGUgd2hlbiB3ZSdyZSBzY2FubmluZy4KLQkqIHdlIGFyZSBtb3N0IGxpa2VseSBub3Qgb24gb3VyIGhvbWUgY2hhbm5lbC4KLQkqLwotCXNwaW5fbG9jaygmc2MtPmFuaV9sb2NrKTsKLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCi0JCWdvdG8gc2V0X3RpbWVyOwotCiAJLyogT25seSBjYWxpYnJhdGUgaWYgYXdha2UgKi8KIAlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9IEFUSDlLX1BNX0FXQUtFKQogCQlnb3RvIHNldF90aW1lcjsKQEAgLTQzNyw3ICs0MjksNiBAQAogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiBzZXRfdGltZXI6Ci0Jc3Bpbl91bmxvY2soJnNjLT5hbmlfbG9jayk7CiAJLyoKIAkqIFNldCB0aW1lciBpbnRlcnZhbCBiYXNlZCBvbiBwcmV2aW91cyByZXN1bHRzLgogCSogVGhlIGludGVydmFsIG11c3QgYmUgdGhlIHNob3J0ZXN0IG5lY2Vzc2FyeSB0byBzYXRpc2Z5IEFOSSwKQEAgLTE2MTAsNyArMTYwMSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNjLT53aXBoeV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19zZXJpYWxfcncpOwotCXNwaW5fbG9ja19pbml0KCZzYy0+YW5pX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcG1fbG9jayk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7CkBAIC0yNTUwLDEyICsyNTQwLDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJZW51bSBubDgwMjExX2lmdHlwZSBpY19vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjU2Nyw3ICsyNTU3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWJyZWFrOwpAQCAtMjU3OCwxMSArMjU2OCwxMSBAQAogCQkJcmV0ID0gLUVOT0JVRlM7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpY19vcG1vZGUgPSBjb25mLT50eXBlOworCQlpY19vcG1vZGUgPSB2aWYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkiSW50ZXJmYWNlIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsIGNvbmYtPnR5cGUpOworCQkJIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCB2aWYtPnR5cGUpOwogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjYxNCwxOCArMjYwNCwxOCBAQAogCSAqIEVuYWJsZSBNSUIgaW50ZXJydXB0cyB3aGVuIHRoZXJlIGFyZSBoYXJkd2FyZSBwaHkgY291bnRlcnMuCiAJICogTm90ZSB3ZSBvbmx5IGRvIHRoaXMgKGF0IHRoZSBtb21lbnQpIGZvciBzdGF0aW9uIG1vZGUuCiAJICovCi0JaWYgKChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAotCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCWlmICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CiAJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVFNGT09SOwogCX0KIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICAgIHx8Ci0JICAgIGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkgICAgY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgICAgfHwKKwkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CiAKIG91dDoKQEAgLTI2MzQsMTIgKzI2MjQsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJaW50IGk7CiAKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBJbnRlcmZhY2VcbiIpOwpAQCAtMjY2Miw3ICsyNjUyLDcgQEAKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JFQUNPTlM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YmVhY29uLmJzbG90KTsgaSsrKSB7Ci0JCWlmIChzYy0+YmVhY29uLmJzbG90W2ldID09IGNvbmYtPnZpZikgeworCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtpXSA9PSB2aWYpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdmlmIGhhZCBhbGxvY2F0ZWQgYmVhY29uICIKIAkJCSAgICAgICAic2xvdFxuIiwgX19mdW5jX18pOwogCQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7CkBAIC0zMTMzLDYgKzMxMjMsNyBAQAogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJaWYgKGF0aDlrX3dpcGh5X3NjYW5uaW5nKHNjKSkgewpAQCAtMzE0OCwxMCArMzEzOSw5IEBACiAKIAlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9TQ0FOOwogCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9TQ0FOTklORzsKLQlzcGluX3VubG9ja19iaCgmc2MtPmFuaV9sb2NrKTsKKwlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApAQCAtMzE1OSwxMyArMzE0OSwxNCBAQAogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1NDQU5OSU5HOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwotCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOworCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IGY3YWY1ZWEuLmVlNjE3MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoX3BjaV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXRoX3BjaV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjMpIH0sIC8qIFBDSSAgICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjQpIH0sIC8qIFBDSS1FICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjcpIH0sIC8qIFBDSSAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCmluZGV4IDllYjk2ZjUuLjRmNmQ2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCkBAIC01Nyw2ICs1NywxMCBAQAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJKSkKKyNkZWZpbmUgV0xBTl9SQ19QSFlfMjAoX3BoeSkgICAoKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfU1MpCQlcCisJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFMpCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0kpCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0kpKQogI2RlZmluZSBXTEFOX1JDX1BIWV80MChfcGh5KSAgICgoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9TUykJCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9EUykJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYwppbmRleCA5MmY4N2ZiLi45YWIxMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYwpAQCAtMzEsNyArMzEsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkF0bWVsIGF0NzZjNTA2IFBDSSB3aXJlbGVzcyBjYXJkcyIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FyZF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYXJkX2lkcykgPSB7CiAJeyAweDExMTQsIDB4MDUwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcKaW5kZXggNjRjMTJlMS4uMDczYmU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAJZGVwZW5kcyBvbiBTU0JfUE9TU0lCTEUgJiYgTUFDODAyMTEgJiYgSEFTX0RNQQogCXNlbGVjdCBTU0IKIAlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNTQl9CTE9DS0lPCiAJLS0taGVscC0tLQogCSAgYjQzIGlzIGEgZHJpdmVyIGZvciB0aGUgQnJvYWRjb20gNDN4eCBzZXJpZXMgd2lyZWxlc3MgZGV2aWNlcy4KIApAQCAtNzgsMTQgKzc5LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotIyBEYXRhIHRyYW5zZmVycyB0byB0aGUgZGV2aWNlIHZpYSBQSU8KLSMgVGhpcyBpcyBvbmx5IG5lZWRlZCBvbiBQQ01DSUEgYW5kIFNESU8gZGV2aWNlcy4gQWxsIG90aGVycyBjYW4gZG8gRE1BIHByb3Blcmx5LgotY29uZmlnIEI0M19QSU8KLQlib29sCi0JZGVwZW5kcyBvbiBCNDMgJiYgKEI0M19TRElPIHx8IEI0M19QQ01DSUEgfHwgQjQzX0ZPUkNFX1BJTykKLQlzZWxlY3QgU1NCX0JMT0NLSU8KLQlkZWZhdWx0IHkKLQogY29uZmlnIEI0M19OUEhZCiAJYm9vbCAiUHJlIElFRUUgODAyLjExbiBzdXBwb3J0IChCUk9LRU4pIgogCWRlcGVuZHMgb24gQjQzICYmIEVYUEVSSU1FTlRBTCAmJiBCUk9LRU4KQEAgLTEzNywxMiArMTMwLDQgQEAKIAkgIGZvciBwcm9kdWN0aW9uIHVzZS4KIAkgIE9ubHkgc2F5IFksIGlmIHlvdSBhcmUgZGVidWdnaW5nIGEgcHJvYmxlbSBpbiB0aGUgYjQzIGRyaXZlciBzb3VyY2Vjb2RlLgogCi1jb25maWcgQjQzX0ZPUkNFX1BJTwotCWJvb2wgIkZvcmNlIHVzYWdlIG9mIFBJTyBpbnN0ZWFkIG9mIERNQSIKLQlkZXBlbmRzIG9uIEI0MyAmJiBCNDNfREVCVUcKLQktLS1oZWxwLS0tCi0JICBUaGlzIHdpbGwgZGlzYWJsZSBETUEgYW5kIGFsd2F5cyBlbmFibGUgUElPIGluc3RlYWQuCiAKLQkgIFNheSBOIQotCSAgVGhpcyBpcyBvbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIFBJTyBlbmdpbmUgY29kZS4gWW91IGRvCi0JICBfTk9UXyB3YW50IHRvIGVuYWJsZSB0aGlzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCmluZGV4IDg0NzcyYTIuLjVlODNiNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIGI0My15CQkJCSs9IGxvLm8KIGI0My15CQkJCSs9IHdhLm8KIGI0My15CQkJCSs9IGRtYS5vCi1iNDMtJChDT05GSUdfQjQzX1BJTykJCSs9IHBpby5vCitiNDMteQkJCQkrPSBwaW8ubwogYjQzLXkJCQkJKz0gcmZraWxsLm8KIGI0My0kKENPTkZJR19CNDNfTEVEUykJCSs9IGxlZHMubwogYjQzLSQoQ09ORklHX0I0M19QQ01DSUEpCSs9IHBjbWNpYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggZmUzYmY5NC4uMmYxMmE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtODIxLDExICs4MjEsOSBAQAogCS8qIFRoZSBkZXZpY2UgTEVEcy4gKi8KIAlzdHJ1Y3QgYjQzX2xlZHMgbGVkczsKIAotI2lmZGVmIENPTkZJR19CNDNfUElPCiAJLyogS21hbGxvYydlZCBzY3JhdGNoIHNwYWNlIGZvciBQSU8gVFgvUlguIFByb3RlY3RlZCBieSB3bC0+bXV0ZXguICovCiAJdTggcGlvX3NjcmF0Y2hzcGFjZVsxMTBdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSk7CiAJdTggcGlvX3RhaWxzcGFjZVs0XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOwotI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBiNDNfd2wgKmh3X3RvX2I0M193bChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTg3NiwyMCArODc0LDkgQEAKIAogc3RhdGljIGlubGluZSBib29sIGI0M191c2luZ19waW9fdHJhbnNmZXJzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLSNpZmRlZiBDT05GSUdfQjQzX1BJTwogCXJldHVybiBkZXYtPl9fdXNpbmdfcGlvX3RyYW5zZmVyczsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAotI2lmZGVmIENPTkZJR19CNDNfRk9SQ0VfUElPCi0jIGRlZmluZSBCNDNfRk9SQ0VfUElPCTEKLSNlbHNlCi0jIGRlZmluZSBCNDNfRk9SQ0VfUElPCTAKLSNlbmRpZgotCi0KIC8qIE1lc3NhZ2UgcHJpbnRpbmcgKi8KIHZvaWQgYjQzaW5mbyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggODhkMWZkMC4uNjE1YWYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMTY1Myw3ICsxNjUzLDYgQEAKIAliNDNfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKGRldiwgMCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQjQzX1BJTwogc3RhdGljIHZvaWQgZGlyZWN0X2ZpZm9fcngoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19kbWF0eXBlIHR5cGUsCiAJCQkgICB1MTYgbW1pb19iYXNlLCBib29sIGVuYWJsZSkKIHsKQEAgLTE2ODcsNCArMTY4NiwzIEBACiAJbW1pb19iYXNlID0gYjQzX2RtYWNvbnRyb2xsZXJfYmFzZSh0eXBlLCBlbmdpbmVfaW5kZXgpOwogCWRpcmVjdF9maWZvX3J4KGRldiwgdHlwZSwgbW1pb19iYXNlLCBlbmFibGUpOwogfQotI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA0YzQxY2ZlLi42MDI5MGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTEwMiw2ICsxMDIsOSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKHZlcmJvc2UsIGI0M19tb2RwYXJhbV92ZXJib3NlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2ZXJib3NlLCAiTG9nIG1lc3NhZ2UgdmVyYm9zaXR5OiAwPWVycm9yLCAxPXdhcm4sIDI9aW5mbyhkZWZhdWx0KSwgMz1kZWJ1ZyIpOwogCitzdGF0aWMgaW50IG1vZHBhcmFtX3BpbzsKK21vZHVsZV9wYXJhbV9uYW1lZChwaW8sIG1vZHBhcmFtX3BpbywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocGlvLCAiZW5hYmxlKDEpIC8gZGlzYWJsZSgwKSBQSU8gbW9kZSIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNzYl9kZXZpY2VfaWQgYjQzX3NzYl90YmxbXSA9IHsKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDUpLApAQCAtMTc4Niw4ICsxNzg5LDggQEAKIAkJCSAgICAgICBkbWFfcmVhc29uWzRdLCBkbWFfcmVhc29uWzVdKTsKIAkJCWI0M2VycihkZXYtPndsLCAiVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBETUEgIgogCQkJICAgICAgICJvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHVzZSBQSU8gaW5zdGVhZC5cbiIpOwotCQkJYjQzZXJyKGRldi0+d2wsICJDT05GSUdfQjQzX0ZPUkNFX1BJTyBtdXN0IGJlIHNldCBpbiAiCi0JCQkgICAgICAgInlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJCWI0M2VycihkZXYtPndsLCAiVW5sb2FkIHRoZSBiNDMgbW9kdWxlIGFuZCByZWxvYWQgIgorCQkJICAgICAgICJ3aXRoICdwaW89MSdcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmIChtZXJnZWRfZG1hX3JlYXNvbiAmIEI0M19ETUFJUlFfTk9ORkFUQUxNQVNLKSB7CkBAIC00MzUzLDcgKzQzNTYsNyBAQAogCiAJaWYgKChkZXYtPmRldi0+YnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDTUNJQSkgfHwKIAkgICAgKGRldi0+ZGV2LT5idXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU0RJTykgfHwKLQkgICAgQjQzX0ZPUkNFX1BJTykgeworCSAgICBtb2RwYXJhbV9waW8pIHsKIAkJZGV2LT5fX3VzaW5nX3Bpb190cmFuc2ZlcnMgPSAxOwogCQllcnIgPSBiNDNfcGlvX2luaXQoZGV2KTsKIAl9IGVsc2UgewpAQCAtNDM4OCw3ICs0MzkxLDcgQEAKIH0KIAogc3RhdGljIGludCBiNDNfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CkBAIC00Mzk2LDI0ICs0Mzk5LDI0IEBACiAKIAkvKiBUT0RPOiBhbGxvdyBXRFMvQVAgZGV2aWNlcyB0byBjb2V4aXN0ICovCiAKLQlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQgJiYKLQkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAlpZiAod2wtPm9wZXJhdGluZykKIAkJZ290byBvdXRfbXV0ZXhfdW5sb2NrOwogCi0JYjQzZGJnKHdsLCAiQWRkaW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwliNDNkYmcod2wsICJBZGRpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CiAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJd2wtPm9wZXJhdGluZyA9IDE7Ci0Jd2wtPnZpZiA9IGNvbmYtPnZpZjsKLQl3bC0+aWZfdHlwZSA9IGNvbmYtPnR5cGU7Ci0JbWVtY3B5KHdsLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwl3bC0+dmlmID0gdmlmOworCXdsLT5pZl90eXBlID0gdmlmLT50eXBlOworCW1lbWNweSh3bC0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCiAJYjQzX2FkanVzdF9vcG1vZGUoZGV2KTsKIAliNDNfc2V0X3ByZXRidHQoZGV2KTsKQEAgLTQ0MjgsMTcgKzQ0MzEsMTcgQEAKIH0KIAogc3RhdGljIHZvaWQgYjQzX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAKLQliNDNkYmcod2wsICJSZW1vdmluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJYjQzZGJnKHdsLCAiUmVtb3ZpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJQjQzX1dBUk5fT04oIXdsLT5vcGVyYXRpbmcpOwotCUI0M19XQVJOX09OKHdsLT52aWYgIT0gY29uZi0+dmlmKTsKKwlCNDNfV0FSTl9PTih3bC0+dmlmICE9IHZpZik7CiAJd2wtPnZpZiA9IE5VTEw7CiAKIAl3bC0+b3BlcmF0aW5nID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaAppbmRleCA3ZGQ2NDljOS4uN2IzYzQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaApAQCAtNTUsOCArNTUsNiBAQAogI2RlZmluZSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFMJMzIKIAogCi0jaWZkZWYgQ09ORklHX0I0M19QSU8KLQogc3RydWN0IGI0M19waW9fdHhwYWNrZXQgewogCS8qIFBvaW50ZXIgdG8gdGhlIFRYIHF1ZXVlIHdlIGJlbG9uZyB0by4gKi8KIAlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxdWV1ZTsKQEAgLTE2OSw0MiArMTY3LDQgQEAKIHZvaWQgYjQzX3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19waW9fdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiAKLQotI2Vsc2UgLyogQ09ORklHX0I0M19QSU8gKi8KLQotCi1zdGF0aWMgaW5saW5lIGludCBiNDNfcGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYjQzX3Bpb19zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGI0M19waW9fdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9faGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYjQzX3Bpb19yeChzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpxKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fdHhfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYjQzX3Bpb190eF9yZXN1bWUoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotfQotCi0jZW5kaWYgLyogQ09ORklHX0I0M19QSU8gKi8KICNlbmRpZiAvKiBCNDNfUElPX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCA0YTkwNWI2Li5mYmFlMjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTMzNjEsNyArMzM2MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYjQzbGVnYWN5X29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bCA9IGh3X3RvX2I0M2xlZ2FjeV93bChodyk7CiAJc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2OwpAQCAtMzM3MCwyMyArMzM3MCwyMyBAQAogCiAJLyogVE9ETzogYWxsb3cgV0RTL0FQIGRldmljZXMgdG8gY29leGlzdCAqLwogCi0JaWYgKGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKLQkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAlpZiAod2wtPm9wZXJhdGluZykKIAkJZ290byBvdXRfbXV0ZXhfdW5sb2NrOwogCi0JYjQzbGVnYWN5ZGJnKHdsLCAiQWRkaW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwliNDNsZWdhY3lkYmcod2wsICJBZGRpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CiAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJd2wtPm9wZXJhdGluZyA9IDE7Ci0Jd2wtPnZpZiA9IGNvbmYtPnZpZjsKLQl3bC0+aWZfdHlwZSA9IGNvbmYtPnR5cGU7Ci0JbWVtY3B5KHdsLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwl3bC0+dmlmID0gdmlmOworCXdsLT5pZl90eXBlID0gdmlmLT50eXBlOworCW1lbWNweSh3bC0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCWI0M2xlZ2FjeV9hZGp1c3Rfb3Btb2RlKGRldik7CkBAIC0zNDAzLDE4ICszNDAzLDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGI0M2xlZ2FjeV9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBod190b19iNDNsZWdhY3lfd2woaHcpOwogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYjQzbGVnYWN5ZGJnKHdsLCAiUmVtb3ZpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOworCWI0M2xlZ2FjeWRiZyh3bCwgIlJlbW92aW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCB2aWYtPnR5cGUpOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAogCUI0M2xlZ2FjeV9XQVJOX09OKCF3bC0+b3BlcmF0aW5nKTsKLQlCNDNsZWdhY3lfV0FSTl9PTih3bC0+dmlmICE9IGNvbmYtPnZpZik7CisJQjQzbGVnYWN5X1dBUk5fT04od2wtPnZpZiAhPSB2aWYpOwogCXdsLT52aWYgPSBOVUxMOwogCiAJd2wtPm9wZXJhdGluZyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggZmY5YjVjOC4uZDcwNzMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtMjYxOCw2ICsyNjE4LDE1IEBACiAJaW50IGV2ZW50cyA9IDA7CiAJdTE2IGV2OwogCisJLyogRGV0ZWN0IGVhcmx5IGludGVycnVwdCBiZWZvcmUgZHJpdmVyIGlzIGZ1bGx5IGNvbmZpZ3VlZCAqLworCWlmICghZGV2LT5iYXNlX2FkZHIpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIGJ1dCBkZXYgbm90IGNvbmZpZ3VyZWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwppbmRleCA4ZmRkNDFmLi40ZDk3YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKQEAgLTM5LDcgKzM5LDcgQEAKIC8qIEZJWDogZG8gd2UgbmVlZCBtYi93bWIvcm1iIHdpdGggbWVtb3J5IG9wZXJhdGlvbnM/ICovCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHByaXNtMl9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHByaXNtMl9wY2lfaWRfdGFibGUpID0gewogCS8qIEludGVyc2lsIFByaXNtMyBJU0wzODcyIDExTWIvcyBXTEFOIENvbnRyb2xsZXIgKi8KIAl7IDB4MTI2MCwgMHgzODcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJLyogSW50ZXJzaWwgUHJpc20yLjUgSVNMMzg3NCAxMU1iL3MgV0xBTiBDb250cm9sbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwppbmRleCAwZTVkNTEwLi5mYzA0Y2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogI2RlZmluZSBQTFhERVYodmVuZG9yLGRldixzdHIpIHsgdmVuZG9yLCBkZXYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHJpc20yX3BseF9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocHJpc20yX3BseF9pZF90YWJsZSkgPSB7CiAJUExYREVWKDB4MTBiNywgMHg3NzcwLCAiM0NvbSBBaXJDb25uZWN0IFBDSSA3NzdBIiksCiAJUExYREVWKDB4MTExYSwgMHgxMDIzLCAiU2llbWVucyBTcGVlZFN0cmVhbSBTUzEwMjMiKSwKIAlQTFhERVYoMHgxMjZjLCAweDgwMzAsICJOb3J0ZWwgZW1vYmlsaXR5IiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDU2YWZjZjAuLjliNzJjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC02NTg1LDcgKzY1ODUsNyBAQAogCiAjZGVmaW5lIElQVzIxMDBfREVWX0lEKHgpIHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIHggfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXB3MjEwMF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlwdzIxMDBfcGNpX2lkX3RhYmxlKSA9IHsKIAlJUFcyMTAwX0RFVl9JRCgweDI1MjApLAkvKiBJTiAyMTAwQSBtUENJIDNBICovCiAJSVBXMjEwMF9ERVZfSUQoMHgyNTIxKSwJLyogSU4gMjEwMEEgbVBDSSAzQiAqLwogCUlQVzIxMDBfREVWX0lEKDB4MjUyNCksCS8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggMDlkZGQzZS4uNjNjMmE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTExNTI0LDcgKzExNTI0LDcgQEAKIH0KIAogLyogUENJIGRyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcmRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2FyZF9pZHMpID0gewogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNDMsIDB4ODA4NiwgMHgyNzAxLCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIDB4MjcwMiwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCAweDI3MTEsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCmluZGV4IDg0MTQxNzguLjBkYjFmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAogCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAogCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAorCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKIAkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydCwKIAkuYWxpdmVfbm90aWZ5ID0gaXdsNTAwMF9hbGl2ZV9ub3RpZnksCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2w1MDAwX3NlbmRfdHhfcG93ZXIsCkBAIC0xNDAsNyArMTQxLDcgQEAKIAkgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2wxMDAwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2wxMDAwX29wcyA9IHsKIAkudWNvZGUgPSAmaXdsNTAwMF91Y29kZSwKIAkubGliID0gJml3bDEwMDBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKQEAgLTE3Myw3ICsxNzQsNiBAQAogCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDEwMDBfYmdfY2ZnID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDIzNDg5MWQuLjZjZGU2NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTI4MDQsNyArMjgwNCw3IEBACiAJLnJ0c190eF9jbWRfZmxhZyA9IGl3bGNvcmVfcnRzX3R4X2NtZF9mbGFnLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDM5NDVfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDM5NDVfb3BzID0gewogCS51Y29kZSA9ICZpd2wzOTQ1X3Vjb2RlLAogCS5saWIgPSAmaXdsMzk0NV9saWIsCiAJLmhjbWQgPSAmaXdsMzk0NV9oY21kLApAQCAtMjg0OSw3ICsyODQ5LDcgQEAKIAkuYnJva2VuX3Bvd2Vyc2F2ZSA9IHRydWUsCiB9OwogCi1zdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW10gPSB7CitERUZJTkVfUENJX0RFVklDRV9UQUJMRShpd2wzOTQ1X2h3X2NhcmRfaWRzKSA9IHsKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjIyLCAweDEwMDUsIGl3bDM5NDVfYmdfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIyMiwgMHgxMDM0LCBpd2wzOTQ1X2JnX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDQyMjIsIDB4MTA0NCwgaXdsMzk0NV9iZ19jZmcpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAppbmRleCA1MzFmYTEyLi5iYzUzMmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAvKiBIYXJkd2FyZSBzcGVjaWZpYyBmaWxlIGRlZmluZXMgdGhlIFBDSSBJRHMgdGFibGUgZm9yIHRoYXQgaGFyZHdhcmUgbW9kdWxlICovCi1leHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDM5NDVfaHdfY2FyZF9pZHNbXTsKIAogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgpAQCAtMjI2LDcgKzIyNiw4IEBACiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsaW50IGxlZnQpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nLAorCQkJCSAgICAgICBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwppbmRleCA0ODRjNWZkLi43ODcwNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCkBAIC0yMjA4LDcgKzIyMDgsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDQ5NjVfdWNvZGUsCiAJLmxpYiA9ICZpd2w0OTY1X2xpYiwKIAkuaGNtZCA9ICZpd2w0OTY1X2hjbWQsCkBAIC0yMjM5LDcgKzIyMzksNiBAQAogCS5icm9rZW5fcG93ZXJzYXZlID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDYxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTDQ5NjVfQ0FMX05VTV9CRUFDT05TLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCiB9OwogCiAvKiBNb2R1bGUgZmlybXdhcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCAzM2E1ODY2Li5lYzZiMjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0xNDY2LDYgKzE0NjYsNyBAQAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAogCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAogCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAorCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKIAkubG9hZF91Y29kZSA9IGl3bDUwMDBfbG9hZF91Y29kZSwKIAkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydCwKIAkuYWxpdmVfbm90aWZ5ID0gaXdsNTAwMF9hbGl2ZV9ub3RpZnksCkBAIC0xNTE4LDYgKzE1MTksNyBAQAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAogCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAogCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAorCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKIAkubG9hZF91Y29kZSA9IGl3bDUwMDBfbG9hZF91Y29kZSwKIAkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydCwKIAkuYWxpdmVfbm90aWZ5ID0gaXdsNTAwMF9hbGl2ZV9ub3RpZnksCkBAIC0xNTU1LDcgKzE1NTcsNyBAQAogCSB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMTU2Myw3ICsxNTY1LDcgQEAKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDUxNTBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDUxNTBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNTE1MF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMTU5OSw3ICsxNjAxLDYgQEAKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmduX2NmZyA9IHsKQEAgLTE2NjgsNyArMTY2OSw2IEBACiAJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzUwX2Fnbl9jZmcgPSB7CkBAIC0xNjkyLDcgKzE2OTIsNiBAQAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTE1MF9hZ25fY2ZnID0gewpAQCAtMTcxNiw3ICsxNzE1LDYgQEAKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWJnX2NmZyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCA3NGU1NzEwLi5hNWEwZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC0yMTUsNiArMjE1LDcgQEAKIAkubG9hZF91Y29kZSA9IGl3bDUwMDBfbG9hZF91Y29kZSwKIAkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKIAkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKKwkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCiAJLmluaXRfYWxpdmVfc3RhcnQgPSBpd2w1MDAwX2luaXRfYWxpdmVfc3RhcnQsCiAJLmFsaXZlX25vdGlmeSA9IGl3bDUwMDBfYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsNTAwMF9zZW5kX3R4X3Bvd2VyLApAQCAtMjUyLDcgKzI1Myw3IEBACiAJIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w2MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCkBAIC0yNjcsNyArMjY4LDcgQEAKIAkuY2FsY19yc3NpID0gaXdsNTAwMF9jYWxjX3Jzc2ksCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjA1MF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjA1MF9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w2MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCkBAIC0zMDYsNyArMzA3LDYgQEAKIAkuc3VwcG9ydHNfaWRsZSA9IHRydWUsCiAJLmFkdl90aGVybWFsX3Rocm90dGxlID0gdHJ1ZSwKIAkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYWJnX2NmZyA9IHsKQEAgLTM5NSw3ICszOTUsNiBAQAogCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKIAkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWJnX2NmZyA9IHsKQEAgLTQ1NSw3ICs0NTQsNiBAQAogCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKIAkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKaW5kZXggMWM5ODY2ZC4uYzhmZWM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTY1Nyw2ICs2NTcsMTMxIEBACiAJaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9BU1lOQywgZmFsc2UpOwogfQogCisKK3N0YXRpYyB2b2lkIGl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGJhc2UsCisJCQkJCXUzMiBzdGFydF9pZHgsIHUzMiBudW1fZXZlbnRzLAorCQkJCQl1MzIgbW9kZSkKK3sKKwl1MzIgaTsKKwl1MzIgcHRyOyAgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgbG9nIGRhdGEgKi8KKwl1MzIgZXYsIHRpbWUsIGRhdGE7IC8qIGV2ZW50IGxvZyBkYXRhICovCisJdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CisKKwlpZiAobW9kZSA9PSAwKQorCQlwdHIgPSBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkgKyAoc3RhcnRfaWR4ICogMiAqIHNpemVvZih1MzIpKTsKKwllbHNlCisJCXB0ciA9IGJhc2UgKyAoNCAqIHNpemVvZih1MzIpKSArIChzdGFydF9pZHggKiAzICogc2l6ZW9mKHUzMikpOworCisJLyogTWFrZSBzdXJlIGRldmljZSBpcyBwb3dlcmVkIHVwIGZvciBTUkFNIHJlYWRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCWlmIChpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHN0YXJ0aW5nIGFkZHJlc3M7IHJlYWRzIHdpbGwgYXV0by1pbmNyZW1lbnQgKi8KKwlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIHB0cik7CisJcm1iKCk7CisKKwkvKgorCSAqICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KKwkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKKwkJZXYgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJdGltZSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlpZiAobW9kZSA9PSAwKSB7CisJCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9jb250X2V2ZW50KHByaXYsCisJCQkJCQkJMCwgdGltZSwgZXYpOworCQl9IGVsc2UgeworCQkJZGF0YSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfY29udF9ldmVudChwcml2LAorCQkJCQkJdGltZSwgZGF0YSwgZXYpOworCQl9CisJfQorCS8qIEFsbG93IGRldmljZSB0byBwb3dlciBkb3duICovCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKK30KKwordm9pZCBpd2xfY29udGludW91c19ldmVudF90cmFjZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTMyIGNhcGFjaXR5OyAgIC8qIGV2ZW50IGxvZyBjYXBhY2l0eSBpbiAjIGVudHJpZXMgKi8KKwl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLworCXUzMiBtb2RlOyAgICAgICAvKiAwIC0gbm8gdGltZXN0YW1wLCAxIC0gdGltZXN0YW1wIHJlY29yZGVkICovCisJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCisJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLworCisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5lcnJvcl9ldmVudF90YWJsZV9wdHIpOworCWVsc2UKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKKwkJY2FwYWNpdHkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwkJbnVtX3dyYXBzID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgyICogc2l6ZW9mKHUzMikpKTsKKwkJbW9kZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMSAqIHNpemVvZih1MzIpKSk7CisJCW5leHRfZW50cnkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDMgKiBzaXplb2YodTMyKSkpOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlpZiAobnVtX3dyYXBzID09IHByaXYtPmV2ZW50X2xvZy5udW1fd3JhcHMpIHsKKwkJaXdsX3ByaW50X2NvbnRfZXZlbnRfdHJhY2UocHJpdiwKKwkJCQkgICAgICAgYmFzZSwgcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnksCisJCQkJICAgICAgIG5leHRfZW50cnkgLSBwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSwKKwkJCQkgICAgICAgbW9kZSk7CisJCXByaXYtPmV2ZW50X2xvZy5ub25fd3JhcHNfY291bnQrKzsKKwl9IGVsc2UgeworCQlpZiAoKG51bV93cmFwcyAtIHByaXYtPmV2ZW50X2xvZy5udW1fd3JhcHMpID4gMSkKKwkJCXByaXYtPmV2ZW50X2xvZy53cmFwc19tb3JlX2NvdW50Kys7CisJCWVsc2UKKwkJCXByaXYtPmV2ZW50X2xvZy53cmFwc19vbmNlX2NvdW50Kys7CisJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX3dyYXBfZXZlbnQocHJpdiwKKwkJCQludW1fd3JhcHMgLSBwcml2LT5ldmVudF9sb2cubnVtX3dyYXBzLAorCQkJCW5leHRfZW50cnksIHByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5KTsKKwkJaWYgKG5leHRfZW50cnkgPCBwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSkgeworCQkJaXdsX3ByaW50X2NvbnRfZXZlbnRfdHJhY2UocHJpdiwgYmFzZSwKKwkJCSAgICAgICBwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSwKKwkJCSAgICAgICBjYXBhY2l0eSAtIHByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5LAorCQkJICAgICAgIG1vZGUpOworCisJCQlpd2xfcHJpbnRfY29udF9ldmVudF90cmFjZShwcml2LCBiYXNlLCAwLAorCQkJCW5leHRfZW50cnksIG1vZGUpOworCQl9IGVsc2UgeworCQkJaXdsX3ByaW50X2NvbnRfZXZlbnRfdHJhY2UocHJpdiwgYmFzZSwKKwkJCSAgICAgICBuZXh0X2VudHJ5LCBjYXBhY2l0eSAtIG5leHRfZW50cnksCisJCQkgICAgICAgbW9kZSk7CisKKwkJCWl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHByaXYsIGJhc2UsIDAsCisJCQkJbmV4dF9lbnRyeSwgbW9kZSk7CisJCX0KKwl9CisJcHJpdi0+ZXZlbnRfbG9nLm51bV93cmFwcyA9IG51bV93cmFwczsKKwlwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSA9IG5leHRfZW50cnk7Cit9CisKKy8qKgorICogaXdsX2JnX3Vjb2RlX3RyYWNlIC0gVGltZXIgY2FsbGJhY2sgdG8gbG9nIHVjb2RlIGV2ZW50CisgKgorICogVGhlIHRpbWVyIGlzIGNvbnRpbnVhbGx5IHNldCB0byBleGVjdXRlIGV2ZXJ5CisgKiBVQ09ERV9UUkFDRV9QRVJJT0QgbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IHRpbWVyIGV4cGlyZWQKKyAqIHRoaXMgZnVuY3Rpb24gaXMgdG8gcGVyZm9ybSBjb250aW51b3VzIHVDb2RlIGV2ZW50IGxvZ2dpbmcgb3BlcmF0aW9uCisgKiBpZiBlbmFibGVkCisgKi8KK3N0YXRpYyB2b2lkIGl3bF9iZ191Y29kZV90cmFjZSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWRhdGE7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCWlmIChwcml2LT5ldmVudF9sb2cudWNvZGVfdHJhY2UpIHsKKwkJaXdsX2NvbnRpbnVvdXNfZXZlbnRfdHJhY2UocHJpdik7CisJCS8qIFJlc2NoZWR1bGUgdGhlIHRpbWVyIHRvIG9jY3VyIGluIFVDT0RFX1RSQUNFX1BFUklPRCAqLworCQltb2RfdGltZXIoJnByaXYtPnVjb2RlX3RyYWNlLAorCQkJIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFVDT0RFX1RSQUNFX1BFUklPRCkpOworCX0KK30KKwogc3RhdGljIHZvaWQgaXdsX3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CkBAIC02ODksMTIgKzgxNCwxNCBAQAogCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KHBrdC0+dS5jYXJkX3N0YXRlX25vdGlmLmZsYWdzKTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIAotCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXMgQ1Q6JXNcbiIsCiAJCQkgIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIiwKLQkJCSAgKGZsYWdzICYgU1dfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iKTsKKwkJCSAgKGZsYWdzICYgU1dfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAorCQkJICAoZmxhZ3MgJiBDVF9DQVJEX0RJU0FCTEVEKSA/CisJCQkgICJSZWFjaGVkIiA6ICJOb3QgcmVhY2hlZCIpOwogCiAJaWYgKGZsYWdzICYgKFNXX0NBUkRfRElTQUJMRUQgfCBIV19DQVJEX0RJU0FCTEVEIHwKLQkJICAgICBSRl9DQVJEX0RJU0FCTEVEKSkgeworCQkgICAgIENUX0NBUkRfRElTQUJMRUQpKSB7CiAKIAkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAogCQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CkBAIC03MDgsMTAgKzgzNSwxMCBAQAogCQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NQlhfQywKIAkJCQkJSEJVU19UQVJHX01CWF9DX1JFR19CSVRfQ01EX0JMT0NLRUQpOwogCQl9Ci0JCWlmIChmbGFncyAmIFJGX0NBUkRfRElTQUJMRUQpCisJCWlmIChmbGFncyAmIENUX0NBUkRfRElTQUJMRUQpCiAJCQlpd2xfdHRfZW50ZXJfY3Rfa2lsbChwcml2KTsKIAl9Ci0JaWYgKCEoZmxhZ3MgJiBSRl9DQVJEX0RJU0FCTEVEKSkKKwlpZiAoIShmbGFncyAmIENUX0NBUkRfRElTQUJMRUQpKQogCQlpd2xfdHRfZXhpdF9jdF9raWxsKHByaXYpOwogCiAJaWYgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkKQEAgLTE3MDUsOCArMTgzMiw5IEBACiAgKiBpd2xfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCiAgKgogICovCi1zdGF0aWMgdm9pZCBpd2xfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKLQkJCQl1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUpCitzdGF0aWMgaW50IGl3bF9wcmludF9ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgc3RhcnRfaWR4LAorCQkJICAgICAgIHUzMiBudW1fZXZlbnRzLCB1MzIgbW9kZSwKKwkJCSAgICAgICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJdTMyIGk7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTE3MTYsNyArMTg0NCw3IEBACiAJdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CiAKIAlpZiAobnVtX2V2ZW50cyA9PSAwKQotCQlyZXR1cm47CisJCXJldHVybiBwb3M7CiAJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAllbHNlCkBAIC0xNzQ0LDI3ICsxODcyLDQ0IEBACiAJCXRpbWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKG1vZGUgPT0gMCkgewogCQkJLyogZGF0YSwgZXYgKi8KLQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsIHRpbWUsIGV2KTsKLQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKKwkJCWlmIChidWZzeikgeworCQkJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCQkiRVZUX0xPRzoweCUwOHg6JTA0dVxuIiwKKwkJCQkJCXRpbWUsIGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgMCwKKwkJCQkJdGltZSwgZXYpOworCQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsCisJCQkJCXRpbWUsIGV2KTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCWRhdGEgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAorCQkJaWYgKGJ1ZnN6KSB7CisJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCQkJCSB0aW1lLCBkYXRhLCBldik7CisJCQl9IGVsc2UgeworCQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAogCQkJCQl0aW1lLCBkYXRhLCBldik7Ci0JCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9ldmVudChwcml2LCB0aW1lLCBkYXRhLCBldik7CisJCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgdGltZSwKKwkJCQkJZGF0YSwgZXYpOworCQkJfQogCQl9CiAJfQogCiAJLyogQWxsb3cgZGV2aWNlIHRvIHBvd2VyIGRvd24gKi8KIAlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCXJldHVybiBwb3M7CiB9CiAKIC8qKgogICogaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyAtIER1bXAgdGhlIG5ld2VzdCAjIG9mIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqLwotc3RhdGljIHZvaWQgaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjYXBhY2l0eSwKLQkJCQkgICAgICB1MzIgbnVtX3dyYXBzLCB1MzIgbmV4dF9lbnRyeSwKLQkJCQkgICAgICB1MzIgc2l6ZSwgdTMyIG1vZGUpCitzdGF0aWMgaW50IGl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgY2FwYWNpdHksCisJCQkJICAgIHUzMiBudW1fd3JhcHMsIHUzMiBuZXh0X2VudHJ5LAorCQkJCSAgICB1MzIgc2l6ZSwgdTMyIG1vZGUsCisJCQkJICAgIGludCBwb3MsIGNoYXIgKipidWYsIHNpemVfdCBidWZzeikKIHsKIAkvKgogCSAqIGRpc3BsYXkgdGhlIG5ld2VzdCBERUZBVUxUX0xPR19FTlRSSUVTIGVudHJpZXMKQEAgLTE3NzIsMjEgKzE5MTcsMjYgQEAKIAkgKi8KIAlpZiAobnVtX3dyYXBzKSB7CiAJCWlmIChuZXh0X2VudHJ5IDwgc2l6ZSkgewotCQkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LAotCQkJCQljYXBhY2l0eSAtIChzaXplIC0gbmV4dF9lbnRyeSksCi0JCQkJCXNpemUgLSBuZXh0X2VudHJ5LCBtb2RlKTsKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKLQkJCQkgICAgbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsCisJCQkJCQljYXBhY2l0eSAtIChzaXplIC0gbmV4dF9lbnRyeSksCisJCQkJCQlzaXplIC0gbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJCXBvcywgYnVmLCBidWZzeik7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsCisJCQkJCQkgIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQkgIHBvcywgYnVmLCBidWZzeik7CiAJCX0gZWxzZQotCQkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5IC0gc2l6ZSwKLQkJCQkgICAgc2l6ZSwgbW9kZSk7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICBzaXplLCBtb2RlLCBwb3MsIGJ1ZiwgYnVmc3opOwogCX0gZWxzZSB7Ci0JCWlmIChuZXh0X2VudHJ5IDwgc2l6ZSkKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7Ci0JCWVsc2UKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSAtIHNpemUsCi0JCQkJCSAgICBzaXplLCBtb2RlKTsKKwkJaWYgKG5leHRfZW50cnkgPCBzaXplKSB7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksCisJCQkJCQkgIG1vZGUsIHBvcywgYnVmLCBidWZzeik7CisJCX0gZWxzZSB7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICBzaXplLCBtb2RlLCBwb3MsIGJ1ZiwgYnVmc3opOworCQl9CiAJfQorCXJldHVybiBwb3M7CiB9CiAKIC8qIEZvciBzYW5pdHkgY2hlY2sgb25seS4gIEFjdHVhbCBzaXplIGlzIGRldGVybWluZWQgYnkgdUNvZGUsIHR5cC4gNTEyICovCkBAIC0xNzk0LDcgKzE5NDQsOCBAQAogCiAjZGVmaW5lIERFRkFVTFRfRFVNUF9FVkVOVF9MT0dfRU5UUklFUyAoMjApCiAKLXZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2cpCitpbnQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2csCisJCQkgICAgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KQogewogCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCiAJdTMyIGNhcGFjaXR5OyAgIC8qIGV2ZW50IGxvZyBjYXBhY2l0eSBpbiAjIGVudHJpZXMgKi8KQEAgLTE4MDIsNiArMTk1Myw4IEBACiAJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCiAJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLwogCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCWludCBwb3MgPSAwOworCXNpemVfdCBidWZzeiA9IDA7CiAKIAlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOwpAQCAtMTgxMiw3ICsxOTY1LDcgQEAKIAkJSVdMX0VSUihwcml2LAogCQkJIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYIGZvciAlcyB1Q29kZVxuIiwKIAkJCWJhc2UsIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpID8gIkluaXQiIDogIlJUIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHBvczsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCkBAIC0xODM4LDcgKzE5OTEsNyBAQAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewogCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gcG9zOwogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC0xODUzLDYgKzIwMDYsMTUgQEAKIAkJc2l6ZSk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChkaXNwbGF5KSB7CisJCWlmIChmdWxsX2xvZykKKwkJCWJ1ZnN6ID0gY2FwYWNpdHkgKiA0ODsKKwkJZWxzZQorCQkJYnVmc3ogPSBzaXplICogNDg7CisJCSpidWYgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqYnVmKQorCQkJcmV0dXJuIHBvczsKKwl9CiAJaWYgKChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgfHwgZnVsbF9sb2cpIHsKIAkJLyoKIAkJICogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLApAQCAtMTg2MCwxNyArMjAyMiwyMiBAQAogCQkgKiBpLmUgdGhlIG5leHQgb25lIHRoYXQgdUNvZGUgd291bGQgZmlsbC4KIAkJICovCiAJCWlmIChudW1fd3JhcHMpCi0JCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnksCi0JCQkJCSAgICBjYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOworCQkJcG9zID0gaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAorCQkJCQkJY2FwYWNpdHkgLSBuZXh0X2VudHJ5LCBtb2RlLAorCQkJCQkJcG9zLCBidWYsIGJ1ZnN6KTsKIAkJLyogKHRoZW4vZWxzZSkgc3RhcnQgYXQgdG9wIG9mIGxvZyAqLwotCQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOworCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsCisJCQkJCSAgbmV4dF9lbnRyeSwgbW9kZSwgcG9zLCBidWYsIGJ1ZnN6KTsKIAl9IGVsc2UKLQkJaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAotCQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlKTsKKwkJcG9zID0gaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAorCQkJCQkJbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSwKKwkJCQkJCXBvcywgYnVmLCBidWZzeik7CiAjZWxzZQotCWl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3MocHJpdiwgY2FwYWNpdHksIG51bV93cmFwcywKLQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlKTsKKwlwb3MgPSBpd2xfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCisJCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUsCisJCQkJCXBvcywgYnVmLCBidWZzeik7CiAjZW5kaWYKKwlyZXR1cm4gcG9zOwogfQogCiAvKioKQEAgLTI0NTYsNiArMjYyMywxMCBAQAogCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKIAkJCSAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFM7CiAKKwlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pCisJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTIHwKKwkJCSAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1NUQVRJQ19TTVBTOworCiAJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYpOwogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KIAkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKQEAgLTMxMjYsNiArMzI5NywxMCBAQAogCXByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7CiAJcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYy5mdW5jdGlvbiA9IGl3bF9iZ19zdGF0aXN0aWNzX3BlcmlvZGljOwogCisJaW5pdF90aW1lcigmcHJpdi0+dWNvZGVfdHJhY2UpOworCXByaXYtPnVjb2RlX3RyYWNlLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPnVjb2RlX3RyYWNlLmZ1bmN0aW9uID0gaXdsX2JnX3Vjb2RlX3RyYWNlOworCiAJaWYgKCFwcml2LT5jZmctPnVzZV9pc3JfbGVnYWN5KQogCQl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCiAJCQlpd2xfaXJxX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXByaXYpOwpAQCAtMzE0NCw2ICszMzE5LDcgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5hbGl2ZV9zdGFydCk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+YmVhY29uX3VwZGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOworCWRlbF90aW1lcl9zeW5jKCZwcml2LT51Y29kZV90cmFjZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9pbml0X2h3X3JhdGVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTMxODgsNiArMzM2NCw3IEBACiAJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAKIAlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzID0gSUVFRTgwMjExX1NNUFNfU1RBVElDOwogCiAJLyogQ2hvb3NlIHdoaWNoIHJlY2VpdmVycy9hbnRlbm5hcyB0byB1c2UgKi8KIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQpAQCAtMzU4OSw3ICszNzY2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogSGFyZHdhcmUgc3BlY2lmaWMgZmlsZSBkZWZpbmVzIHRoZSBQQ0kgSURzIHRhYmxlIGZvciB0aGF0IGhhcmR3YXJlIG1vZHVsZSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bF9od19jYXJkX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGl3bF9od19jYXJkX2lkcykgPSB7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjUKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjI5LCBQQ0lfQU5ZX0lELCBpd2w0OTY1X2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjMwLCBQQ0lfQU5ZX0lELCBpd2w0OTY1X2Fnbl9jZmcpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCmluZGV4IDk1YTU3YjMuLmRjNjE5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYwpAQCAtNDE0LDcgKzQxNCw2IEBACiAvKiBQcmVwYXJlIGEgU0VOU0lUSVZJVFlfQ01ELCBzZW5kIHRvIHVDb2RlIGlmIHZhbHVlcyBoYXZlIGNoYW5nZWQgKi8KIHN0YXRpYyBpbnQgaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X2NtZCBjbWQgOwogCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWRfb3V0ID0gewpAQCAtNDc3LDExICs0NzYsNyBAQAogCW1lbWNweSgmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksICYoY21kLnRhYmxlWzBdKSwKIAkgICAgICAgc2l6ZW9mKHUxNikqSERfVEFCTEVfU0laRSk7CiAKLQlyZXQgPSBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZF9vdXQpOwotCWlmIChyZXQpCi0JCUlXTF9FUlIocHJpdiwgIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKIH0KIAogdm9pZCBpd2xfaW5pdF9zZW5zaXRpdml0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBlOTE1MDc1Li4yOGYzODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTI1MTAsNyArMjUxMCw3IEBACiAKICNkZWZpbmUgSFdfQ0FSRF9ESVNBQkxFRCAgIDB4MDEKICNkZWZpbmUgU1dfQ0FSRF9ESVNBQkxFRCAgIDB4MDIKLSNkZWZpbmUgUkZfQ0FSRF9ESVNBQkxFRCAgIDB4MDQKKyNkZWZpbmUgQ1RfQ0FSRF9ESVNBQkxFRCAgIDB4MDQKICNkZWZpbmUgUlhPTl9DQVJEX0RJU0FCTEVEIDB4MTAKIAogc3RydWN0IGl3bF9jdF9raWxsX2NvbmZpZyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggNTc0ZDM2Ni4uMTRmNDgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtNDUwLDggKzQ1MCw2IEBACiAJaWYgKHByaXYtPmNmZy0+aHRfZ3JlZW5maWVsZF9zdXBwb3J0KQogCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEOwogCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKLQlodF9pbmZvLT5jYXAgfD0gKElFRUU4MDIxMV9IVF9DQVBfU01fUFMgJgotCQkJICAgICAocHJpdi0+Y2ZnLT5zbV9wc19tb2RlIDw8IDIpKTsKIAltYXhfYml0X3JhdGUgPSBNQVhfQklUX1JBVEVfMjBfTUhaOwogCWlmIChwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsICYgQklUKGJhbmQpKSB7CiAJCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKQEAgLTYzNiw3ICs2MzQsNyBAQAogCiBzdGF0aWMgYm9vbCBpc19zaW5nbGVfcnhfc3RyZWFtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlyZXR1cm4gIXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0IHx8CisJcmV0dXJuIHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMgPT0gSUVFRTgwMjExX1NNUFNfU1RBVElDIHx8CiAJICAgICAgIHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNpbmdsZV9jaGFpbl9zdWZmaWNpZW50OwogfQogCkBAIC0xMDAzLDI4ICsxMDAxLDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgaXdsX2dldF9pZGxlX3J4X2NoYWluX2NvdW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGFjdGl2ZV9jbnQpCiB7Ci0JaW50IGlkbGVfY250ID0gYWN0aXZlX2NudDsKLQlib29sIGlzX2NhbSA9ICF0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qICMgUnggY2hhaW5zIHdoZW4gaWRsaW5nIGFuZCBtYXliZSB0cnlpbmcgdG8gc2F2ZSBwb3dlciAqLwotCXN3aXRjaCAocHJpdi0+Y2ZnLT5zbV9wc19tb2RlKSB7Ci0JY2FzZSBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUM6Ci0JCWlkbGVfY250ID0gKGlzX2NhbSkgPyBhY3RpdmVfY250IDogSVdMX05VTV9JRExFX0NIQUlOU19TSU5HTEU7Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9IVF9DQVBfU01fUFNfRFlOQU1JQzoKLQkJaWRsZV9jbnQgPSAoaXNfY2FtKSA/IElXTF9OVU1fSURMRV9DSEFJTlNfRFVBTCA6Ci0JCQlJV0xfTlVNX0lETEVfQ0hBSU5TX1NJTkdMRTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRDoKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0hUX0NBUF9TTV9QU19JTlZBTElEOgorCS8qICMgUnggY2hhaW5zIHdoZW4gaWRsaW5nLCBkZXBlbmRpbmcgb24gU01QUyBtb2RlICovCisJc3dpdGNoIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzKSB7CisJY2FzZSBJRUVFODAyMTFfU01QU19TVEFUSUM6CisJY2FzZSBJRUVFODAyMTFfU01QU19EWU5BTUlDOgorCQlyZXR1cm4gSVdMX05VTV9JRExFX0NIQUlOU19TSU5HTEU7CisJY2FzZSBJRUVFODAyMTFfU01QU19PRkY6CisJCXJldHVybiBhY3RpdmVfY250OwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlIocHJpdiwgImludmFsaWQgc21fcHMgbW9kZSAldVxuIiwKLQkJCXByaXYtPmNmZy0+c21fcHNfbW9kZSk7Ci0JCVdBUk5fT04oMSk7Ci0JCWJyZWFrOworCQlXQVJOKDEsICJpbnZhbGlkIFNNUFMgbW9kZSAlZCIsCisJCSAgICAgcHJpdi0+Y3VycmVudF9odF9jb25maWcuc21wcyk7CisJCXJldHVybiBhY3RpdmVfY250OwogCX0KLQlyZXR1cm4gaWRsZV9jbnQ7CiB9CiAKIC8qIHVwIHRvIDQgY2hhaW5zICovCkBAIC0xMzYzLDcgKzEzNTEsOSBAQAogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCiAJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfbmljX2V2ZW50X2xvZyhwcml2LCBmYWxzZSk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2Nzcihwcml2KTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2cocHJpdiwgZmFsc2UsIE5VTEwsIGZhbHNlKTsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykKIAkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdik7CkBAIC0yNTk0LDEyICsyNTg0LDEyIEBACiBFWFBPUlRfU1lNQk9MKGl3bF9zZXRfbW9kZSk7CiAKIGludCBpd2xfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCB2aWYtPnR5cGUpOwogCiAJaWYgKHByaXYtPnZpZikgewogCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOwpAQCAtMjYwNywxOSArMjU5NywxOSBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+dmlmID0gY29uZi0+dmlmOwotCXByaXYtPml3X21vZGUgPSBjb25mLT50eXBlOworCXByaXYtPnZpZiA9IHZpZjsKKwlwcml2LT5pd19tb2RlID0gdmlmLT50eXBlOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKGNvbmYtPm1hY19hZGRyKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiU2V0ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwotCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJaWYgKHZpZi0+YWRkcikgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIlNldCAlcE1cbiIsIHZpZi0+YWRkcik7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAJfQogCi0JaWYgKGl3bF9zZXRfbW9kZShwcml2LCBjb25mLT50eXBlKSA9PSAtRUFHQUlOKQorCWlmIChpd2xfc2V0X21vZGUocHJpdiwgdmlmLT50eXBlKSA9PSAtRUFHQUlOKQogCQkvKiB3ZSBhcmUgbm90IHJlYWR5LCB3aWxsIHJ1biBhZ2FpbiB3aGVuIHJlYWR5ICovCiAJCXNldF9iaXQoU1RBVFVTX01PREVfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKQEAgLTI2MzEsNyArMjYyMSw3IEBACiBFWFBPUlRfU1lNQk9MKGl3bF9tYWNfYWRkX2ludGVyZmFjZSk7CiAKIHZvaWQgaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCkBAIC0yNjQ0LDcgKzI2MzQsNyBAQAogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdik7CiAJfQotCWlmIChwcml2LT52aWYgPT0gY29uZi0+dmlmKSB7CisJaWYgKHByaXYtPnZpZiA9PSB2aWYpIHsKIAkJcHJpdi0+dmlmID0gTlVMTDsKIAkJbWVtc2V0KHByaXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAJfQpAQCAtMjY4NCw2ICsyNjc0LDIxIEBACiAJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBzY2FubmluZ1xuIik7CiAJfQogCisJaWYgKGNoYW5nZWQgJiAoSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFMgfAorCQkgICAgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKSB7CisJCS8qIG1hYzgwMjExIHVzZXMgc3RhdGljIGZvciBub24tSFQgd2hpY2ggaXMgd2hhdCB3ZSB3YW50ICovCisJCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMgPSBjb25mLT5zbXBzX21vZGU7CisKKwkJLyoKKwkJICogUmVjYWxjdWxhdGUgY2hhaW4gY291bnRzLgorCQkgKgorCQkgKiBJZiBtb25pdG9yIG1vZGUgaXMgZW5hYmxlZCB0aGVuIG1hYzgwMjExIHdpbGwKKwkJICogc2V0IHVwIHRoZSBTTSBQUyBtb2RlIHRvIE9GRiBpZiBhbiBIVCBjaGFubmVsIGlzCisJCSAqIGNvbmZpZ3VyZWQuCisJCSAqLworCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQorCQkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYpOworCX0KIAogCS8qIGR1cmluZyBzY2FubmluZyBtYWM4MDIxMSB3aWxsIGRlbGF5IGNoYW5uZWwgc2V0dGluZyB1bnRpbAogCSAqIHNjYW4gZmluaXNoIHdpdGggY2hhbmdlZCA9IDAKQEAgLTI3ODAsMTAgKzI3ODUsNiBAQAogCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7CiAJfQogCi0JLyogY2FsbCB0byBlbnN1cmUgdGhhdCA0OTY1IHJ4X2NoYWluIGlzIHNldCBwcm9wZXJseSBpbiBtb25pdG9yIG1vZGUgKi8KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQotCQlwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4ocHJpdik7Ci0KIAlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJZ290byBvdXQ7CkBAIC0zMTkxLDYgKzMxOTIsNzcgQEAKIEVYUE9SVF9TWU1CT0woaXdsX3VwZGF0ZV9zdGF0cyk7CiAjZW5kaWYKIAorY29uc3Qgc3RhdGljIGNoYXIgKmdldF9jc3Jfc3RyaW5nKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwkJSVdMX0NNRChDU1JfSFdfSUZfQ09ORklHX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0lOVF9DT0FMRVNDSU5HKTsKKwkJSVdMX0NNRChDU1JfSU5UKTsKKwkJSVdMX0NNRChDU1JfSU5UX01BU0spOworCQlJV0xfQ01EKENTUl9GSF9JTlRfU1RBVFVTKTsKKwkJSVdMX0NNRChDU1JfR1BJT19JTik7CisJCUlXTF9DTUQoQ1NSX1JFU0VUKTsKKwkJSVdMX0NNRChDU1JfR1BfQ05UUkwpOworCQlJV0xfQ01EKENTUl9IV19SRVYpOworCQlJV0xfQ01EKENTUl9FRVBST01fUkVHKTsKKwkJSVdMX0NNRChDU1JfRUVQUk9NX0dQKTsKKwkJSVdMX0NNRChDU1JfT1RQX0dQX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0dJT19SRUcpOworCQlJV0xfQ01EKENTUl9HUF9VQ09ERV9SRUcpOworCQlJV0xfQ01EKENTUl9HUF9EUklWRVJfUkVHKTsKKwkJSVdMX0NNRChDU1JfVUNPREVfRFJWX0dQMSk7CisJCUlXTF9DTUQoQ1NSX1VDT0RFX0RSVl9HUDIpOworCQlJV0xfQ01EKENTUl9MRURfUkVHKTsKKwkJSVdMX0NNRChDU1JfRFJBTV9JTlRfVEJMX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0dJT19DSElDS0VOX0JJVFMpOworCQlJV0xfQ01EKENTUl9BTkFfUExMX0NGRyk7CisJCUlXTF9DTUQoQ1NSX0hXX1JFVl9XQV9SRUcpOworCQlJV0xfQ01EKENTUl9EQkdfSFBFVF9NRU1fUkVHKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCisJfQorfQorCit2b2lkIGl3bF9kdW1wX2NzcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJdTMyIGNzcl90YmxbXSA9IHsKKwkJQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCUNTUl9JTlRfQ09BTEVTQ0lORywKKwkJQ1NSX0lOVCwKKwkJQ1NSX0lOVF9NQVNLLAorCQlDU1JfRkhfSU5UX1NUQVRVUywKKwkJQ1NSX0dQSU9fSU4sCisJCUNTUl9SRVNFVCwKKwkJQ1NSX0dQX0NOVFJMLAorCQlDU1JfSFdfUkVWLAorCQlDU1JfRUVQUk9NX1JFRywKKwkJQ1NSX0VFUFJPTV9HUCwKKwkJQ1NSX09UUF9HUF9SRUcsCisJCUNTUl9HSU9fUkVHLAorCQlDU1JfR1BfVUNPREVfUkVHLAorCQlDU1JfR1BfRFJJVkVSX1JFRywKKwkJQ1NSX1VDT0RFX0RSVl9HUDEsCisJCUNTUl9VQ09ERV9EUlZfR1AyLAorCQlDU1JfTEVEX1JFRywKKwkJQ1NSX0RSQU1fSU5UX1RCTF9SRUcsCisJCUNTUl9HSU9fQ0hJQ0tFTl9CSVRTLAorCQlDU1JfQU5BX1BMTF9DRkcsCisJCUNTUl9IV19SRVZfV0FfUkVHLAorCQlDU1JfREJHX0hQRVRfTUVNX1JFRworCX07CisJSVdMX0VSUihwcml2LCAiQ1NSIHZhbHVlczpcbiIpOworCUlXTF9FUlIocHJpdiwgIigybmQgYnl0ZSBvZiBDU1JfSU5UX0NPQUxFU0NJTkcgaXMgIgorCQkiQ1NSX0lOVF9QRVJJT0RJQ19SRUcpXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgIEFSUkFZX1NJWkUoY3NyX3RibCk7IGkrKykgeworCQlJV0xfRVJSKHByaXYsICIgICUyNXM6IDBYJTA4eFxuIiwKKwkJCWdldF9jc3Jfc3RyaW5nKGNzcl90YmxbaV0pLAorCQkJaXdsX3JlYWQzMihwcml2LCBjc3JfdGJsW2ldKSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfZHVtcF9jc3IpOworCiAjaWZkZWYgQ09ORklHX1BNCiAKIGludCBpd2xfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCA2NzViN2RmLi4zZWY4NmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC02Myw3ICs2Myw3IEBACiAjaWZuZGVmIF9faXdsX2NvcmVfaF9fCiAjZGVmaW5lIF9faXdsX2NvcmVfaF9fCiAKLSNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKgogICogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKgpAQCAtMTY5LDggKzE2OSwxMCBAQAogCWludCAoKmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIpKHUzMiBhZGRyKTsKIAkvKiAxc3QgdWNvZGUgbG9hZCAqLwogCWludCAoKmxvYWRfdWNvZGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0Jdm9pZCAoKmR1bXBfbmljX2V2ZW50X2xvZykoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKTsKKwlpbnQgKCpkdW1wX25pY19ldmVudF9sb2cpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIGJvb2wgZnVsbF9sb2csIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiAJdm9pZCAoKmR1bXBfbmljX2Vycm9yX2xvZykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwl2b2lkICgqZHVtcF9jc3IpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJaW50ICgqc2V0X2NoYW5uZWxfc3dpdGNoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKIAkvKiBwb3dlciBtYW5hZ2VtZW50ICovCiAJc3RydWN0IGl3bF9hcG1fb3BzIGFwbV9vcHM7CkBAIC0yMzAsNyArMjMyLDYgQEAKICAqIEBjaGFpbl9ub2lzZV9udW1fYmVhY29uczogbnVtYmVyIG9mIGJlYWNvbnMgdXNlZCB0byBjb21wdXRlIGNoYWluIG5vaXNlCiAgKiBAYWR2X3RoZXJtYWxfdGhyb3R0bGU6IHN1cHBvcnQgYWR2YW5jZSB0aGVybWFsIHRocm90dGxlCiAgKiBAc3VwcG9ydF9jdF9raWxsX2V4aXQ6IHN1cHBvcnQgY3Qga2lsbCBleGl0IGNvbmRpdGlvbgotICogQHNtX3BzX21vZGU6IHNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2VyIHNhdmUgbW9kZQogICogQHN1cHBvcnRfd2ltYXhfY29leGlzdDogc3VwcG9ydCB3aW1heC93aWZpIGNvLWV4aXN0CiAgKgogICogV2UgZW5hYmxlIHRoZSBkcml2ZXIgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3cnQgQVBJIHZlcnNpb24uIFRoZQpAQCAtMjg3LDcgKzI4OCw2IEBACiAJY29uc3QgYm9vbCBzdXBwb3J0c19pZGxlOwogCWJvb2wgYWR2X3RoZXJtYWxfdGhyb3R0bGU7CiAJYm9vbCBzdXBwb3J0X2N0X2tpbGxfZXhpdDsKLQl1OCBzbV9wc19tb2RlOwogCWNvbnN0IGJvb2wgc3VwcG9ydF93aW1heF9jb2V4aXN0OwogfTsKIApAQCAtMzMyLDkgKzMzMiw5IEBACiBpbnQgaXdsX2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpOwogaW50IGl3bF9tYWNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIGludCBpd2xfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwogdm9pZCBpd2xfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC01ODEsNyArNTgxLDkgQEAKICogIEVycm9yIEhhbmRsaW5nIERlYnVnZ2luZwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci12b2lkIGl3bF9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKTsKK2ludCBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIGJvb2wgZnVsbF9sb2csIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7Cit2b2lkIGl3bF9kdW1wX2NzcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiB2b2lkIGl3bF9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKaW5kZXggZDYxMjkzYS4uNThlMDQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCkBAIC0xMDksNiArMTA5LDggQEAKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9wb3dlcl9zYXZlX3N0YXR1czsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9jbGVhcl91Y29kZV9zdGF0aXN0aWNzOwogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2NsZWFyX3RyYWZmaWNfc3RhdGlzdGljczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9jc3I7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfdWNvZGVfdHJhY2luZzsKIAl9IGRiZ2ZzX2RlYnVnX2ZpbGVzOwogCXUzMiBzcmFtX29mZnNldDsKIAl1MzIgc3JhbV9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKaW5kZXggMjFlMGY2Ni4uZWU1YWVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwpAQCAtNDIwLDYgKzQyMCwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19sb2dfZXZlbnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisJaW50IHBvcyA9IDA7CisJc3NpemVfdCByZXQgPSAtRU5PTUVNOworCisJcG9zID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIHRydWUsICZidWYsIHRydWUpOworCWlmIChwb3MgJiYgYnVmKSB7CisJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCQlrZnJlZShidWYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfbG9nX2V2ZW50X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtNDM2LDcgKzQ1Myw4IEBACiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZldmVudF9sb2dfZmxhZykgIT0gMSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKGV2ZW50X2xvZ19mbGFnID09IDEpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfbmljX2V2ZW50X2xvZyhwcml2LCB0cnVlKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIHRydWUsCisJCQkJCQkJTlVMTCwgZmFsc2UpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtODU5LDcgKzg3Nyw3IEBACiB9CiAKIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhzcmFtKTsKLURFQlVHRlNfV1JJVEVfRklMRV9PUFMobG9nX2V2ZW50KTsKK0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhsb2dfZXZlbnQpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKG52bSk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoc3RhdGlvbnMpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKGNoYW5uZWxzKTsKQEAgLTE4NDUsNiArMTg2Myw4MCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2Nzcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IGNzcjsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIlZCIsICZjc3IpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2Nzcihwcml2KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3RyYWNpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyIGJ1ZlsxMjhdOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAidWNvZGUgdHJhY2UgdGltZXIgaXMgJXNcbiIsCisJCQlwcml2LT5ldmVudF9sb2cudWNvZGVfdHJhY2UgPyAiT24iIDogIk9mZiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5vbl93cmFwc19jb3VudDpcdFx0ICV1XG4iLAorCQkJcHJpdi0+ZXZlbnRfbG9nLm5vbl93cmFwc19jb3VudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAid3JhcHNfb25jZV9jb3VudDpcdFx0ICV1XG4iLAorCQkJcHJpdi0+ZXZlbnRfbG9nLndyYXBzX29uY2VfY291bnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIndyYXBzX21vcmVfY291bnQ6XHRcdCAldVxuIiwKKwkJCXByaXYtPmV2ZW50X2xvZy53cmFwc19tb3JlX2NvdW50KTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV90cmFjaW5nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgdHJhY2U7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmdHJhY2UpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHRyYWNlKSB7CisJCXByaXYtPmV2ZW50X2xvZy51Y29kZV90cmFjZSA9IHRydWU7CisJCS8qIHNjaGVkdWxlIHRoZSB1Y29kZSB0aW1lciB0byBvY2N1ciBpbiBVQ09ERV9UUkFDRV9QRVJJT0QgKi8KKwkJbW9kX3RpbWVyKCZwcml2LT51Y29kZV90cmFjZSwKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFVDT0RFX1RSQUNFX1BFUklPRCkpOworCX0gZWxzZSB7CisJCXByaXYtPmV2ZW50X2xvZy51Y29kZV90cmFjZSA9IGZhbHNlOworCQlkZWxfdGltZXJfc3luYygmcHJpdi0+dWNvZGVfdHJhY2UpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHR4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHRyYWZmaWNfbG9nKTsKQEAgLTE4NTksNiArMTk1MSw4IEBACiBERUJVR0ZTX1JFQURfRklMRV9PUFMocG93ZXJfc2F2ZV9zdGF0dXMpOwogREVCVUdGU19XUklURV9GSUxFX09QUyhjbGVhcl91Y29kZV9zdGF0aXN0aWNzKTsKIERFQlVHRlNfV1JJVEVfRklMRV9PUFMoY2xlYXJfdHJhZmZpY19zdGF0aXN0aWNzKTsKK0RFQlVHRlNfV1JJVEVfRklMRV9PUFMoY3NyKTsKK0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyh1Y29kZV90cmFjaW5nKTsKIAogLyoKICAqIENyZWF0ZSB0aGUgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKQEAgLTE4ODksNyArMTk4Myw3IEBACiAJREVCVUdGU19BRERfRElSKGRlYnVnLCBkYmdmcy0+ZGlyX2Rydik7CiAJREVCVUdGU19BRERfRklMRShudm0sIGRhdGEsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUoc3JhbSwgZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUobG9nX2V2ZW50LCBkYXRhLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGxvZ19ldmVudCwgZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUoc3RhdGlvbnMsIGRhdGEsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUoY2hhbm5lbHMsIGRhdGEsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkYXRhLCBTX0lSVVNSKTsKQEAgLTE5MDksMTIgKzIwMDMsMTQgQEAKIAlERUJVR0ZTX0FERF9GSUxFKHBvd2VyX3NhdmVfc3RhdHVzLCBkZWJ1ZywgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShjbGVhcl91Y29kZV9zdGF0aXN0aWNzLCBkZWJ1ZywgU19JV1VTUik7CiAJREVCVUdGU19BRERfRklMRShjbGVhcl90cmFmZmljX3N0YXRpc3RpY3MsIGRlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGNzciwgZGVidWcsIFNfSVdVU1IpOwogCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgIT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpIHsKIAkJREVCVUdGU19BRERfRklMRSh1Y29kZV9yeF9zdGF0cywgZGVidWcsIFNfSVJVU1IpOwogCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3R4X3N0YXRzLCBkZWJ1ZywgU19JUlVTUik7CiAJCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfZ2VuZXJhbF9zdGF0cywgZGVidWcsIFNfSVJVU1IpOwogCQlERUJVR0ZTX0FERF9GSUxFKHNlbnNpdGl2aXR5LCBkZWJ1ZywgU19JUlVTUik7CiAJCURFQlVHRlNfQUREX0ZJTEUoY2hhaW5fbm9pc2UsIGRlYnVnLCBTX0lSVVNSKTsKKwkJREVCVUdGU19BRERfRklMRSh1Y29kZV90cmFjaW5nLCBkZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOwogCX0KIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIHJmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7CiAJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCByZiwKQEAgLTE5NjYsNiArMjA2Miw3IEBACiAJCQlmaWxlX2NsZWFyX3Vjb2RlX3N0YXRpc3RpY3MpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KIAkJCWZpbGVfY2xlYXJfdHJhZmZpY19zdGF0aXN0aWNzKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV9jc3IpOwogCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgIT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpIHsKIAkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgogCQkJZmlsZV91Y29kZV9yeF9zdGF0cyk7CkBAIC0xOTc3LDYgKzIwNzQsOCBAQAogCQkJZmlsZV9zZW5zaXRpdml0eSk7CiAJCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KIAkJCWZpbGVfY2hhaW5fbm9pc2UpOworCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCisJCQlmaWxlX3Vjb2RlX3RyYWNpbmcpOwogCX0KIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2RlYnVnKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfcmZfZmlsZXMuZmlsZV9kaXNhYmxlX3NlbnNpdGl2aXR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggMTY1ZDFmNi4uNDJmOWIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTUxMiw2ICs1MTIsNyBAQAogCWJvb2wgaXNfaHQ7CiAJYm9vbCBpc180MG1oejsKIAlib29sIHNpbmdsZV9jaGFpbl9zdWZmaWNpZW50OworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzOyAvKiBjdXJyZW50IHNtcHMgbW9kZSAqLwogCS8qIEJTUyByZWxhdGVkIGRhdGEgKi8KIAl1OCBleHRlbnNpb25fY2hhbl9vZmZzZXQ7CiAJdTggaHRfcHJvdGVjdGlvbjsKQEAgLTk4NCw2ICs5ODUsMzIgQEAKIAlfX2xlMTYgY2hhbm5lbDsKIH07CiAKKy8qCisgKiBzY2hlZHVsZSB0aGUgdGltZXIgdG8gd2FrZSB1cCBldmVyeSBVQ09ERV9UUkFDRV9QRVJJT0QgbWlsbGlzZWNvbmRzCisgKiB0byBwZXJmb3JtIGNvbnRpbnVvdXMgdUNvZGUgZXZlbnQgbG9nZ2luZyBvcGVyYXRpb24gaWYgZW5hYmxlZAorICovCisjZGVmaW5lIFVDT0RFX1RSQUNFX1BFUklPRCAoMTAwKQorCisvKgorICogaXdsX2V2ZW50X2xvZzogY3VycmVudCB1Q29kZSBldmVudCBsb2cgcG9zaXRpb24KKyAqCisgKiBAdWNvZGVfdHJhY2U6IGVuYWJsZS9kaXNhYmxlIHVjb2RlIGNvbnRpbnVvdXMgdHJhY2UgdGltZXIKKyAqIEBudW1fd3JhcHM6IGhvdyBtYW55IHRpbWVzIHRoZSBldmVudCBidWZmZXIgd3JhcHMKKyAqIEBuZXh0X2VudHJ5OiAgdGhlIGVudHJ5IGp1c3QgYmVmb3JlIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwKKyAqIEBub25fd3JhcHNfY291bnQ6IGNvdW50ZXIgZm9yIG5vIHdyYXAgZGV0ZWN0ZWQgd2hlbiBkdW1wIHVjb2RlIGV2ZW50cworICogQHdyYXBzX29uY2VfY291bnQ6IGNvdW50ZXIgZm9yIHdyYXAgb25jZSBkZXRlY3RlZCB3aGVuIGR1bXAgdWNvZGUgZXZlbnRzCisgKiBAd3JhcHNfbW9yZV9jb3VudDogY291bnRlciBmb3Igd3JhcCBtb3JlIHRoYW4gb25jZSBkZXRlY3RlZAorICoJCSAgICAgIHdoZW4gZHVtcCB1Y29kZSBldmVudHMKKyAqLworc3RydWN0IGl3bF9ldmVudF9sb2cgeworCWJvb2wgdWNvZGVfdHJhY2U7CisJdTMyIG51bV93cmFwczsKKwl1MzIgbmV4dF9lbnRyeTsKKwlpbnQgbm9uX3dyYXBzX2NvdW50OworCWludCB3cmFwc19vbmNlX2NvdW50OworCWludCB3cmFwc19tb3JlX2NvdW50OworfTsKKwogc3RydWN0IGl3bF9wcml2IHsKIAogCS8qIGllZWUgZGV2aWNlIHVzZWQgYnkgZ2VuZXJpYyBpZWVlIHByb2Nlc3NpbmcgY29kZSAqLwpAQCAtMTI2MSw2ICsxMjg4LDcgQEAKIAl1MzIgZGlzYWJsZV90eF9wb3dlcl9jYWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ1bl90aW1lX2NhbGliX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdGlzdGljc19wZXJpb2RpYzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB1Y29kZV90cmFjZTsKIAlib29sIGh3X3JlYWR5OwogCS8qRm9yIDM5NDUqLwogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9QT1dFUiAweDBGCkBAIC0xMjY4LDYgKzEyOTYsOCBAQAogCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljc18zOTsKIAogCXUzMiBzdGFfc3VwcF9yYXRlczsKKworCXN0cnVjdCBpd2xfZXZlbnRfbG9nIGV2ZW50X2xvZzsKIH07IC8qaXdsX3ByaXYgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGl3bF90eHFfY3R4X2FjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5jCmluZGV4IGU3ZDg4ZDEuLmJmNDYzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYwpAQCAtMTEsNCArMTEsNiBAQAogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3J4KTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChpd2x3aWZpX2Rldl91Y29kZV9ldmVudCk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woaXdsd2lmaV9kZXZfdWNvZGVfZXJyb3IpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3Vjb2RlX2NvbnRfZXZlbnQpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3Vjb2RlX3dyYXBfZXZlbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaAppbmRleCAyMTM2MTk2Li4wODE5Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmgKQEAgLTY1LDYgKzY1LDUwIEBACiApOwogCiAjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBpd2x3aWZpX3Vjb2RlCisKK1RSQUNFX0VWRU5UKGl3bHdpZmlfZGV2X3Vjb2RlX2NvbnRfZXZlbnQsCisJVFBfUFJPVE8oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgdGltZSwgdTMyIGRhdGEsIHUzMiBldiksCisJVFBfQVJHUyhwcml2LCB0aW1lLCBkYXRhLCBldiksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJUFJJVl9FTlRSWQorCisJCV9fZmllbGQodTMyLCB0aW1lKQorCQlfX2ZpZWxkKHUzMiwgZGF0YSkKKwkJX19maWVsZCh1MzIsIGV2KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCVBSSVZfQVNTSUdOOworCQlfX2VudHJ5LT50aW1lID0gdGltZTsKKwkJX19lbnRyeS0+ZGF0YSA9IGRhdGE7CisJCV9fZW50cnktPmV2ID0gZXY7CisJKSwKKwlUUF9wcmludGsoIlslcF0gRVZUX0xPR1Q6JTAxMHU6MHglMDh4OiUwNHUiLAorCQkgIF9fZW50cnktPnByaXYsIF9fZW50cnktPnRpbWUsIF9fZW50cnktPmRhdGEsIF9fZW50cnktPmV2KQorKTsKKworVFJBQ0VfRVZFTlQoaXdsd2lmaV9kZXZfdWNvZGVfd3JhcF9ldmVudCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiB3cmFwcywgdTMyIG5fZW50cnksIHUzMiBwX2VudHJ5KSwKKwlUUF9BUkdTKHByaXYsIHdyYXBzLCBuX2VudHJ5LCBwX2VudHJ5KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlQUklWX0VOVFJZCisKKwkJX19maWVsZCh1MzIsIHdyYXBzKQorCQlfX2ZpZWxkKHUzMiwgbl9lbnRyeSkKKwkJX19maWVsZCh1MzIsIHBfZW50cnkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJUFJJVl9BU1NJR047CisJCV9fZW50cnktPndyYXBzID0gd3JhcHM7CisJCV9fZW50cnktPm5fZW50cnkgPSBuX2VudHJ5OworCQlfX2VudHJ5LT5wX2VudHJ5ID0gcF9lbnRyeTsKKwkpLAorCVRQX3ByaW50aygiWyVwXSB3cmFwcz0jJTAyZCBuPTB4JVggcD0weCVYIiwKKwkJICBfX2VudHJ5LT5wcml2LCBfX2VudHJ5LT53cmFwcywgX19lbnRyeS0+bl9lbnRyeSwKKwkJICBfX2VudHJ5LT5wX2VudHJ5KQorKTsKKworI3VuZGVmIFRSQUNFX1NZU1RFTQogI2RlZmluZSBUUkFDRV9TWVNURU0gaXdsd2lmaQogCiBUUkFDRV9FVkVOVChpd2x3aWZpX2Rldl9oY21kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggZjhlNGU0Yi4uMTBiMGFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC0xNTE4LDggKzE1MTgsOSBAQAogICogaXdsMzk0NV9wcmludF9ldmVudF9sb2cgLSBEdW1wIGVycm9yIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKLQkJCQl1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUpCitzdGF0aWMgaW50IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKKwkJCQkgIHUzMiBudW1fZXZlbnRzLCB1MzIgbW9kZSwKKwkJCQkgIGludCBwb3MsIGNoYXIgKipidWYsIHNpemVfdCBidWZzeikKIHsKIAl1MzIgaTsKIAl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLwpAQCAtMTUyOSw3ICsxNTMwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKIAogCWlmIChudW1fZXZlbnRzID09IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIHBvczsKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCkBAIC0xNTU1LDI2ICsxNTU2LDQzIEBACiAJCXRpbWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKG1vZGUgPT0gMCkgewogCQkJLyogZGF0YSwgZXYgKi8KLQkJCUlXTF9FUlIocHJpdiwgIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOwotCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgMCwgdGltZSwgZXYpOworCQkJaWYgKGJ1ZnN6KSB7CisJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIweCUwOHg6JTA0dVxuIiwKKwkJCQkJCXRpbWUsIGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJSVdMX0VSUihwcml2LCAiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7CisJCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgMCwKKwkJCQkJCQkgICAgICB0aW1lLCBldik7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlkYXRhID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci0JCQlJV0xfRVJSKHByaXYsICIlMDEwdVx0MHglMDh4XHQlMDR1XG4iLCB0aW1lLCBkYXRhLCBldik7Ci0JCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9ldmVudChwcml2LCB0aW1lLCBkYXRhLCBldik7CisJCQlpZiAoYnVmc3opIHsKKwkJCQlwb3MgKz0gc2NucHJpbnRmKCpidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCQkJIiUwMTB1OjB4JTA4eDolMDR1XG4iLAorCQkJCQkJIHRpbWUsIGRhdGEsIGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJSVdMX0VSUihwcml2LCAiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwKKwkJCQkJdGltZSwgZGF0YSwgZXYpOworCQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIHRpbWUsCisJCQkJCQkJICAgICAgZGF0YSwgZXYpOworCQkJfQogCQl9CiAJfQogCiAJLyogQWxsb3cgZGV2aWNlIHRvIHBvd2VyIGRvd24gKi8KIAlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCXJldHVybiBwb3M7CiB9CiAKIC8qKgogICogaXdsMzk0NV9wcmludF9sYXN0X2V2ZW50X2xvZ3MgLSBEdW1wIHRoZSBuZXdlc3QgIyBvZiBldmVudCBsb2cgdG8gc3lzbG9nCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGNhcGFjaXR5LAorc3RhdGljIGludCBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjYXBhY2l0eSwKIAkJCQkgICAgICB1MzIgbnVtX3dyYXBzLCB1MzIgbmV4dF9lbnRyeSwKLQkJCQkgICAgICB1MzIgc2l6ZSwgdTMyIG1vZGUpCisJCQkJICAgICAgdTMyIHNpemUsIHUzMiBtb2RlLAorCQkJCSAgICAgIGludCBwb3MsIGNoYXIgKipidWYsIHNpemVfdCBidWZzeikKIHsKIAkvKgogCSAqIGRpc3BsYXkgdGhlIG5ld2VzdCBERUZBVUxUX0xPR19FTlRSSUVTIGVudHJpZXMKQEAgLTE1ODIsMjEgKzE2MDAsMjggQEAKIAkgKi8KIAlpZiAobnVtX3dyYXBzKSB7CiAJCWlmIChuZXh0X2VudHJ5IDwgc2l6ZSkgewotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwKLQkJCQkJY2FwYWNpdHkgLSAoc2l6ZSAtIG5leHRfZW50cnkpLAotCQkJCQlzaXplIC0gbmV4dF9lbnRyeSwgbW9kZSk7Ci0JCQlpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLAotCQkJCSAgICBuZXh0X2VudHJ5LCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsCisJCQkJCSAgICAgY2FwYWNpdHkgLSAoc2l6ZSAtIG5leHRfZW50cnkpLAorCQkJCQkgICAgIHNpemUgLSBuZXh0X2VudHJ5LCBtb2RlLAorCQkJCQkgICAgIHBvcywgYnVmLCBidWZzeik7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLAorCQkJCQkJICAgICAgbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJCX0gZWxzZQotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSAtIHNpemUsCi0JCQkJICAgIHNpemUsIG1vZGUpOworCQkJcG9zID0gaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSAtIHNpemUsCisJCQkJCQkgICAgICBzaXplLCBtb2RlLAorCQkJCQkJICAgICAgcG9zLCBidWYsIGJ1ZnN6KTsKIAl9IGVsc2UgewogCQlpZiAobmV4dF9lbnRyeSA8IHNpemUpCi0JCQlpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsCisJCQkJCQkgICAgICBuZXh0X2VudHJ5LCBtb2RlLAorCQkJCQkJICAgICAgcG9zLCBidWYsIGJ1ZnN6KTsKIAkJZWxzZQotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSAtIHNpemUsCi0JCQkJCSAgICBzaXplLCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICAgICAgc2l6ZSwgbW9kZSwKKwkJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJfQorCXJldHVybiBwb3M7CiB9CiAKIC8qIEZvciBzYW5pdHkgY2hlY2sgb25seS4gIEFjdHVhbCBzaXplIGlzIGRldGVybWluZWQgYnkgdUNvZGUsIHR5cC4gNTEyICovCkBAIC0xNjA0LDcgKzE2MjksOCBAQAogCiAjZGVmaW5lIERFRkFVTFRfSVdMMzk0NV9EVU1QX0VWRU5UX0xPR19FTlRSSUVTICgyMCkKIAotdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2cpCitpbnQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nLAorCQkJICAgIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSkKIHsKIAl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLwogCXUzMiBjYXBhY2l0eTsgICAvKiBldmVudCBsb2cgY2FwYWNpdHkgaW4gIyBlbnRyaWVzICovCkBAIC0xNjEyLDExICsxNjM4LDEzIEBACiAJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCiAJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLwogCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCWludCBwb3MgPSAwOworCXNpemVfdCBidWZzeiA9IDA7CiAKIAliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAlpZiAoIWl3bDM5NDVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewogCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHBvczsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCkBAIC0xNjQyLDcgKzE2NzAsNyBAQAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewogCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gcG9zOwogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC0xNjU4LDI1ICsxNjg2LDM4IEBACiAJCSAgc2l6ZSk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChkaXNwbGF5KSB7CisJCWlmIChmdWxsX2xvZykKKwkJCWJ1ZnN6ID0gY2FwYWNpdHkgKiA0ODsKKwkJZWxzZQorCQkJYnVmc3ogPSBzaXplICogNDg7CisJCSpidWYgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqYnVmKQorCQkJcmV0dXJuIHBvczsKKwl9CiAJaWYgKChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgfHwgZnVsbF9sb2cpIHsKIAkJLyogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLAogCQkgKiBzdGFydCBhdCB0aGUgb2xkZXN0IGVudHJ5LAogCQkgKiBpLmUgdGhlIG5leHQgb25lIHRoYXQgdUNvZGUgd291bGQgZmlsbC4KIAkJICovCiAJCWlmIChudW1fd3JhcHMpCi0JCQlpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAotCQkJCSAgICBjYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOworCQkJcG9zID0gaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSwKKwkJCQkJCWNhcGFjaXR5IC0gbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJCXBvcywgYnVmLCBidWZzeik7CiAKIAkJLyogKHRoZW4vZWxzZSkgc3RhcnQgYXQgdG9wIG9mIGxvZyAqLwotCQlpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LCBtb2RlKTsKKwkJcG9zID0gaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJICAgICAgcG9zLCBidWYsIGJ1ZnN6KTsKIAl9IGVsc2UKLQkJaXdsMzk0NV9wcmludF9sYXN0X2V2ZW50X2xvZ3MocHJpdiwgY2FwYWNpdHksIG51bV93cmFwcywKLQkJCQkJbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSk7CisJCXBvcyA9IGl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCisJCQkJCQkgICAgbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSwKKwkJCQkJCSAgICBwb3MsIGJ1ZiwgYnVmc3opOwogI2Vsc2UKLQlpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAotCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUpOworCXBvcyA9IGl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCisJCQkJCSAgICBuZXh0X2VudHJ5LCBzaXplLCBtb2RlLAorCQkJCQkgICAgcG9zLCBidWYsIGJ1ZnN6KTsKICNlbmRpZgotCisJcmV0dXJuIHBvczsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9pcnFfdGFza2xldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IDZkNmVkNzQuLmQzMmFkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC04NjgsMzYgKzg2OCwzNSBAQAogCXN0cnVjdCBpd21fdW1hY19ub3RpZl9tZ3RfZnJhbWUgKm1ndF9mcmFtZSA9CiAJCQkoc3RydWN0IGl3bV91bWFjX25vdGlmX21ndF9mcmFtZSAqKWJ1ZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1ndCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKiltZ3RfZnJhbWUtPmZyYW1lOwotCXU4ICppZTsKIAogCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBNTE1FLCAiTUdUOiAiLCBtZ3RfZnJhbWUtPmZyYW1lLAogCQkgICAgbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pKTsKIAogCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWUgPSBtZ3QtPnUuYXNzb2NfcmVxLnZhcmlhYmxlOzsKLQkJaXdtLT5yZXFfaWVfbGVuID0KLQkJCQlsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikgLSAoaWUgLSAodTggKiltZ3QpOworCQlpd20tPnJlcV9pZV9sZW4gPSBsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikKKwkJCQkgIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgIHUuYXNzb2NfcmVxLnZhcmlhYmxlKTsKIAkJa2ZyZWUoaXdtLT5yZXFfaWUpOwogCQlpd20tPnJlcV9pZSA9IGttZW1kdXAobWd0LT51LmFzc29jX3JlcS52YXJpYWJsZSwKIAkJCQkgICAgICBpd20tPnJlcV9pZV9sZW4sIEdGUF9LRVJORUwpOwogCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWUgPSBtZ3QtPnUucmVhc3NvY19yZXEudmFyaWFibGU7OwotCQlpd20tPnJlcV9pZV9sZW4gPQotCQkJCWxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7CisJCWl3bS0+cmVxX2llX2xlbiA9IGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKQorCQkJCSAgLSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCisJCQkJCSAgICAgdS5yZWFzc29jX3JlcS52YXJpYWJsZSk7CiAJCWtmcmVlKGl3bS0+cmVxX2llKTsKIAkJaXdtLT5yZXFfaWUgPSBrbWVtZHVwKG1ndC0+dS5yZWFzc29jX3JlcS52YXJpYWJsZSwKIAkJCQkgICAgICBpd20tPnJlcV9pZV9sZW4sIEdGUF9LRVJORUwpOwogCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3AobWd0LT5mcmFtZV9jb250cm9sKSkgewotCQlpZSA9IG1ndC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOzsKLQkJaXdtLT5yZXNwX2llX2xlbiA9Ci0JCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJaXdtLT5yZXNwX2llX2xlbiA9IGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKQorCQkJCSAgIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgICB1LmFzc29jX3Jlc3AudmFyaWFibGUpOwogCQlrZnJlZShpd20tPnJlc3BfaWUpOwogCQlpd20tPnJlc3BfaWUgPSBrbWVtZHVwKG1ndC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlLAogCQkJCSAgICAgICBpd20tPnJlc3BfaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3AobWd0LT5mcmFtZV9jb250cm9sKSkgewotCQlpZSA9IG1ndC0+dS5yZWFzc29jX3Jlc3AudmFyaWFibGU7OwotCQlpd20tPnJlc3BfaWVfbGVuID0KLQkJCQlsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikgLSAoaWUgLSAodTggKiltZ3QpOworCQlpd20tPnJlc3BfaWVfbGVuID0gbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pCisJCQkJICAgLSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCisJCQkJCSAgICAgIHUucmVhc3NvY19yZXNwLnZhcmlhYmxlKTsKIAkJa2ZyZWUoaXdtLT5yZXNwX2llKTsKIAkJaXdtLT5yZXNwX2llID0ga21lbWR1cChtZ3QtPnUucmVhc3NvY19yZXNwLnZhcmlhYmxlLAogCQkJCSAgICAgICBpd20tPnJlc3BfaWVfbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTE1MzQsNiArMTUzMywzMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaXdtX3J4X3Byb2Nlc3NfYW1zZHUoc3RydWN0IGl3bV9wcml2ICppd20sIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGl3bV90b193ZGV2KGl3bSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBpd21fdG9fbmRldihpd20pOworCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZnJhbWU7CisKKwlJV01fSEVYRFVNUChpd20sIERCRywgUlgsICJBLU1TRFU6ICIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJX19za2JfcXVldWVfaGVhZF9pbml0KCZsaXN0KTsKKwlpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc2tiLCAmbGlzdCwgbmRldi0+ZGV2X2FkZHIsIHdkZXYtPmlmdHlwZSwgMCk7CisKKwl3aGlsZSAoKGZyYW1lID0gX19za2JfZGVxdWV1ZSgmbGlzdCkpKSB7CisJCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gZnJhbWUtPmxlbjsKKworCQlmcmFtZS0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhmcmFtZSwgbmRldik7CisJCWZyYW1lLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQltZW1zZXQoZnJhbWUtPmNiLCAwLCBzaXplb2YoZnJhbWUtPmNiKSk7CisKKwkJaWYgKG5ldGlmX3J4X25pKGZyYW1lKSA9PSBORVRfUlhfRFJPUCkgeworCQkJSVdNX0VSUihpd20sICJQYWNrZXQgZHJvcHBlZFxuIik7CisJCQluZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIGl3bV9yeF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwKIAkJCQkgIHN0cnVjdCBpd21fcnhfcGFja2V0ICpwYWNrZXQsCiAJCQkJICBzdHJ1Y3QgaXdtX3J4X3RpY2tldF9ub2RlICp0aWNrZXRfbm9kZSkKQEAgLTE1NDgsMjUgKzE1NzQsMzQgQEAKIAlzd2l0Y2ggKGxlMTZfdG9fY3B1KHRpY2tldF9ub2RlLT50aWNrZXQtPmFjdGlvbikpIHsKIAljYXNlIElXTV9SWF9USUNLRVRfUkVMRUFTRToKIAkJSVdNX0RCR19SWChpd20sIERCRywgIlJFTEVBU0UgcGFja2V0XG4iKTsKLQkJY2xhc3NpZnk4MDIzKHNrYik7CisKIAkJaXdtX3J4X2FkanVzdF9wYWNrZXQoaXdtLCBwYWNrZXQsIHRpY2tldF9ub2RlKTsKKwkJc2tiLT5kZXYgPSBpd21fdG9fbmRldihpd20pOworCQljbGFzc2lmeTgwMjMoc2tiKTsKKworCQlpZiAobGUxNl90b19jcHUodGlja2V0X25vZGUtPnRpY2tldC0+ZmxhZ3MpICYKKwkJICAgIElXTV9SWF9USUNLRVRfQU1TRFVfTVNLKSB7CisJCQlpd21fcnhfcHJvY2Vzc19hbXNkdShpd20sIHNrYik7CisJCQlicmVhazsKKwkJfQorCiAJCXJldCA9IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc2tiLCBuZGV2LT5kZXZfYWRkciwgd2Rldi0+aWZ0eXBlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJDb3VsZG4ndCBjb252ZXJ0IDgwMi4xMSBoZWFkZXIgLSAiCiAJCQkJICAgIiVkXG4iLCByZXQpOworCQkJa2ZyZWVfc2tiKHBhY2tldC0+c2tiKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJSVdNX0hFWERVTVAoaXdtLCBEQkcsIFJYLCAiODAyLjM6ICIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXNrYi0+ZGV2ID0gaXdtX3RvX25kZXYoaXdtKTsKKwkJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAotCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCiAJCWlmIChuZXRpZl9yeF9uaShza2IpID09IE5FVF9SWF9EUk9QKSB7CiAJCQlJV01fRVJSKGl3bSwgIlBhY2tldCBkcm9wcGVkXG4iKTsKIAkJCW5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9LY29uZmlnCmluZGV4IDMwYWE5ZDQuLjA0ODVjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvS2NvbmZpZwpAQCAtMzcsMyArMzcsOSBAQAogCWRlcGVuZHMgb24gTElCRVJUQVMKIAktLS1oZWxwLS0tCiAJICBEZWJ1Z2dpbmcgc3VwcG9ydC4KKworY29uZmlnIExJQkVSVEFTX01FU0gKKwlib29sICJFbmFibGUgbWVzaCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTElCRVJUQVMKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgTGliZXJ0YXMnIE1FU0ggc3VwcG9ydCwgdXNlZCBieSBlLmcuIHRoZSBPTFBDIHBlb3BsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKaW5kZXggYjE4OGNkOS4uNDVlODcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvTWFrZWZpbGUKQEAgLTUsMTEgKzUsMTEgQEAKIGxpYmVydGFzLXkgKz0gZGVidWdmcy5vCiBsaWJlcnRhcy15ICs9IGV0aHRvb2wubwogbGliZXJ0YXMteSArPSBtYWluLm8KLWxpYmVydGFzLXkgKz0gbWVzaC5vCiBsaWJlcnRhcy15ICs9IHJ4Lm8KIGxpYmVydGFzLXkgKz0gc2Nhbi5vCiBsaWJlcnRhcy15ICs9IHR4Lm8KIGxpYmVydGFzLXkgKz0gd2V4dC5vCitsaWJlcnRhcy0kKENPTkZJR19MSUJFUlRBU19NRVNIKSArPSBtZXNoLm8KIAogdXNiOHh4eC1vYmpzICs9IGlmX3VzYi5vCiBsaWJlcnRhc19jcy1vYmpzICs9IGlmX2NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCmluZGV4IDc1MTA2NzMuLjVlNjUwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYwpAQCAtMzkwLDEwICszOTAsOCBAQAogCWNtZC5lbmFibGVod2F1dG8gPSBjcHVfdG9fbGUxNihwcml2LT5lbmFibGVod2F1dG8pOwogCWNtZC5iaXRtYXAgPSBsYnNfcmF0ZV90b19md19iaXRtYXAocHJpdi0+Y3VyX3JhdGUsIHByaXYtPmVuYWJsZWh3YXV0byk7CiAJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfUkFURV9BREFQVF9SQVRFU0VULCAmY21kKTsKLQlpZiAoIXJldCAmJiBjbWRfYWN0aW9uID09IENNRF9BQ1RfR0VUKSB7Ci0JCXByaXYtPnJhdGViaXRtYXAgPSBsZTE2X3RvX2NwdShjbWQuYml0bWFwKTsKKwlpZiAoIXJldCAmJiBjbWRfYWN0aW9uID09IENNRF9BQ1RfR0VUKQogCQlwcml2LT5lbmFibGVod2F1dG8gPSBsZTE2X3RvX2NwdShjbWQuZW5hYmxlaHdhdXRvKTsKLQl9CiAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC04MDcsOCArODA1LDcgQEAKIAl9CiAKIAkvKiBVc2Ugc2hvcnQgcHJlYW1ibGUgb25seSB3aGVuIGJvdGggdGhlIEJTUyBhbmQgZmlybXdhcmUgc3VwcG9ydCBpdCAqLwotCWlmICgocHJpdi0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgJiYKLQkgICAgKGFzc29jX3JlcS0+YnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKQorCWlmIChhc3NvY19yZXEtPmJzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKQogCQlwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwogCiAJcmV0ID0gbGJzX3NldF9yYWRpbyhwcml2LCBwcmVhbWJsZSwgMSk7CkBAIC05MzksOCArOTM2LDcgQEAKIAl9CiAKIAkvKiBVc2Ugc2hvcnQgcHJlYW1ibGUgb25seSB3aGVuIGJvdGggdGhlIEJTUyBhbmQgZmlybXdhcmUgc3VwcG9ydCBpdCAqLwotCWlmICgocHJpdi0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgJiYKLQkgICAgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkpIHsKKwlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSB7CiAJCWxic19kZWJfam9pbigiQWRob2NKb2luOiBTaG9ydCBwcmVhbWJsZVxuIik7CiAJCXByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfU0hPUlQ7CiAJfQpAQCAtMTA0OSw3ICsxMDQ1LDcgQEAKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2NfcmVxKQogewogCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCBjbWQ7Ci0JdTggcHJlYW1ibGUgPSBSQURJT19QUkVBTUJMRV9MT05HOworCXU4IHByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfU0hPUlQ7CiAJc2l6ZV90IHJhdGVzaXplID0gMDsKIAl1MTYgdG1wY2FwID0gMDsKIAlpbnQgcmV0ID0gMDsKQEAgLTEwNTcsMTEgKzEwNTMsNiBAQAogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKIAotCWlmIChwcml2LT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSB7Ci0JCWxic19kZWJfam9pbigiQURIT0NfU1RBUlQ6IFdpbGwgdXNlIHNob3J0IHByZWFtYmxlXG4iKTsKLQkJcHJlYW1ibGUgPSBSQURJT19QUkVBTUJMRV9TSE9SVDsKLQl9Ci0KIAlyZXQgPSBsYnNfc2V0X3JhZGlvKHByaXYsIHByZWFtYmxlLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggYjliMzcxYi4uODIzNzFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTE0MywxOSArMTQzLDYgQEAKIAlsYnNfZGViX2NtZCgiR0VUX0hXX1NQRUM6IGhhcmR3YXJlIGludGVyZmFjZSAweCV4LCBoYXJkd2FyZSBzcGVjIDB4JTA0eFxuIiwKIAkJICAgIGNtZC5od2lmdmVyc2lvbiwgY21kLnZlcnNpb24pOwogCi0JLyogRGV0ZXJtaW5lIG1lc2hfZndfdmVyIGZyb20gZndyZWxlYXNlIGFuZCBmd2NhcGluZm8gKi8KLQkvKiA1LjAuMTZwMCA5LjAuMC5wMCBpcyBrbm93biB0byBOT1Qgc3VwcG9ydCBhbnkgbWVzaCAqLwotCS8qIDUuMTEwLjIyIGhhdmUgbWVzaCBjb21tYW5kIHdpdGggMHhhMyBjb21tYW5kIGlkICovCi0JLyogMTAuMC4wLnAwIEZXIGJyaW5ncyBpbiBtZXNoIGNvbmZpZyBjb21tYW5kIHdpdGggZGlmZmVyZW50IGlkICovCi0JLyogQ2hlY2sgRlcgdmVyc2lvbiBNU0IgYW5kIGluaXRpYWxpemUgbWVzaF9md192ZXIgKi8KLQlpZiAoTVJWTF9GV19NQUpPUl9SRVYocHJpdi0+ZndyZWxlYXNlKSA9PSBNUlZMX0ZXX1Y1KQotCQlwcml2LT5tZXNoX2Z3X3ZlciA9IE1FU0hfRldfT0xEOwotCWVsc2UgaWYgKChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpID49IE1SVkxfRldfVjEwKSAmJgotCQkocHJpdi0+ZndjYXBpbmZvICYgTUVTSF9DQVBJTkZPX0VOQUJMRV9NQVNLKSkKLQkJcHJpdi0+bWVzaF9md192ZXIgPSBNRVNIX0ZXX05FVzsKLQllbHNlCi0JCXByaXYtPm1lc2hfZndfdmVyID0gTUVTSF9OT05FOwotCiAJLyogQ2xhbXAgcmVnaW9uIGNvZGUgdG8gOC1iaXQgc2luY2UgRlcgc3BlYyBpbmRpY2F0ZXMgdGhhdCBpdCBzaG91bGQKIAkgKiBvbmx5IGV2ZXIgYmUgOC1iaXQsIGV2ZW4gdGhvdWdoIHRoZSBmaWVsZCBzaXplIGlzIDE2LWJpdC4gIFNvbWUgZmlybXdhcmUKIAkgKiByZXR1cm5zIG5vbi16ZXJvIGhpZ2ggOCBiaXRzIGhlcmUuCkBAIC04NTUsOSArODQyLDYgQEAKIAlpZiAocHJpdi0+ZndyZWxlYXNlIDwgMHgwOTAwMDAwMCkgewogCQlzd2l0Y2ggKHByZWFtYmxlKSB7CiAJCWNhc2UgUkFESU9fUFJFQU1CTEVfU0hPUlQ6Ci0JCQlpZiAoIShwcml2LT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSkKLQkJCQlnb3RvIG91dDsKLQkJCS8qIEZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFJBRElPX1BSRUFNQkxFX0FVVE86CiAJCWNhc2UgUkFESU9fUFJFQU1CTEVfTE9ORzoKIAkJCWNtZC5jb250cm9sID0gY3B1X3RvX2xlMTYocHJlYW1ibGUpOwpAQCAtMTAxMSw2ICs5OTUsOCBAQAogCQlyZXQgPSAwOwogCQlicmVhazsKIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICisKIAljYXNlIENNRF9CVF9BQ0NFU1M6CiAJCXJldCA9IGxic19jbWRfYnRfYWNjZXNzKGNtZHB0ciwgY21kX2FjdGlvbiwgcGRhdGFfYnVmKTsKIAkJYnJlYWs7CkBAIC0xMDE5LDYgKzEwMDUsOCBAQAogCQlyZXQgPSBsYnNfY21kX2Z3dF9hY2Nlc3MoY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKIAorI2VuZGlmCisKIAljYXNlIENNRF84MDJfMTFfQkVBQ09OX0NUUkw6CiAJCXJldCA9IGxic19jbWRfYmNuX2N0cmwocHJpdiwgY21kcHRyLCBjbWRfYWN0aW9uKTsKIAkJYnJlYWs7CkBAIC0xMzE3LDcgKzEzMDUsNyBAQAogCQlpZiAoKHByaXYtPnBzbW9kZSAhPSBMQlM4MDJfMTFQT1dFUk1PREVDQU0pICYmCiAJCSAgICAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9GVUxMX1BPV0VSKSAmJgogCQkgICAgKChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB8fAotCQkgICAgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkpKSB7CisJCSAgICBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpKSB7CiAJCQlpZiAocHJpdi0+c2VjaW5mby5XUEFlbmFibGVkIHx8CiAJCQkgICAgcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewogCQkJCS8qIGNoZWNrIGZvciB2YWxpZCBXUEEgZ3JvdXAga2V5cyAqLwpAQCAtMTM2NSw3ICsxMzUzLDcgQEAKIAlwcml2LT5kbmxkX3NlbnQgPSBETkxEX1JFU19SRUNFSVZFRDsKIAogCS8qIElmIG5vdGhpbmcgdG8gZG8sIGdvIGJhY2sgdG8gc2xlZXAgKD8pICovCi0JaWYgKCFfX2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSAmJiAhcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKQorCWlmICgha2ZpZm9fbGVuKCZwcml2LT5ldmVudF9maWZvKSAmJiAhcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKQogCQlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfU0xFRVA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwpAQCAtMTQzOSw3ICsxNDI3LDcgQEAKIAl9CiAKIAkvKiBQZW5kaW5nIGV2ZW50cyBvciBjb21tYW5kIHJlc3BvbnNlcz8gKi8KLQlpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykgfHwgcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKSB7CisJaWYgKGtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykgfHwgcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKSB7CiAJCWFsbG93ZWQgPSAwOwogCQlsYnNfZGViX2hvc3QoInBlbmRpbmcgZXZlbnRzIG9yIGNvbW1hbmQgcmVzcG9uc2VzXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCmluZGV4IDI4NjI3NDguLmNiNDEzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCkBAIC0xMTAsMTggKzExMCw2IEBACiBpbnQgbGJzX2dldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiAqb3V0X3ZhbCk7CiAKIAotLyogTWVzaCByZWxhdGVkICovCi0KLWludCBsYnNfbWVzaF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLAotCQkgICAgc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyAqY21kKTsKLQotaW50IGxic19tZXNoX2NvbmZpZ19zZW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSBzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnICpjbWQsCi0JCQkgdWludDE2X3QgYWN0aW9uLCB1aW50MTZfdCB0eXBlKTsKLQotaW50IGxic19tZXNoX2NvbmZpZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGVuYWJsZSwgdWludDE2X3QgY2hhbik7Ci0KLQogLyogQ29tbWFuZHMgb25seSB1c2VkIGluIHdleHQuYywgYXNzb2MuIGFuZCBzY2FuLmMgKi8KIAogaW50IGxic19zZXRfcG93ZXJfYWRhcHRfY2ZnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSwgaW50OF90IHAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCmluZGV4IDIxZDU3NjkuLjAzMzRhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKQEAgLTQ4NSwyMCArNDg1LDggQEAKIAkJYnJlYWs7CiAKIAljYXNlIE1BQ1JFR19JTlRfQ09ERV9NRVNIX0FVVE9fU1RBUlRFRDoKLQkJLyogSWdub3JlIHNwdXJpb3VzIGF1dG9zdGFydCBldmVudHMgaWYgYXV0b3N0YXJ0IGlzIGRpc2FibGVkICovCi0JCWlmICghcHJpdi0+bWVzaF9hdXRvc3RhcnRfZW5hYmxlZCkgewotCQkJbGJzX3ByX2luZm8oIkVWRU5UOiBNRVNIX0FVVE9fU1RBUlRFRCAoaWdub3JpbmcpXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWxic19wcl9pbmZvKCJFVkVOVDogTUVTSF9BVVRPX1NUQVJURURcbiIpOwotCQlwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID0gTEJTX0NPTk5FQ1RFRDsKLQkJaWYgKHByaXYtPm1lc2hfb3BlbikgewotCQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5tZXNoX2Rldik7Ci0JCQlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQotCQkJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bWVzaF9kZXYpOwotCQl9Ci0JCXByaXYtPm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQlzY2hlZHVsZV93b3JrKCZwcml2LT5zeW5jX2NoYW5uZWwpOworCQkvKiBJZ25vcmUgc3B1cmlvdXMgYXV0b3N0YXJ0IGV2ZW50cyAqLworCQlsYnNfcHJfaW5mbygiRVZFTlQ6IE1FU0hfQVVUT19TVEFSVEVEIChpZ25vcmluZylcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggNmI2ZWE5Zi4uZWEzZjEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtMzk3LDEzICszOTcsNiBAQAogCUtFWV9JTkZPX1dQQV9FTkFCTEVEID0gMHgwNAogfTsKIAotLyoqIG1lc2hfZndfdmVyICovCi1lbnVtIF9tZXNoX2Z3X3ZlciB7Ci0JTUVTSF9OT05FID0gMCwgLyogTUVTSCBpcyBub3Qgc3VwcG9ydGVkICovCi0JTUVTSF9GV19PTEQsICAgLyogTUVTSCBpcyBzdXBwb3J0ZWQgaW4gRlcgVjUgKi8KLQlNRVNIX0ZXX05FVywgICAvKiBNRVNIIGlzIHN1cHBvcnRlZCBpbiBGVyBWMTAgYW5kIG5ld2VyICovCi19OwotCiAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgZnd0IGNvbW1hbmRzLiAqLwogI2RlZmluZSBGV1RfREVGQVVMVF9NRVRSSUMgMAogI2RlZmluZSBGV1RfREVGQVVMVF9ESVIgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAppbmRleCA2YThkMmIyLi5jMzQ4YWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgInNjYW4uaCIKICNpbmNsdWRlICJhc3NvYy5oIgogCi0KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAvKiogc2xlZXBfcGFyYW1zICovCiBzdHJ1Y3Qgc2xlZXBfcGFyYW1zIHsKQEAgLTM5LDE1ICszOSwxNCBAQAogCiAJLyogTWVzaCAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2RldjsgLyogVmlydHVhbCBkZXZpY2UgKi8KKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogCXUzMiBtZXNoX2Nvbm5lY3Rfc3RhdHVzOwogCXN0cnVjdCBsYnNfbWVzaF9zdGF0cyBtc3RhdHM7CiAJaW50IG1lc2hfb3BlbjsKLQlpbnQgbWVzaF9md192ZXI7Ci0JaW50IG1lc2hfYXV0b3N0YXJ0X2VuYWJsZWQ7CiAJdWludDE2X3QgbWVzaF90bHY7CiAJdTggbWVzaF9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU4gKyAxXTsKIAl1OCBtZXNoX3NzaWRfbGVuOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzeW5jX2NoYW5uZWw7CisjZW5kaWYKIAogCS8qIE1vbml0b3IgbW9kZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpydGFwX25ldF9kZXY7CkBAIC0xMjAsNyArMTE5LDcgQEAKIAl1MzIgcmVzcF9sZW5bMl07CiAKIAkvKiBFdmVudHMgc2VudCBmcm9tIGhhcmR3YXJlIHRvIGRyaXZlciAqLwotCXN0cnVjdCBrZmlmbyAqZXZlbnRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gZXZlbnRfZmlmbzsKIAogCS8qKiB0aHJlYWQgdG8gc2VydmljZSBpbnRlcnJ1cHRzICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICptYWluX3RocmVhZDsKQEAgLTE3Niw5ICsxNzUsNyBAQAogCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbmV0d29ya3M7CiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKiBwZW5kaW5nX2Fzc29jX3JlcTsKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGluX3Byb2dyZXNzX2Fzc29jX3JlcTsKLQl1MTYgY2FwYWJpbGl0eTsKIAl1aW50MTZfdCBlbmFibGVod2F1dG87Ci0JdWludDE2X3QgcmF0ZWJpdG1hcDsKIAogCS8qIEFESE9DICovCiAJdTE2IGJlYWNvbl9wZXJpb2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKaW5kZXggNjNkMDIwMy4uMzgwNGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwpAQCAtMTE0LDkgKzExNCwxMSBAQAogCS5nZXRfZHJ2aW5mbyA9IGxic19ldGh0b29sX2dldF9kcnZpbmZvLAogCS5nZXRfZWVwcm9tID0gIGxic19ldGh0b29sX2dldF9lZXByb20sCiAJLmdldF9lZXByb21fbGVuID0gbGJzX2V0aHRvb2xfZ2V0X2VlcHJvbV9sZW4sCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKIAkuZ2V0X3NzZXRfY291bnQgPSBsYnNfbWVzaF9ldGh0b29sX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGxic19tZXNoX2V0aHRvb2xfZ2V0X3N0YXRzLAogCS5nZXRfc3RyaW5ncyA9IGxic19tZXNoX2V0aHRvb2xfZ2V0X3N0cmluZ3MsCisjZW5kaWYKIAkuZ2V0X3dvbCA9IGxic19ldGh0b29sX2dldF93b2wsCiAJLnNldF93b2wgPSBsYnNfZXRodG9vbF9zZXRfd29sLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwppbmRleCBkYjM4YTVhLi42MGJkZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJaWYgKHByaXYtPm1vbml0b3Jtb2RlID09IG1vbml0b3JfbW9kZSkKIAkJCXJldHVybiBzdHJsZW4oYnVmKTsKIAkJaWYgKCFwcml2LT5tb25pdG9ybW9kZSkgewotCQkJaWYgKHByaXYtPmluZnJhX29wZW4gfHwgcHJpdi0+bWVzaF9vcGVuKQorCQkJaWYgKHByaXYtPmluZnJhX29wZW4gfHwgbGJzX21lc2hfb3Blbihwcml2KSkKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9JTkZSQSkKIAkJCQlsYnNfY21kXzgwMjExX2RlYXV0aGVudGljYXRlKHByaXYsCkBAIC00NTksNyArNDU5LDcgQEAKIAkJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmNtZHBlbmRpbmdxKSAmJgogCQkJCQkhKHByaXYtPndha2V1cF9kZXZfcmVxdWlyZWQpKQogCQkJc2hvdWxkc2xlZXAgPSAwOwkvKiBXZSBoYXZlIGEgY29tbWFuZCB0byBzZW5kICovCi0JCWVsc2UgaWYgKF9fa2ZpZm9fbGVuKHByaXYtPmV2ZW50X2ZpZm8pKQorCQllbHNlIGlmIChrZmlmb19sZW4oJnByaXYtPmV2ZW50X2ZpZm8pKQogCQkJc2hvdWxkc2xlZXAgPSAwOwkvKiBXZSBoYXZlIGFuIGV2ZW50IHRvIHByb2Nlc3MgKi8KIAkJZWxzZQogCQkJc2hvdWxkc2xlZXAgPSAxOwkvKiBObyBjb21tYW5kICovCkBAIC01MTEsMTAgKzUxMSwxMyBAQAogCiAJCS8qIFByb2Nlc3MgaGFyZHdhcmUgZXZlbnRzLCBlLmcuIGNhcmQgcmVtb3ZlZCwgbGluayBsb3N0ICovCiAJCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKLQkJd2hpbGUgKF9fa2ZpZm9fbGVuKHByaXYtPmV2ZW50X2ZpZm8pKSB7CisJCXdoaWxlIChrZmlmb19sZW4oJnByaXYtPmV2ZW50X2ZpZm8pKSB7CiAJCQl1MzIgZXZlbnQ7Ci0JCQlfX2tmaWZvX2dldChwcml2LT5ldmVudF9maWZvLCAodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsCi0JCQkJc2l6ZW9mKGV2ZW50KSk7CisKKwkJCWlmIChrZmlmb19vdXQoJnByaXYtPmV2ZW50X2ZpZm8sCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LCBzaXplb2YoZXZlbnQpKSAhPQorCQkJCXNpemVvZihldmVudCkpCisJCQkJCWJyZWFrOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7CiAJCQlsYnNfcHJvY2Vzc19ldmVudChwcml2LCBldmVudCk7CiAJCQlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7CkBAIC02MTksNyArNjIyLDcgQEAKIAkJCQlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwogCQkJCWlmIChwcml2LT5tZXNoX2RldiAmJgotCQkJCSAgICBwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpCisJCQkJICAgIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5tZXNoX2Rldik7CiAJCQl9CiAJCX0KQEAgLTgwNiwxOCArODA5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbGJzX3N5bmNfY2hhbm5lbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGJzX3ByaXZhdGUsCi0JCXN5bmNfY2hhbm5lbCk7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7Ci0JaWYgKGxic191cGRhdGVfY2hhbm5lbChwcml2KSkKLQkJbGJzX3ByX2luZm8oIkNoYW5uZWwgc3luY2hyb25pemF0aW9uIGZhaWxlZC4iKTsKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7Ci19Ci0KLQogc3RhdGljIGludCBsYnNfaW5pdF9hZGFwdGVyKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlzaXplX3QgYnVmc2l6ZTsKQEAgLTg0NSwxNCArODM2LDEyIEBACiAJbWVtc2V0KHByaXYtPmN1cnJlbnRfYWRkciwgMHhmZiwgRVRIX0FMRU4pOwogCiAJcHJpdi0+Y29ubmVjdF9zdGF0dXMgPSBMQlNfRElTQ09OTkVDVEVEOwotCXByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPSBMQlNfRElTQ09OTkVDVEVEOwogCXByaXYtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CiAJcHJpdi0+bW9kZSA9IElXX01PREVfSU5GUkE7CiAJcHJpdi0+Y2hhbm5lbCA9IERFRkFVTFRfQURfSE9DX0NIQU5ORUw7CiAJcHJpdi0+bWFjX2NvbnRyb2wgPSBDTURfQUNUX01BQ19SWF9PTiB8IENNRF9BQ1RfTUFDX1RYX09OOwogCXByaXYtPnJhZGlvX29uID0gMTsKIAlwcml2LT5lbmFibGVod2F1dG8gPSAxOwotCXByaXYtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CiAJcHJpdi0+cHNtb2RlID0gTEJTODAyXzExUE9XRVJNT0RFQ0FNOwogCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9GVUxMX1BPV0VSOwogCXByaXYtPmlzX2RlZXBfc2xlZXAgPSAwOwpAQCAtODgzLDEwICs4NzIsOSBAQAogCXByaXYtPnJlc3BfbGVuWzBdID0gcHJpdi0+cmVzcF9sZW5bMV0gPSAwOwogCiAJLyogQ3JlYXRlIHRoZSBldmVudCBGSUZPICovCi0JcHJpdi0+ZXZlbnRfZmlmbyA9IGtmaWZvX2FsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwsIE5VTEwpOwotCWlmIChJU19FUlIocHJpdi0+ZXZlbnRfZmlmbykpIHsKKwlyZXQgPSBrZmlmb19hbGxvYygmcHJpdi0+ZXZlbnRfZmlmbywgc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgewogCQlsYnNfcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZXZlbnQgRklGTyBidWZmZXJcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTkwMSw4ICs4ODksNyBAQAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKIAogCWxic19mcmVlX2NtZF9idWZmZXIocHJpdik7Ci0JaWYgKHByaXYtPmV2ZW50X2ZpZm8pCi0JCWtmaWZvX2ZyZWUocHJpdi0+ZXZlbnRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcHJpdi0+ZXZlbnRfZmlmbyk7CiAJZGVsX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyKTsKIAlkZWxfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyKTsKIAlrZnJlZShwcml2LT5uZXR3b3Jrcyk7CkBAIC05OTcsMTEgKzk4NCw2IEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmFzc29jX3dvcmssIGxic19hc3NvY2lhdGlvbl93b3JrZXIpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX3dvcmssIGxic19zY2FuX3dvcmtlcik7CiAJSU5JVF9XT1JLKCZwcml2LT5tY2FzdF93b3JrLCBsYnNfc2V0X21jYXN0X3dvcmtlcik7Ci0JSU5JVF9XT1JLKCZwcml2LT5zeW5jX2NoYW5uZWwsIGxic19zeW5jX2NoYW5uZWxfd29ya2VyKTsKLQotCXByaXYtPm1lc2hfb3BlbiA9IDA7Ci0Jc3ByaW50Zihwcml2LT5tZXNoX3NzaWQsICJtZXNoIik7Ci0JcHJpdi0+bWVzaF9zc2lkX2xlbiA9IDQ7CiAKIAlwcml2LT53b2xfY3JpdGVyaWEgPSAweGZmZmZmZmZmOwogCXByaXYtPndvbF9ncGlvID0gMHhmZjsKQEAgLTEwNzUsNiArMTA1NywxNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3JlbW92ZV9jYXJkKTsKIAogCitzdGF0aWMgaW50IGxic19ydGFwX3N1cHBvcnRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPT0gTVJWTF9GV19WNSkKKwkJcmV0dXJuIDE7CisKKwkvKiBuZXdlciBmaXJtd2FyZSB1c2UgYSBjYXBhYmlsaXR5IG1hc2sgKi8KKwlyZXR1cm4gKChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpID49IE1SVkxfRldfVjEwKSAmJgorCQkocHJpdi0+ZndjYXBpbmZvICYgTUVTSF9DQVBJTkZPX0VOQUJMRV9NQVNLKSk7Cit9CisKKwogaW50IGxic19zdGFydF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwpAQCAtMTA5NCwxMiArMTA4NywxNCBAQAogCiAJbGJzX3VwZGF0ZV9jaGFubmVsKHByaXYpOwogCisJbGJzX2luaXRfbWVzaChwcml2KTsKKwogCS8qCiAJICogV2hpbGUgcnRhcCBpc24ndCByZWxhdGVkIHRvIG1lc2gsIG9ubHkgbWVzaC1lbmFibGVkCiAJICogZmlybXdhcmUgaW1wbGVtZW50cyB0aGUgcnRhcCBmdW5jdGlvbmFsaXR5IHZpYQogCSAqIENNRF84MDJfMTFfTU9OSVRPUl9NT0RFLgogCSAqLwotCWlmIChsYnNfaW5pdF9tZXNoKHByaXYpKSB7CisJaWYgKGxic19ydGFwX3N1cHBvcnRlZChwcml2KSkgewogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xic19ydGFwKSkKIAkJCWxic19wcl9lcnIoImNhbm5vdCByZWdpc3RlciBsYnNfcnRhcCBhdHRyaWJ1dGVcbiIpOwogCX0KQEAgLTExMzMsNyArMTEyOCw5IEBACiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAogCWxic19kZWJ1Z2ZzX3JlbW92ZV9vbmUocHJpdik7Ci0JaWYgKGxic19kZWluaXRfbWVzaChwcml2KSkKKwlsYnNfZGVpbml0X21lc2gocHJpdik7CisKKwlpZiAobGJzX3J0YXBfc3VwcG9ydGVkKHByaXYpKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX3J0YXApOwogCiAJLyogRGVsZXRlIHRoZSB0aW1lb3V0IG9mIHRoZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBjb21tYW5kICovCkBAIC0xMTc3LDcgKzExNzQsNyBAQAogCWlmIChwcml2LT5wc3N0YXRlID09IFBTX1NUQVRFX1NMRUVQKQogCQlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CiAKLQlfX2tmaWZvX3B1dChwcml2LT5ldmVudF9maWZvLCAodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsIHNpemVvZih1MzIpKTsKKwlrZmlmb19pbigmcHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LCBzaXplb2YodTMyKSk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCmluZGV4IDkyYjdhMzUuLmUzODVhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0xOTcsNyArMTk2LDE0IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUVTSCk7CiAKLQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19PTEQpIHsKKwlwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID0gTEJTX0RJU0NPTk5FQ1RFRDsKKworCS8qIERldGVybWluZSBtZXNoX2Z3X3ZlciBmcm9tIGZ3cmVsZWFzZSBhbmQgZndjYXBpbmZvICovCisJLyogNS4wLjE2cDAgOS4wLjAucDAgaXMga25vd24gdG8gTk9UIHN1cHBvcnQgYW55IG1lc2ggKi8KKwkvKiA1LjExMC4yMiBoYXZlIG1lc2ggY29tbWFuZCB3aXRoIDB4YTMgY29tbWFuZCBpZCAqLworCS8qIDEwLjAuMC5wMCBGVyBicmluZ3MgaW4gbWVzaCBjb25maWcgY29tbWFuZCB3aXRoIGRpZmZlcmVudCBpZCAqLworCS8qIENoZWNrIEZXIHZlcnNpb24gTVNCIGFuZCBpbml0aWFsaXplIG1lc2hfZndfdmVyICovCisJaWYgKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPT0gTVJWTF9GV19WNSkgewogCQkvKiBFbmFibGUgbWVzaCwgaWYgc3VwcG9ydGVkLCBhbmQgd29yayBvdXQgd2hpY2ggVExWIGl0IHVzZXMuCiAJCSAgIDB4MTAwICsgMjkxIGlzIGFuIHVub2ZmaWNpYWwgdmFsdWUgdXNlZCBpbiA1LjExMC4yMC5wWFgKIAkJICAgMHgxMDAgKyAzNyBpcyB0aGUgb2ZmaWNpYWwgdmFsdWUgdXNlZCBpbiA1LjExMC4yMS5wWFgKQEAgLTIxOSw3ICsyMjUsOSBAQAogCQkJCQkgICAgcHJpdi0+Y2hhbm5lbCkpCiAJCQkJcHJpdi0+bWVzaF90bHYgPSAwOwogCQl9Ci0JfSBlbHNlIGlmIChwcml2LT5tZXNoX2Z3X3ZlciA9PSBNRVNIX0ZXX05FVykgeworCX0gZWxzZQorCWlmICgoTVJWTF9GV19NQUpPUl9SRVYocHJpdi0+ZndyZWxlYXNlKSA+PSBNUlZMX0ZXX1YxMCkgJiYKKwkJKHByaXYtPmZ3Y2FwaW5mbyAmIE1FU0hfQ0FQSU5GT19FTkFCTEVfTUFTSykpIHsKIAkJLyogMTAuMC4wLnBYWCBuZXcgZmlybXdhcmVzIHNob3VsZCBzdWNjZWVkIHdpdGggVExWCiAJCSAqIDB4MTAwKzM3OyBEbyBub3QgaW52b2tlIGNvbW1hbmQgd2l0aCBvbGQgVExWLgogCQkgKi8KQEAgLTIyOCw3ICsyMzYsMTIgQEAKIAkJCQkgICAgcHJpdi0+Y2hhbm5lbCkpCiAJCQlwcml2LT5tZXNoX3RsdiA9IDA7CiAJfQorCisKIAlpZiAocHJpdi0+bWVzaF90bHYpIHsKKwkJc3ByaW50Zihwcml2LT5tZXNoX3NzaWQsICJtZXNoIik7CisJCXByaXYtPm1lc2hfc3NpZF9sZW4gPSA0OworCiAJCWxic19hZGRfbWVzaChwcml2KTsKIAogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xic19tZXNoKSkKQEAgLTQxNiwxMCArNDI5LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ4cGQgKnJ4cGQpCiB7CiAJaWYgKHByaXYtPm1lc2hfZGV2KSB7Ci0JCWlmIChwcml2LT5tZXNoX2Z3X3ZlciA9PSBNRVNIX0ZXX09MRCkgeworCQlpZiAocHJpdi0+bWVzaF90bHYgPT0gVExWX1RZUEVfT0xEX01FU0hfSUQpIHsKIAkJCWlmIChyeHBkLT5yeF9jb250cm9sICYgUnhQRF9NRVNIX0ZSQU1FKQogCQkJCWRldiA9IHByaXYtPm1lc2hfZGV2OwotCQl9IGVsc2UgaWYgKHByaXYtPm1lc2hfZndfdmVyID09IE1FU0hfRldfTkVXKSB7CisJCX0gZWxzZSBpZiAocHJpdi0+bWVzaF90bHYgPT0gVExWX1RZUEVfTUVTSF9JRCkgewogCQkJaWYgKHJ4cGQtPnUuYnNzLmJzc19udW0gPT0gTUVTSF9JRkFDRV9JRCkKIAkJCQlkZXYgPSBwcml2LT5tZXNoX2RldjsKIAkJfQpAQCAtNDMyLDkgKzQ0NSw5IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHR4cGQgKnR4cGQpCiB7CiAJaWYgKGRldiA9PSBwcml2LT5tZXNoX2RldikgewotCQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19PTEQpCisJCWlmIChwcml2LT5tZXNoX3RsdiA9PSBUTFZfVFlQRV9PTERfTUVTSF9JRCkKIAkJCXR4cGQtPnR4X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoVHhQRF9NRVNIX0ZSQU1FKTsKLQkJZWxzZSBpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19ORVcpCisJCWVsc2UgaWYgKHByaXYtPm1lc2hfdGx2ID09IFRMVl9UWVBFX01FU0hfSUQpCiAJCQl0eHBkLT51LmJzcy5ic3NfbnVtID0gTUVTSF9JRkFDRV9JRDsKIAl9CiB9CkBAIC01MzgsNyArNTUxLDcgQEAKIAkgKiBDb21tYW5kIGlkIGlzIDB4YWMgZm9yIHYxMCBGVyBhbG9uZyB3aXRoIG1lc2ggaW50ZXJmYWNlCiAJICogaWQgaW4gYml0cyAxNC0xMy0xMi4KIAkgKi8KLQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19ORVcpCisJaWYgKHByaXYtPm1lc2hfdGx2ID09IFRMVl9UWVBFX01FU0hfSUQpCiAJCWNvbW1hbmQgPSBDTURfTUVTSF9DT05GSUcgfAogCQkJICAoTUVTSF9JRkFDRV9JRCA8PCBNRVNIX0lGQUNFX0JJVF9PRkZTRVQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmgKaW5kZXggZmVhOWI1ZC4uZTI1NzMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KIAogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKKwogLyogTWVzaCBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgbGJzX21lc2hfc3RhdHMgewogCXUzMglmd2RfYmNhc3RfY250OwkJLyogRndkOiBCcm9hZGNhc3QgY291bnRlciAqLwpAQCAtNDYsMTEgKzQ4LDIwIEBACiAvKiBDb21tYW5kIGhhbmRsaW5nICovCiAKIHN0cnVjdCBjbWRfZHNfY29tbWFuZDsKK3N0cnVjdCBjbWRfZHNfbWVzaF9hY2Nlc3M7CitzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnOwogCiBpbnQgbGJzX2NtZF9idF9hY2Nlc3Moc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCiAJdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1Zik7CiBpbnQgbGJzX2NtZF9md3RfYWNjZXNzKHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAogCXUxNiBjbWRfYWN0aW9uLCB2b2lkICpwZGF0YV9idWYpOworaW50IGxic19tZXNoX2FjY2VzcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCisJCSAgICBzdHJ1Y3QgY21kX2RzX21lc2hfYWNjZXNzICpjbWQpOworaW50IGxic19tZXNoX2NvbmZpZ19zZW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnICpjbWQsCisJCQkgdWludDE2X3QgYWN0aW9uLCB1aW50MTZfdCB0eXBlKTsKK2ludCBsYnNfbWVzaF9jb25maWcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBlbmFibGUsIHVpbnQxNl90IGNoYW4pOworCiAKIAogLyogUGVyc2lzdGVudCBjb25maWd1cmF0aW9uICovCkBAIC03NSw0ICs4NiwyNSBAQAogCXVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqcyk7CiAKIAorLyogQWNjZXNzb3JzICovCisKKyNkZWZpbmUgbGJzX21lc2hfb3Blbihwcml2KSAocHJpdi0+bWVzaF9vcGVuKQorI2RlZmluZSBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKKworI2Vsc2UKKworI2RlZmluZSBsYnNfaW5pdF9tZXNoKHByaXYpCisjZGVmaW5lIGxic19kZWluaXRfbWVzaChwcml2KQorI2RlZmluZSBsYnNfYWRkX21lc2gocHJpdikKKyNkZWZpbmUgbGJzX3JlbW92ZV9tZXNoKHByaXYpCisjZGVmaW5lIGxic19tZXNoX3NldF9kZXYocHJpdiwgZGV2LCByeHBkKSAoZGV2KQorI2RlZmluZSBsYnNfbWVzaF9zZXRfdHhwZChwcml2LCBkZXYsIHR4cGQpCisjZGVmaW5lIGxic19tZXNoX2NvbmZpZyhwcml2LCBlbmFibGUsIGNoYW4pCisjZGVmaW5lIGxic19tZXNoX29wZW4ocHJpdikgKDApCisjZGVmaW5lIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSAoMCkKKworI2VuZGlmCisKKworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwppbmRleCBiMGIxYzc4Li4yMjAzNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCkBAIC02MzUsNyArNjM1LDcgQEAKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCAmJiAhcHJpdi0+dHhfcGVuZGluZ19sZW4pCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKIAotCWlmIChwcml2LT5tZXNoX2RldiAmJiAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSAmJgorCWlmIChwcml2LT5tZXNoX2RldiAmJiBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikgJiYKIAkgICAgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQogCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggMzE1ZDFjZS4uNTJkMjQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKIAkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwogCi0JaWYgKHByaXYtPm1lc2hfZGV2ICYmIChwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpKQorCWlmIChwcml2LT5tZXNoX2RldiAmJiBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bWVzaF9kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3NlbmRfdHhfZmVlZGJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmluZGV4IDRiMWFhYjUuLjcxZjg4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIAogCWlmICgocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkgJiYKLQkJKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkpCisJCSFsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpCiAJCW1lbWNweShyYXRlcywgbGJzX2JnX3JhdGVzLCBNQVhfUkFURVMpOwogCWVsc2UKIAkJbWVtY3B5KHJhdGVzLCBwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsIE1BWF9SQVRFUyk7CkBAIC0yOTgsNiArMjk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiBzdGF0aWMgaW50IG1lc2hfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewpAQCAtMzA3LDcgKzMwOCw3IEBACiAKIAkvKiBVc2Ugbmlja25hbWUgdG8gaW5kaWNhdGUgdGhhdCBtZXNoIGlzIG9uICovCiAKLQlpZiAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7CisJaWYgKGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkgewogCQlzdHJuY3B5KGV4dHJhLCAiTWVzaCIsIDEyKTsKIAkJZXh0cmFbMTJdID0gJ1wwJzsKIAkJZHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKTsKQEAgLTMyMSw2ICszMjIsNyBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IGxic19zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQpAQCAtNDIyLDYgKzQyNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogc3RhdGljIGludCBtZXNoX3dsYW5fZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1MzIgKiB1d3JxLAogCQkJICAgICAgY2hhciAqZXh0cmEpCkBAIC00MzMsNiArNDM2LDcgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBsYnNfZ2V0X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC04NjMsNyArODY3LDcgQEAKIAogCS8qIElmIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLCBhbGwgcXVhbGl0eSB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzICovCiAJaWYgKChwcml2LT5jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSAmJgotCSAgICAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSkKKwkgICAgIWxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkKIAkJZ290byBvdXQ7CiAKIAkvKiBRdWFsaXR5IGJ5IFJTU0kgKi8KQEAgLTEwMTAsNiArMTAxNCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiBzdGF0aWMgaW50IGxic19tZXNoX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgIHN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKQEAgLTEwNjEsNiArMTA2Niw3IEBACiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IGxic19zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCkBAIC0yMTA4LDYgKzIxMTQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogc3RhdGljIGludCBsYnNfbWVzaF9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQpAQCAtMjE2MSw2ICsyMTY4LDcgQEAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmCiAKIC8qKgogICogIEBicmllZiBDb25uZWN0IHRvIHRoZSBBUCBvciBBZC1ob2MgTmV0d29yayB3aXRoIHNwZWNpZmljIGJzc2lkCkBAIC0yMjY3LDcgKzIyNzUsMTMgQEAKIAkoaXdfaGFuZGxlcikgbGJzX2dldF9lbmNvZGVleHQsLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1NJV1BNS1NBICovCiB9Oworc3RydWN0IGl3X2hhbmRsZXJfZGVmIGxic19oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShsYnNfaGFuZGxlciksCisJLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgbGJzX2hhbmRsZXIsCisJLmdldF93aXJlbGVzc19zdGF0cyA9IGxic19nZXRfd2lyZWxlc3Nfc3RhdHMsCit9OwogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKIHN0YXRpYyBjb25zdCBpd19oYW5kbGVyIG1lc2hfd2xhbl9oYW5kbGVyW10gPSB7CiAJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdDT01NSVQgKi8KIAkoaXdfaGFuZGxlcikgbGJzX2dldF9uYW1lLAkvKiBTSU9DR0lXTkFNRSAqLwpAQCAtMjMyNSwxNCArMjMzOSwxMCBAQAogCShpd19oYW5kbGVyKSBsYnNfZ2V0X2VuY29kZWV4dCwvKiBTSU9DR0lXRU5DT0RFRVhUICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkvKiBTSU9DU0lXUE1LU0EgKi8KIH07Ci1zdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgbGJzX2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGxic19oYW5kbGVyKSwKLQkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBsYnNfaGFuZGxlciwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gbGJzX2dldF93aXJlbGVzc19zdGF0cywKLX07CiAKIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBtZXNoX2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKG1lc2hfd2xhbl9oYW5kbGVyKSwKIAkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBtZXNoX3dsYW5faGFuZGxlciwKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gbGJzX2dldF93aXJlbGVzc19zdGF0cywKIH07CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwppbmRleCAyNmExYWJkLi5iYTNlYjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCkBAIC0zMTgsMTQgKzMxOCwxNCBAQAogfQogCiBzdGF0aWMgaW50IGxidGZfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2ID0gaHctPnByaXY7CiAJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlwcml2LT52aWYgPSBjb25mLT52aWY7Ci0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJcHJpdi0+dmlmID0gdmlmOworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWxidGZfc2V0X21vZGUocHJpdiwgTEJURl9BUF9NT0RFKTsKQEAgLTMzNywxMiArMzM3LDEyIEBACiAJCXByaXYtPnZpZiA9IE5VTEw7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0JbGJ0Zl9zZXRfbWFjX2FkZHJlc3MocHJpdiwgKHU4ICopIGNvbmYtPm1hY19hZGRyKTsKKwlsYnRmX3NldF9tYWNfYWRkcmVzcyhwcml2LCAodTggKikgdmlmLT5hZGRyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbGJ0Zl9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYgPSBody0+cHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggODhlNDExNy4uODRkZjNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC00MzYsNiArNDM2LDM4IEBACiB9CiAKIAorc3RydWN0IG1hYzgwMjExX2h3c2ltX2FkZHJfbWF0Y2hfZGF0YSB7CisJYm9vbCByZXQ7CisJY29uc3QgdTggKmFkZHI7Cit9OworCitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9hZGRyX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IG1hYzgwMjExX2h3c2ltX2FkZHJfbWF0Y2hfZGF0YSAqbWQgPSBkYXRhOworCWlmIChtZW1jbXAobWFjLCBtZC0+YWRkciwgRVRIX0FMRU4pID09IDApCisJCW1kLT5yZXQgPSB0cnVlOworfQorCisKK3N0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX2FkZHJfbWF0Y2goc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsCisJCQkJICAgICAgY29uc3QgdTggKmFkZHIpCit7CisJc3RydWN0IG1hYzgwMjExX2h3c2ltX2FkZHJfbWF0Y2hfZGF0YSBtZDsKKworCWlmIChtZW1jbXAoYWRkciwgZGF0YS0+aHctPndpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gdHJ1ZTsKKworCW1kLnJldCA9IGZhbHNlOworCW1kLmFkZHIgPSBhZGRyOworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhkYXRhLT5odywKKwkJCQkJCSAgIG1hYzgwMjExX2h3c2ltX2FkZHJfaXRlciwKKwkJCQkJCSAgICZtZCk7CisKKwlyZXR1cm4gbWQucmV0OworfQorCisKIHN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNDg4LDggKzUyMCw3IEBACiAJCWlmIChuc2tiID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQlpZiAobWVtY21wKGhkci0+YWRkcjEsIGRhdGEyLT5ody0+d2lwaHktPnBlcm1fYWRkciwKLQkJCSAgIEVUSF9BTEVOKSA9PSAwKQorCQlpZiAobWFjODAyMTFfaHdzaW1fYWRkcl9tYXRjaChkYXRhMiwgaGRyLT5hZGRyMSkpCiAJCQlhY2sgPSB0cnVlOwogCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKG5za2IpLCAmcnhfc3RhdHVzLCBzaXplb2Yocnhfc3RhdHVzKSk7CiAJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRhdGEyLT5odywgbnNrYik7CkBAIC01NTMsMjQgKzU4NCwyNCBAQAogCiAKIHN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzICh0eXBlPSVkIG1hY19hZGRyPSVwTSlcbiIsCi0JICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIGNvbmYtPnR5cGUsCi0JICAgICAgIGNvbmYtPm1hY19hZGRyKTsKLQlod3NpbV9zZXRfbWFnaWMoY29uZi0+dmlmKTsKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywgdmlmLT50eXBlLAorCSAgICAgICB2aWYtPmFkZHIpOworCWh3c2ltX3NldF9tYWdpYyh2aWYpOwogCXJldHVybiAwOwogfQogCiAKIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3JlbW92ZV9pbnRlcmZhY2UoCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAodHlwZT0lZCBtYWNfYWRkcj0lcE0pXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLCBjb25mLT50eXBlLAotCSAgICAgICBjb25mLT5tYWNfYWRkcik7Ci0JaHdzaW1fY2hlY2tfbWFnaWMoY29uZi0+dmlmKTsKLQlod3NpbV9jbGVhcl9tYWdpYyhjb25mLT52aWYpOworCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLCB2aWYtPnR5cGUsCisJICAgICAgIHZpZi0+YWRkcik7CisJaHdzaW1fY2hlY2tfbWFnaWModmlmKTsKKwlod3NpbV9jbGVhcl9tYWdpYyh2aWYpOwogfQogCiAKQEAgLTYxOCwxMiArNjQ5LDI2IEBACiB7CiAJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNoYW50eXBlc1s0XSA9IHsKKwkJW05MODAyMTFfQ0hBTl9OT19IVF0gPSAibm9odCIsCisJCVtOTDgwMjExX0NIQU5fSFQyMF0gPSAiaHQyMCIsCisJCVtOTDgwMjExX0NIQU5fSFQ0ME1JTlVTXSA9ICJodDQwLSIsCisJCVtOTDgwMjExX0NIQU5fSFQ0MFBMVVNdID0gImh0NDArIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpzbXBzX21vZGVzW0lFRUU4MDIxMV9TTVBTX05VTV9NT0RFU10gPSB7CisJCVtJRUVFODAyMTFfU01QU19BVVRPTUFUSUNdID0gImF1dG8iLAorCQlbSUVFRTgwMjExX1NNUFNfT0ZGXSA9ICJvZmYiLAorCQlbSUVFRTgwMjExX1NNUFNfU1RBVElDXSA9ICJzdGF0aWMiLAorCQlbSUVFRTgwMjExX1NNUFNfRFlOQU1JQ10gPSAiZHluYW1pYyIsCisJfTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAoZnJlcT0lZCBpZGxlPSVkIHBzPSVkKVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXMgKGZyZXE9JWQvJXMgaWRsZT0lZCBwcz0lZCBzbXBzPSVzKVxuIiwKIAkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywKIAkgICAgICAgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJICAgICAgIGNoYW50eXBlc1tjb25mLT5jaGFubmVsX3R5cGVdLAogCSAgICAgICAhIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpLAotCSAgICAgICAhIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSk7CisJICAgICAgICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpLAorCSAgICAgICBzbXBzX21vZGVzW2NvbmYtPnNtcHNfbW9kZV0pOwogCiAJZGF0YS0+aWRsZSA9ICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSk7CiAKQEAgLTgyNyw2ICs4NzIsNDEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKK3sKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgorCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZHJvcCkKK3sKKwkvKgorCSAqIEluIHRoaXMgc3BlY2lhbCBjYXNlLCB0aGVyZSdzIG5vdGhpbmcgd2UgbmVlZCB0bworCSAqIGRvIGJlY2F1c2UgaHdzaW0gZG9lcyB0cmFuc21pc3Npb24gc3luY2hyb25vdXNseS4KKwkgKiBJbiB0aGUgZnV0dXJlLCB3aGVuIGl0IGRvZXMgdHJhbnNtaXNzaW9ucyB2aWEKKwkgKiB1c2Vyc3BhY2UsIHdlIG1heSBuZWVkIHRvIGRvIHNvbWV0aGluZy4KKwkgKi8KK30KKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbWFjODAyMTFfaHdzaW1fb3BzID0KIHsKIAkudHggPSBtYWM4MDIxMV9od3NpbV90eCwKQEAgLTg0MSw2ICs5MjEsOCBAQAogCS5zZXRfdGltID0gbWFjODAyMTFfaHdzaW1fc2V0X3RpbSwKIAkuY29uZl90eCA9IG1hYzgwMjExX2h3c2ltX2NvbmZfdHgsCiAJQ0ZHODAyMTFfVEVTVE1PREVfQ01EKG1hYzgwMjExX2h3c2ltX3Rlc3Rtb2RlX2NtZCkKKwkuYW1wZHVfYWN0aW9uID0gbWFjODAyMTFfaHdzaW1fYW1wZHVfYWN0aW9uLAorCS5mbHVzaCA9IG1hYzgwMjExX2h3c2ltX2ZsdXNoLAogfTsKIAogCkBAIC0xMDgyLDcgKzExNjQsOSBAQAogCQkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwogCiAJCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSB8Ci0JCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19TVEFUSUNfU01QUyB8CisJCQkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfU01QUzsKIAogCQkvKiBhc2sgbWFjODAyMTEgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbWFnaWMgKi8KIAkJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3c2ltX3ZpZl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCmluZGV4IDU5ZDQ5MTUuLmMxYzZlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtOTIsOCArOTIsNyBAQAogCWNoYXIgKnBhcnRfbmFtZTsKIAljaGFyICpoZWxwZXJfaW1hZ2U7CiAJY2hhciAqZndfaW1hZ2U7Ci0Jc3RydWN0IHJ4ZF9vcHMgKnJ4ZF9vcHM7Ci0JdTE2IG1vZGVzOworCXN0cnVjdCByeGRfb3BzICphcF9yeGRfb3BzOwogfTsKIAogc3RydWN0IG13bDhrX3J4X3F1ZXVlIHsKQEAgLTEyNiwyOSArMTI1LDIzIEBACiAJc3RydWN0IHNrX2J1ZmYgKipza2I7CiB9OwogCi0vKiBQb2ludGVycyB0byB0aGUgZmlybXdhcmUgZGF0YSBhbmQgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCBpdC4gICovCi1zdHJ1Y3QgbXdsOGtfZmlybXdhcmUgewotCS8qIEJvb3QgaGVscGVyIGNvZGUgKi8KLQlzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlcjsKLQotCS8qIE1pY3JvY29kZSAqLwotCXN0cnVjdCBmaXJtd2FyZSAqdWNvZGU7Ci19OwotCiBzdHJ1Y3QgbXdsOGtfcHJpdiB7Ci0Jdm9pZCBfX2lvbWVtICpzcmFtOwotCXZvaWQgX19pb21lbSAqcmVnczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCiAJc3RydWN0IG13bDhrX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbzsKKworCXZvaWQgX19pb21lbSAqc3JhbTsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwkvKiBmaXJtd2FyZSAqLworCXN0cnVjdCBmaXJtd2FyZSAqZndfaGVscGVyOworCXN0cnVjdCBmaXJtd2FyZSAqZndfdWNvZGU7CisKKwkvKiBoYXJkd2FyZS9maXJtd2FyZSBwYXJhbWV0ZXJzICovCiAJYm9vbCBhcF9mdzsKIAlzdHJ1Y3QgcnhkX29wcyAqcnhkX29wczsKIAotCS8qIGZpcm13YXJlIGZpbGVzIGFuZCBtZXRhIGRhdGEgKi8KLQlzdHJ1Y3QgbXdsOGtfZmlybXdhcmUgZnc7Ci0KIAkvKiBmaXJtd2FyZSBhY2Nlc3MgKi8KIAlzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpmd19tdXRleF9vd25lcjsKQEAgLTIxMSwxNyArMjA0LDEzIEBACiAKIC8qIFBlciBpbnRlcmZhY2Ugc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgbXdsOGtfdmlmIHsKLQkvKiBiYWNrcG9pbnRlciB0byBwYXJlbnQgY29uZmlnIGJsb2NrICovCi0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJLyogTG9jYWwgTUFDIGFkZHJlc3MuICAqLworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAotCS8qIEJTUyBjb25maWcgb2YgQVAgb3IgSUJTUyBmcm9tIG1hYzgwMjExKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGJzc19pbmZvOworCS8qIEJTU0lEIG9mIEFQLiAgKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CiAKLQkvKiBCU1NJRCBvZiBBUCBvciBJQlNTICovCi0JdTgJYnNzaWRbRVRIX0FMRU5dOwotCXU4CW1hY19hZGRyW0VUSF9BTEVOXTsKLQotCSAvKiBJbmRleCBpbnRvIHN0YXRpb24gZGF0YWJhc2UuUmV0dXJuZWQgYnkgdXBkYXRlX3N0YV9kYiBjYWxsICovCisJLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLiBSZXR1cm5lZCBieSBVUERBVEVfU1RBREIuICAqLwogCXU4CXBlZXJfaWQ7CiAKIAkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlciAqLwpAQCAtMjQyLDYgKzIzMSw5IEBACiAJeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LAogCXsgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sCiAJeyAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsOGtfcmF0ZXNbXSA9IHsKQEAgLTM1NSw4ICszNDcsOCBAQAogCiBzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQogewotCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LnVjb2RlKTsKLQltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy5oZWxwZXIpOworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3X3Vjb2RlKTsKKwltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5md19oZWxwZXIpOwogfQogCiAvKiBSZXF1ZXN0IGZ3IGltYWdlICovCkBAIC0zNzcsNyArMzY5LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoZGktPmhlbHBlcl9pbWFnZSAhPSBOVUxMKSB7Ci0JCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBkaS0+aGVscGVyX2ltYWdlLCAmcHJpdi0+ZncuaGVscGVyKTsKKwkJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGRpLT5oZWxwZXJfaW1hZ2UsICZwcml2LT5md19oZWxwZXIpOwogCQlpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlcXVlc3RpbmcgaGVscGVyICIKIAkJCSAgICAgICAiZmlybXdhcmUgZmlsZSAlc1xuIiwgcGNpX25hbWUocHJpdi0+cGRldiksCkBAIC0zODYsMTEgKzM3OCwxMSBAQAogCQl9CiAJfQogCi0JcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGRpLT5md19pbWFnZSwgJnByaXYtPmZ3LnVjb2RlKTsKKwlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZGktPmZ3X2ltYWdlLCAmcHJpdi0+ZndfdWNvZGUpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwcml2LT5wZGV2KSwgZGktPmZ3X2ltYWdlKTsKLQkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncuaGVscGVyKTsKKwkJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZndfaGVscGVyKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNTUxLDEzICs1NDMsMTIgQEAKIHN0YXRpYyBpbnQgbXdsOGtfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBmaXJtd2FyZSAqZncgPSBwcml2LT5mdy51Y29kZTsKLQlzdHJ1Y3QgbXdsOGtfZGV2aWNlX2luZm8gKmRpID0gcHJpdi0+ZGV2aWNlX2luZm87CisJc3RydWN0IGZpcm13YXJlICpmdyA9IHByaXYtPmZ3X3Vjb2RlOwogCWludCByYzsKIAlpbnQgbG9vcHM7CiAKIAlpZiAoIW1lbWNtcChmdy0+ZGF0YSwgIlx4MDFceDAwXHgwMFx4MDAiLCA0KSkgewotCQlzdHJ1Y3QgZmlybXdhcmUgKmhlbHBlciA9IHByaXYtPmZ3LmhlbHBlcjsKKwkJc3RydWN0IGZpcm13YXJlICpoZWxwZXIgPSBwcml2LT5md19oZWxwZXI7CiAKIAkJaWYgKGhlbHBlciA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoZWxwZXIgaW1hZ2UgbmVlZGVkIGJ1dCBub25lICIKQEAgLTU4NCwxMCArNTc1LDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCWlmIChkaS0+bW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQotCQlpb3dyaXRlMzIoTVdMOEtfTU9ERV9BUCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKLQllbHNlCi0JCWlvd3JpdGUzMihNV0w4S19NT0RFX1NUQSwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwlpb3dyaXRlMzIoTVdMOEtfTU9ERV9TVEEsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CiAKIAlsb29wcyA9IDUwMDAwMDsKIAlkbyB7CkBAIC02NTgsNDMgKzY0Niw2IEBACiAJX19sZTE2CWFtc2R1X2VuYWJsZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0vKiBJbmxpbmUgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgUW9TIGZpZWxkIGluIGRhdGEgZGVzY3JpcHRvci4gICovCi1zdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AodTE2IHFvcykKLXsKLQl1MTYgdmFsX21hc2sgPSAxIDw8IDQ7Ci0KLQkvKiBFbmQgb2YgU2VydmljZSBQZXJpb2QgQml0IDQgKi8KLQlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYWNrKHUxNiBxb3MsIHU4IGFja19wb2xpY3kpCi17Ci0JdTE2IHZhbF9tYXNrID0gMHgzOwotCXU4CXNoaWZ0ID0gNTsKLQl1MTYgcW9zX21hc2sgPSB+KHZhbF9tYXNrIDw8IHNoaWZ0KTsKLQotCS8qIEFjayBQb2xpY3kgQml0IDUtNiAqLwotCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChhY2tfcG9saWN5ICYgdmFsX21hc2spIDw8IHNoaWZ0KTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9hbXNkdSh1MTYgcW9zKQotewotCXUxNiB2YWxfbWFzayA9IDEgPDwgNzsKLQotCS8qIEFNU0RVIHByZXNlbnQgQml0IDcgKi8KLQlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfcWxlbih1MTYgcW9zLCB1OCBsZW4pCi17Ci0JdTE2IHZhbF9tYXNrID0gMHhmZjsKLQl1OAlzaGlmdCA9IDg7Ci0JdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7Ci0KLQkvKiBRdWV1ZSBMZW5ndGggQml0cyA4LTE1ICovCi0JcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAoKGxlbiAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Ci19Ci0KIC8qIERNQSBoZWFkZXIgdXNlZCBieSBmaXJtd2FyZSBhbmQgaGFyZHdhcmUuICAqLwogc3RydWN0IG13bDhrX2RtYV9kYXRhIHsKIAlfX2xlMTYgZndsZW47CkBAIC03NjEsOSArNzEyLDkgQEAKIAogCiAvKgotICogUGFja2V0IHJlY2VwdGlvbiBmb3IgODh3ODM2Ni4KKyAqIFBhY2tldCByZWNlcHRpb24gZm9yIDg4dzgzNjYgQVAgZmlybXdhcmUuCiAgKi8KLXN0cnVjdCBtd2w4a19yeGRfODM2NiB7CitzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgewogCV9fbGUxNiBwa3RfbGVuOwogCV9fdTggc3EyOwogCV9fdTggcmF0ZTsKQEAgLTc4MSwyMyArNzMyLDIzIEBACiAJX191OCByeF9jdHJsOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBNV0w4S184MzY2X1JBVEVfSU5GT19NQ1NfRk9STUFUCQkweDgwCi0jZGVmaW5lIE1XTDhLXzgzNjZfUkFURV9JTkZPXzQwTUhaCQkweDQwCi0jZGVmaW5lIE1XTDhLXzgzNjZfUkFURV9JTkZPX1JBVEVJRCh4KQkJKCh4KSAmIDB4M2YpCisjZGVmaW5lIE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPX01DU19GT1JNQVQJMHg4MAorI2RlZmluZSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT180ME1IWgkJMHg0MAorI2RlZmluZSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19SQVRFSUQoeCkJKCh4KSAmIDB4M2YpCiAKLSNkZWZpbmUgTVdMOEtfODM2Nl9SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHg4MAorI2RlZmluZSBNV0w4S184MzY2X0FQX1JYX0NUUkxfT1dORURfQllfSE9TVAkweDgwCiAKLXN0YXRpYyB2b2lkIG13bDhrX3J4ZF84MzY2X2luaXQodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBuZXh0X2RtYV9hZGRyKQorc3RhdGljIHZvaWQgbXdsOGtfcnhkXzgzNjZfYXBfaW5pdCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IG5leHRfZG1hX2FkZHIpCiB7Ci0Jc3RydWN0IG13bDhrX3J4ZF84MzY2ICpyeGQgPSBfcnhkOworCXN0cnVjdCBtd2w4a19yeGRfODM2Nl9hcCAqcnhkID0gX3J4ZDsKIAogCXJ4ZC0+bmV4dF9yeGRfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIobmV4dF9kbWFfYWRkcik7Ci0JcnhkLT5yeF9jdHJsID0gTVdMOEtfODM2Nl9SWF9DVFJMX09XTkVEX0JZX0hPU1Q7CisJcnhkLT5yeF9jdHJsID0gTVdMOEtfODM2Nl9BUF9SWF9DVFJMX09XTkVEX0JZX0hPU1Q7CiB9CiAKLXN0YXRpYyB2b2lkIG13bDhrX3J4ZF84MzY2X3JlZmlsbCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IGFkZHIsIGludCBsZW4pCitzdGF0aWMgdm9pZCBtd2w4a19yeGRfODM2Nl9hcF9yZWZpbGwodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbGVuKQogewotCXN0cnVjdCBtd2w4a19yeGRfODM2NiAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgKnJ4ZCA9IF9yeGQ7CiAKIAlyeGQtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwogCXJ4ZC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwpAQCAtODA2LDEyICs3NTcsMTIgQEAKIH0KIAogc3RhdGljIGludAotbXdsOGtfcnhkXzgzNjZfcHJvY2Vzcyh2b2lkICpfcnhkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkgICAgICAgX19sZTE2ICpxb3MpCittd2w4a19yeGRfODM2Nl9hcF9wcm9jZXNzKHZvaWQgKl9yeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCisJCQkgIF9fbGUxNiAqcW9zKQogewotCXN0cnVjdCBtd2w4a19yeGRfODM2NiAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgKnJ4ZCA9IF9yeGQ7CiAKLQlpZiAoIShyeGQtPnJ4X2N0cmwgJiBNV0w4S184MzY2X1JYX0NUUkxfT1dORURfQllfSE9TVCkpCisJaWYgKCEocnhkLT5yeF9jdHJsICYgTVdMOEtfODM2Nl9BUF9SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQogCQlyZXR1cm4gLTE7CiAJcm1iKCk7CiAKQEAgLTgyMCwxMSArNzcxLDExIEBACiAJc3RhdHVzLT5zaWduYWwgPSAtcnhkLT5yc3NpOwogCXN0YXR1cy0+bm9pc2UgPSAtcnhkLT5ub2lzZV9mbG9vcjsKIAotCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X1JBVEVfSU5GT19NQ1NfRk9STUFUKSB7CisJaWYgKHJ4ZC0+cmF0ZSAmIE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPX01DU19GT1JNQVQpIHsKIAkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSFQ7Ci0JCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X1JBVEVfSU5GT180ME1IWikKKwkJaWYgKHJ4ZC0+cmF0ZSAmIE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPXzQwTUhaKQogCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7Ci0JCXN0YXR1cy0+cmF0ZV9pZHggPSBNV0w4S184MzY2X1JBVEVfSU5GT19SQVRFSUQocnhkLT5yYXRlKTsKKwkJc3RhdHVzLT5yYXRlX2lkeCA9IE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPX1JBVEVJRChyeGQtPnJhdGUpOwogCX0gZWxzZSB7CiAJCWludCBpOwogCkBAIC04NDQsMTcgKzc5NSwxNyBAQAogCXJldHVybiBsZTE2X3RvX2NwdShyeGQtPnBrdF9sZW4pOwogfQogCi1zdGF0aWMgc3RydWN0IHJ4ZF9vcHMgcnhkXzgzNjZfb3BzID0gewotCS5yeGRfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhkXzgzNjYpLAotCS5yeGRfaW5pdAk9IG13bDhrX3J4ZF84MzY2X2luaXQsCi0JLnJ4ZF9yZWZpbGwJPSBtd2w4a19yeGRfODM2Nl9yZWZpbGwsCi0JLnJ4ZF9wcm9jZXNzCT0gbXdsOGtfcnhkXzgzNjZfcHJvY2VzcywKK3N0YXRpYyBzdHJ1Y3QgcnhkX29wcyByeGRfODM2Nl9hcF9vcHMgPSB7CisJLnJ4ZF9zaXplCT0gc2l6ZW9mKHN0cnVjdCBtd2w4a19yeGRfODM2Nl9hcCksCisJLnJ4ZF9pbml0CT0gbXdsOGtfcnhkXzgzNjZfYXBfaW5pdCwKKwkucnhkX3JlZmlsbAk9IG13bDhrX3J4ZF84MzY2X2FwX3JlZmlsbCwKKwkucnhkX3Byb2Nlc3MJPSBtd2w4a19yeGRfODM2Nl9hcF9wcm9jZXNzLAogfTsKIAogLyoKLSAqIFBhY2tldCByZWNlcHRpb24gZm9yIDg4dzg2ODcuCisgKiBQYWNrZXQgcmVjZXB0aW9uIGZvciBTVEEgZmlybXdhcmUuCiAgKi8KLXN0cnVjdCBtd2w4a19yeGRfODY4NyB7CitzdHJ1Y3QgbXdsOGtfcnhkX3N0YSB7CiAJX19sZTE2IHBrdF9sZW47CiAJX191OCBsaW5rX3F1YWxpdHk7CiAJX191OCBub2lzZV9sZXZlbDsKQEAgLTg3MSwyNiArODIyLDI2IEBACiAJX191OCBwYWQyWzJdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBNV0w4S184Njg3X1JBVEVfSU5GT19TSE9SVFBSRQkJMHg4MDAwCi0jZGVmaW5lIE1XTDhLXzg2ODdfUkFURV9JTkZPX0FOVFNFTEVDVCh4KQkoKCh4KSA+PiAxMSkgJiAweDMpCi0jZGVmaW5lIE1XTDhLXzg2ODdfUkFURV9JTkZPX1JBVEVJRCh4KQkJKCgoeCkgPj4gMykgJiAweDNmKQotI2RlZmluZSBNV0w4S184Njg3X1JBVEVfSU5GT180ME1IWgkJMHgwMDA0Ci0jZGVmaW5lIE1XTDhLXzg2ODdfUkFURV9JTkZPX1NIT1JUR0kJCTB4MDAwMgotI2RlZmluZSBNV0w4S184Njg3X1JBVEVfSU5GT19NQ1NfRk9STUFUCQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfU1RBX1JBVEVfSU5GT19TSE9SVFBSRQkJMHg4MDAwCisjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fQU5UU0VMRUNUKHgpCSgoKHgpID4+IDExKSAmIDB4MykKKyNkZWZpbmUgTVdMOEtfU1RBX1JBVEVfSU5GT19SQVRFSUQoeCkJCSgoKHgpID4+IDMpICYgMHgzZikKKyNkZWZpbmUgTVdMOEtfU1RBX1JBVEVfSU5GT180ME1IWgkJMHgwMDA0CisjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fU0hPUlRHSQkJMHgwMDAyCisjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fTUNTX0ZPUk1BVAkJMHgwMDAxCiAKLSNkZWZpbmUgTVdMOEtfODY4N19SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHgwMgorI2RlZmluZSBNV0w4S19TVEFfUlhfQ1RSTF9PV05FRF9CWV9IT1NUCQkweDAyCiAKLXN0YXRpYyB2b2lkIG13bDhrX3J4ZF84Njg3X2luaXQodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBuZXh0X2RtYV9hZGRyKQorc3RhdGljIHZvaWQgbXdsOGtfcnhkX3N0YV9pbml0KHZvaWQgKl9yeGQsIGRtYV9hZGRyX3QgbmV4dF9kbWFfYWRkcikKIHsKLQlzdHJ1Y3QgbXdsOGtfcnhkXzg2ODcgKnJ4ZCA9IF9yeGQ7CisJc3RydWN0IG13bDhrX3J4ZF9zdGEgKnJ4ZCA9IF9yeGQ7CiAKIAlyeGQtPm5leHRfcnhkX3BoeXNfYWRkciA9IGNwdV90b19sZTMyKG5leHRfZG1hX2FkZHIpOwotCXJ4ZC0+cnhfY3RybCA9IE1XTDhLXzg2ODdfUlhfQ1RSTF9PV05FRF9CWV9IT1NUOworCXJ4ZC0+cnhfY3RybCA9IE1XTDhLX1NUQV9SWF9DVFJMX09XTkVEX0JZX0hPU1Q7CiB9CiAKLXN0YXRpYyB2b2lkIG13bDhrX3J4ZF84Njg3X3JlZmlsbCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IGFkZHIsIGludCBsZW4pCitzdGF0aWMgdm9pZCBtd2w4a19yeGRfc3RhX3JlZmlsbCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IGFkZHIsIGludCBsZW4pCiB7Ci0Jc3RydWN0IG13bDhrX3J4ZF84Njg3ICpyeGQgPSBfcnhkOworCXN0cnVjdCBtd2w4a19yeGRfc3RhICpyeGQgPSBfcnhkOwogCiAJcnhkLT5wa3RfbGVuID0gY3B1X3RvX2xlMTYobGVuKTsKIAlyeGQtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKQEAgLTg5OSwxMyArODUwLDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW13bDhrX3J4ZF84Njg3X3Byb2Nlc3Modm9pZCAqX3J4ZCwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKK213bDhrX3J4ZF9zdGFfcHJvY2Vzcyh2b2lkICpfcnhkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAogCQkgICAgICAgX19sZTE2ICpxb3MpCiB7Ci0Jc3RydWN0IG13bDhrX3J4ZF84Njg3ICpyeGQgPSBfcnhkOworCXN0cnVjdCBtd2w4a19yeGRfc3RhICpyeGQgPSBfcnhkOwogCXUxNiByYXRlX2luZm87CiAKLQlpZiAoIShyeGQtPnJ4X2N0cmwgJiBNV0w4S184Njg3X1JYX0NUUkxfT1dORURfQllfSE9TVCkpCisJaWYgKCEocnhkLT5yeF9jdHJsICYgTVdMOEtfU1RBX1JYX0NUUkxfT1dORURfQllfSE9TVCkpCiAJCXJldHVybiAtMTsKIAlybWIoKTsKIApAQCAtOTE1LDE2ICs4NjYsMTYgQEAKIAogCXN0YXR1cy0+c2lnbmFsID0gLXJ4ZC0+cnNzaTsKIAlzdGF0dXMtPm5vaXNlID0gLXJ4ZC0+bm9pc2VfbGV2ZWw7Ci0Jc3RhdHVzLT5hbnRlbm5hID0gTVdMOEtfODY4N19SQVRFX0lORk9fQU5UU0VMRUNUKHJhdGVfaW5mbyk7Ci0Jc3RhdHVzLT5yYXRlX2lkeCA9IE1XTDhLXzg2ODdfUkFURV9JTkZPX1JBVEVJRChyYXRlX2luZm8pOworCXN0YXR1cy0+YW50ZW5uYSA9IE1XTDhLX1NUQV9SQVRFX0lORk9fQU5UU0VMRUNUKHJhdGVfaW5mbyk7CisJc3RhdHVzLT5yYXRlX2lkeCA9IE1XTDhLX1NUQV9SQVRFX0lORk9fUkFURUlEKHJhdGVfaW5mbyk7CiAKLQlpZiAocmF0ZV9pbmZvICYgTVdMOEtfODY4N19SQVRFX0lORk9fU0hPUlRQUkUpCisJaWYgKHJhdGVfaW5mbyAmIE1XTDhLX1NUQV9SQVRFX0lORk9fU0hPUlRQUkUpCiAJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwotCWlmIChyYXRlX2luZm8gJiBNV0w4S184Njg3X1JBVEVfSU5GT180ME1IWikKKwlpZiAocmF0ZV9pbmZvICYgTVdMOEtfU1RBX1JBVEVfSU5GT180ME1IWikKIAkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7Ci0JaWYgKHJhdGVfaW5mbyAmIE1XTDhLXzg2ODdfUkFURV9JTkZPX1NIT1JUR0kpCisJaWYgKHJhdGVfaW5mbyAmIE1XTDhLX1NUQV9SQVRFX0lORk9fU0hPUlRHSSkKIAkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRfR0k7Ci0JaWYgKHJhdGVfaW5mbyAmIE1XTDhLXzg2ODdfUkFURV9JTkZPX01DU19GT1JNQVQpCisJaWYgKHJhdGVfaW5mbyAmIE1XTDhLX1NUQV9SQVRFX0lORk9fTUNTX0ZPUk1BVCkKIAkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSFQ7CiAKIAlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwpAQCAtOTM1LDExICs4ODYsMTEgQEAKIAlyZXR1cm4gbGUxNl90b19jcHUocnhkLT5wa3RfbGVuKTsKIH0KIAotc3RhdGljIHN0cnVjdCByeGRfb3BzIHJ4ZF84Njg3X29wcyA9IHsKLQkucnhkX3NpemUJPSBzaXplb2Yoc3RydWN0IG13bDhrX3J4ZF84Njg3KSwKLQkucnhkX2luaXQJPSBtd2w4a19yeGRfODY4N19pbml0LAotCS5yeGRfcmVmaWxsCT0gbXdsOGtfcnhkXzg2ODdfcmVmaWxsLAotCS5yeGRfcHJvY2Vzcwk9IG13bDhrX3J4ZF84Njg3X3Byb2Nlc3MsCitzdGF0aWMgc3RydWN0IHJ4ZF9vcHMgcnhkX3N0YV9vcHMgPSB7CisJLnJ4ZF9zaXplCT0gc2l6ZW9mKHN0cnVjdCBtd2w4a19yeGRfc3RhKSwKKwkucnhkX2luaXQJPSBtd2w4a19yeGRfc3RhX2luaXQsCisJLnJ4ZF9yZWZpbGwJPSBtd2w4a19yeGRfc3RhX3JlZmlsbCwKKwkucnhkX3Byb2Nlc3MJPSBtd2w4a19yeGRfc3RhX3Byb2Nlc3MsCiB9OwogCiAKQEAgLTExNTMsMTYgKzExMDQsMTggQEAKICAqIFBhY2tldCB0cmFuc21pc3Npb24uCiAgKi8KIAotLyogVHJhbnNtaXQgcGFja2V0IEFDSyBwb2xpY3kgKi8KLSNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMCQkwCi0jZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX0JMT0NLQUNLCQkzCi0KICNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PSwkJCTB4MDAwMDAwMDEKICNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWQkJMHgwMDAwMDAwMgogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkJCTB4MDAwMDAwMDQKICNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFgJCTB4MDAwMDAwMDgKICNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRAkJMHg4MDAwMDAwMAogCisjZGVmaW5lIE1XTDhLX1FPU19RTEVOX1VOU1BFQwkJCTB4ZmYwMAorI2RlZmluZSBNV0w4S19RT1NfQUNLX1BPTElDWV9NQVNLCQkweDAwNjAKKyNkZWZpbmUgTVdMOEtfUU9TX0FDS19QT0xJQ1lfTk9STUFMCQkweDAwMDAKKyNkZWZpbmUgTVdMOEtfUU9TX0FDS19QT0xJQ1lfQkxPQ0tBQ0sJCTB4MDA2MAorI2RlZmluZSBNV0w4S19RT1NfRU9TUAkJCQkweDAwMTAKKwogc3RydWN0IG13bDhrX3R4X2Rlc2MgewogCV9fbGUzMiBzdGF0dXM7CiAJX191OCBkYXRhX3JhdGU7CkBAIC0xNDU5LDI0ICsxNDEyLDE3IEBACiAJaWYgKGllZWU4MDIxMV9pc19tZ210KHdoLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBpZWVlODAyMTFfaXNfY3RsKHdoLT5mcmFtZV9jb250cm9sKSkgewogCQl0eGRhdGFyYXRlID0gMDsKLQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7Ci0JCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCi0JCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOworCQlxb3MgfD0gTVdMOEtfUU9TX1FMRU5fVU5TUEVDIHwgTVdMOEtfUU9TX0VPU1A7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YSh3aC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhkYXRhcmF0ZSA9IDE7CiAJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjEpKQogCQkJdHhzdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7CiAKLQkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KKwkJcW9zICY9IH5NV0w4S19RT1NfQUNLX1BPTElDWV9NQVNLOwogCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQotCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX0JMT0NLQUNLKTsKKwkJCXFvcyB8PSBNV0w4S19RT1NfQUNLX1BPTElDWV9CTE9DS0FDSzsKIAkJZWxzZQotCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTCk7Ci0KLQkJaWYgKHFvcyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCkKLQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUocW9zKTsKKwkJCXFvcyB8PSBNV0w4S19RT1NfQUNLX1BPTElDWV9OT1JNQUw7CiAJfQogCiAJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLApAQCAtMTg5Nyw5ICsxODQzLDkgQEAKIH0KIAogLyoKLSAqIENNRF84MDJfMTFfR0VUX1NUQVQuCisgKiBDTURfR0VUX1NUQVQuCiAgKi8KLXN0cnVjdCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0IHsKK3N0cnVjdCBtd2w4a19jbWRfZ2V0X3N0YXQgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMzIgc3RhdHNbNjRdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKQEAgLTE5MDksMTAgKzE4NTUsMTAgQEAKICNkZWZpbmUgTVdMOEtfU1RBVF9GQ1NfRVJST1IJMjQKICNkZWZpbmUgTVdMOEtfU1RBVF9SVFNfU1VDQ0VTUwkxMQogCi1zdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQorc3RhdGljIGludCBtd2w4a19jbWRfZ2V0X3N0YXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQgKmNtZDsKKwlzdHJ1Y3QgbXdsOGtfY21kX2dldF9zdGF0ICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwpAQCAtMTkzOSw5ICsxODg1LDkgQEAKIH0KIAogLyoKLSAqIENNRF84MDJfMTFfUkFESU9fQ09OVFJPTC4KKyAqIENNRF9SQURJT19DT05UUk9MLgogICovCi1zdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sIHsKK3N0cnVjdCBtd2w4a19jbWRfcmFkaW9fY29udHJvbCB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IGNvbnRyb2w7CkBAIC0xOTQ5LDEwICsxODk1LDEwIEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgaW50Ci1td2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlLCBib29sIGZvcmNlKQorbXdsOGtfY21kX3JhZGlvX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlLCBib29sIGZvcmNlKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbCAqY21kOworCXN0cnVjdCBtd2w4a19jbWRfcmFkaW9fY29udHJvbCAqY21kOwogCWludCByYzsKIAogCWlmIChlbmFibGUgPT0gcHJpdi0+cmFkaW9fb24gJiYgIWZvcmNlKQpAQCAtMTk3NywzNiArMTkyMywzMiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgaW50IG13bDhrX2NtZF9yYWRpb19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXJldHVybiBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIDAsIDApOworCXJldHVybiBtd2w4a19jbWRfcmFkaW9fY29udHJvbChodywgMCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgaW50IG13bDhrX2NtZF9yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMSwgMCk7CisJcmV0dXJuIG13bDhrX2NtZF9yYWRpb19jb250cm9sKGh3LCAxLCAwKTsKIH0KIAogc3RhdGljIGludAogbXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHNob3J0X3ByZWFtYmxlKQogewotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OwotCi0JaWYgKGh3ID09IE5VTEwgfHwgaHctPnByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IHNob3J0X3ByZWFtYmxlOwogCi0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMSwgMSk7CisJcmV0dXJuIG13bDhrX2NtZF9yYWRpb19jb250cm9sKGh3LCAxLCAxKTsKIH0KIAogLyoKLSAqIENNRF84MDJfMTFfUkZfVFhfUE9XRVIuCisgKiBDTURfUkZfVFhfUE9XRVIuCiAgKi8KICNkZWZpbmUgTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUwJOAogCi1zdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciB7CitzdHJ1Y3QgbXdsOGtfY21kX3JmX3R4X3Bvd2VyIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgc3VwcG9ydF9sZXZlbDsKQEAgLTIwMTUsOSArMTk1Nyw5IEBACiAJX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZEJtKQorc3RhdGljIGludCBtd2w4a19jbWRfcmZfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBkQm0pCiB7Ci0Jc3RydWN0IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIgKmNtZDsKKwlzdHJ1Y3QgbXdsOGtfY21kX3JmX3R4X3Bvd2VyICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwpAQCAtMjE1OSw2ICsyMTAxLDE3MSBAQAogfQogCiAvKgorICogQ01EX1NFVF9BSUQuCisgKi8KKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRAkJCTB4MDAKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMUcJCQkJMHgwNworI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZCQkweDAyCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTAkJCTB4MDYKKworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNglhaWQ7CisKKwkgLyogQVAncyBNQUMgYWRkcmVzcyAoQlNTSUQpICovCisJX191OAlic3NpZFtFVEhfQUxFTl07CisJX19sZTE2CXByb3RlY3Rpb25fbW9kZTsKKwlfX3U4CXN1cHBfcmF0ZXNbMTRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7CisJc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCAqY21kOworCXUxNiBwcm90X21vZGU7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9BSUQpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5haWQgPSBjcHVfdG9fbGUxNih2aWYtPmJzc19jb25mLmFpZCk7CisKKwltZW1jcHkoY21kLT5ic3NpZCwgbXZfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOworCisJaWYgKHZpZi0+YnNzX2NvbmYudXNlX2N0c19wcm90KSB7CisJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFHOworCX0gZWxzZSB7CisJCXN3aXRjaCAodmlmLT5ic3NfY29uZi5odF9vcGVyYXRpb25fbW9kZSAmCisJCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OKSB7CisJCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl8yME1IWjoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkhUX01JWEVEOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCX0KKwl9CisJY21kLT5wcm90ZWN0aW9uX21vZGUgPSBjcHVfdG9fbGUxNihwcm90X21vZGUpOworCisJbWVtY3B5KGNtZC0+c3VwcF9yYXRlcywgbXdsOGtfcmF0ZWlkcywgc2l6ZW9mKG13bDhrX3JhdGVpZHMpKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURS4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZSB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fdTgJbGVnYWN5X3JhdGVzWzE0XTsKKworCS8qIEJpdG1hcCBmb3Igc3VwcG9ydGVkIE1DUyBjb2Rlcy4gICovCisJX191OAltY3Nfc2V0WzE2XTsKKwlfX3U4CXJlc2VydmVkWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQKK213bDhrX2NtZF9zZXRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCW1lbWNweShjbWQtPmxlZ2FjeV9yYXRlcywgbXdsOGtfcmF0ZWlkcywgc2l6ZW9mKG13bDhrX3JhdGVpZHMpKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9GSU5BTElaRV9KT0lOLgorICovCisjZGVmaW5lIE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4JMTI4CisKK3N0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbDsJLyogTnVtYmVyIG9mIGJlYWNvbiBwZXJpb2RzIHRvIHNsZWVwICovCisJX191OCBiZWFjb25fZGF0YVtNV0w4S19GSl9CRUFDT05fTUFYTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmZyYW1lLAorCQkJCSAgIGludCBmcmFtZWxlbiwgaW50IGR0aW0pCit7CisJc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpwYXlsb2FkID0gZnJhbWU7CisJaW50IHBheWxvYWRfbGVuOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfRklOQUxJWkVfSk9JTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPnNsZWVwX2ludGVydmFsID0gY3B1X3RvX2xlMzIoZHRpbSA/IGR0aW0gOiAxKTsKKworCXBheWxvYWRfbGVuID0gZnJhbWVsZW4gLSBpZWVlODAyMTFfaGRybGVuKHBheWxvYWQtPmZyYW1lX2NvbnRyb2wpOworCWlmIChwYXlsb2FkX2xlbiA8IDApCisJCXBheWxvYWRfbGVuID0gMDsKKwllbHNlIGlmIChwYXlsb2FkX2xlbiA+IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4pCisJCXBheWxvYWRfbGVuID0gTVdMOEtfRkpfQkVBQ09OX01BWExFTjsKKworCW1lbWNweShjbWQtPmJlYWNvbl9kYXRhLCAmcGF5bG9hZC0+dS5iZWFjb24sIHBheWxvYWRfbGVuKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUlRTX1RIUkVTSE9MRC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfcnRzX3RocmVzaG9sZCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHRocmVzaG9sZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MTYgYWN0aW9uLCB1MTYgdGhyZXNob2xkKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3J0c190aHJlc2hvbGQgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUlRTX1RIUkVTSE9MRCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7CisJY21kLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih0aHJlc2hvbGQpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgogICogQ01EX1NFVF9TTE9ULgogICovCiBzdHJ1Y3QgbXdsOGtfY21kX3NldF9zbG90IHsKQEAgLTIxODgsMTk0ICsyMjk1LDYgQEAKIH0KIAogLyoKLSAqIENNRF9NSU1PX0NPTkZJRy4KLSAqLwotc3RydWN0IG13bDhrX2NtZF9taW1vX2NvbmZpZyB7Ci0Jc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUzMiBhY3Rpb247Ci0JX191OCByeF9hbnRlbm5hX21hcDsKLQlfX3U4IHR4X2FudGVubmFfbWFwOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19jbWRfbWltb19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggcngsIF9fdTggdHgpCi17Ci0Jc3RydWN0IG13bDhrX2NtZF9taW1vX2NvbmZpZyAqY21kOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9NSU1PX0NPTkZJRyk7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKCh1MzIpTVdMOEtfQ01EX1NFVCk7Ci0JY21kLT5yeF9hbnRlbm5hX21hcCA9IHJ4OwotCWNtZC0+dHhfYW50ZW5uYV9tYXAgPSB0eDsKLQotCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIENNRF9FTkFCTEVfU05JRkZFUi4KLSAqLwotc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciB7Ci0Jc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUzMiBhY3Rpb247Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX2VuYWJsZV9zbmlmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyICpjbWQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoISFlbmFibGUpOwotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogQ01EX1NFVF9NQUNfQUREUi4KLSAqLwotc3RydWN0IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIgewotCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgbWFjX3R5cGU7Ci0JCQlfX3U4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQkJfSBtYnNzOwotCQlfX3U4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQl9OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19zZXRfbWFjX2FkZHIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICptYWMpCi17Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgbXdsOGtfY21kX3NldF9tYWNfYWRkciAqY21kOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfTUFDX0FERFIpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JaWYgKHByaXYtPmFwX2Z3KSB7Ci0JCWNtZC0+bWJzcy5tYWNfdHlwZSA9IDA7Ci0JCW1lbWNweShjbWQtPm1ic3MubWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbWNweShjbWQtPm1hY19hZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQl9Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQotLyoKLSAqIENNRF9TRVRfUkFURUFEQVBUX01PREUuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSB7Ci0Jc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUxNiBhY3Rpb247Ci0JX19sZTE2IG1vZGU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3UxNiBtb2RlKQotewotCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSAqY21kOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKLQljbWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQotCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIENNRF9TRVRfV01NX01PREUuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSB7Ci0Jc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCV9fbGUxNiBhY3Rpb247Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX3NldF93bW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IG13bDhrX2NtZF9zZXRfd21tICpjbWQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9XTU1fTU9ERSk7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KCEhZW5hYmxlKTsKLQotCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0Ja2ZyZWUoY21kKTsKLQotCWlmICghcmMpCi0JCXByaXYtPndtbV9lbmFibGVkID0gZW5hYmxlOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogQ01EX1NFVF9SVFNfVEhSRVNIT0xELgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgewotCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMTYgYWN0aW9uOwotCV9fbGUxNiB0aHJlc2hvbGQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICAgdTE2IGFjdGlvbiwgdTE2IHRocmVzaG9sZCkKLXsKLQlzdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUlRTX1RIUkVTSE9MRCk7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7Ci0JY21kLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih0aHJlc2hvbGQpOwotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKgogICogQ01EX1NFVF9FRENBX1BBUkFNUy4KICAqLwogc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgewpAQCAtMjQyNiw5ICsyMzQ1LDkgQEAKIAkJCQkgTVdMOEtfU0VUX0VEQ0FfQUlGUykKIAogc3RhdGljIGludAotbXdsOGtfc2V0X2VkY2FfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHFudW0sCi0JCV9fdTE2IGN3X21pbiwgX191MTYgY3dfbWF4LAotCQlfX3U4IGFpZnMsIF9fdTE2IHR4b3ApCittd2w4a19jbWRfc2V0X2VkY2FfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHFudW0sCisJCQkgIF9fdTE2IGN3X21pbiwgX191MTYgY3dfbWF4LAorCQkJICBfX3U4IGFpZnMsIF9fdTE2IHR4b3ApCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyAqY21kOwpAQCAtMjQ2NywyMDIgKzIzODYsNjAgQEAKIH0KIAogLyoKLSAqIENNRF9GSU5BTElaRV9KT0lOLgorICogQ01EX1NFVF9XTU1fTU9ERS4KICAqLwotI2RlZmluZSBNV0w4S19GSl9CRUFDT05fTUFYTEVOCTEyOAotCi1zdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4geworc3RydWN0IG13bDhrX2NtZF9zZXRfd21tX21vZGUgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMzIgc2xlZXBfaW50ZXJ2YWw7CS8qIE51bWJlciBvZiBiZWFjb24gcGVyaW9kcyB0byBzbGVlcCAqLwotCV9fdTggYmVhY29uX2RhdGFbTVdMOEtfRkpfQkVBQ09OX01BWExFTl07CisJX19sZTE2IGFjdGlvbjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXN0YXRpYyBpbnQgbXdsOGtfZmluYWxpemVfam9pbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZnJhbWUsCi0JCQkgICAgICAgaW50IGZyYW1lbGVuLCBpbnQgZHRpbSkKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF93bW1fbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCiB7Ci0Jc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luICpjbWQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICpwYXlsb2FkID0gZnJhbWU7Ci0JaW50IHBheWxvYWRfbGVuOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfd21tX21vZGUgKmNtZDsKIAlpbnQgcmM7CiAKIAljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNtZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4pOworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1dNTV9NT0RFKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihkdGltID8gZHRpbSA6IDEpOwotCi0JcGF5bG9hZF9sZW4gPSBmcmFtZWxlbiAtIGllZWU4MDIxMV9oZHJsZW4ocGF5bG9hZC0+ZnJhbWVfY29udHJvbCk7Ci0JaWYgKHBheWxvYWRfbGVuIDwgMCkKLQkJcGF5bG9hZF9sZW4gPSAwOwotCWVsc2UgaWYgKHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTikKLQkJcGF5bG9hZF9sZW4gPSBNV0w4S19GSl9CRUFDT05fTUFYTEVOOwotCi0JbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoISFlbmFibGUpOwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwogCisJaWYgKCFyYykKKwkJcHJpdi0+d21tX2VuYWJsZWQgPSBlbmFibGU7CisKIAlyZXR1cm4gcmM7CiB9CiAKIC8qCi0gKiBDTURfVVBEQVRFX1NUQURCLgorICogQ01EX01JTU9fQ09ORklHLgogICovCi1zdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgeworc3RydWN0IG13bDhrX2NtZF9taW1vX2NvbmZpZyB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwotCi0JLyogU2VlIFNUQURCX0FDVElPTl9UWVBFICovCi0JX19sZTMyCWFjdGlvbjsKLQotCS8qIFBlZXIgTUFDIGFkZHJlc3MgKi8KLQlfX3U4CXBlZXJfYWRkcltFVEhfQUxFTl07Ci0KLQlfX2xlMzIJcmVzZXJ2ZWQ7Ci0KLQkvKiBQZWVyIGluZm8gLSB2YWxpZCBkdXJpbmcgYWRkL3VwZGF0ZS4gICovCi0Jc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvCXBlZXJfaW5mbzsKKwlfX2xlMzIgYWN0aW9uOworCV9fdTggcnhfYW50ZW5uYV9tYXA7CisJX191OCB0eF9hbnRlbm5hX21hcDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXN0YXRpYyBpbnQgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIF9fdTMyIGFjdGlvbikKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQogewotCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKLQlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgKmNtZDsKLQlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gKnBlZXJfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VQREFURV9TVEFEQik7CisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9NSU1PX0NPTkZJRyk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKLQlwZWVyX2luZm8gPSAmY21kLT5wZWVyX2luZm87Ci0JbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgTVdMOEtfU1RBX0RCX0FERF9FTlRSWToKLQljYXNlIE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlk6Ci0JCS8qIEJ1aWxkIHBlZXJfaW5mbyBibG9jayAqLwotCQlwZWVyX2luZm8tPnBlZXJfdHlwZSA9IE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVDsKLQkJcGVlcl9pbmZvLT5iYXNpY19jYXBzID0gY3B1X3RvX2xlMTYoaW5mby0+YXNzb2NfY2FwYWJpbGl0eSk7Ci0JCW1lbWNweShwZWVyX2luZm8tPmxlZ2FjeV9yYXRlcywgbXdsOGtfcmF0ZWlkcywKLQkJICAgICAgIHNpemVvZihtd2w4a19yYXRlaWRzKSk7Ci0JCXBlZXJfaW5mby0+aW50ZXJvcCA9IDE7Ci0JCXBlZXJfaW5mby0+YW1zZHVfZW5hYmxlZCA9IDA7Ci0KLQkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQkJaWYgKHJjID09IDApCi0JCQltdl92aWYtPnBlZXJfaWQgPSBwZWVyX2luZm8tPnN0YXRpb25faWQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlk6Ci0JY2FzZSBNV0w4S19TVEFfREJfRkxVU0g6Ci0JZGVmYXVsdDoKLQkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQkJaWYgKHJjID09IDApCi0JCQltdl92aWYtPnBlZXJfaWQgPSAwOwotCQlicmVhazsKLQl9Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIENNRF9TRVRfQUlELgotICovCi0jZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQJCQkweDAwCi0jZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFHCQkJCTB4MDcKLSNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWQkJMHgwMgotI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEwJCQkweDA2Ci0KLXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgewotCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMTYJYWlkOwotCi0JIC8qIEFQJ3MgTUFDIGFkZHJlc3MgKEJTU0lEKSAqLwotCV9fdTgJYnNzaWRbRVRIX0FMRU5dOwotCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7Ci0JX191OAlzdXBwX3JhdGVzWzE0XTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOwotCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgKmNtZDsKLQl1MTYgcHJvdF9tb2RlOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfQUlEKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWlkID0gY3B1X3RvX2xlMTYoaW5mby0+YWlkKTsKLQotCW1lbWNweShjbWQtPmJzc2lkLCBtdl92aWYtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlpZiAoaW5mby0+dXNlX2N0c19wcm90KSB7Ci0JCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFHOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoaW5mby0+aHRfb3BlcmF0aW9uX21vZGUgJgotCQkJSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTikgewotCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fMjBNSFo6Ci0JCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05IVF9NSVhFRDoKLQkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWNtZC0+cHJvdGVjdGlvbl9tb2RlID0gY3B1X3RvX2xlMTYocHJvdF9tb2RlKTsKLQotCW1lbWNweShjbWQtPnN1cHBfcmF0ZXMsIG13bDhrX3JhdGVpZHMsIHNpemVvZihtd2w4a19yYXRlaWRzKSk7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfU0VUX1JBVEUuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgewotCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX3U4CWxlZ2FjeV9yYXRlc1sxNF07Ci0KLQkvKiBCaXRtYXAgZm9yIHN1cHBvcnRlZCBNQ1MgY29kZXMuICAqLwotCV9fdTgJbWNzX3NldFsxNl07Ci0JX191OAlyZXNlcnZlZFsxNl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgaW50IG13bDhrX3VwZGF0ZV9yYXRlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEUpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JbWVtY3B5KGNtZC0+bGVnYWN5X3JhdGVzLCBtd2w4a19yYXRlaWRzLCBzaXplb2YobXdsOGtfcmF0ZWlkcykpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKTsKKwljbWQtPnJ4X2FudGVubmFfbWFwID0gcng7CisJY21kLT50eF9hbnRlbm5hX21hcCA9IHR4OwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwpAQCAtMjc1NSw2ICsyNTMyLDE2OSBAQAogCXJldHVybiByYzsKIH0KIAorLyoKKyAqIENNRF9FTkFCTEVfU05JRkZFUi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBhY3Rpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9lbmFibGVfc25pZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKCEhZW5hYmxlKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfTUFDX0FERFIuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X21hY19hZGRyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTE2IG1hY190eXBlOworCQkJX191OCBtYWNfYWRkcltFVEhfQUxFTl07CisJCX0gbWJzczsKKwkJX191OCBtYWNfYWRkcltFVEhfQUxFTl07CisJfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9tYWNfYWRkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKm1hYykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfc2V0X21hY19hZGRyICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9NQUNfQUREUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwlpZiAocHJpdi0+YXBfZncpIHsKKwkJY21kLT5tYnNzLm1hY190eXBlID0gMDsKKwkJbWVtY3B5KGNtZC0+bWJzcy5tYWNfYWRkciwgbWFjLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGNtZC0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOworCX0KKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURUFEQVBUX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG1vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcmF0ZWFkYXB0X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTE2IG1vZGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1VQREFURV9TVEFEQi4KKyAqLworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhZGIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKworCS8qIFNlZSBTVEFEQl9BQ1RJT05fVFlQRSAqLworCV9fbGUzMglhY3Rpb247CisKKwkvKiBQZWVyIE1BQyBhZGRyZXNzICovCisJX191OAlwZWVyX2FkZHJbRVRIX0FMRU5dOworCisJX19sZTMyCXJlc2VydmVkOworCisJLyogUGVlciBpbmZvIC0gdmFsaWQgZHVyaW5nIGFkZC91cGRhdGUuICAqLworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbwlwZWVyX2luZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhZGIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIF9fdTMyIGFjdGlvbikKK3sKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFkYiAqY21kOworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyAqcGVlcl9pbmZvOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9VUERBVEVfU1RBREIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7CisJcGVlcl9pbmZvID0gJmNtZC0+cGVlcl9pbmZvOworCW1lbWNweShjbWQtPnBlZXJfYWRkciwgbXZfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1XTDhLX1NUQV9EQl9BRERfRU5UUlk6CisJY2FzZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZOgorCQkvKiBCdWlsZCBwZWVyX2luZm8gYmxvY2sgKi8KKwkJcGVlcl9pbmZvLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7CisJCXBlZXJfaW5mby0+YmFzaWNfY2FwcyA9CisJCQljcHVfdG9fbGUxNih2aWYtPmJzc19jb25mLmFzc29jX2NhcGFiaWxpdHkpOworCQltZW1jcHkocGVlcl9pbmZvLT5sZWdhY3lfcmF0ZXMsIG13bDhrX3JhdGVpZHMsCisJCSAgICAgICBzaXplb2YobXdsOGtfcmF0ZWlkcykpOworCQlwZWVyX2luZm8tPmludGVyb3AgPSAxOworCQlwZWVyX2luZm8tPmFtc2R1X2VuYWJsZWQgPSAwOworCisJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJCWlmIChyYyA9PSAwKQorCQkJbXZfdmlmLT5wZWVyX2lkID0gcGVlcl9pbmZvLT5zdGF0aW9uX2lkOworCisJCWJyZWFrOworCisJY2FzZSBNV0w4S19TVEFfREJfREVMX0VOVFJZOgorCWNhc2UgTVdMOEtfU1RBX0RCX0ZMVVNIOgorCWRlZmF1bHQ6CisJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJCWlmIChyYyA9PSAwKQorCQkJbXZfdmlmLT5wZWVyX2lkID0gMDsKKwkJYnJlYWs7CisJfQorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKIAogLyoKICAqIEludGVycnVwdCBoYW5kbGluZy4KQEAgLTI4MzYsMTEgKzI3NzYsMTEgQEAKIAogCXJjID0gbXdsOGtfZndfbG9jayhodyk7CiAJaWYgKCFyYykgewotCQlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZW5hYmxlKGh3KTsKKwkJcmMgPSBtd2w4a19jbWRfcmFkaW9fZW5hYmxlKGh3KTsKIAogCQlpZiAoIXByaXYtPmFwX2Z3KSB7CiAJCQlpZiAoIXJjKQotCQkJCXJjID0gbXdsOGtfZW5hYmxlX3NuaWZmZXIoaHcsIDApOworCQkJCXJjID0gbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyKGh3LCAwKTsKIAogCQkJaWYgKCFyYykKIAkJCQlyYyA9IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpOwpAQCAtMjg1MSwxMCArMjc5MSwxMCBAQAogCQl9CiAKIAkJaWYgKCFyYykKLQkJCXJjID0gbXdsOGtfY21kX3NldHJhdGVhZGFwdG1vZGUoaHcsIDApOworCQkJcmMgPSBtd2w4a19jbWRfc2V0X3JhdGVhZGFwdF9tb2RlKGh3LCAwKTsKIAogCQlpZiAoIXJjKQotCQkJcmMgPSBtd2w4a19zZXRfd21tKGh3LCAwKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF93bW1fbW9kZShodywgMCk7CiAKIAkJbXdsOGtfZndfdW5sb2NrKGh3KTsKIAl9CkBAIC0yODczLDcgKzI4MTMsNyBAQAogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGk7CiAKLQltd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOworCW13bDhrX2NtZF9yYWRpb19kaXNhYmxlKGh3KTsKIAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAKQEAgLTI4OTUsNyArMjgzNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbXdsOGtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmOwpAQCAtMjkwOSw3ICsyODQ5LDcgQEAKIAkvKgogCSAqIFdlIG9ubHkgc3VwcG9ydCBtYW5hZ2VkIGludGVyZmFjZXMgZm9yIG5vdy4KIAkgKi8KLQlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgpAQCAtMjkyNSwzNCArMjg2NSwzMSBAQAogCX0KIAogCS8qIENsZWFuIG91dCBkcml2ZXIgcHJpdmF0ZSBhcmVhICovCi0JbXdsOGtfdmlmID0gTVdMOEtfVklGKGNvbmYtPnZpZik7CisJbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7CiAJbWVtc2V0KG13bDhrX3ZpZiwgMCwgc2l6ZW9mKCptd2w4a192aWYpKTsKIAogCS8qIFNldCBhbmQgc2F2ZSB0aGUgbWFjIGFkZHJlc3MgKi8KLQltd2w4a19zZXRfbWFjX2FkZHIoaHcsIGNvbmYtPm1hY19hZGRyKTsKLQltZW1jcHkobXdsOGtfdmlmLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQotCS8qIEJhY2sgcG9pbnRlciB0byBwYXJlbnQgY29uZmlnIGJsb2NrICovCi0JbXdsOGtfdmlmLT5wcml2ID0gcHJpdjsKKwltd2w4a19jbWRfc2V0X21hY19hZGRyKGh3LCB2aWYtPmFkZHIpOworCW1lbWNweShtd2w4a192aWYtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKIAogCS8qIFNldCBJbml0aWFsIHNlcXVlbmNlIG51bWJlciB0byB6ZXJvICovCiAJbXdsOGtfdmlmLT5zZXFubyA9IDA7CiAKLQlwcml2LT52aWYgPSBjb25mLT52aWY7CisJcHJpdi0+dmlmID0gdmlmOwogCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbXdsOGtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlpZiAocHJpdi0+dmlmID09IE5VTEwpCiAJCXJldHVybjsKIAotCW13bDhrX3NldF9tYWNfYWRkcihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOworCW13bDhrX2NtZF9zZXRfbWFjX2FkZHIoaHcsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsKIAogCXByaXYtPnZpZiA9IE5VTEw7CiB9CkBAIC0yOTY0LDcgKzI5MDEsNyBAQAogCWludCByYzsKIAogCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpIHsKLQkJbXdsOGtfY21kXzgwMl8xMV9yYWRpb19kaXNhYmxlKGh3KTsKKwkJbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoaHcpOwogCQlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yOTczLDcgKzI5MTAsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShodyk7CisJcmMgPSBtd2w4a19jbWRfcmFkaW9fZW5hYmxlKGh3KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCkBAIC0yOTg1LDcgKzI5MjIsNyBAQAogCiAJaWYgKGNvbmYtPnBvd2VyX2xldmVsID4gMTgpCiAJCWNvbmYtPnBvd2VyX2xldmVsID0gMTg7Ci0JcmMgPSBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCk7CisJcmMgPSBtd2w4a19jbWRfcmZfdHhfcG93ZXIoaHcsIGNvbmYtPnBvd2VyX2xldmVsKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCkBAIC0zMDIxLDE0ICsyOTU4LDExIEBACiAJaWYgKHJjKQogCQlyZXR1cm47CiAKLQlpZiAoaW5mby0+YXNzb2MpIHsKLQkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKLQotCQltZW1jcHkobXdsOGtfdmlmLT5ic3NpZCwgaW5mby0+YnNzaWQsIEVUSF9BTEVOKTsKKwlpZiAodmlmLT5ic3NfY29uZi5hc3NvYykgeworCQltZW1jcHkobXdsOGtfdmlmLT5ic3NpZCwgdmlmLT5ic3NfY29uZi5ic3NpZCwgRVRIX0FMRU4pOwogCiAJCS8qIEluc3RhbGwgcmF0ZXMgKi8KLQkJcmMgPSBtd2w4a191cGRhdGVfcmF0ZXNldChodywgdmlmKTsKKwkJcmMgPSBtd2w4a19jbWRfc2V0X3JhdGUoaHcsIHZpZik7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwogCkBAIC0zMDM5LDE3ICsyOTczLDE4IEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBTZXQgcmFkaW8gcHJlYW1ibGUgKi8KLQkJcmMgPSBtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsIGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJCXJjID0gbXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LAorCQkJCXZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAKIAkJLyogU2V0IHNsb3QgdGltZSAqLwotCQlyYyA9IG13bDhrX2NtZF9zZXRfc2xvdChodywgaW5mby0+dXNlX3Nob3J0X3Nsb3QpOworCQlyYyA9IG13bDhrX2NtZF9zZXRfc2xvdChodywgdmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFVwZGF0ZSBwZWVyIHJhdGUgaW5mbyAqLwotCQlyYyA9IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsCisJCXJjID0gbXdsOGtfY21kX3VwZGF0ZV9zdGFkYihodywgdmlmLAogCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKQEAgLTMwNjYsOSArMzAwMSw3IEBACiAJCW1lbWNweShwcml2LT5jYXB0dXJlX2Jzc2lkLCBtd2w4a192aWYtPmJzc2lkLCBFVEhfQUxFTik7CiAJCXByaXYtPmNhcHR1cmVfYmVhY29uID0gdHJ1ZTsKIAl9IGVsc2UgewotCQlyYyA9IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkpOwotCQltZW1zZXQoJm13bDhrX3ZpZi0+YnNzX2luZm8sIDAsCi0JCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOworCQlyYyA9IG13bDhrX2NtZF91cGRhdGVfc3RhZGIoaHcsIHZpZiwgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWSk7CiAJCW1lbXNldChtd2w4a192aWYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAJfQogCkBAIC0zMTE0LDcgKzMwNDcsNyBAQAogCX0KIAogCWlmICghcHJpdi0+c25pZmZlcl9lbmFibGVkKSB7Ci0JCWlmIChtd2w4a19lbmFibGVfc25pZmZlcihodywgMSkpCisJCWlmIChtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIoaHcsIDEpKQogCQkJcmV0dXJuIDA7CiAJCXByaXYtPnNuaWZmZXJfZW5hYmxlZCA9IHRydWU7CiAJfQpAQCAtMzE2MSw3ICszMDk0LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHByaXYtPnNuaWZmZXJfZW5hYmxlZCkgewotCQltd2w4a19lbmFibGVfc25pZmZlcihodywgMCk7CisJCW13bDhrX2NtZF9lbmFibGVfc25pZmZlcihodywgMCk7CiAJCXByaXYtPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOwogCX0KIApAQCAtMzIxMSw3ICszMTQ0LDcgQEAKIAogc3RhdGljIGludCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQogewotCXJldHVybiBtd2w4a19ydHNfdGhyZXNob2xkKGh3LCBNV0w4S19DTURfU0VULCB2YWx1ZSk7CisJcmV0dXJuIG13bDhrX2NtZF9zZXRfcnRzX3RocmVzaG9sZChodywgTVdMOEtfQ01EX1NFVCwgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IG13bDhrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKQEAgLTMyMjMsMTQgKzMxNTYsMTQgQEAKIAlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOwogCWlmICghcmMpIHsKIAkJaWYgKCFwcml2LT53bW1fZW5hYmxlZCkKLQkJCXJjID0gbXdsOGtfc2V0X3dtbShodywgMSk7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfd21tX21vZGUoaHcsIDEpOwogCiAJCWlmICghcmMpCi0JCQlyYyA9IG13bDhrX3NldF9lZGNhX3BhcmFtcyhodywgcXVldWUsCi0JCQkJCQkgICBwYXJhbXMtPmN3X21pbiwKLQkJCQkJCSAgIHBhcmFtcy0+Y3dfbWF4LAotCQkJCQkJICAgcGFyYW1zLT5haWZzLAotCQkJCQkJICAgcGFyYW1zLT50eG9wKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyhodywgcXVldWUsCisJCQkJCQkgICAgICAgcGFyYW1zLT5jd19taW4sCisJCQkJCQkgICAgICAgcGFyYW1zLT5jd19tYXgsCisJCQkJCQkgICAgICAgcGFyYW1zLT5haWZzLAorCQkJCQkJICAgICAgIHBhcmFtcy0+dHhvcCk7CiAKIAkJbXdsOGtfZndfdW5sb2NrKGh3KTsKIAl9CkBAIC0zMjU5LDcgKzMxOTIsNyBAQAogc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7Ci0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoaHcsIHN0YXRzKTsKKwlyZXR1cm4gbXdsOGtfY21kX2dldF9zdGF0KGh3LCBzdGF0cyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtd2w4a19vcHMgPSB7CkBAIC0zMzAwLDkgKzMyMzMsOSBAQAogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2w4a19wcml2LCBmaW5hbGl6ZV9qb2luX3dvcmtlcik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPmJlYWNvbl9za2I7Ci0JdTggZHRpbSA9IE1XTDhLX1ZJRihwcml2LT52aWYpLT5ic3NfaW5mby5kdGltX3BlcmlvZDsKIAotCW13bDhrX2ZpbmFsaXplX2pvaW4ocHJpdi0+aHcsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIGR0aW0pOworCW13bDhrX2NtZF9maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCXByaXYtPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCXByaXYtPmJlYWNvbl9za2IgPSBOVUxMOwpAQCAtMzMxNCwxOSArMzI0NywxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyBtd2w4a19pbmZvX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeworCVtNV0w4Njg3XSA9IHsKIAkJLnBhcnRfbmFtZQk9ICI4OHc4Njg3IiwKIAkJLmhlbHBlcl9pbWFnZQk9ICJtd2w4ay9oZWxwZXJfODY4Ny5mdyIsCiAJCS5md19pbWFnZQk9ICJtd2w4ay9mbWltYWdlXzg2ODcuZnciLAotCQkucnhkX29wcwk9ICZyeGRfODY4N19vcHMsCi0JCS5tb2RlcwkJPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTiksCiAJfSwKLQl7CisJW01XTDgzNjZdID0gewogCQkucGFydF9uYW1lCT0gIjg4dzgzNjYiLAogCQkuaGVscGVyX2ltYWdlCT0gIm13bDhrL2hlbHBlcl84MzY2LmZ3IiwKIAkJLmZ3X2ltYWdlCT0gIm13bDhrL2ZtaW1hZ2VfODM2Ni5mdyIsCi0JCS5yeGRfb3BzCT0gJnJ4ZF84MzY2X29wcywKLQkJLm1vZGVzCQk9IDAsCisJCS5hcF9yeGRfb3BzCT0gJnJ4ZF84MzY2X2FwX29wcywKIAl9LAogfTsKIApAQCAtMzM1Miw2ICszMjgyLDcgQEAKIAkJcHJpbnRlZF92ZXJzaW9uID0gMTsKIAl9CiAKKwogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCkBAIC0zMzY4LDYgKzMyOTksNyBAQAogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKKwogCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZtd2w4a19vcHMpOwogCWlmIChodyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsIE1XTDhLX05BTUUpOwpAQCAtMzM3NSwxNyArMzMwNywxNCBAQAogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9CiAKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKwogCXByaXYgPSBody0+cHJpdjsKIAlwcml2LT5odyA9IGh3OwogCXByaXYtPnBkZXYgPSBwZGV2OwogCXByaXYtPmRldmljZV9pbmZvID0gJm13bDhrX2luZm9fdGJsW2lkLT5kcml2ZXJfZGF0YV07Ci0JcHJpdi0+cnhkX29wcyA9IHByaXYtPmRldmljZV9pbmZvLT5yeGRfb3BzOwotCXByaXYtPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOwotCXByaXYtPndtbV9lbmFibGVkID0gZmFsc2U7Ci0JcHJpdi0+cGVuZGluZ190eF9wa3RzID0gMDsKIAotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwogCiAJcHJpdi0+c3JhbSA9IHBjaV9pb21hcChwZGV2LCAwLCAweDEwMDAwKTsKIAlpZiAocHJpdi0+c3JhbSA9PSBOVUxMKSB7CkBAIC0zNDA4LDYgKzMzMzcsNDAgQEAKIAkJfQogCX0KIAorCisJLyogUmVzZXQgZmlybXdhcmUgYW5kIGhhcmR3YXJlICovCisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisKKwkvKiBBc2sgdXNlcmxhbmQgaG90cGx1ZyBkYWVtb24gZm9yIHRoZSBkZXZpY2UgZmlybXdhcmUgKi8KKwlyYyA9IG13bDhrX3JlcXVlc3RfZmlybXdhcmUocHJpdik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGZpbGVzIG5vdCBmb3VuZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogTG9hZCBmaXJtd2FyZSBpbnRvIGhhcmR3YXJlICovCisJcmMgPSBtd2w4a19sb2FkX2Zpcm13YXJlKGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHN0YXJ0IGZpcm13YXJlXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBSZWNsYWltIG1lbW9yeSBvbmNlIGZpcm13YXJlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgKi8KKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCisKKwlpZiAocHJpdi0+YXBfZncpCisJCXByaXYtPnJ4ZF9vcHMgPSBwcml2LT5kZXZpY2VfaW5mby0+YXBfcnhkX29wczsKKwllbHNlCisJCXByaXYtPnJ4ZF9vcHMgPSAmcnhkX3N0YV9vcHM7CisKKwlwcml2LT5zbmlmZmVyX2VuYWJsZWQgPSBmYWxzZTsKKwlwcml2LT53bW1fZW5hYmxlZCA9IGZhbHNlOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cyA9IDA7CisKKwogCW1lbWNweShwcml2LT5jaGFubmVscywgbXdsOGtfY2hhbm5lbHMsIHNpemVvZihtd2w4a19jaGFubmVscykpOwogCXByaXYtPmJhbmQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOwpAQCAtMzQzMCw4ICszMzkzLDYgQEAKIAogCWh3LT5xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IHByaXYtPmRldmljZV9pbmZvLT5tb2RlczsKLQogCS8qIFNldCByc3NpIGFuZCBub2lzZSB2YWx1ZXMgdG8gZEJtICovCiAJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfdmlmKTsKQEAgLTM0NTIsMTEgKzM0MTMsMTEgQEAKIAkvKiBQb3dlciBtYW5hZ2VtZW50IGNvb2tpZSAqLwogCXByaXYtPmNvb2tpZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsICZwcml2LT5jb29raWVfZG1hKTsKIAlpZiAocHJpdi0+Y29va2llID09IE5VTEwpCi0JCWdvdG8gZXJyX2lvdW5tYXA7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CiAKIAlyYyA9IG13bDhrX3J4cV9pbml0KGh3LCAwKTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX2lvdW5tYXA7CisJCWdvdG8gZXJyX2ZyZWVfY29va2llOwogCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+ZndfbXV0ZXgpOwpAQCAtMzQ4NywyOCArMzQ0OCw2IEBACiAJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOwogCX0KIAotCS8qIFJlc2V0IGZpcm13YXJlIGFuZCBoYXJkd2FyZSAqLwotCW13bDhrX2h3X3Jlc2V0KHByaXYpOwotCi0JLyogQXNrIHVzZXJsYW5kIGhvdHBsdWcgZGFlbW9uIGZvciB0aGUgZGV2aWNlIGZpcm13YXJlICovCi0JcmMgPSBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHByaXYpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBmaWxlcyBub3QgZm91bmRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9mcmVlX2lycTsKLQl9Ci0KLQkvKiBMb2FkIGZpcm13YXJlIGludG8gaGFyZHdhcmUgKi8KLQlyYyA9IG13bDhrX2xvYWRfZmlybXdhcmUoaHcpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3Qgc3RhcnQgZmlybXdhcmVcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwotCX0KLQotCS8qIFJlY2xhaW0gbWVtb3J5IG9uY2UgZmlybXdhcmUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZCAqLwotCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7Ci0KIAkvKgogCSAqIFRlbXBvcmFyaWx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAgSW5pdGlhbCBmaXJtd2FyZSBob3N0CiAJICogY29tbWFuZHMgdXNlIGludGVycnVwdHMgYW5kIGF2b2lkcyBwb2xsaW5nLiAgRGlzYWJsZQpAQCAtMzUyMywyNiArMzQ2MiwyOCBAQAogCQkJcmMgPSBtd2w4a19jbWRfc2V0X2h3X3NwZWMoaHcpOwogCX0gZWxzZSB7CiAJCXJjID0gbXdsOGtfY21kX2dldF9od19zcGVjX3N0YShodyk7CisKKwkJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAJfQogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgaW5pdGlhbGlzZSBmaXJtd2FyZVxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7Ci0JCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCS8qIFR1cm4gcmFkaW8gb2ZmICovCi0JcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOworCXJjID0gbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoaHcpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZGlzYWJsZVxuIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogQ2xlYXIgTUFDIGFkZHJlc3MgKi8KLQlyYyA9IG13bDhrX3NldF9tYWNfYWRkcihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOworCXJjID0gbXdsOGtfY21kX3NldF9tYWNfYWRkcihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgY2xlYXIgTUFDIGFkZHJlc3NcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTM1NTMsNyArMzQ5NCw3IEBACiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXMgdiVkLCAlcE0sICVzIGZpcm13YXJlICV1LiV1LiV1LiV1XG4iLApAQCAtMzU2NSwxMCArMzUwNiw2IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX3N0b3BfZmlybXdhcmU6Ci0JbXdsOGtfaHdfcmVzZXQocHJpdik7Ci0JbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKLQogZXJyX2ZyZWVfaXJxOgogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CkBAIC0zNTc4LDExICszNTE1LDE2IEBACiAJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOwogCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwogCi1lcnJfaW91bm1hcDoKK2Vycl9mcmVlX2Nvb2tpZToKIAlpZiAocHJpdi0+Y29va2llICE9IE5VTEwpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKIAkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOwogCitlcnJfc3RvcF9maXJtd2FyZToKKwltd2w4a19od19yZXNldChwcml2KTsKKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCitlcnJfaW91bm1hcDoKIAlpZiAocHJpdi0+cmVncyAhPSBOVUxMKQogCQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCmluZGV4IGMxM2E0YzMuLjA3NWY0NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fbm9ydGVsX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUob3Jpbm9jb19ub3J0ZWxfaWRfdGFibGUpID0gewogCS8qIE5vcnRlbCBlbW9iaWxpdHkgUENJICovCiAJezB4MTI2YywgMHg4MDMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJLyogU3ltYm9sIExBLTQxMjMgUENJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKaW5kZXggZmVhNzc4MS4uYmRhNTMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3Jpbm9jb19wY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShvcmlub2NvX3BjaV9pZF90YWJsZSkgPSB7CiAJLyogSW50ZXJzaWwgUHJpc20gMyAqLwogCXsweDEyNjAsIDB4Mzg3MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCS8qIEludGVyc2lsIFByaXNtIDIuNSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCmluZGV4IDNmMjk0MmEuLmUwZDU4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fcGx4X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUob3Jpbm9jb19wbHhfaWRfdGFibGUpID0gewogCXsweDExMWEsIDB4MTAyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAkvKiBTaWVtZW5zIFNwZWVkU3RyZWFtIFNTMTAyMyAqLwogCXsweDEzODUsIDB4NDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAkvKiBOZXRnZWFyIE1BMzAxICovCiAJezB4MTVlOCwgMHgwMTMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIENvcnJlZ2EgIC0gZG9lcyB0aGlzIHdvcms/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKaW5kZXggZDM0NTI1NC4uODhjYmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3Jpbm9jb190bWRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShvcmlub2NvX3RtZF9pZF90YWJsZSkgPSB7CiAJezB4MTVlOCwgMHgwMTMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sICAgICAgLyogTkRDIGFuZCBPRU1zLCBlLmcuIHBoZWVjb20gKi8KIAl7MCx9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCmluZGV4IDE4MDEyZGIuLjI2NDI4ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwpAQCAtMjE2LDcgKzIxNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcDU0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIApAQCAtMjI2LDI4ICsyMjYsMjggQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKKwkJcHJpdi0+bW9kZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkocHJpdi0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCXA1NF9zZXR1cF9tYWMocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcDU0X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGExNTk2MmEuLmZhYjQxZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTMxLDcgKzMxLDcgQEAKIE1PRFVMRV9BTElBUygicHJpc201NHBjaSIpOwogTU9EVUxFX0ZJUk1XQVJFKCJpc2wzODg2cGNpIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwNTRwX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwNTRwX3RhYmxlKSA9IHsKIAkvKiBJbnRlcnNpbCBQUklTTSBEdWV0dGUvUHJpc20gR1QgV2lyZWxlc3MgTEFOIGFkYXB0ZXIgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxMjYwLCAweDM4OTApIH0sCiAJLyogM0NPTSAzQ1JXRTE1NEc3MiBXaXJlbGVzcyBMQU4gYWRhcHRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCmluZGV4IGU0ZjJiYjcuLmRjMTQ0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqIGRyaXZlcl9kYXRhCiAgKiBJZiB5b3UgaGF2ZSBhbiB1cGRhdGUgZm9yIHRoaXMgcGxlYXNlIGNvbnRhY3QgcHJpc201NC1kZXZlbEBwcmlzbTU0Lm9yZwogICogVGhlIGxhdGVzdCBsaXN0IGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vcHJpc201NC5vcmcvc3VwcG9ydGVkX2NhcmRzLnBocCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHByaXNtNTRfaWRfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocHJpc201NF9pZF90YmwpID0gewogCS8qIEludGVyc2lsIFBSSVNNIER1ZXR0ZS9QcmlzbSBHVCBXaXJlbGVzcyBMQU4gYWRhcHRlciAqLwogCXsKIAkgMHgxMjYwLCAweDM4OTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggMmVjYmVkYi4uMzA1YzEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMjU5NCwyMyArMjU5NCw5IEBACiAvKgogICogZHJpdmVyL2RldmljZSBpbml0aWFsaXphdGlvbgogICovCi1zdGF0aWMgaW50IGJjbTQzMjBhX2Vhcmx5X2luaXQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQotewotCS8qIGJjbTQzMjBhIGRvZXNuJ3QgaGFuZGxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZWxsLiBUcnkKLQkgKiBzZXQgYW55IGFuZCB5b3UgZ2V0IHBhcnRpYWxseSB6ZXJvZWQgbWFjIGFuZCBicm9rZW4gZGV2aWNlLgotCSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDMyMGJfZWFybHlfaW5pdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCitzdGF0aWMgdm9pZCBybmRpc19jb3B5X21vZHVsZV9wYXJhbXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JY2hhciBidWZbOF07Ci0KLQkvKiBFYXJseSBpbml0aWFsaXphdGlvbiBzZXR0aW5ncywgc2V0dGluZyB0aGVzZSB3b24ndCBoYXZlIGVmZmVjdAotCSAqIGlmIGNhbGxlZCBhZnRlciBnZW5lcmljX3JuZGlzX2JpbmQoKS4KLQkgKi8KIAogCXByaXYtPnBhcmFtX2NvdW50cnlbMF0gPSBtb2RwYXJhbV9jb3VudHJ5WzBdOwogCXByaXYtPnBhcmFtX2NvdW50cnlbMV0gPSBtb2RwYXJhbV9jb3VudHJ5WzFdOwpAQCAtMjY1Miw2ICsyNjM4LDMyIEBACiAJCXByaXYtPnBhcmFtX3dvcmthcm91bmRfaW50ZXJ2YWwgPSA1MDA7CiAJZWxzZQogCQlwcml2LT5wYXJhbV93b3JrYXJvdW5kX2ludGVydmFsID0gbW9kcGFyYW1fd29ya2Fyb3VuZF9pbnRlcnZhbDsKK30KKworc3RhdGljIGludCBiY200MzIwYV9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwkvKiBjb3B5IG1vZHVsZSBwYXJhbWV0ZXJzIGZvciBiY200MzIwYSBzbyB0aGF0IGl3Y29uZmlnIHJlcG9ydHMgdHhwb3dlcgorCSAqIGFuZCB3b3JrYXJvdW5kIHBhcmFtZXRlciBpcyBjb3BpZWQgdG8gcHJpdmF0ZSBzdHJ1Y3R1cmUgY29ycmVjdGx5LgorCSAqLworCXJuZGlzX2NvcHlfbW9kdWxlX3BhcmFtcyh1c2JkZXYpOworCisJLyogYmNtNDMyMGEgZG9lc24ndCBoYW5kbGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdlbGwuIFRyeQorCSAqIHNldCBhbnkgYW5kIHlvdSBnZXQgcGFydGlhbGx5IHplcm9lZCBtYWMgYW5kIGJyb2tlbiBkZXZpY2UuCisJICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY200MzIwYl9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCWNoYXIgYnVmWzhdOworCisJcm5kaXNfY29weV9tb2R1bGVfcGFyYW1zKHVzYmRldik7CisKKwkvKiBFYXJseSBpbml0aWFsaXphdGlvbiBzZXR0aW5ncywgc2V0dGluZyB0aGVzZSB3b24ndCBoYXZlIGVmZmVjdAorCSAqIGlmIGNhbGxlZCBhZnRlciBnZW5lcmljX3JuZGlzX2JpbmQoKS4KKwkgKi8KIAogCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cih1c2JkZXYsICJDb3VudHJ5IiwgcHJpdi0+cGFyYW1fY291bnRyeSk7CiAJcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKHVzYmRldiwgIkZyYW1lQnVyc3RpbmciLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCBiZjYwNjg5Li4zY2E4MjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtNTQsMTIgKzU0LDEyIEBACiAJICBXaGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIGRyaXZlciB3aWxsIGJlIGNhbGxlZCBydDYxcGNpLgogCiBjb25maWcgUlQyODAwUENJX1BDSQotCXRyaXN0YXRlCisJYm9vbGVhbgogCWRlcGVuZHMgb24gUENJCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBSVDI4MDBQQ0lfU09DCi0JdHJpc3RhdGUKKwlib29sZWFuCiAJZGVwZW5kcyBvbiBSQUxJTktfUlQyODhYIHx8IFJBTElOS19SVDMwNVgKIAlkZWZhdWx0IHkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IGU3ZjQ2NDAuLmFhNTc5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCS8qCiAJICogUkYyNDIwIGNoaXBzZXQgZG9uJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBhY3Rpb25zLgogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNDIwKSkKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNDIwKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTEzNDMsOCArMTM0Myw3IEBACiAJcnQyeDAwX3NldF9jaGlwX3JmKHJ0MngwMGRldiwgdmFsdWUsIHJlZyk7CiAJcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKIAotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjQyMCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI0MjEpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI0MjApICYmICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI0MjEpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUkYgY2hpcHNldCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xNjQzLDcgKzE2NDIsNyBAQAogLyoKICAqIFJUMjQwMHBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDI0MDBwY2lfZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQyNDAwcGNpX2RldmljZV90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMTAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI0MDBwY2lfb3BzKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwppbmRleCA0MDhmY2ZjLi43N2VlMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCkBAIC00NDAsOCArNDQwLDcgQEAKIAkvKgogCSAqIFJUMjUyNUUgYW5kIFJUNTIyMiBuZWVkIHRvIGZsaXAgVFggSS9RCiAJICovCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjIpKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMiwgQkJQX1IyX1RYX0lRX0ZMSVAsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9DQ0tfRkxJUCwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBDU1IxX09GRE1fRkxJUCwgMSk7CkBAIC00NDksNyArNDQ4LDcgQEAKIAkJLyoKIAkJICogUlQyNTI1RSBkb2VzIG5vdCBuZWVkIFJYIEkvUSBGbGlwLgogCQkgKi8KLQkJaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSkKKwkJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnIxNCwgQkJQX1IxNF9SWF9JUV9GTElQLCAwKTsKIAl9IGVsc2UgewogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9DQ0tfRkxJUCwgMCk7CkBAIC00NzUsMTQgKzQ3NCwxNCBAQAogCSAqIFN3aXRjaCBvbiB0dW5pbmcgYml0cy4KIAkgKiBGb3IgUlQyNTIzIGRldmljZXMgd2UgZG8gbm90IG5lZWQgdG8gdXBkYXRlIHRoZSBSMSByZWdpc3Rlci4KIAkgKi8KLQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjMpKQorCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYxLCBSRjFfVFVORVIsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmMywgUkYzX1RVTkVSLCAxKTsKIAogCS8qCiAJICogRm9yIFJUMjUyNSB3ZSBzaG91bGQgZmlyc3Qgc2V0IHRoZSBjaGFubmVsIHRvIGhhbGYgYmFuZCBoaWdoZXIuCiAJICovCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjUpKSB7CisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNSkpIHsKIAkJc3RhdGljIGNvbnN0IHUzMiB2YWxzW10gPSB7CiAJCQkweDAwMDgwY2JlLCAweDAwMDgwZDAyLCAweDAwMDgwZDA2LCAweDAwMDgwZDBhLAogCQkJMHgwMDA4MGQwZSwgMHgwMDA4MGQxMiwgMHgwMDA4MGQxNiwgMHgwMDA4MGQxYSwKQEAgLTUxNiw3ICs1MTUsNyBAQAogCSAqIFN3aXRjaCBvZmYgdHVuaW5nIGJpdHMuCiAJICogRm9yIFJUMjUyMyBkZXZpY2VzIHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSB0aGUgUjEgcmVnaXN0ZXIuCiAJICovCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSkgewogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJmLT5yZjEsIFJGMV9UVU5FUiwgMCk7CiAJCXJ0MjUwMHBjaV9yZl93cml0ZShydDJ4MDBkZXYsIDEsIHJmLT5yZjEpOwogCX0KQEAgLTY0MCw3ICs2MzksNyBAQAogCSAqIHVwIHRvIHZlcnNpb24gQyB0aGUgbGluayB0dW5pbmcgc2hvdWxkIGhhbHQgYWZ0ZXIgMjAKIAkgKiBzZWNvbmRzIHdoaWxlIGJlaW5nIGFzc29jaWF0ZWQuCiAJICovCi0JaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EICYmCisJaWYgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA8IFJUMjU2MF9WRVJTSU9OX0QgJiYKIAkgICAgcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQgJiYgY291bnQgPiAyMCkKIAkJcmV0dXJuOwogCkBAIC02NTAsNyArNjQ5LDcgQEAKIAkgKiBzaG91bGQgZ28gc3RyYWlnaHQgdG8gZHluYW1pYyBDQ0EgdHVuaW5nIHdoZW4gdGhleQogCSAqIGFyZSBub3QgYXNzb2NpYXRlZC4KIAkgKi8KLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMjU2MF9WRVJTSU9OX0QgfHwKKwlpZiAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQyNTYwX1ZFUlNJT05fRCB8fAogCSAgICAhcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQpCiAJCWdvdG8gZHluYW1pY19jY2FfdHVuZTsKIApAQCAtMTUwNywxMiArMTUwNiwxMiBAQAogCXJ0MngwMF9zZXRfY2hpcF9yZihydDJ4MDBkZXYsIHZhbHVlLCByZWcpOwogCXJ0MngwMF9wcmludF9jaGlwKHJ0MngwMGRldik7CiAKLQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjIpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjIpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjIpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjMpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjQpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjUpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTc0NCwyMiArMTc0MywyMiBAQAogCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOwogCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIyKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjIpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjI7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyMyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTIzOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNCkpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNCkpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX2JnXzI1MjQpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNDsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjUpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI1KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjU7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI1ZSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1ZTsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjIpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjIpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjIpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfNTIyMjsKQEAgLTE5NDEsNyArMTk0MCw3IEBACiAvKgogICogUlQyNTAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0MjUwMHBjaV9kZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydDI1MDBwY2lfZGV2aWNlX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAyMDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjUwMHBjaV9vcHMpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IDgzZjI1OTIuLjllNmY4NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTU2NSw4ICs1NjUsNyBAQAogCS8qCiAJICogUlQyNTI1RSBhbmQgUlQ1MjIyIG5lZWQgdG8gZmxpcCBUWCBJL1EKIAkgKi8KLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpIHx8Ci0JICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjIpKSB7CisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpIHx8IHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyMikpIHsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIyLCBCQlBfUjJfVFhfSVFfRkxJUCwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmY3NyNSwgUEhZX0NTUjVfQ0NLX0ZMSVAsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmNzcjYsIFBIWV9DU1I2X09GRE1fRkxJUCwgMSk7CkBAIC01NzQsNyArNTczLDcgQEAKIAkJLyoKIAkJICogUlQyNTI1RSBkb2VzIG5vdCBuZWVkIFJYIEkvUSBGbGlwLgogCQkgKi8KLQkJaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSkKKwkJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnIxNCwgQkJQX1IxNF9SWF9JUV9GTElQLCAwKTsKIAl9IGVsc2UgewogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmNzcjUsIFBIWV9DU1I1X0NDS19GTElQLCAwKTsKQEAgLTU5OCw3ICs1OTcsNyBAQAogCS8qCiAJICogRm9yIFJUMjUyNUUgd2Ugc2hvdWxkIGZpcnN0IHNldCB0aGUgY2hhbm5lbCB0byBoYWxmIGJhbmQgaGlnaGVyLgogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1RSkpIHsKIAkJc3RhdGljIGNvbnN0IHUzMiB2YWxzW10gPSB7CiAJCQkweDAwMDAwOGFhLCAweDAwMDAwOGFlLCAweDAwMDAwOGFlLCAweDAwMDAwOGIyLAogCQkJMHgwMDAwMDhiMiwgMHgwMDAwMDhiNiwgMHgwMDAwMDhiNiwgMHgwMDAwMDhiYSwKQEAgLTc5Myw3ICs3OTIsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMV9IT1NUX1JFQURZLCAxKTsKIAlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMSwgcmVnKTsKIAotCWlmIChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID49IFJUMjU3MF9WRVJTSU9OX0MpIHsKKwlpZiAocnQyeDAwX3JldihydDJ4MDBkZXYpID49IFJUMjU3MF9WRVJTSU9OX0MpIHsKIAkJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBQSFlfQ1NSMiwgJnJlZyk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBQSFlfQ1NSMl9MTkEsIDApOwogCX0gZWxzZSB7CkBAIC0xNDExLDE5ICsxNDEwLDE4IEBACiAJcnQyeDAwX3NldF9jaGlwKHJ0MngwMGRldiwgUlQyNTcwLCB2YWx1ZSwgcmVnKTsKIAlydDJ4MDBfcHJpbnRfY2hpcChydDJ4MDBkZXYpOwogCi0JaWYgKCFydDJ4MDBfY2hlY2tfcmV2KCZydDJ4MDBkZXYtPmNoaXAsIDB4MDAwZmZmZjAsIDApIHx8Ci0JICAgIHJ0MngwMF9jaGVja19yZXYoJnJ0MngwMGRldi0+Y2hpcCwgMHgwMDAwMDAwZiwgMCkpIHsKLQorCWlmICghcnQyeDAwX2NoZWNrX3JldihydDJ4MDBkZXYsIDB4MDAwZmZmZjAsIDApIHx8CisJICAgIHJ0MngwMF9jaGVja19yZXYocnQyeDAwZGV2LCAweDAwMDAwMDBmLCAwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIyKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI0KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1RSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyMikpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE2NjcsMjIgKzE2NjUsMjIgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMikpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyMik7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTIyOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyMykpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX2JnXzI1MjMpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyMzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjQpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI0KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjQ7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1OwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNWUpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNWU7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggMjdiZjg4Ny4uOGZmN2RiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCi0jaWYgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCKSB8fCBkZWZpbmVkKENPTkZJR19SVDI4MDBVU0JfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfVVNCKSB8fCBkZWZpbmVkKENPTkZJR19SVDJYMDBfTElCX1VTQl9NT0RVTEUpCiAjaW5jbHVkZSAicnQyeDAwdXNiLmgiCiAjZW5kaWYKICNpbmNsdWRlICJydDI4MDBsaWIuaCIKQEAgLTIyMCw4ICsyMjAsNyBAQAogCS8qCiAJICogUlQyODgwIGFuZCBSVDMwNTIgZG9uJ3Qgc3VwcG9ydCBNQ1UgcmVxdWVzdHMuCiAJICovCi0JaWYgKHJ0MngwMF9ydCgmcnQyeDAwZGV2LT5jaGlwLCBSVDI4ODApIHx8Ci0JICAgIHJ0MngwMF9ydCgmcnQyeDAwZGV2LT5jaGlwLCBSVDMwNTIpKQorCWlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApIHx8IHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA1MikpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKQEAgLTgwNiwxMiArODA1LDEyIEBACiAJdW5zaWduZWQgaW50IHR4X3BpbjsKIAl1OCBiYnA7CiAKLQlpZiAoKHJ0MngwMF9ydCgmcnQyeDAwZGV2LT5jaGlwLCBSVDMwNzApIHx8Ci0JICAgICBydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQzMDkwKSkgJiYKLQkgICAgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjIwMjApIHx8Ci0JICAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIwKSB8fAotCSAgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMSkgfHwKLQkgICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjIpKSkKKwlpZiAoKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MCkgfHwKKwkgICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA5MCkpICYmCisJICAgIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjIwMjApIHx8CisJICAgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjApIHx8CisJICAgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpIHx8CisJICAgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpKSkKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsX3J0M3gocnQyeDAwZGV2LCBjb25mLCByZiwgaW5mbyk7CiAJZWxzZQogCQlydDI4MDBfY29uZmlnX2NoYW5uZWxfcnQyeChydDJ4MDBkZXYsIGNvbmYsIHJmLCBpbmZvKTsKQEAgLTg3OCw3ICs4NzcsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQ4KCZiYnAsIEJCUDNfSFQ0MF9QTFVTLCBjb25mX2lzX2h0NDBfcGx1cyhjb25mKSk7CiAJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDMsIGJicCk7CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA9PSBSVDI4NjBDX1ZFUlNJT04pIHsKKwlpZiAocnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMjg2MENfVkVSU0lPTikgewogCQlpZiAoY29uZl9pc19odDQwKGNvbmYpKSB7CiAJCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgNjksIDB4MWEpOwogCQkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDcwLCAweDBhKTsKQEAgLTEwNDEsNyArMTA0MCw3IEBACiB7CiAJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMzA3MF9WRVJTSU9OKQorCQkgICAgcnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMzA3MF9WRVJTSU9OKQogCQkJcmV0dXJuIDB4MWMgKyAoMiAqIHJ0MngwMGRldi0+bG5hX2dhaW4pOwogCQllbHNlCiAJCQlyZXR1cm4gMHgyZSArIHJ0MngwMGRldi0+bG5hX2dhaW47CkBAIC0xMDcyLDcgKzEwNzEsNyBAQAogdm9pZCBydDI4MDBfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLAogCQkgICAgICAgY29uc3QgdTMyIGNvdW50KQogewotCWlmIChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMjg2MENfVkVSU0lPTikKKwlpZiAocnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMjg2MENfVkVSU0lPTikKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTExMjEsNyArMTEyMCw3IEBACiAKIAlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsIDB4MDAwMDAwMDApOwotI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19SVDJYMDBfTElCX1VTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9VU0JfTU9EVUxFKQogCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfREVWSUNFX01PREUsIDAsCiAJCQkJCSAgICBVU0JfTU9ERV9SRVNFVCwgUkVHSVNURVJfVElNRU9VVCk7CiAjZW5kaWYKQEAgLTExNTgsNyArMTE1Nyw3IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCiAJaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JICAgIHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPT0gUlQzMDcwX1ZFUlNJT04pIHsKKwkgICAgcnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMzA3MF9WRVJTSU9OKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzAsIDB4MDAwMDA0MDApOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcxLCAweDAwMDAwMDAwKTsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMiwgMHgwMDAwMDAwMCk7CkBAIC0xMTg1LDggKzExODQsOCBAQAogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQVhfTEVOX0NGRywgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BWF9MRU5fQ0ZHX01BWF9NUERVLCBBR0dSRUdBVElPTl9TSVpFKTsKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PSBSVDI4ODBFX1ZFUlNJT04gJiYKLQkgICAgcnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMzA3MF9WRVJTSU9OKQorCWlmIChydDJ4MDBfcmV2KHJ0MngwMGRldikgPj0gUlQyODgwRV9WRVJTSU9OICYmCisJICAgIHJ0MngwMF9yZXYocnQyeDAwZGV2KSA8IFJUMzA3MF9WRVJTSU9OKQogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFYX0xFTl9DRkdfTUFYX1BTRFUsIDIpOwogCWVsc2UKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BWF9MRU5fQ0ZHX01BWF9QU0RVLCAxKTsKQEAgLTE0NjUsMjIgKzE0NjQsMjIgQEAKIAlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTAzLCAweDAwKTsKIAlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTA1LCAweDA1KTsKIAotCWlmIChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMjg2MENfVkVSU0lPTikgeworCWlmIChydDJ4MDBfcmV2KHJ0MngwMGRldikgPT0gUlQyODYwQ19WRVJTSU9OKSB7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA2OSwgMHgxNik7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3MywgMHgxMik7CiAJfQogCi0JaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPiBSVDI4NjBEX1ZFUlNJT04pCisJaWYgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA+IFJUMjg2MERfVkVSU0lPTikKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDg0LCAweDE5KTsKIAogCWlmIChydDJ4MDBfaW50Zl9pc191c2IocnQyeDAwZGV2KSAmJgotCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMzA3MF9WRVJTSU9OKSB7CisJICAgIHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDMwNzBfVkVSU0lPTikgewogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgNzAsIDB4MGEpOwogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgODQsIDB4OTkpOwogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTA1LCAweDA1KTsKIAl9CiAKLQlpZiAocnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA1MikpIHsKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDUyKSkgewogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgMzEsIDB4MDgpOwogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgNzgsIDB4MGUpOwogCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgODAsIDB4MDgpOwpAQCAtMTU2NiwxMyArMTU2NSwxMyBAQAogCXU4IGJicDsKIAogCWlmIChydDJ4MDBfaW50Zl9pc191c2IocnQyeDAwZGV2KSAmJgotCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApICE9IFJUMzA3MF9WRVJTSU9OKQorCSAgICBydDJ4MDBfcmV2KHJ0MngwMGRldikgIT0gUlQzMDcwX1ZFUlNJT04pCiAJCXJldHVybiAwOwogCiAJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKSB7Ci0JCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMCkgJiYKLQkJICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIxKSAmJgotCQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjIpKQorCQlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMCkgJiYKKwkJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpICYmCisJCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSkKIAkJCXJldHVybiAwOwogCX0KIApAQCAtMTczNyw3ICsxNzM2LDcgQEAKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fQU5URU5OQV9SRl9UWVBFLCBSRjI4MjApOwogCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0FOVEVOTkEsIHdvcmQpOwogCQlFRVBST00ocnQyeDAwZGV2LCAiQW50ZW5uYTogMHglMDR4XG4iLCB3b3JkKTsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI4ODNfVkVSU0lPTikgeworCX0gZWxzZSBpZiAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQyODgzX1ZFUlNJT04pIHsKIAkJLyoKIAkJICogVGhlcmUgaXMgYSBtYXggb2YgMiBSWCBzdHJlYW1zIGZvciBSVDI4eDAgc2VyaWVzCiAJCSAqLwpAQCAtMTgzOSwxNyArMTgzOCwxNSBAQAogCXJ0MngwMF9zZXRfY2hpcF9yZihydDJ4MDBkZXYsIHZhbHVlLCByZWcpOwogCiAJaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpKSB7Ci0JCXN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcCA9ICZydDJ4MDBkZXYtPmNoaXA7Ci0KIAkJLyoKIAkJICogVGhlIGNoZWNrIGZvciBydDI4NjAgaXMgbm90IGEgdHlwbywgc29tZSBydDI4NzAgaGFyZHdhcmUKIAkJICogaWRlbnRpZmllcyBpdHNlbGYgYXMgcnQyODYwIGluIHRoZSBDU1IgcmVnaXN0ZXIuCiAJCSAqLwotCQlpZiAocnQyeDAwX2NoZWNrX3JldihjaGlwLCAweGZmZjAwMDAwLCAweDI4NjAwMDAwKSB8fAotCQkgICAgcnQyeDAwX2NoZWNrX3JldihjaGlwLCAweGZmZjAwMDAwLCAweDI4NzAwMDAwKSB8fAotCQkgICAgcnQyeDAwX2NoZWNrX3JldihjaGlwLCAweGZmZjAwMDAwLCAweDI4ODAwMDAwKSkgeworCQlpZiAocnQyeDAwX2NoZWNrX3JldihydDJ4MDBkZXYsIDB4ZmZmMDAwMDAsIDB4Mjg2MDAwMDApIHx8CisJCSAgICBydDJ4MDBfY2hlY2tfcmV2KHJ0MngwMGRldiwgMHhmZmYwMDAwMCwgMHgyODcwMDAwMCkgfHwKKwkJICAgIHJ0MngwMF9jaGVja19yZXYocnQyeDAwZGV2LCAweGZmZjAwMDAwLCAweDI4ODAwMDAwKSkgewogCQkJcnQyeDAwX3NldF9jaGlwX3J0KHJ0MngwMGRldiwgUlQyODcwKTsKLQkJfSBlbHNlIGlmIChydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmZjAwMDAsIDB4MzA3MDAwMDApKSB7CisJCX0gZWxzZSBpZiAocnQyeDAwX2NoZWNrX3JldihydDJ4MDBkZXYsIDB4ZmZmZjAwMDAsIDB4MzA3MDAwMDApKSB7CiAJCQlydDJ4MDBfc2V0X2NoaXBfcnQocnQyeDAwZGV2LCBSVDMwNzApOwogCQl9IGVsc2UgewogCQkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSVCBjaGlwc2V0IGRldGVjdGVkLlxuIik7CkBAIC0xODU4LDE0ICsxODU1LDE0IEBACiAJfQogCXJ0MngwMF9wcmludF9jaGlwKHJ0MngwMGRldik7CiAKLQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI4MjApICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyODUwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjcyMCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI3NTApICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjAyMCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjEpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIyKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyODIwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyODUwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNzIwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNzUwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjAxMyw3ICsyMDEwLDYgQEAKIAogaW50IHJ0MjgwMF9wcm9iZV9od19tb2RlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwID0gJnJ0MngwMGRldi0+Y2hpcDsKIAlzdHJ1Y3QgaHdfbW9kZV9zcGVjICpzcGVjID0gJnJ0MngwMGRldi0+c3BlYzsKIAlzdHJ1Y3QgY2hhbm5lbF9pbmZvICppbmZvOwogCWNoYXIgKnR4X3Bvd2VyMTsKQEAgLTIwNDksMTkgKzIwNDUsMTkgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKGNoaXAsIFJGMjgyMCkgfHwKLQkgICAgcnQyeDAwX3JmKGNoaXAsIFJGMjcyMCkgfHwKLQkgICAgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpICYmIHJ0MngwMF9yZihjaGlwLCBSRjMwNTIpKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4MjApIHx8CisJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjcyMCkgfHwKKwkgICAgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpICYmIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzA1MikpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IDE0OwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHM7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoY2hpcCwgUkYyODUwKSB8fCBydDJ4MDBfcmYoY2hpcCwgUkYyNzUwKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyODUwKSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI3NTApKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKGNoaXAsIFJGMzAyMCkgfHwKLQkJICAgcnQyeDAwX3JmKGNoaXAsIFJGMjAyMCkgfHwKLQkJICAgcnQyeDAwX3JmKGNoaXAsIFJGMzAyMSkgfHwKLQkJICAgcnQyeDAwX3JmKGNoaXAsIFJGMzAyMikpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMCkgfHwKKwkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSB8fAorCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpIHx8CisJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMikpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzMwMngpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfMzAyeDsKIAl9CkBAIC0yMDY5LDcgKzIwNjUsNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBIVCBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAoIXJ0MngwMF9yZihjaGlwLCBSRjIwMjApKQorCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSkKIAkJc3BlYy0+aHQuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKIAllbHNlCiAJCXNwZWMtPmh0Lmh0X3N1cHBvcnRlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCmluZGV4IGRmYzg4NmYuLjk5MDk1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKQEAgLTQ4LDE0ICs0OCw2IEBACiAjaW5jbHVkZSAicnQyODAwLmgiCiAjaW5jbHVkZSAicnQyODAwcGNpLmgiCiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1BDSV9NT0RVTEUKLSNkZWZpbmUgQ09ORklHX1JUMjgwMFBDSV9QQ0kKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQ19NT0RVTEUKLSNkZWZpbmUgQ09ORklHX1JUMjgwMFBDSV9XSVNPQwotI2VuZGlmCi0KIC8qCiAgKiBBbGxvdyBoYXJkd2FyZSBlbmNyeXB0aW9uIHRvIGJlIGRpc2FibGVkLgogICovCkBAIC04Nyw3ICs3OSw3IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1dJU09DCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgKmJhc2VfYWRkciA9ICh1MzIgKikgS1NFRzFBRERSKDB4MUYwNDAwMDApOyAvKiBYWFggZm9yIFJUMzA1MiAqLwpAQCAtOTgsNyArOTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1dJU09DICovCisjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9TT0MgKi8KIAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfZWVwcm9tcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCkBAIC04MzUsNyArODI3LDYgQEAKIAkJCQkgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAlfX2xlMzIgKnJ4ZCA9IGVudHJ5X3ByaXYtPmRlc2M7CiAJX19sZTMyICpyeHdpID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CkBAIC04ODMsMTAgKzg3NCw4IEBACiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQzLCBSWERfVzNfTVlfQlNTKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX01ZX0JTUzsKIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMywgUlhEX1czX0wyUEFEKSkgeworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMywgUlhEX1czX0wyUEFEKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX0wyUEFEOwotCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKLQl9CiAKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4d2kxLCBSWFdJX1cxX1NIT1JUX0dJKSkKIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX1NIT1JUX0dJOwpAQCAtOTI3LDcgKzkxNiw2IEBACiAJICogUmVtb3ZlIFRYV0kgZGVzY3JpcHRvciBmcm9tIHN0YXJ0IG9mIGJ1ZmZlci4KIAkgKi8KIAlza2JfcHVsbChlbnRyeS0+c2tiLCBSWFdJX0RFU0NfU0laRSk7Ci0Jc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLT5zaXplKTsKIH0KIAogLyoKQEAgLTExMzMsOCArMTEyMSw3IEBACiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZS4KIAkgKi8KLQlpZiAoIXJ0MngwMF9ydCgmcnQyeDAwZGV2LT5jaGlwLCBSVDI4ODApICYmCi0JICAgICFydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQzMDUyKSkKKwlpZiAoIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg4MCkgJiYgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA1MikpCiAJCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKQEAgLTEyMjEsNyArMTIwOCw3IEBACiAvKgogICogUlQyODAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0MjgwMHBjaV9kZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydDI4MDBwY2lfZGV2aWNlX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxNDYyLCAweDg5MWEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzA4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyNyksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKQEAgLTEyNTUsNyArMTI0Miw3IEBACiAjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9QQ0kgKi8KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfV0lTT0MKKyNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQwogI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpCiBfX3J0MngwMHNvY19wcm9iZShSVDI4ODAsICZydDI4MDBwY2lfb3BzKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCkBAIC0xMjczLDcgKzEyNjAsNyBAQAogCS5zdXNwZW5kCT0gcnQyeDAwc29jX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDBzb2NfcmVzdW1lLAogfTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1dJU09DICovCisjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9TT0MgKi8KIAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnQyODAwcGNpX2RyaXZlciA9IHsKQEAgLTEyOTAsNyArMTI3Nyw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1dJU09DCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xMjk4LDcgKzEyODUsNyBAQAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnQyODAwcGNpX2RyaXZlcik7CiAJaWYgKHJldCkgewotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfV0lTT0MKKyNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQwogCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnQyODAwc29jX2RyaXZlcik7CiAjZW5kaWYKIAkJcmV0dXJuIHJldDsKQEAgLTEzMTMsNyArMTMwMCw3IEBACiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9QQ0kKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJ0MjgwMHBjaV9kcml2ZXIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQworI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfU09DCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYWI5NTM0Ni4uMDUxMGYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RhdGljIGludCBydDI4MDB1c2JfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7Ci0JdTE2IGNoaXBzZXQgPSAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PiAxNikgJiAweGZmZmY7CisJdTE2IGNoaXBzZXQgPSAocnQyeDAwX3JldihydDJ4MDBkZXYpID4+IDE2KSAmIDB4ZmZmZjsKIAlzaXplX3Qgb2Zmc2V0ID0gMDsKIAogCS8qCkBAIC0xMzgsNyArMTM4LDcgQEAKIAl1MzIgcmVnOwogCXUzMiBvZmZzZXQ7CiAJdTMyIGxlbmd0aDsKLQl1MTYgY2hpcHNldCA9IChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID4+IDE2KSAmIDB4ZmZmZjsKKwl1MTYgY2hpcHNldCA9IChydDJ4MDBfcmV2KHJ0MngwMGRldikgPj4gMTYpICYgMHhmZmZmOwogCiAJLyoKIAkgKiBDaGVjayB3aGljaCBzZWN0aW9uIG9mIHRoZSBmaXJtd2FyZSB3ZSBuZWVkLgpAQCAtMjk1LDkgKzI5NSw3IEBACiAKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFVTQl9ETUFfQ0ZHLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfUEhZX0NMRUFSLCAwKTsKLQkvKiBEb24ndCB1c2UgYnVsayBpbiBhZ2dyZWdhdGlvbiB3aGVuIHdvcmtpbmcgd2l0aCBVU0IgMS4xICovCi0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfQUdHX0VOLAotCQkJICAgKHJ0MngwMGRldi0+cngtPnVzYl9tYXhwYWNrZXQgPT0gNTEyKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfQUdHX0VOLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfUlhfQlVMS19BR0dfVElNRU9VVCwgMTI4KTsKIAkvKgogCSAqIFRvdGFsIHJvb20gZm9yIFJYIGZyYW1lcyBpbiBraWxvYnl0ZXMsIFBCRiBtaWdodCBzdGlsbCBleGNlZWQKQEAgLTU3Myw0MSArNTcxLDU3IEBACiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhlbnRyeS0+c2tiKTsKLQlfX2xlMzIgKnJ4ZCA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOworCV9fbGUzMiAqcnhpID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CiAJX19sZTMyICpyeHdpOwotCXUzMiByeGQwOworCV9fbGUzMiAqcnhkOworCXUzMiByeGkwOwogCXUzMiByeHdpMDsKIAl1MzIgcnh3aTE7CiAJdTMyIHJ4d2kyOwogCXUzMiByeHdpMzsKKwl1MzIgcnhkMDsKKwlpbnQgcnhfcGt0X2xlbjsKKworCS8qCisJICogUlggZnJhbWUgZm9ybWF0IGlzIDoKKwkgKiB8IFJYSU5GTyB8IFJYV0kgfCBoZWFkZXIgfCBMMiBwYWQgfCBwYXlsb2FkIHwgcGFkIHwgUlhEIHwgVVNCIHBhZCB8CisJICogICAgICAgICAgfDwtLS0tLS0tLS0tLS0gcnhfcGt0X2xlbiAtLS0tLS0tLS0tLS0tLT58CisJICovCisJcnQyeDAwX2Rlc2NfcmVhZChyeGksIDAsICZyeGkwKTsKKwlyeF9wa3RfbGVuID0gcnQyeDAwX2dldF9maWVsZDMyKHJ4aTAsIFJYSU5GT19XMF9VU0JfRE1BX1JYX1BLVF9MRU4pOworCisJcnh3aSA9IChfX2xlMzIgKikoZW50cnktPnNrYi0+ZGF0YSArIFJYSU5GT19ERVNDX1NJWkUpOworCisJLyoKKwkgKiBGSVhNRSA6IHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJ4X3BrdF9sZW4gdmFsaWRpdHkKKwkgKi8KKwlyeGQgPSAoX19sZTMyICopKGVudHJ5LT5za2ItPmRhdGEgKyBSWElORk9fREVTQ19TSVpFICsgcnhfcGt0X2xlbik7CiAKIAkvKgogCSAqIENvcHkgZGVzY3JpcHRvciB0byB0aGUgc2tiZGVzYy0+ZGVzYyBidWZmZXIsIG1ha2luZyBpdCBzYWZlIGZyb20KIAkgKiBtb3Zpbmcgb2YgZnJhbWUgZGF0YSBpbiBydDJ4MDB1c2IuCiAJICovCi0JbWVtY3B5KHNrYmRlc2MtPmRlc2MsIHJ4ZCwgc2tiZGVzYy0+ZGVzY19sZW4pOwotCXJ4ZCA9IChfX2xlMzIgKilza2JkZXNjLT5kZXNjOwotCXJ4d2kgPSAmcnhkW1JYSU5GT19ERVNDX1NJWkUgLyBzaXplb2YoX19sZTMyKV07CisJbWVtY3B5KHNrYmRlc2MtPmRlc2MsIHJ4aSwgc2tiZGVzYy0+ZGVzY19sZW4pOwogCiAJLyoKIAkgKiBJdCBpcyBub3cgc2FmZSB0byByZWFkIHRoZSBkZXNjcmlwdG9yIG9uIGFsbCBhcmNoaXRlY3R1cmVzLgogCSAqLwotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmcnhkMCk7CiAJcnQyeDAwX2Rlc2NfcmVhZChyeHdpLCAwLCAmcnh3aTApOwogCXJ0MngwMF9kZXNjX3JlYWQocnh3aSwgMSwgJnJ4d2kxKTsKIAlydDJ4MDBfZGVzY19yZWFkKHJ4d2ksIDIsICZyeHdpMik7CiAJcnQyeDAwX2Rlc2NfcmVhZChyeHdpLCAzLCAmcnh3aTMpOworCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmcnhkMCk7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9DUkNfRVJST1IpKQorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhEX1cwX0NSQ19FUlJPUikpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKIAogCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSkgewogCQlyeGRlc2MtPmNpcGhlciA9IHJ0MngwMF9nZXRfZmllbGQzMihyeHdpMCwgUlhXSV9XMF9VREYpOwogCQlyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPQotCQkgICAgcnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9DSVBIRVJfRVJST1IpOworCQkgICAgcnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9DSVBIRVJfRVJST1IpOwogCX0KIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhJTkZPX1cwX0RFQ1JZUFRFRCkpIHsKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9ERUNSWVBURUQpKSB7CiAJCS8qCiAJCSAqIEhhcmR3YXJlIGhhcyBzdHJpcHBlZCBJVi9FSVYgZGF0YSBmcm9tIDgwMi4xMSBmcmFtZSBkdXJpbmcKIAkJICogZGVjcnlwdGlvbi4gVW5mb3J0dW5hdGVseSB0aGUgZGVzY3JpcHRvciBkb2Vzbid0IGNvbnRhaW4KQEAgLTYyMiwxMyArNjM2LDExIEBACiAJCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKIAl9CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9NWV9CU1MpKQorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhEX1cwX01ZX0JTUykpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9NWV9CU1M7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9MMlBBRCkpIHsKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9MMlBBRCkpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9MMlBBRDsKLQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JfQogCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeHdpMSwgUlhXSV9XMV9TSE9SVF9HSSkpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19TSE9SVF9HSTsKQEAgLTY2Myw3ICs2NzUsNiBAQAogCSAqIFJlbW92ZSBSWFdJIGRlc2NyaXB0b3IgZnJvbSBzdGFydCBvZiBidWZmZXIuCiAJICovCiAJc2tiX3B1bGwoZW50cnktPnNrYiwgc2tiZGVzYy0+ZGVzY19sZW4pOwotCXNrYl90cmltKGVudHJ5LT5za2IsIHJ4ZGVzYy0+c2l6ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKaW5kZXggMWU0MzQwYS4uZDFkOGFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaApAQCAtNzksNiArNzksOCBAQAogICovCiAjZGVmaW5lIFRYSU5GT19ERVNDX1NJWkUJCSggMSAqIHNpemVvZihfX2xlMzIpICkKICNkZWZpbmUgUlhJTkZPX0RFU0NfU0laRQkJKCAxICogc2l6ZW9mKF9fbGUzMikgKQorI2RlZmluZSBSWFdJX0RFU0NfU0laRQkJCSggNCAqIHNpemVvZihfX2xlMzIpICkKKyNkZWZpbmUgUlhEX0RFU0NfU0laRQkJCSggMSAqIHNpemVvZihfX2xlMzIpICkKIAogLyoKICAqIFRYIEluZm8gc3RydWN0dXJlCkBAIC0xMDEsNiArMTAzLDU0IEBACiAjZGVmaW5lIFRYSU5GT19XMF9VU0JfRE1BX1RYX0JVUlNUCUZJRUxEMzIoMHg4MDAwMDAwMCkKIAogLyoKKyAqIFJYIEluZm8gc3RydWN0dXJlCisgKi8KKworLyoKKyAqIFdvcmQgMAorICovCisKKyNkZWZpbmUgUlhJTkZPX1cwX1VTQl9ETUFfUlhfUEtUX0xFTglGSUVMRDMyKDB4MDAwMGZmZmYpCisKKy8qCisgKiBSWCBXSSBzdHJ1Y3R1cmUKKyAqLworCisvKgorICogV29yZDAKKyAqLworI2RlZmluZSBSWFdJX1cwX1dJUkVMRVNTX0NMSV9JRAkJRklFTEQzMigweDAwMDAwMGZmKQorI2RlZmluZSBSWFdJX1cwX0tFWV9JTkRFWAkJRklFTEQzMigweDAwMDAwMzAwKQorI2RlZmluZSBSWFdJX1cwX0JTU0lECQkJRklFTEQzMigweDAwMDAxYzAwKQorI2RlZmluZSBSWFdJX1cwX1VERgkJCUZJRUxEMzIoMHgwMDAwZTAwMCkKKyNkZWZpbmUgUlhXSV9XMF9NUERVX1RPVEFMX0JZVEVfQ09VTlQJRklFTEQzMigweDBmZmYwMDAwKQorI2RlZmluZSBSWFdJX1cwX1RJRAkJCUZJRUxEMzIoMHhmMDAwMDAwMCkKKworLyoKKyAqIFdvcmQxCisgKi8KKyNkZWZpbmUgUlhXSV9XMV9GUkFHCQkJRklFTEQzMigweDAwMDAwMDBmKQorI2RlZmluZSBSWFdJX1cxX1NFUVVFTkNFCQlGSUVMRDMyKDB4MDAwMGZmZjApCisjZGVmaW5lIFJYV0lfVzFfTUNTCQkJRklFTEQzMigweDAwN2YwMDAwKQorI2RlZmluZSBSWFdJX1cxX0JXCQkJRklFTEQzMigweDAwODAwMDAwKQorI2RlZmluZSBSWFdJX1cxX1NIT1JUX0dJCQlGSUVMRDMyKDB4MDEwMDAwMDApCisjZGVmaW5lIFJYV0lfVzFfU1RCQwkJCUZJRUxEMzIoMHgwNjAwMDAwMCkKKyNkZWZpbmUgUlhXSV9XMV9QSFlNT0RFCQkJRklFTEQzMigweGMwMDAwMDAwKQorCisvKgorICogV29yZDIKKyAqLworI2RlZmluZSBSWFdJX1cyX1JTU0kwCQkJRklFTEQzMigweDAwMDAwMGZmKQorI2RlZmluZSBSWFdJX1cyX1JTU0kxCQkJRklFTEQzMigweDAwMDBmZjAwKQorI2RlZmluZSBSWFdJX1cyX1JTU0kyCQkJRklFTEQzMigweDAwZmYwMDAwKQorCisvKgorICogV29yZDMKKyAqLworI2RlZmluZSBSWFdJX1czX1NOUjAJCQlGSUVMRDMyKDB4MDAwMDAwZmYpCisjZGVmaW5lIFJYV0lfVzNfU05SMQkJCUZJRUxEMzIoMHgwMDAwZmYwMCkKKworLyoKICAqIFJYIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBSWCBSaW5nLgogICovCiAKQEAgLTExNSwyNSArMTY1LDI1IEBACiAgKiBBTVNEVTogcnggd2l0aCA4MDIuMyBoZWFkZXIsIG5vdCA4MDIuMTEgaGVhZGVyLgogICovCiAKLSNkZWZpbmUgUlhJTkZPX1cwX0JBCQkJRklFTEQzMigweDAwMDAwMDAxKQotI2RlZmluZSBSWElORk9fVzBfREFUQQkJCUZJRUxEMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgUlhJTkZPX1cwX05VTExEQVRBCQlGSUVMRDMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFJYSU5GT19XMF9GUkFHCQkJRklFTEQzMigweDAwMDAwMDA4KQotI2RlZmluZSBSWElORk9fVzBfVU5JQ0FTVF9UT19NRQkJRklFTEQzMigweDAwMDAwMDEwKQotI2RlZmluZSBSWElORk9fVzBfTVVMVElDQVNUCQlGSUVMRDMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFJYSU5GT19XMF9CUk9BRENBU1QJCUZJRUxEMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgUlhJTkZPX1cwX01ZX0JTUwkJRklFTEQzMigweDAwMDAwMDgwKQotI2RlZmluZSBSWElORk9fVzBfQ1JDX0VSUk9SCQlGSUVMRDMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFJYSU5GT19XMF9DSVBIRVJfRVJST1IJCUZJRUxEMzIoMHgwMDAwMDYwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0FNU0RVCQkJRklFTEQzMigweDAwMDAwODAwKQotI2RlZmluZSBSWElORk9fVzBfSFRDCQkJRklFTEQzMigweDAwMDAxMDAwKQotI2RlZmluZSBSWElORk9fVzBfUlNTSQkJCUZJRUxEMzIoMHgwMDAwMjAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0wyUEFECQkJRklFTEQzMigweDAwMDA0MDAwKQotI2RlZmluZSBSWElORk9fVzBfQU1QRFUJCQlGSUVMRDMyKDB4MDAwMDgwMDApCi0jZGVmaW5lIFJYSU5GT19XMF9ERUNSWVBURUQJCUZJRUxEMzIoMHgwMDAxMDAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX1BMQ1BfUlNTSQkJRklFTEQzMigweDAwMDIwMDAwKQotI2RlZmluZSBSWElORk9fVzBfQ0lQSEVSX0FMRwkJRklFTEQzMigweDAwMDQwMDAwKQotI2RlZmluZSBSWElORk9fVzBfTEFTVF9BTVNEVQkJRklFTEQzMigweDAwMDgwMDAwKQotI2RlZmluZSBSWElORk9fVzBfUExDUF9TSUdOQUwJCUZJRUxEMzIoMHhmZmYwMDAwMCkKKyNkZWZpbmUgUlhEX1cwX0JBCQkJRklFTEQzMigweDAwMDAwMDAxKQorI2RlZmluZSBSWERfVzBfREFUQQkJCUZJRUxEMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgUlhEX1cwX05VTExEQVRBCQkJRklFTEQzMigweDAwMDAwMDA0KQorI2RlZmluZSBSWERfVzBfRlJBRwkJCUZJRUxEMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUlhEX1cwX1VOSUNBU1RfVE9fTUUJCUZJRUxEMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgUlhEX1cwX01VTFRJQ0FTVAkJRklFTEQzMigweDAwMDAwMDIwKQorI2RlZmluZSBSWERfVzBfQlJPQURDQVNUCQlGSUVMRDMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFJYRF9XMF9NWV9CU1MJCQlGSUVMRDMyKDB4MDAwMDAwODApCisjZGVmaW5lIFJYRF9XMF9DUkNfRVJST1IJCUZJRUxEMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgUlhEX1cwX0NJUEhFUl9FUlJPUgkJRklFTEQzMigweDAwMDAwNjAwKQorI2RlZmluZSBSWERfVzBfQU1TRFUJCQlGSUVMRDMyKDB4MDAwMDA4MDApCisjZGVmaW5lIFJYRF9XMF9IVEMJCQlGSUVMRDMyKDB4MDAwMDEwMDApCisjZGVmaW5lIFJYRF9XMF9SU1NJCQkJRklFTEQzMigweDAwMDAyMDAwKQorI2RlZmluZSBSWERfVzBfTDJQQUQJCQlGSUVMRDMyKDB4MDAwMDQwMDApCisjZGVmaW5lIFJYRF9XMF9BTVBEVQkJCUZJRUxEMzIoMHgwMDAwODAwMCkKKyNkZWZpbmUgUlhEX1cwX0RFQ1JZUFRFRAkJRklFTEQzMigweDAwMDEwMDAwKQorI2RlZmluZSBSWERfVzBfUExDUF9SU1NJCQlGSUVMRDMyKDB4MDAwMjAwMDApCisjZGVmaW5lIFJYRF9XMF9DSVBIRVJfQUxHCQlGSUVMRDMyKDB4MDAwNDAwMDApCisjZGVmaW5lIFJYRF9XMF9MQVNUX0FNU0RVCQlGSUVMRDMyKDB4MDAwODAwMDApCisjZGVmaW5lIFJYRF9XMF9QTENQX1NJR05BTAkJRklFTEQzMigweGZmZjAwMDAwKQogCiAjZW5kaWYgLyogUlQyODAwVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCA0ZDg0MWMwLi5iNGM2ZTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0xMDQsNiArMTA0LDEyIEBACiAjZGVmaW5lIEdFVF9EVVJBVElPTl9SRVMoX19zaXplLCBfX3JhdGUpKCgoX19zaXplKSAqIDggKiAxMCkgJSAoX19yYXRlKSkKIAogLyoKKyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIEwyIHBhZGRpbmcgYnl0ZXMgcmVxdWlyZWQgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZAorICogdGhlIHBheWxvYWQuCisgKi8KKyNkZWZpbmUgTDJQQURfU0laRShfX2hkcmxlbikJKC0oX19oZHJsZW4pICYgMykKKworLyoKICAqIERldGVybWluZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50LAogICogdG8gbWFrZSBzdXJlIHRoZSA4MDIuMTEgcGF5bG9hZCBpcyBwYWRkZWQgdG8gYSA0LWJ5dGUgYm91bmRyYXJ5CiAgKiB3ZSBtdXN0IGRldGVybWluZSB0aGUgYWRkcmVzcyBvZiB0aGUgcGF5bG9hZCBhbmQgY2FsY3VsYXRlIHRoZQpAQCAtOTMxLDI1ICs5MzcsMjUgQEAKIAkgICAgIHJ0MngwMGRldi0+Y2hpcC5ydCwgcnQyeDAwZGV2LT5jaGlwLnJmLCBydDJ4MDBkZXYtPmNoaXAucmV2KTsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyIHJ0MngwMF9ydChjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQsIGNvbnN0IHUxNiBjaGlwKQorc3RhdGljIGlubGluZSBjaGFyIHJ0MngwMF9ydChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB1MTYgcnQpCiB7Ci0JcmV0dXJuIChjaGlwc2V0LT5ydCA9PSBjaGlwKTsKKwlyZXR1cm4gKHJ0MngwMGRldi0+Y2hpcC5ydCA9PSBydCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2hhciBydDJ4MDBfcmYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0LCBjb25zdCB1MTYgY2hpcCkKK3N0YXRpYyBpbmxpbmUgY2hhciBydDJ4MDBfcmYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgdTE2IHJmKQogewotCXJldHVybiAoY2hpcHNldC0+cmYgPT0gY2hpcCk7CisJcmV0dXJuIChydDJ4MDBkZXYtPmNoaXAucmYgPT0gcmYpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBydDJ4MDBfcmV2KGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCkKK3N0YXRpYyBpbmxpbmUgdTMyIHJ0MngwMF9yZXYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gY2hpcHNldC0+cmV2OworCXJldHVybiBydDJ4MDBkZXYtPmNoaXAucmV2OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgcnQyeDAwX2NoZWNrX3Jldihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQsCitzdGF0aWMgaW5saW5lIGJvb2wgcnQyeDAwX2NoZWNrX3JldihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBjb25zdCB1MzIgbWFzaywgY29uc3QgdTMyIHJldikKIHsKLQlyZXR1cm4gKChjaGlwc2V0LT5yZXYgJiBtYXNrKSA9PSByZXYpOworCXJldHVybiAoKHJ0MngwMGRldi0+Y2hpcC5yZXYgJiBtYXNrKSA9PSByZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3NldF9jaGlwX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTk1OCwyMCArOTY0LDIwIEBACiAJcnQyeDAwZGV2LT5jaGlwLmludGYgPSBpbnRmOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgcnQyeDAwX2ludGYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0LAorc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgZW51bSBydDJ4MDBfY2hpcF9pbnRmIGludGYpCiB7Ci0JcmV0dXJuIChjaGlwc2V0LT5pbnRmID09IGludGYpOworCXJldHVybiAocnQyeDAwZGV2LT5jaGlwLmludGYgPT0gaW50Zik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaW50Zl9pc19wY2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gcnQyeDAwX2ludGYoJnJ0MngwMGRldi0+Y2hpcCwgUlQyWDAwX0NISVBfSU5URl9QQ0kpOworCXJldHVybiBydDJ4MDBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pbnRmX2lzX3VzYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXJldHVybiBydDJ4MDBfaW50ZigmcnQyeDAwZGV2LT5jaGlwLCBSVDJYMDBfQ0hJUF9JTlRGX1VTQik7CisJcmV0dXJuIHJ0MngwMF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9VU0IpOwogfQogCiAvKioKQEAgLTEwMTMsOSArMTAxOSw5IEBACiBpbnQgcnQyeDAwbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnQyeDAwbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogaW50IHJ0MngwMG1hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogaW50IHJ0MngwMG1hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKIHZvaWQgcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggMDZjNDNjYS4uZDc3MTFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMzg1LDkgKzM4NSw2IEBACiAJbWVtc2V0KCZyeGRlc2MsIDAsIHNpemVvZihyeGRlc2MpKTsKIAlydDJ4MDBkZXYtPm9wcy0+bGliLT5maWxsX3J4ZG9uZShlbnRyeSwgJnJ4ZGVzYyk7CiAKLQkvKiBUcmltIGJ1ZmZlciB0byBjb3JyZWN0IHNpemUgKi8KLQlza2JfdHJpbShlbnRyeS0+c2tiLCByeGRlc2Muc2l6ZSk7Ci0KIAkvKgogCSAqIFRoZSBkYXRhIGJlaGluZCB0aGUgaWVlZTgwMjExIGhlYWRlciBtdXN0IGJlCiAJICogYWxpZ25lZCBvbiBhIDQgYnl0ZSBib3VuZGFyeS4KQEAgLTQwNCwxMSArNDAxLDE2IEBACiAJICAgIChyeGRlc2MuZmxhZ3MgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkKIAkJcnQyeDAwY3J5cHRvX3J4X2luc2VydF9pdihlbnRyeS0+c2tiLCBoZWFkZXJfbGVuZ3RoLAogCQkJCQkgICZyeGRlc2MpOwotCWVsc2UgaWYgKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfTDJQQUQpCisJZWxzZSBpZiAoaGVhZGVyX2xlbmd0aCAmJgorCQkgKHJ4ZGVzYy5zaXplID4gaGVhZGVyX2xlbmd0aCkgJiYKKwkJIChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX0wyUEFEKSkKIAkJcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCWVsc2UKIAkJcnQyeDAwcXVldWVfYWxpZ25fcGF5bG9hZChlbnRyeS0+c2tiLCBoZWFkZXJfbGVuZ3RoKTsKIAorCS8qIFRyaW0gYnVmZmVyIHRvIGNvcnJlY3Qgc2l6ZSAqLworCXNrYl90cmltKGVudHJ5LT5za2IsIHJ4ZGVzYy5zaXplKTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlIGZyYW1lIHdhcyByZWNlaXZlZCB1c2luZyBIVC4gSW4gdGhhdCBjYXNlLAogCSAqIHRoZSByYXRlIGlzIHRoZSBNQ1MgaW5kZXggYW5kIHNob3VsZCBiZSBwYXNzZWQgdG8gbWFjODAyMTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRleCBkZTU0OWMyLi4wMGYxZjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCkBAIC0xODcsMTAgKzE4NywxMCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX3N0b3ApOwogCiBpbnQgcnQyeDAwbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYoY29uZi0+dmlmKTsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9CRUFDT04pOwogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBOVUxMOwogCXVuc2lnbmVkIGludCBpOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJICAgICF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJLyoKIAkJICogV2UgZG9uJ3Qgc3VwcG9ydCBtaXhlZCBjb21iaW5hdGlvbnMgb2YKQEAgLTI2Myw3ICsyNjMsNyBAQAogCSAqIGluY3JlYXNlIGludGVyZmFjZSBjb3VudCBhbmQgc3RhcnQgaW5pdGlhbGl6YXRpb24uCiAJICovCiAKLQlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQogCQlydDJ4MDBkZXYtPmludGZfYXBfY291bnQrKzsKIAllbHNlCiAJCXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQrKzsKQEAgLTI3MywxNiArMjczLDE2IEBACiAJbXV0ZXhfaW5pdCgmaW50Zi0+YmVhY29uX3NrYl9tdXRleCk7CiAJaW50Zi0+YmVhY29uID0gZW50cnk7CiAKLQlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KCZpbnRmLT5ic3NpZCwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkoJmludGYtPm1hYywgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCQltZW1jcHkoJmludGYtPmJzc2lkLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoJmludGYtPm1hYywgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAKIAkvKgogCSAqIFRoZSBNQUMgYWRkZHJlc3MgbXVzdCBiZSBjb25maWd1cmVkIGFmdGVyIHRoZSBkZXZpY2UKIAkgKiBoYXMgYmVlbiBpbml0aWFsaXplZC4gT3RoZXJ3aXNlIHRoZSBkZXZpY2UgY2FuIHJlc2V0CiAJICogdGhlIE1BQyByZWdpc3RlcnMuCiAJICovCi0JcnQyeDAwbGliX2NvbmZpZ19pbnRmKHJ0MngwMGRldiwgaW50ZiwgY29uZi0+dHlwZSwgaW50Zi0+bWFjLCBOVUxMKTsKKwlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCB2aWYtPnR5cGUsIGludGYtPm1hYywgTlVMTCk7CiAKIAkvKgogCSAqIFNvbWUgZmlsdGVycyBkZXBlbmQgb24gdGhlIGN1cnJlbnQgd29ya2luZyBtb2RlLiBXZSBjYW4gZm9yY2UKQEAgLTI5NiwxMCArMjk2LDEwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfYWRkX2ludGVyZmFjZSk7CiAKIHZvaWQgcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYoY29uZi0+dmlmKTsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBpbnRlcmZhY2VzIHRvIGJlIHJlbW92ZSB3aGlsZQpAQCAtMzA3LDExICszMDcsMTEgQEAKIAkgKiBubyBpbnRlcmZhY2UgaXMgcHJlc2VudC4KIAkgKi8KIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgfHwKLQkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCkgfHwKLQkgICAgKGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQorCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmICFydDJ4MDBkZXYtPmludGZfYXBfY291bnQpIHx8CisJICAgICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQogCQlyZXR1cm47CiAKLQlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQogCQlydDJ4MDBkZXYtPmludGZfYXBfY291bnQtLTsKIAllbHNlCiAJCXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQtLTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwppbmRleCAwZmViNGQwLi44MDFiZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCkBAIC00MSw2ICs0MSw5IEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiAwOworCiAJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewogCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIoKnJlZywgZmllbGQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYwppbmRleCAyMzlhZmM3Li4zZDhmYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYwpAQCAtMTc3LDU1ICsxNzcsNDUgQEAKIAogdm9pZCBydDJ4MDBxdWV1ZV9pbnNlcnRfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCiB7Ci0Jc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0JdW5zaWduZWQgaW50IGZyYW1lX2xlbmd0aCA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGludCBwYXlsb2FkX2xlbmd0aCA9IHNrYi0+bGVuIC0gaGVhZGVyX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgaGVhZGVyX2FsaWduID0gQUxJR05fU0laRShza2IsIDApOwogCXVuc2lnbmVkIGludCBwYXlsb2FkX2FsaWduID0gQUxJR05fU0laRShza2IsIGhlYWRlcl9sZW5ndGgpOwotCXVuc2lnbmVkIGludCBsMnBhZCA9IDQgLSAocGF5bG9hZF9hbGlnbiAtIGhlYWRlcl9hbGlnbik7CisJdW5zaWduZWQgaW50IGwycGFkID0gcGF5bG9hZF9sZW5ndGggPyBMMlBBRF9TSVpFKGhlYWRlcl9sZW5ndGgpIDogMDsKIAotCWlmIChoZWFkZXJfYWxpZ24gPT0gcGF5bG9hZF9hbGlnbikgewotCQkvKgotCQkgKiBCb3RoIGhlYWRlciBhbmQgcGF5bG9hZCBtdXN0IGJlIG1vdmVkIHRoZSBzYW1lCi0JCSAqIGFtb3VudCBvZiBieXRlcyB0byBhbGlnbiB0aGVtIHByb3Blcmx5LiBUaGlzIG1lYW5zCi0JCSAqIHdlIGRvbid0IHVzZSB0aGUgTDIgcGFkZGluZyBidXQganVzdCBtb3ZlIHRoZSBlbnRpcmUKLQkJICogZnJhbWUuCi0JCSAqLwotCQlydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShza2IpOwotCX0gZWxzZSBpZiAoIXBheWxvYWRfYWxpZ24pIHsKLQkJLyoKLQkJICogU2ltcGxlIEwyIHBhZGRpbmcsIG9ubHkgdGhlIGhlYWRlciBuZWVkcyB0byBiZSBtb3ZlZCwKLQkJICogdGhlIHBheWxvYWQgaXMgYWxyZWFkeSBwcm9wZXJseSBhbGlnbmVkLgotCQkgKi8KLQkJc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOwotCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgaGVhZGVyX2FsaWduLCBmcmFtZV9sZW5ndGgpOwotCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKLQl9IGVsc2UgewotCQkvKgotCQkgKgotCQkgKiBDb21wbGljYXRlZCBMMiBwYWRkaW5nLCBib3RoIGhlYWRlciBhbmQgcGF5bG9hZCBuZWVkCi0JCSAqIHRvIGJlIG1vdmVkLiBCeSBkZWZhdWx0IHdlIG9ubHkgbW92ZSB0byB0aGUgc3RhcnQKLQkJICogb2YgdGhlIGJ1ZmZlciwgc28gb3VyIGhlYWRlciBhbGlnbm1lbnQgbmVlZHMgdG8gYmUKLQkJICogaW5jcmVhc2VkIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgdGhlIGhlYWRlcgotCQkgKiB0byBiZSBtb3ZlZC4KLQkJICovCi0JCWlmIChwYXlsb2FkX2FsaWduID4gaGVhZGVyX2FsaWduKQotCQkJaGVhZGVyX2FsaWduICs9IDQ7CisJLyoKKwkgKiBBZGp1c3QgdGhlIGhlYWRlciBhbGlnbm1lbnQgaWYgdGhlIHBheWxvYWQgbmVlZHMgdG8gYmUgbW92ZWQgbW9yZQorCSAqIHRoYW4gdGhlIGhlYWRlci4KKwkgKi8KKwlpZiAocGF5bG9hZF9hbGlnbiA+IGhlYWRlcl9hbGlnbikKKwkJaGVhZGVyX2FsaWduICs9IDQ7CiAKLQkJc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOwotCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgaGVhZGVyX2FsaWduLCBoZWFkZXJfbGVuZ3RoKTsKKwkvKiBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGlmIG5vIGFsaWdubWVudCBpcyBuZWVkZWQgKi8KKwlpZiAoIWhlYWRlcl9hbGlnbikKKwkJcmV0dXJuOworCisJLyogUmVzZXJ2ZSB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBpbiBmcm9udCBvZiB0aGUgZnJhbWUgKi8KKwlza2JfcHVzaChza2IsIGhlYWRlcl9hbGlnbik7CisKKwkvKgorCSAqIE1vdmUgdGhlIGhlYWRlci4KKwkgKi8KKwltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgaGVhZGVyX2FsaWduLCBoZWFkZXJfbGVuZ3RoKTsKKworCS8qIE1vdmUgdGhlIHBheWxvYWQsIGlmIHByZXNlbnQgYW5kIGlmIHJlcXVpcmVkICovCisJaWYgKHBheWxvYWRfbGVuZ3RoICYmIHBheWxvYWRfYWxpZ24pCiAJCW1lbW1vdmUoc2tiLT5kYXRhICsgaGVhZGVyX2xlbmd0aCArIGwycGFkLAogCQkJc2tiLT5kYXRhICsgaGVhZGVyX2xlbmd0aCArIGwycGFkICsgcGF5bG9hZF9hbGlnbiwKLQkJCWZyYW1lX2xlbmd0aCAtIGhlYWRlcl9sZW5ndGgpOwotCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKLQl9CisJCQlwYXlsb2FkX2xlbmd0aCk7CisKKwkvKiBUcmltIHRoZSBza2IgdG8gdGhlIGNvcnJlY3Qgc2l6ZSAqLworCXNrYl90cmltKHNrYiwgaGVhZGVyX2xlbmd0aCArIGwycGFkICsgcGF5bG9hZF9sZW5ndGgpOwogfQogCiB2b2lkIHJ0MngwMHF1ZXVlX3JlbW92ZV9sMnBhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCkKIHsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKLQl1bnNpZ25lZCBpbnQgbDJwYWQgPSA0IC0gKGhlYWRlcl9sZW5ndGggJiAzKTsKKwl1bnNpZ25lZCBpbnQgbDJwYWQgPSBMMlBBRF9TSVpFKGhlYWRlcl9sZW5ndGgpOwogCi0JaWYgKCFsMnBhZCB8fCAoc2tiZGVzYy0+ZmxhZ3MgJiBTS0JERVNDX0wyX1BBRERFRCkpCisJaWYgKCFsMnBhZCkKIAkJcmV0dXJuOwogCiAJbWVtbW92ZShza2ItPmRhdGEgKyBsMnBhZCwgc2tiLT5kYXRhLCBoZWFkZXJfbGVuZ3RoKTsKQEAgLTM0Niw3ICszMzYsOSBAQAogCSAqIEhlYWRlciBhbmQgYWxpZ25tZW50IGluZm9ybWF0aW9uLgogCSAqLwogCXR4ZGVzYy0+aGVhZGVyX2xlbmd0aCA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKGVudHJ5LT5za2IpOwotCXR4ZGVzYy0+bDJwYWQgPSBBTElHTl9TSVpFKGVudHJ5LT5za2IsIHR4ZGVzYy0+aGVhZGVyX2xlbmd0aCk7CisJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5mbGFncykgJiYKKwkgICAgKGVudHJ5LT5za2ItPmxlbiA+IHR4ZGVzYy0+aGVhZGVyX2xlbmd0aCkpCisJCXR4ZGVzYy0+bDJwYWQgPSBMMlBBRF9TSVpFKHR4ZGVzYy0+aGVhZGVyX2xlbmd0aCk7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBmcmFtZSBpcyB0byBiZSBhY2tlZC4KQEAgLTM4NywxMCArMzc5LDEzIEBACiAKIAkvKgogCSAqIEJlYWNvbnMgYW5kIHByb2JlIHJlc3BvbnNlcyByZXF1aXJlIHRoZSB0c2YgdGltZXN0YW1wCi0JICogdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgZnJhbWUuCisJICogdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgZnJhbWUsIGV4Y2VwdCBmb3IgYSBmcmFtZSB0aGF0IGhhcyBiZWVuIGluamVjdGVkCisJICogdGhyb3VnaCBhIG1vbml0b3IgaW50ZXJmYWNlLiBUaGlzIGxhdHRlciBpcyBuZWVkZWQgZm9yIHRlc3RpbmcgYQorCSAqIG1vbml0b3IgaW50ZXJmYWNlLgogCSAqLwotCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKLQkgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkKKwlpZiAoKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCSAgICBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSAmJgorCSAgICAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSkKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncyk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAppbmRleCA3MDc3NWU1Li5jMWU0ODJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaApAQCAtOTIsOCArOTIsNiBAQAogICogQFNLQkRFU0NfRE1BX01BUFBFRF9UWDogJnNrYl9kbWEgZmllbGQgaGFzIGJlZW4gbWFwcGVkIGZvciBUWAogICogQFNLQkRFU0NfSVZfU1RSSVBQRUQ6IEZyYW1lIGNvbnRhaW5lZCBhIElWL0VJViBwcm92aWRlZCBieQogICoJbWFjODAyMTEgYnV0IHdhcyBzdHJpcHBlZCBmb3IgcHJvY2Vzc2luZyBieSB0aGUgZHJpdmVyLgotICogQFNLQkRFU0NfTDJfUEFEREVEOiBQYXlsb2FkIGhhcyBiZWVuIHBhZGRlZCBmb3IgNC1ieXRlIGFsaWdubWVudCwKLSAqCXRoZSBwYWRkZWQgYnl0ZXMgYXJlIGxvY2F0ZWQgYmV0d2VlbiBoZWFkZXIgYW5kIHBheWxvYWQuCiAgKiBAU0tCREVTQ19OT1RfTUFDODAyMTE6IEZyYW1lIGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBtYWM4MDIxMSwKICAqCWRvbid0IHRyeSB0byBwYXNzIGl0IGJhY2suCiAgKi8KQEAgLTEwMSw4ICs5OSw3IEBACiAJU0tCREVTQ19ETUFfTUFQUEVEX1JYID0gMSA8PCAwLAogCVNLQkRFU0NfRE1BX01BUFBFRF9UWCA9IDEgPDwgMSwKIAlTS0JERVNDX0lWX1NUUklQUEVEID0gMSA8PCAyLAotCVNLQkRFU0NfTDJfUEFEREVEID0gMSA8PCAzLAotCVNLQkRFU0NfTk9UX01BQzgwMjExID0gMSA8PCA0LAorCVNLQkRFU0NfTk9UX01BQzgwMjExID0gMSA8PCAzLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCAwY2E1ODkzLi4xZjk3YTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTYzNyw4ICs2MzcsNyBAQAogCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCA0LCAmcjQpOwogCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCA3NywgJnI3Nyk7CiAKLQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLAotCQkJICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MzI1KSk7CisJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzI1KSk7CiAKIAkvKgogCSAqIENvbmZpZ3VyZSB0aGUgUlggYW50ZW5uYS4KQEAgLTY4NCw4ICs2ODMsNyBAQAogCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCA0LCAmcjQpOwogCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCA3NywgJnI3Nyk7CiAKLQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLAotCQkJICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI5KSk7CisJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI5KSk7CiAJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfRlJBTUVfRU5ELAogCQkJICAhdGVzdF9iaXQoQ09ORklHX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmZsYWdzKSk7CiAKQEAgLTgzMywxMiArODMxLDExIEBACiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQSFlfQ1NSMCwgcmVnKTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MzI1KSkKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzMjUpKQogCQlydDYxcGNpX2NvbmZpZ19hbnRlbm5hXzV4KHJ0MngwMGRldiwgYW50KTsKLQllbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkKKwllbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKQogCQlydDYxcGNpX2NvbmZpZ19hbnRlbm5hXzJ4KHJ0MngwMGRldiwgYW50KTsKLQllbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI5KSkgeworCWVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyOSkpIHsKIAkJaWYgKHRlc3RfYml0KENPTkZJR19ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV8yeChydDJ4MDBkZXYsIGFudCk7CiAJCWVsc2UKQEAgLTg3OSw4ICs4NzYsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmMywgUkYzX1RYUE9XRVIsIFRYUE9XRVJfVE9fREVWKHR4cG93ZXIpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJmLT5yZjQsIFJGNF9GUkVRX09GRlNFVCwgcnQyeDAwZGV2LT5mcmVxX29mZnNldCk7CiAKLQlzbWFydCA9ICEocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkJICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSk7CisJc21hcnQgPSAhKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSk7CiAKIAlydDYxcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMywgJnIzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLCBzbWFydCk7CkBAIC0yMzAyLDEwICsyMjk4LDEwIEBACiAJcnQyeDAwX3NldF9jaGlwX3JmKHJ0MngwMGRldiwgdmFsdWUsIHJlZyk7CiAJcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKIAotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUzMjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkpIHsKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTMyNSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNykgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyOSkpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTIzNjAsNyArMjM1Niw3IEBACiAJICogdGhlIGFudGVubmEgc2V0dGluZ3Mgc2hvdWxkIGJlIGdhdGhlcmVkIGZyb20gdGhlIE5JQwogCSAqIGVlcHJvbSB3b3JkLgogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI5KSAmJgorCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpICYmCiAJICAgICF0ZXN0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKSkgewogCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0KIAkJICAgIEFOVEVOTkFfQSArIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfUlhfRklYRUQpOwpAQCAtMjU3MSw4ICsyNTY3LDcgQEAKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX3NlcTsKIAl9CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTMyNSkpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzMjUpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX3NlcSk7CiAJfQpAQCAtMjgxMiw3ICsyODA3LDcgQEAKIC8qCiAgKiBSVDYxcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0NjFwY2lfZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQ2MXBjaV9kZXZpY2VfdGFibGUpID0gewogCS8qIFJUMjU2MXMgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAzMDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0NjFwY2lfb3BzKSB9LAogCS8qIFJUMjU2MSB2MiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggY2VkM2I2YS4uYTAyNjkxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJICogYWxsIG90aGVycyBjb250YWluIDIwIGJpdHMuCiAJCSAqLwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUEhZX0NTUjRfTlVNQkVSX09GX0JJVFMsCi0JCQkJICAgMjAgKyAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkJCQkJIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKSk7CisJCQkJICAgMjAgKyAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fAorCQkJCQkgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUEhZX0NTUjRfSUZfU0VMRUNULCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1I0X0JVU1ksIDEpOwogCkBAIC03NDEsMTEgKzc0MSw5IEBACiAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQSFlfQ1NSMCwgcmVnKTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSkKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpKQogCQlydDczdXNiX2NvbmZpZ19hbnRlbm5hXzV4KHJ0MngwMGRldiwgYW50KTsKLQllbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI4KSB8fAotCQkgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI4KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKQogCQlydDczdXNiX2NvbmZpZ19hbnRlbm5hXzJ4KHJ0MngwMGRldiwgYW50KTsKIH0KIApAQCAtNzc5LDggKzc3Nyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYzLCBSRjNfVFhQT1dFUiwgVFhQT1dFUl9UT19ERVYodHhwb3dlcikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmNCwgUkY0X0ZSRVFfT0ZGU0VULCBydDJ4MDBkZXYtPmZyZXFfb2Zmc2V0KTsKIAotCXNtYXJ0ID0gIShydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSB8fAotCQkgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKTsKKwlzbWFydCA9ICEocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKTsKIAogCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAzLCAmcjMpOwogCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsIHNtYXJ0KTsKQEAgLTEyMTAsOCArMTIwNyw3IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU0VDX0NTUjUsIDB4MDAwMDAwMDApOwogCiAJcmVnID0gMHgwMDAwMjNiMDsKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1IxX1JGX1JQSSwgMSk7CiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEhZX0NTUjEsIHJlZyk7CiAKQEAgLTE4MjcsMTYgKzE4MjMsMTYgQEAKIAlydDJ4MDBfc2V0X2NoaXAocnQyeDAwZGV2LCBSVDI1NzEsIHZhbHVlLCByZWcpOwogCXJ0MngwMF9wcmludF9jaGlwKHJ0MngwMGRldik7CiAKLQlpZiAoIXJ0MngwMF9jaGVja19yZXYoJnJ0MngwMGRldi0+Y2hpcCwgMHgwMDBmZmZmMCwgMHgyNTczMCkgfHwKLQkgICAgcnQyeDAwX2NoZWNrX3JldigmcnQyeDAwZGV2LT5jaGlwLCAweDAwMDAwMDBmLCAwKSkgeworCWlmICghcnQyeDAwX2NoZWNrX3JldihydDJ4MDBkZXYsIDB4MDAwZmZmZjAsIDB4MjU3MzApIHx8CisJICAgIHJ0MngwMF9jaGVja19yZXYocnQyeDAwZGV2LCAweDAwMDAwMDBmLCAwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI4KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjA4MSwxNyArMjA3NywxNyBAQAogCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOwogCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI4KSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjgpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI4KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1Mjg7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjI2KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjY7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjVfMjUyNzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjVfMjUyNyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc181MjI1XzI1Mjc7CkBAIC0yMzU0LDYgKzIzNTAsNyBAQAogCXsgVVNCX0RFVklDRSgweDA4ZGQsIDB4MDEyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogQnVmZmFsbyAqLwogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGQ5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKaW5kZXggODcyMTI4Mi4uZGUzODQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKQEAgLTYwLDcgKzYwLDYgQEAKIAlzdHJ1Y3QgcnRsODE4eF9jc3IgX19pb21lbSAqbWFwOwogCWNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyAqcmY7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlpbnQgbW9kZTsKIAogCS8qIHJ0bDgxODAgZHJpdmVyIHNwZWNpZmljICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCmluZGV4IDhhNDBhMTQuLmI5MTkyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKQEAgLTMzLDcgKzMzLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUlRMODE4MCAvIFJUTDgxODUgUENJIHdpcmVsZXNzIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE4MF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsODE4MF90YWJsZSkgPSB7CiAJLyogcnRsODE4NSAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE4NSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CRUxLSU4sIDB4NzAwZikgfSwKQEAgLTgyLDggKzgyLDYgQEAKIH07CiAKIAotCi0KIHZvaWQgcnRsODE4MF93cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtNjE1LDcgKzYxMyw2IEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKIAotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCXJldHVybiAwOwogCiAgZXJyX2ZyZWVfcmluZ3M6CkBAIC02MzMsOCArNjMwLDYgQEAKIAl1OCByZWc7CiAJaW50IGk7CiAKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7Ci0KIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7CiAKIAlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKQEAgLTY1NywzOCArNjUyLDM5IEBACiB9CiAKIHN0YXRpYyBpbnQgcnRsODE4MF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZikKKwkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1swXSwKLQkJCSAgbGUzMl90b19jcHUoKihfX2xlMzIgKiljb25mLT5tYWNfYWRkcikpOworCQkJICBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXZpZi0+YWRkcikpOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIChfX2xlMTYgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1s0XSwKLQkJCSAgbGUxNl90b19jcHUoKihfX2xlMTYgKikoY29uZi0+bWFjX2FkZHIgKyA0KSkpOworCQkJICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSh2aWYtPmFkZHIgKyA0KSkpOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4MF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCXByaXYtPnZpZiA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKaW5kZXggNmFmMGYzZi4uNmJiMzIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKQEAgLTkyLDcgKzkyLDcgQEAKIAlzdHJ1Y3QgcnRsODE4eF9jc3IgKm1hcDsKIAljb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgKnJmOwogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0JaW50IG1vZGU7CisKIAkvKiBUaGUgbXV0ZXggcHJvdGVjdHMgdGhlIFRYIGxvb3BiYWNrIHN0YXRlLgogCSAqIEFueSBhdHRlbXB0IHRvIHNldCBjaGFubmVscyBjb25jdXJyZW50bHkgbG9ja3MgdGhlIGRldmljZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwppbmRleCBiYzU3MjZkLi5mMzM2YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCkBAIC0xMDE4LDMxICsxMDE4LDMwIEBACiB9CiAKIHN0YXRpYyBpbnQgcnRsODE4N19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCWlmIChwcml2LT52aWYpCiAJCWdvdG8gZXhpdDsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBleGl0OwogCX0KIAogCXJldCA9IDA7Ci0JcHJpdi0+dmlmID0gY29uZi0+dmlmOworCXByaXYtPnZpZiA9IHZpZjsKIAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCiAJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TUFDW2ldLAotCQkJCSAoKHU4ICopY29uZi0+bWFjX2FkZHIpW2ldKTsKKwkJCQkgKCh1OCAqKXZpZi0+YWRkcilbaV0pOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAKIGV4aXQ6CkBAIC0xMDUxLDExICsxMDUwLDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxODdfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKIAlwcml2LT52aWYgPSBOVUxMOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiB9CkBAIC0xMzY1LDcgKzEzNjMsNiBAQAogCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7CiAKIAotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKIAkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCmluZGV4IGRlZDQ0YzAuLmY4MmFhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBydGw4MTg3X2xlZCAqbGVkID0gJnByaXYtPmxlZF90eDsKIAogCS8qIERvbid0IGNoYW5nZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KLQlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwlpZiAoIXByaXYtPnZpZiB8fCBwcml2LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCiAJCXJldHVybiA7CiAKIAkvKiBTa2lwIGlmIHRoZSBMRUQgaXMgbm90IHJlZ2lzdGVyZWQuICovCkBAIC03MSw3ICs3MSw3IEBACiAJc3RydWN0IHJ0bDgxODdfbGVkICpsZWQgPSAmcHJpdi0+bGVkX3R4OwogCiAJLyogRG9uJ3QgY2hhbmdlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLwotCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCWlmICghcHJpdi0+dmlmIHx8IHByaXYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKIAkJcmV0dXJuIDsKIAogCS8qIFNraXAgaWYgdGhlIExFRCBpcyBub3QgcmVnaXN0ZXJlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaAppbmRleCAwNTQ1MzNmLi42MzAxNTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKIAogCXN0cnVjdCBkZW50cnkgKnR4X3F1ZXVlX2xlbjsKKwlzdHJ1Y3QgZGVudHJ5ICp0eF9xdWV1ZV9zdGF0dXM7CiAKIAlzdHJ1Y3QgZGVudHJ5ICpyZXRyeV9jb3VudDsKIAlzdHJ1Y3QgZGVudHJ5ICpleGNlc3NpdmVfcmV0cmllczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jCmluZGV4IGFjZmEwODYuLmJlZmYwODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guYwpAQCAtOTc2LDMgKzk3Niw3MiBAQAogCWtmcmVlKGFjeCk7CiAJcmV0dXJuIHJldDsKIH0KKworaW50IHdsMTI1MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBhYywgdTggY3dfbWluLCB1MTYgY3dfbWF4LAorCQkgICAgICB1OCBhaWZzLCB1MTYgdHhvcCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2FjeF9hY19jZmcgKmFjeDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWMgY2ZnICVkIGN3X21pbmcgJWQgY3dfbWF4ICVkICIKKwkJICAgICAiYWlmcyAlZCB0eG9wICVkIiwgYWMsIGN3X21pbiwgY3dfbWF4LCBhaWZzLCB0eG9wKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+YWMgPSBhYzsKKwlhY3gtPmN3X21pbiA9IGN3X21pbjsKKwlhY3gtPmN3X21heCA9IGN3X21heDsKKwlhY3gtPmFpZnNuID0gYWlmczsKKwlhY3gtPnR4b3BfbGltaXQgPSB0eG9wOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BQ19DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiYWN4IGFjIGNmZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBxdWV1ZSwKKwkJICAgICAgIGVudW0gd2wxMjUxX2FjeF9jaGFubmVsX3R5cGUgdHlwZSwKKwkJICAgICAgIHU4IHRzaWQsIGVudW0gd2wxMjUxX2FjeF9wc19zY2hlbWUgcHNfc2NoZW1lLAorCQkgICAgICAgZW51bSB3bDEyNTFfYWN4X2Fja19wb2xpY3kgYWNrX3BvbGljeSkKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2FjeF90aWRfY2ZnICphY3g7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHRpZCBjZmcgJWQgdHlwZSAlZCB0c2lkICVkICIKKwkJICAgICAicHNfc2NoZW1lICVkIGFja19wb2xpY3kgJWQiLCBxdWV1ZSwgdHlwZSwgdHNpZCwKKwkJICAgICBwc19zY2hlbWUsIGFja19wb2xpY3kpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5xdWV1ZSA9IHF1ZXVlOworCWFjeC0+dHlwZSA9IHR5cGU7CisJYWN4LT50c2lkID0gdHNpZDsKKwlhY3gtPnBzX3NjaGVtZSA9IHBzX3NjaGVtZTsKKwlhY3gtPmFja19wb2xpY3kgPSBhY2tfcG9saWN5OworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9USURfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImFjeCB0aWQgY2ZnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaAppbmRleCA2NTIzNzE0Li4yNjE2MGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKQEAgLTExNjYsNiArMTE2Niw4NyBAQAogCXU4ICBwYWRkaW5nOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB3bDEyNTFfYWN4X2FjX2NmZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBBY2Nlc3MgQ2F0ZWdvcnkgLSBUaGUgVFggcXVldWUncyBhY2Nlc3MgY2F0ZWdvcnkKKwkgKiAocmVmZXIgdG8gQWNjZXNzQ2F0ZWdvcnlfZW51bSkKKwkgKi8KKwl1OCBhYzsKKworCS8qCisJICogVGhlIGNvbnRlbnRpb24gd2luZG93IG1pbmltdW0gc2l6ZSAoaW4gc2xvdHMpIGZvcgorCSAqIHRoZSBhY2Nlc3MgY2xhc3MuCisJICovCisJdTggY3dfbWluOworCisJLyoKKwkgKiBUaGUgY29udGVudGlvbiB3aW5kb3cgbWF4aW11bSBzaXplIChpbiBzbG90cykgZm9yCisJICogdGhlIGFjY2VzcyBjbGFzcy4KKwkgKi8KKwl1MTYgY3dfbWF4OworCisJLyogVGhlIEFJRiB2YWx1ZSAoaW4gc2xvdHMpIGZvciB0aGUgYWNjZXNzIGNsYXNzLiAqLworCXU4IGFpZnNuOworCisJdTggcmVzZXJ2ZWQ7CisKKwkvKiBUaGUgVFggT3AgTGltaXQgKGluIG1pY3Jvc2Vjb25kcykgZm9yIHRoZSBhY2Nlc3MgY2xhc3MuICovCisJdTE2IHR4b3BfbGltaXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlIHsKKwlDSEFOTkVMX1RZUEVfRENGCT0gMCwKKwlDSEFOTkVMX1RZUEVfRURDRgk9IDEsCisJQ0hBTk5FTF9UWVBFX0hDQ0EJPSAyLAorfTsKKworZW51bSB3bDEyNTFfYWN4X3BzX3NjaGVtZSB7CisJLyogcmVndWxhciBwczogc2ltcGxlIHNlbmRpbmcgb2YgcGFja2V0cyAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWQk9IDAsCisKKwkvKiBzZW5kaW5nIGEgcGFja2V0IHRyaWdnZXJzIGEgdW5zY2hlZHVsZWQgYXBzZCBkb3duc3RyZWFtICovCisJV0wxMjUxX0FDWF9QU19TQ0hFTUVfVVBTRF9UUklHR0VSCT0gMSwKKworCS8qIGEgcHNwb2xsIHBhY2tldCB3aWxsIGJlIHNlbnQgYmVmb3JlIGV2ZXJ5IGRhdGEgcGFja2V0ICovCisJV0wxMjUxX0FDWF9QU19TQ0hFTUVfTEVHQUNZX1BTUE9MTAk9IDIsCisKKwkvKiBzY2hlZHVsZWQgYXBzZCBtb2RlICovCisJV0wxMjUxX0FDWF9QU19TQ0hFTUVfU0FQU0QJCT0gMywKK307CisKK2VudW0gd2wxMjUxX2FjeF9hY2tfcG9saWN5IHsKKwlXTDEyNTFfQUNYX0FDS19QT0xJQ1lfTEVHQUNZCT0gMCwKKwlXTDEyNTFfQUNYX0FDS19QT0xJQ1lfTk9fQUNLCT0gMSwKKwlXTDEyNTFfQUNYX0FDS19QT0xJQ1lfQkxPQ0sJPSAyLAorfTsKKworc3RydWN0IHdsMTI1MV9hY3hfdGlkX2NmZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyogdHggcXVldWUgaWQgbnVtYmVyICgwLTcpICovCisJdTggcXVldWU7CisKKwkvKiBjaGFubmVsIGFjY2VzcyB0eXBlIGZvciB0aGUgcXVldWUsIGVudW0gd2wxMjUxX2FjeF9jaGFubmVsX3R5cGUgKi8KKwl1OCB0eXBlOworCisJLyogRURDQTogYWMgaW5kZXggKDAtMyksIEhDQ0E6IHRyYWZmaWMgc3RyZWFtIGlkICg4LTE1KSAqLworCXU4IHRzaWQ7CisKKwkvKiBwcyBzY2hlbWUgb2YgdGhlIHNwZWNpZmllZCBxdWV1ZSwgZW51bSB3bDEyNTFfYWN4X3BzX3NjaGVtZSAqLworCXU4IHBzX3NjaGVtZTsKKworCS8qIHRoZSB0eCBxdWV1ZSBhY2sgcG9saWN5LCBlbnVtIHdsMTI1MV9hY3hfYWNrX3BvbGljeSAqLworCXU4IGFja19wb2xpY3k7CisKKwl1OCBwYWRkaW5nWzNdOworCisJLyogbm90IHN1cHBvcnRlZCAqLworCXUzMiBhcHNkY29uZlsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgICAgSG9zdCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKFdpTGluayAtPiBIb3N0KQpAQCAtMTMyMiw1ICsxNDAzLDExIEBACiBpbnQgd2wxMjUxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNTEgKndsKTsKIGludCB3bDEyNTFfYWN4X21lbV9jZmcoc3RydWN0IHdsMTI1MSAqd2wpOwogaW50IHdsMTI1MV9hY3hfd3JfdGJ0dF9hbmRfZHRpbShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IHRidHQsIHU4IGR0aW0pOworaW50IHdsMTI1MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBhYywgdTggY3dfbWluLCB1MTYgY3dfbWF4LAorCQkgICAgICB1OCBhaWZzLCB1MTYgdHhvcCk7CitpbnQgd2wxMjUxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBxdWV1ZSwKKwkJICAgICAgIGVudW0gd2wxMjUxX2FjeF9jaGFubmVsX3R5cGUgdHlwZSwKKwkJICAgICAgIHU4IHRzaWQsIGVudW0gd2wxMjUxX2FjeF9wc19zY2hlbWUgcHNfc2NoZW1lLAorCQkgICAgICAgZW51bSB3bDEyNTFfYWN4X2Fja19wb2xpY3kgYWNrX3BvbGljeSk7CiAKICNlbmRpZiAvKiBfX1dMMTI1MV9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCmluZGV4IGEwMDcyMzAuLjBjY2JhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCkBAIC0yMzcsNiArMjM3LDI3IEBACiAJLm9wZW4gPSB3bDEyNTFfb3Blbl9maWxlX2dlbmVyaWMsCiB9OwogCitzdGF0aWMgc3NpemVfdCB0eF9xdWV1ZV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzNdLCBzdGF0dXM7CisJaW50IGxlbjsKKworCWlmICh3bC0+dHhfcXVldWVfc3RvcHBlZCkKKwkJc3RhdHVzID0gJ3MnOworCWVsc2UKKwkJc3RhdHVzID0gJ3InOworCisJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlY1xuIiwgc3RhdHVzKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHhfcXVldWVfc3RhdHVzX29wcyA9IHsKKwkucmVhZCA9IHR4X3F1ZXVlX3N0YXR1c19yZWFkLAorCS5vcGVuID0gd2wxMjUxX29wZW5fZmlsZV9nZW5lcmljLAorfTsKKwogc3RhdGljIHZvaWQgd2wxMjUxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHN0cnVjdCB3bDEyNTEgKndsKQogewogCURFQlVHRlNfRldTVEFUU19ERUwodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwpAQCAtMzMxLDYgKzM1Miw3IEBACiAJREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwogCiAJREVCVUdGU19ERUwodHhfcXVldWVfbGVuKTsKKwlERUJVR0ZTX0RFTCh0eF9xdWV1ZV9zdGF0dXMpOwogCURFQlVHRlNfREVMKHJldHJ5X2NvdW50KTsKIAlERUJVR0ZTX0RFTChleGNlc3NpdmVfcmV0cmllcyk7CiB9CkBAIC00MzEsNiArNDUzLDcgQEAKIAlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CiAKIAlERUJVR0ZTX0FERCh0eF9xdWV1ZV9sZW4sIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCURFQlVHRlNfQUREKHR4X3F1ZXVlX3N0YXR1cywgd2wtPmRlYnVnZnMucm9vdGRpcik7CiAJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwogCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwppbmRleCA1Y2I1NzMzLi41YWFkNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwpAQCAtMjk0LDYgKzI5NCwxMSBAQAogCQkJZ290byBvdXQ7CiAJfQogCisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX0JFLCBDV01JTl9CRSwgQ1dNQVhfQkUsIEFJRlNfRElGUywgVFhPUF9CRSk7CisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX0JLLCBDV01JTl9CSywgQ1dNQVhfQkssIEFJRlNfRElGUywgVFhPUF9CSyk7CisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX1ZJLCBDV01JTl9WSSwgQ1dNQVhfVkksIEFJRlNfRElGUywgVFhPUF9WSSk7CisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX1ZPLCBDV01JTl9WTywgQ1dNQVhfVk8sIEFJRlNfRElGUywgVFhPUF9WTyk7CisKIG91dDoKIAlrZnJlZShjb25maWcpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCmluZGV4IGIzYjI1ZWMuLjI2OWNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCkBAIC0yNiw2ICsyNiw1MyBAQAogCiAjaW5jbHVkZSAid2wxMjUxLmgiCiAKK2VudW0geworCS8qIGJlc3QgZWZmb3J0L2xlZ2FjeSAqLworCUFDX0JFID0gMCwKKworCS8qIGJhY2tncm91bmQgKi8KKwlBQ19CSyA9IDEsCisKKwkvKiB2aWRlbyAqLworCUFDX1ZJID0gMiwKKworCS8qIHZvaWNlICovCisJQUNfVk8gPSAzLAorCisJLyogYnJvYWRjYXN0IGR1bW15IGFjY2VzcyBjYXRlZ29yeSAqLworCUFDX0JDQVNUID0gNCwKKworCU5VTV9BQ0NFU1NfQ0FURUdPUklFUyA9IDQKK307CisKKy8qIGZvbGxvd2luZyBhcmUgZGVmdWx0IHZhbHVlcyBmb3IgdGhlIElFIGZpZWxkcyovCisjZGVmaW5lIENXTUlOX0JLICAxNQorI2RlZmluZSBDV01JTl9CRSAgMTUKKyNkZWZpbmUgQ1dNSU5fVkkgIDcKKyNkZWZpbmUgQ1dNSU5fVk8gIDMKKyNkZWZpbmUgQ1dNQVhfQksgIDEwMjMKKyNkZWZpbmUgQ1dNQVhfQkUgIDYzCisjZGVmaW5lIENXTUFYX1ZJICAxNQorI2RlZmluZSBDV01BWF9WTyAgNworCisvKiBzbG90IG51bWJlciBzZXR0aW5nIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBhdCBQSUZTIGludGVydmFsICovCisjZGVmaW5lIEFJRlNfUElGUyAxCisKKy8qCisgKiBzbG90IG51bWJlciBzZXR0aW5nIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBhdCBESUZTIGludGVydmFsIC0gbm9ybWFsIERDRgorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgQUlGU19ESUZTIDIKKworI2RlZmluZSBBSUZTTl9CSyAgNworI2RlZmluZSBBSUZTTl9CRSAgMworI2RlZmluZSBBSUZTTl9WSSAgQUlGU19QSUZTCisjZGVmaW5lIEFJRlNOX1ZPICBBSUZTX1BJRlMKKyNkZWZpbmUgVFhPUF9CSyAgIDAKKyNkZWZpbmUgVFhPUF9CRSAgIDAKKyNkZWZpbmUgVFhPUF9WSSAgIDMwMDgKKyNkZWZpbmUgVFhPUF9WTyAgIDE1MDQKKwogaW50IHdsMTI1MV9od19pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX2h3X2luaXRfcnhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKaW5kZXggMmY1MGEyNS4uNGUzNzNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKQEAgLTM5NSw2ICszOTUsNyBAQAogCSAqIHRoZSBxdWV1ZSBoZXJlLCBvdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgZ2V0IHRvbyBsb25nLgogCSAqLwogCWlmIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpID49IFdMMTI1MV9UWF9RVUVVRV9NQVhfTEVOR1RIKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgIm9wX3R4OiB0eF9xdWV1ZSBmdWxsLCBzdG9wIHF1ZXVlcyIpOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKIAogCQkvKgpAQCAtNTEwLDEzICs1MTEsMTMgQEAKIH0KIAogc3RhdGljIGludCB3bDEyNTFfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CiAJaW50IHJldCA9IDA7CiAKIAl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVwTSIsCi0JCSAgICAgY29uZi0+dHlwZSwgY29uZi0+bWFjX2FkZHIpOworCQkgICAgIHZpZi0+dHlwZSwgdmlmLT5hZGRyKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJaWYgKHdsLT52aWYpIHsKQEAgLTUyNCw5ICs1MjUsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3bC0+dmlmID0gY29uZi0+dmlmOworCXdsLT52aWYgPSB2aWY7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKIAkJYnJlYWs7CkBAIC01MzgsOCArNTM5LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG1lbWNtcCh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTikpIHsKLQkJbWVtY3B5KHdsLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAobWVtY21wKHdsLT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTikpIHsKKwkJbWVtY3B5KHdsLT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKIAkJcmV0ID0gd2wxMjUxX2FjeF9zdGF0aW9uX2lkKHdsKTsKIAkJaWYgKHJldCA8IDApCkBAIC01NTIsNyArNTUzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgd2wxMjUxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHdsMTI1MSAqd2wgPSBody0+cHJpdjsKIApAQCAtNjQwLDIwICs2NDEsMjUgQEAKIAkJICogdGhyb3VnaCB0aGUgYnNzX2luZm9fY2hhbmdlZCgpIGhvb2suCiAJCSAqLwogCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9zbGVlcDsKIAl9IGVsc2UgaWYgKCEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKIAkJICAgd2wtPnBzbV9yZXF1ZXN0ZWQpIHsKIAkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgInBzbSBkaXNhYmxlZCIpOwogCiAJCXdsLT5wc21fcmVxdWVzdGVkID0gZmFsc2U7CiAKLQkJaWYgKHdsLT5wc20pCisJCWlmICh3bC0+cHNtKSB7CiAJCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisJCX0KIAl9CiAKIAlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7CiAJCXJldCA9IHdsMTI1MV9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3NsZWVwOwogCiAJCXdsLT5wb3dlcl9sZXZlbCA9IGNvbmYtPnBvd2VyX2xldmVsOwogCX0KQEAgLTEyNzMsNiArMTI3OSw0MyBAQAogCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAogfTsKIAorc3RhdGljIGludCB3bDEyNTFfb3BfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25mIHR4ICVkIiwgcXVldWUpOworCisJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9hY3hfYWNfY2ZnKHdsLCB3bDEyNTFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQlwYXJhbXMtPmN3X21pbiwgcGFyYW1zLT5jd19tYXgsCisJCQkJcGFyYW1zLT5haWZzLCBwYXJhbXMtPnR4b3ApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCXJldCA9IHdsMTI1MV9hY3hfdGlkX2NmZyh3bCwgd2wxMjUxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJIENIQU5ORUxfVFlQRV9FRENGLAorCQkJCSB3bDEyNTFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQkgV0wxMjUxX0FDWF9QU19TQ0hFTUVfTEVHQUNZLAorCQkJCSBXTDEyNTFfQUNYX0FDS19QT0xJQ1lfTEVHQUNZKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgd2wxMjUxX2JhbmRfMmdoeiA9IHsKIAkuY2hhbm5lbHMgPSB3bDEyNTFfY2hhbm5lbHMsCkBAIC0xMjkzLDYgKzEzMzYsNyBAQAogCS5od19zY2FuID0gd2wxMjUxX29wX2h3X3NjYW4sCiAJLmJzc19pbmZvX2NoYW5nZWQgPSB3bDEyNTFfb3BfYnNzX2luZm9fY2hhbmdlZCwKIAkuc2V0X3J0c190aHJlc2hvbGQgPSB3bDEyNTFfb3Bfc2V0X3J0c190aHJlc2hvbGQsCisJLmNvbmZfdHggPSB3bDEyNTFfb3BfY29uZl90eCwKIH07CiAKIHN0YXRpYyBpbnQgd2wxMjUxX3JlZ2lzdGVyX2h3KHN0cnVjdCB3bDEyNTEgKndsKQpAQCAtMTMzOCw2ICsxMzgyLDggQEAKIAl3bC0+aHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAJd2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmd2wxMjUxX2JhbmRfMmdoejsKIAorCXdsLT5ody0+cXVldWVzID0gNDsKKwogCXJldCA9IHdsMTI1MV9yZWdpc3Rlcl9odyh3bCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3BzLmMKaW5kZXggOTkzMWIxOS4uODUxZGZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYwpAQCAtMjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKICNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKIAotI2RlZmluZSBXTDEyNTFfV0FLRVVQX1RJTUVPVVQgMjAwMAorLyogaW4gbXMgKi8KKyNkZWZpbmUgV0wxMjUxX1dBS0VVUF9USU1FT1VUIDEwMAogCiB2b2lkIHdsMTI1MV9lbHBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC02Nyw3ICs2OCw3IEBACiAKIGludCB3bDEyNTFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBzdGFydDsKIAl1MzIgZWxwX3JlZzsKIAogCWlmICghd2wtPmVscCkKQEAgLTc1LDYgKzc2LDcgQEAKIAogCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOwogCisJc3RhcnQgPSBqaWZmaWVzOwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyNTFfV0FLRVVQX1RJTUVPVVQpOwogCiAJd2wxMjUxX3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgRUxQQ1RSTF9XQUtFX1VQKTsKQEAgLTk1LDggKzk3LDcgQEAKIAl9CiAKIAl3bDEyNTFfZGVidWcoREVCVUdfUFNNLCAid2FrZXVwIHRpbWU6ICV1IG1zIiwKLQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpIC0KLQkJICAgICAoamlmZmllc190b19tc2Vjcyh0aW1lb3V0KSAtIFdMMTI1MV9XQUtFVVBfVElNRU9VVCkpOworCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0KSk7CiAKIAl3bC0+ZWxwID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYwppbmRleCBmODRjYzg5Li5iNTY3MzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlpZiAod2wtPnJ4X2N1cnJlbnRfYnVmZmVyKQogCQlyeF9wYWNrZXRfcmluZ19hZGRyICs9IHdsLT5kYXRhX3BhdGgtPnJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCk7CisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpIHsKIAkJd2wxMjUxX2Vycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBSWCBmcmFtZSIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMKaW5kZXggZjg1OTcwNi4uYzgyMjMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwpAQCAtMTY3LDggKzE2Nyw3IEBACiAJdHhfaGRyLT5leHBpcnlfdGltZSA9IGNwdV90b19sZTMyKDEgPDwgMTYpOwogCXR4X2hkci0+aWQgPSBpZDsKIAotCS8qIEZJWE1FOiBob3cgdG8gZ2V0IHRoZSBjb3JyZWN0IHF1ZXVlIGlkPyAqLwotCXR4X2hkci0+eG1pdF9xdWV1ZSA9IDA7CisJdHhfaGRyLT54bWl0X3F1ZXVlID0gd2wxMjUxX3R4X2dldF9xdWV1ZShza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAKIAl3bDEyNTFfdHhfY29udHJvbCh0eF9oZHIsIGNvbnRyb2wsIGZjKTsKIAl3bDEyNTFfdHhfZnJhZ19ibG9ja19udW0odHhfaGRyKTsKQEAgLTIyMCw2ICsyMTksNyBAQAogCQkJLyogYWxpZ24gdGhlIGJ1ZmZlciBvbiBhIDQtYnl0ZSBib3VuZGFyeSAqLwogCQkJc2tiX3Jlc2VydmUoc2tiLCBvZmZzZXQpOwogCQkJbWVtbW92ZShza2ItPmRhdGEsIHNyYywgc2tiLT5sZW4pOworCQkJdHhfaGRyID0gKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKikgc2tiLT5kYXRhOwogCQl9IGVsc2UgewogCQkJd2wxMjUxX2luZm8oIk5vIGhhbmRsZXIsIGZpeG1lISIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzcsOCArMjM3LDkgQEAKIAogCXdsMTI1MV9tZW1fd3JpdGUod2wsIGFkZHIsIHNrYi0+ZGF0YSwgbGVuKTsKIAotCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgInR4IGlkICV1IHNrYiAweCVwIHBheWxvYWQgJXUgcmF0ZSAweCV4IiwKLQkJICAgICB0eF9oZHItPmlkLCBza2IsIHR4X2hkci0+bGVuZ3RoLCB0eF9oZHItPnJhdGUpOworCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgInR4IGlkICV1IHNrYiAweCVwIHBheWxvYWQgJXUgcmF0ZSAweCV4ICIKKwkJICAgICAicXVldWUgJWQiLCB0eF9oZHItPmlkLCBza2IsIHR4X2hkci0+bGVuZ3RoLAorCQkgICAgIHR4X2hkci0+cmF0ZSwgdHhfaGRyLT54bWl0X3F1ZXVlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCmluZGV4IDdjMWMxNjYuLjU1ODU2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX19XTDEyNTFfVFhfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCiAKIC8qCiAgKgpAQCAtMjA5LDYgKzIxMCwyMiBAQAogCXU4IGRvbmVfMjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdGF0aWMgaW5saW5lIGludCB3bDEyNTFfdHhfZ2V0X3F1ZXVlKGludCBxdWV1ZSkKK3sKKwlzd2l0Y2ggKHF1ZXVlKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gUU9TX0FDX1ZPOworCWNhc2UgMToKKwkJcmV0dXJuIFFPU19BQ19WSTsKKwljYXNlIDI6CisJCXJldHVybiBRT1NfQUNfQkU7CisJY2FzZSAzOgorCQlyZXR1cm4gUU9TX0FDX0JLOworCWRlZmF1bHQ6CisJCXJldHVybiBRT1NfQUNfQkU7CisJfQorfQorCiB2b2lkIHdsMTI1MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIHdsMTI1MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjUxICp3bCk7CiB2b2lkIHdsMTI1MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjUxICp3bCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKaW5kZXggOTQzNTliMS4uZDA5MzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaApAQCAtMTA3LDEwICsxMDcsOSBAQAogCQkJCSAgQ0ZHX1JYX0NUTF9FTiB8IENGR19SWF9CQ05fRU4gfCAgICAgXAogCQkJCSAgQ0ZHX1JYX0FVVEhfRU4gfCBDRkdfUlhfQVNTT0NfRU4pCiAKLSNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfQkFTSUNfUkFURV9TRVQgKENPTkZfVFhfUkFURV9NQVNLX0FMTCkKLQogI2RlZmluZSBXTDEyNzFfRldfTkFNRSAid2wxMjcxLWZ3LmJpbiIKICNkZWZpbmUgV0wxMjcxX05WU19OQU1FICJ3bDEyNzEtbnZzLmJpbiIKKyNkZWZpbmUgV0wxMjcxX05WU19MRU4gIDQ2OAogCiAvKgogICogRW5hYmxlL2Rpc2FibGUgODAyLjExYSBzdXBwb3J0IGZvciBXTDEyNzMKQEAgLTI3Niw2ICsyNzUsNyBAQAogCiAJc3RydWN0IGRlbnRyeSAqcmV0cnlfY291bnQ7CiAJc3RydWN0IGRlbnRyeSAqZXhjZXNzaXZlX3JldHJpZXM7CisJc3RydWN0IGRlbnRyeSAqZ3Bpb19wb3dlcjsKIH07CiAKICNkZWZpbmUgTlVNX1RYX1FVRVVFUyAgICAgICAgICAgICAgNApAQCAtMzIyLDYgKzMyMiwxNyBAQAogCWVudW0gd2wxMjcxX3N0YXRlIHN0YXRlOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAorI2RlZmluZSBXTDEyNzFfRkxBR19TVEFfUkFURVNfQ0hBTkdFRCAgKDApCisjZGVmaW5lIFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVEICAgICAoMSkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSk9JTkVEICAgICAgICAgICAgICgyKQorI2RlZmluZSBXTDEyNzFfRkxBR19HUElPX1BPV0VSICAgICAgICAgKDMpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQgICAoNCkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfU0NBTk5JTkcgICAgICAgICAgICg1KQorI2RlZmluZSBXTDEyNzFfRkxBR19JTl9FTFAgICAgICAgICAgICAgKDYpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1BTTSAgICAgICAgICAgICAgICAoNykKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCAgICAgICg4KQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydDsKIAogCXN0cnVjdCB3bDEyNzFfY2hpcCBjaGlwOwpAQCAtMzU5LDcgKzM3MCw2IEBACiAKIAkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7Ci0JYm9vbCB0eF9xdWV1ZV9zdG9wcGVkOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7CiAKQEAgLTM4NywxNCArMzk3LDE1IEBACiAJdTMyIG1ib3hfcHRyWzJdOwogCiAJLyogQXJlIHdlIGN1cnJlbnRseSBzY2FubmluZyAqLwotCWJvb2wgc2Nhbm5pbmc7CiAJc3RydWN0IHdsMTI3MV9zY2FuIHNjYW47CiAKIAkvKiBPdXIgYXNzb2NpYXRpb24gSUQgKi8KIAl1MTYgYWlkOwogCiAJLyogY3VycmVudGx5IGNvbmZpZ3VyZWQgcmF0ZSBzZXQgKi8KKwl1MzIgc3RhX3JhdGVfc2V0OwogCXUzMiBiYXNpY19yYXRlX3NldDsKKwl1MzIgcmF0ZV9zZXQ7CiAKIAkvKiBUaGUgY3VycmVudCBiYW5kICovCiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwpAQCAtNDA1LDE4ICs0MTYsOSBAQAogCXVuc2lnbmVkIGludCByeF9jb25maWc7CiAJdW5zaWduZWQgaW50IHJ4X2ZpbHRlcjsKIAotCS8qIGlzIGZpcm13YXJlIGluIGVscCBtb2RlICovCi0JYm9vbCBlbHA7Ci0KIAlzdHJ1Y3QgY29tcGxldGlvbiAqZWxwX2NvbXBsOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgZWxwX3dvcms7CiAKLQkvKiB3ZSBjYW4gYmUgaW4gcHNtLCBidXQgbm90IGluIGVscCwgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlICovCi0JYm9vbCBwc207Ci0KLQkvKiBQU00gbW9kZSByZXF1ZXN0ZWQgKi8KLQlib29sIHBzbV9yZXF1ZXN0ZWQ7Ci0KIAkvKiByZXRyeSBjb3VudGVyIGZvciBQU00gZW50cmllcyAqLwogCXU4IHBzbV9lbnRyeV9yZXRyeTsKIApAQCAtNDM1LDkgKzQzNyw2IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCi0JLyogVXNlZCBmb3IgYSB3b3JrYXJvdW5kIHRvIHNlbmQgZGlzY29ubmVjdCBiZWZvcmUgcmVqb2luaW5nICovCi0JYm9vbCBqb2luZWQ7Ci0KIAkvKiBDdXJyZW50IGNoaXBzZXQgY29uZmlndXJhdGlvbiAqLwogCXN0cnVjdCBjb25mX2Rydl9zZXR0aW5ncyBjb25mOwogCkBAIC00NTUsNyArNDU0LDkgQEAKIAogI2RlZmluZSBXTDEyNzFfVFhfUVVFVUVfTUFYX0xFTkdUSCAyMAogCi0vKiBXTDEyNzEgbmVlZHMgYSAyMDBtcyBzbGVlcCBhZnRlciBwb3dlciBvbiAqLworLyogV0wxMjcxIG5lZWRzIGEgMjAwbXMgc2xlZXAgYWZ0ZXIgcG93ZXIgb24sIGFuZCBhIDIwbXMgc2xlZXAgYmVmb3JlIHBvd2VyCisgICBvbiBpbiBjYXNlIGlzIGhhcyBiZWVuIHNodXQgZG93biBzaG9ydGx5IGJlZm9yZSAqLworI2RlZmluZSBXTDEyNzFfUFJFX1BPV0VSX09OX1NMRUVQIDIwIC8qIGluIG1pbGlzZWNvbmRzICovCiAjZGVmaW5lIFdMMTI3MV9QT1dFUl9PTl9TTEVFUCAyMDAgLyogaW4gbWlsaXNlY29uZHMgKi8KIAogc3RhdGljIGlubGluZSBib29sIHdsMTI3MV8xMWFfZW5hYmxlZCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKaW5kZXggNWNjODliYi4uMGIzNDM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jCkBAIC0zOTAsNiArMzkwLDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2Rjb19pdHJpbV9wYXJhbXMgKmRjbzsKKwlzdHJ1Y3QgY29uZl9pdHJpbV9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5pdHJpbTsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBkY28gaXRyaW0gcGFyYW1ldGVycyIpOworCisJZGNvID0ga3phbGxvYyhzaXplb2YoKmRjbyksIEdGUF9LRVJORUwpOworCWlmICghZGNvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWRjby0+ZW5hYmxlID0gYy0+ZW5hYmxlOworCWRjby0+dGltZW91dCA9IGNwdV90b19sZTMyKGMtPnRpbWVvdXQpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVRfRENPX0lUUklNX1BBUkFNUywKKwkJCQkgICBkY28sIHNpemVvZigqZGNvKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgZGNvIGl0cmltIHBhcmFtZXRlcnM6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoZGNvKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGVfZmlsdGVyKQogewogCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9vcHRpb24gKmJlYWNvbl9maWx0ZXIgPSBOVUxMOwpAQCAtNzU4LDEwICs3ODcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGVuYWJsZWRfcmF0ZXMpCitpbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgKmFjeDsKIAlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzICpjID0gJndsLT5jb25mLnR4LnJjX2NvbmY7CisJaW50IGlkeCA9IDA7CiAJaW50IHJldCA9IDA7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJhdGUgcG9saWNpZXMiKTsKQEAgLTc3MywxMiArODAzLDIxIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGNvbmZpZ3VyZSBvbmUgZGVmYXVsdCAob25lLXNpemUtZml0cy1hbGwpIHJhdGUgY2xhc3MgKi8KLQlhY3gtPnJhdGVfY2xhc3NfY250ID0gY3B1X3RvX2xlMzIoMSk7Ci0JYWN4LT5yYXRlX2NsYXNzWzBdLmVuYWJsZWRfcmF0ZXMgPSBjcHVfdG9fbGUzMihlbmFibGVkX3JhdGVzKTsKLQlhY3gtPnJhdGVfY2xhc3NbMF0uc2hvcnRfcmV0cnlfbGltaXQgPSBjLT5zaG9ydF9yZXRyeV9saW1pdDsKLQlhY3gtPnJhdGVfY2xhc3NbMF0ubG9uZ19yZXRyeV9saW1pdCA9IGMtPmxvbmdfcmV0cnlfbGltaXQ7Ci0JYWN4LT5yYXRlX2NsYXNzWzBdLmFmbGFncyA9IGMtPmFmbGFnczsKKwkvKiBjb25maWd1cmUgb25lIGJhc2ljIHJhdGUgY2xhc3MgKi8KKwlpZHggPSBBQ1hfVFhfQkFTSUNfUkFURTsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5lbmFibGVkX3JhdGVzID0gY3B1X3RvX2xlMzIod2wtPmJhc2ljX3JhdGVfc2V0KTsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5zaG9ydF9yZXRyeV9saW1pdCA9IGMtPnNob3J0X3JldHJ5X2xpbWl0OworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmxvbmdfcmV0cnlfbGltaXQgPSBjLT5sb25nX3JldHJ5X2xpbWl0OworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmFmbGFncyA9IGMtPmFmbGFnczsKKworCS8qIGNvbmZpZ3VyZSBvbmUgQVAgc3VwcG9ydGVkIHJhdGUgY2xhc3MgKi8KKwlpZHggPSBBQ1hfVFhfQVBfRlVMTF9SQVRFOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmVuYWJsZWRfcmF0ZXMgPSBjcHVfdG9fbGUzMih3bC0+cmF0ZV9zZXQpOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLnNob3J0X3JldHJ5X2xpbWl0ID0gYy0+c2hvcnRfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0ubG9uZ19yZXRyeV9saW1pdCA9IGMtPmxvbmdfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uYWZsYWdzID0gYy0+YWZsYWdzOworCisJYWN4LT5yYXRlX2NsYXNzX2NudCA9IGNwdV90b19sZTMyKEFDWF9UWF9SQVRFX1BPTElDWV9DTlQpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9SQVRFX1BPTElDWSwgYWN4LCBzaXplb2YoKmFjeCkpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xMDEyLDU5ICsxMDUxLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2FjeF9zbWFydF9yZWZsZXgoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9zbWFydF9yZWZsZXhfc3RhdGUgKnNyX3N0YXRlID0gTlVMTDsKLQlzdHJ1Y3QgYWN4X3NtYXJ0X3JlZmxleF9jb25maWdfcGFyYW1zICpzcl9wYXJhbSA9IE5VTEw7Ci0JaW50IGksIHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc21hcnQgcmVmbGV4Iik7Ci0KLQlzcl9wYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpzcl9wYXJhbSksIEdGUF9LRVJORUwpOwotCWlmICghc3JfcGFyYW0pIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IENPTkZfU1JfRVJSX1RCTF9DT1VOVDsgaSsrKSB7Ci0JCXN0cnVjdCBjb25mX21hcnRfcmVmbGV4X2Vycl90YWJsZSAqZSA9Ci0JCQkmKHdsLT5jb25mLmluaXQuc3JfZXJyX3RibFtpXSk7Ci0KLQkJc3JfcGFyYW0tPmVycm9yX3RhYmxlW2ldLmxlbiA9IGUtPmxlbjsKLQkJc3JfcGFyYW0tPmVycm9yX3RhYmxlW2ldLnVwcGVyX2xpbWl0ID0gZS0+dXBwZXJfbGltaXQ7Ci0JCW1lbWNweShzcl9wYXJhbS0+ZXJyb3JfdGFibGVbaV0udmFsdWVzLCBlLT52YWx1ZXMsIGUtPmxlbik7Ci0JfQotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVRfU01BUlRfUkVGTEVYX1BBUkFNUywKLQkJCQkgICBzcl9wYXJhbSwgc2l6ZW9mKCpzcl9wYXJhbSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNtYXJ0IHJlZmxleCBwYXJhbXM6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Jfc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3Jfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNyX3N0YXRlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGVuYWJsZSBzbWFydCByZWZsZXggKi8KLQlzcl9zdGF0ZS0+ZW5hYmxlID0gd2wtPmNvbmYuaW5pdC5zcl9lbmFibGU7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFVF9TTUFSVF9SRUZMRVhfU1RBVEUsCi0JCQkJICAgc3Jfc3RhdGUsIHNpemVvZigqc3Jfc3RhdGUpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzbWFydCByZWZsZXggcGFyYW1zOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKHNyX3N0YXRlKTsKLQlrZnJlZShzcl9wYXJhbSk7Ci0JcmV0dXJuIHJldDsKLQotfQotCiBpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2FjeF9iZXRfZW5hYmxlICphY3ggPSBOVUxMOwpAQCAtMTEzMiwzICsxMTE4LDMxIEBACiAJa2ZyZWUoYWN4KTsKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgd2wxMjcxX2FjeF9wbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfcG1fY29uZmlnICphY3ggPSBOVUxMOworCXN0cnVjdCAgY29uZl9wbV9jb25maWdfc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYucG1fY29uZmlnOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBwbSBjb25maWciKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmhvc3RfY2xrX3NldHRsaW5nX3RpbWUgPSBjcHVfdG9fbGUzMihjLT5ob3N0X2Nsa19zZXR0bGluZ190aW1lKTsKKwlhY3gtPmhvc3RfZmFzdF93YWtldXBfc3VwcG9ydCA9IGMtPmhvc3RfZmFzdF93YWtldXBfc3VwcG9ydDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUE1fQ09ORklHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBwbSBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCmluZGV4IDJjZTBhODEuLjFiYjYzYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaApAQCAtNDE1LDIzICs0MTUsMTIgQEAKIAl1OCBwYWRbM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGFjeF9zbWFydF9yZWZsZXhfc3RhdGUgeworc3RydWN0IGFjeF9kY29faXRyaW1fcGFyYW1zIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1OCBlbmFibGU7CiAJdTggcGFkZGluZ1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc21hcnRfcmVmbGV4X2Vycl90YWJsZSB7Ci0JdTggbGVuOwotCXM4IHVwcGVyX2xpbWl0OwotCXM4IHZhbHVlc1sxNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGFjeF9zbWFydF9yZWZsZXhfY29uZmlnX3BhcmFtcyB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0Jc3RydWN0IHNtYXJ0X3JlZmxleF9lcnJfdGFibGUgZXJyb3JfdGFibGVbM107CisJX19sZTMyIHRpbWVvdXQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBQVEFfQU5URU5OQV9UWVBFX0RFRgkJICAoMCkKQEAgLTgzNyw2ICs4MjYsOSBAQAogCXU4IHJlc2VydmVkOwogfTsKIAorI2RlZmluZSBBQ1hfVFhfQkFTSUNfUkFURSAgICAgIDAKKyNkZWZpbmUgQUNYX1RYX0FQX0ZVTExfUkFURSAgICAxCisjZGVmaW5lIEFDWF9UWF9SQVRFX1BPTElDWV9DTlQgMgogc3RydWN0IGFjeF9yYXRlX3BvbGljeSB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCkBAIC04NzcsOCArODY5LDggQEAKIAlfX2xlMTYgdHhfY29tcGxfdGhyZXNob2xkOyAgIC8qIG51bWJlciBvZiBwYWNrZXRzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBBQ1hfUlhfTUVNX0JMT0NLUyAgICAgNjQKLSNkZWZpbmUgQUNYX1RYX01JTl9NRU1fQkxPQ0tTIDY0CisjZGVmaW5lIEFDWF9SWF9NRU1fQkxPQ0tTICAgICA3MAorI2RlZmluZSBBQ1hfVFhfTUlOX01FTV9CTE9DS1MgNDAKICNkZWZpbmUgQUNYX1RYX0RFU0NSSVBUT1JTICAgIDMyCiAjZGVmaW5lIEFDWF9OVU1fU1NJRF9QUk9GSUxFUyAxCiAKQEAgLTk2OSw2ICs5NjEsMTMgQEAKIAkJCSAgICAgICB1c2VkLiAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorc3RydWN0IHdsMTI3MV9hY3hfcG1fY29uZmlnIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgaG9zdF9jbGtfc2V0dGxpbmdfdGltZTsKKwl1OCBob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7CisJdTggcGFkZGluZ1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBlbnVtIHsKIAlBQ1hfV0FLRV9VUF9DT05ESVRJT05TICAgICAgPSAweDAwMDIsCkBAIC0xMDI3LDEzICsxMDI2LDEzIEBACiAJQUNYX0hUX0JTU19PUEVSQVRJT04gICAgICAgID0gMHgwMDU4LAogCUFDWF9DT0VYX0FDVElWSVRZICAgICAgICAgICA9IDB4MDA1OSwKIAlBQ1hfU0VUX1NNQVJUX1JFRkxFWF9ERUJVRyAgPSAweDAwNUEsCi0JQUNYX1NFVF9TTUFSVF9SRUZMRVhfU1RBVEUgID0gMHgwMDVCLAotCUFDWF9TRVRfU01BUlRfUkVGTEVYX1BBUkFNUyA9IDB4MDA1RiwKKwlBQ1hfU0VUX0RDT19JVFJJTV9QQVJBTVMgICAgPSAweDAwNjEsCiAJRE9UMTFfUlhfTVNEVV9MSUZFX1RJTUUgICAgID0gMHgxMDA0LAogCURPVDExX0NVUl9UWF9QV1IgICAgICAgICAgICA9IDB4MTAwRCwKIAlET1QxMV9SWF9ET1QxMV9NT0RFICAgICAgICAgPSAweDEwMTIsCiAJRE9UMTFfUlRTX1RIUkVTSE9MRCAgICAgICAgID0gMHgxMDEzLAogCURPVDExX0dST1VQX0FERFJFU1NfVEJMICAgICA9IDB4MTAxNCwKKwlBQ1hfUE1fQ09ORklHICAgICAgICAgICAgICAgPSAweDEwMTYsCiAKIAlNQVhfRE9UMTFfSUUgPSBET1QxMV9HUk9VUF9BRERSRVNTX1RCTCwKIApAQCAtMTA1Niw2ICsxMDU1LDcgQEAKIAkJCQkgdm9pZCAqbWNfbGlzdCwgdTMyIG1jX2xpc3RfbGVuKTsKIGludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGVfZmlsdGVyKTsKIGludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wpOwpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIGludCB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNzEgKndsLAogCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOwogaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7Ci1pbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZW5hYmxlZF9yYXRlcyk7CitpbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKTsKQEAgLTEwODEsNSArMTA4MSw2IEBACiBpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CiBpbnQgd2wxMjcxX2FjeF9hcnBfaXBfZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwgdTggKmFkZHJlc3MsCiAJCQkgICAgIHU4IHZlcnNpb24pOworaW50IHdsMTI3MV9hY3hfcG1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKIAogI2VuZGlmIC8qIF9fV0wxMjcxX0FDWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKaW5kZXggYjdjOTY0NS4uZTgwM2I4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKQEAgLTIyNSw5ICsyMjUsMTUgQEAKIAlpZiAobnZzID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCisJaWYgKHdsLT5udnNfbGVuIDwgV0wxMjcxX05WU19MRU4pCisJCXJldHVybiAtRUlOVkFMOworCiAJbnZzX3B0ciA9IG52czsKIAotCW52c19sZW4gPSB3bC0+bnZzX2xlbjsKKwkvKiBvbmx5IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBOVlMgbmVlZHMgdG8gYmUgdXBsb2FkZWQgKi8KKwludnNfbGVuID0gV0wxMjcxX05WU19MRU47CisKKwkvKiBGSVhNRTogcmVhZCBpbml0IHNldHRpbmdzIGZyb20gdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBOVlMgKi8KIAogCS8qIFVwZGF0ZSB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzIGludG8gdGhlIG52cyAqLwogCW52c1sxMV0gPSB3bC0+bWFjX2FkZHJbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYwppbmRleCBjMzM4NWIzLi5hNzQyNTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKQEAgLTIwOSw2ICsyMDksMjYgQEAKIAlnZW5fcGFybXMtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyID0gZy0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7CiAJZ2VuX3Bhcm1zLT5zZXR0aW5ncyA9IGctPnNldHRpbmdzOwogCisJZ2VuX3Bhcm1zLT5zcl9zdGF0ZSA9IGctPnNyX3N0YXRlOworCisJbWVtY3B5KGdlbl9wYXJtcy0+c3JmMSwKKwkgICAgICAgZy0+c3JmMSwKKwkgICAgICAgQ09ORl9NQVhfU01BUlRfUkVGTEVYX1BBUkFNUyk7CisJbWVtY3B5KGdlbl9wYXJtcy0+c3JmMiwKKwkgICAgICAgZy0+c3JmMiwKKwkgICAgICAgQ09ORl9NQVhfU01BUlRfUkVGTEVYX1BBUkFNUyk7CisJbWVtY3B5KGdlbl9wYXJtcy0+c3JmMywKKwkgICAgICAgZy0+c3JmMywKKwkgICAgICAgQ09ORl9NQVhfU01BUlRfUkVGTEVYX1BBUkFNUyk7CisJbWVtY3B5KGdlbl9wYXJtcy0+c3JfZGVidWdfdGFibGUsCisJICAgICAgIGctPnNyX2RlYnVnX3RhYmxlLAorCSAgICAgICBDT05GX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1TKTsKKworCWdlbl9wYXJtcy0+c3Jfc2VuX25fcCA9IGctPnNyX3Nlbl9uX3A7CisJZ2VuX3Bhcm1zLT5zcl9zZW5fbl9wX2dhaW4gPSBnLT5zcl9zZW5fbl9wX2dhaW47CisJZ2VuX3Bhcm1zLT5zcl9zZW5fbnJuID0gZy0+c3Jfc2VuX25ybjsKKwlnZW5fcGFybXMtPnNyX3Nlbl9wcm4gPSBnLT5zcl9zZW5fcHJuOworCiAJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBnZW5fcGFybXMsIHNpemVvZigqZ2VuX3Bhcm1zKSwgMCk7CiAJaWYgKHJldCA8IDApCiAJCXdsMTI3MV93YXJuaW5nKCJDTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTSBmYWlsZWQiKTsKQEAgLTI1Myw2ICsyNzMsOCBAQAogCSAgICAgICBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7CiAJbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9yYXRlX2xpbWl0c19kZWdyYWRlZCwgci0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWQsCiAJICAgICAgIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKKwltZW1jcHkocmFkaW9fcGFybXMtPnR4X3JhdGVfbGltaXRzX2V4dHJlbWUsIHItPnR4X3JhdGVfbGltaXRzX2V4dHJlbWUsCisJICAgICAgIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKIAogCW1lbWNweShyYWRpb19wYXJtcy0+dHhfY2hhbm5lbF9saW1pdHNfMTFiLCByLT50eF9jaGFubmVsX2xpbWl0c18xMWIsCiAJICAgICAgIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNCk7CkBAIC0yNjMsNiArMjg1LDExIEBACiAJbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9pYmlhcywgci0+dHhfaWJpYXMsIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKIAogCXJhZGlvX3Bhcm1zLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3MgPSByLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3M7CisJcmFkaW9fcGFybXMtPmRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyZXNob2xkID0KKwkJci0+ZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHJlc2hvbGQ7CisJcmFkaW9fcGFybXMtPmRlZ3JhZGVkX25vcm1hbF90b19oaWdoX3RocmVzaG9sZCA9CisJCXItPmRlZ3JhZGVkX25vcm1hbF90b19oaWdoX3RocmVzaG9sZDsKKwogCiAJZm9yIChpID0gMDsgaSA8IENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181OyBpKyspCiAJCXJhZGlvX3Bhcm1zLT50eF9yZWZfcGRfdm9sdGFnZV81W2ldID0KQEAgLTI3NSw2ICszMDIsOCBAQAogCSAgICAgICByLT50eF9yYXRlX2xpbWl0c19ub3JtYWxfNSwgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwogCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWRfNSwKIAkgICAgICAgci0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWRfNSwgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOworCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfZXh0cmVtZV81LAorCSAgICAgICByLT50eF9yYXRlX2xpbWl0c19leHRyZW1lXzUsIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKIAltZW1jcHkocmFkaW9fcGFybXMtPnR4X2NoYW5uZWxfbGltaXRzX29mZG1fNSwKIAkgICAgICAgci0+dHhfY2hhbm5lbF9saW1pdHNfb2ZkbV81LCBDT05GX05VTUJFUl9PRl9DSEFOTkVMU181KTsKIAltZW1jcHkocmFkaW9fcGFybXMtPnR4X3Bkdl9yYXRlX29mZnNldHNfNSwgci0+dHhfcGR2X3JhdGVfb2Zmc2V0c181LApAQCAtMjgzLDYgKzMxMiwxMCBAQAogCSAgICAgICBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7CiAJbWVtY3B5KHJhZGlvX3Bhcm1zLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3NfNSwKIAkgICAgICAgci0+cnhfZmVtX2luc2VydGlvbl9sb3NzXzUsIENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181KTsKKwlyYWRpb19wYXJtcy0+ZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHJlc2hvbGRfNSA9CisJCXItPmRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyZXNob2xkXzU7CisJcmFkaW9fcGFybXMtPmRlZ3JhZGVkX25vcm1hbF90b19oaWdoX3RocmVzaG9sZF81ID0KKwkJci0+ZGVncmFkZWRfbm9ybWFsX3RvX2hpZ2hfdGhyZXNob2xkXzU7CiAKIAl3bDEyNzFfZHVtcChERUJVR19DTUQsICJURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTogIiwKIAkJICAgIHJhZGlvX3Bhcm1zLCBzaXplb2YoKnJhZGlvX3Bhcm1zKSk7CkBAIC0zMTEsMTkgKzM0NCw2IEBACiAJCQlkb19jYWwgPSBmYWxzZTsKIAl9CiAKLQkvKiBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQsIGJlY2F1c2Ugd2l0aCB0aGUgY3VycmVudCBzdGFjaywgd2UKLQkgKiBjYW5ub3Qga25vdyB3aGVuIHdlIGhhdmUgZGlzYXNzb2NpYXRlZC4gIFNvLCBpZiB3ZSBoYXZlIGFscmVhZHkKLQkgKiBqb2luZWQsIHdlIGRpc2Nvbm5lY3QgYmVmb3JlIGpvaW5pbmcgYWdhaW4uICovCi0JaWYgKHdsLT5qb2luZWQpIHsKLQkJcmV0ID0gd2wxMjcxX2NtZF9kaXNjb25uZWN0KHdsKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIGRpc2Nvbm5lY3QgYmVmb3JlIHJlam9pbmluZyIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl3bC0+am9pbmVkID0gZmFsc2U7Ci0JfQotCiAJam9pbiA9IGt6YWxsb2Moc2l6ZW9mKCpqb2luKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb2luKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0zODgsOCArNDA4LDYgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQl3bC0+am9pbmVkID0gdHJ1ZTsKLQogCS8qCiAJICogdWdseSBoYWNrOiB3ZSBzaG91bGQgd2FpdCBmb3IgSk9JTl9FVkVOVF9DT01QTEVURV9JRCBidXQgdG8KIAkgKiBzaW1wbGlmeSBsb2NraW5nIHdlIGp1c3Qgc2xlZXAgaW5zdGVhZCwgZm9yIG5vdwpAQCAtNDg3LDcgKzUwNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggY2hhbm5lbCwgYm9vbCBlbmFibGUpCitpbnQgd2wxMjcxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBjbWRfZW5hYmxlZGlzYWJsZV9wYXRoICpjbWQ7CiAJaW50IHJldDsKQEAgLTUwMSw3ICs1MTksOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljbWQtPmNoYW5uZWwgPSBjaGFubmVsOworCS8qIHRoZSBjaGFubmVsIGhlcmUgaXMgb25seSB1c2VkIGZvciBjYWxpYnJhdGlvbiwgc28gaGFyZGNvZGVkIHRvIDEgKi8KKwljbWQtPmNoYW5uZWwgPSAxOwogCiAJaWYgKGVuYWJsZSkgewogCQljbWRfcnggPSBDTURfRU5BQkxFX1JYOwpAQCAtNTE0LDIyICs1MzMsMjIgQEAKIAlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIGNtZF9yeCwgY21kLCBzaXplb2YoKmNtZCksIDApOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV9lcnJvcigicnggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCi0JCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjbWQtPmNoYW5uZWwpOwogCQlnb3RvIG91dDsKIAl9CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInJ4ICVzIGNtZCBjaGFubmVsICVkIiwKLQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjbWQtPmNoYW5uZWwpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBjbWRfdHgsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoInR4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAotCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInR4ICVzIGNtZCBjaGFubmVsICVkIiwKLQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjbWQtPmNoYW5uZWwpOwogCiBvdXQ6CiAJa2ZyZWUoY21kKTsKQEAgLTYzNiw3ICs2NTUsNyBAQAogCWNoYW5uZWxzID0gd2wtPmh3LT53aXBoeS0+YmFuZHNbaWVlZV9iYW5kXS0+Y2hhbm5lbHM7CiAJbl9jaCA9IHdsLT5ody0+d2lwaHktPmJhbmRzW2llZWVfYmFuZF0tPm5fY2hhbm5lbHM7CiAKLQlpZiAod2wtPnNjYW5uaW5nKQorCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOwpAQCAtNzExLDcgKzczMCw3IEBACiAKIAl3bDEyNzFfZHVtcChERUJVR19TQ0FOLCAiU0NBTjogIiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwogCi0Jd2wtPnNjYW5uaW5nID0gdHJ1ZTsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKIAlpZiAod2wxMjcxXzExYV9lbmFibGVkKCkpIHsKIAkJd2wtPnNjYW4uc3RhdGUgPSBiYW5kOwogCQlpZiAoYmFuZCA9PSBXTDEyNzFfU0NBTl9CQU5EX0RVQUwpIHsKQEAgLTcyOSw3ICs3NDgsNyBAQAogCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NDQU4sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoIlNDQU4gZmFpbGVkIik7Ci0JCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5oCmluZGV4IGI0ZmE0YWMuLjA5ZmU5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaApAQCAtMzcsNyArMzcsNyBAQAogaW50IHdsMTI3MV9jbWRfdGVzdChzdHJ1Y3Qgd2wxMjcxICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKTsKIGludCB3bDEyNzFfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CiBpbnQgd2wxMjcxX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLWludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggY2hhbm5lbCwgYm9vbCBlbmFibGUpOworaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CiBpbnQgd2wxMjcxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBwc19tb2RlKTsKIGludCB3bDEyNzFfY21kX3JlYWRfbWVtb3J5KHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgYWRkciwgdm9pZCAqYW5zd2VyLAogCQkJICAgc2l6ZV90IGxlbik7CkBAIC00MzcsNiArNDM3LDIxIEBACiAJdTggdHhfYmlwX2ZlbV9hdXRvZGV0ZWN0OwogCXU4IHR4X2JpcF9mZW1fbWFudWZhY3R1cmVyOwogCXU4IHNldHRpbmdzOworCisJdTggc3Jfc3RhdGU7CisKKwlzOCBzcmYxW0NPTkZfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTVNdOworCXM4IHNyZjJbQ09ORl9NQVhfU01BUlRfUkVGTEVYX1BBUkFNU107CisJczggc3JmM1tDT05GX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1TXTsKKworCXM4IHNyX2RlYnVnX3RhYmxlW0NPTkZfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTVNdOworCisJdTggc3Jfc2VuX25fcDsKKwl1OCBzcl9zZW5fbl9wX2dhaW47CisJdTggc3Jfc2VuX25ybjsKKwl1OCBzcl9zZW5fcHJuOworCisJdTggcGFkZGluZ1szXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3Qgd2wxMjcxX3JhZGlvX3Bhcm1zX2NtZCB7CkBAIC00NTgsMTEgKzQ3MywxMiBAQAogCS8qIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyAqLwogCS8qIDIuNEdIeiAqLwogCV9fbGUxNiB0eF9yZWZfcGRfdm9sdGFnZTsKLQlzOCAgdHhfcmVmX3Bvd2VyOworCXU4ICB0eF9yZWZfcG93ZXI7CiAJczggIHR4X29mZnNldF9kYjsKIAogCXM4ICB0eF9yYXRlX2xpbWl0c19ub3JtYWxbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwogCXM4ICB0eF9yYXRlX2xpbWl0c19kZWdyYWRlZFtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CisJczggIHR4X3JhdGVfbGltaXRzX2V4dHJlbWVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwogCiAJczggIHR4X2NoYW5uZWxfbGltaXRzXzExYltDT05GX05VTUJFUl9PRl9DSEFOTkVMU18yXzRdOwogCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtW0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07CkBAIC00NzEsMTUgKzQ4NywxOSBAQAogCXU4ICB0eF9pYmlhc1tDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CiAJdTggIHJ4X2ZlbV9pbnNlcnRpb25fbG9zczsKIAotCXU4IHBhZGRpbmcyOworCXU4ICBkZWdyYWRlZF9sb3dfdG9fbm9ybWFsX3RocmVzaG9sZDsKKwl1OCAgZGVncmFkZWRfbm9ybWFsX3RvX2hpZ2hfdGhyZXNob2xkOworCisJdTggIHBhZGRpbmcxOyAvKiBvdXIgb3duIHBhZGRpbmcsIG5vdCBpbiByZWYgZHJpdmVyICovCiAKIAkvKiA1R0h6ICovCiAJX19sZTE2IHR4X3JlZl9wZF92b2x0YWdlXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCXM4ICB0eF9yZWZfcG93ZXJfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07CisJdTggIHR4X3JlZl9wb3dlcl81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKIAlzOCAgdHhfb2Zmc2V0X2RiXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwogCiAJczggIHR4X3JhdGVfbGltaXRzX25vcm1hbF81W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKIAlzOCAgdHhfcmF0ZV9saW1pdHNfZGVncmFkZWRfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CisJczggIHR4X3JhdGVfbGltaXRzX2V4dHJlbWVfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CiAKIAlzOCAgdHhfY2hhbm5lbF9saW1pdHNfb2ZkbV81W0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzVdOwogCXM4ICB0eF9wZHZfcmF0ZV9vZmZzZXRzXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwpAQCAtNDg4LDcgKzUwOCwxMCBAQAogCXM4ICB0eF9pYmlhc181W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKIAlzOCAgcnhfZmVtX2luc2VydGlvbl9sb3NzXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwogCi0JdTggcGFkZGluZzNbMl07CisJdTggIGRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyZXNob2xkXzU7CisJdTggIGRlZ3JhZGVkX25vcm1hbF90b19oaWdoX3RocmVzaG9sZF81OworCisJdTggcGFkZGluZzJbMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHdsMTI3MV9jbWRfY2FsX2NoYW5uZWxfdHVuZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY29uZi5oCmluZGV4IDU2NTM3M2UuLjE5OTNkNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY29uZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY29uZi5oCkBAIC0yNTgsNyArMjU4LDggQEAKICNkZWZpbmUgQ09ORl9UWF9NQVhfUkFURV9DTEFTU0VTICAgICAgIDgKIAogI2RlZmluZSBDT05GX1RYX1JBVEVfTUFTS19VTlNQRUNJRklFRCAgMAotI2RlZmluZSBDT05GX1RYX1JBVEVfTUFTS19BTEwgICAgICAgICAgMHgxZWZmCisjZGVmaW5lIENPTkZfVFhfUkFURV9NQVNLX0JBU0lDICAgICAgICAoQ09ORl9IV19CSVRfUkFURV8xTUJQUyB8IFwKKwkJCQkJQ09ORl9IV19CSVRfUkFURV8yTUJQUykKICNkZWZpbmUgQ09ORl9UWF9SQVRFX1JFVFJZX0xJTUlUICAgICAgIDEwCiAKIHN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgewpAQCAtNzIyLDMxICs3MjMsNiBAQAogCXU4IHBzbV9lbnRyeV9yZXRyaWVzOwogfTsKIAotI2RlZmluZSBDT05GX1NSX0VSUl9UQkxfTUFYX1ZBTFVFUyAgIDE0Ci0KLXN0cnVjdCBjb25mX21hcnRfcmVmbGV4X2Vycl90YWJsZSB7Ci0JLyoKLQkgKiBMZW5ndGggb2YgdGhlIGVycm9yIHRhYmxlIHZhbHVlcyB0YWJsZS4KLQkgKgotCSAqIFJhbmdlOiAwIC0gQ09ORl9TUl9FUlJfVEJMX01BWF9WQUxVRVMKLQkgKi8KLQl1OCBsZW47Ci0KLQkvKgotCSAqIFNtYXJ0IFJlZmxleCBlcnJvciB0YWJsZSB1cHBlciBsaW1pdC4KLQkgKgotCSAqIFJhbmdlOiBzOAotCSAqLwotCXM4IHVwcGVyX2xpbWl0OwotCi0JLyoKLQkgKiBTbWFydCBSZWZsZXggZXJyb3IgdGFibGUgdmFsdWVzLgotCSAqCi0JICogUmFuZ2U6IHM4Ci0JICovCi0JczggdmFsdWVzW0NPTkZfU1JfRVJSX1RCTF9NQVhfVkFMVUVTXTsKLX07Ci0KIGVudW0gewogCUNPTkZfUkVGX0NMS18xOV8yX0UsCiAJQ09ORl9SRUZfQ0xLXzI2X0UsCkBAIC03NTksNiArNzM1LDkgQEAKIAlDT05GX0RVQUxfQkFORAogfTsKIAorCisjZGVmaW5lIENPTkZfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTVMgMTYKKwogc3RydWN0IGNvbmZfZ2VuZXJhbF9wYXJtcyB7CiAJLyoKIAkgKiBSRiBSZWZlcmVuY2UgQ2xvY2sgdHlwZSAvIHNwZWVkCkBAIC04MTUsNiArNzk0LDIwIEBACiAJICogUmFuZ2U6IFVua25vd24KIAkgKi8KIAl1OCBzZXR0aW5nczsKKworCS8qIFNtYXJ0IHJlZmxleCBzZXR0aW5ncyAqLworCXU4IHNyX3N0YXRlOworCisJczggc3JmMVtDT05GX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1TXTsKKwlzOCBzcmYyW0NPTkZfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTVNdOworCXM4IHNyZjNbQ09ORl9NQVhfU01BUlRfUkVGTEVYX1BBUkFNU107CisKKwlzOCBzcl9kZWJ1Z190YWJsZVtDT05GX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1TXTsKKworCXU4IHNyX3Nlbl9uX3A7CisJdTggc3Jfc2VuX25fcF9nYWluOworCXU4IHNyX3Nlbl9ucm47CisJdTggc3Jfc2VuX3BybjsKIH07CiAKICNkZWZpbmUgQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFIDE1CkBAIC04NDcsMTIgKzg0MCwxMyBAQAogCSAqCiAJICogUmFuZ2U6IHVua25vd24KIAkgKi8KLQlzMTYgdHhfcmVmX3BkX3ZvbHRhZ2U7Ci0JczggIHR4X3JlZl9wb3dlcjsKKwl1MTYgdHhfcmVmX3BkX3ZvbHRhZ2U7CisJdTggIHR4X3JlZl9wb3dlcjsKIAlzOCAgdHhfb2Zmc2V0X2RiOwogCiAJczggIHR4X3JhdGVfbGltaXRzX25vcm1hbFtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CiAJczggIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKwlzOCAgdHhfcmF0ZV9saW1pdHNfZXh0cmVtZVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CiAKIAlzOCAgdHhfY2hhbm5lbF9saW1pdHNfMTFiW0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07CiAJczggIHR4X2NoYW5uZWxfbGltaXRzX29mZG1bQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfMl80XTsKQEAgLTg2MSwxNyArODU1LDIyIEBACiAJdTggIHR4X2liaWFzW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKIAl1OCAgcnhfZmVtX2luc2VydGlvbl9sb3NzOwogCisJdTggIGRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyZXNob2xkOworCXU4ICBkZWdyYWRlZF9ub3JtYWxfdG9faGlnaF90aHJlc2hvbGQ7CisKKwogCS8qCiAJICogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzIGZvciA1R0h6CiAJICoKIAkgKiBSYW5nZTogdW5rbm93bgogCSAqLwotCXMxNiB0eF9yZWZfcGRfdm9sdGFnZV81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQlzOCAgdHhfcmVmX3Bvd2VyXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCXUxNiB0eF9yZWZfcGRfdm9sdGFnZV81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKwl1OCAgdHhfcmVmX3Bvd2VyXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwogCXM4ICB0eF9vZmZzZXRfZGJfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07CiAKIAlzOCAgdHhfcmF0ZV9saW1pdHNfbm9ybWFsXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwogCXM4ICB0eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKwlzOCAgdHhfcmF0ZV9saW1pdHNfZXh0cmVtZV81W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKIAogCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtXzVbQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfNV07CiAJczggIHR4X3Bkdl9yYXRlX29mZnNldHNfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107CkBAIC04NzksMjQgKzg3OCwxMyBAQAogCS8qIEZJWE1FOiB0aGlzIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSB0eXBlcyBmb3IgMi40R0h6ICovCiAJczggIHR4X2liaWFzXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwogCXM4ICByeF9mZW1faW5zZXJ0aW9uX2xvc3NfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07CisKKwl1OCAgZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHJlc2hvbGRfNTsKKwl1OCAgZGVncmFkZWRfbm9ybWFsX3RvX2hpZ2hfdGhyZXNob2xkXzU7CiB9OwogCi0jZGVmaW5lIENPTkZfU1JfRVJSX1RCTF9DT1VOVCAgICAgICAgMwotCiBzdHJ1Y3QgY29uZl9pbml0X3NldHRpbmdzIHsKIAkvKgotCSAqIENvbmZpZ3VyZSBTbWFydCBSZWZsZXggZXJyb3IgdGFibGUgdmFsdWVzLgotCSAqLwotCXN0cnVjdCBjb25mX21hcnRfcmVmbGV4X2Vycl90YWJsZSBzcl9lcnJfdGJsW0NPTkZfU1JfRVJSX1RCTF9DT1VOVF07Ci0KLQkvKgotCSAqIFNtYXJ0IFJlZmxleCBlbmFibGUgZmxhZy4KLQkgKgotCSAqIFJhbmdlOiAxIC0gU21hcnQgUmVmbGV4IGVuYWJsZWQsIDAgLSBTbWFydCBSZWZsZXggZGlzYWJsZWQKLQkgKi8KLQl1OCBzcl9lbmFibGU7Ci0KLQkvKgogCSAqIENvbmZpZ3VyZSBnZW5lcmFsIHBhcmFtZXRlcnMuCiAJICovCiAJc3RydWN0IGNvbmZfZ2VuZXJhbF9wYXJtcyBnZW5wYXJhbTsKQEAgLTkwOCwxMiArODk2LDM4IEBACiAKIH07CiAKK3N0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzIHsKKwkvKiBlbmFibGUgZGNvIGl0cmltICovCisJdTggZW5hYmxlOworCisJLyogbW9kZXJhdGlvbiB0aW1lb3V0IGluIG1pY3Jvc2VjcyBmcm9tIHRoZSBsYXN0IFRYICovCisJdTMyIHRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgY29uZl9wbV9jb25maWdfc2V0dGluZ3MgeworCS8qCisJICogSG9zdCBjbG9jayBzZXR0bGluZyB0aW1lCisJICoKKwkgKiBSYW5nZTogMCAtIDMwMDAwIHVzCisJICovCisJdTMyIGhvc3RfY2xrX3NldHRsaW5nX3RpbWU7CisKKwkvKgorCSAqIEhvc3QgZmFzdCB3YWtldXAgc3VwcG9ydAorCSAqCisJICogUmFuZ2U6IHRydWUsIGZhbHNlCisJICovCisJYm9vbCBob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7Cit9OworCiBzdHJ1Y3QgY29uZl9kcnZfc2V0dGluZ3MgewogCXN0cnVjdCBjb25mX3NnX3NldHRpbmdzIHNnOwogCXN0cnVjdCBjb25mX3J4X3NldHRpbmdzIHJ4OwogCXN0cnVjdCBjb25mX3R4X3NldHRpbmdzIHR4OwogCXN0cnVjdCBjb25mX2Nvbm5fc2V0dGluZ3MgY29ubjsKIAlzdHJ1Y3QgY29uZl9pbml0X3NldHRpbmdzIGluaXQ7CisJc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgaXRyaW07CisJc3RydWN0IGNvbmZfcG1fY29uZmlnX3NldHRpbmdzIHBtX2NvbmZpZzsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwppbmRleCBjMTgwNWU1Li44ZDc1ODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwpAQCAtMjM3LDYgKzIzNyw2NCBAQAogCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAogfTsKIAorc3RhdGljIHNzaXplX3QgZ3Bpb19wb3dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWJvb2wgc3RhdGUgPSB0ZXN0X2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKKworCWludCByZXM7CisJY2hhciBidWZbMTBdOworCisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwgc3RhdGUpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgc3NpemVfdCBncGlvX3Bvd2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTBdOworCXNpemVfdCBsZW47CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGluIGdwaW9fcG93ZXIiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZhbHVlKSB7CisJCXdsLT5zZXRfcG93ZXIodHJ1ZSk7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiwgJndsLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJd2wtPnNldF9wb3dlcihmYWxzZSk7CisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncGlvX3Bvd2VyX29wcyA9IHsKKwkucmVhZCA9IGdwaW9fcG93ZXJfcmVhZCwKKwkud3JpdGUgPSBncGlvX3Bvd2VyX3dyaXRlLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljCit9OworCiBzdGF0aWMgdm9pZCB3bDEyNzFfZGVidWdmc19kZWxldGVfZmlsZXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJREVCVUdGU19GV1NUQVRTX0RFTCh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdyk7CkBAIC0zMzMsNiArMzkxLDggQEAKIAlERUJVR0ZTX0RFTCh0eF9xdWV1ZV9sZW4pOwogCURFQlVHRlNfREVMKHJldHJ5X2NvdW50KTsKIAlERUJVR0ZTX0RFTChleGNlc3NpdmVfcmV0cmllcyk7CisKKwlERUJVR0ZTX0RFTChncGlvX3Bvd2VyKTsKIH0KIAogc3RhdGljIGludCB3bDEyNzFfZGVidWdmc19hZGRfZmlsZXMoc3RydWN0IHdsMTI3MSAqd2wpCkBAIC00MzQsNiArNDk0LDggQEAKIAlERUJVR0ZTX0FERChyZXRyeV9jb3VudCwgd2wtPmRlYnVnZnMucm9vdGRpcik7CiAJREVCVUdGU19BREQoZXhjZXNzaXZlX3JldHJpZXMsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwogCisJREVCVUdGU19BREQoZ3Bpb19wb3dlciwgd2wtPmRlYnVnZnMucm9vdGRpcik7CisKIG91dDoKIAlpZiAocmV0IDwgMCkKIAkJd2wxMjcxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHdsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYwppbmRleCBkMTNmZGQ5Li4wYTE0NWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jCkBAIC0zNSw3ICszNSw3IEBACiAJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4IiwKIAkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9zdGF0dXMpOwogCi0JaWYgKHdsLT5zY2FubmluZykgeworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpIHsKIAkJaWYgKHdsLT5zY2FuLnN0YXRlID09IFdMMTI3MV9TQ0FOX0JBTkRfRFVBTCkgewogCQkJd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwKIAkJCQkJCU5VTEwsIHNpemUpOwpAQCAtNDMsNyArNDMsNyBAQAogCQkJICogdG8gdGhlIHdsMTI3MV9jbWRfc2NhbiBmdW5jdGlvbiB0aGF0IHdlIGFyZSBub3QKIAkJCSAqIHNjYW5uaW5nIGFzIGl0IGNoZWNrcyB0aGF0LgogCQkJICovCi0JCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwkJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncyk7CiAJCQl3bDEyNzFfY21kX3NjYW4od2wsIHdsLT5zY2FuLnNzaWQsIHdsLT5zY2FuLnNzaWRfbGVuLAogCQkJCQkJd2wtPnNjYW4uYWN0aXZlLAogCQkJCQkJd2wtPnNjYW4uaGlnaF9wcmlvLApAQCAtNjIsNyArNjIsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOwogCQkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQkJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTc4LDcgKzc4LDcgQEAKIAogCXN3aXRjaCAobWJveC0+cHNfc3RhdHVzKSB7CiAJY2FzZSBFVkVOVF9FTlRFUl9QT1dFUl9TQVZFX0ZBSUw6Ci0JCWlmICghd2wtPnBzbSkgeworCQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKIAkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg5LDcgKzg5LDYgQEAKIAkJfSBlbHNlIHsKIAkJCXdsMTI3MV9lcnJvcigiUFNNIGVudHJ5IGZhaWxlZCwgZ2l2aW5nIHVwLlxuIik7CiAJCQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQkJCSpiZWFjb25fbG9zcyA9IHRydWU7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9FTlRFUl9QT1dFUl9TQVZFX1NVQ0NFU1M6CkBAIC0xMzYsNyArMTM1LDggQEAKIAkgKiBmaWx0ZXJpbmcpIGlzIGVuYWJsZWQuIFdpdGhvdXQgUFNNLCB0aGUgc3RhY2sgd2lsbCByZWNlaXZlIGFsbAogCSAqIGJlYWNvbnMgYW5kIGNhbiBkZXRlY3QgYmVhY29uIGxvc3MgYnkgaXRzZWxmLgogCSAqLwotCWlmICh2ZWN0b3IgJiBCU1NfTE9TRV9FVkVOVF9JRCAmJiB3bC0+cHNtKSB7CisJaWYgKHZlY3RvciAmIEJTU19MT1NFX0VWRU5UX0lEICYmCisJICAgIHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKIAkJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiQlNTX0xPU0VfRVZFTlQiKTsKIAogCQkvKiBpbmRpY2F0ZSB0byB0aGUgc3RhY2ssIHRoYXQgYmVhY29ucyBoYXZlIGJlZW4gbG9zdCAqLwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChiZWFjb25fbG9zcykgeworCWlmICh3bC0+dmlmICYmIGJlYWNvbl9sb3NzKSB7CiAJCS8qIE9idmlvdXNseSwgaXQncyBkYW5nZXJvdXMgdG8gcmVsZWFzZSB0aGUgbXV0ZXggd2hpbGUKIAkJICAgd2UgYXJlIGhvbGRpbmcgbWFueSBvZiB0aGUgdmFyaWFibGVzIGluIHRoZSB3bCBzdHJ1Y3QuCiAJCSAgIFRoYXQncyB3aHkgaXQncyBkb25lIGxhc3QgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgY2FyZSBtdXN0CkBAIC0xODQsNyArMTg0LDcgQEAKIAkJICAgICB3bC0+bWJveF9wdHJbMF0sIHdsLT5tYm94X3B0clsxXSk7CiB9CiAKLWludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94X251bSwgYm9vbCBkb19hY2spCitpbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveF9udW0pCiB7CiAJc3RydWN0IGV2ZW50X21haWxib3ggbWJveDsKIAlpbnQgcmV0OwpAQCAtMjA0LDkgKzIwNCw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiB0aGVuIHdlIGxldCB0aGUgZmlybXdhcmUga25vdyBpdCBjYW4gZ28gb24uLi4qLwotCWlmIChkb19hY2spCi0JCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywKLQkJCQkgICBJTlRSX1RSSUdfRVZFTlRfQUNLKTsKKwl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19FVkVOVF9BQ0spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmgKaW5kZXggNGUzZjU1ZS4uMjc4ZjkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaApAQCAtMTEyLDYgKzExMiw2IEBACiAKIGludCB3bDEyNzFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNzEgKndsKTsKIHZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94LCBib29sIGRvX2Fjayk7CitpbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYwppbmRleCAxMTI0OWI0Li5jOTg0OGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYwpAQCAtMjI5LDYgKzIyOSwxMCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKIAorCXJldCA9IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCiAJLyogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIG1vbml0b3JpbmcgdGhyZXNob2xkcyAqLwogCXJldCA9IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMod2wpOwogCWlmIChyZXQgPCAwKQpAQCAtMjgwLDEyICsyODQsMTIgQEAKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKIAkvKiBDb25maWd1cmUgVFggcmF0ZSBjbGFzc2VzICovCi0JcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsLCBDT05GX1RYX1JBVEVfTUFTS19BTEwpOworCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCiAJLyogRW5hYmxlIGRhdGEgcGF0aCAqLwotCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7CisJcmV0ID0gd2wxMjcxX2NtZF9kYXRhX3BhdGgod2wsIDEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKIApAQCAtMjk5LDggKzMwMyw4IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCi0JLyogQ29uZmlndXJlIHNtYXJ0IHJlZmxleCAqLwotCXJldCA9IHdsMTI3MV9hY3hfc21hcnRfcmVmbGV4KHdsKTsKKwkvKiBjb25maWd1cmUgUE0gKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3BtX2NvbmZpZyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jCmluZGV4IGI2MmMwMGYuLmU0ODY3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jCkBAIC00Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAid2wxMjcxX2NtZC5oIgogI2luY2x1ZGUgIndsMTI3MV9ib290LmgiCiAKKyNkZWZpbmUgV0wxMjcxX0JPT1RfUkVUUklFUyAzCisKIHN0YXRpYyBzdHJ1Y3QgY29uZl9kcnZfc2V0dGluZ3MgZGVmYXVsdF9jb25mID0gewogCS5zZyA9IHsKIAkJLnBlcl90aHJlc2hvbGQgICAgICAgICAgICAgICA9IDc1MDAsCkBAIC02NywxNiArNjksMTcgQEAKIAkJLnBzX3BvbGxfdGltZW91dCAgICAgICAgICAgICA9IDE1LAogCQkudXBzZF90aW1lb3V0ICAgICAgICAgICAgICAgID0gMTUsCiAJCS5ydHNfdGhyZXNob2xkICAgICAgICAgICAgICAgPSAyMzQ3LAotCQkucnhfY2NhX3RocmVzaG9sZCAgICAgICAgICAgID0gMHhGRkVGLAotCQkuaXJxX2Jsa190aHJlc2hvbGQgICAgICAgICAgID0gMCwKLQkJLmlycV9wa3RfdGhyZXNob2xkICAgICAgICAgICA9IFVTSE9SVF9NQVgsCi0JCS5pcnFfdGltZW91dCAgICAgICAgICAgICAgICAgPSA1LAorCQkucnhfY2NhX3RocmVzaG9sZCAgICAgICAgICAgID0gMCwKKwkJLmlycV9ibGtfdGhyZXNob2xkICAgICAgICAgICA9IDB4RkZGRiwKKwkJLmlycV9wa3RfdGhyZXNob2xkICAgICAgICAgICA9IDAsCisJCS5pcnFfdGltZW91dCAgICAgICAgICAgICAgICAgPSA2MDAsCiAJCS5xdWV1ZV90eXBlICAgICAgICAgICAgICAgICAgPSBDT05GX1JYX1FVRVVFX1RZUEVfTE9XX1BSSU9SSVRZLAogCX0sCiAJLnR4ID0gewogCQkudHhfZW5lcmd5X2RldGVjdGlvbiAgICAgICAgID0gMCwKIAkJLnJjX2NvbmYgICAgICAgICAgICAgICAgICAgICA9IHsKLQkJCS5lbmFibGVkX3JhdGVzICAgICAgID0gQ09ORl9UWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQsCisJCQkuZW5hYmxlZF9yYXRlcyAgICAgICA9IENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfAorCQkJCQkgICAgICAgQ09ORl9IV19CSVRfUkFURV8yTUJQUywKIAkJCS5zaG9ydF9yZXRyeV9saW1pdCAgID0gMTAsCiAJCQkubG9uZ19yZXRyeV9saW1pdCAgICA9IDEwLAogCQkJLmFmbGFncyAgICAgICAgICAgICAgPSAwCkBAIC0xNzIsOCArMTc1LDggQEAKIAkJCX0KIAkJfSwKIAkJLmZyYWdfdGhyZXNob2xkICAgICAgICAgICAgICA9IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQsCi0JCS50eF9jb21wbF90aW1lb3V0ICAgICAgICAgICAgPSA1LAotCQkudHhfY29tcGxfdGhyZXNob2xkICAgICAgICAgID0gNQorCQkudHhfY29tcGxfdGltZW91dCAgICAgICAgICAgID0gNzAwLAorCQkudHhfY29tcGxfdGhyZXNob2xkICAgICAgICAgID0gNAogCX0sCiAJLmNvbm4gPSB7CiAJCS53YWtlX3VwX2V2ZW50ICAgICAgICAgICAgICAgPSBDT05GX1dBS0VfVVBfRVZFTlRfRFRJTSwKQEAgLTE4NiwxMiArMTg5LDEyIEBACiAJCQkJLnJ1bGUgICAgICAgID0gQ09ORl9CQ05fUlVMRV9QQVNTX09OX0FQUEVBUkFOQ0UsCiAJCQl9CiAJCX0sCi0JCS5zeW5jaF9mYWlsX3Rob2xkICAgICAgICAgICAgPSA1LAorCQkuc3luY2hfZmFpbF90aG9sZCAgICAgICAgICAgID0gMTAsCiAJCS5ic3NfbG9zZV90aW1lb3V0ICAgICAgICAgICAgPSAxMDAsCiAJCS5iZWFjb25fcnhfdGltZW91dCAgICAgICAgICAgPSAxMDAwMCwKIAkJLmJyb2FkY2FzdF90aW1lb3V0ICAgICAgICAgICA9IDIwMDAwLAogCQkucnhfYnJvYWRjYXN0X2luX3BzICAgICAgICAgID0gMSwKLQkJLnBzX3BvbGxfdGhyZXNob2xkICAgICAgICAgICA9IDQsCisJCS5wc19wb2xsX3RocmVzaG9sZCAgICAgICAgICAgPSAyMCwKIAkJLnNpZ190cmlnZ2VyX2NvdW50ICAgICAgICAgICA9IDIsCiAJCS5zaWdfdHJpZ2dlciA9IHsKIAkJCVswXSA9IHsKQEAgLTIyNiw0NiArMjI5LDM1IEBACiAJCS5wc21fZW50cnlfcmV0cmllcyAgICAgICAgICAgPSAzCiAJfSwKIAkuaW5pdCA9IHsKLQkJLnNyX2Vycl90YmwgPSB7Ci0JCQlbMF0gPSB7Ci0JCQkJLmxlbiAgICAgICAgID0gNywKLQkJCQkudXBwZXJfbGltaXQgPSAweDAzLAotCQkJCS52YWx1ZXMgICAgICA9IHsKLQkJCQkJMHgxOCwgMHgxMCwgMHgwNSwgMHhmYiwgMHhmMCwgMHhlOCwKLQkJCQkJMHgwMCB9Ci0JCQl9LAotCQkJWzFdID0gewotCQkJCS5sZW4gICAgICAgICA9IDcsCi0JCQkJLnVwcGVyX2xpbWl0ID0gMHgwMywKLQkJCQkudmFsdWVzICAgICAgPSB7Ci0JCQkJCTB4MTgsIDB4MTAsIDB4MDUsIDB4ZjYsIDB4ZjAsIDB4ZTgsCi0JCQkJCTB4MDAgfQotCQkJfSwKLQkJCVsyXSA9IHsKLQkJCQkubGVuICAgICAgICAgPSA3LAotCQkJCS51cHBlcl9saW1pdCA9IDB4MDMsCi0JCQkJLnZhbHVlcyAgICAgID0gewotCQkJCQkweDE4LCAweDEwLCAweDA1LCAweGZiLCAweGYwLCAweGU4LAotCQkJCQkweDAwIH0KLQkJCX0KLQkJfSwKLQkJLnNyX2VuYWJsZSAgICAgICAgICAgICAgICAgICA9IDEsCiAJCS5nZW5wYXJhbSAgICAgICAgICAgICAgICAgICAgPSB7CiAJCQkucmVmX2NsayAgICAgICAgICAgICA9IENPTkZfUkVGX0NMS18zOF80X0UsCiAJCQkuc2V0dGxpbmdfdGltZSAgICAgICA9IDUsCiAJCQkuY2xrX3ZhbGlkX29uX3dha2V1cCA9IDAsCiAJCQkuZGMyZGNtb2RlICAgICAgICAgICA9IDAsCiAJCQkuc2luZ2xlX2R1YWxfYmFuZCAgICA9IENPTkZfU0lOR0xFX0JBTkQsCi0JCQkudHhfYmlwX2ZlbV9hdXRvZGV0ZWN0ID0gMCwKKwkJCS50eF9iaXBfZmVtX2F1dG9kZXRlY3QgPSAxLAogCQkJLnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyID0gMSwKIAkJCS5zZXR0aW5ncyA9IDEsCisJCQkuc3Jfc3RhdGUgPSAxLAorCQkJLnNyZjEgPSB7IDB4MDcsIDB4MDMsIDB4MTgsIDB4MTAsIDB4MDUsIDB4ZmIsIDB4ZjAsCisJCQkJICAweGU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJCQkuc3JmMiA9IHsgMHgwNywgMHgwMywgMHgxOCwgMHgxMCwgMHgwNSwgMHhmYiwgMHhmMCwKKwkJCQkgIDB4ZTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwkJCS5zcmYzID0geyAweDA3LCAweDAzLCAweDE4LCAweDEwLCAweDA1LCAweGZiLCAweGYwLAorCQkJCSAgMHhlOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkJLnNyX2RlYnVnX3RhYmxlID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkJCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkJLnNyX3Nlbl9uX3AgPSAwLAorCQkJLnNyX3Nlbl9uX3BfZ2FpbiA9IDAsCisJCQkuc3Jfc2VuX25ybiA9IDAsCisJCQkuc3Jfc2VuX3BybiA9IDAsCiAJCX0sCiAJCS5yYWRpb3BhcmFtID0gewotCQkJLnJ4X3RyYWNlX2xvc3MgICAgICAgPSAxMCwKLQkJCS50eF90cmFjZV9sb3NzICAgICAgID0gMTAsCisJCQkucnhfdHJhY2VfbG9zcyAgICAgICA9IDB4MjQsCisJCQkudHhfdHJhY2VfbG9zcyAgICAgICA9IDB4MCwKIAkJCS5yeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnMgPSB7CiAJCQkJMHhlYywgMHhmNiwgMHgwMCwgMHgwYywgMHgxOCwgMHhmOCwKLQkJCQkweGZjLCAweDAwLCAweDA4LCAweDEwLCAweGYwLCAweGY4LAorCQkJCTB4ZmMsIDB4MDAsIDB4ODAsIDB4MTAsIDB4ZjAsIDB4ZjgsCiAJCQkJMHgwMCwgMHgwYSwgMHgxNCB9LAogCQkJLnJ4X3RyYWNlX2xvc3NfNSAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKIAkJCS50eF90cmFjZV9sb3NzXzUgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCkBAIC0yNzMsMTMgKzI2NSwxNSBAQAogCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJCQkweDAwLCAweDAwLCAweDAwIH0sCi0JCQkudHhfcmVmX3BkX3ZvbHRhZ2UgICA9IDB4MjRlLAotCQkJLnR4X3JlZl9wb3dlciAgICAgICAgPSAweDc4LAorCQkJLnR4X3JlZl9wZF92b2x0YWdlICAgPSAweDFhOSwKKwkJCS50eF9yZWZfcG93ZXIgICAgICAgID0gMHg4MCwKIAkJCS50eF9vZmZzZXRfZGIgICAgICAgID0gMHgwLAogCQkJLnR4X3JhdGVfbGltaXRzX25vcm1hbCA9IHsKLQkJCQkweDFlLCAweDFmLCAweDIyLCAweDI0LCAweDI4LCAweDI5IH0sCisJCQkJMHgxZCwgMHgxZiwgMHgyNCwgMHgyOCwgMHgyOCwgMHgyOSB9LAogCQkJLnR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkID0gewotCQkJCTB4MWIsIDB4MWMsIDB4MWUsIDB4MjAsIDB4MjQsIDB4MjUgfSwKKwkJCQkweDE5LCAweDFmLCAweDIyLCAweDIzLCAweDI3LCAweDI4IH0sCisJCQkudHhfcmF0ZV9saW1pdHNfZXh0cmVtZSA9IHsKKwkJCQkweDE5LCAweDFjLCAweDFlLCAweDIwLCAweDI0LCAweDI1IH0sCiAJCQkudHhfY2hhbm5lbF9saW1pdHNfMTFiID0gewogCQkJCTB4MjIsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCiAJCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHgyMiwgMHg1MCwKQEAgLTI4OSwxMCArMjgzLDEyIEBACiAJCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHgyMCwgMHg1MCwKIAkJCQkweDIwLCAweDUwIH0sCiAJCQkudHhfcGR2X3JhdGVfb2Zmc2V0cyA9IHsKLQkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCQkJMHgwNywgMHgwOCwgMHgwNCwgMHgwMiwgMHgwMiwgMHgwMCB9LAogCQkJLnR4X2liaWFzICAgICAgICAgICAgPSB7Ci0JCQkJMHgxYSwgMHgxYSwgMHgxYSwgMHgxYSwgMHgxYSwgMHgyNyB9LAotCQkJLnJ4X2ZlbV9pbnNlcnRpb25fbG9zcyA9IDB4MTQsCisJCQkJMHgxMSwgMHgxMSwgMHgxNSwgMHgxMSwgMHgxNSwgMHgwZiB9LAorCQkJLnJ4X2ZlbV9pbnNlcnRpb25fbG9zcyA9IDB4MGUsCisJCQkuZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHJlc2hvbGQgPSAweDFlLAorCQkJLmRlZ3JhZGVkX25vcm1hbF90b19oaWdoX3RocmVzaG9sZCA9IDB4MmQsCiAJCQkudHhfcmVmX3BkX3ZvbHRhZ2VfNSA9IHsKIAkJCQkweDAxOTAsIDB4MDFhNCwgMHgwMWMzLCAweDAxZDgsCiAJCQkJMHgwMjBhLCAweDAyMWMgfSwKQEAgLTMwNCw2ICszMDAsOCBAQAogCQkJCTB4MWIsIDB4MWUsIDB4MjEsIDB4MjMsIDB4MjcsIDB4MDAgfSwKIAkJCS50eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81ID0gewogCQkJCTB4MWIsIDB4MWUsIDB4MjEsIDB4MjMsIDB4MjcsIDB4MDAgfSwKKwkJCS50eF9yYXRlX2xpbWl0c19leHRyZW1lXzUgPSB7CisJCQkJMHgxYiwgMHgxZSwgMHgyMSwgMHgyMywgMHgyNywgMHgwMCB9LAogCQkJLnR4X2NoYW5uZWxfbGltaXRzX29mZG1fNSA9IHsKIAkJCQkweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLAogCQkJCTB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCkBAIC0zMTUsOCArMzEzLDE4IEBACiAJCQkudHhfaWJpYXNfNSAgICAgICAgICA9IHsKIAkJCQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwIH0sCiAJCQkucnhfZmVtX2luc2VydGlvbl9sb3NzXzUgPSB7Ci0JCQkJMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCB9CisJCQkJMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCB9LAorCQkJLmRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyZXNob2xkXzUgPSAweDAwLAorCQkJLmRlZ3JhZGVkX25vcm1hbF90b19oaWdoX3RocmVzaG9sZF81ID0gMHgwMAogCQl9CisJfSwKKwkuaXRyaW0gPSB7CisJCS5lbmFibGUgPSBmYWxzZSwKKwkJLnRpbWVvdXQgPSA1MDAwMCwKKwl9LAorCS5wbV9jb25maWcgPSB7CisJCS5ob3N0X2Nsa19zZXR0bGluZ190aW1lID0gNTAwMCwKKwkJLmhvc3RfZmFzdF93YWtldXBfc3VwcG9ydCA9IGZhbHNlCiAJfQogfTsKIApAQCAtMzU5LDcgKzM2Nyw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB3bDEyNzFfY21kX2RhdGFfcGF0aCh3bCwgd2wtPmNoYW5uZWwsIDEpOworCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzc0LDExICszODIsMTMgQEAKIHN0YXRpYyB2b2lkIHdsMTI3MV9wb3dlcl9vZmYoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJd2wtPnNldF9wb3dlcihmYWxzZSk7CisJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfcG93ZXJfb24oc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJd2wtPnNldF9wb3dlcih0cnVlKTsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfZndfc3RhdHVzKHN0cnVjdCB3bDEyNzEgKndsLApAQCAtNDQ3LDE0ICs0NTcsMTMgQEAKIAlpbnRyICY9IFdMMTI3MV9JTlRSX01BU0s7CiAKIAlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BKSB7Ci0JCWJvb2wgZG9fYWNrID0gKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQikgPyBmYWxzZSA6IHRydWU7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSIpOwotCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAwLCBkb19hY2spOworCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAwKTsKIAl9CiAKIAlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CKSB7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQiIpOwotCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAxLCB0cnVlKTsKKwkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMSk7CiAJfQogCiAJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkKQEAgLTYxNCw2ICs2MjMsNyBAQAogCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0aXRpb247CiAJaW50IHJldCA9IDA7CiAKKwltc2xlZXAoV0wxMjcxX1BSRV9QT1dFUl9PTl9TTEVFUCk7CiAJd2wxMjcxX3Bvd2VyX29uKHdsKTsKIAltc2xlZXAoV0wxMjcxX1BPV0VSX09OX1NMRUVQKTsKIAl3bDEyNzFfc3BpX3Jlc2V0KHdsKTsKQEAgLTY0Myw3ICs2NTMsNyBAQAogCiAJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfcG93ZXJfb2ZmOworCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9JRF8xMjcxX1BHMjA6CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4ICgxMjcxIFBHMjApIiwKQEAgLTY1MSwzOCArNjYxLDM0IEBACiAKIAkJcmV0ID0gd2wxMjcxX3NldHVwKHdsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9wb3dlcl9vZmY7CisJCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJd2wxMjcxX2Vycm9yKCJ1bnN1cHBvcnRlZCBjaGlwIGlkOiAweCV4Iiwgd2wtPmNoaXAuaWQpOworCQl3bDEyNzFfd2FybmluZygidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfcG93ZXJfb2ZmOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAod2wtPmZ3ID09IE5VTEwpIHsKIAkJcmV0ID0gd2wxMjcxX2ZldGNoX2Zpcm13YXJlKHdsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9wb3dlcl9vZmY7CisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBObyBOVlMgZnJvbSBuZXRsaW5rLCB0cnkgdG8gZ2V0IGl0IGZyb20gdGhlIGZpbGVzeXN0ZW0gKi8KIAlpZiAod2wtPm52cyA9PSBOVUxMKSB7CiAJCXJldCA9IHdsMTI3MV9mZXRjaF9udnMod2wpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X3Bvd2VyX29mZjsKKwkJCWdvdG8gb3V0OwogCX0KIAotCWdvdG8gb3V0OwotCi1vdXRfcG93ZXJfb2ZmOgotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogaW50IHdsMTI3MV9wbHRfc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CisJaW50IHJldHJpZXMgPSBXTDEyNzFfQk9PVF9SRVRSSUVTOwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwpAQCAtNjk2LDM1ICs3MDIsNDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX1BMVDsKKwl3aGlsZSAocmV0cmllcykgeworCQlyZXRyaWVzLS07CisJCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CiAKLQlyZXQgPSB3bDEyNzFfY2hpcF93YWtldXAod2wpOwotCWlmIChyZXQgPCAwKQorCQlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX3BsdF9pbml0KHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGlycV9kaXNhYmxlOworCisJCS8qIE1ha2Ugc3VyZSBwb3dlciBzYXZpbmcgaXMgZGlzYWJsZWQgKi8KKwkJcmV0ID0gd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNzFfUFNNX0NBTSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBpcnFfZGlzYWJsZTsKKworCQl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfUExUOworCQl3bDEyNzFfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsCisJCQkgICAgICB3bC0+Y2hpcC5md192ZXIpOwogCQlnb3RvIG91dDsKIAotCXJldCA9IHdsMTI3MV9ib290KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfcG93ZXJfb2ZmOworaXJxX2Rpc2FibGU6CisJCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCS8qIFVubG9ja2luZyB0aGUgbXV0ZXggaW4gdGhlIG1pZGRsZSBvZiBoYW5kbGluZyBpcworCQkgICBpbmhlcmVudGx5IHVuc2FmZS4gSW4gdGhpcyBjYXNlIHdlIGRlZW0gaXQgc2FmZSB0byBkbywKKwkJICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxldCBhbnkgcG9zc2libHkgcGVuZGluZyBJUlEgb3V0IG9mCisJCSAgIHRoZSBzeXN0ZW0gKGFuZCB3aGlsZSB3ZSBhcmUgV0wxMjcxX1NUQVRFX09GRiB0aGUgSVJRCisJCSAgIHdvcmsgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmcuKSBBbHNvLCBhbnkgb3RoZXIKKwkJICAgcG9zc2libGUgY29uY3VycmVudCBvcGVyYXRpb25zIHdpbGwgZmFpbCBkdWUgdG8gdGhlCisJCSAgIGN1cnJlbnQgc3RhdGUsIGhlbmNlIHRoZSB3bDEyNzEgc3RydWN0IHNob3VsZCBiZSBzYWZlLiAqLworCQljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworcG93ZXJfb2ZmOgorCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKwl9CiAKLQl3bDEyNzFfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7Ci0KLQlyZXQgPSB3bDEyNzFfcGx0X2luaXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9pcnFfZGlzYWJsZTsKLQotCS8qIE1ha2Ugc3VyZSBwb3dlciBzYXZpbmcgaXMgZGlzYWJsZWQgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X3NsZWVwX2F1dGgod2wsIFdMMTI3MV9QU01fQ0FNKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfaXJxX2Rpc2FibGU7Ci0KLQlnb3RvIG91dDsKLQotb3V0X2lycV9kaXNhYmxlOgotCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCi1vdXRfcG93ZXJfb2ZmOgotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCisJd2wxMjcxX2Vycm9yKCJmaXJtd2FyZSBib290IGluIFBMVCBtb2RlIGZhaWxlZCBkZXNwaXRlICVkIHJldHJpZXMiLAorCQkgICAgIFdMMTI3MV9CT09UX1JFVFJJRVMpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIApAQCAtNzYyLDcgKzc4MSwyMCBAQAogc3RhdGljIGludCB3bDEyNzFfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHR4aW5mby0+Y29udHJvbC5zdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIHBlZWsgaW50byB0aGUgcmF0ZXMgY29uZmlndXJlZCBpbiB0aGUgU1RBIGVudHJ5ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJaWYgKHN0YSAmJiBzdGEtPnN1cHBfcmF0ZXNbY29uZi0+Y2hhbm5lbC0+YmFuZF0gIT0gd2wtPnN0YV9yYXRlX3NldCkgeworCQl3bC0+c3RhX3JhdGVfc2V0ID0gc3RhLT5zdXBwX3JhdGVzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOworCQlzZXRfYml0KFdMMTI3MV9GTEFHX1NUQV9SQVRFU19DSEFOR0VELCAmd2wtPmZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKworCS8qIHF1ZXVlIHRoZSBwYWNrZXQgKi8KIAlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOwogCiAJLyoKQEAgLTc4NCw3ICs4MTYsNyBAQAogCQkgKiBwcm90ZWN0ZWQuIE1heWJlIGZpeCB0aGlzIGJ5IHJlbW92aW5nIHRoZSBzdHVwaWQKIAkJICogdmFyaWFibGUgYWx0b2dldGhlciBhbmQgY2hlY2tpbmcgdGhlIHJlYWwgcXVldWUgc3RhdGU/CiAJCSAqLwotCQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IHRydWU7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCwgJndsLT5mbGFncyk7CiAJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTg4MCw2ICs5MTIsNyBAQAogc3RhdGljIGludCB3bDEyNzFfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0cmllcyA9IFdMMTI3MV9CT09UX1JFVFJJRVM7CiAJaW50IHJldCA9IDA7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFydCIpOwpAQCAtODkzLDMwICs5MjYsNDIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKLQlpZiAocmV0IDwgMCkKKwl3aGlsZSAocmV0cmllcykgeworCQlyZXRyaWVzLS07CisJCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcG93ZXJfb2ZmOworCisJCXJldCA9IHdsMTI3MV9od19pbml0KHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGlycV9kaXNhYmxlOworCisJCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PTjsKKwkJd2wxMjcxX2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X3Bvd2VyX29mZjsKK2lycV9kaXNhYmxlOgorCQl3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKwkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCQkvKiBVbmxvY2tpbmcgdGhlIG11dGV4IGluIHRoZSBtaWRkbGUgb2YgaGFuZGxpbmcgaXMKKwkJICAgaW5oZXJlbnRseSB1bnNhZmUuIEluIHRoaXMgY2FzZSB3ZSBkZWVtIGl0IHNhZmUgdG8gZG8sCisJCSAgIGJlY2F1c2Ugd2UgbmVlZCB0byBsZXQgYW55IHBvc3NpYmx5IHBlbmRpbmcgSVJRIG91dCBvZgorCQkgICB0aGUgc3lzdGVtIChhbmQgd2hpbGUgd2UgYXJlIFdMMTI3MV9TVEFURV9PRkYgdGhlIElSUQorCQkgICB3b3JrIGZ1bmN0aW9uIHdpbGwgbm90IGRvIGFueXRoaW5nLikgQWxzbywgYW55IG90aGVyCisJCSAgIHBvc3NpYmxlIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aWxsIGZhaWwgZHVlIHRvIHRoZQorCQkgICBjdXJyZW50IHN0YXRlLCBoZW5jZSB0aGUgd2wxMjcxIHN0cnVjdCBzaG91bGQgYmUgc2FmZS4gKi8KKwkJY2FuY2VsX3dvcmtfc3luYygmd2wtPmlycV93b3JrKTsKKwkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKK3Bvd2VyX29mZjoKKwkJd2wxMjcxX3Bvd2VyX29mZih3bCk7CisJfQogCi0JcmV0ID0gd2wxMjcxX2h3X2luaXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9pcnFfZGlzYWJsZTsKLQotCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PTjsKLQotCXdsMTI3MV9pbmZvKCJmaXJtd2FyZSBib290ZWQgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7Ci0KLQlnb3RvIG91dDsKLQotb3V0X2lycV9kaXNhYmxlOgotCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCi1vdXRfcG93ZXJfb2ZmOgotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCisJd2wxMjcxX2Vycm9yKCJmaXJtd2FyZSBib290IGZhaWxlZCBkZXNwaXRlICVkIHJldHJpZXMiLAorCQkgICAgIFdMMTI3MV9CT09UX1JFVFJJRVMpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIApAQCAtOTQ0LDExICs5ODksMTAgQEAKIAogCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTik7CiAKLQlpZiAod2wtPnNjYW5uaW5nKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKIAkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQkJd2wtPnNjYW5uaW5nID0gZmFsc2U7CiAJfQogCiAJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKQEAgLTk3MywxMCArMTAxNyw3IEBACiAJd2wtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCiAJd2wtPnJ4X2NvdW50ZXIgPSAwOwotCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKIAl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwogCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlID0gMDsKIAl3bC0+dHhfcmVzdWx0c19jb3VudCA9IDA7CkBAIC05ODYsNyArMTAyNyw5IEBACiAJd2wtPnR4X3NlY3VyaXR5X3NlcV8zMiA9IDA7CiAJd2wtPnRpbWVfb2Zmc2V0ID0gMDsKIAl3bC0+c2Vzc2lvbl9jb3VudGVyID0gMDsKLQl3bC0+am9pbmVkID0gZmFsc2U7CisJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJd2wtPnN0YV9yYXRlX3NldCA9IDA7CisJd2wtPmZsYWdzID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspCiAJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPSAwOwpAQCAtOTk2LDEzICsxMDM5LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgd2wxMjcxX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwogCWludCByZXQgPSAwOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYWRkIGludGVyZmFjZSB0eXBlICVkIG1hYyAlcE0iLAotCQkgICAgIGNvbmYtPnR5cGUsIGNvbmYtPm1hY19hZGRyKTsKKwkJICAgICB2aWYtPnR5cGUsIHZpZi0+YWRkcik7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCWlmICh3bC0+dmlmKSB7CkBAIC0xMDEwLDkgKzEwNTMsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3bC0+dmlmID0gY29uZi0+dmlmOworCXdsLT52aWYgPSB2aWY7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKIAkJYnJlYWs7CkBAIC0xMDMyLDcgKzEwNzUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwogCkBAIC0xMTA5LDYgKzExNTIsNTEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHdsMTI3MV9qb2luX2NoYW5uZWwoc3RydWN0IHdsMTI3MSAqd2wsIGludCBjaGFubmVsKQoreworCWludCByZXQgPSAwOworCS8qIHdlIG5lZWQgdG8gdXNlIGEgZHVtbXkgQlNTSUQgZm9yIG5vdyAqLworCXN0YXRpYyBjb25zdCB1OCBkdW1teV9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4MGIsIDB4YWQsIDB4ZGUsCisJCQkJCQkgIDB4YWQsIDB4YmUsIDB4ZWYgfTsKKworCS8qIHRoZSBkdW1teSBqb2luIGlzIG5vdCByZXF1aXJlZCBmb3IgYWQtaG9jICovCisJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTKQorCQlnb3RvIG91dDsKKworCS8qIGRpc2FibGUgbWFjIGZpbHRlciwgc28gd2UgaGVhciBldmVyeXRoaW5nICovCisJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKworCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKKwltZW1jcHkod2wtPmJzc2lkLCBkdW1teV9ic3NpZCwgRVRIX0FMRU4pOworCisJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV91bmpvaW5fY2hhbm5lbChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJLyogdG8gc3RvcCBsaXN0ZW5pbmcgdG8gYSBjaGFubmVsLCB3ZSBkaXNjb25uZWN0ICovCisJcmV0ID0gd2wxMjcxX2NtZF9kaXNjb25uZWN0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKKwl3bC0+Y2hhbm5lbCA9IDA7CisJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHdsMTI3MV9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CkBAIC0xMTE3LDEwICsxMjA1LDExIEBACiAKIAljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQiLAorCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQgJXMiLAogCQkgICAgIGNoYW5uZWwsCiAJCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyA/ICJvbiIgOiAib2ZmIiwKLQkJICAgICBjb25mLT5wb3dlcl9sZXZlbCk7CisJCSAgICAgY29uZi0+cG93ZXJfbGV2ZWwsCisJCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFID8gImlkbGUiIDogImluIHVzZSIpOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIApAQCAtMTEzMCwzNCArMTIxOSw0NCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCWlmIChjaGFubmVsICE9IHdsLT5jaGFubmVsKSB7Ci0JCS8qCi0JCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSBzdGFjayB3aWxsIGNvbmZpZ3VyZSB0aGUgcmlnaHQgY2hhbm5lbAotCQkgKiBiZWZvcmUgYXNzb2NpYXRpbmcsIHNvIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBhIGpvaW4KLQkJICogY29tbWFuZCBoZXJlLiAgV2Ugd2lsbCBqb2luIHRoZSByaWdodCBjaGFubmVsIHdoZW4gdGhlCi0JCSAqIEJTU0lEIGNoYW5nZXMKLQkJICovCi0JCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUgJiYKKwkJICAgIHRlc3RfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncykpCisJCQl3bDEyNzFfdW5qb2luX2NoYW5uZWwod2wpOworCQllbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkpCisJCQl3bDEyNzFfam9pbl9jaGFubmVsKHdsLCBjaGFubmVsKTsKKworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSB7CisJCQl3bC0+cmF0ZV9zZXQgPSBDT05GX1RYX1JBVEVfTUFTS19CQVNJQzsKKwkJCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOworCQkJd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKKwkJfQogCX0KIAotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTICYmICF3bC0+cHNtX3JlcXVlc3RlZCkgewotCQl3bDEyNzFfaW5mbygicHNtIGVuYWJsZWQiKTsKKwkvKiBpZiB0aGUgY2hhbm5lbCBjaGFuZ2VzIHdoaWxlIGpvaW5lZCwgam9pbiBhZ2FpbiAqLworCWlmIChjaGFubmVsICE9IHdsLT5jaGFubmVsICYmIHRlc3RfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncykpCisJCXdsMTI3MV9qb2luX2NoYW5uZWwod2wsIGNoYW5uZWwpOwogCi0JCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyAmJgorCSAgICAhdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpIHsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKTsKIAogCQkvKgogCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCiAJCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCiAJCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgogCQkgKi8KLQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpIHsKKwkJCXdsMTI3MV9pbmZvKCJwc20gZW5hYmxlZCIpOworCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCX0KIAl9IGVsc2UgaWYgKCEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKLQkJICAgd2wtPnBzbV9yZXF1ZXN0ZWQpIHsKKwkJICAgdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpIHsKIAkJd2wxMjcxX2luZm8oInBzbSBkaXNhYmxlZCIpOwogCi0JCXdsLT5wc21fcmVxdWVzdGVkID0gZmFsc2U7CisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKTsKIAotCQlpZiAod2wtPnBzbSkKKwkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpCiAJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOwogCX0KIApAQCAtMTQ0MCwyMiArMTUzOSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHUzMiB3bDEyNzFfZW5hYmxlZF9yYXRlc19nZXQoc3RydWN0IHdsMTI3MSAqd2wsIHU2NCBiYXNpY19yYXRlX3NldCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOwotCXUzMiBlbmFibGVkX3JhdGVzID0gMDsKLQlpbnQgYml0OwotCi0JYmFuZCA9IHdsLT5ody0+d2lwaHktPmJhbmRzW3dsLT5iYW5kXTsKLQlmb3IgKGJpdCA9IDA7IGJpdCA8IGJhbmQtPm5fYml0cmF0ZXM7IGJpdCsrKSB7Ci0JCWlmIChiYXNpY19yYXRlX3NldCAmIDB4MSkKLQkJCWVuYWJsZWRfcmF0ZXMgfD0gYmFuZC0+Yml0cmF0ZXNbYml0XS5od192YWx1ZTsKLQkJYmFzaWNfcmF0ZV9zZXQgPj49IDE7Ci0JfQotCi0JcmV0dXJuIGVuYWJsZWRfcmF0ZXM7Ci19Ci0KIHN0YXRpYyB2b2lkIHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKQEAgLTE0NzMsOSArMTU1Niw2OCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAorCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSAmJgorCSAgICAvKgorCSAgICAgKiBOb3cgd2Uga25vdyB0aGUgY29ycmVjdCBic3NpZCwgc28gd2Ugc2VuZCBhIG5ldyBqb2luIGNvbW1hbmQKKwkgICAgICogYW5kIGVuYWJsZSB0aGUgQlNTSUQgZmlsdGVyCisJICAgICAqLworCSAgICBtZW1jbXAod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQkJd2wtPnJ4X2NvbmZpZyB8PSBDRkdfQlNTSURfRklMVEVSX0VOOworCQkJbWVtY3B5KHdsLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YSh3bCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXdsMTI3MV93YXJuaW5nKCJjbWQgYnVsZCBudWxsIGRhdGEgZmFpbGVkICVkIiwKKwkJCQkJICAgICAgIHJldCk7CisJCQkJZ290byBvdXRfc2xlZXA7CisJCQl9CisJCQlyZXQgPSB3bDEyNzFfY21kX2pvaW4od2wpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQl3bDEyNzFfd2FybmluZygiY21kIGpvaW4gZmFpbGVkICVkIiwgcmV0KTsKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJCX0KKwkJCXNldF9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKKwl9CisKKwlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0lCU1MpIHsKKwkJLyogRklYTUU6IFRoaXMgaW1wbGVtZW50cyBydWRpbWVudGFyeSBhZC1ob2Mgc3VwcG9ydCAtCisJCSAgIHByb3BlciB0ZW1wbGF0ZXMgYXJlIG9uIHRoZSB3aXNoIGxpc3QgYW5kIG5vdGlmaWNhdGlvbgorCQkgICBvbiB3aGVuIHRoZXkgY2hhbmdlLiBUaGlzIHBhdGNoIHdpbGwgdXBkYXRlIHRoZSB0ZW1wbGF0ZXMKKwkJICAgb24gZXZlcnkgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiBBbHNvLCB0aGUgZmlybXdhcmUgd2lsbCBub3QKKwkJICAgYW5zd2VyIHRvIHByb2JlLXJlcXVlc3RzIGFzIGl0IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlcgorCQkgICBTU0lEIHNldCBpbiB0aGUgSk9JTiBjb21tYW5kLiBUaGUgcHJvYmUtcmVzcG9uc2UgdGVtcGxhdGUKKwkJICAgaXMgc2V0IG5ldmVydGhlbGVzcywgYXMgdGhlIEZXIHdpbGwgQVNTRVJUIHdpdGhvdXQgaXQgKi8KKwkJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCisJCWlmIChiZWFjb24pIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0JFQUNPTiwKKwkJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwKKwkJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKKworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7CisJCQkJZ290byBvdXRfc2xlZXA7CisJCQl9CisKKwkJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBiZWFjb24tPmRhdGE7CisJCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKKwkJCQlJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOworCisJCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwKKwkJCQkJCSAgICAgIENNRF9URU1QTF9QUk9CRV9SRVNQT05TRSwKKwkJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwKKwkJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKKwkJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewogCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCQl3bC0+YWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCXNldF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpOwogCiAJCQkvKgogCQkJICogd2l0aCB3bDEyNzEsIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZQpAQCAtMTQ5Miw3ICsxNjM0LDggQEAKIAkJCQlnb3RvIG91dF9zbGVlcDsKIAogCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KLQkJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiAhd2wtPnBzbSkgeworCQkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpICYmCisJCQkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKIAkJCQltb2RlID0gU1RBVElPTl9QT1dFUl9TQVZFX01PREU7CiAJCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBtb2RlKTsKIAkJCQlpZiAocmV0IDwgMCkKQEAgLTE1MDAsNyArMTY0Myw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiB1c2UgZGVmYXVsdHMgd2hlbiBub3QgYXNzb2NpYXRlZCAqLwotCQkJd2wtPmJhc2ljX3JhdGVfc2V0ID0gV0wxMjcxX0RFRkFVTFRfQkFTSUNfUkFURV9TRVQ7CisJCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpOwogCQkJd2wtPmFpZCA9IDA7CiAJCX0KIApAQCAtMTUzNSwxNyArMTY3OCw2IEBACiAJCX0KIAl9CiAKLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7Ci0JCXdsLT5iYXNpY19yYXRlX3NldCA9IHdsMTI3MV9lbmFibGVkX3JhdGVzX2dldCgKLQkJCXdsLCBic3NfY29uZi0+YmFzaWNfcmF0ZXMpOwotCi0JCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCwgd2wtPmJhc2ljX3JhdGVfc2V0KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV93YXJuaW5nKCJTZXQgcmF0ZSBwb2xpY2llcyBmYWlsZWQgJWQiLCByZXQpOwotCQkJZ290byBvdXRfc2xlZXA7Ci0JCX0KLQl9Ci0KIG91dF9zbGVlcDoKIAl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKIApAQCAtMTU5OSwxOSArMTczMSwxOSBAQAogCiAvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2wxMjcxX2NoYW5uZWxzW10gPSB7Ci0JeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKLQl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAotCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCi0JeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKLQl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAotCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCi0JeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKLQl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAotCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCi0JeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCi0JeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCisJeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzNywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1NywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2NywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLm1heF9wb3dlciA9IDI1IH0sCiB9OwogCiAvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KQEAgLTE3NTcsNyArMTg4OSw4IEBACiAJCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwKIAkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTOwogCi0Jd2wtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCXdsLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOwogCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI3MV9iYW5kXzJnaHo7CiAKQEAgLTE4MTgsMjEgKzE5NTEsMTggQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZ3bC0+ZWxwX3dvcmssIHdsMTI3MV9lbHBfd29yayk7CiAJd2wtPmNoYW5uZWwgPSBXTDEyNzFfREVGQVVMVF9DSEFOTkVMOwotCXdsLT5zY2FubmluZyA9IGZhbHNlOwogCXdsLT5kZWZhdWx0X2tleSA9IDA7CiAJd2wtPnJ4X2NvdW50ZXIgPSAwOwogCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CiAJd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKLQl3bC0+ZWxwID0gZmFsc2U7Ci0Jd2wtPnBzbSA9IDA7Ci0Jd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKIAl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwotCXdsLT5iYXNpY19yYXRlX3NldCA9IFdMMTI3MV9ERUZBVUxUX0JBU0lDX1JBVEVfU0VUOworCXdsLT5iYXNpY19yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOwogCXdsLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAl3bC0+dmlmID0gTlVMTDsKLQl3bC0+am9pbmVkID0gZmFsc2U7CisJd2wtPmZsYWdzID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBQ1hfVFhfREVTQ1JJUFRPUlM7IGkrKykKIAkJd2wtPnR4X2ZyYW1lc1tpXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMKaW5kZXggNTA3Y2Q5MS4uZTQwNzc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuYwpAQCAtMzksMTIgKzM5LDEzIEBACiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCi0JaWYgKHdsLT5lbHAgfHwgIXdsLT5wc20pCisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpCiAJCWdvdG8gb3V0OwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImNoaXAgdG8gZWxwIik7CiAJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfU0xFRVApOwotCXdsLT5lbHAgPSB0cnVlOworCXNldF9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKQEAgLTU1LDcgKzU2LDcgQEAKIC8qIFJvdXRpbmVzIHRvIHRvZ2dsZSBzbGVlcCBtb2RlIHdoaWxlIGluIEVMUCAqLwogdm9pZCB3bDEyNzFfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyNzEgKndsKQogewotCWlmICh3bC0+cHNtKSB7CisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmd2wtPmVscF93b3JrKTsKIAkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+ZWxwX3dvcmssCiAJCQkJCW1zZWNzX3RvX2ppZmZpZXMoRUxQX0VOVFJZX0RFTEFZKSk7CkBAIC03MCw3ICs3MSw3IEBACiAJdTMyIHN0YXJ0X3RpbWUgPSBqaWZmaWVzOwogCWJvb2wgcGVuZGluZyA9IGZhbHNlOwogCi0JaWYgKCF3bC0+ZWxwKQorCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAid2FraW5nIHVwIGNoaXAgZnJvbSBlbHAiKTsKQEAgLTEwMSw3ICsxMDIsNyBAQAogCQl9CiAJfQogCi0Jd2wtPmVscCA9IGZhbHNlOworCWNsZWFyX2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIndha2V1cCB0aW1lOiAldSBtcyIsCiAJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnRfdGltZSkpOwpAQCAtMTQzLDcgKzE0NCw3IEBACiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQl3bC0+cHNtID0gMTsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6CiAJZGVmYXVsdDoKQEAgLTE2Niw3ICsxNjcsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJd2wtPnBzbSA9IDA7CisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYwppbmRleCAwMGFmMDY1Li5hMjg4Y2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jCkBAIC0xMjEsNiArMTIxLDExIEBACiAJcGFkID0gcGFkIC0gc2tiLT5sZW47CiAJdHhfYXR0ciB8PSBwYWQgPDwgVFhfSFdfQVRUUl9PRlNUX0xBU1RfV09SRF9QQUQ7CiAKKwkvKiBpZiB0aGUgcGFja2V0cyBhcmUgZGVzdGluZWQgZm9yIEFQIChoYXZlIGEgU1RBIGVudHJ5KSBzZW5kIHRoZW0KKwkgICB3aXRoIEFQIHJhdGUgcG9saWNpZXMsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCBiYXNpYyByYXRlcyAqLworCWlmIChjb250cm9sLT5jb250cm9sLnN0YSkKKwkJdHhfYXR0ciB8PSBBQ1hfVFhfQVBfRlVMTF9SQVRFIDw8IFRYX0hXX0FUVFJfT0ZTVF9SQVRFX1BPTElDWTsKKwogCWRlc2MtPnR4X2F0dHIgPSBjcHVfdG9fbGUxNih0eF9hdHRyKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2ZpbGxfaGRyOiBwYWQ6ICVkIiwgcGFkKTsKQEAgLTIxNCwxOCArMjE5LDUwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHUzMiB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiByYXRlX3NldCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOworCXUzMiBlbmFibGVkX3JhdGVzID0gMDsKKwlpbnQgYml0OworCisJYmFuZCA9IHdsLT5ody0+d2lwaHktPmJhbmRzW3dsLT5iYW5kXTsKKwlmb3IgKGJpdCA9IDA7IGJpdCA8IGJhbmQtPm5fYml0cmF0ZXM7IGJpdCsrKSB7CisJCWlmIChyYXRlX3NldCAmIDB4MSkKKwkJCWVuYWJsZWRfcmF0ZXMgfD0gYmFuZC0+Yml0cmF0ZXNbYml0XS5od192YWx1ZTsKKwkJcmF0ZV9zZXQgPj49IDE7CisJfQorCisJcmV0dXJuIGVuYWJsZWRfcmF0ZXM7Cit9CisKIHZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIHR4X3dvcmspOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJYm9vbCB3b2tlbl91cCA9IGZhbHNlOworCXUzMiBzdGFfcmF0ZXMgPSAwOwogCWludCByZXQ7CiAKKwkvKiBjaGVjayBpZiB0aGUgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBBUCBoYXZlIGNoYW5nZWQgKi8KKwlpZiAodW5saWtlbHkodGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NUQV9SQVRFU19DSEFOR0VELAorCQkJCQkmd2wtPmZsYWdzKSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJCXN0YV9yYXRlcyA9IHdsLT5zdGFfcmF0ZV9zZXQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJfQorCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAogCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCiAJCWdvdG8gb3V0OwogCisJLyogaWYgcmF0ZXMgaGF2ZSBjaGFuZ2VkLCByZS1jb25maWd1cmUgdGhlIHJhdGUgcG9saWN5ICovCisJaWYgKHVubGlrZWx5KHN0YV9yYXRlcykpIHsKKwkJd2wtPnJhdGVfc2V0ID0gd2wxMjcxX3R4X2VuYWJsZWRfcmF0ZXNfZ2V0KHdsLCBzdGFfcmF0ZXMpOworCQl3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wpOworCX0KKwogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSkpKSB7CiAJCWlmICghd29rZW5fdXApIHsKIAkJCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CkBAIC0yNDAsMTggKzI3NywxOCBAQAogCQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHhfd29yazogZncgYnVmZmVyIGZ1bGwsICIKIAkJCQkgICAgICJzdG9wIHF1ZXVlcyIpOwogCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHdsLT5odyk7Ci0JCQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IHRydWU7CisJCQlzZXRfYml0KFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQsICZ3bC0+ZmxhZ3MpOwogCQkJc2tiX3F1ZXVlX2hlYWQoJndsLT50eF9xdWV1ZSwgc2tiKTsKIAkJCWdvdG8gb3V0OwogCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWdvdG8gb3V0OwotCQl9IGVsc2UgaWYgKHdsLT50eF9xdWV1ZV9zdG9wcGVkKSB7CisJCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQsCisJCQkJCSAgICAgICZ3bC0+ZmxhZ3MpKSB7CiAJCQkvKiBmaXJtd2FyZSBidWZmZXIgaGFzIHNwYWNlLCByZXN0YXJ0IHF1ZXVlcyAqLwogCQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLAogCQkJCSAgICAgImNvbXBsZXRlX3BhY2tldDogd2FraW5nIHF1ZXVlcyIpOwogCQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHdsLT5odyk7Ci0JCQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDhlYmY1YzMuLjcwOWZlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC04NjksNyArODY5LDcgQEAKIH0KIAogc3RhdGljIGludCB6ZF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKIApAQCAtODc3LDIyICs4NzcsMjIgQEAKIAlpZiAobWFjLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCW1hYy0+dHlwZSA9IGNvbmYtPnR5cGU7CisJCW1hYy0+dHlwZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXJldHVybiB6ZF93cml0ZV9tYWNfYWRkcigmbWFjLT5jaGlwLCBjb25mLT5tYWNfYWRkcik7CisJcmV0dXJuIHpkX3dyaXRlX21hY19hZGRyKCZtYWMtPmNoaXAsIHZpZi0+YWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIHpkX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CiAJbWFjLT50eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IGFjMTllY2QuLjRkYWYxYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCkBAIC0xMDc4LDExICsxMDc4LDE1IEBACiAJaW50IHI7CiAKIAkvKiBGaW5kIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0JZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMV0uZGVzYzsKLQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpICYmCi0JICAgIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZW5kcG9pbnQpKSB7Ci0JCWJ1bGtfb3V0X2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JfSBlbHNlIHsKKwlmb3IgKHIgPSAxOyByID49IDA7IHItLSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtyXS5kZXNjOworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpICYmCisJCSAgICB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVuZHBvaW50KSkgeworCQkJYnVsa19vdXRfZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyID09IC0xKSB7CiAJCWRldl9lcnIoJnVkZXYtPmRldiwKIAkJCSJ6ZDEyMTFydzogQ291bGQgbm90IGZpbmQgYnVsayBvdXQgZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hpbGlueF9lbWFjbGl0ZS5jIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKaW5kZXggOGM3NzdiYS4uZjdmZTFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKKysrIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKQEAgLTkyNSwxMSArOTI1LDcgQEAKIAkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBFbWFjTGl0ZSBkZXZpY2UgKi8KIAl4ZW1hY2xpdGVfc2V0X21hY19hZGRyZXNzKGxwLCBuZGV2LT5kZXZfYWRkcik7CiAKLQlkZXZfaW5mbyhkZXYsCi0JCSAiTUFDIGFkZHJlc3MgaXMgbm93ICUyeDolMng6JTJ4OiUyeDolMng6JTJ4XG4iLAotCQkgbmRldi0+ZGV2X2FkZHJbMF0sIG5kZXYtPmRldl9hZGRyWzFdLAotCQkgbmRldi0+ZGV2X2FkZHJbMl0sIG5kZXYtPmRldl9hZGRyWzNdLAotCQkgbmRldi0+ZGV2X2FkZHJbNF0sIG5kZXYtPmRldl9hZGRyWzVdKTsKKwlkZXZfaW5mbyhkZXYsICJNQUMgYWRkcmVzcyBpcyBub3cgJXBNXG4iLCBuZGV2LT5kZXZfYWRkcik7CiAKIAluZGV2LT5uZXRkZXZfb3BzID0gJnhlbWFjbGl0ZV9uZXRkZXZfb3BzOwogCW5kZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAwZjc3M2E5Li44YjIzMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgeWVsbG93ZmluX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh5ZWxsb3dmaW5fcGNpX3RibCkgPSB7CiAJeyAweDEwMDAsIDB4MDcwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgMHgxMDAwLCAweDA3MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDEgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvcGxhdGZvcm0uYyBiL2RyaXZlcnMvb2YvcGxhdGZvcm0uYwppbmRleCAyOThkZTBmLi5kNThhZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9vZi9wbGF0Zm9ybS5jCkBAIC02NSwyOCArNjUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9mX3BsYXRmb3JtX2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOwotCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnN1c3BlbmQpCi0JCWVycm9yID0gZHJ2LT5zdXNwZW5kKG9mX2Rldiwgc3RhdGUpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBvZl9wbGF0Zm9ybV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYpCi17Ci0Jc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2ID0gdG9fb2ZfZGV2aWNlKGRldik7Ci0Jc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fb2ZfcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+cmVzdW1lKQotCQllcnJvciA9IGRydi0+cmVzdW1lKG9mX2Rldik7Ci0JcmV0dXJuIGVycm9yOwotfQotCiBzdGF0aWMgdm9pZCBvZl9wbGF0Zm9ybV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOwpAQCAtOTYsMTYgKzc0LDMxMyBAQAogCQlkcnYtPnNodXRkb3duKG9mX2Rldik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKworc3RhdGljIGludCBvZl9wbGF0Zm9ybV9sZWdhY3lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOworCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5zdXNwZW5kKQorCQlyZXQgPSBkcnYtPnN1c3BlbmQob2ZfZGV2LCBtZXNnKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9mX3BsYXRmb3JtX2xlZ2FjeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldiA9IHRvX29mX2RldmljZShkZXYpOworCXN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX29mX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5yZXN1bWUpCisJCXJldCA9IGRydi0+cmVzdW1lKG9mX2Rldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvZl9wbGF0Zm9ybV9wbV9wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHJ2ICYmIGRydi0+cG0gJiYgZHJ2LT5wbS0+cHJlcGFyZSkKKwkJcmV0ID0gZHJ2LT5wbS0+cHJlcGFyZShkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2ZfcGxhdGZvcm1fcG1fY29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKworCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5jb21wbGV0ZSkKKwkJZHJ2LT5wbS0+Y29tcGxldGUoZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19TVVNQRU5ECisKK3N0YXRpYyBpbnQgb2ZfcGxhdGZvcm1fcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOworCWludCByZXQgPSAwOworCisJaWYgKCFkcnYpCisJCXJldHVybiAwOworCisJaWYgKGRydi0+cG0pIHsKKwkJaWYgKGRydi0+cG0tPnN1c3BlbmQpCisJCQlyZXQgPSBkcnYtPnBtLT5zdXNwZW5kKGRldik7CisJfSBlbHNlIHsKKwkJcmV0ID0gb2ZfcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX1NVU1BFTkQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2ZfcGxhdGZvcm1fcG1fc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOworCWludCByZXQgPSAwOworCisJaWYgKCFkcnYpCisJCXJldHVybiAwOworCisJaWYgKGRydi0+cG0pIHsKKwkJaWYgKGRydi0+cG0tPnN1c3BlbmRfbm9pcnEpCisJCQlyZXQgPSBkcnYtPnBtLT5zdXNwZW5kX25vaXJxKGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvZl9wbGF0Zm9ybV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT5yZXN1bWUpCisJCQlyZXQgPSBkcnYtPnBtLT5yZXN1bWUoZGV2KTsKKwl9IGVsc2UgeworCQlyZXQgPSBvZl9wbGF0Zm9ybV9sZWdhY3lfcmVzdW1lKGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvZl9wbGF0Zm9ybV9wbV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT5yZXN1bWVfbm9pcnEpCisJCQlyZXQgPSBkcnYtPnBtLT5yZXN1bWVfbm9pcnEoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZWxzZSAvKiAhQ09ORklHX1NVU1BFTkQgKi8KKworI2RlZmluZSBvZl9wbGF0Zm9ybV9wbV9zdXNwZW5kCQlOVUxMCisjZGVmaW5lIG9mX3BsYXRmb3JtX3BtX3Jlc3VtZQkJTlVMTAorI2RlZmluZSBvZl9wbGF0Zm9ybV9wbV9zdXNwZW5kX25vaXJxCU5VTEwKKyNkZWZpbmUgb2ZfcGxhdGZvcm1fcG1fcmVzdW1lX25vaXJxCU5VTEwKKworI2VuZGlmIC8qICFDT05GSUdfU1VTUEVORCAqLworCisjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisKK3N0YXRpYyBpbnQgb2ZfcGxhdGZvcm1fcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRydikKKwkJcmV0dXJuIDA7CisKKwlpZiAoZHJ2LT5wbSkgeworCQlpZiAoZHJ2LT5wbS0+ZnJlZXplKQorCQkJcmV0ID0gZHJ2LT5wbS0+ZnJlZXplKGRldik7CisJfSBlbHNlIHsKKwkJcmV0ID0gb2ZfcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0ZSRUVaRSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvZl9wbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT5mcmVlemVfbm9pcnEpCisJCQlyZXQgPSBkcnYtPnBtLT5mcmVlemVfbm9pcnEoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9mX3BsYXRmb3JtX3BtX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT50aGF3KQorCQkJcmV0ID0gZHJ2LT5wbS0+dGhhdyhkZXYpOworCX0gZWxzZSB7CisJCXJldCA9IG9mX3BsYXRmb3JtX2xlZ2FjeV9yZXN1bWUoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9mX3BsYXRmb3JtX3BtX3RoYXdfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT50aGF3X25vaXJxKQorCQkJcmV0ID0gZHJ2LT5wbS0+dGhhd19ub2lycShkZXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2ZfcGxhdGZvcm1fcG1fcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT5wb3dlcm9mZikKKwkJCXJldCA9IGRydi0+cG0tPnBvd2Vyb2ZmKGRldik7CisJfSBlbHNlIHsKKwkJcmV0ID0gb2ZfcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvZl9wbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOworCWludCByZXQgPSAwOworCisJaWYgKCFkcnYpCisJCXJldHVybiAwOworCisJaWYgKGRydi0+cG0pIHsKKwkJaWYgKGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKQorCQkJcmV0ID0gZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9mX3BsYXRmb3JtX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT5yZXN0b3JlKQorCQkJcmV0ID0gZHJ2LT5wbS0+cmVzdG9yZShkZXYpOworCX0gZWxzZSB7CisJCXJldCA9IG9mX3BsYXRmb3JtX2xlZ2FjeV9yZXN1bWUoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9mX3BsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZHJ2KQorCQlyZXR1cm4gMDsKKworCWlmIChkcnYtPnBtKSB7CisJCWlmIChkcnYtPnBtLT5yZXN0b3JlX25vaXJxKQorCQkJcmV0ID0gZHJ2LT5wbS0+cmVzdG9yZV9ub2lycShkZXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKworI2RlZmluZSBvZl9wbGF0Zm9ybV9wbV9mcmVlemUJCU5VTEwKKyNkZWZpbmUgb2ZfcGxhdGZvcm1fcG1fdGhhdwkJTlVMTAorI2RlZmluZSBvZl9wbGF0Zm9ybV9wbV9wb3dlcm9mZgkJTlVMTAorI2RlZmluZSBvZl9wbGF0Zm9ybV9wbV9yZXN0b3JlCQlOVUxMCisjZGVmaW5lIG9mX3BsYXRmb3JtX3BtX2ZyZWV6ZV9ub2lycQlOVUxMCisjZGVmaW5lIG9mX3BsYXRmb3JtX3BtX3RoYXdfbm9pcnEJCU5VTEwKKyNkZWZpbmUgb2ZfcGxhdGZvcm1fcG1fcG93ZXJvZmZfbm9pcnEJTlVMTAorI2RlZmluZSBvZl9wbGF0Zm9ybV9wbV9yZXN0b3JlX25vaXJxCU5VTEwKKworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG9mX3BsYXRmb3JtX2Rldl9wbV9vcHMgPSB7CisJLnByZXBhcmUgPSBvZl9wbGF0Zm9ybV9wbV9wcmVwYXJlLAorCS5jb21wbGV0ZSA9IG9mX3BsYXRmb3JtX3BtX2NvbXBsZXRlLAorCS5zdXNwZW5kID0gb2ZfcGxhdGZvcm1fcG1fc3VzcGVuZCwKKwkucmVzdW1lID0gb2ZfcGxhdGZvcm1fcG1fcmVzdW1lLAorCS5mcmVlemUgPSBvZl9wbGF0Zm9ybV9wbV9mcmVlemUsCisJLnRoYXcgPSBvZl9wbGF0Zm9ybV9wbV90aGF3LAorCS5wb3dlcm9mZiA9IG9mX3BsYXRmb3JtX3BtX3Bvd2Vyb2ZmLAorCS5yZXN0b3JlID0gb2ZfcGxhdGZvcm1fcG1fcmVzdG9yZSwKKwkuc3VzcGVuZF9ub2lycSA9IG9mX3BsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IG9mX3BsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycSwKKwkuZnJlZXplX25vaXJxID0gb2ZfcGxhdGZvcm1fcG1fZnJlZXplX25vaXJxLAorCS50aGF3X25vaXJxID0gb2ZfcGxhdGZvcm1fcG1fdGhhd19ub2lycSwKKwkucG93ZXJvZmZfbm9pcnEgPSBvZl9wbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycSwKKwkucmVzdG9yZV9ub2lycSA9IG9mX3BsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEsCit9OworCisjZGVmaW5lIE9GX1BMQVRGT1JNX1BNX09QU19QVFIJKCZvZl9wbGF0Zm9ybV9kZXZfcG1fb3BzKQorCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgT0ZfUExBVEZPUk1fUE1fT1BTX1BUUglOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKIGludCBvZl9idXNfdHlwZV9pbml0KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjb25zdCBjaGFyICpuYW1lKQogewogCWJ1cy0+bmFtZSA9IG5hbWU7CiAJYnVzLT5tYXRjaCA9IG9mX3BsYXRmb3JtX2J1c19tYXRjaDsKIAlidXMtPnByb2JlID0gb2ZfcGxhdGZvcm1fZGV2aWNlX3Byb2JlOwogCWJ1cy0+cmVtb3ZlID0gb2ZfcGxhdGZvcm1fZGV2aWNlX3JlbW92ZTsKLQlidXMtPnN1c3BlbmQgPSBvZl9wbGF0Zm9ybV9kZXZpY2Vfc3VzcGVuZDsKLQlidXMtPnJlc3VtZSA9IG9mX3BsYXRmb3JtX2RldmljZV9yZXN1bWU7CiAJYnVzLT5zaHV0ZG93biA9IG9mX3BsYXRmb3JtX2RldmljZV9zaHV0ZG93bjsKIAlidXMtPmRldl9hdHRycyA9IG9mX3BsYXRmb3JtX2RldmljZV9hdHRyczsKKwlidXMtPnBtID0gT0ZfUExBVEZPUk1fUE1fT1BTX1BUUjsKIAlyZXR1cm4gYnVzX3JlZ2lzdGVyKGJ1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKaW5kZXggYTdhYWUyNC4uMTY2YjY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCByaW5nX2J1ZmZlciAqb3BfcmluZ19idWZmZXJfcmVhZDsKIHN0YXRpYyBzdHJ1Y3QgcmluZ19idWZmZXIgKm9wX3JpbmdfYnVmZmVyX3dyaXRlOwotREVGSU5FX1BFUl9DUFUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIsIGNwdV9idWZmZXIpOworREVGSU5FX1BFUl9DUFUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIsIG9wX2NwdV9idWZmZXIpOwogCiBzdGF0aWMgdm9pZCB3cV9zeW5jX2J1ZmZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCkBAIC02MSw4ICs2MSw3IEBACiAKIHZvaWQgb3Byb2ZpbGVfY3B1X2J1ZmZlcl9pbmNfc21wbF9sb3N0KHZvaWQpCiB7Ci0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYKLQkJPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVyKTsKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKG9wX2NwdV9idWZmZXIpOwogCiAJY3B1X2J1Zi0+c2FtcGxlX2xvc3Rfb3ZlcmZsb3crKzsKIH0KQEAgLTk1LDcgKzk0LDcgQEAKIAkJZ290byBmYWlsOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmIgPSAmcGVyX2NwdShjcHVfYnVmZmVyLCBpKTsKKwkJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmIgPSAmcGVyX2NwdShvcF9jcHVfYnVmZmVyLCBpKTsKIAogCQliLT5sYXN0X3Rhc2sgPSBOVUxMOwogCQliLT5sYXN0X2lzX2tlcm5lbCA9IC0xOwpAQCAtMTIyLDcgKzEyMSw3IEBACiAJd29ya19lbmFibGVkID0gMTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqYiA9ICZwZXJfY3B1KGNwdV9idWZmZXIsIGkpOworCQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqYiA9ICZwZXJfY3B1KG9wX2NwdV9idWZmZXIsIGkpOwogCiAJCS8qCiAJCSAqIFNwcmVhZCB0aGUgd29yayBieSAxIGppZmZ5IHBlciBjcHUgc28gdGhleSBkb250IGFsbApAQCAtMTM5LDcgKzEzOCw3IEBACiAJd29ya19lbmFibGVkID0gMDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqYiA9ICZwZXJfY3B1KGNwdV9idWZmZXIsIGkpOworCQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqYiA9ICZwZXJfY3B1KG9wX2NwdV9idWZmZXIsIGkpOwogCiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmItPndvcmspOwogCX0KQEAgLTMzMCw3ICszMjksNyBAQAogX19vcHJvZmlsZV9hZGRfZXh0X3NhbXBsZSh1bnNpZ25lZCBsb25nIHBjLCBzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGludCBpc19rZXJuZWwpCiB7Ci0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYgPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVyKTsKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKG9wX2NwdV9idWZmZXIpOwogCXVuc2lnbmVkIGxvbmcgYmFja3RyYWNlID0gb3Byb2ZpbGVfYmFja3RyYWNlX2RlcHRoOwogCiAJLyoKQEAgLTM3NSw3ICszNzQsNyBAQAogewogCXN0cnVjdCBvcF9zYW1wbGUgKnNhbXBsZTsKIAlpbnQgaXNfa2VybmVsID0gIXVzZXJfbW9kZShyZWdzKTsKLQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKGNwdV9idWZmZXIpOworCXN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmID0gJl9fZ2V0X2NwdV92YXIob3BfY3B1X2J1ZmZlcik7CiAKIAljcHVfYnVmLT5zYW1wbGVfcmVjZWl2ZWQrKzsKIApAQCAtNDMwLDEzICs0MjksMTMgQEAKIAogdm9pZCBvcHJvZmlsZV9hZGRfcGModW5zaWduZWQgbG9uZyBwYywgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgbG9uZyBldmVudCkKIHsKLQlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKGNwdV9idWZmZXIpOworCXN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmID0gJl9fZ2V0X2NwdV92YXIob3BfY3B1X2J1ZmZlcik7CiAJbG9nX3NhbXBsZShjcHVfYnVmLCBwYywgMCwgaXNfa2VybmVsLCBldmVudCk7CiB9CiAKIHZvaWQgb3Byb2ZpbGVfYWRkX3RyYWNlKHVuc2lnbmVkIGxvbmcgcGMpCiB7Ci0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYgPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVyKTsKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKG9wX2NwdV9idWZmZXIpOwogCiAJaWYgKCFjcHVfYnVmLT50cmFjaW5nKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCmluZGV4IDI3Mjk5NWQuLjY4ZWExNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCkBAIC01MCw3ICs1MCw3IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogfTsKIAotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyLCBjcHVfYnVmZmVyKTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciwgb3BfY3B1X2J1ZmZlcik7CiAKIC8qCiAgKiBSZXNldHMgdGhlIGNwdSBidWZmZXIgdG8gYSBzYW5lIHN0YXRlLgpAQCAtNjAsNyArNjAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgb3BfY3B1X2J1ZmZlcl9yZXNldChpbnQgY3B1KQogewotCXN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmID0gJnBlcl9jcHUoY3B1X2J1ZmZlciwgY3B1KTsKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZwZXJfY3B1KG9wX2NwdV9idWZmZXIsIGNwdSk7CiAKIAljcHVfYnVmLT5sYXN0X2lzX2tlcm5lbCA9IC0xOwogCWNwdV9idWYtPmxhc3RfdGFzayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX3N0YXRzLmMgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX3N0YXRzLmMKaW5kZXggNjE2ODllOC4uOTE3ZDI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuYwpAQCAtMjMsNyArMjMsNyBAQAogCWludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJY3B1X2J1ZiA9ICZwZXJfY3B1KGNwdV9idWZmZXIsIGkpOworCQljcHVfYnVmID0gJnBlcl9jcHUob3BfY3B1X2J1ZmZlciwgaSk7CiAJCWNwdV9idWYtPnNhbXBsZV9yZWNlaXZlZCA9IDA7CiAJCWNwdV9idWYtPnNhbXBsZV9sb3N0X292ZXJmbG93ID0gMDsKIAkJY3B1X2J1Zi0+YmFja3RyYWNlX2Fib3J0ZWQgPSAwOwpAQCAtNTEsNyArNTEsNyBAQAogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQljcHVfYnVmID0gJnBlcl9jcHUoY3B1X2J1ZmZlciwgaSk7CisJCWNwdV9idWYgPSAmcGVyX2NwdShvcF9jcHVfYnVmZmVyLCBpKTsKIAkJc25wcmludGYoYnVmLCAxMCwgImNwdSVkIiwgaSk7CiAJCWNwdWRpciA9IG9wcm9maWxlZnNfbWtkaXIoc2IsIGRpciwgYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZGluby5jIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCmluZGV4IGQ2OWJkZTYuLmM1NDJjN2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBkaW5vX2ludGVycnVwdF90eXBlID0gewotCS50eXBlbmFtZQk9ICJHU0MtUENJIiwKKwkubmFtZQkJPSAiR1NDLVBDSSIsCiAJLnN0YXJ0dXAJPSBkaW5vX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IGRpbm9fZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSBkaW5vX2VuYWJsZV9pcnEsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZWlzYS5jIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCmluZGV4IDUxMjIwNzQuLjQ2ZjUwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYworKysgYi9kcml2ZXJzL3BhcmlzYy9laXNhLmMKQEAgLTE4OSw3ICsxODksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGVpc2FfaW50ZXJydXB0X3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0JIkVJU0EiLAorCS5uYW1lCSA9CSJFSVNBIiwKIAkuc3RhcnR1cCA9CWVpc2Ffc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duID0JZWlzYV9kaXNhYmxlX2lycSwKIAkuZW5hYmxlID0JZWlzYV9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwppbmRleCA2NDdhZGM5Li5jNGUxZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9nc2MuYworKysgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3NjX2FzaWNfaW50ZXJydXB0X3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0JIkdTQy1BU0lDIiwKKwkubmFtZQkgPQkiR1NDLUFTSUMiLAogCS5zdGFydHVwID0JZ3NjX2FzaWNfc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duID0JZ3NjX2FzaWNfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZSA9CWdzY19hc2ljX2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKaW5kZXggODhlMzMzNS4uYzc2ODM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwpAQCAtNzMwLDcgKzczMCw3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb3NhcGljX2ludGVycnVwdF90eXBlID0gewotCS50eXBlbmFtZSA9CSJJTy1TQVBJQy1sZXZlbCIsCisJLm5hbWUJID0JIklPLVNBUElDLWxldmVsIiwKIAkuc3RhcnR1cCA9CWlvc2FwaWNfc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duID0JaW9zYXBpY19kaXNhYmxlX2lycSwKIAkuZW5hYmxlID0JaW9zYXBpY19lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvbGVkLmMgYi9kcml2ZXJzL3BhcmlzYy9sZWQuYwppbmRleCA3OWNhZjFjLi4xODhiYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9sZWQuYworKysgYi9kcml2ZXJzL3BhcmlzYy9sZWQuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTE0Nyw0MSArMTQ4LDM0IEBACiBzdGF0aWMgdm9pZCAoKmxlZF9mdW5jX3B0cikgKHVuc2lnbmVkIGNoYXIpIF9fcmVhZF9tb3N0bHk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBsZWRfcHJvY19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIAotCWludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBsZWRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICpvdXQgPSBwYWdlOwotCWludCBsZW47Ci0KLQlzd2l0Y2ggKChsb25nKWRhdGEpCisJc3dpdGNoICgobG9uZyltLT5wcml2YXRlKQogCXsKIAljYXNlIExFRF9OT0xDRDoKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiSGVhcnRiZWF0OiAlZFxuIiwgbGVkX2hlYXJ0YmVhdCk7Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgIkRpc2sgSU86ICVkXG4iLCBsZWRfZGlza2lvKTsKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiTEFOIFJ4L1R4OiAlZFxuIiwgbGVkX2xhbnJ4dHgpOworCQlzZXFfcHJpbnRmKG0sICJIZWFydGJlYXQ6ICVkXG4iLCBsZWRfaGVhcnRiZWF0KTsKKwkJc2VxX3ByaW50ZihtLCAiRGlzayBJTzogJWRcbiIsIGxlZF9kaXNraW8pOworCQlzZXFfcHJpbnRmKG0sICJMQU4gUngvVHg6ICVkXG4iLCBsZWRfbGFucnh0eCk7CiAJCWJyZWFrOwogCWNhc2UgTEVEX0hBU0xDRDoKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiJXNcbiIsIGxjZF90ZXh0KTsKKwkJc2VxX3ByaW50ZihtLCAiJXNcbiIsIGxjZF90ZXh0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJKmVvZiA9IDE7CiAJCXJldHVybiAwOwogCX0KLQotCWxlbiA9IG91dCAtIHBhZ2UgLSBvZmY7Ci0JaWYgKGxlbiA8IGNvdW50KSB7Ci0JCSplb2YgPSAxOwotCQlpZiAobGVuIDw9IDApIHJldHVybiAwOwotCX0gZWxzZSB7Ci0JCWxlbiA9IGNvdW50OwotCX0KLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGVkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwgCi0JdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGVkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbGVkX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKKworc3RhdGljIHNzaXplX3QgbGVkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKKwlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCXZvaWQgKmRhdGEgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJY2hhciAqY3VyLCBsYnVmW2NvdW50ICsgMV07CiAJaW50IGQ7CiAKQEAgLTIzNCw2ICsyMjgsMTUgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGVkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbGVkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBsZWRfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGxlZF9jcmVhdGVfcHJvY2ZzKHZvaWQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3BkY19yb290ID0gTlVMTDsKQEAgLTI0MywxOSArMjQ2LDE1IEBACiAKIAlwcm9jX3BkY19yb290ID0gcHJvY19ta2RpcigicGRjIiwgMCk7CiAJaWYgKCFwcm9jX3BkY19yb290KSByZXR1cm4gLTE7Ci0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImxlZCIsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCBwcm9jX3BkY19yb290KTsKKwllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKCJsZWQiLCBTX0lSVUdPfFNfSVdVU1IsIHByb2NfcGRjX3Jvb3QsCisJCQkJJmxlZF9wcm9jX2ZvcHMsICh2b2lkICopTEVEX05PTENEKTsgLyogTEVEICovCiAJaWYgKCFlbnQpIHJldHVybiAtMTsKLQllbnQtPmRhdGEgPSAodm9pZCAqKUxFRF9OT0xDRDsgLyogTEVEICovCi0JZW50LT5yZWFkX3Byb2MgPSBsZWRfcHJvY19yZWFkOwotCWVudC0+d3JpdGVfcHJvYyA9IGxlZF9wcm9jX3dyaXRlOwogCiAJaWYgKGxlZF90eXBlID09IExFRF9IQVNMQ0QpCiAJewotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgibGNkIiwgU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsIHByb2NfcGRjX3Jvb3QpOworCQllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKCJsY2QiLCBTX0lSVUdPfFNfSVdVU1IsIHByb2NfcGRjX3Jvb3QsCisJCQkJCSZsZWRfcHJvY19mb3BzLCAodm9pZCAqKUxFRF9IQVNMQ0QpOyAvKiBMQ0QgKi8KIAkJaWYgKCFlbnQpIHJldHVybiAtMTsKLQkJZW50LT5kYXRhID0gKHZvaWQgKilMRURfSEFTTENEOyAvKiBMQ0QgKi8KLQkJZW50LT5yZWFkX3Byb2MgPSBsZWRfcHJvY19yZWFkOwotCQllbnQtPndyaXRlX3Byb2MgPSBsZWRfcHJvY193cml0ZTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCAxM2E2NGJjLi4wYmM1ZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC03NzksMTIgKzc3OSw5IEBACiAJcmVhZF91bmxvY2soJnBhdGhlbnRyeS0+cndfbG9jayk7CiAJCiAJRFBSSU5USygiJXM6IGZsYWdzIGJlZm9yZTogMHglWFxuIiwgX19mdW5jX18sIGZsYWdzKTsKLQkJCQotCXRlbXAgPSBpbjsKLQkKLQl3aGlsZSAoKnRlbXAgJiYgaXNzcGFjZSgqdGVtcCkpCi0JCXRlbXArKzsKLQkKKworCXRlbXAgPSBza2lwX3NwYWNlcyhpbik7CisKIAljID0gKnRlbXArKyAtICcwJzsKIAlpZiAoKGMgIT0gMCkgJiYgKGMgIT0gMSkpCiAJCWdvdG8gcGFyc2VfZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggNjc1ZjA0ZS4uYTM1YzljNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMzI2LDcgKzMyNiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3VwZXJpb19pbnRlcnJ1cHRfdHlwZSA9IHsKLQkudHlwZW5hbWUgPQlTVVBFUklPLAorCS5uYW1lCSA9CVNVUEVSSU8sCiAJLnN0YXJ0dXAgPQlzdXBlcmlvX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93biA9CXN1cGVyaW9fZGlzYWJsZV9pcnEsCiAJLmVuYWJsZSA9CXN1cGVyaW9fZW5hYmxlX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCmluZGV4IDI1OTcxNDUuLmFkMTEzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwpAQCAtMzQwMyw3ICszNDAzLDcgQEAKIAkJKnZhbCA9IGF1dG9tYXRpYzsKIAllbHNlIGlmICghc3RybmNtcChzLCAibm9uZSIsIDQpKQogCQkqdmFsID0gbm9uZTsKLQllbHNlIGlmIChub2ZpZm8gJiYgIXN0cm5jbXAocywgIm5vZmlmbyIsIDQpKQorCWVsc2UgaWYgKG5vZmlmbyAmJiAhc3RybmNtcChzLCAibm9maWZvIiwgNikpCiAJCSp2YWwgPSBub2ZpZm87CiAJZWxzZSB7CiAJCWNoYXIgKmVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDZjZGM5MzEuLjgzYWFlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTMzOSw2ICszMzksMzUgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQorc3RhdGljIGludCBfX2luaXQKK2RtYXJfcGFyc2Vfb25lX3Joc2Eoc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EgKnJoc2E7CisJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOworCisJcmhzYSA9IChzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EgKiloZWFkZXI7CisJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKKwkJaWYgKGRyaGQtPnJlZ19iYXNlX2FkZHIgPT0gcmhzYS0+YmFzZV9hZGRyZXNzKSB7CisJCQlpbnQgbm9kZSA9IGFjcGlfbWFwX3B4bV90b19ub2RlKHJoc2EtPnByb3hpbWl0eV9kb21haW4pOworCisJCQlpZiAoIW5vZGVfb25saW5lKG5vZGUpKQorCQkJCW5vZGUgPSAtMTsKKwkJCWRyaGQtPmlvbW11LT5ub2RlID0gbm9kZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IFJIU0EgcmVmZXJzIHRvIG5vbi1leGlzdGVudCBETUFSIHVuaXQgYXQgJWxseFxuIgorCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkgICAgIGRyaGQtPnJlZ19iYXNlX2FkZHIsCisJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFTkRPUiksCisJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQKIGRtYXJfdGFibGVfcHJpbnRfZG1hcl9lbnRyeShzdHJ1Y3QgYWNwaV9kbWFyX2hlYWRlciAqaGVhZGVyKQogewpAQCAtNDU4LDcgKzQ4Nyw5IEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIEFDUElfRE1BUl9IQVJEV0FSRV9BRkZJTklUWToKLQkJCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggUkhTQSAoeWV0PykgKi8KKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJCQlyZXQgPSBkbWFyX3BhcnNlX29uZV9yaHNhKGVudHJ5X2hlYWRlcik7CisjZW5kaWYKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKQEAgLTU4Miw2ICs2MTMsOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJpb3Nfd2FybmVkOworCiBpbnQgX19pbml0IGNoZWNrX3plcm9fYWRkcmVzcyh2b2lkKQogewogCXN0cnVjdCBhY3BpX3RhYmxlX2RtYXIgKmRtYXI7CkBAIC02MDEsNiArNjM0LDkgQEAKIAkJfQogCiAJCWlmIChlbnRyeV9oZWFkZXItPnR5cGUgPT0gQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVCkgeworCQkJdm9pZCBfX2lvbWVtICphZGRyOworCQkJdTY0IGNhcCwgZWNhcDsKKwogCQkJZHJoZCA9ICh2b2lkICopZW50cnlfaGVhZGVyOwogCQkJaWYgKCFkcmhkLT5hZGRyZXNzKSB7CiAJCQkJLyogUHJvbW90ZSBhbiBhdHRpdHVkZSBvZiB2aW9sZW5jZSB0byBhIEJJT1MgZW5naW5lZXIgdG9kYXkgKi8KQEAgLTYwOSwxNyArNjQ1LDQwIEBACiAJCQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFTkRPUiksCiAJCQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAogCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7Ci0jaWZkZWYgQ09ORklHX0RNQVIKLQkJCQlkbWFyX2Rpc2FibGVkID0gMTsKLSNlbmRpZgotCQkJCXJldHVybiAwOworCQkJCWJpb3Nfd2FybmVkID0gMTsKKwkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KLQkJCWJyZWFrOworCisJCQlhZGRyID0gZWFybHlfaW9yZW1hcChkcmhkLT5hZGRyZXNzLCBWVERfUEFHRV9TSVpFKTsKKwkJCWlmICghYWRkciApIHsKKwkJCQlwcmludGsoIklPTU1VOiBjYW4ndCB2YWxpZGF0ZTogJWxseFxuIiwgZHJoZC0+YWRkcmVzcyk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCQljYXAgPSBkbWFyX3JlYWRxKGFkZHIgKyBETUFSX0NBUF9SRUcpOworCQkJZWNhcCA9IGRtYXJfcmVhZHEoYWRkciArIERNQVJfRUNBUF9SRUcpOworCQkJZWFybHlfaW91bm1hcChhZGRyLCBWVERfUEFHRV9TSVpFKTsKKwkJCWlmIChjYXAgPT0gKHVpbnQ2NF90KS0xICYmIGVjYXAgPT0gKHVpbnQ2NF90KS0xKSB7CisJCQkJLyogUHJvbW90ZSBhbiBhdHRpdHVkZSBvZiB2aW9sZW5jZSB0byBhIEJJT1MgZW5naW5lZXIgdG9kYXkgKi8KKwkJCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgJWxseCByZXR1cm5zIGFsbCBvbmVzIVxuIgorCQkJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJCQkgICAgICBkcmhkLT5hZGRyZXNzLAorCQkJCSAgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJCQkgICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCQkJCSAgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQkJCWJpb3Nfd2FybmVkID0gMTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KIAkJfQogCiAJCWVudHJ5X2hlYWRlciA9ICgodm9pZCAqKWVudHJ5X2hlYWRlciArIGVudHJ5X2hlYWRlci0+bGVuZ3RoKTsKIAl9CiAJcmV0dXJuIDE7CisKK2ZhaWxlZDoKKyNpZmRlZiBDT05GSUdfRE1BUgorCWRtYXJfZGlzYWJsZWQgPSAxOworI2VuZGlmCisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgX19pbml0IGRldGVjdF9pbnRlbF9pb21tdSh2b2lkKQpAQCAtNjcwLDYgKzcyOSwxOCBAQAogCWludCBhZ2F3ID0gMDsKIAlpbnQgbXNhZ2F3ID0gMDsKIAorCWlmICghZHJoZC0+cmVnX2Jhc2VfYWRkcikgeworCQlpZiAoIWJpb3Nfd2FybmVkKSB7CisJCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgemVybyFcbiIKKwkJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKKwkJCWJpb3Nfd2FybmVkID0gMTsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpb21tdSA9IGt6YWxsb2Moc2l6ZW9mKCppb21tdSksIEdGUF9LRVJORUwpOwogCWlmICghaW9tbXUpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjg2LDEzICs3NTcsMTYgQEAKIAlpb21tdS0+ZWNhcCA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIERNQVJfRUNBUF9SRUcpOwogCiAJaWYgKGlvbW11LT5jYXAgPT0gKHVpbnQ2NF90KS0xICYmIGlvbW11LT5lY2FwID09ICh1aW50NjRfdCktMSkgewotCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLwotCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgJWxseCByZXR1cm5zIGFsbCBvbmVzIVxuIgotCQkgICAgICJCSU9TIHZlbmRvcjogJXM7IFZlcjogJXM7IFByb2R1Y3QgVmVyc2lvbjogJXNcbiIsCi0JCSAgICAgZHJoZC0+cmVnX2Jhc2VfYWRkciwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFTkRPUiksCi0JCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKKwkJaWYgKCFiaW9zX3dhcm5lZCkgeworCQkJLyogUHJvbW90ZSBhbiBhdHRpdHVkZSBvZiB2aW9sZW5jZSB0byBhIEJJT1MgZW5naW5lZXIgdG9kYXkgKi8KKwkJCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IERNQVIgcmVwb3J0ZWQgYXQgYWRkcmVzcyAlbGx4IHJldHVybnMgYWxsIG9uZXMhXG4iCisJCQkgICAgICJCSU9TIHZlbmRvcjogJXM7IFZlcjogJXM7IFByb2R1Y3QgVmVyc2lvbjogJXNcbiIsCisJCQkgICAgIGRyaGQtPnJlZ19iYXNlX2FkZHIsCisJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKKwkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisJCQliaW9zX3dhcm5lZCA9IDE7CisJCX0KIAkJZ290byBlcnJfdW5tYXA7CiAJfQogCkBAIC03MTUsNiArNzg5LDggQEAKIAlpb21tdS0+YWdhdyA9IGFnYXc7CiAJaW9tbXUtPm1zYWdhdyA9IG1zYWdhdzsKIAorCWlvbW11LT5ub2RlID0gLTE7CisKIAkvKiB0aGUgcmVnaXN0ZXJzIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgcGFnZSAqLwogCW1hcF9zaXplID0gbWF4X3QoaW50LCBlY2FwX21heF9pb3RsYl9vZmZzZXQoaW9tbXUtPmVjYXApLAogCQljYXBfbWF4X2ZhdWx0X3JlZ19vZmZzZXQoaW9tbXUtPmNhcCkpOwpAQCAtMTA1Niw2ICsxMTMyLDcgQEAKIGludCBkbWFyX2VuYWJsZV9xaShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KQogewogCXN0cnVjdCBxX2ludmFsICpxaTsKKwlzdHJ1Y3QgcGFnZSAqZGVzY19wYWdlOwogCiAJaWYgKCFlY2FwX3Fpcyhpb21tdS0+ZWNhcCkpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTA3MiwxMyArMTE0OSwxNiBAQAogCiAJcWkgPSBpb21tdS0+cWk7CiAKLQlxaS0+ZGVzYyA9ICh2b2lkICopKGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKSk7Ci0JaWYgKCFxaS0+ZGVzYykgeworCisJZGVzY19wYWdlID0gYWxsb2NfcGFnZXNfbm9kZShpb21tdS0+bm9kZSwgR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8sIDApOworCWlmICghZGVzY19wYWdlKSB7CiAJCWtmcmVlKHFpKTsKIAkJaW9tbXUtPnFpID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcWktPmRlc2MgPSBwYWdlX2FkZHJlc3MoZGVzY19wYWdlKTsKKwogCXFpLT5kZXNjX3N0YXR1cyA9IGttYWxsb2MoUUlfTEVOR1RIICogc2l6ZW9mKGludCksIEdGUF9BVE9NSUMpOwogCWlmICghcWktPmRlc2Nfc3RhdHVzKSB7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcWktPmRlc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggOGQ2MTU5NC4uZTU2ZjliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0yNzcsNiArMjc3LDcgQEAKIAogc3RydWN0IGRtYXJfZG9tYWluIHsKIAlpbnQJaWQ7CQkJLyogZG9tYWluIGlkICovCisJaW50CW5pZDsJCQkvKiBub2RlIGlkICovCiAJdW5zaWduZWQgbG9uZyBpb21tdV9ibXA7CS8qIGJpdG1hcCBvZiBpb21tdXMgdGhpcyBkb21haW4gdXNlcyovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7IAkvKiBhbGwgZGV2aWNlcycgbGlzdCAqLwpAQCAtMzg2LDMwICszODcsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaW9tbXVfZGV2aW5mb19jYWNoZTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaW9tbXVfaW92YV9jYWNoZTsKIAotc3RhdGljIGlubGluZSB2b2lkICppb21tdV9rbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCitzdGF0aWMgaW5saW5lIHZvaWQgKmFsbG9jX3BndGFibGVfcGFnZShpbnQgbm9kZSkKIHsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0Jdm9pZCAqdmFkZHI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqdmFkZHIgPSBOVUxMOwogCi0JLyogdHJ5aW5nIHRvIGF2b2lkIGxvdyBtZW1vcnkgaXNzdWVzICovCi0JZmxhZ3MgPSBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DOwotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwotCXZhZGRyID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZXAsIEdGUF9BVE9NSUMpOwotCWN1cnJlbnQtPmZsYWdzICY9ICh+UEZfTUVNQUxMT0MgfCBmbGFncyk7Ci0JcmV0dXJuIHZhZGRyOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2NfcGd0YWJsZV9wYWdlKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCXZvaWQgKnZhZGRyOwotCi0JLyogdHJ5aW5nIHRvIGF2b2lkIGxvdyBtZW1vcnkgaXNzdWVzICovCi0JZmxhZ3MgPSBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DOwotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwotCXZhZGRyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JY3VycmVudC0+ZmxhZ3MgJj0gKH5QRl9NRU1BTExPQyB8IGZsYWdzKTsKKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywgMCk7CisJaWYgKHBhZ2UpCisJCXZhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCXJldHVybiB2YWRkcjsKIH0KIApAQCAtNDIwLDcgKzQwNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2NfZG9tYWluX21lbSh2b2lkKQogewotCXJldHVybiBpb21tdV9rbWVtX2NhY2hlX2FsbG9jKGlvbW11X2RvbWFpbl9jYWNoZSk7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoaW9tbXVfZG9tYWluX2NhY2hlLCBHRlBfQVRPTUlDKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9kb21haW5fbWVtKHZvaWQgKnZhZGRyKQpAQCAtNDMwLDcgKzQxNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqIGFsbG9jX2RldmluZm9fbWVtKHZvaWQpCiB7Ci0JcmV0dXJuIGlvbW11X2ttZW1fY2FjaGVfYWxsb2MoaW9tbXVfZGV2aW5mb19jYWNoZSk7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoaW9tbXVfZGV2aW5mb19jYWNoZSwgR0ZQX0FUT01JQyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2RldmluZm9fbWVtKHZvaWQgKnZhZGRyKQpAQCAtNDQwLDcgKzQyNSw3IEBACiAKIHN0cnVjdCBpb3ZhICphbGxvY19pb3ZhX21lbSh2b2lkKQogewotCXJldHVybiBpb21tdV9rbWVtX2NhY2hlX2FsbG9jKGlvbW11X2lvdmFfY2FjaGUpOworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGlvbW11X2lvdmFfY2FjaGUsIEdGUF9BVE9NSUMpOwogfQogCiB2b2lkIGZyZWVfaW92YV9tZW0oc3RydWN0IGlvdmEgKmlvdmEpCkBAIC01ODksNyArNTc0LDggQEAKIAlyb290ID0gJmlvbW11LT5yb290X2VudHJ5W2J1c107CiAJY29udGV4dCA9IGdldF9jb250ZXh0X2FkZHJfZnJvbV9yb290KHJvb3QpOwogCWlmICghY29udGV4dCkgewotCQljb250ZXh0ID0gKHN0cnVjdCBjb250ZXh0X2VudHJ5ICopYWxsb2NfcGd0YWJsZV9wYWdlKCk7CisJCWNvbnRleHQgPSAoc3RydWN0IGNvbnRleHRfZW50cnkgKikKKwkJCQlhbGxvY19wZ3RhYmxlX3BhZ2UoaW9tbXUtPm5vZGUpOwogCQlpZiAoIWNvbnRleHQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTlVMTDsKQEAgLTczMiw3ICs3MTgsNyBAQAogCQlpZiAoIWRtYV9wdGVfcHJlc2VudChwdGUpKSB7CiAJCQl1aW50NjRfdCBwdGV2YWw7CiAKLQkJCXRtcF9wYWdlID0gYWxsb2NfcGd0YWJsZV9wYWdlKCk7CisJCQl0bXBfcGFnZSA9IGFsbG9jX3BndGFibGVfcGFnZShkb21haW4tPm5pZCk7CiAKIAkJCWlmICghdG1wX3BhZ2UpCiAJCQkJcmV0dXJuIE5VTEw7CkBAIC04NjgsNyArODU0LDcgQEAKIAlzdHJ1Y3Qgcm9vdF9lbnRyeSAqcm9vdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jcm9vdCA9IChzdHJ1Y3Qgcm9vdF9lbnRyeSAqKWFsbG9jX3BndGFibGVfcGFnZSgpOworCXJvb3QgPSAoc3RydWN0IHJvb3RfZW50cnkgKilhbGxvY19wZ3RhYmxlX3BhZ2UoaW9tbXUtPm5vZGUpOwogCWlmICghcm9vdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyNjMsNiArMTI0OSw3IEBACiAJaWYgKCFkb21haW4pCiAJCXJldHVybiBOVUxMOwogCisJZG9tYWluLT5uaWQgPSAtMTsKIAltZW1zZXQoJmRvbWFpbi0+aW9tbXVfYm1wLCAwLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCWRvbWFpbi0+ZmxhZ3MgPSAwOwogCkBAIC0xNDIwLDkgKzE0MDcsMTAgQEAKIAkJZG9tYWluLT5pb21tdV9zbm9vcGluZyA9IDA7CiAKIAlkb21haW4tPmlvbW11X2NvdW50ID0gMTsKKwlkb21haW4tPm5pZCA9IGlvbW11LT5ub2RlOwogCiAJLyogYWx3YXlzIGFsbG9jYXRlIHRoZSB0b3AgcGdkICovCi0JZG9tYWluLT5wZ2QgPSAoc3RydWN0IGRtYV9wdGUgKilhbGxvY19wZ3RhYmxlX3BhZ2UoKTsKKwlkb21haW4tPnBnZCA9IChzdHJ1Y3QgZG1hX3B0ZSAqKWFsbG9jX3BndGFibGVfcGFnZShkb21haW4tPm5pZCk7CiAJaWYgKCFkb21haW4tPnBnZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgZG9tYWluLT5wZ2QsIFBBR0VfU0laRSk7CkBAIC0xNTIzLDEyICsxNTExLDE1IEBACiAKIAkJLyogU2tpcCB0b3AgbGV2ZWxzIG9mIHBhZ2UgdGFibGVzIGZvcgogCQkgKiBpb21tdSB3aGljaCBoYXMgbGVzcyBhZ2F3IHRoYW4gZGVmYXVsdC4KKwkJICogVW5uZWNlc3NhcnkgZm9yIFBUIG1vZGUuCiAJCSAqLwotCQlmb3IgKGFnYXcgPSBkb21haW4tPmFnYXc7IGFnYXcgIT0gaW9tbXUtPmFnYXc7IGFnYXctLSkgewotCQkJcGdkID0gcGh5c190b192aXJ0KGRtYV9wdGVfYWRkcihwZ2QpKTsKLQkJCWlmICghZG1hX3B0ZV9wcmVzZW50KHBnZCkpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwotCQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAodHJhbnNsYXRpb24gIT0gQ09OVEVYVF9UVF9QQVNTX1RIUk9VR0gpIHsKKwkJCWZvciAoYWdhdyA9IGRvbWFpbi0+YWdhdzsgYWdhdyAhPSBpb21tdS0+YWdhdzsgYWdhdy0tKSB7CisJCQkJcGdkID0gcGh5c190b192aXJ0KGRtYV9wdGVfYWRkcihwZ2QpKTsKKwkJCQlpZiAoIWRtYV9wdGVfcHJlc2VudChwZ2QpKSB7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTE1NzcsNiArMTU2OCw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChpb21tdS0+c2VxX2lkLCAmZG9tYWluLT5pb21tdV9ibXApKSB7CiAJCWRvbWFpbi0+aW9tbXVfY291bnQrKzsKKwkJaWYgKGRvbWFpbi0+aW9tbXVfY291bnQgPT0gMSkKKwkJCWRvbWFpbi0+bmlkID0gaW9tbXUtPm5vZGU7CiAJCWRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKGRvbWFpbik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOwpAQCAtMTk5MSw2ICsxOTg0LDE2IEBACiAJICAgICAgICJJT01NVTogU2V0dGluZyBpZGVudGl0eSBtYXAgZm9yIGRldmljZSAlcyBbMHglTHggLSAweCVMeF1cbiIsCiAJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBzdGFydCwgZW5kKTsKIAkKKwlpZiAoZW5kIDwgc3RhcnQpIHsKKwkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgUk1SUiBlbmRzIGJlZm9yZSBpdCBzdGFydHMhXG4iCisJCQkiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAorCQkJZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkJZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKIAlpZiAoZW5kID4+IGFnYXdfdG9fd2lkdGgoZG9tYWluLT5hZ2F3KSkgewogCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBSTVJSIGV4Y2VlZHMgcGVybWl0dGVkIGFkZHJlc3Mgd2lkdGggKCVkIGJpdHMpXG4iCiAJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKQEAgLTMyMjgsNiArMzIzMSw5IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CiAKKwlpZiAoaW9tbXVfbm9fbWFwcGluZyhkZXYpKQorCQlyZXR1cm4gMDsKKwogCWRvbWFpbiA9IGZpbmRfZG9tYWluKHBkZXYpOwogCWlmICghZG9tYWluKQogCQlyZXR1cm4gMDsKQEAgLTM0NTUsNiArMzQ2MSw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJZG9tYWluLT5pZCA9IHZtX2RvbWlkKys7CisJZG9tYWluLT5uaWQgPSAtMTsKIAltZW1zZXQoJmRvbWFpbi0+aW9tbXVfYm1wLCAwLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCWRvbWFpbi0+ZmxhZ3MgPSBET01BSU5fRkxBR19WSVJUVUFMX01BQ0hJTkU7CiAKQEAgLTM0ODEsOSArMzQ4OCwxMCBAQAogCWRvbWFpbi0+aW9tbXVfY29oZXJlbmN5ID0gMDsKIAlkb21haW4tPmlvbW11X3Nub29waW5nID0gMDsKIAlkb21haW4tPm1heF9hZGRyID0gMDsKKwlkb21haW4tPm5pZCA9IC0xOwogCiAJLyogYWx3YXlzIGFsbG9jYXRlIHRoZSB0b3AgcGdkICovCi0JZG9tYWluLT5wZ2QgPSAoc3RydWN0IGRtYV9wdGUgKilhbGxvY19wZ3RhYmxlX3BhZ2UoKTsKKwlkb21haW4tPnBnZCA9IChzdHJ1Y3QgZG1hX3B0ZSAqKWFsbG9jX3BndGFibGVfcGFnZShkb21haW4tPm5pZCk7CiAJaWYgKCFkb21haW4tPnBnZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgZG9tYWluLT5wZ2QsIFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCAxNDg3YmYyLi44YjY1YTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTU5MCw3ICs1OTAsOCBAQAogCWlmICghaW9tbXUtPmlyX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8sIElOVFJfUkVNQVBfUEFHRV9PUkRFUik7CisJcGFnZXMgPSBhbGxvY19wYWdlc19ub2RlKGlvbW11LT5ub2RlLCBHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywKKwkJCQkgSU5UUl9SRU1BUF9QQUdFX09SREVSKTsKIAogCWlmICghcGFnZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgb2Ygb3JkZXIgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggY2U1MmVhMy4uYTQ5NDUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtNDMsNyArNDMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcGNpZV9wb3J0ZHJ2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY2llX3BvcnRkcnZfcG1fb3BzID0gewogCS5zdXNwZW5kCT0gcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcGNpZV9wb3J0X2RldmljZV9yZXN1bWUsCiAJLmZyZWV6ZQkJPSBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBjZDUwODJkLi45ZjNhZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTY0LDcgKzY0LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBDQVJEQlVTCi0JYm9vbCAiMzItYml0IENhcmRCdXMgc3VwcG9ydCIJCisJYm9vbCAiMzItYml0IENhcmRCdXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KQEAgLTg3LDggKzg3LDggQEAKIAlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQ2FyZEJ1cyBob3N0IGJyaWRnZXMuICBWaXJ0dWFsbHkKLQkgIGFsbCBtb2Rlcm4gUENNQ0lBIGJyaWRnZXMgYXJlIENhcmRCdXMgY29tcGF0aWJsZS4gIEEgImJyaWRnZSIgaXMgCi0JICB0aGUgaGFyZHdhcmUgaW5zaWRlIHlvdXIgY29tcHV0ZXIgdGhhdCBQQ01DSUEgY2FyZHMgYXJlIHBsdWdnZWQgCisJICBhbGwgbW9kZXJuIFBDTUNJQSBicmlkZ2VzIGFyZSBDYXJkQnVzIGNvbXBhdGlibGUuICBBICJicmlkZ2UiIGlzCisJICB0aGUgaGFyZHdhcmUgaW5zaWRlIHlvdXIgY29tcHV0ZXIgdGhhdCBQQ01DSUEgY2FyZHMgYXJlIHBsdWdnZWQKIAkgIGludG8uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCkBAIC0yMDgsNyArMjA4LDcgQEAKIAlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX1BYQSAmJiBQQ01DSUEKIAlkZXBlbmRzIG9uIChBUkNIX0xVQkJPQ0sgfHwgTUFDSF9NQUlOU1RPTkUgfHwgUFhBX1NIQVJQU0wgXAogCQkgICAgfHwgTUFDSF9BUk1DT1JFIHx8IEFSQ0hfUFhBX1BBTE0gfHwgVFJJWkVQU19QQ01DSUEgXAotCQkgICAgfHwgQVJDSF9WSVBFUiB8fCBBUkNIX1BYQV9FU0VSSUVTIHx8IE1BQ0hfU1RBUkdBVEUyKQorCQkgICAgfHwgQVJDT01fUENNQ0lBIHx8IEFSQ0hfUFhBX0VTRVJJRVMgfHwgTUFDSF9TVEFSR0FURTIpCiAJc2VsZWN0IFBDTUNJQV9TT0NfQ09NTU9OCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQWEEyeHggUENNQ0lBIGNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggMzgyOTM4My4uODNmZjgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTY3LDcgKzY3LDcgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9NQUlOU1RPTkUpCQkrPSBweGEyeHhfbWFpbnN0b25lLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfUFhBX1NIQVJQU0wpCQkrPSBweGEyeHhfc2hhcnBzbC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfQVJNQ09SRSkJCSs9IHB4YTJ4eF9jbV94Mnh4X2NzLm8KLXB4YTJ4eC1vYmotJChDT05GSUdfQVJDSF9WSVBFUikJCQkrPSBweGEyeHhfdmlwZXIubworcHhhMnh4LW9iai0kKENPTkZJR19BUkNPTV9QQ01DSUEpCQkrPSBweGEyeHhfdmlwZXIubwogcHhhMnh4LW9iai0kKENPTkZJR19UUklaRVBTX1BDTUNJQSkJCSs9IHB4YTJ4eF90cml6ZXBzNC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRDKQkJKz0gcHhhMnh4X3BhbG10Yy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKaW5kZXggYTczYjA0MC4uY2RmNTBmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICBpbWFnZSBudW1iZXIgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBpbWFnZS4gIHhsYXRlX3JvbV9hZGRyKCkKICAgICBjb252ZXJ0cyBhbiBpbWFnZS9vZmZzZXQgYWRkcmVzcyB0byBhbiBhYnNvbHV0ZSBvZmZzZXQgZnJvbSB0aGUKICAgICBST00ncyBiYXNlIGFkZHJlc3MuCi0gICAgCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB1X2ludCB4bGF0ZV9yb21fYWRkcih2b2lkIF9faW9tZW0gKmIsIHVfaW50IGFkZHIpCkBAIC04NSwxMCArODUsMTAgQEAKICAgICBUaGVzZSBhcmUgc2ltaWxhciB0byBzZXR1cF9jaXNfbWVtIGFuZCByZWxlYXNlX2Npc19tZW0gZm9yIDE2LWJpdAogICAgIGNhcmRzLiAgVGhlICJyZXN1bHQiIHRoYXQgaXMgdXNlZCBleHRlcm5hbGx5IGlzIHRoZSBjYl9jaXNfdmlydAogICAgIHBvaW50ZXIgaW4gdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHN0cnVjdHVyZS4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgY2JfcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICogcykKK3N0YXRpYyB2b2lkIGNiX3JlbGVhc2VfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlpZiAocy0+Y2JfY2lzX3ZpcnQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiY2JfcmVsZWFzZV9jaXNfbWVtKClcbiIpOwpAQCAtOTgsNyArOTgsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBjYl9zZXR1cF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICogcywgc3RydWN0IHJlc291cmNlICpyZXMpCitzdGF0aWMgaW50IGNiX3NldHVwX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXVuc2lnbmVkIGludCBzdGFydCwgc2l6ZTsKIApAQCAtMTI0LDEwICsxMjQsMTEgQEAKIAogICAgIFRoaXMgaXMgdXNlZCBieSB0aGUgQ0lTIHByb2Nlc3NpbmcgY29kZSB0byByZWFkIENJUyBpbmZvcm1hdGlvbgogICAgIGZyb20gYSBDYXJkQnVzIGRldmljZS4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotaW50IHJlYWRfY2JfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICogcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cikKK2ludCByZWFkX2NiX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sCisJCXZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMTgxLDcgKzE4Miw3IEBACiAgICAgY2JfYWxsb2MoKSBhbmQgY2JfZnJlZSgpIGFsbG9jYXRlIGFuZCBmcmVlIHRoZSBrZXJuZWwgZGF0YQogICAgIHN0cnVjdHVyZXMgZm9yIGEgQ2FyZGJ1cyBkZXZpY2UsIGFuZCBoYW5kbGUgdGhlIGxvd2VzdCBsZXZlbCBQQ0kKICAgICBkZXZpY2Ugc2V0dXAgaXNzdWVzLgotICAgIAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCBjYXJkYnVzX2NvbmZpZ19pcnFfYW5kX2NscyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgaXJxKQpAQCAtMjE0LDE0ICsyMTUsMTQgQEAKIAl9CiB9CiAKLWludCBfX3JlZiBjYl9hbGxvYyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqIHMpCitpbnQgX19yZWYgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHMtPmNiX2Rldi0+c3Vib3JkaW5hdGU7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAl1bnNpZ25lZCBpbnQgbWF4LCBwYXNzOwogCiAJcy0+ZnVuY3Rpb25zID0gcGNpX3NjYW5fc2xvdChidXMsIFBDSV9ERVZGTigwLCAwKSk7Ci0vLwlwY2liaW9zX2ZpeHVwX2J1cyhidXMpOworLyoJcGNpYmlvc19maXh1cF9idXMoYnVzKTsgKi8KIAogCW1heCA9IGJ1cy0+c2Vjb25kYXJ5OwogCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspCkBAIC0yNDgsNyArMjQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjYl9mcmVlKHN0cnVjdCBwY21jaWFfc29ja2V0ICogcykKK3ZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gcy0+Y2JfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDhjMWI3M2MuLjI1YjFjZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAgICAgTG93LWxldmVsIGZ1bmN0aW9ucyB0byByZWFkIGFuZCB3cml0ZSBDSVMgbWVtb3J5LiAgSSB0aGluayB0aGUKICAgICB3cml0ZSByb3V0aW5lIGlzIG9ubHkgdXNlZnVsIGZvciB3cml0aW5nIG9uZS1ieXRlIHJlZ2lzdGVycy4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIC8qIEJpdHMgaW4gYXR0ciBmaWVsZCAqLwpAQCAtMTM3LDcgKzEzNyw3IEBACiB7CiAgICAgdm9pZCBfX2lvbWVtICpzeXMsICplbmQ7CiAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcHRyOwotICAgIAorCiAgICAgZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlYWRfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKICAgICBpZiAoYXR0ciAmIElTX0lORElSRUNUKSB7CkBAIC0yMDMsNyArMjAzLDcgQEAKIHsKICAgICB2b2lkIF9faW9tZW0gKnN5cywgKmVuZDsKICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBwdHI7Ci0gICAgCisKICAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfd3JpdGVfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKICAgICBpZiAoYXR0ciAmIElTX0lORElSRUNUKSB7CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgcmVhZF9jaXNfbWVtLCB3aXRoIHRoZSBzYW1lIGludGVyZmFjZSwKICAgICBidXQgd2hpY2ggY2FjaGVzIGluZm9ybWF0aW9uLCBmb3IgY2FyZHMgd2hvc2UgQ0lTIG1heSBub3QgYmUKICAgICByZWFkYWJsZSBhbGwgdGhlIHRpbWUuCi0gICAgCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCByZWFkX2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCkBAIC0zNDIsNyArMzQyLDcgQEAKIAogICAgIFRoaXMgdmVyaWZpZXMgaWYgdGhlIENJUyBvZiBhIGNhcmQgbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBDSVMKICAgICBjYWNoZS4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIGludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQpAQCAtMzgxLDcgKzM4MSw3IEBACiAKICAgICBGb3IgcmVhbGx5IGJhZCBjYXJkcywgd2UgcHJvdmlkZSBhIGZhY2lsaXR5IGZvciB1cGxvYWRpbmcgYQogICAgIHJlcGxhY2VtZW50IENJUy4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIGludCBwY21jaWFfcmVwbGFjZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCkBAIC00MDYsNyArNDA2LDcgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgVGhlIGhpZ2gtbGV2ZWwgQ0lTIHR1cGxlIHNlcnZpY2VzCi0gICAgCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiB0eXBlZGVmIHN0cnVjdCB0dXBsZV9mbGFncyB7CkBAIC00MjEsOCArNDIxLDYgQEAKICNkZWZpbmUgTUZDX0ZOKGYpCSgoKHR1cGxlX2ZsYWdzICopKCYoZikpKS0+bWZjX2ZuKQogI2RlZmluZSBTUEFDRShmKQkoKCh0dXBsZV9mbGFncyAqKSgmKGYpKSktPnNwYWNlKQogCi1pbnQgcGNjYXJkX2dldF9uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuYywgdHVwbGVfdCAqdHVwbGUpOwotCiBpbnQgcGNjYXJkX2dldF9maXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB0dXBsZV90ICp0dXBsZSkKIHsKICAgICBpZiAoIXMpCkBAIC01MjMsMTAgKzUyMSwxMSBAQAogCQlvZnMrKzsgY29udGludWU7CiAJICAgIH0KIAl9Ci0JCisKIAkvKiBFbmQgb2YgY2hhaW4/ICBGb2xsb3cgbG9uZyBsaW5rIGlmIHBvc3NpYmxlICovCiAJaWYgKGxpbmtbMF0gPT0gQ0lTVFBMX0VORCkgewotCSAgICBpZiAoKG9mcyA9IGZvbGxvd19saW5rKHMsIHR1cGxlKSkgPCAwKQorCSAgICBvZnMgPSBmb2xsb3dfbGluayhzLCB0dXBsZSk7CisJICAgIGlmIChvZnMgPCAwKQogCQlyZXR1cm4gLUVOT1NQQzsKIAkgICAgYXR0ciA9IFNQQUNFKHR1cGxlLT5GbGFncyk7CiAJICAgIHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcywgMiwgbGluayk7CkBAIC01NzgsNyArNTc3LDcgQEAKIAl9IGVsc2UKIAkgICAgaWYgKHR1cGxlLT5EZXNpcmVkVHVwbGUgPT0gUkVUVVJOX0ZJUlNUX1RVUExFKQogCQlicmVhazsKLQkKKwogCWlmIChsaW5rWzBdID09IHR1cGxlLT5EZXNpcmVkVHVwbGUpCiAJICAgIGJyZWFrOwogCW9mcyArPSBsaW5rWzFdICsgMjsKQEAgLTU4Nyw3ICs1ODYsNyBAQAogCWRldl9kYmcoJnMtPmRldiwgImNzOiBvdmVycnVuIGluIHBjbWNpYV9nZXRfbmV4dF90dXBsZVxuIik7CiAJcmV0dXJuIC1FTk9TUEM7CiAgICAgfQotICAgIAorCiAgICAgdHVwbGUtPlR1cGxlQ29kZSA9IGxpbmtbMF07CiAgICAgdHVwbGUtPlR1cGxlTGluayA9IGxpbmtbMV07CiAgICAgdHVwbGUtPkNJU09mZnNldCA9IG9mcyArIDI7CkBAIC02MjMsNyArNjIyLDcgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgUGFyc2luZyByb3V0aW5lcyBmb3IgaW5kaXZpZHVhbCB0dXBsZXMKLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfZGV2aWNlKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfZGV2aWNlX3QgKmRldmljZSkKQEAgLTYzNywyNiArNjM2LDM3IEBACiAKICAgICBkZXZpY2UtPm5kZXYgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBDSVNUUExfTUFYX0RFVklDRVM7IGkrKykgewotCQotCWlmICgqcCA9PSAweGZmKSBicmVhazsKKworCWlmICgqcCA9PSAweGZmKQorCQlicmVhazsKIAlkZXZpY2UtPmRldltpXS50eXBlID0gKCpwID4+IDQpOwogCWRldmljZS0+ZGV2W2ldLndwID0gKCpwICYgMHgwOCkgPyAxIDogMDsKIAlzd2l0Y2ggKCpwICYgMHgwNykgewotCWNhc2UgMDogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAwOyAgIGJyZWFrOwotCWNhc2UgMTogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyNTA7IGJyZWFrOwotCWNhc2UgMjogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyMDA7IGJyZWFrOwotCWNhc2UgMzogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxNTA7IGJyZWFrOwotCWNhc2UgNDogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxMDA7IGJyZWFrOworCWNhc2UgMDoKKwkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gMjUwOworCQlicmVhazsKKwljYXNlIDI6CisJCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gMjAwOworCQlicmVhazsKKwljYXNlIDM6CisJCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gMTUwOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gMTAwOworCQlicmVhazsKIAljYXNlIDc6Ci0JICAgIGlmICgrK3AgPT0gcSkKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCSAgICBkZXZpY2UtPmRldltpXS5zcGVlZCA9IFNQRUVEX0NWVCgqcCk7Ci0JICAgIHdoaWxlICgqcCAmIDB4ODApCiAJCWlmICgrK3AgPT0gcSkKIAkJCXJldHVybiAtRUlOVkFMOwotCSAgICBicmVhazsKKwkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSBTUEVFRF9DVlQoKnApOworCQl3aGlsZSAoKnAgJiAweDgwKQorCQkJaWYgKCsrcCA9PSBxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKIAlkZWZhdWx0OgotCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCsrcCA9PSBxKQpAQCAtNjcxLDcgKzY4MSw3IEBACiAJaWYgKCsrcCA9PSBxKQogCQlicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzA2LDkgKzcxNiw5IEBACiB7CiAgICAgdV9jaGFyICpwOwogICAgIGludCBpOwotICAgIAorCiAgICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIAorCiAgICAgbGluay0+bmZuID0gKnA7IHArKzsKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8PSBsaW5rLT5uZm4qNSkKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTczNywxMSArNzQ3LDEzIEBACiAJbnMrKzsKIAlmb3IgKDs7KSB7CiAJICAgIHNbaisrXSA9ICgqcCA9PSAweGZmKSA/ICdcMCcgOiAqcDsKLQkgICAgaWYgKCgqcCA9PSAnXDAnKSB8fCAoKnAgPT0gMHhmZikpIGJyZWFrOworCSAgICBpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAweGZmKSkKKwkJICAgIGJyZWFrOwogCSAgICBpZiAoKytwID09IHEpCiAJCSAgICByZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKCgqcCA9PSAweGZmKSB8fCAoKytwID09IHEpKSBicmVhazsKKwlpZiAoKCpwID09IDB4ZmYpIHx8ICgrK3AgPT0gcSkpCisJCWJyZWFrOwogICAgIH0KICAgICBpZiAoZm91bmQpIHsKIAkqZm91bmQgPSBuczsKQEAgLTc1NiwxMCArNzY4LDEwIEBACiBzdGF0aWMgaW50IHBhcnNlX3ZlcnNfMSh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX3ZlcnNfMV90ICp2ZXJzXzEpCiB7CiAgICAgdV9jaGFyICpwLCAqcTsKLSAgICAKKwogICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKICAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47Ci0gICAgCisKICAgICB2ZXJzXzEtPm1ham9yID0gKnA7IHArKzsKICAgICB2ZXJzXzEtPm1pbm9yID0gKnA7IHArKzsKICAgICBpZiAocCA+PSBxKQpAQCAtNzc0LDEwICs3ODYsMTAgQEAKIHN0YXRpYyBpbnQgcGFyc2VfYWx0c3RyKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfYWx0c3RyX3QgKmFsdHN0cikKIHsKICAgICB1X2NoYXIgKnAsICpxOwotICAgIAorCiAgICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwogICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKLSAgICAKKwogICAgIHJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIENJU1RQTF9NQVhfQUxUU1RSX1NUUklOR1MsCiAJCQkgYWx0c3RyLT5zdHIsIGFsdHN0ci0+b2ZzLCAmYWx0c3RyLT5ucyk7CiB9CkBAIC03OTMsNyArODA1LDggQEAKICAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CiAKICAgICBmb3IgKG5pZCA9IDA7IG5pZCA8IENJU1RQTF9NQVhfREVWSUNFUzsgbmlkKyspIHsKLQlpZiAocCA+IHEtMikgYnJlYWs7CisJaWYgKHAgPiBxLTIpCisJCWJyZWFrOwogCWplZGVjLT5pZFtuaWRdLm1mciA9IHBbMF07CiAJamVkZWMtPmlkW25pZF0uaW5mbyA9IHBbMV07CiAJcCArPSAyOwpAQCAtODcxLDcgKzg4NCw3IEBACiAKICAgICBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGFyZSBhbGwgdXNlZCB0byBwYXJzZSB0aGUgbmlnaHRtYXJpc2gKICAgICBjb25maWcgdGFibGUgZW50cmllcy4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB1X2NoYXIgKnBhcnNlX3Bvd2VyKHVfY2hhciAqcCwgdV9jaGFyICpxLApAQCAtODgwLDE3ICs4OTMsMjAgQEAKICAgICBpbnQgaTsKICAgICB1X2ludCBzY2FsZTsKIAotICAgIGlmIChwID09IHEpIHJldHVybiBOVUxMOworICAgIGlmIChwID09IHEpCisJICAgIHJldHVybiBOVUxMOwogICAgIHB3ci0+cHJlc2VudCA9ICpwOwogICAgIHB3ci0+ZmxhZ3MgPSAwOwogICAgIHArKzsKICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQogCWlmIChwd3ItPnByZXNlbnQgJiAoMTw8aSkpIHsKLQkgICAgaWYgKHAgPT0gcSkgcmV0dXJuIE5VTEw7CisJICAgIGlmIChwID09IHEpCisJCSAgICByZXR1cm4gTlVMTDsKIAkgICAgcHdyLT5wYXJhbVtpXSA9IFBPV0VSX0NWVCgqcCk7CiAJICAgIHNjYWxlID0gUE9XRVJfU0NBTEUoKnApOwogCSAgICB3aGlsZSAoKnAgJiAweDgwKSB7Ci0JCWlmICgrK3AgPT0gcSkgcmV0dXJuIE5VTEw7CisJCWlmICgrK3AgPT0gcSkKKwkJCXJldHVybiBOVUxMOwogCQlpZiAoKCpwICYgMHg3ZikgPCAxMDApCiAJCSAgICBwd3ItPnBhcmFtW2ldICs9ICgqcCAmIDB4N2YpICogc2NhbGUgLyAxMDA7CiAJCWVsc2UgaWYgKCpwID09IDB4N2QpCkBAIC05MTQsMjQgKzkzMCwyOCBAQAogewogICAgIHVfY2hhciBzY2FsZTsKIAotICAgIGlmIChwID09IHEpIHJldHVybiBOVUxMOworICAgIGlmIChwID09IHEpCisJICAgIHJldHVybiBOVUxMOwogICAgIHNjYWxlID0gKnA7CiAgICAgaWYgKChzY2FsZSAmIDMpICE9IDMpIHsKLQlpZiAoKytwID09IHEpIHJldHVybiBOVUxMOworCWlmICgrK3AgPT0gcSkKKwkJcmV0dXJuIE5VTEw7CiAJdGltaW5nLT53YWl0ID0gU1BFRURfQ1ZUKCpwKTsKIAl0aW1pbmctPndhaXRzY2FsZSA9IGV4cG9uZW50W3NjYWxlICYgM107CiAgICAgfSBlbHNlCiAJdGltaW5nLT53YWl0ID0gMDsKICAgICBzY2FsZSA+Pj0gMjsKICAgICBpZiAoKHNjYWxlICYgNykgIT0gNykgewotCWlmICgrK3AgPT0gcSkgcmV0dXJuIE5VTEw7CisJaWYgKCsrcCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKIAl0aW1pbmctPnJlYWR5ID0gU1BFRURfQ1ZUKCpwKTsKIAl0aW1pbmctPnJkeXNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiA3XTsKICAgICB9IGVsc2UKIAl0aW1pbmctPnJlYWR5ID0gMDsKICAgICBzY2FsZSA+Pj0gMzsKICAgICBpZiAoc2NhbGUgIT0gNykgewotCWlmICgrK3AgPT0gcSkgcmV0dXJuIE5VTEw7CisJaWYgKCsrcCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKIAl0aW1pbmctPnJlc2VydmVkID0gU1BFRURfQ1ZUKCpwKTsKIAl0aW1pbmctPnJzdnNjYWxlID0gZXhwb25lbnRbc2NhbGVdOwogICAgIH0gZWxzZQpAQCAtOTQ2LDcgKzk2Niw4IEBACiB7CiAgICAgaW50IGksIGosIGJzeiwgbHN6OwogCi0gICAgaWYgKHAgPT0gcSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKHAgPT0gcSkKKwkgICAgcmV0dXJuIE5VTEw7CiAgICAgaW8tPmZsYWdzID0gKnA7CiAKICAgICBpZiAoISgqcCAmIDB4ODApKSB7CkBAIC05NTUsMjQgKzk3NiwyOSBAQAogCWlvLT53aW5bMF0ubGVuID0gKDEgPDwgKGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSk7CiAJcmV0dXJuIHArMTsKICAgICB9Ci0gICAgCi0gICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gTlVMTDsKKworICAgIGlmICgrK3AgPT0gcSkKKwkgICAgcmV0dXJuIE5VTEw7CiAgICAgaW8tPm53aW4gPSAoKnAgJiAweDBmKSArIDE7CiAgICAgYnN6ID0gKCpwICYgMHgzMCkgPj4gNDsKLSAgICBpZiAoYnN6ID09IDMpIGJzeisrOworICAgIGlmIChic3ogPT0gMykKKwkgICAgYnN6Kys7CiAgICAgbHN6ID0gKCpwICYgMHhjMCkgPj4gNjsKLSAgICBpZiAobHN6ID09IDMpIGxzeisrOworICAgIGlmIChsc3ogPT0gMykKKwkgICAgbHN6Kys7CiAgICAgcCsrOwotICAgIAorCiAgICAgZm9yIChpID0gMDsgaSA8IGlvLT5ud2luOyBpKyspIHsKIAlpby0+d2luW2ldLmJhc2UgPSAwOwogCWlvLT53aW5baV0ubGVuID0gMTsKIAlmb3IgKGogPSAwOyBqIDwgYnN6OyBqKyssIHArKykgewotCSAgICBpZiAocCA9PSBxKSByZXR1cm4gTlVMTDsKKwkgICAgaWYgKHAgPT0gcSkKKwkJICAgIHJldHVybiBOVUxMOwogCSAgICBpby0+d2luW2ldLmJhc2UgKz0gKnAgPDwgKGoqOCk7CiAJfQogCWZvciAoaiA9IDA7IGogPCBsc3o7IGorKywgcCsrKSB7Ci0JICAgIGlmIChwID09IHEpIHJldHVybiBOVUxMOworCSAgICBpZiAocCA9PSBxKQorCQkgICAgcmV0dXJuIE5VTEw7CiAJICAgIGlvLT53aW5baV0ubGVuICs9ICpwIDw8IChqKjgpOwogCX0KICAgICB9CkBAIC05ODYsMjcgKzEwMTIsMzIgQEAKICAgICBpbnQgaSwgaiwgYXN6LCBsc3osIGhhc19oYTsKICAgICB1X2ludCBsZW4sIGNhLCBoYTsKIAotICAgIGlmIChwID09IHEpIHJldHVybiBOVUxMOworICAgIGlmIChwID09IHEpCisJICAgIHJldHVybiBOVUxMOwogCiAgICAgbWVtLT5ud2luID0gKCpwICYgMHgwNykgKyAxOwogICAgIGxzeiA9ICgqcCAmIDB4MTgpID4+IDM7CiAgICAgYXN6ID0gKCpwICYgMHg2MCkgPj4gNTsKICAgICBoYXNfaGEgPSAoKnAgJiAweDgwKTsKLSAgICBpZiAoKytwID09IHEpIHJldHVybiBOVUxMOwotICAgIAorICAgIGlmICgrK3AgPT0gcSkKKwkgICAgcmV0dXJuIE5VTEw7CisKICAgICBmb3IgKGkgPSAwOyBpIDwgbWVtLT5ud2luOyBpKyspIHsKIAlsZW4gPSBjYSA9IGhhID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgbHN6OyBqKyssIHArKykgewotCSAgICBpZiAocCA9PSBxKSByZXR1cm4gTlVMTDsKKwkgICAgaWYgKHAgPT0gcSkKKwkJICAgIHJldHVybiBOVUxMOwogCSAgICBsZW4gKz0gKnAgPDwgKGoqOCk7CiAJfQogCWZvciAoaiA9IDA7IGogPCBhc3o7IGorKywgcCsrKSB7Ci0JICAgIGlmIChwID09IHEpIHJldHVybiBOVUxMOworCSAgICBpZiAocCA9PSBxKQorCQkgICAgcmV0dXJuIE5VTEw7CiAJICAgIGNhICs9ICpwIDw8IChqKjgpOwogCX0KIAlpZiAoaGFzX2hhKQogCSAgICBmb3IgKGogPSAwOyBqIDwgYXN6OyBqKyssIHArKykgewotCQlpZiAocCA9PSBxKSByZXR1cm4gTlVMTDsKKwkJaWYgKHAgPT0gcSkKKwkJCXJldHVybiBOVUxMOwogCQloYSArPSAqcCA8PCAoaio4KTsKIAkgICAgfQogCW1lbS0+d2luW2ldLmxlbiA9IGxlbiA8PCA4OwpAQCAtMTA5NSw3ICsxMTI2LDcgQEAKIAllbnRyeS0+dGltaW5nLnJlYWR5ID0gMDsKIAllbnRyeS0+dGltaW5nLnJlc2VydmVkID0gMDsKICAgICB9Ci0gICAgCisKICAgICAvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KICAgICBpZiAoZmVhdHVyZXMgJiAweDA4KSB7CiAJcCA9IHBhcnNlX2lvKHAsIHEsICZlbnRyeS0+aW8pOwpAQCAtMTEwMyw3ICsxMTM0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPmlvLm53aW4gPSAwOwotICAgIAorCiAgICAgLyogSW50ZXJydXB0IG9wdGlvbnMgKi8KICAgICBpZiAoZmVhdHVyZXMgJiAweDEwKSB7CiAJcCA9IHBhcnNlX2lycShwLCBxLCAmZW50cnktPmlycSk7CkBAIC0xMTUzLDcgKzExODQsNyBAQAogICAgIH0KIAogICAgIGVudHJ5LT5zdWJ0dXBsZXMgPSBxLXA7Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTE3Niw3ICsxMjA3LDcgQEAKIHN0YXRpYyBpbnQgcGFyc2VfY29uZmlnX2NiKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfY29uZmlnX3QgKmNvbmZpZykKIHsKICAgICB1X2NoYXIgKnA7Ci0gICAgCisKICAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CiAgICAgaWYgKCgqcCAhPSAzKSB8fCAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDYpKQogCXJldHVybiAtRUlOVkFMOwpAQCAtMTIzMSw3ICsxMjYyLDcgQEAKIAllbnRyeS0+aW8gPSAqcDsgcCsrOwogICAgIH0gZWxzZQogCWVudHJ5LT5pbyA9IDA7Ci0gICAgCisKICAgICAvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLwogICAgIGlmIChmZWF0dXJlcyAmIDB4MTApIHsKIAlwID0gcGFyc2VfaXJxKHAsIHEsICZlbnRyeS0+aXJxKTsKQEAgLTEyNjQsNyArMTI5NSw3IEBACiAgICAgfQogCiAgICAgZW50cnktPnN1YnR1cGxlcyA9IHEtcDsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjgxLDcgKzEzMTIsOCBAQAogICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKIAogICAgIGZvciAobiA9IDA7IG4gPCBDSVNUUExfTUFYX0RFVklDRVM7IG4rKykgewotCWlmIChwID4gcS02KSBicmVhazsKKwlpZiAocCA+IHEtNikKKwkJYnJlYWs7CiAJZ2VvLT5nZW9bbl0uYnVzd2lkdGggPSBwWzBdOwogCWdlby0+Z2VvW25dLmVyYXNlX2Jsb2NrID0gMSA8PCAocFsxXS0xKTsKIAlnZW8tPmdlb1tuXS5yZWFkX2Jsb2NrICA9IDEgPDwgKHBbMl0tMSk7CkBAIC0xMzAyLDEzICsxMzM0LDEzIEBACiAKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEwKQogCXJldHVybiAtRUlOVkFMOwotICAgIAorCiAgICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7CiAgICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwogCiAgICAgdjItPnZlcnMgPSBwWzBdOwogICAgIHYyLT5jb21wbHkgPSBwWzFdOwotICAgIHYyLT5kaW5kZXggPSBnZXRfdW5hbGlnbmVkX2xlMTYocCArMiApOworICAgIHYyLT5kaW5kZXggPSBnZXRfdW5hbGlnbmVkX2xlMTYocCArIDIpOwogICAgIHYyLT52c3BlYzggPSBwWzZdOwogICAgIHYyLT52c3BlYzkgPSBwWzddOwogICAgIHYyLT5uaGRyID0gcFs4XTsKQEAgLTEzMjIsNyArMTM1NCw3IEBACiB7CiAgICAgdV9jaGFyICpwLCAqcTsKICAgICBpbnQgaTsKLSAgICAKKwogICAgIHAgPSB0dXBsZS0+VHVwbGVEYXRhOwogICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKICAgICBpZiAocCA9PSBxKQpAQCAtMTMzMiw3ICsxMzY0LDggQEAKIAkgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAlvcmctPmRlc2NbaV0gPSAqcDsKLQlpZiAoKnAgPT0gJ1wwJykgYnJlYWs7CisJaWYgKCpwID09ICdcMCcpCisJCWJyZWFrOwogCWlmICgrK3AgPT0gcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfQpAQCAtMTM2Myw3ICsxMzk2LDcgQEAKIGludCBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewogICAgIGludCByZXQgPSAwOwotICAgIAorCiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPiB0dXBsZS0+VHVwbGVEYXRhTWF4KQogCXJldHVybiAtRUlOVkFMOwogICAgIHN3aXRjaCAodHVwbGUtPlR1cGxlQ29kZSkgewpAQCAtMTQ0OCw3ICsxNDgxLDcgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgVGhpcyBpcyB1c2VkIGludGVybmFsbHkgYnkgQ2FyZCBTZXJ2aWNlcyB0byBsb29rIHVwIENJUyBzdHVmZi4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIGludCBwY2NhcmRfcmVhZF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCBjaXNkYXRhX3QgY29kZSwgdm9pZCAqcGFyc2UpCkBAIC0xNTUwLDcgKzE1ODMsNyBAQAogICAgIGNoZWNrcyBpbmNsdWRlIG1ha2luZyBzdXJlIHNldmVyYWwgY3JpdGljYWwgdHVwbGVzIGFyZSBwcmVzZW50IGFuZAogICAgIHZhbGlkOyBzZWVpbmcgaWYgdGhlIHRvdGFsIG51bWJlciBvZiB0dXBsZXMgaXMgcmVhc29uYWJsZTsgYW5kCiAgICAgbG9va2luZyBmb3IgdHVwbGVzIHRoYXQgdXNlIHJlc2VydmVkIGNvZGVzLgotICAgIAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IDc5MGFmODcuLjZkNmY4MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSk7CiAKIAotc3RydWN0IHBjbWNpYV9zb2NrZXQgKiBwY21jaWFfZ2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQorc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X2RldmljZSgmc2t0LT5kZXYpOwogCWlmICghZGV2KQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCXB1dF9kZXZpY2UoJnNrdC0+ZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXJldHVybiAoc2t0KTsKKwlyZXR1cm4gc2t0OwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X3NvY2tldCk7CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogRVhQT1JUX1NZTUJPTChwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQpOwogCiAKLXN0cnVjdCBwY21jaWFfc29ja2V0ICogcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIodW5zaWduZWQgaW50IG5yKQorc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0X2J5X25yKHVuc2lnbmVkIGludCBucikKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKIApAQCAtNzM2LDcgKzczNiw3IEBACiAvKiByZWdpc3RlciBwY21jaWFfY2FsbGJhY2sgKi8KIGludCBwY2NhcmRfcmVnaXN0ZXJfcGNtY2lhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrICpjKQogewotICAgICAgICBpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCS8qIHMtPnNrdF9tdXRleCBhbHNvIHByb3RlY3RzIHMtPmNhbGxiYWNrICovCiAJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKQEAgLTg0OCw3ICs4NDgsNyBAQAogaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWludCByZXQ7Ci0gICAgCisKIAlkZXZfZGJnKCZza3QtPmRldiwgIndha2luZyB1cCBzb2NrZXRcbiIpOwogCiAJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwpAQCAtODc2LDcgKzg3Niw3IEBACiBpbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlpbnQgcmV0OwotICAgIAorCiAJZGV2X2RiZygmc2t0LT5kZXYsICJ1c2VyIGVqZWN0IHJlcXVlc3RcbiIpOwogCiAJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggMDU4OTNkNC4uMWE0YTNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJCSAgICAgICAiZnVuY3Rpb25cbiIsIHBfZHJ2LT5kcnYubmFtZSk7CiAKIAl3aGlsZSAoZGlkICYmIGRpZC0+bWF0Y2hfZmxhZ3MpIHsKLQkJZm9yIChpPTA7IGk8NDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWlmICghZGlkLT5wcm9kX2lkW2ldKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlfX3UxNiBtYXRjaF9mbGFncywgbWFuZl9pZCwgY2FyZF9pZDsKIAlfX3U4IGZ1bmNfaWQsIGZ1bmN0aW9uLCBkZXZpY2Vfbm87CiAJX191MzIgcHJvZF9pZF9oYXNoWzRdID0gezAsIDAsIDAsIDB9OwotCWludCBmaWVsZHM9MDsKKwlpbnQgZmllbGRzID0gMDsKIAlpbnQgcmV0dmFsID0gMDsKIAogCWZpZWxkcyA9IHNzY2FuZihidWYsICIlaHggJWh4ICVoeCAlaGh4ICVoaHggJWhoeCAleCAleCAleCAleCIsCkBAIC0yMTQsNyArMjE0LDcgQEAKIAogLyogcGNtY2lhX2RldmljZSBoYW5kbGluZyAqLwogCi1zdHJ1Y3QgcGNtY2lhX2RldmljZSAqIHBjbWNpYV9nZXRfZGV2KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3N0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJc3RydWN0IGRldmljZSAqdG1wX2RldjsKIAl0bXBfZGV2ID0gZ2V0X2RldmljZSgmcF9kZXYtPmRldik7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcGNtY2lhX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICogZGV2KQorc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwpAQCAtMzI1LDcgKzMyNSw3IEBACiBwdXRfZGV2OgogCWlmIChyZXQpCiAJCXB1dF9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0zNTQsNyArMzU0LDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCQlwX2Rldi0+X3JlbW92ZWQ9MTsKKwkJcF9kZXYtPl9yZW1vdmVkID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBkZXZpY2VcbiIpOwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHBjbWNpYV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHBjbWNpYV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKHBfZHJ2LT5yZW1vdmUpCi0JICAgICAgIAlwX2Rydi0+cmVtb3ZlKHBfZGV2KTsKKwkJcF9kcnYtPnJlbW92ZShwX2Rldik7CiAKIAlwX2Rldi0+ZGV2X25vZGUgPSBOVUxMOwogCkBAIC00OTksNyArNDk5LDcgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VfYWRkX2xvY2spOwogCi1zdHJ1Y3QgcGNtY2lhX2RldmljZSAqIHBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCitzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsICp0bXBfZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01NDUsOCArNTQ1LDggQEAKIAkgKiBOb3RlIHRoYXQgdGhpcyBpcyBzZXJpYWxpemVkIGJ5IHRoZSBkZXZpY2VfYWRkX2xvY2ssIHNvIHRoYXQKIAkgKiBvbmx5IG9uZSBzdWNoIHN0cnVjdCB3aWxsIGJlIGNyZWF0ZWQuCiAJICovCi0gICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KQotICAgICAgICAgICAgICAgIGlmIChwX2Rldi0+ZnVuYyA9PSB0bXBfZGV2LT5mdW5jKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpCisJCWlmIChwX2Rldi0+ZnVuYyA9PSB0bXBfZGV2LT5mdW5jKSB7CiAJCQlwX2Rldi0+ZnVuY3Rpb25fY29uZmlnID0gdG1wX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCQkJcF9kZXYtPmlvID0gdG1wX2Rldi0+aW87CiAJCQlwX2Rldi0+aXJxID0gdG1wX2Rldi0+aXJxOwpAQCAtNjI3LDEwICs2MjcsMTAgQEAKIAkJbm9fZnVuY3MgPSAxOwogCXMtPmZ1bmN0aW9ucyA9IG5vX2Z1bmNzOwogCi0JZm9yIChpPTA7IGkgPCBub19mdW5jczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBub19mdW5jczsgaSsrKQogCQlwY21jaWFfZGV2aWNlX2FkZChzLCBpKTsKIAotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTc1Niw3ICs3NTYsNyBAQAogIHJlbGVhc2U6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19QQ01DSUFfTE9BRF9DSVMgKi8KQEAgLTg1Miw3ICs4NTIsNyBAQAogCiAJaWYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0FOT05ZTU9VUykgewogCQlpbnQgaTsKLQkJZm9yIChpPTA7IGk8NDsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQkJaWYgKGRldi0+cHJvZF9pZFtpXSkKIAkJCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+aGFzX21hbmZfaWQgfHwgZGV2LT5oYXNfY2FyZF9pZCB8fCBkZXYtPmhhc19mdW5jX2lkKQpAQCAtODY1LDkgKzg2NSwxMCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGNtY2lhX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydikgewotCXN0cnVjdCBwY21jaWFfZGV2aWNlICogcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7Ci0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKiBwX2RydiA9IHRvX3BjbWNpYV9kcnYoZHJ2KTsKK3N0YXRpYyBpbnQgcGNtY2lhX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOworCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IHRvX3BjbWNpYV9kcnYoZHJ2KTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkID0gcF9kcnYtPmlkX3RhYmxlOwogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkOwogCkBAIC05MTcsNyArOTE4LDcgQEAKIAlwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAogCS8qIGNhbGN1bGF0ZSBoYXNoZXMgKi8KLQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmICghcF9kZXYtPnByb2RfaWRbaV0pCiAJCQljb250aW51ZTsKIAkJaGFzaFtpXSA9IGNyYzMyKDAsIHBfZGV2LT5wcm9kX2lkW2ldLCBzdHJsZW4ocF9kZXYtPnByb2RfaWRbaV0pKTsKQEAgLTk4NCwxNCArOTg1LDE0IEBACiBzdGF0aWMgc3NpemVfdCBmaWVsZCMjX3Nob3cgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwkJXAotCXJldHVybiBwX2Rldi0+dGVzdCA/IHNwcmludGYgKGJ1ZiwgZm9ybWF0LCBwX2Rldi0+ZmllbGQpIDogLUVOT0RFVjsgXAorCXJldHVybiBwX2Rldi0+dGVzdCA/IHNwcmludGYoYnVmLCBmb3JtYXQsIHBfZGV2LT5maWVsZCkgOiAtRU5PREVWOyBcCiB9CiAKICNkZWZpbmUgcGNtY2lhX2RldmljZV9zdHJpbmdhdHRyKG5hbWUsIGZpZWxkKQkJCQkJXAogc3RhdGljIHNzaXplX3QgbmFtZSMjX3Nob3cgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwkJXAotCXJldHVybiBwX2Rldi0+ZmllbGQgPyBzcHJpbnRmIChidWYsICIlc1xuIiwgcF9kZXYtPmZpZWxkKSA6IC1FTk9ERVY7IFwKKwlyZXR1cm4gcF9kZXYtPmZpZWxkID8gc3ByaW50ZihidWYsICIlc1xuIiwgcF9kZXYtPmZpZWxkKSA6IC1FTk9ERVY7IFwKIH0KIAogcGNtY2lhX2RldmljZV9hdHRyKGZ1bmMsIHNvY2tldCwgIjB4JTAyeFxuIik7CkBAIC0xMDIwLDggKzEwMjEsOCBAQAogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAotICAgICAgICBpZiAoIWNvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghY291bnQpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCghcF9kZXYtPnN1c3BlbmRlZCkgJiYgIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCiAJCXJldCA9IHJ1bnRpbWVfc3VzcGVuZChkZXYpOwpAQCAtMTAzOSwxMCArMTA0MCwxMSBAQAogCXUzMiBoYXNoWzRdID0geyAwLCAwLCAwLCAwfTsKIAogCS8qIGNhbGN1bGF0ZSBoYXNoZXMgKi8KLQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmICghcF9kZXYtPnByb2RfaWRbaV0pCiAJCQljb250aW51ZTsKLQkJaGFzaFtpXSA9IGNyYzMyKDAscF9kZXYtPnByb2RfaWRbaV0sc3RybGVuKHBfZGV2LT5wcm9kX2lkW2ldKSk7CisJCWhhc2hbaV0gPSBjcmMzMigwLCBwX2Rldi0+cHJvZF9pZFtpXSwKKwkJCQlzdHJsZW4ocF9kZXYtPnByb2RfaWRbaV0pKTsKIAl9CiAJcmV0dXJuIHNwcmludGYoYnVmLCAicGNtY2lhOm0lMDRYYyUwNFhmJTAyWGZuJTAyWHBmbiUwMlgiCiAJCQkJInBhJTA4WHBiJTA4WHBjJTA4WHBkJTA4WFxuIiwKQEAgLTEwOTEsNyArMTA5Myw3IEBACiAKIC8qIFBNIHN1cHBvcnQsIGFsc28gbmVlZGVkIGZvciByZXNldCAqLwogCi1zdGF0aWMgaW50IHBjbWNpYV9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHBjbWNpYV9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gTlVMTDsKQEAgLTExMzEsMTAgKzExMzMsMTAgQEAKIH0KIAogCi1zdGF0aWMgaW50IHBjbWNpYV9kZXZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHBjbWNpYV9kZXZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7Ci0gICAgICAgIHN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydiA9IE5VTEw7CisJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcF9kZXYtPnN1c3BlbmRlZCkKQEAgLTEyMTEsNyArMTIxMyw3IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZSBjYXJkIHN0YXR1cyBldmVudCBoYW5kbGVyLgotICAgIAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyogTm9ybWFsbHksIHRoZSBldmVudCBpcyBwYXNzZWQgdG8gaW5kaXZpZHVhbCBkcml2ZXJzIGFmdGVyCkBAIC0xMjY0LDcgKzEyNjYsNyBAQAogfSAvKiBkc19ldmVudCAqLwogCiAKLXN0cnVjdCBwY21jaWFfZGV2aWNlICogcGNtY2lhX2Rldl9wcmVzZW50KHN0cnVjdCBwY21jaWFfZGV2aWNlICpfcF9kZXYpCitzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2Rldl9wcmVzZW50KHN0cnVjdCBwY21jaWFfZGV2aWNlICpfcF9kZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpyZXQgPSBOVUxMOwpAQCAtMTMyOSw3ICsxMzMxLDcgQEAKIAlpZiAocmV0KSB7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgIlBDTUNJQSByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJcGNtY2lhX3B1dF9zb2NrZXQoc29ja2V0KTsKLQkJcmV0dXJuIChyZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpAQCAtMTQwMCw3ICsxNDAyLDcgQEAKIAogCXJldHVybiAwOwogfQotZnNfaW5pdGNhbGwoaW5pdF9wY21jaWFfYnVzKTsgLyogb25lIGxldmVsIGFmdGVyIHN1YnN5c19pbml0Y2FsbCBzbyB0aGF0IAorZnNfaW5pdGNhbGwoaW5pdF9wY21jaWFfYnVzKTsgLyogb25lIGxldmVsIGFmdGVyIHN1YnN5c19pbml0Y2FsbCBzbyB0aGF0CiAJCQkgICAgICAgKiBwY21jaWFfc29ja2V0X2NsYXNzIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggYzRkNzkwOC4uZjczZmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTg4LDEyICs4OCwxMiBAQAogCiAJcF9kcnYgPSBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgcGNtY2lhX2RyaXZlciwgZHJ2KTsKIAotCXJldHVybiAocF9kcnYpOworCXJldHVybiBwX2RydjsKIH0KIAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfcGNjYXJkID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfcGNjYXJkOwogCiBzdGF0aWMgaW50IHByb2NfcmVhZF9kcml2ZXJzX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIHZvaWQgKl9tKQogewpAQCAtMTU4LDcgKzE1OCw4IEBACiAKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkanVzdF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGFkanVzdF90ICphZGopIHsKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGFkanVzdF90ICphZGopCit7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NSw3ICsxOTYsNyBAQAogCQkJCWJlZ2luID0gYWRqLT5yZXNvdXJjZS5tZW1vcnkuQmFzZTsKIAkJCQllbmQgPSBhZGotPnJlc291cmNlLm1lbW9yeS5CYXNlICsgYWRqLT5yZXNvdXJjZS5tZW1vcnkuU2l6ZSAtIDE7CiAJCQkJaWYgKHMtPnJlc291cmNlX29wcy0+YWRkX21lbSkKLQkJCQkJcmV0ID1zLT5yZXNvdXJjZV9vcHMtPmFkZF9tZW0ocywgYWRqLT5BY3Rpb24sIGJlZ2luLCBlbmQpOworCQkJCQlyZXQgPSBzLT5yZXNvdXJjZV9vcHMtPmFkZF9tZW0ocywgYWRqLT5BY3Rpb24sIGJlZ2luLCBlbmQpOwogCQkJY2FzZSBSRVNfSU9fUkFOR0U6CiAJCQkJYmVnaW4gPSBhZGotPnJlc291cmNlLmlvLkJhc2VQb3J0OwogCQkJCWVuZCA9IGFkai0+cmVzb3VyY2UuaW8uQmFzZVBvcnQgKyBhZGotPnJlc291cmNlLmlvLk51bVBvcnRzIC0gMTsKQEAgLTIxNSw3ICsyMTYsNyBAQAogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtNDkwLDcgKzQ5MSw3IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewogCQkJaWYgKChwX2Rldi0+ZGV2LmRyaXZlciA9PSAmcF9kcnYtPmRydikpIHsKIAkJCQlpZiAocF9kZXYtPmNhcmRtZ3IpIHsKQEAgLTU1OCw3ICs1NTksNyBAQAogIGVycl9wdXQ6CiAJcGNtY2lhX3B1dF9zb2NrZXQocyk7CiAKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0gLyogYmluZF9yZXF1ZXN0ICovCiAKICNpZmRlZiBDT05GSUdfQ0FSREJVUwpAQCAtNjU1LDcgKzY1Niw3IEBACiAKICBlcnJfcHV0OgogCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0gLyogZ2V0X2RldmljZV9pbmZvICovCiAKIApAQCAtNjY0LDcgKzY2NSw3IEBACiAgICAgc29ja2V0X3QgaSA9IGltaW5vcihpbm9kZSk7CiAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAgICAgdXNlcl9pbmZvX3QgKnVzZXI7Ci0gICAgc3RhdGljIGludCB3YXJuaW5nX3ByaW50ZWQgPSAwOworICAgIHN0YXRpYyBpbnQgd2FybmluZ19wcmludGVkOwogICAgIGludCByZXQgPSAwOwogCiAgICAgcHJfZGVidWcoImRzX29wZW4oc29ja2V0ICVkKVxuIiwgaSk7CkBAIC03MzgsMTIgKzczOSwxMyBAQAogICAgIHMgPSB1c2VyLT5zb2NrZXQ7CiAKICAgICAvKiBVbmxpbmsgdXNlciBkYXRhIHN0cnVjdHVyZSAqLwotICAgIGlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKKyAgICBpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKQogCXMtPnBjbWNpYV9zdGF0ZS5idXN5ID0gMDsKLSAgICB9CisKICAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogICAgIGZvciAobGluayA9ICZzLT51c2VyOyAqbGluazsgbGluayA9ICYoKmxpbmspLT5uZXh0KQotCWlmICgqbGluayA9PSB1c2VyKSBicmVhazsKKwlpZiAoKmxpbmsgPT0gdXNlcikKKwkJYnJlYWs7CiAgICAgaWYgKGxpbmsgPT0gTlVMTCkKIAlnb3RvIG91dDsKICAgICAqbGluayA9IHVzZXItPm5leHQ7CkBAIC03NzQsNyArNzc2LDcgQEAKIAogICAgIHMgPSB1c2VyLT5zb2NrZXQ7CiAgICAgaWYgKHMtPnBjbWNpYV9zdGF0ZS5kZWFkKQotICAgICAgICByZXR1cm4gLUVJTzsKKwlyZXR1cm4gLUVJTzsKIAogICAgIHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzLT5xdWV1ZSwgIXF1ZXVlX2VtcHR5KHVzZXIpKTsKICAgICBpZiAocmV0ID09IDApCkBAIC04MjQsNyArODI2LDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZHNfaW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSwKK3N0YXRpYyBpbnQgZHNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7CiAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CkBAIC04NDIsMTAgKzg0NCwxMSBAQAogCiAgICAgcyA9IHVzZXItPnNvY2tldDsKICAgICBpZiAocy0+cGNtY2lhX3N0YXRlLmRlYWQpCi0gICAgICAgIHJldHVybiAtRUlPOworCXJldHVybiAtRUlPOwogCiAgICAgc2l6ZSA9IChjbWQgJiBJT0NTSVpFX01BU0spID4+IElPQ1NJWkVfU0hJRlQ7Ci0gICAgaWYgKHNpemUgPiBzaXplb2YoZHNfaW9jdGxfYXJnX3QpKSByZXR1cm4gLUVJTlZBTDsKKyAgICBpZiAoc2l6ZSA+IHNpemVvZihkc19pb2N0bF9hcmdfdCkpCisJcmV0dXJuIC1FSU5WQUw7CiAKICAgICAvKiBQZXJtaXNzaW9uIGNoZWNrICovCiAgICAgaWYgKCEoY21kICYgSU9DX09VVCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCkBAIC0xMDI0LDggKzEwMjcsOCBAQAogICAgIH0KIAogICAgIGlmIChjbWQgJiBJT0NfT1VUKSB7Ci0gICAgICAgIGlmIChfX2NvcHlfdG9fdXNlcih1YXJnLCAoY2hhciAqKWJ1Ziwgc2l6ZSkpCi0gICAgICAgICAgICBlcnIgPSAtRUZBVUxUOworCWlmIChfX2NvcHlfdG9fdXNlcih1YXJnLCAoY2hhciAqKWJ1Ziwgc2l6ZSkpCisJCWVyciA9IC1FRkFVTFQ7CiAgICAgfQogCiBmcmVlX291dDoKQEAgLTEwNDUsNyArMTA0OCw4IEBACiAJLnBvbGwJCT0gZHNfcG9sbCwKIH07CiAKLXZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKSB7Cit2b2lkIF9faW5pdCBwY21jaWFfc2V0dXBfaW9jdGwodm9pZCkKK3sKIAlpbnQgaTsKIAogCS8qIFNldCB1cCBjaGFyYWN0ZXIgZGV2aWNlIGZvciB1c2VyIG1vZGUgY2xpZW50cyAqLwpAQCAtMTA2NCw3ICsxMDY4LDggQEAKIH0KIAogCi12b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKSB7Cit2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKQorewogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKHByb2NfcGNjYXJkKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXJzIiwgcHJvY19wY2NhcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCBhOGJmOGMxLi5kNWRiOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAKIC8qIEFjY2VzcyBzcGVlZCBmb3IgSU8gd2luZG93cyAqLwotc3RhdGljIGludCBpb19zcGVlZCA9IDA7CitzdGF0aWMgaW50IGlvX3NwZWVkOwogbW9kdWxlX3BhcmFtKGlvX3NwZWVkLCBpbnQsIDA0NDQpOwogCiAKQEAgLTYyLDcgKzYyLDggQEAKIAkJCSAgICAgICBudW0sIGFsaWduKTsKIAkJCWFsaWduID0gMDsKIAkJfSBlbHNlCi0JCQl3aGlsZSAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkgYWxpZ24gPDw9IDE7CisJCQl3aGlsZSAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkKKwkJCQlhbGlnbiA8PD0gMTsKIAl9CiAJaWYgKCpiYXNlICYgfihhbGlnbi0xKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJvZGQgSU8gcmVxdWVzdDogYmFzZSAlI3ggYWxpZ24gJSN4XG4iLApAQCAtMzM4LDcgKzMzOSw3IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAotCWlmICghcF9kZXYtPl9pbyApCisJaWYgKCFwX2Rldi0+X2lvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBfZGV2LT5faW8gPSAwOwpAQCAtMzYyLDcgKzM2Myw3IEBACiBzdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQljb25maWdfdCAqYz0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIXBfZGV2LT5faXJxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM4Myw5ICszODQsOCBAQAogCQlzLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAotCWlmIChyZXEtPkhhbmRsZXIpIHsKKwlpZiAocmVxLT5IYW5kbGVyKQogCQlmcmVlX2lycShyZXEtPkFzc2lnbmVkSVJRLCBwX2Rldi0+cHJpdik7Ci0JfQogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQogCXBjbWNpYV91c2VkX2lycVtyZXEtPkFzc2lnbmVkSVJRXS0tOwpAQCAtNjU2LDcgKzY1Niw4IEBACiAJCXR5cGUgPSBJUlFGX1NIQVJFRDsKIAllbHNlIGlmIChyZXEtPkF0dHJpYnV0ZXMgJiBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcpCiAJCXR5cGUgPSBJUlFGX1NIQVJFRDsKLQllbHNlIHByaW50ayhLRVJOX1dBUk5JTkcgInBjbWNpYTogRHJpdmVyIG5lZWRzIHVwZGF0aW5nIHRvIHN1cHBvcnQgSVJRIHNoYXJpbmcuXG4iKTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjbWNpYTogRHJpdmVyIG5lZWRzIHVwZGF0aW5nIHRvIHN1cHBvcnQgSVJRIHNoYXJpbmcuXG4iKTsKIAogI2lmZGVmIENPTkZJR19QQ01DSUFfUFJPQkUKIApAQCAtNzg4LDcgKzc4OSw4IEBACiAKIAkvKiBBbGxvY2F0ZSBzeXN0ZW0gbWVtb3J5IHdpbmRvdyAqLwogCWZvciAodyA9IDA7IHcgPCBNQVhfV0lOOyB3KyspCi0JCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1dJTl9SRVEodykpKSBicmVhazsKKwkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfV0lOX1JFUSh3KSkpCisJCQlicmVhazsKIAlpZiAodyA9PSBNQVhfV0lOKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImFsbCB3aW5kb3dzIGFyZSB1c2VkIGFscmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgyNiwxOCArODI4LDE5IEBACiAJcy0+c3RhdGUgfD0gU09DS0VUX1dJTl9SRVEodyk7CiAKIAkvKiBSZXR1cm4gd2luZG93IGhhbmRsZSAqLwotCWlmIChzLT5mZWF0dXJlcyAmIFNTX0NBUF9TVEFUSUNfTUFQKSB7CisJaWYgKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApCiAJCXJlcS0+QmFzZSA9IHdpbi0+c3RhdGljX3N0YXJ0OwotCX0gZWxzZSB7CisJZWxzZQogCQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7Ci0JfQorCiAJKndoID0gdyArIDE7CiAKIAlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlcXVlc3Rfd2luZG93ICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyk7CiAKLXZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldikgewordm9pZCBwY21jaWFfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorewogCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24ocF9kZXYpOwogCXBjbWNpYV9yZWxlYXNlX2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKIAlwY21jaWFfcmVsZWFzZV9pcnEocF9kZXYsICZwX2Rldi0+aXJxKTsKQEAgLTk3MCw3ICs5NzMsNyBAQAogCiAJcmV0dXJuIHBjY2FyZF9sb29wX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBjb2RlLCBOVUxMLAogCQkJCSAmbG9vcCwgcGNtY2lhX2RvX2xvb3BfdHVwbGUpOwotfTsKK30KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2xvb3BfdHVwbGUpOwogCiAKQEAgLTEwMDAsNyArMTAwMyw3IEBACiAJfSBlbHNlCiAJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJkb19nZXRfdHVwbGU6IG91dCBvZiBtZW1vcnlcbiIpOwogCXJldHVybiAwOwotfTsKK30KIAogLyoqCiAgKiBwY21jaWFfZ2V0X3R1cGxlKCkgLSBnZXQgZmlyc3QgdHVwbGUgZnJvbSBDSVMKQEAgLTEwMjQsNyArMTAyNyw3IEBACiAJcGNtY2lhX2xvb3BfdHVwbGUocF9kZXYsIGNvZGUsIHBjbWNpYV9kb19nZXRfdHVwbGUsICZnZXQpOwogCiAJcmV0dXJuIGdldC5sZW47Ci19OworfQogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X3R1cGxlKTsKIAogCkBAIC0xMDU3LDcgKzEwNjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCWRldi0+ZGV2X2FkZHJbaV0gPSB0dXBsZS0+VHVwbGVEYXRhW2krMl07CiAJcmV0dXJuIDA7Ci19OworfQogCiAvKioKICAqIHBjbWNpYV9nZXRfbWFjX2Zyb21fY2lzKCkgLSByZWFkIG91dCBNQUMgYWRkcmVzcyBmcm9tIENJU1RQTF9GVU5DRQpAQCAtMTA3MSw2ICsxMDc0LDYgQEAKIGludCBwY21jaWFfZ2V0X21hY19mcm9tX2NpcyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHBjbWNpYV9sb29wX3R1cGxlKHBfZGV2LCBDSVNUUExfRlVOQ0UsIHBjbWNpYV9kb19nZXRfbWFjLCBkZXYpOwotfTsKK30KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9tYWNfZnJvbV9jaXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCA4NGRkZTc3Ni4uNzZlNjQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0yMTQsNyArMjE0LDggQEAKIAlNRUNSIHw9IE1FQ1JfQ0lUOwogCiAJLyogU2V0IE1FQ1I6Tk9TIChOdW1iZXIgT2YgU29ja2V0cykgKi8KLQlpZiAoKG9wcy0+Zmlyc3QgKyBvcHMtPm5yKSA+IDEgfHwgbWFjaGluZV9pc192aXBlcigpKQorCWlmICgob3BzLT5maXJzdCArIG9wcy0+bnIpID4gMSB8fAorCSAgICBtYWNoaW5lX2lzX3ZpcGVyKCkgfHwgbWFjaGluZV9pc19hcmNvbV96ZXVzKCkpCiAJCU1FQ1IgfD0gTUVDUl9OT1M7CiAJZWxzZQogCQlNRUNSICY9IH5NRUNSX05PUzsKQEAgLTI1Miw2ICsyNTMsNyBAQAogCiAJcmV0dXJuIHNvY19wY21jaWFfYWRkX29uZShza3QpOwogfQorRVhQT1JUX1NZTUJPTChweGEyeHhfZHJ2X3BjbWNpYV9hZGRfb25lKTsKIAogdm9pZCBweGEyeHhfZHJ2X3BjbWNpYV9vcHMoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcykKIHsKQEAgLTI2MSwxOSArMjYzLDE5IEBACiAJb3BzLT5mcmVxdWVuY3lfY2hhbmdlID0gcHhhMnh4X3BjbWNpYV9mcmVxdWVuY3lfY2hhbmdlOwogI2VuZGlmCiB9CitFWFBPUlRfU1lNQk9MKHB4YTJ4eF9kcnZfcGNtY2lhX29wcyk7CiAKLWludCBfX3B4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHM7CiAJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm87CiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3Q7CiAKLQlpZiAoIWRldiB8fCAhZGV2LT5wbGF0Zm9ybV9kYXRhKQorCW9wcyA9IChzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqKWRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFvcHMpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jb3BzID0gKHN0cnVjdCBwY21jaWFfbG93X2xldmVsICopZGV2LT5wbGF0Zm9ybV9kYXRhOwotCiAJcHhhMnh4X2Rydl9wY21jaWFfb3BzKG9wcyk7CiAKIAlzaW5mbyA9IGt6YWxsb2MoU0tUX0RFVl9JTkZPX1NJWkUob3BzLT5uciksIEdGUF9LRVJORUwpOwpAQCAtMjg5LDcgKzI5MSw3IEBACiAJCXNrdC0+bnIgPSBvcHMtPmZpcnN0ICsgaTsKIAkJc2t0LT5vcHMgPSBvcHM7CiAJCXNrdC0+c29ja2V0Lm93bmVyID0gb3BzLT5vd25lcjsKLQkJc2t0LT5zb2NrZXQuZGV2LnBhcmVudCA9IGRldjsKKwkJc2t0LT5zb2NrZXQuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAkJc2t0LT5zb2NrZXQucGNpX2lycSA9IE5PX0lSUTsKIAogCQlyZXQgPSBweGEyeHhfZHJ2X3BjbWNpYV9hZGRfb25lKHNrdCk7CkBAIC0zMDIsMTkgKzMwNCwxMiBAQAogCQkJc29jX3BjbWNpYV9yZW1vdmVfb25lKCZzaW5mby0+c2t0W2ldKTsKIAkJa2ZyZWUoc2luZm8pOwogCX0gZWxzZSB7Ci0JCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBzaW5mbyk7CisJCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cygmZGV2LT5kZXYpOworCQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBzaW5mbyk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19weGEyeHhfZHJ2X3BjbWNpYV9wcm9iZSk7Ci0KLQotc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIF9fcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoJmRldi0+ZGV2KTsKLX0KIAogc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewpAQCAtMzQxLDcgKzMzNiw3IEBACiAJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgIHB4YTJ4eF9kcnZfcGNtY2lhX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBweGEyeHhfZHJ2X3BjbWNpYV9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmggYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCmluZGV4IGNiNWVmYWUuLmJiNjJlYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaApAQCAtMSw2ICsxLDMgQEAKLS8qIHRlbXBvcmFyeSBtZWFzdXJlICovCi1leHRlcm4gaW50IF9fcHhhMnh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKLQogaW50IHB4YTJ4eF9kcnZfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBweGEyeHhfZHJ2X3BjbWNpYV9vcHMoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYwppbmRleCAzYTg5OTNlLi40NTlhMjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI3OwogCi0Jc2t0LT5pcnEgPSBJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOwogCXJldHVybiAwOwogCiBlcnI3OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3N0YXJnYXRlMi5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3N0YXJnYXRlMi5jCmluZGV4IDQ5MDc0OWUuLmQwODgwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zdGFyZ2F0ZTIuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc3RhcmdhdGUyLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RhdGljIGludCBzZzJfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0Jc2t0LT5pcnEgPSBJUlFfR1BJTyhTRzJfUzBfR1BJT19SRUFEWSk7CisJc2t0LT5zb2NrZXQucGNpX2lycSA9IElSUV9HUElPKFNHMl9TMF9HUElPX1JFQURZKTsKIAlyZXR1cm4gc29jX3BjbWNpYV9yZXF1ZXN0X2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdmlwZXIuYwppbmRleCAyN2JlMmUxNS4uYTUxZjIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKQEAgLTEsOSArMSw4IEBACiAvKgotICogVklQRVIgUENNQ0lBIHN1cHBvcnQKKyAqIFZpcGVyL1pldXMgUENNQ0lBIHN1cHBvcnQKICAqICAgQ29weXJpZ2h0IDIwMDQgQXJjb20gQ29udHJvbCBTeXN0ZW1zCiAgKgogICogTWFpbnRhaW5lZCBieSBNYXJjIFp5bmdpZXIgPG1hekBtaXN0ZXJqb25lcy5vcmc+Ci0gKiAJCQkgICAgICA8bWFyYy56eW5naWVyQGFsdHJhbi5jb20+CiAgKgogICogQmFzZWQgb246CiAgKiAgIGlQQVEgaDIyMDAgUENNQ0lBIHN1cHBvcnQKQEAgLTI2LDM3ICsyNSw0NyBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8bWFjaC92aXBlci5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9hcmNvbS1wY21jaWEuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKICNpbmNsdWRlICJweGEyeHhfYmFzZS5oIgogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXJjb21fcGNtY2lhX2RldjsKKwogc3RhdGljIHN0cnVjdCBwY21jaWFfaXJxcyBpcnFzW10gPSB7Ci0JeyAwLCBncGlvX3RvX2lycShWSVBFUl9DRl9DRF9HUElPKSwgICJQQ01DSUFfQ0QiIH0KKwl7CisJCS5zb2NrCT0gMCwKKwkJLnN0cgk9ICJQQ01DSUFfQ0QiLAorCX0sCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhcmNvbV9wY21jaWFfcGRhdGEgKnZpcGVyX2dldF9wZGF0YSh2b2lkKQoreworCXJldHVybiBhcmNvbV9wY21jaWFfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKK30KKwogc3RhdGljIGludCB2aXBlcl9wY21jaWFfaHdfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKKwlzdHJ1Y3QgYXJjb21fcGNtY2lhX3BkYXRhICpwZGF0YSA9IHZpcGVyX2dldF9wZGF0YSgpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlza3QtPnNvY2tldC5wY2lfaXJxID0gZ3Bpb190b19pcnEoVklQRVJfQ0ZfUkRZX0dQSU8pOworCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBncGlvX3RvX2lycShwZGF0YS0+cmR5X2dwaW8pOworCWlycXNbMF0uaXJxID0gZ3Bpb190b19pcnEocGRhdGEtPmNkX2dwaW8pOwogCi0JaWYgKGdwaW9fcmVxdWVzdChWSVBFUl9DRl9DRF9HUElPLCAiQ0YgZGV0ZWN0IikpCisJaWYgKGdwaW9fcmVxdWVzdChwZGF0YS0+Y2RfZ3BpbywgIkNGIGRldGVjdCIpKQogCQlnb3RvIGVycl9yZXF1ZXN0X2NkOwogCi0JaWYgKGdwaW9fcmVxdWVzdChWSVBFUl9DRl9SRFlfR1BJTywgIkNGIHJlYWR5IikpCisJaWYgKGdwaW9fcmVxdWVzdChwZGF0YS0+cmR5X2dwaW8sICJDRiByZWFkeSIpKQogCQlnb3RvIGVycl9yZXF1ZXN0X3JkeTsKIAotCWlmIChncGlvX3JlcXVlc3QoVklQRVJfQ0ZfUE9XRVJfR1BJTywgIkNGIHBvd2VyIikpCisJaWYgKGdwaW9fcmVxdWVzdChwZGF0YS0+cHdyX2dwaW8sICJDRiBwb3dlciIpKQogCQlnb3RvIGVycl9yZXF1ZXN0X3B3cjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCS8qIEdQSU8gODIgaXMgdGhlIENGIHBvd2VyIGVuYWJsZSBsaW5lLiBpbml0aWFsbHkgb2ZmICovCi0JaWYgKGdwaW9fZGlyZWN0aW9uX291dHB1dChWSVBFUl9DRl9QT1dFUl9HUElPLCAwKSB8fAotCSAgICBncGlvX2RpcmVjdGlvbl9pbnB1dChWSVBFUl9DRl9DRF9HUElPKSB8fAotCSAgICBncGlvX2RpcmVjdGlvbl9pbnB1dChWSVBFUl9DRl9SRFlfR1BJTykpIHsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5wd3JfZ3BpbywgMCkgfHwKKwkgICAgZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPmNkX2dwaW8pIHx8CisJICAgIGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5yZHlfZ3BpbykpIHsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlnb3RvIGVycl9kaXI7CiAJfQpAQCAtNjYsMTMgKzc1LDEzIEBACiAJcmV0dXJuIHNvY19wY21jaWFfcmVxdWVzdF9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CiAKIGVycl9kaXI6Ci0JZ3Bpb19mcmVlKFZJUEVSX0NGX1BPV0VSX0dQSU8pOworCWdwaW9fZnJlZShwZGF0YS0+cHdyX2dwaW8pOwogZXJyX3JlcXVlc3RfcHdyOgotCWdwaW9fZnJlZShWSVBFUl9DRl9SRFlfR1BJTyk7CisJZ3Bpb19mcmVlKHBkYXRhLT5yZHlfZ3Bpbyk7CiBlcnJfcmVxdWVzdF9yZHk6Ci0JZ3Bpb19mcmVlKFZJUEVSX0NGX0NEX0dQSU8pOworCWdwaW9fZnJlZShwZGF0YS0+Y2RfZ3Bpbyk7CiBlcnJfcmVxdWVzdF9jZDoKLQlwcmludGsoS0VSTl9FUlIgInZpcGVyOiBGYWlsZWQgdG8gc2V0dXAgUENNQ0lBIEdQSU9zXG4iKTsKKwlkZXZfZXJyKCZhcmNvbV9wY21jaWFfZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0dXAgUENNQ0lBIEdQSU9zXG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTgxLDE3ICs5MCwyMSBAQAogICovCiBzdGF0aWMgdm9pZCB2aXBlcl9wY21jaWFfaHdfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7CisJc3RydWN0IGFyY29tX3BjbWNpYV9wZGF0YSAqcGRhdGEgPSB2aXBlcl9nZXRfcGRhdGEoKTsKKwogCXNvY19wY21jaWFfZnJlZV9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7Ci0JZ3Bpb19mcmVlKFZJUEVSX0NGX1BPV0VSX0dQSU8pOwotCWdwaW9fZnJlZShWSVBFUl9DRl9SRFlfR1BJTyk7Ci0JZ3Bpb19mcmVlKFZJUEVSX0NGX0NEX0dQSU8pOworCWdwaW9fZnJlZShwZGF0YS0+cHdyX2dwaW8pOworCWdwaW9fZnJlZShwZGF0YS0+cmR5X2dwaW8pOworCWdwaW9fZnJlZShwZGF0YS0+Y2RfZ3Bpbyk7CiB9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCiAJCQkJICAgICAgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RhdGUtPmRldGVjdCA9IGdwaW9fZ2V0X3ZhbHVlKFZJUEVSX0NGX0NEX0dQSU8pID8gMCA6IDE7Ci0Jc3RhdGUtPnJlYWR5ICA9IGdwaW9fZ2V0X3ZhbHVlKFZJUEVSX0NGX1JEWV9HUElPKSA/IDEgOiAwOworCXN0cnVjdCBhcmNvbV9wY21jaWFfcGRhdGEgKnBkYXRhID0gdmlwZXJfZ2V0X3BkYXRhKCk7CisKKwlzdGF0ZS0+ZGV0ZWN0ID0gIWdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5jZF9ncGlvKTsKKwlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShwZGF0YS0+cmR5X2dwaW8pOwogCXN0YXRlLT5idmQxICAgPSAxOwogCXN0YXRlLT5idmQyICAgPSAxOwogCXN0YXRlLT53cnByb3QgPSAwOwpAQCAtMTAyLDIwICsxMTUsMjEgQEAKIHN0YXRpYyBpbnQgdmlwZXJfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCiAJCQkJCSBjb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCiB7CisJc3RydWN0IGFyY29tX3BjbWNpYV9wZGF0YSAqcGRhdGEgPSB2aXBlcl9nZXRfcGRhdGEoKTsKKwogCS8qIFNpbGVudGx5IGlnbm9yZSBWcHAsIG91dHB1dCBlbmFibGUsIHNwZWFrZXIgZW5hYmxlLiAqLwotCXZpcGVyX2NmX3JzdChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCk7CisJcGRhdGEtPnJlc2V0KHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKTsKIAogCS8qIEFwcGx5IHNvY2tldCB2b2x0YWdlICovCiAJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CiAJY2FzZSAwOgotCQlncGlvX3NldF92YWx1ZShWSVBFUl9DRl9QT1dFUl9HUElPLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPnB3cl9ncGlvLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAzMzoKLQkJZ3Bpb19zZXRfdmFsdWUoVklQRVJfQ0ZfUE9XRVJfR1BJTywgMSk7CisJCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5wd3JfZ3BpbywgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuc3VwcG9ydGVkIFZjYzolZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBzdGF0ZS0+VmNjKTsKKwkJZGV2X2VycigmYXJjb21fcGNtY2lhX2Rldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgVmNjOiVkXG4iLCBzdGF0ZS0+VmNjKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTMwLDcgKzE0NCw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCB2aXBlcl9wY21jaWFfb3BzIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgdmlwZXJfcGNtY2lhX29wcyA9IHsKIAkub3duZXIgICAgICAgICAgCT0gVEhJU19NT0RVTEUsCiAJLmh3X2luaXQgICAgICAgIAk9IHZpcGVyX3BjbWNpYV9od19pbml0LAogCS5od19zaHV0ZG93bgkJPSB2aXBlcl9wY21jaWFfaHdfc2h1dGRvd24sCkBAIC0xNDMsMTcgKzE1NywyNSBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdmlwZXJfcGNtY2lhX2RldmljZTsKIAotc3RhdGljIGludCBfX2luaXQgdmlwZXJfcGNtY2lhX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgdmlwZXJfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKIAotCWlmICghbWFjaGluZV9pc192aXBlcigpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkvKiBJIGNhbid0IGltYWdpbmUgbW9yZSB0aGFuIG9uZSBkZXZpY2UsIGJ1dCB5b3UgbmV2ZXIga25vdy4uLiAqLworCWlmIChhcmNvbV9wY21jaWFfZGV2KQorCQlyZXR1cm4gLUVFWElTVDsKKworCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJdmlwZXJfcGNtY2lhX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicHhhMnh4LXBjbWNpYSIsIC0xKTsKIAlpZiAoIXZpcGVyX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCisJYXJjb21fcGNtY2lhX2RldiA9IHBkZXY7CisKKwl2aXBlcl9wY21jaWFfZGV2aWNlLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSh2aXBlcl9wY21jaWFfZGV2aWNlLAogCQkJCSAgICAgICAmdmlwZXJfcGNtY2lhX29wcywKIAkJCQkgICAgICAgc2l6ZW9mKHZpcGVyX3BjbWNpYV9vcHMpKTsKQEAgLTE2MSwxOCArMTgzLDQ5IEBACiAJaWYgKCFyZXQpCiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQodmlwZXJfcGNtY2lhX2RldmljZSk7CiAKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3B1dCh2aXBlcl9wY21jaWFfZGV2aWNlKTsKKwkJYXJjb21fcGNtY2lhX2RldiA9IE5VTEw7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHZpcGVyX3BjbWNpYV9leGl0KHZvaWQpCitzdGF0aWMgaW50IHZpcGVyX3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih2aXBlcl9wY21jaWFfZGV2aWNlKTsKKwlhcmNvbV9wY21jaWFfZGV2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgdmlwZXJfcGNtY2lhX2lkX3RhYmxlW10gPSB7CisJeyAubmFtZSA9ICJ2aXBlci1wY21jaWEiLCB9LAorCXsgLm5hbWUgPSAiemV1cy1wY21jaWEiLCAgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2aXBlcl9wY21jaWFfZHJpdmVyID0geworCS5wcm9iZQkJPSB2aXBlcl9wY21jaWFfcHJvYmUsCisJLnJlbW92ZQkJPSB2aXBlcl9wY21jaWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhcmNvbS1wY21jaWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZQk9IHZpcGVyX3BjbWNpYV9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZpcGVyX3BjbWNpYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmlwZXJfcGNtY2lhX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aXBlcl9wY21jaWFfZXhpdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmlwZXJfcGNtY2lhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZpcGVyX3BjbWNpYV9pbml0KTsKIG1vZHVsZV9leGl0KHZpcGVyX3BjbWNpYV9leGl0KTsKIAorTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgdmlwZXJfcGNtY2lhX2lkX3RhYmxlKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCmluZGV4IGRlMGU3NzAuLjUyZGIxNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwpAQCAtMTI2LDE2ICsxMjYsMTYgQEAKIAlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiAKICNpZmRlZiBDT05GSUdfWDg2Ci0gICAgICAgIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotICAgICAgICAgICAgICAgIGlmIChzdGFydCAmIDB4MzAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcy0+c3RhcnQgPSBzdGFydDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOworCQkJcmVzLT5zdGFydCA9IHN0YXJ0OworCQl9CisJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTTY4SwotICAgICAgICBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJaWYgKChyZXMtPnN0YXJ0ICsgc2l6ZSAtIDEpID49IDEwMjQpCiAJCQlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKaW5kZXggNzAzOWYzYy4uOWIwZGM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCkBAIC0yNCw5ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CkBAIC0xNDQsNDMgKzE0NCw0NCBAQAogCiBzdGF0aWMgaW50IHN1Yl9pbnRlcnZhbChzdHJ1Y3QgcmVzb3VyY2VfbWFwICptYXAsIHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtKQogewotICAgIHN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOworCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCi0gICAgZm9yIChwID0gbWFwOyA7IHAgPSBxKSB7Ci0JcSA9IHAtPm5leHQ7Ci0JaWYgKHEgPT0gbWFwKQotCSAgICBicmVhazsKLQlpZiAoKHEtPmJhc2UrcS0+bnVtID4gYmFzZSkgJiYgKGJhc2UrbnVtID4gcS0+YmFzZSkpIHsKLQkgICAgaWYgKHEtPmJhc2UgPj0gYmFzZSkgewotCQlpZiAocS0+YmFzZStxLT5udW0gPD0gYmFzZStudW0pIHsKLQkJICAgIC8qIERlbGV0ZSB3aG9sZSBibG9jayAqLwotCQkgICAgcC0+bmV4dCA9IHEtPm5leHQ7Ci0JCSAgICBrZnJlZShxKTsKLQkJICAgIC8qIGRvbid0IGFkdmFuY2UgdGhlIHBvaW50ZXIgeWV0ICovCi0JCSAgICBxID0gcDsKLQkJfSBlbHNlIHsKLQkJICAgIC8qIEN1dCBvZmYgYml0IGZyb20gdGhlIGZyb250ICovCi0JCSAgICBxLT5udW0gPSBxLT5iYXNlICsgcS0+bnVtIC0gYmFzZSAtIG51bTsKLQkJICAgIHEtPmJhc2UgPSBiYXNlICsgbnVtOworCWZvciAocCA9IG1hcDsgOyBwID0gcSkgeworCQlxID0gcC0+bmV4dDsKKwkJaWYgKHEgPT0gbWFwKQorCQkJYnJlYWs7CisJCWlmICgocS0+YmFzZStxLT5udW0gPiBiYXNlKSAmJiAoYmFzZStudW0gPiBxLT5iYXNlKSkgeworCQkJaWYgKHEtPmJhc2UgPj0gYmFzZSkgeworCQkJCWlmIChxLT5iYXNlK3EtPm51bSA8PSBiYXNlK251bSkgeworCQkJCQkvKiBEZWxldGUgd2hvbGUgYmxvY2sgKi8KKwkJCQkJcC0+bmV4dCA9IHEtPm5leHQ7CisJCQkJCWtmcmVlKHEpOworCQkJCQkvKiBkb24ndCBhZHZhbmNlIHRoZSBwb2ludGVyIHlldCAqLworCQkJCQlxID0gcDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBDdXQgb2ZmIGJpdCBmcm9tIHRoZSBmcm9udCAqLworCQkJCQlxLT5udW0gPSBxLT5iYXNlICsgcS0+bnVtIC0gYmFzZSAtIG51bTsKKwkJCQkJcS0+YmFzZSA9IGJhc2UgKyBudW07CisJCQkJfQorCQkJfSBlbHNlIGlmIChxLT5iYXNlK3EtPm51bSA8PSBiYXNlK251bSkgeworCQkJCS8qIEN1dCBvZmYgYml0IGZyb20gdGhlIGVuZCAqLworCQkJCXEtPm51bSA9IGJhc2UgLSBxLT5iYXNlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTcGxpdCB0aGUgYmxvY2sgaW50byB0d28gcGllY2VzICovCisJCQkJcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9tYXApLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIXApIHsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAib3V0IG9mIG1lbW9yeSB0byB1cGRhdGUgcmVzb3VyY2VzXG4iKTsKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJfQorCQkJCXAtPmJhc2UgPSBiYXNlK251bTsKKwkJCQlwLT5udW0gPSBxLT5iYXNlK3EtPm51bSAtIHAtPmJhc2U7CisJCQkJcS0+bnVtID0gYmFzZSAtIHEtPmJhc2U7CisJCQkJcC0+bmV4dCA9IHEtPm5leHQgOyBxLT5uZXh0ID0gcDsKKwkJCX0KIAkJfQotCSAgICB9IGVsc2UgaWYgKHEtPmJhc2UrcS0+bnVtIDw9IGJhc2UrbnVtKSB7Ci0JCS8qIEN1dCBvZmYgYml0IGZyb20gdGhlIGVuZCAqLwotCQlxLT5udW0gPSBiYXNlIC0gcS0+YmFzZTsKLQkgICAgfSBlbHNlIHsKLQkJLyogU3BsaXQgdGhlIGJsb2NrIGludG8gdHdvIHBpZWNlcyAqLwotCQlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlX21hcCksIEdGUF9LRVJORUwpOwotCQlpZiAoIXApIHsKLQkJICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIm91dCBvZiBtZW1vcnkgdG8gdXBkYXRlIHJlc291cmNlc1xuIik7Ci0JCSAgICByZXR1cm4gLUVOT01FTTsKLQkJfQotCQlwLT5iYXNlID0gYmFzZStudW07Ci0JCXAtPm51bSA9IHEtPmJhc2UrcS0+bnVtIC0gcC0+YmFzZTsKLQkJcS0+bnVtID0gYmFzZSAtIHEtPmJhc2U7Ci0JCXAtPm5leHQgPSBxLT5uZXh0IDsgcS0+bmV4dCA9IHA7Ci0JICAgIH0KIAl9Ci0gICAgfQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE5NCw2OSArMTk1LDcyIEBACiBzdGF0aWMgdm9pZCBkb19pb19wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGJhc2UsCiAJCQl1bnNpZ25lZCBpbnQgbnVtKQogewotICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwotICAgIHN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKLSAgICB1bnNpZ25lZCBpbnQgaSwgaiwgYmFkOwotICAgIGludCBhbnk7Ci0gICAgdV9jaGFyICpiLCBob2xlLCBtb3N0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgYmFkOworCWludCBhbnk7CisJdV9jaGFyICpiLCBob2xlLCBtb3N0OwogCi0gICAgZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsICJjczogSU8gcG9ydCBwcm9iZSAlI3gtJSN4OiIsCi0JICAgICAgIGJhc2UsIGJhc2UrbnVtLTEpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcy0+ZGV2LCAiY3M6IElPIHBvcnQgcHJvYmUgJSN4LSUjeDoiLAorCQliYXNlLCBiYXNlK251bS0xKTsKIAotICAgIC8qIEZpcnN0LCB3aGF0IGRvZXMgYSBmbG9hdGluZyBwb3J0IGxvb2sgbGlrZT8gKi8KLSAgICBiID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpOwotICAgIGlmICghYikgewotCSAgICBwcmludGsoIlxuIik7Ci0JICAgIGRldl9wcmludGsoS0VSTl9FUlIsICZzLT5kZXYsCi0JCSAgICJkb19pb19wcm9iZTogdW5hYmxlIHRvIGttYWxsb2MgMjU2IGJ5dGVzIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvciAoaSA9IGJhc2UsIG1vc3QgPSAwOyBpIDwgYmFzZStudW07IGkgKz0gOCkgewotCXJlcyA9IGNsYWltX3JlZ2lvbihOVUxMLCBpLCA4LCBJT1JFU09VUkNFX0lPLCAiUENNQ0lBIElPIHByb2JlIik7Ci0JaWYgKCFyZXMpCi0JICAgIGNvbnRpbnVlOwotCWhvbGUgPSBpbmIoaSk7Ci0JZm9yIChqID0gMTsgaiA8IDg7IGorKykKLQkgICAgaWYgKGluYihpK2opICE9IGhvbGUpIGJyZWFrOwotCWZyZWVfcmVnaW9uKHJlcyk7Ci0JaWYgKChqID09IDgpICYmICgrK2JbaG9sZV0gPiBiW21vc3RdKSkKLQkgICAgbW9zdCA9IGhvbGU7Ci0JaWYgKGJbbW9zdF0gPT0gMTI3KSBicmVhazsKLSAgICB9Ci0gICAga2ZyZWUoYik7Ci0KLSAgICBiYWQgPSBhbnkgPSAwOwotICAgIGZvciAoaSA9IGJhc2U7IGkgPCBiYXNlK251bTsgaSArPSA4KSB7Ci0JcmVzID0gY2xhaW1fcmVnaW9uKE5VTEwsIGksIDgsIElPUkVTT1VSQ0VfSU8sICJQQ01DSUEgSU8gcHJvYmUiKTsKLQlpZiAoIXJlcykKLQkgICAgY29udGludWU7Ci0JZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkgICAgaWYgKGluYihpK2opICE9IG1vc3QpIGJyZWFrOwotCWZyZWVfcmVnaW9uKHJlcyk7Ci0JaWYgKGogPCA4KSB7Ci0JICAgIGlmICghYW55KQotCQlwcmludGsoIiBleGNsdWRpbmciKTsKLQkgICAgaWYgKCFiYWQpCi0JCWJhZCA9IGFueSA9IGk7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKGJhZCkgewotCQlzdWJfaW50ZXJ2YWwoJnNfZGF0YS0+aW9fZGIsIGJhZCwgaS1iYWQpOwotCQlwcmludGsoIiAlI3gtJSN4IiwgYmFkLCBpLTEpOwotCQliYWQgPSAwOwotCSAgICB9CisJLyogRmlyc3QsIHdoYXQgZG9lcyBhIGZsb2F0aW5nIHBvcnQgbG9vayBsaWtlPyAqLworCWIgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiKSB7CisJCXByaW50aygiXG4iKTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKKwkJCSJkb19pb19wcm9iZTogdW5hYmxlIHRvIGttYWxsb2MgMjU2IGJ5dGVzIik7CisJCXJldHVybjsKIAl9Ci0gICAgfQotICAgIGlmIChiYWQpIHsKLQlpZiAoKG51bSA+IDE2KSAmJiAoYmFkID09IGJhc2UpICYmIChpID09IGJhc2UrbnVtKSkgewotCSAgICBwcmludGsoIiBub3RoaW5nOiBwcm9iZSBmYWlsZWQuXG4iKTsKLQkgICAgcmV0dXJuOwotCX0gZWxzZSB7Ci0JICAgIHN1Yl9pbnRlcnZhbCgmc19kYXRhLT5pb19kYiwgYmFkLCBpLWJhZCk7Ci0JICAgIHByaW50aygiICUjeC0lI3giLCBiYWQsIGktMSk7CisJZm9yIChpID0gYmFzZSwgbW9zdCA9IDA7IGkgPCBiYXNlK251bTsgaSArPSA4KSB7CisJCXJlcyA9IGNsYWltX3JlZ2lvbihOVUxMLCBpLCA4LCBJT1JFU09VUkNFX0lPLCAiUENNQ0lBIGlvcHJvYmUiKTsKKwkJaWYgKCFyZXMpCisJCQljb250aW51ZTsKKwkJaG9sZSA9IGluYihpKTsKKwkJZm9yIChqID0gMTsgaiA8IDg7IGorKykKKwkJCWlmIChpbmIoaStqKSAhPSBob2xlKQorCQkJCWJyZWFrOworCQlmcmVlX3JlZ2lvbihyZXMpOworCQlpZiAoKGogPT0gOCkgJiYgKCsrYltob2xlXSA+IGJbbW9zdF0pKQorCQkJbW9zdCA9IGhvbGU7CisJCWlmIChiW21vc3RdID09IDEyNykKKwkJCWJyZWFrOwogCX0KLSAgICB9CisJa2ZyZWUoYik7CiAKLSAgICBwcmludGsoYW55ID8gIlxuIiA6ICIgY2xlYW4uXG4iKTsKKwliYWQgPSBhbnkgPSAwOworCWZvciAoaSA9IGJhc2U7IGkgPCBiYXNlK251bTsgaSArPSA4KSB7CisJCXJlcyA9IGNsYWltX3JlZ2lvbihOVUxMLCBpLCA4LCBJT1JFU09VUkNFX0lPLCAiUENNQ0lBIGlvcHJvYmUiKTsKKwkJaWYgKCFyZXMpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJCWlmIChpbmIoaStqKSAhPSBtb3N0KQorCQkJCWJyZWFrOworCQlmcmVlX3JlZ2lvbihyZXMpOworCQlpZiAoaiA8IDgpIHsKKwkJCWlmICghYW55KQorCQkJCXByaW50aygiIGV4Y2x1ZGluZyIpOworCQkJaWYgKCFiYWQpCisJCQkJYmFkID0gYW55ID0gaTsKKwkJfSBlbHNlIHsKKwkJCWlmIChiYWQpIHsKKwkJCQlzdWJfaW50ZXJ2YWwoJnNfZGF0YS0+aW9fZGIsIGJhZCwgaS1iYWQpOworCQkJCXByaW50aygiICUjeC0lI3giLCBiYWQsIGktMSk7CisJCQkJYmFkID0gMDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYmFkKSB7CisJCWlmICgobnVtID4gMTYpICYmIChiYWQgPT0gYmFzZSkgJiYgKGkgPT0gYmFzZStudW0pKSB7CisJCQlwcmludGsoIiBub3RoaW5nOiBwcm9iZSBmYWlsZWQuXG4iKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCXN1Yl9pbnRlcnZhbCgmc19kYXRhLT5pb19kYiwgYmFkLCBpLWJhZCk7CisJCQlwcmludGsoIiAlI3gtJSN4IiwgYmFkLCBpLTEpOworCQl9CisJfQorCisJcHJpbnRrKGFueSA/ICJcbiIgOiAiIGNsZWFuLlxuIik7CiB9CiAjZW5kaWYKIApAQCAtMzI3LDggKzMzMSw5IEBACiAJdW5zaWduZWQgaW50IGluZm8xLCBpbmZvMjsKIAlpbnQgcmV0ID0gMDsKIAotCXJlczEgPSBjbGFpbV9yZWdpb24ocywgYmFzZSwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwgImNzIG1lbW9yeSBwcm9iZSIpOwotCXJlczIgPSBjbGFpbV9yZWdpb24ocywgYmFzZSArIHNpemUvMiwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwgImNzIG1lbW9yeSBwcm9iZSIpOworCXJlczEgPSBjbGFpbV9yZWdpb24ocywgYmFzZSwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwgIlBDTUNJQSBtZW1wcm9iZSIpOworCXJlczIgPSBjbGFpbV9yZWdpb24ocywgYmFzZSArIHNpemUvMiwgc2l6ZS8yLCBJT1JFU09VUkNFX01FTSwKKwkJCSJQQ01DSUEgbWVtcHJvYmUiKTsKIAogCWlmIChyZXMxICYmIHJlczIpIHsKIAkJcmV0ID0gcmVhZGFibGUocywgcmVzMSwgJmluZm8xKTsKQEAgLTM0Nyw4ICszNTIsOSBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzMSwgKnJlczI7CiAJaW50IGEgPSAtMSwgYiA9IC0xOwogCi0JcmVzMSA9IGNsYWltX3JlZ2lvbihzLCBiYXNlLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLCAiY3MgbWVtb3J5IHByb2JlIik7Ci0JcmVzMiA9IGNsYWltX3JlZ2lvbihzLCBiYXNlICsgc2l6ZS8yLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLCAiY3MgbWVtb3J5IHByb2JlIik7CisJcmVzMSA9IGNsYWltX3JlZ2lvbihzLCBiYXNlLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLCAiUENNQ0lBIG1lbXByb2JlIik7CisJcmVzMiA9IGNsYWltX3JlZ2lvbihzLCBiYXNlICsgc2l6ZS8yLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLAorCQkJIlBDTUNJQSBtZW1wcm9iZSIpOwogCiAJaWYgKHJlczEgJiYgcmVzMikgewogCQlhID0gY2hlY2tzdW0ocywgcmVzMSk7CkBAIC0zNzEsNDIgKzM3Nyw0MyBAQAogCiBzdGF0aWMgaW50IGRvX21lbV9wcm9iZSh1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0gICAgc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwotICAgIHVfbG9uZyBpLCBqLCBiYWQsIGZhaWwsIHN0ZXA7CisJc3RydWN0IHNvY2tldF9kYXRhICpzX2RhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOworCXVfbG9uZyBpLCBqLCBiYWQsIGZhaWwsIHN0ZXA7CiAKLSAgICBkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwgImNzOiBtZW1vcnkgcHJvYmUgMHglMDZseC0weCUwNmx4OiIsCi0JICAgICAgIGJhc2UsIGJhc2UrbnVtLTEpOwotICAgIGJhZCA9IGZhaWwgPSAwOwotICAgIHN0ZXAgPSAobnVtIDwgMHgyMDAwMCkgPyAweDIwMDAgOiAoKG51bT4+NCkgJiB+MHgxZmZmKTsKLSAgICAvKiBkb24ndCBhbGxvdyB0b28gbGFyZ2Ugc3RlcHMgKi8KLSAgICBpZiAoc3RlcCA+IDB4ODAwMDAwKQotCXN0ZXAgPSAweDgwMDAwMDsKLSAgICAvKiBjaXNfcmVhZGFibGUgd2FudHMgdG8gbWFwIDJ4IG1hcF9zaXplICovCi0gICAgaWYgKHN0ZXAgPCAyICogcy0+bWFwX3NpemUpCi0Jc3RlcCA9IDIgKiBzLT5tYXBfc2l6ZTsKLSAgICBmb3IgKGkgPSBqID0gYmFzZTsgaSA8IGJhc2UrbnVtOyBpID0gaiArIHN0ZXApIHsKLQlpZiAoIWZhaWwpIHsKLQkgICAgZm9yIChqID0gaTsgaiA8IGJhc2UrbnVtOyBqICs9IHN0ZXApIHsKLQkJaWYgKGNpc19yZWFkYWJsZShzLCBqLCBzdGVwKSkKLQkJICAgIGJyZWFrOwotCSAgICB9Ci0JICAgIGZhaWwgPSAoKGkgPT0gYmFzZSkgJiYgKGogPT0gYmFzZStudW0pKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwgImNzOiBtZW1vcnkgcHJvYmUgMHglMDZseC0weCUwNmx4OiIsCisJCWJhc2UsIGJhc2UrbnVtLTEpOworCWJhZCA9IGZhaWwgPSAwOworCXN0ZXAgPSAobnVtIDwgMHgyMDAwMCkgPyAweDIwMDAgOiAoKG51bT4+NCkgJiB+MHgxZmZmKTsKKwkvKiBkb24ndCBhbGxvdyB0b28gbGFyZ2Ugc3RlcHMgKi8KKwlpZiAoc3RlcCA+IDB4ODAwMDAwKQorCQlzdGVwID0gMHg4MDAwMDA7CisJLyogY2lzX3JlYWRhYmxlIHdhbnRzIHRvIG1hcCAyeCBtYXBfc2l6ZSAqLworCWlmIChzdGVwIDwgMiAqIHMtPm1hcF9zaXplKQorCQlzdGVwID0gMiAqIHMtPm1hcF9zaXplOworCWZvciAoaSA9IGogPSBiYXNlOyBpIDwgYmFzZStudW07IGkgPSBqICsgc3RlcCkgeworCQlpZiAoIWZhaWwpIHsKKwkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSBzdGVwKSB7CisJCQkJaWYgKGNpc19yZWFkYWJsZShzLCBqLCBzdGVwKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlmYWlsID0gKChpID09IGJhc2UpICYmIChqID09IGJhc2UrbnVtKSk7CisJCX0KKwkJaWYgKGZhaWwpIHsKKwkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSAyKnN0ZXApCisJCQkJaWYgKGNoZWNrc3VtX21hdGNoKHMsIGosIHN0ZXApICYmCisJCQkJCWNoZWNrc3VtX21hdGNoKHMsIGogKyBzdGVwLCBzdGVwKSkKKwkJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgIT0gaikgeworCQkJaWYgKCFiYWQpCisJCQkJcHJpbnRrKCIgZXhjbHVkaW5nIik7CisJCQlwcmludGsoIiAlIzA1bHgtJSMwNWx4IiwgaSwgai0xKTsKKwkJCXN1Yl9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGIsIGksIGotaSk7CisJCQliYWQgKz0gai1pOworCQl9CiAJfQotCWlmIChmYWlsKSB7Ci0JICAgIGZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSAyKnN0ZXApCi0JCWlmIChjaGVja3N1bV9tYXRjaChzLCBqLCBzdGVwKSAmJgotCQkgICAgY2hlY2tzdW1fbWF0Y2gocywgaiArIHN0ZXAsIHN0ZXApKQotCQkgICAgYnJlYWs7Ci0JfQotCWlmIChpICE9IGopIHsKLQkgICAgaWYgKCFiYWQpIHByaW50aygiIGV4Y2x1ZGluZyIpOwotCSAgICBwcmludGsoIiAlIzA1bHgtJSMwNWx4IiwgaSwgai0xKTsKLQkgICAgc3ViX2ludGVydmFsKCZzX2RhdGEtPm1lbV9kYiwgaSwgai1pKTsKLQkgICAgYmFkICs9IGotaTsKLQl9Ci0gICAgfQotICAgIHByaW50ayhiYWQgPyAiXG4iIDogIiBjbGVhbi5cbiIpOwotICAgIHJldHVybiAobnVtIC0gYmFkKTsKKwlwcmludGsoYmFkID8gIlxuIiA6ICIgY2xlYW4uXG4iKTsKKwlyZXR1cm4gbnVtIC0gYmFkOwogfQogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQpAQCAtNjU2LDcgKzY2Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIG5vbnN0YXRpY19maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsIHVfbG9uZyBudW0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpub25zdGF0aWNfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLAogCQl1X2xvbmcgYWxpZ24sIGludCBsb3csIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gbWFrZV9yZXNvdXJjZSgwLCBudW0sIElPUkVTT1VSQ0VfTUVNLCBkZXZfbmFtZSgmcy0+ZGV2KSk7CkBAIC03OTQsNyArODAxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAotCWZvciAoaT0wOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKIAkJcmVzID0gcy0+Y2JfZGV2LT5idXMtPnJlc291cmNlW2ldOwogCQlpZiAoIXJlcykKIAkJCWNvbnRpbnVlOwpAQCAtOTA4LDE0ICs5MTUsMTQgQEAKIAlmb3IgKHAgPSBkYXRhLT5pb19kYi5uZXh0OyBwICE9ICZkYXRhLT5pb19kYjsgcCA9IHAtPm5leHQpIHsKIAkJaWYgKHJldCA+IChQQUdFX1NJWkUgLSAxMCkpCiAJCQljb250aW51ZTsKLQkJcmV0ICs9IHNucHJpbnRmICgmYnVmW3JldF0sIChQQUdFX1NJWkUgLSByZXQgLSAxKSwKLQkJCQkgIjB4JTA4bHggLSAweCUwOGx4XG4iLAotCQkJCSAoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UpLAotCQkJCSAoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CisJCXJldCArPSBzbnByaW50ZigmYnVmW3JldF0sIChQQUdFX1NJWkUgLSByZXQgLSAxKSwKKwkJCQkiMHglMDhseCAtIDB4JTA4bHhcbiIsCisJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlKSwKKwkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfaW9fZGIoc3RydWN0IGRldmljZSAqZGV2LApAQCAtOTI3LDEyICs5MzQsMTMgQEAKIAl1bnNpZ25lZCBpbnQgYWRkID0gQUREX01BTkFHRURfUkVTT1VSQ0U7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JcmV0ID0gc3NjYW5mIChidWYsICIrIDB4JWx4IC0gMHglbHgiLCAmc3RhcnRfYWRkciwgJmVuZF9hZGRyKTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiKyAweCVseCAtIDB4JWx4IiwgJnN0YXJ0X2FkZHIsICZlbmRfYWRkcik7CiAJaWYgKHJldCAhPSAyKSB7Ci0JCXJldCA9IHNzY2FuZiAoYnVmLCAiLSAweCVseCAtIDB4JWx4IiwgJnN0YXJ0X2FkZHIsICZlbmRfYWRkcik7CisJCXJldCA9IHNzY2FuZihidWYsICItIDB4JWx4IC0gMHglbHgiLCAmc3RhcnRfYWRkciwgJmVuZF9hZGRyKTsKIAkJYWRkID0gUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0U7CiAJCWlmIChyZXQgIT0gMikgewotCQkJcmV0ID0gc3NjYW5mIChidWYsICIweCVseCAtIDB4JWx4IiwgJnN0YXJ0X2FkZHIsICZlbmRfYWRkcik7CisJCQlyZXQgPSBzc2NhbmYoYnVmLCAiMHglbHggLSAweCVseCIsICZzdGFydF9hZGRyLAorCQkJCSZlbmRfYWRkcik7CiAJCQlhZGQgPSBBRERfTUFOQUdFRF9SRVNPVVJDRTsKIAkJCWlmIChyZXQgIT0gMikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk2MywxNCArOTcxLDE0IEBACiAJZm9yIChwID0gZGF0YS0+bWVtX2RiLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYjsgcCA9IHAtPm5leHQpIHsKIAkJaWYgKHJldCA+IChQQUdFX1NJWkUgLSAxMCkpCiAJCQljb250aW51ZTsKLQkJcmV0ICs9IHNucHJpbnRmICgmYnVmW3JldF0sIChQQUdFX1NJWkUgLSByZXQgLSAxKSwKLQkJCQkgIjB4JTA4bHggLSAweCUwOGx4XG4iLAotCQkJCSAoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UpLAotCQkJCSAoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CisJCXJldCArPSBzbnByaW50ZigmYnVmW3JldF0sIChQQUdFX1NJWkUgLSByZXQgLSAxKSwKKwkJCQkiMHglMDhseCAtIDB4JTA4bHhcbiIsCisJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlKSwKKwkJCQkoKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UgKyBwLT5udW0gLSAxKSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWVtX2RiKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTk4MiwxMiArOTkwLDEzIEBACiAJdW5zaWduZWQgaW50IGFkZCA9IEFERF9NQU5BR0VEX1JFU09VUkNFOwogCXNzaXplX3QgcmV0ID0gMDsKIAotCXJldCA9IHNzY2FuZiAoYnVmLCAiKyAweCVseCAtIDB4JWx4IiwgJnN0YXJ0X2FkZHIsICZlbmRfYWRkcik7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIisgMHglbHggLSAweCVseCIsICZzdGFydF9hZGRyLCAmZW5kX2FkZHIpOwogCWlmIChyZXQgIT0gMikgewotCQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIi0gMHglbHggLSAweCVseCIsICZzdGFydF9hZGRyLCAmZW5kX2FkZHIpOworCQlyZXQgPSBzc2NhbmYoYnVmLCAiLSAweCVseCAtIDB4JWx4IiwgJnN0YXJ0X2FkZHIsICZlbmRfYWRkcik7CiAJCWFkZCA9IFJFTU9WRV9NQU5BR0VEX1JFU09VUkNFOwogCQlpZiAocmV0ICE9IDIpIHsKLQkJCXJldCA9IHNzY2FuZiAoYnVmLCAiMHglbHggLSAweCVseCIsICZzdGFydF9hZGRyLCAmZW5kX2FkZHIpOworCQkJcmV0ID0gc3NjYW5mKGJ1ZiwgIjB4JWx4IC0gMHglbHgiLCAmc3RhcnRfYWRkciwKKwkJCQkmZW5kX2FkZHIpOwogCQkJYWRkID0gQUREX01BTkFHRURfUkVTT1VSQ0U7CiAJCQlpZiAocmV0ICE9IDIpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCmluZGV4IDc4ZDVhYWIuLjdhNDU2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHNzY2FuZiAoYnVmLCAiMHgleFxuIiwgJm1hc2spOworCXJldCA9IHNzY2FuZihidWYsICIweCV4XG4iLCAmbWFzayk7CiAKIAlpZiAocmV0ID09IDEpIHsKIAkJcy0+aXJxX21hc2sgJj0gbWFzazsKQEAgLTI3OCw3ICsyNzgsNyBAQAogIGZyZWVfdHVwbGU6CiAJa2ZyZWUodHVwbGVidWZmZXIpOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTMwOCw3ICszMDgsNyBAQAogCQljb3VudCA9IHBjY2FyZF9leHRyYWN0X2NpcyhzLCBidWYsIG9mZiwgY291bnQpOwogCX0KIAotCXJldHVybiAoY291bnQpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggOGJlNGNjNC4uZTRkMTJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBDaGFuZ2Vsb2c6CiAgKiBBdWcgMjAwMjogTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KICAqIAlEeW5hbWljYWxseSBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGJyaWRnZSByZXNvdXJjZQotICogCQorICoKICAqIE1heSAyMDAzOiBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+CiAgKiAJTWVyZ2UgcGNpX3NvY2tldC5jIGFuZCB5ZW50YS5jIGludG8gb25lIGZpbGUKICAqLwpAQCAtMTYsMTMgKzE2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KLQogI2luY2x1ZGUgInllbnRhX3NvY2tldC5oIgogI2luY2x1ZGUgImk4MjM2NS5oIgogCkBAIC01NSw3ICs1NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgb3ZlcnJpZGVfYmlvczsKIG1vZHVsZV9wYXJhbShvdmVycmlkZV9iaW9zLCB1aW50LCAwMDAwKTsKLU1PRFVMRV9QQVJNX0RFU0MgKG92ZXJyaWRlX2Jpb3MsICJ5ZW50YSBpZ25vcmUgYmlvcyByZXNvdXJjZSBhbGxvY2F0aW9uIik7CitNT0RVTEVfUEFSTV9ERVNDKG92ZXJyaWRlX2Jpb3MsICJ5ZW50YSBpZ25vcmUgYmlvcyByZXNvdXJjZSBhbGxvY2F0aW9uIik7CiAKIC8qCiAgKiBHZW5lcmF0ZSBlYXN5LXRvLXVzZSB3YXlzIG9mIHJlYWRpbmcgYSBjYXJkYnVzIHNvY2tldHMKQEAgLTIzNywyNCArMjM2LDQyIEBACiAJCS8qIGk4MjM2NVNMLURGIHN0eWxlICovCiAJCWlmIChzb2NrZXQtPmZsYWdzICYgWUVOVEFfMTZCSVRfUE9XRVJfREYpIHsKIAkJCXN3aXRjaCAoc3RhdGUtPlZjYykgewotCQkJY2FzZSAzMzogcmVnIHw9IEkzNjVfVkNDXzNWOyBicmVhazsKLQkJCWNhc2UgNTA6IHJlZyB8PSBJMzY1X1ZDQ181VjsgYnJlYWs7Ci0JCQlkZWZhdWx0OiByZWcgPSAwOyBicmVhazsKKwkJCWNhc2UgMzM6CisJCQkJcmVnIHw9IEkzNjVfVkNDXzNWOworCQkJCWJyZWFrOworCQkJY2FzZSA1MDoKKwkJCQlyZWcgfD0gSTM2NV9WQ0NfNVY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJlZyA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlzd2l0Y2ggKHN0YXRlLT5WcHApIHsKIAkJCWNhc2UgMzM6Ci0JCQljYXNlIDUwOiByZWcgfD0gSTM2NV9WUFAxXzVWOyBicmVhazsKLQkJCWNhc2UgMTIwOiByZWcgfD0gSTM2NV9WUFAxXzEyVjsgYnJlYWs7CisJCQljYXNlIDUwOgorCQkJCXJlZyB8PSBJMzY1X1ZQUDFfNVY7CisJCQkJYnJlYWs7CisJCQljYXNlIDEyMDoKKwkJCQlyZWcgfD0gSTM2NV9WUFAxXzEyVjsKKwkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGk4MjM2NVNMLUIgc3R5bGUgKi8KIAkJCXN3aXRjaCAoc3RhdGUtPlZjYykgewotCQkJY2FzZSA1MDogcmVnIHw9IEkzNjVfVkNDXzVWOyBicmVhazsKLQkJCWRlZmF1bHQ6IHJlZyA9IDA7IGJyZWFrOworCQkJY2FzZSA1MDoKKwkJCQlyZWcgfD0gSTM2NV9WQ0NfNVY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJlZyA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlzd2l0Y2ggKHN0YXRlLT5WcHApIHsKLQkJCWNhc2UgNTA6IHJlZyB8PSBJMzY1X1ZQUDFfNVYgfCBJMzY1X1ZQUDJfNVY7IGJyZWFrOwotCQkJY2FzZSAxMjA6IHJlZyB8PSBJMzY1X1ZQUDFfMTJWIHwgSTM2NV9WUFAyXzEyVjsgYnJlYWs7CisJCQljYXNlIDUwOgorCQkJCXJlZyB8PSBJMzY1X1ZQUDFfNVYgfCBJMzY1X1ZQUDJfNVY7CisJCQkJYnJlYWs7CisJCQljYXNlIDEyMDoKKwkJCQlyZWcgfD0gSTM2NV9WUFAxXzEyViB8IEkzNjVfVlBQMl8xMlY7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIApAQCAtMjYzLDE0ICsyODAsMjYgQEAKIAl9IGVsc2UgewogCQl1MzIgcmVnID0gMDsJLyogQ0JfU0NfU1RQQ0xLPyAqLwogCQlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKLQkJY2FzZSAzMzogcmVnID0gQ0JfU0NfVkNDXzNWOyBicmVhazsKLQkJY2FzZSA1MDogcmVnID0gQ0JfU0NfVkNDXzVWOyBicmVhazsKLQkJZGVmYXVsdDogcmVnID0gMDsgYnJlYWs7CisJCWNhc2UgMzM6CisJCQlyZWcgPSBDQl9TQ19WQ0NfM1Y7CisJCQlicmVhazsKKwkJY2FzZSA1MDoKKwkJCXJlZyA9IENCX1NDX1ZDQ181VjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmVnID0gMDsKKwkJCWJyZWFrOwogCQl9CiAJCXN3aXRjaCAoc3RhdGUtPlZwcCkgewotCQljYXNlIDMzOiAgcmVnIHw9IENCX1NDX1ZQUF8zVjsgYnJlYWs7Ci0JCWNhc2UgNTA6ICByZWcgfD0gQ0JfU0NfVlBQXzVWOyBicmVhazsKLQkJY2FzZSAxMjA6IHJlZyB8PSBDQl9TQ19WUFBfMTJWOyBicmVhazsKKwkJY2FzZSAzMzoKKwkJCXJlZyB8PSBDQl9TQ19WUFBfM1Y7CisJCQlicmVhazsKKwkJY2FzZSA1MDoKKwkJCXJlZyB8PSBDQl9TQ19WUFBfNVY7CisJCQlicmVhazsKKwkJY2FzZSAxMjA6CisJCQlyZWcgfD0gQ0JfU0NfVlBQXzEyVjsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChyZWcgIT0gY2JfcmVhZGwoc29ja2V0LCBDQl9TT0NLRVRfQ09OVFJPTCkpCiAJCQljYl93cml0ZWwoc29ja2V0LCBDQl9TT0NLRVRfQ09OVFJPTCwgcmVnKTsKQEAgLTMxNCwyMyArMzQzLDI5IEBACiAKIAkJcmVnID0gZXhjYV9yZWFkYihzb2NrZXQsIEkzNjVfUE9XRVIpICYgKEkzNjVfVkNDX01BU0t8STM2NV9WUFAxX01BU0spOwogCQlyZWcgfD0gSTM2NV9QV1JfTk9SRVNFVDsKLQkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1BXUl9BVVRPKSByZWcgfD0gSTM2NV9QV1JfQVVUTzsKLQkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX09VVFBVVF9FTkEpIHJlZyB8PSBJMzY1X1BXUl9PVVQ7CisJCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19QV1JfQVVUTykKKwkJCXJlZyB8PSBJMzY1X1BXUl9BVVRPOworCQlpZiAoc3RhdGUtPmZsYWdzICYgU1NfT1VUUFVUX0VOQSkKKwkJCXJlZyB8PSBJMzY1X1BXUl9PVVQ7CiAJCWlmIChleGNhX3JlYWRiKHNvY2tldCwgSTM2NV9QT1dFUikgIT0gcmVnKQogCQkJZXhjYV93cml0ZWIoc29ja2V0LCBJMzY1X1BPV0VSLCByZWcpOwogCiAJCS8qIENTQyBpbnRlcnJ1cHQ6IG5vIElTQSBpcnEgZm9yIENTQyAqLwogCQlyZWcgPSBJMzY1X0NTQ19ERVRFQ1Q7CiAJCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19JT0NBUkQpIHsKLQkJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19TVFNDSEcpIHJlZyB8PSBJMzY1X0NTQ19TVFNDSEc7CisJCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfU1RTQ0hHKQorCQkJCXJlZyB8PSBJMzY1X0NTQ19TVFNDSEc7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfQkFUREVBRCkgcmVnIHw9IEkzNjVfQ1NDX0JWRDE7Ci0JCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfQkFUV0FSTikgcmVnIHw9IEkzNjVfQ1NDX0JWRDI7Ci0JCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfUkVBRFkpIHJlZyB8PSBJMzY1X0NTQ19SRUFEWTsKKwkJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19CQVRERUFEKQorCQkJCXJlZyB8PSBJMzY1X0NTQ19CVkQxOworCQkJaWYgKHN0YXRlLT5jc2NfbWFzayAmIFNTX0JBVFdBUk4pCisJCQkJcmVnIHw9IEkzNjVfQ1NDX0JWRDI7CisJCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfUkVBRFkpCisJCQkJcmVnIHw9IEkzNjVfQ1NDX1JFQURZOwogCQl9CiAJCWV4Y2Ffd3JpdGViKHNvY2tldCwgSTM2NV9DU0NJTlQsIHJlZyk7CiAJCWV4Y2FfcmVhZGIoc29ja2V0LCBJMzY1X0NTQyk7Ci0JCWlmKHNvY2stPnpvb21fdmlkZW8pCisJCWlmIChzb2NrLT56b29tX3ZpZGVvKQogCQkJc29jay0+em9vbV92aWRlbyhzb2NrLCBzdGF0ZS0+ZmxhZ3MgJiBTU19aVkNBUkQpOwogCX0KIAljb25maWdfd3JpdGV3KHNvY2tldCwgQ0JfQlJJREdFX0NPTlRST0wsIGJyaWRnZSk7CkBAIC0zNjgsOSArNDAzLDEyIEBACiAJZXhjYV93cml0ZXcoc29ja2V0LCBJMzY1X0lPKG1hcCkrSTM2NV9XX1NUT1AsIGlvLT5zdG9wKTsKIAogCWlvY3RsID0gZXhjYV9yZWFkYihzb2NrZXQsIEkzNjVfSU9DVEwpICYgfkkzNjVfSU9DVExfTUFTSyhtYXApOwotCWlmIChpby0+ZmxhZ3MgJiBNQVBfMFdTKSBpb2N0bCB8PSBJMzY1X0lPQ1RMXzBXUyhtYXApOwotCWlmIChpby0+ZmxhZ3MgJiBNQVBfMTZCSVQpIGlvY3RsIHw9IEkzNjVfSU9DVExfMTZCSVQobWFwKTsKLQlpZiAoaW8tPmZsYWdzICYgTUFQX0FVVE9TWikgaW9jdGwgfD0gSTM2NV9JT0NUTF9JT0NTMTYobWFwKTsKKwlpZiAoaW8tPmZsYWdzICYgTUFQXzBXUykKKwkJaW9jdGwgfD0gSTM2NV9JT0NUTF8wV1MobWFwKTsKKwlpZiAoaW8tPmZsYWdzICYgTUFQXzE2QklUKQorCQlpb2N0bCB8PSBJMzY1X0lPQ1RMXzE2QklUKG1hcCk7CisJaWYgKGlvLT5mbGFncyAmIE1BUF9BVVRPU1opCisJCWlvY3RsIHw9IEkzNjVfSU9DVExfSU9DUzE2KG1hcCk7CiAJZXhjYV93cml0ZWIoc29ja2V0LCBJMzY1X0lPQ1RMLCBpb2N0bCk7CiAKIAlpZiAoaW8tPmZsYWdzICYgTUFQX0FDVElWRSkKQEAgLTQxNiwxMCArNDU0LDE3IEBACiAKIAl3b3JkID0gKHN0b3AgPj4gMTIpICYgMHgwZmZmOwogCXN3aXRjaCAodG9fY3ljbGVzKG1lbS0+c3BlZWQpKSB7Ci0JCWNhc2UgMDogYnJlYWs7Ci0JCWNhc2UgMTogIHdvcmQgfD0gSTM2NV9NRU1fV1MwOyBicmVhazsKLQkJY2FzZSAyOiAgd29yZCB8PSBJMzY1X01FTV9XUzE7IGJyZWFrOwotCQlkZWZhdWx0OiB3b3JkIHw9IEkzNjVfTUVNX1dTMSB8IEkzNjVfTUVNX1dTMDsgYnJlYWs7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXdvcmQgfD0gSTM2NV9NRU1fV1MwOworCQlicmVhazsKKwljYXNlIDI6CisJCXdvcmQgfD0gSTM2NV9NRU1fV1MxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3b3JkIHw9IEkzNjVfTUVNX1dTMSB8IEkzNjVfTUVNX1dTMDsKKwkJYnJlYWs7CiAJfQogCWV4Y2Ffd3JpdGV3KHNvY2tldCwgSTM2NV9NRU0obWFwKSArIEkzNjVfV19TVE9QLCB3b3JkKTsKIApAQCAtNTQ3LDkgKzU5Miw5IEBACiAgKiBtYXggNCBNQiwgbWluIDE2IGtCLiBXZSB0cnkgdmVyeSBoYXJkIHRvIG5vdCBnZXQgYmVsb3cKICAqIHRoZSAiQUNDIiB2YWx1ZXMsIHRob3VnaC4KICAqLwotI2RlZmluZSBCUklER0VfTUVNX01BWCA0KjEwMjQqMTAyNAotI2RlZmluZSBCUklER0VfTUVNX0FDQyAxMjgqMTAyNAotI2RlZmluZSBCUklER0VfTUVNX01JTiAxNioxMDI0CisjZGVmaW5lIEJSSURHRV9NRU1fTUFYICg0KjEwMjQqMTAyNCkKKyNkZWZpbmUgQlJJREdFX01FTV9BQ0MgKDEyOCoxMDI0KQorI2RlZmluZSBCUklER0VfTUVNX01JTiAoMTYqMTAyNCkKIAogI2RlZmluZSBCUklER0VfSU9fTUFYIDUxMgogI2RlZmluZSBCUklER0VfSU9fQUNDIDI1NgpAQCAtNTc0LDcgKzYxOSw3IEBACiAJCWludCBpOwogCQlzaXplID0gQlJJREdFX01FTV9NQVg7CiAJCWlmIChzaXplID4gYXZhaWwvOCkgewotCQkJc2l6ZT0oYXZhaWwrMSkvODsKKwkJCXNpemUgPSAoYXZhaWwrMSkvODsKIAkJCS8qIHJvdW5kIHNpemUgZG93biB0byBuZXh0IHBvd2VyIG9mIDIgKi8KIAkJCWkgPSAwOwogCQkJd2hpbGUgKChzaXplIC89IDIpICE9IDApCkBAIC01OTAsNyArNjM1LDcgQEAKIAogCWRvIHsKIAkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKHJvb3QsIHJlcywgc2l6ZSwgc3RhcnQsIGVuZCwgYWxpZ24sCi0JCQkJICAgICAgTlVMTCwgTlVMTCk9PTApIHsKKwkJCQkgICAgICBOVUxMLCBOVUxMKSA9PSAwKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlzaXplID0gc2l6ZS8yOwpAQCAtNjA1LDggKzY1MCw4IEBACiAJCQkgICAgdTMyIG1pbikKIHsKIAlpbnQgaTsKLQlmb3IgKGk9MDsgaTxQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKiByb290ID0gc29ja2V0LT5kZXYtPmJ1cy0+cmVzb3VyY2VbaV07CisJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcm9vdCA9IHNvY2tldC0+ZGV2LT5idXMtPnJlc291cmNlW2ldOwogCQlpZiAoIXJvb3QpCiAJCQljb250aW51ZTsKIApAQCAtNzA0LDcgKzc0OSw3IEBACiBzdGF0aWMgdm9pZCB5ZW50YV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQpCiB7CiAJaW50IGk7Ci0JZm9yIChpPTA7aTw0O2krKykgeworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpyZXM7CiAJCXJlcyA9IHNvY2tldC0+ZGV2LT5yZXNvdXJjZSArIFBDSV9CUklER0VfUkVTT1VSQ0VTICsgaTsKIAkJaWYgKHJlcy0+c3RhcnQgIT0gMCAmJiByZXMtPmVuZCAhPSAwKQpAQCAtNzI2LDcgKzc3MSw3IEBACiAKIAkvKiB3ZSBkb24ndCB3YW50IGEgZHlpbmcgc29ja2V0IHJlZ2lzdGVyZWQgKi8KIAlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNvY2stPnNvY2tldCk7Ci0JCisKIAkvKiBEaXNhYmxlIGFsbCBldmVudHMgc28gd2UgZG9uJ3QgZGllIGluIGFuIElSUSBzdG9ybSAqLwogCWNiX3dyaXRlbChzb2NrLCBDQl9TT0NLRVRfTUFTSywgMHgwKTsKIAlleGNhX3dyaXRlYihzb2NrLCBJMzY1X0NTQ0lOVCwgMCk7CkBAIC04OTgsNyArOTQzLDcgQEAKIHsKIAlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSAoc3RydWN0IHllbnRhX3NvY2tldCAqKSBkZXZfaWQ7CiAJdTggY3NjOwotICAgICAgICB1MzIgY2JfZXZlbnQ7CisJdTMyIGNiX2V2ZW50OwogCiAJLyogQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyBmb3IgdGhlIGV2ZW50ICovCiAJY2JfZXZlbnQgPSBjYl9yZWFkbChzb2NrZXQsIENCX1NPQ0tFVF9FVkVOVCk7CkBAIC0xMDE5LDcgKzEwNjQsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAl1bnNpZ25lZCBjaGFyIHVwcGVyX2xpbWl0OwotIAkvKgorCS8qCiAJICogV2Ugb25seSBjaGVjayBhbmQgZml4IHRoZSBwYXJlbnQgYnJpZGdlOiBBbGwgc3lzdGVtcyB3aGljaCBuZWVkCiAJICogdGhpcyBmaXh1cCB0aGF0IGhhdmUgYmVlbiByZXZpZXdlZCBhcmUgbGFwdG9wcyBhbmQgdGhlIG9ubHkgYnJpZGdlCiAJICogd2hpY2ggbmVlZGVkIGZpeGluZyB3YXMgdGhlIHBhcmVudCBicmlkZ2Ugb2YgdGhlIENhcmRCdXMgYnJpZGdlOgpAQCAtMTAzOCw3ICsxMDgzLDcgQEAKIAogCS8qIGNoZWNrIHRoZSBidXMgcmFuZ2VzIG9mIGFsbCBzaWxibGluZyBicmlkZ2VzIHRvIHByZXZlbnQgb3ZlcmxhcCAqLwogCWxpc3RfZm9yX2VhY2godG1wLCAmYnJpZGdlX3RvX2ZpeC0+cGFyZW50LT5jaGlsZHJlbikgewotCQlzdHJ1Y3QgcGNpX2J1cyAqIHNpbGJsaW5nID0gcGNpX2J1c19iKHRtcCk7CisJCXN0cnVjdCBwY2lfYnVzICpzaWxibGluZyA9IHBjaV9idXNfYih0bXApOwogCQkvKgogCQkgKiBJZiB0aGUgc2lsYmxpbmcgaGFzIGEgaGlnaGVyIHNlY29uZGFyeSBidXMgbnVtYmVyCiAJCSAqIGFuZCBpdCdzIHNlY29uZGFyeSBpcyBlcXVhbCBvciBzbWFsbGVyIHRoYW4gb3VyCkBAIC0xMDgzLDcgKzExMjgsNyBAQAogICogaW50ZXJydXB0LCBhbmQgdGhhdCB3ZSBjYW4gbWFwIHRoZSBjYXJkYnVzIGFyZWEuIEZpbGwgaW4gdGhlCiAgKiBzb2NrZXQgaW5mb3JtYXRpb24gc3RydWN0dXJlLi4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgeWVudGFfcHJvYmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHllbnRhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQ7CiAJaW50IHJldDsKQEAgLTEyODUsNyArMTMzMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB5ZW50YV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgeWVudGFfcG1fb3BzID0gewogCS5zdXNwZW5kX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCiAJLnJlc3VtZV9ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCiAJLnJlc3VtZSA9IHllbnRhX2Rldl9yZXN1bWUsCkBAIC0xMzAyLDcgKzEzNDcsNyBAQAogI2RlZmluZSBZRU5UQV9QTV9PUFMJTlVMTAogI2VuZGlmCiAKLSNkZWZpbmUgQ0JfSUQodmVuZCxkZXYsdHlwZSkJCQkJXAorI2RlZmluZSBDQl9JRCh2ZW5kLCBkZXYsIHR5cGUpCQkJCVwKIAl7CQkJCQkJXAogCQkudmVuZG9yCQk9IHZlbmQsCQkJXAogCQkuZGV2aWNlCQk9IGRldiwJCQlcCkBAIC0xMzEzLDcgKzEzNTgsNyBAQAogCQkuZHJpdmVyX2RhdGEJPSBDQVJEQlVTX1RZUEVfIyN0eXBlLAlcCiAJfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeWVudGFfdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeWVudGFfdGFibGVbXSA9IHsKIAlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJXzEwMzEsIFRJKSwKIAogCS8qCkBAIC0xNDAzLDEzICsxNDQ4LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHllbnRhX3NvY2tldF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIgKCZ5ZW50YV9jYXJkYnVzX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnllbnRhX2NhcmRidXNfZHJpdmVyKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2V4aXQgeWVudGFfc29ja2V0X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgeWVudGFfc29ja2V0X2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZ5ZW50YV9jYXJkYnVzX2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ5ZW50YV9jYXJkYnVzX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggNTVjYTM5ZC4uZmM1YmY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0zMzQsNiArMzM0LDggQEAKIAlkZXBlbmRzIG9uIEhPVFBMVUdfUENJCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlzZWxlY3QgSFdNT04KKwlzZWxlY3QgTEVEU19DTEFTUworCXNlbGVjdCBORVdfTEVEUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBGbi1GeCBrZXlzIG9uIEVlZSBQQyBsYXB0b3BzLgogCkBAIC0zNjUsNiArMzY3LDE4IEBACiAJICBJdCBpcyBzYWZlIHRvIGVuYWJsZSB0aGlzIGRyaXZlciBldmVuIGlmIHlvdXIgRFNEVCBkb2Vzbid0IGRlZmluZQogCSAgYW55IEFDUEktV01JIGRldmljZXMuCiAKK2NvbmZpZyBNU0lfV01JCisJdHJpc3RhdGUgIk1TSSBXTUkgZXh0cmFzIgorCWRlcGVuZHMgb24gQUNQSV9XTUkKKwlkZXBlbmRzIG9uIElOUFVUCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJc2VsZWN0IElOUFVUX1NQQVJTRUtNQVAKKwloZWxwCisJIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBXTUktYmFzZWQgaG90a2V5cyBvbiBNU0kgbGFwdG9wcy4KKworCSBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKKwkgYmUgY2FsbGVkIG1zaS13bWkuCisKIGNvbmZpZyBBQ1BJX0FTVVMKIAl0cmlzdGF0ZSAiQVNVUy9NZWRpb24gTGFwdG9wIEV4dHJhcyAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBBQ1BJCkBAIC00MzUsNCArNDQ5LDE5IEBACiAKIAkgIElmIHlvdSBoYXZlIGEgbGVnYWN5IGZyZWUgVG9zaGliYSBsYXB0b3AgKHN1Y2ggYXMgdGhlIExpYnJldHRvIEwxCiAJICBzZXJpZXMpLCBzYXkgWS4KKworY29uZmlnIFRPU0hJQkFfQlRfUkZLSUxMCisJdHJpc3RhdGUgIlRvc2hpYmEgQmx1ZXRvb3RoIFJGS2lsbCBzd2l0Y2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFDUEkKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEJsdWV0b290aCBldmVudHMgZm9yIHRoZSBSRktpbGwKKwkgIHN3aXRjaCBvbiBtb2Rlcm4gVG9zaGliYSBsYXB0b3BzIHdpdGggZnVsbCBBQ1BJIHN1cHBvcnQgYW5kCisJICBhbiBSRktpbGwgc3dpdGNoLgorCisJICBUaGlzIGRyaXZlciBoYW5kbGVzIFJGS2lsbCBldmVudHMgZm9yIHRoZSBUT1M2MjA1IEJsdWV0b290aCwKKwkgIGFuZCByZS1lbmFibGVzIGl0IHdoZW4gdGhlIHN3aXRjaCBpcyBzZXQgYmFjayB0byB0aGUgJ29uJworCSAgcG9zaXRpb24uCisKKwkgIElmIHlvdSBoYXZlIGEgbW9kZXJuIFRvc2hpYmEgbGFwdG9wIHdpdGggYSBCbHVldG9vdGggYW5kIGFuCisJICBSRktpbGwgc3dpdGNoIChzdWNoIGFzIHRoZSBQb3J0ZWdlIFI1MDApLCBzYXkgWS4KIGVuZGlmICMgWDg2X1BMQVRGT1JNX0RFVklDRVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKaW5kZXggZDFjMTYyMS4uYjc0NzRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDggQEAKIG9iai0kKENPTkZJR19QQU5BU09OSUNfTEFQVE9QKQkrPSBwYW5hc29uaWMtbGFwdG9wLm8KIG9iai0kKENPTkZJR19JTlRFTF9NRU5MT1cpCSs9IGludGVsX21lbmxvdy5vCiBvYmotJChDT05GSUdfQUNQSV9XTUkpCQkrPSB3bWkubworb2JqLSQoQ09ORklHX01TSV9XTUkpCQkrPSBtc2ktd21pLm8KIG9iai0kKENPTkZJR19BQ1BJX0FTVVMpCQkrPSBhc3VzX2FjcGkubwogb2JqLSQoQ09ORklHX1RPUFNUQVJfTEFQVE9QKQkrPSB0b3BzdGFyLWxhcHRvcC5vCiBvYmotJChDT05GSUdfQUNQSV9UT1NISUJBKQkrPSB0b3NoaWJhX2FjcGkubworb2JqLSQoQ09ORklHX1RPU0hJQkFfQlRfUkZLSUxMKQkrPSB0b3NoaWJhX2JsdWV0b290aC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKaW5kZXggYWI2NDUyMi4uNzliMTViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtNTIsNyArNTIsNyBAQAogICovCiAjdW5kZWYgU1RBUlRfSU5fS0VSTkVMX01PREUKIAotI2RlZmluZSBEUlZfVkVSICIwLjUuMTgiCisjZGVmaW5lIERSVl9WRVIgIjAuNS4yMCIKIAogLyoKICAqIEFjY29yZGluZyB0byB0aGUgQXRvbSBOMjcwIGRhdGFzaGVldCwKQEAgLTExMiwxMiArMTEyLDE0IEBACiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3Byb2R1Y3QsICJGb3JjZSBCSU9TIHByb2R1Y3QgYW5kIG9taXQgQklPUyBjaGVjayIpOwogCiAvKgotICogY21kX29mZjogdG8gc3dpdGNoIHRoZSBmYW4gY29tcGxldGVseSBvZmYgLyB0byBjaGVjayBpZiB0aGUgZmFuIGlzIG9mZgorICogY21kX29mZjogdG8gc3dpdGNoIHRoZSBmYW4gY29tcGxldGVseSBvZmYKKyAqIGNoa19vZmY6IHRvIGNoZWNrIGlmIHRoZSBmYW4gaXMgb2ZmCiAgKgljbWRfYXV0bzogdG8gc2V0IHRoZSBCSU9TIGluIGNvbnRyb2wgb2YgdGhlIGZhbi4gVGhlIEJJT1MgcmVndWxhdGVzIHRoZW4KICAqCQl0aGUgZmFuIHNwZWVkIGRlcGVuZGluZyBvbiB0aGUgdGVtcGVyYXR1cmUKICAqLwogc3RydWN0IGZhbmNtZCB7CiAJdTggY21kX29mZjsKKwl1OCBjaGtfb2ZmOwogCXU4IGNtZF9hdXRvOwogfTsKIApAQCAtMTM0LDMyICsxMzYsNDEgQEAKIC8qIFJlZ2lzdGVyIGFkZHJlc3NlcyBhbmQgdmFsdWVzIGZvciBkaWZmZXJlbnQgQklPUyB2ZXJzaW9ucyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBiaW9zX3NldHRpbmdzX3QgYmlvc190YmxbXSA9IHsKIAkvKiBBT0ExMTAgKi8KLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMDkiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHhhZiwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMDkiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgxZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgxZiwgMHgxZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHhhZiwgMHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHhhZiwgMHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHhhZiwgMHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHhhZiwgMHhhZiwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgyMSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTEwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgyMSwgMHgwMH0gfSwKIAkvKiBBT0ExNTAgKi8KLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKLQl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMxMTQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDEiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDQiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDciLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDgiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMDkiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKKwkvKiBBY2VyIDE0MTAgKi8KKwl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAogCS8qIHNwZWNpYWwgQklPUyAvIG90aGVyICovCi0JeyJHYXRld2F5IiwgIkFPQTExMCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MDB9IH0sCi0JeyJHYXRld2F5IiwgIkFPQTE1MCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCi0JeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDQiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgwMH0gfSwKLQl7IlBhY2thcmQgQmVsbCIsICJBT0ExMTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDAwfSB9LAotCXsiUGFja2FyZCBCZWxsIiwgIkFPQTE1MCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkFPQTExMCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkFPQTE1MCIsICJ2MC4zMTAzIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCisJeyJHYXRld2F5ICAgICAgICAgIiwgIkxUMzEgICAgICAgICAgICAiLCAidjEuMzEwMyAiLCAweDU1LCAweDU4LAorCQl7MHgxMCwgMHgwZiwgMHgwMH0gfSwKKwl7IkdhdGV3YXkgICAgICAgICAiLCAiTFQzMSAgICAgICAgICAgICIsICJ2MS4zMjAxICIsIDB4NTUsIDB4NTgsCisJCXsweDEwLCAweDBmLCAweDAwfSB9LAorCXsiR2F0ZXdheSAgICAgICAgICIsICJMVDMxICAgICAgICAgICAgIiwgInYxLjMzMDIgIiwgMHg1NSwgMHg1OCwKKwkJezB4MTAsIDB4MGYsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDQiLCAweDU1LCAweDU4LCB7MHgyMSwgMHgyMSwgMHgwMH0gfSwKKwl7IlBhY2thcmQgQmVsbCIsICJET0ExNTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDIwLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkFPQTExMCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiQU9BMTUwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKIAkvKiBwZXdwZXctdGVybWluYXRvciAqLwotCXsiIiwgIiIsICIiLCAwLCAwLCB7MCwgMH0gfQorCXsiIiwgIiIsICIiLCAwLCAwLCB7MCwgMCwgMH0gfQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiaW9zX3NldHRpbmdzX3QgKmJpb3NfY2ZnIF9fcmVhZF9tb3N0bHk7CkBAIC0xODMsNyArMTk0LDcgQEAKIAlpZiAoZWNfcmVhZChiaW9zX2NmZy0+ZmFucmVnLCAmZmFuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmFuICE9IGJpb3NfY2ZnLT5jbWQuY21kX29mZikKKwlpZiAoZmFuICE9IGJpb3NfY2ZnLT5jbWQuY2hrX29mZikKIAkJKnN0YXRlID0gQUNFUkhERl9GQU5fQVVUTzsKIAllbHNlCiAJCSpzdGF0ZSA9IEFDRVJIREZfRkFOX09GRjsKQEAgLTQ2MCw3ICs0NzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWNlcmhkZl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWNlcmhkZl9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSBhY2VyaGRmX3N1c3BlbmQsCiAJLmZyZWV6ZSAgPSBhY2VyaGRmX3N1c3BlbmQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggYjM5ZDJiYi4uNjFhMWM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC0yMjEsNiArMjIxLDcgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBhc3VzX2RldmljZV9pZHNbXSA9IHsKIAl7IkFUSzAxMDAiLCAwfSwKKwl7IkFUSzAxMDEiLCAwfSwKIAl7IiIsIDB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgYXN1c19kZXZpY2VfaWRzKTsKQEAgLTIzMiw2ICsyMzMsNyBAQAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhc3VzX2hvdGtfZHJpdmVyID0gewogCS5uYW1lID0gQVNVU19IT1RLX05BTUUsCiAJLmNsYXNzID0gQVNVU19IT1RLX0NMQVNTLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZHMgPSBhc3VzX2RldmljZV9pZHMsCiAJLmZsYWdzID0gQUNQSV9EUklWRVJfQUxMX05PVElGWV9FVkVOVFMsCiAJLm9wcyA9IHsKQEAgLTI5Myw2ICsyOTUsMTEgQEAKIGVudW0geyBLRV9LRVksIEtFX0VORCB9OwogCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBhc3VzX2tleW1hcFtdID0geworCXtLRV9LRVksIDB4MDIsIEtFWV9TQ1JFRU5MT0NLfSwKKwl7S0VfS0VZLCAweDA1LCBLRVlfV0xBTn0sCisJe0tFX0tFWSwgMHgwOCwgS0VZX0YxM30sCisJe0tFX0tFWSwgMHgxNywgS0VZX1pPT019LAorCXtLRV9LRVksIDB4MWYsIEtFWV9CQVRURVJZfSwKIAl7S0VfS0VZLCAweDMwLCBLRVlfVk9MVU1FVVB9LAogCXtLRV9LRVksIDB4MzEsIEtFWV9WT0xVTUVET1dOfSwKIAl7S0VfS0VZLCAweDMyLCBLRVlfTVVURX0sCkBAIC0zMTIsOCArMzE5LDExIEBACiAJe0tFX0tFWSwgMHg1RiwgS0VZX1dMQU59LAogCXtLRV9LRVksIDB4NjAsIEtFWV9TV0lUQ0hWSURFT01PREV9LAogCXtLRV9LRVksIDB4NjEsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NkIsIEJUTl9UT1VDSH0sIC8qIExvY2sgTW91c2UgKi8KKwl7S0VfS0VZLCAweDYyLCBLRVlfU1dJVENIVklERU9NT0RFfSwKKwl7S0VfS0VZLCAweDYzLCBLRVlfU1dJVENIVklERU9NT0RFfSwKKwl7S0VfS0VZLCAweDZCLCBLRVlfRjEzfSwgLyogTG9jayBUb3VjaHBhZCAqLwogCXtLRV9LRVksIDB4ODIsIEtFWV9DQU1FUkF9LAorCXtLRV9LRVksIDB4ODgsIEtFWV9XTEFOIH0sCiAJe0tFX0tFWSwgMHg4QSwgS0VZX1BST0cxfSwKIAl7S0VfS0VZLCAweDk1LCBLRVlfTUVESUF9LAogCXtLRV9LRVksIDB4OTksIEtFWV9QSE9ORX0sCkBAIC0xMjQwLDkgKzEyNTAsNiBAQAogewogCWludCByZXN1bHQ7CiAKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlwcl9ub3RpY2UoIkFzdXMgTGFwdG9wIFN1cHBvcnQgdmVyc2lvbiAlc1xuIiwKIAkgICAgICAgQVNVU19MQVBUT1BfVkVSU0lPTik7CiAKQEAgLTEyODMsOCArMTI5MCw4IEBACiAJaG90ay0+bGVkZF9zdGF0dXMgPSAweEZGRjsKIAogCS8qIFNldCBpbml0aWFsIHZhbHVlcyBvZiBsaWdodCBzZW5zb3IgYW5kIGxldmVsICovCi0JaG90ay0+bGlnaHRfc3dpdGNoID0gMTsJLyogRGVmYXVsdCB0byBsaWdodCBzZW5zb3IgZGlzYWJsZWQgKi8KLQlob3RrLT5saWdodF9sZXZlbCA9IDA7CS8qIGxldmVsIDUgZm9yIHNlbnNvciBzZW5zaXRpdml0eSAqLworCWhvdGstPmxpZ2h0X3N3aXRjaCA9IDA7CS8qIERlZmF1bHQgdG8gbGlnaHQgc2Vuc29yIGRpc2FibGVkICovCisJaG90ay0+bGlnaHRfbGV2ZWwgPSA1OwkvKiBsZXZlbCA1IGZvciBzZW5zb3Igc2Vuc2l0aXZpdHkgKi8KIAogCWlmIChsc19zd2l0Y2hfaGFuZGxlKQogCQlzZXRfbGlnaHRfc2Vuc19zd2l0Y2goaG90ay0+bGlnaHRfc3dpdGNoKTsKQEAgLTEzMDYsOSArMTMxMyw2IEBACiAKIHN0YXRpYyBpbnQgYXN1c19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCiB7Ci0JaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlrZnJlZShob3RrLT5uYW1lKTsKIAlrZnJlZShob3RrKTsKIApAQCAtMTQ0NCw5ICsxNDQ4LDYgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhc3VzX2hvdGtfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKaW5kZXggZGRmNTI0MC4uMGM5YzUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTQ2Niw2ICs0NjYsNyBAQAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhc3VzX2hvdGtfZHJpdmVyID0gewogCS5uYW1lID0gImFzdXNfYWNwaSIsCiAJLmNsYXNzID0gQUNQSV9IT1RLX0NMQVNTLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZHMgPSBhc3VzX2RldmljZV9pZHMsCiAJLmZsYWdzID0gQUNQSV9EUklWRVJfQUxMX05PVElGWV9FVkVOVFMsCiAJLm9wcyA9IHsKQEAgLTEzMzQsOSArMTMzNSw2IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJaW50IHJlc3VsdDsKIAotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXByaW50ayhLRVJOX05PVElDRSAiQXN1cyBMYXB0b3AgQUNQSSBFeHRyYXMgdmVyc2lvbiAlc1xuIiwKIAkgICAgICAgQVNVU19BQ1BJX1ZFUlNJT04pOwogCkBAIC0xMzkyLDkgKzEzOTAsNiBAQAogCiBzdGF0aWMgaW50IGFzdXNfaG90a19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJYXN1c19ob3RrX3JlbW92ZV9mcyhkZXZpY2UpOwogCiAJa2ZyZWUoaG90ayk7CkBAIC0xNDIyLDIxICsxNDE3LDE3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OwogCiAJYXN1c19wcm9jX2RpciA9IHByb2NfbWtkaXIoUFJPQ19BU1VTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFzdXNfcHJvY19kaXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBc3VzIEFDUEk6IFVuYWJsZSB0byBjcmVhdGUgL3Byb2MgZW50cnlcbiIpOworCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYXN1c19ob3RrX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYXN1c19ob3RrX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19BU1VTLCBhY3BpX3Jvb3RfZGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KIAkvKgogCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBrbHVkZ2UuICBXZSBvbmx5IHdhbnQgdGhpcyBtb2R1bGUgbG9hZGVkCiAJICogZm9yIEFTVVMgc3lzdGVtcywgYnV0IHRoZXJlJ3MgY3VycmVudGx5IG5vIHdheSB0byBwcm9iZSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwppbmRleCAxMTAwM2JiLi4xYTM4N2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KIAogI2RlZmluZSBDT01QQUxfRFJJVkVSX1ZFUlNJT04gIjAuMi42IgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCA3NDkwOWM0Li4zNzgwOTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKQEAgLTU4LDYgKzU4LDE0IEBACiBzdGF0aWMgaW50IGRhX251bV90b2tlbnM7CiBzdGF0aWMgc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX3Rva2VuICpkYV90b2tlbnM7CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsYXRmb3JtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJkZWxsLWxhcHRvcCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2U7CiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRlbGxfYmFja2xpZ2h0X2RldmljZTsKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICp3aWZpX3Jma2lsbDsKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICpibHVldG9vdGhfcmZraWxsOwpAQCAtNzQsNyArODIsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHZvaWQgcGFyc2VfZGFfdGFibGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQorc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2RhX3RhYmxlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKIHsKIAkvKiBGaW5hbCB0b2tlbiBpcyBhIHRlcm1pbmF0b3IsIHNvIHdlIGRvbid0IHdhbnQgdG8gY29weSBpdCAqLwogCWludCB0b2tlbnMgPSAoZG0tPmxlbmd0aC0xMSkvc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV90b2tlbiktMTsKQEAgLTEwMyw3ICsxMTEsNyBAQAogCWRhX251bV90b2tlbnMgKz0gdG9rZW5zOwogfQogCi1zdGF0aWMgdm9pZCBmaW5kX3Rva2Vucyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHZvaWQgKmR1bW15KQorc3RhdGljIHZvaWQgX19pbml0IGZpbmRfdG9rZW5zKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSwgdm9pZCAqZHVtbXkpCiB7CiAJc3dpdGNoIChkbS0+dHlwZSkgewogCWNhc2UgMHhkNDogLyogSW5kZXhlZCBJTyAqLwpAQCAtMTk3LDggKzIwNSw4IEBACiAJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKIAlzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdOwogCi0JaWYgKHN0YXR1cyAmIEJJVChiaXQpKQotCQlyZmtpbGxfc2V0X2h3X3N0YXRlKHJma2lsbCwgISEoc3RhdHVzICYgQklUKDE2KSkpOworCXJma2lsbF9zZXRfc3dfc3RhdGUocmZraWxsLCAhIShzdGF0dXMgJiBCSVQoYml0KSkpOworCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCAhKHN0YXR1cyAmIEJJVCgxNikpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGRlbGxfcmZraWxsX29wcyA9IHsKQEAgLTIwNiw3ICsyMTQsNyBAQAogCS5xdWVyeSA9IGRlbGxfcmZraWxsX3F1ZXJ5LAogfTsKIAotc3RhdGljIGludCBkZWxsX3NldHVwX3Jma2lsbCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZGVsbF9zZXR1cF9yZmtpbGwodm9pZCkKIHsKIAlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgc3RhdHVzOwpAQCAtMjE3LDcgKzIyNSw4IEBACiAJc3RhdHVzID0gYnVmZmVyLm91dHB1dFsxXTsKIAogCWlmICgoc3RhdHVzICYgKDE8PDJ8MTw8OCkpID09ICgxPDwyfDE8PDgpKSB7Ci0JCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJkZWxsLXdpZmkiLCBOVUxMLCBSRktJTExfVFlQRV9XTEFOLAorCQl3aWZpX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiZGVsbC13aWZpIiwgJnBsYXRmb3JtX2RldmljZS0+ZGV2LAorCQkJCQkgICBSRktJTExfVFlQRV9XTEFOLAogCQkJCQkgICAmZGVsbF9yZmtpbGxfb3BzLCAodm9pZCAqKSAxKTsKIAkJaWYgKCF3aWZpX3Jma2lsbCkgewogCQkJcmV0ID0gLUVOT01FTTsKQEAgLTIyOSw3ICsyMzgsOCBAQAogCX0KIAogCWlmICgoc3RhdHVzICYgKDE8PDN8MTw8OSkpID09ICgxPDwzfDE8PDkpKSB7Ci0JCWJsdWV0b290aF9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImRlbGwtYmx1ZXRvb3RoIiwgTlVMTCwKKwkJYmx1ZXRvb3RoX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiZGVsbC1ibHVldG9vdGgiLAorCQkJCQkJJnBsYXRmb3JtX2RldmljZS0+ZGV2LAogCQkJCQkJUkZLSUxMX1RZUEVfQkxVRVRPT1RILAogCQkJCQkJJmRlbGxfcmZraWxsX29wcywgKHZvaWQgKikgMik7CiAJCWlmICghYmx1ZXRvb3RoX3Jma2lsbCkgewpAQCAtMjQyLDcgKzI1Miw5IEBACiAJfQogCiAJaWYgKChzdGF0dXMgJiAoMTw8NHwxPDwxMCkpID09ICgxPDw0fDE8PDEwKSkgewotCQl3d2FuX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiZGVsbC13d2FuIiwgTlVMTCwgUkZLSUxMX1RZUEVfV1dBTiwKKwkJd3dhbl9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImRlbGwtd3dhbiIsCisJCQkJCSAgICZwbGF0Zm9ybV9kZXZpY2UtPmRldiwKKwkJCQkJICAgUkZLSUxMX1RZUEVfV1dBTiwKIAkJCQkJICAgJmRlbGxfcmZraWxsX29wcywgKHZvaWQgKikgMyk7CiAJCWlmICghd3dhbl9yZmtpbGwpIHsKIAkJCXJldCA9IC1FTk9NRU07CkBAIC0yNjgsNiArMjgwLDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgZGVsbF9jbGVhbnVwX3Jma2lsbCh2b2lkKQoreworCWlmICh3aWZpX3Jma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3Rlcih3aWZpX3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKKwl9CisJaWYgKGJsdWV0b290aF9yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoYmx1ZXRvb3RoX3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGJsdWV0b290aF9yZmtpbGwpOworCX0KKwlpZiAod3dhbl9yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIod3dhbl9yZmtpbGwpOworCQlyZmtpbGxfZGVzdHJveSh3d2FuX3Jma2lsbCk7CisJfQorfQorCiBzdGF0aWMgaW50IGRlbGxfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwpAQCAtMzI2LDExICszNTQsMjMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kcml2ZXI7CisJcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJkZWxsLWxhcHRvcCIsIC0xKTsKKwlpZiAoIXBsYXRmb3JtX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMTsKKwl9CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwbGF0Zm9ybV9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOworCiAJcmV0ID0gZGVsbF9zZXR1cF9yZmtpbGwoKTsKIAogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGVsbC1sYXB0b3A6IFVuYWJsZSB0byBzZXR1cCByZmtpbGxcbiIpOwotCQlnb3RvIG91dDsKKwkJZ290byBmYWlsX3Jma2lsbDsKIAl9CiAKICNpZmRlZiBDT05GSUdfQUNQSQpAQCAtMzUyLDEzICszOTIsMTMgQEAKIAlpZiAobWF4X2ludGVuc2l0eSkgewogCQlkZWxsX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKAogCQkJImRlbGxfYmFja2xpZ2h0IiwKLQkJCU5VTEwsIE5VTEwsCisJCQkmcGxhdGZvcm1fZGV2aWNlLT5kZXYsIE5VTEwsCiAJCQkmZGVsbF9vcHMpOwogCiAJCWlmIChJU19FUlIoZGVsbF9iYWNrbGlnaHRfZGV2aWNlKSkgewogCQkJcmV0ID0gUFRSX0VSUihkZWxsX2JhY2tsaWdodF9kZXZpY2UpOwogCQkJZGVsbF9iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBmYWlsX2JhY2tsaWdodDsKIAkJfQogCiAJCWRlbGxfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXhfaW50ZW5zaXR5OwpAQCAtMzY4LDEzICs0MDgsMTYgQEAKIAl9CiAKIAlyZXR1cm4gMDsKLW91dDoKLQlpZiAod2lmaV9yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKHdpZmlfcmZraWxsKTsKLQlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKLQkJcmZraWxsX3VucmVnaXN0ZXIoYmx1ZXRvb3RoX3Jma2lsbCk7Ci0JaWYgKHd3YW5fcmZraWxsKQotCQlyZmtpbGxfdW5yZWdpc3Rlcih3d2FuX3Jma2lsbCk7CisKK2ZhaWxfYmFja2xpZ2h0OgorCWRlbGxfY2xlYW51cF9yZmtpbGwoKTsKK2ZhaWxfcmZraWxsOgorCXBsYXRmb3JtX2RldmljZV9kZWwocGxhdGZvcm1fZGV2aWNlKTsKK2ZhaWxfcGxhdGZvcm1fZGV2aWNlMjoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBsYXRmb3JtX2RldmljZSk7CitmYWlsX3BsYXRmb3JtX2RldmljZTE6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CitmYWlsX3BsYXRmb3JtX2RyaXZlcjoKIAlrZnJlZShkYV90b2tlbnMpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zODIsMTIgKzQyNSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF9leGl0KHZvaWQpCiB7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRlbGxfYmFja2xpZ2h0X2RldmljZSk7Ci0JaWYgKHdpZmlfcmZraWxsKQotCQlyZmtpbGxfdW5yZWdpc3Rlcih3aWZpX3Jma2lsbCk7Ci0JaWYgKGJsdWV0b290aF9yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKGJsdWV0b290aF9yZmtpbGwpOwotCWlmICh3d2FuX3Jma2lsbCkKLQkJcmZraWxsX3VucmVnaXN0ZXIod3dhbl9yZmtpbGwpOworCWRlbGxfY2xlYW51cF9yZmtpbGwoKTsKIH0KIAogbW9kdWxlX2luaXQoZGVsbF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCmluZGV4IDBmOTAwY2MuLjY3ZjNmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiBNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZWxsIGxhcHRvcCBXTUkgaG90a2V5cyBkcml2ZXIiKTsKQEAgLTM4LDYgKzM5LDggQEAKIAogI2RlZmluZSBERUxMX0VWRU5UX0dVSUQgIjlEQkI1OTk0LUE5OTctMTFEQS1CMDEyLUI2MjJBMUVGNTQ5MiIKIAorc3RhdGljIGludCBhY3BpX3ZpZGVvOworCiBNT0RVTEVfQUxJQVMoIndtaToiREVMTF9FVkVOVF9HVUlEKTsKIAogc3RydWN0IGtleV9lbnRyeSB7CkBAIC01NCw3ICs1Nyw3IEBACiAgKiB2aWEgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgc28gc2hvdWxkIG5vdCBiZSBzZW50IGFnYWluLgogICovCiAKLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IGRlbGxfd21pX2tleW1hcFtdID0geworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgZGVsbF9sZWdhY3lfd21pX2tleW1hcFtdID0gewogCXtLRV9LRVksIDB4ZTA0NSwgS0VZX1BST0cxfSwKIAl7S0VfS0VZLCAweGUwMDksIEtFWV9FSkVDVENEfSwKIApAQCAtNzIsNyArNzUsNyBAQAogCiAJLyogVGhlIG5leHQgZGV2aWNlIGlzIGF0IG9mZnNldCA2LCB0aGUgYWN0aXZlIGRldmljZXMgYXJlIGF0CiAJICAgb2Zmc2V0IDggYW5kIHRoZSBhdHRhY2hlZCBkZXZpY2VzIGF0IG9mZnNldCAxMCAqLwotCXtLRV9LRVksIDB4ZTAwYiwgS0VZX0RJU1BMQVlUT0dHTEV9LAorCXtLRV9LRVksIDB4ZTAwYiwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCiAKIAl7S0VfSUdOT1JFLCAweGUwMGMsIEtFWV9LQkRJTExVTVRPR0dMRX0sCiAKQEAgLTk2LDYgKzk5LDQ3IEBACiAJe0tFX0VORCwgMH0KIH07CiAKK3N0YXRpYyBib29sIGRlbGxfbmV3X2hrX3R5cGU7CisKK3N0cnVjdCBkZWxsX25ld19rZXltYXBfZW50cnkgeworCXUxNiBzY2FuY29kZTsKKwl1MTYga2V5Y29kZTsKK307CisKK3N0cnVjdCBkZWxsX2hvdGtleV90YWJsZSB7CisJc3RydWN0IGRtaV9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBkZWxsX25ld19rZXltYXBfZW50cnkga2V5bWFwW107CisKK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICpkZWxsX25ld193bWlfa2V5bWFwOworCitzdGF0aWMgdTE2IGJpb3NfdG9fbGludXhfa2V5Y29kZVsyNTZdID0geworCisJS0VZX01FRElBLAlLRVlfTkVYVFNPTkcsCUtFWV9QTEFZUEFVU0UsIEtFWV9QUkVWSU9VU1NPTkcsCisJS0VZX1NUT1BDRCwJS0VZX1VOS05PV04sCUtFWV9VTktOT1dOLAlLRVlfVU5LTk9XTiwKKwlLRVlfV1dXLAlLRVlfVU5LTk9XTiwJS0VZX1ZPTFVNRURPV04sIEtFWV9NVVRFLAorCUtFWV9WT0xVTUVVUCwJS0VZX1VOS05PV04sCUtFWV9CQVRURVJZLAlLRVlfRUpFQ1RDRCwKKwlLRVlfVU5LTk9XTiwJS0VZX1NMRUVQLAlLRVlfUFJPRzEsIEtFWV9CUklHSFRORVNTRE9XTiwKKwlLRVlfQlJJR0hUTkVTU1VQLAlLRVlfVU5LTk9XTiwJS0VZX0tCRElMTFVNVE9HR0xFLAorCUtFWV9VTktOT1dOLAlLRVlfU1dJVENIVklERU9NT0RFLAlLRVlfVU5LTk9XTiwgS0VZX1VOS05PV04sCisJS0VZX1NXSVRDSFZJREVPTU9ERSwJS0VZX1VOS05PV04sCUtFWV9VTktOT1dOLCBLRVlfUFJPRzIsCisJS0VZX1VOS05PV04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJS0VZX1BST0czCit9OworCisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICpkZWxsX3dtaV9rZXltYXAgPSBkZWxsX2xlZ2FjeV93bWlfa2V5bWFwOworCiBzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqZGVsbF93bWlfaW5wdXRfZGV2OwogCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqZGVsbF93bWlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGludCBjb2RlKQpAQCAtMTY0LDI0ICsyMDgsNzggQEAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilyZXNwb25zZS5wb2ludGVyOwogCiAJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUikgewotCQlpbnQgKmJ1ZmZlciA9IChpbnQgKilvYmotPmJ1ZmZlci5wb2ludGVyOwotCQkvKgotCQkgKiAgVGhlIHVwcGVyIGJ5dGVzIG9mIHRoZSBldmVudCBtYXkgY29udGFpbgotCQkgKiAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc28gbWFzayB0aGVtIG9mZiBmb3IgdGhlCi0JCSAqICBzY2FuY29kZSBsb29rdXAKLQkJICovCi0JCWtleSA9IGRlbGxfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShidWZmZXJbMV0gJiAweEZGRkYpOwotCQlpZiAoa2V5KSB7CisJCWludCByZXBvcnRlZF9rZXk7CisJCXUxNiAqYnVmZmVyX2VudHJ5ID0gKHUxNiAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisJCWlmIChkZWxsX25ld19oa190eXBlICYmIChidWZmZXJfZW50cnlbMV0gIT0gMHgxMCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImRlbGwtd21pOiBSZWNlaXZlZCB1bmtub3duIFdNSSBldmVudCIKKwkJCQkJICIgKDB4JXgpXG4iLCBidWZmZXJfZW50cnlbMV0pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGRlbGxfbmV3X2hrX3R5cGUpCisJCQlyZXBvcnRlZF9rZXkgPSAoaW50KWJ1ZmZlcl9lbnRyeVsyXTsKKwkJZWxzZQorCQkJcmVwb3J0ZWRfa2V5ID0gKGludClidWZmZXJfZW50cnlbMV0gJiAweGZmZmY7CisKKwkJa2V5ID0gZGVsbF93bWlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHJlcG9ydGVkX2tleSk7CisKKwkJaWYgKCFrZXkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImRlbGwtd21pOiBVbmtub3duIGtleSAleCBwcmVzc2VkXG4iLAorCQkJCXJlcG9ydGVkX2tleSk7CisJCX0gZWxzZSBpZiAoKGtleS0+a2V5Y29kZSA9PSBLRVlfQlJJR0hUTkVTU1VQIHx8CisJCQkgICAga2V5LT5rZXljb2RlID09IEtFWV9CUklHSFRORVNTRE9XTikgJiYgYWNwaV92aWRlbykgeworCQkJLyogRG9uJ3QgcmVwb3J0IGJyaWdodG5lc3Mgbm90aWZpY2F0aW9ucyB0aGF0IHdpbGwgYWxzbworCQkJICogY29tZSB2aWEgQUNQSSAqLworCQkJcmV0dXJuOworCQl9IGVsc2UgewogCQkJaW5wdXRfcmVwb3J0X2tleShkZWxsX3dtaV9pbnB1dF9kZXYsIGtleS0+a2V5Y29kZSwgMSk7CiAJCQlpbnB1dF9zeW5jKGRlbGxfd21pX2lucHV0X2Rldik7CiAJCQlpbnB1dF9yZXBvcnRfa2V5KGRlbGxfd21pX2lucHV0X2Rldiwga2V5LT5rZXljb2RlLCAwKTsKIAkJCWlucHV0X3N5bmMoZGVsbF93bWlfaW5wdXRfZGV2KTsKLQkJfSBlbHNlIGlmIChidWZmZXJbMV0gJiAweEZGRkYpCi0JCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLXdtaTogVW5rbm93biBrZXkgJXggcHJlc3NlZFxuIiwKLQkJCSAgICAgICBidWZmZXJbMV0gJiAweEZGRkYpOworCQl9CiAJfQogfQogCisKK3N0YXRpYyB2b2lkIHNldHVwX25ld19oa19tYXAoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQoreworCisJaW50IGk7CisJaW50IGhvdGtleV9udW0gPSAoZG0tPmxlbmd0aC00KS9zaXplb2Yoc3RydWN0IGRlbGxfbmV3X2tleW1hcF9lbnRyeSk7CisJc3RydWN0IGRlbGxfaG90a2V5X3RhYmxlICp0YWJsZSA9CisJCWNvbnRhaW5lcl9vZihkbSwgc3RydWN0IGRlbGxfaG90a2V5X3RhYmxlLCBoZWFkZXIpOworCisJZGVsbF9uZXdfd21pX2tleW1hcCA9IGt6YWxsb2MoKGhvdGtleV9udW0rMSkgKgorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qga2V5X2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG90a2V5X251bTsgaSsrKSB7CisJCWRlbGxfbmV3X3dtaV9rZXltYXBbaV0udHlwZSA9IEtFX0tFWTsKKwkJZGVsbF9uZXdfd21pX2tleW1hcFtpXS5jb2RlID0gdGFibGUtPmtleW1hcFtpXS5zY2FuY29kZTsKKwkJZGVsbF9uZXdfd21pX2tleW1hcFtpXS5rZXljb2RlID0KKwkJCSh0YWJsZS0+a2V5bWFwW2ldLmtleWNvZGUgPiAyNTUpID8gMCA6CisJCQliaW9zX3RvX2xpbnV4X2tleWNvZGVbdGFibGUtPmtleW1hcFtpXS5rZXljb2RlXTsKKwl9CisKKwlkZWxsX25ld193bWlfa2V5bWFwW2ldLnR5cGUgPSBLRV9FTkQ7CisJZGVsbF9uZXdfd21pX2tleW1hcFtpXS5jb2RlID0gMDsKKwlkZWxsX25ld193bWlfa2V5bWFwW2ldLmtleWNvZGUgPSAwOworCisJZGVsbF93bWlfa2V5bWFwID0gZGVsbF9uZXdfd21pX2tleW1hcDsKKworfQorCisKK3N0YXRpYyB2b2lkIGZpbmRfaGtfdHlwZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHZvaWQgKmR1bW15KQoreworCisJaWYgKChkbS0+dHlwZSA9PSAweGIyKSAmJiAoZG0tPmxlbmd0aCA+IDYpKSB7CisJCWRlbGxfbmV3X2hrX3R5cGUgPSB0cnVlOworCQlzZXR1cF9uZXdfaGtfbWFwKGRtKTsKKwl9CisKK30KKworCiBzdGF0aWMgaW50IF9faW5pdCBkZWxsX3dtaV9pbnB1dF9zZXR1cCh2b2lkKQogewogCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKQEAgLTIyNiw2ICszMjQsOSBAQAogCWludCBlcnI7CiAKIAlpZiAod21pX2hhc19ndWlkKERFTExfRVZFTlRfR1VJRCkpIHsKKworCQlkbWlfd2FsayhmaW5kX2hrX3R5cGUsIE5VTEwpOworCiAJCWVyciA9IGRlbGxfd21pX2lucHV0X3NldHVwKCk7CiAKIAkJaWYgKGVycikKQEAgLTI0MCw2ICszNDEsOCBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCisJCWFjcGlfdmlkZW8gPSBhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCk7CisKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGVsbC13bWk6IE5vIGtub3duIFdNSSBHVUlEIGZvdW5kXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCA0MjI2ZTUzLi41ODM4YzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgZWVwYy1sYXB0b3AuYyAtIEFzdXMgRWVlIFBDIGV4dHJhcworICogIGVlZXBjLWxhcHRvcC5jIC0gQXN1cyBFZWUgUEMgZXh0cmFzCiAgKgogICogIEJhc2VkIG9uIGFzdXNfYWNwaS5jIGFzIHBhdGNoZWQgZm9yIHRoZSBFZWUgUEMgYnkgQXN1czoKICAqICBmdHA6Ly9mdHAuYXN1cy5jb20vcHViL0FTVVMvRWVlUEMvNzAxL0FTVVNfQUNQSV8wNzExMjYucmFyCkBAIC0zNCwyMCArMzQsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2RlZmluZSBFRUVQQ19MQVBUT1BfVkVSU0lPTgkiMC4xIgorI2RlZmluZSBFRUVQQ19MQVBUT1BfTkFNRQkiRWVlIFBDIEhvdGtleSBEcml2ZXIiCisjZGVmaW5lIEVFRVBDX0xBUFRPUF9GSUxFCSJlZWVwYyIKIAotI2RlZmluZSBFRUVQQ19IT1RLX05BTUUJCSJFZWUgUEMgSG90a2V5IERyaXZlciIKLSNkZWZpbmUgRUVFUENfSE9US19GSUxFCQkiZWVlcGMiCi0jZGVmaW5lIEVFRVBDX0hPVEtfQ0xBU1MJImhvdGtleSIKLSNkZWZpbmUgRUVFUENfSE9US19ERVZJQ0VfTkFNRQkiSG90a2V5IgotI2RlZmluZSBFRUVQQ19IT1RLX0hJRAkJIkFTVVMwMTAiCisjZGVmaW5lIEVFRVBDX0FDUElfQ0xBU1MJImhvdGtleSIKKyNkZWZpbmUgRUVFUENfQUNQSV9ERVZJQ0VfTkFNRQkiSG90a2V5IgorI2RlZmluZSBFRUVQQ19BQ1BJX0hJRAkJIkFTVVMwMTAiCiAKK01PRFVMRV9BVVRIT1IoIkNvcmVudGluIENoYXJ5LCBFcmljIENvb3BlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKEVFRVBDX0xBUFRPUF9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyoKICAqIERlZmluaXRpb25zIGZvciBBc3VzIEVlZVBDCiAgKi8KLSNkZWZpbmUJTk9USUZZX1dMQU5fT04JMHgxMAogI2RlZmluZSBOT1RJRllfQlJOX01JTgkweDIwCiAjZGVmaW5lIE5PVElGWV9CUk5fTUFYCTB4MmYKIApAQCAtMTE3LDU4ICsxMjAsNiBAQAogCU5VTEwsIE5VTEwsICJQQlBTIiwgIlRQRFMiCiB9OwogCi0jZGVmaW5lIEVFRVBDX0VDCSJcXF9TQi5QQ0kwLlNCUkcuRUMwLiIKLQotI2RlZmluZSBFRUVQQ19FQ19GQU5fUFdNCUVFRVBDX0VDICJTQzAyIiAvKiBGYW4gUFdNIGR1dHkgY3ljbGUgKCUpICovCi0jZGVmaW5lIEVFRVBDX0VDX1NDMDIJCTB4NjMKLSNkZWZpbmUgRUVFUENfRUNfRkFOX0hSUE0JRUVFUENfRUMgIlNDMDUiIC8qIEhpZ2ggYnl0ZSwgZmFuIHNwZWVkIChSUE0pICovCi0jZGVmaW5lIEVFRVBDX0VDX0ZBTl9MUlBNCUVFRVBDX0VDICJTQzA2IiAvKiBMb3cgYnl0ZSwgZmFuIHNwZWVkIChSUE0pICovCi0jZGVmaW5lIEVFRVBDX0VDX0ZBTl9DVFJMCUVFRVBDX0VDICJTRkIzIiAvKiBCeXRlIGNvbnRhaW5pbmcgU0YyNSAgKi8KLSNkZWZpbmUgRUVFUENfRUNfU0ZCMwkJMHhEMwotCi0vKgotICogVGhpcyBpcyB0aGUgbWFpbiBzdHJ1Y3R1cmUsIHdlIGNhbiB1c2UgaXQgdG8gc3RvcmUgdXNlZnVsIGluZm9ybWF0aW9uCi0gKiBhYm91dCB0aGUgaG90ayBkZXZpY2UKLSAqLwotc3RydWN0IGVlZXBjX2hvdGsgewotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwkvKiB0aGUgZGV2aWNlIHdlIGFyZSBpbiAqLwotCWFjcGlfaGFuZGxlIGhhbmRsZTsJCS8qIHRoZSBoYW5kbGUgb2YgdGhlIGhvdGsgZGV2aWNlICovCi0JdTMyIGNtX3N1cHBvcnRlZDsJCS8qIHRoZSBjb250cm9sIG1ldGhvZHMgc3VwcG9ydGVkCi0JCQkJCSAgIGJ5IHRoaXMgQklPUyAqLwotCXVpbnQgaW5pdF9mbGFnOwkJCS8qIEluaXQgZmxhZ3MgKi8KLQl1MTYgZXZlbnRfY291bnRbMTI4XTsJCS8qIGNvdW50IGZvciBlYWNoIGV2ZW50ICovCi0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7Ci0JdTE2ICprZXljb2RlX21hcDsKLQlzdHJ1Y3QgcmZraWxsICp3bGFuX3Jma2lsbDsKLQlzdHJ1Y3QgcmZraWxsICpibHVldG9vdGhfcmZraWxsOwotCXN0cnVjdCByZmtpbGwgKnd3YW4zZ19yZmtpbGw7Ci0Jc3RydWN0IHJma2lsbCAqd2ltYXhfcmZraWxsOwotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKLQlzdHJ1Y3QgbXV0ZXggaG90cGx1Z19sb2NrOwotfTsKLQotLyogVGhlIGFjdHVhbCBkZXZpY2UgdGhlIGRyaXZlciBiaW5kcyB0byAqLwotc3RhdGljIHN0cnVjdCBlZWVwY19ob3RrICplaG90azsKLQotLyogUGxhdGZvcm0gZGV2aWNlL2RyaXZlciAqLwotc3RhdGljIGludCBlZWVwY19ob3RrX3RoYXcoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBlZWVwY19wbV9vcHMgPSB7Ci0JLnRoYXcgPSBlZWVwY19ob3RrX3RoYXcsCi0JLnJlc3RvcmUgPSBlZWVwY19ob3RrX3Jlc3RvcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBFRUVQQ19IT1RLX0ZJTEUsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkucG0gPSAmZWVlcGNfcG1fb3BzLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2U7Ci0KIHN0cnVjdCBrZXlfZW50cnkgewogCWNoYXIgdHlwZTsKIAl1OCBjb2RlOwpAQCAtMTc3LDcgKzEyOCw3IEBACiAKIGVudW0geyBLRV9LRVksIEtFX0VORCB9OwogCi1zdGF0aWMgc3RydWN0IGtleV9lbnRyeSBlZWVwY19rZXltYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5X2VudHJ5IGVlZXBjX2tleW1hcFtdID0gewogCS8qIFNsZWVwIGFscmVhZHkgaGFuZGxlZCB2aWEgZ2VuZXJpYyBBQ1BJIGNvZGUgKi8KIAl7S0VfS0VZLCAweDEwLCBLRVlfV0xBTiB9LAogCXtLRV9LRVksIDB4MTEsIEtFWV9XTEFOIH0sCkBAIC0xODUsNzcgKzEzNiw1NiBAQAogCXtLRV9LRVksIDB4MTMsIEtFWV9NVVRFIH0sCiAJe0tFX0tFWSwgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwKIAl7S0VfS0VZLCAweDE1LCBLRVlfVk9MVU1FVVAgfSwKKwl7S0VfS0VZLCAweDE2LCBLRVlfRElTUExBWV9PRkYgfSwKIAl7S0VfS0VZLCAweDFhLCBLRVlfQ09GRkVFIH0sCiAJe0tFX0tFWSwgMHgxYiwgS0VZX1pPT00gfSwKIAl7S0VfS0VZLCAweDFjLCBLRVlfUFJPRzIgfSwKIAl7S0VfS0VZLCAweDFkLCBLRVlfUFJPRzMgfSwKLQl7S0VfS0VZLCBOT1RJRllfQlJOX01JTiwgICAgIEtFWV9CUklHSFRORVNTRE9XTiB9LAotCXtLRV9LRVksIE5PVElGWV9CUk5fTUlOICsgMiwgS0VZX0JSSUdIVE5FU1NVUCB9LAorCXtLRV9LRVksIE5PVElGWV9CUk5fTUlOLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKKwl7S0VfS0VZLCBOT1RJRllfQlJOX01BWCwgS0VZX0JSSUdIVE5FU1NVUCB9LAogCXtLRV9LRVksIDB4MzAsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKIAl7S0VfS0VZLCAweDMxLCBLRVlfU1dJVENIVklERU9NT0RFIH0sCiAJe0tFX0tFWSwgMHgzMiwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAorCXtLRV9LRVksIDB4MzcsIEtFWV9GMTMgfSwgLyogRGlzYWJsZSBUb3VjaHBhZCAqLworCXtLRV9LRVksIDB4MzgsIEtFWV9GMTQgfSwKIAl7S0VfRU5ELCAwfSwKIH07CiAKLS8qCi0gKiBUaGUgaG90a2V5IGRyaXZlciBkZWNsYXJhdGlvbgotICovCi1zdGF0aWMgaW50IGVlZXBjX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKLXN0YXRpYyB2b2lkIGVlZXBjX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGVlZXBjX2RldmljZV9pZHNbXSA9IHsKLQl7RUVFUENfSE9US19ISUQsIDB9LAotCXsiIiwgMH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBlZWVwY19kZXZpY2VfaWRzKTsKLQotc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBlZWVwY19ob3RrX2RyaXZlciA9IHsKLQkubmFtZSA9IEVFRVBDX0hPVEtfTkFNRSwKLQkuY2xhc3MgPSBFRUVQQ19IT1RLX0NMQVNTLAotCS5pZHMgPSBlZWVwY19kZXZpY2VfaWRzLAotCS5mbGFncyA9IEFDUElfRFJJVkVSX0FMTF9OT1RJRllfRVZFTlRTLAotCS5vcHMgPSB7Ci0JCS5hZGQgPSBlZWVwY19ob3RrX2FkZCwKLQkJLnJlbW92ZSA9IGVlZXBjX2hvdGtfcmVtb3ZlLAotCQkubm90aWZ5ID0gZWVlcGNfaG90a19ub3RpZnksCi0JfSwKLX07Ci0KLS8qIFBDSSBob3RwbHVnIG9wcyAqLwotc3RhdGljIGludCBlZWVwY19nZXRfYWRhcHRlcl9zdGF0dXMoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLQotc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIGVlZXBjX2hvdHBsdWdfc2xvdF9vcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmdldF9hZGFwdGVyX3N0YXR1cyA9IGVlZXBjX2dldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X3Bvd2VyX3N0YXR1cyA9IGVlZXBjX2dldF9hZGFwdGVyX3N0YXR1cywKLX07Ci0KLS8qIFRoZSBiYWNrbGlnaHQgZGV2aWNlIC9zeXMvY2xhc3MvYmFja2xpZ2h0ICovCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmVlZXBjX2JhY2tsaWdodF9kZXZpY2U7Ci0KLS8qIFRoZSBod21vbiBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICplZWVwY19od21vbl9kZXZpY2U7CiAKIC8qCi0gKiBUaGUgYmFja2xpZ2h0IGNsYXNzIGRlY2xhcmF0aW9uCisgKiBUaGlzIGlzIHRoZSBtYWluIHN0cnVjdHVyZSwgd2UgY2FuIHVzZSBpdCB0byBzdG9yZSB1c2VmdWwgaW5mb3JtYXRpb24KICAqLwotc3RhdGljIGludCByZWFkX2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKLXN0YXRpYyBpbnQgdXBkYXRlX2JsX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpOwotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGVlZXBjYmxfb3BzID0gewotCS5nZXRfYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcywKLQkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCi19Oworc3RydWN0IGVlZXBjX2xhcHRvcCB7CisJYWNwaV9oYW5kbGUgaGFuZGxlOwkJLyogdGhlIGhhbmRsZSBvZiB0aGUgYWNwaSBkZXZpY2UgKi8KKwl1MzIgY21fc3VwcG9ydGVkOwkJLyogdGhlIGNvbnRyb2wgbWV0aG9kcyBzdXBwb3J0ZWQKKwkJCQkJICAgYnkgdGhpcyBCSU9TICovCisJdTE2IGV2ZW50X2NvdW50WzEyOF07CQkvKiBjb3VudCBmb3IgZWFjaCBldmVudCAqLwogCi1NT0RVTEVfQVVUSE9SKCJDb3JlbnRpbiBDaGFyeSwgRXJpYyBDb29wZXIiKTsKLU1PRFVMRV9ERVNDUklQVElPTihFRUVQQ19IT1RLX05BTUUpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZTsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXZpY2U7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2U7CisKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXltYXA7CisKKwlzdHJ1Y3QgcmZraWxsICp3bGFuX3Jma2lsbDsKKwlzdHJ1Y3QgcmZraWxsICpibHVldG9vdGhfcmZraWxsOworCXN0cnVjdCByZmtpbGwgKnd3YW4zZ19yZmtpbGw7CisJc3RydWN0IHJma2lsbCAqd2ltYXhfcmZraWxsOworCisJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OworCXN0cnVjdCBtdXRleCBob3RwbHVnX2xvY2s7CisKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IHRwZF9sZWQ7CisJaW50IHRwZF9sZWRfd2s7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxlZF93b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0IHRwZF9sZWRfd29yazsKK307CiAKIC8qCiAgKiBBQ1BJIEhlbHBlcnMKICAqLwotc3RhdGljIGludCB3cml0ZV9hY3BpX2ludChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKLQkJCSAgc3RydWN0IGFjcGlfYnVmZmVyICpvdXRwdXQpCitzdGF0aWMgaW50IHdyaXRlX2FjcGlfaW50KGFjcGlfaGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciAqbWV0aG9kLCBpbnQgdmFsKQogewogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKIAl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CkBAIC0yNjYsNyArMTk2LDcgQEAKIAlpbl9vYmoudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwogCWluX29iai5pbnRlZ2VyLnZhbHVlID0gdmFsOwogCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAoY2hhciAqKW1ldGhvZCwgJnBhcmFtcywgb3V0cHV0KTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIChjaGFyICopbWV0aG9kLCAmcGFyYW1zLCBOVUxMKTsKIAlyZXR1cm4gKHN0YXR1cyA9PSBBRV9PSyA/IDAgOiAtMSk7CiB9CiAKQEAgLTI4NSw4MCArMjE1LDU1IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF9hY3BpKGludCBjbSwgaW50IHZhbHVlKQorc3RhdGljIGludCBzZXRfYWNwaShzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgaW50IGNtLCBpbnQgdmFsdWUpCiB7Ci0JaWYgKGVob3RrLT5jbV9zdXBwb3J0ZWQgJiAoMHgxIDw8IGNtKSkgewotCQljb25zdCBjaGFyICptZXRob2QgPSBjbV9zZXR2W2NtXTsKLQkJaWYgKG1ldGhvZCA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmICh3cml0ZV9hY3BpX2ludChlaG90ay0+aGFuZGxlLCBtZXRob2QsIHZhbHVlLCBOVUxMKSkKLQkJCXByX3dhcm5pbmcoIkVycm9yIHdyaXRpbmcgJXNcbiIsIG1ldGhvZCk7CisJY29uc3QgY2hhciAqbWV0aG9kID0gY21fc2V0dltjbV07CisKKwlpZiAobWV0aG9kID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmICgoZWVlcGMtPmNtX3N1cHBvcnRlZCAmICgweDEgPDwgY20pKSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICh3cml0ZV9hY3BpX2ludChlZWVwYy0+aGFuZGxlLCBtZXRob2QsIHZhbHVlKSkKKwkJcHJfd2FybmluZygiRXJyb3Igd3JpdGluZyAlc1xuIiwgbWV0aG9kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfYWNwaShzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgaW50IGNtKQoreworCWNvbnN0IGNoYXIgKm1ldGhvZCA9IGNtX2dldHZbY21dOworCWludCB2YWx1ZTsKKworCWlmIChtZXRob2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKChlZWVwYy0+Y21fc3VwcG9ydGVkICYgKDB4MSA8PCBjbSkpID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHJlYWRfYWNwaV9pbnQoZWVlcGMtPmhhbmRsZSwgbWV0aG9kLCAmdmFsdWUpKQorCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nICVzXG4iLCBtZXRob2QpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBhY3BpX3NldHRlcl9oYW5kbGUoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMsIGludCBjbSwKKwkJCSAgICAgIGFjcGlfaGFuZGxlICpoYW5kbGUpCit7CisJY29uc3QgY2hhciAqbWV0aG9kID0gY21fc2V0dltjbV07CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJaWYgKG1ldGhvZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKGVlZXBjLT5jbV9zdXBwb3J0ZWQgJiAoMHgxIDw8IGNtKSkgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZWVlcGMtPmhhbmRsZSwgKGNoYXIgKiltZXRob2QsCisJCQkJIGhhbmRsZSk7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlwcl93YXJuaW5nKCJFcnJvciBmaW5kaW5nICVzXG4iLCBtZXRob2QpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2FjcGkoaW50IGNtKQotewotCWludCB2YWx1ZSA9IC1FTk9ERVY7Ci0JaWYgKChlaG90ay0+Y21fc3VwcG9ydGVkICYgKDB4MSA8PCBjbSkpKSB7Ci0JCWNvbnN0IGNoYXIgKm1ldGhvZCA9IGNtX2dldHZbY21dOwotCQlpZiAobWV0aG9kID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHJlYWRfYWNwaV9pbnQoZWhvdGstPmhhbmRsZSwgbWV0aG9kLCAmdmFsdWUpKQotCQkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyAlc1xuIiwgbWV0aG9kKTsKLQl9Ci0JcmV0dXJuIHZhbHVlOwotfQotCi0vKgotICogQmFja2xpZ2h0Ci0gKi8KLXN0YXRpYyBpbnQgcmVhZF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlyZXR1cm4gZ2V0X2FjcGkoQ01fQVNMX1BBTkVMQlJJR0hUKTsKLX0KLQotc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCB2YWx1ZSkKLXsKLQl2YWx1ZSA9IG1heCgwLCBtaW4oMTUsIHZhbHVlKSk7Ci0JcmV0dXJuIHNldF9hY3BpKENNX0FTTF9QQU5FTEJSSUdIVCwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50IHVwZGF0ZV9ibF9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXJldHVybiBzZXRfYnJpZ2h0bmVzcyhiZCwgYmQtPnByb3BzLmJyaWdodG5lc3MpOwotfQotCi0vKgotICogUmZraWxsIGhlbHBlcnMKLSAqLwotCi1zdGF0aWMgYm9vbCBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKHZvaWQpCi17Ci0JaWYgKGdldF9hY3BpKENNX0FTTF9XTEFOKSA9PSAxKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbnQgZWVlcGNfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCi17Ci0JdW5zaWduZWQgbG9uZyBhc2wgPSAodW5zaWduZWQgbG9uZylkYXRhOwotCXJldHVybiBzZXRfYWNwaShhc2wsICFibG9ja2VkKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGVlZXBjX3Jma2lsbF9vcHMgPSB7Ci0JLnNldF9ibG9jayA9IGVlZXBjX3Jma2lsbF9zZXQsCi19OwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQotewotCS8qCi0JICogSWYgdGhlIGZvbGxvd2luZyBjYWxsIHRvIHNldF9hY3BpKCkgZmFpbHMsIGl0J3MgYmVjYXVzZSB0aGVyZSdzIG5vCi0JICogY2FtZXJhIHNvIHdlIGNhbiBpZ25vcmUgdGhlIGVycm9yLgotCSAqLwotCWlmIChnZXRfYWNwaShDTV9BU0xfQ0FNRVJBKSA9PSAwKQotCQlzZXRfYWNwaShDTV9BU0xfQ0FNRVJBLCAxKTsKLX0KIAogLyoKICAqIFN5cyBoZWxwZXJzCkBAIC0zNzIsNjAgKzI3Nyw2MyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfc3lzX2FjcGkoaW50IGNtLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3N5c19hY3BpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGNtLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcnYsIHZhbHVlOwogCiAJcnYgPSBwYXJzZV9hcmcoYnVmLCBjb3VudCwgJnZhbHVlKTsKIAlpZiAocnYgPiAwKQotCQl2YWx1ZSA9IHNldF9hY3BpKGNtLCB2YWx1ZSk7CisJCXZhbHVlID0gc2V0X2FjcGkoZWVlcGMsIGNtLCB2YWx1ZSk7CiAJaWYgKHZhbHVlIDwgMCkKLQkJcmV0dXJuIHZhbHVlOworCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3lzX2FjcGkoaW50IGNtLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3N5c19hY3BpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGNtLCBjaGFyICpidWYpCiB7Ci0JaW50IHZhbHVlID0gZ2V0X2FjcGkoY20pOworCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHZhbHVlID0gZ2V0X2FjcGkoZWVlcGMsIGNtKTsKIAogCWlmICh2YWx1ZSA8IDApCi0JCXJldHVybiB2YWx1ZTsKKwkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbHVlKTsKIH0KIAotI2RlZmluZSBFRUVQQ19DUkVBVEVfREVWSUNFX0FUVFIoX25hbWUsIF9jbSkJCQkJXAorI2RlZmluZSBFRUVQQ19DUkVBVEVfREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfY20pCQkJXAogCXN0YXRpYyBzc2l6ZV90IHNob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAogCQkJCSAgICBjaGFyICpidWYpCQkJCVwKIAl7CQkJCQkJCQlcCi0JCXJldHVybiBzaG93X3N5c19hY3BpKF9jbSwgYnVmKTsJCQkJXAorCQlyZXR1cm4gc2hvd19zeXNfYWNwaShkZXYsIF9jbSwgYnVmKTsJCQlcCiAJfQkJCQkJCQkJXAogCXN0YXRpYyBzc2l6ZV90IHN0b3JlXyMjX25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJXAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCiAJewkJCQkJCQkJXAotCQlyZXR1cm4gc3RvcmVfc3lzX2FjcGkoX2NtLCBidWYsIGNvdW50KTsJCQlcCisJCXJldHVybiBzdG9yZV9zeXNfYWNwaShkZXYsIF9jbSwgYnVmLCBjb3VudCk7CQlcCiAJfQkJCQkJCQkJXAogCXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gewkJXAogCQkuYXR0ciA9IHsJCQkJCQlcCiAJCQkubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJCQlcCi0JCQkubW9kZSA9IDA2NDQgfSwJCQkJCVwKKwkJCS5tb2RlID0gX21vZGUgfSwJCQkJXAogCQkuc2hvdyAgID0gc2hvd18jI19uYW1lLAkJCQkJXAogCQkuc3RvcmUgID0gc3RvcmVfIyNfbmFtZSwJCQkJXAogCX0KIAotRUVFUENfQ1JFQVRFX0RFVklDRV9BVFRSKGNhbWVyYSwgQ01fQVNMX0NBTUVSQSk7Ci1FRUVQQ19DUkVBVEVfREVWSUNFX0FUVFIoY2FyZHIsIENNX0FTTF9DQVJEUkVBREVSKTsKLUVFRVBDX0NSRUFURV9ERVZJQ0VfQVRUUihkaXNwLCBDTV9BU0xfRElTUExBWVNXSVRDSCk7CitFRUVQQ19DUkVBVEVfREVWSUNFX0FUVFIoY2FtZXJhLCAwNjQ0LCBDTV9BU0xfQ0FNRVJBKTsKK0VFRVBDX0NSRUFURV9ERVZJQ0VfQVRUUihjYXJkciwgMDY0NCwgQ01fQVNMX0NBUkRSRUFERVIpOworRUVFUENfQ1JFQVRFX0RFVklDRV9BVFRSKGRpc3AsIDAyMDAsIENNX0FTTF9ESVNQTEFZU1dJVENIKTsKIAogc3RydWN0IGVlZXBjX2NwdWZ2IHsKIAlpbnQgbnVtOwogCWludCBjdXI7CiB9OwogCi1zdGF0aWMgaW50IGdldF9jcHVmdihzdHJ1Y3QgZWVlcGNfY3B1ZnYgKmMpCitzdGF0aWMgaW50IGdldF9jcHVmdihzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgc3RydWN0IGVlZXBjX2NwdWZ2ICpjKQogewotCWMtPmN1ciA9IGdldF9hY3BpKENNX0FTTF9DUFVGVik7CisJYy0+Y3VyID0gZ2V0X2FjcGkoZWVlcGMsIENNX0FTTF9DUFVGVik7CiAJYy0+bnVtID0gKGMtPmN1ciA+PiA4KSAmIDB4ZmY7CiAJYy0+Y3VyICY9IDB4ZmY7CiAJaWYgKGMtPmN1ciA8IDAgfHwgYy0+bnVtIDw9IDAgfHwgYy0+bnVtID4gMTIpCkBAIC00MzcsMTEgKzM0NSwxMiBAQAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgY2hhciAqYnVmKQogeworCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGVlZXBjX2NwdWZ2IGM7CiAJaW50IGk7CiAJc3NpemVfdCBsZW4gPSAwOwogCi0JaWYgKGdldF9jcHVmdigmYykpCisJaWYgKGdldF9jcHVmdihlZWVwYywgJmMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlmb3IgKGkgPSAwOyBpIDwgYy5udW07IGkrKykKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJWQgIiwgaSk7CkBAIC00NTMsOSArMzYyLDEwIEBACiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICBjaGFyICpidWYpCiB7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZWVlcGNfY3B1ZnYgYzsKIAotCWlmIChnZXRfY3B1ZnYoJmMpKQorCWlmIChnZXRfY3B1ZnYoZWVlcGMsICZjKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJSN4XG4iLCAoYy5udW0gPDwgOCkgfCBjLmN1cik7CiB9CkBAIC00NjQsMTcgKzM3NCwxOCBAQAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBlZWVwY19jcHVmdiBjOwogCWludCBydiwgdmFsdWU7CiAKLQlpZiAoZ2V0X2NwdWZ2KCZjKSkKKwlpZiAoZ2V0X2NwdWZ2KGVlZXBjLCAmYykpCiAJCXJldHVybiAtRU5PREVWOwogCXJ2ID0gcGFyc2VfYXJnKGJ1ZiwgY291bnQsICZ2YWx1ZSk7CiAJaWYgKHJ2IDwgMCkKIAkJcmV0dXJuIHJ2OwogCWlmICghcnYgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID49IGMubnVtKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzZXRfYWNwaShDTV9BU0xfQ1BVRlYsIHZhbHVlKTsKKwlzZXRfYWNwaShlZWVwYywgQ01fQVNMX0NQVUZWLCB2YWx1ZSk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC01MDYsMTU2ICs0MTcsMTI1IEBACiAJLmF0dHJzID0gcGxhdGZvcm1fYXR0cmlidXRlcwogfTsKIAotLyoKLSAqIEhvdGtleSBmdW5jdGlvbnMKLSAqLwotc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmVlcGNfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGludCBjb2RlKQorc3RhdGljIGludCBlZWVwY19wbGF0Zm9ybV9pbml0KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQogewotCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQotCWZvciAoa2V5ID0gZWVlcGNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKLQkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQotCQkJcmV0dXJuIGtleTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqZWVwY19nZXRfZW50cnlfYnlfa2V5Y29kZShpbnQgY29kZSkKLXsKLQlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7Ci0KLQlmb3IgKGtleSA9IGVlZXBjX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCi0JCWlmIChjb2RlID09IGtleS0+a2V5Y29kZSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKQotCQkJcmV0dXJuIGtleTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IGVlZXBjX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKLXsKLQlzdHJ1Y3Qga2V5X2VudHJ5ICprZXkgPSBlZXBjX2dldF9lbnRyeV9ieV9zY2FuY29kZShzY2FuY29kZSk7Ci0KLQlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKLQkJKmtleWNvZGUgPSBrZXktPmtleWNvZGU7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGVlZXBjX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCBrZXljb2RlKQotewotCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQlpbnQgb2xkX2tleWNvZGU7Ci0KLQlpZiAoa2V5Y29kZSA8IDAgfHwga2V5Y29kZSA+IEtFWV9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Ja2V5ID0gZWVwY19nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOwotCWlmIChrZXkgJiYga2V5LT50eXBlID09IEtFX0tFWSkgewotCQlvbGRfa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKLQkJa2V5LT5rZXljb2RlID0ga2V5Y29kZTsKLQkJc2V0X2JpdChrZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0JCWlmICghZWVwY19nZXRfZW50cnlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCi0JCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB2b2lkIGNtc2dfcXVpcmsoaW50IGNtLCBjb25zdCBjaGFyICpuYW1lKQotewotCWludCBkdW1teTsKLQotCS8qIFNvbWUgQklPU2VzIGRvIG5vdCByZXBvcnQgY20gYWx0aG91Z2ggaXQgaXMgYXZhbGlhYmxlLgotCSAgIENoZWNrIGlmIGNtX2dldHZbY21dIHdvcmtzIGFuZCwgaWYgeWVzLCBhc3N1bWUgY20gc2hvdWxkIGJlIHNldC4gKi8KLQlpZiAoIShlaG90ay0+Y21fc3VwcG9ydGVkICYgKDEgPDwgY20pKQotCSAgICAmJiAhcmVhZF9hY3BpX2ludChlaG90ay0+aGFuZGxlLCBjbV9nZXR2W2NtXSwgJmR1bW15KSkgewotCQlwcl9pbmZvKCIlcyAoJXgpIG5vdCByZXBvcnRlZCBieSBCSU9TLCIKLQkJCSIgZW5hYmxpbmcgYW55d2F5XG4iLCBuYW1lLCAxIDw8IGNtKTsKLQkJZWhvdGstPmNtX3N1cHBvcnRlZCB8PSAxIDw8IGNtOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY21zZ19xdWlya3Modm9pZCkKLXsKLQljbXNnX3F1aXJrKENNX0FTTF9MSUQsICJMSUQiKTsKLQljbXNnX3F1aXJrKENNX0FTTF9UWVBFLCAiVFlQRSIpOwotCWNtc2dfcXVpcmsoQ01fQVNMX1BBTkVMUE9XRVIsICJQQU5FTFBPV0VSIik7Ci0JY21zZ19xdWlyayhDTV9BU0xfVFBELCAiVFBEIik7Ci19Ci0KLXN0YXRpYyBpbnQgZWVlcGNfaG90a19jaGVjayh2b2lkKQotewotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9zdGF0dXMoZWhvdGstPmRldmljZSk7CisJZWVlcGMtPnBsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhFRUVQQ19MQVBUT1BfRklMRSwgLTEpOworCWlmICghZWVlcGMtPnBsYXRmb3JtX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZWVlcGMtPnBsYXRmb3JtX2RldmljZSwgZWVlcGMpOworCisJcmVzdWx0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlZWVwYy0+cGxhdGZvcm1fZGV2aWNlKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotCWlmIChlaG90ay0+ZGV2aWNlLT5zdGF0dXMucHJlc2VudCkgewotCQlpZiAod3JpdGVfYWNwaV9pbnQoZWhvdGstPmhhbmRsZSwgIklOSVQiLCBlaG90ay0+aW5pdF9mbGFnLAotCQkJCSAgICAmYnVmZmVyKSkgewotCQkJcHJfZXJyKCJIb3RrZXkgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJcHJfbm90aWNlKCJIb3RrZXkgaW5pdCBmbGFncyAweCV4XG4iLCBlaG90ay0+aW5pdF9mbGFnKTsKLQkJfQotCQkvKiBnZXQgY29udHJvbCBtZXRob2RzIHN1cHBvcnRlZCAqLwotCQlpZiAocmVhZF9hY3BpX2ludChlaG90ay0+aGFuZGxlLCAiQ01TRyIKLQkJCQkgICAsICZlaG90ay0+Y21fc3VwcG9ydGVkKSkgewotCQkJcHJfZXJyKCJHZXQgY29udHJvbCBtZXRob2RzIHN1cHBvcnRlZCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0gZWxzZSB7Ci0JCQljbXNnX3F1aXJrcygpOwotCQkJcHJfaW5mbygiR2V0IGNvbnRyb2wgbWV0aG9kcyBzdXBwb3J0ZWQ6IDB4JXhcbiIsCi0JCQkJZWhvdGstPmNtX3N1cHBvcnRlZCk7Ci0JCX0KLQl9IGVsc2UgewotCQlwcl9lcnIoIkhvdGtleSBkZXZpY2Ugbm90IHByZXNlbnQsIGFib3J0aW5nXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOworCisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYua29iaiwKKwkJCQkgICAgJnBsYXRmb3JtX2F0dHJpYnV0ZV9ncm91cCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX3N5c2ZzOwogCXJldHVybiAwOworCitmYWlsX3N5c2ZzOgorCXBsYXRmb3JtX2RldmljZV9kZWwoZWVlcGMtPnBsYXRmb3JtX2RldmljZSk7CitmYWlsX3BsYXRmb3JtX2RldmljZToKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGVlZXBjLT5wbGF0Zm9ybV9kZXZpY2UpOworCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgbm90aWZ5X2Jybih2b2lkKQorc3RhdGljIHZvaWQgZWVlcGNfcGxhdGZvcm1fZXhpdChzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYykKIHsKLQkvKiByZXR1cm5zIHRoZSAqcHJldmlvdXMqIGJyaWdodG5lc3MsIG9yIC0xICovCi0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gZWVlcGNfYmFja2xpZ2h0X2RldmljZTsKLQlpZiAoYmQpIHsKLQkJaW50IG9sZCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwotCQliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGJkLCBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7Ci0JCXJldHVybiBvbGQ7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYua29iaiwKKwkJCSAgICZwbGF0Zm9ybV9hdHRyaWJ1dGVfZ3JvdXApOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGVlZXBjLT5wbGF0Zm9ybV9kZXZpY2UpOworfQorCisvKgorICogTEVEcworICovCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IHVwZGF0ZSB0aGUgTEVEJ3MsIGFuZCBhcmUgY2FsbGVkIGZyb20gYQorICogd29ya3F1ZXVlLiBCeSBkb2luZyB0aGlzIGFzIHNlcGFyYXRlIHdvcmsgcmF0aGVyIHRoYW4gd2hlbiB0aGUgTEVECisgKiBzdWJzeXN0ZW0gYXNrcywgd2UgYXZvaWQgbWVzc2luZyB3aXRoIHRoZSBBc3VzIEFDUEkgc3R1ZmYgZHVyaW5nIGEKKyAqIHBvdGVudGlhbGx5IGJhZCB0aW1lLCBzdWNoIGFzIGEgdGltZXIgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZCB0cGRfbGVkX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisgeworCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjOworCisJZWVlcGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVlZXBjX2xhcHRvcCwgdHBkX2xlZF93b3JrKTsKKworCXNldF9hY3BpKGVlZXBjLCBDTV9BU0xfVFBELCBlZWVwYy0+dHBkX2xlZF93ayk7Cit9CisKK3N0YXRpYyB2b2lkIHRwZF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYzsKKworCWVlZXBjID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgZWVlcGNfbGFwdG9wLCB0cGRfbGVkKTsKKworCWVlZXBjLT50cGRfbGVkX3drID0gKHZhbHVlID4gMCkgPyAxIDogMDsKKwlxdWV1ZV93b3JrKGVlZXBjLT5sZWRfd29ya3F1ZXVlLCAmZWVlcGMtPnRwZF9sZWRfd29yayk7Cit9CisKK3N0YXRpYyBpbnQgZWVlcGNfbGVkX2luaXQoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCit7CisJaW50IHJ2OworCisJaWYgKGdldF9hY3BpKGVlZXBjLCBDTV9BU0xfVFBEKSA9PSAtRU5PREVWKQorCQlyZXR1cm4gMDsKKworCWVlZXBjLT5sZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKKwlpZiAoIWVlZXBjLT5sZWRfd29ya3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlJTklUX1dPUksoJmVlZXBjLT50cGRfbGVkX3dvcmssIHRwZF9sZWRfdXBkYXRlKTsKKworCWVlZXBjLT50cGRfbGVkLm5hbWUgPSAiZWVlcGM6OnRvdWNocGFkIjsKKwllZWVwYy0+dHBkX2xlZC5icmlnaHRuZXNzX3NldCA9IHRwZF9sZWRfc2V0OworCWVlZXBjLT50cGRfbGVkLm1heF9icmlnaHRuZXNzID0gMTsKKworCXJ2ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsCisJCQkJICAgJmVlZXBjLT50cGRfbGVkKTsKKwlpZiAocnYpIHsKKwkJZGVzdHJveV93b3JrcXVldWUoZWVlcGMtPmxlZF93b3JrcXVldWUpOworCQlyZXR1cm4gcnY7CiAJfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBlZWVwY19nZXRfYWRhcHRlcl9zdGF0dXMoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LAotCQkJCSAgICB1OCAqdmFsdWUpCi17Ci0JaW50IHZhbCA9IGdldF9hY3BpKENNX0FTTF9XTEFOKTsKLQotCWlmICh2YWwgPT0gMSB8fCB2YWwgPT0gMCkKLQkJKnZhbHVlID0gdmFsOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcodm9pZCkKK3N0YXRpYyB2b2lkIGVlZXBjX2xlZF9leGl0KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQoreworCWlmIChlZWVwYy0+dHBkX2xlZC5kZXYpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZlZWVwYy0+dHBkX2xlZCk7CisJaWYgKGVlZXBjLT5sZWRfd29ya3F1ZXVlKQorCQlkZXN0cm95X3dvcmtxdWV1ZShlZWVwYy0+bGVkX3dvcmtxdWV1ZSk7Cit9CisKKworLyoKKyAqIFBDSSBob3RwbHVnIChmb3Igd2xhbiByZmtpbGwpCisgKi8KK3N0YXRpYyBib29sIGVlZXBjX3dsYW5fcmZraWxsX2Jsb2NrZWQoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCit7CisJaWYgKGdldF9hY3BpKGVlZXBjLCBDTV9BU0xfV0xBTikgPT0gMSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1ZyhzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0JYm9vbCBibG9ja2VkID0gZWVlcGNfd2xhbl9yZmtpbGxfYmxvY2tlZCgpOworCWJvb2wgYmxvY2tlZCA9IGVlZXBjX3dsYW5fcmZraWxsX2Jsb2NrZWQoZWVlcGMpOwogCi0JaWYgKGVob3RrLT53bGFuX3Jma2lsbCkKLQkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+d2xhbl9yZmtpbGwsIGJsb2NrZWQpOworCWlmIChlZWVwYy0+d2xhbl9yZmtpbGwpCisJCXJma2lsbF9zZXRfc3dfc3RhdGUoZWVlcGMtPndsYW5fcmZraWxsLCBibG9ja2VkKTsKIAotCW11dGV4X2xvY2soJmVob3RrLT5ob3RwbHVnX2xvY2spOworCW11dGV4X2xvY2soJmVlZXBjLT5ob3RwbHVnX2xvY2spOwogCi0JaWYgKGVob3RrLT5ob3RwbHVnX3Nsb3QpIHsKKwlpZiAoZWVlcGMtPmhvdHBsdWdfc2xvdCkgewogCQlidXMgPSBwY2lfZmluZF9idXMoMCwgMSk7CiAJCWlmICghYnVzKSB7CiAJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzIDE/XG4iKTsKQEAgLTY4NSw2OSArNTY1LDIzIEBACiAJfQogCiBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmZWhvdGstPmhvdHBsdWdfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYyA9IGRhdGE7CisKIAlpZiAoZXZlbnQgIT0gQUNQSV9OT1RJRllfQlVTX0NIRUNLKQogCQlyZXR1cm47CiAKLQllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKIH0KIAotc3RhdGljIHZvaWQgZWVlcGNfaG90a19ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKK3N0YXRpYyBpbnQgZWVlcGNfcmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLAorCQkJCQkgIGNoYXIgKm5vZGUpCiB7Ci0Jc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQl1MTYgY291bnQ7Ci0JaW50IGJybiA9IC1FTk9ERVY7Ci0KLQlpZiAoIWVob3RrKQotCQlyZXR1cm47Ci0JaWYgKGV2ZW50ID4gQUNQSV9NQVhfU1lTX05PVElGWSkKLQkJcmV0dXJuOwotCWlmIChldmVudCA+PSBOT1RJRllfQlJOX01JTiAmJiBldmVudCA8PSBOT1RJRllfQlJOX01BWCkKLQkJYnJuID0gbm90aWZ5X2JybigpOwotCWNvdW50ID0gZWhvdGstPmV2ZW50X2NvdW50W2V2ZW50ICUgMTI4XSsrOwotCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZWhvdGstPmRldmljZSwgZXZlbnQsIGNvdW50KTsKLQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGVob3RrLT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCi0JCQkJCWRldl9uYW1lKCZlaG90ay0+ZGV2aWNlLT5kZXYpLCBldmVudCwKLQkJCQkJY291bnQpOwotCWlmIChlaG90ay0+aW5wdXRkZXYpIHsKLQkJaWYgKGJybiAhPSAtRU5PREVWKSB7Ci0JCQkvKiBicmlnaHRuZXNzLWNoYW5nZSBldmVudHMgbmVlZCBzcGVjaWFsCi0JCQkgKiBoYW5kbGluZyBmb3IgY29udmVyc2lvbiB0byBrZXkgZXZlbnRzCi0JCQkgKi8KLQkJCWlmIChicm4gPCAwKQotCQkJCWJybiA9IGV2ZW50OwotCQkJZWxzZQotCQkJCWJybiArPSBOT1RJRllfQlJOX01JTjsKLQkJCWlmIChldmVudCA8IGJybikKLQkJCQlldmVudCA9IE5PVElGWV9CUk5fTUlOOyAvKiBicmlnaHRuZXNzIGRvd24gKi8KLQkJCWVsc2UgaWYgKGV2ZW50ID4gYnJuKQotCQkJCWV2ZW50ID0gTk9USUZZX0JSTl9NSU4gKyAyOyAvKiAuLi4gdXAgKi8KLQkJCWVsc2UKLQkJCQlldmVudCA9IE5PVElGWV9CUk5fTUlOICsgMTsgLyogLi4uIHVuY2hhbmdlZCAqLwotCQl9Ci0JCWtleSA9IGVlcGNfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKGV2ZW50KTsKLQkJaWYgKGtleSkgewotCQkJc3dpdGNoIChrZXktPnR5cGUpIHsKLQkJCWNhc2UgS0VfS0VZOgotCQkJCWlucHV0X3JlcG9ydF9rZXkoZWhvdGstPmlucHV0ZGV2LCBrZXktPmtleWNvZGUsCi0JCQkJCQkgMSk7Ci0JCQkJaW5wdXRfc3luYyhlaG90ay0+aW5wdXRkZXYpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoZWhvdGstPmlucHV0ZGV2LCBrZXktPmtleWNvZGUsCi0JCQkJCQkgMCk7Ci0JCQkJaW5wdXRfc3luYyhlaG90ay0+aW5wdXRkZXYpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IGVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihjaGFyICpub2RlKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgbm9kZSwgJmhhbmRsZSk7CkBAIC03NTYsNyArNTkwLDcgQEAKIAkJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGhhbmRsZSwKIAkJCQkJCSAgICAgQUNQSV9TWVNURU1fTk9USUZZLAogCQkJCQkJICAgICBlZWVwY19yZmtpbGxfbm90aWZ5LAotCQkJCQkJICAgICBOVUxMKTsKKwkJCQkJCSAgICAgZWVlcGMpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZ5IG9uICVzXG4iLCBub2RlKTsKIAl9IGVsc2UKQEAgLTc2NSw3ICs1OTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBlZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihjaGFyICpub2RlKQorc3RhdGljIHZvaWQgZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMsCisJCQkJCSAgICAgY2hhciAqbm9kZSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CkBAIC03ODIsMTMgKzYxNywzMyBAQAogCX0KIH0KIAorc3RhdGljIGludCBlZWVwY19nZXRfYWRhcHRlcl9zdGF0dXMoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LAorCQkJCSAgICB1OCAqdmFsdWUpCit7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CisJaW50IHZhbCA9IGdldF9hY3BpKGVlZXBjLCBDTV9BU0xfV0xBTik7CisKKwlpZiAodmFsID09IDEgfHwgdmFsID09IDApCisJCSp2YWx1ZSA9IHZhbDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGVlZXBjX2NsZWFudXBfcGNpX2hvdHBsdWcoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KQogewogCWtmcmVlKGhvdHBsdWdfc2xvdC0+aW5mbyk7CiAJa2ZyZWUoaG90cGx1Z19zbG90KTsKIH0KIAotc3RhdGljIGludCBlZWVwY19zZXR1cF9wY2lfaG90cGx1Zyh2b2lkKQorc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIGVlZXBjX2hvdHBsdWdfc2xvdF9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmdldF9hZGFwdGVyX3N0YXR1cyA9IGVlZXBjX2dldF9hZGFwdGVyX3N0YXR1cywKKwkuZ2V0X3Bvd2VyX3N0YXR1cyA9IGVlZXBjX2dldF9hZGFwdGVyX3N0YXR1cywKK307CisKK3N0YXRpYyBpbnQgZWVlcGNfc2V0dXBfcGNpX2hvdHBsdWcoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCiB7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKQEAgLTc5OCwyMiArNjUzLDIyIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWVob3RrLT5ob3RwbHVnX3Nsb3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlaG90ay0+aG90cGx1Z19zbG90KQorCWVlZXBjLT5ob3RwbHVnX3Nsb3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlZWVwYy0+aG90cGx1Z19zbG90KQogCQlnb3RvIGVycm9yX3Nsb3Q7CiAKLQllaG90ay0+aG90cGx1Z19zbG90LT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwKKwllZWVwYy0+aG90cGx1Z19zbG90LT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghZWhvdGstPmhvdHBsdWdfc2xvdC0+aW5mbykKKwlpZiAoIWVlZXBjLT5ob3RwbHVnX3Nsb3QtPmluZm8pCiAJCWdvdG8gZXJyb3JfaW5mbzsKIAotCWVob3RrLT5ob3RwbHVnX3Nsb3QtPnByaXZhdGUgPSBlaG90azsKLQllaG90ay0+aG90cGx1Z19zbG90LT5yZWxlYXNlID0gJmVlZXBjX2NsZWFudXBfcGNpX2hvdHBsdWc7Ci0JZWhvdGstPmhvdHBsdWdfc2xvdC0+b3BzID0gJmVlZXBjX2hvdHBsdWdfc2xvdF9vcHM7Ci0JZWVlcGNfZ2V0X2FkYXB0ZXJfc3RhdHVzKGVob3RrLT5ob3RwbHVnX3Nsb3QsCi0JCQkJICZlaG90ay0+aG90cGx1Z19zbG90LT5pbmZvLT5hZGFwdGVyX3N0YXR1cyk7CisJZWVlcGMtPmhvdHBsdWdfc2xvdC0+cHJpdmF0ZSA9IGVlZXBjOworCWVlZXBjLT5ob3RwbHVnX3Nsb3QtPnJlbGVhc2UgPSAmZWVlcGNfY2xlYW51cF9wY2lfaG90cGx1ZzsKKwllZWVwYy0+aG90cGx1Z19zbG90LT5vcHMgPSAmZWVlcGNfaG90cGx1Z19zbG90X29wczsKKwllZWVwY19nZXRfYWRhcHRlcl9zdGF0dXMoZWVlcGMtPmhvdHBsdWdfc2xvdCwKKwkJCQkgJmVlZXBjLT5ob3RwbHVnX3Nsb3QtPmluZm8tPmFkYXB0ZXJfc3RhdHVzKTsKIAotCXJldCA9IHBjaV9ocF9yZWdpc3RlcihlaG90ay0+aG90cGx1Z19zbG90LCBidXMsIDAsICJlZWVwYy13aWZpIik7CisJcmV0ID0gcGNpX2hwX3JlZ2lzdGVyKGVlZXBjLT5ob3RwbHVnX3Nsb3QsIGJ1cywgMCwgImVlZXBjLXdpZmkiKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGhvdHBsdWcgc2xvdCAtICVkXG4iLCByZXQpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwpAQCAtODIyLDE3ICs2NzcsMTU2IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yX3JlZ2lzdGVyOgotCWtmcmVlKGVob3RrLT5ob3RwbHVnX3Nsb3QtPmluZm8pOworCWtmcmVlKGVlZXBjLT5ob3RwbHVnX3Nsb3QtPmluZm8pOwogZXJyb3JfaW5mbzoKLQlrZnJlZShlaG90ay0+aG90cGx1Z19zbG90KTsKLQllaG90ay0+aG90cGx1Z19zbG90ID0gTlVMTDsKKwlrZnJlZShlZWVwYy0+aG90cGx1Z19zbG90KTsKKwllZWVwYy0+aG90cGx1Z19zbG90ID0gTlVMTDsKIGVycm9yX3Nsb3Q6CiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFJma2lsbCBkZXZpY2VzCisgKi8KK3N0YXRpYyBpbnQgZWVlcGNfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCit7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gZGF0YTsKKworCXJldHVybiB3cml0ZV9hY3BpX2ludChoYW5kbGUsIE5VTEwsICFibG9ja2VkKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGVlZXBjX3Jma2lsbF9vcHMgPSB7CisJLnNldF9ibG9jayA9IGVlZXBjX3Jma2lsbF9zZXQsCit9OworCitzdGF0aWMgaW50IGVlZXBjX25ld19yZmtpbGwoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMsCisJCQkgICAgc3RydWN0IHJma2lsbCAqKnJma2lsbCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIGVudW0gcmZraWxsX3R5cGUgdHlwZSwgaW50IGNtKQoreworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gYWNwaV9zZXR0ZXJfaGFuZGxlKGVlZXBjLCBjbSwgJmhhbmRsZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkqcmZraWxsID0gcmZraWxsX2FsbG9jKG5hbWUsICZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsIHR5cGUsCisJCQkgICAgICAgJmVlZXBjX3Jma2lsbF9vcHMsIGhhbmRsZSk7CisKKwlpZiAoISpyZmtpbGwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmZraWxsX2luaXRfc3dfc3RhdGUoKnJma2lsbCwgZ2V0X2FjcGkoZWVlcGMsIGNtKSAhPSAxKTsKKwlyZXN1bHQgPSByZmtpbGxfcmVnaXN0ZXIoKnJma2lsbCk7CisJaWYgKHJlc3VsdCkgeworCQlyZmtpbGxfZGVzdHJveSgqcmZraWxsKTsKKwkJKnJma2lsbCA9IE5VTEw7CisJCXJldHVybiByZXN1bHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfZXhpdChzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYykKK3sKKwllZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNSIpOworCWVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKGVlZXBjLCAiXFxfU0IuUENJMC5QMFA2Iik7CisJZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDciKTsKKwlpZiAoZWVlcGMtPndsYW5fcmZraWxsKSB7CisJCXJma2lsbF91bnJlZ2lzdGVyKGVlZXBjLT53bGFuX3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVlZXBjLT53bGFuX3Jma2lsbCk7CisJCWVlZXBjLT53bGFuX3Jma2lsbCA9IE5VTEw7CisJfQorCS8qCisJICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzIGNoYW5nZWQgYWZ0ZXIKKwkgKiBlZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigpCisJICovCisJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOworCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KQorCQlwY2lfaHBfZGVyZWdpc3RlcihlZWVwYy0+aG90cGx1Z19zbG90KTsKKworCWlmIChlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3RlcihlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVlZXBjLT5ibHVldG9vdGhfcmZraWxsKTsKKwkJZWVlcGMtPmJsdWV0b290aF9yZmtpbGwgPSBOVUxMOworCX0KKwlpZiAoZWVlcGMtPnd3YW4zZ19yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoZWVlcGMtPnd3YW4zZ19yZmtpbGwpOworCQlyZmtpbGxfZGVzdHJveShlZWVwYy0+d3dhbjNnX3Jma2lsbCk7CisJCWVlZXBjLT53d2FuM2dfcmZraWxsID0gTlVMTDsKKwl9CisJaWYgKGVlZXBjLT53aW1heF9yZmtpbGwpIHsKKwkJcmZraWxsX3VucmVnaXN0ZXIoZWVlcGMtPndpbWF4X3Jma2lsbCk7CisJCXJma2lsbF9kZXN0cm95KGVlZXBjLT53aW1heF9yZmtpbGwpOworCQllZWVwYy0+d2ltYXhfcmZraWxsID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZWVlcGNfcmZraWxsX2luaXQoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwltdXRleF9pbml0KCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKKworCXJlc3VsdCA9IGVlZXBjX25ld19yZmtpbGwoZWVlcGMsICZlZWVwYy0+d2xhbl9yZmtpbGwsCisJCQkJICAiZWVlcGMtd2xhbiIsIFJGS0lMTF9UWVBFX1dMQU4sCisJCQkJICBDTV9BU0xfV0xBTik7CisKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQorCQlnb3RvIGV4aXQ7CisKKwlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKGVlZXBjLCAmZWVlcGMtPmJsdWV0b290aF9yZmtpbGwsCisJCQkJICAiZWVlcGMtYmx1ZXRvb3RoIiwgUkZLSUxMX1RZUEVfQkxVRVRPT1RILAorCQkJCSAgQ01fQVNMX0JMVUVUT09USCk7CisKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQorCQlnb3RvIGV4aXQ7CisKKwlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKGVlZXBjLCAmZWVlcGMtPnd3YW4zZ19yZmtpbGwsCisJCQkJICAiZWVlcGMtd3dhbjNnIiwgUkZLSUxMX1RZUEVfV1dBTiwKKwkJCQkgIENNX0FTTF8zRyk7CisKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQorCQlnb3RvIGV4aXQ7CisKKwlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKGVlZXBjLCAmZWVlcGMtPndpbWF4X3Jma2lsbCwKKwkJCQkgICJlZWVwYy13aW1heCIsIFJGS0lMTF9UWVBFX1dJTUFYLAorCQkJCSAgQ01fQVNMX1dJTUFYKTsKKworCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCisJCWdvdG8gZXhpdDsKKworCXJlc3VsdCA9IGVlZXBjX3NldHVwX3BjaV9ob3RwbHVnKGVlZXBjKTsKKwkvKgorCSAqIElmIHdlIGdldCAtRUJVU1kgdGhlbiBzb21ldGhpbmcgZWxzZSBpcyBoYW5kbGluZyB0aGUgUENJIGhvdHBsdWcgLQorCSAqIGRvbid0IGZhaWwgaW4gdGhpcyBjYXNlCisJICovCisJaWYgKHJlc3VsdCA9PSAtRUJVU1kpCisJCXJlc3VsdCA9IDA7CisKKwllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDUiKTsKKwllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDYiKTsKKwllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDciKTsKKwkvKgorCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGR1cmluZworCSAqIHNldHVwLgorCSAqLworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKKworZXhpdDoKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQorCQllZWVwY19yZmtpbGxfZXhpdChlZWVwYyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFBsYXRmb3JtIGRyaXZlciAtIGhpYmVybmF0ZS9yZXN1bWUgY2FsbGJhY2tzCisgKi8KIHN0YXRpYyBpbnQgZWVlcGNfaG90a190aGF3KHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlpZiAoZWhvdGstPndsYW5fcmZraWxsKSB7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCWlmIChlZWVwYy0+d2xhbl9yZmtpbGwpIHsKIAkJYm9vbCB3bGFuOwogCiAJCS8qCkBAIC04NDAsOCArODM0LDggQEAKIAkJICogZHVyaW5nIHN1c3BlbmQuICBOb3JtYWxseSBpdCByZXN0b3JlcyBpdCBvbiByZXN1bWUsIGJ1dAogCQkgKiB3ZSBzaG91bGQga2ljayBpdCBvdXJzZWx2ZXMgaW4gY2FzZSBoaWJlcm5hdGlvbiBpcyBhYm9ydGVkLgogCQkgKi8KLQkJd2xhbiA9IGdldF9hY3BpKENNX0FTTF9XTEFOKTsKLQkJc2V0X2FjcGkoQ01fQVNMX1dMQU4sIHdsYW4pOworCQl3bGFuID0gZ2V0X2FjcGkoZWVlcGMsIENNX0FTTF9XTEFOKTsKKwkJc2V0X2FjcGkoZWVlcGMsIENNX0FTTF9XTEFOLCB3bGFuKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTg0OSw3MCArODQzLDk2IEBACiAKIHN0YXRpYyBpbnQgZWVlcGNfaG90a19yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQkvKiBSZWZyZXNoIGJvdGggd2xhbiByZmtpbGwgc3RhdGUgYW5kIHBjaSBob3RwbHVnICovCi0JaWYgKGVob3RrLT53bGFuX3Jma2lsbCkKLQkJZWVlcGNfcmZraWxsX2hvdHBsdWcoKTsKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCi0JaWYgKGVob3RrLT5ibHVldG9vdGhfcmZraWxsKQotCQlyZmtpbGxfc2V0X3N3X3N0YXRlKGVob3RrLT5ibHVldG9vdGhfcmZraWxsLAotCQkJCSAgICBnZXRfYWNwaShDTV9BU0xfQkxVRVRPT1RIKSAhPSAxKTsKLQlpZiAoZWhvdGstPnd3YW4zZ19yZmtpbGwpCi0JCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPnd3YW4zZ19yZmtpbGwsCi0JCQkJICAgIGdldF9hY3BpKENNX0FTTF8zRykgIT0gMSk7Ci0JaWYgKGVob3RrLT53aW1heF9yZmtpbGwpCi0JCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPndpbWF4X3Jma2lsbCwKLQkJCQkgICAgZ2V0X2FjcGkoQ01fQVNMX1dJTUFYKSAhPSAxKTsKKwkvKiBSZWZyZXNoIGJvdGggd2xhbiByZmtpbGwgc3RhdGUgYW5kIHBjaSBob3RwbHVnICovCisJaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOworCisJaWYgKGVlZXBjLT5ibHVldG9vdGhfcmZraWxsKQorCQlyZmtpbGxfc2V0X3N3X3N0YXRlKGVlZXBjLT5ibHVldG9vdGhfcmZraWxsLAorCQkJCSAgICBnZXRfYWNwaShlZWVwYywgQ01fQVNMX0JMVUVUT09USCkgIT0gMSk7CisJaWYgKGVlZXBjLT53d2FuM2dfcmZraWxsKQorCQlyZmtpbGxfc2V0X3N3X3N0YXRlKGVlZXBjLT53d2FuM2dfcmZraWxsLAorCQkJCSAgICBnZXRfYWNwaShlZWVwYywgQ01fQVNMXzNHKSAhPSAxKTsKKwlpZiAoZWVlcGMtPndpbWF4X3Jma2lsbCkKKwkJcmZraWxsX3NldF9zd19zdGF0ZShlZWVwYy0+d2ltYXhfcmZraWxsLAorCQkJCSAgICBnZXRfYWNwaShlZWVwYywgQ01fQVNMX1dJTUFYKSAhPSAxKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZWVlcGNfcG1fb3BzID0geworCS50aGF3ID0gZWVlcGNfaG90a190aGF3LAorCS5yZXN0b3JlID0gZWVlcGNfaG90a19yZXN0b3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRUVFUENfTEFQVE9QX0ZJTEUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmZWVlcGNfcG1fb3BzLAorCX0KK307CisKIC8qCi0gKiBId21vbgorICogSHdtb24gZGV2aWNlCiAgKi8KKworI2RlZmluZSBFRUVQQ19FQ19TQzAwICAgICAgMHg2MQorI2RlZmluZSBFRUVQQ19FQ19GQU5fUFdNICAgKEVFRVBDX0VDX1NDMDAgKyAyKSAvKiBGYW4gUFdNIGR1dHkgY3ljbGUgKCUpICovCisjZGVmaW5lIEVFRVBDX0VDX0ZBTl9IUlBNICAoRUVFUENfRUNfU0MwMCArIDUpIC8qIEhpZ2ggYnl0ZSwgZmFuIHNwZWVkIChSUE0pICovCisjZGVmaW5lIEVFRVBDX0VDX0ZBTl9MUlBNICAoRUVFUENfRUNfU0MwMCArIDYpIC8qIExvdyBieXRlLCBmYW4gc3BlZWQgKFJQTSkgKi8KKworI2RlZmluZSBFRUVQQ19FQ19TRkIwICAgICAgMHhEMAorI2RlZmluZSBFRUVQQ19FQ19GQU5fQ1RSTCAgKEVFRVBDX0VDX1NGQjAgKyAzKSAvKiBCeXRlIGNvbnRhaW5pbmcgU0YyNSAgKi8KKwogc3RhdGljIGludCBlZWVwY19nZXRfZmFuX3B3bSh2b2lkKQogewotCWludCB2YWx1ZSA9IDA7CisJdTggdmFsdWUgPSAwOwogCi0JcmVhZF9hY3BpX2ludChOVUxMLCBFRUVQQ19FQ19GQU5fUFdNLCAmdmFsdWUpOwotCXZhbHVlID0gdmFsdWUgKiAyNTUgLyAxMDA7Ci0JcmV0dXJuICh2YWx1ZSk7CisJZWNfcmVhZChFRUVQQ19FQ19GQU5fUFdNLCAmdmFsdWUpOworCXJldHVybiB2YWx1ZSAqIDI1NSAvIDEwMDsKIH0KIAogc3RhdGljIHZvaWQgZWVlcGNfc2V0X2Zhbl9wd20oaW50IHZhbHVlKQogewogCXZhbHVlID0gU0VOU09SU19MSU1JVCh2YWx1ZSwgMCwgMjU1KTsKIAl2YWx1ZSA9IHZhbHVlICogMTAwIC8gMjU1OwotCWVjX3dyaXRlKEVFRVBDX0VDX1NDMDIsIHZhbHVlKTsKKwllY193cml0ZShFRUVQQ19FQ19GQU5fUFdNLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgZWVlcGNfZ2V0X2Zhbl9ycG0odm9pZCkKIHsKLQlpbnQgaGlnaCA9IDA7Ci0JaW50IGxvdyA9IDA7CisJdTggaGlnaCA9IDA7CisJdTggbG93ID0gMDsKIAotCXJlYWRfYWNwaV9pbnQoTlVMTCwgRUVFUENfRUNfRkFOX0hSUE0sICZoaWdoKTsKLQlyZWFkX2FjcGlfaW50KE5VTEwsIEVFRVBDX0VDX0ZBTl9MUlBNLCAmbG93KTsKLQlyZXR1cm4gKGhpZ2ggPDwgOCB8IGxvdyk7CisJZWNfcmVhZChFRUVQQ19FQ19GQU5fSFJQTSwgJmhpZ2gpOworCWVjX3JlYWQoRUVFUENfRUNfRkFOX0xSUE0sICZsb3cpOworCXJldHVybiBoaWdoIDw8IDggfCBsb3c7CiB9CiAKIHN0YXRpYyBpbnQgZWVlcGNfZ2V0X2Zhbl9jdHJsKHZvaWQpCiB7Ci0JaW50IHZhbHVlID0gMDsKKwl1OCB2YWx1ZSA9IDA7CiAKLQlyZWFkX2FjcGlfaW50KE5VTEwsIEVFRVBDX0VDX0ZBTl9DVFJMLCAmdmFsdWUpOwotCXJldHVybiAoKHZhbHVlICYgMHgwMiA/IDEgOiAwKSk7CisJZWNfcmVhZChFRUVQQ19FQ19GQU5fQ1RSTCwgJnZhbHVlKTsKKwlpZiAodmFsdWUgJiAweDAyKQorCQlyZXR1cm4gMTsgLyogbWFudWFsICovCisJZWxzZQorCQlyZXR1cm4gMjsgLyogYXV0b21hdGljICovCiB9CiAKIHN0YXRpYyB2b2lkIGVlZXBjX3NldF9mYW5fY3RybChpbnQgbWFudWFsKQogewotCWludCB2YWx1ZSA9IDA7CisJdTggdmFsdWUgPSAwOwogCi0JcmVhZF9hY3BpX2ludChOVUxMLCBFRUVQQ19FQ19GQU5fQ1RSTCwgJnZhbHVlKTsKLQlpZiAobWFudWFsKQorCWVjX3JlYWQoRUVFUENfRUNfRkFOX0NUUkwsICZ2YWx1ZSk7CisJaWYgKG1hbnVhbCA9PSAxKQogCQl2YWx1ZSB8PSAweDAyOwogCWVsc2UKIAkJdmFsdWUgJj0gfjB4MDI7Ci0JZWNfd3JpdGUoRUVFUENfRUNfU0ZCMywgdmFsdWUpOworCWVjX3dyaXRlKEVFRVBDX0VDX0ZBTl9DVFJMLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3N5c19od21vbih2b2lkICgqc2V0KShpbnQpLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTk3MCwzNDggKzk5MCw0ODUgQEAKIAkuYXR0cnMgPSBod21vbl9hdHRyaWJ1dGVzCiB9OwogCi0vKgotICogZXhpdC9pbml0Ci0gKi8KLXN0YXRpYyB2b2lkIGVlZXBjX2JhY2tsaWdodF9leGl0KHZvaWQpCi17Ci0JaWYgKGVlZXBjX2JhY2tsaWdodF9kZXZpY2UpCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihlZWVwY19iYWNrbGlnaHRfZGV2aWNlKTsKLQllZWVwY19iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2V4aXQodm9pZCkKLXsKLQllZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA1Iik7Ci0JZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNiIpOwotCWVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCJcXF9TQi5QQ0kwLlAwUDciKTsKLQlpZiAoZWhvdGstPndsYW5fcmZraWxsKSB7Ci0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT53bGFuX3Jma2lsbCk7Ci0JCXJma2lsbF9kZXN0cm95KGVob3RrLT53bGFuX3Jma2lsbCk7Ci0JCWVob3RrLT53bGFuX3Jma2lsbCA9IE5VTEw7Ci0JfQotCS8qCi0JICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzIGNoYW5nZWQgYWZ0ZXIKLQkgKiBlZWVwY191bnJlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigpCi0JICovCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoKTsKLQlpZiAoZWhvdGstPmhvdHBsdWdfc2xvdCkKLQkJcGNpX2hwX2RlcmVnaXN0ZXIoZWhvdGstPmhvdHBsdWdfc2xvdCk7Ci0KLQlpZiAoZWhvdGstPmJsdWV0b290aF9yZmtpbGwpIHsKLQkJcmZraWxsX3VucmVnaXN0ZXIoZWhvdGstPmJsdWV0b290aF9yZmtpbGwpOwotCQlyZmtpbGxfZGVzdHJveShlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCk7Ci0JCWVob3RrLT5ibHVldG9vdGhfcmZraWxsID0gTlVMTDsKLQl9Ci0JaWYgKGVob3RrLT53d2FuM2dfcmZraWxsKSB7Ci0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT53d2FuM2dfcmZraWxsKTsKLQkJcmZraWxsX2Rlc3Ryb3koZWhvdGstPnd3YW4zZ19yZmtpbGwpOwotCQllaG90ay0+d3dhbjNnX3Jma2lsbCA9IE5VTEw7Ci0JfQotCWlmIChlaG90ay0+d2ltYXhfcmZraWxsKSB7Ci0JCXJma2lsbF91bnJlZ2lzdGVyKGVob3RrLT53aW1heF9yZmtpbGwpOwotCQlyZmtpbGxfZGVzdHJveShlaG90ay0+d2ltYXhfcmZraWxsKTsKLQkJZWhvdGstPndpbWF4X3Jma2lsbCA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBlZWVwY19pbnB1dF9leGl0KHZvaWQpCi17Ci0JaWYgKGVob3RrLT5pbnB1dGRldikKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZWhvdGstPmlucHV0ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgZWVlcGNfaHdtb25fZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgZWVlcGNfaHdtb25fZXhpdChzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYykKIHsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbjsKIAotCWh3bW9uID0gZWVlcGNfaHdtb25fZGV2aWNlOworCWh3bW9uID0gZWVlcGMtPmh3bW9uX2RldmljZTsKIAlpZiAoIWh3bW9uKQotCQlyZXR1cm4gOworCQlyZXR1cm47CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZod21vbi0+a29iaiwKIAkJCSAgICZod21vbl9hdHRyaWJ1dGVfZ3JvdXApOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTsKLQllZWVwY19od21vbl9kZXZpY2UgPSBOVUxMOworCWVlZXBjLT5od21vbl9kZXZpY2UgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IGVlZXBjX25ld19yZmtpbGwoc3RydWN0IHJma2lsbCAqKnJma2lsbCwKLQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgZW51bSByZmtpbGxfdHlwZSB0eXBlLCBpbnQgY20pCitzdGF0aWMgaW50IGVlZXBjX2h3bW9uX2luaXQoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCiB7CisJc3RydWN0IGRldmljZSAqaHdtb247CiAJaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IGdldF9hY3BpKGNtKTsKLQlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKLQotCSpyZmtpbGwgPSByZmtpbGxfYWxsb2MobmFtZSwgZGV2LCB0eXBlLAotCQkJICAgICAgICZlZWVwY19yZmtpbGxfb3BzLCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWNtKTsKLQotCWlmICghKnJma2lsbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZmtpbGxfaW5pdF9zd19zdGF0ZSgqcmZraWxsLCBnZXRfYWNwaShjbSkgIT0gMSk7Ci0JcmVzdWx0ID0gcmZraWxsX3JlZ2lzdGVyKCpyZmtpbGwpOwotCWlmIChyZXN1bHQpIHsKLQkJcmZraWxsX2Rlc3Ryb3koKnJma2lsbCk7Ci0JCSpyZmtpbGwgPSBOVUxMOwotCQlyZXR1cm4gcmVzdWx0OworCWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYpOworCWlmIChJU19FUlIoaHdtb24pKSB7CisJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGVlZXBjIGh3bW9uIGRldmljZVxuIik7CisJCWVlZXBjLT5od21vbl9kZXZpY2UgPSBOVUxMOworCQlyZXR1cm4gUFRSX0VSUihod21vbik7CiAJfQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgZWVlcGNfcmZraWxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXN1bHQgPSAwOwotCi0JbXV0ZXhfaW5pdCgmZWhvdGstPmhvdHBsdWdfbG9jayk7Ci0KLQlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKCZlaG90ay0+d2xhbl9yZmtpbGwsCi0JCQkJICAiZWVlcGMtd2xhbiIsIGRldiwKLQkJCQkgIFJGS0lMTF9UWVBFX1dMQU4sIENNX0FTTF9XTEFOKTsKLQotCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCi0JCWdvdG8gZXhpdDsKLQotCXJlc3VsdCA9IGVlZXBjX25ld19yZmtpbGwoJmVob3RrLT5ibHVldG9vdGhfcmZraWxsLAotCQkJCSAgImVlZXBjLWJsdWV0b290aCIsIGRldiwKLQkJCQkgIFJGS0lMTF9UWVBFX0JMVUVUT09USCwgQ01fQVNMX0JMVUVUT09USCk7Ci0KLQlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQotCQlnb3RvIGV4aXQ7Ci0KLQlyZXN1bHQgPSBlZWVwY19uZXdfcmZraWxsKCZlaG90ay0+d3dhbjNnX3Jma2lsbCwKLQkJCQkgICJlZWVwYy13d2FuM2ciLCBkZXYsCi0JCQkJICBSRktJTExfVFlQRV9XV0FOLCBDTV9BU0xfM0cpOwotCi0JaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVOT0RFVikKLQkJZ290byBleGl0OwotCi0JcmVzdWx0ID0gZWVlcGNfbmV3X3Jma2lsbCgmZWhvdGstPndpbWF4X3Jma2lsbCwKLQkJCQkgICJlZWVwYy13aW1heCIsIGRldiwKLQkJCQkgIFJGS0lMTF9UWVBFX1dJTUFYLCBDTV9BU0xfV0lNQVgpOwotCi0JaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVOT0RFVikKLQkJZ290byBleGl0OwotCi0JcmVzdWx0ID0gZWVlcGNfc2V0dXBfcGNpX2hvdHBsdWcoKTsKLQkvKgotCSAqIElmIHdlIGdldCAtRUJVU1kgdGhlbiBzb21ldGhpbmcgZWxzZSBpcyBoYW5kbGluZyB0aGUgUENJIGhvdHBsdWcgLQotCSAqIGRvbid0IGZhaWwgaW4gdGhpcyBjYXNlCi0JICovCi0JaWYgKHJlc3VsdCA9PSAtRUJVU1kpCi0JCXJlc3VsdCA9IDA7Ci0KLQllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoIlxcX1NCLlBDSTAuUDBQNSIpOwotCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcigiXFxfU0IuUENJMC5QMFA2Iik7Ci0JZWVlcGNfcmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCJcXF9TQi5QQ0kwLlAwUDciKTsKLQkvKgotCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGR1cmluZwotCSAqIHNldHVwLgotCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7Ci0KLWV4aXQ6Ci0JaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVOT0RFVikKLQkJZWVlcGNfcmZraWxsX2V4aXQoKTsKKwllZWVwYy0+aHdtb25fZGV2aWNlID0gaHdtb247CisJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZod21vbi0+a29iaiwKKwkJCQkgICAgJmh3bW9uX2F0dHJpYnV0ZV9ncm91cCk7CisJaWYgKHJlc3VsdCkKKwkJZWVlcGNfaHdtb25fZXhpdChlZWVwYyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBlZWVwY19iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKgorICogQmFja2xpZ2h0IGRldmljZQorICovCitzdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBibF9nZXRfZGF0YShiZCk7CisKKwlyZXR1cm4gZ2V0X2FjcGkoZWVlcGMsIENNX0FTTF9QQU5FTEJSSUdIVCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBibF9nZXRfZGF0YShiZCk7CisKKwlyZXR1cm4gc2V0X2FjcGkoZWVlcGMsIENNX0FTTF9QQU5FTEJSSUdIVCwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9ibF9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCXJldHVybiBzZXRfYnJpZ2h0bmVzcyhiZCwgYmQtPnByb3BzLmJyaWdodG5lc3MpOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZWVlcGNibF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzLAorCS51cGRhdGVfc3RhdHVzID0gdXBkYXRlX2JsX3N0YXR1cywKK307CisKK3N0YXRpYyBpbnQgZWVlcGNfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYykKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBlZWVwYy0+YmFja2xpZ2h0X2RldmljZTsKKwlpbnQgb2xkID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisKKwliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGJkLCBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CisKKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW50IGVlZXBjX2JhY2tsaWdodF9pbml0KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQogewogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIAotCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihFRUVQQ19IT1RLX0ZJTEUsIGRldiwKLQkJCQkgICAgICAgTlVMTCwgJmVlZXBjYmxfb3BzKTsKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoRUVFUENfTEFQVE9QX0ZJTEUsCisJCQkJICAgICAgICZlZWVwYy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsCisJCQkJICAgICAgIGVlZXBjLCAmZWVlcGNibF9vcHMpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGVlZXBjIGJhY2tsaWdodCBkZXZpY2VcbiIpOwotCQllZWVwY19iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKKwkJZWVlcGMtPmJhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwogCQlyZXR1cm4gUFRSX0VSUihiZCk7CiAJfQotCWVlZXBjX2JhY2tsaWdodF9kZXZpY2UgPSBiZDsKKwllZWVwYy0+YmFja2xpZ2h0X2RldmljZSA9IGJkOwogCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDE1OwotCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzKE5VTEwpOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzKGJkKTsKIAliZC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwogCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlZWVwY19od21vbl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGVlZXBjX2JhY2tsaWdodF9leGl0KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQogewotCXN0cnVjdCBkZXZpY2UgKmh3bW9uOwotCWludCByZXN1bHQ7Ci0KLQlod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOwotCWlmIChJU19FUlIoaHdtb24pKSB7Ci0JCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGVlZXBjIGh3bW9uIGRldmljZVxuIik7Ci0JCWVlZXBjX2h3bW9uX2RldmljZSA9IE5VTEw7Ci0JCXJldHVybiBQVFJfRVJSKGh3bW9uKTsKLQl9Ci0JZWVlcGNfaHdtb25fZGV2aWNlID0gaHdtb247Ci0JcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZod21vbi0+a29iaiwKLQkJCQkgICAgJmh3bW9uX2F0dHJpYnV0ZV9ncm91cCk7Ci0JaWYgKHJlc3VsdCkKLQkJZWVlcGNfaHdtb25fZXhpdCgpOwotCXJldHVybiByZXN1bHQ7CisJaWYgKGVlZXBjLT5iYWNrbGlnaHRfZGV2aWNlKQorCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZWVlcGMtPmJhY2tsaWdodF9kZXZpY2UpOworCWVlZXBjLT5iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBlZWVwY19pbnB1dF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKKworLyoKKyAqIElucHV0IGRldmljZSAoaS5lLiBob3RrZXlzKQorICovCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqZWVlcGNfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKAorCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLAorCWludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gZWVlcGMtPmtleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+Y29kZSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZWVlcGNfaW5wdXRfbm90aWZ5KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLCBpbnQgZXZlbnQpCit7CisJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWtleSA9IGVlZXBjX2dldF9lbnRyeV9ieV9zY2FuY29kZShlZWVwYywgZXZlbnQpOworCWlmIChrZXkpIHsKKwkJc3dpdGNoIChrZXktPnR5cGUpIHsKKwkJY2FzZSBLRV9LRVk6CisJCQlpbnB1dF9yZXBvcnRfa2V5KGVlZXBjLT5pbnB1dGRldiwga2V5LT5rZXljb2RlLAorCQkJCQkJMSk7CisJCQlpbnB1dF9zeW5jKGVlZXBjLT5pbnB1dGRldik7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGVlZXBjLT5pbnB1dGRldiwga2V5LT5rZXljb2RlLAorCQkJCQkJMCk7CisJCQlpbnB1dF9zeW5jKGVlZXBjLT5pbnB1dGRldik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmVlZXBjX2dldF9lbnRyeV9ieV9rZXljb2RlKAorCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLCBpbnQgY29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IGVlZXBjLT5rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKQorCQlpZiAoY29kZSA9PSBrZXktPmtleWNvZGUgJiYga2V5LT50eXBlID09IEtFX0tFWSkKKwkJCXJldHVybiBrZXk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBlZWVwY19nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQgKmtleWNvZGUpCit7CisJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBrZXlfZW50cnkgKmtleSA9IGVlZXBjX2dldF9lbnRyeV9ieV9zY2FuY29kZShlZWVwYywgc2NhbmNvZGUpOworCisJaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7CisJCSprZXljb2RlID0ga2V5LT5rZXljb2RlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBlZWVwY19zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWludCBvbGRfa2V5Y29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXkgPSBlZWVwY19nZXRfZW50cnlfYnlfc2NhbmNvZGUoZWVlcGMsIHNjYW5jb2RlKTsKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7CisJCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlpZiAoIWVlZXBjX2dldF9lbnRyeV9ieV9rZXljb2RlKGVlZXBjLCBvbGRfa2V5Y29kZSkpCisJCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZWVlcGNfaW5wdXRfaW5pdChzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYykKIHsKIAljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CiAJaW50IHJlc3VsdDsKIAotCWVob3RrLT5pbnB1dGRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghZWhvdGstPmlucHV0ZGV2KSB7CisJZWVlcGMtPmlucHV0ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFlZWVwYy0+aW5wdXRkZXYpIHsKIAkJcHJfaW5mbygiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQllaG90ay0+aW5wdXRkZXYtPm5hbWUgPSAiQXN1cyBFZWVQQyBleHRyYSBidXR0b25zIjsKLQllaG90ay0+aW5wdXRkZXYtPmRldi5wYXJlbnQgPSBkZXY7Ci0JZWhvdGstPmlucHV0ZGV2LT5waHlzID0gRUVFUENfSE9US19GSUxFICIvaW5wdXQwIjsKLQllaG90ay0+aW5wdXRkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKLQllaG90ay0+aW5wdXRkZXYtPmdldGtleWNvZGUgPSBlZWVwY19nZXRrZXljb2RlOwotCWVob3RrLT5pbnB1dGRldi0+c2V0a2V5Y29kZSA9IGVlZXBjX3NldGtleWNvZGU7CisJZWVlcGMtPmlucHV0ZGV2LT5uYW1lID0gIkFzdXMgRWVlUEMgZXh0cmEgYnV0dG9ucyI7CisJZWVlcGMtPmlucHV0ZGV2LT5kZXYucGFyZW50ID0gJmVlZXBjLT5wbGF0Zm9ybV9kZXZpY2UtPmRldjsKKwllZWVwYy0+aW5wdXRkZXYtPnBoeXMgPSBFRUVQQ19MQVBUT1BfRklMRSAiL2lucHV0MCI7CisJZWVlcGMtPmlucHV0ZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJZWVlcGMtPmlucHV0ZGV2LT5nZXRrZXljb2RlID0gZWVlcGNfZ2V0a2V5Y29kZTsKKwllZWVwYy0+aW5wdXRkZXYtPnNldGtleWNvZGUgPSBlZWVwY19zZXRrZXljb2RlOworCWlucHV0X3NldF9kcnZkYXRhKGVlZXBjLT5pbnB1dGRldiwgZWVlcGMpOwogCisJZWVlcGMtPmtleW1hcCA9IGttZW1kdXAoZWVlcGNfa2V5bWFwLCBzaXplb2YoZWVlcGNfa2V5bWFwKSwKKwkJCQlHRlBfS0VSTkVMKTsKIAlmb3IgKGtleSA9IGVlZXBjX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKIAkJc3dpdGNoIChrZXktPnR5cGUpIHsKIAkJY2FzZSBLRV9LRVk6Ci0JCQlzZXRfYml0KEVWX0tFWSwgZWhvdGstPmlucHV0ZGV2LT5ldmJpdCk7Ci0JCQlzZXRfYml0KGtleS0+a2V5Y29kZSwgZWhvdGstPmlucHV0ZGV2LT5rZXliaXQpOworCQkJc2V0X2JpdChFVl9LRVksIGVlZXBjLT5pbnB1dGRldi0+ZXZiaXQpOworCQkJc2V0X2JpdChrZXktPmtleWNvZGUsIGVlZXBjLT5pbnB1dGRldi0+a2V5Yml0KTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJlc3VsdCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShlaG90ay0+aW5wdXRkZXYpOworCXJlc3VsdCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShlZWVwYy0+aW5wdXRkZXYpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJfaW5mbygiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGVob3RrLT5pbnB1dGRldik7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGVlZXBjLT5pbnB1dGRldik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIGVlZXBjX2lucHV0X2V4aXQoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OworCWlmIChlZWVwYy0+aW5wdXRkZXYpIHsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZWVlcGMtPmlucHV0ZGV2KTsKKwkJa2ZyZWUoZWVlcGMtPmtleW1hcCk7CisJfQorfQorCisvKgorICogQUNQSSBkcml2ZXIKKyAqLworc3RhdGljIHZvaWQgZWVlcGNfYWNwaV9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKK3sKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKwl1MTYgY291bnQ7CisKKwlpZiAoZXZlbnQgPiBBQ1BJX01BWF9TWVNfTk9USUZZKQorCQlyZXR1cm47CisJY291bnQgPSBlZWVwYy0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKys7CisJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChkZXZpY2UsIGV2ZW50LCBjb3VudCk7CisJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCisJCQkJCWRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LAorCQkJCQljb3VudCk7CisKKwkvKiBCcmlnaHRuZXNzIGV2ZW50cyBhcmUgc3BlY2lhbCAqLworCWlmIChldmVudCA+PSBOT1RJRllfQlJOX01JTiAmJiBldmVudCA8PSBOT1RJRllfQlJOX01BWCkgeworCisJCS8qIElnbm9yZSB0aGVtIGNvbXBsZXRlbHkgaWYgdGhlIGFjcGkgdmlkZW8gZHJpdmVyIGlzIHVzZWQgKi8KKwkJaWYgKGVlZXBjLT5iYWNrbGlnaHRfZGV2aWNlICE9IE5VTEwpIHsKKwkJCWludCBvbGRfYnJpZ2h0bmVzcywgbmV3X2JyaWdodG5lc3M7CisKKwkJCS8qIFVwZGF0ZSB0aGUgYmFja2xpZ2h0IGRldmljZS4gKi8KKwkJCW9sZF9icmlnaHRuZXNzID0gZWVlcGNfYmFja2xpZ2h0X25vdGlmeShlZWVwYyk7CisKKwkJCS8qIENvbnZlcnQgZXZlbnQgdG8ga2V5cHJlc3MgKG9ic29sZXNjZW50IGhhY2spICovCisJCQluZXdfYnJpZ2h0bmVzcyA9IGV2ZW50IC0gTk9USUZZX0JSTl9NSU47CisKKwkJCWlmIChuZXdfYnJpZ2h0bmVzcyA8IG9sZF9icmlnaHRuZXNzKSB7CisJCQkJZXZlbnQgPSBOT1RJRllfQlJOX01JTjsgLyogYnJpZ2h0bmVzcyBkb3duICovCisJCQl9IGVsc2UgaWYgKG5ld19icmlnaHRuZXNzID4gb2xkX2JyaWdodG5lc3MpIHsKKwkJCQlldmVudCA9IE5PVElGWV9CUk5fTUFYOyAvKiBicmlnaHRuZXNzIHVwICovCisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJKiBubyBjaGFuZ2UgaW4gYnJpZ2h0bmVzcyAtIGFscmVhZHkgYXQgbWluL21heCwKKwkJCQkqIGV2ZW50IHdpbGwgYmUgZGVzaXJlZCB2YWx1ZSAob3IgZWxzZSBpZ25vcmVkKQorCQkJCSovCisJCQl9CisJCQllZWVwY19pbnB1dF9ub3RpZnkoZWVlcGMsIGV2ZW50KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhIGJvbmEtZmlkZSBrZXlwcmVzcyBldmVudCAqLworCQllZWVwY19pbnB1dF9ub3RpZnkoZWVlcGMsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNtc2dfcXVpcmsoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMsIGludCBjbSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgZHVtbXk7CisKKwkvKiBTb21lIEJJT1NlcyBkbyBub3QgcmVwb3J0IGNtIGFsdGhvdWdoIGl0IGlzIGF2YWxpYWJsZS4KKwkgICBDaGVjayBpZiBjbV9nZXR2W2NtXSB3b3JrcyBhbmQsIGlmIHllcywgYXNzdW1lIGNtIHNob3VsZCBiZSBzZXQuICovCisJaWYgKCEoZWVlcGMtPmNtX3N1cHBvcnRlZCAmICgxIDw8IGNtKSkKKwkgICAgJiYgIXJlYWRfYWNwaV9pbnQoZWVlcGMtPmhhbmRsZSwgY21fZ2V0dltjbV0sICZkdW1teSkpIHsKKwkJcHJfaW5mbygiJXMgKCV4KSBub3QgcmVwb3J0ZWQgYnkgQklPUywiCisJCQkiIGVuYWJsaW5nIGFueXdheVxuIiwgbmFtZSwgMSA8PCBjbSk7CisJCWVlZXBjLT5jbV9zdXBwb3J0ZWQgfD0gMSA8PCBjbTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNtc2dfcXVpcmtzKHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQoreworCWNtc2dfcXVpcmsoZWVlcGMsIENNX0FTTF9MSUQsICJMSUQiKTsKKwljbXNnX3F1aXJrKGVlZXBjLCBDTV9BU0xfVFlQRSwgIlRZUEUiKTsKKwljbXNnX3F1aXJrKGVlZXBjLCBDTV9BU0xfUEFORUxQT1dFUiwgIlBBTkVMUE9XRVIiKTsKKwljbXNnX3F1aXJrKGVlZXBjLCBDTV9BU0xfVFBELCAiVFBEIik7Cit9CisKK3N0YXRpYyBpbnQgZWVlcGNfYWNwaV9pbml0KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLAorCQkJICAgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgaW50IGluaXRfZmxhZ3M7CiAJaW50IHJlc3VsdDsKIAotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlwcl9ub3RpY2UoRUVFUENfSE9US19OQU1FICJcbiIpOwotCWVob3RrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVlZXBjX2hvdGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVob3RrKQotCQlyZXR1cm4gLUVOT01FTTsKLQllaG90ay0+aW5pdF9mbGFnID0gRElTQUJMRV9BU0xfV0xBTiB8IERJU0FCTEVfQVNMX0RJU1BMQVlTV0lUQ0g7Ci0JZWhvdGstPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwotCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEVFRVBDX0hPVEtfREVWSUNFX05BTUUpOwotCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBFRUVQQ19IT1RLX0NMQVNTKTsKLQlkZXZpY2UtPmRyaXZlcl9kYXRhID0gZWhvdGs7Ci0JZWhvdGstPmRldmljZSA9IGRldmljZTsKLQotCXJlc3VsdCA9IGVlZXBjX2hvdGtfY2hlY2soKTsKKwlyZXN1bHQgPSBhY3BpX2J1c19nZXRfc3RhdHVzKGRldmljZSk7CiAJaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RyaXZlcjsKLQllZWVwY19lbmFibGVfY2FtZXJhKCk7Ci0KLQkvKiBSZWdpc3RlciBwbGF0Zm9ybSBzdHVmZiAqLwotCXJlc3VsdCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGxhdGZvcm1fZHJpdmVyKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGZhaWxfcGxhdGZvcm1fZHJpdmVyOwotCXBsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhFRUVQQ19IT1RLX0ZJTEUsIC0xKTsKLQlpZiAoIXBsYXRmb3JtX2RldmljZSkgewotCQlyZXN1bHQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMTsKKwkJcmV0dXJuIHJlc3VsdDsKKwlpZiAoIWRldmljZS0+c3RhdHVzLnByZXNlbnQpIHsKKwkJcHJfZXJyKCJIb3RrZXkgZGV2aWNlIG5vdCBwcmVzZW50LCBhYm9ydGluZ1xuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KLQlyZXN1bHQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBsYXRmb3JtX2RldmljZSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTI7Ci0JcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwbGF0Zm9ybV9kZXZpY2UtPmRldi5rb2JqLAotCQkJCSAgICAmcGxhdGZvcm1fYXR0cmlidXRlX2dyb3VwKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGZhaWxfc3lzZnM7CiAKLQlkZXYgPSAmcGxhdGZvcm1fZGV2aWNlLT5kZXY7CisJaW5pdF9mbGFncyA9IERJU0FCTEVfQVNMX1dMQU4gfCBESVNBQkxFX0FTTF9ESVNQTEFZU1dJVENIOworCXByX25vdGljZSgiSG90a2V5IGluaXQgZmxhZ3MgMHgleFxuIiwgaW5pdF9mbGFncyk7CisKKwlpZiAod3JpdGVfYWNwaV9pbnQoZWVlcGMtPmhhbmRsZSwgIklOSVQiLCBpbml0X2ZsYWdzKSkgeworCQlwcl9lcnIoIkhvdGtleSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBnZXQgY29udHJvbCBtZXRob2RzIHN1cHBvcnRlZCAqLworCWlmIChyZWFkX2FjcGlfaW50KGVlZXBjLT5oYW5kbGUsICJDTVNHIiwgJmVlZXBjLT5jbV9zdXBwb3J0ZWQpKSB7CisJCXByX2VycigiR2V0IGNvbnRyb2wgbWV0aG9kcyBzdXBwb3J0ZWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNtc2dfcXVpcmtzKGVlZXBjKTsKKwlwcl9pbmZvKCJHZXQgY29udHJvbCBtZXRob2RzIHN1cHBvcnRlZDogMHgleFxuIiwgZWVlcGMtPmNtX3N1cHBvcnRlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGVlZXBjX2VuYWJsZV9jYW1lcmEoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCit7CisJLyoKKwkgKiBJZiB0aGUgZm9sbG93aW5nIGNhbGwgdG8gc2V0X2FjcGkoKSBmYWlscywgaXQncyBiZWNhdXNlIHRoZXJlJ3Mgbm8KKwkgKiBjYW1lcmEgc28gd2UgY2FuIGlnbm9yZSB0aGUgZXJyb3IuCisJICovCisJaWYgKGdldF9hY3BpKGVlZXBjLCBDTV9BU0xfQ0FNRVJBKSA9PSAwKQorCQlzZXRfYWNwaShlZWVwYywgQ01fQVNMX0NBTUVSQSwgMSk7Cit9CisKK3N0YXRpYyBib29sIGVlZXBjX2RldmljZV9wcmVzZW50OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZWVwY19hY3BpX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYzsKKwlpbnQgcmVzdWx0OworCisJcHJfbm90aWNlKEVFRVBDX0xBUFRPUF9OQU1FICJcbiIpOworCWVlZXBjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVlZXBjX2xhcHRvcCksIEdGUF9LRVJORUwpOworCWlmICghZWVlcGMpCisJCXJldHVybiAtRU5PTUVNOworCWVlZXBjLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBFRUVQQ19BQ1BJX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgRUVFUENfQUNQSV9DTEFTUyk7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGVlZXBjOworCisJcmVzdWx0ID0gZWVlcGNfYWNwaV9pbml0KGVlZXBjLCBkZXZpY2UpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZmFpbF9wbGF0Zm9ybTsKKwllZWVwY19lbmFibGVfY2FtZXJhKGVlZXBjKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGRldmljZSBmaXJzdC4gIEl0IGlzIHVzZWQgYXMgYSBwYXJlbnQgZm9yIHRoZQorCSAqIHN1Yi1kZXZpY2VzIGJlbG93LgorCSAqCisJICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBBQ1BJIGRldmljZSBpdAorCSAqIHdpbGwgYmFpbCBvdXQsIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggYQorCSAqIGZpeGVkIG5hbWUuICBPZiBjb3Vyc2UgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSwKKwkgKiBhbmQgbWFjaGluZS1zcGVjaWZpYyBzY3JpcHRzIGZpbmQgdGhlIGZpeGVkIG5hbWUgY29udmVuaWVudC4gIEJ1dAorCSAqIEl0J3MgYWxzbyBnb29kIGZvciB1cyB0byBleGNsdWRlIG11bHRpcGxlIGluc3RhbmNlcyBiZWNhdXNlIGJvdGgKKwkgKiBvdXIgaHdtb24gYW5kIG91ciB3bGFuIHJma2lsbCBzdWJkZXZpY2UgdXNlIGdsb2JhbCBBQ1BJIG9iamVjdHMKKwkgKiAodGhlIEVDIGFuZCB0aGUgd2xhbiBQQ0kgc2xvdCByZXNwZWN0aXZlbHkpLgorCSAqLworCXJlc3VsdCA9IGVlZXBjX3BsYXRmb3JtX2luaXQoZWVlcGMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZmFpbF9wbGF0Zm9ybTsKIAogCWlmICghYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKSB7Ci0JCXJlc3VsdCA9IGVlZXBjX2JhY2tsaWdodF9pbml0KGRldik7CisJCXJlc3VsdCA9IGVlZXBjX2JhY2tsaWdodF9pbml0KGVlZXBjKTsKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gZmFpbF9iYWNrbGlnaHQ7CiAJfSBlbHNlCi0JCXByX2luZm8oIkJhY2tsaWdodCBjb250cm9sbGVkIGJ5IEFDUEkgdmlkZW8gIgotCQkJImRyaXZlclxuIik7CisJCXByX2luZm8oIkJhY2tsaWdodCBjb250cm9sbGVkIGJ5IEFDUEkgdmlkZW8gZHJpdmVyXG4iKTsKIAotCXJlc3VsdCA9IGVlZXBjX2lucHV0X2luaXQoZGV2KTsKKwlyZXN1bHQgPSBlZWVwY19pbnB1dF9pbml0KGVlZXBjKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWxfaW5wdXQ7CiAKLQlyZXN1bHQgPSBlZWVwY19od21vbl9pbml0KGRldik7CisJcmVzdWx0ID0gZWVlcGNfaHdtb25faW5pdChlZWVwYyk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmYWlsX2h3bW9uOwogCi0JcmVzdWx0ID0gZWVlcGNfcmZraWxsX2luaXQoZGV2KTsKKwlyZXN1bHQgPSBlZWVwY19sZWRfaW5pdChlZWVwYyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX2xlZDsKKworCXJlc3VsdCA9IGVlZXBjX3Jma2lsbF9pbml0KGVlZXBjKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWxfcmZraWxsOwogCisJZWVlcGNfZGV2aWNlX3ByZXNlbnQgPSB0cnVlOwogCXJldHVybiAwOwogCiBmYWlsX3Jma2lsbDoKLQllZWVwY19od21vbl9leGl0KCk7CisJZWVlcGNfbGVkX2V4aXQoZWVlcGMpOworZmFpbF9sZWQ6CisJZWVlcGNfaHdtb25fZXhpdChlZWVwYyk7CiBmYWlsX2h3bW9uOgotCWVlZXBjX2lucHV0X2V4aXQoKTsKKwllZWVwY19pbnB1dF9leGl0KGVlZXBjKTsKIGZhaWxfaW5wdXQ6Ci0JZWVlcGNfYmFja2xpZ2h0X2V4aXQoKTsKKwllZWVwY19iYWNrbGlnaHRfZXhpdChlZWVwYyk7CiBmYWlsX2JhY2tsaWdodDoKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBsYXRmb3JtX2RldmljZS0+ZGV2LmtvYmosCi0JCQkgICAmcGxhdGZvcm1fYXR0cmlidXRlX2dyb3VwKTsKLWZhaWxfc3lzZnM6Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbChwbGF0Zm9ybV9kZXZpY2UpOwotZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgotCXBsYXRmb3JtX2RldmljZV9wdXQocGxhdGZvcm1fZGV2aWNlKTsKLWZhaWxfcGxhdGZvcm1fZGV2aWNlMToKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdGZvcm1fZHJpdmVyKTsKLWZhaWxfcGxhdGZvcm1fZHJpdmVyOgotCWtmcmVlKGVob3RrKTsKKwllZWVwY19wbGF0Zm9ybV9leGl0KGVlZXBjKTsKK2ZhaWxfcGxhdGZvcm06CisJa2ZyZWUoZWVlcGMpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBlZWVwY19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCitzdGF0aWMgaW50IGVlZXBjX2FjcGlfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAotCWVlZXBjX2JhY2tsaWdodF9leGl0KCk7Ci0JZWVlcGNfcmZraWxsX2V4aXQoKTsKLQllZWVwY19pbnB1dF9leGl0KCk7Ci0JZWVlcGNfaHdtb25fZXhpdCgpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGxhdGZvcm1fZGV2aWNlLT5kZXYua29iaiwKLQkJCSAgICZwbGF0Zm9ybV9hdHRyaWJ1dGVfZ3JvdXApOwotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBsYXRmb3JtX2RldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CisJZWVlcGNfYmFja2xpZ2h0X2V4aXQoZWVlcGMpOworCWVlZXBjX3Jma2lsbF9leGl0KGVlZXBjKTsKKwllZWVwY19pbnB1dF9leGl0KGVlZXBjKTsKKwllZWVwY19od21vbl9leGl0KGVlZXBjKTsKKwllZWVwY19sZWRfZXhpdChlZWVwYyk7CisJZWVlcGNfcGxhdGZvcm1fZXhpdChlZWVwYyk7CiAKLQlrZnJlZShlaG90ayk7CisJa2ZyZWUoZWVlcGMpOwogCXJldHVybiAwOwogfQogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgZWVlcGNfZGV2aWNlX2lkc1tdID0geworCXtFRUVQQ19BQ1BJX0hJRCwgMH0sCisJeyIiLCAwfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGVlZXBjX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGVlZXBjX2FjcGlfZHJpdmVyID0geworCS5uYW1lID0gRUVFUENfTEFQVE9QX05BTUUsCisJLmNsYXNzID0gRUVFUENfQUNQSV9DTEFTUywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaWRzID0gZWVlcGNfZGV2aWNlX2lkcywKKwkuZmxhZ3MgPSBBQ1BJX0RSSVZFUl9BTExfTk9USUZZX0VWRU5UUywKKwkub3BzID0geworCQkuYWRkID0gZWVlcGNfYWNwaV9hZGQsCisJCS5yZW1vdmUgPSBlZWVwY19hY3BpX3JlbW92ZSwKKwkJLm5vdGlmeSA9IGVlZXBjX2FjcGlfbm90aWZ5LAorCX0sCit9OworCisKIHN0YXRpYyBpbnQgX19pbml0IGVlZXBjX2xhcHRvcF9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmVlZXBjX2hvdGtfZHJpdmVyKTsKKwlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7Ci0JaWYgKCFlaG90aykgewotCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmZWVlcGNfaG90a19kcml2ZXIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmZWVlcGNfYWNwaV9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGZhaWxfYWNwaV9kcml2ZXI7CisJaWYgKCFlZWVwY19kZXZpY2VfcHJlc2VudCkgeworCQlyZXN1bHQgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbm9fZGV2aWNlOwogCX0KIAlyZXR1cm4gMDsKKworZmFpbF9ub19kZXZpY2U6CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmVlZXBjX2FjcGlfZHJpdmVyKTsKK2ZhaWxfYWNwaV9kcml2ZXI6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGVlZXBjX2xhcHRvcF9leGl0KHZvaWQpCiB7Ci0JYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmVlZXBjX2hvdGtfZHJpdmVyKTsKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmZWVlcGNfYWNwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChlZWVwY19sYXB0b3BfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwppbmRleCBiY2Q0YmE4Li5iNjYwMjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCWNoYXIgcGh5c1szMl07CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGZfZGV2aWNlOwotCXN0cnVjdCBrZmlmbyAqZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gZmlmbzsKIAlzcGlubG9ja190IGZpZm9fbG9jazsKIAlpbnQgcmZraWxsX3N1cHBvcnRlZDsKIAlpbnQgcmZraWxsX3N0YXRlOwpAQCAtODI0LDEyICs4MjQsMTAgQEAKIAogCS8qIGtmaWZvICovCiAJc3Bpbl9sb2NrX2luaXQoJmZ1aml0c3VfaG90a2V5LT5maWZvX2xvY2spOwotCWZ1aml0c3VfaG90a2V5LT5maWZvID0KLQkgICAga2ZpZm9fYWxsb2MoUklOR0JVRkZFUlNJWkUgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCwKLQkJCSZmdWppdHN1X2hvdGtleS0+Zmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKGZ1aml0c3VfaG90a2V5LT5maWZvKSkgeworCWVycm9yID0ga2ZpZm9fYWxsb2MoJmZ1aml0c3VfaG90a2V5LT5maWZvLCBSSU5HQlVGRkVSU0laRSAqIHNpemVvZihpbnQpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAia2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJZXJyb3IgPSBQVFJfRVJSKGZ1aml0c3VfaG90a2V5LT5maWZvKTsKIAkJZ290byBlcnJfc3RvcDsKIAl9CiAKQEAgLTkzNCw3ICs5MzIsNyBAQAogZXJyX2ZyZWVfaW5wdXRfZGV2OgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIGVycl9mcmVlX2ZpZm86Ci0Ja2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CisJa2ZpZm9fZnJlZSgmZnVqaXRzdV9ob3RrZXktPmZpZm8pOwogZXJyX3N0b3A6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTk1Niw3ICs5NTQsNyBAQAogCiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwogCi0Ja2ZpZm9fZnJlZShmdWppdHN1X2hvdGtleS0+Zmlmbyk7CisJa2ZpZm9fZnJlZSgmZnVqaXRzdV9ob3RrZXktPmZpZm8pOwogCiAJZnVqaXRzdV9ob3RrZXktPmFjcGlfaGFuZGxlID0gTlVMTDsKIApAQCAtMTAwOCw5ICsxMDA2LDEwIEBACiAJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19UUkFDRSwKIAkJCQkJIlB1c2gga2V5Y29kZSBpbnRvIHJpbmdidWZmZXIgWyVkXVxuIiwKIAkJCQkJa2V5Y29kZSk7Ci0JCQkJc3RhdHVzID0ga2ZpZm9fcHV0KGZ1aml0c3VfaG90a2V5LT5maWZvLAorCQkJCXN0YXR1cyA9IGtmaWZvX2luX2xvY2tlZCgmZnVqaXRzdV9ob3RrZXktPmZpZm8sCiAJCQkJCQkgICAodW5zaWduZWQgY2hhciAqKSZrZXljb2RlLAotCQkJCQkJICAgc2l6ZW9mKGtleWNvZGUpKTsKKwkJCQkJCSAgIHNpemVvZihrZXljb2RlKSwKKwkJCQkJCSAgICZmdWppdHN1X2hvdGtleS0+Zmlmb19sb2NrKTsKIAkJCQlpZiAoc3RhdHVzICE9IHNpemVvZihrZXljb2RlKSkgewogCQkJCQl2ZGJnX3ByaW50ayhGVUpMQVBUT1BfREJHX1dBUk4sCiAJCQkJCSAgICAiQ291bGQgbm90IHB1c2gga2V5Y29kZSBbMHgleF1cbiIsCkBAIC0xMDIxLDExICsxMDIwLDEyIEBACiAJCQkJfQogCQkJfSBlbHNlIGlmIChrZXljb2RlID09IDApIHsKIAkJCQl3aGlsZSAoKHN0YXR1cyA9Ci0JCQkJCWtmaWZvX2dldAotCQkJCQkoZnVqaXRzdV9ob3RrZXktPmZpZm8sICh1bnNpZ25lZCBjaGFyICopCi0JCQkJCSAma2V5Y29kZV9yLAotCQkJCQkgc2l6ZW9mCi0JCQkJCSAoa2V5Y29kZV9yKSkpID09IHNpemVvZihrZXljb2RlX3IpKSB7CisJCQkJCWtmaWZvX291dF9sb2NrZWQoCisJCQkJCSAmZnVqaXRzdV9ob3RrZXktPmZpZm8sCisJCQkJCSAodW5zaWduZWQgY2hhciAqKSAma2V5Y29kZV9yLAorCQkJCQkgc2l6ZW9mKGtleWNvZGVfciksCisJCQkJCSAmZnVqaXRzdV9ob3RrZXktPmZpZm9fbG9jaykpCisJCQkJCSA9PSBzaXplb2Yoa2V5Y29kZV9yKSkgewogCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2RlX3IsIDApOwogCQkJCQlpbnB1dF9zeW5jKGlucHV0KTsKIAkJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19UUkFDRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggYzI4NDIxNy4uNjNjM2U2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKQEAgLTUxLDYgKzUxLDEyIEBACiAjZGVmaW5lIEhQV01JX1dJUkVMRVNTX1FVRVJZIDB4NQogI2RlZmluZSBIUFdNSV9IT1RLRVlfUVVFUlkgMHhjCiAKK2VudW0gaHBfd21pX3JhZGlvIHsKKwlIUFdNSV9XSUZJID0gMCwKKwlIUFdNSV9CTFVFVE9PVEggPSAxLAorCUhQV01JX1dXQU4gPSAyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaHBfd21pX2Jpb3Nfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgX19leGl0IGhwX3dtaV9iaW9zX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBocF93bWlfcmVzdW1lX2hhbmRsZXIoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKQEAgLTk0LDcgKzEwMCw3IEBACiBzdGF0aWMgc3RydWN0IHJma2lsbCAqYmx1ZXRvb3RoX3Jma2lsbDsKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICp3d2FuX3Jma2lsbDsKIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGhwX3dtaV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaHBfd21pX3BtX29wcyA9IHsKIAkucmVzdW1lICA9IGhwX3dtaV9yZXN1bWVfaGFuZGxlciwKIAkucmVzdG9yZSAgPSBocF93bWlfcmVzdW1lX2hhbmRsZXIsCiB9OwpAQCAtMTc1LDggKzE4MSw4IEBACiAKIHN0YXRpYyBpbnQgaHBfd21pX3NldF9ibG9jayh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBiID0gKHVuc2lnbmVkIGxvbmcpIGRhdGE7Ci0JaW50IHF1ZXJ5ID0gQklUKGIgKyA4KSB8ICgoIWJsb2NrZWQpIDw8IGIpOworCWVudW0gaHBfd21pX3JhZGlvIHIgPSAoZW51bSBocF93bWlfcmFkaW8pIGRhdGE7CisJaW50IHF1ZXJ5ID0gQklUKHIgKyA4KSB8ICgoIWJsb2NrZWQpIDw8IHIpOwogCiAJcmV0dXJuIGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KEhQV01JX1dJUkVMRVNTX1FVRVJZLCAxLCBxdWVyeSk7CiB9CkBAIC0xODUsMzEgKzE5MSwyMyBAQAogCS5zZXRfYmxvY2sgPSBocF93bWlfc2V0X2Jsb2NrLAogfTsKIAotc3RhdGljIGJvb2wgaHBfd21pX3dpZmlfc3RhdGUodm9pZCkKK3N0YXRpYyBib29sIGhwX3dtaV9nZXRfc3dfc3RhdGUoZW51bSBocF93bWlfcmFkaW8gcikKIHsKIAlpbnQgd2lyZWxlc3MgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9XSVJFTEVTU19RVUVSWSwgMCwgMCk7CisJaW50IG1hc2sgPSAweDIwMCA8PCAociAqIDgpOwogCi0JaWYgKHdpcmVsZXNzICYgMHgxMDApCisJaWYgKHdpcmVsZXNzICYgbWFzaykKIAkJcmV0dXJuIGZhbHNlOwogCWVsc2UKIAkJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGhwX3dtaV9ibHVldG9vdGhfc3RhdGUodm9pZCkKK3N0YXRpYyBib29sIGhwX3dtaV9nZXRfaHdfc3RhdGUoZW51bSBocF93bWlfcmFkaW8gcikKIHsKIAlpbnQgd2lyZWxlc3MgPSBocF93bWlfcGVyZm9ybV9xdWVyeShIUFdNSV9XSVJFTEVTU19RVUVSWSwgMCwgMCk7CisJaW50IG1hc2sgPSAweDgwMCA8PCAociAqIDgpOwogCi0JaWYgKHdpcmVsZXNzICYgMHgxMDAwMCkKLQkJcmV0dXJuIGZhbHNlOwotCWVsc2UKLQkJcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGhwX3dtaV93d2FuX3N0YXRlKHZvaWQpCi17Ci0JaW50IHdpcmVsZXNzID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfV0lSRUxFU1NfUVVFUlksIDAsIDApOwotCi0JaWYgKHdpcmVsZXNzICYgMHgxMDAwMDAwKQorCWlmICh3aXJlbGVzcyAmIG1hc2spCiAJCXJldHVybiBmYWxzZTsKIAllbHNlCiAJCXJldHVybiB0cnVlOwpAQCAtMzM0LDQ5ICszMzIsNTUgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgcmVzcG9uc2UgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCWludCBldmVudGNvZGU7CiAKIAl3bWlfZ2V0X2V2ZW50X2RhdGEodmFsdWUsICZyZXNwb25zZSk7CiAKIAlvYmogPSAodW5pb24gYWNwaV9vYmplY3QgKilyZXNwb25zZS5wb2ludGVyOwogCi0JaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUiAmJiBvYmotPmJ1ZmZlci5sZW5ndGggPT0gOCkgewotCQlpbnQgZXZlbnRjb2RlID0gKigodTggKikgb2JqLT5idWZmZXIucG9pbnRlcik7Ci0JCWlmIChldmVudGNvZGUgPT0gMHg0KQotCQkJZXZlbnRjb2RlID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSE9US0VZX1FVRVJZLCAwLAotCQkJCQkJCSAwKTsKLQkJa2V5ID0gaHBfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShldmVudGNvZGUpOwotCQlpZiAoa2V5KSB7Ci0JCQlzd2l0Y2ggKGtleS0+dHlwZSkgewotCQkJY2FzZSBLRV9LRVk6Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShocF93bWlfaW5wdXRfZGV2LAotCQkJCQkJIGtleS0+a2V5Y29kZSwgMSk7Ci0JCQkJaW5wdXRfc3luYyhocF93bWlfaW5wdXRfZGV2KTsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGhwX3dtaV9pbnB1dF9kZXYsCi0JCQkJCQkga2V5LT5rZXljb2RlLCAwKTsKLQkJCQlpbnB1dF9zeW5jKGhwX3dtaV9pbnB1dF9kZXYpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgaWYgKGV2ZW50Y29kZSA9PSAweDEpIHsKLQkJCWlucHV0X3JlcG9ydF9zd2l0Y2goaHBfd21pX2lucHV0X2RldiwgU1dfRE9DSywKLQkJCQkJICAgIGhwX3dtaV9kb2NrX3N0YXRlKCkpOwotCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChocF93bWlfaW5wdXRfZGV2LCBTV19UQUJMRVRfTU9ERSwKLQkJCQkJICAgIGhwX3dtaV90YWJsZXRfc3RhdGUoKSk7Ci0JCQlpbnB1dF9zeW5jKGhwX3dtaV9pbnB1dF9kZXYpOwotCQl9IGVsc2UgaWYgKGV2ZW50Y29kZSA9PSAweDUpIHsKLQkJCWlmICh3aWZpX3Jma2lsbCkKLQkJCQlyZmtpbGxfc2V0X3N3X3N0YXRlKHdpZmlfcmZraWxsLAotCQkJCQkJICAgIGhwX3dtaV93aWZpX3N0YXRlKCkpOwotCQkJaWYgKGJsdWV0b290aF9yZmtpbGwpCi0JCQkJcmZraWxsX3NldF9zd19zdGF0ZShibHVldG9vdGhfcmZraWxsLAotCQkJCQkJICAgIGhwX3dtaV9ibHVldG9vdGhfc3RhdGUoKSk7Ci0JCQlpZiAod3dhbl9yZmtpbGwpCi0JCQkJcmZraWxsX3NldF9zd19zdGF0ZSh3d2FuX3Jma2lsbCwKLQkJCQkJCSAgICBocF93bWlfd3dhbl9zdGF0ZSgpKTsKLQkJfSBlbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPICJIUCBXTUk6IFVua25vd24ga2V5IHByZXNzZWQgLSAleFxuIiwKLQkJCSAgICAgICBldmVudGNvZGUpOwotCX0gZWxzZQorCWlmICghb2JqIHx8IG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSIHx8IG9iai0+YnVmZmVyLmxlbmd0aCAhPSA4KSB7CiAJCXByaW50ayhLRVJOX0lORk8gIkhQIFdNSTogVW5rbm93biByZXNwb25zZSByZWNlaXZlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlldmVudGNvZGUgPSAqKCh1OCAqKSBvYmotPmJ1ZmZlci5wb2ludGVyKTsKKwlpZiAoZXZlbnRjb2RlID09IDB4NCkKKwkJZXZlbnRjb2RlID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSE9US0VZX1FVRVJZLCAwLAorCQkJCQkJMCk7CisJa2V5ID0gaHBfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShldmVudGNvZGUpOworCWlmIChrZXkpIHsKKwkJc3dpdGNoIChrZXktPnR5cGUpIHsKKwkJY2FzZSBLRV9LRVk6CisJCQlpbnB1dF9yZXBvcnRfa2V5KGhwX3dtaV9pbnB1dF9kZXYsCisJCQkJCSBrZXktPmtleWNvZGUsIDEpOworCQkJaW5wdXRfc3luYyhocF93bWlfaW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaHBfd21pX2lucHV0X2RldiwKKwkJCQkJIGtleS0+a2V5Y29kZSwgMCk7CisJCQlpbnB1dF9zeW5jKGhwX3dtaV9pbnB1dF9kZXYpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGV2ZW50Y29kZSA9PSAweDEpIHsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChocF93bWlfaW5wdXRfZGV2LCBTV19ET0NLLAorCQkJCSAgICBocF93bWlfZG9ja19zdGF0ZSgpKTsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChocF93bWlfaW5wdXRfZGV2LCBTV19UQUJMRVRfTU9ERSwKKwkJCQkgICAgaHBfd21pX3RhYmxldF9zdGF0ZSgpKTsKKwkJaW5wdXRfc3luYyhocF93bWlfaW5wdXRfZGV2KTsKKwl9IGVsc2UgaWYgKGV2ZW50Y29kZSA9PSAweDUpIHsKKwkJaWYgKHdpZmlfcmZraWxsKQorCQkJcmZraWxsX3NldF9zdGF0ZXMod2lmaV9yZmtpbGwsCisJCQkJCSAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9XSUZJKSwKKwkJCQkJICBocF93bWlfZ2V0X2h3X3N0YXRlKEhQV01JX1dJRkkpKTsKKwkJaWYgKGJsdWV0b290aF9yZmtpbGwpCisJCQlyZmtpbGxfc2V0X3N0YXRlcyhibHVldG9vdGhfcmZraWxsLAorCQkJCQkgIGhwX3dtaV9nZXRfc3dfc3RhdGUoSFBXTUlfQkxVRVRPT1RIKSwKKwkJCQkJICBocF93bWlfZ2V0X2h3X3N0YXRlKEhQV01JX0JMVUVUT09USCkpOworCQlpZiAod3dhbl9yZmtpbGwpCisJCQlyZmtpbGxfc2V0X3N0YXRlcyh3d2FuX3Jma2lsbCwKKwkJCQkJICBocF93bWlfZ2V0X3N3X3N0YXRlKEhQV01JX1dXQU4pLAorCQkJCQkgIGhwX3dtaV9nZXRfaHdfc3RhdGUoSFBXTUlfV1dBTikpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJIUCBXTUk6IFVua25vd24ga2V5IHByZXNzZWQgLSAleFxuIiwKKwkJCWV2ZW50Y29kZSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGhwX3dtaV9pbnB1dF9zZXR1cCh2b2lkKQpAQCAtNDU1LDcgKzQ1OSwxMSBAQAogCQl3aWZpX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiaHAtd2lmaSIsICZkZXZpY2UtPmRldiwKIAkJCQkJICAgUkZLSUxMX1RZUEVfV0xBTiwKIAkJCQkJICAgJmhwX3dtaV9yZmtpbGxfb3BzLAotCQkJCQkgICAodm9pZCAqKSAwKTsKKwkJCQkJICAgKHZvaWQgKikgSFBXTUlfV0lGSSk7CisJCXJma2lsbF9pbml0X3N3X3N0YXRlKHdpZmlfcmZraWxsLAorCQkJCSAgICAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9XSUZJKSk7CisJCXJma2lsbF9zZXRfaHdfc3RhdGUod2lmaV9yZmtpbGwsCisJCQkJICAgIGhwX3dtaV9nZXRfaHdfc3RhdGUoSFBXTUlfV0lGSSkpOwogCQllcnIgPSByZmtpbGxfcmVnaXN0ZXIod2lmaV9yZmtpbGwpOwogCQlpZiAoZXJyKQogCQkJZ290byByZWdpc3Rlcl93aWZpX2Vycm9yOwpAQCAtNDY1LDcgKzQ3MywxMSBAQAogCQlibHVldG9vdGhfcmZraWxsID0gcmZraWxsX2FsbG9jKCJocC1ibHVldG9vdGgiLCAmZGV2aWNlLT5kZXYsCiAJCQkJCQlSRktJTExfVFlQRV9CTFVFVE9PVEgsCiAJCQkJCQkmaHBfd21pX3Jma2lsbF9vcHMsCi0JCQkJCQkodm9pZCAqKSAxKTsKKwkJCQkJCSh2b2lkICopIEhQV01JX0JMVUVUT09USCk7CisJCXJma2lsbF9pbml0X3N3X3N0YXRlKGJsdWV0b290aF9yZmtpbGwsCisJCQkJICAgICBocF93bWlfZ2V0X3N3X3N0YXRlKEhQV01JX0JMVUVUT09USCkpOworCQlyZmtpbGxfc2V0X2h3X3N0YXRlKGJsdWV0b290aF9yZmtpbGwsCisJCQkJICAgIGhwX3dtaV9nZXRfaHdfc3RhdGUoSFBXTUlfQkxVRVRPT1RIKSk7CiAJCWVyciA9IHJma2lsbF9yZWdpc3RlcihibHVldG9vdGhfcmZraWxsKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gcmVnaXN0ZXJfYmx1ZXRvb3RoX2Vycm9yOwpAQCAtNDc1LDcgKzQ4NywxMSBAQAogCQl3d2FuX3Jma2lsbCA9IHJma2lsbF9hbGxvYygiaHAtd3dhbiIsICZkZXZpY2UtPmRldiwKIAkJCQkJICAgUkZLSUxMX1RZUEVfV1dBTiwKIAkJCQkJICAgJmhwX3dtaV9yZmtpbGxfb3BzLAotCQkJCQkgICAodm9pZCAqKSAyKTsKKwkJCQkJICAgKHZvaWQgKikgSFBXTUlfV1dBTik7CisJCXJma2lsbF9pbml0X3N3X3N0YXRlKHd3YW5fcmZraWxsLAorCQkJCSAgICAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9XV0FOKSk7CisJCXJma2lsbF9zZXRfaHdfc3RhdGUod3dhbl9yZmtpbGwsCisJCQkJICAgIGhwX3dtaV9nZXRfaHdfc3RhdGUoSFBXTUlfV1dBTikpOwogCQllcnIgPSByZmtpbGxfcmVnaXN0ZXIod3dhbl9yZmtpbGwpOwogCQlpZiAoZXJyKQogCQkJZ290byByZWdpc3Rlcl93d2FuX2VycjsKQEAgLTUzMyw2ICs1NDksMTkgQEAKIAkJaW5wdXRfc3luYyhocF93bWlfaW5wdXRfZGV2KTsKIAl9CiAKKwlpZiAod2lmaV9yZmtpbGwpCisJCXJma2lsbF9zZXRfc3RhdGVzKHdpZmlfcmZraWxsLAorCQkJCSAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9XSUZJKSwKKwkJCQkgIGhwX3dtaV9nZXRfaHdfc3RhdGUoSFBXTUlfV0lGSSkpOworCWlmIChibHVldG9vdGhfcmZraWxsKQorCQlyZmtpbGxfc2V0X3N0YXRlcyhibHVldG9vdGhfcmZraWxsLAorCQkJCSAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9CTFVFVE9PVEgpLAorCQkJCSAgaHBfd21pX2dldF9od19zdGF0ZShIUFdNSV9CTFVFVE9PVEgpKTsKKwlpZiAod3dhbl9yZmtpbGwpCisJCXJma2lsbF9zZXRfc3RhdGVzKHd3YW5fcmZraWxsLAorCQkJCSAgaHBfd21pX2dldF9zd19zdGF0ZShIUFdNSV9XV0FOKSwKKwkJCQkgIGhwX3dtaV9nZXRfaHdfc3RhdGUoSFBXTUlfV1dBTikpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzhmZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogTVNJIFdNSSBob3RrZXlzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5vdmVsbCA8dHJlbm5Ac3VzZS5kZT4KKyAqCisgKiBNb3N0IHN0dWZmIHRha2VuIG92ZXIgZnJvbSBocC13bWkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L3NwYXJzZS1rZXltYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1TSSBsYXB0b3AgV01JIGhvdGtleXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9BTElBUygid21pOjU1MUExRjg0LUZCREQtNDEyNS05MURCLTNFQThGNDRGMUQ0NSIpOworTU9EVUxFX0FMSUFTKCJ3bWk6QjZGM0VFRjItM0QyRi00OURDLTlERTMtODVCQ0UxOEM2MkYyIik7CisKKy8qIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHVudGlsIHRoZSBXTUkgc3lzZnMgaW50ZXJmYWNlIGdvZXMgaW4KKwkJeyAic3ZuIiwgRE1JX1NZU19WRU5ET1IgfSwKKwkJeyAicG4iLCAgRE1JX1BST0RVQ1RfTkFNRSB9LAorCQl7ICJwdnIiLCBETUlfUFJPRFVDVF9WRVJTSU9OIH0sCisJCXsgInJ2biIsIERNSV9CT0FSRF9WRU5ET1IgfSwKKwkJeyAicm4iLCAgRE1JX0JPQVJEX05BTUUgfSwKKyovCisKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuTUlDUk8tU1RBUklOVEVSTkFUSU9OQUwqOnBuTVMtNjYzODoqIik7CisKKyNkZWZpbmUgRFJWX05BTUUgIm1zaS13bWkiCisjZGVmaW5lIERSVl9QRlggRFJWX05BTUUgIjogIgorCisjZGVmaW5lIE1TSVdNSV9CSU9TX0dVSUQgIjU1MUExRjg0LUZCREQtNDEyNS05MURCLTNFQThGNDRGMUQ0NSIKKyNkZWZpbmUgTVNJV01JX0VWRU5UX0dVSUQgIkI2RjNFRUYyLTNEMkYtNDlEQy05REUzLTg1QkNFMThDNjJGMiIKKworI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgcHJfZGVidWcoRFJWX1BGWCBtc2cpCisKKyNkZWZpbmUgS0VZQ09ERV9CQVNFIDB4RDAKKyNkZWZpbmUgTVNJX1dNSV9CUklHSFRORVNTVVAgICBLRVlDT0RFX0JBU0UKKyNkZWZpbmUgTVNJX1dNSV9CUklHSFRORVNTRE9XTiAoS0VZQ09ERV9CQVNFICsgMSkKKyNkZWZpbmUgTVNJX1dNSV9WT0xVTUVVUCAgICAgICAoS0VZQ09ERV9CQVNFICsgMikKKyNkZWZpbmUgTVNJX1dNSV9WT0xVTUVET1dOICAgICAoS0VZQ09ERV9CQVNFICsgMykKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IG1zaV93bWlfa2V5bWFwW10gPSB7CisJeyBLRV9LRVksIE1TSV9XTUlfQlJJR0hUTkVTU1VQLCAgIHtLRVlfQlJJR0hUTkVTU1VQfSB9LAorCXsgS0VfS0VZLCBNU0lfV01JX0JSSUdIVE5FU1NET1dOLCB7S0VZX0JSSUdIVE5FU1NET1dOfSB9LAorCXsgS0VfS0VZLCBNU0lfV01JX1ZPTFVNRVVQLCAgICAgICB7S0VZX1ZPTFVNRVVQfSB9LAorCXsgS0VfS0VZLCBNU0lfV01JX1ZPTFVNRURPV04sICAgICB7S0VZX1ZPTFVNRURPV059IH0sCisJeyBLRV9FTkQsIDB9Cit9Oworc3RhdGljIGt0aW1lX3QgbGFzdF9wcmVzc2VkW0FSUkFZX1NJWkUobXNpX3dtaV9rZXltYXApIC0gMV07CisKK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisKK3N0YXRpYyBpbnQgYmFja2xpZ2h0X21hcFtdID0geyAweDAwLCAweDMzLCAweDY2LCAweDk5LCAweENDLCAweEZGIH07CisKK3N0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICptc2lfd21pX2lucHV0X2RldjsKKworc3RhdGljIGludCBtc2lfd21pX3F1ZXJ5X2Jsb2NrKGludCBpbnN0YW5jZSwgaW50ICpyZXQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCisJc3RhdHVzID0gd21pX3F1ZXJ5X2Jsb2NrKE1TSVdNSV9CSU9TX0dVSUQsIGluc3RhbmNlLCAmb3V0cHV0KTsKKworCW9iaiA9IG91dHB1dC5wb2ludGVyOworCisJaWYgKCFvYmogfHwgb2JqLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCWlmIChvYmopIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfUEZYICJxdWVyeSBibG9jayByZXR1cm5lZCBvYmplY3QgIgorCQkJICAgICAgICJ0eXBlOiAlZCAtIGJ1ZmZlciBsZW5ndGg6JWRcbiIsIG9iai0+dHlwZSwKKwkJCSAgICAgICBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUiA/CisJCQkgICAgICAgb2JqLT5idWZmZXIubGVuZ3RoIDogMCk7CisJCX0KKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSpyZXQgPSBvYmotPmludGVnZXIudmFsdWU7CisJa2ZyZWUob2JqKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc2lfd21pX3NldF9ibG9jayhpbnQgaW5zdGFuY2UsIGludCB2YWx1ZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgaW5wdXQgPSB7IHNpemVvZihpbnQpLCAmdmFsdWUgfTsKKworCWRwcmludGsoIkdvaW5nIHRvIHNldCBibG9jayBvZiBpbnN0YW5jZTogJWQgLSB2YWx1ZTogJWRcbiIsCisJCWluc3RhbmNlLCB2YWx1ZSk7CisKKwlzdGF0dXMgPSB3bWlfc2V0X2Jsb2NrKE1TSVdNSV9CSU9TX0dVSUQsIGluc3RhbmNlLCAmaW5wdXQpOworCisJcmV0dXJuIEFDUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQgYmxfZ2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlpbnQgbGV2ZWwsIGVyciwgcmV0OworCisJLyogSW5zdGFuY2UgMSBpcyAiZ2V0IGJhY2tsaWdodCIsIGNtcCB3aXRoIERTRFQgKi8KKwllcnIgPSBtc2lfd21pX3F1ZXJ5X2Jsb2NrKDEsICZyZXQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlggIkNvdWxkIG5vdCBxdWVyeSBiYWNrbGlnaHQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHByaW50aygiR2V0OiBRdWVyeSBibG9jayByZXR1cm5lZDogJWRcbiIsIHJldCk7CisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgQVJSQVlfU0laRShiYWNrbGlnaHRfbWFwKTsgbGV2ZWwrKykgeworCQlpZiAoYmFja2xpZ2h0X21hcFtsZXZlbF0gPT0gcmV0KSB7CisJCQlkcHJpbnRrKCJDdXJyZW50IGJhY2tsaWdodCBsZXZlbDogMHglWCAtIGluZGV4OiAlZFxuIiwKKwkJCQliYWNrbGlnaHRfbWFwW2xldmVsXSwgbGV2ZWwpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGxldmVsID09IEFSUkFZX1NJWkUoYmFja2xpZ2h0X21hcCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlggImdldDogSW52YWxpZCBicmlnaHRuZXNzIHZhbHVlOiAweCVYXG4iLAorCQkgICAgICAgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBsZXZlbDsKK30KKworc3RhdGljIGludCBibF9zZXRfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlpbnQgYnJpZ2h0ID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisJaWYgKGJyaWdodCA+PSBBUlJBWV9TSVpFKGJhY2tsaWdodF9tYXApIHx8IGJyaWdodCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSW5zdGFuY2UgMCBpcyAic2V0IGJhY2tsaWdodCIgKi8KKwlyZXR1cm4gbXNpX3dtaV9zZXRfYmxvY2soMCwgYmFja2xpZ2h0X21hcFticmlnaHRdKTsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIG1zaV9iYWNrbGlnaHRfb3BzID0geworCS5nZXRfYnJpZ2h0bmVzcwk9IGJsX2dldCwKKwkudXBkYXRlX3N0YXR1cwk9IGJsX3NldF9zdGF0dXMsCit9OworCitzdGF0aWMgdm9pZCBtc2lfd21pX25vdGlmeSh1MzIgdmFsdWUsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIHJlc3BvbnNlID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlrdGltZV90IGN1cjsKKworCXdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKworCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKXJlc3BvbnNlLnBvaW50ZXI7CisKKwlpZiAob2JqICYmIG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlpbnQgZXZlbnRjb2RlID0gb2JqLT5pbnRlZ2VyLnZhbHVlOworCQlkcHJpbnRrKCJFdmVudGNvZGU6IDB4JXhcbiIsIGV2ZW50Y29kZSk7CisJCWtleSA9IHNwYXJzZV9rZXltYXBfZW50cnlfZnJvbV9zY2FuY29kZShtc2lfd21pX2lucHV0X2RldiwKKwkJCQlldmVudGNvZGUpOworCQlpZiAoa2V5KSB7CisJCQlrdGltZV90IGRpZmY7CisJCQljdXIgPSBrdGltZV9nZXRfcmVhbCgpOworCQkJZGlmZiA9IGt0aW1lX3N1YihjdXIsIGxhc3RfcHJlc3NlZFtrZXktPmNvZGUgLQorCQkJCQlLRVlDT0RFX0JBU0VdKTsKKwkJCS8qIElnbm9yZSBldmVudCBpZiB0aGUgc2FtZSBldmVudCBoYXBwZW5lZCBpbiBhIDUwIG1zCisJCQkgICB0aW1lZnJhbWUgLT4gS2V5IHByZXNzIG1heSByZXN1bHQgaW4gMTAtMjAgR1BFcyAqLworCQkJaWYgKGt0aW1lX3RvX3VzKGRpZmYpIDwgMTAwMCAqIDUwKSB7CisJCQkJZHByaW50aygiU3VwcHJlc3NlZCBrZXkgZXZlbnQgMHglWCAtICIKKwkJCQkJIkxhc3QgcHJlc3Mgd2FzICVsbGQgdXMgYWdvXG4iLAorCQkJCQkga2V5LT5jb2RlLCBrdGltZV90b191cyhkaWZmKSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJbGFzdF9wcmVzc2VkW2tleS0+Y29kZSAtIEtFWUNPREVfQkFTRV0gPSBjdXI7CisKKwkJCWlmIChrZXktPnR5cGUgPT0gS0VfS0VZICYmCisJCQkvKiBCcmlnaHRuZXNzIGlzIHNlcnZlZCB2aWEgYWNwaSB2aWRlbyBkcml2ZXIgKi8KKwkJCSghYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpIHx8CisJCQkoa2V5LT5jb2RlICE9IE1TSV9XTUlfQlJJR0hUTkVTU1VQICYmCisJCQlrZXktPmNvZGUgIT0gTVNJX1dNSV9CUklHSFRORVNTRE9XTikpKSB7CisJCQkJZHByaW50aygiU2VuZCBrZXk6IDB4JVggLSAiCisJCQkJCSJJbnB1dCBsYXllciBrZXljb2RlOiAlZFxuIiwga2V5LT5jb2RlLAorCQkJCQkga2V5LT5rZXljb2RlKTsKKwkJCQlzcGFyc2Vfa2V5bWFwX3JlcG9ydF9lbnRyeShtc2lfd21pX2lucHV0X2RldiwKKwkJCQkJCWtleSwgMSwgdHJ1ZSk7CisJCQl9CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBrZXkgcHJlc3NlZCAtICV4XG4iLAorCQkJICAgICAgIGV2ZW50Y29kZSk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8gRFJWX1BGWCAiVW5rbm93biBldmVudCByZWNlaXZlZFxuIik7CisJa2ZyZWUocmVzcG9uc2UucG9pbnRlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1zaV93bWlfaW5wdXRfc2V0dXAodm9pZCkKK3sKKwlpbnQgZXJyOworCisJbXNpX3dtaV9pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIW1zaV93bWlfaW5wdXRfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1zaV93bWlfaW5wdXRfZGV2LT5uYW1lID0gIk1TSSBXTUkgaG90a2V5cyI7CisJbXNpX3dtaV9pbnB1dF9kZXYtPnBoeXMgPSAid21pL2lucHV0MCI7CisJbXNpX3dtaV9pbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKworCWVyciA9IHNwYXJzZV9rZXltYXBfc2V0dXAobXNpX3dtaV9pbnB1dF9kZXYsIG1zaV93bWlfa2V5bWFwLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2RldjsKKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShtc2lfd21pX2lucHV0X2Rldik7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2tleW1hcDsKKworCW1lbXNldChsYXN0X3ByZXNzZWQsIDAsIHNpemVvZihsYXN0X3ByZXNzZWQpKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9rZXltYXA6CisJc3BhcnNlX2tleW1hcF9mcmVlKG1zaV93bWlfaW5wdXRfZGV2KTsKK2Vycl9mcmVlX2RldjoKKwlpbnB1dF9mcmVlX2RldmljZShtc2lfd21pX2lucHV0X2Rldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgbXNpX3dtaV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWlmICghd21pX2hhc19ndWlkKE1TSVdNSV9FVkVOVF9HVUlEKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJUaGlzIG1hY2hpbmUgZG9lc24ndCBoYXZlIE1TSS1ob3RrZXlzIHRocm91Z2ggV01JXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWVyciA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKE1TSVdNSV9FVkVOVF9HVUlELAorCQkJbXNpX3dtaV9ub3RpZnksIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gbXNpX3dtaV9pbnB1dF9zZXR1cCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VuaW5zdGFsbF9ub3RpZmllcjsKKworCWlmICghYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKSB7CisJCWJhY2tsaWdodCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoRFJWX05BTUUsCisJCQkJTlVMTCwgTlVMTCwgJm1zaV9iYWNrbGlnaHRfb3BzKTsKKwkJaWYgKElTX0VSUihiYWNrbGlnaHQpKQorCQkJZ290byBlcnJfZnJlZV9pbnB1dDsKKworCQliYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gQVJSQVlfU0laRShiYWNrbGlnaHRfbWFwKSAtIDE7CisJCWVyciA9IGJsX2dldChOVUxMKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9mcmVlX2JhY2tsaWdodDsKKworCQliYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPSBlcnI7CisJfQorCWRwcmludGsoIkV2ZW50IGhhbmRsZXIgaW5zdGFsbGVkXG4iKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9iYWNrbGlnaHQ6CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJhY2tsaWdodCk7CitlcnJfZnJlZV9pbnB1dDoKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShtc2lfd21pX2lucHV0X2Rldik7CitlcnJfdW5pbnN0YWxsX25vdGlmaWVyOgorCXdtaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoTVNJV01JX0VWRU5UX0dVSUQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtc2lfd21pX2V4aXQodm9pZCkKK3sKKwlpZiAod21pX2hhc19ndWlkKE1TSVdNSV9FVkVOVF9HVUlEKSkgeworCQl3bWlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKE1TSVdNSV9FVkVOVF9HVUlEKTsKKwkJc3BhcnNlX2tleW1hcF9mcmVlKG1zaV93bWlfaW5wdXRfZGV2KTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UobXNpX3dtaV9pbnB1dF9kZXYpOworCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmFja2xpZ2h0KTsKKwl9Cit9CisKK21vZHVsZV9pbml0KG1zaV93bWlfaW5pdCk7Cittb2R1bGVfZXhpdChtc2lfd21pX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggN2EyY2M4YS4uMjg5NmNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlhdG9taWNfdAkJdXNlcnM7CiAJc3RydWN0IGlucHV0X2Rldgkqam9nX2RldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSprZXlfZGV2OwotCXN0cnVjdCBrZmlmbwkJKmZpZm87CisJc3RydWN0IGtmaWZvCQlmaWZvOwogCXNwaW5sb2NrX3QJCWZpZm9fbG9jazsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd3E7CiB9OwpAQCAtMzAwLDggKzMwMCw5IEBACiB7CiAJc3RydWN0IHNvbnlfbGFwdG9wX2tleXByZXNzIGtwOwogCi0Jd2hpbGUgKGtmaWZvX2dldChzb255X2xhcHRvcF9pbnB1dC5maWZvLCAodW5zaWduZWQgY2hhciAqKSZrcCwKLQkJCSBzaXplb2Yoa3ApKSA9PSBzaXplb2Yoa3ApKSB7CisJd2hpbGUgKGtmaWZvX291dF9sb2NrZWQoJnNvbnlfbGFwdG9wX2lucHV0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmtwLAorCQkJc2l6ZW9mKGtwKSwgJnNvbnlfbGFwdG9wX2lucHV0LmZpZm9fbG9jaykKKwkJCT09IHNpemVvZihrcCkpIHsKIAkJbXNsZWVwKDEwKTsKIAkJaW5wdXRfcmVwb3J0X2tleShrcC5kZXYsIGtwLmtleSwgMCk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKQEAgLTM2Miw4ICszNjMsOSBAQAogCQkvKiB3ZSBlbWl0IHRoZSBzY2FuY29kZSBzbyB3ZSBjYW4gYWx3YXlzIHJlbWFwIHRoZSBrZXkgKi8KIAkJaW5wdXRfZXZlbnQoa3AuZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBldmVudCk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKLQkJa2ZpZm9fcHV0KHNvbnlfbGFwdG9wX2lucHV0LmZpZm8sCi0JCQkgICh1bnNpZ25lZCBjaGFyICopJmtwLCBzaXplb2Yoa3ApKTsKKwkJa2ZpZm9faW5fbG9ja2VkKCZzb255X2xhcHRvcF9pbnB1dC5maWZvLAorCQkJICAodW5zaWduZWQgY2hhciAqKSZrcCwgc2l6ZW9mKGtwKSwKKwkJCSAgJnNvbnlfbGFwdG9wX2lucHV0LmZpZm9fbG9jayk7CiAKIAkJaWYgKCF3b3JrX3BlbmRpbmcoJnNvbnlfbGFwdG9wX3JlbGVhc2Vfa2V5X3dvcmspKQogCQkJcXVldWVfd29yayhzb255X2xhcHRvcF9pbnB1dC53cSwKQEAgLTM4NSwxMiArMzg3LDEwIEBACiAKIAkvKiBrZmlmbyAqLwogCXNwaW5fbG9ja19pbml0KCZzb255X2xhcHRvcF9pbnB1dC5maWZvX2xvY2spOwotCXNvbnlfbGFwdG9wX2lucHV0LmZpZm8gPQotCQlrZmlmb19hbGxvYyhTT05ZX0xBUFRPUF9CVUZfU0laRSwgR0ZQX0tFUk5FTCwKLQkJCSAgICAmc29ueV9sYXB0b3BfaW5wdXQuZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHNvbnlfbGFwdG9wX2lucHV0LmZpZm8pKSB7CisJZXJyb3IgPQorCSBrZmlmb19hbGxvYygmc29ueV9sYXB0b3BfaW5wdXQuZmlmbywgU09OWV9MQVBUT1BfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWCAia2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJZXJyb3IgPSBQVFJfRVJSKHNvbnlfbGFwdG9wX2lucHV0LmZpZm8pOwogCQlnb3RvIGVycl9kZWNfdXNlcnM7CiAJfQogCkBAIC00NzQsNyArNDc0LDcgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShzb255X2xhcHRvcF9pbnB1dC53cSk7CiAKIGVycl9mcmVlX2tmaWZvOgotCWtmaWZvX2ZyZWUoc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CiAKIGVycl9kZWNfdXNlcnM6CiAJYXRvbWljX2RlYygmc29ueV9sYXB0b3BfaW5wdXQudXNlcnMpOwpAQCAtNTAwLDcgKzUwMCw3IEBACiAJfQogCiAJZGVzdHJveV93b3JrcXVldWUoc29ueV9sYXB0b3BfaW5wdXQud3EpOwotCWtmaWZvX2ZyZWUoc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CiB9CiAKIC8qKioqKioqKioqKiBQbGF0Zm9ybSBEZXZpY2UgKioqKioqKioqKiovCkBAIC0yMDc5LDcgKzIwNzksNyBAQAogCiBzdHJ1Y3Qgc29ueXBpX2NvbXBhdF9zIHsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmlmb19hc3luYzsKLQlzdHJ1Y3Qga2ZpZm8JCSpmaWZvOworCXN0cnVjdCBrZmlmbwkJZmlmbzsKIAlzcGlubG9ja190CQlmaWZvX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJZmlmb19wcm9jX2xpc3Q7CiAJYXRvbWljX3QJCW9wZW5fY291bnQ7CkBAIC0yMTA0LDEyICsyMTA0LDEyIEBACiAJLyogRmx1c2ggaW5wdXQgcXVldWUgb24gZmlyc3Qgb3BlbiAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShzb255cGlfY29tcGF0LmZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29ueXBpX2NvbXBhdC5maWZvX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmc29ueXBpX2NvbXBhdC5vcGVuX2NvdW50KSA9PSAxKQotCQlfX2tmaWZvX3Jlc2V0KHNvbnlwaV9jb21wYXQuZmlmbyk7CisJCWtmaWZvX3Jlc2V0KCZzb255cGlfY29tcGF0LmZpZm8pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzb255cGlfY29tcGF0LmZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb255cGlfY29tcGF0LmZpZm9fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTIwLDE3ICsyMTIwLDE4IEBACiAJc3NpemVfdCByZXQ7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JaWYgKChrZmlmb19sZW4oc29ueXBpX2NvbXBhdC5maWZvKSA9PSAwKSAmJgorCWlmICgoa2ZpZm9fbGVuKCZzb255cGlfY29tcGF0LmZpZm8pID09IDApICYmCiAJICAgIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QsCi0JCQkJICAgICAgIGtmaWZvX2xlbihzb255cGlfY29tcGF0LmZpZm8pICE9IDApOworCQkJCSAgICAgICBrZmlmb19sZW4oJnNvbnlwaV9jb21wYXQuZmlmbykgIT0gMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXdoaWxlIChyZXQgPCBjb3VudCAmJgotCSAgICAgICAoa2ZpZm9fZ2V0KHNvbnlwaV9jb21wYXQuZmlmbywgJmMsIHNpemVvZihjKSkgPT0gc2l6ZW9mKGMpKSkgeworCSAgICAgICAoa2ZpZm9fb3V0X2xvY2tlZCgmc29ueXBpX2NvbXBhdC5maWZvLCAmYywgc2l6ZW9mKGMpLAorCQkJICAmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spID09IHNpemVvZihjKSkpIHsKIAkJaWYgKHB1dF91c2VyKGMsIGJ1ZisrKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXQrKzsKQEAgLTIxNDcsNyArMjE0OCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNvbnlwaV9taXNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJcG9sbF93YWl0KGZpbGUsICZzb255cGlfY29tcGF0LmZpZm9fcHJvY19saXN0LCB3YWl0KTsKLQlpZiAoa2ZpZm9fbGVuKHNvbnlwaV9jb21wYXQuZmlmbykpCisJaWYgKGtmaWZvX2xlbigmc29ueXBpX2NvbXBhdC5maWZvKSkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzA5LDcgKzIzMTAsOCBAQAogCiBzdGF0aWMgdm9pZCBzb255cGlfY29tcGF0X3JlcG9ydF9ldmVudCh1OCBldmVudCkKIHsKLQlrZmlmb19wdXQoc29ueXBpX2NvbXBhdC5maWZvLCAodW5zaWduZWQgY2hhciAqKSZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJa2ZpZm9faW5fbG9ja2VkKCZzb255cGlfY29tcGF0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmV2ZW50LAorCQkJc2l6ZW9mKGV2ZW50KSwgJnNvbnlwaV9jb21wYXQuZmlmb19sb2NrKTsKIAlraWxsX2Zhc3luYygmc29ueXBpX2NvbXBhdC5maWZvX2FzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzb255cGlfY29tcGF0LmZpZm9fcHJvY19saXN0KTsKIH0KQEAgLTIzMTksMTEgKzIzMjEsMTEgQEAKIAlpbnQgZXJyb3I7CiAKIAlzcGluX2xvY2tfaW5pdCgmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spOwotCXNvbnlwaV9jb21wYXQuZmlmbyA9IGtmaWZvX2FsbG9jKFNPTllfTEFQVE9QX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJCQkgJnNvbnlwaV9jb21wYXQuZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHNvbnlwaV9jb21wYXQuZmlmbykpIHsKKwllcnJvciA9CisJIGtmaWZvX2FsbG9jKCZzb255cGlfY29tcGF0LmZpZm8sIFNPTllfTEFQVE9QX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlggImtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNvbnlwaV9jb21wYXQuZmlmbyk7CisJCXJldHVybiBlcnJvcjsKIAl9CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb255cGlfY29tcGF0LmZpZm9fcHJvY19saXN0KTsKQEAgLTIzNDIsMTQgKzIzNDQsMTQgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfa2ZpZm86Ci0Ja2ZpZm9fZnJlZShzb255cGlfY29tcGF0LmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9jb21wYXQuZmlmbyk7CiAJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBzb255cGlfY29tcGF0X2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJnNvbnlwaV9taXNjX2RldmljZSk7Ci0Ja2ZpZm9fZnJlZShzb255cGlfY29tcGF0LmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9jb21wYXQuZmlmbyk7CiB9CiAjZWxzZQogc3RhdGljIGludCBzb255cGlfY29tcGF0X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IDBlZDg0ODAuLjQ0OGM4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTIxLDggKzIxLDggQEAKICAqICAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2RlZmluZSBUUEFDUElfVkVSU0lPTiAiMC4yMyIKLSNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjA1MDAKKyNkZWZpbmUgVFBBQ1BJX1ZFUlNJT04gIjAuMjQiCisjZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwNzAwCiAKIC8qCiAgKiAgQ2hhbmdlbG9nOgpAQCAtNjEsNiArNjEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbnZyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CkBAIC03Niw2ICs3NywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KQEAgLTIzMSw2ICsyMzYsNyBAQAogI2RlZmluZSBUUEFDUElfREJHX0hLRVkJCTB4MDAwOAogI2RlZmluZSBUUEFDUElfREJHX0ZBTgkJMHgwMDEwCiAjZGVmaW5lIFRQQUNQSV9EQkdfQlJHSFQJMHgwMDIwCisjZGVmaW5lIFRQQUNQSV9EQkdfTUlYRVIJMHgwMDQwCiAKICNkZWZpbmUgb25vZmYoc3RhdHVzLCBiaXQpICgoc3RhdHVzKSAmICgxIDw8IChiaXQpKSA/ICJvbiIgOiAib2ZmIikKICNkZWZpbmUgZW5hYmxlZChzdGF0dXMsIGJpdCkgKChzdGF0dXMpICYgKDEgPDwgKGJpdCkpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikKQEAgLTI1Niw3ICsyNjIsNyBAQAogc3RydWN0IGlibV9zdHJ1Y3QgewogCWNoYXIgKm5hbWU7CiAKLQlpbnQgKCpyZWFkKSAoY2hhciAqKTsKKwlpbnQgKCpyZWFkKSAoc3RydWN0IHNlcV9maWxlICopOwogCWludCAoKndyaXRlKSAoY2hhciAqKTsKIAl2b2lkICgqZXhpdCkgKHZvaWQpOwogCXZvaWQgKCpyZXN1bWUpICh2b2lkKTsKQEAgLTI5OCw2ICszMDQsNyBAQAogCXUzMiBmYW5fY3RybF9zdGF0dXNfdW5kZWY6MTsKIAl1MzIgc2Vjb25kX2ZhbjoxOwogCXUzMiBiZWVwX25lZWRzX3R3b19hcmdzOjE7CisJdTMyIG1peGVyX25vX2xldmVsX2NvbnRyb2w6MTsKIAl1MzIgaW5wdXRfZGV2aWNlX3JlZ2lzdGVyZWQ6MTsKIAl1MzIgcGxhdGZvcm1fZHJ2X3JlZ2lzdGVyZWQ6MTsKIAl1MzIgcGxhdGZvcm1fZHJ2X2F0dHJzX3JlZ2lzdGVyZWQ6MTsKQEAgLTMwOSw2ICszMTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHsKIAl1MTYgaG90a2V5X21hc2tfZmY6MTsKKwl1MTYgdm9sdW1lX2N0cmxfZm9yYmlkZGVuOjE7CiB9IHRwX3dhcm5lZDsKIAogc3RydWN0IHRoaW5rcGFkX2lkX2RhdGEgewpAQCAtNDI1LDYgKzQzMywxMiBAQAogCSAgLmVjID0gVFBBQ1BJX01BVENIX0FOWSwJCVwKIAkgIC5xdWlya3MgPSAoX19xdWlyaykgfQogCisjZGVmaW5lIFRQQUNQSV9RRUNfTE5WKF9faWQxLCBfX2lkMiwgX19xdWlyaykJXAorCXsgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfTEVOT1ZPLAlcCisJICAuYmlvcyA9IFRQQUNQSV9NQVRDSF9BTlksCQlcCisJICAuZWMgPSBUUElEKF9faWQxLCBfX2lkMiksCQlcCisJICAucXVpcmtzID0gKF9fcXVpcmspIH0KKwogc3RydWN0IHRwYWNwaV9xdWlyayB7CiAJdW5zaWduZWQgaW50IHZlbmRvcjsKIAl1MTYgYmlvczsKQEAgLTc3NiwzNiArNzkwLDI1IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgZGlzcGF0Y2hfcHJvY2ZzX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBkaXNwYXRjaF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0cnVjdCBpYm1fc3RydWN0ICppYm0gPSBkYXRhOwotCWludCBsZW47CisJc3RydWN0IGlibV9zdHJ1Y3QgKmlibSA9IG0tPnByaXZhdGU7CiAKIAlpZiAoIWlibSB8fCAhaWJtLT5yZWFkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxlbiA9IGlibS0+cmVhZChwYWdlKTsKLQlpZiAobGVuIDwgMCkKLQkJcmV0dXJuIGxlbjsKLQotCWlmIChsZW4gPD0gb2ZmICsgY291bnQpCi0JCSplb2YgPSAxOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JbGVuIC09IG9mZjsKLQlpZiAobGVuID4gY291bnQpCi0JCWxlbiA9IGNvdW50OwotCWlmIChsZW4gPCAwKQotCQlsZW4gPSAwOwotCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gaWJtLT5yZWFkKG0pOwogfQogCi1zdGF0aWMgaW50IGRpc3BhdGNoX3Byb2Nmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgZGlzcGF0Y2hfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpYm1fc3RydWN0ICppYm0gPSBkYXRhOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkaXNwYXRjaF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgc3NpemVfdCBkaXNwYXRjaF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBpYm1fc3RydWN0ICppYm0gPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJY2hhciAqa2VybmJ1ZjsKIAlpbnQgcmV0OwogCkBAIC04MzQsNiArODM3LDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlzcGF0Y2hfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkaXNwYXRjaF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZGlzcGF0Y2hfcHJvY193cml0ZSwKK307CisKIHN0YXRpYyBjaGFyICpuZXh0X2NtZChjaGFyICoqY21kcykKIHsKIAljaGFyICpzdGFydCA9ICpjbWRzOwpAQCAtMTAwNiwxMSArMTAxOCw4IEBACiB7CiAJY2hhciAqZW5kcDsKIAotCXdoaWxlICgqYnVmICYmIGlzc3BhY2UoKmJ1ZikpCi0JCWJ1ZisrOwotCSp2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwotCXdoaWxlICgqZW5kcCAmJiBpc3NwYWNlKCplbmRwKSkKLQkJZW5kcCsrOworCSp2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKHNraXBfc3BhY2VzKGJ1ZiksICZlbmRwLCAwKTsKKwllbmRwID0gc2tpcF9zcGFjZXMoZW5kcCk7CiAJaWYgKCplbmRwIHx8ICp2YWx1ZSA+IG1heCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEyNjQsNiArMTI3Myw3IEBACiAJc3RydWN0IHRwYWNwaV9yZmsgKmF0cF9yZms7CiAJaW50IHJlczsKIAlib29sIHN3X3N0YXRlID0gZmFsc2U7CisJYm9vbCBod19zdGF0ZTsKIAlpbnQgc3dfc3RhdHVzOwogCiAJQlVHX09OKGlkID49IFRQQUNQSV9SRktfU1dfTUFYIHx8IHRwYWNwaV9yZmtpbGxfc3dpdGNoZXNbaWRdKTsKQEAgLTEyOTgsNyArMTMwOCw4IEBACiAJCQlyZmtpbGxfaW5pdF9zd19zdGF0ZShhdHBfcmZrLT5yZmtpbGwsIHN3X3N0YXRlKTsKIAkJfQogCX0KLQlyZmtpbGxfc2V0X2h3X3N0YXRlKGF0cF9yZmstPnJma2lsbCwgdHBhY3BpX3Jma19jaGVja19od2Jsb2NrX3N0YXRlKCkpOworCWh3X3N0YXRlID0gdHBhY3BpX3Jma19jaGVja19od2Jsb2NrX3N0YXRlKCk7CisJcmZraWxsX3NldF9od19zdGF0ZShhdHBfcmZrLT5yZmtpbGwsIGh3X3N0YXRlKTsKIAogCXJlcyA9IHJma2lsbF9yZWdpc3RlcihhdHBfcmZrLT5yZmtpbGwpOwogCWlmIChyZXMgPCAwKSB7CkBAIC0xMzExLDYgKzEzMjIsOSBAQAogCX0KIAogCXRwYWNwaV9yZmtpbGxfc3dpdGNoZXNbaWRdID0gYXRwX3JmazsKKworCXByaW50ayhUUEFDUElfSU5GTyAicmZraWxsIHN3aXRjaCAlczogcmFkaW8gaXMgJXNibG9ja2VkXG4iLAorCQluYW1lLCAoc3dfc3RhdGUgfHwgaHdfc3RhdGUpID8gIiIgOiAidW4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4MywxMiArMTM5NywxMCBAQAogfQogCiAvKiBwcm9jZnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBpbnQgdHBhY3BpX3Jma19wcm9jZnNfcmVhZChjb25zdCBlbnVtIHRwYWNwaV9yZmtfaWQgaWQsIGNoYXIgKnApCitzdGF0aWMgaW50IHRwYWNwaV9yZmtfcHJvY2ZzX3JlYWQoY29uc3QgZW51bSB0cGFjcGlfcmZrX2lkIGlkLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JaW50IGxlbiA9IDA7Ci0KIAlpZiAoaWQgPj0gVFBBQ1BJX1JGS19TV19NQVgpCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOworCQlzZXFfcHJpbnRmKG0sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOwogCWVsc2UgewogCQlpbnQgc3RhdHVzOwogCkBAIC0xNDAyLDEzICsxNDE0LDEzIEBACiAJCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdCVzXG4iLAorCQlzZXFfcHJpbnRmKG0sICJzdGF0dXM6XHRcdCVzXG4iLAogCQkJCShzdGF0dXMgPT0gVFBBQ1BJX1JGS19SQURJT19PTikgPwogCQkJCQkiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAiY29tbWFuZHM6XHRlbmFibGUsIGRpc2FibGVcbiIpOwogCX0KIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHBhY3BpX3Jma19wcm9jZnNfd3JpdGUoY29uc3QgZW51bSB0cGFjcGlfcmZrX2lkIGlkLCBjaGFyICpidWYpCkBAIC0xNzc5LDcgKzE3OTEsNyBAQAogCiAJVFBWX1FMMSgnNycsICc5JywgICdFJywgJzMnLCAgJzUnLCAnMCcpLCAvKiBUNjAvcCAqLwogCVRQVl9RTDEoJzcnLCAnQycsICAnRCcsICcyJywgICcyJywgJzInKSwgLyogUjYwLCBSNjBpICovCi0JVFBWX1FMMCgnNycsICdFJywgICdEJywgJzAnKSwJCSAvKiBSNjBlLCBSNjBpICovCisJVFBWX1FMMSgnNycsICdFJywgICdEJywgJzAnLCAgJzEnLCAnNScpLCAvKiBSNjBlLCBSNjBpICovCiAKIAkvKiAgICAgIEJJT1MgRlcgICAgQklPUyBWRVJTICBFQyBGVyAgICAgRUMgVkVSUyAqLwogCVRQVl9RSTIoJzEnLCAnVycsICAnOScsICcwJywgICcxJywgJ1YnLCAnMicsICc4JyksIC8qIFI1MGUgKDEpICovCkBAIC0xNzk1LDggKzE4MDcsOCBAQAogCVRQVl9RSTEoJzcnLCAnNCcsICAnNicsICc0JywgICcyJywgJzcnKSwgLyogWDQxICgwKSAqLwogCVRQVl9RSTEoJzcnLCAnNScsICAnNicsICcwJywgICcyJywgJzAnKSwgLyogWDQxdCAoMCkgKi8KIAotCVRQVl9RTDAoJzcnLCAnQicsICAnRCcsICc3JyksCQkgLyogWDYwL3MgKi8KLQlUUFZfUUwwKCc3JywgJ0onLCAgJzMnLCAnMCcpLAkJIC8qIFg2MHQgKi8KKwlUUFZfUUwxKCc3JywgJ0InLCAgJ0QnLCAnNycsICAnNCcsICcwJyksIC8qIFg2MC9zICovCisJVFBWX1FMMSgnNycsICdKJywgICczJywgJzAnLCAgJzEnLCAnMycpLCAvKiBYNjB0ICovCiAKIAkvKiAoMCkgLSBvbGRlciB2ZXJzaW9ucyBsYWNrIERNSSBFQyBmdyBzdHJpbmcgYW5kIGZ1bmN0aW9uYWxpdHkgKi8KIAkvKiAoMSkgLSBvbGRlciB2ZXJzaW9ucyBrbm93biB0byBsYWNrIGZ1bmN0aW9uYWxpdHkgKi8KQEAgLTE4ODYsMTQgKzE4OTgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0aGlua3BhZF9hY3BpX2RyaXZlcl9yZWFkKGNoYXIgKnApCitzdGF0aWMgaW50IHRoaW5rcGFkX2FjcGlfZHJpdmVyX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwotCi0JbGVuICs9IHNwcmludGYocCArIGxlbiwgImRyaXZlcjpcdFx0JXNcbiIsIFRQQUNQSV9ERVNDKTsKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAidmVyc2lvbjpcdCVzXG4iLCBUUEFDUElfVkVSU0lPTik7Ci0KLQlyZXR1cm4gbGVuOworCXNlcV9wcmludGYobSwgImRyaXZlcjpcdFx0JXNcbiIsIFRQQUNQSV9ERVNDKTsKKwlzZXFfcHJpbnRmKG0sICJ2ZXJzaW9uOlx0JXNcbiIsIFRQQUNQSV9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBpYm1fc3RydWN0IHRoaW5rcGFkX2FjcGlfZHJpdmVyX2RhdGEgPSB7CkBAIC0yMTg5LDcgKzIxOTgsOCBAQAogCQkgICAgICAgZndtYXNrLCBob3RrZXlfYWNwaV9tYXNrKTsKIAl9CiAKLQlob3RrZXlfbWFza193YXJuX2luY29tcGxldGVfbWFzaygpOworCWlmICh0cGFjcGlfbGlmZWN5Y2xlICE9IFRQQUNQSV9MSUZFX0VYSVRJTkcpCisJCWhvdGtleV9tYXNrX3dhcm5faW5jb21wbGV0ZV9tYXNrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTg1LDYgKzMxOTUsOCBAQAogCWludCByZXMsIGk7CiAJaW50IHN0YXR1czsKIAlpbnQgaGtleXY7CisJYm9vbCByYWRpb3N3X3N0YXRlICA9IGZhbHNlOworCWJvb2wgdGFibGV0c3dfc3RhdGUgPSBmYWxzZTsKIAogCXVuc2lnbmVkIGxvbmcgcXVpcmtzOwogCkBAIC0zMjkwLDYgKzMzMDIsNyBAQAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0RFQlVHRkFDSUxJVElFUwogCWlmIChkYmdfd2xzd2VtdWwpIHsKIAkJdHBfZmVhdHVyZXMuaG90a2V5X3dsc3cgPSAxOworCQlyYWRpb3N3X3N0YXRlID0gISF0cGFjcGlfd2xzd19lbXVsc3RhdGU7CiAJCXByaW50ayhUUEFDUElfSU5GTwogCQkJInJhZGlvIHN3aXRjaCBlbXVsYXRpb24gZW5hYmxlZFxuIik7CiAJfSBlbHNlCkBAIC0zMjk3LDYgKzMzMTAsNyBAQAogCS8qIE5vdCBhbGwgdGhpbmtwYWRzIGhhdmUgYSBoYXJkd2FyZSByYWRpbyBzd2l0Y2ggKi8KIAlpZiAoYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJnN0YXR1cywgIldMU1ciLCAicWQiKSkgewogCQl0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyA9IDE7CisJCXJhZGlvc3dfc3RhdGUgPSAhIXN0YXR1czsKIAkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkicmFkaW8gc3dpdGNoIGZvdW5kOyByYWRpb3MgYXJlICVzXG4iLAogCQkJZW5hYmxlZChzdGF0dXMsIDApKTsKQEAgLTMzMDgsMTEgKzMzMjIsMTEgQEAKIAkvKiBGb3IgWDQxdCwgWDYwdCwgWDYxdCBUYWJsZXRzLi4uICovCiAJaWYgKCFyZXMgJiYgYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJnN0YXR1cywgIk1IS0ciLCAicWQiKSkgewogCQl0cF9mZWF0dXJlcy5ob3RrZXlfdGFibGV0ID0gMTsKKwkJdGFibGV0c3dfc3RhdGUgPSAhIShzdGF0dXMgJiBUUF9IT1RLRVlfVEFCTEVUX01BU0spOwogCQlwcmludGsoVFBBQ1BJX0lORk8KIAkJCSJwb3NzaWJsZSB0YWJsZXQgbW9kZSBzd2l0Y2ggZm91bmQ7ICIKIAkJCSJUaGlua1BhZCBpbiAlcyBtb2RlXG4iLAotCQkJKHN0YXR1cyAmIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyk/Ci0JCQkJInRhYmxldCIgOiAibGFwdG9wIik7CisJCQkodGFibGV0c3dfc3RhdGUpID8gInRhYmxldCIgOiAibGFwdG9wIik7CiAJCXJlcyA9IGFkZF90b19hdHRyX3NldChob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCiAJCQkJJmRldl9hdHRyX2hvdGtleV90YWJsZXRfbW9kZS5hdHRyKTsKIAl9CkBAIC0zMzQ3LDE2ICszMzYxLDE0IEBACiAJCQlUUEFDUElfSE9US0VZX01BUF9TSVpFKTsKIAl9CiAKLQlzZXRfYml0KEVWX0tFWSwgdHBhY3BpX2lucHV0ZGV2LT5ldmJpdCk7Ci0Jc2V0X2JpdChFVl9NU0MsIHRwYWNwaV9pbnB1dGRldi0+ZXZiaXQpOwotCXNldF9iaXQoTVNDX1NDQU4sIHRwYWNwaV9pbnB1dGRldi0+bXNjYml0KTsKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eSh0cGFjcGlfaW5wdXRkZXYsIEVWX01TQywgTVNDX1NDQU4pOwogCXRwYWNwaV9pbnB1dGRldi0+a2V5Y29kZXNpemUgPSBUUEFDUElfSE9US0VZX01BUF9UWVBFU0laRTsKIAl0cGFjcGlfaW5wdXRkZXYtPmtleWNvZGVtYXggPSBUUEFDUElfSE9US0VZX01BUF9MRU47CiAJdHBhY3BpX2lucHV0ZGV2LT5rZXljb2RlID0gaG90a2V5X2tleWNvZGVfbWFwOwogCWZvciAoaSA9IDA7IGkgPCBUUEFDUElfSE9US0VZX01BUF9MRU47IGkrKykgewogCQlpZiAoaG90a2V5X2tleWNvZGVfbWFwW2ldICE9IEtFWV9SRVNFUlZFRCkgewotCQkJc2V0X2JpdChob3RrZXlfa2V5Y29kZV9tYXBbaV0sCi0JCQkJdHBhY3BpX2lucHV0ZGV2LT5rZXliaXQpOworCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkodHBhY3BpX2lucHV0ZGV2LCBFVl9LRVksCisJCQkJCQlob3RrZXlfa2V5Y29kZV9tYXBbaV0pOwogCQl9IGVsc2UgewogCQkJaWYgKGkgPCBzaXplb2YoaG90a2V5X3Jlc2VydmVkX21hc2spKjgpCiAJCQkJaG90a2V5X3Jlc2VydmVkX21hc2sgfD0gMSA8PCBpOwpAQCAtMzM2NCwxMiArMzM3NiwxNCBAQAogCX0KIAogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdykgewotCQlzZXRfYml0KEVWX1NXLCB0cGFjcGlfaW5wdXRkZXYtPmV2Yml0KTsKLQkJc2V0X2JpdChTV19SRktJTExfQUxMLCB0cGFjcGlfaW5wdXRkZXYtPnN3Yml0KTsKKwkJaW5wdXRfc2V0X2NhcGFiaWxpdHkodHBhY3BpX2lucHV0ZGV2LCBFVl9TVywgU1dfUkZLSUxMX0FMTCk7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2godHBhY3BpX2lucHV0ZGV2LAorCQkJCSAgICBTV19SRktJTExfQUxMLCByYWRpb3N3X3N0YXRlKTsKIAl9CiAJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV90YWJsZXQpIHsKLQkJc2V0X2JpdChFVl9TVywgdHBhY3BpX2lucHV0ZGV2LT5ldmJpdCk7Ci0JCXNldF9iaXQoU1dfVEFCTEVUX01PREUsIHRwYWNwaV9pbnB1dGRldi0+c3diaXQpOworCQlpbnB1dF9zZXRfY2FwYWJpbGl0eSh0cGFjcGlfaW5wdXRkZXYsIEVWX1NXLCBTV19UQUJMRVRfTU9ERSk7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2godHBhY3BpX2lucHV0ZGV2LAorCQkJCSAgICBTV19UQUJMRVRfTU9ERSwgdGFibGV0c3dfc3RhdGUpOwogCX0KIAogCS8qIERvIG5vdCBpc3N1ZSBkdXBsaWNhdGUgYnJpZ2h0bmVzcyBjaGFuZ2UgZXZlbnRzIHRvCkBAIC0zNDM2LDggKzM0NTAsNiBAQAogCXRwYWNwaV9pbnB1dGRldi0+Y2xvc2UgPSAmaG90a2V5X2lucHV0ZGV2X2Nsb3NlOwogCiAJaG90a2V5X3BvbGxfc2V0dXBfc2FmZSh0cnVlKTsKLQl0cGFjcGlfc2VuZF9yYWRpb3N3X3VwZGF0ZSgpOwotCXRwYWNwaV9pbnB1dF9zZW5kX3RhYmxldHN3KCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMzU0NSw0OSArMzU1Nyw1NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdGhlcm1hbF9kdW1wX2FsbF9zZW5zb3JzKHZvaWQpOworCiBzdGF0aWMgYm9vbCBob3RrZXlfbm90aWZ5X3RoZXJtYWwoY29uc3QgdTMyIGhrZXksCiAJCQkJIGJvb2wgKnNlbmRfYWNwaV9ldiwKIAkJCQkgYm9vbCAqaWdub3JlX2FjcGlfZXYpCiB7CisJYm9vbCBrbm93biA9IHRydWU7CisKIAkvKiAweDYwMDAtMHg2RkZGOiB0aGVybWFsIGFsYXJtcyAqLwogCSpzZW5kX2FjcGlfZXYgPSB0cnVlOwogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSBUUF9IS0VZX0VWX0FMQVJNX0JBVF9IT1Q6Ci0JCXByaW50ayhUUEFDUElfQ1JJVAotCQkJIlRIRVJNQUwgQUxBUk06IGJhdHRlcnkgaXMgdG9vIGhvdCFcbiIpOwotCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IHdhcm4gdXNlciB0aHJvdWdoIGd1aSAqLwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIFRQX0hLRVlfRVZfQUxBUk1fQkFUX1hIT1Q6Ci0JCXByaW50ayhUUEFDUElfQUxFUlQKLQkJCSJUSEVSTUFMIEVNRVJHRU5DWTogYmF0dGVyeSBpcyBleHRyZW1lbHkgaG90IVxuIik7Ci0JCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogaW1tZWRpYXRlIHNsZWVwL2hpYmVybmF0ZSAqLwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIFRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX0hPVDoKLQkJcHJpbnRrKFRQQUNQSV9DUklUCi0JCQkiVEhFUk1BTCBBTEFSTTogIgotCQkJImEgc2Vuc29yIHJlcG9ydHMgc29tZXRoaW5nIGlzIHRvbyBob3QhXG4iKTsKLQkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiB3YXJuIHVzZXIgdGhyb3VnaCBndWksIHRoYXQgKi8KLQkJLyogc29tZSBpbnRlcm5hbCBjb21wb25lbnQgaXMgdG9vIGhvdCAqLwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIFRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX1hIT1Q6Ci0JCXByaW50ayhUUEFDUElfQUxFUlQKLQkJCSJUSEVSTUFMIEVNRVJHRU5DWTogIgotCQkJImEgc2Vuc29yIHJlcG9ydHMgc29tZXRoaW5nIGlzIGV4dHJlbWVseSBob3QhXG4iKTsKLQkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBpbW1lZGlhdGUgc2xlZXAvaGliZXJuYXRlICovCi0JCXJldHVybiB0cnVlOwogCWNhc2UgVFBfSEtFWV9FVl9USE1fVEFCTEVfQ0hBTkdFRDoKIAkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkiRUMgcmVwb3J0cyB0aGF0IFRoZXJtYWwgVGFibGUgaGFzIGNoYW5nZWRcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGRvIG5vdGhpbmcsIHdlIGRvbid0IGhhdmUKIAkJICogTGVub3ZvIEFUTSBpbmZvcm1hdGlvbiAqLwogCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fQkFUX0hPVDoKKwkJcHJpbnRrKFRQQUNQSV9DUklUCisJCQkiVEhFUk1BTCBBTEFSTTogYmF0dGVyeSBpcyB0b28gaG90IVxuIik7CisJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogd2FybiB1c2VyIHRocm91Z2ggZ3VpICovCisJCWJyZWFrOworCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9CQVRfWEhPVDoKKwkJcHJpbnRrKFRQQUNQSV9BTEVSVAorCQkJIlRIRVJNQUwgRU1FUkdFTkNZOiBiYXR0ZXJ5IGlzIGV4dHJlbWVseSBob3QhXG4iKTsKKwkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBpbW1lZGlhdGUgc2xlZXAvaGliZXJuYXRlICovCisJCWJyZWFrOworCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfSE9UOgorCQlwcmludGsoVFBBQ1BJX0NSSVQKKwkJCSJUSEVSTUFMIEFMQVJNOiAiCisJCQkiYSBzZW5zb3IgcmVwb3J0cyBzb21ldGhpbmcgaXMgdG9vIGhvdCFcbiIpOworCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IHdhcm4gdXNlciB0aHJvdWdoIGd1aSwgdGhhdCAqLworCQkvKiBzb21lIGludGVybmFsIGNvbXBvbmVudCBpcyB0b28gaG90ICovCisJCWJyZWFrOworCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfWEhPVDoKKwkJcHJpbnRrKFRQQUNQSV9BTEVSVAorCQkJIlRIRVJNQUwgRU1FUkdFTkNZOiAiCisJCQkiYSBzZW5zb3IgcmVwb3J0cyBzb21ldGhpbmcgaXMgZXh0cmVtZWx5IGhvdCFcbiIpOworCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGltbWVkaWF0ZSBzbGVlcC9oaWJlcm5hdGUgKi8KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKFRQQUNQSV9BTEVSVAogCQkJICJUSEVSTUFMIEFMRVJUOiB1bmtub3duIHRoZXJtYWwgYWxhcm0gcmVjZWl2ZWRcbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCWtub3duID0gZmFsc2U7CiAJfQorCisJdGhlcm1hbF9kdW1wX2FsbF9zZW5zb3JzKCk7CisKKwlyZXR1cm4ga25vd247CiB9CiAKIHN0YXRpYyB2b2lkIGhvdGtleV9ub3RpZnkoc3RydWN0IGlibV9zdHJ1Y3QgKmlibSwgdTMyIGV2ZW50KQpAQCAtMzczMCwxNCArMzc1MCwxMyBAQAogfQogCiAvKiBwcm9jZnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBpbnQgaG90a2V5X3JlYWQoY2hhciAqcCkKK3N0YXRpYyBpbnQgaG90a2V5X3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewogCWludCByZXMsIHN0YXR1czsKLQlpbnQgbGVuID0gMDsKIAogCWlmICghdHBfZmVhdHVyZXMuaG90a2V5KSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gbGVuOworCQlzZXFfcHJpbnRmKG0sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKQEAgLTM3NDksMTcgKzM3NjgsMTYgQEAKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCi0JbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAwKSk7CisJc2VxX3ByaW50ZihtLCAic3RhdHVzOlx0XHQlc1xuIiwgZW5hYmxlZChzdGF0dXMsIDApKTsKIAlpZiAoaG90a2V5X2FsbF9tYXNrKSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJtYXNrOlx0XHQweCUwOHhcbiIsIGhvdGtleV91c2VyX21hc2spOwotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLAotCQkJICAgICAgICJjb21tYW5kczpcdGVuYWJsZSwgZGlzYWJsZSwgcmVzZXQsIDxtYXNrPlxuIik7CisJCXNlcV9wcmludGYobSwgIm1hc2s6XHRcdDB4JTA4eFxuIiwgaG90a2V5X3VzZXJfbWFzayk7CisJCXNlcV9wcmludGYobSwgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlLCByZXNldCwgPG1hc2s+XG4iKTsKIAl9IGVsc2UgewotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibWFzazpcdFx0bm90IHN1cHBvcnRlZFxuIik7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGVuYWJsZSwgZGlzYWJsZSwgcmVzZXRcbiIpOworCQlzZXFfcHJpbnRmKG0sICJtYXNrOlx0XHRub3Qgc3VwcG9ydGVkXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAiY29tbWFuZHM6XHRlbmFibGUsIGRpc2FibGUsIHJlc2V0XG4iKTsKIAl9CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBob3RrZXlfZW5hYmxlZGlzYWJsZV93YXJuKGJvb2wgZW5hYmxlKQpAQCAtMzg2NiwxNSArMzg4NCw2IEBACiAKICNkZWZpbmUgVFBBQ1BJX1JGS19CTFVFVE9PVEhfU1dfTkFNRQkidHBhY3BpX2JsdWV0b290aF9zdyIKIAotc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQotewotCS8qIFRyeSB0byBtYWtlIHN1cmUgcmFkaW8gd2lsbCByZXN1bWUgcG93ZXJlZCBvZmYgKi8KLQlpZiAoIWFjcGlfZXZhbGYoTlVMTCwgTlVMTCwgIlxcQkxUSCIsICJ2ZCIsCi0JCSAgIFRQX0FDUElfQkxUSF9QV1JfT0ZGX09OX1JFU1VNRSkpCi0JCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAotCQkJImJsdWV0b290aCBwb3dlciBkb3duIG9uIHJlc3VtZSByZXF1ZXN0IGZhaWxlZFxuIik7Ci19Ci0KIHN0YXRpYyBpbnQgYmx1ZXRvb3RoX2dldF9zdGF0dXModm9pZCkKIHsKIAlpbnQgc3RhdHVzOwpAQCAtMzkwOCwxMCArMzkxNyw5IEBACiAjZW5kaWYKIAogCS8qIFdlIG1ha2Ugc3VyZSB0byBrZWVwIFRQX0FDUElfQkxVRVRPT1RIX1JFU1VNRUNUUkwgb2ZmICovCisJc3RhdHVzID0gVFBfQUNQSV9CTFVFVE9PVEhfUkVTVU1FQ1RSTDsKIAlpZiAoc3RhdGUgPT0gVFBBQ1BJX1JGS19SQURJT19PTikKLQkJc3RhdHVzID0gVFBfQUNQSV9CTFVFVE9PVEhfUkFESU9TU1c7Ci0JZWxzZQotCQlzdGF0dXMgPSAwOworCQlzdGF0dXMgfD0gVFBfQUNQSV9CTFVFVE9PVEhfUkFESU9TU1c7CiAKIAlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsIE5VTEwsICJTQkRDIiwgInZkIiwgc3RhdHVzKSkKIAkJcmV0dXJuIC1FSU87CkBAIC00MDM1LDkgKzQwNDMsOSBAQAogfQogCiAvKiBwcm9jZnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBpbnQgYmx1ZXRvb3RoX3JlYWQoY2hhciAqcCkKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCXJldHVybiB0cGFjcGlfcmZrX3Byb2Nmc19yZWFkKFRQQUNQSV9SRktfQkxVRVRPT1RIX1NXX0lELCBwKTsKKwlyZXR1cm4gdHBhY3BpX3Jma19wcm9jZnNfcmVhZChUUEFDUElfUkZLX0JMVUVUT09USF9TV19JRCwgbSk7CiB9CiAKIHN0YXRpYyBpbnQgYmx1ZXRvb3RoX3dyaXRlKGNoYXIgKmJ1ZikKQEAgLTQwNTAsNyArNDA1OCw2IEBACiAJLnJlYWQgPSBibHVldG9vdGhfcmVhZCwKIAkud3JpdGUgPSBibHVldG9vdGhfd3JpdGUsCiAJLmV4aXQgPSBibHVldG9vdGhfZXhpdCwKLQkuc3VzcGVuZCA9IGJsdWV0b290aF9zdXNwZW5kLAogCS5zaHV0ZG93biA9IGJsdWV0b290aF9zaHV0ZG93biwKIH07CiAKQEAgLTQwNjgsMTUgKzQwNzUsNiBAQAogCiAjZGVmaW5lIFRQQUNQSV9SRktfV1dBTl9TV19OQU1FCQkidHBhY3BpX3d3YW5fc3ciCiAKLXN0YXRpYyB2b2lkIHdhbl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQkvKiBUcnkgdG8gbWFrZSBzdXJlIHJhZGlvIHdpbGwgcmVzdW1lIHBvd2VyZWQgb2ZmICovCi0JaWYgKCFhY3BpX2V2YWxmKE5VTEwsIE5VTEwsICJcXFdHU1YiLCAicXZkIiwKLQkJICAgVFBfQUNQSV9XR1NWX1BXUl9PRkZfT05fUkVTVU1FKSkKLQkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCi0JCQkiV1dBTiBwb3dlciBkb3duIG9uIHJlc3VtZSByZXF1ZXN0IGZhaWxlZFxuIik7Ci19Ci0KIHN0YXRpYyBpbnQgd2FuX2dldF9zdGF0dXModm9pZCkKIHsKIAlpbnQgc3RhdHVzOwpAQCAtNDEwOSwxMSArNDEwNywxMCBAQAogCX0KICNlbmRpZgogCi0JLyogV2UgbWFrZSBzdXJlIHRvIGtlZXAgVFBfQUNQSV9XQU5DQVJEX1JFU1VNRUNUUkwgb2ZmICovCisJLyogV2UgbWFrZSBzdXJlIHRvIHNldCBUUF9BQ1BJX1dBTkNBUkRfUkVTVU1FQ1RSTCAqLworCXN0YXR1cyA9IFRQX0FDUElfV0FOQ0FSRF9SRVNVTUVDVFJMOwogCWlmIChzdGF0ZSA9PSBUUEFDUElfUkZLX1JBRElPX09OKQotCQlzdGF0dXMgPSBUUF9BQ1BJX1dBTkNBUkRfUkFESU9TU1c7Ci0JZWxzZQotCQlzdGF0dXMgPSAwOworCQlzdGF0dXMgfD0gVFBfQUNQSV9XQU5DQVJEX1JBRElPU1NXOwogCiAJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCBOVUxMLCAiU1dBTiIsICJ2ZCIsIHN0YXR1cykpCiAJCXJldHVybiAtRUlPOwpAQCAtNDIzNiw5ICs0MjMzLDkgQEAKIH0KIAogLyogcHJvY2ZzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW50IHdhbl9yZWFkKGNoYXIgKnApCitzdGF0aWMgaW50IHdhbl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlyZXR1cm4gdHBhY3BpX3Jma19wcm9jZnNfcmVhZChUUEFDUElfUkZLX1dXQU5fU1dfSUQsIHApOworCXJldHVybiB0cGFjcGlfcmZrX3Byb2Nmc19yZWFkKFRQQUNQSV9SRktfV1dBTl9TV19JRCwgbSk7CiB9CiAKIHN0YXRpYyBpbnQgd2FuX3dyaXRlKGNoYXIgKmJ1ZikKQEAgLTQyNTEsNyArNDI0OCw2IEBACiAJLnJlYWQgPSB3YW5fcmVhZCwKIAkud3JpdGUgPSB3YW5fd3JpdGUsCiAJLmV4aXQgPSB3YW5fZXhpdCwKLQkuc3VzcGVuZCA9IHdhbl9zdXNwZW5kLAogCS5zaHV0ZG93biA9IHdhbl9zaHV0ZG93biwKIH07CiAKQEAgLTQ2MTQsMTQgKzQ2MTAsMTMgQEAKIAkvKiBub3QgcmVhY2hlZCAqLwogfQogCi1zdGF0aWMgaW50IHZpZGVvX3JlYWQoY2hhciAqcCkKK3N0YXRpYyBpbnQgdmlkZW9fcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJaW50IHN0YXR1cywgYXV0b3N3OwotCWludCBsZW4gPSAwOwogCiAJaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBUUEFDUElfVklERU9fTk9ORSkgewotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHRub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIGxlbjsKKwkJc2VxX3ByaW50ZihtLCAic3RhdHVzOlx0XHRub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJc3RhdHVzID0gdmlkZW9fb3V0cHV0c3dfZ2V0KCk7CkBAIC00NjMyLDIwICs0NjI3LDIwIEBACiAJaWYgKGF1dG9zdyA8IDApCiAJCXJldHVybiBhdXRvc3c7CiAKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHRzdXBwb3J0ZWRcbiIpOwotCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsY2Q6XHRcdCVzXG4iLCBlbmFibGVkKHN0YXR1cywgMCkpOwotCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjcnQ6XHRcdCVzXG4iLCBlbmFibGVkKHN0YXR1cywgMSkpOworCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0c3VwcG9ydGVkXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJsY2Q6XHRcdCVzXG4iLCBlbmFibGVkKHN0YXR1cywgMCkpOworCXNlcV9wcmludGYobSwgImNydDpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAxKSk7CiAJaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBUUEFDUElfVklERU9fTkVXKQotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiZHZpOlx0XHQlc1xuIiwgZW5hYmxlZChzdGF0dXMsIDMpKTsKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiYXV0bzpcdFx0JXNcbiIsIGVuYWJsZWQoYXV0b3N3LCAwKSk7Ci0JbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0bGNkX2VuYWJsZSwgbGNkX2Rpc2FibGVcbiIpOwotCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGNydF9lbmFibGUsIGNydF9kaXNhYmxlXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAiZHZpOlx0XHQlc1xuIiwgZW5hYmxlZChzdGF0dXMsIDMpKTsKKwlzZXFfcHJpbnRmKG0sICJhdXRvOlx0XHQlc1xuIiwgZW5hYmxlZChhdXRvc3csIDApKTsKKwlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdGxjZF9lbmFibGUsIGxjZF9kaXNhYmxlXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdGNydF9lbmFibGUsIGNydF9kaXNhYmxlXG4iKTsKIAlpZiAodmlkZW9fc3VwcG9ydGVkID09IFRQQUNQSV9WSURFT19ORVcpCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGR2aV9lbmFibGUsIGR2aV9kaXNhYmxlXG4iKTsKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHRhdXRvX2VuYWJsZSwgYXV0b19kaXNhYmxlXG4iKTsKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHR2aWRlb19zd2l0Y2gsIGV4cGFuZF90b2dnbGVcbiIpOworCQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdGR2aV9lbmFibGUsIGR2aV9kaXNhYmxlXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdGF1dG9fZW5hYmxlLCBhdXRvX2Rpc2FibGVcbiIpOworCXNlcV9wcmludGYobSwgImNvbW1hbmRzOlx0dmlkZW9fc3dpdGNoLCBleHBhbmRfdG9nZ2xlXG4iKTsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkZW9fd3JpdGUoY2hhciAqYnVmKQpAQCAtNDgzNywyNSArNDgzMiwyNCBAQAogCQlmbHVzaF93b3JrcXVldWUodHBhY3BpX3dxKTsKIH0KIAotc3RhdGljIGludCBsaWdodF9yZWFkKGNoYXIgKnApCitzdGF0aWMgaW50IGxpZ2h0X3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwogCWludCBzdGF0dXM7CiAKIAlpZiAoIXRwX2ZlYXR1cmVzLmxpZ2h0KSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOworCQlzZXFfcHJpbnRmKG0sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOwogCX0gZWxzZSBpZiAoIXRwX2ZlYXR1cmVzLmxpZ2h0X3N0YXR1cykgewotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHR1bmtub3duXG4iKTsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0b24sIG9mZlxuIik7CisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0dW5rbm93blxuIik7CisJCXNlcV9wcmludGYobSwgImNvbW1hbmRzOlx0b24sIG9mZlxuIik7CiAJfSBlbHNlIHsKIAkJc3RhdHVzID0gbGlnaHRfZ2V0X3N0YXR1cygpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCXJldHVybiBzdGF0dXM7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdCVzXG4iLCBvbm9mZihzdGF0dXMsIDApKTsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0b24sIG9mZlxuIik7CisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0JXNcbiIsIG9ub2ZmKHN0YXR1cywgMCkpOworCQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdG9uLCBvZmZcbiIpOwogCX0KIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbGlnaHRfd3JpdGUoY2hhciAqYnVmKQpAQCAtNDkzMywyMCArNDkyNywxOCBAQAogCWRldmljZV9yZW1vdmVfZmlsZSgmdHBhY3BpX3BkZXYtPmRldiwgJmRldl9hdHRyX2Ntb3NfY29tbWFuZCk7CiB9CiAKLXN0YXRpYyBpbnQgY21vc19yZWFkKGNoYXIgKnApCitzdGF0aWMgaW50IGNtb3NfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JaW50IGxlbiA9IDA7Ci0KIAkvKiBjbW9zIG5vdCBzdXBwb3J0ZWQgb24gNTcwLCA2MDBlL3gsIDc3MGUsIDc3MHgsIEEyMWUsIEEyeG0vcCwKIAkgICBSMzAsIFIzMSwgVDIwLTIyLCBYMjAtMjEgKi8KIAlpZiAoIWNtb3NfaGFuZGxlKQotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHRub3Qgc3VwcG9ydGVkXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAic3RhdHVzOlx0XHRub3Qgc3VwcG9ydGVkXG4iKTsKIAllbHNlIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0c3VwcG9ydGVkXG4iKTsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0PGNtZD4gKDxjbWQ+IGlzIDAtMjEpXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAic3RhdHVzOlx0XHRzdXBwb3J0ZWRcbiIpOworCQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdDxjbWQ+ICg8Y21kPiBpcyAwLTIxKVxuIik7CiAJfQogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjbW9zX3dyaXRlKGNoYXIgKmJ1ZikKQEAgLTUzMjEsMTUgKzUzMTMsMTMgQEAKIAkoKHMpID09IFRQQUNQSV9MRURfT0ZGID8gIm9mZiIgOiBcCiAJCSgocykgPT0gVFBBQ1BJX0xFRF9PTiA/ICJvbiIgOiAiYmxpbmtpbmciKSkKIAotc3RhdGljIGludCBsZWRfcmVhZChjaGFyICpwKQorc3RhdGljIGludCBsZWRfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0JaW50IGxlbiA9IDA7Ci0KIAlpZiAoIWxlZF9zdXBwb3J0ZWQpIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiBsZW47CisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAwOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHRzdXBwb3J0ZWRcbiIpOworCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0c3VwcG9ydGVkXG4iKTsKIAogCWlmIChsZWRfc3VwcG9ydGVkID09IFRQQUNQSV9MRURfNTcwKSB7CiAJCS8qIDU3MCAqLwpAQCAtNTMzOCwxNSArNTMyOCwxNSBAQAogCQkJc3RhdHVzID0gbGVkX2dldF9zdGF0dXMoaSk7CiAJCQlpZiAoc3RhdHVzIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICIlZDpcdFx0JXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlZDpcdFx0JXNcbiIsCiAJCQkJICAgICAgIGksIHN0cl9sZWRfc3RhdHVzKHN0YXR1cykpOwogCQl9CiAJfQogCi0JbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0IgorCXNlcV9wcmludGYobSwgImNvbW1hbmRzOlx0IgogCQkgICAgICAgIjxsZWQ+IG9uLCA8bGVkPiBvZmYsIDxsZWQ+IGJsaW5rICg8bGVkPiBpcyAwLTE1KVxuIik7CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxlZF93cml0ZShjaGFyICpidWYpCkBAIC01NDE5LDE4ICs1NDA5LDE2IEBACiAJcmV0dXJuIChiZWVwX2hhbmRsZSk/IDAgOiAxOwogfQogCi1zdGF0aWMgaW50IGJlZXBfcmVhZChjaGFyICpwKQorc3RhdGljIGludCBiZWVwX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwotCiAJaWYgKCFiZWVwX2hhbmRsZSkKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7CisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7CiAJZWxzZSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdHN1cHBvcnRlZFxuIik7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdDxjbWQ+ICg8Y21kPiBpcyAwLTE3KVxuIik7CisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0c3VwcG9ydGVkXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAiY29tbWFuZHM6XHQ8Y21kPiAoPGNtZD4gaXMgMC0xNylcbiIpOwogCX0KIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYmVlcF93cml0ZShjaGFyICpidWYpCkBAIC01NDgzLDggKzU0NzEsMTEgQEAKIAlUUF9FQ19USEVSTUFMX1RNUDAgPSAweDc4LAkvKiBBQ1BJIEVDIHJlZ3MgVE1QIDAuLjcgKi8KIAlUUF9FQ19USEVSTUFMX1RNUDggPSAweEMwLAkvKiBBQ1BJIEVDIHJlZ3MgVE1QIDguLjE1ICovCiAJVFBfRUNfVEhFUk1BTF9UTVBfTkEgPSAtMTI4LAkvKiBBQ1BJIEVDIHNlbnNvciBub3QgYXZhaWxhYmxlICovCisKKwlUUEFDUElfVEhFUk1BTF9TRU5TT1JfTkEgPSAtMTI4MDAwLCAvKiBTZW5zb3Igbm90IGF2YWlsYWJsZSAqLwogfTsKIAorCiAjZGVmaW5lIFRQQUNQSV9NQVhfVEhFUk1BTF9TRU5TT1JTIDE2CS8qIE1heCB0aGVybWFsIHNlbnNvcnMgc3VwcG9ydGVkICovCiBzdHJ1Y3QgaWJtX3RoZXJtYWxfc2Vuc29yc19zdHJ1Y3QgewogCXMzMiB0ZW1wW1RQQUNQSV9NQVhfVEhFUk1BTF9TRU5TT1JTXTsKQEAgLTU1NzQsNiArNTU2NSwyOCBAQAogCXJldHVybiBuOwogfQogCitzdGF0aWMgdm9pZCB0aGVybWFsX2R1bXBfYWxsX3NlbnNvcnModm9pZCkKK3sKKwlpbnQgbiwgaTsKKwlzdHJ1Y3QgaWJtX3RoZXJtYWxfc2Vuc29yc19zdHJ1Y3QgdDsKKworCW4gPSB0aGVybWFsX2dldF9zZW5zb3JzKCZ0KTsKKwlpZiAobiA8PSAwKQorCQlyZXR1cm47CisKKwlwcmludGsoVFBBQ1BJX05PVElDRQorCQkidGVtcGVyYXR1cmVzIChDZWxzaXVzKToiKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKHQudGVtcFtpXSAhPSBUUEFDUElfVEhFUk1BTF9TRU5TT1JfTkEpCisJCQlwcmludGsoS0VSTl9DT05UICIgJWQiLCAoaW50KSh0LnRlbXBbaV0gLyAxMDAwKSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0NPTlQgIiBOL0EiKTsKKwl9CisKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCiAvKiBzeXNmcyB0ZW1wIyNfaW5wdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHNzaXplX3QgdGhlcm1hbF90ZW1wX2lucHV0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtNTU4OSw3ICs1NjAyLDcgQEAKIAlyZXMgPSB0aGVybWFsX2dldF9zZW5zb3IoaWR4LCAmdmFsdWUpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7Ci0JaWYgKHZhbHVlID09IFRQX0VDX1RIRVJNQUxfVE1QX05BICogMTAwMCkKKwlpZiAodmFsdWUgPT0gVFBBQ1BJX1RIRVJNQUxfU0VOU09SX05BKQogCQlyZXR1cm4gLUVOWElPOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZhbHVlKTsKQEAgLTU3NjYsOSArNTc3OSw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRoZXJtYWxfcmVhZChjaGFyICpwKQorc3RhdGljIGludCB0aGVybWFsX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwogCWludCBuLCBpOwogCXN0cnVjdCBpYm1fdGhlcm1hbF9zZW5zb3JzX3N0cnVjdCB0OwogCkBAIC01Nzc2LDE2ICs1Nzg4LDE2IEBACiAJaWYgKHVubGlrZWx5KG4gPCAwKSkKIAkJcmV0dXJuIG47CiAKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAidGVtcGVyYXR1cmVzOlx0Iik7CisJc2VxX3ByaW50ZihtLCAidGVtcGVyYXR1cmVzOlx0Iik7CiAKIAlpZiAobiA+IDApIHsKIAkJZm9yIChpID0gMDsgaSA8IChuIC0gMSk7IGkrKykKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICIlZCAiLCB0LnRlbXBbaV0gLyAxMDAwKTsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIiVkXG4iLCB0LnRlbXBbaV0gLyAxMDAwKTsKKwkJCXNlcV9wcmludGYobSwgIiVkICIsIHQudGVtcFtpXSAvIDEwMDApOworCQlzZXFfcHJpbnRmKG0sICIlZFxuIiwgdC50ZW1wW2ldIC8gMTAwMCk7CiAJfSBlbHNlCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJub3Qgc3VwcG9ydGVkXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAibm90IHN1cHBvcnRlZFxuIik7CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGlibV9zdHJ1Y3QgdGhlcm1hbF9kcml2ZXJfZGF0YSA9IHsKQEAgLTU4MDAsMzkgKzU4MTIsMzggQEAKIAogc3RhdGljIHU4IGVjZHVtcF9yZWdzWzI1Nl07CiAKLXN0YXRpYyBpbnQgZWNkdW1wX3JlYWQoY2hhciAqcCkKK3N0YXRpYyBpbnQgZWNkdW1wX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwogCWludCBpLCBqOwogCXU4IHY7CiAKLQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiRUMgICAgICAiCisJc2VxX3ByaW50ZihtLCAiRUMgICAgICAiCiAJCSAgICAgICAiICswMCArMDEgKzAyICswMyArMDQgKzA1ICswNiArMDciCiAJCSAgICAgICAiICswOCArMDkgKzBhICswYiArMGMgKzBkICswZSArMGZcbiIpOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz0gMTYpIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIkVDIDB4JTAyeDoiLCBpKTsKKwkJc2VxX3ByaW50ZihtLCAiRUMgMHglMDJ4OiIsIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgewogCQkJaWYgKCFhY3BpX2VjX3JlYWQoaSArIGosICZ2KSkKIAkJCQlicmVhazsKIAkJCWlmICh2ICE9IGVjZHVtcF9yZWdzW2kgKyBqXSkKLQkJCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiIColMDJ4Iiwgdik7CisJCQkJc2VxX3ByaW50ZihtLCAiIColMDJ4Iiwgdik7CiAJCQllbHNlCi0JCQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIiAgJTAyeCIsIHYpOworCQkJCXNlcV9wcmludGYobSwgIiAgJTAyeCIsIHYpOwogCQkJZWNkdW1wX3JlZ3NbaSArIGpdID0gdjsKIAkJfQotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiXG4iKTsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJCWlmIChqICE9IDE2KQogCQkJYnJlYWs7CiAJfQogCiAJLyogVGhlc2UgYXJlIHdheSB0b28gZGFuZ2Vyb3VzIHRvIGFkdmVydGlzZSBvcGVubHkuLi4gKi8KICNpZiAwCi0JbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0MHg8b2Zmc2V0PiAweDx2YWx1ZT4iCisJc2VxX3ByaW50ZihtLCAiY29tbWFuZHM6XHQweDxvZmZzZXQ+IDB4PHZhbHVlPiIKIAkJICAgICAgICIgKDxvZmZzZXQ+IGlzIDAwLWZmLCA8dmFsdWU+IGlzIDAwLWZmKVxuIik7Ci0JbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0MHg8b2Zmc2V0PiA8dmFsdWU+ICAiCisJc2VxX3ByaW50ZihtLCAiY29tbWFuZHM6XHQweDxvZmZzZXQ+IDx2YWx1ZT4gICIKIAkJICAgICAgICIgKDxvZmZzZXQ+IGlzIDAwLWZmLCA8dmFsdWU+IGlzIDAtMjU1KVxuIik7CiAjZW5kaWYKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGVjZHVtcF93cml0ZShjaGFyICpidWYpCkBAIC02MDk1LDYgKzYxMDYsMTIgQEAKIAlyZXR1cm4gc3RhdHVzICYgVFBfRUNfQkFDS0xJR0hUX0xWTE1TSzsKIH0KIAorc3RhdGljIHZvaWQgdHBhY3BpX2JyaWdodG5lc3Nfbm90aWZ5X2NoYW5nZSh2b2lkKQoreworCWJhY2tsaWdodF9mb3JjZV91cGRhdGUoaWJtX2JhY2tsaWdodF9kZXZpY2UsCisJCQkgICAgICAgQkFDS0xJR0hUX1VQREFURV9IT1RLRVkpOworfQorCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgaWJtX2JhY2tsaWdodF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3NfZ2V0LAogCS51cGRhdGVfc3RhdHVzICA9IGJyaWdodG5lc3NfdXBkYXRlX3N0YXR1cywKQEAgLTYxMjMsOCArNjE0MCw4IEBACiAKIAkvKiBNb2RlbHMgd2l0aCBJbnRlbCBFeHRyZW1lIEdyYXBoaWNzIDIgKi8KIAlUUEFDUElfUV9JQk0oJzEnLCAnVScsIFRQQUNQSV9CUkdIVF9RX05PRUMpLAotCVRQQUNQSV9RX0lCTSgnMScsICdWJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAotCVRQQUNQSV9RX0lCTSgnMScsICdXJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX05PRUMpLAorCVRQQUNQSV9RX0lCTSgnMScsICdWJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKKwlUUEFDUElfUV9JQk0oJzEnLCAnVycsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCiAKIAkvKiBNb2RlbHMgd2l0aCBJbnRlbCBHTUE5MDAgKi8KIAlUUEFDUElfUV9JQk0oJzcnLCAnMCcsIFRQQUNQSV9CUkdIVF9RX05PRUMpLAkvKiBUNDMsIFI1MiAqLwpAQCAtNjI0OSw2ICs2MjY2LDEyIEBACiAJaWJtX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSBiICYgVFBfRUNfQkFDS0xJR0hUX0xWTE1TSzsKIAliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhpYm1fYmFja2xpZ2h0X2RldmljZSk7CiAKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0JSR0hULAorCQkJImJyaWdodG5lc3M6IHJlZ2lzdGVyaW5nIGJyaWdodG5lc3MgaG90a2V5cyAiCisJCQkiYXMgY2hhbmdlIG5vdGlmaWNhdGlvblxuIik7CisJdHBhY3BpX2hvdGtleV9kcml2ZXJfbWFza19zZXQoaG90a2V5X2RyaXZlcl9tYXNrCisJCQkJfCBUUF9BQ1BJX0hLRVlfQlJHSFRVUF9NQVNLCisJCQkJfCBUUF9BQ1BJX0hLRVlfQlJHSFREV05fTUFTSyk7OwogCXJldHVybiAwOwogfQogCkBAIC02MjczLDIzICs2Mjk2LDIyIEBACiAJdHBhY3BpX2JyaWdodG5lc3NfY2hlY2twb2ludF9udnJhbSgpOwogfQogCi1zdGF0aWMgaW50IGJyaWdodG5lc3NfcmVhZChjaGFyICpwKQorc3RhdGljIGludCBicmlnaHRuZXNzX3JlYWQoc3RydWN0IHNlcV9maWxlICptKQogewotCWludCBsZW4gPSAwOwogCWludCBsZXZlbDsKIAogCWxldmVsID0gYnJpZ2h0bmVzc19nZXQoTlVMTCk7CiAJaWYgKGxldmVsIDwgMCkgewotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibGV2ZWw6XHRcdHVucmVhZGFibGVcbiIpOworCQlzZXFfcHJpbnRmKG0sICJsZXZlbDpcdFx0dW5yZWFkYWJsZVxuIik7CiAJfSBlbHNlIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImxldmVsOlx0XHQlZFxuIiwgbGV2ZWwpOwotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHR1cCwgZG93blxuIik7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGxldmVsIDxsZXZlbD4iCisJCXNlcV9wcmludGYobSwgImxldmVsOlx0XHQlZFxuIiwgbGV2ZWwpOworCQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdHVwLCBkb3duXG4iKTsKKwkJc2VxX3ByaW50ZihtLCAiY29tbWFuZHM6XHRsZXZlbCA8bGV2ZWw+IgogCQkJICAgICAgICIgKDxsZXZlbD4gaXMgMC0lZClcbiIsCiAJCQkgICAgICAgKHRwX2ZlYXR1cmVzLmJyaWdodF8xNmxldmVscykgPyAxNSA6IDcpOwogCX0KIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnJpZ2h0bmVzc193cml0ZShjaGFyICpidWYpCkBAIC02MzI1LDYgKzYzNDcsOSBAQAogCSAqIERvaW5nIGl0IHRoaXMgd2F5IG1ha2VzIHRoZSBzeXNjYWxsIHJlc3RhcnRhYmxlIGluIGNhc2Ugb2YgRUlOVFIKIAkgKi8KIAlyYyA9IGJyaWdodG5lc3Nfc2V0KGxldmVsKTsKKwlpZiAoIXJjICYmIGlibV9iYWNrbGlnaHRfZGV2aWNlKQorCQliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGlibV9iYWNrbGlnaHRfZGV2aWNlLAorCQkJCQlCQUNLTElHSFRfVVBEQVRFX1NZU0ZTKTsKIAlyZXR1cm4gKHJjID09IC1FSU5UUik/IC1FUkVTVEFSVFNZUyA6IHJjOwogfQogCkBAIC02MzQxLDk5ICs2MzY2LDY1NCBAQAogICogVm9sdW1lIHN1YmRyaXZlcgogICovCiAKLXN0YXRpYyBpbnQgdm9sdW1lX29mZnNldCA9IDB4MzA7CisvKgorICogSUJNIFRoaW5rUGFkcyBoYXZlIGEgc2ltcGxlIHZvbHVtZSBjb250cm9sbGVyIHdpdGggTVVURSBnYXRpbmcuCisgKiBWZXJ5IGVhcmx5IExlbm92byBUaGlua1BhZHMgZm9sbG93IHRoZSBJQk0gVGhpbmtQYWQgc3BlYy4KKyAqCisgKiBTaW5jZSB0aGUgKjYxIHNlcmllcyAoYW5kIHByb2JhYmx5IGFsc28gdGhlIGxhdGVyICo2MCBzZXJpZXMpLCBMZW5vdm8KKyAqIFRoaW5rUGFkcyBvbmx5IGltcGxlbWVudCB0aGUgTVVURSBnYXRlLgorICoKKyAqIEVDIHJlZ2lzdGVyIDB4MzAKKyAqICAgQml0IDY6IE1VVEUgKDEgbXV0ZXMgc291bmQpCisgKiAgIEJpdCAzLTA6IFZvbHVtZQorICogICBPdGhlciBiaXRzIHNob3VsZCBiZSB6ZXJvIGFzIGZhciBhcyB3ZSBrbm93LgorICoKKyAqIFRoaXMgaXMgYWxzbyBzdG9yZWQgaW4gQ01PUyBOVlJBTSwgYnl0ZSAweDYwLCBiaXQgNiAoTVVURSksIGFuZAorICogYml0cyAzLTAgKHZvbHVtZSkuICBPdGhlciBiaXRzIGluIE5WUkFNIG1heSBoYXZlIG90aGVyIGZ1bmN0aW9ucywKKyAqIHN1Y2ggYXMgYml0IDcgd2hpY2ggaXMgdXNlZCB0byBkZXRlY3QgcmVwZWF0ZWQgcHJlc3NlcyBvZiBNVVRFLAorICogYW5kIHdlIGxlYXZlIHRoZW0gdW5jaGFuZ2VkLgorICovCiAKLXN0YXRpYyBpbnQgdm9sdW1lX3JlYWQoY2hhciAqcCkKKyNkZWZpbmUgVFBBQ1BJX0FMU0FfRFJWTkFNRSAgIlRoaW5rUGFkIEVDIgorI2RlZmluZSBUUEFDUElfQUxTQV9TSFJUTkFNRSAiVGhpbmtQYWQgQ29uc29sZSBBdWRpbyBDb250cm9sIgorI2RlZmluZSBUUEFDUElfQUxTQV9NSVhFUk5BTUUgVFBBQ1BJX0FMU0FfU0hSVE5BTUUKKworc3RhdGljIGludCBhbHNhX2luZGV4ID0gU05EUlZfREVGQVVMVF9JRFgxOworc3RhdGljIGNoYXIgKmFsc2FfaWQgPSAiVGhpbmtQYWRFQyI7CitzdGF0aWMgaW50IGFsc2FfZW5hYmxlID0gU05EUlZfREVGQVVMVF9FTkFCTEUxOworCitzdHJ1Y3QgdHBhY3BpX2Fsc2FfZGF0YSB7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgKmN0bF9tdXRlX2lkOworCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgKmN0bF92b2xfaWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9jYXJkICphbHNhX2NhcmQ7CisKK2VudW0geworCVRQX0VDX0FVRElPID0gMHgzMCwKKworCS8qIFRQX0VDX0FVRElPIGJpdHMgKi8KKwlUUF9FQ19BVURJT19NVVRFU1cgPSA2LAorCisJLyogVFBfRUNfQVVESU8gYml0bWFza3MgKi8KKwlUUF9FQ19BVURJT19MVkxfTVNLID0gMHgwRiwKKwlUUF9FQ19BVURJT19NVVRFU1dfTVNLID0gKDEgPDwgVFBfRUNfQVVESU9fTVVURVNXKSwKKworCS8qIE1heGltdW0gdm9sdW1lICovCisJVFBfRUNfVk9MVU1FX01BWCA9IDE0LAorfTsKKworZW51bSB0cGFjcGlfdm9sdW1lX2FjY2Vzc19tb2RlIHsKKwlUUEFDUElfVk9MX01PREVfQVVUTyA9IDAsCS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwlUUEFDUElfVk9MX01PREVfRUMsCQkvKiBQdXJlIEVDIGNvbnRyb2wgKi8KKwlUUEFDUElfVk9MX01PREVfVUNNU19TVEVQLAkvKiBVQ01TIHN0ZXAtYmFzZWQgY29udHJvbDogTi9BICovCisJVFBBQ1BJX1ZPTF9NT0RFX0VDTlZSQU0sCS8qIEVDIGNvbnRyb2wgdy8gTlZSQU0gc3RvcmUgKi8KKwlUUEFDUElfVk9MX01PREVfTUFYCit9OworCitlbnVtIHRwYWNwaV92b2x1bWVfY2FwYWJpbGl0aWVzIHsKKwlUUEFDUElfVk9MX0NBUF9BVVRPID0gMCwJLyogVXNlIHdoaXRlL2JsYWNrbGlzdCAqLworCVRQQUNQSV9WT0xfQ0FQX1ZPTE1VVEUsCQkvKiBPdXRwdXQgdm9sIGFuZCBtdXRlICovCisJVFBBQ1BJX1ZPTF9DQVBfTVVURU9OTFksCS8qIE91dHB1dCBtdXRlIG9ubHkgKi8KKwlUUEFDUElfVk9MX0NBUF9NQVgKK307CisKK3N0YXRpYyBlbnVtIHRwYWNwaV92b2x1bWVfYWNjZXNzX21vZGUgdm9sdW1lX21vZGUgPQorCVRQQUNQSV9WT0xfTU9ERV9NQVg7CisKK3N0YXRpYyBlbnVtIHRwYWNwaV92b2x1bWVfY2FwYWJpbGl0aWVzIHZvbHVtZV9jYXBhYmlsaXRpZXM7CitzdGF0aWMgaW50IHZvbHVtZV9jb250cm9sX2FsbG93ZWQ7CisKKy8qCisgKiBVc2VkIHRvIHN5bmNyb25pemUgd3JpdGVycyB0byBUUF9FQ19BVURJTyBhbmQKKyAqIFRQX05WUkFNX0FERFJfTUlYRVIsIGFzIHdlIG5lZWQgdG8gZG8gcmVhZC1tb2RpZnktd3JpdGUKKyAqLworc3RhdGljIHN0cnVjdCBtdXRleCB2b2x1bWVfbXV0ZXg7CisKK3N0YXRpYyB2b2lkIHRwYWNwaV92b2x1bWVfY2hlY2twb2ludF9udnJhbSh2b2lkKQogewotCWludCBsZW4gPSAwOwotCXU4IGxldmVsOworCXU4IGxlYyA9IDA7CisJdTggYl9udnJhbTsKKwl1OCBlY19tYXNrOwogCi0JaWYgKCFhY3BpX2VjX3JlYWQodm9sdW1lX29mZnNldCwgJmxldmVsKSkgewotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibGV2ZWw6XHRcdHVucmVhZGFibGVcbiIpOworCWlmICh2b2x1bWVfbW9kZSAhPSBUUEFDUElfVk9MX01PREVfRUNOVlJBTSkKKwkJcmV0dXJuOworCWlmICghdm9sdW1lX2NvbnRyb2xfYWxsb3dlZCkKKwkJcmV0dXJuOworCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19NSVhFUiwKKwkJInRyeWluZyB0byBjaGVja3BvaW50IG1peGVyIHN0YXRlIHRvIE5WUkFNLi4uXG4iKTsKKworCWlmICh0cF9mZWF0dXJlcy5taXhlcl9ub19sZXZlbF9jb250cm9sKQorCQllY19tYXNrID0gVFBfRUNfQVVESU9fTVVURVNXX01TSzsKKwllbHNlCisJCWVjX21hc2sgPSBUUF9FQ19BVURJT19NVVRFU1dfTVNLIHwgVFBfRUNfQVVESU9fTFZMX01TSzsKKworCWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZ2b2x1bWVfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KCFhY3BpX2VjX3JlYWQoVFBfRUNfQVVESU8sICZsZWMpKSkKKwkJZ290byB1bmxvY2s7CisJbGVjICY9IGVjX21hc2s7CisJYl9udnJhbSA9IG52cmFtX3JlYWRfYnl0ZShUUF9OVlJBTV9BRERSX01JWEVSKTsKKworCWlmIChsZWMgIT0gKGJfbnZyYW0gJiBlY19tYXNrKSkgeworCQkvKiBOVlJBTSBuZWVkcyB1cGRhdGUgKi8KKwkJYl9udnJhbSAmPSB+ZWNfbWFzazsKKwkJYl9udnJhbSB8PSBsZWM7CisJCW52cmFtX3dyaXRlX2J5dGUoYl9udnJhbSwgVFBfTlZSQU1fQUREUl9NSVhFUik7CisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19NSVhFUiwKKwkJCSAgICJ1cGRhdGVkIE5WUkFNIG1peGVyIHN0YXR1cyB0byAweCUwMnggKDB4JTAyeClcbiIsCisJCQkgICAodW5zaWduZWQgaW50KSBsZWMsICh1bnNpZ25lZCBpbnQpIGJfbnZyYW0pOwogCX0gZWxzZSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0JWRcbiIsIGxldmVsICYgMHhmKTsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIm11dGU6XHRcdCVzXG4iLCBvbm9mZihsZXZlbCwgNikpOwotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHR1cCwgZG93biwgbXV0ZVxuIik7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGxldmVsIDxsZXZlbD4iCi0JCQkgICAgICAgIiAoPGxldmVsPiBpcyAwLTE1KVxuIik7CisJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsCisJCQkgICAiTlZSQU0gbWl4ZXIgc3RhdHVzIGFscmVhZHkgaXMgMHglMDJ4ICgweCUwMngpXG4iLAorCQkJICAgKHVuc2lnbmVkIGludCkgbGVjLCAodW5zaWduZWQgaW50KSBiX252cmFtKTsKIAl9CiAKLQlyZXR1cm4gbGVuOwordW5sb2NrOgorCW11dGV4X3VubG9jaygmdm9sdW1lX211dGV4KTsKIH0KIAotc3RhdGljIGludCB2b2x1bWVfd3JpdGUoY2hhciAqYnVmKQorc3RhdGljIGludCB2b2x1bWVfZ2V0X3N0YXR1c19lYyh1OCAqc3RhdHVzKQogewotCWludCBjbW9zX2NtZCwgaW5jLCBpOwotCXU4IGxldmVsLCBtdXRlOwotCWludCBuZXdfbGV2ZWwsIG5ld19tdXRlOwotCWNoYXIgKmNtZDsKKwl1OCBzOwogCi0Jd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKLQkJaWYgKCFhY3BpX2VjX3JlYWQodm9sdW1lX29mZnNldCwgJmxldmVsKSkKLQkJCXJldHVybiAtRUlPOwotCQluZXdfbXV0ZSA9IG11dGUgPSBsZXZlbCAmIDB4NDA7Ci0JCW5ld19sZXZlbCA9IGxldmVsID0gbGV2ZWwgJiAweGY7CisJaWYgKCFhY3BpX2VjX3JlYWQoVFBfRUNfQVVESU8sICZzKSkKKwkJcmV0dXJuIC1FSU87CiAKLQkJaWYgKHN0cmxlbmNtcChjbWQsICJ1cCIpID09IDApIHsKLQkJCWlmIChtdXRlKQotCQkJCW5ld19tdXRlID0gMDsKLQkJCWVsc2UKLQkJCQluZXdfbGV2ZWwgPSBsZXZlbCA9PSAxNSA/IDE1IDogbGV2ZWwgKyAxOwotCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJkb3duIikgPT0gMCkgewotCQkJaWYgKG11dGUpCi0JCQkJbmV3X211dGUgPSAwOwotCQkJZWxzZQotCQkJCW5ld19sZXZlbCA9IGxldmVsID09IDAgPyAwIDogbGV2ZWwgLSAxOwotCQl9IGVsc2UgaWYgKHNzY2FuZihjbWQsICJsZXZlbCAlZCIsICZuZXdfbGV2ZWwpID09IDEgJiYKLQkJCSAgIG5ld19sZXZlbCA+PSAwICYmIG5ld19sZXZlbCA8PSAxNSkgewotCQkJLyogbmV3X2xldmVsIHNldCAqLwotCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJtdXRlIikgPT0gMCkgewotCQkJbmV3X211dGUgPSAweDQwOwotCQl9IGVsc2UKLQkJCXJldHVybiAtRUlOVkFMOworCSpzdGF0dXMgPSBzOwogCi0JCWlmIChuZXdfbGV2ZWwgIT0gbGV2ZWwpIHsKLQkJCS8qIG11dGUgZG9lc24ndCBjaGFuZ2UgKi8KKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsICJzdGF0dXMgMHglMDJ4XG4iLCBzKTsKIAotCQkJY21vc19jbWQgPSAobmV3X2xldmVsID4gbGV2ZWwpID8KLQkJCQkJVFBfQ01PU19WT0xVTUVfVVAgOiBUUF9DTU9TX1ZPTFVNRV9ET1dOOwotCQkJaW5jID0gbmV3X2xldmVsID4gbGV2ZWwgPyAxIDogLTE7CisJcmV0dXJuIDA7Cit9CiAKLQkJCWlmIChtdXRlICYmIChpc3N1ZV90aGlua3BhZF9jbW9zX2NvbW1hbmQoY21vc19jbWQpIHx8Ci0JCQkJICAgICAhYWNwaV9lY193cml0ZSh2b2x1bWVfb2Zmc2V0LCBsZXZlbCkpKQotCQkJCXJldHVybiAtRUlPOworc3RhdGljIGludCB2b2x1bWVfZ2V0X3N0YXR1cyh1OCAqc3RhdHVzKQoreworCXJldHVybiB2b2x1bWVfZ2V0X3N0YXR1c19lYyhzdGF0dXMpOworfQogCi0JCQlmb3IgKGkgPSBsZXZlbDsgaSAhPSBuZXdfbGV2ZWw7IGkgKz0gaW5jKQotCQkJCWlmIChpc3N1ZV90aGlua3BhZF9jbW9zX2NvbW1hbmQoY21vc19jbWQpIHx8Ci0JCQkJICAgICFhY3BpX2VjX3dyaXRlKHZvbHVtZV9vZmZzZXQsIGkgKyBpbmMpKQotCQkJCQlyZXR1cm4gLUVJTzsKK3N0YXRpYyBpbnQgdm9sdW1lX3NldF9zdGF0dXNfZWMoY29uc3QgdTggc3RhdHVzKQoreworCWlmICghYWNwaV9lY193cml0ZShUUF9FQ19BVURJTywgc3RhdHVzKSkKKwkJcmV0dXJuIC1FSU87CiAKLQkJCWlmIChtdXRlICYmCi0JCQkgICAgKGlzc3VlX3RoaW5rcGFkX2Ntb3NfY29tbWFuZChUUF9DTU9TX1ZPTFVNRV9NVVRFKSB8fAotCQkJICAgICAhYWNwaV9lY193cml0ZSh2b2x1bWVfb2Zmc2V0LCBuZXdfbGV2ZWwgKyBtdXRlKSkpIHsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsICJzZXQgRUMgbWl4ZXIgdG8gMHglMDJ4XG4iLCBzdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm9sdW1lX3NldF9zdGF0dXMoY29uc3QgdTggc3RhdHVzKQoreworCXJldHVybiB2b2x1bWVfc2V0X3N0YXR1c19lYyhzdGF0dXMpOworfQorCitzdGF0aWMgaW50IHZvbHVtZV9zZXRfbXV0ZV9lYyhjb25zdCBib29sIG11dGUpCit7CisJaW50IHJjOworCXU4IHMsIG47CisKKwlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmdm9sdW1lX211dGV4KSA8IDApCisJCXJldHVybiAtRUlOVFI7CisKKwlyYyA9IHZvbHVtZV9nZXRfc3RhdHVzX2VjKCZzKTsKKwlpZiAocmMpCisJCWdvdG8gdW5sb2NrOworCisJbiA9IChtdXRlKSA/IHMgfCBUUF9FQ19BVURJT19NVVRFU1dfTVNLIDoKKwkJICAgICBzICYgflRQX0VDX0FVRElPX01VVEVTV19NU0s7CisKKwlpZiAobiAhPSBzKQorCQlyYyA9IHZvbHVtZV9zZXRfc3RhdHVzX2VjKG4pOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ2b2x1bWVfbXV0ZXgpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2b2x1bWVfc2V0X211dGUoY29uc3QgYm9vbCBtdXRlKQoreworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19NSVhFUiwgInRyeWluZyB0byAlc211dGVcbiIsCisJCSAgIChtdXRlKSA/ICIiIDogInVuIik7CisJcmV0dXJuIHZvbHVtZV9zZXRfbXV0ZV9lYyhtdXRlKTsKK30KKworc3RhdGljIGludCB2b2x1bWVfc2V0X3ZvbHVtZV9lYyhjb25zdCB1OCB2b2wpCit7CisJaW50IHJjOworCXU4IHMsIG47CisKKwlpZiAodm9sID4gVFBfRUNfVk9MVU1FX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmdm9sdW1lX211dGV4KSA8IDApCisJCXJldHVybiAtRUlOVFI7CisKKwlyYyA9IHZvbHVtZV9nZXRfc3RhdHVzX2VjKCZzKTsKKwlpZiAocmMpCisJCWdvdG8gdW5sb2NrOworCisJbiA9IChzICYgflRQX0VDX0FVRElPX0xWTF9NU0spIHwgdm9sOworCisJaWYgKG4gIT0gcykKKwkJcmMgPSB2b2x1bWVfc2V0X3N0YXR1c19lYyhuKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmdm9sdW1lX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdm9sdW1lX3NldF92b2x1bWUoY29uc3QgdTggdm9sKQoreworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19NSVhFUiwKKwkJICAgInRyeWluZyB0byBzZXQgdm9sdW1lIGxldmVsIHRvICVodVxuIiwgdm9sKTsKKwlyZXR1cm4gdm9sdW1lX3NldF92b2x1bWVfZWModm9sKTsKK30KKworc3RhdGljIHZvaWQgdm9sdW1lX2Fsc2Ffbm90aWZ5X2NoYW5nZSh2b2lkKQoreworCXN0cnVjdCB0cGFjcGlfYWxzYV9kYXRhICpkOworCisJaWYgKGFsc2FfY2FyZCAmJiBhbHNhX2NhcmQtPnByaXZhdGVfZGF0YSkgeworCQlkID0gYWxzYV9jYXJkLT5wcml2YXRlX2RhdGE7CisJCWlmIChkLT5jdGxfbXV0ZV9pZCkKKwkJCXNuZF9jdGxfbm90aWZ5KGFsc2FfY2FyZCwKKwkJCQkJU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkJCWQtPmN0bF9tdXRlX2lkKTsKKwkJaWYgKGQtPmN0bF92b2xfaWQpCisJCQlzbmRfY3RsX25vdGlmeShhbHNhX2NhcmQsCisJCQkJCVNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCQlkLT5jdGxfdm9sX2lkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdm9sdW1lX2Fsc2Ffdm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gVFBfRUNfVk9MVU1FX01BWDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2b2x1bWVfYWxzYV92b2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXU4IHM7CisJaW50IHJjOworCisJcmMgPSB2b2x1bWVfZ2V0X3N0YXR1cygmcyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzICYgVFBfRUNfQVVESU9fTFZMX01TSzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2b2x1bWVfYWxzYV92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXJldHVybiB2b2x1bWVfc2V0X3ZvbHVtZSh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Cit9CisKKyNkZWZpbmUgdm9sdW1lX2Fsc2FfbXV0ZV9pbmZvIHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8KKworc3RhdGljIGludCB2b2x1bWVfYWxzYV9tdXRlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwl1OCBzOworCWludCByYzsKKworCXJjID0gdm9sdW1lX2dldF9zdGF0dXMoJnMpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJCQkocyAmIFRQX0VDX0FVRElPX01VVEVTV19NU0spID8gMCA6IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm9sdW1lX2Fsc2FfbXV0ZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJcmV0dXJuIHZvbHVtZV9zZXRfbXV0ZSghdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdm9sdW1lX2Fsc2FfY29udHJvbF92b2wgX19kZXZpbml0ZGF0YSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDb25zb2xlIFBsYXliYWNrIFZvbHVtZSIsCisJLmluZGV4ID0gMCwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJLmluZm8gPSB2b2x1bWVfYWxzYV92b2xfaW5mbywKKwkuZ2V0ID0gdm9sdW1lX2Fsc2Ffdm9sX2dldCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2b2x1bWVfYWxzYV9jb250cm9sX211dGUgX19kZXZpbml0ZGF0YSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDb25zb2xlIFBsYXliYWNrIFN3aXRjaCIsCisJLmluZGV4ID0gMCwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJLmluZm8gPSB2b2x1bWVfYWxzYV9tdXRlX2luZm8sCisJLmdldCA9IHZvbHVtZV9hbHNhX211dGVfZ2V0LAorfTsKKworc3RhdGljIHZvaWQgdm9sdW1lX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQoreworCXRwYWNwaV92b2x1bWVfY2hlY2twb2ludF9udnJhbSgpOworfQorCitzdGF0aWMgdm9pZCB2b2x1bWVfcmVzdW1lKHZvaWQpCit7CisJdm9sdW1lX2Fsc2Ffbm90aWZ5X2NoYW5nZSgpOworfQorCitzdGF0aWMgdm9pZCB2b2x1bWVfc2h1dGRvd24odm9pZCkKK3sKKwl0cGFjcGlfdm9sdW1lX2NoZWNrcG9pbnRfbnZyYW0oKTsKK30KKworc3RhdGljIHZvaWQgdm9sdW1lX2V4aXQodm9pZCkKK3sKKwlpZiAoYWxzYV9jYXJkKSB7CisJCXNuZF9jYXJkX2ZyZWUoYWxzYV9jYXJkKTsKKwkJYWxzYV9jYXJkID0gTlVMTDsKKwl9CisKKwl0cGFjcGlfdm9sdW1lX2NoZWNrcG9pbnRfbnZyYW0oKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdm9sdW1lX2NyZWF0ZV9hbHNhX21peGVyKHZvaWQpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCB0cGFjcGlfYWxzYV9kYXRhICpkYXRhOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bF92b2w7CisJc3RydWN0IHNuZF9rY29udHJvbCAqY3RsX211dGU7CisJaW50IHJjOworCisJcmMgPSBzbmRfY2FyZF9jcmVhdGUoYWxzYV9pbmRleCwgYWxzYV9pZCwgVEhJU19NT0RVTEUsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCB0cGFjcGlfYWxzYV9kYXRhKSwgJmNhcmQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRU5PTUVNOworCisJQlVHX09OKCFjYXJkLT5wcml2YXRlX2RhdGEpOworCWRhdGEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJZGF0YS0+Y2FyZCA9IGNhcmQ7CisKKwlzdHJsY3B5KGNhcmQtPmRyaXZlciwgVFBBQ1BJX0FMU0FfRFJWTkFNRSwKKwkJc2l6ZW9mKGNhcmQtPmRyaXZlcikpOworCXN0cmxjcHkoY2FyZC0+c2hvcnRuYW1lLCBUUEFDUElfQUxTQV9TSFJUTkFNRSwKKwkJc2l6ZW9mKGNhcmQtPnNob3J0bmFtZSkpOworCXNucHJpbnRmKGNhcmQtPm1peGVybmFtZSwgc2l6ZW9mKGNhcmQtPm1peGVybmFtZSksICJUaGlua1BhZCBFQyAlcyIsCisJCSAodGhpbmtwYWRfaWQuZWNfdmVyc2lvbl9zdHIpID8KKwkJCXRoaW5rcGFkX2lkLmVjX3ZlcnNpb25fc3RyIDogIih1bmtub3duKSIpOworCXNucHJpbnRmKGNhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpLAorCQkgIiVzIGF0IEVDIHJlZyAweCUwMngsIGZ3ICVzIiwgY2FyZC0+c2hvcnRuYW1lLCBUUF9FQ19BVURJTywKKwkJICh0aGlua3BhZF9pZC5lY192ZXJzaW9uX3N0cikgPworCQkJdGhpbmtwYWRfaWQuZWNfdmVyc2lvbl9zdHIgOiAidW5rbm93biIpOworCisJaWYgKHZvbHVtZV9jb250cm9sX2FsbG93ZWQpIHsKKwkJdm9sdW1lX2Fsc2FfY29udHJvbF92b2wucHV0ID0gdm9sdW1lX2Fsc2Ffdm9sX3B1dDsKKwkJdm9sdW1lX2Fsc2FfY29udHJvbF92b2wuYWNjZXNzID0KKwkJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFOworCisJCXZvbHVtZV9hbHNhX2NvbnRyb2xfbXV0ZS5wdXQgPSB2b2x1bWVfYWxzYV9tdXRlX3B1dDsKKwkJdm9sdW1lX2Fsc2FfY29udHJvbF9tdXRlLmFjY2VzcyA9CisJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURTsKKwl9CisKKwlpZiAoIXRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wpIHsKKwkJY3RsX3ZvbCA9IHNuZF9jdGxfbmV3MSgmdm9sdW1lX2Fsc2FfY29udHJvbF92b2wsIE5VTEwpOworCQlyYyA9IHNuZF9jdGxfYWRkKGNhcmQsIGN0bF92b2wpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoVFBBQ1BJX0VSUgorCQkJCSJGYWlsZWQgdG8gY3JlYXRlIEFMU0Egdm9sdW1lIGNvbnRyb2xcbiIpOworCQkJZ290byBlcnJfb3V0OwogCQl9CisJCWRhdGEtPmN0bF92b2xfaWQgPSAmY3RsX3ZvbC0+aWQ7CisJfQogCi0JCWlmIChuZXdfbXV0ZSAhPSBtdXRlKSB7Ci0JCQkvKiBsZXZlbCBkb2Vzbid0IGNoYW5nZSAqLworCWN0bF9tdXRlID0gc25kX2N0bF9uZXcxKCZ2b2x1bWVfYWxzYV9jb250cm9sX211dGUsIE5VTEwpOworCXJjID0gc25kX2N0bF9hZGQoY2FyZCwgY3RsX211dGUpOworCWlmIChyYyA8IDApIHsKKwkJcHJpbnRrKFRQQUNQSV9FUlIgIkZhaWxlZCB0byBjcmVhdGUgQUxTQSBtdXRlIGNvbnRyb2xcbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWRhdGEtPmN0bF9tdXRlX2lkID0gJmN0bF9tdXRlLT5pZDsKIAotCQkJY21vc19jbWQgPSAobmV3X211dGUpID8KLQkJCQkgICBUUF9DTU9TX1ZPTFVNRV9NVVRFIDogVFBfQ01PU19WT0xVTUVfVVA7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmdHBhY3BpX3BkZXYtPmRldik7CisJcmMgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIAotCQkJaWYgKGlzc3VlX3RoaW5rcGFkX2Ntb3NfY29tbWFuZChjbW9zX2NtZCkgfHwKLQkJCSAgICAhYWNwaV9lY193cml0ZSh2b2x1bWVfb2Zmc2V0LCBsZXZlbCArIG5ld19tdXRlKSkKLQkJCQlyZXR1cm4gLUVJTzsKK2Vycl9vdXQ6CisJaWYgKHJjIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQljYXJkID0gTlVMTDsKKwl9CisKKwlhbHNhX2NhcmQgPSBjYXJkOworCXJldHVybiByYzsKK30KKworI2RlZmluZSBUUEFDUElfVk9MX1FfTVVURU9OTFkJMHgwMDAxCS8qIE11dGUtb25seSBjb250cm9sIGF2YWlsYWJsZSAqLworI2RlZmluZSBUUEFDUElfVk9MX1FfTEVWRUwJMHgwMDAyICAvKiBWb2x1bWUgY29udHJvbCBhdmFpbGFibGUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cGFjcGlfcXVpcmsgdm9sdW1lX3F1aXJrX3RhYmxlW10gX19pbml0Y29uc3QgPSB7CisJLyogV2hpdGVsaXN0IHZvbHVtZSBsZXZlbCBvbiBhbGwgSUJNIGJ5IGRlZmF1bHQgKi8KKwl7IC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lCTSwKKwkgIC5iaW9zICAgPSBUUEFDUElfTUFUQ0hfQU5ZLAorCSAgLmVjICAgICA9IFRQQUNQSV9NQVRDSF9BTlksCisJICAucXVpcmtzID0gVFBBQ1BJX1ZPTF9RX0xFVkVMIH0sCisKKwkvKiBMZW5vdm8gbW9kZWxzIHdpdGggdm9sdW1lIGNvbnRyb2wgKG5lZWRzIGNvbmZpcm1hdGlvbikgKi8KKwlUUEFDUElfUUVDX0xOVignNycsICdDJywgVFBBQ1BJX1ZPTF9RX0xFVkVMKSwgLyogUjYwL2kgKi8KKwlUUEFDUElfUUVDX0xOVignNycsICdFJywgVFBBQ1BJX1ZPTF9RX0xFVkVMKSwgLyogUjYwZS9pICovCisJVFBBQ1BJX1FFQ19MTlYoJzcnLCAnOScsIFRQQUNQSV9WT0xfUV9MRVZFTCksIC8qIFQ2MC9wICovCisJVFBBQ1BJX1FFQ19MTlYoJzcnLCAnQicsIFRQQUNQSV9WT0xfUV9MRVZFTCksIC8qIFg2MC9zICovCisJVFBBQ1BJX1FFQ19MTlYoJzcnLCAnSicsIFRQQUNQSV9WT0xfUV9MRVZFTCksIC8qIFg2MHQgKi8KKwlUUEFDUElfUUVDX0xOVignNycsICc3JywgVFBBQ1BJX1ZPTF9RX0xFVkVMKSwgLyogWjYwICovCisJVFBBQ1BJX1FFQ19MTlYoJzcnLCAnRicsIFRQQUNQSV9WT0xfUV9MRVZFTCksIC8qIFo2MSAqLworCisJLyogV2hpdGVsaXN0IG11dGUtb25seSBvbiBhbGwgTGVub3ZvIGJ5IGRlZmF1bHQgKi8KKwl7IC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0xFTk9WTywKKwkgIC5iaW9zICAgPSBUUEFDUElfTUFUQ0hfQU5ZLAorCSAgLmVjCSAgPSBUUEFDUElfTUFUQ0hfQU5ZLAorCSAgLnF1aXJrcyA9IFRQQUNQSV9WT0xfUV9NVVRFT05MWSB9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB2b2x1bWVfaW5pdChzdHJ1Y3QgaWJtX2luaXRfc3RydWN0ICppaWJtKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzOworCWludCByYzsKKworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImluaXRpYWxpemluZyB2b2x1bWUgc3ViZHJpdmVyXG4iKTsKKworCW11dGV4X2luaXQoJnZvbHVtZV9tdXRleCk7CisKKwkvKgorCSAqIENoZWNrIGZvciBtb2R1bGUgcGFyYW1ldGVyIGJvZ29zaXR5LCBub3RlIHRoYXQgd2UKKwkgKiBpbml0IHZvbHVtZV9tb2RlIHRvIFRQQUNQSV9WT0xfTU9ERV9NQVggaW4gb3JkZXIgdG8gYmUKKwkgKiBhYmxlIHRvIGRldGVjdCAidW5zcGVjaWZpZWQiCisJICovCisJaWYgKHZvbHVtZV9tb2RlID4gVFBBQ1BJX1ZPTF9NT0RFX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodm9sdW1lX21vZGUgPT0gVFBBQ1BJX1ZPTF9NT0RFX1VDTVNfU1RFUCkgeworCQlwcmludGsoVFBBQ1BJX0VSUgorCQkJIlVDTVMgc3RlcCB2b2x1bWUgbW9kZSBub3QgaW1wbGVtZW50ZWQsICIKKwkJCSJwbGVhc2UgY29udGFjdCAlc1xuIiwgVFBBQ1BJX01BSUwpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAodm9sdW1lX2NhcGFiaWxpdGllcyA+PSBUUEFDUElfVk9MX0NBUF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBUaGUgQUxTQSBtaXhlciBpcyBvdXIgcHJpbWFyeSBpbnRlcmZhY2UuCisJICogV2hlbiBkaXNhYmxlZCwgZG9uJ3QgaW5zdGFsbCB0aGUgc3ViZHJpdmVyIGF0IGFsbAorCSAqLworCWlmICghYWxzYV9lbmFibGUpIHsKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19NSVhFUiwKKwkJCSAgICAiQUxTQSBtaXhlciBkaXNhYmxlZCBieSBwYXJhbWV0ZXIsICIKKwkJCSAgICAibm90IGxvYWRpbmcgdm9sdW1lIHN1YmRyaXZlci4uLlxuIik7CisJCXJldHVybiAxOworCX0KKworCXF1aXJrcyA9IHRwYWNwaV9jaGVja19xdWlya3Modm9sdW1lX3F1aXJrX3RhYmxlLAorCQkJCSAgICAgQVJSQVlfU0laRSh2b2x1bWVfcXVpcmtfdGFibGUpKTsKKworCXN3aXRjaCAodm9sdW1lX2NhcGFiaWxpdGllcykgeworCWNhc2UgVFBBQ1BJX1ZPTF9DQVBfQVVUTzoKKwkJaWYgKHF1aXJrcyAmIFRQQUNQSV9WT0xfUV9NVVRFT05MWSkKKwkJCXRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wgPSAxOworCQllbHNlIGlmIChxdWlya3MgJiBUUEFDUElfVk9MX1FfTEVWRUwpCisJCQl0cF9mZWF0dXJlcy5taXhlcl9ub19sZXZlbF9jb250cm9sID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIDE7IC8qIG5vIG1peGVyICovCisJCWJyZWFrOworCWNhc2UgVFBBQ1BJX1ZPTF9DQVBfVk9MTVVURToKKwkJdHBfZmVhdHVyZXMubWl4ZXJfbm9fbGV2ZWxfY29udHJvbCA9IDA7CisJCWJyZWFrOworCWNhc2UgVFBBQ1BJX1ZPTF9DQVBfTVVURU9OTFk6CisJCXRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAodm9sdW1lX2NhcGFiaWxpdGllcyAhPSBUUEFDUElfVk9MX0NBUF9BVVRPKQorCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfTUlYRVIsCisJCQkJInVzaW5nIHVzZXItc3VwcGxpZWQgdm9sdW1lX2NhcGFiaWxpdGllcz0lZFxuIiwKKwkJCQl2b2x1bWVfY2FwYWJpbGl0aWVzKTsKKworCWlmICh2b2x1bWVfbW9kZSA9PSBUUEFDUElfVk9MX01PREVfQVVUTyB8fAorCSAgICB2b2x1bWVfbW9kZSA9PSBUUEFDUElfVk9MX01PREVfTUFYKSB7CisJCXZvbHVtZV9tb2RlID0gVFBBQ1BJX1ZPTF9NT0RFX0VDTlZSQU07CisKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX01JWEVSLAorCQkJCSJkcml2ZXIgYXV0by1zZWxlY3RlZCB2b2x1bWVfbW9kZT0lZFxuIiwKKwkJCQl2b2x1bWVfbW9kZSk7CisJfSBlbHNlIHsKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX01JWEVSLAorCQkJCSJ1c2luZyB1c2VyLXN1cHBsaWVkIHZvbHVtZV9tb2RlPSVkXG4iLAorCQkJCXZvbHVtZV9tb2RlKTsKKwl9CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX01JWEVSLAorCQkJIm11dGUgaXMgc3VwcG9ydGVkLCB2b2x1bWUgY29udHJvbCBpcyAlc1xuIiwKKwkJCXN0cl9zdXBwb3J0ZWQoIXRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wpKTsKKworCXJjID0gdm9sdW1lX2NyZWF0ZV9hbHNhX21peGVyKCk7CisJaWYgKHJjKSB7CisJCXByaW50ayhUUEFDUElfRVJSCisJCQkiQ291bGQgbm90IGNyZWF0ZSB0aGUgQUxTQSBtaXhlciBpbnRlcmZhY2VcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJcHJpbnRrKFRQQUNQSV9JTkZPCisJCSJDb25zb2xlIGF1ZGlvIGNvbnRyb2wgZW5hYmxlZCwgbW9kZTogJXNcbiIsCisJCSh2b2x1bWVfY29udHJvbF9hbGxvd2VkKSA/CisJCQkib3ZlcnJpZGUgKHJlYWQvd3JpdGUpIiA6CisJCQkibW9uaXRvciAocmVhZCBvbmx5KSIpOworCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19NSVhFUiwKKwkJInJlZ2lzdGVyaW5nIHZvbHVtZSBob3RrZXlzIGFzIGNoYW5nZSBub3RpZmljYXRpb25cbiIpOworCXRwYWNwaV9ob3RrZXlfZHJpdmVyX21hc2tfc2V0KGhvdGtleV9kcml2ZXJfbWFzaworCQkJfCBUUF9BQ1BJX0hLRVlfVk9MVVBfTUFTSworCQkJfCBUUF9BQ1BJX0hLRVlfVk9MRFdOX01BU0sKKwkJCXwgVFBfQUNQSV9IS0VZX01VVEVfTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2b2x1bWVfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJdTggc3RhdHVzOworCisJaWYgKHZvbHVtZV9nZXRfc3RhdHVzKCZzdGF0dXMpIDwgMCkgeworCQlzZXFfcHJpbnRmKG0sICJsZXZlbDpcdFx0dW5yZWFkYWJsZVxuIik7CisJfSBlbHNlIHsKKwkJaWYgKHRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wpCisJCQlzZXFfcHJpbnRmKG0sICJsZXZlbDpcdFx0dW5zdXBwb3J0ZWRcbiIpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKG0sICJsZXZlbDpcdFx0JWRcbiIsCisJCQkJCXN0YXR1cyAmIFRQX0VDX0FVRElPX0xWTF9NU0spOworCisJCXNlcV9wcmludGYobSwgIm11dGU6XHRcdCVzXG4iLAorCQkJCW9ub2ZmKHN0YXR1cywgVFBfRUNfQVVESU9fTVVURVNXKSk7CisKKwkJaWYgKHZvbHVtZV9jb250cm9sX2FsbG93ZWQpIHsKKwkJCXNlcV9wcmludGYobSwgImNvbW1hbmRzOlx0dW5tdXRlLCBtdXRlXG4iKTsKKwkJCWlmICghdHBfZmVhdHVyZXMubWl4ZXJfbm9fbGV2ZWxfY29udHJvbCkgeworCQkJCXNlcV9wcmludGYobSwKKwkJCQkJICAgICAgICJjb21tYW5kczpcdHVwLCBkb3duXG4iKTsKKwkJCQlzZXFfcHJpbnRmKG0sCisJCQkJCSAgICAgICAiY29tbWFuZHM6XHRsZXZlbCA8bGV2ZWw+IgorCQkJCQkgICAgICAgIiAoPGxldmVsPiBpcyAwLSVkKVxuIiwKKwkJCQkJICAgICAgIFRQX0VDX1ZPTFVNRV9NQVgpOworCQkJfQogCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdm9sdW1lX3dyaXRlKGNoYXIgKmJ1ZikKK3sKKwl1OCBzOworCXU4IG5ld19sZXZlbCwgbmV3X211dGU7CisJaW50IGw7CisJY2hhciAqY21kOworCWludCByYzsKKworCS8qCisJICogV2UgZG8gYWxsb3cgdm9sdW1lIGNvbnRyb2wgYXQgZHJpdmVyIHN0YXJ0dXAsIHNvIHRoYXQgdGhlCisJICogdXNlciBjYW4gc2V0IGluaXRpYWwgc3RhdGUgdGhyb3VnaCB0aGUgdm9sdW1lPS4uLiBwYXJhbWV0ZXIgaGFjay4KKwkgKi8KKwlpZiAoIXZvbHVtZV9jb250cm9sX2FsbG93ZWQgJiYgdHBhY3BpX2xpZmVjeWNsZSAhPSBUUEFDUElfTElGRV9JTklUKSB7CisJCWlmICh1bmxpa2VseSghdHBfd2FybmVkLnZvbHVtZV9jdHJsX2ZvcmJpZGRlbikpIHsKKwkJCXRwX3dhcm5lZC52b2x1bWVfY3RybF9mb3JiaWRkZW4gPSAxOworCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJCQkiQ29uc29sZSBhdWRpbyBjb250cm9sIGluIG1vbml0b3IgbW9kZSwgIgorCQkJCSJjaGFuZ2VzIGFyZSBub3QgYWxsb3dlZC5cbiIpOworCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJCQkiVXNlIHRoZSB2b2x1bWVfY29udHJvbD0xIG1vZHVsZSBwYXJhbWV0ZXIgIgorCQkJCSJ0byBlbmFibGUgdm9sdW1lIGNvbnRyb2xcbiIpOworCQl9CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmMgPSB2b2x1bWVfZ2V0X3N0YXR1cygmcyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbmV3X2xldmVsID0gcyAmIFRQX0VDX0FVRElPX0xWTF9NU0s7CisJbmV3X211dGUgID0gcyAmIFRQX0VDX0FVRElPX01VVEVTV19NU0s7CisKKwl3aGlsZSAoKGNtZCA9IG5leHRfY21kKCZidWYpKSkgeworCQlpZiAoIXRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wpIHsKKwkJCWlmIChzdHJsZW5jbXAoY21kLCAidXAiKSA9PSAwKSB7CisJCQkJaWYgKG5ld19tdXRlKQorCQkJCQluZXdfbXV0ZSA9IDA7CisJCQkJZWxzZSBpZiAobmV3X2xldmVsIDwgVFBfRUNfVk9MVU1FX01BWCkKKwkJCQkJbmV3X2xldmVsKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJkb3duIikgPT0gMCkgeworCQkJCWlmIChuZXdfbXV0ZSkKKwkJCQkJbmV3X211dGUgPSAwOworCQkJCWVsc2UgaWYgKG5ld19sZXZlbCA+IDApCisJCQkJCW5ld19sZXZlbC0tOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChzc2NhbmYoY21kLCAibGV2ZWwgJXUiLCAmbCkgPT0gMSAmJgorCQkJCSAgIGwgPj0gMCAmJiBsIDw9IFRQX0VDX1ZPTFVNRV9NQVgpIHsKKwkJCQkJbmV3X2xldmVsID0gbDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAoc3RybGVuY21wKGNtZCwgIm11dGUiKSA9PSAwKQorCQkJbmV3X211dGUgPSBUUF9FQ19BVURJT19NVVRFU1dfTVNLOworCQllbHNlIGlmIChzdHJsZW5jbXAoY21kLCAidW5tdXRlIikgPT0gMCkKKwkJCW5ld19tdXRlID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHRwX2ZlYXR1cmVzLm1peGVyX25vX2xldmVsX2NvbnRyb2wpIHsKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgdm9sdW1lIiwgIiVzbXV0ZVxuIiwKKwkJCQkJbmV3X211dGUgPyAiIiA6ICJ1biIpOworCQlyYyA9IHZvbHVtZV9zZXRfbXV0ZSghIW5ld19tdXRlKTsKKwl9IGVsc2UgeworCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyB2b2x1bWUiLAorCQkJCQkiJXNtdXRlIGFuZCBzZXQgbGV2ZWwgdG8gJWRcbiIsCisJCQkJCW5ld19tdXRlID8gIiIgOiAidW4iLCBuZXdfbGV2ZWwpOworCQlyYyA9IHZvbHVtZV9zZXRfc3RhdHVzKG5ld19tdXRlIHwgbmV3X2xldmVsKTsKKwl9CisJdm9sdW1lX2Fsc2Ffbm90aWZ5X2NoYW5nZSgpOworCisJcmV0dXJuIChyYyA9PSAtRUlOVFIpID8gLUVSRVNUQVJUU1lTIDogcmM7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaWJtX3N0cnVjdCB2b2x1bWVfZHJpdmVyX2RhdGEgPSB7CiAJLm5hbWUgPSAidm9sdW1lIiwKIAkucmVhZCA9IHZvbHVtZV9yZWFkLAogCS53cml0ZSA9IHZvbHVtZV93cml0ZSwKKwkuZXhpdCA9IHZvbHVtZV9leGl0LAorCS5zdXNwZW5kID0gdm9sdW1lX3N1c3BlbmQsCisJLnJlc3VtZSA9IHZvbHVtZV9yZXN1bWUsCisJLnNodXRkb3duID0gdm9sdW1lX3NodXRkb3duLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc1MTAsOSArODA5MCw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGZhbl9yZWFkKGNoYXIgKnApCitzdGF0aWMgaW50IGZhbl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlpbnQgbGVuID0gMDsKIAlpbnQgcmM7CiAJdTggc3RhdHVzOwogCXVuc2lnbmVkIGludCBzcGVlZCA9IDA7CkBAIC03NTI0LDcgKzgxMDMsNyBAQAogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdCVzXG4iCisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0JXNcbiIKIAkJCSAgICAgICAibGV2ZWw6XHRcdCVkXG4iLAogCQkJICAgICAgIChzdGF0dXMgIT0gMCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBzdGF0dXMpOwogCQlicmVhazsKQEAgLTc1MzUsNTQgKzgxMTQsNTQgQEAKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHQlc1xuIiwKKwkJc2VxX3ByaW50ZihtLCAic3RhdHVzOlx0XHQlc1xuIiwKIAkJCSAgICAgICAoc3RhdHVzICE9IDApID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAKIAkJcmMgPSBmYW5fZ2V0X3NwZWVkKCZzcGVlZCk7CiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CiAKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInNwZWVkOlx0XHQlZFxuIiwgc3BlZWQpOworCQlzZXFfcHJpbnRmKG0sICJzcGVlZDpcdFx0JWRcbiIsIHNwZWVkKTsKIAogCQlpZiAoc3RhdHVzICYgVFBfRUNfRkFOX0ZVTExTUEVFRCkKIAkJCS8qIERpc2VuZ2FnZWQgbW9kZSB0YWtlcyBwcmVjZWRlbmNlICovCi0JCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibGV2ZWw6XHRcdGRpc2VuZ2FnZWRcbiIpOworCQkJc2VxX3ByaW50ZihtLCAibGV2ZWw6XHRcdGRpc2VuZ2FnZWRcbiIpOwogCQllbHNlIGlmIChzdGF0dXMgJiBUUF9FQ19GQU5fQVVUTykKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0YXV0b1xuIik7CisJCQlzZXFfcHJpbnRmKG0sICJsZXZlbDpcdFx0YXV0b1xuIik7CiAJCWVsc2UKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0JWRcbiIsIHN0YXR1cyk7CisJCQlzZXFfcHJpbnRmKG0sICJsZXZlbDpcdFx0JWRcbiIsIHN0YXR1cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBUUEFDUElfRkFOX05PTkU6CiAJZGVmYXVsdDoKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7CisJCXNlcV9wcmludGYobSwgInN0YXR1czpcdFx0bm90IHN1cHBvcnRlZFxuIik7CiAJfQogCiAJaWYgKGZhbl9jb250cm9sX2NvbW1hbmRzICYgVFBBQ1BJX0ZBTl9DTURfTEVWRUwpIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0bGV2ZWwgPGxldmVsPiIpOworCQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdGxldmVsIDxsZXZlbD4iKTsKIAogCQlzd2l0Y2ggKGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKSB7CiAJCWNhc2UgVFBBQ1BJX0ZBTl9XUl9BQ1BJX1NGQU46Ci0JCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiICg8bGV2ZWw+IGlzIDAtNylcbiIpOworCQkJc2VxX3ByaW50ZihtLCAiICg8bGV2ZWw+IGlzIDAtNylcbiIpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICIgKDxsZXZlbD4gaXMgMC03LCAiCisJCQlzZXFfcHJpbnRmKG0sICIgKDxsZXZlbD4gaXMgMC03LCAiCiAJCQkJICAgICAgICJhdXRvLCBkaXNlbmdhZ2VkLCBmdWxsLXNwZWVkKVxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCWlmIChmYW5fY29udHJvbF9jb21tYW5kcyAmIFRQQUNQSV9GQU5fQ01EX0VOQUJMRSkKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlXG4iCisJCXNlcV9wcmludGYobSwgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlXG4iCiAJCQkgICAgICAgImNvbW1hbmRzOlx0d2F0Y2hkb2cgPHRpbWVvdXQ+ICg8dGltZW91dD4gIgogCQkJICAgICAgICJpcyAwIChvZmYpLCAxLTEyMCAoc2Vjb25kcykpXG4iKTsKIAogCWlmIChmYW5fY29udHJvbF9jb21tYW5kcyAmIFRQQUNQSV9GQU5fQ01EX1NQRUVEKQotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHRzcGVlZCA8c3BlZWQ+IgorCQlzZXFfcHJpbnRmKG0sICJjb21tYW5kczpcdHNwZWVkIDxzcGVlZD4iCiAJCQkgICAgICAgIiAoPHNwZWVkPiBpcyAwLTY1NTM1KVxuIik7CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGZhbl93cml0ZV9jbWRfbGV2ZWwoY29uc3QgY2hhciAqY21kLCBpbnQgKnJjKQpAQCAtNzcyNCwxMCArODMwMywyMyBAQAogICovCiBzdGF0aWMgdm9pZCB0cGFjcGlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBoa2V5X2V2ZW50KQogeworCWlmIChpYm1fYmFja2xpZ2h0X2RldmljZSkgeworCQlzd2l0Y2ggKGhrZXlfZXZlbnQpIHsKKwkJY2FzZSBUUF9IS0VZX0VWX0JSR0hUX1VQOgorCQljYXNlIFRQX0hLRVlfRVZfQlJHSFRfRE9XTjoKKwkJCXRwYWNwaV9icmlnaHRuZXNzX25vdGlmeV9jaGFuZ2UoKTsKKwkJfQorCX0KKwlpZiAoYWxzYV9jYXJkKSB7CisJCXN3aXRjaCAoaGtleV9ldmVudCkgeworCQljYXNlIFRQX0hLRVlfRVZfVk9MX1VQOgorCQljYXNlIFRQX0hLRVlfRVZfVk9MX0RPV046CisJCWNhc2UgVFBfSEtFWV9FVl9WT0xfTVVURToKKwkJCXZvbHVtZV9hbHNhX25vdGlmeV9jaGFuZ2UoKTsKKwkJfQorCX0KIH0KIAotCi0KIHN0YXRpYyB2b2lkIGhvdGtleV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQogewogCXRwYWNwaV9kcml2ZXJfZXZlbnQoVFBfSEtFWV9FVl9IT1RLRVlfQkFTRSArIHNjYW5jb2RlKTsKQEAgLTc4NTYsMTkgKzg0NDgsMTkgQEAKIAkJIiVzIGluc3RhbGxlZFxuIiwgaWJtLT5uYW1lKTsKIAogCWlmIChpYm0tPnJlYWQpIHsKLQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShpYm0tPm5hbWUsCi0JCQkJCSAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAotCQkJCQkgIHByb2NfZGlyKTsKKwkJbW9kZV90IG1vZGU7CisKKwkJbW9kZSA9IFNfSVJVR087CisJCWlmIChpYm0tPndyaXRlKQorCQkJbW9kZSB8PSBTX0lXVVNSOworCQllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoaWJtLT5uYW1lLCBtb2RlLCBwcm9jX2RpciwKKwkJCQkJICZkaXNwYXRjaF9wcm9jX2ZvcHMsIGlibSk7CiAJCWlmICghZW50cnkpIHsKIAkJCXByaW50ayhUUEFDUElfRVJSICJ1bmFibGUgdG8gY3JlYXRlIHByb2MgZW50cnkgJXNcbiIsCiAJCQkgICAgICAgaWJtLT5uYW1lKTsKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJZW50cnktPmRhdGEgPSBpYm07Ci0JCWVudHJ5LT5yZWFkX3Byb2MgPSAmZGlzcGF0Y2hfcHJvY2ZzX3JlYWQ7Ci0JCWlmIChpYm0tPndyaXRlKQotCQkJZW50cnktPndyaXRlX3Byb2MgPSAmZGlzcGF0Y2hfcHJvY2ZzX3dyaXRlOwogCQlpYm0tPmZsYWdzLnByb2NfY3JlYXRlZCA9IDE7CiAJfQogCkBAIC04MDgwLDYgKzg2NzIsNyBAQAogCQkuZGF0YSA9ICZicmlnaHRuZXNzX2RyaXZlcl9kYXRhLAogCX0sCiAJeworCQkuaW5pdCA9IHZvbHVtZV9pbml0LAogCQkuZGF0YSA9ICZ2b2x1bWVfZHJpdmVyX2RhdGEsCiAJfSwKIAl7CkBAIC04MTE1LDM2ICs4NzA4LDU5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLW1vZHVsZV9wYXJhbShleHBlcmltZW50YWwsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZXhwZXJpbWVudGFsLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhleHBlcmltZW50YWwsCiAJCSAiRW5hYmxlcyBleHBlcmltZW50YWwgZmVhdHVyZXMgd2hlbiBub24temVybyIpOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGRiZ19sZXZlbCwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU2V0cyBkZWJ1ZyBsZXZlbCBiaXQtbWFzayIpOwogCi1tb2R1bGVfcGFyYW0oZm9yY2VfbG9hZCwgYm9vbCwgMCk7Cittb2R1bGVfcGFyYW0oZm9yY2VfbG9hZCwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2xvYWQsCiAJCSAiQXR0ZW1wdHMgdG8gbG9hZCB0aGUgZHJpdmVyIGV2ZW4gb24gYSAiCiAJCSAibWlzLWlkZW50aWZpZWQgVGhpbmtQYWQgd2hlbiB0cnVlIik7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChmYW5fY29udHJvbCwgZmFuX2NvbnRyb2xfYWxsb3dlZCwgYm9vbCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZmFuX2NvbnRyb2wsIGZhbl9jb250cm9sX2FsbG93ZWQsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmYW5fY29udHJvbCwKIAkJICJFbmFibGVzIHNldHRpbmcgZmFuIHBhcmFtZXRlcnMgZmVhdHVyZXMgd2hlbiB0cnVlIik7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChicmlnaHRuZXNzX21vZGUsIGJyaWdodG5lc3NfbW9kZSwgdWludCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYnJpZ2h0bmVzc19tb2RlLCBicmlnaHRuZXNzX21vZGUsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzX21vZGUsCiAJCSAiU2VsZWN0cyBicmlnaHRuZXNzIGNvbnRyb2wgc3RyYXRlZ3k6ICIKIAkJICIwPWF1dG8sIDE9RUMsIDI9VUNNUywgMz1FQytOVlJBTSIpOwogCi1tb2R1bGVfcGFyYW0oYnJpZ2h0bmVzc19lbmFibGUsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKGJyaWdodG5lc3NfZW5hYmxlLCB1aW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnJpZ2h0bmVzc19lbmFibGUsCiAJCSAiRW5hYmxlcyBiYWNrbGlnaHQgY29udHJvbCB3aGVuIDEsIGRpc2FibGVzIHdoZW4gMCIpOwogCi1tb2R1bGVfcGFyYW0oaG90a2V5X3JlcG9ydF9tb2RlLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShob3RrZXlfcmVwb3J0X21vZGUsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhob3RrZXlfcmVwb3J0X21vZGUsCiAJCSAidXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UsICIKIAkJICJzZWUgZG9jdW1lbnRhdGlvbiIpOwogCittb2R1bGVfcGFyYW1fbmFtZWQodm9sdW1lX21vZGUsIHZvbHVtZV9tb2RlLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Modm9sdW1lX21vZGUsCisJCSAiU2VsZWN0cyB2b2x1bWUgY29udHJvbCBzdHJhdGVneTogIgorCQkgIjA9YXV0bywgMT1FQywgMj1OL0EsIDM9RUMrTlZSQU0iKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHZvbHVtZV9jYXBhYmlsaXRpZXMsIHZvbHVtZV9jYXBhYmlsaXRpZXMsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh2b2x1bWVfY2FwYWJpbGl0aWVzLAorCQkgIlNlbGVjdHMgdGhlIG1peGVyIGNhcGFiaWxpdGVzOiAiCisJCSAiMD1hdXRvLCAxPXZvbHVtZSBhbmQgbXV0ZSwgMj1tdXRlIG9ubHkiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHZvbHVtZV9jb250cm9sLCB2b2x1bWVfY29udHJvbF9hbGxvd2VkLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Modm9sdW1lX2NvbnRyb2wsCisJCSAiRW5hYmxlcyBzb2Z0d2FyZSBvdmVycmlkZSBmb3IgdGhlIGNvbnNvbGUgYXVkaW8gIgorCQkgImNvbnRyb2wgd2hlbiB0cnVlIik7CisKKy8qIEFMU0EgbW9kdWxlIEFQSSBwYXJhbWV0ZXJzICovCittb2R1bGVfcGFyYW1fbmFtZWQoaW5kZXgsIGFsc2FfaW5kZXgsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiQUxTQSBpbmRleCBmb3IgdGhlIEFDUEkgRUMgTWl4ZXIiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChpZCwgYWxzYV9pZCwgY2hhcnAsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIkFMU0EgaWQgZm9yIHRoZSBBQ1BJIEVDIE1peGVyIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZW5hYmxlLCBhbHNhX2VuYWJsZSwgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSB0aGUgQUxTQSBpbnRlcmZhY2UgZm9yIHRoZSBBQ1BJIEVDIE1peGVyIik7CisKICNkZWZpbmUgVFBBQ1BJX1BBUkFNKGZlYXR1cmUpIFwKIAltb2R1bGVfcGFyYW1fY2FsbChmZWF0dXJlLCBzZXRfaWJtX3BhcmFtLCBOVUxMLCBOVUxMLCAwKTsgXAogCU1PRFVMRV9QQVJNX0RFU0MoZmVhdHVyZSwgIlNpbXVsYXRlcyB0aGlua3BhZC1hY3BpIHByb2NmcyBjb21tYW5kICIgXApAQCAtODE2MywyNSArODc3OSwyNSBAQAogVFBBQ1BJX1BBUkFNKGZhbik7CiAKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9ERUJVR0ZBQ0lMSVRJRVMKLW1vZHVsZV9wYXJhbShkYmdfd2xzd2VtdWwsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKGRiZ193bHN3ZW11bCwgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRiZ193bHN3ZW11bCwgIkVuYWJsZXMgV0xTVyBlbXVsYXRpb24iKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh3bHN3X3N0YXRlLCB0cGFjcGlfd2xzd19lbXVsc3RhdGUsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyh3bHN3X3N0YXRlLAogCQkgIkluaXRpYWwgc3RhdGUgb2YgdGhlIGVtdWxhdGVkIFdMU1cgc3dpdGNoIik7CiAKLW1vZHVsZV9wYXJhbShkYmdfYmx1ZXRvb3RoZW11bCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0oZGJnX2JsdWV0b290aGVtdWwsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkYmdfYmx1ZXRvb3RoZW11bCwgIkVuYWJsZXMgYmx1ZXRvb3RoIHN3aXRjaCBlbXVsYXRpb24iKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChibHVldG9vdGhfc3RhdGUsIHRwYWNwaV9ibHVldG9vdGhfZW11bHN0YXRlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmx1ZXRvb3RoX3N0YXRlLAogCQkgIkluaXRpYWwgc3RhdGUgb2YgdGhlIGVtdWxhdGVkIGJsdWV0b290aCBzd2l0Y2giKTsKIAotbW9kdWxlX3BhcmFtKGRiZ193d2FuZW11bCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0oZGJnX3d3YW5lbXVsLCB1aW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGJnX3d3YW5lbXVsLCAiRW5hYmxlcyBXV0FOIHN3aXRjaCBlbXVsYXRpb24iKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh3d2FuX3N0YXRlLCB0cGFjcGlfd3dhbl9lbXVsc3RhdGUsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyh3d2FuX3N0YXRlLAogCQkgIkluaXRpYWwgc3RhdGUgb2YgdGhlIGVtdWxhdGVkIFdXQU4gc3dpdGNoIik7CiAKLW1vZHVsZV9wYXJhbShkYmdfdXdiZW11bCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0oZGJnX3V3YmVtdWwsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkYmdfdXdiZW11bCwgIkVuYWJsZXMgVVdCIHN3aXRjaCBlbXVsYXRpb24iKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCh1d2Jfc3RhdGUsIHRwYWNwaV91d2JfZW11bHN0YXRlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModXdiX3N0YXRlLApAQCAtODM3NCw2ICs4OTkwLDcgQEAKIAkJCQkJCVBDSV9WRU5ET1JfSURfSUJNOwogCQl0cGFjcGlfaW5wdXRkZXYtPmlkLnByb2R1Y3QgPSBUUEFDUElfSEtFWV9JTlBVVF9QUk9EVUNUOwogCQl0cGFjcGlfaW5wdXRkZXYtPmlkLnZlcnNpb24gPSBUUEFDUElfSEtFWV9JTlBVVF9WRVJTSU9OOworCQl0cGFjcGlfaW5wdXRkZXYtPmRldi5wYXJlbnQgPSAmdHBhY3BpX3BkZXYtPmRldjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWJtc19pbml0KTsgaSsrKSB7CiAJCXJldCA9IGlibV9pbml0KCZpYm1zX2luaXRbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9ibHVldG9vdGguYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYmx1ZXRvb3RoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM1MDQxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYmx1ZXRvb3RoLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBUb3NoaWJhIEJsdWV0b290aCBFbmFibGUgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplcyBTb3JlbnNlbiA8SmVzLlNvcmVuc2VuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGFua3MgdG8gTWF0dGhldyBHYXJyZXR0IGZvciBiYWNrZ3JvdW5kIGluZm8gb24gQUNQSSBpbm5hcmRzIHdoaWNoCisgKiBub3JtYWwgcGVvcGxlIGFyZW4ndCBtZWFudCB0byB1bmRlcnN0YW5kIDotKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTm90ZSB0aGUgVG9zaGliYSBCbHVldG9vdGggUkZLaWxsIHN3aXRjaCBzZWVtcyB0byBiZSBhIHN0cmFuZ2UKKyAqIGZpc2guIEl0IG9ubHkgcHJvdmlkZXMgYSBCVCBldmVudCB3aGVuIHRoZSBzd2l0Y2ggaXMgZmxpcHBlZCB0bworICogdGhlICdvbicgcG9zaXRpb24uIFdoZW4gZmxpcHBpbmcgaXQgdG8gJ29mZicsIHRoZSBVU0IgZGV2aWNlIGlzCisgKiBzaW1wbHkgcHVsbGVkIGF3YXkgdW5kZXJuZWF0aCB1cywgd2l0aG91dCBhbnkgQlQgZXZlbnQgYmVpbmcKKyAqIGRlbGl2ZXJlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisKK01PRFVMRV9BVVRIT1IoIkplcyBTb3JlbnNlbiA8SmVzLlNvcmVuc2VuQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVG9zaGliYSBMYXB0b3AgQUNQSSBCbHVldG9vdGggRW5hYmxlIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKK3N0YXRpYyBpbnQgdG9zaGliYV9idF9yZmtpbGxfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK3N0YXRpYyBpbnQgdG9zaGliYV9idF9yZmtpbGxfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CitzdGF0aWMgdm9pZCB0b3NoaWJhX2J0X3Jma2lsbF9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCk7CitzdGF0aWMgaW50IHRvc2hpYmFfYnRfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBidF9kZXZpY2VfaWRzW10gPSB7CisJeyAiVE9TNjIwNSIsIDB9LAorCXsgIiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgYnRfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgdG9zaGliYV9idF9yZmtpbGxfZHJpdmVyID0geworCS5uYW1lID0JCSJUb3NoaWJhIEJUIiwKKwkuY2xhc3MgPQkiVG9zaGliYSIsCisJLmlkcyA9CQlidF9kZXZpY2VfaWRzLAorCS5vcHMgPQkJeworCQkJCS5hZGQgPQkJdG9zaGliYV9idF9yZmtpbGxfYWRkLAorCQkJCS5yZW1vdmUgPQl0b3NoaWJhX2J0X3Jma2lsbF9yZW1vdmUsCisJCQkJLm5vdGlmeSA9CXRvc2hpYmFfYnRfcmZraWxsX25vdGlmeSwKKwkJCQkucmVzdW1lID0JdG9zaGliYV9idF9yZXN1bWUsCisJCQl9LAorCS5vd25lciA9IAlUSElTX01PRFVMRSwKK307CisKKworc3RhdGljIGludCB0b3NoaWJhX2JsdWV0b290aF9lbmFibGUoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCWFjcGlfc3RhdHVzIHJlczEsIHJlczI7CisJYWNwaV9pbnRlZ2VyIHJlc3VsdDsKKworCS8qCisJICogUXVlcnkgQUNQSSB0byB2ZXJpZnkgUkZLaWxsIHN3aXRjaCBpcyBzZXQgdG8gJ29uJy4KKwkgKiBJZiBub3QsIHdlIHJldHVybiBzaWxlbnRseSwgbm8gbmVlZCB0byByZXBvcnQgaXQgYXMKKwkgKiBhbiBlcnJvci4KKwkgKi8KKwlyZXMxID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIkJUU1QiLCBOVUxMLCAmcmVzdWx0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHJlczEpKQorCQlyZXR1cm4gcmVzMTsKKwlpZiAoIShyZXN1bHQgJiAweDAxKSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJ0b3NoaWJhX2JsdWV0b290aDogUmUtZW5hYmxpbmcgVG9zaGliYSBCbHVldG9vdGhcbiIpOworCXJlczEgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJBVVNCIiwgTlVMTCwgTlVMTCk7CisJcmVzMiA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkJUUE8iLCBOVUxMLCBOVUxMKTsKKwlpZiAoIUFDUElfRkFJTFVSRShyZXMxKSB8fCAhQUNQSV9GQUlMVVJFKHJlczIpKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgInRvc2hpYmFfYmx1ZXRvb3RoOiBGYWlsZWQgdG8gcmUtZW5hYmxlICIKKwkgICAgICAgIlRvc2hpYmEgQmx1ZXRvb3RoXG4iKTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCB0b3NoaWJhX2J0X3Jma2lsbF9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKK3sKKwl0b3NoaWJhX2JsdWV0b290aF9lbmFibGUoZGV2aWNlLT5oYW5kbGUpOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYnRfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCXJldHVybiB0b3NoaWJhX2JsdWV0b290aF9lbmFibGUoZGV2aWNlLT5oYW5kbGUpOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYnRfcmZraWxsX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9pbnRlZ2VyIGJ0X3ByZXNlbnQ7CisJaW50IHJlc3VsdCA9IC1FTk9ERVY7CisKKwkvKgorCSAqIFNvbWUgVG9zaGliYSBsYXB0b3BzIG1heSBoYXZlIGEgZmFrZSBUT1M2MjA1IGRldmljZSBpbgorCSAqIHRoZWlyIEFDUEkgQklPUywgc28gcXVlcnkgdGhlIF9TVEEgbWV0aG9kIHRvIHNlZSBpZiB0aGVyZQorCSAqIGlzIHJlYWxseSBhbnl0aGluZyB0aGVyZSwgYmVmb3JlIHRyeWluZyB0byBlbmFibGUgaXQuCisJICovCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsCisJCQkJICAgICAgICZidF9wcmVzZW50KTsKKworCWlmICghQUNQSV9GQUlMVVJFKHN0YXR1cykgJiYgYnRfcHJlc2VudCkgeworCQlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCBUb3NoaWJhIEFDUEkgQmx1ZXRvb3RoIGRldmljZSAtICIKKwkJICAgICAgImluc3RhbGxpbmcgUkZLaWxsIGhhbmRsZXJcbiIpOworCQlyZXN1bHQgPSB0b3NoaWJhX2JsdWV0b290aF9lbmFibGUoZGV2aWNlLT5oYW5kbGUpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRvc2hpYmFfYnRfcmZraWxsX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZ0b3NoaWJhX2J0X3Jma2lsbF9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICAiRXJyb3IgcmVnaXN0ZXJpbmcgZHJpdmVyXG4iKSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9idF9yZmtpbGxfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKK3sKKwkvKiBjbGVhbiB1cCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG9zaGliYV9idF9yZmtpbGxfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZ0b3NoaWJhX2J0X3Jma2lsbF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3NoaWJhX2J0X3Jma2lsbF9pbml0KTsKK21vZHVsZV9leGl0KHRvc2hpYmFfYnRfcmZraWxsX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwppbmRleCAxNzdmOGQ3Li5lNDI1YTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni93bWkuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgpAQCAtNjUsNiArNjYsNyBAQAogCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAl3bWlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlcjsKIAl2b2lkICpoYW5kbGVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2OwogfTsKIAogc3RhdGljIHN0cnVjdCB3bWlfYmxvY2sgd21pX2Jsb2NrczsKQEAgLTE5NSw2ICsxOTcsMzQgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIENvbnZlcnQgYSByYXcgR1VJRCB0byB0aGUgQUNJSSBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAqLworc3RhdGljIGludCB3bWlfZ3RvYShjb25zdCBjaGFyICppbiwgY2hhciAqb3V0KQoreworCWludCBpOworCisJZm9yIChpID0gMzsgaSA+PSAwOyBpLS0pCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwMlgiLCBpbltpXSAmIDB4RkYpOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiLSIpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiUwMlgiLCBpbls1XSAmIDB4RkYpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiUwMlgiLCBpbls0XSAmIDB4RkYpOworCW91dCArPSBzcHJpbnRmKG91dCwgIi0iKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlMDJYIiwgaW5bN10gJiAweEZGKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlMDJYIiwgaW5bNl0gJiAweEZGKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICItIik7CisJb3V0ICs9IHNwcmludGYob3V0LCAiJTAyWCIsIGluWzhdICYgMHhGRik7CisJb3V0ICs9IHNwcmludGYob3V0LCAiJTAyWCIsIGluWzldICYgMHhGRik7CisJb3V0ICs9IHNwcmludGYob3V0LCAiLSIpOworCisJZm9yIChpID0gMTA7IGkgPD0gMTU7IGkrKykKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJTAyWCIsIGluW2ldICYgMHhGRik7CisKKwlvdXQgPSAnXDAnOworCXJldHVybiAwOworfQorCiBzdGF0aWMgYm9vbCBmaW5kX2d1aWQoY29uc3QgY2hhciAqZ3VpZF9zdHJpbmcsIHN0cnVjdCB3bWlfYmxvY2sgKipvdXQpCiB7CiAJY2hhciB0bXBbMTZdLCBndWlkX2lucHV0WzE2XTsKQEAgLTU1NSw2ICs1ODUsMTM4IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh3bWlfaGFzX2d1aWQpOwogCiAvKgorICogc3lzZnMgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfbW9kYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCWNoYXIgZ3VpZF9zdHJpbmdbMzddOworCXN0cnVjdCB3bWlfYmxvY2sgKndibG9jazsKKworCXdibG9jayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghd2Jsb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdtaV9ndG9hKHdibG9jay0+Z2Jsb2NrLmd1aWQsIGd1aWRfc3RyaW5nKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIndtaTolc1xuIiwgZ3VpZF9zdHJpbmcpOworfQorc3RhdGljIERFVklDRV9BVFRSKG1vZGFsaWFzLCBTX0lSVUdPLCBzaG93X21vZGFsaWFzLCBOVUxMKTsKKworc3RhdGljIGludCB3bWlfZGV2X3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwljaGFyIGd1aWRfc3RyaW5nWzM3XTsKKworCXN0cnVjdCB3bWlfYmxvY2sgKndibG9jazsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz0iKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3YmxvY2sgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIXdibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3bWlfZ3RvYSh3YmxvY2stPmdibG9jay5ndWlkLCBndWlkX3N0cmluZyk7CisKKwlzdHJjcHkoJmVudi0+YnVmW2Vudi0+YnVmbGVuIC0gMV0sICJ3bWk6Iik7CisJbWVtY3B5KCZlbnYtPmJ1ZltlbnYtPmJ1ZmxlbiAtIDEgKyA0XSwgZ3VpZF9zdHJpbmcsIDM2KTsKKwllbnYtPmJ1ZmxlbiArPSA0MDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bWlfZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3Mgd21pX2NsYXNzID0geworCS5uYW1lID0gIndtaSIsCisJLmRldl9yZWxlYXNlID0gd21pX2Rldl9mcmVlLAorCS5kZXZfdWV2ZW50ID0gd21pX2Rldl91ZXZlbnQsCit9OworCitzdGF0aWMgaW50IHdtaV9jcmVhdGVfZGV2cyh2b2lkKQoreworCWludCByZXN1bHQ7CisJY2hhciBndWlkX3N0cmluZ1szN107CisJc3RydWN0IGd1aWRfYmxvY2sgKmdibG9jazsKKwlzdHJ1Y3Qgd21pX2Jsb2NrICp3YmxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgZGV2aWNlICpndWlkX2RldjsKKworCS8qIENyZWF0ZSBkZXZpY2VzIGZvciBhbGwgdGhlIEdVSURzICovCisJbGlzdF9mb3JfZWFjaChwLCAmd21pX2Jsb2Nrcy5saXN0KSB7CisJCXdibG9jayA9IGxpc3RfZW50cnkocCwgc3RydWN0IHdtaV9ibG9jaywgbGlzdCk7CisKKwkJZ3VpZF9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZ3VpZF9kZXYpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl3YmxvY2stPmRldiA9IGd1aWRfZGV2OworCisJCWd1aWRfZGV2LT5jbGFzcyA9ICZ3bWlfY2xhc3M7CisJCWRldl9zZXRfZHJ2ZGF0YShndWlkX2Rldiwgd2Jsb2NrKTsKKworCQlnYmxvY2sgPSAmd2Jsb2NrLT5nYmxvY2s7CisKKwkJd21pX2d0b2EoZ2Jsb2NrLT5ndWlkLCBndWlkX3N0cmluZyk7CisJCWRldl9zZXRfbmFtZShndWlkX2RldiwgZ3VpZF9zdHJpbmcpOworCisJCXJlc3VsdCA9IGRldmljZV9yZWdpc3RlcihndWlkX2Rldik7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCisJCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZShndWlkX2RldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtaV9yZW1vdmVfZGV2cyh2b2lkKQoreworCXN0cnVjdCBndWlkX2Jsb2NrICpnYmxvY2s7CisJc3RydWN0IHdtaV9ibG9jayAqd2Jsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGRldmljZSAqZ3VpZF9kZXY7CisKKwkvKiBEZWxldGUgZGV2aWNlcyBmb3IgYWxsIHRoZSBHVUlEcyAqLworCWxpc3RfZm9yX2VhY2gocCwgJndtaV9ibG9ja3MubGlzdCkgeworCQl3YmxvY2sgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCB3bWlfYmxvY2ssIGxpc3QpOworCisJCWd1aWRfZGV2ID0gd2Jsb2NrLT5kZXY7CisJCWdibG9jayA9ICZ3YmxvY2stPmdibG9jazsKKworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZ3VpZF9kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7CisKKwkJZGV2aWNlX3VucmVnaXN0ZXIoZ3VpZF9kZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgd21pX2NsYXNzX2V4aXQodm9pZCkKK3sKKwl3bWlfcmVtb3ZlX2RldnMoKTsKKwljbGFzc191bnJlZ2lzdGVyKCZ3bWlfY2xhc3MpOworfQorCitzdGF0aWMgaW50IHdtaV9jbGFzc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsYXNzX3JlZ2lzdGVyKCZ3bWlfY2xhc3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bWlfY3JlYXRlX2RldnMoKTsKKwlpZiAocmV0KQorCQl3bWlfY2xhc3NfZXhpdCgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIFBhcnNlIHRoZSBfV0RHIG1ldGhvZCBmb3IgdGhlIEdVSUQgZGF0YSBibG9ja3MKICAqLwogc3RhdGljIF9faW5pdCBhY3BpX3N0YXR1cyBwYXJzZV93ZGcoYWNwaV9oYW5kbGUgaGFuZGxlKQpAQCAtNzA5LDEwICs4NzEsMTcgQEAKIAogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJFcnJvciBsb2FkaW5nIG1hcHBlclxuIik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIk1hcHBlciBsb2FkZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlyZXN1bHQgPSB3bWlfY2xhc3NfaW5pdCgpOworCWlmIChyZXN1bHQpIHsKKwkJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfd21pX2RyaXZlcik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIk1hcHBlciBsb2FkZWRcbiIpOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzIxLDYgKzg5MCw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnRtcDsKIAlzdHJ1Y3Qgd21pX2Jsb2NrICp3YmxvY2s7CiAKKwl3bWlfY2xhc3NfZXhpdCgpOworCiAJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfd21pX2RyaXZlcik7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgdG1wLCAmd21pX2Jsb2Nrcy5saXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCmluZGV4IGMzZjFjOGUuLjY4YjBjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCkBAIC0zMTAsOCArMzEwLDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXdoaWxlIChpc3NwYWNlKCpidWYpKQotCQkrK2J1ZjsKKwlidWYgPSBza2lwX3NwYWNlcyhidWYpOwogCWlmICghc3RybmljbXAoYnVmLCAiZGlzYWJsZSIsIDcpKSB7CiAJCXJldHZhbCA9IHBucF9kaXNhYmxlX2RldihkZXYpOwogCQlnb3RvIGRvbmU7CkBAIC0zNTMsMTkgKzM1MiwxMyBAQAogCQlwbnBfaW5pdF9yZXNvdXJjZXMoZGV2KTsKIAkJbXV0ZXhfbG9jaygmcG5wX3Jlc19tdXRleCk7CiAJCXdoaWxlICgxKSB7Ci0JCQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKLQkJCQkrK2J1ZjsKKwkJCWJ1ZiA9IHNraXBfc3BhY2VzKGJ1Zik7CiAJCQlpZiAoIXN0cm5pY21wKGJ1ZiwgImlvIiwgMikpIHsKLQkJCQlidWYgKz0gMjsKLQkJCQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKLQkJCQkJKytidWY7CisJCQkJYnVmID0gc2tpcF9zcGFjZXMoYnVmICsgMik7CiAJCQkJc3RhcnQgPSBzaW1wbGVfc3RydG91bChidWYsICZidWYsIDApOwotCQkJCXdoaWxlIChpc3NwYWNlKCpidWYpKQotCQkJCQkrK2J1ZjsKKwkJCQlidWYgPSBza2lwX3NwYWNlcyhidWYpOwogCQkJCWlmICgqYnVmID09ICctJykgewotCQkJCQlidWYgKz0gMTsKLQkJCQkJd2hpbGUgKGlzc3BhY2UoKmJ1ZikpCi0JCQkJCQkrK2J1ZjsKKwkJCQkJYnVmID0gc2tpcF9zcGFjZXMoYnVmICsgMSk7CiAJCQkJCWVuZCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmJ1ZiwgMCk7CiAJCQkJfSBlbHNlCiAJCQkJCWVuZCA9IHN0YXJ0OwpAQCAtMzczLDE2ICszNjYsMTEgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RybmljbXAoYnVmLCAibWVtIiwgMykpIHsKLQkJCQlidWYgKz0gMzsKLQkJCQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKLQkJCQkJKytidWY7CisJCQkJYnVmID0gc2tpcF9zcGFjZXMoYnVmICsgMyk7CiAJCQkJc3RhcnQgPSBzaW1wbGVfc3RydG91bChidWYsICZidWYsIDApOwotCQkJCXdoaWxlIChpc3NwYWNlKCpidWYpKQotCQkJCQkrK2J1ZjsKKwkJCQlidWYgPSBza2lwX3NwYWNlcyhidWYpOwogCQkJCWlmICgqYnVmID09ICctJykgewotCQkJCQlidWYgKz0gMTsKLQkJCQkJd2hpbGUgKGlzc3BhY2UoKmJ1ZikpCi0JCQkJCQkrK2J1ZjsKKwkJCQkJYnVmID0gc2tpcF9zcGFjZXMoYnVmICsgMSk7CiAJCQkJCWVuZCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmJ1ZiwgMCk7CiAJCQkJfSBlbHNlCiAJCQkJCWVuZCA9IHN0YXJ0OwpAQCAtMzkwLDE3ICszNzgsMTMgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RybmljbXAoYnVmLCAiaXJxIiwgMykpIHsKLQkJCQlidWYgKz0gMzsKLQkJCQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKLQkJCQkJKytidWY7CisJCQkJYnVmID0gc2tpcF9zcGFjZXMoYnVmICsgMyk7CiAJCQkJc3RhcnQgPSBzaW1wbGVfc3RydG91bChidWYsICZidWYsIDApOwogCQkJCXBucF9hZGRfaXJxX3Jlc291cmNlKGRldiwgc3RhcnQsIDApOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJuaWNtcChidWYsICJkbWEiLCAzKSkgewotCQkJCWJ1ZiArPSAzOwotCQkJCXdoaWxlIChpc3NwYWNlKCpidWYpKQotCQkJCQkrK2J1ZjsKKwkJCQlidWYgPSBza2lwX3NwYWNlcyhidWYgKyAzKTsKIAkJCQlzdGFydCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmJ1ZiwgMCk7CiAJCQkJcG5wX2FkZF9kbWFfcmVzb3VyY2UoZGV2LCBzdGFydCwgMCk7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IDgzYjhiNWEuLjUzMTRiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCkBAIC04MCw3ICs4MCw4IEBACiAKIHN0YXRpYyBpbnQgcG5wYWNwaV9zZXRfcmVzb3VyY2VzKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlID0gZGV2LT5kYXRhOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSBkZXYtPmRhdGE7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gYWNwaV9kZXYtPmhhbmRsZTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyOwogCWludCByZXQ7CiAKQEAgLTEwMyw3ICsxMDQsOCBAQAogCiBzdGF0aWMgaW50IHBucGFjcGlfZGlzYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBucF9kZXYgKmRldikKIHsKLQlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkZXYtPmRhdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IGRldi0+ZGF0YTsKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBhY3BpX2Rldi0+aGFuZGxlOwogCWludCByZXQ7CiAKIAlkZXZfZGJnKCZkZXYtPmRldiwgImRpc2FibGUgcmVzb3VyY2VzXG4iKTsKQEAgLTEyMSw2ICsxMjMsOCBAQAogI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCiBzdGF0aWMgaW50IHBucGFjcGlfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldiA9IGRldi0+ZGF0YTsKKwlhY3BpX2hhbmRsZSBoYW5kbGUgPSBhY3BpX2Rldi0+aGFuZGxlOwogCWludCBwb3dlcl9zdGF0ZTsKIAogCXBvd2VyX3N0YXRlID0gYWNwaV9wbV9kZXZpY2Vfc2xlZXBfc3RhdGUoJmRldi0+ZGV2LCBOVUxMKTsKQEAgLTEyOCwxNiArMTMyLDE5IEBACiAJCXBvd2VyX3N0YXRlID0gKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OKSA/CiAJCQkJQUNQSV9TVEFURV9EMCA6IEFDUElfU1RBVEVfRDM7CiAKLQlyZXR1cm4gYWNwaV9idXNfc2V0X3Bvd2VyKChhY3BpX2hhbmRsZSkgZGV2LT5kYXRhLCBwb3dlcl9zdGF0ZSk7CisJcmV0dXJuIGFjcGlfYnVzX3NldF9wb3dlcihoYW5kbGUsIHBvd2VyX3N0YXRlKTsKIH0KIAogc3RhdGljIGludCBwbnBhY3BpX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewotCXJldHVybiBhY3BpX2J1c19zZXRfcG93ZXIoKGFjcGlfaGFuZGxlKSBkZXYtPmRhdGEsIEFDUElfU1RBVEVfRDApOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSBkZXYtPmRhdGE7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gYWNwaV9kZXYtPmhhbmRsZTsKKworCXJldHVybiBhY3BpX2J1c19zZXRfcG93ZXIoaGFuZGxlLCBBQ1BJX1NUQVRFX0QwKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBucF9wcm90b2NvbCBwbnBhY3BpX3Byb3RvY29sID0geworc3RydWN0IHBucF9wcm90b2NvbCBwbnBhY3BpX3Byb3RvY29sID0gewogCS5uYW1lCSA9ICJQbHVnIGFuZCBQbGF5IEFDUEkiLAogCS5nZXQJID0gcG5wYWNwaV9nZXRfcmVzb3VyY2VzLAogCS5zZXQJID0gcG5wYWNwaV9zZXRfcmVzb3VyY2VzLApAQCAtMTQ3LDYgKzE1NCw3IEBACiAJLnJlc3VtZSA9IHBucGFjcGlfcmVzdW1lLAogI2VuZGlmCiB9OworRVhQT1JUX1NZTUJPTChwbnBhY3BpX3Byb3RvY29sKTsKIAogc3RhdGljIGludCBfX2luaXQgcG5wYWNwaV9hZGRfZGV2aWNlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewpAQCAtMTY4LDcgKzE3Niw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2LT5kYXRhID0gZGV2aWNlLT5oYW5kbGU7CisJZGV2LT5kYXRhID0gZGV2aWNlOwogCS8qIC5lbmFibGVkIG1lYW5zIHRoZSBkZXZpY2UgY2FuIGRlY29kZSB0aGUgcmVzb3VyY2VzICovCiAJZGV2LT5hY3RpdmUgPSBkZXZpY2UtPnN0YXR1cy5lbmFibGVkOwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9TUlMiLCAmdGVtcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKaW5kZXggZWYzYTJjZDNhLi41NzAyYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCkBAIC00NjUsNyArNDY1LDggQEAKIAogaW50IHBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX3Jlc291cmNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlID0gZGV2LT5kYXRhOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSBkZXYtPmRhdGE7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gYWNwaV9kZXYtPmhhbmRsZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlwbnBfZGJnKCZkZXYtPmRldiwgInBhcnNlIGFsbG9jYXRlZCByZXNvdXJjZXNcbiIpOwpAQCAtNzczLDcgKzc3NCw4IEBACiAKIGludCBfX2luaXQgcG5wYWNwaV9wYXJzZV9yZXNvdXJjZV9vcHRpb25fZGF0YShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewotCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRldi0+ZGF0YTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gZGV2LT5kYXRhOworCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGFjcGlfZGV2LT5oYW5kbGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpcG5wX3BhcnNlX29wdGlvbl9zIHBhcnNlX2RhdGE7CiAKQEAgLTg0NSw3ICs4NDcsOCBAQAogaW50IHBucGFjcGlfYnVpbGRfcmVzb3VyY2VfdGVtcGxhdGUoc3RydWN0IHBucF9kZXYgKmRldiwKIAkJCQkgICAgc3RydWN0IGFjcGlfYnVmZmVyICpidWZmZXIpCiB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlID0gZGV2LT5kYXRhOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSBkZXYtPmRhdGE7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gYWNwaV9kZXYtPmhhbmRsZTsKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2U7CiAJaW50IHJlc19jbnQgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcHJvYy5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9wcm9jLmMKaW5kZXggYjM1ZDkyMS4uMmQ4YWM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9wcm9jLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9wcm9jLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zMyw0MiArMzQsNjUgQEAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfcG5wID0gTlVMTDsKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfcG5wX2Jvb3QgPSBOVUxMOwogCi1zdGF0aWMgaW50IHByb2NfcmVhZF9wbnBjb25maWcoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywKLQkJCSAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwbnBjb25maWdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgcG5wX2lzYV9jb25maWdfc3RydWMgcG5wczsKIAogCWlmIChwbnBfYmlvc19pc2FwbnBfY29uZmlnKCZwbnBzKSkKIAkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgY291bnQsCi0JCQkic3RydWN0dXJlX3JldmlzaW9uICVkXG4iCi0JCQkibnVtYmVyX29mX0NTTnMgJWRcbiIKLQkJCSJJU0FfcmVhZF9kYXRhX3BvcnQgMHgleFxuIiwKLQkJCXBucHMucmV2aXNpb24sIHBucHMubm9fY3NucywgcG5wcy5pc2FfcmRfZGF0YV9wb3J0KTsKKwlzZXFfcHJpbnRmKG0sICJzdHJ1Y3R1cmVfcmV2aXNpb24gJWRcbiIKKwkJICAgICAgIm51bWJlcl9vZl9DU05zICVkXG4iCisJCSAgICAgICJJU0FfcmVhZF9kYXRhX3BvcnQgMHgleFxuIiwKKwkJICAgcG5wcy5yZXZpc2lvbiwgcG5wcy5ub19jc25zLCBwbnBzLmlzYV9yZF9kYXRhX3BvcnQpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByb2NfcmVhZF9lc2NkaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLAotCQkJICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcG5wY29uZmlnX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG5wY29uZmlnX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBucGNvbmZpZ19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBucGNvbmZpZ19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZXNjZF9pbmZvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IGVzY2RfaW5mb19zdHJ1YyBlc2NkOwogCiAJaWYgKHBucF9iaW9zX2VzY2RfaW5mbygmZXNjZCkpCiAJCXJldHVybiAtRUlPOwotCXJldHVybiBzbnByaW50ZihidWYsIGNvdW50LAotCQkJIm1pbl9FU0NEX3dyaXRlX3NpemUgJWRcbiIKKwlzZXFfcHJpbnRmKG0sICJtaW5fRVNDRF93cml0ZV9zaXplICVkXG4iCiAJCQkiRVNDRF9zaXplICVkXG4iCiAJCQkiTlZSQU1fYmFzZSAweCV4XG4iLAogCQkJZXNjZC5taW5fZXNjZF93cml0ZV9zaXplLAogCQkJZXNjZC5lc2NkX3NpemUsIGVzY2QubnZfc3RvcmFnZV9iYXNlKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBlc2NkX2luZm9fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBlc2NkX2luZm9fcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXNjZF9pbmZvX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZXNjZF9pbmZvX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogI2RlZmluZSBNQVhfU0FORV9FU0NEX1NJWkUgKDMyKjEwMjQpCi1zdGF0aWMgaW50IHByb2NfcmVhZF9lc2NkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBwb3MsCi0JCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGVzY2RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgZXNjZF9pbmZvX3N0cnVjIGVzY2Q7CiAJY2hhciAqdG1wYnVmOwotCWludCBlc2NkX3NpemUsIGVzY2RfbGVmdF90b19yZWFkLCBuOworCWludCBlc2NkX3NpemU7CiAKIAlpZiAocG5wX2Jpb3NfZXNjZF9pbmZvKCZlc2NkKSkKIAkJcmV0dXJuIC1FSU87CkBAIC03Niw3ICsxMDAsNyBAQAogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChlc2NkLmVzY2Rfc2l6ZSA+IE1BWF9TQU5FX0VTQ0RfU0laRSkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJQblBCSU9TOiBwcm9jX3JlYWRfZXNjZDogRVNDRCBzaXplIHJlcG9ydGVkIGJ5IEJJT1MgZXNjZF9pbmZvIGNhbGwgaXMgdG9vIGdyZWF0XG4iKTsKKwkJICAgICAgICJQblBCSU9TOiAlczogRVNDRCBzaXplIHJlcG9ydGVkIGJ5IEJJT1MgZXNjZF9pbmZvIGNhbGwgaXMgdG9vIGdyZWF0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUZCSUc7CiAJfQogCkBAIC05NCw1NiArMTE4LDc1IEBACiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KIAlpZiAoZXNjZF9zaXplID4gTUFYX1NBTkVfRVNDRF9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUG5QQklPUzogcHJvY19yZWFkX2VzY2Q6IEVTQ0Qgc2l6ZSByZXBvcnRlZCBieSIKLQkJCQkiIEJJT1MgcmVhZF9lc2NkIGNhbGwgaXMgdG9vIGdyZWF0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQblBCSU9TOiAlczogRVNDRCBzaXplIHJlcG9ydGVkIGJ5IgorCQkJCSIgQklPUyByZWFkX2VzY2QgY2FsbCBpcyB0b28gZ3JlYXRcbiIsIF9fZnVuY19fKTsKIAkJa2ZyZWUodG1wYnVmKTsKIAkJcmV0dXJuIC1FRkJJRzsKIAl9CiAKLQllc2NkX2xlZnRfdG9fcmVhZCA9IGVzY2Rfc2l6ZSAtIHBvczsKLQlpZiAoZXNjZF9sZWZ0X3RvX3JlYWQgPCAwKQotCQllc2NkX2xlZnRfdG9fcmVhZCA9IDA7Ci0JaWYgKGVzY2RfbGVmdF90b19yZWFkID09IDApCi0JCSplb2YgPSAxOwotCW4gPSBtaW4oY291bnQsIGVzY2RfbGVmdF90b19yZWFkKTsKLQltZW1jcHkoYnVmLCB0bXBidWYgKyBwb3MsIG4pOworCXNlcV93cml0ZShtLCB0bXBidWYsIGVzY2Rfc2l6ZSk7CiAJa2ZyZWUodG1wYnVmKTsKLQkqc3RhcnQgPSBidWY7Ci0JcmV0dXJuIG47CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19yZWFkX2xlZ2FjeXJlcyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLAotCQkJICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGVzY2RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCS8qIEFzc3VtZSB0aGF0IHRoZSBmb2xsb3dpbmcgd29uJ3Qgb3ZlcmZsb3cgdGhlIGJ1ZmZlciAqLwotCWlmIChwbnBfYmlvc19nZXRfc3RhdF9yZXMoYnVmKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gY291bnQ7CQkvLyBGSVhNRTogUmV0dXJuIGFjdHVhbCBsZW5ndGgKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZXNjZF9wcm9jX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHByb2NfcmVhZF9kZXZpY2VzKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBwb3MsCi0JCQkgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlc2NkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZXNjZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcG5wX2xlZ2FjeXJlc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXZvaWQgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MoNjU1MzYsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocG5wX2Jpb3NfZ2V0X3N0YXRfcmVzKGJ1ZikpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2VxX3dyaXRlKG0sIGJ1ZiwgNjU1MzYpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG5wX2xlZ2FjeXJlc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHBucF9sZWdhY3lyZXNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG5wX2xlZ2FjeXJlc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBucF9sZWdhY3lyZXNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHBucF9kZXZpY2VzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHBucF9iaW9zX25vZGUgKm5vZGU7CiAJdTggbm9kZW51bTsKLQljaGFyICpwID0gYnVmOwotCi0JaWYgKHBvcyA+PSAweGZmKQotCQlyZXR1cm4gMDsKIAogCW5vZGUgPSBremFsbG9jKG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChub2RlbnVtID0gcG9zOyBub2RlbnVtIDwgMHhmZjspIHsKKwlmb3IgKG5vZGVudW0gPSAwOyBub2RlbnVtIDwgMHhmZjspIHsKIAkJdTggdGhpc25vZGVudW0gPSBub2RlbnVtOwotCQkvKiAyNiA9IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSBzcHJpbnRmJ2VkICovCi0JCWlmICgocCAtIGJ1ZiArIDI2KSA+IGNvdW50KQotCQkJYnJlYWs7CisKIAkJaWYgKHBucF9iaW9zX2dldF9kZXZfbm9kZSgmbm9kZW51bSwgUE5QTU9ERV9EWU5BTUlDLCBub2RlKSkKIAkJCWJyZWFrOwotCQlwICs9IHNwcmludGYocCwgIiUwMnhcdCUwOHhcdCUwMng6JTAyeDolMDJ4XHQlMDR4XG4iLAorCQlzZXFfcHJpbnRmKG0sICIlMDJ4XHQlMDh4XHQlMDJ4OiUwMng6JTAyeFx0JTA0eFxuIiwKIAkJCSAgICAgbm9kZS0+aGFuZGxlLCBub2RlLT5laXNhX2lkLAogCQkJICAgICBub2RlLT50eXBlX2NvZGVbMF0sIG5vZGUtPnR5cGVfY29kZVsxXSwKIAkJCSAgICAgbm9kZS0+dHlwZV9jb2RlWzJdLCBub2RlLT5mbGFncyk7CkBAIC0xNTMsMjAgKzE5NiwyOSBAQAogCQkJICAgICAgICJQblBCSU9TOiBwcm9jX3JlYWRfZGV2aWNlczoiLAogCQkJICAgICAgICh1bnNpZ25lZCBpbnQpbm9kZW51bSwKIAkJCSAgICAgICAodW5zaWduZWQgaW50KXRoaXNub2RlbnVtKTsKLQkJCSplb2YgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJa2ZyZWUobm9kZSk7Ci0JaWYgKG5vZGVudW0gPT0gMHhmZikKLQkJKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gKGNoYXIgKikoKG9mZl90KSBub2RlbnVtIC0gcG9zKTsKLQlyZXR1cm4gcCAtIGJ1ZjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX3JlYWRfbm9kZShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgcG9zLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwbnBfZGV2aWNlc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHBucF9kZXZpY2VzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBucF9kZXZpY2VzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG5wX2RldmljZXNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHBucGJpb3NfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwl2b2lkICpkYXRhID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgcG5wX2Jpb3Nfbm9kZSAqbm9kZTsKIAlpbnQgYm9vdCA9IChsb25nKWRhdGEgPj4gODsKIAl1OCBub2RlbnVtID0gKGxvbmcpZGF0YTsKQEAgLTE4MCwxNCArMjMyLDIwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlsZW4gPSBub2RlLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBwbnBfYmlvc19ub2RlKTsKLQltZW1jcHkoYnVmLCBub2RlLT5kYXRhLCBsZW4pOworCXNlcV93cml0ZShtLCBub2RlLT5kYXRhLCBsZW4pOwogCWtmcmVlKG5vZGUpOwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY193cml0ZV9ub2RlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHBucGJpb3NfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwbnBiaW9zX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBucGJpb3NfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJdm9pZCAqZGF0YSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAlzdHJ1Y3QgcG5wX2Jpb3Nfbm9kZSAqbm9kZTsKIAlpbnQgYm9vdCA9IChsb25nKWRhdGEgPj4gODsKIAl1OCBub2RlbnVtID0gKGxvbmcpZGF0YTsKQEAgLTIxOCwzNCArMjc2LDMzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG5wYmlvc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBucGJpb3NfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHBucGJpb3NfcHJvY193cml0ZSwKK307CisKIGludCBwbnBiaW9zX2ludGVyZmFjZV9hdHRhY2hfZGV2aWNlKHN0cnVjdCBwbnBfYmlvc19ub2RlICpub2RlKQogewogCWNoYXIgbmFtZVszXTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKIAogCXNwcmludGYobmFtZSwgIiUwMngiLCBub2RlLT5oYW5kbGUpOwogCiAJaWYgKCFwcm9jX3BucCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKCFwbnBiaW9zX2RvbnRfdXNlX2N1cnJlbnRfY29uZmlnKSB7Ci0JCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIDAsIHByb2NfcG5wKTsKLQkJaWYgKGVudCkgewotCQkJZW50LT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfbm9kZTsKLQkJCWVudC0+d3JpdGVfcHJvYyA9IHByb2Nfd3JpdGVfbm9kZTsKLQkJCWVudC0+ZGF0YSA9ICh2b2lkICopKGxvbmcpKG5vZGUtPmhhbmRsZSk7Ci0JCX0KKwkJcHJvY19jcmVhdGVfZGF0YShuYW1lLCAwNjQ0LCBwcm9jX3BucCwgJnBucGJpb3NfcHJvY19mb3BzLAorCQkJCSAodm9pZCAqKShsb25nKShub2RlLT5oYW5kbGUpKTsKIAl9CiAKIAlpZiAoIXByb2NfcG5wX2Jvb3QpCiAJCXJldHVybiAtRUlPOwotCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIDAsIHByb2NfcG5wX2Jvb3QpOwotCWlmIChlbnQpIHsKLQkJZW50LT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfbm9kZTsKLQkJZW50LT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9ub2RlOwotCQllbnQtPmRhdGEgPSAodm9pZCAqKShsb25nKShub2RlLT5oYW5kbGUgKyAweDEwMCk7CisJaWYgKHByb2NfY3JlYXRlX2RhdGEobmFtZSwgMDY0NCwgcHJvY19wbnBfYm9vdCwgJnBucGJpb3NfcHJvY19mb3BzLAorCQkJICAgICAodm9pZCAqKShsb25nKShub2RlLT5oYW5kbGUgKyAweDEwMCkpKQogCQlyZXR1cm4gMDsKLQl9Ci0KIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMjYyLDE0ICszMTksMTEgQEAKIAlwcm9jX3BucF9ib290ID0gcHJvY19ta2RpcigiYm9vdCIsIHByb2NfcG5wKTsKIAlpZiAoIXByb2NfcG5wX2Jvb3QpCiAJCXJldHVybiAtRUlPOwotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImRldmljZXMiLCAwLCBwcm9jX3BucCwgcHJvY19yZWFkX2RldmljZXMsIE5VTEwpOwotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImNvbmZpZ3VyYXRpb25faW5mbyIsIDAsIHByb2NfcG5wLAotCQkJICAgICAgIHByb2NfcmVhZF9wbnBjb25maWcsIE5VTEwpOwotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImVzY2RfaW5mbyIsIDAsIHByb2NfcG5wLCBwcm9jX3JlYWRfZXNjZGluZm8sCi0JCQkgICAgICAgTlVMTCk7Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZXNjZCIsIFNfSVJVU1IsIHByb2NfcG5wLCBwcm9jX3JlYWRfZXNjZCwgTlVMTCk7Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgibGVnYWN5X2RldmljZV9yZXNvdXJjZXMiLCAwLCBwcm9jX3BucCwKLQkJCSAgICAgICBwcm9jX3JlYWRfbGVnYWN5cmVzLCBOVUxMKTsKKwlwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIHByb2NfcG5wLCAmcG5wX2RldmljZXNfcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgiY29uZmlndXJhdGlvbl9pbmZvIiwgMCwgcHJvY19wbnAsICZwbnBjb25maWdfcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgiZXNjZF9pbmZvIiwgMCwgcHJvY19wbnAsICZlc2NkX2luZm9fcHJvY19mb3BzKTsKKwlwcm9jX2NyZWF0ZSgiZXNjZCIsIFNfSVJVU1IsIHByb2NfcG5wLCAmZXNjZF9wcm9jX2ZvcHMpOworCXByb2NfY3JlYXRlKCJsZWdhY3lfZGV2aWNlX3Jlc291cmNlcyIsIDAsIHByb2NfcG5wLCAmcG5wX2xlZ2FjeXJlc19wcm9jX2ZvcHMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKaW5kZXggMTE4Njc0OS4uZDRiM2Q2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwpAQCAtMjksNiArMjksMTMgQEAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgQVBNIHN0YXR1cyBlbXVsYXRpb24gdXNpbmcKIAkgIGJhdHRlcnkgY2xhc3MgZGV2aWNlcy4KIAorY29uZmlnIFdNODMxWF9CQUNLVVAKKwl0cmlzdGF0ZSAiV004MzFYIGJhY2t1cCBiYXR0ZXJ5IGNoYXJnZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1GRF9XTTgzMVgKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmFja3VwIGJhdHRlcnkgY2hhcmdlcgorCSAgaW4gdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzMXggUE1JQ3MuCisKIGNvbmZpZyBXTTgzMVhfUE9XRVIKIAl0cmlzdGF0ZSAiV004MzFYIFBNVSBzdXBwb3J0IgogCWRlcGVuZHMgb24gTUZEX1dNODMxWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKaW5kZXggMzU2Y2RmZC4uNTczNTk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiAKIG9iai0kKENPTkZJR19QREFfUE9XRVIpCQkrPSBwZGFfcG93ZXIubwogb2JqLSQoQ09ORklHX0FQTV9QT1dFUikJCSs9IGFwbV9wb3dlci5vCitvYmotJChDT05GSUdfV004MzFYX0JBQ0tVUCkJKz0gd204MzF4X2JhY2t1cC5vCiBvYmotJChDT05GSUdfV004MzFYX1BPV0VSKQkrPSB3bTgzMXhfcG93ZXIubwogb2JqLSQoQ09ORklHX1dNODM1MF9QT1dFUikJKz0gd204MzUwX3Bvd2VyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9wY2Y1MDYzMy1jaGFyZ2VyLmMgYi9kcml2ZXJzL3Bvd2VyL3BjZjUwNjMzLWNoYXJnZXIuYwppbmRleCBlOGIyNzhmLi5lYTNmZGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3BjZjUwNjMzLWNoYXJnZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL3BjZjUwNjMzLWNoYXJnZXIuYwpAQCAtMjksMTUgKzI5LDEyIEBACiBzdHJ1Y3QgcGNmNTA2MzNfbWJjIHsKIAlzdHJ1Y3QgcGNmNTA2MzMgKnBjZjsKIAotCWludCBhZGFwdGVyX2FjdGl2ZTsKIAlpbnQgYWRhcHRlcl9vbmxpbmU7Ci0JaW50IHVzYl9hY3RpdmU7CiAJaW50IHVzYl9vbmxpbmU7CiAKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IHVzYjsKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGFkYXB0ZXI7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGNoYXJnaW5nX3Jlc3RhcnRfd29yazsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGFjOwogfTsKIAogaW50IHBjZjUwNjMzX21iY191c2JfY3VybGltX3NldChzdHJ1Y3QgcGNmNTA2MzMgKnBjZiwgaW50IG1hKQpAQCAtNDcsMTYgKzQ0LDIxIEBACiAJdTggYml0czsKIAlpbnQgY2hhcmdpbmdfc3RhcnQgPSAxOwogCXU4IG1iY3MyLCBjaGdtb2Q7CisJdW5zaWduZWQgaW50IG1iY2M1OwogCi0JaWYgKG1hID49IDEwMDApCisJaWYgKG1hID49IDEwMDApIHsKIAkJYml0cyA9IFBDRjUwNjMzX01CQ0M3X1VTQl8xMDAwbUE7Ci0JZWxzZSBpZiAobWEgPj0gNTAwKQorCQltYSA9IDEwMDA7CisJfSBlbHNlIGlmIChtYSA+PSA1MDApIHsKIAkJYml0cyA9IFBDRjUwNjMzX01CQ0M3X1VTQl81MDBtQTsKLQllbHNlIGlmIChtYSA+PSAxMDApCisJCW1hID0gNTAwOworCX0gZWxzZSBpZiAobWEgPj0gMTAwKSB7CiAJCWJpdHMgPSBQQ0Y1MDYzM19NQkNDN19VU0JfMTAwbUE7Ci0JZWxzZSB7CisJCW1hID0gMTAwOworCX0gZWxzZSB7CiAJCWJpdHMgPSBQQ0Y1MDYzM19NQkNDN19VU0JfU1VTUEVORDsKIAkJY2hhcmdpbmdfc3RhcnQgPSAwOworCQltYSA9IDA7CiAJfQogCiAJcmV0ID0gcGNmNTA2MzNfcmVnX3NldF9iaXRfbWFzayhwY2YsIFBDRjUwNjMzX1JFR19NQkNDNywKQEAgLTY2LDIxICs2OCw0MCBAQAogCWVsc2UKIAkJZGV2X2luZm8ocGNmLT5kZXYsICJ1c2IgY3VybGltIHRvICVkIG1BXG4iLCBtYSk7CiAKLQkvKiBNYW51YWwgY2hhcmdpbmcgc3RhcnQgKi8KLQltYmNzMiA9IHBjZjUwNjMzX3JlZ19yZWFkKHBjZiwgUENGNTA2MzNfUkVHX01CQ1MyKTsKKwkvKgorCSAqIFdlIGxpbWl0IHRoZSBjaGFyZ2luZyBjdXJyZW50IHRvIGJlIHRoZSBVU0IgY3VycmVudCBsaW1pdC4KKwkgKiBUaGUgcmVhc29uIGlzIHRoYXQgb24gcGNmNTA2MzMsIHdoZW4gaXQgZW50ZXJzIFBNVSBTdGFuZGJ5IG1vZGUsCisJICogd2hpY2ggaXQgZG9lcyB3aGVuIHRoZSBkZXZpY2UgZ29lcyAib2ZmIiwgdGhlIFVTQiBjdXJyZW50IGxpbWl0CisJICogcmV2ZXJ0cyB0byB0aGUgdmFyaWFudCBkZWZhdWx0LiAgSW4gYXQgbGVhc3Qgb25lIGNvbW1vbiBjYXNlLCB0aGF0CisJICogZGVmYXVsdCBpcyA1MDBtQS4gIEJ5IHNldHRpbmcgdGhlIGNoYXJnaW5nIGN1cnJlbnQgdG8gYmUgdGhlIHNhbWUKKwkgKiBhcyB0aGUgVVNCIGxpbWl0IHdlIHNldCBoZXJlIGJlZm9yZSBQTVUgc3RhbmRieSwgd2UgZW5mb3JjZSBpdCBvbmx5CisJICogdXNpbmcgdGhlIGNvcnJlY3QgYW1vdW50IG9mIGN1cnJlbnQgZXZlbiB3aGVuIHRoZSBVU0IgY3VycmVudCBsaW1pdAorCSAqIGdldHMgcmVzZXQgdG8gdGhlIHdyb25nIHRoaW5nCisJICovCisKKwlpZiAobWJjLT5wY2YtPnBkYXRhLT5jaGFyZ2VyX3JlZmVyZW5jZV9jdXJyZW50X21hKSB7CisJCW1iY2M1ID0gKG1hIDw8IDgpIC8gbWJjLT5wY2YtPnBkYXRhLT5jaGFyZ2VyX3JlZmVyZW5jZV9jdXJyZW50X21hOworCQlpZiAobWJjYzUgPiAyNTUpCisJCQltYmNjNSA9IDI1NTsKKwkJcGNmNTA2MzNfcmVnX3dyaXRlKG1iYy0+cGNmLCBQQ0Y1MDYzM19SRUdfTUJDQzUsIG1iY2M1KTsKKwl9CisKKwltYmNzMiA9IHBjZjUwNjMzX3JlZ19yZWFkKG1iYy0+cGNmLCBQQ0Y1MDYzM19SRUdfTUJDUzIpOwogCWNoZ21vZCA9IChtYmNzMiAmIFBDRjUwNjMzX01CQ1MyX01CQ19NQVNLKTsKIAogCS8qIElmIGNoZ21vZCA9PSBCQVRGVUxMLCBzZXR0aW5nIGNoZ2VuYSBoYXMgbm8gZWZmZWN0LgotCSAqIFdlIG5lZWQgdG8gc2V0IHJlc3VtZSBpbnN0ZWFkLgorCSAqIERhdGFzaGVldCBzYXlzIHdlIG5lZWQgdG8gc2V0IHJlc3VtZSBpbnN0ZWFkIGJ1dCB3aGVuIGF1dG9yZXN1bWUgaXMKKwkgKiB1c2VkIHJlc3VtZSBkb2Vzbid0IHdvcmsuIENsZWFyIGFuZCBzZXQgY2hnZW5hIGluc3RlYWQuCiAJICovCiAJaWYgKGNoZ21vZCAhPSBQQ0Y1MDYzM19NQkNTMl9NQkNfQkFUX0ZVTEwpCiAJCXBjZjUwNjMzX3JlZ19zZXRfYml0X21hc2socGNmLCBQQ0Y1MDYzM19SRUdfTUJDQzEsCiAJCQkJUENGNTA2MzNfTUJDQzFfQ0hHRU5BLCBQQ0Y1MDYzM19NQkNDMV9DSEdFTkEpOwotCWVsc2UKKwllbHNlIHsKKwkJcGNmNTA2MzNfcmVnX2NsZWFyX2JpdHMocGNmLCBQQ0Y1MDYzM19SRUdfTUJDQzEsCisJCQkJUENGNTA2MzNfTUJDQzFfQ0hHRU5BKTsKIAkJcGNmNTA2MzNfcmVnX3NldF9iaXRfbWFzayhwY2YsIFBDRjUwNjMzX1JFR19NQkNDMSwKLQkJCQlQQ0Y1MDYzM19NQkNDMV9SRVNVTUUsIFBDRjUwNjMzX01CQ0MxX1JFU1VNRSk7Ci0KLQltYmMtPnVzYl9hY3RpdmUgPSBjaGFyZ2luZ19zdGFydDsKKwkJCQlQQ0Y1MDYzM19NQkNDMV9DSEdFTkEsIFBDRjUwNjMzX01CQ0MxX0NIR0VOQSk7CisJfQogCiAJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJm1iYy0+dXNiKTsKIApAQCAtOTIsMjAgKzExMyw0NCBAQAogewogCXN0cnVjdCBwY2Y1MDYzM19tYmMgKm1iYyAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwY2YtPm1iY19wZGV2KTsKIAlpbnQgc3RhdHVzID0gMDsKKwl1OCBjaGdtb2Q7CisKKwlpZiAoIW1iYykKKwkJcmV0dXJuIDA7CisKKwljaGdtb2QgPSBwY2Y1MDYzM19yZWdfcmVhZChtYmMtPnBjZiwgUENGNTA2MzNfUkVHX01CQ1MyKQorCQkmIFBDRjUwNjMzX01CQ1MyX01CQ19NQVNLOwogCiAJaWYgKG1iYy0+dXNiX29ubGluZSkKIAkJc3RhdHVzIHw9IFBDRjUwNjMzX01CQ19VU0JfT05MSU5FOwotCWlmIChtYmMtPnVzYl9hY3RpdmUpCisJaWYgKGNoZ21vZCA9PSBQQ0Y1MDYzM19NQkNTMl9NQkNfVVNCX1BSRSB8fAorCSAgICBjaGdtb2QgPT0gUENGNTA2MzNfTUJDUzJfTUJDX1VTQl9QUkVfV0FJVCB8fAorCSAgICBjaGdtb2QgPT0gUENGNTA2MzNfTUJDUzJfTUJDX1VTQl9GQVNUIHx8CisJICAgIGNoZ21vZCA9PSBQQ0Y1MDYzM19NQkNTMl9NQkNfVVNCX0ZBU1RfV0FJVCkKIAkJc3RhdHVzIHw9IFBDRjUwNjMzX01CQ19VU0JfQUNUSVZFOwogCWlmIChtYmMtPmFkYXB0ZXJfb25saW5lKQogCQlzdGF0dXMgfD0gUENGNTA2MzNfTUJDX0FEQVBURVJfT05MSU5FOwotCWlmIChtYmMtPmFkYXB0ZXJfYWN0aXZlKQorCWlmIChjaGdtb2QgPT0gUENGNTA2MzNfTUJDUzJfTUJDX0FEUF9QUkUgfHwKKwkgICAgY2hnbW9kID09IFBDRjUwNjMzX01CQ1MyX01CQ19BRFBfUFJFX1dBSVQgfHwKKwkgICAgY2hnbW9kID09IFBDRjUwNjMzX01CQ1MyX01CQ19BRFBfRkFTVCB8fAorCSAgICBjaGdtb2QgPT0gUENGNTA2MzNfTUJDUzJfTUJDX0FEUF9GQVNUX1dBSVQpCiAJCXN0YXR1cyB8PSBQQ0Y1MDYzM19NQkNfQURBUFRFUl9BQ1RJVkU7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNmNTA2MzNfbWJjX2dldF9zdGF0dXMpOwogCitpbnQgcGNmNTA2MzNfbWJjX2dldF91c2Jfb25saW5lX3N0YXR1cyhzdHJ1Y3QgcGNmNTA2MzMgKnBjZikKK3sKKwlzdHJ1Y3QgcGNmNTA2MzNfbWJjICptYmMgID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGNmLT5tYmNfcGRldik7CisKKwlpZiAoIW1iYykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWJjLT51c2Jfb25saW5lOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNmNTA2MzNfbWJjX2dldF91c2Jfb25saW5lX3N0YXR1cyk7CisKIHN0YXRpYyBzc2l6ZV90CiBzaG93X2NoZ21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTU2LDkgKzIwMSw1NSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIodXNiX2N1cmxpbSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdXNibGltLCBzZXRfdXNibGltKTsKIAorc3RhdGljIHNzaXplX3QKK3Nob3dfY2hnbGltKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGNmNTA2MzNfbWJjICptYmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1OCBtYmNjNSA9IHBjZjUwNjMzX3JlZ19yZWFkKG1iYy0+cGNmLCBQQ0Y1MDYzM19SRUdfTUJDQzUpOworCXVuc2lnbmVkIGludCBtYTsKKworCWlmICghbWJjLT5wY2YtPnBkYXRhLT5jaGFyZ2VyX3JlZmVyZW5jZV9jdXJyZW50X21hKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1hID0gKG1iYy0+cGNmLT5wZGF0YS0+Y2hhcmdlcl9yZWZlcmVuY2VfY3VycmVudF9tYSAqICBtYmNjNSkgPj4gODsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBtYSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9jaGdsaW0oc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBjZjUwNjMzX21iYyAqbWJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBtYTsKKwl1bnNpZ25lZCBpbnQgbWJjYzU7CisJaW50IHJldDsKKworCWlmICghbWJjLT5wY2YtPnBkYXRhLT5jaGFyZ2VyX3JlZmVyZW5jZV9jdXJyZW50X21hKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYmNjNSA9IChtYSA8PCA4KSAvIG1iYy0+cGNmLT5wZGF0YS0+Y2hhcmdlcl9yZWZlcmVuY2VfY3VycmVudF9tYTsKKwlpZiAobWJjYzUgPiAyNTUpCisJCW1iY2M1ID0gMjU1OworCXBjZjUwNjMzX3JlZ193cml0ZShtYmMtPnBjZiwgUENGNTA2MzNfUkVHX01CQ0M1LCBtYmNjNSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUaGlzIGF0dHJpYnV0ZSBhbGxvd3MgdG8gY2hhbmdlIE1CQyBjaGFyZ2luZyBsaW1pdCBvbiB0aGUgZmx5CisgKiBpbmRlcGVuZGVudGx5IG9mIHVzYiBjdXJyZW50IGxpbWl0LiBJdCBhbHNvIGdldHMgc2V0IGF1dG9tYXRpY2FsbHkgZXZlcnkKKyAqIHRpbWUgdXNiIGN1cnJlbnQgbGltaXQgaXMgY2hhbmdlZC4KKyAqLworc3RhdGljIERFVklDRV9BVFRSKGNoZ19jdXJsaW0sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2NoZ2xpbSwgc2V0X2NoZ2xpbSk7CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Y1MDYzM19tYmNfc3lzZnNfZW50cmllc1tdID0gewogCSZkZXZfYXR0cl9jaGdtb2RlLmF0dHIsCiAJJmRldl9hdHRyX3VzYl9jdXJsaW0uYXR0ciwKKwkmZGV2X2F0dHJfY2hnX2N1cmxpbS5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0xNjcsNzYgKzI1OCwyNiBAQAogCS5hdHRycwk9IHBjZjUwNjMzX21iY19zeXNmc19lbnRyaWVzLAogfTsKIAotLyogTUJDIHN0YXRlIG1hY2hpbmUgc3dpdGNoZXMgaW50byBjaGFyZ2luZyBtb2RlIHdoZW4gdGhlIGJhdHRlcnkgdm9sdGFnZQotICogZmFsbHMgYmVsb3cgOTYlIG9mIGEgYmF0dGVyeSBmbG9hdCB2b2x0YWdlLiBCdXQgdGhlIHZvbHRhZ2UgZHJvcCBpbiBMaS1pb24KLSAqIGJhdHRlcmllcyBpcyBtYXJnaW5hbCgxfjIgJSkgdGlsbCBhYm91dCA4MCUgb2YgaXRzIGNhcGFjaXR5IC0gd2hpY2ggbWVhbnMsCi0gKiBhZnRlciBhIEJBVEZVTEwsIGNoYXJnaW5nIHdvbid0IGJlIHJlc3RhcnRlZCB1bnRpbCA4MCUuCi0gKgotICogVGhpcyB3b3JrX3N0cnVjdCBmdW5jdGlvbiByZXN0YXJ0cyBjaGFyZ2luZyBhdCByZWd1bGFyIGludGVydmFscyB0byBtYWtlCi0gKiBzdXJlIHdlIGRvbid0IGRpc2NoYXJnZSB0b28gbXVjaAotICovCi0KLXN0YXRpYyB2b2lkIHBjZjUwNjMzX21iY19jaGFyZ2luZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcGNmNTA2MzNfbWJjICptYmM7Ci0JdTggbWJjczIsIGNoZ21vZDsKLQotCW1iYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNmNTA2MzNfbWJjLAotCQkJCWNoYXJnaW5nX3Jlc3RhcnRfd29yay53b3JrKTsKLQotCW1iY3MyID0gcGNmNTA2MzNfcmVnX3JlYWQobWJjLT5wY2YsIFBDRjUwNjMzX1JFR19NQkNTMik7Ci0JY2hnbW9kID0gKG1iY3MyICYgUENGNTA2MzNfTUJDUzJfTUJDX01BU0spOwotCi0JaWYgKGNoZ21vZCAhPSBQQ0Y1MDYzM19NQkNTMl9NQkNfQkFUX0ZVTEwpCi0JCXJldHVybjsKLQotCS8qIFJlc3RhcnQgY2hhcmdpbmcgKi8KLQlwY2Y1MDYzM19yZWdfc2V0X2JpdF9tYXNrKG1iYy0+cGNmLCBQQ0Y1MDYzM19SRUdfTUJDQzEsCi0JCQkJUENGNTA2MzNfTUJDQzFfUkVTVU1FLCBQQ0Y1MDYzM19NQkNDMV9SRVNVTUUpOwotCW1iYy0+dXNiX2FjdGl2ZSA9IDE7Ci0JcG93ZXJfc3VwcGx5X2NoYW5nZWQoJm1iYy0+dXNiKTsKLQotCWRldl9pbmZvKG1iYy0+cGNmLT5kZXYsICJDaGFyZ2luZyByZXN0YXJ0ZWRcbiIpOwotfQotCiBzdGF0aWMgdm9pZAogcGNmNTA2MzNfbWJjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHBjZjUwNjMzX21iYyAqbWJjID0gZGF0YTsKLQlpbnQgY2hnX3Jlc3RhcnRfaW50ZXJ2YWwgPQotCQkJbWJjLT5wY2YtPnBkYXRhLT5jaGFyZ2luZ19yZXN0YXJ0X2ludGVydmFsOwogCiAJLyogVVNCICovCiAJaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfVVNCSU5TKSB7CiAJCW1iYy0+dXNiX29ubGluZSA9IDE7CiAJfSBlbHNlIGlmIChpcnEgPT0gUENGNTA2MzNfSVJRX1VTQlJFTSkgewogCQltYmMtPnVzYl9vbmxpbmUgPSAwOwotCQltYmMtPnVzYl9hY3RpdmUgPSAwOwogCQlwY2Y1MDYzM19tYmNfdXNiX2N1cmxpbV9zZXQobWJjLT5wY2YsIDApOwotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm1iYy0+Y2hhcmdpbmdfcmVzdGFydF93b3JrKTsKIAl9CiAKIAkvKiBBZGFwdGVyICovCi0JaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfQURQSU5TKSB7CisJaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfQURQSU5TKQogCQltYmMtPmFkYXB0ZXJfb25saW5lID0gMTsKLQkJbWJjLT5hZGFwdGVyX2FjdGl2ZSA9IDE7Ci0JfSBlbHNlIGlmIChpcnEgPT0gUENGNTA2MzNfSVJRX0FEUFJFTSkgeworCWVsc2UgaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfQURQUkVNKQogCQltYmMtPmFkYXB0ZXJfb25saW5lID0gMDsKLQkJbWJjLT5hZGFwdGVyX2FjdGl2ZSA9IDA7Ci0JfQogCi0JaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfQkFURlVMTCkgewotCQltYmMtPnVzYl9hY3RpdmUgPSAwOwotCQltYmMtPmFkYXB0ZXJfYWN0aXZlID0gMDsKLQotCQlpZiAoY2hnX3Jlc3RhcnRfaW50ZXJ2YWwgPiAwKQotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtYmMtPmNoYXJnaW5nX3Jlc3RhcnRfd29yaywKLQkJCQkJCQljaGdfcmVzdGFydF9pbnRlcnZhbCk7Ci0JfSBlbHNlIGlmIChpcnEgPT0gUENGNTA2MzNfSVJRX1VTQkxJTU9OKQotCQltYmMtPnVzYl9hY3RpdmUgPSAwOwotCWVsc2UgaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfVVNCTElNT0ZGKQotCQltYmMtPnVzYl9hY3RpdmUgPSAxOwotCisJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJm1iYy0+YWMpOwogCXBvd2VyX3N1cHBseV9jaGFuZ2VkKCZtYmMtPnVzYik7CiAJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJm1iYy0+YWRhcHRlcik7CiAKQEAgLTI2OSwxMCArMzEwLDM0IEBACiB7CiAJc3RydWN0IHBjZjUwNjMzX21iYyAqbWJjID0gY29udGFpbmVyX29mKHBzeSwgc3RydWN0IHBjZjUwNjMzX21iYywgdXNiKTsKIAlpbnQgcmV0ID0gMDsKKwl1OCB1c2JsaW0gPSBwY2Y1MDYzM19yZWdfcmVhZChtYmMtPnBjZiwgUENGNTA2MzNfUkVHX01CQ0M3KSAmCisJCQkJCQlQQ0Y1MDYzM19NQkNDN19VU0JfTUFTSzsKIAogCXN3aXRjaCAocHNwKSB7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6Ci0JCXZhbC0+aW50dmFsID0gbWJjLT51c2Jfb25saW5lOworCQl2YWwtPmludHZhbCA9IG1iYy0+dXNiX29ubGluZSAmJgorCQkJCSh1c2JsaW0gPD0gUENGNTA2MzNfTUJDQzdfVVNCXzUwMG1BKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCWVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IHBjZjUwNjMzX21iYyAqbWJjID0gY29udGFpbmVyX29mKHBzeSwgc3RydWN0IHBjZjUwNjMzX21iYywgYWMpOworCWludCByZXQgPSAwOworCXU4IHVzYmxpbSA9IHBjZjUwNjMzX3JlZ19yZWFkKG1iYy0+cGNmLCBQQ0Y1MDYzM19SRUdfTUJDQzcpICYKKwkJCQkJCVBDRjUwNjMzX01CQ0M3X1VTQl9NQVNLOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToKKwkJdmFsLT5pbnR2YWwgPSBtYmMtPnVzYl9vbmxpbmUgJiYKKwkJCQkodXNibGltID09IFBDRjUwNjMzX01CQ0M3X1VTQl8xMDAwbUEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMzAzLDcgKzM2OCw2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2Y1MDYzM19tYmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcGNmNTA2MzNfbWJjICptYmM7Ci0Jc3RydWN0IHBjZjUwNjMzX3N1YmRldl9wZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCWludCBpOwogCXU4IG1iY3MxOwpAQCAtMzEzLDcgKzM3Nyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWJjKTsKLQltYmMtPnBjZiA9IHBkYXRhLT5wY2Y7CisJbWJjLT5wY2YgPSBkZXZfdG9fcGNmNTA2MzMocGRldi0+ZGV2LnBhcmVudCk7CiAKIAkvKiBTZXQgdXAgSVJRIGhhbmRsZXJzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWJjX2lycV9oYW5kbGVycyk7IGkrKykKQEAgLTMzNyw2ICs0MDEsMTQgQEAKIAltYmMtPnVzYi5zdXBwbGllZF90bwkJPSBtYmMtPnBjZi0+cGRhdGEtPmJhdHRlcmllczsKIAltYmMtPnVzYi5udW1fc3VwcGxpY2FudHMJPSBtYmMtPnBjZi0+cGRhdGEtPm51bV9iYXR0ZXJpZXM7CiAKKwltYmMtPmFjLm5hbWUJCQk9ICJhYyI7CisJbWJjLT5hYy50eXBlCQkJPSBQT1dFUl9TVVBQTFlfVFlQRV9NQUlOUzsKKwltYmMtPmFjLnByb3BlcnRpZXMJCT0gcG93ZXJfcHJvcHM7CisJbWJjLT5hYy5udW1fcHJvcGVydGllcwkJPSBBUlJBWV9TSVpFKHBvd2VyX3Byb3BzKTsKKwltYmMtPmFjLmdldF9wcm9wZXJ0eQkJPSBhY19nZXRfcHJvcGVydHk7CisJbWJjLT5hYy5zdXBwbGllZF90bwkJPSBtYmMtPnBjZi0+cGRhdGEtPmJhdHRlcmllczsKKwltYmMtPmFjLm51bV9zdXBwbGljYW50cwkJPSBtYmMtPnBjZi0+cGRhdGEtPm51bV9iYXR0ZXJpZXM7CisKIAlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1iYy0+YWRhcHRlcik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKG1iYy0+cGNmLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYWRhcHRlclxuIik7CkBAIC0zNTIsOCArNDI0LDE0IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JSU5JVF9ERUxBWUVEX1dPUksoJm1iYy0+Y2hhcmdpbmdfcmVzdGFydF93b3JrLAotCQkJCXBjZjUwNjMzX21iY19jaGFyZ2luZ19yZXN0YXJ0KTsKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1iYy0+YWMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihtYmMtPnBjZi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGFjXG4iKTsKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJm1iYy0+YWRhcHRlcik7CisJCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZtYmMtPnVzYik7CisJCWtmcmVlKG1iYyk7CisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJm1iY19hdHRyX2dyb3VwKTsKIAlpZiAocmV0KQpAQCAtMzc5LDggKzQ1Nyw3IEBACiAKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmbWJjLT51c2IpOwogCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZtYmMtPmFkYXB0ZXIpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtYmMtPmNoYXJnaW5nX3Jlc3RhcnRfd29yayk7CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJm1iYy0+YWMpOwogCiAJa2ZyZWUobWJjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKaW5kZXggMDgxNDQzOS4uYzc5MGUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYworKysgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCkBAIC02NSw3ICs2NSwxMCBAQAogCXJldCA9IHBzeS0+Z2V0X3Byb3BlcnR5KHBzeSwgb2ZmLCAmdmFsdWUpOwogCiAJaWYgKHJldCA8IDApIHsKLQkJaWYgKHJldCAhPSAtRU5PREVWKQorCQlpZiAocmV0ID09IC1FTk9EQVRBKQorCQkJZGV2X2RiZyhkZXYsICJkcml2ZXIgaGFzIG5vIGRhdGEgZm9yIGAlcycgcHJvcGVydHlcbiIsCisJCQkJYXR0ci0+YXR0ci5uYW1lKTsKKwkJZWxzZSBpZiAocmV0ICE9IC1FTk9ERVYpCiAJCQlkZXZfZXJyKGRldiwgImRyaXZlciBmYWlsZWQgdG8gcmVwb3J0IGAlcycgcHJvcGVydHlcbiIsCiAJCQkJYXR0ci0+YXR0ci5uYW1lKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvd204MzF4X2JhY2t1cC5jIGIvZHJpdmVycy9wb3dlci93bTgzMXhfYmFja3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0ZjM4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvd204MzF4X2JhY2t1cC5jCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQmFja3VwIGJhdHRlcnkgZHJpdmVyIGZvciBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3Mgd204MzF4IFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvYXV4YWRjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L3BkYXRhLmg+CisKK3N0cnVjdCB3bTgzMXhfYmFja3VwIHsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXg7CisJc3RydWN0IHBvd2VyX3N1cHBseSBiYWNrdXA7Cit9OworCitzdGF0aWMgaW50IHdtODMxeF9iYWNrdXBfcmVhZF92b2x0YWdlKHN0cnVjdCB3bTgzMXggKndtODMxeCwKKwkJCQkgICAgIGVudW0gd204MzF4X2F1eGFkYyBzcmMsCisJCQkJICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bTgzMXhfYXV4YWRjX3JlYWRfdXYod204MzF4LCBzcmMpOworCWlmIChyZXQgPj0gMCkKKwkJdmFsLT5pbnR2YWwgPSByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJQmFja3VwIHN1cHBseSBwcm9wZXJ0aWVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB3bTgzMXhfY29uZmlnX2JhY2t1cChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgpCit7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqd204MzF4X3BkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdtODMxeF9iYWNrdXBfcGRhdGEgKnBkYXRhOworCWludCByZXQsIHJlZzsKKworCWlmICghd204MzF4X3BkYXRhIHx8ICF3bTgzMXhfcGRhdGEtPmJhY2t1cCkgeworCQlkZXZfd2Fybih3bTgzMXgtPmRldiwKKwkJCSAiTm8gYmFja3VwIGJhdHRlcnkgY2hhcmdlciBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBkYXRhID0gd204MzF4X3BkYXRhLT5iYWNrdXA7CisKKwlyZWcgPSAwOworCisJaWYgKHBkYXRhLT5jaGFyZ2VyX2VuYWJsZSkKKwkJcmVnIHw9IFdNODMxWF9CS1VQX0NIR19FTkEgfCBXTTgzMVhfQktVUF9CQVRUX0RFVF9FTkE7CisJaWYgKHBkYXRhLT5ub19jb25zdGFudF92b2x0YWdlKQorCQlyZWcgfD0gV004MzFYX0JLVVBfQ0hHX01PREU7CisKKwlzd2l0Y2ggKHBkYXRhLT52bGltKSB7CisJY2FzZSAyNTAwOgorCQlicmVhazsKKwljYXNlIDMxMDA6CisJCXJlZyB8PSBXTTgzMVhfQktVUF9DSEdfVkxJTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkludmFsaWQgYmFja3VwIHZvbHRhZ2UgbGltaXQgJWRtVlxuIiwKKwkJCXBkYXRhLT52bGltKTsKKwl9CisKKwlzd2l0Y2ggKHBkYXRhLT5pbGltKSB7CisJY2FzZSAxMDA6CisJCWJyZWFrOworCWNhc2UgMjAwOgorCQlyZWcgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSAzMDA6CisJCXJlZyB8PSAyOworCQlicmVhazsKKwljYXNlIDQwMDoKKwkJcmVnIHw9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIod204MzF4LT5kZXYsICJJbnZhbGlkIGJhY2t1cCBjdXJyZW50IGxpbWl0ICVkdUFcbiIsCisJCQlwZGF0YS0+aWxpbSk7CisJfQorCisJcmV0ID0gd204MzF4X3JlZ191bmxvY2sod204MzF4KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byB1bmxvY2sgcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9CQUNLVVBfQ0hBUkdFUl9DT05UUk9MLAorCQkJICAgICAgV004MzFYX0JLVVBfQ0hHX0VOQV9NQVNLIHwKKwkJCSAgICAgIFdNODMxWF9CS1VQX0NIR19NT0RFX01BU0sgfAorCQkJICAgICAgV004MzFYX0JLVVBfQkFUVF9ERVRfRU5BX01BU0sgfAorCQkJICAgICAgV004MzFYX0JLVVBfQ0hHX1ZMSU1fTUFTSyB8CisJCQkgICAgICBXTTgzMVhfQktVUF9DSEdfSUxJTV9NQVNLLAorCQkJICAgICAgcmVnKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIod204MzF4LT5kZXYsCisJCQkiRmFpbGVkIHRvIHNldCBiYWNrdXAgY2hhcmdlciBjb25maWc6ICVkXG4iLCByZXQpOworCisJd204MzF4X3JlZ19sb2NrKHdtODMxeCk7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2t1cF9nZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkJICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCB3bTgzMXhfYmFja3VwICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKHBzeS0+ZGV2LT5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRldmRhdGEtPndtODMxeDsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIFdNODMxWF9CQUNLVVBfQ0hBUkdFUl9DT05UUk9MKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCWlmIChyZXQgJiBXTTgzMVhfQktVUF9DSEdfU1RTKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQllbHNlCisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOworCQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCXJldCA9IHdtODMxeF9iYWNrdXBfcmVhZF92b2x0YWdlKHdtODMxeCwgV004MzFYX0FVWF9CS1VQX0JBVFQsCisJCQkJCQl2YWwpOworCQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDoKKwkJaWYgKHJldCAmIFdNODMxWF9CS1VQX0NIR19TVFMpCisJCQl2YWwtPmludHZhbCA9IDE7CisJCWVsc2UKKwkJCXZhbC0+aW50dmFsID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgd204MzF4X2JhY2t1cF9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCUluaXRpYWxpc2F0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfYmFja3VwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfYmFja3VwICpkZXZkYXRhOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhY2t1cDsKKwlpbnQgcmV0OworCisJZGV2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTgzMXhfYmFja3VwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZkYXRhLT53bTgzMXggPSB3bTgzMXg7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2ZGF0YSk7CisKKwliYWNrdXAgPSAmZGV2ZGF0YS0+YmFja3VwOworCisJLyogV2UgaWdub3JlIGNvbmZpZ3VyYXRpb24gZmFpbHVyZXMgc2luY2Ugd2UgY2FuIHN0aWxsIHJlYWQKKwkgKiBiYWNrIHRoZSBzdGF0dXMgd2l0aG91dCBlbmFibGluZyB0aGUgY2hhcmdlciAod2hpY2ggbWF5CisJICogYWxyZWFkeSBiZSBlbmFibGVkIGFueXdheSkuCisJICovCisJd204MzF4X2NvbmZpZ19iYWNrdXAod204MzF4KTsKKworCWJhY2t1cC0+bmFtZSA9ICJ3bTgzMXgtYmFja3VwIjsKKwliYWNrdXAtPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCWJhY2t1cC0+cHJvcGVydGllcyA9IHdtODMxeF9iYWNrdXBfcHJvcHM7CisJYmFja3VwLT5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUod204MzF4X2JhY2t1cF9wcm9wcyk7CisJYmFja3VwLT5nZXRfcHJvcGVydHkgPSB3bTgzMXhfYmFja3VwX2dldF9wcm9wOworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCBiYWNrdXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ttYWxsb2M7CisKKwlyZXR1cm4gcmV0OworCitlcnJfa21hbGxvYzoKKwlrZnJlZShkZXZkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTgzMXhfYmFja3VwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzMXhfYmFja3VwICpkZXZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGV2ZGF0YS0+YmFja3VwKTsKKwlrZnJlZShkZXZkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzMXhfYmFja3VwX2RyaXZlciA9IHsKKwkucHJvYmUgPSB3bTgzMXhfYmFja3VwX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfYmFja3VwX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204MzF4LWJhY2t1cCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODMxeF9iYWNrdXBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODMxeF9iYWNrdXBfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODMxeF9iYWNrdXBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTgzMXhfYmFja3VwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzF4X2JhY2t1cF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzF4X2JhY2t1cF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCYWNrdXAgYmF0dGVyeSBjaGFyZ2VyIGRyaXZlciBmb3IgV004MzF4IFBNSUNzIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204MzF4LWJhY2t1cCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTgzMXhfcG93ZXIuYyBiL2RyaXZlcnMvcG93ZXIvd204MzF4X3Bvd2VyLmMKaW5kZXggMmE0YzhiMC4uZjg1ZTgwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci93bTgzMXhfcG93ZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtODMxeF9wb3dlci5jCkBAIC0yMSw3ICsyMSw2IEBACiBzdHJ1Y3Qgd204MzF4X3Bvd2VyIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXg7CiAJc3RydWN0IHBvd2VyX3N1cHBseSB3YWxsOwotCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmFja3VwOwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgdXNiOwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeTsKIH07CkBAIC00NTQsMTI1ICs0NTMsNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQlCYWNrdXAgc3VwcGx5IHByb3BlcnRpZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHdtODMxeF9jb25maWdfYmFja3VwKHN0cnVjdCB3bTgzMXggKndtODMxeCkKLXsKLQlzdHJ1Y3Qgd204MzF4X3BkYXRhICp3bTgzMXhfcGRhdGEgPSB3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3Qgd204MzF4X2JhY2t1cF9wZGF0YSAqcGRhdGE7Ci0JaW50IHJldCwgcmVnOwotCi0JaWYgKCF3bTgzMXhfcGRhdGEgfHwgIXdtODMxeF9wZGF0YS0+YmFja3VwKSB7Ci0JCWRldl93YXJuKHdtODMxeC0+ZGV2LAotCQkJICJObyBiYWNrdXAgYmF0dGVyeSBjaGFyZ2VyIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcGRhdGEgPSB3bTgzMXhfcGRhdGEtPmJhY2t1cDsKLQotCXJlZyA9IDA7Ci0KLQlpZiAocGRhdGEtPmNoYXJnZXJfZW5hYmxlKQotCQlyZWcgfD0gV004MzFYX0JLVVBfQ0hHX0VOQSB8IFdNODMxWF9CS1VQX0JBVFRfREVUX0VOQTsKLQlpZiAocGRhdGEtPm5vX2NvbnN0YW50X3ZvbHRhZ2UpCi0JCXJlZyB8PSBXTTgzMVhfQktVUF9DSEdfTU9ERTsKLQotCXN3aXRjaCAocGRhdGEtPnZsaW0pIHsKLQljYXNlIDI1MDA6Ci0JCWJyZWFrOwotCWNhc2UgMzEwMDoKLQkJcmVnIHw9IFdNODMxWF9CS1VQX0NIR19WTElNOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiSW52YWxpZCBiYWNrdXAgdm9sdGFnZSBsaW1pdCAlZG1WXG4iLAotCQkJcGRhdGEtPnZsaW0pOwotCX0KLQotCXN3aXRjaCAocGRhdGEtPmlsaW0pIHsKLQljYXNlIDEwMDoKLQkJYnJlYWs7Ci0JY2FzZSAyMDA6Ci0JCXJlZyB8PSAxOwotCQlicmVhazsKLQljYXNlIDMwMDoKLQkJcmVnIHw9IDI7Ci0JCWJyZWFrOwotCWNhc2UgNDAwOgotCQlyZWcgfD0gMzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkludmFsaWQgYmFja3VwIGN1cnJlbnQgbGltaXQgJWR1QVxuIiwKLQkJCXBkYXRhLT5pbGltKTsKLQl9Ci0KLQlyZXQgPSB3bTgzMXhfcmVnX3VubG9jayh3bTgzMXgpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHVubG9jayByZWdpc3RlcnM6ICVkXG4iLCByZXQpOwotCQlyZXR1cm47Ci0JfQotCi0JcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0JBQ0tVUF9DSEFSR0VSX0NPTlRST0wsCi0JCQkgICAgICBXTTgzMVhfQktVUF9DSEdfRU5BX01BU0sgfAotCQkJICAgICAgV004MzFYX0JLVVBfQ0hHX01PREVfTUFTSyB8Ci0JCQkgICAgICBXTTgzMVhfQktVUF9CQVRUX0RFVF9FTkFfTUFTSyB8Ci0JCQkgICAgICBXTTgzMVhfQktVUF9DSEdfVkxJTV9NQVNLIHwKLQkJCSAgICAgIFdNODMxWF9CS1VQX0NIR19JTElNX01BU0ssCi0JCQkgICAgICByZWcpOwotCWlmIChyZXQgIT0gMCkKLQkJZGV2X2Vycih3bTgzMXgtPmRldiwKLQkJCSJGYWlsZWQgdG8gc2V0IGJhY2t1cCBjaGFyZ2VyIGNvbmZpZzogJWRcbiIsIHJldCk7Ci0KLQl3bTgzMXhfcmVnX2xvY2sod204MzF4KTsKLX0KLQotc3RhdGljIGludCB3bTgzMXhfYmFja3VwX2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKLQkJCQkgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKLQkJCQkgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCi17Ci0Jc3RydWN0IHdtODMxeF9wb3dlciAqd204MzF4X3Bvd2VyID0gZGV2X2dldF9kcnZkYXRhKHBzeS0+ZGV2LT5wYXJlbnQpOwotCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF9wb3dlci0+d204MzF4OwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0JBQ0tVUF9DSEFSR0VSX0NPTlRST0wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3dpdGNoIChwc3ApIHsKLQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKLQkJaWYgKHJldCAmIFdNODMxWF9CS1VQX0NIR19TVFMpCi0JCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7Ci0JCWVsc2UKLQkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19OT1RfQ0hBUkdJTkc7Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKLQkJcmV0ID0gd204MzF4X3Bvd2VyX3JlYWRfdm9sdGFnZSh3bTgzMXgsIFdNODMxWF9BVVhfQktVUF9CQVRULAotCQkJCQkJdmFsKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6Ci0JCWlmIChyZXQgJiBXTTgzMVhfQktVUF9DSEdfU1RTKQotCQkJdmFsLT5pbnR2YWwgPSAxOwotCQllbHNlCi0JCQl2YWwtPmludHZhbCA9IDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHdtODMxeF9iYWNrdXBfcHJvcHNbXSA9IHsKLQlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCi0JUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCi0JUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlJbml0aWFsaXNhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNTk1LDEwICs0NzUsNyBAQAogCiAJZGV2X2RiZyh3bTgzMXgtPmRldiwgIlBvd2VyIHNvdXJjZSBjaGFuZ2VkXG4iKTsKIAotCS8qIEp1c3Qgbm90aWZ5IGZvciBldmVyeXRoaW5nIC0gbGl0dGxlIGhhcm0gaW4gb3Zlcm5vdGlmeWluZy4KLQkgKiBUaGUgYmFja3VwIGJhdHRlcnkgaXMgbm90IGEgcG93ZXIgc291cmNlIHdoaWxlIHRoZSBzeXN0ZW0KLQkgKiBpcyBydW5uaW5nIHNvIHNraXAgdGhhdC4KLQkgKi8KKwkvKiBKdXN0IG5vdGlmeSBmb3IgZXZlcnl0aGluZyAtIGxpdHRsZSBoYXJtIGluIG92ZXJub3RpZnlpbmcuICovCiAJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJndtODMxeF9wb3dlci0+YmF0dGVyeSk7CiAJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJndtODMxeF9wb3dlci0+dXNiKTsKIAlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmd204MzF4X3Bvd2VyLT53YWxsKTsKQEAgLTYxMyw3ICs0OTAsNiBAQAogCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnVzYjsKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpiYXR0ZXJ5OwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgKndhbGw7Ci0Jc3RydWN0IHBvd2VyX3N1cHBseSAqYmFja3VwOwogCWludCByZXQsIGlycSwgaTsKIAogCXBvd2VyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODMxeF9wb3dlciksIEdGUF9LRVJORUwpOwpAQCAtNjI2LDEzICs1MDIsMTEgQEAKIAl1c2IgPSAmcG93ZXItPnVzYjsKIAliYXR0ZXJ5ID0gJnBvd2VyLT5iYXR0ZXJ5OwogCXdhbGwgPSAmcG93ZXItPndhbGw7Ci0JYmFja3VwID0gJnBvd2VyLT5iYWNrdXA7CiAKIAkvKiBXZSBpZ25vcmUgY29uZmlndXJhdGlvbiBmYWlsdXJlcyBzaW5jZSB3ZSBjYW4gc3RpbGwgcmVhZCBiYWNrCi0JICogdGhlIHN0YXR1cyB3aXRob3V0IGVuYWJsaW5nIGVpdGhlciBvZiB0aGUgY2hhcmdlcnMuCisJICogdGhlIHN0YXR1cyB3aXRob3V0IGVuYWJsaW5nIHRoZSBjaGFyZ2VyLgogCSAqLwogCXdtODMxeF9jb25maWdfYmF0dGVyeSh3bTgzMXgpOwotCXdtODMxeF9jb25maWdfYmFja3VwKHdtODMxeCk7CiAKIAl3YWxsLT5uYW1lID0gIndtODMxeC13YWxsIjsKIAl3YWxsLT50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfTUFJTlM7CkBAIC02NjEsMTUgKzUzNSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYmF0dGVyeTsKIAotCWJhY2t1cC0+bmFtZSA9ICJ3bTgzMXgtYmFja3VwIjsKLQliYWNrdXAtPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOwotCWJhY2t1cC0+cHJvcGVydGllcyA9IHdtODMxeF9iYWNrdXBfcHJvcHM7Ci0JYmFja3VwLT5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUod204MzF4X2JhY2t1cF9wcm9wcyk7Ci0JYmFja3VwLT5nZXRfcHJvcGVydHkgPSB3bTgzMXhfYmFja3VwX2dldF9wcm9wOwotCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCBiYWNrdXApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VzYjsKLQogCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJTWVNMTyIpOwogCXJldCA9IHdtODMxeF9yZXF1ZXN0X2lycSh3bTgzMXgsIGlycSwgd204MzF4X3N5c2xvX2lycSwKIAkJCQkgSVJRRl9UUklHR0VSX1JJU0lORywgIlNZU0xPIiwKQEAgLTY3Nyw3ICs1NDIsNyBAQAogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBTWVNMTyBJUlEgJWQ6ICVkXG4iLAogCQkJaXJxLCByZXQpOwotCQlnb3RvIGVycl9iYWNrdXA7CisJCWdvdG8gZXJyX3VzYjsKIAl9CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiUFdSIFNSQyIpOwpAQCAtNzE2LDggKzU4MSw2IEBACiBlcnJfc3lzbG86CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlNZU0xPIik7CiAJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgaXJxLCBwb3dlcik7Ci1lcnJfYmFja3VwOgotCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKGJhY2t1cCk7CiBlcnJfdXNiOgogCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKHVzYik7CiBlcnJfYmF0dGVyeToKQEAgLTc0Niw3ICs2MDksNiBAQAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJTWVNMTyIpOwogCXdtODMxeF9mcmVlX2lycSh3bTgzMXgsIGlycSwgd204MzF4X3Bvd2VyKTsKIAotCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZ3bTgzMXhfcG93ZXItPmJhY2t1cCk7CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJndtODMxeF9wb3dlci0+YmF0dGVyeSk7CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJndtODMxeF9wb3dlci0+d2FsbCk7CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJndtODMxeF9wb3dlci0+dXNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvd204MzUwX3Bvd2VyLmMgYi9kcml2ZXJzL3Bvd2VyL3dtODM1MF9wb3dlci5jCmluZGV4IDI4YjAyOTkuLmFkNGYwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvd204MzUwX3Bvd2VyLmMKKysrIGIvZHJpdmVycy9wb3dlci93bTgzNTBfcG93ZXIuYwpAQCAtMTg0LDggKzE4NCw5IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjaGFyZ2VyX3N0YXRlLCAwNDQ0LCBjaGFyZ2VyX3N0YXRlX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgdm9pZCB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gZGF0YTsKIAlzdHJ1Y3Qgd204MzUwX3Bvd2VyICpwb3dlciA9ICZ3bTgzNTAtPnBvd2VyOwogCXN0cnVjdCB3bTgzNTBfY2hhcmdlcl9wb2xpY3kgKnBvbGljeSA9IHBvd2VyLT5wb2xpY3k7CiAKQEAgLTIzOCw2ICsyMzksOCBAQAogCWRlZmF1bHQ6CiAJCWRldl9lcnIod204MzUwLT5kZXYsICJVbmtub3duIGludGVycnVwdCAlZFxuIiwgaXJxKTsKIAl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM4Nyw3MyArMzkwLDU1IEBACiB7CiAJLyogcmVnaXN0ZXIgb3VyIGludGVyZXN0IGluIGNoYXJnZXIgZXZlbnRzICovCiAJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9IT1QsCi0JCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgTlVMTCk7Ci0Jd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfSE9UKTsKKwkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCAwLCAiQmF0dGVyeSBob3QiLCB3bTgzNTApOwogCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfQ09MRCwKLQkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCBOVUxMKTsKLQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9DT0xEKTsKKwkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCAwLCAiQmF0dGVyeSBjb2xkIiwgd204MzUwKTsKIAl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0ZBSUwsCi0JCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgTlVMTCk7Ci0Jd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfRkFJTCk7CisJCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgMCwgIkJhdHRlcnkgZmFpbCIsIHdtODM1MCk7CiAJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1RPLAotCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIE5VTEwpOwotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVE8pOworCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIDAsCisJCQkgICAgIkNoYXJnZXIgdGltZW91dCIsIHdtODM1MCk7CiAJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0VORCwKLQkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCBOVUxMKTsKLQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0VORCk7CisJCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgMCwKKwkJCSAgICAiQ2hhcmdlIGVuZCIsIHdtODM1MCk7CiAJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1NUQVJULAotCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIE5VTEwpOwotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfU1RBUlQpOworCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIDAsCisJCQkgICAgIkNoYXJnZSBzdGFydCIsIHdtODM1MCk7CiAJd204MzUwX3JlZ2lzdGVyX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0ZBU1RfUkRZLAotCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIE5VTEwpOwotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfRkFTVF9SRFkpOworCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIDAsCisJCQkgICAgIkZhc3QgY2hhcmdlIHJlYWR5Iiwgd204MzUwKTsKIAl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5LAotCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIE5VTEwpOwotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5KTsKKwkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCAwLAorCQkJICAgICJCYXR0ZXJ5IDwzLjlWIiwgd204MzUwKTsKIAl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxLAotCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIE5VTEwpOwotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxKTsKKwkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCAwLAorCQkJICAgICJCYXR0ZXJ5IDwzLjFWIiwgd204MzUwKTsKIAl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NSwKLQkJCSAgICB3bTgzNTBfY2hhcmdlcl9oYW5kbGVyLCBOVUxMKTsKLQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODUpOworCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIDAsCisJCQkgICAgIkJhdHRlcnkgPDIuODVWIiwgd204MzUwKTsKIAogCS8qIGFuZCBzdXBwbHkgY2hhbmdlIGV2ZW50cyAqLwogCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9VU0JfRkIsCi0JCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgTlVMTCk7Ci0Jd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9VU0JfRkIpOworCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIDAsICJVU0IiLCB3bTgzNTApOwogCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9XQUxMX0ZCLAotCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIE5VTEwpOwotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfV0FMTF9GQik7CisJCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgMCwgIldhbGwiLCB3bTgzNTApOwogCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9CQVRfRkIsCi0JCQkgICAgd204MzUwX2NoYXJnZXJfaGFuZGxlciwgTlVMTCk7Ci0Jd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9CQVRfRkIpOworCQkJICAgIHdtODM1MF9jaGFyZ2VyX2hhbmRsZXIsIDAsICJCYXR0ZXJ5Iiwgd204MzUwKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9jaGFyZ2VyX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTApCiB7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0hPVCk7CiAJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0hPVCk7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0NPTEQpOwogCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9DT0xEKTsKLQl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfRkFJTCk7CiAJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0ZBSUwpOwotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1RPKTsKIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19UTyk7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfRU5EKTsKIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19FTkQpOwotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1NUQVJUKTsKIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19TVEFSVCk7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5KTsKIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDkpOwotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQMSk7CiAJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxKTsKLQl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8yUDg1KTsKIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8yUDg1KTsKLQl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9VU0JfRkIpOwogCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX1VTQl9GQik7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfV0FMTF9GQik7CiAJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfV0FMTF9GQik7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfQkFUX0ZCKTsKIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9CQVRfRkIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKaW5kZXggZjJiZmQyOS4uZmEzOWU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB3bTk3eHhfYmF0X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB3bTk3eHhfYmF0X3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IHdtOTd4eF9iYXRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHdtOTd4eF9iYXRfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCkBAIC0wLDAgKzEsNjg1IEBACisvKgorICogUmVndWxhdG9ycyBkcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MDcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqIAlIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MDcuaD4KKworc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjCWRlc2M7CisJc3RydWN0IHBtODYwN19jaGlwCSpjaGlwOworCXN0cnVjdCByZWd1bGF0b3JfZGV2CSpyZWd1bGF0b3I7CisKKwlpbnQJbWluX3VWOworCWludAltYXhfdVY7CisJaW50CXN0ZXBfdVY7CisJaW50CXZvbF9yZWc7CisJaW50CXZvbF9zaGlmdDsKKwlpbnQJdm9sX25iaXRzOworCWludAl1cGRhdGVfcmVnOworCWludAl1cGRhdGVfYml0OworCWludAllbmFibGVfcmVnOworCWludAllbmFibGVfYml0OworCWludAlzbG9wZV9kb3VibGU7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBjaGVja19yYW5nZShzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvLAorCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJaWYgKG1heF91ViA8IGluZm8tPm1pbl91ViB8fCBtaW5fdVYgPiBpbmZvLT5tYXhfdVYgfHwgbWluX3VWID4gbWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtODYwN19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGluZGV4KQoreworCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVpbnQ4X3QgY2hpcF9pZCA9IGluZm8tPmNoaXAtPmNoaXBfaWQ7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGluZm8tPmRlc2MuaWQpIHsKKwljYXNlIFBNODYwN19JRF9CVUNLMToKKwkJcmV0ID0gKGluZGV4IDwgMHgxZCkgPyAoaW5kZXggKiAyNTAwMCArIDgwMDAwMCkgOgorCQkJKChpbmRleCA8IDB4MjApID8gMTUwMDAwMCA6CisJCQkoKGluZGV4IDwgMHg0MCkgPyAoKGluZGV4IC0gMHgyMCkgKiAyNTAwMCkgOgorCQkJLUVJTlZBTCkpOworCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9CVUNLMzoKKwkJcmV0ID0gKGluZGV4IDwgMHgzZCkgPyAoaW5kZXggKiAyNTAwMCkgOgorCQkJKChpbmRleCA8IDB4NDApID8gMTUwMDAwMCA6IC1FSU5WQUwpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAoaW5mby0+c2xvcGVfZG91YmxlKQorCQkJcmV0IDw8PSAxOworCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9MRE8xOgorCQlyZXQgPSAoaW5kZXggPT0gMCkgPyAxODAwMDAwIDoKKwkJCSgoaW5kZXggPT0gMSkgPyAxMjAwMDAwIDoKKwkJCSgoaW5kZXggPT0gMikgPyAyODAwMDAwIDogLUVJTlZBTCkpOworCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9MRE81OgorCQlyZXQgPSAoaW5kZXggPT0gMCkgPyAyOTAwMDAwIDoKKwkJCSgoaW5kZXggPT0gMSkgPyAzMDAwMDAwIDoKKwkJCSgoaW5kZXggPT0gMikgPyAzMTAwMDAwIDogMzMwMDAwMCkpOworCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9MRE83OgorCWNhc2UgUE04NjA3X0lEX0xETzg6CisJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkoKGluZGV4IDwgOCkgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKKwkJCSAtRUlOVkFMKTsKKwkJYnJlYWs7CisJY2FzZSBQTTg2MDdfSURfTERPMTI6CisJCXJldCA9IChpbmRleCA8IDIpID8gKGluZGV4ICogMTAwMDAwICsgMTgwMDAwMCkgOgorCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogMTAwMDAwICsgMjUwMDAwMCkgOgorCQkJKChpbmRleCA9PSA3KSA/IDMzMDAwMDAgOiAxMjAwMDAwKSk7CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0xETzI6CisJY2FzZSBQTTg2MDdfSURfTERPMzoKKwljYXNlIFBNODYwN19JRF9MRE85OgorCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKKwkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkJKChpbmRleCA8IDgpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6CisJCQkJIC1FSU5WQUwpOworCQkJYnJlYWs7CisJCWNhc2UgUE04NjA3X0NISVBfQjA6CisJCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJCSgoaW5kZXggPCA3KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgorCQkJCTMzMDAwMDApOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTTg2MDdfSURfTERPNDoKKwkJc3dpdGNoIChjaGlwX2lkKSB7CisJCWNhc2UgUE04NjA3X0NISVBfQTA6CisJCWNhc2UgUE04NjA3X0NISVBfQTE6CisJCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJCSgoaW5kZXggPCA4KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgorCQkJCSAtRUlOVkFMKTsKKwkJCWJyZWFrOworCQljYXNlIFBNODYwN19DSElQX0IwOgorCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKKwkJCQkoKGluZGV4IDwgNikgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKKwkJCQkoKGluZGV4ID09IDYpID8gMjkwMDAwMCA6IDMzMDAwMDApKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0xETzY6CisJCXN3aXRjaCAoY2hpcF9pZCkgeworCQljYXNlIFBNODYwN19DSElQX0EwOgorCQljYXNlIFBNODYwN19DSElQX0ExOgorCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKKwkJCQkoKGluZGV4IDwgOCkgPyAoaW5kZXggKiA1MDAwMCArIDI0NTAwMDApIDoKKwkJCQktRUlOVkFMKTsKKwkJCWJyZWFrOworCQljYXNlIFBNODYwN19DSElQX0IwOgorCQkJcmV0ID0gKGluZGV4IDwgMikgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKKwkJCQkoKGluZGV4IDwgNykgPyAoaW5kZXggKiA1MDAwMCArIDI1MDAwMDApIDoKKwkJCQkzMzAwMDAwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0xETzEwOgorCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKKwkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkJKChpbmRleCA8IDgpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6CisJCQkJMTIwMDAwMCk7CisJCQlicmVhazsKKwkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKKwkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6CisJCQkJKChpbmRleCA9PSA3KSA/IDMzMDAwMDAgOiAxMjAwMDAwKSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9MRE8xNDoKKwkJc3dpdGNoIChjaGlwX2lkKSB7CisJCWNhc2UgUE04NjA3X0NISVBfQTA6CisJCWNhc2UgUE04NjA3X0NISVBfQTE6CisJCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJCSgoaW5kZXggPCA4KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgorCQkJCSAtRUlOVkFMKTsKKwkJCWJyZWFrOworCQljYXNlIFBNODYwN19DSElQX0IwOgorCQkJcmV0ID0gKGluZGV4IDwgMikgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKKwkJCQkoKGluZGV4IDwgNykgPyAoaW5kZXggKiA1MDAwMCArIDI2MDAwMDApIDoKKwkJCQkzMzAwMDAwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNob29zZV92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVpbnQ4X3QgY2hpcF9pZCA9IGluZm8tPmNoaXAtPmNoaXBfaWQ7CisJaW50IHZhbCA9IC1FTk9FTlQ7CisJaW50IHJldDsKKworCXN3aXRjaCAoaW5mby0+ZGVzYy5pZCkgeworCWNhc2UgUE04NjA3X0lEX0JVQ0sxOgorCQlpZiAobWluX3VWID49IDgwMDAwMCkgCQkvKiA4MDBtViB+IDE1MDBtViAvIDI1bVYgKi8KKwkJCXZhbCA9IChtaW5fdVYgLSA3NzUwMDEpIC8gMjUwMDA7CisJCWVsc2UgewkJCQkvKiAyNW1WIH4gNzc1bVYgLyAyNW1WICovCisJCQl2YWwgPSAobWluX3VWICsgMjQ5OTk5KSAvIDI1MDAwOworCQkJdmFsICs9IDMyOworCQl9CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0JVQ0szOgorCQlpZiAoaW5mby0+c2xvcGVfZG91YmxlKQorCQkJbWluX3VWID0gbWluX3VWID4+IDE7CisJCXZhbCA9IChtaW5fdVYgKyAyNDk5OTkpIC8gMjUwMDA7IC8qIDBtViB+IDE1MDBtViAvIDI1bVYgKi8KKworCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9MRE8xOgorCQlpZiAobWluX3VWID4gMTgwMDAwMCkKKwkJCXZhbCA9IDI7CisJCWVsc2UgaWYgKG1pbl91ViA+IDEyMDAwMDApCisJCQl2YWwgPSAwOworCQllbHNlCisJCQl2YWwgPSAxOworCQlicmVhazsKKwljYXNlIFBNODYwN19JRF9MRE81OgorCQlpZiAobWluX3VWID4gMzEwMDAwMCkKKwkJCXZhbCA9IDM7CisJCWVsc2UJCQkJLyogMjkwMG1WIH4gMzEwMG1WIC8gMTAwbVYgKi8KKwkJCXZhbCA9IChtaW5fdVYgLSAyODAwMDAxKSAvIDEwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBQTTg2MDdfSURfTERPNzoKKwljYXNlIFBNODYwN19JRF9MRE84OgorCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJdmFsID0gMDsJLyogMTgwMG12ICovCisJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKKwkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKKwkJCWVsc2UKKwkJCQl2YWwgPSAzOwkvKiAyNzAwbVYgKi8KKwkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyOTAwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKKwkJCQl2YWwgPSAobWluX3VWIC0gMjY1MDAwMSkgLyA1MDAwMDsKKwkJCQl2YWwgKz0gMzsKKwkJCX0gZWxzZQorCQkJCXZhbCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTTg2MDdfSURfTERPMTA6CisJCWlmIChtaW5fdVYgPiAyODUwMDAwKQorCQkJdmFsID0gNzsKKwkJZWxzZSBpZiAobWluX3VWIDw9IDEyMDAwMDApCisJCQl2YWwgPSA4OworCQllbHNlIGlmIChtaW5fdVYgPCAyNzAwMDAwKQkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCisJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKKwkJZWxzZSB7CQkJCS8qIDI3MDBtViB+IDI4NTBtViAvIDUwbVYgKi8KKwkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOworCQkJdmFsICs9IDM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTTg2MDdfSURfTERPMTI6CisJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CQkvKiAxODAwbVYgfiAxOTAwbVYgLyAxMDBtViAqLworCQkJaWYgKG1pbl91ViA8PSAxMjAwMDAwKQorCQkJCXZhbCA9IDg7CS8qIDEyMDBtViAqLworCQkJZWxzZSBpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJdmFsID0gMDsJLyogMTgwMG1WICovCisJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKKwkJCQl2YWwgPSAobWluX3VWIC0gMTcwMDAwMSkgLyAxMDAwMDA7CisJCQllbHNlCisJCQkJdmFsID0gMjsJLyogMjcwMG1WICovCisJCX0gZWxzZSB7CQkJLyogMjcwMG1WIH4gMzEwMG1WIC8gMTAwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMzEwMDAwMCkgeworCQkJCXZhbCA9IChtaW5fdVYgLSAyNjAwMDAxKSAvIDEwMDAwMDsKKwkJCQl2YWwgKz0gMjsKKwkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCisJCQkJdmFsID0gNzsKKwkJCWVsc2UKKwkJCQl2YWwgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0xETzI6CisJY2FzZSBQTTg2MDdfSURfTERPMzoKKwljYXNlIFBNODYwN19JRF9MRE85OgorCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKKwkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKQkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQorCQkJCQl2YWwgPSAwOworCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQorCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKKwkJCQllbHNlCisJCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLworCQkJZWxzZSB7CQkJLyogMjcwMG1WIH4gMjkwMG1WIC8gNTBtViAqLworCQkJCWlmIChtaW5fdVYgPD0gMjkwMDAwMCkgeworCQkJCQl2YWwgPSAobWluX3VWIC0gMjY1MDAwMSkgLyA1MDAwMDsKKwkJCQkJdmFsICs9IDM7CisJCQkJfSBlbHNlCisJCQkJCXZhbCA9IC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKKwkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KKwkJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJCXZhbCA9IDA7CisJCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCisJCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOworCQkJCWVsc2UKKwkJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCisJCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI4NTBtViAvIDUwbVYgKi8KKwkJCQlpZiAobWluX3VWIDw9IDI4NTAwMDApIHsKKwkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7CisJCQkJCXZhbCArPSAzOworCQkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCisJCQkJCXZhbCA9IDc7CisJCQkJZWxzZQorCQkJCQl2YWwgPSAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTTg2MDdfSURfTERPNDoKKwkJc3dpdGNoIChjaGlwX2lkKSB7CisJCWNhc2UgUE04NjA3X0NISVBfQTA6CisJCWNhc2UgUE04NjA3X0NISVBfQTE6CisJCQlpZiAobWluX3VWIDwgMjcwMDAwMCkJLyogMTgwMG1WIH4gMTkwMG1WIC8gNTBtViAqLworCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKKwkJCQkJdmFsID0gMDsKKwkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKKwkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7CisJCQkJZWxzZQorCQkJCQl2YWwgPSAzOwkvKiAyNzAwbVYgKi8KKwkJCWVsc2UgewkJCS8qIDI3MDBtViB+IDI5MDBtViAvIDUwbVYgKi8KKwkJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKKwkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7CisJCQkJCXZhbCArPSAzOworCQkJCX0gZWxzZQorCQkJCQl2YWwgPSAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUE04NjA3X0NISVBfQjA6CisJCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQorCQkJCQl2YWwgPSAwOworCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQorCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKKwkJCQllbHNlCisJCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLworCQkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyODAwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAyODUwMDAwKSB7CisJCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOworCQkJCQl2YWwgKz0gMzsKKwkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAyOTAwMDAwKQorCQkJCQl2YWwgPSA2OworCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQorCQkJCQl2YWwgPSA3OworCQkJCWVsc2UKKwkJCQkJdmFsID0gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0xETzY6CisJCXN3aXRjaCAoY2hpcF9pZCkgeworCQljYXNlIFBNODYwN19DSElQX0EwOgorCQljYXNlIFBNODYwN19DSElQX0ExOgorCQkJaWYgKG1pbl91ViA8IDI2MDAwMDApIHsJLyogMTgwMG1WIH4gMTkwMG1WIC8gNTBtViAqLworCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKKwkJCQkJdmFsID0gMDsKKwkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKKwkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7CisJCQkJZWxzZQorCQkJCQl2YWwgPSAzOwkvKiAyNjAwbVYgKi8KKwkJCX0gZWxzZSB7CQkvKiAyNjAwbVYgfiAyODAwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAyODAwMDAwKSB7CisJCQkJCXZhbCA9IChtaW5fdVYgLSAyNTUwMDAxKSAvIDUwMDAwOworCQkJCQl2YWwgKz0gMzsKKwkJCQl9IGVsc2UKKwkJCQkJdmFsID0gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBNODYwN19DSElQX0IwOgorCQkJaWYgKG1pbl91ViA8IDI2MDAwMDApIHsJLyogMTgwMG1WIH4gMTg1MG1WIC8gNTBtViAqLworCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKKwkJCQkJdmFsID0gMDsKKwkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTg1MDAwMCkKKwkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7CisJCQkJZWxzZQorCQkJCQl2YWwgPSAyOwkvKiAyNjAwbVYgKi8KKwkJCX0gZWxzZSB7CQkvKiAyNjAwbVYgfiAyODAwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAyODAwMDAwKSB7CisJCQkJCXZhbCA9IChtaW5fdVYgLSAyNTUwMDAxKSAvIDUwMDAwOworCQkJCQl2YWwgKz0gMjsKKwkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQorCQkJCQl2YWwgPSA3OworCQkJCWVsc2UKKwkJCQkJdmFsID0gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUE04NjA3X0lEX0xETzE0OgorCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKKwkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKKwkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KKwkJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJCXZhbCA9IDA7CisJCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCisJCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOworCQkJCWVsc2UKKwkJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCisJCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI5MDBtViAvIDUwbVYgKi8KKwkJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKKwkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7CisJCQkJCXZhbCArPSAzOworCQkJCX0gZWxzZQorCQkJCQl2YWwgPSAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUE04NjA3X0NISVBfQjA6CisJCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxODUwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQorCQkJCQl2YWwgPSAwOworCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxODUwMDAwKQorCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKKwkJCQllbHNlCisJCQkJCXZhbCA9IDI7CS8qIDI3MDBtViAqLworCQkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyOTAwbVYgLyA1MG1WICovCisJCQkJaWYgKG1pbl91ViA8PSAyOTAwMDAwKSB7CisJCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOworCQkJCQl2YWwgKz0gMjsKKwkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQorCQkJCQl2YWwgPSA3OworCQkJCWVsc2UKKwkJCQkJdmFsID0gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAodmFsID49IDApIHsKKwkJcmV0ID0gcG04NjA3X2xpc3Rfdm9sdGFnZShyZGV2LCB2YWwpOworCQlpZiAocmV0ID4gbWF4X3VWKSB7CisJCQlwcl9lcnIoImV4Y2VlZCB2b2x0YWdlIHJhbmdlICglZCAlZCkgdVYiLAorCQkJCW1pbl91ViwgbWF4X3VWKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlCisJCXByX2VycigiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCAlZCkgdVYiLCBtaW5fdVYsIG1heF91Vik7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBwbTg2MDdfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisJdWludDhfdCB2YWwsIG1hc2s7CisJaW50IHJldDsKKworCWlmIChjaGVja19yYW5nZShpbmZvLCBtaW5fdVYsIG1heF91VikpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVZcbiIsIG1pbl91ViwgbWF4X3VWKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gY2hvb3NlX3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAodWludDhfdCkocmV0IDw8IGluZm8tPnZvbF9zaGlmdCk7CisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKworCXJldCA9IHBtODYwN19zZXRfYml0cyhjaGlwLCBpbmZvLT52b2xfcmVnLCBtYXNrLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJc3dpdGNoIChpbmZvLT5kZXNjLmlkKSB7CisJY2FzZSBQTTg2MDdfSURfQlVDSzE6CisJY2FzZSBQTTg2MDdfSURfQlVDSzM6CisJCXJldCA9IHBtODYwN19zZXRfYml0cyhjaGlwLCBpbmZvLT51cGRhdGVfcmVnLAorCQkJCSAgICAgIDEgPDwgaW5mby0+dXBkYXRlX2JpdCwKKwkJCQkgICAgICAxIDw8IGluZm8tPnVwZGF0ZV9iaXQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbTg2MDdfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IHBtODYwN19jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKKwl1aW50OF90IHZhbCwgbWFzazsKKwlpbnQgcmV0OworCisJcmV0ID0gcG04NjA3X3JlZ19yZWFkKGNoaXAsIGluZm8tPnZvbF9yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKwl2YWwgPSAoKHVuc2lnbmVkIGNoYXIpcmV0ICYgbWFzaykgPj4gaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIHBtODYwN19saXN0X3ZvbHRhZ2UocmRldiwgdmFsKTsKK30KKworc3RhdGljIGludCBwbTg2MDdfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisKKwlyZXR1cm4gcG04NjA3X3NldF9iaXRzKGNoaXAsIGluZm8tPmVuYWJsZV9yZWcsCisJCQkgICAgICAgMSA8PCBpbmZvLT5lbmFibGVfYml0LAorCQkJICAgICAgIDEgPDwgaW5mby0+ZW5hYmxlX2JpdCk7Cit9CisKK3N0YXRpYyBpbnQgcG04NjA3X2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IHBtODYwN19jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKKworCXJldHVybiBwbTg2MDdfc2V0X2JpdHMoY2hpcCwgaW5mby0+ZW5hYmxlX3JlZywKKwkJCSAgICAgICAxIDw8IGluZm8tPmVuYWJsZV9iaXQsIDApOworfQorCitzdGF0aWMgaW50IHBtODYwN19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisJaW50IHJldDsKKworCXJldCA9IHBtODYwN19yZWdfcmVhZChjaGlwLCBpbmZvLT5lbmFibGVfcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAhISgodW5zaWduZWQgY2hhcilyZXQgJiAoMSA8PCBpbmZvLT5lbmFibGVfYml0KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBwbTg2MDdfcmVndWxhdG9yX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJPSBwbTg2MDdfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gcG04NjA3X2dldF92b2x0YWdlLAorCS5lbmFibGUJCT0gcG04NjA3X2VuYWJsZSwKKwkuZGlzYWJsZQk9IHBtODYwN19kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gcG04NjA3X2lzX2VuYWJsZWQsCit9OworCisjZGVmaW5lIFBNODYwN19EVkMoX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIGVyZWcsIGViaXQpIFwKK3sJCQkJCQkJCQlcCisJLmRlc2MJPSB7CQkJCQkJCVwKKwkJLm5hbWUJPSAiQlVDSyIgI19pZCwJCQkJCVwKKwkJLm9wcwk9ICZwbTg2MDdfcmVndWxhdG9yX29wcywJCQlcCisJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKKwkJLmlkCT0gUE04NjA3X0lEX0JVQ0sjI19pZCwJCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJCVwKKwl9LAkJCQkJCQkJXAorCS5taW5fdVYJCT0gKG1pbikgKiAxMDAwLAkJCQkJXAorCS5tYXhfdVYJCT0gKG1heCkgKiAxMDAwLAkJCQkJXAorCS5zdGVwX3VWCT0gKHN0ZXApICogMTAwMCwJCQkJXAorCS52b2xfcmVnCT0gUE04NjA3XyMjdnJlZywJCQkJXAorCS52b2xfc2hpZnQJPSAoMCksCQkJCQkJXAorCS52b2xfbmJpdHMJPSAobmJpdHMpLAkJCQkJXAorCS51cGRhdGVfcmVnCT0gUE04NjA3XyMjdXJlZywJCQkJXAorCS51cGRhdGVfYml0CT0gKHViaXQpLAkJCQkJXAorCS5lbmFibGVfcmVnCT0gUE04NjA3XyMjZXJlZywJCQkJXAorCS5lbmFibGVfYml0CT0gKGViaXQpLAkJCQkJXAorCS5zbG9wZV9kb3VibGUJPSAoMCksCQkJCQkJXAorfQorCisjZGVmaW5lIFBNODYwN19MRE8oX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQlcCit7CQkJCQkJCQkJXAorCS5kZXNjCT0gewkJCQkJCQlcCisJCS5uYW1lCT0gIkxETyIgI19pZCwJCQkJCVwKKwkJLm9wcwk9ICZwbTg2MDdfcmVndWxhdG9yX29wcywJCQlcCisJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKKwkJLmlkCT0gUE04NjA3X0lEX0xETyMjX2lkLAkJCQlcCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAkJCQkJXAorCX0sCQkJCQkJCQlcCisJLm1pbl91VgkJPSAobWluKSAqIDEwMDAsCQkJCQlcCisJLm1heF91VgkJPSAobWF4KSAqIDEwMDAsCQkJCQlcCisJLnN0ZXBfdVYJPSAoc3RlcCkgKiAxMDAwLAkJCQlcCisJLnZvbF9yZWcJPSBQTTg2MDdfIyN2cmVnLAkJCQlcCisJLnZvbF9zaGlmdAk9IChzaGlmdCksCQkJCQlcCisJLnZvbF9uYml0cwk9IChuYml0cyksCQkJCQlcCisJLmVuYWJsZV9yZWcJPSBQTTg2MDdfIyNlcmVnLAkJCQlcCisJLmVuYWJsZV9iaXQJPSAoZWJpdCksCQkJCQlcCisJLnNsb3BlX2RvdWJsZQk9ICgwKSwJCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvIHBtODYwN19yZWd1bGF0b3JfaW5mb1tdID0geworCVBNODYwN19EVkMoMSwgMCwgMTUwMCwgMjUsIEJVQ0sxLCA2LCBHTywgMCwgU1VQUExJRVNfRU4xMSwgMCksCisJUE04NjA3X0RWQygzLCAwLCAxNTAwLCAyNSwgQlVDSzMsIDYsIEdPLCAyLCBTVVBQTElFU19FTjExLCAyKSwKKworCVBNODYwN19MRE8oMSAsIDEyMDAsIDI4MDAsIDAsIExETzEgLCAwLCAyLCBTVVBQTElFU19FTjExLCAzKSwKKwlQTTg2MDdfTERPKDIgLCAxODAwLCAzMzAwLCAwLCBMRE8yICwgMCwgMywgU1VQUExJRVNfRU4xMSwgNCksCisJUE04NjA3X0xETygzICwgMTgwMCwgMzMwMCwgMCwgTERPMyAsIDAsIDMsIFNVUFBMSUVTX0VOMTEsIDUpLAorCVBNODYwN19MRE8oNCAsIDE4MDAsIDMzMDAsIDAsIExETzQgLCAwLCAzLCBTVVBQTElFU19FTjExLCA2KSwKKwlQTTg2MDdfTERPKDUgLCAyOTAwLCAzMzAwLCAwLCBMRE81ICwgMCwgMiwgU1VQUExJRVNfRU4xMSwgNyksCisJUE04NjA3X0xETyg2ICwgMTgwMCwgMzMwMCwgMCwgTERPNiAsIDAsIDMsIFNVUFBMSUVTX0VOMTIsIDApLAorCVBNODYwN19MRE8oNyAsIDE4MDAsIDI5MDAsIDAsIExETzcgLCAwLCAzLCBTVVBQTElFU19FTjEyLCAxKSwKKwlQTTg2MDdfTERPKDggLCAxODAwLCAyOTAwLCAwLCBMRE84ICwgMCwgMywgU1VQUExJRVNfRU4xMiwgMiksCisJUE04NjA3X0xETyg5ICwgMTgwMCwgMzMwMCwgMCwgTERPOSAsIDAsIDMsIFNVUFBMSUVTX0VOMTIsIDMpLAorCVBNODYwN19MRE8oMTAsIDEyMDAsIDMzMDAsIDAsIExETzEwLCAwLCA0LCBTVVBQTElFU19FTjExLCA0KSwKKwlQTTg2MDdfTERPKDEyLCAxMjAwLCAzMzAwLCAwLCBMRE8xMiwgMCwgNCwgU1VQUExJRVNfRU4xMSwgNSksCisJUE04NjA3X0xETygxNCwgMTgwMCwgMzMwMCwgMCwgTERPMTQsIDAsIDMsIFNVUFBMSUVTX0VOMTEsIDYpLAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICpmaW5kX3JlZ3VsYXRvcl9pbmZvKGludCBpZCkKK3sKKwlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG04NjA3X3JlZ3VsYXRvcl9pbmZvKTsgaSsrKSB7CisJCWluZm8gPSAmcG04NjA3X3JlZ3VsYXRvcl9pbmZvW2ldOworCQlpZiAoaW5mby0+ZGVzYy5pZCA9PSBpZCkKKwkJCXJldHVybiBpbmZvOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcG04NjA3X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcG04NjA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2hpcC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSBOVUxMOworCisJaW5mbyA9IGZpbmRfcmVndWxhdG9yX2luZm8ocGRldi0+aWQpOworCWlmIChpbmZvID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZWd1bGF0b3IgSUQgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5mby0+Y2hpcCA9IGNoaXA7CisKKwlpbmZvLT5yZWd1bGF0b3IgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmluZm8tPmRlc2MsICZwZGV2LT5kZXYsCisJCQkJCSAgICAgcGRhdGEtPnJlZ3VsYXRvcltwZGV2LT5pZF0sIGluZm8pOworCWlmIChJU19FUlIoaW5mby0+cmVndWxhdG9yKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yICVzXG4iLAorCQkJaW5mby0+ZGVzYy5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoaW5mby0+cmVndWxhdG9yKTsKKwl9CisKKwkvKiBjaGVjayBEVkMgcmFtcCBzbG9wZSBkb3VibGUgKi8KKwlpZiAoaW5mby0+ZGVzYy5pZCA9PSBQTTg2MDdfSURfQlVDSzMpCisJCWlmIChpbmZvLT5jaGlwLT5idWNrM19kb3VibGUpCisJCQlpbmZvLT5zbG9wZV9kb3VibGUgPSAxOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtODYwN19yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmVndWxhdG9yX3VucmVnaXN0ZXIoaW5mby0+cmVndWxhdG9yKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBQTTg2MDdfUkVHVUxBVE9SX0RSSVZFUihfbmFtZSkJCQkJXAorewkJCQkJCQkJXAorCS5kcml2ZXIJCT0gewkJCQkJXAorCQkubmFtZQk9ICI4OHBtODYwNy0iICNfbmFtZSwJCQlcCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAkJCQlcCisJfSwJCQkJCQkJXAorCS5wcm9iZQkJPSBwbTg2MDdfcmVndWxhdG9yX3Byb2JlLAkJXAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocG04NjA3X3JlZ3VsYXRvcl9yZW1vdmUpLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYwN19yZWd1bGF0b3JfZHJpdmVyW10gPSB7CisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIoYnVjazEpLAorCVBNODYwN19SRUdVTEFUT1JfRFJJVkVSKGJ1Y2syKSwKKwlQTTg2MDdfUkVHVUxBVE9SX0RSSVZFUihidWNrMyksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvMSksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvMiksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvMyksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvNCksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvNSksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvNiksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvNyksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvOCksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvOSksCisJUE04NjA3X1JFR1VMQVRPUl9EUklWRVIobGRvMTApLAorCVBNODYwN19SRUdVTEFUT1JfRFJJVkVSKGxkbzEyKSwKKwlQTTg2MDdfUkVHVUxBVE9SX0RSSVZFUihsZG8xNCksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbTg2MDdfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgY291bnQsIHJldDsKKworCWNvdW50ID0gQVJSQVlfU0laRShwbTg2MDdfcmVndWxhdG9yX2RyaXZlcik7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwbTg2MDdfcmVndWxhdG9yX2RyaXZlcltpXSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciBkcml2ZXI6ICVkXG4iLAorCQkJCXJldCk7CisJfQorCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKHBtODYwN19yZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbTg2MDdfcmVndWxhdG9yX2V4aXQodm9pZCkKK3sKKwlpbnQgaSwgY291bnQ7CisKKwljb3VudCA9IEFSUkFZX1NJWkUocG04NjA3X3JlZ3VsYXRvcl9kcml2ZXIpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcG04NjA3X3JlZ3VsYXRvcl9kcml2ZXJbaV0pOworfQorbW9kdWxlX2V4aXQocG04NjA3X3JlZ3VsYXRvcl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWd1bGF0b3IgRHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA3IFBNSUMiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ODhwbTg2MDctcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCBiY2JiMTYxLi4yNjJmNjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTY5LDggKzY5LDE1IEBACiAJICByZWd1bGF0b3IgdmlhIEkyQyBidXMuIFRoZSBwcm92aWRlZCByZWd1bGF0b3IgaXMgc3VpdGFibGUKIAkgIGZvciBQWEEyN3ggY2hpcHMgdG8gY29udHJvbCBWQ0NfQ09SRSBhbmQgVkNDX1VTSU0gdm9sdGFnZXMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfTUFYODY2MAorCXRyaXN0YXRlICJNYXhpbSA4NjYwLzg2NjEgdm9sdGFnZSByZWd1bGF0b3IiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDg2NjAvODY2MSB2b2x0YWdlIG91dHB1dAorCSAgcmVndWxhdG9yIHZpYSBJMkMgYnVzLgorCiBjb25maWcgUkVHVUxBVE9SX1RXTDQwMzAKLQlib29sICJUSSBUV0w0MDMwL1RXTDUwMzAvVFBTNjk1eDAgUE1JQyIKKwlib29sICJUSSBUV0w0MDMwL1RXTDUwMzAvVFdMNjAzMC9UUFM2OTV4MCBQTUlDIgogCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIHZvbHRhZ2UgcmVndWxhdG9ycyBwcm92aWRlZCBieQpAQCAtMTU3LDUgKzE2NCwxMSBAQAogCSAgdGhyZWUgc3RlcC1kb3duIGNvbnZlcnRlcnMgYW5kIHR3byBnZW5lcmFsLXB1cnBvc2UgTERPIHZvbHRhZ2UgcmVndWxhdG9ycy4KIAkgIEl0IHN1cHBvcnRzIFRJJ3Mgc29mdHdhcmUgYmFzZWQgQ2xhc3MtMiBTbWFydFJlZmxleCBpbXBsZW1lbnRhdGlvbi4KIAorY29uZmlnIFJFR1VMQVRPUl84OFBNODYwNworCWJvb2wgIk1hcnZlbGwgODhQTTg2MDcgUG93ZXIgcmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIE1GRF84OFBNODYwNz15CisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgODhQTTg2MDcgdm9sdGFnZSByZWd1bGF0b3IgY2hpcHMuCisKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggNDI1N2E4Ni4uYjNjODA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTExLDcgKzExLDggQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMikgKz0gYnEyNDAyMi5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSkgKz0gbHAzOTcxLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NikgKz0gbWF4MTU4Ni5vCi1vYmotJChDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzApICs9IHR3bDQwMzAtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMCkgKz0gdHdsLXJlZ3VsYXRvci5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDg2NjApICs9IG1heDg2NjAubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1kY2RjLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzFYKSArPSB3bTgzMXgtaXNpbmsubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1sZG8ubwpAQCAtMjAsMTAgKzIxLDExIEBACiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0RBOTAzWCkJKz0gZGE5MDN4Lm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfUENGNTA2MzMpICs9IHBjZjUwNjMzLXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1BDQVApICs9IHBjYXAtcmVndWxhdG9yLm8KLW9iai0kKENPTkZJR19SRUdVTEFUT1JfTUMxMzc4MykgKz0gbWMxMzc4My5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX01DMTM3ODMpICs9IG1jMTM3ODMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQUIzMTAwKSArPSBhYjMxMDAubwogCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzKSArPSB0cHM2NTAyMy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCkgKz0gdHBzNjUwN3gtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfODhQTTg2MDcpICs9IDg4cG04NjA3Lm8KIAogY2NmbGFncy0kKENPTkZJR19SRUdVTEFUT1JfREVCVUcpICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYWIzMTAwLmMKaW5kZXggNDlhZWVlOC4uYjM0OWRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYWIzMTAwLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYWIzMTAwLmMKQEAgLTgxLDcgKzgxLDcgQEAKICNkZWZpbmUgTERPX0NfVk9MVEFHRSAyNjUwMDAwCiAjZGVmaW5lIExET19EX1ZPTFRBR0UgMjY1MDAwMAogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IGxkb19lX2J1Y2tfdHlwX3ZvbHRhZ2VzW10gPSB7CitzdGF0aWMgY29uc3QgaW50IGxkb19lX2J1Y2tfdHlwX3ZvbHRhZ2VzW10gPSB7CiAJMTgwMDAwMCwKIAkxNDAwMDAwLAogCTEzMDAwMDAsCkBAIC05MSw3ICs5MSw3IEBACiAJOTAwMDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBsZG9fZl90eXBfdm9sdGFnZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbGRvX2ZfdHlwX3ZvbHRhZ2VzW10gPSB7CiAJMTgwMDAwMCwKIAkxNDAwMDAwLAogCTEzMDAwMDAsCkBAIC0xMDIsMjEgKzEwMiwyMSBAQAogCTI2NTAwMDAsCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGNvbnN0IGxkb19nX3R5cF92b2x0YWdlc1tdID0geworc3RhdGljIGNvbnN0IGludCBsZG9fZ190eXBfdm9sdGFnZXNbXSA9IHsKIAkyODUwMDAwLAogCTI3NTAwMDAsCiAJMTgwMDAwMCwKIAkxNTAwMDAwLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBjb25zdCBsZG9faF90eXBfdm9sdGFnZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgbGRvX2hfdHlwX3ZvbHRhZ2VzW10gPSB7CiAJMjc1MDAwMCwKIAkxODAwMDAwLAogCTE1MDAwMDAsCiAJMTIwMDAwMCwKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgY29uc3QgbGRvX2tfdHlwX3ZvbHRhZ2VzW10gPSB7CitzdGF0aWMgY29uc3QgaW50IGxkb19rX3R5cF92b2x0YWdlc1tdID0gewogCTI3NTAwMDAsCiAJMTgwMDAwMCwKIH07CkBAIC0yNDEsMjQgKzI0MSwxMiBAQAogCSAqIExETyBEIGlzIGEgc3BlY2lhbCByZWd1bGF0b3IuIFdoZW4gaXQgaXMgZGlzYWJsZWQsIHRoZSBlbnRpcmUKIAkgKiBzeXN0ZW0gaXMgc2h1dCBkb3duLiBTbyB0aGlzIGlzIGhhbmRsZWQgc3BlY2lhbGx5LgogCSAqLworCXByX2luZm8oIkNhbGxlZCBhYjMxMDBfZGlzYWJsZV9yZWd1bGF0b3JcbiIpOwogCWlmIChhYnJlZy0+cmVncmVnID09IEFCMzEwMF9MRE9fRCkgewotCQlpbnQgaTsKLQogCQlkZXZfaW5mbygmcmVnLT5kZXYsICJkaXNhYmxpbmcgTERPIEQgLSBzaHV0IGRvd24gc3lzdGVtXG4iKTsKLQkJLyoKLQkJICogU2V0IHJlZ3VsYXRvcnMgdG8gZGVmYXVsdCB2YWx1ZXMsIGlnbm9yZSBhbnkgZXJyb3JzLAotCQkgKiB3ZSdyZSBnb2luZyBET1dOCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYjMxMDBfcmVnX2luaXRfb3JkZXIpOyBpKyspIHsKLQkJCSh2b2lkKSBhYjMxMDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWJyZWctPmFiMzEwMCwKLQkJCQkJYWIzMTAwX3JlZ19pbml0X29yZGVyW2ldLAotCQkJCQlhYnJlZy0+cGxmZGF0YS0+cmVnX2luaXR2YWxzW2ldKTsKLQkJfQotCiAJCS8qIFNldHRpbmcgTERPIEQgdG8gMHgwMCBjdXRzIHRoZSBwb3dlciB0byB0aGUgU29DICovCiAJCXJldHVybiBhYjMxMDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWJyZWctPmFiMzEwMCwKIAkJCQkJCQkgQUIzMTAwX0xET19ELCAweDAwVSk7Ci0KIAl9CiAKIAkvKgpAQCAtNjA3LDEzICs1OTUsNiBAQAogCQl9CiAJfQogCi0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiTERPIEQgcmVndWxhdG9yIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLAotCQkJZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KIAkvKiBSZWdpc3RlciB0aGUgcmVndWxhdG9ycyAqLwogCWZvciAoaSA9IDA7IGkgPCBBQjMxMDBfTlVNX1JFR1VMQVRPUlM7IGkrKykgewogCQlzdHJ1Y3QgYWIzMTAwX3JlZ3VsYXRvciAqcmVnID0gJmFiMzEwMF9yZWd1bGF0b3JzW2ldOwpAQCAtNjg4LDcgKzY2OSw3IEBACiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBhYjMxMDBfcmVndWxhdG9yc19leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhYjMxMDBfcmVndWxhdG9yc19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhYjMxMDBfcmVndWxhdG9yc19kcml2ZXIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoYWIzMTAwX3JlZ3VsYXRvcnNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggZWZlNTY4ZC4uNjg2ZWYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtNjYsNiArNjYsMTYgQEAKIHN0YXRpYyB2b2lkIF9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSk7CiAKK3N0YXRpYyBjb25zdCBjaGFyICpyZGV2X2dldF9uYW1lKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWlmIChyZGV2LT5jb25zdHJhaW50cyAmJiByZGV2LT5jb25zdHJhaW50cy0+bmFtZSkKKwkJcmV0dXJuIHJkZXYtPmNvbnN0cmFpbnRzLT5uYW1lOworCWVsc2UgaWYgKHJkZXYtPmRlc2MtPm5hbWUpCisJCXJldHVybiByZGV2LT5kZXNjLT5uYW1lOworCWVsc2UKKwkJcmV0dXJuICIiOworfQorCiAvKiBnZXRzIHRoZSByZWd1bGF0b3IgZm9yIGEgZ2l2ZW4gY29uc3VtZXIgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqZ2V0X2RldmljZV9yZWd1bGF0b3Ioc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTYsMTIgKzEwNiwxMiBAQAogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBjb25zdHJhaW50cyBmb3IgJXNcbiIsIF9fZnVuY19fLAotCQkgICAgICAgcmRldi0+ZGVzYy0+bmFtZSk7CisJCSAgICAgICByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9vcHNfbWFzayAmIFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb3BlcmF0aW9uIG5vdCBhbGxvd2VkIGZvciAlc1xuIiwKLQkJICAgICAgIF9fZnVuY19fLCByZGV2LT5kZXNjLT5uYW1lKTsKKwkJICAgICAgIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKQEAgLTEyNCwxMiArMTM0LDEyIEBACiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIGNvbnN0cmFpbnRzIGZvciAlc1xuIiwgX19mdW5jX18sCi0JCSAgICAgICByZGV2LT5kZXNjLT5uYW1lKTsKKwkJICAgICAgIHJkZXZfZ2V0X25hbWUocmRldikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCEocmRldi0+Y29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5UKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcGVyYXRpb24gbm90IGFsbG93ZWQgZm9yICVzXG4iLAotCQkgICAgICAgX19mdW5jX18sIHJkZXYtPmRlc2MtPm5hbWUpOworCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIApAQCAtMTU5LDE3ICsxNjksMTcgQEAKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gY29uc3RyYWludHMgZm9yICVzXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIHJkZXYtPmRlc2MtPm5hbWUpOworCQkgICAgICAgcmRldl9nZXRfbmFtZShyZGV2KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoIShyZGV2LT5jb25zdHJhaW50cy0+dmFsaWRfb3BzX21hc2sgJiBSRUdVTEFUT1JfQ0hBTkdFX01PREUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9wZXJhdGlvbiBub3QgYWxsb3dlZCBmb3IgJXNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7CisJCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCWlmICghKHJkZXYtPmNvbnN0cmFpbnRzLT52YWxpZF9tb2Rlc19tYXNrICYgbW9kZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBtb2RlICV4IGZvciAlc1xuIiwKLQkJICAgICAgIF9fZnVuY19fLCBtb2RlLCByZGV2LT5kZXNjLT5uYW1lKTsKKwkJICAgICAgIF9fZnVuY19fLCBtb2RlLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMTgwLDEyICsxOTAsMTIgQEAKIHsKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIGNvbnN0cmFpbnRzIGZvciAlc1xuIiwgX19mdW5jX18sCi0JCSAgICAgICByZGV2LT5kZXNjLT5uYW1lKTsKKwkJICAgICAgIHJkZXZfZ2V0X25hbWUocmRldikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCEocmRldi0+Y29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9EUk1TKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcGVyYXRpb24gbm90IGFsbG93ZWQgZm9yICVzXG4iLAotCQkgICAgICAgX19mdW5jX18sIHJkZXYtPmRlc2MtPm5hbWUpOworCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAlyZXR1cm4gMDsKQEAgLTIzMCwxNiArMjQwLDggQEAKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAKLQlpZiAocmRldi0+Y29uc3RyYWludHMgJiYgcmRldi0+Y29uc3RyYWludHMtPm5hbWUpCi0JCW5hbWUgPSByZGV2LT5jb25zdHJhaW50cy0+bmFtZTsKLQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQotCQluYW1lID0gcmRldi0+ZGVzYy0+bmFtZTsKLQllbHNlCi0JCW5hbWUgPSAiIjsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcmRldl9nZXRfbmFtZShyZGV2KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9wcmludF9vcG1vZGUoY2hhciAqYnVmLCBpbnQgbW9kZSkKQEAgLTM4OCw3ICszOTAsNyBAQAogCiAJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVndWxhdG9yLCAmcmRldi0+Y29uc3VtZXJfbGlzdCwgbGlzdCkKLQkgICAgdUEgKz0gcmVndWxhdG9yLT51QV9sb2FkOworCQl1QSArPSByZWd1bGF0b3ItPnVBX2xvYWQ7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHVBKTsKIH0KQEAgLTU2Myw3ICs1NjUsNyBAQAogCiAJLyogY2FsYyB0b3RhbCByZXF1ZXN0ZWQgbG9hZCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJnJkZXYtPmNvbnN1bWVyX2xpc3QsIGxpc3QpCi0JICAgIGN1cnJlbnRfdUEgKz0gc2libGluZy0+dUFfbG9hZDsKKwkJY3VycmVudF91QSArPSBzaWJsaW5nLT51QV9sb2FkOwogCiAJLyogbm93IGdldCB0aGUgb3B0aW11bSBtb2RlIGZvciBvdXIgbmV3IHRvdGFsIHJlZ3VsYXRvciBsb2FkICovCiAJbW9kZSA9IHJkZXYtPmRlc2MtPm9wcy0+Z2V0X29wdGltdW1fbW9kZShyZGV2LCBpbnB1dF91ViwKQEAgLTU3OSwxMCArNTgxLDI5IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9zdGF0ZSAqcnN0YXRlKQogewogCWludCByZXQgPSAwOworCWJvb2wgY2FuX3NldF9zdGF0ZTsKIAotCS8qIGVuYWJsZSAmIGRpc2FibGUgYXJlIG1hbmRhdG9yeSBmb3Igc3VzcGVuZCBjb250cm9sICovCi0JaWYgKCFyZGV2LT5kZXNjLT5vcHMtPnNldF9zdXNwZW5kX2VuYWJsZSB8fAotCQkhcmRldi0+ZGVzYy0+b3BzLT5zZXRfc3VzcGVuZF9kaXNhYmxlKSB7CisJY2FuX3NldF9zdGF0ZSA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZW5hYmxlICYmCisJCXJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZGlzYWJsZTsKKworCS8qIElmIHdlIGhhdmUgbm8gc3VzcGVuZCBtb2RlIGNvbmZpZ3JhdGlvbiBkb24ndCBzZXQgYW55dGhpbmc7CisJICogb25seSB3YXJuIGlmIHRoZSBkcml2ZXIgYWN0dWFsbHkgbWFrZXMgdGhlIHN1c3BlbmQgbW9kZQorCSAqIGNvbmZpZ3VyYWJsZS4KKwkgKi8KKwlpZiAoIXJzdGF0ZS0+ZW5hYmxlZCAmJiAhcnN0YXRlLT5kaXNhYmxlZCkgeworCQlpZiAoY2FuX3NldF9zdGF0ZSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBjb25maWd1cmF0aW9uIGZvciAlc1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyc3RhdGUtPmVuYWJsZWQgJiYgcnN0YXRlLT5kaXNhYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yICVzXG4iLAorCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWNhbl9zZXRfc3RhdGUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gd2F5IHRvIHNldCBzdXNwZW5kIHN0YXRlXG4iLAogCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MSwyNSArNjYyLDQzIEBACiB7CiAJc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzID0gcmRldi0+Y29uc3RyYWludHM7CiAJY2hhciBidWZbODBdOwotCWludCBjb3VudDsKKwlpbnQgY291bnQgPSAwOworCWludCByZXQ7CiAKLQlpZiAocmRldi0+ZGVzYy0+dHlwZSA9PSBSRUdVTEFUT1JfVk9MVEFHRSkgeworCWlmIChjb25zdHJhaW50cy0+bWluX3VWICYmIGNvbnN0cmFpbnRzLT5tYXhfdVYpIHsKIAkJaWYgKGNvbnN0cmFpbnRzLT5taW5fdVYgPT0gY29uc3RyYWludHMtPm1heF91VikKLQkJCWNvdW50ID0gc3ByaW50ZihidWYsICIlZCBtViAiLAotCQkJCQljb25zdHJhaW50cy0+bWluX3VWIC8gMTAwMCk7CisJCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJWQgbVYgIiwKKwkJCQkJIGNvbnN0cmFpbnRzLT5taW5fdVYgLyAxMDAwKTsKIAkJZWxzZQotCQkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkIDwtLT4gJWQgbVYgIiwKLQkJCQkJY29uc3RyYWludHMtPm1pbl91ViAvIDEwMDAsCi0JCQkJCWNvbnN0cmFpbnRzLT5tYXhfdVYgLyAxMDAwKTsKLQl9IGVsc2UgewotCQlpZiAoY29uc3RyYWludHMtPm1pbl91QSA9PSBjb25zdHJhaW50cy0+bWF4X3VBKQotCQkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkIG1BICIsCi0JCQkJCWNvbnN0cmFpbnRzLT5taW5fdUEgLyAxMDAwKTsKLQkJZWxzZQotCQkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkIDwtLT4gJWQgbUEgIiwKLQkJCQkJY29uc3RyYWludHMtPm1pbl91QSAvIDEwMDAsCi0JCQkJCWNvbnN0cmFpbnRzLT5tYXhfdUEgLyAxMDAwKTsKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlZCA8LS0+ICVkIG1WICIsCisJCQkJCSBjb25zdHJhaW50cy0+bWluX3VWIC8gMTAwMCwKKwkJCQkJIGNvbnN0cmFpbnRzLT5tYXhfdVYgLyAxMDAwKTsKIAl9CisKKwlpZiAoIWNvbnN0cmFpbnRzLT5taW5fdVYgfHwKKwkgICAgY29uc3RyYWludHMtPm1pbl91ViAhPSBjb25zdHJhaW50cy0+bWF4X3VWKSB7CisJCXJldCA9IF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocmRldik7CisJCWlmIChyZXQgPiAwKQorCQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgImF0ICVkIG1WICIsIHJldCAvIDEwMDApOworCX0KKworCWlmIChjb25zdHJhaW50cy0+bWluX3VBICYmIGNvbnN0cmFpbnRzLT5tYXhfdUEpIHsKKwkJaWYgKGNvbnN0cmFpbnRzLT5taW5fdUEgPT0gY29uc3RyYWludHMtPm1heF91QSkKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlZCBtQSAiLAorCQkJCQkgY29uc3RyYWludHMtPm1pbl91QSAvIDEwMDApOworCQllbHNlCisJCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJWQgPC0tPiAlZCBtQSAiLAorCQkJCQkgY29uc3RyYWludHMtPm1pbl91QSAvIDEwMDAsCisJCQkJCSBjb25zdHJhaW50cy0+bWF4X3VBIC8gMTAwMCk7CisJfQorCisJaWYgKCFjb25zdHJhaW50cy0+bWluX3VBIHx8CisJICAgIGNvbnN0cmFpbnRzLT5taW5fdUEgIT0gY29uc3RyYWludHMtPm1heF91QSkgeworCQlyZXQgPSBfcmVndWxhdG9yX2dldF9jdXJyZW50X2xpbWl0KHJkZXYpOworCQlpZiAocmV0ID4gMCkKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICJhdCAlZCB1QSAiLCByZXQgLyAxMDAwKTsKKwl9CisKIAlpZiAoY29uc3RyYWludHMtPnZhbGlkX21vZGVzX21hc2sgJiBSRUdVTEFUT1JfTU9ERV9GQVNUKQogCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiZmFzdCAiKTsKIAlpZiAoY29uc3RyYWludHMtPnZhbGlkX21vZGVzX21hc2sgJiBSRUdVTEFUT1JfTU9ERV9OT1JNQUwpCkBAIC02NjksMzMgKzcwOCwzMCBAQAogCWlmIChjb25zdHJhaW50cy0+dmFsaWRfbW9kZXNfbWFzayAmIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlkpCiAJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICJzdGFuZGJ5Iik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJyZWd1bGF0b3I6ICVzOiAlc1xuIiwgcmRldi0+ZGVzYy0+bmFtZSwgYnVmKTsKKwlwcmludGsoS0VSTl9JTkZPICJyZWd1bGF0b3I6ICVzOiAlc1xuIiwgcmRldl9nZXRfbmFtZShyZGV2KSwgYnVmKTsKIH0KIAotLyoqCi0gKiBzZXRfbWFjaGluZV9jb25zdHJhaW50cyAtIHNldHMgcmVndWxhdG9yIGNvbnN0cmFpbnRzCi0gKiBAcmRldjogcmVndWxhdG9yIHNvdXJjZQotICogQGNvbnN0cmFpbnRzOiBjb25zdHJhaW50cyB0byBhcHBseQotICoKLSAqIEFsbG93cyBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIGRlZmluZSBhbmQgY29uc3RyYWluCi0gKiByZWd1bGF0b3IgY2lyY3VpdHMgZS5nLiB2YWxpZCB2b2x0YWdlL2N1cnJlbnQgcmFuZ2VzLCBldGMuICBOT1RFOgotICogQ29uc3RyYWludHMgKm11c3QqIGJlIHNldCBieSBwbGF0Zm9ybSBjb2RlIGluIG9yZGVyIGZvciBzb21lCi0gKiByZWd1bGF0b3Igb3BlcmF0aW9ucyB0byBwcm9jZWVkIGkuZS4gc2V0X3ZvbHRhZ2UsIHNldF9jdXJyZW50X2xpbWl0LAotICogc2V0X21vZGUuCi0gKi8KLXN0YXRpYyBpbnQgc2V0X21hY2hpbmVfY29uc3RyYWludHMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCitzdGF0aWMgaW50IG1hY2hpbmVfY29uc3RyYWludHNfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMpCiB7Ci0JaW50IHJldCA9IDA7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgcmVndWxhdG9yX29wcyAqb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCWNvbnN0IGNoYXIgKm5hbWUgPSByZGV2X2dldF9uYW1lKHJkZXYpOworCWludCByZXQ7CiAKLQlpZiAoY29uc3RyYWludHMtPm5hbWUpCi0JCW5hbWUgPSBjb25zdHJhaW50cy0+bmFtZTsKLQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQotCQluYW1lID0gcmRldi0+ZGVzYy0+bmFtZTsKLQllbHNlCi0JCW5hbWUgPSAicmVndWxhdG9yIjsKKwkvKiBkbyB3ZSBuZWVkIHRvIGFwcGx5IHRoZSBjb25zdHJhaW50IHZvbHRhZ2UgKi8KKwlpZiAocmRldi0+Y29uc3RyYWludHMtPmFwcGx5X3VWICYmCisJCXJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYgPT0gcmRldi0+Y29uc3RyYWludHMtPm1heF91ViAmJgorCQlvcHMtPnNldF92b2x0YWdlKSB7CisJCXJldCA9IG9wcy0+c2V0X3ZvbHRhZ2UocmRldiwKKwkJCXJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYsIHJkZXYtPmNvbnN0cmFpbnRzLT5tYXhfdVYpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYXBwbHkgJWR1ViBjb25zdHJhaW50IHRvICVzXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywKKwkJCQkgICAgICAgcmRldi0+Y29uc3RyYWludHMtPm1pbl91ViwgbmFtZSk7CisJCQkJcmRldi0+Y29uc3RyYWludHMgPSBOVUxMOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJfQogCiAJLyogY29uc3RyYWluIG1hY2hpbmUtbGV2ZWwgdm9sdGFnZSBzcGVjcyB0byBmaXQKIAkgKiB0aGUgYWN0dWFsIHJhbmdlIHN1cHBvcnRlZCBieSB0aGlzIHJlZ3VsYXRvci4KQEAgLTcxOSwxNCArNzU1LDEzIEBACiAKIAkJLyogdm9sdGFnZSBjb25zdHJhaW50cyBhcmUgb3B0aW9uYWwgKi8KIAkJaWYgKChjbWluID09IDApICYmIChjbWF4ID09IDApKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gMDsKIAogCQkvKiBlbHNlIHJlcXVpcmUgZXhwbGljaXQgbWFjaGluZS1sZXZlbCBjb25zdHJhaW50cyAqLwogCQlpZiAoY21pbiA8PSAwIHx8IGNtYXggPD0gMCB8fCBjbWF4IDwgY21pbikgewogCQkJcHJfZXJyKCIlczogJXMgJyVzJyB2b2x0YWdlIGNvbnN0cmFpbnRzXG4iLAogCQkJCSAgICAgICBfX2Z1bmNfXywgImludmFsaWQiLCBuYW1lKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJLyogaW5pdGlhbDogW2NtaW4uLmNtYXhdIHZhbGlkLCBbbWluX3VWLi5tYXhfdVZdIG5vdCAqLwpAQCAtNzQ4LDggKzc4Myw3IEBACiAJCWlmIChtYXhfdVYgPCBtaW5fdVYpIHsKIAkJCXByX2VycigiJXM6ICVzICclcycgdm9sdGFnZSBjb25zdHJhaW50c1xuIiwKIAkJCQkgICAgICAgX19mdW5jX18sICJ1bnN1cHBvcnRhYmxlIiwgbmFtZSk7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCS8qIHVzZSByZWd1bGF0b3IncyBzdWJzZXQgb2YgbWFjaGluZSBjb25zdHJhaW50cyAqLwpAQCAtNzY3LDIyICs4MDEsMzQgQEAKIAkJfQogCX0KIAorCXJldHVybiAwOworfQorCisvKioKKyAqIHNldF9tYWNoaW5lX2NvbnN0cmFpbnRzIC0gc2V0cyByZWd1bGF0b3IgY29uc3RyYWludHMKKyAqIEByZGV2OiByZWd1bGF0b3Igc291cmNlCisgKiBAY29uc3RyYWludHM6IGNvbnN0cmFpbnRzIHRvIGFwcGx5CisgKgorICogQWxsb3dzIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIGNvZGUgdG8gZGVmaW5lIGFuZCBjb25zdHJhaW4KKyAqIHJlZ3VsYXRvciBjaXJjdWl0cyBlLmcuIHZhbGlkIHZvbHRhZ2UvY3VycmVudCByYW5nZXMsIGV0Yy4gIE5PVEU6CisgKiBDb25zdHJhaW50cyAqbXVzdCogYmUgc2V0IGJ5IHBsYXRmb3JtIGNvZGUgaW4gb3JkZXIgZm9yIHNvbWUKKyAqIHJlZ3VsYXRvciBvcGVyYXRpb25zIHRvIHByb2NlZWQgaS5lLiBzZXRfdm9sdGFnZSwgc2V0X2N1cnJlbnRfbGltaXQsCisgKiBzZXRfbW9kZS4KKyAqLworc3RhdGljIGludCBzZXRfbWFjaGluZV9jb25zdHJhaW50cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMpCit7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX29wcyAqb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCiAJcmRldi0+Y29uc3RyYWludHMgPSBjb25zdHJhaW50czsKIAotCS8qIGRvIHdlIG5lZWQgdG8gYXBwbHkgdGhlIGNvbnN0cmFpbnQgdm9sdGFnZSAqLwotCWlmIChyZGV2LT5jb25zdHJhaW50cy0+YXBwbHlfdVYgJiYKLQkJcmRldi0+Y29uc3RyYWludHMtPm1pbl91ViA9PSByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWICYmCi0JCW9wcy0+c2V0X3ZvbHRhZ2UpIHsKLQkJcmV0ID0gb3BzLT5zZXRfdm9sdGFnZShyZGV2LAotCQkJcmRldi0+Y29uc3RyYWludHMtPm1pbl91ViwgcmRldi0+Y29uc3RyYWludHMtPm1heF91Vik7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhcHBseSAlZHVWIGNvbnN0cmFpbnQgdG8gJXNcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLAotCQkJCSAgICAgICByZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLCBuYW1lKTsKLQkJCQlyZGV2LT5jb25zdHJhaW50cyA9IE5VTEw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JfQorCW5hbWUgPSByZGV2X2dldF9uYW1lKHJkZXYpOworCisJcmV0ID0gbWFjaGluZV9jb25zdHJhaW50c192b2x0YWdlKHJkZXYsIGNvbnN0cmFpbnRzKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OwogCiAJLyogZG8gd2UgbmVlZCB0byBzZXR1cCBvdXIgc3VzcGVuZCBzdGF0ZSAqLwogCWlmIChjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSkgewpAQCAtOTAzLDcgKzk0OSw3IEBACiAJCQkJZGV2X25hbWUoJm5vZGUtPnJlZ3VsYXRvci0+ZGV2KSwKIAkJCQlub2RlLT5yZWd1bGF0b3ItPmRlc2MtPm5hbWUsCiAJCQkJc3VwcGx5LAotCQkJCWRldl9uYW1lKCZyZGV2LT5kZXYpLCByZGV2LT5kZXNjLT5uYW1lKTsKKwkJCQlkZXZfbmFtZSgmcmRldi0+ZGV2KSwgcmRldl9nZXRfbmFtZShyZGV2KSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xMjEyLDcgKzEyNTgsNyBAQAogCQlyZXQgPSBfcmVndWxhdG9yX2VuYWJsZShyZGV2LT5zdXBwbHkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGVuYWJsZSAlczogJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJkZXYtPmRlc2MtPm5hbWUsIHJldCk7CisJCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMTIzOCw3ICsxMjg0LDcgQEAKIAkJCX0KIAkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpc19lbmFibGVkKCkgZmFpbGVkIGZvciAlczogJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJkZXYtPmRlc2MtPm5hbWUsIHJldCk7CisJCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCS8qIEZhbGx0aHJvdWdoIG9uIHBvc2l0aXZlIHJldHVybiB2YWx1ZXMgLSBhbHJlYWR5IGVuYWJsZWQgKi8KQEAgLTEyNzksNyArMTMyNSw3IEBACiAKIAlpZiAoV0FSTihyZGV2LT51c2VfY291bnQgPD0gMCwKIAkJCSJ1bmJhbGFuY2VkIGRpc2FibGVzIGZvciAlc1xuIiwKLQkJCXJkZXYtPmRlc2MtPm5hbWUpKQorCQkJcmRldl9nZXRfbmFtZShyZGV2KSkpCiAJCXJldHVybiAtRUlPOwogCiAJLyogYXJlIHdlIHRoZSBsYXN0IHVzZXIgYW5kIHBlcm1pdHRlZCB0byBkaXNhYmxlID8gKi8KQEAgLTEyOTIsNyArMTMzOCw3IEBACiAJCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUocmRldik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBkaXNhYmxlICVzXG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7CisJCQkJICAgICAgIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQl9CkBAIC0xMzQ5LDcgKzEzOTUsNyBAQAogCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUocmRldik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZm9yY2UgZGlzYWJsZSAlc1xuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7CisJCQkgICAgICAgX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQkvKiBub3RpZnkgb3RoZXIgY29uc3VtZXJzIHRoYXQgcG93ZXIgaGFzIGJlZW4gZm9yY2VkIG9mZiAqLwpAQCAtMTc2Niw3ICsxODEyLDcgQEAKIAlvdXRwdXRfdVYgPSByZGV2LT5kZXNjLT5vcHMtPmdldF92b2x0YWdlKHJkZXYpOwogCWlmIChvdXRwdXRfdVYgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIG91dHB1dCB2b2x0YWdlIGZvdW5kIGZvciAlc1xuIiwKLQkJCV9fZnVuY19fLCByZGV2LT5kZXNjLT5uYW1lKTsKKwkJCV9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzc3LDEzICsxODIzLDEzIEBACiAJCWlucHV0X3VWID0gcmRldi0+Y29uc3RyYWludHMtPmlucHV0X3VWOwogCWlmIChpbnB1dF91ViA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgaW5wdXQgdm9sdGFnZSBmb3VuZCBmb3IgJXNcbiIsCi0JCQlfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7CisJCQlfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSk7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIGNhbGMgdG90YWwgcmVxdWVzdGVkIGxvYWQgZm9yIHRoaXMgcmVndWxhdG9yICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25zdW1lciwgJnJkZXYtPmNvbnN1bWVyX2xpc3QsIGxpc3QpCi0JICAgIHRvdGFsX3VBX2xvYWQgKz0gY29uc3VtZXItPnVBX2xvYWQ7CisJCXRvdGFsX3VBX2xvYWQgKz0gY29uc3VtZXItPnVBX2xvYWQ7CiAKIAltb2RlID0gcmRldi0+ZGVzYy0+b3BzLT5nZXRfb3B0aW11bV9tb2RlKHJkZXYsCiAJCQkJCQkgaW5wdXRfdVYsIG91dHB1dF91ViwKQEAgLTE3OTEsNyArMTgzNyw3IEBACiAJcmV0ID0gcmVndWxhdG9yX2NoZWNrX21vZGUocmRldiwgbW9kZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGdldCBvcHRpbXVtIG1vZGUgZm9yICVzIEAiCi0JCQkiICVkIHVBICVkIC0+ICVkIHVWXG4iLCBfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSwKKwkJCSIgJWQgdUEgJWQgLT4gJWQgdVZcbiIsIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpLAogCQkJdG90YWxfdUFfbG9hZCwgaW5wdXRfdVYsIG91dHB1dF91Vik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE3OTksNyArMTg0NSw3IEBACiAJcmV0ID0gcmRldi0+ZGVzYy0+b3BzLT5zZXRfbW9kZShyZGV2LCBtb2RlKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gc2V0IG9wdGltdW0gbW9kZSAleCBmb3IgJXNcbiIsCi0JCQlfX2Z1bmNfXywgbW9kZSwgcmRldi0+ZGVzYy0+bmFtZSk7CisJCQlfX2Z1bmNfXywgbW9kZSwgcmRldl9nZXRfbmFtZShyZGV2KSk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBtb2RlOwpAQCAtMTg1Miw5ICsxODk4LDkgQEAKIAogCS8qIG5vdyBub3RpZnkgcmVndWxhdG9yIHdlIHN1cHBseSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoX3JkZXYsICZyZGV2LT5zdXBwbHlfbGlzdCwgc2xpc3QpIHsKLQkgIG11dGV4X2xvY2soJl9yZGV2LT5tdXRleCk7Ci0JICBfbm90aWZpZXJfY2FsbF9jaGFpbihfcmRldiwgZXZlbnQsIGRhdGEpOwotCSAgbXV0ZXhfdW5sb2NrKCZfcmRldi0+bXV0ZXgpOworCQltdXRleF9sb2NrKCZfcmRldi0+bXV0ZXgpOworCQlfbm90aWZpZXJfY2FsbF9jaGFpbihfcmRldiwgZXZlbnQsIGRhdGEpOworCQltdXRleF91bmxvY2soJl9yZGV2LT5tdXRleCk7CiAJfQogfQogCkBAIC0xODg1LDkgKzE5MzEsOSBAQAogCQljb25zdW1lcnNbaV0uY29uc3VtZXIgPSByZWd1bGF0b3JfZ2V0KGRldiwKIAkJCQkJCSAgICAgIGNvbnN1bWVyc1tpXS5zdXBwbHkpOwogCQlpZiAoSVNfRVJSKGNvbnN1bWVyc1tpXS5jb25zdW1lcikpIHsKLQkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBzdXBwbHkgJyVzJ1xuIiwKLQkJCQljb25zdW1lcnNbaV0uc3VwcGx5KTsKIAkJCXJldCA9IFBUUl9FUlIoY29uc3VtZXJzW2ldLmNvbnN1bWVyKTsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBzdXBwbHkgJyVzJzogJWRcbiIsCisJCQkJY29uc3VtZXJzW2ldLnN1cHBseSwgcmV0KTsKIAkJCWNvbnN1bWVyc1tpXS5jb25zdW1lciA9IE5VTEw7CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMTkzMCw4ICsxOTc2LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGVuYWJsZSAlc1xuIiwgY29uc3VtZXJzW2ldLnN1cHBseSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jb25zdW1lcnM7IGkrKykKKwlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBlbmFibGUgJXM6ICVkXG4iLCBjb25zdW1lcnNbaV0uc3VwcGx5LCByZXQpOworCWZvciAoLS1pOyBpID49IDA7IC0taSkKIAkJcmVndWxhdG9yX2Rpc2FibGUoY29uc3VtZXJzW2ldLmNvbnN1bWVyKTsKIAogCXJldHVybiByZXQ7CkBAIC0xOTY1LDggKzIwMTEsOSBAQAogCXJldHVybiAwOwogCiBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZGlzYWJsZSAlc1xuIiwgY29uc3VtZXJzW2ldLnN1cHBseSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jb25zdW1lcnM7IGkrKykKKwlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBkaXNhYmxlICVzOiAlZFxuIiwgY29uc3VtZXJzW2ldLnN1cHBseSwKKwkgICAgICAgcmV0KTsKKwlmb3IgKC0taTsgaSA+PSAwOyAtLWkpCiAJCXJlZ3VsYXRvcl9lbmFibGUoY29uc3VtZXJzW2ldLmNvbnN1bWVyKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMzE2LDcgKzIzNjMsNyBAQAogCiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcHJlcGFyZSAlc1xuIiwKLQkJCQlfX2Z1bmNfXywgcmRldi0+ZGVzYy0+bmFtZSk7CisJCQkJX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldikpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0yNDI5LDEyICsyNDc2LDcgQEAKIAkJb3BzID0gcmRldi0+ZGVzYy0+b3BzOwogCQljID0gcmRldi0+Y29uc3RyYWludHM7CiAKLQkJaWYgKGMgJiYgYy0+bmFtZSkKLQkJCW5hbWUgPSBjLT5uYW1lOwotCQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQotCQkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7Ci0JCWVsc2UKLQkJCW5hbWUgPSAicmVndWxhdG9yIjsKKwkJbmFtZSA9IHJkZXZfZ2V0X25hbWUocmRldik7CiAKIAkJaWYgKCFvcHMtPmRpc2FibGUgfHwgKGMgJiYgYy0+YWx3YXlzX29uKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDN4LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYwppbmRleCBhYTIyNGQ5Li5mOGM0NjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYwpAQCAtMzMxLDcgKzMzMSw3IEBACiBzdGF0aWMgaW50IGRhOTAzNF9saXN0X2xkbzEyX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJCQkJICAgICB1bnNpZ25lZCBzZWxlY3RvcikKIHsKLQlpZiAoc2VsZWN0b3IgPiBBUlJBWV9TSVpFKGRhOTAzNF9sZG8xMl9kYXRhKSkKKwlpZiAoc2VsZWN0b3IgPj0gQVJSQVlfU0laRShkYTkwMzRfbGRvMTJfZGF0YSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBkYTkwMzRfbGRvMTJfZGF0YVtzZWxlY3Rvcl0gKiAxMDAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYwppbmRleCA3ODAzYTMyLi43NmQwOGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDM5NzEuYwpAQCAtNDQ2LDggKzQ0Niw4IEBACiAJCWxwMzk3MS0+cmRldltpXSA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1tpZF0sCiAJCQlscDM5NzEtPmRldiwgcGRhdGEtPnJlZ3VsYXRvcnNbaV0uaW5pdGRhdGEsIGxwMzk3MSk7CiAKLQkJZXJyID0gSVNfRVJSKGxwMzk3MS0+cmRldltpXSk7Ci0JCWlmIChlcnIpIHsKKwkJaWYgKElTX0VSUihscDM5NzEtPnJkZXZbaV0pKSB7CisJCQllcnIgPSBQVFJfRVJSKGxwMzk3MS0+cmRldltpXSk7CiAJCQlkZXZfZXJyKGxwMzk3MS0+ZGV2LCAicmVndWxhdG9yIGluaXQgZmFpbGVkOiAlZFxuIiwKIAkJCQllcnIpOwogCQkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2MyZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY2MC5jCkBAIC0wLDAgKzEsNTEwIEBACisvKgorICogbWF4ODY2MC5jICAtLSAgVm9sdGFnZSByZWd1bGF0aW9uIGZvciB0aGUgTWF4aW0gODY2MC84NjYxCisgKgorICogYmFzZWQgb24gbWF4MTU4Ni5jIGFuZCB3bTg0MDAtcmVndWxhdG9yLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV29sZnJhbSBTYW5nLCBQZW5ndXRyb25peCBlLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBTb21lIGluZm86CisgKgorICogRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYODY2MC1NQVg4NjYxLnBkZgorICoKKyAqIFRoaXMgY2hpcCBpcyBhIGJpdCBuYXN0eSBiZWNhdXNlIGl0IGlzIGEgd3JpdGUtb25seSBkZXZpY2UuIFRodXMsIHRoZSBkcml2ZXIKKyAqIHVzZXMgc2hhZG93IHJlZ2lzdGVycyB0byBrZWVwIHRyYWNrIG9mIGl0cyB2YWx1ZXMuIFRoZSBtYWluIHByb2JsZW0gYXBwZWFycworICogdG8gYmUgdGhlIGluaXRpYWxpemF0aW9uOiBXaGVuIExpbnV4IGJvb3RzIHVwLCB3ZSBjYW5ub3Qga25vdyBpZiB0aGUgY2hpcCBpcworICogaW4gdGhlIGRlZmF1bHQgc3RhdGUgb3Igbm90LCBzbyB3ZSB3b3VsZCBoYXZlIHRvIHBhc3Mgc3VjaCBpbmZvcm1hdGlvbiBpbgorICogcGxhdGZvcm1fZGF0YS4gQXMgdGhpcyBhZGRzIGEgYml0IG9mIGNvbXBsZXhpdHkgdG8gdGhlIGRyaXZlciwgdGhpcyBpcyBsZWZ0CisgKiBvdXQgZm9yIG5vdyB1bnRpbCBpdCBpcyByZWFsbHkgbmVlZGVkLgorICoKKyAqIFtBfFN8TV1EVFYxIHJlZ2lzdGVycyBhcmUgY3VycmVudGx5IG5vdCB1c2VkLCBidXQgW0F8U3xNXURUVjIuCisgKgorICogSWYgdGhlIGRyaXZlciBpcyBmZWF0dXJlIGNvbXBsZXRlLCBpdCBtaWdodCBiZSB3b3J0aCB0byBjaGVjayBpZiBvbmUgc2V0IG9mCisgKiBmdW5jdGlvbnMgZm9yIFYzLVY3IGlzIHN1ZmZpY2llbnQuIEZvciBtYXhpbXVtIGZsZXhpYmlsaXR5IGR1cmluZworICogZGV2ZWxvcG1lbnQsIHRoZXkgYXJlIHNlcGFyYXRlZCBmb3Igbm93LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYXg4NjYwLmg+CisKKyNkZWZpbmUgTUFYODY2MF9EQ0RDX01JTl9VVgkgNzI1MDAwCisjZGVmaW5lIE1BWDg2NjBfRENEQ19NQVhfVVYJMTgwMDAwMAorI2RlZmluZSBNQVg4NjYwX0RDRENfU1RFUAkgIDI1MDAwCisjZGVmaW5lIE1BWDg2NjBfRENEQ19NQVhfU0VMCTB4MmIKKworI2RlZmluZSBNQVg4NjYwX0xETzVfTUlOX1VWCTE3MDAwMDAKKyNkZWZpbmUgTUFYODY2MF9MRE81X01BWF9VVgkyMDAwMDAwCisjZGVmaW5lIE1BWDg2NjBfTERPNV9TVEVQCSAgMjUwMDAKKyNkZWZpbmUgTUFYODY2MF9MRE81X01BWF9TRUwJMHgwYworCisjZGVmaW5lIE1BWDg2NjBfTERPNjdfTUlOX1VWCTE4MDAwMDAKKyNkZWZpbmUgTUFYODY2MF9MRE82N19NQVhfVVYJMzMwMDAwMAorI2RlZmluZSBNQVg4NjYwX0xETzY3X1NURVAJIDEwMDAwMAorI2RlZmluZSBNQVg4NjYwX0xETzY3X01BWF9TRUwJMHgwZgorCitlbnVtIHsKKwlNQVg4NjYwX09WRVIxLAorCU1BWDg2NjBfT1ZFUjIsCisJTUFYODY2MF9WQ0MxLAorCU1BWDg2NjBfQURUVjEsCisJTUFYODY2MF9BRFRWMiwKKwlNQVg4NjYwX1NEVFYxLAorCU1BWDg2NjBfU0RUVjIsCisJTUFYODY2MF9NRFRWMSwKKwlNQVg4NjYwX01EVFYyLAorCU1BWDg2NjBfTDEyVkNSLAorCU1BWDg2NjBfRlBXTSwKKwlNQVg4NjYwX05fUkVHUywJLyogbm90IGEgcmVhbCByZWdpc3RlciAqLworfTsKKworc3RydWN0IG1heDg2NjAgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJdTggc2hhZG93X3JlZ3NbTUFYODY2MF9OX1JFR1NdOwkJLyogYXMgY2hpcCBpcyB3cml0ZSBvbmx5ICovCisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXZbXTsKK307CisKK3N0YXRpYyBpbnQgbWF4ODY2MF93cml0ZShzdHJ1Y3QgbWF4ODY2MCAqbWF4ODY2MCwgdTggcmVnLCB1OCBtYXNrLCB1OCB2YWwpCit7CisJc3RhdGljIGNvbnN0IHU4IG1heDg2NjBfYWRkcmVzc2VzW01BWDg2NjBfTl9SRUdTXSA9CisJICB7IDB4MTAsIDB4MTIsIDB4MjAsIDB4MjMsIDB4MjQsIDB4MjksIDB4MmEsIDB4MzIsIDB4MzMsIDB4MzksIDB4ODAgfTsKKworCWludCByZXQ7CisJdTggcmVnX3ZhbCA9IChtYXg4NjYwLT5zaGFkb3dfcmVnc1tyZWddICYgbWFzaykgfCB2YWw7CisJZGV2X3ZkYmcoJm1heDg2NjAtPmNsaWVudC0+ZGV2LCAiV3JpdGluZyByZWcgJTAyeCB3aXRoICUwMnhcbiIsCisJCQltYXg4NjYwX2FkZHJlc3Nlc1tyZWddLCByZWdfdmFsKTsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEobWF4ODY2MC0+Y2xpZW50LAorCQkJbWF4ODY2MF9hZGRyZXNzZXNbcmVnXSwgcmVnX3ZhbCk7CisJaWYgKHJldCA9PSAwKQorCQltYXg4NjYwLT5zaGFkb3dfcmVnc1tyZWddID0gcmVnX3ZhbDsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIERDREMgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBtYXg4NjYwX2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODY2MCAqbWF4ODY2MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJdTggdmFsID0gbWF4ODY2MC0+c2hhZG93X3JlZ3NbTUFYODY2MF9PVkVSMV07CisJdTggbWFzayA9IChyZGV2X2dldF9pZChyZGV2KSA9PSBNQVg4NjYwX1YzKSA/IDEgOiA0OworCXJldHVybiAhISh2YWwgJiBtYXNrKTsKK30KKworc3RhdGljIGludCBtYXg4NjYwX2RjZGNfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCBiaXQgPSAocmRldl9nZXRfaWQocmRldikgPT0gTUFYODY2MF9WMykgPyAxIDogNDsKKwlyZXR1cm4gbWF4ODY2MF93cml0ZShtYXg4NjYwLCBNQVg4NjYwX09WRVIxLCAweGZmLCBiaXQpOworfQorCitzdGF0aWMgaW50IG1heDg2NjBfZGNkY19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCBtYXNrID0gKHJkZXZfZ2V0X2lkKHJkZXYpID09IE1BWDg2NjBfVjMpID8gfjEgOiB+NDsKKwlyZXR1cm4gbWF4ODY2MF93cml0ZShtYXg4NjYwLCBNQVg4NjYwX09WRVIxLCBtYXNrLCAwKTsKK30KKworc3RhdGljIGludCBtYXg4NjYwX2RjZGNfbGlzdChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gTUFYODY2MF9EQ0RDX01BWF9TRUwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBNQVg4NjYwX0RDRENfTUlOX1VWICsgc2VsZWN0b3IgKiBNQVg4NjYwX0RDRENfU1RFUDsKK30KKworc3RhdGljIGludCBtYXg4NjYwX2RjZGNfZ2V0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCByZWcgPSAocmRldl9nZXRfaWQocmRldikgPT0gTUFYODY2MF9WMykgPyBNQVg4NjYwX0FEVFYyIDogTUFYODY2MF9TRFRWMjsKKwl1OCBzZWxlY3RvciA9IG1heDg2NjAtPnNoYWRvd19yZWdzW3JlZ107CisJcmV0dXJuIE1BWDg2NjBfRENEQ19NSU5fVVYgKyBzZWxlY3RvciAqIE1BWDg2NjBfRENEQ19TVEVQOworfQorCitzdGF0aWMgaW50IG1heDg2NjBfZGNkY19zZXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IG1heDg2NjAgKm1heDg2NjAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXU4IHJlZywgc2VsZWN0b3IsIGJpdHM7CisJaW50IHJldDsKKworCWlmIChtaW5fdVYgPCBNQVg4NjYwX0RDRENfTUlOX1VWIHx8IG1pbl91ViA+IE1BWDg2NjBfRENEQ19NQVhfVVYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfdVYgPCBNQVg4NjYwX0RDRENfTUlOX1VWIHx8IG1heF91ViA+IE1BWDg2NjBfRENEQ19NQVhfVVYpCisJCXJldHVybiAtRUlOVkFMOworCisJc2VsZWN0b3IgPSAobWluX3VWIC0gKE1BWDg2NjBfRENEQ19NSU5fVVYgLSBNQVg4NjYwX0RDRENfU1RFUCArIDEpKQorCQkJLyBNQVg4NjYwX0RDRENfU1RFUDsKKworCXJldCA9IG1heDg2NjBfZGNkY19saXN0KHJkZXYsIHNlbGVjdG9yKTsKKwlpZiAocmV0IDwgMCB8fCByZXQgPiBtYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gKHJkZXZfZ2V0X2lkKHJkZXYpID09IE1BWDg2NjBfVjMpID8gTUFYODY2MF9BRFRWMiA6IE1BWDg2NjBfU0RUVjI7CisJcmV0ID0gbWF4ODY2MF93cml0ZShtYXg4NjYwLCByZWcsIDAsIHNlbGVjdG9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2VsZWN0IHRhcmdldCB2b2x0YWdlIHJlZ2lzdGVyIGFuZCBhY3RpdmF0ZSByZWd1bGF0aW9uICovCisJYml0cyA9IChyZGV2X2dldF9pZChyZGV2KSA9PSBNQVg4NjYwX1YzKSA/IDB4MDMgOiAweDMwOworCXJldHVybiBtYXg4NjYwX3dyaXRlKG1heDg2NjAsIE1BWDg2NjBfVkNDMSwgMHhmZiwgYml0cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg4NjYwX2RjZGNfb3BzID0geworCS5pc19lbmFibGVkID0gbWF4ODY2MF9kY2RjX2lzX2VuYWJsZWQsCisJLmxpc3Rfdm9sdGFnZSA9IG1heDg2NjBfZGNkY19saXN0LAorCS5zZXRfdm9sdGFnZSA9IG1heDg2NjBfZGNkY19zZXQsCisJLmdldF92b2x0YWdlID0gbWF4ODY2MF9kY2RjX2dldCwKK307CisKKworLyoKKyAqIExETzUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBtYXg4NjYwX2xkbzVfbGlzdChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gTUFYODY2MF9MRE81X01BWF9TRUwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBNQVg4NjYwX0xETzVfTUlOX1VWICsgc2VsZWN0b3IgKiBNQVg4NjYwX0xETzVfU1RFUDsKK30KKworc3RhdGljIGludCBtYXg4NjYwX2xkbzVfZ2V0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCBzZWxlY3RvciA9IG1heDg2NjAtPnNoYWRvd19yZWdzW01BWDg2NjBfTURUVjJdOworCisJcmV0dXJuIE1BWDg2NjBfTERPNV9NSU5fVVYgKyBzZWxlY3RvciAqIE1BWDg2NjBfTERPNV9TVEVQOworfQorCitzdGF0aWMgaW50IG1heDg2NjBfbGRvNV9zZXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IG1heDg2NjAgKm1heDg2NjAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXU4IHNlbGVjdG9yOworCWludCByZXQ7CisKKwlpZiAobWluX3VWIDwgTUFYODY2MF9MRE81X01JTl9VViB8fCBtaW5fdVYgPiBNQVg4NjYwX0xETzVfTUFYX1VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWF4X3VWIDwgTUFYODY2MF9MRE81X01JTl9VViB8fCBtYXhfdVYgPiBNQVg4NjYwX0xETzVfTUFYX1VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNlbGVjdG9yID0gKG1pbl91ViAtIChNQVg4NjYwX0xETzVfTUlOX1VWIC0gTUFYODY2MF9MRE81X1NURVAgKyAxKSkKKwkJCS8gTUFYODY2MF9MRE81X1NURVA7CisJcmV0ID0gbWF4ODY2MF9sZG81X2xpc3QocmRldiwgc2VsZWN0b3IpOworCWlmIChyZXQgPCAwIHx8IHJldCA+IG1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBtYXg4NjYwX3dyaXRlKG1heDg2NjAsIE1BWDg2NjBfTURUVjIsIDAsIHNlbGVjdG9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2VsZWN0IHRhcmdldCB2b2x0YWdlIHJlZ2lzdGVyIGFuZCBhY3RpdmF0ZSByZWd1bGF0aW9uICovCisJcmV0dXJuIG1heDg2NjBfd3JpdGUobWF4ODY2MCwgTUFYODY2MF9WQ0MxLCAweGZmLCAweGMwKTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDg2NjBfbGRvNV9vcHMgPSB7CisJLmxpc3Rfdm9sdGFnZSA9IG1heDg2NjBfbGRvNV9saXN0LAorCS5zZXRfdm9sdGFnZSA9IG1heDg2NjBfbGRvNV9zZXQsCisJLmdldF92b2x0YWdlID0gbWF4ODY2MF9sZG81X2dldCwKK307CisKKworLyoKKyAqIExETzY3IGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgbWF4ODY2MF9sZG82N19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCB2YWwgPSBtYXg4NjYwLT5zaGFkb3dfcmVnc1tNQVg4NjYwX09WRVIyXTsKKwl1OCBtYXNrID0gKHJkZXZfZ2V0X2lkKHJkZXYpID09IE1BWDg2NjBfVjYpID8gMiA6IDQ7CisJcmV0dXJuICEhKHZhbCAmIG1hc2spOworfQorCitzdGF0aWMgaW50IG1heDg2NjBfbGRvNjdfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCBiaXQgPSAocmRldl9nZXRfaWQocmRldikgPT0gTUFYODY2MF9WNikgPyAyIDogNDsKKwlyZXR1cm4gbWF4ODY2MF93cml0ZShtYXg4NjYwLCBNQVg4NjYwX09WRVIyLCAweGZmLCBiaXQpOworfQorCitzdGF0aWMgaW50IG1heDg2NjBfbGRvNjdfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODY2MCAqbWF4ODY2MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJdTggbWFzayA9IChyZGV2X2dldF9pZChyZGV2KSA9PSBNQVg4NjYwX1Y2KSA/IH4yIDogfjQ7CisJcmV0dXJuIG1heDg2NjBfd3JpdGUobWF4ODY2MCwgTUFYODY2MF9PVkVSMiwgbWFzaywgMCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODY2MF9sZG82N19saXN0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlpZiAoc2VsZWN0b3IgPiBNQVg4NjYwX0xETzY3X01BWF9TRUwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBNQVg4NjYwX0xETzY3X01JTl9VViArIHNlbGVjdG9yICogTUFYODY2MF9MRE82N19TVEVQOworfQorCitzdGF0aWMgaW50IG1heDg2NjBfbGRvNjdfZ2V0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1OCBzaGlmdCA9IChyZGV2X2dldF9pZChyZGV2KSA9PSBNQVg4NjYwX1Y2KSA/IDAgOiA0OworCXU4IHNlbGVjdG9yID0gKG1heDg2NjAtPnNoYWRvd19yZWdzW01BWDg2NjBfTDEyVkNSXSA+PiBzaGlmdCkgJiAweGY7CisKKwlyZXR1cm4gTUFYODY2MF9MRE82N19NSU5fVVYgKyBzZWxlY3RvciAqIE1BWDg2NjBfTERPNjdfU1RFUDsKK30KKworc3RhdGljIGludCBtYXg4NjYwX2xkbzY3X3NldChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgbWF4ODY2MCAqbWF4ODY2MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJdTggc2VsZWN0b3I7CisJaW50IHJldDsKKworCWlmIChtaW5fdVYgPCBNQVg4NjYwX0xETzY3X01JTl9VViB8fCBtaW5fdVYgPiBNQVg4NjYwX0xETzY3X01BWF9VVikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1heF91ViA8IE1BWDg2NjBfTERPNjdfTUlOX1VWIHx8IG1heF91ViA+IE1BWDg2NjBfTERPNjdfTUFYX1VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNlbGVjdG9yID0gKG1pbl91ViAtIChNQVg4NjYwX0xETzY3X01JTl9VViAtIE1BWDg2NjBfTERPNjdfU1RFUCArIDEpKQorCQkJLyBNQVg4NjYwX0xETzY3X1NURVA7CisKKwlyZXQgPSBtYXg4NjYwX2xkbzY3X2xpc3QocmRldiwgc2VsZWN0b3IpOworCWlmIChyZXQgPCAwIHx8IHJldCA+IG1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmRldl9nZXRfaWQocmRldikgPT0gTUFYODY2MF9WNikKKwkJcmV0dXJuIG1heDg2NjBfd3JpdGUobWF4ODY2MCwgTUFYODY2MF9MMTJWQ1IsIDB4ZjAsIHNlbGVjdG9yKTsKKwllbHNlCisJCXJldHVybiBtYXg4NjYwX3dyaXRlKG1heDg2NjAsIE1BWDg2NjBfTDEyVkNSLCAweDBmLCBzZWxlY3RvciA8PCA0KTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDg2NjBfbGRvNjdfb3BzID0geworCS5pc19lbmFibGVkID0gbWF4ODY2MF9sZG82N19pc19lbmFibGVkLAorCS5lbmFibGUgPSBtYXg4NjYwX2xkbzY3X2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1heDg2NjBfbGRvNjdfZGlzYWJsZSwKKwkubGlzdF92b2x0YWdlID0gbWF4ODY2MF9sZG82N19saXN0LAorCS5nZXRfdm9sdGFnZSA9IG1heDg2NjBfbGRvNjdfZ2V0LAorCS5zZXRfdm9sdGFnZSA9IG1heDg2NjBfbGRvNjdfc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyBtYXg4NjYwX3JlZ1tdID0geworCXsKKwkJLm5hbWUgPSAiVjMoRENEQykiLAorCQkuaWQgPSBNQVg4NjYwX1YzLAorCQkub3BzID0gJm1heDg2NjBfZGNkY19vcHMsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gTUFYODY2MF9EQ0RDX01BWF9TRUwgKyAxLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiVjQoRENEQykiLAorCQkuaWQgPSBNQVg4NjYwX1Y0LAorCQkub3BzID0gJm1heDg2NjBfZGNkY19vcHMsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gTUFYODY2MF9EQ0RDX01BWF9TRUwgKyAxLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiVjUoTERPKSIsCisJCS5pZCA9IE1BWDg2NjBfVjUsCisJCS5vcHMgPSAmbWF4ODY2MF9sZG81X29wcywKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBNQVg4NjYwX0xETzVfTUFYX1NFTCArIDEsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSA9ICJWNihMRE8pIiwKKwkJLmlkID0gTUFYODY2MF9WNiwKKwkJLm9wcyA9ICZtYXg4NjYwX2xkbzY3X29wcywKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBNQVg4NjYwX0xETzY3X01BWF9TRUwgKyAxLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiVjcoTERPKSIsCisJCS5pZCA9IE1BWDg2NjBfVjcsCisJCS5vcHMgPSAmbWF4ODY2MF9sZG82N19vcHMsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gTUFYODY2MF9MRE82N19NQVhfU0VMICsgMSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgbWF4ODY2MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXY7CisJc3RydWN0IG1heDg2NjBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtYXg4NjYwICptYXg4NjYwOworCWludCBib290X29uLCBpLCBpZCwgcmV0ID0gLUVJTlZBTDsKKworCWlmIChwZGF0YS0+bnVtX3N1YmRldnMgPiBNQVg4NjYwX1ZfRU5EKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVG9vIG11Y2ggcmVndWxhdG9ycyBmb3VuZCFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwltYXg4NjYwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDg2NjApICsKKwkJCXNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKSAqIE1BWDg2NjBfVl9FTkQsCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1heDg2NjApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWF4ODY2MC0+Y2xpZW50ID0gY2xpZW50OworCXJkZXYgPSBtYXg4NjYwLT5yZGV2OworCisJaWYgKHBkYXRhLT5lbjM0X2lzX2hpZ2gpIHsKKwkJLyogU2ltdWxhdGUgYWx3YXlzIG9uICovCisJCW1heDg2NjAtPnNoYWRvd19yZWdzW01BWDg2NjBfT1ZFUjFdID0gNTsKKwl9IGVsc2UgeworCQkvKiBPdGhlcndpc2UgZGV2aWNlcyBjYW4gYmUgdG9nZ2xlZCB2aWEgc29mdHdhcmUgKi8KKwkJbWF4ODY2MF9kY2RjX29wcy5lbmFibGUgPSBtYXg4NjYwX2RjZGNfZW5hYmxlOworCQltYXg4NjYwX2RjZGNfb3BzLmRpc2FibGUgPSBtYXg4NjYwX2RjZGNfZGlzYWJsZTsKKwl9CisKKwkvKgorCSAqIEZpcnN0LCBzZXQgdXAgc2hhZG93IHJlZ2lzdGVycyB0byBwcmV2ZW50IGdsaXRjaGVzLiBBcyBzb21lCisJICogcmVnaXN0ZXJzIGFyZSBzaGFyZWQgYmV0d2VlbiByZWd1bGF0b3JzLCBldmVyeXRoaW5nIG11c3QgYmUgcHJvcGVybHkKKwkgKiBzZXQgdXAgZm9yIGFsbCByZWd1bGF0b3JzIGluIGFkdmFuY2UuCisJICovCisJbWF4ODY2MC0+c2hhZG93X3JlZ3NbTUFYODY2MF9BRFRWMV0gPQorCQltYXg4NjYwLT5zaGFkb3dfcmVnc1tNQVg4NjYwX0FEVFYyXSA9CisJCW1heDg2NjAtPnNoYWRvd19yZWdzW01BWDg2NjBfU0RUVjFdID0KKwkJbWF4ODY2MC0+c2hhZG93X3JlZ3NbTUFYODY2MF9TRFRWMl0gPSAweDFiOworCW1heDg2NjAtPnNoYWRvd19yZWdzW01BWDg2NjBfTURUVjFdID0KKwkJbWF4ODY2MC0+c2hhZG93X3JlZ3NbTUFYODY2MF9NRFRWMl0gPSAweDA0OworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3ViZGV2czsgaSsrKSB7CisKKwkJaWYgKCFwZGF0YS0+c3ViZGV2c1tpXS5wbGF0Zm9ybV9kYXRhKQorCQkJZ290byBlcnJfZnJlZTsKKworCQlib290X29uID0gcGRhdGEtPnN1YmRldnNbaV0ucGxhdGZvcm1fZGF0YS0+Y29uc3RyYWludHMuYm9vdF9vbjsKKworCQlzd2l0Y2ggKHBkYXRhLT5zdWJkZXZzW2ldLmlkKSB7CisJCWNhc2UgTUFYODY2MF9WMzoKKwkJCWlmIChib290X29uKQorCQkJCW1heDg2NjAtPnNoYWRvd19yZWdzW01BWDg2NjBfT1ZFUjFdIHw9IDE7CisJCQlicmVhazsKKworCQljYXNlIE1BWDg2NjBfVjQ6CisJCQlpZiAoYm9vdF9vbikKKwkJCQltYXg4NjYwLT5zaGFkb3dfcmVnc1tNQVg4NjYwX09WRVIxXSB8PSA0OworCQkJYnJlYWs7CisKKwkJY2FzZSBNQVg4NjYwX1Y1OgorCQkJYnJlYWs7CisKKwkJY2FzZSBNQVg4NjYwX1Y2OgorCQkJaWYgKGJvb3Rfb24pCisJCQkJbWF4ODY2MC0+c2hhZG93X3JlZ3NbTUFYODY2MF9PVkVSMl0gfD0gMjsKKwkJCWJyZWFrOworCisJCWNhc2UgTUFYODY2MF9WNzoKKwkJCWlmICghc3RyY21wKGkyY19pZC0+bmFtZSwgIm1heDg2NjEiKSkgeworCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUmVndWxhdG9yIG5vdCBvbiB0aGlzIGNoaXAhXG4iKTsKKwkJCQlnb3RvIGVycl9mcmVlOworCQkJfQorCisJCQlpZiAoYm9vdF9vbikKKwkJCQltYXg4NjYwLT5zaGFkb3dfcmVnc1tNQVg4NjYwX09WRVIyXSB8PSA0OworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaW52YWxpZCByZWd1bGF0b3IgJXNcbiIsCisJCQkJIHBkYXRhLT5zdWJkZXZzW2ldLm5hbWUpOworCQkJZ290byBlcnJfZnJlZTsKKwkJfQorCX0KKworCS8qIEZpbmFsbHkgcmVnaXN0ZXIgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1YmRldnM7IGkrKykgeworCisJCWlkID0gcGRhdGEtPnN1YmRldnNbaV0uaWQ7CisKKwkJcmRldltpXSA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmbWF4ODY2MF9yZWdbaWRdLCAmY2xpZW50LT5kZXYsCisJCQkJCSAgICAgcGRhdGEtPnN1YmRldnNbaV0ucGxhdGZvcm1fZGF0YSwKKwkJCQkJICAgICBtYXg4NjYwKTsKKwkJaWYgKElTX0VSUihyZGV2W2ldKSkgeworCQkJcmV0ID0gUFRSX0VSUihyZGV2W2ldKTsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLAorCQkJCW1heDg2NjBfcmVnW2lkXS5uYW1lKTsKKwkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJCX0KKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCByZGV2KTsKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJNYXhpbSA4NjYwLzg2NjEgcmVndWxhdG9yIGRyaXZlciBsb2FkZWRcbiIpOworCXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwl3aGlsZSAoLS1pID49IDApCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXZbaV0pOworZXJyX2ZyZWU6CisJa2ZyZWUobWF4ODY2MCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg4NjYwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqcmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWDg2NjBfVl9FTkQ7IGkrKykKKwkJaWYgKHJkZXZbaV0pCisJCQlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2W2ldKTsKKwlrZnJlZShyZGV2KTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWF4ODY2MF9pZFtdID0geworCXsgIm1heDg2NjAiLCAwIH0sCisJeyAibWF4ODY2MSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4ODY2MF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg4NjYwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtYXg4NjYwX3Byb2JlLAorCS5yZW1vdmUgPSBtYXg4NjYwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWF4ODY2MCIsCisJfSwKKwkuaWRfdGFibGUJPSBtYXg4NjYwX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODY2MF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXg4NjYwX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwobWF4ODY2MF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDg2NjBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXg4NjYwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg4NjYwX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9ERVNDUklQVElPTigiTUFYSU0gODY2MC84NjYxIHZvbHRhZ2UgcmVndWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiV29sZnJhbSBTYW5nIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM0OTUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIFJlZ3VsYXRvciBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzEzNzgzIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2RlZmluZSBNQzEzNzgzX1JFR19TV0lUQ0hFUlM0CQkJMjgKKyNkZWZpbmUgTUMxMzc4M19SRUdfU1dJVENIRVJTNF9QTExFTgkJCSgxIDw8IDE4KQorCisjZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzUJCQkyOQorI2RlZmluZSBNQzEzNzgzX1JFR19TV0lUQ0hFUlM1X1NXM0VOCQkJKDEgPDwgMjApCisKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9STU9ERTAJCTMyCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUwX1ZBVURJT0VOCQkoMSA8PCAwKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMF9WSU9ISUVOCQkoMSA8PCAzKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMF9WSU9MT0VOCQkoMSA8PCA2KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMF9WRElHRU4JCSgxIDw8IDkpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUwX1ZHRU5FTgkJKDEgPDwgMTIpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUwX1ZSRkRJR0VOCQkoMSA8PCAxNSkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9STU9ERTBfVlJGUkVGRU4JCSgxIDw8IDE4KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMF9WUkZDUEVOCQkoMSA8PCAyMSkKKworI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMQkJMzMKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9STU9ERTFfVlNJTUVOCQkoMSA8PCAwKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMV9WRVNJTUVOCQkoMSA8PCAzKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMV9WQ0FNRU4JCSgxIDw8IDYpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUxX1ZSRkJHRU4JCSgxIDw8IDkpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUxX1ZWSUJFTgkJKDEgPDwgMTEpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUxX1ZSRjFFTgkJKDEgPDwgMTIpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUxX1ZSRjJFTgkJKDEgPDwgMTUpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUxX1ZNTUMxRU4JCSgxIDw8IDE4KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JNT0RFMV9WTU1DMkVOCQkoMSA8PCAyMSkKKworI2RlZmluZSBNQzEzNzgzX1JFR19QT1dFUk1JU0MJCQkzNAorI2RlZmluZSBNQzEzNzgzX1JFR19QT1dFUk1JU0NfR1BPMUVOCQkJKDEgPDwgNikKKyNkZWZpbmUgTUMxMzc4M19SRUdfUE9XRVJNSVNDX0dQTzJFTgkJCSgxIDw8IDgpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19HUE8zRU4JCQkoMSA8PCAxMCkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUE9XRVJNSVNDX0dQTzRFTgkJCSgxIDw8IDEyKQorCitzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3IgeworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOworCWludCByZWc7CisJaW50IGVuYWJsZV9iaXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19yZWd1bGF0b3Jfb3BzOworCisjZGVmaW5lIE1DMTM3ODNfREVGSU5FKHByZWZpeCwgX25hbWUsIF9yZWcpCQkJCVwKKwlbTUMxMzc4M18gIyMgcHJlZml4ICMjIF8gIyMgX25hbWVdID0gewkJCQlcCisJCS5kZXNjID0gewkJCQkJCVwKKwkJCS5uYW1lID0gI3ByZWZpeCAiXyIgI19uYW1lLAkJCVwKKwkJCS5vcHMgPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAkJCVwKKwkJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAorCQkJLmlkID0gTUMxMzc4M18gIyMgcHJlZml4ICMjIF8gIyMgX25hbWUsCQlcCisJCQkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJXAorCQl9LAkJCQkJCQlcCisJCS5yZWcgPSBNQzEzNzgzX1JFR18gIyMgX3JlZywJCQkJXAorCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHXyAjIyBfcmVnICMjIF8gIyMgX25hbWUgIyMgRU4sCVwKKwl9CisKKyNkZWZpbmUgTUMxMzc4M19ERUZJTkVfU1coX25hbWUsIF9yZWcpIE1DMTM3ODNfREVGSU5FKFNXLCBfbmFtZSwgX3JlZykKKyNkZWZpbmUgTUMxMzc4M19ERUZJTkVfUkVHVShfbmFtZSwgX3JlZykgTUMxMzc4M19ERUZJTkUoUkVHVSwgX25hbWUsIF9yZWcpCisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3IgbWMxMzc4M19yZWd1bGF0b3JzW10gPSB7CisJTUMxMzc4M19ERUZJTkVfU1coU1czLCBTV0lUQ0hFUlM1KSwKKwlNQzEzNzgzX0RFRklORV9TVyhQTEwsIFNXSVRDSEVSUzQpLAorCisJTUMxMzc4M19ERUZJTkVfUkVHVShWQVVESU8sIFJFR1VMQVRPUk1PREUwKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZJT0hJLCBSRUdVTEFUT1JNT0RFMCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWSU9MTywgUkVHVUxBVE9STU9ERTApLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVkRJRywgUkVHVUxBVE9STU9ERTApLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVkdFTiwgUkVHVUxBVE9STU9ERTApLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGRElHLCBSRUdVTEFUT1JNT0RFMCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWUkZSRUYsIFJFR1VMQVRPUk1PREUwKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRkNQLCBSRUdVTEFUT1JNT0RFMCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWU0lNLCBSRUdVTEFUT1JNT0RFMSksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWRVNJTSwgUkVHVUxBVE9STU9ERTEpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVkNBTSwgUkVHVUxBVE9STU9ERTEpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGQkcsIFJFR1VMQVRPUk1PREUxKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZWSUIsIFJFR1VMQVRPUk1PREUxKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRjEsIFJFR1VMQVRPUk1PREUxKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRjIsIFJFR1VMQVRPUk1PREUxKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZNTUMxLCBSRUdVTEFUT1JNT0RFMSksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWTU1DMiwgUkVHVUxBVE9STU9ERTEpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoR1BPMSwgUE9XRVJNSVNDKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKEdQTzIsIFBPV0VSTUlTQyksCisJTUMxMzc4M19ERUZJTkVfUkVHVShHUE8zLCBQT1dFUk1JU0MpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoR1BPNCwgUE9XRVJNSVNDKSwKK307CisKK3N0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2IHsKKwlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yc1tdOworfTsKKworc3RhdGljIGludCBtYzEzNzgzX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKwlyZXQgPSBtYzEzNzgzX3JlZ19ybXcocHJpdi0+bWMxMzc4MywgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5yZWcsCisJCQltYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQsCisJCQltYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQpOworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYzEzNzgzX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLCBpZCk7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisJcmV0ID0gbWMxMzc4M19yZWdfcm13KHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0ucmVnLAorCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LCAwKTsKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQocHJpdi0+bWMxMzc4MywgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5yZWcsICZ2YWwpOworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAodmFsICYgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0KSAhPSAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19yZWd1bGF0b3Jfb3BzID0geworCS5lbmFibGUgPSBtYzEzNzgzX3JlZ3VsYXRvcl9lbmFibGUsCisJLmRpc2FibGUgPSBtYzEzNzgzX3JlZ3VsYXRvcl9kaXNhYmxlLAorCS5pc19lbmFibGVkID0gbWMxMzc4M19yZWd1bGF0b3JfaXNfZW5hYmxlZCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1jMTM3ODNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXY7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CisJaW50IGksIHJldDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIm1jMTM3ODNfcmVndWxhdG9yX3Byb2JlIGlkICVkXG4iLCBwZGV2LT5pZCk7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpICsKKwkJCXBkYXRhLT5udW1fcmVndWxhdG9ycyAqIHNpemVvZihwcml2LT5yZWd1bGF0b3JzWzBdKSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5tYzEzNzgzID0gbWMxMzc4MzsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykgeworCQlpbml0X2RhdGEgPSAmcGRhdGEtPnJlZ3VsYXRvcnNbaV07CisJCXByaXYtPnJlZ3VsYXRvcnNbaV0gPSByZWd1bGF0b3JfcmVnaXN0ZXIoCisJCQkJJm1jMTM3ODNfcmVndWxhdG9yc1tpbml0X2RhdGEtPmlkXS5kZXNjLAorCQkJCSZwZGV2LT5kZXYsIGluaXRfZGF0YS0+aW5pdF9kYXRhLCBwcml2KTsKKworCQlpZiAoSVNfRVJSKHByaXYtPnJlZ3VsYXRvcnNbaV0pKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yICVzXG4iLAorCQkJCW1jMTM3ODNfcmVndWxhdG9yc1tpXS5kZXNjLm5hbWUpOworCQkJcmV0ID0gUFRSX0VSUihwcml2LT5yZWd1bGF0b3JzW2ldKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHByaXYtPnJlZ3VsYXRvcnNbaV0pOworCisJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYzEzNzgzX3JlZ3VsYXRvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCWRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZWd1bGF0b3JzOyBpKyspCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHByaXYtPnJlZ3VsYXRvcnNbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jMTM3ODNfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtYzEzNzgzLXJlZ3VsYXRvciIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYzEzNzgzX3JlZ3VsYXRvcl9yZW1vdmUpLAorCS5wcm9iZQkJPSBtYzEzNzgzX3JlZ3VsYXRvcl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jMTM3ODNfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYzEzNzgzX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG1jMTM3ODNfcmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWMxMzc4M19yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYzEzNzgzX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWMxMzc4M19yZWd1bGF0b3JfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWd1bGF0b3IgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1jMTM3ODMtcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMDIxMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8qCi0gKiBSZWd1bGF0b3IgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMtcHJpdmF0ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotCi1zdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3IgewotCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOwotCWludCByZWc7Ci0JaW50IGVuYWJsZV9iaXQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19yZWd1bGF0b3Jfb3BzOwotCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yIG1jMTM3ODNfcmVndWxhdG9yc1tdID0gewotCVtNQzEzNzgzX1NXX1NXM10gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiU1dfU1czIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfU1dfU1czLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19TV0lUQ0hFUlNfNSwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1NXQ1RSTF9TVzNfRU4sCi0JfSwKLQlbTUMxMzc4M19TV19QTExdID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlNXX1BMTCIsCi0JCQkub3BzCT0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywKLQkJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCi0JCQkuaWQJPSBNQzEzNzgzX1NXX1BMTCwKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfU1dJVENIRVJTXzQsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19TV0NUUkxfUExMX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9WQVVESU9dID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfVkFVRElPIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WQVVESU8sCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1JFR1VMQVRPUl9NT0RFXzAsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX1ZBVURJT19FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfVklPSEldID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfVklPSEkiLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZJT0hJLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19SRUdVTEFUT1JfTU9ERV8wLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9WSU9ISV9FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfVklPTE9dID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfVklPTE8iLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZJT0xPLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19SRUdVTEFUT1JfTU9ERV8wLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9WSU9MT19FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfVkRJR10gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiUkVHVV9WRElHIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WRElHLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19SRUdVTEFUT1JfTU9ERV8wLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9WRElHX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9WR0VOXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX1ZHRU4iLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZHRU4sCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1JFR1VMQVRPUl9NT0RFXzAsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX1ZHRU5fRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX1ZSRkRJR10gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiUkVHVV9WUkZESUciLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZSRkRJRywKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUkVHVUxBVE9SX01PREVfMCwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfVlJGRElHX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9WUkZSRUZdID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfVlJGUkVGIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WUkZSRUYsCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1JFR1VMQVRPUl9NT0RFXzAsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX1ZSRlJFRl9FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfVlJGQ1BdID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfVlJGQ1AiLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZSRkNQLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19SRUdVTEFUT1JfTU9ERV8wLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9WUkZDUF9FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfVlNJTV0gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiUkVHVV9WU0lNIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WU0lNLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19SRUdVTEFUT1JfTU9ERV8xLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9WU0lNX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9WRVNJTV0gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiUkVHVV9WRVNJTSIsCi0JCQkub3BzCT0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywKLQkJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCi0JCQkuaWQJPSBNQzEzNzgzX1JFR1VfVkVTSU0sCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1JFR1VMQVRPUl9NT0RFXzEsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX1ZFU0lNX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9WQ0FNXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX1ZDQU0iLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZDQU0sCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1JFR1VMQVRPUl9NT0RFXzEsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX1ZDQU1fRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX1ZSRkJHXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX1ZSRkJHIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WUkZCRywKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUkVHVUxBVE9SX01PREVfMSwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfVlJGQkdfRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX1ZWSUJdID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfVlZJQiIsCi0JCQkub3BzCT0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywKLQkJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCi0JCQkuaWQJPSBNQzEzNzgzX1JFR1VfVlZJQiwKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUkVHVUxBVE9SX01PREVfMSwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfVlZJQl9FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfVlJGMV0gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiUkVHVV9WUkYxIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WUkYxLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19SRUdVTEFUT1JfTU9ERV8xLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9WUkYxX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9WUkYyXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX1ZSRjIiLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX1ZSRjIsCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1JFR1VMQVRPUl9NT0RFXzEsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX1ZSRjJfRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX1ZNTUMxXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX1ZNTUMxIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WTU1DMSwKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUkVHVUxBVE9SX01PREVfMSwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfVk1NQzFfRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX1ZNTUMyXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX1ZNTUMyIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9WTU1DMiwKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUkVHVUxBVE9SX01PREVfMSwKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfVk1NQzJfRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX0dQTzFdID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfR1BPMSIsCi0JCQkub3BzCT0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywKLQkJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCi0JCQkuaWQJPSBNQzEzNzgzX1JFR1VfR1BPMSwKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUE9XRVJfTUlTQ0VMTEFORU9VUywKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfR1BPMV9FTiwKLQl9LAotCVtNQzEzNzgzX1JFR1VfR1BPMl0gPSB7Ci0JCS5kZXNjID0gewotCQkJLm5hbWUJPSAiUkVHVV9HUE8yIiwKLQkJCS5vcHMJPSAmbWMxMzc4M19yZWd1bGF0b3Jfb3BzLAotCQkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwKLQkJCS5pZAk9IE1DMTM3ODNfUkVHVV9HUE8yLAotCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCX0sCi0JCS5yZWcgPSBNQzEzNzgzX1JFR19QT1dFUl9NSVNDRUxMQU5FT1VTLAotCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHQ1RSTF9HUE8yX0VOLAotCX0sCi0JW01DMTM3ODNfUkVHVV9HUE8zXSA9IHsKLQkJLmRlc2MgPSB7Ci0JCQkubmFtZQk9ICJSRUdVX0dQTzMiLAotCQkJLm9wcwk9ICZtYzEzNzgzX3JlZ3VsYXRvcl9vcHMsCi0JCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAotCQkJLmlkCT0gTUMxMzc4M19SRUdVX0dQTzMsCi0JCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJfSwKLQkJLnJlZyA9IE1DMTM3ODNfUkVHX1BPV0VSX01JU0NFTExBTkVPVVMsCi0JCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdDVFJMX0dQTzNfRU4sCi0JfSwKLQlbTUMxMzc4M19SRUdVX0dQTzRdID0gewotCQkuZGVzYyA9IHsKLQkJCS5uYW1lCT0gIlJFR1VfR1BPNCIsCi0JCQkub3BzCT0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywKLQkJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCi0JCQkuaWQJPSBNQzEzNzgzX1JFR1VfR1BPNCwKLQkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQl9LAotCQkucmVnID0gTUMxMzc4M19SRUdfUE9XRVJfTUlTQ0VMTEFORU9VUywKLQkJLmVuYWJsZV9iaXQgPSBNQzEzNzgzX1JFR0NUUkxfR1BPNF9FTiwKLQl9LAotfTsKLQotc3RydWN0IG1jMTM3ODNfcHJpdiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbQVJSQVlfU0laRShtYzEzNzgzX3JlZ3VsYXRvcnMpXTsKLQlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MzsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yc1swXTsKLX07Ci0KLXN0YXRpYyBpbnQgbWMxMzc4M19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0Jc3RydWN0IG1jMTM3ODNfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0KLQlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKLQotCXJldHVybiBtYzEzNzgzX3NldF9iaXRzKHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0ucmVnLAotCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LAotCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0KTsKLX0KLQotc3RhdGljIGludCBtYzEzNzgzX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0Jc3RydWN0IG1jMTM3ODNfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7Ci0KLQlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKLQotCXJldHVybiBtYzEzNzgzX3NldF9iaXRzKHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0ucmVnLAotCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LCAwKTsKLX0KLQotc3RhdGljIGludCBtYzEzNzgzX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0Jc3RydWN0IG1jMTM3ODNfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCi0JcmV0ID0gbWMxMzc4M19yZWdfcmVhZChwcml2LT5tYzEzNzgzLCBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnJlZywgJnZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAodmFsICYgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0KSAhPSAwOwotfQotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19yZWd1bGF0b3Jfb3BzID0gewotCS5lbmFibGUJCT0gbWMxMzc4M19lbmFibGUsCi0JLmRpc2FibGUJPSBtYzEzNzgzX2Rpc2FibGUsCi0JLmlzX2VuYWJsZWQJPSBtYzEzNzgzX2lzX2VuYWJsZWQsCi19OwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBtYzEzNzgzX3ByaXYgKnByaXY7Ci0Jc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwotCWludCBpLCByZXQ7Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJtYzEzNzgzX3JlZ3VsYXRvcl9wcm9iZSBpZCAlZFxuIiwgcGRldi0+aWQpOwotCi0JcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSArIG1jMTM3ODMtPm51bV9yZWd1bGF0b3JzICogc2l6ZW9mKHZvaWQgKiksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcHJpdi0+bWMxMzc4MyA9IG1jMTM3ODM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWMxMzc4My0+bnVtX3JlZ3VsYXRvcnM7IGkrKykgewotCQlpbml0X2RhdGEgPSAmbWMxMzc4My0+cmVndWxhdG9yc1tpXTsKLQkJcHJpdi0+cmVndWxhdG9yc1tpXSA9IHJlZ3VsYXRvcl9yZWdpc3RlcigKLQkJCQkmbWMxMzc4M19yZWd1bGF0b3JzW2luaXRfZGF0YS0+aWRdLmRlc2MsCi0JCQkJJnBkZXYtPmRldiwgaW5pdF9kYXRhLT5pbml0X2RhdGEsIHByaXYpOwotCi0JCWlmIChJU19FUlIocHJpdi0+cmVndWxhdG9yc1tpXSkpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciByZWd1bGF0b3IgJXNcbiIsCi0JCQkJbWMxMzc4M19yZWd1bGF0b3JzW2ldLmRlc2MubmFtZSk7Ci0JCQlyZXQgPSBQVFJfRVJSKHByaXYtPnJlZ3VsYXRvcnNbaV0pOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKLQotCXJldHVybiAwOwotZXJyOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJcmVndWxhdG9yX3VucmVnaXN0ZXIocHJpdi0+cmVndWxhdG9yc1tpXSk7Ci0KLQlrZnJlZShwcml2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IG1jMTM3ODNfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBtYzEzNzgzX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MyA9IHByaXYtPm1jMTM3ODM7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWMxMzc4My0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKLQkJcmVndWxhdG9yX3VucmVnaXN0ZXIocHJpdi0+cmVndWxhdG9yc1tpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWMxMzc4M19yZWd1bGF0b3JfZHJpdmVyID0gewotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lCT0gIm1jMTM3ODMtcmVndWxhdG9yIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1jMTM3ODNfcmVndWxhdG9yX3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbWMxMzc4M19yZWd1bGF0b3JfZHJpdmVyLAotCQkJbWMxMzc4M19yZWd1bGF0b3JfcHJvYmUpOwotfQotc3Vic3lzX2luaXRjYWxsKG1jMTM3ODNfcmVndWxhdG9yX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbWMxMzc4M19yZWd1bGF0b3JfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYzEzNzgzX3JlZ3VsYXRvcl9kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQobWMxMzc4M19yZWd1bGF0b3JfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWd1bGF0b3IgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1jMTM3ODMtcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3BjZjUwNjMzLXJlZ3VsYXRvci5jCmluZGV4IDA4MDNmZmUuLmM4ZjQxZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3BjZjUwNjMzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3BjZjUwNjMzLXJlZ3VsYXRvci5jCkBAIC0zMTQsMTMgKzMxNCwxNSBAQAogCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOwogCiAJLyogQWxyZWFkeSBzZXQgYnkgY29yZSBkcml2ZXIgKi8KLQlwY2YgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlwY2YgPSBkZXZfdG9fcGNmNTA2MzMocGRldi0+ZGV2LnBhcmVudCk7CiAKIAlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyZWd1bGF0b3JzW3BkZXYtPmlkXSwgJnBkZXYtPmRldiwKIAkJCQkgIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBwY2YpOwogCWlmIChJU19FUlIocmRldikpCiAJCXJldHVybiBQVFJfRVJSKHJkZXYpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisKIAlpZiAocGNmLT5wZGF0YS0+cmVndWxhdG9yX3JlZ2lzdGVyZWQpCiAJCXBjZi0+cGRhdGEtPnJlZ3VsYXRvcl9yZWdpc3RlcmVkKHBjZiwgcGRldi0+aWQpOwogCkBAIC0zMzEsNiArMzMzLDcgQEAKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcmVndWxhdG9yX3VucmVnaXN0ZXIocmRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTY3NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICogdHdsLXJlZ3VsYXRvci5jIC0tIHN1cHBvcnQgcmVndWxhdG9ycyBpbiB0d2w0MDMwL3R3bDYwMzAgZmFtaWx5IGNoaXBzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgorCisKKy8qCisgKiBUaGUgVFdMNDAzMC9UVzUwMzAvVFBTNjU5eDAvVFdMNjAzMCBmYW1pbHkgY2hpcHMgaW5jbHVkZSBwb3dlciBtYW5hZ2VtZW50LCBhCisgKiBVU0IgT1RHIHRyYW5zY2VpdmVyLCBhbiBSVEMsIEFEQywgUFdNLCBhbmQgbG90cyBtb3JlLiAgU29tZSB2ZXJzaW9ucworICogaW5jbHVkZSBhbiBhdWRpbyBjb2RlYywgYmF0dGVyeSBjaGFyZ2VyLCBhbmQgbW9yZSB2b2x0YWdlIHJlZ3VsYXRvcnMuCisgKiBUaGVzZSBjaGlwcyBhcmUgb2Z0ZW4gdXNlZCBpbiBPTUFQLWJhc2VkIHN5c3RlbXMuCisgKgorICogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzb2Z0d2FyZS1iYXNlZCByZXNvdXJjZSBjb250cm9sIGZvciB2YXJpb3VzCisgKiB2b2x0YWdlIHJlZ3VsYXRvcnMuICBUaGlzIGlzIHVzdWFsbHkgYXVnbWVudGVkIHdpdGggc3RhdGUgbWFjaGluZQorICogYmFzZWQgY29udHJvbC4KKyAqLworCitzdHJ1Y3QgdHdscmVnX2luZm8geworCS8qIHN0YXJ0IG9mIHJlZ3VsYXRvcidzIFBNX1JFQ0VJVkVSIGNvbnRyb2wgcmVnaXN0ZXIgYmFuayAqLworCXU4CQkJYmFzZTsKKworCS8qIHR3bCByZXNvdXJjZSBJRCwgZm9yIHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZSAqLworCXU4CQkJaWQ7CisKKwkvKiB2b2x0YWdlIGluIG1WID0gdGFibGVbVlNFTF07IHRhYmxlX2xlbiBtdXN0IGJlIGEgcG93ZXItb2YtdHdvICovCisJdTgJCQl0YWJsZV9sZW47CisJY29uc3QgdTE2CQkqdGFibGU7CisKKwkvKiByZWd1bGF0b3Igc3BlY2lmaWMgdHVybi1vbiBkZWxheSAqLworCXUxNgkJCWRlbGF5OworCisJLyogU3RhdGUgUkVNQVAgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCisJdTgJCQlyZW1hcDsKKworCS8qIGNoaXAgY29uc3RyYWludHMgb24gcmVndWxhdG9yIGJlaGF2aW9yICovCisJdTE2CQkJbWluX21WOworCisJLyogdXNlZCBieSByZWd1bGF0b3IgY29yZSAqLworCXN0cnVjdCByZWd1bGF0b3JfZGVzYwlkZXNjOworfTsKKworCisvKiBMRE8gY29udHJvbCByZWdpc3RlcnMgLi4uIG9mZnNldCBpcyBmcm9tIHRoZSBiYXNlIG9mIGl0cyByZWdpc3RlciBiYW5rLgorICogVGhlIGZpcnN0IHRocmVlIHJlZ2lzdGVycyBvZiBhbGwgcG93ZXIgcmVzb3VyY2UgYmFua3MgaGVscCBoYXJkd2FyZSB0bworICogbWFuYWdlIHRoZSB2YXJpb3VzIHJlc291cmNlIGdyb3Vwcy4KKyAqLworLyogQ29tbW9uIG9mZnNldCBpbiBUV0w0MDMwLzYwMzAgKi8KKyNkZWZpbmUgVlJFR19HUlAJCTAKKy8qIFRXTDQwMzAgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBWUkVHX1RZUEUJCTEKKyNkZWZpbmUgVlJFR19SRU1BUAkJMgorI2RlZmluZSBWUkVHX0RFRElDQVRFRAkJMwkvKiBMRE8gY29udHJvbCAqLworLyogVFdMNjAzMCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFZSRUdfVFJBTlMJCTEKKyNkZWZpbmUgVlJFR19TVEFURQkJMgorI2RlZmluZSBWUkVHX1ZPTFRBR0UJCTMKKy8qIFRXTDYwMzAgTWlzYyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFZSRUdfQkNfQUxMCQkxCisjZGVmaW5lIFZSRUdfQkNfUkVGCQkyCisjZGVmaW5lIFZSRUdfQkNfUFJPQwkJMworI2RlZmluZSBWUkVHX0JDX0NMS19SU1QJCTQKKworc3RhdGljIGlubGluZSBpbnQKK3R3bHJlZ19yZWFkKHN0cnVjdCB0d2xyZWdfaW5mbyAqaW5mbywgdW5zaWduZWQgc2xhdmVfc3ViZ3AsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwl1OCB2YWx1ZTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdHdsX2kyY19yZWFkX3U4KHNsYXZlX3N1YmdwLAorCQkJJnZhbHVlLCBpbmZvLT5iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0d2xyZWdfd3JpdGUoc3RydWN0IHR3bHJlZ19pbmZvICppbmZvLCB1bnNpZ25lZCBzbGF2ZV9zdWJncCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCQkJIHU4IHZhbHVlKQoreworCXJldHVybiB0d2xfaTJjX3dyaXRlX3U4KHNsYXZlX3N1YmdwLAorCQkJdmFsdWUsIGluZm8tPmJhc2UgKyBvZmZzZXQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBnZW5lcmljIHBvd2VyIHJlc291cmNlIG9wZXJhdGlvbnMsIHdoaWNoIHdvcmsgb24gYWxsIHJlZ3VsYXRvcnMgKi8KKworc3RhdGljIGludCB0d2xyZWdfZ3JwKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiB0d2xyZWdfcmVhZChyZGV2X2dldF9kcnZkYXRhKHJkZXYpLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCQkJCQkJCQkgVlJFR19HUlApOworfQorCisvKgorICogRW5hYmxlL2Rpc2FibGUgcmVndWxhdG9ycyBieSBqb2luaW5nL2xlYXZpbmcgdGhlIFAxIChwcm9jZXNzb3IpIGdyb3VwLgorICogV2UgYXNzdW1lIG5vYm9keSBlbHNlIGlzIHVwZGF0aW5nIHRoZSBERVZfR1JQIHJlZ2lzdGVycy4KKyAqLworLyogZGVmaW5pdGlvbiBmb3IgNDAzMCBmYW1pbHkgKi8KKyNkZWZpbmUgUDNfR1JQXzQwMzAJQklUKDcpCQkvKiAicGVyaXBoZXJhbHMiICovCisjZGVmaW5lIFAyX0dSUF80MDMwCUJJVCg2KQkJLyogc2Vjb25kYXJ5IHByb2Nlc3NvciwgbW9kZW0sIGV0YyAqLworI2RlZmluZSBQMV9HUlBfNDAzMAlCSVQoNSkJCS8qIENQVS9MaW51eCAqLworLyogZGVmaW5pdGlvbiBmb3IgNjAzMCBmYW1pbHkgKi8KKyNkZWZpbmUgUDNfR1JQXzYwMzAJQklUKDIpCQkvKiBzZWNvbmRhcnkgcHJvY2Vzc29yLCBtb2RlbSwgZXRjICovCisjZGVmaW5lIFAyX0dSUF82MDMwCUJJVCgxKQkJLyogInBlcmlwaGVyYWxzIiAqLworI2RlZmluZSBQMV9HUlBfNjAzMAlCSVQoMCkJCS8qIENQVS9MaW51eCAqLworCitzdGF0aWMgaW50IHR3bHJlZ19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWludAlzdGF0ZSA9IHR3bHJlZ19ncnAocmRldik7CisKKwlpZiAoc3RhdGUgPCAwKQorCQlyZXR1cm4gc3RhdGU7CisKKwlpZiAodHdsX2NsYXNzX2lzXzQwMzAoKSkKKwkJc3RhdGUgJj0gUDFfR1JQXzQwMzA7CisJZWxzZQorCQlzdGF0ZSAmPSBQMV9HUlBfNjAzMDsKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgdHdscmVnX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCWdycDsKKwlpbnQJCQlyZXQ7CisKKwlncnAgPSB0d2xyZWdfcmVhZChpbmZvLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCBWUkVHX0dSUCk7CisJaWYgKGdycCA8IDApCisJCXJldHVybiBncnA7CisKKwlpZiAodHdsX2NsYXNzX2lzXzQwMzAoKSkKKwkJZ3JwIHw9IFAxX0dSUF80MDMwOworCWVsc2UKKwkJZ3JwIHw9IFAxX0dSUF82MDMwOworCisJcmV0ID0gdHdscmVnX3dyaXRlKGluZm8sIFRXTF9NT0RVTEVfUE1fUkVDRUlWRVIsIFZSRUdfR1JQLCBncnApOworCisJdWRlbGF5KGluZm8tPmRlbGF5KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdscmVnX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQJCQlncnA7CisKKwlncnAgPSB0d2xyZWdfcmVhZChpbmZvLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCBWUkVHX0dSUCk7CisJaWYgKGdycCA8IDApCisJCXJldHVybiBncnA7CisKKwlpZiAodHdsX2NsYXNzX2lzXzQwMzAoKSkKKwkJZ3JwICY9IH4oUDFfR1JQXzQwMzAgfCBQMl9HUlBfNDAzMCB8IFAzX0dSUF80MDMwKTsKKwllbHNlCisJCWdycCAmPSB+KFAxX0dSUF82MDMwIHwgUDJfR1JQXzYwMzAgfCBQM19HUlBfNjAzMCk7CisKKwlyZXR1cm4gdHdscmVnX3dyaXRlKGluZm8sIFRXTF9NT0RVTEVfUE1fUkVDRUlWRVIsIFZSRUdfR1JQLCBncnApOworfQorCitzdGF0aWMgaW50IHR3bHJlZ19nZXRfc3RhdHVzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWludAlzdGF0ZSA9IHR3bHJlZ19ncnAocmRldik7CisKKwlpZiAodHdsX2NsYXNzX2lzXzYwMzAoKSkKKwkJcmV0dXJuIDA7IC8qIEZJWE1FIHJldHVybiBmb3IgNjAzMCByZWd1bGF0b3IgKi8KKworCWlmIChzdGF0ZSA8IDApCisJCXJldHVybiBzdGF0ZTsKKwlzdGF0ZSAmPSAweDBmOworCisJLyogYXNzdW1lIHN0YXRlICE9IFdBUk1fUkVTRVQ7IHdlJ2Qgbm90IGJlIHJ1bm5pbmcuLi4gICovCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIFJFR1VMQVRPUl9TVEFUVVNfT0ZGOworCXJldHVybiAoc3RhdGUgJiBCSVQoMykpCisJCT8gUkVHVUxBVE9SX1NUQVRVU19OT1JNQUwKKwkJOiBSRUdVTEFUT1JfU1RBVFVTX1NUQU5EQlk7Cit9CisKK3N0YXRpYyBpbnQgdHdscmVnX3NldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBtb2RlKQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJdW5zaWduZWQJCW1lc3NhZ2U7CisJaW50CQkJc3RhdHVzOworCisJaWYgKHR3bF9jbGFzc19pc182MDMwKCkpCisJCXJldHVybiAwOyAvKiBGSVhNRSByZXR1cm4gZm9yIDYwMzAgcmVndWxhdG9yICovCisKKwkvKiBXZSBjYW4gb25seSBzZXQgdGhlIG1vZGUgdGhyb3VnaCBzdGF0ZSBtYWNoaW5lIGNvbW1hbmRzLi4uICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CisJCW1lc3NhZ2UgPSBNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgaW5mby0+aWQsIFJFU19TVEFURV9BQ1RJVkUpOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk6CisJCW1lc3NhZ2UgPSBNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgaW5mby0+aWQsIFJFU19TVEFURV9TTEVFUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEVuc3VyZSB0aGUgcmVzb3VyY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHNvbWUgZ3JvdXAgKi8KKwlzdGF0dXMgPSB0d2xyZWdfZ3JwKHJkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWlmICghKHN0YXR1cyAmIChQM19HUlBfNDAzMCB8IFAyX0dSUF80MDMwIHwgUDFfR1JQXzQwMzApKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlzdGF0dXMgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUE1fTUFTVEVSLAorCQkJbWVzc2FnZSA+PiA4LCAweDE1IC8qIFBCX1dPUkRfTVNCICovICk7CisJaWYgKHN0YXR1cyA+PSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIHR3bF9pMmNfd3JpdGVfdTgoVFdMX01PRFVMRV9QTV9NQVNURVIsCisJCQltZXNzYWdlLCAweDE2IC8qIFBCX1dPUkRfTFNCICovICk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBTdXBwb3J0IGZvciBhZGp1c3RhYmxlLXZvbHRhZ2UgTERPcyB1c2VzIGEgZm91ciBiaXQgKG9yIGxlc3MpIHZvbHRhZ2UKKyAqIHNlbGVjdCBmaWVsZCBpbiBpdHMgY29udHJvbCByZWdpc3Rlci4gICBXZSB1c2UgdGFibGVzIGluZGV4ZWQgYnkgVlNFTAorICogdG8gcmVjb3JkIHZvbHRhZ2VzIGluIG1pbGxpVm9sdHMuICAoQWNjdXJhY3kgaXMgYWJvdXQgdGhyZWUgcGVyY2VudC4pCisgKgorICogTm90ZSB0aGF0IFZTRUwgdmFsdWVzIGZvciBWQVVYMiBjaGFuZ2VkIGluIHR3bDUwMzAgYW5kIG5ld2VyIHNpbGljb247CisgKiBjdXJyZW50bHkgaGFuZGxlZCBieSBsaXN0aW5nIHR3byBzbGlnaHRseSBkaWZmZXJlbnQgVkFVWDIgcmVndWxhdG9ycywKKyAqIG9ubHkgb25lIG9mIHdoaWNoIHdpbGwgYmUgY29uZmlndXJlZC4KKyAqCisgKiBWU0VMIHZhbHVlcyBkb2N1bWVudGVkIGFzICJUSSBjYW5ub3Qgc3VwcG9ydCB0aGVzZSB2YWx1ZXMiIGFyZSBmbGFnZ2VkCisgKiBpbiB0aGVzZSB0YWJsZXMgYXMgVU5TVVAoKSB2YWx1ZXM7IHdlIG5vcm1hbGx5IHdvbid0IGFzc2lnbiB0aGVtLgorICoKKyAqIFZBVVgzIGF0IDNWIGlzIGluY29ycmVjdGx5IGxpc3RlZCBpbiBzb21lIFRJIG1hbnVhbHMgYXMgdW5zdXBwb3J0ZWQuCisgKiBUSSBhcmUgcmV2aXNpbmcgdGhlIHR3bDUwMzAvdHBzNjU5eDAgc3BlY3MgdG8gc3VwcG9ydCB0aGF0IDMuMFYgc2V0dGluZy4KKyAqLworI2lmZGVmIENPTkZJR19UV0w0MDMwX0FMTE9XX1VOU1VQUE9SVEVECisjZGVmaW5lIFVOU1VQX01BU0sJMHgwMDAwCisjZWxzZQorI2RlZmluZSBVTlNVUF9NQVNLCTB4ODAwMAorI2VuZGlmCisKKyNkZWZpbmUgVU5TVVAoeCkJKFVOU1VQX01BU0sgfCAoeCkpCisjZGVmaW5lIElTX1VOU1VQKHgpCShVTlNVUF9NQVNLICYgKHgpKQorI2RlZmluZSBMRE9fTVYoeCkJKH5VTlNVUF9NQVNLICYgKHgpKQorCisKK3N0YXRpYyBjb25zdCB1MTYgVkFVWDFfVlNFTF90YWJsZVtdID0geworCVVOU1VQKDE1MDApLCBVTlNVUCgxODAwKSwgMjUwMCwgMjgwMCwKKwkzMDAwLCAzMDAwLCAzMDAwLCAzMDAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkFVWDJfNDAzMF9WU0VMX3RhYmxlW10gPSB7CisJVU5TVVAoMTAwMCksIFVOU1VQKDEwMDApLCBVTlNVUCgxMjAwKSwgMTMwMCwKKwkxNTAwLCAxODAwLCBVTlNVUCgxODUwKSwgMjUwMCwKKwlVTlNVUCgyNjAwKSwgMjgwMCwgVU5TVVAoMjg1MCksIFVOU1VQKDMwMDApLAorCVVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkFVWDJfVlNFTF90YWJsZVtdID0geworCTE3MDAsIDE3MDAsIDE5MDAsIDEzMDAsCisJMTUwMCwgMTgwMCwgMjAwMCwgMjUwMCwKKwkyMTAwLCAyODAwLCAyMjAwLCAyMzAwLAorCTI0MDAsIDI0MDAsIDI0MDAsIDI0MDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYM19WU0VMX3RhYmxlW10gPSB7CisJMTUwMCwgMTgwMCwgMjUwMCwgMjgwMCwKKwkzMDAwLCAzMDAwLCAzMDAwLCAzMDAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkFVWDRfVlNFTF90YWJsZVtdID0geworCTcwMCwgMTAwMCwgMTIwMCwgVU5TVVAoMTMwMCksCisJMTUwMCwgMTgwMCwgVU5TVVAoMTg1MCksIDI1MDAsCisJVU5TVVAoMjYwMCksIDI4MDAsIFVOU1VQKDI4NTApLCBVTlNVUCgzMDAwKSwKKwlVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwKK307CitzdGF0aWMgY29uc3QgdTE2IFZNTUMxX1ZTRUxfdGFibGVbXSA9IHsKKwkxODUwLCAyODUwLCAzMDAwLCAzMTUwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVk1NQzJfVlNFTF90YWJsZVtdID0geworCVVOU1VQKDEwMDApLCBVTlNVUCgxMDAwKSwgVU5TVVAoMTIwMCksIFVOU1VQKDEzMDApLAorCVVOU1VQKDE1MDApLCBVTlNVUCgxODAwKSwgMTg1MCwgVU5TVVAoMjUwMCksCisJMjYwMCwgMjgwMCwgMjg1MCwgMzAwMCwKKwkzMTUwLCAzMTUwLCAzMTUwLCAzMTUwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVlBMTDFfVlNFTF90YWJsZVtdID0geworCTEwMDAsIDEyMDAsIDEzMDAsIDE4MDAsCisJVU5TVVAoMjgwMCksIFVOU1VQKDMwMDApLCBVTlNVUCgzMDAwKSwgVU5TVVAoMzAwMCksCit9Oworc3RhdGljIGNvbnN0IHUxNiBWUExMMl9WU0VMX3RhYmxlW10gPSB7CisJNzAwLCAxMDAwLCAxMjAwLCAxMzAwLAorCVVOU1VQKDE1MDApLCAxODAwLCBVTlNVUCgxODUwKSwgVU5TVVAoMjUwMCksCisJVU5TVVAoMjYwMCksIFVOU1VQKDI4MDApLCBVTlNVUCgyODUwKSwgVU5TVVAoMzAwMCksCisJVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksCit9Oworc3RhdGljIGNvbnN0IHUxNiBWU0lNX1ZTRUxfdGFibGVbXSA9IHsKKwlVTlNVUCgxMDAwKSwgVU5TVVAoMTIwMCksIFVOU1VQKDEzMDApLCAxODAwLAorCTI4MDAsIDMwMDAsIDMwMDAsIDMwMDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWREFDX1ZTRUxfdGFibGVbXSA9IHsKKwkxMjAwLCAxMzAwLCAxODAwLCAxODAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkREMV9WU0VMX3RhYmxlW10gPSB7CisJODAwLCAxNDUwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkREMl9WU0VMX3RhYmxlW10gPSB7CisJODAwLCAxNDUwLCAxNTAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVklPX1ZTRUxfdGFibGVbXSA9IHsKKwkxODAwLCAxODUwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVklOVEFOQTJfVlNFTF90YWJsZVtdID0geworCTI1MDAsIDI3NTAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYMV82MDMwX1ZTRUxfdGFibGVbXSA9IHsKKwkxMDAwLCAxMzAwLCAxODAwLCAyNTAwLAorCTI4MDAsIDI5MDAsIDMwMDAsIDMwMDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYMl82MDMwX1ZTRUxfdGFibGVbXSA9IHsKKwkxMjAwLCAxODAwLCAyNTAwLCAyNzUwLAorCTI4MDAsIDI4MDAsIDI4MDAsIDI4MDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYM182MDMwX1ZTRUxfdGFibGVbXSA9IHsKKwkxMDAwLCAxMjAwLCAxMzAwLCAxODAwLAorCTI1MDAsIDI4MDAsIDMwMDAsIDMwMDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWTU1DX1ZTRUxfdGFibGVbXSA9IHsKKwkxMjAwLCAxODAwLCAyODAwLCAyOTAwLAorCTMwMDAsIDMwMDAsIDMwMDAsIDMwMDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWUFBfVlNFTF90YWJsZVtdID0geworCTE4MDAsIDE5MDAsIDIwMDAsIDIxMDAsCisJMjIwMCwgMjMwMCwgMjQwMCwgMjUwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZVU0lNX1ZTRUxfdGFibGVbXSA9IHsKKwkxMjAwLCAxODAwLCAyNTAwLCAyOTAwLAorfTsKKworc3RhdGljIGludCB0d2xsZG9fbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBpbmRleCkKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCW1WID0gaW5mby0+dGFibGVbaW5kZXhdOworCisJcmV0dXJuIElTX1VOU1VQKG1WKSA/IDAgOiAoTERPX01WKG1WKSAqIDEwMDApOworfQorCitzdGF0aWMgaW50Cit0d2xsZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQJCQl2c2VsOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IGluZm8tPnRhYmxlX2xlbjsgdnNlbCsrKSB7CisJCWludCBtViA9IGluZm8tPnRhYmxlW3ZzZWxdOworCQlpbnQgdVY7CisKKwkJaWYgKElTX1VOU1VQKG1WKSkKKwkJCWNvbnRpbnVlOworCQl1ViA9IExET19NVihtVikgKiAxMDAwOworCisJCS8qIFJFVklTSVQgZm9yIFZBVVgyLCBmaXJzdCBtYXRjaCBtYXkgbm90IGJlIGJlc3QvbG93ZXN0ICovCisKKwkJLyogdXNlIHRoZSBmaXJzdCBpbi1yYW5nZSB2YWx1ZSAqLworCQlpZiAobWluX3VWIDw9IHVWICYmIHVWIDw9IG1heF91VikKKwkJCXJldHVybiB0d2xyZWdfd3JpdGUoaW5mbywgVFdMX01PRFVMRV9QTV9SRUNFSVZFUiwKKwkJCQkJCQlWUkVHX1ZPTFRBR0UsIHZzZWwpOworCX0KKworCXJldHVybiAtRURPTTsKK30KKworc3RhdGljIGludCB0d2xsZG9fZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQJCXZzZWwgPSB0d2xyZWdfcmVhZChpbmZvLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCQkJCQkJCQlWUkVHX1ZPTFRBR0UpOworCisJaWYgKHZzZWwgPCAwKQorCQlyZXR1cm4gdnNlbDsKKworCXZzZWwgJj0gaW5mby0+dGFibGVfbGVuIC0gMTsKKwlyZXR1cm4gTERPX01WKGluZm8tPnRhYmxlW3ZzZWxdKSAqIDEwMDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0d2xsZG9fb3BzID0geworCS5saXN0X3ZvbHRhZ2UJPSB0d2xsZG9fbGlzdF92b2x0YWdlLAorCisJLnNldF92b2x0YWdlCT0gdHdsbGRvX3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IHR3bGxkb19nZXRfdm9sdGFnZSwKKworCS5lbmFibGUJCT0gdHdscmVnX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHR3bHJlZ19kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gdHdscmVnX2lzX2VuYWJsZWQsCisKKwkuc2V0X21vZGUJPSB0d2xyZWdfc2V0X21vZGUsCisKKwkuZ2V0X3N0YXR1cwk9IHR3bHJlZ19nZXRfc3RhdHVzLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEZpeGVkIHZvbHRhZ2UgTERPcyBkb24ndCBoYXZlIGEgVlNFTCBmaWVsZCB0byB1cGRhdGUuCisgKi8KK3N0YXRpYyBpbnQgdHdsZml4ZWRfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBpbmRleCkKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmV0dXJuIGluZm8tPm1pbl9tViAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHdsZml4ZWRfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCXJldHVybiBpbmZvLT5taW5fbVYgKiAxMDAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHdsZml4ZWRfb3BzID0geworCS5saXN0X3ZvbHRhZ2UJPSB0d2xmaXhlZF9saXN0X3ZvbHRhZ2UsCisKKwkuZ2V0X3ZvbHRhZ2UJPSB0d2xmaXhlZF9nZXRfdm9sdGFnZSwKKworCS5lbmFibGUJCT0gdHdscmVnX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHR3bHJlZ19kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gdHdscmVnX2lzX2VuYWJsZWQsCisKKwkuc2V0X21vZGUJPSB0d2xyZWdfc2V0X21vZGUsCisKKwkuZ2V0X3N0YXR1cwk9IHR3bHJlZ19nZXRfc3RhdHVzLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBUV0w0MDMwX0FESlVTVEFCTEVfTERPKGxhYmVsLCBvZmZzZXQsIG51bSwgdHVybm9uX2RlbGF5LCByZW1hcF9jb25mKSBcCisJCVRXTF9BREpVU1RBQkxFX0xETyhsYWJlbCwgb2Zmc2V0LCBudW0sIHR1cm5vbl9kZWxheSwgXAorCQkJcmVtYXBfY29uZiwgVFdMNDAzMCkKKyNkZWZpbmUgVFdMNDAzMF9GSVhFRF9MRE8obGFiZWwsIG9mZnNldCwgbVZvbHRzLCBudW0sIHR1cm5vbl9kZWxheSwgXAorCQkJcmVtYXBfY29uZikgXAorCQlUV0xfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgbnVtLCB0dXJub25fZGVsYXksIFwKKwkJCXJlbWFwX2NvbmYsIFRXTDQwMzApCisjZGVmaW5lIFRXTDYwMzBfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbnVtLCB0dXJub25fZGVsYXksIFwKKwkJCXJlbWFwX2NvbmYpIFwKKwkJVFdMX0FESlVTVEFCTEVfTERPKGxhYmVsLCBvZmZzZXQsIG51bSwgdHVybm9uX2RlbGF5LCBcCisJCQlyZW1hcF9jb25mLCBUV0w2MDMwKQorI2RlZmluZSBUV0w2MDMwX0ZJWEVEX0xETyhsYWJlbCwgb2Zmc2V0LCBtVm9sdHMsIG51bSwgdHVybm9uX2RlbGF5LCBcCisJCQlyZW1hcF9jb25mKSBcCisJCVRXTF9GSVhFRF9MRE8obGFiZWwsIG9mZnNldCwgbVZvbHRzLCBudW0sIHR1cm5vbl9kZWxheSwgXAorCQkJcmVtYXBfY29uZiwgVFdMNjAzMCkKKworI2RlZmluZSBUV0xfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbnVtLCB0dXJub25fZGVsYXksIHJlbWFwX2NvbmYsIFwKKwkJZmFtaWx5KSB7IFwKKwkuYmFzZSA9IG9mZnNldCwgXAorCS5pZCA9IG51bSwgXAorCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKGxhYmVsIyNfVlNFTF90YWJsZSksIFwKKwkudGFibGUgPSBsYWJlbCMjX1ZTRUxfdGFibGUsIFwKKwkuZGVsYXkgPSB0dXJub25fZGVsYXksIFwKKwkucmVtYXAgPSByZW1hcF9jb25mLCBcCisJLmRlc2MgPSB7IFwKKwkJLm5hbWUgPSAjbGFiZWwsIFwKKwkJLmlkID0gZmFtaWx5IyNfUkVHXyMjbGFiZWwsIFwKKwkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKGxhYmVsIyNfVlNFTF90YWJsZSksIFwKKwkJLm9wcyA9ICZ0d2xsZG9fb3BzLCBcCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsIFwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsIFwKKwkJfSwgXAorCX0KKworI2RlZmluZSBUV0xfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgbnVtLCB0dXJub25fZGVsYXksIHJlbWFwX2NvbmYsIFwKKwkJZmFtaWx5KSB7IFwKKwkuYmFzZSA9IG9mZnNldCwgXAorCS5pZCA9IG51bSwgXAorCS5taW5fbVYgPSBtVm9sdHMsIFwKKwkuZGVsYXkgPSB0dXJub25fZGVsYXksIFwKKwkucmVtYXAgPSByZW1hcF9jb25mLCBcCisJLmRlc2MgPSB7IFwKKwkJLm5hbWUgPSAjbGFiZWwsIFwKKwkJLmlkID0gZmFtaWx5IyNfUkVHXyMjbGFiZWwsIFwKKwkJLm5fdm9sdGFnZXMgPSAxLCBcCisJCS5vcHMgPSAmdHdsZml4ZWRfb3BzLCBcCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsIFwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsIFwKKwkJfSwgXAorCX0KKworLyoKKyAqIFdlIGxpc3QgcmVndWxhdG9ycyBoZXJlIGlmIHN5c3RlbXMgbmVlZCBzb21lIGxldmVsIG9mCisgKiBzb2Z0d2FyZSBjb250cm9sIG92ZXIgdGhlbSBhZnRlciBib290LgorICovCitzdGF0aWMgc3RydWN0IHR3bHJlZ19pbmZvIHR3bF9yZWdzW10gPSB7CisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWQVVYMSwgMHgxNywgMSwgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0FESlVTVEFCTEVfTERPKFZBVVgyXzQwMzAsIDB4MWIsIDIsIDEwMCwgMHgwOCksCisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWQVVYMiwgMHgxYiwgMiwgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0FESlVTVEFCTEVfTERPKFZBVVgzLCAweDFmLCAzLCAxMDAsIDB4MDgpLAorCVRXTDQwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDQsIDB4MjMsIDQsIDEwMCwgMHgwOCksCisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWTU1DMSwgMHgyNywgNSwgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0FESlVTVEFCTEVfTERPKFZNTUMyLCAweDJiLCA2LCAxMDAsIDB4MDgpLAorCVRXTDQwMzBfQURKVVNUQUJMRV9MRE8oVlBMTDEsIDB4MmYsIDcsIDEwMCwgMHgwMCksCisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWUExMMiwgMHgzMywgOCwgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0FESlVTVEFCTEVfTERPKFZTSU0sIDB4MzcsIDksIDEwMCwgMHgwMCksCisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWREFDLCAweDNiLCAxMCwgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0ZJWEVEX0xETyhWSU5UQU5BMSwgMHgzZiwgMTUwMCwgMTEsIDEwMCwgMHgwOCksCisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWSU5UQU5BMiwgMHg0MywgMTIsIDEwMCwgMHgwOCksCisJVFdMNDAzMF9GSVhFRF9MRE8oVklOVERJRywgMHg0NywgMTUwMCwgMTMsIDEwMCwgMHgwOCksCisJVFdMNDAzMF9BREpVU1RBQkxFX0xETyhWSU8sIDB4NGIsIDE0LCAxMDAwLCAweDA4KSwKKwlUV0w0MDMwX0FESlVTVEFCTEVfTERPKFZERDEsIDB4NTUsIDE1LCAxMDAwLCAweDA4KSwKKwlUV0w0MDMwX0FESlVTVEFCTEVfTERPKFZERDIsIDB4NjMsIDE2LCAxMDAwLCAweDA4KSwKKwlUV0w0MDMwX0ZJWEVEX0xETyhWVVNCMVY1LCAweDcxLCAxNTAwLCAxNywgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0ZJWEVEX0xETyhWVVNCMVY4LCAweDc0LCAxODAwLCAxOCwgMTAwLCAweDA4KSwKKwlUV0w0MDMwX0ZJWEVEX0xETyhWVVNCM1YxLCAweDc3LCAzMTAwLCAxOSwgMTUwLCAweDA4KSwKKwkvKiBWVVNCQ1AgaXMgbWFuYWdlZCAqb25seSogYnkgdGhlIFVTQiBzdWJjaGlwICovCisKKwkvKiA2MDMwIFJFRyB3aXRoIGJhc2UgYXMgUE1DIFNsYXZlIE1pc2MgOiAweDAwMzAgKi8KKwkvKiBUdXJub24tZGVsYXkgYW5kIHJlbWFwIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciA2MDMwIGFyZSBub3QKKwkgICB2ZXJpZmllZCBzaW5jZSB0aGUgc3BlY2lmaWNhdGlvbiBpcyBub3QgcHVibGljICovCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYMV82MDMwLCAweDU0LCAxLCAwLCAweDA4KSwKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgyXzYwMzAsIDB4NTgsIDIsIDAsIDB4MDgpLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDNfNjAzMCwgMHg1YywgMywgMCwgMHgwOCksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWTU1DLCAweDY4LCA0LCAwLCAweDA4KSwKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZQUCwgMHg2YywgNSwgMCwgMHgwOCksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWVVNJTSwgMHg3NCwgNywgMCwgMHgwOCksCisJVFdMNjAzMF9GSVhFRF9MRE8oVkFOQSwgMHg1MCwgMjEwMCwgMTUsIDAsIDB4MDgpLAorCVRXTDYwMzBfRklYRURfTERPKFZDWElPLCAweDYwLCAxODAwLCAxNiwgMCwgMHgwOCksCisJVFdMNjAzMF9GSVhFRF9MRE8oVkRBQywgMHg2NCwgMTgwMCwgMTcsIDAsIDB4MDgpLAorCVRXTDYwMzBfRklYRURfTERPKFZVU0IsIDB4NzAsIDMzMDAsIDE4LCAwLCAweDA4KQorfTsKKworc3RhdGljIGludCB0d2xyZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQJCQkJaTsKKwlzdHJ1Y3QgdHdscmVnX2luZm8JCSppbmZvOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCSppbml0ZGF0YTsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cwkqYzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldgkJKnJkZXY7CisKKwlmb3IgKGkgPSAwLCBpbmZvID0gTlVMTDsgaSA8IEFSUkFZX1NJWkUodHdsX3JlZ3MpOyBpKyspIHsKKwkJaWYgKHR3bF9yZWdzW2ldLmRlc2MuaWQgIT0gcGRldi0+aWQpCisJCQljb250aW51ZTsKKwkJaW5mbyA9IHR3bF9yZWdzICsgaTsKKwkJYnJlYWs7CisJfQorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbml0ZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghaW5pdGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29uc3RyYWluIGJvYXJkLXNwZWNpZmljIGNhcGFiaWxpdGllcyBhY2NvcmRpbmcgdG8gd2hhdAorCSAqIHRoaXMgZHJpdmVyIGFuZCB0aGUgY2hpcCBpdHNlbGYgY2FuIGFjdHVhbGx5IGRvLgorCSAqLworCWMgPSAmaW5pdGRhdGEtPmNvbnN0cmFpbnRzOworCWMtPnZhbGlkX21vZGVzX21hc2sgJj0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwgUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKKwljLT52YWxpZF9vcHNfbWFzayAmPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVM7CisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgVFdMNDAzMF9SRUdfVklPOgorCWNhc2UgVFdMNDAzMF9SRUdfVkREMToKKwljYXNlIFRXTDQwMzBfUkVHX1ZERDI6CisJY2FzZSBUV0w0MDMwX1JFR19WUExMMToKKwljYXNlIFRXTDQwMzBfUkVHX1ZJTlRBTkExOgorCWNhc2UgVFdMNDAzMF9SRUdfVklOVEFOQTI6CisJY2FzZSBUV0w0MDMwX1JFR19WSU5URElHOgorCQljLT5hbHdheXNfb24gPSB0cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZpbmZvLT5kZXNjLCAmcGRldi0+ZGV2LCBpbml0ZGF0YSwgaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciAlcywgJWxkXG4iLAorCQkJCWluZm8tPmRlc2MubmFtZSwgUFRSX0VSUihyZGV2KSk7CisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZGV2KTsKKworCXR3bHJlZ193cml0ZShpbmZvLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCBWUkVHX1JFTUFQLAorCQkJCQkJaW5mby0+cmVtYXApOworCisJLyogTk9URTogIG1hbnkgcmVndWxhdG9ycyBzdXBwb3J0IHNob3J0LWNpcmN1aXQgSVJRcyAocHJlc2VudGFibGUKKwkgKiBhcyBSRUdVTEFUT1JfT1ZFUl9DVVJSRU5UIG5vdGlmaWNhdGlvbnM/KSBjb25maWd1cmVkIHZpYToKKwkgKiAgLSBTQ19DT05GSUcKKwkgKiAgLSBTQ19ERVRFQ1QxICh2aW50YW5hMiwgdm1tYzEvMiwgdmF1eDEvMi8zLzQpCisJICogIC0gU0NfREVURUNUMiAodnVzYiwgdmRhYywgdmlvLCB2ZGQxLzIsIHZwbGwyKQorCSAqICAtIElUX0NPTkZJRworCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHR3bHJlZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZWd1bGF0b3JfdW5yZWdpc3RlcihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06dHdsX3JlZyIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0d2xyZWdfZHJpdmVyID0geworCS5wcm9iZQkJPSB0d2xyZWdfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0d2xyZWdfcmVtb3ZlKSwKKwkvKiBOT1RFOiBzaG9ydCBuYW1lLCB0byB3b3JrIGFyb3VuZCBkcml2ZXIgbW9kZWwgdHJ1bmNhdGlvbiBvZgorCSAqICJ0d2xfcmVndWxhdG9yLjEyIiAoYW5kIGZyaWVuZHMpIHRvICJ0d2xfcmVndWxhdG9yLjEiLgorCSAqLworCS5kcml2ZXIubmFtZQk9ICJ0d2xfcmVnIiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0d2xyZWdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnR3bHJlZ19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHR3bHJlZ19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bHJlZ19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnR3bHJlZ19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHdscmVnX2V4aXQpCisKK01PRFVMRV9ERVNDUklQVElPTigiVFdMIHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bDQwMzAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2w0MDMwLXJlZ3VsYXRvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjAzMmZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bDQwMzAtcmVndWxhdG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDAgKzAsMCBAQAotLyoKLSAqIHR3bDQwMzAtcmVndWxhdG9yLmMgLS0gc3VwcG9ydCByZWd1bGF0b3JzIGluIHR3bDQwMzAgZmFtaWx5IGNoaXBzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIEJyb3duZWxsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+Ci0KLQotLyoKLSAqIFRoZSBUV0w0MDMwL1RXNTAzMC9UUFM2NTl4MCBmYW1pbHkgY2hpcHMgaW5jbHVkZSBwb3dlciBtYW5hZ2VtZW50LCBhCi0gKiBVU0IgT1RHIHRyYW5zY2VpdmVyLCBhbiBSVEMsIEFEQywgUFdNLCBhbmQgbG90cyBtb3JlLiAgU29tZSB2ZXJzaW9ucwotICogaW5jbHVkZSBhbiBhdWRpbyBjb2RlYywgYmF0dGVyeSBjaGFyZ2VyLCBhbmQgbW9yZSB2b2x0YWdlIHJlZ3VsYXRvcnMuCi0gKiBUaGVzZSBjaGlwcyBhcmUgb2Z0ZW4gdXNlZCBpbiBPTUFQLWJhc2VkIHN5c3RlbXMuCi0gKgotICogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzb2Z0d2FyZS1iYXNlZCByZXNvdXJjZSBjb250cm9sIGZvciB2YXJpb3VzCi0gKiB2b2x0YWdlIHJlZ3VsYXRvcnMuICBUaGlzIGlzIHVzdWFsbHkgYXVnbWVudGVkIHdpdGggc3RhdGUgbWFjaGluZQotICogYmFzZWQgY29udHJvbC4KLSAqLwotCi1zdHJ1Y3QgdHdscmVnX2luZm8gewotCS8qIHN0YXJ0IG9mIHJlZ3VsYXRvcidzIFBNX1JFQ0VJVkVSIGNvbnRyb2wgcmVnaXN0ZXIgYmFuayAqLwotCXU4CQkJYmFzZTsKLQotCS8qIHR3bDQwMzAgcmVzb3VyY2UgSUQsIGZvciByZXNvdXJjZSBjb250cm9sIHN0YXRlIG1hY2hpbmUgKi8KLQl1OAkJCWlkOwotCi0JLyogdm9sdGFnZSBpbiBtViA9IHRhYmxlW1ZTRUxdOyB0YWJsZV9sZW4gbXVzdCBiZSBhIHBvd2VyLW9mLXR3byAqLwotCXU4CQkJdGFibGVfbGVuOwotCWNvbnN0IHUxNgkJKnRhYmxlOwotCi0JLyogY2hpcCBjb25zdHJhaW50cyBvbiByZWd1bGF0b3IgYmVoYXZpb3IgKi8KLQl1MTYJCQltaW5fbVY7Ci0KLQkvKiB1c2VkIGJ5IHJlZ3VsYXRvciBjb3JlICovCi0Jc3RydWN0IHJlZ3VsYXRvcl9kZXNjCWRlc2M7Ci19OwotCi0KLS8qIExETyBjb250cm9sIHJlZ2lzdGVycyAuLi4gb2Zmc2V0IGlzIGZyb20gdGhlIGJhc2Ugb2YgaXRzIHJlZ2lzdGVyIGJhbmsuCi0gKiBUaGUgZmlyc3QgdGhyZWUgcmVnaXN0ZXJzIG9mIGFsbCBwb3dlciByZXNvdXJjZSBiYW5rcyBoZWxwIGhhcmR3YXJlIHRvCi0gKiBtYW5hZ2UgdGhlIHZhcmlvdXMgcmVzb3VyY2UgZ3JvdXBzLgotICovCi0jZGVmaW5lIFZSRUdfR1JQCQkwCi0jZGVmaW5lIFZSRUdfVFlQRQkJMQotI2RlZmluZSBWUkVHX1JFTUFQCQkyCi0jZGVmaW5lIFZSRUdfREVESUNBVEVECQkzCS8qIExETyBjb250cm9sICovCi0KLQotc3RhdGljIGlubGluZSBpbnQKLXR3bDQwMzByZWdfcmVhZChzdHJ1Y3QgdHdscmVnX2luZm8gKmluZm8sIHVuc2lnbmVkIG9mZnNldCkKLXsKLQl1OCB2YWx1ZTsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKLQkJCSZ2YWx1ZSwgaW5mby0+YmFzZSArIG9mZnNldCk7Ci0JcmV0dXJuIChzdGF0dXMgPCAwKSA/IHN0YXR1cyA6IHZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotdHdsNDAzMHJlZ193cml0ZShzdHJ1Y3QgdHdscmVnX2luZm8gKmluZm8sIHVuc2lnbmVkIG9mZnNldCwgdTggdmFsdWUpCi17Ci0JcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAotCQkJdmFsdWUsIGluZm8tPmJhc2UgKyBvZmZzZXQpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBnZW5lcmljIHBvd2VyIHJlc291cmNlIG9wZXJhdGlvbnMsIHdoaWNoIHdvcmsgb24gYWxsIHJlZ3VsYXRvcnMgKi8KLQotc3RhdGljIGludCB0d2w0MDMwcmVnX2dycChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlyZXR1cm4gdHdsNDAzMHJlZ19yZWFkKHJkZXZfZ2V0X2RydmRhdGEocmRldiksIFZSRUdfR1JQKTsKLX0KLQotLyoKLSAqIEVuYWJsZS9kaXNhYmxlIHJlZ3VsYXRvcnMgYnkgam9pbmluZy9sZWF2aW5nIHRoZSBQMSAocHJvY2Vzc29yKSBncm91cC4KLSAqIFdlIGFzc3VtZSBub2JvZHkgZWxzZSBpcyB1cGRhdGluZyB0aGUgREVWX0dSUCByZWdpc3RlcnMuCi0gKi8KLQotI2RlZmluZSBQM19HUlAJCUJJVCg3KQkJLyogInBlcmlwaGVyYWxzIiAqLwotI2RlZmluZSBQMl9HUlAJCUJJVCg2KQkJLyogc2Vjb25kYXJ5IHByb2Nlc3NvciwgbW9kZW0sIGV0YyAqLwotI2RlZmluZSBQMV9HUlAJCUJJVCg1KQkJLyogQ1BVL0xpbnV4ICovCi0KLXN0YXRpYyBpbnQgdHdsNDAzMHJlZ19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQotewotCWludAlzdGF0ZSA9IHR3bDQwMzByZWdfZ3JwKHJkZXYpOwotCi0JaWYgKHN0YXRlIDwgMCkKLQkJcmV0dXJuIHN0YXRlOwotCi0JcmV0dXJuIChzdGF0ZSAmIFAxX0dSUCkgIT0gMDsKLX0KLQotc3RhdGljIGludCB0d2w0MDMwcmVnX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludAkJCWdycDsKLQotCWdycCA9IHR3bDQwMzByZWdfcmVhZChpbmZvLCBWUkVHX0dSUCk7Ci0JaWYgKGdycCA8IDApCi0JCXJldHVybiBncnA7Ci0KLQlncnAgfD0gUDFfR1JQOwotCXJldHVybiB0d2w0MDMwcmVnX3dyaXRlKGluZm8sIFZSRUdfR1JQLCBncnApOwotfQotCi1zdGF0aWMgaW50IHR3bDQwMzByZWdfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludAkJCWdycDsKLQotCWdycCA9IHR3bDQwMzByZWdfcmVhZChpbmZvLCBWUkVHX0dSUCk7Ci0JaWYgKGdycCA8IDApCi0JCXJldHVybiBncnA7Ci0KLQlncnAgJj0gflAxX0dSUDsKLQlyZXR1cm4gdHdsNDAzMHJlZ193cml0ZShpbmZvLCBWUkVHX0dSUCwgZ3JwKTsKLX0KLQotc3RhdGljIGludCB0d2w0MDMwcmVnX2dldF9zdGF0dXMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCi17Ci0JaW50CXN0YXRlID0gdHdsNDAzMHJlZ19ncnAocmRldik7Ci0KLQlpZiAoc3RhdGUgPCAwKQotCQlyZXR1cm4gc3RhdGU7Ci0Jc3RhdGUgJj0gMHgwZjsKLQotCS8qIGFzc3VtZSBzdGF0ZSAhPSBXQVJNX1JFU0VUOyB3ZSdkIG5vdCBiZSBydW5uaW5nLi4uICAqLwotCWlmICghc3RhdGUpCi0JCXJldHVybiBSRUdVTEFUT1JfU1RBVFVTX09GRjsKLQlyZXR1cm4gKHN0YXRlICYgQklUKDMpKQotCQk/IFJFR1VMQVRPUl9TVEFUVVNfTk9STUFMCi0JCTogUkVHVUxBVE9SX1NUQVRVU19TVEFOREJZOwotfQotCi1zdGF0aWMgaW50IHR3bDQwMzByZWdfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIG1vZGUpCi17Ci0Jc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQl1bnNpZ25lZAkJbWVzc2FnZTsKLQlpbnQJCQlzdGF0dXM7Ci0KLQkvKiBXZSBjYW4gb25seSBzZXQgdGhlIG1vZGUgdGhyb3VnaCBzdGF0ZSBtYWNoaW5lIGNvbW1hbmRzLi4uICovCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6Ci0JCW1lc3NhZ2UgPSBNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgaW5mby0+aWQsIFJFU19TVEFURV9BQ1RJVkUpOwotCQlicmVhazsKLQljYXNlIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk6Ci0JCW1lc3NhZ2UgPSBNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgaW5mby0+aWQsIFJFU19TVEFURV9TTEVFUCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEVuc3VyZSB0aGUgcmVzb3VyY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHNvbWUgZ3JvdXAgKi8KLQlzdGF0dXMgPSB0d2w0MDMwcmVnX2dycChyZGV2KTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKLQlpZiAoIShzdGF0dXMgJiAoUDNfR1JQIHwgUDJfR1JQIHwgUDFfR1JQKSkpCi0JCXJldHVybiAtRUFDQ0VTOwotCi0Jc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLAotCQkJbWVzc2FnZSA+PiA4LCAweDE1IC8qIFBCX1dPUkRfTVNCICovICk7Ci0JaWYgKHN0YXR1cyA+PSAwKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwKLQkJCW1lc3NhZ2UsIDB4MTYgLyogUEJfV09SRF9MU0IgKi8gKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFN1cHBvcnQgZm9yIGFkanVzdGFibGUtdm9sdGFnZSBMRE9zIHVzZXMgYSBmb3VyIGJpdCAob3IgbGVzcykgdm9sdGFnZQotICogc2VsZWN0IGZpZWxkIGluIGl0cyBjb250cm9sIHJlZ2lzdGVyLiAgIFdlIHVzZSB0YWJsZXMgaW5kZXhlZCBieSBWU0VMCi0gKiB0byByZWNvcmQgdm9sdGFnZXMgaW4gbWlsbGlWb2x0cy4gIChBY2N1cmFjeSBpcyBhYm91dCB0aHJlZSBwZXJjZW50LikKLSAqCi0gKiBOb3RlIHRoYXQgVlNFTCB2YWx1ZXMgZm9yIFZBVVgyIGNoYW5nZWQgaW4gdHdsNTAzMCBhbmQgbmV3ZXIgc2lsaWNvbjsKLSAqIGN1cnJlbnRseSBoYW5kbGVkIGJ5IGxpc3RpbmcgdHdvIHNsaWdodGx5IGRpZmZlcmVudCBWQVVYMiByZWd1bGF0b3JzLAotICogb25seSBvbmUgb2Ygd2hpY2ggd2lsbCBiZSBjb25maWd1cmVkLgotICoKLSAqIFZTRUwgdmFsdWVzIGRvY3VtZW50ZWQgYXMgIlRJIGNhbm5vdCBzdXBwb3J0IHRoZXNlIHZhbHVlcyIgYXJlIGZsYWdnZWQKLSAqIGluIHRoZXNlIHRhYmxlcyBhcyBVTlNVUCgpIHZhbHVlczsgd2Ugbm9ybWFsbHkgd29uJ3QgYXNzaWduIHRoZW0uCi0gKgotICogVkFVWDMgYXQgM1YgaXMgaW5jb3JyZWN0bHkgbGlzdGVkIGluIHNvbWUgVEkgbWFudWFscyBhcyB1bnN1cHBvcnRlZC4KLSAqIFRJIGFyZSByZXZpc2luZyB0aGUgdHdsNTAzMC90cHM2NTl4MCBzcGVjcyB0byBzdXBwb3J0IHRoYXQgMy4wViBzZXR0aW5nLgotICovCi0jaWZkZWYgQ09ORklHX1RXTDQwMzBfQUxMT1dfVU5TVVBQT1JURUQKLSNkZWZpbmUgVU5TVVBfTUFTSwkweDAwMDAKLSNlbHNlCi0jZGVmaW5lIFVOU1VQX01BU0sJMHg4MDAwCi0jZW5kaWYKLQotI2RlZmluZSBVTlNVUCh4KQkoVU5TVVBfTUFTSyB8ICh4KSkKLSNkZWZpbmUgSVNfVU5TVVAoeCkJKFVOU1VQX01BU0sgJiAoeCkpCi0jZGVmaW5lIExET19NVih4KQkoflVOU1VQX01BU0sgJiAoeCkpCi0KLQotc3RhdGljIGNvbnN0IHUxNiBWQVVYMV9WU0VMX3RhYmxlW10gPSB7Ci0JVU5TVVAoMTUwMCksIFVOU1VQKDE4MDApLCAyNTAwLCAyODAwLAotCTMwMDAsIDMwMDAsIDMwMDAsIDMwMDAsCi19Owotc3RhdGljIGNvbnN0IHUxNiBWQVVYMl80MDMwX1ZTRUxfdGFibGVbXSA9IHsKLQlVTlNVUCgxMDAwKSwgVU5TVVAoMTAwMCksIFVOU1VQKDEyMDApLCAxMzAwLAotCTE1MDAsIDE4MDAsIFVOU1VQKDE4NTApLCAyNTAwLAotCVVOU1VQKDI2MDApLCAyODAwLCBVTlNVUCgyODUwKSwgVU5TVVAoMzAwMCksCi0JVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksCi19Owotc3RhdGljIGNvbnN0IHUxNiBWQVVYMl9WU0VMX3RhYmxlW10gPSB7Ci0JMTcwMCwgMTcwMCwgMTkwMCwgMTMwMCwKLQkxNTAwLCAxODAwLCAyMDAwLCAyNTAwLAotCTIxMDAsIDI4MDAsIDIyMDAsIDIzMDAsCi0JMjQwMCwgMjQwMCwgMjQwMCwgMjQwMCwKLX07Ci1zdGF0aWMgY29uc3QgdTE2IFZBVVgzX1ZTRUxfdGFibGVbXSA9IHsKLQkxNTAwLCAxODAwLCAyNTAwLCAyODAwLAotCTMwMDAsIDMwMDAsIDMwMDAsIDMwMDAsCi19Owotc3RhdGljIGNvbnN0IHUxNiBWQVVYNF9WU0VMX3RhYmxlW10gPSB7Ci0JNzAwLCAxMDAwLCAxMjAwLCBVTlNVUCgxMzAwKSwKLQkxNTAwLCAxODAwLCBVTlNVUCgxODUwKSwgMjUwMCwKLQlVTlNVUCgyNjAwKSwgMjgwMCwgVU5TVVAoMjg1MCksIFVOU1VQKDMwMDApLAotCVVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLAotfTsKLXN0YXRpYyBjb25zdCB1MTYgVk1NQzFfVlNFTF90YWJsZVtdID0gewotCTE4NTAsIDI4NTAsIDMwMDAsIDMxNTAsCi19Owotc3RhdGljIGNvbnN0IHUxNiBWTU1DMl9WU0VMX3RhYmxlW10gPSB7Ci0JVU5TVVAoMTAwMCksIFVOU1VQKDEwMDApLCBVTlNVUCgxMjAwKSwgVU5TVVAoMTMwMCksCi0JVU5TVVAoMTUwMCksIFVOU1VQKDE4MDApLCAxODUwLCBVTlNVUCgyNTAwKSwKLQkyNjAwLCAyODAwLCAyODUwLCAzMDAwLAotCTMxNTAsIDMxNTAsIDMxNTAsIDMxNTAsCi19Owotc3RhdGljIGNvbnN0IHUxNiBWUExMMV9WU0VMX3RhYmxlW10gPSB7Ci0JMTAwMCwgMTIwMCwgMTMwMCwgMTgwMCwKLQlVTlNVUCgyODAwKSwgVU5TVVAoMzAwMCksIFVOU1VQKDMwMDApLCBVTlNVUCgzMDAwKSwKLX07Ci1zdGF0aWMgY29uc3QgdTE2IFZQTEwyX1ZTRUxfdGFibGVbXSA9IHsKLQk3MDAsIDEwMDAsIDEyMDAsIDEzMDAsCi0JVU5TVVAoMTUwMCksIDE4MDAsIFVOU1VQKDE4NTApLCBVTlNVUCgyNTAwKSwKLQlVTlNVUCgyNjAwKSwgVU5TVVAoMjgwMCksIFVOU1VQKDI4NTApLCBVTlNVUCgzMDAwKSwKLQlVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwKLX07Ci1zdGF0aWMgY29uc3QgdTE2IFZTSU1fVlNFTF90YWJsZVtdID0gewotCVVOU1VQKDEwMDApLCBVTlNVUCgxMjAwKSwgVU5TVVAoMTMwMCksIDE4MDAsCi0JMjgwMCwgMzAwMCwgMzAwMCwgMzAwMCwKLX07Ci1zdGF0aWMgY29uc3QgdTE2IFZEQUNfVlNFTF90YWJsZVtdID0gewotCTEyMDAsIDEzMDAsIDE4MDAsIDE4MDAsCi19OwotCi0KLXN0YXRpYyBpbnQgdHdsNDAzMGxkb19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGluZGV4KQotewotCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JaW50CQkJbVYgPSBpbmZvLT50YWJsZVtpbmRleF07Ci0KLQlyZXR1cm4gSVNfVU5TVVAobVYpID8gMCA6IChMRE9fTVYobVYpICogMTAwMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXR3bDQwMzBsZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCi17Ci0Jc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlpbnQJCQl2c2VsOwotCi0JZm9yICh2c2VsID0gMDsgdnNlbCA8IGluZm8tPnRhYmxlX2xlbjsgdnNlbCsrKSB7Ci0JCWludCBtViA9IGluZm8tPnRhYmxlW3ZzZWxdOwotCQlpbnQgdVY7Ci0KLQkJaWYgKElTX1VOU1VQKG1WKSkKLQkJCWNvbnRpbnVlOwotCQl1ViA9IExET19NVihtVikgKiAxMDAwOwotCi0JCS8qIFJFVklTSVQgZm9yIFZBVVgyLCBmaXJzdCBtYXRjaCBtYXkgbm90IGJlIGJlc3QvbG93ZXN0ICovCi0KLQkJLyogdXNlIHRoZSBmaXJzdCBpbi1yYW5nZSB2YWx1ZSAqLwotCQlpZiAobWluX3VWIDw9IHVWICYmIHVWIDw9IG1heF91VikKLQkJCXJldHVybiB0d2w0MDMwcmVnX3dyaXRlKGluZm8sIFZSRUdfREVESUNBVEVELCB2c2VsKTsKLQl9Ci0KLQlyZXR1cm4gLUVET007Ci19Ci0KLXN0YXRpYyBpbnQgdHdsNDAzMGxkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludAkJCXZzZWwgPSB0d2w0MDMwcmVnX3JlYWQoaW5mbywgVlJFR19ERURJQ0FURUQpOwotCi0JaWYgKHZzZWwgPCAwKQotCQlyZXR1cm4gdnNlbDsKLQotCXZzZWwgJj0gaW5mby0+dGFibGVfbGVuIC0gMTsKLQlyZXR1cm4gTERPX01WKGluZm8tPnRhYmxlW3ZzZWxdKSAqIDEwMDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0d2w0MDMwbGRvX29wcyA9IHsKLQkubGlzdF92b2x0YWdlCT0gdHdsNDAzMGxkb19saXN0X3ZvbHRhZ2UsCi0KLQkuc2V0X3ZvbHRhZ2UJPSB0d2w0MDMwbGRvX3NldF92b2x0YWdlLAotCS5nZXRfdm9sdGFnZQk9IHR3bDQwMzBsZG9fZ2V0X3ZvbHRhZ2UsCi0KLQkuZW5hYmxlCQk9IHR3bDQwMzByZWdfZW5hYmxlLAotCS5kaXNhYmxlCT0gdHdsNDAzMHJlZ19kaXNhYmxlLAotCS5pc19lbmFibGVkCT0gdHdsNDAzMHJlZ19pc19lbmFibGVkLAotCi0JLnNldF9tb2RlCT0gdHdsNDAzMHJlZ19zZXRfbW9kZSwKLQotCS5nZXRfc3RhdHVzCT0gdHdsNDAzMHJlZ19nZXRfc3RhdHVzLAotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIEZpeGVkIHZvbHRhZ2UgTERPcyBkb24ndCBoYXZlIGEgVlNFTCBmaWVsZCB0byB1cGRhdGUuCi0gKi8KLXN0YXRpYyBpbnQgdHdsNDAzMGZpeGVkX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCi17Ci0Jc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQotCXJldHVybiBpbmZvLT5taW5fbVYgKiAxMDAwOwotfQotCi1zdGF0aWMgaW50IHR3bDQwMzBmaXhlZF9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKLXsKLQlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCi0JcmV0dXJuIGluZm8tPm1pbl9tViAqIDEwMDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0d2w0MDMwZml4ZWRfb3BzID0gewotCS5saXN0X3ZvbHRhZ2UJPSB0d2w0MDMwZml4ZWRfbGlzdF92b2x0YWdlLAotCi0JLmdldF92b2x0YWdlCT0gdHdsNDAzMGZpeGVkX2dldF92b2x0YWdlLAotCi0JLmVuYWJsZQkJPSB0d2w0MDMwcmVnX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHR3bDQwMzByZWdfZGlzYWJsZSwKLQkuaXNfZW5hYmxlZAk9IHR3bDQwMzByZWdfaXNfZW5hYmxlZCwKLQotCS5zZXRfbW9kZQk9IHR3bDQwMzByZWdfc2V0X21vZGUsCi0KLQkuZ2V0X3N0YXR1cwk9IHR3bDQwMzByZWdfZ2V0X3N0YXR1cywKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgVFdMX0FESlVTVEFCTEVfTERPKGxhYmVsLCBvZmZzZXQsIG51bSkgeyBcCi0JLmJhc2UgPSBvZmZzZXQsIFwKLQkuaWQgPSBudW0sIFwKLQkudGFibGVfbGVuID0gQVJSQVlfU0laRShsYWJlbCMjX1ZTRUxfdGFibGUpLCBcCi0JLnRhYmxlID0gbGFiZWwjI19WU0VMX3RhYmxlLCBcCi0JLmRlc2MgPSB7IFwKLQkJLm5hbWUgPSAjbGFiZWwsIFwKLQkJLmlkID0gVFdMNDAzMF9SRUdfIyNsYWJlbCwgXAotCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUobGFiZWwjI19WU0VMX3RhYmxlKSwgXAotCQkub3BzID0gJnR3bDQwMzBsZG9fb3BzLCBcCi0JCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsIFwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsIFwKLQkJfSwgXAotCX0KLQotI2RlZmluZSBUV0xfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgbnVtKSB7IFwKLQkuYmFzZSA9IG9mZnNldCwgXAotCS5pZCA9IG51bSwgXAotCS5taW5fbVYgPSBtVm9sdHMsIFwKLQkuZGVzYyA9IHsgXAotCQkubmFtZSA9ICNsYWJlbCwgXAotCQkuaWQgPSBUV0w0MDMwX1JFR18jI2xhYmVsLCBcCi0JCS5uX3ZvbHRhZ2VzID0gMSwgXAotCQkub3BzID0gJnR3bDQwMzBmaXhlZF9vcHMsIFwKLQkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgXAotCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAotCQl9LCBcCi0JfQotCi0vKgotICogV2UgbGlzdCByZWd1bGF0b3JzIGhlcmUgaWYgc3lzdGVtcyBuZWVkIHNvbWUgbGV2ZWwgb2YKLSAqIHNvZnR3YXJlIGNvbnRyb2wgb3ZlciB0aGVtIGFmdGVyIGJvb3QuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdHdscmVnX2luZm8gdHdsNDAzMF9yZWdzW10gPSB7Ci0JVFdMX0FESlVTVEFCTEVfTERPKFZBVVgxLCAweDE3LCAxKSwKLQlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDJfNDAzMCwgMHgxYiwgMiksCi0JVFdMX0FESlVTVEFCTEVfTERPKFZBVVgyLCAweDFiLCAyKSwKLQlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDMsIDB4MWYsIDMpLAotCVRXTF9BREpVU1RBQkxFX0xETyhWQVVYNCwgMHgyMywgNCksCi0JVFdMX0FESlVTVEFCTEVfTERPKFZNTUMxLCAweDI3LCA1KSwKLQlUV0xfQURKVVNUQUJMRV9MRE8oVk1NQzIsIDB4MmIsIDYpLAotCS8qCi0JVFdMX0FESlVTVEFCTEVfTERPKFZQTEwxLCAweDJmLCA3KSwKLQkqLwotCVRXTF9BREpVU1RBQkxFX0xETyhWUExMMiwgMHgzMywgOCksCi0JVFdMX0FESlVTVEFCTEVfTERPKFZTSU0sIDB4MzcsIDkpLAotCVRXTF9BREpVU1RBQkxFX0xETyhWREFDLCAweDNiLCAxMCksCi0JLyoKLQlUV0xfQURKVVNUQUJMRV9MRE8oVklOVEFOQTEsIDB4M2YsIDExKSwKLQlUV0xfQURKVVNUQUJMRV9MRE8oVklOVEFOQTIsIDB4NDMsIDEyKSwKLQlUV0xfQURKVVNUQUJMRV9MRE8oVklOVERJRywgMHg0NywgMTMpLAotCVRXTF9TTVBTKFZJTywgMHg0YiwgMTQpLAotCVRXTF9TTVBTKFZERDEsIDB4NTUsIDE1KSwKLQlUV0xfU01QUyhWREQyLCAweDYzLCAxNiksCi0JICovCi0JVFdMX0ZJWEVEX0xETyhWVVNCMVY1LCAweDcxLCAxNTAwLCAxNyksCi0JVFdMX0ZJWEVEX0xETyhWVVNCMVY4LCAweDc0LCAxODAwLCAxOCksCi0JVFdMX0ZJWEVEX0xETyhWVVNCM1YxLCAweDc3LCAzMTAwLCAxOSksCi0JLyogVlVTQkNQIGlzIG1hbmFnZWQgKm9ubHkqIGJ5IHRoZSBVU0Igc3ViY2hpcCAqLwotfTsKLQotc3RhdGljIGludCB0d2w0MDMwcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50CQkJCWk7Ci0Jc3RydWN0IHR3bHJlZ19pbmZvCQkqaW5mbzsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkqaW5pdGRhdGE7Ci0Jc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMJKmM7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYJCSpyZGV2OwotCi0JZm9yIChpID0gMCwgaW5mbyA9IE5VTEw7IGkgPCBBUlJBWV9TSVpFKHR3bDQwMzBfcmVncyk7IGkrKykgewotCQlpZiAodHdsNDAzMF9yZWdzW2ldLmRlc2MuaWQgIT0gcGRldi0+aWQpCi0JCQljb250aW51ZTsKLQkJaW5mbyA9IHR3bDQwMzBfcmVncyArIGk7Ci0JCWJyZWFrOwotCX0KLQlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW5pdGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAoIWluaXRkYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIENvbnN0cmFpbiBib2FyZC1zcGVjaWZpYyBjYXBhYmlsaXRpZXMgYWNjb3JkaW5nIHRvIHdoYXQKLQkgKiB0aGlzIGRyaXZlciBhbmQgdGhlIGNoaXAgaXRzZWxmIGNhbiBhY3R1YWxseSBkby4KLQkgKi8KLQljID0gJmluaXRkYXRhLT5jb25zdHJhaW50czsKLQljLT52YWxpZF9tb2Rlc19tYXNrICY9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7Ci0JYy0+dmFsaWRfb3BzX21hc2sgJj0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCi0JCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTOwotCi0JcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmaW5mby0+ZGVzYywgJnBkZXYtPmRldiwgaW5pdGRhdGEsIGluZm8pOwotCWlmIChJU19FUlIocmRldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgJXMsICVsZFxuIiwKLQkJCQlpbmZvLT5kZXNjLm5hbWUsIFBUUl9FUlIocmRldikpOwotCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKLQl9Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7Ci0KLQkvKiBOT1RFOiAgbWFueSByZWd1bGF0b3JzIHN1cHBvcnQgc2hvcnQtY2lyY3VpdCBJUlFzIChwcmVzZW50YWJsZQotCSAqIGFzIFJFR1VMQVRPUl9PVkVSX0NVUlJFTlQgbm90aWZpY2F0aW9ucz8pIGNvbmZpZ3VyZWQgdmlhOgotCSAqICAtIFNDX0NPTkZJRwotCSAqICAtIFNDX0RFVEVDVDEgKHZpbnRhbmEyLCB2bW1jMS8yLCB2YXV4MS8yLzMvNCkKLQkgKiAgLSBTQ19ERVRFQ1QyICh2dXNiLCB2ZGFjLCB2aW8sIHZkZDEvMiwgdnBsbDIpCi0JICogIC0gSVRfQ09ORklHCi0JICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgdHdsNDAzMHJlZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZWd1bGF0b3JfdW5yZWdpc3RlcihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9BTElBUygicGxhdGZvcm06dHdsNDAzMF9yZWciKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHdsNDAzMHJlZ19kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHR3bDQwMzByZWdfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0d2w0MDMwcmVnX3JlbW92ZSksCi0JLyogTk9URTogc2hvcnQgbmFtZSwgdG8gd29yayBhcm91bmQgZHJpdmVyIG1vZGVsIHRydW5jYXRpb24gb2YKLQkgKiAidHdsNDAzMF9yZWd1bGF0b3IuMTIiIChhbmQgZnJpZW5kcykgdG8gInR3bDQwMzBfcmVndWxhdG9yLjEiLgotCSAqLwotCS5kcml2ZXIubmFtZQk9ICJ0d2w0MDMwX3JlZyIsCi0JLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHdsNDAzMHJlZ19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdHdsNDAzMHJlZ19kcml2ZXIpOwotfQotc3Vic3lzX2luaXRjYWxsKHR3bDQwMzByZWdfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0d2w0MDMwcmVnX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHdsNDAzMHJlZ19kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQodHdsNDAzMHJlZ19leGl0KQotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlRXTDQwMzAgcmVndWxhdG9yIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKaW5kZXggMmVlZmMxYS4uMGE2NTc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9yZWd1bGF0b3IuaD4KQEAgLTM5LDYgKzQxLDcgQEAKICNkZWZpbmUgV004MzFYX0RDRENfQ09OVFJPTF8yICAgICAxCiAjZGVmaW5lIFdNODMxWF9EQ0RDX09OX0NPTkZJRyAgICAgMgogI2RlZmluZSBXTTgzMVhfRENEQ19TTEVFUF9DT05UUk9MIDMKKyNkZWZpbmUgV004MzFYX0RDRENfRFZTX0NPTlRST0wgICA0CiAKIC8qCiAgKiBTaGFyZWQKQEAgLTUwLDYgKzUzLDEwIEBACiAJaW50IGJhc2U7CiAJc3RydWN0IHdtODMxeCAqd204MzF4OwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3I7CisJaW50IGR2c19ncGlvOworCWludCBkdnNfZ3Bpb19zdGF0ZTsKKwlpbnQgb25fdnNlbDsKKwlpbnQgZHZzX3ZzZWw7CiB9OwogCiBzdGF0aWMgaW50IHdtODMxeF9kY2RjX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCkBAIC0yNDAsMTEgKzI0Nyw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgd204MzF4X2J1Y2t2X3NldF92b2x0YWdlX2ludChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHJlZywKLQkJCQkJIGludCBtaW5fdVYsIGludCBtYXhfdVYpCitzdGF0aWMgaW50IHdtODMxeF9idWNrdl9zZWxlY3RfbWluX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCiB7Ci0Jc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkY2RjLT53bTgzMXg7CiAJdTE2IHZzZWw7CiAKIAlpZiAobWluX3VWIDwgNjAwMDAwKQpAQCAtMjU3LDM5ICsyNjIsMTI2IEBACiAJaWYgKHdtODMxeF9idWNrdl9saXN0X3ZvbHRhZ2UocmRldiwgdnNlbCkgPiBtYXhfdVYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIHJlZywgV004MzFYX0RDMV9PTl9WU0VMX01BU0ssIHZzZWwpOworCXJldHVybiB2c2VsOworfQorCitzdGF0aWMgaW50IHdtODMxeF9idWNrdl9zZWxlY3RfbWF4X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJdTE2IHZzZWw7CisKKwlpZiAobWF4X3VWIDwgNjAwMDAwIHx8IG1heF91ViA+IDE4MDAwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJdnNlbCA9ICgobWF4X3VWIC0gNjAwMDAwKSAvIDEyNTAwKSArIDg7CisKKwlpZiAod204MzF4X2J1Y2t2X2xpc3Rfdm9sdGFnZShyZGV2LCB2c2VsKSA8IG1pbl91ViB8fAorCSAgICB3bTgzMXhfYnVja3ZfbGlzdF92b2x0YWdlKHJkZXYsIHZzZWwpIDwgbWF4X3VWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2c2VsOworfQorCitzdGF0aWMgaW50IHdtODMxeF9idWNrdl9zZXRfZHZzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCWlmIChzdGF0ZSA9PSBkY2RjLT5kdnNfZ3Bpb19zdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlkY2RjLT5kdnNfZ3Bpb19zdGF0ZSA9IHN0YXRlOworCWdwaW9fc2V0X3ZhbHVlKGRjZGMtPmR2c19ncGlvLCBzdGF0ZSk7CisKKwkvKiBTaG91bGQgd2FpdCBmb3IgRFZTIHN0YXRlIGNoYW5nZSB0byBiZSBhc3NlcnRlZCBpZiB3ZSBoYXZlCisJICogYSBHUElPIGZvciBpdCwgZm9yIG5vdyBhc3N1bWUgdGhlIGRldmljZSBpcyBjb25maWd1cmVkCisJICogZm9yIHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHRyYW5zaXRpb24uCisJICovCisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bTgzMXhfYnVja3Zfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQorCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQogewogCXN0cnVjdCB3bTgzMXhfZGNkYyAqZGNkYyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JdTE2IHJlZyA9IGRjZGMtPmJhc2UgKyBXTTgzMVhfRENEQ19PTl9DT05GSUc7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGNkYy0+d204MzF4OworCWludCBvbl9yZWcgPSBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfT05fQ09ORklHOworCWludCBkdnNfcmVnID0gZGNkYy0+YmFzZSArIFdNODMxWF9EQ0RDX0RWU19DT05UUk9MOworCWludCB2c2VsLCByZXQ7CiAKLQlyZXR1cm4gd204MzF4X2J1Y2t2X3NldF92b2x0YWdlX2ludChyZGV2LCByZWcsIG1pbl91ViwgbWF4X3VWKTsKKwl2c2VsID0gd204MzF4X2J1Y2t2X3NlbGVjdF9taW5fdm9sdGFnZShyZGV2LCBtaW5fdVYsIG1heF91Vik7CisJaWYgKHZzZWwgPCAwKQorCQlyZXR1cm4gdnNlbDsKKworCS8qIElmIHRoaXMgdmFsdWUgaXMgYWxyZWFkeSBzZXQgdGhlbiBkbyBhIEdQSU8gdXBkYXRlIGlmIHdlIGNhbiAqLworCWlmIChkY2RjLT5kdnNfZ3BpbyAmJiBkY2RjLT5vbl92c2VsID09IHZzZWwpCisJCXJldHVybiB3bTgzMXhfYnVja3Zfc2V0X2R2cyhyZGV2LCAwKTsKKworCWlmIChkY2RjLT5kdnNfZ3BpbyAmJiBkY2RjLT5kdnNfdnNlbCA9PSB2c2VsKQorCQlyZXR1cm4gd204MzF4X2J1Y2t2X3NldF9kdnMocmRldiwgMSk7CisKKwkvKiBBbHdheXMgc2V0IHRoZSBPTiBzdGF0dXMgdG8gdGhlIG1pbmltdW0gdm9sdGFnZSAqLworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIG9uX3JlZywgV004MzFYX0RDMV9PTl9WU0VMX01BU0ssIHZzZWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRjZGMtPm9uX3ZzZWwgPSB2c2VsOworCisJaWYgKCFkY2RjLT5kdnNfZ3BpbykKKwkJcmV0dXJuIHJldDsKKworCS8qIEtpY2sgdGhlIHZvbHRhZ2UgdHJhbnNpdGlvbiBub3cgKi8KKwlyZXQgPSB3bTgzMXhfYnVja3Zfc2V0X2R2cyhyZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNldCB0aGUgaGlnaCB2b2x0YWdlIGFzIHRoZSBEVlMgdm9sdGFnZS4gIFRoaXMgaXMgb3B0aW1pc2VkCisJICogZm9yIENQVWZyZXEgdXNhZ2UsIG1vc3QgcHJvY2Vzc29ycyB3aWxsIGtlZXAgdGhlIG1heGltdW0KKwkgKiB2b2x0YWdlIGNvbnN0YW50IGFuZCBsb3dlciB0aGUgbWluaW11bSB3aXRoIHRoZSBmcmVxdWVuY3kuICovCisJdnNlbCA9IHdtODMxeF9idWNrdl9zZWxlY3RfbWF4X3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYpOworCWlmICh2c2VsIDwgMCkgeworCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gLSBhdCB3b3JzdCB0aGUgc2FtZSB2c2VsCisJCSAqIHNob3VsZCBiZSBjaG9zZW4gKi8KKwkJV0FSTl9PTih2c2VsIDwgMCk7CisJCXJldHVybiAwOworCX0KKworCS8qIERvbid0IGJvdGhlciBpZiBpdCdzIHRoZSBzYW1lIFZTRUwgd2UncmUgYWxyZWFkeSB1c2luZyAqLworCWlmICh2c2VsID09IGRjZGMtPm9uX3ZzZWwpCisJCXJldHVybiAwOworCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZHZzX3JlZywgV004MzFYX0RDMV9EVlNfVlNFTF9NQVNLLCB2c2VsKTsKKwlpZiAocmV0ID09IDApCisJCWRjZGMtPmR2c192c2VsID0gdnNlbDsKKwllbHNlCisJCWRldl93YXJuKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBEQ0RDIERWUyBWU0VMOiAlZFxuIiwKKwkJCSByZXQpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2J1Y2t2X3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJCSAgICAgaW50IHVWKQorCQkJCQkgICAgaW50IHVWKQogewogCXN0cnVjdCB3bTgzMXhfZGNkYyAqZGNkYyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGNkYy0+d204MzF4OwogCXUxNiByZWcgPSBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfU0xFRVBfQ09OVFJPTDsKKwlpbnQgdnNlbDsKIAotCXJldHVybiB3bTgzMXhfYnVja3Zfc2V0X3ZvbHRhZ2VfaW50KHJkZXYsIHJlZywgdVYsIHVWKTsKKwl2c2VsID0gd204MzF4X2J1Y2t2X3NlbGVjdF9taW5fdm9sdGFnZShyZGV2LCB1ViwgdVYpOworCWlmICh2c2VsIDwgMCkKKwkJcmV0dXJuIHZzZWw7CisKKwlyZXR1cm4gd204MzF4X3NldF9iaXRzKHdtODMxeCwgcmVnLCBXTTgzMVhfREMxX1NMUF9WU0VMX01BU0ssIHZzZWwpOwogfQogCiBzdGF0aWMgaW50IHdtODMxeF9idWNrdl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRjZGMtPndtODMxeDsKLQl1MTYgcmVnID0gZGNkYy0+YmFzZSArIFdNODMxWF9EQ0RDX09OX0NPTkZJRzsKLQlpbnQgdmFsOwogCi0JdmFsID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgcmVnKTsKLQlpZiAodmFsIDwgMCkKLQkJcmV0dXJuIHZhbDsKLQotCXJldHVybiB3bTgzMXhfYnVja3ZfbGlzdF92b2x0YWdlKHJkZXYsIHZhbCAmIFdNODMxWF9EQzFfT05fVlNFTF9NQVNLKTsKKwlpZiAoZGNkYy0+ZHZzX2dwaW8gJiYgZGNkYy0+ZHZzX2dwaW9fc3RhdGUpCisJCXJldHVybiB3bTgzMXhfYnVja3ZfbGlzdF92b2x0YWdlKHJkZXYsIGRjZGMtPmR2c192c2VsKTsKKwllbHNlCisJCXJldHVybiB3bTgzMXhfYnVja3ZfbGlzdF92b2x0YWdlKHJkZXYsIGRjZGMtPm9uX3ZzZWwpOwogfQogCiAvKiBDdXJyZW50IGxpbWl0IG9wdGlvbnMgKi8KQEAgLTM0Niw2ICs0MzgsNjQgQEAKIAkuc2V0X3N1c3BlbmRfbW9kZSA9IHdtODMxeF9kY2RjX3NldF9zdXNwZW5kX21vZGUsCiB9OwogCisvKgorICogU2V0IHVwIERWUyBjb250cm9sLiAgV2UganVzdCBsb2cgZXJyb3JzIHNpbmNlIHdlIGNhbiBzdGlsbCBydW4KKyAqICh3aXRoIHJlZHVjZWQgcGVyZm9ybWFuY2UpIGlmIHdlIGZhaWwuCisgKi8KK3N0YXRpYyBfX2RldmluaXQgdm9pZCB3bTgzMXhfYnVja3ZfZHZzX2luaXQoc3RydWN0IHdtODMxeF9kY2RjICpkY2RjLAorCQkJCQkgICAgc3RydWN0IHdtODMxeF9idWNrdl9wZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGNkYy0+d204MzF4OworCWludCByZXQ7CisJdTE2IGN0cmw7CisKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+ZHZzX2dwaW8pCisJCXJldHVybjsKKworCXN3aXRjaCAocGRhdGEtPmR2c19jb250cm9sX3NyYykgeworCWNhc2UgMToKKwkJY3RybCA9IDIgPDwgV004MzFYX0RDMV9EVlNfU1JDX1NISUZUOworCQlicmVhazsKKwljYXNlIDI6CisJCWN0cmwgPSAzIDw8IFdNODMxWF9EQzFfRFZTX1NSQ19TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkludmFsaWQgRFZTIGNvbnRyb2wgc291cmNlICVkIGZvciAlc1xuIiwKKwkJCXBkYXRhLT5kdnNfY29udHJvbF9zcmMsIGRjZGMtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGNkYy0+YmFzZSArIFdNODMxWF9EQ0RDX0RWU19DT05UUk9MLAorCQkJICAgICAgV004MzFYX0RDMV9EVlNfU1JDX01BU0ssIGN0cmwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gc2V0ICVzIERWUyBzb3VyY2U6ICVkXG4iLAorCQkJZGNkYy0+bmFtZSwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+ZHZzX2dwaW8sICJEQ0RDIERWUyIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gZ2V0ICVzIERWUyBHUElPOiAlZFxuIiwKKwkJCWRjZGMtPm5hbWUsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBncGlvbGliIHdvbid0IGxldCB1cyByZWFkIHRoZSBHUElPIHN0YXR1cyBzbyBwaWNrIHRoZSBoaWdoZXIKKwkgKiBvZiB0aGUgdHdvIGV4aXN0aW5nIHZvbHRhZ2VzIHNvIHdlIHRha2UgaXQgYXMgcGxhdGZvcm0gZGF0YS4KKwkgKi8KKwlkY2RjLT5kdnNfZ3Bpb19zdGF0ZSA9IHBkYXRhLT5kdnNfaW5pdF9zdGF0ZTsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+ZHZzX2dwaW8sIGRjZGMtPmR2c19ncGlvX3N0YXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSAlcyBEVlMgR1BJTzogJWRcbiIsCisJCQlkY2RjLT5uYW1lLCByZXQpOworCQlncGlvX2ZyZWUocGRhdGEtPmR2c19ncGlvKTsKKwkJcmV0dXJuOworCX0KKworCWRjZGMtPmR2c19ncGlvID0gcGRhdGEtPmR2c19ncGlvOworfQorCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfYnVja3ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CkBAIC0zODQsNiArNTM0LDIzIEBACiAJZGNkYy0+ZGVzYy5vcHMgPSAmd204MzF4X2J1Y2t2X29wczsKIAlkY2RjLT5kZXNjLm93bmVyID0gVEhJU19NT0RVTEU7CiAKKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfT05fQ09ORklHKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgT04gVlNFTDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwlkY2RjLT5vbl92c2VsID0gcmV0ICYgV004MzFYX0RDMV9PTl9WU0VMX01BU0s7CisKKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfT05fQ09ORklHKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgRFZTIFZTRUw6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisJZGNkYy0+ZHZzX3ZzZWwgPSByZXQgJiBXTTgzMVhfREMxX0RWU19WU0VMX01BU0s7CisKKwlpZiAocGRhdGEtPmRjZGNbaWRdKQorCQl3bTgzMXhfYnVja3ZfZHZzX2luaXQoZGNkYywgcGRhdGEtPmRjZGNbaWRdLT5kcml2ZXJfZGF0YSk7CisKIAlkY2RjLT5yZWd1bGF0b3IgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmRjZGMtPmRlc2MsICZwZGV2LT5kZXYsCiAJCQkJCSAgICAgcGRhdGEtPmRjZGNbaWRdLCBkY2RjKTsKIAlpZiAoSVNfRVJSKGRjZGMtPnJlZ3VsYXRvcikpIHsKQEAgLTQyMiw2ICs1ODksOCBAQAogZXJyX3JlZ3VsYXRvcjoKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihkY2RjLT5yZWd1bGF0b3IpOwogZXJyOgorCWlmIChkY2RjLT5kdnNfZ3BpbykKKwkJZ3Bpb19mcmVlKGRjZGMtPmR2c19ncGlvKTsKIAlrZnJlZShkY2RjKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDM0LDYgKzYwMyw4IEBACiAJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIkhDIiksIGRjZGMpOwogCXdtODMxeF9mcmVlX2lycSh3bTgzMXgsIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJVViIpLCBkY2RjKTsKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihkY2RjLT5yZWd1bGF0b3IpOworCWlmIChkY2RjLT5kdnNfZ3BpbykKKwkJZ3Bpb19mcmVlKGRjZGMtPmR2c19ncGlvKTsKIAlrZnJlZShkY2RjKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCmluZGV4IDkwMmRiNTYuLjYxZTAyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwogCWludCBvbl9yZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfTERPX09OX0NPTlRST0w7Ci0JdW5zaWduZWQgaW50IHJldDsKKwlpbnQgcmV0OwogCiAJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgb25fcmVnKTsKIAlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwppbmRleCA3NjhiZDBlLi4xYmJmZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0xMzMwLDkgKzEzMzAsMTAgQEAKIAkgfSwKIH07CiAKLXN0YXRpYyB2b2lkIHBtaWNfdXZfaGFuZGxlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsIHZvaWQgKmRhdGEpCitzdGF0aWMgaXJxcmV0dXJuX3QgcG1pY191dl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKilkYXRhOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAKIAltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CiAJaWYgKGlycSA9PSBXTTgzNTBfSVJRX0NTMSB8fCBpcnEgPT0gV004MzUwX0lSUV9DUzIpCkBAIC0xMzQ0LDYgKzEzNDUsOCBAQAogCQkJCQkgICAgICBSRUdVTEFUT1JfRVZFTlRfVU5ERVJfVk9MVEFHRSwKIAkJCQkJICAgICAgd204MzUwKTsKIAltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGludCB3bTgzNTBfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xMzg4LDcgKzEzOTEsNyBAQAogCiAJLyogcmVnaXN0ZXIgcmVndWxhdG9yIElSUSAqLwogCXJldCA9IHdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCB3bTgzNTBfcmVnW3BkZXYtPmlkXS5pcnEsCi0JCQkJICBwbWljX3V2X2hhbmRsZXIsIHJkZXYpOworCQkJCSAgcG1pY191dl9oYW5kbGVyLCAwLCAiVVYiLCByZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlcyBJUlFcbiIsCkBAIC0xMzk2LDggKzEzOTksNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNDA2LDcgKzE0MDcsNiBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIHdtODM1MF9yZWdbcGRldi0+aWRdLmlycSk7CiAJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxKTsKIAogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggZjJlMTAwNC4uODE2N2U5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0yNDIsNiArMjQyLDE1IEBACiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCiAJICB3YXRjaGRvZyB0aW1lciBpbiB0aGUgU1QgTTQxVDYwIGFuZCBNNDFUODAgUlRDIGNoaXBzIHNlcmllcy4KIAorY29uZmlnIFJUQ19EUlZfQlEzMksKKwl0cmlzdGF0ZSAiVEkgQlEzMjAwMCIKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFRJCisJICBCUTMyMDAwIEkyQyBSVEMgY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtYnEzMmsuCisKIGNvbmZpZyBSVENfRFJWX0RNMzU1RVZNCiAJdHJpc3RhdGUgIlRJIERhVmluY2kgRE0zNTUgRVZNIFJUQyIKIAlkZXBlbmRzIG9uIE1GRF9ETTM1NUVWTV9NU1AKQEAgLTI1OCwxNCArMjY3LDE0IEBACiAJICB0aGUgTWVuZWxhdXMgZHJpdmVyOyBpdCdzIG5vdCBzZXBhcmF0ZSBtb2R1bGUuCiAKIGNvbmZpZyBSVENfRFJWX1RXTDQwMzAKLQl0cmlzdGF0ZSAiVEkgVFdMNDAzMC9UV0w1MDMwL1RQUzY1OXgwIgorCXRyaXN0YXRlICJUSSBUV0w0MDMwL1RXTDUwMzAvVFdMNjAzMC9UUFM2NTl4MCIKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBUV0w0MDMwX0NPUkUKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBvbiB0aGUKLQkgIFRXTDQwMzAgZmFtaWx5IGNoaXBzLCB1c2VkIG1vc3RseSB3aXRoIE9NQVAzIHBsYXRmb3Jtcy4KKwkgIFRXTDQwMzAvVFdMNTAzMC9UV0w2MDMwIGZhbWlseSBjaGlwcywgdXNlZCBtb3N0bHkgd2l0aCBPTUFQMyBwbGF0Zm9ybXMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXR3bDQwMzAuCisJICB3aWxsIGJlIGNhbGxlZCBydGMtdHdsLgogCiBjb25maWcgUlRDX0RSVl9TMzUzOTBBCiAJdHJpc3RhdGUgIlNlaWtvIEluc3RydW1lbnRzIFMtMzUzOTBBIgpAQCAtNTkyLDE1ICs2MDEsMjIgQEAKIAkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSB0aGUgU1QtRXJpY3Nzb24gQUIzMTAwIE1peGVkIFNpZ25hbCBJQyBSVEMKIAkgIHN1cHBvcnQuIFRoaXMgY2hpcCBjb250YWlucyBhIGJhdHRlcnktIGFuZCBjYXBhY2l0b3ItYmFja2VkIFJUQy4KIAorY29uZmlnIFJUQ19EUlZfTlVDOTAwCisJdHJpc3RhdGUgIk5VQzkxMC9OVUM5MjAgUlRDIGRyaXZlciIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBBUkNIX1c5MFg5MDAKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBzdWJzeXN0ZW0gb2YgdGhlCisJICBOVUM5MTAvTlVDOTIwIHVzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcy4KIAogY29tbWVudCAib24tQ1BVIFJUQyBkcml2ZXJzIgogCiBjb25maWcgUlRDX0RSVl9PTUFQCiAJdHJpc3RhdGUgIlRJIE9NQVAxIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX0RBVklOQ0lfREE4WFgKIAloZWxwCi0JICBTYXkgInllcyIgaGVyZSB0byBzdXBwb3J0IHRoZSByZWFsIHRpbWUgY2xvY2sgb24gVEkgT01BUDEgY2hpcHMuCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZSBjYWxsZWQgcnRjLW9tYXAuCisJICBTYXkgInllcyIgaGVyZSB0byBzdXBwb3J0IHRoZSByZWFsIHRpbWUgY2xvY2sgb24gVEkgT01BUDEgYW5kCisJICBEQTh4eC9PTUFQLUwxM3ggY2hpcHMuICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhCisJICBtb2R1bGUgY2FsbGVkIHJ0Yy1vbWFwLgogCiBjb25maWcgUlRDX0RSVl9TM0MKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0Mgc2VyaWVzIFNvQyBSVEMiCkBAIC04NDYsNCArODYyLDEwIEBACiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBmb3VuZCBvbgogCSAgdGhlIFBDQVAyIEFTSUMgdXNlZCBvbiBzb21lIE1vdG9yb2xhIHBob25lcy4KIAorY29uZmlnIFJUQ19EUlZfTUMxMzc4MworCWRlcGVuZHMgb24gTUZEX01DMTM3ODMKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1DMTM3ODMgUlRDIgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1DMTM3ODMgUE1JQyBSVEMKKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggYWYxYmE3YS4uZTUxNjBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX0FUOTFTQU05KQkrPSBydGMtYXQ5MXNhbTkubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQVUxWFhYKQkrPSBydGMtYXUxeHh4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0JGSU4pCSs9IHJ0Yy1iZmluLm8KK29iai0kKENPTkZJR19SVENfRFJWX0JRMzJLKQkrPSBydGMtYnEzMmsubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQlE0ODAyKQkrPSBydGMtYnE0ODAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0NNT1MpCSs9IHJ0Yy1jbW9zLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0NPSDkwMTMzMSkJKz0gcnRjLWNvaDkwMTMzMS5vCkBAIC01Miw4ICs1MywxMCBAQAogb2JqLSQoQ09ORklHX1JUQ19NWEMpCQkrPSBydGMtbXhjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDApCSs9IHJ0Yy1tYXg2OTAwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KK29iai0kKENPTkZJR19SVENfRFJWX01DMTM3ODMpCSs9IHJ0Yy1tYzEzNzgzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01TTTYyNDIpCSs9IHJ0Yy1tc202MjQyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01WKQkrPSBydGMtbXYubworb2JqLSQoQ09ORklHX1JUQ19EUlZfTlVDOTAwKQkrPSBydGMtbnVjOTAwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX09NQVApCSs9IHJ0Yy1vbWFwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDQVApCSs9IHJ0Yy1wY2FwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1NjMpCSs9IHJ0Yy1wY2Y4NTYzLm8KQEAgLTgwLDcgKzgzLDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1NUTVApCSs9IHJ0Yy1zdG1wM3h4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TVU40VikJKz0gcnRjLXN1bjR2Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1RFU1QpCSs9IHJ0Yy10ZXN0Lm8KLW9iai0kKENPTkZJR19SVENfRFJWX1RXTDQwMzApCSs9IHJ0Yy10d2w0MDMwLm8KK29iai0kKENPTkZJR19SVENfRFJWX1RXTDQwMzApCSs9IHJ0Yy10d2wubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfVFg0OTM5KQkrPSBydGMtdHg0OTM5Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1YzMDIwKQkrPSBydGMtdjMwMjAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfVlI0MVhYKQkrPSBydGMtdnI0MXh4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCmluZGV4IGUxZWMzM2UuLjg4MjU2OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYwpAQCAtMjU2LDYgKzI1Niw4IEBACiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKKwogCXJ0Yy0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAogCQkJCSZhdDMyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHJ0Yy0+cnRjKSkgewpAQCAtMjY0LDcgKzI2Niw2IEBACiAJCWdvdG8gb3V0X2ZyZWVfaXJxOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkF0bWVsIFJUQyBmb3IgQVQzMkFQNzAweCBhdCAlMDhseCBpcnEgJWxkXG4iLApAQCAtMjczLDYgKzI3NCw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2lycToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlmcmVlX2lycShpcnEsIHJ0Yyk7CiBvdXRfaW91bm1hcDoKIAlpb3VubWFwKHJ0Yy0+cmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYnEzMmsuYyBiL2RyaXZlcnMvcnRjL3J0Yy1icTMyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOGNjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtYnEzMmsuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIERyaXZlciBmb3IgVEkgQlEzMjAwMCBSVEMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNlbWloYWxmLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorCisjZGVmaW5lIEJRMzJLX1NFQ09ORFMJCTB4MDAJLyogU2Vjb25kcyByZWdpc3RlciBhZGRyZXNzICovCisjZGVmaW5lIEJRMzJLX1NFQ09ORFNfTUFTSwkweDdGCS8qIE1hc2sgb3ZlciBzZWNvbmRzIHZhbHVlICovCisjZGVmaW5lIEJRMzJLX1NUT1AJCTB4ODAJLyogT3NjaWxsYXRvciBTdG9wIGZsYXQgKi8KKworI2RlZmluZSBCUTMyS19NSU5VVEVTCQkweDAxCS8qIE1pbnV0ZXMgcmVnaXN0ZXIgYWRkcmVzcyAqLworI2RlZmluZSBCUTMyS19NSU5VVEVTX01BU0sJMHg3RgkvKiBNYXNrIG92ZXIgbWludXRlcyB2YWx1ZSAqLworI2RlZmluZSBCUTMyS19PRgkJMHg4MAkvKiBPc2NpbGxhdG9yIEZhaWx1cmUgZmxhZyAqLworCisjZGVmaW5lIEJRMzJLX0hPVVJTX01BU0sJMHgzRgkvKiBNYXNrIG92ZXIgaG91cnMgdmFsdWUgKi8KKyNkZWZpbmUgQlEzMktfQ0VOVAkJMHg0MAkvKiBDZW50dXJ5IGZsYWcgKi8KKyNkZWZpbmUgQlEzMktfQ0VOVF9FTgkJMHg4MAkvKiBDZW50dXJ5IGZsYWcgZW5hYmxlIGJpdCAqLworCitzdHJ1Y3QgYnEzMmtfcmVncyB7CisJdWludDhfdAkJc2Vjb25kczsKKwl1aW50OF90CQltaW51dGVzOworCXVpbnQ4X3QJCWNlbnRfaG91cnM7CisJdWludDhfdAkJZGF5OworCXVpbnQ4X3QJCWRhdGU7CisJdWludDhfdAkJbW9udGg7CisJdWludDhfdAkJeWVhcnM7Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEzMmtfZHJpdmVyOworCitzdGF0aWMgaW50IGJxMzJrX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLCB1aW50OF90IG9mZiwgdWludDhfdCBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9ICZvZmYsCisJCX0sIHsKKwkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkubGVuID0gbGVuLAorCQkJLmJ1ZiA9IGRhdGEsCisJCX0KKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYnEzMmtfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLCB1aW50OF90IG9mZiwgdWludDhfdCBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1aW50OF90IGJ1ZmZlcltsZW4gKyAxXTsKKworCWJ1ZmZlclswXSA9IG9mZjsKKwltZW1jcHkoJmJ1ZmZlclsxXSwgZGF0YSwgbGVuKTsKKworCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIGxlbiArIDEpID09IGxlbiArIDEpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYnEzMmtfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IGJxMzJrX3JlZ3MgcmVnczsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGJxMzJrX3JlYWQoZGV2LCAmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3Muc2Vjb25kcyAmIEJRMzJLX1NFQ09ORFNfTUFTSyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVncy5taW51dGVzICYgQlEzMktfU0VDT05EU19NQVNLKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVncy5jZW50X2hvdXJzICYgQlEzMktfSE9VUlNfTUFTSyk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJlZ3MuZGF0ZSk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3MuZGF5KSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4ocmVncy5tb250aCkgLSAxOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyZWdzLnllYXJzKSArCisJCQkJKChyZWdzLmNlbnRfaG91cnMgJiBCUTMyS19DRU5UKSA/IDEwMCA6IDApOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgYnEzMmtfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgYnEzMmtfcmVncyByZWdzOworCisJcmVncy5zZWNvbmRzID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlyZWdzLm1pbnV0ZXMgPSBiaW4yYmNkKHRtLT50bV9taW4pOworCXJlZ3MuY2VudF9ob3VycyA9IGJpbjJiY2QodG0tPnRtX2hvdXIpIHwgQlEzMktfQ0VOVF9FTjsKKwlyZWdzLmRheSA9IGJpbjJiY2QodG0tPnRtX3dkYXkgKyAxKTsKKwlyZWdzLmRhdGUgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlyZWdzLm1vbnRoID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisKKwlpZiAodG0tPnRtX3llYXIgPj0gMTAwKSB7CisJCXJlZ3MuY2VudF9ob3VycyB8PSBCUTMyS19DRU5UOworCQlyZWdzLnllYXJzID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CisJfSBlbHNlCisJCXJlZ3MueWVhcnMgPSBiaW4yYmNkKHRtLT50bV95ZWFyKTsKKworCXJldHVybiBicTMya193cml0ZShkZXYsICZyZWdzLCAwLCBzaXplb2YocmVncykpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgYnEzMmtfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lCT0gYnEzMmtfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBicTMya19ydGNfc2V0X3RpbWUsCit9OworCitzdGF0aWMgaW50IGJxMzJrX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXVpbnQ4X3QgcmVnOworCWludCBlcnJvcjsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIENoZWNrIE9zY2lsbGF0b3IgU3RvcCBmbGFnICovCisJZXJyb3IgPSBicTMya19yZWFkKGRldiwgJnJlZywgQlEzMktfU0VDT05EUywgMSk7CisJaWYgKCFlcnJvciAmJiAocmVnICYgQlEzMktfU1RPUCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAiT3NjaWxsYXRvciB3YXMgaGFsdGVkLiBSZXN0YXJ0aW5nLi4uXG4iKTsKKwkJcmVnICY9IH5CUTMyS19TVE9QOworCQllcnJvciA9IGJxMzJrX3dyaXRlKGRldiwgJnJlZywgQlEzMktfU0VDT05EUywgMSk7CisJfQorCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogQ2hlY2sgT3NjaWxsYXRvciBGYWlsdXJlIGZsYWcgKi8KKwllcnJvciA9IGJxMzJrX3JlYWQoZGV2LCAmcmVnLCBCUTMyS19NSU5VVEVTLCAxKTsKKwlpZiAoIWVycm9yICYmIChyZWcgJiBCUTMyS19PRikpIHsKKwkJZGV2X3dhcm4oZGV2LCAiT3NjaWxsYXRvciBGYWlsdXJlLiBDaGVjayBSVEMgYmF0dGVyeS5cbiIpOworCQlyZWcgJj0gfkJRMzJLX09GOworCQllcnJvciA9IGJxMzJrX3dyaXRlKGRldiwgJnJlZywgQlEzMktfTUlOVVRFUywgMSk7CisJfQorCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihicTMya19kcml2ZXIuZHJpdmVyLm5hbWUsICZjbGllbnQtPmRldiwKKwkJCQkJCSZicTMya19ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBicTMya19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGJxMzJrX2lkW10gPSB7CisJeyAiYnEzMjAwMCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYnEzMmtfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEzMmtfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImJxMzJrIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYnEzMmtfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChicTMya19yZW1vdmUpLAorCS5pZF90YWJsZQk9IGJxMzJrX2lkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgYnEzMmtfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYnEzMmtfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGJxMzJrX2luaXQpOworCitzdGF0aWMgX19leGl0IHZvaWQgYnEzMmtfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZicTMya19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYnEzMmtfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNlbWloYWxmLCBQaW90ciBaaWVjaWsgPGtvc21vQHNlbWloYWxmLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgQlEzMjAwMCBJMkMgUlRDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jIGIvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jCmluZGV4IGQwMGEyNzQuLjI4MGZlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMKQEAgLTE2OSw2ICsxNjksOCBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHApOworCiAJcC0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiYnE0ODAyIiwgJnBkZXYtPmRldiwKIAkJCQkgICAgICZicTQ4MDJfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihwLT5ydGMpKSB7CkBAIC0xNzYsNyArMTc4LDYgQEAKIAkJZ290byBvdXRfaW91bm1hcDsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwKTsKIAllcnIgPSAwOwogb3V0OgogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwppbmRleCBmN2E0NzAxLi5jOGMxMjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKQEAgLTQyMCw0OSArNDIwLDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9ERVYpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVl9NT0RVTEUpCi0KLXN0YXRpYyBpbnQKLWNtb3NfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNtb3NfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBjbW9zX3J0YwkqY21vcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCWNhc2UgUlRDX1VJRV9PRkY6Ci0JY2FzZSBSVENfVUlFX09OOgotCQlpZiAoIWlzX3ZhbGlkX2lycShjbW9zLT5pcnEpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCS8qIFBJRSBPTi9PRkYgaXMgaGFuZGxlZCBieSBjbW9zX2lycV9zZXRfc3RhdGUoKSAqLwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCWlmICghaXNfdmFsaWRfaXJxKGNtb3MtPmlycSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KLQkJY21vc19pcnFfZGlzYWJsZShjbW9zLCBSVENfQUlFKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLworCisJaWYgKGVuYWJsZWQpCiAJCWNtb3NfaXJxX2VuYWJsZShjbW9zLCBSVENfQUlFKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfVUlFX09GRjoJLyogdXBkYXRlIG9mZiAqLwotCQljbW9zX2lycV9kaXNhYmxlKGNtb3MsIFJUQ19VSUUpOwotCQlicmVhazsKLQljYXNlIFJUQ19VSUVfT046CS8qIHVwZGF0ZSBvbiAqLwotCQljbW9zX2lycV9lbmFibGUoY21vcywgUlRDX1VJRSk7Ci0JCWJyZWFrOwotCX0KKwllbHNlCisJCWNtb3NfaXJxX2Rpc2FibGUoY21vcywgUlRDX0FJRSk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi0jZWxzZQotI2RlZmluZQljbW9zX3J0Y19pb2N0bAlOVUxMCi0jZW5kaWYKK3N0YXRpYyBpbnQgY21vc191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBjbW9zX3J0YwkqY21vcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIWlzX3ZhbGlkX2lycShjbW9zLT5pcnEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOworCisJaWYgKGVuYWJsZWQpCisJCWNtb3NfaXJxX2VuYWJsZShjbW9zLCBSVENfVUlFKTsKKwllbHNlCisJCWNtb3NfaXJxX2Rpc2FibGUoY21vcywgUlRDX1VJRSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfUFJPQykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfUFJPQ19NT0RVTEUpCiAKQEAgLTUwMywxNCArNDk3LDE1IEBACiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGNtb3NfcnRjX29wcyA9IHsKLQkuaW9jdGwJCT0gY21vc19ydGNfaW9jdGwsCi0JLnJlYWRfdGltZQk9IGNtb3NfcmVhZF90aW1lLAotCS5zZXRfdGltZQk9IGNtb3Nfc2V0X3RpbWUsCi0JLnJlYWRfYWxhcm0JPSBjbW9zX3JlYWRfYWxhcm0sCi0JLnNldF9hbGFybQk9IGNtb3Nfc2V0X2FsYXJtLAotCS5wcm9jCQk9IGNtb3NfcHJvY2ZzLAotCS5pcnFfc2V0X2ZyZXEJPSBjbW9zX2lycV9zZXRfZnJlcSwKLQkuaXJxX3NldF9zdGF0ZQk9IGNtb3NfaXJxX3NldF9zdGF0ZSwKKwkucmVhZF90aW1lCQk9IGNtb3NfcmVhZF90aW1lLAorCS5zZXRfdGltZQkJPSBjbW9zX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCQk9IGNtb3NfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCQk9IGNtb3Nfc2V0X2FsYXJtLAorCS5wcm9jCQkJPSBjbW9zX3Byb2NmcywKKwkuaXJxX3NldF9mcmVxCQk9IGNtb3NfaXJxX3NldF9mcmVxLAorCS5pcnFfc2V0X3N0YXRlCQk9IGNtb3NfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZQk9IGNtb3NfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUJPSBjbW9zX3VwZGF0ZV9pcnFfZW5hYmxlLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTY5MSw3ICs2ODYsOCBAQAogCSAqLwogI2lmCWRlZmluZWQoQ09ORklHX0FUQVJJKQogCWFkZHJlc3Nfc3BhY2UgPSA2NDsKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykKKyNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKSBcCisJCQl8fCBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX21pcHNfXykKIAlhZGRyZXNzX3NwYWNlID0gMTI4OwogI2Vsc2UKICN3YXJuaW5nIEFzc3VtaW5nIDEyOCBieXRlcyBvZiBSVEMrTlZSQU0gYWRkcmVzcyBzcGFjZSwgbm90IDY0IGJ5dGVzLgpAQCAtODcxLDggKzg2Nyw5IEBACiAJCQltYXNrID0gUlRDX0lSUU1BU0s7CiAJCXRtcCAmPSB+bWFzazsKIAkJQ01PU19XUklURSh0bXAsIFJUQ19DT05UUk9MKTsKLQkJaHBldF9tYXNrX3J0Y19pcnFfYml0KG1hc2spOwogCisJCS8qIHNodXQgZG93biBocGV0IGVtdWxhdGlvbiAtIHdlIGRvbid0IG5lZWQgaXQgZm9yIGFsYXJtICovCisJCWhwZXRfbWFza19ydGNfaXJxX2JpdChSVENfUElFfFJUQ19BSUV8UlRDX1VJRSk7CiAJCWNtb3NfY2hlY2tpbnRyKGNtb3MsIHRtcCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jCmluZGV4IDFlNzNjOGYuLjUzMmFjZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogI2lmZGVmIFJUQ19TRVRfQ0hBUkdFCiAJY2FzZSBSVENfU0VUX0NIQVJHRToKIAl7Ci0JCXN0cnVjdCBkczEzMDJfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAkJaW50IHRjc192YWw7CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0Y3NfdmFsLCAoaW50IF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCmluZGV4IDI3MzZiMTEuLjk2MzBlN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKQEAgLTYxNyw3ICs2MTcsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgZHMxMzA1X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGRzMTMwNQkJCSpkczEzMDU7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UJCSpydGM7CiAJaW50CQkJCXN0YXR1czsKIAl1OAkJCQlhZGRyLCB2YWx1ZTsKIAlzdHJ1Y3QgZHMxMzA1X3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTc1NiwxNCArNzU1LDEzIEBACiAJCWRldl9kYmcoJnNwaS0+ZGV2LCAiQU0vUE1cbiIpOwogCiAJLyogcmVnaXN0ZXIgUlRDIC4uLiBmcm9tIGhlcmUgb24sIGRzMTMwNS0+Y3RybCBuZWVkcyBsb2NraW5nICovCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiZHMxMzA1IiwgJnNwaS0+ZGV2LAorCWRzMTMwNS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiZHMxMzA1IiwgJnNwaS0+ZGV2LAogCQkJJmRzMTMwNV9vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJc3RhdHVzID0gUFRSX0VSUihydGMpOworCWlmIChJU19FUlIoZHMxMzA1LT5ydGMpKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoZHMxMzA1LT5ydGMpOwogCQlkZXZfZGJnKCZzcGktPmRldiwgInJlZ2lzdGVyIHJ0YyAtLT4gJWRcbiIsIHN0YXR1cyk7CiAJCWdvdG8gZmFpbDA7CiAJfQotCWRzMTMwNS0+cnRjID0gcnRjOwogCiAJLyogTWF5YmUgc2V0IHVwIGFsYXJtIElSUTsgYmUgcmVhZHkgdG8gaGFuZGxlIGl0IHRyaWdnZXJpbmcgcmlnaHQKIAkgKiBhd2F5LiAgTk9URSB0aGF0IHdlIGRvbid0IHNoYXJlIHRoaXMuICBUaGUgc2lnbmFsIGlzIGFjdGl2ZSBsb3csCkBAIC03NzQsMTIgKzc3MiwxNCBAQAogCWlmIChzcGktPmlycSkgewogCQlJTklUX1dPUksoJmRzMTMwNS0+d29yaywgZHMxMzA1X3dvcmspOwogCQlzdGF0dXMgPSByZXF1ZXN0X2lycShzcGktPmlycSwgZHMxMzA1X2lycSwKLQkJCQkwLCBkZXZfbmFtZSgmcnRjLT5kZXYpLCBkczEzMDUpOworCQkJCTAsIGRldl9uYW1lKCZkczEzMDUtPnJ0Yy0+ZGV2KSwgZHMxMzA1KTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWRldl9kYmcoJnNwaS0+ZGV2LCAicmVxdWVzdF9pcnEgJWQgLS0+ICVkXG4iLAogCQkJCQlzcGktPmlycSwgc3RhdHVzKTsKIAkJCWdvdG8gZmFpbDE7CiAJCX0KKworCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZzcGktPmRldiwgMSk7CiAJfQogCiAJLyogZXhwb3J0IE5WUkFNICovCkBAIC03OTQsNyArNzk0LDcgQEAKIGZhaWwyOgogCWZyZWVfaXJxKHNwaS0+aXJxLCBkczEzMDUpOwogZmFpbDE6Ci0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMTMwNS0+cnRjKTsKIGZhaWwwOgogCWtmcmVlKGRzMTMwNSk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTgwMiw3ICs4MDIsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBkczEzMDVfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IGRzMTMwNQkqZHMxMzA1ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IGRzMTMwNSAqZHMxMzA1ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKIAlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNwaS0+ZGV2LmtvYmosICZudnJhbSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwppbmRleCBlYjk5ZWU0Li5jNGVjNWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCkBAIC04NzQsMTMgKzg3NCwxNSBAQAogCX0KIAogCWlmICh3YW50X2lycSkgewotCQllcnIgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgZHMxMzA3X2lycSwgMCwKKwkJZXJyID0gcmVxdWVzdF9pcnEoY2xpZW50LT5pcnEsIGRzMTMwN19pcnEsIElSUUZfU0hBUkVELAogCQkJICBkczEzMDctPnJ0Yy0+bmFtZSwgY2xpZW50KTsKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkJInVuYWJsZSB0byByZXF1ZXN0IElSUSFcbiIpOwogCQkJZ290byBleGl0X2lycTsKIAkJfQorCisJCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJmNsaWVudC0+ZGV2LCAxKTsKIAkJc2V0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKTsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJnb3QgSVJRICVkXG4iLCBjbGllbnQtPmlycSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCmluZGV4IDcxM2Y3YmYuLjUzMTdiYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKQEAgLTM4Myw2ICszODMsOCBAQAogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBJUlFcbiIpOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQorCisJCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJmNsaWVudC0+ZGV2LCAxKTsKIAl9CiAKIAlkczEzNzQtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoY2xpZW50LT5uYW1lLCAmY2xpZW50LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKaW5kZXggNTM5Njc2ZS4uNDE2NmI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYwpAQCAtODcsNyArODcsNiBAQAogc3RydWN0IHJ0Y19wbGF0X2RhdGEgewogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJdm9pZCBfX2lvbWVtICppb2FkZHI7CQkvKiB2aXJ0dWFsIGJhc2UgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CQkvKiBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KIAlpbnQgc2l6ZTsJCQkJLyogYW1vdW50IG9mIG1lbW9yeSBtYXBwZWQgKi8KIAlpbnQgaXJxOwogCXVuc2lnbmVkIGludCBpcnFlbjsKQEAgLTk1LDYgKzk0LDcgQEAKIAlpbnQgYWxybV9taW47CiAJaW50IGFscm1faG91cjsKIAlpbnQgYWxybV9tZGF5OworCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHMxNTExX2xvY2spOwpAQCAtMzAyLDcgKzMwMiw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+cnRjLT5pcnFfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+bG9jaywgZmxhZ3MpOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9tZGF5IDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/CiAJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpICYgMHgzZiwKIAkgICAgICAgUlRDX0FMQVJNX0RBVEUpOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJICAgICAgIFJUQ19BTEFSTV9TRUMpOwogCXJ0Y193cml0ZShydGNfcmVhZChSVENfQ01EKSB8IChwZGF0YS0+aXJxZW4gPyBSVENfVElFIDogMCksIFJUQ19DTUQpOwogCXJ0Y19yZWFkKFJUQ19DTUQxKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmxvY2ssIGZsYWdzKTsKIH0KIAogIHN0YXRpYyBpbnQKQEAgLTM2Miw2MSArMzYyLDYzIEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldl9pZDsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IFJUQ19JUlFGOworCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMDsKIAorCXNwaW5fbG9jaygmcGRhdGEtPmxvY2spOwogCS8qCiAJICogcmVhZCBhbmQgY2xlYXIgaW50ZXJydXB0CiAJICovCi0JaWYgKCEocnRjX3JlYWQoUlRDX0NNRDEpICYgRFMxNTExX0lSUUYpKSB7Ci0JCXJldHVybiBJUlFfTk9ORTsKKwlpZiAocnRjX3JlYWQoUlRDX0NNRDEpICYgRFMxNTExX0lSUUYpIHsKKwkJZXZlbnRzID0gUlRDX0lSUUY7CisJCWlmIChydGNfcmVhZChSVENfQUxBUk1fU0VDKSAmIDB4ODApCisJCQlldmVudHMgfD0gUlRDX1VGOworCQllbHNlCisJCQlldmVudHMgfD0gUlRDX0FGOworCQlpZiAobGlrZWx5KHBkYXRhLT5ydGMpKQorCQkJcnRjX3VwZGF0ZV9pcnEocGRhdGEtPnJ0YywgMSwgZXZlbnRzKTsKIAl9Ci0JaWYgKHJ0Y19yZWFkKFJUQ19BTEFSTV9TRUMpICYgMHg4MCkgewotCQlldmVudHMgfD0gUlRDX1VGOwotCX0gZWxzZSB7Ci0JCWV2ZW50cyB8PSBSVENfQUY7Ci0JfQotCXJ0Y191cGRhdGVfaXJxKHBkYXRhLT5ydGMsIDEsIGV2ZW50cyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOworCXNwaW5fdW5sb2NrKCZwZGF0YS0+bG9jayk7CisJcmV0dXJuIGV2ZW50cyA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CiAKLSBzdGF0aWMgaW50Ci1kczE1MTFfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTUxMV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWlmIChwZGF0YS0+aXJxIDw9IDApIHsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsgLyogZmFsbCBiYWNrIGludG8gcnRjLWRldidzIGVtdWxhdGlvbiAqLwotCX0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXBkYXRhLT5pcnFlbiAmPSB+UlRDX0FGOwotCQlkczE1MTFfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKKwlpZiAocGRhdGEtPmlycSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZW5hYmxlZCkKIAkJcGRhdGEtPmlycWVuIHw9IFJUQ19BRjsKLQkJZHMxNTExX3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCQlicmVhazsKLQljYXNlIFJUQ19VSUVfT0ZGOgotCQlwZGF0YS0+aXJxZW4gJj0gflJUQ19VRjsKLQkJZHMxNTExX3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCQlicmVhazsKLQljYXNlIFJUQ19VSUVfT046CisJZWxzZQorCQlwZGF0YS0+aXJxZW4gJj0gflJUQ19BRjsKKwlkczE1MTFfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMxNTExX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHBkYXRhLT5pcnEgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGVuYWJsZWQpCiAJCXBkYXRhLT5pcnFlbiB8PSBSVENfVUY7Ci0JCWRzMTUxMV9ydGNfdXBkYXRlX2FsYXJtKHBkYXRhKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJZWxzZQorCQlwZGF0YS0+aXJxZW4gJj0gflJUQ19VRjsKKwlkczE1MTFfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE1MTFfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lCT0gZHMxNTExX3J0Y19yZWFkX3RpbWUsCi0JLnNldF90aW1lCT0gZHMxNTExX3J0Y19zZXRfdGltZSwKLQkucmVhZF9hbGFybQk9IGRzMTUxMV9ydGNfcmVhZF9hbGFybSwKLQkuc2V0X2FsYXJtCT0gZHMxNTExX3J0Y19zZXRfYWxhcm0sCi0JLmlvY3RsCQk9IGRzMTUxMV9ydGNfaW9jdGwsCisJLnJlYWRfdGltZQkJPSBkczE1MTFfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJCT0gZHMxNTExX3J0Y19zZXRfdGltZSwKKwkucmVhZF9hbGFybQkJPSBkczE1MTFfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQkJPSBkczE1MTFfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZQk9IGRzMTUxMV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUJPSBkczE1MTFfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAogfTsKIAogIHN0YXRpYyBzc2l6ZV90CkBAIC00OTIsMjkgKzQ5NCwyMyBAQAogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGE7CiAJaW50IHJldCA9IDA7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcGRhdGEpIHsKKwlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXBkYXRhLT5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBwZGF0YS0+c2l6ZSwgcGRldi0+bmFtZSkpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0JcGRhdGEtPmJhc2VhZGRyID0gcmVzLT5zdGFydDsKLQlwZGF0YS0+c2l6ZSA9IHBkYXRhLT5zaXplOwotCWRzMTUxMV9iYXNlID0gaW9yZW1hcChwZGF0YS0+YmFzZWFkZHIsIHBkYXRhLT5zaXplKTsKLQlpZiAoIWRzMTUxMV9iYXNlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHBkYXRhLT5zaXplLAorCQkJcGRldi0+bmFtZSkpCisJCXJldHVybiAtRUJVU1k7CisJZHMxNTExX2Jhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcGRhdGEtPnNpemUpOworCWlmICghZHMxNTExX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOwogCXBkYXRhLT5pb2FkZHIgPSBkczE1MTFfYmFzZTsKIAlwZGF0YS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIApAQCAtNTQwLDEzICs1MzYsMTUgQEAKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInZvbHRhZ2UtbG93IGRldGVjdGVkLlxuIik7CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5sb2NrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CiAJLyoKIAkgKiBpZiB0aGUgcGxhdGZvcm0gaGFzIGFuIGludGVycnVwdCBpbiBtaW5kIGZvciB0aGlzIGRldmljZSwKIAkgKiB0aGVuIGJ5IGFsbCBtZWFucywgc2V0IGl0CiAJICovCiAJaWYgKHBkYXRhLT5pcnEgPiAwKSB7CiAJCXJ0Y19yZWFkKFJUQ19DTUQxKTsKLQkJaWYgKHJlcXVlc3RfaXJxKHBkYXRhLT5pcnEsIGRzMTUxMV9pbnRlcnJ1cHQsCisJCWlmIChkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIHBkYXRhLT5pcnEsIGRzMTUxMV9pbnRlcnJ1cHQsCiAJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsIHBkZXYtPm5hbWUsIHBkZXYpIDwgMCkgewogCiAJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiaW50ZXJydXB0IG5vdCBhdmFpbGFibGUuXG4iKTsKQEAgLTU1NiwzMyArNTU0LDEzIEBACiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZkczE1MTFfcnRjX29wcywKIAkJVEhJU19NT0RVTEUpOwotCWlmIChJU19FUlIocnRjKSkgewotCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoSVNfRVJSKHJ0YykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CiAJcGRhdGEtPnJ0YyA9IHJ0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7Ci0JcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRzMTUxMV9udnJhbV9hdHRyKTsKLQlpZiAocmV0KSB7Ci0JCWdvdG8gb3V0OwotCX0KLQlyZXR1cm4gMDsKLSBvdXQ6Ci0JaWYgKHBkYXRhLT5ydGMpIHsKLQkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOwotCX0KLQlpZiAocGRhdGEtPmlycSA+IDApIHsKLQkJZnJlZV9pcnEocGRhdGEtPmlycSwgcGRldik7Ci0JfQotCWlmIChkczE1MTFfYmFzZSkgewotCQlpb3VubWFwKGRzMTUxMV9iYXNlKTsKLQkJZHMxNTExX2Jhc2UgPSBOVUxMOwotCX0KLQlpZiAocGRhdGEtPmJhc2VhZGRyKSB7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGF0YS0+YmFzZWFkZHIsIHBkYXRhLT5zaXplKTsKLQl9CiAKLQlrZnJlZShwZGF0YSk7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRzMTUxMV9udnJhbV9hdHRyKTsKKwlpZiAocmV0KQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPnJ0Yyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTkzLDE5ICs1NzEsMTMgQEAKIAogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZkczE1MTFfbnZyYW1fYXR0cik7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOwotCXBkYXRhLT5ydGMgPSBOVUxMOwogCWlmIChwZGF0YS0+aXJxID4gMCkgewogCQkvKgogCQkgKiBkaXNhYmxlIHRoZSBhbGFybSBpbnRlcnJ1cHQKIAkJICovCiAJCXJ0Y193cml0ZShydGNfcmVhZChSVENfQ01EKSAmIH5SVENfVElFLCBSVENfQ01EKTsKIAkJcnRjX3JlYWQoUlRDX0NNRDEpOwotCQlmcmVlX2lycShwZGF0YS0+aXJxLCBwZGV2KTsKIAl9Ci0JaW91bm1hcChwZGF0YS0+aW9hZGRyKTsKLQlkczE1MTFfYmFzZSA9IE5VTEw7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBkYXRhLT5iYXNlYWRkciwgcGRhdGEtPnNpemUpOwotCWtmcmVlKHBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCmluZGV4IDcxNzI4ODUuLmVkMWVmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMiCiAKICNkZWZpbmUgUlRDX1JFR19TSVpFCQkweDIwMDAKICNkZWZpbmUgUlRDX09GRlNFVAkJMHgxZmYwCkBAIC02MSw3ICs2MSw2IEBACiBzdHJ1Y3QgcnRjX3BsYXRfZGF0YSB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKLQlyZXNvdXJjZV9zaXplX3QgYmFzZWFkZHI7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2ppZmZpZXM7CiAJaW50IGlycTsKIAl1bnNpZ25lZCBpbnQgaXJxZW47CkBAIC02OSw2ICs2OCw3IEBACiAJaW50IGFscm1fbWluOwogCWludCBhbHJtX2hvdXI7CiAJaW50IGFscm1fbWRheTsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0aWMgaW50IGRzMTU1M19ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPmxvY2ssIGZsYWdzKTsKIAl3cml0ZWIocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwogCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9tZGF5KSwKIAkgICAgICAgaW9hZGRyICsgUlRDX0RBVEVfQUxBUk0pOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJICAgICAgIGlvYWRkciArIFJUQ19TRUNPTkRTX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmlycWVuID8gUlRDX0lOVFNfQUUgOiAwLCBpb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7CiAJcmVhZGIoaW9hZGRyICsgUlRDX0ZMQUdTKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBkczE1NTNfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQpAQCAtMTk0LDY0ICsxOTQsNjkgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKLQl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IFJUQ19JUlFGOworCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMDsKIAorCXNwaW5fbG9jaygmcGRhdGEtPmxvY2spOwogCS8qIHJlYWQgYW5kIGNsZWFyIGludGVycnVwdCAqLwotCWlmICghKHJlYWRiKGlvYWRkciArIFJUQ19GTEFHUykgJiBSVENfRkxBR1NfQUYpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0JaWYgKHJlYWRiKGlvYWRkciArIFJUQ19TRUNPTkRTX0FMQVJNKSAmIDB4ODApCi0JCWV2ZW50cyB8PSBSVENfVUY7Ci0JZWxzZQotCQlldmVudHMgfD0gUlRDX0FGOwotCXJ0Y191cGRhdGVfaXJxKHBkYXRhLT5ydGMsIDEsIGV2ZW50cyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOworCWlmIChyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpICYgUlRDX0ZMQUdTX0FGKSB7CisJCWV2ZW50cyA9IFJUQ19JUlFGOworCQlpZiAocmVhZGIoaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pICYgMHg4MCkKKwkJCWV2ZW50cyB8PSBSVENfVUY7CisJCWVsc2UKKwkJCWV2ZW50cyB8PSBSVENfQUY7CisJCWlmIChsaWtlbHkocGRhdGEtPnJ0YykpCisJCQlydGNfdXBkYXRlX2lycShwZGF0YS0+cnRjLCAxLCBldmVudHMpOworCX0KKwlzcGluX3VubG9jaygmcGRhdGEtPmxvY2spOworCXJldHVybiBldmVudHMgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQogCi1zdGF0aWMgaW50IGRzMTU1M19ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkczE1NTNfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAocGRhdGEtPmlycSA8PSAwKQotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOyAvKiBmYWxsIGJhY2sgaW50byBydGMtZGV2J3MgZW11bGF0aW9uICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlwZGF0YS0+aXJxZW4gJj0gflJUQ19BRjsKLQkJZHMxNTUzX3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CisJCXJldHVybiAtRUlOVkFMOworCWlmIChlbmFibGVkKQogCQlwZGF0YS0+aXJxZW4gfD0gUlRDX0FGOwotCQlkczE1NTNfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1VJRV9PRkY6Ci0JCXBkYXRhLT5pcnFlbiAmPSB+UlRDX1VGOwotCQlkczE1NTNfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1VJRV9PTjoKKwllbHNlCisJCXBkYXRhLT5pcnFlbiAmPSB+UlRDX0FGOworCWRzMTU1M19ydGNfdXBkYXRlX2FsYXJtKHBkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczE1NTNfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAocGRhdGEtPmlycSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZW5hYmxlZCkKIAkJcGRhdGEtPmlycWVuIHw9IFJUQ19VRjsKLQkJZHMxNTUzX3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwllbHNlCisJCXBkYXRhLT5pcnFlbiAmPSB+UlRDX1VGOworCWRzMTU1M19ydGNfdXBkYXRlX2FsYXJtKHBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTU1M19ydGNfb3BzID0gewotCS5yZWFkX3RpbWUJPSBkczE1NTNfcnRjX3JlYWRfdGltZSwKLQkuc2V0X3RpbWUJPSBkczE1NTNfcnRjX3NldF90aW1lLAotCS5yZWFkX2FsYXJtCT0gZHMxNTUzX3J0Y19yZWFkX2FsYXJtLAotCS5zZXRfYWxhcm0JPSBkczE1NTNfcnRjX3NldF9hbGFybSwKLQkuaW9jdGwJCT0gZHMxNTUzX3J0Y19pb2N0bCwKKwkucmVhZF90aW1lCQk9IGRzMTU1M19ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZQkJPSBkczE1NTNfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCQk9IGRzMTU1M19ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCQk9IGRzMTU1M19ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlCT0gZHMxNTUzX3J0Y19hbGFybV9pcnFfZW5hYmxlLAorCS51cGRhdGVfaXJxX2VuYWJsZQk9IGRzMTU1M19ydGNfdXBkYXRlX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3NpemVfdCBkczE1NTNfbnZyYW1fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkJCSBjaGFyICpidWYsIGxvZmZfdCBwb3MsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQotCQl0b19wbGF0Zm9ybV9kZXZpY2UoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKIAlzc2l6ZV90IGNvdW50OwpAQCAtMjY1LDggKzI3MCw4IEBACiAJCQkJICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCQkJICBjaGFyICpidWYsIGxvZmZfdCBwb3MsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQotCQl0b19wbGF0Zm9ybV9kZXZpY2UoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKIAlzc2l6ZV90IGNvdW50OwpAQCAtMjkxLDI2ICsyOTYsMjMgQEAKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGludCBjZW4sIHNlYzsKLQlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBOVUxMOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDsKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGE7CisJdm9pZCBfX2lvbWVtICppb2FkZHI7CiAJaW50IHJldCA9IDA7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCXBkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBSVENfUkVHX1NJWkUsIHBkZXYtPm5hbWUpKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCXBkYXRhLT5iYXNlYWRkciA9IHJlcy0+c3RhcnQ7Ci0JaW9hZGRyID0gaW9yZW1hcChwZGF0YS0+YmFzZWFkZHIsIFJUQ19SRUdfU0laRSk7Ci0JaWYgKCFpb2FkZHIpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgUlRDX1JFR19TSVpFLAorCQkJcGRldi0+bmFtZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpb2FkZHIgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgUlRDX1JFR19TSVpFKTsKKwlpZiAoIWlvYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcGRhdGEtPmlvYWRkciA9IGlvYWRkcjsKIAlwZGF0YS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIApAQCAtMzI2LDkgKzMyOCwxMyBAQAogCWlmIChyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpICYgUlRDX0ZMQUdTX0JMRikKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInZvbHRhZ2UtbG93IGRldGVjdGVkLlxuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmcGRhdGEtPmxvY2spOworCXBkYXRhLT5sYXN0X2ppZmZpZXMgPSBqaWZmaWVzOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBkYXRhKTsKIAlpZiAocGRhdGEtPmlycSA+IDApIHsKIAkJd3JpdGViKDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKLQkJaWYgKHJlcXVlc3RfaXJxKHBkYXRhLT5pcnEsIGRzMTU1M19ydGNfaW50ZXJydXB0LAorCQlpZiAoZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBwZGF0YS0+aXJxLAorCQkJCWRzMTU1M19ydGNfaW50ZXJydXB0LAogCQkJCUlSUUZfRElTQUJMRUQsIHBkZXYtPm5hbWUsIHBkZXYpIDwgMCkgewogCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImludGVycnVwdCBub3QgYXZhaWxhYmxlLlxuIik7CiAJCQlwZGF0YS0+aXJxID0gMDsKQEAgLTMzNywyNyArMzQzLDEzIEBACiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkJICAmZHMxNTUzX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJcmV0ID0gUFRSX0VSUihydGMpOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOwogCXBkYXRhLT5ydGMgPSBydGM7Ci0JcGRhdGEtPmxhc3RfamlmZmllcyA9IGppZmZpZXM7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOworCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRzMTU1M19udnJhbV9hdHRyKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMDsKLSBvdXQ6Ci0JaWYgKHBkYXRhLT5ydGMpCi0JCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+cnRjKTsKLQlpZiAocGRhdGEtPmlycSA+IDApCi0JCWZyZWVfaXJxKHBkYXRhLT5pcnEsIHBkZXYpOwotCWlmIChpb2FkZHIpCi0JCWlvdW5tYXAoaW9hZGRyKTsKLQlpZiAocGRhdGEtPmJhc2VhZGRyKQotCQlyZWxlYXNlX21lbV9yZWdpb24ocGRhdGEtPmJhc2VhZGRyLCBSVENfUkVHX1NJWkUpOwotCWtmcmVlKHBkYXRhKTsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzY3LDEzICszNTksOCBAQAogCiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRzMTU1M19udnJhbV9hdHRyKTsKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPnJ0Yyk7Ci0JaWYgKHBkYXRhLT5pcnEgPiAwKSB7CisJaWYgKHBkYXRhLT5pcnEgPiAwKQogCQl3cml0ZWIoMCwgcGRhdGEtPmlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKLQkJZnJlZV9pcnEocGRhdGEtPmlycSwgcGRldik7Ci0JfQotCWlvdW5tYXAocGRhdGEtPmlvYWRkcik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBkYXRhLT5iYXNlYWRkciwgUlRDX1JFR19TSVpFKTsKLQlrZnJlZShwZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYwppbmRleCAwOTI0OTQ1Li5hMTI3MzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC40IgogCiAjZGVmaW5lIFJUQ19TSVpFCQk4CiAKQEAgLTU1LDcgKzU1LDYgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkcl9ydGM7CiAJc2l6ZV90IHNpemVfbnZyYW07CiAJc2l6ZV90IHNpemU7Ci0JcmVzb3VyY2Vfc2l6ZV90IGJhc2VhZGRyOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9qaWZmaWVzOwogCXN0cnVjdCBiaW5fYXR0cmlidXRlIG52cmFtX2F0dHI7CiB9OwpAQCAtMTMyLDggKzEzMSw4IEBACiAJCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJCQkgY2hhciAqYnVmLCBsb2ZmX3QgcG9zLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KLQkJdG9fcGxhdGZvcm1fZGV2aWNlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHJfbnZyYW07CiAJc3NpemVfdCBjb3VudDsKQEAgLTE0Nyw4ICsxNDYsOCBAQAogCQkJCSAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkJCSAgY2hhciAqYnVmLCBsb2ZmX3QgcG9zLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KLQkJdG9fcGxhdGZvcm1fZGV2aWNlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHJfbnZyYW07CiAJc3NpemVfdCBjb3VudDsKQEAgLTE2MywyNyArMTYyLDI0IEBACiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgY2VuLCBzZWM7Ci0Jc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IE5VTEw7CisJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhOworCXZvaWQgX19pb21lbSAqaW9hZGRyOwogCWludCByZXQgPSAwOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGRhdGEtPnNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHBkYXRhLT5zaXplLCBwZGV2LT5uYW1lKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQlwZGF0YS0+YmFzZWFkZHIgPSByZXMtPnN0YXJ0OwotCWlvYWRkciA9IGlvcmVtYXAocGRhdGEtPmJhc2VhZGRyLCBwZGF0YS0+c2l6ZSk7Ci0JaWYgKCFpb2FkZHIpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcGRhdGEtPnNpemUsCisJCXBkZXYtPm5hbWUpKQorCQlyZXR1cm4gLUVCVVNZOworCWlvYWRkciA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCBwZGF0YS0+c2l6ZSk7CisJaWYgKCFpb2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCiAJcGRhdGEtPmlvYWRkcl9udnJhbSA9IGlvYWRkcjsKIAlwZGF0YS0+c2l6ZV9udnJhbSA9IHBkYXRhLT5zaXplIC0gUlRDX1NJWkU7CiAJcGRhdGEtPmlvYWRkcl9ydGMgPSBpb2FkZHIgKyBwZGF0YS0+c2l6ZV9udnJhbTsKQEAgLTIwNywzMSArMjAzLDE5IEBACiAJaWYgKCEocmVhZGIoaW9hZGRyICsgUlRDX0RBWSkgJiBSVENfQkFUVF9GTEFHKSkKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInZvbHRhZ2UtbG93IGRldGVjdGVkLlxuIik7CiAKLQlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCi0JCQkJICAmZHMxNzQyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJcmV0ID0gUFRSX0VSUihydGMpOwotCQlnb3RvIG91dDsKLQl9Ci0JcGRhdGEtPnJ0YyA9IHJ0YzsKIAlwZGF0YS0+bGFzdF9qaWZmaWVzID0gamlmZmllczsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAorCQkJCSAgJmRzMTc0Ml9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCXBkYXRhLT5ydGMgPSBydGM7CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmcGRhdGEtPm52cmFtX2F0dHIpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY3JlYXRpbmcgbnZyYW0gZmlsZSBpbiBzeXNmcyBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAJfQotCi0JcmV0dXJuIDA7Ci0gb3V0OgotCWlmIChwZGF0YS0+cnRjKQotCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPnJ0Yyk7Ci0JaWYgKHBkYXRhLT5pb2FkZHJfbnZyYW0pCi0JCWlvdW5tYXAocGRhdGEtPmlvYWRkcl9udnJhbSk7Ci0JaWYgKHBkYXRhLT5iYXNlYWRkcikKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBkYXRhLT5iYXNlYWRkciwgcGRhdGEtPnNpemUpOwotCWtmcmVlKHBkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDEsOSArMjI1LDYgQEAKIAogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwZGF0YS0+bnZyYW1fYXR0cik7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOwotCWlvdW5tYXAocGRhdGEtPmlvYWRkcl9udnJhbSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBkYXRhLT5iYXNlYWRkciwgcGRhdGEtPnNpemUpOwotCWtmcmVlKHBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jCmluZGV4IDBiMjE5NzUuLjhjYjViODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0MzUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDM1LmMKQEAgLTE0Miw3ICsxNDIsNiBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtNDh0MzVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdjsKIAlpbnQgcmV0ID0gMDsKQEAgLTE3MSwyMCArMTcwLDIxIEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtNDh0MzUiLCAmcGRldi0+ZGV2LAorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlwcml2LT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtNDh0MzUiLCAmcGRldi0+ZGV2LAogCQkJCSAgJm00OHQzNV9vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJcmV0ID0gUFRSX0VSUihydGMpOworCWlmIChJU19FUlIocHJpdi0+cnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXYtPnJ0Yyk7CiAJCWdvdG8gb3V0OwogCX0KLQlwcml2LT5ydGMgPSBydGM7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKIAlyZXR1cm4gMDsKIAogb3V0OgotCWlmIChwcml2LT5ydGMpCi0JCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOwogCWlmIChwcml2LT5yZWcpCiAJCWlvdW5tYXAocHJpdi0+cmVnKTsKIAlpZiAocHJpdi0+YmFzZWFkZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKaW5kZXggMzM5MjFhNi4uZWRlNDNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwpAQCAtNDgxLDYgKzQ4MSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXNwaW5fbG9ja19pbml0KCZtNDh0NTktPmxvY2spOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG00OHQ1OSk7CisKIAltNDh0NTktPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIobmFtZSwgJnBkZXYtPmRldiwgb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihtNDh0NTktPnJ0YykpIHsKIAkJcmV0ID0gUFRSX0VSUihtNDh0NTktPnJ0Yyk7CkBAIC00OTAsMTYgKzQ5MywxNCBAQAogCW00OHQ1OV9udnJhbV9hdHRyLnNpemUgPSBwZGF0YS0+b2Zmc2V0OwogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJm00OHQ1OV9udnJhbV9hdHRyKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKG00OHQ1OS0+cnRjKTsKIAkJZ290byBvdXQ7CisJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJm00OHQ1OS0+bG9jayk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbTQ4dDU5KTsKIAlyZXR1cm4gMDsKIAogb3V0OgotCWlmICghSVNfRVJSKG00OHQ1OS0+cnRjKSkKLQkJcnRjX2RldmljZV91bnJlZ2lzdGVyKG00OHQ1OS0+cnRjKTsKIAlpZiAobTQ4dDU5LT5pcnEgIT0gTk9fSVJRKQogCQlmcmVlX2lycShtNDh0NTktPmlycSwgJnBkZXYtPmRldik7CiAJaWYgKG00OHQ1OS0+aW9hZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1jMTM3ODMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzNzgzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwZjk4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzNzgzLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBSZWFsIFRpbWUgQ2xvY2sgZHJpdmVyIGZvciBGcmVlc2NhbGUgTUMxMzc4MyBQTUlDCisgKgorICogKEMpIDIwMDkgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAorICogKEMpIDIwMDkgVXdlIEtsZWluZS1Lb2VuaWcsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAibWMxMzc4My1ydGMiCisKKyNkZWZpbmUgTUMxMzc4M19SVENUT0QJMjAKKyNkZWZpbmUgTUMxMzc4M19SVENUT0RBCTIxCisjZGVmaW5lIE1DMTM3ODNfUlRDREFZCTIyCisjZGVmaW5lIE1DMTM3ODNfUlRDREFZQQkyMworCitzdHJ1Y3QgbWMxMzc4M19ydGMgeworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODM7CisJaW50IHZhbGlkOworfTsKKworc3RhdGljIGludCBtYzEzNzgzX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzZWNvbmRzLCBkYXlzMSwgZGF5czI7CisJdW5zaWduZWQgbG9uZyBzMTk3MDsKKwlpbnQgcmV0OworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJaWYgKCFwcml2LT52YWxpZCkgeworCQlyZXQgPSAtRU5PREFUQTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbWMxMzc4M19yZWdfcmVhZChwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ0RBWSwgJmRheXMxKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDVE9ELCAmc2Vjb25kcyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWMxMzc4M19yZWdfcmVhZChwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ0RBWSwgJmRheXMyKTsKK291dDoKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZGF5czIgPT0gZGF5czEgKyAxKSB7CisJCWlmIChzZWNvbmRzID49IDg2NDAwIC8gMikKKwkJCWRheXMyID0gZGF5czE7CisJCWVsc2UKKwkJCWRheXMxID0gZGF5czI7CisJfQorCisJaWYgKGRheXMxICE9IGRheXMyKQorCQlyZXR1cm4gLUVJTzsKKworCXMxOTcwID0gZGF5czEgKiA4NjQwMCArIHNlY29uZHM7CisKKwlydGNfdGltZV90b190bShzMTk3MCwgdG0pOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ydGNfc2V0X21tc3Moc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHNlY3MpCit7CisJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHNlY29uZHMsIGRheXM7CisJaW50IHJldDsKKworCXNlY29uZHMgPSBzZWNzICUgODY0MDA7CisJZGF5cyA9IHNlY3MgLyA4NjQwMDsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKworCS8qCisJICogZmlyc3Qgd3JpdGUgc2Vjb25kcz0wIHRvIHByZXZlbnQgYSBkYXkgc3dpdGNoIGJldHdlZW4gd3JpdGluZyBkYXlzCisJICogYW5kIHNlY29uZHMgYmVsb3cKKwkgKi8KKwlyZXQgPSBtYzEzNzgzX3JlZ193cml0ZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ1RPRCwgMCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19SVENEQVksIGRheXMpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1jMTM3ODNfcmVnX3dyaXRlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDVE9ELCBzZWNvbmRzKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBtYzEzNzgzX2Fja2lycShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1jMTM3ODNfdW5tYXNrKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1JUQ1JTVCk7CitvdXQ6CisJcHJpdi0+dmFsaWQgPSAhcmV0OworCisJbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWMxMzc4M19ydGNfdXBkYXRlX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldjsKKwlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MyA9IHByaXYtPm1jMTM3ODM7CisKKwlkZXZfZGJnKCZwcml2LT5ydGMtPmRldiwgIjFIWlxuIik7CisKKwlydGNfdXBkYXRlX2lycShwcml2LT5ydGMsIDEsIFJUQ19JUlFGIHwgUlRDX1VGKTsKKworCW1jMTM3ODNfYWNraXJxKG1jMTM3ODMsIGlycSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gLUVOT0RBVEE7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisJaWYgKCFwcml2LT52YWxpZCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAoZW5hYmxlZCA/IG1jMTM3ODNfdW5tYXNrIDogbWMxMzc4M19tYXNrKShwcml2LT5tYzEzNzgzLAorCQkJTUMxMzc4M19JUlFfMUhaKTsKK291dDoKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtYzEzNzgzX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZSA9IG1jMTM3ODNfcnRjX3JlYWRfdGltZSwKKwkuc2V0X21tc3MgPSBtYzEzNzgzX3J0Y19zZXRfbW1zcywKKwkudXBkYXRlX2lycV9lbmFibGUgPSBtYzEzNzgzX3J0Y191cGRhdGVfaXJxX2VuYWJsZSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYzEzNzgzX3J0Y19yZXNldF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXY7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBwcml2LT5tYzEzNzgzOworCisJZGV2X2RiZygmcHJpdi0+cnRjLT5kZXYsICJSVENSU1RcbiIpOworCXByaXYtPnZhbGlkID0gMDsKKworCW1jMTM3ODNfbWFzayhtYzEzNzgzLCBpcnEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtYzEzNzgzX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2OworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlwcml2LT52YWxpZCA9IDE7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisKKwlyZXQgPSBtYzEzNzgzX2lycV9yZXF1ZXN0KHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1JUQ1JTVCwKKwkJCW1jMTM3ODNfcnRjX3Jlc2V0X2hhbmRsZXIsIERSSVZFUl9OQU1FLCBwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXNldF9pcnFfcmVxdWVzdDsKKworCXJldCA9IG1jMTM3ODNfaXJxX3JlcXVlc3Rfbm91bm1hc2socHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfMUhaLAorCQkJbWMxMzc4M19ydGNfdXBkYXRlX2hhbmRsZXIsIERSSVZFUl9OQU1FLCBwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91cGRhdGVfaXJxX3JlcXVlc3Q7CisKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXByaXYtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKKwkJCSZwZGV2LT5kZXYsICZtYzEzNzgzX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKworCWlmIChJU19FUlIocHJpdi0+cnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXYtPnJ0Yyk7CisKKwkJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfMUhaLCBwcml2KTsKK2Vycl91cGRhdGVfaXJxX3JlcXVlc3Q6CisKKwkJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QsIHByaXYpOworZXJyX3Jlc2V0X2lycV9yZXF1ZXN0OgorCisJCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlrZnJlZShwcml2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYzEzNzgzX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV8xSFosIHByaXYpOworCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNULCBwcml2KTsKKworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYzEzNzgzX3J0Y19kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1jMTM3ODNfcnRjX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jMTM3ODNfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZtYzEzNzgzX3J0Y19kcml2ZXIsICZtYzEzNzgzX3J0Y19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChtYzEzNzgzX3J0Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1jMTM3ODNfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWMxMzc4M19ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jMTM3ODNfcnRjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBkcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzEzNzgzIFBNSUMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCmluZGV4IGUwMjYzZDIuLmRjMDUyY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCkBAIC0yNywxMCArMjcsMTcgQEAKICNkZWZpbmUgUlRDX01PTlRIX09GRlMJCTgKICNkZWZpbmUgUlRDX1lFQVJfT0ZGUwkJMTYKIAorI2RlZmluZSBSVENfQUxBUk1fVElNRV9SRUdfT0ZGUwk4CisjZGVmaW5lIFJUQ19BTEFSTV9EQVRFX1JFR19PRkZTCTB4YworI2RlZmluZSBSVENfQUxBUk1fVkFMSUQJCSgxIDw8IDcpCisKKyNkZWZpbmUgUlRDX0FMQVJNX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTCTB4MTAKKyNkZWZpbmUgUlRDX0FMQVJNX0lOVEVSUlVQVF9DQVNVRV9SRUdfT0ZGUwkweDE0CiAKIHN0cnVjdCBydGNfcGxhdF9kYXRhIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCXZvaWQgX19pb21lbSAqaW9hZGRyOworCWludAkJaXJxOwogfTsKIAogc3RhdGljIGludCBtdl9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtODQsMTIgKzkxLDEzNCBAQAogCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQogCitzdGF0aWMgaW50IG12X3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CisJdTMyCXJ0Y190aW1lLCBydGNfZGF0ZTsKKwl1bnNpZ25lZCBpbnQgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIHdkYXk7CisKKwlydGNfdGltZSA9IHJlYWRsKGlvYWRkciArIFJUQ19BTEFSTV9USU1FX1JFR19PRkZTKTsKKwlydGNfZGF0ZSA9IHJlYWRsKGlvYWRkciArIFJUQ19BTEFSTV9EQVRFX1JFR19PRkZTKTsKKworCXNlY29uZCA9IHJ0Y190aW1lICYgMHg3ZjsKKwltaW51dGUgPSAocnRjX3RpbWUgPj4gUlRDX01JTlVURVNfT0ZGUykgJiAweDdmOworCWhvdXIgPSAocnRjX3RpbWUgPj4gUlRDX0hPVVJTX09GRlMpICYgMHgzZjsgLyogYXNzdW1lIDI0IGhvdXJzIG1vZGUgKi8KKwl3ZGF5ID0gKHJ0Y190aW1lID4+IFJUQ19XREFZX09GRlMpICYgMHg3OworCisJZGF5ID0gcnRjX2RhdGUgJiAweDNmOworCW1vbnRoID0gKHJ0Y19kYXRlID4+IFJUQ19NT05USF9PRkZTKSAmIDB4M2Y7CisJeWVhciA9IChydGNfZGF0ZSA+PiBSVENfWUVBUl9PRkZTKSAmIDB4ZmY7CisKKwlhbG0tPnRpbWUudG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCWFsbS0+dGltZS50bV9taW4gPSBiY2QyYmluKG1pbnV0ZSk7CisJYWxtLT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOworCWFsbS0+dGltZS50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCWFsbS0+dGltZS50bV93ZGF5ID0gYmNkMmJpbih3ZGF5KTsKKwlhbG0tPnRpbWUudG1fbW9uID0gYmNkMmJpbihtb250aCkgLSAxOworCS8qIGh3IGNvdW50cyBmcm9tIHllYXIgMjAwMCwgYnV0IHRtX3llYXIgaXMgcmVsYXRpdmUgdG8gMTkwMCAqLworCWFsbS0+dGltZS50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIDEwMDsKKworCWlmIChydGNfdmFsaWRfdG0oJmFsbS0+dGltZSkgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGFsYXJtIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKKwkJcnRjX3RpbWVfdG9fdG0oMCwgJmFsbS0+dGltZSk7CisJfQorCisJYWxtLT5lbmFibGVkID0gISFyZWFkbChpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12X3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxtKQoreworCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKwl1MzIgcnRjX3JlZyA9IDA7CisKKwlpZiAoYWxtLT50aW1lLnRtX3NlYyA+PSAwKQorCQlydGNfcmVnIHw9IChSVENfQUxBUk1fVkFMSUQgfCBiaW4yYmNkKGFsbS0+dGltZS50bV9zZWMpKQorCQkJPDwgUlRDX1NFQ09ORFNfT0ZGUzsKKwlpZiAoYWxtLT50aW1lLnRtX21pbiA+PSAwKQorCQlydGNfcmVnIHw9IChSVENfQUxBUk1fVkFMSUQgfCBiaW4yYmNkKGFsbS0+dGltZS50bV9taW4pKQorCQkJPDwgUlRDX01JTlVURVNfT0ZGUzsKKwlpZiAoYWxtLT50aW1lLnRtX2hvdXIgPj0gMCkKKwkJcnRjX3JlZyB8PSAoUlRDX0FMQVJNX1ZBTElEIHwgYmluMmJjZChhbG0tPnRpbWUudG1faG91cikpCisJCQk8PCBSVENfSE9VUlNfT0ZGUzsKKworCXdyaXRlbChydGNfcmVnLCBpb2FkZHIgKyBSVENfQUxBUk1fVElNRV9SRUdfT0ZGUyk7CisKKwlpZiAoYWxtLT50aW1lLnRtX21kYXkgPj0gMCkKKwkJcnRjX3JlZyA9IChSVENfQUxBUk1fVkFMSUQgfCBiaW4yYmNkKGFsbS0+dGltZS50bV9tZGF5KSkKKwkJCTw8IFJUQ19NREFZX09GRlM7CisJZWxzZQorCQlydGNfcmVnID0gMDsKKworCWlmIChhbG0tPnRpbWUudG1fbW9uID49IDApCisJCXJ0Y19yZWcgfD0gKFJUQ19BTEFSTV9WQUxJRCB8IGJpbjJiY2QoYWxtLT50aW1lLnRtX21vbiArIDEpKQorCQkJPDwgUlRDX01PTlRIX09GRlM7CisKKwlpZiAoYWxtLT50aW1lLnRtX3llYXIgPj0gMCkKKwkJcnRjX3JlZyB8PSAoUlRDX0FMQVJNX1ZBTElEIHwgYmluMmJjZChhbG0tPnRpbWUudG1feWVhciAlIDEwMCkpCisJCQk8PCBSVENfWUVBUl9PRkZTOworCisJd3JpdGVsKHJ0Y19yZWcsIGlvYWRkciArIFJUQ19BTEFSTV9EQVRFX1JFR19PRkZTKTsKKwl3cml0ZWwoMCwgaW9hZGRyICsgUlRDX0FMQVJNX0lOVEVSUlVQVF9DQVNVRV9SRUdfT0ZGUyk7CisJd3JpdGVsKGFsbS0+ZW5hYmxlZCA/IDEgOiAwLAorCSAgICAgICBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXZfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CisKKwlpZiAocGRhdGEtPmlycSA8IDApCisJCXJldHVybiAtRU5PSU9DVExDTUQ7IC8qIGZhbGwgYmFjayBpbnRvIHJ0Yy1kZXYncyBlbXVsYXRpb24gKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUlRDX0FJRV9PRkY6CisJCXdyaXRlbCgwLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOworCQlicmVhazsKKwljYXNlIFJUQ19BSUVfT046CisJCXdyaXRlbCgxLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG12X3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBkYXRhOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKKworCS8qIGFsYXJtIGlycT8gKi8KKwlpZiAoIXJlYWRsKGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfQ0FTVUVfUkVHX09GRlMpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgUlRDX0FMQVJNX0lOVEVSUlVQVF9DQVNVRV9SRUdfT0ZGUyk7CisJcnRjX3VwZGF0ZV9pcnEocGRhdGEtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfQUYpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG12X3J0Y19vcHMgPSB7CiAJLnJlYWRfdGltZQk9IG12X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gbXZfcnRjX3NldF90aW1lLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgbXZfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbXZfcnRjX2FsYXJtX29wcyA9IHsKKwkucmVhZF90aW1lCT0gbXZfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBtdl9ydGNfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSBtdl9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gbXZfcnRjX3NldF9hbGFybSwKKwkuaW9jdGwJCT0gbXZfcnRjX2lvY3RsLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbXZfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhOwpAQCAtMTMwLDEyICsyNTksMzEgQEAKIAkJfQogCX0KIAorCXBkYXRhLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOwotCXBkYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCi0JCQkJCSAmbXZfcnRjX29wcywgVEhJU19NT0RVTEUpOworCisJaWYgKHBkYXRhLT5pcnEgPj0gMCkgeworCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCXBkYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCisJCQkJCQkgJm12X3J0Y19hbGFybV9vcHMsCisJCQkJCQkgVEhJU19NT0RVTEUpOworCX0gZWxzZQorCQlwZGF0YS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAorCQkJCQkJICZtdl9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihwZGF0YS0+cnRjKSkKIAkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPnJ0Yyk7CiAKKwlpZiAocGRhdGEtPmlycSA+PSAwKSB7CisJCXdyaXRlbCgwLCBwZGF0YS0+aW9hZGRyICsgUlRDX0FMQVJNX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTKTsKKwkJaWYgKGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcGRhdGEtPmlycSwgbXZfcnRjX2ludGVycnVwdCwKKwkJCQkgICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKKwkJCQkgICAgIHBkZXYtPm5hbWUsIHBkYXRhKSA8IDApIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJpbnRlcnJ1cHQgbm90IGF2YWlsYWJsZS5cbiIpOworCQkJcGRhdGEtPmlycSA9IC0xOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0Myw2ICsyOTEsOSBAQAogewogCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJaWYgKHBkYXRhLT5pcnEgPj0gMCkKKwkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOworCiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW51YzkwMC5jIGIvZHJpdmVycy9ydGMvcnRjLW51YzkwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTljOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtbnVjOTAwLmMKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorCisvKiBSVEMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkVHX1JUQ19JTklSCQkweDAwCisjZGVmaW5lIFJFR19SVENfQUVSCQkweDA0CisjZGVmaW5lIFJFR19SVENfRkNSCQkweDA4CisjZGVmaW5lIFJFR19SVENfVExSCQkweDBDCisjZGVmaW5lIFJFR19SVENfQ0xSCQkweDEwCisjZGVmaW5lIFJFR19SVENfVFNTUgkJMHgxNAorI2RlZmluZSBSRUdfUlRDX0RXUgkJMHgxOAorI2RlZmluZSBSRUdfUlRDX1RBUgkJMHgxQworI2RlZmluZSBSRUdfUlRDX0NBUgkJMHgyMAorI2RlZmluZSBSRUdfUlRDX0xJUgkJMHgyNAorI2RlZmluZSBSRUdfUlRDX1JJRVIJCTB4MjgKKyNkZWZpbmUgUkVHX1JUQ19SSUlSCQkweDJDCisjZGVmaW5lIFJFR19SVENfVFRSCQkweDMwCisKKyNkZWZpbmUgUlRDU0VUCQkJMHgwMQorI2RlZmluZSBBRVJSV0VOQgkJMHgxMDAwMAorI2RlZmluZSBJTklSUkVTRVQJCTB4YTVlYjEzNTcKKyNkZWZpbmUgQUVSUE9XRVJPTgkJMHhBOTY1CisjZGVmaW5lIEFFUlBPV0VST0ZGCQkweDAwMDAKKyNkZWZpbmUgTEVBUFlFQVIJCTB4MDAwMQorI2RlZmluZSBUSUNLRU5CCQkJMHg4MAorI2RlZmluZSBUSUNLSU5URU5CCQkweDAwMDIKKyNkZWZpbmUgQUxBUk1JTlRFTkIJCTB4MDAwMQorI2RlZmluZSBNT0RFMjQJCQkweDAwMDEKKworc3RydWN0IG51YzkwMF9ydGMgeworCWludAkJCWlycV9udW07CisJdm9pZCBfX2lvbWVtCQkqcnRjX3JlZzsKKwlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjZGV2OworfTsKKworc3RydWN0IG51YzkwMF9iY2RfdGltZSB7CisJaW50IGJjZF9zZWM7CisJaW50IGJjZF9taW47CisJaW50IGJjZF9ob3VyOworCWludCBiY2RfbWRheTsKKwlpbnQgYmNkX21vbjsKKwlpbnQgYmNkX3llYXI7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbnVjOTAwX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX3J0YykKK3sKKwlzdHJ1Y3QgbnVjOTAwX3J0YyAqcnRjID0gX3J0YzsKKwl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIHJ0Y19pcnE7CisKKwlydGNfaXJxID0gX19yYXdfcmVhZGwocnRjLT5ydGNfcmVnICsgUkVHX1JUQ19SSUlSKTsKKworCWlmIChydGNfaXJxICYgQUxBUk1JTlRFTkIpIHsKKwkJcnRjX2lycSAmPSB+QUxBUk1JTlRFTkI7CisJCV9fcmF3X3dyaXRlbChydGNfaXJxLCBydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX1JJSVIpOworCQlldmVudHMgfD0gUlRDX0FGIHwgUlRDX0lSUUY7CisJfQorCisJaWYgKHJ0Y19pcnEgJiBUSUNLSU5URU5CKSB7CisJCXJ0Y19pcnEgJj0gflRJQ0tJTlRFTkI7CisJCV9fcmF3X3dyaXRlbChydGNfaXJxLCBydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX1JJSVIpOworCQlldmVudHMgfD0gUlRDX1VGIHwgUlRDX0lSUUY7CisJfQorCisJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNkZXYsIDEsIGV2ZW50cyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgKmNoZWNrX3J0Y19hY2Nlc3NfZW5hYmxlKHN0cnVjdCBudWM5MDBfcnRjICpudWM5MDBfcnRjKQoreworCXVuc2lnbmVkIGludCBpOworCV9fcmF3X3dyaXRlbChJTklSUkVTRVQsIG51YzkwMF9ydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX0lOSVIpOworCisJbWRlbGF5KDEwKTsKKworCV9fcmF3X3dyaXRlbChBRVJQT1dFUk9OLCBudWM5MDBfcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19BRVIpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQlpZiAoX19yYXdfcmVhZGwobnVjOTAwX3J0Yy0+cnRjX3JlZyArIFJFR19SVENfQUVSKSAmIEFFUlJXRU5CKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKChfX3Jhd19yZWFkbChudWM5MDBfcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19BRVIpICYgQUVSUldFTkIpID09IDB4MCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfcnRjX2JjZDJiaW4odW5zaWduZWQgaW50IHRpbWVyZWcsCisJCQkJdW5zaWduZWQgaW50IGNhbHJlZywgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl0bS0+dG1fbWRheQk9IGJjZDJiaW4oY2FscmVnID4+IDApOworCXRtLT50bV9tb24JPSBiY2QyYmluKGNhbHJlZyA+PiA4KTsKKwl0bS0+dG1feWVhcgk9IGJjZDJiaW4oY2FscmVnID4+IDE2KSArIDEwMDsKKworCXRtLT50bV9zZWMJPSBiY2QyYmluKHRpbWVyZWcgPj4gMCk7CisJdG0tPnRtX21pbgk9IGJjZDJiaW4odGltZXJlZyA+PiA4KTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4odGltZXJlZyA+PiAxNik7CisKKwlydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfcnRjX2JpbjJiY2Qoc3RydWN0IHJ0Y190aW1lICpzZXR0bSwKKwkJCQkJCXN0cnVjdCBudWM5MDBfYmNkX3RpbWUgKmdldHRtKQoreworCWdldHRtLT5iY2RfbWRheSA9IGJpbjJiY2Qoc2V0dG0tPnRtX21kYXkpIDw8IDA7CisJZ2V0dG0tPmJjZF9tb24gID0gYmluMmJjZChzZXR0bS0+dG1fbW9uKSA8PCA4OworCWdldHRtLT5iY2RfeWVhciA9IGJpbjJiY2Qoc2V0dG0tPnRtX3llYXIgLSAxMDApIDw8IDE2OworCisJZ2V0dG0tPmJjZF9zZWMgID0gYmluMmJjZChzZXR0bS0+dG1fc2VjKSA8PCAwOworCWdldHRtLT5iY2RfbWluICA9IGJpbjJiY2Qoc2V0dG0tPnRtX21pbikgPDwgODsKKwlnZXR0bS0+YmNkX2hvdXIgPSBiaW4yYmNkKHNldHRtLT50bV9ob3VyKSA8PCAxNjsKK30KKworc3RhdGljIGludCBudWM5MDBfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbnVjOTAwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoZW5hYmxlZCkKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfUklFUil8CisJCQkJKFRJQ0tJTlRFTkIpLCBydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX1JJRVIpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfUklFUikmCisJCQkJKH5USUNLSU5URU5CKSwgcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19SSUVSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG51YzkwMF9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG51YzkwMF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGVuYWJsZWQpCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX1JJRVIpfAorCQkJCShBTEFSTUlOVEVOQiksIHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfUklFUik7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocnRjLT5ydGNfcmVnICsgUkVHX1JUQ19SSUVSKSYKKwkJCQkofkFMQVJNSU5URU5CKSwgcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19SSUVSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG51YzkwMF9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgbnVjOTAwX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHRpbWV2YWwsIGNscnZhbDsKKworCXRpbWV2YWwgPSBfX3Jhd19yZWFkbChydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX1RMUik7CisJY2xydmFsCT0gX19yYXdfcmVhZGwocnRjLT5ydGNfcmVnICsgUkVHX1JUQ19DTFIpOworCisJbnVjOTAwX3J0Y19iY2QyYmluKHRpbWV2YWwsIGNscnZhbCwgdG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IG51YzkwMF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBudWM5MDBfYmNkX3RpbWUgZ2V0dG07CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50ICplcnI7CisKKwludWM5MDBfcnRjX2JpbjJiY2QodG0sICZnZXR0bSk7CisKKwllcnIgPSBjaGVja19ydGNfYWNjZXNzX2VuYWJsZShydGMpOworCWlmIChJU19FUlIoZXJyKSkKKwkJcmV0dXJuIFBUUl9FUlIoZXJyKTsKKworCXZhbCA9IGdldHRtLmJjZF9tZGF5IHwgZ2V0dG0uYmNkX21vbiB8IGdldHRtLmJjZF95ZWFyOworCV9fcmF3X3dyaXRlbCh2YWwsIHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfQ0xSKTsKKworCXZhbCA9IGdldHRtLmJjZF9zZWMgfCBnZXR0bS5iY2RfbWluIHwgZ2V0dG0uYmNkX2hvdXI7CisJX19yYXdfd3JpdGVsKHZhbCwgcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19UTFIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IG51YzkwMF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0aW1ldmFsLCBjYXJ2YWw7CisKKwl0aW1ldmFsID0gX19yYXdfcmVhZGwocnRjLT5ydGNfcmVnICsgUkVHX1JUQ19UQVIpOworCWNhcnZhbAk9IF9fcmF3X3JlYWRsKHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfQ0FSKTsKKworCW51YzkwMF9ydGNfYmNkMmJpbih0aW1ldmFsLCBjYXJ2YWwsICZhbHJtLT50aW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG51YzkwMF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IG51YzkwMF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBudWM5MDBfYmNkX3RpbWUgdG07CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50ICplcnI7CisKKwludWM5MDBfcnRjX2JpbjJiY2QoJmFscm0tPnRpbWUsICZ0bSk7CisKKwllcnIgPSBjaGVja19ydGNfYWNjZXNzX2VuYWJsZShydGMpOworCWlmIChJU19FUlIoZXJyKSkKKwkJcmV0dXJuIFBUUl9FUlIoZXJyKTsKKworCXZhbCA9IHRtLmJjZF9tZGF5IHwgdG0uYmNkX21vbiB8IHRtLmJjZF95ZWFyOworCV9fcmF3X3dyaXRlbCh2YWwsIHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfQ0FSKTsKKworCXZhbCA9IHRtLmJjZF9zZWMgfCB0bS5iY2RfbWluIHwgdG0uYmNkX2hvdXI7CisJX19yYXdfd3JpdGVsKHZhbCwgcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19UQVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBudWM5MDBfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gbnVjOTAwX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lID0gbnVjOTAwX3J0Y19zZXRfdGltZSwKKwkucmVhZF9hbGFybSA9IG51YzkwMF9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtID0gbnVjOTAwX3J0Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBudWM5MDBfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSBudWM5MDBfdXBkYXRlX2lycV9lbmFibGUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBudWM5MDBfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG51YzkwMF9ydGMgKm51YzkwMF9ydGM7CisJaW50IGVyciA9IDA7CisKKwludWM5MDBfcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG51YzkwMF9ydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW51YzkwMF9ydGMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAia3phbGxvYyBudWM5MDBfcnRjIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9yZXNvdXJjZSBmYWlsZWRcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZmFpbDE7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCXBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDE7CisJfQorCisJbnVjOTAwX3J0Yy0+cnRjX3JlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIW51YzkwMF9ydGMtPnJ0Y19yZWcpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBydGNfcmVnIGZhaWxlZFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDI7CisJfQorCisJbnVjOTAwX3J0Yy0+aXJxX251bSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJlcXVlc3RfaXJxKG51YzkwMF9ydGMtPmlycV9udW0sIG51YzkwMF9ydGNfaW50ZXJydXB0LAorCQkJCUlSUUZfRElTQUJMRUQsICJudWM5MDBydGMiLCBudWM5MDBfcnRjKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOVUM5MDAgUlRDIHJlcXVlc3QgaXJxIGZhaWxlZFxuIik7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBmYWlsMzsKKwl9CisKKwludWM5MDBfcnRjLT5ydGNkZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCisJCQkJCQkmbnVjOTAwX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKG51YzkwMF9ydGMtPnJ0Y2RldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicnRjIGRldmljZSByZWdpc3RlciBmYWlsZFxuIik7CisJCWVyciA9IFBUUl9FUlIobnVjOTAwX3J0Yy0+cnRjZGV2KTsKKwkJZ290byBmYWlsNDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBudWM5MDBfcnRjKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwobnVjOTAwX3J0Yy0+cnRjX3JlZyArIFJFR19SVENfVFNTUikgfCBNT0RFMjQsCisJCQkJCW51YzkwMF9ydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX1RTU1IpOworCisJcmV0dXJuIDA7CisKK2ZhaWw0OglmcmVlX2lycShudWM5MDBfcnRjLT5pcnFfbnVtLCBudWM5MDBfcnRjKTsKK2ZhaWwzOglpb3VubWFwKG51YzkwMF9ydGMtPnJ0Y19yZWcpOworZmFpbDI6CXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbDE6CWtmcmVlKG51YzkwMF9ydGMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG51YzkwMF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG51YzkwMF9ydGMgKm51YzkwMF9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihudWM5MDBfcnRjLT5ydGNkZXYpOworCWZyZWVfaXJxKG51YzkwMF9ydGMtPmlycV9udW0sIG51YzkwMF9ydGMpOworCWlvdW5tYXAobnVjOTAwX3J0Yy0+cnRjX3JlZyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJa2ZyZWUobnVjOTAwX3J0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBudWM5MDBfcnRjX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG51YzkwMF9ydGNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibnVjOTAwLXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBudWM5MDBfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZudWM5MDBfcnRjX2RyaXZlciwgbnVjOTAwX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBudWM5MDBfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbnVjOTAwX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChudWM5MDBfcnRjX2luaXQpOworbW9kdWxlX2V4aXQobnVjOTAwX3J0Y19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJudWM5MTAvbnVjOTIwIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bnVjOTAwLXJ0YyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggMDU4N2Q1My4uNjRkOTcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC04Nyw5ICs4NywxMCBAQAogI2RlZmluZSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNICAgICgxPDwzKQogI2RlZmluZSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX1RJTUVSICAgICgxPDwyKQogCitzdGF0aWMgdm9pZCBfX2lvbWVtCSpydGNfYmFzZTsKIAotI2RlZmluZSBydGNfcmVhZChhZGRyKQkJb21hcF9yZWFkYihPTUFQX1JUQ19CQVNFICsgKGFkZHIpKQotI2RlZmluZSBydGNfd3JpdGUodmFsLCBhZGRyKQlvbWFwX3dyaXRlYih2YWwsIE9NQVBfUlRDX0JBU0UgKyAoYWRkcikpCisjZGVmaW5lIHJ0Y19yZWFkKGFkZHIpCQlfX3Jhd19yZWFkYihydGNfYmFzZSArIChhZGRyKSkKKyNkZWZpbmUgcnRjX3dyaXRlKHZhbCwgYWRkcikJX19yYXdfd3JpdGViKHZhbCwgcnRjX2Jhc2UgKyAoYWRkcikpCiAKIAogLyogd2UgcmVseSBvbiB0aGUgcnRjIGZyYW1ld29yayB0byBoYW5kbGUgbG9ja2luZyAocnRjLT5vcHNfbG9jayksCkBAIC0zMzAsMzIgKzMzMSwzMSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQkvKiBOT1RFOiAgdXNpbmcgc3RhdGljIG1hcHBpbmcgZm9yIFJUQyByZWdpc3RlcnMgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmIChyZXMgJiYgcmVzLT5zdGFydCAhPSBPTUFQX1JUQ19CQVNFKSB7Ci0JCXByX2RlYnVnKCIlczogUlRDIHJlZ2lzdGVycyBhdCAlMDh4LCBleHBlY3RlZCAlMDh4XG4iLAotCQkJcGRldi0+bmFtZSwgKHVuc2lnbmVkKSByZXMtPnN0YXJ0LCBPTUFQX1JUQ19CQVNFKTsKKwlpZiAoIXJlcykgeworCQlwcl9kZWJ1ZygiJXM6IFJUQyByZXNvdXJjZSBkYXRhIG1pc3NpbmdcbiIsIHBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlpZiAocmVzKQotCQltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwKLQkJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJCXBkZXYtPm5hbWUpOwotCWVsc2UKLQkJbWVtID0gTlVMTDsKKwltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKIAlpZiAoIW1lbSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyByZWdpc3RlcnMgYXQgJTA4eCBhcmUgbm90IGZyZWVcbiIsCi0JCQlwZGV2LT5uYW1lLCBPTUFQX1JUQ19CQVNFKTsKKwkJCXBkZXYtPm5hbWUsIHJlcy0+c3RhcnQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAorCXJ0Y19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghcnRjX2Jhc2UpIHsKKwkJcHJfZGVidWcoIiVzOiBSVEMgcmVnaXN0ZXJzIGNhbid0IGJlIG1hcHBlZFxuIiwgcGRldi0+bmFtZSk7CisJCWdvdG8gZmFpbDsKKwl9CisKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkmb21hcF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CiAJCXByX2RlYnVnKCIlczogY2FuJ3QgcmVnaXN0ZXIgUlRDIGRldmljZSwgZXJyICVsZFxuIiwKIAkJCXBkZXYtPm5hbWUsIFBUUl9FUlIocnRjKSk7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMDsKIAl9CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAlkZXZfc2V0X2RydmRhdGEoJnJ0Yy0+ZGV2LCBtZW0pOwpAQCAtMzgwLDEzICszODAsMTQgQEAKIAkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0YykpIHsKIAkJcHJfZGVidWcoIiVzOiBSVEMgdGltZXIgaW50ZXJydXB0IElSUSVkIGFscmVhZHkgY2xhaW1lZFxuIiwKIAkJCXBkZXYtPm5hbWUsIG9tYXBfcnRjX3RpbWVyKTsKLQkJZ290byBmYWlsMDsKKwkJZ290byBmYWlsMTsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKG9tYXBfcnRjX2FsYXJtLCBydGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgeworCWlmICgob21hcF9ydGNfdGltZXIgIT0gb21hcF9ydGNfYWxhcm0pICYmCisJCShyZXF1ZXN0X2lycShvbWFwX3J0Y19hbGFybSwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0YykpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIGFsYXJtIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y19hbGFybSk7Ci0JCWdvdG8gZmFpbDE7CisJCWdvdG8gZmFpbDI7CiAJfQogCiAJLyogT24gYm9hcmRzIHdpdGggc3BsaXQgcG93ZXIsIFJUQ19PTl9OT0ZGIHdvbid0IHJlc2V0IHRoZSBSVEMgKi8KQEAgLTQxOSwxMCArNDIwLDEyIEBACiAKIAlyZXR1cm4gMDsKIAotZmFpbDE6CitmYWlsMjoKIAlmcmVlX2lycShvbWFwX3J0Y190aW1lciwgTlVMTCk7Ci1mYWlsMDoKK2ZhaWwxOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworZmFpbDA6CisJaW91bm1hcChydGNfYmFzZSk7CiBmYWlsOgogCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKIAlyZXR1cm4gLUVJTzsKQEAgLTQzOCw3ICs0NDEsOSBAQAogCXJ0Y193cml0ZSgwLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CiAKIAlmcmVlX2lycShvbWFwX3J0Y190aW1lciwgcnRjKTsKLQlmcmVlX2lycShvbWFwX3J0Y19hbGFybSwgcnRjKTsKKworCWlmIChvbWFwX3J0Y190aW1lciAhPSBvbWFwX3J0Y19hbGFybSkKKwkJZnJlZV9pcnEob21hcF9ydGNfYWxhcm0sIHJ0Yyk7CiAKIAlyZWxlYXNlX3Jlc291cmNlKGRldl9nZXRfZHJ2ZGF0YSgmcnRjLT5kZXYpKTsKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKaW5kZXggNGM1ZDVkMC4uODU0YzNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKQEAgLTU4LDYgKzU4LDcgQEAKIHN0cnVjdCBwY2Y1MDYzM19ydGMgewogCWludCBhbGFybV9lbmFibGVkOwogCWludCBzZWNvbmRfZW5hYmxlZDsKKwlpbnQgYWxhcm1fcGVuZGluZzsKIAogCXN0cnVjdCBwY2Y1MDYzMyAqcGNmOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2OwpAQCAtMjA5LDYgKzIxMCw3IEBACiAJcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlhbHJtLT5lbmFibGVkID0gcnRjLT5hbGFybV9lbmFibGVkOworCWFscm0tPnBlbmRpbmcgPSBydGMtPmFsYXJtX3BlbmRpbmc7CiAKIAlyZXQgPSBwY2Y1MDYzM19yZWFkX2Jsb2NrKHJ0Yy0+cGNmLCBQQ0Y1MDYzM19SRUdfUlRDU0NBLAogCQkJCVBDRjUwNjMzX1RJX0VYVEVOVCwgJnBjZl90bS50aW1lWzBdKTsKQEAgLTI0NCw2ICsyNDYsOCBAQAogCS8qIFJldHVybnMgMCBvbiBzdWNjZXNzICovCiAJcmV0ID0gcGNmNTA2MzNfd3JpdGVfYmxvY2socnRjLT5wY2YsIFBDRjUwNjMzX1JFR19SVENTQ0EsCiAJCQkJUENGNTA2MzNfVElfRVhURU5ULCAmcGNmX3RtLnRpbWVbMF0pOworCWlmICghYWxybS0+ZW5hYmxlZCkKKwkJcnRjLT5hbGFybV9wZW5kaW5nID0gMDsKIAogCWlmICghYWxhcm1fbWFza2VkIHx8IGFscm0tPmVuYWJsZWQpCiAJCXBjZjUwNjMzX2lycV91bm1hc2socnRjLT5wY2YsIFBDRjUwNjMzX0lSUV9BTEFSTSk7CkBAIC0yNjgsNiArMjcyLDcgQEAKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgUENGNTA2MzNfSVJRX0FMQVJNOgogCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKKwkJcnRjLT5hbGFybV9wZW5kaW5nID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0Y1MDYzM19JUlFfU0VDT05EOgogCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19VRiB8IFJUQ19JUlFGKTsKQEAgLTI3NywxNiArMjgyLDEzIEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBjZjUwNjMzX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwY2Y1MDYzM19zdWJkZXZfcGRhdGEgKnBkYXRhOwogCXN0cnVjdCBwY2Y1MDYzM19ydGMgKnJ0YzsKIAotCiAJcnRjID0ga3phbGxvYyhzaXplb2YoKnJ0YyksIEdGUF9LRVJORUwpOwogCWlmICghcnRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcnRjLT5wY2YgPSBwZGF0YS0+cGNmOworCXJ0Yy0+cGNmID0gZGV2X3RvX3BjZjUwNjMzKHBkZXYtPmRldi5wYXJlbnQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAJcnRjLT5ydGNfZGV2ID0gcnRjX2RldmljZV9yZWdpc3RlcigicGNmNTA2MzMtcnRjIiwgJnBkZXYtPmRldiwKIAkJCQkmcGNmNTA2MzNfcnRjX29wcywgVEhJU19NT0RVTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKaW5kZXggYjcyNTkxMy4uNjVmMzQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCkBAIC0yMTIsNiArMjEyLDggQEAKIAogCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwY2Y4NTYzKTsKKwogCXBjZjg1NjMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGNmODU2M19kcml2ZXIuZHJpdmVyLm5hbWUsCiAJCQkJJmNsaWVudC0+ZGV2LCAmcGNmODU2M19ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKQEAgLTIyMCw4ICsyMjIsNiBAQAogCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGNmODU2Myk7Ci0KIAlyZXR1cm4gMDsKIAogZXhpdF9rZnJlZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCmluZGV4IDdkMzNjZGEuLjJkMjAxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYwpAQCAtMjc3LDYgKzI3Nyw4IEBACiAJaWYgKCFwY2Y4NTgzKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBjZjg1ODMpOworCiAJcGNmODU4My0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwY2Y4NTgzX2RyaXZlci5kcml2ZXIubmFtZSwKIAkJCSZjbGllbnQtPmRldiwgJnBjZjg1ODNfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCkBAIC0yODUsNyArMjg3LDYgQEAKIAkJZ290byBleGl0X2tmcmVlOwogCX0KIAotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBjZjg1ODMpOwogCXJldHVybiAwOwogCiBleGl0X2tmcmVlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwppbmRleCBmNDE4NzNmLi4wMjY0YjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwpAQCAtNTEsMTAgKzUxLDEwIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCV9fcmF3X3dyaXRlbCgxLCBsZGF0YS0+YmFzZSArIFJUQ19NSVMpOworCQl3cml0ZWwoMSwgbGRhdGEtPmJhc2UgKyBSVENfTUlTKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBSVENfQUlFX09OOgotCQlfX3Jhd193cml0ZWwoMCwgbGRhdGEtPmJhc2UgKyBSVENfTUlTKTsKKwkJd3JpdGVsKDAsIGxkYXRhLT5iYXNlICsgUlRDX01JUyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjUsNyArNjUsNyBAQAogewogCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXJ0Y190aW1lX3RvX3RtKF9fcmF3X3JlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0RSKSwgdG0pOworCXJ0Y190aW1lX3RvX3RtKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0RSKSwgdG0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03Niw3ICs3Niw3IEBACiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcnRjX3RtX3RvX3RpbWUodG0sICZ0aW1lKTsKLQlfX3Jhd193cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTFIpOworCXdyaXRlbCh0aW1lLCBsZGF0YS0+YmFzZSArIFJUQ19MUik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg1LDkgKzg1LDkgQEAKIHsKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlydGNfdGltZV90b190bShfX3Jhd19yZWFkbChsZGF0YS0+YmFzZSArIFJUQ19NUiksICZhbGFybS0+dGltZSk7Ci0JYWxhcm0tPnBlbmRpbmcgPSBfX3Jhd19yZWFkbChsZGF0YS0+YmFzZSArIFJUQ19SSVMpOwotCWFsYXJtLT5lbmFibGVkID0gX19yYXdfcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQyk7CisJcnRjX3RpbWVfdG9fdG0ocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfTVIpLCAmYWxhcm0tPnRpbWUpOworCWFsYXJtLT5wZW5kaW5nID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfUklTKTsKKwlhbGFybS0+ZW5hYmxlZCA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05OSw4ICs5OSw4IEBACiAKIAlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZ0aW1lKTsKIAotCV9fcmF3X3dyaXRlbCh0aW1lLCBsZGF0YS0+YmFzZSArIFJUQ19NUik7Ci0JX19yYXdfd3JpdGVsKCFhbGFybS0+ZW5hYmxlZCwgbGRhdGEtPmJhc2UgKyBSVENfTUlTKTsKKwl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTVIpOworCXdyaXRlbCghYWxhcm0tPmVuYWJsZWQsIGxkYXRhLT5iYXNlICsgUlRDX01JUyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MCw4ICsxODAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGFtYmFfaWQgcGwwMzFfaWRzW10gX19pbml0ZGF0YSA9IHsKIAl7Ci0JCSAuaWQgPSAweDAwMDQxMDMxLAotCSAJLm1hc2sgPSAweDAwMGZmZmZmLCB9LAorCQkuaWQgPSAweDAwMDQxMDMxLAorCQkubWFzayA9IDB4MDAwZmZmZmYsCisJfSwKIAl7MCwgMH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKaW5kZXggNzQ3Y2ExOS4uZTYzNTFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXB4YS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1weGEuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFfcnRjX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBweGFfcnRjX3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB4YV9ydGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YV9ydGNfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCAyOWY5OGE3Li5lNGE0NGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC00MDcsNyArNDA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNhMTEwMF9ydGNfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNhMTEwMF9ydGNfcG1fb3BzID0gewogCS5zdXNwZW5kCT0gc2ExMTAwX3J0Y19zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwX3J0Y19yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCBlNmVkNTQwLi5lOTVjYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtODI2LDcgKzgyNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9ydGNfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9ydGNfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHNoX3J0Y19zdXNwZW5kLAogCS5yZXN1bWUgPSBzaF9ydGNfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jIGIvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKaW5kZXggZDQ5MWViMi4uNjc3MDA4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKQEAgLTYyLDcgKzYyLDYgQEAKIHN0cnVjdCBydGNfcGxhdF9kYXRhIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCXZvaWQgX19pb21lbSAqaW9hZGRyOwotCXVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2ppZmZpZXM7CiAJaW50IGlycTsKIAl1bnNpZ25lZCBpbnQgaXJxZW47CkBAIC03MCw2ICs2OSw3IEBACiAJaW50IGFscm1fbWluOwogCWludCBhbHJtX2hvdXI7CiAJaW50IGFscm1fbWRheTsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0aWMgaW50IHN0azE3dGE4X3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXU4IGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5sb2NrLCBpcnFmbGFncyk7CiAKIAlmbGFncyA9IHJlYWRiKGlvYWRkciArIFJUQ19GTEFHUyk7CiAJd3JpdGViKGZsYWdzIHwgUlRDX1dSSVRFLCBpb2FkZHIgKyBSVENfRkxBR1MpOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJd3JpdGViKHBkYXRhLT5pcnFlbiA/IFJUQ19JTlRTX0FJRSA6IDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKIAlyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCiAJd3JpdGViKGZsYWdzICYgflJUQ19XUklURSwgaW9hZGRyICsgUlRDX0ZMQUdTKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+cnRjLT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5sb2NrLCBpcnFmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc3RrMTd0YThfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQpAQCAtMjAyLDU2ICsyMDIsNTMgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKLQl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IFJUQ19JUlFGOworCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMDsKIAorCXNwaW5fbG9jaygmcGRhdGEtPmxvY2spOwogCS8qIHJlYWQgYW5kIGNsZWFyIGludGVycnVwdCAqLwotCWlmICghKHJlYWRiKGlvYWRkciArIFJUQ19GTEFHUykgJiBSVENfRkxBR1NfQUYpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0JaWYgKHJlYWRiKGlvYWRkciArIFJUQ19TRUNPTkRTX0FMQVJNKSAmIDB4ODApCi0JCWV2ZW50cyB8PSBSVENfVUY7Ci0JZWxzZQotCQlldmVudHMgfD0gUlRDX0FGOwotCXJ0Y191cGRhdGVfaXJxKHBkYXRhLT5ydGMsIDEsIGV2ZW50cyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOworCWlmIChyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpICYgUlRDX0ZMQUdTX0FGKSB7CisJCWV2ZW50cyA9IFJUQ19JUlFGOworCQlpZiAocmVhZGIoaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pICYgMHg4MCkKKwkJCWV2ZW50cyB8PSBSVENfVUY7CisJCWVsc2UKKwkJCWV2ZW50cyB8PSBSVENfQUY7CisJCWlmIChsaWtlbHkocGRhdGEtPnJ0YykpCisJCQlydGNfdXBkYXRlX2lycShwZGF0YS0+cnRjLCAxLCBldmVudHMpOworCX0KKwlzcGluX3VubG9jaygmcGRhdGEtPmxvY2spOworCXJldHVybiBldmVudHMgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQogCi1zdGF0aWMgaW50IHN0azE3dGE4X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHN0azE3dGE4X3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAocGRhdGEtPmlycSA8PSAwKQotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOyAvKiBmYWxsIGJhY2sgaW50byBydGMtZGV2J3MgZW11bGF0aW9uICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlwZGF0YS0+aXJxZW4gJj0gflJUQ19BRjsKLQkJc3RrMTd0YThfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGVuYWJsZWQpCiAJCXBkYXRhLT5pcnFlbiB8PSBSVENfQUY7Ci0JCXN0azE3dGE4X3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwllbHNlCisJCXBkYXRhLT5pcnFlbiAmPSB+UlRDX0FGOworCXN0azE3dGE4X3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgc3RrMTd0YThfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lCT0gc3RrMTd0YThfcnRjX3JlYWRfdGltZSwKLQkuc2V0X3RpbWUJPSBzdGsxN3RhOF9ydGNfc2V0X3RpbWUsCi0JLnJlYWRfYWxhcm0JPSBzdGsxN3RhOF9ydGNfcmVhZF9hbGFybSwKLQkuc2V0X2FsYXJtCT0gc3RrMTd0YThfcnRjX3NldF9hbGFybSwKLQkuaW9jdGwJCT0gc3RrMTd0YThfcnRjX2lvY3RsLAorCS5yZWFkX3RpbWUJCT0gc3RrMTd0YThfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJCT0gc3RrMTd0YThfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCQk9IHN0azE3dGE4X3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JCT0gc3RrMTd0YThfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZQk9IHN0azE3dGE4X3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIHNzaXplX3Qgc3RrMTd0YThfbnZyYW1fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKIAkJCQkgbG9mZl90IHBvcywgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9Ci0JCXRvX3BsYXRmb3JtX2RldmljZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOwogCXNzaXplX3QgY291bnQ7CkBAIC0yNjUsOCArMjYyLDggQEAKIAkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCiAJCQkJICBsb2ZmX3QgcG9zLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KLQkJdG9fcGxhdGZvcm1fZGV2aWNlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAJc3NpemVfdCBjb3VudDsKQEAgLTI4OCwzMSArMjg1LDI2IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHN0azE3dGE4X3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdW5zaWduZWQgaW50IGNhbDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAlpbnQgcmV0ID0gMDsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgUlRDX1JFR19TSVpFLCBwZGV2LT5uYW1lKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQlwZGF0YS0+YmFzZWFkZHIgPSByZXMtPnN0YXJ0OwotCWlvYWRkciA9IGlvcmVtYXAocGRhdGEtPmJhc2VhZGRyLCBSVENfUkVHX1NJWkUpOwotCWlmICghaW9hZGRyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIFJUQ19SRUdfU0laRSwKKwkJCXBkZXYtPm5hbWUpKQorCQlyZXR1cm4gLUVCVVNZOworCWlvYWRkciA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LCBSVENfUkVHX1NJWkUpOworCWlmICghaW9hZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKIAlwZGF0YS0+aW9hZGRyID0gaW9hZGRyOwogCXBkYXRhLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCkBAIC0zMjgsOSArMzIwLDEzIEBACiAJaWYgKHJlYWRiKGlvYWRkciArIFJUQ19GTEFHUykgJiBSVENfRkxBR1NfUEYpCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ2b2x0YWdlLWxvdyBkZXRlY3RlZC5cbiIpOwogCisJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5sb2NrKTsKKwlwZGF0YS0+bGFzdF9qaWZmaWVzID0gamlmZmllczsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CiAJaWYgKHBkYXRhLT5pcnEgPiAwKSB7CiAJCXdyaXRlYigwLCBpb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7Ci0JCWlmIChyZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBzdGsxN3RhOF9ydGNfaW50ZXJydXB0LAorCQlpZiAoZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBwZGF0YS0+aXJxLAorCQkJCXN0azE3dGE4X3J0Y19pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogCQkJCXBkZXYtPm5hbWUsIHBkZXYpIDwgMCkgewogCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImludGVycnVwdCBub3QgYXZhaWxhYmxlLlxuIik7CkBAIC0zMzgsMjkgKzMzNCwxNCBAQAogCQl9CiAJfQogCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAorCXBkYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkJICAmc3RrMTd0YThfcnRjX29wcywgVEhJU19NT0RVTEUpOwotCWlmIChJU19FUlIocnRjKSkgewotCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWdvdG8gb3V0OwotCX0KLQlwZGF0YS0+cnRjID0gcnRjOwotCXBkYXRhLT5sYXN0X2ppZmZpZXMgPSBqaWZmaWVzOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBkYXRhKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5ydGMpKQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cnRjKTsKKwogCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZzdGsxN3RhOF9udnJhbV9hdHRyKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMDsKLSBvdXQ6Ci0JaWYgKHBkYXRhLT5ydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+cnRjKTsKLQlpZiAocGRhdGEtPmlycSA+IDApCi0JCWZyZWVfaXJxKHBkYXRhLT5pcnEsIHBkZXYpOwotCWlmIChpb2FkZHIpCi0JCWlvdW5tYXAoaW9hZGRyKTsKLQlpZiAocGRhdGEtPmJhc2VhZGRyKQotCQlyZWxlYXNlX21lbV9yZWdpb24ocGRhdGEtPmJhc2VhZGRyLCBSVENfUkVHX1NJWkUpOwotCWtmcmVlKHBkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzAsMTMgKzM1MSw4IEBACiAKIAlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmc3RrMTd0YThfbnZyYW1fYXR0cik7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOwotCWlmIChwZGF0YS0+aXJxID4gMCkgeworCWlmIChwZGF0YS0+aXJxID4gMCkKIAkJd3JpdGViKDAsIHBkYXRhLT5pb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7Ci0JCWZyZWVfaXJxKHBkYXRhLT5pcnEsIHBkZXYpOwotCX0KLQlpb3VubWFwKHBkYXRhLT5pb2FkZHIpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGF0YS0+YmFzZWFkZHIsIFJUQ19SRUdfU0laRSk7Ci0Ja2ZyZWUocGRhdGEpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdHdsLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhODNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10d2wuYwpAQCAtMCwwICsxLDYxMCBAQAorLyoKKyAqIHJ0Yy10d2wuYyAtLSBUV0wgUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMKKyAqIEF1dGhvcjogQWxleGFuZHJlIFJ1c2V2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCBUSSBkcml2ZXIgdHdsNDAzMC1ydGMuYworICogICBDb3B5cmlnaHQgKEMpIDIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBydGMtb21hcC5jCisgKiAgIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgIEF1dGhvcjogR2VvcmdlIEcuIERhdmlzIDxnZGF2aXNAbXZpc3RhLmNvbT4gb3IgPHNvdXJjZUBtdmlzdGEuY29tPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgorCisKKy8qCisgKiBSVEMgYmxvY2sgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTF9NT0RVTEVfUlRDKQorICovCitlbnVtIHsKKwlSRUdfU0VDT05EU19SRUcgPSAwLAorCVJFR19NSU5VVEVTX1JFRywKKwlSRUdfSE9VUlNfUkVHLAorCVJFR19EQVlTX1JFRywKKwlSRUdfTU9OVEhTX1JFRywKKwlSRUdfWUVBUlNfUkVHLAorCVJFR19XRUVLU19SRUcsCisKKwlSRUdfQUxBUk1fU0VDT05EU19SRUcsCisJUkVHX0FMQVJNX01JTlVURVNfUkVHLAorCVJFR19BTEFSTV9IT1VSU19SRUcsCisJUkVHX0FMQVJNX0RBWVNfUkVHLAorCVJFR19BTEFSTV9NT05USFNfUkVHLAorCVJFR19BTEFSTV9ZRUFSU19SRUcsCisKKwlSRUdfUlRDX0NUUkxfUkVHLAorCVJFR19SVENfU1RBVFVTX1JFRywKKwlSRUdfUlRDX0lOVEVSUlVQVFNfUkVHLAorCisJUkVHX1JUQ19DT01QX0xTQl9SRUcsCisJUkVHX1JUQ19DT01QX01TQl9SRUcsCit9OworY29uc3Qgc3RhdGljIHU4IHR3bDQwMzBfcnRjX3JlZ19tYXBbXSA9IHsKKwlbUkVHX1NFQ09ORFNfUkVHXSA9IDB4MDAsCisJW1JFR19NSU5VVEVTX1JFR10gPSAweDAxLAorCVtSRUdfSE9VUlNfUkVHXSA9IDB4MDIsCisJW1JFR19EQVlTX1JFR10gPSAweDAzLAorCVtSRUdfTU9OVEhTX1JFR10gPSAweDA0LAorCVtSRUdfWUVBUlNfUkVHXSA9IDB4MDUsCisJW1JFR19XRUVLU19SRUddID0gMHgwNiwKKworCVtSRUdfQUxBUk1fU0VDT05EU19SRUddID0gMHgwNywKKwlbUkVHX0FMQVJNX01JTlVURVNfUkVHXSA9IDB4MDgsCisJW1JFR19BTEFSTV9IT1VSU19SRUddID0gMHgwOSwKKwlbUkVHX0FMQVJNX0RBWVNfUkVHXSA9IDB4MEEsCisJW1JFR19BTEFSTV9NT05USFNfUkVHXSA9IDB4MEIsCisJW1JFR19BTEFSTV9ZRUFSU19SRUddID0gMHgwQywKKworCVtSRUdfUlRDX0NUUkxfUkVHXSA9IDB4MEQsCisJW1JFR19SVENfU1RBVFVTX1JFR10gPSAweDBFLAorCVtSRUdfUlRDX0lOVEVSUlVQVFNfUkVHXSA9IDB4MEYsCisKKwlbUkVHX1JUQ19DT01QX0xTQl9SRUddID0gMHgxMCwKKwlbUkVHX1JUQ19DT01QX01TQl9SRUddID0gMHgxMSwKK307Citjb25zdCBzdGF0aWMgdTggdHdsNjAzMF9ydGNfcmVnX21hcFtdID0geworCVtSRUdfU0VDT05EU19SRUddID0gMHgwMCwKKwlbUkVHX01JTlVURVNfUkVHXSA9IDB4MDEsCisJW1JFR19IT1VSU19SRUddID0gMHgwMiwKKwlbUkVHX0RBWVNfUkVHXSA9IDB4MDMsCisJW1JFR19NT05USFNfUkVHXSA9IDB4MDQsCisJW1JFR19ZRUFSU19SRUddID0gMHgwNSwKKwlbUkVHX1dFRUtTX1JFR10gPSAweDA2LAorCisJW1JFR19BTEFSTV9TRUNPTkRTX1JFR10gPSAweDA4LAorCVtSRUdfQUxBUk1fTUlOVVRFU19SRUddID0gMHgwOSwKKwlbUkVHX0FMQVJNX0hPVVJTX1JFR10gPSAweDBBLAorCVtSRUdfQUxBUk1fREFZU19SRUddID0gMHgwQiwKKwlbUkVHX0FMQVJNX01PTlRIU19SRUddID0gMHgwQywKKwlbUkVHX0FMQVJNX1lFQVJTX1JFR10gPSAweDBELAorCisJW1JFR19SVENfQ1RSTF9SRUddID0gMHgxMCwKKwlbUkVHX1JUQ19TVEFUVVNfUkVHXSA9IDB4MTEsCisJW1JFR19SVENfSU5URVJSVVBUU19SRUddID0gMHgxMiwKKworCVtSRUdfUlRDX0NPTVBfTFNCX1JFR10gPSAweDEzLAorCVtSRUdfUlRDX0NPTVBfTVNCX1JFR10gPSAweDE0LAorfTsKKworLyogUlRDX0NUUkxfUkVHIGJpdGZpZWxkcyAqLworI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX00gICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQklUX1JUQ19DVFJMX1JFR19ST1VORF8zMFNfTSAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfQVVUT19DT01QX00gICAgICAgICAgICAgMHgwNAorI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX01PREVfMTJfMjRfTSAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQklUX1JUQ19DVFJMX1JFR19URVNUX01PREVfTSAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfU0VUXzMyX0NPVU5URVJfTSAgICAgICAgMHgyMAorI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX0dFVF9USU1FX00gICAgICAgICAgICAgIDB4NDAKKworLyogUlRDX1NUQVRVU19SRUcgYml0ZmllbGRzICovCisjZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR19SVU5fTSAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBCSVRfUlRDX1NUQVRVU19SRUdfMVNfRVZFTlRfTSAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHXzFNX0VWRU5UX00gICAgICAgICAgICAweDA4CisjZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR18xSF9FVkVOVF9NICAgICAgICAgICAgMHgxMAorI2RlZmluZSBCSVRfUlRDX1NUQVRVU19SRUdfMURfRVZFTlRfTSAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00gICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR19QT1dFUl9VUF9NICAgICAgICAgICAgMHg4MAorCisvKiBSVENfSU5URVJSVVBUU19SRUcgYml0ZmllbGRzICovCisjZGVmaW5lIEJJVF9SVENfSU5URVJSVVBUU19SRUdfRVZFUllfTSAgICAgICAgICAgMHgwMworI2RlZmluZSBCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX1RJTUVSX00gICAgICAgIDB4MDQKKyNkZWZpbmUgQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9BTEFSTV9NICAgICAgICAweDA4CisKKworLyogUkVHX1NFQ09ORFNfUkVHIHRocm91Z2ggUkVHX1lFQVJTX1JFRyBpcyBob3cgbWFueSByZWdpc3RlcnM/ICovCisjZGVmaW5lIEFMTF9USU1FX1JFR1MJCTYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB1OCAgKnJ0Y19yZWdfbWFwOworCisvKgorICogU3VwcG9ydHMgMSBieXRlIHJlYWQgZnJvbSBUV0wgUlRDIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50IHR3bF9ydGNfcmVhZF91OCh1OCAqZGF0YSwgdTggcmVnKQoreworCWludCByZXQ7CisKKwlyZXQgPSB0d2xfaTJjX3JlYWRfdTgoVFdMX01PRFVMRV9SVEMsIGRhdGEsIChydGNfcmVnX21hcFtyZWddKSk7CisJaWYgKHJldCA8IDApCisJCXByX2VycigidHdsX3J0YzogQ291bGQgbm90IHJlYWQgVFdMIgorCQkgICAgICAgInJlZ2lzdGVyICVYIC0gZXJyb3IgJWRcbiIsIHJlZywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU3VwcG9ydHMgMSBieXRlIHdyaXRlIHRvIFRXTCBSVEMgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgaW50IHR3bF9ydGNfd3JpdGVfdTgodTggZGF0YSwgdTggcmVnKQoreworCWludCByZXQ7CisKKwlyZXQgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTF9NT0RVTEVfUlRDLCBkYXRhLCAocnRjX3JlZ19tYXBbcmVnXSkpOworCWlmIChyZXQgPCAwKQorCQlwcl9lcnIoInR3bF9ydGM6IENvdWxkIG5vdCB3cml0ZSBUV0wiCisJCSAgICAgICAicmVnaXN0ZXIgJVggLSBlcnJvciAlZFxuIiwgcmVnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDYWNoZSB0aGUgdmFsdWUgZm9yIHRpbWVyL2FsYXJtIGludGVycnVwdHMgcmVnaXN0ZXI7IHRoaXMgaXMKKyAqIG9ubHkgY2hhbmdlZCBieSBjYWxsZXJzIGhvbGRpbmcgcnRjIG9wcyBsb2NrIChvciByZXN1bWUpLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBydGNfaXJxX2JpdHM7CisKKy8qCisgKiBFbmFibGUgMS9zZWNvbmQgdXBkYXRlIGFuZC9vciBhbGFybSBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwlpbnQgcmV0OworCisJdmFsID0gcnRjX2lycV9iaXRzIHwgYml0OworCXZhbCAmPSB+QklUX1JUQ19JTlRFUlJVUFRTX1JFR19FVkVSWV9NOworCXJldCA9IHR3bF9ydGNfd3JpdGVfdTgodmFsLCBSRUdfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlpZiAocmV0ID09IDApCisJCXJ0Y19pcnFfYml0cyA9IHZhbDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEaXNhYmxlIHVwZGF0ZSBhbmQvb3IgYWxhcm0gaW50ZXJydXB0cy4KKyAqLworc3RhdGljIGludCBtYXNrX3J0Y19pcnFfYml0KHVuc2lnbmVkIGNoYXIgYml0KQoreworCXVuc2lnbmVkIGNoYXIgdmFsOworCWludCByZXQ7CisKKwl2YWwgPSBydGNfaXJxX2JpdHMgJiB+Yml0OworCXJldCA9IHR3bF9ydGNfd3JpdGVfdTgodmFsLCBSRUdfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlpZiAocmV0ID09IDApCisJCXJ0Y19pcnFfYml0cyA9IHZhbDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdsX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgZW5hYmxlZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGVuYWJsZWQpCisJCXJldCA9IHNldF9ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pOworCWVsc2UKKwkJcmV0ID0gbWFza19ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2xfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgZW5hYmxlZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGVuYWJsZWQpCisJCXJldCA9IHNldF9ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX1RJTUVSX00pOworCWVsc2UKKwkJcmV0ID0gbWFza19ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX1RJTUVSX00pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdldHMgY3VycmVudCBUV0wgUlRDIHRpbWUgYW5kIGRhdGUgcGFyYW1ldGVycy4KKyAqCisgKiBUaGUgUlRDJ3MgdGltZS9hbGFybSByZXByZXNlbnRhdGlvbiBpcyBub3Qgd2hhdCBnbXRpbWUoMykgcmVxdWlyZXMKKyAqIExpbnV4IHRvIHVzZToKKyAqCisgKiAgLSBNb250aHMgYXJlIDEuLjEyIHZzIExpbnV4IDAtMTEKKyAqICAtIFllYXJzIGFyZSAwLi45OSB2cyBMaW51eCAxOTAwLi5OICh3ZSBhc3N1bWUgMjFzdCBjZW50dXJ5KQorICovCitzdGF0aWMgaW50IHR3bF9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJ0Y19kYXRhW0FMTF9USU1FX1JFR1MgKyAxXTsKKwlpbnQgcmV0OworCXU4IHNhdmVfY29udHJvbDsKKworCXJldCA9IHR3bF9ydGNfcmVhZF91OCgmc2F2ZV9jb250cm9sLCBSRUdfUlRDX0NUUkxfUkVHKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNhdmVfY29udHJvbCB8PSBCSVRfUlRDX0NUUkxfUkVHX0dFVF9USU1FX007CisKKwlyZXQgPSB0d2xfcnRjX3dyaXRlX3U4KHNhdmVfY29udHJvbCwgUkVHX1JUQ19DVFJMX1JFRyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB0d2xfaTJjX3JlYWQoVFdMX01PRFVMRV9SVEMsIHJ0Y19kYXRhLAorCQkJKHJ0Y19yZWdfbWFwW1JFR19TRUNPTkRTX1JFR10pLCBBTExfVElNRV9SRUdTKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicnRjX3JlYWRfdGltZSBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihydGNfZGF0YVswXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX2RhdGFbMV0pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihydGNfZGF0YVsyXSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y19kYXRhWzNdKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihydGNfZGF0YVs0XSkgLSAxOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihydGNfZGF0YVs1XSkgKyAxMDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3bF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sOworCXVuc2lnbmVkIGNoYXIgcnRjX2RhdGFbQUxMX1RJTUVfUkVHUyArIDFdOworCWludCByZXQ7CisKKwlydGNfZGF0YVsxXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJcnRjX2RhdGFbMl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCXJ0Y19kYXRhWzNdID0gYmluMmJjZCh0bS0+dG1faG91cik7CisJcnRjX2RhdGFbNF0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlydGNfZGF0YVs1XSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOworCXJ0Y19kYXRhWzZdID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CisKKwkvKiBTdG9wIFJUQyB3aGlsZSB1cGRhdGluZyB0aGUgVEMgcmVnaXN0ZXJzICovCisJcmV0ID0gdHdsX3J0Y19yZWFkX3U4KCZzYXZlX2NvbnRyb2wsIFJFR19SVENfQ1RSTF9SRUcpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXNhdmVfY29udHJvbCAmPSB+QklUX1JUQ19DVFJMX1JFR19TVE9QX1JUQ19NOworCXR3bF9ydGNfd3JpdGVfdTgoc2F2ZV9jb250cm9sLCBSRUdfUlRDX0NUUkxfUkVHKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiB1cGRhdGUgYWxsIHRoZSB0aW1lIHJlZ2lzdGVycyBpbiBvbmUgc2hvdCAqLworCXJldCA9IHR3bF9pMmNfd3JpdGUoVFdMX01PRFVMRV9SVEMsIHJ0Y19kYXRhLAorCQkocnRjX3JlZ19tYXBbUkVHX1NFQ09ORFNfUkVHXSksIEFMTF9USU1FX1JFR1MpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicnRjX3NldF90aW1lIGVycm9yICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTdGFydCBiYWNrIFJUQyAqLworCXNhdmVfY29udHJvbCB8PSBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX007CisJcmV0ID0gdHdsX3J0Y193cml0ZV91OChzYXZlX2NvbnRyb2wsIFJFR19SVENfQ1RSTF9SRUcpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdldHMgY3VycmVudCBUV0wgUlRDIGFsYXJtIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgdHdsX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJ0Y19kYXRhW0FMTF9USU1FX1JFR1MgKyAxXTsKKwlpbnQgcmV0OworCisJcmV0ID0gdHdsX2kyY19yZWFkKFRXTF9NT0RVTEVfUlRDLCBydGNfZGF0YSwKKwkJCShydGNfcmVnX21hcFtSRUdfQUxBUk1fU0VDT05EU19SRUddKSwgQUxMX1RJTUVfUkVHUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJydGNfcmVhZF9hbGFybSBlcnJvciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzb21lIG9mIHRoZXNlIGZpZWxkcyBtYXkgYmUgd2lsZGNhcmQvIm1hdGNoIGFsbCIgKi8KKwlhbG0tPnRpbWUudG1fc2VjID0gYmNkMmJpbihydGNfZGF0YVswXSk7CisJYWxtLT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocnRjX2RhdGFbMV0pOworCWFsbS0+dGltZS50bV9ob3VyID0gYmNkMmJpbihydGNfZGF0YVsyXSk7CisJYWxtLT50aW1lLnRtX21kYXkgPSBiY2QyYmluKHJ0Y19kYXRhWzNdKTsKKwlhbG0tPnRpbWUudG1fbW9uID0gYmNkMmJpbihydGNfZGF0YVs0XSkgLSAxOworCWFsbS0+dGltZS50bV95ZWFyID0gYmNkMmJpbihydGNfZGF0YVs1XSkgKyAxMDA7CisKKwkvKiByZXBvcnQgY2FjaGVkIGFsYXJtIGVuYWJsZSBzdGF0ZSAqLworCWlmIChydGNfaXJxX2JpdHMgJiBCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pCisJCWFsbS0+ZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3bF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwl1bnNpZ25lZCBjaGFyIGFsYXJtX2RhdGFbQUxMX1RJTUVfUkVHUyArIDFdOworCWludCByZXQ7CisKKwlyZXQgPSB0d2xfcnRjX2FsYXJtX2lycV9lbmFibGUoZGV2LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWFsYXJtX2RhdGFbMV0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9zZWMpOworCWFsYXJtX2RhdGFbMl0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9taW4pOworCWFsYXJtX2RhdGFbM10gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9ob3VyKTsKKwlhbGFybV9kYXRhWzRdID0gYmluMmJjZChhbG0tPnRpbWUudG1fbWRheSk7CisJYWxhcm1fZGF0YVs1XSA9IGJpbjJiY2QoYWxtLT50aW1lLnRtX21vbiArIDEpOworCWFsYXJtX2RhdGFbNl0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV95ZWFyIC0gMTAwKTsKKworCS8qIHVwZGF0ZSBhbGwgdGhlIGFsYXJtIHJlZ2lzdGVycyBpbiBvbmUgc2hvdCAqLworCXJldCA9IHR3bF9pMmNfd3JpdGUoVFdMX01PRFVMRV9SVEMsIGFsYXJtX2RhdGEsCisJCShydGNfcmVnX21hcFtSRUdfQUxBUk1fU0VDT05EU19SRUddKSwgQUxMX1RJTUVfUkVHUyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInJ0Y19zZXRfYWxhcm0gZXJyb3IgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhbG0tPmVuYWJsZWQpCisJCXJldCA9IHR3bF9ydGNfYWxhcm1faXJxX2VuYWJsZShkZXYsIDEpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0d2xfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpydGMpCit7CisJdW5zaWduZWQgbG9uZyBldmVudHMgPSAwOworCWludCByZXQgPSBJUlFfTk9ORTsKKwlpbnQgcmVzOworCXU4IHJkX3JlZzsKKworI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyogV09SS0FST1VORCBmb3IgbG9ja2RlcCBmb3JjaW5nIElSUUZfRElTQUJMRUQgb24gdXMsIHdoaWNoCisJICogd2UgZG9uJ3Qgd2FudCBhbmQgY2FuJ3QgdG9sZXJhdGUuICBBbHRob3VnaCBpdCBtaWdodCBiZQorCSAqIGZyaWVuZGxpZXIgbm90IHRvIGJvcnJvdyB0aGlzIHRocmVhZCBjb250ZXh0Li4uCisJICovCisJbG9jYWxfaXJxX2VuYWJsZSgpOworI2VuZGlmCisKKwlyZXMgPSB0d2xfcnRjX3JlYWRfdTgoJnJkX3JlZywgUkVHX1JUQ19TVEFUVVNfUkVHKTsKKwlpZiAocmVzKQorCQlnb3RvIG91dDsKKwkvKgorCSAqIEZpZ3VyZSBvdXQgc291cmNlIG9mIGludGVycnVwdDogQUxBUk0gb3IgVElNRVIgaW4gUlRDX1NUQVRVU19SRUcuCisJICogb25seSBvbmUgKEFMQVJNIG9yIFJUQykgaW50ZXJydXB0IHNvdXJjZSBtYXkgYmUgZW5hYmxlZAorCSAqIGF0IHRpbWUsIHdlIGFsc28gY291bGQgY2hlY2sgb3VyIHJlc3VsdHMKKwkgKiBieSByZWFkaW5nIFJUU19JTlRFUlJVUFRTX1JFR0lTVEVSW0lUX1RJTUVSLElUX0FMQVJNXQorCSAqLworCWlmIChyZF9yZWcgJiBCSVRfUlRDX1NUQVRVU19SRUdfQUxBUk1fTSkKKwkJZXZlbnRzIHw9IFJUQ19JUlFGIHwgUlRDX0FGOworCWVsc2UKKwkJZXZlbnRzIHw9IFJUQ19JUlFGIHwgUlRDX1VGOworCisJcmVzID0gdHdsX3J0Y193cml0ZV91OChyZF9yZWcgfCBCSVRfUlRDX1NUQVRVU19SRUdfQUxBUk1fTSwKKwkJCQkgICBSRUdfUlRDX1NUQVRVU19SRUcpOworCWlmIChyZXMpCisJCWdvdG8gb3V0OworCisJaWYgKHR3bF9jbGFzc19pc180MDMwKCkpIHsKKwkJLyogQ2xlYXIgb24gUmVhZCBlbmFibGVkLiBSVENfSVQgYml0IG9mIFRXTDQwMzBfSU5UX1BXUl9JU1IxCisJCSAqIG5lZWRzIDIgcmVhZHMgdG8gY2xlYXIgdGhlIGludGVycnVwdC4gT25lIHJlYWQgaXMgZG9uZSBpbgorCQkgKiBkb190d2xfcHdyaXJxKCkuIERvaW5nIHRoZSBzZWNvbmQgcmVhZCwgdG8gY2xlYXIKKwkJICogdGhlIGJpdC4KKwkJICoKKwkJICogRklYTUUgdGhlIHJlYXNvbiBQV1JfSVNSMSBuZWVkcyBhbiBleHRyYSByZWFkIGlzIHRoYXQKKwkJICogUlRDX0lGIHJldHJpZ2dlcmVkIHVudGlsIHdlIGNsZWFyZWQgUkVHX0FMQVJNX00gYWJvdmUuCisJCSAqIEJ1dCByZS1yZWFkaW5nIGxpa2UgdGhpcyBpcyBhIGJhZCBoYWNrOyBieSBkb2luZyBzbyB3ZQorCQkgKiByaXNrIHdyb25nbHkgY2xlYXJpbmcgc3RhdHVzIGZvciBzb21lIG90aGVyIElSUSAobG9zaW5nCisJCSAqIHRoZSBpbnRlcnJ1cHQpLiAgQmUgc21hcnRlciBhYm91dCBoYW5kbGluZyBSVENfVUYgLi4uCisJCSAqLworCQlyZXMgPSB0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfSU5ULAorCQkJJnJkX3JlZywgVFdMNDAzMF9JTlRfUFdSX0lTUjEpOworCQlpZiAocmVzKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogTm90aWZ5IFJUQyBjb3JlIG9uIGV2ZW50ICovCisJcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBldmVudHMpOworCisJcmV0ID0gSVJRX0hBTkRMRUQ7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHR3bF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSB0d2xfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSB0d2xfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCT0gdHdsX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSB0d2xfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHR3bF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSB0d2xfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdHdsX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJaW50IHJldCA9IDA7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJdTggcmRfcmVnOworCisJaWYgKGlycSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKKwkJCQkgICZwZGV2LT5kZXYsICZ0d2xfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIFJUQyBkZXZpY2UsIGVyciAlbGRcbiIsCisJCQlQVFJfRVJSKHJ0YykpOworCQlnb3RvIG91dDA7CisKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOworCisJcmV0ID0gdHdsX3J0Y19yZWFkX3U4KCZyZF9yZWcsIFJFR19SVENfU1RBVFVTX1JFRyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0MTsKKworCWlmIChyZF9yZWcgJiBCSVRfUlRDX1NUQVRVU19SRUdfUE9XRVJfVVBfTSkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlBvd2VyIHVwIHJlc2V0IGRldGVjdGVkLlxuIik7CisKKwlpZiAocmRfcmVnICYgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00pCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJQZW5kaW5nIEFsYXJtIGludGVycnVwdCBkZXRlY3RlZC5cbiIpOworCisJLyogQ2xlYXIgUlRDIFBvd2VyIHVwIHJlc2V0IGFuZCBwZW5kaW5nIGFsYXJtIGludGVycnVwdHMgKi8KKwlyZXQgPSB0d2xfcnRjX3dyaXRlX3U4KHJkX3JlZywgUkVHX1JUQ19TVEFUVVNfUkVHKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQxOworCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB0d2xfcnRjX2ludGVycnVwdCwKKwkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0Yyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRIGlzIG5vdCBmcmVlLlxuIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlpZiAodHdsX2NsYXNzX2lzXzYwMzAoKSkgeworCQl0d2w2MDMwX2ludGVycnVwdF91bm1hc2soVFdMNjAzMF9SVENfSU5UX01BU0ssCisJCQlSRUdfSU5UX01TS19MSU5FX0EpOworCQl0d2w2MDMwX2ludGVycnVwdF91bm1hc2soVFdMNjAzMF9SVENfSU5UX01BU0ssCisJCQlSRUdfSU5UX01TS19TVFNfQSk7CisJfQorCisJLyogQ2hlY2sgUlRDIG1vZHVsZSBzdGF0dXMsIEVuYWJsZSBpZiBpdCBpcyBvZmYgKi8KKwlyZXQgPSB0d2xfcnRjX3JlYWRfdTgoJnJkX3JlZywgUkVHX1JUQ19DVFJMX1JFRyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0MjsKKworCWlmICghKHJkX3JlZyAmIEJJVF9SVENfQ1RSTF9SRUdfU1RPUF9SVENfTSkpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkVuYWJsaW5nIFRXTC1SVEMuXG4iKTsKKwkJcmRfcmVnID0gQklUX1JUQ19DVFJMX1JFR19TVE9QX1JUQ19NOworCQlyZXQgPSB0d2xfcnRjX3dyaXRlX3U4KHJkX3JlZywgUkVHX1JUQ19DVFJMX1JFRyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQyOworCX0KKworCS8qIGluaXQgY2FjaGVkIElSUSBlbmFibGUgYml0cyAqLworCXJldCA9IHR3bF9ydGNfcmVhZF91OCgmcnRjX2lycV9iaXRzLCBSRUdfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQyOworCisJcmV0dXJuIHJldDsKKworb3V0MjoKKwlmcmVlX2lycShpcnEsIHJ0Yyk7CitvdXQxOgorCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworb3V0MDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGlzYWJsZSBhbGwgVFdMIFJUQyBtb2R1bGUgaW50ZXJydXB0cy4KKyAqIFNldHMgc3RhdHVzIGZsYWcgdG8gZnJlZS4KKyAqLworc3RhdGljIGludCBfX2RldmV4aXQgdHdsX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwkvKiBsZWF2ZSBydGMgcnVubmluZywgYnV0IGRpc2FibGUgaXJxcyAqLworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCW1hc2tfcnRjX2lycV9iaXQoQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9BTEFSTV9NKTsKKwltYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSk7CisJaWYgKHR3bF9jbGFzc19pc182MDMwKCkpIHsKKwkJdHdsNjAzMF9pbnRlcnJ1cHRfbWFzayhUV0w2MDMwX1JUQ19JTlRfTUFTSywKKwkJCVJFR19JTlRfTVNLX0xJTkVfQSk7CisJCXR3bDYwMzBfaW50ZXJydXB0X21hc2soVFdMNjAzMF9SVENfSU5UX01BU0ssCisJCQlSRUdfSU5UX01TS19TVFNfQSk7CisJfQorCisKKwlmcmVlX2lycShpcnEsIHJ0Yyk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHdsX3J0Y19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCS8qIG1hc2sgdGltZXIgaW50ZXJydXB0cywgYnV0IGxlYXZlIGFsYXJtIGludGVycnVwdHMgb24gdG8gZW5hYmxlCisJICAgcG93ZXItb24gd2hlbiBhbGFybSBpcyB0cmlnZ2VyZWQgKi8KKwltYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxc3RhdDsKKworc3RhdGljIGludCB0d2xfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlycXN0YXQgPSBydGNfaXJxX2JpdHM7CisKKwltYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHdsX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzZXRfcnRjX2lycV9iaXQoaXJxc3RhdCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHR3bF9ydGNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHR3bF9ydGNfcmVzdW1lICBOVUxMCisjZW5kaWYKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2xfcnRjIik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR3bDQwMzBydGNfZHJpdmVyID0geworCS5wcm9iZQkJPSB0d2xfcnRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodHdsX3J0Y19yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHR3bF9ydGNfc2h1dGRvd24sCisJLnN1c3BlbmQJPSB0d2xfcnRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0d2xfcnRjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInR3bF9ydGMiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0d2xfcnRjX2luaXQodm9pZCkKK3sKKwlpZiAodHdsX2NsYXNzX2lzXzQwMzAoKSkKKwkJcnRjX3JlZ19tYXAgPSAodTggKikgdHdsNDAzMF9ydGNfcmVnX21hcDsKKwllbHNlCisJCXJ0Y19yZWdfbWFwID0gKHU4ICopIHR3bDYwMzBfcnRjX3JlZ19tYXA7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0d2w0MDMwcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh0d2xfcnRjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdsX3J0Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnR3bDQwMzBydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHR3bF9ydGNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzLCBNb250YVZpc3RhIFNvZnR3YXJlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jIGIvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4YzcwYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQwICswLDAgQEAKLS8qCi0gKiBydGMtdHdsNDAzMC5jIC0tIFRXTDQwMzAgUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMKLSAqIEF1dGhvcjogQWxleGFuZHJlIFJ1c2V2IDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiBvcmlnaW5hbCBUSSBkcml2ZXIgdHdsNDAzMC1ydGMuYwotICogICBDb3B5cmlnaHQgKEMpIDIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBCYXNlZCBvbiBydGMtb21hcC5jCi0gKiAgIENvcHlyaWdodCAoQykgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgIEF1dGhvcjogR2VvcmdlIEcuIERhdmlzIDxnZGF2aXNAbXZpc3RhLmNvbT4gb3IgPHNvdXJjZUBtdmlzdGEuY29tPgotICogICBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQnJvd25lbGwKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KLQotCi0vKgotICogUlRDIGJsb2NrIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0xfTU9EVUxFX1JUQykKLSAqLwotI2RlZmluZSBSRUdfU0VDT05EU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgUkVHX01JTlVURVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIFJFR19IT1VSU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBSRUdfREFZU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgUkVHX01PTlRIU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIFJFR19ZRUFSU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQotI2RlZmluZSBSRUdfV0VFS1NfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKLQotI2RlZmluZSBSRUdfQUxBUk1fU0VDT05EU19SRUcgICAgICAgICAgICAgICAgICAgIDB4MDcKLSNkZWZpbmUgUkVHX0FMQVJNX01JTlVURVNfUkVHICAgICAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIFJFR19BTEFSTV9IT1VSU19SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwOQotI2RlZmluZSBSRUdfQUxBUk1fREFZU19SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MEEKLSNkZWZpbmUgUkVHX0FMQVJNX01PTlRIU19SRUcgICAgICAgICAgICAgICAgICAgICAweDBCCi0jZGVmaW5lIFJFR19BTEFSTV9ZRUFSU19SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwQwotCi0jZGVmaW5lIFJFR19SVENfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRAotI2RlZmluZSBSRUdfUlRDX1NUQVRVU19SRUcgICAgICAgICAgICAgICAgICAgICAgIDB4MEUKLSNkZWZpbmUgUkVHX1JUQ19JTlRFUlJVUFRTX1JFRyAgICAgICAgICAgICAgICAgICAweDBGCi0KLSNkZWZpbmUgUkVHX1JUQ19DT01QX0xTQl9SRUcgICAgICAgICAgICAgICAgICAgICAweDEwCi0jZGVmaW5lIFJFR19SVENfQ09NUF9NU0JfUkVHICAgICAgICAgICAgICAgICAgICAgMHgxMQotCi0vKiBSVENfQ1RSTF9SRUcgYml0ZmllbGRzICovCi0jZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfU1RPUF9SVENfTSAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX1JPVU5EXzMwU19NICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQklUX1JUQ19DVFJMX1JFR19BVVRPX0NPTVBfTSAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfTU9ERV8xMl8yNF9NICAgICAgICAgICAgMHgwOAotI2RlZmluZSBCSVRfUlRDX0NUUkxfUkVHX1RFU1RfTU9ERV9NICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgQklUX1JUQ19DVFJMX1JFR19TRVRfMzJfQ09VTlRFUl9NICAgICAgICAweDIwCi0jZGVmaW5lIEJJVF9SVENfQ1RSTF9SRUdfR0VUX1RJTUVfTSAgICAgICAgICAgICAgMHg0MAotCi0vKiBSVENfU1RBVFVTX1JFRyBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHX1JVTl9NICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR18xU19FVkVOVF9NICAgICAgICAgICAgMHgwNAotI2RlZmluZSBCSVRfUlRDX1NUQVRVU19SRUdfMU1fRVZFTlRfTSAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHXzFIX0VWRU5UX00gICAgICAgICAgICAweDEwCi0jZGVmaW5lIEJJVF9SVENfU1RBVFVTX1JFR18xRF9FVkVOVF9NICAgICAgICAgICAgMHgyMAotI2RlZmluZSBCSVRfUlRDX1NUQVRVU19SRUdfQUxBUk1fTSAgICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUgQklUX1JUQ19TVEFUVVNfUkVHX1BPV0VSX1VQX00gICAgICAgICAgICAweDgwCi0KLS8qIFJUQ19JTlRFUlJVUFRTX1JFRyBiaXRmaWVsZHMgKi8KLSNkZWZpbmUgQklUX1JUQ19JTlRFUlJVUFRTX1JFR19FVkVSWV9NICAgICAgICAgICAweDAzCi0jZGVmaW5lIEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSAgICAgICAgMHgwNAotI2RlZmluZSBCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00gICAgICAgIDB4MDgKLQotCi0vKiBSRUdfU0VDT05EU19SRUcgdGhyb3VnaCBSRUdfWUVBUlNfUkVHIGlzIGhvdyBtYW55IHJlZ2lzdGVycz8gKi8KLSNkZWZpbmUgQUxMX1RJTUVfUkVHUwkJNgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogU3VwcG9ydHMgMSBieXRlIHJlYWQgZnJvbSBUV0w0MDMwIFJUQyByZWdpc3Rlci4KLSAqLwotc3RhdGljIGludCB0d2w0MDMwX3J0Y19yZWFkX3U4KHU4ICpkYXRhLCB1OCByZWcpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUlRDLCBkYXRhLCByZWcpOwotCWlmIChyZXQgPCAwKQotCQlwcl9lcnIoInR3bDQwMzBfcnRjOiBDb3VsZCBub3QgcmVhZCBUV0w0MDMwIgotCQkgICAgICAgInJlZ2lzdGVyICVYIC0gZXJyb3IgJWRcbiIsIHJlZywgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU3VwcG9ydHMgMSBieXRlIHdyaXRlIHRvIFRXTDQwMzAgUlRDIHJlZ2lzdGVycy4KLSAqLwotc3RhdGljIGludCB0d2w0MDMwX3J0Y193cml0ZV91OCh1OCBkYXRhLCB1OCByZWcpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1JUQywgZGF0YSwgcmVnKTsKLQlpZiAocmV0IDwgMCkKLQkJcHJfZXJyKCJ0d2w0MDMwX3J0YzogQ291bGQgbm90IHdyaXRlIFRXTDQwMzAiCi0JCSAgICAgICAicmVnaXN0ZXIgJVggLSBlcnJvciAlZFxuIiwgcmVnLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBDYWNoZSB0aGUgdmFsdWUgZm9yIHRpbWVyL2FsYXJtIGludGVycnVwdHMgcmVnaXN0ZXI7IHRoaXMgaXMKLSAqIG9ubHkgY2hhbmdlZCBieSBjYWxsZXJzIGhvbGRpbmcgcnRjIG9wcyBsb2NrIChvciByZXN1bWUpLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBydGNfaXJxX2JpdHM7Ci0KLS8qCi0gKiBFbmFibGUgMS9zZWNvbmQgdXBkYXRlIGFuZC9vciBhbGFybSBpbnRlcnJ1cHRzLgotICovCi1zdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCkKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQlpbnQgcmV0OwotCi0JdmFsID0gcnRjX2lycV9iaXRzIHwgYml0OwotCXZhbCAmPSB+QklUX1JUQ19JTlRFUlJVUFRTX1JFR19FVkVSWV9NOwotCXJldCA9IHR3bDQwMzBfcnRjX3dyaXRlX3U4KHZhbCwgUkVHX1JUQ19JTlRFUlJVUFRTX1JFRyk7Ci0JaWYgKHJldCA9PSAwKQotCQlydGNfaXJxX2JpdHMgPSB2YWw7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRGlzYWJsZSB1cGRhdGUgYW5kL29yIGFsYXJtIGludGVycnVwdHMuCi0gKi8KLXN0YXRpYyBpbnQgbWFza19ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCkKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQlpbnQgcmV0OwotCi0JdmFsID0gcnRjX2lycV9iaXRzICYgfmJpdDsKLQlyZXQgPSB0d2w0MDMwX3J0Y193cml0ZV91OCh2YWwsIFJFR19SVENfSU5URVJSVVBUU19SRUcpOwotCWlmIChyZXQgPT0gMCkKLQkJcnRjX2lycV9iaXRzID0gdmFsOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0d2w0MDMwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgZW5hYmxlZCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKGVuYWJsZWQpCi0JCXJldCA9IHNldF9ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pOwotCWVsc2UKLQkJcmV0ID0gbWFza19ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNX00pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0d2w0MDMwX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGVuYWJsZWQpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGVkKQotCQlyZXQgPSBzZXRfcnRjX2lycV9iaXQoQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9USU1FUl9NKTsKLQllbHNlCi0JCXJldCA9IG1hc2tfcnRjX2lycV9iaXQoQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9USU1FUl9NKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBHZXRzIGN1cnJlbnQgVFdMNDAzMCBSVEMgdGltZSBhbmQgZGF0ZSBwYXJhbWV0ZXJzLgotICoKLSAqIFRoZSBSVEMncyB0aW1lL2FsYXJtIHJlcHJlc2VudGF0aW9uIGlzIG5vdCB3aGF0IGdtdGltZSgzKSByZXF1aXJlcwotICogTGludXggdG8gdXNlOgotICoKLSAqICAtIE1vbnRocyBhcmUgMS4uMTIgdnMgTGludXggMC0xMQotICogIC0gWWVhcnMgYXJlIDAuLjk5IHZzIExpbnV4IDE5MDAuLk4gKHdlIGFzc3VtZSAyMXN0IGNlbnR1cnkpCi0gKi8KLXN0YXRpYyBpbnQgdHdsNDAzMF9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQl1bnNpZ25lZCBjaGFyIHJ0Y19kYXRhW0FMTF9USU1FX1JFR1MgKyAxXTsKLQlpbnQgcmV0OwotCXU4IHNhdmVfY29udHJvbDsKLQotCXJldCA9IHR3bDQwMzBfcnRjX3JlYWRfdTgoJnNhdmVfY29udHJvbCwgUkVHX1JUQ19DVFJMX1JFRyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlzYXZlX2NvbnRyb2wgfD0gQklUX1JUQ19DVFJMX1JFR19HRVRfVElNRV9NOwotCi0JcmV0ID0gdHdsNDAzMF9ydGNfd3JpdGVfdTgoc2F2ZV9jb250cm9sLCBSRUdfUlRDX0NUUkxfUkVHKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHR3bDQwMzBfaTJjX3JlYWQoVFdMNDAzMF9NT0RVTEVfUlRDLCBydGNfZGF0YSwKLQkJCSAgICAgICBSRUdfU0VDT05EU19SRUcsIEFMTF9USU1FX1JFR1MpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJydGNfcmVhZF90aW1lIGVycm9yICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXRtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y19kYXRhWzBdKTsKLQl0bS0+dG1fbWluID0gYmNkMmJpbihydGNfZGF0YVsxXSk7Ci0JdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y19kYXRhWzJdKTsKLQl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX2RhdGFbM10pOwotCXRtLT50bV9tb24gPSBiY2QyYmluKHJ0Y19kYXRhWzRdKSAtIDE7Ci0JdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y19kYXRhWzVdKSArIDEwMDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHdsNDAzMF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQotewotCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sOwotCXVuc2lnbmVkIGNoYXIgcnRjX2RhdGFbQUxMX1RJTUVfUkVHUyArIDFdOwotCWludCByZXQ7Ci0KLQlydGNfZGF0YVsxXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7Ci0JcnRjX2RhdGFbMl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOwotCXJ0Y19kYXRhWzNdID0gYmluMmJjZCh0bS0+dG1faG91cik7Ci0JcnRjX2RhdGFbNF0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKLQlydGNfZGF0YVs1XSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwotCXJ0Y19kYXRhWzZdID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7Ci0KLQkvKiBTdG9wIFJUQyB3aGlsZSB1cGRhdGluZyB0aGUgVEMgcmVnaXN0ZXJzICovCi0JcmV0ID0gdHdsNDAzMF9ydGNfcmVhZF91OCgmc2F2ZV9jb250cm9sLCBSRUdfUlRDX0NUUkxfUkVHKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlzYXZlX2NvbnRyb2wgJj0gfkJJVF9SVENfQ1RSTF9SRUdfU1RPUF9SVENfTTsKLQl0d2w0MDMwX3J0Y193cml0ZV91OChzYXZlX2NvbnRyb2wsIFJFR19SVENfQ1RSTF9SRUcpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCS8qIHVwZGF0ZSBhbGwgdGhlIHRpbWUgcmVnaXN0ZXJzIGluIG9uZSBzaG90ICovCi0JcmV0ID0gdHdsNDAzMF9pMmNfd3JpdGUoVFdMNDAzMF9NT0RVTEVfUlRDLCBydGNfZGF0YSwKLQkJCVJFR19TRUNPTkRTX1JFRywgQUxMX1RJTUVfUkVHUyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJydGNfc2V0X3RpbWUgZXJyb3IgJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFN0YXJ0IGJhY2sgUlRDICovCi0Jc2F2ZV9jb250cm9sIHw9IEJJVF9SVENfQ1RSTF9SRUdfU1RPUF9SVENfTTsKLQlyZXQgPSB0d2w0MDMwX3J0Y193cml0ZV91OChzYXZlX2NvbnRyb2wsIFJFR19SVENfQ1RSTF9SRUcpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEdldHMgY3VycmVudCBUV0w0MDMwIFJUQyBhbGFybSB0aW1lLgotICovCi1zdGF0aWMgaW50IHR3bDQwMzBfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxtKQotewotCXVuc2lnbmVkIGNoYXIgcnRjX2RhdGFbQUxMX1RJTUVfUkVHUyArIDFdOwotCWludCByZXQ7Ci0KLQlyZXQgPSB0d2w0MDMwX2kyY19yZWFkKFRXTDQwMzBfTU9EVUxFX1JUQywgcnRjX2RhdGEsCi0JCQkgICAgICAgUkVHX0FMQVJNX1NFQ09ORFNfUkVHLCBBTExfVElNRV9SRUdTKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgInJ0Y19yZWFkX2FsYXJtIGVycm9yICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHNvbWUgb2YgdGhlc2UgZmllbGRzIG1heSBiZSB3aWxkY2FyZC8ibWF0Y2ggYWxsIiAqLwotCWFsbS0+dGltZS50bV9zZWMgPSBiY2QyYmluKHJ0Y19kYXRhWzBdKTsKLQlhbG0tPnRpbWUudG1fbWluID0gYmNkMmJpbihydGNfZGF0YVsxXSk7Ci0JYWxtLT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKHJ0Y19kYXRhWzJdKTsKLQlhbG0tPnRpbWUudG1fbWRheSA9IGJjZDJiaW4ocnRjX2RhdGFbM10pOwotCWFsbS0+dGltZS50bV9tb24gPSBiY2QyYmluKHJ0Y19kYXRhWzRdKSAtIDE7Ci0JYWxtLT50aW1lLnRtX3llYXIgPSBiY2QyYmluKHJ0Y19kYXRhWzVdKSArIDEwMDsKLQotCS8qIHJlcG9ydCBjYWNoZWQgYWxhcm0gZW5hYmxlIHN0YXRlICovCi0JaWYgKHJ0Y19pcnFfYml0cyAmIEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfQUxBUk1fTSkKLQkJYWxtLT5lbmFibGVkID0gMTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHdsNDAzMF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKLXsKLQl1bnNpZ25lZCBjaGFyIGFsYXJtX2RhdGFbQUxMX1RJTUVfUkVHUyArIDFdOwotCWludCByZXQ7Ci0KLQlyZXQgPSB0d2w0MDMwX3J0Y19hbGFybV9pcnFfZW5hYmxlKGRldiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlhbGFybV9kYXRhWzFdID0gYmluMmJjZChhbG0tPnRpbWUudG1fc2VjKTsKLQlhbGFybV9kYXRhWzJdID0gYmluMmJjZChhbG0tPnRpbWUudG1fbWluKTsKLQlhbGFybV9kYXRhWzNdID0gYmluMmJjZChhbG0tPnRpbWUudG1faG91cik7Ci0JYWxhcm1fZGF0YVs0XSA9IGJpbjJiY2QoYWxtLT50aW1lLnRtX21kYXkpOwotCWFsYXJtX2RhdGFbNV0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9tb24gKyAxKTsKLQlhbGFybV9kYXRhWzZdID0gYmluMmJjZChhbG0tPnRpbWUudG1feWVhciAtIDEwMCk7Ci0KLQkvKiB1cGRhdGUgYWxsIHRoZSBhbGFybSByZWdpc3RlcnMgaW4gb25lIHNob3QgKi8KLQlyZXQgPSB0d2w0MDMwX2kyY193cml0ZShUV0w0MDMwX01PRFVMRV9SVEMsIGFsYXJtX2RhdGEsCi0JCQlSRUdfQUxBUk1fU0VDT05EU19SRUcsIEFMTF9USU1FX1JFR1MpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJydGNfc2V0X2FsYXJtIGVycm9yICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYWxtLT5lbmFibGVkKQotCQlyZXQgPSB0d2w0MDMwX3J0Y19hbGFybV9pcnFfZW5hYmxlKGRldiwgMSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHR3bDQwMzBfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpydGMpCi17Ci0JdW5zaWduZWQgbG9uZyBldmVudHMgPSAwOwotCWludCByZXQgPSBJUlFfTk9ORTsKLQlpbnQgcmVzOwotCXU4IHJkX3JlZzsKLQotI2lmZGVmIENPTkZJR19MT0NLREVQCi0JLyogV09SS0FST1VORCBmb3IgbG9ja2RlcCBmb3JjaW5nIElSUUZfRElTQUJMRUQgb24gdXMsIHdoaWNoCi0JICogd2UgZG9uJ3Qgd2FudCBhbmQgY2FuJ3QgdG9sZXJhdGUuICBBbHRob3VnaCBpdCBtaWdodCBiZQotCSAqIGZyaWVuZGxpZXIgbm90IHRvIGJvcnJvdyB0aGlzIHRocmVhZCBjb250ZXh0Li4uCi0JICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotI2VuZGlmCi0KLQlyZXMgPSB0d2w0MDMwX3J0Y19yZWFkX3U4KCZyZF9yZWcsIFJFR19SVENfU1RBVFVTX1JFRyk7Ci0JaWYgKHJlcykKLQkJZ290byBvdXQ7Ci0JLyoKLQkgKiBGaWd1cmUgb3V0IHNvdXJjZSBvZiBpbnRlcnJ1cHQ6IEFMQVJNIG9yIFRJTUVSIGluIFJUQ19TVEFUVVNfUkVHLgotCSAqIG9ubHkgb25lIChBTEFSTSBvciBSVEMpIGludGVycnVwdCBzb3VyY2UgbWF5IGJlIGVuYWJsZWQKLQkgKiBhdCB0aW1lLCB3ZSBhbHNvIGNvdWxkIGNoZWNrIG91ciByZXN1bHRzCi0JICogYnkgcmVhZGluZyBSVFNfSU5URVJSVVBUU19SRUdJU1RFUltJVF9USU1FUixJVF9BTEFSTV0KLQkgKi8KLQlpZiAocmRfcmVnICYgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00pCi0JCWV2ZW50cyB8PSBSVENfSVJRRiB8IFJUQ19BRjsKLQllbHNlCi0JCWV2ZW50cyB8PSBSVENfSVJRRiB8IFJUQ19VRjsKLQotCXJlcyA9IHR3bDQwMzBfcnRjX3dyaXRlX3U4KHJkX3JlZyB8IEJJVF9SVENfU1RBVFVTX1JFR19BTEFSTV9NLAotCQkJCSAgIFJFR19SVENfU1RBVFVTX1JFRyk7Ci0JaWYgKHJlcykKLQkJZ290byBvdXQ7Ci0KLQkvKiBDbGVhciBvbiBSZWFkIGVuYWJsZWQuIFJUQ19JVCBiaXQgb2YgVFdMNDAzMF9JTlRfUFdSX0lTUjEKLQkgKiBuZWVkcyAyIHJlYWRzIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQuIE9uZSByZWFkIGlzIGRvbmUgaW4KLQkgKiBkb190d2w0MDMwX3B3cmlycSgpLiBEb2luZyB0aGUgc2Vjb25kIHJlYWQsIHRvIGNsZWFyCi0JICogdGhlIGJpdC4KLQkgKgotCSAqIEZJWE1FIHRoZSByZWFzb24gUFdSX0lTUjEgbmVlZHMgYW4gZXh0cmEgcmVhZCBpcyB0aGF0Ci0JICogUlRDX0lGIHJldHJpZ2dlcmVkIHVudGlsIHdlIGNsZWFyZWQgUkVHX0FMQVJNX00gYWJvdmUuCi0JICogQnV0IHJlLXJlYWRpbmcgbGlrZSB0aGlzIGlzIGEgYmFkIGhhY2s7IGJ5IGRvaW5nIHNvIHdlCi0JICogcmlzayB3cm9uZ2x5IGNsZWFyaW5nIHN0YXR1cyBmb3Igc29tZSBvdGhlciBJUlEgKGxvc2luZwotCSAqIHRoZSBpbnRlcnJ1cHQpLiAgQmUgc21hcnRlciBhYm91dCBoYW5kbGluZyBSVENfVUYgLi4uCi0JICovCi0JcmVzID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9JTlQsCi0JCQkmcmRfcmVnLCBUV0w0MDMwX0lOVF9QV1JfSVNSMSk7Ci0JaWYgKHJlcykKLQkJZ290byBvdXQ7Ci0KLQkvKiBOb3RpZnkgUlRDIGNvcmUgb24gZXZlbnQgKi8KLQlydGNfdXBkYXRlX2lycShydGMsIDEsIGV2ZW50cyk7Ci0KLQlyZXQgPSBJUlFfSEFORExFRDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgdHdsNDAzMF9ydGNfb3BzID0gewotCS5yZWFkX3RpbWUJPSB0d2w0MDMwX3J0Y19yZWFkX3RpbWUsCi0JLnNldF90aW1lCT0gdHdsNDAzMF9ydGNfc2V0X3RpbWUsCi0JLnJlYWRfYWxhcm0JPSB0d2w0MDMwX3J0Y19yZWFkX2FsYXJtLAotCS5zZXRfYWxhcm0JPSB0d2w0MDMwX3J0Y19zZXRfYWxhcm0sCi0JLmFsYXJtX2lycV9lbmFibGUgPSB0d2w0MDMwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAotCS51cGRhdGVfaXJxX2VuYWJsZSA9IHR3bDQwMzBfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIGludCBfX2RldmluaXQgdHdsNDAzMF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwotCWludCByZXQgPSAwOwotCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCXU4IHJkX3JlZzsKLQotCWlmIChpcnEgPD0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsCi0JCQkJICAmcGRldi0+ZGV2LCAmdHdsNDAzMF9ydGNfb3BzLCBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnRjKTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgUlRDIGRldmljZSwgZXJyICVsZFxuIiwKLQkJCVBUUl9FUlIocnRjKSk7Ci0JCWdvdG8gb3V0MDsKLQotCX0KLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7Ci0KLQlyZXQgPSB0d2w0MDMwX3J0Y19yZWFkX3U4KCZyZF9yZWcsIFJFR19SVENfU1RBVFVTX1JFRyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0MTsKLQotCWlmIChyZF9yZWcgJiBCSVRfUlRDX1NUQVRVU19SRUdfUE9XRVJfVVBfTSkKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlBvd2VyIHVwIHJlc2V0IGRldGVjdGVkLlxuIik7Ci0KLQlpZiAocmRfcmVnICYgQklUX1JUQ19TVEFUVVNfUkVHX0FMQVJNX00pCi0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJQZW5kaW5nIEFsYXJtIGludGVycnVwdCBkZXRlY3RlZC5cbiIpOwotCi0JLyogQ2xlYXIgUlRDIFBvd2VyIHVwIHJlc2V0IGFuZCBwZW5kaW5nIGFsYXJtIGludGVycnVwdHMgKi8KLQlyZXQgPSB0d2w0MDMwX3J0Y193cml0ZV91OChyZF9yZWcsIFJFR19SVENfU1RBVFVTX1JFRyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0MTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdHdsNDAzMF9ydGNfaW50ZXJydXB0LAotCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJUlEgaXMgbm90IGZyZWUuXG4iKTsKLQkJZ290byBvdXQxOwotCX0KLQotCS8qIENoZWNrIFJUQyBtb2R1bGUgc3RhdHVzLCBFbmFibGUgaWYgaXQgaXMgb2ZmICovCi0JcmV0ID0gdHdsNDAzMF9ydGNfcmVhZF91OCgmcmRfcmVnLCBSRUdfUlRDX0NUUkxfUkVHKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQyOwotCi0JaWYgKCEocmRfcmVnICYgQklUX1JUQ19DVFJMX1JFR19TVE9QX1JUQ19NKSkgewotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRW5hYmxpbmcgVFdMNDAzMC1SVEMuXG4iKTsKLQkJcmRfcmVnID0gQklUX1JUQ19DVFJMX1JFR19TVE9QX1JUQ19NOwotCQlyZXQgPSB0d2w0MDMwX3J0Y193cml0ZV91OChyZF9yZWcsIFJFR19SVENfQ1RSTF9SRUcpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0MjsKLQl9Ci0KLQkvKiBpbml0IGNhY2hlZCBJUlEgZW5hYmxlIGJpdHMgKi8KLQlyZXQgPSB0d2w0MDMwX3J0Y19yZWFkX3U4KCZydGNfaXJxX2JpdHMsIFJFR19SVENfSU5URVJSVVBUU19SRUcpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDI7Ci0KLQlyZXR1cm4gcmV0OwotCi1vdXQyOgotCWZyZWVfaXJxKGlycSwgcnRjKTsKLW91dDE6Ci0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7Ci1vdXQwOgotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBEaXNhYmxlIGFsbCBUV0w0MDMwIFJUQyBtb2R1bGUgaW50ZXJydXB0cy4KLSAqIFNldHMgc3RhdHVzIGZsYWcgdG8gZnJlZS4KLSAqLwotc3RhdGljIGludCBfX2RldmV4aXQgdHdsNDAzMF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JLyogbGVhdmUgcnRjIHJ1bm5pbmcsIGJ1dCBkaXNhYmxlIGlycXMgKi8KLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0KLQltYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfQUxBUk1fTSk7Ci0JbWFza19ydGNfaXJxX2JpdChCSVRfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX1RJTUVSX00pOwotCi0JZnJlZV9pcnEoaXJxLCBydGMpOwotCi0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHR3bDQwMzBfcnRjX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JLyogbWFzayB0aW1lciBpbnRlcnJ1cHRzLCBidXQgbGVhdmUgYWxhcm0gaW50ZXJydXB0cyBvbiB0byBlbmFibGUKLQkgICBwb3dlci1vbiB3aGVuIGFsYXJtIGlzIHRyaWdnZXJlZCAqLwotCW1hc2tfcnRjX2lycV9iaXQoQklUX1JUQ19JTlRFUlJVUFRTX1JFR19JVF9USU1FUl9NKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcnFzdGF0OwotCi1zdGF0aWMgaW50IHR3bDQwMzBfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCWlycXN0YXQgPSBydGNfaXJxX2JpdHM7Ci0KLQltYXNrX3J0Y19pcnFfYml0KEJJVF9SVENfSU5URVJSVVBUU19SRUdfSVRfVElNRVJfTSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHdsNDAzMF9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc2V0X3J0Y19pcnFfYml0KGlycXN0YXQpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSB0d2w0MDMwX3J0Y19zdXNwZW5kIE5VTEwKLSNkZWZpbmUgdHdsNDAzMF9ydGNfcmVzdW1lICBOVUxMCi0jZW5kaWYKLQotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2w0MDMwX3J0YyIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0d2w0MDMwcnRjX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gdHdsNDAzMF9ydGNfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0d2w0MDMwX3J0Y19yZW1vdmUpLAotCS5zaHV0ZG93bgk9IHR3bDQwMzBfcnRjX3NodXRkb3duLAotCS5zdXNwZW5kCT0gdHdsNDAzMF9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHR3bDQwMzBfcnRjX3Jlc3VtZSwKLQkuZHJpdmVyCQk9IHsKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCT0gInR3bDQwMzBfcnRjIiwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9ydGNfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnR3bDQwMzBydGNfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KHR3bDQwMzBfcnRjX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHdsNDAzMF9ydGNfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0d2w0MDMwcnRjX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdCh0d2w0MDMwX3J0Y19leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMsIE1vbnRhVmlzdGEgU29mdHdhcmUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10eDQ5MzkuYyBiL2RyaXZlcnMvcnRjL3J0Yy10eDQ5MzkuYwppbmRleCA0YTZlZDExLi45ZWU4MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdHg0OTM5LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXR4NDkzOS5jCkBAIC0xNyw2ICsxNyw3IEBACiBzdHJ1Y3QgdHg0OTM5cnRjX3BsYXRfZGF0YSB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAlzdHJ1Y3QgdHg0OTM5X3J0Y19yZWcgX19pb21lbSAqcnRjcmVnOworCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHg0OTM5cnRjX3BsYXRfZGF0YSAqZ2V0X3R4NDkzOXJ0Y19wbGF0X2RhdGEoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNTIsMTQgKzUzLDE0IEBACiAJYnVmWzNdID0gc2VjcyA+PiA4OwogCWJ1Zls0XSA9IHNlY3MgPj4gMTY7CiAJYnVmWzVdID0gc2VjcyA+PiAyNDsKLQlzcGluX2xvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCV9fcmF3X3dyaXRlbCgwLCAmcnRjcmVnLT5hZHIpOwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCV9fcmF3X3dyaXRlbChidWZbaV0sICZydGNyZWctPmRhdCk7CiAJcmV0ID0gdHg0OTM5X3J0Y19jbWQocnRjcmVnLAogCQkJICAgICBUWDQ5MzlfUlRDQ1RMX0NPTU1BTkRfU0VUVElNRSB8CiAJCQkgICAgIChfX3Jhd19yZWFkbCgmcnRjcmVnLT5jdGwpICYgVFg0OTM5X1JUQ0NUTF9BTE1FKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzEsMTggKzcyLDE4IEBACiAJdW5zaWduZWQgbG9uZyBzZWM7CiAJdW5zaWduZWQgY2hhciBidWZbNl07CiAKLQlzcGluX2xvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXJldCA9IHR4NDkzOV9ydGNfY21kKHJ0Y3JlZywKIAkJCSAgICAgVFg0OTM5X1JUQ0NUTF9DT01NQU5EX0dFVFRJTUUgfAogCQkJICAgICAoX19yYXdfcmVhZGwoJnJ0Y3JlZy0+Y3RsKSAmIFRYNDkzOV9SVENDVExfQUxNRSkpOwogCWlmIChyZXQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KIAlfX3Jhd193cml0ZWwoMiwgJnJ0Y3JlZy0+YWRyKTsKIAlmb3IgKGkgPSAyOyBpIDwgNjsgaSsrKQogCQlidWZbaV0gPSBfX3Jhd19yZWFkbCgmcnRjcmVnLT5kYXQpOwotCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXNlYyA9IChidWZbNV0gPDwgMjQpIHwgKGJ1Zls0XSA8PCAxNikgfCAoYnVmWzNdIDw8IDgpIHwgYnVmWzJdOwogCXJ0Y190aW1lX3RvX3RtKHNlYywgdG0pOwogCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwpAQCAtMTEwLDEzICsxMTEsMTMgQEAKIAlidWZbM10gPSBzZWMgPj4gODsKIAlidWZbNF0gPSBzZWMgPj4gMTY7CiAJYnVmWzVdID0gc2VjID4+IDI0OwotCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bG9jayk7CiAJX19yYXdfd3JpdGVsKDAsICZydGNyZWctPmFkcik7CiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJX19yYXdfd3JpdGVsKGJ1ZltpXSwgJnJ0Y3JlZy0+ZGF0KTsKIAlyZXQgPSB0eDQ5MzlfcnRjX2NtZChydGNyZWcsIFRYNDkzOV9SVENDVExfQ09NTUFORF9TRVRBTEFSTSB8CiAJCQkgICAgIChhbHJtLT5lbmFibGVkID8gVFg0OTM5X1JUQ0NUTF9BTE1FIDogMCkpOwotCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyOSwxMiArMTMwLDEyIEBACiAJdW5zaWduZWQgY2hhciBidWZbNl07CiAJdTMyIGN0bDsKIAotCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bG9jayk7CiAJcmV0ID0gdHg0OTM5X3J0Y19jbWQocnRjcmVnLAogCQkJICAgICBUWDQ5MzlfUlRDQ1RMX0NPTU1BTkRfR0VUQUxBUk0gfAogCQkJICAgICAoX19yYXdfcmVhZGwoJnJ0Y3JlZy0+Y3RsKSAmIFRYNDkzOV9SVENDVExfQUxNRSkpOwogCWlmIChyZXQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KIAlfX3Jhd193cml0ZWwoMiwgJnJ0Y3JlZy0+YWRyKTsKQEAgLTE0Myw3ICsxNDQsNyBAQAogCWN0bCA9IF9fcmF3X3JlYWRsKCZydGNyZWctPmN0bCk7CiAJYWxybS0+ZW5hYmxlZCA9IChjdGwgJiBUWDQ5MzlfUlRDQ1RMX0FMTUUpID8gMSA6IDA7CiAJYWxybS0+cGVuZGluZyA9IChjdGwgJiBUWDQ5MzlfUlRDQ1RMX0FMTUQpID8gMSA6IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bG9jayk7CiAJc2VjID0gKGJ1Zls1XSA8PCAyNCkgfCAoYnVmWzRdIDw8IDE2KSB8IChidWZbM10gPDwgOCkgfCBidWZbMl07CiAJcnRjX3RpbWVfdG9fdG0oc2VjLCAmYWxybS0+dGltZSk7CiAJcmV0dXJuIHJ0Y192YWxpZF90bSgmYWxybS0+dGltZSk7CkBAIC0xNTMsMTEgKzE1NCwxMSBAQAogewogCXN0cnVjdCB0eDQ5MzlydGNfcGxhdF9kYXRhICpwZGF0YSA9IGdldF90eDQ5MzlydGNfcGxhdF9kYXRhKGRldik7CiAKLQlzcGluX2xvY2tfaXJxKCZwZGF0YS0+cnRjLT5pcnFfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXR4NDkzOV9ydGNfY21kKHBkYXRhLT5ydGNyZWcsCiAJCSAgICAgICBUWDQ5MzlfUlRDQ1RMX0NPTU1BTkRfTk9QIHwKIAkJICAgICAgIChlbmFibGVkID8gVFg0OTM5X1JUQ0NUTF9BTE1FIDogMCkpOwotCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNjcsMTMgKzE2OCwxNCBAQAogCXN0cnVjdCB0eDQ5MzlfcnRjX3JlZyBfX2lvbWVtICpydGNyZWcgPSBwZGF0YS0+cnRjcmVnOwogCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gUlRDX0lSUUY7CiAKLQlzcGluX2xvY2soJnBkYXRhLT5ydGMtPmlycV9sb2NrKTsKKwlzcGluX2xvY2soJnBkYXRhLT5sb2NrKTsKIAlpZiAoX19yYXdfcmVhZGwoJnJ0Y3JlZy0+Y3RsKSAmIFRYNDkzOV9SVENDVExfQUxNRCkgewogCQlldmVudHMgfD0gUlRDX0FGOwogCQl0eDQ5MzlfcnRjX2NtZChydGNyZWcsIFRYNDkzOV9SVENDVExfQ09NTUFORF9OT1ApOwogCX0KLQlzcGluX3VubG9jaygmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOwotCXJ0Y191cGRhdGVfaXJxKHBkYXRhLT5ydGMsIDEsIGV2ZW50cyk7CisJc3Bpbl91bmxvY2soJnBkYXRhLT5sb2NrKTsKKwlpZiAobGlrZWx5KHBkYXRhLT5ydGMpKQorCQlydGNfdXBkYXRlX2lycShwZGF0YS0+cnRjLCAxLCBldmVudHMpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTk0LDEzICsxOTYsMTMgQEAKIAlzdHJ1Y3QgdHg0OTM5X3J0Y19yZWcgX19pb21lbSAqcnRjcmVnID0gcGRhdGEtPnJ0Y3JlZzsKIAlzc2l6ZV90IGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5sb2NrKTsKIAlmb3IgKGNvdW50ID0gMDsgc2l6ZSA+IDAgJiYgcG9zIDwgVFg0OTM5X1JUQ19SRUdfUkFNU0laRTsKIAkgICAgIGNvdW50KyssIHNpemUtLSkgewogCQlfX3Jhd193cml0ZWwocG9zKyssICZydGNyZWctPmFkcik7CiAJCSpidWYrKyA9IF9fcmF3X3JlYWRsKCZydGNyZWctPmRhdCk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjEzLDEzICsyMTUsMTMgQEAKIAlzdHJ1Y3QgdHg0OTM5X3J0Y19yZWcgX19pb21lbSAqcnRjcmVnID0gcGRhdGEtPnJ0Y3JlZzsKIAlzc2l6ZV90IGNvdW50OwogCi0Jc3Bpbl9sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5sb2NrKTsKIAlmb3IgKGNvdW50ID0gMDsgc2l6ZSA+IDAgJiYgcG9zIDwgVFg0OTM5X1JUQ19SRUdfUkFNU0laRTsKIAkgICAgIGNvdW50KyssIHNpemUtLSkgewogCQlfX3Jhd193cml0ZWwocG9zKyssICZydGNyZWctPmFkcik7CiAJCV9fcmF3X3dyaXRlbCgqYnVmKyssICZydGNyZWctPmRhdCk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPmxvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjU5LDYgKzI2MSw3IEBACiAJaWYgKCFwZGF0YS0+cnRjcmVnKQogCQlyZXR1cm4gLUVCVVNZOwogCisJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5sb2NrKTsKIAl0eDQ5MzlfcnRjX2NtZChwZGF0YS0+cnRjcmVnLCBUWDQ5MzlfUlRDQ1RMX0NPTU1BTkRfTk9QKTsKIAlpZiAoZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIHR4NDkzOV9ydGNfaW50ZXJydXB0LAogCQkJICAgICBJUlFGX0RJU0FCTEVELCBwZGV2LT5uYW1lLCAmcGRldi0+ZGV2KSA8IDApCkBAIC0yNzcsMTQgKzI4MCwxMiBAQAogc3RhdGljIGludCBfX2V4aXQgdHg0OTM5X3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdHg0OTM5cnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGRhdGEtPnJ0YzsKIAotCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOwotCXR4NDkzOV9ydGNfY21kKHBkYXRhLT5ydGNyZWcsIFRYNDkzOV9SVENDVExfQ09NTUFORF9OT1ApOwotCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnR4NDkzOV9ydGNfbnZyYW1fYXR0cik7Ci0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5ydGMpOworCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5sb2NrKTsKKwl0eDQ5MzlfcnRjX2NtZChwZGF0YS0+cnRjcmVnLCBUWDQ5MzlfUlRDQ1RMX0NPTU1BTkRfTk9QKTsKKwlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCBhZDc0MWFmLi5iZWQ0Y2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtMzA0LDcgKzMwNCw2IEBACiB7CiAJc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHYzMDIwICpjaGlwOwotCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJaW50IHJldHZhbCA9IC1FQlVTWTsKIAlpbnQgaTsKIAlpbnQgdGVtcDsKQEAgLTM1MywxMyArMzUyLDEyIEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKIAotCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInYzMDIwIiwKKwljaGlwLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJ2MzAyMCIsCiAJCQkJJnBkZXYtPmRldiwgJnYzMDIwX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJcmV0dmFsID0gUFRSX0VSUihydGMpOworCWlmIChJU19FUlIoY2hpcC0+cnRjKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKGNoaXAtPnJ0Yyk7CiAJCWdvdG8gZXJyX2lvOwogCX0KLQljaGlwLT5ydGMgPSBydGM7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCmluZGV4IGZhZGRkYWMuLmMzMjQ0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKQEAgLTMyNyw3ICszMjcsNyBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcnRjMV9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlydGMxX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFydGMxX2Jhc2UpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTMzNyw3ICszMzcsNyBAQAogCQlnb3RvIGVycl9ydGMxX2lvdW5tYXA7CiAJfQogCi0JcnRjMl9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlydGMyX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFydGMyX2Jhc2UpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGVycl9ydGMxX2lvdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtd204MzF4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtd204MzF4LmMKaW5kZXggNzk3OTVjZC4uMDAwYzdlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXdtODMxeC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy13bTgzMXguYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB3bTgzMXhfcnRjX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB3bTgzMXhfcnRjX3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHdtODMxeF9ydGNfc3VzcGVuZCwKIAkucmVzdW1lID0gd204MzF4X3J0Y19yZXN1bWUsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYyBiL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYwppbmRleCBjOTFlZGM1Li5mMWU0NDA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYwpAQCAtMzE1LDkgKzMxNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHdtODM1MF9ydGNfYWxhcm1faGFuZGxlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCi0JCQkJICAgICB2b2lkICpkYXRhKQorc3RhdGljIGlycXJldHVybl90IHdtODM1MF9ydGNfYWxhcm1faGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogeworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRhdGE7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHdtODM1MC0+cnRjLnJ0YzsKIAlpbnQgcmV0OwogCkBAIC0zMzAsMTQgKzMzMCwxOCBAQAogCQlkZXZfZXJyKCYod204MzUwLT5ydGMucGRldi0+ZGV2KSwKIAkJCSJGYWlsZWQgdG8gZGlzYWJsZSBhbGFybTogJWRcbiIsIHJldCk7CiAJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCB3bTgzNTBfcnRjX3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKLQkJCQkgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGlycXJldHVybl90IHdtODM1MF9ydGNfdXBkYXRlX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkYXRhOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB3bTgzNTAtPnJ0Yy5ydGM7CiAKIAlydGNfdXBkYXRlX2lycShydGMsIDEsIFJUQ19JUlFGIHwgUlRDX1VGKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHdtODM1MF9ydGNfb3BzID0gewpAQCAtMzUwLDggKzM1NCw5IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHdtODM1MF9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHdtODM1MF9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgcmVnOwpAQCAtMzY5LDggKzM3NCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bTgzNTBfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCB3bTgzNTBfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAlpbnQgcmV0OwogCkBAIC00NTUsMTUgKzQ2MSwxNCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQyk7Ci0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfUEVSKTsKLQogCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMsCi0JCQkgICAgd204MzUwX3J0Y191cGRhdGVfaGFuZGxlciwgTlVMTCk7CisJCQkgICAgd204MzUwX3J0Y191cGRhdGVfaGFuZGxlciwgMCwKKwkJCSAgICAiUlRDIFNlY29uZHMiLCB3bTgzNTApOworCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQyk7CiAKIAl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfQUxNLAotCQkJICAgIHdtODM1MF9ydGNfYWxhcm1faGFuZGxlciwgTlVMTCk7Ci0Jd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19BTE0pOworCQkJICAgIHdtODM1MF9ydGNfYWxhcm1faGFuZGxlciwgMCwKKwkJCSAgICAiUlRDIEFsYXJtIiwgd204MzUwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDczLDggKzQ3OCw2IEBACiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODM1MF9ydGMgKndtX3J0YyA9ICZ3bTgzNTAtPnJ0YzsKIAotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQyk7Ci0KIAl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOwogCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX0FMTSk7CiAKQEAgLTQ4MywxMyArNDg2LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB3bTgzNTBfcnRjX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHdtODM1MF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lID0gd204MzUwX3J0Y19yZXN1bWUsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzNTBfcnRjX2RyaXZlciA9IHsKIAkucHJvYmUgPSB3bTgzNTBfcnRjX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzNTBfcnRjX3JlbW92ZSksCi0JLnN1c3BlbmQgPSB3bTgzNTBfcnRjX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHdtODM1MF9ydGNfcmVzdW1lLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIndtODM1MC1ydGMiLAorCQkucG0gPSAmd204MzUwX3J0Y19wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKaW5kZXggNjU4M2MxYS4uOWFhZTQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKQEAgLTE1NSwxMSArMTU1LDExIEBACiB9CiAKIHN0YXRpYyBpbnQgeDEyMDVfc2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0sCi0JCQlpbnQgZGF0ZXRvbywgdTggcmVnX2Jhc2UsIHVuc2lnbmVkIGNoYXIgYWxtX2VuYWJsZSkKKwkJCXU4IHJlZ19iYXNlLCB1bnNpZ25lZCBjaGFyIGFsbV9lbmFibGUpCiB7Ci0JaW50IGksIHhmZXIsIG5ieXRlczsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKwlpbnQgaSwgeGZlcjsKIAl1bnNpZ25lZCBjaGFyIHJkYXRhWzEwXSA9IHsgMCwgcmVnX2Jhc2UgfTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSByZGF0YSArIDI7CiAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB3ZWxbM10gPSB7IDAsIFgxMjA1X1JFR19TUiwKIAkJCQkJCVgxMjA1X1NSX1dFTCB9OwpAQCAtMTcwLDkgKzE3MCw5IEBACiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlzd2VbM10gPSB7IDAsIFgxMjA1X1JFR19TUiwgMCB9OwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsCi0JCSIlczogc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWRcbiIsCi0JCV9fZnVuY19fLAotCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91cik7CisJCSIlczogc2VjPSVkIG1pbj0lZCBob3VyPSVkIG1kYXk9JWQgbW9uPSVkIHllYXI9JWQgd2RheT0lZFxuIiwKKwkJX19mdW5jX18sIHRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLCB0bS0+dG1fbWRheSwKKwkJdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAogCWJ1ZltDQ1JfU0VDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CiAJYnVmW0NDUl9NSU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKQEAgLTE4MCwyMyArMTgwLDE1IEBACiAJLyogc2V0IGhvdXIgYW5kIDI0aHIgYml0ICovCiAJYnVmW0NDUl9IT1VSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpIHwgWDEyMDVfSFJfTUlMOwogCi0JLyogc2hvdWxkIHdlIGFsc28gc2V0IHRoZSBkYXRlPyAqLwotCWlmIChkYXRldG9vKSB7Ci0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LAotCQkJIiVzOiBtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOworCWJ1ZltDQ1JfTURBWV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAotCQlidWZbQ0NSX01EQVldID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJLyogbW9udGgsIDEgLSAxMiAqLworCWJ1ZltDQ1JfTU9OVEhdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKLQkJLyogbW9udGgsIDEgLSAxMiAqLwotCQlidWZbQ0NSX01PTlRIXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwotCi0JCS8qIHllYXIsIHNpbmNlIHRoZSBydGMgZXBvY2gqLwotCQlidWZbQ0NSX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7Ci0JCWJ1ZltDQ1JfV0RBWV0gPSB0bS0+dG1fd2RheSAmIDB4MDc7Ci0JCWJ1ZltDQ1JfWTJLXSA9IGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOwotCX0KKwkvKiB5ZWFyLCBzaW5jZSB0aGUgcnRjIGVwb2NoKi8KKwlidWZbQ0NSX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CisJYnVmW0NDUl9XREFZXSA9IHRtLT50bV93ZGF5ICYgMHgwNzsKKwlidWZbQ0NSX1kyS10gPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAogCS8qIElmIHdyaXRpbmcgYWxhcm0gcmVnaXN0ZXJzLCBzZXQgY29tcGFyZSBiaXRzIG9uIHJlZ2lzdGVycyAwLTQgKi8KIAlpZiAocmVnX2Jhc2UgPCBYMTIwNV9DQ1JfQkFTRSkKQEAgLTIxNCwxNyArMjA2LDggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0KLQkvKiB3cml0ZSByZWdpc3RlcidzIGRhdGEgKi8KLQlpZiAoZGF0ZXRvbykKLQkJbmJ5dGVzID0gODsKLQllbHNlCi0JCW5ieXRlcyA9IDM7Ci0JZm9yIChpID0gMDsgaSA8IG5ieXRlczsgaSsrKQotCQlyZGF0YVsyK2ldID0gYnVmW2ldOwotCi0JeGZlciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIHJkYXRhLCBuYnl0ZXMrMik7Ci0JaWYgKHhmZXIgIT0gbmJ5dGVzKzIpIHsKKwl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgcmRhdGEsIHNpemVvZihyZGF0YSkpOworCWlmICh4ZmVyICE9IHNpemVvZihyZGF0YSkpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkiJXM6IHJlc3VsdD0lZCBhZGRyPSUwMngsIGRhdGE9JTAyeFxuIiwKIAkJCV9fZnVuY19fLApAQCAtMjgyLDcgKzI2NSw3IEBACiAKIAltZW1zZXQoJnRtLCAwLCBzaXplb2YodG0pKTsKIAotCWVyciA9IHgxMjA1X3NldF9kYXRldGltZShjbGllbnQsICZ0bSwgMSwgWDEyMDVfQ0NSX0JBU0UsIDApOworCWVyciA9IHgxMjA1X3NldF9kYXRldGltZShjbGllbnQsICZ0bSwgWDEyMDVfQ0NSX0JBU0UsIDApOwogCWlmIChlcnIgPCAwKQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInVuYWJsZSB0byByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG4iKTsKIApAQCAtNDgxLDcgKzQ2NCw3IEBACiBzdGF0aWMgaW50IHgxMjA1X3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKIHsKIAlyZXR1cm4geDEyMDVfc2V0X2RhdGV0aW1lKHRvX2kyY19jbGllbnQoZGV2KSwKLQkJJmFscm0tPnRpbWUsIDEsIFgxMjA1X0FMTTBfQkFTRSwgYWxybS0+ZW5hYmxlZCk7CisJCSZhbHJtLT50aW1lLCBYMTIwNV9BTE0wX0JBU0UsIGFscm0tPmVuYWJsZWQpOwogfQogCiBzdGF0aWMgaW50IHgxMjA1X3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtNDkzLDcgKzQ3Niw3IEBACiBzdGF0aWMgaW50IHgxMjA1X3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJcmV0dXJuIHgxMjA1X3NldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksCi0JCXRtLCAxLCBYMTIwNV9DQ1JfQkFTRSwgMCk7CisJCXRtLCBYMTIwNV9DQ1JfQkFTRSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgeDEyMDVfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCmluZGV4IGZkMTIzMTcuLjE0OGIxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFsaWFzdHJlZS5sb2NrLCBmbGFncyk7CiAJCW5ld2xjdSA9IF9hbGxvY2F0ZV9sY3UodWlkKTsKIAkJaWYgKElTX0VSUihuZXdsY3UpKQotCQkJcmV0dXJuIFBUUl9FUlIobGN1KTsKKwkJCXJldHVybiBQVFJfRVJSKG5ld2xjdSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbGlhc3RyZWUubG9jaywgZmxhZ3MpOwogCQlsY3UgPSBfZmluZF9sY3Uoc2VydmVyLCB1aWQpOwogCQlpZiAoIWxjdSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IGY2NGQwZGI4Li42ZTE0ODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqLwogCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkLWRpYWciCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNDYsMTYgKzE0NiwxNiBAQAogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgZGV2aWNlLT5ibG9jay0+YnBfYmxvY2ssIDAsIE5VTEwpOwogCWlmIChyYyA9PSA0KSB7CiAJCWlmICghKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpKSB7Ci0JCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCi0JCQkJICJUaGUgYWNjZXNzIG1vZGUgb2YgYSBESUFHIGRldmljZSBjaGFuZ2VkIgotCQkJCSAiIHRvIHJlYWQtb25seSIpOworCQkJcHJfd2FybmluZygiJXM6IFRoZSBhY2Nlc3MgbW9kZSBvZiBhIERJQUcgZGV2aWNlICIKKwkJCQkgICAiY2hhbmdlZCB0byByZWFkLW9ubHlcbiIsCisJCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlkZXZpY2UtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9SRUFET05MWTsKIAkJfQogCQlyYyA9IDA7CiAJfQogCWlmIChyYykKLQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiRElBRyBFUlAgZmFpbGVkIHdpdGggIgotCQkJICAgICJyYz0lZFxuIiwgcmMpOworCQlwcl93YXJuaW5nKCIlczogRElBRyBFUlAgZmFpbGVkIHdpdGggIgorCQkJICAgICJyYz0lZFxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwogfQogCiAvKiBTdGFydCBhIGdpdmVuIHJlcXVlc3QgYXQgdGhlIGRldmljZS4gUmV0dXJuIHplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8KQEAgLTM3MSw4ICszNzEsOSBAQAogCQlwcml2YXRlLT5wdF9ibG9jayA9IDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldmljZSB0eXBlICVkIGlzIG5vdCBzdXBwb3J0ZWQgIgotCQkJICAgICJpbiBESUFHIG1vZGVcbiIsIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOworCQlwcl93YXJuaW5nKCIlczogRGV2aWNlIHR5cGUgJWQgaXMgbm90IHN1cHBvcnRlZCAiCisJCQkgICAiaW4gRElBRyBtb2RlXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAorCQkJICAgcHJpdmF0ZS0+cmRjX2RhdGEudmRldl9jbGFzcyk7CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQxMyw4ICs0MTQsOCBAQAogCQlwcml2YXRlLT5pb2IuZmxhZ2EgPSBEQVNEX0RJQUdfRkxBR0FfREVGQVVMVDsKIAkJcmMgPSBkaWEyNTAoJnByaXZhdGUtPmlvYiwgUldfQklPKTsKIAkJaWYgKHJjID09IDMpIHsKLQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKLQkJCQkiQSA2NC1iaXQgRElBRyBjYWxsIGZhaWxlZFxuIik7CisJCQlwcl93YXJuaW5nKCIlczogQSA2NC1iaXQgRElBRyBjYWxsIGZhaWxlZFxuIiwKKwkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIG91dF9sYWJlbDsKIAkJfQpAQCAtNDIzLDggKzQyNCw5IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGJzaXplID4gUEFHRV9TSVpFKSB7Ci0JCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSIKLQkJCSAiIG9mIGFuIGluY29ycmVjdCBmb3JtYXQgKHJjPSVkKVxuIiwgcmMpOworCQlwcl93YXJuaW5nKCIlczogQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIG9mIGFuICIKKwkJCSAgICJpbmNvcnJlY3QgZm9ybWF0IChyYz0lZClcbiIsCisJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCByYyk7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXRfbGFiZWw7CiAJfQpAQCAtNDQyLDE4ICs0NDQsMTggQEAKIAkJYmxvY2stPnMyYl9zaGlmdCsrOwogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgYmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMgJiYgKHJjICE9IDQpKSB7Ci0JCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgaW5pdGlhbGl6YXRpb24gIgotCQkJImZhaWxlZCB3aXRoIHJjPSVkXG4iLCByYyk7CisJCXByX3dhcm5pbmcoIiVzOiBESUFHIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAorCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwogCQlyYyA9IC1FSU87CiAJfSBlbHNlIHsKIAkJaWYgKHJjID09IDQpCiAJCQlkZXZpY2UtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9SRUFET05MWTsKLQkJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAotCQkJICJOZXcgREFTRCB3aXRoICVsZCBieXRlL2Jsb2NrLCB0b3RhbCBzaXplICVsZCBLQiVzXG4iLAotCQkJICh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCi0JCQkgKHVuc2lnbmVkIGxvbmcpIChibG9jay0+YmxvY2tzIDw8Ci0JCQkJCSAgYmxvY2stPnMyYl9zaGlmdCkgPj4gMSwKLQkJCSAocmMgPT0gNCkgPyAiLCByZWFkLW9ubHkgZGV2aWNlIiA6ICIiKTsKKwkJcHJfaW5mbygiJXM6IE5ldyBEQVNEIHdpdGggJWxkIGJ5dGUvYmxvY2ssIHRvdGFsIHNpemUgJWxkICIKKwkJCSJLQiVzXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAorCQkJKHVuc2lnbmVkIGxvbmcpIGJsb2NrLT5icF9ibG9jaywKKwkJCSh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAorCQkJCQkgYmxvY2stPnMyYl9zaGlmdCkgPj4gMSwKKwkJCShyYyA9PSA0KSA/ICIsIHJlYWQtb25seSBkZXZpY2UiIDogIiIpOwogCQlyYyA9IDA7CiAJfQogb3V0X2xhYmVsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDVmMjNlY2EuLjYzMTVmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCiAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KQEAgLTI3MiwxMCArMjczLDEwIEBACiAJREJGX0VWRU5UKERCRl9ERUJVRywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJ1xuIiwgYnVmZmVyKTsKIAogCS8qIGNoZWNrIGZvciB2YWxpZCB2ZXJicyAqLwotCWZvciAoc3RyID0gYnVmZmVyOyBpc3NwYWNlKCpzdHIpOyBzdHIrKyk7CisJc3RyID0gc2tpcF9zcGFjZXMoYnVmZmVyKTsKIAlpZiAoc3RybmNtcChzdHIsICJzZXQiLCAzKSA9PSAwICYmIGlzc3BhY2Uoc3RyWzNdKSkgewogCQkvKiAnc2V0IHh4eCcgd2FzIGdpdmVuICovCi0JCWZvciAoc3RyID0gc3RyICsgNDsgaXNzcGFjZSgqc3RyKTsgc3RyKyspOworCQlzdHIgPSBza2lwX3NwYWNlcyhzdHIgKyA0KTsKIAkJaWYgKHN0cmNtcChzdHIsICJvbiIpID09IDApIHsKIAkJCS8qIHN3aXRjaCBvbiBzdGF0aXN0aWNzIHByb2ZpbGluZyAqLwogCQkJZGFzZF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX09OOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKaW5kZXggZjc2ZjRiZC4uOWI0M2FlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZGNzc2Jsa19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZGNzc2Jsa19wbV9vcHMgPSB7CiAJLmZyZWV6ZQkJPSBkY3NzYmxrX2ZyZWV6ZSwKIAkudGhhdwkJPSBkY3NzYmxrX3RoYXcsCiAJLnJlc3RvcmUJPSBkY3NzYmxrX3Jlc3RvcmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCmluZGV4IDExNmQxYjMuLjExOGRlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCkBAIC00MDcsNyArNDA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHhwcmFtX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB4cHJhbV9wbV9vcHMgPSB7CiAJLnJlc3RvcmUJPSB4cHJhbV9yZXN0b3JlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYwppbmRleCAyOGU0NjQ5Li4yNDdiMmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAJaWYgKElTX0VSUihpYikpIHsKIAkJcmF3MzI3MF9wdXRfdmlldygmZnAtPnZpZXcpOwogCQlyYXczMjcwX2RlbF92aWV3KCZmcC0+dmlldyk7Ci0JCXJjID0gUFRSX0VSUihmcCk7CisJCXJjID0gUFRSX0VSUihpYik7CiAJCWdvdG8gb3V0OwogCX0KIAlmcC0+cmRidWYgPSBpYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKaW5kZXggNjA0NzNmOC4uMzNlOTY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKQEAgLTUyOSw3ICs1MjksNyBAQAogCXJldHVybiBtb25yZWFkZXJfdGhhdyhkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgbW9ucmVhZGVyX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtb25yZWFkZXJfcG1fb3BzID0gewogCS5mcmVlemUgID0gbW9ucmVhZGVyX2ZyZWV6ZSwKIAkudGhhdwkgPSBtb25yZWFkZXJfdGhhdywKIAkucmVzdG9yZSA9IG1vbnJlYWRlcl9yZXN0b3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYwppbmRleCA2NTMyZWQ4Li42NjhhMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJcmV0dXJuIG1vbndyaXRlcl9yZXN0b3JlKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBtb253cml0ZXJfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1vbndyaXRlcl9wbV9vcHMgPSB7CiAJLmZyZWV6ZQkJPSBtb253cml0ZXJfZnJlZXplLAogCS50aGF3CQk9IG1vbndyaXRlcl90aGF3LAogCS5yZXN0b3JlCT0gbW9ud3JpdGVyX3Jlc3RvcmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMKaW5kZXggYTk4M2Y1MC4uZWM4OGM1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAlyZXR1cm4gc2NscF91bmRvX3N1c3BlbmQoU0NMUF9QTV9FVkVOVF9SRVNUT1JFKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNjbHBfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNjbHBfcG1fb3BzID0gewogCS5mcmVlemUJCT0gc2NscF9mcmVlemUsCiAJLnRoYXcJCT0gc2NscF90aGF3LAogCS5yZXN0b3JlCT0gc2NscF9yZXN0b3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKaW5kZXggMjhiNWFmYy4uYjNiZWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAl1MzIgZW50cmllc1swXTsKIH0gX19wYWNrZWQ7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzY2xwX21lbV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2NscF9tZW1fcG1fb3BzID0gewogCS5mcmVlemUJCT0gc2NscF9tZW1fZnJlZXplLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwppbmRleCAzNjU3ZmUxLi5jYjcwZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlXzM0eHgiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCmluZGV4IDBjNzJhYWQuLjk4MjFjNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCkBAIC05LDYgKzksNyBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGVfMzU5MCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzNiw3ICsxMzcsNyBAQAogCQlvdXQtPnR5cGVfb25fdGFwZSA9IFRBUEUzOTBfS0VLTF9UWVBFX0xBQkVMOwogCW1lbWNweShvdXQtPmxhYmVsLCBpbi0+bGFiZWwsIHNpemVvZihpbi0+bGFiZWwpKTsKIAlFQkNBU0Mob3V0LT5sYWJlbCwgc2l6ZW9mKGluLT5sYWJlbCkpOwotCXN0cnN0cmlwKG91dC0+bGFiZWwpOworCXN0cmltKG91dC0+bGFiZWwpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRfdG9fZXh0X2tla2xfcGFpcihzdHJ1Y3QgdGFwZTM1OTJfa2VrbF9wYWlyICppbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA0Nzk5Y2MyLi45NjgxNjE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYwppbmRleCAyM2Q3NzNhLi4yMTI1ZWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYwpAQCAtMTAsNiArMTAsOSBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCmluZGV4IGRkYzkxNGNjLi5iMjg2NGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCkBAIC03LDYgKzcsMTAgQEAKICAqIEF1dGhvcjogU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKiBCYXNlZCBvbiBzaW1wbGUgY2xhc3MgZGV2aWNlIGNvZGUgYnkgR3JlZyBLLUgKICAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSAidGFwZV9jbGFzcy5oIgogCiBNT0RVTEVfQVVUSE9SKCJTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggZjVkNjgwMi4uODFiMDk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTEyLDYgKzEyLDggQEAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkgICAgIC8vIGZvciBrZXJuZWwgcGFyYW1ldGVycwogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4JICAgICAvLyBmb3IgcmVxdWVzdGluZyBtb2R1bGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCmluZGV4IGViZDgyMGMuLjBjZWIzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCkBAIC0xMSw2ICsxMSw5IEBACiAgKiBQUk9DRlMgRnVuY3Rpb25zCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKaW5kZXggNzUwMzU0YS4uMDNmMDdlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCkBAIC0xMSw2ICsxMSw5IEBACiAgKgkJIFN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jCmluZGV4IDg5OWFhNzkuLjdkZmE1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYwpAQCAtNjc1LDcgKzY3NSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHZtbG9ncmRyX3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2bWxvZ3Jkcl9wbV9vcHMgPSB7CiAJLnByZXBhcmUgPSB2bWxvZ3Jkcl9wbV9wcmVwYXJlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCmluZGV4IGE1YTYyZjEuLjVmOTdlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCXJldHVybiBnZHJ2LT5yZXN0b3JlID8gZ2Rydi0+cmVzdG9yZShnZGV2KSA6IDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBjY3dncm91cF9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgY2N3Z3JvdXBfcG1fb3BzID0gewogCS5wcmVwYXJlID0gY2N3Z3JvdXBfcG1fcHJlcGFyZSwKIAkuY29tcGxldGUgPSBjY3dncm91cF9wbV9jb21wbGV0ZSwKIAkuZnJlZXplID0gY2N3Z3JvdXBfcG1fZnJlZXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKaW5kZXggOTUwOWUzOC4uN2EyOGEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCkBAIC00OSw3ICs0OSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNjd3JlcV9zdG9wKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgcmMpCiB7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGNjd19yZXF1ZXN0ICpyZXEgPSAmY2Rldi0+cHJpdmF0ZS0+cmVxOwogCiAJaWYgKHJlcS0+ZG9uZSkKQEAgLTU3LDcgKzU2LDYgQEAKIAlyZXEtPmRvbmUgPSAxOwogCWNjd19kZXZpY2Vfc2V0X3RpbWVvdXQoY2RldiwgMCk7CiAJbWVtc2V0KCZjZGV2LT5wcml2YXRlLT5pcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7Ci0Jc2NoLT5scG0gPSBzY2gtPnNjaGliLnBtY3cucGFtOwogCWlmIChyYyAmJiByYyAhPSAtRU5PREVWICYmIHJlcS0+ZHJjKQogCQlyYyA9IHJlcS0+ZHJjOwogCXJlcS0+Y2FsbGJhY2soY2RldiwgcmVxLT5kYXRhLCByYyk7CkBAIC04MCw3ICs3OCw2IEBACiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBQZXJmb3JtIHN0YXJ0IGZ1bmN0aW9uLiAqLwotCQlzY2gtPmxwbSA9IDB4ZmY7CiAJCW1lbXNldCgmY2Rldi0+cHJpdmF0ZS0+aXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpOwogCQlyYyA9IGNpb19zdGFydChzY2gsIGNwLCAodTgpIHJlcS0+bWFzayk7CiAJCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCA5MmZmODhhLi43Njc5YWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTExNDgsNyArMTE0OCw3IEBACiAJcmV0dXJuIGRydi0+cmVzdG9yZSA/IGRydi0+cmVzdG9yZShzY2gpIDogMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGNzc19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgY3NzX3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IGNzc19wbV9wcmVwYXJlLAogCS5jb21wbGV0ZSA9IGNzc19wbV9jb21wbGV0ZSwKIAkuZnJlZXplID0gY3NzX3BtX2ZyZWV6ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IDlmZWNmYjQuLmE2YzdkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMTUxOSw2ICsxNTE5LDcgQEAKIAlzY2gtPmRyaXZlciA9ICZpb19zdWJjaGFubmVsX2RyaXZlcjsKIAkvKiBJbml0aWFsaXplIHRoZSBjY3dfZGV2aWNlIHN0cnVjdHVyZS4gKi8KIAljZGV2LT5kZXYucGFyZW50PSAmc2NoLT5kZXY7CisJc2NoX3NldF9jZGV2KHNjaCwgY2Rldik7CiAJaW9fc3ViY2hhbm5lbF9yZWNvZyhjZGV2LCBzY2gpOwogCS8qIE5vdyB3YWl0IGZvciB0aGUgYXN5bmMuIHJlY29nbml0aW9uIHRvIGNvbWUgdG8gYW4gZW5kLiAqLwogCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CkBAIC0xOTA0LDcgKzE5MDUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBjY3dfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGNjd19wbV9vcHMgPSB7CiAJLnByZXBhcmUgPSBjY3dfZGV2aWNlX3BtX3ByZXBhcmUsCiAJLmNvbXBsZXRlID0gY2N3X2RldmljZV9wbV9jb21wbGV0ZSwKIAkuZnJlZXplID0gY2N3X2RldmljZV9wbV9mcmVlemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKaW5kZXggYWFkMTg4ZS4uNmZhY2I1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJdTggZm47CiAKIAkvKiBVc2UgbmV4dCBhdmFpbGFibGUgcGF0aCB0aGF0IGlzIG5vdCBhbHJlYWR5IGluIGNvcnJlY3Qgc3RhdGUuICovCi0JcmVxLT5scG0gPSBscG1fYWRqdXN0KHJlcS0+bHBtLCBzY2gtPnNjaGliLnBtY3cucGFtICYgfnNjaC0+dnBtKTsKKwlyZXEtPmxwbSA9IGxwbV9hZGp1c3QocmVxLT5scG0sIGNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrKTsKIAlpZiAoIXJlcS0+bHBtKQogCQlnb3RvIG91dF9ub3BhdGg7CiAJLyogQ2hhbm5lbCBwcm9ncmFtIHNldHVwLiAqLwpAQCAtMjU0LDE1ICsyNTQsMTUgQEAKIAkqcCA9IGZpcnN0OwogfQogCi1zdGF0aWMgdTggcGdpZF90b192cG0oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCitzdGF0aWMgdTggcGdpZF90b19kb25lcG0oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHBnaWQgKnBnaWQ7CiAJaW50IGk7CiAJaW50IGxwbTsKLQl1OCB2cG0gPSAwOworCXU4IGRvbmVwbSA9IDA7CiAKLQkvKiBTZXQgVlBNIGJpdHMgZm9yIHBhdGhzIHdoaWNoIGFyZSBhbHJlYWR5IGluIHRoZSB0YXJnZXQgc3RhdGUuICovCisJLyogU2V0IGJpdHMgZm9yIHBhdGhzIHdoaWNoIGFyZSBhbHJlYWR5IGluIHRoZSB0YXJnZXQgc3RhdGUuICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlscG0gPSAweDgwID4+IGk7CiAJCWlmICgoY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrICYgbHBtKSA9PSAwKQpAQCAtMjgyLDEwICsyODIsMTAgQEAKIAkJCWlmIChwZ2lkLT5pbmYucHMuc3RhdGUzICE9IFNOSURfU1RBVEUzX1NJTkdMRV9QQVRIKQogCQkJCWNvbnRpbnVlOwogCQl9Ci0JCXZwbSB8PSBscG07CisJCWRvbmVwbSB8PSBscG07CiAJfQogCi0JcmV0dXJuIHZwbTsKKwlyZXR1cm4gZG9uZXBtOwogfQogCiBzdGF0aWMgdm9pZCBwZ2lkX2ZpbGwoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHN0cnVjdCBwZ2lkICpwZ2lkKQpAQCAtMzA3LDYgKzMwNyw3IEBACiAJaW50IG1pc21hdGNoID0gMDsKIAlpbnQgcmVzZXJ2ZWQgPSAwOwogCWludCByZXNldCA9IDA7CisJdTggZG9uZXBtOwogCiAJaWYgKHJjKQogCQlnb3RvIG91dDsKQEAgLTMxNiwxOCArMzE3LDIwIEBACiAJZWxzZSBpZiAobWlzbWF0Y2gpCiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJZWxzZSB7Ci0JCXNjaC0+dnBtID0gcGdpZF90b192cG0oY2Rldik7CisJCWRvbmVwbSA9IHBnaWRfdG9fZG9uZXBtKGNkZXYpOworCQlzY2gtPnZwbSA9IGRvbmVwbSAmIHNjaC0+b3BtOworCQljZGV2LT5wcml2YXRlLT5wZ2lkX3RvZG9fbWFzayAmPSB+ZG9uZXBtOwogCQlwZ2lkX2ZpbGwoY2RldiwgcGdpZCk7CiAJfQogb3V0OgogCUNJT19NU0dfRVZFTlQoMiwgInNuaWQ6IGRldmljZSAwLiV4LiUwNHg6IHJjPSVkIHB2bT0lMDJ4IHZwbT0lMDJ4ICIKLQkJICAgICAgIm1pc209JWQgcnN2ZD0lZCByZXNldD0lZFxuIiwgaWQtPnNzaWQsIGlkLT5kZXZubywgcmMsCi0JCSAgICAgIGNkZXYtPnByaXZhdGUtPnBnaWRfdmFsaWRfbWFzaywgc2NoLT52cG0sIG1pc21hdGNoLAotCQkgICAgICByZXNlcnZlZCwgcmVzZXQpOworCQkgICAgICAidG9kbz0lMDJ4IG1pc209JWQgcnN2ZD0lZCByZXNldD0lZFxuIiwgaWQtPnNzaWQsCisJCSAgICAgIGlkLT5kZXZubywgcmMsIGNkZXYtPnByaXZhdGUtPnBnaWRfdmFsaWRfbWFzaywgc2NoLT52cG0sCisJCSAgICAgIGNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrLCBtaXNtYXRjaCwgcmVzZXJ2ZWQsIHJlc2V0KTsKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgogCQkvKiBBbnl0aGluZyBsZWZ0IHRvIGRvPyAqLwotCQlpZiAoc2NoLT52cG0gPT0gc2NoLT5zY2hpYi5wbWN3LnBhbSkgeworCQlpZiAoY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2sgPT0gMCkgewogCQkJdmVyaWZ5X2RvbmUoY2Rldiwgc2NoLT52cG0gPT0gMCA/IC1FQUNDRVMgOiAwKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDExLDYgKzQxNCw3IEBACiAJc3RydWN0IGNjd19kZXZfaWQgKmRldmlkID0gJmNkZXYtPnByaXZhdGUtPmRldl9pZDsKIAogCXNjaC0+dnBtID0gMDsKKwlzY2gtPmxwbSA9IHNjaC0+c2NoaWIucG1jdy5wYW07CiAJLyogSW5pdGlhbGl6ZSByZXF1ZXN0IGRhdGEuICovCiAJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPnRpbWVvdXQJPSBQR0lEX1RJTUVPVVQ7CkBAIC00NDIsMTEgKzQ0NiwxNCBAQAogICovCiB2b2lkIGNjd19kZXZpY2VfdmVyaWZ5X3N0YXJ0KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogeworCXN0cnVjdCBzdWJjaGFubmVsICpzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOworCiAJQ0lPX1RSQUNFX0VWRU5UKDQsICJ2cmZ5Iik7CiAJQ0lPX0hFWF9FVkVOVCg0LCAmY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLCBzaXplb2YoY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkKSk7CiAJLyogSW5pdGlhbGl6ZSBQR0lEIGRhdGEuICovCiAJbWVtc2V0KGNkZXYtPnByaXZhdGUtPnBnaWQsIDAsIHNpemVvZihjZGV2LT5wcml2YXRlLT5wZ2lkKSk7CiAJY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrID0gMDsKKwljZGV2LT5wcml2YXRlLT5wZ2lkX3RvZG9fbWFzayA9IHNjaC0+c2NoaWIucG1jdy5wYW07CiAJLyoKIAkgKiBJbml0aWFsaXplIHBhdGhncm91cCBhbmQgbXVsdGlwYXRoIHN0YXRlIHdpdGggdGFyZ2V0IHZhbHVlcy4KIAkgKiBUaGV5IG1heSBjaGFuZ2UgaW4gdGhlIGNvdXJzZSBvZiBwYXRoIHZlcmlmaWNhdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZmN4LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2ZjeC5jCmluZGV4IDYxNjc3ZGYuLmNhNWU5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZmN4LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9mY3guYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJLyogQWRkIHRjYXQgdG8gdGNjYi4gKi8KIAl0Y2NiID0gdGN3X2dldF90Y2NiKHRjdyk7CiAJdGNhdCA9IChzdHJ1Y3QgdGNjYl90Y2F0ICopICZ0Y2NiLT50Y2FbdGNhX3NpemUodGNjYildOwotCW1lbXNldCh0Y2F0LCAwLCBzaXplb2YodGNhdCkpOworCW1lbXNldCh0Y2F0LCAwLCBzaXplb2YoKnRjYXQpKTsKIAkvKiBDYWxjdWxhdGUgdGN3IGlucHV0L291dHB1dCBjb3VudCBhbmQgdGNhdCB0cmFuc3BvcnQgY291bnQuICovCiAJY291bnQgPSBjYWxjX2Rjd19jb3VudCh0Y2NiKTsKIAlpZiAodGN3LT53ICYmICh0Y3ctPmZsYWdzICYgVENXX0ZMQUdTX09VVFBVVF9USURBKSkKQEAgLTI2OSw3ICsyNjksNyBAQAogICovCiB2b2lkIHRzYl9pbml0KHN0cnVjdCB0c2IgKnRzYikKIHsKLQltZW1zZXQodHNiLCAwLCBzaXplb2YodHNiKSk7CisJbWVtc2V0KHRzYiwgMCwgc2l6ZW9mKCp0c2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wodHNiX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2lvX3NjaC5oIGIvZHJpdmVycy9zMzkwL2Npby9pb19zY2guaAppbmRleCBkNzJhZTRjLi5iOWNlNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2lvX3NjaC5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogCXN0cnVjdCBjY3dfcmVxdWVzdCByZXE7CQkvKiBpbnRlcm5hbCBJL08gcmVxdWVzdCAqLwogCWludCBpcmV0cnk7CiAJdTggcGdpZF92YWxpZF9tYXNrOwkJLyogbWFzayBvZiB2YWxpZCBQR0lEcyAqLworCXU4IHBnaWRfdG9kb19tYXNrOwkJLyogbWFzayBvZiBQR0lEcyB0byBiZSBhZGp1c3RlZCAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGludCBmYXN0OjE7CS8qIHBvc3Qgd2l0aCAiY2hhbm5lbCBlbmQiICovCiAJCXVuc2lnbmVkIGludCByZXBhbGw6MTsJLyogcmVwb3J0IGV2ZXJ5IGludGVycnVwdCBzdGF0dXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDRiZTZlODQuLmIyMjc1YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNDg2LDcgKzQ4Niw4IEBACiAJY2FzZSBTTFNCX1BfSU5QVVRfUFJJTUVEOgogCQlpbmJvdW5kX3ByaW1lZChxLCBjb3VudCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwotCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOworCQlpZiAoYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKSA9PSAwKQorCQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfcXVldWVfZnVsbCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX0lOUFVUX0VSUk9SOgogCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKaW5kZXggOTY4ZTNjNy4uNTRmN2MzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCkBAIC02NCw2ICs2NCw4IEBACiAJCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMuZmFzdF9yZXF1ZXVlKSk7CiAJc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIG91dGJvdW5kIHRhcmdldCBmdWxsIGNvbmRpdGlvblx0OiAlbGlcbiIsCiAJCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMub3V0Ym91bmRfdGFyZ2V0X2Z1bGwpKTsKKwlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgaW5ib3VuZCBxdWV1ZSBmdWxsIGNvbmRpdGlvblx0XHQ6ICVsaVxuIiwKKwkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5pbmJvdW5kX3F1ZXVlX2Z1bGwpKTsKIAlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2Ygb3V0Ym91bmQgdGFza2xldCBtb2RfdGltZXIgY2FsbHNcdDogJWxpXG4iLAogCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmRlYnVnX3RsX291dF90aW1lcikpOwogCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBzdG9wIHBvbGxpbmcgY2FsbHNcdFx0XHQ6ICVsaVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5oCmluZGV4IGZmNDUwNGMuLjEyNDU0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaApAQCAtMzYsNiArMzYsNyBAQAogCWF0b21pY19sb25nX3Qgb3V0Ym91bmRfaGFuZGxlcjsKIAlhdG9taWNfbG9uZ190IGZhc3RfcmVxdWV1ZTsKIAlhdG9taWNfbG9uZ190IG91dGJvdW5kX3RhcmdldF9mdWxsOworCWF0b21pY19sb25nX3QgaW5ib3VuZF9xdWV1ZV9mdWxsOwogCiAJLyogZm9yIGRlYnVnZ2luZyAqLwogCWF0b21pY19sb25nX3QgZGVidWdfdGxfb3V0X3RpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwppbmRleCAxOGQ1NGZjLi44YzJkZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYwpAQCAtNDgsNyArNDgsNiBAQAogCWlmICghaXJxX3B0cikKIAkJcmV0dXJuOwogCi0JV0FSTl9PTigodW5zaWduZWQgbG9uZykmaXJxX3B0ci0+cWliICYgMHhmZik7CiAJaXJxX3B0ci0+cWliLnBmbXQgPSBxaWJfcGFyYW1fZmllbGRfZm9ybWF0OwogCWlmIChxaWJfcGFyYW1fZmllbGQpCiAJCW1lbWNweShpcnFfcHRyLT5xaWIucGFybSwgcWliX3BhcmFtX2ZpZWxkLApAQCAtODIsMTQgKzgxLDEyIEBACiAJCXEgPSBrbWVtX2NhY2hlX2FsbG9jKHFkaW9fcV9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKXEgJiAweGZmKTsKIAogCQlxLT5zbGliID0gKHN0cnVjdCBzbGliICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKCFxLT5zbGliKSB7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocWRpb19xX2NhY2hlLCBxKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpcS0+c2xpYiAmIDB4N2ZmKTsKIAkJaXJxX3B0cl9xc1tpXSA9IHE7CiAJfQogCXJldHVybiAwOwpAQCAtMTMxLDcgKzEyOCw3IEBACiAJLyogZmlsbCBpbiBzYmFsICovCiAJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGorKykgewogCQlxLT5zYmFsW2pdID0gKnNiYWxzX2FycmF5Kys7Ci0JCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpcS0+c2JhbFtqXSAmIDB4ZmYpOworCQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcS0+c2JhbFtqXSAmIDB4ZmYpOwogCX0KIAogCS8qIGZpbGwgaW4gc2xpYiAqLwpAQCAtMTQ3LDExICsxNDQsNiBAQAogCS8qIGZpbGwgaW4gc2wgKi8KIAlmb3IgKGogPSAwOyBqIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgaisrKQogCQlxLT5zbC0+ZWxlbWVudFtqXS5zYmFsID0gKHVuc2lnbmVkIGxvbmcpcS0+c2JhbFtqXTsKLQotCURCRl9FVkVOVCgic2wtc2xzYi1zYmFsIik7Ci0JREJGX0hFWChxLT5zbCwgc2l6ZW9mKHZvaWQgKikpOwotCURCRl9IRVgoJnEtPnNsc2IsIHNpemVvZih2b2lkICopKTsKLQlEQkZfSEVYKHEtPnNiYWwsIHNpemVvZih2b2lkICopKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfcXVldWVzKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKaW5kZXggMzk1YzA0Yy4uNjVlYmVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKQEAgLTExMywxMSArMTEzLDkgQEAKICNkZWZpbmUgSVVDVl9EQkZfVEVYVF8obmFtZSwgbGV2ZWwsIHRleHQuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKGl1Y3ZfZGJmX3Bhc3NlcyhpdWN2X2RiZl8jI25hbWUsIGxldmVsKSkgeyBcCi0JCQljaGFyKiBpdWN2X2RiZl90eHRfYnVmID0gXAotCQkJCQlnZXRfY3B1X3ZhcihpdWN2X2RiZl90eHRfYnVmKTsgXAotCQkJc3ByaW50ZihpdWN2X2RiZl90eHRfYnVmLCB0ZXh0KTsgXAotCQkJZGVidWdfdGV4dF9ldmVudChpdWN2X2RiZl8jI25hbWUsIGxldmVsLCBcCi0JCQkJCQlpdWN2X2RiZl90eHRfYnVmKTsgXAorCQkJY2hhciogX19idWYgPSBnZXRfY3B1X3ZhcihpdWN2X2RiZl90eHRfYnVmKTsgXAorCQkJc3ByaW50ZihfX2J1ZiwgdGV4dCk7IFwKKwkJCWRlYnVnX3RleHRfZXZlbnQoaXVjdl9kYmZfIyNuYW1lLCBsZXZlbCwgX19idWYpOyBcCiAJCQlwdXRfY3B1X3ZhcihpdWN2X2RiZl90eHRfYnVmKTsgXAogCQl9IFwKIAl9IHdoaWxlICgwKQpAQCAtMTYxLDcgKzE1OSw3IEBACiBzdGF0aWMgaW50IG5ldGl1Y3ZfcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKik7CiBzdGF0aWMgaW50IG5ldGl1Y3ZfcG1fcmVzdG9yZV90aGF3KHN0cnVjdCBkZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBuZXRpdWN2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBuZXRpdWN2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IG5ldGl1Y3ZfcG1fcHJlcGFyZSwKIAkuY29tcGxldGUgPSBuZXRpdWN2X3BtX2NvbXBsZXRlLAogCS5mcmVlemUgPSBuZXRpdWN2X3BtX2ZyZWV6ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCmluZGV4IDBiNzYzMzkuLjAzODI5OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwpAQCAtNDg2LDIyICs0ODYsMTQgQEAKIAkJY2FzZSBJUEFfUkNfTDJfRFVQX01BQzoKIAkJY2FzZSBJUEFfUkNfTDJfRFVQX0xBWUVSM19NQUM6CiAJCQlkZXZfd2FybigmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJCSJNQUMgYWRkcmVzcyAiCi0JCQkJIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4ICIKLQkJCQkiYWxyZWFkeSBleGlzdHNcbiIsCi0JCQkJY2FyZC0+ZGV2LT5kZXZfYWRkclswXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclsxXSwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyWzJdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzNdLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbNF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbNV0pOworCQkJCSJNQUMgYWRkcmVzcyAlcE0gYWxyZWFkeSBleGlzdHNcbiIsCisJCQkJY2FyZC0+ZGV2LT5kZXZfYWRkcik7CiAJCQlicmVhazsKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICIKLQkJCQkiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnggIgotCQkJCSJpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyWzBdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzFdLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbMl0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbM10sCi0JCQkJY2FyZC0+ZGV2LT5kZXZfYWRkcls0XSwgY2FyZC0+ZGV2LT5kZXZfYWRkcls1XSk7CisJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKKwkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC01MTIsMTIgKzUwNCw4IEBACiAJCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLCBjbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYywKIAkJICAgICAgIE9TQV9BRERSX0xFTik7CiAJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnggIgotCQkJInN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIG9uIGRldmljZSAlc1xuIiwKLQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbMF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbMV0sCi0JCQljYXJkLT5kZXYtPmRldl9hZGRyWzJdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzNdLAotCQkJY2FyZC0+ZGV2LT5kZXZfYWRkcls0XSwgY2FyZC0+ZGV2LT5kZXZfYWRkcls1XSwKLQkJCWNhcmQtPmRldi0+bmFtZSk7CisJCQkiTUFDIGFkZHJlc3MgJXBNIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIG9uIGRldmljZSAlc1xuIiwKKwkJCWNhcmQtPmRldi0+ZGV2X2FkZHIsIGNhcmQtPmRldi0+bmFtZSk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDMwMTIzNTUuLjY3ZjI0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc21zZ19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc21zZ19wbV9vcHMgPSB7CiAJLmZyZWV6ZSA9IHNtc2dfcG1fZnJlZXplLAogCS50aGF3ID0gc21zZ19wbV9yZXN0b3JlX3RoYXcsCiAJLnJlc3RvcmUgPSBzbXNnX3BtX3Jlc3RvcmVfdGhhdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IDNiZjc1OTIuLjg0ZDNiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICBGaXggYnVnIGluIHR3YV9nZXRfcGFyYW0oKSBvbiA0R0IrLgogICAgICAgICAgICAgICAgICBVc2UgcGNpX3Jlc291cmNlX2xlbigpIGZvciBpb3JlbWFwKCkuCiAgICAyLjI2LjAyLjAxMiAtIEFkZCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCisgICAyLjI2LjAyLjAxMyAtIEZpeCBidWcgaW4gdHdhX2xvYWRfc2dsKCkuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMDAsNyArMTAxLDcgQEAKICNpbmNsdWRlICIzdy05eHh4LmgiCiAKIC8qIEdsb2JhbHMgKi8KLSNkZWZpbmUgVFdfRFJJVkVSX1ZFUlNJT04gIjIuMjYuMDIuMDEyIgorI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMTMiCiBzdGF0aWMgVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdhX2RldmljZV9leHRlbnNpb25fbGlzdFtUV19NQVhfU0xPVF07CiBzdGF0aWMgdW5zaWduZWQgaW50IHR3YV9kZXZpY2VfZXh0ZW5zaW9uX2NvdW50Owogc3RhdGljIGludCB0d2FfbWFqb3IgPSAtMTsKQEAgLTEzODIsMTAgKzEzODMsMTIgQEAKIAkJbmV3Y29tbWFuZCA9ICZmdWxsX2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm5ld2NvbW1hbmQ7CiAJCW5ld2NvbW1hbmQtPnJlcXVlc3RfaWRfX2x1bmwgPQogCQkJY3B1X3RvX2xlMTYoVFdfUkVRX0xVTl9JTihUV19MVU5fT1VUKG5ld2NvbW1hbmQtPnJlcXVlc3RfaWRfX2x1bmwpLCByZXF1ZXN0X2lkKSk7Ci0JCW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woZG1hX2hhbmRsZSArIHNpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDEpOwotCQluZXdjb21tYW5kLT5zZ19saXN0WzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCk7CisJCWlmIChsZW5ndGgpIHsKKwkJCW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woZG1hX2hhbmRsZSArIHNpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDEpOworCQkJbmV3Y29tbWFuZC0+c2dfbGlzdFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCQl9CiAJCW5ld2NvbW1hbmQtPnNnbF9lbnRyaWVzX19sdW5oID0KLQkJCWNwdV90b19sZTE2KFRXX1JFUV9MVU5fSU4oVFdfTFVOX09VVChuZXdjb21tYW5kLT5zZ2xfZW50cmllc19fbHVuaCksIDEpKTsKKwkJCWNwdV90b19sZTE2KFRXX1JFUV9MVU5fSU4oVFdfTFVOX09VVChuZXdjb21tYW5kLT5zZ2xfZW50cmllc19fbHVuaCksIGxlbmd0aCA/IDEgOiAwKSk7CiAJfSBlbHNlIHsKIAkJb2xkY29tbWFuZCA9ICZmdWxsX2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm9sZGNvbW1hbmQ7CiAJCW9sZGNvbW1hbmQtPnJlcXVlc3RfaWQgPSByZXF1ZXN0X2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCAzNjkwMGM3Li45MTkxZDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMzg4LDYgKzM4OCwxNiBAQAogCSAgUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YKIAkgIDxmaWxlOmRyaXZlcnMvc2NzaS8zdy14eHh4LmM+LgogCitjb25maWcgU0NTSV9IUFNBCisJdHJpc3RhdGUgIkhQIFNtYXJ0IEFycmF5IFNDU0kgZHJpdmVyIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBIUCBTbWFydCBBcnJheSBDb250cm9sbGVycyAoY2lyY2EgMjAwOSkuCisJICBJdCBpcyBhIFNDU0kgYWx0ZXJuYXRpdmUgdG8gdGhlIGNjaXNzIGRyaXZlciwgd2hpY2ggaXMgYSBibG9jaworCSAgZHJpdmVyLiAgQW55b25lIHdpc2hpbmcgdG8gdXNlIEhQIFNtYXJ0IEFycmF5IGNvbnRyb2xsZXJzIHdobworCSAgd291bGQgcHJlZmVyIHRoZSBkZXZpY2VzIGJlIHByZXNlbnRlZCB0byBsaW51eCBhcyBTQ1NJIGRldmljZXMsCisJICByYXRoZXIgdGhhbiBhcyBnZW5lcmljIGJsb2NrIGRldmljZXMgc2hvdWxkIHNheSBZIGhlcmUuCisKIGNvbmZpZyBTQ1NJXzNXXzlYWFgKIAl0cmlzdGF0ZSAiM3dhcmUgOXh4eCBTQVRBLVJBSUQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggMjgwZDNjNjU3Li45MmE4YzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC05MSw2ICs5MSw3IEBACiBvYmotJChDT05GSUdfU0NTSV9QQVMxNikJKz0gcGFzMTYubwogb2JqLSQoQ09ORklHX1NDU0lfVDEyOCkJCSs9IHQxMjgubwogb2JqLSQoQ09ORklHX1NDU0lfRE1YMzE5MUQpCSs9IGRteDMxOTFkLm8KK29iai0kKENPTkZJR19TQ1NJX0hQU0EpCQkrPSBocHNhLm8KIG9iai0kKENPTkZJR19TQ1NJX0RUQzMyODApCSs9IGR0Yy5vCiBvYmotJChDT05GSUdfU0NTSV9TWU01M0M4WFhfMikJKz0gc3ltNTNjOHh4XzIvCiBvYmotJChDT05GSUdfU0NTSV9aQUxPTikJKz0gemFsb243eHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKaW5kZXggNjk4YTUyNy4uZjAwODcwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCkBAIC0xMzUsMTEgKzEzNSwxNSBAQAogCXdoaWxlICgoY29tcGwgPSBiZV9tY2NfY29tcGxfZ2V0KHBoYmEpKSkgewogCQlpZiAoY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0FTWU5DX01BU0spIHsKIAkJCS8qIEludGVycHJldCBmbGFncyBhcyBhbiBhc3luYyB0cmFpbGVyICovCi0JCQlCVUdfT04oIWlzX2xpbmtfc3RhdGVfZXZ0KGNvbXBsLT5mbGFncykpOworCQkJaWYgKGlzX2xpbmtfc3RhdGVfZXZ0KGNvbXBsLT5mbGFncykpCisJCQkJLyogSW50ZXJwcmV0IGNvbXBsIGFzIGEgYXN5bmMgbGluayBldnQgKi8KKwkJCQliZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhwaGJhLAorCQkJCSAgIChzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqKSBjb21wbCk7CisJCQllbHNlCisJCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJCQkgIiBVbnN1cHBvcnRlZCBBc3luYyBFdmVudCwgZmxhZ3MiCisJCQkJCSAiID0gMHglMDh4IFxuIiwgY29tcGwtPmZsYWdzKTsKIAotCQkJLyogSW50ZXJwcmV0IGNvbXBsIGFzIGEgYXN5bmMgbGluayBldnQgKi8KLQkJCWJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHBoYmEsCi0JCQkJKHN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICopIGNvbXBsKTsKIAkJfSBlbHNlIGlmIChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0spIHsKIAkJCQlzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhjdHJsLCBjb21wbCk7CiAJCQkJYXRvbWljX2RlYygmcGhiYS0+Y3RybC5tY2Nfb2JqLnEudXNlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaCBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCmluZGV4IDJiOTczZjMuLjZjZjlkYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCkBAIC02ODQsNiArNjg0LDcgQEAKIGV4dGVybiB1NjQgaXNjc2lfZXJyb3JfbWFzazsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZW5fdGNwX2RhY2s7CiBleHRlcm4gdW5zaWduZWQgaW50IGV2ZW50X2NvYWxfZGl2OworZXh0ZXJuIHVuc2lnbmVkIGludCBldmVudF9jb2FsX21pbjsKIAogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYm54Mmlfc2NzaV94cG9ydF90ZW1wbGF0ZTsKIGV4dGVybiBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGJueDJpX2lzY3NpX3RyYW5zcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwppbmRleCA1YzhkNzYzLi4xYWY1NzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCkBAIC0xMzMsMjAgKzEzMywzOCBAQAogewogCXN0cnVjdCBibngyaV81NzcxeF9jcV9kYiAqY3FfZGI7CiAJdTE2IGNxX2luZGV4OworCXUxNiBuZXh0X2luZGV4OworCXUzMiBudW1fYWN0aXZlX2NtZHM7CiAKKworCS8qIENvYWxlc2NlIENRIGVudHJpZXMgb25seSBvbiAxMEcgZGV2aWNlcyAqLwogCWlmICghdGVzdF9iaXQoQk5YMklfTlgyX0RFVl81NzcxMCwgJmVwLT5oYmEtPmNuaWNfZGV2X3R5cGUpKQogCQlyZXR1cm47CiAKKwkvKiBEbyBub3QgdXBkYXRlIENRIERCIG11bHRpcGxlIHRpbWVzIGJlZm9yZSBmaXJtd2FyZSB3cml0ZXMKKwkgKiAnMHhGRkZGJyB0byBDUURCLT5TUU4gZmllbGQuIERldmlhdGlvbiBtYXkgY2F1c2Ugc3B1cmlvdXMKKwkgKiBpbnRlcnJ1cHRzIGFuZCBvdGhlciB1bndhbnRlZCByZXN1bHRzCisJICovCisJY3FfZGIgPSAoc3RydWN0IGJueDJpXzU3NzF4X2NxX2RiICopIGVwLT5xcC5jcV9wZ3RibF92aXJ0OworCWlmIChjcV9kYi0+c3FuWzBdICYmIGNxX2RiLT5zcW5bMF0gIT0gMHhGRkZGKQorCQlyZXR1cm47CisKIAlpZiAoYWN0aW9uID09IENOSUNfQVJNX0NRRSkgewotCQljcV9pbmRleCA9IGVwLT5xcC5jcWVfZXhwX3NlcV9zbiArCi0JCQkgICBlcC0+bnVtX2FjdGl2ZV9jbWRzIC8gZXZlbnRfY29hbF9kaXY7Ci0JCWNxX2luZGV4ICU9IChlcC0+cXAuY3FlX3NpemUgKiAyICsgMSk7Ci0JCWlmICghY3FfaW5kZXgpIHsKKwkJbnVtX2FjdGl2ZV9jbWRzID0gZXAtPm51bV9hY3RpdmVfY21kczsKKwkJaWYgKG51bV9hY3RpdmVfY21kcyA8PSBldmVudF9jb2FsX21pbikKKwkJCW5leHRfaW5kZXggPSAxOworCQllbHNlCisJCQluZXh0X2luZGV4ID0gZXZlbnRfY29hbF9taW4gKworCQkJCShudW1fYWN0aXZlX2NtZHMgLSBldmVudF9jb2FsX21pbikgLyBldmVudF9jb2FsX2RpdjsKKwkJaWYgKCFuZXh0X2luZGV4KQorCQkJbmV4dF9pbmRleCA9IDE7CisJCWNxX2luZGV4ID0gZXAtPnFwLmNxZV9leHBfc2VxX3NuICsgbmV4dF9pbmRleCAtIDE7CisJCWlmIChjcV9pbmRleCA+IGVwLT5xcC5jcWVfc2l6ZSAqIDIpCisJCQljcV9pbmRleCAtPSBlcC0+cXAuY3FlX3NpemUgKiAyOworCQlpZiAoIWNxX2luZGV4KQogCQkJY3FfaW5kZXggPSAxOwotCQkJY3FfZGIgPSAoc3RydWN0IGJueDJpXzU3NzF4X2NxX2RiICopCi0JCQkJCWVwLT5xcC5jcV9wZ3RibF92aXJ0OwotCQkJY3FfZGItPnNxblswXSA9IGNxX2luZGV4OwotCQl9CisKKwkJY3FfZGItPnNxblswXSA9IGNxX2luZGV4OwogCX0KIH0KIApAQCAtMzY2LDYgKzM4NCw3IEBACiAJc3RydWN0IGJueDJpX2NtZCAqYm54MmlfY21kOwogCXN0cnVjdCBibngyaV90bWZfcmVxdWVzdCAqdG1mYWJvcnRfd3FlOwogCXUzMiBkd29yZDsKKwl1MzIgc2NzaV9sdW5bMl07CiAKIAlibngyaV9jbWQgPSAoc3RydWN0IGJueDJpX2NtZCAqKW10YXNrLT5kZF9kYXRhOwogCXRtZmFib3J0X2hkciA9IChzdHJ1Y3QgaXNjc2lfdG0gKiltdGFzay0+aGRyOwpAQCAtMzc2LDI3ICszOTUsMzUgQEAKIAl0bWZhYm9ydF93cWUtPm9wX2F0dHIgPSAwOwogCXRtZmFib3J0X3dxZS0+b3BfYXR0ciA9CiAJCUlTQ1NJX1RNRl9SRVFVRVNUX0FMV0FZU19PTkUgfCBJU0NTSV9UTV9GVU5DX0FCT1JUX1RBU0s7Ci0JdG1mYWJvcnRfd3FlLT5sdW5bMF0gPSBiZTMyX3RvX2NwdSh0bWZhYm9ydF9oZHItPmx1blswXSk7Ci0JdG1mYWJvcnRfd3FlLT5sdW5bMV0gPSBiZTMyX3RvX2NwdSh0bWZhYm9ydF9oZHItPmx1blsxXSk7CiAKIAl0bWZhYm9ydF93cWUtPml0dCA9IChtdGFzay0+aXR0IHwgKElTQ1NJX1RBU0tfVFlQRV9NUEFUSCA8PCAxNCkpOwogCXRtZmFib3J0X3dxZS0+cmVzZXJ2ZWQyID0gMDsKIAl0bWZhYm9ydF93cWUtPmNtZF9zbiA9IGJlMzJfdG9fY3B1KHRtZmFib3J0X2hkci0+Y21kc24pOwogCiAJY3Rhc2sgPSBpc2NzaV9pdHRfdG9fdGFzayhjb25uLCB0bWZhYm9ydF9oZHItPnJ0dCk7Ci0JaWYgKCFjdGFzayB8fCBjdGFzay0+c2MpCisJaWYgKCFjdGFzayB8fCAhY3Rhc2stPnNjKQogCQkvKgogCQkgKiB0aGUgaXNjc2kgbGF5ZXIgbXVzdCBoYXZlIGNvbXBsZXRlZCB0aGUgY21kIHdoaWxlIHRoaXMKIAkJICogd2FzIHN0YXJ0aW5nIHVwLgorCQkgKgorCQkgKiBOb3RlOiBJbiB0aGUgY2FzZSBvZiBhIFNDU0kgY21kIHRpbWVvdXQsIHRoZSB0YXNrJ3Mgc2MKKwkJICogICAgICAgaXMgc3RpbGwgYWN0aXZlOyBoZW5jZSBjdGFzay0+c2MgIT0gMAorCQkgKiAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSB0YXNrIG11c3QgYmUgYWJvcnRlZAogCQkgKi8KIAkJcmV0dXJuIDA7CisKIAlyZWZfc2MgPSBjdGFzay0+c2M7CiAKKwkvKiBSZXRyaWV2ZSBMVU4gZGlyZWN0bHkgZnJvbSB0aGUgcmVmX3NjICovCisJaW50X3RvX3Njc2lsdW4ocmVmX3NjLT5kZXZpY2UtPmx1biwgKHN0cnVjdCBzY3NpX2x1biAqKSBzY3NpX2x1bik7CisJdG1mYWJvcnRfd3FlLT5sdW5bMF0gPSBiZTMyX3RvX2NwdShzY3NpX2x1blswXSk7CisJdG1mYWJvcnRfd3FlLT5sdW5bMV0gPSBiZTMyX3RvX2NwdShzY3NpX2x1blsxXSk7CisKIAlpZiAocmVmX3NjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQogCQlkd29yZCA9IChJU0NTSV9UQVNLX1RZUEVfV1JJVEUgPDwgSVNDU0lfQ01EX1JFUVVFU1RfVFlQRV9TSElGVCk7CiAJZWxzZQogCQlkd29yZCA9IChJU0NTSV9UQVNLX1RZUEVfUkVBRCA8PCBJU0NTSV9DTURfUkVRVUVTVF9UWVBFX1NISUZUKTsKLQl0bWZhYm9ydF93cWUtPnJlZl9pdHQgPSAoZHdvcmQgfCB0bWZhYm9ydF9oZHItPnJ0dCk7CisJdG1mYWJvcnRfd3FlLT5yZWZfaXR0ID0gKGR3b3JkIHwgKHRtZmFib3J0X2hkci0+cnR0ICYgSVNDU0lfSVRUX01BU0spKTsKIAl0bWZhYm9ydF93cWUtPnJlZl9jbWRfc24gPSBiZTMyX3RvX2NwdSh0bWZhYm9ydF9oZHItPnJlZmNtZHNuKTsKIAogCXRtZmFib3J0X3dxZS0+YmRfbGlzdF9hZGRyX2xvID0gKHUzMikgYm54MmlfY29ubi0+aGJhLT5tcF9iZF9kbWE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2luaXQuYwppbmRleCAwYzQyMTBkLi42ZDgxNzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMKQEAgLTE3LDggKzE3LDggQEAKIHN0YXRpYyB1MzIgYWRhcHRlcl9jb3VudDsKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyaSIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjAuMWUiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVuZSAyMiwgMjAwOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjEuMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWMgMDYsIDIwMDkiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIAkJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBpU0NTSSBEcml2ZXIgIiBEUlZfTU9EVUxFX05BTUUgXApAQCAtMzIsNiArMzIsMTAgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChibngyaV9kZXZfbG9jayk7CiAKK3Vuc2lnbmVkIGludCBldmVudF9jb2FsX21pbiA9IDI0OworbW9kdWxlX3BhcmFtKGV2ZW50X2NvYWxfbWluLCBpbnQsIDA2NjQpOworTU9EVUxFX1BBUk1fREVTQyhldmVudF9jb2FsX21pbiwgIkV2ZW50IENvYWxlc2NpbmcgTWluaW11bSBDb21tYW5kcyIpOworCiB1bnNpZ25lZCBpbnQgZXZlbnRfY29hbF9kaXYgPSAxOwogbW9kdWxlX3BhcmFtKGV2ZW50X2NvYWxfZGl2LCBpbnQsIDA2NjQpOwogTU9EVUxFX1BBUk1fREVTQyhldmVudF9jb2FsX2RpdiwgIkV2ZW50IENvYWxlc2NpbmcgRGl2aWRlIEZhY3RvciIpOwpAQCAtODMsOCArODcsMTIgQEAKIAkJc2V0X2JpdChCTlgySV9OWDJfREVWXzU3MDksICZoYmEtPmNuaWNfZGV2X3R5cGUpOwogCQloYmEtPm1haWxfcXVldWVfYWNjZXNzID0gQk5YMklfTVFfQklOX01PREU7CiAJfSBlbHNlIGlmIChoYmEtPnBjaV9kaWQgPT0gUENJX0RFVklDRV9JRF9OWDJfNTc3MTAgfHwKLQkJICAgaGJhLT5wY2lfZGlkID09IFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExKQorCQkgICBoYmEtPnBjaV9kaWQgPT0gUENJX0RFVklDRV9JRF9OWDJfNTc3MTEgfHwKKwkJICAgaGJhLT5wY2lfZGlkID09IFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExRSkKIAkJc2V0X2JpdChCTlgySV9OWDJfREVWXzU3NzEwLCAmaGJhLT5jbmljX2Rldl90eXBlKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0FMRVJUICJibngyaTogdW5rbm93biBkZXZpY2UsIDB4JXhcbiIsCisJCQkJICBoYmEtPnBjaV9kaWQpOwogfQogCiAKQEAgLTM2Myw3ICszNzEsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKIAotCWlmICghaXNfcG93ZXJfb2ZfMihzcV9zaXplKSkKKwlpZiAoc3Ffc2l6ZSAmJiAhaXNfcG93ZXJfb2ZfMihzcV9zaXplKSkKIAkJc3Ffc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhzcV9zaXplKTsKIAogCW11dGV4X2luaXQoJmJueDJpX2Rldl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggMTMyODk4Yy4uMzNiMjI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTQ4NSw3ICs0ODUsNiBAQAogCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07CiAJCXN0cnVjdCBibngyaV9jbWQgKmNtZCA9IHRhc2stPmRkX2RhdGE7CiAKLQkJLyogQW5pbCAqLwogCQl0YXNrLT5oZHIgPSAmY21kLT5oZHI7CiAJCXRhc2stPmhkcl9tYXggPSBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcik7CiAKQEAgLTc2NSw3ICs3NjQsNiBAQAogCWhiYS0+cGNpX3N2aWQgPSBoYmEtPnBjaWRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKIAloYmEtPnBjaV9mdW5jID0gUENJX0ZVTkMoaGJhLT5wY2lkZXYtPmRldmZuKTsKIAloYmEtPnBjaV9kZXZubyA9IFBDSV9TTE9UKGhiYS0+cGNpZGV2LT5kZXZmbik7Ci0JYm54MmlfaWRlbnRpZnlfZGV2aWNlKGhiYSk7CiAKIAlibngyaV9pZGVudGlmeV9kZXZpY2UoaGJhKTsKIAlibngyaV9zZXR1cF9ob3N0X3F1ZXVlX3NpemUoaGJhLCBzaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKaW5kZXggNzQ0OWQ0Ni4uMmEzY2Y4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJYzNjbl9ob2xkKGMzY24pOwogCXNwaW5fbG9ja19iaCgmYzNjbi0+bG9jayk7CiAJaWYgKGMzY24tPnN0YXRlID09IEMzQ05fU1RBVEVfQ09OTkVDVElORykKLQkJZmFpbF9hY3Rfb3BlbihjM2NuLCBFSE9TVFVOUkVBQ0gpOworCQlmYWlsX2FjdF9vcGVuKGMzY24sIC1FSE9TVFVOUkVBQ0gpOwogCXNwaW5fdW5sb2NrX2JoKCZjM2NuLT5sb2NrKTsKIAljM2NuX3B1dChjM2NuKTsKIAlfX2tmcmVlX3NrYihza2IpOwpAQCAtNzkyLDE4ICs3OTIsMTggQEAKIHsKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgQ1BMX0VSUl9DT05OX1JFU0VUOgotCQlyZXR1cm4gRUNPTk5SRUZVU0VEOworCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKIAljYXNlIENQTF9FUlJfQVJQX01JU1M6Ci0JCXJldHVybiBFSE9TVFVOUkVBQ0g7CisJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCWNhc2UgQ1BMX0VSUl9DT05OX1RJTUVET1VUOgotCQlyZXR1cm4gRVRJTUVET1VUOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAljYXNlIENQTF9FUlJfVENBTV9GVUxMOgotCQlyZXR1cm4gRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAljYXNlIENQTF9FUlJfQ09OTl9FWElTVDoKIAkJY3hnYjNpX2xvZ19lcnJvcigiQUNUSVZFX09QRU5fUlBMOiA0LXR1cGxlIGluIHVzZVxuIik7Ci0JCXJldHVybiBFQUREUklOVVNFOworCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIEVJTzsKKwkJcmV0dXJuIC1FSU87CiAJfQogfQogCkBAIC04MTcsNyArODE3LDcgQEAKIAlzcGluX2xvY2tfYmgoJmMzY24tPmxvY2spOwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGNwbF9hY3Rfb3Blbl9yZXEpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKLQkJZmFpbF9hY3Rfb3BlbihjM2NuLCBFTk9NRU0pOworCQlmYWlsX2FjdF9vcGVuKGMzY24sIC1FTk9NRU0pOwogCWVsc2UgewogCQlza2ItPnNrID0gKHN0cnVjdCBzb2NrICopYzNjbjsKIAkJc2V0X2FycF9mYWlsdXJlX2hhbmRsZXIoc2tiLCBhY3Rfb3Blbl9yZXFfYXJwX2ZhaWx1cmUpOwpAQCAtOTY2LDE0ICs5NjYsMTQgQEAKIAljYXNlIENQTF9FUlJfQkFEX1NZTjogLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBDUExfRVJSX0NPTk5fUkVTRVQ6CiAJCXJldHVybiBjM2NuLT5zdGF0ZSA+IEMzQ05fU1RBVEVfRVNUQUJMSVNIRUQgPwotCQkJRVBJUEUgOiBFQ09OTlJFU0VUOworCQkJLUVQSVBFIDogLUVDT05OUkVTRVQ7CiAJY2FzZSBDUExfRVJSX1hNSVRfVElNRURPVVQ6CiAJY2FzZSBDUExfRVJSX1BFUlNJU1RfVElNRURPVVQ6CiAJY2FzZSBDUExfRVJSX0ZJTldBSVQyX1RJTUVET1VUOgogCWNhc2UgQ1BMX0VSUl9LRUVQQUxJVkVfVElNRURPVVQ6Ci0JCXJldHVybiBFVElNRURPVVQ7CisJCXJldHVybiAtRVRJTUVET1VUOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBFSU87CisJCXJldHVybiAtRUlPOwogCX0KIH0KIApAQCAtMTU2Nyw3ICsxNTY3LDcgQEAKIAlzM19mcmVlX2F0aWQoY2RldiwgYzNjbi0+dGlkKTsKIAljM2NuLT50aWQgPSAwOwogb3V0X2VycjoKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKaW5kZXggNzA5MTA1MC4uMWZlM2IwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKQEAgLTM4OCw4ICszODgsOCBAQAogCWlmIChlcnIgPiAwKSB7CiAJCWludCBwZHVsZW4gPSBlcnI7CiAKLQljeGdiM2lfdHhfZGVidWcoInRhc2sgMHglcCwgc2tiIDB4JXAsIGxlbiAldS8ldSwgcnYgJWQuXG4iLAotCQkJdGFzaywgc2tiLCBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwgZXJyKTsKKwkJY3hnYjNpX3R4X2RlYnVnKCJ0YXNrIDB4JXAsIHNrYiAweCVwLCBsZW4gJXUvJXUsIHJ2ICVkLlxuIiwKKwkJCQl0YXNrLCBza2IsIHNrYi0+bGVuLCBza2ItPmRhdGFfbGVuLCBlcnIpOwogCiAJCWlmICh0YXNrLT5jb25uLT5oZHJkZ3N0X2VuKQogCQkJcGR1bGVuICs9IElTQ1NJX0RJR0VTVF9TSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDQ3Y2ZlMWMuLjFhNjYwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTc0OCw2ICs3NDgsOCBAQAogCXsiSUJNIiwgIjE3MjQifSwKIAl7IklCTSIsICIxNzI2In0sCiAJeyJJQk0iLCAiMTc0MiJ9LAorCXsiSUJNIiwgIjE3NDUifSwKKwl7IklCTSIsICIxNzQ2In0sCiAJeyJJQk0iLCAiMTgxNCJ9LAogCXsiSUJNIiwgIjE4MTUifSwKIAl7IklCTSIsICIxODE4In0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggYTMwZmZhYS4uMTBiZTlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMTAxLDYgKzEwMSw4IEBACiAKIHN0YXRpYyBpbnQgZmNvZV9jcmVhdGUoY29uc3QgY2hhciAqLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopOwogc3RhdGljIGludCBmY29lX2Rlc3Ryb3koY29uc3QgY2hhciAqLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopOworc3RhdGljIGludCBmY29lX2VuYWJsZShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7CitzdGF0aWMgaW50IGZjb2VfZGlzYWJsZShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKik7CiAKIHN0YXRpYyBzdHJ1Y3QgZmNfc2VxICpmY29lX2Vsc2N0X3NlbmQoc3RydWN0IGZjX2xwb3J0ICosCiAJCQkJICAgICAgdTMyIGRpZCwgc3RydWN0IGZjX2ZyYW1lICosCkBAIC0xMTUsMTAgKzExNywxNiBAQAogCiBtb2R1bGVfcGFyYW1fY2FsbChjcmVhdGUsIGZjb2VfY3JlYXRlLCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKIF9fTU9EVUxFX1BBUk1fVFlQRShjcmVhdGUsICJzdHJpbmciKTsKLU1PRFVMRV9QQVJNX0RFU0MoY3JlYXRlLCAiQ3JlYXRlIGZjb2UgZmNvZSB1c2luZyBuZXQgZGV2aWNlIHBhc3NlZCBpbi4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY3JlYXRlLCAiIENyZWF0ZXMgZmNvZSBpbnN0YW5jZSBvbiBhIGV0aGVybmV0IGludGVyZmFjZSIpOwogbW9kdWxlX3BhcmFtX2NhbGwoZGVzdHJveSwgZmNvZV9kZXN0cm95LCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKIF9fTU9EVUxFX1BBUk1fVFlQRShkZXN0cm95LCAic3RyaW5nIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlc3Ryb3ksICJEZXN0cm95IGZjb2UgZmNvZSIpOworTU9EVUxFX1BBUk1fREVTQyhkZXN0cm95LCAiIERlc3Ryb3lzIGZjb2UgaW5zdGFuY2Ugb24gYSBldGhlcm5ldCBpbnRlcmZhY2UiKTsKK21vZHVsZV9wYXJhbV9jYWxsKGVuYWJsZSwgZmNvZV9lbmFibGUsIE5VTEwsIE5VTEwsIFNfSVdVU1IpOworX19NT0RVTEVfUEFSTV9UWVBFKGVuYWJsZSwgInN0cmluZyIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICIgRW5hYmxlcyBmY29lIG9uIGEgZXRoZXJuZXQgaW50ZXJmYWNlLiIpOworbW9kdWxlX3BhcmFtX2NhbGwoZGlzYWJsZSwgZmNvZV9kaXNhYmxlLCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKK19fTU9EVUxFX1BBUk1fVFlQRShkaXNhYmxlLCAic3RyaW5nIik7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsICIgRGlzYWJsZXMgZmNvZSBvbiBhIGV0aGVybmV0IGludGVyZmFjZS4iKTsKIAogLyogbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGZvciBwYWNrZXRzIGZyb20gbmV0IGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmY29lX25vdGlmaWVyID0gewpAQCAtNTQ1LDYgKzU1MywyMyBAQAogfQogCiAvKioKKyAqIGZjb2VfZ2V0X3d3bigpIC0gR2V0IHRoZSB3b3JsZCB3aWRlIG5hbWUgZnJvbSBMTEQgaWYgaXQgc3VwcG9ydHMgaXQKKyAqIEBuZXRkZXY6IHRoZSBhc3NvY2lhdGVkIG5ldCBkZXZpY2UKKyAqIEB3d246IHRoZSBvdXRwdXQgV1dOCisgKiBAdHlwZTogdGhlIHR5cGUgb2YgV1dOIChXV1BOIG9yIFdXTk4pCisgKgorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50IGZjb2VfZ2V0X3d3bihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgKnd3biwgaW50IHR5cGUpCit7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtPm5ldGRldl9vcHM7CisKKwlpZiAob3BzLT5uZG9fZmNvZV9nZXRfd3duKQorCQlyZXR1cm4gb3BzLT5uZG9fZmNvZV9nZXRfd3duKG5ldGRldiwgd3duLCB0eXBlKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCiAgKiBmY29lX25ldGRldl9jb25maWcoKSAtIFNldCB1cCBuZXQgZGV2aXZlIGZvciBTVyBGQ29FCiAgKiBAbHBvcnQ6ICBUaGUgbG9jYWwgcG9ydCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0IGRldmljZQogICogQG5ldGRldjogVGhlIGFzc29jaWF0ZWQgbmV0IGRldmljZQpAQCAtNjExLDkgKzYzNiwxMyBAQAogCQkgKi8KIAkJaWYgKG5ldGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKIAkJCXZpZCA9IHZsYW5fZGV2X3ZsYW5faWQobmV0ZGV2KTsKLQkJd3dubiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLCAxLCAwKTsKKworCQlpZiAoZmNvZV9nZXRfd3duKG5ldGRldiwgJnd3bm4sIE5FVERFVl9GQ09FX1dXTk4pKQorCQkJd3dubiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLCAxLCAwKTsKIAkJZmNfc2V0X3d3bm4obHBvcnQsIHd3bm4pOwotCQl3d3BuID0gZmNvZV93d25fZnJvbV9tYWMoZmNvZS0+Y3Rsci5jdGxfc3JjX2FkZHIsIDIsIHZpZCk7CisJCWlmIChmY29lX2dldF93d24obmV0ZGV2LCAmd3dwbiwgTkVUREVWX0ZDT0VfV1dQTikpCisJCQl3d3BuID0gZmNvZV93d25fZnJvbV9tYWMoZmNvZS0+Y3Rsci5jdGxfc3JjX2FkZHIsCisJCQkJCQkgMiwgdmlkKTsKIAkJZmNfc2V0X3d3cG4obHBvcnQsIHd3cG4pOwogCX0KIApAQCAtMTIzMSw3ICsxMjYwLDcgQEAKIAkJCQkiQ1BVLlxuIik7CiAKIAkJc3Bpbl91bmxvY2tfYmgoJmZwcy0+ZmNvZV9yeF9saXN0LmxvY2spOwotCQljcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7CiAJCWZwcyA9ICZwZXJfY3B1KGZjb2VfcGVyY3B1LCBjcHUpOwogCQlzcGluX2xvY2tfYmgoJmZwcy0+ZmNvZV9yeF9saXN0LmxvY2spOwogCQlpZiAoIWZwcy0+dGhyZWFkKSB7CkBAIC0xODM4LDYgKzE4NjcsMTA0IEBACiB9CiAKIC8qKgorICogZmNvZV9kaXNhYmxlKCkgLSBEaXNhYmxlcyBhIEZDb0UgaW50ZXJmYWNlCisgKiBAYnVmZmVyOiBUaGUgbmFtZSBvZiB0aGUgRXRoZXJuZXQgaW50ZXJmYWNlIHRvIGJlIGRpc2FibGVkCisgKiBAa3A6CSAgICBUaGUgYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW1ldGVyCisgKgorICogQ2FsbGVkIGZyb20gc3lzZnMuCisgKgorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50IGZjb2VfZGlzYWJsZShjb25zdCBjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCByYyA9IDA7CisKKwltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisjaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQorCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKKwkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgorCSAqLworCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisjZW5kaWYKKworCW5ldGRldiA9IGZjb2VfaWZfdG9fbmV0ZGV2KGJ1ZmZlcik7CisJaWYgKCFuZXRkZXYpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisKKwlydG5sX2xvY2soKTsKKwlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisKKwlpZiAoZmNvZSkKKwkJZmNfZmFicmljX2xvZ29mZihmY29lLT5jdGxyLmxwKTsKKwllbHNlCisJCXJjID0gLUVOT0RFVjsKKworCWRldl9wdXQobmV0ZGV2KTsKK291dF9ub2RldjoKKwltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogZmNvZV9lbmFibGUoKSAtIEVuYWJsZXMgYSBGQ29FIGludGVyZmFjZQorICogQGJ1ZmZlcjogVGhlIG5hbWUgb2YgdGhlIEV0aGVybmV0IGludGVyZmFjZSB0byBiZSBlbmFibGVkCisgKiBAa3A6ICAgICBUaGUgYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW1ldGVyCisgKgorICogQ2FsbGVkIGZyb20gc3lzZnMuCisgKgorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50IGZjb2VfZW5hYmxlKGNvbnN0IGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJaW50IHJjID0gMDsKKworCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKKyNpZmRlZiBDT05GSUdfRkNPRV9NT0RVTEUKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgaXMgbm90IGFib3V0IHRvIGJlCisJICogcmVtb3ZlZC4gIE1vZHVsZSBwYXJhbXRlciBzeXNmcyBmaWxlcyBhcmUgd3JpdGFibGUgYmVmb3JlIHRoZQorCSAqIG1vZHVsZV9pbml0IGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgYWZ0ZXIgbW9kdWxlX2V4aXQuCisJICovCisJaWYgKFRISVNfTU9EVUxFLT5zdGF0ZSAhPSBNT0RVTEVfU1RBVEVfTElWRSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X25vZGV2OworCX0KKyNlbmRpZgorCisJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKKwlpZiAoIW5ldGRldikgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X25vZGV2OworCX0KKworCXJ0bmxfbG9jaygpOworCWZjb2UgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KG5ldGRldik7CisJcnRubF91bmxvY2soKTsKKworCWlmIChmY29lKQorCQlyYyA9IGZjX2ZhYnJpY19sb2dpbihmY29lLT5jdGxyLmxwKTsKKwllbHNlCisJCXJjID0gLUVOT0RFVjsKKworCWRldl9wdXQobmV0ZGV2KTsKK291dF9ub2RldjoKKwltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgogICogZmNvZV9kZXN0cm95KCkgLSBEZXN0cm95IGEgRkNvRSBpbnRlcmZhY2UKICAqIEBidWZmZXI6IFRoZSBuYW1lIG9mIHRoZSBFdGhlcm5ldCBpbnRlcmZhY2UgdG8gYmUgZGVzdHJveWVkCiAgKiBAa3A6CSAgICBUaGUgYXNzb2NpYXRlZCBrZXJuZWwgcGFyYW1ldGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5jIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjk2ZmRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpAQCAtMCwwICsxLDM1MzEgQEAKKy8qCisgKiAgICBEaXNrIEFycmF5IGRyaXZlciBmb3IgSFAgU21hcnQgQXJyYXkgU0FTIGNvbnRyb2xsZXJzCisgKiAgICBDb3B5cmlnaHQgMjAwMCwgMjAwOSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICAgIFF1ZXN0aW9ucy9Db21tZW50cy9CdWdmaXhlcyB0byBpc3Nfc3RvcmFnZWRldkBocC5jb20KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvY2Npc3NfaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgImhwc2FfY21kLmgiCisjaW5jbHVkZSAiaHBzYS5oIgorCisvKiBIUFNBX0RSSVZFUl9WRVJTSU9OIG11c3QgYmUgMyBieXRlIHZhbHVlcyAoMC0yNTUpIHNlcGFyYXRlZCBieSAnLicgKi8KKyNkZWZpbmUgSFBTQV9EUklWRVJfVkVSU0lPTiAiMS4wLjAiCisjZGVmaW5lIERSSVZFUl9OQU1FICJIUCBIUFNBIERyaXZlciAodiAiIEhQU0FfRFJJVkVSX1ZFUlNJT04gIikiCisKKy8qIEhvdyBsb25nIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIGJvYXJkIHRvIGdvIGludG8gc2ltcGxlIG1vZGUgKi8KKyNkZWZpbmUgTUFYX0NPTkZJR19XQUlUIDMwMDAwCisjZGVmaW5lIE1BWF9JT0NUTF9DT05GSUdfV0FJVCAxMDAwCisKKy8qZGVmaW5lIGhvdyBtYW55IHRpbWVzIHdlIHdpbGwgdHJ5IGEgY29tbWFuZCBiZWNhdXNlIG9mIGJ1cyByZXNldHMgKi8KKyNkZWZpbmUgTUFYX0NNRF9SRVRSSUVTIDMKKworLyogRW1iZWRkZWQgbW9kdWxlIGRvY3VtZW50YXRpb24gbWFjcm9zIC0gc2VlIG1vZHVsZXMuaCAqLworTU9EVUxFX0FVVEhPUigiSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBIUCBTbWFydCBBcnJheSBDb250cm9sbGVyIHZlcnNpb24gIiBcCisJSFBTQV9EUklWRVJfVkVSU0lPTik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiSFAgU21hcnQgQXJyYXkgQ29udHJvbGxlcnMiKTsKK01PRFVMRV9WRVJTSU9OKEhQU0FfRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGhwc2FfYWxsb3dfYW55OworbW9kdWxlX3BhcmFtKGhwc2FfYWxsb3dfYW55LCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGhwc2FfYWxsb3dfYW55LAorCQkiQWxsb3cgaHBzYSBkcml2ZXIgdG8gYWNjZXNzIHVua25vd24gSFAgU21hcnQgQXJyYXkgaGFyZHdhcmUiKTsKKworLyogZGVmaW5lIHRoZSBQQ0kgaW5mbyBmb3IgdGhlIGNhcmRzIHdlIGNhbiBjb250cm9sICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHBzYV9wY2lfZGV2aWNlX2lkW10gPSB7CisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyMjN9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTQywgICAgIDB4MTAzQywgMHgzMjM0fSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsICAgICAweDEwM0MsIDB4MzIzRH0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDF9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQzfSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0NX0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDd9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ5fSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0YX0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGJ9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0FOWV9JRCwgICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmYgPDwgOCwgMH0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwc2FfcGNpX2RldmljZV9pZCk7CisKKy8qICBib2FyZF9pZCA9IFN1YnN5c3RlbSBEZXZpY2UgSUQgJiBWZW5kb3IgSUQKKyAqICBwcm9kdWN0ID0gTWFya2V0aW5nIE5hbWUgZm9yIHRoZSBib2FyZAorICogIGFjY2VzcyA9IEFkZHJlc3Mgb2YgdGhlIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycworICovCitzdGF0aWMgc3RydWN0IGJvYXJkX3R5cGUgcHJvZHVjdHNbXSA9IHsKKwl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCisJezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyM2QxMDNjLCAiU21hcnQgQXJyYXkgUDcwME0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzI0MTEwM0MsICJTbWFydCBBcnJheSBQMjEyIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNDMxMDNDLCAiU21hcnQgQXJyYXkgUDQxMCIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjQ1MTAzQywgIlNtYXJ0IEFycmF5IFA0MTBpIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNDcxMDNDLCAiU21hcnQgQXJyYXkgUDQxMSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjQ5MTAzQywgIlNtYXJ0IEFycmF5IFA4MTIiLCAmU0E1X2FjY2Vzc30sCisJezB4MzI0YTEwM0MsICJTbWFydCBBcnJheSBQNzEybSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjRiMTAzQywgIlNtYXJ0IEFycmF5IFA3MTFtIiwgJlNBNV9hY2Nlc3N9LAorCXsweEZGRkYxMDNDLCAiVW5rbm93biBTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKK307CisKK3N0YXRpYyBpbnQgbnVtYmVyX29mX2NvbnRyb2xsZXJzOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9faHBzYV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaW50IGhwc2FfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBzdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7CisjZW5kaWYKKworc3RhdGljIHZvaWQgY21kX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKK3N0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKK3N0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKK3N0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9zcGVjaWFsX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpOworc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3U4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKKwlpbnQgY21kX3R5cGUpOworCitzdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworCitzdGF0aWMgaW50IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaWNtZCk7CitzdGF0aWMgaW50IGhwc2Ffc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK3N0YXRpYyB2b2lkIGhwc2Ffc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworCitzdGF0aWMgc3NpemVfdCByYWlkX2xldmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgbHVuaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCB1bmlxdWVfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgdm9pZCBocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3Rubyk7CitzdGF0aWMgc3NpemVfdCBob3N0X3N0b3JlX3Jlc2NhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitzdGF0aWMgaW50IGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CitzdGF0aWMgdm9pZCBjaGVja19pb2N0bF91bml0X2F0dGVudGlvbihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyYWlkX2xldmVsLCBTX0lSVUdPLCByYWlkX2xldmVsX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGx1bmlkLCBTX0lSVUdPLCBsdW5pZF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1bmlxdWVfaWQsIFNfSVJVR08sIHVuaXF1ZV9pZF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNjYW4sIFNfSVdVU1IsIE5VTEwsIGhvc3Rfc3RvcmVfcmVzY2FuKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpocHNhX3NkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcmFpZF9sZXZlbCwKKwkmZGV2X2F0dHJfbHVuaWQsCisJJmRldl9hdHRyX3VuaXF1ZV9pZCwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpocHNhX3Nob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3Jlc2NhbiwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaHBzYV9kcml2ZXJfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJocHNhIiwKKwkucHJvY19uYW1lCQk9ICJocHNhIiwKKwkucXVldWVjb21tYW5kCQk9IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kLAorCS5jYW5fcXVldWUJCT0gNTEyLAorCS50aGlzX2lkCQk9IC0xLAorCS5zZ190YWJsZXNpemUJCT0gTUFYU0dFTlRSSUVTLAorCS5jbWRfcGVyX2x1bgkJPSA1MTIsCisJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIsCisJLmlvY3RsCQkJPSBocHNhX2lvY3RsLAorCS5zbGF2ZV9hbGxvYwkJPSBocHNhX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9kZXN0cm95CQk9IGhwc2Ffc2xhdmVfZGVzdHJveSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAkJPSBocHNhX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5zZGV2X2F0dHJzID0gaHBzYV9zZGV2X2F0dHJzLAorCS5zaG9zdF9hdHRycyA9IGhwc2Ffc2hvc3RfYXR0cnMsCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjdGxyX2luZm8gKnNkZXZfdG9faGJhKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nICpwcml2ID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKKwlyZXR1cm4gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmhwc2Ffc2Nhbl90aHJlYWQ7CitzdGF0aWMgREVGSU5FX01VVEVYKGhwc2Ffc2Nhbl9tdXRleCk7CitzdGF0aWMgTElTVF9IRUFEKGhwc2Ffc2Nhbl9xKTsKK3N0YXRpYyBpbnQgaHBzYV9zY2FuX2Z1bmModm9pZCAqZGF0YSk7CisKKy8qKgorICogYWRkX3RvX3NjYW5fbGlzdCgpIC0gYWRkIGNvbnRyb2xsZXIgdG8gcmVzY2FuIHF1ZXVlCisgKiBAaDoJCSAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIuCisgKgorICogQWRkcyB0aGUgY29udHJvbGxlciB0byB0aGUgcmVzY2FuIHF1ZXVlIGlmIG5vdCBhbHJlYWR5IG9uIHRoZSBxdWV1ZS4KKyAqCisgKiByZXR1cm5zIDEgaWYgYWRkZWQgdG8gdGhlIHF1ZXVlLCAwIGlmIHNraXBwZWQgKGNvdWxkIGJlIG9uIHRoZQorICogcXVldWUgYWxyZWFkeSwgb3IgdGhlIGNvbnRyb2xsZXIgY291bGQgYmUgaW5pdGlhbGl6aW5nIG9yIHNodXR0aW5nCisgKiBkb3duKS4KKyAqKi8KK3N0YXRpYyBpbnQgYWRkX3RvX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBjdGxyX2luZm8gKnRlc3RfaDsKKwlpbnQgZm91bmQgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKGgtPmJ1c3lfaW5pdGlhbGl6aW5nKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgZ2V0IHRoZSBsb2NrLCBpdCBtZWFucyB0aGUgZHJpdmVyIGlzIHVubG9hZGluZworCSAqIGFuZCB0aGVyZSdzIG5vIHBvaW50IGluIHNjaGVkdWxpbmcgYSBuZXcgc2Nhbi4KKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bikpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlc3RfaCwgJmhwc2Ffc2Nhbl9xLCBzY2FuX2xpc3QpIHsKKwkJaWYgKHRlc3RfaCA9PSBoKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWZvdW5kICYmICFoLT5idXN5X3NjYW5uaW5nKSB7CisJCUlOSVRfQ09NUExFVElPTihoLT5zY2FuX3dhaXQpOworCQlsaXN0X2FkZF90YWlsKCZoLT5zY2FuX2xpc3QsICZocHNhX3NjYW5fcSk7CisJCXJldCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwltdXRleF91bmxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHJlbW92ZV9mcm9tX3NjYW5fbGlzdCgpIC0gcmVtb3ZlIGNvbnRyb2xsZXIgZnJvbSByZXNjYW4gcXVldWUKKyAqIEBoOgkJCSAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIuCisgKgorICogUmVtb3ZlcyB0aGUgY29udHJvbGxlciBmcm9tIHRoZSByZXNjYW4gcXVldWUgaWYgcHJlc2VudC4gQmxvY2tzIGlmCisgKiB0aGUgY29udHJvbGxlciBpcyBjdXJyZW50bHkgY29uZHVjdGluZyBhIHJlc2Nhbi4gIFRoZSBjb250cm9sbGVyCisgKiBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczoKKyAqIDEuIERvZXNuJ3QgbmVlZCBhIHNjYW4KKyAqIDIuIE9uIHRoZSBzY2FuIGxpc3QsIGJ1dCBub3Qgc2Nhbm5pbmcgeWV0ICh3ZSByZW1vdmUgaXQpCisgKiAzLiBCdXN5IHNjYW5uaW5nIChhbmQgbm90IG9uIHRoZSBsaXN0KS4gSW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gd2FpdCBmb3IKKyAqICAgIHRoZSBzY2FuIHRvIGNvbXBsZXRlIHRvIG1ha2Ugc3VyZSB0aGUgc2Nhbm5pbmcgdGhyZWFkIGZvciB0aGlzCisgKiAgICBjb250cm9sbGVyIGlzIGNvbXBsZXRlbHkgaWRsZS4KKyAqKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBjdGxyX2luZm8gKnRlc3RfaCwgKnRtcF9oOworCisJbXV0ZXhfbG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGVzdF9oLCB0bXBfaCwgJmhwc2Ffc2Nhbl9xLCBzY2FuX2xpc3QpIHsKKwkJaWYgKHRlc3RfaCA9PSBoKSB7IC8qIHN0YXRlIDIuICovCisJCQlsaXN0X2RlbCgmaC0+c2Nhbl9saXN0KTsKKwkJCWNvbXBsZXRlX2FsbCgmaC0+c2Nhbl93YWl0KTsKKwkJCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoaC0+YnVzeV9zY2FubmluZykgeyAvKiBzdGF0ZSAzLiAqLworCQltdXRleF91bmxvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmgtPnNjYW5fd2FpdCk7CisJfSBlbHNlIHsgLyogc3RhdGUgMSwgbm90aGluZyB0byBkby4gKi8KKwkJbXV0ZXhfdW5sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOworCX0KK30KKworLyogaHBzYV9zY2FuX2Z1bmMoKSAtIGtlcm5lbCB0aHJlYWQgdXNlZCB0byByZXNjYW4gY29udHJvbGxlcnMKKyAqIEBkYXRhOgkgSWdub3JlZC4KKyAqCisgKiBBIGtlcm5lbCB0aHJlYWQgdXNlZCBzY2FuIGZvciBkcml2ZSB0b3BvbG9neSBjaGFuZ2VzIG9uCisgKiBjb250cm9sbGVycy4gVGhlIHRocmVhZCBwcm9jZXNzZXMgb25seSBvbmUgY29udHJvbGxlciBhdCBhIHRpbWUKKyAqIHVzaW5nIGEgcXVldWUuICBDb250cm9sbGVycyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlIHVzaW5nCisgKiBhZGRfdG9fc2Nhbl9saXN0KCkgYW5kIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUgZWl0aGVyIGFmdGVyIGRvbmUKKyAqIHByb2Nlc3Npbmcgb3IgdXNpbmcgcmVtb3ZlX2Zyb21fc2Nhbl9saXN0KCkuCisgKgorICogcmV0dXJucyAwLgorICoqLworc3RhdGljIGludCBocHNhX3NjYW5fZnVuYyhfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmg7CisJaW50IGhvc3Rfbm87CisKKwl3aGlsZSAoMSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZSgpOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisKKwkJd2hpbGUgKDEpIHsKKwkJCW11dGV4X2xvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJCQlpZiAobGlzdF9lbXB0eSgmaHBzYV9zY2FuX3EpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJaCA9IGxpc3RfZW50cnkoaHBzYV9zY2FuX3EubmV4dCwgc3RydWN0IGN0bHJfaW5mbywKKwkJCQkJc2Nhbl9saXN0KTsKKwkJCWxpc3RfZGVsKCZoLT5zY2FuX2xpc3QpOworCQkJaC0+YnVzeV9zY2FubmluZyA9IDE7CisJCQltdXRleF91bmxvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJCQlob3N0X25vID0gaC0+c2NzaV9ob3N0ID8gIGgtPnNjc2lfaG9zdC0+aG9zdF9ubyA6IC0xOworCQkJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGhvc3Rfbm8pOworCQkJY29tcGxldGVfYWxsKCZoLT5zY2FuX3dhaXQpOworCQkJbXV0ZXhfbG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwkJCWgtPmJ1c3lfc2Nhbm5pbmcgPSAwOworCQkJbXV0ZXhfdW5sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKK3sKKwlpZiAoYy0+ZXJyX2luZm8tPlNlbnNlSW5mb1syXSAhPSBVTklUX0FUVEVOVElPTikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGMtPmVycl9pbmZvLT5TZW5zZUluZm9bMTJdKSB7CisJY2FzZSBTVEFURV9DSEFOR0VEOgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiaHBzYSVkOiBhIHN0YXRlIGNoYW5nZSAiCisJCQkiZGV0ZWN0ZWQsIGNvbW1hbmQgcmV0cmllZFxuIiwgaC0+Y3Rscik7CisJCWJyZWFrOworCWNhc2UgTFVOX0ZBSUxFRDoKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImhwc2ElZDogTFVOIGZhaWx1cmUgIgorCQkJImRldGVjdGVkLCBhY3Rpb24gcmVxdWlyZWRcbiIsIGgtPmN0bHIpOworCQlicmVhazsKKwljYXNlIFJFUE9SVF9MVU5TX0NIQU5HRUQ6CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJocHNhJWQ6IHJlcG9ydCBMVU4gZGF0YSAiCisJCQkiY2hhbmdlZFxuIiwgaC0+Y3Rscik7CisJLyoKKwkgKiBIZXJlLCB3ZSBjb3VsZCBjYWxsIGFkZF90b19zY2FuX2xpc3QgYW5kIHdha2UgdXAgdGhlIHNjYW4gdGhyZWFkLAorCSAqIGV4Y2VwdCB0aGF0IGl0J3MgcXVpdGUgbGlrZWx5IHRoYXQgd2Ugd2lsbCBnZXQgbW9yZSB0aGFuIG9uZQorCSAqIFJFUE9SVF9MVU5TX0NIQU5HRUQgY29uZGl0aW9uIGluIHF1aWNrIHN1Y2Nlc3Npb24sIHdoaWNoIG1lYW5zCisJICogdGhhdCB0aG9zZSB3aGljaCBvY2N1ciBhZnRlciB0aGUgZmlyc3Qgb25lIHdpbGwgbGlrZWx5IGhhcHBlbgorCSAqICpkdXJpbmcqIHRoZSBocHNhX3NjYW5fdGhyZWFkJ3MgcmVzY2FuLiAgQW5kIHRoZSByZXNjYW4gY29kZSBpcyBub3QKKwkgKiByb2J1c3QgZW5vdWdoIHRvIHJlc3RhcnQgaW4gdGhlIG1pZGRsZSwgdW5kb2luZyB3aGF0IGl0IGhhcyBhbHJlYWR5CisJICogZG9uZSwgYW5kIGl0J3Mgbm90IGNsZWFyIHRoYXQgaXQncyBldmVuIHBvc3NpYmxlIHRvIGRvIHRoaXMsIHNpbmNlCisJICogcGFydCBvZiB3aGF0IGl0IGRvZXMgaXMgbm90aWZ5IHRoZSBTQ1NJIG1pZCBsYXllciwgd2hpY2ggc3RhcnRzCisJICogZG9pbmcgaXQncyBvd24gaS9vIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlcyBhbmQgc28gb24sIGFuZCB0aGUKKwkgKiBkcml2ZXIgZG9lc24ndCBoYXZlIHZpc2liaWxpdHkgdG8ga25vdyB3aGF0IG1pZ2h0IG5lZWQgdW5kb2luZy4KKwkgKiBJbiBhbnkgZXZlbnQsIGlmIHBvc3NpYmxlLCBpdCBpcyBob3JyaWJseSBjb21wbGljYXRlZCB0byBnZXQgcmlnaHQKKwkgKiBzbyB3ZSBqdXN0IGRvbid0IGRvIGl0IGZvciBub3cuCisJICoKKwkgKiBOb3RlOiB0aGlzIFJFUE9SVF9MVU5TX0NIQU5HRUQgY29uZGl0aW9uIG9ubHkgb2NjdXJzIG9uIHRoZSBNU0EyMDEyLgorCSAqLworCQlicmVhazsKKwljYXNlIFBPV0VSX09SX1JFU0VUOgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiaHBzYSVkOiBhIHBvd2VyIG9uICIKKwkJCSJvciBkZXZpY2UgcmVzZXQgZGV0ZWN0ZWRcbiIsIGgtPmN0bHIpOworCQlicmVhazsKKwljYXNlIFVOSVRfQVRURU5USU9OX0NMRUFSRUQ6CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJocHNhJWQ6IHVuaXQgYXR0ZW50aW9uICIKKwkJICAgICJjbGVhcmVkIGJ5IGFub3RoZXIgaW5pdGlhdG9yXG4iLCBoLT5jdGxyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImhwc2ElZDogdW5rbm93biAiCisJCQkidW5pdCBhdHRlbnRpb24gZGV0ZWN0ZWRcbiIsIGgtPmN0bHIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhvc3Rfc3RvcmVfcmVzY2FuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjdGxyX2luZm8gKmg7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXVuc2lnbmVkIGxvbmcgKnByaXYgPSBzaG9zdF9wcml2KHNob3N0KTsKKwloID0gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7CisJaWYgKGFkZF90b19zY2FuX2xpc3QoaCkpIHsKKwkJd2FrZV91cF9wcm9jZXNzKGhwc2Ffc2Nhbl90aHJlYWQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmgtPnNjYW5fd2FpdCk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyogRW5xdWV1aW5nIGFuZCBkZXF1ZXVpbmcgZnVuY3Rpb25zIGZvciBjbWRsaXN0cy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRRKHN0cnVjdCBobGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJaGxpc3RfYWRkX2hlYWQoJmMtPmxpc3QsIGxpc3QpOworfQorCitzdGF0aWMgdm9pZCBlbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCWFkZFEoJmgtPnJlcVEsIGMpOworCWgtPlFkZXB0aCsrOworCXN0YXJ0X2lvKGgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZVEoc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCWlmIChXQVJOX09OKGhsaXN0X3VuaGFzaGVkKCZjLT5saXN0KSkpCisJCXJldHVybjsKKwlobGlzdF9kZWxfaW5pdCgmYy0+bGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2hiYV9sdW5pZCh1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdKQoreworCXJldHVybiBtZW1jbXAoc2NzaTNhZGRyLCBSQUlEX0NUTFJfTFVOSUQsIDgpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2xvZ2ljYWxfZGV2X2FkZHJfbW9kZSh1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdKQoreworCXJldHVybiAoc2NzaTNhZGRyWzNdICYgMHhDMCkgPT0gMHg0MDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJhaWRfbGFiZWxbXSA9IHsgIjAiLCAiNCIsICIxKDErMCkiLCAiNSIsICI1KzEiLCAiQURHIiwKKwkiVU5LTk9XTiIKK307CisjZGVmaW5lIFJBSURfVU5LTk9XTiAoQVJSQVlfU0laRShyYWlkX2xhYmVsKSAtIDEpCisKK3N0YXRpYyBzc2l6ZV90IHJhaWRfbGV2ZWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXNzaXplX3QgbCA9IDA7CisJaW50IHJsZXZlbDsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpoZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwloID0gc2Rldl90b19oYmEoc2Rldik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwloZGV2ID0gc2Rldi0+aG9zdGRhdGE7CisJaWYgKCFoZGV2KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogSXMgdGhpcyBldmVuIGEgbG9naWNhbCBkcml2ZT8gKi8KKwlpZiAoIWlzX2xvZ2ljYWxfZGV2X2FkZHJfbW9kZShoZGV2LT5zY3NpM2FkZHIpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiTi9BXG4iKTsKKwkJcmV0dXJuIGw7CisJfQorCisJcmxldmVsID0gaGRldi0+cmFpZF9sZXZlbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJaWYgKHJsZXZlbCA8IDAgfHwgcmxldmVsID4gUkFJRF9VTktOT1dOKQorCQlybGV2ZWwgPSBSQUlEX1VOS05PV047CisJbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiUkFJRCAlc1xuIiwgcmFpZF9sYWJlbFtybGV2ZWxdKTsKKwlyZXR1cm4gbDsKK30KKworc3RhdGljIHNzaXplX3QgbHVuaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmg7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmhkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIGx1bmlkWzhdOworCisJc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJaCA9IHNkZXZfdG9faGJhKHNkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJaGRldiA9IHNkZXYtPmhvc3RkYXRhOworCWlmICghaGRldikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwltZW1jcHkobHVuaWQsIGhkZXYtPnNjc2kzYWRkciwgc2l6ZW9mKGx1bmlkKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiMHglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJbHVuaWRbMF0sIGx1bmlkWzFdLCBsdW5pZFsyXSwgbHVuaWRbM10sCisJCWx1bmlkWzRdLCBsdW5pZFs1XSwgbHVuaWRbNl0sIGx1bmlkWzddKTsKK30KKworc3RhdGljIHNzaXplX3QgdW5pcXVlX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpoZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBzblsxNl07CisKKwlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwloID0gc2Rldl90b19oYmEoc2Rldik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwloZGV2ID0gc2Rldi0+aG9zdGRhdGE7CisJaWYgKCFoZGV2KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW1lbWNweShzbiwgaGRldi0+ZGV2aWNlX2lkLCBzaXplb2Yoc24pKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMTYgKiAyICsgMiwKKwkJCSIlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCIKKwkJCSIlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYJTAyWFxuIiwKKwkJCXNuWzBdLCBzblsxXSwgc25bMl0sIHNuWzNdLAorCQkJc25bNF0sIHNuWzVdLCBzbls2XSwgc25bN10sCisJCQlzbls4XSwgc25bOV0sIHNuWzEwXSwgc25bMTFdLAorCQkJc25bMTJdLCBzblsxM10sIHNuWzE0XSwgc25bMTVdKTsKK30KKworc3RhdGljIGludCBocHNhX2ZpbmRfdGFyZ2V0X2x1bihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyW10sIGludCBidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1bikKK3sKKwkvKiBmaW5kcyBhbiB1bnVzZWQgYnVzLCB0YXJnZXQsIGx1biBmb3IgYSBuZXcgcGh5c2ljYWwgZGV2aWNlCisJICogYXNzdW1lcyBoLT5kZXZsb2NrIGlzIGhlbGQKKwkgKi8KKwlpbnQgaSwgZm91bmQgPSAwOworCURFQ0xBUkVfQklUTUFQKGx1bl90YWtlbiwgSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEpOworCisJbWVtc2V0KCZsdW5fdGFrZW5bMF0sIDAsIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBID4+IDMpOworCisJZm9yIChpID0gMDsgaSA8IGgtPm5kZXZpY2VzOyBpKyspIHsKKwkJaWYgKGgtPmRldltpXS0+YnVzID09IGJ1cyAmJiBoLT5kZXZbaV0tPnRhcmdldCAhPSAtMSkKKwkJCXNldF9iaXQoaC0+ZGV2W2ldLT50YXJnZXQsIGx1bl90YWtlbik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBOyBpKyspIHsKKwkJaWYgKCF0ZXN0X2JpdChpLCBsdW5fdGFrZW4pKSB7CisJCQkvKiAqYnVzID0gMTsgKi8KKwkJCSp0YXJnZXQgPSBpOworCQkJKmx1biA9IDA7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gIWZvdW5kOworfQorCisvKiBBZGQgYW4gZW50cnkgaW50byBoLT5kZXZbXSBhcnJheS4gKi8KK3N0YXRpYyBpbnQgaHBzYV9zY3NpX2FkZF9lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAorCQlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZpY2UsCisJCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmFkZGVkW10sIGludCAqbmFkZGVkKQoreworCS8qIGFzc3VtZXMgaC0+ZGV2bG9jayBpcyBoZWxkICovCisJaW50IG4gPSBoLT5uZGV2aWNlczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIGFkZHIxWzhdLCBhZGRyMls4XTsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpzZDsKKworCWlmIChuID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInRvbyBtYW55IGRldmljZXMsIHNvbWUgd2lsbCBiZSAiCisJCQkiaW5hY2Nlc3NpYmxlLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBwaHlzaWNhbCBkZXZpY2VzIGRvIG5vdCBoYXZlIGx1biBvciB0YXJnZXQgYXNzaWduZWQgdW50aWwgbm93LiAqLworCWlmIChkZXZpY2UtPmx1biAhPSAtMSkKKwkJLyogTG9naWNhbCBkZXZpY2UsIGx1biBpcyBhbHJlYWR5IGFzc2lnbmVkLiAqLworCQlnb3RvIGx1bl9hc3NpZ25lZDsKKworCS8qIElmIHRoaXMgZGV2aWNlIGEgbm9uLXplcm8gbHVuIG9mIGEgbXVsdGktbHVuIGRldmljZQorCSAqIGJ5dGUgNCBvZiB0aGUgOC1ieXRlIExVTiBhZGRyIHdpbGwgY29udGFpbiB0aGUgbG9naWNhbAorCSAqIHVuaXQgbm8sIHplcm8gb3RoZXJpc2UuCisJICovCisJaWYgKGRldmljZS0+c2NzaTNhZGRyWzRdID09IDApIHsKKwkJLyogVGhpcyBpcyBub3QgYSBub24temVybyBsdW4gb2YgYSBtdWx0aS1sdW4gZGV2aWNlICovCisJCWlmIChocHNhX2ZpbmRfdGFyZ2V0X2x1bihoLCBkZXZpY2UtPnNjc2kzYWRkciwKKwkJCWRldmljZS0+YnVzLCAmZGV2aWNlLT50YXJnZXQsICZkZXZpY2UtPmx1bikgIT0gMCkKKwkJCXJldHVybiAtMTsKKwkJZ290byBsdW5fYXNzaWduZWQ7CisJfQorCisJLyogVGhpcyBpcyBhIG5vbi16ZXJvIGx1biBvZiBhIG11bHRpLWx1biBkZXZpY2UuCisJICogU2VhcmNoIHRocm91Z2ggb3VyIGxpc3QgYW5kIGZpbmQgdGhlIGRldmljZSB3aGljaAorCSAqIGhhcyB0aGUgc2FtZSA4IGJ5dGUgTFVOIGFkZHJlc3MsIGV4Y2VwdGluZyBieXRlIDQuCisJICogQXNzaWduIHRoZSBzYW1lIGJ1cyBhbmQgdGFyZ2V0IGZvciB0aGlzIG5ldyBMVU4uCisJICogVXNlIHRoZSBsb2dpY2FsIHVuaXQgbnVtYmVyIGZyb20gdGhlIGZpcm13YXJlLgorCSAqLworCW1lbWNweShhZGRyMSwgZGV2aWNlLT5zY3NpM2FkZHIsIDgpOworCWFkZHIxWzRdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXNkID0gaC0+ZGV2W2ldOworCQltZW1jcHkoYWRkcjIsIHNkLT5zY3NpM2FkZHIsIDgpOworCQlhZGRyMls0XSA9IDA7CisJCS8qIGRpZmZlciBvbmx5IGluIGJ5dGUgND8gKi8KKwkJaWYgKG1lbWNtcChhZGRyMSwgYWRkcjIsIDgpID09IDApIHsKKwkJCWRldmljZS0+YnVzID0gc2QtPmJ1czsKKwkJCWRldmljZS0+dGFyZ2V0ID0gc2QtPnRhcmdldDsKKwkJCWRldmljZS0+bHVuID0gZGV2aWNlLT5zY3NpM2FkZHJbNF07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZGV2aWNlLT5sdW4gPT0gLTEpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInBoeXNpY2FsIGRldmljZSB3aXRoIG5vIExVTj0wLCIKKwkJCSIgc3VzcGVjdCBmaXJtd2FyZSBidWcgb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgIgorCQkJImNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJCXJldHVybiAtMTsKKwl9CisKK2x1bl9hc3NpZ25lZDoKKworCWgtPmRldltuXSA9IGRldmljZTsKKwloLT5uZGV2aWNlcysrOworCWFkZGVkWypuYWRkZWRdID0gZGV2aWNlOworCSgqbmFkZGVkKSsrOworCisJLyogaW5pdGlhbGx5LCAoYmVmb3JlIHJlZ2lzdGVyaW5nIHdpdGggc2NzaSBsYXllcikgd2UgZG9uJ3QKKwkgKiBrbm93IG91ciBob3N0bm8gYW5kIHdlIGRvbid0IHdhbnQgdG8gcHJpbnQgYW55dGhpbmcgZmlyc3QKKwkgKiB0aW1lIGFueXdheSAodGhlIHNjc2kgbGF5ZXIncyBpbnF1aXJpZXMgd2lsbCBzaG93IHRoYXQgaW5mbykKKwkgKi8KKwkvKiBpZiAoaG9zdG5vICE9IC0xKSAqLworCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiJXMgZGV2aWNlIGMlZGIlZHQlZGwlZCBhZGRlZC5cbiIsCisJCQlzY3NpX2RldmljZV90eXBlKGRldmljZS0+ZGV2dHlwZSksIGhvc3RubywKKwkJCWRldmljZS0+YnVzLCBkZXZpY2UtPnRhcmdldCwgZGV2aWNlLT5sdW4pOworCXJldHVybiAwOworfQorCisvKiBSZW1vdmUgYW4gZW50cnkgZnJvbSBoLT5kZXZbXSBhcnJheS4gKi8KK3N0YXRpYyB2b2lkIGhwc2Ffc2NzaV9yZW1vdmVfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubywgaW50IGVudHJ5LAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnJlbW92ZWRbXSwgaW50ICpucmVtb3ZlZCkKK3sKKwkvKiBhc3N1bWVzIGgtPmRldmxvY2sgaXMgaGVsZCAqLworCWludCBpOworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkOworCisJaWYgKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSkKKwkJQlVHKCk7CisKKwlzZCA9IGgtPmRldltlbnRyeV07CisJcmVtb3ZlZFsqbnJlbW92ZWRdID0gaC0+ZGV2W2VudHJ5XTsKKwkoKm5yZW1vdmVkKSsrOworCisJZm9yIChpID0gZW50cnk7IGkgPCBoLT5uZGV2aWNlcy0xOyBpKyspCisJCWgtPmRldltpXSA9IGgtPmRldltpKzFdOworCWgtPm5kZXZpY2VzLS07CisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIiVzIGRldmljZSBjJWRiJWR0JWRsJWQgcmVtb3ZlZC5cbiIsCisJCXNjc2lfZGV2aWNlX3R5cGUoc2QtPmRldnR5cGUpLCBob3N0bm8sIHNkLT5idXMsIHNkLT50YXJnZXQsCisJCXNkLT5sdW4pOworfQorCisjZGVmaW5lIFNDU0kzQUREUl9FUShhLCBiKSAoIFwKKwkoYSlbN10gPT0gKGIpWzddICYmIFwKKwkoYSlbNl0gPT0gKGIpWzZdICYmIFwKKwkoYSlbNV0gPT0gKGIpWzVdICYmIFwKKwkoYSlbNF0gPT0gKGIpWzRdICYmIFwKKwkoYSlbM10gPT0gKGIpWzNdICYmIFwKKwkoYSlbMl0gPT0gKGIpWzJdICYmIFwKKwkoYSlbMV0gPT0gKGIpWzFdICYmIFwKKwkoYSlbMF0gPT0gKGIpWzBdKQorCitzdGF0aWMgdm9pZCBmaXh1cF9ib3RjaGVkX2FkZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmFkZGVkKQoreworCS8qIGNhbGxlZCB3aGVuIHNjc2lfYWRkX2RldmljZSBmYWlscyBpbiBvcmRlciB0byByZS1hZGp1c3QKKwkgKiBoLT5kZXZbXSB0byBtYXRjaCB0aGUgbWlkIGxheWVyJ3Mgdmlldy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpLCBqOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgaC0+bmRldmljZXM7IGkrKykgeworCQlpZiAoaC0+ZGV2W2ldID09IGFkZGVkKSB7CisJCQlmb3IgKGogPSBpOyBqIDwgaC0+bmRldmljZXMtMTsgaisrKQorCQkJCWgtPmRldltqXSA9IGgtPmRldltqKzFdOworCQkJaC0+bmRldmljZXMtLTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlrZnJlZShhZGRlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pc190aGVfc2FtZShzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXYxLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldjIpCit7CisJaWYgKChpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUoZGV2MS0+c2NzaTNhZGRyKSB8fAorCQkoZGV2MS0+bHVuICE9IC0xICYmIGRldjItPmx1biAhPSAtMSkpICYmCisJCWRldjEtPmRldnR5cGUgIT0gMHgwQykKKwkJcmV0dXJuIChtZW1jbXAoZGV2MSwgZGV2Miwgc2l6ZW9mKCpkZXYxKSkgPT0gMCk7CisKKwkvKiB3ZSBjb21wYXJlIGV2ZXJ5dGhpbmcgZXhjZXB0IGx1biBhbmQgdGFyZ2V0IGFzIHRoZXNlCisJICogYXJlIG5vdCB5ZXQgYXNzaWduZWQuICBDb21wYXJlIHBhcnRzIGxpa2VseQorCSAqIHRvIGRpZmZlciBmaXJzdAorCSAqLworCWlmIChtZW1jbXAoZGV2MS0+c2NzaTNhZGRyLCBkZXYyLT5zY3NpM2FkZHIsCisJCXNpemVvZihkZXYxLT5zY3NpM2FkZHIpKSAhPSAwKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGRldjEtPmRldmljZV9pZCwgZGV2Mi0+ZGV2aWNlX2lkLAorCQlzaXplb2YoZGV2MS0+ZGV2aWNlX2lkKSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKG1lbWNtcChkZXYxLT5tb2RlbCwgZGV2Mi0+bW9kZWwsIHNpemVvZihkZXYxLT5tb2RlbCkpICE9IDApCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoZGV2MS0+dmVuZG9yLCBkZXYyLT52ZW5kb3IsIHNpemVvZihkZXYxLT52ZW5kb3IpKSAhPSAwKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGRldjEtPnJldmlzaW9uLCBkZXYyLT5yZXZpc2lvbiwgc2l6ZW9mKGRldjEtPnJldmlzaW9uKSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKGRldjEtPmRldnR5cGUgIT0gZGV2Mi0+ZGV2dHlwZSkKKwkJcmV0dXJuIDA7CisJaWYgKGRldjEtPnJhaWRfbGV2ZWwgIT0gZGV2Mi0+cmFpZF9sZXZlbCkKKwkJcmV0dXJuIDA7CisJaWYgKGRldjEtPmJ1cyAhPSBkZXYyLT5idXMpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKiBGaW5kIG5lZWRsZSBpbiBoYXlzdGFjay4gIElmIGV4YWN0IG1hdGNoIGZvdW5kLCByZXR1cm4gREVWSUNFX1NBTUUsCisgKiBhbmQgcmV0dXJuIG5lZWRsZSBsb2NhdGlvbiBpbiAqaW5kZXguICBJZiBzY3NpM2FkZHIgbWF0Y2hlcywgYnV0IG5vdAorICogdmVuZG9yLCBtb2RlbCwgc2VyaWFsIG51bSwgZXRjLiByZXR1cm4gREVWSUNFX0NIQU5HRUQsIGFuZCByZXR1cm4gbmVlZGxlCisgKiBsb2NhdGlvbiBpbiAqaW5kZXguICBJZiBuZWVkbGUgbm90IGZvdW5kLCByZXR1cm4gREVWSUNFX05PVF9GT1VORC4KKyAqLworc3RhdGljIGludCBocHNhX3Njc2lfZmluZF9lbnRyeShzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpuZWVkbGUsCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqaGF5c3RhY2tbXSwgaW50IGhheXN0YWNrX3NpemUsCisJaW50ICppbmRleCkKK3sKKwlpbnQgaTsKKyNkZWZpbmUgREVWSUNFX05PVF9GT1VORCAwCisjZGVmaW5lIERFVklDRV9DSEFOR0VEIDEKKyNkZWZpbmUgREVWSUNFX1NBTUUgMgorCWZvciAoaSA9IDA7IGkgPCBoYXlzdGFja19zaXplOyBpKyspIHsKKwkJaWYgKFNDU0kzQUREUl9FUShuZWVkbGUtPnNjc2kzYWRkciwgaGF5c3RhY2tbaV0tPnNjc2kzYWRkcikpIHsKKwkJCSppbmRleCA9IGk7CisJCQlpZiAoZGV2aWNlX2lzX3RoZV9zYW1lKG5lZWRsZSwgaGF5c3RhY2tbaV0pKQorCQkJCXJldHVybiBERVZJQ0VfU0FNRTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gREVWSUNFX0NIQU5HRUQ7CisJCX0KKwl9CisJKmluZGV4ID0gLTE7CisJcmV0dXJuIERFVklDRV9OT1RfRk9VTkQ7Cit9CisKK3N0YXRpYyBpbnQgYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkW10sIGludCBuc2RzKQoreworCS8qIHNkIGNvbnRhaW5zIHNjc2kzIGFkZHJlc3NlcyBhbmQgZGV2dHlwZXMsIGFuZCBpbnF1aXJ5CisJICogZGF0YS4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgd2hhdCdzIGluIHNkIHRvIGJlIHRoZSBjdXJyZW50CisJICogcmVhbGl0eSBhbmQgdXBkYXRlcyBoLT5kZXZbXSB0byByZWZsZWN0IHRoYXQgcmVhbGl0eS4KKwkgKi8KKwlpbnQgaSwgZW50cnksIGRldmljZV9jaGFuZ2UsIGNoYW5nZXMgPSAwOworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmNzZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKiphZGRlZCwgKipyZW1vdmVkOworCWludCBuYWRkZWQsIG5yZW1vdmVkOworCXN0cnVjdCBTY3NpX0hvc3QgKnNoID0gTlVMTDsKKworCWFkZGVkID0ga3phbGxvYyhzaXplb2YoKmFkZGVkKSAqIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBLAorCQlHRlBfS0VSTkVMKTsKKwlyZW1vdmVkID0ga3phbGxvYyhzaXplb2YoKnJlbW92ZWQpICogSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEsCisJCUdGUF9LRVJORUwpOworCisJaWYgKCFhZGRlZCB8fCAhcmVtb3ZlZCkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAiCisJCQkiYWRqdXN0X2hwc2Ffc2NzaV90YWJsZVxuIik7CisJCWdvdG8gZnJlZV9hbmRfb3V0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5kZXZsb2NrLCBmbGFncyk7CisKKwkvKiBmaW5kIGFueSBkZXZpY2VzIGluIGgtPmRldltdIHRoYXQgYXJlIG5vdCBpbgorCSAqIHNkW10gYW5kIHJlbW92ZSB0aGVtIGZyb20gaC0+ZGV2W10sIGFuZCBmb3IgYW55CisJICogZGV2aWNlcyB3aGljaCBoYXZlIGNoYW5nZWQsIHJlbW92ZSB0aGUgb2xkIGRldmljZQorCSAqIGluZm8gYW5kIGFkZCB0aGUgbmV3IGRldmljZSBpbmZvLgorCSAqLworCWkgPSAwOworCW5yZW1vdmVkID0gMDsKKwluYWRkZWQgPSAwOworCXdoaWxlIChpIDwgaC0+bmRldmljZXMpIHsKKwkJY3NkID0gaC0+ZGV2W2ldOworCQlkZXZpY2VfY2hhbmdlID0gaHBzYV9zY3NpX2ZpbmRfZW50cnkoY3NkLCBzZCwgbnNkcywgJmVudHJ5KTsKKwkJaWYgKGRldmljZV9jaGFuZ2UgPT0gREVWSUNFX05PVF9GT1VORCkgeworCQkJY2hhbmdlcysrOworCQkJaHBzYV9zY3NpX3JlbW92ZV9lbnRyeShoLCBob3N0bm8sIGksCisJCQkJcmVtb3ZlZCwgJm5yZW1vdmVkKTsKKwkJCWNvbnRpbnVlOyAvKiByZW1vdmUgXl5eLCBoZW5jZSBpIG5vdCBpbmNyZW1lbnRlZCAqLworCQl9IGVsc2UgaWYgKGRldmljZV9jaGFuZ2UgPT0gREVWSUNFX0NIQU5HRUQpIHsKKwkJCWNoYW5nZXMrKzsKKwkJCWhwc2Ffc2NzaV9yZW1vdmVfZW50cnkoaCwgaG9zdG5vLCBpLAorCQkJCXJlbW92ZWQsICZucmVtb3ZlZCk7CisJCQkodm9pZCkgaHBzYV9zY3NpX2FkZF9lbnRyeShoLCBob3N0bm8sIHNkW2VudHJ5XSwKKwkJCQlhZGRlZCwgJm5hZGRlZCk7CisJCQkvKiBhZGQgY2FuJ3QgZmFpbCwgd2UganVzdCByZW1vdmVkIG9uZS4gKi8KKwkJCXNkW2VudHJ5XSA9IE5VTEw7IC8qIHByZXZlbnQgaXQgZnJvbSBiZWluZyBmcmVlZCAqLworCQl9CisJCWkrKzsKKwl9CisKKwkvKiBOb3csIG1ha2Ugc3VyZSBldmVyeSBkZXZpY2UgbGlzdGVkIGluIHNkW10gaXMgYWxzbworCSAqIGxpc3RlZCBpbiBoLT5kZXZbXSwgYWRkaW5nIHRoZW0gaWYgdGhleSBhcmVuJ3QgZm91bmQKKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBuc2RzOyBpKyspIHsKKwkJaWYgKCFzZFtpXSkgLyogaWYgYWxyZWFkeSBhZGRlZCBhYm92ZS4gKi8KKwkJCWNvbnRpbnVlOworCQlkZXZpY2VfY2hhbmdlID0gaHBzYV9zY3NpX2ZpbmRfZW50cnkoc2RbaV0sIGgtPmRldiwKKwkJCQkJaC0+bmRldmljZXMsICZlbnRyeSk7CisJCWlmIChkZXZpY2VfY2hhbmdlID09IERFVklDRV9OT1RfRk9VTkQpIHsKKwkJCWNoYW5nZXMrKzsKKwkJCWlmIChocHNhX3Njc2lfYWRkX2VudHJ5KGgsIGhvc3Rubywgc2RbaV0sCisJCQkJYWRkZWQsICZuYWRkZWQpICE9IDApCisJCQkJYnJlYWs7CisJCQlzZFtpXSA9IE5VTEw7IC8qIHByZXZlbnQgZnJvbSBiZWluZyBmcmVlZCBsYXRlci4gKi8KKwkJfSBlbHNlIGlmIChkZXZpY2VfY2hhbmdlID09IERFVklDRV9DSEFOR0VEKSB7CisJCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uICovCisJCQljaGFuZ2VzKys7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCSJkZXZpY2UgdW5leHBlY3RlZGx5IGNoYW5nZWQuXG4iKTsKKwkJCS8qIGJ1dCBpZiBpdCBkb2VzIGhhcHBlbiwgd2UganVzdCBpZ25vcmUgdGhhdCBkZXZpY2UgKi8KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5kZXZsb2NrLCBmbGFncyk7CisKKwkvKiBEb24ndCBub3RpZnkgc2NzaSBtaWQgbGF5ZXIgb2YgYW55IGNoYW5nZXMgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaAorCSAqIChvciBpZiB0aGVyZSBhcmUgbm8gY2hhbmdlcykgc2NzaV9zY2FuX2hvc3Qgd2lsbCBkbyBpdCBsYXRlciB0aGUKKwkgKiBmaXJzdCB0aW1lIHRocm91Z2guCisJICovCisJaWYgKGhvc3RubyA9PSAtMSB8fCAhY2hhbmdlcykKKwkJZ290byBmcmVlX2FuZF9vdXQ7CisKKwlzaCA9IGgtPnNjc2lfaG9zdDsKKwkvKiBOb3RpZnkgc2NzaSBtaWQgbGF5ZXIgb2YgYW55IHJlbW92ZWQgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBucmVtb3ZlZDsgaSsrKSB7CisJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9CisJCQlzY3NpX2RldmljZV9sb29rdXAoc2gsIHJlbW92ZWRbaV0tPmJ1cywKKwkJCQlyZW1vdmVkW2ldLT50YXJnZXQsIHJlbW92ZWRbaV0tPmx1bik7CisJCWlmIChzZGV2ICE9IE5VTEwpIHsKKwkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKKwkJCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGRvbid0IGV4cGVjdCB0byBnZXQgaGVyZS4KKwkJCSAqIGZ1dHVyZSBjbWRzIHRvIHRoaXMgZGV2aWNlIHdpbGwgZ2V0IHNlbGVjdGlvbgorCQkJICogdGltZW91dCBhcyBpZiB0aGUgZGV2aWNlIHdhcyBnb25lLgorCQkJICovCisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiZGlkbid0IGZpbmQgYyVkYiVkdCVkbCVkICIKKwkJCQkiIGZvciByZW1vdmFsLiIsIGhvc3RubywgcmVtb3ZlZFtpXS0+YnVzLAorCQkJCXJlbW92ZWRbaV0tPnRhcmdldCwgcmVtb3ZlZFtpXS0+bHVuKTsKKwkJfQorCQlrZnJlZShyZW1vdmVkW2ldKTsKKwkJcmVtb3ZlZFtpXSA9IE5VTEw7CisJfQorCisJLyogTm90aWZ5IHNjc2kgbWlkIGxheWVyIG9mIGFueSBhZGRlZCBkZXZpY2VzICovCisJZm9yIChpID0gMDsgaSA8IG5hZGRlZDsgaSsrKSB7CisJCWlmIChzY3NpX2FkZF9kZXZpY2Uoc2gsIGFkZGVkW2ldLT5idXMsCisJCQlhZGRlZFtpXS0+dGFyZ2V0LCBhZGRlZFtpXS0+bHVuKSA9PSAwKQorCQkJY29udGludWU7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJzY3NpX2FkZF9kZXZpY2UgYyVkYiVkdCVkbCVkIGZhaWxlZCwgIgorCQkJImRldmljZSBub3QgYWRkZWQuXG4iLCBob3N0bm8sIGFkZGVkW2ldLT5idXMsCisJCQlhZGRlZFtpXS0+dGFyZ2V0LCBhZGRlZFtpXS0+bHVuKTsKKwkJLyogbm93IHdlIGhhdmUgdG8gcmVtb3ZlIGl0IGZyb20gaC0+ZGV2LAorCQkgKiBzaW5jZSBpdCBkaWRuJ3QgZ2V0IGFkZGVkIHRvIHNjc2kgbWlkIGxheWVyCisJCSAqLworCQlmaXh1cF9ib3RjaGVkX2FkZChoLCBhZGRlZFtpXSk7CisJfQorCitmcmVlX2FuZF9vdXQ6CisJa2ZyZWUoYWRkZWQpOworCWtmcmVlKHJlbW92ZWQpOworCXJldHVybiAwOworfQorCisvKgorICogTG9va3VwIGJ1cy90YXJnZXQvbHVuIGFuZCByZXRydW4gY29ycmVzcG9uZGluZyBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICoKKyAqIEFzc3VtZSdzIGgtPmRldmxvY2sgaXMgaGVsZC4KKyAqLworc3RhdGljIHN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmxvb2t1cF9ocHNhX3Njc2lfZGV2KHN0cnVjdCBjdGxyX2luZm8gKmgsCisJaW50IGJ1cywgaW50IHRhcmdldCwgaW50IGx1bikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpzZDsKKworCWZvciAoaSA9IDA7IGkgPCBoLT5uZGV2aWNlczsgaSsrKSB7CisJCXNkID0gaC0+ZGV2W2ldOworCQlpZiAoc2QtPmJ1cyA9PSBidXMgJiYgc2QtPnRhcmdldCA9PSB0YXJnZXQgJiYgc2QtPmx1biA9PSBsdW4pCisJCQlyZXR1cm4gc2Q7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBsaW5rIHNkZXYtPmhvc3RkYXRhIHRvIG91ciBwZXItZGV2aWNlIHN0cnVjdHVyZS4gKi8KK3N0YXRpYyBpbnQgaHBzYV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCisJaCA9IHNkZXZfdG9faGJhKHNkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5kZXZsb2NrLCBmbGFncyk7CisJc2QgPSBsb29rdXBfaHBzYV9zY3NpX2RldihoLCBzZGV2X2NoYW5uZWwoc2RldiksCisJCXNkZXZfaWQoc2RldiksIHNkZXYtPmx1bik7CisJaWYgKHNkICE9IE5VTEwpCisJCXNkZXYtPmhvc3RkYXRhID0gc2Q7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+ZGV2bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBocHNhX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXJldHVybjsgLyogbm90aGluZyB0byBkby4gKi8KK30KKworc3RhdGljIHZvaWQgaHBzYV9zY3NpX3NldHVwKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaC0+bmRldmljZXMgPSAwOworCWgtPnNjc2lfaG9zdCA9IE5VTEw7CisJc3Bpbl9sb2NrX2luaXQoJmgtPmRldmxvY2spOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgY29tcGxldGVfc2NzaV9jb21tYW5kKHN0cnVjdCBDb21tYW5kTGlzdCAqY3AsCisJaW50IHRpbWVvdXQsIF9fdTMyIHRhZykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwlzdHJ1Y3QgRXJyb3JJbmZvICplaTsKKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGNoYXIgYXNjOyAgICAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXVuc2lnbmVkIGNoYXIgYXNjcTsgICAgIC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KKworCWVpID0gY3AtPmVycl9pbmZvOworCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNwLT5zY3NpX2NtZDsKKwloID0gY3AtPmg7CisKKwlzY3NpX2RtYV91bm1hcChjbWQpOyAvKiB1bmRvIHRoZSBETUEgbWFwcGluZ3MgKi8KKworCWNtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNik7IAkJLyogaG9zdCBieXRlICovCisJY21kLT5yZXN1bHQgfD0gKENPTU1BTkRfQ09NUExFVEUgPDwgOCk7CS8qIG1zZyBieXRlICovCisJY21kLT5yZXN1bHQgfD0gKGVpLT5TY3NpU3RhdHVzIDw8IDEpOworCisJLyogY29weSB0aGUgc2Vuc2UgZGF0YSB3aGV0aGVyIHdlIG5lZWQgdG8gb3Igbm90LiAqLworCW1lbWNweShjbWQtPnNlbnNlX2J1ZmZlciwgZWktPlNlbnNlSW5mbywKKwkJZWktPlNlbnNlTGVuID4gU0NTSV9TRU5TRV9CVUZGRVJTSVpFID8KKwkJCVNDU0lfU0VOU0VfQlVGRkVSU0laRSA6CisJCQllaS0+U2Vuc2VMZW4pOworCXNjc2lfc2V0X3Jlc2lkKGNtZCwgZWktPlJlc2lkdWFsQ250KTsKKworCWlmIChlaS0+Q29tbWFuZFN0YXR1cyA9PSAwKSB7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CisJCWNtZF9mcmVlKGgsIGNwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGFuIGVycm9yIGhhcyBvY2N1cnJlZCAqLworCXN3aXRjaCAoZWktPkNvbW1hbmRTdGF0dXMpIHsKKworCWNhc2UgQ01EX1RBUkdFVF9TVEFUVVM6CisJCWlmIChlaS0+U2NzaVN0YXR1cykgeworCQkJLyogR2V0IHNlbnNlIGtleSAqLworCQkJc2Vuc2Vfa2V5ID0gMHhmICYgZWktPlNlbnNlSW5mb1syXTsKKwkJCS8qIEdldCBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwkJCWFzYyA9IGVpLT5TZW5zZUluZm9bMTJdOworCQkJLyogR2V0IGFkZGl0aW9uIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCisJCQlhc2NxID0gZWktPlNlbnNlSW5mb1sxM107CisJCX0KKworCQlpZiAoZWktPlNjc2lTdGF0dXMgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKSB7CisJCQlpZiAoY2hlY2tfZm9yX3VuaXRfYXR0ZW50aW9uKGgsIGNwKSkgeworCQkJCWNtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc2Vuc2Vfa2V5ID09IElMTEVHQUxfUkVRVUVTVCkgeworCQkJCS8qCisJCQkJICogU0NTSSBSRVBPUlRfTFVOUyBpcyBjb21tb25seSB1bnN1cHBvcnRlZCBvbgorCQkJCSAqIFNtYXJ0IEFycmF5LiAgU3VwcHJlc3Mgbm9pc3kgY29tcGxhaW50LgorCQkJCSAqLworCQkJCWlmIChjcC0+UmVxdWVzdC5DREJbMF0gPT0gUkVQT1JUX0xVTlMpCisJCQkJCWJyZWFrOworCisJCQkJLyogSWYgQVNDL0FTQ1EgaW5kaWNhdGUgTG9naWNhbCBVbml0CisJCQkJICogTm90IFN1cHBvcnRlZCBjb25kaXRpb24sCisJCQkJICovCisJCQkJaWYgKChhc2MgPT0gMHgyNSkgJiYgKGFzY3EgPT0gMHgwKSkgeworCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgorCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb25cbiIsIGNwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoc2Vuc2Vfa2V5ID09IE5PVF9SRUFEWSkgeworCQkJCS8qIElmIFNlbnNlIGlzIE5vdCBSZWFkeSwgTG9naWNhbCBVbml0CisJCQkJICogTm90IHJlYWR5LCBNYW51YWwgSW50ZXJ2ZW50aW9uCisJCQkJICogcmVxdWlyZWQKKwkJCQkgKi8KKwkJCQlpZiAoKGFzYyA9PSAweDA0KSAmJiAoYXNjcSA9PSAweDAzKSkgeworCQkJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgorCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IHVuaXQgIgorCQkJCQkJIm5vdCByZWFkeSwgbWFudWFsICIKKwkJCQkJCSJpbnRlcnZlbnRpb24gcmVxdWlyZWRcbiIsIGNwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisKKwkJCS8qIE11c3QgYmUgc29tZSBvdGhlciB0eXBlIG9mIGNoZWNrIGNvbmRpdGlvbiAqLworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGhhcyBjaGVjayBjb25kaXRpb246ICIKKwkJCQkJInVua25vd24gdHlwZTogIgorCQkJCQkiU2Vuc2U6IDB4JXgsIEFTQzogMHgleCwgQVNDUTogMHgleCwgIgorCQkJCQkiUmV0dXJuaW5nIHJlc3VsdDogMHgleCwgIgorCQkJCQkiY21kPVslMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIgorCQkJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XVxuIiwKKwkJCQkJY3AsIHNlbnNlX2tleSwgYXNjLCBhc2NxLAorCQkJCQljbWQtPnJlc3VsdCwKKwkJCQkJY21kLT5jbW5kWzBdLCBjbWQtPmNtbmRbMV0sCisJCQkJCWNtZC0+Y21uZFsyXSwgY21kLT5jbW5kWzNdLAorCQkJCQljbWQtPmNtbmRbNF0sIGNtZC0+Y21uZFs1XSwKKwkJCQkJY21kLT5jbW5kWzZdLCBjbWQtPmNtbmRbN10sCisJCQkJCWNtZC0+Y21uZFs4XSwgY21kLT5jbW5kWzldKTsKKwkJCWJyZWFrOworCQl9CisKKworCQkvKiBQcm9ibGVtIHdhcyBub3QgYSBjaGVjayBjb25kaXRpb24KKwkJICogUGFzcyBpdCB1cCB0byB0aGUgdXBwZXIgbGF5ZXJzLi4uCisJCSAqLworCQlpZiAoZWktPlNjc2lTdGF0dXMpIHsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYXMgc3RhdHVzIDB4JXggIgorCQkJCSJTZW5zZTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4LCAiCisJCQkJIlJldHVybmluZyByZXN1bHQ6IDB4JXhcbiIsCisJCQkJY3AsIGVpLT5TY3NpU3RhdHVzLAorCQkJCXNlbnNlX2tleSwgYXNjLCBhc2NxLAorCQkJCWNtZC0+cmVzdWx0KTsKKwkJfSBlbHNlIHsgIC8qIHNjc2kgc3RhdHVzIGlzIHplcm8/Pz8gSG93Pz8/ICovCisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgU0NTSSBzdGF0dXMgd2FzIDAuICIKKwkJCQkiUmV0dXJuaW5nIG5vIGNvbm5lY3Rpb24uXG4iLCBjcCksCisKKwkJCS8qIE9yZGluYXJpbHksIHRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVuLAorCQkJICogYnV0IHRoZXJlIGlzIGEgYnVnIGluIHNvbWUgcmVsZWFzZWQgZmlybXdhcmUKKwkJCSAqIHJldmlzaW9ucyB0aGF0IGFsbG93cyBpdCB0byBoYXBwZW4gaWYsIGZvcgorCQkJICogZXhhbXBsZSwgYSA0MTAwIGJhY2twbGFuZSBsb3NlcyBwb3dlciBhbmQKKwkJCSAqIHRoZSB0YXBlIGRyaXZlIGlzIGluIGl0LiAgV2UgYXNzdW1lIHRoYXQKKwkJCSAqIGl0J3MgYSBmYXRhbCBlcnJvciBvZiBzb21lIGtpbmQgYmVjYXVzZSB3ZQorCQkJICogY2FuJ3Qgc2hvdyB0aGF0IGl0IHdhc24ndC4gV2Ugd2lsbCBtYWtlIGl0CisJCQkgKiBsb29rIGxpa2Ugc2VsZWN0aW9uIHRpbWVvdXQgc2luY2UgdGhhdCBpcworCQkJICogdGhlIG1vc3QgY29tbW9uIHJlYXNvbiBmb3IgdGhpcyB0byBvY2N1ciwKKwkJCSAqIGFuZCBpdCdzIHNldmVyZSBlbm91Z2guCisJCQkgKi8KKworCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQ01EX0RBVEFfVU5ERVJSVU46IC8qIGxldCBtaWQgbGF5ZXIgaGFuZGxlIGl0LiAqLworCQlicmVhazsKKwljYXNlIENNRF9EQVRBX09WRVJSVU46CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYXMiCisJCQkiIGNvbXBsZXRlZCB3aXRoIGRhdGEgb3ZlcnJ1biAiCisJCQkicmVwb3J0ZWRcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfSU5WQUxJRDogeworCQkvKiBwcmludF9ieXRlcyhjcCwgc2l6ZW9mKCpjcCksIDEsIDApOworCQlwcmludF9jbWQoY3ApOyAqLworCQkvKiBXZSBnZXQgQ01EX0lOVkFMSUQgaWYgeW91IGFkZHJlc3MgYSBub24tZXhpc3RlbnQgZGV2aWNlCisJCSAqIGluc3RlYWQgb2YgYSBzZWxlY3Rpb24gdGltZW91dCAobm8gcmVzcG9uc2UpLiAgWW91IHdpbGwKKwkJICogc2VlIHRoaXMgaWYgeW91IHlhbmsgb3V0IGEgZHJpdmUsIHRoZW4gdHJ5IHRvIGFjY2VzcyBpdC4KKwkJICogVGhpcyBpcyBraW5kIG9mIGEgc2hhbWUgYmVjYXVzZSBpdCBtZWFucyB0aGF0IGFueSBvdGhlcgorCQkgKiBDTURfSU5WQUxJRCAoZS5nLiBkcml2ZXIgYnVnKSB3aWxsIGdldCBpbnRlcnByZXRlZCBhcyBhCisJCSAqIG1pc3NpbmcgdGFyZ2V0LiAqLworCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCX0KKwkJYnJlYWs7CisJY2FzZSBDTURfUFJPVE9DT0xfRVJSOgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzICIKKwkJCSJwcm90b2NvbCBlcnJvciBcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfSEFSRFdBUkVfRVJSOgorCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGhhZCAgaGFyZHdhcmUgZXJyb3JcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfQ09OTkVDVElPTl9MT1NUOgorCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGhhZCBjb25uZWN0aW9uIGxvc3RcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfQUJPUlRFRDoKKwkJY21kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCB3YXMgYWJvcnRlZCB3aXRoIHN0YXR1cyAweCV4XG4iLAorCQkJCWNwLCBlaS0+U2NzaVN0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQ01EX0FCT1JUX0ZBSUxFRDoKKwkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCByZXBvcnRzIGFib3J0IGZhaWxlZFxuIiwgY3ApOworCQlicmVhazsKKwljYXNlIENNRF9VTlNPTElDSVRFRF9BQk9SVDoKKwkJY21kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBhYm9ydGVkIGRvIHRvIGFuIHVuc29saWNpdGVkICIKKwkJCSJhYm9ydFxuIiwgY3ApOworCQlicmVhazsKKwljYXNlIENNRF9USU1FT1VUOgorCQljbWQtPnJlc3VsdCA9IERJRF9USU1FX09VVCA8PCAxNjsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIHRpbWVkb3V0XG4iLCBjcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgcmV0dXJuZWQgdW5rbm93biBzdGF0dXMgJXhcbiIsCisJCQkJY3AsIGVpLT5Db21tYW5kU3RhdHVzKTsKKwl9CisJY21kLT5zY3NpX2RvbmUoY21kKTsKKwljbWRfZnJlZShoLCBjcCk7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9zY3NpX2RldGVjdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNoOworCWludCBlcnJvcjsKKworCXNoID0gc2NzaV9ob3N0X2FsbG9jKCZocHNhX2RyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKGgpKTsKKwlpZiAoc2ggPT0gTlVMTCkKKwkJZ290byBmYWlsOworCisJc2gtPmlvX3BvcnQgPSAwOworCXNoLT5uX2lvX3BvcnQgPSAwOworCXNoLT50aGlzX2lkID0gLTE7CisJc2gtPm1heF9jaGFubmVsID0gMzsKKwlzaC0+bWF4X2NtZF9sZW4gPSBNQVhfQ09NTUFORF9TSVpFOworCXNoLT5tYXhfbHVuID0gSFBTQV9NQVhfTFVOOworCXNoLT5tYXhfaWQgPSBIUFNBX01BWF9MVU47CisJaC0+c2NzaV9ob3N0ID0gc2g7CisJc2gtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpIGg7CisJc2gtPmlycSA9IGgtPmludHJbU0lNUExFX01PREVfSU5UXTsKKwlzaC0+dW5pcXVlX2lkID0gc2gtPmlycTsKKwllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2gsICZoLT5wZGV2LT5kZXYpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX2hvc3RfcHV0OworCXNjc2lfc2Nhbl9ob3N0KHNoKTsKKwlyZXR1cm4gMDsKKworIGZhaWxfaG9zdF9wdXQ6CisJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiaHBzYV9zY3NpX2RldGVjdDogc2NzaV9hZGRfaG9zdCIKKwkJIiBmYWlsZWQgZm9yIGNvbnRyb2xsZXIgJWRcbiIsIGgtPmN0bHIpOworCXNjc2lfaG9zdF9wdXQoc2gpOworCXJldHVybiAtMTsKKyBmYWlsOgorCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2Ffc2NzaV9kZXRlY3Q6IHNjc2lfaG9zdF9hbGxvYyIKKwkJIiBmYWlsZWQgZm9yIGNvbnRyb2xsZXIgJWRcbiIsIGgtPmN0bHIpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgaHBzYV9wY2lfdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJc3RydWN0IENvbW1hbmRMaXN0ICpjLCBpbnQgc2dfdXNlZCwgaW50IGRhdGFfZGlyZWN0aW9uKQoreworCWludCBpOworCXVuaW9uIHU2NGJpdCBhZGRyNjQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7CisJCWFkZHI2NC52YWwzMi5sb3dlciA9IGMtPlNHW2ldLkFkZHIubG93ZXI7CisJCWFkZHI2NC52YWwzMi51cHBlciA9IGMtPlNHW2ldLkFkZHIudXBwZXI7CisJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgKGRtYV9hZGRyX3QpIGFkZHI2NC52YWwsIGMtPlNHW2ldLkxlbiwKKwkJCWRhdGFfZGlyZWN0aW9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfbWFwX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJc3RydWN0IENvbW1hbmRMaXN0ICpjcCwKKwkJdW5zaWduZWQgY2hhciAqYnVmLAorCQlzaXplX3QgYnVmbGVuLAorCQlpbnQgZGF0YV9kaXJlY3Rpb24pCit7CisJX191NjQgYWRkcjY0OworCisJaWYgKGJ1ZmxlbiA9PSAwIHx8IGRhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkgeworCQljcC0+SGVhZGVyLlNHTGlzdCA9IDA7CisJCWNwLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlhZGRyNjQgPSAoX191NjQpIHBjaV9tYXBfc2luZ2xlKHBkZXYsIGJ1ZiwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CisJY3AtPlNHWzBdLkFkZHIubG93ZXIgPQorCSAgKF9fdTMyKSAoYWRkcjY0ICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCWNwLT5TR1swXS5BZGRyLnVwcGVyID0KKwkgIChfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCWNwLT5TR1swXS5MZW4gPSBidWZsZW47CisJY3AtPkhlYWRlci5TR0xpc3QgPSAoX191OCkgMTsgICAvKiBuby4gU0dzIGNvbnRpZyBpbiB0aGlzIGNtZCAqLworCWNwLT5IZWFkZXIuU0dUb3RhbCA9IChfX3UxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CisKKwljLT53YWl0aW5nID0gJndhaXQ7CisJZW5xdWV1ZV9jbWRfYW5kX3N0YXJ0X2lvKGgsIGMpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOworfQorCitzdGF0aWMgdm9pZCBocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF93aXRoX3JldHJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsCisJc3RydWN0IENvbW1hbmRMaXN0ICpjLCBpbnQgZGF0YV9kaXJlY3Rpb24pCit7CisJaW50IHJldHJ5X2NvdW50ID0gMDsKKworCWRvIHsKKwkJbWVtc2V0KGMtPmVycl9pbmZvLCAwLCBzaXplb2YoYy0+ZXJyX2luZm8pKTsKKwkJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZShoLCBjKTsKKwkJcmV0cnlfY291bnQrKzsKKwl9IHdoaWxlIChjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oaCwgYykgJiYgcmV0cnlfY291bnQgPD0gMyk7CisJaHBzYV9wY2lfdW5tYXAoaC0+cGRldiwgYywgMSwgZGF0YV9kaXJlY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCBocHNhX3Njc2lfaW50ZXJwcmV0X2Vycm9yKHN0cnVjdCBDb21tYW5kTGlzdCAqY3ApCit7CisJc3RydWN0IEVycm9ySW5mbyAqZWk7CisJc3RydWN0IGRldmljZSAqZCA9ICZjcC0+aC0+cGRldi0+ZGV2OworCisJZWkgPSBjcC0+ZXJyX2luZm87CisJc3dpdGNoIChlaS0+Q29tbWFuZFN0YXR1cykgeworCWNhc2UgQ01EX1RBUkdFVF9TVEFUVVM6CisJCWRldl93YXJuKGQsICJjbWQgJXAgaGFzIGNvbXBsZXRlZCB3aXRoIGVycm9yc1xuIiwgY3ApOworCQlkZXZfd2FybihkLCAiY21kICVwIGhhcyBTQ1NJIFN0YXR1cyA9ICV4XG4iLCBjcCwKKwkJCQllaS0+U2NzaVN0YXR1cyk7CisJCWlmIChlaS0+U2NzaVN0YXR1cyA9PSAwKQorCQkJZGV2X3dhcm4oZCwgIlNDU0kgc3RhdHVzIGlzIGFibm9ybWFsbHkgemVyby4gICIKKwkJCSIocHJvYmFibHkgaW5kaWNhdGVzIHNlbGVjdGlvbiB0aW1lb3V0ICIKKwkJCSJyZXBvcnRlZCBpbmNvcnJlY3RseSBkdWUgdG8gYSBrbm93biAiCisJCQkiZmlybXdhcmUgYnVnLCBjaXJjYSBKdWx5LCAyMDAxLilcbiIpOworCQlicmVhazsKKwljYXNlIENNRF9EQVRBX1VOREVSUlVOOiAvKiBsZXQgbWlkIGxheWVyIGhhbmRsZSBpdC4gKi8KKwkJCWRldl9pbmZvKGQsICJVTkRFUlJVTlxuIik7CisJCWJyZWFrOworCWNhc2UgQ01EX0RBVEFfT1ZFUlJVTjoKKwkJZGV2X3dhcm4oZCwgImNwICVwIGhhcyBjb21wbGV0ZWQgd2l0aCBkYXRhIG92ZXJydW5cbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfSU5WQUxJRDogeworCQkvKiBjb250cm9sbGVyIHVuZm9ydHVuYXRlbHkgcmVwb3J0cyBTQ1NJIHBhc3N0aHJ1J3MKKwkJICogdG8gbm9uLWV4aXN0ZW50IHRhcmdldHMgYXMgaW52YWxpZCBjb21tYW5kcy4KKwkJICovCisJCWRldl93YXJuKGQsICJjcCAlcCBpcyByZXBvcnRlZCBpbnZhbGlkIChwcm9iYWJseSBtZWFucyAiCisJCQkidGFyZ2V0IGRldmljZSBubyBsb25nZXIgcHJlc2VudClcbiIsIGNwKTsKKwkJLyogcHJpbnRfYnl0ZXMoKHVuc2lnbmVkIGNoYXIgKikgY3AsIHNpemVvZigqY3ApLCAxLCAwKTsKKwkJcHJpbnRfY21kKGNwKTsgICovCisJCX0KKwkJYnJlYWs7CisJY2FzZSBDTURfUFJPVE9DT0xfRVJSOgorCQlkZXZfd2FybihkLCAiY3AgJXAgaGFzIHByb3RvY29sIGVycm9yIFxuIiwgY3ApOworCQlicmVhazsKKwljYXNlIENNRF9IQVJEV0FSRV9FUlI6CisJCS8qIGNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OyAqLworCQlkZXZfd2FybihkLCAiY3AgJXAgaGFkIGhhcmR3YXJlIGVycm9yXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0NPTk5FQ1RJT05fTE9TVDoKKwkJZGV2X3dhcm4oZCwgImNwICVwIGhhZCBjb25uZWN0aW9uIGxvc3RcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfQUJPUlRFRDoKKwkJZGV2X3dhcm4oZCwgImNwICVwIHdhcyBhYm9ydGVkXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0FCT1JUX0ZBSUxFRDoKKwkJZGV2X3dhcm4oZCwgImNwICVwIHJlcG9ydHMgYWJvcnQgZmFpbGVkXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX1VOU09MSUNJVEVEX0FCT1JUOgorCQlkZXZfd2FybihkLCAiY3AgJXAgYWJvcnRlZCBkdWUgdG8gYW4gdW5zb2xpY2l0ZWQgYWJvcnRcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfVElNRU9VVDoKKwkJZGV2X3dhcm4oZCwgImNwICVwIHRpbWVkIG91dFxuIiwgY3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihkLCAiY3AgJXAgcmV0dXJuZWQgdW5rbm93biBzdGF0dXMgJXhcbiIsIGNwLAorCQkJCWVpLT5Db21tYW5kU3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9zY3NpX2RvX2lucXVpcnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAorCQkJdW5zaWduZWQgY2hhciBwYWdlLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQl1bnNpZ25lZCBjaGFyIGJ1ZnNpemUpCit7CisJaW50IHJjID0gSU9fT0s7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCXN0cnVjdCBFcnJvckluZm8gKmVpOworCisJYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCisJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZpbGxfY21kKGMsIEhQU0FfSU5RVUlSWSwgaCwgYnVmLCBidWZzaXplLCBwYWdlLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKKwlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF93aXRoX3JldHJ5KGgsIGMsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJZWkgPSBjLT5lcnJfaW5mbzsKKwlpZiAoZWktPkNvbW1hbmRTdGF0dXMgIT0gMCAmJiBlaS0+Q29tbWFuZFN0YXR1cyAhPSBDTURfREFUQV9VTkRFUlJVTikgeworCQlocHNhX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGMpOworCQlyYyA9IC0xOworCX0KKwljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBocHNhX3NlbmRfcmVzZXQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyKQoreworCWludCByYyA9IElPX09LOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKwlzdHJ1Y3QgRXJyb3JJbmZvICplaTsKKworCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKworCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmaWxsX2NtZChjLCBIUFNBX0RFVklDRV9SRVNFVF9NU0csIGgsIE5VTEwsIDAsIDAsIHNjc2kzYWRkciwgVFlQRV9NU0cpOworCWhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoaCwgYyk7CisJLyogbm8gdW5tYXAgbmVlZGVkIGhlcmUgYmVjYXVzZSBubyBkYXRhIHhmZXIuICovCisKKwllaSA9IGMtPmVycl9pbmZvOworCWlmIChlaS0+Q29tbWFuZFN0YXR1cyAhPSAwKSB7CisJCWhwc2Ffc2NzaV9pbnRlcnByZXRfZXJyb3IoYyk7CisJCXJjID0gLTE7CisJfQorCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBocHNhX2dldF9yYWlkX2xldmVsKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLCB1bnNpZ25lZCBjaGFyICpyYWlkX2xldmVsKQoreworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisKKwkqcmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKKwlidWYgPSBremFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCXJjID0gaHBzYV9zY3NpX2RvX2lucXVpcnkoaCwgc2NzaTNhZGRyLCAweEMxLCBidWYsIDY0KTsKKwlpZiAocmMgPT0gMCkKKwkJKnJhaWRfbGV2ZWwgPSBidWZbOF07CisJaWYgKCpyYWlkX2xldmVsID4gUkFJRF9VTktOT1dOKQorCQkqcmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKKwlrZnJlZShidWYpOworCXJldHVybjsKK30KKworLyogR2V0IHRoZSBkZXZpY2UgaWQgZnJvbSBpbnF1aXJ5IHBhZ2UgMHg4MyAqLworc3RhdGljIGludCBocHNhX2dldF9kZXZpY2VfaWQoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAorCXVuc2lnbmVkIGNoYXIgKmRldmljZV9pZCwgaW50IGJ1ZmxlbikKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciAqYnVmOworCisJaWYgKGJ1ZmxlbiA+IDE2KQorCQlidWZsZW4gPSAxNjsKKwlidWYgPSBremFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC0xOworCXJjID0gaHBzYV9zY3NpX2RvX2lucXVpcnkoaCwgc2NzaTNhZGRyLCAweDgzLCBidWYsIDY0KTsKKwlpZiAocmMgPT0gMCkKKwkJbWVtY3B5KGRldmljZV9pZCwgJmJ1Zls4XSwgYnVmbGVuKTsKKwlrZnJlZShidWYpOworCXJldHVybiByYyAhPSAwOworfQorCitzdGF0aWMgaW50IGhwc2Ffc2NzaV9kb19yZXBvcnRfbHVucyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgbG9naWNhbCwKKwkJc3RydWN0IFJlcG9ydExVTmRhdGEgKmJ1ZiwgaW50IGJ1ZnNpemUsCisJCWludCBleHRlbmRlZF9yZXNwb25zZSkKK3sKKwlpbnQgcmMgPSBJT19PSzsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbOF07CisJc3RydWN0IEVycm9ySW5mbyAqZWk7CisKKwljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtc2V0KCZzY3NpM2FkZHJbMF0sIDAsIDgpOyAvKiBhZGRyZXNzIHRoZSBjb250cm9sbGVyICovCisKKwlmaWxsX2NtZChjLCBsb2dpY2FsID8gSFBTQV9SRVBPUlRfTE9HIDogSFBTQV9SRVBPUlRfUEhZUywgaCwKKwkJYnVmLCBidWZzaXplLCAwLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKKwlpZiAoZXh0ZW5kZWRfcmVzcG9uc2UpCisJCWMtPlJlcXVlc3QuQ0RCWzFdID0gZXh0ZW5kZWRfcmVzcG9uc2U7CisJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfd2l0aF9yZXRyeShoLCBjLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWVpID0gYy0+ZXJyX2luZm87CisJaWYgKGVpLT5Db21tYW5kU3RhdHVzICE9IDAgJiYKKwkgICAgZWktPkNvbW1hbmRTdGF0dXMgIT0gQ01EX0RBVEFfVU5ERVJSVU4pIHsKKwkJaHBzYV9zY3NpX2ludGVycHJldF9lcnJvcihjKTsKKwkJcmMgPSAtMTsKKwl9CisJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhwc2Ffc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpidWYsCisJCWludCBidWZzaXplLCBpbnQgZXh0ZW5kZWRfcmVzcG9uc2UpCit7CisJcmV0dXJuIGhwc2Ffc2NzaV9kb19yZXBvcnRfbHVucyhoLCAwLCBidWYsIGJ1ZnNpemUsIGV4dGVuZGVkX3Jlc3BvbnNlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaHBzYV9zY3NpX2RvX3JlcG9ydF9sb2dfbHVucyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCQlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKwlyZXR1cm4gaHBzYV9zY3NpX2RvX3JlcG9ydF9sdW5zKGgsIDEsIGJ1ZiwgYnVmc2l6ZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocHNhX3NldF9idXNfdGFyZ2V0X2x1bihzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZpY2UsCisJaW50IGJ1cywgaW50IHRhcmdldCwgaW50IGx1bikKK3sKKwlkZXZpY2UtPmJ1cyA9IGJ1czsKKwlkZXZpY2UtPnRhcmdldCA9IHRhcmdldDsKKwlkZXZpY2UtPmx1biA9IGx1bjsKK30KKworc3RhdGljIGludCBocHNhX3VwZGF0ZV9kZXZpY2VfaW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyW10sIHN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRoaXNfZGV2aWNlKQoreworI2RlZmluZSBPQkRSX1RBUEVfSU5RX1NJWkUgNDkKKwl1bnNpZ25lZCBjaGFyICppbnFfYnVmZiA9IE5VTEw7CisKKwlpbnFfYnVmZiA9IGttYWxsb2MoT0JEUl9UQVBFX0lOUV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlucV9idWZmKQorCQlnb3RvIGJhaWxfb3V0OworCisJbWVtc2V0KGlucV9idWZmLCAwLCBPQkRSX1RBUEVfSU5RX1NJWkUpOworCS8qIERvIGFuIGlucXVpcnkgdG8gdGhlIGRldmljZSB0byBzZWUgd2hhdCBpdCBpcy4gKi8KKwlpZiAoaHBzYV9zY3NpX2RvX2lucXVpcnkoaCwgc2NzaTNhZGRyLCAwLCBpbnFfYnVmZiwKKwkJKHVuc2lnbmVkIGNoYXIpIE9CRFJfVEFQRV9JTlFfU0laRSkgIT0gMCkgeworCQkvKiBJbnF1aXJ5IGZhaWxlZCAobXNnIHByaW50ZWQgYWxyZWFkeSkgKi8KKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAorCQkJImhwc2FfdXBkYXRlX2RldmljZV9pbmZvOiBpbnF1aXJ5IGZhaWxlZFxuIik7CisJCWdvdG8gYmFpbF9vdXQ7CisJfQorCisJLyogQXMgYSBzaWRlIGVmZmVjdCwgcmVjb3JkIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlcgorCSAqIGlmIHdlIGhhcHBlbiB0byBiZSB0YWxraW5nIHRvIHRoZSBSQUlEIGNvbnRyb2xsZXIuCisJICovCisJaWYgKGlzX2hiYV9sdW5pZChzY3NpM2FkZHIpKQorCQltZW1jcHkoaC0+ZmlybV92ZXIsICZpbnFfYnVmZlszMl0sIDQpOworCisJdGhpc19kZXZpY2UtPmRldnR5cGUgPSAoaW5xX2J1ZmZbMF0gJiAweDFmKTsKKwltZW1jcHkodGhpc19kZXZpY2UtPnNjc2kzYWRkciwgc2NzaTNhZGRyLCA4KTsKKwltZW1jcHkodGhpc19kZXZpY2UtPnZlbmRvciwgJmlucV9idWZmWzhdLAorCQlzaXplb2YodGhpc19kZXZpY2UtPnZlbmRvcikpOworCW1lbWNweSh0aGlzX2RldmljZS0+bW9kZWwsICZpbnFfYnVmZlsxNl0sCisJCXNpemVvZih0aGlzX2RldmljZS0+bW9kZWwpKTsKKwltZW1jcHkodGhpc19kZXZpY2UtPnJldmlzaW9uLCAmaW5xX2J1ZmZbMzJdLAorCQlzaXplb2YodGhpc19kZXZpY2UtPnJldmlzaW9uKSk7CisJbWVtc2V0KHRoaXNfZGV2aWNlLT5kZXZpY2VfaWQsIDAsCisJCXNpemVvZih0aGlzX2RldmljZS0+ZGV2aWNlX2lkKSk7CisJaHBzYV9nZXRfZGV2aWNlX2lkKGgsIHNjc2kzYWRkciwgdGhpc19kZXZpY2UtPmRldmljZV9pZCwKKwkJc2l6ZW9mKHRoaXNfZGV2aWNlLT5kZXZpY2VfaWQpKTsKKworCWlmICh0aGlzX2RldmljZS0+ZGV2dHlwZSA9PSBUWVBFX0RJU0sgJiYKKwkJaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKHNjc2kzYWRkcikpCisJCWhwc2FfZ2V0X3JhaWRfbGV2ZWwoaCwgc2NzaTNhZGRyLCAmdGhpc19kZXZpY2UtPnJhaWRfbGV2ZWwpOworCWVsc2UKKwkJdGhpc19kZXZpY2UtPnJhaWRfbGV2ZWwgPSBSQUlEX1VOS05PV047CisKKwlrZnJlZShpbnFfYnVmZik7CisJcmV0dXJuIDA7CisKK2JhaWxfb3V0OgorCWtmcmVlKGlucV9idWZmKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKm1zYTJ4eHhfbW9kZWxbXSA9IHsKKwkiTVNBMjAxMiIsCisJIk1TQTIwMjQiLAorCSJNU0EyMzEyIiwKKwkiTVNBMjMyNCIsCisJTlVMTCwKK307CisKK3N0YXRpYyBpbnQgaXNfbXNhMnh4eChzdHJ1Y3QgY3Rscl9pbmZvICpoLCBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZpY2UpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBtc2EyeHh4X21vZGVsW2ldOyBpKyspCisJCWlmIChzdHJuY21wKGRldmljZS0+bW9kZWwsIG1zYTJ4eHhfbW9kZWxbaV0sCisJCQlzdHJsZW4obXNhMnh4eF9tb2RlbFtpXSkpID09IDApCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGFzc2lnbiBidXMsIHRhcmdldCwgbHVuIG1hcHBpbmcgb2YgZGV2aWNlcy4KKyAqIFB1dHMgbm9uLW1zYTJ4eHggbG9naWNhbCB2b2x1bWVzIG9uIGJ1cyAwLCBtc2EyeHh4IGxvZ2ljYWwKKyAqIHZvbHVtZXMgb24gYnVzIDEsIHBoeXNpY2FsIGRldmljZXMgb24gYnVzIDIuIGFuZCB0aGUgaGJhIG9uIGJ1cyAzLgorICogTG9naWNhbCBkcml2ZSB0YXJnZXQgYW5kIGx1biBhcmUgYXNzaWduZWQgYXQgdGhpcyB0aW1lLCBidXQKKyAqIHBoeXNpY2FsIGRldmljZSBsdW4gYW5kIHRhcmdldCBhc3NpZ25tZW50IGFyZSBkZWZlcnJlZCAoYXNzaWduZWQKKyAqIGluIGhwc2FfZmluZF90YXJnZXRfbHVuLCBjYWxsZWQgYnkgaHBzYV9zY3NpX2FkZF9lbnRyeS4pCisgKi8KK3N0YXRpYyB2b2lkIGZpZ3VyZV9idXNfdGFyZ2V0X2x1bihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCV9fdTggKmx1bmFkZHJieXRlcywgaW50ICpidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1biwKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZpY2UpCit7CisKKwlfX3UzMiBsdW5pZDsKKworCWlmIChpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUobHVuYWRkcmJ5dGVzKSkgeworCQkvKiBsb2dpY2FsIGRldmljZSAqLworCQltZW1jcHkoJmx1bmlkLCBsdW5hZGRyYnl0ZXMsIHNpemVvZihsdW5pZCkpOworCQlsdW5pZCA9IGxlMzJfdG9fY3B1KGx1bmlkKTsKKworCQlpZiAoaXNfbXNhMnh4eChoLCBkZXZpY2UpKSB7CisJCQkqYnVzID0gMTsKKwkJCSp0YXJnZXQgPSAobHVuaWQgPj4gMTYpICYgMHgzZmZmOworCQkJKmx1biA9IGx1bmlkICYgMHgwMGZmOworCQl9IGVsc2UgeworCQkJKmJ1cyA9IDA7CisJCQkqbHVuID0gMDsKKwkJCSp0YXJnZXQgPSBsdW5pZCAmIDB4M2ZmZjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHBoeXNpY2FsIGRldmljZSAqLworCQlpZiAoaXNfaGJhX2x1bmlkKGx1bmFkZHJieXRlcykpCisJCQkqYnVzID0gMzsKKwkJZWxzZQorCQkJKmJ1cyA9IDI7CisJCSp0YXJnZXQgPSAtMTsKKwkJKmx1biA9IC0xOyAvKiB3ZSB3aWxsIGZpbGwgdGhlc2UgaW4gbGF0ZXIuICovCisJfQorfQorCisvKgorICogSWYgdGhlcmUgaXMgbm8gbHVuIDAgb24gYSB0YXJnZXQsIGxpbnV4IHdvbid0IGZpbmQgYW55IGRldmljZXMuCisgKiBGb3IgdGhlIE1TQTJ4eHggYm94ZXMsIHdlIGhhdmUgdG8gbWFudWFsbHkgZGV0ZWN0IHRoZSBlbmNsb3N1cmUKKyAqIHdoaWNoIGlzIGF0IGx1biB6ZXJvLCBhcyBDQ0lTU19SRVBPUlRfUEhZU0lDQUxfTFVOUyBkb2Vzbid0IHJlcG9ydAorICogaXQgZm9yIHNvbWUgcmVhc29uLiAgKnRtcGRldmljZSBpcyB0aGUgdGFyZ2V0IHdlJ3JlIGFkZGluZywKKyAqIHRoaXNfZGV2aWNlIGlzIGEgcG9pbnRlciBpbnRvIHRoZSBjdXJyZW50IGVsZW1lbnQgb2YgY3VycmVudHNkW10KKyAqIHRoYXQgd2UncmUgYnVpbGRpbmcgdXAgaW4gdXBkYXRlX3Njc2lfZGV2aWNlcygpLCBiZWxvdy4KKyAqIGx1bnplcm9iaXRzIGlzIGEgYml0bWFwIHRoYXQgdHJhY2tzIHdoaWNoIHRhcmdldHMgYWxyZWFkeSBoYXZlIGEKKyAqIGx1biAwIGFzc2lnbmVkLgorICogUmV0dXJucyAxIGlmIGFuIGVuY2xvc3VyZSB3YXMgYWRkZWQsIDAgaWYgbm90LgorICovCitzdGF0aWMgaW50IGFkZF9tc2EyeHh4X2VuY2xvc3VyZV9kZXZpY2Uoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0bXBkZXZpY2UsCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqdGhpc19kZXZpY2UsIF9fdTggKmx1bmFkZHJieXRlcywKKwlpbnQgYnVzLCBpbnQgdGFyZ2V0LCBpbnQgbHVuLCB1bnNpZ25lZCBsb25nIGx1bnplcm9iaXRzW10sCisJaW50ICpubXNhMnh4eF9lbmNsb3N1cmVzKQoreworCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyWzhdOworCisJaWYgKHRlc3RfYml0KHRhcmdldCwgbHVuemVyb2JpdHMpKQorCQlyZXR1cm4gMDsgLyogVGhlcmUgaXMgYWxyZWFkeSBhIGx1biAwIG9uIHRoaXMgdGFyZ2V0LiAqLworCisJaWYgKCFpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUobHVuYWRkcmJ5dGVzKSkKKwkJcmV0dXJuIDA7IC8qIEl0J3MgdGhlIGxvZ2ljYWwgdGFyZ2V0cyB0aGF0IG1heSBsYWNrIGx1biAwLiAqLworCisJaWYgKCFpc19tc2EyeHh4KGgsIHRtcGRldmljZSkpCisJCXJldHVybiAwOyAvKiBJdCdzIG9ubHkgdGhlIE1TQTJ4eHggdGhhdCBoYXZlIHRoaXMgcHJvYmxlbS4gKi8KKworCWlmIChsdW4gPT0gMCkgLyogaWYgbHVuIGlzIDAsIHRoZW4gb2J2aW91c2x5IHdlIGhhdmUgYSBsdW4gMC4gKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfaGJhX2x1bmlkKHNjc2kzYWRkcikpCisJCXJldHVybiAwOyAvKiBEb24ndCBhZGQgdGhlIFJBSUQgY29udHJvbGxlciBoZXJlLiAqLworCisjZGVmaW5lIE1BWF9NU0EyWFhYX0VOQ0xPU1VSRVMgMzIKKwlpZiAoKm5tc2EyeHh4X2VuY2xvc3VyZXMgPj0gTUFYX01TQTJYWFhfRU5DTE9TVVJFUykgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiTWF4aW11bSBudW1iZXIgb2YgTVNBMlhYWCAiCisJCQkiZW5jbG9zdXJlcyBleGNlZWRlZC4gIENoZWNrIHlvdXIgaGFyZHdhcmUgIgorCQkJImNvbmZpZ3VyYXRpb24uIik7CisJCXJldHVybiAwOworCX0KKworCW1lbXNldChzY3NpM2FkZHIsIDAsIDgpOworCXNjc2kzYWRkclszXSA9IHRhcmdldDsKKwlpZiAoaHBzYV91cGRhdGVfZGV2aWNlX2luZm8oaCwgc2NzaTNhZGRyLCB0aGlzX2RldmljZSkpCisJCXJldHVybiAwOworCSgqbm1zYTJ4eHhfZW5jbG9zdXJlcykrKzsKKwlocHNhX3NldF9idXNfdGFyZ2V0X2x1bih0aGlzX2RldmljZSwgYnVzLCB0YXJnZXQsIDApOworCXNldF9iaXQodGFyZ2V0LCBsdW56ZXJvYml0cyk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBEbyBDSVNTX1JFUE9SVF9QSFlTIGFuZCBDSVNTX1JFUE9SVF9MT0cuICBEYXRhIGlzIHJldHVybmVkIGluIHBoeXNkZXYsCisgKiBsb2dkZXYuICBUaGUgbnVtYmVyIG9mIGx1bnMgaW4gcGh5c2RldiBhbmQgbG9nZGV2IGFyZSByZXR1cm5lZCBpbgorICogKm5waHlzaWNhbHMgYW5kICpubG9naWNhbHMsIHJlc3BlY3RpdmVseS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgaHBzYV9nYXRoZXJfbHVuX2luZm8oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlpbnQgcmVwb3J0bHVuc2l6ZSwKKwlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqcGh5c2RldiwgX191MzIgKm5waHlzaWNhbHMsCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2RldiwgX191MzIgKm5sb2dpY2FscykKK3sKKwlpZiAoaHBzYV9zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoaCwgcGh5c2RldiwgcmVwb3J0bHVuc2l6ZSwgMCkpIHsKKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IHBoeXNpY2FsIExVTnMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWVtY3B5KG5waHlzaWNhbHMsICZwaHlzZGV2LT5MVU5MaXN0TGVuZ3RoWzBdLCBzaXplb2YoKm5waHlzaWNhbHMpKTsKKwkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCpucGh5c2ljYWxzKSAvIDg7CisjaWZkZWYgREVCVUcKKwlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAibnVtYmVyIG9mIHBoeXNpY2FsIGx1bnMgaXMgJWRcbiIsICpucGh5c2ljYWxzKTsKKyNlbmRpZgorCWlmICgqbnBoeXNpY2FscyA+IEhQU0FfTUFYX1BIWVNfTFVOKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJtYXhpbXVtIHBoeXNpY2FsIExVTnMgKCVkKSBleGNlZWRlZC4iCisJCQkiICAlZCBMVU5zIGlnbm9yZWQuXG4iLCBIUFNBX01BWF9QSFlTX0xVTiwKKwkJCSpucGh5c2ljYWxzIC0gSFBTQV9NQVhfUEhZU19MVU4pOworCQkqbnBoeXNpY2FscyA9IEhQU0FfTUFYX1BIWVNfTFVOOworCX0KKwlpZiAoaHBzYV9zY3NpX2RvX3JlcG9ydF9sb2dfbHVucyhoLCBsb2dkZXYsIHJlcG9ydGx1bnNpemUpKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInJlcG9ydCBsb2dpY2FsIExVTnMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWVtY3B5KG5sb2dpY2FscywgJmxvZ2Rldi0+TFVOTGlzdExlbmd0aFswXSwgc2l6ZW9mKCpubG9naWNhbHMpKTsKKwkqbmxvZ2ljYWxzID0gYmUzMl90b19jcHUoKm5sb2dpY2FscykgLyA4OworI2lmZGVmIERFQlVHCisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIm51bWJlciBvZiBsb2dpY2FsIGx1bnMgaXMgJWRcbiIsICpubG9naWNhbHMpOworI2VuZGlmCisJLyogUmVqZWN0IExvZ2ljYWxzIGluIGV4Y2VzcyBvZiBvdXIgbWF4IGNhcGFiaWxpdHkuICovCisJaWYgKCpubG9naWNhbHMgPiBIUFNBX01BWF9MVU4pIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCSJtYXhpbXVtIGxvZ2ljYWwgTFVOcyAoJWQpIGV4Y2VlZGVkLiAgIgorCQkJIiVkIExVTnMgaWdub3JlZC5cbiIsIEhQU0FfTUFYX0xVTiwKKwkJCSpubG9naWNhbHMgLSBIUFNBX01BWF9MVU4pOworCQkJKm5sb2dpY2FscyA9IEhQU0FfTUFYX0xVTjsKKwl9CisJaWYgKCpubG9naWNhbHMgKyAqbnBoeXNpY2FscyA+IEhQU0FfTUFYX1BIWVNfTFVOKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkibWF4aW11bSBsb2dpY2FsICsgcGh5c2ljYWwgTFVOcyAoJWQpIGV4Y2VlZGVkLiAiCisJCQkiJWQgTFVOcyBpZ25vcmVkLlxuIiwgSFBTQV9NQVhfUEhZU19MVU4sCisJCQkqbnBoeXNpY2FscyArICpubG9naWNhbHMgLSBIUFNBX01BWF9QSFlTX0xVTik7CisJCSpubG9naWNhbHMgPSBIUFNBX01BWF9QSFlTX0xVTiAtICpucGh5c2ljYWxzOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8pCit7CisJLyogdGhlIGlkZWEgaGVyZSBpcyB3ZSBjb3VsZCBnZXQgbm90aWZpZWQKKwkgKiB0aGF0IHNvbWUgZGV2aWNlcyBoYXZlIGNoYW5nZWQsIHNvIHdlIGRvIGEgcmVwb3J0CisJICogcGh5c2ljYWwgbHVucyBhbmQgcmVwb3J0IGxvZ2ljYWwgbHVucyBjbWQsIGFuZCBhZGp1c3QKKwkgKiBvdXIgbGlzdCBvZiBkZXZpY2VzIGFjY29yZGluZ2x5LgorCSAqCisJICogVGhlIHNjc2kzYWRkcidzIG9mIGRldmljZXMgd29uJ3QgY2hhbmdlIHNvIGxvbmcgYXMgdGhlCisJICogYWRhcHRlciBpcyBub3QgcmVzZXQuICBUaGF0IG1lYW5zIHdlIGNhbiByZXNjYW4gYW5kCisJICogdGVsbCB3aGljaCBkZXZpY2VzIHdlIGFscmVhZHkga25vdyBhYm91dCwgdnMuIG5ldworCSAqIGRldmljZXMsIHZzLiAgZGlzYXBwZWFyaW5nIGRldmljZXMuCisJICovCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXZfbGlzdCA9IE5VTEw7CisJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2Rldl9saXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICppbnFfYnVmZiA9IE5VTEw7CisJX191MzIgbnBoeXNpY2FscyA9IDA7CisJX191MzIgbmxvZ2ljYWxzID0gMDsKKwlfX3UzMiBuZGV2X2FsbG9jYXRlZCA9IDA7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqKmN1cnJlbnRzZCwgKnRoaXNfZGV2aWNlLCAqdG1wZGV2aWNlOworCWludCBuY3VycmVudCA9IDA7CisJaW50IHJlcG9ydGx1bnNpemUgPSBzaXplb2YoKnBoeXNkZXZfbGlzdCkgKyBIUFNBX01BWF9QSFlTX0xVTiAqIDg7CisJaW50IGksIG5tc2EyeHh4X2VuY2xvc3VyZXMsIG5kZXZzX3RvX2FsbG9jYXRlOworCWludCBidXMsIHRhcmdldCwgbHVuOworCURFQ0xBUkVfQklUTUFQKGx1bnplcm9iaXRzLCBIUFNBX01BWF9UQVJHRVRTX1BFUl9DVExSKTsKKworCWN1cnJlbnRzZCA9IGt6YWxsb2Moc2l6ZW9mKCpjdXJyZW50c2QpICogSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEsCisJCUdGUF9LRVJORUwpOworCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2MocmVwb3J0bHVuc2l6ZSwgR0ZQX0tFUk5FTCk7CisJbG9nZGV2X2xpc3QgPSBremFsbG9jKHJlcG9ydGx1bnNpemUsIEdGUF9LRVJORUwpOworCWlucV9idWZmID0ga21hbGxvYyhPQkRSX1RBUEVfSU5RX1NJWkUsIEdGUF9LRVJORUwpOworCXRtcGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY3VycmVudHNkIHx8ICFwaHlzZGV2X2xpc3QgfHwgIWxvZ2Rldl9saXN0IHx8CisJCSFpbnFfYnVmZiB8fCAhdG1wZGV2aWNlKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIG91dDsKKwl9CisJbWVtc2V0KGx1bnplcm9iaXRzLCAwLCBzaXplb2YobHVuemVyb2JpdHMpKTsKKworCWlmIChocHNhX2dhdGhlcl9sdW5faW5mbyhoLCByZXBvcnRsdW5zaXplLCBwaHlzZGV2X2xpc3QsICZucGh5c2ljYWxzLAorCQkJbG9nZGV2X2xpc3QsICZubG9naWNhbHMpKQorCQlnb3RvIG91dDsKKworCS8qIFdlIG1pZ2h0IHNlZSB1cCB0byAzMiBNU0EyeHh4IGVuY2xvc3VyZXMsIGFjdHVhbGx5IDggb2YgdGhlbQorCSAqIGJ1dCBlYWNoIG9mIHRoZW0gNCB0aW1lcyB0aHJvdWdoIGRpZmZlcmVudCBwYXRocy4gIFRoZSBwbHVzIDEKKwkgKiBpcyBmb3IgdGhlIFJBSUQgY29udHJvbGxlci4KKwkgKi8KKwluZGV2c190b19hbGxvY2F0ZSA9IG5waHlzaWNhbHMgKyBubG9naWNhbHMgKyBNQVhfTVNBMlhYWF9FTkNMT1NVUkVTICsgMTsKKworCS8qIEFsbG9jYXRlIHRoZSBwZXIgZGV2aWNlIHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRldnNfdG9fYWxsb2NhdGU7IGkrKykgeworCQljdXJyZW50c2RbaV0gPSBremFsbG9jKHNpemVvZigqY3VycmVudHNkW2ldKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY3VycmVudHNkW2ldKSB7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBhdCAlczolZFxuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJZ290byBvdXQ7CisJCX0KKwkJbmRldl9hbGxvY2F0ZWQrKzsKKwl9CisKKwkvKiBhZGp1c3Qgb3VyIHRhYmxlIG9mIGRldmljZXMgKi8KKwlubXNhMnh4eF9lbmNsb3N1cmVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnBoeXNpY2FscyArIG5sb2dpY2FscyArIDE7IGkrKykgeworCQlfX3U4ICpsdW5hZGRyYnl0ZXM7CisKKwkJLyogRmlndXJlIG91dCB3aGVyZSB0aGUgTFVOIElEIGluZm8gaXMgY29taW5nIGZyb20gKi8KKwkJaWYgKGkgPCBucGh5c2ljYWxzKQorCQkJbHVuYWRkcmJ5dGVzID0gJnBoeXNkZXZfbGlzdC0+TFVOW2ldWzBdOworCQllbHNlCisJCQlpZiAoaSA8IG5waHlzaWNhbHMgKyBubG9naWNhbHMpCisJCQkJbHVuYWRkcmJ5dGVzID0KKwkJCQkJJmxvZ2Rldl9saXN0LT5MVU5baS1ucGh5c2ljYWxzXVswXTsKKwkJCWVsc2UgLyogamFtIGluIHRoZSBSQUlEIGNvbnRyb2xsZXIgYXQgdGhlIGVuZCAqLworCQkJCWx1bmFkZHJieXRlcyA9IFJBSURfQ1RMUl9MVU5JRDsKKworCQkvKiBza2lwIG1hc2tlZCBwaHlzaWNhbCBkZXZpY2VzLiAqLworCQlpZiAobHVuYWRkcmJ5dGVzWzNdICYgMHhDMCAmJiBpIDwgbnBoeXNpY2FscykKKwkJCWNvbnRpbnVlOworCisJCS8qIEdldCBkZXZpY2UgdHlwZSwgdmVuZG9yLCBtb2RlbCwgZGV2aWNlIGlkICovCisJCWlmIChocHNhX3VwZGF0ZV9kZXZpY2VfaW5mbyhoLCBsdW5hZGRyYnl0ZXMsIHRtcGRldmljZSkpCisJCQljb250aW51ZTsgLyogc2tpcCBpdCBpZiB3ZSBjYW4ndCB0YWxrIHRvIGl0LiAqLworCQlmaWd1cmVfYnVzX3RhcmdldF9sdW4oaCwgbHVuYWRkcmJ5dGVzLCAmYnVzLCAmdGFyZ2V0LCAmbHVuLAorCQkJdG1wZGV2aWNlKTsKKwkJdGhpc19kZXZpY2UgPSBjdXJyZW50c2RbbmN1cnJlbnRdOworCisJCS8qCisJCSAqIEZvciB0aGUgbXNhMnh4eCBib3hlcywgd2UgaGF2ZSB0byBpbnNlcnQgYSBMVU4gMCB3aGljaAorCQkgKiBkb2Vzbid0IHNob3cgdXAgaW4gQ0NJU1NfUkVQT1JUX1BIWVNJQ0FMIGRhdGEsIGJ1dCB0aGVyZQorCQkgKiBpcyBub25ldGhlbGVzcyBhbiBlbmNsb3N1cmUgZGV2aWNlIHRoZXJlLiAgV2UgaGF2ZSB0bworCQkgKiBwcmVzZW50IHRoYXQgb3RoZXJ3aXNlIGxpbnV4IHdvbid0IGZpbmQgYW55dGhpbmcgaWYKKwkJICogdGhlcmUgaXMgbm8gbHVuIDAuCisJCSAqLworCQlpZiAoYWRkX21zYTJ4eHhfZW5jbG9zdXJlX2RldmljZShoLCB0bXBkZXZpY2UsIHRoaXNfZGV2aWNlLAorCQkJCWx1bmFkZHJieXRlcywgYnVzLCB0YXJnZXQsIGx1biwgbHVuemVyb2JpdHMsCisJCQkJJm5tc2EyeHh4X2VuY2xvc3VyZXMpKSB7CisJCQluY3VycmVudCsrOworCQkJdGhpc19kZXZpY2UgPSBjdXJyZW50c2RbbmN1cnJlbnRdOworCQl9CisKKwkJKnRoaXNfZGV2aWNlID0gKnRtcGRldmljZTsKKwkJaHBzYV9zZXRfYnVzX3RhcmdldF9sdW4odGhpc19kZXZpY2UsIGJ1cywgdGFyZ2V0LCBsdW4pOworCisJCXN3aXRjaCAodGhpc19kZXZpY2UtPmRldnR5cGUpIHsKKwkJY2FzZSBUWVBFX1JPTTogeworCQkJLyogV2UgZG9uJ3QgKnJlYWxseSogc3VwcG9ydCBhY3R1YWwgQ0QtUk9NIGRldmljZXMsCisJCQkgKiBqdXN0ICJPbmUgQnV0dG9uIERpc2FzdGVyIFJlY292ZXJ5IiB0YXBlIGRyaXZlCisJCQkgKiB3aGljaCB0ZW1wb3JhcmlseSBwcmV0ZW5kcyB0byBiZSBhIENELVJPTSBkcml2ZS4KKwkJCSAqIFNvIHdlIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpcyByZWFsbHkgYW4gT0JEUiB0YXBlCisJCQkgKiBkZXZpY2UgYnkgY2hlY2tpbmcgZm9yICIkRFItMTAiIGluIGJ5dGVzIDQzLTQ4IG9mCisJCQkgKiB0aGUgaW5xdWlyeSBkYXRhLgorCQkJICovCisJCQkJY2hhciBvYmRyX3NpZ1s3XTsKKyNkZWZpbmUgT0JEUl9UQVBFX1NJRyAiJERSLTEwIgorCQkJCXN0cm5jcHkob2Jkcl9zaWcsICZpbnFfYnVmZls0M10sIDYpOworCQkJCW9iZHJfc2lnWzZdID0gJ1wwJzsKKwkJCQlpZiAoc3RybmNtcChvYmRyX3NpZywgT0JEUl9UQVBFX1NJRywgNikgIT0gMCkKKwkJCQkJLyogTm90IE9CRFIgZGV2aWNlLCBpZ25vcmUgaXQuICovCisJCQkJCWJyZWFrOworCQkJfQorCQkJbmN1cnJlbnQrKzsKKwkJCWJyZWFrOworCQljYXNlIFRZUEVfRElTSzoKKwkJCWlmIChpIDwgbnBoeXNpY2FscykKKwkJCQlicmVhazsKKwkJCW5jdXJyZW50Kys7CisJCQlicmVhazsKKwkJY2FzZSBUWVBFX1RBUEU6CisJCWNhc2UgVFlQRV9NRURJVU1fQ0hBTkdFUjoKKwkJCW5jdXJyZW50Kys7CisJCQlicmVhazsKKwkJY2FzZSBUWVBFX1JBSUQ6CisJCQkvKiBPbmx5IHByZXNlbnQgdGhlIFNtYXJ0YXJyYXkgSEJBIGFzIGEgUkFJRCBjb250cm9sbGVyLgorCQkJICogSWYgaXQncyBhIFJBSUQgY29udHJvbGxlciBvdGhlciB0aGFuIHRoZSBIQkEgaXRzZWxmCisJCQkgKiAoYW4gZXh0ZXJuYWwgUkFJRCBjb250cm9sbGVyLCBNU0E1MDAgb3Igc2ltaWxhcikKKwkJCSAqIGRvbid0IHByZXNlbnQgaXQuCisJCQkgKi8KKwkJCWlmICghaXNfaGJhX2x1bmlkKGx1bmFkZHJieXRlcykpCisJCQkJYnJlYWs7CisJCQluY3VycmVudCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAobmN1cnJlbnQgPj0gSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEpCisJCQlicmVhazsKKwl9CisJYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShoLCBob3N0bm8sIGN1cnJlbnRzZCwgbmN1cnJlbnQpOworb3V0OgorCWtmcmVlKHRtcGRldmljZSk7CisJZm9yIChpID0gMDsgaSA8IG5kZXZfYWxsb2NhdGVkOyBpKyspCisJCWtmcmVlKGN1cnJlbnRzZFtpXSk7CisJa2ZyZWUoY3VycmVudHNkKTsKKwlrZnJlZShpbnFfYnVmZik7CisJa2ZyZWUocGh5c2Rldl9saXN0KTsKKwlrZnJlZShsb2dkZXZfbGlzdCk7CisJcmV0dXJuOworfQorCisvKiBocHNhX3NjYXR0ZXJfZ2F0aGVyIHRha2VzIGEgc3RydWN0IHNjc2lfY21uZCwgKGNtZCksIGFuZCBkb2VzIHRoZSBwY2kKKyAqIGRtYSBtYXBwaW5nICBhbmQgZmlsbHMgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMgb2YgdGhlCisgKiBocHNhIGNvbW1hbmQsIGNwLgorICovCitzdGF0aWMgaW50IGhwc2Ffc2NhdHRlcl9nYXRoZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBDb21tYW5kTGlzdCAqY3AsCisJCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJX191NjQgYWRkcjY0OworCWludCB1c2Vfc2csIGk7CisKKwlCVUdfT04oc2NzaV9zZ19jb3VudChjbWQpID4gTUFYU0dFTlRSSUVTKTsKKworCXVzZV9zZyA9IHNjc2lfZG1hX21hcChjbWQpOworCWlmICh1c2Vfc2cgPCAwKQorCQlyZXR1cm4gdXNlX3NnOworCisJaWYgKCF1c2Vfc2cpCisJCWdvdG8gc2dsaXN0X2ZpbmlzaGVkOworCisJc2NzaV9mb3JfZWFjaF9zZyhjbWQsIHNnLCB1c2Vfc2csIGkpIHsKKwkJYWRkcjY0ID0gKF9fdTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKKwkJY3AtPlNHW2ldLkFkZHIubG93ZXIgPQorCQkJKF9fdTMyKSAoYWRkcjY0ICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCQljcC0+U0dbaV0uQWRkci51cHBlciA9CisJCQkoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkJY3AtPlNHW2ldLkxlbiA9IGxlbjsKKwkJY3AtPlNHW2ldLkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCisJfQorCitzZ2xpc3RfZmluaXNoZWQ6CisKKwljcC0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIHVzZV9zZzsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwl2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldjsKKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEdldCB0aGUgcHRyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZSBvdXQgb2YgY21kLT5ob3N0LiAqLworCWggPSBzZGV2X3RvX2hiYShjbWQtPmRldmljZSk7CisJZGV2ID0gY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCWlmICghZGV2KSB7CisJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWRvbmUoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCW1lbWNweShzY3NpM2FkZHIsIGRldi0+c2NzaTNhZGRyLCBzaXplb2Yoc2NzaTNhZGRyKSk7CisKKwkvKiBOZWVkIGEgbG9jayBhcyB0aGlzIGlzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBwb29sICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwljID0gY21kX2FsbG9jKGgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlpZiAoYyA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwkvKiBGaWxsIGluIHRoZSBjb21tYW5kIGxpc3QgaGVhZGVyICovCisKKwljbWQtPnNjc2lfZG9uZSA9IGRvbmU7ICAgIC8qIHNhdmUgdGhpcyBmb3IgdXNlIGJ5IGNvbXBsZXRpb24gY29kZSAqLworCisJLyogc2F2ZSBjIGluIGNhc2Ugd2UgaGF2ZSB0byBhYm9ydCBpdCAgKi8KKwljbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjOworCisJYy0+Y21kX3R5cGUgPSBDTURfU0NTSTsKKwljLT5zY3NpX2NtZCA9IGNtZDsKKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KKwltZW1jcHkoJmMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzWzBdLCAmc2NzaTNhZGRyWzBdLCA4KTsKKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsgIC8qIFVzZSBrLiBhZGRyZXNzIG9mIGNtZCBhcyB0YWcgKi8KKworCS8qIEZpbGwgaW4gdGhlIHJlcXVlc3QgYmxvY2suLi4gKi8KKworCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJbWVtc2V0KGMtPlJlcXVlc3QuQ0RCLCAwLCBzaXplb2YoYy0+UmVxdWVzdC5DREIpKTsKKwlCVUdfT04oY21kLT5jbWRfbGVuID4gc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CisJYy0+UmVxdWVzdC5DREJMZW4gPSBjbWQtPmNtZF9sZW47CisJbWVtY3B5KGMtPlJlcXVlc3QuQ0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7CisJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsKKwljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJc3dpdGNoIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJYnJlYWs7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCWJyZWFrOworCWNhc2UgRE1BX05PTkU6CisJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX05PTkU7CisJCWJyZWFrOworCWNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CisJCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBhIGJ1Z2d5IGFwcGxpY2F0aW9uIGRvZXMgYSBzY3NpIHBhc3N0aHJ1CisJCSAqIGFuZCBzZXRzIGJvdGggaW5sZW4gYW5kIG91dGxlbiB0byBub24temVyby4gKCBzZWUKKwkJICogLi4vc2NzaS9zY3NpX2lvY3RsLmM6c2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSApCisJCSAqLworCisJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JTVkQ7CisJCS8qIFRoaXMgaXMgdGVjaG5pY2FsbHkgd3JvbmcsIGFuZCBocHNhIGNvbnRyb2xsZXJzIHNob3VsZAorCQkgKiByZWplY3QgaXQgd2l0aCBDTURfSU5WQUxJRCwgd2hpY2ggaXMgdGhlIG1vc3QgY29ycmVjdAorCQkgKiByZXNwb25zZSwgYnV0IG5vbi1maWJyZSBiYWNrZW5kcyBhcHBlYXIgdG8gbGV0IGl0CisJCSAqIHNsaWRlIGJ5LCBhbmQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzIGFzIGlmIHRoaXMgZmllbGQKKwkJICogd2VyZSBzZXQgY29ycmVjdGx5LiAgRWl0aGVyIHdheSBpcyBhY2NlcHRhYmxlIGZvcgorCQkgKiBvdXIgcHVycG9zZXMgaGVyZS4KKwkJICovCisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJ1bmtub3duIGRhdGEgZGlyZWN0aW9uOiAlZFxuIiwKKwkJCWNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGhwc2Ffc2NhdHRlcl9nYXRoZXIoaC0+cGRldiwgYywgY21kKSA8IDApIHsgLyogRmlsbCBTRyBsaXN0ICovCisJCWNtZF9mcmVlKGgsIGMpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisJZW5xdWV1ZV9jbWRfYW5kX3N0YXJ0X2lvKGgsIGMpOworCS8qIHRoZSBjbWQnbGwgY29tZSBiYWNrIHZpYSBpbnRyIGhhbmRsZXIgaW4gY29tcGxldGVfc2NzaV9jb21tYW5kKCkgICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfdW5yZWdpc3Rlcl9zY3NpKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCisJc2NzaV9yZW1vdmVfaG9zdChoLT5zY3NpX2hvc3QpOworCXNjc2lfaG9zdF9wdXQoaC0+c2NzaV9ob3N0KTsKKwloLT5zY3NpX2hvc3QgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGhwc2FfcmVnaXN0ZXJfc2NzaShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWludCByYzsKKworCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCAtMSk7CisJcmMgPSBocHNhX3Njc2lfZGV0ZWN0KGgpOworCWlmIChyYyAhPSAwKQorCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3JlZ2lzdGVyX3Njc2k6IGZhaWxlZCIKKwkJCSIgaHBzYV9zY3NpX2RldGVjdCgpLCByYyBpcyAlZFxuIiwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5KHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdW5zaWduZWQgY2hhciBsdW5hZGRyW10pCit7CisJaW50IHJjID0gMDsKKwlpbnQgY291bnQgPSAwOworCWludCB3YWl0dGltZSA9IDE7IC8qIHNlY29uZHMgKi8KKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisKKwljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJaWYgKCFjKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICIKKwkJCSJ3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5LlxuIik7CisJCXJldHVybiBJT19FUlJPUjsKKwl9CisKKwkvKiBTZW5kIHRlc3QgdW5pdCByZWFkeSB1bnRpbCBkZXZpY2UgcmVhZHksIG9yIGdpdmUgdXAuICovCisJd2hpbGUgKGNvdW50IDwgSFBTQV9UVVJfUkVUUllfTElNSVQpIHsKKworCQkvKiBXYWl0IGZvciBhIGJpdC4gIGRvIHRoaXMgZmlyc3QsIGJlY2F1c2UgaWYgd2Ugc2VuZAorCQkgKiB0aGUgVFVSIHJpZ2h0IGF3YXksIHRoZSByZXNldCB3aWxsIGp1c3QgYWJvcnQgaXQuCisJCSAqLworCQltc2xlZXAoMTAwMCAqIHdhaXR0aW1lKTsKKwkJY291bnQrKzsKKworCQkvKiBJbmNyZWFzZSB3YWl0IHRpbWUgd2l0aCBlYWNoIHRyeSwgdXAgdG8gYSBwb2ludC4gKi8KKwkJaWYgKHdhaXR0aW1lIDwgSFBTQV9NQVhfV0FJVF9JTlRFUlZBTF9TRUNTKQorCQkJd2FpdHRpbWUgPSB3YWl0dGltZSAqIDI7CisKKwkJLyogU2VuZCB0aGUgVGVzdCBVbml0IFJlYWR5ICovCisJCWZpbGxfY21kKGMsIFRFU1RfVU5JVF9SRUFEWSwgaCwgTlVMTCwgMCwgMCwgbHVuYWRkciwgVFlQRV9DTUQpOworCQlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlKGgsIGMpOworCQkvKiBubyB1bm1hcCBuZWVkZWQgaGVyZSBiZWNhdXNlIG5vIGRhdGEgeGZlci4gKi8KKworCQlpZiAoYy0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPT0gQ01EX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQlpZiAoYy0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPT0gQ01EX1RBUkdFVF9TVEFUVVMgJiYKKwkJCWMtPmVycl9pbmZvLT5TY3NpU3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTiAmJgorCQkJKGMtPmVycl9pbmZvLT5TZW5zZUluZm9bMl0gPT0gTk9fU0VOU0UgfHwKKwkJCWMtPmVycl9pbmZvLT5TZW5zZUluZm9bMl0gPT0gVU5JVF9BVFRFTlRJT04pKQorCQkJYnJlYWs7CisKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIndhaXRpbmcgJWQgc2VjcyAiCisJCQkiZm9yIGRldmljZSB0byBiZWNvbWUgcmVhZHkuXG4iLCB3YWl0dGltZSk7CisJCXJjID0gMTsgLyogZGV2aWNlIG5vdCByZWFkeS4gKi8KKwl9CisKKwlpZiAocmMpCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJnaXZpbmcgdXAgb24gZGV2aWNlLlxuIik7CisJZWxzZQorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiZGV2aWNlIGlzIHJlYWR5LlxuIik7CisKKwljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCXJldHVybiByYzsKK30KKworLyogTmVlZCBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgZXJyb3IgaGFuZGxlcnMgdG8ga2VlcCAuLi9zY3NpL2hvc3RzLmMgZnJvbQorICogY29tcGxhaW5pbmcuICBEb2luZyBhIGhvc3QtIG9yIGJ1cy1yZXNldCBjYW4ndCBkbyBhbnl0aGluZyBnb29kIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKQoreworCWludCByYzsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldjsKKworCS8qIGZpbmQgdGhlIGNvbnRyb2xsZXIgdG8gd2hpY2ggdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCB3YXMgc2VudCAqLworCWggPSBzZGV2X3RvX2hiYShzY3NpY21kLT5kZXZpY2UpOworCWlmIChoID09IE5VTEwpIC8qIHBhcmFub2lhICovCisJCXJldHVybiBGQUlMRUQ7CisJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlc2V0dGluZyBkcml2ZVxuIik7CisKKwlkZXYgPSBzY3NpY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCWlmICghZGV2KSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXI6ICIKKwkJCSJkZXZpY2UgbG9va3VwIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gRkFJTEVEOworCX0KKwkvKiBzZW5kIGEgcmVzZXQgdG8gdGhlIFNDU0kgTFVOIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBzZW50IHRvICovCisJcmMgPSBocHNhX3NlbmRfcmVzZXQoaCwgZGV2LT5zY3NpM2FkZHIpOworCWlmIChyYyA9PSAwICYmIHdhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkoaCwgZGV2LT5zY3NpM2FkZHIpID09IDApCisJCXJldHVybiBTVUNDRVNTOworCisJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlc2V0dGluZyBkZXZpY2UgZmFpbGVkLlxuIik7CisJcmV0dXJuIEZBSUxFRDsKK30KKworLyoKKyAqIEZvciBvcGVyYXRpb25zIHRoYXQgY2Fubm90IHNsZWVwLCBhIGNvbW1hbmQgYmxvY2sgaXMgYWxsb2NhdGVkIGF0IGluaXQsCisgKiBhbmQgbWFuYWdlZCBieSBjbWRfYWxsb2MoKSBhbmQgY21kX2ZyZWUoKSB1c2luZyBhIHNpbXBsZSBiaXRtYXAgdG8gdHJhY2sKKyAqIHdoaWNoIG9uZXMgYXJlIGZyZWUgb3IgaW4gdXNlLiAgTG9jayBtdXN0IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMuCisgKiBjbWRfZnJlZSgpIGlzIHRoZSBjb21wbGVtZW50LgorICovCitzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJaW50IGk7CisJdW5pb24gdTY0Yml0IHRlbXA2NDsKKwlkbWFfYWRkcl90IGNtZF9kbWFfaGFuZGxlLCBlcnJfZG1hX2hhbmRsZTsKKworCWRvIHsKKwkJaSA9IGZpbmRfZmlyc3RfemVyb19iaXQoaC0+Y21kX3Bvb2xfYml0cywgaC0+bnJfY21kcyk7CisJCWlmIChpID09IGgtPm5yX2NtZHMpCisJCQlyZXR1cm4gTlVMTDsKKwl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0CisJCSAoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCisJCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpICE9IDApOworCWMgPSBoLT5jbWRfcG9vbCArIGk7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCWNtZF9kbWFfaGFuZGxlID0gaC0+Y21kX3Bvb2xfZGhhbmRsZQorCSAgICArIGkgKiBzaXplb2YoKmMpOworCWMtPmVycl9pbmZvID0gaC0+ZXJyaW5mb19wb29sICsgaTsKKwltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZigqYy0+ZXJyX2luZm8pKTsKKwllcnJfZG1hX2hhbmRsZSA9IGgtPmVycmluZm9fcG9vbF9kaGFuZGxlCisJICAgICsgaSAqIHNpemVvZigqYy0+ZXJyX2luZm8pOworCWgtPm5yX2FsbG9jcysrOworCisJYy0+Y21kaW5kZXggPSBpOworCisJSU5JVF9ITElTVF9OT0RFKCZjLT5saXN0KTsKKwljLT5idXNhZGRyID0gKF9fdTMyKSBjbWRfZG1hX2hhbmRsZTsKKwl0ZW1wNjQudmFsID0gKF9fdTY0KSBlcnJfZG1hX2hhbmRsZTsKKwljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CisJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOworCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CisKKwljLT5oID0gaDsKKwlyZXR1cm4gYzsKK30KKworLyogRm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4gd2FpdCBmb3Iga21hbGxvYyB0byBwb3NzaWJseSBzbGVlcCwKKyAqIHRoaXMgcm91dGluZSBjYW4gYmUgY2FsbGVkLiBMb2NrIG5lZWQgbm90IGJlIGhlbGQgdG8gY2FsbAorICogY21kX3NwZWNpYWxfYWxsb2MuIGNtZF9zcGVjaWFsX2ZyZWUoKSBpcyB0aGUgY29tcGxlbWVudC4KKyAqLworc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX3NwZWNpYWxfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJdW5pb24gdTY0Yml0IHRlbXA2NDsKKwlkbWFfYWRkcl90IGNtZF9kbWFfaGFuZGxlLCBlcnJfZG1hX2hhbmRsZTsKKworCWMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoKmMpLCAmY21kX2RtYV9oYW5kbGUpOworCWlmIChjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKworCWMtPmNtZGluZGV4ID0gLTE7CisKKwljLT5lcnJfaW5mbyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZigqYy0+ZXJyX2luZm8pLAorCQkgICAgJmVycl9kbWFfaGFuZGxlKTsKKworCWlmIChjLT5lcnJfaW5mbyA9PSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJCXNpemVvZigqYyksIGMsIGNtZF9kbWFfaGFuZGxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKCpjLT5lcnJfaW5mbykpOworCisJSU5JVF9ITElTVF9OT0RFKCZjLT5saXN0KTsKKwljLT5idXNhZGRyID0gKF9fdTMyKSBjbWRfZG1hX2hhbmRsZTsKKwl0ZW1wNjQudmFsID0gKF9fdTY0KSBlcnJfZG1hX2hhbmRsZTsKKwljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CisJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOworCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CisKKwljLT5oID0gaDsKKwlyZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQgY21kX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCWludCBpOworCisJaSA9IGMgLSBoLT5jbWRfcG9vbDsKKwljbGVhcl9iaXQoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCisJCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpOworCWgtPm5yX2ZyZWVzKys7Cit9CisKK3N0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisKKwl0ZW1wNjQudmFsMzIubG93ZXIgPSBjLT5FcnJEZXNjLkFkZHIubG93ZXI7CisJdGVtcDY0LnZhbDMyLnVwcGVyID0gYy0+RXJyRGVzYy5BZGRyLnVwcGVyOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjLT5lcnJfaW5mbyksCisJCQkgICAgYy0+ZXJyX2luZm8sIChkbWFfYWRkcl90KSB0ZW1wNjQudmFsKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZigqYyksCisJCQkgICAgYywgKGRtYV9hZGRyX3QpIGMtPmJ1c2FkZHIpOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCitzdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gaHBzYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBocHNhX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9iaWdfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsCisJaW50IGNtZCwgdm9pZCAqYXJnKTsKKworc3RhdGljIGludCBocHNhX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgorCWNhc2UgQ0NJU1NfR0VUSU5USU5GTzoKKwljYXNlIENDSVNTX1NFVElOVElORk86CisJY2FzZSBDQ0lTU19HRVROT0RFTkFNRToKKwljYXNlIENDSVNTX1NFVE5PREVOQU1FOgorCWNhc2UgQ0NJU1NfR0VUSEVBUlRCRUFUOgorCWNhc2UgQ0NJU1NfR0VUQlVTVFlQRVM6CisJY2FzZSBDQ0lTU19HRVRGSVJNVkVSOgorCWNhc2UgQ0NJU1NfR0VURFJJVlZFUjoKKwljYXNlIENDSVNTX1JFVkFMSURWT0xTOgorCWNhc2UgQ0NJU1NfREVSRUdESVNLOgorCWNhc2UgQ0NJU1NfUkVHTkVXRElTSzoKKwljYXNlIENDSVNTX1JFR05FV0Q6CisJY2FzZSBDQ0lTU19SRVNDQU5ESVNLOgorCWNhc2UgQ0NJU1NfR0VUTFVOSU5GTzoKKwkJcmV0dXJuIGRvX2lvY3RsKGRldiwgY21kLCBhcmcpOworCisJY2FzZSBDQ0lTU19QQVNTVEhSVTMyOgorCQlyZXR1cm4gaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOworCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVMzI6CisJCXJldHVybiBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKmFyZzMyID0KKwkgICAgKElPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICopIGFyZzsKKwlJT0NUTF9Db21tYW5kX3N0cnVjdCBhcmc2NDsKKwlJT0NUTF9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKnAgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoYXJnNjQpKTsKKwlpbnQgZXJyOworCXUzMiBjcDsKKworCWVyciA9IDA7CisJZXJyIHw9IGNvcHlfZnJvbV91c2VyKCZhcmc2NC5MVU5faW5mbywgJmFyZzMyLT5MVU5faW5mbywKKwkJCSAgIHNpemVvZihhcmc2NC5MVU5faW5mbykpOworCWVyciB8PSBjb3B5X2Zyb21fdXNlcigmYXJnNjQuUmVxdWVzdCwgJmFyZzMyLT5SZXF1ZXN0LAorCQkJICAgc2l6ZW9mKGFyZzY0LlJlcXVlc3QpKTsKKwllcnIgfD0gY29weV9mcm9tX3VzZXIoJmFyZzY0LmVycm9yX2luZm8sICZhcmczMi0+ZXJyb3JfaW5mbywKKwkJCSAgIHNpemVvZihhcmc2NC5lcnJvcl9pbmZvKSk7CisJZXJyIHw9IGdldF91c2VyKGFyZzY0LmJ1Zl9zaXplLCAmYXJnMzItPmJ1Zl9zaXplKTsKKwllcnIgfD0gZ2V0X3VzZXIoY3AsICZhcmczMi0+YnVmKTsKKwlhcmc2NC5idWYgPSBjb21wYXRfcHRyKGNwKTsKKwllcnIgfD0gY29weV90b191c2VyKHAsICZhcmc2NCwgc2l6ZW9mKGFyZzY0KSk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IGRvX2lvY3RsKGRldiwgQ0NJU1NfUEFTU1RIUlUsICh2b2lkICopcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgfD0gY29weV9pbl91c2VyKCZhcmczMi0+ZXJyb3JfaW5mbywgJnAtPmVycm9yX2luZm8sCisJCQkgc2l6ZW9mKGFyZzMyLT5lcnJvcl9pbmZvKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAorCWludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlCSUdfSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKmFyZzMyID0KKwkgICAgKEJJR19JT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqKSBhcmc7CisJQklHX0lPQ1RMX0NvbW1hbmRfc3RydWN0IGFyZzY0OworCUJJR19JT0NUTF9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKnAgPQorCSAgICBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoYXJnNjQpKTsKKwlpbnQgZXJyOworCXUzMiBjcDsKKworCWVyciA9IDA7CisJZXJyIHw9IGNvcHlfZnJvbV91c2VyKCZhcmc2NC5MVU5faW5mbywgJmFyZzMyLT5MVU5faW5mbywKKwkJCSAgIHNpemVvZihhcmc2NC5MVU5faW5mbykpOworCWVyciB8PSBjb3B5X2Zyb21fdXNlcigmYXJnNjQuUmVxdWVzdCwgJmFyZzMyLT5SZXF1ZXN0LAorCQkJICAgc2l6ZW9mKGFyZzY0LlJlcXVlc3QpKTsKKwllcnIgfD0gY29weV9mcm9tX3VzZXIoJmFyZzY0LmVycm9yX2luZm8sICZhcmczMi0+ZXJyb3JfaW5mbywKKwkJCSAgIHNpemVvZihhcmc2NC5lcnJvcl9pbmZvKSk7CisJZXJyIHw9IGdldF91c2VyKGFyZzY0LmJ1Zl9zaXplLCAmYXJnMzItPmJ1Zl9zaXplKTsKKwllcnIgfD0gZ2V0X3VzZXIoYXJnNjQubWFsbG9jX3NpemUsICZhcmczMi0+bWFsbG9jX3NpemUpOworCWVyciB8PSBnZXRfdXNlcihjcCwgJmFyZzMyLT5idWYpOworCWFyZzY0LmJ1ZiA9IGNvbXBhdF9wdHIoY3ApOworCWVyciB8PSBjb3B5X3RvX3VzZXIocCwgJmFyZzY0LCBzaXplb2YoYXJnNjQpKTsKKworCWlmIChlcnIpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyID0gZG9faW9jdGwoZGV2LCBDQ0lTU19CSUdfUEFTU1RIUlUsICh2b2lkICopcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgfD0gY29weV9pbl91c2VyKCZhcmczMi0+ZXJyb3JfaW5mbywgJnAtPmVycm9yX2luZm8sCisJCQkgc2l6ZW9mKGFyZzMyLT5lcnJvcl9pbmZvKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGhwc2FfZ2V0cGNpaW5mb19pb2N0bChzdHJ1Y3QgY3Rscl9pbmZvICpoLCB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzdHJ1Y3QgaHBzYV9wY2lfaW5mbyBwY2lpbmZvOworCisJaWYgKCFhcmdwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwY2lpbmZvLmRvbWFpbiA9IHBjaV9kb21haW5fbnIoaC0+cGRldi0+YnVzKTsKKwlwY2lpbmZvLmJ1cyA9IGgtPnBkZXYtPmJ1cy0+bnVtYmVyOworCXBjaWluZm8uZGV2X2ZuID0gaC0+cGRldi0+ZGV2Zm47CisJcGNpaW5mby5ib2FyZF9pZCA9IGgtPmJvYXJkX2lkOworCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnBjaWluZm8sIHNpemVvZihwY2lpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwc2FfZ2V0ZHJpdnZlcl9pb2N0bChzdHJ1Y3QgY3Rscl9pbmZvICpoLCB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlEcml2ZXJWZXJfdHlwZSBEcml2ZXJWZXI7CisJdW5zaWduZWQgY2hhciB2bWFqLCB2bWluLCB2c3VibWluOworCWludCByYzsKKworCXJjID0gc3NjYW5mKEhQU0FfRFJJVkVSX1ZFUlNJT04sICIlaGh1LiVoaHUuJWhodSIsCisJCSZ2bWFqLCAmdm1pbiwgJnZzdWJtaW4pOworCWlmIChyYyAhPSAzKSB7CisJCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJkcml2ZXIgdmVyc2lvbiBzdHJpbmcgJyVzJyAiCisJCQkidW5yZWNvZ25pemVkLiIsIEhQU0FfRFJJVkVSX1ZFUlNJT04pOworCQl2bWFqID0gMDsKKwkJdm1pbiA9IDA7CisJCXZzdWJtaW4gPSAwOworCX0KKwlEcml2ZXJWZXIgPSAodm1haiA8PCAxNikgfCAodm1pbiA8PCA4KSB8IHZzdWJtaW47CisJaWYgKCFhcmdwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZEcml2ZXJWZXIsIHNpemVvZihEcml2ZXJWZXJfdHlwZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocHNhX3Bhc3N0aHJ1X2lvY3RsKHN0cnVjdCBjdGxyX2luZm8gKmgsIHZvaWQgX191c2VyICphcmdwKQoreworCUlPQ1RMX0NvbW1hbmRfc3RydWN0IGlvY29tbWFuZDsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJY2hhciAqYnVmZiA9IE5VTEw7CisJdW5pb24gdTY0Yml0IHRlbXA2NDsKKworCWlmICghYXJncCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChjb3B5X2Zyb21fdXNlcigmaW9jb21tYW5kLCBhcmdwLCBzaXplb2YoaW9jb21tYW5kKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgoaW9jb21tYW5kLmJ1Zl9zaXplIDwgMSkgJiYKKwkgICAgKGlvY29tbWFuZC5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uICE9IFhGRVJfTk9ORSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKSB7CisJCWJ1ZmYgPSBrbWFsbG9jKGlvY29tbWFuZC5idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmID09IE5VTEwpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKGlvY29tbWFuZC5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfV1JJVEUpIHsKKwkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBidWZmZXIgd2UgY3JlYXRlZCAqLworCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZiwgaW9jb21tYW5kLmJ1ZiwgaW9jb21tYW5kLmJ1Zl9zaXplKSkgeworCQkJa2ZyZWUoYnVmZik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZQorCQltZW1zZXQoYnVmZiwgMCwgaW9jb21tYW5kLmJ1Zl9zaXplKTsKKwljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJaWYgKGMgPT0gTlVMTCkgeworCQlrZnJlZShidWZmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIEZpbGwgaW4gdGhlIGNvbW1hbmQgdHlwZSAqLworCWMtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7CisJLyogRmlsbCBpbiBDb21tYW5kIEhlYWRlciAqLworCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCisJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsJLyogYnVmZmVyIHRvIGZpbGwgKi8KKwkJYy0+SGVhZGVyLlNHTGlzdCA9IDE7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gMTsKKwl9IGVsc2UJeyAvKiBubyBidWZmZXJzIHRvIGZpbGwgKi8KKwkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKKwl9CisJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCAmaW9jb21tYW5kLkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOworCS8qIHVzZSB0aGUga2VybmVsIGFkZHJlc3MgdGhlIGNtZCBibG9jayBmb3IgdGFnICovCisJYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1c2FkZHI7CisKKwkvKiBGaWxsIGluIFJlcXVlc3QgYmxvY2sgKi8KKwltZW1jcHkoJmMtPlJlcXVlc3QsICZpb2NvbW1hbmQuUmVxdWVzdCwKKwkJc2l6ZW9mKGMtPlJlcXVlc3QpKTsKKworCS8qIEZpbGwgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCisJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIHsKKwkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCisJCQlpb2NvbW1hbmQuYnVmX3NpemUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCWMtPlNHWzBdLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CisJCWMtPlNHWzBdLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7CisJCWMtPlNHWzBdLkxlbiA9IGlvY29tbWFuZC5idWZfc2l6ZTsKKwkJYy0+U0dbMF0uRXh0ID0gMDsgLyogd2UgYXJlIG5vdCBjaGFpbmluZyovCisJfQorCWhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoaCwgYyk7CisJaHBzYV9wY2lfdW5tYXAoaC0+cGRldiwgYywgMSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwljaGVja19pb2N0bF91bml0X2F0dGVudGlvbihoLCBjKTsKKworCS8qIENvcHkgdGhlIGVycm9yIGluZm9ybWF0aW9uIG91dCAqLworCW1lbWNweSgmaW9jb21tYW5kLmVycm9yX2luZm8sIGMtPmVycl9pbmZvLAorCQlzaXplb2YoaW9jb21tYW5kLmVycm9yX2luZm8pKTsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZpb2NvbW1hbmQsIHNpemVvZihpb2NvbW1hbmQpKSkgeworCQlrZnJlZShidWZmKTsKKwkJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKGlvY29tbWFuZC5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfUkVBRCkgeworCQkvKiBDb3B5IHRoZSBkYXRhIG91dCBvZiB0aGUgYnVmZmVyIHdlIGNyZWF0ZWQgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcihpb2NvbW1hbmQuYnVmLCBidWZmLCBpb2NvbW1hbmQuYnVmX3NpemUpKSB7CisJCQlrZnJlZShidWZmKTsKKwkJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKwlrZnJlZShidWZmKTsKKwljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwc2FfYmlnX3Bhc3N0aHJ1X2lvY3RsKHN0cnVjdCBjdGxyX2luZm8gKmgsIHZvaWQgX191c2VyICphcmdwKQoreworCUJJR19JT0NUTF9Db21tYW5kX3N0cnVjdCAqaW9jOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKwl1bnNpZ25lZCBjaGFyICoqYnVmZiA9IE5VTEw7CisJaW50ICpidWZmX3NpemUgPSBOVUxMOworCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJQllURSBzZ191c2VkID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgaTsKKwlfX3UzMiBsZWZ0OworCV9fdTMyIHN6OworCUJZVEUgX191c2VyICpkYXRhX3B0cjsKKworCWlmICghYXJncCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVQRVJNOworCWlvYyA9IChCSUdfSU9DVExfQ29tbWFuZF9zdHJ1Y3QgKikKKwkgICAga21hbGxvYyhzaXplb2YoKmlvYyksIEdGUF9LRVJORUwpOworCWlmICghaW9jKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcihpb2MsIGFyZ3AsIHNpemVvZigqaW9jKSkpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisJaWYgKChpb2MtPmJ1Zl9zaXplIDwgMSkgJiYKKwkgICAgKGlvYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiAhPSBYRkVSX05PTkUpKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCS8qIENoZWNrIGttYWxsb2MgbGltaXRzICB1c2luZyBhbGwgU0dzICovCisJaWYgKGlvYy0+bWFsbG9jX3NpemUgPiBNQVhfS01BTExPQ19TSVpFKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWlmIChpb2MtPmJ1Zl9zaXplID4gaW9jLT5tYWxsb2Nfc2l6ZSAqIE1BWFNHRU5UUklFUykgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXAxOworCX0KKwlidWZmID0ga3phbGxvYyhNQVhTR0VOVFJJRVMgKiBzaXplb2YoY2hhciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWJ1ZmZfc2l6ZSA9IGttYWxsb2MoTUFYU0dFTlRSSUVTICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCWlmICghYnVmZl9zaXplKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWxlZnQgPSBpb2MtPmJ1Zl9zaXplOworCWRhdGFfcHRyID0gaW9jLT5idWY7CisJd2hpbGUgKGxlZnQpIHsKKwkJc3ogPSAobGVmdCA+IGlvYy0+bWFsbG9jX3NpemUpID8gaW9jLT5tYWxsb2Nfc2l6ZSA6IGxlZnQ7CisJCWJ1ZmZfc2l6ZVtzZ191c2VkXSA9IHN6OworCQlidWZmW3NnX3VzZWRdID0ga21hbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmW3NnX3VzZWRdID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGNsZWFudXAxOworCQl9CisJCWlmIChpb2MtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPT0gWEZFUl9XUklURSkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZbc2dfdXNlZF0sIGRhdGFfcHRyLCBzeikpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gY2xlYW51cDE7CisJCQl9CisJCX0gZWxzZQorCQkJbWVtc2V0KGJ1ZmZbc2dfdXNlZF0sIDAsIHN6KTsKKwkJbGVmdCAtPSBzejsKKwkJZGF0YV9wdHIgKz0gc3o7CisJCXNnX3VzZWQrKzsKKwl9CisJYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCWlmIChjID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisJYy0+Y21kX3R5cGUgPSBDTURfSU9DVExfUEVORDsKKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CisKKwlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKKwkJYy0+SGVhZGVyLlNHTGlzdCA9IHNnX3VzZWQ7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gc2dfdXNlZDsKKwl9IGVsc2UgeworCQljLT5IZWFkZXIuU0dMaXN0ID0gMDsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSAwOworCX0KKwltZW1jcHkoJmMtPkhlYWRlci5MVU4sICZpb2MtPkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOworCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCW1lbWNweSgmYy0+UmVxdWVzdCwgJmlvYy0+UmVxdWVzdCwgc2l6ZW9mKGMtPlJlcXVlc3QpKTsKKwlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspIHsKKwkJCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShoLT5wZGV2LCBidWZmW2ldLAorCQkJCSAgICBidWZmX3NpemVbaV0sIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQljLT5TR1tpXS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOworCQkJYy0+U0dbaV0uQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKKwkJCWMtPlNHW2ldLkxlbiA9IGJ1ZmZfc2l6ZVtpXTsKKwkJCS8qIHdlIGFyZSBub3QgY2hhaW5pbmcgKi8KKwkJCWMtPlNHW2ldLkV4dCA9IDA7CisJCX0KKwl9CisJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZShoLCBjKTsKKwlocHNhX3BjaV91bm1hcChoLT5wZGV2LCBjLCBzZ191c2VkLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWNoZWNrX2lvY3RsX3VuaXRfYXR0ZW50aW9uKGgsIGMpOworCS8qIENvcHkgdGhlIGVycm9yIGluZm9ybWF0aW9uIG91dCAqLworCW1lbWNweSgmaW9jLT5lcnJvcl9pbmZvLCBjLT5lcnJfaW5mbywgc2l6ZW9mKGlvYy0+ZXJyb3JfaW5mbykpOworCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgaW9jLCBzaXplb2YoKmlvYykpKSB7CisJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWlmIChpb2MtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPT0gWEZFUl9SRUFEKSB7CisJCS8qIENvcHkgdGhlIGRhdGEgb3V0IG9mIHRoZSBidWZmZXIgd2UgY3JlYXRlZCAqLworCQlCWVRFIF9fdXNlciAqcHRyID0gaW9jLT5idWY7CisJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIocHRyLCBidWZmW2ldLCBidWZmX3NpemVbaV0pKSB7CisJCQkJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwkJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJCWdvdG8gY2xlYW51cDE7CisJCQl9CisJCQlwdHIgKz0gYnVmZl9zaXplW2ldOworCQl9CisJfQorCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJc3RhdHVzID0gMDsKK2NsZWFudXAxOgorCWlmIChidWZmKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspCisJCQlrZnJlZShidWZmW2ldKTsKKwkJa2ZyZWUoYnVmZik7CisJfQorCWtmcmVlKGJ1ZmZfc2l6ZSk7CisJa2ZyZWUoaW9jKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBjaGVja19pb2N0bF91bml0X2F0dGVudGlvbihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKK3sKKwlpZiAoYy0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPT0gQ01EX1RBUkdFVF9TVEFUVVMgJiYKKwkJCWMtPmVycl9pbmZvLT5TY3NpU3RhdHVzICE9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikKKwkJKHZvaWQpIGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjKTsKK30KKy8qCisgKiBpb2N0bAorICovCitzdGF0aWMgaW50IGhwc2FfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCisJaCA9IHNkZXZfdG9faGJhKGRldik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0NJU1NfREVSRUdESVNLOgorCWNhc2UgQ0NJU1NfUkVHTkVXRElTSzoKKwljYXNlIENDSVNTX1JFR05FV0Q6CisJCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCBkZXYtPmhvc3QtPmhvc3Rfbm8pOworCQlyZXR1cm4gMDsKKwljYXNlIENDSVNTX0dFVFBDSUlORk86CisJCXJldHVybiBocHNhX2dldHBjaWluZm9faW9jdGwoaCwgYXJncCk7CisJY2FzZSBDQ0lTU19HRVREUklWVkVSOgorCQlyZXR1cm4gaHBzYV9nZXRkcml2dmVyX2lvY3RsKGgsIGFyZ3ApOworCWNhc2UgQ0NJU1NfUEFTU1RIUlU6CisJCXJldHVybiBocHNhX3Bhc3N0aHJ1X2lvY3RsKGgsIGFyZ3ApOworCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVOgorCQlyZXR1cm4gaHBzYV9iaWdfcGFzc3RocnVfaW9jdGwoaCwgYXJncCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWxsX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIF9fdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCBfX3U4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAorCWludCBjbWRfdHlwZSkKK3sKKwlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKKworCWMtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7CisJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOworCWlmIChidWZmICE9IE5VTEwgJiYgc2l6ZSA+IDApIHsKKwkJYy0+SGVhZGVyLlNHTGlzdCA9IDE7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gMTsKKwl9IGVsc2UgeworCQljLT5IZWFkZXIuU0dMaXN0ID0gMDsKKwkJYy0+SGVhZGVyLlNHVG90YWwgPSAwOworCX0KKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsKKwltZW1jcHkoYy0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXMsIHNjc2kzYWRkciwgOCk7CisKKwljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IGNtZF90eXBlOworCWlmIChjbWRfdHlwZSA9PSBUWVBFX0NNRCkgeworCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIEhQU0FfSU5RVUlSWToKKwkJCS8qIGFyZSB3ZSB0cnlpbmcgdG8gcmVhZCBhIHZpdGFsIHByb2R1Y3QgcGFnZSAqLworCQkJaWYgKHBhZ2VfY29kZSAhPSAwKSB7CisJCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAweDAxOworCQkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gcGFnZV9jb2RlOworCQkJfQorCQkJYy0+UmVxdWVzdC5DREJMZW4gPSA2OworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQljLT5SZXF1ZXN0LkNEQlswXSA9IEhQU0FfSU5RVUlSWTsKKwkJCWMtPlJlcXVlc3QuQ0RCWzRdID0gc2l6ZSAmIDB4RkY7CisJCQlicmVhazsKKwkJY2FzZSBIUFNBX1JFUE9SVF9MT0c6CisJCWNhc2UgSFBTQV9SRVBPUlRfUEhZUzoKKwkJCS8qIFRhbGtpbmcgdG8gY29udHJvbGxlciBzbyBJdCdzIGEgcGh5c2ljYWwgY29tbWFuZAorCQkJICAgbW9kZSA9IDAwIHRhcmdldCA9IDAuICBOb3RoaW5nIHRvIHdyaXRlLgorCQkJICovCisJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEyOworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKKwkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gKHNpemUgPj4gMjQpICYgMHhGRjsgLyogTVNCICovCisJCQljLT5SZXF1ZXN0LkNEQls3XSA9IChzaXplID4+IDE2KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQls4XSA9IChzaXplID4+IDgpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzldID0gc2l6ZSAmIDB4RkY7CisJCQlicmVhazsKKworCQljYXNlIEhQU0FfUkVBRF9DQVBBQ0lUWToKKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTA7CisJCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOworCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKKwkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gY21kOworCQkJYnJlYWs7CisJCWNhc2UgSFBTQV9DQUNIRV9GTFVTSDoKKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTI7CisJCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQljLT5SZXF1ZXN0LkNEQlswXSA9IEJNSUNfV1JJVEU7CisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IEJNSUNfQ0FDSEVfRkxVU0g7CisJCQlicmVhazsKKwkJY2FzZSBURVNUX1VOSVRfUkVBRFk6CisJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDY7CisJCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVua25vd24gY29tbWFuZCAweCVjXG4iLCBjbWQpOworCQkJQlVHKCk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKGNtZF90eXBlID09IFRZUEVfTVNHKSB7CisJCXN3aXRjaCAoY21kKSB7CisKKwkJY2FzZSAgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHOgorCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKKwkJCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gIDE7IC8qIEl0IGlzIGEgTVNHIG5vdCBhIENNRCAqLworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7IC8qIERvbid0IHRpbWUgb3V0ICovCisJCQljLT5SZXF1ZXN0LkNEQlswXSA9ICAweDAxOyAvKiBSRVNFVF9NU0cgaXMgMHgwMSAqLworCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAweDAzOyAgLyogUmVzZXQgdGFyZ2V0IGFib3ZlICovCisJCQkvKiBJZiBieXRlcyA0LTcgYXJlIHplcm8sIGl0IG1lYW5zIHJlc2V0IHRoZSAqLworCQkJLyogTHVuSUQgZGV2aWNlICovCisJCQljLT5SZXF1ZXN0LkNEQls0XSA9IDB4MDA7CisJCQljLT5SZXF1ZXN0LkNEQls1XSA9IDB4MDA7CisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IDB4MDA7CisJCQljLT5SZXF1ZXN0LkNEQls3XSA9IDB4MDA7CisJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAidW5rbm93biBtZXNzYWdlIHR5cGUgJWRcbiIsCisJCQkJY21kKTsKKwkJCUJVRygpOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVua25vd24gY29tbWFuZCB0eXBlICVkXG4iLCBjbWRfdHlwZSk7CisJCUJVRygpOworCX0KKworCXN3aXRjaCAoYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbikgeworCWNhc2UgWEZFUl9SRUFEOgorCQlwY2lfZGlyID0gUENJX0RNQV9GUk9NREVWSUNFOworCQlicmVhazsKKwljYXNlIFhGRVJfV1JJVEU6CisJCXBjaV9kaXIgPSBQQ0lfRE1BX1RPREVWSUNFOworCQlicmVhazsKKwljYXNlIFhGRVJfTk9ORToKKwkJcGNpX2RpciA9IFBDSV9ETUFfTk9ORTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGNpX2RpciA9IFBDSV9ETUFfQklESVJFQ1RJT05BTDsKKwl9CisKKwlocHNhX21hcF9vbmUoaC0+cGRldiwgYywgYnVmZiwgc2l6ZSwgcGNpX2Rpcik7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBNYXAgKHBoeXNpY2FsKSBQQ0kgbWVtIGludG8gKHZpcnR1YWwpIGtlcm5lbCBzcGFjZQorICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZW1hcF9wY2lfbWVtKHVsb25nIGJhc2UsIHVsb25nIHNpemUpCit7CisJdWxvbmcgcGFnZV9iYXNlID0gKCh1bG9uZykgYmFzZSkgJiBQQUdFX01BU0s7CisJdWxvbmcgcGFnZV9vZmZzID0gKCh1bG9uZykgYmFzZSkgLSBwYWdlX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwYWdlX3JlbWFwcGVkID0gaW9yZW1hcChwYWdlX2Jhc2UsIHBhZ2Vfb2ZmcyArIHNpemUpOworCisJcmV0dXJuIHBhZ2VfcmVtYXBwZWQgPyAocGFnZV9yZW1hcHBlZCArIHBhZ2Vfb2ZmcykgOiBOVUxMOworfQorCisvKiBUYWtlcyBjbWRzIG9mZiB0aGUgc3VibWlzc2lvbiBxdWV1ZSBhbmQgc2VuZHMgdGhlbSB0byB0aGUgaGFyZHdhcmUsCisgKiB0aGVuIHB1dHMgdGhlbSBvbiB0aGUgcXVldWUgb2YgY21kcyB3YWl0aW5nIGZvciBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZCBzdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKworCXdoaWxlICghaGxpc3RfZW1wdHkoJmgtPnJlcVEpKSB7CisJCWMgPSBobGlzdF9lbnRyeShoLT5yZXFRLmZpcnN0LCBzdHJ1Y3QgQ29tbWFuZExpc3QsIGxpc3QpOworCQkvKiBjYW4ndCBkbyBhbnl0aGluZyBpZiBmaWZvIGlzIGZ1bGwgKi8KKwkJaWYgKChoLT5hY2Nlc3MuZmlmb19mdWxsKGgpKSkgeworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImZpZm8gZnVsbFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEdldCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgUmVxdWVzdCBRICovCisJCXJlbW92ZVEoYyk7CisJCWgtPlFkZXB0aC0tOworCisJCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgZXhlY3V0ZSBjb21tYW5kICovCisJCWgtPmFjY2Vzcy5zdWJtaXRfY29tbWFuZChoLCBjKTsKKworCQkvKiBQdXQgam9iIG9udG8gdGhlIGNvbXBsZXRlZCBRICovCisJCWFkZFEoJmgtPmNtcFEsIGMpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9uZXh0X2NvbXBsZXRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbnRlcnJ1cHRfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXJldHVybiBoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgaW50ZXJydXB0X25vdF9mb3JfdXMoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlyZXR1cm4gKChoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpID09IDApIHx8CisJCSAoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYmFkX3RhZyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBfX3UzMiB0YWdfaW5kZXgsCisJX191MzIgcmF3X3RhZykKK3sKKwlpZiAodW5saWtlbHkodGFnX2luZGV4ID49IGgtPm5yX2NtZHMpKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJiYWQgdGFnIDB4JTA4eCBpZ25vcmVkLlxuIiwgcmF3X3RhZyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3UzMiByYXdfdGFnKQoreworCXJlbW92ZVEoYyk7CisJaWYgKGxpa2VseShjLT5jbWRfdHlwZSA9PSBDTURfU0NTSSkpCisJCWNvbXBsZXRlX3Njc2lfY29tbWFuZChjLCAwLCByYXdfdGFnKTsKKwllbHNlIGlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9DVExfUEVORCkKKwkJY29tcGxldGUoYy0+d2FpdGluZyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmggPSBkZXZfaWQ7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191MzIgcmF3X3RhZywgdGFnLCB0YWdfaW5kZXg7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKworCWlmIChpbnRlcnJ1cHRfbm90X2Zvcl91cyhoKSkKKwkJcmV0dXJuIElSUV9OT05FOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKGludGVycnVwdF9wZW5kaW5nKGgpKSB7CisJCXdoaWxlICgocmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCkpICE9IEZJRk9fRU1QVFkpIHsKKwkJCWlmIChsaWtlbHkoSFBTQV9UQUdfQ09OVEFJTlNfSU5ERVgocmF3X3RhZykpKSB7CisJCQkJdGFnX2luZGV4ID0gSFBTQV9UQUdfVE9fSU5ERVgocmF3X3RhZyk7CisJCQkJaWYgKGJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkKKwkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJCWMgPSBoLT5jbWRfcG9vbCArIHRhZ19pbmRleDsKKwkJCQlmaW5pc2hfY21kKGMsIHJhd190YWcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJdGFnID0gSFBTQV9UQUdfRElTQ0FSRF9FUlJPUl9CSVRTKHJhd190YWcpOworCQkJYyA9IE5VTEw7CisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7CisJCQkJaWYgKGMtPmJ1c2FkZHIgPT0gdGFnKSB7CisJCQkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJlLiAqLworc3RhdGljIF9fZGV2aW5pdCBpbnQgaHBzYV9tZXNzYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBjaGFyIG9wY29kZSwKKwkJCQkJCXVuc2lnbmVkIGNoYXIgdHlwZSkKK3sKKwlzdHJ1Y3QgQ29tbWFuZCB7CisJCXN0cnVjdCBDb21tYW5kTGlzdEhlYWRlciBDb21tYW5kSGVhZGVyOworCQlzdHJ1Y3QgUmVxdWVzdEJsb2NrIFJlcXVlc3Q7CisJCXN0cnVjdCBFcnJEZXNjcmlwdG9yIEVycm9yRGVzY3JpcHRvcjsKKwl9OworCXN0cnVjdCBDb21tYW5kICpjbWQ7CisJc3RhdGljIGNvbnN0IHNpemVfdCBjbWRfc3ogPSBzaXplb2YoKmNtZCkgKworCQkJCQlzaXplb2YoY21kLT5FcnJvckRlc2NyaXB0b3IpOworCWRtYV9hZGRyX3QgcGFkZHI2NDsKKwl1aW50MzJfdCBwYWRkcjMyLCB0YWc7CisJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwlpbnQgaSwgZXJyOworCisJdmFkZHIgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CisJaWYgKHZhZGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogVGhlIEluYm91bmQgUG9zdCBRdWV1ZSBvbmx5IGFjY2VwdHMgMzItYml0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgdGhlCisJICogQ0NJU1MgY29tbWFuZHMsIHNvIHRoZXkgbXVzdCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgbG93ZXIgNEdpQiBvZgorCSAqIG1lbW9yeS4KKwkgKi8KKwllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGVycikgeworCQlpb3VubWFwKHZhZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgY21kX3N6LCAmcGFkZHI2NCk7CisJaWYgKGNtZCA9PSBOVUxMKSB7CisJCWlvdW5tYXAodmFkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBUaGlzIG11c3QgZml0LCBiZWNhdXNlIG9mIHRoZSAzMi1iaXQgY29uc2lzdGVudCBETUEgbWFzay4gIEFsc28sCisJICogYWx0aG91Z2ggdGhlcmUncyBubyBndWFyYW50ZWUsIHdlIGFzc3VtZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGF0CisJICogbGVhc3QgNC1ieXRlIGFsaWduZWQgKG1vc3QgbGlrZWx5LCBpdCdzIHBhZ2UtYWxpZ25lZCkuCisJICovCisJcGFkZHIzMiA9IHBhZGRyNjQ7CisKKwljbWQtPkNvbW1hbmRIZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CisJY21kLT5Db21tYW5kSGVhZGVyLlNHTGlzdCA9IDA7CisJY21kLT5Db21tYW5kSGVhZGVyLlNHVG90YWwgPSAwOworCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcubG93ZXIgPSBwYWRkcjMyOworCWNtZC0+Q29tbWFuZEhlYWRlci5UYWcudXBwZXIgPSAwOworCW1lbXNldCgmY21kLT5Db21tYW5kSGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXMsIDAsIDgpOworCisJY21kLT5SZXF1ZXN0LkNEQkxlbiA9IDE2OworCWNtZC0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX01TRzsKKwljbWQtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX0hFQURPRlFVRVVFOworCWNtZC0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwljbWQtPlJlcXVlc3QuVGltZW91dCA9IDA7IC8qIERvbid0IHRpbWUgb3V0ICovCisJY21kLT5SZXF1ZXN0LkNEQlswXSA9IG9wY29kZTsKKwljbWQtPlJlcXVlc3QuQ0RCWzFdID0gdHlwZTsKKwltZW1zZXQoJmNtZC0+UmVxdWVzdC5DREJbMl0sIDAsIDE0KTsgLyogcmVzdCBvZiB0aGUgQ0RCIGlzIHJlc2VydmVkICovCisJY21kLT5FcnJvckRlc2NyaXB0b3IuQWRkci5sb3dlciA9IHBhZGRyMzIgKyBzaXplb2YoKmNtZCk7CisJY21kLT5FcnJvckRlc2NyaXB0b3IuQWRkci51cHBlciA9IDA7CisJY21kLT5FcnJvckRlc2NyaXB0b3IuTGVuID0gc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pOworCisJd3JpdGVsKHBhZGRyMzIsIHZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOworCisJZm9yIChpID0gMDsgaSA8IEhQU0FfTVNHX1NFTkRfUkVUUllfTElNSVQ7IGkrKykgeworCQl0YWcgPSByZWFkbCh2YWRkciArIFNBNV9SRVBMWV9QT1JUX09GRlNFVCk7CisJCWlmIChIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFModGFnKSA9PSBwYWRkcjMyKQorCQkJYnJlYWs7CisJCW1zbGVlcChIUFNBX01TR19TRU5EX1JFVFJZX0lOVEVSVkFMX01TRUNTKTsKKwl9CisKKwlpb3VubWFwKHZhZGRyKTsKKworCS8qIHdlIGxlYWsgdGhlIERNQSBidWZmZXIgaGVyZSAuLi4gbm8gY2hvaWNlIHNpbmNlIHRoZSBjb250cm9sbGVyIGNvdWxkCisJICogIHN0aWxsIGNvbXBsZXRlIHRoZSBjb21tYW5kLgorCSAqLworCWlmIChpID09IEhQU0FfTVNHX1NFTkRfUkVUUllfTElNSVQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCB0aW1lZCBvdXRcbiIsCisJCQlvcGNvZGUsIHR5cGUpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGNtZF9zeiwgY21kLCBwYWRkcjY0KTsKKworCWlmICh0YWcgJiBIUFNBX0VSUk9SX0JJVCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIG1lc3NhZ2UgJTAyeDolMDJ4IGZhaWxlZFxuIiwKKwkJCW9wY29kZSwgdHlwZSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIG1lc3NhZ2UgJTAyeDolMDJ4IHN1Y2NlZWRlZFxuIiwKKwkJb3Bjb2RlLCB0eXBlKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBocHNhX3NvZnRfcmVzZXRfY29udHJvbGxlcihwKSBocHNhX21lc3NhZ2UocCwgMSwgMCkKKyNkZWZpbmUgaHBzYV9ub29wKHApIGhwc2FfbWVzc2FnZShwLCAzLCAwKQorCitzdGF0aWMgX19kZXZpbml0IGludCBocHNhX3Jlc2V0X21zaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKy8qIHRoZSAjZGVmaW5lcyBhcmUgc3RvbGVuIGZyb20gZHJpdmVycy9wY2kvbXNpLmguICovCisjZGVmaW5lIG1zaV9jb250cm9sX3JlZyhiYXNlKQkJKGJhc2UgKyBQQ0lfTVNJX0ZMQUdTKQorI2RlZmluZSBQQ0lfTVNJWF9GTEFHU19FTkFCTEUJCSgxIDw8IDE1KQorCisJaW50IHBvczsKKwl1MTYgY29udHJvbCA9IDA7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAocG9zKSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CisJCWlmIChjb250cm9sICYgUENJX01TSV9GTEFHU19FTkFCTEUpIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZXNldHRpbmcgTVNJXG4iKTsKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwKKwkJCQkJY29udHJvbCAmIH5QQ0lfTVNJX0ZMQUdTX0VOQUJMRSk7CisJCX0KKwl9CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKHBvcykgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOworCQlpZiAoY29udHJvbCAmIFBDSV9NU0lYX0ZMQUdTX0VOQUJMRSkgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlc2V0dGluZyBNU0ktWFxuIik7CisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksCisJCQkJCWNvbnRyb2wgJiB+UENJX01TSVhfRkxBR1NfRU5BQkxFKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGRvZXMgYSBoYXJkIHJlc2V0IG9mIHRoZSBjb250cm9sbGVyIHVzaW5nIFBDSSBwb3dlciBtYW5hZ2VtZW50CisgKiBzdGF0ZXMuCisgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IGhwc2FfaGFyZF9yZXNldF9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXUxNiBwbWNzciwgc2F2ZWRfY29uZmlnX3NwYWNlWzMyXTsKKwlpbnQgaSwgcG9zOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIFBDSSBQTSB0byByZXNldCBjb250cm9sbGVyXG4iKTsKKworCS8qIFRoaXMgaXMgdmVyeSBuZWFybHkgdGhlIHNhbWUgdGhpbmcgYXMKKwkgKgorCSAqIHBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOworCSAqIHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QzaG90KTsKKwkgKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CisJICogcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7CisJICoKKwkgKiBidXQgd2UgY2FuJ3QgdXNlIHRoZXNlIG5pY2UgY2FubmVkIGtlcm5lbCByb3V0aW5lcyBvbgorCSAqIGtleGVjLCBiZWNhdXNlIHRoZXkgYWxzbyBjaGVjayB0aGUgTVNJL01TSS1YIHN0YXRlIGluIFBDSQorCSAqIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGRvIHRoZSB3cm9uZyB0aGluZyB3aGVuIGl0IGlzCisJICogc2V0L2NsZWFyZWQuICBBbHNvLCB0aGUgcGNpX3NhdmUvcmVzdG9yZV9zdGF0ZSBmdW5jdGlvbnMKKwkgKiB2aW9sYXRlIHRoZSBvcmRlcmluZyByZXF1aXJlbWVudHMgZm9yIHJlc3RvcmluZyB0aGUKKwkgKiBjb25maWd1cmF0aW9uIHNwYWNlIGZyb20gdGhlIENDSVNTIGRvY3VtZW50IChzZWUgdGhlCisJICogY29tbWVudCBiZWxvdykuICBTbyB3ZSByb2xsIG91ciBvd24gLi4uLgorCSAqLworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDIqaSwgJnNhdmVkX2NvbmZpZ19zcGFjZVtpXSk7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOworCWlmIChwb3MgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaHBzYV9yZXNldF9jb250cm9sbGVyOiBQQ0kgUE0gbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFF1b3RpbmcgZnJvbSB0aGUgT3BlbiBDSVNTIFNwZWNpZmljYXRpb246ICJUaGUgUG93ZXIKKwkgKiBNYW5hZ2VtZW50IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyIChDU1IpIGNvbnRyb2xzIHRoZSBwb3dlcgorCSAqIHN0YXRlIG9mIHRoZSBkZXZpY2UuICBUaGUgbm9ybWFsIG9wZXJhdGluZyBzdGF0ZSBpcyBEMCwKKwkgKiBDU1I9MDBoLiAgVGhlIHNvZnR3YXJlIG9mZiBzdGF0ZSBpcyBEMywgQ1NSPTAzaC4gIFRvIHJlc2V0CisJICogdGhlIGNvbnRyb2xsZXIsIHBsYWNlIHRoZSBpbnRlcmZhY2UgZGV2aWNlIGluIEQzIHRoZW4gdG8KKwkgKiBEMCwgdGhpcyBjYXVzZXMgYSBzZWNvbmRhcnkgUENJIHJlc2V0IHdoaWNoIHdpbGwgcmVzZXQgdGhlCisJICogY29udHJvbGxlci4iCisJICovCisKKwkvKiBlbnRlciB0aGUgRDNob3QgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOworCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCXBtY3NyIHw9IFBDSV9EM2hvdDsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKKworCW1zbGVlcCg1MDApOworCisJLyogZW50ZXIgdGhlIEQwIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgKi8KKwlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKKwlwbWNzciB8PSBQQ0lfRDA7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCBwbWNzcik7CisKKwltc2xlZXAoNTAwKTsKKworCS8qIFJlc3RvcmUgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLiAgVGhlIE9wZW4gQ0lTUworCSAqIFNwZWNpZmljYXRpb24gc2F5cywgIlJlc3RvcmUgdGhlIFBDSSBDb25maWd1cmF0aW9uCisJICogUmVnaXN0ZXJzLCBvZmZzZXRzIDAwaCB0aHJvdWdoIDYwaC4gSXQgaXMgaW1wb3J0YW50IHRvCisJICogcmVzdG9yZSB0aGUgY29tbWFuZCByZWdpc3RlciwgMTYtYml0cyBhdCBvZmZzZXQgMDRoLAorCSAqIGxhc3QuIERvIG5vdCByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHN0YXR1cyByZWdpc3RlciwKKwkgKiAxNi1iaXRzIGF0IG9mZnNldCAwNmguIiAgTm90ZSB0aGF0IHRoZSBvZmZzZXQgaXMgMippLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChpID09IDIgfHwgaSA9PSAzKQorCQkJY29udGludWU7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAyKmksIHNhdmVkX2NvbmZpZ19zcGFjZVtpXSk7CisJfQorCXdtYigpOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCA0LCBzYXZlZF9jb25maWdfc3BhY2VbMl0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgV2UgY2Fubm90IHJlYWQgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSwgZm9yIHBvcnRhYmlsaXR5IHdlIG11c3QgdXNlCisgKiAgIHRoZSBpbyBmdW5jdGlvbnMuCisgKiAgIFRoaXMgaXMgZm9yIGRlYnVnIG9ubHkuCisgKi8KKyNpZmRlZiBIUFNBX0RFQlVHCitzdGF0aWMgdm9pZCBwcmludF9jZmdfdGFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgQ2ZnVGFibGUgKnRiKQoreworCWludCBpOworCWNoYXIgdGVtcF9uYW1lWzE3XTsKKworCWRldl9pbmZvKGRldiwgIkNvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIik7CisJZGV2X2luZm8oZGV2LCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQl0ZW1wX25hbWVbaV0gPSByZWFkYigmKHRiLT5TaWduYXR1cmVbaV0pKTsKKwl0ZW1wX25hbWVbNF0gPSAnXDAnOworCWRldl9pbmZvKGRldiwgIiAgIFNpZ25hdHVyZSA9ICVzXG4iLCB0ZW1wX25hbWUpOworCWRldl9pbmZvKGRldiwgIiAgIFNwZWMgTnVtYmVyID0gJWRcbiIsIHJlYWRsKCYodGItPlNwZWNWYWxlbmNlKSkpOworCWRldl9pbmZvKGRldiwgIiAgIFRyYW5zcG9ydCBtZXRob2RzIHN1cHBvcnRlZCA9IDB4JXhcbiIsCisJICAgICAgIHJlYWRsKCYodGItPlRyYW5zcG9ydFN1cHBvcnQpKSk7CisJZGV2X2luZm8oZGV2LCAiICAgVHJhbnNwb3J0IG1ldGhvZHMgYWN0aXZlID0gMHgleFxuIiwKKwkgICAgICAgcmVhZGwoJih0Yi0+VHJhbnNwb3J0QWN0aXZlKSkpOworCWRldl9pbmZvKGRldiwgIiAgIFJlcXVlc3RlZCB0cmFuc3BvcnQgTWV0aG9kID0gMHgleFxuIiwKKwkgICAgICAgcmVhZGwoJih0Yi0+SG9zdFdyaXRlLlRyYW5zcG9ydFJlcXVlc3QpKSk7CisJZGV2X2luZm8oZGV2LCAiICAgQ29hbGVzY2UgSW50ZXJydXB0IERlbGF5ID0gMHgleFxuIiwKKwkgICAgICAgcmVhZGwoJih0Yi0+SG9zdFdyaXRlLkNvYWxJbnREZWxheSkpKTsKKwlkZXZfaW5mbyhkZXYsICIgICBDb2FsZXNjZSBJbnRlcnJ1cHQgQ291bnQgPSAweCV4XG4iLAorCSAgICAgICByZWFkbCgmKHRiLT5Ib3N0V3JpdGUuQ29hbEludENvdW50KSkpOworCWRldl9pbmZvKGRldiwgIiAgIE1heCBvdXRzdGFuZGluZyBjb21tYW5kcyA9IDB4JWRcbiIsCisJICAgICAgIHJlYWRsKCYodGItPkNtZHNPdXRNYXgpKSk7CisJZGV2X2luZm8oZGV2LCAiICAgQnVzIFR5cGVzID0gMHgleFxuIiwgcmVhZGwoJih0Yi0+QnVzVHlwZXMpKSk7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXRlbXBfbmFtZVtpXSA9IHJlYWRiKCYodGItPlNlcnZlck5hbWVbaV0pKTsKKwl0ZW1wX25hbWVbMTZdID0gJ1wwJzsKKwlkZXZfaW5mbyhkZXYsICIgICBTZXJ2ZXIgTmFtZSA9ICVzXG4iLCB0ZW1wX25hbWUpOworCWRldl9pbmZvKGRldiwgIiAgIEhlYXJ0YmVhdCBDb3VudGVyID0gMHgleFxuXG5cbiIsCisJCXJlYWRsKCYodGItPkhlYXJ0QmVhdCkpKTsKK30KKyNlbmRpZgkJCQkvKiBIUFNBX0RFQlVHICovCisKK3N0YXRpYyBpbnQgZmluZF9QQ0lfQkFSX2luZGV4KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIHBjaV9iYXJfYWRkcikKK3sKKwlpbnQgaSwgb2Zmc2V0LCBtZW1fdHlwZSwgYmFyX3R5cGU7CisKKwlpZiAocGNpX2Jhcl9hZGRyID09IFBDSV9CQVNFX0FERFJFU1NfMCkJLyogbG9va2luZyBmb3IgQkFSIHplcm8/ICovCisJCXJldHVybiAwOworCW9mZnNldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaSsrKSB7CisJCWJhcl90eXBlID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgUENJX0JBU0VfQUREUkVTU19TUEFDRTsKKwkJaWYgKGJhcl90eXBlID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCisJCQlvZmZzZXQgKz0gNDsKKwkJZWxzZSB7CisJCQltZW1fdHlwZSA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmCisJCQkgICAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLOworCQkJc3dpdGNoIChtZW1fdHlwZSkgeworCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzMyOgorCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNOgorCQkJCW9mZnNldCArPSA0OwkvKiAzMiBiaXQgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKKwkJCQlvZmZzZXQgKz0gODsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CS8qIHJlc2VydmVkIGluIFBDSSAyLjIgKi8KKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSAgICAgICAiYmFzZSBhZGRyZXNzIGlzIGludmFsaWRcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAob2Zmc2V0ID09IHBjaV9iYXJfYWRkciAtIFBDSV9CQVNFX0FERFJFU1NfMCkKKwkJCXJldHVybiBpICsgMTsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKiBJZiBNU0kvTVNJLVggaXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgd2Ugd2lsbCB0cnkgdG8gZW5hYmxlIGl0IG9uCisgKiBjb250cm9sbGVycyB0aGF0IGFyZSBjYXBhYmxlLiBJZiBub3QsIHdlIHVzZSBJTy1BUElDIG1vZGUuCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGhwc2FfaW50ZXJydXB0X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwkJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsIF9fdTMyIGJvYXJkX2lkKQoreworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaW50IGVycjsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBocHNhX21zaXhfZW50cmllc1s0XSA9IHsgezAsIDB9LCB7MCwgMX0sCisJezAsIDJ9LCB7MCwgM30KKwl9OworCisJLyogU29tZSBib2FyZHMgYWR2ZXJ0aXNlIE1TSSBidXQgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgaXQgKi8KKwlpZiAoKGJvYXJkX2lkID09IDB4NDA3MDBFMTEpIHx8CisJICAgIChib2FyZF9pZCA9PSAweDQwODAwRTExKSB8fAorCSAgICAoYm9hcmRfaWQgPT0gMHg0MDgyMEUxMSkgfHwgKGJvYXJkX2lkID09IDB4NDA4MzBFMTEpKQorCQlnb3RvIGRlZmF1bHRfaW50X21vZGU7CisJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0lYKSkgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTVNJWFxuIik7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChwZGV2LCBocHNhX21zaXhfZW50cmllcywgNCk7CisJCWlmICghZXJyKSB7CisJCQloLT5pbnRyWzBdID0gaHBzYV9tc2l4X2VudHJpZXNbMF0udmVjdG9yOworCQkJaC0+aW50clsxXSA9IGhwc2FfbXNpeF9lbnRyaWVzWzFdLnZlY3RvcjsKKwkJCWgtPmludHJbMl0gPSBocHNhX21zaXhfZW50cmllc1syXS52ZWN0b3I7CisJCQloLT5pbnRyWzNdID0gaHBzYV9tc2l4X2VudHJpZXNbM10udmVjdG9yOworCQkJaC0+bXNpeF92ZWN0b3IgPSAxOworCQkJcmV0dXJuOworCQl9CisJCWlmIChlcnIgPiAwKSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAib25seSAlZCBNU0ktWCB2ZWN0b3JzICIKKwkJCSAgICAgICAiYXZhaWxhYmxlXG4iLCBlcnIpOworCQkJZ290byBkZWZhdWx0X2ludF9tb2RlOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIk1TSS1YIGluaXQgZmFpbGVkICVkXG4iLAorCQkJICAgICAgIGVycik7CisJCQlnb3RvIGRlZmF1bHRfaW50X21vZGU7CisJCX0KKwl9CisJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNU0lcbiIpOworCQlpZiAoIXBjaV9lbmFibGVfbXNpKHBkZXYpKQorCQkJaC0+bXNpX3ZlY3RvciA9IDE7CisJCWVsc2UKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJNU0kgaW5pdCBmYWlsZWRcbiIpOworCX0KK2RlZmF1bHRfaW50X21vZGU6CisjZW5kaWYJCQkJLyogQ09ORklHX1BDSV9NU0kgKi8KKwkvKiBpZiB3ZSBnZXQgaGVyZSB3ZSdyZSBnb2luZyB0byB1c2UgdGhlIGRlZmF1bHQgaW50ZXJydXB0IG1vZGUgKi8KKwloLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0gPSBwZGV2LT5pcnE7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGhwc2FfcGNpX2luaXQoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdXNob3J0IHN1YnN5c3RlbV92ZW5kb3JfaWQsIHN1YnN5c3RlbV9kZXZpY2VfaWQsIGNvbW1hbmQ7CisJX191MzIgYm9hcmRfaWQsIHNjcmF0Y2hwYWQgPSAwOworCV9fdTY0IGNmZ19vZmZzZXQ7CisJX191MzIgY2ZnX2Jhc2VfYWRkcjsKKwlfX3U2NCBjZmdfYmFzZV9hZGRyX2luZGV4OworCWludCBpLCBwcm9kX2luZGV4LCBlcnI7CisKKwlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CisJCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKQorCQlpZiAoYm9hcmRfaWQgPT0gcHJvZHVjdHNbaV0uYm9hcmRfaWQpCisJCQlicmVhazsKKworCXByb2RfaW5kZXggPSBpOworCisJaWYgKHByb2RfaW5kZXggPT0gQVJSQVlfU0laRShwcm9kdWN0cykpIHsKKwkJcHJvZF9pbmRleC0tOworCQlpZiAoc3Vic3lzdGVtX3ZlbmRvcl9pZCAhPSBQQ0lfVkVORE9SX0lEX0hQIHx8CisJCQkJIWhwc2FfYWxsb3dfYW55KSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAidW5yZWNvZ25pemVkIGJvYXJkIElEOiIKKwkJCQkiIDB4JTA4bHgsIGlnbm9yaW5nLlxuIiwKKwkJCQkodW5zaWduZWQgbG9uZykgYm9hcmRfaWQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJLyogY2hlY2sgdG8gc2VlIGlmIGNvbnRyb2xsZXIgaGFzIGJlZW4gZGlzYWJsZWQKKwkgKiBCRUZPUkUgdHJ5aW5nIHRvIGVuYWJsZSBpdAorCSAqLworCSh2b2lkKXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJaWYgKCEoY29tbWFuZCAmIDB4MDIpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIGFwcGVhcnMgdG8gYmUgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImhwc2EiKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIElmIHRoZSBrZXJuZWwgc3VwcG9ydHMgTVNJL01TSS1YIHdlIHdpbGwgdHJ5IHRvIGVuYWJsZSB0aGF0LAorCSAqIGVsc2Ugd2UgdXNlIHRoZSBJTy1BUElDIGludGVycnVwdCBhc3NpZ25lZCB0byB1cyBieSBzeXN0ZW0gUk9NLgorCSAqLworCWhwc2FfaW50ZXJydXB0X21vZGUoaCwgcGRldiwgYm9hcmRfaWQpOworCisJLyogZmluZCB0aGUgbWVtb3J5IEJBUiAqLworCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgeworCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0pCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gREVWSUNFX0NPVU5UX1JFU09VUkNFKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgQkFSIGZvdW5kXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCX0KKworCWgtPnBhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOyAvKiBhZGRyZXNzaW5nIG1vZGUgYml0cworCQkJCQkJICogYWxyZWFkeSByZW1vdmVkCisJCQkJCQkgKi8KKworCWgtPnZhZGRyID0gcmVtYXBfcGNpX21lbShoLT5wYWRkciwgMHgyNTApOworCisJLyogV2FpdCBmb3IgdGhlIGJvYXJkIHRvIGJlY29tZSByZWFkeS4gICovCisJZm9yIChpID0gMDsgaSA8IEhQU0FfQk9BUkRfUkVBRFlfSVRFUkFUSU9OUzsgaSsrKSB7CisJCXNjcmF0Y2hwYWQgPSByZWFkbChoLT52YWRkciArIFNBNV9TQ1JBVENIUEFEX09GRlNFVCk7CisJCWlmIChzY3JhdGNocGFkID09IEhQU0FfRklSTVdBUkVfUkVBRFkpCisJCQlicmVhazsKKwkJbXNsZWVwKEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTF9NU0VDUyk7CisJfQorCWlmIChzY3JhdGNocGFkICE9IEhQU0FfRklSTVdBUkVfUkVBRFkpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImJvYXJkIG5vdCByZWFkeSwgdGltZWQgb3V0LlxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwl9CisKKwkvKiBnZXQgdGhlIGFkZHJlc3MgaW5kZXggbnVtYmVyICovCisJY2ZnX2Jhc2VfYWRkciA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X0NUQ0ZHX09GRlNFVCk7CisJY2ZnX2Jhc2VfYWRkciAmPSAoX191MzIpIDB4MDAwMGZmZmY7CisJY2ZnX2Jhc2VfYWRkcl9pbmRleCA9IGZpbmRfUENJX0JBUl9pbmRleChwZGV2LCBjZmdfYmFzZV9hZGRyKTsKKwlpZiAoY2ZnX2Jhc2VfYWRkcl9pbmRleCA9PSAtMSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY2Fubm90IGZpbmQgY2ZnX2Jhc2VfYWRkcl9pbmRleFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwl9CisKKwljZmdfb2Zmc2V0ID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfQ1RNRU1fT0ZGU0VUKTsKKwloLT5jZmd0YWJsZSA9IHJlbWFwX3BjaV9tZW0ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsCisJCQkgICAgICAgY2ZnX2Jhc2VfYWRkcl9pbmRleCkgKyBjZmdfb2Zmc2V0LAorCQkJCXNpemVvZihoLT5jZmd0YWJsZSkpOworCWgtPmJvYXJkX2lkID0gYm9hcmRfaWQ7CisKKwkvKiBRdWVyeSBjb250cm9sbGVyIGZvciBtYXggc3VwcG9ydGVkIGNvbW1hbmRzOiAqLworCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPkNtZHNPdXRNYXgpKTsKKworCWgtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKKwloLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7CisJLyogQWxsb3cgcm9vbSBmb3Igc29tZSBpb2N0bHMgKi8KKwloLT5ucl9jbWRzID0gaC0+bWF4X2NvbW1hbmRzIC0gNDsKKworCWlmICgocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMF0pICE9ICdDJykgfHwKKwkgICAgKHJlYWRiKCZoLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzFdKSAhPSAnSScpIHx8CisJICAgIChyZWFkYigmaC0+Y2ZndGFibGUtPlNpZ25hdHVyZVsyXSkgIT0gJ1MnKSB8fAorCSAgICAocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbM10pICE9ICdTJykpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vdCBhIHZhbGlkIENJU1MgY29uZmlnIHRhYmxlXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCX0KKyNpZmRlZiBDT05GSUdfWDg2CisJeworCQkvKiBOZWVkIHRvIGVuYWJsZSBwcmVmZXRjaCBpbiB0aGUgU0NTSSBjb3JlIGZvciA2NDAwIGluIHg4NiAqLworCQlfX3UzMiBwcmVmZXRjaDsKKwkJcHJlZmV0Y2ggPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CisJCXByZWZldGNoIHw9IDB4MTAwOworCQl3cml0ZWwocHJlZmV0Y2gsICYoaC0+Y2ZndGFibGUtPlNDU0lfUHJlZmV0Y2gpKTsKKwl9CisjZW5kaWYKKworCS8qIERpc2FibGluZyBETUEgcHJlZmV0Y2ggZm9yIHRoZSBQNjAwCisJICogQW4gQVNJQyBidWcgbWF5IHJlc3VsdCBpbiBhIHByZWZldGNoIGJleW9uZAorCSAqIHBoeXNpY2FsIG1lbW9yeS4KKwkgKi8KKwlpZiAoYm9hcmRfaWQgPT0gMHgzMjI1MTAzQykgeworCQlfX3UzMiBkbWFfcHJlZmV0Y2g7CisJCWRtYV9wcmVmZXRjaCA9IHJlYWRsKGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKKwkJZG1hX3ByZWZldGNoIHw9IDB4ODAwMDsKKwkJd3JpdGVsKGRtYV9wcmVmZXRjaCwgaC0+dmFkZHIgKyBJMk9fRE1BMV9DRkcpOworCX0KKworCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPkNtZHNPdXRNYXgpKTsKKwkvKiBVcGRhdGUgdGhlIGZpZWxkLCBhbmQgdGhlbiByaW5nIHRoZSBkb29yYmVsbCAqLworCXdyaXRlbChDRkdUQkxfVHJhbnNfU2ltcGxlLCAmKGgtPmNmZ3RhYmxlLT5Ib3N0V3JpdGUuVHJhbnNwb3J0UmVxdWVzdCkpOworCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CisKKwkvKiB1bmRlciBjZXJ0YWluIHZlcnkgcmFyZSBjb25kaXRpb25zLCB0aGlzIGNhbiB0YWtlIGF3aGlsZS4KKwkgKiAoZS5nLjogaG90IHJlcGxhY2UgYSBmYWlsZWQgMTQ0R0IgZHJpdmUgaW4gYSBSQUlEIDUgc2V0IHJpZ2h0CisJICogYXMgd2UgZW50ZXIgdGhpcyBjb2RlLikKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTkZJR19XQUlUOyBpKyspIHsKKwkJaWYgKCEocmVhZGwoaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpICYgQ0ZHVEJMX0NoYW5nZVJlcSkpCisJCQlicmVhazsKKwkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLworCQltc2xlZXAoMTApOworCX0KKworI2lmZGVmIEhQU0FfREVCVUcKKwlwcmludF9jZmdfdGFibGUoJnBkZXYtPmRldiwgaC0+Y2ZndGFibGUpOworI2VuZGlmCQkJCS8qIEhQU0FfREVCVUcgKi8KKworCWlmICghKHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zcG9ydEFjdGl2ZSkpICYgQ0ZHVEJMX1RyYW5zX1NpbXBsZSkpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYm9hcmQgaW50byBzaW1wbGUgbW9kZVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9yZXM6CisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KKwkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KKwkgKi8KKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwc2FfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IGk7CisJaW50IGRhYzsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCisJaWYgKG51bWJlcl9vZl9jb250cm9sbGVycyA9PSAwKQorCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJcbiIpOworCWlmIChyZXNldF9kZXZpY2VzKSB7CisJCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyIHdpdGggYSBQQ0kgcG93ZXItY3ljbGUgKi8KKwkJaWYgKGhwc2FfaGFyZF9yZXNldF9jb250cm9sbGVyKHBkZXYpIHx8IGhwc2FfcmVzZXRfbXNpKHBkZXYpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJLyogU29tZSBkZXZpY2VzIChub3RhYmx5IHRoZSBIUCBTbWFydCBBcnJheSA1aSBDb250cm9sbGVyKQorCQkgICBuZWVkIGEgbGl0dGxlIHBhdXNlIGhlcmUgKi8KKwkJbXNsZWVwKEhQU0FfUE9TVF9SRVNFVF9QQVVTRV9NU0VDUyk7CisKKwkJLyogTm93IHRyeSB0byBnZXQgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBhIG5vLW9wICovCisJCWZvciAoaSA9IDA7IGkgPCBIUFNBX1BPU1RfUkVTRVRfTk9PUF9SRVRSSUVTOyBpKyspIHsKKwkJCWlmIChocHNhX25vb3AocGRldikgPT0gMCkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8tb3AgZmFpbGVkJXNcbiIsCisJCQkJCQkoaSA8IDExID8gIjsgcmUtdHJ5aW5nIiA6ICIiKSk7CisJCX0KKwl9CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCkgJSA4KTsKKwloID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgpCisJCXJldHVybiAtMTsKKworCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMTsKKwlJTklUX0hMSVNUX0hFQUQoJmgtPmNtcFEpOworCUlOSVRfSExJU1RfSEVBRCgmaC0+cmVxUSk7CisJbXV0ZXhfaW5pdCgmaC0+YnVzeV9zaHV0dGluZ19kb3duKTsKKwlpbml0X2NvbXBsZXRpb24oJmgtPnNjYW5fd2FpdCk7CisJaWYgKGhwc2FfcGNpX2luaXQoaCwgcGRldikgIT0gMCkKKwkJZ290byBjbGVhbjE7CisKKwlzcHJpbnRmKGgtPmRldm5hbWUsICJocHNhJWQiLCBudW1iZXJfb2ZfY29udHJvbGxlcnMpOworCWgtPmN0bHIgPSBudW1iZXJfb2ZfY29udHJvbGxlcnM7CisJbnVtYmVyX29mX2NvbnRyb2xsZXJzKys7CisJaC0+cGRldiA9IHBkZXY7CisKKwkvKiBjb25maWd1cmUgUENJIERNQSBzdHVmZiAqLworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkKKwkJZGFjID0gMTsKKwllbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkKKwkJZGFjID0gMDsKKwllbHNlIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7CisJCWdvdG8gY2xlYW4xOworCX0KKworCS8qIG1ha2Ugc3VyZSB0aGUgYm9hcmQgaW50ZXJydXB0cyBhcmUgb2ZmICovCisJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7CisJaWYgKHJlcXVlc3RfaXJxKGgtPmludHJbU0lNUExFX01PREVfSU5UXSwgZG9faHBzYV9pbnRyLAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBoLT5kZXZuYW1lLCBoKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGlycSAlZCBmb3IgJXNcbiIsCisJCSAgICAgICBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGgtPmRldm5hbWUpOworCQlnb3RvIGNsZWFuMjsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IDwweCV4PiBhdCBQQ0kgJXMgSVJRICVkJXMgdXNpbmcgREFDXG4iLAorCSAgICAgICBoLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsIHBjaV9uYW1lKHBkZXYpLAorCSAgICAgICBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGRhYyA/ICIiIDogIiBub3QiKTsKKworCWgtPmNtZF9wb29sX2JpdHMgPQorCSAgICBrbWFsbG9jKCgoaC0+bnJfY21kcyArIEJJVFNfUEVSX0xPTkcgLQorCQkgICAgICAxKSAvIEJJVFNfUEVSX0xPTkcpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwloLT5jbWRfcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsCisJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKCpoLT5jbWRfcG9vbCksCisJCSAgICAmKGgtPmNtZF9wb29sX2RoYW5kbGUpKTsKKwloLT5lcnJpbmZvX3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LAorCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZigqaC0+ZXJyaW5mb19wb29sKSwKKwkJICAgICYoaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpKTsKKwlpZiAoKGgtPmNtZF9wb29sX2JpdHMgPT0gTlVMTCkKKwkgICAgfHwgKGgtPmNtZF9wb29sID09IE5VTEwpCisJICAgIHx8IChoLT5lcnJpbmZvX3Bvb2wgPT0gTlVMTCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIGNsZWFuNDsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJmgtPmxvY2spOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGgpOworCW1lbXNldChoLT5jbWRfcG9vbF9iaXRzLCAwLAorCSAgICAgICAoKGgtPm5yX2NtZHMgKyBCSVRTX1BFUl9MT05HIC0KKwkJIDEpIC8gQklUU19QRVJfTE9ORykgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisJaHBzYV9zY3NpX3NldHVwKGgpOworCisJLyogVHVybiB0aGUgaW50ZXJydXB0cyBvbiBzbyB3ZSBjYW4gc2VydmljZSByZXF1ZXN0cyAqLworCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PTik7CisKKwlocHNhX3JlZ2lzdGVyX3Njc2koaCk7CS8qIGhvb2sgb3Vyc2VsdmVzIGludG8gU0NTSSBzdWJzeXN0ZW0gKi8KKwloLT5idXN5X2luaXRpYWxpemluZyA9IDA7CisJcmV0dXJuIDE7CisKK2NsZWFuNDoKKwlrZnJlZShoLT5jbWRfcG9vbF9iaXRzKTsKKwlpZiAoaC0+Y21kX3Bvb2wpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCksCisJCQkgICAgaC0+Y21kX3Bvb2wsIGgtPmNtZF9wb29sX2RoYW5kbGUpOworCWlmIChoLT5lcnJpbmZvX3Bvb2wpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAorCQkJICAgIGgtPmVycmluZm9fcG9vbCwKKwkJCSAgICBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7CisJZnJlZV9pcnEoaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoKTsKK2NsZWFuMjoKK2NsZWFuMToKKwloLT5idXN5X2luaXRpYWxpemluZyA9IDA7CisJa2ZyZWUoaCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBocHNhX2ZsdXNoX2NhY2hlKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJY2hhciAqZmx1c2hfYnVmOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKworCWZsdXNoX2J1ZiA9IGt6YWxsb2MoNCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbHVzaF9idWYpCisJCXJldHVybjsKKworCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwlpZiAoIWMpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwkJZ290byBvdXRfb2ZfbWVtb3J5OworCX0KKwlmaWxsX2NtZChjLCBIUFNBX0NBQ0hFX0ZMVVNILCBoLCBmbHVzaF9idWYsIDQsIDAsCisJCVJBSURfQ1RMUl9MVU5JRCwgVFlQRV9DTUQpOworCWhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX3dpdGhfcmV0cnkoaCwgYywgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKGMtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzICE9IDApCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkiZXJyb3IgZmx1c2hpbmcgY2FjaGUgb24gY29udHJvbGxlclxuIik7CisJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKK291dF9vZl9tZW1vcnk6CisJa2ZyZWUoZmx1c2hfYnVmKTsKK30KKworc3RhdGljIHZvaWQgaHBzYV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCisJaCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwkvKiBUdXJuIGJvYXJkIGludGVycnVwdHMgb2ZmICBhbmQgc2VuZCB0aGUgZmx1c2ggY2FjaGUgY29tbWFuZAorCSAqIHNlbmRjbWQgd2lsbCB0dXJuIG9mZiBpbnRlcnJ1cHQsIGFuZCBzZW5kIHRoZSBmbHVzaC4uLgorCSAqIFRvIHdyaXRlIGFsbCBkYXRhIGluIHRoZSBiYXR0ZXJ5IGJhY2tlZCBjYWNoZSB0byBkaXNrcworCSAqLworCWhwc2FfZmx1c2hfY2FjaGUoaCk7CisJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7CisJZnJlZV9pcnEoaC0+aW50clsyXSwgaCk7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAoaC0+bXNpeF92ZWN0b3IpCisJCXBjaV9kaXNhYmxlX21zaXgoaC0+cGRldik7CisJZWxzZSBpZiAoaC0+bXNpX3ZlY3RvcikKKwkJcGNpX2Rpc2FibGVfbXNpKGgtPnBkZXYpOworI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTVNJICovCit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBocHNhX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKworCWlmIChwY2lfZ2V0X2RydmRhdGEocGRldikgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVtb3ZlIGRldmljZSBcbiIpOworCQlyZXR1cm47CisJfQorCWggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJbXV0ZXhfbG9jaygmaC0+YnVzeV9zaHV0dGluZ19kb3duKTsKKwlyZW1vdmVfZnJvbV9zY2FuX2xpc3QoaCk7CisJaHBzYV91bnJlZ2lzdGVyX3Njc2koaCk7CS8qIHVuaG9vayBmcm9tIFNDU0kgc3Vic3lzdGVtICovCisJaHBzYV9zaHV0ZG93bihwZGV2KTsKKwlpb3VubWFwKGgtPnZhZGRyKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCWgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSwKKwkJaC0+Y21kX3Bvb2wsIGgtPmNtZF9wb29sX2RoYW5kbGUpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJaC0+bnJfY21kcyAqIHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKSwKKwkJaC0+ZXJyaW5mb19wb29sLCBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7CisJa2ZyZWUoaC0+Y21kX3Bvb2xfYml0cyk7CisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KKwkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KKwkgKi8KKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwltdXRleF91bmxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CisJa2ZyZWUoaCk7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9zdXNwZW5kKF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCV9fYXR0cmlidXRlX18oKHVudXNlZCkpIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBocHNhX3Jlc3VtZShfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhwc2FfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJocHNhIiwKKwkucHJvYmUgPSBocHNhX2luaXRfb25lLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChocHNhX3JlbW92ZV9vbmUpLAorCS5pZF90YWJsZSA9IGhwc2FfcGNpX2RldmljZV9pZCwJLyogaWRfdGFibGUgKi8KKwkuc2h1dGRvd24gPSBocHNhX3NodXRkb3duLAorCS5zdXNwZW5kID0gaHBzYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBocHNhX3Jlc3VtZSwKK307CisKKy8qCisgKiAgVGhpcyBpcyBpdC4gIFJlZ2lzdGVyIHRoZSBQQ0kgZHJpdmVyIGluZm9ybWF0aW9uIGZvciB0aGUgY2FyZHMgd2UgY29udHJvbAorICogIHRoZSBPUyB3aWxsIGNhbGwgb3VyIHJlZ2lzdGVyZWQgcm91dGluZXMgd2hlbiBpdCBmaW5kcyBvbmUgb2Ygb3VyIGNhcmRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBocHNhX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCS8qIFN0YXJ0IHRoZSBzY2FuIHRocmVhZCAqLworCWhwc2Ffc2Nhbl90aHJlYWQgPSBrdGhyZWFkX3J1bihocHNhX3NjYW5fZnVuYywgTlVMTCwgImhwc2Ffc2NhbiIpOworCWlmIChJU19FUlIoaHBzYV9zY2FuX3RocmVhZCkpIHsKKwkJZXJyID0gUFRSX0VSUihocHNhX3NjYW5fdGhyZWFkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmhwc2FfcGNpX2RyaXZlcik7CisJaWYgKGVycikKKwkJa3RocmVhZF9zdG9wKGhwc2Ffc2Nhbl90aHJlYWQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBocHNhX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhwc2FfcGNpX2RyaXZlcik7CisJa3RocmVhZF9zdG9wKGhwc2Ffc2Nhbl90aHJlYWQpOworfQorCittb2R1bGVfaW5pdChocHNhX2luaXQpOworbW9kdWxlX2V4aXQoaHBzYV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmggYi9kcml2ZXJzL3Njc2kvaHBzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDE5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogICAgRGlzayBBcnJheSBkcml2ZXIgZm9yIEhQIFNtYXJ0IEFycmF5IFNBUyBjb250cm9sbGVycworICogICAgQ29weXJpZ2h0IDIwMDAsIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgICBRdWVzdGlvbnMvQ29tbWVudHMvQnVnZml4ZXMgdG8gaXNzX3N0b3JhZ2VkZXZAaHAuY29tCisgKgorICovCisjaWZuZGVmIEhQU0FfSAorI2RlZmluZSBIUFNBX0gKKworI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgorCisjZGVmaW5lIElPX09LCQkwCisjZGVmaW5lIElPX0VSUk9SCTEKKworc3RydWN0IGN0bHJfaW5mbzsKKworc3RydWN0IGFjY2Vzc19tZXRob2QgeworCXZvaWQgKCpzdWJtaXRfY29tbWFuZCkoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwkJc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKKwl2b2lkICgqc2V0X2ludHJfbWFzaykoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgbG9uZyB2YWwpOworCXVuc2lnbmVkIGxvbmcgKCpmaWZvX2Z1bGwpKHN0cnVjdCBjdGxyX2luZm8gKmgpOworCXVuc2lnbmVkIGxvbmcgKCppbnRyX3BlbmRpbmcpKHN0cnVjdCBjdGxyX2luZm8gKmgpOworCXVuc2lnbmVkIGxvbmcgKCpjb21tYW5kX2NvbXBsZXRlZCkoc3RydWN0IGN0bHJfaW5mbyAqaCk7Cit9OworCitzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90IHsKKwlpbnQgZGV2dHlwZTsKKwlpbnQgYnVzLCB0YXJnZXQsIGx1bjsJCS8qIGFzIHByZXNlbnRlZCB0byB0aGUgT1MgKi8KKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsJLyogYXMgcHJlc2VudGVkIHRvIHRoZSBIVyAqLworI2RlZmluZSBSQUlEX0NUTFJfTFVOSUQgIlwwXDBcMFwwXDBcMFwwXDAiCisJdW5zaWduZWQgY2hhciBkZXZpY2VfaWRbMTZdOyAgICAvKiBmcm9tIGlucXVpcnkgcGcuIDB4ODMgKi8KKwl1bnNpZ25lZCBjaGFyIHZlbmRvcls4XTsgICAgICAgIC8qIGJ5dGVzIDgtMTUgb2YgaW5xdWlyeSBkYXRhICovCisJdW5zaWduZWQgY2hhciBtb2RlbFsxNl07ICAgICAgICAvKiBieXRlcyAxNi0zMSBvZiBpbnF1aXJ5IGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uWzRdOyAgICAgIC8qIGJ5dGVzIDMyLTM1IG9mIGlucXVpcnkgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIgcmFpZF9sZXZlbDsJLyogZnJvbSBpbnF1aXJ5IHBhZ2UgMHhDMSAqLworfTsKKworc3RydWN0IGN0bHJfaW5mbyB7CisJaW50CWN0bHI7CisJY2hhcglkZXZuYW1lWzhdOworCWNoYXIgICAgKnByb2R1Y3RfbmFtZTsKKwljaGFyCWZpcm1fdmVyWzRdOyAvKiBGaXJtd2FyZSB2ZXJzaW9uICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJX191MzIJYm9hcmRfaWQ7CisJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIHBhZGRyOworCWludCAJbnJfY21kczsgLyogTnVtYmVyIG9mIGNvbW1hbmRzIGFsbG93ZWQgb24gdGhpcyBjb250cm9sbGVyICovCisJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOworCWludAlpbnRlcnJ1cHRzX2VuYWJsZWQ7CisJaW50CW1ham9yOworCWludCAJbWF4X2NvbW1hbmRzOworCWludAljb21tYW5kc19vdXRzdGFuZGluZzsKKwlpbnQgCW1heF9vdXRzdGFuZGluZzsgLyogRGVidWcgKi8KKwlpbnQJdXNhZ2VfY291bnQ7ICAvKiBudW1iZXIgb2Ygb3BlbnMgYWxsIGFsbCBtaW5vciBkZXZpY2VzICovCisjCWRlZmluZSBET09SQkVMTF9JTlQJMAorIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkxCisjCWRlZmluZSBTSU1QTEVfTU9ERV9JTlQJMgorIwlkZWZpbmUgTUVNUV9NT0RFX0lOVAkzCisJdW5zaWduZWQgaW50IGludHJbNF07CisJdW5zaWduZWQgaW50IG1zaXhfdmVjdG9yOworCXVuc2lnbmVkIGludCBtc2lfdmVjdG9yOworCXN0cnVjdCBhY2Nlc3NfbWV0aG9kIGFjY2VzczsKKworCS8qIHF1ZXVlIGFuZCBxdWV1ZSBJbmZvICovCisJc3RydWN0IGhsaXN0X2hlYWQgcmVxUTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBjbXBROworCXVuc2lnbmVkIGludCBRZGVwdGg7CisJdW5zaWduZWQgaW50IG1heFFzaW5jZWluaXQ7CisJdW5zaWduZWQgaW50IG1heFNHOworCXNwaW5sb2NrX3QgbG9jazsKKworCS8qIHBvaW50ZXJzIHRvIGNvbW1hbmQgYW5kIGVycm9yIGluZm8gcG9vbCAqLworCXN0cnVjdCBDb21tYW5kTGlzdCAJKmNtZF9wb29sOworCWRtYV9hZGRyX3QJCWNtZF9wb29sX2RoYW5kbGU7CisJc3RydWN0IEVycm9ySW5mbyAJKmVycmluZm9fcG9vbDsKKwlkbWFfYWRkcl90CQllcnJpbmZvX3Bvb2xfZGhhbmRsZTsKKwl1bnNpZ25lZCBsb25nICAJCSpjbWRfcG9vbF9iaXRzOworCWludAkJCW5yX2FsbG9jczsKKwlpbnQJCQlucl9mcmVlczsKKwlpbnQJCQlidXN5X2luaXRpYWxpemluZzsKKwlpbnQJCQlidXN5X3NjYW5uaW5nOworCXN0cnVjdCBtdXRleAkJYnVzeV9zaHV0dGluZ19kb3duOworCXN0cnVjdCBsaXN0X2hlYWQJc2Nhbl9saXN0OworCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5fd2FpdDsKKworCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdDsKKwlzcGlubG9ja190IGRldmxvY2s7IC8qIHRvIHByb3RlY3QgaGJhW2N0bHJdLT5kZXZbXTsgICovCisJaW50IG5kZXZpY2VzOyAvKiBudW1iZXIgb2YgdXNlZCBlbGVtZW50cyBpbiAuZGV2W10gYXJyYXkuICovCisjZGVmaW5lIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBIDI1NgorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldltIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQV07Cit9OworI2RlZmluZSBIUFNBX0FCT1JUX01TRyAwCisjZGVmaW5lIEhQU0FfREVWSUNFX1JFU0VUX01TRyAxCisjZGVmaW5lIEhQU0FfQlVTX1JFU0VUX01TRyAyCisjZGVmaW5lIEhQU0FfSE9TVF9SRVNFVF9NU0cgMworI2RlZmluZSBIUFNBX01TR19TRU5EX1JFVFJZX0xJTUlUIDEwCisjZGVmaW5lIEhQU0FfTVNHX1NFTkRfUkVUUllfSU5URVJWQUxfTVNFQ1MgMTAwMAorCisvKiBNYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyBkcml2ZXIgd2lsbCB3YWl0IGZvciBjb21tYW5kIGNvbXBsZXRpb25zCisgKiB3aGVuIHBvbGxpbmcgYmVmb3JlIGdpdmluZyB1cC4KKyAqLworI2RlZmluZSBIUFNBX01BWF9QT0xMX1RJTUVfU0VDUyAoMjApCisKKy8qIER1cmluZyBTQ1NJIGVycm9yIHJlY292ZXJ5LCBIUFNBX1RVUl9SRVRSWV9MSU1JVCBkZWZpbmVzCisgKiBob3cgbWFueSB0aW1lcyB0byByZXRyeSBURVNUIFVOSVQgUkVBRFkgb24gYSBkZXZpY2UKKyAqIHdoaWxlIHdhaXRpbmcgZm9yIGl0IHRvIGJlY29tZSByZWFkeSBiZWZvcmUgZ2l2aW5nIHVwLgorICogSFBTQV9NQVhfV0FJVF9JTlRFUlZBTF9TRUNTIGlzIHRoZSBtYXggd2FpdCBpbnRlcnZhbAorICogYmV0d2VlbiBzZW5kaW5nIFRVUnMgd2hpbGUgd2FpdGluZyBmb3IgYSBkZXZpY2UKKyAqIHRvIGJlY29tZSByZWFkeS4KKyAqLworI2RlZmluZSBIUFNBX1RVUl9SRVRSWV9MSU1JVCAoMjApCisjZGVmaW5lIEhQU0FfTUFYX1dBSVRfSU5URVJWQUxfU0VDUyAoMzApCisKKy8qIEhQU0FfQk9BUkRfUkVBRFlfV0FJVF9TRUNTIGlzIGhvdyBsb25nIHRvIHdhaXQgZm9yIGEgYm9hcmQKKyAqIHRvIGJlY29tZSByZWFkeSwgaW4gc2Vjb25kcywgYmVmb3JlIGdpdmluZyB1cCBvbiBpdC4KKyAqIEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTF9NU0VDUyAqIGlzIGhvdyBsb25nIHRvIHdhaXQKKyAqIGJldHdlZW4gcG9sbGluZyB0aGUgYm9hcmQgdG8gc2VlIGlmIGl0IGlzIHJlYWR5LCBpbgorICogbWlsbGlzZWNvbmRzLiAgSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMIGFuZAorICogSFBTQV9CT0FSRF9SRUFEWV9JVEVSQVRJT05TIGFyZSBkZXJpdmVkIGZyb20gdGhvc2UuCisgKi8KKyNkZWZpbmUgSFBTQV9CT0FSRF9SRUFEWV9XQUlUX1NFQ1MgKDEyMCkKKyNkZWZpbmUgSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTICgxMDApCisjZGVmaW5lIEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTCBcCisJKChIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MgKiBIWikgLyAxMDAwKQorI2RlZmluZSBIUFNBX0JPQVJEX1JFQURZX0lURVJBVElPTlMgXAorCSgoSFBTQV9CT0FSRF9SRUFEWV9XQUlUX1NFQ1MgKiAxMDAwKSAvIFwKKwkJSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTKQorI2RlZmluZSBIUFNBX1BPU1RfUkVTRVRfUEFVU0VfTVNFQ1MgKDMwMDApCisjZGVmaW5lIEhQU0FfUE9TVF9SRVNFVF9OT09QX1JFVFJJRVMgKDEyKQorCisvKiAgRGVmaW5pbmcgdGhlIGRpZmZlbnQgYWNjZXNzX21lbnRob2RzICovCisvKgorICogTWVtb3J5IG1hcHBlZCBGSUZPIGludGVyZmFjZSAoU01BUlQgNTN4eCBjYXJkcykKKyAqLworI2RlZmluZSBTQTVfRE9PUkJFTEwJMHgyMAorI2RlZmluZSBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVAkweDQwCisjZGVmaW5lIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUCTB4MzQKKyNkZWZpbmUgU0E1X1JFUExZX1BPUlRfT0ZGU0VUCQkweDQ0CisjZGVmaW5lIFNBNV9JTlRSX1NUQVRVUwkJMHgzMAorI2RlZmluZSBTQTVfU0NSQVRDSFBBRF9PRkZTRVQJMHhCMAorCisjZGVmaW5lIFNBNV9DVENGR19PRkZTRVQJMHhCNAorI2RlZmluZSBTQTVfQ1RNRU1fT0ZGU0VUCTB4QjgKKworI2RlZmluZSBTQTVfSU5UUl9PRkYJCTB4MDgKKyNkZWZpbmUgU0E1Ql9JTlRSX09GRgkJMHgwNAorI2RlZmluZSBTQTVfSU5UUl9QRU5ESU5HCTB4MDgKKyNkZWZpbmUgU0E1Ql9JTlRSX1BFTkRJTkcJMHgwNAorI2RlZmluZSBGSUZPX0VNUFRZCQkweGZmZmZmZmZmCisjZGVmaW5lIEhQU0FfRklSTVdBUkVfUkVBRFkJMHhmZmZmMDAwMCAvKiB2YWx1ZSBpbiBzY3JhdGNocGFkIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgSFBTQV9FUlJPUl9CSVQJCTB4MDIKKyNkZWZpbmUgSFBTQV9UQUdfQ09OVEFJTlNfSU5ERVgodGFnKSAoKHRhZykgJiAweDA0KQorI2RlZmluZSBIUFNBX1RBR19UT19JTkRFWCh0YWcpICgodGFnKSA+PiAzKQorI2RlZmluZSBIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFModGFnKSAoKHRhZykgJiB+MykKKworI2RlZmluZSBIUFNBX0lOVFJfT04gCTEKKyNkZWZpbmUgSFBTQV9JTlRSX09GRgkwCisvKgorCVNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIGhhcmR3YXJlCisqLworc3RhdGljIHZvaWQgU0E1X3N1Ym1pdF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworI2lmZGVmIEhQU0FfREVCVUcKKwkgcHJpbnRrKEtFUk5fV0FSTklORyAiaHBzYTogU2VuZGluZyAleCAtIGRvd24gdG8gY29udHJvbGxlclxuIiwKKwkJYy0+YnVzYWRkcik7CisjZW5kaWYgLyogSFBTQV9ERUJVRyAqLworCXdyaXRlbChjLT5idXNhZGRyLCBoLT52YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKKwloLT5jb21tYW5kc19vdXRzdGFuZGluZysrOworCWlmIChoLT5jb21tYW5kc19vdXRzdGFuZGluZyA+IGgtPm1heF9vdXRzdGFuZGluZykKKwkJaC0+bWF4X291dHN0YW5kaW5nID0gaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmc7Cit9CisKKy8qCisgKiAgVGhpcyBjYXJkIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgb3RoZXIgY2FyZHMuCisgKiAgIDAgdHVybnMgaW50ZXJydXB0cyBvbi4uLgorICogICAweDA4IHR1cm5zIHRoZW0gb2ZmLi4uCisgKi8KK3N0YXRpYyB2b2lkIFNBNV9pbnRyX21hc2soc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKHZhbCkgeyAvKiBUdXJuIGludGVycnVwdHMgb24gKi8KKwkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMTsKKwkJd3JpdGVsKDAsIGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCX0gZWxzZSB7IC8qIFR1cm4gdGhlbSBvZmYgKi8KKwkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMDsKKwkJd3JpdGVsKFNBNV9JTlRSX09GRiwKKwkJCWgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCX0KK30KKy8qCisgKiAgUmV0dXJucyB0cnVlIGlmIGZpZm8gaXMgZnVsbC4KKyAqCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIFNBNV9maWZvX2Z1bGwoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpZiAoaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPj0gaC0+bWF4X2NvbW1hbmRzKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworCit9CisvKgorICogICByZXR1cm5zIHZhbHVlIHJlYWQgZnJvbSBoYXJkd2FyZS4KKyAqICAgICByZXR1cm5zIEZJRk9fRU1QVFkgaWYgdGhlcmUgaXMgbm90aGluZyB0byByZWFkCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIFNBNV9jb21wbGV0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlCisJCT0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfUE9SVF9PRkZTRVQpOworCisJaWYgKHJlZ2lzdGVyX3ZhbHVlICE9IEZJRk9fRU1QVFkpCisJCWgtPmNvbW1hbmRzX291dHN0YW5kaW5nLS07CisKKyNpZmRlZiBIUFNBX0RFQlVHCisJaWYgKHJlZ2lzdGVyX3ZhbHVlICE9IEZJRk9fRU1QVFkpCisJCXByaW50ayhLRVJOX0lORk8gImhwc2E6ICBSZWFkICVseCBiYWNrIGZyb20gYm9hcmRcbiIsCisJCQlyZWdpc3Rlcl92YWx1ZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJocHNhOiAgRklGTyBFbXB0eSByZWFkXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlOworfQorLyoKKyAqCVJldHVybnMgdHJ1ZSBpZiBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIFNBNV9pbnRyX3BlbmRpbmcoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlICA9CisJCXJlYWRsKGgtPnZhZGRyICsgU0E1X0lOVFJfU1RBVFVTKTsKKyNpZmRlZiBIUFNBX0RFQlVHCisJcHJpbnRrKEtFUk5fSU5GTyAiaHBzYTogaW50cl9wZW5kaW5nICVseFxuIiwgcmVnaXN0ZXJfdmFsdWUpOworI2VuZGlmICAvKiBIUFNBX0RFQlVHICovCisJaWYgKHJlZ2lzdGVyX3ZhbHVlICYgIFNBNV9JTlRSX1BFTkRJTkcpCisJCXJldHVybiAgMTsKKwlyZXR1cm4gMCA7Cit9CisKKworc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9hY2Nlc3MgPSB7CisJU0E1X3N1Ym1pdF9jb21tYW5kLAorCVNBNV9pbnRyX21hc2ssCisJU0E1X2ZpZm9fZnVsbCwKKwlTQTVfaW50cl9wZW5kaW5nLAorCVNBNV9jb21wbGV0ZWQsCit9OworCitzdHJ1Y3QgYm9hcmRfdHlwZSB7CisJX191MzIJYm9hcmRfaWQ7CisJY2hhcgkqcHJvZHVjdF9uYW1lOworCXN0cnVjdCBhY2Nlc3NfbWV0aG9kICphY2Nlc3M7Cit9OworCisKKy8qIGVuZCBvZiBvbGQgaHBzYV9zY3NpLmggZmlsZSAqLworCisjZW5kaWYgLyogSFBTQV9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkNzEzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogICAgRGlzayBBcnJheSBkcml2ZXIgZm9yIEhQIFNtYXJ0IEFycmF5IFNBUyBjb250cm9sbGVycworICogICAgQ29weXJpZ2h0IDIwMDAsIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgICBRdWVzdGlvbnMvQ29tbWVudHMvQnVnZml4ZXMgdG8gaXNzX3N0b3JhZ2VkZXZAaHAuY29tCisgKgorICovCisjaWZuZGVmIEhQU0FfQ01EX0gKKyNkZWZpbmUgSFBTQV9DTURfSAorCisvKiBnZW5lcmFsIGJvdW5kYXJ5IGRlZmludGlvbnMgKi8KKyNkZWZpbmUgU0VOU0VJTkZPQllURVMgICAgICAgICAgMzIgLyogbWF5IHZhcnkgYmV0d2VlbiBoYmFzICovCisjZGVmaW5lIE1BWFNHRU5UUklFUyAgICAgICAgICAgIDMxCisjZGVmaW5lIE1BWFJFUExZUVMgICAgICAgICAgICAgIDI1NgorCisvKiBDb21tYW5kIFN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBDTURfU1VDQ0VTUyAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgQ01EX1RBUkdFVF9TVEFUVVMgICAgICAgMHgwMDAxCisjZGVmaW5lIENNRF9EQVRBX1VOREVSUlVOICAgICAgIDB4MDAwMgorI2RlZmluZSBDTURfREFUQV9PVkVSUlVOICAgICAgICAweDAwMDMKKyNkZWZpbmUgQ01EX0lOVkFMSUQgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIENNRF9QUk9UT0NPTF9FUlIgICAgICAgIDB4MDAwNQorI2RlZmluZSBDTURfSEFSRFdBUkVfRVJSICAgICAgICAweDAwMDYKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fTE9TVCAgICAgMHgwMDA3CisjZGVmaW5lIENNRF9BQk9SVEVEICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBDTURfQUJPUlRfRkFJTEVEICAgICAgICAweDAwMDkKKyNkZWZpbmUgQ01EX1VOU09MSUNJVEVEX0FCT1JUICAgMHgwMDBBCisjZGVmaW5lIENNRF9USU1FT1VUICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBDTURfVU5BQk9SVEFCTEUJCTB4MDAwQworCisvKiBVbml0IEF0dGVudGlvbnMgQVNDJ3MgYXMgZGVmaW5lZCBmb3IgdGhlIE1TQTIwMTJzYSAqLworI2RlZmluZSBQT1dFUl9PUl9SRVNFVAkJCTB4MjkKKyNkZWZpbmUgU1RBVEVfQ0hBTkdFRAkJCTB4MmEKKyNkZWZpbmUgVU5JVF9BVFRFTlRJT05fQ0xFQVJFRAkJMHgyZgorI2RlZmluZSBMVU5fRkFJTEVECQkJMHgzZQorI2RlZmluZSBSRVBPUlRfTFVOU19DSEFOR0VECQkweDNmCisKKy8qIFVuaXQgQXR0ZW50aW9ucyBBU0NRJ3MgYXMgZGVmaW5lZCBmb3IgdGhlIE1TQTIwMTJzYSAqLworCisJLyogVGhlc2UgQVNDUSdzIGRlZmluZWQgZm9yIEFTQyA9IFBPV0VSX09SX1JFU0VUICovCisjZGVmaW5lIFBPV0VSX09OX1JFU0VUCQkJMHgwMAorI2RlZmluZSBQT1dFUl9PTl9SRUJPT1QJCQkweDAxCisjZGVmaW5lIFNDU0lfQlVTX1JFU0VUCQkJMHgwMgorI2RlZmluZSBNU0FfVEFSR0VUX1JFU0VUCQkweDAzCisjZGVmaW5lIENPTlRST0xMRVJfRkFJTE9WRVIJCTB4MDQKKyNkZWZpbmUgVFJBTlNDRUlWRVJfU0UJCQkweDA1CisjZGVmaW5lIFRSQU5TQ0VJVkVSX0xWRAkJCTB4MDYKKworCS8qIFRoZXNlIEFTQ1EncyBkZWZpbmVkIGZvciBBU0MgPSBTVEFURV9DSEFOR0VEICovCisjZGVmaW5lIFJFU0VSVkFUSU9OX1BSRUVNUFRFRAkJMHgwMworI2RlZmluZSBBU1lNX0FDQ0VTU19DSEFOR0VECQkweDA2CisjZGVmaW5lIExVTl9DQVBBQ0lUWV9DSEFOR0VECQkweDA5CisKKy8qIHRyYW5zZmVyIGRpcmVjdGlvbiAqLworI2RlZmluZSBYRkVSX05PTkUgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFhGRVJfV1JJVEUgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgWEZFUl9SRUFEICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBYRkVSX1JTVkQgICAgICAgICAgICAgICAweDAzCisKKy8qIHRhc2sgYXR0cmlidXRlICovCisjZGVmaW5lIEFUVFJfVU5UQUdHRUQgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVRUUl9TSU1QTEUgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVFRSX0hFQURPRlFVRVVFICAgICAgICAweDA1CisjZGVmaW5lIEFUVFJfT1JERVJFRCAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQVRUUl9BQ0EgICAgICAgICAgICAgICAgMHgwNworCisvKiBjZGIgdHlwZSAqLworI2RlZmluZSBUWVBFX0NNRAkJCQkweDAwCisjZGVmaW5lIFRZUEVfTVNHCQkJCTB4MDEKKworLyogY29uZmlnIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ0ZHX1ZFTkRPUklEICAgICAgICAgICAgMHgwMAorI2RlZmluZSBDRkdfREVWSUNFSUQgICAgICAgICAgICAweDAyCisjZGVmaW5lIENGR19JMk9CQVIgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQ0ZHX01FTTFCQVIgICAgICAgICAgICAgMHgxNAorCisvKiBpMm8gc3BhY2UgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBJMk9fSUJEQl9TRVQgICAgICAgICAgICAweDIwCisjZGVmaW5lIEkyT19JQkRCX0NMRUFSICAgICAgICAgIDB4NzAKKyNkZWZpbmUgSTJPX0lOVF9TVEFUVVMgICAgICAgICAgMHgzMAorI2RlZmluZSBJMk9fSU5UX01BU0sgICAgICAgICAgICAweDM0CisjZGVmaW5lIEkyT19JQlBPU1RfUSAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgSTJPX09CUE9TVF9RICAgICAgICAgICAgMHg0NAorI2RlZmluZSBJMk9fRE1BMV9DRkcJCTB4MjE0CisKKy8qIENvbmZpZ3VyYXRpb24gVGFibGUgKi8KKyNkZWZpbmUgQ0ZHVEJMX0NoYW5nZVJlcSAgICAgICAgMHgwMDAwMDAwMWwKKyNkZWZpbmUgQ0ZHVEJMX0FjY0NtZHMgICAgICAgICAgMHgwMDAwMDAwMWwKKworI2RlZmluZSBDRkdUQkxfVHJhbnNfU2ltcGxlICAgICAweDAwMDAwMDAybAorCisjZGVmaW5lIENGR1RCTF9CdXNUeXBlX1VsdHJhMiAgIDB4MDAwMDAwMDFsCisjZGVmaW5lIENGR1RCTF9CdXNUeXBlX1VsdHJhMyAgIDB4MDAwMDAwMDJsCisjZGVmaW5lIENGR1RCTF9CdXNUeXBlX0ZpYnJlMUcgIDB4MDAwMDAxMDBsCisjZGVmaW5lIENGR1RCTF9CdXNUeXBlX0ZpYnJlMkcgIDB4MDAwMDAyMDBsCitzdHJ1Y3QgdmFsczMyIHsKKwlfX3UzMiAgIGxvd2VyOworCV9fdTMyICAgdXBwZXI7Cit9OworCit1bmlvbiB1NjRiaXQgeworCXN0cnVjdCB2YWxzMzIgdmFsMzI7CisJX191NjQgdmFsOworfTsKKworLyogRklYTUUgdGhpcyBpcyBhIHBlciBjb250cm9sbGVyIHZhbHVlIChiYXJmISkgKi8KKyNkZWZpbmUgSFBTQV9NQVhfVEFSR0VUU19QRVJfQ1RMUiAxNgorI2RlZmluZSBIUFNBX01BWF9MVU4gMjU2CisjZGVmaW5lIEhQU0FfTUFYX1BIWVNfTFVOIDEwMjQKKworLyogU0NTSS0zIENvbW1hbmRzICovCisjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBIUFNBX0lOUVVJUlkgMHgxMgorc3RydWN0IElucXVpcnlEYXRhIHsKKwlfX3U4IGRhdGFfYnl0ZVszNl07Cit9OworCisjZGVmaW5lIEhQU0FfUkVQT1JUX0xPRyAweGMyICAgIC8qIFJlcG9ydCBMb2dpY2FsIExVTnMgKi8KKyNkZWZpbmUgSFBTQV9SRVBPUlRfUEhZUyAweGMzICAgLyogUmVwb3J0IFBoeXNpY2FsIExVTnMgKi8KK3N0cnVjdCBSZXBvcnRMVU5kYXRhIHsKKwlfX3U4IExVTkxpc3RMZW5ndGhbNF07CisJX191MzIgcmVzZXJ2ZWQ7CisJX191OCBMVU5bSFBTQV9NQVhfTFVOXVs4XTsKK307CisKK3N0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgeworCV9fdTggTFVOTGlzdExlbmd0aFs0XTsKKwlfX3U4IGV4dGVuZGVkX3Jlc3BvbnNlX2ZsYWc7CisJX191OCByZXNlcnZlZFszXTsKKwlfX3U4IExVTltIUFNBX01BWF9MVU5dWzI0XTsKK307CisKK3N0cnVjdCBTZW5zZVN1YnN5c3RlbV9pbmZvIHsKKwlfX3U4IHJlc2VydmVkWzM2XTsKKwlfX3U4IHBvcnRuYW1lWzhdOworCV9fdTggcmVzZXJ2ZWQxWzExMDhdOworfTsKKworI2RlZmluZSBIUFNBX1JFQURfQ0FQQUNJVFkgMHgyNSAvKiBSZWFkIENhcGFjaXR5ICovCitzdHJ1Y3QgUmVhZENhcGRhdGEgeworCV9fdTggdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KKwlfX3U4IGJsb2NrX3NpemVbNF07CS8qIFNpemUgb2YgYmxvY2tzIGluIGJ5dGVzICovCit9OworCisjaWYgMAorLyogMTIgYnl0ZSBjb21tYW5kcyBub3QgaW1wbGVtZW50ZWQgaW4gZmlybXdhcmUgeWV0LiAqLworI2RlZmluZSBIUFNBX1JFQUQgCTB4YTgKKyNkZWZpbmUgSFBTQV9XUklURQkweGFhCisjZW5kaWYKKworI2RlZmluZSBIUFNBX1JFQUQgICAweDI4ICAgIC8qIFJlYWQoMTApICovCisjZGVmaW5lIEhQU0FfV1JJVEUgIDB4MmEgICAgLyogV3JpdGUoMTApICovCisKKy8qIEJNSUMgY29tbWFuZHMgKi8KKyNkZWZpbmUgQk1JQ19SRUFEIDB4MjYKKyNkZWZpbmUgQk1JQ19XUklURSAweDI3CisjZGVmaW5lIEJNSUNfQ0FDSEVfRkxVU0ggMHhjMgorI2RlZmluZSBIUFNBX0NBQ0hFX0ZMVVNIIDB4MDEJLyogQzIgd2FzIGFscmVhZHkgYmVpbmcgdXNlZCBieSBIUFNBICovCisKKy8qIENvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUgKi8KK3VuaW9uIFNDU0kzQWRkciB7CisJc3RydWN0IHsKKwkJX191OCBEZXY7CisJCV9fdTggQnVzOjY7CisJCV9fdTggTW9kZToyOyAgICAgICAgLyogYjAwICovCisJfSBQZXJpcERldjsKKwlzdHJ1Y3QgeworCQlfX3U4IERldkxTQjsKKwkJX191OCBEZXZNU0I6NjsKKwkJX191OCBNb2RlOjI7ICAgICAgICAvKiBiMDEgKi8KKwl9IExvZ0RldjsKKwlzdHJ1Y3QgeworCQlfX3U4IERldjo1OworCQlfX3U4IEJ1czozOworCQlfX3U4IFRhcmc6NjsKKwkJX191OCBNb2RlOjI7ICAgICAgICAvKiBiMTAgKi8KKwl9IExvZ1VuaXQ7Cit9OworCitzdHJ1Y3QgUGh5c0RldkFkZHIgeworCV9fdTMyICAgICAgICAgICAgIFRhcmdldElkOjI0OworCV9fdTMyICAgICAgICAgICAgIEJ1czo2OworCV9fdTMyICAgICAgICAgICAgIE1vZGU6MjsKKwkvKiAyIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkciAqLworCXVuaW9uIFNDU0kzQWRkciAgVGFyZ2V0WzJdOworfTsKKworc3RydWN0IExvZ0RldkFkZHIgeworCV9fdTMyICAgICAgICAgICAgVm9sSWQ6MzA7CisJX191MzIgICAgICAgICAgICBNb2RlOjI7CisJX191OCAgICAgICAgICAgICByZXNlcnZlZFs0XTsKK307CisKK3VuaW9uIExVTkFkZHIgeworCV9fdTggICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07CisJdW5pb24gU0NTSTNBZGRyICAgIFNDU0kzTHVuWzRdOworCXN0cnVjdCBQaHlzRGV2QWRkciBQaHlzRGV2OworCXN0cnVjdCBMb2dEZXZBZGRyICBMb2dEZXY7Cit9OworCitzdHJ1Y3QgQ29tbWFuZExpc3RIZWFkZXIgeworCV9fdTggICAgICAgICAgICAgIFJlcGx5UXVldWU7CisJX191OCAgICAgICAgICAgICAgU0dMaXN0OworCV9fdTE2ICAgICAgICAgICAgIFNHVG90YWw7CisJc3RydWN0IHZhbHMzMiAgICAgVGFnOworCXVuaW9uIExVTkFkZHIgICAgIExVTjsKK307CisKK3N0cnVjdCBSZXF1ZXN0QmxvY2sgeworCV9fdTggICBDREJMZW47CisJc3RydWN0IHsKKwkJX191OCBUeXBlOjM7CisJCV9fdTggQXR0cmlidXRlOjM7CisJCV9fdTggRGlyZWN0aW9uOjI7CisJfSBUeXBlOworCV9fdTE2ICBUaW1lb3V0OworCV9fdTggICBDREJbMTZdOworfTsKKworc3RydWN0IEVyckRlc2NyaXB0b3IgeworCXN0cnVjdCB2YWxzMzIgQWRkcjsKKwlfX3UzMiAgTGVuOworfTsKKworc3RydWN0IFNHRGVzY3JpcHRvciB7CisJc3RydWN0IHZhbHMzMiBBZGRyOworCV9fdTMyICBMZW47CisJX191MzIgIEV4dDsKK307CisKK3VuaW9uIE1vcmVFcnJJbmZvIHsKKwlzdHJ1Y3QgeworCQlfX3U4ICBSZXNlcnZlZFszXTsKKwkJX191OCAgVHlwZTsKKwkJX191MzIgRXJyb3JJbmZvOworCX0gQ29tbW9uX0luZm87CisJc3RydWN0IHsKKwkJX191OCAgUmVzZXJ2ZWRbMl07CisJCV9fdTggIG9mZmVuc2Vfc2l6ZTsgLyogc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkgKi8KKwkJX191OCAgb2ZmZW5zZV9udW07ICAvKiBieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UgKi8KKwkJX191MzIgb2ZmZW5zZV92YWx1ZTsKKwl9IEludmFsaWRfQ21kOworfTsKK3N0cnVjdCBFcnJvckluZm8geworCV9fdTggICAgICAgICAgICAgICBTY3NpU3RhdHVzOworCV9fdTggICAgICAgICAgICAgICBTZW5zZUxlbjsKKwlfX3UxNiAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKKwlfX3UzMiAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7CisJdW5pb24gTW9yZUVyckluZm8gIE1vcmVFcnJJbmZvOworCV9fdTggICAgICAgICAgICAgICBTZW5zZUluZm9bU0VOU0VJTkZPQllURVNdOworfTsKKy8qIENvbW1hbmQgdHlwZXMgKi8KKyNkZWZpbmUgQ01EX0lPQ1RMX1BFTkQgIDB4MDEKKyNkZWZpbmUgQ01EX1NDU0kJMHgwMworCitzdHJ1Y3QgY3Rscl9pbmZvOyAvKiBkZWZpbmVkIGluIGhwc2EuaCAqLworLyogVGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IDgKKyAqIG9kIG9uIGFsbCBhcmNoaXRlY3R1cmVzLCBiZWNhdXNlIHRoZSBjb250cm9sbGVyIHVzZXMgMgorICogbG93ZXIgYml0cyBvZiB0aGUgYWRkcmVzcywgYW5kIHRoZSBkcml2ZXIgdXNlcyAxIGxvd2VyCisgKiBiaXQgKDMgYml0cyB0b3RhbC4pCisgKi8KK3N0cnVjdCBDb21tYW5kTGlzdCB7CisJc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIEhlYWRlcjsKKwlzdHJ1Y3QgUmVxdWVzdEJsb2NrICAgICAgUmVxdWVzdDsKKwlzdHJ1Y3QgRXJyRGVzY3JpcHRvciAgICAgRXJyRGVzYzsKKwlzdHJ1Y3QgU0dEZXNjcmlwdG9yICAgICAgU0dbTUFYU0dFTlRSSUVTXTsKKwkvKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgKi8KKwlfX3UzMgkJCSAgIGJ1c2FkZHI7IC8qIHBoeXNpY2FsIGFkZHIgb2YgdGhpcyByZWNvcmQgKi8KKwlzdHJ1Y3QgRXJyb3JJbmZvICplcnJfaW5mbzsgLyogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbSAqLworCXN0cnVjdCBjdGxyX2luZm8JICAgKmg7CisJaW50CQkJICAgY21kX3R5cGU7CisJbG9uZwkJCSAgIGNtZGluZGV4OworCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CisJc3RydWN0IENvbW1hbmRMaXN0ICpwcmV2OworCXN0cnVjdCBDb21tYW5kTGlzdCAqbmV4dDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJc3RydWN0IGNvbXBsZXRpb24gKndhaXRpbmc7CisJaW50CSByZXRyeV9jb3VudDsKKwl2b2lkICAgKnNjc2lfY21kOworfTsKKworLyogQ29uZmlndXJhdGlvbiBUYWJsZSBTdHJ1Y3R1cmUgKi8KK3N0cnVjdCBIb3N0V3JpdGUgeworCV9fdTMyIFRyYW5zcG9ydFJlcXVlc3Q7CisJX191MzIgUmVzZXJ2ZWQ7CisJX191MzIgQ29hbEludERlbGF5OworCV9fdTMyIENvYWxJbnRDb3VudDsKK307CisKK3N0cnVjdCBDZmdUYWJsZSB7CisJX191OCAgICAgICAgICAgICBTaWduYXR1cmVbNF07CisJX191MzIgICAgICAgICAgICBTcGVjVmFsZW5jZTsKKwlfX3UzMiAgICAgICAgICAgIFRyYW5zcG9ydFN1cHBvcnQ7CisJX191MzIgICAgICAgICAgICBUcmFuc3BvcnRBY3RpdmU7CisJc3RydWN0IEhvc3RXcml0ZSBIb3N0V3JpdGU7CisJX191MzIgICAgICAgICAgICBDbWRzT3V0TWF4OworCV9fdTMyICAgICAgICAgICAgQnVzVHlwZXM7CisJX191MzIgICAgICAgICAgICBSZXNlcnZlZDsKKwlfX3U4ICAgICAgICAgICAgIFNlcnZlck5hbWVbMTZdOworCV9fdTMyICAgICAgICAgICAgSGVhcnRCZWF0OworCV9fdTMyICAgICAgICAgICAgU0NTSV9QcmVmZXRjaDsKK307CisKK3N0cnVjdCBocHNhX3BjaV9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyCWJ1czsKKwl1bnNpZ25lZCBjaGFyCWRldl9mbjsKKwl1bnNpZ25lZCBzaG9ydAlkb21haW47CisJX191MzIJCWJvYXJkX2lkOworfTsKKworI3ByYWdtYSBwYWNrKCkKKyNlbmRpZiAvKiBIUFNBX0NNRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggMjA2YzJmYS4uOWU1MmQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKIAogCWVycm9yID0gJmhvc3RyY2ItPmhjYW0udS5lcnJvci51LnR5cGVfMTdfZXJyb3I7CiAJZXJyb3ItPmZhaWx1cmVfcmVhc29uW3NpemVvZihlcnJvci0+ZmFpbHVyZV9yZWFzb24pIC0gMV0gPSAnXDAnOwotCXN0cnN0cmlwKGVycm9yLT5mYWlsdXJlX3JlYXNvbik7CisJc3RyaW0oZXJyb3ItPmZhaWx1cmVfcmVhc29uKTsKIAogCWlwcl9oY2FtX2Vycihob3N0cmNiLCAiJXMgW1BSQzogJTA4WF1cbiIsIGVycm9yLT5mYWlsdXJlX3JlYXNvbiwKIAkJICAgICBiZTMyX3RvX2NwdShob3N0cmNiLT5oY2FtLnUuZXJyb3IucHJjKSk7CkBAIC0xMzU5LDcgKzEzNTksNyBAQAogCiAJZXJyb3IgPSAmaG9zdHJjYi0+aGNhbS51LmVycm9yLnUudHlwZV8wN19lcnJvcjsKIAllcnJvci0+ZmFpbHVyZV9yZWFzb25bc2l6ZW9mKGVycm9yLT5mYWlsdXJlX3JlYXNvbikgLSAxXSA9ICdcMCc7Ci0Jc3Ryc3RyaXAoZXJyb3ItPmZhaWx1cmVfcmVhc29uKTsKKwlzdHJpbShlcnJvci0+ZmFpbHVyZV9yZWFzb24pOwogCiAJaXByX2hjYW1fZXJyKGhvc3RyY2IsICIlcyBbUFJDOiAlMDhYXVxuIiwgZXJyb3ItPmZhaWx1cmVfcmVhc29uLAogCQkgICAgIGJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0udS5lcnJvci5wcmMpKTsKQEAgLTY1MjEsNiArNjUyMSw3IEBACiAJaW50IHJjOwogCiAJRU5URVI7CisJaW9hX2NmZy0+cGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwogCXJjID0gcGNpX3Jlc3RvcmVfc3RhdGUoaW9hX2NmZy0+cGRldik7CiAKIAlpZiAocmMgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggYzRiNThkMC4uODgxZDVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtNjgsMTggKzY4LDIwIEBACiAKIC8qKgogICogc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAtIEZDUCBsYXllciBpbnRlcm5hbCBkYXRhCi0gKiBAc2NzaV9wa3RfcG9vbDogIE1lbW9yeSBwb29sIHRvIGRyYXcgRkNQIHBhY2tldHMgZnJvbQorICogQHNjc2lfcGt0X3Bvb2w6IE1lbW9yeSBwb29sIHRvIGRyYXcgRkNQIHBhY2tldHMgZnJvbQorICogQHNjc2lfcXVldWVfbG9jazogUHJvdGVjdHMgdGhlIHNjc2lfcGt0X3F1ZXVlCiAgKiBAc2NzaV9wa3RfcXVldWU6IEN1cnJlbnQgRkNQIHBhY2tldHMKICAqIEBsYXN0X2Nhbl9xdWV1ZV9yYW1wX2Rvd25fdGltZTogcmFtcCBkb3duIHRpbWUKICAqIEBsYXN0X2Nhbl9xdWV1ZV9yYW1wX3VwX3RpbWU6IHJhbXAgdXAgdGltZQogICogQG1heF9jYW5fcXVldWU6IG1heCBjYW5fcXVldWUgc2l6ZQogICovCiBzdHJ1Y3QgZmNfZmNwX2ludGVybmFsIHsKLQltZW1wb29sX3QJICpzY3NpX3BrdF9wb29sOwotCXN0cnVjdCBsaXN0X2hlYWQgc2NzaV9wa3RfcXVldWU7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2Nhbl9xdWV1ZV9yYW1wX2Rvd25fdGltZTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfY2FuX3F1ZXVlX3JhbXBfdXBfdGltZTsKLQlpbnQgbWF4X2Nhbl9xdWV1ZTsKKwltZW1wb29sX3QJCSpzY3NpX3BrdF9wb29sOworCXNwaW5sb2NrX3QJCXNjc2lfcXVldWVfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNjc2lfcGt0X3F1ZXVlOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfY2FuX3F1ZXVlX3JhbXBfZG93bl90aW1lOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfY2FuX3F1ZXVlX3JhbXBfdXBfdGltZTsKKwlpbnQJCQltYXhfY2FuX3F1ZXVlOwogfTsKIAogI2RlZmluZSBmY19nZXRfc2NzaV9pbnRlcm5hbCh4KQkoKHN0cnVjdCBmY19mY3BfaW50ZXJuYWwgKikoeCktPnNjc2lfcHJpdikKQEAgLTQxMCwxMiArNDEyLDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIGxlbik7Ci0JaWYgKCFmcCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCWZjX2ZjcF9jYW5fcXVldWVfcmFtcF9kb3duKGxwb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiBmcDsKKwlpZiAobGlrZWx5KGZwKSkKKwkJcmV0dXJuIGZwOworCisJLyogZXJyb3IgY2FzZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlmY19mY3BfY2FuX3F1ZXVlX3JhbXBfZG93bihscG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtOTkwLDcgKzk5NCw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAqc2NfY21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIHJlc3RhcnQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmc3AsICZzaS0+c2NzaV9wa3RfcXVldWUsIGxpc3QpIHsKIAkJc2NfY21kID0gZnNwLT5jbWQ7CkBAIC0xMDAxLDcgKzEwMDUsNyBAQAogCQkJY29udGludWU7CiAKIAkJZmNfZmNwX3BrdF9ob2xkKGZzcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKCFmY19mY3BfbG9ja19wa3QoZnNwKSkgewogCQkJZmNfZmNwX2NsZWFudXBfY21kKGZzcCwgZXJyb3IpOwpAQCAtMTAxMCwxNCArMTAxNCwxNCBAQAogCQl9CiAKIAkJZmNfZmNwX3BrdF9yZWxlYXNlKGZzcCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogd2hpbGUgd2UgZHJvcHBlZCB0aGUgbG9jayBtdWx0aXBsZSBwa3RzIGNvdWxkCiAJCSAqIGhhdmUgYmVlbiByZWxlYXNlZCwgc28gd2UgaGF2ZSB0byBzdGFydCBvdmVyLgogCQkgKi8KIAkJZ290byByZXN0YXJ0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMTAzNSwxMSArMTAzOSwxMiBAQAogICogQGZzcDogICBUaGUgRkNQIHBhY2tldCB0byBzZW5kCiAgKgogICogUmV0dXJuOiAgWmVybyBmb3Igc3VjY2VzcyBhbmQgLTEgZm9yIGZhaWx1cmUKLSAqIExvY2tzOiAgIENhbGxlZCB3aXRoIHRoZSBob3N0IGxvY2sgYW5kIGlycXMgZGlzYWJsZWQuCisgKiBMb2NrczogICBDYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkCiAgKi8KIHN0YXRpYyBpbnQgZmNfZmNwX3BrdF9zZW5kKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mY3BfcGt0ICpmc3ApCiB7CiAJc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAqc2kgPSBmY19nZXRfc2NzaV9pbnRlcm5hbChscG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKIAlmc3AtPmNtZC0+U0NwLnB0ciA9IChjaGFyICopZnNwOwpAQCAtMTA0OSwxMyArMTA1NCwxNiBAQAogCWludF90b19zY3NpbHVuKGZzcC0+Y21kLT5kZXZpY2UtPmx1biwKIAkJICAgICAgIChzdHJ1Y3Qgc2NzaV9sdW4gKilmc3AtPmNkYl9jbWQuZmNfbHVuKTsKIAltZW1jcHkoZnNwLT5jZGJfY21kLmZjX2NkYiwgZnNwLT5jbWQtPmNtbmQsIGZzcC0+Y21kLT5jbWRfbGVuKTsKLQlsaXN0X2FkZF90YWlsKCZmc3AtPmxpc3QsICZzaS0+c2NzaV9wa3RfcXVldWUpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZnNwLT5saXN0LCAmc2ktPnNjc2lfcGt0X3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJcmMgPSBscG9ydC0+dHQuZmNwX2NtZF9zZW5kKGxwb3J0LCBmc3AsIGZjX2ZjcF9yZWN2KTsKLQlzcGluX2xvY2tfaXJxKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2spOwotCWlmIChyYykKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZGVsKCZmc3AtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJfQogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTc1Miw2ICsxNzYwLDcgQEAKIAlzdHJ1Y3QgZmNvZV9kZXZfc3RhdHMgKnN0YXRzOwogCiAJbHBvcnQgPSBzaG9zdF9wcml2KHNjX2NtZC0+ZGV2aWNlLT5ob3N0KTsKKwlzcGluX3VubG9ja19pcnEobHBvcnQtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlydmFsID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpOwogCWlmIChydmFsKSB7CkBAIC0xODM0LDYgKzE4NDMsNyBAQAogCQlyYyA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAJfQogb3V0OgorCXNwaW5fbG9ja19pcnEobHBvcnQtPmhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTChmY19xdWV1ZWNvbW1hbmQpOwpAQCAtMTg2NCwxMSArMTg3NCw4IEBACiAKIAlscG9ydCA9IGZzcC0+bHA7CiAJc2kgPSBmY19nZXRfc2NzaV9pbnRlcm5hbChscG9ydCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWlmICghZnNwLT5jbWQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKCFmc3AtPmNtZCkKIAkJcmV0dXJuOwotCX0KIAogCS8qCiAJICogaWYgY2FuX3F1ZXVlIHJhbXAgZG93biBpcyBkb25lIHRoZW4gdHJ5IGNhbl9xdWV1ZSByYW1wIHVwCkBAIC0xODgwLDEwICsxODg3LDggQEAKIAlzY19jbWQgPSBmc3AtPmNtZDsKIAlmc3AtPmNtZCA9IE5VTEw7CiAKLQlpZiAoIXNjX2NtZC0+U0NwLnB0cikgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXNjX2NtZC0+U0NwLnB0cikKIAkJcmV0dXJuOwotCX0KIAogCUNNRF9TQ1NJX1NUQVRVUyhzY19jbWQpID0gZnNwLT5jZGJfc3RhdHVzOwogCXN3aXRjaCAoZnNwLT5zdGF0dXNfY29kZSkgewpAQCAtMTk0NSwxMCArMTk1MCwxMSBAQAogCQlicmVhazsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2ktPnNjc2lfcXVldWVfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZmc3AtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAlzY19jbWQtPlNDcC5wdHIgPSBOVUxMOwogCXNjX2NtZC0+c2NzaV9kb25lKHNjX2NtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkvKiByZWxlYXNlIHJlZiBmcm9tIGluaXRpYWwgYWxsb2NhdGlvbiBpbiBxdWV1ZSBjb21tYW5kICovCiAJZmNfZmNwX3BrdF9yZWxlYXNlKGZzcCk7CkBAIC0yMjE2LDYgKzIyMjIsNyBAQAogCWxwb3J0LT5zY3NpX3ByaXYgPSBzaTsKIAlzaS0+bWF4X2Nhbl9xdWV1ZSA9IGxwb3J0LT5ob3N0LT5jYW5fcXVldWU7CiAJSU5JVF9MSVNUX0hFQUQoJnNpLT5zY3NpX3BrdF9xdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJnNpLT5zY3NpX3F1ZXVlX2xvY2spOwogCiAJc2ktPnNjc2lfcGt0X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMiwgc2NzaV9wa3RfY2FjaGVwKTsKIAlpZiAoIXNpLT5zY3NpX3BrdF9wb29sKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCmluZGV4IDc0MzM4YzguLjBiMTY1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCkBAIC01MzcsNyArNTM3LDkgQEAKIAlpbnQgcmMgPSAtMTsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JaWYgKGxwb3J0LT5zdGF0ZSA9PSBMUE9SVF9TVF9ESVNBQkxFRCkgeworCWlmIChscG9ydC0+c3RhdGUgPT0gTFBPUlRfU1RfRElTQUJMRUQgfHwKKwkgICAgbHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0xPR08pIHsKKwkJZmNfbHBvcnRfc3RhdGVfZW50ZXIobHBvcnQsIExQT1JUX1NUX1JFU0VUKTsKIAkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOwogCQlyYyA9IDA7CiAJfQpAQCAtOTY3LDYgKzk2OSw5IEBACiAJRkNfTFBPUlRfREJHKGxwb3J0LCAiRW50ZXJlZCBSRVNFVCBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAogCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAKKwlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0RJU0FCTEVEIHx8IGxwb3J0LT5zdGF0ZSA9PSBMUE9SVF9TVF9MT0dPKQorCQlyZXR1cm47CisKIAlpZiAobHBvcnQtPnZwb3J0KSB7CiAJCWlmIChscG9ydC0+bGlua191cCkKIAkJCWZjX3Zwb3J0X3NldF9zdGF0ZShscG9ydC0+dnBvcnQsIEZDX1ZQT1JUX0lOSVRJQUxJWklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCmluZGV4IDM1Y2EwZTcuLjAyMzAwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCkBAIC0zMTAsNiArMzEwLDcgQEAKIAkJCQlyZXN0YXJ0ID0gMTsKIAkJCWVsc2UKIAkJCQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKKwkJCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX05PTkU7CiAJCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAJCQltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IGI3Njg5ZjMuLmMyOGE3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAlpZiAoY29ubi0+bG9naW5fdGFzayA9PSB0YXNrKQogCQlyZXR1cm47CiAKLQlfX2tmaWZvX3B1dChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJnRhc2ssIHNpemVvZih2b2lkKikpOworCWtmaWZvX2luKCZzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJnRhc2ssIHNpemVvZih2b2lkKikpOwogCiAJaWYgKHNjKSB7CiAJCXRhc2stPnNjID0gTlVMTDsKQEAgLTczNyw3ICs3MzcsNyBAQAogCQlCVUdfT04oY29ubi0+Y19zdGFnZSA9PSBJU0NTSV9DT05OX0lOSVRJQUxfU1RBR0UpOwogCQlCVUdfT04oY29ubi0+Y19zdGFnZSA9PSBJU0NTSV9DT05OX1NUT1BQRUQpOwogCi0JCWlmICghX19rZmlmb19nZXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKKwkJaWYgKCFrZmlmb19vdXQoJnNlc3Npb24tPmNtZHBvb2wucXVldWUsCiAJCQkJICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSkpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNTY3LDcgKzE1NjcsNyBAQAogewogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwogCi0JaWYgKCFfX2tmaWZvX2dldChjb25uLT5zZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAorCWlmICgha2ZpZm9fb3V0KCZjb25uLT5zZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAogCQkJICh2b2lkICopICZ0YXNrLCBzaXplb2Yodm9pZCAqKSkpCiAJCXJldHVybiBOVUxMOwogCkBAIC0yNDYxLDEyICsyNDYxLDcgQEAKIAlpZiAocS0+cG9vbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXEtPnF1ZXVlID0ga2ZpZm9faW5pdCgodm9pZCopcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQqKSwKLQkJCSAgICAgIEdGUF9LRVJORUwsIE5VTEwpOwotCWlmIChJU19FUlIocS0+cXVldWUpKSB7Ci0JCXEtPnF1ZXVlID0gTlVMTDsKLQkJZ290byBlbm9tZW07Ci0JfQorCWtmaWZvX2luaXQoJnEtPnF1ZXVlLCAodm9pZCopcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQqKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKIAkJcS0+cG9vbFtpXSA9IGt6YWxsb2MoaXRlbV9zaXplLCBHRlBfS0VSTkVMKTsKQEAgLTI0NzQsNyArMjQ2OSw3IEBACiAJCQlxLT5tYXggPSBpOwogCQkJZ290byBlbm9tZW07CiAJCX0KLQkJX19rZmlmb19wdXQocS0+cXVldWUsICh2b2lkKikmcS0+cG9vbFtpXSwgc2l6ZW9mKHZvaWQqKSk7CisJCWtmaWZvX2luKCZxLT5xdWV1ZSwgKHZvaWQqKSZxLT5wb29sW2ldLCBzaXplb2Yodm9pZCopKTsKIAl9CiAKIAlpZiAoaXRlbXMpIHsKQEAgLTI0OTcsNyArMjQ5Miw2IEBACiAJZm9yIChpID0gMDsgaSA8IHEtPm1heDsgaSsrKQogCQlrZnJlZShxLT5wb29sW2ldKTsKIAlrZnJlZShxLT5wb29sKTsKLQlrZnJlZShxLT5xdWV1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9wb29sX2ZyZWUpOwogCkBAIC0yODI1LDcgKzI4MTksNyBAQAogCiAJLyogYWxsb2NhdGUgbG9naW5fdGFzayB1c2VkIGZvciB0aGUgbG9naW4vdGV4dCBzZXF1ZW5jZXMgKi8KIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCWlmICghX19rZmlmb19nZXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKKwlpZiAoIWtmaWZvX291dCgmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCiAJCQkgc2l6ZW9mKHZvaWQqKSkpIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwpAQCAtMjg0NSw3ICsyODM5LDcgQEAKIAlyZXR1cm4gY2xzX2Nvbm47CiAKIGxvZ2luX3Rhc2tfZGF0YV9hbGxvY19mYWlsOgotCV9fa2ZpZm9fcHV0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKKwlrZmlmb19pbigmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAogCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiBsb2dpbl90YXNrX2FsbG9jX2ZhaWw6CiAJaXNjc2lfZGVzdHJveV9jb25uKGNsc19jb25uKTsKQEAgLTI5MDgsNyArMjkwMiw3IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgY29ubi0+ZGF0YSwKIAkJICAgZ2V0X29yZGVyKElTQ1NJX0RFRl9NQVhfUkVDVl9TRUdfTEVOKSk7CiAJa2ZyZWUoY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKTsKLQlfX2tmaWZvX3B1dChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCisJa2ZpZm9faW4oJnNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKIAkJICAgIHNpemVvZih2b2lkKikpOwogCWlmIChzZXNzaW9uLT5sZWFkY29ubiA9PSBjb25uKQogCQlzZXNzaW9uLT5sZWFkY29ubiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKaW5kZXggY2EyNWVlNS4uZGI2ODU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYwpAQCAtNDQ1LDE1ICs0NDUsMTUgQEAKIAkJcmV0dXJuOwogCiAJLyogZmx1c2ggdGFzaydzIHIydCBxdWV1ZXMgKi8KLQl3aGlsZSAoX19rZmlmb19nZXQodGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSkpIHsKLQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAorCXdoaWxlIChrZmlmb19vdXQoJnRjcF90YXNrLT5yMnRxdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpKSB7CisJCWtmaWZvX2luKCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCiAJCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiAJCUlTQ1NJX0RCR19UQ1AodGFzay0+Y29ubiwgInBlbmRpbmcgcjJ0IGRyb3BwZWRcbiIpOwogCX0KIAogCXIydCA9IHRjcF90YXNrLT5yMnQ7CiAJaWYgKHIydCAhPSBOVUxMKSB7Ci0JCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJdGNwX3Rhc2stPnIydCA9IE5VTEw7CiAJfQpAQCAtNTQxLDcgKzU0MSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJjID0gX19rZmlmb19nZXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKKwlyYyA9IGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKIAlpZiAoIXJjKSB7CiAJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLCAiQ291bGQgbm90IGFsbG9jYXRlIFIyVC4gIgogCQkJCSAgIlRhcmdldCBoYXMgc2VudCBtb3JlIFIyVHMgdGhhbiBpdCAiCkBAIC01NTQsNyArNTU0LDcgQEAKIAlpZiAocjJ0LT5kYXRhX2xlbmd0aCA9PSAwKSB7CiAJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLAogCQkJCSAgImludmFsaWQgUjJUIHdpdGggemVybyBkYXRhIGxlblxuIik7Ci0JCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBTEVOOwogCX0KQEAgLTU3MCw3ICs1NzAsNyBAQAogCQkJCSAgImludmFsaWQgUjJUIHdpdGggZGF0YSBsZW4gJXUgYXQgb2Zmc2V0ICV1ICIKIAkJCQkgICJhbmQgdG90YWwgbGVuZ3RoICVkXG4iLCByMnQtPmRhdGFfbGVuZ3RoLAogCQkJCSAgcjJ0LT5kYXRhX29mZnNldCwgc2NzaV9vdXQodGFzay0+c2MpLT5sZW5ndGgpOwotCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCisJCWtmaWZvX2luKCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCiAJCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiAJCXJldHVybiBJU0NTSV9FUlJfREFUQUxFTjsKIAl9CkBAIC01ODAsNyArNTgwLDcgQEAKIAlyMnQtPnNlbnQgPSAwOwogCiAJdGNwX3Rhc2stPmV4cF9kYXRhc24gPSByMnRzbiArIDE7Ci0JX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSk7CisJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRxdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOwogCWNvbm4tPnIydF9wZHVzX2NudCsrOwogCiAJaXNjc2lfcmVxdWV1ZV90YXNrKHRhc2spOwpAQCAtOTUxLDcgKzk1MSw3IEBACiAJCXJldHVybiBjb25uLT5zZXNzaW9uLT50dC0+aW5pdF9wZHUodGFzaywgMCwgdGFzay0+ZGF0YV9jb3VudCk7CiAJfQogCi0JQlVHX09OKF9fa2ZpZm9fbGVuKHRjcF90YXNrLT5yMnRxdWV1ZSkpOworCUJVR19PTihrZmlmb19sZW4oJnRjcF90YXNrLT5yMnRxdWV1ZSkpOwogCXRjcF90YXNrLT5leHBfZGF0YXNuID0gMDsKIAogCS8qIFByZXBhcmUgUERVLCBvcHRpb25hbGx5IHcvIGltbWVkaWF0ZSBkYXRhICovCkBAIC05ODIsNyArOTgyLDcgQEAKIAkJCWlmIChyMnQtPmRhdGFfbGVuZ3RoIDw9IHIydC0+c2VudCkgewogCQkJCUlTQ1NJX0RCR19UQ1AodGFzay0+Y29ubiwKIAkJCQkJICAgICAgIiAgZG9uZSB3aXRoIHIydCAlcFxuIiwgcjJ0KTsKLQkJCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwKKwkJCQlrZmlmb19pbigmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsCiAJCQkJCSAgICAodm9pZCAqKSZ0Y3BfdGFzay0+cjJ0LAogCQkJCQkgICAgc2l6ZW9mKHZvaWQgKikpOwogCQkJCXRjcF90YXNrLT5yMnQgPSByMnQgPSBOVUxMOwpAQCAtOTkwLDggKzk5MCwxMyBAQAogCQl9CiAKIAkJaWYgKHIydCA9PSBOVUxMKSB7Ci0JCQlfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cXVldWUsCi0JCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsIHNpemVvZih2b2lkICopKTsKKwkJCWlmIChrZmlmb19vdXQoJnRjcF90YXNrLT5yMnRxdWV1ZSwKKwkJCSAgICAodm9pZCAqKSZ0Y3BfdGFzay0+cjJ0LCBzaXplb2Yodm9pZCAqKSkgIT0KKwkJCSAgICBzaXplb2Yodm9pZCAqKSkgeworCQkJCVdBUk5fT05DRSgxLCAidW5leHBlY3RlZCBmaWZvIHN0YXRlIik7CisJCQkJcjJ0ID0gTlVMTDsKKwkJCX0KKwogCQkJcjJ0ID0gdGNwX3Rhc2stPnIydDsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CkBAIC0xMTI3LDkgKzExMzIsOCBAQAogCQl9CiAKIAkJLyogUjJUIHhtaXQgcXVldWUgKi8KLQkJdGNwX3Rhc2stPnIydHF1ZXVlID0ga2ZpZm9fYWxsb2MoCi0JCSAgICAgIHNlc3Npb24tPm1heF9yMnQgKiA0ICogc2l6ZW9mKHZvaWQqKSwgR0ZQX0tFUk5FTCwgTlVMTCk7Ci0JCWlmICh0Y3BfdGFzay0+cjJ0cXVldWUgPT0gRVJSX1BUUigtRU5PTUVNKSkgeworCQlpZiAoa2ZpZm9fYWxsb2MoJnRjcF90YXNrLT5yMnRxdWV1ZSwKKwkJICAgICAgc2Vzc2lvbi0+bWF4X3IydCAqIDQgKiBzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMKSkgewogCQkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7CiAJCQlnb3RvIHIydF9hbGxvY19mYWlsOwogCQl9CkBAIC0xMTQyLDcgKzExNDYsNyBAQAogCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07CiAJCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCi0JCWtmaWZvX2ZyZWUodGNwX3Rhc2stPnIydHF1ZXVlKTsKKwkJa2ZpZm9fZnJlZSgmdGNwX3Rhc2stPnIydHF1ZXVlKTsKIAkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7CiAJfQogCXJldHVybiAtRU5PTUVNOwpAQCAtMTE1Nyw3ICsxMTYxLDcgQEAKIAkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBzZXNzaW9uLT5jbWRzW2ldOwogCQlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKIAotCQlrZmlmb19mcmVlKHRjcF90YXNrLT5yMnRxdWV1ZSk7CisJCWtmaWZvX2ZyZWUoJnRjcF90YXNrLT5yMnRxdWV1ZSk7CiAJCWlzY3NpX3Bvb2xfZnJlZSgmdGNwX3Rhc2stPnIydHBvb2wpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwppbmRleCA5YWQzOGU4Li5hYjE5YjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCkBAIC01OCwxOSArNTgsMTUgQEAKIAkJZ290byBmcmVlX3Bvb2w7CiAKIAlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7Ci0JcS0+cXVldWUgPSBrZmlmb19pbml0KCh2b2lkICopIHEtPnBvb2wsIG1heCAqIHNpemVvZih2b2lkICopLAotCQkJICAgICAgR0ZQX0tFUk5FTCwgJnEtPmxvY2spOwotCWlmIChJU19FUlIocS0+cXVldWUpKQotCQlnb3RvIGZyZWVfaXRlbTsKKwlrZmlmb19pbml0KCZxLT5xdWV1ZSwgKHZvaWQgKikgcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQgKikpOwogCiAJZm9yIChpID0gMCwgaXVlID0gcS0+aXRlbXM7IGkgPCBtYXg7IGkrKykgewotCQlfX2tmaWZvX3B1dChxLT5xdWV1ZSwgKHZvaWQgKikgJml1ZSwgc2l6ZW9mKHZvaWQgKikpOworCQlrZmlmb19pbigmcS0+cXVldWUsICh2b2lkICopICZpdWUsIHNpemVvZih2b2lkICopKTsKIAkJaXVlLT5zYnVmID0gcmluZ1tpXTsKIAkJaXVlKys7CiAJfQogCXJldHVybiAwOwogCi1mcmVlX2l0ZW06CiAJa2ZyZWUocS0+aXRlbXMpOwogZnJlZV9wb29sOgogCWtmcmVlKHEtPnBvb2wpOwpAQCAtMTY3LDcgKzE2MywxMSBAQAogewogCXN0cnVjdCBpdV9lbnRyeSAqaXVlID0gTlVMTDsKIAotCWtmaWZvX2dldCh0YXJnZXQtPml1X3F1ZXVlLnF1ZXVlLCAodm9pZCAqKSAmaXVlLCBzaXplb2Yodm9pZCAqKSk7CisJaWYgKGtmaWZvX291dF9sb2NrZWQoJnRhcmdldC0+aXVfcXVldWUucXVldWUsICh2b2lkICopICZpdWUsCisJCXNpemVvZih2b2lkICopLCAmdGFyZ2V0LT5pdV9xdWV1ZS5sb2NrKSAhPSBzaXplb2Yodm9pZCAqKSkgeworCQkJV0FSTl9PTkNFKDEsICJ1bmV4cGVjdGVkIGZpZm8gc3RhdGUiKTsKKwkJCXJldHVybiBOVUxMOworCX0KIAlpZiAoIWl1ZSkKIAkJcmV0dXJuIGl1ZTsKIAlpdWUtPnRhcmdldCA9IHRhcmdldDsKQEAgLTE3OSw3ICsxNzksOCBAQAogCiB2b2lkIHNycF9pdV9wdXQoc3RydWN0IGl1X2VudHJ5ICppdWUpCiB7Ci0Ja2ZpZm9fcHV0KGl1ZS0+dGFyZ2V0LT5pdV9xdWV1ZS5xdWV1ZSwgKHZvaWQgKikgJml1ZSwgc2l6ZW9mKHZvaWQgKikpOworCWtmaWZvX2luX2xvY2tlZCgmaXVlLT50YXJnZXQtPml1X3F1ZXVlLnF1ZXVlLCAodm9pZCAqKSAmaXVlLAorCQkJc2l6ZW9mKHZvaWQgKiksICZpdWUtPnRhcmdldC0+aXVfcXVldWUubG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcnBfaXVfcHV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCAyMjY5MjBkLi5kNGRhNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtNDUwNiw5ICs0NTA2LDEzIEBACiAJCXBkZXYgPSBwaGJhLT5wY2lkZXY7CiAKIAkvKiBTZXQgdGhlIGRldmljZSBETUEgbWFzayBzaXplICovCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkKLQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAhPSAwCisJIHx8IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LERNQV9CSVRfTUFTSyg2NCkpICE9IDApIHsKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMAorCQkgfHwgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgewogCQkJcmV0dXJuIGVycm9yOworCQl9CisJfQogCiAJLyogR2V0IHRoZSBidXMgYWRkcmVzcyBvZiBCYXIwIGFuZCBCYXIyIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAJICogcmVxdWlyZWQgYnkgZWFjaCBtYXBwaW5nLgpAQCAtNjAyMSw5ICs2MDI1LDEzIEBACiAJCXBkZXYgPSBwaGJhLT5wY2lkZXY7CiAKIAkvKiBTZXQgdGhlIGRldmljZSBETUEgbWFzayBzaXplICovCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkKLQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAhPSAwCisJIHx8IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LERNQV9CSVRfTUFTSyg2NCkpICE9IDApIHsKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMAorCQkgfHwgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgewogCQkJcmV0dXJuIGVycm9yOworCQl9CisJfQogCiAJLyogR2V0IHRoZSBidXMgYWRkcmVzcyBvZiBTTEk0IGRldmljZSBCYXIwLCBCYXIxLCBhbmQgQmFyMiBhbmQgdGhlCiAJICogbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGJ5IGVhY2ggbWFwcGluZy4gVGhleSBhcmUgYWN0dWFsbHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCAxMzRjNjNlLi45OWZmOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0yNTAxLDcgKzI1MDEsOSBAQAogCQlpbnN0YW5jZS0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGluc3RhbmNlLT5wZGV2LCAwKTsKIAl9CiAKLQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhpbnN0YW5jZS0+cGRldiwgIm1lZ2FzYXM6IExTSSIpKSB7CisJaWYgKHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYsCisJCXBjaV9zZWxlY3RfYmFycyhpbnN0YW5jZS0+cGRldiwgSU9SRVNPVVJDRV9NRU0pLAorCQkibWVnYXNhczogTFNJIikpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IElPIG1lbW9yeSByZWdpb24gYnVzeSFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTI2NDIsNyArMjY0NCw4IEBACiAJaW91bm1hcChpbnN0YW5jZS0+cmVnX3NldCk7CiAKICAgICAgIGZhaWxfaW9yZW1hcDoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKGluc3RhbmNlLT5wZGV2KTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGluc3RhbmNlLT5wZGV2LAorCQlwY2lfc2VsZWN0X2JhcnMoaW5zdGFuY2UtPnBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI2NjIsNyArMjY2NSw4IEBACiAKIAlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKIAotCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYsCisJCXBjaV9zZWxlY3RfYmFycyhpbnN0YW5jZS0+cGRldiwgSU9SRVNPVVJDRV9NRU0pKTsKIH0KIAogLyoqCkBAIC0yOTcxLDcgKzI5NzUsNyBAQAogCS8qCiAJICogUENJIHByZXBwaW5nOiBlbmFibGUgZGV2aWNlIHNldCBidXMgbWFzdGVyaW5nIGFuZCBkbWEgbWFzawogCSAqLwotCXJ2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlydmFsID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCiAJaWYgKHJ2YWwpIHsKIAkJcmV0dXJuIHJ2YWw7CkBAIC0zMjc2LDcgKzMyODAsNyBAQAogCS8qCiAJICogUENJIHByZXBwaW5nOiBlbmFibGUgZGV2aWNlIHNldCBidXMgbWFzdGVyaW5nIGFuZCBkbWEgbWFzawogCSAqLwotCXJ2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlydmFsID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCiAJaWYgKHJ2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IDY0MjJlMjUuLjg5ZDAyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0zNTgzLDYgKzM1ODMsMTEgQEAKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCW11dGV4X2luaXQoJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOwogCisJLyogc2NzaWggaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCisJaW9jLT5zY3NpaF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKKwlpb2MtPnNjc2loX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJbXV0ZXhfaW5pdCgmaW9jLT5zY3NpaF9jbWRzLm11dGV4KTsKKwogCS8qIHRhc2sgbWFuYWdlbWVudCBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAlpb2MtPnRtX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwogCWlvYy0+dG1fY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCmluZGV4IGM3OTBkNDUuLmNhZTZiMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwpAQCAtNjU3LDYgKzY1Nyw3IEBACiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDkxODApLCBjaGlwXzkxODAgfSwKIAl7IFBDSV9WREVWSUNFKEFSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzMDApLCBjaGlwXzEzMDAgfSwKIAl7IFBDSV9WREVWSUNFKEFSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzMjApLCBjaGlwXzEzMjAgfSwKKwl7IFBDSV9WREVWSUNFKEFEQVBURUMyLCAweDA0NTApLCBjaGlwXzY0NDAgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2luaXRpYXRvci5jIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKaW5kZXggOTUwMjAyYS4uMjQyMjM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKQEAgLTQzMiwzMCArNDMyLDIzIEBACiAJc2VnLT5hbGxvY19zaXplID0gMDsKIH0KIAotc3RhdGljIHZvaWQgX3B1dF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSAsIGJvb2wgaXNfYXN5bmMpCitzdGF0aWMgdm9pZCBfcHV0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChpc19hc3luYykgewotCQlXQVJOX09OKHJxLT5iaW8pOwotCQlfX2Jsa19wdXRfcmVxdWVzdChycS0+cSwgcnEpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIElmIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgd2FzIGNhbGxlZCBidXQgdGhlIHJlcXVlc3Qgd2FzIG5vdAotCQkgKiBleGVjdXRlZCB0aHJvdWdoIHRoZSBibG9jayBsYXllciwgdGhlbiB3ZSBtdXN0IHJlbGVhc2UgQklPcy4KLQkJICogVE9ETzogS2VlcCBlcnJvciBjb2RlIGluIG9yLT5hc3luY19lcnJvci4gTmVlZCB0byBhdWRpdCBhbGwKLQkJICogICAgICAgY29kZSBwYXRocy4KLQkJICovCi0JCWlmICh1bmxpa2VseShycS0+YmlvKSkKLQkJCWJsa19lbmRfcmVxdWVzdChycSwgLUVOT01FTSwgYmxrX3JxX2J5dGVzKHJxKSk7Ci0JCWVsc2UKLQkJCWJsa19wdXRfcmVxdWVzdChycSk7Ci0JfQorCS8qCisJICogSWYgb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVxdWVzdCB3YXMgbm90CisJICogZXhlY3V0ZWQgdGhyb3VnaCB0aGUgYmxvY2sgbGF5ZXIsIHRoZW4gd2UgbXVzdCByZWxlYXNlIEJJT3MuCisJICogVE9ETzogS2VlcCBlcnJvciBjb2RlIGluIG9yLT5hc3luY19lcnJvci4gTmVlZCB0byBhdWRpdCBhbGwKKwkgKiAgICAgICBjb2RlIHBhdGhzLgorCSAqLworCWlmICh1bmxpa2VseShycS0+YmlvKSkKKwkJYmxrX2VuZF9yZXF1ZXN0KHJxLCAtRU5PTUVNLCBibGtfcnFfYnl0ZXMocnEpKTsKKwllbHNlCisJCWJsa19wdXRfcmVxdWVzdChycSk7CiB9CiAKIHZvaWQgb3NkX2VuZF9yZXF1ZXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gb3ItPnJlcXVlc3Q7Ci0JLyogSU1QT1JUQU5UOiBtYWtlIHN1cmUgdGhpcyBhZ3JlZXMgd2l0aCBvc2RfZXhlY3V0ZV9yZXF1ZXN0X2FzeW5jICovCi0JYm9vbCBpc19hc3luYyA9IChvci0+cmVxdWVzdC0+ZW5kX2lvX2RhdGEgPT0gb3IpOwogCiAJX29zZF9mcmVlX3NlZyhvciwgJm9yLT5zZXRfYXR0cik7CiAJX29zZF9mcmVlX3NlZyhvciwgJm9yLT5lbmNfZ2V0X2F0dHIpOwpAQCAtNDYzLDIwICs0NTYsMzQgQEAKIAogCWlmIChycSkgewogCQlpZiAocnEtPm5leHRfcnEpIHsKLQkJCV9wdXRfcmVxdWVzdChycS0+bmV4dF9ycSwgaXNfYXN5bmMpOworCQkJX3B1dF9yZXF1ZXN0KHJxLT5uZXh0X3JxKTsKIAkJCXJxLT5uZXh0X3JxID0gTlVMTDsKIAkJfQogCi0JCV9wdXRfcmVxdWVzdChycSwgaXNfYXN5bmMpOworCQlfcHV0X3JlcXVlc3QocnEpOwogCX0KIAlfb3NkX3JlcXVlc3RfZnJlZShvcik7CiB9CiBFWFBPUlRfU1lNQk9MKG9zZF9lbmRfcmVxdWVzdCk7CiAKK3N0YXRpYyB2b2lkIF9zZXRfZXJyb3JfcmVzaWQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCSAgICAgaW50IGVycm9yKQoreworCW9yLT5hc3luY19lcnJvciA9IGVycm9yOworCW9yLT5yZXFfZXJyb3JzID0gcmVxLT5lcnJvcnMgPyA6IGVycm9yOworCW9yLT5zZW5zZV9sZW4gPSByZXEtPnNlbnNlX2xlbjsKKwlpZiAob3ItPm91dC5yZXEpCisJCW9yLT5vdXQucmVzaWR1YWwgPSBvci0+b3V0LnJlcS0+cmVzaWRfbGVuOworCWlmIChvci0+aW4ucmVxKQorCQlvci0+aW4ucmVzaWR1YWwgPSBvci0+aW4ucmVxLT5yZXNpZF9sZW47Cit9CisKIGludCBvc2RfZXhlY3V0ZV9yZXF1ZXN0KHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCiB7Ci0JcmV0dXJuIG9yLT5hc3luY19lcnJvciA9Ci0JCQlibGtfZXhlY3V0ZV9ycShvci0+cmVxdWVzdC0+cSwgTlVMTCwgb3ItPnJlcXVlc3QsIDApOworCWludCBlcnJvciA9IGJsa19leGVjdXRlX3JxKG9yLT5yZXF1ZXN0LT5xLCBOVUxMLCBvci0+cmVxdWVzdCwgMCk7CisKKwlfc2V0X2Vycm9yX3Jlc2lkKG9yLCBvci0+cmVxdWVzdCwgZXJyb3IpOworCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0wob3NkX2V4ZWN1dGVfcmVxdWVzdCk7CiAKQEAgLTQ4NCwxNSArNDkxLDE3IEBACiB7CiAJc3RydWN0IG9zZF9yZXF1ZXN0ICpvciA9IHJlcS0+ZW5kX2lvX2RhdGE7CiAKLQlvci0+YXN5bmNfZXJyb3IgPSBlcnJvcjsKLQotCWlmICh1bmxpa2VseShlcnJvcikpIHsKLQkJT1NEX0RFQlVHKCJvc2RfcmVxdWVzdF9hc3luY19kb25lIGVycm9yIHJlY2lldmVkICVkICIKLQkJCSAgImVycm9ycyAweCV4XG4iLCBlcnJvciwgcmVxLT5lcnJvcnMpOwotCQlpZiAoIXJlcS0+ZXJyb3JzKSAvKiBkb24ndCBtaXNzIG91dCBvbiB0aGlzIG9uZSAqLwotCQkJcmVxLT5lcnJvcnMgPSBlcnJvcjsKKwlfc2V0X2Vycm9yX3Jlc2lkKG9yLCByZXEsIGVycm9yKTsKKwlpZiAocmVxLT5uZXh0X3JxKSB7CisJCV9fYmxrX3B1dF9yZXF1ZXN0KHJlcS0+cSwgcmVxLT5uZXh0X3JxKTsKKwkJcmVxLT5uZXh0X3JxID0gTlVMTDsKIAl9CiAKKwlfX2Jsa19wdXRfcmVxdWVzdChyZXEtPnEsIHJlcSk7CisJb3ItPnJlcXVlc3QgPSBOVUxMOworCW9yLT5pbi5yZXEgPSBOVUxMOworCW9yLT5vdXQucmVxID0gTlVMTDsKKwogCWlmIChvci0+YXN5bmNfZG9uZSkKIAkJb3ItPmFzeW5jX2RvbmUob3IsIG9yLT5hc3luY19wcml2YXRlKTsKIAllbHNlCkBAIC0xNDg5LDIxICsxNDk4LDE4IEBACiAjZW5kaWYKIAlpbnQgcmV0OwogCi0JaWYgKGxpa2VseSghb3ItPnJlcXVlc3QtPmVycm9ycykpIHsKLQkJb3NpLT5vdXRfcmVzaWQgPSAwOwotCQlvc2ktPmluX3Jlc2lkID0gMDsKKwlpZiAobGlrZWx5KCFvci0+cmVxX2Vycm9ycykpCiAJCXJldHVybiAwOwotCX0KIAogCW9zaSA9IG9zaSA/IDogJmxvY2FsX29zaTsKIAltZW1zZXQob3NpLCAwLCBzaXplb2YoKm9zaSkpOwogCi0Jc3NkYiA9IG9yLT5yZXF1ZXN0LT5zZW5zZTsKLQlzZW5zZV9sZW4gPSBvci0+cmVxdWVzdC0+c2Vuc2VfbGVuOworCXNzZGIgPSAodHlwZW9mKHNzZGIpKW9yLT5zZW5zZTsKKwlzZW5zZV9sZW4gPSBvci0+c2Vuc2VfbGVuOwogCWlmICgoc2Vuc2VfbGVuIDwgKGludClzaXplb2YoKnNzZGIpIHx8ICFzc2RiLT5zZW5zZV9rZXkpKSB7CiAJCU9TRF9FUlIoIkJsb2NrLWxheWVyIHJldHVybmVkIGVycm9yKDB4JXgpIGJ1dCAiCiAJCQkic2Vuc2VfbGVuKCV1KSB8fCBrZXkoJWQpIGlzIGVtcHR5XG4iLAotCQkJb3ItPnJlcXVlc3QtPmVycm9ycywgc2Vuc2VfbGVuLCBzc2RiLT5zZW5zZV9rZXkpOworCQkJb3ItPnJlcV9lcnJvcnMsIHNlbnNlX2xlbiwgc3NkYi0+c2Vuc2Vfa2V5KTsKIAkJZ290byBhbmFseXplOwogCX0KIApAQCAtMTUyNSw3ICsxNTMxLDcgQEAKIAkJCSJhZGRpdGlvbmFsX2NvZGU9MHgleCBhc3luY19lcnJvcj0lZCBlcnJvcnM9MHgleFxuIiwKIAkJCW9zaS0+a2V5LCBvcmlnaW5hbF9zZW5zZV9sZW4sIHNlbnNlX2xlbiwKIAkJCW9zaS0+YWRkaXRpb25hbF9jb2RlLCBvci0+YXN5bmNfZXJyb3IsCi0JCQlvci0+cmVxdWVzdC0+ZXJyb3JzKTsKKwkJCW9yLT5yZXFfZXJyb3JzKTsKIAogCWlmIChvcmlnaW5hbF9zZW5zZV9sZW4gPCBzZW5zZV9sZW4pCiAJCXNlbnNlX2xlbiA9IG9yaWdpbmFsX3NlbnNlX2xlbjsKQEAgLTE2OTUsMTAgKzE3MDEsMTAgQEAKIAkJcmV0ID0gLUVJTzsKIAl9CiAKLQlpZiAob3ItPm91dC5yZXEpCi0JCW9zaS0+b3V0X3Jlc2lkID0gb3ItPm91dC5yZXEtPnJlc2lkX2xlbiA/OiBvci0+b3V0LnRvdGFsX2J5dGVzOwotCWlmIChvci0+aW4ucmVxKQotCQlvc2ktPmluX3Jlc2lkID0gb3ItPmluLnJlcS0+cmVzaWRfbGVuID86IG9yLT5pbi50b3RhbF9ieXRlczsKKwlpZiAoIW9yLT5vdXQucmVzaWR1YWwpCisJCW9yLT5vdXQucmVzaWR1YWwgPSBvci0+b3V0LnRvdGFsX2J5dGVzOworCWlmICghb3ItPmluLnJlc2lkdWFsKQorCQlvci0+aW4ucmVzaWR1YWwgPSBvci0+aW4udG90YWxfYnl0ZXM7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfY3RsLmggYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9jdGwuaAppbmRleCAyMjY0NGRlLi42M2FkNGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9jdGwuaAorKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9jdGwuaApAQCAtNDUsMTYgKzQ1LDYgQEAKICNkZWZpbmUgSEVBREVSX0xFTgkJCTI4CiAjZGVmaW5lIFNJWkVfT0ZGU0VUCQkJMTYKIAotc3RydWN0IHBtODAwMV9pb2N0bF9wYXlsb2FkIHsKLQl1MzIJc2lnbmF0dXJlOwotCXUxNgltYWpvcl9mdW5jdGlvbjsKLQl1MTYJbWlub3JfZnVuY3Rpb247Ci0JdTE2CWxlbmd0aDsKLQl1MTYJc3RhdHVzOwotCXUxNglvZmZzZXQ7Ci0JdTE2CWlkOwotCXU4CWZ1bmNfc3BlY2lmaWNbMV07Ci19OwogCiAjZGVmaW5lIEZMQVNIX09LICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAKICNkZWZpbmUgRkFJTF9PUEVOX0JJT1NfRklMRSAgICAgICAgICAgICAweDAwMDEwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYwppbmRleCBhM2RlMzA2Li45YjQ0YzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYwpAQCAtMzczLDEwICszNzMsNyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0CiBtcGlfc2V0X3BoeXNfZzNfd2l0aF9zc2Moc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB1MzIgU1NDYml0KQogewotCXUzMiBvZmZzZXQ7Ci0JdTMyIHZhbHVlOwotCXUzMiBpLCBqOwotCXUzMiBiaXRfY250OworCXUzMiB2YWx1ZSwgb2Zmc2V0LCBpOwogCiAjZGVmaW5lIFNBUzJfU0VUVElOR1NfTE9DQUxfUEhZXzBfM19TSElGVF9BRERSIDB4MDAwMzAwMDAKICNkZWZpbmUgU0FTMl9TRVRUSU5HU19MT0NBTF9QSFlfNF83X1NISUZUX0FERFIgMHgwMDA0MDAwMApAQCAtMzkyLDU1ICszODksMzUgQEAKICAgICAqLwogCWlmICgtMSA9PSBiYXI0X3NoaWZ0KHBtODAwMV9oYSwgU0FTMl9TRVRUSU5HU19MT0NBTF9QSFlfMF8zX1NISUZUX0FERFIpKQogCQlyZXR1cm47Ci0JLyogc2V0IFNTQyBiaXQgb2YgUEhZIDAgLSAzICovCisKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCW9mZnNldCA9IFNBUzJfU0VUVElOR1NfTE9DQUxfUEhZXzBfM19PRkZTRVQgKyAweDQwMDAgKiBpOwotCQl2YWx1ZSA9IHBtODAwMV9jcjMyKHBtODAwMV9oYSwgMiwgb2Zmc2V0KTsKLQkJaWYgKFNTQ2JpdCkgewotCQkJdmFsdWUgfD0gMHgwMDAwMDAwMSA8PCBQSFlfRzNfV0lUSF9TU0NfQklUX1NISUZUOwotCQkJdmFsdWUgJj0gfigweDAwMDAwMDAxIDw8IFBIWV9HM19XSVRIT1VUX1NTQ19CSVRfU0hJRlQpOwotCQl9IGVsc2UgewotCQkJdmFsdWUgfD0gMHgwMDAwMDAwMSA8PCBQSFlfRzNfV0lUSE9VVF9TU0NfQklUX1NISUZUOwotCQkJdmFsdWUgJj0gfigweDAwMDAwMDAxIDw8IFBIWV9HM19XSVRIX1NTQ19CSVRfU0hJRlQpOwotCQl9Ci0JCWJpdF9jbnQgPSAwOwotCQlmb3IgKGogPSAwOyBqIDwgMzE7IGorKykKLQkJCWlmICgodmFsdWUgPj4gaikgJiAweDAwMDAwMDAxKQotCQkJCWJpdF9jbnQrKzsKLQkJaWYgKGJpdF9jbnQgJSAyKQotCQkJdmFsdWUgJj0gfigweDAwMDAwMDAxIDw8IFNOVzNfUEhZX0NBUEFCSUxJVElFU19QQVJJVFkpOwotCQllbHNlCi0JCQl2YWx1ZSB8PSAweDAwMDAwMDAxIDw8IFNOVzNfUEhZX0NBUEFCSUxJVElFU19QQVJJVFk7Ci0KLQkJcG04MDAxX2N3MzIocG04MDAxX2hhLCAyLCBvZmZzZXQsIHZhbHVlKTsKKwkJcG04MDAxX2N3MzIocG04MDAxX2hhLCAyLCBvZmZzZXQsIDB4ODAwMDE1MDEpOwogCX0KLQogCS8qIHNoaWZ0IG1lbWJhc2UgMyBmb3IgU0FTMl9TRVRUSU5HU19MT0NBTF9QSFkgNCAtIDcgKi8KIAlpZiAoLTEgPT0gYmFyNF9zaGlmdChwbTgwMDFfaGEsIFNBUzJfU0VUVElOR1NfTE9DQUxfUEhZXzRfN19TSElGVF9BRERSKSkKIAkJcmV0dXJuOwotCi0JLyogc2V0IFNTQyBiaXQgb2YgUEhZIDQgLSA3ICovCiAJZm9yIChpID0gNDsgaSA8IDg7IGkrKykgewogCQlvZmZzZXQgPSBTQVMyX1NFVFRJTkdTX0xPQ0FMX1BIWV80XzdfT0ZGU0VUICsgMHg0MDAwICogKGktNCk7Ci0JCXZhbHVlID0gcG04MDAxX2NyMzIocG04MDAxX2hhLCAyLCBvZmZzZXQpOwotCQlpZiAoU1NDYml0KSB7Ci0JCQl2YWx1ZSB8PSAweDAwMDAwMDAxIDw8IFBIWV9HM19XSVRIX1NTQ19CSVRfU0hJRlQ7Ci0JCQl2YWx1ZSAmPSB+KDB4MDAwMDAwMDEgPDwgUEhZX0czX1dJVEhPVVRfU1NDX0JJVF9TSElGVCk7Ci0JCX0gZWxzZSB7Ci0JCQl2YWx1ZSB8PSAweDAwMDAwMDAxIDw8IFBIWV9HM19XSVRIT1VUX1NTQ19CSVRfU0hJRlQ7Ci0JCQl2YWx1ZSAmPSB+KDB4MDAwMDAwMDEgPDwgUEhZX0czX1dJVEhfU1NDX0JJVF9TSElGVCk7Ci0JCX0KLQkJYml0X2NudCA9IDA7Ci0JCWZvciAoaiA9IDA7IGogPCAzMTsgaisrKQotCQkJaWYgKCh2YWx1ZSA+PiBqKSAmIDB4MDAwMDAwMDEpCi0JCQkJYml0X2NudCsrOwotCQlpZiAoYml0X2NudCAlIDIpCi0JCQl2YWx1ZSAmPSB+KDB4MDAwMDAwMDEgPDwgU05XM19QSFlfQ0FQQUJJTElUSUVTX1BBUklUWSk7Ci0JCWVsc2UKLQkJCXZhbHVlIHw9IDB4MDAwMDAwMDEgPDwgU05XM19QSFlfQ0FQQUJJTElUSUVTX1BBUklUWTsKLQotCQlwbTgwMDFfY3czMihwbTgwMDFfaGEsIDIsIG9mZnNldCwgdmFsdWUpOworCQlwbTgwMDFfY3czMihwbTgwMDFfaGEsIDIsIG9mZnNldCwgMHg4MDAwMTUwMSk7CiAJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJQ2hhbmdlIHRoZSBTU0MgdXBzcHJlYWRpbmcgdmFsdWUgdG8gMHgwIHNvIHRoYXQgdXBzcHJlYWRpbmcgaXMgZGlzYWJsZWQuCisJRGV2aWNlIE1BQkMgU01PRDAgQ29udHJvbHMKKwlBZGRyZXNzOiAodmlhIE1FTUJBU0UtSUlJKToKKwlVc2luZyBzaGlmdGVkIGRlc3RpbmF0aW9uIGFkZHJlc3MgMHgwXzAwMDA6IHdpdGggT2Zmc2V0IDB4RDgKKworCTMxOjI4IFIvVyBSZXNlcnZlZCBEbyBub3QgY2hhbmdlCisJMjc6MjQgUi9XIFNBU19TTU9EX1NQUkRVUCAwMDAwCisJMjM6MjAgUi9XIFNBU19TTU9EX1NQUkRETiAwMDAwCisJMTk6MCAgUi9XICBSZXNlcnZlZCBEbyBub3QgY2hhbmdlCisJVXBvbiBwb3dlci11cCB0aGlzIHJlZ2lzdGVyIHdpbGwgcmVhZCBhcyAweDg5OTBjMDE2LAorCWFuZCBJIHdvdWxkIGxpa2UgeW91IHRvIGNoYW5nZSB0aGUgU0FTX1NNT0RfU1BSRFVQIGJpdHMgdG8gMGIwMDAwCisJc28gdGhhdCB0aGUgd3JpdHRlbiB2YWx1ZSB3aWxsIGJlIDB4ODA5MGMwMTYuCisJVGhpcyB3aWxsIGVuc3VyZSBvbmx5IGRvd24tc3ByZWFkaW5nIFNTQyBpcyBlbmFibGVkIG9uIHRoZSBTUEMuCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl2YWx1ZSA9IHBtODAwMV9jcjMyKHBtODAwMV9oYSwgMiwgMHhkOCk7CisJcG04MDAxX2N3MzIocG04MDAxX2hhLCAyLCAweGQ4LCAweDgwMDBDMDE2KTsKIAogCS8qc2V0IHRoZSBzaGlmdGVkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8gMHgwIHRvIGF2b2lkIGVycm9yIG9wZXJhdGlvbiAqLwogCWJhcjRfc2hpZnQocG04MDAxX2hhLCAweDApOwpAQCAtMTkwMSw3ICsxODc4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnQ7CiAJc3RydWN0IHBtODAwMV9jY2JfaW5mbyAqY2NiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJdTMyIHBhcmFtOwogCXUzMiBzdGF0dXM7CiAJdTMyIHRhZzsKQEAgLTIwNDAsNyArMjAxNyw5IEBACiAJCQl0cy0+c3RhdCA9IFNBU19RVUVVRV9GVUxMOwogCQkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CiAJCQltYigpOy8qaW4gb3JkZXIgdG8gZm9yY2UgQ1BVIG9yZGVyaW5nKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJdC0+dGFza19kb25lKHQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMjA1OCw3ICsyMDM3LDkgQEAKIAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7CiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKIAkJCW1iKCk7LypkaXR0byovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCXQtPnRhc2tfZG9uZSh0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlicmVhazsKQEAgLTIwODQsNyArMjA2NSw5IEBACiAJCQl0cy0+c3RhdCA9IFNBU19RVUVVRV9GVUxMOwogCQkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CiAJCQltYigpOy8qIGRpdHRvKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJdC0+dGFza19kb25lKHQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMjE0OSw3ICsyMTMyLDkgQEAKIAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7CiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKIAkJCW1iKCk7LypkaXR0byovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCXQtPnRhc2tfZG9uZSh0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlicmVhazsKQEAgLTIxNzEsNyArMjE1Niw5IEBACiAJCQl0cy0+c3RhdCA9IFNBU19RVUVVRV9GVUxMOwogCQkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CiAJCQltYigpOy8qZGl0dG8qLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQl0LT50YXNrX2RvbmUodCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0yMjAwLDExICsyMTg3LDIwIEBACiAJCQkiIHJlc3AgMHgleCBzdGF0IDB4JXggYnV0IGFib3J0ZWQgYnkgdXBwZXIgbGF5ZXIhXG4iLAogCQkJdCwgc3RhdHVzLCB0cy0+cmVzcCwgdHMtPnN0YXQpKTsKIAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHQtPnVsZGRfdGFzaykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CiAJCW1iKCk7LyogZGl0dG8gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCXQtPnRhc2tfZG9uZSh0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoIXQtPnVsZGRfdGFzaykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CisJCW1iKCk7LypkaXR0byovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOworCQl0LT50YXNrX2RvbmUodCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTIyMTIsNyArMjIwOCw3IEBACiBzdGF0aWMgdm9pZCBtcGlfc2F0YV9ldmVudChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEgLCB2b2lkICpwaW9tYikKIHsKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0czsKIAlzdHJ1Y3QgcG04MDAxX2NjYl9pbmZvICpjY2I7CiAJc3RydWN0IHBtODAwMV9kZXZpY2UgKnBtODAwMV9kZXY7CkBAIC0yMjkyLDcgKzIyODgsOSBAQAogCQkJdHMtPnN0YXQgPSBTQVNfUVVFVUVfRlVMTDsKIAkJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOwogCQkJbWIoKTsvKmRpdHRvKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJdC0+dGFza19kb25lKHQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMjQwMSwxMSArMjM5OSwyMCBAQAogCQkJIiByZXNwIDB4JXggc3RhdCAweCV4IGJ1dCBhYm9ydGVkIGJ5IHVwcGVyIGxheWVyIVxuIiwKIAkJCXQsIGV2ZW50LCB0cy0+cmVzcCwgdHMtPnN0YXQpKTsKIAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHQtPnVsZGRfdGFzaykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7Ci0JCW1iKCk7LyogaW4gb3JkZXIgdG8gZm9yY2UgQ1BVIG9yZGVyaW5nICovCisJCW1iKCk7LyogZGl0dG8gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCXQtPnRhc2tfZG9uZSh0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoIXQtPnVsZGRfdGFzaykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CisJCW1iKCk7LypkaXR0byovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOworCQl0LT50YXNrX2RvbmUodCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTI4NzYsMTUgKzI4ODMsMjAgQEAKIAkJbGUzMl90b19jcHUocFBheWxvYWQtPmxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkKTsKIAl1OCBsaW5rX3JhdGUgPQogCQkodTgpKChscl9ldnRfc3RhdHVzX3BoeWlkX3BvcnRpZCAmIDB4RjAwMDAwMDApID4+IDI4KTsKKwl1OCBwb3J0X2lkID0gKHU4KShscl9ldnRfc3RhdHVzX3BoeWlkX3BvcnRpZCAmIDB4MDAwMDAwMEYpOwogCXU4IHBoeV9pZCA9CiAJCSh1OCkoKGxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkICYgMHgwMDAwMDBGMCkgPj4gNCk7CisJdTMyIG5waXBfcG9ydHN0YXRlID0gbGUzMl90b19jcHUocFBheWxvYWQtPm5waXBfcG9ydHN0YXRlKTsKKwl1OCBwb3J0c3RhdGUgPSAodTgpKG5waXBfcG9ydHN0YXRlICYgMHgwMDAwMDAwRik7CisJc3RydWN0IHBtODAwMV9wb3J0ICpwb3J0ID0gJnBtODAwMV9oYS0+cG9ydFtwb3J0X2lkXTsKIAlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gcG04MDAxX2hhLT5zYXM7CiAJc3RydWN0IHBtODAwMV9waHkgKnBoeSA9ICZwbTgwMDFfaGEtPnBoeVtwaHlfaWRdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggZGV2aWNlVHlwZSA9IHBQYXlsb2FkLT5zYXNfaWRlbnRpZnkuZGV2X3R5cGU7Ci0KKwlwb3J0LT5wb3J0X3N0YXRlID0gIHBvcnRzdGF0ZTsKIAlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCi0JCXBtODAwMV9wcmludGsoIkhXX0VWRU5UX1NBU19QSFlfVVAgXG4iKSk7CisJCXBtODAwMV9wcmludGsoIkhXX0VWRU5UX1NBU19QSFlfVVAgcG9ydCBpZCA9ICVkLCBwaHkgaWQgPSAlZFxuIiwKKwkJcG9ydF9pZCwgcGh5X2lkKSk7CiAKIAlzd2l0Y2ggKGRldmljZVR5cGUpIHsKIAljYXNlIFNBU19QSFlfVU5VU0VEOgpAQCAtMjg5NSwxNiArMjkwNywxOSBAQAogCQlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsIHBtODAwMV9wcmludGsoImVuZCBkZXZpY2UuXG4iKSk7CiAJCXBtODAwMV9jaGlwX3BoeV9jdGxfcmVxKHBtODAwMV9oYSwgcGh5X2lkLAogCQkJUEhZX05PVElGWV9FTkFCTEVfU1BJTlVQKTsKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDE7CiAJCWdldF9scmF0ZV9tb2RlKHBoeSwgbGlua19yYXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U6CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoImV4cGFuZGVyIGRldmljZS5cbiIpKTsKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDE7CiAJCWdldF9scmF0ZV9tb2RlKHBoeSwgbGlua19yYXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRToKIAkJUE04MDAxX01TR19EQkcocG04MDAxX2hhLAogCQkJcG04MDAxX3ByaW50aygiZmFub3V0IGV4cGFuZGVyIGRldmljZS5cbiIpKTsKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDE7CiAJCWdldF9scmF0ZV9tb2RlKHBoeSwgbGlua19yYXRlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI5NDYsMTEgKzI5NjEsMjAgQEAKIAkJbGUzMl90b19jcHUocFBheWxvYWQtPmxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkKTsKIAl1OCBsaW5rX3JhdGUgPQogCQkodTgpKChscl9ldnRfc3RhdHVzX3BoeWlkX3BvcnRpZCAmIDB4RjAwMDAwMDApID4+IDI4KTsKKwl1OCBwb3J0X2lkID0gKHU4KShscl9ldnRfc3RhdHVzX3BoeWlkX3BvcnRpZCAmIDB4MDAwMDAwMEYpOwogCXU4IHBoeV9pZCA9CiAJCSh1OCkoKGxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkICYgMHgwMDAwMDBGMCkgPj4gNCk7CisJdTMyIG5waXBfcG9ydHN0YXRlID0gbGUzMl90b19jcHUocFBheWxvYWQtPm5waXBfcG9ydHN0YXRlKTsKKwl1OCBwb3J0c3RhdGUgPSAodTgpKG5waXBfcG9ydHN0YXRlICYgMHgwMDAwMDAwRik7CisJc3RydWN0IHBtODAwMV9wb3J0ICpwb3J0ID0gJnBtODAwMV9oYS0+cG9ydFtwb3J0X2lkXTsKIAlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gcG04MDAxX2hhLT5zYXM7CiAJc3RydWN0IHBtODAwMV9waHkgKnBoeSA9ICZwbTgwMDFfaGEtPnBoeVtwaHlfaWRdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJUE04MDAxX01TR19EQkcocG04MDAxX2hhLAorCQlwbTgwMDFfcHJpbnRrKCJIV19FVkVOVF9TQVRBX1BIWV9VUCBwb3J0IGlkID0gJWQsIgorCQkiIHBoeSBpZCA9ICVkXG4iLCBwb3J0X2lkLCBwaHlfaWQpKTsKKwlwb3J0LT5wb3J0X3N0YXRlID0gIHBvcnRzdGF0ZTsKKwlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMTsKIAlnZXRfbHJhdGVfbW9kZShwaHksIGxpbmtfcmF0ZSk7CiAJcGh5LT5waHlfdHlwZSB8PSBQT1JUX1RZUEVfU0FUQTsKIAlwaHktPnBoeV9hdHRhY2hlZCA9IDE7CkBAIC0yOTg0LDcgKzMwMDgsMTMgQEAKIAkJKHU4KSgobHJfZXZ0X3N0YXR1c19waHlpZF9wb3J0aWQgJiAweDAwMDAwMEYwKSA+PiA0KTsKIAl1MzIgbnBpcF9wb3J0c3RhdGUgPSBsZTMyX3RvX2NwdShwUGF5bG9hZC0+bnBpcF9wb3J0c3RhdGUpOwogCXU4IHBvcnRzdGF0ZSA9ICh1OCkobnBpcF9wb3J0c3RhdGUgJiAweDAwMDAwMDBGKTsKLQorCXN0cnVjdCBwbTgwMDFfcG9ydCAqcG9ydCA9ICZwbTgwMDFfaGEtPnBvcnRbcG9ydF9pZF07CisJc3RydWN0IHBtODAwMV9waHkgKnBoeSA9ICZwbTgwMDFfaGEtPnBoeVtwaHlfaWRdOworCXBvcnQtPnBvcnRfc3RhdGUgPSAgcG9ydHN0YXRlOworCXBoeS0+cGh5X3R5cGUgPSAwOworCXBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgPSAwOworCXBoeS0+cGh5X2F0dGFjaGVkID0gMDsKKwltZW1zZXQoJnBoeS0+ZGV2X3Nhc19hZGRyLCAwLCBTQVNfQUREUl9TSVpFKTsKIAlzd2l0Y2ggKHBvcnRzdGF0ZSkgewogCWNhc2UgUE9SVF9WQUxJRDoKIAkJYnJlYWs7CkBAIC0yOTkzLDI2ICszMDIzLDMwIEBACiAJCQlwbTgwMDFfcHJpbnRrKCIgUG9ydEludmFsaWQgcG9ydElEICVkIFxuIiwgcG9ydF9pZCkpOwogCQlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCiAJCQlwbTgwMDFfcHJpbnRrKCIgTGFzdCBwaHkgRG93biBhbmQgcG9ydCBpbnZhbGlkXG4iKSk7CisJCXBvcnQtPnBvcnRfYXR0YWNoZWQgPSAwOwogCQlwbTgwMDFfaHdfZXZlbnRfYWNrX3JlcShwbTgwMDFfaGEsIDAsIEhXX0VWRU5UX1BIWV9ET1dOLAogCQkJcG9ydF9pZCwgcGh5X2lkLCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0lOX1JFU0VUOgogCQlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCi0JCQlwbTgwMDFfcHJpbnRrKCIgUG9ydEluUmVzZXQgcG9ydElEICVkIFxuIiwgcG9ydF9pZCkpOworCQkJcG04MDAxX3ByaW50aygiIFBvcnQgSW4gUmVzZXQgcG9ydElEICVkIFxuIiwgcG9ydF9pZCkpOwogCQlicmVhazsKIAljYXNlIFBPUlRfTk9UX0VTVEFCTElTSEVEOgogCQlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCiAJCQlwbTgwMDFfcHJpbnRrKCIgcGh5IERvd24gYW5kIFBPUlRfTk9UX0VTVEFCTElTSEVEXG4iKSk7CisJCXBvcnQtPnBvcnRfYXR0YWNoZWQgPSAwOwogCQlicmVhazsKIAljYXNlIFBPUlRfTE9TVENPTU06CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIiBwaHkgRG93biBhbmQgUE9SVF9MT1NUQ09NTVxuIikpOwogCQlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCiAJCQlwbTgwMDFfcHJpbnRrKCIgTGFzdCBwaHkgRG93biBhbmQgcG9ydCBpbnZhbGlkXG4iKSk7CisJCXBvcnQtPnBvcnRfYXR0YWNoZWQgPSAwOwogCQlwbTgwMDFfaHdfZXZlbnRfYWNrX3JlcShwbTgwMDFfaGEsIDAsIEhXX0VWRU5UX1BIWV9ET1dOLAogCQkJcG9ydF9pZCwgcGh5X2lkLCAwLCAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDA7CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIiBwaHkgRG93biBhbmQoZGVmYXVsdCkgPSAleFxuIiwKIAkJCXBvcnRzdGF0ZSkpOwpAQCAtMzc3MCw3ICszODA0LDggQEAKIAl1MzIgb3BjID0gT1BDX0lOQl9TU1BJTklJT1NUQVJUOwogCW1lbXNldCgmc3NwX2NtZCwgMCwgc2l6ZW9mKHNzcF9jbWQpKTsKIAltZW1jcHkoc3NwX2NtZC5zc3BfaXUubHVuLCB0YXNrLT5zc3BfdGFzay5MVU4sIDgpOwotCXNzcF9jbWQuZGlyX21fdGxyID0gZGF0YV9kaXJfZmxhZ3NbdGFzay0+ZGF0YV9kaXJdIDw8IDggfCAweDA7LyowIGZvcgorCXNzcF9jbWQuZGlyX21fdGxyID0KKwkJY3B1X3RvX2xlMzIoZGF0YV9kaXJfZmxhZ3NbdGFzay0+ZGF0YV9kaXJdIDw8IDggfCAweDApOy8qMCBmb3IKIAlTQVMgMS4xIGNvbXBhdGlibGUgVExSKi8KIAlzc3BfY21kLmRhdGFfbGVuID0gY3B1X3RvX2xlMzIodGFzay0+dG90YWxfeGZlcl9sZW4pOwogCXNzcF9jbWQuZGV2aWNlX2lkID0gY3B1X3RvX2xlMzIocG04MDAxX2Rldi0+ZGV2aWNlX2lkKTsKQEAgLTM4NDEsNyArMzg3Niw3IEBACiAJCX0KIAl9CiAJaWYgKHRhc2stPmF0YV90YXNrLnVzZV9uY3EgJiYgcG04MDAxX2dldF9uY3FfdGFnKHRhc2ssICZoZHJfdGFnKSkKLQkJbmNnX3RhZyA9IGNwdV90b19sZTMyKGhkcl90YWcpOworCQluY2dfdGFnID0gaGRyX3RhZzsKIAlkaXIgPSBkYXRhX2Rpcl9mbGFnc1t0YXNrLT5kYXRhX2Rpcl0gPDwgODsKIAlzYXRhX2NtZC50YWcgPSBjcHVfdG9fbGUzMih0YWcpOwogCXNhdGFfY21kLmRldmljZV9pZCA9IGNwdV90b19sZTMyKHBtODAwMV9oYV9kZXYtPmRldmljZV9pZCk7CkBAIC0zOTg2LDcgKzQwMjEsNyBAQAogCQkoKHN0cF9zc3BzbXBfc2F0YSAmIDB4MDMpICogMHgxMDAwMDAwMCkpOwogCXBheWxvYWQuZmlyc3RidXJzdHNpemVfSVROZXh1c3RpbWVvdXQgPQogCQljcHVfdG9fbGUzMihJVE5UIHwgKGZpcnN0QnVyc3RTaXplICogMHgxMDAwMCkpOwotCW1lbWNweSgmcGF5bG9hZC5zYXNfYWRkcl9oaSwgcG04MDAxX2Rldi0+c2FzX2RldmljZS0+c2FzX2FkZHIsCisJbWVtY3B5KHBheWxvYWQuc2FzX2FkZHIsIHBtODAwMV9kZXYtPnNhc19kZXZpY2UtPnNhc19hZGRyLAogCQlTQVNfQUREUl9TSVpFKTsKIAlyYyA9IG1waV9idWlsZF9jbWQocG04MDAxX2hhLCBjaXJjdWxhclEsIG9wYywgJnBheWxvYWQpOwogCXJldHVybiByYzsKQEAgLTQwMjcsNyArNDA2Miw3IEBACiAJc3RydWN0IGluYm91bmRfcXVldWVfdGFibGUgKmNpcmN1bGFyUTsKIAlpbnQgcmV0OwogCXUzMiBvcGMgPSBPUENfSU5CX0xPQ0FMX1BIWV9DT05UUk9MOwotCW1lbXNldCgodTggKikmcGF5bG9hZCwgMCwgc2l6ZW9mKHBheWxvYWQpKTsKKwltZW1zZXQoJnBheWxvYWQsIDAsIHNpemVvZihwYXlsb2FkKSk7CiAJY2lyY3VsYXJRID0gJnBtODAwMV9oYS0+aW5ibmRfcV90YmxbMF07CiAJcGF5bG9hZC50YWcgPSAxOwogCXBheWxvYWQucGh5b3BfcGh5aWQgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmggYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaAppbmRleCA5NmU0ZGFhLi44MzNhNTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaAorKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaApAQCAtMjQyLDggKzI0Miw3IEBACiAJX19sZTMyCXBoeWlkX3BvcnRpZDsKIAlfX2xlMzIJZHR5cGVfZGxyX3JldHJ5OwogCV9fbGUzMglmaXJzdGJ1cnN0c2l6ZV9JVE5leHVzdGltZW91dDsKLQl1MzIJc2FzX2FkZHJfaGk7Ci0JdTMyCXNhc19hZGRyX2xvdzsKKwl1OAlzYXNfYWRkcltTQVNfQUREUl9TSVpFXTsKIAlfX2xlMzIJdXBwZXJfZGV2aWNlX2lkOwogCXUzMglyZXNlcnZlZFs4XTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKaW5kZXggNDJlYmU3Mi4uYzJmMTAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYwpAQCAtMjAwLDggKzIwMCwxMyBAQAogewogCWludCBpOwogCXNwaW5fbG9ja19pbml0KCZwbTgwMDFfaGEtPmxvY2spOwotCWZvciAoaSA9IDA7IGkgPCBwbTgwMDFfaGEtPmNoaXAtPm5fcGh5OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHBtODAwMV9oYS0+Y2hpcC0+bl9waHk7IGkrKykgewogCQlwbTgwMDFfcGh5X2luaXQocG04MDAxX2hhLCBpKTsKKwkJcG04MDAxX2hhLT5wb3J0W2ldLndpZGVfcG9ydF9waHltYXAgPSAwOworCQlwbTgwMDFfaGEtPnBvcnRbaV0ucG9ydF9hdHRhY2hlZCA9IDA7CisJCXBtODAwMV9oYS0+cG9ydFtpXS5wb3J0X3N0YXRlID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBtODAwMV9oYS0+cG9ydFtpXS5saXN0KTsKKwl9CiAKIAlwbTgwMDFfaGEtPnRhZ3MgPSBremFsbG9jKFBNODAwMV9NQVhfQ0NCLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBtODAwMV9oYS0+dGFncykKQEAgLTUxMSwxOSArNTE2LDIzIEBACiAJdTggaTsKICNpZmRlZiBQTTgwMDFfUkVBRF9WUEQKIAlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0aW9uKTsKKwlzdHJ1Y3QgcG04MDAxX2lvY3RsX3BheWxvYWQgcGF5bG9hZDsKIAlwbTgwMDFfaGEtPm52bWRfY29tcGxldGlvbiA9ICZjb21wbGV0aW9uOwotCVBNODAwMV9DSElQX0RJU1AtPmdldF9udm1kX3JlcShwbTgwMDFfaGEsIDAsIDApOworCXBheWxvYWQubWlub3JfZnVuY3Rpb24gPSAwOworCXBheWxvYWQubGVuZ3RoID0gMTI4OworCXBheWxvYWQuZnVuY19zcGVjaWZpYyA9IGt6YWxsb2MoMTI4LCBHRlBfS0VSTkVMKTsKKwlQTTgwMDFfQ0hJUF9ESVNQLT5nZXRfbnZtZF9yZXEocG04MDAxX2hhLCAmcGF5bG9hZCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxldGlvbik7CiAJZm9yIChpID0gMDsgaSA8IHBtODAwMV9oYS0+Y2hpcC0+bl9waHk7IGkrKykgewogCQltZW1jcHkoJnBtODAwMV9oYS0+cGh5W2ldLmRldl9zYXNfYWRkciwgcG04MDAxX2hhLT5zYXNfYWRkciwKIAkJCVNBU19BRERSX1NJWkUpOwogCQlQTTgwMDFfSU5JVF9EQkcocG04MDAxX2hhLAotCQkJcG04MDAxX3ByaW50aygicGh5ICVkIHNhc19hZGRyID0gJXggXG4iLCBpLAotCQkJKHU2NClwbTgwMDFfaGEtPnBoeVtpXS5kZXZfc2FzX2FkZHIpKTsKKwkJCXBtODAwMV9wcmludGsoInBoeSAlZCBzYXNfYWRkciA9ICUwMTZsbHggXG4iLCBpLAorCQkJcG04MDAxX2hhLT5waHlbaV0uZGV2X3Nhc19hZGRyKSk7CiAJfQogI2Vsc2UKIAlmb3IgKGkgPSAwOyBpIDwgcG04MDAxX2hhLT5jaGlwLT5uX3BoeTsgaSsrKSB7Ci0JCXBtODAwMV9oYS0+cGh5W2ldLmRldl9zYXNfYWRkciA9IDB4NTAwZTAwNDAxMDAwMDAwNFVMTDsKKwkJcG04MDAxX2hhLT5waHlbaV0uZGV2X3Nhc19hZGRyID0gMHg1MDAxMGM2MDAwNDdmOWQwVUxMOwogCQlwbTgwMDFfaGEtPnBoeVtpXS5kZXZfc2FzX2FkZHIgPQogCQkJY3B1X3RvX2JlNjQoKHU2NCkKIAkJCQkoKih1NjQgKikmcG04MDAxX2hhLT5waHlbaV0uZGV2X3Nhc19hZGRyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9zYXMuYyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jCmluZGV4IDFmNzY3YTAuLjdmOWM4M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jCkBAIC0zMjksNiArMzI5LDIzIEBACiAJfQogCXJldHVybiAwOwogfQorIC8qIEZpbmQgdGhlIGxvY2FsIHBvcnQgaWQgdGhhdCdzIGF0dGFjaGVkIHRvIHRoaXMgZGV2aWNlICovCitzdGF0aWMgaW50IHNhc19maW5kX2xvY2FsX3BvcnRfaWQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZG9tYWluX2RldmljZSAqcGRldiA9IGRldi0+cGFyZW50OworCisJLyogRGlyZWN0bHkgYXR0YWNoZWQgZGV2aWNlICovCisJaWYgKCFwZGV2KQorCQlyZXR1cm4gZGV2LT5wb3J0LT5pZDsKKwl3aGlsZSAocGRldikgeworCQlzdHJ1Y3QgZG9tYWluX2RldmljZSAqcGRldl9wID0gcGRldi0+cGFyZW50OworCQlpZiAoIXBkZXZfcCkKKwkJCXJldHVybiBwZGV2LT5wb3J0LT5pZDsKKwkJcGRldiA9IHBkZXYtPnBhcmVudDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICAqIHBtODAwMV90YXNrX2V4ZWMgLSBxdWV1ZSB0aGUgdGFzayhzc3AsIHNtcCAmJiBhdGEpIHRvIHRoZSBoYXJkd2FyZS4KICAgKiBAdGFzazogdGhlIHRhc2sgdG8gYmUgZXhlY3V0ZS4KQEAgLTM0NiwxMSArMzYzLDEyIEBACiAJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHRhc2stPmRldjsKIAlzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGE7CiAJc3RydWN0IHBtODAwMV9kZXZpY2UgKnBtODAwMV9kZXY7CisJc3RydWN0IHBtODAwMV9wb3J0ICpwb3J0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwogCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsKIAl1MzIgdGFnID0gMHhkZWFkYmVlZiwgcmMsIG5fZWxlbSA9IDA7CiAJdTMyIG4gPSBudW07Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDAsIGZsYWdzX2xpYnNhcyA9IDA7CiAKIAlpZiAoIWRldi0+cG9ydCkgewogCQlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0c20gPSAmdC0+dGFza19zdGF0dXM7CkBAIC0zNzksNiArMzk3LDM1IEBACiAJCQlyYyA9IFNBU19QSFlfRE9XTjsKIAkJCWdvdG8gb3V0X2RvbmU7CiAJCX0KKwkJcG9ydCA9ICZwbTgwMDFfaGEtPnBvcnRbc2FzX2ZpbmRfbG9jYWxfcG9ydF9pZChkZXYpXTsKKwkJaWYgKCFwb3J0LT5wb3J0X2F0dGFjaGVkKSB7CisJCQlpZiAoc2FzX3Byb3RvY29sX2F0YSh0LT50YXNrX3Byb3RvKSkgeworCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOworCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CisJCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CisKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGRldi0+c2F0YV9kZXYuYXAtPmxvY2ssCisJCQkJCQlmbGFnc19saWJzYXMpOworCQkJCXQtPnRhc2tfZG9uZSh0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZShkZXYtPnNhdGFfZGV2LmFwLT5sb2NrLAorCQkJCQlmbGFnc19saWJzYXMpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKKwkJCQlpZiAobiA+IDEpCisJCQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwKKwkJCQkJCQlzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0cyA9ICZ0LT50YXNrX3N0YXR1czsKKwkJCQl0cy0+cmVzcCA9IFNBU19UQVNLX1VOREVMSVZFUkVEOworCQkJCXRzLT5zdGF0ID0gU0FTX1BIWV9ET1dOOworCQkJCXQtPnRhc2tfZG9uZSh0KTsKKwkJCQlpZiAobiA+IDEpCisJCQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwKKwkJCQkJCQlzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CiAJCXJjID0gcG04MDAxX3RhZ19hbGxvYyhwbTgwMDFfaGEsICZ0YWcpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycl9vdXQ7CkBAIC01NjksMTEgKzYxNiwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAogCXBtODAwMV9kZXZpY2UgPSBwbTgwMDFfYWxsb2NfZGV2KHBtODAwMV9oYSk7Ci0JcG04MDAxX2RldmljZS0+c2FzX2RldmljZSA9IGRldjsKIAlpZiAoIXBtODAwMV9kZXZpY2UpIHsKIAkJcmVzID0gLTE7CiAJCWdvdG8gZm91bmRfb3V0OwogCX0KKwlwbTgwMDFfZGV2aWNlLT5zYXNfZGV2aWNlID0gZGV2OwogCWRldi0+bGxkZF9kZXYgPSBwbTgwMDFfZGV2aWNlOwogCXBtODAwMV9kZXZpY2UtPmRldl90eXBlID0gZGV2LT5kZXZfdHlwZTsKIAlwbTgwMDFfZGV2aWNlLT5kY29tcGxldGlvbiA9ICZjb21wbGV0aW9uOwpAQCAtNjA5LDcgKzY1Niw3IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxldGlvbik7CiAJaWYgKGRldi0+ZGV2X3R5cGUgPT0gU0FTX0VORF9ERVYpCiAJCW1zbGVlcCg1MCk7Ci0JcG04MDAxX2hhLT5mbGFncyA9IFBNODAwMUZfUlVOX1RJTUUgOworCXBtODAwMV9oYS0+ZmxhZ3MgfD0gUE04MDAxRl9SVU5fVElNRSA7CiAJcmV0dXJuIDA7CiBmb3VuZF9vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CkBAIC03NzIsNyArODE5LDcgQEAKIAkJdGFzay0+dGFza19kb25lID0gcG04MDAxX3Rhc2tfZG9uZTsKIAkJdGFzay0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXRhc2s7CiAJCXRhc2stPnRpbWVyLmZ1bmN0aW9uID0gcG04MDAxX3RtZl90aW1lZG91dDsKLQkJdGFzay0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBQTTgwMDFfVEFTS19USU1FT1VUKkhaOworCQl0YXNrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBNODAwMV9UQVNLX1RJTUVPVVQgKiBIWjsKIAkJYWRkX3RpbWVyKCZ0YXNrLT50aW1lcik7CiAKIAkJcmVzID0gcG04MDAxX3RhZ19hbGxvYyhwbTgwMDFfaGEsICZjY2JfdGFnKTsKQEAgLTg5Nyw2ICs5NDQsOCBAQAogCiAJaWYgKGRldl9pc19zYXRhKGRldikpIHsKIAkJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGlvbl9zZXRzdGF0ZSk7CisJCWlmIChzY3NpX2lzX3Nhc19waHlfbG9jYWwocGh5KSkKKwkJCXJldHVybiAwOwogCQlyYyA9IHNhc19waHlfcmVzZXQocGh5LCAxKTsKIAkJbXNsZWVwKDIwMDApOwogCQlyYyA9IHBtODAwMV9leGVjX2ludGVybmFsX3Rhc2tfYWJvcnQocG04MDAxX2hhLCBwbTgwMDFfZGV2ICwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKaW5kZXggMzBmMmVkZS4uOGUzOGNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKQEAgLTU5LDExICs1OSwxMSBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkicG04MDAxIgogI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuMS4zNiIKLSNkZWZpbmUgUE04MDAxX0ZBSUxfTE9HR0lORwkweDAxIC8qIGxpYnNhcyBFSCBmdW5jdGlvbiBsb2dnaW5nICovCisjZGVmaW5lIFBNODAwMV9GQUlMX0xPR0dJTkcJMHgwMSAvKiBFcnJvciBtZXNzYWdlIGxvZ2dpbmcgKi8KICNkZWZpbmUgUE04MDAxX0lOSVRfTE9HR0lORwkweDAyIC8qIGRyaXZlciBpbml0IGxvZ2dpbmcgKi8KICNkZWZpbmUgUE04MDAxX0RJU0NfTE9HR0lORwkweDA0IC8qIGRpc2NvdmVyeSBsYXllciBsb2dnaW5nICovCiAjZGVmaW5lIFBNODAwMV9JT19MT0dHSU5HCTB4MDggLyogSS9PIHBhdGggbG9nZ2luZyAqLwotI2RlZmluZSBQTTgwMDFfRUhfTE9HR0lORwkweDEwIC8qIEVycm9yIG1lc3NhZ2UgbG9nZ2luZyAqLworI2RlZmluZSBQTTgwMDFfRUhfTE9HR0lORwkweDEwIC8qIGxpYnNhcyBFSCBmdW5jdGlvbiBsb2dnaW5nKi8KICNkZWZpbmUgUE04MDAxX0lPQ1RMX0xPR0dJTkcJMHgyMCAvKiBJT0NUTCBtZXNzYWdlIGxvZ2dpbmcgKi8KICNkZWZpbmUgUE04MDAxX01TR19MT0dHSU5HCTB4NDAgLyogbWlzYyBtZXNzYWdlIGxvZ2dpbmcgKi8KICNkZWZpbmUgcG04MDAxX3ByaW50ayhmb3JtYXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQ6IiBmb3JtYXQsXApAQCAtMTAwLDYgKzEwMCw3IEBACiAKICNkZWZpbmUgUE04MDAxX1VTRV9UQVNLTEVUCiAjZGVmaW5lIFBNODAwMV9VU0VfTVNJWAorI2RlZmluZSBQTTgwMDFfUkVBRF9WUEQKIAogCiAjZGVmaW5lIERFVl9JU19FWFBBTkRFUih0eXBlKQkoKHR5cGUgPT0gRURHRV9ERVYpIHx8ICh0eXBlID09IEZBTk9VVF9ERVYpKQpAQCAtMTExLDcgKzExMiwyMiBAQAogc3RydWN0IHBtODAwMV9oYmFfaW5mbzsKIHN0cnVjdCBwbTgwMDFfY2NiX2luZm87CiBzdHJ1Y3QgcG04MDAxX2RldmljZTsKLXN0cnVjdCBwbTgwMDFfdG1mX3Rhc2s7CisvKiBkZWZpbmUgdGFzayBtYW5hZ2VtZW50IElVICovCitzdHJ1Y3QgcG04MDAxX3RtZl90YXNrIHsKKwl1OAl0bWY7CisJdTMyCXRhZ19vZl90YXNrX3RvX2JlX21hbmFnZWQ7Cit9Oworc3RydWN0IHBtODAwMV9pb2N0bF9wYXlsb2FkIHsKKwl1MzIJc2lnbmF0dXJlOworCXUxNgltYWpvcl9mdW5jdGlvbjsKKwl1MTYJbWlub3JfZnVuY3Rpb247CisJdTE2CWxlbmd0aDsKKwl1MTYJc3RhdHVzOworCXUxNglvZmZzZXQ7CisJdTE2CWlkOworCXU4CSpmdW5jX3NwZWNpZmljOworfTsKKwogc3RydWN0IHBtODAwMV9kaXNwYXRjaCB7CiAJY2hhciAqbmFtZTsKIAlpbnQgKCpjaGlwX2luaXQpKHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSk7CkBAIC0xNjQsNiArMTgwLDEwIEBACiAKIHN0cnVjdCBwbTgwMDFfcG9ydCB7CiAJc3RydWN0IGFzZF9zYXNfcG9ydAlzYXNfcG9ydDsKKwl1OAkJCXBvcnRfYXR0YWNoZWQ7CisJdTgJCQl3aWRlX3BvcnRfcGh5bWFwOworCXU4CQkJcG9ydF9zdGF0ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCiBzdHJ1Y3QgcG04MDAxX3BoeSB7CkBAIC0zODYsMTEgKzQwNiw3IEBACiAJX19iZTMyIHN0YXJ0dXBfZW50cnk7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwogCi0vKiBkZWZpbmUgdGFzayBtYW5hZ2VtZW50IElVICovCi1zdHJ1Y3QgcG04MDAxX3RtZl90YXNrIHsKLQl1OAl0bWY7Ci0JdTMyCXRhZ19vZl90YXNrX3RvX2JlX21hbmFnZWQ7Ci19OworCiAvKioKICAqIEZXIEZsYXNoIFVwZGF0ZSBzdGF0dXMgdmFsdWVzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCmluZGV4IDM0YzZiODkuLmU3ZDI2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiBwbWNyYWlkLmMgLS0gZHJpdmVyIGZvciBQTUMgU2llcnJhIE1heFJBSUQgY29udHJvbGxlciBhZGFwdGVycwogICoKLSAqIFdyaXR0ZW4gQnk6IFBNQyBTaWVycmEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gQnk6IEFuaWwgUmF2aW5kcmFuYXRoPGFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tPgorICogICAgICAgICAgICAgUE1DLVNpZXJyYSBJbmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgUE1DIFNpZXJyYSBJbmMKICAqCkBAIC03OSw3ICs4MCw3IEBACiAvKgogICogTW9kdWxlIHBhcmFtZXRlcnMKICAqLwotTU9EVUxFX0FVVEhPUigiUE1DIFNpZXJyYSBDb3Jwb3JhdGlvbiwgYW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20iKTsKK01PRFVMRV9BVVRIT1IoIkFuaWwgUmF2aW5kcmFuYXRoPGFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUMgU2llcnJhIE1heFJBSUQgQ29udHJvbGxlciBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKFBNQ1JBSURfRFJJVkVSX1ZFUlNJT04pOwpAQCAtMTYyLDEwICsxNjMsMTAgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXAsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EsIHF1ZXVlKSB7CiAKLQkJLyogZG8gbm90IGV4cG9zZSBWU0VUcyB3aXRoIG9yZGVyLWlkcyA+PSAyNDAgKi8KKwkJLyogZG8gbm90IGV4cG9zZSBWU0VUcyB3aXRoIG9yZGVyLWlkcyA+IE1BWF9WU0VUX1RBUkdFVFMgKi8KIAkJaWYgKFJFU19JU19WU0VUKHRlbXAtPmNmZ19lbnRyeSkpIHsKIAkJCXRhcmdldCA9IHRlbXAtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxOwotCQkJaWYgKHRhcmdldCA+PSBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMpCisJCQlpZiAodGFyZ2V0ID4gUE1DUkFJRF9NQVhfVlNFVF9UQVJHRVRTKQogCQkJCWNvbnRpbnVlOwogCQkJYnVzID0gUE1DUkFJRF9WU0VUX0JVU19JRDsKIAkJCWx1biA9IDA7CkBAIC0xMjEwLDcgKzEyMTEsNyBAQAogCWludCByZXR2YWwgPSAwOwogCiAJaWYgKGNmZ3RlLT5yZXNvdXJjZV90eXBlID09IFJFU19UWVBFX1ZTRVQpCi0JCXJldHZhbCA9ICgoY2ZndGUtPnVuaXF1ZV9mbGFnczEgJiAweEZGKSA8IDB4RkUpOworCQlyZXR2YWwgPSAoKGNmZ3RlLT51bmlxdWVfZmxhZ3MxICYgMHg4MCkgPT0gMCk7CiAJZWxzZSBpZiAoY2ZndGUtPnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfR1NDU0kpCiAJCXJldHZhbCA9IChSRVNfQlVTKGNmZ3RlLT5yZXNvdXJjZV9hZGRyZXNzKSAhPQogCQkJCVBNQ1JBSURfVklSVFVBTF9FTkNMX0JVU19JRCk7CkBAIC0xMzYxLDYgKzEzNjIsNyBAQAogICogUmV0dXJuIHZhbHVlOgogICogIG5vbmUKICAqLworCiBzdGF0aWMgdm9pZCBwbWNyYWlkX2hhbmRsZV9jb25maWdfY2hhbmdlKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCiB7CiAJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5ICpjZmdfZW50cnk7CkBAIC0xMzY4LDkgKzEzNzAsMTAgQEAKIAlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKIAlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNmZ2NtZDsKIAlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzID0gTlVMTDsKLQl1MzIgbmV3X2VudHJ5ID0gMTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBob3N0X2xvY2tfZmxhZ3M7CisJdTMyIG5ld19lbnRyeSA9IDE7CisJdTMyIGhpZGRlbl9lbnRyeSA9IDA7CiAJaW50IHJjOwogCiAJY2NuX2hjYW0gPSAoc3RydWN0IHBtY3JhaWRfaGNhbV9jY24gKilwaW5zdGFuY2UtPmNjbi5oY2FtOwpAQCAtMTQwNiw5ICsxNDA5LDE1IEBACiAJfQogCiAJLyogSWYgdGhpcyByZXNvdXJjZSBpcyBub3QgZ29pbmcgdG8gYmUgYWRkZWQgdG8gbWlkLWxheWVyLCBqdXN0IG5vdGlmeQotCSAqIGFwcGxpY2F0aW9ucyBhbmQgcmV0dXJuCisJICogYXBwbGljYXRpb25zIGFuZCByZXR1cm4uIElmIHRoaXMgbm90aWZpY2F0aW9uIGlzIGFib3V0IGhpZGluZyBhIFZTRVQKKwkgKiByZXNvdXJjZSwgY2hlY2sgaWYgaXQgd2FzIGV4cG9zZWQgYWxyZWFkeS4KIAkgKi8KLQlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGNmZ19lbnRyeSkpCisJaWYgKHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl90eXBlID09CisJICAgIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0NIQU5HRUQgJiYKKwkgICAgY2ZnX2VudHJ5LT5yZXNvdXJjZV90eXBlID09IFJFU19UWVBFX1ZTRVQgJiYKKwkgICAgY2ZnX2VudHJ5LT51bmlxdWVfZmxhZ3MxICYgMHg4MCkgeworCQloaWRkZW5fZW50cnkgPSAxOworCX0gZWxzZSBpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGNmZ19lbnRyeSkpCiAJCWdvdG8gb3V0X25vdGlmeV9hcHBzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CkBAIC0xNDI0LDYgKzE0MzMsMTIgQEAKIAogCWlmIChuZXdfZW50cnkpIHsKIAorCQlpZiAoaGlkZGVuX2VudHJ5KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssCisJCQkJCQlsb2NrX2ZsYWdzKTsKKwkJCWdvdG8gb3V0X25vdGlmeV9hcHBzOworCQl9CisKIAkJLyogSWYgdGhlcmUgYXJlIG1vcmUgbnVtYmVyIG9mIHJlc291cmNlcyB0aGFuIHdoYXQgZHJpdmVyIGNhbgogCQkgKiBtYW5hZ2UsIGRvIG5vdCBub3RpZnkgdGhlIGFwcGxpY2F0aW9ucyBhYm91dCB0aGUgQ0NOLiBKdXN0CiAJCSAqIGlnbm9yZSB0aGlzIG5vdGlmaWNhdGlvbnMgYW5kIHJlLXJlZ2lzdGVyIHRoZSBzYW1lIEhDQU0KQEAgLTE0NTQsOCArMTQ2OSw5IEBACiAJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkpKTsKIAogCWlmIChwaW5zdGFuY2UtPmNjbi5oY2FtLT5ub3RpZmljYXRpb25fdHlwZSA9PQotCSAgICBOT1RJRklDQVRJT05fVFlQRV9FTlRSWV9ERUxFVEVEKSB7CisJICAgIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0RFTEVURUQgfHwgaGlkZGVuX2VudHJ5KSB7CiAJCWlmIChyZXMtPnNjc2lfZGV2KSB7CisJCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxICY9IDB4N0Y7CiAJCQlyZXMtPmNoYW5nZV9kZXRlY3RlZCA9IFJFU19DSEFOR0VfREVMOwogCQkJcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfaGFuZGxlID0KIAkJCQlQTUNSQUlEX0lOVkFMSURfUkVTX0hBTkRMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmggYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCmluZGV4IDI3NTJiNTYuLjkyZjg5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaApAQCAtMSw2ICsxLDkgQEAKIC8qCiAgKiBwbWNyYWlkLmggLS0gUE1DIFNpZXJyYSBNYXhSQUlEIGNvbnRyb2xsZXIgZHJpdmVyIGhlYWRlciBmaWxlCiAgKgorICogV3JpdHRlbiBCeTogQW5pbCBSYXZpbmRyYW5hdGg8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+CisgKiAgICAgICAgICAgICBQTUMtU2llcnJhIEluYworICoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBQTUMgU2llcnJhIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTA2LDcgKzEwOSw3IEBACiAjZGVmaW5lIFBNQ1JBSURfVlNFVF9MVU5fSUQgICAgICAgICAgICAgICAgICAgICAgMHgwCiAjZGVmaW5lIFBNQ1JBSURfUEhZU19CVVNfSUQgICAgICAgICAgICAgICAgICAgICAgMHgwCiAjZGVmaW5lIFBNQ1JBSURfVklSVFVBTF9FTkNMX0JVU19JRCAgICAgICAgICAgICAgMHg4Ci0jZGVmaW5lIFBNQ1JBSURfTUFYX1ZTRVRfVEFSR0VUUyAgICAgICAgICAgICAgICAgMjQwCisjZGVmaW5lIFBNQ1JBSURfTUFYX1ZTRVRfVEFSR0VUUyAgICAgICAgICAgICAgICAgMHg3RgogI2RlZmluZSBQTUNSQUlEX01BWF9WU0VUX0xVTlNfUEVSX1RBUkdFVCAgICAgICAgIDgKIAogI2RlZmluZSBQTUNSQUlEX0lPQV9NQVhfU0VDVE9SUyAgICAgICAgICAgICAgICAgIDMyNzY3CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggNmI5YmYyMy4uMzg0YWZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMTU3MCw5ICsxNTcwLDYgQEAKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqZHJwb3J0OwogCXUzMiBzdXBwb3J0ZWRfY2xhc3NlczsKIAotCXVuc2lnbmVkIGxvbmcgbGFzdF9xdWV1ZV9mdWxsOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9yYW1wX3VwOwotCiAJdWludDE2X3QgdnBfaWR4OwogfSBmY19wb3J0X3Q7CiAKQEAgLTIyNjUsNiArMjI2Miw3IEBACiAJCXVpbnQzMl90CXBvcnQwCQkJOjE7CiAJCXVpbnQzMl90CXJ1bm5pbmdfZ29sZF9mdwkJOjE7CiAJCXVpbnQzMl90CWNwdV9hZmZpbml0eV9lbmFibGVkCToxOworCQl1aW50MzJfdAlkaXNhYmxlX21zaXhfaGFuZHNoYWtlCToxOwogCX0gZmxhZ3M7CiAKIAkvKiBUaGlzIHNwaW5sb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCAiaW8gdHJhbnNhY3Rpb25zIiwgeW91IG11c3QKQEAgLTIzODcsNiArMjM4NSw3IEBACiAjZGVmaW5lIElTX1FMQTgxWFgoaGEpCQkoSVNfUUxBODAwMShoYSkpCiAjZGVmaW5lIElTX1FMQTJYWFhfTUlEVFlQRShoYSkJKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTg0WFgoaGEpIHx8IFwKIAkJCQlJU19RTEEyNVhYKGhhKSB8fCBJU19RTEE4MVhYKGhhKSkKKyNkZWZpbmUgSVNfTVNJWF9OQUNLX0NBUEFCTEUoaGEpIChJU19RTEE4MVhYKGhhKSkKICNkZWZpbmUgSVNfTk9QT0xMSU5HX1RZUEUoaGEpCSgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIFwKIAkJCQkoaGEpLT5mbGFncy5tc2l4X2VuYWJsZWQpCiAjZGVmaW5lIElTX0ZBQ19SRVFVSVJFRChoYSkJKElTX1FMQTgxWFgoaGEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IGUyMTg1MTMuLjBiNjgwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTcyLDggKzcyLDYgQEAKIGV4dGVybiBpbnQgcWwyeGZkbWllbmFibGU7CiBleHRlcm4gaW50IHFsMnhhbGxvY2Z3ZHVtcDsKIGV4dGVybiBpbnQgcWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7Ci1leHRlcm4gaW50IHFsMnhxZnVsbHJhbXB1cDsKLWV4dGVybiBpbnQgcWwyeHFmdWxsdHJhY2tpbmc7CiBleHRlcm4gaW50IHFsMnhpaWRtYWVuYWJsZTsKIGV4dGVybiBpbnQgcWwyeG1heHF1ZXVlczsKIGV4dGVybiBpbnQgcWwyeG11bHRpcXVlX3RhZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IGI3NDkyNGIuLjczYTc5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMTQ0Miw3ICsxNDQyLDE3IEBACiAJCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiB8PQogCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQklUXzE4KTsKIAotCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKH5CSVRfMjIpOworCQkvKiBVc2UgRGlzYWJsZSBNU0lYIEhhbmRzaGFrZSBtb2RlIGZvciBjYXBhYmxlIGFkYXB0ZXJzICovCisJCWlmIChJU19NU0lYX05BQ0tfQ0FQQUJMRShoYSkpIHsKKwkJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yICY9CisJCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMih+QklUXzIyKTsKKwkJCWhhLT5mbGFncy5kaXNhYmxlX21zaXhfaGFuZHNoYWtlID0gMTsKKwkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkiTVNJWCBIYW5kc2hha2UgRGlzYWJsZSBNb2RlIHR1cm5lZCBvblxuIik7CisJCX0gZWxzZSB7CisJCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiB8PQorCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQklUXzIyKTsKKwkJfQogCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKEJJVF8yMyk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3AyNW1xLnJlcV9xX2luLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCA4MDQ5ODczLi4xNjkyYTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC04MTEsNzggKzgxMSw2IEBACiAJCXFsYTJ4MDBfYWxlcnRfYWxsX3Zwcyhyc3AsIG1iKTsKIH0KIAotc3RhdGljIHZvaWQKLXFsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX3VwKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqZGF0YSkKLXsKLQlmY19wb3J0X3QgKmZjcG9ydCA9IGRhdGE7Ci0Jc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IGZjcG9ydC0+dmhhOwotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCXN0cnVjdCByZXFfcXVlICpyZXEgPSBOVUxMOwotCi0JaWYgKCFxbDJ4cWZ1bGx0cmFja2luZykKLQkJcmV0dXJuOwotCi0JcmVxID0gdmhhLT5yZXE7Ci0JaWYgKCFyZXEpCi0JCXJldHVybjsKLQlpZiAocmVxLT5tYXhfcV9kZXB0aCA8PSBzZGV2LT5xdWV1ZV9kZXB0aCkKLQkJcmV0dXJuOwotCi0JaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLAotCQkgICAgc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKLQllbHNlCi0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLAotCQkgICAgc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKLQotCWZjcG9ydC0+bGFzdF9yYW1wX3VwID0gamlmZmllczsKLQotCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JICAgICJzY3NpKCVsZDolZDolZDolZCk6IFF1ZXVlIGRlcHRoIGFkanVzdGVkLXVwIHRvICVkLlxuIiwKLQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4sCi0JICAgIHNkZXYtPnF1ZXVlX2RlcHRoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF9kb3duKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqZGF0YSkKLXsKLQlmY19wb3J0X3QgKmZjcG9ydCA9IGRhdGE7Ci0KLQlpZiAoIXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBzZGV2LT5xdWV1ZV9kZXB0aCAtIDEpKQotCQlyZXR1cm47Ci0KLQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGZjcG9ydC0+dmhhLT5odywKLQkgICAgInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZC5cbiIsCi0JICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuLAotCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXFsYTJ4MDBfcmFtcF91cF9xdWV1ZV9kZXB0aChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKLQkJCQkJCQkJc3JiX3QgKnNwKQotewotCWZjX3BvcnRfdCAqZmNwb3J0OwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKLQotCWlmICghcWwyeHFmdWxsdHJhY2tpbmcpCi0JCXJldHVybjsKLQotCXNkZXYgPSBzcC0+Y21kLT5kZXZpY2U7Ci0JaWYgKHNkZXYtPnF1ZXVlX2RlcHRoID49IHJlcS0+bWF4X3FfZGVwdGgpCi0JCXJldHVybjsKLQotCWZjcG9ydCA9IHNwLT5mY3BvcnQ7Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCi0JICAgIGZjcG9ydC0+bGFzdF9yYW1wX3VwICsgcWwyeHFmdWxscmFtcHVwICogSFopKQotCQlyZXR1cm47Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCi0JICAgIGZjcG9ydC0+bGFzdF9xdWV1ZV9mdWxsICsgcWwyeHFmdWxscmFtcHVwICogSFopKQotCQlyZXR1cm47Ci0KLQlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzZGV2LT5zZGV2X3RhcmdldCwgZmNwb3J0LAotCSAgICBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cCk7Ci19Ci0KIC8qKgogICogcWxhMngwMF9wcm9jZXNzX2NvbXBsZXRlZF9yZXF1ZXN0KCkgLSBQcm9jZXNzIGEgRmFzdCBQb3N0IHJlc3BvbnNlLgogICogQGhhOiBTQ1NJIGRyaXZlciBIQSBjb250ZXh0CkBAIC05MTMsOCArODQxLDYgQEAKIAogCQkvKiBTYXZlIElTUCBjb21wbGV0aW9uIHN0YXR1cyAqLwogCQlzcC0+Y21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7Ci0KLQkJcWxhMngwMF9yYW1wX3VwX3F1ZXVlX2RlcHRoKHZoYSwgcmVxLCBzcCk7CiAJCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKIAl9IGVsc2UgewogCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCkgUmVxOiVkOiBJbnZhbGlkIElTUCBTQ1NJIGNvbXBsZXRpb24iCkBAIC0xNDM1LDEzICsxMzYxLDYgQEAKIAkJCSAgICAic2NzaSglbGQpOiBRVUVVRSBGVUxMIHN0YXR1cyBkZXRlY3RlZCAiCiAJCQkgICAgIjB4JXgtMHgleC5cbiIsIHZoYS0+aG9zdF9ubywgY29tcF9zdGF0dXMsCiAJCQkgICAgc2NzaV9zdGF0dXMpKTsKLQotCQkJLyogQWRqdXN0IHF1ZXVlIGRlcHRoIGZvciBhbGwgbHVucyBvbiB0aGUgcG9ydC4gKi8KLQkJCWlmICghcWwyeHFmdWxsdHJhY2tpbmcpCi0JCQkJYnJlYWs7Ci0JCQlmY3BvcnQtPmxhc3RfcXVldWVfZnVsbCA9IGppZmZpZXM7Ci0JCQlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShjcC0+ZGV2aWNlLT5zZGV2X3RhcmdldCwKLQkJCSAgICBmY3BvcnQsIHFsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX2Rvd24pOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGxzY3NpX3N0YXR1cyAhPSBTU19DSEVDS19DT05ESVRJT04pCkBAIC0xNTE2LDE3ICsxNDM1LDYgQEAKIAkJCQkgICAgInNjc2koJWxkKTogUVVFVUUgRlVMTCBzdGF0dXMgZGV0ZWN0ZWQgIgogCQkJCSAgICAiMHgleC0weCV4LlxuIiwgdmhhLT5ob3N0X25vLCBjb21wX3N0YXR1cywKIAkJCQkgICAgc2NzaV9zdGF0dXMpKTsKLQotCQkJCS8qCi0JCQkJICogQWRqdXN0IHF1ZXVlIGRlcHRoIGZvciBhbGwgbHVucyBvbiB0aGUKLQkJCQkgKiBwb3J0LgotCQkJCSAqLwotCQkJCWlmICghcWwyeHFmdWxsdHJhY2tpbmcpCi0JCQkJCWJyZWFrOwotCQkJCWZjcG9ydC0+bGFzdF9xdWV1ZV9mdWxsID0gamlmZmllczsKLQkJCQlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZSgKLQkJCQkgICAgY3AtPmRldmljZS0+c2Rldl90YXJnZXQsIGZjcG9ydCwKLQkJCQkgICAgcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfZG93bik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAobHNjc2lfc3RhdHVzICE9IFNTX0NIRUNLX0NPTkRJVElPTikKQEAgLTIwMjAsNyArMTkyOCw3IEBACiAKIAl2aGEgPSBxbGEyNXh4X2dldF9ob3N0KHJzcCk7CiAJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKLQlpZiAoIWhhLT5tcWVuYWJsZSkgeworCWlmICghaGEtPmZsYWdzLmRpc2FibGVfbXNpeF9oYW5kc2hha2UpIHsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCQlSRF9SRUdfRFdPUkRfUkVMQVhFRCgmcmVnLT5oY2NyKTsKIAl9CkBAIC0yMDM0LDYgKzE5NDIsNyBAQAogewogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CiAJc3RydWN0IHJzcF9xdWUgKnJzcDsKKwlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzsKIAogCXJzcCA9IChzdHJ1Y3QgcnNwX3F1ZSAqKSBkZXZfaWQ7CiAJaWYgKCFyc3ApIHsKQEAgLTIwNDMsNiArMTk1MiwxNCBAQAogCX0KIAloYSA9IHJzcC0+aHc7CiAKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0LCBpZiBlbmFibGVkLCBmb3IgdGhpcyByZXNwb25zZSBxdWV1ZSAqLworCWlmIChyc3AtPm9wdGlvbnMgJiB+QklUXzYpIHsKKwkJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OworCQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKKwkJUkRfUkVHX0RXT1JEX1JFTEFYRUQoJnJlZy0+aGNjcik7CisJCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCX0KIAlxdWV1ZV93b3JrX29uKChpbnQpIChyc3AtPmlkIC0gMSksIGhhLT53cSwgJnJzcC0+cV93b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwppbmRleCBhNDdkMzQzLi4yYTRjN2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC02OTYsNiArNjk2LDEwIEBACiAJLyogVXNlIGFsdGVybmF0ZSBQQ0kgZGV2Zm4gKi8KIAlpZiAoTFNCKHJzcC0+cmlkKSkKIAkJb3B0aW9ucyB8PSBCSVRfNTsKKwkvKiBFbmFibGUgTVNJWCBoYW5kc2hha2UgbW9kZSBvbiBmb3IgdW5jYXBhYmxlIGFkYXB0ZXJzICovCisJaWYgKCFJU19NU0lYX05BQ0tfQ0FQQUJMRShoYSkpCisJCW9wdGlvbnMgfD0gQklUXzY7CisKIAlyc3AtPm9wdGlvbnMgPSBvcHRpb25zOwogCXJzcC0+aWQgPSBxdWVfaWQ7CiAJcmVnID0gSVNQX1FVRV9SRUcoaGEsIHF1ZV9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDQxNjY5MzUuLjJmODczZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC03OCwyMSArNzgsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhxbDJ4bWF4cWRlcHRoLAogCQkiTWF4aW11bSBxdWV1ZSBkZXB0aCB0byByZXBvcnQgZm9yIHRhcmdldCBkZXZpY2VzLiIpOwogCi1pbnQgcWwyeHFmdWxsdHJhY2tpbmcgPSAxOwotbW9kdWxlX3BhcmFtKHFsMnhxZnVsbHRyYWNraW5nLCBpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHFsMnhxZnVsbHRyYWNraW5nLAotCQkiQ29udHJvbHMgd2hldGhlciB0aGUgZHJpdmVyIHRyYWNrcyBxdWV1ZSBmdWxsIHN0YXR1cyAiCi0JCSJyZXR1cm5zIGFuZCBkeW5hbWljYWxseSBhZGp1c3RzIGEgc2NzaSBkZXZpY2UncyBxdWV1ZSAiCi0JCSJkZXB0aC4gIERlZmF1bHQgaXMgMSwgcGVyZm9ybSB0cmFja2luZy4gIFNldCB0byAwIHRvICIKLQkJImRpc2FibGUgZHluYW1pYyB0cmFja2luZyBhbmQgYWRqdXN0bWVudCBvZiBxdWV1ZSBkZXB0aC4iKTsKLQotaW50IHFsMnhxZnVsbHJhbXB1cCA9IDEyMDsKLW1vZHVsZV9wYXJhbShxbDJ4cWZ1bGxyYW1wdXAsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MocWwyeHFmdWxscmFtcHVwLAotCQkiTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCB0byBiZWdpbiB0byByYW1wLXVwIHRoZSBxdWV1ZSAiCi0JCSJkZXB0aCBmb3IgYSBkZXZpY2UgYWZ0ZXIgYSBxdWV1ZS1mdWxsIGNvbmRpdGlvbiBoYXMgYmVlbiAiCi0JCSJkZXRlY3RlZC4gIERlZmF1bHQgaXMgMTIwIHNlY29uZHMuIik7Ci0KIGludCBxbDJ4aWlkbWFlbmFibGU9MTsKIG1vZHVsZV9wYXJhbShxbDJ4aWlkbWFlbmFibGUsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGlpZG1hZW5hYmxlLApAQCAtMTIxNywxMyArMTIwMiw2MSBAQAogCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgcWxhMngwMF9oYW5kbGVfcXVldWVfZnVsbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCit7CisJZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgc2Rldi0+aG9zdGRhdGE7CisKKwlpZiAoIXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpKQorCQlyZXR1cm47CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGZjcG9ydC0+dmhhLT5odywKKwkJInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZC5cbiIsCisJCWZjcG9ydC0+dmhhLT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuLAorCQlzZGV2LT5xdWV1ZV9kZXB0aCkpOworfQorCitzdGF0aWMgdm9pZCBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCit7CisJZmNfcG9ydF90ICpmY3BvcnQgPSBzZGV2LT5ob3N0ZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gZmNwb3J0LT52aGE7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJc3RydWN0IHJlcV9xdWUgKnJlcSA9IE5VTEw7CisKKwlyZXEgPSB2aGEtPnJlcTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJaWYgKHJlcS0+bWF4X3FfZGVwdGggPD0gc2Rldi0+cXVldWVfZGVwdGggfHwgcmVxLT5tYXhfcV9kZXB0aCA8IHFkZXB0aCkKKwkJcmV0dXJuOworCisJaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKKwkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX09SREVSRURfVEFHLCBxZGVwdGgpOworCWVsc2UKKwkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX1NJTVBMRV9UQUcsIHFkZXB0aCk7CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCSAgICAgICAic2NzaSglbGQ6JWQ6JWQ6JWQpOiBRdWV1ZSBkZXB0aCBhZGp1c3RlZC11cCB0byAlZC5cbiIsCisJICAgICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuLAorCSAgICAgICBzZGV2LT5xdWV1ZV9kZXB0aCkpOworfQorCiBzdGF0aWMgaW50CiBxbGEyeDAwX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgsIGludCByZWFzb24pCiB7Ci0JaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJc3dpdGNoIChyZWFzb24pIHsKKwljYXNlIFNDU0lfUURFUFRIX0RFRkFVTFQ6CisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworCQlicmVhazsKKwljYXNlIFNDU0lfUURFUFRIX1FGVUxMOgorCQlxbGEyeDAwX2hhbmRsZV9xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7CisJCWJyZWFrOworCWNhc2UgU0NTSV9RREVQVEhfUkFNUF9VUDoKKwkJcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfdXAoc2RldiwgcWRlcHRoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVPUE5PVFNVUFA7CisJfQogCi0Jc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2RldiksIHFkZXB0aCk7CiAJcmV0dXJuIHNkZXYtPnF1ZXVlX2RlcHRoOwogfQogCkBAIC0yMDAzLDEzICsyMDM2LDEzIEBACiAJREVCVUcyKHByaW50aygiREVCVUc6IGRldGVjdCBoYmEgJWxkIGF0IGFkZHJlc3MgPSAlcFxuIiwKIAkgICAgYmFzZV92aGEtPmhvc3Rfbm8sIGhhKSk7CiAKLQliYXNlX3ZoYS0+ZmxhZ3MuaW5pdF9kb25lID0gMTsKLQliYXNlX3ZoYS0+ZmxhZ3Mub25saW5lID0gMTsKLQogCXJldCA9IHNjc2lfYWRkX2hvc3QoaG9zdCwgJnBkZXYtPmRldik7CiAJaWYgKHJldCkKIAkJZ290byBwcm9iZV9mYWlsZWQ7CiAKKwliYXNlX3ZoYS0+ZmxhZ3MuaW5pdF9kb25lID0gMTsKKwliYXNlX3ZoYS0+ZmxhZ3Mub25saW5lID0gMTsKKwogCWhhLT5pc3Bfb3BzLT5lbmFibGVfaW50cnMoaGEpOwogCiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCA4MDdlMGRiLi5jNDgyMjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMS1rNyIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDEtazgiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGU0OTVkMzguLmQ4OTI3NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC04NTksNiArODU5LDcgQEAKIAkJCQljYXNlIDB4MDc6IC8qIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyAqLwogCQkJCWNhc2UgMHgwODogLyogTG9uZyB3cml0ZSBpbiBwcm9ncmVzcyAqLwogCQkJCWNhc2UgMHgwOTogLyogc2VsZiB0ZXN0IGluIHByb2dyZXNzICovCisJCQkJY2FzZSAweDE0OiAvKiBzcGFjZSBhbGxvY2F0aW9uIGluIHByb2dyZXNzICovCiAJCQkJCWFjdGlvbiA9IEFDVElPTl9ERUxBWUVEX1JFVFJZOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCA2NTMxYzkxLi5kZGZjZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtNjQ5LDExICs2NDksMjIgQEAKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZmY192cG9ydF9jbGFzcyk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gdW5yZWdfaG9zdF9jbGFzczsKIAllcnJvciA9IHRyYW5zcG9ydF9jbGFzc19yZWdpc3RlcigmZmNfcnBvcnRfY2xhc3MpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCXJldHVybiB0cmFuc3BvcnRfY2xhc3NfcmVnaXN0ZXIoJmZjX3RyYW5zcG9ydF9jbGFzcyk7CisJCWdvdG8gdW5yZWdfdnBvcnRfY2xhc3M7CisJZXJyb3IgPSB0cmFuc3BvcnRfY2xhc3NfcmVnaXN0ZXIoJmZjX3RyYW5zcG9ydF9jbGFzcyk7CisJaWYgKGVycm9yKQorCQlnb3RvIHVucmVnX3Jwb3J0X2NsYXNzOworCXJldHVybiAwOworCit1bnJlZ19ycG9ydF9jbGFzczoKKwl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3RlcigmZmNfcnBvcnRfY2xhc3MpOwordW5yZWdfdnBvcnRfY2xhc3M6CisJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJmZjX3Zwb3J0X2NsYXNzKTsKK3VucmVnX2hvc3RfY2xhc3M6CisJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJmZjX2hvc3RfY2xhc3MpOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZjX3RyYW5zcG9ydF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDkwOTNjNzIuLjI1NWRhNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0yNjQsNiArMjY0LDE1IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIldVxuIiwgc2RrcC0+QVRPKTsKIH0KIAorc3RhdGljIHNzaXplX3QKK3NkX3Nob3dfdGhpbl9wcm92aXNpb25pbmcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soZGV2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXVcbiIsIHNka3AtPnRoaW5fcHJvdmlzaW9uaW5nKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHNkX2Rpc2tfYXR0cnNbXSA9IHsKIAlfX0FUVFIoY2FjaGVfdHlwZSwgU19JUlVHT3xTX0lXVVNSLCBzZF9zaG93X2NhY2hlX3R5cGUsCiAJICAgICAgIHNkX3N0b3JlX2NhY2hlX3R5cGUpLApAQCAtMjc0LDYgKzI4Myw3IEBACiAJICAgICAgIHNkX3N0b3JlX21hbmFnZV9zdGFydF9zdG9wKSwKIAlfX0FUVFIocHJvdGVjdGlvbl90eXBlLCBTX0lSVUdPLCBzZF9zaG93X3Byb3RlY3Rpb25fdHlwZSwgTlVMTCksCiAJX19BVFRSKGFwcF90YWdfb3duLCBTX0lSVUdPLCBzZF9zaG93X2FwcF90YWdfb3duLCBOVUxMKSwKKwlfX0FUVFIodGhpbl9wcm92aXNpb25pbmcsIFNfSVJVR08sIHNkX3Nob3dfdGhpbl9wcm92aXNpb25pbmcsIE5VTEwpLAogCV9fQVRUUl9OVUxMLAogfTsKIApAQCAtMzk5LDYgKzQwOSw1NyBAQAogfQogCiAvKioKKyAqIHNkX3ByZXBhcmVfZGlzY2FyZCAtIHVubWFwIGJsb2NrcyBvbiB0aGlubHkgcHJvdmlzaW9uZWQgZGV2aWNlCisgKiBAcnE6IFJlcXVlc3QgdG8gcHJlcGFyZQorICoKKyAqIFdpbGwgaXNzdWUgZWl0aGVyIFVOTUFQIG9yIFdSSVRFIFNBTUUoMTYpIGRlcGVuZGluZyBvbiBwcmVmZXJlbmNlCisgKiBpbmRpY2F0ZWQgYnkgdGFyZ2V0IGRldmljZS4KKyAqKi8KK3N0YXRpYyBpbnQgc2RfcHJlcGFyZV9kaXNjYXJkKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gc2NzaV9kaXNrKHJxLT5ycV9kaXNrKTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBycS0+YmlvOworCXNlY3Rvcl90IHNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOworCXVuc2lnbmVkIGludCBudW0gPSBiaW9fc2VjdG9ycyhiaW8pOworCisJaWYgKHNka3AtPmRldmljZS0+c2VjdG9yX3NpemUgPT0gNDA5NikgeworCQlzZWN0b3IgPj49IDM7CisJCW51bSA+Pj0gMzsKKwl9CisKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKKwlycS0+dGltZW91dCA9IFNEX1RJTUVPVVQ7CisKKwltZW1zZXQocnEtPmNtZCwgMCwgcnEtPmNtZF9sZW4pOworCisJaWYgKHNka3AtPnVubWFwKSB7CisJCWNoYXIgKmJ1ZiA9IGttYXBfYXRvbWljKGJpb19wYWdlKGJpbyksIEtNX1VTRVIwKTsKKworCQlycS0+Y21kWzBdID0gVU5NQVA7CisJCXJxLT5jbWRbOF0gPSAyNDsKKwkJcnEtPmNtZF9sZW4gPSAxMDsKKworCQkvKiBFbnN1cmUgdGhhdCBkYXRhIGxlbmd0aCBtYXRjaGVzIHBheWxvYWQgKi8KKwkJcnEtPl9fZGF0YV9sZW4gPSBiaW8tPmJpX3NpemUgPSBiaW8tPmJpX2lvX3ZlYy0+YnZfbGVuID0gMjQ7CisKKwkJcHV0X3VuYWxpZ25lZF9iZTE2KDYgKyAxNiwgJmJ1ZlswXSk7CisJCXB1dF91bmFsaWduZWRfYmUxNigxNiwgJmJ1ZlsyXSk7CisJCXB1dF91bmFsaWduZWRfYmU2NChzZWN0b3IsICZidWZbOF0pOworCQlwdXRfdW5hbGlnbmVkX2JlMzIobnVtLCAmYnVmWzE2XSk7CisKKwkJa3VubWFwX2F0b21pYyhidWYsIEtNX1VTRVIwKTsKKwl9IGVsc2UgeworCQlycS0+Y21kWzBdID0gV1JJVEVfU0FNRV8xNjsKKwkJcnEtPmNtZFsxXSA9IDB4ODsgLyogVU5NQVAgKi8KKwkJcHV0X3VuYWxpZ25lZF9iZTY0KHNlY3RvciwgJnJxLT5jbWRbMl0pOworCQlwdXRfdW5hbGlnbmVkX2JlMzIobnVtLCAmcnEtPmNtZFsxMF0pOworCQlycS0+Y21kX2xlbiA9IDE2OworCX0KKworCXJldHVybiBCTEtQUkVQX09LOworfQorCisvKioKICAqCXNkX2luaXRfY29tbWFuZCAtIGJ1aWxkIGEgc2NzaSAocmVhZCBvciB3cml0ZSkgY29tbWFuZCBmcm9tCiAgKglpbmZvcm1hdGlvbiBpbiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUuCiAgKglAU0NwbnQ6IHBvaW50ZXIgdG8gbWlkLWxldmVsJ3MgcGVyIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgdGhhdApAQCAtNDE4LDYgKzQ3OSwxMyBAQAogCWludCByZXQsIGhvc3RfZGlmOwogCXVuc2lnbmVkIGNoYXIgcHJvdGVjdDsKIAorCS8qCisJICogRGlzY2FyZCByZXF1ZXN0IGNvbWUgaW4gYXMgUkVRX1RZUEVfRlMgYnV0IHdlIHR1cm4gdGhlbSBpbnRvCisJICogYmxvY2sgUEMgcmVxdWVzdHMgdG8gbWFrZSBsaWZlIGVhc2llci4KKwkgKi8KKwlpZiAoYmxrX2Rpc2NhcmRfcnEocnEpKQorCQlyZXQgPSBzZF9wcmVwYXJlX2Rpc2NhcmQocnEpOworCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewogCQlyZXQgPSBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHNkcCwgcnEpOwogCQlnb3RvIG91dDsKQEAgLTE0MzIsNiArMTUwMCwxOSBAQAogCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCiAJCQkgICJwaHlzaWNhbCBibG9jayBhbGlnbm1lbnQgb2Zmc2V0OiAldVxuIiwgYWxpZ25tZW50KTsKIAorCWlmIChidWZmZXJbMTRdICYgMHg4MCkgeyAvKiBUUEUgKi8KKwkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZHAtPnJlcXVlc3RfcXVldWU7CisKKwkJc2RrcC0+dGhpbl9wcm92aXNpb25pbmcgPSAxOworCQlxLT5saW1pdHMuZGlzY2FyZF9ncmFudWxhcml0eSA9IHNka3AtPmh3X3NlY3Rvcl9zaXplOworCQlxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycyA9IDB4ZmZmZmZmZmY7CisKKwkJaWYgKGJ1ZmZlclsxNF0gJiAweDQwKSAvKiBUUFJaICovCisJCQlxLT5saW1pdHMuZGlzY2FyZF96ZXJvZXNfZGF0YSA9IDE7CisKKwkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19ESVNDQVJELCBxKTsKKwl9CisKIAlzZGtwLT5jYXBhY2l0eSA9IGxiYSArIDE7CiAJcmV0dXJuIHNlY3Rvcl9zaXplOwogfQpAQCAtMTg2Myw2ICsxOTQ0LDcgQEAKICAqLwogc3RhdGljIHZvaWQgc2RfcmVhZF9ibG9ja19saW1pdHMoc3RydWN0IHNjc2lfZGlzayAqc2RrcCkKIHsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNka3AtPmRpc2stPnF1ZXVlOwogCXVuc2lnbmVkIGludCBzZWN0b3Jfc3ogPSBzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwogCWNoYXIgKmJ1ZmZlcjsKIApAQCAtMTg3Nyw2ICsxOTU5LDMxIEBACiAJYmxrX3F1ZXVlX2lvX29wdChzZGtwLT5kaXNrLT5xdWV1ZSwKIAkJCSBnZXRfdW5hbGlnbmVkX2JlMzIoJmJ1ZmZlclsxMl0pICogc2VjdG9yX3N6KTsKIAorCS8qIFRoaW4gcHJvdmlzaW9uaW5nIGVuYWJsZWQgYW5kIHBhZ2UgbGVuZ3RoIGluZGljYXRlcyBUUCBzdXBwb3J0ICovCisJaWYgKHNka3AtPnRoaW5fcHJvdmlzaW9uaW5nICYmIGJ1ZmZlclszXSA9PSAweDNjKSB7CisJCXVuc2lnbmVkIGludCBsYmFfY291bnQsIGRlc2NfY291bnQsIGdyYW51bGFyaXR5OworCisJCWxiYV9jb3VudCA9IGdldF91bmFsaWduZWRfYmUzMigmYnVmZmVyWzIwXSk7CisJCWRlc2NfY291bnQgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmJ1ZmZlclsyNF0pOworCisJCWlmIChsYmFfY291bnQpIHsKKwkJCXEtPmxpbWl0cy5tYXhfZGlzY2FyZF9zZWN0b3JzID0KKwkJCQlsYmFfY291bnQgKiBzZWN0b3Jfc3ogPj4gOTsKKworCQkJaWYgKGRlc2NfY291bnQpCisJCQkJc2RrcC0+dW5tYXAgPSAxOworCQl9CisKKwkJZ3JhbnVsYXJpdHkgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmJ1ZmZlclsyOF0pOworCisJCWlmIChncmFudWxhcml0eSkKKwkJCXEtPmxpbWl0cy5kaXNjYXJkX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHkgKiBzZWN0b3Jfc3o7CisKKwkJaWYgKGJ1ZmZlclszMl0gJiAweDgwKQorCQkJcS0+bGltaXRzLmRpc2NhcmRfYWxpZ25tZW50ID0KKwkJCQlnZXRfdW5hbGlnbmVkX2JlMzIoJmJ1ZmZlclszMl0pICYgfigxIDw8IDMxKTsKKwl9CisKIAlrZnJlZShidWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IGUzNzQ4MDQuLjQzZDNjYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC02MCw2ICs2MCw4IEBACiAJdW5zaWduZWQJUkNEIDogMTsJLyogc3RhdGUgb2YgZGlzayBSQ0QgYml0LCB1bnVzZWQgKi8KIAl1bnNpZ25lZAlEUE9GVUEgOiAxOwkvKiBzdGF0ZSBvZiBkaXNrIERQT0ZVQSBiaXQgKi8KIAl1bnNpZ25lZAlmaXJzdF9zY2FuIDogMTsKKwl1bnNpZ25lZAl0aGluX3Byb3Zpc2lvbmluZyA6IDE7CisJdW5zaWduZWQJdW5tYXAgOiAxOwogfTsKICNkZWZpbmUgdG9fc2NzaV9kaXNrKG9iaikgY29udGFpbmVyX29mKG9iaixzdHJ1Y3Qgc2NzaV9kaXNrLGRldikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmMgYi9kcml2ZXJzL3Njc2kvc3QuYwppbmRleCBhZDU5YWJiLi5kMDRlYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvc3QuYwpAQCAtNTUyLDEzICs1NTIsMTUgQEAKIAlTUnBudC0+d2FpdGluZyA9IHdhaXRpbmc7CiAKIAlpZiAoU1RwLT5idWZmZXItPmRvX2RpbykgeworCQltZGF0YS0+cGFnZV9vcmRlciA9IDA7CiAJCW1kYXRhLT5ucl9lbnRyaWVzID0gU1RwLT5idWZmZXItPnNnX3NlZ3M7CiAJCW1kYXRhLT5wYWdlcyA9IFNUcC0+YnVmZmVyLT5tYXBwZWRfcGFnZXM7CiAJfSBlbHNlIHsKKwkJbWRhdGEtPnBhZ2Vfb3JkZXIgPSBTVHAtPmJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZV9vcmRlcjsKIAkJbWRhdGEtPm5yX2VudHJpZXMgPQogCQkJRElWX1JPVU5EX1VQKGJ5dGVzLCBQQUdFX1NJWkUgPDwgbWRhdGEtPnBhZ2Vfb3JkZXIpOwotCQlTVHAtPmJ1ZmZlci0+bWFwX2RhdGEucGFnZXMgPSBTVHAtPmJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZXM7Ci0JCVNUcC0+YnVmZmVyLT5tYXBfZGF0YS5vZmZzZXQgPSAwOworCQltZGF0YS0+cGFnZXMgPSBTVHAtPmJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZXM7CisJCW1kYXRhLT5vZmZzZXQgPSAwOwogCX0KIAogCW1lbWNweShTUnBudC0+Y21kLCBjbWQsIHNpemVvZihTUnBudC0+Y21kKSk7CkBAIC0zNzE5LDcgKzM3MjEsNyBAQAogCQlwcmlvcml0eSB8PSBfX0dGUF9aRVJPOwogCiAJaWYgKFNUYnVmZmVyLT5mcnBfc2VncykgewotCQlvcmRlciA9IFNUYnVmZmVyLT5tYXBfZGF0YS5wYWdlX29yZGVyOworCQlvcmRlciA9IFNUYnVmZmVyLT5yZXNlcnZlZF9wYWdlX29yZGVyOwogCQliX3NpemUgPSBQQUdFX1NJWkUgPDwgb3JkZXI7CiAJfSBlbHNlIHsKIAkJZm9yIChiX3NpemUgPSBQQUdFX1NJWkUsIG9yZGVyID0gMDsKQEAgLTM3NTIsNyArMzc1NCw3IEBACiAJCXNlZ3MrKzsKIAl9CiAJU1RidWZmZXItPmJfZGF0YSA9IHBhZ2VfYWRkcmVzcyhTVGJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZXNbMF0pOwotCVNUYnVmZmVyLT5tYXBfZGF0YS5wYWdlX29yZGVyID0gb3JkZXI7CisJU1RidWZmZXItPnJlc2VydmVkX3BhZ2Vfb3JkZXIgPSBvcmRlcjsKIAogCXJldHVybiAxOwogfQpAQCAtMzc2NSw3ICszNzY3LDcgQEAKIAogCWZvciAoaT0wOyBpIDwgc3RfYnAtPmZycF9zZWdzOyBpKyspCiAJCW1lbXNldChwYWdlX2FkZHJlc3Moc3RfYnAtPnJlc2VydmVkX3BhZ2VzW2ldKSwgMCwKLQkJICAgICAgIFBBR0VfU0laRSA8PCBzdF9icC0+bWFwX2RhdGEucGFnZV9vcmRlcik7CisJCSAgICAgICBQQUdFX1NJWkUgPDwgc3RfYnAtPnJlc2VydmVkX3BhZ2Vfb3JkZXIpOwogCXN0X2JwLT5jbGVhcmVkID0gMTsKIH0KIApAQCAtMzc3Myw3ICszNzc1LDcgQEAKIC8qIFJlbGVhc2UgdGhlIGV4dHJhIGJ1ZmZlciAqLwogc3RhdGljIHZvaWQgbm9ybWFsaXplX2J1ZmZlcihzdHJ1Y3Qgc3RfYnVmZmVyICogU1RidWZmZXIpCiB7Ci0JaW50IGksIG9yZGVyID0gU1RidWZmZXItPm1hcF9kYXRhLnBhZ2Vfb3JkZXI7CisJaW50IGksIG9yZGVyID0gU1RidWZmZXItPnJlc2VydmVkX3BhZ2Vfb3JkZXI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1RidWZmZXItPmZycF9zZWdzOyBpKyspIHsKIAkJX19mcmVlX3BhZ2VzKFNUYnVmZmVyLT5yZXNlcnZlZF9wYWdlc1tpXSwgb3JkZXIpOwpAQCAtMzc4MSw3ICszNzgzLDcgQEAKIAl9CiAJU1RidWZmZXItPmZycF9zZWdzID0gMDsKIAlTVGJ1ZmZlci0+c2dfc2VncyA9IDA7Ci0JU1RidWZmZXItPm1hcF9kYXRhLnBhZ2Vfb3JkZXIgPSAwOworCVNUYnVmZmVyLT5yZXNlcnZlZF9wYWdlX29yZGVyID0gMDsKIAlTVGJ1ZmZlci0+bWFwX2RhdGEub2Zmc2V0ID0gMDsKIH0KIApAQCAtMzc5MSw3ICszNzkzLDcgQEAKIHN0YXRpYyBpbnQgYXBwZW5kX3RvX2J1ZmZlcihjb25zdCBjaGFyIF9fdXNlciAqdWJwLCBzdHJ1Y3Qgc3RfYnVmZmVyICogc3RfYnAsIGludCBkb19jb3VudCkKIHsKIAlpbnQgaSwgY250LCByZXMsIG9mZnNldDsKLQlpbnQgbGVuZ3RoID0gUEFHRV9TSVpFIDw8IHN0X2JwLT5tYXBfZGF0YS5wYWdlX29yZGVyOworCWludCBsZW5ndGggPSBQQUdFX1NJWkUgPDwgc3RfYnAtPnJlc2VydmVkX3BhZ2Vfb3JkZXI7CiAKIAlmb3IgKGkgPSAwLCBvZmZzZXQgPSBzdF9icC0+YnVmZmVyX2J5dGVzOwogCSAgICAgaSA8IHN0X2JwLT5mcnBfc2VncyAmJiBvZmZzZXQgPj0gbGVuZ3RoOyBpKyspCkBAIC0zODIzLDcgKzM4MjUsNyBAQAogc3RhdGljIGludCBmcm9tX2J1ZmZlcihzdHJ1Y3Qgc3RfYnVmZmVyICogc3RfYnAsIGNoYXIgX191c2VyICp1YnAsIGludCBkb19jb3VudCkKIHsKIAlpbnQgaSwgY250LCByZXMsIG9mZnNldDsKLQlpbnQgbGVuZ3RoID0gUEFHRV9TSVpFIDw8IHN0X2JwLT5tYXBfZGF0YS5wYWdlX29yZGVyOworCWludCBsZW5ndGggPSBQQUdFX1NJWkUgPDwgc3RfYnAtPnJlc2VydmVkX3BhZ2Vfb3JkZXI7CiAKIAlmb3IgKGkgPSAwLCBvZmZzZXQgPSBzdF9icC0+cmVhZF9wb2ludGVyOwogCSAgICAgaSA8IHN0X2JwLT5mcnBfc2VncyAmJiBvZmZzZXQgPj0gbGVuZ3RoOyBpKyspCkBAIC0zODU2LDcgKzM4NTgsNyBAQAogewogCWludCBzcmNfc2VnLCBkc3Rfc2VnLCBzcmNfb2Zmc2V0ID0gMCwgZHN0X29mZnNldDsKIAlpbnQgY291bnQsIHRvdGFsOwotCWludCBsZW5ndGggPSBQQUdFX1NJWkUgPDwgc3RfYnAtPm1hcF9kYXRhLnBhZ2Vfb3JkZXI7CisJaW50IGxlbmd0aCA9IFBBR0VfU0laRSA8PCBzdF9icC0+cmVzZXJ2ZWRfcGFnZV9vcmRlcjsKIAogCWlmIChvZmZzZXQgPT0gMCkKIAkJcmV0dXJuOwpAQCAtNDU3OCw3ICs0NTgwLDYgQEAKICAgICAgICAgfQogCiAJbWRhdGEtPm9mZnNldCA9IHVhZGRyICYgflBBR0VfTUFTSzsKLQltZGF0YS0+cGFnZV9vcmRlciA9IDA7CiAJU1RicC0+bWFwcGVkX3BhZ2VzID0gcGFnZXM7CiAKIAlyZXR1cm4gbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuaCBiL2RyaXZlcnMvc2NzaS9zdC5oCmluZGV4IDU0NGRjNmIuLmY5MWE2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5oCkBAIC00Niw2ICs0Niw3IEBACiAJc3RydWN0IHN0X3JlcXVlc3QgKmxhc3RfU1JwbnQ7CiAJc3RydWN0IHN0X2NtZHN0YXR1cyBjbWRzdGF0OwogCXN0cnVjdCBwYWdlICoqcmVzZXJ2ZWRfcGFnZXM7CisJaW50IHJlc2VydmVkX3BhZ2Vfb3JkZXI7CiAJc3RydWN0IHBhZ2UgKiptYXBwZWRfcGFnZXM7CiAJc3RydWN0IHJxX21hcF9kYXRhIG1hcF9kYXRhOwogCXVuc2lnbmVkIGNoYXIgKmJfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKaW5kZXggMmIzOGY2YS4uOGI5NTViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMKQEAgLTk4NCw3ICs5ODQsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBza2lwX3NwYWNlcyhjaGFyICpwdHIsIGludCBsZW4pCitzdGF0aWMgaW50IHN5bV9za2lwX3NwYWNlcyhjaGFyICpwdHIsIGludCBsZW4pCiB7CiAJaW50IGNudCwgYzsKIApAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIH0KIAogI2RlZmluZSBTS0lQX1NQQUNFUyhwdHIsIGxlbikJCQkJCQlcCi0JaWYgKChhcmdfbGVuID0gc2tpcF9zcGFjZXMocHRyLCBsZW4pKSA8IDEpCQkJXAorCWlmICgoYXJnX2xlbiA9IHN5bV9za2lwX3NwYWNlcyhwdHIsIGxlbikpIDwgMSkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAlwdHIgKz0gYXJnX2xlbjsgbGVuIC09IGFyZ19sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCmluZGV4IGQ4OTgzZGQuLjg1ZGMwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIC8qKgogICogaW9jM19kZXRlY3QgLSBtb2R1bGUgaW5pdCBjYWxsZWQsCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGlvYzN1YXJ0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlvYzN1YXJ0X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCkBAIC0yMTc5LDcgKzIxNzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpb2MzdWFydF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaW9jM3VhcnRfZXhpdCh2b2lkKQogewogCWlvYzNfdW5yZWdpc3Rlcl9zdWJtb2R1bGUoJmlvYzN1YXJ0X29wcyk7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmaW9jM191YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IDJlMDJjMzAuLjgzNmQ5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwpAQCAtMjkwNCw3ICsyOTA0LDcgQEAKIC8qKgogICogaW9jNF9zZXJpYWxfaW5pdCAtIG1vZHVsZSBpbml0CiAgKi8KLWludCBpb2M0X3NlcmlhbF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpb2M0X3NlcmlhbF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtMjkxMywyMCArMjkxMywzMCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiJXM6IENvdWxkbid0IHJlZ2lzdGVyIHJzMjMyIElPQzQgc2VyaWFsIGRyaXZlclxuIiwKIAkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAJfQogCWlmICgocmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJmlvYzRfdWFydF9yczQyMikpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiJXM6IENvdWxkbid0IHJlZ2lzdGVyIHJzNDIyIElPQzQgc2VyaWFsIGRyaXZlclxuIiwKIAkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfdWFydF9yczIzMjsKIAl9CiAKIAkvKiByZWdpc3RlciB3aXRoIElPQzQgbWFpbiBtb2R1bGUgKi8KLQlyZXR1cm4gaW9jNF9yZWdpc3Rlcl9zdWJtb2R1bGUoJmlvYzRfc2VyaWFsX3N1Ym1vZHVsZSk7CisJcmV0ID0gaW9jNF9yZWdpc3Rlcl9zdWJtb2R1bGUoJmlvYzRfc2VyaWFsX3N1Ym1vZHVsZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdWFydF9yczQyMjsKKwlyZXR1cm4gMDsKKworb3V0X3VhcnRfcnM0MjI6CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmaW9jNF91YXJ0X3JzNDIyKTsKK291dF91YXJ0X3JzMjMyOgorCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmlvYzRfdWFydF9yczIzMik7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGlvYzRfc2VyaWFsX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpb2M0X3NlcmlhbF9leGl0KHZvaWQpCiB7CiAJaW9jNF91bnJlZ2lzdGVyX3N1Ym1vZHVsZSgmaW9jNF9zZXJpYWxfc3VibW9kdWxlKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZpb2M0X3VhcnRfcnMyMzIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCA0YTgyMTA0Li41NmVlMDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNzU2LDcgKzc1Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2VyaWFsX3B4YV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2VyaWFsX3B4YV9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBzZXJpYWxfcHhhX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzZXJpYWxfcHhhX3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IGZmMzhkYmQuLjY4YzdmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMDQzLDEwICsxMDQzLDE0IEBACiAJc2NpX3BvcnQtPnBvcnQuaW90eXBlCT0gVVBJT19NRU07CiAJc2NpX3BvcnQtPnBvcnQubGluZQk9IGluZGV4OwogCXNjaV9wb3J0LT5wb3J0LmZpZm9zaXplCT0gMTsKLQlzY2lfcG9ydC0+aWNsawkJPSBwLT5jbGsgPyBjbGtfZ2V0KCZkZXYtPmRldiwgcC0+Y2xrKSA6IE5VTEw7Ci0Jc2NpX3BvcnQtPmRjbGsJCT0gY2xrX2dldCgmZGV2LT5kZXYsICJwZXJpcGhlcmFsX2NsayIpOwotCXNjaV9wb3J0LT5lbmFibGUJPSBzY2lfY2xrX2VuYWJsZTsKLQlzY2lfcG9ydC0+ZGlzYWJsZQk9IHNjaV9jbGtfZGlzYWJsZTsKKworCWlmIChkZXYpIHsKKwkJc2NpX3BvcnQtPmljbGsgPSBwLT5jbGsgPyBjbGtfZ2V0KCZkZXYtPmRldiwgcC0+Y2xrKSA6IE5VTEw7CisJCXNjaV9wb3J0LT5kY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJwZXJpcGhlcmFsX2NsayIpOworCQlzY2lfcG9ydC0+ZW5hYmxlID0gc2NpX2Nsa19lbmFibGU7CisJCXNjaV9wb3J0LT5kaXNhYmxlID0gc2NpX2Nsa19kaXNhYmxlOworCQlzY2lfcG9ydC0+cG9ydC5kZXYgPSAmZGV2LT5kZXY7CisJfQogCiAJc2NpX3BvcnQtPmJyZWFrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzY2lfcG9ydDsKIAlzY2lfcG9ydC0+YnJlYWtfdGltZXIuZnVuY3Rpb24gPSBzY2lfYnJlYWtfdGltZXI7CkBAIC0xMDU3LDcgKzEwNjEsNiBAQAogCiAJc2NpX3BvcnQtPnBvcnQuaXJxCT0gcC0+aXJxc1tTQ0l4X1RYSV9JUlFdOwogCXNjaV9wb3J0LT5wb3J0LmZsYWdzCT0gcC0+ZmxhZ3M7Ci0Jc2NpX3BvcnQtPnBvcnQuZGV2CT0gJmRldi0+ZGV2OwogCXNjaV9wb3J0LT50eXBlCQk9IHNjaV9wb3J0LT5wb3J0LnR5cGUgPSBwLT50eXBlOwogCiAJbWVtY3B5KCZzY2lfcG9ydC0+aXJxcywgJnAtPmlycXMsIHNpemVvZihwLT5pcnFzKSk7CkBAIC0xMTAxLDcgKzExMDQsNyBAQAogCQlzY2lfcG9ydC0+ZGlzYWJsZShwb3J0KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc2VyaWFsX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQorc3RhdGljIGludCBfX2RldmluaXQgc2VyaWFsX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQogewogCXN0cnVjdCBzY2lfcG9ydCAqc2NpX3BvcnQ7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKQEAgLTExMTksOSArMTEyMiwxNCBAQAogCWlmIChjby0+aW5kZXggPj0gU0NJX05QT1JUUykKIAkJY28tPmluZGV4ID0gMDsKIAotCXNjaV9wb3J0ID0gJnNjaV9wb3J0c1tjby0+aW5kZXhdOwotCXBvcnQgPSAmc2NpX3BvcnQtPnBvcnQ7Ci0JY28tPmRhdGEgPSBwb3J0OworCWlmIChjby0+ZGF0YSkgeworCQlwb3J0ID0gY28tPmRhdGE7CisJCXNjaV9wb3J0ID0gdG9fc2NpX3BvcnQocG9ydCk7CisJfSBlbHNlIHsKKwkJc2NpX3BvcnQgPSAmc2NpX3BvcnRzW2NvLT5pbmRleF07CisJCXBvcnQgPSAmc2NpX3BvcnQtPnBvcnQ7CisJCWNvLT5kYXRhID0gcG9ydDsKKwl9CiAKIAkvKgogCSAqIEFsc28gbmVlZCB0byBjaGVjayBwb3J0LT50eXBlLCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGFueQpAQCAtMTE2NSw2ICsxMTczLDE1IEBACiAJcmV0dXJuIDA7CiB9CiBjb25zb2xlX2luaXRjYWxsKHNjaV9jb25zb2xlX2luaXQpOworCitzdGF0aWMgc3RydWN0IHNjaV9wb3J0IGVhcmx5X3NlcmlhbF9wb3J0Oworc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X3NlcmlhbF9jb25zb2xlID0geworCS5uYW1lICAgICAgICAgICA9ICJlYXJseV90dHlTQyIsCisJLndyaXRlICAgICAgICAgID0gc2VyaWFsX2NvbnNvbGVfd3JpdGUsCisJLmZsYWdzICAgICAgICAgID0gQ09OX1BSSU5UQlVGRkVSLAorfTsKK3N0YXRpYyBjaGFyIGVhcmx5X3NlcmlhbF9idWZbMzJdOworCiAjZW5kaWYgLyogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFKQpAQCAtMTI1MCw2ICsxMjY3LDIxIEBACiAJc3RydWN0IHNoX3NjaV9wcml2ICpwcml2OwogCWludCBpLCByZXQgPSAtRUlOVkFMOwogCisjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRQorCWlmIChpc19lYXJseV9wbGF0Zm9ybV9kZXZpY2UoZGV2KSkgeworCQlpZiAoZGV2LT5pZCA9PSAtMSkKKwkJCXJldHVybiAtRU5PVFNVUFA7CisJCWVhcmx5X3NlcmlhbF9jb25zb2xlLmluZGV4ID0gZGV2LT5pZDsKKwkJZWFybHlfc2VyaWFsX2NvbnNvbGUuZGF0YSA9ICZlYXJseV9zZXJpYWxfcG9ydC5wb3J0OworCQlzY2lfaW5pdF9zaW5nbGUoTlVMTCwgJmVhcmx5X3NlcmlhbF9wb3J0LCBkZXYtPmlkLCBwKTsKKwkJc2VyaWFsX2NvbnNvbGVfc2V0dXAoJmVhcmx5X3NlcmlhbF9jb25zb2xlLCBlYXJseV9zZXJpYWxfYnVmKTsKKwkJaWYgKCFzdHJzdHIoZWFybHlfc2VyaWFsX2J1ZiwgImtlZXAiKSkKKwkJCWVhcmx5X3NlcmlhbF9jb25zb2xlLmZsYWdzIHw9IENPTl9CT09UOworCQlyZWdpc3Rlcl9jb25zb2xlKCZlYXJseV9zZXJpYWxfY29uc29sZSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzMTIsNyArMTM0NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzY2lfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzY2lfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IHNjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2NpX3Jlc3VtZSwKIH07CkBAIC0xMzQ5LDYgKzEzODEsMTAgQEAKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzY2lfdWFydF9kcml2ZXIpOwogfQogCisjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRQorZWFybHlfcGxhdGZvcm1faW5pdF9idWZmZXIoImVhcmx5cHJpbnRrIiwgJnNjaV9kcml2ZXIsCisJCQkgICBlYXJseV9zZXJpYWxfYnVmLCBBUlJBWV9TSVpFKGVhcmx5X3NlcmlhbF9idWYpKTsKKyNlbmRpZgogbW9kdWxlX2luaXQoc2NpX2luaXQpOwogbW9kdWxlX2V4aXQoc2NpX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCmluZGV4IGE3ZTVjMmUuLmQ1ZDdmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvaW50Yy5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy5jCkBAIC04MDYsNiArODA2LDggQEAKIAkJaWYgKGQtPnN0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX0ZSRUVaRSkKIAkJCWJyZWFrOwogCQlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJCWlmIChkZXNjLT5oYW5kbGVfaXJxID09IGludGNfcmVkaXJlY3RfaXJxKQorCQkJCWNvbnRpbnVlOwogCQkJaWYgKGRlc2MtPmNoaXAgIT0gJmQtPmNoaXApCiAJCQkJY29udGludWU7CiAJCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9wZmMuYyBiL2RyaXZlcnMvc2gvcGZjLmMKaW5kZXggODQxZWQ1MC4uMDgyNjA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9wZmMuYworKysgYi9kcml2ZXJzL3NoL3BmYy5jCkBAIC03MSw3ICs3MSw3IEBACiAKIAlwb3MgPSBkci0+cmVnX3dpZHRoIC0gKGluX3BvcyArIDEpOwogCi0JcHJfZGVidWcoIndyaXRlX2JpdCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJcHJfZGVidWcoIndyaXRlX2JpdCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVkLCBwb3MgPSAlbGQsICIKIAkJICJyX3dpZHRoID0gJWxkXG4iLAogCQkgZHItPnJlZywgISF2YWx1ZSwgcG9zLCBkci0+cmVnX3dpZHRoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbi9pb2MzLmMgYi9kcml2ZXJzL3NuL2lvYzMuYwppbmRleCA4MTZkNGM1Li42NjgwMmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NuL2lvYzMuYworKysgYi9kcml2ZXJzL3NuL2lvYzMuYwpAQCAtNTc0LDExICs1NzQsMTEgQEAKICAqIERldmljZSBtYW5hZ2VtZW50ICoKICAqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBjaGFyICoKK3N0YXRpYyBjaGFyICogX19kZXZpbml0ZGF0YQogaW9jM19jbGFzc19uYW1lc1tdPXsidW5rbm93biIsICJJUDI3IEJhc2VJTyIsICJJUDMwIHN5c3RlbSIsICJNRU5FVCAxLzIvMyIsCiAJCQkiTUVORVQgNCIsICJDQURkdW8iLCAiQWx0aXggU2VyaWFsIn07CiAKLXN0YXRpYyBpbnQgaW9jM19jbGFzcyhzdHJ1Y3QgaW9jM19kcml2ZXJfZGF0YSAqaWRkKQorc3RhdGljIGludCBfX2RldmluaXQgaW9jM19jbGFzcyhzdHJ1Y3QgaW9jM19kcml2ZXJfZGF0YSAqaWRkKQogewogCWludCByZXMgPSBJT0MzX0NMQVNTX05PTkU7CiAJLyogTklDLWJhc2VkIGxvZ2ljICovCkBAIC02MDEsNyArNjAxLDggQEAKIAlyZXR1cm4gcmVzOwogfQogLyogQWRkcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBJT0MzIGNhcmQgKi8KLXN0YXRpYyBpbnQgaW9jM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0Citpb2MzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewogCXN0cnVjdCBpb2MzX2RyaXZlcl9kYXRhICppZGQ7CiAJdWludDMyX3QgcGNtZDsKQEAgLTc1Myw3ICs3NTQsNyBAQAogfQogCiAvKiBSZW1vdmVzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhbiBJT0MzIGNhcmQuICovCi1zdGF0aWMgdm9pZCBpb2MzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpb2MzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpbnQgaWQ7CiAJc3RydWN0IGlvYzNfZHJpdmVyX2RhdGEgKmlkZDsKQEAgLTgwNSw3ICs4MDYsNyBAQAogCS5uYW1lID0gIklPQzMiLAogCS5pZF90YWJsZSA9IGlvYzNfaWRfdGFibGUsCiAJLnByb2JlID0gaW9jM19wcm9iZSwKLQkucmVtb3ZlID0gaW9jM19yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlvYzNfcmVtb3ZlKSwKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpb2MzX2lkX3RhYmxlKTsKQEAgLTgxNSwxNSArODE2LDE1IEBACiAgKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBNb2R1bGUgbG9hZCAqLwotc3RhdGljIGludCBfX2RldmluaXQgaW9jM19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpb2MzX2luaXQodm9pZCkKIHsKIAlpZiAoaWE2NF9wbGF0Zm9ybV9pcygic24yIikpCiAJCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpb2MzX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIC8qIE1vZHVsZSB1bmxvYWQgKi8KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpb2MzX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpb2MzX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlvYzNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL0tjb25maWcgYi9kcml2ZXJzL3NwaS9LY29uZmlnCmluZGV4IDRiNmY3Y2IuLmY1NWViMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9zcGkvS2NvbmZpZwpAQCAtMTMzLDYgKzEzMywxNCBAQAogCSAgd2hpY2ggaW50ZXJmYWNlcyB0byBhbiBMTTcwIHRlbXBlcmF0dXJlIHNlbnNvciB1c2luZwogCSAgYSBwYXJhbGxlbCBwb3J0LgogCitjb25maWcgU1BJX01QQzUyeHgKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzUyeHggU1BJIChub24tUFNDKSBjb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eCAmJiBTUEkKKwlzZWxlY3QgU1BJX01BU1RFUl9PRgorCWhlbHAKKwkgIFRoaXMgZHJpdmVycyBzdXBwb3J0cyB0aGUgTVBDNTJ4eCBTUEkgY29udHJvbGxlciBpbiBtYXN0ZXIgU1BJCisJICBtb2RlLgorCiBjb25maWcgU1BJX01QQzUyeHhfUFNDCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBNUEM1Mnh4IFBTQyBTUEkgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIFBQQ19NUEM1Mnh4ICYmIEVYUEVSSU1FTlRBTApAQCAtMTQ3LDkgKzE1NSw2IEBACiAJICBUaGlzIGVuYWJsZXMgdXNpbmcgdGhlIEZyZWVzY2FsZSBNUEM4eHh4IFNQSSBjb250cm9sbGVycyBpbiBtYXN0ZXIKIAkgIG1vZGUuCiAKLQkgIFRoaXMgZHJpdmVyIHVzZXMgYSBzaW1wbGUgc2V0IG9mIHNoaWZ0IHJlZ2lzdGVycyBmb3IgZGF0YSAob3Bwb3NlZAotCSAgdG8gdGhlIENQTSBiYXNlZCBkZXNjcmlwdG9yIG1vZGVsKS4KLQogY29uZmlnIFNQSV9PTUFQX1VXSVJFCiAJdHJpc3RhdGUgIk9NQVAxIE1pY3JvV2lyZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKQEAgLTE2NCw2ICsxNjksMTIgQEAKIAkgIFNQSSBtYXN0ZXIgY29udHJvbGxlciBmb3IgT01BUDI0eHgvT01BUDM0eHggTXVsdGljaGFubmVsIFNQSQogCSAgKE1jU1BJKSBtb2R1bGVzLgogCitjb25maWcgU1BJX09NQVBfMTAwSworCXRyaXN0YXRlICJPTUFQIFNQSSAxMDBLIgorCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiAoQVJDSF9PTUFQODUwIHx8IEFSQ0hfT01BUDczMCkKKwloZWxwCisJICBPTUFQIFNQSSAxMDBLIG1hc3RlciBjb250cm9sbGVyIGZvciBvbWFwN3h4IGJvYXJkcy4KKwogY29uZmlnIFNQSV9PUklPTgogCXRyaXN0YXRlICJPcmlvbiBTUEkgbWFzdGVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gUExBVF9PUklPTiAmJiBFWFBFUklNRU5UQUwKQEAgLTIwNSw2ICsyMTYsMTcgQEAKIAloZWxwCiAJICBTUEkgZHJpdmVyIGZvciBTYW1zdW5nIFMzQzI0WFggc2VyaWVzIEFSTSBTb0NzCiAKK2NvbmZpZyBTUElfUzNDMjRYWF9GSVEKKwlib29sICJTM0MyNFhYIGRyaXZlciB3aXRoIEZJUSBwc2V1ZG8tRE1BIgorCWRlcGVuZHMgb24gU1BJX1MzQzI0WFgKKwlzZWxlY3QgRklRCisJaGVscAorCSAgRW5hYmxlIEZJUSBzdXBwb3J0IGZvciB0aGUgUzNDMjRYWCBTUEkgZHJpdmVyIHRvIHByb3ZpZGUgcHNldWRvCisJICBETUEgYnkgdXNpbmcgdGhlIGZhc3QtaW50ZXJydXB0IHJlcXVlc3QgZnJhbWV3b3JrLCBUaGlzIGFsbG93cworCSAgdGhlIGRyaXZlciB0byBnZXQgRE1BLWxpa2UgcGVyZm9ybWFuY2Ugd2hlbiB0aGVyZSBhcmUgZWl0aGVyCisJICBubyBmcmVlIERNQSBjaGFubmVscywgb3Igd2hlbiBkb2luZyB0cmFuc2ZlcnMgdGhhdCByZXF1aXJlZCBib3RoCisJICBUWCBhbmQgUlggZGF0YSBwYXRocy4KKwogY29uZmlnIFNQSV9TM0MyNFhYX0dQSU8KIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBTUEkgYnkgR1BJTyIKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBFWFBFUklNRU5UQUwKQEAgLTIxNSw2ICsyMzcsMjAgQEAKIAkgIHRoZSBpbmJ1aWx0IGhhcmR3YXJlIGNhbm5vdCBwcm92aWRlIHRoZSB0cmFuc2ZlciBtb2RlLCBvcgogCSAgd2hlcmUgdGhlIGJvYXJkIGlzIHVzaW5nIG5vbiBoYXJkd2FyZSBjb25uZWN0ZWQgcGlucy4KIAorY29uZmlnIFNQSV9TM0M2NFhYCisJdHJpc3RhdGUgIlNhbXN1bmcgUzNDNjRYWCBzZXJpZXMgdHlwZSBTUEkiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzY0WFggJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFMzQzY0WFhfRE1BCisJaGVscAorCSAgU1BJIGRyaXZlciBmb3IgU2Ftc3VuZyBTM0M2NFhYIGFuZCBuZXdlciBTb0NzLgorCitjb25maWcgU1BJX1NIX01TSU9GCisJdHJpc3RhdGUgIlN1cGVySCBNU0lPRiBTUEkgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFNVUEVSSCAmJiBIQVZFX0NMSworCXNlbGVjdCBTUElfQklUQkFORworCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFN1cGVySCBNU0lPRiBibG9ja3MuCisKIGNvbmZpZyBTUElfU0hfU0NJCiAJdHJpc3RhdGUgIlN1cGVySCBTQ0kgU1BJIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBTVVBFUkgKQEAgLTIzNSwxOSArMjcxLDUyIEBACiAJICBTUEkgZHJpdmVyIGZvciBUb3NoaWJhIFRYeDkgTUlQUyBTb0NzCiAKIGNvbmZpZyBTUElfWElMSU5YCi0JdHJpc3RhdGUgIlhpbGlueCBTUEkgY29udHJvbGxlciIKLQlkZXBlbmRzIG9uIChYSUxJTlhfVklSVEVYIHx8IE1JQ1JPQkxBWkUpICYmIEVYUEVSSU1FTlRBTAorCXRyaXN0YXRlICJYaWxpbnggU1BJIGNvbnRyb2xsZXIgY29tbW9uIG1vZHVsZSIKKwlkZXBlbmRzIG9uIEhBU19JT01FTSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgU1BJX0JJVEJBTkcKKwlzZWxlY3QgU1BJX1hJTElOWF9PRiBpZiAoWElMSU5YX1ZJUlRFWCB8fCBNSUNST0JMQVpFKQogCWhlbHAKIAkgIFRoaXMgZXhwb3NlcyB0aGUgU1BJIGNvbnRyb2xsZXIgSVAgZnJvbSB0aGUgWGlsaW54IEVESy4KIAogCSAgU2VlIHRoZSAiT1BCIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAoU1BJKSAodjEuMDBlKSIKIAkgIFByb2R1Y3QgU3BlY2lmaWNhdGlvbiBkb2N1bWVudCAoRFM0NjQpIGZvciBoYXJkd2FyZSBkZXRhaWxzLgogCisJICBPciBmb3IgdGhlIERTNTcwLCBzZWUgIlhQUyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKHYyLjAwYikiCisKK2NvbmZpZyBTUElfWElMSU5YX09GCisJdHJpc3RhdGUgIlhpbGlueCBTUEkgY29udHJvbGxlciBPRiBkZXZpY2UiCisJZGVwZW5kcyBvbiBTUElfWElMSU5YICYmIChYSUxJTlhfVklSVEVYIHx8IE1JQ1JPQkxBWkUpCisJaGVscAorCSAgVGhpcyBpcyB0aGUgT0YgZHJpdmVyIGZvciB0aGUgU1BJIGNvbnRyb2xsZXIgSVAgZnJvbSB0aGUgWGlsaW54IEVESy4KKworY29uZmlnIFNQSV9YSUxJTlhfUExURk0KKwl0cmlzdGF0ZSAiWGlsaW54IFNQSSBjb250cm9sbGVyIHBsYXRmb3JtIGRldmljZSIKKwlkZXBlbmRzIG9uIFNQSV9YSUxJTlgKKwloZWxwCisJICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBTUEkgY29udHJvbGxlciBJUAorCSAgZnJvbSB0aGUgWGlsaW54IEVESy4KKworY29uZmlnIFNQSV9OVUM5MDAKKwl0cmlzdGF0ZSAiTnV2b3RvbiBOVUM5MDAgc2VyaWVzIFNQSSIKKwlkZXBlbmRzIG9uIEFSQ0hfVzkwWDkwMCAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU1BJX0JJVEJBTkcKKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBOdXZvdG9uIE5VQzkwMCBzZXJpZXMgQVJNIFNvQ3MKKwogIwogIyBBZGQgbmV3IFNQSSBtYXN0ZXIgY29udHJvbGxlcnMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGFib3ZlIHRoaXMgbGluZQogIwogCitjb25maWcgU1BJX0RFU0lHTldBUkUKKwlib29sICJEZXNpZ25XYXJlIFNQSSBjb250cm9sbGVyIGNvcmUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIKKwloZWxwCisJICBnZW5lcmFsIGRyaXZlciBmb3IgU1BJIGNvbnRyb2xsZXIgY29yZSBmcm9tIERlc2lnbldhcmUKKworY29uZmlnIFNQSV9EV19QQ0kKKwl0cmlzdGF0ZSAiUENJIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBjb3JlIgorCWRlcGVuZHMgb24gU1BJX0RFU0lHTldBUkUgJiYgUENJCisKICMKICMgVGhlcmUgYXJlIGxvdHMgb2YgU1BJIGRldmljZSB0eXBlcywgd2l0aCBzZW5zb3JzIGFuZCBtZW1vcnkKICMgYmVpbmcgcHJvYmFibHkgdGhlIG1vc3Qgd2lkZWx5IHVzZWQgb25lcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggMjFhMTE4Mi4uZjNkMjgxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTE2LDIzICsxNiwzNyBAQAogb2JqLSQoQ09ORklHX1NQSV9CSVRCQU5HKQkJKz0gc3BpX2JpdGJhbmcubwogb2JqLSQoQ09ORklHX1NQSV9BVTE1NTApCQkrPSBhdTE1NTBfc3BpLm8KIG9iai0kKENPTkZJR19TUElfQlVUVEVSRkxZKQkJKz0gc3BpX2J1dHRlcmZseS5vCitvYmotJChDT05GSUdfU1BJX0RFU0lHTldBUkUpCQkrPSBkd19zcGkubworb2JqLSQoQ09ORklHX1NQSV9EV19QQ0kpCQkrPSBkd19zcGlfcGNpLm8KIG9iai0kKENPTkZJR19TUElfR1BJTykJCQkrPSBzcGlfZ3Bpby5vCiBvYmotJChDT05GSUdfU1BJX0lNWCkJCQkrPSBzcGlfaW14Lm8KIG9iai0kKENPTkZJR19TUElfTE03MF9MTFApCQkrPSBzcGlfbG03MGxscC5vCiBvYmotJChDT05GSUdfU1BJX1BYQTJYWCkJCSs9IHB4YTJ4eF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9PTUFQX1VXSVJFKQkJKz0gb21hcF91d2lyZS5vCiBvYmotJChDT05GSUdfU1BJX09NQVAyNFhYKQkJKz0gb21hcDJfbWNzcGkubworb2JqLSQoQ09ORklHX1NQSV9PTUFQXzEwMEspCQkrPSBvbWFwX3NwaV8xMDBrLm8KIG9iai0kKENPTkZJR19TUElfT1JJT04pCQkJKz0gb3Jpb25fc3BpLm8KIG9iai0kKENPTkZJR19TUElfUEwwMjIpCQkJKz0gYW1iYS1wbDAyMi5vCiBvYmotJChDT05GSUdfU1BJX01QQzUyeHhfUFNDKQkJKz0gbXBjNTJ4eF9wc2Nfc3BpLm8KK29iai0kKENPTkZJR19TUElfTVBDNTJ4eCkJCSs9IG1wYzUyeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfTVBDOHh4eCkJCSs9IHNwaV9tcGM4eHh4Lm8KIG9iai0kKENPTkZJR19TUElfUFBDNHh4KQkJKz0gc3BpX3BwYzR4eC5vCiBvYmotJChDT05GSUdfU1BJX1MzQzI0WFhfR1BJTykJCSs9IHNwaV9zM2MyNHh4X2dwaW8ubwotb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYKQkJKz0gc3BpX3MzYzI0eHgubworb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYKQkJKz0gc3BpX3MzYzI0eHhfaHcubworb2JqLSQoQ09ORklHX1NQSV9TM0M2NFhYKQkJKz0gc3BpX3MzYzY0eHgubwogb2JqLSQoQ09ORklHX1NQSV9UWFg5KQkJCSs9IHNwaV90eHg5Lm8KIG9iai0kKENPTkZJR19TUElfWElMSU5YKQkJKz0geGlsaW54X3NwaS5vCitvYmotJChDT05GSUdfU1BJX1hJTElOWF9PRikJCSs9IHhpbGlueF9zcGlfb2Yubworb2JqLSQoQ09ORklHX1NQSV9YSUxJTlhfUExURk0pCQkrPSB4aWxpbnhfc3BpX3BsdGZtLm8KIG9iai0kKENPTkZJR19TUElfU0hfU0NJKQkJKz0gc3BpX3NoX3NjaS5vCitvYmotJChDT05GSUdfU1BJX1NIX01TSU9GKQkJKz0gc3BpX3NoX21zaW9mLm8KIG9iai0kKENPTkZJR19TUElfU1RNUDNYWFgpCQkrPSBzcGlfc3RtcC5vCitvYmotJChDT05GSUdfU1BJX05VQzkwMCkJCSs9IHNwaV9udWM5MDAubworCisjIHNwZWNpYWwgYnVpbGQgZm9yIHMzYzI0eHggc3BpIGRyaXZlciB3aXRoIGZpcSBzdXBwb3J0CitzcGlfczNjMjR4eF9ody15CQkJOj0gc3BpX3MzYzI0eHgubworc3BpX3MzYzI0eHhfaHctJChDT05GSUdfU1BJX1MzQzI0WFhfRklRKSArPSBzcGlfczNjMjR4eF9maXEubworCiAjIAkuLi4gYWRkIGFib3ZlIHRoaXMgbGluZSAuLi4KIAogIyBTUEkgcHJvdG9jb2wgZHJpdmVycyAoZGV2aWNlL2xpbmsgb24gYnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwppbmRleCBmNWIzZmRiLi5kMjFjMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwpAQCAtMTg5LDE0ICsxODksMTQgQEAKIAogCS8qIHVzZSBzY3JhdGNoIGJ1ZmZlciBvbmx5IHdoZW4gcnggb3IgdHggZGF0YSBpcyB1bnNwZWNpZmllZCAqLwogCWlmICh4ZmVyLT5yeF9idWYpCi0JCSpyeF9kbWEgPSB4ZmVyLT5yeF9kbWEgKyB4ZmVyLT5sZW4gLSBsZW47CisJCSpyeF9kbWEgPSB4ZmVyLT5yeF9kbWEgKyB4ZmVyLT5sZW4gLSAqcGxlbjsKIAllbHNlIHsKIAkJKnJ4X2RtYSA9IGFzLT5idWZmZXJfZG1hOwogCQlpZiAobGVuID4gQlVGRkVSX1NJWkUpCiAJCQlsZW4gPSBCVUZGRVJfU0laRTsKIAl9CiAJaWYgKHhmZXItPnR4X2J1ZikKLQkJKnR4X2RtYSA9IHhmZXItPnR4X2RtYSArIHhmZXItPmxlbiAtIGxlbjsKKwkJKnR4X2RtYSA9IHhmZXItPnR4X2RtYSArIHhmZXItPmxlbiAtICpwbGVuOwogCWVsc2UgewogCQkqdHhfZG1hID0gYXMtPmJ1ZmZlcl9kbWE7CiAJCWlmIChsZW4gPiBCVUZGRVJfU0laRSkKQEAgLTc4OCw3ICs3ODgsNyBAQAogCXNwaW5fbG9ja19pbml0KCZhcy0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFzLT5xdWV1ZSk7CiAJYXMtPnBkZXYgPSBwZGV2OwotCWFzLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgKHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0KSArIDEpOworCWFzLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdzKSk7CiAJaWYgKCFhcy0+cmVncykKIAkJZ290byBvdXRfZnJlZV9idWZmZXI7CiAJYXMtPmlycSA9IGlycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwppbmRleCA3NmNiYzFhLi5jZmQ1ZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCkBAIC0yMzcsOCArMjM3LDE0IEBACiAJdW5zaWduZWQgYnB3LCBoejsKIAl1MzIgY2ZnLCBzdGF0OwogCi0JYnB3ID0gdCA/IHQtPmJpdHNfcGVyX3dvcmQgOiBzcGktPmJpdHNfcGVyX3dvcmQ7Ci0JaHogPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKKwlicHcgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJaHogPSBzcGktPm1heF9zcGVlZF9oejsKKwlpZiAodCkgeworCQlpZiAodC0+Yml0c19wZXJfd29yZCkKKwkJCWJwdyA9IHQtPmJpdHNfcGVyX3dvcmQ7CisJCWlmICh0LT5zcGVlZF9oeikKKwkJCWh6ID0gdC0+c3BlZWRfaHo7CisJfQogCiAJaWYgKGJwdyA8IDQgfHwgYnB3ID4gMjQpIHsKIAkJZGV2X2Vycigmc3BpLT5kZXYsICJzZXR1cHhmZXI6IGludmFsaWQgYml0c19wZXJfd29yZD0lZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2MjBmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaS5jCkBAIC0wLDAgKzEsOTQ0IEBACisvKgorICogZHdfc3BpLmMgLSBEZXNpZ253YXJlIFNQSSBjb3JlIGNvbnRyb2xsZXIgZHJpdmVyIChyZWZlciBweGEyeHhfc3BpLmMpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL2R3X3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNlbmRpZgorCisjZGVmaW5lIFNUQVJUX1NUQVRFCSgodm9pZCAqKTApCisjZGVmaW5lIFJVTk5JTkdfU1RBVEUJKCh2b2lkICopMSkKKyNkZWZpbmUgRE9ORV9TVEFURQkoKHZvaWQgKikyKQorI2RlZmluZSBFUlJPUl9TVEFURQkoKHZvaWQgKiktMSkKKworI2RlZmluZSBRVUVVRV9SVU5OSU5HCTAKKyNkZWZpbmUgUVVFVUVfU1RPUFBFRAkxCisKKyNkZWZpbmUgTVJTVF9TUElfREVBU1NFUlQJMAorI2RlZmluZSBNUlNUX1NQSV9BU1NFUlQJCTEKKworLyogU2xhdmUgc3BpX2RldiByZWxhdGVkICovCitzdHJ1Y3QgY2hpcF9kYXRhIHsKKwl1MTYgY3IwOworCXU4IGNzOwkJCS8qIGNoaXAgc2VsZWN0IHBpbiAqLworCXU4IG5fYnl0ZXM7CQkvKiBjdXJyZW50IGlzIGEgMS8yLzQgYnl0ZSBvcCAqLworCXU4IHRtb2RlOwkJLyogVFIvVE8vUk8vRUVQUk9NICovCisJdTggdHlwZTsJCS8qIFNQSS9TU1AvTWljcm9XaXJlICovCisKKwl1OCBwb2xsX21vZGU7CQkvKiAxIG1lYW5zIHVzZSBwb2xsIG1vZGUgKi8KKworCXUzMiBkbWFfd2lkdGg7CisJdTMyIHJ4X3RocmVzaG9sZDsKKwl1MzIgdHhfdGhyZXNob2xkOworCXU4IGVuYWJsZV9kbWE7CisJdTggYml0c19wZXJfd29yZDsKKwl1MTYgY2xrX2RpdjsJCS8qIGJhdWQgcmF0ZSBkaXZpZGVyICovCisJdTMyIHNwZWVkX2h6OwkJLyogYmF1ZCByYXRlICovCisJaW50ICgqd3JpdGUpKHN0cnVjdCBkd19zcGkgKmR3cyk7CisJaW50ICgqcmVhZCkoc3RydWN0IGR3X3NwaSAqZHdzKTsKKwl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOworfTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBzcGlfc2hvd19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBTUElfUkVHU19CVUZTSVpFCTEwMjQKK3N0YXRpYyBzc2l6ZV90ICBzcGlfc2hvd19yZWdzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGR3X3NwaSAqZHdzOworCWNoYXIgKmJ1ZjsKKwl1MzIgbGVuID0gMDsKKwlzc2l6ZV90IHJldDsKKworCWR3cyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWJ1ZiA9IGt6YWxsb2MoU1BJX1JFR1NfQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJNUlNUIFNQSTAgcmVnaXN0ZXJzOlxuIik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiQ1RSTDA6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgY3RybDApKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkNUUkwxOiBcdFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIGN0cmwxKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJTU0lFTlI6IFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIHNzaWVucikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiU0VSOiBcdFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIHNlcikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiQkFVRFI6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgYmF1ZHIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIlRYRlRMUjogXHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgdHhmbHRyKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJSWEZUTFI6IFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIHJ4Zmx0cikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiVFhGTFI6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgdHhmbHIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIlJYRkxSOiBcdFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIHJ4ZmxyKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJTUjogXHRcdDB4JTA4eFxuIiwgZHdfcmVhZGwoZHdzLCBzcikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiSU1SOiBcdFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIGltcikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiSVNSOiBcdFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIGlzcikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRE1BQ1I6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgZG1hY3IpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkRNQVRETFI6IFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIGRtYXRkbHIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkRNQVJETFI6IFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIGRtYXJkbHIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisKKwlyZXQgPSAgc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtcnN0X3NwaV9yZWdzX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc3BpX3Nob3dfcmVnc19vcGVuLAorCS5yZWFkCQk9IHNwaV9zaG93X3JlZ3MsCit9OworCitzdGF0aWMgaW50IG1yc3Rfc3BpX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJZHdzLT5kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKCJtcnN0X3NwaSIsIE5VTEwpOworCWlmICghZHdzLT5kZWJ1Z2ZzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQlkd3MtPmRlYnVnZnMsICh2b2lkICopZHdzLCAmbXJzdF9zcGlfcmVnc19vcHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtcnN0X3NwaV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJaWYgKGR3cy0+ZGVidWdmcykKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGR3cy0+ZGVidWdmcyk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtcnN0X3NwaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGR3X3NwaSAqZHdzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXJzdF9zcGlfZGVidWdmc19yZW1vdmUoc3RydWN0IGR3X3NwaSAqZHdzKQoreworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgdm9pZCB3YWl0X3RpbGxfbm90X2J1c3koc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSkgeworCQlpZiAoIShkd19yZWFkdyhkd3MsIHNyKSAmIFNSX0JVU1kpKQorCQkJcmV0dXJuOworCX0KKwlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LAorCQkiRFcgU1BJOiBTdHV0dXMga2VlcHMgYnVzeSBmb3IgMTAwMHVzIGFmdGVyIGEgcmVhZC93cml0ZSFcbiIpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaChzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJd2hpbGUgKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfUkZfTk9UX0VNUFQpCisJCWR3X3JlYWR3KGR3cywgZHIpOworCisJd2FpdF90aWxsX25vdF9idXN5KGR3cyk7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKK3sKK30KKworc3RhdGljIGludCBudWxsX3dyaXRlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJdTggbl9ieXRlcyA9IGR3cy0+bl9ieXRlczsKKworCWlmICghKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfVEZfTk9UX0ZVTEwpCisJCXx8IChkd3MtPnR4ID09IGR3cy0+dHhfZW5kKSkKKwkJcmV0dXJuIDA7CisJZHdfd3JpdGV3KGR3cywgZHIsIDApOworCWR3cy0+dHggKz0gbl9ieXRlczsKKworCXdhaXRfdGlsbF9ub3RfYnVzeShkd3MpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG51bGxfcmVhZGVyKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl1OCBuX2J5dGVzID0gZHdzLT5uX2J5dGVzOworCisJd2hpbGUgKChkd19yZWFkdyhkd3MsIHNyKSAmIFNSX1JGX05PVF9FTVBUKQorCQkmJiAoZHdzLT5yeCA8IGR3cy0+cnhfZW5kKSkgeworCQlkd19yZWFkdyhkd3MsIGRyKTsKKwkJZHdzLT5yeCArPSBuX2J5dGVzOworCX0KKwl3YWl0X3RpbGxfbm90X2J1c3koZHdzKTsKKwlyZXR1cm4gZHdzLT5yeCA9PSBkd3MtPnJ4X2VuZDsKK30KKworc3RhdGljIGludCB1OF93cml0ZXIoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWlmICghKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfVEZfTk9UX0ZVTEwpCisJCXx8IChkd3MtPnR4ID09IGR3cy0+dHhfZW5kKSkKKwkJcmV0dXJuIDA7CisKKwlkd193cml0ZXcoZHdzLCBkciwgKih1OCAqKShkd3MtPnR4KSk7CisJKytkd3MtPnR4OworCisJd2FpdF90aWxsX25vdF9idXN5KGR3cyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdThfcmVhZGVyKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl3aGlsZSAoKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfUkZfTk9UX0VNUFQpCisJCSYmIChkd3MtPnJ4IDwgZHdzLT5yeF9lbmQpKSB7CisJCSoodTggKikoZHdzLT5yeCkgPSBkd19yZWFkdyhkd3MsIGRyKTsKKwkJKytkd3MtPnJ4OworCX0KKworCXdhaXRfdGlsbF9ub3RfYnVzeShkd3MpOworCXJldHVybiBkd3MtPnJ4ID09IGR3cy0+cnhfZW5kOworfQorCitzdGF0aWMgaW50IHUxNl93cml0ZXIoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWlmICghKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfVEZfTk9UX0ZVTEwpCisJCXx8IChkd3MtPnR4ID09IGR3cy0+dHhfZW5kKSkKKwkJcmV0dXJuIDA7CisKKwlkd193cml0ZXcoZHdzLCBkciwgKih1MTYgKikoZHdzLT50eCkpOworCWR3cy0+dHggKz0gMjsKKworCXdhaXRfdGlsbF9ub3RfYnVzeShkd3MpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHUxNl9yZWFkZXIoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXUxNiB0ZW1wOworCisJd2hpbGUgKChkd19yZWFkdyhkd3MsIHNyKSAmIFNSX1JGX05PVF9FTVBUKQorCQkmJiAoZHdzLT5yeCA8IGR3cy0+cnhfZW5kKSkgeworCQl0ZW1wID0gZHdfcmVhZHcoZHdzLCBkcik7CisJCSoodTE2ICopKGR3cy0+cngpID0gdGVtcDsKKwkJZHdzLT5yeCArPSAyOworCX0KKworCXdhaXRfdGlsbF9ub3RfYnVzeShkd3MpOworCXJldHVybiBkd3MtPnJ4ID09IGR3cy0+cnhfZW5kOworfQorCitzdGF0aWMgdm9pZCAqbmV4dF90cmFuc2ZlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkd3MtPmN1cl9tc2c7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnMgPSBkd3MtPmN1cl90cmFuc2ZlcjsKKworCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLworCWlmICh0cmFucy0+dHJhbnNmZXJfbGlzdC5uZXh0ICE9ICZtc2ctPnRyYW5zZmVycykgeworCQlkd3MtPmN1cl90cmFuc2ZlciA9CisJCQlsaXN0X2VudHJ5KHRyYW5zLT50cmFuc2Zlcl9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIsCisJCQkJCXRyYW5zZmVyX2xpc3QpOworCQlyZXR1cm4gUlVOTklOR19TVEFURTsKKwl9IGVsc2UKKwkJcmV0dXJuIERPTkVfU1RBVEU7Cit9CisKKy8qCisgKiBOb3RlOiBmaXJzdCBzdGVwIGlzIHRoZSBwcm90b2NvbCBkcml2ZXIgcHJlcGFyZXMKKyAqIGEgZG1hLWNhcGFibGUgbWVtb3J5LCBhbmQgdGhpcyBmdW5jIGp1c3QgbmVlZCB0cmFuc2xhdGUKKyAqIHRoZSB2aXJ0IGFkZHIgdG8gcGh5c2ljYWwKKyAqLworc3RhdGljIGludCBtYXBfZG1hX2J1ZmZlcnMoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWlmICghZHdzLT5jdXJfbXNnLT5pc19kbWFfbWFwcGVkIHx8ICFkd3MtPmRtYV9pbml0ZWQKKwkJfHwgIWR3cy0+Y3VyX2NoaXAtPmVuYWJsZV9kbWEpCisJCXJldHVybiAwOworCisJaWYgKGR3cy0+Y3VyX3RyYW5zZmVyLT50eF9kbWEpCisJCWR3cy0+dHhfZG1hID0gZHdzLT5jdXJfdHJhbnNmZXItPnR4X2RtYTsKKworCWlmIChkd3MtPmN1cl90cmFuc2Zlci0+cnhfZG1hKQorCQlkd3MtPnJ4X2RtYSA9IGR3cy0+Y3VyX3RyYW5zZmVyLT5yeF9kbWE7CisKKwlyZXR1cm4gMTsKK30KKworLyogQ2FsbGVyIGFscmVhZHkgc2V0IG1lc3NhZ2UtPnN0YXR1czsgZG1hIGFuZCBwaW8gaXJxcyBhcmUgYmxvY2tlZCAqLworc3RhdGljIHZvaWQgZ2l2ZWJhY2soc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKmxhc3RfdHJhbnNmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwltc2cgPSBkd3MtPmN1cl9tc2c7CisJZHdzLT5jdXJfbXNnID0gTlVMTDsKKwlkd3MtPmN1cl90cmFuc2ZlciA9IE5VTEw7CisJZHdzLT5wcmV2X2NoaXAgPSBkd3MtPmN1cl9jaGlwOworCWR3cy0+Y3VyX2NoaXAgPSBOVUxMOworCWR3cy0+ZG1hX21hcHBlZCA9IDA7CisJcXVldWVfd29yayhkd3MtPndvcmtxdWV1ZSwgJmR3cy0+cHVtcF9tZXNzYWdlcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisKKwlsYXN0X3RyYW5zZmVyID0gbGlzdF9lbnRyeShtc2ctPnRyYW5zZmVycy5wcmV2LAorCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQl0cmFuc2Zlcl9saXN0KTsKKworCWlmICghbGFzdF90cmFuc2Zlci0+Y3NfY2hhbmdlKQorCQlkd3MtPmNzX2NvbnRyb2woTVJTVF9TUElfREVBU1NFUlQpOworCisJbXNnLT5zdGF0ZSA9IE5VTEw7CisJaWYgKG1zZy0+Y29tcGxldGUpCisJCW1zZy0+Y29tcGxldGUobXNnLT5jb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgaW50X2Vycm9yX3N0b3Aoc3RydWN0IGR3X3NwaSAqZHdzLCBjb25zdCBjaGFyICptc2cpCit7CisJLyogU3RvcCBhbmQgcmVzZXQgaHcgKi8KKwlmbHVzaChkd3MpOworCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOworCisJZGV2X2VycigmZHdzLT5tYXN0ZXItPmRldiwgIiVzXG4iLCBtc2cpOworCWR3cy0+Y3VyX21zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZkd3MtPnB1bXBfdHJhbnNmZXJzKTsKK30KKworc3RhdGljIHZvaWQgdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCisJZHdzLT5jdXJfbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGR3cy0+bGVuOworCisJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCisJZHdzLT5jdXJfbXNnLT5zdGF0ZSA9IG5leHRfdHJhbnNmZXIoZHdzKTsKKworCS8qIEhhbmRsZSBlbmQgb2YgbWVzc2FnZSAqLworCWlmIChkd3MtPmN1cl9tc2ctPnN0YXRlID09IERPTkVfU1RBVEUpIHsKKwkJZHdzLT5jdXJfbXNnLT5zdGF0dXMgPSAwOworCQlnaXZlYmFjayhkd3MpOworCX0gZWxzZQorCQl0YXNrbGV0X3NjaGVkdWxlKCZkd3MtPnB1bXBfdHJhbnNmZXJzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF90cmFuc2ZlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJdTE2IGlycV9zdGF0dXMsIGlycV9tYXNrID0gMHgzZjsKKworCWlycV9zdGF0dXMgPSBkd19yZWFkdyhkd3MsIGlzcikgJiBpcnFfbWFzazsKKwkvKiBFcnJvciBoYW5kbGluZyAqLworCWlmIChpcnFfc3RhdHVzICYgKFNQSV9JTlRfVFhPSSB8IFNQSV9JTlRfUlhPSSB8IFNQSV9JTlRfUlhVSSkpIHsKKwkJZHdfcmVhZHcoZHdzLCB0eG9pY3IpOworCQlkd19yZWFkdyhkd3MsIHJ4b2ljcik7CisJCWR3X3JlYWR3KGR3cywgcnh1aWNyKTsKKwkJaW50X2Vycm9yX3N0b3AoZHdzLCAiaW50ZXJydXB0X3RyYW5zZmVyOiBmaWZvIG92ZXJydW4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIElOVCBjb21lcyBmcm9tIHR4ICovCisJaWYgKGR3cy0+dHggJiYgKGlycV9zdGF0dXMgJiBTUElfSU5UX1RYRUkpKSB7CisJCXdoaWxlIChkd3MtPnR4IDwgZHdzLT50eF9lbmQpCisJCQlkd3MtPndyaXRlKGR3cyk7CisKKwkJaWYgKGR3cy0+dHggPT0gZHdzLT50eF9lbmQpIHsKKwkJCXNwaV9tYXNrX2ludHIoZHdzLCBTUElfSU5UX1RYRUkpOworCQkJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKKwkJfQorCX0KKworCS8qIElOVCBjb21lcyBmcm9tIHJ4ICovCisJaWYgKGR3cy0+cnggJiYgKGlycV9zdGF0dXMgJiBTUElfSU5UX1JYRkkpKSB7CisJCWlmIChkd3MtPnJlYWQoZHdzKSkKKwkJCXRyYW5zZmVyX2NvbXBsZXRlKGR3cyk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGR3X3NwaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBkd19zcGkgKmR3cyA9IGRldl9pZDsKKworCWlmICghZHdzLT5jdXJfbXNnKSB7CisJCXNwaV9tYXNrX2ludHIoZHdzLCBTUElfSU5UX1RYRUkpOworCQkvKiBOZXZlciBmYWlsICovCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gZHdzLT50cmFuc2Zlcl9oYW5kbGVyKGR3cyk7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIGluc2lkZSBwdW1wX3RyYW5zZmVycygpICovCitzdGF0aWMgdm9pZCBwb2xsX3RyYW5zZmVyKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlpZiAoZHdzLT50eCkgeworCQl3aGlsZSAoZHdzLT53cml0ZShkd3MpKQorCQkJZHdzLT5yZWFkKGR3cyk7CisJfQorCisJZHdzLT5yZWFkKGR3cyk7CisJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKK30KKworc3RhdGljIHZvaWQgZG1hX3RyYW5zZmVyKHN0cnVjdCBkd19zcGkgKmR3cywgaW50IGNzX2NoYW5nZSkKK3sKK30KKworc3RhdGljIHZvaWQgcHVtcF90cmFuc2ZlcnModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkd19zcGkgKmR3cyA9IChzdHJ1Y3QgZHdfc3BpICopZGF0YTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnRyYW5zZmVyID0gTlVMTDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICpwcmV2aW91cyA9IE5VTEw7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IE5VTEw7CisJc3RydWN0IGNoaXBfZGF0YSAqY2hpcCA9IE5VTEw7CisJdTggYml0cyA9IDA7CisJdTggaW1hc2sgPSAwOworCXU4IGNzX2NoYW5nZSA9IDA7CisJdTE2IGNsa19kaXYgPSAwOworCXUzMiBzcGVlZCA9IDA7CisJdTMyIGNyMCA9IDA7CisKKwkvKiBHZXQgY3VycmVudCBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCW1lc3NhZ2UgPSBkd3MtPmN1cl9tc2c7CisJdHJhbnNmZXIgPSBkd3MtPmN1cl90cmFuc2ZlcjsKKwljaGlwID0gZHdzLT5jdXJfY2hpcDsKKwlzcGkgPSBtZXNzYWdlLT5zcGk7CisKKwlpZiAobWVzc2FnZS0+c3RhdGUgPT0gRVJST1JfU1RBVEUpIHsKKwkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTzsKKwkJZ290byBlYXJseV9leGl0OworCX0KKworCS8qIEhhbmRsZSBlbmQgb2YgbWVzc2FnZSAqLworCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBET05FX1NUQVRFKSB7CisJCW1lc3NhZ2UtPnN0YXR1cyA9IDA7CisJCWdvdG8gZWFybHlfZXhpdDsKKwl9CisKKwkvKiBEZWxheSBpZiByZXF1ZXN0ZWQgYXQgZW5kIG9mIHRyYW5zZmVyKi8KKwlpZiAobWVzc2FnZS0+c3RhdGUgPT0gUlVOTklOR19TVEFURSkgeworCQlwcmV2aW91cyA9IGxpc3RfZW50cnkodHJhbnNmZXItPnRyYW5zZmVyX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKKwkJCQkJdHJhbnNmZXJfbGlzdCk7CisJCWlmIChwcmV2aW91cy0+ZGVsYXlfdXNlY3MpCisJCQl1ZGVsYXkocHJldmlvdXMtPmRlbGF5X3VzZWNzKTsKKwl9CisKKwlkd3MtPm5fYnl0ZXMgPSBjaGlwLT5uX2J5dGVzOworCWR3cy0+ZG1hX3dpZHRoID0gY2hpcC0+ZG1hX3dpZHRoOworCWR3cy0+Y3NfY29udHJvbCA9IGNoaXAtPmNzX2NvbnRyb2w7CisKKwlkd3MtPnJ4X2RtYSA9IHRyYW5zZmVyLT5yeF9kbWE7CisJZHdzLT50eF9kbWEgPSB0cmFuc2Zlci0+dHhfZG1hOworCWR3cy0+dHggPSAodm9pZCAqKXRyYW5zZmVyLT50eF9idWY7CisJZHdzLT50eF9lbmQgPSBkd3MtPnR4ICsgdHJhbnNmZXItPmxlbjsKKwlkd3MtPnJ4ID0gdHJhbnNmZXItPnJ4X2J1ZjsKKwlkd3MtPnJ4X2VuZCA9IGR3cy0+cnggKyB0cmFuc2Zlci0+bGVuOworCWR3cy0+d3JpdGUgPSBkd3MtPnR4ID8gY2hpcC0+d3JpdGUgOiBudWxsX3dyaXRlcjsKKwlkd3MtPnJlYWQgPSBkd3MtPnJ4ID8gY2hpcC0+cmVhZCA6IG51bGxfcmVhZGVyOworCWR3cy0+Y3NfY2hhbmdlID0gdHJhbnNmZXItPmNzX2NoYW5nZTsKKwlkd3MtPmxlbiA9IGR3cy0+Y3VyX3RyYW5zZmVyLT5sZW47CisJaWYgKGNoaXAgIT0gZHdzLT5wcmV2X2NoaXApCisJCWNzX2NoYW5nZSA9IDE7CisKKwljcjAgPSBjaGlwLT5jcjA7CisKKwkvKiBIYW5kbGUgcGVyIHRyYW5zZmVyIG9wdGlvbnMgZm9yIGJwdyBhbmQgc3BlZWQgKi8KKwlpZiAodHJhbnNmZXItPnNwZWVkX2h6KSB7CisJCXNwZWVkID0gY2hpcC0+c3BlZWRfaHo7CisKKwkJaWYgKHRyYW5zZmVyLT5zcGVlZF9oeiAhPSBzcGVlZCkgeworCQkJc3BlZWQgPSB0cmFuc2Zlci0+c3BlZWRfaHo7CisJCQlpZiAoc3BlZWQgPiBkd3MtPm1heF9mcmVxKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJNUlNUIFNQSTA6IHVuc3VwcG9ydGVkIgorCQkJCQkiZnJlcTogJWRIelxuIiwgc3BlZWQpOworCQkJCW1lc3NhZ2UtPnN0YXR1cyA9IC1FSU87CisJCQkJZ290byBlYXJseV9leGl0OworCQkJfQorCisJCQkvKiBjbGtfZGl2IGRvZXNuJ3Qgc3VwcG9ydCBvZGQgbnVtYmVyICovCisJCQljbGtfZGl2ID0gZHdzLT5tYXhfZnJlcSAvIHNwZWVkOworCQkJY2xrX2RpdiA9IChjbGtfZGl2ID4+IDEpIDw8IDE7CisKKwkJCWNoaXAtPnNwZWVkX2h6ID0gc3BlZWQ7CisJCQljaGlwLT5jbGtfZGl2ID0gY2xrX2RpdjsKKwkJfQorCX0KKwlpZiAodHJhbnNmZXItPmJpdHNfcGVyX3dvcmQpIHsKKwkJYml0cyA9IHRyYW5zZmVyLT5iaXRzX3Blcl93b3JkOworCisJCXN3aXRjaCAoYml0cykgeworCQljYXNlIDg6CisJCQlkd3MtPm5fYnl0ZXMgPSAxOworCQkJZHdzLT5kbWFfd2lkdGggPSAxOworCQkJZHdzLT5yZWFkID0gKGR3cy0+cmVhZCAhPSBudWxsX3JlYWRlcikgPworCQkJCQl1OF9yZWFkZXIgOiBudWxsX3JlYWRlcjsKKwkJCWR3cy0+d3JpdGUgPSAoZHdzLT53cml0ZSAhPSBudWxsX3dyaXRlcikgPworCQkJCQl1OF93cml0ZXIgOiBudWxsX3dyaXRlcjsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJZHdzLT5uX2J5dGVzID0gMjsKKwkJCWR3cy0+ZG1hX3dpZHRoID0gMjsKKwkJCWR3cy0+cmVhZCA9IChkd3MtPnJlYWQgIT0gbnVsbF9yZWFkZXIpID8KKwkJCQkJdTE2X3JlYWRlciA6IG51bGxfcmVhZGVyOworCQkJZHdzLT53cml0ZSA9IChkd3MtPndyaXRlICE9IG51bGxfd3JpdGVyKSA/CisJCQkJCXUxNl93cml0ZXIgOiBudWxsX3dyaXRlcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJNUlNUIFNQSTA6IHVuc3VwcG9ydGVkIGJpdHM6IgorCQkJCSIlZGJcbiIsIGJpdHMpOworCQkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTzsKKwkJCWdvdG8gZWFybHlfZXhpdDsKKwkJfQorCisJCWNyMCA9IChiaXRzIC0gMSkKKwkJCXwgKGNoaXAtPnR5cGUgPDwgU1BJX0ZSRl9PRkZTRVQpCisJCQl8IChzcGktPm1vZGUgPDwgU1BJX01PREVfT0ZGU0VUKQorCQkJfCAoY2hpcC0+dG1vZGUgPDwgU1BJX1RNT0RfT0ZGU0VUKTsKKwl9CisJbWVzc2FnZS0+c3RhdGUgPSBSVU5OSU5HX1NUQVRFOworCisJLyogQ2hlY2sgaWYgY3VycmVudCB0cmFuc2ZlciBpcyBhIERNQSB0cmFuc2FjdGlvbiAqLworCWR3cy0+ZG1hX21hcHBlZCA9IG1hcF9kbWFfYnVmZmVycyhkd3MpOworCisJaWYgKCFkd3MtPmRtYV9tYXBwZWQgJiYgIWNoaXAtPnBvbGxfbW9kZSkgeworCQlpZiAoZHdzLT5yeCkKKwkJCWltYXNrIHw9IFNQSV9JTlRfUlhGSTsKKwkJaWYgKGR3cy0+dHgpCisJCQlpbWFzayB8PSBTUElfSU5UX1RYRUk7CisJCWR3cy0+dHJhbnNmZXJfaGFuZGxlciA9IGludGVycnVwdF90cmFuc2ZlcjsKKwl9CisKKwkvKgorCSAqIFJlcHJvZ3JhbSByZWdpc3RlcnMgb25seSBpZgorCSAqCTEuIGNoaXAgc2VsZWN0IGNoYW5nZXMKKwkgKgkyLiBjbGtfZGl2IGlzIGNoYW5nZWQKKwkgKgkzLiBjb250cm9sIHZhbHVlIGNoYW5nZXMKKwkgKi8KKwlpZiAoZHdfcmVhZHcoZHdzLCBjdHJsMCkgIT0gY3IwIHx8IGNzX2NoYW5nZSB8fCBjbGtfZGl2KSB7CisJCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOworCisJCWlmIChkd19yZWFkdyhkd3MsIGN0cmwwKSAhPSBjcjApCisJCQlkd193cml0ZXcoZHdzLCBjdHJsMCwgY3IwKTsKKworCQkvKiBTZXQgdGhlIGludGVycnVwdCBtYXNrLCBmb3IgcG9sbCBtb2RlIGp1c3QgZGlhYmxlIGFsbCBpbnQgKi8KKwkJc3BpX21hc2tfaW50cihkd3MsIDB4ZmYpOworCQlpZiAoIWNoaXAtPnBvbGxfbW9kZSkKKwkJCXNwaV91bWFza19pbnRyKGR3cywgaW1hc2spOworCisJCXNwaV9zZXRfY2xrKGR3cywgY2xrX2RpdiA/IGNsa19kaXYgOiBjaGlwLT5jbGtfZGl2KTsKKwkJc3BpX2NoaXBfc2VsKGR3cywgc3BpLT5jaGlwX3NlbGVjdCk7CisJCXNwaV9lbmFibGVfY2hpcChkd3MsIDEpOworCisJCWlmIChjc19jaGFuZ2UpCisJCQlkd3MtPnByZXZfY2hpcCA9IGNoaXA7CisJfQorCisJaWYgKGR3cy0+ZG1hX21hcHBlZCkKKwkJZG1hX3RyYW5zZmVyKGR3cywgY3NfY2hhbmdlKTsKKworCWlmIChjaGlwLT5wb2xsX21vZGUpCisJCXBvbGxfdHJhbnNmZXIoZHdzKTsKKworCXJldHVybjsKKworZWFybHlfZXhpdDoKKwlnaXZlYmFjayhkd3MpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcHVtcF9tZXNzYWdlcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGR3X3NwaSAqZHdzID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkd19zcGksIHB1bXBfbWVzc2FnZXMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBMb2NrIHF1ZXVlIGFuZCBjaGVjayBmb3IgcXVldWUgd29yayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmZHdzLT5xdWV1ZSkgfHwgZHdzLT5ydW4gPT0gUVVFVUVfU1RPUFBFRCkgeworCQlkd3MtPmJ1c3kgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgcnVubmluZyBhIG1lc3NhZ2UgKi8KKwlpZiAoZHdzLT5jdXJfbXNnKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogRXh0cmFjdCBoZWFkIG9mIHF1ZXVlICovCisJZHdzLT5jdXJfbXNnID0gbGlzdF9lbnRyeShkd3MtPnF1ZXVlLm5leHQsIHN0cnVjdCBzcGlfbWVzc2FnZSwgcXVldWUpOworCWxpc3RfZGVsX2luaXQoJmR3cy0+Y3VyX21zZy0+cXVldWUpOworCisJLyogSW5pdGlhbCBtZXNzYWdlIHN0YXRlKi8KKwlkd3MtPmN1cl9tc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7CisJZHdzLT5jdXJfdHJhbnNmZXIgPSBsaXN0X2VudHJ5KGR3cy0+Y3VyX21zZy0+dHJhbnNmZXJzLm5leHQsCisJCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQkJdHJhbnNmZXJfbGlzdCk7CisJZHdzLT5jdXJfY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShkd3MtPmN1cl9tc2ctPnNwaSk7CisKKwkvKiBNYXJrIGFzIGJ1c3kgYW5kIGxhdW5jaCB0cmFuc2ZlcnMgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZkd3MtPnB1bXBfdHJhbnNmZXJzKTsKKworCWR3cy0+YnVzeSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIHNwaV9kZXZpY2UgdXNlIHRoaXMgdG8gcXVldWUgaW4gdGhlaXIgc3BpX21zZyAqLworc3RhdGljIGludCBkd19zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCit7CisJc3RydWN0IGR3X3NwaSAqZHdzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkd3MtPnJ1biA9PSBRVUVVRV9TVE9QUEVEKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwltc2ctPmFjdHVhbF9sZW5ndGggPSAwOworCW1zZy0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCW1zZy0+c3RhdGUgPSBTVEFSVF9TVEFURTsKKworCWxpc3RfYWRkX3RhaWwoJm1zZy0+cXVldWUsICZkd3MtPnF1ZXVlKTsKKworCWlmIChkd3MtPnJ1biA9PSBRVUVVRV9SVU5OSU5HICYmICFkd3MtPmJ1c3kpIHsKKworCQlpZiAoZHdzLT5jdXJfdHJhbnNmZXIgfHwgZHdzLT5jdXJfbXNnKQorCQkJcXVldWVfd29yayhkd3MtPndvcmtxdWV1ZSwKKwkJCQkJJmR3cy0+cHVtcF9tZXNzYWdlcyk7CisJCWVsc2UgeworCQkJLyogSWYgbm8gb3RoZXIgZGF0YSB0cmFuc2FjdGlvbiBpbiBhaXIsIGp1c3QgZ28gKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCQkJcHVtcF9tZXNzYWdlcygmZHdzLT5wdW1wX21lc3NhZ2VzKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgbWF5IGJlIGNhbGxlZCB0d2ljZSBmb3IgZWFjaCBzcGkgZGV2ICovCitzdGF0aWMgaW50IGR3X3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkd19zcGlfY2hpcCAqY2hpcF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwOworCisJaWYgKHNwaS0+Yml0c19wZXJfd29yZCAhPSA4ICYmIHNwaS0+Yml0c19wZXJfd29yZCAhPSAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBPbmx5IGFsbG9jIG9uIGZpcnN0IHNldHVwICovCisJY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOworCWlmICghY2hpcCkgeworCQljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNoaXBfZGF0YSksIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXApCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQljaGlwLT5jc19jb250cm9sID0gbnVsbF9jc19jb250cm9sOworCQljaGlwLT5lbmFibGVfZG1hID0gMDsKKwl9CisKKwkvKgorCSAqIFByb3RvY29sIGRyaXZlcnMgbWF5IGNoYW5nZSB0aGUgY2hpcCBzZXR0aW5ncywgc28uLi4KKwkgKiBpZiBjaGlwX2luZm8gZXhpc3RzLCB1c2UgaXQKKwkgKi8KKwljaGlwX2luZm8gPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKKworCS8qIGNoaXBfaW5mbyBkb2Vzbid0IGFsd2F5cyBleGlzdCAqLworCWlmIChjaGlwX2luZm8pIHsKKwkJaWYgKGNoaXBfaW5mby0+Y3NfY29udHJvbCkKKwkJCWNoaXAtPmNzX2NvbnRyb2wgPSBjaGlwX2luZm8tPmNzX2NvbnRyb2w7CisKKwkJY2hpcC0+cG9sbF9tb2RlID0gY2hpcF9pbmZvLT5wb2xsX21vZGU7CisJCWNoaXAtPnR5cGUgPSBjaGlwX2luZm8tPnR5cGU7CisKKwkJY2hpcC0+cnhfdGhyZXNob2xkID0gMDsKKwkJY2hpcC0+dHhfdGhyZXNob2xkID0gMDsKKworCQljaGlwLT5lbmFibGVfZG1hID0gY2hpcF9pbmZvLT5lbmFibGVfZG1hOworCX0KKworCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gOCkgeworCQljaGlwLT5uX2J5dGVzID0gMTsKKwkJY2hpcC0+ZG1hX3dpZHRoID0gMTsKKwkJY2hpcC0+cmVhZCA9IHU4X3JlYWRlcjsKKwkJY2hpcC0+d3JpdGUgPSB1OF93cml0ZXI7CisJfSBlbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPD0gMTYpIHsKKwkJY2hpcC0+bl9ieXRlcyA9IDI7CisJCWNoaXAtPmRtYV93aWR0aCA9IDI7CisJCWNoaXAtPnJlYWQgPSB1MTZfcmVhZGVyOworCQljaGlwLT53cml0ZSA9IHUxNl93cml0ZXI7CisJfSBlbHNlIHsKKwkJLyogTmV2ZXIgdGFrZSA+MTZiIGNhc2UgZm9yIE1SU1QgU1BJQyAqLworCQlkZXZfZXJyKCZzcGktPmRldiwgImludmFsaWQgd29yZHNpemVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2hpcC0+Yml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKKworCWNoaXAtPnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisJaWYgKGNoaXAtPnNwZWVkX2h6KQorCQljaGlwLT5jbGtfZGl2ID0gMjUwMDAwMDAgLyBjaGlwLT5zcGVlZF9oejsKKwllbHNlCisJCWNoaXAtPmNsa19kaXYgPSA4OwkvKiBkZWZhdWx0IHZhbHVlICovCisKKwljaGlwLT50bW9kZSA9IDA7IC8qIFR4ICYgUnggKi8KKwkvKiBEZWZhdWx0IFNQSSBtb2RlIGlzIFNDUE9MID0gMCwgU0NQSCA9IDAgKi8KKwljaGlwLT5jcjAgPSAoY2hpcC0+Yml0c19wZXJfd29yZCAtIDEpCisJCQl8IChjaGlwLT50eXBlIDw8IFNQSV9GUkZfT0ZGU0VUKQorCQkJfCAoc3BpLT5tb2RlICA8PCBTUElfTU9ERV9PRkZTRVQpCisJCQl8IChjaGlwLT50bW9kZSA8PCBTUElfVE1PRF9PRkZTRVQpOworCisJc3BpX3NldF9jdGxkYXRhKHNwaSwgY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3X3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGNoaXBfZGF0YSAqY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOworCWtmcmVlKGNoaXApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlJTklUX0xJU1RfSEVBRCgmZHdzLT5xdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJmR3cy0+bG9jayk7CisKKwlkd3MtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7CisJZHdzLT5idXN5ID0gMDsKKworCXRhc2tsZXRfaW5pdCgmZHdzLT5wdW1wX3RyYW5zZmVycywKKwkJCXB1bXBfdHJhbnNmZXJzLAkodW5zaWduZWQgbG9uZylkd3MpOworCisJSU5JVF9XT1JLKCZkd3MtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOworCWR3cy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJCWRldl9uYW1lKGR3cy0+bWFzdGVyLT5kZXYucGFyZW50KSk7CisJaWYgKGR3cy0+d29ya3F1ZXVlID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGFydF9xdWV1ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkd3MtPnJ1biA9PSBRVUVVRV9SVU5OSU5HIHx8IGR3cy0+YnVzeSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlkd3MtPnJ1biA9IFFVRVVFX1JVTk5JTkc7CisJZHdzLT5jdXJfbXNnID0gTlVMTDsKKwlkd3MtPmN1cl90cmFuc2ZlciA9IE5VTEw7CisJZHdzLT5jdXJfY2hpcCA9IE5VTEw7CisJZHdzLT5wcmV2X2NoaXAgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCisJcXVldWVfd29yayhkd3MtPndvcmtxdWV1ZSwgJmR3cy0+cHVtcF9tZXNzYWdlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG9wX3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxpbWl0ID0gNTA7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHdzLT5sb2NrLCBmbGFncyk7CisJZHdzLT5ydW4gPSBRVUVVRV9TVE9QUEVEOworCXdoaWxlICghbGlzdF9lbXB0eSgmZHdzLT5xdWV1ZSkgJiYgZHdzLT5idXN5ICYmIGxpbWl0LS0pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisJCW1zbGVlcCgxMCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJmR3cy0+cXVldWUpIHx8IGR3cy0+YnVzeSkKKwkJc3RhdHVzID0gLUVCVVNZOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkZXN0cm95X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gc3RvcF9xdWV1ZShkd3MpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlkZXN0cm95X3dvcmtxdWV1ZShkd3MtPndvcmtxdWV1ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlc3RhcnQgdGhlIGNvbnRyb2xsZXIsIGRpc2FibGUgYWxsIGludGVycnVwdHMsIGNsZWFuIHJ4IGZpZm8gKi8KK3N0YXRpYyB2b2lkIHNwaV9od19pbml0KHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlzcGlfZW5hYmxlX2NoaXAoZHdzLCAwKTsKKwlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7CisJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CisJZmx1c2goZHdzKTsKK30KKworaW50IF9fZGV2aW5pdCBkd19zcGlfYWRkX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJaW50IHJldDsKKworCUJVR19PTihkd3MgPT0gTlVMTCk7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGR3cy0+cGFyZW50X2RldiwgMCk7CisJaWYgKCFtYXN0ZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWR3cy0+bWFzdGVyID0gbWFzdGVyOworCWR3cy0+dHlwZSA9IFNTSV9NT1RPX1NQSTsKKwlkd3MtPnByZXZfY2hpcCA9IE5VTEw7CisJZHdzLT5kbWFfaW5pdGVkID0gMDsKKwlkd3MtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKGR3cy0+cGFkZHIgKyAweDYwKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGR3cy0+aXJxLCBkd19zcGlfaXJxLCAwLAorCQkJImR3X3NwaSIsIGR3cyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmbWFzdGVyLT5kZXYsICJjYW4gbm90IGdldCBJUlFcbiIpOworCQlnb3RvIGVycl9mcmVlX21hc3RlcjsKKwl9CisKKwltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEE7CisJbWFzdGVyLT5idXNfbnVtID0gZHdzLT5idXNfbnVtOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBkd3MtPm51bV9jczsKKwltYXN0ZXItPmNsZWFudXAgPSBkd19zcGlfY2xlYW51cDsKKwltYXN0ZXItPnNldHVwID0gZHdfc3BpX3NldHVwOworCW1hc3Rlci0+dHJhbnNmZXIgPSBkd19zcGlfdHJhbnNmZXI7CisKKwlkd3MtPmRtYV9pbml0ZWQgPSAwOworCisJLyogQmFzaWMgSFcgaW5pdCAqLworCXNwaV9od19pbml0KGR3cyk7CisKKwkvKiBJbml0aWFsIGFuZCBzdGFydCBxdWV1ZSAqLworCXJldCA9IGluaXRfcXVldWUoZHdzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm1hc3Rlci0+ZGV2LCAicHJvYmxlbSBpbml0aWFsaXppbmcgcXVldWVcbiIpOworCQlnb3RvIGVycl9kaWFibGVfaHc7CisJfQorCXJldCA9IHN0YXJ0X3F1ZXVlKGR3cyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZtYXN0ZXItPmRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWVcbiIpOworCQlnb3RvIGVycl9kaWFibGVfaHc7CisJfQorCisJc3BpX21hc3Rlcl9zZXRfZGV2ZGF0YShtYXN0ZXIsIGR3cyk7CisJcmV0ID0gc3BpX3JlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmbWFzdGVyLT5kZXYsICJwcm9ibGVtIHJlZ2lzdGVyaW5nIHNwaSBtYXN0ZXJcbiIpOworCQlnb3RvIGVycl9xdWV1ZV9hbGxvYzsKKwl9CisKKwltcnN0X3NwaV9kZWJ1Z2ZzX2luaXQoZHdzKTsKKwlyZXR1cm4gMDsKKworZXJyX3F1ZXVlX2FsbG9jOgorCWRlc3Ryb3lfcXVldWUoZHdzKTsKK2Vycl9kaWFibGVfaHc6CisJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CisJZnJlZV9pcnEoZHdzLT5pcnEsIGR3cyk7CitlcnJfZnJlZV9tYXN0ZXI6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHdfc3BpX2FkZF9ob3N0KTsKKwordm9pZCBfX2RldmV4aXQgZHdfc3BpX3JlbW92ZV9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghZHdzKQorCQlyZXR1cm47CisJbXJzdF9zcGlfZGVidWdmc19yZW1vdmUoZHdzKTsKKworCS8qIFJlbW92ZSB0aGUgcXVldWUgKi8KKwlzdGF0dXMgPSBkZXN0cm95X3F1ZXVlKGR3cyk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LCAiZHdfc3BpX3JlbW92ZTogd29ya3F1ZXVlIHdpbGwgbm90ICIKKwkJCSJjb21wbGV0ZSwgbWVzc2FnZSBtZW1vcnkgbm90IGZyZWVkXG4iKTsKKworCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOworCS8qIERpc2FibGUgY2xrICovCisJc3BpX3NldF9jbGsoZHdzLCAwKTsKKwlmcmVlX2lycShkd3MtPmlycSwgZHdzKTsKKworCS8qIERpc2Nvbm5lY3QgZnJvbSB0aGUgU1BJIGZyYW1ld29yayAqLworCXNwaV91bnJlZ2lzdGVyX21hc3Rlcihkd3MtPm1hc3Rlcik7Cit9CisKK2ludCBkd19zcGlfc3VzcGVuZF9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHN0b3BfcXVldWUoZHdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOworCXNwaV9zZXRfY2xrKGR3cywgMCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHdfc3BpX3N1c3BlbmRfaG9zdCk7CisKK2ludCBkd19zcGlfcmVzdW1lX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWludCByZXQ7CisKKwlzcGlfaHdfaW5pdChkd3MpOworCXJldCA9IHN0YXJ0X3F1ZXVlKGR3cyk7CisJaWYgKHJldCkKKwkJZGV2X2VycigmZHdzLT5tYXN0ZXItPmRldiwgImZhaWwgdG8gc3RhcnQgcXVldWUgKCVkKVxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkd19zcGlfcmVzdW1lX2hvc3QpOworCitNT0RVTEVfQVVUSE9SKCJGZW5nIFRhbmcgPGZlbmcudGFuZ0BpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGVzaWduV2FyZSBTUEkgY29udHJvbGxlciBjb3JlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMgYi9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiYTY5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIG1yc3Rfc3BpX3BjaS5jIC0gUENJIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBDb3JlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZHdfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJkd19zcGlfcGNpIgorCitzdHJ1Y3QgZHdfc3BpX3BjaSB7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXN0cnVjdCBkd19zcGkJCWR3czsKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgZHdfc3BpX3BjaSAqZHdwY2k7CisJc3RydWN0IGR3X3NwaSAqZHdzOworCWludCBwY2lfYmFyID0gMDsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiRFc6IGZvdW5kIFBDSSBTUEkgY29udHJvbGxlcihJRDogJTA0eDolMDR4KVxuIiwKKwkJcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWR3cGNpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR3X3NwaV9wY2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWR3cGNpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2Rpc2FibGU7CisJfQorCisJZHdwY2ktPnBkZXYgPSBwZGV2OworCWR3cyA9ICZkd3BjaS0+ZHdzOworCisJLyogR2V0IGJhc2ljIGlvIHJlc291cmNlIGFuZCBtYXAgaXQgKi8KKwlkd3MtPnBhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHBjaV9iYXIpOworCWR3cy0+aW9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIHBjaV9iYXIpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIHBjaV9iYXIsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9rZnJlZTsKKworCWR3cy0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZSgodW5zaWduZWQgbG9uZylkd3MtPnBhZGRyLAorCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcGNpX2JhcikpOworCWlmICghZHdzLT5yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnOworCX0KKworCWR3cy0+cGFyZW50X2RldiA9ICZwZGV2LT5kZXY7CisJZHdzLT5idXNfbnVtID0gMDsKKwlkd3MtPm51bV9jcyA9IDQ7CisJZHdzLT5tYXhfZnJlcSA9IDI1MDAwMDAwOwkvKiBmb3IgTW9vcmVzdHdvbiAqLworCWR3cy0+aXJxID0gcGRldi0+aXJxOworCisJcmV0ID0gZHdfc3BpX2FkZF9ob3N0KGR3cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5tYXA7CisKKwkvKiBQQ0kgaG9vayBhbmQgU1BJIGhvb2sgdXNlIHRoZSBzYW1lIGRydiBkYXRhICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGR3cGNpKTsKKwlyZXR1cm4gMDsKKworZXJyX3VubWFwOgorCWlvdW5tYXAoZHdzLT5yZWdzKTsKK2Vycl9yZWxlYXNlX3JlZzoKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgcGNpX2Jhcik7CitlcnJfa2ZyZWU6CisJa2ZyZWUoZHdwY2kpOworZXJyX2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzcGlfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfc3BpX3BjaSAqZHdwY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaW91bm1hcChkd3BjaS0+ZHdzLnJlZ3MpOworCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKKwlrZnJlZShkd3BjaSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNwaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGR3X3NwaV9wY2kgKmR3cGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBkd19zcGlfc3VzcGVuZF9ob3N0KCZkd3BjaS0+ZHdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGR3X3NwaV9wY2kgKmR3cGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gZHdfc3BpX3Jlc3VtZV9ob3N0KCZkd3BjaS0+ZHdzKTsKK30KKyNlbHNlCisjZGVmaW5lIHNwaV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc3BpX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCS8qIEludGVsIE1vb3Jlc3Rvd24gcGxhdGZvcm0gU1BJIGNvbnRyb2xsZXIgMCAqLworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MDApIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHdfc3BpX2RyaXZlciA9IHsKKwkubmFtZSA9CQlEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPQlwY2lfaWRzLAorCS5wcm9iZSA9CXNwaV9wY2lfcHJvYmUsCisJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKHNwaV9wY2lfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9CXNwaV9zdXNwZW5kLAorCS5yZXN1bWUJPQlzcGlfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXJzdF9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkd19zcGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1yc3Rfc3BpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmR3X3NwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtcnN0X3NwaV9pbml0KTsKK21vZHVsZV9leGl0KG1yc3Rfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJGZW5nIFRhbmcgPGZlbmcudGFuZ0BpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgQ29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwppbmRleCAxYjc0ZDVjLi5mNTBjODFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTMxMywxMSArMzE0LDEzIEBACiAJc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKnBzYyA9IG1wcy0+cHNjOwogCXN0cnVjdCBtcGM1Mnh4X3BzY19maWZvIF9faW9tZW0gKmZpZm8gPSBtcHMtPmZpZm87CiAJdTMyIG1jbGtlbl9kaXY7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCS8qIGRlZmF1bHQgc3lzY2xrIGlzIDUxMk1IeiAqLwogCW1jbGtlbl9kaXYgPSAobXBzLT5zeXNjbGsgPyBtcHMtPnN5c2NsayA6IDUxMjAwMDAwMCkgLyBNQ0xLOwotCW1wYzUyeHhfc2V0X3BzY19jbGtkaXYocHNjX2lkLCBtY2xrZW5fZGl2KTsKKwlyZXQgPSBtcGM1Mnh4X3NldF9wc2NfY2xrZGl2KHBzY19pZCwgbWNsa2VuX2Rpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qIFJlc2V0IHRoZSBQU0MgaW50byBhIGtub3duIHN0YXRlICovCiAJb3V0XzgoJnBzYy0+Y29tbWFuZCwgTVBDNTJ4eF9QU0NfUlNUX1JYKTsKQEAgLTM0MSw3ICszNDQsNyBAQAogCiAJbXBzLT5iaXRzX3Blcl93b3JkID0gODsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtcGM1Mnh4X3BzY19zcGlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTQxMCw4ICs0MTMsMTAgQEAKIAkJZ290byBmcmVlX21hc3RlcjsKIAogCXJldCA9IG1wYzUyeHhfcHNjX3NwaV9wb3J0X2NvbmZpZyhtYXN0ZXItPmJ1c19udW0sIG1wcyk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBjb25maWd1cmUgUFNDISBJcyBpdCBjYXBhYmxlIG9mIFNQST9cbiIpOwogCQlnb3RvIGZyZWVfaXJxOworCX0KIAogCXNwaW5fbG9ja19pbml0KCZtcHMtPmxvY2spOwogCWluaXRfY29tcGxldGlvbigmbXBzLT5kb25lKTsKQEAgLTQ2NCwxMCArNDY5LDExIEBACiAJY29uc3QgdTMyICpyZWdhZGRyX3A7CiAJdTY0IHJlZ2FkZHI2NCwgc2l6ZTY0OwogCXMxNiBpZCA9IC0xOworCWludCByYzsKIAogCXJlZ2FkZHJfcCA9IG9mX2dldF9hZGRyZXNzKG9wLT5ub2RlLCAwLCAmc2l6ZTY0LCBOVUxMKTsKIAlpZiAoIXJlZ2FkZHJfcCkgewotCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgUFNDIGFkZHJlc3NcbiIpOworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiSW52YWxpZCBQU0MgYWRkcmVzc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZWdhZGRyNjQgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhvcC0+bm9kZSwgcmVnYWRkcl9wKTsKQEAgLTQ3OCwxNSArNDg0LDE4IEBACiAKIAkJcHNjX251bXAgPSBvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJjZWxsLWluZGV4IiwgTlVMTCk7CiAJCWlmICghcHNjX251bXAgfHwgKnBzY19udW1wID4gNSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtcGM1Mnh4X3BzY19zcGk6IERldmljZSBub2RlICVzIGhhcyBpbnZhbGlkICIKLQkJCQkJImNlbGwtaW5kZXggcHJvcGVydHlcbiIsIG9wLT5ub2RlLT5mdWxsX25hbWUpOworCQkJZGV2X2Vycigmb3AtPmRldiwgIkludmFsaWQgY2VsbC1pbmRleCBwcm9wZXJ0eVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZCA9ICpwc2NfbnVtcCArIDE7CiAJfQogCi0JcmV0dXJuIG1wYzUyeHhfcHNjX3NwaV9kb19wcm9iZSgmb3AtPmRldiwgKHUzMilyZWdhZGRyNjQsICh1MzIpc2l6ZTY0LAorCXJjID0gbXBjNTJ4eF9wc2Nfc3BpX2RvX3Byb2JlKCZvcC0+ZGV2LCAodTMyKXJlZ2FkZHI2NCwgKHUzMilzaXplNjQsCiAJCQkJCWlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKSwgaWQpOworCWlmIChyYyA9PSAwKQorCQlvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpLCBvcC0+bm9kZSk7CisKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgX19leGl0IG1wYzUyeHhfcHNjX3NwaV9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWJmZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYwpAQCAtMCwwICsxLDU3OCBAQAorLyoKKyAqIE1QQzUyeHggU1BJIGJ1cyBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyCisgKgorICogVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgTVBDNTIwMCdzIGRlZGljYXRlZCBTUEkgY29udHJvbGxlci4KKyAqCisgKiBOb3RlOiB0aGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBNUEM1MjAwIFBTQyBpbiBTUEkgbW9kZS4gIEZvcgorICogdGhhdCBkcml2ZXIgc2VlIGRyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgorCitNT0RVTEVfQVVUSE9SKCJHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1QQzUyeHggU1BJIChub24tUFNDKSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBTUElfQ1RSTDEJMHgwMAorI2RlZmluZSBTUElfQ1RSTDFfU1BJRQkJKDEgPDwgNykKKyNkZWZpbmUgU1BJX0NUUkwxX1NQRQkJKDEgPDwgNikKKyNkZWZpbmUgU1BJX0NUUkwxX01TVFIJCSgxIDw8IDQpCisjZGVmaW5lIFNQSV9DVFJMMV9DUE9MCQkoMSA8PCAzKQorI2RlZmluZSBTUElfQ1RSTDFfQ1BIQQkJKDEgPDwgMikKKyNkZWZpbmUgU1BJX0NUUkwxX1NTT0UJCSgxIDw8IDEpCisjZGVmaW5lIFNQSV9DVFJMMV9MU0JGRQkJKDEgPDwgMCkKKworI2RlZmluZSBTUElfQ1RSTDIJMHgwMQorI2RlZmluZSBTUElfQlJSCQkweDA0CisKKyNkZWZpbmUgU1BJX1NUQVRVUwkweDA1CisjZGVmaW5lIFNQSV9TVEFUVVNfU1BJRgkJKDEgPDwgNykKKyNkZWZpbmUgU1BJX1NUQVRVU19XQ09MCQkoMSA8PCA2KQorI2RlZmluZSBTUElfU1RBVFVTX01PREYJCSgxIDw8IDQpCisKKyNkZWZpbmUgU1BJX0RBVEEJMHgwOQorI2RlZmluZSBTUElfUE9SVERBVEEJMHgwZAorI2RlZmluZSBTUElfREFUQURJUgkweDEwCisKKy8qIEZTTSBzdGF0ZSByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lIEZTTV9TVE9QCTAJLyogTm90aGluZyBtb3JlIGZvciB0aGUgc3RhdGUgbWFjaGluZSB0byAqLworCQkJCS8qIGRvLiAgSWYgc29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbnMgKi8KKwkJCQkvKiB0aGVuIGFuIElSUSB3aWxsIGJlIHJlY2VpdmVkICovCisjZGVmaW5lIEZTTV9QT0xMCTEJLyogbmVlZCB0byBwb2xsIGZvciBjb21wbGV0aW9uLCBhbiBJUlEgaXMgKi8KKwkJCQkvKiBub3QgZXhwZWN0ZWQgKi8KKyNkZWZpbmUgRlNNX0NPTlRJTlVFCTIJLyogS2VlcCBpdGVyYXRpbmcgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKworLyogRHJpdmVyIGludGVybmFsIGRhdGEgKi8KK3N0cnVjdCBtcGM1Mnh4X3NwaSB7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTA7CS8qIE1PREYgaXJxICovCisJaW50IGlycTE7CS8qIFNQSUYgaXJxICovCisJdW5zaWduZWQgaW50IGlwYl9mcmVxOworCisJLyogU3RhdGlzdGljczsgbm90IHVzZWQgbm93LCBidXQgd2lsbCBiZSByZWludHJvZHVjZWQgZm9yIGRlYnVnZnMgKi8KKwlpbnQgbXNnX2NvdW50OworCWludCB3Y29sX2NvdW50OworCWludCB3Y29sX3RpY2tzOworCXUzMiB3Y29sX3R4X3RpbWVzdGFtcDsKKwlpbnQgbW9kZl9jb3VudDsKKwlpbnQgYnl0ZV9jb3VudDsKKworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CQkvKiBxdWV1ZSBvZiBwZW5kaW5nIG1lc3NhZ2VzICovCisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJLyogRGV0YWlscyBvZiBjdXJyZW50IHRyYW5zZmVyIChsZW5ndGgsIGFuZCBidWZmZXIgcG9pbnRlcnMpICovCisJc3RydWN0IHNwaV9tZXNzYWdlICptZXNzYWdlOwkvKiBjdXJyZW50IG1lc3NhZ2UgKi8KKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcjsJLyogY3VycmVudCB0cmFuc2ZlciAqLworCWludCAoKnN0YXRlKShpbnQgaXJxLCBzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zLCB1OCBzdGF0dXMsIHU4IGRhdGEpOworCWludCBsZW47CisJaW50IHRpbWVzdGFtcDsKKwl1OCAqcnhfYnVmOworCWNvbnN0IHU4ICp0eF9idWY7CisJaW50IGNzX2NoYW5nZTsKKwlpbnQgZ3Bpb19jc19jb3VudDsKKwl1bnNpZ25lZCBpbnQgKmdwaW9fY3M7Cit9OworCisvKgorICogQ1MgY29udHJvbCBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBtcGM1Mnh4X3NwaV9jaGlwc2VsKHN0cnVjdCBtcGM1Mnh4X3NwaSAqbXMsIGludCB2YWx1ZSkKK3sKKwlpbnQgY3M7CisKKwlpZiAobXMtPmdwaW9fY3NfY291bnQgPiAwKSB7CisJCWNzID0gbXMtPm1lc3NhZ2UtPnNwaS0+Y2hpcF9zZWxlY3Q7CisJCWdwaW9fc2V0X3ZhbHVlKG1zLT5ncGlvX2NzW2NzXSwgdmFsdWUgPyAwIDogMSk7CisJfSBlbHNlCisJCW91dF84KG1zLT5yZWdzICsgU1BJX1BPUlREQVRBLCB2YWx1ZSA/IDAgOiAweDA4KTsKK30KKworLyoKKyAqIFN0YXJ0IGEgbmV3IHRyYW5zZmVyLiAgVGhpcyBpcyBjYWxsZWQgYm90aCBieSB0aGUgaWRsZSBzdGF0ZQorICogZm9yIHRoZSBmaXJzdCB0cmFuc2ZlciBpbiBhIG1lc3NhZ2UsIGFuZCBieSB0aGUgd2FpdCBzdGF0ZSB3aGVuIHRoZQorICogcHJldmlvdXMgdHJhbnNmZXIgaW4gYSBtZXNzYWdlIGlzIGNvbXBsZXRlLgorICovCitzdGF0aWMgdm9pZCBtcGM1Mnh4X3NwaV9zdGFydF90cmFuc2ZlcihzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zKQoreworCW1zLT5yeF9idWYgPSBtcy0+dHJhbnNmZXItPnJ4X2J1ZjsKKwltcy0+dHhfYnVmID0gbXMtPnRyYW5zZmVyLT50eF9idWY7CisJbXMtPmxlbiA9IG1zLT50cmFuc2Zlci0+bGVuOworCisJLyogQWN0aXZhdGUgdGhlIGNoaXAgc2VsZWN0ICovCisJaWYgKG1zLT5jc19jaGFuZ2UpCisJCW1wYzUyeHhfc3BpX2NoaXBzZWwobXMsIDEpOworCW1zLT5jc19jaGFuZ2UgPSBtcy0+dHJhbnNmZXItPmNzX2NoYW5nZTsKKworCS8qIFdyaXRlIG91dCB0aGUgZmlyc3QgYnl0ZSAqLworCW1zLT53Y29sX3R4X3RpbWVzdGFtcCA9IGdldF90YmwoKTsKKwlpZiAobXMtPnR4X2J1ZikKKwkJb3V0XzgobXMtPnJlZ3MgKyBTUElfREFUQSwgKm1zLT50eF9idWYrKyk7CisJZWxzZQorCQlvdXRfOChtcy0+cmVncyArIFNQSV9EQVRBLCAwKTsKK30KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBzdGF0ZSBoYW5kbGVycyAqLworc3RhdGljIGludCBtcGM1Mnh4X3NwaV9mc21zdGF0ZV90cmFuc2ZlcihpbnQgaXJxLCBzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zLAorCQkJCQkgdTggc3RhdHVzLCB1OCBkYXRhKTsKK3N0YXRpYyBpbnQgbXBjNTJ4eF9zcGlfZnNtc3RhdGVfd2FpdChpbnQgaXJxLCBzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zLAorCQkJCSAgICAgdTggc3RhdHVzLCB1OCBkYXRhKTsKKworLyoKKyAqIElETEUgc3RhdGUKKyAqCisgKiBObyB0cmFuc2ZlcnMgYXJlIGluIHByb2dyZXNzOyBpZiBhbm90aGVyIHRyYW5zZmVyIGlzIHBlbmRpbmcgdGhlbiByZXRyaWV2ZQorICogaXQgYW5kIGtpY2sgaXQgb2ZmLiAgT3RoZXJ3aXNlLCBzdG9wIHByb2Nlc3NpbmcgdGhlIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIGludAorbXBjNTJ4eF9zcGlfZnNtc3RhdGVfaWRsZShpbnQgaXJxLCBzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zLCB1OCBzdGF0dXMsIHU4IGRhdGEpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKwlpbnQgc3ByLCBzcHByOworCXU4IGN0cmwxOworCisJaWYgKHN0YXR1cyAmJiAoaXJxICE9IE5PX0lSUSkpCisJCWRldl9lcnIoJm1zLT5tYXN0ZXItPmRldiwgInNwdXJpb3VzIGlycSwgc3RhdHVzPTB4JS4yeFxuIiwKKwkJCXN0YXR1cyk7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIHRyYW5zZmVyIHdhaXRpbmcuICovCisJaWYgKGxpc3RfZW1wdHkoJm1zLT5xdWV1ZSkpCisJCXJldHVybiBGU01fU1RPUDsKKworCS8qIGdldCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgKi8KKwltcy0+bWVzc2FnZSA9IGxpc3RfZmlyc3RfZW50cnkoJm1zLT5xdWV1ZSwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisJbGlzdF9kZWxfaW5pdCgmbXMtPm1lc3NhZ2UtPnF1ZXVlKTsKKworCS8qIFNldHVwIHRoZSBjb250cm9sbGVyIHBhcmFtZXRlcnMgKi8KKwljdHJsMSA9IFNQSV9DVFJMMV9TUElFIHwgU1BJX0NUUkwxX1NQRSB8IFNQSV9DVFJMMV9NU1RSOworCXNwaSA9IG1zLT5tZXNzYWdlLT5zcGk7CisJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQorCQljdHJsMSB8PSBTUElfQ1RSTDFfQ1BIQTsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCWN0cmwxIHw9IFNQSV9DVFJMMV9DUE9MOworCWlmIChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKQorCQljdHJsMSB8PSBTUElfQ1RSTDFfTFNCRkU7CisJb3V0XzgobXMtPnJlZ3MgKyBTUElfQ1RSTDEsIGN0cmwxKTsKKworCS8qIFNldHVwIHRoZSBjb250cm9sbGVyIHNwZWVkICovCisJLyogbWluaW11bSBkaXZpZGVyIGlzICcyJy4gIEFsc28sIGFkZCAnMScgdG8gZm9yY2Ugcm91bmRpbmcgdGhlCisJICogZGl2aWRlciB1cC4gKi8KKwlzcHByID0gKChtcy0+aXBiX2ZyZXEgLyBtcy0+bWVzc2FnZS0+c3BpLT5tYXhfc3BlZWRfaHopICsgMSkgPj4gMTsKKwlzcHIgPSAwOworCWlmIChzcHByIDwgMSkKKwkJc3BwciA9IDE7CisJd2hpbGUgKCgoc3BwciAtIDEpICYgfjB4NykgIT0gMCkgeworCQlzcHByID0gKHNwcHIgKyAxKSA+PiAxOyAvKiBhZGQgJzEnIHRvIGZvcmNlIHJvdW5kaW5nIHVwICovCisJCXNwcisrOworCX0KKwlzcHByLS07CQkvKiBzcHByIHF1YW50aXR5IGluIHJlZ2lzdGVyIGlzIG9mZnNldCBieSAxICovCisJaWYgKHNwciA+IDcpIHsKKwkJLyogRG9uJ3Qgb3ZlcnJ1biBsaW1pdHMgb2YgU1BJIGJhdWRyYXRlIHJlZ2lzdGVyICovCisJCXNwciA9IDc7CisJCXNwcHIgPSA3OworCX0KKwlvdXRfOChtcy0+cmVncyArIFNQSV9CUlIsIHNwcHIgPDwgNCB8IHNwcik7IC8qIFNldCBzcGVlZCAqLworCisJbXMtPmNzX2NoYW5nZSA9IDE7CisJbXMtPnRyYW5zZmVyID0gY29udGFpbmVyX29mKG1zLT5tZXNzYWdlLT50cmFuc2ZlcnMubmV4dCwKKwkJCQkgICAgc3RydWN0IHNwaV90cmFuc2ZlciwgdHJhbnNmZXJfbGlzdCk7CisKKwltcGM1Mnh4X3NwaV9zdGFydF90cmFuc2Zlcihtcyk7CisJbXMtPnN0YXRlID0gbXBjNTJ4eF9zcGlfZnNtc3RhdGVfdHJhbnNmZXI7CisKKwlyZXR1cm4gRlNNX0NPTlRJTlVFOworfQorCisvKgorICogVFJBTlNGRVIgc3RhdGUKKyAqCisgKiBJbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNmZXIuICBJZiB0aGUgU1BJIGNvcmUgaGFzIGNvbXBsZXRlZCBwcm9jZXNzaW5nCisgKiBhIGJ5dGUsIHRoZW4gcmVhZCBvdXQgdGhlIHJlY2VpdmVkIGRhdGEgYW5kIHdyaXRlIG91dCB0aGUgbmV4dCBieXRlCisgKiAodW5sZXNzIHRoaXMgdHJhbnNmZXIgaXMgZmluaXNoZWQ7IGluIHdoaWNoIGNhc2UgZ28gb24gdG8gdGhlIHdhaXQKKyAqIHN0YXRlKQorICovCitzdGF0aWMgaW50IG1wYzUyeHhfc3BpX2ZzbXN0YXRlX3RyYW5zZmVyKGludCBpcnEsIHN0cnVjdCBtcGM1Mnh4X3NwaSAqbXMsCisJCQkJCSB1OCBzdGF0dXMsIHU4IGRhdGEpCit7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBtcy0+aXJxMCA/IEZTTV9TVE9QIDogRlNNX1BPTEw7CisKKwlpZiAoc3RhdHVzICYgU1BJX1NUQVRVU19XQ09MKSB7CisJCS8qIFRoZSBTUEkgY29udHJvbGxlciBpcyBzdG9vcGlkLiAgQXQgc2xvd2VyIHNwZWVkcywgaXQgbWF5CisJCSAqIHJhaXNlIHRoZSBTUElGIGZsYWcgYmVmb3JlIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIGFjdHVhbGx5CisJCSAqIGZpbmlzaGVkLCB3aGljaCBjYXVzZXMgYSBjb2xsaXNpb24gKGludGVybmFsIHRvIHRoZSBzdGF0ZQorCQkgKiBtYWNoaW5lIG9ubHkpLiAgVGhlIG1hbnVhbCByZWNvbW1lbmRzIGluc2VydGluZyBhIGRlbGF5CisJCSAqIGJldHdlZW4gcmVjZWl2aW5nIHRoZSBpbnRlcnJ1cHQgYW5kIHNlbmRpbmcgdGhlIG5leHQgYnl0ZSwKKwkJICogYnV0IGl0IGNhbiBhbHNvIGJlIHdvcmtlZCBhcm91bmQgc2ltcGx5IGJ5IHJldHJ5aW5nIHRoZQorCQkgKiB0cmFuc2ZlciB3aGljaCBpcyB3aGF0IHdlIGRvIGhlcmUuICovCisJCW1zLT53Y29sX2NvdW50Kys7CisJCW1zLT53Y29sX3RpY2tzICs9IGdldF90YmwoKSAtIG1zLT53Y29sX3R4X3RpbWVzdGFtcDsKKwkJbXMtPndjb2xfdHhfdGltZXN0YW1wID0gZ2V0X3RibCgpOworCQlkYXRhID0gMDsKKwkJaWYgKG1zLT50eF9idWYpCisJCQlkYXRhID0gKihtcy0+dHhfYnVmIC0gMSk7CisJCW91dF84KG1zLT5yZWdzICsgU1BJX0RBVEEsIGRhdGEpOyAvKiB0cnkgYWdhaW4gKi8KKwkJcmV0dXJuIEZTTV9DT05USU5VRTsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIFNQSV9TVEFUVVNfTU9ERikgeworCQltcy0+bW9kZl9jb3VudCsrOworCQlkZXZfZXJyKCZtcy0+bWFzdGVyLT5kZXYsICJtb2RlIGZhdWx0XG4iKTsKKwkJbXBjNTJ4eF9zcGlfY2hpcHNlbChtcywgMCk7CisJCW1zLT5tZXNzYWdlLT5zdGF0dXMgPSAtRUlPOworCQltcy0+bWVzc2FnZS0+Y29tcGxldGUobXMtPm1lc3NhZ2UtPmNvbnRleHQpOworCQltcy0+c3RhdGUgPSBtcGM1Mnh4X3NwaV9mc21zdGF0ZV9pZGxlOworCQlyZXR1cm4gRlNNX0NPTlRJTlVFOworCX0KKworCS8qIFJlYWQgZGF0YSBvdXQgb2YgdGhlIHNwaSBkZXZpY2UgKi8KKwltcy0+Ynl0ZV9jb3VudCsrOworCWlmIChtcy0+cnhfYnVmKQorCQkqbXMtPnJ4X2J1ZisrID0gZGF0YTsKKworCS8qIElzIHRoZSB0cmFuc2ZlciBjb21wbGV0ZT8gKi8KKwltcy0+bGVuLS07CisJaWYgKG1zLT5sZW4gPT0gMCkgeworCQltcy0+dGltZXN0YW1wID0gZ2V0X3RibCgpOworCQltcy0+dGltZXN0YW1wICs9IG1zLT50cmFuc2Zlci0+ZGVsYXlfdXNlY3MgKiB0Yl90aWNrc19wZXJfdXNlYzsKKwkJbXMtPnN0YXRlID0gbXBjNTJ4eF9zcGlfZnNtc3RhdGVfd2FpdDsKKwkJcmV0dXJuIEZTTV9DT05USU5VRTsKKwl9CisKKwkvKiBXcml0ZSBvdXQgdGhlIG5leHQgYnl0ZSAqLworCW1zLT53Y29sX3R4X3RpbWVzdGFtcCA9IGdldF90YmwoKTsKKwlpZiAobXMtPnR4X2J1ZikKKwkJb3V0XzgobXMtPnJlZ3MgKyBTUElfREFUQSwgKm1zLT50eF9idWYrKyk7CisJZWxzZQorCQlvdXRfOChtcy0+cmVncyArIFNQSV9EQVRBLCAwKTsKKworCXJldHVybiBGU01fQ09OVElOVUU7Cit9CisKKy8qCisgKiBXQUlUIHN0YXRlCisgKgorICogQSB0cmFuc2ZlciBoYXMgY29tcGxldGVkOyBuZWVkIHRvIHdhaXQgZm9yIHRoZSBkZWxheSBwZXJpb2QgdG8gY29tcGxldGUKKyAqIGJlZm9yZSBzdGFydGluZyB0aGUgbmV4dCB0cmFuc2ZlcgorICovCitzdGF0aWMgaW50CittcGM1Mnh4X3NwaV9mc21zdGF0ZV93YWl0KGludCBpcnEsIHN0cnVjdCBtcGM1Mnh4X3NwaSAqbXMsIHU4IHN0YXR1cywgdTggZGF0YSkKK3sKKwlpZiAoc3RhdHVzICYmIGlycSkKKwkJZGV2X2VycigmbXMtPm1hc3Rlci0+ZGV2LCAic3B1cmlvdXMgaXJxLCBzdGF0dXM9MHglLjJ4XG4iLAorCQkJc3RhdHVzKTsKKworCWlmICgoKGludClnZXRfdGJsKCkpIC0gbXMtPnRpbWVzdGFtcCA8IDApCisJCXJldHVybiBGU01fUE9MTDsKKworCW1zLT5tZXNzYWdlLT5hY3R1YWxfbGVuZ3RoICs9IG1zLT50cmFuc2Zlci0+bGVuOworCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW5vdGhlciB0cmFuc2ZlciBpbiB0aGlzIG1lc3NhZ2UuICBJZiB0aGVyZQorCSAqIGFyZW4ndCB0aGVuIGRlYWN0aXZhdGUgQ1MsIG5vdGlmeSBzZW5kZXIsIGFuZCBkcm9wIGJhY2sgdG8gaWRsZQorCSAqIHRvIHN0YXJ0IHRoZSBuZXh0IG1lc3NhZ2UuICovCisJaWYgKG1zLT50cmFuc2Zlci0+dHJhbnNmZXJfbGlzdC5uZXh0ID09ICZtcy0+bWVzc2FnZS0+dHJhbnNmZXJzKSB7CisJCW1zLT5tc2dfY291bnQrKzsKKwkJbXBjNTJ4eF9zcGlfY2hpcHNlbChtcywgMCk7CisJCW1zLT5tZXNzYWdlLT5zdGF0dXMgPSAwOworCQltcy0+bWVzc2FnZS0+Y29tcGxldGUobXMtPm1lc3NhZ2UtPmNvbnRleHQpOworCQltcy0+c3RhdGUgPSBtcGM1Mnh4X3NwaV9mc21zdGF0ZV9pZGxlOworCQlyZXR1cm4gRlNNX0NPTlRJTlVFOworCX0KKworCS8qIFRoZXJlIGlzIGFub3RoZXIgdHJhbnNmZXI7IGtpY2sgaXQgb2ZmICovCisKKwlpZiAobXMtPmNzX2NoYW5nZSkKKwkJbXBjNTJ4eF9zcGlfY2hpcHNlbChtcywgMCk7CisKKwltcy0+dHJhbnNmZXIgPSBjb250YWluZXJfb2YobXMtPnRyYW5zZmVyLT50cmFuc2Zlcl9saXN0Lm5leHQsCisJCQkJICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIsIHRyYW5zZmVyX2xpc3QpOworCW1wYzUyeHhfc3BpX3N0YXJ0X3RyYW5zZmVyKG1zKTsKKwltcy0+c3RhdGUgPSBtcGM1Mnh4X3NwaV9mc21zdGF0ZV90cmFuc2ZlcjsKKwlyZXR1cm4gRlNNX0NPTlRJTlVFOworfQorCisvKioKKyAqIG1wYzUyeHhfc3BpX2ZzbV9wcm9jZXNzIC0gRmluaXRlIFN0YXRlIE1hY2hpbmUgaXRlcmF0aW9uIGZ1bmN0aW9uCisgKiBAaXJxOiBpcnEgbnVtYmVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBGU00gb3IgMCBmb3IgcG9sbGluZworICogQG1zOiBwb2ludGVyIHRvIG1wYzUyeHhfc3BpIGRyaXZlciBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIG1wYzUyeHhfc3BpX2ZzbV9wcm9jZXNzKGludCBpcnEsIHN0cnVjdCBtcGM1Mnh4X3NwaSAqbXMpCit7CisJaW50IHJjID0gRlNNX0NPTlRJTlVFOworCXU4IHN0YXR1cywgZGF0YTsKKworCXdoaWxlIChyYyA9PSBGU01fQ09OVElOVUUpIHsKKwkJLyogSW50ZXJydXB0IGNsZWFyZWQgYnkgcmVhZCBvZiBTVEFUVVMgZm9sbG93ZWQgYnkKKwkJICogcmVhZCBvZiBEQVRBIHJlZ2lzdGVycyAqLworCQlzdGF0dXMgPSBpbl84KG1zLT5yZWdzICsgU1BJX1NUQVRVUyk7CisJCWRhdGEgPSBpbl84KG1zLT5yZWdzICsgU1BJX0RBVEEpOworCQlyYyA9IG1zLT5zdGF0ZShpcnEsIG1zLCBzdGF0dXMsIGRhdGEpOworCX0KKworCWlmIChyYyA9PSBGU01fUE9MTCkKKwkJc2NoZWR1bGVfd29yaygmbXMtPndvcmspOworfQorCisvKioKKyAqIG1wYzUyeHhfc3BpX2lycSAtIElSUSBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1Mnh4X3NwaV9pcnEoaW50IGlycSwgdm9pZCAqX21zKQoreworCXN0cnVjdCBtcGM1Mnh4X3NwaSAqbXMgPSBfbXM7CisJc3Bpbl9sb2NrKCZtcy0+bG9jayk7CisJbXBjNTJ4eF9zcGlfZnNtX3Byb2Nlc3MoaXJxLCBtcyk7CisJc3Bpbl91bmxvY2soJm1zLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogbXBjNTJ4eF9zcGlfd3EgLSBXb3JrcXVldWUgZnVuY3Rpb24gZm9yIHBvbGxpbmcgdGhlIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQgbXBjNTJ4eF9zcGlfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtcGM1Mnh4X3NwaSAqbXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1wYzUyeHhfc3BpLCB3b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zLT5sb2NrLCBmbGFncyk7CisJbXBjNTJ4eF9zcGlfZnNtX3Byb2Nlc3MoMCwgbXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBzcGlfbWFzdGVyIG9wcworICovCisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkICUgOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3BpLT5tb2RlICYgfihTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0xTQl9GSVJTVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPj0gc3BpLT5tYXN0ZXItPm51bV9jaGlwc2VsZWN0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW0tPmFjdHVhbF9sZW5ndGggPSAwOworCW0tPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcy0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm0tPnF1ZXVlLCAmbXMtPnF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcy0+bG9jaywgZmxhZ3MpOworCXNjaGVkdWxlX3dvcmsoJm1zLT53b3JrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogT0YgUGxhdGZvcm0gQnVzIEJpbmRpbmcKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9zcGlfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IG1wYzUyeHhfc3BpICptczsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdTggY3RybDE7CisJaW50IHJjLCBpID0gMDsKKwlpbnQgZ3Bpb19jczsKKworCS8qIE1NSU8gcmVnaXN0ZXJzICovCisJZGV2X2RiZygmb3AtPmRldiwgInByb2JpbmcgbXBjNTIwMCBTUEkgZGV2aWNlXG4iKTsKKwlyZWdzID0gb2ZfaW9tYXAob3AtPm5vZGUsIDApOworCWlmICghcmVncykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KKwljdHJsMSA9IFNQSV9DVFJMMV9TUElFIHwgU1BJX0NUUkwxX1NQRSB8IFNQSV9DVFJMMV9NU1RSOworCW91dF84KHJlZ3MgKyBTUElfQ1RSTDEsIGN0cmwxKTsKKwlvdXRfOChyZWdzICsgU1BJX0NUUkwyLCAweDApOworCW91dF84KHJlZ3MgKyBTUElfREFUQURJUiwgMHhlKTsJLyogU2V0IG91dHB1dCBwaW5zICovCisJb3V0XzgocmVncyArIFNQSV9QT1JUREFUQSwgMHg4KTsJLyogRGVhc3NlcnQgL1NTIHNpZ25hbCAqLworCisJLyogQ2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciBhbmQgcmUtcmVhZCBpdCB0byBjaGVjayBmb3IgYSBNT0RGCisJICogZmFpbHVyZS4gIFRoaXMgZHJpdmVyIGNhbm5vdCBjdXJyZW50bHkgaGFuZGxlIG11bHRpcGxlIG1hc3RlcnMKKwkgKiBvbiB0aGUgU1BJIGJ1cy4gIFRoaXMgZmF1bHQgd2lsbCBhbHNvIG9jY3VyIGlmIHRoZSBTUEkgc2lnbmFscworCSAqIGFyZSBub3QgY29ubmVjdGVkIHRvIGFueSBwaW5zIChwb3J0X2NvbmZpZyBzZXR0aW5nKSAqLworCWluXzgocmVncyArIFNQSV9TVEFUVVMpOworCW91dF84KHJlZ3MgKyBTUElfQ1RSTDEsIGN0cmwxKTsKKworCWluXzgocmVncyArIFNQSV9EQVRBKTsKKwlpZiAoaW5fOChyZWdzICsgU1BJX1NUQVRVUykgJiBTUElfU1RBVFVTX01PREYpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIm1vZGUgZmF1bHQ7IGlzIHBvcnRfY29uZmlnIGNvcnJlY3Q/XG4iKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9pbml0OworCX0KKworCWRldl9kYmcoJm9wLT5kZXYsICJhbGxvY2F0aW5nIHNwaV9tYXN0ZXIgc3RydWN0XG4iKTsKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZvcC0+ZGV2LCBzaXplb2YgKm1zKTsKKwlpZiAoIW1hc3RlcikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKworCW1hc3Rlci0+YnVzX251bSA9IC0xOworCW1hc3Rlci0+c2V0dXAgPSBtcGM1Mnh4X3NwaV9zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gbXBjNTJ4eF9zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0xTQl9GSVJTVDsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgbWFzdGVyKTsKKworCW1zID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCW1zLT5tYXN0ZXIgPSBtYXN0ZXI7CisJbXMtPnJlZ3MgPSByZWdzOworCW1zLT5pcnEwID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCW1zLT5pcnExID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDEpOworCW1zLT5zdGF0ZSA9IG1wYzUyeHhfc3BpX2ZzbXN0YXRlX2lkbGU7CisJbXMtPmlwYl9mcmVxID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShvcC0+bm9kZSk7CisJbXMtPmdwaW9fY3NfY291bnQgPSBvZl9ncGlvX2NvdW50KG9wLT5ub2RlKTsKKwlpZiAobXMtPmdwaW9fY3NfY291bnQgPiAwKSB7CisJCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBtcy0+Z3Bpb19jc19jb3VudDsKKwkJbXMtPmdwaW9fY3MgPSBrbWFsbG9jKG1zLT5ncGlvX2NzX2NvdW50ICogc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghbXMtPmdwaW9fY3MpIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2FsbG9jOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG1zLT5ncGlvX2NzX2NvdW50OyBpKyspIHsKKwkJCWdwaW9fY3MgPSBvZl9nZXRfZ3BpbyhvcC0+bm9kZSwgaSk7CisJCQlpZiAoZ3Bpb19jcyA8IDApIHsKKwkJCQlkZXZfZXJyKCZvcC0+ZGV2LAorCQkJCQkiY291bGQgbm90IHBhcnNlIHRoZSBncGlvIGZpZWxkICIKKwkJCQkJImluIG9mdHJlZVxuIik7CisJCQkJcmMgPSAtRU5PREVWOworCQkJCWdvdG8gZXJyX2dwaW87CisJCQl9CisKKwkJCXJjID0gZ3Bpb19yZXF1ZXN0KGdwaW9fY3MsIGRldl9uYW1lKCZvcC0+ZGV2KSk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZfZXJyKCZvcC0+ZGV2LAorCQkJCQkiY2FuJ3QgcmVxdWVzdCBzcGkgY3MgZ3BpbyAjJWQgIgorCQkJCQkib24gZ3BpbyBsaW5lICVkXG4iLCBpLCBncGlvX2NzKTsKKwkJCQlnb3RvIGVycl9ncGlvOworCQkJfQorCisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19jcywgMSk7CisJCQltcy0+Z3Bpb19jc1tpXSA9IGdwaW9fY3M7CisJCX0KKwl9IGVsc2UgeworCQltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gMTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmbXMtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtcy0+cXVldWUpOworCUlOSVRfV09SSygmbXMtPndvcmssIG1wYzUyeHhfc3BpX3dxKTsKKworCS8qIERlY2lkZSBpZiBpbnRlcnJ1cHRzIGNhbiBiZSB1c2VkICovCisJaWYgKG1zLT5pcnEwICYmIG1zLT5pcnExKSB7CisJCXJjID0gcmVxdWVzdF9pcnEobXMtPmlycTAsIG1wYzUyeHhfc3BpX2lycSwgMCwKKwkJCQkgICJtcGM1MjAwLXNwaS1tb2RmIiwgbXMpOworCQlyYyB8PSByZXF1ZXN0X2lycShtcy0+aXJxMSwgbXBjNTJ4eF9zcGlfaXJxLCAwLAorCQkJCSAgIm1wYzUyMDAtc3BpLXNwaWYiLCBtcyk7CisJCWlmIChyYykgeworCQkJZnJlZV9pcnEobXMtPmlycTAsIG1zKTsKKwkJCWZyZWVfaXJxKG1zLT5pcnExLCBtcyk7CisJCQltcy0+aXJxMCA9IG1zLT5pcnExID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIG9wZXJhdGUgaW4gcG9sbGVkIG1vZGUgKi8KKwkJbXMtPmlycTAgPSBtcy0+aXJxMSA9IDA7CisJfQorCisJaWYgKCFtcy0+aXJxMCkKKwkJZGV2X2luZm8oJm9wLT5kZXYsICJ1c2luZyBwb2xsZWQgbW9kZVxuIik7CisKKwlkZXZfZGJnKCZvcC0+ZGV2LCAicmVnaXN0ZXJpbmcgc3BpX21hc3RlciBzdHJ1Y3RcbiIpOworCXJjID0gc3BpX3JlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCWlmIChyYykKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisKKwlvZl9yZWdpc3Rlcl9zcGlfZGV2aWNlcyhtYXN0ZXIsIG9wLT5ub2RlKTsKKwlkZXZfaW5mbygmbXMtPm1hc3Rlci0+ZGV2LCAicmVnaXN0ZXJlZCBNUEM1MjAwIFNQSSBidXNcbiIpOworCisJcmV0dXJuIHJjOworCisgZXJyX3JlZ2lzdGVyOgorCWRldl9lcnIoJm1zLT5tYXN0ZXItPmRldiwgImluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKyBlcnJfZ3BpbzoKKwl3aGlsZSAoaS0tID4gMCkKKwkJZ3Bpb19mcmVlKG1zLT5ncGlvX2NzW2ldKTsKKworCWtmcmVlKG1zLT5ncGlvX2NzKTsKKyBlcnJfYWxsb2M6CisgZXJyX2luaXQ6CisJaW91bm1hcChyZWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wYzUyeHhfc3BpX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgbXBjNTJ4eF9zcGkgKm1zID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWludCBpOworCisJZnJlZV9pcnEobXMtPmlycTAsIG1zKTsKKwlmcmVlX2lycShtcy0+aXJxMSwgbXMpOworCisJZm9yIChpID0gMDsgaSA8IG1zLT5ncGlvX2NzX2NvdW50OyBpKyspCisJCWdwaW9fZnJlZShtcy0+Z3Bpb19jc1tpXSk7CisKKwlrZnJlZShtcy0+Z3Bpb19jcyk7CisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwlpb3VubWFwKG1zLT5yZWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcGkiLCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXBjNTJ4eF9zcGlfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3NwaV9vZl9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibXBjNTJ4eC1zcGkiLAorCS5tYXRjaF90YWJsZSA9IG1wYzUyeHhfc3BpX21hdGNoLAorCS5wcm9iZSA9IG1wYzUyeHhfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChtcGM1Mnh4X3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfc3BpX29mX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtcGM1Mnh4X3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUyeHhfc3BpX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF9zcGlfb2ZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1wYzUyeHhfc3BpX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3NwaV8xMDBrLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3NwaV8xMDBrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1NWQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfc3BpXzEwMGsuYwpAQCAtMCwwICsxLDYzNSBAQAorLyoKKyAqIE9NQVA3eHggU1BJIDEwMGsgY29udHJvbGxlciBkcml2ZXIKKyAqIEF1dGhvcjogRmFicmljZSBDcm9oYXMgPGZjcm9oYXNAZ21haWwuY29tPgorICogZnJvbSBvcmlnaW5hbCBvbWFwMV9tY3NwaSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogICAgICBTYW11ZWwgT3J0aXogPHNhbXVlbC5vcnRpekBub2tpYS5jb20+IGFuZAorICogICAgICAgICAgICAgIEp1aGEgWXJq77+9bO+/vSA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2RlZmluZSBPTUFQMV9TUEkxMDBLX01BWF9GUkVRICAgICAgICAgIDQ4MDAwMDAwCisKKyNkZWZpbmUgSUNSX1NQSVRBUyAgICAgIChPTUFQN1hYX0lDUl9CQVNFICsgMHgxMikKKworI2RlZmluZSBTUElfU0VUVVAxICAgICAgMHgwMAorI2RlZmluZSBTUElfU0VUVVAyICAgICAgMHgwMgorI2RlZmluZSBTUElfQ1RSTCAgICAgICAgMHgwNAorI2RlZmluZSBTUElfU1RBVFVTICAgICAgMHgwNgorI2RlZmluZSBTUElfVFhfTFNCICAgICAgMHgwOAorI2RlZmluZSBTUElfVFhfTVNCICAgICAgMHgwYQorI2RlZmluZSBTUElfUlhfTFNCICAgICAgMHgwYworI2RlZmluZSBTUElfUlhfTVNCICAgICAgMHgwZQorCisjZGVmaW5lIFNQSV9TRVRVUDFfSU5UX1JFQURfRU5BQkxFICAgICAgKDFVTCA8PCA1KQorI2RlZmluZSBTUElfU0VUVVAxX0lOVF9XUklURV9FTkFCTEUgICAgICgxVUwgPDwgNCkKKyNkZWZpbmUgU1BJX1NFVFVQMV9DTE9DS19ESVZJU09SKHgpICAgICAoKHgpIDw8IDEpCisjZGVmaW5lIFNQSV9TRVRVUDFfQ0xPQ0tfRU5BQkxFICAgICAgICAgKDFVTCA8PCAwKQorCisjZGVmaW5lIFNQSV9TRVRVUDJfQUNUSVZFX0VER0VfRkFMTElORyAgKDBVTCA8PCAwKQorI2RlZmluZSBTUElfU0VUVVAyX0FDVElWRV9FREdFX1JJU0lORyAgICgxVUwgPDwgMCkKKyNkZWZpbmUgU1BJX1NFVFVQMl9ORUdBVElWRV9MRVZFTCAgICAgICAoMFVMIDw8IDUpCisjZGVmaW5lIFNQSV9TRVRVUDJfUE9TSVRJVkVfTEVWRUwgICAgICAgKDFVTCA8PCA1KQorI2RlZmluZSBTUElfU0VUVVAyX0xFVkVMX1RSSUdHRVIgICAgICAgICgwVUwgPDwgMTApCisjZGVmaW5lIFNQSV9TRVRVUDJfRURHRV9UUklHR0VSICAgICAgICAgKDFVTCA8PCAxMCkKKworI2RlZmluZSBTUElfQ1RSTF9TRU4oeCkgICAgICAgICAgICAgICAgICgoeCkgPDwgNykKKyNkZWZpbmUgU1BJX0NUUkxfV09SRF9TSVpFKHgpICAgICAgICAgICAoKCh4KSAtIDEpIDw8IDIpCisjZGVmaW5lIFNQSV9DVFJMX1dSICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCAxKQorI2RlZmluZSBTUElfQ1RSTF9SRCAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgMCkKKworI2RlZmluZSBTUElfU1RBVFVTX1dFICAgICAgICAgICAgICAgICAgICgxVUwgPDwgMSkKKyNkZWZpbmUgU1BJX1NUQVRVU19SRCAgICAgICAgICAgICAgICAgICAoMVVMIDw8IDApCisKKyNkZWZpbmUgV1JJVEUgMAorI2RlZmluZSBSRUFEICAxCisKKworLyogdXNlIFBJTyBmb3Igc21hbGwgdHJhbnNmZXJzLCBhdm9pZGluZyBETUEgc2V0dXAvdGVhcmRvd24gb3ZlcmhlYWQgYW5kCisgKiBjYWNoZSBvcGVyYXRpb25zOyBiZXR0ZXIgaGV1cmlzdGljcyBjb25zaWRlciB3b3Jkc2l6ZSBhbmQgYml0cmF0ZS4KKyAqLworI2RlZmluZSBETUFfTUlOX0JZVEVTICAgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBTUElfUlVOTklORwkwCisjZGVmaW5lIFNQSV9TSFVURE9XTgkxCisKK3N0cnVjdCBvbWFwMV9zcGkxMDBrIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICB3b3JrOworCisJLyogbG9jayBwcm90ZWN0cyBxdWV1ZSBhbmQgcmVnaXN0ZXJzICovCisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBtc2dfcXVldWU7CisJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgKm1hc3RlcjsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAqaWNrOworCXN0cnVjdCBjbGsgICAgICAgICAgICAgICpmY2s7CisKKwkvKiBWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbGxlciAqLworCXZvaWQgX19pb21lbSAgICAgICAgICAgICpiYXNlOworCisJLyogU3RhdGUgb2YgdGhlIFNQSSAqLworCXVuc2lnbmVkIGludAkJc3RhdGU7Cit9OworCitzdHJ1Y3Qgb21hcDFfc3BpMTAwa19jcyB7CisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgKmJhc2U7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd29yZF9sZW47Cit9OworCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm9tYXAxX3NwaTEwMGtfd3E7CisKKyNkZWZpbmUgTU9EX1JFR19CSVQodmFsLCBtYXNrLCBzZXQpIGRvIHsgXAorCWlmIChzZXQpIFwKKwkJdmFsIHw9IG1hc2s7IFwKKwllbHNlIFwKKwkJdmFsICY9IH5tYXNrOyBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBzcGkxMDBrX2VuYWJsZV9jbG9jayhzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IG9tYXAxX3NwaTEwMGsgKnNwaTEwMGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwkvKiBlbmFibGUgU1BJICovCisJdmFsID0gcmVhZHcoc3BpMTAway0+YmFzZSArIFNQSV9TRVRVUDEpOworCXZhbCB8PSBTUElfU0VUVVAxX0NMT0NLX0VOQUJMRTsKKwl3cml0ZXcodmFsLCBzcGkxMDBrLT5iYXNlICsgU1BJX1NFVFVQMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNwaTEwMGtfZGlzYWJsZV9jbG9jayhzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IG9tYXAxX3NwaTEwMGsgKnNwaTEwMGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwkvKiBkaXNhYmxlIFNQSSAqLworCXZhbCA9IHJlYWR3KHNwaTEwMGstPmJhc2UgKyBTUElfU0VUVVAxKTsKKwl2YWwgJj0gflNQSV9TRVRVUDFfQ0xPQ0tfRU5BQkxFOworCXdyaXRldyh2YWwsIHNwaTEwMGstPmJhc2UgKyBTUElfU0VUVVAxKTsKK30KKworc3RhdGljIHZvaWQgc3BpMTAwa193cml0ZV9kYXRhKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsIGludCBsZW4sIGludCBkYXRhKQoreworCXN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJLyogd3JpdGUgMTYtYml0IHdvcmQgKi8KKwlzcGkxMDBrX2VuYWJsZV9jbG9jayhtYXN0ZXIpOworCXdyaXRldyggZGF0YSAsIHNwaTEwMGstPmJhc2UgKyBTUElfVFhfTVNCKTsKKworCXdyaXRldyhTUElfQ1RSTF9TRU4oMCkgfAorCSAgICAgICBTUElfQ1RSTF9XT1JEX1NJWkUobGVuKSB8CisJICAgICAgIFNQSV9DVFJMX1dSLAorCSAgICAgICBzcGkxMDBrLT5iYXNlICsgU1BJX0NUUkwpOworCisJLyogV2FpdCBmb3IgYml0IGFjayBzZW5kIGNoYW5nZSAqLworCXdoaWxlKChyZWFkdyhzcGkxMDBrLT5iYXNlICsgU1BJX1NUQVRVUykgJiBTUElfU1RBVFVTX1dFKSAhPSBTUElfU1RBVFVTX1dFKTsKKwl1ZGVsYXkoMTAwMCk7CisKKwlzcGkxMDBrX2Rpc2FibGVfY2xvY2sobWFzdGVyKTsKK30KKworc3RhdGljIGludCBzcGkxMDBrX3JlYWRfZGF0YShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLCBpbnQgbGVuKQoreworCWludCBkYXRhSCxkYXRhTDsKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwayAqc3BpMTAwayA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXNwaTEwMGtfZW5hYmxlX2Nsb2NrKG1hc3Rlcik7CisJd3JpdGV3KFNQSV9DVFJMX1NFTigwKSB8CisJICAgICAgIFNQSV9DVFJMX1dPUkRfU0laRShsZW4pIHwKKwkgICAgICAgU1BJX0NUUkxfUkQsCisJICAgICAgIHNwaTEwMGstPmJhc2UgKyBTUElfQ1RSTCk7CisKKwl3aGlsZSgocmVhZHcoc3BpMTAway0+YmFzZSArIFNQSV9TVEFUVVMpICYgU1BJX1NUQVRVU19SRCkgIT0gU1BJX1NUQVRVU19SRCk7CisJdWRlbGF5KDEwMDApOworCisJZGF0YUwgPSByZWFkdyhzcGkxMDBrLT5iYXNlICsgU1BJX1JYX0xTQik7CisJZGF0YUggPSByZWFkdyhzcGkxMDBrLT5iYXNlICsgU1BJX1JYX01TQik7CisJc3BpMTAwa19kaXNhYmxlX2Nsb2NrKG1hc3Rlcik7CisKKwlyZXR1cm4gZGF0YUw7Cit9CisKK3N0YXRpYyB2b2lkIHNwaTEwMGtfb3BlbihzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQoreworCS8qIGdldCBjb250cm9sIG9mIFNQSSAqLworCXN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJd3JpdGV3KFNQSV9TRVRVUDFfSU5UX1JFQURfRU5BQkxFIHwKKwkgICAgICAgU1BJX1NFVFVQMV9JTlRfV1JJVEVfRU5BQkxFIHwKKwkgICAgICAgU1BJX1NFVFVQMV9DTE9DS19ESVZJU09SKDApLCBzcGkxMDBrLT5iYXNlICsgU1BJX1NFVFVQMSk7CisKKwkvKiBjb25maWd1cmUgY2xvY2sgYW5kIGludGVycnVwdHMgKi8KKwl3cml0ZXcoU1BJX1NFVFVQMl9BQ1RJVkVfRURHRV9GQUxMSU5HIHwKKwkgICAgICAgU1BJX1NFVFVQMl9ORUdBVElWRV9MRVZFTCB8CisJICAgICAgIFNQSV9TRVRVUDJfTEVWRUxfVFJJR0dFUiwgc3BpMTAway0+YmFzZSArIFNQSV9TRVRVUDIpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9zcGkxMDBrX2ZvcmNlX2NzKHN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrLCBpbnQgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCXdyaXRldygweDA1ZmMsIHNwaTEwMGstPmJhc2UgKyBTUElfQ1RSTCk7CisJZWxzZQorCQl3cml0ZXcoMHgwNWZkLCBzcGkxMDBrLT5iYXNlICsgU1BJX0NUUkwpOworfQorCitzdGF0aWMgdW5zaWduZWQKK29tYXAxX3NwaTEwMGtfdHhyeF9waW8oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcikKK3sKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwayAgICAqc3BpMTAwazsKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwa19jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgY291bnQsIGM7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd29yZF9sZW47CisKKwlzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJY291bnQgPSB4ZmVyLT5sZW47CisJYyA9IGNvdW50OworCXdvcmRfbGVuID0gY3MtPndvcmRfbGVuOworCisJLyogUlhfT05MWSBtb2RlIG5lZWRzIGR1bW15IGRhdGEgaW4gVFggcmVnICovCisJaWYgKHhmZXItPnR4X2J1ZiA9PSBOVUxMKQorCQlzcGkxMDBrX3dyaXRlX2RhdGEoc3BpLT5tYXN0ZXIsd29yZF9sZW4sIDApOworCisJaWYgKHdvcmRfbGVuIDw9IDgpIHsKKwkJdTggICAgICAgICAgICAgICpyeDsKKwkJY29uc3QgdTggICAgICAgICp0eDsKKworCQlyeCA9IHhmZXItPnJ4X2J1ZjsKKwkJdHggPSB4ZmVyLT50eF9idWY7CisJCWRvIHsKKwkJCWMtPTE7CisJCQlpZiAoeGZlci0+dHhfYnVmICE9IE5VTEwpCisJCQkJc3BpMTAwa193cml0ZV9kYXRhKHNwaS0+bWFzdGVyLHdvcmRfbGVuLCAqdHgpOworCQkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMKQorCQkJCSpyeCA9IHNwaTEwMGtfcmVhZF9kYXRhKHNwaS0+bWFzdGVyLHdvcmRfbGVuKTsKKwkJfSB3aGlsZShjKTsKKwl9IGVsc2UgaWYgKHdvcmRfbGVuIDw9IDE2KSB7CisJCXUxNiAgICAgICAgICAgICAqcng7CisJCWNvbnN0IHUxNiAgICAgICAqdHg7CisKKwkJcnggPSB4ZmVyLT5yeF9idWY7CisJCXR4ID0geGZlci0+dHhfYnVmOworCQlkbyB7CisJCQljLT0yOworCQkJaWYgKHhmZXItPnR4X2J1ZiAhPSBOVUxMKQorCQkJCXNwaTEwMGtfd3JpdGVfZGF0YShzcGktPm1hc3Rlcix3b3JkX2xlbiwgKnR4KyspOworCQkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMKQorCQkJCSpyeCsrID0gc3BpMTAwa19yZWFkX2RhdGEoc3BpLT5tYXN0ZXIsd29yZF9sZW4pOworCQl9IHdoaWxlKGMpOworCX0gZWxzZSBpZiAod29yZF9sZW4gPD0gMzIpIHsKKwkJdTMyICAgICAgICAgICAgICpyeDsKKwkJY29uc3QgdTMyICAgICAgICp0eDsKKworCQlyeCA9IHhmZXItPnJ4X2J1ZjsKKwkJdHggPSB4ZmVyLT50eF9idWY7CisJCWRvIHsKKwkJCWMtPTQ7CisJCQlpZiAoeGZlci0+dHhfYnVmICE9IE5VTEwpCisJCQkJc3BpMTAwa193cml0ZV9kYXRhKHNwaS0+bWFzdGVyLHdvcmRfbGVuLCAqdHgpOworCQkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMKQorCQkJCSpyeCA9IHNwaTEwMGtfcmVhZF9kYXRhKHNwaS0+bWFzdGVyLHdvcmRfbGVuKTsKKwkJfSB3aGlsZShjKTsKKwl9CisJcmV0dXJuIGNvdW50IC0gYzsKK30KKworLyogY2FsbGVkIG9ubHkgd2hlbiBubyB0cmFuc2ZlciBpcyBhY3RpdmUgdG8gdGhpcyBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgb21hcDFfc3BpMTAwa19zZXR1cF90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc3RydWN0IG9tYXAxX3NwaTEwMGtfY3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCXU4IHdvcmRfbGVuID0gc3BpLT5iaXRzX3Blcl93b3JkOworCisJaWYgKHQgIT0gTlVMTCAmJiB0LT5iaXRzX3Blcl93b3JkKQorCQl3b3JkX2xlbiA9IHQtPmJpdHNfcGVyX3dvcmQ7CisJaWYgKCF3b3JkX2xlbikKKwkJd29yZF9sZW4gPSA4OworCisJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA+IDMyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljcy0+d29yZF9sZW4gPSB3b3JkX2xlbjsKKworCS8qIFNQSSBpbml0IGJlZm9yZSB0cmFuc2ZlciAqLworCXdyaXRldygweDNlICwgc3BpMTAway0+YmFzZSArIFNQSV9TRVRVUDEpOworCXdyaXRldygweDAwICwgc3BpMTAway0+YmFzZSArIFNQSV9TVEFUVVMpOworCXdyaXRldygweDNlICwgc3BpMTAway0+YmFzZSArIFNQSV9DVFJMKTsKKworCXJldHVybiAwOworfQorCisvKiB0aGUgc3BpLT5tb2RlIGJpdHMgdW5kZXJzdG9vZCBieSB0aGlzIGRyaXZlcjogKi8KKyNkZWZpbmUgTU9ERUJJVFMgKFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfQ1NfSElHSCkKKworc3RhdGljIGludCBvbWFwMV9zcGkxMDBrX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50ICAgICAgICAgICAgICAgICAgICAgcmV0OworCXN0cnVjdCBvbWFwMV9zcGkxMDBrICAgICpzcGkxMDBrOworCXN0cnVjdCBvbWFwMV9zcGkxMDBrX2NzICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKworCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgPCA0IHx8IHNwaS0+Yml0c19wZXJfd29yZCA+IDMyKSB7CisJCSBkZXZfZGJnKCZzcGktPmRldiwgInNldHVwOiB1bnN1cHBvcnRlZCAlZCBiaXQgd29yZHNcbiIsCisJCQlzcGktPmJpdHNfcGVyX3dvcmQpOworCQkgcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3BpMTAwayA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJaWYgKCFjcykgeworCQljcyA9IGt6YWxsb2Moc2l6ZW9mICpjcywgR0ZQX0tFUk5FTCk7CisJCWlmICghY3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJY3MtPmJhc2UgPSBzcGkxMDBrLT5iYXNlICsgc3BpLT5jaGlwX3NlbGVjdCAqIDB4MTQ7CisJCXNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IGNzOworCX0KKworCXNwaTEwMGtfb3BlbihzcGktPm1hc3Rlcik7CisKKwljbGtfZW5hYmxlKHNwaTEwMGstPmljayk7CisJY2xrX2VuYWJsZShzcGkxMDBrLT5mY2spOworCisJcmV0ID0gb21hcDFfc3BpMTAwa19zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOworCisJY2xrX2Rpc2FibGUoc3BpMTAway0+aWNrKTsKKwljbGtfZGlzYWJsZShzcGkxMDBrLT5mY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb21hcDFfc3BpMTAwa193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwayAgICAqc3BpMTAwazsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaTEwMGsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9tYXAxX3NwaTEwMGssIHdvcmspOworCXNwaW5fbG9ja19pcnEoJnNwaTEwMGstPmxvY2spOworCisJY2xrX2VuYWJsZShzcGkxMDBrLT5pY2spOworCWNsa19lbmFibGUoc3BpMTAway0+ZmNrKTsKKworCS8qIFdlIG9ubHkgZW5hYmxlIG9uZSBjaGFubmVsIGF0IGEgdGltZSAtLSB0aGUgb25lIHdob3NlIG1lc3NhZ2UgaXMKKwkgKiBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgLS0gYWx0aG91Z2ggdGhpcyBjb250cm9sbGVyIHdvdWxkIGdsYWRseQorCSAqIGFyYml0cmF0ZSBhbW9uZyBtdWx0aXBsZSBjaGFubmVscy4gIFRoaXMgY29ycmVzcG9uZHMgdG8gInNpbmdsZQorCSAqIGNoYW5uZWwiIG1hc3RlciBtb2RlLiAgQXMgYSBzaWRlIGVmZmVjdCwgd2UgbmVlZCB0byBtYW5hZ2UgdGhlCisJICogY2hpcHNlbGVjdCB3aXRoIHRoZSBGT1JDRSBiaXQgLi4uIENTICE9IGNoYW5uZWwgZW5hYmxlLgorCSAqLworCSB3aGlsZSAoIWxpc3RfZW1wdHkoJnNwaTEwMGstPm1zZ19xdWV1ZSkpIHsKKwkJc3RydWN0IHNwaV9tZXNzYWdlICAgICAgICAgICAgICAqbTsKKwkJc3RydWN0IHNwaV9kZXZpY2UgICAgICAgICAgICAgICAqc3BpOworCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICAgICAgICAgICAgICp0ID0gTlVMTDsKKwkJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc19hY3RpdmUgPSAwOworCQlzdHJ1Y3Qgb21hcDFfc3BpMTAwa19jcyAgICAgICAgICpjczsKKwkJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJfb3ZlcnJpZGUgPSAwOworCisJCW0gPSBjb250YWluZXJfb2Yoc3BpMTAway0+bXNnX3F1ZXVlLm5leHQsIHN0cnVjdCBzcGlfbWVzc2FnZSwKKwkJCQkgcXVldWUpOworCisJCWxpc3RfZGVsX2luaXQoJm0tPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZzcGkxMDBrLT5sb2NrKTsKKworCQlzcGkgPSBtLT5zcGk7CisJCWNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm0tPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQkJaWYgKHQtPnR4X2J1ZiA9PSBOVUxMICYmIHQtPnJ4X2J1ZiA9PSBOVUxMICYmIHQtPmxlbikgeworCQkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocGFyX292ZXJyaWRlIHx8IHQtPnNwZWVkX2h6IHx8IHQtPmJpdHNfcGVyX3dvcmQpIHsKKwkJCQlwYXJfb3ZlcnJpZGUgPSAxOworCQkJCXN0YXR1cyA9IG9tYXAxX3NwaTEwMGtfc2V0dXBfdHJhbnNmZXIoc3BpLCB0KTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKCF0LT5zcGVlZF9oeiAmJiAhdC0+Yml0c19wZXJfd29yZCkKKwkJCQkJcGFyX292ZXJyaWRlID0gMDsKKwkJCX0KKworCQkJaWYgKCFjc19hY3RpdmUpIHsKKwkJCQlvbWFwMV9zcGkxMDBrX2ZvcmNlX2NzKHNwaTEwMGssIDEpOworCQkJCWNzX2FjdGl2ZSA9IDE7CisJCQl9CisKKwkJCWlmICh0LT5sZW4pIHsKKwkJCQl1bnNpZ25lZCBjb3VudDsKKworCQkJCS8qIFJYX09OTFkgbW9kZSBuZWVkcyBkdW1teSBkYXRhIGluIFRYIHJlZyAqLworCQkJCWlmICh0LT50eF9idWYgPT0gTlVMTCkKKwkJCQkJc3BpMTAwa193cml0ZV9kYXRhKHNwaS0+bWFzdGVyLCA4LCAwKTsKKworCQkJCWNvdW50ID0gb21hcDFfc3BpMTAwa190eHJ4X3BpbyhzcGksIHQpOworCQkJCW0tPmFjdHVhbF9sZW5ndGggKz0gY291bnQ7CisKKwkJCQlpZiAoY291bnQgIT0gdC0+bGVuKSB7CisJCQkJCXN0YXR1cyA9IC1FSU87CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHQtPmRlbGF5X3VzZWNzKQorCQkJCXVkZWxheSh0LT5kZWxheV91c2Vjcyk7CisKKwkJCS8qIGlnbm9yZSB0aGUgImxlYXZlIGl0IG9uIGFmdGVyIGxhc3QgeGZlciIgaGludCAqLworCisJCQlpZiAodC0+Y3NfY2hhbmdlKSB7CisJCQkJb21hcDFfc3BpMTAwa19mb3JjZV9jcyhzcGkxMDBrLCAwKTsKKwkJCQljc19hY3RpdmUgPSAwOworCQkJfQorCQl9CisKKwkJLyogUmVzdG9yZSBkZWZhdWx0cyBpZiB0aGV5IHdlcmUgb3ZlcnJpZGVuICovCisJCWlmIChwYXJfb3ZlcnJpZGUpIHsKKwkJCXBhcl9vdmVycmlkZSA9IDA7CisJCQlzdGF0dXMgPSBvbWFwMV9zcGkxMDBrX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisJCX0KKworCQlpZiAoY3NfYWN0aXZlKQorCQkJb21hcDFfc3BpMTAwa19mb3JjZV9jcyhzcGkxMDBrLCAwKTsKKworCQltLT5zdGF0dXMgPSBzdGF0dXM7CisJCW0tPmNvbXBsZXRlKG0tPmNvbnRleHQpOworCisJCXNwaW5fbG9ja19pcnEoJnNwaTEwMGstPmxvY2spOworCX0KKworCWNsa19kaXNhYmxlKHNwaTEwMGstPmljayk7CisJY2xrX2Rpc2FibGUoc3BpMTAway0+ZmNrKTsKKwlzcGluX3VubG9ja19pcnEoJnNwaTEwMGstPmxvY2spOworCisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNwaSB0cmFuc2ZlciBmYWlsZWQgd2l0aCAlZFxuIiwgc3RhdHVzKTsKK30KKworc3RhdGljIGludCBvbWFwMV9zcGkxMDBrX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSkKK3sKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwayAgICAqc3BpMTAwazsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBmbGFnczsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICAgICAqdDsKKworCW0tPmFjdHVhbF9sZW5ndGggPSAwOworCW0tPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCXNwaTEwMGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCS8qIERvbid0IGFjY2VwdCBuZXcgd29yayBpZiB3ZSdyZSBzaHV0dGluZyBkb3duICovCisJaWYgKHNwaTEwMGstPnN0YXRlID09IFNQSV9TSFVURE9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiByZWplY3QgaW52YWxpZCBtZXNzYWdlcyBhbmQgdHJhbnNmZXJzICovCisJaWYgKGxpc3RfZW1wdHkoJm0tPnRyYW5zZmVycykgfHwgIW0tPmNvbXBsZXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm0tPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQljb25zdCB2b2lkICAgICAgKnR4X2J1ZiA9IHQtPnR4X2J1ZjsKKwkJdm9pZCAgICAgICAgICAgICpyeF9idWYgPSB0LT5yeF9idWY7CisJCXVuc2lnbmVkICAgICAgICBsZW4gPSB0LT5sZW47CisKKwkJaWYgKHQtPnNwZWVkX2h6ID4gT01BUDFfU1BJMTAwS19NQVhfRlJFUQorCQkJCXx8IChsZW4gJiYgIShyeF9idWYgfHwgdHhfYnVmKSkKKwkJCQl8fCAodC0+Yml0c19wZXJfd29yZCAmJgorCQkJCQkoICB0LT5iaXRzX3Blcl93b3JkIDwgNAorCQkJCQl8fCB0LT5iaXRzX3Blcl93b3JkID4gMzIpKSkgeworCQkJZGV2X2RiZygmc3BpLT5kZXYsICJ0cmFuc2ZlcjogJWQgSHosICVkICVzJXMsICVkIGJwd1xuIiwKKwkJCQkJdC0+c3BlZWRfaHosCisJCQkJCWxlbiwKKwkJCQkJdHhfYnVmID8gInR4IiA6ICIiLAorCQkJCQlyeF9idWYgPyAicngiIDogIiIsCisJCQkJCXQtPmJpdHNfcGVyX3dvcmQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAodC0+c3BlZWRfaHogJiYgdC0+c3BlZWRfaHogPCBPTUFQMV9TUEkxMDBLX01BWF9GUkVRLygxPDwxNikpIHsKKwkJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgSHogbWF4IGV4Y2VlZHMgJWRcbiIsCisJCQkJCXQtPnNwZWVkX2h6LAorCQkJCQlPTUFQMV9TUEkxMDBLX01BWF9GUkVRLygxPDwxNikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcGkxMDBrLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbS0+cXVldWUsICZzcGkxMDBrLT5tc2dfcXVldWUpOworCXF1ZXVlX3dvcmsob21hcDFfc3BpMTAwa193cSwgJnNwaTEwMGstPndvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaTEwMGstPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zcGkxMDBrX3Jlc2V0KHN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMV9zcGkxMDBrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgKm1hc3RlcjsKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwayAgICAqc3BpMTAwazsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOworCisJaWYgKCFwZGV2LT5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZiAqc3BpMTAwayk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1hc3RlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChwZGV2LT5pZCAhPSAtMSkKKwkgICAgICAgbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CisKKwltYXN0ZXItPnNldHVwID0gb21hcDFfc3BpMTAwa19zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gb21hcDFfc3BpMTAwa190cmFuc2ZlcjsKKwltYXN0ZXItPmNsZWFudXAgPSBOVUxMOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSAyOworCW1hc3Rlci0+bW9kZV9iaXRzID0gTU9ERUJJVFM7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWFzdGVyKTsKKworCXNwaTEwMGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3BpMTAway0+bWFzdGVyID0gbWFzdGVyOworCisJLyoKKwkgKiBUaGUgbWVtb3J5IHJlZ2lvbiBiYXNlIGFkZHJlc3MgaXMgdGFrZW4gYXMgdGhlIHBsYXRmb3JtX2RhdGEuCisJICogWW91IHNob3VsZCBhbGxvY2F0ZSB0aGlzIHdpdGggaW9yZW1hcCgpIGJlZm9yZSBpbml0aWFsaXppbmcKKwkgKiB0aGUgU1BJLgorCSAqLworCXNwaTEwMGstPmJhc2UgPSAodm9pZCBfX2lvbWVtICopIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJSU5JVF9XT1JLKCZzcGkxMDBrLT53b3JrLCBvbWFwMV9zcGkxMDBrX3dvcmspOworCisJc3Bpbl9sb2NrX2luaXQoJnNwaTEwMGstPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZzcGkxMDBrLT5tc2dfcXVldWUpOworCXNwaTEwMGstPmljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIoc3BpMTAway0+aWNrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgc3BpMTAwa19pY2tcbiIpOworCQlzdGF0dXMgPSBQVFJfRVJSKHNwaTEwMGstPmljayk7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlzcGkxMDBrLT5mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKHNwaTEwMGstPmZjaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHNwaTEwMGtfZmNrXG4iKTsKKwkJc3RhdHVzID0gUFRSX0VSUihzcGkxMDBrLT5mY2spOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKG9tYXAxX3NwaTEwMGtfcmVzZXQoc3BpMTAwaykgPCAwKQorCQlnb3RvIGVycjM7CisKKwlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyMzsKKworCXNwaTEwMGstPnN0YXRlID0gU1BJX1JVTk5JTkc7CisKKwlyZXR1cm4gc3RhdHVzOworCitlcnIzOgorCWNsa19wdXQoc3BpMTAway0+ZmNrKTsKK2VycjI6CisJY2xrX3B1dChzcGkxMDBrLT5pY2spOworZXJyMToKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG9tYXAxX3NwaTEwMGtfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgKm1hc3RlcjsKKwlzdHJ1Y3Qgb21hcDFfc3BpMTAwayAgICAqc3BpMTAwazsKKwlzdHJ1Y3QgcmVzb3VyY2UgICAgICAgICAqcjsKKwl1bnNpZ25lZAkJbGltaXQgPSA1MDA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJc3RhdHVzID0gMDsKKworCW1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwaTEwMGstPmxvY2ssIGZsYWdzKTsKKworCXNwaTEwMGstPnN0YXRlID0gU1BJX1NIVVRET1dOOworCXdoaWxlICghbGlzdF9lbXB0eSgmc3BpMTAway0+bXNnX3F1ZXVlKSAmJiBsaW1pdC0tKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaTEwMGstPmxvY2ssIGZsYWdzKTsKKwkJbXNsZWVwKDEwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNwaTEwMGstPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJnNwaTEwMGstPm1zZ19xdWV1ZSkpCisJCXN0YXR1cyA9IC1FQlVTWTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaTEwMGstPmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWNsa19wdXQoc3BpMTAway0+ZmNrKTsKKwljbGtfcHV0KHNwaTEwMGstPmljayk7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCXNwaV91bnJlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAxX3NwaTEwMGtfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJvbWFwMV9zcGkxMDBrIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZQkJPSBfX2V4aXRfcChvbWFwMV9zcGkxMDBrX3JlbW92ZSksCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAxX3NwaTEwMGtfaW5pdCh2b2lkKQoreworCW9tYXAxX3NwaTEwMGtfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCW9tYXAxX3NwaTEwMGtfZHJpdmVyLmRyaXZlci5uYW1lKTsKKworCWlmIChvbWFwMV9zcGkxMDBrX3dxID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9tYXAxX3NwaTEwMGtfZHJpdmVyLCBvbWFwMV9zcGkxMDBrX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAxX3NwaTEwMGtfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMV9zcGkxMDBrX2RyaXZlcik7CisKKwlkZXN0cm95X3dvcmtxdWV1ZShvbWFwMV9zcGkxMDBrX3dxKTsKK30KKworbW9kdWxlX2luaXQob21hcDFfc3BpMTAwa19pbml0KTsKK21vZHVsZV9leGl0KG9tYXAxX3NwaTEwMGtfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiT01BUDd4eCBTUEkgMTAwayBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRmFicmljZSBDcm9oYXMgPGZjcm9oYXNAZ21haWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggYzhjMmI2OS4uYzJmNzA3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMTcwOSw3ICsxNzA5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9zcGlfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9zcGlfcG1fb3BzID0gewogCS5zdXNwZW5kCT0gcHhhMnh4X3NwaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X3NwaV9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKaW5kZXggNzNlMjRlZi4uMWQ0MTA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCQlnb3RvIG91dF9lcnJvcl9nZXRfcmVzOwogCX0KIAotCWRydl9kYXRhLT5yZWdzX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKSk7CisJZHJ2X2RhdGEtPnJlZ3NfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZHJ2X2RhdGEtPnJlZ3NfYmFzZSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2Fubm90IG1hcCBJT1xuIik7CiAJCXN0YXR1cyA9IC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCA4OWMyMmVmLi4xODkzZjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC00NCw2ICs0NCw5IEBACiAjZGVmaW5lIE1YQ19DU1BJSU5UCQkweDBjCiAjZGVmaW5lIE1YQ19SRVNFVAkJMHgxYwogCisjZGVmaW5lIE1YM19DU1BJU1RBVAkJMHgxNAorI2RlZmluZSBNWDNfQ1NQSVNUQVRfUlIJCSgxIDw8IDMpCisKIC8qIGdlbmVyaWMgZGVmaW5lcyB0byBhYnN0cmFjdCBmcm9tIHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0cyAqLwogI2RlZmluZSBNWENfSU5UX1JSCSgxIDw8IDApIC8qIFJlY2VpdmUgZGF0YSByZWFkeSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgTVhDX0lOVF9URQkoMSA8PCAxKSAvKiBUcmFuc21pdCBGSUZPIGVtcHR5IGludGVycnVwdCAqLwpAQCAtMjA1LDcgKzIwOCw3IEBACiAKIAlpZiAoY3B1X2lzX214MzEoKSkKIAkJcmVnIHw9IChjb25maWctPmJwdyAtIDEpIDw8IE1YMzFfQ1NQSUNUUkxfQkNfU0hJRlQ7Ci0JZWxzZSBpZiAoY3B1X2lzX214MzUoKSkgeworCWVsc2UgaWYgKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzUoKSkgewogCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVDsKIAkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfU1NDVEw7CiAJfQpAQCAtMjE5LDcgKzIyMiw3IEBACiAJaWYgKGNvbmZpZy0+Y3MgPCAwKSB7CiAJCWlmIChjcHVfaXNfbXgzMSgpKQogCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0JCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpCisJCWVsc2UgaWYgKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzUoKSkKIAkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDM1X0NTUElDVFJMX0NTX1NISUZUOwogCX0KIApAQCAtNDgxLDcgKzQ4NCw3IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwaV9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKm14Y19wbGF0Zm9ybV9pbmZvOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CkBAIC00ODksNyArNDkyLDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaSwgcmV0OwogCi0JbXhjX3BsYXRmb3JtX2luZm8gPSAoc3RydWN0IHNwaV9pbXhfbWFzdGVyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJbXhjX3BsYXRmb3JtX2luZm8gPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwogCWlmICghbXhjX3BsYXRmb3JtX2luZm8pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHRoZSBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTMsMTEgKzUxNiwxMiBAQAogCQkJY29udGludWU7CiAJCXJldCA9IGdwaW9fcmVxdWVzdChzcGlfaW14LT5jaGlwc2VsZWN0W2ldLCBEUklWRVJfTkFNRSk7CiAJCWlmIChyZXQpIHsKLQkJCWktLTsKLQkJCXdoaWxlIChpID4gMCkKKwkJCXdoaWxlIChpID4gMCkgeworCQkJCWktLTsKIAkJCQlpZiAoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSA+PSAwKQotCQkJCQlncGlvX2ZyZWUoc3BpX2lteC0+Y2hpcHNlbGVjdFtpLS1dKTsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBjcyBncGlvcyIpOworCQkJCQlncGlvX2ZyZWUoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSk7CisJCQl9CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY3MgZ3Bpb3NcbiIpOwogCQkJZ290byBvdXRfbWFzdGVyX3B1dDsKIAkJfQogCX0KQEAgLTU1MSw3ICs1NTUsNyBAQAogCX0KIAogCXNwaV9pbXgtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFzcGlfaW14LT5pcnEpIHsKKwlpZiAoc3BpX2lteC0+aXJxIDw9IDApIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfaW91bm1hcDsKIAl9CkBAIC01NjIsNyArNTY2LDcgQEAKIAkJZ290byBvdXRfaW91bm1hcDsKIAl9CiAKLQlpZiAoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKSB7CisJaWYgKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKSB7CiAJCXNwaV9pbXgtPmludGN0cmwgPSBteDMxX2ludGN0cmw7CiAJCXNwaV9pbXgtPmNvbmZpZyA9IG14MzFfY29uZmlnOwogCQlzcGlfaW14LT50cmlnZ2VyID0gbXgzMV90cmlnZ2VyOwpAQCAtNTkwLDkgKzU5NCwxNCBAQAogCWNsa19lbmFibGUoc3BpX2lteC0+Y2xrKTsKIAlzcGlfaW14LT5zcGlfY2xrID0gY2xrX2dldF9yYXRlKHNwaV9pbXgtPmNsayk7CiAKLQlpZiAoIWNwdV9pc19teDMxKCkgfHwgIWNwdV9pc19teDM1KCkpCisJaWYgKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgyMSgpIHx8IGNwdV9pc19teDI3KCkpCiAJCXdyaXRlbCgxLCBzcGlfaW14LT5iYXNlICsgTVhDX1JFU0VUKTsKIAorCS8qIGRyYWluIHJlY2VpdmUgYnVmZmVyICovCisJaWYgKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKQorCQl3aGlsZSAocmVhZGwoc3BpX2lteC0+YmFzZSArIE1YM19DU1BJU1RBVCkgJiBNWDNfQ1NQSVNUQVRfUlIpCisJCQlyZWFkbChzcGlfaW14LT5iYXNlICsgTVhDX0NTUElSWERBVEEpOworCiAJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCAwKTsKIAogCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZzcGlfaW14LT5iaXRiYW5nKTsKQEAgLTYyNSw3ICs2MzQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHNwaV9pbXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzcGlfaW14X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC02NTksNyArNjY4LDcgQEAKIAkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAgIH0sCiAJLnByb2JlID0gc3BpX2lteF9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3Aoc3BpX2lteF9yZW1vdmUpLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzcGlfaW14X3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzcGlfaW14X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCmluZGV4IDBmZDBlYzQuLjFmYjJhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYwpAQCAtNSw2ICs1LDEwIEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFBvbHljb20sIEluYy4KICAqCisgKiBDUE0gU1BJIGFuZCBRRSBidWZmZXIgZGVzY3JpcHRvcnMgbW9kZSBzdXBwb3J0OgorICogQ29weXJpZ2h0IChjKSAyMDA5ICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTI3LDYgKzMxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CkBAIC0zNCw4ICs0MSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3NwaS5oPgogCiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxhc20vY3BtLmg+CisjaW5jbHVkZSA8YXNtL3FlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCisvKiBDUE0xIGFuZCBDUE0yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovCisjaWZkZWYgQ09ORklHX0NQTTEKKyNpbmNsdWRlIDxhc20vY3BtMS5oPgorI2RlZmluZSBDUE1fU1BJX0NNRCBta19jcl9jbWQoQ1BNX0NSX0NIX1NQSSwgMCkKKyNlbHNlCisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNkZWZpbmUgQ1BNX1NQSV9DTUQgbWtfY3JfY21kKENQTV9DUl9TUElfUEFHRSwgQ1BNX0NSX1NQSV9TQkxPQ0ssIDAsIDApCisjZW5kaWYKKwogLyogU1BJIENvbnRyb2xsZXIgcmVnaXN0ZXJzICovCiBzdHJ1Y3QgbXBjOHh4eF9zcGlfcmVnIHsKIAl1OCByZXMxWzB4MjBdOwpAQCAtNDcsNiArNjUsMjggQEAKIAlfX2JlMzIgcmVjZWl2ZTsKIH07CiAKKy8qIFNQSSBQYXJhbWV0ZXIgUkFNICovCitzdHJ1Y3Qgc3BpX3ByYW0geworCV9fYmUxNglyYmFzZTsJLyogUnggQnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICovCisJX19iZTE2CXRiYXNlOwkvKiBUeCBCdWZmZXIgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3MgKi8KKwl1OAlyZmNyOwkvKiBSeCBmdW5jdGlvbiBjb2RlICovCisJdTgJdGZjcjsJLyogVHggZnVuY3Rpb24gY29kZSAqLworCV9fYmUxNgltcmJscjsJLyogTWF4IHJlY2VpdmUgYnVmZmVyIGxlbmd0aCAqLworCV9fYmUzMglyc3RhdGU7CS8qIEludGVybmFsICovCisJX19iZTMyCXJkcDsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMTYJcmJwdHI7CS8qIEludGVybmFsICovCisJX19iZTE2CXJiYzsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMzIJcnh0bXA7CS8qIEludGVybmFsICovCisJX19iZTMyCXRzdGF0ZTsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMzIJdGRwOwkvKiBJbnRlcm5hbCAqLworCV9fYmUxNgl0YnB0cjsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMTYJdGJjOwkvKiBJbnRlcm5hbCAqLworCV9fYmUzMgl0eHRtcDsJLyogSW50ZXJuYWwgKi8KKwlfX2JlMzIJcmVzOwkvKiBUeCB0ZW1wLiAqLworCV9fYmUxNiAgcnBiYXNlOwkvKiBSZWxvY2F0aW9uIHBvaW50ZXIgKENQTTEgb25seSkgKi8KKwlfX2JlMTYJcmVzMTsJLyogUmVzZXJ2ZWQgKi8KK307CisKIC8qIFNQSSBDb250cm9sbGVyIG1vZGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUJU1BNT0RFX0xPT1AJCSgxIDw8IDMwKQogI2RlZmluZQlTUE1PREVfQ0lfSU5BQ1RJVkVISUdICSgxIDw8IDI5KQpAQCAtNzUsMTQgKzExNSw0MCBAQAogI2RlZmluZQlTUElNX05FCQkweDAwMDAwMjAwCS8qIE5vdCBlbXB0eSAqLwogI2RlZmluZQlTUElNX05GCQkweDAwMDAwMTAwCS8qIE5vdCBmdWxsICovCiAKKyNkZWZpbmUJU1BJRV9UWEIJMHgwMDAwMDIwMAkvKiBMYXN0IGNoYXIgaXMgd3JpdHRlbiB0byB0eCBmaWZvICovCisjZGVmaW5lCVNQSUVfUlhCCTB4MDAwMDAxMDAJLyogTGFzdCBjaGFyIGlzIHdyaXR0ZW4gdG8gcnggYnVmICovCisKKy8qIFNQQ09NIHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZQlTUENPTV9TVFIJKDEgPDwgMjMpCS8qIFN0YXJ0IHRyYW5zbWl0ICovCisKKyNkZWZpbmUJU1BJX1BSQU1fU0laRQkweDEwMAorI2RlZmluZQlTUElfTVJCTFIJKCh1bnNpZ25lZCBpbnQpUEFHRV9TSVpFKQorCiAvKiBTUEkgQ29udHJvbGxlciBkcml2ZXIncyBwcml2YXRlIGRhdGEuICovCiBzdHJ1Y3QgbXBjOHh4eF9zcGkgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbXBjOHh4eF9zcGlfcmVnIF9faW9tZW0gKmJhc2U7CiAKIAkvKiByeCAmIHR4IGJ1ZnMgZnJvbSB0aGUgc3BpX3RyYW5zZmVyICovCiAJY29uc3Qgdm9pZCAqdHg7CiAJdm9pZCAqcng7CiAKKwlpbnQgc3ViYmxvY2s7CisJc3RydWN0IHNwaV9wcmFtIF9faW9tZW0gKnByYW07CisJc3RydWN0IGNwbV9idWZfZGVzYyBfX2lvbWVtICp0eF9iZDsKKwlzdHJ1Y3QgY3BtX2J1Zl9kZXNjIF9faW9tZW0gKnJ4X2JkOworCisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcl9pbl9wcm9ncmVzczsKKworCS8qIGRtYSBhZGRyZXNzZXMgZm9yIENQTSB0cmFuc2ZlcnMgKi8KKwlkbWFfYWRkcl90IHR4X2RtYTsKKwlkbWFfYWRkcl90IHJ4X2RtYTsKKwlib29sIG1hcF90eF9kbWE7CisJYm9vbCBtYXBfcnhfZG1hOworCisJZG1hX2FkZHJfdCBkbWFfZHVtbXlfdHg7CisJZG1hX2FkZHJfdCBkbWFfZHVtbXlfcng7CisKIAkvKiBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBzaXplZCBidWZmZXJzICovCiAJdm9pZCAoKmdldF9yeCkgKHUzMiByeF9kYXRhLCBzdHJ1Y3QgbXBjOHh4eF9zcGkgKik7CiAJdTMyKCpnZXRfdHgpIChzdHJ1Y3QgbXBjOHh4eF9zcGkgKik7CkBAIC05Niw3ICsxNjIsNyBAQAogCXUzMiByeF9zaGlmdDsJCS8qIFJYIGRhdGEgcmVnIHNoaWZ0IHdoZW4gaW4gcWUgbW9kZSAqLwogCXUzMiB0eF9zaGlmdDsJCS8qIFRYIGRhdGEgcmVnIHNoaWZ0IHdoZW4gaW4gcWUgbW9kZSAqLwogCi0JYm9vbCBxZV9tb2RlOworCXVuc2lnbmVkIGludCBmbGFnczsKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CkBAIC0xMDcsNiArMTczLDEwIEBACiAJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKIH07CiAKK3N0YXRpYyB2b2lkICptcGM4eHh4X2R1bW15X3J4Oworc3RhdGljIERFRklORV9NVVRFWChtcGM4eHh4X2R1bW15X3J4X2xvY2spOworc3RhdGljIGludCBtcGM4eHh4X2R1bW15X3J4X3JlZmNudDsKKwogc3RydWN0IHNwaV9tcGM4eHh4X2NzIHsKIAkvKiBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBzaXplZCBidWZmZXJzICovCiAJdm9pZCAoKmdldF9yeCkgKHUzMiByeF9kYXRhLCBzdHJ1Y3QgbXBjOHh4eF9zcGkgKik7CkBAIC0xNTUsNiArMjI1LDQyIEBACiBNUEM4M1hYX1NQSV9UWF9CVUYodTE2KQogTVBDODNYWF9TUElfVFhfQlVGKHUzMikKIAorc3RhdGljIHZvaWQgbXBjOHh4eF9zcGlfY2hhbmdlX21vZGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbXBjOHh4eF9zcGkgKm1zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3Qgc3BpX21wYzh4eHhfY3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCV9fYmUzMiBfX2lvbWVtICptb2RlID0gJm1zcGktPmJhc2UtPm1vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjcy0+aHdfbW9kZSA9PSBtcGM4eHh4X3NwaV9yZWFkX3JlZyhtb2RlKSkKKwkJcmV0dXJuOworCisJLyogVHVybiBvZmYgSVJRcyBsb2NhbGx5IHRvIG1pbmltaXplIHRpbWUgdGhhdCBTUEkgaXMgZGlzYWJsZWQuICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogVHVybiBvZmYgU1BJIHVuaXQgcHJpb3IgY2hhbmdpbmcgbW9kZSAqLworCW1wYzh4eHhfc3BpX3dyaXRlX3JlZyhtb2RlLCBjcy0+aHdfbW9kZSAmIH5TUE1PREVfRU5BQkxFKTsKKwltcGM4eHh4X3NwaV93cml0ZV9yZWcobW9kZSwgY3MtPmh3X21vZGUpOworCisJLyogV2hlbiBpbiBDUE0gbW9kZSwgd2UgbmVlZCB0byByZWluaXQgdHggYW5kIHJ4LiAqLworCWlmIChtc3BpLT5mbGFncyAmIFNQSV9DUE1fTU9ERSkgeworCQlpZiAobXNwaS0+ZmxhZ3MgJiBTUElfUUUpIHsKKwkJCXFlX2lzc3VlX2NtZChRRV9JTklUX1RYX1JYLCBtc3BpLT5zdWJibG9jaywKKwkJCQkgICAgIFFFX0NSX1BST1RPQ09MX1VOU1BFQ0lGSUVELCAwKTsKKwkJfSBlbHNlIHsKKwkJCWNwbV9jb21tYW5kKENQTV9TUElfQ01ELCBDUE1fQ1JfSU5JVF9UUlgpOworCQkJaWYgKG1zcGktPmZsYWdzICYgU1BJX0NQTTEpIHsKKwkJCQlvdXRfYmUxNigmbXNwaS0+cHJhbS0+cmJwdHIsCisJCQkJCSBpbl9iZTE2KCZtc3BpLT5wcmFtLT5yYmFzZSkpOworCQkJCW91dF9iZTE2KCZtc3BpLT5wcmFtLT50YnB0ciwKKwkJCQkJIGluX2JlMTYoJm1zcGktPnByYW0tPnRiYXNlKSk7CisJCQl9CisJCX0KKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIG1wYzh4eHhfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQogewogCXN0cnVjdCBtcGM4eHh4X3NwaSAqbXBjOHh4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKQEAgLTE2OCwyNyArMjc0LDEzIEBACiAJfQogCiAJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfQUNUSVZFKSB7Ci0JCXUzMiByZWd2YWwgPSBtcGM4eHh4X3NwaV9yZWFkX3JlZygmbXBjOHh4eF9zcGktPmJhc2UtPm1vZGUpOwotCiAJCW1wYzh4eHhfc3BpLT5yeF9zaGlmdCA9IGNzLT5yeF9zaGlmdDsKIAkJbXBjOHh4eF9zcGktPnR4X3NoaWZ0ID0gY3MtPnR4X3NoaWZ0OwogCQltcGM4eHh4X3NwaS0+Z2V0X3J4ID0gY3MtPmdldF9yeDsKIAkJbXBjOHh4eF9zcGktPmdldF90eCA9IGNzLT5nZXRfdHg7CiAKLQkJaWYgKGNzLT5od19tb2RlICE9IHJlZ3ZhbCkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCV9fYmUzMiBfX2lvbWVtICptb2RlID0gJm1wYzh4eHhfc3BpLT5iYXNlLT5tb2RlOworCQltcGM4eHh4X3NwaV9jaGFuZ2VfbW9kZShzcGkpOwogCi0JCQlyZWd2YWwgPSBjcy0+aHdfbW9kZTsKLQkJCS8qIFR1cm4gb2ZmIElSUXMgbG9jYWxseSB0byBtaW5pbWl6ZSB0aW1lIHRoYXQKLQkJCSAqIFNQSSBpcyBkaXNhYmxlZAotCQkJICovCi0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQkvKiBUdXJuIG9mZiBTUEkgdW5pdCBwcmlvciBjaGFuZ2luZyBtb2RlICovCi0JCQltcGM4eHh4X3NwaV93cml0ZV9yZWcobW9kZSwgcmVndmFsICYgflNQTU9ERV9FTkFCTEUpOwotCQkJbXBjOHh4eF9zcGlfd3JpdGVfcmVnKG1vZGUsIHJlZ3ZhbCk7Ci0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCX0KIAkJaWYgKHBkYXRhLT5jc19jb250cm9sKQogCQkJcGRhdGEtPmNzX2NvbnRyb2woc3BpLCBwb2wpOwogCX0KQEAgLTE5OCw3ICsyOTAsNiBAQAogaW50IG1wYzh4eHhfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCiB7CiAJc3RydWN0IG1wYzh4eHhfc3BpICptcGM4eHh4X3NwaTsKLQl1MzIgcmVndmFsOwogCXU4IGJpdHNfcGVyX3dvcmQsIHBtOwogCXUzMiBoejsKIAlzdHJ1Y3Qgc3BpX21wYzh4eHhfY3MJKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOwpAQCAtMjMwLDE0ICszMjEsMTQgQEAKIAlpZiAoYml0c19wZXJfd29yZCA8PSA4KSB7CiAJCWNzLT5nZXRfcnggPSBtcGM4eHh4X3NwaV9yeF9idWZfdTg7CiAJCWNzLT5nZXRfdHggPSBtcGM4eHh4X3NwaV90eF9idWZfdTg7Ci0JCWlmIChtcGM4eHh4X3NwaS0+cWVfbW9kZSkgeworCQlpZiAobXBjOHh4eF9zcGktPmZsYWdzICYgU1BJX1FFX0NQVV9NT0RFKSB7CiAJCQljcy0+cnhfc2hpZnQgPSAxNjsKIAkJCWNzLT50eF9zaGlmdCA9IDI0OwogCQl9CiAJfSBlbHNlIGlmIChiaXRzX3Blcl93b3JkIDw9IDE2KSB7CiAJCWNzLT5nZXRfcnggPSBtcGM4eHh4X3NwaV9yeF9idWZfdTE2OwogCQljcy0+Z2V0X3R4ID0gbXBjOHh4eF9zcGlfdHhfYnVmX3UxNjsKLQkJaWYgKG1wYzh4eHhfc3BpLT5xZV9tb2RlKSB7CisJCWlmIChtcGM4eHh4X3NwaS0+ZmxhZ3MgJiBTUElfUUVfQ1BVX01PREUpIHsKIAkJCWNzLT5yeF9zaGlmdCA9IDE2OwogCQkJY3MtPnR4X3NoaWZ0ID0gMTY7CiAJCX0KQEAgLTI0Nyw3ICszMzgsOCBAQAogCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtcGM4eHh4X3NwaS0+cWVfbW9kZSAmJiBzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKSB7CisJaWYgKG1wYzh4eHhfc3BpLT5mbGFncyAmIFNQSV9RRV9DUFVfTU9ERSAmJgorCQkJc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkgewogCQljcy0+dHhfc2hpZnQgPSAwOwogCQlpZiAoYml0c19wZXJfd29yZCA8PSA4KQogCQkJY3MtPnJ4X3NoaWZ0ID0gODsKQEAgLTI4NiwzNyArMzc4LDEzOCBAQAogCQlwbS0tOwogCiAJY3MtPmh3X21vZGUgfD0gU1BNT0RFX1BNKHBtKTsKLQlyZWd2YWwgPSAgbXBjOHh4eF9zcGlfcmVhZF9yZWcoJm1wYzh4eHhfc3BpLT5iYXNlLT5tb2RlKTsKLQlpZiAoY3MtPmh3X21vZGUgIT0gcmVndmFsKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCV9fYmUzMiBfX2lvbWVtICptb2RlID0gJm1wYzh4eHhfc3BpLT5iYXNlLT5tb2RlOwogCi0JCXJlZ3ZhbCA9IGNzLT5od19tb2RlOwotCQkvKiBUdXJuIG9mZiBJUlFzIGxvY2FsbHkgdG8gbWluaW1pemUgdGltZQotCQkgKiB0aGF0IFNQSSBpcyBkaXNhYmxlZAotCQkgKi8KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkvKiBUdXJuIG9mZiBTUEkgdW5pdCBwcmlvciBjaGFuZ2luZyBtb2RlICovCi0JCW1wYzh4eHhfc3BpX3dyaXRlX3JlZyhtb2RlLCByZWd2YWwgJiB+U1BNT0RFX0VOQUJMRSk7Ci0JCW1wYzh4eHhfc3BpX3dyaXRlX3JlZyhtb2RlLCByZWd2YWwpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQorCW1wYzh4eHhfc3BpX2NoYW5nZV9tb2RlKHNwaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXBjOHh4eF9zcGlfYnVmcyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQorc3RhdGljIHZvaWQgbXBjOHh4eF9zcGlfY3BtX2J1ZnNfc3RhcnQoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpKQogewotCXN0cnVjdCBtcGM4eHh4X3NwaSAqbXBjOHh4eF9zcGk7Ci0JdTMyIHdvcmQsIGxlbiwgYml0c19wZXJfd29yZDsKKwlzdHJ1Y3QgY3BtX2J1Zl9kZXNjIF9faW9tZW0gKnR4X2JkID0gbXNwaS0+dHhfYmQ7CisJc3RydWN0IGNwbV9idWZfZGVzYyBfX2lvbWVtICpyeF9iZCA9IG1zcGktPnJ4X2JkOworCXVuc2lnbmVkIGludCB4ZmVyX2xlbiA9IG1pbihtc3BpLT5jb3VudCwgU1BJX01SQkxSKTsKKwl1bnNpZ25lZCBpbnQgeGZlcl9vZnM7CiAKLQltcGM4eHh4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXhmZXJfb2ZzID0gbXNwaS0+eGZlcl9pbl9wcm9ncmVzcy0+bGVuIC0gbXNwaS0+Y291bnQ7CiAKLQltcGM4eHh4X3NwaS0+dHggPSB0LT50eF9idWY7Ci0JbXBjOHh4eF9zcGktPnJ4ID0gdC0+cnhfYnVmOworCW91dF9iZTMyKCZyeF9iZC0+Y2JkX2J1ZmFkZHIsIG1zcGktPnJ4X2RtYSArIHhmZXJfb2ZzKTsKKwlvdXRfYmUxNigmcnhfYmQtPmNiZF9kYXRsZW4sIDApOworCW91dF9iZTE2KCZyeF9iZC0+Y2JkX3NjLCBCRF9TQ19FTVBUWSB8IEJEX1NDX0lOVFJQVCB8IEJEX1NDX1dSQVApOworCisJb3V0X2JlMzIoJnR4X2JkLT5jYmRfYnVmYWRkciwgbXNwaS0+dHhfZG1hICsgeGZlcl9vZnMpOworCW91dF9iZTE2KCZ0eF9iZC0+Y2JkX2RhdGxlbiwgeGZlcl9sZW4pOworCW91dF9iZTE2KCZ0eF9iZC0+Y2JkX3NjLCBCRF9TQ19SRUFEWSB8IEJEX1NDX0lOVFJQVCB8IEJEX1NDX1dSQVAgfAorCQkJCSBCRF9TQ19MQVNUKTsKKworCS8qIHN0YXJ0IHRyYW5zZmVyICovCisJbXBjOHh4eF9zcGlfd3JpdGVfcmVnKCZtc3BpLT5iYXNlLT5jb21tYW5kLCBTUENPTV9TVFIpOworfQorCitzdGF0aWMgaW50IG1wYzh4eHhfc3BpX2NwbV9idWZzKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSwKKwkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0LCBib29sIGlzX2RtYV9tYXBwZWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXNwaS0+ZGV2OworCisJaWYgKGlzX2RtYV9tYXBwZWQpIHsKKwkJbXNwaS0+bWFwX3R4X2RtYSA9IDA7CisJCW1zcGktPm1hcF9yeF9kbWEgPSAwOworCX0gZWxzZSB7CisJCW1zcGktPm1hcF90eF9kbWEgPSAxOworCQltc3BpLT5tYXBfcnhfZG1hID0gMTsKKwl9CisKKwlpZiAoIXQtPnR4X2J1ZikgeworCQltc3BpLT50eF9kbWEgPSBtc3BpLT5kbWFfZHVtbXlfdHg7CisJCW1zcGktPm1hcF90eF9kbWEgPSAwOworCX0KKworCWlmICghdC0+cnhfYnVmKSB7CisJCW1zcGktPnJ4X2RtYSA9IG1zcGktPmRtYV9kdW1teV9yeDsKKwkJbXNwaS0+bWFwX3J4X2RtYSA9IDA7CisJfQorCisJaWYgKG1zcGktPm1hcF90eF9kbWEpIHsKKwkJdm9pZCAqbm9uY29uc3RfdHggPSAodm9pZCAqKW1zcGktPnR4OyAvKiBzaHV0IHVwIGdjYyAqLworCisJCW1zcGktPnR4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKGRldiwgbm9uY29uc3RfdHgsIHQtPmxlbiwKKwkJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIG1zcGktPnR4X2RtYSkpIHsKKwkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG1hcCB0eCBkbWFcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQltc3BpLT50eF9kbWEgPSB0LT50eF9kbWE7CisJfQorCisJaWYgKG1zcGktPm1hcF9yeF9kbWEpIHsKKwkJbXNwaS0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCBtc3BpLT5yeCwgdC0+bGVuLAorCQkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBtc3BpLT5yeF9kbWEpKSB7CisJCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBtYXAgcnggZG1hXG4iKTsKKwkJCWdvdG8gZXJyX3J4X2RtYTsKKwkJfQorCX0gZWxzZSB7CisJCW1zcGktPnJ4X2RtYSA9IHQtPnJ4X2RtYTsKKwl9CisKKwkvKiBlbmFibGUgcnggaW50cyAqLworCW1wYzh4eHhfc3BpX3dyaXRlX3JlZygmbXNwaS0+YmFzZS0+bWFzaywgU1BJRV9SWEIpOworCisJbXNwaS0+eGZlcl9pbl9wcm9ncmVzcyA9IHQ7CisJbXNwaS0+Y291bnQgPSB0LT5sZW47CisKKwkvKiBzdGFydCBDUE0gdHJhbnNmZXJzICovCisJbXBjOHh4eF9zcGlfY3BtX2J1ZnNfc3RhcnQobXNwaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3J4X2RtYToKKwlpZiAobXNwaS0+bWFwX3R4X2RtYSkKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIG1zcGktPnR4X2RtYSwgdC0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgbXBjOHh4eF9zcGlfY3BtX2J1ZnNfY29tcGxldGUoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1zcGktPmRldjsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0ID0gbXNwaS0+eGZlcl9pbl9wcm9ncmVzczsKKworCWlmIChtc3BpLT5tYXBfdHhfZG1hKQorCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgbXNwaS0+dHhfZG1hLCB0LT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChtc3BpLT5tYXBfdHhfZG1hKQorCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgbXNwaS0+cnhfZG1hLCB0LT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJbXNwaS0+eGZlcl9pbl9wcm9ncmVzcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9zcGlfY3B1X2J1ZnMoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpLAorCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdTMyIHdvcmQ7CisKKwltc3BpLT5jb3VudCA9IGxlbjsKKworCS8qIGVuYWJsZSByeCBpbnRzICovCisJbXBjOHh4eF9zcGlfd3JpdGVfcmVnKCZtc3BpLT5iYXNlLT5tYXNrLCBTUElNX05FKTsKKworCS8qIHRyYW5zbWl0IHdvcmQgKi8KKwl3b3JkID0gbXNwaS0+Z2V0X3R4KG1zcGkpOworCW1wYzh4eHhfc3BpX3dyaXRlX3JlZygmbXNwaS0+YmFzZS0+dHJhbnNtaXQsIHdvcmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9zcGlfYnVmcyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0LAorCQkJICAgIGJvb2wgaXNfZG1hX21hcHBlZCkKK3sKKwlzdHJ1Y3QgbXBjOHh4eF9zcGkgKm1wYzh4eHhfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdW5zaWduZWQgaW50IGxlbiA9IHQtPmxlbjsKKwl1OCBiaXRzX3Blcl93b3JkOworCWludCByZXQ7CisKIAliaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOwogCWlmICh0LT5iaXRzX3Blcl93b3JkKQogCQliaXRzX3Blcl93b3JkID0gdC0+Yml0c19wZXJfd29yZDsKLQlsZW4gPSB0LT5sZW47CisKIAlpZiAoYml0c19wZXJfd29yZCA+IDgpIHsKIAkJLyogaW52YWxpZCBsZW5ndGg/ICovCiAJCWlmIChsZW4gJiAxKQpAQCAtMzI5LDIyICs1MjIsMjcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlsZW4gLz0gMjsKIAl9Ci0JbXBjOHh4eF9zcGktPmNvdW50ID0gbGVuOworCisJbXBjOHh4eF9zcGktPnR4ID0gdC0+dHhfYnVmOworCW1wYzh4eHhfc3BpLT5yeCA9IHQtPnJ4X2J1ZjsKIAogCUlOSVRfQ09NUExFVElPTihtcGM4eHh4X3NwaS0+ZG9uZSk7CiAKLQkvKiBlbmFibGUgcnggaW50cyAqLwotCW1wYzh4eHhfc3BpX3dyaXRlX3JlZygmbXBjOHh4eF9zcGktPmJhc2UtPm1hc2ssIFNQSU1fTkUpOwotCi0JLyogdHJhbnNtaXQgd29yZCAqLwotCXdvcmQgPSBtcGM4eHh4X3NwaS0+Z2V0X3R4KG1wYzh4eHhfc3BpKTsKLQltcGM4eHh4X3NwaV93cml0ZV9yZWcoJm1wYzh4eHhfc3BpLT5iYXNlLT50cmFuc21pdCwgd29yZCk7CisJaWYgKG1wYzh4eHhfc3BpLT5mbGFncyAmIFNQSV9DUE1fTU9ERSkKKwkJcmV0ID0gbXBjOHh4eF9zcGlfY3BtX2J1ZnMobXBjOHh4eF9zcGksIHQsIGlzX2RtYV9tYXBwZWQpOworCWVsc2UKKwkJcmV0ID0gbXBjOHh4eF9zcGlfY3B1X2J1ZnMobXBjOHh4eF9zcGksIHQsIGxlbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1wYzh4eHhfc3BpLT5kb25lKTsKIAogCS8qIGRpc2FibGUgcnggaW50cyAqLwogCW1wYzh4eHhfc3BpX3dyaXRlX3JlZygmbXBjOHh4eF9zcGktPmJhc2UtPm1hc2ssIDApOwogCisJaWYgKG1wYzh4eHhfc3BpLT5mbGFncyAmIFNQSV9DUE1fTU9ERSkKKwkJbXBjOHh4eF9zcGlfY3BtX2J1ZnNfY29tcGxldGUobXBjOHh4eF9zcGkpOworCiAJcmV0dXJuIG1wYzh4eHhfc3BpLT5jb3VudDsKIH0KIApAQCAtMzc1LDcgKzU3Myw3IEBACiAJCX0KIAkJY3NfY2hhbmdlID0gdC0+Y3NfY2hhbmdlOwogCQlpZiAodC0+bGVuKQotCQkJc3RhdHVzID0gbXBjOHh4eF9zcGlfYnVmcyhzcGksIHQpOworCQkJc3RhdHVzID0gbXBjOHh4eF9zcGlfYnVmcyhzcGksIHQsIG0tPmlzX2RtYV9tYXBwZWQpOwogCQlpZiAoc3RhdHVzKSB7CiAJCQlzdGF0dXMgPSAtRU1TR1NJWkU7CiAJCQlicmVhazsKQEAgLTQ2NCw0NSArNjYyLDgwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtcGM4eHh4X3NwaV9pcnEoczMyIGlycSwgdm9pZCAqY29udGV4dF9kYXRhKQorc3RhdGljIHZvaWQgbXBjOHh4eF9zcGlfY3BtX2lycShzdHJ1Y3QgbXBjOHh4eF9zcGkgKm1zcGksIHUzMiBldmVudHMpCiB7Ci0Jc3RydWN0IG1wYzh4eHhfc3BpICptcGM4eHh4X3NwaSA9IGNvbnRleHRfZGF0YTsKLQl1MzIgZXZlbnQ7Ci0JaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisJdTE2IGxlbjsKIAotCS8qIEdldCBpbnRlcnJ1cHQgZXZlbnRzKHR4L3J4KSAqLwotCWV2ZW50ID0gbXBjOHh4eF9zcGlfcmVhZF9yZWcoJm1wYzh4eHhfc3BpLT5iYXNlLT5ldmVudCk7CisJZGV2X2RiZyhtc3BpLT5kZXYsICIlczogYmQgZGF0bGVuICVkLCBjb3VudCAlZFxuIiwgX19mdW5jX18sCisJCWluX2JlMTYoJm1zcGktPnJ4X2JkLT5jYmRfZGF0bGVuKSwgbXNwaS0+Y291bnQpOwogCi0JLyogV2UgbmVlZCBoYW5kbGUgUlggZmlyc3QgKi8KLQlpZiAoZXZlbnQgJiBTUElFX05FKSB7Ci0JCXUzMiByeF9kYXRhID0gbXBjOHh4eF9zcGlfcmVhZF9yZWcoJm1wYzh4eHhfc3BpLT5iYXNlLT5yZWNlaXZlKTsKLQotCQlpZiAobXBjOHh4eF9zcGktPnJ4KQotCQkJbXBjOHh4eF9zcGktPmdldF9yeChyeF9kYXRhLCBtcGM4eHh4X3NwaSk7Ci0KLQkJcmV0ID0gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JaWYgKChldmVudCAmIFNQSUVfTkYpID09IDApCi0JCS8qIHNwaW4gdW50aWwgVFggaXMgZG9uZSAqLwotCQl3aGlsZSAoKChldmVudCA9Ci0JCQkgbXBjOHh4eF9zcGlfcmVhZF9yZWcoJm1wYzh4eHhfc3BpLT5iYXNlLT5ldmVudCkpICYKLQkJCQkJCVNQSUVfTkYpID09IDApCi0JCQljcHVfcmVsYXgoKTsKLQotCW1wYzh4eHhfc3BpLT5jb3VudCAtPSAxOwotCWlmIChtcGM4eHh4X3NwaS0+Y291bnQpIHsKLQkJdTMyIHdvcmQgPSBtcGM4eHh4X3NwaS0+Z2V0X3R4KG1wYzh4eHhfc3BpKTsKLQkJbXBjOHh4eF9zcGlfd3JpdGVfcmVnKCZtcGM4eHh4X3NwaS0+YmFzZS0+dHJhbnNtaXQsIHdvcmQpOwotCX0gZWxzZSB7Ci0JCWNvbXBsZXRlKCZtcGM4eHh4X3NwaS0+ZG9uZSk7CisJbGVuID0gaW5fYmUxNigmbXNwaS0+cnhfYmQtPmNiZF9kYXRsZW4pOworCWlmIChsZW4gPiBtc3BpLT5jb3VudCkgeworCQlXQVJOX09OKDEpOworCQlsZW4gPSBtc3BpLT5jb3VudDsKIAl9CiAKIAkvKiBDbGVhciB0aGUgZXZlbnRzICovCi0JbXBjOHh4eF9zcGlfd3JpdGVfcmVnKCZtcGM4eHh4X3NwaS0+YmFzZS0+ZXZlbnQsIGV2ZW50KTsKKwltcGM4eHh4X3NwaV93cml0ZV9yZWcoJm1zcGktPmJhc2UtPmV2ZW50LCBldmVudHMpOworCisJbXNwaS0+Y291bnQgLT0gbGVuOworCWlmIChtc3BpLT5jb3VudCkKKwkJbXBjOHh4eF9zcGlfY3BtX2J1ZnNfc3RhcnQobXNwaSk7CisJZWxzZQorCQljb21wbGV0ZSgmbXNwaS0+ZG9uZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzh4eHhfc3BpX2NwdV9pcnEoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpLCB1MzIgZXZlbnRzKQoreworCS8qIFdlIG5lZWQgaGFuZGxlIFJYIGZpcnN0ICovCisJaWYgKGV2ZW50cyAmIFNQSUVfTkUpIHsKKwkJdTMyIHJ4X2RhdGEgPSBtcGM4eHh4X3NwaV9yZWFkX3JlZygmbXNwaS0+YmFzZS0+cmVjZWl2ZSk7CisKKwkJaWYgKG1zcGktPnJ4KQorCQkJbXNwaS0+Z2V0X3J4KHJ4X2RhdGEsIG1zcGkpOworCX0KKworCWlmICgoZXZlbnRzICYgU1BJRV9ORikgPT0gMCkKKwkJLyogc3BpbiB1bnRpbCBUWCBpcyBkb25lICovCisJCXdoaWxlICgoKGV2ZW50cyA9CisJCQltcGM4eHh4X3NwaV9yZWFkX3JlZygmbXNwaS0+YmFzZS0+ZXZlbnQpKSAmCisJCQkJCQlTUElFX05GKSA9PSAwKQorCQkJY3B1X3JlbGF4KCk7CisKKwkvKiBDbGVhciB0aGUgZXZlbnRzICovCisJbXBjOHh4eF9zcGlfd3JpdGVfcmVnKCZtc3BpLT5iYXNlLT5ldmVudCwgZXZlbnRzKTsKKworCW1zcGktPmNvdW50IC09IDE7CisJaWYgKG1zcGktPmNvdW50KSB7CisJCXUzMiB3b3JkID0gbXNwaS0+Z2V0X3R4KG1zcGkpOworCisJCW1wYzh4eHhfc3BpX3dyaXRlX3JlZygmbXNwaS0+YmFzZS0+dHJhbnNtaXQsIHdvcmQpOworCX0gZWxzZSB7CisJCWNvbXBsZXRlKCZtc3BpLT5kb25lKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM4eHh4X3NwaV9pcnEoczMyIGlycSwgdm9pZCAqY29udGV4dF9kYXRhKQoreworCXN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSA9IGNvbnRleHRfZGF0YTsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKwl1MzIgZXZlbnRzOworCisJLyogR2V0IGludGVycnVwdCBldmVudHModHgvcngpICovCisJZXZlbnRzID0gbXBjOHh4eF9zcGlfcmVhZF9yZWcoJm1zcGktPmJhc2UtPmV2ZW50KTsKKwlpZiAoZXZlbnRzKQorCQlyZXQgPSBJUlFfSEFORExFRDsKKworCWRldl9kYmcobXNwaS0+ZGV2LCAiJXM6IGV2ZW50cyAleFxuIiwgX19mdW5jX18sIGV2ZW50cyk7CisKKwlpZiAobXNwaS0+ZmxhZ3MgJiBTUElfQ1BNX01PREUpCisJCW1wYzh4eHhfc3BpX2NwbV9pcnEobXNwaSwgZXZlbnRzKTsKKwllbHNlCisJCW1wYzh4eHhfc3BpX2NwdV9pcnEobXNwaSwgZXZlbnRzKTsKIAogCXJldHVybiByZXQ7CiB9CisKIHN0YXRpYyBpbnQgbXBjOHh4eF9zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKIAkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm0pCiB7CkBAIC01MjYsNiArNzU5LDIxNSBAQAogCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7CiB9CiAKK3N0YXRpYyB2b2lkICptcGM4eHh4X3NwaV9hbGxvY19kdW1teV9yeCh2b2lkKQoreworCW11dGV4X2xvY2soJm1wYzh4eHhfZHVtbXlfcnhfbG9jayk7CisKKwlpZiAoIW1wYzh4eHhfZHVtbXlfcngpCisJCW1wYzh4eHhfZHVtbXlfcnggPSBrbWFsbG9jKFNQSV9NUkJMUiwgR0ZQX0tFUk5FTCk7CisJaWYgKG1wYzh4eHhfZHVtbXlfcngpCisJCW1wYzh4eHhfZHVtbXlfcnhfcmVmY250Kys7CisKKwltdXRleF91bmxvY2soJm1wYzh4eHhfZHVtbXlfcnhfbG9jayk7CisKKwlyZXR1cm4gbXBjOHh4eF9kdW1teV9yeDsKK30KKworc3RhdGljIHZvaWQgbXBjOHh4eF9zcGlfZnJlZV9kdW1teV9yeCh2b2lkKQoreworCW11dGV4X2xvY2soJm1wYzh4eHhfZHVtbXlfcnhfbG9jayk7CisKKwlzd2l0Y2ggKG1wYzh4eHhfZHVtbXlfcnhfcmVmY250KSB7CisJY2FzZSAwOgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwljYXNlIDE6CisJCWtmcmVlKG1wYzh4eHhfZHVtbXlfcngpOworCQltcGM4eHh4X2R1bW15X3J4ID0gTlVMTDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJbXBjOHh4eF9kdW1teV9yeF9yZWZjbnQtLTsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZtcGM4eHh4X2R1bW15X3J4X2xvY2spOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtcGM4eHh4X3NwaV9jcG1fZ2V0X3ByYW0oc3RydWN0IG1wYzh4eHhfc3BpICptc3BpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1zcGktPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2X2FyY2hkYXRhX2dldF9ub2RlKCZkZXYtPmFyY2hkYXRhKTsKKwljb25zdCB1MzIgKmlwcm9wOworCWludCBzaXplOworCXVuc2lnbmVkIGxvbmcgc3BpX2Jhc2Vfb2ZzOworCXVuc2lnbmVkIGxvbmcgcHJhbV9vZnMgPSAtRU5PTUVNOworCisJLyogQ2FuJ3QgdXNlIG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSwgUUUgbXVyYW0gaXNuJ3QgYXQgMC4gKi8KKwlpcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsICZzaXplKTsKKworCS8qIFFFIHdpdGggYSBmaXhlZCBwcmFtIGxvY2F0aW9uPyAqLworCWlmIChtc3BpLT5mbGFncyAmIFNQSV9RRSAmJiBpcHJvcCAmJiBzaXplID09IHNpemVvZigqaXByb3ApICogNCkKKwkJcmV0dXJuIGNwbV9tdXJhbV9hbGxvY19maXhlZChpcHJvcFsyXSwgU1BJX1BSQU1fU0laRSk7CisKKwkvKiBRRSBidXQgd2l0aCBhIGR5bmFtaWMgcHJhbSBsb2NhdGlvbj8gKi8KKwlpZiAobXNwaS0+ZmxhZ3MgJiBTUElfUUUpIHsKKwkJcHJhbV9vZnMgPSBjcG1fbXVyYW1fYWxsb2MoU1BJX1BSQU1fU0laRSwgNjQpOworCQlxZV9pc3N1ZV9jbWQoUUVfQVNTSUdOX1BBR0VfVE9fREVWSUNFLCBtc3BpLT5zdWJibG9jaywKKwkJCQlRRV9DUl9QUk9UT0NPTF9VTlNQRUNJRklFRCwgcHJhbV9vZnMpOworCQlyZXR1cm4gcHJhbV9vZnM7CisJfQorCisJLyogQ1BNMSBhbmQgQ1BNMiBwcmFtIG11c3QgYmUgYXQgYSBmaXhlZCBhZGRyLiAqLworCWlmICghaXByb3AgfHwgc2l6ZSAhPSBzaXplb2YoKmlwcm9wKSAqIDQpCisJCXJldHVybiAtRU5PTUVNOworCisJc3BpX2Jhc2Vfb2ZzID0gY3BtX211cmFtX2FsbG9jX2ZpeGVkKGlwcm9wWzJdLCAyKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKHNwaV9iYXNlX29mcykpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG1zcGktPmZsYWdzICYgU1BJX0NQTTIpIHsKKwkJcHJhbV9vZnMgPSBjcG1fbXVyYW1fYWxsb2MoU1BJX1BSQU1fU0laRSwgNjQpOworCQlpZiAoIUlTX0VSUl9WQUxVRShwcmFtX29mcykpIHsKKwkJCXUxNiBfX2lvbWVtICpzcGlfYmFzZSA9IGNwbV9tdXJhbV9hZGRyKHNwaV9iYXNlX29mcyk7CisKKwkJCW91dF9iZTE2KHNwaV9iYXNlLCBwcmFtX29mcyk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3BpX3ByYW0gX19pb21lbSAqcHJhbSA9IGNwbV9tdXJhbV9hZGRyKHNwaV9iYXNlX29mcyk7CisJCXUxNiBycGJhc2UgPSBpbl9iZTE2KCZwcmFtLT5ycGJhc2UpOworCisJCS8qIE1pY3JvY29kZSByZWxvY2F0aW9uIHBhdGNoIGFwcGxpZWQ/ICovCisJCWlmIChycGJhc2UpCisJCQlwcmFtX29mcyA9IHJwYmFzZTsKKwkJZWxzZQorCQkJcmV0dXJuIHNwaV9iYXNlX29mczsKKwl9CisKKwljcG1fbXVyYW1fZnJlZShzcGlfYmFzZV9vZnMpOworCXJldHVybiBwcmFtX29mczsKK30KKworc3RhdGljIGludCBtcGM4eHh4X3NwaV9jcG1faW5pdChzdHJ1Y3QgbXBjOHh4eF9zcGkgKm1zcGkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXNwaS0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXZfYXJjaGRhdGFfZ2V0X25vZGUoJmRldi0+YXJjaGRhdGEpOworCWNvbnN0IHUzMiAqaXByb3A7CisJaW50IHNpemU7CisJdW5zaWduZWQgbG9uZyBwcmFtX29mczsKKwl1bnNpZ25lZCBsb25nIGJkc19vZnM7CisKKwlpZiAoIShtc3BpLT5mbGFncyAmIFNQSV9DUE1fTU9ERSkpCisJCXJldHVybiAwOworCisJaWYgKCFtcGM4eHh4X3NwaV9hbGxvY19kdW1teV9yeCgpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChtc3BpLT5mbGFncyAmIFNQSV9RRSkgeworCQlpcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCAmc2l6ZSk7CisJCWlmIChpcHJvcCAmJiBzaXplID09IHNpemVvZigqaXByb3ApKQorCQkJbXNwaS0+c3ViYmxvY2sgPSAqaXByb3A7CisKKwkJc3dpdGNoIChtc3BpLT5zdWJibG9jaykgeworCQlkZWZhdWx0OgorCQkJZGV2X3dhcm4oZGV2LCAiY2VsbC1pbmRleCB1bnNwZWNpZmllZCwgYXNzdW1pbmcgU1BJMSIpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgMDoKKwkJCW1zcGktPnN1YmJsb2NrID0gUUVfQ1JfU1VCQkxPQ0tfU1BJMTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQltc3BpLT5zdWJibG9jayA9IFFFX0NSX1NVQkJMT0NLX1NQSTI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByYW1fb2ZzID0gbXBjOHh4eF9zcGlfY3BtX2dldF9wcmFtKG1zcGkpOworCWlmIChJU19FUlJfVkFMVUUocHJhbV9vZnMpKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgYWxsb2NhdGUgc3BpIHBhcmFtZXRlciByYW1cbiIpOworCQlnb3RvIGVycl9wcmFtOworCX0KKworCWJkc19vZnMgPSBjcG1fbXVyYW1fYWxsb2Moc2l6ZW9mKCptc3BpLT50eF9iZCkgKworCQkJCSAgc2l6ZW9mKCptc3BpLT5yeF9iZCksIDgpOworCWlmIChJU19FUlJfVkFMVUUoYmRzX29mcykpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBhbGxvY2F0ZSBiZHNcbiIpOworCQlnb3RvIGVycl9iZHM7CisJfQorCisJbXNwaS0+ZG1hX2R1bW15X3R4ID0gZG1hX21hcF9zaW5nbGUoZGV2LCBlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfU0laRSwKKwkJCQkJICAgIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIG1zcGktPmRtYV9kdW1teV90eCkpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gbWFwIGR1bW15IHR4IGJ1ZmZlclxuIik7CisJCWdvdG8gZXJyX2R1bW15X3R4OworCX0KKworCW1zcGktPmRtYV9kdW1teV9yeCA9IGRtYV9tYXBfc2luZ2xlKGRldiwgbXBjOHh4eF9kdW1teV9yeCwgU1BJX01SQkxSLAorCQkJCQkgICAgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBtc3BpLT5kbWFfZHVtbXlfcngpKSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG1hcCBkdW1teSByeCBidWZmZXJcbiIpOworCQlnb3RvIGVycl9kdW1teV9yeDsKKwl9CisKKwltc3BpLT5wcmFtID0gY3BtX211cmFtX2FkZHIocHJhbV9vZnMpOworCisJbXNwaS0+dHhfYmQgPSBjcG1fbXVyYW1fYWRkcihiZHNfb2ZzKTsKKwltc3BpLT5yeF9iZCA9IGNwbV9tdXJhbV9hZGRyKGJkc19vZnMgKyBzaXplb2YoKm1zcGktPnR4X2JkKSk7CisKKwkvKiBJbml0aWFsaXplIHBhcmFtZXRlciByYW0uICovCisJb3V0X2JlMTYoJm1zcGktPnByYW0tPnRiYXNlLCBjcG1fbXVyYW1fb2Zmc2V0KG1zcGktPnR4X2JkKSk7CisJb3V0X2JlMTYoJm1zcGktPnByYW0tPnJiYXNlLCBjcG1fbXVyYW1fb2Zmc2V0KG1zcGktPnJ4X2JkKSk7CisJb3V0XzgoJm1zcGktPnByYW0tPnRmY3IsIENQTUZDUl9FQiB8IENQTUZDUl9HQkwpOworCW91dF84KCZtc3BpLT5wcmFtLT5yZmNyLCBDUE1GQ1JfRUIgfCBDUE1GQ1JfR0JMKTsKKwlvdXRfYmUxNigmbXNwaS0+cHJhbS0+bXJibHIsIFNQSV9NUkJMUik7CisJb3V0X2JlMzIoJm1zcGktPnByYW0tPnJzdGF0ZSwgMCk7CisJb3V0X2JlMzIoJm1zcGktPnByYW0tPnJkcCwgMCk7CisJb3V0X2JlMTYoJm1zcGktPnByYW0tPnJicHRyLCAwKTsKKwlvdXRfYmUxNigmbXNwaS0+cHJhbS0+cmJjLCAwKTsKKwlvdXRfYmUzMigmbXNwaS0+cHJhbS0+cnh0bXAsIDApOworCW91dF9iZTMyKCZtc3BpLT5wcmFtLT50c3RhdGUsIDApOworCW91dF9iZTMyKCZtc3BpLT5wcmFtLT50ZHAsIDApOworCW91dF9iZTE2KCZtc3BpLT5wcmFtLT50YnB0ciwgMCk7CisJb3V0X2JlMTYoJm1zcGktPnByYW0tPnRiYywgMCk7CisJb3V0X2JlMzIoJm1zcGktPnByYW0tPnR4dG1wLCAwKTsKKworCXJldHVybiAwOworCitlcnJfZHVtbXlfcng6CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIG1zcGktPmRtYV9kdW1teV90eCwgUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKK2Vycl9kdW1teV90eDoKKwljcG1fbXVyYW1fZnJlZShiZHNfb2ZzKTsKK2Vycl9iZHM6CisJY3BtX211cmFtX2ZyZWUocHJhbV9vZnMpOworZXJyX3ByYW06CisJbXBjOHh4eF9zcGlfZnJlZV9kdW1teV9yeCgpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBtcGM4eHh4X3NwaV9jcG1fZnJlZShzdHJ1Y3QgbXBjOHh4eF9zcGkgKm1zcGkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXNwaS0+ZGV2OworCisJZG1hX3VubWFwX3NpbmdsZShkZXYsIG1zcGktPmRtYV9kdW1teV9yeCwgU1BJX01SQkxSLCBETUFfRlJPTV9ERVZJQ0UpOworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBtc3BpLT5kbWFfZHVtbXlfdHgsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChtc3BpLT50eF9iZCkpOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQobXNwaS0+cHJhbSkpOworCW1wYzh4eHhfc3BpX2ZyZWVfZHVtbXlfcngoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm1wYzh4eHhfc3BpX3N0cm1vZGUodW5zaWduZWQgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFNQSV9RRV9DUFVfTU9ERSkgeworCQlyZXR1cm4gIlFFIENQVSI7CisJfSBlbHNlIGlmIChmbGFncyAmIFNQSV9DUE1fTU9ERSkgeworCQlpZiAoZmxhZ3MgJiBTUElfUUUpCisJCQlyZXR1cm4gIlFFIjsKKwkJZWxzZSBpZiAoZmxhZ3MgJiBTUElfQ1BNMikKKwkJCXJldHVybiAiQ1BNMiI7CisJCWVsc2UKKwkJCXJldHVybiAiQ1BNMSI7CisJfQorCXJldHVybiAiQ1BVIjsKK30KKwogc3RhdGljIHN0cnVjdCBzcGlfbWFzdGVyICogX19kZXZpbml0CiBtcGM4eHh4X3NwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCB1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtNTUyLDI0ICs5OTQsMjkgQEAKIAltYXN0ZXItPmNsZWFudXAgPSBtcGM4eHh4X3NwaV9jbGVhbnVwOwogCiAJbXBjOHh4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0JbXBjOHh4eF9zcGktPnFlX21vZGUgPSBwZGF0YS0+cWVfbW9kZTsKKwltcGM4eHh4X3NwaS0+ZGV2ID0gZGV2OwogCW1wYzh4eHhfc3BpLT5nZXRfcnggPSBtcGM4eHh4X3NwaV9yeF9idWZfdTg7CiAJbXBjOHh4eF9zcGktPmdldF90eCA9IG1wYzh4eHhfc3BpX3R4X2J1Zl91ODsKKwltcGM4eHh4X3NwaS0+ZmxhZ3MgPSBwZGF0YS0+ZmxhZ3M7CiAJbXBjOHh4eF9zcGktPnNwaWJyZyA9IHBkYXRhLT5zeXNjbGs7CiAKKwlyZXQgPSBtcGM4eHh4X3NwaV9jcG1faW5pdChtcGM4eHh4X3NwaSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY3BtX2luaXQ7CisKIAltcGM4eHh4X3NwaS0+cnhfc2hpZnQgPSAwOwogCW1wYzh4eHhfc3BpLT50eF9zaGlmdCA9IDA7Ci0JaWYgKG1wYzh4eHhfc3BpLT5xZV9tb2RlKSB7CisJaWYgKG1wYzh4eHhfc3BpLT5mbGFncyAmIFNQSV9RRV9DUFVfTU9ERSkgewogCQltcGM4eHh4X3NwaS0+cnhfc2hpZnQgPSAxNjsKIAkJbXBjOHh4eF9zcGktPnR4X3NoaWZ0ID0gMjQ7CiAJfQogCiAJaW5pdF9jb21wbGV0aW9uKCZtcGM4eHh4X3NwaS0+ZG9uZSk7CiAKLQltcGM4eHh4X3NwaS0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CisJbXBjOHh4eF9zcGktPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJaWYgKG1wYzh4eHhfc3BpLT5iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBwdXRfbWFzdGVyOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAogCW1wYzh4eHhfc3BpLT5pcnEgPSBpcnE7CkBAIC01OTIsNyArMTAzOSw3IEBACiAKIAkvKiBFbmFibGUgU1BJIGludGVyZmFjZSAqLwogCXJlZ3ZhbCA9IHBkYXRhLT5pbml0aWFsX3NwbW9kZSB8IFNQTU9ERV9JTklUX1ZBTCB8IFNQTU9ERV9FTkFCTEU7Ci0JaWYgKHBkYXRhLT5xZV9tb2RlKQorCWlmIChtcGM4eHh4X3NwaS0+ZmxhZ3MgJiBTUElfUUVfQ1BVX01PREUpCiAJCXJlZ3ZhbCB8PSBTUE1PREVfT1A7CiAKIAltcGM4eHh4X3NwaV93cml0ZV9yZWcoJm1wYzh4eHhfc3BpLT5iYXNlLT5tb2RlLCByZWd2YWwpOwpAQCAtNjEyLDkgKzEwNTksOCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIHVucmVnX21hc3RlcjsKIAotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIiVzOiBNUEM4eHh4IFNQSSBDb250cm9sbGVyIGRyaXZlciBhdCAweCVwIChpcnEgPSAlZClcbiIsCi0JICAgICAgIGRldl9uYW1lKGRldiksIG1wYzh4eHhfc3BpLT5iYXNlLCBtcGM4eHh4X3NwaS0+aXJxKTsKKwlkZXZfaW5mbyhkZXYsICJhdCAweCVwIChpcnEgPSAlZCksICVzIG1vZGVcbiIsIG1wYzh4eHhfc3BpLT5iYXNlLAorCQkgbXBjOHh4eF9zcGktPmlycSwgbXBjOHh4eF9zcGlfc3RybW9kZShtcGM4eHh4X3NwaS0+ZmxhZ3MpKTsKIAogCXJldHVybiBtYXN0ZXI7CiAKQEAgLTYyNCw3ICsxMDcwLDkgQEAKIAlmcmVlX2lycShtcGM4eHh4X3NwaS0+aXJxLCBtcGM4eHh4X3NwaSk7CiB1bm1hcF9pbzoKIAlpb3VubWFwKG1wYzh4eHhfc3BpLT5iYXNlKTsKLXB1dF9tYXN0ZXI6CitlcnJfaW9yZW1hcDoKKwltcGM4eHh4X3NwaV9jcG1fZnJlZShtcGM4eHh4X3NwaSk7CitlcnJfY3BtX2luaXQ6CiAJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKIGVycjoKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwpAQCAtNjQ0LDYgKzEwOTIsNyBAQAogCiAJZnJlZV9pcnEobXBjOHh4eF9zcGktPmlycSwgbXBjOHh4eF9zcGkpOwogCWlvdW5tYXAobXBjOHh4eF9zcGktPmJhc2UpOworCW1wYzh4eHhfc3BpX2NwbV9mcmVlKG1wYzh4eHhfc3BpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzA5LDYgKzExNTgsNyBAQAogCQlncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MobnAsIGksICZmbGFncyk7CiAJCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkgewogCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGdwaW8gIyVkOiAlZFxuIiwgaSwgZ3Bpbyk7CisJCQlyZXQgPSBncGlvOwogCQkJZ290byBlcnJfbG9vcDsKIAkJfQogCkBAIC04MDQsNyArMTI1NCwxMyBAQAogCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKIAlpZiAocHJvcCAmJiAhc3RyY21wKHByb3AsICJjcHUtcWUiKSkKLQkJcGRhdGEtPnFlX21vZGUgPSAxOworCQlwZGF0YS0+ZmxhZ3MgPSBTUElfUUVfQ1BVX01PREU7CisJZWxzZSBpZiAocHJvcCAmJiAhc3RyY21wKHByb3AsICJxZSIpKQorCQlwZGF0YS0+ZmxhZ3MgPSBTUElfQ1BNX01PREUgfCBTUElfUUU7CisJZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsY3BtMi1zcGkiKSkKKwkJcGRhdGEtPmZsYWdzID0gU1BJX0NQTV9NT0RFIHwgU1BJX0NQTTI7CisJZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsY3BtMS1zcGkiKSkKKwkJcGRhdGEtPmZsYWdzID0gU1BJX0NQTV9NT0RFIHwgU1BJX0NQTTE7CiAKIAlyZXQgPSBvZl9tcGM4eHh4X3NwaV9nZXRfY2hpcHNlbGVjdHMoZGV2KTsKIAlpZiAocmV0KQpAQCAtOTAwLDcgKzEzNTYsNyBAQAogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGM4eHh4X3NwaSIpOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBjOHh4eF9zcGlfZHJpdmVyID0gewogCS5wcm9iZSA9IHBsYXRfbXBjOHh4eF9zcGlfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZXhpdF9wKHBsYXRfbXBjOHh4eF9zcGlfcmVtb3ZlKSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AocGxhdF9tcGM4eHh4X3NwaV9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIm1wYzh4eHhfc3BpIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMgYi9kcml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxOWY5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9udWM5MDAuYwpAQCAtMCwwICsxLDUwNCBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX251YzkwMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gdGVjaG5vbG9neS4KKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKyNpbmNsdWRlIDxtYWNoL251YzkwMF9zcGkuaD4KKworLyogdXNpIHJlZ2lzdGVycyBvZmZzZXQgKi8KKyNkZWZpbmUgVVNJX0NOVAkJMHgwMAorI2RlZmluZSBVU0lfRElWCQkweDA0CisjZGVmaW5lIFVTSV9TU1IJCTB4MDgKKyNkZWZpbmUgVVNJX1JYMAkJMHgxMAorI2RlZmluZSBVU0lfVFgwCQkweDEwCisKKy8qIHVzaSByZWdpc3RlciBiaXQgKi8KKyNkZWZpbmUgRU5JTlQJCSgweDAxIDw8IDE3KQorI2RlZmluZSBFTkZMRwkJKDB4MDEgPDwgMTYpCisjZGVmaW5lIFRYTlVNCQkoMHgwMyA8PCA4KQorI2RlZmluZSBUWE5FRwkJKDB4MDEgPDwgMikKKyNkZWZpbmUgUlhORUcJCSgweDAxIDw8IDEpCisjZGVmaW5lIExTQgkJKDB4MDEgPDwgMTApCisjZGVmaW5lIFNFTEVDVExFVgkoMHgwMSA8PCAyKQorI2RlZmluZSBTRUxFQ1RQT0wJKDB4MDEgPDwgMzEpCisjZGVmaW5lIFNFTEVDVFNMQVZFCTB4MDEKKyNkZWZpbmUgR09CVVNZCQkweDAxCisKK3N0cnVjdCBudWM5MDBfc3BpIHsKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcJIGJpdGJhbmc7CisJc3RydWN0IGNvbXBsZXRpb24JIGRvbmU7CisJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwlpbnQJCQkgaXJxOworCWludAkJCSBsZW47CisJaW50CQkJIGNvdW50OworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKnR4OworCXVuc2lnbmVkIGNoYXIJCSpyeDsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCXN0cnVjdCByZXNvdXJjZQkJKmlvYXJlYTsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOworCXN0cnVjdCBzcGlfZGV2aWNlCSpjdXJkZXY7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgbnVjOTAwX3NwaV9pbmZvICpwZGF0YTsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG51YzkwMF9zcGkgKnRvX2h3KHN0cnVjdCBzcGlfZGV2aWNlICpzZGV2KQoreworCXJldHVybiBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNkZXYtPm1hc3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIG51YzkwMF9zbGF2ZV9zZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgaW50IHNzcikKK3sKKwlzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcgPSB0b19odyhzcGkpOworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgaW50IGNzID0gc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMDsKKwl1bnNpZ25lZCBpbnQgY3BvbCA9IHNwaS0+bW9kZSAmIFNQSV9DUE9MID8gMSA6IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfU1NSKTsKKworCWlmICghY3MpCisJCXZhbCAmPSB+U0VMRUNUTEVWOworCWVsc2UKKwkJdmFsIHw9IFNFTEVDVExFVjsKKworCWlmICghc3NyKQorCQl2YWwgJj0gflNFTEVDVFNMQVZFOworCWVsc2UKKwkJdmFsIHw9IFNFTEVDVFNMQVZFOworCisJX19yYXdfd3JpdGVsKHZhbCwgaHctPnJlZ3MgKyBVU0lfU1NSKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlpZiAoIWNwb2wpCisJCXZhbCAmPSB+U0VMRUNUUE9MOworCWVsc2UKKwkJdmFsIHw9IFNFTEVDVFBPTDsKKworCV9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfc3BpX2NoaXBzZWwoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQoreworCXN3aXRjaCAodmFsdWUpIHsKKwljYXNlIEJJVEJBTkdfQ1NfSU5BQ1RJVkU6CisJCW51YzkwMF9zbGF2ZV9zZWxlY3Qoc3BpLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJJVEJBTkdfQ1NfQUNUSVZFOgorCQludWM5MDBfc2xhdmVfc2VsZWN0KHNwaSwgMSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgbnVjOTAwX3NwaV9zZXR1cF90eG51bShzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcsCisJCQkJCQkJdW5zaWduZWQgaW50IHR4bnVtKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCWlmICghdHhudW0pCisJCXZhbCAmPSB+VFhOVU07CisJZWxzZQorCQl2YWwgfD0gdHhudW0gPDwgMHgwODsKKworCV9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCit9CisKK3N0YXRpYyB2b2lkIG51YzkwMF9zcGlfc2V0dXBfdHhiaXRsZW4oc3RydWN0IG51YzkwMF9zcGkgKmh3LAorCQkJCQkJCXVuc2lnbmVkIGludCB0eGJpdGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwl2YWwgfD0gKHR4Yml0bGVuIDw8IDB4MDMpOworCisJX19yYXdfd3JpdGVsKHZhbCwgaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG51YzkwMF9zcGlfZ29idXN5KHN0cnVjdCBudWM5MDBfc3BpICpodykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwl2YWwgfD0gR09CVVNZOworCisJX19yYXdfd3JpdGVsKHZhbCwgaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX3NwaV9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudWM5MDBfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3X3R4Ynl0ZShzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcsIGludCBjb3VudCkKK3sKKwlyZXR1cm4gaHctPnR4ID8gaHctPnR4W2NvdW50XSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX3NwaV90eHJ4KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IG51YzkwMF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKKworCWh3LT50eCA9IHQtPnR4X2J1ZjsKKwlody0+cnggPSB0LT5yeF9idWY7CisJaHctPmxlbiA9IHQtPmxlbjsKKwlody0+Y291bnQgPSAwOworCisJX19yYXdfd3JpdGVsKGh3X3R4Ynl0ZShodywgMHgwKSwgaHctPnJlZ3MgKyBVU0lfVFgwKTsKKworCW51YzkwMF9zcGlfZ29idXN5KGh3KTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3LT5kb25lKTsKKworCXJldHVybiBody0+Y291bnQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBudWM5MDBfc3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG51YzkwMF9zcGkgKmh3ID0gZGV2OworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGNvdW50ID0gaHctPmNvdW50OworCisJc3RhdHVzID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfQ05UKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBody0+cmVncyArIFVTSV9DTlQpOworCisJaWYgKHN0YXR1cyAmIEVORkxHKSB7CisJCWh3LT5jb3VudCsrOworCisJCWlmIChody0+cngpCisJCQlody0+cnhbY291bnRdID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfUlgwKTsKKwkJY291bnQrKzsKKworCQlpZiAoY291bnQgPCBody0+bGVuKSB7CisJCQlfX3Jhd193cml0ZWwoaHdfdHhieXRlKGh3LCBjb3VudCksIGh3LT5yZWdzICsgVVNJX1RYMCk7CisJCQludWM5MDBfc3BpX2dvYnVzeShodyk7CisJCX0gZWxzZSB7CisJCQljb21wbGV0ZSgmaHctPmRvbmUpOworCQl9CisKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWNvbXBsZXRlKCZody0+ZG9uZSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfdHhfZWRnZShzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcsIHVuc2lnbmVkIGludCBlZGdlKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCWlmIChlZGdlKQorCQl2YWwgfD0gVFhORUc7CisJZWxzZQorCQl2YWwgJj0gflRYTkVHOworCV9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfcnhfZWRnZShzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcsIHVuc2lnbmVkIGludCBlZGdlKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCWlmIChlZGdlKQorCQl2YWwgfD0gUlhORUc7CisJZWxzZQorCQl2YWwgJj0gflJYTkVHOworCV9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfc2VuZF9maXJzdChzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcsIHVuc2lnbmVkIGludCBsc2IpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5sb2NrLCBmbGFncyk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChody0+cmVncyArIFVTSV9DTlQpOworCisJaWYgKGxzYikKKwkJdmFsIHw9IExTQjsKKwllbHNlCisJCXZhbCAmPSB+TFNCOworCV9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfc2V0X3NsZWVwKHN0cnVjdCBudWM5MDBfc3BpICpodywgdW5zaWduZWQgaW50IHNsZWVwKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCWlmIChzbGVlcCkKKwkJdmFsIHw9IChzbGVlcCA8PCAxMik7CisJZWxzZQorCQl2YWwgJj0gfigweDBmIDw8IDEyKTsKKwlfX3Jhd193cml0ZWwodmFsLCBody0+cmVncyArIFVTSV9DTlQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbnVjOTAwX2VuYWJsZV9pbnQoc3RydWN0IG51YzkwMF9zcGkgKmh3KQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoaHctPnJlZ3MgKyBVU0lfQ05UKTsKKworCXZhbCB8PSBFTklOVDsKKworCV9fcmF3X3dyaXRlbCh2YWwsIGh3LT5yZWdzICsgVVNJX0NOVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfc2V0X2RpdmlkZXIoc3RydWN0IG51YzkwMF9zcGkgKmh3KQoreworCV9fcmF3X3dyaXRlbChody0+cGRhdGEtPmRpdmlkZXIsIGh3LT5yZWdzICsgVVNJX0RJVik7Cit9CisKK3N0YXRpYyB2b2lkIG51YzkwMF9pbml0X3NwaShzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcpCit7CisJY2xrX2VuYWJsZShody0+Y2xrKTsKKwlzcGluX2xvY2tfaW5pdCgmaHctPmxvY2spOworCisJbnVjOTAwX3R4X2VkZ2UoaHcsIGh3LT5wZGF0YS0+dHhuZWcpOworCW51YzkwMF9yeF9lZGdlKGh3LCBody0+cGRhdGEtPnJ4bmVnKTsKKwludWM5MDBfc2VuZF9maXJzdChodywgaHctPnBkYXRhLT5sc2IpOworCW51YzkwMF9zZXRfc2xlZXAoaHcsIGh3LT5wZGF0YS0+c2xlZXApOworCW51YzkwMF9zcGlfc2V0dXBfdHhiaXRsZW4oaHcsIGh3LT5wZGF0YS0+dHhiaXRsZW4pOworCW51YzkwMF9zcGlfc2V0dXBfdHhudW0oaHcsIGh3LT5wZGF0YS0+dHhudW0pOworCW51YzkwMF9zZXRfZGl2aWRlcihodyk7CisJbnVjOTAwX2VuYWJsZV9pbnQoaHcpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBudWM5MDBfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG51YzkwMF9zcGkgKmh3OworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJaW50IGVyciA9IDA7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbnVjOTAwX3NwaSkpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBtZW1vcnkgZm9yIHNwaV9tYXN0ZXJcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9ub21lbTsKKwl9CisKKwlodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwltZW1zZXQoaHcsIDAsIHNpemVvZihzdHJ1Y3QgbnVjOTAwX3NwaSkpOworCisJaHctPm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJaHctPnBkYXRhICA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWh3LT5kZXYgPSAmcGRldi0+ZGV2OworCisJaWYgKGh3LT5wZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9wZGF0YTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisJaW5pdF9jb21wbGV0aW9uKCZody0+ZG9uZSk7CisKKwltYXN0ZXItPm1vZGVfYml0cyAgICAgICAgICA9IFNQSV9NT0RFXzA7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCAgICAgPSBody0+cGRhdGEtPm51bV9jczsKKwltYXN0ZXItPmJ1c19udW0gICAgICAgICAgICA9IGh3LT5wZGF0YS0+YnVzX251bTsKKwlody0+Yml0YmFuZy5tYXN0ZXIgICAgICAgICA9IGh3LT5tYXN0ZXI7CisJaHctPmJpdGJhbmcuc2V0dXBfdHJhbnNmZXIgPSBudWM5MDBfc3BpX3NldHVweGZlcjsKKwlody0+Yml0YmFuZy5jaGlwc2VsZWN0ICAgICA9IG51YzkwMF9zcGlfY2hpcHNlbDsKKwlody0+Yml0YmFuZy50eHJ4X2J1ZnMgICAgICA9IG51YzkwMF9zcGlfdHhyeDsKKwlody0+Yml0YmFuZy5tYXN0ZXItPnNldHVwICA9IG51YzkwMF9zcGlfc2V0dXA7CisKKwlody0+cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoaHctPnJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgSU9SRVNPVVJDRV9NRU1cbiIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9wZGF0YTsKKwl9CisKKwlody0+aW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKGh3LT5yZXMtPnN0YXJ0LAorCQkJCQlyZXNvdXJjZV9zaXplKGh3LT5yZXMpLCBwZGV2LT5uYW1lKTsKKworCWlmIChody0+aW9hcmVhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlc2VydmUgcmVnaW9uXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9wZGF0YTsKKwl9CisKKwlody0+cmVncyA9IGlvcmVtYXAoaHctPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaHctPnJlcykpOworCWlmIChody0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgSU9cbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX2lvbWFwOworCX0KKworCWh3LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChody0+aXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgc3BlY2lmaWVkXG4iKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKGh3LT5pcnEsIG51YzkwMF9zcGlfaXJxLCAwLCBwZGV2LT5uYW1lLCBodyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRXG4iKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWh3LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzcGkiKTsKKwlpZiAoSVNfRVJSKGh3LT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIGNsb2NrIGZvciBkZXZpY2VcbiIpOworCQllcnIgPSBQVFJfRVJSKGh3LT5jbGspOworCQlnb3RvIGVycl9jbGs7CisJfQorCisJbWZwX3NldF9ncm91cGcoJnBkZXYtPmRldik7CisJbnVjOTAwX2luaXRfc3BpKGh3KTsKKworCWVyciA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZody0+Yml0YmFuZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCX0KKworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJY2xrX2Rpc2FibGUoaHctPmNsayk7CisJY2xrX3B1dChody0+Y2xrKTsKK2Vycl9jbGs6CisJZnJlZV9pcnEoaHctPmlycSwgaHcpOworZXJyX2lycToKKwlpb3VubWFwKGh3LT5yZWdzKTsKK2Vycl9pb21hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24oaHctPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaHctPnJlcykpOworCWtmcmVlKGh3LT5pb2FyZWEpOworZXJyX3BkYXRhOgorCXNwaV9tYXN0ZXJfcHV0KGh3LT5tYXN0ZXIpOzsKKworZXJyX25vbWVtOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG51YzkwMF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbnVjOTAwX3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJZnJlZV9pcnEoaHctPmlycSwgaHcpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXNwaV91bnJlZ2lzdGVyX21hc3Rlcihody0+bWFzdGVyKTsKKworCWNsa19kaXNhYmxlKGh3LT5jbGspOworCWNsa19wdXQoaHctPmNsayk7CisKKwlpb3VubWFwKGh3LT5yZWdzKTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihody0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShody0+cmVzKSk7CisJa2ZyZWUoaHctPmlvYXJlYSk7CisKKwlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbnVjOTAwX3NwaV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG51YzkwMF9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChudWM5MDBfc3BpX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm51YzkwMC1zcGkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbnVjOTAwX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbnVjOTAwX3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbnVjOTAwX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm51YzkwMF9zcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobnVjOTAwX3NwaV9pbml0KTsKK21vZHVsZV9leGl0KG51YzkwMF9zcGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIldhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigibnVjOTAwIHNwaSBkcml2ZXIhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm51YzkwMC1zcGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCmluZGV4IDMzZDk0ZjcuLmMwMTA3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtMSw3ICsxLDcgQEAKIC8qIGxpbnV4L2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQmVuIERvb2tzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOCw2ICsyOCwxMSBAQAogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCisjaW5jbHVkZSA8cGxhdC9maXEuaD4KKyNpbmNsdWRlIDxhc20vZmlxLmg+CisKKyNpbmNsdWRlICJzcGlfczNjMjR4eF9maXEuaCIKKwogLyoqCiAgKiBzM2MyNHh4X3NwaV9kZXZzdGF0ZSAtIHBlciBkZXZpY2UgZGF0YQogICogQGh6OiBMYXN0IGZyZXF1ZW5jeSBjYWxjdWxhdGVkIGZvciBAc3BwcmUgZmllbGQuCkBAIC00Miw2ICs0NywxMyBAQAogCXU4CQlzcHByZTsKIH07CiAKK2VudW0gc3BpX2ZpcV9tb2RlIHsKKwlGSVFfTU9ERV9OT05FCT0gMCwKKwlGSVFfTU9ERV9UWAk9IDEsCisJRklRX01PREVfUlgJPSAyLAorCUZJUV9NT0RFX1RYUlgJPSAzLAorfTsKKwogc3RydWN0IHMzYzI0eHhfc3BpIHsKIAkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLwogCXN0cnVjdCBzcGlfYml0YmFuZwkgYml0YmFuZzsKQEAgLTUyLDYgKzY0LDExIEBACiAJaW50CQkJIGxlbjsKIAlpbnQJCQkgY291bnQ7CiAKKwlzdHJ1Y3QgZmlxX2hhbmRsZXIJIGZpcV9oYW5kbGVyOworCWVudW0gc3BpX2ZpcV9tb2RlCSBmaXFfbW9kZTsKKwl1bnNpZ25lZCBjaGFyCQkgZmlxX2ludXNlOworCXVuc2lnbmVkIGNoYXIJCSBmaXFfY2xhaW1lZDsKKwogCXZvaWQJCQkoKnNldF9jcykoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKIAkJCQkJICBpbnQgY3MsIGludCBwb2wpOwogCkBAIC02Nyw2ICs4NCw3IEBACiAJc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnBkYXRhOwogfTsKIAorCiAjZGVmaW5lIFNQQ09OX0RFRkFVTFQgKFMzQzI0MTBfU1BDT05fTVNUUiB8IFMzQzI0MTBfU1BDT05fU01PRF9JTlQpCiAjZGVmaW5lIFNQUElOX0RFRkFVTFQgKFMzQzI0MTBfU1BQSU5fS0VFUCkKIApAQCAtMTI3LDcgKzE0NSw3IEBACiAJfQogCiAJaWYgKHNwaS0+bW9kZSAhPSBjcy0+bW9kZSkgewotCQl1OCBzcGNvbiA9IFNQQ09OX0RFRkFVTFQ7CisJCXU4IHNwY29uID0gU1BDT05fREVGQVVMVCB8IFMzQzI0MTBfU1BDT05fRU5TQ0s7CiAKIAkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQogCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUEhBX0ZNVEI7CkBAIC0yMTQsMTMgKzIzMiwxOTYgQEAKIAlyZXR1cm4gaHctPnR4ID8gaHctPnR4W2NvdW50XSA6IDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1BJX1MzQzI0WFhfRklRCisvKiBTdXBwb3J0IGZvciBGSVEgYmFzZWQgcHNldWRvLURNQSB0byBpbXByb3ZlIHRoZSB0cmFuc2ZlciBzcGVlZC4KKyAqCisgKiBUaGlzIGNvZGUgdXNlcyB0aGUgYXNzZW1ibHkgaGVscGVyIGluIHNwaV9zM2MyNHh4X3NwaS5TIHdoaWNoIGlzCisgKiB1c2VkIGJ5IHRoZSBGSVEgY29yZSB0byBtb3ZlIGRhdGEgYmV0d2VlbiBtYWluIG1lbW9yeSBhbmQgdGhlIHBlcmlwaGVyYWwKKyAqIGJsb2NrLiBTaW5jZSB0aGlzIGlzIGNvZGUgcnVubmluZyBvbiB0aGUgcHJvY2Vzc29yLCB0aGVyZSBpcyBubyBwcm9ibGVtCisgKiB3aXRoIGNhY2hlIGNvaGVyZW5jeSBvZiB0aGUgYnVmZmVycywgc28gd2UgY2FuIHVzZSBhbnkgYnVmZmVyIHdlIGxpa2UuCisgKi8KKworLyoqCisgKiBzdHJ1Y3Qgc3BpX2ZpcV9jb2RlIC0gRklRIGNvZGUgYW5kIGhlYWRlcgorICogQGxlbmd0aDogVGhlIGxlbmd0aCBvZiB0aGUgY29kZSBmcmFnbWVudCwgZXhjbHVkaW5nIHRoaXMgaGVhZGVyLgorICogQGFja19vZmZzZXQ6IFRoZSBvZmZzZXQgZnJvbSBAZGF0YSB0byB0aGUgd29yZCB0byBwbGFjZSB0aGUgSVJRIEFDSyBiaXQgYXQuCisgKiBAZGF0YTogVGhlIGNvZGUgaXRzZWxmIHRvIGluc3RhbGwgYXMgYSBGSVEgaGFuZGxlci4KKyAqLworc3RydWN0IHNwaV9maXFfY29kZSB7CisJdTMyCWxlbmd0aDsKKwl1MzIJYWNrX29mZnNldDsKKwl1OAlkYXRhWzBdOworfTsKKworZXh0ZXJuIHN0cnVjdCBzcGlfZmlxX2NvZGUgczNjMjR4eF9zcGlfZmlxX3R4cng7CitleHRlcm4gc3RydWN0IHNwaV9maXFfY29kZSBzM2MyNHh4X3NwaV9maXFfdHg7CitleHRlcm4gc3RydWN0IHNwaV9maXFfY29kZSBzM2MyNHh4X3NwaV9maXFfcng7CisKKy8qKgorICogYWNrX2JpdCAtIHR1cm4gSVJRIGludG8gSVJRIGFja25vd2xlZGdlbWVudCBiaXQKKyAqIEBpcnE6IFRoZSBpbnRlcnJ1cHQgbnVtYmVyCisgKgorICogUmV0dXJucyB0aGUgYml0IHRvIHdyaXRlIHRvIHRoZSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGFja19iaXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMSA8PCAoaXJxIC0gSVJRX0VJTlQwKTsKK30KKworLyoqCisgKiBzM2MyNHh4X3NwaV90cnlmaXEgLSBhdHRlbXB0IHRvIGNsYWltIGFuZCBzZXR1cCBGSVEgZm9yIHRyYW5zZmVyCisgKiBAaHc6IFRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqCisgKiBDbGFpbSB0aGUgRklRIGhhbmRsZXIgKG9ubHkgb25lIGNhbiBiZSBhY3RpdmUgYXQgYW55IG9uZSB0aW1lKSBhbmQKKyAqIHRoZW4gc2V0dXAgdGhlIGNvcnJlY3QgdHJhbnNmZXIgY29kZSBmb3IgdGhpcyB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIGNhbGwgdXBkYXRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBzdGF0ZSBpbmZvcm1hdGlvbiBpZiBzdWNlc3NmdWwsCisgKiBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgbW9yZSB0aGFuIHN0YXJ0IHRoZSB0cmFuc2ZlcgorICogYXMgbm9ybWFsLCBzaW5jZSB0aGUgSVJRIHdpbGwgaGF2ZSBiZWVuIHJlLXJvdXRlZCB0byB0aGUgRklRIGhhbmRsZXIuCisqLwordm9pZCBzM2MyNHh4X3NwaV90cnlmaXEoc3RydWN0IHMzYzI0eHhfc3BpICpodykKK3sKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCWVudW0gc3BpX2ZpcV9tb2RlIG1vZGU7CisJc3RydWN0IHNwaV9maXFfY29kZSAqY29kZTsKKwlpbnQgcmV0OworCisJaWYgKCFody0+ZmlxX2NsYWltZWQpIHsKKwkJLyogdHJ5IGFuZCBjbGFpbSBmaXEgaWYgd2UgaGF2ZW4ndCBnb3QgaXQsIGFuZCBpZiBub3QKKwkJICogdGhlbiByZXR1cm4gYW5kIHNpbXBseSB1c2UgYW5vdGhlciB0cmFuc2ZlciBtZXRob2QgKi8KKworCQlyZXQgPSBjbGFpbV9maXEoJmh3LT5maXFfaGFuZGxlcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGh3LT50eCAmJiAhaHctPnJ4KQorCQltb2RlID0gRklRX01PREVfVFg7CisJZWxzZSBpZiAoaHctPnJ4ICYmICFody0+dHgpCisJCW1vZGUgPSBGSVFfTU9ERV9SWDsKKwllbHNlCisJCW1vZGUgPSBGSVFfTU9ERV9UWFJYOworCisJcmVncy51cmVnc1tmaXFfcnNwaV0gPSAobG9uZylody0+cmVnczsKKwlyZWdzLnVyZWdzW2ZpcV9ycnhdICA9IChsb25nKWh3LT5yeDsKKwlyZWdzLnVyZWdzW2ZpcV9ydHhdICA9IChsb25nKWh3LT50eCArIDE7CisJcmVncy51cmVnc1tmaXFfcmNvdW50XSA9IGh3LT5sZW4gLSAxOworCXJlZ3MudXJlZ3NbZmlxX3JpcnFdID0gKGxvbmcpUzNDMjRYWF9WQV9JUlE7CisKKwlzZXRfZmlxX3JlZ3MoJnJlZ3MpOworCisJaWYgKGh3LT5maXFfbW9kZSAhPSBtb2RlKSB7CisJCXUzMiAqYWNrX3B0cjsKKworCQlody0+ZmlxX21vZGUgPSBtb2RlOworCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIEZJUV9NT0RFX1RYOgorCQkJY29kZSA9ICZzM2MyNHh4X3NwaV9maXFfdHg7CisJCQlicmVhazsKKwkJY2FzZSBGSVFfTU9ERV9SWDoKKwkJCWNvZGUgPSAmczNjMjR4eF9zcGlfZmlxX3J4OworCQkJYnJlYWs7CisJCWNhc2UgRklRX01PREVfVFhSWDoKKwkJCWNvZGUgPSAmczNjMjR4eF9zcGlfZmlxX3R4cng7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvZGUgPSBOVUxMOworCQl9CisKKwkJQlVHX09OKCFjb2RlKTsKKworCQlhY2tfcHRyID0gKHUzMiAqKSZjb2RlLT5kYXRhW2NvZGUtPmFja19vZmZzZXRdOworCQkqYWNrX3B0ciA9IGFja19iaXQoaHctPmlycSk7CisKKwkJc2V0X2ZpcV9oYW5kbGVyKCZjb2RlLT5kYXRhLCBjb2RlLT5sZW5ndGgpOworCX0KKworCXMzYzI0eHhfc2V0X2ZpcShody0+aXJxLCB0cnVlKTsKKworCWh3LT5maXFfbW9kZSA9IG1vZGU7CisJaHctPmZpcV9pbnVzZSA9IDE7Cit9CisKKy8qKgorICogczNjMjR4eF9zcGlfZmlxb3AgLSBGSVEgY29yZSBjb2RlIGNhbGxiYWNrCisgKiBAcHc6IERhdGEgcmVnaXN0ZXJlZCB3aXRoIHRoZSBoYW5kbGVyCisgKiBAcmVsZWFzZTogV2hldGhlciB0aGlzIGlzIGEgcmVsZWFzZSBvciBhIHJldHVybi4KKyAqCisgKiBDYWxsZWQgYnkgdGhlIEZJUSBjb2RlIHdoZW4gYW5vdGhlciBtb2R1bGUgd2FudHMgdG8gdXNlIHRoZSBGSVEsIHNvCisgKiByZXR1cm4gd2hldGhlciB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMgb3Igbm90IGFuZCB0aGVuIHVwZGF0ZSBvdXIKKyAqIGludGVybmFsIHN0YXRlLgorICovCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX2ZpcW9wKHZvaWQgKnB3LCBpbnQgcmVsZWFzZSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcHc7CisJaW50IHJldCA9IDA7CisKKwlpZiAocmVsZWFzZSkgeworCQlpZiAoaHctPmZpcV9pbnVzZSkKKwkJCXJldCA9IC1FQlVTWTsKKworCQkvKiBub3RlLCB3ZSBkbyBub3QgbmVlZCB0byB1bnJvdXRlIHRoZSBGSVEsIGFzIHRoZSBGSVEKKwkJICogdmVjdG9yIGNvZGUgZGUtcm91dGVzIGl0IHRvIHNpZ25hbCB0aGUgZW5kIG9mIHRyYW5zZmVyICovCisKKwkJaHctPmZpcV9tb2RlID0gRklRX01PREVfTk9ORTsKKwkJaHctPmZpcV9jbGFpbWVkID0gMDsKKwl9IGVsc2UgeworCQlody0+ZmlxX2NsYWltZWQgPSAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogczNjMjR4eF9zcGlfaW5pdGZpcSAtIHNldHVwIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIEZJUSBjb3JlCisgKiBAaHc6IFRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqCisgKiBTZXR1cCB0aGUgZmlxX2hhbmRsZXIgYmxvY2sgdG8gcGFzcyB0byB0aGUgRklRIGNvcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2MyNHh4X3NwaV9pbml0ZmlxKHN0cnVjdCBzM2MyNHh4X3NwaSAqaHcpCit7CisJaHctPmZpcV9oYW5kbGVyLmRldl9pZCA9IGh3OworCWh3LT5maXFfaGFuZGxlci5uYW1lID0gZGV2X25hbWUoaHctPmRldik7CisJaHctPmZpcV9oYW5kbGVyLmZpcV9vcCA9IHMzYzI0eHhfc3BpX2ZpcW9wOworfQorCisvKioKKyAqIHMzYzI0eHhfc3BpX3VzZWZpcSAtIHJldHVybiBpZiB3ZSBzaG91bGQgYmUgdXNpbmcgRklRLgorICogQGh3OiBUaGUgaGFyZHdhcmUgc3RhdGUuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGRhdGEgc3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBjaGFubmVsIGlzCisgKiBhbGxvd2VkIHRvIHVzZSB0aGUgRklRLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgczNjMjR4eF9zcGlfdXNlZmlxKHN0cnVjdCBzM2MyNHh4X3NwaSAqaHcpCit7CisJcmV0dXJuIGh3LT5wZGF0YS0+dXNlX2ZpcTsKK30KKworLyoqCisgKiBzM2MyNHh4X3NwaV91c2luZ2ZpcSAtIHJldHVybiBpZiBjaGFubmVsIGlzIHVzaW5nIEZJUQorICogQHNwaTogVGhlIGhhcmR3YXJlIHN0YXRlLgorICoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBjaGFubmVsIGlzIGN1cnJlbnRseSB1c2luZyB0aGUgRklRIChzZXBhcmF0ZSBmcm9tCisgKiB3aGV0aGVyIHRoZSBGSVEgaXMgY2xhaW1lZCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzM2MyNHh4X3NwaV91c2luZ2ZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnNwaSkKK3sKKwlyZXR1cm4gc3BpLT5maXFfaW51c2U7Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjMjR4eF9zcGlfaW5pdGZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnMpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHMzYzI0eHhfc3BpX3RyeWZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnMpIHsgfQorc3RhdGljIGlubGluZSBib29sIHMzYzI0eHhfc3BpX3VzZWZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnMpIHsgcmV0dXJuIGZhbHNlOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgczNjMjR4eF9zcGlfdXNpbmdmaXEoc3RydWN0IHMzYzI0eHhfc3BpICpzKSB7IHJldHVybiBmYWxzZTsgfQorCisjZW5kaWYgLyogQ09ORklHX1NQSV9TM0MyNFhYX0ZJUSAqLworCiBzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3R4cngoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKIHsKIAlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKIAotCWRldl9kYmcoJnNwaS0+ZGV2LCAidHhyeDogdHggJXAsIHJ4ICVwLCBsZW4gJWRcbiIsCi0JCXQtPnR4X2J1ZiwgdC0+cnhfYnVmLCB0LT5sZW4pOwotCiAJaHctPnR4ID0gdC0+dHhfYnVmOwogCWh3LT5yeCA9IHQtPnJ4X2J1ZjsKIAlody0+bGVuID0gdC0+bGVuOwpAQCAtMjI4LDExICs0MjksMTQgQEAKIAogCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOwogCisJaHctPmZpcV9pbnVzZSA9IDA7CisJaWYgKHMzYzI0eHhfc3BpX3VzZWZpcShodykgJiYgdC0+bGVuID49IDMpCisJCXMzYzI0eHhfc3BpX3RyeWZpcShodyk7CisKIAkvKiBzZW5kIHRoZSBmaXJzdCBieXRlICovCiAJd3JpdGViKGh3X3R4Ynl0ZShodywgMCksIGh3LT5yZWdzICsgUzNDMjQxMF9TUFREQVQpOwogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmaHctPmRvbmUpOwotCiAJcmV0dXJuIGh3LT5jb3VudDsKIH0KIApAQCAtMjU0LDE3ICs0NTgsMjcgQEAKIAkJZ290byBpcnFfZG9uZTsKIAl9CiAKLQlody0+Y291bnQrKzsKKwlpZiAoIXMzYzI0eHhfc3BpX3VzaW5nZmlxKGh3KSkgeworCQlody0+Y291bnQrKzsKIAotCWlmIChody0+cngpCi0JCWh3LT5yeFtjb3VudF0gPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BSREFUKTsKKwkJaWYgKGh3LT5yeCkKKwkJCWh3LT5yeFtjb3VudF0gPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BSREFUKTsKIAotCWNvdW50Kys7CisJCWNvdW50Kys7CiAKLQlpZiAoY291bnQgPCBody0+bGVuKQotCQl3cml0ZWIoaHdfdHhieXRlKGh3LCBjb3VudCksIGh3LT5yZWdzICsgUzNDMjQxMF9TUFREQVQpOwotCWVsc2UKKwkJaWYgKGNvdW50IDwgaHctPmxlbikKKwkJCXdyaXRlYihod190eGJ5dGUoaHcsIGNvdW50KSwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQVERBVCk7CisJCWVsc2UKKwkJCWNvbXBsZXRlKCZody0+ZG9uZSk7CisJfSBlbHNlIHsKKwkJaHctPmNvdW50ID0gaHctPmxlbjsKKwkJaHctPmZpcV9pbnVzZSA9IDA7CisKKwkJaWYgKGh3LT5yeCkKKwkJCWh3LT5yeFtody0+bGVuLTFdID0gcmVhZGIoaHctPnJlZ3MgKyBTM0MyNDEwX1NQUkRBVCk7CisKIAkJY29tcGxldGUoJmh3LT5kb25lKTsKKwl9CiAKICBpcnFfZG9uZToKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMjIsNiArNTM2LDEwIEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOwogCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOwogCisJLyogaW5pdGlhbGlzZSBmaXEgaGFuZGxlciAqLworCisJczNjMjR4eF9zcGlfaW5pdGZpcShodyk7CisKIAkvKiBzZXR1cCB0aGUgbWFzdGVyIHN0YXRlLiAqLwogCiAJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCkBAIC00ODksNyArNzA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHMzYzI0eHhfc3BpX3Btb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHMzYzI0eHhfc3BpX3Btb3BzID0gewogCS5zdXNwZW5kCT0gczNjMjR4eF9zcGlfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfc3BpX3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9maXEuUyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2ZpcS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTNjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9maXEuUwpAQCAtMCwwICsxLDExNiBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIFNQSSAtIEZJUSBwc2V1ZG8tRE1BIHRyYW5zZmVyIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CisKKyNpbmNsdWRlICJzcGlfczNjMjR4eF9maXEuaCIKKworCS50ZXh0CisKKwlAIGVudHJ5IHRvIHRoZXNlIHJvdXRpbmVzIGlzIGFzIGZvbGxvd3MsIHdpdGggdGhlIHJlZ2lzdGVyIG5hbWVzCisJQCBkZWZpbmVkIGluIGZpcS5oIHNvIHRoYXQgdGhleSBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIEMgZmlsZXMgd2hpY2gKKwlAIHNldHVwIHRoZSBjYWxsaW5nIHJlZ2lzdGVycy4KKwlACisJQCBmaXFfcmlycQlUaGUgYmFzZSBvZiB0aGUgSVJRIHJlZ2lzdGVycyB0byBmaW5kIFMzQzI0MTBfU1JDUE5ECisJQCBmaXFfcnRtcAlUZW1wb3JhcnkgcmVnaXN0ZXIgdG8gaG9sZCB0eC9yeCBkYXRhCisJQCBmaXFfcnNwaQlUaGUgYmFzZSBvZiB0aGUgU1BJIHJlZ2lzdGVyIGJsb2NrCisJQCBmaXFfcnR4CVRoZSB0eCBidWZmZXIgcG9pbnRlcgorCUAgZmlxX3JyeAlUaGUgcnggYnVmZmVyIHBvaW50ZXIKKwlAIGZpcV9yY291bnQJVGhlIG51bWJlciBvZiBieXRlcyB0byBtb3ZlCisKKwlAIGVhY2ggZW50cnkgc3RhcnRzIHdpdGggYSB3b3JkIGVudHJ5IG9mIGhvdyBsb25nIGl0IGlzCisJQCBhbmQgYW4gb2Zmc2V0IHRvIHRoZSBpcnEgYWNrbm93bGVkZ21lbnQgd29yZAorCitFTlRSWShzM2MyNHh4X3NwaV9maXFfcngpCitzM2MyNHh4X3NwaV9maXhfcng6CisJLndvcmQJZmlxX3J4X2VuZCAtIGZpcV9yeF9zdGFydAorCS53b3JkCWZpcV9yeF9pcnFfYWNrIC0gZmlxX3J4X3N0YXJ0CitmaXFfcnhfc3RhcnQ6CisJbGRyCWZpcV9ydG1wLCBmaXFfcnhfaXJxX2FjaworCXN0cglmaXFfcnRtcCwgWyBmaXFfcmlycSwgIyBTM0MyNDEwX1NSQ1BORCAtIFMzQzI0WFhfVkFfSVJRIF0KKworCWxkcmIJZmlxX3J0bXAsIFsgZmlxX3JzcGksICMgIFMzQzI0MTBfU1BSREFUIF0KKwlzdHJiCWZpcV9ydG1wLCBbIGZpcV9ycnggXSwgIzEKKworCW1vdglmaXFfcnRtcCwgIzB4ZmYKKwlzdHJiCWZpcV9ydG1wLCBbIGZpcV9yc3BpLCAjIFMzQzI0MTBfU1BUREFUIF0KKworCXN1YnMJZmlxX3Jjb3VudCwgZmlxX3Jjb3VudCwgIzEKKwlzdWJuZXMJcGMsIGxyLCAjNAkJQEAgcmV0dXJuLCBzdGlsbCBoYXZlIHdvcmsgdG8gZG8KKworCUBAIHNldCBJUlEgY29udHJvbGxlciBzbyB0aGF0IG5leHQgb3Agd2lsbCB0cmlnZ2VyIElSUQorCW1vdglmaXFfcnRtcCwgIzAKKwlzdHIJZmlxX3J0bXAsIFsgZmlxX3JpcnEsICMgUzNDMjQxMF9JTlRNT0QgIC0gUzNDMjRYWF9WQV9JUlEgXQorCXN1YnMJcGMsIGxyLCAjNAorCitmaXFfcnhfaXJxX2FjazoKKwkud29yZAkwCitmaXFfcnhfZW5kOgorCitFTlRSWShzM2MyNHh4X3NwaV9maXFfdHhyeCkKK3MzYzI0eHhfc3BpX2ZpcV90eHJ4OgorCS53b3JkCWZpcV90eHJ4X2VuZCAtIGZpcV90eHJ4X3N0YXJ0CisJLndvcmQJZmlxX3R4cnhfaXJxX2FjayAtIGZpcV90eHJ4X3N0YXJ0CitmaXFfdHhyeF9zdGFydDoKKworCWxkcmIJZmlxX3J0bXAsIFsgZmlxX3JzcGksICMgIFMzQzI0MTBfU1BSREFUIF0KKwlzdHJiCWZpcV9ydG1wLCBbIGZpcV9ycnggXSwgIzEKKworCWxkcglmaXFfcnRtcCwgZmlxX3R4cnhfaXJxX2FjaworCXN0cglmaXFfcnRtcCwgWyBmaXFfcmlycSwgIyBTM0MyNDEwX1NSQ1BORCAtIFMzQzI0WFhfVkFfSVJRIF0KKworCWxkcmIJZmlxX3J0bXAsIFsgZmlxX3J0eCBdLCAjMQorCXN0cmIJZmlxX3J0bXAsIFsgZmlxX3JzcGksICMgUzNDMjQxMF9TUFREQVQgXQorCisJc3VicwlmaXFfcmNvdW50LCBmaXFfcmNvdW50LCAjMQorCXN1Ym5lcwlwYywgbHIsICM0CQlAQCByZXR1cm4sIHN0aWxsIGhhdmUgd29yayB0byBkbworCisJbW92CWZpcV9ydG1wLCAjMAorCXN0cglmaXFfcnRtcCwgWyBmaXFfcmlycSwgIyBTM0MyNDEwX0lOVE1PRCAgLSBTM0MyNFhYX1ZBX0lSUSBdCisJc3VicwlwYywgbHIsICM0CisKK2ZpcV90eHJ4X2lycV9hY2s6CisJLndvcmQJMAorCitmaXFfdHhyeF9lbmQ6CisKK0VOVFJZKHMzYzI0eHhfc3BpX2ZpcV90eCkKK3MzYzI0eHhfc3BpX2ZpeF90eDoKKwkud29yZAlmaXFfdHhfZW5kIC0gZmlxX3R4X3N0YXJ0CisJLndvcmQJZmlxX3R4X2lycV9hY2sgLSBmaXFfdHhfc3RhcnQKK2ZpcV90eF9zdGFydDoKKwlsZHJiCWZpcV9ydG1wLCBbIGZpcV9yc3BpLCAjICBTM0MyNDEwX1NQUkRBVCBdCisKKwlsZHIJZmlxX3J0bXAsIGZpcV90eF9pcnFfYWNrCisJc3RyCWZpcV9ydG1wLCBbIGZpcV9yaXJxLCAjIFMzQzI0MTBfU1JDUE5EIC0gUzNDMjRYWF9WQV9JUlEgXQorCisJbGRyYglmaXFfcnRtcCwgWyBmaXFfcnR4IF0sICMxCisJc3RyYglmaXFfcnRtcCwgWyBmaXFfcnNwaSwgIyBTM0MyNDEwX1NQVERBVCBdCisKKwlzdWJzCWZpcV9yY291bnQsIGZpcV9yY291bnQsICMxCisJc3VibmVzCXBjLCBsciwgIzQJCUBAIHJldHVybiwgc3RpbGwgaGF2ZSB3b3JrIHRvIGRvCisKKwltb3YJZmlxX3J0bXAsICMwCisJc3RyCWZpcV9ydG1wLCBbIGZpcV9yaXJxLCAjIFMzQzI0MTBfSU5UTU9EICAtIFMzQzI0WFhfVkFfSVJRIF0KKwlzdWJzCXBjLCBsciwgIzQKKworZmlxX3R4X2lycV9hY2s6CisJLndvcmQJMAorCitmaXFfdHhfZW5kOgorCisJLmVuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLmggYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9maXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk1MGJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIFNQSSAtIEZJUSBwc2V1ZG8tRE1BIHRyYW5zZmVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogV2UgaGF2ZSBSOCB0aHJvdWdoIFIxMyB0byBwbGF5IHdpdGggKi8KKworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfX1JFR19OUih4KSAgICAgciMjeAorI2Vsc2UKKyNkZWZpbmUgX19SRUdfTlIoeCkgICAgICh4KQorI2VuZGlmCisKKyNkZWZpbmUgZmlxX3JzcGkJX19SRUdfTlIoOCkKKyNkZWZpbmUgZmlxX3J0bXAJX19SRUdfTlIoOSkKKyNkZWZpbmUgZmlxX3JyeAkJX19SRUdfTlIoMTApCisjZGVmaW5lIGZpcV9ydHgJCV9fUkVHX05SKDExKQorI2RlZmluZSBmaXFfcmNvdW50CV9fUkVHX05SKDEyKQorI2RlZmluZSBmaXFfcmlycQlfX1JFR19OUigxMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTQ1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCkBAIC0wLDAgKzEsMTE5NiBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzY0eHguYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4KKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvc3BpLmg+CisKKy8qIFJlZ2lzdGVycyBhbmQgYml0LWZpZWxkcyAqLworCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX0NGRwkJMHgwMAorI2RlZmluZSBTM0M2NFhYX1NQSV9DTEtfQ0ZHCQkweDA0CisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQ0ZHCTB4MDgKKyNkZWZpbmUgUzNDNjRYWF9TUElfU0xBVkVfU0VMCTB4MEMKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX0VOCQkweDEwCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUQVRVUwkJMHgxNAorI2RlZmluZSBTM0M2NFhYX1NQSV9UWF9EQVRBCQkweDE4CisjZGVmaW5lIFMzQzY0WFhfU1BJX1JYX0RBVEEJCTB4MUMKKyNkZWZpbmUgUzNDNjRYWF9TUElfUEFDS0VUX0NOVAkweDIwCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BFTkRJTkdfQ0xSCTB4MjQKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9DRkcJMHgyOAorI2RlZmluZSBTM0M2NFhYX1NQSV9GQl9DTEsJCTB4MkMKKworI2RlZmluZSBTM0M2NFhYX1NQSV9DSF9IU19FTgkJKDE8PDYpCS8qIEhpZ2ggU3BlZWQgRW5hYmxlICovCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX1NXX1JTVAkJKDE8PDUpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX1NMQVZFCQkoMTw8NCkKKyNkZWZpbmUgUzNDNjRYWF9TUElfQ1BPTF9MCQkoMTw8MykKKyNkZWZpbmUgUzNDNjRYWF9TUElfQ1BIQV9CCQkoMTw8MikKKyNkZWZpbmUgUzNDNjRYWF9TUElfQ0hfUlhDSF9PTgkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX1RYQ0hfT04JCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NMS1NFTF9TUkNNU0sJKDM8PDkpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NMS1NFTF9TUkNTSEZUCTkKKyNkZWZpbmUgUzNDNjRYWF9TUElfRU5DTEtfRU5BQkxFCSgxPDw4KQorI2RlZmluZSBTM0M2NFhYX1NQSV9QU1JfTUFTSyAJCTB4ZmYKKworI2RlZmluZSBTM0M2NFhYX1NQSV9NT0RFX0NIX1RTWl9CWVRFCQkoMDw8MjkpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQ0hfVFNaX0hBTEZXT1JECSgxPDwyOSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfTU9ERV9DSF9UU1pfV09SRAkJKDI8PDI5KQorI2RlZmluZSBTM0M2NFhYX1NQSV9NT0RFX0NIX1RTWl9NQVNLCQkoMzw8MjkpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9CWVRFCQkoMDw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9IQUxGV09SRAkoMTw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9XT1JECQkoMjw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9NQVNLCQkoMzw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfUlhETUFfT04JCSgxPDwyKQorI2RlZmluZSBTM0M2NFhYX1NQSV9NT0RFX1RYRE1BX09OCQkoMTw8MSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfTU9ERV80QlVSU1QJCQkoMTw8MCkKKworI2RlZmluZSBTM0M2NFhYX1NQSV9TTEFWRV9BVVRPCQkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NMQVZFX1NJR19JTkFDVAkJKDE8PDApCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfQUNUKGMpIHdyaXRlbCgwLCAoYyktPnJlZ3MgKyBTM0M2NFhYX1NQSV9TTEFWRV9TRUwpCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfREVBQ1QoYykgd3JpdGVsKFMzQzY0WFhfU1BJX1NMQVZFX1NJR19JTkFDVCwgXAorCQkJCQkoYyktPnJlZ3MgKyBTM0M2NFhYX1NQSV9TTEFWRV9TRUwpCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX1RSQUlMSU5HX0VOCQkoMTw8NikKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX1JYX09WRVJSVU5fRU4JCSgxPDw1KQorI2RlZmluZSBTM0M2NFhYX1NQSV9JTlRfUlhfVU5ERVJSVU5fRU4JCSgxPDw0KQorI2RlZmluZSBTM0M2NFhYX1NQSV9JTlRfVFhfT1ZFUlJVTl9FTgkJKDE8PDMpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0lOVF9UWF9VTkRFUlJVTl9FTgkJKDE8PDIpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0lOVF9SWF9GSUZPUkRZX0VOCQkoMTw8MSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX1RYX0ZJRk9SRFlfRU4JCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1JYX09WRVJSVU5fRVJSCQkoMTw8NSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1RfUlhfVU5ERVJSVU5fRVJSCSgxPDw0KQorI2RlZmluZSBTM0M2NFhYX1NQSV9TVF9UWF9PVkVSUlVOX0VSUgkJKDE8PDMpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1RYX1VOREVSUlVOX0VSUgkoMTw8MikKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1RfUlhfRklGT1JEWQkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1RYX0ZJRk9SRFkJCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BBQ0tFVF9DTlRfRU4JCSgxPDwxNikKKworI2RlZmluZSBTM0M2NFhYX1NQSV9QTkRfVFhfVU5ERVJSVU5fQ0xSCQkoMTw8NCkKKyNkZWZpbmUgUzNDNjRYWF9TUElfUE5EX1RYX09WRVJSVU5fQ0xSCQkoMTw8MykKKyNkZWZpbmUgUzNDNjRYWF9TUElfUE5EX1JYX1VOREVSUlVOX0NMUgkJKDE8PDIpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BORF9SWF9PVkVSUlVOX0NMUgkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BORF9UUkFJTElOR19DTFIJCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfUlhfSEFMRl9XT1JECQkoMTw8NykKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9SWF9CWVRFCQkoMTw8NikKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9SWF9CSVQJCQkoMTw8NSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9SWF9FTgkJCSgxPDw0KQorI2RlZmluZSBTM0M2NFhYX1NQSV9TV0FQX1RYX0hBTEZfV09SRAkJKDE8PDMpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfVFhfQllURQkJKDE8PDIpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfVFhfQklUCQkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfVFhfRU4JCQkoMTw8MCkKKworI2RlZmluZSBTM0M2NFhYX1NQSV9GQkNMS19NU0sJCSgzPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1RSTENOVFoodiwgaSkgKCgoKHYpID4+IChpKS0+cnhfbHZsX29mZnNldCkgJiBcCisJCQkJCSgoKGkpLT5maWZvX2x2bF9tYXNrICsgMSkpKSBcCisJCQkJCT8gMSA6IDApCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1RfVFhfRE9ORSh2LCBpKSAoKCgodikgPj4gKGkpLT5yeF9sdmxfb2Zmc2V0KSAmIFwKKwkJCQkJKCgoaSktPmZpZm9fbHZsX21hc2sgKyAxKSA8PCAxKSkgXAorCQkJCQk/IDEgOiAwKQorI2RlZmluZSBUWF9GSUZPX0xWTCh2LCBpKSAoKCh2KSA+PiA2KSAmIChpKS0+Zmlmb19sdmxfbWFzaykKKyNkZWZpbmUgUlhfRklGT19MVkwodiwgaSkgKCgodikgPj4gKGkpLT5yeF9sdmxfb2Zmc2V0KSAmIChpKS0+Zmlmb19sdmxfbWFzaykKKworI2RlZmluZSBTM0M2NFhYX1NQSV9NQVhfVFJBSUxDTlQJMHgzZmYKKyNkZWZpbmUgUzNDNjRYWF9TUElfVFJBSUxDTlRfT0ZGCTE5CisKKyNkZWZpbmUgUzNDNjRYWF9TUElfVFJBSUxDTlQJCVMzQzY0WFhfU1BJX01BWF9UUkFJTENOVAorCisjZGVmaW5lIG1zZWNzX3RvX2xvb3BzKHQpIChsb29wc19wZXJfamlmZnkgLyAxMDAwICogSFogKiB0KQorCisjZGVmaW5lIFNVU1BORCAgICAoMTw8MCkKKyNkZWZpbmUgU1BJQlVTWSAgICgxPDwxKQorI2RlZmluZSBSWEJVU1kgICAgKDE8PDIpCisjZGVmaW5lIFRYQlVTWSAgICAoMTw8MykKKworLyoqCisgKiBzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgLSBSdW50aW1lIGluZm8gaG9sZGVyIGZvciBTUEkgZHJpdmVyLgorICogQGNsazogUG9pbnRlciB0byB0aGUgc3BpIGNsb2NrLgorICogQG1hc3RlcjogUG9pbnRlciB0byB0aGUgU1BJIFByb3RvY29sIG1hc3Rlci4KKyAqIEB3b3JrcXVldWU6IFdvcmsgcXVldWUgZm9yIHRoZSBTUEkgeGZlciByZXF1ZXN0cy4KKyAqIEBjbnRybHJfaW5mbzogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGNvbnRyb2xsZXIgdGhpcyBkcml2ZXIgbWFuYWdlcy4KKyAqIEB0Z2xfc3BpOiBQb2ludGVyIHRvIHRoZSBsYXN0IENTIGxlZnQgdW50b2dnbGVkIGJ5IHRoZSBjc19jaGFuZ2UgaGludC4KKyAqIEB3b3JrOiBXb3JrCisgKiBAcXVldWU6IFRvIGxvZyBTUEkgeGZlciByZXF1ZXN0cy4KKyAqIEBsb2NrOiBDb250cm9sbGVyIHNwZWNpZmljIGxvY2suCisgKiBAc3RhdGU6IFNldCBvZiBGTEFHUyB0byBpbmRpY2F0ZSBzdGF0dXMuCisgKiBAcnhfZG1hY2g6IENvbnRyb2xsZXIncyBETUEgY2hhbm5lbCBmb3IgUnguCisgKiBAdHhfZG1hY2g6IENvbnRyb2xsZXIncyBETUEgY2hhbm5lbCBmb3IgVHguCisgKiBAc2ZyX3N0YXJ0OiBCVVMgYWRkcmVzcyBvZiBTUEkgY29udHJvbGxlciByZWdzLgorICogQHJlZ3M6IFBvaW50ZXIgdG8gaW9yZW1hcCdlZCBjb250cm9sbGVyIHJlZ2lzdGVycy4KKyAqIEB4ZmVyX2NvbXBsZXRpb246IFRvIGluZGljYXRlIGNvbXBsZXRpb24gb2YgeGZlciB0YXNrLgorICogQGN1cl9tb2RlOiBTdG9yZXMgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjb250cm9sbGVyLgorICogQGN1cl9icHc6IFN0b3JlcyB0aGUgYWN0aXZlIGJpdHMgcGVyIHdvcmQgc2V0dGluZ3MuCisgKiBAY3VyX3NwZWVkOiBTdG9yZXMgdGhlIGFjdGl2ZSB4ZmVyIGNsb2NrIHNwZWVkLgorICovCitzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgeworCXZvaWQgX19pb21lbSAgICAgICAgICAgICAgICAgICAgKnJlZ3M7CisJc3RydWN0IGNsayAgICAgICAgICAgICAgICAgICAgICAqY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICAgICAgICAgKnBkZXY7CisJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgICAgICAgICAqbWFzdGVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSAgICAgICAgKndvcmtxdWV1ZTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gICpjbnRybHJfaW5mbzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAgICAgICAgICAgICAgICp0Z2xfc3BpOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIHF1ZXVlOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICAgICAgbG9jazsKKwllbnVtIGRtYV9jaCAgICAgICAgICAgICAgICAgICAgIHJ4X2RtYWNoOworCWVudW0gZG1hX2NoICAgICAgICAgICAgICAgICAgICAgdHhfZG1hY2g7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICBzZnJfc3RhcnQ7CisJc3RydWN0IGNvbXBsZXRpb24gICAgICAgICAgICAgICB4ZmVyX2NvbXBsZXRpb247CisJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9tb2RlLCBjdXJfYnB3OworCXVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3NwZWVkOworfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjNjR4eF9zcGlfZG1hX2NsaWVudCA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLXNwaS1kbWEiLAorfTsKKworc3RhdGljIHZvaWQgZmx1c2hfZmlmbyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgbG9vcHM7CisJdTMyIHZhbDsKKworCXdyaXRlbCgwLCByZWdzICsgUzNDNjRYWF9TUElfUEFDS0VUX0NOVCk7CisKKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKwl2YWwgfD0gUzNDNjRYWF9TUElfQ0hfU1dfUlNUOworCXZhbCAmPSB+UzNDNjRYWF9TUElfQ0hfSFNfRU47CisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX0NIX0NGRyk7CisKKwkvKiBGbHVzaCBUeEZJRk8qLworCWxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMSk7CisJZG8geworCQl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfU1RBVFVTKTsKKwl9IHdoaWxlIChUWF9GSUZPX0xWTCh2YWwsIHNjaSkgJiYgbG9vcHMtLSk7CisKKwkvKiBGbHVzaCBSeEZJRk8qLworCWxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMSk7CisJZG8geworCQl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfU1RBVFVTKTsKKwkJaWYgKFJYX0ZJRk9fTFZMKHZhbCwgc2NpKSkKKwkJCXJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9SWF9EQVRBKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfSB3aGlsZSAobG9vcHMtLSk7CisKKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKwl2YWwgJj0gflMzQzY0WFhfU1BJX0NIX1NXX1JTVDsKKwl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9NT0RFX0NGRyk7CisJdmFsICY9IH4oUzNDNjRYWF9TUElfTU9ERV9UWERNQV9PTiB8IFMzQzY0WFhfU1BJX01PREVfUlhETUFfT04pOworCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9NT0RFX0NGRyk7CisKKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKwl2YWwgJj0gfihTM0M2NFhYX1NQSV9DSF9SWENIX09OIHwgUzNDNjRYWF9TUElfQ0hfVFhDSF9PTik7CisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX0NIX0NGRyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9kYXRhcGF0aChzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKKwkJCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIsIGludCBkbWFfbW9kZSkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXUzMiBtb2RlY2ZnLCBjaGNmZzsKKworCW1vZGVjZmcgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCW1vZGVjZmcgJj0gfihTM0M2NFhYX1NQSV9NT0RFX1RYRE1BX09OIHwgUzNDNjRYWF9TUElfTU9ERV9SWERNQV9PTik7CisKKwljaGNmZyA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DSF9DRkcpOworCWNoY2ZnICY9IH5TM0M2NFhYX1NQSV9DSF9UWENIX09OOworCisJaWYgKGRtYV9tb2RlKSB7CisJCWNoY2ZnICY9IH5TM0M2NFhYX1NQSV9DSF9SWENIX09OOworCX0gZWxzZSB7CisJCS8qIEFsd2F5cyBzaGlmdCBpbiBkYXRhIGluIEZJRk8sIGV2ZW4gaWYgeGZlciBpcyBUeCBvbmx5LAorCQkgKiB0aGlzIGhlbHBzIHNldHRpbmcgUENLVF9DTlQgdmFsdWUgZm9yIGdlbmVyYXRpbmcgY2xvY2tzCisJCSAqIGFzIGV4YWN0bHkgbmVlZGVkLgorCQkgKi8KKwkJY2hjZmcgfD0gUzNDNjRYWF9TUElfQ0hfUlhDSF9PTjsKKwkJd3JpdGVsKCgoeGZlci0+bGVuICogOCAvIHNkZC0+Y3VyX2JwdykgJiAweGZmZmYpCisJCQkJCXwgUzNDNjRYWF9TUElfUEFDS0VUX0NOVF9FTiwKKwkJCQkJcmVncyArIFMzQzY0WFhfU1BJX1BBQ0tFVF9DTlQpOworCX0KKworCWlmICh4ZmVyLT50eF9idWYgIT0gTlVMTCkgeworCQlzZGQtPnN0YXRlIHw9IFRYQlVTWTsKKwkJY2hjZmcgfD0gUzNDNjRYWF9TUElfQ0hfVFhDSF9PTjsKKwkJaWYgKGRtYV9tb2RlKSB7CisJCQltb2RlY2ZnIHw9IFMzQzY0WFhfU1BJX01PREVfVFhETUFfT047CisJCQlzM2MyNDEwX2RtYV9jb25maWcoc2RkLT50eF9kbWFjaCwgMSk7CisJCQlzM2MyNDEwX2RtYV9lbnF1ZXVlKHNkZC0+dHhfZG1hY2gsICh2b2lkICopc2RkLAorCQkJCQkJeGZlci0+dHhfZG1hLCB4ZmVyLT5sZW4pOworCQkJczNjMjQxMF9kbWFfY3RybChzZGQtPnR4X2RtYWNoLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHhmZXItPnR4X2J1ZjsKKwkJCWludCBpID0gMDsKKwkJCXdoaWxlIChpIDwgeGZlci0+bGVuKQorCQkJCXdyaXRlYihidWZbaSsrXSwgcmVncyArIFMzQzY0WFhfU1BJX1RYX0RBVEEpOworCQl9CisJfQorCisJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMKSB7CisJCXNkZC0+c3RhdGUgfD0gUlhCVVNZOworCisJCWlmIChzY2ktPmhpZ2hfc3BlZWQgJiYgc2RkLT5jdXJfc3BlZWQgPj0gMzAwMDAwMDBVTAorCQkJCQkmJiAhKHNkZC0+Y3VyX21vZGUgJiBTUElfQ1BIQSkpCisJCQljaGNmZyB8PSBTM0M2NFhYX1NQSV9DSF9IU19FTjsKKworCQlpZiAoZG1hX21vZGUpIHsKKwkJCW1vZGVjZmcgfD0gUzNDNjRYWF9TUElfTU9ERV9SWERNQV9PTjsKKwkJCWNoY2ZnIHw9IFMzQzY0WFhfU1BJX0NIX1JYQ0hfT047CisJCQl3cml0ZWwoKCh4ZmVyLT5sZW4gKiA4IC8gc2RkLT5jdXJfYnB3KSAmIDB4ZmZmZikKKwkJCQkJfCBTM0M2NFhYX1NQSV9QQUNLRVRfQ05UX0VOLAorCQkJCQlyZWdzICsgUzNDNjRYWF9TUElfUEFDS0VUX0NOVCk7CisJCQlzM2MyNDEwX2RtYV9jb25maWcoc2RkLT5yeF9kbWFjaCwgMSk7CisJCQlzM2MyNDEwX2RtYV9lbnF1ZXVlKHNkZC0+cnhfZG1hY2gsICh2b2lkICopc2RkLAorCQkJCQkJeGZlci0+cnhfZG1hLCB4ZmVyLT5sZW4pOworCQkJczNjMjQxMF9kbWFfY3RybChzZGQtPnJ4X2RtYWNoLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJfQorCX0KKworCXdyaXRlbChtb2RlY2ZnLCByZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCXdyaXRlbChjaGNmZywgcmVncyArIFMzQzY0WFhfU1BJX0NIX0NGRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY3Moc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzOworCisJaWYgKHNkZC0+dGdsX3NwaSAhPSBOVUxMKSB7IC8qIElmIGxhc3QgZGV2aWNlIHRvZ2dsZWQgYWZ0ZXIgbXNzZyAqLworCQlpZiAoc2RkLT50Z2xfc3BpICE9IHNwaSkgeyAvKiBpZiBsYXN0IG1zc2cgb24gZGlmZiBkZXZpY2UgKi8KKwkJCS8qIERlc2VsZWN0IHRoZSBsYXN0IHRvZ2dsZWQgZGV2aWNlICovCisJCQljcyA9IHNkZC0+dGdsX3NwaS0+Y29udHJvbGxlcl9kYXRhOworCQkJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKKwkJfQorCQlzZGQtPnRnbF9zcGkgPSBOVUxMOworCX0KKworCWNzID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwKTsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl94ZmVyKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLAorCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIsIGludCBkbWFfbW9kZSkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBtczsKKworCS8qIG1pbGxpc2VjcyB0byB4ZmVyICdsZW4nIGJ5dGVzIEAgJ2N1cl9zcGVlZCcgKi8KKwltcyA9IHhmZXItPmxlbiAqIDggKiAxMDAwIC8gc2RkLT5jdXJfc3BlZWQ7CisJbXMgKz0gNTsgLyogc29tZSB0b2xlcmFuY2UgKi8KKworCWlmIChkbWFfbW9kZSkgeworCQl2YWwgPSBtc2Vjc190b19qaWZmaWVzKG1zKSArIDEwOworCQl2YWwgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNkZC0+eGZlcl9jb21wbGV0aW9uLCB2YWwpOworCX0gZWxzZSB7CisJCXZhbCA9IG1zZWNzX3RvX2xvb3BzKG1zKTsKKwkJZG8geworCQkJdmFsID0gcmVhZGwocmVncyArIFMzQzY0WFhfU1BJX1NUQVRVUyk7CisJCX0gd2hpbGUgKFJYX0ZJRk9fTFZMKHZhbCwgc2NpKSA8IHhmZXItPmxlbiAmJiAtLXZhbCk7CisJfQorCisJaWYgKCF2YWwpCisJCXJldHVybiAtRUlPOworCisJaWYgKGRtYV9tb2RlKSB7CisJCXUzMiBzdGF0dXM7CisKKwkJLyoKKwkJICogRG1hVHggcmV0dXJucyBhZnRlciBzaW1wbHkgd3JpdGluZyBkYXRhIGluIHRoZSBGSUZPLAorCQkgKiB3L28gd2FpdGluZyBmb3IgcmVhbCB0cmFuc21pc3Npb24gb24gdGhlIGJ1cyB0byBmaW5pc2guCisJCSAqIERtYVJ4IHJldHVybnMgb25seSBhZnRlciBEbWEgcmVhZCBkYXRhIGZyb20gRklGTyB3aGljaAorCQkgKiBuZWVkcyBidXMgdHJhbnNtaXNzaW9uIHRvIGZpbmlzaCwgc28gd2UgZG9uJ3Qgd29ycnkgaWYKKwkJICogWGZlciBpbnZvbHZlZCBSeCh3aXRoIG9yIHdpdGhvdXQgVHgpLgorCQkgKi8KKwkJaWYgKHhmZXItPnJ4X2J1ZiA9PSBOVUxMKSB7CisJCQl2YWwgPSBtc2Vjc190b19sb29wcygxMCk7CisJCQlzdGF0dXMgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfU1RBVFVTKTsKKwkJCXdoaWxlICgoVFhfRklGT19MVkwoc3RhdHVzLCBzY2kpCisJCQkJfHwgIVMzQzY0WFhfU1BJX1NUX1RYX0RPTkUoc3RhdHVzLCBzY2kpKQorCQkJCQkmJiAtLXZhbCkgeworCQkJCWNwdV9yZWxheCgpOworCQkJCXN0YXR1cyA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9TVEFUVVMpOworCQkJfQorCisJCQlpZiAoIXZhbCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwkJaW50IGk7CisKKwkJLyogSWYgaXQgd2FzIG9ubHkgVHggKi8KKwkJaWYgKHhmZXItPnJ4X2J1ZiA9PSBOVUxMKSB7CisJCQlzZGQtPnN0YXRlICY9IH5UWEJVU1k7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWkgPSAwOworCQlidWYgPSB4ZmVyLT5yeF9idWY7CisJCXdoaWxlIChpIDwgeGZlci0+bGVuKQorCQkJYnVmW2krK10gPSByZWFkYihyZWdzICsgUzNDNjRYWF9TUElfUlhfREFUQSk7CisKKwkJc2RkLT5zdGF0ZSAmPSB+UlhCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9jcyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKKwkJCQkJCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NzaW5mbyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKKworCWlmIChzZGQtPnRnbF9zcGkgPT0gc3BpKQorCQlzZGQtPnRnbF9zcGkgPSBOVUxMOworCisJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKK30KKworc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfY29uZmlnKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CisJdTMyIHZhbDsKKworCS8qIERpc2FibGUgQ2xvY2sgKi8KKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0xLX0NGRyk7CisJdmFsICY9IH5TM0M2NFhYX1NQSV9FTkNMS19FTkFCTEU7CisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX0NMS19DRkcpOworCisJLyogU2V0IFBvbGFyaXR5IGFuZCBQaGFzZSAqLworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DSF9DRkcpOworCXZhbCAmPSB+KFMzQzY0WFhfU1BJX0NIX1NMQVZFIHwKKwkJCVMzQzY0WFhfU1BJX0NQT0xfTCB8CisJCQlTM0M2NFhYX1NQSV9DUEhBX0IpOworCisJaWYgKHNkZC0+Y3VyX21vZGUgJiBTUElfQ1BPTCkKKwkJdmFsIHw9IFMzQzY0WFhfU1BJX0NQT0xfTDsKKworCWlmIChzZGQtPmN1cl9tb2RlICYgU1BJX0NQSEEpCisJCXZhbCB8PSBTM0M2NFhYX1NQSV9DUEhBX0I7CisKKwl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKworCS8qIFNldCBDaGFubmVsICYgRE1BIE1vZGUgKi8KKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCXZhbCAmPSB+KFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9NQVNLCisJCQl8IFMzQzY0WFhfU1BJX01PREVfQ0hfVFNaX01BU0spOworCisJc3dpdGNoIChzZGQtPmN1cl9icHcpIHsKKwljYXNlIDMyOgorCQl2YWwgfD0gUzNDNjRYWF9TUElfTU9ERV9CVVNfVFNaX1dPUkQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCB8PSBTM0M2NFhYX1NQSV9NT0RFX0JVU19UU1pfSEFMRldPUkQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSBTM0M2NFhYX1NQSV9NT0RFX0JVU19UU1pfQllURTsKKwkJYnJlYWs7CisJfQorCXZhbCB8PSBTM0M2NFhYX1NQSV9NT0RFX0NIX1RTWl9CWVRFOyAvKiBBbHdheXMgOGJpdHMgd2lkZSAqLworCisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX01PREVfQ0ZHKTsKKworCS8qIENvbmZpZ3VyZSBDbG9jayAqLworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKKwl2YWwgJj0gflMzQzY0WFhfU1BJX1BTUl9NQVNLOworCXZhbCB8PSAoKGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gc2RkLT5jdXJfc3BlZWQgLyAyIC0gMSkKKwkJCSYgUzNDNjRYWF9TUElfUFNSX01BU0spOworCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKKworCS8qIEVuYWJsZSBDbG9jayAqLworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKKwl2YWwgfD0gUzNDNjRYWF9TUElfRU5DTEtfRU5BQkxFOworCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKK30KKwordm9pZCBzM2M2NHh4X3NwaV9kbWFfcnhjYihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwgdm9pZCAqYnVmX2lkLAorCQkJCWludCBzaXplLCBlbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gYnVmX2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmVzID09IFMzQzI0MTBfUkVTX09LKQorCQlzZGQtPnN0YXRlICY9IH5SWEJVU1k7CisJZWxzZQorCQlkZXZfZXJyKCZzZGQtPnBkZXYtPmRldiwgIkRtYUFicnRSeC0lZFxuIiwgc2l6ZSk7CisKKwkvKiBJZiB0aGUgb3RoZXIgZG9uZSAqLworCWlmICghKHNkZC0+c3RhdGUgJiBUWEJVU1kpKQorCQljb21wbGV0ZSgmc2RkLT54ZmVyX2NvbXBsZXRpb24pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgczNjNjR4eF9zcGlfZG1hX3R4Y2Ioc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmJ1Zl9pZCwKKwkJCQlpbnQgc2l6ZSwgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlcykKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IGJ1Zl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJlcyA9PSBTM0MyNDEwX1JFU19PSykKKwkJc2RkLT5zdGF0ZSAmPSB+VFhCVVNZOworCWVsc2UKKwkJZGV2X2Vycigmc2RkLT5wZGV2LT5kZXYsICJEbWFBYnJ0VHgtJWQgXG4iLCBzaXplKTsKKworCS8qIElmIHRoZSBvdGhlciBkb25lICovCisJaWYgKCEoc2RkLT5zdGF0ZSAmIFJYQlVTWSkpCisJCWNvbXBsZXRlKCZzZGQtPnhmZXJfY29tcGxldGlvbik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKK30KKworI2RlZmluZSBYRkVSX0RNQUFERFJfSU5WQUxJRCBETUFfQklUX01BU0soMzIpCisKK3N0YXRpYyBpbnQgczNjNjR4eF9zcGlfbWFwX21zc2coc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2RkLT5wZGV2LT5kZXY7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKworCWlmIChtc2ctPmlzX2RtYV9tYXBwZWQpCisJCXJldHVybiAwOworCisJLyogRmlyc3QgbWFyayBhbGwgeGZlciB1bm1hcHBlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisJCXhmZXItPnJ4X2RtYSA9IFhGRVJfRE1BQUREUl9JTlZBTElEOworCQl4ZmVyLT50eF9kbWEgPSBYRkVSX0RNQUFERFJfSU5WQUxJRDsKKwl9CisKKwkvKiBNYXAgdW50aWwgZW5kIG9yIGZpcnN0IGZhaWwgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCisJCWlmICh4ZmVyLT50eF9idWYgIT0gTlVMTCkgeworCQkJeGZlci0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCB4ZmVyLT50eF9idWYsCisJCQkJCQl4ZmVyLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgeGZlci0+dHhfZG1hKSkgeworCQkJCWRldl9lcnIoZGV2LCAiZG1hX21hcF9zaW5nbGUgVHggZmFpbGVkXG4iKTsKKwkJCQl4ZmVyLT50eF9kbWEgPSBYRkVSX0RNQUFERFJfSU5WQUxJRDsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCisJCWlmICh4ZmVyLT5yeF9idWYgIT0gTlVMTCkgeworCQkJeGZlci0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCB4ZmVyLT5yeF9idWYsCisJCQkJCQl4ZmVyLT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCB4ZmVyLT5yeF9kbWEpKSB7CisJCQkJZGV2X2VycihkZXYsICJkbWFfbWFwX3NpbmdsZSBSeCBmYWlsZWRcbiIpOworCQkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCB4ZmVyLT50eF9kbWEsCisJCQkJCQl4ZmVyLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCQkJCXhmZXItPnR4X2RtYSA9IFhGRVJfRE1BQUREUl9JTlZBTElEOworCQkJCXhmZXItPnJ4X2RtYSA9IFhGRVJfRE1BQUREUl9JTlZBTElEOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzY0eHhfc3BpX3VubWFwX21zc2coc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2RkLT5wZGV2LT5kZXY7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKworCWlmIChtc2ctPmlzX2RtYV9tYXBwZWQpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisKKwkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMCisJCQkJJiYgeGZlci0+cnhfZG1hICE9IFhGRVJfRE1BQUREUl9JTlZBTElEKQorCQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIHhmZXItPnJ4X2RtYSwKKwkJCQkJCXhmZXItPmxlbiwgRE1BX0ZST01fREVWSUNFKTsKKworCQlpZiAoeGZlci0+dHhfYnVmICE9IE5VTEwKKwkJCQkmJiB4ZmVyLT50eF9kbWEgIT0gWEZFUl9ETUFBRERSX0lOVkFMSUQpCisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgeGZlci0+dHhfZG1hLAorCQkJCQkJeGZlci0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9tc2coc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbXNnLT5zcGk7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NzaW5mbyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOworCWludCBzdGF0dXMgPSAwLCBjc190b2dnbGUgPSAwOworCXUzMiBzcGVlZDsKKwl1OCBicHc7CisKKwkvKiBJZiBNYXN0ZXIncyhjb250cm9sbGVyKSBzdGF0ZSBkaWZmZXJzIGZyb20gdGhhdCBuZWVkZWQgYnkgU2xhdmUgKi8KKwlpZiAoc2RkLT5jdXJfc3BlZWQgIT0gc3BpLT5tYXhfc3BlZWRfaHoKKwkJCXx8IHNkZC0+Y3VyX21vZGUgIT0gc3BpLT5tb2RlCisJCQl8fCBzZGQtPmN1cl9icHcgIT0gc3BpLT5iaXRzX3Blcl93b3JkKSB7CisJCXNkZC0+Y3VyX2JwdyA9IHNwaS0+Yml0c19wZXJfd29yZDsKKwkJc2RkLT5jdXJfc3BlZWQgPSBzcGktPm1heF9zcGVlZF9oejsKKwkJc2RkLT5jdXJfbW9kZSA9IHNwaS0+bW9kZTsKKwkJczNjNjR4eF9zcGlfY29uZmlnKHNkZCk7CisJfQorCisJLyogTWFwIGFsbCB0aGUgdHJhbnNmZXJzIGlmIG5lZWRlZCAqLworCWlmIChzM2M2NHh4X3NwaV9tYXBfbXNzZyhzZGQsIG1zZykpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkiWGZlcjogVW5hYmxlIHRvIG1hcCBtZXNzYWdlIGJ1ZmZlcnMhXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ29uZmlndXJlIGZlZWRiYWNrIGRlbGF5ICovCisJd3JpdGVsKGNzLT5mYl9kZWxheSAmIDB4Mywgc2RkLT5yZWdzICsgUzNDNjRYWF9TUElfRkJfQ0xLKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IHVzZV9kbWE7CisKKwkJSU5JVF9DT01QTEVUSU9OKHNkZC0+eGZlcl9jb21wbGV0aW9uKTsKKworCQkvKiBPbmx5IEJQVyBhbmQgU3BlZWQgbWF5IGNoYW5nZSBhY3Jvc3MgdHJhbnNmZXJzICovCisJCWJwdyA9IHhmZXItPmJpdHNfcGVyX3dvcmQgPyA6IHNwaS0+Yml0c19wZXJfd29yZDsKKwkJc3BlZWQgPSB4ZmVyLT5zcGVlZF9oeiA/IDogc3BpLT5tYXhfc3BlZWRfaHo7CisKKwkJaWYgKGJwdyAhPSBzZGQtPmN1cl9icHcgfHwgc3BlZWQgIT0gc2RkLT5jdXJfc3BlZWQpIHsKKwkJCXNkZC0+Y3VyX2JwdyA9IGJwdzsKKwkJCXNkZC0+Y3VyX3NwZWVkID0gc3BlZWQ7CisJCQlzM2M2NHh4X3NwaV9jb25maWcoc2RkKTsKKwkJfQorCisJCS8qIFBvbGxpbmcgbWV0aG9kIGZvciB4ZmVycyBub3QgYmlnZ2VyIHRoYW4gRklGTyBjYXBhY2l0eSAqLworCQlpZiAoeGZlci0+bGVuIDw9ICgoc2NpLT5maWZvX2x2bF9tYXNrID4+IDEpICsgMSkpCisJCQl1c2VfZG1hID0gMDsKKwkJZWxzZQorCQkJdXNlX2RtYSA9IDE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZC0+bG9jaywgZmxhZ3MpOworCisJCS8qIFBlbmRpbmcgb25seSB3aGljaCBpcyB0byBiZSBkb25lICovCisJCXNkZC0+c3RhdGUgJj0gflJYQlVTWTsKKwkJc2RkLT5zdGF0ZSAmPSB+VFhCVVNZOworCisJCWVuYWJsZV9kYXRhcGF0aChzZGQsIHNwaSwgeGZlciwgdXNlX2RtYSk7CisKKwkJLyogU2xhdmUgU2VsZWN0ICovCisJCWVuYWJsZV9jcyhzZGQsIHNwaSk7CisKKwkJLyogU3RhcnQgdGhlIHNpZ25hbHMgKi8KKwkJUzNDNjRYWF9TUElfQUNUKHNkZCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwkJc3RhdHVzID0gd2FpdF9mb3JfeGZlcihzZGQsIHhmZXIsIHVzZV9kbWEpOworCisJCS8qIFF1aWVzZSB0aGUgc2lnbmFscyAqLworCQlTM0M2NFhYX1NQSV9ERUFDVChzZGQpOworCisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiSS9PIEVycm9yOiBcCisJCQkJcngtJWQgdHgtJWQgcmVzOnJ4LSVjIHR4LSVjIGxlbi0lZFxuIiwKKwkJCQl4ZmVyLT5yeF9idWYgPyAxIDogMCwgeGZlci0+dHhfYnVmID8gMSA6IDAsCisJCQkJKHNkZC0+c3RhdGUgJiBSWEJVU1kpID8gJ2YnIDogJ3AnLAorCQkJCShzZGQtPnN0YXRlICYgVFhCVVNZKSA/ICdmJyA6ICdwJywKKwkJCQl4ZmVyLT5sZW4pOworCisJCQlpZiAodXNlX2RtYSkgeworCQkJCWlmICh4ZmVyLT50eF9idWYgIT0gTlVMTAorCQkJCQkJJiYgKHNkZC0+c3RhdGUgJiBUWEJVU1kpKQorCQkJCQlzM2MyNDEwX2RtYV9jdHJsKHNkZC0+dHhfZG1hY2gsCisJCQkJCQkJUzNDMjQxMF9ETUFPUF9GTFVTSCk7CisJCQkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMCisJCQkJCQkmJiAoc2RkLT5zdGF0ZSAmIFJYQlVTWSkpCisJCQkJCXMzYzI0MTBfZG1hX2N0cmwoc2RkLT5yeF9kbWFjaCwKKwkJCQkJCQlTM0MyNDEwX0RNQU9QX0ZMVVNIKTsKKwkJCX0KKworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoeGZlci0+ZGVsYXlfdXNlY3MpCisJCQl1ZGVsYXkoeGZlci0+ZGVsYXlfdXNlY3MpOworCisJCWlmICh4ZmVyLT5jc19jaGFuZ2UpIHsKKwkJCS8qIEhpbnQgdGhhdCB0aGUgbmV4dCBtc3NnIGlzIGdvbm5hIGJlCisJCQkgICBmb3IgdGhlIHNhbWUgZGV2aWNlICovCisJCQlpZiAobGlzdF9pc19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0LAorCQkJCQkJJm1zZy0+dHJhbnNmZXJzKSkKKwkJCQljc190b2dnbGUgPSAxOworCQkJZWxzZQorCQkJCWRpc2FibGVfY3Moc2RkLCBzcGkpOworCQl9CisKKwkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IHhmZXItPmxlbjsKKworCQlmbHVzaF9maWZvKHNkZCk7CisJfQorCitvdXQ6CisJaWYgKCFjc190b2dnbGUgfHwgc3RhdHVzKQorCQlkaXNhYmxlX2NzKHNkZCwgc3BpKTsKKwllbHNlCisJCXNkZC0+dGdsX3NwaSA9IHNwaTsKKworCXMzYzY0eHhfc3BpX3VubWFwX21zc2coc2RkLCBtc2cpOworCisJbXNnLT5zdGF0dXMgPSBzdGF0dXM7CisKKwlpZiAobXNnLT5jb21wbGV0ZSkKKwkJbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOworfQorCitzdGF0aWMgaW50IGFjcXVpcmVfZG1hKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQoreworCWlmIChzM2MyNDEwX2RtYV9yZXF1ZXN0KHNkZC0+cnhfZG1hY2gsCisJCQkJCSZzM2M2NHh4X3NwaV9kbWFfY2xpZW50LCBOVUxMKSA8IDApIHsKKwkJZGV2X2Vycigmc2RkLT5wZGV2LT5kZXYsICJjYW5ub3QgZ2V0IFJ4RE1BXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihzZGQtPnJ4X2RtYWNoLCBzM2M2NHh4X3NwaV9kbWFfcnhjYik7CisJczNjMjQxMF9kbWFfZGV2Y29uZmlnKHNkZC0+cnhfZG1hY2gsIFMzQzI0MTBfRE1BU1JDX0hXLAorCQkJCQlzZGQtPnNmcl9zdGFydCArIFMzQzY0WFhfU1BJX1JYX0RBVEEpOworCisJaWYgKHMzYzI0MTBfZG1hX3JlcXVlc3Qoc2RkLT50eF9kbWFjaCwKKwkJCQkJJnMzYzY0eHhfc3BpX2RtYV9jbGllbnQsIE5VTEwpIDwgMCkgeworCQlkZXZfZXJyKCZzZGQtPnBkZXYtPmRldiwgImNhbm5vdCBnZXQgVHhETUFcbiIpOworCQlzM2MyNDEwX2RtYV9mcmVlKHNkZC0+cnhfZG1hY2gsICZzM2M2NHh4X3NwaV9kbWFfY2xpZW50KTsKKwkJcmV0dXJuIDA7CisJfQorCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihzZGQtPnR4X2RtYWNoLCBzM2M2NHh4X3NwaV9kbWFfdHhjYik7CisJczNjMjQxMF9kbWFfZGV2Y29uZmlnKHNkZC0+dHhfZG1hY2gsIFMzQzI0MTBfRE1BU1JDX01FTSwKKwkJCQkJc2RkLT5zZnJfc3RhcnQgKyBTM0M2NFhYX1NQSV9UWF9EQVRBKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzM2M2NHh4X3NwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCQlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEsIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBBY3F1aXJlIERNQSBjaGFubmVscyAqLworCXdoaWxlICghYWNxdWlyZV9kbWEoc2RkKSkKKwkJbXNsZWVwKDEwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc2RkLT5xdWV1ZSkKKwkJCQkmJiAhKHNkZC0+c3RhdGUgJiBTVVNQTkQpKSB7CisKKwkJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CisKKwkJbXNnID0gY29udGFpbmVyX29mKHNkZC0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisKKwkJbGlzdF9kZWxfaW5pdCgmbXNnLT5xdWV1ZSk7CisKKwkJLyogU2V0IFhmZXIgYnVzeSBmbGFnICovCisJCXNkZC0+c3RhdGUgfD0gU1BJQlVTWTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCQloYW5kbGVfbXNnKHNkZCwgbXNnKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwkJc2RkLT5zdGF0ZSAmPSB+U1BJQlVTWTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZyZWUgRE1BIGNoYW5uZWxzICovCisJczNjMjQxMF9kbWFfZnJlZShzZGQtPnR4X2RtYWNoLCAmczNjNjR4eF9zcGlfZG1hX2NsaWVudCk7CisJczNjMjQxMF9kbWFfZnJlZShzZGQtPnJ4X2RtYWNoLCAmczNjNjR4eF9zcGlfZG1hX2NsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzZGQtPnN0YXRlICYgU1VTUE5EKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwltc2ctPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwltc2ctPmFjdHVhbF9sZW5ndGggPSAwOworCisJbGlzdF9hZGRfdGFpbCgmbXNnLT5xdWV1ZSwgJnNkZC0+cXVldWUpOworCisJcXVldWVfd29yayhzZGQtPndvcmtxdWV1ZSwgJnNkZC0+d29yayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSGVyZSB3ZSBvbmx5IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbgorICogYW5kIHNhdmUgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYSBsb2NhbCBkYXRhLXN0cnVjdHVyZS4KKyAqIFRoZSBjb250cm9sbGVyIGlzIGFjdHVhbGx5IGNvbmZpZ3VyZWQgb25seSBqdXN0IGJlZm9yZSB3ZQorICogZ2V0IGEgbWVzc2FnZSB0byB0cmFuc2Zlci4KKyAqLworc3RhdGljIGludCBzM2M2NHh4X3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQ7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2k7CisJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CisJdTMyIHBzciwgc3BlZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjcyA9PSBOVUxMIHx8IGNzLT5zZXRfbGV2ZWwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIk5vIENTIGZvciBTUEkoJWQpXG4iLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobXNnLCAmc2RkLT5xdWV1ZSwgcXVldWUpIHsKKwkJLyogSXMgc29tZSBtc3NnIGlzIGFscmVhZHkgcXVldWVkIGZvciB0aGlzIGRldmljZSAqLworCQlpZiAobXNnLT5zcGkgPT0gc3BpKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwKKwkJCQkic2V0dXA6IGF0dGVtcHQgd2hpbGUgbXNzZyBpbiBxdWV1ZSFcbiIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKHNkZC0+c3RhdGUgJiBTVVNQTkQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJInNldHVwOiBTUEktJWQgbm90IGFjdGl2ZSFcbiIsIHNwaS0+bWFzdGVyLT5idXNfbnVtKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkICE9IDgKKwkJCSYmIHNwaS0+Yml0c19wZXJfd29yZCAhPSAxNgorCQkJJiYgc3BpLT5iaXRzX3Blcl93b3JkICE9IDMyKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAic2V0dXA6ICVkYml0cy93cmQgbm90IHN1cHBvcnRlZCFcbiIsCisJCQkJCQkJc3BpLT5iaXRzX3Blcl93b3JkKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBzZXR1cF9leGl0OworCX0KKworCS8qIENoZWNrIGlmIHdlIGNhbiBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgcmF0ZSAqLworCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKDAgKyAxKTsgLyogTWF4IHBvc3NpYmxlICovCisKKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPiBzcGVlZCkKKwkJc3BpLT5tYXhfc3BlZWRfaHogPSBzcGVlZDsKKworCXBzciA9IGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gMiAvIHNwaS0+bWF4X3NwZWVkX2h6IC0gMTsKKwlwc3IgJj0gUzNDNjRYWF9TUElfUFNSX01BU0s7CisJaWYgKHBzciA9PSBTM0M2NFhYX1NQSV9QU1JfTUFTSykKKwkJcHNyLS07CisKKwlzcGVlZCA9IGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gMiAvIChwc3IgKyAxKTsKKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPCBzcGVlZCkgeworCQlpZiAocHNyKzEgPCBTM0M2NFhYX1NQSV9QU1JfTUFTSykgeworCQkJcHNyKys7CisJCX0gZWxzZSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBzZXR1cF9leGl0OworCQl9CisJfQorCisJc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyAocHNyICsgMSk7CisJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID49IHNwZWVkKQorCQlzcGktPm1heF9zcGVlZF9oeiA9IHNwZWVkOworCWVsc2UKKwkJZXJyID0gLUVJTlZBTDsKKworc2V0dXBfZXhpdDoKKworCS8qIHNldHVwKCkgcmV0dXJucyB3aXRoIGRldmljZSBkZS1zZWxlY3RlZCAqLworCWRpc2FibGVfY3Moc2RkLCBzcGkpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfaHdpbml0KHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzZGQtPmN1cl9zcGVlZCA9IDA7CisKKwlTM0M2NFhYX1NQSV9ERUFDVChzZGQpOworCisJLyogRGlzYWJsZSBJbnRlcnJ1cHRzIC0gd2UgdXNlIFBvbGxpbmcgaWYgbm90IERNQSBtb2RlICovCisJd3JpdGVsKDAsIHJlZ3MgKyBTM0M2NFhYX1NQSV9JTlRfRU4pOworCisJd3JpdGVsKHNjaS0+c3JjX2Nsa19uciA8PCBTM0M2NFhYX1NQSV9DTEtTRUxfU1JDU0hGVCwKKwkJCQlyZWdzICsgUzNDNjRYWF9TUElfQ0xLX0NGRyk7CisJd3JpdGVsKDAsIHJlZ3MgKyBTM0M2NFhYX1NQSV9NT0RFX0NGRyk7CisJd3JpdGVsKDAsIHJlZ3MgKyBTM0M2NFhYX1NQSV9QQUNLRVRfQ05UKTsKKworCS8qIENsZWFyIGFueSBpcnEgcGVuZGluZyBiaXRzICovCisJd3JpdGVsKHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9QRU5ESU5HX0NMUiksCisJCQkJcmVncyArIFMzQzY0WFhfU1BJX1BFTkRJTkdfQ0xSKTsKKworCXdyaXRlbCgwLCByZWdzICsgUzNDNjRYWF9TUElfU1dBUF9DRkcpOworCisJdmFsID0gcmVhZGwocmVncyArIFMzQzY0WFhfU1BJX01PREVfQ0ZHKTsKKwl2YWwgJj0gflMzQzY0WFhfU1BJX01PREVfNEJVUlNUOworCXZhbCAmPSB+KFMzQzY0WFhfU1BJX01BWF9UUkFJTENOVCA8PCBTM0M2NFhYX1NQSV9UUkFJTENOVF9PRkYpOworCXZhbCB8PSAoUzNDNjRYWF9TUElfVFJBSUxDTlQgPDwgUzNDNjRYWF9TUElfVFJBSUxDTlRfT0ZGKTsKKwl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCisJZmx1c2hfZmlmbyhzZGQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqbWVtX3JlcywgKmRtYXR4X3JlcywgKmRtYXJ4X3JlczsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZDsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCWludCByZXQ7CisKKwlpZiAocGRldi0+aWQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiSW52YWxpZCBwbGF0Zm9ybSBkZXZpY2UgaWQtJWRcbiIsIHBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm1fZGF0YSBtaXNzaW5nIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgbmVjZXNzYXJ5IHJlc291cmNlICovCisKKwlkbWF0eF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmIChkbWF0eF9yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IFNQSS1UeCBkbWEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRtYXJ4X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CisJaWYgKGRtYXJ4X3JlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgU1BJLVJ4IGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKG1lbV9yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IFNQSSBNRU0gcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwKKwkJCQlzaXplb2Yoc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBTUEkgTWFzdGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2NpID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOworCisJc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXNkZC0+bWFzdGVyID0gbWFzdGVyOworCXNkZC0+Y250cmxyX2luZm8gPSBzY2k7CisJc2RkLT5wZGV2ID0gcGRldjsKKwlzZGQtPnNmcl9zdGFydCA9IG1lbV9yZXMtPnN0YXJ0OworCXNkZC0+dHhfZG1hY2ggPSBkbWF0eF9yZXMtPnN0YXJ0OworCXNkZC0+cnhfZG1hY2ggPSBkbWFyeF9yZXMtPnN0YXJ0OworCisJc2RkLT5jdXJfYnB3ID0gODsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+c2V0dXAgPSBzM2M2NHh4X3NwaV9zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gczNjNjR4eF9zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHNjaS0+bnVtX2NzOworCW1hc3Rlci0+ZG1hX2FsaWdubWVudCA9IDg7CisJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0g7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSwgcGRldi0+bmFtZSkgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJSZXEgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyMDsKKwl9CisKKwlzZGQtPnJlZ3MgPSBpb3JlbWFwKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKKwlpZiAoc2RkLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlbWFwIElPXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjE7CisJfQorCisJaWYgKHNjaS0+Y2ZnX2dwaW8gPT0gTlVMTCB8fCBzY2ktPmNmZ19ncGlvKHBkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBjb25maWcgZ3Bpb1xuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnIyOworCX0KKworCS8qIFNldHVwIGNsb2NrcyAqLworCXNkZC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic3BpIik7CisJaWYgKElTX0VSUihzZGQtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGFjcXVpcmUgY2xvY2sgJ3NwaSdcbiIpOworCQlyZXQgPSBQVFJfRVJSKHNkZC0+Y2xrKTsKKwkJZ290byBlcnIzOworCX0KKworCWlmIChjbGtfZW5hYmxlKHNkZC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBlbmFibGUgY2xvY2sgJ3NwaSdcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlpZiAoc2NpLT5zcmNfY2xrX25yID09IFMzQzY0WFhfU1BJX1NSQ0NMS19QQ0xLKQorCQlzY2ktPnNyY19jbGsgPSBzZGQtPmNsazsKKwllbHNlCisJCXNjaS0+c3JjX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgc2NpLT5zcmNfY2xrX25hbWUpOworCWlmIChJU19FUlIoc2NpLT5zcmNfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFjcXVpcmUgY2xvY2sgJyVzJ1xuIiwgc2NpLT5zcmNfY2xrX25hbWUpOworCQlyZXQgPSBQVFJfRVJSKHNjaS0+c3JjX2Nsayk7CisJCWdvdG8gZXJyNTsKKwl9CisKKwlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrICYmIGNsa19lbmFibGUoc2NpLT5zcmNfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBlbmFibGUgY2xvY2sgJyVzJ1xuIiwKKwkJCQkJCQlzY2ktPnNyY19jbGtfbmFtZSk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnI2OworCX0KKworCXNkZC0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKKwlpZiAoc2RkLT53b3JrcXVldWUgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyNzsKKwl9CisKKwkvKiBTZXR1cCBEZXVmdWx0IE1vZGUgKi8KKwlzM2M2NHh4X3NwaV9od2luaXQoc2RkLCBwZGV2LT5pZCk7CisKKwlzcGluX2xvY2tfaW5pdCgmc2RkLT5sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJnNkZC0+eGZlcl9jb21wbGV0aW9uKTsKKwlJTklUX1dPUksoJnNkZC0+d29yaywgczNjNjR4eF9zcGlfd29yayk7CisJSU5JVF9MSVNUX0hFQUQoJnNkZC0+cXVldWUpOworCisJaWYgKHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnI4OworCX0KKworCWRldl9kYmcoJnBkZXYtPmRldiwgIlNhbXN1bmcgU29DIFNQSSBEcml2ZXIgbG9hZGVkIGZvciBCdXMgU1BJLSVkIFwKKwkJCQkJd2l0aCAlZCBTbGF2ZXMgYXR0YWNoZWRcbiIsCisJCQkJCXBkZXYtPmlkLCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0KTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcdElPbWVtPVsweCV4LTB4JXhdXAorCQkJCQlcdERNQT1bUngtJWQsIFR4LSVkXVxuIiwKKwkJCQkJbWVtX3Jlcy0+ZW5kLCBtZW1fcmVzLT5zdGFydCwKKwkJCQkJc2RkLT5yeF9kbWFjaCwgc2RkLT50eF9kbWFjaCk7CisKKwlyZXR1cm4gMDsKKworZXJyODoKKwlkZXN0cm95X3dvcmtxdWV1ZShzZGQtPndvcmtxdWV1ZSk7CitlcnI3OgorCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7CitlcnI2OgorCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19wdXQoc2NpLT5zcmNfY2xrKTsKK2VycjU6CisJY2xrX2Rpc2FibGUoc2RkLT5jbGspOworZXJyNDoKKwljbGtfcHV0KHNkZC0+Y2xrKTsKK2VycjM6CitlcnIyOgorCWlvdW5tYXAoKHZvaWQgKikgc2RkLT5yZWdzKTsKK2VycjE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKK2VycjA6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHJlc291cmNlCSptZW1fcmVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJc2RkLT5zdGF0ZSB8PSBTVVNQTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoc2RkLT5zdGF0ZSAmIFNQSUJVU1kpCisJCW1zbGVlcCgxMCk7CisKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKworCWRlc3Ryb3lfd29ya3F1ZXVlKHNkZC0+d29ya3F1ZXVlKTsKKworCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7CisKKwlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQorCQljbGtfcHV0KHNjaS0+c3JjX2Nsayk7CisKKwljbGtfZGlzYWJsZShzZGQtPmNsayk7CisJY2xrX3B1dChzZGQtPmNsayk7CisKKwlpb3VubWFwKCh2b2lkICopIHNkZC0+cmVncyk7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzYzY0eHhfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJc2RkLT5zdGF0ZSB8PSBTVVNQTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoc2RkLT5zdGF0ZSAmIFNQSUJVU1kpCisJCW1zbGVlcCgxMCk7CisKKwkvKiBEaXNhYmxlIHRoZSBjbG9jayAqLworCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7CisKKwljbGtfZGlzYWJsZShzZGQtPmNsayk7CisKKwlzZGQtPmN1cl9zcGVlZCA9IDA7IC8qIE91dHB1dCBDbG9jayBpcyBzdG9wcGVkICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2M2NHh4X3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2NpLT5jZmdfZ3BpbyhwZGV2KTsKKworCS8qIEVuYWJsZSB0aGUgY2xvY2sgKi8KKwlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQorCQljbGtfZW5hYmxlKHNjaS0+c3JjX2Nsayk7CisKKwljbGtfZW5hYmxlKHNkZC0+Y2xrKTsKKworCXMzYzY0eHhfc3BpX2h3aW5pdChzZGQsIHBkZXYtPmlkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKwlzZGQtPnN0YXRlICY9IH5TVVNQTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzY0eHhfc3BpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBzM2M2NHh4X3NwaV9yZXN1bWUJTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2M2NHh4X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiczNjNjR4eC1zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBzM2M2NHh4X3NwaV9yZW1vdmUsCisJLnN1c3BlbmQgPSBzM2M2NHh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzM2M2NHh4X3NwaV9yZXN1bWUsCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2M2NHh4LXNwaSIpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmczNjNjR4eF9zcGlfZHJpdmVyLCBzM2M2NHh4X3NwaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChzM2M2NHh4X3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHMzYzY0eHhfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjNjR4eF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHMzYzY0eHhfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzY0WFggU1BJIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYyBiL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTVlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqIFN1cGVySCBNU0lPRiBTUEkgTWFzdGVyIEludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zaF9tc2lvZi5oPgorCisjaW5jbHVkZSA8YXNtL3NwaS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworc3RydWN0IHNoX21zaW9mX3NwaV9wcml2IHsKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsgLyogbXVzdCBiZSBmaXJzdCBmb3Igc3BpX2JpdGJhbmcuYyAqLworCXZvaWQgX19pb21lbSAqbWFwYmFzZTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX2luZm8gKmluZm87CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0eF9maWZvX3NpemU7CisJaW50IHJ4X2ZpZm9fc2l6ZTsKK307CisKKyNkZWZpbmUgVE1EUjEJMHgwMAorI2RlZmluZSBUTURSMgkweDA0CisjZGVmaW5lIFRNRFIzCTB4MDgKKyNkZWZpbmUgUk1EUjEJMHgxMAorI2RlZmluZSBSTURSMgkweDE0CisjZGVmaW5lIFJNRFIzCTB4MTgKKyNkZWZpbmUgVFNDUgkweDIwCisjZGVmaW5lIFJTQ1IJMHgyMgorI2RlZmluZSBDVFIJMHgyOAorI2RlZmluZSBGQ1RSCTB4MzAKKyNkZWZpbmUgU1RSCTB4NDAKKyNkZWZpbmUgSUVSCTB4NDQKKyNkZWZpbmUgVERSMQkweDQ4CisjZGVmaW5lIFREUjIJMHg0YworI2RlZmluZSBURkRSCTB4NTAKKyNkZWZpbmUgUkRSMQkweDU4CisjZGVmaW5lIFJEUjIJMHg1YworI2RlZmluZSBSRkRSCTB4NjAKKworI2RlZmluZSBDVFJfVFNDS0UgKDEgPDwgMTUpCisjZGVmaW5lIENUUl9URlNFICAoMSA8PCAxNCkKKyNkZWZpbmUgQ1RSX1RYRSAgICgxIDw8IDkpCisjZGVmaW5lIENUUl9SWEUgICAoMSA8PCA4KQorCisjZGVmaW5lIFNUUl9URU9GICAoMSA8PCAyMykKKyNkZWZpbmUgU1RSX1JFT0YgICgxIDw8IDcpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX21zaW9mX3JlYWQoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLCBpbnQgcmVnX29mZnMpCit7CisJc3dpdGNoIChyZWdfb2ZmcykgeworCWNhc2UgVFNDUjoKKwljYXNlIFJTQ1I6CisJCXJldHVybiBpb3JlYWQxNihwLT5tYXBiYXNlICsgcmVnX29mZnMpOworCWRlZmF1bHQ6CisJCXJldHVybiBpb3JlYWQzMihwLT5tYXBiYXNlICsgcmVnX29mZnMpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfd3JpdGUoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLCBpbnQgcmVnX29mZnMsCisJCQkgICB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN3aXRjaCAocmVnX29mZnMpIHsKKwljYXNlIFRTQ1I6CisJY2FzZSBSU0NSOgorCQlpb3dyaXRlMTYodmFsdWUsIHAtPm1hcGJhc2UgKyByZWdfb2Zmcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlvd3JpdGUzMih2YWx1ZSwgcC0+bWFwYmFzZSArIHJlZ19vZmZzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNoX21zaW9mX21vZGlmeV9jdHJfd2FpdChzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2xyLCB1bnNpZ25lZCBsb25nIHNldCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBjbHIgfCBzZXQ7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCWludCBrOworCisJZGF0YSA9IHNoX21zaW9mX3JlYWQocCwgQ1RSKTsKKwlkYXRhICY9IH5jbHI7CisJZGF0YSB8PSBzZXQ7CisJc2hfbXNpb2Zfd3JpdGUocCwgQ1RSLCBkYXRhKTsKKworCWZvciAoayA9IDEwMDsgayA+IDA7IGstLSkgeworCQlpZiAoKHNoX21zaW9mX3JlYWQocCwgQ1RSKSAmIG1hc2spID09IHNldCkKKwkJCWJyZWFrOworCisJCXVkZWxheSgxMCk7CisJfQorCisJcmV0dXJuIGsgPiAwID8gMCA6IC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9tc2lvZl9zcGlfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwID0gZGF0YTsKKworCS8qIGp1c3QgZGlzYWJsZSB0aGUgaW50ZXJydXB0IGFuZCB3YWtlIHVwICovCisJc2hfbXNpb2Zfd3JpdGUocCwgSUVSLCAwKTsKKwljb21wbGV0ZSgmcC0+ZG9uZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGRpdjsKKwl1bnNpZ25lZCBzaG9ydCBzY3I7Cit9IGNvbnN0IHNoX21zaW9mX3NwaV9jbGtfdGFibGVbXSA9IHsKKwl7IDEsIDB4MDAwNyB9LAorCXsgMiwgMHgwMDAwIH0sCisJeyA0LCAweDAwMDEgfSwKKwl7IDgsIDB4MDAwMiB9LAorCXsgMTYsIDB4MDAwMyB9LAorCXsgMzIsIDB4MDAwNCB9LAorCXsgNjQsIDB4MWYwMCB9LAorCXsgMTI4LCAweDFmMDEgfSwKKwl7IDI1NiwgMHgxZjAyIH0sCisJeyA1MTIsIDB4MWYwMyB9LAorCXsgMTAyNCwgMHgxZjA0IH0sCit9OworCitzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfc2V0X2Nsa19yZWdzKHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3BpX2h6KQoreworCXVuc2lnbmVkIGxvbmcgZGl2ID0gMTAyNDsKKwlzaXplX3QgazsKKworCWlmICghV0FSTl9PTighc3BpX2h6IHx8ICFwYXJlbnRfcmF0ZSkpCisJCWRpdiA9IHBhcmVudF9yYXRlIC8gc3BpX2h6OworCisJLyogVE9ETzogbWFrZSBtb3JlIGZpbmUgZ3JhaW5lZCAqLworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoc2hfbXNpb2Zfc3BpX2Nsa190YWJsZSk7IGsrKykgeworCQlpZiAoc2hfbXNpb2Zfc3BpX2Nsa190YWJsZVtrXS5kaXYgPj0gZGl2KQorCQkJYnJlYWs7CisJfQorCisJayA9IG1pbl90KGludCwgaywgQVJSQVlfU0laRShzaF9tc2lvZl9zcGlfY2xrX3RhYmxlKSAtIDEpOworCisJc2hfbXNpb2Zfd3JpdGUocCwgVFNDUiwgc2hfbXNpb2Zfc3BpX2Nsa190YWJsZVtrXS5zY3IpOworCXNoX21zaW9mX3dyaXRlKHAsIFJTQ1IsIHNoX21zaW9mX3NwaV9jbGtfdGFibGVba10uc2NyKTsKK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3NldF9waW5fcmVncyhzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgICAgaW50IGNwb2wsIGludCBjcGhhLAorCQkJCSAgICAgIGludCB0eF9oaV96LCBpbnQgbHNiX2ZpcnN0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCBlZGdlOworCisJLyoKKwkgKiBDUE9MIENQSEEgICAgIFRTQ0tJWiBSU0NLSVogVEVERyBSRURHKCEpCisJICogICAgMCAgICAwICAgICAgICAgMTAgICAgIDEwICAgIDEgICAgMAorCSAqICAgIDAgICAgMSAgICAgICAgIDEwICAgICAxMCAgICAwICAgIDEKKwkgKiAgICAxICAgIDAgICAgICAgICAxMSAgICAgMTEgICAgMCAgICAxCisJICogICAgMSAgICAxICAgICAgICAgMTEgICAgIDExICAgIDEgICAgMAorCSAqCisJICogKCEpIE5vdGU6IFJFREcgaXMgaW52ZXJ0ZWQgcmVjb21tZW5kZWQgZGF0YSBzaGVldCBzZXR0aW5nCisJICovCisKKwlzaF9tc2lvZl93cml0ZShwLCBGQ1RSLCAwKTsKKwlzaF9tc2lvZl93cml0ZShwLCBUTURSMSwgMHhlMjAwMDAwNSB8IChsc2JfZmlyc3QgPDwgMjQpKTsKKwlzaF9tc2lvZl93cml0ZShwLCBSTURSMSwgMHgyMjAwMDAwNSB8IChsc2JfZmlyc3QgPDwgMjQpKTsKKworCXRtcCA9IDB4YTAwMDAwMDA7CisJdG1wIHw9IGNwb2wgPDwgMzA7IC8qIFRTQ0tJWiAqLworCXRtcCB8PSBjcG9sIDw8IDI4OyAvKiBSU0NLSVogKi8KKworCWVkZ2UgPSBjcG9sID8gY3BoYSA6ICFjcGhhOworCisJdG1wIHw9IGVkZ2UgPDwgMjc7IC8qIFRFREcgKi8KKwl0bXAgfD0gIWVkZ2UgPDwgMjY7IC8qIFJFREcgKi8KKwl0bXAgfD0gKHR4X2hpX3ogPyAyIDogMCkgPDwgMjI7IC8qIFRYRElaICovCisJc2hfbXNpb2Zfd3JpdGUocCwgQ1RSLCB0bXApOworfQorCitzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfc2V0X21vZGVfcmVncyhzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgICAgIGNvbnN0IHZvaWQgKnR4X2J1Ziwgdm9pZCAqcnhfYnVmLAorCQkJCSAgICAgICBpbnQgYml0cywgaW50IHdvcmRzKQoreworCXVuc2lnbmVkIGxvbmcgZHIyOworCisJZHIyID0gKChiaXRzIC0gMSkgPDwgMjQpIHwgKCh3b3JkcyAtIDEpIDw8IDE2KTsKKworCWlmICh0eF9idWYpCisJCXNoX21zaW9mX3dyaXRlKHAsIFRNRFIyLCBkcjIpOworCWVsc2UKKwkJc2hfbXNpb2Zfd3JpdGUocCwgVE1EUjIsIGRyMiB8IDEpOworCisJaWYgKHJ4X2J1ZikKKwkJc2hfbXNpb2Zfd3JpdGUocCwgUk1EUjIsIGRyMik7CisKKwlzaF9tc2lvZl93cml0ZShwLCBJRVIsIFNUUl9URU9GIHwgU1RSX1JFT0YpOworfQorCitzdGF0aWMgdm9pZCBzaF9tc2lvZl9yZXNldF9zdHIoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwKQoreworCXNoX21zaW9mX3dyaXRlKHAsIFNUUiwgc2hfbXNpb2ZfcmVhZChwLCBTVFIpKTsKK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fOChzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgICAgY29uc3Qgdm9pZCAqdHhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWZfOCA9IHR4X2J1ZjsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCB3b3JkczsgaysrKQorCQlzaF9tc2lvZl93cml0ZShwLCBURkRSLCBidWZfOFtrXSA8PCBmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzE2KHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKKwkJCQkgICAgICAgY29uc3Qgdm9pZCAqdHhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYnVmXzE2ID0gdHhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXNoX21zaW9mX3dyaXRlKHAsIFRGRFIsIGJ1Zl8xNltrXSA8PCBmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzE2dShzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJCWNvbnN0IHZvaWQgKnR4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCit7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmJ1Zl8xNiA9IHR4X2J1ZjsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCB3b3JkczsgaysrKQorCQlzaF9tc2lvZl93cml0ZShwLCBURkRSLCBnZXRfdW5hbGlnbmVkKCZidWZfMTZba10pIDw8IGZzKTsKK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fMzIoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAorCQkJCSAgICAgICBjb25zdCB2b2lkICp0eF9idWYsIGludCB3b3JkcywgaW50IGZzKQoreworCWNvbnN0IHVuc2lnbmVkIGludCAqYnVmXzMyID0gdHhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXNoX21zaW9mX3dyaXRlKHAsIFRGRFIsIGJ1Zl8zMltrXSA8PCBmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzMydShzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJCWNvbnN0IHZvaWQgKnR4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCit7CisJY29uc3QgdW5zaWduZWQgaW50ICpidWZfMzIgPSB0eF9idWY7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgd29yZHM7IGsrKykKKwkJc2hfbXNpb2Zfd3JpdGUocCwgVEZEUiwgZ2V0X3VuYWxpZ25lZCgmYnVmXzMyW2tdKSA8PCBmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9yZWFkX2ZpZm9fOChzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgICB2b2lkICpyeF9idWYsIGludCB3b3JkcywgaW50IGZzKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1Zl84ID0gcnhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCWJ1Zl84W2tdID0gc2hfbXNpb2ZfcmVhZChwLCBSRkRSKSA+PiBmczsKK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18xNihzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICAgICAgdm9pZCAqcnhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKK3sKKwl1bnNpZ25lZCBzaG9ydCAqYnVmXzE2ID0gcnhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCWJ1Zl8xNltrXSA9IHNoX21zaW9mX3JlYWQocCwgUkZEUikgPj4gZnM7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9yZWFkX2ZpZm9fMTZ1KHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKKwkJCQkgICAgICAgdm9pZCAqcnhfYnVmLCBpbnQgd29yZHMsIGludCBmcykKK3sKKwl1bnNpZ25lZCBzaG9ydCAqYnVmXzE2ID0gcnhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXB1dF91bmFsaWduZWQoc2hfbXNpb2ZfcmVhZChwLCBSRkRSKSA+PiBmcywgJmJ1Zl8xNltrXSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9yZWFkX2ZpZm9fMzIoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAorCQkJCSAgICAgIHZvaWQgKnJ4X2J1ZiwgaW50IHdvcmRzLCBpbnQgZnMpCit7CisJdW5zaWduZWQgaW50ICpidWZfMzIgPSByeF9idWY7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgd29yZHM7IGsrKykKKwkJYnVmXzMyW2tdID0gc2hfbXNpb2ZfcmVhZChwLCBSRkRSKSA+PiBmczsKK30KKworc3RhdGljIHZvaWQgc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18zMnUoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAorCQkJCSAgICAgICB2b2lkICpyeF9idWYsIGludCB3b3JkcywgaW50IGZzKQoreworCXVuc2lnbmVkIGludCAqYnVmXzMyID0gcnhfYnVmOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHdvcmRzOyBrKyspCisJCXB1dF91bmFsaWduZWQoc2hfbXNpb2ZfcmVhZChwLCBSRkRSKSA+PiBmcywgJmJ1Zl8zMltrXSk7Cit9CisKK3N0YXRpYyBpbnQgc2hfbXNpb2Zfc3BpX2JpdHMoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlpbnQgYml0czsKKworCWJpdHMgPSB0ID8gdC0+Yml0c19wZXJfd29yZCA6IDA7CisJYml0cyA9IGJpdHMgPyBiaXRzIDogc3BpLT5iaXRzX3Blcl93b3JkOworCXJldHVybiBiaXRzOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9tc2lvZl9zcGlfaHooc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJdW5zaWduZWQgbG9uZyBoejsKKworCWh6ID0gdCA/IHQtPnNwZWVkX2h6IDogMDsKKwloeiA9IGh6ID8gaHogOiBzcGktPm1heF9zcGVlZF9oejsKKwlyZXR1cm4gaHo7Cit9CisKK3N0YXRpYyBpbnQgc2hfbXNpb2Zfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJICAgICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJaW50IGJpdHM7CisKKwkvKiBub3RpbmcgdG8gY2hlY2sgaHogdmFsdWVzIGFnYWluc3Qgc2luY2UgcGFyZW50IGNsb2NrIGlzIGRpc2FibGVkICovCisKKwliaXRzID0gc2hfbXNpb2Zfc3BpX2JpdHMoc3BpLCB0KTsKKwlpZiAoYml0cyA8IDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChiaXRzID4gMzIpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwaV9iaXRiYW5nX3NldHVwX3RyYW5zZmVyKHNwaSwgdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBpc19vbikKK3sKKwlzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlpbnQgdmFsdWU7CisKKwkvKiBjaGlwIHNlbGVjdCBpcyBhY3RpdmUgbG93IHVubGVzcyBTUElfQ1NfSElHSCBpcyBzZXQgKi8KKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpCisJCXZhbHVlID0gKGlzX29uID09IEJJVEJBTkdfQ1NfQUNUSVZFKSA/IDEgOiAwOworCWVsc2UKKwkJdmFsdWUgPSAoaXNfb24gPT0gQklUQkFOR19DU19BQ1RJVkUpID8gMCA6IDE7CisKKwlpZiAoaXNfb24gPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZwLT5mbGFncykpIHsKKwkJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnAtPnBkZXYtPmRldik7CisJCQljbGtfZW5hYmxlKHAtPmNsayk7CisJCX0KKworCQkvKiBDb25maWd1cmUgcGlucyBiZWZvcmUgYXNzZXJ0aW5nIENTICovCisJCXNoX21zaW9mX3NwaV9zZXRfcGluX3JlZ3MocCwgISEoc3BpLT5tb2RlICYgU1BJX0NQT0wpLAorCQkJCQkgICEhKHNwaS0+bW9kZSAmIFNQSV9DUEhBKSwKKwkJCQkJICAhIShzcGktPm1vZGUgJiBTUElfM1dJUkUpLAorCQkJCQkgICEhKHNwaS0+bW9kZSAmIFNQSV9MU0JfRklSU1QpKTsKKwl9CisKKwkvKiB1c2Ugc3BpLT5jb250cm9sbGVyIGRhdGEgZm9yIENTIChzYW1lIHN0cmF0ZWd5IGFzIHNwaV9ncGlvKSAqLworCWdwaW9fc2V0X3ZhbHVlKCh1bnNpZ25lZClzcGktPmNvbnRyb2xsZXJfZGF0YSwgdmFsdWUpOworCisJaWYgKGlzX29uID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmcC0+ZmxhZ3MpKSB7CisJCQljbGtfZGlzYWJsZShwLT5jbGspOworCQkJcG1fcnVudGltZV9wdXQoJnAtPnBkZXYtPmRldik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hfbXNpb2Zfc3BpX3R4cnhfb25jZShzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAsCisJCQkJICB2b2lkICgqdHhfZmlmbykoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICosCisJCQkJCQkgIGNvbnN0IHZvaWQgKiwgaW50LCBpbnQpLAorCQkJCSAgdm9pZCAoKnJ4X2ZpZm8pKHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqLAorCQkJCQkJICB2b2lkICosIGludCwgaW50KSwKKwkJCQkgIGNvbnN0IHZvaWQgKnR4X2J1Ziwgdm9pZCAqcnhfYnVmLAorCQkJCSAgaW50IHdvcmRzLCBpbnQgYml0cykKK3sKKwlpbnQgZmlmb19zaGlmdDsKKwlpbnQgcmV0OworCisJLyogbGltaXQgbWF4aW11bSB3b3JkIHRyYW5zZmVyIHRvIHJ4L3R4IGZpZm8gc2l6ZSAqLworCWlmICh0eF9idWYpCisJCXdvcmRzID0gbWluX3QoaW50LCB3b3JkcywgcC0+dHhfZmlmb19zaXplKTsKKwlpZiAocnhfYnVmKQorCQl3b3JkcyA9IG1pbl90KGludCwgd29yZHMsIHAtPnJ4X2ZpZm9fc2l6ZSk7CisKKwkvKiB0aGUgZmlmbyBjb250ZW50cyBuZWVkIHNoaWZ0aW5nICovCisJZmlmb19zaGlmdCA9IDMyIC0gYml0czsKKworCS8qIHNldHVwIG1zaW9mIHRyYW5zZmVyIG1vZGUgcmVnaXN0ZXJzICovCisJc2hfbXNpb2Zfc3BpX3NldF9tb2RlX3JlZ3MocCwgdHhfYnVmLCByeF9idWYsIGJpdHMsIHdvcmRzKTsKKworCS8qIHdyaXRlIHR4IGZpZm8gKi8KKwlpZiAodHhfYnVmKQorCQl0eF9maWZvKHAsIHR4X2J1Ziwgd29yZHMsIGZpZm9fc2hpZnQpOworCisJLyogc2V0dXAgY2xvY2sgYW5kIHJ4L3R4IHNpZ25hbHMgKi8KKwlyZXQgPSBzaF9tc2lvZl9tb2RpZnlfY3RyX3dhaXQocCwgMCwgQ1RSX1RTQ0tFKTsKKwlpZiAocnhfYnVmKQorCQlyZXQgPSByZXQgPyByZXQgOiBzaF9tc2lvZl9tb2RpZnlfY3RyX3dhaXQocCwgMCwgQ1RSX1JYRSk7CisJcmV0ID0gcmV0ID8gcmV0IDogc2hfbXNpb2ZfbW9kaWZ5X2N0cl93YWl0KHAsIDAsIENUUl9UWEUpOworCisJLyogc3RhcnQgYnkgc2V0dGluZyBmcmFtZSBiaXQgKi8KKwlJTklUX0NPTVBMRVRJT04ocC0+ZG9uZSk7CisJcmV0ID0gcmV0ID8gcmV0IDogc2hfbXNpb2ZfbW9kaWZ5X2N0cl93YWl0KHAsIDAsIENUUl9URlNFKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBoYXJkd2FyZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHdhaXQgZm9yIHR4IGZpZm8gdG8gYmUgZW1wdGllZCAvIHJ4IGZpZm8gdG8gYmUgZmlsbGVkICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmcC0+ZG9uZSk7CisKKwkvKiByZWFkIHJ4IGZpZm8gKi8KKwlpZiAocnhfYnVmKQorCQlyeF9maWZvKHAsIHJ4X2J1Ziwgd29yZHMsIGZpZm9fc2hpZnQpOworCisJLyogY2xlYXIgc3RhdHVzIGJpdHMgKi8KKwlzaF9tc2lvZl9yZXNldF9zdHIocCk7CisKKwkvKiBzaHV0IGRvd24gZnJhbWUsIHR4L3R4IGFuZCBjbG9jayBzaWduYWxzICovCisJcmV0ID0gc2hfbXNpb2ZfbW9kaWZ5X2N0cl93YWl0KHAsIENUUl9URlNFLCAwKTsKKwlyZXQgPSByZXQgPyByZXQgOiBzaF9tc2lvZl9tb2RpZnlfY3RyX3dhaXQocCwgQ1RSX1RYRSwgMCk7CisJaWYgKHJ4X2J1ZikKKwkJcmV0ID0gcmV0ID8gcmV0IDogc2hfbXNpb2ZfbW9kaWZ5X2N0cl93YWl0KHAsIENUUl9SWEUsIDApOworCXJldCA9IHJldCA/IHJldCA6IHNoX21zaW9mX21vZGlmeV9jdHJfd2FpdChwLCBDVFJfVFNDS0UsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIHNodXQgZG93biBoYXJkd2FyZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldHVybiB3b3JkczsKKworIGVycjoKKwlzaF9tc2lvZl93cml0ZShwLCBJRVIsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfbXNpb2Zfc3BpX3R4cngoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl2b2lkICgqdHhfZmlmbykoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICosIGNvbnN0IHZvaWQgKiwgaW50LCBpbnQpOworCXZvaWQgKCpyeF9maWZvKShzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKiwgdm9pZCAqLCBpbnQsIGludCk7CisJaW50IGJpdHM7CisJaW50IGJ5dGVzX3Blcl93b3JkOworCWludCBieXRlc19kb25lOworCWludCB3b3JkczsKKwlpbnQgbjsKKworCWJpdHMgPSBzaF9tc2lvZl9zcGlfYml0cyhzcGksIHQpOworCisJLyogc2V0dXAgYnl0ZXMgcGVyIHdvcmQgYW5kIGZpZm8gcmVhZC93cml0ZSBmdW5jdGlvbnMgKi8KKwlpZiAoYml0cyA8PSA4KSB7CisJCWJ5dGVzX3Blcl93b3JkID0gMTsKKwkJdHhfZmlmbyA9IHNoX21zaW9mX3NwaV93cml0ZV9maWZvXzg7CisJCXJ4X2ZpZm8gPSBzaF9tc2lvZl9zcGlfcmVhZF9maWZvXzg7CisJfSBlbHNlIGlmIChiaXRzIDw9IDE2KSB7CisJCWJ5dGVzX3Blcl93b3JkID0gMjsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXQtPnR4X2J1ZiAmIDB4MDEpCisJCQl0eF9maWZvID0gc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fMTZ1OworCQllbHNlCisJCQl0eF9maWZvID0gc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fMTY7CisKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXQtPnJ4X2J1ZiAmIDB4MDEpCisJCQlyeF9maWZvID0gc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18xNnU7CisJCWVsc2UKKwkJCXJ4X2ZpZm8gPSBzaF9tc2lvZl9zcGlfcmVhZF9maWZvXzE2OworCX0gZWxzZSB7CisJCWJ5dGVzX3Blcl93b3JkID0gNDsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXQtPnR4X2J1ZiAmIDB4MDMpCisJCQl0eF9maWZvID0gc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fMzJ1OworCQllbHNlCisJCQl0eF9maWZvID0gc2hfbXNpb2Zfc3BpX3dyaXRlX2ZpZm9fMzI7CisKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXQtPnJ4X2J1ZiAmIDB4MDMpCisJCQlyeF9maWZvID0gc2hfbXNpb2Zfc3BpX3JlYWRfZmlmb18zMnU7CisJCWVsc2UKKwkJCXJ4X2ZpZm8gPSBzaF9tc2lvZl9zcGlfcmVhZF9maWZvXzMyOworCX0KKworCS8qIHNldHVwIGNsb2NrcyAoY2xvY2sgYWxyZWFkeSBlbmFibGVkIGluIGNoaXBzZWxlY3QoKSkgKi8KKwlzaF9tc2lvZl9zcGlfc2V0X2Nsa19yZWdzKHAsIGNsa19nZXRfcmF0ZShwLT5jbGspLAorCQkJCSAgc2hfbXNpb2Zfc3BpX2h6KHNwaSwgdCkpOworCisJLyogdHJhbnNmZXIgaW4gZmlmbyBzaXplZCBjaHVua3MgKi8KKwl3b3JkcyA9IHQtPmxlbiAvIGJ5dGVzX3Blcl93b3JkOworCWJ5dGVzX2RvbmUgPSAwOworCisJd2hpbGUgKGJ5dGVzX2RvbmUgPCB0LT5sZW4pIHsKKwkJbiA9IHNoX21zaW9mX3NwaV90eHJ4X29uY2UocCwgdHhfZmlmbywgcnhfZmlmbywKKwkJCQkJICAgdC0+dHhfYnVmICsgYnl0ZXNfZG9uZSwKKwkJCQkJICAgdC0+cnhfYnVmICsgYnl0ZXNfZG9uZSwKKwkJCQkJICAgd29yZHMsIGJpdHMpOworCQlpZiAobiA8IDApCisJCQlicmVhazsKKworCQlieXRlc19kb25lICs9IG4gKiBieXRlc19wZXJfd29yZDsKKwkJd29yZHMgLT0gbjsKKwl9CisKKwlyZXR1cm4gYnl0ZXNfZG9uZTsKK30KKworc3RhdGljIHUzMiBzaF9tc2lvZl9zcGlfdHhyeF93b3JkKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHVuc2lnbmVkIG5zZWNzLAorCQkJCSAgdTMyIHdvcmQsIHU4IGJpdHMpCit7CisJQlVHKCk7IC8qIHVudXNlZCBidXQgbmVlZGVkIGJ5IGJpdGJhbmcgY29kZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21zaW9mX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcjsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcDsKKwljaGFyIGNsa19uYW1lWzE2XTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHNoX21zaW9mX3NwaV9wcml2KSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBzcGkgbWFzdGVyXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIwOworCX0KKworCXAgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwKTsKKwlwLT5pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW5pdF9jb21wbGV0aW9uKCZwLT5kb25lKTsKKworCXNucHJpbnRmKGNsa19uYW1lLCBzaXplb2YoY2xrX25hbWUpLCAibXNpb2YlZCIsIHBkZXYtPmlkKTsKKwlwLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIGNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHAtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbG9jayBcIiVzXCJcbiIsIGNsa19uYW1lKTsKKwkJcmV0ID0gUFRSX0VSUihwLT5jbGspOworCQlnb3RvIGVycjE7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFyIHx8IGkgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgcGxhdGZvcm0gcmVzb3VyY2VzXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnIyOworCX0KKwlwLT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKKwlpZiAoIXAtPm1hcGJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGlvcmVtYXBcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpLCBzaF9tc2lvZl9zcGlfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBpcnFcbiIpOworCQlnb3RvIGVycjM7CisJfQorCisJcC0+cGRldiA9IHBkZXY7CisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwkvKiBUaGUgc3RhbmRhcmQgdmVyc2lvbiBvZiBNU0lPRiB1c2UgNjQgd29yZCBGSUZPcyAqLworCXAtPnR4X2ZpZm9fc2l6ZSA9IDY0OworCXAtPnJ4X2ZpZm9fc2l6ZSA9IDY0OworCisJLyogUGxhdGZvcm0gZGF0YSBtYXkgb3ZlcnJpZGUgRklGTyBzaXplcyAqLworCWlmIChwLT5pbmZvLT50eF9maWZvX292ZXJyaWRlKQorCQlwLT50eF9maWZvX3NpemUgPSBwLT5pbmZvLT50eF9maWZvX292ZXJyaWRlOworCWlmIChwLT5pbmZvLT5yeF9maWZvX292ZXJyaWRlKQorCQlwLT5yeF9maWZvX3NpemUgPSBwLT5pbmZvLT5yeF9maWZvX292ZXJyaWRlOworCisJLyogaW5pdCBtYXN0ZXIgYW5kIGJpdGJhbmcgY29kZSAqLworCW1hc3Rlci0+bW9kZV9iaXRzID0gU1BJX0NQT0wgfCBTUElfQ1BIQSB8IFNQSV9DU19ISUdIOworCW1hc3Rlci0+bW9kZV9iaXRzIHw9IFNQSV9MU0JfRklSU1QgfCBTUElfM1dJUkU7CisJbWFzdGVyLT5mbGFncyA9IDA7CisJbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHAtPmluZm8tPm51bV9jaGlwc2VsZWN0OworCW1hc3Rlci0+c2V0dXAgPSBzcGlfYml0YmFuZ19zZXR1cDsKKwltYXN0ZXItPmNsZWFudXAgPSBzcGlfYml0YmFuZ19jbGVhbnVwOworCisJcC0+Yml0YmFuZy5tYXN0ZXIgPSBtYXN0ZXI7CisJcC0+Yml0YmFuZy5jaGlwc2VsZWN0ID0gc2hfbXNpb2Zfc3BpX2NoaXBzZWxlY3Q7CisJcC0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IHNoX21zaW9mX3NwaV9zZXR1cF90cmFuc2ZlcjsKKwlwLT5iaXRiYW5nLnR4cnhfYnVmcyA9IHNoX21zaW9mX3NwaV90eHJ4OworCXAtPmJpdGJhbmcudHhyeF93b3JkW1NQSV9NT0RFXzBdID0gc2hfbXNpb2Zfc3BpX3R4cnhfd29yZDsKKwlwLT5iaXRiYW5nLnR4cnhfd29yZFtTUElfTU9ERV8xXSA9IHNoX21zaW9mX3NwaV90eHJ4X3dvcmQ7CisJcC0+Yml0YmFuZy50eHJ4X3dvcmRbU1BJX01PREVfMl0gPSBzaF9tc2lvZl9zcGlfdHhyeF93b3JkOworCXAtPmJpdGJhbmcudHhyeF93b3JkW1NQSV9NT0RFXzNdID0gc2hfbXNpb2Zfc3BpX3R4cnhfd29yZDsKKworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZwLT5iaXRiYW5nKTsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAwOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworIGVycjM6CisJaW91bm1hcChwLT5tYXBiYXNlKTsKKyBlcnIyOgorCWNsa19wdXQocC0+Y2xrKTsKKyBlcnIxOgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisgZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNoX21zaW9mX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX2JpdGJhbmdfc3RvcCgmcC0+Yml0YmFuZyk7CisJaWYgKCFyZXQpIHsKKwkJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCQlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBzaF9tc2lvZl9zcGlfaXJxKTsKKwkJaW91bm1hcChwLT5tYXBiYXNlKTsKKwkJY2xrX3B1dChwLT5jbGspOworCQlzcGlfbWFzdGVyX3B1dChwLT5iaXRiYW5nLm1hc3Rlcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfbXNpb2Zfc3BpX3J1bnRpbWVfbm9wKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBSdW50aW1lIFBNIGNhbGxiYWNrIHNoYXJlZCBiZXR3ZWVuIC0+cnVudGltZV9zdXNwZW5kKCkKKwkgKiBhbmQgLT5ydW50aW1lX3Jlc3VtZSgpLiBTaW1wbHkgcmV0dXJucyBzdWNjZXNzLgorCSAqCisJICogVGhpcyBkcml2ZXIgcmUtaW5pdGlhbGl6ZXMgYWxsIHJlZ2lzdGVycyBhZnRlcgorCSAqIHBtX3J1bnRpbWVfZ2V0X3N5bmMoKSBhbnl3YXkgc28gdGhlcmUgaXMgbm8gbmVlZAorCSAqIHRvIHNhdmUgYW5kIHJlc3RvcmUgcmVnaXN0ZXJzIGhlcmUuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9tc2lvZl9zcGlfZGV2X3BtX29wcyA9IHsKKwkucnVudGltZV9zdXNwZW5kID0gc2hfbXNpb2Zfc3BpX3J1bnRpbWVfbm9wLAorCS5ydW50aW1lX3Jlc3VtZSA9IHNoX21zaW9mX3NwaV9ydW50aW1lX25vcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX21zaW9mX3NwaV9kcnYgPSB7CisJLnByb2JlCQk9IHNoX21zaW9mX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IHNoX21zaW9mX3NwaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9ICJzcGlfc2hfbXNpb2YiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wbQkJPSAmc2hfbXNpb2Zfc3BpX2Rldl9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX21zaW9mX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2hfbXNpb2Zfc3BpX2Rydik7Cit9Cittb2R1bGVfaW5pdChzaF9tc2lvZl9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaF9tc2lvZl9zcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzaF9tc2lvZl9zcGlfZHJ2KTsKK30KK21vZHVsZV9leGl0KHNoX21zaW9mX3NwaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggTVNJT0YgU1BJIE1hc3RlciBJbnRlcmZhY2UgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzcGlfc2hfbXNpb2YiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9zY2kuYyBiL2RyaXZlcnMvc3BpL3NwaV9zaF9zY2kuYwppbmRleCA3ZDM2NzIwLi5hNjVjMTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfc2NpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3NoX3NjaS5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBlcnIxOwogCX0KLQlzcC0+bWVtYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJc3AtPm1lbWJhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoIXNwLT5tZW1iYXNlKSB7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBlcnIxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKaW5kZXggMTlmNzU2Mi4uZGZhMDI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCkBAIC0zNzUsMTIgKzM3NSwxMCBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykKIAkJZ290byBleGl0X2J1c3k7Ci0JaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmZGV2LT5kZXYsCi0JCQkJICAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJmRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJICAgICAic3BpX3R4eDkiKSkKIAkJZ290byBleGl0X2J1c3k7Ci0JYy0+bWVtYmFzZSA9IGRldm1faW9yZW1hcCgmZGV2LT5kZXYsCi0JCQkJICByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwljLT5tZW1iYXNlID0gZGV2bV9pb3JlbWFwKCZkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWMtPm1lbWJhc2UpCiAJCWdvdG8gZXhpdF9idXN5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IDIwZDczMjIuLmVhMWJlYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC01Myw3ICs1Myw3IEBACiAjZGVmaW5lIFNQSURFVl9NQUpPUgkJCTE1MwkvKiBhc3NpZ25lZCAqLwogI2RlZmluZSBOX1NQSV9NSU5PUlMJCQkzMgkvKiAuLi4gdXAgdG8gMjU2ICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCW1pbm9yc1tOX1NQSV9NSU5PUlMgLyBCSVRTX1BFUl9MT05HXTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChtaW5vcnMsIE5fU1BJX01JTk9SUyk7CiAKIAogLyogQml0IG1hc2tzIGZvciBzcGlfZGV2aWNlLm1vZGUgbWFuYWdlbWVudC4gIE5vdGUgdGhhdCBpbmNvcnJlY3QKQEAgLTI2NiwxNSArMjY2LDE1IEBACiAJCWtfdG1wLT5kZWxheV91c2VjcyA9IHVfdG1wLT5kZWxheV91c2VjczsKIAkJa190bXAtPnNwZWVkX2h6ID0gdV90bXAtPnNwZWVkX2h6OwogI2lmZGVmIFZFUkJPU0UKLQkJZGV2X2RiZygmc3BpLT5kZXYsCisJCWRldl9kYmcoJnNwaWRldi0+c3BpLT5kZXYsCiAJCQkiICB4ZmVyIGxlbiAlemQgJXMlcyVzJWRiaXRzICV1IHVzZWMgJXVIelxuIiwKIAkJCXVfdG1wLT5sZW4sCiAJCQl1X3RtcC0+cnhfYnVmID8gInJ4ICIgOiAiIiwKIAkJCXVfdG1wLT50eF9idWYgPyAidHggIiA6ICIiLAogCQkJdV90bXAtPmNzX2NoYW5nZSA/ICJjcyAiIDogIiIsCi0JCQl1X3RtcC0+Yml0c19wZXJfd29yZCA/IDogc3BpLT5iaXRzX3Blcl93b3JkLAorCQkJdV90bXAtPmJpdHNfcGVyX3dvcmQgPyA6IHNwaWRldi0+c3BpLT5iaXRzX3Blcl93b3JkLAogCQkJdV90bXAtPmRlbGF5X3VzZWNzLAotCQkJdV90bXAtPnNwZWVkX2h6ID8gOiBzcGktPm1heF9zcGVlZF9oeik7CisJCQl1X3RtcC0+c3BlZWRfaHogPyA6IHNwaWRldi0+c3BpLT5tYXhfc3BlZWRfaHopOwogI2VuZGlmCiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKGtfdG1wLCAmbXNnKTsKIAl9CkBAIC01NTgsNyArNTU4LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBzcGlkZXZfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwaWRldl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2OwogCWludAkJCXN0YXR1czsKQEAgLTYwNyw3ICs2MDcsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgc3BpZGV2X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBfX2RldmV4aXQgc3BpZGV2X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKQEAgLTYyOSw3ICs2MjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3BpZGV2X3NwaSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzcGlkZXZfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9CQkic3BpZGV2IiwKIAkJLm93bmVyID0JVEhJU19NT0RVTEUsCkBAIC02NjEsMTQgKzY2MSwxNCBAQAogCiAJc3BpZGV2X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAic3BpZGV2Iik7CiAJaWYgKElTX0VSUihzcGlkZXZfY2xhc3MpKSB7Ci0JCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaV9kcml2ZXIuZHJpdmVyLm5hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihzcGlkZXZfY2xhc3MpOwogCX0KIAotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnNwaWRldl9zcGkpOworCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnNwaWRldl9zcGlfZHJpdmVyKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQljbGFzc19kZXN0cm95KHNwaWRldl9jbGFzcyk7Ci0JCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaV9kcml2ZXIuZHJpdmVyLm5hbWUpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNjc2LDkgKzY3Niw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzcGlkZXZfZXhpdCh2b2lkKQogewotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc3BpZGV2X3NwaSk7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzcGlkZXZfc3BpX2RyaXZlcik7CiAJY2xhc3NfZGVzdHJveShzcGlkZXZfY2xhc3MpOwotCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJdW5yZWdpc3Rlcl9jaHJkZXYoU1BJREVWX01BSk9SLCBzcGlkZXZfc3BpX2RyaXZlci5kcml2ZXIubmFtZSk7CiB9CiBtb2R1bGVfZXhpdChzcGlkZXZfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwppbmRleCA0NmI4YzVjLi45ZjM4NjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCkBAIC0xNCwyMiArMTQsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3NwaS5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlICJ4aWxpbnhfc3BpLmgiCisjaW5jbHVkZSA8bGludXgvc3BpL3hpbGlueF9zcGkuaD4KKwogI2RlZmluZSBYSUxJTlhfU1BJX05BTUUgInhpbGlueF9zcGkiCiAKIC8qIFJlZ2lzdGVyIGRlZmluaXRpb25zIGFzIHBlciAiT1BCIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAoU1BJKSAodjEuMDBlKQogICogUHJvZHVjdCBTcGVjaWZpY2F0aW9uIiwgRFM0NjQKICAqLwotI2RlZmluZSBYU1BJX0NSX09GRlNFVAkJMHg2MgkvKiAxNi1iaXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBYU1BJX0NSX09GRlNFVAkJMHg2MAkvKiBDb250cm9sIFJlZ2lzdGVyICovCiAKICNkZWZpbmUgWFNQSV9DUl9FTkFCTEUJCTB4MDIKICNkZWZpbmUgWFNQSV9DUl9NQVNURVJfTU9ERQkweDA0CkBAIC00MCw4ICszOCw5IEBACiAjZGVmaW5lIFhTUElfQ1JfUlhGSUZPX1JFU0VUCTB4NDAKICNkZWZpbmUgWFNQSV9DUl9NQU5VQUxfU1NFTEVDVAkweDgwCiAjZGVmaW5lIFhTUElfQ1JfVFJBTlNfSU5ISUJJVAkweDEwMAorI2RlZmluZSBYU1BJX0NSX0xTQl9GSVJTVAkweDIwMAogCi0jZGVmaW5lIFhTUElfU1JfT0ZGU0VUCQkweDY3CS8qIDgtYml0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBYU1BJX1NSX09GRlNFVAkJMHg2NAkvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KIAogI2RlZmluZSBYU1BJX1NSX1JYX0VNUFRZX01BU0sJMHgwMQkvKiBSZWNlaXZlIEZJRk8gaXMgZW1wdHkgKi8KICNkZWZpbmUgWFNQSV9TUl9SWF9GVUxMX01BU0sJMHgwMgkvKiBSZWNlaXZlIEZJRk8gaXMgZnVsbCAqLwpAQCAtNDksOCArNDgsOCBAQAogI2RlZmluZSBYU1BJX1NSX1RYX0ZVTExfTUFTSwkweDA4CS8qIFRyYW5zbWl0IEZJRk8gaXMgZnVsbCAqLwogI2RlZmluZSBYU1BJX1NSX01PREVfRkFVTFRfTUFTSwkweDEwCS8qIE1vZGUgZmF1bHQgZXJyb3IgKi8KIAotI2RlZmluZSBYU1BJX1RYRF9PRkZTRVQJCTB4NmIJLyogOC1iaXQgRGF0YSBUcmFuc21pdCBSZWdpc3RlciAqLwotI2RlZmluZSBYU1BJX1JYRF9PRkZTRVQJCTB4NmYJLyogOC1iaXQgRGF0YSBSZWNlaXZlIFJlZ2lzdGVyICovCisjZGVmaW5lIFhTUElfVFhEX09GRlNFVAkJMHg2OAkvKiBEYXRhIFRyYW5zbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFhTUElfUlhEX09GRlNFVAkJMHg2YwkvKiBEYXRhIFJlY2VpdmUgUmVnaXN0ZXIgKi8KIAogI2RlZmluZSBYU1BJX1NTUl9PRkZTRVQJCTB4NzAJLyogMzItYml0IFNsYXZlIFNlbGVjdCBSZWdpc3RlciAqLwogCkBAIC03MCw2ICs2OSw3IEBACiAjZGVmaW5lIFhTUElfSU5UUl9UWF9VTkRFUlJVTgkJMHgwOAkvKiBUeEZJRk8gd2FzIHVuZGVycnVuICovCiAjZGVmaW5lIFhTUElfSU5UUl9SWF9GVUxMCQkweDEwCS8qIFJ4RklGTyBpcyBmdWxsICovCiAjZGVmaW5lIFhTUElfSU5UUl9SWF9PVkVSUlVOCQkweDIwCS8qIFJ4RklGTyB3YXMgb3ZlcnJ1biAqLworI2RlZmluZSBYU1BJX0lOVFJfVFhfSEFMRl9FTVBUWQkJMHg0MAkvKiBUeEZJRk8gaXMgaGFsZiBlbXB0eSAqLwogCiAjZGVmaW5lIFhJUElGX1YxMjNCX1JFU0VUUl9PRkZTRVQJMHg0MAkvKiBJUElGIHJlc2V0IHJlZ2lzdGVyICovCiAjZGVmaW5lIFhJUElGX1YxMjNCX1JFU0VUX01BU0sJCTB4MGEJLyogdGhlIHZhbHVlIHRvIHdyaXRlICovCkBAIC03OCwzNSArNzgsODUgQEAKIAkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLwogCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOwogCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci0KKwlzdHJ1Y3QgcmVzb3VyY2UgbWVtOyAvKiBwaHlzIG1lbSAqLwogCXZvaWQgX19pb21lbQkqcmVnczsJLyogdmlydC4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KIAogCXUzMgkJaXJxOwogCi0JdTMyCQlzcGVlZF9oejsgLyogU0NLIGhhcyBhIGZpeGVkIGZyZXF1ZW5jeSBvZiBzcGVlZF9oeiBIeiAqLwotCiAJdTggKnJ4X3B0cjsJCS8qIHBvaW50ZXIgaW4gdGhlIFR4IGJ1ZmZlciAqLwogCWNvbnN0IHU4ICp0eF9wdHI7CS8qIHBvaW50ZXIgaW4gdGhlIFJ4IGJ1ZmZlciAqLwogCWludCByZW1haW5pbmdfYnl0ZXM7CS8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB0cmFuc2ZlciAqLworCXU4IGJpdHNfcGVyX3dvcmQ7CisJdW5zaWduZWQgaW50ICgqcmVhZF9mbikgKHZvaWQgX19pb21lbSAqKTsKKwl2b2lkICgqd3JpdGVfZm4pICh1MzIsIHZvaWQgX19pb21lbSAqKTsKKwl2b2lkICgqdHhfZm4pIChzdHJ1Y3QgeGlsaW54X3NwaSAqKTsKKwl2b2lkICgqcnhfZm4pIChzdHJ1Y3QgeGlsaW54X3NwaSAqKTsKIH07CiAKLXN0YXRpYyB2b2lkIHhzcGlfaW5pdF9odyh2b2lkIF9faW9tZW0gKnJlZ3NfYmFzZSkKK3N0YXRpYyB2b2lkIHhzcGlfdHg4KHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQogeworCXhzcGktPndyaXRlX2ZuKCp4c3BpLT50eF9wdHIsIHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQpOworCXhzcGktPnR4X3B0cisrOworfQorCitzdGF0aWMgdm9pZCB4c3BpX3R4MTYoc3RydWN0IHhpbGlueF9zcGkgKnhzcGkpCit7CisJeHNwaS0+d3JpdGVfZm4oKih1MTYgKikoeHNwaS0+dHhfcHRyKSwgeHNwaS0+cmVncyArIFhTUElfVFhEX09GRlNFVCk7CisJeHNwaS0+dHhfcHRyICs9IDI7Cit9CisKK3N0YXRpYyB2b2lkIHhzcGlfdHgzMihzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKK3sKKwl4c3BpLT53cml0ZV9mbigqKHUzMiAqKSh4c3BpLT50eF9wdHIpLCB4c3BpLT5yZWdzICsgWFNQSV9UWERfT0ZGU0VUKTsKKwl4c3BpLT50eF9wdHIgKz0gNDsKK30KKworc3RhdGljIHZvaWQgeHNwaV9yeDgoc3RydWN0IHhpbGlueF9zcGkgKnhzcGkpCit7CisJdTMyIGRhdGEgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYU1BJX1JYRF9PRkZTRVQpOworCWlmICh4c3BpLT5yeF9wdHIpIHsKKwkJKnhzcGktPnJ4X3B0ciA9IGRhdGEgJiAweGZmOworCQl4c3BpLT5yeF9wdHIrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhzcGlfcngxNihzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKK3sKKwl1MzIgZGF0YSA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfUlhEX09GRlNFVCk7CisJaWYgKHhzcGktPnJ4X3B0cikgeworCQkqKHUxNiAqKSh4c3BpLT5yeF9wdHIpID0gZGF0YSAmIDB4ZmZmZjsKKwkJeHNwaS0+cnhfcHRyICs9IDI7CisJfQorfQorCitzdGF0aWMgdm9pZCB4c3BpX3J4MzIoc3RydWN0IHhpbGlueF9zcGkgKnhzcGkpCit7CisJdTMyIGRhdGEgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYU1BJX1JYRF9PRkZTRVQpOworCWlmICh4c3BpLT5yeF9wdHIpIHsKKwkJKih1MzIgKikoeHNwaS0+cnhfcHRyKSA9IGRhdGE7CisJCXhzcGktPnJ4X3B0ciArPSA0OworCX0KK30KKworc3RhdGljIHZvaWQgeHNwaV9pbml0X2h3KHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQoreworCXZvaWQgX19pb21lbSAqcmVnc19iYXNlID0geHNwaS0+cmVnczsKKwogCS8qIFJlc2V0IHRoZSBTUEkgZGV2aWNlICovCi0Jb3V0X2JlMzIocmVnc19iYXNlICsgWElQSUZfVjEyM0JfUkVTRVRSX09GRlNFVCwKLQkJIFhJUElGX1YxMjNCX1JFU0VUX01BU0spOworCXhzcGktPndyaXRlX2ZuKFhJUElGX1YxMjNCX1JFU0VUX01BU0ssCisJCXJlZ3NfYmFzZSArIFhJUElGX1YxMjNCX1JFU0VUUl9PRkZTRVQpOwogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzIGp1c3QgaW4gY2FzZSAqLwotCW91dF9iZTMyKHJlZ3NfYmFzZSArIFhJUElGX1YxMjNCX0lJRVJfT0ZGU0VULCAwKTsKKwl4c3BpLT53cml0ZV9mbigwLCByZWdzX2Jhc2UgKyBYSVBJRl9WMTIzQl9JSUVSX09GRlNFVCk7CiAJLyogRW5hYmxlIHRoZSBnbG9iYWwgSVBJRiBpbnRlcnJ1cHQgKi8KLQlvdXRfYmUzMihyZWdzX2Jhc2UgKyBYSVBJRl9WMTIzQl9ER0lFUl9PRkZTRVQsCi0JCSBYSVBJRl9WMTIzQl9HSU5UUl9FTkFCTEUpOworCXhzcGktPndyaXRlX2ZuKFhJUElGX1YxMjNCX0dJTlRSX0VOQUJMRSwKKwkJcmVnc19iYXNlICsgWElQSUZfVjEyM0JfREdJRVJfT0ZGU0VUKTsKIAkvKiBEZXNlbGVjdCB0aGUgc2xhdmUgb24gdGhlIFNQSSBidXMgKi8KLQlvdXRfYmUzMihyZWdzX2Jhc2UgKyBYU1BJX1NTUl9PRkZTRVQsIDB4ZmZmZik7CisJeHNwaS0+d3JpdGVfZm4oMHhmZmZmLCByZWdzX2Jhc2UgKyBYU1BJX1NTUl9PRkZTRVQpOwogCS8qIERpc2FibGUgdGhlIHRyYW5zbWl0dGVyLCBlbmFibGUgTWFudWFsIFNsYXZlIFNlbGVjdCBBc3NlcnRpb24sCiAJICogcHV0IFNQSSBjb250cm9sbGVyIGludG8gbWFzdGVyIG1vZGUsIGFuZCBlbmFibGUgaXQgKi8KLQlvdXRfYmUxNihyZWdzX2Jhc2UgKyBYU1BJX0NSX09GRlNFVCwKLQkJIFhTUElfQ1JfVFJBTlNfSU5ISUJJVCB8IFhTUElfQ1JfTUFOVUFMX1NTRUxFQ1QKLQkJIHwgWFNQSV9DUl9NQVNURVJfTU9ERSB8IFhTUElfQ1JfRU5BQkxFKTsKKwl4c3BpLT53cml0ZV9mbihYU1BJX0NSX1RSQU5TX0lOSElCSVQgfCBYU1BJX0NSX01BTlVBTF9TU0VMRUNUIHwKKwkJWFNQSV9DUl9NQVNURVJfTU9ERSB8IFhTUElfQ1JfRU5BQkxFIHwgWFNQSV9DUl9UWEZJRk9fUkVTRVQgfAorCQlYU1BJX0NSX1JYRklGT19SRVNFVCwgcmVnc19iYXNlICsgWFNQSV9DUl9PRkZTRVQpOwogfQogCiBzdGF0aWMgdm9pZCB4aWxpbnhfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGlzX29uKQpAQCAtMTE1LDE2ICsxNjUsMTYgQEAKIAogCWlmIChpc19vbiA9PSBCSVRCQU5HX0NTX0lOQUNUSVZFKSB7CiAJCS8qIERlc2VsZWN0IHRoZSBzbGF2ZSBvbiB0aGUgU1BJIGJ1cyAqLwotCQlvdXRfYmUzMih4c3BpLT5yZWdzICsgWFNQSV9TU1JfT0ZGU0VULCAweGZmZmYpOworCQl4c3BpLT53cml0ZV9mbigweGZmZmYsIHhzcGktPnJlZ3MgKyBYU1BJX1NTUl9PRkZTRVQpOwogCX0gZWxzZSBpZiAoaXNfb24gPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKIAkJLyogU2V0IHRoZSBTUEkgY2xvY2sgcGhhc2UgYW5kIHBvbGFyaXR5ICovCi0JCXUxNiBjciA9IGluX2JlMTYoeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKQorCQl1MTYgY3IgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCkKIAkJCSAmIH5YU1BJX0NSX01PREVfTUFTSzsKIAkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQogCQkJY3IgfD0gWFNQSV9DUl9DUEhBOwogCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCiAJCQljciB8PSBYU1BJX0NSX0NQT0w7Ci0JCW91dF9iZTE2KHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCwgY3IpOworCQl4c3BpLT53cml0ZV9mbihjciwgeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKIAogCQkvKiBXZSBkbyBub3QgY2hlY2sgc3BpLT5tYXhfc3BlZWRfaHogaGVyZSBhcyB0aGUgU1BJIGNsb2NrCiAJCSAqIGZyZXF1ZW5jeSBpcyBub3Qgc29mdHdhcmUgcHJvZ3JhbW1hYmxlICh0aGUgSVAgYmxvY2sgZGVzaWduCkBAIC0xMzIsMjQgKzE4MiwyNyBAQAogCQkgKi8KIAogCQkvKiBBY3RpdmF0ZSB0aGUgY2hpcCBzZWxlY3QgKi8KLQkJb3V0X2JlMzIoeHNwaS0+cmVncyArIFhTUElfU1NSX09GRlNFVCwKLQkJCSB+KDB4MDAwMSA8PCBzcGktPmNoaXBfc2VsZWN0KSk7CisJCXhzcGktPndyaXRlX2ZuKH4oMHgwMDAxIDw8IHNwaS0+Y2hpcF9zZWxlY3QpLAorCQkJeHNwaS0+cmVncyArIFhTUElfU1NSX09GRlNFVCk7CiAJfQogfQogCiAvKiBzcGlfYml0YmFuZyByZXF1aXJlcyBjdXN0b20gc2V0dXBfdHJhbnNmZXIoKSB0byBiZSBkZWZpbmVkIGlmIHRoZXJlIGlzIGEKICAqIGN1c3RvbSB0eHJ4X2J1ZnMoKS4gV2UgaGF2ZSBub3RoaW5nIHRvIHNldHVwIGhlcmUgYXMgdGhlIFNQSSBJUCBibG9jawotICogc3VwcG9ydHMganVzdCA4IGJpdHMgcGVyIHdvcmQsIGFuZCBTUEkgY2xvY2sgY2FuJ3QgYmUgY2hhbmdlZCBpbiBzb2Z0d2FyZS4KLSAqIENoZWNrIGZvciA4IGJpdHMgcGVyIHdvcmQuIENoaXAgc2VsZWN0IGRlbGF5IGNhbGN1bGF0aW9ucyBjb3VsZCBiZQorICogc3VwcG9ydHMgOCBvciAxNiBiaXRzIHBlciB3b3JkIHdoaWNoIGNhbm5vdCBiZSBjaGFuZ2VkIGluIHNvZnR3YXJlLgorICogU1BJIGNsb2NrIGNhbid0IGJlIGNoYW5nZWQgaW4gc29mdHdhcmUgZWl0aGVyLgorICogQ2hlY2sgZm9yIGNvcnJlY3QgYml0cyBwZXIgd29yZC4gQ2hpcCBzZWxlY3QgZGVsYXkgY2FsY3VsYXRpb25zIGNvdWxkIGJlCiAgKiBhZGRlZCBoZXJlIGFzIHNvb24gYXMgYml0YmFuZ193b3JrKCkgY2FuIGJlIG1hZGUgYXdhcmUgb2YgdGhlIGRlbGF5IHZhbHVlLgogICovCiBzdGF0aWMgaW50IHhpbGlueF9zcGlfc2V0dXBfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKIAkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKIHsKKwlzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCXU4IGJpdHNfcGVyX3dvcmQ7CiAKLQliaXRzX3Blcl93b3JkID0gKHQpID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKLQlpZiAoYml0c19wZXJfd29yZCAhPSA4KSB7CisJYml0c19wZXJfd29yZCA9ICh0ICYmIHQtPmJpdHNfcGVyX3dvcmQpCisJCQkgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOworCWlmIChiaXRzX3Blcl93b3JkICE9IHhzcGktPmJpdHNfcGVyX3dvcmQpIHsKIAkJZGV2X2Vycigmc3BpLT5kZXYsICIlcywgdW5zdXBwb3J0ZWQgYml0c19wZXJfd29yZD0lZFxuIiwKIAkJCV9fZnVuY19fLCBiaXRzX3Blcl93b3JkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjAsMTcgKzIxMywxNiBAQAogCiBzdGF0aWMgaW50IHhpbGlueF9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3Qgc3BpX2JpdGJhbmcgKmJpdGJhbmc7Ci0Jc3RydWN0IHhpbGlueF9zcGkgKnhzcGk7Ci0JaW50IHJldHZhbDsKLQotCXhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQliaXRiYW5nID0gJnhzcGktPmJpdGJhbmc7Ci0KLQlyZXR2YWwgPSB4aWxpbnhfc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KKwkvKiBhbHdheXMgcmV0dXJuIDAsIHdlIGNhbiBub3QgY2hlY2sgdGhlIG51bWJlciBvZiBiaXRzLgorCSAqIFRoZXJlIGFyZSBjYXNlcyB3aGVuIFNQSSBzZXR1cCBpcyBjYWxsZWQgYmVmb3JlIGFueSBkcml2ZXIgaXMKKwkgKiB0aGVyZSwgaW4gdGhhdCBjYXNlIHRoZSBTUEkgY29yZSBkZWZhdWx0cyB0byA4IGJpdHMsIHdoaWNoIHdlCisJICogZG8gbm90IHN1cHBvcnQgaW4gc29tZSBjYXNlcy4gQnV0IGlmIHdlIHJldHVybiBhbiBlcnJvciwgdGhlCisJICogU1BJIGRldmljZSB3b3VsZCBub3QgYmUgcmVnaXN0ZXJlZCBhbmQgbm8gZHJpdmVyIGNhbiBnZXQgaG9sZCBvZiBpdAorCSAqIFdoZW4gdGhlIGRyaXZlciBpcyB0aGVyZSwgaXQgd2lsbCBjYWxsIFNQSSBzZXR1cCBhZ2FpbiB3aXRoIHRoZQorCSAqIGNvcnJlY3QgbnVtYmVyIG9mIGJpdHMgcGVyIHRyYW5zZmVyLgorCSAqIElmIGEgZHJpdmVyIHNldHVwcyB3aXRoIHRoZSB3cm9uZyBiaXQgbnVtYmVyLCBpdCB3aWxsIGZhaWwgd2hlbgorCSAqIGl0IHRyaWVzIHRvIGRvIGEgdHJhbnNmZXIKKwkgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc5LDE1ICsyMzEsMTQgQEAKIAl1OCBzcjsKIAogCS8qIEZpbGwgdGhlIFR4IEZJRk8gd2l0aCBhcyBtYW55IGJ5dGVzIGFzIHBvc3NpYmxlICovCi0Jc3IgPSBpbl84KHhzcGktPnJlZ3MgKyBYU1BJX1NSX09GRlNFVCk7CisJc3IgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYU1BJX1NSX09GRlNFVCk7CiAJd2hpbGUgKChzciAmIFhTUElfU1JfVFhfRlVMTF9NQVNLKSA9PSAwICYmIHhzcGktPnJlbWFpbmluZ19ieXRlcyA+IDApIHsKLQkJaWYgKHhzcGktPnR4X3B0cikgewotCQkJb3V0XzgoeHNwaS0+cmVncyArIFhTUElfVFhEX09GRlNFVCwgKnhzcGktPnR4X3B0cisrKTsKLQkJfSBlbHNlIHsKLQkJCW91dF84KHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQsIDApOwotCQl9Ci0JCXhzcGktPnJlbWFpbmluZ19ieXRlcy0tOwotCQlzciA9IGluXzgoeHNwaS0+cmVncyArIFhTUElfU1JfT0ZGU0VUKTsKKwkJaWYgKHhzcGktPnR4X3B0cikKKwkJCXhzcGktPnR4X2ZuKHhzcGkpOworCQllbHNlCisJCQl4c3BpLT53cml0ZV9mbigwLCB4c3BpLT5yZWdzICsgWFNQSV9UWERfT0ZGU0VUKTsKKwkJeHNwaS0+cmVtYWluaW5nX2J5dGVzIC09IHhzcGktPmJpdHNfcGVyX3dvcmQgLyA4OworCQlzciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfU1JfT0ZGU0VUKTsKIAl9CiB9CiAKQEAgLTIwOSwxOCArMjYwLDE5IEBACiAJLyogRW5hYmxlIHRoZSB0cmFuc21pdCBlbXB0eSBpbnRlcnJ1cHQsIHdoaWNoIHdlIHVzZSB0byBkZXRlcm1pbmUKIAkgKiBwcm9ncmVzcyBvbiB0aGUgdHJhbnNtaXNzaW9uLgogCSAqLwotCWlwaWZfaWVyID0gaW5fYmUzMih4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlFUl9PRkZTRVQpOwotCW91dF9iZTMyKHhzcGktPnJlZ3MgKyBYSVBJRl9WMTIzQl9JSUVSX09GRlNFVCwKLQkJIGlwaWZfaWVyIHwgWFNQSV9JTlRSX1RYX0VNUFRZKTsKKwlpcGlmX2llciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhJUElGX1YxMjNCX0lJRVJfT0ZGU0VUKTsKKwl4c3BpLT53cml0ZV9mbihpcGlmX2llciB8IFhTUElfSU5UUl9UWF9FTVBUWSwKKwkJeHNwaS0+cmVncyArIFhJUElGX1YxMjNCX0lJRVJfT0ZGU0VUKTsKIAogCS8qIFN0YXJ0IHRoZSB0cmFuc2ZlciBieSBub3QgaW5oaWJpdGluZyB0aGUgdHJhbnNtaXR0ZXIgYW55IGxvbmdlciAqLwotCWNyID0gaW5fYmUxNih4c3BpLT5yZWdzICsgWFNQSV9DUl9PRkZTRVQpICYgflhTUElfQ1JfVFJBTlNfSU5ISUJJVDsKLQlvdXRfYmUxNih4c3BpLT5yZWdzICsgWFNQSV9DUl9PRkZTRVQsIGNyKTsKKwljciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKSAmCisJCX5YU1BJX0NSX1RSQU5TX0lOSElCSVQ7CisJeHNwaS0+d3JpdGVfZm4oY3IsIHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCk7CiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ4c3BpLT5kb25lKTsKIAogCS8qIERpc2FibGUgdGhlIHRyYW5zbWl0IGVtcHR5IGludGVycnVwdCAqLwotCW91dF9iZTMyKHhzcGktPnJlZ3MgKyBYSVBJRl9WMTIzQl9JSUVSX09GRlNFVCwgaXBpZl9pZXIpOworCXhzcGktPndyaXRlX2ZuKGlwaWZfaWVyLCB4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlFUl9PRkZTRVQpOwogCiAJcmV0dXJuIHQtPmxlbiAtIHhzcGktPnJlbWFpbmluZ19ieXRlczsKIH0KQEAgLTIzNyw4ICsyODksOCBAQAogCXUzMiBpcGlmX2lzcjsKIAogCS8qIEdldCB0aGUgSVBJRiBpbnRlcnJ1cHRzLCBhbmQgY2xlYXIgdGhlbSBpbW1lZGlhdGVseSAqLwotCWlwaWZfaXNyID0gaW5fYmUzMih4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlTUl9PRkZTRVQpOwotCW91dF9iZTMyKHhzcGktPnJlZ3MgKyBYSVBJRl9WMTIzQl9JSVNSX09GRlNFVCwgaXBpZl9pc3IpOworCWlwaWZfaXNyID0geHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlTUl9PRkZTRVQpOworCXhzcGktPndyaXRlX2ZuKGlwaWZfaXNyLCB4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlTUl9PRkZTRVQpOwogCiAJaWYgKGlwaWZfaXNyICYgWFNQSV9JTlRSX1RYX0VNUFRZKSB7CS8qIFRyYW5zbWlzc2lvbiBjb21wbGV0ZWQgKi8KIAkJdTE2IGNyOwpAQCAtMjQ5LDIwICszMDEsMTUgQEAKIAkJICogdHJhbnNtaXR0ZXIgd2hpbGUgdGhlIElzciByZWZpbGxzIHRoZSB0cmFuc21pdCByZWdpc3Rlci9GSUZPLAogCQkgKiBvciBtYWtlIHN1cmUgaXQgaXMgc3RvcHBlZCBpZiB3ZSdyZSBkb25lLgogCQkgKi8KLQkJY3IgPSBpbl9iZTE2KHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCk7Ci0JCW91dF9iZTE2KHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCwKLQkJCSBjciB8IFhTUElfQ1JfVFJBTlNfSU5ISUJJVCk7CisJCWNyID0geHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWFNQSV9DUl9PRkZTRVQpOworCQl4c3BpLT53cml0ZV9mbihjciB8IFhTUElfQ1JfVFJBTlNfSU5ISUJJVCwKKwkJCXhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCk7CiAKIAkJLyogUmVhZCBvdXQgYWxsIHRoZSBkYXRhIGZyb20gdGhlIFJ4IEZJRk8gKi8KLQkJc3IgPSBpbl84KHhzcGktPnJlZ3MgKyBYU1BJX1NSX09GRlNFVCk7CisJCXNyID0geHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWFNQSV9TUl9PRkZTRVQpOwogCQl3aGlsZSAoKHNyICYgWFNQSV9TUl9SWF9FTVBUWV9NQVNLKSA9PSAwKSB7Ci0JCQl1OCBkYXRhOwotCi0JCQlkYXRhID0gaW5fOCh4c3BpLT5yZWdzICsgWFNQSV9SWERfT0ZGU0VUKTsKLQkJCWlmICh4c3BpLT5yeF9wdHIpIHsKLQkJCQkqeHNwaS0+cnhfcHRyKysgPSBkYXRhOwotCQkJfQotCQkJc3IgPSBpbl84KHhzcGktPnJlZ3MgKyBYU1BJX1NSX09GRlNFVCk7CisJCQl4c3BpLT5yeF9mbih4c3BpKTsKKwkJCXNyID0geHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWFNQSV9TUl9PRkZTRVQpOwogCQl9CiAKIAkJLyogU2VlIGlmIHRoZXJlIGlzIG1vcmUgZGF0YSB0byBzZW5kICovCkBAIC0yNzEsNyArMzE4LDcgQEAKIAkJCS8qIFN0YXJ0IHRoZSB0cmFuc2ZlciBieSBub3QgaW5oaWJpdGluZyB0aGUKIAkJCSAqIHRyYW5zbWl0dGVyIGFueSBsb25nZXIKIAkJCSAqLwotCQkJb3V0X2JlMTYoeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VULCBjcik7CisJCQl4c3BpLT53cml0ZV9mbihjciwgeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE5vIG1vcmUgZGF0YSB0byBzZW5kLgogCQkJICogSW5kaWNhdGUgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KQEAgLTI4Myw0MCArMzMwLDIyIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB4aWxpbnhfc3BpX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAotCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3N0cnVjdCBzcGlfbWFzdGVyICp4aWxpbnhfc3BpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwKKwl1MzIgaXJxLCBzMTYgYnVzX251bSkKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCB4aWxpbnhfc3BpICp4c3BpOwotCXN0cnVjdCByZXNvdXJjZSByX2lycV9zdHJ1Y3Q7Ci0Jc3RydWN0IHJlc291cmNlIHJfbWVtX3N0cnVjdDsKKwlzdHJ1Y3QgeHNwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OwogCi0Jc3RydWN0IHJlc291cmNlICpyX2lycSA9ICZyX2lycV9zdHJ1Y3Q7Ci0Jc3RydWN0IHJlc291cmNlICpyX21lbSA9ICZyX21lbV9zdHJ1Y3Q7Ci0JaW50IHJjID0gMDsKLQljb25zdCB1MzIgKnByb3A7Ci0JaW50IGxlbjsKLQotCS8qIEdldCByZXNvdXJjZXMobWVtb3J5LCBJUlEpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlICovCi0JbWFzdGVyID0gc3BpX2FsbG9jX21hc3Rlcigmb2ZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCB4aWxpbnhfc3BpKSk7Ci0KLQlpZiAobWFzdGVyID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKGRldiwgIk5vIHBsYXRmb3JtIGRhdGEgYXR0YWNoZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIG1hc3Rlcik7Ci0KLQlyYyA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsIHJfbWVtKTsKLQlpZiAocmMpIHsKLQkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJpbnZhbGlkIGFkZHJlc3NcbiIpOwotCQlnb3RvIHB1dF9tYXN0ZXI7Ci0JfQotCi0JcmMgPSBvZl9pcnFfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsIHJfaXJxKTsKLQlpZiAocmMgPT0gTk9fSVJRKSB7Ci0JCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKLQkJZ290byBwdXRfbWFzdGVyOwotCX0KKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGRldiwgc2l6ZW9mKHN0cnVjdCB4aWxpbnhfc3BpKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiBOVUxMOwogCiAJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCiAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOwpAQCAtMzI5LDEyOCArMzU4LDg3IEBACiAJeHNwaS0+Yml0YmFuZy5tYXN0ZXItPnNldHVwID0geGlsaW54X3NwaV9zZXR1cDsKIAlpbml0X2NvbXBsZXRpb24oJnhzcGktPmRvbmUpOwogCi0JeHNwaS0+aXJxID0gcl9pcnEtPnN0YXJ0OwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocl9tZW0tPnN0YXJ0LAotCQkJcl9tZW0tPmVuZCAtIHJfbWVtLT5zdGFydCArIDEsIFhJTElOWF9TUElfTkFNRSkpIHsKLQkJcmMgPSAtRU5YSU87Ci0JCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibWVtb3J5IHJlcXVlc3QgZmFpbHVyZVxuIik7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pLAorCQlYSUxJTlhfU1BJX05BTUUpKQogCQlnb3RvIHB1dF9tYXN0ZXI7Ci0JfQogCi0JeHNwaS0+cmVncyA9IGlvcmVtYXAocl9tZW0tPnN0YXJ0LCByX21lbS0+ZW5kIC0gcl9tZW0tPnN0YXJ0ICsgMSk7CisJeHNwaS0+cmVncyA9IGlvcmVtYXAobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAlpZiAoeHNwaS0+cmVncyA9PSBOVUxMKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJpb3JlbWFwIGZhaWx1cmVcbiIpOwotCQlnb3RvIHJlbGVhc2VfbWVtOworCQlkZXZfd2FybihkZXYsICJpb3JlbWFwIGZhaWx1cmVcbiIpOworCQlnb3RvIG1hcF9mYWlsZWQ7CiAJfQotCXhzcGktPmlycSA9IHJfaXJxLT5zdGFydDsKIAotCS8qIGR5bmFtaWMgYnVzIGFzc2lnbm1lbnQgKi8KLQltYXN0ZXItPmJ1c19udW0gPSAtMTsKKwltYXN0ZXItPmJ1c19udW0gPSBidXNfbnVtOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bnVtX2NoaXBzZWxlY3Q7CiAKLQkvKiBudW1iZXIgb2Ygc2xhdmUgc2VsZWN0IGJpdHMgaXMgcmVxdWlyZWQgKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAieGxueCxudW0tc3MtYml0cyIsICZsZW4pOwotCWlmICghcHJvcCB8fCBsZW4gPCBzaXplb2YoKnByb3ApKSB7Ci0JCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibm8gJ3hsbngsbnVtLXNzLWJpdHMnIHByb3BlcnR5XG4iKTsKKwl4c3BpLT5tZW0gPSAqbWVtOworCXhzcGktPmlycSA9IGlycTsKKwlpZiAocGRhdGEtPmxpdHRsZV9lbmRpYW4pIHsKKwkJeHNwaS0+cmVhZF9mbiA9IGlvcmVhZDMyOworCQl4c3BpLT53cml0ZV9mbiA9IGlvd3JpdGUzMjsKKwl9IGVsc2UgeworCQl4c3BpLT5yZWFkX2ZuID0gaW9yZWFkMzJiZTsKKwkJeHNwaS0+d3JpdGVfZm4gPSBpb3dyaXRlMzJiZTsKKwl9CisJeHNwaS0+Yml0c19wZXJfd29yZCA9IHBkYXRhLT5iaXRzX3Blcl93b3JkOworCWlmICh4c3BpLT5iaXRzX3Blcl93b3JkID09IDgpIHsKKwkJeHNwaS0+dHhfZm4gPSB4c3BpX3R4ODsKKwkJeHNwaS0+cnhfZm4gPSB4c3BpX3J4ODsKKwl9IGVsc2UgaWYgKHhzcGktPmJpdHNfcGVyX3dvcmQgPT0gMTYpIHsKKwkJeHNwaS0+dHhfZm4gPSB4c3BpX3R4MTY7CisJCXhzcGktPnJ4X2ZuID0geHNwaV9yeDE2OworCX0gZWxzZSBpZiAoeHNwaS0+Yml0c19wZXJfd29yZCA9PSAzMikgeworCQl4c3BpLT50eF9mbiA9IHhzcGlfdHgzMjsKKwkJeHNwaS0+cnhfZm4gPSB4c3BpX3J4MzI7CisJfSBlbHNlCiAJCWdvdG8gdW5tYXBfaW87Ci0JfQotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSAqcHJvcDsKKwogCiAJLyogU1BJIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb25zICovCi0JeHNwaV9pbml0X2h3KHhzcGktPnJlZ3MpOworCXhzcGlfaW5pdF9odyh4c3BpKTsKIAogCS8qIFJlZ2lzdGVyIGZvciBTUEkgSW50ZXJydXB0ICovCi0JcmMgPSByZXF1ZXN0X2lycSh4c3BpLT5pcnEsIHhpbGlueF9zcGlfaXJxLCAwLCBYSUxJTlhfU1BJX05BTUUsIHhzcGkpOwotCWlmIChyYyAhPSAwKSB7Ci0JCWRldl93YXJuKCZvZmRldi0+ZGV2LCAiaXJxIHJlcXVlc3QgZmFpbHVyZTogJWRcbiIsIHhzcGktPmlycSk7CisJcmV0ID0gcmVxdWVzdF9pcnEoeHNwaS0+aXJxLCB4aWxpbnhfc3BpX2lycSwgMCwgWElMSU5YX1NQSV9OQU1FLCB4c3BpKTsKKwlpZiAocmV0KQogCQlnb3RvIHVubWFwX2lvOwotCX0KIAotCXJjID0gc3BpX2JpdGJhbmdfc3RhcnQoJnhzcGktPmJpdGJhbmcpOwotCWlmIChyYyAhPSAwKSB7Ci0JCWRldl9lcnIoJm9mZGV2LT5kZXYsICJzcGlfYml0YmFuZ19zdGFydCBGQUlMRURcbiIpOworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZ4c3BpLT5iaXRiYW5nKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAic3BpX2JpdGJhbmdfc3RhcnQgRkFJTEVEXG4iKTsKIAkJZ290byBmcmVlX2lycTsKIAl9CiAKLQlkZXZfaW5mbygmb2ZkZXYtPmRldiwgImF0IDB4JTA4WCBtYXBwZWQgdG8gMHglMDhYLCBpcnE9JWRcbiIsCi0JCQkodW5zaWduZWQgaW50KXJfbWVtLT5zdGFydCwgKHUzMil4c3BpLT5yZWdzLCB4c3BpLT5pcnEpOwotCi0JLyogQWRkIGFueSBzdWJub2RlcyBvbiB0aGUgU1BJIGJ1cyAqLwotCW9mX3JlZ2lzdGVyX3NwaV9kZXZpY2VzKG1hc3Rlciwgb2ZkZXYtPm5vZGUpOwotCi0JcmV0dXJuIHJjOworCWRldl9pbmZvKGRldiwgImF0IDB4JTA4bGxYIG1hcHBlZCB0byAweCVwLCBpcnE9JWRcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGFydCwgeHNwaS0+cmVncywgeHNwaS0+aXJxKTsKKwlyZXR1cm4gbWFzdGVyOwogCiBmcmVlX2lycToKIAlmcmVlX2lycSh4c3BpLT5pcnEsIHhzcGkpOwogdW5tYXBfaW86CiAJaW91bm1hcCh4c3BpLT5yZWdzKTsKLXJlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyX21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUocl9tZW0pKTsKK21hcF9mYWlsZWQ6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiBwdXRfbWFzdGVyOgogCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7Ci0JcmV0dXJuIHJjOworCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTCh4aWxpbnhfc3BpX2luaXQpOwogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB4aWxpbnhfc3BpX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3ZvaWQgeGlsaW54X3NwaV9kZWluaXQoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikKIHsKIAlzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaTsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCByZXNvdXJjZSByX21lbTsKIAotCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKG9mZGV2KTsKIAl4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwogCiAJc3BpX2JpdGJhbmdfc3RvcCgmeHNwaS0+Yml0YmFuZyk7CiAJZnJlZV9pcnEoeHNwaS0+aXJxLCB4c3BpKTsKIAlpb3VubWFwKHhzcGktPnJlZ3MpOwotCWlmICghb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJfbWVtKSkKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJfbWVtLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyX21lbSkpOwotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgMCk7CisKKwlyZWxlYXNlX21lbV9yZWdpb24oeHNwaS0+bWVtLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZ4c3BpLT5tZW0pKTsKIAlzcGlfbWFzdGVyX3B1dCh4c3BpLT5iaXRiYW5nLm1hc3Rlcik7Ci0KLQlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woeGlsaW54X3NwaV9kZWluaXQpOwogCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06IiBYSUxJTlhfU1BJX05BTUUpOwotCi1zdGF0aWMgaW50IF9fZXhpdCB4aWxpbnhfc3BpX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKLXsKLQlyZXR1cm4geGlsaW54X3NwaV9yZW1vdmUob3ApOwotfQotCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5hIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmIiLCB9LAotCXt9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4aWxpbnhfc3BpX29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgeGlsaW54X3NwaV9vZl9kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAieGlsaW54LXhwcy1zcGkiLAotCS5tYXRjaF90YWJsZSA9IHhpbGlueF9zcGlfb2ZfbWF0Y2gsCi0JLnByb2JlID0geGlsaW54X3NwaV9vZl9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AoeGlsaW54X3NwaV9vZl9yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInhpbGlueC14cHMtc3BpIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHhpbGlueF9zcGlfaW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnhpbGlueF9zcGlfb2ZfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KHhpbGlueF9zcGlfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB4aWxpbnhfc3BpX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmeGlsaW54X3NwaV9vZl9kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoeGlsaW54X3NwaV9leGl0KTsKIE1PRFVMRV9BVVRIT1IoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggU1BJIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5oIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMTFhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIFhpbGlueCBTUEkgZGV2aWNlIGRyaXZlciBBUEkgYW5kIHBsYXRmb3JtIGRhdGEgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9YSUxJTlhfU1BJX0hfCisjZGVmaW5lIF9YSUxJTlhfU1BJX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKyNkZWZpbmUgWElMSU5YX1NQSV9OQU1FICJ4aWxpbnhfc3BpIgorCitzdHJ1Y3Qgc3BpX21hc3RlciAqeGlsaW54X3NwaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICptZW0sCisJdTMyIGlycSwgczE2IGJ1c19udW0pOworCit2b2lkIHhpbGlueF9zcGlfZGVpbml0KHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkYzNhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIFhpbGlueCBTUEkgT0YgZGV2aWNlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogWGlsaW54IFNQSSBkZXZpY2VzIGFzIE9GIGRldmljZXMKKyAqCisgKiBJbnNwaXJlZCBieSB4aWxpbnhfc3BpLmMsIDIwMDItMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkveGlsaW54X3NwaS5oPgorI2luY2x1ZGUgInhpbGlueF9zcGkuaCIKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4aWxpbnhfc3BpX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHJlc291cmNlIHJfbWVtOworCXN0cnVjdCByZXNvdXJjZSByX2lycTsKKwlpbnQgcmMgPSAwOworCWNvbnN0IHUzMiAqcHJvcDsKKwlpbnQgbGVuOworCisJcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcl9tZW0pOworCWlmIChyYykgeworCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgImludmFsaWQgYWRkcmVzc1xuIik7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IG9mX2lycV90b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJfaXJxKTsKKwlpZiAocmMgPT0gTk9fSVJRKSB7CisJCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJb2ZkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOworCXBkYXRhID0gb2ZkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogbnVtYmVyIG9mIHNsYXZlIHNlbGVjdCBiaXRzIGlzIHJlcXVpcmVkICovCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgInhsbngsbnVtLXNzLWJpdHMiLCAmbGVuKTsKKwlpZiAoIXByb3AgfHwgbGVuIDwgc2l6ZW9mKCpwcm9wKSkgeworCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgIm5vICd4bG54LG51bS1zcy1iaXRzJyBwcm9wZXJ0eVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwZGF0YS0+bnVtX2NoaXBzZWxlY3QgPSAqcHJvcDsKKwlwZGF0YS0+Yml0c19wZXJfd29yZCA9IDg7CisJbWFzdGVyID0geGlsaW54X3NwaV9pbml0KCZvZmRldi0+ZGV2LCAmcl9tZW0sIHJfaXJxLnN0YXJ0LCAtMSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBtYXN0ZXIpOworCisJLyogQWRkIGFueSBzdWJub2RlcyBvbiB0aGUgU1BJIGJ1cyAqLworCW9mX3JlZ2lzdGVyX3NwaV9kZXZpY2VzKG1hc3Rlciwgb2ZkZXYtPm5vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHhpbGlueF9zcGlfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXhpbGlueF9zcGlfZGVpbml0KGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldikpOworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgMCk7CisJa2ZyZWUob2ZkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlvZmRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCB4aWxpbnhfc3BpX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlyZXR1cm4geGlsaW54X3NwaV9yZW1vdmUob3ApOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmIiLCB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4aWxpbnhfc3BpX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgeGlsaW54X3NwaV9vZl9kcml2ZXIgPSB7CisJLm1hdGNoX3RhYmxlID0geGlsaW54X3NwaV9vZl9tYXRjaCwKKwkucHJvYmUgPSB4aWxpbnhfc3BpX29mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcCh4aWxpbnhfc3BpX29mX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAieGlsaW54LXhwcy1zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGlsaW54X3NwaV9vZl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmeGlsaW54X3NwaV9vZl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoeGlsaW54X3NwaV9vZl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHhpbGlueF9zcGlfb2ZfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ4aWxpbnhfc3BpX29mX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh4aWxpbnhfc3BpX29mX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIDxpbmZvQG1vY2Vhbi1sYWJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IFNQSSBwbGF0Zm9ybSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfcGx0Zm0uYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfcGx0Zm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGRlYmFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaV9wbHRmbS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogU3VwcG9ydCBmb3IgWGlsaW54IFNQSSBwbGF0Zm9ybSBkZXZpY2VzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIFhpbGlueCBTUEkgZGV2aWNlcyBhcyBwbGF0Zm9ybSBkZXZpY2VzCisgKgorICogSW5zcGlyZWQgYnkgeGlsaW54X3NwaS5jLCAyMDAyLTIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3hpbGlueF9zcGkuaD4KKworI2luY2x1ZGUgInhpbGlueF9zcGkuaCIKKworc3RhdGljIGludCBfX2RldmluaXQgeGlsaW54X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCBpcnE7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwl1OCBpOworCisJcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PREVWOworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRU5PREVWOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVOWElPOworCisJbWFzdGVyID0geGlsaW54X3NwaV9pbml0KCZkZXYtPmRldiwgciwgaXJxLCBkZXYtPmlkKTsKKwlpZiAoIW1hc3RlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9kZXZpY2VzOyBpKyspCisJCXNwaV9uZXdfZGV2aWNlKG1hc3RlciwgcGRhdGEtPmRldmljZXMgKyBpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgbWFzdGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgeGlsaW54X3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXhpbGlueF9zcGlfZGVpbml0KHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgWElMSU5YX1NQSV9OQU1FKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGlsaW54X3NwaV9kcml2ZXIgPSB7CisJLnByb2JlCT0geGlsaW54X3NwaV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoeGlsaW54X3NwaV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gWElMSU5YX1NQSV9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGlsaW54X3NwaV9wbHRmbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGlsaW54X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoeGlsaW54X3NwaV9wbHRmbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHhpbGlueF9zcGlfcGx0Zm1fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4aWxpbnhfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh4aWxpbnhfc3BpX3BsdGZtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIDxpbmZvQG1vY2Vhbi1sYWJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IFNQSSBwbGF0Zm9ybSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggNTRlMTc0ZDIuLjk0ZWI4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC04Nyw4ICs4Nyw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2RyZWFtL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgpAQCAtOTksNiArOTcsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92bXdnZngvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZyIKQEAgLTE0Myw1ICsxNDMsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9uZXR3YXZlL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWciCisKIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggMDY5ODY0Zi4uYjVlNjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNiBAQAogb2JqLSQoQ09ORklHX0lOUFVUX01JTUlPKQkrPSBtaW1pby8KIG9iai0kKENPTkZJR19UUkFOWlBPUlQpCQkrPSBmcm9udGllci8KIG9iai0kKENPTkZJR19EUkVBTSkJCSs9IGRyZWFtLwotb2JqLSQoQ09ORklHX0RTVCkJCSs9IGRzdC8KIG9iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLwogb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwpAQCAtNTMsMyArNTIsNCBAQAogb2JqLSQoQ09ORklHX1dBVkVMQU4pCQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9XQVZFTEFOKQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9ORVRXQVZFKQkrPSBuZXR3YXZlLworb2JqLSQoQ09ORklHX0ZCX1NNN1hYKQkJKz0gc203eHgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwppbmRleCA3NjMyZjU3Li4xZDc0ZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIGNvbmZpZyBCQVRNQU5fQURWCiAJdHJpc3RhdGUgIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sIgorCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBQQUNLRVQKICAgICAgICAgZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKaW5kZXggZDcyNDc5OC4uZWI2MTc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwpAQCAtMzYzLDggKzM2MywxMCBAQAogCQlyZXR1cm47CiAKIAlmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKHBhY2tldF9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKQorCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKSB7CisJCWtmcmVlKGZvcndfcGFja2V0KTsKIAkJcmV0dXJuOworCX0KIAogCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuID0gcGFja2V0X2xlbjsKIAltZW1jcHkoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmLCBwYWNrZXRfYnVmZiwgZm9yd19wYWNrZXQtPnBhY2tldF9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKaW5kZXggY2NjNWNkYy4uYjU1OWE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCkBAIC00NTEsNyArNDUxLDcgQEAKIAogI2RlZmluZSBDT01FRElfQ0JfRU9TCQkxCS8qIGVuZCBvZiBzY2FuICovCiAjZGVmaW5lIENPTUVESV9DQl9FT0EJCTIJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCi0jZGVmaW5lIENPTUVESV9DQl9CTE9DSwkJNAkvKiBERVBSRUNBVEVEOiBjb252ZW5pZW50IGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgQ09NRURJX0NCX0JMT0NLCQk0CS8qIGRhdGEgaGFzIGFycml2ZWQ6IHdha2VzIHVwIHJlYWQoKSAvIHdyaXRlKCkgKi8KICNkZWZpbmUgQ09NRURJX0NCX0VPQlVGCQk4CS8qIERFUFJFQ0FURUQ6IGVuZCBvZiBidWZmZXIgKi8KICNkZWZpbmUgQ09NRURJX0NCX0VSUk9SCQkxNgkvKiBjYXJkIGVycm9yIGR1cmluZyBhY3F1aXNpdGlvbiAqLwogI2RlZmluZSBDT01FRElfQ0JfT1ZFUkZMT1cJMzIJLyogYnVmZmVyIG92ZXJmbG93L3VuZGVyZmxvdyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKaW5kZXggMGQyYzJlYjIzLi5iZDM5Nzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKQEAgLTg0OSw4ICs4NDksMTEgQEAKIAl9CiAKIAlkZXZwcml2LT5wY2lfZW5hYmxlZCA9IDE7Ci0JZGV2cHJpdi0+aW9iYXNlID0KLQkgICAgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMCksIHNpemVvZihzdHJ1Y3QganIzX3QpKTsKKwlkZXZwcml2LT5pb2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwKKwkJCW9mZnNldG9mKHN0cnVjdCBqcjNfdCwgY2hhbm5lbFtkZXZwcml2LT5uX2NoYW5uZWxzXSkpOworCWlmICghZGV2cHJpdi0+aW9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXZwcml2LT5uX2NoYW5uZWxzKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKaW5kZXggMDZjMDIwNC4uOWExYjU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwpAQCAtMSw0ICsxLDQgQEAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi40IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0aXJsaW5nL0lUTCBVU0ItRFVYIC0tIEJlcm5kLlBvcnJAZjJzLmNvbSIKIC8qCkBAIC04MSw2ICs4MSw4IEBACiAgKiAyLjE6ICBjaGFuZ2VkIFBXTSBBUEkKICAqIDIuMjogIGFkZGVkIGZpcm13YXJlIGtlcm5lbCByZXF1ZXN0IHRvIGZpeCBhbiB1ZGV2IHByb2JsZW0KICAqIDIuMzogIGNvcnJlY3RlZCBhIGJ1ZyBpbiBidWxrIHRpbWVvdXRzIHdoaWNoIHdlcmUgZmFyIHRvbyBzaG9ydAorICogMi40OiAgZml4ZWQgYSBidWcgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8gaGFuZyB3aGVuIGl0IHJhbiBvdXQgb2YgZGF0YS4KKyAqICAgICAgIFRoYW5rcyB0byBKYW4tTWF0dGhpYXMgQnJhdW4gYW5kIElhbiB0byBzcG90IHRoZSBidWcgYW5kIGZpeCBpdC4KICAqCiAgKi8KIApAQCAtNTMyLDYgKzUzNCw3IEBACiAJCX0KIAl9CiAJLyogdGVsbCBjb21lZGkgdGhhdCBkYXRhIGlzIHRoZXJlICovCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOwogCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eHN1Yi0+Y29tZWRpZGV2LCBzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWR1cHMxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWR1cHMxMS5jCmluZGV4IGY3OGI4OTEuLjg5YzhmZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMKQEAgLTk0LDM2ICs5NCwyMCBAQAogCiBzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGN4MjU4MjFfZmggKmZoOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCi0JbG9ja19rZXJuZWwoKTsKLQlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDI1ODIxX2Rldmxpc3QpIHsKLQkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjU4MjFfZGV2LCBkZXZsaXN0KTsKLQotCQlpZiAoaC0+dmlkZW9fZGV2W1NSQU1fQ0gxMV0KLQkJICAgICYmIGgtPnZpZGVvX2RldltTUkFNX0NIMTFdLT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ID0gaDsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCX0KLQl9Ci0KLQlpZiAoTlVMTCA9PSBkZXYpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisJcHJpbnRrKCJvcGVuIGRldj0lcyB0eXBlPSVzXG4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLAorCQl2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwlpZiAoTlVMTCA9PSBmaCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCisJbG9ja19rZXJuZWwoKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgPSBkZXY7CkBAIC00MjcsNyArNDExLDYgQEAKIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb190ZW1wbGF0ZTExID0gewogCS5uYW1lID0gImN4MjU4MjEtYXVkaW91cHN0cmVhbSIsCiAJLmZvcHMgPSAmdmlkZW9fZm9wcywKLQkubWlub3IgPSAtMSwKIAkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKIAkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCiAJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYwppbmRleCA4ODM0YmM4Li5jN2MxNGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCkBAIC0xODQsMTEgKzE4NCwxMSBAQAogCWlmIChOVUxMID09IHZmZCkKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKLQl2ZmQtPm1pbm9yID0gLTE7CiAJdmZkLT52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OwogCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAlcyAoJXMpIiwgZGV2LT5uYW1lLCB0eXBlLAogCQkgY3gyNTgyMV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBkZXYpOwogCXJldHVybiB2ZmQ7CiB9CiAKQEAgLTQyNCw3ICs0MjQsNyBAQAogdm9pZCBjeDI1ODIxX3ZpZGVvaW9jdGxfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldikKIHsKIAlpZiAoZGV2LT5pb2N0bF9kZXYpIHsKLQkJaWYgKGRldi0+aW9jdGxfZGV2LT5taW5vciAhPSAtMSkKKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2LT5pb2N0bF9kZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5pb2N0bF9kZXYpOwogCQllbHNlCiAJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPmlvY3RsX2Rldik7CkBAIC00MzgsNyArNDM4LDcgQEAKIAljeF9jbGVhcihQQ0lfSU5UX01TSywgMSk7CiAKIAlpZiAoZGV2LT52aWRlb19kZXZbY2hhbl9udW1dKSB7Ci0JCWlmICgtMSAhPSBkZXYtPnZpZGVvX2RldltjaGFuX251bV0tPm1pbm9yKQorCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZChkZXYtPnZpZGVvX2RldltjaGFuX251bV0pKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52aWRlb19kZXZbY2hhbl9udW1dKTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52aWRlb19kZXZbY2hhbl9udW1dKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8wLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMC5jCmluZGV4IDk1MGZhYzEuLmFkN2E2OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzAuYwpAQCAtOTQsMzcgKzk0LDIxIEBACiAKIHN0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJdTMyIHBpeF9mb3JtYXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwotCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgewotCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOwotCi0JCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDAwXQotCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwMF0tPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgPSBoOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJfQotCX0KLQotCWlmIChOVUxMID09IGRldikgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKwlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCisJCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCWlmIChOVUxMID09IGZoKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKKwlsb2NrX2tlcm5lbCgpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiA9IGRldjsKQEAgLTQ0NCw3ICs0MjgsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMCA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8xLmMKaW5kZXggYTRkZGRjNjguLmUzZjNjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8xLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzEuYwpAQCAtOTQsMzcgKzk0LDIxIEBACiAKIHN0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJdTMyIHBpeF9mb3JtYXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwotCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgewotCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOwotCi0JCWlmIChoLT52aWRlb19kZXZbU1JBTV9DSDAxXQotCQkgICAgJiYgaC0+dmlkZW9fZGV2W1NSQU1fQ0gwMV0tPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlkZXYgPSBoOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJfQotCX0KLQotCWlmIChOVUxMID09IGRldikgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXByaW50aygib3BlbiBtaW5vcj0lZCB0eXBlPSVzXG4iLCBtaW5vciwgdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKKwlwcmludGsoIm9wZW4gZGV2PSVzIHR5cGU9JXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodmRldiksCisJCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCWlmIChOVUxMID09IGZoKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKKwlsb2NrX2tlcm5lbCgpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiA9IGRldjsKQEAgLTQ0NCw3ICs0MjgsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMSA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8yLmMKaW5kZXggOGUwNGUyNS4uMzZmYjg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMi5jCkBAIC05NCwzNyArOTQsMjIgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAl1MzIgcGl4X2Zvcm1hdDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDJdCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDAyXS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTQ0NSw3ICs0MzAsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMiA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8zLmMKaW5kZXggODgwMWE4ZS4uMWUwZjEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvMy5jCkBAIC05NCwzNyArOTQsMjIgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAl1MzIgcGl4X2Zvcm1hdDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDNdCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDAzXS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTQ0NCw3ICs0MjksNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlMyA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW80LmMKaW5kZXggYWIwZDc0Ny4uMGNiZTdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNC5jCkBAIC05NCwzNyArOTQsMjIgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAl1MzIgcGl4X2Zvcm1hdDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDRdCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA0XS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTQ0Myw3ICs0MjgsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNCA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW81LmMKaW5kZXggN2VmMGI5Ny4uNWRjMDhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNS5jCkBAIC05NCwzNyArOTQsMjIgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAl1MzIgcGl4X2Zvcm1hdDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDVdCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA1XS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTQ0Myw3ICs0MjgsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNSA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW82LmMKaW5kZXggM2M0MWI0OS4uMjkzOGFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNi5jCkBAIC05NCwzNyArOTQsMjIgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAl1MzIgcGl4X2Zvcm1hdDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDZdCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA2XS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTQ0Myw3ICs0MjgsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNiA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW83LmMKaW5kZXggNjI1YzliNy4uNDU4ZTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlbzcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvNy5jCkBAIC05MywzNyArOTMsMjIgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAl1MzIgcGl4X2Zvcm1hdDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDddCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA3XS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTQ0Miw3ICs0MjcsNiBAQAogc3RydWN0IHZpZGVvX2RldmljZSBjeDI1ODIxX3ZpZGVvX3RlbXBsYXRlNyA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXZpZGVvIiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlb2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYwppbmRleCAyYTMxMmNlLi4xZGE1MmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvaW9jdGwuYwpAQCAtOTQsMzYgKzk0LDIxIEBACiAKIHN0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgY3gyNTgyMV9maCAqZmg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJdTMyIHBpeF9mb3JtYXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwotCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjU4MjFfZGV2bGlzdCkgewotCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyNTgyMV9kZXYsIGRldmxpc3QpOwotCi0JCWlmIChoLT5pb2N0bF9kZXYgJiYgaC0+aW9jdGxfZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ID0gaDsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCX0KLQl9Ci0KLQlpZiAoTlVMTCA9PSBkZXYpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwcmludGsoIm9wZW4gbWlub3I9JWQgdHlwZT0lc1xuIiwgbWlub3IsIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CisJcHJpbnRrKCJvcGVuIGRldj0lcyB0eXBlPSVzXG4iLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLAorCQl2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwlpZiAoTlVMTCA9PSBmaCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCisJbG9ja19rZXJuZWwoKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgPSBkZXY7CkBAIC00ODksNyArNDc0LDYgQEAKIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyNTgyMV92aWRlb2lvY3RsX3RlbXBsYXRlID0gewogCS5uYW1lID0gImN4MjU4MjEtdmlkZW9pb2N0bCIsCiAJLmZvcHMgPSAmdmlkZW9fZm9wcywKLQkubWlub3IgPSAtMSwKIAkuaW9jdGxfb3BzID0gJnZpZGVvX2lvY3RsX29wcywKIAkudHZub3JtcyA9IENYMjU4MjFfTk9STVMsCiAJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzMTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzMTAuYwppbmRleCA3N2I2M2IwLi5iNzZkOWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczEwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWR1cHMxMC5jCkBAIC05NCwzNiArOTQsMjAgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMTBdCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDEwXS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwpAQCAtNDI4LDcgKzQxMiw2IEBACiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGUxMCA9IHsKIAkubmFtZSA9ICJjeDI1ODIxLXVwc3RyZWFtMTAiLAogCS5mb3BzID0gJnZpZGVvX2ZvcHMsCi0JLm1pbm9yID0gLTEsCiAJLmlvY3RsX29wcyA9ICZ2aWRlb19pb2N0bF9vcHMsCiAJLnR2bm9ybXMgPSBDWDI1ODIxX05PUk1TLAogCS5jdXJyZW50X25vcm0gPSBWNEwyX1NURF9OVFNDX00sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZHVwczkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCmluZGV4IDc1YzhjMWUuLjE1ODBkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkdXBzOS5jCkBAIC05NCwzNiArOTQsMjAgQEAKIAogc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0LCAmY3gyNTgyMV9kZXZsaXN0KSB7Ci0JCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDI1ODIxX2RldiwgZGV2bGlzdCk7Ci0KLQkJaWYgKGgtPnZpZGVvX2RldltTUkFNX0NIMDldCi0JCSAgICAmJiBoLT52aWRlb19kZXZbU1JBTV9DSDA5XS0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWRldiA9IGg7Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JfQotCi0JaWYgKE5VTEwgPT0gZGV2KSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXNcbiIsIG1pbm9yLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOworCXByaW50aygib3BlbiBkZXY9JXMgdHlwZT0lc1xuIiwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwKKwkJdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKworCWxvY2tfa2VybmVsKCk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ID0gZGV2OwpAQCAtNDI2LDcgKzQxMCw2IEBACiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4MjU4MjFfdmlkZW9fdGVtcGxhdGU5ID0gewogCS5uYW1lID0gImN4MjU4MjEtdXBzdHJlYW05IiwKIAkuZm9wcyA9ICZ2aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAogCS5pb2N0bF9vcHMgPSAmdmlkZW9faW9jdGxfb3BzLAogCS50dm5vcm1zID0gQ1gyNTgyMV9OT1JNUywKIAkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDhkMzQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLWNvbmZpZyBEU1QKLQl0cmlzdGF0ZSAiRGlzdHJpYnV0ZWQgc3RvcmFnZSIKLQlkZXBlbmRzIG9uIE5FVCAmJiBDUllQVE8gJiYgU1lTRlMgJiYgQkxLX0RFVgotCXNlbGVjdCBDT05ORUNUT1IKLQktLS1oZWxwLS0tCi0JRFNUIGlzIGEgbmV0d29yayBibG9jayBkZXZpY2Ugc3RvcmFnZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb3JnYW5pemUKLQlleHBvcnRlZCBzdG9yYWdlIG9uIHRoZSByZW1vdGUgbm9kZXMgaW50byB0aGUgbG9jYWwgYmxvY2sgZGV2aWNlLgotCi0JRFNUIHdvcmtzIG9uIHRvcCBvZiBhbnkgbmV0d29yayBtZWRpYSBhbmQgcHJvdG9jb2w7IGl0IGlzIGp1c3QgYSBtYXR0ZXIKLQlvZiBjb25maWd1cmF0aW9uIHV0aWxpdHkgdG8gdW5kZXJzdGFuZCB0aGUgY29ycmVjdCBhZGRyZXNzZXMuIFRoZSBtb3N0Ci0JY29tbW9uIGV4YW1wbGUgaXMgVENQIG92ZXIgSVAsIHdoaWNoIGFsbG93cyB0byBwYXNzIHRocm91Z2ggZmlyZXdhbGxzIGFuZAotCWNyZWF0ZSByZW1vdGUgYmFja3VwIHN0b3JhZ2UgaW4gYSBkaWZmZXJlbnQgZGF0YWNlbnRlci4gRFNUIHJlcXVpcmVzCi0Jc2luZ2xlIHBvcnQgdG8gYmUgZW5hYmxlZCBvbiB0aGUgZXhwb3J0aW5nIG5vZGUgYW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zCi0Jb24gdGhlIGxvY2FsIG5vZGUuCi0KLQlEU1Qgd29ya3Mgd2l0aCBpbi1rZXJuZWwgY2xpZW50IGFuZCBzZXJ2ZXIsIHdoaWNoIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5Ci0JZWxpbWluYXRpbmcgdW5uZWRlZCBkYXRhIGNvcGllcyBhbmQgYnkgbm90IGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbgotCW9mIHRoZSBleHRlcm5hbCBJTyBjb21wb25lbnRzLiBJdCByZXF1aXJlcyB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiB1dGlsaXR5Ci0JdGhvdWdoLgotCi0JRFNUIHVzZXMgdHJhbnNhY3Rpb24gbW9kZWwsIHdoZW4gZWFjaCBzdG9yZSBoYXMgdG8gYmUgZXhwbGljaXRseSBhY2tlZAotCWZyb20gdGhlIHJlbW90ZSBub2RlIHRvIGJlIGNvbnNpZGVyZWQgYXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uIFRoZXJlCi0JbWF5IGJlIGxvdHMgb2YgaW4tZmxpZ2h0IHRyYW5zYWN0aW9ucy4gV2hlbiByZW1vdGUgaG9zdCBkb2VzIG5vdCBhY2sKLQl0aGUgdHJhbnNhY3Rpb24gaXQgd2lsbCBiZSByZXNlbnQgcHJlZGVmaW5lZCBudW1iZXIgb2YgdGltZXMgd2l0aCBzcGVjaWZpZWQKLQl0aW1lb3V0cyBiZXR3ZWVuIHRoZW0uIEFsbCB0aG9zZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmFibGUuIFRyYW5zYWN0aW9ucwotCWFyZSBtYXJrZWQgYXMgZmFpbGVkIGFmdGVyIGFsbCByZXNlbmRzIGNvbXBsZXRlIHVuc3VjY2Vzc2Z1bGx5OyBoYXZpbmcKLQlsb25nIGVub3VnaCByZXNlbmQgdGltZW91dCBhbmQvb3IgbGFyZ2UgbnVtYmVyIG9mIHJlc2VuZHMgYWxsb3dzIG5vdCB0bwotCXJldHVybiBlcnJvciB0byB0aGUgaGlnaGVyIChGUyB1c3VhbGx5KSBsYXllciBpbiBjYXNlIG9mIHNob3J0IG5ldHdvcmsKLQlwcm9ibGVtcyBvciByZW1vdGUgbm9kZSBvdXRhZ2VzLiBJbiBjYXNlIG9mIG5ldHdvcmsgUkFJRCBzZXR1cCB0aGlzIG1lYW5zCi0JdGhhdCBzdG9yYWdlIHdpbGwgbm90IGRlZ3JhZGUgdW50aWwgdHJhbnNhY3Rpb25zIGFyZSBtYXJrZWQgYXMgZmFpbGVkLCBhbmQKLQl0aHVzIHdpbGwgbm90IGZvcmNlIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gYW5kIGRhdGEgcmVidWlsZC4gSW4gY2FzZSBvZgotCWNvbm5lY3Rpb24gZmFpbHVyZSBEU1Qgd2lsbCB0cnkgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgbm9kZSBhdXRvbWF0aWNhbGx5LgotCURTVCBzZW5kcyBwaW5nIGNvbW1hbmRzIGF0IGlkbGUgdGltZSB0byBkZXRlY3QgaWYgcmVtb3RlIG5vZGUgaXMgYWxpdmUuCi0KLQlCZWNhdXNlIG9mIHRyYW5zYWN0aW9uYWwgbW9kZWwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHplcm8tY29weSBzZW5kaW5nCi0Jd2l0aG91dCB3b3JyeSBvZiBkYXRhIGNvcnJ1cHRpb24gKHdoaWNoIGluIHR1cm4gY291bGQgYmUgZGV0ZWN0ZWQgYnkgdGhlCi0Jc3Ryb25nIGNoZWNrc3VtcyB0aG91Z2gpLgotCi0JRFNUIG1heSBmdWxseSBlbmNyeXB0IHRoZSBkYXRhIGNoYW5uZWwgaW4gY2FzZSBvZiB1bnRydXN0ZWQgY2hhbm5lbCBhbmQgaW1wbGVtZW50Ci0Jc3Ryb25nIGNoZWNrc3VtIG9mIHRoZSB0cmFuc2ZlcnJlZCBkYXRhLiBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgYWxnb3JpdGhtcwotCWFuZCBjcnlwdG8ga2V5czsgdGhleSBzaG91bGQgbWF0Y2ggb24gYm90aCBzaWRlcyBvZiB0aGUgbmV0d29yayBjaGFubmVsLgotCUNyeXB0byBwcm9jZXNzaW5nIGRvZXMgbm90IGludHJvZHVjZSBub3RpY2VibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIHNpbmNlIERTVAotCXVzZXMgY29uZmlndXJhYmxlIHBvb2wgb2YgdGhyZWFkcyB0byBwZXJmb3JtIGNyeXB0byBwcm9jZXNzaW5nLgotCi0JRFNUIHV0aWxpemVzIG1lbW9yeSBwb29sIG1vZGVsIG9mIGFsbCBpdHMgdHJhbnNhY3Rpb24gYWxsb2NhdGlvbnMgKGl0IGlzIHRoZQotCW9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIG9uIHRoZSBjbGllbnQpIGFuZCBzZXJ2ZXIgYWxsb2NhdGlvbnMgKGJpbyBwb29scywKLQl3aGlsZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIHNsYWIpLgotCi0JQXQgc3RhcnR1cCBEU1QgcGVyZm9ybXMgYSBzaW1wbGUgbmVnb3RpYXRpb24gd2l0aCB0aGUgZXhwb3J0IG5vZGUgdG8gZGV0ZXJtaW5lCi0JYWNjZXNzIHBlcm1pc3Npb25zIGFuZCBzaXplIG9mIHRoZSBleHBvcnRlZCBzdG9yYWdlLiBJdCBjYW4gYmUgZXh0ZW5kZWQgaWYKLQluZXcgcGFyYW1ldGVycyBzaG91bGQgYmUgYXV0b25lZ290aWF0ZWQuCi0KLQlEU1QgY2FycmllcyBibG9jayBJTyBmbGFncyBpbiB0aGUgcHJvdG9jb2wsIHdoaWNoIGFsbG93cyB0byB0cmFuc3BhcmVudGx5IGltcGxlbWVudAotCWJhcnJpZXJzIGFuZCBzeW5jL2ZsdXNoIG9wZXJhdGlvbnMuIFRob3NlIGZsYWdzIGFyZSB1c2VkIGluIHRoZSBleHBvcnQgbm9kZSB3aGVyZQotCUlPIGFnYWluc3QgdGhlIGxvY2FsIHN0b3JhZ2UgaXMgcGVyZm9ybWVkLCB3aGljaCBtZWFucyB0aGF0IHN5bmMgd3JpdGUgd2lsbCBiZSBzeW5jCi0Jb24gdGhlIHJlbW90ZSBub2RlIHRvbywgd2hpY2ggaW4gdHVybiBpbXByb3ZlcyBkYXRhIGludGVncml0eSBhbmQgaW1wcm92ZWQgcmVzaXN0YW5jZQotCXRvIGVycm9ycyBhbmQgZGF0YSBjb3JydXB0aW9uIGR1cmluZyBwb3dlciBvdXRhZ2VzIG9yIHN0b3JhZ2UgZGFtYWdlcy4KLQotCUhvbWVwYWdlOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L3Byb2plY3RzL2RzdAotCVVzZXJzcGFjZSBjb25maWd1cmF0aW9uIHV0aWxpdHkgYW5kIHRoZSBsYXRlc3QgcmVsZWFzZXM6IGh0dHA6Ly93d3cuaW9yZW1hcC5uZXQvYXJjaGl2ZS9kc3QvCi0KLWNvbmZpZyBEU1RfREVCVUcKLQlib29sICJEU1QgZGVidWciCi0JZGVwZW5kcyBvbiBEU1QKLQktLS1oZWxwLS0tCi0JVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgSEVBVlkgZGVidWdnaW5nIG9mIHRoZSBEU1QuCi0JVHVybiBpdCBvbiBPTkxZIGlmIHlvdSBoYXZlIHRvIGRlYnVnIHNvbWUgcmVhbGx5IG9ic2N1cmUgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYThiMGNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19EU1QpICs9IG5zdC5vCi0KLW5zdC15IDo9IGRjb3JlLm8gc3RhdGUubyBleHBvcnQubyB0aHJlYWRfcG9vbC5vIGNyeXB0by5vIHRyYW5zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTEyOTVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzMgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKgotICogVHJpY2t5IGJhc3RhcmQsIGJ1dCBJViBjYW4gYmUgbW9yZSBjb21wbGV4IHdpdGggdGltZS4uLgotICovCi1zdGF0aWMgaW5saW5lIHU2NCBkc3RfZ2VuX2l2KHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JcmV0dXJuIHQtPmdlbjsKLX0KLQotLyoKLSAqIENyeXB0byBtYWNoaW5lcnk6IGhhc2gvY2lwaGVyIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBjcnlwdG8gY29udHJvbHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2hhc2ggKmRzdF9pbml0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsIHU4ICprZXkpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7Ci0KLQloYXNoID0gY3J5cHRvX2FsbG9jX2hhc2goY3RsLT5oYXNoX2FsZ28sIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmIChJU19FUlIoaGFzaCkpIHsKLQkJZXJyID0gUFRSX0VSUihoYXNoKTsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBoYXNoICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JY3RsLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoaGFzaCk7Ci0KLQlpZiAoIWN0bC0+aGFzaF9rZXlzaXplKQotCQlyZXR1cm4gaGFzaDsKLQotCWVyciA9IGNyeXB0b19oYXNoX3NldGtleShoYXNoLCBrZXksIGN0bC0+aGFzaF9rZXlzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgY3RsLT5oYXNoX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCXJldHVybiBoYXNoOwotCi1lcnJfb3V0X2ZyZWU6Ci0JY3J5cHRvX2ZyZWVfaGFzaChoYXNoKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpkc3RfaW5pdF9jaXBoZXIoc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsCi0JCXU4ICprZXkpCi17Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXI7Ci0KLQlpZiAoIWN0bC0+Y2lwaGVyX2tleXNpemUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JY2lwaGVyID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoY3RsLT5jaXBoZXJfYWxnbywgMCwgMCk7Ci0JaWYgKElTX0VSUihjaXBoZXIpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2lwaGVyKTsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWNyeXB0b19hYmxrY2lwaGVyX2NsZWFyX2ZsYWdzKGNpcGhlciwgfjApOwotCi0JZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNpcGhlciwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmNpcGhlcl9hbGdvLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQl9Ci0KLQlyZXR1cm4gY2lwaGVyOwotCi1lcnJfb3V0X2ZyZWU6Ci0JY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjaXBoZXIpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLS8qCi0gKiBDcnlwdG8gZW5naW5lIGhhcyBhIHBvb2wgb2YgcGFnZXMgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcKLSAqIGl0IG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgcG9vbCBpcyBmcmVlZC9hbGxvY2F0ZWQgaGVyZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19wYWdlc19mcmVlKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBlLT5wYWdlX251bTsgKytpKQotCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7Ci0Ja2ZyZWUoZS0+cGFnZXMpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2Moc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBpbnQgbnVtKQotewotCWludCBpOwotCi0JZS0+cGFnZXMgPSBrbWFsbG9jKG51bSAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKiksIEdGUF9LRVJORUwpOwotCWlmICghZS0+cGFnZXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0JCWUtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFlLT5wYWdlc1tpXSkKLQkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwotCX0KLQotCWUtPnBhZ2VfbnVtID0gbnVtOwotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfcGFnZXM6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7Ci0KLQlrZnJlZShlLT5wYWdlcyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGUuCi0gKiBTZXR1cCBjaXBoZXIvaGFzaCwga2V5cywgcG9vbCBvZiB0aHJlYWRzIGFuZCBwcml2YXRlIGRhdGEuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsID0gJm4tPmNyeXB0bzsKLQotCWVyciA9IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2MoZSwgbi0+bWF4X3BhZ2VzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWUtPnNpemUgPSBQQUdFX1NJWkU7Ci0JZS0+ZGF0YSA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5kYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwotCX0KLQotCWlmIChjdGwtPmhhc2hfYWxnb1swXSkgewotCQllLT5oYXNoID0gZHN0X2luaXRfaGFzaChjdGwsIG4tPmhhc2hfa2V5KTsKLQkJaWYgKElTX0VSUihlLT5oYXNoKSkgewotCQkJZXJyID0gUFRSX0VSUihlLT5oYXNoKTsKLQkJCWUtPmhhc2ggPSBOVUxMOwotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JCX0KLQl9Ci0KLQlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSkgewotCQllLT5jaXBoZXIgPSBkc3RfaW5pdF9jaXBoZXIoY3RsLCBuLT5jaXBoZXJfa2V5KTsKLQkJaWYgKElTX0VSUihlLT5jaXBoZXIpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGUtPmNpcGhlcik7Ci0JCQllLT5jaXBoZXIgPSBOVUxMOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfaGFzaDoKLQljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGUtPmRhdGEpOwotZXJyX291dF9mcmVlX3BhZ2VzOgotCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKLXsKLQlpZiAoZS0+aGFzaCkKLQkJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKLQlpZiAoZS0+Y2lwaGVyKQotCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGUtPmNpcGhlcik7Ci0JZHN0X2NyeXB0b19wYWdlc19mcmVlKGUpOwotCWtmcmVlKGUtPmRhdGEpOwotfQotCi0vKgotICogV2FpdGluZyBmb3IgY2lwaGVyIHByb2Nlc3NpbmcgdG8gYmUgY29tcGxldGVkLgotICovCi1zdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uIHsKLQlzdHJ1Y3QgY29tcGxldGlvbgkJY29tcGxldGU7Ci0JaW50CQkJCWVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgZHN0X2NyeXB0b19jb21wbGV0ZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgaW50IGVycikKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uICpjID0gcmVxLT5kYXRhOwotCi0JaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpCi0JCXJldHVybjsKLQotCWRwcmludGsoIiVzOiByZXE6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHJlcSwgZXJyKTsKLQljLT5lcnJvciA9IGVycjsKLQljb21wbGV0ZSgmYy0+Y29tcGxldGUpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcHJvY2VzcyhzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYywKLQkJdm9pZCAqaXYsIGludCBlbmMsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uIGM7Ci0JaW50IGVycjsKLQotCWluaXRfY29tcGxldGlvbigmYy5jb21wbGV0ZSk7Ci0JYy5lcnJvciA9IC1FSU5QUk9HUkVTUzsKLQotCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKLQkJCQkJZHN0X2NyeXB0b19jb21wbGV0ZSwgJmMpOwotCi0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnX3NyYywgc2dfZHN0LCBzZ19zcmMtPmxlbmd0aCwgaXYpOwotCi0JaWYgKGVuYykKLQkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChyZXEpOwotCWVsc2UKLQkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChyZXEpOwotCi0Jc3dpdGNoIChlcnIpIHsKLQljYXNlIC1FSU5QUk9HUkVTUzoKLQljYXNlIC1FQlVTWToKLQkJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmMuY29tcGxldGUsCi0JCQkJdGltZW91dCk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJZWxzZQotCQkJZXJyID0gYy5lcnJvcjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIERTVCB1c2VzIGdlbmVyaWMgaXRlcmF0aW9uIGFwcHJvYWNoIGZvciBkYXRhIGNyeXB0byBwcm9jZXNzaW5nLgotICogU2luZ2xlIGJsb2NrIElPIHJlcXVlc3QgaXMgc3dpdGNoZWQgaW50byBhcnJheSBvZiBzY2F0dGVybGlzdHMsCi0gKiB3aGljaCBhcmUgc3VibWl0dGVkIHRvIHRoZSBjcnlwdG8gcHJvY2Vzc2luZyBpdGVyYXRvci4KLSAqCi0gKiBJbnB1dCBhbmQgb3V0cHV0IGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIGFyZSBkaWZmZXJlbnQsIHNpbmNlCi0gKiBpbiBvdXRwdXQgY2FzZSB3ZSBjYW4gbm90IGVuY3J5cHQgZGF0YSBpbi1wbGFjZSBhbmQgbmVlZCBhCi0gKiB0ZW1wb3Jhcnkgc3RvcmFnZSwgd2hpY2ggaXMgdGhlbiBiZWluZyBzZW50IHRvIHRoZSByZW1vdGUgcGVlci4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9vdXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCWludCAoKml0ZXJhdG9yKSAoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBlcnIsIGk7Ci0KLQlzZ19pbml0X3RhYmxlKGUtPnNyYywgYmlvLT5iaV92Y250KTsKLQlzZ19pbml0X3RhYmxlKGUtPmRzdCwgYmlvLT5iaV92Y250KTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJc2dfc2V0X3BhZ2UoJmUtPnNyY1tpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCQlzZ19zZXRfcGFnZSgmZS0+ZHN0W2ldLCBlLT5wYWdlc1tpXSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0KLQkJZXJyID0gaXRlcmF0b3IoZSwgJmUtPmRzdFtpXSwgJmUtPnNyY1tpXSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF90cmFuc19pdGVyX2luKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlpbnQgKCppdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgZXJyLCBpOwotCi0Jc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7Ci0Jc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHRfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCi17Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKLQl1OCBpdlszMl07Ci0KLQltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOwotCi0JbWVtY3B5KGl2LCAmZS0+aXYsIHNpemVvZihlLT5pdikpOwotCi0JcmV0dXJuIGRzdF9jcnlwdG9fcHJvY2VzcyhyZXEsIHNnX2RzdCwgc2dfc3JjLCBpdiwgZS0+ZW5jLCBlLT50aW1lb3V0KTsKLX0KLQotc3RhdGljIGludCBkc3RfY3J5cHQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKLQotCW1lbXNldChyZXEsIDAsIHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSk7Ci0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBlLT5jaXBoZXIpOwotCi0JaWYgKGUtPmVuYykKLQkJcmV0dXJuIGRzdF90cmFuc19pdGVyX291dChiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7Ci0JZWxzZQotCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfaW4oYmlvLCBlLCBkc3RfY3J5cHRfaXRlcmF0b3IpOwotfQotCi1zdGF0aWMgaW50IGRzdF9oYXNoX2l0ZXJhdG9yKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQotewotCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoZS0+ZGF0YSwgc2dfc3JjLCBzZ19zcmMtPmxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRzdCkKLXsKLQlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjID0gZS0+ZGF0YTsKLQlpbnQgZXJyOwotCi0JZGVzYy0+dGZtID0gZS0+aGFzaDsKLQlkZXNjLT5mbGFncyA9IDA7Ci0KLQllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9oYXNoX2l0ZXJhdG9yKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgZHN0KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplL2NsZWFudXAgYSBjcnlwdG8gdGhyZWFkLiBUaGUgb25seSB0aGluZyBpdCBzaG91bGQKLSAqIGRvIGlzIHRvIGFsbG9jYXRlIGEgcG9vbCBvZiBwYWdlcyBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KLSAqIEFuZCB0byBzZXR1cCBjaXBoZXIgYW5kL29yIGhhc2guCi0gKi8KLXN0YXRpYyB2b2lkICpkc3RfY3J5cHRvX3RocmVhZF9pbml0KHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gZGF0YTsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmU7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQllID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQllLT5zcmMgPSBrY2FsbG9jKDIgKiBuLT5tYXhfcGFnZXMsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5zcmMpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZS0+ZHN0ID0gZS0+c3JjICsgbi0+bWF4X3BhZ2VzOwotCi0JZXJyID0gZHN0X2NyeXB0b19lbmdpbmVfaW5pdChlLCBuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7Ci0KLQlyZXR1cm4gZTsKLQotZXJyX291dF9mcmVlX2FsbDoKLQlrZnJlZShlLT5zcmMpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGUpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9jcnlwdG9fdGhyZWFkX2NsZWFudXAodm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBwcml2YXRlOwotCi0JZHN0X2NyeXB0b19lbmdpbmVfZXhpdChlKTsKLQlrZnJlZShlLT5zcmMpOwotCWtmcmVlKGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjcnlwdG8gZW5naW5lIGZvciBnaXZlbiBub2RlOiBzdG9yZSBrZXlzLCBjcmVhdGUgcG9vbAotICogb2YgdGhyZWFkcywgaW5pdGlhbGl6ZSBlYWNoIG9uZS4KLSAqCi0gKiBFYWNoIHRocmVhZCBoYXMgdW5pcXVlIElELCBidXQgMCBhbmQgMSBhcmUgcmVzZXJ2ZWQgZm9yIHJlY2VpdmluZyBhbmQKLSAqIGFjY2VwdGluZyB0aHJlYWRzIChpZiBleHBvcnQgbm9kZSksIHNvIElEcyBjb3VsZCBzdGFydCBmcm9tIDIsIGJ1dCBzdGFydGluZwotICogdGhlbSBmcm9tIDEwIGFsbG93cyBlYXNpbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGhyZWFkIGlzIGZvci4KLSAqLwotaW50IGRzdF9ub2RlX2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwpCi17Ci0Jdm9pZCAqa2V5ID0gKGN0bCArIDEpOwotCWludCBlcnIgPSAtRU5PTUVNLCBpOwotCWNoYXIgbmFtZVszMl07Ci0KLQlpZiAoY3RsLT5oYXNoX2tleXNpemUpIHsKLQkJbi0+aGFzaF9rZXkgPSBrbWFsbG9jKGN0bC0+aGFzaF9rZXlzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuLT5oYXNoX2tleSkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCQltZW1jcHkobi0+aGFzaF9rZXksIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOwotCX0KLQotCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKSB7Ci0JCW4tPmNpcGhlcl9rZXkgPSBrbWFsbG9jKGN0bC0+Y2lwaGVyX2tleXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW4tPmNpcGhlcl9rZXkpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOwotCQltZW1jcHkobi0+Y2lwaGVyX2tleSwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKLQl9Ci0JbWVtY3B5KCZuLT5jcnlwdG8sIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkpOwotCi0JZm9yIChpID0gMDsgaSA8IGN0bC0+dGhyZWFkX251bTsgKytpKSB7Ci0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLWNyeXB0by0lZCIsIG4tPm5hbWUsIGkpOwotCQkvKiBVbmlxdWUgaWRzLi4uICovCi0JCWVyciA9IHRocmVhZF9wb29sX2FkZF93b3JrZXIobi0+cG9vbCwgbmFtZSwgaSArIDEwLAotCQkJZHN0X2NyeXB0b190aHJlYWRfaW5pdCwgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCwgbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZV90aHJlYWRzOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWVfdGhyZWFkczoKLQl3aGlsZSAoLS1pID49IDApCi0JCXRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQobi0+cG9vbCwgaSsxMCk7Ci0KLQlpZiAoY3RsLT5jaXBoZXJfa2V5c2l6ZSkKLQkJa2ZyZWUobi0+Y2lwaGVyX2tleSk7Ci0JY3RsLT5jaXBoZXJfa2V5c2l6ZSA9IDA7Ci1lcnJfb3V0X2ZyZWVfaGFzaDoKLQlpZiAoY3RsLT5oYXNoX2tleXNpemUpCi0JCWtmcmVlKG4tPmhhc2hfa2V5KTsKLQljdGwtPmhhc2hfa2V5c2l6ZSA9IDA7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3Rfbm9kZV9jcnlwdG9fZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwgPSAmbi0+Y3J5cHRvOwotCi0JaWYgKGN0bC0+Y2lwaGVyX2FsZ29bMF0gfHwgY3RsLT5oYXNoX2FsZ29bMF0pIHsKLQkJa2ZyZWUobi0+aGFzaF9rZXkpOwotCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKLQl9Ci19Ci0KLS8qCi0gKiBUaHJhZCBwb29sIHNldHVwIGNhbGxiYWNrLiBKdXN0IHN0b3JlcyBhIHRyYW5zYWN0aW9uIGluIHByaXZhdGUgZGF0YS4KLSAqLwotc3RhdGljIGludCBkc3RfdHJhbnNfY3J5cHRvX3NldHVwKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnRyYW5zKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0KLQllLT5wcml2YXRlID0gdHJhbnM7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBkc3RfZHVtcF9iaW8oc3RydWN0IGJpbyAqYmlvKQotewotCXU4ICpwOwotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgaTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJZHByaW50aygiJXM6ICVsbHUvJXU6IHNpemU6ICV1LCBvZmZzZXQ6ICV1LCBkYXRhOiAiLAotCQkJCV9fZnVuY19fLCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJCWJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCi0JCXAgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBidi0+YnZfbGVuOyArK2kpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAiLCBwW2ldKTsKLQkJa3VubWFwKGJ2LT5idl9wYWdlKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLSNlbmRpZgotCi0vKgotICogRW5jcnlwdC9oYXNoIGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3QgYmlvICpiaW8sIHU4ICpoYXNoKQotewotCWludCBlcnI7Ci0KLQlpZiAoZS0+Y2lwaGVyKSB7Ci0JCWVyciA9IGRzdF9jcnlwdChlLCBiaW8pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JaWYgKGUtPmhhc2gpIHsKLQkJZXJyID0gZHN0X2hhc2goZSwgYmlvLCBoYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0jaWZkZWYgQ09ORklHX0RTVF9ERUJVRwotCQl7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKLQotCQkJLyogZHN0X2R1bXBfYmlvKGJpbyk7ICovCi0KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoOiAiLAotCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJCWJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCQkJZm9yIChpID0gMDsgaSA8IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7ICsraSkKLQkJCQkJcHJpbnRrKCIlMDJ4ICIsIGhhc2hbaV0pOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiByZWNlaXZlZCBkYXRhIGlzIHZhbGlkLiBEZWNpcGhlciBpZiBpdCBpcy4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IGJpbyAqYmlvLCB1OCAqaGFzaCwgdTggKnJlY3ZfaGFzaCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKGUtPmhhc2gpIHsKLQkJaW50IG1pc21hdGNoOwotCi0JCWVyciA9IGRzdF9oYXNoKGUsIGJpbywgaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQltaXNtYXRjaCA9ICEhbWVtY21wKHJlY3ZfaGFzaCwgaGFzaCwKLQkJCQljcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpKTsKLSNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCi0JCS8qIGRzdF9kdW1wX2JpbyhiaW8pOyAqLwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoIG1pc21hdGNoOiAlZCIsCi0JCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJYmlvX2RhdGFfZGlyKGJpbyksIG1pc21hdGNoKTsKLQkJaWYgKG1pc21hdGNoKSB7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKLQotCQkJcHJpbnRrKCIsIHJlY3YvY2FsYzogIik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKQotCQkJCXByaW50aygiJTAyeC8lMDJ4ICIsIHJlY3ZfaGFzaFtpXSwgaGFzaFtpXSk7Ci0KLQkJfQotCQlwcmludGsoIlxuIik7Ci0jZW5kaWYKLQkJZXJyID0gLTE7Ci0JCWlmIChtaXNtYXRjaCkKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWlmIChlLT5jaXBoZXIpIHsKLQkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgcG9vbCBjYWxsYmFjayB0byBlbmNyeXB0IGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldG93b3JrLgotICovCi1zdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fYWN0aW9uKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0ID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0JaW50IGVycjsKLQotCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBjaXBoZXI6ICVwLCBoYXNoOiAlcC5cbiIsCi0JCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlLT5jaXBoZXIsIGUtPmhhc2gpOwotCi0JZS0+ZW5jID0gdC0+ZW5jOwotCWUtPml2ID0gZHN0X2dlbl9pdih0KTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHQtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChlLT5oYXNoKSB7Ci0JCQl0LT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOwotCQkJdC0+Y21kLnNpemUgKz0gdC0+Y21kLmNzaXplOwotCQl9Ci0KLQkJcmV0dXJuIGRzdF90cmFuc19zZW5kKHQpOwotCX0gZWxzZSB7Ci0JCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKLQotCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgdC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJZHN0X3RyYW5zX3JlbW92ZSh0KTsKLQkJZHN0X3RyYW5zX3B1dCh0KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCXQtPmVycm9yID0gZXJyOwotCWRzdF90cmFuc19wdXQodCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nIGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KLSAqLwotaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCWludCBlcnI7Ci0KLQllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAotCQlkc3RfdHJhbnNfY3J5cHRvX3NldHVwLCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbiwKLQkJdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlkc3RfdHJhbnNfcHV0KHQpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBDcnlwdG8gbWFjaGluZXJ5IGZvciB0aGUgZXhwb3J0IG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqYmlvKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0KLQllLT5wcml2YXRlID0gYmlvOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7Ci0Jc3RydWN0IGJpbyAqYmlvID0gc2NoZWR1bGVfZGF0YTsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOwotCWludCBlcnI7Ci0KLQlkcHJpbnRrKCIlczogZTogJXAsIGRhdGE6ICVwLCBiaW86ICVsbHUvJXUsIGRpcjogJWx1LlxuIiwKLQkJCV9fZnVuY19fLCBlLCBlLT5kYXRhLCAodTY0KWJpby0+Ymlfc2VjdG9yLAotCQkJYmlvLT5iaV9zaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7Ci0KLQllLT5lbmMgPSAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCk7Ci0JZS0+aXYgPSBwLT5jbWQuaWQ7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKLQkJdTggKmhhc2ggPSBlLT5kYXRhICsgZS0+c2l6ZS8yOwotCi0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19yZWNlaXZpbmcoZSwgYmlvLCBoYXNoLCBwLT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwotCX0gZWxzZSB7Ci0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19zZW5kaW5nKGUsIGJpbywgcC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGUtPmhhc2gpIHsKLQkJCXAtPmNtZC5jc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7Ci0JCQlwLT5jbWQuc2l6ZSArPSBwLT5jbWQuY3NpemU7Ci0JCX0KLQotCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JYmlvX3B1dChiaW8pOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBkc3RfZXhwb3J0X2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwKLQkJZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAsIGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbiwKLQkJYmlvLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDViZDBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMDQgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvamhhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotc3RhdGljIGludCBkc3RfbWFqb3I7Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgoZHN0X2hhc2hfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqZHN0X2hhc2h0YWJsZTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHN0X2hhc2h0YWJsZV9zaXplID0gMTI4OwotbW9kdWxlX3BhcmFtKGRzdF9oYXNodGFibGVfc2l6ZSwgdWludCwgMDY0NCk7Ci0KLXN0YXRpYyBjaGFyIGRzdF9uYW1lW10gPSAiRGVtZW50aWFudGluZyBnb2xkZmlzaCI7Ci0KLXN0YXRpYyBERUZJTkVfSURSKGRzdF9pbmRleF9pZHIpOwotc3RhdGljIHN0cnVjdCBjYl9pZCBjbl9kc3RfaWQgPSB7IENOX0RTVF9JRFgsIENOX0RTVF9WQUwgfTsKLQotLyoKLSAqIERTVCBzeXNmcyB0cmVlIGZvciBkZXZpY2UgY2FsbGVkICdzdG9yYWdlJzoKLSAqCi0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlLwotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS90eXBlIDogMTkyLjE2OC40LjgwOjEwMjUKLSAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2Uvc2l6ZSA6IDgwMAotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9uYW1lIDogc3RvcmFnZQotICovCi0KLXN0YXRpYyBpbnQgZHN0X2Rldl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgZHN0X2Rldl9idXNfdHlwZSA9IHsKLQkubmFtZSAJCT0gImRzdCIsCi0JLm1hdGNoIAkJPSAmZHN0X2Rldl9tYXRjaCwKLX07Ci0KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQotCWtmcmVlKGluZm8pOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSBkc3Rfbm9kZV9kZXYgPSB7Ci0JLmJ1cyAJCT0gJmRzdF9kZXZfYnVzX3R5cGUsCi0JLnJlbGVhc2UgCT0gJmRzdF9ub2RlX3JlbGVhc2UKLX07Ci0KLS8qCi0gKiBTZXR0aW5nIHNpemUgb2YgdGhlIG5vZGUgYWZ0ZXIgaXQgd2FzIGNoYW5nZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3NldF9zaXplKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCi0Jc2V0X2NhcGFjaXR5KG4tPmRpc2ssIG4tPnNpemUgPj4gOSk7Ci0KLQliZGV2ID0gYmRnZXRfZGlzayhuLT5kaXNrLCAwKTsKLQlpZiAoYmRldikgewotCQltdXRleF9sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7Ci0JCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgbi0+c2l6ZSk7Ci0JCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwotCQliZHB1dChiZGV2KTsKLQl9Ci19Ci0KLS8qCi0gKiBEaXN0cmlidXRlZCBzdG9yYWdlIHJlcXVlc3QgcHJvY2Vzc2luZyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBkc3RfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHEtPnF1ZXVlZGF0YTsKLQlpbnQgZXJyID0gLUVJTzsKLQotCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFibGtfcXVldWVfZGlzY2FyZChxKSkgewotCQkvKgotCQkgKiBUaGlzIGlzIGEgZGlydHleV25pY2UgaGFjaywgYnV0IGlmIHdlIGNvbXBsZXRlIHRoaXMKLQkJICogb3BlcmF0aW9uIHdpdGggLUVPUE5PVFNVUFAgbGlrZSBpbnRlbmRlZCwgWEZTCi0JCSAqIHdpbGwgc3R1Y2sgYW5kIGZyZWV6ZSB0aGUgbWFjaGluZS4gVGhpcyBtYXkgYmUKLQkJICogbm90IHBhcnRpY3VsYXJ5IFhGUyBwcm9ibGVtIHRob3VnaCwgYnV0IGl0IGlzIHRoZQotCQkgKiBvbmx5IEZTIHdoaWNoIHNlbmRzIGVtcHR5IGJhcnJpZXIgYXQgdW1vdW50IHRpbWUKLQkJICogSSB3b3JrZWQgd2l0aC4KLQkJICoKLQkJICogRW1wdHkgYmFycmllcnMgYXJlIG5vdCBhbGxvd2VkIGFueXdheSwgc2VlIDUxZmQ3N2JkOWY1MTIKLQkJICogZm9yIGV4YW1wbGUsIGFsdGhvdWdoIGxhdGVyIGl0IHdhcyBjaGFuZ2VkIHRvCi0JCSAqIGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpIG9ubHksIHdoaWNoIGRvZXMgbm90Ci0JCSAqIHdvcmsgaW4gdGhpcyBjYXNlLgotCQkgKi8KLQkJLyogZXJyID0gLUVPUE5PVFNVUFA7ICovCi0JCWVyciA9IDA7Ci0JCWdvdG8gZW5kX2lvOwotCX0KLQotCWJpb19nZXQoYmlvKTsKLQotCXJldHVybiBkc3RfcHJvY2Vzc19iaW8obiwgYmlvKTsKLQotZW5kX2lvOgotCWJpb19lbmRpbyhiaW8sIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIE9wZW4vY2xvc2UgY2FsbGJhY2tzIGZvciBhcHByb3ByaWF0ZSBibG9jayBkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2JkZXZfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JZHN0X25vZGVfZ2V0KG4pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF9iZGV2X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZHN0X2Jsa19vcHMgPSB7Ci0JLm9wZW4JCT0gZHN0X2JkZXZfb3BlbiwKLQkucmVsZWFzZQk9IGRzdF9iZGV2X3JlbGVhc2UsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotfTsKLQotLyoKLSAqIEJsb2NrIGxheWVyIGJpbmRpbmcgLSBkaXNrIGlzIGNyZWF0ZWQgd2hlbiBhcnJheSBpcyBmdWxseSBjb25maWd1cmVkCi0gKiBieSB1c2Vyc3BhY2UgcmVxdWVzdC4KLSAqLwotc3RhdGljIGludCBkc3Rfbm9kZV9jcmVhdGVfZGlzayhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JdTMyIGluZGV4ID0gMDsKLQotCW4tPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoTlVMTCwgTlVMTCk7Ci0JaWYgKCFuLT5xdWV1ZSkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQluLT5xdWV1ZS0+cXVldWVkYXRhID0gbjsKLQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG4tPnF1ZXVlLCBkc3RfcmVxdWVzdCk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKG4tPnF1ZXVlLCBuLT5tYXhfcGFnZXMpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMobi0+cXVldWUsIG4tPm1heF9wYWdlcyk7Ci0KLQllcnIgPSAtRU5PTUVNOwotCW4tPmRpc2sgPSBhbGxvY19kaXNrKDEpOwotCWlmICghbi0+ZGlzaykKLQkJZ290byBlcnJfb3V0X2ZyZWVfcXVldWU7Ci0KLQlpZiAoIShuLT5zdGF0ZS0+cGVybWlzc2lvbnMgJiBEU1RfUEVSTV9XUklURSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRFNUIG5vZGUgJXMgYXR0YWNoZWQgcmVhZC1vbmx5LlxuIiwgbi0+bmFtZSk7Ci0JCXNldF9kaXNrX3JvKG4tPmRpc2ssIDEpOwotCX0KLQotCWlmICghaWRyX3ByZV9nZXQoJmRzdF9pbmRleF9pZHIsIEdGUF9LRVJORUwpKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JZXJyID0gaWRyX2dldF9uZXcoJmRzdF9pbmRleF9pZHIsIE5VTEwsICZpbmRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0Jbi0+ZGlzay0+bWFqb3IgPSBkc3RfbWFqb3I7Ci0Jbi0+ZGlzay0+Zmlyc3RfbWlub3IgPSBpbmRleDsKLQluLT5kaXNrLT5mb3BzID0gJmRzdF9ibGtfb3BzOwotCW4tPmRpc2stPnF1ZXVlID0gbi0+cXVldWU7Ci0Jbi0+ZGlzay0+cHJpdmF0ZV9kYXRhID0gbjsKLQlzbnByaW50ZihuLT5kaXNrLT5kaXNrX25hbWUsIHNpemVvZihuLT5kaXNrLT5kaXNrX25hbWUpLAotCQkJImRzdC0lcyIsIG4tPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcHV0OgotCXB1dF9kaXNrKG4tPmRpc2spOwotZXJyX291dF9mcmVlX3F1ZXVlOgotCWJsa19jbGVhbnVwX3F1ZXVlKG4tPnF1ZXVlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU3lzZnMgbWFjaGluZXJ5OiBzaG93IGRldmljZSdzIHNpemUuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3NpemUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIGluZm8tPnNpemUpOwotfQotCi0vKgotICogU2hvdyBsb2NhbCBleHBvcnRlZCBkZXZpY2UuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGRzdF9zaG93X2xvY2FsKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW5mby0+bG9jYWwpOwotfQotCi0vKgotICogU2hvd3MgdHlwZSBvZiB0aGUgcmVtb3RlIG5vZGUgLSBkZXZpY2UgbWFqb3IvbWlub3IgbnVtYmVyCi0gKiBmb3IgbG9jYWwgbm9kZXMgYW5kIGFkZHJlc3MgKGFmX2luZXQgaXB2NC9pcHY2IG9ubHkpIGZvciByZW1vdGUgbm9kZXMuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKLQlpbnQgZmFtaWx5ID0gaW5mby0+bmV0LmFkZHIuc2FfZmFtaWx5OwotCi0JaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpbmZvLT5uZXQuYWRkcjsKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXUuJXUuJXUuJXU6JWRcbiIsCi0JCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOwotCX0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCi0JCQkJJmluZm8tPm5ldC5hZGRyOwotCQlyZXR1cm4gc3ByaW50ZihidWYsCi0JCQkiJXBpNjolZFxuIiwKLQkJCSZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKLQl9IGVsc2UgewotCQlpbnQgaSwgc3ogPSBQQUdFX1NJWkUgLSAyOyAvKiAwIHN5bWJvbCBhbmQgJ1xuJyBiZWxvdyAqLwotCQlpbnQgc2l6ZSwgYWRkcmxlbiA9IGluZm8tPm5ldC5hZGRyLnNhX2RhdGFfbGVuOwotCQl1bnNpZ25lZCBjaGFyICphID0gKHVuc2lnbmVkIGNoYXIgKikmaW5mby0+bmV0LmFkZHIuc2FfZGF0YTsKLQkJY2hhciAqYnVmX29yaWcgPSBidWY7Ci0KLQkJc2l6ZSA9IHNucHJpbnRmKGJ1Ziwgc3osICJmYW1pbHk6ICVkLCBhZGRybGVuOiAldSwgYWRkcjogIiwKLQkJCQlmYW1pbHksIGFkZHJsZW4pOwotCQlzeiAtPSBzaXplOwotCQlidWYgKz0gc2l6ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgYWRkcmxlbjsgKytpKSB7Ci0JCQlpZiAoc3ogPCAzKQotCQkJCWJyZWFrOwotCi0JCQlzaXplID0gc25wcmludGYoYnVmLCBzeiwgIiUwMnggIiwgYVtpXSk7Ci0JCQlzeiAtPSBzaXplOwotCQkJYnVmICs9IHNpemU7Ci0JCX0KLQkJYnVmICs9IHNwcmludGYoYnVmLCAiXG4iKTsKLQotCQlyZXR1cm4gYnVmIC0gYnVmX29yaWc7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZHN0X25vZGVfYXR0cnNbXSA9IHsKLQlfX0FUVFIoc2l6ZSwgMDQ0NCwgZHN0X3Nob3dfc2l6ZSwgTlVMTCksCi0JX19BVFRSKHR5cGUsIDA0NDQsIGRzdF9zaG93X3R5cGUsIE5VTEwpLAotCV9fQVRUUihsb2NhbCwgMDQ0NCwgZHN0X3Nob3dfbG9jYWwsIE5VTEwpLAotfTsKLQotc3RhdGljIGludCBkc3RfY3JlYXRlX25vZGVfYXR0cmlidXRlcyhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzdF9ub2RlX2F0dHJzKTsgKytpKSB7Ci0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbi0+aW5mby0+ZGV2aWNlLAotCQkJCSZkc3Rfbm9kZV9hdHRyc1tpXSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfcmVtb3ZlX2FsbDsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVtb3ZlX2FsbDoKLQl3aGlsZSAoLS1pID49IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmbi0+aW5mby0+ZGV2aWNlLAotCQkJCSZkc3Rfbm9kZV9hdHRyc1tpXSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfcmVtb3ZlX25vZGVfYXR0cmlidXRlcyhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCi0JCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKLX0KLQotLyoKLSAqIFN5c2ZzIGNsZWFudXAgYW5kIGluaXRpYWxpemF0aW9uLgotICogU2hvd3MgbnVtYmVyIG9mIHVzZWZ1bCBwYXJhbWV0ZXJzLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9zeXNmc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpZiAobi0+aW5mbykgewotCQlkc3RfcmVtb3ZlX25vZGVfYXR0cmlidXRlcyhuKTsKLQkJZGV2aWNlX3VucmVnaXN0ZXIoJm4tPmluZm8tPmRldmljZSk7Ci0JCW4tPmluZm8gPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBkc3Rfbm9kZV9zeXNmc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpbnQgZXJyOwotCi0Jbi0+aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3RfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghbi0+aW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoJm4tPmluZm8tPmRldmljZSwgJmRzdF9ub2RlX2Rldiwgc2l6ZW9mKHN0cnVjdCBkZXZpY2UpKTsKLQluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKLQotCWRldl9zZXRfbmFtZSgmbi0+aW5mby0+ZGV2aWNlLCAiZHN0LSVzIiwgbi0+bmFtZSk7Ci0JZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZuLT5pbmZvLT5kZXZpY2UpOwotCWlmIChlcnIpIHsKLQkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIG5vZGUgJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJbi0+bmFtZSwgZXJyKTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JZHN0X2NyZWF0ZV9ub2RlX2F0dHJpYnV0ZXMobik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWtmcmVlKG4tPmluZm8pOwotCW4tPmluZm8gPSBOVUxMOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBEU1Qgbm9kZSBoYXNoIHRhYmxlcyBtYWNoaW5lcnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzdF9oYXNoKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JcmV0dXJuIGpoYXNoKHN0ciwgc2l6ZSwgMCkgJSBkc3RfaGFzaHRhYmxlX3NpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX3JlbW92ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JbGlzdF9kZWxfaW5pdCgmbi0+bm9kZV9lbnRyeSk7Ci0JbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X25vZGVfYWRkKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQl1bnNpZ25lZCBoYXNoID0gZHN0X2hhc2gobi0+bmFtZSwgc2l6ZW9mKG4tPm5hbWUpKTsKLQotCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJm4tPm5vZGVfZW50cnksICZkc3RfaGFzaHRhYmxlW2hhc2hdKTsKLQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotfQotCi0vKgotICogQ2xlYW5pbmcgbm9kZSB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGZyZWVkLgotICogVGhlcmUgYXJlIHN0aWxsIHVzZXJzIG9mIHRoZSBzb2NrZXQgdGhvdWdoLAotICogc28gY29ubmVjdGlvbiBjbGVhbnVwIHNob3VsZCBiZSBwcm90ZWN0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX2NsZWFudXAoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gbi0+c3RhdGU7Ci0KLQlpZiAoIXN0KQotCQlyZXR1cm47Ci0KLQlpZiAobi0+cXVldWUpIHsKLQkJYmxrX2NsZWFudXBfcXVldWUobi0+cXVldWUpOwotCi0JCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCQlpZHJfcmVtb3ZlKCZkc3RfaW5kZXhfaWRyLCBuLT5kaXNrLT5maXJzdF9taW5vcik7Ci0JCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci0KLQkJcHV0X2Rpc2sobi0+ZGlzayk7Ci0JfQotCi0JaWYgKG4tPmJkZXYpIHsKLQkJc3luY19ibG9ja2RldihuLT5iZGV2KTsKLQkJYmxrZGV2X3B1dChuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKLQl9Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0Jc3QtPm5lZWRfZXhpdCA9IDE7Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0KLQlkc3Rfc3RhdGVfcHV0KHN0KTsKLQluLT5zdGF0ZSA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBGcmVlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3NlY3VyaXR5X2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3Rfc2VjdXJlICpzLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHRtcCwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgewotCQlsaXN0X2RlbCgmcy0+c2VjX2VudHJ5KTsKLQkJa2ZyZWUocyk7Ci0JfQotfQotCi0vKgotICogRnJlZSBub2RlIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgdXNlcnMuCi0gKiBBY3R1YWxseSBub2RlIGhhcyB0byBiZSBmcmVlZCBvbiBiZWhhbGYgb2QgdXNlcnNwYWNlIHByb2Nlc3MsCi0gKiBzaW5jZSB0aGVyZSBhcmUgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGFyZSBlbWJlZGRlZCBpbiB0aGUKLSAqIG5vZGUsIHNvIHRoZXkgY2FuIG5vdCBleGl0IGFuZCBmcmVlIG5vZGUgZnJvbSB0aGVyZSwgdGhhdCBpcwotICogd2h5IHRoZXJlIGlzIGEgd2FrZXVwIGlmIHJlZmVyZW5jZSBjb3VudGVyIGlzIG5vdCBlcXVhbCB0byB6ZXJvLgotICovCi12b2lkIGRzdF9ub2RlX3B1dChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaWYgKHVubGlrZWx5KCFuKSkKLQkJcmV0dXJuOwotCi0JZHByaW50aygiJXM6IG46ICVwLCByZWZjbnQ6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCBuLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbi0+cmVmY250KSkgewotCQlkc3Rfbm9kZV9yZW1vdmUobik7Ci0JCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IDA7Ci0JCWRzdF9ub2RlX2NsZWFudXAobik7Ci0JCXRocmVhZF9wb29sX2Rlc3Ryb3kobi0+cG9vbCk7Ci0JCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7Ci0JCWRzdF9ub2RlX2NyeXB0b19leGl0KG4pOwotCQlkc3Rfc2VjdXJpdHlfZXhpdChuKTsKLQkJZHN0X25vZGVfdHJhbnNfZXhpdChuKTsKLQotCQlrZnJlZShuKTsKLQotCQlkcHJpbnRrKCIlczogZnJlZWQgbjogJXAuXG4iLCBfX2Z1bmNfXywgbik7Ci0JfSBlbHNlIHsKLQkJd2FrZV91cCgmbi0+d2FpdCk7Ci0JfQotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBmaW5kcyBkZXZpY2VzIG1ham9yL21pbm9yIG51bWJlcnMgZm9yIGdpdmVuIHBhdGhuYW1lLgotICovCi1zdGF0aWMgaW50IGRzdF9sb29rdXBfZGV2aWNlKGNvbnN0IGNoYXIgKnBhdGgsIGRldl90ICpkZXYpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpbm9kZSA9IG5kLnBhdGguZGVudHJ5LT5kX2lub2RlOwotCWlmICghaW5vZGUpIHsKLQkJZXJyID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7Ci0JCWVyciA9IC1FTk9UQkxLOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkqZGV2ID0gaW5vZGUtPmlfcmRldjsKLQotb3V0OgotCXBhdGhfcHV0KCZuZC5wYXRoKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2V0dGluZyB1cCBleHBvcnQgZGV2aWNlOiBsb29rdXAgYnkgdGhlIG5hbWUsIGdldCBpdHMgc2l6ZQotICogYW5kIHNldHVwIGxpc3RlbmluZyBzb2NrZXQsIHdoaWNoIHdpbGwgYWNjZXB0IGNsaWVudHMsIHdoaWNoCi0gKiB3aWxsIHN1Ym1pdCBJTyBmb3IgZ2l2ZW4gc3RvcmFnZS4KLSAqLwotc3RhdGljIGludCBkc3Rfc2V0dXBfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKLXsKLQlpbnQgZXJyOwotCWRldl90IGRldiA9IDA7IC8qIGdjYyBsaWtlcyB0byBzY3JlYW0gaGVyZSAqLwotCi0Jc25wcmludGYobi0+aW5mby0+bG9jYWwsIHNpemVvZihuLT5pbmZvLT5sb2NhbCksICIlcyIsIGxlLT5kZXZpY2UpOwotCi0JZXJyID0gZHN0X2xvb2t1cF9kZXZpY2UobGUtPmRldmljZSwgJmRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCW4tPmJkZXYgPSBvcGVuX2J5X2Rldm51bShkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwotCWlmICghbi0+YmRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAobi0+c2l6ZSAhPSAwKQotCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplLCBuLT5zaXplKTsKLQllbHNlCi0JCW4tPnNpemUgPSBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplOwotCi0Jbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7Ci0JZXJyID0gZHN0X25vZGVfaW5pdF9saXN0ZW5lZChuLCBsZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2NsZWFudXA7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9jbGVhbnVwOgotCWJsa2Rldl9wdXQobi0+YmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7Ci0Jbi0+YmRldiA9IE5VTEw7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBFbXB0eSB0aHJlYWQgcG9vbCBjYWxsYmFja3MgZm9yIHRoZSBuZXR3b3JrIHByb2Nlc3NpbmcgdGhyZWFkcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZHN0X3RocmVhZF9uZXR3b3JrX2luaXQodm9pZCAqZGF0YSkKLXsKLQlkcHJpbnRrKCIlczogZGF0YTogJXAuXG4iLCBfX2Z1bmNfXywgZGF0YSk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfdGhyZWFkX25ldHdvcmtfY2xlYW51cCh2b2lkICpkYXRhKQotewotCWRwcmludGsoIiVzOiBkYXRhOiAlcC5cbiIsIF9fZnVuY19fLCBkYXRhKTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIERTVCBub2RlIGFuZCBpbml0aWFsaXplIHNvbWUgb2YgaXRzIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHN0X25vZGUgKmRzdF9hbGxvY19ub2RlKHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCWludCAoKnN0YXJ0KShzdHJ1Y3QgZHN0X25vZGUgKiksCi0JCWludCBudW0pCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuOwotCWludCBlcnI7Ci0KLQluID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gTlVMTDsKLQotCUlOSVRfTElTVF9IRUFEKCZuLT5ub2RlX2VudHJ5KTsKLQotCUlOSVRfTElTVF9IRUFEKCZuLT5zZWN1cml0eV9saXN0KTsKLQltdXRleF9pbml0KCZuLT5zZWN1cml0eV9sb2NrKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm4tPndhaXQpOwotCi0Jbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhjdGwtPnRyYW5zX3NjYW5fdGltZW91dCk7Ci0JaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQpCi0JCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IEhaOwotCi0Jbi0+dHJhbnNfbWF4X3JldHJpZXMgPSBjdGwtPnRyYW5zX21heF9yZXRyaWVzOwotCWlmICghbi0+dHJhbnNfbWF4X3JldHJpZXMpCi0JCW4tPnRyYW5zX21heF9yZXRyaWVzID0gMTA7Ci0KLQkvKgotCSAqIFByZXR0eSBtdWNoIGFyYml0cmFyeSBkZWZhdWx0IG51bWJlcnMuCi0JICogMzIgbWF0Y2hlcyBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBiaW8gb3JpZ2luYXRlZCBmcm9tIGV4dDMgKDMxKS4KLQkgKi8KLQluLT5tYXhfcGFnZXMgPSBjdGwtPm1heF9wYWdlczsKLQlpZiAoIW4tPm1heF9wYWdlcykKLQkJbi0+bWF4X3BhZ2VzID0gMzI7Ci0KLQlpZiAobi0+bWF4X3BhZ2VzID4gMTAyNCkKLQkJbi0+bWF4X3BhZ2VzID0gMTAyNDsKLQotCW4tPnN0YXJ0ID0gc3RhcnQ7Ci0Jbi0+c2l6ZSA9IGN0bC0+c2l6ZTsKLQotCWF0b21pY19zZXQoJm4tPnJlZmNudCwgMSk7Ci0JYXRvbWljX2xvbmdfc2V0KCZuLT5nZW4sIDApOwotCXNucHJpbnRmKG4tPm5hbWUsIHNpemVvZihuLT5uYW1lKSwgIiVzIiwgY3RsLT5uYW1lKTsKLQotCWVyciA9IGRzdF9ub2RlX3N5c2ZzX2luaXQobik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQluLT5wb29sID0gdGhyZWFkX3Bvb2xfY3JlYXRlKG51bSwgbi0+bmFtZSwgZHN0X3RocmVhZF9uZXR3b3JrX2luaXQsCi0JCQlkc3RfdGhyZWFkX25ldHdvcmtfY2xlYW51cCwgbik7Ci0JaWYgKElTX0VSUihuLT5wb29sKSkgewotCQllcnIgPSBQVFJfRVJSKG4tPnBvb2wpOwotCQlnb3RvIGVycl9vdXRfc3lzZnNfZXhpdDsKLQl9Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIG5hbWU6ICVzLlxuIiwgX19mdW5jX18sIG4sIG4tPm5hbWUpOwotCi0JcmV0dXJuIG47Ci0KLWVycl9vdXRfc3lzZnNfZXhpdDoKLQlkc3Rfbm9kZV9zeXNmc19leGl0KG4pOwotZXJyX291dF9mcmVlOgotCWtmcmVlKG4pOwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogU3RhcnRpbmcgYSBub2RlLCBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXI6Ci0gKiByZWdpc3RlciBibG9jayBkZXZpY2UgYW5kIGluaXRpYWxpemUgdHJhbnNhY3Rpb24gbWVjaGFuaXNtLgotICogSW4gcmV2ZXJzIG9yZGVyIHRob3VnaC4KLSAqCi0gKiBJdCB3aWxsIGF1dG9uZWdvdGlhdGUgc29tZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHJlbW90ZSBub2RlCi0gKiBhbmQgdXBkYXRlIGxvY2FsIGlmIG5lZWRlZC4KLSAqCi0gKiBUcmFuc2FjdGlvbiBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgdGhlIGxhc3QgdGhpbmcgYmVmb3JlCi0gKiBzdGFydGluZyB0aGUgbm9kZSwgc2luY2UgdHJhbnNhY3Rpb24gc2hvdWxkIGluY2x1ZGUgbm90IG9ubHkKLSAqIGJsb2NrIElPLCBidXQgYWxzbyBjcnlwdG8gcmVsYXRlZCBkYXRhIChpZiBhbnkpLCB3aGljaCBhcmUKLSAqIGluaXRpYWxpemVkIHNlcGFyYXRlbHkuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3N0YXJ0X3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGRzdF9ub2RlX3RyYW5zX2luaXQobiwgc2l6ZW9mKHN0cnVjdCBkc3RfdHJhbnMpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gZHN0X25vZGVfY3JlYXRlX2Rpc2sobik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWRzdF9ub2RlX3NldF9zaXplKG4pOwotCWFkZF9kaXNrKG4tPmRpc2spOwotCi0JZHByaW50aygiRFNUOiBzdGFydGVkIHJlbW90ZSBub2RlICclcycsIG1pbm9yOiAlZC5cbiIsCi0JCQluLT5uYW1lLCBuLT5kaXNrLT5maXJzdF9taW5vcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEFkZGluZyByZW1vdGUgbm9kZSBhbmQgaW5pdGlhbGl6ZSBjb25uZWN0aW9uLgotICovCi1zdGF0aWMgaW50IGRzdF9hZGRfcmVtb3RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyY3RsID0gZGF0YTsKLQotCWlmIChuKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQluID0gZHN0X2FsbG9jX25vZGUoY3RsLCBkc3Rfc3RhcnRfcmVtb3RlLCAxKTsKLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KCZuLT5pbmZvLT5uZXQsIHJjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0JZXJyID0gZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQobiwgcmN0bCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlkc3Rfbm9kZV9hZGQobik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlOgotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQWRkaW5nIGV4cG9ydCBub2RlOiBpbml0aWFsaXppbmcgYmxvY2sgZGV2aWNlIGFuZCBsaXN0ZW5pbmcgc29ja2V0LgotICovCi1zdGF0aWMgaW50IGRzdF9hZGRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlID0gZGF0YTsKLQotCWlmIChuKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW4gPSBkc3RfYWxsb2Nfbm9kZShjdGwsIGRzdF9zdGFydF9leHBvcnQsIDIpOwotCWlmICghbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllcnIgPSBkc3Rfc2V0dXBfZXhwb3J0KG4sIGN0bCwgbGUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZHN0X25vZGVfYWRkKG4pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlwcmludGsoS0VSTl9JTkZPICJTVE9QUEVEIG5hbWU6ICclcycsIHNpemU6ICVsbHUuXG4iLAotCQkJbi0+bmFtZSwgbi0+c2l6ZSk7Ci0KLQlpZiAobi0+ZGlzaykKLQkJZGVsX2dlbmRpc2sobi0+ZGlzayk7Ci0KLQlkc3Rfbm9kZV9yZW1vdmUobik7Ci0JZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKLQotCS8qCi0JICogVGhpcyBpcyBub3QgYSBoYWNrLiBSZWFsbHkuCi0JICogTm9kZSdzIHJlZmVyZW5jZSBjb3VudGVyIGFsbG93cyB0byBpbXBsZW1lbnQgZmluZSBncmFpbmVkCi0JICogbm9kZSBmcmVlaW5nLCBidXQgc2luY2UgYWxsIHRyYW5zYWN0aW9ucyAod2hpY2ggaG9sZCBub2RlJ3MKLQkgKiByZWZlcmVuY2UgY291bnRlcikgYXJlIHByb2Nlc3NlZCBpbiB0aGUgZGVkaWNhdGVkIHRocmVhZCwKLQkgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IHJlZmVyZW5jZSB3aWxsIGhpdCB6ZXJvIGluIHRoYXQgdGhyZWFkLAotCSAqIHNvIHdlIHdpbGwgbm90IGJlIGFibGUgdG8gZXhpdCB0aHJlYWQgYW5kIGNsZWFudXAgdGhlIG5vZGUuCi0JICoKLQkgKiBTbywgd2UgcmVtb3ZlIGRpc2ssIHNvIG5vIG5ldyBhY3Rpdml0eSBpcyBwb3NzaWJsZSwgYW5kCi0JICogd2FpdCB1bnRpbCBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbiBhcmUgY29tcGxldGVkIChlaXRoZXIKLQkgKiBpbiByZWNlaXZpbmcgdGhyZWFkIG9yIGJ5IHRpbWVvdXQgaW4gd29ya3F1ZXVlKSwgaW4gdGhpcwotCSAqIGNhc2UgcmVmZXJlbmNlIGNvdW50ZXIgd2lsbCBiZSBsZXNzIG9yIGVxdWFsIHRvIDIgKG9uY2Ugc2V0IGluCi0JICogZHN0X2FsbG9jX25vZGUoKSBhbmQgdGhlbiBpbiBjb25uZWN0b3IgbWVzc2FnZSBwYXJzZXI7Ci0JICogb3Igd2hlbiB3ZSBmb3JjZSBtb2R1bGUgdW5sb2FkaW5nLCBhbmQgY29ubmVjdG9yIG1lc3NhZ2UKLQkgKiBwYXJzZXIgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSwgaW4gdGhpcyBjYXNlIHJlZmVyZW5jZQotCSAqIGNvdW50ZXIgd2lsbCBiZSBlcXVhbCB0byAxKSwKLQkgKiBhbmQgc3Vic2VxdWVudCBkc3Rfbm9kZV9wdXQoKSBjYWxscyB3aWxsIGZyZWUgdGhlIG5vZGUuCi0JICovCi0JZHByaW50aygiJXM6IGdvaW5nIHRvIHNsZWVwIHdpdGggJWQgcmVmY250LlxuIiwKLQkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7Ci0Jd2FpdF9ldmVudChuLT53YWl0LCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSA8PSAyKTsKLQotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZSBub2RlIGZyb20gdGhlIGhhc2ggdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2RlbF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiBkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjcnlwdG8gcHJvY2Vzc2luZyBmb3IgZ2l2ZW4gbm9kZS4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmNyeXB0byA9IGRhdGE7Ci0KLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkgKyBjcnlwdG8tPmhhc2hfa2V5c2l6ZSArCi0JCQljcnlwdG8tPmNpcGhlcl9rZXlzaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChuLT50cmFuc19jYWNoZSkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQlyZXR1cm4gZHN0X25vZGVfY3J5cHRvX2luaXQobiwgY3J5cHRvKTsKLX0KLQotLyoKLSAqIFNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3NlY3VyaXR5X2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHN0X3NlY3VyZSAqczsKLQotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9zZWN1cmVfdXNlcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweSgmcy0+c2VjLCBkYXRhLCBzaXplKTsKLQotCW11dGV4X2xvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnMtPnNlY19lbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QpOwotCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEtpbGwnZW0gYWxsIQotICovCi1zdGF0aWMgaW50IGRzdF9zdGFydF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAobi0+dHJhbnNfY2FjaGUpCi0JCXJldHVybiAwOwotCi0JZXJyID0gbi0+c3RhcnQobik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXByaW50ayhLRVJOX0lORk8gIlNUQVJURUQgbmFtZTogJyVzJywgc2l6ZTogJWxsdS5cbiIsIG4tPm5hbWUsIG4tPnNpemUpOwotCXJldHVybiAwOwotfQotCi10eXBlZGVmIGludCAoKmRzdF9jb21tYW5kX2Z1bmMpKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOwotCi0vKgotICogTGlzdCBvZiB1c2Vyc3BhY2UgY29tbWFuZHMuCi0gKi8KLXN0YXRpYyBkc3RfY29tbWFuZF9mdW5jIGRzdF9jb21tYW5kc1tdID0gewotCVtEU1RfQUREX1JFTU9URV0gPSAmZHN0X2FkZF9yZW1vdGUsCi0JW0RTVF9BRERfRVhQT1JUXSA9ICZkc3RfYWRkX2V4cG9ydCwKLQlbRFNUX0RFTF9OT0RFXSA9ICZkc3RfZGVsX25vZGUsCi0JW0RTVF9DUllQVE9dID0gJmRzdF9jcnlwdG9faW5pdCwKLQlbRFNUX1NFQ1VSSVRZXSA9ICZkc3Rfc2VjdXJpdHlfaW5pdCwKLQlbRFNUX1NUQVJUXSA9ICZkc3Rfc3RhcnRfbm9kZSwKLX07Ci0KLS8qCi0gKiBDb25maWd1cmF0aW9uIHBhcnNlci4KLSAqLwotc3RhdGljIHZvaWQgY25fZHN0X2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZywgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpuc3ApCi17Ci0Jc3RydWN0IGRzdF9jdGwgKmN0bDsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfY3RsX2FjayBhY2s7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gTlVMTCwgKnRtcDsKLQl1bnNpZ25lZCBpbnQgaGFzaDsKLQotCWlmICghY2FwX3JhaXNlZChuc3AtPmVmZl9jYXAsIENBUF9TWVNfQURNSU4pKSB7Ci0JCWVyciA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKG1zZy0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSkgewotCQllcnIgPSAtRUJBRE1TRzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY3RsID0gKHN0cnVjdCBkc3RfY3RsICopbXNnLT5kYXRhOwotCi0JaWYgKGN0bC0+Y21kID49IERTVF9DTURfTUFYKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQloYXNoID0gZHN0X2hhc2goY3RsLT5uYW1lLCBzaXplb2YoY3RsLT5uYW1lKSk7Ci0KLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmRzdF9oYXNodGFibGVbaGFzaF0sIG5vZGVfZW50cnkpIHsKLQkJaWYgKCFtZW1jbXAodG1wLT5uYW1lLCBjdGwtPm5hbWUsIHNpemVvZih0bXAtPm5hbWUpKSkgewotCQkJbiA9IHRtcDsKLQkJCWRzdF9ub2RlX2dldChuKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci0KLQllcnIgPSBkc3RfY29tbWFuZHNbY3RsLT5jbWRdKG4sIGN0bCwgbXNnLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSwKLQkJCW1zZy0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSk7Ci0KLQlkc3Rfbm9kZV9wdXQobik7Ci1vdXQ6Ci0JbWVtY3B5KCZhY2subXNnLCBtc2csIHNpemVvZihzdHJ1Y3QgY25fbXNnKSk7Ci0KLQlhY2subXNnLmFjayA9IG1zZy0+YWNrICsgMTsKLQlhY2subXNnLmxlbiA9IHNpemVvZihzdHJ1Y3QgZHN0X2N0bF9hY2spIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOwotCi0JYWNrLmVycm9yID0gZXJyOwotCi0JY25fbmV0bGlua19zZW5kKCZhY2subXNnLCAwLCBHRlBfS0VSTkVMKTsKLX0KLQotLyoKLSAqIEdsb2JhbCBpbml0aWFsaXphdGlvbjogc3lzZnMsIGhhc2ggdGFibGUsIGJsb2NrIGRldmljZSByZWdpc3RyYXRpb24sCi0gKiBjb25uZWN0b3IgYW5kIHZhcmlvdXMgY2FjaGVzLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBkc3Rfc3lzZnNfaW5pdCh2b2lkKQotewotCXJldHVybiBidXNfcmVnaXN0ZXIoJmRzdF9kZXZfYnVzX3R5cGUpOwotfQotCi1zdGF0aWMgdm9pZCBkc3Rfc3lzZnNfZXhpdCh2b2lkKQotewotCWJ1c191bnJlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHN0X2hhc2h0YWJsZV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlkc3RfaGFzaHRhYmxlID0ga2NhbGxvYyhkc3RfaGFzaHRhYmxlX3NpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZHN0X2hhc2h0YWJsZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHN0X2hhc2h0YWJsZV9zaXplOyArK2kpCi0JCUlOSVRfTElTVF9IRUFEKCZkc3RfaGFzaHRhYmxlW2ldKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfaGFzaHRhYmxlX2V4aXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4sICp0bXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHN0X2hhc2h0YWJsZV9zaXplOyArK2kpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG4sIHRtcCwgJmRzdF9oYXNodGFibGVbaV0sIG5vZGVfZW50cnkpIHsKLQkJCWRzdF9ub2RlX3JlbW92ZV91bmxvYWQobik7Ci0JCX0KLQl9Ci0KLQlrZnJlZShkc3RfaGFzaHRhYmxlKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHN0X3N5c19pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQllcnIgPSBkc3RfaGFzaHRhYmxlX2luaXQoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWVyciA9IGRzdF9leHBvcnRfaW5pdCgpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9oYXNodGFibGVfZXhpdDsKLQotCWVyciA9IHJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3V0X2V4cG9ydF9leGl0OwotCWlmIChlcnIpCi0JCWRzdF9tYWpvciA9IGVycjsKLQotCWVyciA9IGRzdF9zeXNmc19pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7Ci0KLQllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmNuX2RzdF9pZCwgIkRTVCIsIGNuX2RzdF9jYWxsYmFjayk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3N5c2ZzX2V4aXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJEaXN0cmlidXRlZCBzdG9yYWdlLCAnJXMnIHJlbGVhc2UuXG4iLCBkc3RfbmFtZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9zeXNmc19leGl0OgotCWRzdF9zeXNmc19leGl0KCk7Ci1lcnJfb3V0X3VucmVnaXN0ZXI6Ci0JdW5yZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7Ci1lcnJfb3V0X2V4cG9ydF9leGl0OgotCWRzdF9leHBvcnRfZXhpdCgpOwotZXJyX291dF9oYXNodGFibGVfZXhpdDoKLQlkc3RfaGFzaHRhYmxlX2V4aXQoKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZHN0X3N5c19leGl0KHZvaWQpCi17Ci0JY25fZGVsX2NhbGxiYWNrKCZjbl9kc3RfaWQpOwotCXVucmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOwotCWRzdF9oYXNodGFibGVfZXhpdCgpOwotCWRzdF9zeXNmc19leGl0KCk7Ci0JZHN0X2V4cG9ydF9leGl0KCk7Ci19Ci0KLW1vZHVsZV9pbml0KGRzdF9zeXNfaW5pdCk7Ci1tb2R1bGVfZXhpdChkc3Rfc3lzX2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkRpc3RyaWJ1dGVkIHN0b3JhZ2UiKTsKLU1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzI0MjMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLS8qCi0gKiBFeHBvcnQgYmlvc2V0IGlzIHVzZWQgZm9yIHNlcnZlciBibG9jayBJTyByZXF1ZXN0cy4KLSAqLwotc3RhdGljIHN0cnVjdCBiaW9fc2V0ICpkc3RfYmlvX3NldDsKLQotaW50IF9faW5pdCBkc3RfZXhwb3J0X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWRzdF9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZSgzMiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKLQlpZiAoIWRzdF9iaW9fc2V0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCkKLXsKLQliaW9zZXRfZnJlZShkc3RfYmlvX3NldCk7Ci19Ci0KLS8qCi0gKiBXaGVuIGNsaWVudCBjb25uZWN0cyBhbmQgYXV0b25lZ290aWF0ZXMgd2l0aCB0aGUgc2VydmVyIG5vZGUsCi0gKiBpdHMgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQgaW4gYSBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBzZW50Ci0gKiBiYWNrLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdHJ1Y3QgZHN0X3N0YXRlICptYWluLAotCQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBtYWluLT5ub2RlOwotCXN0cnVjdCBkc3Rfc2VjdXJlICpzZW50cnk7Ci0Jc3RydWN0IGRzdF9zZWN1cmVfdXNlciAqczsKLQlzdHJ1Y3Qgc2FkZHIgKnNhID0gJnN0LT5jdGwuYWRkcjsKLQl1bnNpZ25lZCBpbnQgcGVybSA9IDA7Ci0KLQltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgewotCQlzID0gJnNlbnRyeS0+c2VjOwotCi0JCWlmIChzLT5hZGRyLnNhX2ZhbWlseSAhPSBzYS0+c2FfZmFtaWx5KQotCQkJY29udGludWU7Ci0KLQkJaWYgKHMtPmFkZHIuc2FfZGF0YV9sZW4gIT0gc2EtPnNhX2RhdGFfbGVuKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogVGhpcyAnMicgYmVsb3cgaXMgYSBwb3J0IGZpZWxkLiBUaGlzIG1heSBiZSB2ZXJ5IHdyb25nIHRvIGRvCi0JCSAqIGluIGF0YWxrIGZvciBleGFtcGxlIHRob3VnaC4gSWYgdGhlcmUgd2lsbCBiZSBhbnkgbmVlZAotCQkgKiB0byBleHRlbnQgcHJvdG9jb2wgdG8gc29tZXRoaW5nIGVsc2UsIEkgY2FuIGNyZWF0ZQotCQkgKiBwZXItZmFtaWx5IGhlbHBlcnMgYW5kIHVzZSB0aGVtIGluc3RlYWQgb2YgdGhpcyBtZW1jbXAuCi0JCSAqLwotCQlpZiAobWVtY21wKHMtPmFkZHIuc2FfZGF0YSArIDIsIHNhLT5zYV9kYXRhICsgMiwKLQkJCQkJc2EtPnNhX2RhdGFfbGVuIC0gMikpCi0JCQljb250aW51ZTsKLQotCQlwZXJtID0gcy0+cGVybWlzc2lvbnM7Ci0JfQotCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0KLQlyZXR1cm4gcGVybTsKLX0KLQotLyoKLSAqIEFjY2VwdCBuZXcgY2xpZW50OiBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YXRlIGFuZCBjaGVjayBwZXJtaXNzaW9ucy4KLSAqLwotc3RhdGljIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9hY2NlcHRfY2xpZW50KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKLQl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwotCXN0cnVjdCBkc3Rfc3RhdGUgKm5ldzsKLQotCXdoaWxlICghZXJyICYmICFzb2NrKSB7Ci0JCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7Ci0KLQkJaWYgKCEocmV2ZW50cyAmIG1hc2spKSB7Ci0JCQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCQkJZm9yICg7OykgewotCQkJCXByZXBhcmVfdG9fd2FpdCgmc3QtPnRocmVhZF93YWl0LAotCQkJCQkJJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCQkJaWYgKHJldmVudHMgJiBtYXNrKQotCQkJCQlicmVhazsKLQotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKgotCQkJCSAqIE1hZ2ljIEhaPyBQb2xsaW5nIGNoZWNrIGFib3ZlIGlzIG5vdCBzYWZlIGluCi0JCQkJICogYWxsIGNhc2VzIChsaWtlIHNvY2tldCByZXNldCBpbiBCSCBjb250ZXh0KSwKLQkJCQkgKiBzbyBpdCBpcyBzaW1wbGVyIGp1c3QgdG8gcG9zdHBvbmUgaXQgdG8gdGhlCi0JCQkJICogcHJvY2VzcyBjb250ZXh0IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nCi0JCQkJICogc3BlY2lhbCBsb2NraW5nIHRoZXJlLgotCQkJCSAqLwotCQkJCXNjaGVkdWxlX3RpbWVvdXQoSFopOwotCQkJfQotCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOwotCQl9Ci0KLQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQotCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZXZlbnRzOiAleCBbZXJyOiAlZCwgaW46ICVkXS5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIHJldmVudHMsIHJldmVudHMgJiBlcnJfbWFzaywKLQkJCXJldmVudHMgJiBQT0xMSU4pOwotCi0JCWlmIChyZXZlbnRzICYgZXJyX21hc2spIHsKLQkJCWRwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsCi0JCQkJCV9fZnVuY19fLCByZXZlbnRzLCBzdC0+c29ja2V0LCBlcnIpOwotCQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCX0KLQotCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJZXJyID0gLUVOT0RFVjsKLQotCQlpZiAoc3QtPnNvY2tldCAmJiAocmV2ZW50cyAmIFBPTExJTikpCi0JCQllcnIgPSBrZXJuZWxfYWNjZXB0KHN0LT5zb2NrZXQsICZzb2NrLCAwKTsKLQotCQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQl9Ci0KLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCW5ldyA9IGRzdF9zdGF0ZV9hbGxvYyhzdC0+bm9kZSk7Ci0JaWYgKElTX0VSUihuZXcpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQluZXctPnNvY2tldCA9IHNvY2s7Ci0KLQluZXctPmN0bC5hZGRyLnNhX2RhdGFfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7Ci0JZXJyID0ga2VybmVsX2dldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKLQkJCShpbnQgKikmbmV3LT5jdGwuYWRkci5zYV9kYXRhX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCW5ldy0+cGVybWlzc2lvbnMgPSBkc3RfY2hlY2tfcGVybWlzc2lvbnMoc3QsIG5ldyk7Ci0JaWYgKG5ldy0+cGVybWlzc2lvbnMgPT0gMCkgewotCQllcnIgPSAtRVBFUk07Ci0JCWRzdF9kdW1wX2FkZHIoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAotCQkJCSJDbGllbnQgaXMgbm90IGFsbG93ZWQgdG8gY29ubmVjdCIpOwotCQlnb3RvIGVycl9vdXRfcHV0OwotCX0KLQotCWVyciA9IGRzdF9wb2xsX2luaXQobmV3KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0JZHN0X2R1bXBfYWRkcihzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCi0JCQkiQ29ubmVjdGVkIGNsaWVudCIpOwotCi0JcmV0dXJuIG5ldzsKLQotZXJyX291dF9wdXQ6Ci0JZHN0X3N0YXRlX3B1dChuZXcpOwotZXJyX291dF9yZWxlYXNlOgotCXNvY2tfcmVsZWFzZShzb2NrKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi0vKgotICogRWFjaCBzZXJ2ZXIncyBibG9jayByZXF1ZXN0IHNvbWV0aW1lIGZpbmlzaGVzLgotICogVXN1YWxseSBpdCBoYXBwZW5zIGluIGhhcmQgaXJxIGNvbnRleHQgb2YgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xsZXIsCi0gKiBzbyB0byBwbGF5IGdvb2Qgd2l0aCBhbGwgY2FzZXMgd2UganVzdCBxdWV1ZSBCSU8gaW50byB0aGUgcXVldWUKLSAqIGFuZCB3YWtlIHVwIHByb2Nlc3NpbmcgdGhyZWFkLCB3aGljaCBnZXRzIGNvbXBsZXRlZCByZXF1ZXN0IGFuZAotICogc2VuZCAoZW5jcnlwdGluZyBpZiBuZWVkZWQpIGl0IGJhY2sgdG8gdGhlIGNsaWVudCAoaWYgaXQgd2FzIGEgcmVhZAotICogcmVxdWVzdCksIG9yIHNlbmRzIGJhY2sgcmVwbHkgdGhhdCB3cml0aW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9wcm9jZXNzX3JlcXVlc3RfcXVldWUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gTlVMTDsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0JaW50IGVyciA9IDA7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0JCWlmICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKLQkJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdC0+cmVxdWVzdF9saXN0LAotCQkJCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYsIHJlcXVlc3RfZW50cnkpOwotCQkJbGlzdF9kZWwoJnAtPnJlcXVlc3RfZW50cnkpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQotCQlpZiAoIXApCi0JCQlicmVhazsKLQotCQliaW8gPSBwLT5iaW87Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhzdC0+bm9kZSkgJiYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpKQotCQkJZXJyID0gZHN0X2V4cG9ydF9jcnlwdG8oc3QtPm5vZGUsIGJpbyk7Ci0JCWVsc2UKLQkJCWVyciA9IGRzdF9leHBvcnRfc2VuZF9iaW8oYmlvKTsKLQotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIENsZWFudXAgZXhwb3J0IHN0YXRlLgotICogSXQgaGFzIHRvIHdhaXQgdW50aWwgYWxsIHJlcXVlc3RzIGFyZSBmaW5pc2hlZCwKLSAqIGFuZCB0aGVuIGZyZWUgdGhlbSBhbGwuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9zdGF0ZV9jbGVhbnVwX2V4cG9ydChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIFRoaXMgbG9vcCB3YWl0cyBmb3IgYWxsIHBlbmRpbmcgYmlvcyB0byBiZSBjb21wbGV0ZWQgYW5kIGZyZWVkLgotCSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPiAxKSB7Ci0JCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQsIGxpc3RfZW1wdHk6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSwKLQkJCQlsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSk7Ci0JCXdhaXRfZXZlbnRfdGltZW91dChzdC0+dGhyZWFkX3dhaXQsCi0JCQkJKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA9PSAxKSB8fAotCQkJCSFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSwKLQkJCQlIWi8yKTsKLQotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCQlwID0gTlVMTDsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCQkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJnN0LT5yZXF1ZXN0X2xpc3QsCi0JCQkJCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYsIHJlcXVlc3RfZW50cnkpOwotCQkJCWxpc3RfZGVsKCZwLT5yZXF1ZXN0X2VudHJ5KTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQotCQkJaWYgKHApCi0JCQkJYmlvX3B1dChwLT5iaW8pOwotCi0JCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLCBsaXN0X2VtcHR5OiAlZCwgcDogIgotCQkJCSIlcC5cbiIsIF9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpLAotCQkJCWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpLCBwKTsKLQkJfQotCX0KLQotCWRzdF9zdGF0ZV9wdXQoc3QpOwotfQotCi0vKgotICogQ2xpZW50IGFjY2VwdGluZyB0aHJlYWQuCi0gKiBOb3Qgb25seSBhY2NlcHRzIG5ldyBjb25uZWN0aW9uLCBidXQgYWxzbyBzY2hlZHVsZXMgcmVjZWl2aW5nIHRocmVhZAotICogYW5kIHBlcmZvcm1zIHJlcXVlc3QgY29tcGxldGlvbiBkZXNjcmliZWQgYWJvdmUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2FjY2VwdCh2b2lkICppbml0X2RhdGEsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqbWFpbl9zdCA9IHNjaGVkdWxlX2RhdGE7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gaW5pdF9kYXRhOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnI7Ci0KLQl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0ICYmICFtYWluX3N0LT5uZWVkX2V4aXQpIHsKLQkJZHByaW50aygiJXM6IG1haW5fc3Q6ICVwLCBuOiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0LCBuKTsKLQkJc3QgPSBkc3RfYWNjZXB0X2NsaWVudChtYWluX3N0KTsKLQkJaWYgKElTX0VSUihzdCkpCi0JCQljb250aW51ZTsKLQotCQllcnIgPSBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3QpOwotCQlpZiAoIWVycikgewotCQkJd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCkgewotCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHN0LT50aHJlYWRfd2FpdCwKLQkJCQkJIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpIHx8Ci0JCQkJCSFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwKLQkJCQkJc3QtPm5lZWRfZXhpdCwKLQkJCQkJSFopOwotCi0JCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAobGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJZXJyID0gZHN0X2V4cG9ydF9wcm9jZXNzX3JlcXVlc3RfcXVldWUoc3QpOwotCQkJCWlmIChlcnIpCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQlzdC0+bmVlZF9leGl0ID0gMTsKLQkJCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0JCX0KLQotCQlkc3Rfc3RhdGVfY2xlYW51cF9leHBvcnQoc3QpOwotCX0KLQotCWRwcmludGsoIiVzOiBmcmVlaW5nIGxpc3RlbmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIG1haW5fc3QpOwotCi0JZHN0X3N0YXRlX2xvY2sobWFpbl9zdCk7Ci0JZHN0X3BvbGxfZXhpdChtYWluX3N0KTsKLQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2UobWFpbl9zdCk7Ci0JZHN0X3N0YXRlX3VubG9jayhtYWluX3N0KTsKLQlkc3Rfc3RhdGVfcHV0KG1haW5fc3QpOwotCWRwcmludGsoIiVzOiBmcmVlZCBsaXN0ZW5pbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZHN0X3N0YXJ0X2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaWYgKGxpc3RfZW1wdHkoJm4tPnNlY3VyaXR5X2xpc3QpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IGFyZSB0cnlpbmcgdG8gZXhwb3J0IG5vZGUgJyVzJyAiCi0JCQkJIndpdGhvdXQgc2VjdXJpdHkgYXR0cmlidXRlcy5cbk5vIGNsaWVudHMgd2lsbCAiCi0JCQkJImJlIGFsbG93ZWQgdG8gY29ubmVjdC4gRXhpdGluZy5cbiIsIG4tPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGRzdF9ub2RlX3RyYW5zX2luaXQobiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgbGlzdGVuaW5nIHN0YXRlIGFuZCBzY2hlZHVsZSBhY2NlcHRpbmcgdGhyZWFkLgotICovCi1pbnQgZHN0X25vZGVfaW5pdF9saXN0ZW5lZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3Q7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJmxlLT5jdGw7Ci0KLQltZW1jcHkoJm4tPmluZm8tPm5ldCwgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCi0Jc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7Ci0JaWYgKElTX0VSUihzdCkpIHsKLQkJZXJyID0gUFRSX0VSUihzdCk7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQltZW1jcHkoJnN0LT5jdGwsIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKLQotCWVyciA9IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0Jc3QtPnNvY2tldC0+c2stPnNrX3JldXNlID0gMTsKLQotCWVyciA9IGtlcm5lbF9iaW5kKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAotCQkJY3RsLT5hZGRyLnNhX2RhdGFfbGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7Ci0KLQllcnIgPSBrZXJuZWxfbGlzdGVuKHN0LT5zb2NrZXQsIDEwMjQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKLQluLT5zdGF0ZSA9IHN0OwotCi0JZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOwotCi0JZHN0X3N0YXRlX2dldChzdCk7Ci0KLQllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAotCQkJZHN0X2FjY2VwdCwgc3QsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcG9sbF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcG9sbF9leGl0OgotCWRzdF9wb2xsX2V4aXQoc3QpOwotZXJyX291dF9zb2NrZXRfcmVsZWFzZToKLQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOwotZXJyX291dF9wdXQ6Ci0JZHN0X3N0YXRlX3B1dChzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0Jbi0+c3RhdGUgPSBOVUxMOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBGcmVlIGJpbyBhbmQgcmVsYXRlZCBwcml2YXRlIGRhdGEuCi0gKiBBbHNvIGRyb3AgYSByZWZlcmVuY2UgY291bnRlciBmb3IgYXBwcm9wcmlhdGUgc3RhdGUsCi0gKiB3aGljaCB3YWl0cyB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGJsb2NrIElPcyBpbi1mbGlnaHQuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9iaW9fZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnByaXYgPSBiaW8tPmJpX3ByaXZhdGU7Ci0JaW50IGk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCWlmICghYnYtPmJ2X3BhZ2UpCi0JCQlicmVhazsKLQotCQlfX2ZyZWVfcGFnZShidi0+YnZfcGFnZSk7Ci0JfQotCi0JaWYgKHByaXYpCi0JCWRzdF9zdGF0ZV9wdXQocHJpdi0+c3RhdGUpOwotCWJpb19mcmVlKGJpbywgZHN0X2Jpb19zZXQpOwotfQotCi0vKgotICogQmxvY2sgSU8gY29tcGxldGlvbi4gUXVldWUgcmVxdWVzdCB0byBiZSBzZW50IGJhY2sgdG8KLSAqIHRoZSBjbGllbnQgKG9yIGp1c3QgY29uZmlybWF0aW9uKS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQotewotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBiaW8tPmJpX3ByaXZhdGU7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBwLT5zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZwLT5yZXF1ZXN0X2VudHJ5LCAmc3QtPnJlcXVlc3RfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCi0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIHJlYWQgcmVxdWVzdCBmb3IgdGhlIHNlcnZlci4KLSAqLwotc3RhdGljIGludCBkc3RfZXhwb3J0X3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCB0b3RhbF9zaXplKQotewotCXVuc2lnbmVkIGludCBzaXplOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBlcnI7Ci0KLQl3aGlsZSAodG90YWxfc2l6ZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFwYWdlKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFLCB0b3RhbF9zaXplKTsKLQotCQllcnIgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKLQkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQkJc2l6ZSwgZXJyKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZTsKLQotCQl0b3RhbF9zaXplIC09IHNpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZV9wYWdlOgotCV9fZnJlZV9wYWdlKHBhZ2UpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSB3cml0ZSByZXF1ZXN0IGZvciB0aGUgc2VydmVyLgotICogU2hvdWxkIG5vdCBvbmx5IGdldCBwYWdlcywgYnV0IGFsc28gcmVhZCBkYXRhIGZyb20gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LAotCQlzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCB0b3RhbF9zaXplKQotewotCXVuc2lnbmVkIGludCBzaXplOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXZvaWQgKmRhdGE7Ci0JaW50IGVycjsKLQotCXdoaWxlICh0b3RhbF9zaXplKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIXBhZ2UpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlkYXRhID0ga21hcChwYWdlKTsKLQkJaWYgKCFkYXRhKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZTsKLQotCQlzaXplID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUsIHRvdGFsX3NpemUpOwotCi0JCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGRhdGEsIHNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubWFwX3BhZ2U7Ci0KLQkJZXJyID0gYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgc2l6ZSwgMCk7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWdvdG8gZXJyX291dF91bm1hcF9wYWdlOwotCi0JCWt1bm1hcChwYWdlKTsKLQotCQl0b3RhbF9zaXplIC09IHNpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfdW5tYXBfcGFnZToKLQlrdW5tYXAocGFnZSk7Ci1lcnJfb3V0X2ZyZWVfcGFnZToKLQlfX2ZyZWVfcGFnZShwYWdlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogR3Jvb3Z5LCB3ZSd2ZSBnb3R0ZW4gYW4gSU8gcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuCi0gKiBBbGxvY2F0ZSBCSU8gZnJvbSB0aGUgYmlvc2V0LCBwcml2YXRlIGRhdGEgZnJvbSB0aGUgbWVtcG9vbAotICogYW5kIGxvdHMgb2YgcGFnZXMgZm9yIElPLgotICovCi1pbnQgZHN0X3Byb2Nlc3NfaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwcml2OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JaWYgKHVubGlrZWx5KCFuLT5iZGV2KSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9LRVJORUwsCi0JCQlQQUdFX0FMSUdOKGNtZC0+c2l6ZSkgPj4gUEFHRV9TSElGVCwKLQkJCWRzdF9iaW9fc2V0KTsKLQlpZiAoIWJpbykKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlwcml2ID0gKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKikoKCh2b2lkICopYmlvKSAtCi0JCQlzaXplb2YgKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKLQotCXByaXYtPnN0YXRlID0gZHN0X3N0YXRlX2dldChzdCk7Ci0JcHJpdi0+YmlvID0gYmlvOwotCi0JYmlvLT5iaV9wcml2YXRlID0gcHJpdjsKLQliaW8tPmJpX2VuZF9pbyA9IGRzdF9iaW9fZW5kX2lvOwotCWJpby0+YmlfZGVzdHJ1Y3RvciA9IGRzdF9iaW9fZGVzdHJ1Y3RvcjsKLQliaW8tPmJpX2JkZXYgPSBuLT5iZGV2OwotCi0JLyoKLQkgKiBTZXJ2ZXIgc2lkZSBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdHdvIGxvdyBiaXRzOgotCSAqIHVwdG9kYXRlIChzZXQgYnkgaXRzZWxmIGFjdHVhbGx5KSBhbmQgcncgYmxvY2sKLQkgKi8KLQliaW8tPmJpX2ZsYWdzIHw9IGNtZC0+ZmxhZ3MgJiAzOwotCi0JYmlvLT5iaV9ydyA9IGNtZC0+cnc7Ci0JYmlvLT5iaV9zaXplID0gMDsKLQliaW8tPmJpX3NlY3RvciA9IGNtZC0+c2VjdG9yOwotCi0JZHN0X2Jpb190b19jbWQoYmlvLCAmcHJpdi0+Y21kLCBEU1RfSU9fUkVTUE9OU0UsIGNtZC0+aWQpOwotCi0JcHJpdi0+Y21kLmZsYWdzID0gMDsKLQlwcml2LT5jbWQuc2l6ZSA9IGNtZC0+c2l6ZTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3RfcmVjdl9jZGF0YShzdCwgcHJpdi0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQkJZXJyID0gZHN0X2V4cG9ydF93cml0ZV9yZXF1ZXN0KHN0LCBiaW8sIGNtZC0+c2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pKQotCQkJcmV0dXJuIGRzdF9leHBvcnRfY3J5cHRvKG4sIGJpbyk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X2V4cG9ydF9yZWFkX3JlcXVlc3QoYmlvLCBjbWQtPnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQotCi0JZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgcnc6ICVsdSwgZGlyOiAlbHUsIGZsYWdzOiAlbHgsIHBoeXM6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQliaW8tPmJpX3J3LCBiaW9fZGF0YV9kaXIoYmlvKSwKLQkJCWJpby0+YmlfZmxhZ3MsIGJpby0+YmlfcGh5c19zZWdtZW50cyk7Ci0KLQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQliaW9fcHV0KGJpbyk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIE9rLCBibG9jayBJTyBpcyByZWFkeSwgbGV0J3Mgc2VuZCBpdCBiYWNrIHRvIHRoZSBjbGllbnQuLi4KLSAqLwotaW50IGRzdF9leHBvcnRfc2VuZF9iaW8oc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBiaW8tPmJpX3ByaXZhdGU7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBwLT5zdGF0ZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gJnAtPmNtZDsKLQlpbnQgZXJyOwotCi0JZHByaW50aygiJXM6IGlkOiAlbGx1LCBiaW86ICVsbHUvJXUsIGNzaXplOiAldSwgZmxhZ3M6ICVsdSwgcnc6ICVsdS5cbiIsCi0JCQlfX2Z1bmNfXywgY21kLT5pZCwgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJY21kLT5jc2l6ZSwgYmlvLT5iaV9mbGFncywgYmlvLT5iaV9ydyk7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoIXN0LT5zb2NrZXQpIHsKLQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JfQotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7Ci0JCS8qIC4uLiBvciBqdXN0IGNvbmZpcm1hdGlvbiB0aGF0IHdyaXRpbmcgaGFzIGNvbXBsZXRlZC4gKi8KLQkJY21kLT5zaXplID0gY21kLT5jc2l6ZSA9IDA7Ci0JCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwKLQkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X3NlbmRfYmlvKHN0LCBjbWQsIGJpbyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0KLQotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JYmlvX3B1dChiaW8pOwotCXJldHVybiAwOwotCi1lcnJfb3V0X3VubG9jazoKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmEwNWU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDg0NCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLS8qCi0gKiBQb2xsaW5nIG1hY2hpbmVyeS4KLSAqLwotCi1zdHJ1Y3QgZHN0X3BvbGxfaGVscGVyIHsKLQlwb2xsX3RhYmxlCQlwdDsKLQlzdHJ1Y3QgZHN0X3N0YXRlCSpzdDsKLX07Ci0KLXN0YXRpYyBpbnQgZHN0X3F1ZXVlX3dha2Uod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLAotCQlpbnQgc3luYywgdm9pZCAqa2V5KQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBkc3Rfc3RhdGUsIHdhaXQpOwotCi0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X3F1ZXVlX2Z1bmMoc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCwKLQkJCQkgcG9sbF90YWJsZSAqcHQpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBkc3RfcG9sbF9oZWxwZXIsIHB0KS0+c3Q7Ci0KLQlzdC0+d2hlYWQgPSB3aGVhZDsKLQlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZzdC0+d2FpdCwgZHN0X3F1ZXVlX3dha2UpOwotCWFkZF93YWl0X3F1ZXVlKHdoZWFkLCAmc3QtPndhaXQpOwotfQotCi12b2lkIGRzdF9wb2xsX2V4aXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaWYgKHN0LT53aGVhZCkgewotCQlyZW1vdmVfd2FpdF9xdWV1ZShzdC0+d2hlYWQsICZzdC0+d2FpdCk7Ci0JCXN0LT53aGVhZCA9IE5VTEw7Ci0JfQotfQotCi1pbnQgZHN0X3BvbGxfaW5pdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyIHBoOwotCi0JcGguc3QgPSBzdDsKLQlpbml0X3BvbGxfZnVuY3B0cigmcGgucHQsICZkc3RfcXVldWVfZnVuYyk7Ci0KLQlzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgJnBoLnB0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEhlYWRlciByZWNlaXZpbmcgZnVuY3Rpb24gLSBtYXkgYmxvY2suCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBibG9jaykKLXsKLQlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3Qga3ZlYyBpb3Y7Ci0JaW50IGVycjsKLQotCWlvdi5pb3ZfYmFzZSA9IGRhdGE7Ci0JaW92Lmlvdl9sZW4gPSBzaXplOwotCi0JbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKLQltc2cubXNnX2lvdmxlbiA9IDE7Ci0JbXNnLm1zZ19uYW1lID0gTlVMTDsKLQltc2cubXNnX25hbWVsZW4gPSAwOwotCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7Ci0JbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQltc2cubXNnX2ZsYWdzID0gKGJsb2NrKSA/IE1TR19XQUlUQUxMIDogTVNHX0RPTlRXQUlUOwotCi0JZXJyID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4sCi0JCQltc2cubXNnX2ZsYWdzKTsKLQlpZiAoZXJyICE9IHNpemUpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSGVhZGVyIHNlbmRpbmcgZnVuY3Rpb24gLSBtYXkgYmxvY2suCi0gKi8KLWludCBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG1vcmUpCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92OwotCWludCBlcnI7Ci0KLQlpb3YuaW92X2Jhc2UgPSBkYXRhOwotCWlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSAxOwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JbXNnLm1zZ19mbGFncyA9IE1TR19XQUlUQUxMIHwgKG1vcmUgPyBNU0dfTU9SRSA6IDApOwotCi0JZXJyID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4pOwotCWlmIChlcnIgIT0gc2l6ZSkgewotCQlkcHJpbnRrKCIlczogc2l6ZTogJXUsIG1vcmU6ICVkLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgc2l6ZSwgbW9yZSwgZXJyKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogQmxvY2sgYXV0b2NvbmZpZ3VyYXRpb246IHJlcXVlc3Qgc2l6ZSBvZiB0aGUgc3RvcmFnZSBhbmQgcGVybWlzc2lvbnMuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0KLQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKLQljbWQtPmNtZCA9IERTVF9DRkc7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlpZiAoY21kLT5jbWQgIT0gRFNUX0NGRykgewotCQllcnIgPSAtRUlOVkFMOwotCQlkcHJpbnRrKCIlczogY2hlY2tpbmcgcmVzdWx0OiBjbWQ6ICVkLCBzaXplIHJlcG9ydGVkOiAlbGx1LlxuIiwKLQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobi0+c2l6ZSAhPSAwKQotCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5zaXplLCBjbWQtPnNlY3Rvcik7Ci0JZWxzZQotCQluLT5zaXplID0gY21kLT5zZWN0b3I7Ci0KLQluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKLQlzdC0+cGVybWlzc2lvbnMgPSBjbWQtPnJ3OwotCi1vdXQ6Ci0JZHByaW50aygiJXM6IG46ICVwLCBlcnI6ICVkLCBzaXplOiAlbGx1LCBwZXJtaXNzaW9uOiAleC5cbiIsCi0JCQlfX2Z1bmNfXywgbiwgZXJyLCBuLT5zaXplLCBzdC0+cGVybWlzc2lvbnMpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTb2NrZXQgbWFjaGluZXJ5LgotICovCi0KLSNkZWZpbmUgRFNUX0RFRkFVTFRfVElNRU8JMjAwMDAKLQotaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKLQotCWVyciA9IHNvY2tfY3JlYXRlKGN0bC0+YWRkci5zYV9mYW1pbHksIGN0bC0+dHlwZSwgY3RsLT5wcm90bywgJnNvY2spOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0Jc29jay0+c2stPnNrX3NuZHRpbWVvID0gc29jay0+c2stPnNrX3JjdnRpbWVvID0KLQkJbXNlY3NfdG9famlmZmllcyhEU1RfREVGQVVMVF9USU1FTyk7Ci0Jc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKLQotCXN0LT5zb2NrZXQgPSBzdC0+cmVhZF9zb2NrZXQgPSBzb2NrOwotCXJldHVybiAwOwotfQotCi12b2lkIGRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkcHJpbnRrKCIlczogc3Q6ICVwLCBzb2NrZXQ6ICVwLCBuOiAlcC5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIHN0LT5zb2NrZXQsIHN0LT5ub2RlKTsKLQlpZiAoc3QtPnNvY2tldCkgewotCQlzb2NrX3JlbGVhc2Uoc3QtPnNvY2tldCk7Ci0JCXN0LT5zb2NrZXQgPSBOVUxMOwotCQlzdC0+cmVhZF9zb2NrZXQgPSBOVUxMOwotCX0KLX0KLQotdm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpCi17Ci0JaWYgKHNrLT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOwotCQlwcmludGsoS0VSTl9JTkZPICIlcyAldS4ldS4ldS4ldTolZC5cbiIsIHN0ciwKLQkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7Ci0JfSBlbHNlIGlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXBpNjolZCIsCi0JCQlzdHIsICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKLQl9Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWlmIChzdC0+c29ja2V0KSB7Ci0JCWRzdF9wb2xsX2V4aXQoc3QpOwotCQlzdC0+c29ja2V0LT5vcHMtPnNodXRkb3duKHN0LT5zb2NrZXQsIDIpOwotCi0JCWRzdF9kdW1wX2FkZHIoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCi0JCQkJIkRpc2Nvbm5lY3RlZCBwZWVyIik7Ci0JCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZzdC0+Y3RsOwotCi0JZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JZXJyID0ga2VybmVsX2Nvbm5lY3Qoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCi0JCQlzdC0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCi0JZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3JlbGVhc2U7Ci0KLQlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAotCQkJIkNvbm5lY3RlZCB0byBwZWVyIik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9yZWxlYXNlOgotCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFN0YXRlIHJlc2V0IGlzIHVzZWQgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgcGVlci4KLSAqIE1heSBmYWlsLCBidXQgd2hvIGNhcmVzLCB3ZSB3aWxsIHRyeSBhZ2FpbiBsYXRlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX3Jlc2V0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLX0KLQotLyoKLSAqIEJhc2ljIG5ldHdvcmsgc2VuZGluZy9yZWNlaXZpbmcgZnVuY3Rpb25zLgotICogQmxvY2tlZCBtb2RlIGlzIHVzZWQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9yYXcoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmJ1ZiwgdTY0IHNpemUpCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92OwotCWludCBlcnI7Ci0KLQlCVUdfT04oIXNpemUpOwotCi0JaW92Lmlvdl9iYXNlID0gYnVmOwotCWlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSAxOwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsKLQotCWVyciA9IGtlcm5lbF9yZWN2bXNnKHN0LT5zb2NrZXQsICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAotCQkJbXNnLm1zZ19mbGFncyk7Ci0JaWYgKGVyciA8PSAwKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gcmVjdiBkYXRhOiBzaXplOiAlbGx1LCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgc2l6ZSwgZXJyKTsKLQkJaWYgKGVyciA9PSAwKQotCQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0KLQkJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUGluZyBjb21tYW5kIHRvIGVhcmx5IGRldGVjdCBmYWlsZWQgbm9kZXMuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3NlbmRfcGluZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0JaW50IGVyciA9IC1FQ09OTlJFU0VUOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWlmIChzdC0+c29ja2V0KSB7Ci0JCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOwotCi0JCWNtZC0+Y21kID0gX19jcHVfdG9fYmUzMihEU1RfUElORyk7Ci0KLQkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAotCQkJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCX0KLQlkcHJpbnRrKCIlczogc3Q6ICVwLCBzb2NrZXQ6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sCi0JCQlzdCwgc3QtPnNvY2tldCwgZXJyKTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZpbmcgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBlaXRoZXIgcmV0dXJuIGVycm9yIG9yIHJlYWQKLSAqIHdob2xlIGJsb2NrIHJlcXVlc3QuIElmIHRoZXJlIHdhcyBubyB0cmFmZmljIGZvciBhIG9uZSBzZWNvbmQsCi0gKiBzZW5kIGEgcGluZywgc2luY2UgcmVtb3RlIG5vZGUgbWF5IGRpZS4KLSAqLwotaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKLQl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCWludCBlcnIgPSAwOwotCi0Jd2hpbGUgKHNpemUgJiYgIWVycikgewotCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCWlmICghKHJldmVudHMgJiBtYXNrKSkgewotCQkJREVGSU5FX1dBSVQod2FpdCk7Ci0KLQkJCWZvciAoOzspIHsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQsCi0JCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJCWJyZWFrOwotCi0JCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQkJCWlmIChyZXZlbnRzICYgbWFzaykKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KEhaKSkgewotCQkJCQllcnIgPSBkc3Rfc2VuZF9waW5nKHN0KTsKLQkJCQkJaWYgKGVycikKLQkJCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlmaW5pc2hfd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCk7Ci0JCX0KLQotCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJZHN0X3N0YXRlX2xvY2soc3QpOwotCi0JCWlmIChzdC0+c29ja2V0ICYmIChzdC0+cmVhZF9zb2NrZXQgPT0gc3QtPnNvY2tldCkgJiYKLQkJCQkocmV2ZW50cyAmIFBPTExJTikpIHsKLQkJCWVyciA9IGRzdF9kYXRhX3JlY3ZfcmF3KHN0LCBkYXRhLCBzaXplKTsKLQkJCWlmIChlcnIgPiAwKSB7Ci0JCQkJZGF0YSArPSBlcnI7Ci0JCQkJc2l6ZSAtPSBlcnI7Ci0JCQkJZXJyID0gMDsKLQkJCX0KLQkJfQotCi0JCWlmIChyZXZlbnRzICYgZXJyX21hc2sgfHwgIXN0LT5zb2NrZXQpIHsKLQkJCWRwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgc2l6ZTogJXUsICIKLQkJCQkJImVycjogJWQuXG4iLCBfX2Z1bmNfXywgcmV2ZW50cywKLQkJCQkJc3QtPnNvY2tldCwgc2l6ZSwgZXJyKTsKLQkJCWVyciA9IC1FQ09OTlJFU0VUOwotCQl9Ci0KLQkJZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQpCi0JCQllcnIgPSAtRU5PREVWOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTZW5kIGJsb2NrIGF1dG9jb25mIHJlcGx5LgotICovCi1zdGF0aWMgaW50IGRzdF9wcm9jZXNzX2NmZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0JaW50IGVycjsKLQotCWNtZC0+c2VjdG9yID0gbi0+c2l6ZTsKLQljbWQtPnJ3ID0gc3QtPnBlcm1pc3Npb25zOwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZlIGJsb2NrIElPIGZyb20gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlY3ZfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgYmlvICpiaW8sCi0JCXVuc2lnbmVkIGludCB0b3RhbF9zaXplKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgaSwgZXJyOwotCXZvaWQgKmRhdGE7Ci0JdW5zaWduZWQgaW50IHN6OwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlzeiA9IG1pbih0b3RhbF9zaXplLCBidi0+YnZfbGVuKTsKLQotCQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCB0b3RhbDogJXUsIGxlbjogJXUsIHN6OiAldSwgIgotCQkJCSJvZmY6ICV1LlxuIiwgX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsCi0JCQkJYmlvLT5iaV9zaXplLCB0b3RhbF9zaXplLCBidi0+YnZfbGVuLCBzeiwKLQkJCQlidi0+YnZfb2Zmc2V0KTsKLQotCQlkYXRhID0ga21hcChidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OwotCQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBkYXRhLCBzeik7Ci0JCWt1bm1hcChidi0+YnZfcGFnZSk7Ci0KLQkJYnYtPmJ2X2xlbiA9IHN6OwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCXRvdGFsX3NpemUgLT0gc3o7Ci0JCWlmICh0b3RhbF9zaXplID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE91ciBibG9jayBJTyBoYXMganVzdCBjb21wbGV0ZWQgYW5kIGFycml2ZWQ6IGdldCBpdC4KLSAqLwotc3RhdGljIGludCBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0Jc3RydWN0IGRzdF90cmFucyAqdDsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0KLQltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKLQl0ID0gZHN0X3RyYW5zX3NlYXJjaChuLCBjbWQtPmlkKTsKLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JaWYgKCF0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWJpbyA9IHQtPmJpbzsKLQotCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIGNtZF9zaXplOiAldSwgY3NpemU6ICV1LCBkaXI6ICVsdS5cbiIsCi0JCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGNtZC0+c2l6ZSwKLQkJY21kLT5jc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpIHsKLQkJaWYgKGJpby0+Ymlfc2l6ZSAhPSBjbWQtPnNpemUgLSBjbWQtPmNzaXplKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkgewotCQkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHQtPmNtZC5oYXNoKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JCX0KLQotCQllcnIgPSBkc3RfcmVjdl9iaW8oc3QsIHQtPmJpbywgYmlvLT5iaV9zaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8obikpCi0JCQlyZXR1cm4gZHN0X3RyYW5zX2NyeXB0byh0KTsKLQl9IGVsc2UgewotCQllcnIgPSAtRUJBRE1TRzsKLQkJaWYgKGNtZC0+c2l6ZSB8fCBjbWQtPmNzaXplKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JZHN0X3RyYW5zX3JlbW92ZSh0KTsKLQlkc3RfdHJhbnNfcHV0KHQpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2ZSBjcnlwdG8gZGF0YS4KLSAqLwotaW50IGRzdF9yZWN2X2NkYXRhKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpjZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKLQlpbnQgZXJyOwotCi0JaWYgKGNtZC0+Y3NpemUgIT0gYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpIHsKLQkJZHByaW50aygiJXM6IGNtZDogY21kOiAldSwgc2VjdG9yOiAlbGx1LCBzaXplOiAldSwgIgotCQkJCSJjc2l6ZTogJXUgIT0gZGlnZXN0IHNpemUgJXUuXG4iLAotCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IsIGNtZC0+c2l6ZSwKLQkJCQljbWQtPmNzaXplLCBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGNkYXRhLCBjbWQtPmNzaXplKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWNtZC0+c2l6ZSAtPSBjbWQtPmNzaXplOwotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmUgdGhlIGNvbW1hbmQgYW5kIHN0YXJ0IGl0cyBwcm9jZXNzaW5nLgotICovCi1zdGF0aWMgaW50IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaW50IGVyciA9IC1FSU5UUjsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0KLQkvKgotCSAqIElmIHNvY2tldCB3aWxsIGJlIHJlc2V0IGFmdGVyIHRoaXMgc3RhdGVtZW50LCB0aGVuCi0JICogZHN0X2RhdGFfcmVjdigpIHdpbGwganVzdCBmYWlsIGFuZCBsb29wIHdpbGwKLQkgKiBzdGFydCBhZ2Fpbiwgc28gaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja3MuCi0JICoKLQkgKiBzdC0+cmVhZF9zb2NrZXQgaXMgbmVlZGVkIHRvIHByZXZlbnRzIHN0YXRlIG1hY2hpbmUKLQkgKiBicmVha2luZyBiZXR3ZWVuIHRoaXMgZGF0YSByZWFkaW5nIGFuZCBzdWJzZXF1ZW50IG9uZQotCSAqIGluIHByb3RvY29sIHNwZWNpZmljIGZ1bmN0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiByZXNldC4KLQkgKiBJbiBjYXNlIG9mIHJlc2V0IHdlIGhhdmUgdG8gcmVhZCBuZXh0IGNvbW1hbmQgYW5kIGRvCi0JICogbm90IGV4cGVjdCBkYXRhIGZvciBvbGQgY29tbWFuZCB0byBtYWdpY2FsbHkgYXBwZWFyIGluCi0JICogbmV3IGNvbm5lY3Rpb24uCi0JICovCi0Jc3QtPnJlYWRfc29ja2V0ID0gc3QtPnNvY2tldDsKLQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2V4aXQ7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWRwcmludGsoIiVzOiBjbWQ6ICV1LCBzaXplOiAldSwgY3NpemU6ICV1LCBpZDogJWxsdSwgIgotCQkJInNlY3RvcjogJWxsdSwgZmxhZ3M6ICVsbHgsIHJ3OiAlbGx4LlxuIiwKLQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zaXplLAotCQkJY21kLT5jc2l6ZSwgY21kLT5pZCwgY21kLT5zZWN0b3IsCi0JCQljbWQtPmZsYWdzLCBjbWQtPnJ3KTsKLQotCS8qCi0JICogVGhpcyBzaG91bGQgY2F0Y2ggcHJvdG9jb2wgYnJlYWthZ2UgYW5kIHJhbmRvbSBnYXJiYWdlCi0JICogaW5zdGVhZCBvZiBjb21tYW5kcy4KLQkgKi8KLQlpZiAodW5saWtlbHkoY21kLT5jc2l6ZSA+IHN0LT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSkpIHsKLQkJZXJyID0gLUVCQURNU0c7Ci0JCWdvdG8gb3V0X2V4aXQ7Ci0JfQotCi0JZXJyID0gLUVQUk9UTzsKLQlzd2l0Y2ggKGNtZC0+Y21kKSB7Ci0JY2FzZSBEU1RfSU9fUkVTUE9OU0U6Ci0JCWVyciA9IGRzdF9wcm9jZXNzX2lvX3Jlc3BvbnNlKHN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1RfSU86Ci0JCWVyciA9IGRzdF9wcm9jZXNzX2lvKHN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1RfQ0ZHOgotCQllcnIgPSBkc3RfcHJvY2Vzc19jZmcoc3QpOwotCQlicmVhazsKLQljYXNlIERTVF9QSU5HOgotCQllcnIgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLW91dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZpbmcgdGhyZWFkLiBGb3IgdGhlIGNsaWVudCBub2RlIHdlIHNob3VsZCB0cnkgdG8gcmVjb25uZWN0LAotICogZm9yIGFjY2VwdGVkIGNsaWVudCB3ZSBqdXN0IGRyb3AgdGhlIHN0YXRlIGFuZCBleHBlY3QgaXQgdG8gcmVjb25uZWN0LgotICovCi1zdGF0aWMgaW50IGRzdF9yZWN2KHZvaWQgKmluaXRfZGF0YSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHNjaGVkdWxlX2RhdGE7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gaW5pdF9kYXRhOwotCWludCBlcnIgPSAwOwotCi0JZHByaW50aygiJXM6IHN0YXJ0IHN0OiAlcCwgbjogJXAsIHNjYW46ICVsdSwgbmVlZF9leGl0OiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIG4sIG4tPnRyYW5zX3NjYW5fdGltZW91dCwgc3QtPm5lZWRfZXhpdCk7Ci0KLQl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0ICYmICFzdC0+bmVlZF9leGl0KSB7Ci0JCWVyciA9IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3QpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJaWYgKCFzdC0+Y3RsLnR5cGUpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJYnJlYWs7Ci0KLQkJCWRzdF9zdGF0ZV9yZXNldChzdCk7Ci0JCQltc2xlZXAoMTAwMCk7Ci0JCX0KLQl9Ci0KLQlzdC0+bmVlZF9leGl0ID0gMTsKLQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotCi0JZHByaW50aygiJXM6IGZyZWVpbmcgcmVjZWl2aW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOwotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCWRzdF9zdGF0ZV9wdXQoc3QpOwotCi0JZHByaW50aygiJXM6IGZyZWVkIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBOZXR3b3JrIHN0YXRlIGRpZXMgaGVyZSBhbmQgYm9ybnMgY291cGxlIG9mIGxpbmVzIGJlbG93LgotICogVGhpcyBvYmplY3QgaXMgdGhlIG1haW4gbmV0d29yayBzdGF0ZSBwcm9jZXNzaW5nIGVuZ2luZToKLSAqIHNlbmRpbmcsIHJlY2VpdmluZywgcmVjb25uZWN0aW9ucywgYWxsIG5ldHdvcmsgcmVsYXRlZAotICogdGFza3MgYXJlIGhhbmRsZWQgb24gYmVoYWxmIG9mIHRoZSBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3N0YXRlX2ZyZWUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHByaW50aygiJXM6IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7Ci0JaWYgKHN0LT5jbGVhbnVwKQotCQlzdC0+Y2xlYW51cChzdCk7Ci0Ja2ZyZWUoc3QtPmRhdGEpOwotCWtmcmVlKHN0KTsKLX0KLQotc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghc3QpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0Jc3QtPm5vZGUgPSBuOwotCXN0LT5uZWVkX2V4aXQgPSAwOwotCi0Jc3QtPnNpemUgPSBQQUdFX1NJWkU7Ci0Jc3QtPmRhdGEgPSBrbWFsbG9jKHN0LT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0LT5kYXRhKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCXNwaW5fbG9ja19pbml0KCZzdC0+cmVxdWVzdF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmc3QtPnJlcXVlc3RfbGlzdCk7Ci0KLQltdXRleF9pbml0KCZzdC0+c3RhdGVfbG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc3QtPnRocmVhZF93YWl0KTsKLQotCS8qCi0JICogT25lIGZvciBwcm9jZXNzaW5nIHRocmVhZCwgYW5vdGhlciBvbmUgZm9yIG5vZGUgaXRzZWxmLgotCSAqLwotCWF0b21pY19zZXQoJnN0LT5yZWZjbnQsIDIpOwotCi0JZHByaW50aygiJXM6IHN0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgc3QsIHN0LT5ub2RlKTsKLQotCXJldHVybiBzdDsKLQotZXJyX291dF9mcmVlOgotCWtmcmVlKHN0KTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1pbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0LT5ub2RlLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAotCQkJZHN0X3JlY3YsIHN0LCBNQVhfU0NIRURVTEVfVElNRU9VVCwgc3QtPm5vZGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjbGllbnQncyBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgcGVlcjogYWxsb2NhdGUgc3RhdGUsCi0gKiBjb25uZWN0IGFuZCBwZXJmb3JtIGJsb2NrIElPIGF1dG9jb25maWd1cmF0aW9uLgotICovCi1pbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0Jc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7Ci0JaWYgKElTX0VSUihzdCkpIHsKLQkJZXJyID0gUFRSX0VSUihzdCk7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQltZW1jcHkoJnN0LT5jdGwsIHIsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlX2RhdGE7Ci0KLQllcnIgPSBkc3RfcmVxdWVzdF9yZW1vdGVfY29uZmlnKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdF9jb25uZWN0ZWQ7Ci0Jbi0+c3RhdGUgPSBzdDsKLQotCWVyciA9IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdF9jb25uZWN0ZWQ6Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLWVycl9vdXRfZnJlZV9kYXRhOgotCWRzdF9zdGF0ZV9mcmVlKHN0KTsKLWVycl9vdXRfZXhpdDoKLQluLT5zdGF0ZSA9IE5VTEw7Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQuXG4iLAotCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdC0+cmVmY250KSkKLQkJZHN0X3N0YXRlX2ZyZWUoc3QpOwotfQotCi0vKgotICogU2VuZCBibG9jayBJTyB0byB0aGUgbmV0d29yayBvbmUgYnkgb25lIHVzaW5nIHplcm8tY29weSAtPnNlbmRwYWdlKCkuCi0gKi8KLWludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJnN0LT5ub2RlLT5jcnlwdG87Ci0JaW50IGVyciwgaSA9IDA7Ci0JaW50IGZsYWdzID0gTVNHX1dBSVRBTEw7Ci0KLQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCi0JCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCkgKyBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwgYmlvLT5iaV92Y250KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJaWYgKGkgPCBiaW8tPmJpX3ZjbnQgLSAxKQotCQkJZmxhZ3MgfD0gTVNHX01PUkU7Ci0KLQkJZXJyID0ga2VybmVsX3NlbmRwYWdlKHN0LT5zb2NrZXQsIGJ2LT5idl9wYWdlLCBidi0+YnZfb2Zmc2V0LAotCQkJCWJ2LT5idl9sZW4sIGZsYWdzKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlkcHJpbnRrKCIlczogJWQvJWQsIGZsYWdzOiAleCwgZXJyOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgaSwgYmlvLT5iaV92Y250LCBmbGFncywgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2VuZCB0cmFuc2FjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXIuCi0gKi8KLWludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSB0LT5uLT5zdGF0ZTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0KLQlkc3RfY29udmVydF9jbWQoJnQtPmNtZCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKCFzdC0+c29ja2V0KSB7Ci0JCWVyciA9IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0KLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3Rfc2VuZF9iaW8oc3QsICZ0LT5jbWQsIHQtPmJpbyk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgJnQtPmNtZCwKLQkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQl9Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3Jlc2V0OwotCi0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVzZXQ6Ci0JZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7Ci1lcnJfb3V0X3VubG9jazoKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YTgyYjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKgotICogVGhyZWFkIHBvb2wgYWJzdHJhY3Rpb24gYWxsb3dzIHRvIHNjaGVkdWxlIGEgd29yayB0byBiZSBwZXJmb3JtZWQKLSAqIG9uIGJlaGFsZiBvZiBrZXJuZWwgdGhyZWFkLiBPbmUgZG9lcyBub3Qgb3BlcmF0ZSB3aXRoIHRocmVhZHMgaXRzZWxmLAotICogaW5zdGVhZCB1c2VyIHByb3ZpZGVzIHNldHVwIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBmb3IgdGhyZWFkIHBvb2wgaXRzZWxmLAotICogYW5kIGFjdGlvbiBhbmQgY2xlYW51cCBjYWxsYmFja3MgZm9yIGVhY2ggc3VibWl0dGVkIHdvcmsuCi0gKgotICogRWFjaCB3b3JrZXIgaGFzIHByaXZhdGUgZGF0YSBpbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIGFuZCBkYXRhLAotICogcHJvdmlkZWQgYnkgdXNlciBhdCBzY2hlZHVsaW5nIHRpbWUuCi0gKgotICogV2hlbiBhY3Rpb24gaXMgYmVpbmcgcGVyZm9ybWVkLCB0aHJlYWQgY2FuIG5vdCBiZSB1c2VkIGJ5IG90aGVyIHVzZXJzLAotICogaW5zdGVhZCB0aGV5IHdpbGwgc2xlZXAgdW50aWwgdGhlcmUgaXMgZnJlZSB0aHJlYWQgdG8gcGljayB0aGVpciB3b3JrLgotICovCi1zdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtlcl9lbnRyeTsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOwotCi0Jc3RydWN0IHRocmVhZF9wb29sCSpwb29sOwotCi0JaW50CQkJZXJyb3I7Ci0JaW50CQkJaGFzX2RhdGE7Ci0JaW50CQkJbmVlZF9leGl0OwotCXVuc2lnbmVkIGludAkJaWQ7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotCi0Jdm9pZAkJCSpwcml2YXRlOwotCXZvaWQJCQkqc2NoZWR1bGVfZGF0YTsKLQotCWludAkJCSgqYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpzY2hlZHVsZV9kYXRhKTsKLQl2b2lkCQkJKCpjbGVhbnVwKSh2b2lkICpwcml2YXRlKTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRocmVhZF9wb29sX2V4aXRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncpCi17Ci0Ja3RocmVhZF9zdG9wKHctPnRocmVhZCk7Ci0KLQl3LT5jbGVhbnVwKHctPnByaXZhdGUpOwotCWtmcmVlKHcpOwotfQotCi0vKgotICogQ2FsbGVkIHRvIG1hcmsgdGhyZWFkIGFzIHJlYWR5IGFuZCBhbGxvdyB1c2VycyB0byBzY2hlZHVsZSBuZXcgd29yay4KLSAqLwotc3RhdGljIHZvaWQgdGhyZWFkX3Bvb2xfd29ya2VyX21ha2VfcmVhZHkoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdykKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAgPSB3LT5wb29sOwotCi0JbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JaWYgKCF3LT5uZWVkX2V4aXQpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOwotCQl3LT5oYXNfZGF0YSA9IDA7Ci0JCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JCXdha2VfdXAoJnAtPndhaXQpOwotCX0gZWxzZSB7Ci0JCXAtPnRocmVhZF9udW0tLTsKLQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7Ci0JCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotCX0KLX0KLQotLyoKLSAqIFRocmVhZCBhY3Rpb24gbG9vcDogd2FpdHMgdW50aWwgdGhlcmUgaXMgbmV3IHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgdGhyZWFkX3Bvb2xfd29ya2VyX2Z1bmModm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3ID0gZGF0YTsKLQotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3LT53YWl0LAotCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHctPmhhc19kYXRhKTsKLQotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCF3LT5oYXNfZGF0YSkKLQkJCWNvbnRpbnVlOwotCi0JCXctPmFjdGlvbih3LT5wcml2YXRlLCB3LT5zY2hlZHVsZV9kYXRhKTsKLQkJdGhyZWFkX3Bvb2xfd29ya2VyX21ha2VfcmVhZHkodyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgc2luZ2xlIHdvcmtlciB3aXRob3V0IHNwZWNpZnlpbmcgd2hpY2ggb25lLgotICovCi12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncgPSBOVUxMOwotCi0Jd2hpbGUgKCF3ICYmIHAtPnRocmVhZF9udW0pIHsKLQkJd2FpdF9ldmVudChwLT53YWl0LCAhbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCkgfHwKLQkJCQkhcC0+dGhyZWFkX251bSk7Ci0KLQkJZHByaW50aygiJXM6IGxvY2tpbmcgbGlzdF9lbXB0eTogJWQsIHRocmVhZF9udW06ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksCi0JCQkJcC0+dGhyZWFkX251bSk7Ci0KLQkJbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCQlpZiAoIWxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpKSB7Ci0JCQl3ID0gbGlzdF9maXJzdF9lbnRyeSgmcC0+cmVhZHlfbGlzdCwKLQkJCQkJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciwKLQkJCQkJd29ya2VyX2VudHJ5KTsKLQotCQkJZHByaW50aygiJXM6IGRlbGV0aW5nIHc6ICVwLCB0aHJlYWRfbnVtOiAlZCwgIgotCQkJCQkibGlzdDogJXAgWyVwLiVwXS5cbiIsIF9fZnVuY19fLAotCQkJCQl3LCBwLT50aHJlYWRfbnVtLCAmcC0+cmVhZHlfbGlzdCwKLQkJCQkJcC0+cmVhZHlfbGlzdC5wcmV2LCBwLT5yZWFkeV9saXN0Lm5leHQpOwotCi0JCQlwLT50aHJlYWRfbnVtLS07Ci0JCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJfQotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQl9Ci0KLQlpZiAodykKLQkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Ci0JZHByaW50aygiJXM6IGRlbGV0ZWQgdzogJXAsIHRocmVhZF9udW06ICVkLlxuIiwKLQkJCV9fZnVuY19fLCB3LCBwLT50aHJlYWRfbnVtKTsKLX0KLQotLyoKLSAqIFJlbW92ZSBhIHdvcmtlciB3aXRoIGdpdmVuIElELgotICovCi12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQoc3RydWN0IHRocmVhZF9wb29sICpwLCB1bnNpZ25lZCBpbnQgaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdzsKLQlpbnQgZm91bmQgPSAwOwotCi0JbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQlpZiAody0+aWQgPT0gaWQpIHsKLQkJCWZvdW5kID0gMTsKLQkJCXAtPnRocmVhZF9udW0tLTsKLQkJCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJnAtPmFjdGl2ZV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJCWlmICh3LT5pZCA9PSBpZCkgewotCQkJCXctPm5lZWRfZXhpdCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQlpZiAoZm91bmQpCi0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotfQotCi0vKgotICogQWRkIG5ldyB3b3JrZXIgdGhyZWFkIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4KLSAqIElmIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGZhaWxzLCByZXR1cm4gZXJyb3IuCi0gKi8KLWludCB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJY2hhciAqbmFtZSwKLQkJdW5zaWduZWQgaW50IGlkLAotCQl2b2lkICooKmluaXQpKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICgqY2xlYW51cCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdzsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXctPnBvb2wgPSBwOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnctPndhaXQpOwotCXctPmNsZWFudXAgPSBjbGVhbnVwOwotCXctPmlkID0gaWQ7Ci0KLQl3LT50aHJlYWQgPSBrdGhyZWFkX3J1bih0aHJlYWRfcG9vbF93b3JrZXJfZnVuYywgdywgIiVzIiwgbmFtZSk7Ci0JaWYgKElTX0VSUih3LT50aHJlYWQpKSB7Ci0JCWVyciA9IFBUUl9FUlIody0+dGhyZWFkKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQotCi0Jdy0+cHJpdmF0ZSA9IGluaXQocHJpdmF0ZSk7Ci0JaWYgKElTX0VSUih3LT5wcml2YXRlKSkgewotCQllcnIgPSBQVFJfRVJSKHctPnByaXZhdGUpOwotCQlnb3RvIGVycl9vdXRfc3RvcF90aHJlYWQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOwotCXAtPnRocmVhZF9udW0rKzsKLQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3N0b3BfdGhyZWFkOgotCWt0aHJlYWRfc3RvcCh3LT50aHJlYWQpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKHcpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBEZXN0cm95IHRoZSB3aG9sZSBwb29sLgotICovCi12b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKQotewotCXdoaWxlIChwLT50aHJlYWRfbnVtKSB7Ci0JCWRwcmludGsoIiVzOiBudW06ICVkLlxuIiwgX19mdW5jX18sIHAtPnRocmVhZF9udW0pOwotCQl0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHApOwotCX0KLQotCWtmcmVlKHApOwotfQotCi0vKgotICogQ3JlYXRlIGEgcG9vbCB3aXRoIGdpdmVuIG51bWJlciBvZiB0aHJlYWRzLgotICogVGhleSB3aWxsIGhhdmUgc2VxdWVudGlhbCBJRHMgc3RhcnRlZCBmcm9tIHplcm8uCi0gKi8KLXN0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCi0JCXZvaWQgKigqaW5pdCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKCpjbGVhbnVwKSh2b2lkICpwcml2YXRlKSwKLQkJdm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3LCAqdG1wOwotCXN0cnVjdCB0aHJlYWRfcG9vbCAqcDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQlpbnQgaTsKLQotCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2wpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXApCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcC0+d2FpdCk7Ci0JbXV0ZXhfaW5pdCgmcC0+dGhyZWFkX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZwLT5yZWFkeV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+YWN0aXZlX2xpc3QpOwotCXAtPnRocmVhZF9udW0gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0JCWVyciA9IHRocmVhZF9wb29sX2FkZF93b3JrZXIocCwgbmFtZSwgaSwgaW5pdCwKLQkJCQljbGVhbnVwLCBwcml2YXRlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlX2FsbDsKLQl9Ci0KLQlyZXR1cm4gcDsKLQotZXJyX291dF9mcmVlX2FsbDoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodywgdG1wLCAmcC0+cmVhZHlfbGlzdCwgd29ya2VyX2VudHJ5KSB7Ci0JCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLQl9Ci0Ja2ZyZWUocCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIG9uIGEgZ2l2ZW4gdGhyZWFkLAotICogcHJvdmlkZWQgSUQgcG9pbnRlciBoYXMgdG8gbWF0Y2ggcHJldmlvdXNseSBzdG9yZWQKLSAqIHByaXZhdGUgZGF0YS4KLSAqLwotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCpzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCWludCAoKmFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdywgKnRtcCwgKndvcmtlciA9IE5VTEw7Ci0JaW50IGVyciA9IDA7Ci0KLQl3aGlsZSAoIXdvcmtlciAmJiAhZXJyKSB7Ci0JCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwLT53YWl0LAotCQkJCSFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSwKLQkJCQl0aW1lb3V0KTsKLQotCQlpZiAoIXRpbWVvdXQpIHsKLQkJCWVyciA9IC1FVElNRURPVVQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCXdvcmtlciA9IE5VTEw7Ci0JCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQkJaWYgKGlkICYmIGlkICE9IHctPnByaXZhdGUpCi0JCQkJY29udGludWU7Ci0KLQkJCXdvcmtlciA9IHc7Ci0KLQkJCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5hY3RpdmVfbGlzdCk7Ci0KLQkJCWVyciA9IHNldHVwKHctPnByaXZhdGUsIGRhdGEpOwotCQkJaWYgKCFlcnIpIHsKLQkJCQl3LT5zY2hlZHVsZV9kYXRhID0gZGF0YTsKLQkJCQl3LT5hY3Rpb24gPSBhY3Rpb247Ci0JCQkJdy0+aGFzX2RhdGEgPSAxOwotCQkJCXdha2VfdXAoJnctPndhaXQpOwotCQkJfSBlbHNlIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LAotCQkJCQkJJnAtPnJlYWR5X2xpc3QpOwotCQkJfQotCi0JCQlicmVhazsKLQkJfQotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2NoZWR1bGUgZXhlY3V0aW9uIG9uIGFyYml0cmFyeSB0aHJlYWQgZnJvbSB0aGUgcG9vbC4KLSAqLwotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJaW50ICgqc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQlpbnQgKCphY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQpCi17Ci0JcmV0dXJuIHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUocCwgc2V0dXAsCi0JCQlhY3Rpb24sIGRhdGEsIHRpbWVvdXQsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzM2YTZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLQotLyoKLSAqIFRyYW5zYWN0aW9uIG1lbW9yeSBwb29sIHNpemUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X21lbXBvb2xfbnVtID0gMzI7Ci1tb2R1bGVfcGFyYW0oZHN0X21lbXBvb2xfbnVtLCBpbnQsIDA2NDQpOwotCi0vKgotICogVHJhbnNhY3Rpb24gdHJlZSBtYW5hZ2VtZW50LgotICovCi1zdGF0aWMgaW5saW5lIGludCBkc3RfdHJhbnNfY21wKGRzdF9nZW5fdCBnZW4sIGRzdF9nZW5fdCBuZXcpCi17Ci0JaWYgKGdlbiA8IG5ldykKLQkJcmV0dXJuIDE7Ci0JaWYgKGdlbiA+IG5ldykKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHN0X3RyYW5zICpkc3RfdHJhbnNfc2VhcmNoKHN0cnVjdCBkc3Rfbm9kZSAqbm9kZSwgZHN0X2dlbl90IGdlbikKLXsKLQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZub2RlLT50cmFuc19yb290OwotCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0LCAqcmV0ID0gTlVMTDsKLQlpbnQgY21wOwotCi0Jd2hpbGUgKG4pIHsKLQkJdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgZ2VuKTsKLQkJaWYgKGNtcCA8IDApCi0JCQluID0gbi0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wID4gMCkKLQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQlyZXQgPSB0OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlkcHJpbnRrKCIlczogJXMgdHJhbnNhY3Rpb246IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sCi0JCQkocmV0KSA/ICJmb3VuZCIgOiAibm90IGZvdW5kIiwgZ2VuKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X3RyYW5zX2luc2VydChzdHJ1Y3QgZHN0X3RyYW5zICpuZXcpCi17Ci0Jc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmbmV3LT5uLT50cmFuc19yb290OwotCXN0cnVjdCByYl9ub2RlICoqbiA9ICZyb290LT5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgZHN0X3RyYW5zICpyZXQgPSBOVUxMLCAqdDsKLQlpbnQgY21wOwotCi0Jd2hpbGUgKCpuKSB7Ci0JCXBhcmVudCA9ICpuOwotCi0JCXQgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgbmV3LT5nZW4pOwotCQlpZiAoY21wIDwgMCkKLQkJCW4gPSAmcGFyZW50LT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPiAwKQotCQkJbiA9ICZwYXJlbnQtPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCXJldCA9IHQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCW5ldy0+c2VuZF90aW1lID0gamlmZmllczsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpc3Q6IG9sZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsICIKLQkJCSJzZW5kX3RpbWU6ICVsdSwgbmV3OiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgIgotCQkJInNlbmRfdGltZTogJWx1LlxuIiwgX19mdW5jX18sCi0JCQlyZXQtPmdlbiwgKHU2NClyZXQtPmJpby0+Ymlfc2VjdG9yLAotCQkJcmV0LT5iaW8tPmJpX3NpemUsIHJldC0+c2VuZF90aW1lLAotCQkJbmV3LT5nZW4sICh1NjQpbmV3LT5iaW8tPmJpX3NlY3RvciwKLQkJCW5ldy0+YmlvLT5iaV9zaXplLCBuZXctPnNlbmRfdGltZSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCXJiX2xpbmtfbm9kZSgmbmV3LT50cmFuc19lbnRyeSwgcGFyZW50LCBuKTsKLQlyYl9pbnNlcnRfY29sb3IoJm5ldy0+dHJhbnNfZW50cnksIHJvb3QpOwotCi0JZHByaW50aygiJXM6IGluc2VydGVkOiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgc2VuZF90aW1lOiAlbHUuXG4iLAotCQlfX2Z1bmNfXywgbmV3LT5nZW4sICh1NjQpbmV3LT5iaW8tPmJpX3NlY3RvciwKLQkJbmV3LT5iaW8tPmJpX3NpemUsIG5ldy0+c2VuZF90aW1lKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCi0JaWYgKHQtPnRyYW5zX2VudHJ5LnJiX3BhcmVudF9jb2xvcikgewotCQlyYl9lcmFzZSgmdC0+dHJhbnNfZW50cnksICZuLT50cmFuc19yb290KTsKLQkJdC0+dHJhbnNfZW50cnkucmJfcGFyZW50X2NvbG9yID0gMDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc3RfdHJhbnNfcmVtb3ZlKHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JcmV0ID0gZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2sodCk7Ci0JbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBXaGVuIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgdXNlcnMsCi0gKiB3ZSBjb21wbGV0ZSBhcHByaWF0ZSBibG9jayBJTyByZXF1ZXN0IHdpdGggZ2l2ZW4gZXJyb3Igc3RhdHVzLgotICovCi12b2lkIGRzdF90cmFuc19wdXQoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdC0+cmVmY250KSkgewotCQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0KLQkJZHByaW50aygiJXM6IGNvbXBsZXRlZCB0OiAlcCwgZ2VuOiAlbGx1LCBiaW86ICVwLlxuIiwKLQkJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBiaW8pOwotCi0JCWJpb19lbmRpbyhiaW8sIHQtPmVycm9yKTsKLQkJYmlvX3B1dChiaW8pOwotCi0JCWRzdF9ub2RlX3B1dCh0LT5uKTsKLQkJbWVtcG9vbF9mcmVlKHQsIHQtPm4tPnRyYW5zX3Bvb2wpOwotCX0KLX0KLQotLyoKLSAqIFByb2Nlc3MgZ2l2ZW4gYmxvY2sgSU8gcmVxdWVzdDogYWxsb2NhdGUgdHJhbnNhY3Rpb24sIGluc2VydCBpdCBpbnRvIHRoZSB0cmVlCi0gKiBhbmQgc2VuZC9zY2hlZHVsZSBjcnlwdG8gcHJvY2Vzc2luZy4KLSAqLwotaW50IGRzdF9wcm9jZXNzX2JpbyhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JdCA9IG1lbXBvb2xfYWxsb2Mobi0+dHJhbnNfcG9vbCwgR0ZQX05PRlMpOwotCWlmICghdCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQl0LT5uID0gZHN0X25vZGVfZ2V0KG4pOwotCXQtPmJpbyA9IGJpbzsKLQl0LT5lcnJvciA9IDA7Ci0JdC0+cmV0cmllcyA9IDA7Ci0JYXRvbWljX3NldCgmdC0+cmVmY250LCAxKTsKLQl0LT5nZW4gPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKCZuLT5nZW4pOwotCi0JdC0+ZW5jID0gYmlvX2RhdGFfZGlyKGJpbyk7Ci0JZHN0X2Jpb190b19jbWQoYmlvLCAmdC0+Y21kLCBEU1RfSU8sIHQtPmdlbik7Ci0KLQltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKLQllcnIgPSBkc3RfdHJhbnNfaW5zZXJ0KHQpOwotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlkcHJpbnRrKCIlczogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIGRpci9lbmM6ICVkLCBuZWVkX2NyeXB0bzogJWQuXG4iLAotCQkJX19mdW5jX18sIHQtPmdlbiwgKHU2NCliaW8tPmJpX3NlY3RvciwKLQkJCWJpby0+Ymlfc2l6ZSwgdC0+ZW5jLCBkc3RfbmVlZF9jcnlwdG8obikpOwotCi0JaWYgKGRzdF9uZWVkX2NyeXB0byhuKSAmJiB0LT5lbmMpCi0JCWRzdF90cmFuc19jcnlwdG8odCk7Ci0JZWxzZQotCQlkc3RfdHJhbnNfc2VuZCh0KTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JZHN0X25vZGVfcHV0KG4pOwotCW1lbXBvb2xfZnJlZSh0LCBuLT50cmFuc19wb29sKTsKLWVycl9vdXRfZXhpdDoKLQliaW9fZW5kaW8oYmlvLCBlcnIpOwotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2NhbiBmb3IgdGltZW91dC9zdGFsZSB0cmFuc2FjdGlvbnMuCi0gKiBFYWNoIHRyYW5zYWN0aW9uIGlzIGJlaW5nIHJlc2VudCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgZXJyb3IgY29tcGxldGlvbi4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3RyYW5zX3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHN0X25vZGUsCi0JCQl0cmFuc193b3JrLndvcmspOwotCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbi0+dHJhbnNfc2Nhbl90aW1lb3V0OwotCWludCBudW0gPSAxMCAqIG4tPnRyYW5zX21heF9yZXRyaWVzOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgewotCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOwotCi0JCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIodC0+c2VuZF90aW1lICsgdGltZW91dCwgamlmZmllcykKLQkJCQkmJiB0LT5yZXRyaWVzID09IDApCi0JCQlicmVhazsKLSNpZiAwCi0JCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcywgcmV0cmllczogJXUsIG1heDogJXUuXG4iLAotCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSwKLQkJCXQtPnJldHJpZXMsIG4tPnRyYW5zX21heF9yZXRyaWVzKTsKLSNlbmRpZgotCQlpZiAoLS1udW0gPT0gMCkKLQkJCWJyZWFrOwotCi0JCWRzdF90cmFuc19nZXQodCk7Ci0KLQkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7Ci0KLQkJaWYgKHRpbWVvdXQgJiYgKCsrdC0+cmV0cmllcyA8IG4tPnRyYW5zX21heF9yZXRyaWVzKSkgewotCQkJZHN0X3RyYW5zX3NlbmQodCk7Ci0JCX0gZWxzZSB7Ci0JCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7Ci0JCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKLQkJCWRzdF90cmFuc19wdXQodCk7Ci0JCX0KLQotCQlkc3RfdHJhbnNfcHV0KHQpOwotCX0KLQotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQkvKgotCSAqIElmIG5vIHRpbWVvdXQgc3BlY2lmaWVkIHRoZW4gc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgZXhpdGluZwotCSAqIHByb2Nlc3MsIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBzY2FubmluZyBwcm9jZXNzIGFnYWluLgotCSAqLwotCWlmICh0aW1lb3V0KSB7Ci0JCWlmICghbnVtKQotCQkJdGltZW91dCA9IEhaOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm4tPnRyYW5zX3dvcmssIHRpbWVvdXQpOwotCX0KLX0KLQotLyoKLSAqIEZsdXNoIGFsbCB0cmFuc2FjdGlvbnMgYW5kIG1hcmsgdGhlbSBhcyB0aW1lZCBvdXQuCi0gKiBEZXN0cm95IHRyYW5zYWN0aW9uIHBvb2xzLgotICovCi12b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0Jc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Ci0KLQlpZiAoIW4tPnRyYW5zX2NhY2hlKQotCQlyZXR1cm47Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIGNhbmNlbGxpbmcgdGhlIHdvcmsuXG4iLCBfX2Z1bmNfXywgbik7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZuLT50cmFuc193b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCWRwcmludGsoIiVzOiBuOiAlcCwgd29yayBoYXMgYmVlbiBjYW5jZWxsZWQuXG4iLCBfX2Z1bmNfXywgbik7Ci0KLQlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgewotCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOwotCi0JCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcy5cbiIsCi0JCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBuLT5uYW1lKTsKLQotCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKLQotCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7Ci0JCWRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOwotCQlkc3RfdHJhbnNfcHV0KHQpOwotCX0KLQotCW1lbXBvb2xfZGVzdHJveShuLT50cmFuc19wb29sKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBzdG9yYWdlIGZvciBnaXZlbiBub2RlLgotICogVHJhbnNhY3Rpb24gc3RvcmVzIG5vdCBvbmx5IGNvbnRyb2wgaW5mb3JtYXRpb24sCi0gKiBidXQgYWxzbyBuZXR3b3JrIGNvbW1hbmQgYW5kIGNyeXB0byBkYXRhIChpZiBuZWVkZWQpCi0gKiB0byByZWR1Y2UgbnVtYmVyIG9mIGFsbG9jYXRpb25zLiBUaHVzIHRyYW5zYWN0aW9uIHNpemUKLSAqIGRpZmZlcnMgZnJvbSBub2RlIHRvIG5vZGUuCi0gKi8KLWludCBkc3Rfbm9kZV90cmFuc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JLyoKLQkgKiBXZSBuZWVkIHRoaXMsIHNpbmNlIG5vZGUgd2l0aCBnaXZlbiBuYW1lIGNhbiBiZSBkcm9wcGVkIGZyb20gdGhlCi0JICogaGFzaCB0YWJsZSwgYnV0IGJlIHN0aWxsIGFsaXZlLCBzbyBzdWJzZXF1ZW50IGNyZWF0aW9uIG9mIHRoZSBub2RlCi0JICogd2l0aCB0aGUgc2FtZSBuYW1lIG1heSBjb2xsaWRlIHdpdGggZXhpc3RpbmcgY2FjaGUgbmFtZS4KLQkgKi8KLQotCXNucHJpbnRmKG4tPmNhY2hlX25hbWUsIHNpemVvZihuLT5jYWNoZV9uYW1lKSwgIiVzLSVwIiwgbi0+bmFtZSwgbik7Ci0KLQluLT50cmFuc19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG4tPmNhY2hlX25hbWUsCi0JCQlzaXplICsgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplLAotCQkJMCwgMCwgTlVMTCk7Ci0JaWYgKCFuLT50cmFuc19jYWNoZSkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQluLT50cmFuc19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKGRzdF9tZW1wb29sX251bSwKLQkJCW4tPnRyYW5zX2NhY2hlKTsKLQlpZiAoIW4tPnRyYW5zX3Bvb2wpCi0JCWdvdG8gZXJyX291dF9jYWNoZV9kZXN0cm95OwotCi0JbXV0ZXhfaW5pdCgmbi0+dHJhbnNfbG9jayk7Ci0Jbi0+dHJhbnNfcm9vdCA9IFJCX1JPT1Q7Ci0KLQlJTklUX0RFTEFZRURfV09SSygmbi0+dHJhbnNfd29yaywgZHN0X3RyYW5zX3NjYW4pOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbi0+dHJhbnNfd29yaywgbi0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKLQotCWRwcmludGsoIiVzOiBuOiAlcCwgc2l6ZTogJXUsIGNyeXB0bzogJXUuXG4iLAotCQlfX2Z1bmNfXywgbiwgc2l6ZSwgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2NhY2hlX2Rlc3Ryb3k6Ci0Ja21lbV9jYWNoZV9kZXN0cm95KG4tPnRyYW5zX2NhY2hlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwppbmRleCBiMThkOGUyLi4zYWY3OTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCkBAIC0xNzg3LDcgKzE3ODcsNiBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ283MDA3X3RlbXBsYXRlID0gewogCS5uYW1lCQk9ICJnbzcwMDciLAogCS5mb3BzCQk9ICZnbzcwMDdfZm9wcywKLQkubWlub3IJCT0gLTEsCiAJLnJlbGVhc2UJPSBnbzcwMDdfdmZsX3JlbGVhc2UsCiAJLmlvY3RsX29wcwk9ICZ2aWRlb19pb2N0bF9vcHMsCiAJLnR2bm9ybXMJPSBWNEwyX1NURF9BTEwsCkBAIC0xODE3LDggKzE4MTYsOCBAQAogCX0KIAl2aWRlb19zZXRfZHJ2ZGF0YShnby0+dmlkZW9fZGV2LCBnbyk7CiAJKytnby0+cmVmX2NvdW50OwotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFt2NGwyXVxuIiwKLQkgICAgICAgZ28tPnZpZGVvX2Rldi0+bmFtZSwgZ28tPnZpZGVvX2Rldi0+bnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBkZXZpY2UgJXMgW3Y0bDJdXG4iLAorCSAgICAgICBnby0+dmlkZW9fZGV2LT5uYW1lLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGdvLT52aWRlb19kZXYpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuaAppbmRleCBmMGI4NmYwLi5mZDY3N2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuaApAQCAtMjksNyArMjksNiBAQAogICogZHJpdmVyIHJlcXVlc3RzIC0gc29tZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSBvcHRpb25zICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CiAjaW5jbHVkZSAiaWlvLmgiCiAjaW5jbHVkZSAicmluZ19nZW5lcmljLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vS2NvbmZpZwppbmRleCA1MzZlMjM4Li42MzhhZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9LY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogY29uZmlnIE9DVEVPTl9FVEhFUk5FVAogCXRyaXN0YXRlICJDYXZpdW0gTmV0d29ya3MgT2N0ZW9uIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgotCXNlbGVjdCBNSUkKKwlzZWxlY3QgUEhZTElCCisJc2VsZWN0IE1ESU9fT0NURU9OCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGJ1aWx0aW4gZXRoZXJuZXQgcG9ydHMgb24gQ2F2aXVtCiAJICBOZXR3b3JrcycgcHJvZHVjdHMgaW4gdGhlIE9jdGVvbiBmYW1pbHkuIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwppbmRleCAzMWE1OGU1Li4wNWE1Y2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwpAQCAtMjYsNyArMjYsOCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgpAQCAtMzQsODYgKzM1LDEyIEBACiAjaW5jbHVkZSAiZXRoZXJuZXQtZGVmaW5lcy5oIgogI2luY2x1ZGUgIm9jdGVvbi1ldGhlcm5ldC5oIgogI2luY2x1ZGUgImV0aGVybmV0LW1kaW8uaCIKKyNpbmNsdWRlICJldGhlcm5ldC11dGlsLmgiCiAKICNpbmNsdWRlICJjdm14LWhlbHBlci1ib2FyZC5oIgogCiAjaW5jbHVkZSAiY3ZteC1zbWl4LWRlZnMuaCIKIAotREVDTEFSRV9NVVRFWChtZGlvX3NlbSk7Ci0KLS8qKgotICogUGVyZm9ybSBhbiBNSUkgcmVhZC4gQ2FsbGVkIGJ5IHRoZSBnZW5lcmljIE1JSSByb3V0aW5lcwotICoKLSAqIEBkZXY6ICAgICAgRGV2aWNlIHRvIHBlcmZvcm0gcmVhZCBmb3IKLSAqIEBwaHlfaWQ6ICAgVGhlIE1JSSBwaHkgaWQKLSAqIEBsb2NhdGlvbjogUmVnaXN0ZXIgbG9jYXRpb24gdG8gcmVhZAotICogUmV0dXJucyBSZXN1bHQgZnJvbSB0aGUgcmVhZCBvciB6ZXJvIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCBjdm1fb2N0X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCi17Ci0JdW5pb24gY3ZteF9zbWl4X2NtZCBzbWlfY21kOwotCXVuaW9uIGN2bXhfc21peF9yZF9kYXQgc21pX3JkOwotCi0Jc21pX2NtZC51NjQgPSAwOwotCXNtaV9jbWQucy5waHlfb3AgPSAxOwotCXNtaV9jbWQucy5waHlfYWRyID0gcGh5X2lkOwotCXNtaV9jbWQucy5yZWdfYWRyID0gbG9jYXRpb247Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0NNRCgwKSwgc21pX2NtZC51NjQpOwotCi0JZG8gewotCQlpZiAoIWluX2ludGVycnVwdCgpKQotCQkJeWllbGQoKTsKLQkJc21pX3JkLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9TTUlYX1JEX0RBVCgwKSk7Ci0JfSB3aGlsZSAoc21pX3JkLnMucGVuZGluZyk7Ci0KLQlpZiAoc21pX3JkLnMudmFsKQotCQlyZXR1cm4gc21pX3JkLnMuZGF0OwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY3ZtX29jdF9tZGlvX2R1bW15X3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwKLQkJCQkgICBpbnQgbG9jYXRpb24pCi17Ci0JcmV0dXJuIDB4ZmZmZjsKLX0KLQotLyoqCi0gKiBQZXJmb3JtIGFuIE1JSSB3cml0ZS4gQ2FsbGVkIGJ5IHRoZSBnZW5lcmljIE1JSSByb3V0aW5lcwotICoKLSAqIEBkZXY6ICAgICAgRGV2aWNlIHRvIHBlcmZvcm0gd3JpdGUgZm9yCi0gKiBAcGh5X2lkOiAgIFRoZSBNSUkgcGh5IGlkCi0gKiBAbG9jYXRpb246IFJlZ2lzdGVyIGxvY2F0aW9uIHRvIHdyaXRlCi0gKiBAdmFsOiAgICAgIFZhbHVlIHRvIHdyaXRlCi0gKi8KLXN0YXRpYyB2b2lkIGN2bV9vY3RfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCi0JCQkgICAgICAgaW50IHZhbCkKLXsKLQl1bmlvbiBjdm14X3NtaXhfY21kIHNtaV9jbWQ7Ci0JdW5pb24gY3ZteF9zbWl4X3dyX2RhdCBzbWlfd3I7Ci0KLQlzbWlfd3IudTY0ID0gMDsKLQlzbWlfd3Iucy5kYXQgPSB2YWw7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX1dSX0RBVCgwKSwgc21pX3dyLnU2NCk7Ci0KLQlzbWlfY21kLnU2NCA9IDA7Ci0Jc21pX2NtZC5zLnBoeV9vcCA9IDA7Ci0Jc21pX2NtZC5zLnBoeV9hZHIgPSBwaHlfaWQ7Ci0Jc21pX2NtZC5zLnJlZ19hZHIgPSBsb2NhdGlvbjsKLQljdm14X3dyaXRlX2NzcihDVk1YX1NNSVhfQ01EKDApLCBzbWlfY21kLnU2NCk7Ci0KLQlkbyB7Ci0JCWlmICghaW5faW50ZXJydXB0KCkpCi0JCQl5aWVsZCgpOwotCQlzbWlfd3IudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX1NNSVhfV1JfREFUKDApKTsKLQl9IHdoaWxlIChzbWlfd3Iucy5wZW5kaW5nKTsKLX0KLQotc3RhdGljIHZvaWQgY3ZtX29jdF9tZGlvX2R1bW15X3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsCi0JCQkJICAgICBpbnQgbG9jYXRpb24sIGludCB2YWwpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIGN2bV9vY3RfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewpAQCAtMTI1LDQ5ICs1MiwzNyBAQAogc3RhdGljIGludCBjdm1fb2N0X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwogCi0JZG93bigmbWRpb19zZW0pOwotCXJldCA9IG1paV9ldGh0b29sX2dzZXQoJnByaXYtPm1paV9pbmZvLCBjbWQpOwotCXVwKCZtZGlvX3NlbSk7CisJaWYgKHByaXYtPnBoeWRldikKKwkJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBjdm1fb2N0X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwogCi0JZG93bigmbWRpb19zZW0pOwotCXJldCA9IG1paV9ldGh0b29sX3NzZXQoJnByaXYtPm1paV9pbmZvLCBjbWQpOwotCXVwKCZtZGlvX3NlbSk7CisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOwogCi0JcmV0dXJuIHJldDsKKwlpZiAocHJpdi0+cGh5ZGV2KQorCQlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChwcml2LT5waHlkZXYsIGNtZCk7CisKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBjdm1fb2N0X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwogCi0JZG93bigmbWRpb19zZW0pOwotCXJldCA9IG1paV9ud2F5X3Jlc3RhcnQoJnByaXYtPm1paV9pbmZvKTsKLQl1cCgmbWRpb19zZW0pOworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiByZXQ7Ci19CisJaWYgKHByaXYtPnBoeWRldikKKwkJcmV0dXJuIHBoeV9zdGFydF9hbmVnKHByaXYtPnBoeWRldik7CiAKLXN0YXRpYyB1MzIgY3ZtX29jdF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiByZXQ7Ci0KLQlkb3duKCZtZGlvX3NlbSk7Ci0JcmV0ID0gbWlpX2xpbmtfb2soJnByaXYtPm1paV9pbmZvKTsKLQl1cCgmbWRpb19zZW0pOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHMgPSB7CkBAIC0xNzUsNyArOTAsNyBAQAogCS5nZXRfc2V0dGluZ3MgPSBjdm1fb2N0X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gY3ZtX29jdF9zZXRfc2V0dGluZ3MsCiAJLm53YXlfcmVzZXQgPSBjdm1fb2N0X253YXlfcmVzZXQsCi0JLmdldF9saW5rID0gY3ZtX29jdF9nZXRfbGluaywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKIAkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAogfTsKQEAgLTE5MSw0MSArMTA2LDc4IEBACiBpbnQgY3ZtX29jdF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7Ci0JdW5zaWduZWQgaW50IGR1cGxleF9jaGc7Ci0JaW50IHJldDsKIAotCWRvd24oJm1kaW9fc2VtKTsKLQlyZXQgPSBnZW5lcmljX21paV9pb2N0bCgmcHJpdi0+bWlpX2luZm8sIGRhdGEsIGNtZCwgJmR1cGxleF9jaGcpOwotCXVwKCZtZGlvX3NlbSk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHJldDsKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7CiB9CiAKK3N0YXRpYyB2b2lkIGN2bV9vY3RfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljdm14X2hlbHBlcl9saW5rX2luZm9fdCBsaW5rX2luZm87CisKKwlpZiAocHJpdi0+bGFzdF9saW5rICE9IHByaXYtPnBoeWRldi0+bGluaykgeworCQlwcml2LT5sYXN0X2xpbmsgPSBwcml2LT5waHlkZXYtPmxpbms7CisJCWxpbmtfaW5mby51NjQgPSAwOworCQlsaW5rX2luZm8ucy5saW5rX3VwID0gcHJpdi0+bGFzdF9saW5rID8gMSA6IDA7CisJCWxpbmtfaW5mby5zLmZ1bGxfZHVwbGV4ID0gcHJpdi0+cGh5ZGV2LT5kdXBsZXggPyAxIDogMDsKKwkJbGlua19pbmZvLnMuc3BlZWQgPSBwcml2LT5waHlkZXYtPnNwZWVkOworCQljdm14X2hlbHBlcl9saW5rX3NldCggcHJpdi0+cG9ydCwgbGlua19pbmZvKTsKKwkJaWYgKHByaXYtPmxhc3RfbGluaykgeworCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQkJaWYgKHByaXYtPnF1ZXVlICE9IC0xKQorCQkJCURFQlVHUFJJTlQoIiVzOiAldSBNYnBzICVzIGR1cGxleCwgIgorCQkJCQkgICAicG9ydCAlMmQsIHF1ZXVlICUyZFxuIiwKKwkJCQkJICAgZGV2LT5uYW1lLCBwcml2LT5waHlkZXYtPnNwZWVkLAorCQkJCQkgICBwcml2LT5waHlkZXYtPmR1cGxleCA/CisJCQkJCQkiRnVsbCIgOiAiSGFsZiIsCisJCQkJCSAgIHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlKTsKKwkJCWVsc2UKKwkJCQlERUJVR1BSSU5UKCIlczogJXUgTWJwcyAlcyBkdXBsZXgsICIKKwkJCQkJICAgInBvcnQgJTJkLCBQT1dcbiIsCisJCQkJCSAgIGRldi0+bmFtZSwgcHJpdi0+cGh5ZGV2LT5zcGVlZCwKKwkJCQkJICAgcHJpdi0+cGh5ZGV2LT5kdXBsZXggPworCQkJCQkJIkZ1bGwiIDogIkhhbGYiLAorCQkJCQkgICBwcml2LT5wb3J0KTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCQlERUJVR1BSSU5UKCIlczogTGluayBkb3duXG4iLCBkZXYtPm5hbWUpOworCQl9CisJfQorfQorCisKIC8qKgotICogU2V0dXAgdGhlIE1ESU8gZGV2aWNlIHN0cnVjdHVyZXMKKyAqIFNldHVwIHRoZSBQSFkKICAqCiAgKiBAZGV2OiAgICBEZXZpY2UgdG8gc2V0dXAKICAqCiAgKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICovCi1pbnQgY3ZtX29jdF9tZGlvX3NldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGN2bV9vY3RfcGh5X3NldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBwaHlfaWQgPSBjdm14X2hlbHBlcl9ib2FyZF9nZXRfbWlpX2FkZHJlc3MocHJpdi0+cG9ydCk7Ci0JaWYgKHBoeV9pZCAhPSAtMSkgewotCQlwcml2LT5taWlfaW5mby5kZXYgPSBkZXY7Ci0JCXByaXYtPm1paV9pbmZvLnBoeV9pZCA9IHBoeV9pZDsKLQkJcHJpdi0+bWlpX2luZm8ucGh5X2lkX21hc2sgPSAweGZmOwotCQlwcml2LT5taWlfaW5mby5zdXBwb3J0c19nbWlpID0gMTsKLQkJcHJpdi0+bWlpX2luZm8ucmVnX251bV9tYXNrID0gMHgxZjsKLQkJcHJpdi0+bWlpX2luZm8ubWRpb19yZWFkID0gY3ZtX29jdF9tZGlvX3JlYWQ7Ci0JCXByaXYtPm1paV9pbmZvLm1kaW9fd3JpdGUgPSBjdm1fb2N0X21kaW9fd3JpdGU7Ci0JfSBlbHNlIHsKLQkJLyogU3VwcGx5IGR1bW15IE1ESU8gcm91dGluZXMgc28gdGhlIGtlcm5lbCB3b24ndCBjcmFzaAotCQkgICBpZiB0aGUgdXNlciB0cmllcyB0byByZWFkIHRoZW0gKi8KLQkJcHJpdi0+bWlpX2luZm8ubWRpb19yZWFkID0gY3ZtX29jdF9tZGlvX2R1bW15X3JlYWQ7Ci0JCXByaXYtPm1paV9pbmZvLm1kaW9fd3JpdGUgPSBjdm1fb2N0X21kaW9fZHVtbXlfd3JpdGU7CisKKwlpbnQgcGh5X2FkZHIgPSBjdm14X2hlbHBlcl9ib2FyZF9nZXRfbWlpX2FkZHJlc3MocHJpdi0+cG9ydCk7CisJaWYgKHBoeV9hZGRyICE9IC0xKSB7CisJCWNoYXIgcGh5X2lkWzIwXTsKKworCQlzbnByaW50ZihwaHlfaWQsIHNpemVvZihwaHlfaWQpLCBQSFlfSURfRk1ULCAiMCIsIHBoeV9hZGRyKTsKKworCQlwcml2LT5waHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9pZCwgY3ZtX29jdF9hZGp1c3RfbGluaywgMCwKKwkJCQkJUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOworCisJCWlmIChJU19FUlIocHJpdi0+cGh5ZGV2KSkgeworCQkJcHJpdi0+cGh5ZGV2ID0gTlVMTDsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcml2LT5sYXN0X2xpbmsgPSAwOworCQlwaHlfc3RhcnRfYW5lZyhwcml2LT5waHlkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmgKaW5kZXggYjMzMjhhZS4uNTVkMDYxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCkBAIC00Myw0ICs0Myw0IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgY3ZtX29jdF9ldGh0b29sX29wczsKIGludCBjdm1fb2N0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotaW50IGN2bV9vY3RfbWRpb19zZXR1cF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgY3ZtX29jdF9waHlfc2V0dXBfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuYwppbmRleCA4ZmE4OGZjLi4xNjMwOGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuYwpAQCAtMjUsNyArMjUsNiBAQAogICogQ29udGFjdCBDYXZpdW0gTmV0d29ya3MgZm9yIG1vcmUgaW5mb3JtYXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtMzgsMTEyICszNyw2IEBACiAjaW5jbHVkZSAiY3ZteC1oZWxwZXIuaCIKICNpbmNsdWRlICJjdm14LXBpcC5oIgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCSAgICBpbnQgcGh5X2lkLCBpbnQgb2Zmc2V0KQotewotCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcHJpdi0+bWlpX2luZm8ubWRpb193cml0ZShkZXYsIHBoeV9pZCwgMHgxZCwgMHhjYzAwIHwgb2Zmc2V0KTsKLQlyZXR1cm4gKCh1aW50NjRfdCkgcHJpdi0+bWlpX2luZm8uCi0JCW1kaW9fcmVhZChkZXYsIHBoeV9pZCwKLQkJCSAgMHgxZSkgPDwgMTYpIHwgKHVpbnQ2NF90KSBwcml2LT5taWlfaW5mby4KLQkgICAgbWRpb19yZWFkKGRldiwgcGh5X2lkLCAweDFmKTsKLX0KLQotc3RhdGljIGludCBjdm1fb2N0X3N0YXRzX3N3aXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzdGF0aWMgY29uc3QgaW50IHBvcnRzW10gPSB7IDAsIDEsIDIsIDMsIDksIC0xIH07Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGN2bV9vY3RfZGV2aWNlWzBdOwotCWludCBpbmRleCA9IDA7Ci0KLQl3aGlsZSAocG9ydHNbaW5kZXhdICE9IC0xKSB7Ci0KLQkJLyogTGF0Y2ggcG9ydCAqLwotCQlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQlwcml2LT5taWlfaW5mby5tZGlvX3dyaXRlKGRldiwgMHgxYiwgMHgxZCwKLQkJCQkJICAweGRjMDAgfCBwb3J0c1tpbmRleF0pOwotCQlzZXFfcHJpbnRmKG0sICJcblN3aXRjaCBQb3J0ICVkXG4iLCBwb3J0c1tpbmRleF0pOwotCQlzZXFfcHJpbnRmKG0sICJJbkdvb2RPY3RldHM6ICAgJTEybGx1XHQiCi0JCQkgICAiT3V0T2N0ZXRzOiAgICAgICUxMmxsdVx0IgotCQkJICAgIjY0IE9jdGV0czogICAgICAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwKLQkJCQkJCSAgICAgMHgwMCkgfAotCQkJICAgKGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDAxKSA8PCAzMiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwKLQkJCQkJCSAgICAgMHgwRSkgfAotCQkJICAgKGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDBGKSA8PCAzMiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwOCkpOwotCi0JCXNlcV9wcmludGYobSwgIkluQmFkT2N0ZXRzOiAgICAlMTJsbHVcdCIKLQkJCSAgICJPdXRVbmljYXN0OiAgICAgJTEybGx1XHQiCi0JCQkgICAiNjUtMTI3IE9jdGV0czogICUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDAyKSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDEwKSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDA5KSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW5VbmljYXN0OiAgICAgICUxMmxsdVx0IgotCQkJICAgIk91dEJyb2FkY2FzdHM6ICAlMTJsbHVcdCIKLQkJCSAgICIxMjgtMjU1IE9jdGV0czogJTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MDQpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTMpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MEEpKTsKLQotCQlzZXFfcHJpbnRmKG0sICJJbkJyb2FkY2FzdHM6ICAgJTEybGx1XHQiCi0JCQkgICAiT3V0TXVsdGljYXN0czogICUxMmxsdVx0IgotCQkJICAgIjI1Ni01MTEgT2N0ZXRzOiAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwNiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgxMiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwQikpOwotCi0JCXNlcV9wcmludGYobSwgIkluTXVsdGljYXN0czogICAlMTJsbHVcdCIKLQkJCSAgICJPdXRQYXVzZTogICAgICAgJTEybGx1XHQiCi0JCQkgICAiNTEyLTEwMjMgT2N0ZXRzOiUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDA3KSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDE1KSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDBDKSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW5QYXVzZTogICAgICAgICUxMmxsdVx0IgotCQkJICAgIkV4Y2Vzc2l2ZTogICAgICAlMTJsbHVcdCIKLQkJCSAgICIxMDI0LU1heCBPY3RldHM6JTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTYpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTEpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MEQpKTsKLQotCQlzZXFfcHJpbnRmKG0sICJJblVuZGVyc2l6ZTogICAgJTEybGx1XHQiCi0JCQkgICAiQ29sbGlzaW9uczogICAgICUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDE4KSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDFFKSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW5GcmFnbWVudHM6ICAgICUxMmxsdVx0IgotCQkJICAgIkRlZmVycmVkOiAgICAgICAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgxOSksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwNSkpOwotCi0JCXNlcV9wcmludGYobSwgIkluT3ZlcnNpemU6ICAgICAlMTJsbHVcdCIKLQkJCSAgICJTaW5nbGU6ICAgICAgICAgJTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MUEpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTQpKTsKLQotCQlzZXFfcHJpbnRmKG0sICJJbkphYmJlcjogICAgICAgJTEybGx1XHQiCi0JCQkgICAiTXVsdGlwbGU6ICAgICAgICUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDFCKSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDE3KSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW4gUnhFcnI6ICAgICAgICUxMmxsdVx0IgotCQkJICAgIk91dEZDU0VycjogICAgICAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgxQyksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwMykpOwotCi0JCXNlcV9wcmludGYobSwgIkluRkNTRXJyOiAgICAgICAlMTJsbHVcdCIKLQkJCSAgICJMYXRlOiAgICAgICAgICAgJTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MUQpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MUYpKTsKLQkJaW5kZXgrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogVXNlciBpcyByZWFkaW5nIC9wcm9jL29jdGVvbl9ldGhlcm5ldF9zdGF0cwogICoKQEAgLTIxNSwxMSArMTA4LDYgQEAKIAkJfQogCX0KIAotCWlmIChjdm1fb2N0X2RldmljZVswXSkgewotCQlwcml2ID0gbmV0ZGV2X3ByaXYoY3ZtX29jdF9kZXZpY2VbMF0pOwotCQlpZiAocHJpdi0+aW1vZGUgPT0gQ1ZNWF9IRUxQRVJfSU5URVJGQUNFX01PREVfR01JSSkKLQkJCWN2bV9vY3Rfc3RhdHNfc3dpdGNoX3Nob3cobSwgdik7Ci0JfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKaW5kZXggZmJhYTQ2NS4uMzgyMGYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYwpAQCAtMTQ3LDMyICsxNDcsMzYgQEAKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9HTVhYX1JYWF9JTlRfUkVHKGluZGV4LCBpbnRlcmZhY2UpLAogCQkJICAgICAgIGdteHhfcnh4X2ludF9yZWcudTY0KTsKIAl9Ci0KLQlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2F1dG9jb25mKHByaXYtPnBvcnQpOwotCXByaXYtPmxpbmtfaW5mbyA9IGxpbmtfaW5mby51NjQ7CisJaWYgKHByaXYtPnBoeWRldiA9PSBOVUxMKSB7CisJCWxpbmtfaW5mbyA9IGN2bXhfaGVscGVyX2xpbmtfYXV0b2NvbmYocHJpdi0+cG9ydCk7CisJCXByaXYtPmxpbmtfaW5mbyA9IGxpbmtfaW5mby51NjQ7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdsb2JhbF9yZWdpc3Rlcl9sb2NrLCBmbGFncyk7CiAKLQkvKiBUZWxsIExpbnV4ICovCi0JaWYgKGxpbmtfaW5mby5zLmxpbmtfdXApIHsKLQotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKLQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJaWYgKHByaXYtPnF1ZXVlICE9IC0xKQotCQkJREVCVUdQUklOVAotCQkJICAgICgiJXM6ICV1IE1icHMgJXMgZHVwbGV4LCBwb3J0ICUyZCwgcXVldWUgJTJkXG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGxpbmtfaW5mby5zLnNwZWVkLAotCQkJICAgICAobGlua19pbmZvLnMuZnVsbF9kdXBsZXgpID8gIkZ1bGwiIDogIkhhbGYiLAotCQkJICAgICBwcml2LT5wb3J0LCBwcml2LT5xdWV1ZSk7Ci0JCWVsc2UKLQkJCURFQlVHUFJJTlQoIiVzOiAldSBNYnBzICVzIGR1cGxleCwgcG9ydCAlMmQsIFBPV1xuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGxpbmtfaW5mby5zLnNwZWVkLAotCQkJCSAgIChsaW5rX2luZm8ucy5mdWxsX2R1cGxleCkgPyAiRnVsbCIgOiAiSGFsZiIsCi0JCQkJICAgcHJpdi0+cG9ydCk7Ci0JfSBlbHNlIHsKLQotCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJREVCVUdQUklOVCgiJXM6IExpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwlpZiAocHJpdi0+cGh5ZGV2ID09IE5VTEwpIHsKKwkJLyogVGVsbCBjb3JlLiAqLworCQlpZiAobGlua19pbmZvLnMubGlua191cCkgeworCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQkJaWYgKHByaXYtPnF1ZXVlICE9IC0xKQorCQkJCURFQlVHUFJJTlQoIiVzOiAldSBNYnBzICVzIGR1cGxleCwgIgorCQkJCQkgICAicG9ydCAlMmQsIHF1ZXVlICUyZFxuIiwKKwkJCQkJICAgZGV2LT5uYW1lLCBsaW5rX2luZm8ucy5zcGVlZCwKKwkJCQkJICAgKGxpbmtfaW5mby5zLmZ1bGxfZHVwbGV4KSA/CisJCQkJCQkiRnVsbCIgOiAiSGFsZiIsCisJCQkJCSAgIHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlKTsKKwkJCWVsc2UKKwkJCQlERUJVR1BSSU5UKCIlczogJXUgTWJwcyAlcyBkdXBsZXgsICIKKwkJCQkJICAgInBvcnQgJTJkLCBQT1dcbiIsCisJCQkJCSAgIGRldi0+bmFtZSwgbGlua19pbmZvLnMuc3BlZWQsCisJCQkJCSAgIChsaW5rX2luZm8ucy5mdWxsX2R1cGxleCkgPworCQkJCQkJIkZ1bGwiIDogIkhhbGYiLAorCQkJCQkgICBwcml2LT5wb3J0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJCURFQlVHUFJJTlQoIiVzOiBMaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYwppbmRleCAyYjU0OTk2Li42MDYxZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNnbWlpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zZ21paS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljdm1fb2N0X2NvbW1vbl9pbml0KGRldik7CiAJZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChkZXYpOwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKKwlpZiAoIW9jdGVvbl9pc19zaW11bGF0aW9uKCkgJiYgcHJpdi0+cGh5ZGV2ID09IE5VTEwpCiAJCXByaXYtPnBvbGwgPSBjdm1fb2N0X3NnbWlpX3BvbGw7CiAKIAkvKiBGSVhNRTogTmVlZCBhdXRvbmVnIGxvZ2ljICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXhhdWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jCmluZGV4IDBjMmU3Y2MuLmVlM2RjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljdm1fb2N0X2NvbW1vbl9pbml0KGRldik7CiAJZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChkZXYpOwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKKwlpZiAoIW9jdGVvbl9pc19zaW11bGF0aW9uKCkgJiYgcHJpdi0+cGh5ZGV2ID09IE5VTEwpCiAJCXByaXYtPnBvbGwgPSBjdm1fb2N0X3hhdWlfcG9sbDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCmluZGV4IDQ5MmM1MDIuLjRjZmQ0YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKQEAgLTEzMiw4ICsxMzIsNiBAQAogICovCiBzdHJ1Y3QgbmV0X2RldmljZSAqY3ZtX29jdF9kZXZpY2VbVE9UQUxfTlVNQkVSX09GX1BPUlRTXTsKIAotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgbWRpb19zZW07Ci0KIC8qKgogICogUGVyaW9kaWMgdGltZXIgdGljayBmb3Igc2xvdyBtYW5hZ2VtZW50IG9wZXJhdGlvbnMKICAqCkBAIC0xNjAsMTMgKzE1OCw4IEBACiAJCWdvdG8gb3V0OwogCiAJcHJpdiA9IG5ldGRldl9wcml2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQlpZiAocHJpdi0+cG9sbCkgewotCQkvKiBza2lwIHBvbGxpbmcgaWYgd2UgZG9uJ3QgZ2V0IHRoZSBsb2NrICovCi0JCWlmICghZG93bl90cnlsb2NrKCZtZGlvX3NlbSkpIHsKLQkJCXByaXYtPnBvbGwoY3ZtX29jdF9kZXZpY2VbcG9ydF0pOwotCQkJdXAoJm1kaW9fc2VtKTsKLQkJfQotCX0KKwlpZiAocHJpdi0+cG9sbCkKKwkJcHJpdi0+cG9sbChjdm1fb2N0X2RldmljZVtwb3J0XSk7CiAKIAlxdWV1ZXNfcGVyX3BvcnQgPSBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwb3J0KTsKIAkvKiBEcmFpbiBhbnkgcGVuZGluZyBwYWNrZXRzIGluIHRoZSBmcmVlIGxpc3QgKi8KQEAgLTUyNCw3ICs1MTcsNyBAQAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZjdm1fb2N0X2V0aHRvb2xfb3BzKTsKIAotCWN2bV9vY3RfbWRpb19zZXR1cF9kZXZpY2UoZGV2KTsKKwljdm1fb2N0X3BoeV9zZXR1cF9kZXZpY2UoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMtPm5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCAmc2EpOwogCWRldi0+bmV0ZGV2X29wcy0+bmRvX2NoYW5nZV9tdHUoZGV2LCBkZXYtPm10dSk7CiAKQEAgLTU0MCw3ICs1MzMsMTAgQEAKIAogdm9pZCBjdm1fb2N0X2NvbW1vbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQkvKiBDdXJyZW50bHkgbm90aGluZyB0byBkbyAqLworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdm1fb2N0X25waV9uZXRkZXZfb3BzID0gewpAQCAtNjI3LDYgKzYyMyw4IEBACiAjZW5kaWYKIH07CiAKK2V4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOworCiAvKioKICAqIE1vZHVsZS8gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBDcmVhdGVzIHRoZSBsaW51eCBuZXR3b3JrCiAgKiBkZXZpY2VzLgpAQCAtNjQwLDYgKzYzOCw3IEBACiAJaW50IGZhdSA9IEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRTsKIAlpbnQgcW9zOwogCisJb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3koKTsKIAlwcl9ub3RpY2UoImNhdml1bS1ldGhlcm5ldCAlc1xuIiwgT0NURU9OX0VUSEVSTkVUX1ZFUlNJT04pOwogCiAJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDNhZWY5ODcuLjQwMmExNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNTAsOSArNTAsOSBAQAogCS8qIExpc3Qgb2Ygb3V0c3RhbmRpbmcgdHggYnVmZmVycyBwZXIgcXVldWUgKi8KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X2ZyZWVfbGlzdFsxNl07CiAJLyogRGV2aWNlIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0cwotOwkvKiBHZW5lcmljIE1JSSBpbmZvIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaW5mbzsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCXVuc2lnbmVkIGludCBsYXN0X2xpbms7CiAJLyogTGFzdCBuZWdvdGlhdGVkIGxpbmsgc3RhdGUgKi8KIAl1aW50NjRfdCBsaW5rX2luZm87CiAJLyogQ2FsbGVkIHBlcmlvZGljYWxseSB0byBjaGVjayBsaW5rIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwppbmRleCAzYWJlN2M5Li4zZGVmYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwpAQCAtNDcsNyArNDcsNyBAQAogY29uZmlnIFBBTkVMX0tFWVBBRAogCWRlcGVuZHMgb24gUEFORUwgJiYgUEFORUxfUFJPRklMRT0iMCIKIAlpbnQgIktleXBhZCB0eXBlICgwPW5vbmUsIDE9b2xkIDYga2V5cywgMj1uZXcgNiBrZXlzLCAzPU5leGNvbSA0IGtleXMpIgotCXJhbmdlIDAgNAorCXJhbmdlIDAgMwogCWRlZmF1bHQgMAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBhIGtleXBhZCBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IDRjZTM5OWIuLjk1YzkzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zNzgsNyArMzc4LDcgQEAKIAogI2lmZGVmIENPTkZJR19QQU5FTF9MQ0RfQ0hBUlNFVAogI3VuZGVmIERFRkFVTFRfTENEX0NIQVJTRVQKLSNkZWZpbmUgREVGQVVMVF9MQ0RfQ0hBUlNFVAorI2RlZmluZSBERUZBVUxUX0xDRF9DSEFSU0VUIENPTkZJR19QQU5FTF9MQ0RfQ0hBUlNFVAogI2VuZGlmCiAKICNlbmRpZiAvKiBERUZBVUxUX1BST0ZJTEUgPT0gMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jCmluZGV4IDZjNWIyNjEuLmFhY2QyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMKQEAgLTcyMiw4ICs3MjIsNiBAQAogCQlpZiAoaW5vZGUtPmlfbmxpbmspCiAJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJfQotCWRwcmludGsoIiVzOiBpbm9kZTogJXAsIGxvY2s6ICVsZCwgdW5oYXNoZWQ6ICVkLlxuIiwKLQkJX19mdW5jX18sIHBpLCBpbm9kZS0+aV9zdGF0ZSAmIElfTE9DSywgaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCmluZGV4IGJhYzQwZDYuLjhkNjRlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCkBAIC0xLDYgKzEsNSBAQAogVE9ETzoKIAktIEFkZCBzdXBwb3J0IGZvciBzd2FwIG5vdGlmaWVycwotCS0gUmVtb3ZlIENPTkZJR19BUk0gaGFjawogCiBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAogTml0aW4gR3VwdGEgPG5ndXB0YUB2ZmxhcmUub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCmluZGV4IGI4MzlmMDUuLjk4OWZhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKQEAgLTIyMiwyOCArMjIyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCByYW16c3dhcF9mbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLSNpZmRlZiBDT05GSUdfQVJNCi0JaW50IGZsYWcgPSAwOwotCS8qCi0JICogVWdseSBoYWNrIHRvIGdldCBmbHVzaF9kY2FjaGVfcGFnZSgpIHdvcmsgb24gQVJNLgotCSAqIHBhZ2VfbWFwcGluZyhwYWdlKSA9PSBOVUxMIGFmdGVyIGNsZWFyaW5nIHRoaXMgc3dhcCBjYWNoZSBmbGFnLgotCSAqIFdpdGhvdXQgY2xlYXJpbmcgdGhpcyBmbGFnLCBmbHVzaF9kY2FjaGVfcGFnZSgpIHdpbGwgc2ltcGx5IHNldAotCSAqICJQR19kY2FjaGVfZGlydHkiIGJpdCBhbmQgcmV0dXJuLgotCSAqLwotCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKSB7Ci0JCWZsYWcgPSAxOwotCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JfQotI2VuZGlmCi0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0jaWZkZWYgQ09ORklHX0FSTQotCWlmIChmbGFnKQotCQlTZXRQYWdlU3dhcENhY2hlKHBhZ2UpOwotI2VuZGlmCi19Ci0KIHZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAogCQkJc3RydWN0IHJhbXpzd2FwX2lvY3RsX3N0YXRzICpzKQogewpAQCAtNjU1LDcgKzYzMyw3IEBACiAJbWVtc2V0KHVzZXJfbWVtLCAwLCBQQUdFX1NJWkUpOwogCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKQEAgLTY3OSw3ICs2NTcsNyBAQAogCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKIAlrdW5tYXBfYXRvbWljKGNtZW0sIEtNX1VTRVIxKTsKIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKQEAgLTc3OSw3ICs3NTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyYW16c3dhcF9mbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAogCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CiAJYmlvX2VuZGlvKGJpbywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDMyMjJjMjIuLjBkNDkwYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0xMzE4LDEzICsxMzE4LDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKmZyYWcsCiAJaW50IGhkcl9sZW4pOwogCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV90eGJfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKTsKIAogCiAvKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIGludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cyk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLApAQCAtMTM3Niw4ICsxMzc2LDggQEAKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfZ2V0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogZXh0ZXJuIHZvaWQgbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9wc190eF9hY2soc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHNob3J0IHN1Y2Nlc3MpOwogZXh0ZXJuIHZvaWQgU2VuZERpc2Fzc29jaWF0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLHU4KiBhc1N0YSx1OCBhc1Jzbik7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogCiAvL0FkZCBmb3IgUkYgcG93ZXIgb24gcG93ZXIgb2ZmIGJ5IGxpemhhb21pbmcgMDgwNTEyCiBleHRlcm4gdm9pZCBTZW5kRGlzYXNzb2NpYXRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGY4ODJkZDguLjkxMjhjMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC00NjksNyArNDY5LDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDFmZTE5YzMuLmM3YzY0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNjg5LDcgKzY4OSw3IEBACiB9CiAKIC8qIGNhbGxlZCB3aXRoIGllZWUtPmxvY2sgaGVsZCAqLwotdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWlmKElTX0RPVDExRF9FTkFCTEUoaWVlZSkgKQogCXsKQEAgLTExOTYsNyArMTE5Niw3IEBACiAJfQogfQogCi12b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQordm9pZCBpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCiB7CiAJdTggKmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE4OTgsNyArMTg5OCw3IEBACiAKIAkJCQkJCQkJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMihpZWVlKTsKIAkJCQkJCQl9ZWxzZXsKLQkJCQkJCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOworCQkJCQkJCQlpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOwogCQkJCQkJCX0KIAkJCQkJCX1lbHNlewogCQkJCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9yc19lcnIrKzsKQEAgLTIwNDcsNyArMjA0Nyw3IEBACiAKIH0KIAotdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwODksNyArMjA4OSw3IEBACiB9CiAKIAotdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLGZsYWdzKTsKQEAgLTIzMDEsNyArMjMwMSw3IEBACiAvLyNlbHNlCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogLy8jZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CkBAIC0yMzU3LDcgKzIzNTcsNyBAQAogCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5iZWlucmV0cnkgPSBmYWxzZTsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAkvL1lKLGFkZCwwODA4MjgsIG5vdGlmeSBvcyBoZXJlCiAJaWYoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggZGRlMWYyZS4uNjliZDAyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTMwNCw3ICszMDQsNyBAQAogfQogCiAvKiBTS0JzIGFyZSBhZGRlZCB0byB0aGUgaWVlZS0+dHhfcXVldWUuICovCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCmluZGV4IDU3YzYyYjAuLmUwZjEzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCkBAIC0xODExLDcgKzE4MTEsNyBAQAogCQkJaWYocHJpdi0+cnhfc2tiLT5sZW4gPiA0KQogCQkJCXNrYl90cmltKHByaXYtPnJ4X3NrYixwcml2LT5yeF9za2ItPmxlbi00KTsKICNpZm5kZWYgUlhfRE9OVF9QQVNTX1VMCi0JCQlpZighaWVlZTgwMjExX3J4KHByaXYtPmllZWU4MDIxMSwKKwkJCWlmKCFpZWVlODAyMTFfcnRsX3J4KHByaXYtPmllZWU4MDIxMSwKIAkJCQkJIHByaXYtPnJ4X3NrYiwgJnN0YXRzKSl7CiAjZW5kaWYgLy8gUlhfRE9OVF9QQVNTX1VMCiAKQEAgLTE5MTcsMTEgKzE5MTcsMTEgQEAKIAlpZiAoIWNoZWNrX25pY19lbm91Z2h0X2Rlc2MoZGV2LCBwcmlvcml0eSkpewogCQlETUVTR1coIkVycm9yOiBubyBkZXNjcmlwdG9yIGxlZnQgYnkgcHJldmlvdXMgVFggKGF2YWlsICVkKSAiLAogCQkJZ2V0X2N1cnJfdHhfZnJlZV9kZXNjKGRldiwgcHJpb3JpdHkpKTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiAJfQogCXJ0bDgxODBfdHgoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBwcmlvcml0eSwgbW9yZWZyYWcsMCxyYXRlKTsKIAlpZiAoIWNoZWNrX25pY19lbm91Z2h0X2Rlc2MoZGV2LCBwcmlvcml0eSkpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiB9CkBAIC0zNjgwLDcgKzM2ODAsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcjgxODBfc2V0X21hY19hZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3J0bF94bWl0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcnRsODE4MF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0zOTAwLDcgKzM5MDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJaWYoZW5vdWdoX2Rlc2MpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogfQogCiB2b2lkIHJ0bDgxODBfdHhfaXNyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmksc2hvcnQgZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKaW5kZXggNTM2Y2I2ZS4uMTI0Y2RlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJLy8JcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAmcHJpdi0+aWVlZTgwMjExLT53eF9zeW5jX3NjYW5fd3EpOwogCQkvL3ByaW50aygic3RhcnQgc2Nhbj09PT09PT09PT09PT09PT09PT09PT09PT09PT0+XG4iKTsKIAkJaWVlZTgwMjExX3NvZnRtYWNfaXBzX3NjYW5fc3luY3JvKHByaXYtPmllZWU4MDIxMSk7Ci0vL2llZWU4MDIxMV9zdGFydF9zY2FuKHByaXYtPmllZWU4MDIxMSk7CisvL2llZWU4MDIxMV9ydGxfc3RhcnRfc2Nhbihwcml2LT5pZWVlODAyMTEpOwogCQkvKiBpbnRlbnRpb25hbGx5IGZvcmdldCB0byB1cCBzZW0gKi8KIC8vCQkJdXAoJnByaXYtPmllZWU4MDIxMS0+d3hfc2VtKTsKIAkJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmgKaW5kZXggOTcxMzdkZC4uM2JhOWU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaApAQCAtMzAzLDggKzMwMyw4IEBACiAjZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCiAKICNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWVfcnNsCisjZGVmaW5lIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZQkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKQEAgLTI0MzUsMTMgKzI0MzUsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0yNTAyLDggKzI1MDIsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDgzYzg0NTIuLmFhNzYzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMzMzLDggKzMzMyw4IEBACiAjZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCiAKICNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWVfcnNsCisjZGVmaW5lIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZQkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKQEAgLTI1NDYsMTMgKzI1NDYsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0yNjEzLDggKzI2MTMsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMjY0NDE1NS4uZjQzYTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCWllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7CiAjZW5kaWYKICNpZiAwCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfeG1pdDsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9ydGxfeG1pdDsKICNlbmRpZgogCiAJbWVtc2V0KGllZWUsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSkrc2l6ZW9mX3ByaXYpOwpAQCAtMzMzLDcgKzMzMyw3IEBACiBleHRlcm4gaW50IGllZWU4MDIxMV9jcnlwdG9fd2VwX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfY3J5cHRvX3dlcF9leGl0KHZvaWQpOwogCi1pbnQgX19pbml0IGllZWU4MDIxMV9pbml0KHZvaWQpCitpbnQgX19pbml0IGllZWU4MDIxMV9ydGxfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAlpbnQgcmV0dmFsOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCit2b2lkIF9fZXhpdCBpZWVlODAyMTFfcnRsX2V4aXQodm9pZCkKIHsKIAlpZiAoaWVlZTgwMjExX3Byb2MpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgaWVlZTgwMjExX3Byb2MpOwpAQCAtNDEyLDggKzQxMiw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKIAogCi0vL21vZHVsZV9leGl0KGllZWU4MDIxMV9leGl0KTsKLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX2luaXQpOworLy9tb2R1bGVfZXhpdChpZWVlODAyMTFfcnRsX2V4aXQpOworLy9tb2R1bGVfaW5pdChpZWVlODAyMTFfcnRsX2luaXQpOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggNWRjNDc4Yi4uMDZkOTE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC05MjMsNyArOTIzLDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA1OTNkMjI4Li42ZDFkZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC02ODQsNyArNjg0LDcgQEAKIH0KIAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBoZWxkICovCi12b2lkIGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAjaWZkZWYgRU5BQkxFX0RPVDExRAogCWlmKElTX0RPVDExRF9FTkFCTEUoaWVlZSkgKQpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAl9CiB9CiAKLXZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCit2b2lkIGllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKIHsKIAl1OCAqYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjI2Miw3ICsyMjYyLDcgQEAKIAogCQkJCQkJCQlpZWVlODAyMTFfYXNzb2NpYXRlX3N0ZXAyKGllZWUpOwogCQkJCQkJCX1lbHNlewotCQkJCQkJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CisJCQkJCQkJCWllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CiAJCQkJCQkJfQogCQkJCQkJfWVsc2V7CiAJCQkJCQkJaWVlZS0+c29mdG1hY19zdGF0cy5yeF9hdXRoX3JzX2VycisrOwpAQCAtMjM3Niw3ICsyMzc2LDcgQEAKIAkJCSAqIHRvIGNoZWNrIGl0IGFueSBtb3JlLgogCQkJICogKi8KIAkJCS8vcHJpbnRrKCJlcnJvcjpubyBkZXNjcmlwdG9yIGxlZnRAcXVldWVfaW5kZXggJWRcbiIsIHF1ZXVlX2luZGV4KTsKLQkJCS8vaWVlZTgwMjExX3N0b3BfcXVldWUoaWVlZSk7CisJCQkvL2llZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShpZWVlKTsKICNpZmRlZiBVU0JfVFhfRFJJVkVSX0FHR1JFR0FUSU9OX0VOQUJMRQogCQkJc2tiX3F1ZXVlX3RhaWwoJmllZWUtPnNrYl9kcnZfYWdnUVtxdWV1ZV9pbmRleF0sIHR4Yi0+ZnJhZ21lbnRzW2ldKTsKICNlbHNlCkBAIC0yNDQwLDcgKzI0NDAsNyBAQAogCiB9CiAKLXZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNDgxLDcgKzI0ODEsNyBAQAogfQogCiAKLXZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLy9zcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jayxmbGFncyk7CkBAIC0yNzA2LDcgKzI3MDYsNyBAQAogCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTI3NzUsNyArMjc3NSw3IEBACiAJewogCQlpZWVlLT5pc19yb2FtaW5nPSBmYWxzZTsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKQEAgLTM0OTcsOCArMzQ5Nyw4IEBACiAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfYmVhY29uKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd2FrZV9xdWV1ZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfcXVldWUpOworLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZSk7CisvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKIC8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVzZXRfcXVldWUpOwogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wpOwogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKQEAgLTM1MTgsOCArMzUxOCw4IEBACiAvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKTsKICNlbHNlCiBFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfZ2V0X2JlYWNvbik7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd2FrZV9xdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RvcF9xdWV1ZSk7CitFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcnRsX3dha2VfcXVldWUpOworRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9yZXNldF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCmluZGV4IDEwM2IzM2MuLjc5OGZiNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJfQogfQogCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA0ZTM0YTFmNC4uMzQ0MWI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC05NzYsNyArOTc2LDcgQEAKIAl7CiAJCWlmIChsZW4gIT0gaWVbMV0rMikKIAkJewotCQkJcHJpbnRrKCJsZW46JWQsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKKwkJCXByaW50aygibGVuOiV6dSwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IDk4YjNiYjYuLmU0MWU4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTM4Miw3ICszODIsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CiAJCXJldHVybiAtMTsKIAl9CiAJcnNwID0gKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciopc2tiLT5kYXRhOwpAQCAtNjExLDcgKzYxMSw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwppbmRleCBmZjhmZTdlLi4wY2E1ZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwpAQCAtNTc5NSw3ICs1Nzk1LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0cy5mcmFnb2Zmc2V0ID0gMDsKICAgICAgICAgICAgICAgICBzdGF0cy5udG90YWxmcmFnID0gMTsKIAotICAgICAgICAgICAgICAgIGlmKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZTgwMjExLCBza2IsICZzdGF0cykpeworICAgICAgICAgICAgICAgIGlmKCFpZWVlODAyMTFfcnRsX3J4KHByaXYtPmllZWU4MDIxMSwgc2tiLCAmc3RhdHMpKXsKICAgICAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwcml2LT5zdGF0cy5yeG9rKys7CkBAIC01ODM3LDcgKzU4MzcsNyBAQAogCS5uZG9fZG9faW9jdGwgPQkJCXJ0bDgxOTJfaW9jdGwsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPQlyODE5Ml9zZXRfbXVsdGljYXN0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzID0JCXI4MTkyX3NldF9tYWNfYWRyLAotCS5uZG9fc3RhcnRfeG1pdCA9IAkJaWVlZTgwMjExX3htaXQsCisJLm5kb19zdGFydF94bWl0ID0gCQlpZWVlODAyMTFfcnRsX3htaXQsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjEyMSwxNCArNjEyMSwxNCBAQAogCVJUX1RSQUNFKENPTVBfRE9XTiwgIndsYW4gZHJpdmVyIHJlbW92ZWRcbiIpOwogfQogCi1leHRlcm4gaW50IGllZWU4MDIxMV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2V4aXQodm9pZCk7CitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfZXhpdCh2b2lkKTsKIAogc3RhdGljIGludCBfX2luaXQgcnRsODE5Ml9wY2lfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gaWVlZTgwMjExX2luaXQoKTsKKwlyZXR2YWwgPSBpZWVlODAyMTFfcnRsX2luaXQoKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC02MTUzLDcgKzYxNTMsNyBAQAogCiAJUlRfVFJBQ0UoQ09NUF9ET1dOLCAiRXhpdGluZyIpOwogCXJ0bDgxOTJfcHJvY19tb2R1bGVfcmVtb3ZlKCk7Ci0JaWVlZTgwMjExX2V4aXQoKTsKKwlpZWVlODAyMTFfcnRsX2V4aXQoKTsKIH0KIAogLy93YXJuaW5nIG1lc3NhZ2UgV0IKQEAgLTYzMTMsNyArNjMxMyw3IEBACiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJaWYoZW5vdWdoX2Rlc2MpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmgKaW5kZXggZjIyZDAyNC4uOWE0Yzg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTE3MjEsMTMgKzE3MjEsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgcnRsODE5Ml9pZWVlODAyMTFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludCBydGw4MTkyX2llZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV90eGJfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKTsKIAogCiAvKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIGludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cyk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLApAQCAtMTc4Myw4ICsxNzgzLDggQEAKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfZ2V0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGFjMjIzY2UuLmZlY2ZhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKICAqCiAgKiBSZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgbWFuYWdlbWVudCBjb250cm9sIGZyYW1lcwogICoKLSAqIENhbGxlZCBieSBpZWVlODAyMTFfcnggKi8KKyAqIENhbGxlZCBieSBpZWVlODAyMTFfcnRsX3J4ICovCiBzdGF0aWMgaW5saW5lIGludAogaWVlZTgwMjExX3J4X2ZyYW1lX21nbXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cywgdTE2IHR5cGUsCkBAIC0yODksNyArMjg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBpZWVlODAyMTFfcnggKi8KKy8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSwgYnkgaWVlZTgwMjExX3J0bF9yeCAqLwogc3RhdGljIGlubGluZSBpbnQKIGllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCkKQEAgLTg1OCw3ICs4NTgsNyBAQAogLyogQWxsIHJlY2VpdmVkIGZyYW1lcyBhcmUgc2VudCB0byB0aGlzIGZ1bmN0aW9uLiBAc2tiIGNvbnRhaW5zIHRoZSBmcmFtZSBpbgogICogSUVFRSA4MDIuMTEgZm9ybWF0LCBpLmUuLCBpbiB0aGUgZm9ybWF0IGl0IHdhcyBzZW50IG92ZXIgYWlyLgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuICovCi1pbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggMjAzYzBhNS4uOTVkNGY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC02MTAsNyArNjEwLDcgQEAKIH0KIAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBoZWxkICovCi12b2lkIGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJaWYoSVNfRE9UMTFEX0VOQUJMRShpZWVlKSApCiAJewpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIAl9CiB9CiAKLXZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCit2b2lkIGllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKIHsKIAl1OCAqYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjA1NCw3ICsyMDU0LDcgQEAKIAogCQkJCQkJCQlpZWVlODAyMTFfYXNzb2NpYXRlX3N0ZXAyKGllZWUpOwogCQkJCQkJCX1lbHNlewotCQkJCQkJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CisJCQkJCQkJCWllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CiAJCQkJCQkJfQogCQkJCQkJfWVsc2V7CiAJCQkJCQkJaWVlZS0+c29mdG1hY19zdGF0cy5yeF9hdXRoX3JzX2VycisrOwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIAkJCSAqIHRvIGNoZWNrIGl0IGFueSBtb3JlLgogCQkJICogKi8KIAkJCS8vcHJpbnRrKCJlcnJvcjpubyBkZXNjcmlwdG9yIGxlZnRAcXVldWVfaW5kZXggJWQsICVkLCAlZFxuIiwgcXVldWVfaW5kZXgsIHNrYl9xdWV1ZV9sZW4oJmllZWUtPnNrYl93YWl0UVtxdWV1ZV9pbmRleF0pLCBpZWVlLT5jaGVja19uaWNfZW5vdWdoX2Rlc2MoaWVlZS0+ZGV2LHF1ZXVlX2luZGV4KSk7Ci0JCQkvL2llZWU4MDIxMV9zdG9wX3F1ZXVlKGllZWUpOworCQkJLy9pZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoaWVlZSk7CiAJCQlza2JfcXVldWVfdGFpbCgmaWVlZS0+c2tiX3dhaXRRW3F1ZXVlX2luZGV4XSwgdHhiLT5mcmFnbWVudHNbaV0pOwogCQl9ZWxzZXsKIAkJCWllZWUtPnNvZnRtYWNfZGF0YV9oYXJkX3N0YXJ0X3htaXQoCkBAIC0yMjIyLDcgKzIyMjIsNyBAQAogCiB9CiAKLXZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMjYzLDcgKzIyNjMsNyBAQAogfQogCiAKLXZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLy9zcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jayxmbGFncyk7CkBAIC0yNDc5LDcgKzI0NzksNyBAQAogCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTI1NTIsNyArMjU1Miw3IEBACiAJaWYoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykKIAl7CiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oaWVlZSk7CisJCWllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihpZWVlKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCmluZGV4IDYwNjIxZDYuLjRkNTRlMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC02MDQsNyArNjA0LDcgQEAKIAl9CiB9CiAKLWludCBydGw4MTkyX2llZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgcnRsODE5Ml9pZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKaW5kZXggNjYyNzRkNy4uY2NiOWQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiAJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMDEpfSwKIAkvKiBaaW53ZWxsICovCiAJe1VTQl9ERVZJQ0UoMHg1YTU3LCAweDAyOTApfSwKKwkvKiBHdWlsbGVtb3QgKi8KKwl7VVNCX0RFVklDRSgweDA2ZjgsIDB4ZTAzMSl9LAogCS8vOTJTVQogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTcyKX0sCiAJe30KQEAgLTE1MDEsNyArMTUwMyw3IEBACiAgICAgICAgIHVyYi0+Y29udGV4dCA9IHNrYjsKICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJnByaXYtPnJ4X3F1ZXVlLCBza2IpOwogICAgICAgICBlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmKGVyciAmJiBlcnIgIT0gRVBFUk0pCisJaWYoZXJyICYmIGVyciAhPSAtRVBFUk0pCiAJCXByaW50aygiY2FuIG5vdCBzdWJtaXQgcnh1cmIsIGVyciBpcyAleCxVUkIgc3RhdHVzIGlzICV4XG4iLGVycix1cmItPnN0YXR1cyk7CiB9CiAKQEAgLTcxNTUsNyArNzE1Nyw3IEBACiAJCQl1bmljYXN0X3BhY2tldCA9IHRydWU7CiAJCX0KIAotCQlpZighaWVlZTgwMjExX3J4KHByaXYtPmllZWU4MDIxMSxza2IsICZzdGF0cykpIHsKKwkJaWYoIWllZWU4MDIxMV9ydGxfcngocHJpdi0+aWVlZTgwMjExLHNrYiwgJnN0YXRzKSkgewogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJfSBlbHNlIHsKIAkJLy8JcHJpdi0+c3RhdHMucnhva3RvdGFsKys7ICAvL1lKLHRlc3QsMDkwMTA4CkBAIC03NDI2LDcgKzc0MjgsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcjgxOTJfc2V0X21hY19hZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTkyX2llZWU4MDIxMV94bWl0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTkyX2llZWU4MDIxMV9ydGxfeG1pdCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHJ0bDgxOTJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApAQCAtNzYxOSw3ICs3NjIxLDcgQEAKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKIAlpZihlbm91Z2hfZGVzYykKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiB9CiAKIHZvaWQgRW5hYmxlSFdTZWN1cml0eUNvbmZpZzgxOTIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IGQzOTdmMWQuLjVmMTJkNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJewogCQlpZiAobGVuICE9IGllWzFdKzIpCiAJCXsKLQkJCXByaW50aygibGVuOiVkLCBpZTolZFxuIiwgbGVuLCBpZVsxXSk7CisJCQlwcmludGsoImxlbjolenUsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCAyNmFmNDNiLi41MTJhNTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0zNDAsNyArMzQwLDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJFUSglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJFUSglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00MzksNyArNDM5LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJTUCglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBCQVJTUCglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJzcCA9ICggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIqKXNrYi0+ZGF0YTsKQEAgLTU2OSw3ICs1NjksNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIERFTEJBKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIERFTEJBKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KSk7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ZGJmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnCkBAIC0wLDAgKzEsMTUgQEAKK2NvbmZpZyBGQl9TTTdYWAorCXRyaXN0YXRlICJTaWxpY29uIE1vdGlvbiBTTTdYWCBGcmFtZSBCdWZmZXIgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIEZyYW1lIEJ1ZmZlciBkcml2ZXIgZm9yIHRoZSBTaWxpY29uIE1vdGlvbiBTTTdYWCBzZXJpYWwgZ3JhcGhpYyBjYXJkLgorCitjb25maWcgRkJfU003WFhfQUNDRUwKKwlib29sICJTaWxpY29ubW90aW9uIEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBGQl9TTTdYWCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIHdpbGwgY29tcGlsZSB0aGUgVHJpZGVudCBmcmFtZSBidWZmZXIgZGV2aWNlIHdpdGgKKwkgIGFjY2VsZXJhdGlvbiBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzY2I5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19GQl9TTTdYWCkgKz0gc203eHgubworCitzbTd4eC15IDo9IHNtdGNmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjFmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETwpAQCAtMCwwICsxLDEwIEBACitUT0RPOgorLSBEdWFsIGhlYWQgc3VwcG9ydAorLSB1c2Uga2VybmVsIGNvZGluZyBzdHlsZQorLSBjaGVja3BhdGNoLnBsIGNsZWFuCistIHJlZmluZSB0aGUgY29kZSBhbmQgcmVtb3ZlIHVudXNlZCBjb2RlCistIHVzZSBrZXJuZWwgZnJhbWVidWZmZXIgbW9kZSBzZXR0aW5nIGluc3RlYWQgb2YgaGFyZCBjb2RlCistIG1vdmUgaXQgdG8gZHJpdmVycy92aWRlby9zbTd4eC8gb3IgbWFrZSBpdCBiZSBkcml2ZXJzL3ZpZGVvL3NtN3h4ZmIuYworCitQbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKK1RlZGR5IFdhbmcgPHRlZGR5LndhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2I4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKQEAgLTAsMCArMSw5NzkgQEAKKy8qCisgKiBTaWxpY29uIE1vdGlvbiBTTTdYWCAyRCBkcmF3aW5nIGVuZ2luZSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbGljb24gTW90aW9uIFRlY2hub2xvZ3kgQ29ycC4KKyAqIEF1dGhvcjogQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICoKKyAqIFZlcnNpb24gMC4xMC4yNjE5Mi4yMS4wMQorICogCS0gQWRkIFBvd2VyUEMgc3VwcG9ydAorICogCS0gQWRkIDJEIHN1cHBvcnQgZm9yIEx5bnggLQorICogVmVyaWZpZWQgb24gMi42LjE5LjIKKyAqIAlCb3lvZC55YW5nICA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KKyAqLworCit1bnNpZ25lZCBjaGFyIHNtdGNfZGVfYnVzeTsKKwordm9pZCBTTVRDX3dyaXRlMkRyZWcodW5zaWduZWQgbG9uZyBuT2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5EYXRhKQoreworCXdyaXRlbChuRGF0YSwgc210Y18yREJhc2VBZGRyZXNzICsgbk9mZnNldCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgU01UQ19yZWFkMkRyZWcodW5zaWduZWQgbG9uZyBuT2Zmc2V0KQoreworCXJldHVybiByZWFkbChzbXRjXzJEQmFzZUFkZHJlc3MgKyBuT2Zmc2V0KTsKK30KKwordm9pZCBTTVRDX3dyaXRlMkRkYXRhcG9ydCh1bnNpZ25lZCBsb25nIG5PZmZzZXQsIHVuc2lnbmVkIGxvbmcgbkRhdGEpCit7CisJd3JpdGVsKG5EYXRhLCBzbXRjXzJEZGF0YXBvcnQgKyBuT2Zmc2V0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBkZUluaXQKKyAqCisgKiBQdXJwb3NlCisgKiAgICBEcmF3aW5nIGVuZ2luZSBpbml0aWFsaXphdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBkZUluaXQodW5zaWduZWQgaW50IG5Nb2RlV2lkdGgsIHVuc2lnbmVkIGludCBuTW9kZUhlaWdodCwKKwkJdW5zaWduZWQgaW50IGJwcCkKK3sKKwkvKiBHZXQgY3VycmVudCBwb3dlciBjb25maWd1cmF0aW9uLiAqLworCXVuc2lnbmVkIGNoYXIgY2xvY2s7CisJY2xvY2sgPSBzbXRjX3NlcXIoMHgyMSk7CisKKwkvKiBpbml0aWFsaXplIGdsb2JhbCAnbXV0ZXggbG9jaycgdmFyaWFibGUgKi8KKwlzbXRjX2RlX2J1c3kgPSAwOworCisJLyogRW5hYmxlIDJEIERyYXdpbmcgRW5naW5lICovCisJc210Y19zZXF3KDB4MjEsIGNsb2NrICYgMHhGOCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ0xJUF9UTCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NMSVBfVEwsIFRPUCwgMCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NMSVBfVEwsIFNUQVRVUywgRElTQUJMRSkgfAorCQkJRklFTERfU0VUKDAsIERFX0NMSVBfVEwsIElOSElCSVQsIE9VVFNJREUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NMSVBfVEwsIExFRlQsIDApKTsKKworCWlmIChicHAgPj0gMjQpIHsKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIG5Nb2RlV2lkdGggKiAzKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJCSAgREVfUElUQ0gsCisJCQkJCQkJCSAgU09VUkNFLAorCQkJCQkJCQkgIG5Nb2RlV2lkdGgKKwkJCQkJCQkJICAqIDMpKTsKKwl9IGVsc2UgeworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgbk1vZGVXaWR0aCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgIERFX1BJVENILAorCQkJCQkJCSAgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgICBuTW9kZVdpZHRoKSk7CisJfQorCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJICAgIG5Nb2RlV2lkdGgpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgICBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkJICAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgIG5Nb2RlV2lkdGgpKTsKKworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSA4OgorCQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1hZLAorCQkJCQkgIE5PUk1BTCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCURFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCVBBVFRFUk5fWSwKKwkJCQkJCQkwKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWCwKKwkJCQkgICAgMCkgfCBGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkgICBQSVhFTF9GT1JNQVQsCisJCQkJCQkgICA4KSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJICBBRERSRVNTSU5HLAorCQkJCQkJCSAgWFkpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJU09VUkNFX0hFSUdIVCwgMykpOworCQlicmVhazsKKwljYXNlIDI0OgorCQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1hZLAorCQkJCQkgIE5PUk1BTCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCURFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCVBBVFRFUk5fWSwKKwkJCQkJCQkwKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWCwKKwkJCQkgICAgMCkgfCBGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJICAgUElYRUxfRk9STUFULAorCQkJCQkJCSAgIDI0KSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCSAgIEFERFJFU1NJTkcsCisJCQkJCQkJICAgWFkpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJU09VUkNFX0hFSUdIVCwgMykpOworCQlicmVhazsKKwljYXNlIDE2OgorCWRlZmF1bHQ6CisJCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWFksCisJCQkJCSAgTk9STUFMKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJUEFUVEVSTl9ZLAorCQkJCQkJCTApIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YLAorCQkJCSAgICAwKSB8IEZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgICBQSVhFTF9GT1JNQVQsCisJCQkJCQkJICAgMTYpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICAgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJICAgQUREUkVTU0lORywKKwkJCQkJCQkgICBYWSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQlTT1VSQ0VfSEVJR0hULCAzKSk7CisJCWJyZWFrOworCX0KKworCVNNVENfd3JpdGUyRHJlZyhERV9NQVNLUywKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX01BU0tTLCBCWVRFX01BU0ssIDB4RkZGRikgfAorCQkJRklFTERfVkFMVUUoMCwgREVfTUFTS1MsIEJJVF9NQVNLLCAweEZGRkYpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09MT1JfQ09NUEFSRV9NQVNLLAorCQkJRklFTERfVkFMVUUoMCwgREVfQ09MT1JfQ09NUEFSRV9NQVNLLCBNQVNLUywgXAorCQkJCTB4RkZGRkZGKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0NPTE9SX0NPTVBBUkUsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9DT0xPUl9DT01QQVJFLCBDT0xPUiwgMHhGRkZGRkYpKTsKK30KKwordm9pZCBkZVZlcnRpY2FsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCQkgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJCSAgICB1bnNpZ25lZCBsb25nIG5YLAorCQkgICAgdW5zaWduZWQgbG9uZyBuWSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCit7CisJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCisJCQkJICAgIGRzdF9iYXNlKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sIGRzdF9waXRjaCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIFNPVVJDRSwgZHN0X3BpdGNoKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILAorCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBuWCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIG5ZKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCAxKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGRzdF9oZWlnaHQpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sIExFRlRfVE9fUklHSFQpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBNQUpPUiwgWSkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWCwgTkVHQVRJVkUpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1ksIFBPU0lUSVZFKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTEFTVF9QSVhFTCwgT0ZGKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgU0hPUlRfU1RST0tFKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCQkJRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCAweDBDKSk7CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCit2b2lkIGRlSG9yaXpvbnRhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgblgsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgblksCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLCB1bnNpZ25lZCBsb25nIG5Db2xvcikKK3sKKwlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKKwkJCQkgICAgZHN0X2Jhc2UpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwgZHN0X3BpdGNoKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgU09VUkNFLCBkc3RfcGl0Y2gpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLAorCQkJICBESVNBQkxFKSB8IEZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLAorCQkJCQkJIG5YKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgREVfREVTVElOQVRJT04sCisJCQkJCQkJICAgWSwKKwkJCQkJCQkgICBuWSkpOworCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsCisJCQkgICAgZHN0X3dpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwKKwkJCQkJCSAgICAgWV9FVCwgMSkpOworCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgICAgREVfQ09OVFJPTCwKKwkJCQkJCQkgICAgRElSRUNUSU9OLAorCQkJCQkJCSAgICBSSUdIVF9UT19MRUZUKQorCQl8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBNQUpPUiwgWCkgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgREVfQ09OVFJPTCwKKwkJCQkJCQkgU1RFUF9YLAorCQkJCQkJCSBQT1NJVElWRSkKKwkJfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9ZLAorCQkJICAgIE5FR0FUSVZFKSB8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLAorCQkJCQkJICBMQVNUX1BJWEVMLAorCQkJCQkJICBPRkYpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICAgREVfQ09OVFJPTCwKKwkJCQkJCQkgICBDT01NQU5ELAorCQkJCQkJCSAgIFNIT1JUX1NUUk9LRSkKKwkJfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwKKwkJCSAgICBST1AyKSB8IEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwKKwkJCQkJCTB4MEMpKTsKKworCXNtdGNfZGVfYnVzeSA9IDE7Cit9CisKK3ZvaWQgZGVMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCSAgICB1bnNpZ25lZCBsb25nIG5YMSwKKwkgICAgdW5zaWduZWQgbG9uZyBuWTEsCisJICAgIHVuc2lnbmVkIGxvbmcgblgyLCB1bnNpZ25lZCBsb25nIG5ZMiwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCit7CisJdW5zaWduZWQgbG9uZyBuQ29tbWFuZCA9CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sIExFRlRfVE9fUklHSFQpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIE1BSk9SLCBYKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1gsIFBPU0lUSVZFKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1ksIFBPU0lUSVZFKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBMQVNUX1BJWEVMLCBPRkYpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKKwkgICAgRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCAweDBDKTsKKwl1bnNpZ25lZCBsb25nIERlbHRhWDsKKwl1bnNpZ25lZCBsb25nIERlbHRhWTsKKworCS8qIENhbGN1bGF0ZSBkZWx0YSBYICovCisJaWYgKG5YMSA8PSBuWDIpCisJCURlbHRhWCA9IG5YMiAtIG5YMTsKKwllbHNlIHsKKwkJRGVsdGFYID0gblgxIC0gblgyOworCQluQ29tbWFuZCA9IEZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgU1RFUF9YLCBORUdBVElWRSk7CisJfQorCisJLyogQ2FsY3VsYXRlIGRlbHRhIFkgKi8KKwlpZiAoblkxIDw9IG5ZMikKKwkJRGVsdGFZID0gblkyIC0gblkxOworCWVsc2UgeworCQlEZWx0YVkgPSBuWTEgLSBuWTI7CisJCW5Db21tYW5kID0gRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBTVEVQX1ksIE5FR0FUSVZFKTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgdGhlIG1ham9yIGF4aXMgKi8KKwlpZiAoRGVsdGFYIDwgRGVsdGFZKQorCQluQ29tbWFuZCA9IEZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgTUFKT1IsIFkpOworCisJLyogVmVydGljYWwgbGluZT8gKi8KKwlpZiAoblgxID09IG5YMikKKwkJZGVWZXJ0aWNhbExpbmUoZHN0X2Jhc2UsIGRzdF9waXRjaCwgblgxLCBuWTEsIERlbHRhWSwgbkNvbG9yKTsKKworCS8qIEhvcml6b250YWwgbGluZT8gKi8KKwllbHNlIGlmIChuWTEgPT0gblkyKQorCQlkZUhvcml6b250YWxMaW5lKGRzdF9iYXNlLCBkc3RfcGl0Y2gsIG5YMSwgblkxLCBcCisJCQkJRGVsdGFYLCBuQ29sb3IpOworCisJLyogRGlhZ29uYWwgbGluZT8gKi8KKwllbHNlIGlmIChEZWx0YVggPT0gRGVsdGFZKSB7CisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQkJCSAgICBBRERSRVNTLCBkc3RfYmFzZSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1BJVENILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCAxKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIG5ZMSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCAxKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBEZWx0YVgpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKKwkJCQlGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIENPTU1BTkQsCisJCQkJCSAgU0hPUlRfU1RST0tFKSk7CisJfQorCisJLyogR2VuZXJpYyBsaW5lICovCisJZWxzZSB7CisJCXVuc2lnbmVkIGludCBrMSwgazIsIGV0LCB3OworCQlpZiAoRGVsdGFYIDwgRGVsdGFZKSB7CisJCQlrMSA9IDIgKiBEZWx0YVg7CisJCQlldCA9IGsxIC0gRGVsdGFZOworCQkJazIgPSBldCAtIERlbHRhWTsKKwkJCXcgPSBEZWx0YVkgKyAxOworCQl9IGVsc2UgeworCQkJazEgPSAyICogRGVsdGFZOworCQkJZXQgPSBrMSAtIERlbHRhWDsKKwkJCWsyID0gZXQgLSBEZWx0YVg7CisJCQl3ID0gRGVsdGFYICsgMTsKKwkJfQorCisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQkJCSAgICBBRERSRVNTLCBkc3RfYmFzZSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1BJVENILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBrMSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgazIpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIG5YMSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBuWTEpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgdykgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZXQpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKKwkJCQlGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIENPTU1BTkQsCisJCQkJCSAgTElORV9EUkFXKSk7CisJfQorCisJc210Y19kZV9idXN5ID0gMTsKK30KKwordm9pZCBkZUZpbGxSZWN0KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCQl1bnNpZ25lZCBsb25nIGRzdF9YLAorCQl1bnNpZ25lZCBsb25nIGRzdF9ZLAorCQl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwkJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LCB1bnNpZ25lZCBsb25nIG5Db2xvcikKK3sKKwlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKKwkJCQkgICAgZHN0X2Jhc2UpKTsKKworCWlmIChkc3RfcGl0Y2gpIHsKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCX0KKworCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgZHN0X1gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBkc3RfWSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgZHN0X3dpZHRoKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGRzdF9oZWlnaHQpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sIExFRlRfVE9fUklHSFQpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBMQVNUX1BJWEVMLCBPRkYpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBSRUNUQU5HTEVfRklMTCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgMHgwQykpOworCisJc210Y19kZV9idXN5ID0gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBkZVJvdGF0ZVBhdHRlcm4KKyAqCisgKiBQdXJwb3NlCisgKiAgICBSb3RhdGUgdGhlIGdpdmVuIHBhdHRlcm4gaWYgbmVjZXNzYXJ5CisgKgorICogUGFyYW1ldGVycworICogICAgW2luXQorICoJICAgcFBhdHRlcm4gIC0gUG9pbnRlciB0byBERV9TVVJGQUNFIHN0cnVjdHVyZSBjb250YWluaW5nCisgKgkJICAgICAgIHBhdHRlcm4gYXR0cmlidXRlcworICoJICAgcGF0dGVyblggIC0gWCBwb3NpdGlvbiAoMC03KSBvZiBwYXR0ZXJuIG9yaWdpbgorICoJICAgcGF0dGVyblkgIC0gWSBwb3NpdGlvbiAoMC03KSBvZiBwYXR0ZXJuIG9yaWdpbgorICoKKyAqICAgIFtvdXRdCisgKgkgICBwYXR0ZXJuX2RzdGFkZHIgLSBQb2ludGVyIHRvIHByZS1hbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcKKyAqCSAgIHJvdGF0ZWQgcGF0dGVybgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkZVJvdGF0ZVBhdHRlcm4odW5zaWduZWQgY2hhciAqcGF0dGVybl9kc3RhZGRyLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF0dGVybl9zcmNfYWRkciwKKwkJICAgICB1bnNpZ25lZCBsb25nIHBhdHRlcm5fQlBQLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF0dGVybl9zdHJpZGUsIGludCBwYXR0ZXJuWCwgaW50IHBhdHRlcm5ZKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgcGF0dGVybltQQVRURVJOX1dJRFRIICogUEFUVEVSTl9IRUlHSFRdOworCXVuc2lnbmVkIGludCB4LCB5OworCXVuc2lnbmVkIGNoYXIgKnBqUGF0Qnl0ZTsKKworCWlmIChwYXR0ZXJuX2RzdGFkZHIgIT0gTlVMTCkgeworCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkJaWYgKHBhdHRlcm5YIHx8IHBhdHRlcm5ZKSB7CisJCQkvKiBSb3RhdGUgcGF0dGVybiAqLworCQkJcGpQYXRCeXRlID0gKHVuc2lnbmVkIGNoYXIgKilwYXR0ZXJuOworCisJCQlzd2l0Y2ggKHBhdHRlcm5fQlBQKSB7CisJCQljYXNlIDg6CisJCQkJeworCQkJCQlmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7CisJCQkJCQl1bnNpZ25lZCBjaGFyICpwakJ1ZmZlciA9CisJCQkJCQkgICAgcGF0dGVybl9kc3RhZGRyICsKKwkJCQkJCSAgICAoKHBhdHRlcm5ZICsgeSkgJiA3KSAqIDg7CisJCQkJCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisJCQkJCQkJcGpCdWZmZXJbKHBhdHRlcm5YICsKKwkJCQkJCQkJICB4KSAmIDddID0KKwkJCQkJCQkgICAgcGpQYXRCeXRlW3hdOworCQkJCQkJfQorCQkJCQkJcGpQYXRCeXRlICs9IHBhdHRlcm5fc3RyaWRlOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSAxNjoKKwkJCQl7CisJCQkJCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJCQkJCXVuc2lnbmVkIHNob3J0ICpwakJ1ZmZlciA9CisJCQkJCQkgICAgKHVuc2lnbmVkIHNob3J0ICopCisJCQkJCQkgICAgcGF0dGVybl9kc3RhZGRyICsKKwkJCQkJCSAgICAoKHBhdHRlcm5ZICsgeSkgJiA3KSAqIDg7CisJCQkJCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisJCQkJCQkJcGpCdWZmZXJbKHBhdHRlcm5YICsKKwkJCQkJCQkJICB4KSAmIDddID0KKwkJCQkJCQkgICAgKCh1bnNpZ25lZCBzaG9ydCAqKQorCQkJCQkJCSAgICAgcGpQYXRCeXRlKVt4XTsKKwkJCQkJCX0KKwkJCQkJCXBqUGF0Qnl0ZSArPSBwYXR0ZXJuX3N0cmlkZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgMzI6CisJCQkJeworCQkJCQlmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7CisJCQkJCQl1bnNpZ25lZCBsb25nICpwakJ1ZmZlciA9CisJCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgKikKKwkJCQkJCSAgICBwYXR0ZXJuX2RzdGFkZHIgKworCQkJCQkJICAgICgocGF0dGVyblkgKyB5KSAmIDcpICogODsKKwkJCQkJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJCQkJCQlwakJ1ZmZlclsocGF0dGVyblggKworCQkJCQkJCQkgIHgpICYgN10gPQorCQkJCQkJCSAgICAoKHVuc2lnbmVkIGxvbmcgKikKKwkJCQkJCQkgICAgIHBqUGF0Qnl0ZSlbeF07CisJCQkJCQl9CisJCQkJCQlwalBhdEJ5dGUgKz0gcGF0dGVybl9zdHJpZGU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLypEb24ndCByb3RhdGUsanVzdCBjb3B5IHBhdHRlcm4gaW50byBwYXR0ZXJuX2RzdGFkZHIqLworCQkJZm9yIChpID0gMDsgaSA8IChwYXR0ZXJuX0JQUCAqIDIpOyBpKyspIHsKKwkJCQkoKHVuc2lnbmVkIGxvbmcgKilwYXR0ZXJuX2RzdGFkZHIpW2ldID0KKwkJCQkgICAgcGF0dGVybltpXTsKKwkJCX0KKwkJfQorCisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGRlQ29weQorICoKKyAqIFB1cnBvc2UKKyAqICAgIENvcHkgYSByZWN0YW5ndWxhciBhcmVhIG9mIHRoZSBzb3VyY2Ugc3VyZmFjZSB0byBhIGRlc3RpbmF0aW9uIHN1cmZhY2UKKyAqCisgKiBSZW1hcmtzCisgKiAgICBTb3VyY2UgYml0bWFwIG11c3QgaGF2ZSB0aGUgc2FtZSBjb2xvciBkZXB0aCAoQlBQKSBhcyB0aGUgZGVzdGluYXRpb24KKyAqICAgIGJpdG1hcC4KKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkZUNvcHkodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X0JQUCwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfWCwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfWSwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCisJICAgIHVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKKwkgICAgdW5zaWduZWQgbG9uZyBzcmNfYmFzZSwKKwkgICAgdW5zaWduZWQgbG9uZyBzcmNfcGl0Y2gsCisJICAgIHVuc2lnbmVkIGxvbmcgc3JjX1gsCisJICAgIHVuc2lnbmVkIGxvbmcgc3JjX1ksIHBUcmFuc3BhcmVudCBwVHJhbnNwLCB1bnNpZ25lZCBjaGFyIG5ST1AyKQoreworCXVuc2lnbmVkIGxvbmcgbkRpcmVjdGlvbiA9IDA7CisJdW5zaWduZWQgbG9uZyBuVHJhbnNwYXJlbnQgPSAwOworCS8qIERpcmVjdGlvbiBvZiBST1AyIG9wZXJhdGlvbjoKKwkgKiAxID0gTGVmdCB0byBSaWdodCwKKwkgKiAoLTEpID0gUmlnaHQgdG8gTGVmdAorCSAqLworCXVuc2lnbmVkIGxvbmcgb3BTaWduID0gMTsKKwkvKiB4V2lkdGggaXMgaW4gcGl4ZWxzICovCisJdW5zaWduZWQgbG9uZyB4V2lkdGggPSAxOTIgLyAoZHN0X0JQUCAvIDgpOworCXVuc2lnbmVkIGxvbmcgZGVfY3RybCA9IDA7CisKKwlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKKwkJCQkgICAgZHN0X2Jhc2UpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfU09VUkNFX0JBU0UsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfU09VUkNFX0JBU0UsIEFERFJFU1MsCisJCQkJICAgIHNyY19iYXNlKSk7CisKKwlpZiAoZHN0X3BpdGNoICYmIHNyY19waXRjaCkgeworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJICAgICBERV9QSVRDSCwKKwkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJICAgICBzcmNfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJICAgICBzcmNfcGl0Y2gpKTsKKwl9CisKKwkvKiBTZXQgdHJhbnNwYXJlbnQgYml0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocFRyYW5zcCAhPSBOVUxMKSB7CisJCW5UcmFuc3BhcmVudCA9CisJCSAgICBwVHJhbnNwLT5tYXRjaCB8IHBUcmFuc3AtPnNlbGVjdCB8IHBUcmFuc3AtPmNvbnRyb2w7CisKKwkJLyogU2V0IGNvbG9yIGNvbXBhcmUgcmVnaXN0ZXIgKi8KKwkJU01UQ193cml0ZTJEcmVnKERFX0NPTE9SX0NPTVBBUkUsCisJCQkJRklFTERfVkFMVUUoMCwgREVfQ09MT1JfQ09NUEFSRSwgQ09MT1IsCisJCQkJCSAgICBwVHJhbnNwLT5jb2xvcikpOworCX0KKworCS8qIERldGVybWluZSBkaXJlY3Rpb24gb2Ygb3BlcmF0aW9uICovCisJaWYgKHNyY19ZIDwgZHN0X1kpIHsKKwkJLyogKy0tLS0tLS0tLS0rCisJCSAgIHxTICAgICAgICAgfAorCQkgICB8ICAgICAgICAgICstLS0tLS0tLS0tKworCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAorCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAorCQkgICArLS0tfC0tLS0tLSsgICAgICB8CisJCSAgIHwgICAgICAgICAgICAgICBEIHwKKwkJICAgKy0tLS0tLS0tLS0rICovCisKKwkJbkRpcmVjdGlvbiA9IEJPVFRPTV9UT19UT1A7CisJfSBlbHNlIGlmIChzcmNfWSA+IGRzdF9ZKSB7CisJCS8qICstLS0tLS0tLS0tKworCQkgICB8RCAgICAgICAgIHwKKwkJICAgfCAgICAgICAgICArLS0tLS0tLS0tLSsKKwkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKKwkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKKwkJICAgKy0tLXwtLS0tLS0rICAgICAgfAorCQkgICB8ICAgICAgICAgICAgICAgUyB8CisJCSAgICstLS0tLS0tLS0tKyAqLworCisJCW5EaXJlY3Rpb24gPSBUT1BfVE9fQk9UVE9NOworCX0gZWxzZSB7CisJCS8qIHNyY19ZID09IGRzdF9ZICovCisKKwkJaWYgKHNyY19YIDw9IGRzdF9YKSB7CisJCQkvKiArLS0tLS0tKy0tLSstLS0tLS0rCisJCQkgICB8UyAgICAgfCAgIHwgICAgIER8CisJCQkgICB8ICAgICAgfCAgIHwgICAgICB8CisJCQkgICB8ICAgICAgfCAgIHwgICAgICB8CisJCQkgICB8ICAgICAgfCAgIHwgICAgICB8CisJCQkgICArLS0tLS0tKy0tLSstLS0tLS0rICovCisKKwkJCW5EaXJlY3Rpb24gPSBSSUdIVF9UT19MRUZUOworCQl9IGVsc2UgeworCQkJLyogc3JjX1ggPiBkc3RfWCAqLworCisJCQkvKiArLS0tLS0tKy0tLSstLS0tLS0rCisJCQkgICB8RCAgICAgfCAgIHwgICAgIFN8CisJCQkgICB8ICAgICAgfCAgIHwgICAgICB8CisJCQkgICB8ICAgICAgfCAgIHwgICAgICB8CisJCQkgICB8ICAgICAgfCAgIHwgICAgICB8CisJCQkgICArLS0tLS0tKy0tLSstLS0tLS0rICovCisKKwkJCW5EaXJlY3Rpb24gPSBMRUZUX1RPX1JJR0hUOworCQl9CisJfQorCisJaWYgKChuRGlyZWN0aW9uID09IEJPVFRPTV9UT19UT1ApIHx8IChuRGlyZWN0aW9uID09IFJJR0hUX1RPX0xFRlQpKSB7CisJCXNyY19YICs9IGRzdF93aWR0aCAtIDE7CisJCXNyY19ZICs9IGRzdF9oZWlnaHQgLSAxOworCQlkc3RfWCArPSBkc3Rfd2lkdGggLSAxOworCQlkc3RfWSArPSBkc3RfaGVpZ2h0IC0gMTsKKwkJb3BTaWduID0gKC0xKTsKKwl9CisKKwlpZiAoZHN0X0JQUCA+PSAyNCkgeworCQlzcmNfWCAqPSAzOworCQlzcmNfWSAqPSAzOworCQlkc3RfWCAqPSAzOworCQlkc3RfWSAqPSAzOworCQlkc3Rfd2lkdGggKj0gMzsKKwkJaWYgKChuRGlyZWN0aW9uID09IEJPVFRPTV9UT19UT1ApCisJCSAgICB8fCAobkRpcmVjdGlvbiA9PSBSSUdIVF9UT19MRUZUKSkgeworCQkJc3JjX1ggKz0gMjsKKwkJCWRzdF9YICs9IDI7CisJCX0KKwl9CisKKwkvKiBXb3JrYXJvdW5kIGZvciAxOTIgYnl0ZSBodyBidWcgKi8KKwlpZiAoKG5ST1AyICE9IDB4MEMpICYmICgoZHN0X3dpZHRoICogKGRzdF9CUFAgLyA4KSkgPj0gMTkyKSkgeworCQkvKgorCQkgKiBQZXJmb3JtIHRoZSBST1AyIG9wZXJhdGlvbiBpbiBjaHVua3Mgb2YgKHhXaWR0aCAqCisJCSAqIGRzdF9oZWlnaHQpCisJCSAqLworCQl3aGlsZSAoMSkgeworCQkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAorCQkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIHNyY19YKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCBzcmNfWSkpOworCisJCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLAorCQkJCSAgRElTQUJMRSkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSBERV9ERVNUSU5BVElPTiwKKwkJCQkJCQkgWCwKKwkJCQkJCQkgZHN0X1gpCisJCQl8IEZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLAorCQkJCQkJICAgICAgZHN0X1kpKTsKKworCQkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsCisJCQkJICAgIHhXaWR0aCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgREVfRElNRU5TSU9OLAorCQkJCQkJCSAgWV9FVCwKKwkJCQkJCQkgIGRzdF9oZWlnaHQpKTsKKworCQkJZGVfY3RybCA9CisJCQkgICAgRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLAorCQkJCW5ST1AyKSB8IG5UcmFuc3BhcmVudCB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgREVfQ09OVFJPTCwKKwkJCQkJCQkgIFJPUF9TRUxFQ1QsCisJCQkJCQkJICBST1AyKQorCQkJICAgIHwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsCisJCQkJQklUQkxUKSB8ICgobkRpcmVjdGlvbiA9PQorCQkJCQkgICAgMSkgPyBGSUVMRF9TRVQoMCwKKwkJCQkJCSAgIERFX0NPTlRST0wsCisJCQkJCQkgICBESVJFQ1RJT04sCisJCQkJCQkgICBSSUdIVF9UT19MRUZUKQorCQkJCQkgICA6IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLAorCQkJCQkgICAgICAgRElSRUNUSU9OLAorCQkJCQkgICAgICAgTEVGVF9UT19SSUdIVCkpIHwKKwkJCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCk7CisKKwkJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLCBkZV9jdHJsKTsKKworCQkJc3JjX1ggKz0gKG9wU2lnbiAqIHhXaWR0aCk7CisJCQlkc3RfWCArPSAob3BTaWduICogeFdpZHRoKTsKKwkJCWRzdF93aWR0aCAtPSB4V2lkdGg7CisKKwkJCWlmIChkc3Rfd2lkdGggPD0gMCkgeworCQkJCS8qIFJPUDIgb3BlcmF0aW9uIGlzIGNvbXBsZXRlICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh4V2lkdGggPiBkc3Rfd2lkdGgpCisJCQkJeFdpZHRoID0gZHN0X3dpZHRoOworCQl9CisJfSBlbHNlIHsKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAorCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBzcmNfWCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCBzcmNfWSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIGRzdF9YKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgZHN0X1kpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCBkc3Rfd2lkdGgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZHN0X2hlaWdodCkpOworCisJCWRlX2N0cmwgPSBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIG5ST1AyKSB8CisJCSAgICBuVHJhbnNwYXJlbnQgfAorCQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKKwkJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBCSVRCTFQpIHwKKwkJICAgICgobkRpcmVjdGlvbiA9PSAxKSA/IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sCisJCQkJCQkgICBSSUdIVF9UT19MRUZUKQorCQkgICAgIDogRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwKKwkJCQkgTEVGVF9UT19SSUdIVCkpIHwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsCisJCQkJCQkJICAgICBTVEFUVVMsIFNUQVJUKTsKKwkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsIGRlX2N0cmwpOworCX0KKworCXNtdGNfZGVfYnVzeSA9IDE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIGZvcm1hdCB0aGF0IHdpbGwgYXBwbHkgdG8gdGhlIDJEIEVuZ2luZS4KKyAqLwordm9pZCBkZVNldFBpeGVsRm9ybWF0KHVuc2lnbmVkIGxvbmcgYnBwKQoreworCXVuc2lnbmVkIGxvbmcgZGVfZm9ybWF0OworCisJZGVfZm9ybWF0ID0gU01UQ19yZWFkMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQpOworCisJc3dpdGNoIChicHApIHsKKwljYXNlIDg6CisJCWRlX2Zvcm1hdCA9CisJCSAgICBGSUVMRF9TRVQoZGVfZm9ybWF0LCBERV9TVFJFVENIX0ZPUk1BVCwgUElYRUxfRk9STUFULCA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIDE2OgorCQlkZV9mb3JtYXQgPQorCQkgICAgRklFTERfU0VUKGRlX2Zvcm1hdCwgREVfU1RSRVRDSF9GT1JNQVQsIFBJWEVMX0ZPUk1BVCwgMTYpOworCQlicmVhazsKKwljYXNlIDMyOgorCQlkZV9mb3JtYXQgPQorCQkgICAgRklFTERfU0VUKGRlX2Zvcm1hdCwgREVfU1RSRVRDSF9GT1JNQVQsIFBJWEVMX0ZPUk1BVCwgMzIpOworCQlicmVhazsKKwl9CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsIGRlX2Zvcm1hdCk7Cit9CisKKy8qCisgKiBTeXN0ZW0gbWVtb3J5IHRvIFZpZGVvIG1lbW9yeSBtb25vY2hyb21lIGV4cGFuc2lvbi4KKyAqCisgKiBTb3VyY2UgaXMgbW9ub2Nocm9tZSBpbWFnZSBpbiBzeXN0ZW0gbWVtb3J5LiAgVGhpcyBmdW5jdGlvbiBleHBhbmRzIHRoZQorICogbW9ub2Nocm9tZSBkYXRhIHRvIGNvbG9yIGltYWdlIGluIHZpZGVvIG1lbW9yeS4KKyAqLworCitsb25nIGRlU3lzdGVtTWVtMlZpZGVvTWVtTW9ub0JsdChjb25zdCBjaGFyICpwU3JjYnVmLAorCQkJCSBsb25nIHNyY0RlbHRhLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0Qml0LAorCQkJCSB1bnNpZ25lZCBsb25nIGRCYXNlLAorCQkJCSB1bnNpZ25lZCBsb25nIGRQaXRjaCwKKwkJCQkgdW5zaWduZWQgbG9uZyBicHAsCisJCQkJIHVuc2lnbmVkIGxvbmcgZHgsIHVuc2lnbmVkIGxvbmcgZHksCisJCQkJIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAorCQkJCSB1bnNpZ25lZCBsb25nIGZDb2xvciwKKwkJCQkgdW5zaWduZWQgbG9uZyBiQ29sb3IsCisJCQkJIHVuc2lnbmVkIGxvbmcgcm9wMikgeworCXVuc2lnbmVkIGxvbmcgYnl0ZVBlclBpeGVsOworCXVuc2lnbmVkIGxvbmcgdWxCeXRlc1BlclNjYW47CisJdW5zaWduZWQgbG9uZyB1bDRCeXRlc1BlclNjYW47CisJdW5zaWduZWQgbG9uZyB1bEJ5dGVzUmVtYWluOworCXVuc2lnbmVkIGxvbmcgZGVfY3RybCA9IDA7CisJdW5zaWduZWQgY2hhciBhalJlbWFpbls0XTsKKwlsb25nIGksIGo7CisKKwlieXRlUGVyUGl4ZWwgPSBicHAgLyA4OworCisJLyogSnVzdCBtYWtlIHN1cmUgdGhlIHN0YXJ0IGJpdCBpcyB3aXRoaW4gbGVnYWwgcmFuZ2UgKi8KKwlzdGFydEJpdCAmPSA3OworCisJdWxCeXRlc1BlclNjYW4gPSAod2lkdGggKyBzdGFydEJpdCArIDcpIC8gODsKKwl1bDRCeXRlc1BlclNjYW4gPSB1bEJ5dGVzUGVyU2NhbiAmIH4zOworCXVsQnl0ZXNSZW1haW4gPSB1bEJ5dGVzUGVyU2NhbiAmIDM7CisKKwlpZiAoc210Y19kZV9idXN5KQorCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkvKgorCSAqIDJEIFNvdXJjZSBCYXNlLiAgVXNlIDAgZm9yIEhPU1QgQmx0LgorCSAqLworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19TT1VSQ0VfQkFTRSwgMCk7CisKKwkvKgorCSAqIDJEIERlc3RpbmF0aW9uIEJhc2UuCisJICoKKwkgKiBJdCBpcyBhbiBhZGRyZXNzIG9mZnNldCAoMTI4IGJpdCBhbGlnbmVkKSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKKwkgKiBmcmFtZSBidWZmZXIuCisJICovCisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIGRCYXNlKTsKKworCWlmIChkUGl0Y2gpIHsKKworCQkvKgorCQkgKiBQcm9ncmFtIHBpdGNoIChkaXN0YW5jZSBiZXR3ZWVuIHRoZSAxc3QgcG9pbnRzIG9mIHR3bworCQkgKiBhZGphY2VudCBsaW5lcykuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBpbnB1dCBwaXRjaCBpcyBCWVRFIHZhbHVlLCBidXQgdGhlIDJEIFBpdGNoCisJCSAqIHJlZ2lzdGVyIHVzZXMgcGl4ZWwgdmFsdWVzLiBOZWVkIEJ5dGUgdG8gcGl4ZWwgY29udmVydGlvbi4KKwkJICovCisKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJICAgIGRQaXRjaCAvCisJCQkgICAgYnl0ZVBlclBpeGVsKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJREVfUElUQ0gsCisJCQkJCQkJU09VUkNFLAorCQkJCQkJCWRQaXRjaCAvCisJCQkJCQkJYnl0ZVBlclBpeGVsKSk7CisKKwkJLyogU2NyZWVuIFdpbmRvdyB3aWR0aCBpbiBQaXhlbHMuCisJCSAqCisJCSAqIDJEIGVuZ2luZSB1c2VzIHRoaXMgdmFsdWUgdG8gY2FsY3VsYXRlIHRoZSBsaW5lYXIgYWRkcmVzcyBpbgorCQkgKiBmcmFtZSBidWZmZXIgZm9yIGEgZ2l2ZW4gcG9pbnQuCisJCSAqLworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJICAgIChkUGl0Y2ggLworCQkJICAgICBieXRlUGVyUGl4ZWwpKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkJICBTT1VSQ0UsCisJCQkJCQkJICAoZFBpdGNoCisJCQkJCQkJICAgLworCQkJCQkJCSAgIGJ5dGVQZXJQaXhlbCkpKTsKKwl9CisJLyogTm90ZTogRm9yIDJEIFNvdXJjZSBpbiBIb3N0IFdyaXRlLCBvbmx5IFhfSzEgZmllbGQgaXMgbmVlZGVkLCBhbmQKKwkgKiBZX0syIGZpZWxkIGlzIG5vdCB1c2VkLiBGb3IgbW9ubyBiaXRtYXAsIHVzZSBzdGFydEJpdCBmb3IgWF9LMS4KKwkgKi8KKworCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCisJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIHN0YXJ0Qml0KSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIDApKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIGR4KSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgZHkpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIHdpZHRoKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGhlaWdodCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsIGZDb2xvcik7CisJU01UQ193cml0ZTJEcmVnKERFX0JBQ0tHUk9VTkQsIGJDb2xvcik7CisKKwlpZiAoYnBwKQorCQlkZVNldFBpeGVsRm9ybWF0KGJwcCk7CisJLyogU2V0IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlc3RpbmF0aW9uICovCisKKwlkZV9jdHJsID0gRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCByb3AyKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBIT1NUX1dSSVRFKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBIT1NULCBNT05PKSB8CisJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLCBkZV9jdHJsIHwgZGVHZXRUcmFuc3BhcmVuY3koKSk7CisKKwkvKiBXcml0ZSBNT05PIGRhdGEgKGxpbmUgYnkgbGluZSkgdG8gMkQgRW5naW5lIGRhdGEgcG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworCQkvKiBGb3IgZWFjaCBsaW5lLCBzZW5kIHRoZSBkYXRhIGluIGNodW5rcyBvZiA0IGJ5dGVzICovCisJCWZvciAoaiA9IDA7IGogPCAodWw0Qnl0ZXNQZXJTY2FuIC8gNCk7IGorKykKKwkJCVNNVENfd3JpdGUyRGRhdGFwb3J0KDAsCisJCQkJCSAgICAgKih1bnNpZ25lZCBsb25nICopKHBTcmNidWYgKworCQkJCQkJCQkoaiAqIDQpKSk7CisKKwkJaWYgKHVsQnl0ZXNSZW1haW4pIHsKKwkJCW1lbWNweShhalJlbWFpbiwgcFNyY2J1ZiArIHVsNEJ5dGVzUGVyU2NhbiwKKwkJCSAgICAgICB1bEJ5dGVzUmVtYWluKTsKKwkJCVNNVENfd3JpdGUyRGRhdGFwb3J0KDAsICoodW5zaWduZWQgbG9uZyAqKWFqUmVtYWluKTsKKwkJfQorCisJCXBTcmNidWYgKz0gc3JjRGVsdGE7CisJfQorCXNtdGNfZGVfYnVzeSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgdHJhbnNwYXJlbmN5IHN0YXR1cyBmcm9tIERFX0NPTlRST0wgcmVnaXN0ZXIuCisgKiBJdCByZXR1cm5zIGEgZG91YmxlIHdvcmQgd2l0aCB0aGUgdHJhbnNwYXJlbnQgZmllbGRzIHByb3Blcmx5IHNldCwKKyAqIHdoaWxlIG90aGVyIGZpZWxkcyBhcmUgMC4KKyAqLwordW5zaWduZWQgbG9uZyBkZUdldFRyYW5zcGFyZW5jeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZGVfY3RybDsKKworCWRlX2N0cmwgPSBTTVRDX3JlYWQyRHJlZyhERV9DT05UUk9MKTsKKworCWRlX2N0cmwgJj0KKwkgICAgRklFTERfTUFTSyhERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSCkgfAorCSAgICBGSUVMRF9NQVNLKERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVCkgfAorCSAgICBGSUVMRF9NQVNLKERFX0NPTlRST0xfVFJBTlNQQVJFTkNZKTsKKworCXJldHVybiBkZV9jdHJsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDBjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKiBTaWxpY29uIE1vdGlvbiBTTTcxMiAyRCBkcmF3aW5nIGVuZ2luZSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbGljb24gTW90aW9uIFRlY2hub2xvZ3kgQ29ycC4KKyAqIEF1dGhvcjogR2UgV2FuZywgZ2V3YW5nQHNpbGljb25tb3Rpb24uY29tCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwJIDAKKyNlbmRpZgorCisvKiBJbnRlcm5hbCBtYWNyb3MgKi8KKworI2RlZmluZSBfRl9TVEFSVChmKQkJKDAgPyBmKQorI2RlZmluZSBfRl9FTkQoZikJCSgxID8gZikKKyNkZWZpbmUgX0ZfU0laRShmKQkJKDEgKyBfRl9FTkQoZikgLSBfRl9TVEFSVChmKSkKKyNkZWZpbmUgX0ZfTUFTSyhmKQkJKCgoMVVMTCA8PCBfRl9TSVpFKGYpKSAtIDEpIDw8IF9GX1NUQVJUKGYpKQorI2RlZmluZSBfRl9OT1JNQUxJWkUodiwgZikJKCgodikgJiBfRl9NQVNLKGYpKSA+PiBfRl9TVEFSVChmKSkKKyNkZWZpbmUgX0ZfREVOT1JNQUxJWkUodiwgZikJKCgodikgPDwgX0ZfU1RBUlQoZikpICYgX0ZfTUFTSyhmKSkKKworLyogR2xvYmFsIG1hY3JvcyAqLworCisjZGVmaW5lIEZJRUxEX0dFVCh4LCByZWcsIGZpZWxkKSBcCisoIFwKKyAgICBfRl9OT1JNQUxJWkUoKHgpLCByZWcgIyMgXyAjIyBmaWVsZCkgXAorKQorCisjZGVmaW5lIEZJRUxEX1NFVCh4LCByZWcsIGZpZWxkLCB2YWx1ZSkgXAorKCBcCisgICAgKHggJiB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkpIFwKKyAgICB8IF9GX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkICMjIF8gIyMgdmFsdWUsIHJlZyAjIyBfICMjIGZpZWxkKSBcCispCisKKyNkZWZpbmUgRklFTERfVkFMVUUoeCwgcmVnLCBmaWVsZCwgdmFsdWUpIFwKKyggXAorICAgICh4ICYgfl9GX01BU0socmVnICMjIF8gIyMgZmllbGQpKSBcCisgICAgfCBfRl9ERU5PUk1BTElaRSh2YWx1ZSwgcmVnICMjIF8gIyMgZmllbGQpIFwKKykKKworI2RlZmluZSBGSUVMRF9DTEVBUihyZWcsIGZpZWxkKSBcCisoIFwKKyAgICB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkgXAorKQorCisvKiBGaWVsZCBNYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIEZJRUxEX1NUQVJUKGZpZWxkKQkoMCA/IGZpZWxkKQorI2RlZmluZSBGSUVMRF9FTkQoZmllbGQpCSgxID8gZmllbGQpCisjZGVmaW5lIEZJRUxEX1NJWkUoZmllbGQpIFwKKwkoMSArIEZJRUxEX0VORChmaWVsZCkgLSBGSUVMRF9TVEFSVChmaWVsZCkpCisKKyNkZWZpbmUgRklFTERfTUFTSyhmaWVsZCkgXAorCSgoKDEgPDwgKEZJRUxEX1NJWkUoZmllbGQpLTEpKSBcCisJfCAoKDEgPDwgKEZJRUxEX1NJWkUoZmllbGQpLTEpKSAtIDEpKSBcCisJPDwgRklFTERfU1RBUlQoZmllbGQpKQorCisjZGVmaW5lIEZJRUxEX05PUk1BTElaRShyZWcsIGZpZWxkKSBcCisJKCgocmVnKSAmIEZJRUxEX01BU0soZmllbGQpKSA+PiBGSUVMRF9TVEFSVChmaWVsZCkpCisKKyNkZWZpbmUgRklFTERfREVOT1JNQUxJWkUoZmllbGQsIHZhbHVlKSBcCisJKCgodmFsdWUpIDw8IEZJRUxEX1NUQVJUKGZpZWxkKSkgJiBGSUVMRF9NQVNLKGZpZWxkKSkKKworI2RlZmluZSBGSUVMRF9JTklUKHJlZywgZmllbGQsIHZhbHVlKSBcCisJRklFTERfREVOT1JNQUxJWkUocmVnICMjIF8gIyMgZmllbGQsIFwKKwkJcmVnICMjIF8gIyMgZmllbGQgIyMgXyAjIyB2YWx1ZSkKKworI2RlZmluZSBGSUVMRF9JTklUX1ZBTChyZWcsIGZpZWxkLCB2YWx1ZSkgXAorCShGSUVMRF9ERU5PUk1BTElaRShyZWcgIyMgXyAjIyBmaWVsZCwgdmFsdWUpKQorCisjZGVmaW5lIEZJRUxEX1ZBTF9TRVQoeCwgciwgZiwgdikgKHsgXAorCXggPSAoeCAmIH5GSUVMRF9NQVNLKHIgIyMgXyAjIyBmKSkgXAorCXwgRklFTERfREVOT1JNQUxJWkUociAjIyBfICMjIGYsIHIgIyMgXyAjIyBmICMjIF8gIyMgdikgXAorfSkKKworI2RlZmluZSBSR0IociwgZywgYikJKCh1bnNpZ25lZCBsb25nKSgoKHIpIDw8IDE2KSB8ICgoZykgPDwgOCkgfCAoYikpKQorCisvKiBUcmFuc3BhcmVudCBpbmZvIGRlZmluaXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIG1hdGNoOwkvKiBNYXRjaGluZyBwaXhlbCBpcyBPUEFRVUUvVFJBTlNQQVJFTlQgKi8KKwl1bnNpZ25lZCBsb25nIHNlbGVjdDsJLyogVHJhbnNwYXJlbmN5IGNvbnRyb2xsZWQgYnkgU1JDL0RTVCAqLworCXVuc2lnbmVkIGxvbmcgY29udHJvbDsJLyogRU5BQkxFL0RJU0FCTEUgdHJhbnNwYXJlbmN5ICovCisJdW5zaWduZWQgbG9uZyBjb2xvcjsJLyogVHJhbnNwYXJlbnQgY29sb3IgKi8KK30gVHJhbnNwYXJlbnQsICpwVHJhbnNwYXJlbnQ7CisKKyNkZWZpbmUgUElYRUxfREVQVEhfMV9CUAkwCS8qIDEgYml0IHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF84X0JQUAkxCS8qIDggYml0cyBwZXIgcGl4ZWwgKi8KKyNkZWZpbmUgUElYRUxfREVQVEhfMTZfQlBQCTIJLyogMTYgYml0cyBwZXIgcGl4ZWwgKi8KKyNkZWZpbmUgUElYRUxfREVQVEhfMzJfQlBQCTMJLyogMzIgYml0cyBwZXIgcGl4ZWwgKi8KKyNkZWZpbmUgUElYRUxfREVQVEhfWVVWNDIyCTgJLyogMTYgYml0cyBwZXIgcGl4ZWwgWVVWNDIyICovCisjZGVmaW5lIFBJWEVMX0RFUFRIX1lVVjQyMAk5CS8qIDE2IGJpdHMgcGVyIHBpeGVsIFlVVjQyMCAqLworCisjZGVmaW5lIFBBVFRFUk5fV0lEVEgJCTgKKyNkZWZpbmUgUEFUVEVSTl9IRUlHSFQJCTgKKworI2RlZmluZQlUT1BfVE9fQk9UVE9NCQkwCisjZGVmaW5lCUJPVFRPTV9UT19UT1AJCTEKKyNkZWZpbmUgUklHSFRfVE9fTEVGVAkJQk9UVE9NX1RPX1RPUAorI2RlZmluZSBMRUZUX1RPX1JJR0hUCQlUT1BfVE9fQk9UVE9NCisKKy8qIENvbnN0YW50cyB1c2VkIGluIFRyYW5zcGFyZW50IHN0cnVjdHVyZSAqLworI2RlZmluZSBNQVRDSF9PUEFRVUUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTUFUQ0hfVFJBTlNQQVJFTlQJMHgwMDAwMDQwMAorI2RlZmluZSBTT1VSQ0UJCQkweDAwMDAwMDAwCisjZGVmaW5lIERFU1RJTkFUSU9OCQkweDAwMDAwMjAwCisKKy8qIDJEIHJlZ2lzdGVycy4gKi8KKworI2RlZmluZQlERV9TT1VSQ0UJCQkweDAwMDAwMAorI2RlZmluZQlERV9TT1VSQ0VfV1JBUAkJCTMxIDogMzEKKyNkZWZpbmUJREVfU09VUkNFX1dSQVBfRElTQUJMRQkJMAorI2RlZmluZQlERV9TT1VSQ0VfV1JBUF9FTkFCTEUJCTEKKyNkZWZpbmUJREVfU09VUkNFX1hfSzEJCQkyOSA6IDE2CisjZGVmaW5lCURFX1NPVVJDRV9ZX0syCQkJMTUgOiAwCisKKyNkZWZpbmUJREVfREVTVElOQVRJT04JCQkweDAwMDAwNAorI2RlZmluZQlERV9ERVNUSU5BVElPTl9XUkFQCQkzMSA6IDMxCisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1dSQVBfRElTQUJMRQkwCisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1dSQVBfRU5BQkxFCTEKKyNkZWZpbmUJREVfREVTVElOQVRJT05fWAkJMjggOiAxNgorI2RlZmluZQlERV9ERVNUSU5BVElPTl9ZCQkxNSA6IDAKKworI2RlZmluZQlERV9ESU1FTlNJT04JCQkweDAwMDAwOAorI2RlZmluZQlERV9ESU1FTlNJT05fWAkJCTI4IDogMTYKKyNkZWZpbmUJREVfRElNRU5TSU9OX1lfRVQJCTE1IDogMAorCisjZGVmaW5lCURFX0NPTlRST0wJCQkweDAwMDAwQworI2RlZmluZQlERV9DT05UUk9MX1NUQVRVUwkJMzEgOiAzMQorI2RlZmluZQlERV9DT05UUk9MX1NUQVRVU19TVE9QCQkwCisjZGVmaW5lCURFX0NPTlRST0xfU1RBVFVTX1NUQVJUCQkxCisjZGVmaW5lCURFX0NPTlRST0xfUEFUVEVSTgkJMzAgOiAzMAorI2RlZmluZQlERV9DT05UUk9MX1BBVFRFUk5fTU9OTwkJMAorI2RlZmluZQlERV9DT05UUk9MX1BBVFRFUk5fQ09MT1IJMQorI2RlZmluZQlERV9DT05UUk9MX1VQREFURV9ERVNUSU5BVElPTl9YCQkyOSA6IDI5CisjZGVmaW5lCURFX0NPTlRST0xfVVBEQVRFX0RFU1RJTkFUSU9OX1hfRElTQUJMRQkwCisjZGVmaW5lCURFX0NPTlRST0xfVVBEQVRFX0RFU1RJTkFUSU9OX1hfRU5BQkxFCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9RVUlDS19TVEFSVAkJCTI4IDogMjgKKyNkZWZpbmUJREVfQ09OVFJPTF9RVUlDS19TVEFSVF9ESVNBQkxFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfUVVJQ0tfU1RBUlRfRU5BQkxFCQkxCisjZGVmaW5lCURFX0NPTlRST0xfRElSRUNUSU9OCQkJMjcgOiAyNworI2RlZmluZQlERV9DT05UUk9MX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hUCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVAkxCisjZGVmaW5lCURFX0NPTlRST0xfTUFKT1IJCQkyNiA6IDI2CisjZGVmaW5lCURFX0NPTlRST0xfTUFKT1JfWAkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9NQUpPUl9ZCQkJMQorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWAkJCTI1IDogMjUKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1hfUE9TSVRJVkUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1hfTkVHQVRJVkUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1kJCQkyNCA6IDI0CisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9ZX1BPU0lUSVZFCQkxCisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9ZX05FR0FUSVZFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfU1RSRVRDSAkJCTIzIDogMjMKKyNkZWZpbmUJREVfQ09OVFJPTF9TVFJFVENIX0RJU0FCTEUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TVFJFVENIX0VOQUJMRQkJMQorI2RlZmluZQlERV9DT05UUk9MX0hPU1QJCQkJMjIgOiAyMgorI2RlZmluZQlERV9DT05UUk9MX0hPU1RfQ09MT1IJCQkwCisjZGVmaW5lCURFX0NPTlRST0xfSE9TVF9NT05PCQkJMQorI2RlZmluZQlERV9DT05UUk9MX0xBU1RfUElYRUwJCQkyMSA6IDIxCisjZGVmaW5lCURFX0NPTlRST0xfTEFTVF9QSVhFTF9PRkYJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9MQVNUX1BJWEVMX09OCQkxCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORAkJCTIwIDogMTYKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0JJVEJMVAkJMAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfUkVDVEFOR0xFX0ZJTEwJMQorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfREVfVElMRQkJMgorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfVFJBUEVaT0lEX0ZJTEwJMworI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfQUxQSEFfQkxFTkQJCTQKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1JMRV9TVFJJUAkJNQorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfU0hPUlRfU1RST0tFCQk2CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9MSU5FX0RSQVcJCTcKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0hPU1RfV1JJVEUJCTgKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0hPU1RfUkVBRAkJOQorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfSE9TVF9XUklURV9CT1RUT01fVVAJMTAKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1JPVEFURQkJMTEKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0ZPTlQJCQkxMgorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfVEVYVFVSRV9MT0FECQkxNQorI2RlZmluZQlERV9DT05UUk9MX1JPUF9TRUxFQ1QJCQkxNSA6IDE1CisjZGVmaW5lCURFX0NPTlRST0xfUk9QX1NFTEVDVF9ST1AzCQkwCisjZGVmaW5lCURFX0NPTlRST0xfUk9QX1NFTEVDVF9ST1AyCQkxCisjZGVmaW5lCURFX0NPTlRST0xfUk9QMl9TT1VSQ0UJCQkxNCA6IDE0CisjZGVmaW5lCURFX0NPTlRST0xfUk9QMl9TT1VSQ0VfQklUTUFQCQkwCisjZGVmaW5lCURFX0NPTlRST0xfUk9QMl9TT1VSQ0VfUEFUVEVSTgkJMQorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQQkJCTEzIDogMTIKKyNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfTk9UX1BBQ0tFRAkJMAorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV84X1BBQ0tFRAkJMQorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV8xNl9QQUNLRUQJCTIKKyNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfMzJfUEFDS0VECQkzCisjZGVmaW5lCURFX0NPTlRST0xfUkVQRUFUX1JPVEFURQkJMTEgOiAxMQorI2RlZmluZQlERV9DT05UUk9MX1JFUEVBVF9ST1RBVEVfRElTQUJMRQkwCisjZGVmaW5lCURFX0NPTlRST0xfUkVQRUFUX1JPVEFURV9FTkFCTEUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0gJCTEwIDogMTAKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0hfT1BBUVVFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIX1RSQU5TUEFSRU5UCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUCQkJOSA6IDkKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUX1NPVVJDRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1RfREVTVElOQVRJT04JMQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWQkJCQk4IDogOAorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9ESVNBQkxFCQkJMAorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9FTkFCTEUJCQkxCisjZGVmaW5lCURFX0NPTlRST0xfUk9QCQkJCQk3IDogMAorCisvKiBQc2V1ZG8gZmllbGRzLiAqLworCisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUgkJCTI3IDogMjQKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzIyNQkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzEzNQkJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzMxNQkJCTIKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzQ1CQkJMworI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMjcwCQkJNAorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfOTAJCQk1CisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8xODAJCQk4CisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8wCQkJMTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTgkJCQkyNSA6IDI0CisjZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fMAkJCQkwCisjZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fMjcwCQkJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl85MAkJCQkyCisjZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fMTgwCQkJCTMKKworI2RlZmluZQlERV9QSVRDSAkJCQkJMHgwMDAwMTAKKyNkZWZpbmUJREVfUElUQ0hfREVTVElOQVRJT04JCQkJMjggOiAxNgorI2RlZmluZQlERV9QSVRDSF9TT1VSQ0UJCQkJCTEyIDogMAorCisjZGVmaW5lCURFX0ZPUkVHUk9VTkQJCQkJCTB4MDAwMDE0CisjZGVmaW5lCURFX0ZPUkVHUk9VTkRfQ09MT1IJCQkJMzEgOiAwCisKKyNkZWZpbmUJREVfQkFDS0dST1VORAkJCQkJMHgwMDAwMTgKKyNkZWZpbmUJREVfQkFDS0dST1VORF9DT0xPUgkJCQkzMSA6IDAKKworI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVAkJCQkweDAwMDAxQworI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hZCQkJMzAgOiAzMAorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hZX05PUk1BTAkJMAorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hZX09WRVJXUklURQkJMQorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1kJCQkyOSA6IDI3CisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWAkJCTI1IDogMjMKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUCQkJMjEgOiAyMAorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfOAkJMAorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfMTYJCTEKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzI0CQkzCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF8zMgkJMgorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9BRERSRVNTSU5HCQkJMTkgOiAxNgorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9BRERSRVNTSU5HX1hZCQkJMAorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9BRERSRVNTSU5HX0xJTkVBUgkJMTUKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfU09VUkNFX0hFSUdIVAkJCTExIDogMAorCisjZGVmaW5lCURFX0NPTE9SX0NPTVBBUkUJCQkJMHgwMDAwMjAKKyNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRV9DT0xPUgkJCQkyMyA6IDAKKworI2RlZmluZQlERV9DT0xPUl9DT01QQVJFX01BU0sJCQkJMHgwMDAwMjQKKyNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRV9NQVNLX01BU0tTCQkJMjMgOiAwCisKKyNkZWZpbmUJREVfTUFTS1MJCQkJCTB4MDAwMDI4CisjZGVmaW5lCURFX01BU0tTX0JZVEVfTUFTSwkJCQkzMSA6IDE2CisjZGVmaW5lCURFX01BU0tTX0JJVF9NQVNLCQkJCTE1IDogMAorCisjZGVmaW5lCURFX0NMSVBfVEwJCQkJCTB4MDAwMDJDCisjZGVmaW5lCURFX0NMSVBfVExfVE9QCQkJCQkzMSA6IDE2CisjZGVmaW5lCURFX0NMSVBfVExfU1RBVFVTCQkJCTEzIDogMTMKKyNkZWZpbmUJREVfQ0xJUF9UTF9TVEFUVVNfRElTQUJMRQkJCTAKKyNkZWZpbmUJREVfQ0xJUF9UTF9TVEFUVVNfRU5BQkxFCQkJMQorI2RlZmluZQlERV9DTElQX1RMX0lOSElCSVQJCQkJMTIgOiAxMgorI2RlZmluZQlERV9DTElQX1RMX0lOSElCSVRfT1VUU0lERQkJCTAKKyNkZWZpbmUJREVfQ0xJUF9UTF9JTkhJQklUX0lOU0lERQkJCTEKKyNkZWZpbmUJREVfQ0xJUF9UTF9MRUZUCQkJCQkxMSA6IDAKKworI2RlZmluZQlERV9DTElQX0JSCQkJCQkweDAwMDAzMAorI2RlZmluZQlERV9DTElQX0JSX0JPVFRPTQkJCQkzMSA6IDE2CisjZGVmaW5lCURFX0NMSVBfQlJfUklHSFQJCQkJMTIgOiAwCisKKyNkZWZpbmUJREVfTU9OT19QQVRURVJOX0xPVwkJCQkweDAwMDAzNAorI2RlZmluZQlERV9NT05PX1BBVFRFUk5fTE9XX1BBVFRFUk4JCQkzMSA6IDAKKworI2RlZmluZQlERV9NT05PX1BBVFRFUk5fSElHSAkJCQkweDAwMDAzOAorI2RlZmluZQlERV9NT05PX1BBVFRFUk5fSElHSF9QQVRURVJOCQkJMzEgOiAwCisKKyNkZWZpbmUJREVfV0lORE9XX1dJRFRICQkJCQkweDAwMDAzQworI2RlZmluZQlERV9XSU5ET1dfV0lEVEhfREVTVElOQVRJT04JCQkyOCA6IDE2CisjZGVmaW5lCURFX1dJTkRPV19XSURUSF9TT1VSQ0UJCQkJMTIgOiAwCisKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFCQkJCTB4MDAwMDQwCisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9FWFQJCQkyNyA6IDI3CisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCTEKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0NTCQkJMjYgOiAyNgorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQ1NfMAkJCTAKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0NTXzEJCQkxCisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UJCQkweDAwMDA0NAorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9FWFQJCQkyNyA6IDI3CisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0VYVF9MT0NBTAkJMAorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9FWFRfRVhURVJOQUwJCTEKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQ1MJCQkyNiA6IDI2CisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0NTXzAJCQkwCisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0NTXzEJCQkxCisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0FERFJFU1MJCTI1IDogMAorCisjZGVmaW5lCURFX0FMUEhBCQkJCQkweDAwMDA0OAorI2RlZmluZQlERV9BTFBIQV9WQUxVRQkJCQkJNyA6IDAKKworI2RlZmluZQlERV9XUkFQCQkJCQkJMHgwMDAwNEMKKyNkZWZpbmUJREVfV1JBUF9YCQkJCQkzMSA6IDE2CisjZGVmaW5lCURFX1dSQVBfWQkJCQkJMTUgOiAwCisKKyNkZWZpbmUJREVfU1RBVFVTCQkJCQkweDAwMDA1MAorI2RlZmluZQlERV9TVEFUVVNfQ1NDCQkJCQkxIDogMQorI2RlZmluZQlERV9TVEFUVVNfQ1NDX0NMRUFSCQkJCTAKKyNkZWZpbmUJREVfU1RBVFVTX0NTQ19OT1RfQUNUSVZFCQkJMAorI2RlZmluZQlERV9TVEFUVVNfQ1NDX0FDVElWRQkJCQkxCisjZGVmaW5lCURFX1NUQVRVU18yRAkJCQkJMCA6IDAKKyNkZWZpbmUJREVfU1RBVFVTXzJEX0NMRUFSCQkJCTAKKyNkZWZpbmUJREVfU1RBVFVTXzJEX05PVF9BQ1RJVkUJCQkJMAorI2RlZmluZQlERV9TVEFUVVNfMkRfQUNUSVZFCQkJCTEKKworLyogQ29sb3IgU3BhY2UgQ29udmVyc2lvbiByZWdpc3RlcnMuICovCisKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0UJCQkJMHgwMDAwQzgKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfRVhUCQkJCTI3IDogMjcKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCQkxCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQ1NfMAkJCQkwCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0NTXzEJCQkJMQorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJQ1NDX0NPTlNUQU5UUwkJCQkJMHgwMDAwQ0MKKyNkZWZpbmUJQ1NDX0NPTlNUQU5UU19ZCQkJCQkzMSA6IDI0CisjZGVmaW5lCUNTQ19DT05TVEFOVFNfUgkJCQkJMjMgOiAxNgorI2RlZmluZQlDU0NfQ09OU1RBTlRTX0cJCQkJCTE1IDogOAorI2RlZmluZQlDU0NfQ09OU1RBTlRTX0IJCQkJCTcgOiAwCisKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1gJCQkJCTB4MDAwMEQwCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9YX0lOVEVHRVIJCQkJMjYgOiAxNgorI2RlZmluZQlDU0NfWV9TT1VSQ0VfWF9GUkFDVElPTgkJCQkxNSA6IDMKKworI2RlZmluZQlDU0NfWV9TT1VSQ0VfWQkJCQkJMHgwMDAwRDQKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1lfSU5URUdFUgkJCQkyNyA6IDE2CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9ZX0ZSQUNUSU9OCQkJCTE1IDogMworCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFCQkJCTB4MDAwMEQ4CisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0VYVAkJCQkyNyA6IDI3CisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkJMQorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9DUwkJCQkyNiA6IDI2CisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0NTXzAJCQkJMAorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9DU18xCQkJCTEKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAorCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFCQkJCTB4MDAwMERDCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0VYVAkJCQkyNyA6IDI3CisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkJMQorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9DUwkJCQkyNiA6IDI2CisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0NTXzAJCQkJMAorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9DU18xCQkJCTEKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAorCisjZGVmaW5lCUNTQ19TT1VSQ0VfRElNRU5TSU9OCQkJCTB4MDAwMEUwCisjZGVmaW5lCUNTQ19TT1VSQ0VfRElNRU5TSU9OX1gJCQkJMzEgOiAxNgorI2RlZmluZQlDU0NfU09VUkNFX0RJTUVOU0lPTl9ZCQkJCTE1IDogMAorCisjZGVmaW5lCUNTQ19TT1VSQ0VfUElUQ0gJCQkJMHgwMDAwRTQKKyNkZWZpbmUJQ1NDX1NPVVJDRV9QSVRDSF9ZCQkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX1NPVVJDRV9QSVRDSF9VVgkJCQkxNSA6IDAKKworI2RlZmluZQlDU0NfREVTVElOQVRJT04JCQkJCTB4MDAwMEU4CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9XUkFQCQkJCTMxIDogMzEKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1dSQVBfRElTQUJMRQkJCTAKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1dSQVBfRU5BQkxFCQkJMQorI2RlZmluZQlDU0NfREVTVElOQVRJT05fWAkJCQkyNyA6IDE2CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ZCQkJCTExIDogMAorCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ESU1FTlNJT04JCQkweDAwMDBFQworI2RlZmluZQlDU0NfREVTVElOQVRJT05fRElNRU5TSU9OX1gJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ESU1FTlNJT05fWQkJCTE1IDogMAorCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9QSVRDSAkJCQkweDAwMDBGMAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fUElUQ0hfWAkJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9QSVRDSF9ZCQkJCTE1IDogMAorCisjZGVmaW5lCUNTQ19TQ0FMRV9GQUNUT1IJCQkJMHgwMDAwRjQKKyNkZWZpbmUJQ1NDX1NDQUxFX0ZBQ1RPUl9IT1JJWk9OVEFMCQkJMzEgOiAxNgorI2RlZmluZQlDU0NfU0NBTEVfRkFDVE9SX1ZFUlRJQ0FMCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0UJCQkJMHgwMDAwRjgKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfRVhUCQkJMjcgOiAyNworI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9FWFRfTE9DQUwJCQkwCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0VYVF9FWFRFUk5BTAkJMQorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9DUwkJCQkyNiA6IDI2CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0NTXzAJCQkwCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0NTXzEJCQkxCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlDU0NfQ09OVFJPTAkJCQkJMHgwMDAwRkMKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU1RBVFVTCQkJCTMxIDogMzEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU1RBVFVTX1NUT1AJCQkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9TVEFUVVNfU1RBUlQJCQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVQJCQkzMCA6IDI4CisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVVWNDIyCQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVVWNDIwSQkJMQorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lVVjQyMAkJMgorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lWVTkJCQkzCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfSVlVMQkJCTQKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9JWVUyCQkJNQorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1JHQjU2NQkJNgorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1JHQjg4ODgJCTcKKyNkZWZpbmUJQ1NDX0NPTlRST0xfREVTVElOQVRJT05fRk9STUFUCQkJMjcgOiAyNgorI2RlZmluZQlDU0NfQ09OVFJPTF9ERVNUSU5BVElPTl9GT1JNQVRfUkdCNTY1CQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX0RFU1RJTkFUSU9OX0ZPUk1BVF9SR0I4ODg4CQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX0hPUklaT05UQUxfRklMVEVSCQkJMjUgOiAyNQorI2RlZmluZQlDU0NfQ09OVFJPTF9IT1JJWk9OVEFMX0ZJTFRFUl9ESVNBQkxFCQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX0hPUklaT05UQUxfRklMVEVSX0VOQUJMRQkJMQorI2RlZmluZQlDU0NfQ09OVFJPTF9WRVJUSUNBTF9GSUxURVIJCQkyNCA6IDI0CisjZGVmaW5lCUNTQ19DT05UUk9MX1ZFUlRJQ0FMX0ZJTFRFUl9ESVNBQkxFCQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX1ZFUlRJQ0FMX0ZJTFRFUl9FTkFCTEUJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfQllURV9PUkRFUgkJCQkyMyA6IDIzCisjZGVmaW5lCUNTQ19DT05UUk9MX0JZVEVfT1JERVJfWVVZVgkJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfQllURV9PUkRFUl9VWVZZCQkJMQorCisjZGVmaW5lCURFX0RBVEFfUE9SVF81MDEJCQkJMHgxMTAwMDAKKyNkZWZpbmUJREVfREFUQV9QT1JUXzcxMgkJCQkweDQwMDAwMAorI2RlZmluZQlERV9EQVRBX1BPUlRfNzIyCQkJCTB4NjAwMAorCisvKiBwb2ludCB0byB2aXJ0dWFsIE1lbW9yeSBNYXAgSU8gc3RhcnRpbmcgYWRkcmVzcyAqLworZXh0ZXJuIGNoYXIgKnNtdGNfUmVnQmFzZUFkZHJlc3M7CisvKiBwb2ludCB0byB2aXJ0dWFsIHZpZGVvIG1lbW9yeSBzdGFydGluZyBhZGRyZXNzICovCitleHRlcm4gY2hhciAqc210Y19WUkFNQmFzZUFkZHJlc3M7CitleHRlcm4gdW5zaWduZWQgY2hhciBzbXRjX2RlX2J1c3k7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbVJlYWQzMih1bnNpZ25lZCBsb25nIG5PZmZzZXQpOworZXh0ZXJuIHZvaWQgbWVtV3JpdGUzMih1bnNpZ25lZCBsb25nIG5PZmZzZXQsIHVuc2lnbmVkIGxvbmcgbkRhdGEpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgU01UQ19yZWFkMkRyZWcodW5zaWduZWQgbG9uZyBuT2Zmc2V0KTsKKworLyogMkQgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCBkZUluaXQodW5zaWduZWQgaW50IG5Nb2RlV2lkdGgsIHVuc2lnbmVkIGludCBuTW9kZUhlaWdodCwKKwkJICAgdW5zaWduZWQgaW50IGJwcCk7CisKK2V4dGVybiB2b2lkIGRlV2FpdEZvck5vdEJ1c3kodm9pZCk7CisKK2V4dGVybiB2b2lkIGRlVmVydGljYWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBuWCwKKwl1bnNpZ25lZCBsb25nIG5ZLAorCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKKwl1bnNpZ25lZCBsb25nIG5Db2xvcik7CisKK2V4dGVybiB2b2lkIGRlSG9yaXpvbnRhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwl1bnNpZ25lZCBsb25nIG5YLAorCXVuc2lnbmVkIGxvbmcgblksCisJdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCisJdW5zaWduZWQgbG9uZyBuQ29sb3IpOworCitleHRlcm4gdm9pZCBkZUxpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwl1bnNpZ25lZCBsb25nIG5YMSwKKwl1bnNpZ25lZCBsb25nIG5ZMSwKKwl1bnNpZ25lZCBsb25nIG5YMiwKKwl1bnNpZ25lZCBsb25nIG5ZMiwKKwl1bnNpZ25lZCBsb25nIG5Db2xvcik7CisKK2V4dGVybiB2b2lkIGRlRmlsbFJlY3QodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwl1bnNpZ25lZCBsb25nIGRzdF9YLAorCXVuc2lnbmVkIGxvbmcgZHN0X1ksCisJdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCisJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKKworZXh0ZXJuIHZvaWQgZGVSb3RhdGVQYXR0ZXJuKHVuc2lnbmVkIGNoYXIgKnBhdHRlcm5fZHN0YWRkciwKKwl1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3JjX2FkZHIsCisJdW5zaWduZWQgbG9uZyBwYXR0ZXJuX0JQUCwKKwl1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3RyaWRlLAorCWludAlwYXR0ZXJuWCwKKwlpbnQJcGF0dGVyblkpOworCitleHRlcm4gdm9pZCBkZUNvcHkodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwl1bnNpZ25lZCBsb25nIGRzdF9CUFAsCisJdW5zaWduZWQgbG9uZyBkc3RfWCwKKwl1bnNpZ25lZCBsb25nIGRzdF9ZLAorCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAorCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKKwl1bnNpZ25lZCBsb25nIHNyY19iYXNlLAorCXVuc2lnbmVkIGxvbmcgc3JjX3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgc3JjX1gsCisJdW5zaWduZWQgbG9uZyBzcmNfWSwKKwlwVHJhbnNwYXJlbnQJcFRyYW5zcCwKKwl1bnNpZ25lZCBjaGFyIG5ST1AyKTsKKworLyoKKyAqIFN5c3RlbSBtZW1vcnkgdG8gVmlkZW8gbWVtb3J5IG1vbm9jaHJvbWUgZXhwYW5zaW9uLgorICoKKyAqIFNvdXJjZSBpcyBtb25vY2hyb21lIGltYWdlIGluIHN5c3RlbSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgdGhlCisgKiBtb25vY2hyb21lIGRhdGEgdG8gY29sb3IgaW1hZ2UgaW4gdmlkZW8gbWVtb3J5LgorICoKKyAqIEBwU3JjYnVmOiBwb2ludGVyIHRvIHN0YXJ0IG9mIHNvdXJjZSBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeQorICogQHNyY0RlbHRhOiBQaXRjaCB2YWx1ZSAoaW4gYnl0ZXMpIG9mIHRoZSBzb3VyY2UgYnVmZmVyLCAraXZlIG1lYW5zIHRvcAorICogCQlkb3duIGFuZCAtaXZlIG1lYW4gYnV0dG9uIHVwCisgKiBAc3RhcnRCaXQ6IE1vbm8gZGF0YSBjYW4gc3RhcnQgYXQgYW55IGJpdCBpbiBhIGJ5dGUsIHRoaXMgdmFsdWUgc2hvdWxkCisgKiAJCWJlIDAgdG8gNworICogQGRCYXNlOiBBZGRyZXNzIG9mIGRlc3RpbmF0aW9uIDogIG9mZnNldCBpbiBmcmFtZSBidWZmZXIKKyAqIEBkUGl0Y2g6IFBpdGNoIHZhbHVlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgaW4gQllURQorICogQGJwcDogQ29sb3IgZGVwdGggb2YgZGVzdGluYXRpb24gc3VyZmFjZQorICogQGR4LCBkeTogU3RhcnRpbmcgY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBzdXJmYWNlCisgKiBAd2lkdGgsIGhlaWdodDogd2lkdGggYW5kIGhlaWdodCBvZiByZWN0YW5nZSBpbiBwaXhlbCB2YWx1ZQorICogQGZDb2xvcixiQ29sb3I6IEZvcmVncm91bmQsIEJhY2tncm91bmQgY29sb3IgKGNvcnJlc3BvbmRpbmcgdG8gYSAxLCAwIGluCisgKiAJdGhlIG1vbm9jaHJvbWUgZGF0YSkKKyAqIEByb3AyOiBST1AgdmFsdWUKKyAqLworCitleHRlcm4gbG9uZyBkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoCisJY29uc3QgY2hhciAqcFNyY2J1ZiwKKwlsb25nIHNyY0RlbHRhLAorCXVuc2lnbmVkIGxvbmcgc3RhcnRCaXQsCisJdW5zaWduZWQgbG9uZyBkQmFzZSwKKwl1bnNpZ25lZCBsb25nIGRQaXRjaCwKKwl1bnNpZ25lZCBsb25nIGJwcCwKKwl1bnNpZ25lZCBsb25nIGR4LCB1bnNpZ25lZCBsb25nIGR5LAorCXVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAorCXVuc2lnbmVkIGxvbmcgZkNvbG9yLAorCXVuc2lnbmVkIGxvbmcgYkNvbG9yLAorCXVuc2lnbmVkIGxvbmcgcm9wMik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRlR2V0VHJhbnNwYXJlbmN5KHZvaWQpOworZXh0ZXJuIHZvaWQgZGVTZXRQaXhlbEZvcm1hdCh1bnNpZ25lZCBsb25nIGJwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxZGJjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpAQCAtMCwwICsxLDEyNTMgQEAKKy8qCisgKiBTaWxpY29uIE1vdGlvbiBTTTdYWCBmcmFtZSBidWZmZXIgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbGljb24gTW90aW9uIFRlY2hub2xvZ3kgQ29ycC4KKyAqIEF1dGhvcnM6IEdlIFdhbmcsIGdld2FuZ0BzaWxpY29ubW90aW9uLmNvbQorICogCSAgICBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogVmVyc2lvbiAwLjEwLjI2MTkyLjIxLjAxCisgKiAJLSBBZGQgUG93ZXJQQy9CaWcgZW5kaWFuIHN1cHBvcnQKKyAqIAktIEFkZCAyRCBzdXBwb3J0IGZvciBMeW54CisgKiAJLSBWZXJpZmllZCBvbjIuNi4xOS4yICBCb3lvZC55YW5nIDxib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgorICoKKyAqIFZlcnNpb24gMC4wOS4yNjIxLjAwLjAxCisgKiAJLSBPbmx5IHN1cHBvcnQgTGludXggS2VybmVsJ3MgdmVyc2lvbiAyLjYuMjEuCisgKglCb3lvZC55YW5nICA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KKyAqCisgKiBWZXJzaW9uIDAuMDkKKyAqIAktIE9ubHkgc3VwcG9ydCBMaW51eCBLZXJuZWwncyB2ZXJzaW9uIDIuNi4xMi4KKyAqIAlCb3lvZC55YW5nIDxib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgorICovCisKKyNpZm5kZWYgX19LRVJORUxfXworI2RlZmluZSBfX0tFUk5FTF9fCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgorCisjaWZkZWYgQ09ORklHX1BNCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNlbmRpZgorCitzdHJ1Y3Qgc2NyZWVuX2luZm8gc210Y19zY3JlZW5faW5mbzsKKworI2luY2x1ZGUgInNtdGNmYi5oIgorI2luY2x1ZGUgInNtdGMyZC5oIgorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgc21kYmcoZm9ybWF0LCBhcmcuLi4pCXByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIHNtZGJnKGZvcm1hdCwgYXJnLi4uKQorI2VuZGlmCisKKy8qCisqIFByaXZhdGUgc3RydWN0dXJlCisqLworc3RydWN0IHNtdGNmYl9pbmZvIHsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgYSBwb2ludGVyIHRvIGJlIHBhc3NlZCBpbnRvIHRoZQorCSAqIGZ1bmN0aW9ucyBiZWxvdy4gIFRoZSBtb2R1bGVzIG91dHNpZGUgdGhlIG1haW4KKwkgKiB2b3lhZ2VyLmMgZHJpdmVyIGhhdmUgbm8ga25vd2xlZGdlIGFzIHRvIHdoYXQKKwkgKiBpcyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuCisJICovCisJc3RydWN0IGZiX2luZm8gZmI7CisJc3RydWN0IGRpc3BsYXlfc3dpdGNoICpkaXNwc3c7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzaWduZWQgaW50IGN1cnJjb247CisKKwlzdHJ1Y3QgeworCQl1OCByZWQsIGdyZWVuLCBibHVlOworCX0gcGFsZXR0ZVtOUl9SR0JdOworCisJdV9pbnQgcGFsZXR0ZV9zaXplOworfTsKKworc3RydWN0IHBhcl9pbmZvIHsKKwkvKgorCSAqIEhhcmR3YXJlCisJICovCisJdTE2IGNoaXBJRDsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKm1fcE1NSU87CisJY2hhciBfX2lvbWVtICptX3BMRkI7CisJY2hhciAqbV9wRFBSOworCWNoYXIgKm1fcFZQUjsKKwljaGFyICptX3BDUFI7CisKKwl1X2ludCB3aWR0aDsKKwl1X2ludCBoZWlnaHQ7CisJdV9pbnQgaHo7CisJdV9sb25nIEJhc2VBZGRyZXNzSW5WUkFNOworCXU4IGNoaXBSZXZJRDsKK307CisKK3N0cnVjdCB2ZXNhX21vZGVfdGFibGUJeworCWNoYXIgbW9kZV9pbmRleFs2XTsKKwl1MTYgbGZiX3dpZHRoOworCXUxNiBsZmJfaGVpZ2h0OworCXUxNiBsZmJfZGVwdGg7Cit9OworCitzdGF0aWMgc3RydWN0IHZlc2FfbW9kZV90YWJsZSB2ZXNhX21vZGVbXSA9IHsKKwl7IjB4MzAxIiwgNjQwLCAgNDgwLCAgOH0sCisJeyIweDMwMyIsIDgwMCwgIDYwMCwgIDh9LAorCXsiMHgzMDUiLCAxMDI0LCA3NjgsCTh9LAorCXsiMHgzMDciLCAxMjgwLCAxMDI0LCA4fSwKKworCXsiMHgzMTEiLCA2NDAsICA0ODAsICAxNn0sCisJeyIweDMxNCIsIDgwMCwgIDYwMCwgIDE2fSwKKwl7IjB4MzE3IiwgMTAyNCwgNzY4LAkxNn0sCisJeyIweDMxQSIsIDEyODAsIDEwMjQsIDE2fSwKKworCXsiMHgzMTIiLCA2NDAsICA0ODAsICAyNH0sCisJeyIweDMxNSIsIDgwMCwgIDYwMCwgIDI0fSwKKwl7IjB4MzE4IiwgMTAyNCwgNzY4LAkyNH0sCisJeyIweDMxQiIsIDEyODAsIDEwMjQsIDI0fSwKK307CisKK2NoYXIgX19pb21lbSAqc210Y19SZWdCYXNlQWRkcmVzczsJLyogTWVtb3J5IE1hcCBJTyBzdGFydGluZyBhZGRyZXNzICovCitjaGFyIF9faW9tZW0gKnNtdGNfVlJBTUJhc2VBZGRyZXNzOwkvKiB2aWRlbyBtZW1vcnkgc3RhcnRpbmcgYWRkcmVzcyAqLworCitjaGFyICpzbXRjXzJEQmFzZUFkZHJlc3M7CS8qIDJEIGVuZ2luZSBzdGFydGluZyBhZGRyZXNzICovCitjaGFyICpzbXRjXzJEZGF0YXBvcnQ7CQkvKiAyRCBkYXRhIHBvcnQgb2Zmc2V0ICovCitzaG9ydCBzbXRjXzJEYWNjZWxlcmF0aW9uOworCitzdGF0aWMgdTMyIGNvbHJlZ1sxN107CitzdGF0aWMgc3RydWN0IHBhcl9pbmZvIGh3OwkvKiBoYXJkd2FyZSBpbmZvcm1hdGlvbiAqLworCit1MTYgc210Y19DaGlwSURzW10gPSB7CisJMHg3MTAsCisJMHg3MTIsCisJMHg3MjAKK307CisKKyNkZWZpbmUgbnVtU01UQ2NoaXBJRHMgKHNpemVvZihzbXRjX0NoaXBJRHMpIC8gc2l6ZW9mKHUxNikpCisKK3ZvaWQgZGVXYWl0Rm9yTm90QnVzeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaSA9IDB4MTAwMDAwMDsKKwl3aGlsZSAoaS0tKSB7CisJCWlmICgoc210Y19zZXFyKDB4MTYpICYgMHgxOCkgPT0gMHgxMCkKKwkJCWJyZWFrOworCX0KKwlzbXRjX2RlX2J1c3kgPSAwOworfQorCitzdGF0aWMgdm9pZCBzbTcxMl9zZXRfdGltaW5nKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiLAorCQkJICAgICBzdHJ1Y3QgcGFyX2luZm8gKnBwYXJfaW5mbykKK3sKKwlpbnQgaSA9IDAsIGogPSAwOworCXUzMiBtX25TY3JlZW5TdHJpZGU7CisKKwlzbWRiZygiXG5wcGFyX2luZm8tPndpZHRoID0gJWQgcHBhcl9pbmZvLT5oZWlnaHQgPSAlZCIKKwkJCSJzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9ICVkIHBwYXJfaW5mby0+aHogPSAlZFxuIiwKKwkJCXBwYXJfaW5mby0+d2lkdGgsIHBwYXJfaW5mby0+aGVpZ2h0LAorCQkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwsIHBwYXJfaW5mby0+aHopOworCisJZm9yIChqID0gMDsgaiA8IG51bVZHQU1vZGVzOyBqKyspIHsKKwkJaWYgKFZHQU1vZGVbal0ubW1TaXplWCA9PSBwcGFyX2luZm8tPndpZHRoICYmCisJCSAgICBWR0FNb2RlW2pdLm1tU2l6ZVkgPT0gcHBhcl9pbmZvLT5oZWlnaHQgJiYKKwkJICAgIFZHQU1vZGVbal0uYnBwID09IHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsICYmCisJCSAgICBWR0FNb2RlW2pdLmh6ID09IHBwYXJfaW5mby0+aHopIHsKKworCQkJc21kYmcoIlxuVkdBTW9kZVtqXS5tbVNpemVYICA9ICVkIFZHQU1vZGVbal0ubW1TaXplWSA9IgorCQkJCQkiJWQgVkdBTW9kZVtqXS5icHAgPSAlZCIKKwkJCQkJIlZHQU1vZGVbal0uaHo9JWRcbiIsCisJCQkJCVZHQU1vZGVbal0ubW1TaXplWCwgVkdBTW9kZVtqXS5tbVNpemVZLAorCQkJCQlWR0FNb2RlW2pdLmJwcCwgVkdBTW9kZVtqXS5oeik7CisKKwkJCXNtZGJnKCJWR0FNb2RlIGluZGV4PSVkXG4iLCBqKTsKKworCQkJc210Y19tbWlvd2IoMHgwLCAweDNjNik7CisKKwkJCXNtdGNfc2VxdygwLCAweDEpOworCisJCQlzbXRjX21taW93YihWR0FNb2RlW2pdLkluaXRfTUlTQywgMHgzYzIpOworCisJCQkvKiBpbml0IFNFUSByZWdpc3RlciBTUjAwIC0gU1IwNCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfU1IwMF9TUjA0OyBpKyspCisJCQkJc210Y19zZXF3KGksIFZHQU1vZGVbal0uSW5pdF9TUjAwX1NSMDRbaV0pOworCisJCQkvKiBpbml0IFNFUSByZWdpc3RlciBTUjEwIC0gU1IyNCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfU1IxMF9TUjI0OyBpKyspCisJCQkJc210Y19zZXF3KGkgKyAweDEwLAorCQkJCQkgIFZHQU1vZGVbal0uSW5pdF9TUjEwX1NSMjRbaV0pOworCisJCQkvKiBpbml0IFNFUSByZWdpc3RlciBTUjMwIC0gU1I3NSAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfU1IzMF9TUjc1OyBpKyspCisJCQkJaWYgKCgoaSArIDB4MzApICE9IDB4NjIpIFwKKwkJCQkJJiYgKChpICsgMHgzMCkgIT0gMHg2YSkgXAorCQkJCQkmJiAoKGkgKyAweDMwKSAhPSAweDZiKSkKKwkJCQkJc210Y19zZXF3KGkgKyAweDMwLAorCQkJCQkJVkdBTW9kZVtqXS5Jbml0X1NSMzBfU1I3NVtpXSk7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSODAgLSBTUjkzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjgwX1NSOTM7IGkrKykKKwkJCQlzbXRjX3NlcXcoaSArIDB4ODAsCisJCQkJCSAgVkdBTW9kZVtqXS5Jbml0X1NSODBfU1I5M1tpXSk7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSQTAgLSBTUkFGICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUkEwX1NSQUY7IGkrKykKKwkJCQlzbXRjX3NlcXcoaSArIDB4YTAsCisJCQkJCSAgVkdBTW9kZVtqXS5Jbml0X1NSQTBfU1JBRltpXSk7CisKKwkJCS8qIGluaXQgR3JhcGhpYyByZWdpc3RlciBHUjAwIC0gR1IwOCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfR1IwMF9HUjA4OyBpKyspCisJCQkJc210Y19ncnBodyhpLCBWR0FNb2RlW2pdLkluaXRfR1IwMF9HUjA4W2ldKTsKKworCQkJLyogaW5pdCBBdHRyaWJ1dGUgcmVnaXN0ZXIgQVIwMCAtIEFSMTQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0FSMDBfQVIxNDsgaSsrKQorCQkJCXNtdGNfYXR0cncoaSwgVkdBTW9kZVtqXS5Jbml0X0FSMDBfQVIxNFtpXSk7CisKKwkJCS8qIGluaXQgQ1JUQyByZWdpc3RlciBDUjAwIC0gQ1IxOCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfQ1IwMF9DUjE4OyBpKyspCisJCQkJc210Y19jcnRjdyhpLCBWR0FNb2RlW2pdLkluaXRfQ1IwMF9DUjE4W2ldKTsKKworCQkJLyogaW5pdCBDUlRDIHJlZ2lzdGVyIENSMzAgLSBDUjREICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9DUjMwX0NSNEQ7IGkrKykKKwkJCQlzbXRjX2NydGN3KGkgKyAweDMwLAorCQkJCQkgICBWR0FNb2RlW2pdLkluaXRfQ1IzMF9DUjREW2ldKTsKKworCQkJLyogaW5pdCBDUlRDIHJlZ2lzdGVyIENSOTAgLSBDUkE3ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9DUjkwX0NSQTc7IGkrKykKKwkJCQlzbXRjX2NydGN3KGkgKyAweDkwLAorCQkJCQkgICBWR0FNb2RlW2pdLkluaXRfQ1I5MF9DUkE3W2ldKTsKKwkJfQorCX0KKwlzbXRjX21taW93YigweDY3LCAweDNjMik7CisKKwkvKiBzZXQgVlBSIHJlZ2lzdGVycyAqLworCXdyaXRlbCgweDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwQyk7CisJd3JpdGVsKDB4MCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDQwKTsKKworCS8qIHNldCBkYXRhIHdpZHRoICovCisJbV9uU2NyZWVuU3RyaWRlID0KKwkJKHBwYXJfaW5mby0+d2lkdGggKiBzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCkgLyA2NDsKKwlzd2l0Y2ggKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQl3cml0ZWwoMHgwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXdyaXRlbCgweDAwMDIwMDAwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXdyaXRlbCgweDAwMDQwMDAwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXdyaXRlbCgweDAwMDMwMDAwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4MCk7CisJCWJyZWFrOworCX0KKwl3cml0ZWwoKHUzMikgKCgobV9uU2NyZWVuU3RyaWRlICsgMikgPDwgMTYpIHwgbV9uU2NyZWVuU3RyaWRlKSwKKwkgICAgICAgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDEwKTsKKworfQorCitzdGF0aWMgdm9pZCBzbTcxMl9zZXRwYWxldHRlKGludCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCSAgICAgdW5zaWduZWQgYmx1ZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHBhcl9pbmZvICpjdXJfcGFyID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKKworCWlmIChjdXJfcGFyLT5CYXNlQWRkcmVzc0luVlJBTSkKKwkJLyoKKwkJICogc2Vjb25kIGRpc3BsYXkgcGFsZXR0ZSBmb3IgZHVhbCBoZWFkLiBFbmFibGUgQ1JUIFJBTSwgNi1iaXQKKwkJICogUkFNCisJCSAqLworCQlzbXRjX3NlcXcoMHg2NiwgKHNtdGNfc2VxcigweDY2KSAmIDB4QzMpIHwgMHgyMCk7CisJZWxzZQorCQkvKiBwcmltYXJ5IGRpc3BsYXkgcGFsZXR0ZS4gRW5hYmxlIExDRCBSQU0gb25seSwgNi1iaXQgUkFNICovCisJCXNtdGNfc2VxdygweDY2LCAoc210Y19zZXFyKDB4NjYpICYgMHhDMykgfCAweDEwKTsKKwlzbXRjX21taW93YihyZWdubywgZGFjX3JlZyk7CisJc210Y19tbWlvd2IocmVkID4+IDEwLCBkYWNfdmFsKTsKKwlzbXRjX21taW93YihncmVlbiA+PiAxMCwgZGFjX3ZhbCk7CisJc210Y19tbWlvd2IoYmx1ZSA+PiAxMCwgZGFjX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNtdGNfc2V0X3RpbWluZyhzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiwgc3RydWN0IHBhcl9pbmZvCisJCSpwcGFyX2luZm8pCit7CisJc3dpdGNoIChwcGFyX2luZm8tPmNoaXBJRCkgeworCWNhc2UgMHg3MTA6CisJY2FzZSAweDcxMjoKKwljYXNlIDB4NzIwOgorCQlzbTcxMl9zZXRfdGltaW5nKHNmYiwgcHBhcl9pbmZvKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHNtdGNmYl92YXIgPSB7CisJLnhyZXMgPSAxMDI0LAorCS55cmVzID0gNjAwLAorCS54cmVzX3ZpcnR1YWwgPSAxMDI0LAorCS55cmVzX3ZpcnR1YWwgPSA2MDAsCisJLmJpdHNfcGVyX3BpeGVsID0gMTYsCisJLnJlZCA9IHsxNiwgOCwgMH0sCisJLmdyZWVuID0gezgsIDgsIDB9LAorCS5ibHVlID0gezAsIDgsIDB9LAorCS5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVywKKwkuaGVpZ2h0ID0gLTEsCisJLndpZHRoID0gLTEsCisJLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gc210Y2ZiX2ZpeCA9IHsKKwkuaWQgPSAic203MTJmYiIsCisJLnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1IsCisJLmxpbmVfbGVuZ3RoID0gODAwICogMywKKwkuYWNjZWwgPSBGQl9BQ0NFTF9TTUlfTFlOWCwKK307CisKKy8qIGNoYW5fdG9fZmllbGQKKyAqCisgKiBjb252ZXJ0IGEgY29sb3VyIHZhbHVlIGludG8gYSBmaWVsZCBwb3NpdGlvbgorICoKKyAqIGZyb20gcHhhZmIuYworICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNoYW5fdG9fZmllbGQodW5zaWduZWQgaW50IGNoYW4sCisJCQkJCSBzdHJ1Y3QgZmJfYml0ZmllbGQgKmJmKQoreworCWNoYW4gJj0gMHhmZmZmOworCWNoYW4gPj49IDE2IC0gYmYtPmxlbmd0aDsKKwlyZXR1cm4gY2hhbiA8PCBiZi0+b2Zmc2V0OworfQorCitzdGF0aWMgaW50IHNtdGNmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJLyogY2xlYXIgRFBNUyBzZXR0aW5nICovCisJc3dpdGNoIChibGFua19tb2RlKSB7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCQkvKiBTY3JlZW4gT246IEhTeW5jOiBPbiwgVlN5bmMgOiBPbiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSAmICh+MHgyMCkpKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MTYpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDIxLCAoc210Y19zZXFyKDB4MjEpICYgMHg3NykpOworCQlzbXRjX3NlcXcoMHgyMiwgKHNtdGNfc2VxcigweDIyKSAmICh+MHgzMCkpKTsKKwkJc210Y19zZXF3KDB4MjMsIChzbXRjX3NlcXIoMHgyMykgJiAofjB4YzApKSk7CisJCXNtdGNfc2VxdygweDI0LCAoc210Y19zZXFyKDB4MjQpIHwgMHgwMSkpOworCQlzbXRjX3NlcXcoMHgzMSwgKHNtdGNfc2VxcigweDMxKSB8IDB4MDMpKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCS8qIFNjcmVlbiBPZmY6IEhTeW5jOiBPbiwgVlN5bmMgOiBPbiAgIFNvZnQgYmxhbmsgKi8KKwkJc210Y19zZXF3KDB4MDEsIChzbXRjX3NlcXIoMHgwMSkgJiAofjB4MjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDE2KTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMiwgKHNtdGNfc2VxcigweDIyKSAmICh+MHgzMCkpKTsKKwkJc210Y19zZXF3KDB4MjMsIChzbXRjX3NlcXIoMHgyMykgJiAofjB4YzApKSk7CisJCXNtdGNfc2VxdygweDI0LCAoc210Y19zZXFyKDB4MjQpIHwgMHgwMSkpOworCQlzbXRjX3NlcXcoMHgzMSwgKChzbXRjX3NlcXIoMHgzMSkgJiAofjB4MDcpKSB8IDB4MDApKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQkvKiBTY3JlZW4gT246IEhTeW5jOiBPbiwgVlN5bmMgOiBPZmYgKi8KKwkJc210Y19zZXF3KDB4MDEsIChzbXRjX3NlcXIoMHgwMSkgfCAweDIwKSk7CisJCXNtdGNfc2VxdygweDIwLCAoc210Y19zZXFyKDB4MjApICYgKH4weEIwKSkpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgwYyk7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4MjEsIChzbXRjX3NlcXIoMHgyMSkgfCAweDg4KSk7CisJCXNtdGNfc2VxdygweDIyLCAoKHNtdGNfc2VxcigweDIyKSAmICh+MHgzMCkpIHwgMHgyMCkpOworCQlzbXRjX3NlcXcoMHgyMywgKChzbXRjX3NlcXIoMHgyMykgJiAofjB4YzApKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgJiAofjB4MDEpKSk7CisJCXNtdGNfc2VxdygweDMxLCAoKHNtdGNfc2VxcigweDMxKSAmICh+MHgwNykpIHwgMHgwMCkpOworCQlzbXRjX3NlcXcoMHgzNCwgKHNtdGNfc2VxcigweDM0KSB8IDB4ODApKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgorCQkvKiBTY3JlZW4gT246IEhTeW5jOiBPZmYsIFZTeW5jIDogT24gKi8KKwkJc210Y19zZXF3KDB4MDEsIChzbXRjX3NlcXIoMHgwMSkgfCAweDIwKSk7CisJCXNtdGNfc2VxdygweDIwLCAoc210Y19zZXFyKDB4MjApICYgKH4weEIwKSkpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgwYyk7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4MjEsIChzbXRjX3NlcXIoMHgyMSkgfCAweDg4KSk7CisJCXNtdGNfc2VxdygweDIyLCAoKHNtdGNfc2VxcigweDIyKSAmICh+MHgzMCkpIHwgMHgxMCkpOworCQlzbXRjX3NlcXcoMHgyMywgKChzbXRjX3NlcXIoMHgyMykgJiAofjB4YzApKSB8IDB4RDgpKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgJiAofjB4MDEpKSk7CisJCXNtdGNfc2VxdygweDMxLCAoKHNtdGNfc2VxcigweDMxKSAmICh+MHgwNykpIHwgMHgwMCkpOworCQlzbXRjX3NlcXcoMHgzNCwgKHNtdGNfc2VxcigweDM0KSB8IDB4ODApKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9mZiwgVlN5bmMgOiBPZmYgKi8KKwkJc210Y19zZXF3KDB4MDEsIChzbXRjX3NlcXIoMHgwMSkgfCAweDIwKSk7CisJCXNtdGNfc2VxdygweDIwLCAoc210Y19zZXFyKDB4MjApICYgKH4weEIwKSkpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgwYyk7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4MjEsIChzbXRjX3NlcXIoMHgyMSkgfCAweDg4KSk7CisJCXNtdGNfc2VxdygweDIyLCAoKHNtdGNfc2VxcigweDIyKSAmICh+MHgzMCkpIHwgMHgzMCkpOworCQlzbXRjX3NlcXcoMHgyMywgKChzbXRjX3NlcXIoMHgyMykgJiAofjB4YzApKSB8IDB4RDgpKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgJiAofjB4MDEpKSk7CisJCXNtdGNfc2VxdygweDMxLCAoKHNtdGNfc2VxcigweDMxKSAmICh+MHgwNykpIHwgMHgwMCkpOworCQlzbXRjX3NlcXcoMHgzNCwgKHNtdGNfc2VxcigweDM0KSB8IDB4ODApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc210Y19zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiA9IChzdHJ1Y3Qgc210Y2ZiX2luZm8gKilpbmZvOworCXUzMiB2YWw7CisKKwlpZiAocmVnbm8gPiAyNTUpCisJCXJldHVybiAxOworCisJc3dpdGNoIChzZmItPmZiLmZpeC52aXN1YWwpIHsKKwljYXNlIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjoKKwljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CisJCS8qCisJCSAqIDE2LzMyIGJpdCB0cnVlLWNvbG91ciwgdXNlIHBzZXVvLXBhbGV0dGUgZm9yIDE2IGJhc2UgY29sb3IKKwkJICovCisJCWlmIChyZWdubyA8IDE2KSB7CisJCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMTYpIHsKKwkJCQl1MzIgKnBhbCA9IHNmYi0+ZmIucHNldWRvX3BhbGV0dGU7CisJCQkJdmFsID0gY2hhbl90b19maWVsZChyZWQsICZzZmItPmZiLnZhci5yZWQpOworCQkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCBcCisJCQkJCQkmc2ZiLT5mYi52YXIuZ3JlZW4pOworCQkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICZzZmItPmZiLnZhci5ibHVlKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCQlwYWxbcmVnbm9dID0KKwkJCQkgICAgKChyZWQgJiAweGY4MDApID4+IDgpIHwKKwkJCQkgICAgKChncmVlbiAmIDB4ZTAwMCkgPj4gMTMpIHwKKwkJCQkgICAgKChncmVlbiAmIDB4MWMwMCkgPDwgMykgfAorCQkJCSAgICAoKGJsdWUgJiAweGY4MDApID4+IDMpOworI2Vsc2UKKwkJCQlwYWxbcmVnbm9dID0gdmFsOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCXUzMiAqcGFsID0gc2ZiLT5mYi5wc2V1ZG9fcGFsZXR0ZTsKKwkJCQl2YWwgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJnNmYi0+ZmIudmFyLnJlZCk7CisJCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sIFwKKwkJCQkJCSZzZmItPmZiLnZhci5ncmVlbik7CisJCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJnNmYi0+ZmIudmFyLmJsdWUpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJCXZhbCA9CisJCQkJICAgICh2YWwgJiAweGZmMDBmZjAwID4+IDgpIHwKKwkJCQkgICAgKHZhbCAmIDB4MDBmZjAwZmYgPDwgOCk7CisjZW5kaWYKKwkJCQlwYWxbcmVnbm9dID0gdmFsOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCS8qIGNvbG9yIGRlcHRoIDggYml0ICovCisJCXNtNzEyX3NldHBhbGV0dGUocmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUsIGluZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAxOwkvKiB1bmtub3duIHR5cGUgKi8KKwl9CisKKwlyZXR1cm4gMDsKKworfQorCisjaWZkZWYgX19CSUdfRU5ESUFOCitzdGF0aWMgc3NpemVfdCBzbXRjZmJfcmVhZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdAorCQkJCWNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CisKKwl1MzIgKmJ1ZmZlciwgKmRzdDsKKwl1MzIgX19pb21lbSAqc3JjOworCWludCBjLCBpLCBjbnQgPSAwLCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZTsKKworCWlmICghaW5mbyB8fCAhaW5mby0+c2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPnNjcmVlbl9zaXplOworCisJaWYgKHRvdGFsX3NpemUgPT0gMCkKKwkJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID49IHRvdGFsX3NpemUpCisJCXJldHVybiAwOworCisJaWYgKGNvdW50ID49IHRvdGFsX3NpemUpCisJCWNvdW50ID0gdG90YWxfc2l6ZTsKKworCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKQorCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOworCisJYnVmZmVyID0ga21hbGxvYygoY291bnQgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIDogY291bnQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNyYyA9ICh1MzIgX19pb21lbSAqKSAoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKKworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKKwkJaW5mby0+ZmJvcHMtPmZiX3N5bmMoaW5mbyk7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJYyA9IChjb3VudCA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBjb3VudDsKKwkJZHN0ID0gYnVmZmVyOworCQlmb3IgKGkgPSBjID4+IDI7IGktLTspIHsKKwkJCSpkc3QgPSBmYl9yZWFkbChzcmMrKyk7CisJCQkqZHN0ID0KKwkJCSAgICAoKmRzdCAmIDB4ZmYwMGZmMDAgPj4gOCkgfAorCQkJICAgICgqZHN0ICYgMHgwMGZmMDBmZiA8PCA4KTsKKwkJCWRzdCsrOworCQl9CisJCWlmIChjICYgMykgeworCQkJdTggKmRzdDggPSAodTggKikgZHN0OworCQkJdTggX19pb21lbSAqc3JjOCA9ICh1OCBfX2lvbWVtICopIHNyYzsKKworCQkJZm9yIChpID0gYyAmIDM7IGktLTspIHsKKwkJCQlpZiAoaSAmIDEpIHsKKwkJCQkJKmRzdDgrKyA9IGZiX3JlYWRiKCsrc3JjOCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJKmRzdDgrKyA9IGZiX3JlYWRiKC0tc3JjOCk7CisJCQkJCXNyYzggKz0gMjsKKwkJCQl9CisJCQl9CisJCQlzcmMgPSAodTMyIF9faW9tZW0gKikgc3JjODsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBidWZmZXIsIGMpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJKnBwb3MgKz0gYzsKKwkJYnVmICs9IGM7CisJCWNudCArPSBjOworCQljb3VudCAtPSBjOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gKGVycikgPyBlcnIgOiBjbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzbXRjZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkgICAgIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKworCXUzMiAqYnVmZmVyLCAqc3JjOworCXUzMiBfX2lvbWVtICpkc3Q7CisJaW50IGMsIGksIGNudCA9IDAsIGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKCFpbmZvIHx8ICFpbmZvLT5zY3JlZW5fYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybiAtRVBFUk07CisKKwl0b3RhbF9zaXplID0gaW5mby0+c2NyZWVuX3NpemU7CisKKwlpZiAodG90YWxfc2l6ZSA9PSAwKQorCQl0b3RhbF9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOworCisJaWYgKHAgPiB0b3RhbF9zaXplKQorCQlyZXR1cm4gLUVGQklHOworCisJaWYgKGNvdW50ID4gdG90YWxfc2l6ZSkgeworCQllcnIgPSAtRUZCSUc7CisJCWNvdW50ID0gdG90YWxfc2l6ZTsKKwl9CisKKwlpZiAoY291bnQgKyBwID4gdG90YWxfc2l6ZSkgeworCQlpZiAoIWVycikKKwkJCWVyciA9IC1FTk9TUEM7CisKKwkJY291bnQgPSB0b3RhbF9zaXplIC0gcDsKKwl9CisKKwlidWZmZXIgPSBrbWFsbG9jKChjb3VudCA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJZHN0ID0gKHUzMiBfX2lvbWVtICopIChpbmZvLT5zY3JlZW5fYmFzZSArIHApOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQorCQlpbmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKKworCXdoaWxlIChjb3VudCkgeworCQljID0gKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50OworCQlzcmMgPSBidWZmZXI7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHNyYywgYnVmLCBjKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0gYyA+PiAyOyBpLS07KSB7CisJCQlmYl93cml0ZWwoKCpzcmMgJiAweGZmMDBmZjAwID4+IDgpIHwKKwkJCQkgICgqc3JjICYgMHgwMGZmMDBmZiA8PCA4KSwgZHN0KyspOworCQkJc3JjKys7CisJCX0KKwkJaWYgKGMgJiAzKSB7CisJCQl1OCAqc3JjOCA9ICh1OCAqKSBzcmM7CisJCQl1OCBfX2lvbWVtICpkc3Q4ID0gKHU4IF9faW9tZW0gKikgZHN0OworCisJCQlmb3IgKGkgPSBjICYgMzsgaS0tOykgeworCQkJCWlmIChpICYgMSkgeworCQkJCQlmYl93cml0ZWIoKnNyYzgrKywgKytkc3Q4KTsKKwkJCQl9IGVsc2UgeworCQkJCQlmYl93cml0ZWIoKnNyYzgrKywgLS1kc3Q4KTsKKwkJCQkJZHN0OCArPSAyOworCQkJCX0KKwkJCX0KKwkJCWRzdCA9ICh1MzIgX19pb21lbSAqKSBkc3Q4OworCQl9CisKKwkJKnBwb3MgKz0gYzsKKwkJYnVmICs9IGM7CisJCWNudCArPSBjOworCQljb3VudCAtPSBjOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gKGNudCkgPyBjbnQgOiBlcnI7Cit9CisjZW5kaWYJLyogISBfX0JJR19FTkRJQU4gKi8KKworI2luY2x1ZGUgInNtdGMyZC5jIgorCit2b2lkIHNtdGNmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7CisKKwlpZiAoc210Y18yRGFjY2VsZXJhdGlvbikgeworCQlpZiAoIWFyZWEtPndpZHRoIHx8ICFhcmVhLT5oZWlnaHQpCisJCQlyZXR1cm47CisKKwkJZGVDb3B5KHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCisJCSAgICAgICBhcmVhLT5keCwgYXJlYS0+ZHksIGFyZWEtPndpZHRoLCBhcmVhLT5oZWlnaHQsCisJCSAgICAgICBwLT5CYXNlQWRkcmVzc0luVlJBTSwgMCwgYXJlYS0+c3gsIGFyZWEtPnN5LCAwLCAweEMpOworCisJfSBlbHNlCisJCWNmYl9jb3B5YXJlYShpbmZvLCBhcmVhKTsKK30KKwordm9pZCBzbXRjZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgcGFyX2luZm8gKnAgPSAoc3RydWN0IHBhcl9pbmZvICopaW5mby0+cGFyOworCisJaWYgKHNtdGNfMkRhY2NlbGVyYXRpb24pIHsKKwkJaWYgKCFyZWN0LT53aWR0aCB8fCAhcmVjdC0+aGVpZ2h0KQorCQkJcmV0dXJuOworCQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID49IDI0KQorCQkJZGVGaWxsUmVjdChwLT5CYXNlQWRkcmVzc0luVlJBTSwgMCwgcmVjdC0+ZHggKiAzLAorCQkJCSAgIHJlY3QtPmR5ICogMywgcmVjdC0+d2lkdGggKiAzLCByZWN0LT5oZWlnaHQsCisJCQkJICAgcmVjdC0+Y29sb3IpOworCQllbHNlCisJCQlkZUZpbGxSZWN0KHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCByZWN0LT5keCwgcmVjdC0+ZHksCisJCQkJICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCwgcmVjdC0+Y29sb3IpOworCX0gZWxzZQorCQljZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7Cit9CisKK3ZvaWQgc210Y2ZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3sKKwlzdHJ1Y3QgcGFyX2luZm8gKnAgPSAoc3RydWN0IHBhcl9pbmZvICopaW5mby0+cGFyOworCXUzMiBiZ19jb2wgPSAwLCBmZ19jb2wgPSAwOworCisJaWYgKChzbXRjXzJEYWNjZWxlcmF0aW9uKSAmJiAoaW1hZ2UtPmRlcHRoID09IDEpKSB7CisJCWlmIChzbXRjX2RlX2J1c3kpCisJCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwkJY2FzZSA4OgorCQkJYmdfY29sID0gaW1hZ2UtPmJnX2NvbG9yOworCQkJZmdfY29sID0gaW1hZ2UtPmZnX2NvbG9yOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQliZ19jb2wgPQorCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5iZ19jb2xvcl07CisJCQlmZ19jb2wgPQorCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07CisJCQlicmVhazsKKwkJY2FzZSAzMjoKKwkJCWJnX2NvbCA9CisJCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJCWZnX2NvbCA9CisJCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGVTeXN0ZW1NZW0yVmlkZW9NZW1Nb25vQmx0KAorCQkJaW1hZ2UtPmRhdGEsCisJCQlpbWFnZS0+d2lkdGggLyA4LAorCQkJMCwKKwkJCXAtPkJhc2VBZGRyZXNzSW5WUkFNLAorCQkJMCwKKwkJCTAsCisJCQlpbWFnZS0+ZHgsIGltYWdlLT5keSwKKwkJCWltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCwKKwkJCWZnX2NvbCwgYmdfY29sLAorCQkJMHgwQyk7CisKKwl9IGVsc2UKKwkJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNtdGNmYl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX3NldGNvbHJlZyA9IHNtdGNfc2V0Y29scmVnLAorCS5mYl9ibGFuayA9IHNtdGNmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QgPSBzbXRjZmJfZmlsbHJlY3QsCisJLmZiX2ltYWdlYmxpdCA9IHNtdGNmYl9pbWFnZWJsaXQsCisJLmZiX2NvcHlhcmVhID0gc210Y2ZiX2NvcHlhcmVhLAorI2lmZGVmIF9fQklHX0VORElBTgorCS5mYl9yZWFkID0gc210Y2ZiX3JlYWQsCisJLmZiX3dyaXRlID0gc210Y2ZiX3dyaXRlLAorI2VuZGlmCisKK307CisKK3ZvaWQgc210Y2ZiX3NldG1vZGUoc3RydWN0IHNtdGNmYl9pbmZvICpzZmIpCit7CisJc3dpdGNoIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJCXNmYi0+ZmIuZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCXNmYi0+ZmIuZml4LmxpbmVfbGVuZ3RoID0gc2ZiLT5mYi52YXIueHJlcyAqIDQ7CisJCXNmYi0+ZmIudmFyLnJlZC5sZW5ndGggPSA4OworCQlzZmItPmZiLnZhci5ncmVlbi5sZW5ndGggPSA4OworCQlzZmItPmZiLnZhci5ibHVlLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLnJlZC5vZmZzZXQgPSAxNjsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5vZmZzZXQgPSAwOworCisJCWJyZWFrOworCWNhc2UgODoKKwkJc2ZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQlzZmItPmZiLmZpeC5saW5lX2xlbmd0aCA9IHNmYi0+ZmIudmFyLnhyZXM7CisJCXNmYi0+ZmIudmFyLnJlZC5vZmZzZXQgPSA1OworCQlzZmItPmZiLnZhci5yZWQubGVuZ3RoID0gMzsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ub2Zmc2V0ID0gMjsKKwkJc2ZiLT5mYi52YXIuZ3JlZW4ubGVuZ3RoID0gMzsKKwkJc2ZiLT5mYi52YXIuYmx1ZS5vZmZzZXQgPSAwOworCQlzZmItPmZiLnZhci5ibHVlLmxlbmd0aCA9IDI7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXNmYi0+ZmIuZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCXNmYi0+ZmIuZml4LmxpbmVfbGVuZ3RoID0gc2ZiLT5mYi52YXIueHJlcyAqIDM7CisJCXNmYi0+ZmIudmFyLnJlZC5sZW5ndGggPSA4OworCQlzZmItPmZiLnZhci5ncmVlbi5sZW5ndGggPSA4OworCQlzZmItPmZiLnZhci5ibHVlLmxlbmd0aCA9IDg7CisKKwkJc2ZiLT5mYi52YXIucmVkLm9mZnNldCA9IDE2OworCQlzZmItPmZiLnZhci5ncmVlbi5vZmZzZXQgPSA4OworCQlzZmItPmZiLnZhci5ibHVlLm9mZnNldCA9IDA7CisKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwlkZWZhdWx0OgorCQlzZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlzZmItPmZiLmZpeC5saW5lX2xlbmd0aCA9IHNmYi0+ZmIudmFyLnhyZXMgKiAyOworCisJCXNmYi0+ZmIudmFyLnJlZC5sZW5ndGggPSA1OworCQlzZmItPmZiLnZhci5ncmVlbi5sZW5ndGggPSA2OworCQlzZmItPmZiLnZhci5ibHVlLmxlbmd0aCA9IDU7CisKKwkJc2ZiLT5mYi52YXIucmVkLm9mZnNldCA9IDExOworCQlzZmItPmZiLnZhci5ncmVlbi5vZmZzZXQgPSA1OworCQlzZmItPmZiLnZhci5ibHVlLm9mZnNldCA9IDA7CisKKwkJYnJlYWs7CisJfQorCisJaHcud2lkdGggPSBzZmItPmZiLnZhci54cmVzOworCWh3LmhlaWdodCA9IHNmYi0+ZmIudmFyLnlyZXM7CisJaHcuaHogPSA2MDsKKwlzbXRjX3NldF90aW1pbmcoc2ZiLCAmaHcpOworCWlmIChzbXRjXzJEYWNjZWxlcmF0aW9uKSB7CisJCXByaW50aygiMkQgYWNjZWxlcmF0aW9uIGVuYWJsZWQhXG4iKTsKKwkJLyogSW5pdCBzbXRjIGRyYXdpbmcgZW5naW5lICovCisJCWRlSW5pdChzZmItPmZiLnZhci54cmVzLCBzZmItPmZiLnZhci55cmVzLAorCQkJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvYyBzdHJ1Y3Qgc210Y2ZiX2luZm8gYW5kIGFzc2lnbiB0aGUgZGVmYXVsdCB2YWx1ZQorICovCitzdGF0aWMgc3RydWN0IHNtdGNmYl9pbmZvICpzbXRjX2FsbG9jX2ZiX2luZm8oc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCQljaGFyICpuYW1lKQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCisJc2ZiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtdGNmYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXNmYikKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoc2ZiLCAwLCBzaXplb2Yoc3RydWN0IHNtdGNmYl9pbmZvKSk7CisKKwlzZmItPmN1cnJjb24gPSAtMTsKKwlzZmItPmRldiA9IGRldjsKKworCS8qKiogSW5pdCBzZmItPmZiIHdpdGggZGVmYXVsdCB2YWx1ZSAqKiovCisJc2ZiLT5mYi5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisJc2ZiLT5mYi5mYm9wcyA9ICZzbXRjZmJfb3BzOworCXNmYi0+ZmIudmFyID0gc210Y2ZiX3ZhcjsKKwlzZmItPmZiLmZpeCA9IHNtdGNmYl9maXg7CisKKwlzdHJjcHkoc2ZiLT5mYi5maXguaWQsIG5hbWUpOworCisJc2ZiLT5mYi5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlzZmItPmZiLmZpeC50eXBlX2F1eCA9IDA7CisJc2ZiLT5mYi5maXgueHBhbnN0ZXAgPSAwOworCXNmYi0+ZmIuZml4LnlwYW5zdGVwID0gMDsKKwlzZmItPmZiLmZpeC55d3JhcHN0ZXAgPSAwOworCXNmYi0+ZmIuZml4LmFjY2VsID0gRkJfQUNDRUxfU01JX0xZTlg7CisKKwlzZmItPmZiLnZhci5ub25zdGQgPSAwOworCXNmYi0+ZmIudmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworCXNmYi0+ZmIudmFyLmhlaWdodCA9IC0xOworCXNmYi0+ZmIudmFyLndpZHRoID0gLTE7CisJLyogdGV4dCBtb2RlIGFjY2VsZXJhdGlvbiAqLworCXNmYi0+ZmIudmFyLmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7CisJc2ZiLT5mYi52YXIudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCXNmYi0+ZmIucGFyID0gJmh3OworCXNmYi0+ZmIucHNldWRvX3BhbGV0dGUgPSBjb2xyZWc7CisKKwlyZXR1cm4gc2ZiOworfQorCisvKgorICogVW5tYXAgaW4gdGhlIG1lbW9yeSBtYXBwZWQgSU8gcmVnaXN0ZXJzCisgKi8KKworc3RhdGljIHZvaWQgc210Y191bm1hcF9tbWlvKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiKQoreworCWlmIChzZmIgJiYgc210Y19SZWdCYXNlQWRkcmVzcykKKwkJc210Y19SZWdCYXNlQWRkcmVzcyA9IE5VTEw7Cit9CisKKy8qCisgKiBNYXAgaW4gdGhlIHNjcmVlbiBtZW1vcnkKKyAqLworCitzdGF0aWMgaW50IHNtdGNfbWFwX3NtZW0oc3RydWN0IHNtdGNmYl9pbmZvICpzZmIsCisJCXN0cnVjdCBwY2lfZGV2ICpkZXYsIHVfbG9uZyBzbWVtX2xlbikKK3sKKwlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJc2ZiLT5mYi5maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApCisJCQkrIDB4ODAwMDAwOworI2Vsc2UKKwkJc2ZiLT5mYi5maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworI2VuZGlmCisJfSBlbHNlIHsKKwkJc2ZiLT5mYi5maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCX0KKworCXNmYi0+ZmIuZml4LnNtZW1fbGVuID0gc21lbV9sZW47CisKKwlzZmItPmZiLnNjcmVlbl9iYXNlID0gc210Y19WUkFNQmFzZUFkZHJlc3M7CisKKwlpZiAoIXNmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVuYWJsZSB0byBtYXAgc2NyZWVuIG1lbW9yeVxuIiwKKwkJCQlzZmItPmZiLmZpeC5pZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVW5tYXAgaW4gdGhlIHNjcmVlbiBtZW1vcnkKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHNtdGNfdW5tYXBfc21lbShzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYikKK3sKKwlpZiAoc2ZiICYmIHNmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJaW91bm1hcChzZmItPmZiLnNjcmVlbl9iYXNlKTsKKwkJc2ZiLT5mYi5zY3JlZW5fYmFzZSA9IE5VTEw7CisJfQorfQorCisvKgorICogV2UgbmVlZCB0byB3YWtlIHVwIHRoZSBMeW54RU0rLCBhbmQgbWFrZSBzdXJlIGl0cyBpbiBsaW5lYXIgbWVtb3J5IG1vZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbTd4eF9pbml0X2h3KHZvaWQpCit7CisJb3V0Yl9wKDB4MTgsIDB4M2M0KTsKKwlvdXRiX3AoMHgxMSwgMHgzYzUpOworfQorCitzdGF0aWMgdm9pZCBzbXRjX2ZyZWVfZmJfaW5mbyhzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYikKK3sKKwlpZiAoc2ZiKSB7CisJCWZiX2FsbG9jX2NtYXAoJnNmYi0+ZmIuY21hcCwgMCwgMCk7CisJCWtmcmVlKHNmYik7CisJfQorfQorCisvKgorICoJc203MTJ2Z2Ffc2V0dXAgLSBwcm9jZXNzIGNvbW1hbmQgbGluZSBvcHRpb25zLCBnZXQgdmdhIHBhcmFtZXRlcgorICoJQG9wdGlvbnM6IHN0cmluZyBvZiBvcHRpb25zCisgKglSZXR1cm5zIHplcm8uCisgKgorICovCitzdGF0aWMgaW50IF9faW5pdCBfX21heWJlX3VudXNlZCBzbTcxMnZnYV9zZXR1cChjaGFyICpvcHRpb25zKQoreworCWludCBpbmRleDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpIHsKKwkJc21kYmcoIlxuIE5vIHZnYSBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbXRjX3NjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDA7CisJc210Y19zY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gMDsKKwlzbXRjX3NjcmVlbl9pbmZvLmxmYl9kZXB0aCA9IDA7CisKKwlzbWRiZygiXG5zbTcxMnZnYV9zZXR1cCA9ICVzXG4iLCBvcHRpb25zKTsKKworCWZvciAoaW5kZXggPSAwOworCSAgICAgaW5kZXggPCAoc2l6ZW9mKHZlc2FfbW9kZSkgLyBzaXplb2Yoc3RydWN0IHZlc2FfbW9kZV90YWJsZSkpOworCSAgICAgaW5kZXgrKykgeworCQlpZiAoc3Ryc3RyKG9wdGlvbnMsIHZlc2FfbW9kZVtpbmRleF0ubW9kZV9pbmRleCkpIHsKKwkJCXNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gdmVzYV9tb2RlW2luZGV4XS5sZmJfd2lkdGg7CisJCQlzbXRjX3NjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPQorCQkJCQl2ZXNhX21vZGVbaW5kZXhdLmxmYl9oZWlnaHQ7CisJCQlzbXRjX3NjcmVlbl9pbmZvLmxmYl9kZXB0aCA9IHZlc2FfbW9kZVtpbmRleF0ubGZiX2RlcHRoOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CitfX3NldHVwKCJ2Z2E9Iiwgc203MTJ2Z2Ffc2V0dXApOworCisvKiBKYXNvbiAoMDgvMTMvMjAwOSkKKyAqIE9yaWdpbmFsIGluaXQgZnVuY3Rpb24gY2hhbmdlZCB0byBwcm9iZSBtZXRob2QgdG8gYmUgdXNlZCBieSBwY2lfZHJ2CisgKiBwcm9jZXNzIHVzZWQgdG8gZGV0ZWN0IGNoaXBzIHJlcGxhY2VkIHdpdGgga2VybmVsIHByb2Nlc3MgaW4gcGNpX2RydgorICovCitzdGF0aWMgaW50IF9faW5pdCBzbXRjZmJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisJdV9sb25nIHNtZW1fc2l6ZSA9IDB4MDA4MDAwMDA7CS8qIGRlZmF1bHQgOE1CICovCisJY2hhciBuYW1lWzE2XTsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgcEZyYW1lYnVmZmVyUGh5c2ljYWw7CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJTaWxpY29uIE1vdGlvbiBkaXNwbGF5IGRyaXZlciAiIFNNVENfTElOVVhfRkJfVkVSU0lPTiAiXG4iKTsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwkvKiBlbmFibGUgU01UQyBjaGlwICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IC1FTk9NRU07CisKKwlody5jaGlwSUQgPSBlbnQtPmRldmljZTsKKwlzcHJpbnRmKG5hbWUsICJzbSVYZmIiLCBody5jaGlwSUQpOworCisJc2ZiID0gc210Y19hbGxvY19mYl9pbmZvKHBkZXYsIG5hbWUpOworCisJaWYgKCFzZmIpCisJCWdvdG8gZmFpbGVkOworCS8qIEphc29uICgwOC8xMy8yMDA5KQorCSAqIFN0b3JlIGZiX2luZm8gdG8gYmUgZnVydGhlciB1c2VkIHdoZW4gc3VzcGVuZGluZyBhbmQgcmVzdW1pbmcKKwkgKi8KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgc2ZiKTsKKworCXNtN3h4X2luaXRfaHcoKTsKKworCS8qZ2V0IG1vZGUgcGFyYW1ldGVyIGZyb20gc210Y19zY3JlZW5faW5mbyAqLworCWlmIChzbXRjX3NjcmVlbl9pbmZvLmxmYl93aWR0aCAhPSAwKSB7CisJCXNmYi0+ZmIudmFyLnhyZXMgPSBzbXRjX3NjcmVlbl9pbmZvLmxmYl93aWR0aDsKKwkJc2ZiLT5mYi52YXIueXJlcyA9IHNtdGNfc2NyZWVuX2luZm8ubGZiX2hlaWdodDsKKwkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPSBzbXRjX3NjcmVlbl9pbmZvLmxmYl9kZXB0aDsKKwl9IGVsc2UgeworCQkvKiBkZWZhdWx0IHJlc29sdXRpb24gMTAyNHg2MDAgMTZiaXQgbW9kZSAqLworCQlzZmItPmZiLnZhci54cmVzID0gU0NSRUVOX1hfUkVTOworCQlzZmItPmZiLnZhci55cmVzID0gU0NSRUVOX1lfUkVTOworCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9IFNDUkVFTl9CUFA7CisJfQorCisjaWZkZWYgX19CSUdfRU5ESUFOCisJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDI0KQorCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9IChzbXRjX3NjcmVlbl9pbmZvLmxmYl9kZXB0aCA9IDMyKTsKKyNlbmRpZgorCS8qIE1hcCBhZGRyZXNzIGFuZCBtZW1vcnkgZGV0ZWN0aW9uICovCisJcEZyYW1lYnVmZmVyUGh5c2ljYWwgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmaHcuY2hpcFJldklEKTsKKworCXN3aXRjaCAoaHcuY2hpcElEKSB7CisJY2FzZSAweDcxMDoKKwljYXNlIDB4NzEyOgorCQlzZmItPmZiLmZpeC5tbWlvX3N0YXJ0ID0gcEZyYW1lYnVmZmVyUGh5c2ljYWwgKyAweDAwNDAwMDAwOworCQlzZmItPmZiLmZpeC5tbWlvX2xlbiA9IDB4MDA0MDAwMDA7CisJCXNtZW1fc2l6ZSA9IFNNNzEyX1ZJREVPTUVNT1JZU0laRTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaHcubV9wTEZCID0gKHNtdGNfVlJBTUJhc2VBZGRyZXNzID0KKwkJICAgIGlvcmVtYXAocEZyYW1lYnVmZmVyUGh5c2ljYWwsIDB4MDBjMDAwMDApKTsKKyNlbHNlCisJCWh3Lm1fcExGQiA9IChzbXRjX1ZSQU1CYXNlQWRkcmVzcyA9CisJCSAgICBpb3JlbWFwKHBGcmFtZWJ1ZmZlclBoeXNpY2FsLCAweDAwODAwMDAwKSk7CisjZW5kaWYKKwkJaHcubV9wTU1JTyA9IChzbXRjX1JlZ0Jhc2VBZGRyZXNzID0KKwkJICAgIHNtdGNfVlJBTUJhc2VBZGRyZXNzICsgMHgwMDcwMDAwMCk7CisJCXNtdGNfMkRCYXNlQWRkcmVzcyA9IChody5tX3BEUFIgPQorCQkgICAgc210Y19WUkFNQmFzZUFkZHJlc3MgKyAweDAwNDA4MDAwKTsKKwkJc210Y18yRGRhdGFwb3J0ID0gc210Y19WUkFNQmFzZUFkZHJlc3MgKyBERV9EQVRBX1BPUlRfNzEyOworCQlody5tX3BWUFIgPSBody5tX3BMRkIgKyAweDAwNDBjMDAwOworI2lmZGVmIF9fQklHX0VORElBTgorCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKKwkJCXNtdGNfVlJBTUJhc2VBZGRyZXNzICs9IDB4ODAwMDAwOworCQkJaHcubV9wTEZCICs9IDB4ODAwMDAwOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJcbnNtdGNfVlJBTUJhc2VBZGRyZXNzPSVwIGh3Lm1fcExGQj0lcFxuIiwKKwkJCQkJc210Y19WUkFNQmFzZUFkZHJlc3MsIGh3Lm1fcExGQik7CisJCX0KKyNlbmRpZgorCQlpZiAoIXNtdGNfUmVnQmFzZUFkZHJlc3MpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkiJXM6IHVuYWJsZSB0byBtYXAgbWVtb3J5IG1hcHBlZCBJT1xuIiwKKwkJCQlzZmItPmZiLmZpeC5pZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCS8qIHNldCBNQ0xLID0gMTQuMzE4MTggKiAoMHgxNiAvIDB4MikgKi8KKwkJc210Y19zZXF3KDB4NmEsIDB4MTYpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDYyLCAweDNlKTsKKwkJLyogZW5hYmxlIFBDSSBidXJzdCAqLworCQlzbXRjX3NlcXcoMHgxNywgMHgyMCk7CisJCS8qIGVuYWJsZSB3b3JkIHN3YXAgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKQorCQkJc210Y19zZXF3KDB4MTcsIDB4MzApOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0ZCX1NNN1hYX0FDQ0VMCisJCXNtdGNfMkRhY2NlbGVyYXRpb24gPSAxOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgMHg3MjA6CisJCXNmYi0+ZmIuZml4Lm1taW9fc3RhcnQgPSBwRnJhbWVidWZmZXJQaHlzaWNhbDsKKwkJc2ZiLT5mYi5maXgubW1pb19sZW4gPSAweDAwMjAwMDAwOworCQlzbWVtX3NpemUgPSBTTTcyMl9WSURFT01FTU9SWVNJWkU7CisJCXNtdGNfMkRCYXNlQWRkcmVzcyA9IChody5tX3BEUFIgPQorCQkgICAgaW9yZW1hcChwRnJhbWVidWZmZXJQaHlzaWNhbCwgMHgwMGEwMDAwMCkpOworCQlody5tX3BMRkIgPSAoc210Y19WUkFNQmFzZUFkZHJlc3MgPQorCQkgICAgc210Y18yREJhc2VBZGRyZXNzICsgMHgwMDIwMDAwMCk7CisJCWh3Lm1fcE1NSU8gPSAoc210Y19SZWdCYXNlQWRkcmVzcyA9CisJCSAgICBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDAwMGMwMDAwKTsKKwkJc210Y18yRGRhdGFwb3J0ID0gc210Y18yREJhc2VBZGRyZXNzICsgREVfREFUQV9QT1JUXzcyMjsKKwkJaHcubV9wVlBSID0gc210Y18yREJhc2VBZGRyZXNzICsgMHg4MDA7CisKKwkJc210Y19zZXF3KDB4NjIsIDB4ZmYpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgwZCk7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y18yRGFjY2VsZXJhdGlvbiA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8KKwkJIk5vIHZhbGlkIFNpbGljb24gTW90aW9uIGRpc3BsYXkgY2hpcCB3YXMgZGV0ZWN0ZWQhXG4iKTsKKworCQlzbXRjX2ZyZWVfZmJfaW5mbyhzZmIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGNhbiBzdXBwb3J0IDMyIGJwcCAqLworCWlmICgxNSA9PSBzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCkKKwkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPSAxNjsKKworCXNmYi0+ZmIudmFyLnhyZXNfdmlydHVhbCA9IHNmYi0+ZmIudmFyLnhyZXM7CisJc2ZiLT5mYi52YXIueXJlc192aXJ0dWFsID0gc2ZiLT5mYi52YXIueXJlczsKKwllcnIgPSBzbXRjX21hcF9zbWVtKHNmYiwgcGRldiwgc21lbV9zaXplKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxlZDsKKworCXNtdGNmYl9zZXRtb2RlKHNmYik7CisJLyogUHJpbWFyeSBkaXNwbGF5IHN0YXJ0aW5nIGZyb20gMCBwb3N0aW9uICovCisJaHcuQmFzZUFkZHJlc3NJblZSQU0gPSAwOworCXNmYi0+ZmIucGFyID0gJmh3OworCisJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJnNmYi0+ZmIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXByaW50ayhLRVJOX0lORk8gIlNpbGljb24gTW90aW9uIFNNJVggUmV2JVggcHJpbWFyeSBkaXNwbGF5IG1vZGUiCisJCQkiJWR4JWQtJWQgSW5pdCBDb21wbGV0ZS5cbiIsIGh3LmNoaXBJRCwgaHcuY2hpcFJldklELAorCQkJc2ZiLT5mYi52YXIueHJlcywgc2ZiLT5mYi52YXIueXJlcywKKwkJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKTsKKworCXJldHVybiAwOworCisgZmFpbGVkOgorCXByaW50ayhLRVJOX0lORk8gIlNpbGljb24gTW90aW9uLCBJbmMuICBwcmltYXJ5IGRpc3BsYXkgaW5pdCBmYWlsXG4iKTsKKworCXNtdGNfdW5tYXBfc21lbShzZmIpOworCXNtdGNfdW5tYXBfbW1pbyhzZmIpOworCXNtdGNfZnJlZV9mYl9pbmZvKHNmYik7CisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIEphc29uICgwOC8xMS8yMDA5KSBQQ0lfRFJWIHdyYXBwZXIgZXNzZW50aWFsIHN0cnVjdHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbXRjZmJfcGNpX3RhYmxlW10gPSB7CisJezB4MTI2ZiwgMHg3MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDEyNmYsIDB4NzEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxMjZmLCAweDcyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezAsfQorfTsKKworCisvKiBKYXNvbiAoMDgvMTQvMjAwOSkKKyAqIGRvIHNvbWUgY2xlYW4gdXAgd2hlbiB0aGUgZHJpdmVyIG1vZHVsZSBpcyByZW1vdmVkCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbXRjZmJfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKKworCXNmYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJc210Y191bm1hcF9zbWVtKHNmYik7CisJc210Y191bm1hcF9tbWlvKHNmYik7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmc2ZiLT5mYik7CisJc210Y19mcmVlX2ZiX2luZm8oc2ZiKTsKK30KKworLyogSmFzb24gKDA4LzE0LzIwMDkpCisgKiBzdXNwZW5kIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiB0aGUgc3VzcGVuZCBldmVudCBpcyB0cmlnZ2VyZWQKKyAqLworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzbXRjZmJfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKKwlpbnQgcmV0djsKKworCXNmYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIHNldCB0aGUgaHcgaW4gc2xlZXAgbW9kZSB1c2UgZXh0ZXJuZWwgY2xvY2sgYW5kIHNlbGYgbWVtb3J5IHJlZnJlc2gKKwkgKiBzbyB0aGF0IHdlIGNhbiB0dXJuIG9mZiBpbnRlcm5hbCBQTExzIGxhdGVyIG9uCisJICovCisJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgfCAweGMwKSk7CisJc210Y19zZXF3KDB4NjksIChzbXRjX3NlcXIoMHg2OSkgJiAweGY3KSk7CisKKwlzd2l0Y2ggKG1zZy5ldmVudCkgeworCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgorCWNhc2UgUE1fRVZFTlRfUFJFVEhBVzoKKwkJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbXNnOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiB3aGVuIGRvaW5nIHN1c3BlbmQsIGNhbGwgZmIgYXBpcyBhbmQgcGNpIGFwaXMgKi8KKwlpZiAobXNnLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKwkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMSk7CisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJcmV0diA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHYgPSBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIG1zZyk7CisJCXJldHYgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHJldHYpOworCX0KKworCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1zZzsKKworCS8qIGFkZGl0aW9uYWx5IHR1cm4gb2ZmIGFsbCBmdW5jdGlvbiBibG9ja3MgaW5jbHVkaW5nIGludGVybmFsIFBMTHMgKi8KKwlzbXRjX3NlcXcoMHgyMSwgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzbXRjZmJfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCWludCByZXR2OworCisJc2ZiID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogd2hlbiByZXN1bWluZywgcmVzdG9yZSBwY2kgZGF0YSBhbmQgZmIgY3Vyc29yICovCisJaWYgKHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9GUkVFWkUpIHsKKwkJcmV0diA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwkJcmV0diA9IHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCQlyZXR1cm4gLTE7CisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCX0KKworCS8qIHJlaW5pdCBoYXJkd2FyZSAqLworCXNtN3h4X2luaXRfaHcoKTsKKwlzd2l0Y2ggKGh3LmNoaXBJRCkgeworCWNhc2UgMHg3MTA6CisJY2FzZSAweDcxMjoKKwkJLyogc2V0IE1DTEsgPSAxNC4zMTgxOCAqICAoMHgxNiAvIDB4MikgKi8KKwkJc210Y19zZXF3KDB4NmEsIDB4MTYpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDYyLCAweDNlKTsKKwkJLyogZW5hYmxlIFBDSSBidXJzdCAqLworCQlzbXRjX3NlcXcoMHgxNywgMHgyMCk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikKKwkJCXNtdGNfc2VxdygweDE3LCAweDMwKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIDB4NzIwOgorCQlzbXRjX3NlcXcoMHg2MiwgMHhmZik7CisJCXNtdGNfc2VxdygweDZhLCAweDBkKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlicmVhazsKKwl9CisKKwlzbXRjX3NlcXcoMHgzNCwgKHNtdGNfc2VxcigweDM0KSB8IDB4YzApKTsKKwlzbXRjX3NlcXcoMHgzMywgKChzbXRjX3NlcXIoMHgzMykgfCAweDA4KSAmIDB4ZmIpKTsKKworCXNtdGNmYl9zZXRtb2RlKHNmYik7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZmJfc2V0X3N1c3BlbmQoJnNmYi0+ZmIsIDApOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiAwOworfQorCisvKiBKYXNvbiAoMDgvMTMvMjAwOSkKKyAqIHBjaV9kcml2ZXIgc3RydWN0IHVzZWQgdG8gd3JhcCB0aGUgb3JpZ2luYWwgZHJpdmVyCisgKiBzbyB0aGF0IGl0IGNhbiBiZSByZWdpc3RlcmVkIGludG8gdGhlIGtlcm5lbCBhbmQKKyAqIHRoZSBwcm9wZXIgbWV0aG9kIHdvdWxkIGJlIGNhbGxlZCB3aGVuIHN1c3BlbmRpbmcgYW5kIHJlc3VtaW5nCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzbXRjZmJfZHJpdmVyID0geworCS5uYW1lID0gInNtdGNmYiIsCisJLmlkX3RhYmxlID0gc210Y2ZiX3BjaV90YWJsZSwKKwkucHJvYmUgPSBzbXRjZmJfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbXRjZmJfcGNpX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBzbXRjZmJfc3VzcGVuZCwKKwkucmVzdW1lID0gc210Y2ZiX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgc210Y2ZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc210Y2ZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbXRjZmJfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc210Y2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNtdGNmYl9pbml0KTsKK21vZHVsZV9leGl0KHNtdGNmYl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2lsaWNvbm1vdGlvbiAiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciBTTUkgR3JhcGhpYyBDYXJkcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmMzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKQEAgLTAsMCArMSw3OTMgQEAKKy8qCisgKiBTaWxpY29uIE1vdGlvbiBTTTcxMiBmcmFtZSBidWZmZXIgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbGljb24gTW90aW9uIFRlY2hub2xvZ3kgQ29ycC4KKyAqIEF1dGhvcnM6CUdlIFdhbmcsIGdld2FuZ0BzaWxpY29ubW90aW9uLmNvbQorICoJIAlCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBTTVRDX0xJTlVYX0ZCX1ZFUlNJT04JInZlcnNpb24gMC4xMS4yNjE5LjIxLjAxIEp1bHkgMjcsIDIwMDgiCisKKyNkZWZpbmUgTlJfUEFMRVRURSAgICAgICAgMjU2CisjZGVmaW5lIE5SX1JHQiAgICAgICAgICAgIDIKKworI2RlZmluZSBGQl9BQ0NFTF9TTUlfTFlOWCA4OAorCisjaWZkZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIFBDX1ZHQSAgICAgICAgICAgIDAKKyNlbHNlCisjZGVmaW5lIFBDX1ZHQSAgICAgICAgICAgIDEKKyNlbmRpZgorCisjZGVmaW5lIFNDUkVFTl9YX1JFUyAgICAgIDEwMjQKKyNkZWZpbmUgU0NSRUVOX1lfUkVTICAgICAgNjAwCisjZGVmaW5lIFNDUkVFTl9CUFAgICAgICAgIDE2CisKKyNpZm5kZWYgRklFTERfT0ZGU0VUCisjZGVmaW5lIEZJRUxEX09GU0ZFVCh0eXBlLCBmaWVsZCkgXAorCSgodW5zaWduZWQgbG9uZykgKFBVQ0hBUikgJiAoKCh0eXBlICopMCktPmZpZWxkKSkKKyNlbmRpZgorCisvKkFzc3VtZSBTTTcxMiBncmFwaGljcyBjaGlwIGhhcyA0TUIgVlJBTSAqLworI2RlZmluZSBTTTcxMl9WSURFT01FTU9SWVNJWkUJICAweDAwNDAwMDAwCisvKkFzc3VtZSBTTTcyMiBncmFwaGljcyBjaGlwIGhhcyA4TUIgVlJBTSAqLworI2RlZmluZSBTTTcyMl9WSURFT01FTU9SWVNJWkUJICAweDAwODAwMDAwCisKKyNkZWZpbmUgZGFjX3JlZwkoMHgzYzgpCisjZGVmaW5lIGRhY192YWwJKDB4M2M5KQorCitleHRlcm4gY2hhciAqc210Y19SZWdCYXNlQWRkcmVzczsKKyNkZWZpbmUgc210Y19tbWlvd2IoZGF0LCByZWcpCXdyaXRlYihkYXQsIHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisjZGVmaW5lIHNtdGNfbW1pb3d3KGRhdCwgcmVnKQl3cml0ZXcoZGF0LCBzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorI2RlZmluZSBzbXRjX21taW93bChkYXQsIHJlZykJd3JpdGVsKGRhdCwgc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKworI2RlZmluZSBzbXRjX21taW9yYihyZWcpCXJlYWRiKHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisjZGVmaW5lIHNtdGNfbW1pb3J3KHJlZykJcmVhZHcoc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKyNkZWZpbmUgc210Y19tbWlvcmwocmVnKQlyZWFkbChzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorCisjZGVmaW5lIFNJWkVfU1IwMF9TUjA0ICAgICAgKDB4MDQgLSAweDAwICsgMSkKKyNkZWZpbmUgU0laRV9TUjEwX1NSMjQgICAgICAoMHgyNCAtIDB4MTAgKyAxKQorI2RlZmluZSBTSVpFX1NSMzBfU1I3NSAgICAgICgweDc1IC0gMHgzMCArIDEpCisjZGVmaW5lIFNJWkVfU1I4MF9TUjkzICAgICAgKDB4OTMgLSAweDgwICsgMSkKKyNkZWZpbmUgU0laRV9TUkEwX1NSQUYgICAgICAoMHhBRiAtIDB4QTAgKyAxKQorI2RlZmluZSBTSVpFX0dSMDBfR1IwOCAgICAgICgweDA4IC0gMHgwMCArIDEpCisjZGVmaW5lIFNJWkVfQVIwMF9BUjE0ICAgICAgKDB4MTQgLSAweDAwICsgMSkKKyNkZWZpbmUgU0laRV9DUjAwX0NSMTggICAgICAoMHgxOCAtIDB4MDAgKyAxKQorI2RlZmluZSBTSVpFX0NSMzBfQ1I0RCAgICAgICgweDREIC0gMHgzMCArIDEpCisjZGVmaW5lIFNJWkVfQ1I5MF9DUkE3ICAgICAgKDB4QTcgLSAweDkwICsgMSkKKyNkZWZpbmUgU0laRV9WUFIJCSgweDZDICsgMSkKKyNkZWZpbmUgU0laRV9EUFIJCSgweDQ0ICsgMSkKKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfY3J0Y3coaW50IHJlZywgaW50IHZhbCkKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2Q0KTsKKwlzbXRjX21taW93Yih2YWwsIDB4M2Q1KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc210Y19jcnRjcihpbnQgcmVnKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzZDQpOworCXJldHVybiBzbXRjX21taW9yYigweDNkNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2dycGh3KGludCByZWcsIGludCB2YWwpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNjZSk7CisJc210Y19tbWlvd2IodmFsLCAweDNjZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNtdGNfZ3JwaHIoaW50IHJlZykKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2NlKTsKKwlyZXR1cm4gc210Y19tbWlvcmIoMHgzY2YpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19hdHRydyhpbnQgcmVnLCBpbnQgdmFsKQoreworCXNtdGNfbW1pb3JiKDB4M2RhKTsKKwlzbXRjX21taW93YihyZWcsIDB4M2MwKTsKKwlzbXRjX21taW9yYigweDNjMSk7CisJc210Y19tbWlvd2IodmFsLCAweDNjMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX3NlcXcoaW50IHJlZywgaW50IHZhbCkKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2M0KTsKKwlzbXRjX21taW93Yih2YWwsIDB4M2M1KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc210Y19zZXFyKGludCByZWcpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNjNCk7CisJcmV0dXJuIHNtdGNfbW1pb3JiKDB4M2M1KTsKK30KKworLyogVGhlIG5leHQgc3RydWN0dXJlIGhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxldmFudCBmb3IgYSBzcGVjaWZpYyB2aWRlbyBtb2RlLgorICovCisKK3N0cnVjdCBNb2RlSW5pdCB7CisJaW50IG1tU2l6ZVg7CisJaW50IG1tU2l6ZVk7CisJaW50IGJwcDsKKwlpbnQgaHo7CisJdW5zaWduZWQgY2hhciBJbml0X01JU0M7CisJdW5zaWduZWQgY2hhciBJbml0X1NSMDBfU1IwNFtTSVpFX1NSMDBfU1IwNF07CisJdW5zaWduZWQgY2hhciBJbml0X1NSMTBfU1IyNFtTSVpFX1NSMTBfU1IyNF07CisJdW5zaWduZWQgY2hhciBJbml0X1NSMzBfU1I3NVtTSVpFX1NSMzBfU1I3NV07CisJdW5zaWduZWQgY2hhciBJbml0X1NSODBfU1I5M1tTSVpFX1NSODBfU1I5M107CisJdW5zaWduZWQgY2hhciBJbml0X1NSQTBfU1JBRltTSVpFX1NSQTBfU1JBRl07CisJdW5zaWduZWQgY2hhciBJbml0X0dSMDBfR1IwOFtTSVpFX0dSMDBfR1IwOF07CisJdW5zaWduZWQgY2hhciBJbml0X0FSMDBfQVIxNFtTSVpFX0FSMDBfQVIxNF07CisJdW5zaWduZWQgY2hhciBJbml0X0NSMDBfQ1IxOFtTSVpFX0NSMDBfQ1IxOF07CisJdW5zaWduZWQgY2hhciBJbml0X0NSMzBfQ1I0RFtTSVpFX0NSMzBfQ1I0RF07CisJdW5zaWduZWQgY2hhciBJbml0X0NSOTBfQ1JBN1tTSVpFX0NSOTBfQ1JBN107Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJIFNNNzEyIE1vZGUgdGFibGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBNb2RlSW5pdCBWR0FNb2RlW10gPSB7CisJeworCSAvKiAgbW9kZSMwOiA2NDAgeCA0ODAgIDE2QnBwICA2MEh6ICovCisJIDY0MCwgNDgwLCAxNiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFMywKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVGLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDMyLCAweDAzLCAweEEwLCAweDA5LCAweEMwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgwNCwgMHgyNCwgMHg2MywgMHg0RiwgMHg1MiwgMHgwQiwgMHhERiwgMHhFQSwKKwkgIDB4MDQsIDB4NTAsIDB4MTksIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzIsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwNywgMHg4MiwgMHgwNywgMHgwNCwKKwkgIDB4MDAsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MzAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDMyLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhFRiwgMHhGRiwgMHgzMiwgMHgzMiwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhGRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg1RiwgMHg0RiwgMHg0RiwgMHgwMCwgMHg1MywgMHgxRiwgMHgwQiwgMHgzRSwKKwkgIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEVBLCAweDBDLCAweERGLCAweDUwLCAweDQwLCAweERGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEZGLCAweEZELAorCSAgMHg1RiwgMHg0RiwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwQiwgMHhERiwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4MkUsIDB4MDAsIDB4NEYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweERELCAweDVFLCAweEVBLCAweDg3LCAweDQ0LCAweDhGLCAweDU1LAorCSAgMHgwQSwgMHg4RiwgMHg1NSwgMHgwQSwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MTEsIDB4MTAsIDB4MEIsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MDAsCisJICB9LAorCSB9LAorCXsKKwkgLyogIG1vZGUjMTogNjQwIHggNDgwICAyNEJwcCAgNjBIeiAqLworCSA2NDAsIDQ4MCwgMjQsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RTMsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAwLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRiwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzMiwgMHgwMywgMHhBMCwgMHgwOSwgMHhDMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MDQsIDB4MjQsIDB4NjMsIDB4NEYsIDB4NTIsIDB4MEIsIDB4REYsIDB4RUEsCisJICAweDA0LCAweDUwLCAweDE5LCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDMyLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDcsIDB4ODIsIDB4MDcsIDB4MDQsCisJICAweDAwLCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDMwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgzMiwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RUYsIDB4RkYsIDB4MzIsIDB4MzIsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4RkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4NUYsIDB4NEYsIDB4NEYsIDB4MDAsIDB4NTMsIDB4MUYsIDB4MEIsIDB4M0UsCisJICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHhERiwgMHg1MCwgMHg0MCwgMHhERiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhGRiwgMHhGRCwKKwkgIDB4NUYsIDB4NEYsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MEIsIDB4REYsIDB4MDAsCisJICAweEVBLCAweDBDLCAweDJFLCAweDAwLCAweDRGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHhERCwgMHg1RSwgMHhFQSwgMHg4NywgMHg0NCwgMHg4RiwgMHg1NSwKKwkgIDB4MEEsIDB4OEYsIDB4NTUsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDExLCAweDEwLCAweDBCLCAweDBBLCAweDBBLCAweDBBLCAweDBBLCAweDAwLAorCSAgfSwKKwkgfSwKKwl7CisJIC8qICBtb2RlIzA6IDY0MCB4IDQ4MCAgMzJCcHAgIDYwSHogKi8KKwkgNjQwLCA0ODAsIDMyLCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEUzLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMCwgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUYsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzIsIDB4MDMsIDB4QTAsIDB4MDksIDB4QzAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDA0LCAweDI0LCAweDYzLCAweDRGLCAweDUyLCAweDBCLCAweERGLCAweEVBLAorCSAgMHgwNCwgMHg1MCwgMHgxOSwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDA3LCAweDgyLCAweDA3LCAweDA0LAorCSAgMHgwMCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgzMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MzIsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEVGLCAweEZGLCAweDMyLCAweDMyLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEZGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDVGLCAweDRGLCAweDRGLCAweDAwLCAweDUzLCAweDFGLCAweDBCLCAweDNFLAorCSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4REYsIDB4NTAsIDB4NDAsIDB4REYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4RkYsIDB4RkQsCisJICAweDVGLCAweDRGLCAweDAwLCAweDU0LCAweDAwLCAweDBCLCAweERGLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHgyRSwgMHgwMCwgMHg0RiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4REQsIDB4NUUsIDB4RUEsIDB4ODcsIDB4NDQsIDB4OEYsIDB4NTUsCisJICAweDBBLCAweDhGLCAweDU1LCAweDBBLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgxMSwgMHgxMCwgMHgwQiwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwMCwKKwkgIH0sCisJIH0sCisKKwl7CQkJLyogIG1vZGUjMjogODAwIHggNjAwICAxNkJwcCAgNjBIeiAqLworCSA4MDAsIDYwMCwgMTYsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4MkIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRSwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzNCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgyNCwgMHgyNCwKKwkgIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDM4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgyNCwgMHgyNCwgMHgyNCwKKwkgIDB4MDQsIDB4NDgsIDB4ODMsIDB4NjMsIDB4NjgsIDB4NzIsIDB4NTcsIDB4NTgsCisJICAweDA0LCAweDU1LCAweDU5LCAweDI0LCAweDI0LCAweDAwLCAweDAwLCAweDI0LAorCSAgMHgwMSwgMHg4MCwgMHg3QSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MUMsIDB4ODUsIDB4MzUsIDB4MTMsCisJICAweDAyLCAweDQ1LCAweDMwLCAweDM1LCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgyNCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4MjQsIDB4MjQsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4N0YsIDB4NjMsIDB4NjMsIDB4MDAsIDB4NjgsIDB4MTgsIDB4NzIsIDB4RjAsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHg1NywgMHg2NCwgMHg0MCwgMHg1NywgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhCRiwgMHhGRCwKKwkgIDB4N0YsIDB4NjMsIDB4MDAsIDB4NjksIDB4MTgsIDB4NzIsIDB4NTcsIDB4MDAsCisJICAweDU4LCAweDBDLCAweEUwLCAweDIwLCAweDYzLCAweDU3LAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHg0QiwgMHg1RSwgMHg1NSwgMHg4NiwgMHg5RCwgMHg4RSwgMHhBQSwKKwkgIDB4REIsIDB4MkEsIDB4REYsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDIwLCAweDFGLCAweDFBLCAweDE5LCAweDBGLCAweDBGLCAweDBGLCAweDAwLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjMzogODAwIHggNjAwICAyNEJwcCAgNjBIeiAqLworCSA4MDAsIDYwMCwgMjQsIDYwLAorCSAweDJCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUUsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzYsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4MzYsIDB4MzYsIDB4MzYsCisJICAweDM2LCAweDM2LCAweDM2LCAweDM2LCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MzYsIDB4MzYsIDB4MzYsCisJICAweDA0LCAweDQ4LCAweDgzLCAweDYzLCAweDY4LCAweDcyLCAweDU3LCAweDU4LAorCSAgMHgwNCwgMHg1NSwgMHg1OSwgMHgzNiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgzNiwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDFDLCAweDg1LCAweDM1LCAweDEzLAorCSAgMHgwMiwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MzYsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEVGLCAweEZGLCAweDM2LCAweDM2LAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDdGLCAweDYzLCAweDYzLCAweDAwLCAweDY4LCAweDE4LCAweDcyLCAweEYwLAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4NTcsIDB4NjQsIDB4NDAsIDB4NTcsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4QkYsIDB4RkQsCisJICAweDdGLCAweDYzLCAweDAwLCAweDY5LCAweDE4LCAweDcyLCAweDU3LCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHhFMCwgMHgyMCwgMHg2MywgMHg1NywKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4NEIsIDB4NUUsIDB4NTUsIDB4ODYsIDB4OUQsIDB4OEUsIDB4QUEsCisJICAweERCLCAweDJBLCAweERGLCAweDMzLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgyMCwgMHgxRiwgMHgxQSwgMHgxOSwgMHgwRiwgMHgwRiwgMHgwRiwgMHgwMCwKKwkgIH0sCisJIH0sCisJewkJCS8qICBtb2RlIzc6IDgwMCB4IDYwMCAgMzJCcHAgIDYwSHogKi8KKwkgODAwLCA2MDAsIDMyLCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweDJCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUUsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzQsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MjQsIDB4MjQsCisJICAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgzOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MjQsIDB4MjQsIDB4MjQsCisJICAweDA0LCAweDQ4LCAweDgzLCAweDYzLCAweDY4LCAweDcyLCAweDU3LCAweDU4LAorCSAgMHgwNCwgMHg1NSwgMHg1OSwgMHgyNCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgyNCwKKwkgIDB4MDEsIDB4ODAsIDB4N0EsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDFDLCAweDg1LCAweDM1LCAweDEzLAorCSAgMHgwMiwgMHg0NSwgMHgzMCwgMHgzNSwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MjQsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDI0LCAweDI0LAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDdGLCAweDYzLCAweDYzLCAweDAwLCAweDY4LCAweDE4LCAweDcyLCAweEYwLAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4NTcsIDB4NjQsIDB4NDAsIDB4NTcsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4QkYsIDB4RkQsCisJICAweDdGLCAweDYzLCAweDAwLCAweDY5LCAweDE4LCAweDcyLCAweDU3LCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHhFMCwgMHgyMCwgMHg2MywgMHg1NywKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4NEIsIDB4NUUsIDB4NTUsIDB4ODYsIDB4OUQsIDB4OEUsIDB4QUEsCisJICAweERCLCAweDJBLCAweERGLCAweDMzLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgyMCwgMHgxRiwgMHgxQSwgMHgxOSwgMHgwRiwgMHgwRiwgMHgwRiwgMHgwMCwKKwkgIH0sCisJIH0sCisJLyogV2UgdXNlIDEwMjR4NzY4IHRhYmxlIHRvIGxpZ2h0IDEwMjR4NjAwIHBhbmVsIGZvciBsZW1vdGUgKi8KKwl7CQkJLyogIG1vZGUjNDogMTAyNCB4IDYwMCAgMTZCcHAgIDYwSHogICovCisJIDEwMjQsIDYwMCwgMTYsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAwLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhDOCwgMHg0MCwgMHgxNCwgMHg2MCwgMHgwMCwgMHgwQSwgMHgxNywgMHgyMCwKKwkgIDB4NTEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAwLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgyMiwgMHgwMywgMHgyNCwgMHgwOSwgMHhDMCwgMHgyMiwgMHgyMiwgMHgyMiwKKwkgIDB4MjIsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgyMiwgMHgyMiwgMHgyMiwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDIyLCAweDIyLCAweDAwLCAweDAwLCAweDIyLAorCSAgMHgwMSwgMHg4MCwgMHg3QSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4MTYsIDB4MDIsIDB4MEQsIDB4ODIsIDB4MDksIDB4MDIsCisJICAweDA0LCAweDQ1LCAweDNGLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4QTMsIDB4N0YsIDB4MDAsIDB4ODIsIDB4MGIsIDB4NmYsIDB4NTcsIDB4MDAsCisJICAweDVjLCAweDBmLCAweEUwLCAweGUwLCAweDdGLCAweDU3LAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjNTogMTAyNCB4IDc2OCAgMjRCcHAgIDYwSHogKi8KKwkgMTAyNCwgNzY4LCAyNCwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEYzLCAweEI2LCAweEMwLCAweERELCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM4LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDNBLCAweDNBLCAweDNBLAorCSAgMHgzQSwgMHgzQSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgzQiwgMHgwRCwgMHgwOSwgMHgwMiwKKwkgIDB4MDQsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHhBMywgMHg3RiwgMHgwMCwgMHg4NiwgMHgxNSwgMHgyNCwgMHhGRiwgMHgwMCwKKwkgIDB4MDEsIDB4MDcsIDB4RTUsIDB4MjAsIDB4N0YsIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSM0OiAxMDI0IHggNzY4ICAzMkJwcCAgNjBIeiAqLworCSAxMDI0LCA3NjgsIDMyLCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEVCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RjMsIDB4QjYsIDB4QzAsIDB4REQsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMiwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4M0EsIDB4M0EsIDB4M0EsCisJICAweDNBLCAweDNBLCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDA2LCAweDY4LCAweEE3LCAweDdGLCAweDgzLCAweDI0LCAweEZGLCAweDAzLAorCSAgMHgwMCwgMHg2MCwgMHg1OSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDNCLCAweDBELCAweDA5LCAweDAyLAorCSAgMHgwNCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0EsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDNBLCAweDNBLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkIsIDB4OUYsIDB4MDEsIDB4MDAsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZCLCAweEZGLCAweEZGLCAweDk3LCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweEEzLCAweDdGLCAweDdGLCAweDAwLCAweDg1LCAweDE2LCAweDI0LCAweEY1LAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4MDMsIDB4MDksIDB4RkYsIDB4ODAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsCisJICAweEEzLCAweDdGLCAweDAwLCAweDg2LCAweDE1LCAweDI0LCAweEZGLCAweDAwLAorCSAgMHgwMSwgMHgwNywgMHhFNSwgMHgyMCwgMHg3RiwgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTUsIDB4RDksIDB4NUQsIDB4RTEsIDB4ODYsIDB4MUIsIDB4OEUsIDB4MjYsCisJICAweERBLCAweDhELCAweERFLCAweDk0LCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgxNSwgMHgwMywKKwkgIH0sCisJIH0sCisJewkJCS8qICBtb2RlIzY6IDMyMCB4IDI0MCAgMTZCcHAgIDYwSHogKi8KKwkgMzIwLCAyNDAsIDE2LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEVCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RjMsIDB4QjYsIDB4QzAsIDB4REQsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMiwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4M0EsIDB4M0EsIDB4M0EsCisJICAweDNBLCAweDNBLCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDA2LCAweDY4LCAweEE3LCAweDdGLCAweDgzLCAweDI0LCAweEZGLCAweDAzLAorCSAgMHgwMCwgMHg2MCwgMHg1OSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDA4LCAweDQzLCAweDA4LCAweDQzLAorCSAgMHgwNCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0EsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDNBLCAweDNBLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkIsIDB4OUYsIDB4MDEsIDB4MDAsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZCLCAweEZGLCAweEZGLCAweDk3LCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweEEzLCAweDdGLCAweDdGLCAweDAwLCAweDg1LCAweDE2LCAweDI0LCAweEY1LAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4MDMsIDB4MDksIDB4RkYsIDB4ODAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MzAsIDB4NDAsIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsCisJICAweDJFLCAweDI3LCAweDAwLCAweDJiLCAweDBjLCAweDBGLCAweEVGLCAweDAwLAorCSAgMHhGZSwgMHgwZiwgMHgwMSwgMHhDMCwgMHgyNywgMHhFRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTUsIDB4RDksIDB4NUQsIDB4RTEsIDB4ODYsIDB4MUIsIDB4OEUsIDB4MjYsCisJICAweERBLCAweDhELCAweERFLCAweDk0LCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgxNSwgMHgwMywKKwkgIH0sCisJIH0sCisKKwl7CQkJLyogIG1vZGUjODogMzIwIHggMjQwICAzMkJwcCAgNjBIeiAqLworCSAzMjAsIDI0MCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGMywgMHhCNiwgMHhDMCwgMHhERCwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMyLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzOCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzQSwgMHgzQSwgMHgzQSwKKwkgIDB4M0EsIDB4M0EsIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDgsIDB4NDMsIDB4MDgsIDB4NDMsCisJICAweDA0LCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgzMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4MkUsIDB4MjcsIDB4MDAsIDB4MmIsIDB4MGMsIDB4MEYsIDB4RUYsIDB4MDAsCisJICAweEZlLCAweDBmLCAweDAxLCAweEMwLCAweDI3LCAweEVGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKK307CisKKyNkZWZpbmUgbnVtVkdBTW9kZXMJCShzaXplb2YoVkdBTW9kZSkgLyBzaXplb2Yoc3RydWN0IE1vZGVJbml0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZwppbmRleCA4MjViYmM0Li4wNjFlNzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZUNjY1NQogICAgdHJpc3RhdGUgIlZJQSBUZWNobm9sb2dpZXMgVlQ2NjU1IHN1cHBvcnQiCi0gICBkZXBlbmRzIG9uIFBDSQorICAgZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogICAgc2VsZWN0IFdJUkVMRVNTX0VYVAogICAgc2VsZWN0IFdFWFRfUFJJVgogICAgLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnCmluZGV4IDg3YmNkMjYuLjEwNTViNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVlQ2NjU2CiAJdHJpc3RhdGUgIlZJQSBUZWNobm9sb2dpZXMgVlQ2NjU2IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IKKwlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwppbmRleCA3ZDc2YTdmLi5hYWE3MGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCQl9CiAJfQogCSpuZmNodW5rcyA9IDA7Ci0JbWVtc2V0KGZjaHVuaywgMCwgc2l6ZW9mKGZjaHVuaykpOworCW1lbXNldChmY2h1bmssIDAsIHNpemVvZigqZmNodW5rKSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwppbmRleCA2ZjhkOGY5Ny4uNTA2NmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTIyNSw2ICsyMjUsMTIgQEAKIAlpZiAoIXNzY2FuZihidWYsICIlZFxuIiwgJnN0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBzYW5pdHkgY2hlY2s6IHZhbHVlcyBiZWxvdyAxMDAwIG1pbGxpY2VsY2l1cyBkb24ndCBtYWtlIHNlbnNlCisJICogYW5kIGNhbiBjYXVzZSB0aGUgc3lzdGVtIHRvIGdvIGludG8gYSB0aGVybWFsIGhlYXJ0IGF0dGFjaworCSAqLworCWlmIChzdGF0ZSAmJiBzdGF0ZSA8IDEwMDApCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHN0YXRlICYmICF0ei0+Zm9yY2VkX3Bhc3NpdmUpIHsKIAkJbXV0ZXhfbG9jaygmdGhlcm1hbF9saXN0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICZ0aGVybWFsX2NkZXZfbGlzdCwgbm9kZSkgewpAQCAtMjM1LDYgKzI0MSw4IEBACiAJCQkJCQkJCSBjZGV2KTsKIAkJfQogCQltdXRleF91bmxvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKKwkJaWYgKCF0ei0+cGFzc2l2ZV9kZWxheSkKKwkJCXR6LT5wYXNzaXZlX2RlbGF5ID0gMTAwMDsKIAl9IGVsc2UgaWYgKCFzdGF0ZSAmJiB0ei0+Zm9yY2VkX3Bhc3NpdmUpIHsKIAkJbXV0ZXhfbG9jaygmdGhlcm1hbF9saXN0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICZ0aGVybWFsX2NkZXZfbGlzdCwgbm9kZSkgewpAQCAtMjQ1LDE3ICsyNTMsMTIgQEAKIAkJCQkJCQkJICAgY2Rldik7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CisJCXR6LT5wYXNzaXZlX2RlbGF5ID0gMDsKIAl9CiAKIAl0ei0+dGMxID0gMTsKIAl0ei0+dGMyID0gMTsKIAotCWlmICghdHotPnBhc3NpdmVfZGVsYXkpCi0JCXR6LT5wYXNzaXZlX2RlbGF5ID0gMTAwMDsKLQotCWlmICghdHotPnBvbGxpbmdfZGVsYXkpCi0JCXR6LT5wb2xsaW5nX2RlbGF5ID0gMTAwMDA7Ci0KIAl0ei0+Zm9yY2VkX3Bhc3NpdmUgPSBzdGF0ZTsKIAogCXRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKHR6KTsKQEAgLTM3NCw3ICszNzcsNyBAQAogCWlmICghc3NjYW5mKGJ1ZiwgIiVsZFxuIiwgJnN0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc3RhdGUgPCAwKQorCWlmICgobG9uZylzdGF0ZSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzdWx0ID0gY2Rldi0+b3BzLT5zZXRfY3VyX3N0YXRlKGNkZXYsIHN0YXRlKTsKQEAgLTEwMTYsNiArMTAxOSw4IEBACiAJCXRoZXJtYWxfem9uZV9kZXZpY2Vfc2V0X3BvbGxpbmcodHosIHR6LT5wYXNzaXZlX2RlbGF5KTsKIAllbHNlIGlmICh0ei0+cG9sbGluZ19kZWxheSkKIAkJdGhlcm1hbF96b25lX2RldmljZV9zZXRfcG9sbGluZyh0eiwgdHotPnBvbGxpbmdfZGVsYXkpOworCWVsc2UKKwkJdGhlcm1hbF96b25lX2RldmljZV9zZXRfcG9sbGluZyh0eiwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZ0ei0+bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKaW5kZXggYWE1M2RiOS4uMWVmM2I4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdWlvX3BkcnZfZ2VuaXJxX2Rldl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdWlvX3BkcnZfZ2VuaXJxX2Rldl9wbV9vcHMgPSB7CiAJLnJ1bnRpbWVfc3VzcGVuZCA9IHVpb19wZHJ2X2dlbmlycV9ydW50aW1lX25vcCwKIAkucnVudGltZV9yZXN1bWUgPSB1aW9fcGRydl9nZW5pcnFfcnVudGltZV9ub3AsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCA0NzNhYTFhLi5iZTNjOWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtNDQsNSArNDQsMyBAQAogCiBvYmotJChDT05GSUdfVVNCX0FUTSkJCSs9IGF0bS8KIG9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gYXRtLwotCi1vYmotJChDT05GSUdfVVNCX1VMUEkpCQkrPSBvdGcvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggMTgxZjc4Yy4uNmU4YmNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtMTM4OCw2ICsxMzg4LDQ2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IHByb2NfY29udHJvbF9jb21wYXQoc3RydWN0IGRldl9zdGF0ZSAqcHMsCisJCQkJc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcjMyIF9fdXNlciAqcDMyKQoreworICAgICAgICBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyIF9fdXNlciAqcDsKKyAgICAgICAgX191MzIgdWRhdGE7CisgICAgICAgIHAgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnApKTsKKyAgICAgICAgaWYgKGNvcHlfaW5fdXNlcihwLCBwMzIsIChzaXplb2YoKnAzMikgLSBzaXplb2YoY29tcGF0X2NhZGRyX3QpKSkgfHwKKyAgICAgICAgICAgIGdldF91c2VyKHVkYXRhLCAmcDMyLT5kYXRhKSB8fAorCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKHVkYXRhKSwgJnAtPmRhdGEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgcmV0dXJuIHByb2NfY29udHJvbChwcywgcCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19idWxrX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywKKwkJCXN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIzMiBfX3VzZXIgKnAzMikKK3sKKyAgICAgICAgc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlciBfX3VzZXIgKnA7CisgICAgICAgIGNvbXBhdF91aW50X3QgbjsKKyAgICAgICAgY29tcGF0X2NhZGRyX3QgYWRkcjsKKworICAgICAgICBwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7CisKKyAgICAgICAgaWYgKGdldF91c2VyKG4sICZwMzItPmVwKSB8fCBwdXRfdXNlcihuLCAmcC0+ZXApIHx8CisgICAgICAgICAgICBnZXRfdXNlcihuLCAmcDMyLT5sZW4pIHx8IHB1dF91c2VyKG4sICZwLT5sZW4pIHx8CisgICAgICAgICAgICBnZXRfdXNlcihuLCAmcDMyLT50aW1lb3V0KSB8fCBwdXRfdXNlcihuLCAmcC0+dGltZW91dCkgfHwKKyAgICAgICAgICAgIGdldF91c2VyKGFkZHIsICZwMzItPmRhdGEpIHx8IHB1dF91c2VyKGNvbXBhdF9wdHIoYWRkciksICZwLT5kYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICByZXR1cm4gcHJvY19idWxrKHBzLCBwKTsKK30KK3N0YXRpYyBpbnQgcHJvY19kaXNjb25uZWN0c2lnbmFsX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfZGlzY29ubmVjdHNpZ25hbDMyIGRzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkcywgYXJnLCBzaXplb2YoZHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcHMtPmRpc2NzaWduciA9IGRzLnNpZ25yOworCXBzLT5kaXNjY29udGV4dCA9IGNvbXBhdF9wdHIoZHMuY29udGV4dCk7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgZ2V0X3VyYjMyKHN0cnVjdCB1c2JkZXZmc191cmIgKmt1cmIsCiAJCSAgICAgc3RydWN0IHVzYmRldmZzX3VyYjMyIF9fdXNlciAqdXVyYikKQEAgLTE0ODIsNiArMTUyMiw3IEBACiAJcmV0dXJuIHByb2Nlc3Njb21wbF9jb21wYXQoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CiB9CiAKKwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgcHJvY19kaXNjb25uZWN0c2lnbmFsKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQpAQCAtMTY0OCwxMiArMTY4OSwxMiBAQAogICogYXJlIGFzc3VtaW5nIHRoYXQgc29tZWhvdyB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBwcmV2ZW50ZWQgZnJvbQogICogY2hhbmdpbmcuICBCdXQgdGhlcmUncyBubyBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQuLi4KICAqLwotc3RhdGljIGludCB1c2JkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHVzYmRldl9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQl2b2lkIF9fdXNlciAqcCkKIHsKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcHMtPmRldjsKLQl2b2lkIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmV0ID0gLUVOT1RUWTsKIAogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKQEAgLTE3MjYsNiArMTc2NywyNCBAQAogCQlicmVhazsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIFVTQkRFVkZTX0NPTlRST0wzMjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENPTlRST0wzMlxuIiwgX19mdW5jX18pOworCQlyZXQgPSBwcm9jX2NvbnRyb2xfY29tcGF0KHBzLCBwKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19CVUxLMzI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBCVUxLMzJcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gcHJvY19idWxrX2NvbXBhdChwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfRElTQ1NJR05BTDMyOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogRElTQ1NJR05BTDMyXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IHByb2NfZGlzY29ubmVjdHNpZ25hbF9jb21wYXQocHMsIHApOworCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfU1VCTUlUVVJCMzI6CiAJCXNub29wKCZkZXYtPmRldiwgIiVzOiBTVUJNSVRVUkIzMlxuIiwgX19mdW5jX18pOwpAQCAtMTc0NSw3ICsxODA0LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFVTQkRFVkZTX0lPQ1RMMzI6Ci0JCXNub29wKCZkZXYtPmRldiwgIiVzOiBJT0NUTFxuIiwgX19mdW5jX18pOworCQlzbm9vcCgmZGV2LT5kZXYsICIlczogSU9DVEwzMlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSBwcm9jX2lvY3RsX2NvbXBhdChwcywgcHRyX3RvX2NvbXBhdChwKSk7CiAJCWJyZWFrOwogI2VuZGlmCkBAIC0xODAxLDYgKzE4NjAsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgbG9uZyB1c2JkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSB1c2JkZXZfZG9faW9jdGwoZmlsZSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyB1c2JkZXZfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gdXNiZGV2X2RvX2lvY3RsKGZpbGUsIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIC8qIE5vIGtlcm5lbCBsb2NrIC0gZmluZSAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1c2JkZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCkBAIC0xODE3LDEzICsxOTAyLDE2IEBACiB9CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZGV2X2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkub3duZXIgPSAJVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CXVzYmRldl9sc2VlaywKLQkucmVhZCA9CQl1c2JkZXZfcmVhZCwKLQkucG9sbCA9CQl1c2JkZXZfcG9sbCwKLQkuaW9jdGwgPQl1c2JkZXZfaW9jdGwsCi0JLm9wZW4gPQkJdXNiZGV2X29wZW4sCi0JLnJlbGVhc2UgPQl1c2JkZXZfcmVsZWFzZSwKKwkub3duZXIgPQkgIFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQkgIHVzYmRldl9sc2VlaywKKwkucmVhZCA9CQkgIHVzYmRldl9yZWFkLAorCS5wb2xsID0JCSAgdXNiZGV2X3BvbGwsCisJLnVubG9ja2VkX2lvY3RsID0gdXNiZGV2X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gICB1c2JkZXZfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLm9wZW4gPQkJICB1c2JkZXZfb3BlbiwKKwkucmVsZWFzZSA9CSAgdXNiZGV2X3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgdm9pZCB1c2JkZXZfcmVtb3ZlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwppbmRleCA5MWYyODg1Li4yZGNmOTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJcmV0dXJuIHJlc3VtZV9jb21tb24oZGV2LCB0cnVlKTsKIH0KIAotc3RydWN0IGRldl9wbV9vcHMgdXNiX2hjZF9wY2lfcG1fb3BzID0geworY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX2hjZF9wY2lfcG1fb3BzID0gewogCS5zdXNwZW5kCT0gaGNkX3BjaV9zdXNwZW5kLAogCS5zdXNwZW5kX25vaXJxCT0gaGNkX3BjaV9zdXNwZW5kX25vaXJxLAogCS5yZXN1bWVfbm9pcnEJPSBoY2RfcGNpX3Jlc3VtZV9ub2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDZkYWMzYjguLjA0OTVmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMTU5Nyw3ICsxNTk3LDkgQEAKIH0KIAogLyoqCi0gKiBDaGVjayB3aGV0aGVyIGEgbmV3IGJhbmR3aWR0aCBzZXR0aW5nIGV4Y2VlZHMgdGhlIGJ1cyBiYW5kd2lkdGguCisgKiB1c2JfaGNkX2FsbG9jX2JhbmR3aWR0aCAtIGNoZWNrIHdoZXRoZXIgYSBuZXcgYmFuZHdpZHRoIHNldHRpbmcgZXhjZWVkcworICoJCQkJdGhlIGJ1cyBiYW5kd2lkdGgKKyAqIEB1ZGV2OiB0YXJnZXQgJnVzYl9kZXZpY2UKICAqIEBuZXdfY29uZmlnOiBuZXcgY29uZmlndXJhdGlvbiB0byBpbnN0YWxsCiAgKiBAY3VyX2FsdDogdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nCiAgKiBAbmV3X2FsdDogYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIHRoYXQgaXMgYmVpbmcgaW5zdGFsbGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaAppbmRleCBkOGI0M2FlLi5iYmUyYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTMzMCw3ICszMzAsNyBAQAogZXh0ZXJuIHZvaWQgdXNiX2hjZF9wY2lfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKmRldik7CiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKLWV4dGVybiBzdHJ1Y3QgZGV2X3BtX29wcwl1c2JfaGNkX3BjaV9wbV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX2hjZF9wY2lfcG1fb3BzOwogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCAwNmFmOTcwLi4wY2VjNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTE2NTgsMTIgKzE2NTgsMTIgQEAKICNlbmRpZgogCiAvKioKLSAqIHVzYl9jb25maWd1cmVfZGV2aWNlX290ZyAtIEZJWE1FICh1c2Jjb3JlLWludGVybmFsKQorICogdXNiX2VudW1lcmF0ZV9kZXZpY2Vfb3RnIC0gRklYTUUgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAdWRldjogbmV3bHkgYWRkcmVzc2VkIGRldmljZSAoaW4gQUREUkVTUyBzdGF0ZSkKICAqCi0gKiBEbyBjb25maWd1cmF0aW9uIGZvciBPbi1UaGUtR28gZGV2aWNlcworICogRmluaXNoIGVudW1lcmF0aW9uIGZvciBPbi1UaGUtR28gZGV2aWNlcwogICovCi1zdGF0aWMgaW50IHVzYl9jb25maWd1cmVfZGV2aWNlX290ZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3N0YXRpYyBpbnQgdXNiX2VudW1lcmF0ZV9kZXZpY2Vfb3RnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCBlcnIgPSAwOwogCkBAIC0xNzM0LDcgKzE3MzQsNyBAQAogCiAKIC8qKgotICogdXNiX2NvbmZpZ3VyZV9kZXZpY2UgLSBEZXRlY3QgYW5kIHByb2JlIGRldmljZSBpbnRmcy9vdGcgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiB1c2JfZW51bWVyYXRlX2RldmljZSAtIFJlYWQgZGV2aWNlIGNvbmZpZ3MvaW50ZnMvb3RnICh1c2Jjb3JlLWludGVybmFsKQogICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCiAgKgogICogVGhpcyBpcyBvbmx5IGNhbGxlZCBieSB1c2JfbmV3X2RldmljZSgpIGFuZCB1c2JfYXV0aG9yaXplX2RldmljZSgpCkBAIC0xNzQ1LDcgKzE3NDUsNyBAQAogICogdGhlIHN0cmluZyBkZXNjcmlwdG9ycywgYXMgdGhleSB3aWxsIGJlIGVycm9yZWQgb3V0IGJ5IHRoZSBkZXZpY2UKICAqIHVudGlsIGl0IGhhcyBiZWVuIGF1dGhvcml6ZWQuCiAgKi8KLXN0YXRpYyBpbnQgdXNiX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCitzdGF0aWMgaW50IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCBlcnI7CiAKQEAgLTE3NjksNyArMTc2OSw3IEBACiAJCQkJCQkgICAgICB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpOwogCQl1ZGV2LT5zZXJpYWwgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcik7CiAJfQotCWVyciA9IHVzYl9jb25maWd1cmVfZGV2aWNlX290Zyh1ZGV2KTsKKwllcnIgPSB1c2JfZW51bWVyYXRlX2RldmljZV9vdGcodWRldik7CiBmYWlsOgogCXJldHVybiBlcnI7CiB9CkBAIC0xNzc5LDggKzE3NzksOCBAQAogICogdXNiX25ld19kZXZpY2UgLSBwZXJmb3JtIGluaXRpYWwgZGV2aWNlIHNldHVwICh1c2Jjb3JlLWludGVybmFsKQogICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCiAgKgotICogVGhpcyBpcyBjYWxsZWQgd2l0aCBkZXZpY2VzIHdoaWNoIGhhdmUgYmVlbiBlbnVtZXJhdGVkLCBidXQgbm90IHlldAotICogY29uZmlndXJlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggZGV2aWNlcyB3aGljaCBoYXZlIGJlZW4gZGV0ZWN0ZWQgYnV0IG5vdCBmdWxseQorICogZW51bWVyYXRlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKICAqIGZvciBhbnkgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBsb2NrZWQgZWl0aGVyCiAgKiB0aGUgcGFyZW50IGh1YiAoaWYgdWRldiBpcyBhIG5vcm1hbCBkZXZpY2UpIG9yIGVsc2UgdGhlCiAgKiB1c2JfYnVzX2xpc3RfbG9jayAoaWYgdWRldiBpcyBhIHJvb3QgaHViKS4gIFRoZSBwYXJlbnQncyBwb2ludGVyIHRvCkBAIC0xODAzLDggKzE4MDMsOCBAQAogCWlmICh1ZGV2LT5wYXJlbnQpCiAJCXVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2LT5wYXJlbnQpOwogCi0JdXNiX2RldGVjdF9xdWlya3ModWRldik7CQkvKiBEZXRlcm1pbmUgcXVpcmtzICovCi0JZXJyID0gdXNiX2NvbmZpZ3VyZV9kZXZpY2UodWRldik7CS8qIGRldGVjdCAmIHByb2JlIGRldi9pbnRmcyAqLworCXVzYl9kZXRlY3RfcXVpcmtzKHVkZXYpOworCWVyciA9IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHVkZXYpOwkvKiBSZWFkIGRlc2NyaXB0b3JzICovCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbDsKIAlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1ZGV2ICVkLCBidXNudW0gJWQsIG1pbm9yID0gJWRcbiIsCkBAIC0xODQ5LDIxICsxODQ5LDIzIEBACiAgKi8KIGludCB1c2JfZGVhdXRob3JpemVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQogewotCXVuc2lnbmVkIGNudDsKIAl1c2JfbG9ja19kZXZpY2UodXNiX2Rldik7CiAJaWYgKHVzYl9kZXYtPmF1dGhvcml6ZWQgPT0gMCkKIAkJZ290byBvdXRfdW5hdXRob3JpemVkOworCiAJdXNiX2Rldi0+YXV0aG9yaXplZCA9IDA7CiAJdXNiX3NldF9jb25maWd1cmF0aW9uKHVzYl9kZXYsIC0xKTsKKworCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOwogCXVzYl9kZXYtPnByb2R1Y3QgPSBrc3RyZHVwKCJuL2EgKHVuYXV0aG9yaXplZCkiLCBHRlBfS0VSTkVMKTsKKwlrZnJlZSh1c2JfZGV2LT5tYW51ZmFjdHVyZXIpOwogCXVzYl9kZXYtPm1hbnVmYWN0dXJlciA9IGtzdHJkdXAoIm4vYSAodW5hdXRob3JpemVkKSIsIEdGUF9LRVJORUwpOworCWtmcmVlKHVzYl9kZXYtPnNlcmlhbCk7CiAJdXNiX2Rldi0+c2VyaWFsID0ga3N0cmR1cCgibi9hICh1bmF1dGhvcml6ZWQpIiwgR0ZQX0tFUk5FTCk7Ci0Ja2ZyZWUodXNiX2Rldi0+Y29uZmlnKTsKLQl1c2JfZGV2LT5jb25maWcgPSBOVUxMOwotCWZvciAoY250ID0gMDsgY250IDwgdXNiX2Rldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGNudCsrKQotCQlrZnJlZSh1c2JfZGV2LT5yYXdkZXNjcmlwdG9yc1tjbnRdKTsKKworCXVzYl9kZXN0cm95X2NvbmZpZ3VyYXRpb24odXNiX2Rldik7CiAJdXNiX2Rldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPSAwOwotCWtmcmVlKHVzYl9kZXYtPnJhd2Rlc2NyaXB0b3JzKTsKKwogb3V0X3VuYXV0aG9yaXplZDoKIAl1c2JfdW5sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlyZXR1cm4gMDsKQEAgLTE4NzMsMTUgKzE4NzUsMTEgQEAKIGludCB1c2JfYXV0aG9yaXplX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKIAlpbnQgcmVzdWx0ID0gMCwgYzsKKwogCXVzYl9sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlpZiAodXNiX2Rldi0+YXV0aG9yaXplZCA9PSAxKQogCQlnb3RvIG91dF9hdXRob3JpemVkOwotCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOwotCXVzYl9kZXYtPnByb2R1Y3QgPSBOVUxMOwotCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7Ci0JdXNiX2Rldi0+bWFudWZhY3R1cmVyID0gTlVMTDsKLQlrZnJlZSh1c2JfZGV2LT5zZXJpYWwpOwotCXVzYl9kZXYtPnNlcmlhbCA9IE5VTEw7CisKIAlyZXN1bHQgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodXNiX2Rldik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycigmdXNiX2Rldi0+ZGV2LApAQCAtMTg5NCwxMCArMTg5MiwxOCBAQAogCQkJImF1dGhvcml6YXRpb246ICVkXG4iLCByZXN1bHQpOwogCQlnb3RvIGVycm9yX2RldmljZV9kZXNjcmlwdG9yOwogCX0KKworCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOworCXVzYl9kZXYtPnByb2R1Y3QgPSBOVUxMOworCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7CisJdXNiX2Rldi0+bWFudWZhY3R1cmVyID0gTlVMTDsKKwlrZnJlZSh1c2JfZGV2LT5zZXJpYWwpOworCXVzYl9kZXYtPnNlcmlhbCA9IE5VTEw7CisKIAl1c2JfZGV2LT5hdXRob3JpemVkID0gMTsKLQlyZXN1bHQgPSB1c2JfY29uZmlndXJlX2RldmljZSh1c2JfZGV2KTsKKwlyZXN1bHQgPSB1c2JfZW51bWVyYXRlX2RldmljZSh1c2JfZGV2KTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcl9jb25maWd1cmU7CisJCWdvdG8gZXJyb3JfZW51bWVyYXRlOwogCS8qIENob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiAgVGhpcyByZWdpc3RlcnMgdGhlIGludGVyZmFjZXMKIAkgKiB3aXRoIHRoZSBkcml2ZXIgY29yZSBhbmQgbGV0cyBpbnRlcmZhY2UgZHJpdmVycyBiaW5kIHRvIHRoZW0uCiAJICovCkBAIC0xOTEyLDggKzE5MTgsMTAgQEAKIAkJfQogCX0KIAlkZXZfaW5mbygmdXNiX2Rldi0+ZGV2LCAiYXV0aG9yaXplZCB0byBjb25uZWN0XG4iKTsKLWVycm9yX2NvbmZpZ3VyZToKKworZXJyb3JfZW51bWVyYXRlOgogZXJyb3JfZGV2aWNlX2Rlc2NyaXB0b3I6CisJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1c2JfZGV2KTsKIGVycm9yX2F1dG9yZXN1bWU6CiBvdXRfYXV0aG9yaXplZDoKIAl1c2JfdW5sb2NrX2RldmljZSh1c2JfZGV2KTsJLy8gY29tcGxlbWVudHMgbG9ja3RyZWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCAxNTQ3NzAwLi40ODVlZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC04Miw5ICs4MiwxMyBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwlpbnQgcmV0dmFsOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAorCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsJCQkJCQlcCisJcmV0dmFsID0gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAorCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwkJCQkJXAorCXJldHVybiByZXR2YWw7CQkJCQkJCVwKIH0JCQkJCQkJCQlcCiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCA0ZTJjNmRmLi4wZGFmZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTY2LDkgKzY2LDkgQEAKIC8qKgogICogdXNiX2ZpbmRfYWx0X3NldHRpbmcoKSAtIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgZmluZCB0aGUgYWx0ZXJuYXRlIHNldHRpbmcKICAqIGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLgotICogQGNvbmZpZyAtIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlYXJjaCAobm90IG5lY2Vzc2FyaWx5IHRoZSBjdXJyZW50IGNvbmZpZykuCi0gKiBAaWZhY2VfbnVtIC0gaW50ZXJmYWNlIG51bWJlciB0byBzZWFyY2ggaW4KLSAqIEBhbHRfbnVtIC0gYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIG51bWJlciB0byBzZWFyY2ggZm9yLgorICogQGNvbmZpZzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VhcmNoIChub3QgbmVjZXNzYXJpbHkgdGhlIGN1cnJlbnQgY29uZmlnKS4KKyAqIEBpZmFjZV9udW06IGludGVyZmFjZSBudW1iZXIgdG8gc2VhcmNoIGluCisgKiBAYWx0X251bTogYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIG51bWJlciB0byBzZWFyY2ggZm9yLgogICoKICAqIFNlYXJjaCB0aGUgY29uZmlndXJhdGlvbidzIGludGVyZmFjZSBjYWNoZSBmb3IgdGhlIGdpdmVuIGFsdCBzZXR0aW5nLgogICovCkBAIC0xNjcsMTggKzE2NywyMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FsdG51bV90b19hbHRzZXR0aW5nKTsKIAorc3RydWN0IGZpbmRfaW50ZXJmYWNlX2FyZyB7CisJaW50IG1pbm9yOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7Cit9OworCiBzdGF0aWMgaW50IF9fZmluZF9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWludCAqbWlub3IgPSBkYXRhOworCXN0cnVjdCBmaW5kX2ludGVyZmFjZV9hcmcgKmFyZyA9IGRhdGE7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiAKIAlpZiAoIWlzX3VzYl9pbnRlcmZhY2UoZGV2KSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoZGV2LT5kcml2ZXIgIT0gYXJnLT5kcnYpCisJCXJldHVybiAwOwogCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0JaWYgKGludGYtPm1pbm9yICE9IC0xICYmIGludGYtPm1pbm9yID09ICptaW5vcikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGludGYtPm1pbm9yID09IGFyZy0+bWlub3I7CiB9CiAKIC8qKgpAQCAtMTg3LDE0ICsxOTIsMTggQEAKICAqIEBtaW5vcjogdGhlIG1pbm9yIG51bWJlciBvZiB0aGUgZGVzaXJlZCBkZXZpY2UKICAqCiAgKiBUaGlzIHdhbGtzIHRoZSBidXMgZGV2aWNlIGxpc3QgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2UKLSAqIHdpdGggdGhlIG1hdGNoaW5nIG1pbm9yLiAgTm90ZSwgdGhpcyBvbmx5IHdvcmtzIGZvciBkZXZpY2VzIHRoYXQgc2hhcmUgdGhlCi0gKiBVU0IgbWFqb3IgbnVtYmVyLgorICogd2l0aCB0aGUgbWF0Y2hpbmcgbWlub3IgYW5kIGRyaXZlci4gIE5vdGUsIHRoaXMgb25seSB3b3JrcyBmb3IgZGV2aWNlcworICogdGhhdCBzaGFyZSB0aGUgVVNCIG1ham9yIG51bWJlci4KICAqLwogc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9maW5kX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJ2LCBpbnQgbWlub3IpCiB7CisJc3RydWN0IGZpbmRfaW50ZXJmYWNlX2FyZyBhcmdiOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWRldiA9IGJ1c19maW5kX2RldmljZSgmdXNiX2J1c190eXBlLCBOVUxMLCAmbWlub3IsIF9fZmluZF9pbnRlcmZhY2UpOworCWFyZ2IubWlub3IgPSBtaW5vcjsKKwlhcmdiLmRydiA9ICZkcnYtPmRydndyYXAuZHJpdmVyOworCisJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZ1c2JfYnVzX3R5cGUsIE5VTEwsICZhcmdiLCBfX2ZpbmRfaW50ZXJmYWNlKTsKIAogCS8qIERyb3AgcmVmZXJlbmNlIGNvdW50IGZyb20gYnVzX2ZpbmRfZGV2aWNlICovCiAJcHV0X2RldmljZShkZXYpOwpAQCAtMzIwLDcgKzMyOSw3IEBACiAJcmV0dXJuIHVzYl9yZXN1bWUoZGV2LCBQTVNHX1JFU1RPUkUpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdXNiX2RldmljZV9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX2RldmljZV9wbV9vcHMgPSB7CiAJLnByZXBhcmUgPQl1c2JfZGV2X3ByZXBhcmUsCiAJLmNvbXBsZXRlID0JdXNiX2Rldl9jb21wbGV0ZSwKIAkuc3VzcGVuZCA9CXVzYl9kZXZfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jIGIvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKaW5kZXggMTIwNmEyNi4uMjk1OGExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKKysrIGIvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGJncF9leHRlcm5hbF9zdGFydHVwKTsKIAotc3RhdGljIGludCBfX2luaXQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQorc3RhdGljIGludCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIHBvcnRzYzsKIAl1MzIgZGVsYXlfdGltZSwgZGVsYXk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCmluZGV4IDU4ZjIyMDMuLmE2MmFmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIAogc3RhdGljIGludCBfX2V4aXQgYXVkaW9fdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKKwlnYXVkaW9fY2xlYW51cCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwppbmRleCBjNDNjODlmLi5kZjc3ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKQEAgLTU2LDEzICs1NiwxNiBAQAogREVDTEFSRV9VQUNfQUNfSEVBREVSX0RFU0NSSVBUT1IoMik7CiAKICNkZWZpbmUgVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgJVUFDX0RUX0FDX0hFQURFUl9TSVpFKEZfQVVESU9fTlVNX0lOVEVSRkFDRVMpCisvKiAxIGlucHV0IHRlcm1pbmFsLCAxIG91dHB1dCB0ZXJtaW5hbCBhbmQgMSBmZWF0dXJlIHVuaXQgKi8KKyNkZWZpbmUgVUFDX0RUX1RPVEFMX0xFTkdUSCAoVUFDX0RUX0FDX0hFQURFUl9MRU5HVEggKyBVQUNfRFRfSU5QVVRfVEVSTUlOQUxfU0laRSBcCisJKyBVQUNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUgKyBVQUNfRFRfRkVBVFVSRV9VTklUX1NJWkUoMCkpCiAvKiBCLjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KIHN0YXRpYyBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yXzIgYWNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19IRUFERVIsCiAJLmJjZEFEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCi0JLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVBQ19EVF9BQ19IRUFERVJfTEVOR1RIKSwKKwkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVUFDX0RUX1RPVEFMX0xFTkdUSCksCiAJLmJJbkNvbGxlY3Rpb24gPQlGX0FVRElPX05VTV9JTlRFUkZBQ0VTLAogCS5iYUludGVyZmFjZU5yID0gewogCQlbMF0gPQkJRl9BVURJT19BQ19JTlRFUkZBQ0UsCkBAIC0yNTIsMTIgKzI1NSwxMiBAQAogCiAJY29weV9idWYgPSBremFsbG9jKHNpemVvZiAqY29weV9idWYsIEdGUF9BVE9NSUMpOwogCWlmICghY29weV9idWYpCi0JCXJldHVybiAoc3RydWN0IGZfYXVkaW9fYnVmICopLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljb3B5X2J1Zi0+YnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFjb3B5X2J1Zi0+YnVmKSB7CiAJCWtmcmVlKGNvcHlfYnVmKTsKLQkJcmV0dXJuIChzdHJ1Y3QgZl9hdWRpb19idWYgKiktRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKIAlyZXR1cm4gY29weV9idWY7CkBAIC0zMzIsNyArMzM1LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmY29weV9idWYtPmxpc3QsICZhdWRpby0+cGxheV9xdWV1ZSk7CiAJCXNjaGVkdWxlX3dvcmsoJmF1ZGlvLT5wbGF5YmFja193b3JrKTsKIAkJY29weV9idWYgPSBmX2F1ZGlvX2J1ZmZlcl9hbGxvYyhhdWRpb19idWZfc2l6ZSk7Ci0JCWlmIChjb3B5X2J1ZiA8IDApCisJCWlmIChJU19FUlIoY29weV9idWYpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01NzYsNiArNTc5LDggQEAKIAkJCXVzYl9lcF9lbmFibGUob3V0X2VwLCBhdWRpby0+b3V0X2Rlc2MpOwogCQkJb3V0X2VwLT5kcml2ZXJfZGF0YSA9IGF1ZGlvOwogCQkJYXVkaW8tPmNvcHlfYnVmID0gZl9hdWRpb19idWZmZXJfYWxsb2MoYXVkaW9fYnVmX3NpemUpOworCQkJaWYgKElTX0VSUihhdWRpby0+Y29weV9idWYpKQorCQkJCXJldHVybiAtRU5PTUVNOwogCiAJCQkvKgogCQkJICogYWxsb2NhdGUgYSBidW5jaCBvZiByZWFkIGJ1ZmZlcnMKQEAgLTc4Nyw3ICs3OTIsNyBAQAogCXJldHVybiBzdGF0dXM7CiAKIGFkZF9mYWlsOgotCWdhdWRpb19jbGVhbnVwKCZhdWRpby0+Y2FyZCk7CisJZ2F1ZGlvX2NsZWFudXAoKTsKIHNldHVwX2ZhaWw6CiAJa2ZyZWUoYXVkaW8pOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaAppbmRleCAzMWIyNzEwLi5iZWE1YjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKQEAgLTQxOSwxOSArNDE5LDQgQEAKICNkZWZpbmUgQ1BNX1VTQl9SRVNUQVJUX1RYX09QQ09ERSAweDBiCiAjZGVmaW5lIENQTV9VU0JfRVBfU0hJRlQgNQogCi0jaWZuZGVmIENPTkZJR19DUE0KLWlubGluZSBpbnQgY3BtX2NvbW1hbmQodTMyIGNvbW1hbmQsIHU4IG9wY29kZSkKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCi1pbmxpbmUgaW50IHFlX2lzc3VlX2NtZCh1MzIgY21kLCB1MzIgZGV2aWNlLCB1OCBtY25fcHJvdG9jb2wsCi0JdTMyIGNtZF9pbnB1dCkKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0jZW5kaWYKLQogI2VuZGlmICAvKiBfX0ZTTF9RRV9VRENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKaW5kZXggODI1MjU5NWQuLjM1ZTA5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYwpAQCAtMjg4LDYgKzI4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZ2F1ZGlvICp0aGVfY2FyZDsKIC8qKgogICogZ2F1ZGlvX3NldHVwIC0gc2V0dXAgQUxTQSBpbnRlcmZhY2UgYW5kIHByZXBhcmluZyBmb3IgVVNCIHRyYW5zZmVyCiAgKgpAQCAtMzAzLDYgKzMwNCw5IEBACiAJaWYgKHJldCkKIAkJRVJST1IoY2FyZCwgIndlIG5lZWQgYXQgbGVhc3Qgb25lIGNvbnRyb2wgZGV2aWNlXG4iKTsKIAorCWlmICghdGhlX2NhcmQpCisJCXRoZV9jYXJkID0gY2FyZDsKKwogCXJldHVybiByZXQ7CiAKIH0KQEAgLTMxMiw5ICszMTYsMTEgQEAKICAqCiAgKiBUaGlzIGlzIGNhbGxlZCB0byBmcmVlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBnYXVkaW9fc2V0dXAoKS4KICAqLwotdm9pZCBnYXVkaW9fY2xlYW51cChzdHJ1Y3QgZ2F1ZGlvICpjYXJkKQordm9pZCBnYXVkaW9fY2xlYW51cCh2b2lkKQogewotCWlmIChjYXJkKQotCQlnYXVkaW9fY2xvc2Vfc25kX2RldihjYXJkKTsKKwlpZiAodGhlX2NhcmQpIHsKKwkJZ2F1ZGlvX2Nsb3NlX3NuZF9kZXYodGhlX2NhcmQpOworCQl0aGVfY2FyZCA9IE5VTEw7CisJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uaAppbmRleCBjYzhkMTU5Li4wOGZmY2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmgKQEAgLTUxLDYgKzUxLDYgQEAKIH07CiAKIGludCBnYXVkaW9fc2V0dXAoc3RydWN0IGdhdWRpbyAqY2FyZCk7Ci12b2lkIGdhdWRpb19jbGVhbnVwKHN0cnVjdCBnYXVkaW8gKmNhcmQpOwordm9pZCBnYXVkaW9fY2xlYW51cCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fVV9BVURJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggZWQ3N2JlNy4uZGJmYjQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhdTF4eHhfZWhjaV9wbW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdTF4eHhfZWhjaV9wbW9wcyA9IHsKIAkuc3VzcGVuZAk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDEyZjFhZDIuLjc0ZDA3ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKIC8qCiAgKiBPTUFQIFVTQkhPU1QgUmVnaXN0ZXIgYWRkcmVzc2VzOiBWSVJUVUFMIEFERFJFU1NFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYwppbmRleCAwMGEyOTg1Li5mZjQzNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYwpAQCAtMzcsNyArMzcsNyBAQAogCXBrdC0+aW5mbyA9IDA7CiAJcGt0LT5wcml2X2RhdGEgPSBOVUxMOwogCi0JY3FfcHV0KHVzYi0+ZXAwLT5lbXB0eV9mcmFtZV9RLCBwa3QpOworCWNxX3B1dCgmdXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EsIHBrdCk7CiB9CiAKIC8qIGNvbmZpcm0gc3VibWl0dGVkIHBhY2tldCAqLwpAQCAtNTcsNyArNTcsNyBAQAogCQlpZiAoKHRkLT5kYXRhICsgdGQtPmFjdHVhbF9sZW4pICYmIHRyYW5zX2xlbikKIAkJCW1lbWNweSh0ZC0+ZGF0YSArIHRkLT5hY3R1YWxfbGVuLCBwa3QtPmRhdGEsCiAJCQkgICAgICAgdHJhbnNfbGVuKTsKLQkJY3FfcHV0KHVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CisJCWNxX3B1dCgmdXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSwgcGt0LT5kYXRhKTsKIAl9CiAKIAlyZWN5Y2xlX2ZyYW1lKHVzYiwgcGt0KTsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCX0KIAogCS8qIHVwZGF0ZSBmcmFtZSBvYmplY3QgZmllbGRzIGJlZm9yZSB0cmFuc21pdHRpbmcgKi8KLQlwa3QgPSBjcV9nZXQodXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EpOworCXBrdCA9IGNxX2dldCgmdXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EpOwogCWlmICghcGt0KSB7CiAJCWZoY2lfZGJnKHVzYi0+ZmhjaSwgInRoZXJlIGlzIG5vIGVtcHR5IGZyYW1lXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAKIAlwa3QtPmluZm8gPSAwOwogCWlmIChkYXRhID09IE5VTEwpIHsKLQkJZGF0YSA9IGNxX2dldCh1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RKTsKKwkJZGF0YSA9IGNxX2dldCgmdXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSk7CiAJCUJVR19PTighZGF0YSk7CiAJCXBrdC0+aW5mbyA9IFBLVF9EVU1NWV9QQUNLRVQ7CiAJfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCWxpc3RfZGVsX2luaXQoJnRkLT5mcmFtZV9saCk7CiAJCXRkLT5zdGF0dXMgPSBVU0JfVERfT0s7CiAJCWlmIChwa3QtPmluZm8gJiBQS1RfRFVNTVlfUEFDS0VUKQotCQkJY3FfcHV0KHVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CisJCQljcV9wdXQoJnVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CiAJCXJlY3ljbGVfZnJhbWUodXNiLCBwa3QpOwogCQl1c2ItPmFjdHVhbF9mcmFtZS0+dG90YWxfYnl0ZXMgLT0gKGxlbiArIFBST1RPQ09MX09WRVJIRUFEKTsKIAkJZmhjaV9lcnIodXNiLT5maGNpLCAiaG9zdCB0cmFuc2FjdGlvbiBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCmluZGV4IGI0MDMzMjIuLmQyMjRhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKQEAgLTEwNiwzMyArMTA2LDMzIEBACiAJCQljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT50ZF9iYXNlKSk7CiAKIAkJaWYgKGVwLT5jb25mX2ZyYW1lX1EpIHsKLQkJCXNpemUgPSBjcV9ob3dtYW55KGVwLT5jb25mX2ZyYW1lX1EpOworCQkJc2l6ZSA9IGNxX2hvd21hbnkoJmVwLT5jb25mX2ZyYW1lX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewotCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldChlcC0+Y29uZl9mcmFtZV9RKTsKKwkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoJmVwLT5jb25mX2ZyYW1lX1EpOwogCiAJCQkJa2ZyZWUocGt0KTsKIAkJCX0KLQkJCWNxX2RlbGV0ZShlcC0+Y29uZl9mcmFtZV9RKTsKKwkJCWNxX2RlbGV0ZSgmZXAtPmNvbmZfZnJhbWVfUSk7CiAJCX0KIAogCQlpZiAoZXAtPmVtcHR5X2ZyYW1lX1EpIHsKLQkJCXNpemUgPSBjcV9ob3dtYW55KGVwLT5lbXB0eV9mcmFtZV9RKTsKKwkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+ZW1wdHlfZnJhbWVfUSk7CiAJCQlmb3IgKDsgc2l6ZTsgc2l6ZS0tKSB7Ci0JCQkJc3RydWN0IHBhY2tldCAqcGt0ID0gY3FfZ2V0KGVwLT5lbXB0eV9mcmFtZV9RKTsKKwkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoJmVwLT5lbXB0eV9mcmFtZV9RKTsKIAogCQkJCWtmcmVlKHBrdCk7CiAJCQl9Ci0JCQljcV9kZWxldGUoZXAtPmVtcHR5X2ZyYW1lX1EpOworCQkJY3FfZGVsZXRlKCZlcC0+ZW1wdHlfZnJhbWVfUSk7CiAJCX0KIAogCQlpZiAoZXAtPmR1bW15X3BhY2tldHNfUSkgewotCQkJc2l6ZSA9IGNxX2hvd21hbnkoZXAtPmR1bW15X3BhY2tldHNfUSk7CisJCQlzaXplID0gY3FfaG93bWFueSgmZXAtPmR1bW15X3BhY2tldHNfUSk7CiAJCQlmb3IgKDsgc2l6ZTsgc2l6ZS0tKSB7Ci0JCQkJdTggKmJ1ZmYgPSBjcV9nZXQoZXAtPmR1bW15X3BhY2tldHNfUSk7CisJCQkJdTggKmJ1ZmYgPSBjcV9nZXQoJmVwLT5kdW1teV9wYWNrZXRzX1EpOwogCiAJCQkJa2ZyZWUoYnVmZik7CiAJCQl9Ci0JCQljcV9kZWxldGUoZXAtPmR1bW15X3BhY2tldHNfUSk7CisJCQljcV9kZWxldGUoJmVwLT5kdW1teV9wYWNrZXRzX1EpOwogCQl9CiAKIAkJa2ZyZWUoZXApOwpAQCAtMTc1LDEwICsxNzUsOSBAQAogCWVwLT50ZF9iYXNlID0gY3BtX211cmFtX2FkZHIoZXBfb2Zmc2V0KTsKIAogCS8qIHplcm8gYWxsIHF1ZXVlIHBvaW50ZXJzICovCi0JZXAtPmNvbmZfZnJhbWVfUSA9IGNxX25ldyhyaW5nX2xlbiArIDIpOwotCWVwLT5lbXB0eV9mcmFtZV9RID0gY3FfbmV3KHJpbmdfbGVuICsgMik7Ci0JZXAtPmR1bW15X3BhY2tldHNfUSA9IGNxX25ldyhyaW5nX2xlbiArIDIpOwotCWlmICghZXAtPmNvbmZfZnJhbWVfUSB8fCAhZXAtPmVtcHR5X2ZyYW1lX1EgfHwgIWVwLT5kdW1teV9wYWNrZXRzX1EpIHsKKwlpZiAoY3FfbmV3KCZlcC0+Y29uZl9mcmFtZV9RLCByaW5nX2xlbiArIDIpIHx8CisJICAgIGNxX25ldygmZXAtPmVtcHR5X2ZyYW1lX1EsIHJpbmdfbGVuICsgMikgfHwKKwkgICAgY3FfbmV3KCZlcC0+ZHVtbXlfcGFja2V0c19RLCByaW5nX2xlbiArIDIpKSB7CiAJCWVycl9mb3IgPSAiZnJhbWVfcXVldWVzIjsKIAkJZ290byBlcnI7CiAJfQpAQCAtMTk5LDggKzE5OCw4IEBACiAJCQllcnJfZm9yID0gImJ1ZmZlciI7CiAJCQlnb3RvIGVycjsKIAkJfQotCQljcV9wdXQoZXAtPmVtcHR5X2ZyYW1lX1EsIHBrdCk7Ci0JCWNxX3B1dChlcC0+ZHVtbXlfcGFja2V0c19RLCBidWZmKTsKKwkJY3FfcHV0KCZlcC0+ZW1wdHlfZnJhbWVfUSwgcGt0KTsKKwkJY3FfcHV0KCZlcC0+ZHVtbXlfcGFja2V0c19RLCBidWZmKTsKIAl9CiAKIAkvKiB3ZSBwdXQgdGhlIGVuZHBvaW50IHBhcmFtZXRlciBSQU0gcmlnaHQgYmVoaW5kIHRoZSBURCByaW5nICovCkBAIC0zMTksNyArMzE4LDcgQEAKIAkJaWYgKChidWYgPT0gRFVNTVkyX0JEX0JVRkZFUikgJiYgISh0ZF9zdGF0dXMgJiB+VERfVykpCiAJCQljb250aW51ZTsKIAotCQlwa3QgPSBjcV9nZXQoZXAtPmNvbmZfZnJhbWVfUSk7CisJCXBrdCA9IGNxX2dldCgmZXAtPmNvbmZfZnJhbWVfUSk7CiAJCWlmICghcGt0KQogCQkJZmhjaV9lcnIodXNiLT5maGNpLCAibm8gZnJhbWUgdG8gY29uZmlybVxuIik7CiAKQEAgLTQ2MCw5ICs0NTksOSBAQAogCQlvdXRfYmUxNigmdGQtPmxlbmd0aCwgcGt0LT5sZW4pOwogCiAJLyogcHV0IHRoZSBmcmFtZSB0byB0aGUgY29uZmlybWF0aW9uIHF1ZXVlICovCi0JY3FfcHV0KGVwLT5jb25mX2ZyYW1lX1EsIHBrdCk7CisJY3FfcHV0KCZlcC0+Y29uZl9mcmFtZV9RLCBwa3QpOwogCi0JaWYgKGNxX2hvd21hbnkoZXAtPmNvbmZfZnJhbWVfUSkgPT0gMSkKKwlpZiAoY3FfaG93bWFueSgmZXAtPmNvbmZfZnJhbWVfUSkgPT0gMSkKIAkJb3V0XzgoJnVzYi0+ZmhjaS0+cmVncy0+dXNiX2NvbW0sIFVTQl9DTURfU1RSX0ZJRk8pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCmluZGV4IDcxMTYyODQuLjcyZGFlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCkBAIC00MjMsOSArNDIzLDkgQEAKIAlzdHJ1Y3QgdXNiX3RkIF9faW9tZW0gKnRkX2Jhc2U7IC8qIGZpcnN0IFREIGluIHRoZSByaW5nICovCiAJc3RydWN0IHVzYl90ZCBfX2lvbWVtICpjb25mX3RkOyAvKiBuZXh0IFREIGZvciBjb25maXJtIGFmdGVyIHRyYW5zYWMgKi8KIAlzdHJ1Y3QgdXNiX3RkIF9faW9tZW0gKmVtcHR5X3RkOy8qIG5leHQgVEQgZm9yIG5ldyB0cmFuc2FjdGlvbiByZXEuICovCi0Jc3RydWN0IGtmaWZvICplbXB0eV9mcmFtZV9ROyAgLyogRW1wdHkgZnJhbWVzIGxpc3QgdG8gdXNlICovCi0Jc3RydWN0IGtmaWZvICpjb25mX2ZyYW1lX1E7ICAgLyogZnJhbWVzIHBhc3NlZCB0byBURHMsd2FpdGluZyBmb3IgdHggKi8KLQlzdHJ1Y3Qga2ZpZm8gKmR1bW15X3BhY2tldHNfUTsvKiBkdW1teSBwYWNrZXRzIGZvciB0aGUgQ1JDIG92ZXJ1biAqLworCXN0cnVjdCBrZmlmbyBlbXB0eV9mcmFtZV9ROyAgLyogRW1wdHkgZnJhbWVzIGxpc3QgdG8gdXNlICovCisJc3RydWN0IGtmaWZvIGNvbmZfZnJhbWVfUTsgICAvKiBmcmFtZXMgcGFzc2VkIHRvIFREcyx3YWl0aW5nIGZvciB0eCAqLworCXN0cnVjdCBrZmlmbyBkdW1teV9wYWNrZXRzX1E7LyogZHVtbXkgcGFja2V0cyBmb3IgdGhlIENSQyBvdmVydW4gKi8KIAogCWJvb2wgYWxyZWFkeV9wdXNoZWRfZHVtbXlfYmQ7CiB9OwpAQCAtNDkzLDkgKzQ5Myw5IEBACiB9CiAKIC8qIGZpZm8gb2YgcG9pbnRlcnMgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGtmaWZvICpjcV9uZXcoaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBjcV9uZXcoc3RydWN0IGtmaWZvICpmaWZvLCBpbnQgc2l6ZSkKIHsKLQlyZXR1cm4ga2ZpZm9fYWxsb2Moc2l6ZSAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMLCBOVUxMKTsKKwlyZXR1cm4ga2ZpZm9fYWxsb2MoZmlmbywgc2l6ZSAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNxX2RlbGV0ZShzdHJ1Y3Qga2ZpZm8gKmtmaWZvKQpAQCAtNTA1LDE5ICs1MDUsMTkgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3FfaG93bWFueShzdHJ1Y3Qga2ZpZm8gKmtmaWZvKQogewotCXJldHVybiBfX2tmaWZvX2xlbihrZmlmbykgLyBzaXplb2Yodm9pZCAqKTsKKwlyZXR1cm4ga2ZpZm9fbGVuKGtmaWZvKSAvIHNpemVvZih2b2lkICopOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjcV9wdXQoc3RydWN0IGtmaWZvICprZmlmbywgdm9pZCAqcCkKIHsKLQlyZXR1cm4gX19rZmlmb19wdXQoa2ZpZm8sICh2b2lkICopJnAsIHNpemVvZihwKSk7CisJcmV0dXJuIGtmaWZvX2luKGtmaWZvLCAodm9pZCAqKSZwLCBzaXplb2YocCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmNxX2dldChzdHJ1Y3Qga2ZpZm8gKmtmaWZvKQogewogCXZvaWQgKnAgPSBOVUxMOwogCi0JX19rZmlmb19nZXQoa2ZpZm8sICh2b2lkICopJnAsIHNpemVvZihwKSk7CisJa2ZpZm9fb3V0KGtmaWZvLCAodm9pZCAqKSZwLCBzaXplb2YocCkpOwogCXJldHVybiBwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggNWM3NzRhYi4uNzMzNTJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtODAsNyArODAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xOTAsMTAgKzE5MCw4IEBACiAJCQkgICAgIHN0cnVjdCBpc3AxMzYyX2VwICplcCwgdTE2IGxlbikKIHsKIAlpbnQgcHRkX29mZnNldCA9IC1FSU5WQUw7Ci0JaW50IGluZGV4OwogCWludCBudW1fcHRkcyA9ICgobGVuICsgUFREX0hFQURFUl9TSVpFIC0gMSkgLyBlcHEtPmJsa19zaXplKSArIDE7Ci0JaW50IGZvdW5kID0gLTE7Ci0JaW50IGxhc3QgPSAtMTsKKwlpbnQgZm91bmQ7CiAKIAlCVUdfT04obGVuID4gZXBxLT5idWZfc2l6ZSk7CiAKQEAgLTIwNSwyMCArMjAzLDkgQEAKIAkJICAgIGVwcS0+bmFtZSwgbGVuLCBlcHEtPmJsa19zaXplLCBudW1fcHRkcywgZXBxLT5idWZfbWFwLCBlcHEtPnNraXBfbWFwKTsKIAlCVUdfT04oZXAtPm51bV9wdGRzICE9IDApOwogCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDw9IGVwcS0+YnVmX2NvdW50IC0gbnVtX3B0ZHM7IGluZGV4KyspIHsKLQkJaWYgKHRlc3RfYml0KGluZGV4LCAmZXBxLT5idWZfbWFwKSkKLQkJCWNvbnRpbnVlOwotCQlmb3VuZCA9IGluZGV4OwotCQlmb3IgKGxhc3QgPSBpbmRleCArIDE7IGxhc3QgPCBpbmRleCArIG51bV9wdGRzOyBsYXN0KyspIHsKLQkJCWlmICh0ZXN0X2JpdChsYXN0LCAmZXBxLT5idWZfbWFwKSkgewotCQkJCWZvdW5kID0gLTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGZvdW5kID49IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKGZvdW5kIDwgMCkKKwlmb3VuZCA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKCZlcHEtPmJ1Zl9tYXAsIGVwcS0+YnVmX2NvdW50LCAwLAorCQkJCQkJbnVtX3B0ZHMsIDApOworCWlmIChmb3VuZCA+PSBlcHEtPmJ1Zl9jb3VudCkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAlEQkcoMSwgIiVzOiBGb3VuZCAlZCBQVERzWyVkXSBmb3IgJWQvJWQgYnl0ZVxuIiwgX19mdW5jX18sCkBAIC0yMzAsOCArMjE3LDcgQEAKIAllcHEtPmJ1Zl9hdmFpbCAtPSBudW1fcHRkczsKIAlCVUdfT04oZXBxLT5idWZfYXZhaWwgPiBlcHEtPmJ1Zl9jb3VudCk7CiAJZXAtPnB0ZF9pbmRleCA9IGZvdW5kOwotCWZvciAoaW5kZXggPSBmb3VuZDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKQotCQlfX3NldF9iaXQoaW5kZXgsICZlcHEtPmJ1Zl9tYXApOworCWJpdG1hcF9zZXQoJmVwcS0+YnVmX21hcCwgZm91bmQsIG51bV9wdGRzKTsKIAlEQkcoMSwgIiVzOiBEb25lICVzIFBURFslZF0gJCUwNHgsIGF2YWlsICVkIGNvdW50ICVkIGNsYWltZWQgJWQgJTA4bHg6JTA4bHhcbiIsCiAJICAgIF9fZnVuY19fLCBlcHEtPm5hbWUsIGVwLT5wdGRfaW5kZXgsIGVwLT5wdGRfb2Zmc2V0LAogCSAgICBlcHEtPmJ1Zl9hdmFpbCwgZXBxLT5idWZfY291bnQsIG51bV9wdGRzLCBlcHEtPmJ1Zl9tYXAsIGVwcS0+c2tpcF9tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IGU0MzgwMDguLjE3YTYwNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYXUxeHh4X29oY2lfcG1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXUxeHh4X29oY2lfcG1vcHMgPSB7CiAJLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggZjFjMDYyMC4uYTE4ZGViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtNTE4LDcgKzUxOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBvaGNpX2hjZF9weGEyN3hfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG9oY2lfaGNkX3B4YTI3eF9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCA0MWRiYzcwLi5iN2E2NjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTIzNTMsNyArMjM1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyByOGE2NjU5N19kZXZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHI4YTY2NTk3X2Rldl9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSByOGE2NjU5N19zdXNwZW5kLAogCS5yZXN1bWUgPSByOGE2NjU5N19yZXN1bWUsCiAJLnBvd2Vyb2ZmID0gcjhhNjY1OTdfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IDFkOGUzOWEuLjFlYjllNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtNjAsNiArNjAsNyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFwcGxlZGlzcGxheV90YWJsZSBbXSA9IHsKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjE4KSB9LAogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMTkpIH0sCisJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxYykgfSwKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjFkKSB9LAogCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTcyLDggKzczLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogdXNiIGRldmljZSAqLwogCXN0cnVjdCB1cmIgKnVyYjsJCS8qIHVzYiByZXF1ZXN0IGJsb2NrICovCiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwkvKiBiYWNrbGlnaHQgZGV2aWNlICovCi0JY2hhciAqdXJiZGF0YTsJCQkvKiBpbnRlcnJ1cHQgVVJCIGRhdGEgYnVmZmVyICovCi0JY2hhciAqbXNnZGF0YTsJCQkvKiBjb250cm9sIG1lc3NhZ2UgZGF0YSBidWZmZXIgKi8KKwl1OCAqdXJiZGF0YTsJCQkvKiBpbnRlcnJ1cHQgVVJCIGRhdGEgYnVmZmVyICovCisJdTggKm1zZ2RhdGE7CQkJLyogY29udHJvbCBtZXNzYWdlIGRhdGEgYnVmZmVyICovCiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJaW50IGJ1dHRvbl9wcmVzc2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDYwMmVlMDUuLjU5ODYwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgZXJyKTsKIAkJCWdvdG8gd3JhcGVycjsKIAkJfQotCX0gd2hpbGUgKGkgPiAwKTsKKwl9IHdoaWxlIChyZWMpOwogCiAJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KIAllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGZlNDkzNGQuLmFkMjZlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTI5LDYgKzI5LDggQEAKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl2b2lkIF9faW9tZW0gKmVwaW8gPSBod19lcC0+cmVnczsKKwl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKKwl1MTYgZG1hX3JlZyA9IDA7CiAKIAlwcmVmZXRjaCgodTggKilzcmMpOwogCkBAIC0zOSw2NyArNDEsMTEzIEBACiAKIAlkdW1wX2ZpZm9fZGF0YShzcmMsIGxlbik7CiAKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgwMSkpCi0JCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotCWVsc2UKLQkJb3V0c3coKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotfQorCWlmICghQU5PTUFMWV8wNTAwMDM4MCAmJiBlcG51bSAhPSAwKSB7CisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgaW50KXNyYywKKwkJCSh1bnNpZ25lZCBpbnQpKHNyYyArIGxlbikpOwogCisJCS8qIFNldHVwIERNQSBhZGRyZXNzIHJlZ2lzdGVyICovCisJCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgc3JjICYgMHhGRkZGKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIHNyYyA+PiAxNikgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCS8qIFNldHVwIERNQSBjb3VudCByZWdpc3RlciAqLworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfSElHSCksIDApOworCQlTU1lOQygpOworCisJCS8qIEVuYWJsZSB0aGUgRE1BICovCisJCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQSB8IERJUkVDVElPTjsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CisKKwkJLyogV2FpdCBmb3IgY29tcGVsZXRlICovCisJCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKKwkJCWNwdV9yZWxheCgpOworCisJCS8qIGFja25vd2xlZGdlIGRtYSBpbnRlcnJ1cHQgKi8KKwkJYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKKwkJU1NZTkMoKTsKKworCQkvKiBSZXNldCBETUEgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgMCk7CisJCVNTWU5DKCk7CisJfSBlbHNlIHsKKwkJU1NZTkMoKTsKKworCQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgwMSkpCisJCQlvdXRzd184KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKKwkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7CisJCWVsc2UKKwkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKKwkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7CisKKwl9Cit9CiAvKgogICogVW5sb2FkIGFuIGVuZHBvaW50J3MgRklGTwogICovCiB2b2lkIG11c2JfcmVhZF9maWZvKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgdTggKmRzdCkKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKLQotI2lmZGVmIENPTkZJR19CRjUyeAogCXU4IGVwbnVtID0gaHdfZXAtPmVwbnVtOwogCXUxNiBkbWFfcmVnID0gMDsKIAotCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpZHN0LAotCQkodW5zaWduZWQgaW50KShkc3QgKyBsZW4pKTsKKwlpZiAoQU5PTUFMWV8wNTAwMDQ2NyAmJiBlcG51bSAhPSAwKSB7CiAKLQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLwotCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgZHN0ICYgMHhGRkZGKTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGludClkc3QsCisJCQkodW5zaWduZWQgaW50KShkc3QgKyBsZW4pKTsKIAotCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIGRzdCA+PiAxNikgJiAweEZGRkYpOwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwkJZG1hX3JlZyA9ICh1MTYpICgodTMyKSBkc3QgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfTE9XKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0xPVyksIGxlbik7Ci0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9ISUdIKSwgMCk7Ci0JU1NZTkMoKTsKKwkJZG1hX3JlZyA9ICh1MTYpICgoKHUzMikgZHN0ID4+IDE2KSAmIDB4RkZGRik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBFbmFibGUgdGhlIERNQSAqLwotCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCBkbWFfcmVnKTsKLQlTU1lOQygpOworCQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9MT1cpLCBsZW4pOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0hJR0gpLCAwKTsKKwkJU1NZTkMoKTsKIAotCS8qIFdhaXQgZm9yIGNvbXBlbGV0ZSAqLwotCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKLQkJY3B1X3JlbGF4KCk7CisJCS8qIEVuYWJsZSB0aGUgRE1BICovCisJCWRtYV9yZWcgPSAoZXBudW0gPDwgNCkgfCBETUFfRU5BIHwgSU5UX0VOQTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7CisJCVNTWU5DKCk7CiAKLQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCi0JYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCgxIDw8IGVwbnVtKTsKLQlTU1lOQygpOworCQkvKiBXYWl0IGZvciBjb21wZWxldGUgKi8KKwkJd2hpbGUgKCEoYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkgJiAoMSA8PCBlcG51bSkpKQorCQkJY3B1X3JlbGF4KCk7CiAKLQkvKiBSZXNldCBETUEgKi8KLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCAwKTsKLQlTU1lOQygpOwotI2Vsc2UKLQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMHgwMSkpCi0JCWluc3dfOCgodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsCi0JCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0JZWxzZQotCQlpbnN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIGRzdCwKLQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKLSNlbmRpZgorCQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCisJCWJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQoMSA8PCBlcG51bSk7CisJCVNTWU5DKCk7CiAKKwkJLyogUmVzZXQgRE1BICovCisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIDApOworCQlTU1lOQygpOworCX0gZWxzZSB7CisJCVNTWU5DKCk7CisJCS8qIFJlYWQgdGhlIGxhc3QgYnl0ZSBvZiBwYWNrZXQgd2l0aCBvZGQgc2l6ZSBmcm9tIGFkZHJlc3MgZmlmbyArIDQKKwkJICogdG8gdHJpZ2dlciAxIGJ5dGUgYWNjZXNzIHRvIEVQMCBGSUZPLgorCQkgKi8KKwkJaWYgKGxlbiA9PSAxKQorCQkJKmRzdCA9ICh1OClpbncoKHVuc2lnbmVkIGxvbmcpZmlmbyArIDQpOworCQllbHNlIHsKKwkJCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylkc3QgJiAweDAxKSkKKwkJCQlpbnN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgZHN0LCBsZW4gPj4gMSk7CisJCQllbHNlCisJCQkJaW5zdygodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsIGxlbiA+PiAxKTsKKworCQkJaWYgKGxlbiAmIDB4MDEpCisJCQkJKihkc3QgKyBsZW4gLSAxKSA9ICh1OClpbncoKHVuc2lnbmVkIGxvbmcpZmlmbyArIDQpOworCQl9CisJfQogCURCRyg0LCAiJWNYIGVwJWQgZmlmbyAlcCBjb3VudCAlZCBidWYgJXBcbiIsCiAJCQknUicsIGh3X2VwLT5lcG51bSwgZmlmbywgbGVuLCBkc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmggYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmgKaW5kZXggMTBiN2Q3NS4uYmQ5MzUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uaApAQCAtNjksNyArNjksNiBAQAogI2RlZmluZSBkdW1wX2ZpZm9fZGF0YShidWYsIGxlbikJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CRjUyeAogCiAjZGVmaW5lIFVTQl9ETUFfQkFTRQkJVVNCX0RNQV9JTlRFUlJVUFQKICNkZWZpbmUgVVNCX0RNQXhfQ1RSTAkJMHgwNApAQCAtNzksNyArNzgsNiBAQAogI2RlZmluZSBVU0JfRE1BeF9DT1VOVF9ISUdICTB4MTQKIAogI2RlZmluZSBVU0JfRE1BX1JFRyhlcCwgcmVnKQkoVVNCX0RNQV9CQVNFICsgMHgyMCAqIGVwICsgcmVnKQotI2VuZGlmCiAKIC8qIEFsbW9zdCAxIHNlY29uZCAqLwogI2RlZmluZSBUSU1FUl9ERUxBWQkoMSAqIEhaKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCmluZGV4IGVmMjMzMmEuLmE0NGE0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKQEAgLTExNTQsOCArMTE1NCwxMSBAQAogCXN0cnVjdCBtdXNiX2h3X2VwCSpod19lcCA9IE5VTEw7CiAJdTMyCQkJcngsIHR4OwogCWludAkJCWksIGluZGV4OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJY3BwaSA9IGNvbnRhaW5lcl9vZihtdXNiLT5kbWFfY29udHJvbGxlciwgc3RydWN0IGNwcGksIGNvbnRyb2xsZXIpOworCWlmIChjcHBpLT5pcnEpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAl0aWJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTEyODUsNiArMTI4OCw5IEBACiAJLyogd3JpdGUgdG8gQ1BQSSBFT0kgcmVnaXN0ZXIgdG8gcmUtZW5hYmxlIGludGVycnVwdHMgKi8KIAltdXNiX3dyaXRlbCh0aWJhc2UsIERBVklOQ0lfQ1BQSV9FT0lfUkVHLCAwKTsKIAorCWlmIChjcHBpLT5pcnEpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwppbmRleCBlMTZmZjYwLi42NjkxMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIm11c2JfY29yZS5oIgogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KLSNkZWZpbmUgR1BJT19uVkJVU19EUlYJCTE0NAorI2RlZmluZSBHUElPX25WQlVTX0RSVgkJMTYwCiAjZW5kaWYKIAogI2luY2x1ZGUgImRhdmluY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IDQ5ZjIzNDYuLjVlYjkzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKICNlbmRpZgogCXU4IHJlZzsKIAljaGFyICp0eXBlOwotCWNoYXIgYUluZm9bNzhdLCBhUmV2aXNpb25bMzJdLCBhRGF0ZVsxMl07CisJY2hhciBhSW5mb1s5MF0sIGFSZXZpc2lvblszMl0sIGFEYXRlWzEyXTsKIAl2b2lkIF9faW9tZW0JKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJaW50CQlzdGF0dXMgPSAwOwogCWludAkJaTsKQEAgLTE1MjEsNiArMTUyMSwxNCBAQAogCQkoZGV2Y3RsICYgTVVTQl9ERVZDVExfSE0pID8gImhvc3QiIDogInBlcmlwaGVyYWwiLAogCQltdXNiLT5pbnRfdXNiLCBtdXNiLT5pbnRfdHgsIG11c2ItPmludF9yeCk7CiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKKwlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikgfHwgaXNfcGVyaXBoZXJhbF9lbmFibGVkKG11c2IpKQorCQlpZiAoIW11c2ItPmdhZGdldF9kcml2ZXIpIHsKKwkJCURCRyg1LCAiTm8gZ2FkZ2V0IGRyaXZlciBsb2FkZWRcbiIpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisjZW5kaWYKKwogCS8qIHRoZSBjb3JlIGNhbiBpbnRlcnJ1cHQgdXMgZm9yIG11bHRpcGxlIHJlYXNvbnM7IGRvY3MgaGF2ZQogCSAqIGEgZ2VuZXJpYyBpbnRlcnJ1cHQgZmxvd2NoYXJ0IHRvIGZvbGxvdwogCSAqLwpAQCAtMjEzOSw3ICsyMTQ3LDcgQEAKIAlyZXR1cm4gbXVzYl9pbml0X2NvbnRyb2xsZXIoZGV2LCBpcnEsIGJhc2UpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBtdXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2V4aXQgbXVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbXVzYgkqbXVzYiA9IGRldl90b19tdXNiKCZwZGV2LT5kZXYpOwogCXZvaWQgX19pb21lbQkqY3RybF9iYXNlID0gbXVzYi0+Y3RybF9iYXNlOwpAQCAtMjIxNCw3ICsyMjIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG11c2JfZGV2X3BtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtdXNiX2Rldl9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBtdXNiX3N1c3BlbmQsCiAJLnJlc3VtZV9ub2lycQk9IG11c2JfcmVzdW1lX25vaXJxLAogfTsKQEAgLTIyMzEsNyArMjIzOSw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBtCQk9IE1VU0JfREVWX1BNX09QUywKIAl9LAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXVzYl9yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19leGl0X3AobXVzYl9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IG11c2Jfc2h1dGRvd24sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggYzQ5YjliYS4uY2JjZjE0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTMwOSw3ICszMDksNyBAQAogCQkJc2l6ZV90IHJlcXVlc3Rfc2l6ZTsKIAogCQkJLyogc2V0dXAgRE1BLCB0aGVuIHByb2dyYW0gZW5kcG9pbnQgQ1NSICovCi0JCQlyZXF1ZXN0X3NpemUgPSBtaW4ocmVxdWVzdC0+bGVuZ3RoLAorCQkJcmVxdWVzdF9zaXplID0gbWluX3Qoc2l6ZV90LCByZXF1ZXN0LT5sZW5ndGgsCiAJCQkJCQltdXNiX2VwLT5kbWEtPm1heF9sZW4pOwogCQkJaWYgKHJlcXVlc3Rfc2l6ZSA8IG11c2JfZXAtPnBhY2tldF9zeikKIAkJCQltdXNiX2VwLT5kbWEtPmRlc2lyZWRfbW9kZSA9IDA7CkBAIC0zMTksNyArMzE5LDcgQEAKIAkJCXVzZV9kbWEgPSB1c2VfZG1hICYmIGMtPmNoYW5uZWxfcHJvZ3JhbSgKIAkJCQkJbXVzYl9lcC0+ZG1hLCBtdXNiX2VwLT5wYWNrZXRfc3osCiAJCQkJCW11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlLAotCQkJCQlyZXF1ZXN0LT5kbWEsIHJlcXVlc3Rfc2l6ZSk7CisJCQkJCXJlcXVlc3QtPmRtYSArIHJlcXVlc3QtPmFjdHVhbCwgcmVxdWVzdF9zaXplKTsKIAkJCWlmICh1c2VfZG1hKSB7CiAJCQkJaWYgKG11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlID09IDApIHsKIAkJCQkJLyoKQEAgLTUxNSwxMiArNTE1LDEyIEBACiAJCQlpZiAoY3NyICYgTVVTQl9UWENTUl9GSUZPTk9URU1QVFkpCiAJCQkJcmV0dXJuOwogCi0JCQlpZiAoIW11c2JfZXAtPmRlc2MpIHsKKwkJCXJlcXVlc3QgPSBtdXNiX2VwLT5kZXNjID8gbmV4dF9yZXF1ZXN0KG11c2JfZXApIDogTlVMTDsKKwkJCWlmICghcmVxdWVzdCkgewogCQkJCURCRyg0LCAiJXMgaWRsZSBub3dcbiIsCiAJCQkJCW11c2JfZXAtPmVuZF9wb2ludC5uYW1lKTsKIAkJCQlyZXR1cm47Ci0JCQl9IGVsc2UKLQkJCQlyZXF1ZXN0ID0gbmV4dF9yZXF1ZXN0KG11c2JfZXApOworCQkJfQogCQl9CiAKIAkJdHhzdGF0ZShtdXNiLCB0b19tdXNiX3JlcXVlc3QocmVxdWVzdCkpOwpAQCAtNzQ2LDYgKzc0Niw4IEBACiAJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwbnVtKTsKIAogCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3QobXVzYl9lcCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm47CiAKIAljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOwogCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBtdXNiX2VwLT5kbWEgOiBOVUxMOwpAQCAtMTczMSw2ICsxNzMzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAogCQlvdGdfc2V0X3BlcmlwaGVyYWwobXVzYi0+eGNlaXYsICZtdXNiLT5nKTsKKwkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKIAkJbXVzYi0+aXNfYWN0aXZlID0gMTsKIAogCQkvKiBGSVhNRSB0aGlzIGlnbm9yZXMgdGhlIHNvZnRjb25uZWN0IGZsYWcuICBEcml2ZXJzIGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKaW5kZXggOGZiYTNmMS4uNTNkMDY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJCW11c2ItPmVwMF9zdGF0ZSA9IE1VU0JfRVAwX1NUQUdFX1NUQVRVU0lOOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlFUlIoIlNldHVwRW5kIGNhbWUgaW4gYSB3cm9uZyBlcDBzdGFnZSAlcyIsCisJCQlFUlIoIlNldHVwRW5kIGNhbWUgaW4gYSB3cm9uZyBlcDBzdGFnZSAlc1xuIiwKIAkJCSAgICBkZWNvZGVfZXAwc3RhZ2UobXVzYi0+ZXAwX3N0YXRlKSk7CiAJCX0KIAkJY3NyID0gbXVzYl9yZWFkdyhyZWdzLCBNVVNCX0NTUjApOwpAQCAtNzg3LDEyICs3ODcsMTggQEAKIAkJCQloYW5kbGVkID0gc2VydmljZV96ZXJvX2RhdGFfcmVxdWVzdCgKIAkJCQkJCW11c2IsICZzZXR1cCk7CiAKKwkJCQkvKgorCQkJCSAqIFdlJ3JlIGV4cGVjdGluZyBubyBkYXRhIGluIGFueSBjYXNlLCBzbworCQkJCSAqIGFsd2F5cyBzZXQgdGhlIERBVEFFTkQgYml0IC0tIGRvaW5nIHRoaXMKKwkJCQkgKiBoZXJlIGhlbHBzIGF2b2lkIFNldHVwRW5kIGludGVycnVwdCBjb21pbmcKKwkJCQkgKiBpbiB0aGUgaWRsZSBzdGFnZSB3aGVuIHdlJ3JlIHN0YWxsaW5nLi4uCisJCQkJICovCisJCQkJbXVzYi0+YWNrcGVuZCB8PSBNVVNCX0NTUjBfUF9EQVRBRU5EOworCiAJCQkJLyogc3RhdHVzIHN0YWdlIG1pZ2h0IGJlIGltbWVkaWF0ZSAqLwotCQkJCWlmIChoYW5kbGVkID4gMCkgewotCQkJCQltdXNiLT5hY2twZW5kIHw9IE1VU0JfQ1NSMF9QX0RBVEFFTkQ7CisJCQkJaWYgKGhhbmRsZWQgPiAwKQogCQkJCQltdXNiLT5lcDBfc3RhdGUgPQogCQkJCQkJTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47Ci0JCQkJfQogCQkJCWJyZWFrOwogCiAJCQkvKiBzZXF1ZW5jZSAjMSAoSU4gdG8gaG9zdCksIGluY2x1ZGVzIEdFVF9TVEFUVVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwppbmRleCBkNTQ0NjBhLi43OGEyMDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCkBAIC04NDMsNyArODQzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm90Z19kZXY7CiAKLXN0YXRpYyBpbnQgb3RnX2luaXQoc3RydWN0IGlzcDEzMDEgKmlzcCkKK3N0YXRpYyBpbnQgaXNwMTMwMV9vdGdfaW5pdChzdHJ1Y3QgaXNwMTMwMSAqaXNwKQogewogCXUzMiBsOwogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogc3RhdGljIGludCBpc3AxMzAxX290Z19lbmFibGUoc3RydWN0IGlzcDEzMDEgKmlzcCkKIHsKIAlwb3dlcl91cChpc3ApOwotCW90Z19pbml0KGlzcCk7CisJaXNwMTMwMV9vdGdfaW5pdChpc3ApOwogCiAJLyogTk9URTogIHNpbmNlIHdlIGRvbid0IGNoYW5nZSB0aGlzLCB0aGlzIHByb3ZpZGVzCiAJICogYSBmZXcgbW9yZSBpbnRlcnJ1cHRzIHRoYW4gYXJlIHN0cmljdGx5IG5lZWRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKaW5kZXggYmQ5ODgzZi4uMmJlOWYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCkBAIC0yNzYsMTYgKzI3NiwxNiBAQAogewogCXU4IGNoZWNrOwogCi0JaWYgKCh0d2w0MDMwX2kyY193cml0ZV91OChtb2R1bGUsIGRhdGEsIGFkZHJlc3MpID49IDApICYmCi0JICAgICh0d2w0MDMwX2kyY19yZWFkX3U4KG1vZHVsZSwgJmNoZWNrLCBhZGRyZXNzKSA+PSAwKSAmJgorCWlmICgodHdsX2kyY193cml0ZV91OChtb2R1bGUsIGRhdGEsIGFkZHJlc3MpID49IDApICYmCisJICAgICh0d2xfaTJjX3JlYWRfdTgobW9kdWxlLCAmY2hlY2ssIGFkZHJlc3MpID49IDApICYmCiAJCQkJCQkoY2hlY2sgPT0gZGF0YSkpCiAJCXJldHVybiAwOwogCWRldl9kYmcodHdsLT5kZXYsICJXcml0ZSVkWyVkLDB4JXhdIHdyb3RlICUwMnggYnV0IHJlYWQgJTAyeFxuIiwKIAkJCTEsIG1vZHVsZSwgYWRkcmVzcywgY2hlY2ssIGRhdGEpOwogCiAJLyogRmFpbGVkIG9uY2U6IFRyeSBhZ2FpbiAqLwotCWlmICgodHdsNDAzMF9pMmNfd3JpdGVfdTgobW9kdWxlLCBkYXRhLCBhZGRyZXNzKSA+PSAwKSAmJgotCSAgICAodHdsNDAzMF9pMmNfcmVhZF91OChtb2R1bGUsICZjaGVjaywgYWRkcmVzcykgPj0gMCkgJiYKKwlpZiAoKHR3bF9pMmNfd3JpdGVfdTgobW9kdWxlLCBkYXRhLCBhZGRyZXNzKSA+PSAwKSAmJgorCSAgICAodHdsX2kyY19yZWFkX3U4KG1vZHVsZSwgJmNoZWNrLCBhZGRyZXNzKSA+PSAwKSAmJgogCQkJCQkJKGNoZWNrID09IGRhdGEpKQogCQlyZXR1cm4gMDsKIAlkZXZfZGJnKHR3bC0+ZGV2LCAiV3JpdGUlZFslZCwweCV4XSB3cm90ZSAlMDJ4IGJ1dCByZWFkICUwMnhcbiIsCkBAIC0zMDMsNyArMzAzLDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1VTQiwgZGF0YSwgYWRkcmVzcyk7CisJcmV0ID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9VU0IsIGRhdGEsIGFkZHJlc3MpOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZGJnKHR3bC0+ZGV2LAogCQkJIlRXTDQwMzA6VVNCOldyaXRlWzB4JXhdIEVycm9yICVkXG4iLCBhZGRyZXNzLCByZXQpOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJdTggZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IHR3bDQwMzBfaTJjX3JlYWRfdTgobW9kdWxlLCAmZGF0YSwgYWRkcmVzcyk7CisJcmV0ID0gdHdsX2kyY19yZWFkX3U4KG1vZHVsZSwgJmRhdGEsIGFkZHJlc3MpOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gZGF0YTsKIAllbHNlCkBAIC00NjIsNyArNDYyLDcgQEAKIAkJICogU0xFRVAuIFdlIHdvcmsgYXJvdW5kIHRoaXMgYnkgY2xlYXJpbmcgdGhlIGJpdCBhZnRlciB1c3YzdjEKIAkJICogaXMgcmUtYWN0aXZhdGVkLiBUaGlzIGVuc3VyZXMgdGhhdCBWVVNCM1YxIGlzIHJlYWxseSBhY3RpdmUuCiAJCSAqLwotCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwKKwkJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwKIAkJCQkJCQlWVVNCX0RFRElDQVRFRDIpOwogCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiMXY1KTsKIAkJcHdyICY9IH5QSFlfUFdSX1BIWVBXRDsKQEAgLTUwNSw0NCArNTA1LDQ0IEBACiBzdGF0aWMgaW50IHR3bDQwMzBfdXNiX2xkb19pbml0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQogewogCS8qIEVuYWJsZSB3cml0aW5nIHRvIHBvd2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAweEMwLCBQUk9URUNUX0tFWSk7Ci0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAweDBDLCBQUk9URUNUX0tFWSk7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIDB4QzAsIFBST1RFQ1RfS0VZKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMHgwQywgUFJPVEVDVF9LRVkpOwogCiAJLyogcHV0IFZVU0IzVjEgTERPIGluIGFjdGl2ZSBzdGF0ZSAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCX0RFRElDQVRFRDIpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0JfREVESUNBVEVEMik7CiAKIAkvKiBpbnB1dCB0byBWVVNCM1YxIExETyBpcyBmcm9tIFZCQVQsIG5vdCBWQlVTICovCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4MTQsIFZVU0JfREVESUNBVEVEMSk7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMHgxNCwgVlVTQl9ERURJQ0FURUQxKTsKIAogCS8qIEluaXRpYWxpemUgMy4xViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9ERVZfR1JQKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCM1YxX0RFVl9HUlApOwogCiAJdHdsLT51c2IzdjEgPSByZWd1bGF0b3JfZ2V0KHR3bC0+ZGV2LCAidXNiM3YxIik7CiAJaWYgKElTX0VSUih0d2wtPnVzYjN2MSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IzVjFfVFlQRSk7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9UWVBFKTsKIAogCS8qIEluaXRpYWxpemUgMS41ViByZWd1bGF0b3IgKi8KLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWNV9ERVZfR1JQKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY1X0RFVl9HUlApOwogCiAJdHdsLT51c2IxdjUgPSByZWd1bGF0b3JfZ2V0KHR3bC0+ZGV2LCAidXNiMXY1Iik7CiAJaWYgKElTX0VSUih0d2wtPnVzYjF2NSkpCiAJCWdvdG8gZmFpbDE7CiAKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWNV9UWVBFKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY1X1RZUEUpOwogCiAJLyogSW5pdGlhbGl6ZSAxLjhWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY4X0RFVl9HUlApOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjhfREVWX0dSUCk7CiAKIAl0d2wtPnVzYjF2OCA9IHJlZ3VsYXRvcl9nZXQodHdsLT5kZXYsICJ1c2IxdjgiKTsKIAlpZiAoSVNfRVJSKHR3bC0+dXNiMXY4KSkKIAkJZ290byBmYWlsMjsKIAotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY4X1RZUEUpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjhfVFlQRSk7CiAKIAkvKiBkaXNhYmxlIGFjY2VzcyB0byBwb3dlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUFJPVEVDVF9LRVkpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAwLCBQUk9URUNUX0tFWSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBmOTk0OThmLi4yMTZmMTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlICJmdGRpX3Npby5oIgorI2luY2x1ZGUgImZ0ZGlfc2lvX2lkcy5oIgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA0NTg2YTI0Li5iMGUwZDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMSw3ICsxLDEwIEBACiAvKgotICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0KKyAqIERyaXZlciBkZWZpbml0aW9ucyBmb3IgdGhlIEZUREkgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBDb252ZXJ0ZXIgLQogICoga25vd24gYXMgRlRESV9TSU8gKFNlcmlhbCBJbnB1dC9PdXRwdXQgYXBwbGljYXRpb24gb2YgdGhlIGNoaXBzZXQpCiAgKgorICogRm9yIFVTQiB2ZW5kb3IvcHJvZHVjdCBJRHMgKFZJRC9QSUQpLCBwbGVhc2Ugc2VlIGZ0ZGlfc2lvX2lkcy5oCisgKgorICoKICAqIFRoZSBleGFtcGxlIEkgaGF2ZSBpcyBrbm93biBhcyB0aGUgVVNDLTEwMDAgd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20KICAqIGh0dHA6Ly93d3cuZHNlLmNvLm56IC0gY2F0IG5vIFhINDIxNCBJdCBsb29rcyBzaW1pbGFyIHRvIHRoaXM6CiAgKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCkBAIC0xNyw4ODEgKzIwLDggQEAKICAqIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSBmb3JtZXJseSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLSB3cm90ZSB0aGUKICAqIEZURElfU0lPIGltcGxlbWVudGF0aW9uLgogICoKLSAqIFBoaWxpcHAgR8O8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcwotICogZnJvbSBSdWRvbGYgR3VnbGVyCi0gKgogICovCiAKLSNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggICovCi0jZGVmaW5lIEZURElfOFUyMzJBTV9QSUQgMHg2MDAxIC8qIFNpbWlsYXIgZGV2aWNlIHRvIFNJTyBhYm92ZSAqLwotI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCi0jZGVmaW5lIEZURElfOFUyMjMyQ19QSUQgMHg2MDEwIC8qIER1YWwgY2hhbm5lbCBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLwotI2RlZmluZSBGVERJXzQyMzJIX1BJRCAweDYwMTEgLyogUXVhZCBjaGFubmVsIGhpLXNwZWVkIGRldmljZSAqLwotI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLwotI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9VU0JYXzcwN19QSUQgMHhGODU3CS8qIEFEU1RlY2ggSVIgQmxhc3RlciBVU0JYLTcwNyAqLwotCi0vKiBMYXJzZW4gYW5kIEJydXNnYWFyZCBBbHRpVHJhY2svVVNCdHJhY2sgICovCi0jZGVmaW5lIExBUlNFTkJSVVNHQUFSRF9WSUQJCTB4MEZEOAotI2RlZmluZSBMQl9BTFRJVFJBQ0tfUElECQkweDAwMDEKLQotLyogd3d3LmNhbnVzYi5jb20gTGF3aWNlbCBDQU5VU0IgZGV2aWNlICovCi0jZGVmaW5lIEZURElfQ0FOVVNCX1BJRCAweEZGQTggLyogUHJvZHVjdCBJZCAqLwotCi0vKiBBbHBoYU1pY3JvIENvbXBvbmVudHMgQU1DLTIzMlVTQjAxIGRldmljZSAqLwotI2RlZmluZSBGVERJX0FNQzIzMl9QSUQgMHhGRjAwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogd3d3LmNhbmRhcHRlci5jb20gRXdlcnQgRW5lcmd5IFN5c3RlbXMgQ0FOZGFwdGVyIGRldmljZSAqLwotI2RlZmluZSBGVERJX0NBTkRBUFRFUl9QSUQgMHg5RjgwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogU0NTIEhGIFJhZGlvIE1vZGVtcyBQSUQncyAoaHR0cDovL3d3dy5zY3MtcHRjLmNvbSkgKi8KLS8qIHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzBfUElEIDB4RDAxMCAgICAvKiBTQ1MgUFRDLUlJdXNiICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8xX1BJRCAweEQwMTEgICAgLyogU0NTIFRyYWNrZXIgLyBEU1AgVE5DICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8yX1BJRCAweEQwMTIKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzNfUElEIDB4RDAxMwotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNF9QSUQgMHhEMDE0Ci0jZGVmaW5lIEZURElfU0NTX0RFVklDRV81X1BJRCAweEQwMTUKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzZfUElEIDB4RDAxNgotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfN19QSUQgMHhEMDE3Ci0KLS8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UgKGh0dHA6Ly93d3cuYWN0LXNvbHV0aW9ucy5jb20vSG9tZVByby5odG0pICovCi0jZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAotCi0KLS8qIHd3dy5zdGFydGluZy1wb2ludC1zeXN0ZW1zLmNvbSDCtUNoYW1lbGVvbiBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9NSUNST19DSEFNRUxFT05fUElECTB4Q0FBMAkvKiBQcm9kdWN0IElkICovCi0KLS8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLwotI2RlZmluZSBGVERJX0lSVFJBTlNfUElEIDB4RkM2MCAvKiBQcm9kdWN0IElkICovCi0KLQotLyogd3d3LnRob3VnaHR0ZWNobm9sb2d5LmNvbS8gVFQtVVNCIHByb3ZpZGUgd2l0aCBwcm9jb21wIHVzZSBmdGRpX3NpbyAqLwotI2RlZmluZSBGVERJX1RUVVNCX1BJRCAweEZGMjAgLyogUHJvZHVjdCBJZCAqLwotCi0vKiBpUGx1cyBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9JUExVUzJfUElEIDB4RDA3MSAvKiBQcm9kdWN0IElkICovCi0KLS8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KLSNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAotCi0vKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLwotI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAotI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5Ci0jZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCi0jZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKLQotLyogU3Byb2cgSUkgKEFuZHJldyBDcm9zbGFuZCdzIFNwcm9nSUkgRENDIGludGVyZmFjZSkgKi8KLSNkZWZpbmUgRlRESV9TUFJPR19JSQkJMHhGMEM4Ci0KLS8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCi0vKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLwotI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzU0N19QSUQgMHhGQzBBCS8qIDU0NzogVHdvIGxpbmUgRGlzcGxheSAqLwotI2RlZmluZSBGVERJX1hGXzYzM19QSUQgMHhGQzBCCS8qIDYzMzogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSB3aXRoIEtleXMgKi8KLSNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82MzVfUElEIDB4RkMwRAkvKiA2MzU6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82NDBfUElEIDB4RkMwRQkvKiA2NDA6IFR3byBsaW5lIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KLQotLyogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZSBmb3IgdGhlaXIgMU1iICovCi0vKiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZCBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAqLwotLyogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9WTkhDUENVU0JfRF9QSUQgMHhmZTM4IC8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFBDREogdXNlIGZ0ZGkgYmFzZWQgZGotY29udHJvbGxlcnMuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBmb3IgdGhlaXIgREFDLTIgZGV2aWNlCi0gKiBodHRwOi8vd3d3LnBjZGpoYXJkd2FyZS5jb20vREFDMi5hc3AgKFBJRCBzZW50IGJ5IFdvdXRlciBQYWVzZW4pCi0gKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwotI2RlZmluZSBGVERJX1BDREpfREFDMl9QSUQgMHhGQTg4Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAotICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCi0gKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLSNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KLQotLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+Ci0gKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCi0jZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBGVERJIFJhbmdlCi0gKiBBbnl0aGluZyBpbiB0aGlzIHJhbmdlIHdpbGwgdXNlIGFuIEZUMjMyUkwuCi0gKi8KLSNkZWZpbmUgTVRYT1JCX1ZJRAkJCTB4MUIzRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAwX1BJRAkweDAxMDAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMV9QSUQJMHgwMTAxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDJfUElECTB4MDEwMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAzX1BJRAkweDAxMDMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNF9QSUQJMHgwMTA0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDVfUElECTB4MDEwNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA2X1BJRAkweDAxMDYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwN19QSUQJMHgwMTA3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDhfUElECTB4MDEwOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA5X1BJRAkweDAxMDkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQV9QSUQJMHgwMTBBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEJfUElECTB4MDEwQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBDX1BJRAkweDAxMEMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRF9QSUQJMHgwMTBECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEVfUElECTB4MDEwRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBGX1BJRAkweDAxMEYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMF9QSUQJMHgwMTEwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTFfUElECTB4MDExMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEyX1BJRAkweDAxMTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExM19QSUQJMHgwMTEzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTRfUElECTB4MDExNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE1X1BJRAkweDAxMTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNl9QSUQJMHgwMTE2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTdfUElECTB4MDExNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE4X1BJRAkweDAxMTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOV9QSUQJMHgwMTE5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUFfUElECTB4MDExQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFCX1BJRAkweDAxMUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQ19QSUQJMHgwMTFDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMURfUElECTB4MDExRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFFX1BJRAkweDAxMUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRl9QSUQJMHgwMTFGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjBfUElECTB4MDEyMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIxX1BJRAkweDAxMjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMl9QSUQJMHgwMTIyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjNfUElECTB4MDEyMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI0X1BJRAkweDAxMjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNV9QSUQJMHgwMTI1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjZfUElECTB4MDEyNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI3X1BJRAkweDAxMjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyOF9QSUQJMHgwMTI4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjlfUElECTB4MDEyOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJBX1BJRAkweDAxMkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQl9QSUQJMHgwMTJCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkNfUElECTB4MDEyQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJEX1BJRAkweDAxMkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRV9QSUQJMHgwMTJFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkZfUElECTB4MDEyRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMwX1BJRAkweDAxMzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMV9QSUQJMHgwMTMxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzJfUElECTB4MDEzMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMzX1BJRAkweDAxMzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNF9QSUQJMHgwMTM0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzVfUElECTB4MDEzNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM2X1BJRAkweDAxMzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzN19QSUQJMHgwMTM3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzhfUElECTB4MDEzOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM5X1BJRAkweDAxMzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQV9QSUQJMHgwMTNBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0JfUElECTB4MDEzQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNDX1BJRAkweDAxM0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRF9QSUQJMHgwMTNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0VfUElECTB4MDEzRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNGX1BJRAkweDAxM0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0MF9QSUQJMHgwMTQwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDFfUElECTB4MDE0MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQyX1BJRAkweDAxNDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0M19QSUQJMHgwMTQzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDRfUElECTB4MDE0NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ1X1BJRAkweDAxNDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Nl9QSUQJMHgwMTQ2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDdfUElECTB4MDE0NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ4X1BJRAkweDAxNDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OV9QSUQJMHgwMTQ5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEFfUElECTB4MDE0QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRCX1BJRAkweDAxNEIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Q19QSUQJMHgwMTRDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNERfUElECTB4MDE0RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRFX1BJRAkweDAxNEUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Rl9QSUQJMHgwMTRGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTBfUElECTB4MDE1MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUxX1BJRAkweDAxNTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ml9QSUQJMHgwMTUyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTNfUElECTB4MDE1MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU0X1BJRAkweDAxNTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NV9QSUQJMHgwMTU1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTZfUElECTB4MDE1NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU3X1BJRAkweDAxNTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1OF9QSUQJMHgwMTU4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTlfUElECTB4MDE1OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVBX1BJRAkweDAxNUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Ql9QSUQJMHgwMTVCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUNfUElECTB4MDE1QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVEX1BJRAkweDAxNUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RV9QSUQJMHgwMTVFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUZfUElECTB4MDE1RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYwX1BJRAkweDAxNjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MV9QSUQJMHgwMTYxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjJfUElECTB4MDE2MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYzX1BJRAkweDAxNjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2NF9QSUQJMHgwMTY0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjVfUElECTB4MDE2NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY2X1BJRAkweDAxNjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2N19QSUQJMHgwMTY3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjhfUElECTB4MDE2OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY5X1BJRAkweDAxNjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2QV9QSUQJMHgwMTZBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkJfUElECTB4MDE2QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZDX1BJRAkweDAxNkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2RF9QSUQJMHgwMTZECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkVfUElECTB4MDE2RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZGX1BJRAkweDAxNkYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3MF9QSUQJMHgwMTcwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzFfUElECTB4MDE3MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcyX1BJRAkweDAxNzIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3M19QSUQJMHgwMTczCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzRfUElECTB4MDE3NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc1X1BJRAkweDAxNzUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Nl9QSUQJMHgwMTc2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzdfUElECTB4MDE3NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc4X1BJRAkweDAxNzgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OV9QSUQJMHgwMTc5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0FfUElECTB4MDE3QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdCX1BJRAkweDAxN0IKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Q19QSUQJMHgwMTdDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0RfUElECTB4MDE3RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdFX1BJRAkweDAxN0UKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Rl9QSUQJMHgwMTdGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODBfUElECTB4MDE4MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgxX1BJRAkweDAxODEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ml9QSUQJMHgwMTgyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODNfUElECTB4MDE4MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg0X1BJRAkweDAxODQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NV9QSUQJMHgwMTg1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODZfUElECTB4MDE4NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg3X1BJRAkweDAxODcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4OF9QSUQJMHgwMTg4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODlfUElECTB4MDE4OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThBX1BJRAkweDAxOEEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Ql9QSUQJMHgwMThCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOENfUElECTB4MDE4QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThEX1BJRAkweDAxOEQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RV9QSUQJMHgwMThFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEZfUElECTB4MDE4RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkwX1BJRAkweDAxOTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MV9QSUQJMHgwMTkxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTJfUElECTB4MDE5MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkzX1BJRAkweDAxOTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5NF9QSUQJMHgwMTk0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTVfUElECTB4MDE5NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk2X1BJRAkweDAxOTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5N19QSUQJMHgwMTk3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOThfUElECTB4MDE5OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk5X1BJRAkweDAxOTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5QV9QSUQJMHgwMTlBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUJfUElECTB4MDE5QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlDX1BJRAkweDAxOUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5RF9QSUQJMHgwMTlECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUVfUElECTB4MDE5RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlGX1BJRAkweDAxOUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMF9QSUQJMHgwMUEwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTFfUElECTB4MDFBMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEyX1BJRAkweDAxQTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBM19QSUQJMHgwMUEzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTRfUElECTB4MDFBNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE1X1BJRAkweDAxQTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNl9QSUQJMHgwMUE2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTdfUElECTB4MDFBNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE4X1BJRAkweDAxQTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOV9QSUQJMHgwMUE5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUFfUElECTB4MDFBQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFCX1BJRAkweDAxQUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQ19QSUQJMHgwMUFDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQURfUElECTB4MDFBRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFFX1BJRAkweDAxQUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRl9QSUQJMHgwMUFGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjBfUElECTB4MDFCMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIxX1BJRAkweDAxQjEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMl9QSUQJMHgwMUIyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjNfUElECTB4MDFCMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI0X1BJRAkweDAxQjQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNV9QSUQJMHgwMUI1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjZfUElECTB4MDFCNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI3X1BJRAkweDAxQjcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCOF9QSUQJMHgwMUI4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjlfUElECTB4MDFCOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJBX1BJRAkweDAxQkEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQl9QSUQJMHgwMUJCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkNfUElECTB4MDFCQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJEX1BJRAkweDAxQkQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRV9QSUQJMHgwMUJFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkZfUElECTB4MDFCRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMwX1BJRAkweDAxQzAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMV9QSUQJMHgwMUMxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzJfUElECTB4MDFDMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMzX1BJRAkweDAxQzMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNF9QSUQJMHgwMUM0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzVfUElECTB4MDFDNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM2X1BJRAkweDAxQzYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDN19QSUQJMHgwMUM3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzhfUElECTB4MDFDOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM5X1BJRAkweDAxQzkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQV9QSUQJMHgwMUNBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0JfUElECTB4MDFDQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNDX1BJRAkweDAxQ0MKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRF9QSUQJMHgwMUNECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0VfUElECTB4MDFDRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNGX1BJRAkweDAxQ0YKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMF9QSUQJMHgwMUQwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDFfUElECTB4MDFEMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQyX1BJRAkweDAxRDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEM19QSUQJMHgwMUQzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDRfUElECTB4MDFENAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ1X1BJRAkweDAxRDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENl9QSUQJMHgwMUQ2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDdfUElECTB4MDFENwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ4X1BJRAkweDAxRDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOV9QSUQJMHgwMUQ5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREFfUElECTB4MDFEQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURCX1BJRAkweDAxREIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQ19QSUQJMHgwMURDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRERfUElECTB4MDFERAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURFX1BJRAkweDAxREUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERl9QSUQJMHgwMURGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTBfUElECTB4MDFFMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUxX1BJRAkweDAxRTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMl9QSUQJMHgwMUUyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTNfUElECTB4MDFFMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU0X1BJRAkweDAxRTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNV9QSUQJMHgwMUU1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTZfUElECTB4MDFFNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU3X1BJRAkweDAxRTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFOF9QSUQJMHgwMUU4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTlfUElECTB4MDFFOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVBX1BJRAkweDAxRUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQl9QSUQJMHgwMUVCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUNfUElECTB4MDFFQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVEX1BJRAkweDAxRUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRV9QSUQJMHgwMUVFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUZfUElECTB4MDFFRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYwX1BJRAkweDAxRjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMV9QSUQJMHgwMUYxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjJfUElECTB4MDFGMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYzX1BJRAkweDAxRjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNF9QSUQJMHgwMUY0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjVfUElECTB4MDFGNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY2X1BJRAkweDAxRjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGN19QSUQJMHgwMUY3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjhfUElECTB4MDFGOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY5X1BJRAkweDAxRjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQV9QSUQJMHgwMUZBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkJfUElECTB4MDFGQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZDX1BJRAkweDAxRkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRF9QSUQJMHgwMUZECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkVfUElECTB4MDFGRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZGX1BJRAkweDAxRkYKLQotCi0KLS8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCi0vKiBEZXZlbG9wZWQgZm9yIEludGVyYmlvbWV0cmljcyBieSBSdWRvbGYgR3VnbGVyICovCi0jZGVmaW5lIElOVEVSQklPTUVUUklDU19WSUQgICAgICAgICAgICAgIDB4MTIwOQotI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKLSNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQgMHgxMDA2Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgUGVybGUgU3lzdGVtcwotICogVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycwotICovCi0jZGVmaW5lIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCAweEYwQzAJLyogUGVybGUgVWx0cmFQb3J0IFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KLSAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAotICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCi0gKi8KLSNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIxMDZfUElECTB4OTAyMAkvKiBTZWFMSU5LKzQyMiAoMjEwNikgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdHdvIEtPQklMIGNoaXBjYXJkIHRlcm1pbmFscy4KLSAqLwotI2RlZmluZSBLT0JJTF9WSUQJCTB4MGQ0NgkvKiBLT0JJTCBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgS09CSUxfQ09OVl9CMV9QSUQJMHgyMDIwCS8qIEtPQklMIEtvbnZlcnRlciBmb3IgQjEgKi8KLSNkZWZpbmUgS09CSUxfQ09OVl9LQUFOX1BJRAkweDIwMjEJLyogS09CSUxfS29udmVydGVyIGZvciBLQUFOICovCi0KLS8qCi0gKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgotICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAotCi0vKgotICogQVNLLmZyIGRldmljZXMKLSAqLwotI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KLQotLyoKLSAqIEZUREkgVVNCIFVBUlQgY2hpcHMgdXNlZCBpbiBjb25zdHJ1Y3Rpb24gcHJvamVjdHMgZnJvbSB0aGUKLSAqIEVsZWt0b3IgRWxlY3Ryb25pY3MgbWFnYXppbmUgKGh0dHA6Ly9lbGVrdG9yLWVsZWN0cm9uaWNzLmNvLnVrKQotICovCi0jZGVmaW5lIEVMRUtUT1JfVklECQkweDBDN0QKLSNkZWZpbmUgRUxFS1RPUl9GVDMyM1JfUElECTB4MDAwNQkvKiBSRklELVJlYWRlciwgaXNzdWUgMDktMjAwNiAqLwotCi0vKgotICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCi0gKi8KLSNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyCi0KLS8qCi0gKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKLSAqLwotI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5zY2VpdmVyICovCi0KLS8qIFVTQi1VSVJUIC0gQW4gaW5mcmFyZWQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIHVzaW5nIHRoZSA4VTIzMkFNIGNoaXAgKi8KLS8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLwotI2RlZmluZSBGVERJX1VTQl9VSVJUX1BJRAkweEY4NTAJLyogUHJvZHVjdCBJZCAqLwotCi0vKiBUTkMtWCBVU0ItdG8tcGFja2V0LXJhZGlvIGFkYXB0ZXIsIHZlcnNpb25zIHByaW9yIHRvIDMuMCAoRExQIG1vZHVsZSkgKi8KLQotI2RlZmluZSBGVERJX1ROQ19YX1BJRAkJMHhFQkUwCi0KLS8qCi0gKiBFTFYgVVNCIGRldmljZXMgc3VibWl0dGVkIGJ5IENocmlzdGlhbiBBYnQgb2YgRUxWICh3d3cuZWx2LmRlKS4KLSAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgotICoKLSAqIFRoZSBwcmV2aW91c2x5IGluY2x1ZGVkIFBJRCBmb3IgdGhlIFVPIDEwMCBtb2R1bGUgd2FzIGluY29ycmVjdC4KLSAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCi0gKgotICogQXJtaW4gTGFldWdlciBvcmlnaW5hbGx5IHNlbnQgdGhlIFBJRCBmb3IgdGhlIFVNIDEwMCBtb2R1bGUuCi0gKi8KLSNkZWZpbmUgRlRESV9SMjAwMEtVX1RSVUVfUk5HCTB4RkI4MCAgLyogUjIwMDBLVSBUUlVFIFJORyAqLwotI2RlZmluZSBGVERJX0VMVl9VUjEwMF9QSUQJMHhGQjU4CS8qIFVTQi1SUzIzMi1VbXNldHplciAoVVIgMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VTTEwMF9QSUQJMHhGQjVBCS8qIFVTQi1Nb2R1bCBVTSAxMDAgKi8KLSNkZWZpbmUgRlRESV9FTFZfVU8xMDBfUElECTB4RkI1QgkvKiBVU0ItTW9kdWwgVU8gMTAwICovCi0jZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KLS8qIEFkZGl0aW9uYWwgRUxWIFBJRHMgdGhhdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBGVERJIEQyWFggZHJpdmVycyBvbgotICogTVMgV2luZG93cywgcmF0aGVyIHRoYW4gdGhlIEZUREkgVmlydHVhbCBDb20gUG9ydCBkcml2ZXJzLgotICogTWF5YmUgdGhlc2Ugd2lsbCBiZSBlYXNpZXIgdG8gdXNlIHdpdGggdGhlIGxpYmZ0ZGkvbGlidXNiIHVzZXItc3BhY2UKLSAqIGRyaXZlcnMsIG9yIHBvc3NpYmx5IHRoZSBDb21lZGkgZHJpdmVycyBpbiBzb21lIGNhc2VzLiAqLwotI2RlZmluZSBGVERJX0VMVl9DTEk3MDAwX1BJRAkweEZCNTkJLyogQ29tcHV0ZXItTGlnaHQtSW50ZXJmYWNlIChDTEkgNzAwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLwotI2RlZmluZSBGVERJX0VMVl9URk0xMDBfUElECTB4RkI1RAkvKiBUZW1wZXJhcnR1ci1GZXVjaHRlIE1lc3NnZXJhZXQgKFRGTSAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1VERjc3X1BJRAkweEZCNUUJLyogVVNCIERDRiBGdW5rdXJoIChVREYgNzcpICovCi0jZGVmaW5lIEZURElfRUxWX1VJTzg4X1BJRAkweEZCNUYJLyogVVNCLUkvTyBJbnRlcmZhY2UgKFVJTyA4OCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVUFEOF9QSUQJMHhGMDY4CS8qIFVTQi1BRC1XYW5kbGVyIChVQUQgOCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVURBN19QSUQJMHhGMDY5CS8qIFVTQi1EQS1XYW5kbGVyIChVREEgNykgKi8KLSNkZWZpbmUgRlRESV9FTFZfVVNJMl9QSUQJMHhGMDZBCS8qIFVTQi1TY2hyaXR0bW90b3Jlbi1JbnRlcmZhY2UgKFVTSSAyKSAqLwotI2RlZmluZSBGVERJX0VMVl9UMTEwMF9QSUQJMHhGMDZCCS8qIFRoZXJtb21ldGVyIChUIDExMDApICovCi0jZGVmaW5lIEZURElfRUxWX1BDRDIwMF9QSUQJMHhGMDZDCS8qIFBDLURhdGVubG9nZ2VyIChQQ0QgMjAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VTEEyMDBfUElECTB4RjA2RAkvKiBVU0ItTENELUFuc3RldWVydW5nIChVTEEgMjAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9GSFoxMDAwUENfUElECTB4RjA2RgkvKiBGSFogMTAwMCBQQyAqLwotI2RlZmluZSBGVERJX0VMVl9DU0k4X1BJRAkweEUwRjAJLyogQ29tcHV0ZXItU2NoYWx0LUludGVyZmFjZSAoQ1NJIDgpICovCi0jZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfUENLMTAwX1BJRAkweEUwRjIJLyogUEMtS2FiZWx0ZXN0ZXIgKFBDSyAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1JGUDUwMF9QSUQJMHhFMEYzCS8qIEhGLUxlaXN0dW5nc21lc3NlciAoUkZQIDUwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCi0jZGVmaW5lIEZURElfRUxWX1dTMzAwUENfUElECTB4RTBGNgkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyAzMDAgUEMpICovCi0jZGVmaW5lIEZURElfRUxWX0ZIWjEzMDBQQ19QSUQJMHhFMEU4CS8qIEZIWiAxMzAwIFBDICovCi0jZGVmaW5lIEZURElfRUxWX1dTNTAwX1BJRAkweEUwRTkJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgNTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9IUzQ4NV9QSUQJMHhFMEVBCS8qIFVTQiB0byBSUy00ODUgYWRhcHRlciAqLwotI2RlZmluZSBGVERJX0VMVl9FTTEwMTBQQ19QSUQJMHhFMEVGCS8qIEVuZ2VyeSBtb25pdG9yIEVNIDEwMTAgUEMgKi8KLSNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcwotICovCi0jZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLwotI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKLSAqLwotI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KLS8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KLS8qIEFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoQXVzKSBYSDY0NTEgKi8KLS8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCBoYXJkd2FyZSB2ZXJzaW9uIDEgKi8KLSNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCi0KLS8qIGFuIGluZnJhcmVkIHJlY2VpdmVyIGZvciB1c2VyIGFjY2VzcyBjb250cm9sIHdpdGggSVIgdGFncyAqLwotI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEFydGVtaXMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCi0gKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmFydGVtaXNjY2QuY28udWsvCi0gKi8KLSNkZWZpbmUgRlRESV9BUlRFTUlTX1BJRAkweERGMjgJLyogQWxsIEFydGVtaXMgQ2FtZXJhcyAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEFUSUsgSW5zdHJ1bWVudHMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCi0gKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmF0aWstaW5zdHJ1bWVudHMuY29tLwotICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNl9QSUQJMHhERjMwCS8qIEFUSUsgQVRLLTE2IEdyYXlzY2FsZSBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2Q19QSUQJMHhERjMyCS8qIEFUSUsgQVRLLTE2QyBDb2xvdXIgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkhSX1BJRAkweERGMzEJLyogQVRJSyBBVEstMTZIUiBHcmF5c2NhbGUgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkhSQ19QSUQJMHhERjMzCS8qIEFUSUsgQVRLLTE2SFJDIENvbG91ciBDYW1lcmEgKi8KLSNkZWZpbmUgRlRESV9BVElLX0FUSzE2SUNfUElEICAgMHhERjM1ICAvKiBBVElLIEFUSy0xNklDIEdyYXlzY2FsZSBDYW1lcmEgKi8KLQotLyoKLSAqIFByb3RlZ28gcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMQkweEZDNzAJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMwkweEZDNzIJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfNAkweEZDNzMJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLwotCi0vKgotICogR3VkZSBBbmFsb2ctIHVuZCBEaWdpdGFsc3lzdGVtZSBHbWJICi0gKi8KLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MDhfUElEICAgIDB4RTgwOAotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOV9QSUQgICAgMHhFODA5Ci0jZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEJfUElEICAgIDB4RTgwQgotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQ19QSUQgICAgMHhFODBDCi0jZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEVfUElEICAgIDB4RTgwRQotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRl9QSUQgICAgMHhFODBGCi0jZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCi0jZGVmaW5lIEZURElfR1VERUFEU19FODg5X1BJRCAgICAweEU4ODkgIC8qIFVTQiBSUy0yMzIgT3B0b0JyaWRnZSAqLwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4QV9QSUQgICAgMHhFODhBCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OENfUElEICAgIDB4RTg4QwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RF9QSUQgICAgMHhFODhECi0jZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OEZfUElEICAgIDB4RTg4RgotCi0vKgotICogTGlueCBUZWNobm9sb2dpZXMgcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCi0jZGVmaW5lIExJTlhfTUFTVEVSREVWRUwyX1BJRCAgIDB4RjQ0OSAgIC8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8yX1BJRCAgIDB4RjQ0QyAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotCi0vKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0gdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyICovCi0vKiB1bml0IGZvciBQSUMxNidzL1BJQzE4J3MgKi8KLSNkZWZpbmUgRlRESV9DQ1NJQ0RVMjBfMF9QSUQgICAgMHhGOUQwCi0jZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMQotI2RlZmluZSBGVERJX0NDU01BQ0hYXzJfUElEICAgICAweEY5RDIKLSNkZWZpbmUgRlRESV9DQ1NMT0FEX05fR09fM19QSUQgMHhGOUQzCi0jZGVmaW5lIEZURElfQ0NTSUNEVTY0XzRfUElEICAgIDB4RjlENAotI2RlZmluZSBGVERJX0NDU1BSSU1FOF81X1BJRCAgICAweEY5RDUKLQotLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KLSNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAotCi0vKgotICogSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zIChodHRwOi8vd3d3LmludHJlcGlkY3MuY29tLykgVmFsdWVDQU4gYW5kIE5lb1ZJCi0gKi8KLSNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKLSNkZWZpbmUgSU5UUkVQSURfVkFMVUVDQU5fUElECTB4MDYwMQotI2RlZmluZSBJTlRSRVBJRF9ORU9WSV9QSUQJMHgwNzAxCi0KLS8qCi0gKiBGYWxjb20gV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgR21iSAotICovCi0jZGVmaW5lIEZBTENPTV9WSUQJCTB4MEY5NAkvKiBWZW5kb3IgSWQgKi8KLSNkZWZpbmUgRkFMQ09NX1RXSVNUX1BJRAkweDAwMDEJLyogRmFsY29tIFR3aXN0IFVTQiBHUFJTIG1vZGVtICovCi0jZGVmaW5lIEZBTENPTV9TQU1CQV9QSUQJMHgwMDA1CS8qIEZhbGNvbSBTYW1iYSBVU0IgR1BSUyBtb2RlbSAqLwotCi0vKgotICogU1VVTlRPIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9TVVVOVE9fU1BPUlRTX1BJRAkweEY2ODAJLyogU3V1bnRvIFNwb3J0cyBpbnN0cnVtZW50ICovCi0KLS8qCi0gKiBPY2VhbmljIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgRlRESV9PQ0VBTklDX1BJRAkweEY0NjAgIC8qIE9jZWFuaWMgZGl2ZSBpbnN0cnVtZW50ICovCi0KLS8qCi0gKiBUVGkgKFRodXJsYnkgVGhhbmRhciBJbnN0cnVtZW50cykKLSAqLwotI2RlZmluZSBUVElfVklECQkJMHgxMDNFCS8qIFZlbmRvciBJZCAqLwotI2RlZmluZSBUVElfUUwzNTVQX1BJRAkJMHgwM0U4CS8qIFRUaSBRTDM1NVAgcG93ZXIgc3VwcGx5ICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgQiZCIEVsZWN0cm9uaWNzIHByb2R1Y3RzLgotICovCi0jZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgQkFOREJfVVNPVEw0X1BJRAkweEFDMDEJLyogVVNPVEw0IElzb2xhdGVkIFJTLTQ4NSBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLwotI2RlZmluZSBCQU5EQl9VU085TUwyX1BJRAkweEFDMDMJLyogVVNPOU1MMiBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTT1BUTDRfUElECTB4QUMxMQotI2RlZmluZSBCQU5EQl9VU1BUTDRfUElECTB4QUMxMgotI2RlZmluZSBCQU5EQl9VU085TUwyRFJfMl9QSUQJMHhBQzE2Ci0jZGVmaW5lIEJBTkRCX1VTTzlNTDJEUl9QSUQJMHhBQzE3Ci0jZGVmaW5lIEJBTkRCX1VTT1BUTDREUjJfUElECTB4QUMxOAkvKiBVU09QVEw0Ui0yIDItcG9ydCBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTT1BUTDREUl9QSUQJMHhBQzE5Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzJXX1BJRAkweEFDMjUKLSNkZWZpbmUgQkFOREJfNDg1VVNCOUZfNFdfUElECTB4QUMyNgotI2RlZmluZSBCQU5EQl8yMzJVU0I5TV9QSUQJMHhBQzI3Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzJXX1BJRAkweEFDMzMKLSNkZWZpbmUgQkFOREJfNDg1VVNCVEJfNFdfUElECTB4QUMzNAotI2RlZmluZSBCQU5EQl9UVEw1VVNCOU1fUElECTB4QUM0OQotI2RlZmluZSBCQU5EQl9UVEwzVVNCOU1fUElECTB4QUM1MAotI2RlZmluZSBCQU5EQl9aWl9QUk9HMV9VU0JfUElECTB4QkEwMgotCi0vKgotICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKQotICogQ0FOIGZpZWxkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRlZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCi0gKiBJYW4gQWJib3R0IGNoYW5nZWQgdGhlIG1hY3JvIG5hbWVzIGZvciBjb25zaXN0ZW5jeS4KLSAqLwotI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKLSAqLwotCi0jZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KLQotLyoKLSAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAotICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCi0gKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgotICovCi0jZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAotI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKLQotLyoKLSAqIE1vYmlsaXR5IEVsZWN0cm9uaWNzIHByb2R1Y3RzLgotICovCi0jZGVmaW5lIE1PQklMSVRZX1ZJRAkJCTB4MTM0MgotI2RlZmluZSBNT0JJTElUWV9VU0JfU0VSSUFMX1BJRAkJMHgwMjAyCS8qIEVhc2lEb2NrIFVTQiAyMDAgc2VyaWFsICovCi0KLS8qCi0gKiBtaWNyb0hBTSBwcm9kdWN0IElEcyAoaHR0cDovL3d3dy5taWNyb2hhbS5jb20pLgotICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPgotICogYW5kIE1pa2UgU3R1ZGVyIChLNkVFUCkgPGs2ZWVwQGhhbXNvZnR3YXJlLm9yZz4uCi0gKiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4gYWRkZWQgYSBmZXcgbW9yZSBmcm9tIHRoZSBkcml2ZXIgSU5GIGZpbGUuCi0gKi8KLSNkZWZpbmUgRlRESV9NSEFNX0tXX1BJRCAweEVFRTgJCS8qIFVTQi1LVyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1lTX1BJRCAweEVFRTkJCS8qIFVTQi1ZUyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k2X1BJRCAweEVFRUEJCS8qIFVTQi1ZNiBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k4X1BJRCAweEVFRUIJCS8qIFVTQi1ZOCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX0lDX1BJRCAweEVFRUMJCS8qIFVTQi1JQyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX0RCOV9QSUQgMHhFRUVECS8qIFVTQi1EQjkgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9SUzIzMl9QSUQgMHhFRUVFCS8qIFVTQi1SUzIzMiBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlRESV9NSEFNX1k5X1BJRCAweEVFRUYJCS8qIFVTQi1ZOSBpbnRlcmZhY2UgKi8KLQotLyoKLSAqIEFjdGl2ZSBSb2JvdHMgcHJvZHVjdCBpZHMuCi0gKi8KLSNkZWZpbmUgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRAkweEU1NDgJLyogVVNCIGNvbW1zIGJvYXJkICovCi0KLS8qCi0gKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KLSAqLwotI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4Ci0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzJfUElECTB4RDM4QQotI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzVfUElECTB4RDM4RAotI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKLQotLyoKLSAqIFRlcmF0cm9uaWsgcHJvZHVjdCBpZHMuCi0gKiBTdWJtaXR0ZWQgYnkgTy4gV8O2bGZlbHNjaG5laWRlci4KLSAqLwotI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KLSNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLwotCi0vKgotICogRXZvbHV0aW9uIFJvYm90aWNzIHByb2R1Y3RzIChodHRwOi8vd3d3LmV2b2x1dGlvbi5jb20vKS4KLSAqIFN1Ym1pdHRlZCBieSBTaGF3biBNLiBMYXZlbGxlLgotICovCi0jZGVmaW5lIEVWT0xVVElPTl9WSUQJCTB4REVFRQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgRVZPTFVUSU9OX0VSMV9QSUQJMHgwMzAwCS8qIEVSMSBDb250cm9sIE1vZHVsZSAqLwotI2RlZmluZSBFVk9fOFUyMzJBTV9QSUQJMHgwMkZGCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ00yIChGVDIzMkFNKSovCi0jZGVmaW5lIEVWT19IWUJSSURfUElECQkweDAzMDIJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEIChGVDIzMkJNKSovCi0jZGVmaW5lIEVWT19SQ000X1BJRAkJMHgwMzAzCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAqLwotCi0vKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KLSNkZWZpbmUgRlRESV9QWVJBTUlEX1BJRAkweEU2QzgJLyogUHlyYW1pZCBBcHBsaWFuY2UgRGlzcGxheSAqLwotCi0vKgotICogTkRJICh3d3cubmRpZ2l0YWwuY29tKSBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIEZURElfTkRJX0hVQ19QSUQJCTB4REE3MAkvKiBOREkgSG9zdCBVU0IgQ29udmVydGVyICovCi0jZGVmaW5lIEZURElfTkRJX1NQRUNUUkFfU0NVX1BJRAkweERBNzEJLyogTkRJIFNwZWN0cmEgU0NVICovCi0jZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8yX1BJRAkJMHhEQTcyCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMyICovCi0jZGVmaW5lIEZURElfTkRJX0ZVVFVSRV8zX1BJRAkJMHhEQTczCS8qIE5ESSBmdXR1cmUgZGV2aWNlICMzICovCi0jZGVmaW5lIEZURElfTkRJX0FVUk9SQV9TQ1VfUElECQkweERBNzQJLyogTkRJIEF1cm9yYSBTQ1UgKi8KLQotLyoKLSAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKLSAqLwotI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCi0KLS8qCi0gKiBXZXN0cmV4IEludGVybmF0aW9uYWwgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ29yeSBMZWUKLSAqLwotI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCi0jZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCi0KLS8qCi0gKiBSUi1DaXJLaXRzIExvY29CdWZmZXIgVVNCIChodHRwOi8vd3d3LnJyLWNpcmtpdHMuY29tKQotICovCi0jZGVmaW5lIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElECTB4YzdkMAkvKiBMb2NvQnVmZmVyIFVTQiAqLwotCi0vKgotICogRWNsbyAoaHR0cDovL3d3dy5lY2xvLnB0LykgcHJvZHVjdCBJRHMuCi0gKiBQSUQgMHhFQTkwIHN1Ym1pdHRlZCBieSBNYXJ0aW4gR3JpbGwuCi0gKi8KLSNkZWZpbmUgRlRESV9FQ0xPX0NPTV8xV0lSRV9QSUQJMHhFQTkwCS8qIENPTSB0byAxLVdpcmUgVVNCIGFkYXB0b3IgKi8KLQotLyoKLSAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQotICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KLSAqLwotCi0jZGVmaW5lIFBBUE9VQ0hfVklECQkJMHg1MDUwCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLwotI2RlZmluZSBQQVBPVUNIX1FVSURPNHg0X1BJRAkJMHgwOTAwCS8qIFF1aWRvIDQvNCBNb2R1bGUgKi8KLQotLyoKLSAqIEFDRyBJZGVudGlmaWNhdGlvbiBUZWNobm9sb2dpZXMgR21iSCBwcm9kdWN0cyAoaHR0cDovL3d3dy5hY2cuZGUvKS4KLSAqIFN1Ym1pdHRlZCBieSBhbnRvbiAtYXQtIGdvdG8xMCAtZG90LSBvcmcuCi0gKi8KLSNkZWZpbmUgRlRESV9BQ0dfSEZEVUFMX1BJRAkJMHhERDIwCS8qIEhGIER1YWwgSVNPIFJlYWRlciAoUkZJRCkgKi8KLQotLyoKLSAqIFlvc3QgRW5naW5lZXJpbmcsIEluYy4gcHJvZHVjdHMgKHd3dy55b3N0ZW5naW5lZXJpbmcuY29tKS4KLSAqIFBJRCAweEUwNTAgc3VibWl0dGVkIGJ5IEFhcm9uIFByb3NlLgotICovCi0jZGVmaW5lIEZURElfWUVJX1NFUlZPQ0VOVEVSMzFfUElECTB4RTA1MAkvKiBZRUkgU2Vydm9DZW50ZXIzLjEgVVNCICovCi0KLS8qCi0gKiBUaG9yTGFicyBVU0IgbW90b3IgZHJpdmVycwotICovCi0jZGVmaW5lIEZURElfVEhPUkxBQlNfUElECQkweGZhZjAgLyogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMgKi8KLQotLyoKLSAqIFRlc3RvIHByb2R1Y3RzIChodHRwOi8vd3d3LnRlc3RvLmNvbS8pCi0gKiBTdWJtaXR0ZWQgYnkgQ29saW4gTGVyb3kKLSAqLwotI2RlZmluZSBURVNUT19WSUQJCQkweDEyOEQKLSNkZWZpbmUgVEVTVE9fVVNCX0lOVEVSRkFDRV9QSUQJCTB4MDAwMQotCi0vKgotICogR2FtbWEgU2NvdXQgKGh0dHA6Ly9nYW1tYS1zY291dC5jb20vKS4gU3VibWl0dGVkIGJ5IHJzY0BydW50dXguY29tLgotICovCi0jZGVmaW5lIEZURElfR0FNTUFfU0NPVVRfUElECQkweEQ2NzgJLyogR2FtbWEgU2NvdXQgb25saW5lICovCi0KLS8qCi0gKiBUYWN0cml4IE9wZW5Qb3J0IChFQ1UpIGRldmljZXMuCi0gKiBPcGVuUG9ydCAxLjNNIHN1Ym1pdHRlZCBieSBEb25vdXIgU2l6ZW1vcmUuCi0gKiBPcGVuUG9ydCAxLjNTIGFuZCAxLjNVIHN1Ym1pdHRlZCBieSBJYW4gQWJib3R0LgotICovCi0jZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM01fUElECTB4Q0M0OAkvKiBPcGVuUG9ydCAxLjMgTWl0c3ViaXNoaSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNTX1BJRAkweENDNDkJLyogT3BlblBvcnQgMS4zIFN1YmFydSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNVX1BJRAkweENDNEEJLyogT3BlblBvcnQgMS4zIFVuaXZlcnNhbCAqLwotCi0vKgotICogVGVsbGR1cyBUZWNobm9sb2dpZXMKLSAqLwotI2RlZmluZSBURUxMRFVTX1ZJRAkJCTB4MTc4MQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCi0KLS8qCi0gKiBJQlMgZWxla3Ryb25payBwcm9kdWN0IGlkcwotICogU3VibWl0dGVkIGJ5IFRob21hcyBTY2hsZXVzZW5lcgotICovCi0jZGVmaW5lIEZURElfSUJTX1VTNDg1X1BJRAkweGZmMzggIC8qIElCUyBVUzQ4NSAoVVNCPC0tPlJTNDIyLzQ4NSBpbnRlcmZhY2UpICovCi0jZGVmaW5lIEZURElfSUJTX1BJQ1BST19QSUQJMHhmZjM5ICAvKiBJQlMgUElDLVByb2dyYW1tZXIgKi8KLSNkZWZpbmUgRlRESV9JQlNfUENNQ0lBX1BJRAkweGZmM2EgIC8qIElCUyBDYXJkIHJlYWRlciBmb3IgUENNQ0lBIFNSQU0tY2FyZHMgKi8KLSNkZWZpbmUgRlRESV9JQlNfUEsxX1BJRAkweGZmM2IgIC8qIElCUyBQSzEgLSBQYXJ0aWNlbCBjb3VudGVyICovCi0jZGVmaW5lIEZURElfSUJTX1JTMjMyTU9OX1BJRAkweGZmM2MgIC8qIElCUyBSUzIzMiAtIE1vbml0b3IgKi8KLSNkZWZpbmUgRlRESV9JQlNfQVBQNzBfUElECTB4ZmYzZCAgLyogQVBQIDcwIChkdXN0IG1vbml0b3Jpbmcgc3lzdGVtKSAqLwotI2RlZmluZSBGVERJX0lCU19QRURPX1BJRAkweGZmM2UgIC8qIElCUyBQRURPLU1vZGVtIChSRiBtb2RlbSA4NjguMzUgTUh6KSAqLwotI2RlZmluZSBGVERJX0lCU19QUk9EX1BJRAkweGZmM2YgIC8qIGZ1dHVyZSBkZXZpY2UgKi8KLQotLyoKLSAqICBNYXhTdHJlYW0gZGV2aWNlcwl3d3cubWF4c3RyZWFtLm5ldAotICovCi0jZGVmaW5lIEZURElfTUFYU1RSRUFNX1BJRAkweEVFMTgJLyogWGJlZSBQS0ctVSBNb2R1bGUgKi8KLQotLyogT2xpbWV4ICovCi0jZGVmaW5lIE9MSU1FWF9WSUQJCQkweDE1QkEKLSNkZWZpbmUgT0xJTUVYX0FSTV9VU0JfT0NEX1BJRAkJMHgwMDAzCi0KLS8qIEx1bWluYXJ5IE1pY3JvIFN0ZWxsYXJpcyBCb2FyZHMsIFZJRCA9IEZURElfVklEICovCi0vKiBGVERJIDIzMzJDIER1YWwgY2hhbm5lbCBkZXZpY2UsIHNpZGUgQT0yNDUgRklGTyAoSlRBRyksIFNpZGUgQj1SUzIzMiBVQVJUICovCi0jZGVmaW5lIExNSV9MTTNTX0RFVkVMX0JPQVJEX1BJRAkweGJjZDgKLSNkZWZpbmUgTE1JX0xNM1NfRVZBTF9CT0FSRF9QSUQJCTB4YmNkOQotCi0vKiB3d3cuZWxzdGVyZWxlY3RyaWNpdHkuY29tIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUgKi8KLSNkZWZpbmUgRlRESV9FTFNURVJfVU5JQ09NX1BJRAkJMHhFNzAwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIFRoZSBNb2JpbGl0eSBMYWIgKFRNTCkKLSAqIFN1Ym1pdHRlZCBieSBQaWVycmUgQ2FzdGVsbGEKLSAqLwotI2RlZmluZSBUTUxfVklECQkJMHgxQjkxCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBUTUxfVVNCX1NFUklBTF9QSUQJMHgwMDY0CS8qIFVTQiAtIFNlcmlhbCBDb252ZXJ0ZXIgKi8KLQotLyogUHJvcG94IGRldmljZXMgKi8KLSNkZWZpbmUgRlRESV9QUk9QT1hfSlRBR0NBQkxFSUlfUElECTB4RDczOAotCi0vKiBSaWcgRXhwZXJ0IFVrcmFpbmUgZGV2aWNlcyAqLwotI2RlZmluZSBGVERJX1JFVV9USU5ZX1BJRAkJMHhFRDIyCS8qIFJpZ0V4cGVydCBUaW55ICovCi0KLS8qIERvbWludGVsbCBwcm9kdWN0cyAgaHR0cDovL3d3dy5kb21pbnRlbGwuY29tICovCi0jZGVmaW5lIEZURElfRE9NSU5URUxMX0RHUUdfUElECTB4RUY1MAkvKiBNYXN0ZXIgKi8KLSNkZWZpbmUgRlRESV9ET01JTlRFTExfRFVTQl9QSUQJMHhFRjUxCS8qIERVU0IwMSBtb2R1bGUgKi8KLQotLyogQWx0aS0yIHByb2R1Y3RzICBodHRwOi8vd3d3LmFsdGktMi5jb20gKi8KLSNkZWZpbmUgQUxUSTJfVklECTB4MUJDOQotI2RlZmluZSBBTFRJMl9OM19QSUQJMHg2MDAxCS8qIE5lcHR1bmUgMyAqLwotCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTkxMCw4NiArNDAsNiBAQAogI2RlZmluZSBJTlRFUkZBQ0VfQwkJMwogI2RlZmluZSBJTlRFUkZBQ0VfRAkJNAogCi0vKgotICogRklDIC8gT3Blbk1va28sIEluYy4gaHR0cDovL3dpa2kub3Blbm1va28ub3JnL3dpa2kvTmVvMTk3M19EZWJ1Z19Cb2FyZF92MwotICogU3VibWl0dGVkIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+Ci0gKi8KLSNkZWZpbmUJRklDX1ZJRAkJCTB4MTQ1NwotI2RlZmluZQlGSUNfTkVPMTk3M19ERUJVR19QSUQJMHg1MTE4Ci0KLS8qCi0gKiBSQVRPQyBSRVgtVVNCNjBGCi0gKi8KLSNkZWZpbmUgUkFUT0NfVkVORE9SX0lECQkweDA1ODQKLSNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRF9VU0I2MEYJMHhiMDIwCi0KLS8qCi0gKiBESUVCT0xEIEJDUyBTRTkyMwotICovCi0jZGVmaW5lIERJRUJPTERfQkNTX1NFOTIzX1BJRAkweGZiOTkKLQotLyoKLSAqIEF0bWVsIFNUSzU0MQotICovCi0jZGVmaW5lIEFUTUVMX1ZJRAkJMHgwM2ViIC8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBTVEs1NDFfUElECQkweDIxMDkgLyogWmlnYmVlIENvbnRyb2xsZXIgKi8KLQotLyoKLSAqIERyZXNkZW4gRWxla3Ryb25pYyBTZW5zb3IgVGVybWluYWwgQm9hcmQKLSAqLwotI2RlZmluZSBERV9WSUQJCQkweDFjZjEgLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFNUQl9QSUQJCQkweDAwMDEgLyogU2Vuc29yIFRlcm1pbmFsIEJvYXJkICovCi0jZGVmaW5lIFdIVF9QSUQJCQkweDAwMDQgLyogV2lyZWxlc3MgSGFuZGhlbGQgVGVybWluYWwgKi8KLQotLyoKLSAqIEJsYWNrZmluIGduSUNFIEpUQUcKLSAqIGh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWh3Omp0YWc6Z25pY2UKLSAqLwotI2RlZmluZSBBRElfVklEIAkJMHgwNDU2Ci0jZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKLSNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQotCi0vKgotICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCi0gKiBodHRwOi8vd3d3LmpldGkuY29tL3Byb2R1Y3RzL3N5cy9zY2Ivc2NiMTIwMS5waHAKLSAqLwotI2RlZmluZSBKRVRJX1ZJRAkJMHgwYzZjCi0jZGVmaW5lIEpFVElfU1BDMTIwMV9QSUQJMHgwNGIyCi0KLS8qCi0gKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKLSAqLwotI2RlZmluZSBNQVJWRUxMX1ZJRAkJMHg5ZTg4Ci0jZGVmaW5lIE1BUlZFTExfU0hFRVZBUExVR19QSUQJMHg5ZThmCi0KLSNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLwotCi0vKgotICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKLSAqIFN1Ym1pdHRlZCBieSBWaWxsZSBTdW5kYmVyZy4KLSAqLwotI2RlZmluZSBHTl9PVE9NRVRSSUNTX1ZJRAkweDBjMzMJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIEFVUklDQUxfVVNCX1BJRAkJMHgwMDEwCS8qIEF1cmljYWwgVVNCIEF1ZGlvbWV0ZXIgKi8KLQotLyoKLSAqIEJheWVyIEFzY2Vuc2lhIENvbnRvdXIgYmxvb2QgZ2x1Y29zZSBtZXRlciBVU0ItY29udmVydGVyIGNhYmxlLgotICogaHR0cDovL3dpbmdsdWNvZmFjdHMuY29tL2NhYmxlcy8KLSAqLwotI2RlZmluZSBCQVlFUl9WSUQgICAgICAgICAgICAgICAgICAgICAgMHgxQTc5Ci0jZGVmaW5lIEJBWUVSX0NPTlRPVVJfQ0FCTEVfUElEICAgICAgICAweDYwMDEKLQotLyoKLSAqIE1hcnZlbGwgT3BlblJEIEJhc2UsIENsaWVudAotICogaHR0cDovL3d3dy5vcGVuLXJkLm9yZwotICogT3BlblJEIEJhc2UsIENsaWVudCB1c2UgVklEIDB4MDQwMwotICovCi0jZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKLQotLyoKLSAqIEhhbWVnIEhPODIwIGFuZCBITzg3MCBpbnRlcmZhY2UgKHVzaW5nIFZJRCAweDA0MDMpCi0gKi8KLSNkZWZpbmUgICAgICAgIEhBTUVHX0hPODIwX1BJRCAgICAgICAgIDB4ZWQ3NAotI2RlZmluZSAgICAgICAgSEFNRUdfSE84NzBfUElEICAgICAgICAgMHhlZDcxCiAKIC8qCiAgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCkBAIC0xNTA0LDQgKzU1NCwzIEBACiAgKiBCMi4uNwlMZW5ndGggb2YgbWVzc2FnZSAtIChub3QgaW5jbHVkaW5nIEJ5dGUgMCkKICAqCiAgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTJiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTAsMCArMSw5ODYgQEAKKy8qCisgKiB2ZW5kb3IvcHJvZHVjdCBJRHMgKFZJRC9QSUQpIG9mIGRldmljZXMgdXNpbmcgRlRESSBVU0Igc2VyaWFsIGNvbnZlcnRlcnMuCisgKiBQbGVhc2Uga2VlcCBudW1lcmljYWxseSBzb3J0ZWQgd2l0aGluIGluZGl2aWR1YWwgYXJlYXMsIHRoYW5rcyEKKyAqCisgKiBQaGlsaXBwIEf8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcworICogZnJvbSBSdWRvbGYgR3VnbGVyCisgKgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogZGV2aWNlcyB1c2luZyBGVERJIFZJRCAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLworCisKKy8qKiogIm9yaWdpbmFsIiBGVERJIGRldmljZSBQSURzICoqKi8KKworI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9QSUQgMHg2MDA2IC8qIEZUREkncyBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCisjZGVmaW5lIEZURElfNDIzMkhfUElEIDB4NjAxMSAvKiBRdWFkIGNoYW5uZWwgaGktc3BlZWQgZGV2aWNlICovCisjZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KKyNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLworCisKKy8qKiogdGhpcmQtcGFydHkgUElEcyAodXNpbmcgRlRESV9WSUQpICoqKi8KKworLyoKKyAqIE1hcnZlbGwgT3BlblJEIEJhc2UsIENsaWVudAorICogaHR0cDovL3d3dy5vcGVuLXJkLm9yZworICogT3BlblJEIEJhc2UsIENsaWVudCB1c2UgVklEIDB4MDQwMworICovCisjZGVmaW5lIE1BUlZFTExfT1BFTlJEX1BJRAkweDllOTAKKworLyogd3d3LmNhbmRhcHRlci5jb20gRXdlcnQgRW5lcmd5IFN5c3RlbXMgQ0FOZGFwdGVyIGRldmljZSAqLworI2RlZmluZSBGVERJX0NBTkRBUFRFUl9QSUQgMHg5RjgwIC8qIFByb2R1Y3QgSWQgKi8KKworLyogT09DRGxpbmsgYnkgSm9lcm4gS2FpcGYgPGpvZXJua0B3ZWIuZGU+CisgKiAoaHR0cDovL3d3dy5qb2Vybm9ubGluZS5kZS9kdy9kb2t1LnBocD9pZD1zdGFydCZpZHg9cHJvamVjdHM6b29jZGxpbmspICovCisjZGVmaW5lIEZURElfT09DRExJTktfUElECTB4YmFmOAkvKiBBbW9udGVjIEpUQUdrZXkgKi8KKworLyogTHVtaW5hcnkgTWljcm8gU3RlbGxhcmlzIEJvYXJkcywgVklEID0gRlRESV9WSUQgKi8KKy8qIEZUREkgMjMzMkMgRHVhbCBjaGFubmVsIGRldmljZSwgc2lkZSBBPTI0NSBGSUZPIChKVEFHKSwgU2lkZSBCPVJTMjMyIFVBUlQgKi8KKyNkZWZpbmUgTE1JX0xNM1NfREVWRUxfQk9BUkRfUElECTB4YmNkOAorI2RlZmluZSBMTUlfTE0zU19FVkFMX0JPQVJEX1BJRAkJMHhiY2Q5CisKKyNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLworCisvKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLworI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAorI2RlZmluZSBGVERJX09QRU5EQ0NfU05JRkZFUl9QSUQJMHhCRkQ5CisjZGVmaW5lIEZURElfT1BFTkRDQ19USFJPVFRMRV9QSUQJMHhCRkRBCisjZGVmaW5lIEZURElfT1BFTkRDQ19HQVRFV0FZX1BJRAkweEJGREIKKworLyoKKyAqIFJSLUNpcktpdHMgTG9jb0J1ZmZlciBVU0IgKGh0dHA6Ly93d3cucnItY2lya2l0cy5jb20pCisgKi8KKyNkZWZpbmUgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQJMHhjN2QwCS8qIExvY29CdWZmZXIgVVNCICovCisKKy8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KKyNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAorCisvKgorICogQVNLLmZyIGRldmljZXMKKyAqLworI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KKworLyogd3d3LnN0YXJ0aW5nLXBvaW50LXN5c3RlbXMuY29tILVDaGFtZWxlb24gZGV2aWNlICovCisjZGVmaW5lIEZURElfTUlDUk9fQ0hBTUVMRU9OX1BJRAkweENBQTAJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogVGFjdHJpeCBPcGVuUG9ydCAoRUNVKSBkZXZpY2VzLgorICogT3BlblBvcnQgMS4zTSBzdWJtaXR0ZWQgYnkgRG9ub3VyIFNpemVtb3JlLgorICogT3BlblBvcnQgMS4zUyBhbmQgMS4zVSBzdWJtaXR0ZWQgYnkgSWFuIEFiYm90dC4KKyAqLworI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNNX1BJRAkweENDNDgJLyogT3BlblBvcnQgMS4zIE1pdHN1YmlzaGkgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzU19QSUQJMHhDQzQ5CS8qIE9wZW5Qb3J0IDEuMyBTdWJhcnUgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzVV9QSUQJMHhDQzRBCS8qIE9wZW5Qb3J0IDEuMyBVbml2ZXJzYWwgKi8KKworLyogU0NTIEhGIFJhZGlvIE1vZGVtcyBQSUQncyAoaHR0cDovL3d3dy5zY3MtcHRjLmNvbSkgKi8KKy8qIHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzBfUElEIDB4RDAxMCAgICAvKiBTQ1MgUFRDLUlJdXNiICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8xX1BJRCAweEQwMTEgICAgLyogU0NTIFRyYWNrZXIgLyBEU1AgVE5DICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8yX1BJRCAweEQwMTIKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzNfUElEIDB4RDAxMworI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNF9QSUQgMHhEMDE0CisjZGVmaW5lIEZURElfU0NTX0RFVklDRV81X1BJRCAweEQwMTUKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzZfUElEIDB4RDAxNgorI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfN19QSUQgMHhEMDE3CisKKy8qIGlQbHVzIGRldmljZSAqLworI2RlZmluZSBGVERJX0lQTFVTX1BJRCAweEQwNzAgLyogUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX0lQTFVTMl9QSUQgMHhEMDcxIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEdhbW1hIFNjb3V0IChodHRwOi8vZ2FtbWEtc2NvdXQuY29tLykuIFN1Ym1pdHRlZCBieSByc2NAcnVudHV4LmNvbS4KKyAqLworI2RlZmluZSBGVERJX0dBTU1BX1NDT1VUX1BJRAkJMHhENjc4CS8qIEdhbW1hIFNjb3V0IG9ubGluZSAqLworCisvKiBQcm9wb3ggZGV2aWNlcyAqLworI2RlZmluZSBGVERJX1BST1BPWF9KVEFHQ0FCTEVJSV9QSUQJMHhENzM4CisKKy8qCisgKiBYc2VucyBUZWNobm9sb2dpZXMgQlYgcHJvZHVjdHMgKGh0dHA6Ly93d3cueHNlbnMuY29tKS4KKyAqLworI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4CisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8xX1BJRAkweEQzODkKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzJfUElECTB4RDM4QQorI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl80X1BJRAkweEQzOEMKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzVfUElECTB4RDM4RAorI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl83X1BJRAkweEQzOEYKKworLyoKKyAqIE5ESSAod3d3Lm5kaWdpdGFsLmNvbSkgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX05ESV9IVUNfUElECQkweERBNzAJLyogTkRJIEhvc3QgVVNCIENvbnZlcnRlciAqLworI2RlZmluZSBGVERJX05ESV9TUEVDVFJBX1NDVV9QSUQJMHhEQTcxCS8qIE5ESSBTcGVjdHJhIFNDVSAqLworI2RlZmluZSBGVERJX05ESV9GVVRVUkVfMl9QSUQJCTB4REE3MgkvKiBOREkgZnV0dXJlIGRldmljZSAjMiAqLworI2RlZmluZSBGVERJX05ESV9GVVRVUkVfM19QSUQJCTB4REE3MwkvKiBOREkgZnV0dXJlIGRldmljZSAjMyAqLworI2RlZmluZSBGVERJX05ESV9BVVJPUkFfU0NVX1BJRAkJMHhEQTc0CS8qIE5ESSBBdXJvcmEgU0NVICovCisKKy8qCisgKiBXZXN0cmV4IEludGVybmF0aW9uYWwgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ29yeSBMZWUKKyAqLworI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfNzc3X1BJRAkweERDMDAJLyogTW9kZWwgNzc3ICovCisjZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF84OTAwRl9QSUQJMHhEQzAxCS8qIE1vZGVsIDg5MDBGICovCisKKy8qCisgKiBBQ0cgSWRlbnRpZmljYXRpb24gVGVjaG5vbG9naWVzIEdtYkggcHJvZHVjdHMgKGh0dHA6Ly93d3cuYWNnLmRlLykuCisgKiBTdWJtaXR0ZWQgYnkgYW50b24gLWF0LSBnb3RvMTAgLWRvdC0gb3JnLgorICovCisjZGVmaW5lIEZURElfQUNHX0hGRFVBTF9QSUQJCTB4REQyMAkvKiBIRiBEdWFsIElTTyBSZWFkZXIgKFJGSUQpICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQXJ0ZW1pcyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKKyAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXJ0ZW1pc2NjZC5jby51ay8KKyAqLworI2RlZmluZSBGVERJX0FSVEVNSVNfUElECTB4REYyOAkvKiBBbGwgQXJ0ZW1pcyBDYW1lcmFzICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQVRJSyBJbnN0cnVtZW50cyBhc3Ryb25vbWljYWwgVVNCIGJhc2VkIGNhbWVyYXMKKyAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXRpay1pbnN0cnVtZW50cy5jb20vCisgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2X1BJRAkweERGMzAJLyogQVRJSyBBVEstMTYgR3JheXNjYWxlIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZDX1BJRAkweERGMzIJLyogQVRJSyBBVEstMTZDIENvbG91ciBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJfUElECTB4REYzMQkvKiBBVElLIEFUSy0xNkhSIEdyYXlzY2FsZSBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SFJDX1BJRAkweERGMzMJLyogQVRJSyBBVEstMTZIUkMgQ29sb3VyIENhbWVyYSAqLworI2RlZmluZSBGVERJX0FUSUtfQVRLMTZJQ19QSUQgICAweERGMzUgIC8qIEFUSUsgQVRLLTE2SUMgR3JheXNjYWxlIENhbWVyYSAqLworCisvKgorICogWW9zdCBFbmdpbmVlcmluZywgSW5jLiBwcm9kdWN0cyAod3d3Lnlvc3RlbmdpbmVlcmluZy5jb20pLgorICogUElEIDB4RTA1MCBzdWJtaXR0ZWQgYnkgQWFyb24gUHJvc2UuCisgKi8KKyNkZWZpbmUgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQJMHhFMDUwCS8qIFlFSSBTZXJ2b0NlbnRlcjMuMSBVU0IgKi8KKworLyoKKyAqIEVMViBVU0IgZGV2aWNlcyBzdWJtaXR0ZWQgYnkgQ2hyaXN0aWFuIEFidCBvZiBFTFYgKHd3dy5lbHYuZGUpLgorICogQWxsIG9mIHRoZXNlIGRldmljZXMgdXNlIEZUREkncyB2ZW5kb3IgSUQgKDB4MDQwMykuCisgKgorICogVGhlIHByZXZpb3VzbHkgaW5jbHVkZWQgUElEIGZvciB0aGUgVU8gMTAwIG1vZHVsZSB3YXMgaW5jb3JyZWN0LgorICogSW4gZmFjdCwgdGhhdCBQSUQgd2FzIGZvciBFTFYncyBVUiAxMDAgVVNCLVJTMjMyIGNvbnZlcnRlciAoMHhGQjU4KS4KKyAqCisgKiBBcm1pbiBMYWV1Z2VyIG9yaWdpbmFsbHkgc2VudCB0aGUgUElEIGZvciB0aGUgVU0gMTAwIG1vZHVsZS4KKyAqLworI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLworI2RlZmluZSBGVERJX0VMVl9XUzUwMF9QSUQJMHhFMEU5CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDUwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfSFM0ODVfUElECTB4RTBFQQkvKiBVU0IgdG8gUlMtNDg1IGFkYXB0ZXIgKi8KKyNkZWZpbmUgRlRESV9FTFZfRU0xMDEwUENfUElECTB4RTBFRgkvKiBFbmdlcnkgbW9uaXRvciBFTSAxMDEwIFBDICovCisjZGVmaW5lIEZURElfRUxWX0NTSThfUElECTB4RTBGMAkvKiBDb21wdXRlci1TY2hhbHQtSW50ZXJmYWNlIChDU0kgOCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfRU0xMDAwRExfUElECTB4RTBGMQkvKiBQQy1EYXRlbmxvZ2dlciBmdWVyIEVuZXJnaWVtb25pdG9yIChFTSAxMDAwIERMKSAqLworI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUkZQNTAwX1BJRAkweEUwRjMJLyogSEYtTGVpc3R1bmdzbWVzc2VyIChSRlAgNTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9GUzIwU0lHX1BJRAkweEUwRjQJLyogU2lnbmFsZ2ViZXIgKEZTIDIwIFNJRykgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KKyNkZWZpbmUgRlRESV9QSElfRklTQ09fUElEICAgICAgMHhFNDBCICAvKiBQSEkgRmlzY28gVVNCIHRvIFNlcmlhbCBjYWJsZSAqLworI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLworI2RlZmluZSBGVERJX0VMVl9VREE3X1BJRAkweEYwNjkJLyogVVNCLURBLVdhbmRsZXIgKFVEQSA3KSAqLworI2RlZmluZSBGVERJX0VMVl9VU0kyX1BJRAkweEYwNkEJLyogVVNCLVNjaHJpdHRtb3RvcmVuLUludGVyZmFjZSAoVVNJIDIpICovCisjZGVmaW5lIEZURElfRUxWX1QxMTAwX1BJRAkweEYwNkIJLyogVGhlcm1vbWV0ZXIgKFQgMTEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUENEMjAwX1BJRAkweEYwNkMJLyogUEMtRGF0ZW5sb2dnZXIgKFBDRCAyMDApICovCisjZGVmaW5lIEZURElfRUxWX1VMQTIwMF9QSUQJMHhGMDZECS8qIFVTQi1MQ0QtQW5zdGV1ZXJ1bmcgKFVMQSAyMDApICovCisjZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KKyNkZWZpbmUgRlRESV9FTFZfRkhaMTAwMFBDX1BJRAkweEYwNkYJLyogRkhaIDEwMDAgUEMgKi8KKyNkZWZpbmUgRlRESV9FTFZfVVIxMDBfUElECTB4RkI1OAkvKiBVU0ItUlMyMzItVW1zZXR6ZXIgKFVSIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVU0xMDBfUElECTB4RkI1QQkvKiBVU0ItTW9kdWwgVU0gMTAwICovCisjZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNUIJLyogVVNCLU1vZHVsIFVPIDEwMCAqLworLyogQWRkaXRpb25hbCBFTFYgUElEcyB0aGF0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIEZUREkgRDJYWCBkcml2ZXJzIG9uCisgKiBNUyBXaW5kb3dzLCByYXRoZXIgdGhhbiB0aGUgRlRESSBWaXJ0dWFsIENvbSBQb3J0IGRyaXZlcnMuCisgKiBNYXliZSB0aGVzZSB3aWxsIGJlIGVhc2llciB0byB1c2Ugd2l0aCB0aGUgbGliZnRkaS9saWJ1c2IgdXNlci1zcGFjZQorICogZHJpdmVycywgb3IgcG9zc2libHkgdGhlIENvbWVkaSBkcml2ZXJzIGluIHNvbWUgY2FzZXMuICovCisjZGVmaW5lIEZURElfRUxWX0NMSTcwMDBfUElECTB4RkI1OQkvKiBDb21wdXRlci1MaWdodC1JbnRlcmZhY2UgKENMSSA3MDAwKSAqLworI2RlZmluZSBGVERJX0VMVl9QUFM3MzMwX1BJRAkweEZCNUMJLyogUHJvY2Vzc29yLVBvd2VyLVN1cHBseSAoUFBTIDczMzApICovCisjZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmFydHVyLUZldWNodGUgTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVURGNzdfUElECTB4RkI1RQkvKiBVU0IgRENGIEZ1bmt1cmggKFVERiA3NykgKi8KKyNkZWZpbmUgRlRESV9FTFZfVUlPODhfUElECTB4RkI1RgkvKiBVU0ItSS9PIEludGVyZmFjZSAoVUlPIDg4KSAqLworCisvKgorICogRVZFUiBFY28gUHJvIFVQUyAoaHR0cDovL3d3dy5ldmVyLmNvbS5wbC8pCisgKi8KKworI2RlZmluZQlFVkVSX0VDT19QUk9fQ0RTCTB4ZTUyMAkvKiBSUy0yMzIgY29udmVydGVyICovCisKKy8qCisgKiBBY3RpdmUgUm9ib3RzIHByb2R1Y3QgaWRzLgorICovCisjZGVmaW5lIEZURElfQUNUSVZFX1JPQk9UU19QSUQJMHhFNTQ4CS8qIFVTQiBjb21tcyBib2FyZCAqLworCisvKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KKyNkZWZpbmUgRlRESV9QWVJBTUlEX1BJRAkweEU2QzgJLyogUHlyYW1pZCBBcHBsaWFuY2UgRGlzcGxheSAqLworCisvKiB3d3cuZWxzdGVyZWxlY3RyaWNpdHkuY29tIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUgKi8KKyNkZWZpbmUgRlRESV9FTFNURVJfVU5JQ09NX1BJRAkJMHhFNzAwIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAorICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODA4X1BJRCAgICAweEU4MDgKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQV9QSUQgICAgMHhFODBBCisjZGVmaW5lIEZURElfR1VERUFEU19FODBCX1BJRCAgICAweEU4MEIKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQworI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRF9QSUQgICAgMHhFODBECisjZGVmaW5lIEZURElfR1VERUFEU19FODBFX1BJRCAgICAweEU4MEUKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OF9QSUQgICAgMHhFODg4ICAvKiBFeHBlcnQgSVNETiBDb250cm9sIFVTQiAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OV9QSUQgICAgMHhFODg5ICAvKiBVU0IgUlMtMjMyIE9wdG9CcmlkZ2UgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Ql9QSUQgICAgMHhFODhCCisjZGVmaW5lIEZURElfR1VERUFEU19FODhDX1BJRCAgICAweEU4OEMKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RV9QSUQgICAgMHhFODhFCisjZGVmaW5lIEZURElfR1VERUFEU19FODhGX1BJRCAgICAweEU4OEYKKworLyoKKyAqIEVjbG8gKGh0dHA6Ly93d3cuZWNsby5wdC8pIHByb2R1Y3QgSURzLgorICogUElEIDB4RUE5MCBzdWJtaXR0ZWQgYnkgTWFydGluIEdyaWxsLgorICovCisjZGVmaW5lIEZURElfRUNMT19DT01fMVdJUkVfUElECTB4RUE5MAkvKiBDT00gdG8gMS1XaXJlIFVTQiBhZGFwdG9yICovCisKKy8qIFROQy1YIFVTQi10by1wYWNrZXQtcmFkaW8gYWRhcHRlciwgdmVyc2lvbnMgcHJpb3IgdG8gMy4wIChETFAgbW9kdWxlKSAqLworI2RlZmluZSBGVERJX1ROQ19YX1BJRAkJMHhFQkUwCisKKy8qCisgKiBUZXJhdHJvbmlrIHByb2R1Y3QgaWRzLgorICogU3VibWl0dGVkIGJ5IE8uIFf2bGZlbHNjaG5laWRlci4KKyAqLworI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KKyNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLworCisvKiBSaWcgRXhwZXJ0IFVrcmFpbmUgZGV2aWNlcyAqLworI2RlZmluZSBGVERJX1JFVV9USU5ZX1BJRAkJMHhFRDIyCS8qIFJpZ0V4cGVydCBUaW55ICovCisKKy8qCisgKiBIYW1lZyBITzgyMCBhbmQgSE84NzAgaW50ZXJmYWNlICh1c2luZyBWSUQgMHgwNDAzKQorICovCisjZGVmaW5lICAgICAgICBIQU1FR19ITzgyMF9QSUQgICAgICAgICAweGVkNzQKKyNkZWZpbmUgICAgICAgIEhBTUVHX0hPODcwX1BJRCAgICAgICAgIDB4ZWQ3MQorCisvKgorICogIE1heFN0cmVhbSBkZXZpY2VzCXd3dy5tYXhzdHJlYW0ubmV0CisgKi8KKyNkZWZpbmUgRlRESV9NQVhTVFJFQU1fUElECTB4RUUxOAkvKiBYYmVlIFBLRy1VIE1vZHVsZSAqLworCisvKgorICogbWljcm9IQU0gcHJvZHVjdCBJRHMgKGh0dHA6Ly93d3cubWljcm9oYW0uY29tKS4KKyAqIFN1Ym1pdHRlZCBieSBKdXN0aW4gQnVya2V0IChLTDFSTCkgPHpvcnRvbkBqdGFuLmNvbT4KKyAqIGFuZCBNaWtlIFN0dWRlciAoSzZFRVApIDxrNmVlcEBoYW1zb2Z0d2FyZS5vcmc+LgorICogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+IGFkZGVkIGEgZmV3IG1vcmUgZnJvbSB0aGUgZHJpdmVyIElORiBmaWxlLgorICovCisjZGVmaW5lIEZURElfTUhBTV9LV19QSUQgMHhFRUU4CQkvKiBVU0ItS1cgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZU19QSUQgMHhFRUU5CQkvKiBVU0ItWVMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZNl9QSUQgMHhFRUVBCQkvKiBVU0ItWTYgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOF9QSUQgMHhFRUVCCQkvKiBVU0ItWTggaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9JQ19QSUQgMHhFRUVDCQkvKiBVU0ItSUMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9EQjlfUElEIDB4RUVFRAkvKiBVU0ItREI5IGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fUlMyMzJfUElEIDB4RUVFRQkvKiBVU0ItUlMyMzIgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOV9QSUQgMHhFRUVGCQkvKiBVU0ItWTkgaW50ZXJmYWNlICovCisKKy8qIERvbWludGVsbCBwcm9kdWN0cyAgaHR0cDovL3d3dy5kb21pbnRlbGwuY29tICovCisjZGVmaW5lIEZURElfRE9NSU5URUxMX0RHUUdfUElECTB4RUY1MAkvKiBNYXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9ET01JTlRFTExfRFVTQl9QSUQJMHhFRjUxCS8qIERVU0IwMSBtb2R1bGUgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCisgKiBVbHRyYVBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCisgKi8KKyNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLworCisvKiBTcHJvZyBJSSAoQW5kcmV3IENyb3NsYW5kJ3MgU3Byb2dJSSBEQ0MgaW50ZXJmYWNlKSAqLworI2RlZmluZSBGVERJX1NQUk9HX0lJCQkweEYwQzgKKworLyogYW4gaW5mcmFyZWQgcmVjZWl2ZXIgZm9yIHVzZXIgYWNjZXNzIGNvbnRyb2wgd2l0aCBJUiB0YWdzICovCisjZGVmaW5lIEZURElfUElFR1JPVVBfUElECTB4RjIwOAkvKiBQcm9kdWN0IElkICovCisKKy8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UKKyAgIChodHRwOi8vd3d3LmFjdC1zb2x1dGlvbnMuY29tL0hvbWVQcm8uaHRtKSAqLworI2RlZmluZSBGVERJX0FDVFpXQVZFX1BJRAkweEYyRDAKKworLyoKKyAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAorICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCisgKiBhbmQgSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoaWNoIGFyZSB1c2VkIGJ5IHdoaWNoLgorICovCisjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAorI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKworLyoKKyAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgTElOWF9TRE1VU0JRU1NfUElECTB4RjQ0OAkvKiBMaW54IFNETS1VU0ItUVMtUyAqLworI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKworLyoKKyAqIE9jZWFuaWMgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX09DRUFOSUNfUElECTB4RjQ2MCAgLyogT2NlYW5pYyBkaXZlIGluc3RydW1lbnQgKi8KKworLyoKKyAqIFNVVU5UTyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLworCisvKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCisvKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KKyNkZWZpbmUgRlRESV9VU0JfVUlSVF9QSUQJMHhGODUwCS8qIFByb2R1Y3QgSWQgKi8KKworLyogQ0NTIEluYy4gSUNEVS9JQ0RVNDAgcHJvZHVjdCBJRCAtCisgKiB0aGUgRlQyMzJCTSBpcyB1c2VkIGluIGFuIGluLWNpcmN1aXQtZGVidWdnZXIgdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCisjZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMAorI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEKKyNkZWZpbmUgRlRESV9DQ1NNQUNIWF8yX1BJRCAgICAgMHhGOUQyCisjZGVmaW5lIEZURElfQ0NTTE9BRF9OX0dPXzNfUElEIDB4RjlEMworI2RlZmluZSBGVERJX0NDU0lDRFU2NF80X1BJRCAgICAweEY5RDQKKyNkZWZpbmUgRlRESV9DQ1NQUklNRThfNV9QSUQgICAgMHhGOUQ1CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAorICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCisgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEhvbWUgRWxlY3Ryb25pY3MgKHd3dy5ob21lLWVsZWN0cm8uY29tKSBVU0IgZ2FkZ2V0cworICovCisjZGVmaW5lIEZURElfSEVfVElSQTFfUElECTB4RkE3OAkvKiBUaXJhLTEgSVIgdHJhbnNjZWl2ZXIgKi8KKworLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KKyNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAorCisvKgorICogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMKKyAqLworI2RlZmluZSBGVERJX1RIT1JMQUJTX1BJRAkJMHhmYWYwIC8qIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzICovCisKKy8qCisgKiBQcm90ZWdvIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19SMlgwCQkweEZDNzEJLyogUjIwMC1VU0IgVFJORyB1bml0IChSMjEwLCBSMjIwLCBhbmQgUjIzMCkgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzMJMHhGQzcyCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKworLyoKKyAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAorICovCisjZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MgorCisvKiB3d3cuaXJ0cmFucy5kZSBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9JUlRSQU5TX1BJRCAweEZDNjAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogUk0gTWljaGFlbGlkZXMgQ0FOdmlldyBVU0IgKGh0dHA6Ly93d3cucm1jYW4uY29tKSAoRlRESV9WSUQpCisgKiBDQU4gZmllbGRidXMgaW50ZXJmYWNlIGFkYXB0ZXIsIGFkZGVkIGJ5IHBvcnQgR21iSCB3d3cucG9ydC5kZSkKKyAqIElhbiBBYmJvdHQgY2hhbmdlZCB0aGUgbWFjcm8gbmFtZXMgZm9yIGNvbnNpc3RlbmN5LgorICovCisjZGVmaW5lIEZURElfUk1fQ0FOVklFV19QSUQJMHhmZDYwCS8qIFByb2R1Y3QgSWQgKi8KKy8qIHd3dy50aG91Z2h0dGVjaG5vbG9neS5jb20vIFRULVVTQiBwcm92aWRlIHdpdGggcHJvY29tcCB1c2UgZnRkaV9zaW8gKi8KKyNkZWZpbmUgRlRESV9UVFVTQl9QSUQgMHhGRjIwIC8qIFByb2R1Y3QgSWQgKi8KKworI2RlZmluZSBGVERJX1VTQlhfNzA3X1BJRCAweEY4NTcJLyogQURTVGVjaCBJUiBCbGFzdGVyIFVTQlgtNzA3IChGVERJX1ZJRCkgKi8KKworI2RlZmluZSBGVERJX1JFTEFJU19QSUQJMHhGQTEwICAvKiBSZWxhaXMgZGV2aWNlIGZyb20gUnVkb2xmIEd1Z2xlciAqLworCisvKgorICogUENESiB1c2UgZnRkaSBiYXNlZCBkai1jb250cm9sbGVycy4gVGhlIGZvbGxvd2luZyBQSUQgaXMKKyAqIGZvciB0aGVpciBEQUMtMiBkZXZpY2UgaHR0cDovL3d3dy5wY2RqaGFyZHdhcmUuY29tL0RBQzIuYXNwCisgKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSwgUElEIHNlbnQgYnkgV291dGVyIFBhZXNlbikKKyAqLworI2RlZmluZSBGVERJX1BDREpfREFDMl9QSUQgMHhGQTg4CisKKyNkZWZpbmUgRlRESV9SMjAwMEtVX1RSVUVfUk5HCTB4RkI4MCAgLyogUjIwMDBLVSBUUlVFIFJORyAoRlRESV9WSUQpICovCisKKy8qCisgKiBESUVCT0xEIEJDUyBTRTkyMyAoRlRESV9WSUQpCisgKi8KKyNkZWZpbmUgRElFQk9MRF9CQ1NfU0U5MjNfUElECTB4ZmI5OQorCisvKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzCisgKiAtIHRoYW54IGZvciBwcm92aWRpbmcgZnJlZSBkZXZpY2VzIGZvciBldmFsdWF0aW9uICEKKyAqIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlCisgKiBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZQorICovCisjZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjM0X1BJRCAweEZDMDkJLyogNjM0OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjMzX1BJRCAweEZDMEIJLyogNjMzOiAxNngyIENoYXJhY3RlciBEaXNwbGF5IHdpdGggS2V5cyAqLworI2RlZmluZSBGVERJX1hGXzYzMV9QSUQgMHhGQzBDCS8qIDYzMTogMjB4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0MF9QSUQgMHhGQzBFCS8qIDY0MDogVHdvIGxpbmUgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzY0Ml9QSUQgMHhGQzBGCS8qIDY0MjogVHdvIGxpbmUgRGlzcGxheSAqLworCisvKgorICogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZQorICogZm9yIHRoZWlyIDFNYiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZAorICogYnkgdGhlIHVzYiBkZXZpY2Ugc3VwcGxpZWQgKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkKKyAqLworI2RlZmluZSBGVERJX1ZOSENQQ1VTQl9EX1BJRCAweGZlMzggLyogUHJvZHVjdCBJZCAqLworCisvKiBBbHBoYU1pY3JvIENvbXBvbmVudHMgQU1DLTIzMlVTQjAxIGRldmljZSAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfQU1DMjMyX1BJRCAweEZGMDAgLyogUHJvZHVjdCBJZCAqLworCisvKgorICogSUJTIGVsZWt0cm9uaWsgcHJvZHVjdCBpZHMgKEZURElfVklEKQorICogU3VibWl0dGVkIGJ5IFRob21hcyBTY2hsZXVzZW5lcgorICovCisjZGVmaW5lIEZURElfSUJTX1VTNDg1X1BJRAkweGZmMzggIC8qIElCUyBVUzQ4NSAoVVNCPC0tPlJTNDIyLzQ4NSBpbnRlcmZhY2UpICovCisjZGVmaW5lIEZURElfSUJTX1BJQ1BST19QSUQJMHhmZjM5ICAvKiBJQlMgUElDLVByb2dyYW1tZXIgKi8KKyNkZWZpbmUgRlRESV9JQlNfUENNQ0lBX1BJRAkweGZmM2EgIC8qIElCUyBDYXJkIHJlYWRlciBmb3IgUENNQ0lBIFNSQU0tY2FyZHMgKi8KKyNkZWZpbmUgRlRESV9JQlNfUEsxX1BJRAkweGZmM2IgIC8qIElCUyBQSzEgLSBQYXJ0aWNlbCBjb3VudGVyICovCisjZGVmaW5lIEZURElfSUJTX1JTMjMyTU9OX1BJRAkweGZmM2MgIC8qIElCUyBSUzIzMiAtIE1vbml0b3IgKi8KKyNkZWZpbmUgRlRESV9JQlNfQVBQNzBfUElECTB4ZmYzZCAgLyogQVBQIDcwIChkdXN0IG1vbml0b3Jpbmcgc3lzdGVtKSAqLworI2RlZmluZSBGVERJX0lCU19QRURPX1BJRAkweGZmM2UgIC8qIElCUyBQRURPLU1vZGVtIChSRiBtb2RlbSA4NjguMzUgTUh6KSAqLworI2RlZmluZSBGVERJX0lCU19QUk9EX1BJRAkweGZmM2YgIC8qIGZ1dHVyZSBkZXZpY2UgKi8KKy8qIHd3dy5jYW51c2IuY29tIExhd2ljZWwgQ0FOVVNCIGRldmljZSAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfQ0FOVVNCX1BJRCAweEZGQTggLyogUHJvZHVjdCBJZCAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIHRoaXJkLXBhcnR5IFZJRC9QSUQgY29tYm9zICoqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoKKyAqIEF0bWVsIFNUSzU0MQorICovCisjZGVmaW5lIEFUTUVMX1ZJRAkJMHgwM2ViIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEs1NDFfUElECQkweDIxMDkgLyogWmlnYmVlIENvbnRyb2xsZXIgKi8KKworLyoKKyAqIEJsYWNrZmluIGduSUNFIEpUQUcKKyAqIGh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWh3Omp0YWc6Z25pY2UKKyAqLworI2RlZmluZSBBRElfVklEIAkJMHgwNDU2CisjZGVmaW5lIEFESV9HTklDRV9QSUQgCQkweEYwMDAKKyNkZWZpbmUgQURJX0dOSUNFUExVU19QSUQgCTB4RjAwMQorCisvKgorICogUkFUT0MgUkVYLVVTQjYwRgorICovCisjZGVmaW5lIFJBVE9DX1ZFTkRPUl9JRAkJMHgwNTg0CisjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBCQU5EQl9WSUQJCTB4MDg1NgkvKiBCJkIgRWxlY3Ryb25pY3MgVmVuZG9yIElEICovCisjZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTVEw0X1BJRAkJMHhBQzAyCS8qIFVTVEw0IFJTLTQ4NSBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNPOU1MMl9QSUQJMHhBQzAzCS8qIFVTTzlNTDIgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU09QVEw0X1BJRAkweEFDMTEKKyNkZWZpbmUgQkFOREJfVVNQVEw0X1BJRAkweEFDMTIKKyNkZWZpbmUgQkFOREJfVVNPOU1MMkRSXzJfUElECTB4QUMxNgorI2RlZmluZSBCQU5EQl9VU085TUwyRFJfUElECTB4QUMxNworI2RlZmluZSBCQU5EQl9VU09QVEw0RFIyX1BJRAkweEFDMTgJLyogVVNPUFRMNFItMiAyLXBvcnQgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU09QVEw0RFJfUElECTB4QUMxOQorI2RlZmluZSBCQU5EQl80ODVVU0I5Rl8yV19QSUQJMHhBQzI1CisjZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzRXX1BJRAkweEFDMjYKKyNkZWZpbmUgQkFOREJfMjMyVVNCOU1fUElECTB4QUMyNworI2RlZmluZSBCQU5EQl80ODVVU0JUQl8yV19QSUQJMHhBQzMzCisjZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzRXX1BJRAkweEFDMzQKKyNkZWZpbmUgQkFOREJfVFRMNVVTQjlNX1BJRAkweEFDNDkKKyNkZWZpbmUgQkFOREJfVFRMM1VTQjlNX1BJRAkweEFDNTAKKyNkZWZpbmUgQkFOREJfWlpfUFJPRzFfVVNCX1BJRAkweEJBMDIKKworLyoKKyAqIEludHJlcGlkIENvbnRyb2wgU3lzdGVtcyAoaHR0cDovL3d3dy5pbnRyZXBpZGNzLmNvbS8pIFZhbHVlQ0FOIGFuZCBOZW9WSQorICovCisjZGVmaW5lIElOVFJFUElEX1ZJRAkJMHgwOTNDCisjZGVmaW5lIElOVFJFUElEX1ZBTFVFQ0FOX1BJRAkweDA2MDEKKyNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcworICovCisjZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLworI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKKyAqLworI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KKy8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoQXVzKSBYSDY0NTEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCBoYXJkd2FyZSB2ZXJzaW9uIDEgKi8KKyNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCisKKy8qCisgKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgorICovCisKKyNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2CisjZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorCisvKgorICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKKyAqIFN1Ym1pdHRlZCBieSBWaWxsZSBTdW5kYmVyZy4KKyAqLworI2RlZmluZSBHTl9PVE9NRVRSSUNTX1ZJRAkweDBjMzMJLyogVmVuZG9yIElEICovCisjZGVmaW5lIEFVUklDQUxfVVNCX1BJRAkJMHgwMDEwCS8qIEF1cmljYWwgVVNCIEF1ZGlvbWV0ZXIgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBTZWFsZXZlbCBTZWFMSU5LKyBhZGFwdGVycy4KKyAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAorICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCisgKi8KKyNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAyX1BJRAkweDIxMDIJLyogU2VhTElOSys0ODUgKDIxMDIpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDZfUElECTB4OTAyMAkvKiBTZWFMSU5LKzQyMiAoMjEwNikgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLworCisvKgorICogSkVUSSBTUEVDVFJPTUVURVIgU1BFQ0JPUyAxMjAxCisgKiBodHRwOi8vd3d3LmpldGkuY29tL3Byb2R1Y3RzL3N5cy9zY2Ivc2NiMTIwMS5waHAKKyAqLworI2RlZmluZSBKRVRJX1ZJRAkJMHgwYzZjCisjZGVmaW5lIEpFVElfU1BDMTIwMV9QSUQJMHgwNGIyCisKKy8qCisgKiBGVERJIFVTQiBVQVJUIGNoaXBzIHVzZWQgaW4gY29uc3RydWN0aW9uIHByb2plY3RzIGZyb20gdGhlCisgKiBFbGVrdG9yIEVsZWN0cm9uaWNzIG1hZ2F6aW5lIChodHRwOi8vZWxla3Rvci1lbGVjdHJvbmljcy5jby51aykKKyAqLworI2RlZmluZSBFTEVLVE9SX1ZJRAkJMHgwQzdECisjZGVmaW5lIEVMRUtUT1JfRlQzMjNSX1BJRAkweDAwMDUJLyogUkZJRC1SZWFkZXIsIGlzc3VlIDA5LTIwMDYgKi8KKworLyoKKyAqIFBvc2lmbGV4IGluYyByZXRhaWwgZXF1aXBtZW50IChodHRwOi8vd3d3LnBvc2lmbGV4LmNvbS50dykKKyAqLworI2RlZmluZSBQT1NJRkxFWF9WSUQJCTB4MGQzYSAgLyogVmVuZG9yIElEICovCisjZGVmaW5lIFBPU0lGTEVYX1BQNzAwMF9QSUQJMHgwMzAwICAvKiBQUC03MDAwSUkgdGhlcm1hbCBwcmludGVyICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0d28gS09CSUwgY2hpcGNhcmQgdGVybWluYWxzLgorICovCisjZGVmaW5lIEtPQklMX1ZJRAkJMHgwZDQ2CS8qIEtPQklMIFZlbmRvciBJRCAqLworI2RlZmluZSBLT0JJTF9DT05WX0IxX1BJRAkweDIwMjAJLyogS09CSUwgS29udmVydGVyIGZvciBCMSAqLworI2RlZmluZSBLT0JJTF9DT05WX0tBQU5fUElECTB4MjAyMQkvKiBLT0JJTF9Lb252ZXJ0ZXIgZm9yIEtBQU4gKi8KKworI2RlZmluZSBGVERJX05GX1JJQ19WSUQJMHgwRENECS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEZhbGNvbSBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBHbWJICisgKi8KKyNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KKyNkZWZpbmUgRkFMQ09NX1NBTUJBX1BJRAkweDAwMDUJLyogRmFsY29tIFNhbWJhIFVTQiBHUFJTIG1vZGVtICovCisKKy8qIExhcnNlbiBhbmQgQnJ1c2dhYXJkIEFsdGlUcmFjay9VU0J0cmFjayAgKi8KKyNkZWZpbmUgTEFSU0VOQlJVU0dBQVJEX1ZJRAkJMHgwRkQ4CisjZGVmaW5lIExCX0FMVElUUkFDS19QSUQJCTB4MDAwMQorCisvKgorICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCisgKi8KKyNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgVFRJX1FMMzU1UF9QSUQJCTB4MDNFOAkvKiBUVGkgUUwzNTVQIHBvd2VyIHN1cHBseSAqLworCisvKiBJbnRlcmJpb21ldHJpY3MgVVNCIEkvTyBCb2FyZCAqLworLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLworI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEICAgICAgMHgxMDAyCisjZGVmaW5lIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEIDB4MTAwNgorCisvKgorICogVGVzdG8gcHJvZHVjdHMgKGh0dHA6Ly93d3cudGVzdG8uY29tLykKKyAqIFN1Ym1pdHRlZCBieSBDb2xpbiBMZXJveQorICovCisjZGVmaW5lIFRFU1RPX1ZJRAkJCTB4MTI4RAorI2RlZmluZSBURVNUT19VU0JfSU5URVJGQUNFX1BJRAkJMHgwMDAxCisKKy8qCisgKiBNb2JpbGl0eSBFbGVjdHJvbmljcyBwcm9kdWN0cy4KKyAqLworI2RlZmluZSBNT0JJTElUWV9WSUQJCQkweDEzNDIKKyNkZWZpbmUgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQJCTB4MDIwMgkvKiBFYXNpRG9jayBVU0IgMjAwIHNlcmlhbCAqLworCisvKgorICogRklDIC8gT3Blbk1va28sIEluYy4gaHR0cDovL3dpa2kub3Blbm1va28ub3JnL3dpa2kvTmVvMTk3M19EZWJ1Z19Cb2FyZF92MworICogU3VibWl0dGVkIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+CisgKi8KKyNkZWZpbmUJRklDX1ZJRAkJCTB4MTQ1NworI2RlZmluZQlGSUNfTkVPMTk3M19ERUJVR19QSUQJMHg1MTE4CisKKy8qIE9saW1leCAqLworI2RlZmluZSBPTElNRVhfVklECQkJMHgxNUJBCisjZGVmaW5lIE9MSU1FWF9BUk1fVVNCX09DRF9QSUQJCTB4MDAwMworCisvKgorICogVGVsbGR1cyBUZWNobm9sb2dpZXMKKyAqLworI2RlZmluZSBURUxMRFVTX1ZJRAkJCTB4MTc4MQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgVEVMTERVU19URUxMU1RJQ0tfUElECQkweDBDMzAJLyogUkYgY29udHJvbCBkb25nbGUgNDMzIE1IeiB1c2luZyBGVDIzMlJMICovCisKKy8qCisgKiBCYXllciBBc2NlbnNpYSBDb250b3VyIGJsb29kIGdsdWNvc2UgbWV0ZXIgVVNCLWNvbnZlcnRlciBjYWJsZS4KKyAqIGh0dHA6Ly93aW5nbHVjb2ZhY3RzLmNvbS9jYWJsZXMvCisgKi8KKyNkZWZpbmUgQkFZRVJfVklEICAgICAgICAgICAgICAgICAgICAgIDB4MUE3OQorI2RlZmluZSBCQVlFUl9DT05UT1VSX0NBQkxFX1BJRCAgICAgICAgMHg2MDAxCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgRlRESSBSYW5nZQorICogQW55dGhpbmcgaW4gdGhpcyByYW5nZSB3aWxsIHVzZSBhbiBGVDIzMlJMLgorICovCisjZGVmaW5lIE1UWE9SQl9WSUQJCQkweDFCM0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMF9QSUQJMHgwMTAwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDFfUElECTB4MDEwMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAyX1BJRAkweDAxMDIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwM19QSUQJMHgwMTAzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDRfUElECTB4MDEwNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA1X1BJRAkweDAxMDUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNl9QSUQJMHgwMTA2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDdfUElECTB4MDEwNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA4X1BJRAkweDAxMDgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwOV9QSUQJMHgwMTA5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEFfUElECTB4MDEwQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBCX1BJRAkweDAxMEIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQ19QSUQJMHgwMTBDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMERfUElECTB4MDEwRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBFX1BJRAkweDAxMEUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRl9QSUQJMHgwMTBGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTBfUElECTB4MDExMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTExX1BJRAkweDAxMTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMl9QSUQJMHgwMTEyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTNfUElECTB4MDExMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE0X1BJRAkweDAxMTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNV9QSUQJMHgwMTE1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTZfUElECTB4MDExNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE3X1BJRAkweDAxMTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOF9QSUQJMHgwMTE4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTlfUElECTB4MDExOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFBX1BJRAkweDAxMUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQl9QSUQJMHgwMTFCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUNfUElECTB4MDExQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFEX1BJRAkweDAxMUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRV9QSUQJMHgwMTFFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUZfUElECTB4MDExRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIwX1BJRAkweDAxMjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMV9QSUQJMHgwMTIxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjJfUElECTB4MDEyMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIzX1BJRAkweDAxMjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNF9QSUQJMHgwMTI0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjVfUElECTB4MDEyNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI2X1BJRAkweDAxMjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyN19QSUQJMHgwMTI3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjhfUElECTB4MDEyOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI5X1BJRAkweDAxMjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQV9QSUQJMHgwMTJBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkJfUElECTB4MDEyQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJDX1BJRAkweDAxMkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRF9QSUQJMHgwMTJECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkVfUElECTB4MDEyRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJGX1BJRAkweDAxMkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMF9QSUQJMHgwMTMwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzFfUElECTB4MDEzMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMyX1BJRAkweDAxMzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzM19QSUQJMHgwMTMzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzRfUElECTB4MDEzNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM1X1BJRAkweDAxMzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNl9QSUQJMHgwMTM2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzdfUElECTB4MDEzNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM4X1BJRAkweDAxMzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzOV9QSUQJMHgwMTM5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0FfUElECTB4MDEzQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNCX1BJRAkweDAxM0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQ19QSUQJMHgwMTNDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0RfUElECTB4MDEzRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNFX1BJRAkweDAxM0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRl9QSUQJMHgwMTNGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDBfUElECTB4MDE0MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQxX1BJRAkweDAxNDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ml9QSUQJMHgwMTQyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDNfUElECTB4MDE0MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ0X1BJRAkweDAxNDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0NV9QSUQJMHgwMTQ1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDZfUElECTB4MDE0NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ3X1BJRAkweDAxNDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OF9QSUQJMHgwMTQ4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDlfUElECTB4MDE0OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRBX1BJRAkweDAxNEEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ql9QSUQJMHgwMTRCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNENfUElECTB4MDE0QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTREX1BJRAkweDAxNEQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0RV9QSUQJMHgwMTRFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEZfUElECTB4MDE0RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUwX1BJRAkweDAxNTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1MV9QSUQJMHgwMTUxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTJfUElECTB4MDE1MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUzX1BJRAkweDAxNTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NF9QSUQJMHgwMTU0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTVfUElECTB4MDE1NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU2X1BJRAkweDAxNTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1N19QSUQJMHgwMTU3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNThfUElECTB4MDE1OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU5X1BJRAkweDAxNTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1QV9QSUQJMHgwMTVBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUJfUElECTB4MDE1QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVDX1BJRAkweDAxNUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RF9QSUQJMHgwMTVECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUVfUElECTB4MDE1RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVGX1BJRAkweDAxNUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MF9QSUQJMHgwMTYwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjFfUElECTB4MDE2MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYyX1BJRAkweDAxNjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2M19QSUQJMHgwMTYzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjRfUElECTB4MDE2NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY1X1BJRAkweDAxNjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Nl9QSUQJMHgwMTY2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjdfUElECTB4MDE2NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY4X1BJRAkweDAxNjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2OV9QSUQJMHgwMTY5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkFfUElECTB4MDE2QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZCX1BJRAkweDAxNkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Q19QSUQJMHgwMTZDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkRfUElECTB4MDE2RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZFX1BJRAkweDAxNkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Rl9QSUQJMHgwMTZGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzBfUElECTB4MDE3MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcxX1BJRAkweDAxNzEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ml9QSUQJMHgwMTcyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzNfUElECTB4MDE3MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc0X1BJRAkweDAxNzQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3NV9QSUQJMHgwMTc1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzZfUElECTB4MDE3NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc3X1BJRAkweDAxNzcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OF9QSUQJMHgwMTc4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzlfUElECTB4MDE3OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdBX1BJRAkweDAxN0EKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ql9QSUQJMHgwMTdCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0NfUElECTB4MDE3QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdEX1BJRAkweDAxN0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3RV9QSUQJMHgwMTdFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0ZfUElECTB4MDE3RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgwX1BJRAkweDAxODAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4MV9QSUQJMHgwMTgxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODJfUElECTB4MDE4MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgzX1BJRAkweDAxODMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NF9QSUQJMHgwMTg0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODVfUElECTB4MDE4NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg2X1BJRAkweDAxODYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4N19QSUQJMHgwMTg3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODhfUElECTB4MDE4OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg5X1BJRAkweDAxODkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4QV9QSUQJMHgwMThBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEJfUElECTB4MDE4QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThDX1BJRAkweDAxOEMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RF9QSUQJMHgwMThECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEVfUElECTB4MDE4RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThGX1BJRAkweDAxOEYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MF9QSUQJMHgwMTkwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTFfUElECTB4MDE5MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkyX1BJRAkweDAxOTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5M19QSUQJMHgwMTkzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTRfUElECTB4MDE5NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk1X1BJRAkweDAxOTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Nl9QSUQJMHgwMTk2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTdfUElECTB4MDE5NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk4X1BJRAkweDAxOTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5OV9QSUQJMHgwMTk5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUFfUElECTB4MDE5QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlCX1BJRAkweDAxOUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Q19QSUQJMHgwMTlDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOURfUElECTB4MDE5RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlFX1BJRAkweDAxOUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Rl9QSUQJMHgwMTlGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTBfUElECTB4MDFBMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUExX1BJRAkweDAxQTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMl9QSUQJMHgwMUEyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTNfUElECTB4MDFBMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE0X1BJRAkweDAxQTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNV9QSUQJMHgwMUE1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTZfUElECTB4MDFBNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE3X1BJRAkweDAxQTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOF9QSUQJMHgwMUE4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTlfUElECTB4MDFBOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFBX1BJRAkweDAxQUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQl9QSUQJMHgwMUFCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUNfUElECTB4MDFBQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFEX1BJRAkweDAxQUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRV9QSUQJMHgwMUFFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUZfUElECTB4MDFBRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIwX1BJRAkweDAxQjAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMV9QSUQJMHgwMUIxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjJfUElECTB4MDFCMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIzX1BJRAkweDAxQjMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNF9QSUQJMHgwMUI0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjVfUElECTB4MDFCNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI2X1BJRAkweDAxQjYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCN19QSUQJMHgwMUI3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjhfUElECTB4MDFCOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI5X1BJRAkweDAxQjkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQV9QSUQJMHgwMUJBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkJfUElECTB4MDFCQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJDX1BJRAkweDAxQkMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRF9QSUQJMHgwMUJECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkVfUElECTB4MDFCRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJGX1BJRAkweDAxQkYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMF9QSUQJMHgwMUMwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzFfUElECTB4MDFDMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMyX1BJRAkweDAxQzIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDM19QSUQJMHgwMUMzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzRfUElECTB4MDFDNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM1X1BJRAkweDAxQzUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNl9QSUQJMHgwMUM2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzdfUElECTB4MDFDNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM4X1BJRAkweDAxQzgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDOV9QSUQJMHgwMUM5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0FfUElECTB4MDFDQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNCX1BJRAkweDAxQ0IKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQ19QSUQJMHgwMUNDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0RfUElECTB4MDFDRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNFX1BJRAkweDAxQ0UKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRl9QSUQJMHgwMUNGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDBfUElECTB4MDFEMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQxX1BJRAkweDAxRDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMl9QSUQJMHgwMUQyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDNfUElECTB4MDFEMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ0X1BJRAkweDAxRDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENV9QSUQJMHgwMUQ1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDZfUElECTB4MDFENgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ3X1BJRAkweDAxRDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOF9QSUQJMHgwMUQ4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDlfUElECTB4MDFEOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURBX1BJRAkweDAxREEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQl9QSUQJMHgwMURCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRENfUElECTB4MDFEQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUREX1BJRAkweDAxREQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERV9QSUQJMHgwMURFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREZfUElECTB4MDFERgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUwX1BJRAkweDAxRTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMV9QSUQJMHgwMUUxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTJfUElECTB4MDFFMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUzX1BJRAkweDAxRTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNF9QSUQJMHgwMUU0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTVfUElECTB4MDFFNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU2X1BJRAkweDAxRTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFN19QSUQJMHgwMUU3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRThfUElECTB4MDFFOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU5X1BJRAkweDAxRTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQV9QSUQJMHgwMUVBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUJfUElECTB4MDFFQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVDX1BJRAkweDAxRUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRF9QSUQJMHgwMUVECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUVfUElECTB4MDFFRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVGX1BJRAkweDAxRUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMF9QSUQJMHgwMUYwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjFfUElECTB4MDFGMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYyX1BJRAkweDAxRjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGM19QSUQJMHgwMUYzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjRfUElECTB4MDFGNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY1X1BJRAkweDAxRjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNl9QSUQJMHgwMUY2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjdfUElECTB4MDFGNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY4X1BJRAkweDAxRjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGOV9QSUQJMHgwMUY5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkFfUElECTB4MDFGQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZCX1BJRAkweDAxRkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQ19QSUQJMHgwMUZDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkRfUElECTB4MDFGRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZFX1BJRAkweDAxRkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRl9QSUQJMHgwMUZGCisKKworCisvKgorICogVGhlIE1vYmlsaXR5IExhYiAoVE1MKQorICogU3VibWl0dGVkIGJ5IFBpZXJyZSBDYXN0ZWxsYQorICovCisjZGVmaW5lIFRNTF9WSUQJCQkweDFCOTEJLyogVmVuZG9yIElEICovCisjZGVmaW5lIFRNTF9VU0JfU0VSSUFMX1BJRAkweDAwNjQJLyogVVNCIC0gU2VyaWFsIENvbnZlcnRlciAqLworCisvKiBBbHRpLTIgcHJvZHVjdHMgIGh0dHA6Ly93d3cuYWx0aS0yLmNvbSAqLworI2RlZmluZSBBTFRJMl9WSUQJMHgxQkM5CisjZGVmaW5lIEFMVEkyX04zX1BJRAkweDYwMDEJLyogTmVwdHVuZSAzICovCisKKy8qCisgKiBEcmVzZGVuIEVsZWt0cm9uaWMgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCisgKi8KKyNkZWZpbmUgREVfVklECQkJMHgxY2YxIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBTVEJfUElECQkJMHgwMDAxIC8qIFNlbnNvciBUZXJtaW5hbCBCb2FyZCAqLworI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCisKKy8qCisgKiBQYXBvdWNoIHByb2R1Y3RzIChodHRwOi8vd3d3LnBhcG91Y2guY29tLykKKyAqIFN1Ym1pdHRlZCBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuCisgKi8KKworI2RlZmluZSBQQVBPVUNIX1ZJRAkJCTB4NTA1MAkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgUEFQT1VDSF9UTVVfUElECQkJMHgwNDAwCS8qIFRNVSBVU0IgVGhlcm1vbWV0ZXIgKi8KKyNkZWZpbmUgUEFQT1VDSF9RVUlETzR4NF9QSUQJCTB4MDkwMAkvKiBRdWlkbyA0LzQgTW9kdWxlICovCisKKy8qCisgKiBNYXJ2ZWxsIFNoZWV2YVBsdWcKKyAqLworI2RlZmluZSBNQVJWRUxMX1ZJRAkJMHg5ZTg4CisjZGVmaW5lIE1BUlZFTExfU0hFRVZBUExVR19QSUQJMHg5ZThmCisKKy8qCisgKiBFdm9sdXRpb24gUm9ib3RpY3MgcHJvZHVjdHMgKGh0dHA6Ly93d3cuZXZvbHV0aW9uLmNvbS8pLgorICogU3VibWl0dGVkIGJ5IFNoYXduIE0uIExhdmVsbGUuCisgKi8KKyNkZWZpbmUgRVZPTFVUSU9OX1ZJRAkJMHhERUVFCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBFVk9MVVRJT05fRVIxX1BJRAkweDAzMDAJLyogRVIxIENvbnRyb2wgTW9kdWxlICovCisjZGVmaW5lIEVWT184VTIzMkFNX1BJRAkweDAyRkYJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTIgKEZUMjMyQU0pKi8KKyNkZWZpbmUgRVZPX0hZQlJJRF9QSUQJCTB4MDMwMgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKEZUMjMyQk0pKi8KKyNkZWZpbmUgRVZPX1JDTTRfUElECQkweDAzMDMJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCBiYmUwMDVjLi5mMWVhM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkKIAkJc3RhcnRfaW8gPSBmYWxzZTsKIAllbHNlIHsKLQkJc3RhcnRfaW8gPSAoX19rZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbykgIT0gMCk7CisJCXN0YXJ0X2lvID0gKGtmaWZvX2xlbigmcG9ydC0+d3JpdGVfZmlmbykgIT0gMCk7CiAJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gc3RhcnRfaW87CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQljb3VudCA9IGtmaWZvX2dldChwb3J0LT53cml0ZV9maWZvLCBkYXRhLCBwb3J0LT5idWxrX291dF9zaXplKTsKKwljb3VudCA9IGtmaWZvX291dF9sb2NrZWQoJnBvcnQtPndyaXRlX2ZpZm8sIGRhdGEsIHBvcnQtPmJ1bGtfb3V0X3NpemUsICZwb3J0LT5sb2NrKTsKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwgZGF0YSk7CiAKIAkvKiBzZXQgdXAgb3VyIHVyYiAqLwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCXJldHVybiB1c2Jfc2VyaWFsX211bHRpX3VyYl93cml0ZSh0dHksIHBvcnQsCiAJCQkJCQkgIGJ1ZiwgY291bnQpOwogCi0JY291bnQgPSBrZmlmb19wdXQocG9ydC0+d3JpdGVfZmlmbywgYnVmLCBjb3VudCk7CisJY291bnQgPSBrZmlmb19pbl9sb2NrZWQoJnBvcnQtPndyaXRlX2ZpZm8sIGJ1ZiwgY291bnQsICZwb3J0LT5sb2NrKTsKIAlyZXN1bHQgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfc3RhcnQocG9ydCk7CiAKIAlpZiAocmVzdWx0ID49IDApCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJCQkoc2VyaWFsLT50eXBlLT5tYXhfaW5fZmxpZ2h0X3VyYnMgLQogCQkJCSBwb3J0LT51cmJzX2luX2ZsaWdodCk7CiAJfSBlbHNlIGlmIChzZXJpYWwtPm51bV9idWxrX291dCkKLQkJcm9vbSA9IHBvcnQtPndyaXRlX2ZpZm8tPnNpemUgLSBfX2tmaWZvX2xlbihwb3J0LT53cml0ZV9maWZvKTsKKwkJcm9vbSA9IGtmaWZvX2F2YWlsKCZwb3J0LT53cml0ZV9maWZvKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKIAlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCByb29tKTsKQEAgLTM5MSw3ICszOTEsNyBAQAogCQljaGFycyA9IHBvcnQtPnR4X2J5dGVzX2ZsaWdodDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCi0JCWNoYXJzID0ga2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pOworCQljaGFycyA9IGtmaWZvX2xlbigmcG9ydC0+d3JpdGVfZmlmbyk7CiAKIAlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBjaGFycyk7CiAJcmV0dXJuIGNoYXJzOwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCWlmIChzdGF0dXMpIHsKIAkJCWRiZygiJXMgLSBub256ZXJvIG11bHRpLXVyYiB3cml0ZSBidWxrIHN0YXR1cyAiCiAJCQkJInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwotCQkJa2ZpZm9fcmVzZXQocG9ydC0+d3JpdGVfZmlmbyk7CisJCQlrZmlmb19yZXNldF9vdXQoJnBvcnQtPndyaXRlX2ZpZm8pOwogCQl9IGVsc2UKIAkJCXVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9zdGFydChwb3J0KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwppbmRleCA0ODVmYTljLi4yY2ZlMjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKQEAgLTEyNyw4ICsxMjcsOSBAQAogI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVM5TUwyXzQJMHhBQzMwCiAjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfMgkweEFDMzEKICNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTUFRMNF80CTB4QUMzMgotI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yICAgICAgIDB4QUM0MgotI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80ICAgICAgIDB4QUM0NAorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yCTB4QUM0MgorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80CTB4QUM0NAorI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMMl80CTB4QUMyNAogCiAvKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzCiAgKiBBVEVOIFVDMjMyNCBkZXZpY2UgdXNpbmcgTW9zY2hpcCBNQ1M3ODQwCkBAIC0xOTEsNiArMTkyLDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNQVEw0XzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfNCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEwyXzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzI0KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEX1VDMjMyMil9LAogCXt9CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTIwNyw2ICsyMDksNyBAQAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF80KX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDJfNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF9VQzIzMjQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzIyKX0sCiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDlhMmI5MDMuLjZlOTRhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTM0MCw2ICszNDAsMTAgQEAKICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfVkVORE9SX0lECQkweDFjOWUKICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQJCTB4OTYwMwogCisvKiBIYWllciBwcm9kdWN0cyAqLworI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCisjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBKSB9LApAQCAtNjQxLDYgKzY0NSw3IEBACiAJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAogCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAogCXsgVVNCX0RFVklDRShGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSB9LAorCXsgVVNCX0RFVklDRShIQUlFUl9WRU5ET1JfSUQsIEhBSUVSX1BST0RVQ1RfQ0UxMDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNDU0M2YzNS4uMzNjODVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC01OTUsOCArNTk1LDcgQEAKIAl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKIAl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CiAJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKLQlpZiAoIUlTX0VSUihwb3J0LT53cml0ZV9maWZvKSAmJiBwb3J0LT53cml0ZV9maWZvKQotCQlrZmlmb19mcmVlKHBvcnQtPndyaXRlX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnBvcnQtPndyaXRlX2ZpZm8pOwogCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKIAlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOwogCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOwpAQCAtOTM5LDkgKzkzOCw3IEBACiAJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJfQotCQlwb3J0LT53cml0ZV9maWZvID0ga2ZpZm9fYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMLAotCQkJJnBvcnQtPmxvY2spOwotCQlpZiAoSVNfRVJSKHBvcnQtPndyaXRlX2ZpZm8pKQorCQlpZiAoa2ZpZm9fYWxsb2MoJnBvcnQtPndyaXRlX2ZpZm8sIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpCiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CiAJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBiYjVmYmVkLi41YTVjMzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC02MTQsNiArNjE0LDIxIEBACiAJIFRoaXMgZGlzcGxheSBpcyBhIFFWR0EgMzIweDI0MCAyNC1iaXQgUkdCIGRpc3BsYXkgaW50ZXJmYWNlZCBieSBhbiA4LWJpdCB3aWRlIFBQSQogCSBJdCB1c2VzIFBQSVswLi43XSBQUElfRlMxLCBQUElfRlMyIGFuZCBQUElfQ0xLLgogCitjb25maWcgRkJfQkZJTl9MUTAzNVExCisJdHJpc3RhdGUgIlNIQVJQIExRMDM1UTFESDAyIFRGVCBMQ0QiCisJZGVwZW5kcyBvbiBGQiAmJiBCTEFDS0ZJTiAmJiBTUEkKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEJGSU5fR1BUSU1FUlMKKwloZWxwCisJICBUaGlzIGlzIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBhIFNIQVJQIExRMDM1UTFESDAyIFRGVCBkaXNwbGF5IGZvdW5kIG9uCisJICB0aGUgQmxhY2tmaW4gTGFuZHNjYXBlIExDRCBFWi1FeHRlbmRlciBDYXJkLgorCSAgVGhpcyBkaXNwbGF5IGlzIGEgUVZHQSAzMjB4MjQwIDE4LWJpdCBSR0IgZGlzcGxheSBpbnRlcmZhY2VkIGJ5IGFuIDE2LWJpdCB3aWRlIFBQSQorCSAgSXQgdXNlcyBQUElbMC4uMTVdIFBQSV9GUzEsIFBQSV9GUzIgYW5kIFBQSV9DTEsuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJmaW4tbHEwMzVxMS1mYi4KIAogY29uZmlnIEZCX1NUSQogCXRyaXN0YXRlICJIUCBTVEkgZnJhbWUgYnVmZmVyIGRldmljZSBzdXBwb3J0IgpAQCAtMjEzMSw3ICsyMTQ2LDcgQEAKIAkgIHRoZSBib290bG9hZGVyLgogCiBjb25maWcgRkJfTVNNCi0JdHJpc3RhdGUKKwl0cmlzdGF0ZSAiTVNNIEZyYW1lYnVmZmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBBUkNIX01TTQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCAwZjhkYTMzLi40ZWNiMzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTEzNyw2ICsxMzcsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1ZHQTE2KSAgICAgICAgICAgICs9IHZnYTE2ZmIubwogb2JqLSQoQ09ORklHX0ZCX09GKSAgICAgICAgICAgICAgICs9IG9mZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGNTRYX0xRMDQzKQkgICs9IGJmNTR4LWxxMDQzZmIubworb2JqLSQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgICAgICs9IGJmaW4tbHEwMzVxMS1mYi5vCiBvYmotJChDT05GSUdfRkJfQkZJTl9UMzUwTUNRQikJICArPSBiZmluLXQzNTBtY3FiLWZiLm8KIG9iai0kKENPTkZJR19GQl9NWDMpCQkgICs9IG14M2ZiLm8KIG9iai0kKENPTkZJR19GQl9EQThYWCkJCSAgKz0gZGE4eHgtZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCmluZGV4IGFkMDVkYTUuLjg2ZDk1YzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCkBAIC0xNSw3ICsxNSw3IEBACiAKIHN0cnVjdCBhZHA1NTIwX2JsIHsKIAlzdHJ1Y3QgZGV2aWNlICptYXN0ZXI7Ci0Jc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmcm9tX2RhdGEgKnBkYXRhOworCXN0cnVjdCBhZHA1NTIwX2JhY2tsaWdodF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAl1bnNpZ25lZCBsb25nIGNhY2hlZF9kYXlsaWdodF9tYXg7CiAJaW50IGlkOwpAQCAtMzEsMjkgKzMxLDMwIEBACiAJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpIHsKIAkJaWYgKChicmlnaHRuZXNzID4gMCkgJiYgKGJyaWdodG5lc3MgPCBBRFA1MDIwX01BWF9CUklHSFRORVNTKSkgewogCQkJLyogRGlzYWJsZSBBbWJpZW50IExpZ2h0IGF1dG8gYWRqdXN0ICovCi0JCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhtYXN0ZXIsIEJMX0NPTlRST0wsCi0JCQkJCUJMX0FVVE9fQURKKTsKLQkJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgREFZTElHSFRfTUFYLCBicmlnaHRuZXNzKTsKKwkJCXJldCB8PSBhZHA1NTIwX2Nscl9iaXRzKG1hc3RlciwgQURQNTUyMF9CTF9DT05UUk9MLAorCQkJCQlBRFA1NTIwX0JMX0FVVE9fQURKKTsKKwkJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQURQNTUyMF9EQVlMSUdIVF9NQVgsCisJCQkJCWJyaWdodG5lc3MpOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIE1BWF9CUklHSFRORVNTIC0+IEVuYWJsZSBBbWJpZW50IExpZ2h0IGF1dG8gYWRqdXN0CiAJCQkgKiByZXN0b3JlIGRheWxpZ2h0IGwzIHN5c2ZzIGJyaWdodG5lc3MKIAkJCSAqLwotCQkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsCisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfREFZTElHSFRfTUFYLAogCQkJCQkgZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7Ci0JCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIEJMX0NPTlRST0wsCi0JCQkJCSBCTF9BVVRPX0FESik7CisJCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIEFEUDU1MjBfQkxfQ09OVFJPTCwKKwkJCQkJIEFEUDU1MjBfQkxfQVVUT19BREopOwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsIGJyaWdodG5lc3MpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfREFZTElHSFRfTUFYLCBicmlnaHRuZXNzKTsKIAl9CiAKIAlpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmIGJyaWdodG5lc3MgPT0gMCkKIAkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMobWFzdGVyLAotCQkJCU1PREVfU1RBVFVTLCBESU1fRU4pOworCQkJCUFEUDU1MjBfTU9ERV9TVEFUVVMsIEFEUDU1MjBfRElNX0VOKTsKIAllbHNlIGlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPT0gMCAmJiBicmlnaHRuZXNzKQogCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhtYXN0ZXIsCi0JCQkJTU9ERV9TVEFUVVMsIERJTV9FTik7CisJCQkJQURQNTUyMF9NT0RFX1NUQVRVUywgQURQNTUyMF9ESU1fRU4pOwogCiAJaWYgKCFyZXQpCiAJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CkBAIC03OSwxMiArODAsMTIgQEAKIAlpbnQgZXJyb3I7CiAJdWludDhfdCByZWdfdmFsOwogCi0JZXJyb3IgPSBhZHA1NTIwX3JlYWQoZGF0YS0+bWFzdGVyLCBCTF9WQUxVRSwgJnJlZ192YWwpOworCWVycm9yID0gYWRwNTUyMF9yZWFkKGRhdGEtPm1hc3RlciwgQURQNTUyMF9CTF9WQUxVRSwgJnJlZ192YWwpOwogCiAJcmV0dXJuIGVycm9yID8gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzIDogcmVnX3ZhbDsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFkcDU1MjBfYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFkcDU1MjBfYmxfb3BzID0gewogCS51cGRhdGVfc3RhdHVzCT0gYWRwNTUyMF9ibF91cGRhdGVfc3RhdHVzLAogCS5nZXRfYnJpZ2h0bmVzcwk9IGFkcDU1MjBfYmxfZ2V0X2JyaWdodG5lc3MsCiB9OwpAQCAtOTMsMzMgKzk0LDQ2IEBACiB7CiAJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CiAJc3RydWN0IGRldmljZSAqbWFzdGVyID0gZGF0YS0+bWFzdGVyOwotCXN0cnVjdCBhZHA1NTIwX2JhY2tsaWdodF9wbGF0ZnJvbV9kYXRhICpwZGF0YSA9IGRhdGEtPnBkYXRhOworCXN0cnVjdCBhZHA1NTIwX2JhY2tsaWdodF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRhdGEtPnBkYXRhOwogCWludCByZXQgPSAwOwogCi0JcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsIHBkYXRhLT5sMV9kYXlsaWdodF9tYXgpOwotCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgREFZTElHSFRfRElNLCBwZGF0YS0+bDFfZGF5bGlnaHRfZGltKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfREFZTElHSFRfTUFYLAorCQkJCXBkYXRhLT5sMV9kYXlsaWdodF9tYXgpOworCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQURQNTUyMF9EQVlMSUdIVF9ESU0sCisJCQkJcGRhdGEtPmwxX2RheWxpZ2h0X2RpbSk7CiAKIAlpZiAocGRhdGEtPmVuX2FtYmxfc2VucykgewogCQlkYXRhLT5jYWNoZWRfZGF5bGlnaHRfbWF4ID0gcGRhdGEtPmwxX2RheWxpZ2h0X21heDsKLQkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBPRkZJQ0VfTUFYLCBwZGF0YS0+bDJfb2ZmaWNlX21heCk7Ci0JCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgT0ZGSUNFX0RJTSwgcGRhdGEtPmwyX29mZmljZV9kaW0pOwotCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBUktfTUFYLCBwZGF0YS0+bDNfZGFya19tYXgpOwotCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBUktfRElNLCBwZGF0YS0+bDNfZGFya19kaW0pOwotCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEwyX1RSSVAsIHBkYXRhLT5sMl90cmlwKTsKLQkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMMl9IWVMsIHBkYXRhLT5sMl9oeXN0KTsKLQkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMM19UUklQLCBwZGF0YS0+bDNfdHJpcCk7Ci0JCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDNfSFlTLCBwZGF0YS0+bDNfaHlzdCk7Ci0JCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQUxTX0NNUFJfQ0ZHLAotCQkJQUxTX0NNUFJfQ0ZHX1ZBTChwZGF0YS0+YWJtbF9maWx0LCBMM19FTikpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfT0ZGSUNFX01BWCwKKwkJCQlwZGF0YS0+bDJfb2ZmaWNlX21heCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQURQNTUyMF9PRkZJQ0VfRElNLAorCQkJCXBkYXRhLT5sMl9vZmZpY2VfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBBRFA1NTIwX0RBUktfTUFYLAorCQkJCXBkYXRhLT5sM19kYXJrX21heCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQURQNTUyMF9EQVJLX0RJTSwKKwkJCQlwZGF0YS0+bDNfZGFya19kaW0pOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfTDJfVFJJUCwKKwkJCQlwZGF0YS0+bDJfdHJpcCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQURQNTUyMF9MMl9IWVMsCisJCQkJcGRhdGEtPmwyX2h5c3QpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfTDNfVFJJUCwKKwkJCQkgcGRhdGEtPmwzX3RyaXApOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfTDNfSFlTLAorCQkJCXBkYXRhLT5sM19oeXN0KTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBBRFA1NTIwX0FMU19DTVBSX0NGRywKKwkJCQlBTFNfQ01QUl9DRkdfVkFMKHBkYXRhLT5hYm1sX2ZpbHQsCisJCQkJQURQNTUyMF9MM19FTikpOwogCX0KIAotCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQkxfQ09OVFJPTCwKLQkJCUJMX0NUUkxfVkFMKHBkYXRhLT5mYWRlX2xlZF9sYXcsIHBkYXRhLT5lbl9hbWJsX3NlbnMpKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFEUDU1MjBfQkxfQ09OVFJPTCwKKwkJCUJMX0NUUkxfVkFMKHBkYXRhLT5mYWRlX2xlZF9sYXcsCisJCQkJCXBkYXRhLT5lbl9hbWJsX3NlbnMpKTsKIAotCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQkxfRkFERSwgRkFERV9WQUwocGRhdGEtPmZhZGVfaW4sCisJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBBRFA1NTIwX0JMX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAogCQkJcGRhdGEtPmZhZGVfb3V0KSk7CiAKLQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTiB8IERJTV9FTik7CisJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMobWFzdGVyLCBBRFA1NTIwX01PREVfU1RBVFVTLAorCQkJQURQNTUyMF9CTF9FTiB8IEFEUDU1MjBfRElNX0VOKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTYsMjkgKzE3MCwzMSBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBEQVJLX01BWCk7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgQURQNTUyMF9EQVJLX01BWCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGFya19tYXhfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgREFSS19NQVgpOworCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQNTUyMF9EQVJLX01BWCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoZGFya19tYXgsIDA2NjQsIGFkcDU1MjBfYmxfZGFya19tYXhfc2hvdywKIAkJCWFkcDU1MjBfYmxfZGFya19tYXhfc3RvcmUpOwogCiBzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBPRkZJQ0VfTUFYKTsKKwlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBBRFA1NTIwX09GRklDRV9NQVgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9tYXhfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgT0ZGSUNFX01BWCk7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBBRFA1NTIwX09GRklDRV9NQVgpOwogfQogc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9tYXgsIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93LAogCQkJYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3N0b3JlKTsKQEAgLTE4NiwxNiArMjAyLDE3IEBACiBzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RheWxpZ2h0X21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFZTElHSFRfTUFYKTsKKwlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBBRFA1NTIwX0RBWUxJR0hUX01BWCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJmRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOwotCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgREFZTElHSFRfTUFYKTsKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDU1MjBfREFZTElHSFRfTUFYKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihkYXlsaWdodF9tYXgsIDA2NjQsIGFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3Nob3csCiAJCQlhZHA1NTIwX2JsX2RheWxpZ2h0X21heF9zdG9yZSk7CkBAIC0yMDMsMTQgKzIyMCwxNCBAQAogc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFSS19ESU0pOworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIEFEUDU1MjBfREFSS19ESU0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgREFSS19ESU0pOworCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQNTUyMF9EQVJLX0RJTSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoZGFya19kaW0sIDA2NjQsIGFkcDU1MjBfYmxfZGFya19kaW1fc2hvdywKIAkJCWFkcDU1MjBfYmxfZGFya19kaW1fc3RvcmUpOwpAQCAtMjE4LDI5ICsyMzUsMjkgQEAKIHN0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgT0ZGSUNFX0RJTSk7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgQURQNTUyMF9PRkZJQ0VfRElNKTsKIH0KIAogc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9vZmZpY2VfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgT0ZGSUNFX0RJTSk7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBBRFA1NTIwX09GRklDRV9ESU0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9kaW0sIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93LAogCQkJYWRwNTUyMF9ibF9vZmZpY2VfZGltX3N0b3JlKTsKIAogc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBEQVlMSUdIVF9ESU0pOworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIEFEUDU1MjBfREFZTElHSFRfRElNKTsKIH0KIAogc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9ESU0pOworCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQNTUyMF9EQVlMSUdIVF9ESU0pOwogfQogc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdywKIAkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKTsKQEAgLTMxNiw3ICszMzMsNyBAQAogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOwogCi0JYWRwNTUyMF9jbHJfYml0cyhkYXRhLT5tYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTik7CisJYWRwNTUyMF9jbHJfYml0cyhkYXRhLT5tYXN0ZXIsIEFEUDU1MjBfTU9ERV9TVEFUVVMsIEFEUDU1MjBfQkxfRU4pOwogCiAJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYmwtPmRldi5rb2JqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwppbmRleCAyYzNiZGZjLi5kNzY5YjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpAQCAtNjEsNyArNjEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYWR4X2JhY2tsaWdodF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYWR4X2JhY2tsaWdodF9vcHMgPSB7CiAJLm9wdGlvbnMgPSAwLAogCS51cGRhdGVfc3RhdHVzID0gYWR4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAogCS5nZXRfYnJpZ2h0bmVzcyA9IGFkeF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2F0bWVsLXB3bS1ibC5jCmluZGV4IDJjZjdiYTUuLmY2MjVmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2F0bWVsLXB3bS1ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2F0bWVsLXB3bS1ibC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlyZXR1cm4gcHdtX2NoYW5uZWxfZW5hYmxlKCZwd21ibC0+cHdtYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhdG1lbF9wd21fYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGF0bWVsX3B3bV9ibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gYXRtZWxfcHdtX2JsX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gYXRtZWxfcHdtX2JsX3NldF9pbnRlbnNpdHksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwppbmRleCA2NjE1YWM3Li4xODgyOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAgKiBFUlJfUFRSKCkgb3IgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgZGV2aWNlLgogICovCiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLAotCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHZvaWQgKmRldmRhdGEsIHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpCisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwgdm9pZCAqZGV2ZGF0YSwgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqbmV3X2JkOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKaW5kZXggOTY3NzQ5NC4uYjRiY2Y4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjb3JnaV9sY2RfbGltaXRfaW50ZW5zaXR5KTsKIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGNvcmdpX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjb3JnaV9ibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzCT0gY29yZ2lfYmxfZ2V0X2ludGVuc2l0eSwKIAkudXBkYXRlX3N0YXR1cyAgPSBjb3JnaV9ibF91cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jcl9ibGxjZC5jCmluZGV4IGI5ZmU2MmIuLmRhODZkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY3JfYmxsY2QuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJcmV0dXJuIGludGVuc2l0eTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGNyX2JhY2tsaWdodF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgY3JfYmFja2xpZ2h0X29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBjcl9iYWNrbGlnaHRfZ2V0X2ludGVuc2l0eSwKIAkudXBkYXRlX3N0YXR1cyA9IGNyX2JhY2tsaWdodF9zZXRfaW50ZW5zaXR5LAogfTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogCWlmIChJU19FUlIobGRwKSkgewogCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmRwKTsKIAkJcGNpX2Rldl9wdXQobHBjX2Rldik7Ci0JCXJldHVybiBQVFJfRVJSKGJkcCk7CisJCXJldHVybiBQVFJfRVJSKGxkcCk7CiAJfQogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGxwY19kZXYsIENSVk1MX1JFR19HUElPQkFSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwppbmRleCA3ZmNiMGViLi43NGNkYzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwpAQCAtOTUsNyArOTUsNyBAQAogCXJldHVybiBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBkYTkwM3hfYmFja2xpZ2h0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBkYTkwM3hfYmFja2xpZ2h0X29wcyA9IHsKIAkudXBkYXRlX3N0YXR1cwk9IGRhOTAzeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKIAkuZ2V0X2JyaWdodG5lc3MJPSBkYTkwM3hfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAogfTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9nZW5lcmljX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9nZW5lcmljX2JsLmMKaW5kZXggNmQyN2Y2Mi4uZTZkMzQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ2VuZXJpY19ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dlbmVyaWNfYmwuYwpAQCAtNzAsNyArNzAsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjb3JnaWJsX2xpbWl0X2ludGVuc2l0eSk7CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBnZW5lcmljYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGdlbmVyaWNibF9vcHMgPSB7CiAJLm9wdGlvbnMgPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLmdldF9icmlnaHRuZXNzID0gZ2VuZXJpY2JsX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gZ2VuZXJpY2JsX3NlbmRfaW50ZW5zaXR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggN2ZiNGVlZi4uZjdjYzUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC05OCw3ICs5OCw3IEBACiAJcmV0dXJuIGN1cnJlbnRfaW50ZW5zaXR5OwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgaHA2ODBibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgaHA2ODBibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gaHA2ODBibF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IGhwNjgwYmxfc2V0X2ludGVuc2l0eSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMKaW5kZXggN2FlZDI1Ni4uZGI5MDcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2pvcm5hZGE3MjBfYmwuYwpAQCAtOTMsNyArOTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBqb3JuYWRhX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBqb3JuYWRhX2JsX29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBqb3JuYWRhX2JsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzID0gam9ybmFkYV9ibF91cGRhdGVfc3RhdHVzLAogCS5vcHRpb25zID0gQkxfQ09SRV9TVVNQRU5EUkVTVU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQva2IzODg2X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwppbmRleCBhMzhmZGExLi45MzllN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmV0dXJuIGtiMzg4NmJsX2ludGVuc2l0eTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGtiMzg4NmJsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBrYjM4ODZibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0ga2IzODg2YmxfZ2V0X2ludGVuc2l0eSwKIAkudXBkYXRlX3N0YXR1cyAgPSBrYjM4ODZibF9zZW5kX2ludGVuc2l0eSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCmluZGV4IGE0ODJkZDcuLjliM2JlNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAlpbnQgcG93ZXIgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKIAlzaXplX3Qgc2l6ZSA9IGVuZHAgLSBidWY7CiAKLQlpZiAoKmVuZHAgJiYgaXNzcGFjZSgqZW5kcCkpCisJaWYgKGlzc3BhY2UoKmVuZHApKQogCQlzaXplKys7CiAJaWYgKHNpemUgIT0gY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJaW50IGNvbnRyYXN0ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CiAJc2l6ZV90IHNpemUgPSBlbmRwIC0gYnVmOwogCi0JaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCWlmIChpc3NwYWNlKCplbmRwKSkKIAkJc2l6ZSsrOwogCWlmIChzaXplICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKaW5kZXggNmI0ODhiOC4uMDBhOTU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXJldHVybiBjdXJyZW50X2ludGVuc2l0eTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGxvY29tb2JsX2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgbG9jb21vYmxfZGF0YSA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBsb2NvbW9sY2RfZ2V0X2ludGVuc2l0eSwKIAkudXBkYXRlX3N0YXR1cyAgPSBsb2NvbW9sY2Rfc2V0X2ludGVuc2l0eSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKaW5kZXggOWVkYjhkNy4uMmU3OGIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYwpAQCAtMzMsNyArMzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW9zdGFydDsKIAl1bnNpZ25lZCBsb25nIGlvbGVuOwogCS8qIEJhY2tsaWdodCBvcGVyYXRpb25zIHN0cnVjdHVyZS4gKi8KLQlzdHJ1Y3QgYmFja2xpZ2h0X29wcyBiYWNrbGlnaHRfb3BzOworCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGJhY2tsaWdodF9vcHM7CiB9OwogCiAvKiBNb2R1bGUgcGFyYW1ldGVycy4gKi8KQEAgLTIyMCw2ICsyMjAsMjQgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsMyIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSwzIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCisJfSwKKwl7CisJCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCisJCS5pZGVudAkJPSAiTWFjQm9va1BybyA1LDQiLAorCQkubWF0Y2hlcwk9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUsNCIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAorCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAogCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSw1IiwKIAkJLm1hdGNoZXMJPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvb21hcDFfYmwuYwppbmRleCA4NjkzZTVmLi40MDljYTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L29tYXAxX2JsLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXJldHVybiBibC0+Y3VycmVudF9pbnRlbnNpdHk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBvbWFwYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIG9tYXBibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gb21hcGJsX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gb21hcGJsX3VwZGF0ZV9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHJvZ2Vhcl9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHJvZ2Vhcl9ibC5jCmluZGV4IDllZGFmMjRmLi4wNzU3ODZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHJvZ2Vhcl9ibC5jCkBAIC01NCw3ICs1NCw3IEBACiAJcmV0dXJuIGludGVuc2l0eSAtIEhXX0xFVkVMX01JTjsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHByb2dlYXJibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgcHJvZ2VhcmJsX29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBwcm9nZWFyYmxfZ2V0X2ludGVuc2l0eSwKIAkudXBkYXRlX3N0YXR1cyA9IHByb2dlYXJibF9zZXRfaW50ZW5zaXR5LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3B3bV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKaW5kZXggODg3MTY2Mi4uOWQyZWMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKQEAgLTIyLDggKzIyLDEwIEBACiAKIHN0cnVjdCBwd21fYmxfZGF0YSB7CiAJc3RydWN0IHB3bV9kZXZpY2UJKnB3bTsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXVuc2lnbmVkIGludAkJcGVyaW9kOwotCWludAkJCSgqbm90aWZ5KShpbnQgYnJpZ2h0bmVzcyk7CisJaW50CQkJKCpub3RpZnkpKHN0cnVjdCBkZXZpY2UgKiwKKwkJCQkJICBpbnQgYnJpZ2h0bmVzcyk7CiB9OwogCiBzdGF0aWMgaW50IHB3bV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCkBAIC0zOSw3ICs0MSw3IEBACiAJCWJyaWdodG5lc3MgPSAwOwogCiAJaWYgKHBiLT5ub3RpZnkpCi0JCWJyaWdodG5lc3MgPSBwYi0+bm90aWZ5KGJyaWdodG5lc3MpOworCQlicmlnaHRuZXNzID0gcGItPm5vdGlmeShwYi0+ZGV2LCBicmlnaHRuZXNzKTsKIAogCWlmIChicmlnaHRuZXNzID09IDApIHsKIAkJcHdtX2NvbmZpZyhwYi0+cHdtLCAwLCBwYi0+cGVyaW9kKTsKQEAgLTU2LDcgKzU4LDcgQEAKIAlyZXR1cm4gYmwtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBwd21fYmFja2xpZ2h0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBwd21fYmFja2xpZ2h0X29wcyA9IHsKIAkudXBkYXRlX3N0YXR1cwk9IHB3bV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKIAkuZ2V0X2JyaWdodG5lc3MJPSBwd21fYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAogfTsKQEAgLTg4LDYgKzkwLDcgQEAKIAogCXBiLT5wZXJpb2QgPSBkYXRhLT5wd21fcGVyaW9kX25zOwogCXBiLT5ub3RpZnkgPSBkYXRhLT5ub3RpZnk7CisJcGItPmRldiA9ICZwZGV2LT5kZXY7CiAKIAlwYi0+cHdtID0gcHdtX3JlcXVlc3QoZGF0YS0+cHdtX2lkLCAiYmFja2xpZ2h0Iik7CiAJaWYgKElTX0VSUihwYi0+cHdtKSkgewpAQCAtMTQ2LDcgKzE0OSw3IEBACiAJc3RydWN0IHB3bV9ibF9kYXRhICpwYiA9IGRldl9nZXRfZHJ2ZGF0YSgmYmwtPmRldik7CiAKIAlpZiAocGItPm5vdGlmeSkKLQkJcGItPm5vdGlmeSgwKTsKKwkJcGItPm5vdGlmeShwYi0+ZGV2LCAwKTsKIAlwd21fY29uZmlnKHBiLT5wd20sIDAsIHBiLT5wZXJpb2QpOwogCXB3bV9kaXNhYmxlKHBiLT5wd20pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jCmluZGV4IDQzZWRiYWQuLmUxNGNlNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2JsLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAlyZXR1cm4gcHJvcHMtPmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcwkJPSB0b3NhX2JsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzCQk9IHRvc2FfYmxfdXBkYXRlX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCmluZGV4IDQ2N2JkYjcuLmUzMmFkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlyZXR1cm4gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgd204MzF4X2JhY2tsaWdodF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgd204MzF4X2JhY2tsaWdodF9vcHMgPSB7CiAJLm9wdGlvbnMgPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLnVwZGF0ZV9zdGF0dXMJPSB3bTgzMXhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCiAJLmdldF9icmlnaHRuZXNzCT0gd204MzF4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmZpbi1scTAzNXExLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTBjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jCkBAIC0wLDAgKzEsODI2IEBACisvKgorICogQmxhY2tmaW4gTENEIEZyYW1lYnVmZmVyIGRyaXZlciBTSEFSUCBMUTAzNVExREgwMgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImJmaW4tbHEwMzVxMSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgRFJJVkVSX05BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9sY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorI2luY2x1ZGUgPGFzbS9ncHRpbWVycy5oPgorCisjaW5jbHVkZSA8YXNtL2JmaW4tbHEwMzVxMS5oPgorCisjaWYgZGVmaW5lZChCRjUzM19GQU1JTFkpIHx8IGRlZmluZWQoQkY1MzhfRkFNSUxZKQorI2RlZmluZSBUSU1FUl9IU1lOQ19pZAkJCVRJTUVSMV9pZAorI2RlZmluZSBUSU1FUl9IU1lOQ2JpdAkJCVRJTUVSMWJpdAorI2RlZmluZSBUSU1FUl9IU1lOQ19TVEFUVVNfVFJVTgkJVElNRVJfU1RBVFVTX1RSVU4xCisjZGVmaW5lIFRJTUVSX0hTWU5DX1NUQVRVU19USU1JTAlUSU1FUl9TVEFUVVNfVElNSUwxCisjZGVmaW5lIFRJTUVSX0hTWU5DX1NUQVRVU19UT1ZGCQlUSU1FUl9TVEFUVVNfVE9WRjEKKworI2RlZmluZSBUSU1FUl9WU1lOQ19pZAkJCVRJTUVSMl9pZAorI2RlZmluZSBUSU1FUl9WU1lOQ2JpdAkJCVRJTUVSMmJpdAorI2RlZmluZSBUSU1FUl9WU1lOQ19TVEFUVVNfVFJVTgkJVElNRVJfU1RBVFVTX1RSVU4yCisjZGVmaW5lIFRJTUVSX1ZTWU5DX1NUQVRVU19USU1JTAlUSU1FUl9TVEFUVVNfVElNSUwyCisjZGVmaW5lIFRJTUVSX1ZTWU5DX1NUQVRVU19UT1ZGCQlUSU1FUl9TVEFUVVNfVE9WRjIKKyNlbHNlCisjZGVmaW5lIFRJTUVSX0hTWU5DX2lkCQkJVElNRVIwX2lkCisjZGVmaW5lIFRJTUVSX0hTWU5DYml0CQkJVElNRVIwYml0CisjZGVmaW5lIFRJTUVSX0hTWU5DX1NUQVRVU19UUlVOCQlUSU1FUl9TVEFUVVNfVFJVTjAKKyNkZWZpbmUgVElNRVJfSFNZTkNfU1RBVFVTX1RJTUlMCVRJTUVSX1NUQVRVU19USU1JTDAKKyNkZWZpbmUgVElNRVJfSFNZTkNfU1RBVFVTX1RPVkYJCVRJTUVSX1NUQVRVU19UT1ZGMAorCisjZGVmaW5lIFRJTUVSX1ZTWU5DX2lkCQkJVElNRVIxX2lkCisjZGVmaW5lIFRJTUVSX1ZTWU5DYml0CQkJVElNRVIxYml0CisjZGVmaW5lIFRJTUVSX1ZTWU5DX1NUQVRVU19UUlVOCQlUSU1FUl9TVEFUVVNfVFJVTjEKKyNkZWZpbmUgVElNRVJfVlNZTkNfU1RBVFVTX1RJTUlMCVRJTUVSX1NUQVRVU19USU1JTDEKKyNkZWZpbmUgVElNRVJfVlNZTkNfU1RBVFVTX1RPVkYJCVRJTUVSX1NUQVRVU19UT1ZGMQorI2VuZGlmCisKKyNkZWZpbmUgTENEX1hfUkVTCQkzMjAJLyogSG9yaXpvbnRhbCBSZXNvbHV0aW9uICovCisjZGVmaW5lIExDRF9ZX1JFUwkJMjQwCS8qIFZlcnRpY2FsIFJlc29sdXRpb24gKi8KKyNkZWZpbmUJRE1BX0JVU19TSVpFCQkxNgorCisjZGVmaW5lIFVTRV9SR0I1NjVfMTZfQklUX1BQSQorCisjaWZkZWYgVVNFX1JHQjU2NV8xNl9CSVRfUFBJCisjZGVmaW5lIExDRF9CUFAJCTE2CS8qIEJpdCBQZXIgUGl4ZWwgKi8KKyNkZWZpbmUgQ0xPQ0tTX1BFUl9QSVgJMQorI2RlZmluZSBDUExEX1BJUEVMSU5FX0RFTEFZX0NPUiAwCS8qIE5PIENQTEIgKi8KKyNlbmRpZgorCisvKiBJbnRlcmZhY2UgMTYvMTgtYml0IFRGVCBvdmVyIGFuIDgtYml0IHdpZGUgUFBJIHVzaW5nIGEgc21hbGwgUHJvZ3JhbW1hYmxlIExvZ2ljIERldmljZSAoQ1BMRCkKKyAqIGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy9nZi9wcm9qZWN0L3N0YW1wL2Zycy8/YWN0aW9uPUZyc1JlbGVhc2VCcm93c2UmZnJzX3BhY2thZ2VfaWQ9MTY1CisgKi8KKworI2lmZGVmIFVTRV9SR0I1NjVfOF9CSVRfUFBJCisjZGVmaW5lIExDRF9CUFAJCTE2CS8qIEJpdCBQZXIgUGl4ZWwgKi8KKyNkZWZpbmUgQ0xPQ0tTX1BFUl9QSVgJMgorI2RlZmluZSBDUExEX1BJUEVMSU5FX0RFTEFZX0NPUiAzCS8qIFJHQjU2NSAqLworI2VuZGlmCisKKyNpZmRlZiBVU0VfUkdCODg4XzhfQklUX1BQSQorI2RlZmluZSBMQ0RfQlBQCQkyNAkvKiBCaXQgUGVyIFBpeGVsICovCisjZGVmaW5lIENMT0NLU19QRVJfUElYCTMKKyNkZWZpbmUgQ1BMRF9QSVBFTElORV9ERUxBWV9DT1IgNQkvKiBSR0I4ODggKi8KKyNlbmRpZgorCisJLyoKKwkgKiBIUyBhbmQgVlMgdGltaW5nIHBhcmFtZXRlcnMgKGFsbCBpbiBudW1iZXIgb2YgUFBJIGNsayB0aWNrcykKKwkgKi8KKworI2RlZmluZSBVX0xJTkUJCTQJCQkJLyogQmxhbmtpbmcgTGluZXMgKi8KKworI2RlZmluZSBIX0FDVFBJWAkoTENEX1hfUkVTICogQ0xPQ0tTX1BFUl9QSVgpCS8qIGFjdGl2ZSBob3Jpem9udGFsIHBpeGVsICovCisjZGVmaW5lIEhfUEVSSU9ECSgzMzYgKiBDTE9DS1NfUEVSX1BJWCkJCS8qIEhTIHBlcmlvZCAqLworI2RlZmluZSBIX1BVTFNFCQkoMiAqIENMT0NLU19QRVJfUElYKQkJCQkvKiBIUyBwdWxzZSB3aWR0aCAqLworI2RlZmluZSBIX1NUQVJUCQkoNyAqIENMT0NLU19QRVJfUElYICsgQ1BMRF9QSVBFTElORV9ERUxBWV9DT1IpCS8qIGZpcnN0IHZhbGlkIHBpeGVsICovCisKKyNkZWZpbmUJVl9MSU5FUwkJKExDRF9ZX1JFUyArIFVfTElORSkJCS8qIHRvdGFsIHZlcnRpY2FsIGxpbmVzICovCisjZGVmaW5lIFZfUFVMU0UJCSgyICogQ0xPQ0tTX1BFUl9QSVgpCQkvKiBWUyBwdWxzZSB3aWR0aCAoMS01IEhfUEVSSU9EcykgKi8KKyNkZWZpbmUgVl9QRVJJT0QJKEhfUEVSSU9EICogVl9MSU5FUykJCS8qIFZTIHBlcmlvZCAqLworCisjZGVmaW5lIEFDVElWRV9WSURFT19NRU1fT0ZGU0VUCQkoKFVfTElORSAvIDIpICogTENEX1hfUkVTICogKExDRF9CUFAgLyA4KSkKKworI2RlZmluZSBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTCTI1NgorCisjZGVmaW5lIFBQSV9UWF9NT0RFCQkJMHgyCisjZGVmaW5lIFBQSV9YRkVSX1RZUEVfMTEJCTB4QworI2RlZmluZSBQUElfUE9SVF9DRkdfMDEJCQkweDEwCisjZGVmaW5lIFBQSV9QT0xTXzEJCQkweDgwMDAKKworI2lmIChDTE9DS1NfUEVSX1BJWCA+IDEpCisjZGVmaW5lIFBQSV9QTU9ERSAoRExFTl84IHwgUEFDS19FTikKKyNlbHNlCisjZGVmaW5lIFBQSV9QTU9ERSAoRExFTl8xNikKKyNlbmRpZgorCisjZGVmaW5lIExRMDM1X0lOREVYCQkJMHg3NAorI2RlZmluZSBMUTAzNV9EQVRBCQkJMHg3NgorCisjZGVmaW5lIExRMDM1X0RSSVZFUl9PVVRQVVRfQ1RMCQkweDEKKyNkZWZpbmUgTFEwMzVfU0hVVF9DVEwJCQkweDExCisKKyNkZWZpbmUgTFEwMzVfRFJJVkVSX09VVFBVVF9NQVNLCShMUTAzNV9MUiB8IExRMDM1X1RCIHwgTFEwMzVfQkdSIHwgTFEwMzVfUkVWKQorI2RlZmluZSBMUTAzNV9EUklWRVJfT1VUUFVUX0RFRkFVTFQJKDB4MkFFRiAmIH5MUTAzNV9EUklWRVJfT1VUUFVUX01BU0spCisKKyNkZWZpbmUgTFEwMzVfU0hVVAkJCSgxIDw8IDApCS8qIFNodXRkb3duICovCisjZGVmaW5lIExRMDM1X09OCQkJKDAgPDwgMCkJLyogU2h1dGRvd24gKi8KKworc3RydWN0IGJmaW5fbHEwMzVxMWZiX2luZm8geworCXN0cnVjdCBmYl9pbmZvICpmYjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHNwaV9kcml2ZXIgc3BpZHJ2OworCXN0cnVjdCBiZmluX2xxMDM1cTFmYl9kaXNwX2luZm8gKmRpc3BfaW5mbzsKKwl1bnNpZ25lZCBjaGFyICpmYl9idWZmZXI7CS8qIFJHQiBCdWZmZXIgKi8KKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJaW50IGxxMDM1X29wZW5fY250OworCWludCBpcnE7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrICovCisJdTMyIHBzZXVkb19wYWxbMTZdOworfTsKKworc3RhdGljIGludCBub2N1cnNvcjsKK21vZHVsZV9wYXJhbShub2N1cnNvciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9jdXJzb3IsICJjdXJzb3IgZW5hYmxlL2Rpc2FibGUiKTsKKworc3RydWN0IHNwaV9jb250cm9sIHsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworfTsKKworc3RhdGljIGludCBscTAzNXExX2NvbnRyb2woc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQoreworCWludCByZXQ7CisJdTggcmVnc1szXSA9IHsgTFEwMzVfSU5ERVgsIDAsIDAgfTsKKwl1OCBkYXRbM10gPSB7IExRMDM1X0RBVEEsIDAsIDAgfTsKKworCWlmICghc3BpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlZ3NbMl0gPSByZWc7CisJZGF0WzFdID0gdmFsdWUgPj4gODsKKwlkYXRbMl0gPSB2YWx1ZSAmIDB4RkY7CisKKwlyZXQgPSBzcGlfd3JpdGUoc3BpLCByZWdzLCBBUlJBWV9TSVpFKHJlZ3MpKTsKKwlyZXQgfD0gc3BpX3dyaXRlKHNwaSwgZGF0LCBBUlJBWV9TSVpFKGRhdCkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGxxMDM1cTFfc3BpZGV2X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3BpX2NvbnRyb2wgKmN0bDsKKwlzdHJ1Y3QgYmZpbl9scTAzNXExZmJfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihzcGktPmRldi5kcml2ZXIsCisJCQkJCQlzdHJ1Y3QgYmZpbl9scTAzNXExZmJfaW5mbywKKwkJCQkJCXNwaWRydi5kcml2ZXIpOworCisJY3RsID0ga3phbGxvYyhzaXplb2YoKmN0bCksIEdGUF9LRVJORUwpOworCisJaWYgKCFjdGwpCisJCXJldHVybiAtRU5PTUVNOworCisJY3RsLT5tb2RlID0gKGluZm8tPmRpc3BfaW5mby0+bW9kZSAmCisJCUxRMDM1X0RSSVZFUl9PVVRQVVRfTUFTSykgfCBMUTAzNV9EUklWRVJfT1VUUFVUX0RFRkFVTFQ7CisKKwlyZXQgPSBscTAzNXExX2NvbnRyb2woc3BpLCBMUTAzNV9TSFVUX0NUTCwgTFEwMzVfT04pOworCXJldCB8PSBscTAzNXExX2NvbnRyb2woc3BpLCBMUTAzNV9EUklWRVJfT1VUUFVUX0NUTCwgY3RsLT5tb2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3BpX3NldF9kcnZkYXRhKHNwaSwgY3RsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxxMDM1cTFfc3BpZGV2X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiBscTAzNXExX2NvbnRyb2woc3BpLCBMUTAzNV9TSFVUX0NUTCwgTFEwMzVfU0hVVCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbHEwMzVxMV9zcGlkZXZfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIGxxMDM1cTFfY29udHJvbChzcGksIExRMDM1X1NIVVRfQ1RMLCBMUTAzNV9TSFVUKTsKK30KKworc3RhdGljIGludCBscTAzNXExX3NwaWRldl9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzcGlfY29udHJvbCAqY3RsID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlyZXQgPSBscTAzNXExX2NvbnRyb2woc3BpLCBMUTAzNV9EUklWRVJfT1VUUFVUX0NUTCwgY3RsLT5tb2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGxxMDM1cTFfY29udHJvbChzcGksIExRMDM1X1NIVVRfQ1RMLCBMUTAzNV9PTik7Cit9CisjZWxzZQorIyBkZWZpbmUgbHEwMzVxMV9zcGlkZXZfc3VzcGVuZCBOVUxMCisjIGRlZmluZSBscTAzNXExX3NwaWRldl9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCisvKiBQb3dlciBkb3duIGFsbCBkaXNwbGF5cyBvbiByZWJvb3QsIHBvd2Vyb2ZmIG9yIGhhbHQgKi8KK3N0YXRpYyB2b2lkIGxxMDM1cTFfc3BpZGV2X3NodXRkb3duKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJbHEwMzVxMV9jb250cm9sKHNwaSwgTFEwMzVfU0hVVF9DVEwsIExRMDM1X1NIVVQpOworfQorCitzdGF0aWMgaW50IGxxMDM1cTFfYmFja2xpZ2h0KHN0cnVjdCBiZmluX2xxMDM1cTFmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBhcmcpCit7CisJaWYgKGluZm8tPmRpc3BfaW5mby0+dXNlX2JsKQorCQlncGlvX3NldF92YWx1ZShpbmZvLT5kaXNwX2luZm8tPmdwaW9fYmwsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmZpbl9scTAzNXExX2NvbmZpZ19wcGkoc3RydWN0IGJmaW5fbHEwMzVxMWZiX2luZm8gKmZiaSkKK3sKKwliZmluX3dyaXRlX1BQSV9ERUxBWShIX1NUQVJUKTsKKwliZmluX3dyaXRlX1BQSV9DT1VOVChIX0FDVFBJWCAtIDEpOworCWJmaW5fd3JpdGVfUFBJX0ZSQU1FKFZfTElORVMpOworCisJYmZpbl93cml0ZV9QUElfQ09OVFJPTChQUElfVFhfTU9ERSB8CSAgIC8qIG91dHB1dCBtb2RlICwgUE9SVF9ESVIgKi8KKwkJCQlQUElfWEZFUl9UWVBFXzExIHwgLyogc3luYyBtb2RlIFhGUl9UWVBFICovCisJCQkJUFBJX1BPUlRfQ0ZHXzAxIHwgIC8qIHR3byBmcmFtZSBzeW5jIFBPUlRfQ0ZHICovCisJCQkJUFBJX1BNT0RFIHwJICAgLyogOC8xNiBiaXQgZGF0YSBsZW5ndGggLyBQQUNLX0VOPyAqLworCQkJCVBQSV9QT0xTXzEpOwkgICAvKiBmYWxpbmcgZWRnZSBzeW5jcyBQT0xTICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZmluX2xxMDM1cTFfZGlzYWJsZV9wcGkodm9pZCkKK3sKKwliZmluX3dyaXRlX1BQSV9DT05UUk9MKGJmaW5fcmVhZF9QUElfQ09OVFJPTCgpICYgflBPUlRfRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmZpbl9scTAzNXExX2VuYWJsZV9wcGkodm9pZCkKK3sKKwliZmluX3dyaXRlX1BQSV9DT05UUk9MKGJmaW5fcmVhZF9QUElfQ09OVFJPTCgpIHwgUE9SVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIGJmaW5fbHEwMzVxMV9zdGFydF90aW1lcnModm9pZCkKK3sKKwllbmFibGVfZ3B0aW1lcnMoVElNRVJfVlNZTkNiaXQgfCBUSU1FUl9IU1lOQ2JpdCk7Cit9CisKK3N0YXRpYyB2b2lkIGJmaW5fbHEwMzVxMV9zdG9wX3RpbWVycyh2b2lkKQoreworCWRpc2FibGVfZ3B0aW1lcnMoVElNRVJfSFNZTkNiaXQgfCBUSU1FUl9WU1lOQ2JpdCk7CisKKwlzZXRfZ3B0aW1lcl9zdGF0dXMoMCwgVElNRVJfSFNZTkNfU1RBVFVTX1RSVU4gfCBUSU1FUl9WU1lOQ19TVEFUVVNfVFJVTiB8CisJCQkJVElNRVJfSFNZTkNfU1RBVFVTX1RJTUlMIHwgVElNRVJfVlNZTkNfU1RBVFVTX1RJTUlMIHwKKwkJCQkgVElNRVJfSFNZTkNfU1RBVFVTX1RPVkYgfCBUSU1FUl9WU1lOQ19TVEFUVVNfVE9WRik7CisKK30KKworc3RhdGljIHZvaWQgYmZpbl9scTAzNXExX2luaXRfdGltZXJzKHZvaWQpCit7CisKKwliZmluX2xxMDM1cTFfc3RvcF90aW1lcnMoKTsKKworCXNldF9ncHRpbWVyX3BlcmlvZChUSU1FUl9IU1lOQ19pZCwgSF9QRVJJT0QpOworCXNldF9ncHRpbWVyX3B3aWR0aChUSU1FUl9IU1lOQ19pZCwgSF9QVUxTRSk7CisJc2V0X2dwdGltZXJfY29uZmlnKFRJTUVSX0hTWU5DX2lkLCBUSU1FUl9NT0RFX1BXTSB8IFRJTUVSX1BFUklPRF9DTlQgfAorCQkJCSAgICAgIFRJTUVSX1RJTl9TRUwgfCBUSU1FUl9DTEtfU0VMfAorCQkJCSAgICAgIFRJTUVSX0VNVV9SVU4pOworCisJc2V0X2dwdGltZXJfcGVyaW9kKFRJTUVSX1ZTWU5DX2lkLCBWX1BFUklPRCk7CisJc2V0X2dwdGltZXJfcHdpZHRoKFRJTUVSX1ZTWU5DX2lkLCBWX1BVTFNFKTsKKwlzZXRfZ3B0aW1lcl9jb25maWcoVElNRVJfVlNZTkNfaWQsIFRJTUVSX01PREVfUFdNIHwgVElNRVJfUEVSSU9EX0NOVCB8CisJCQkJICAgICAgVElNRVJfVElOX1NFTCB8IFRJTUVSX0NMS19TRUwgfAorCQkJCSAgICAgIFRJTUVSX0VNVV9SVU4pOworCit9CisKK3N0YXRpYyB2b2lkIGJmaW5fbHEwMzVxMV9jb25maWdfZG1hKHN0cnVjdCBiZmluX2xxMDM1cTFmYl9pbmZvICpmYmkpCit7CisKKwlzZXRfZG1hX2NvbmZpZyhDSF9QUEksCisJCSAgICAgICBzZXRfYmZpbl9kbWFfY29uZmlnKERJUl9SRUFELCBETUFfRkxPV19BVVRPLAorCQkJCQkgICBJTlRSX0RJU0FCTEUsIERJTUVOU0lPTl8yRCwKKwkJCQkJICAgREFUQV9TSVpFXzE2LAorCQkJCQkgICBETUFfTk9TWU5DX0tFRVBfRE1BX0JVRikpOworCXNldF9kbWFfeF9jb3VudChDSF9QUEksIChMQ0RfWF9SRVMgKiBMQ0RfQlBQKSAvIERNQV9CVVNfU0laRSk7CisJc2V0X2RtYV94X21vZGlmeShDSF9QUEksIERNQV9CVVNfU0laRSAvIDgpOworCXNldF9kbWFfeV9jb3VudChDSF9QUEksIFZfTElORVMpOworCisJc2V0X2RtYV95X21vZGlmeShDSF9QUEksIERNQV9CVVNfU0laRSAvIDgpOworCXNldF9kbWFfc3RhcnRfYWRkcihDSF9QUEksICh1bnNpZ25lZCBsb25nKWZiaS0+ZmJfYnVmZmVyKTsKKworfQorCisjaWYgKENMT0NLU19QRVJfUElYID09IDEpCitzdGF0aWMgY29uc3QgdTE2IHBwaTBfcmVxXzE2W10gPSB7UF9QUEkwX0NMSywgUF9QUEkwX0ZTMSwgUF9QUEkwX0ZTMiwKKwkJCSAgICBQX1BQSTBfRDAsIFBfUFBJMF9EMSwgUF9QUEkwX0QyLAorCQkJICAgIFBfUFBJMF9EMywgUF9QUEkwX0Q0LCBQX1BQSTBfRDUsCisJCQkgICAgUF9QUEkwX0Q2LCBQX1BQSTBfRDcsIFBfUFBJMF9EOCwKKwkJCSAgICBQX1BQSTBfRDksIFBfUFBJMF9EMTAsIFBfUFBJMF9EMTEsCisJCQkgICAgUF9QUEkwX0QxMiwgUF9QUEkwX0QxMywgUF9QUEkwX0QxNCwKKwkJCSAgICBQX1BQSTBfRDE1LCAwfTsKKyNlbHNlCitzdGF0aWMgY29uc3QgdTE2IHBwaTBfcmVxXzE2W10gPSB7UF9QUEkwX0NMSywgUF9QUEkwX0ZTMSwgUF9QUEkwX0ZTMiwKKwkJCSAgICBQX1BQSTBfRDAsIFBfUFBJMF9EMSwgUF9QUEkwX0QyLAorCQkJICAgIFBfUFBJMF9EMywgUF9QUEkwX0Q0LCBQX1BQSTBfRDUsCisJCQkgICAgUF9QUEkwX0Q2LCBQX1BQSTBfRDcsIDB9OworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZmluX2xxMDM1cTFfZnJlZV9wb3J0cyh2b2lkKQoreworCXBlcmlwaGVyYWxfZnJlZV9saXN0KHBwaTBfcmVxXzE2KTsKKwlpZiAoQU5PTUFMWV8wNTAwMDQwMCkKKwkJZ3Bpb19mcmVlKFBfSURFTlQoUF9QUEkwX0ZTMykpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiZmluX2xxMDM1cTFfcmVxdWVzdF9wb3J0cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCS8qIEFOT01BTFlfMDUwMDA0MDAgLSBQUEkgRG9lcyBOb3QgU3RhcnQgUHJvcGVybHkgSW4gU3BlY2lmaWMgTW9kZToKKwkgKiBEcml2ZSBQUElfRlMzIExvdworCSAqLworCWlmIChBTk9NQUxZXzA1MDAwNDAwKSB7CisJCWludCByZXQgPSBncGlvX3JlcXVlc3QoUF9JREVOVChQX1BQSTBfRlMzKSwgIlBQSV9GUzMiKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChQX0lERU5UKFBfUFBJMF9GUzMpLCAwKTsKKwl9CisKKwlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QocHBpMF9yZXFfMTYsIERSSVZFUl9OQU1FKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0aW5nIHBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbHEwMzVxMV9mYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgYmZpbl9scTAzNXExZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCisJc3Bpbl9sb2NrKCZmYmktPmxvY2spOworCWZiaS0+bHEwMzVfb3Blbl9jbnQrKzsKKworCWlmIChmYmktPmxxMDM1X29wZW5fY250IDw9IDEpIHsKKworCQliZmluX2xxMDM1cTFfZGlzYWJsZV9wcGkoKTsKKwkJU1NZTkMoKTsKKworCQliZmluX2xxMDM1cTFfY29uZmlnX2RtYShmYmkpOworCQliZmluX2xxMDM1cTFfY29uZmlnX3BwaShmYmkpOworCQliZmluX2xxMDM1cTFfaW5pdF90aW1lcnMoKTsKKworCQkvKiBzdGFydCBkbWEgKi8KKwkJZW5hYmxlX2RtYShDSF9QUEkpOworCQliZmluX2xxMDM1cTFfZW5hYmxlX3BwaSgpOworCQliZmluX2xxMDM1cTFfc3RhcnRfdGltZXJzKCk7CisJCWxxMDM1cTFfYmFja2xpZ2h0KGZiaSwgMSk7CisJfQorCisJc3Bpbl91bmxvY2soJmZiaS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX2xxMDM1cTFfZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IGJmaW5fbHEwMzVxMWZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKworCXNwaW5fbG9jaygmZmJpLT5sb2NrKTsKKworCWZiaS0+bHEwMzVfb3Blbl9jbnQtLTsKKworCWlmIChmYmktPmxxMDM1X29wZW5fY250IDw9IDApIHsKKwkJbHEwMzVxMV9iYWNrbGlnaHQoZmJpLCAwKTsKKwkJYmZpbl9scTAzNXExX2Rpc2FibGVfcHBpKCk7CisJCVNTWU5DKCk7CisJCWRpc2FibGVfZG1hKENIX1BQSSk7CisJCWJmaW5fbHEwMzVxMV9zdG9wX3RpbWVycygpOworCX0KKworCXNwaW5fdW5sb2NrKCZmYmktPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9scTAzNXExX2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworI2lmIChMQ0RfQlBQID09IDI0KQorCWNhc2UgMjQ6LyogVFJVRUNPTE9VUiwgMTZtICovCisjZWxzZQorCWNhc2UgMTY6LyogRElSRUNUQ09MT1VSLCA2NGsgKi8KKyNlbmRpZgorCQl2YXItPnJlZC5vZmZzZXQgPSBpbmZvLT52YXIucmVkLm9mZnNldDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0OworCQl2YXItPmJsdWUub2Zmc2V0ID0gaW5mby0+dmFyLmJsdWUub2Zmc2V0OworCQl2YXItPnJlZC5sZW5ndGggPSBpbmZvLT52YXIucmVkLmxlbmd0aDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoOworCQl2YXItPmJsdWUubGVuZ3RoID0gaW5mby0+dmFyLmJsdWUubGVuZ3RoOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworCQl2YXItPnJlZC5tc2JfcmlnaHQgPSAwOworCQl2YXItPmdyZWVuLm1zYl9yaWdodCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IGRlcHRoIG5vdCBzdXBwb3J0ZWQ6ICV1IEJQUFxuIiwgX19mdW5jX18sCisJCQkgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpbmZvLT52YXIueHJlcyAhPSB2YXItPnhyZXMgfHwgaW5mby0+dmFyLnlyZXMgIT0gdmFyLT55cmVzIHx8CisJICAgIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgIT0gdmFyLT54cmVzX3ZpcnR1YWwgfHwKKwkgICAgaW5mby0+dmFyLnlyZXNfdmlydHVhbCAhPSB2YXItPnlyZXNfdmlydHVhbCkgeworCQlwcl9kZWJ1ZygiJXM6IFJlc29sdXRpb24gbm90IHN1cHBvcnRlZDogWCV1IHggWSV1IFxuIiwKKwkJCSBfX2Z1bmNfXywgdmFyLT54cmVzLCB2YXItPnlyZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqICBNZW1vcnkgbGltaXQKKwkgKi8KKworCWlmICgoaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogdmFyLT55cmVzX3ZpcnR1YWwpID4gaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXByX2RlYnVnKCIlczogTWVtb3J5IExpbWl0IHJlcXVlc3RlZCB5cmVzX3ZpcnR1YWwgPSAldVxuIiwKKwkJCSBfX2Z1bmNfXywgdmFyLT55cmVzX3ZpcnR1YWwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKworCXJldHVybiAwOworfQorCitpbnQgYmZpbl9scTAzNXExX2ZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQoreworCWlmIChub2N1cnNvcikKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsJLyoganVzdCB0byBmb3JjZSBzb2Z0X2N1cnNvcigpIGNhbGwgKi8KK30KKworc3RhdGljIGludCBiZmluX2xxMDM1cTFfZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLAorCQkJCSAgIHVfaW50IGJsdWUsIHVfaW50IHRyYW5zcCwKKwkJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpZiAocmVnbm8gPj0gQkZJTl9MQ0RfTkJSX1BBTEVUVEVfRU5UUklFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkgeworCQkvKiBncmF5c2NhbGUgPSAwLjMwKlIgKyAwLjU5KkcgKyAwLjExKkIgKi8KKwkJcmVkID0gZ3JlZW4gPSBibHVlID0gKHJlZCAqIDc3ICsgZ3JlZW4gKiAxNTEgKyBibHVlICogMjgpID4+IDg7CisJfQorCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUikgeworCisJCXUzMiB2YWx1ZTsKKwkJLyogUGxhY2UgY29sb3IgaW4gdGhlIHBzZXVkb3BhbGV0dGUgKi8KKwkJaWYgKHJlZ25vID4gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZWQgPj49ICgxNiAtIGluZm8tPnZhci5yZWQubGVuZ3RoKTsKKwkJZ3JlZW4gPj49ICgxNiAtIGluZm8tPnZhci5ncmVlbi5sZW5ndGgpOworCQlibHVlID4+PSAoMTYgLSBpbmZvLT52YXIuYmx1ZS5sZW5ndGgpOworCisJCXZhbHVlID0gKHJlZCA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAorCQkgICAgKGdyZWVuIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJICAgIChibHVlIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7CisJCXZhbHVlICY9IDB4RkZGRkZGOworCisJCSgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9IHZhbHVlOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGJmaW5fbHEwMzVxMV9mYl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4gPSBiZmluX2xxMDM1cTFfZmJfb3BlbiwKKwkuZmJfcmVsZWFzZSA9IGJmaW5fbHEwMzVxMV9mYl9yZWxlYXNlLAorCS5mYl9jaGVja192YXIgPSBiZmluX2xxMDM1cTFfZmJfY2hlY2tfdmFyLAorCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCisJLmZiX2N1cnNvciA9IGJmaW5fbHEwMzVxMV9mYl9jdXJzb3IsCisJLmZiX3NldGNvbHJlZyA9IGJmaW5fbHEwMzVxMV9mYl9zZXRjb2xyZWcsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgYmZpbl9scTAzNXExX2lycV9lcnJvcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJLypzdHJ1Y3QgYmZpbl9scTAzNXExZmJfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYmZpbl9scTAzNXExZmJfaW5mbyAqKWRldl9pZDsqLworCisJdTE2IHN0YXR1cyA9IGJmaW5fcmVhZF9QUElfU1RBVFVTKCk7CisJYmZpbl93cml0ZV9QUElfU1RBVFVTKC0xKTsKKworCWlmIChzdGF0dXMpIHsKKwkJYmZpbl9scTAzNXExX2Rpc2FibGVfcHBpKCk7CisJCWRpc2FibGVfZG1hKENIX1BQSSk7CisKKwkJLyogc3RhcnQgZG1hICovCisJCWVuYWJsZV9kbWEoQ0hfUFBJKTsKKwkJYmZpbl9scTAzNXExX2VuYWJsZV9wcGkoKTsKKwkJYmZpbl93cml0ZV9QUElfU1RBVFVTKC0xKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fbHEwMzVxMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiZmluX2xxMDM1cTFmYl9pbmZvICppbmZvOworCXN0cnVjdCBmYl9pbmZvICpmYmluZm87CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZG1hKENIX1BQSSwgRFJJVkVSX05BTUUiX0NIX1BQSSIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBQSSBETUEgdW5hdmFpbGFibGVcbiIpOworCQlnb3RvIG91dDE7CisJfQorCisJZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKCppbmZvKSwgJnBkZXYtPmRldik7CisJaWYgKCFmYmluZm8pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQyOworCX0KKworCWluZm8gPSBmYmluZm8tPnBhcjsKKwlpbmZvLT5mYiA9IGZiaW5mbzsKKwlpbmZvLT5kZXYgPSAmcGRldi0+ZGV2OworCisJaW5mby0+ZGlzcF9pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmYmluZm8pOworCisJc3RyY3B5KGZiaW5mby0+Zml4LmlkLCBEUklWRVJfTkFNRSk7CisKKwlmYmluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWZiaW5mby0+Zml4LnR5cGVfYXV4ID0gMDsKKwlmYmluZm8tPmZpeC54cGFuc3RlcCA9IDA7CisJZmJpbmZvLT5maXgueXBhbnN0ZXAgPSAwOworCWZiaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7CisJZmJpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWZiaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisKKwlmYmluZm8tPnZhci5ub25zdGQgPSAwOworCWZiaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworCWZiaW5mby0+dmFyLmhlaWdodCA9IC0xOworCWZiaW5mby0+dmFyLndpZHRoID0gLTE7CisJZmJpbmZvLT52YXIuYWNjZWxfZmxhZ3MgPSAwOworCWZiaW5mby0+dmFyLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKworCWZiaW5mby0+dmFyLnhyZXMgPSBMQ0RfWF9SRVM7CisJZmJpbmZvLT52YXIueHJlc192aXJ0dWFsID0gTENEX1hfUkVTOworCWZiaW5mby0+dmFyLnlyZXMgPSBMQ0RfWV9SRVM7CisJZmJpbmZvLT52YXIueXJlc192aXJ0dWFsID0gTENEX1lfUkVTOworCWZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gTENEX0JQUDsKKworCWlmIChpbmZvLT5kaXNwX2luZm8tPm1vZGUgJiBMUTAzNV9CR1IpIHsKKyNpZiAoTENEX0JQUCA9PSAyNCkKKwkJZmJpbmZvLT52YXIucmVkLm9mZnNldCA9IDA7CisJCWZiaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDg7CisJCWZiaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMTY7CisjZWxzZQorCQlmYmluZm8tPnZhci5yZWQub2Zmc2V0ID0gMDsKKwkJZmJpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKKwkJZmJpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAxMTsKKyNlbmRpZgorCX0gZWxzZSB7CisjaWYgKExDRF9CUFAgPT0gMjQpCisJCWZiaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxNjsKKwkJZmJpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJZmJpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOworI2Vsc2UKKwkJZmJpbmZvLT52YXIucmVkLm9mZnNldCA9IDExOworCQlmYmluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OworCQlmYmluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisjZW5kaWYKKwl9CisKKwlmYmluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKworI2lmIChMQ0RfQlBQID09IDI0KQorCWZiaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OworCWZiaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJZmJpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworI2Vsc2UKKwlmYmluZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKKwlmYmluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA2OworCWZiaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKKyNlbmRpZgorCisJZmJpbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9IDA7CisKKwlmYmluZm8tPmZpeC5zbWVtX2xlbiA9IExDRF9YX1JFUyAqIExDRF9ZX1JFUyAqIExDRF9CUFAgLyA4CisJCQkJKyBBQ1RJVkVfVklERU9fTUVNX09GRlNFVDsKKworCWZiaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gZmJpbmZvLT52YXIueHJlc192aXJ0dWFsICoKKwkgICAgZmJpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4OworCisKKwlmYmluZm8tPmZib3BzID0gJmJmaW5fbHEwMzVxMV9mYl9vcHM7CisJZmJpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisKKwlpbmZvLT5mYl9idWZmZXIgPQorCSAgICBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgZmJpbmZvLT5maXguc21lbV9sZW4sICZpbmZvLT5kbWFfaGFuZGxlLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKE5VTEwgPT0gaW5mby0+ZmJfYnVmZmVyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGFsbG9jYXRlIGRtYSBidWZmZXJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDM7CisJfQorCisJZmJpbmZvLT5zY3JlZW5fYmFzZSA9ICh2b2lkICopaW5mby0+ZmJfYnVmZmVyICsgQUNUSVZFX1ZJREVPX01FTV9PRkZTRVQ7CisJZmJpbmZvLT5maXguc21lbV9zdGFydCA9IChpbnQpaW5mby0+ZmJfYnVmZmVyICsgQUNUSVZFX1ZJREVPX01FTV9PRkZTRVQ7CisKKwlmYmluZm8tPmZib3BzID0gJmJmaW5fbHEwMzVxMV9mYl9vcHM7CisKKwlmYmluZm8tPnBzZXVkb19wYWxldHRlID0gJmluZm8tPnBzZXVkb19wYWw7CisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZmYmluZm8tPmNtYXAsIEJGSU5fTENEX05CUl9QQUxFVFRFX0VOVFJJRVMsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvcm1hcCAoJWQgZW50cmllcylcbiIsCisJCSAgICAgICBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTKTsKKwkJZ290byBvdXQ0OworCX0KKworCXJldCA9IGJmaW5fbHEwMzVxMV9yZXF1ZXN0X3BvcnRzKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVxdWVzdCBncGlvIHBvcnRcbiIpOworCQlnb3RvIG91dDY7CisJfQorCisJaW5mby0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaW5mby0+aXJxIDwgMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDc7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoaW5mby0+aXJxLCBiZmluX2xxMDM1cTFfaXJxX2Vycm9yLCBJUlFGX0RJU0FCTEVELAorCQkJRFJJVkVSX05BTUUiIFBQSSBFUlJPUiIsIGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IFBQSSBFUlJPUiBJUlFcbiIpOworCQlnb3RvIG91dDc7CisJfQorCisJaW5mby0+c3BpZHJ2LmRyaXZlci5uYW1lID0gRFJJVkVSX05BTUUiLXNwaSI7CisJaW5mby0+c3BpZHJ2LnByb2JlICAgID0gbHEwMzVxMV9zcGlkZXZfcHJvYmU7CisJaW5mby0+c3BpZHJ2LnJlbW92ZSAgID0gX19kZXZleGl0X3AobHEwMzVxMV9zcGlkZXZfcmVtb3ZlKTsKKwlpbmZvLT5zcGlkcnYuc2h1dGRvd24gPSBscTAzNXExX3NwaWRldl9zaHV0ZG93bjsKKwlpbmZvLT5zcGlkcnYuc3VzcGVuZCAgPSBscTAzNXExX3NwaWRldl9zdXNwZW5kOworCWluZm8tPnNwaWRydi5yZXN1bWUgICA9IGxxMDM1cTFfc3BpZGV2X3Jlc3VtZTsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmluZm8tPnNwaWRydik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgU1BJIEludGVyZmFjZVxuIik7CisJCWdvdG8gb3V0ODsKKwl9CisKKwlpZiAoaW5mby0+ZGlzcF9pbmZvLT51c2VfYmwpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGluZm8tPmRpc3BfaW5mby0+Z3Bpb19ibCwgIkxRMDM1IEJhY2tsaWdodCIpOworCisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWRcbiIsCisJCQkJaW5mby0+ZGlzcF9pbmZvLT5ncGlvX2JsKTsKKwkJCWdvdG8gb3V0OTsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoaW5mby0+ZGlzcF9pbmZvLT5ncGlvX2JsLCAwKTsKKwl9CisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CisJCWdvdG8gb3V0MTA7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkeCVkICVkLWJpdCBSR0IgRnJhbWVCdWZmZXIgaW5pdGlhbGl6ZWRcbiIsCisJCUxDRF9YX1JFUywgTENEX1lfUkVTLCBMQ0RfQlBQKTsKKworCXJldHVybiAwOworCisgb3V0MTA6CisJaWYgKGluZm8tPmRpc3BfaW5mby0+dXNlX2JsKQorCQlncGlvX2ZyZWUoaW5mby0+ZGlzcF9pbmZvLT5ncGlvX2JsKTsKKyBvdXQ5OgorCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmaW5mby0+c3BpZHJ2KTsKKyBvdXQ4OgorCWZyZWVfaXJxKGluZm8tPmlycSwgaW5mbyk7Cisgb3V0NzoKKwliZmluX2xxMDM1cTFfZnJlZV9wb3J0cygpOworIG91dDY6CisJZmJfZGVhbGxvY19jbWFwKCZmYmluZm8tPmNtYXApOworIG91dDQ6CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgZmJpbmZvLT5maXguc21lbV9sZW4sIGluZm8tPmZiX2J1ZmZlciwKKwkJCSAgaW5mby0+ZG1hX2hhbmRsZSk7Cisgb3V0MzoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaW5mbyk7Cisgb3V0MjoKKwlmcmVlX2RtYShDSF9QUEkpOworIG91dDE6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX2xxMDM1cTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBiZmluX2xxMDM1cTFmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CisKKwlpZiAoaW5mby0+ZGlzcF9pbmZvLT51c2VfYmwpCisJCWdwaW9fZnJlZShpbmZvLT5kaXNwX2luZm8tPmdwaW9fYmwpOworCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZpbmZvLT5zcGlkcnYpOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm8pOworCisJZnJlZV9kbWEoQ0hfUFBJKTsKKwlmcmVlX2lycShpbmZvLT5pcnEsIGluZm8pOworCisJaWYgKGluZm8tPmZiX2J1ZmZlciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBmYmluZm8tPmZpeC5zbWVtX2xlbiwgaW5mby0+ZmJfYnVmZmVyLAorCQkJCSAgaW5mby0+ZG1hX2hhbmRsZSk7CisKKwlmYl9kZWFsbG9jX2NtYXAoJmZiaW5mby0+Y21hcCk7CisKKwliZmluX2xxMDM1cTFfZnJlZV9wb3J0cygpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShmYmluZm8pOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInVucmVnaXN0ZXJlZCBMQ0QgZHJpdmVyXG4iKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGJmaW5fbHEwMzVxMV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGJmaW5fbHEwMzVxMWZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKKworCWlmIChpbmZvLT5scTAzNV9vcGVuX2NudCkgeworCQlscTAzNXExX2JhY2tsaWdodChpbmZvLCAwKTsKKwkJYmZpbl9scTAzNXExX2Rpc2FibGVfcHBpKCk7CisJCVNTWU5DKCk7CisJCWRpc2FibGVfZG1hKENIX1BQSSk7CisJCWJmaW5fbHEwMzVxMV9zdG9wX3RpbWVycygpOworCQliZmluX3dyaXRlX1BQSV9TVEFUVVMoLTEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbHEwMzVxMV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICpmYmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYmZpbl9scTAzNXExZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOworCisJaWYgKGluZm8tPmxxMDM1X29wZW5fY250KSB7CisJCWJmaW5fbHEwMzVxMV9kaXNhYmxlX3BwaSgpOworCQlTU1lOQygpOworCisJCWJmaW5fbHEwMzVxMV9jb25maWdfZG1hKGluZm8pOworCQliZmluX2xxMDM1cTFfY29uZmlnX3BwaShpbmZvKTsKKwkJYmZpbl9scTAzNXExX2luaXRfdGltZXJzKCk7CisKKwkJLyogc3RhcnQgZG1hICovCisJCWVuYWJsZV9kbWEoQ0hfUFBJKTsKKwkJYmZpbl9scTAzNXExX2VuYWJsZV9wcGkoKTsKKwkJYmZpbl9scTAzNXExX3N0YXJ0X3RpbWVycygpOworCQlscTAzNXExX2JhY2tsaWdodChpbmZvLCAxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGJmaW5fbHEwMzVxMV9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gYmZpbl9scTAzNXExX3N1c3BlbmQsCisJLnJlc3VtZSAgPSBiZmluX2xxMDM1cTFfcmVzdW1lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiZmluX2xxMDM1cTFfZHJpdmVyID0geworCS5wcm9iZSAgID0gYmZpbl9scTAzNXExX3Byb2JlLAorCS5yZW1vdmUgID0gX19kZXZleGl0X3AoYmZpbl9scTAzNXExX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtICAgPSAmYmZpbl9scTAzNXExX2Rldl9wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmZpbl9scTAzNXExX2RyaXZlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmZpbl9scTAzNXExX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChiZmluX2xxMDM1cTFfZHJpdmVyX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmZpbl9scTAzNXExX2RyaXZlcl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJmaW5fbHEwMzVxMV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYmZpbl9scTAzNXExX2RyaXZlcl9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCbGFja2ZpbiBURlQgTENEIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZmluLXQzNTBtY3FiLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYwppbmRleCA1Y2MzNmNmLi4yNTQ5YzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYwpAQCAtNDg3LDggKzQ4Nyw4IEBACiAKIAlmYmluZm8tPnZhci5ub25zdGQgPSAwOwogCWZiaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwotCWZiaW5mby0+dmFyLmhlaWdodCA9IC0xOwotCWZiaW5mby0+dmFyLndpZHRoID0gLTE7CisJZmJpbmZvLT52YXIuaGVpZ2h0ID0gNTM7CisJZmJpbmZvLT52YXIud2lkdGggPSA3MDsKIAlmYmluZm8tPnZhci5hY2NlbF9mbGFncyA9IDA7CiAJZmJpbmZvLT52YXIudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOwogCkBAIC02MzQsMTcgKzYzNCwzNSBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBiZmluX3QzNTBtY3FiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWJmaW5fdDM1MG1jcWJfZGlzYWJsZV9wcGkoKTsKLQlkaXNhYmxlX2RtYShDSF9QUEkpOwotCWJmaW5fd3JpdGVfUFBJX1NUQVRVUygweEZGRkYpOworCXN0cnVjdCBmYl9pbmZvICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8gKmZiaSA9IGZiaW5mby0+cGFyOworCisJaWYgKGZiaS0+bHEwNDNfb3Blbl9jbnQpIHsKKwkJYmZpbl90MzUwbWNxYl9kaXNhYmxlX3BwaSgpOworCQlkaXNhYmxlX2RtYShDSF9QUEkpOworCQliZmluX3QzNTBtY3FiX3N0b3BfdGltZXJzKCk7CisJCWJmaW5fd3JpdGVfUFBJX1NUQVRVUygtMSk7CisJfQorCiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBiZmluX3QzNTBtY3FiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWVuYWJsZV9kbWEoQ0hfUFBJKTsKLQliZmluX3QzNTBtY3FiX2VuYWJsZV9wcGkoKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGJmaW5fdDM1MG1jcWJmYl9pbmZvICpmYmkgPSBmYmluZm8tPnBhcjsKKworCWlmIChmYmktPmxxMDQzX29wZW5fY250KSB7CisJCWJmaW5fdDM1MG1jcWJfY29uZmlnX2RtYShmYmkpOworCQliZmluX3QzNTBtY3FiX2NvbmZpZ19wcGkoZmJpKTsKKwkJYmZpbl90MzUwbWNxYl9pbml0X3RpbWVycygpOworCisJCS8qIHN0YXJ0IGRtYSAqLworCQllbmFibGVfZG1hKENIX1BQSSk7CisJCWJmaW5fdDM1MG1jcWJfZW5hYmxlX3BwaSgpOworCQliZmluX3QzNTBtY3FiX3N0YXJ0X3RpbWVycygpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jbHBzNzExeGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NscHM3MTF4ZmIuYwppbmRleCAxNmY1ZGI0Li45OWIzNTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NscHM3MTF4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NscHM3MTF4ZmIuYwpAQCAtMTksOCArMTksMTAgQEAKICAqCiAgKiAgRnJhbWVidWZmZXIgZHJpdmVyIGZvciB0aGUgQ0xQUzcxMTEgYW5kIEVQNzIxMiBwcm9jZXNzb3JzLgogICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTM4LDE0ICs0MCw2IEBACiAKICNkZWZpbmUgQ01BUF9NQVhfU0laRQkxNgogCi0vKiBUaGUgL3Byb2MgZW50cnkgZm9yIHRoZSBiYWNrbGlnaHQuICovCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjbHBzNzExMWZiX2JhY2tsaWdodF9wcm9jX2VudHJ5ID0gTlVMTDsKLQotc3RhdGljIGludCBjbHBzNzExMWZiX3Byb2NfYmFja2xpZ2h0X3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBjbHBzNzExMWZiX3Byb2NfYmFja2xpZ2h0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCAKLQkJY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKLQogLyoKICAqIExDRCBBQyBQcmVzY2FsZS4gIFRoaXMgY29tZXMgZnJvbSB0aGUgTENEIHBhbmVsIG1hbnVmYWN0dXJlcnMgc3BlY2lmaWNhdGlvbnMuCiAgKiBUaGlzIGRldGVybWluZXMgaG93IG1hbnkgY2xvY2tzICsgMSBvZiBDTDEgYmVmb3JlIHRoZSBNIHNpZ25hbCB0b2dnbGVzLgpAQCAtMjIxLDI2ICsyMTUsMjMgQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIH07CiAKLXN0YXRpYyBpbnQgCi1jbHBzNzExMWZiX3Byb2NfYmFja2xpZ2h0X3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJhY2tsaWdodF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCS8qIFdlIG5lZWQgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMsIG9uZSBmb3IgdGhlIGRpZ2l0LCBhbmQgb25lIGZvcgotCSAqIHRoZSB0ZXJtaW5hdGluZyBOVUxMLiAqLwotCWlmIChjb3VudCA8IDIpIAotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChtYWNoaW5lX2lzX2VkYjcyMTEoKSkgewotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIAorCQlzZXFfcHJpbnRmKG0sICIlZFxuIiwKIAkJCQkoY2xwc19yZWFkYihQRERSKSAmIEVEQl9QRDNfTENEQkwpID8gMSA6IDApOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IAotY2xwczcxMTFmYl9wcm9jX2JhY2tsaWdodF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLCAKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYmFja2xpZ2h0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYmFja2xpZ2h0X3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJdW5zaWduZWQgY2hhciBjaGFyX3ZhbHVlOwogCWludCB2YWx1ZTsKQEAgLTI3MSw2ICsyNjIsMTUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJhY2tsaWdodF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGJhY2tsaWdodF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gYmFja2xpZ2h0X3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgY2xwczcxMXhfZ3Vlc3NfbGNkX3BhcmFtcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgbGNkY29uLCBzeXNjb24sIHNpemU7CkBAIC0zNzksMTkgKzM3OSwxMSBAQAogCiAJZmJfYWxsb2NfY21hcCgmY2ZiLT5jbWFwLCBDTUFQX01BWF9TSVpFLCAwKTsKIAotCS8qIFJlZ2lzdGVyIHRoZSAvcHJvYyBlbnRyaWVzLiAqLwotCWNscHM3MTExZmJfYmFja2xpZ2h0X3Byb2NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiYmFja2xpZ2h0IiwgMDQ0NCwKLQkJTlVMTCk7Ci0JaWYgKGNscHM3MTExZmJfYmFja2xpZ2h0X3Byb2NfZW50cnkgPT0gTlVMTCkgeworCWlmICghcHJvY19jcmVhdGUoImJhY2tsaWdodCIsIDA0NDQsIE5VTEwsICZiYWNrbGlnaHRfcHJvY19mb3BzKSkgewogCQlwcmludGsoIkNvdWxkbid0IGNyZWF0ZSB0aGUgL3Byb2MgZW50cnkgZm9yIHRoZSBiYWNrbGlnaHQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2xwczcxMTFmYl9iYWNrbGlnaHRfcHJvY19lbnRyeS0+cmVhZF9wcm9jID0gCi0JCSZjbHBzNzExMWZiX3Byb2NfYmFja2xpZ2h0X3JlYWQ7Ci0JY2xwczcxMTFmYl9iYWNrbGlnaHRfcHJvY19lbnRyeS0+d3JpdGVfcHJvYyA9IAotCQkmY2xwczcxMTFmYl9wcm9jX2JhY2tsaWdodF93cml0ZTsKLQogCS8qCiAJICogUG93ZXIgdXAgdGhlIExDRAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IGVhMWZkM2YuLjM2OWE1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDx2aWRlby9kYTh4eC1mYi5oPgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJkYTh4eF9sY2RjIgpAQCAtMTEzLDYgKzExNSwxMiBAQAogCXVuc2lnbmVkIHNob3J0IHBzZXVkb19wYWxldHRlWzE2XTsKIAl1bnNpZ25lZCBpbnQgZGF0YWJ1Zl9zejsKIAl1bnNpZ25lZCBpbnQgcGFsZXR0ZV9zejsKKwl1bnNpZ25lZCBpbnQgcHhsX2NsazsKKwlpbnQgYmxhbms7CisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCWZyZXFfdHJhbnNpdGlvbjsKKyNlbmRpZgorCXZvaWQgKCpwYW5lbF9wb3dlcl9jdHJsKShpbnQpOwogfTsKIAogLyogVmFyaWFibGUgU2NyZWVuIEluZm9ybWF0aW9uICovCkBAIC0xNTUsNyArMTYzLDcgQEAKIAlpbnQJCXZmcDsJCS8qIFZlcnRpY2FsIGZyb250IHBvcmNoICovCiAJaW50CQl2YnA7CQkvKiBWZXJ0aWNhbCBiYWNrIHBvcmNoICovCiAJaW50CQl2c3c7CQkvKiBWZXJ0aWNhbCBTeW5jIFB1bHNlIFdpZHRoICovCi0JaW50CQlweGxfY2xrOwkvKiBQaXhlbCBjbG9jayAqLworCXVuc2lnbmVkIGludAlweGxfY2xrOwkvKiBQaXhlbCBjbG9jayAqLwogCXVuc2lnbmVkIGNoYXIJaW52ZXJ0X3B4bF9jbGs7CS8qIEludmVydCBQaXhlbCBjbG9jayAqLwogfTsKIApAQCAtMTcxLDcgKzE3OSw3IEBACiAJCS52ZnAgPSAyLAogCQkudmJwID0gMiwKIAkJLnZzdyA9IDAsCi0JCS5weGxfY2xrID0gMHgxMCwKKwkJLnB4bF9jbGsgPSA0NjA4MDAwLAogCQkuaW52ZXJ0X3B4bF9jbGsgPSAxLAogCX0sCiAJLyogU2hhcnAgTEswNDNUMURHMDEgKi8KQEAgLTE4NSwxMyArMTkzLDIzIEBACiAJCS52ZnAgPSAyLAogCQkudmJwID0gMiwKIAkJLnZzdyA9IDEwLAotCQkucHhsX2NsayA9IDB4MTIsCisJCS5weGxfY2xrID0gNzgzMzYwMCwKIAkJLmludmVydF9weGxfY2xrID0gMCwKIAl9LAogfTsKIAorLyogRW5hYmxlIHRoZSBSYXN0ZXIgRW5naW5lIG9mIHRoZSBMQ0QgQ29udHJvbGxlciAqLworc3RhdGljIGlubGluZSB2b2lkIGxjZF9lbmFibGVfcmFzdGVyKHZvaWQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKwlpZiAoIShyZWcgJiBMQ0RfUkFTVEVSX0VOQUJMRSkpCisJCWxjZGNfd3JpdGUocmVnIHwgTENEX1JBU1RFUl9FTkFCTEUsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworfQorCiAvKiBEaXNhYmxlIHRoZSBSYXN0ZXIgRW5naW5lIG9mIHRoZSBMQ0QgQ29udHJvbGxlciAqLwotc3RhdGljIHZvaWQgbGNkX2Rpc2FibGVfcmFzdGVyKHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBsY2RfZGlzYWJsZV9yYXN0ZXIodm9pZCkKIHsKIAl1MzIgcmVnOwogCkBAIC00NDMsMTQgKzQ2MSwyNSBAQAogc3RhdGljIHZvaWQgbGNkX3Jlc2V0KHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcikKIHsKIAkvKiBEaXNhYmxlIHRoZSBSYXN0ZXIgaWYgcHJldmlvdXNseSBFbmFibGVkICovCi0JaWYgKGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKSAmIExDRF9SQVNURVJfRU5BQkxFKQotCQlsY2RfZGlzYWJsZV9yYXN0ZXIocGFyKTsKKwlsY2RfZGlzYWJsZV9yYXN0ZXIoKTsKIAogCS8qIERNQSBoYXMgdG8gYmUgZGlzYWJsZWQgKi8KIAlsY2RjX3dyaXRlKDAsIExDRF9ETUFfQ1RSTF9SRUcpOwogCWxjZGNfd3JpdGUoMCwgTENEX1JBU1RFUl9DVFJMX1JFRyk7CiB9CiAKK3N0YXRpYyB2b2lkIGxjZF9jYWxjX2Nsa19kaXZpZGVyKHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcikKK3sKKwl1bnNpZ25lZCBpbnQgbGNkX2NsaywgZGl2OworCisJbGNkX2NsayA9IGNsa19nZXRfcmF0ZShwYXItPmxjZGNfY2xrKTsKKwlkaXYgPSBsY2RfY2xrIC8gcGFyLT5weGxfY2xrOworCisJLyogQ29uZmlndXJlIHRoZSBMQ0QgY2xvY2sgZGl2aXNvci4gKi8KKwlsY2RjX3dyaXRlKExDRF9DTEtfRElWSVNPUihkaXYpIHwKKwkJCShMQ0RfUkFTVEVSX01PREUgJiAweDEpLCBMQ0RfQ1RSTF9SRUcpOworfQorCiBzdGF0aWMgaW50IGxjZF9pbml0KHN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhciwgY29uc3Qgc3RydWN0IGxjZF9jdHJsX2NvbmZpZyAqY2ZnLAogCQlzdHJ1Y3QgZGE4eHhfcGFuZWwgKnBhbmVsKQogewpAQCAtNDU5LDkgKzQ4OCw4IEBACiAKIAlsY2RfcmVzZXQocGFyKTsKIAotCS8qIENvbmZpZ3VyZSB0aGUgTENEIGNsb2NrIGRpdmlzb3IuICovCi0JbGNkY193cml0ZShMQ0RfQ0xLX0RJVklTT1IocGFuZWwtPnB4bF9jbGspIHwKLQkJCShMQ0RfUkFTVEVSX01PREUgJiAweDEpLCBMQ0RfQ1RSTF9SRUcpOworCS8qIENhbGN1bGF0ZSB0aGUgZGl2aWRlciAqLworCWxjZF9jYWxjX2Nsa19kaXZpZGVyKHBhcik7CiAKIAlpZiAocGFuZWwtPmludmVydF9weGxfY2xrKQogCQlsY2RjX3dyaXRlKChsY2RjX3JlYWQoTENEX1JBU1RFUl9USU1JTkdfMl9SRUcpIHwKQEAgLTUxMywxMyArNTQxLDExIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbGNkY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiB7CiAJdTMyIHN0YXQgPSBsY2RjX3JlYWQoTENEX1NUQVRfUkVHKTsKLQl1MzIgcmVnOwogCiAJaWYgKChzdGF0ICYgTENEX1NZTkNfTE9TVCkgJiYgKHN0YXQgJiBMQ0RfRklGT19VTkRFUkZMT1cpKSB7Ci0JCXJlZyA9IGxjZGNfcmVhZChMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKLQkJbGNkY193cml0ZShyZWcgJiB+TENEX1JBU1RFUl9FTkFCTEUsIExDRF9SQVNURVJfQ1RSTF9SRUcpOworCQlsY2RfZGlzYWJsZV9yYXN0ZXIoKTsKIAkJbGNkY193cml0ZShzdGF0LCBMQ0RfU1RBVF9SRUcpOwotCQlsY2RjX3dyaXRlKHJlZyB8IExDRF9SQVNURVJfRU5BQkxFLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKwkJbGNkX2VuYWJsZV9yYXN0ZXIoKTsKIAl9IGVsc2UKIAkJbGNkY193cml0ZShzdGF0LCBMQ0RfU1RBVF9SRUcpOwogCkBAIC01NzQsNiArNjAwLDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQorc3RhdGljIGludCBsY2RfZGE4eHhfY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXI7CisKKwlwYXIgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBkYTh4eF9mYl9wYXIsIGZyZXFfdHJhbnNpdGlvbik7CisJaWYgKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSkgeworCQlsY2RfZGlzYWJsZV9yYXN0ZXIoKTsKKwl9IGVsc2UgaWYgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UpIHsKKwkJbGNkX2NhbGNfY2xrX2RpdmlkZXIocGFyKTsKKwkJbGNkX2VuYWJsZV9yYXN0ZXIoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGNkX2RhOHh4X2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyKQoreworCXBhci0+ZnJlcV90cmFuc2l0aW9uLm5vdGlmaWVyX2NhbGwgPSBsY2RfZGE4eHhfY3B1ZnJlcV90cmFuc2l0aW9uOworCisJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJnBhci0+ZnJlcV90cmFuc2l0aW9uLAorCQkJCQkgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxjZF9kYTh4eF9jcHVmcmVxX2RlcmVnaXN0ZXIoc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyKQoreworCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmcGFyLT5mcmVxX3RyYW5zaXRpb24sCisJCQkJICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2RldmV4aXQgZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwpAQCAtNTgxLDggKzYzOSwxMyBAQAogCWlmIChpbmZvKSB7CiAJCXN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCQlpZiAobGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpICYgTENEX1JBU1RFUl9FTkFCTEUpCi0JCQlsY2RfZGlzYWJsZV9yYXN0ZXIocGFyKTsKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwkJbGNkX2RhOHh4X2NwdWZyZXFfZGVyZWdpc3RlcihwYXIpOworI2VuZGlmCisJCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCisJCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMCk7CisKKwkJbGNkX2Rpc2FibGVfcmFzdGVyKCk7CiAJCWxjZGNfd3JpdGUoMCwgTENEX1JBU1RFUl9DVFJMX1JFRyk7CiAKIAkJLyogZGlzYWJsZSBETUEgICovCkBAIC02MzksNiArNzAyLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCWludCByZXQgPSAwOworCisJaWYgKHBhci0+YmxhbmsgPT0gYmxhbmspCisJCXJldHVybiAwOworCisJcGFyLT5ibGFuayA9IGJsYW5rOworCXN3aXRjaCAoYmxhbmspIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCisJCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMSk7CisKKwkJbGNkX2VuYWJsZV9yYXN0ZXIoKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCisJCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMCk7CisKKwkJbGNkX2Rpc2FibGVfcmFzdGVyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCBmYl9vcHMgZGE4eHhfZmJfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5mYl9jaGVja192YXIgPSBmYl9jaGVja192YXIsCkBAIC02NDcsNiArNzM5LDcgQEAKIAkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9ibGFuayA9IGNmYl9ibGFuaywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKQEAgLTcyMSw2ICs4MTQsMTIgQEAKIAl9CiAKIAlwYXIgPSBkYTh4eF9mYl9pbmZvLT5wYXI7CisJcGFyLT5sY2RjX2NsayA9IGZiX2NsazsKKwlwYXItPnB4bF9jbGsgPSBsY2RjX2luZm8tPnB4bF9jbGs7CisJaWYgKGZiX3BkYXRhLT5wYW5lbF9wb3dlcl9jdHJsKSB7CisJCXBhci0+cGFuZWxfcG93ZXJfY3RybCA9IGZiX3BkYXRhLT5wYW5lbF9wb3dlcl9jdHJsOworCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMSk7CisJfQogCiAJaWYgKGxjZF9pbml0KHBhciwgbGNkX2NmZywgbGNkY19pbmZvKSA8IDApIHsKIAkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJsY2RfaW5pdCBmYWlsZWRcbiIpOwpAQCAtNzU0LDggKzg1Myw2IEBACiAJZGE4eHhfZmJfZml4LnNtZW1fbGVuID0gcGFyLT5kYXRhYnVmX3N6IC0gcGFyLT5wYWxldHRlX3N6OwogCWRhOHh4X2ZiX2ZpeC5saW5lX2xlbmd0aCA9IChsY2RjX2luZm8tPndpZHRoICogbGNkX2NmZy0+YnBwKSAvIDg7CiAKLQlwYXItPmxjZGNfY2xrID0gZmJfY2xrOwotCiAJcGFyLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldmljZSwgMCk7CiAJaWYgKHBhci0+aXJxIDwgMCkgewogCQlyZXQgPSAtRU5PRU5UOwpAQCAtODE0LDEyICs5MTEsMjQgQEAKIAkJZ290byBlcnJfZGVhbGxvY19jbWFwOwogCX0KIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUQorCXJldCA9IGxjZF9kYTh4eF9jcHVmcmVxX3JlZ2lzdGVyKHBhcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxXG4iKTsKKwkJZ290byBlcnJfY3B1X2ZyZXE7CisJfQorI2VuZGlmCisKIAkvKiBlbmFibGUgcmFzdGVyIGVuZ2luZSAqLwotCWxjZGNfd3JpdGUobGNkY19yZWFkKExDRF9SQVNURVJfQ1RSTF9SRUcpIHwKLQkJCUxDRF9SQVNURVJfRU5BQkxFLCBMQ0RfUkFTVEVSX0NUUkxfUkVHKTsKKwlsY2RfZW5hYmxlX3Jhc3RlcigpOwogCiAJcmV0dXJuIDA7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKK2Vycl9jcHVfZnJlcToKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGRhOHh4X2ZiX2luZm8pOworI2VuZGlmCisKIGVycl9kZWFsbG9jX2NtYXA6CiAJZmJfZGVhbGxvY19jbWFwKCZkYTh4eF9mYl9pbmZvLT5jbWFwKTsKIApAQCAtODUyLDExICs5NjEsMzUgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQkgcmV0dXJuIC1FQlVTWTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCisJCXBhci0+cGFuZWxfcG93ZXJfY3RybCgwKTsKKworCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOworCWxjZF9kaXNhYmxlX3Jhc3RlcigpOworCWNsa19kaXNhYmxlKHBhci0+bGNkY19jbGspOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiAwOwogfQogc3RhdGljIGludCBmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCSByZXR1cm4gLUVCVVNZOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGE4eHhfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJaWYgKHBhci0+cGFuZWxfcG93ZXJfY3RybCkKKwkJcGFyLT5wYW5lbF9wb3dlcl9jdHJsKDEpOworCisJY2xrX2VuYWJsZShwYXItPmxjZGNfY2xrKTsKKwlsY2RfZW5hYmxlX3Jhc3RlcigpOworCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgZmJfc3VzcGVuZCBOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jIGIvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYwppbmRleCA0ODMwYjFiLi44MGFiYmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAljb250cmFzdCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOwogCXNpemUgPSBlbmRwIC0gYnVmOwogCi0JaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCWlmIChpc3NwYWNlKCplbmRwKSkKIAkJc2l6ZSsrOwogCiAJaWYgKHNpemUgIT0gY291bnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jIGIvZHJpdmVycy92aWRlby9lcDkzeHgtZmIuYwppbmRleCBiZDlkNDZmLi4yN2FhYjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMKQEAgLTM1OCw2ICszNTgsOCBAQAogCiAJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CiAJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCWlmIChyZWdubyA+IDI1NSkKKwkJCXJldHVybiAxOwogCQlyZ2IgPSAoKHJlZCAmIDB4ZmYwMCkgPDwgOCkgfCAoZ3JlZW4gJiAweGZmMDApIHwKIAkJCSgoYmx1ZSAmIDB4ZmYwMCkgPj4gOCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZGlzcGxheV9neC5jIGIvZHJpdmVycy92aWRlby9nZW9kZS9kaXNwbGF5X2d4LmMKaW5kZXggZTc1OTg5NS4uZjBhZjkxMWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2Rpc3BsYXlfZ3guYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2Rpc3BsYXlfZ3guYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgogCiAjaW5jbHVkZSAiZ3hmYi5oIgogCkBAIC0yNSw3ICsyNSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCWlmICghZ2VvZGVfaGFzX3ZzYTIoKSkgeworCWlmICghY3M1NTM1X2hhc192c2EyKCkpIHsKIAkJdWludDMyX3QgaGksIGxvOwogCiAJCS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgaXMgKFBNQVggLSBQTUlOKSsxICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmIuaCBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYi5oCmluZGV4IDE2YTk2ZjguLmQxOWU5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYi5oCkBAIC0zNDAsNyArMzQwLDcgQEAKIH0KIAogCi0vKiBNU1JzIGFyZSBkZWZpbmVkIGluIGFzbS9nZW9kZS5oOyB0aGVpciBiaXRmaWVsZHMgYXJlIGhlcmUgKi8KKy8qIE1TUnMgYXJlIGRlZmluZWQgaW4gbGludXgvY3M1NTM1Lmg7IHRoZWlyIGJpdGZpZWxkcyBhcmUgaGVyZSAqLwogCiAjZGVmaW5lIE1TUl9HTENQX1NZU19SU1RQTExfRE9UUE9TVERJVjMJKDEgPDwgMykKICNkZWZpbmUgTVNSX0dMQ1BfU1lTX1JTVFBMTF9ET1RQUkVNVUxUMgkoMSA8PCAyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMKaW5kZXggMjU1MmNhYy4uYjNlNjM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jczU1MzUuaD4KIAogI2luY2x1ZGUgImd4ZmIuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9seGZiLmggYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmIuaAppbmRleCA2YTUxNDQ4Li5jYzc4MWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmIuaApAQCAtMSwzICsxLDEzIEBACisvKiBHZW9kZSBMWCBmcmFtZWJ1ZmZlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgQWR2YW5jZWQgTWljcm8gRGV2aWNlcyxJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBkZWJpYW4ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KICNpZm5kZWYgX0xYRkJfSF8KICNkZWZpbmUgX0xYRkJfSF8KIApAQCAtNDA5LDcgKzQxOSw3IEBACiB9CiAKIAotLyogTVNScyBhcmUgZGVmaW5lZCBpbiBhc20vZ2VvZGUuaDsgdGhlaXIgYml0ZmllbGRzIGFyZSBoZXJlICovCisvKiBNU1JzIGFyZSBkZWZpbmVkIGluIGxpbnV4L2NzNTUzNS5oOyB0aGVpciBiaXRmaWVsZHMgYXJlIGhlcmUgKi8KIAogI2RlZmluZSBNU1JfR0xDUF9ET1RQTExfTE9DSwkJKDEgPDwgMjUpCS8qIHIvbyAqLwogI2RlZmluZSBNU1JfR0xDUF9ET1RQTExfSEFMRlBJWAkJKDEgPDwgMjQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfb3BzLmMKaW5kZXggYjFjZDQ5Yy4uMGU1ZDhjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9seGZiX29wcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9vcHMuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2dlb2RlLmg+CisjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CiAKICNpbmNsdWRlICJseGZiLmgiCiAKQEAgLTMwNyw3ICszMDcsNyBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAKLQlpZiAoIWdlb2RlX2hhc192c2EyKCkpIHsKKwlpZiAoIWNzNTUzNV9oYXNfdnNhMigpKSB7CiAJCXVpbnQzMl90IGhpLCBsbzsKIAogCQkvKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGlzIChQTUFYIC0gUE1JTikrMSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9zdXNwZW5kX2d4LmMgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL3N1c3BlbmRfZ3guYwppbmRleCA5YWZmMzJlLi4xYmIwNDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL3N1c3BlbmRfZ3guYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL3N1c3BlbmRfZ3guYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NzNTUzNS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCiAjaW5jbHVkZSAiZ3hmYi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5jIGIvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5jCmluZGV4IGI4ZDUyYTguLjYwODJmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvdmlkZW9fZ3guYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL3ZpZGVvX2d4LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2dlb2RlLmg+CisjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CiAKICNpbmNsdWRlICJneGZiLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYwppbmRleCBlNzExNmE2Li43M2M4M2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9oaXRmYi5jCkBAIC00NTYsNyArNDU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGhpdGZiX2Rldl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaGl0ZmJfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IGhpdGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBoaXRmYl9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfZHZ0LmMgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9kdnQuYwppbmRleCAyN2ZhNzAzLi5iNGIzNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9kdnQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9kdnQuYwpAQCAtMjEyLDI0ICsyMTIsMjkgQEAKIAkqeXJlcyA9ICgqeHJlcyAqIDMpID4+IDI7CiB9CiAKLXZvaWQgaTgxMGZiX2VuY29kZV9yZWdpc3RlcnMoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgIHN0cnVjdCBpODEwZmJfcGFyICpwYXIsIHUzMiB4cmVzLCB1MzIgeXJlcykKK3N0YXRpYyBpbnQgaTgxMGZiX2ZpbmRfYmVzdF9tb2RlKHUzMiB4cmVzLCB1MzIgeXJlcywgdTMyIHBpeGNsb2NrKQogeyAKIAl1MzIgZGlmZiA9IDAsIGRpZmZfYmVzdCA9IDB4RkZGRkZGRkYsIGkgPSAwLCBpX2Jlc3QgPSAwOyAKLQl1OCBoZmw7CisJdTggaGZsID0gKHU4KSAoKHhyZXMgPj4gMykgLSAxKTsKIAotCWhmbCA9ICh1OCkgKCh4cmVzID4+IDMpIC0gMSk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RkX21vZGVzKTsgaSsrKSB7IAogCQlpZiAoc3RkX21vZGVzW2ldLmNyMDEgPT0gaGZsKSB7IAotCQkJaWYgKHN0ZF9tb2Rlc1tpXS5waXhjbG9jayA8PSBwYXItPnJlZ3MucGl4Y2xvY2spCi0JCQkJZGlmZiA9IHBhci0+cmVncy5waXhjbG9jayAtIAotCQkJCQlzdGRfbW9kZXNbaV0ucGl4Y2xvY2s7CisJCQlpZiAoc3RkX21vZGVzW2ldLnBpeGNsb2NrIDw9IHBpeGNsb2NrKQorCQkJCWRpZmYgPSBwaXhjbG9jayAtIHN0ZF9tb2Rlc1tpXS5waXhjbG9jazsKIAkJCWlmIChkaWZmIDwgZGlmZl9iZXN0KSB7CSAKIAkJICAgIAkJaV9iZXN0ID0gaTsKIAkJICAgIAkJZGlmZl9iZXN0ID0gZGlmZjsKIAkJCX0KIAkJfQogCX0KKwlyZXR1cm4gaV9iZXN0OworfQorCit2b2lkIGk4MTBmYl9lbmNvZGVfcmVnaXN0ZXJzKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICBzdHJ1Y3QgaTgxMGZiX3BhciAqcGFyLCB1MzIgeHJlcywgdTMyIHlyZXMpCit7CisJdTMyIGlfYmVzdCA9IGk4MTBmYl9maW5kX2Jlc3RfbW9kZSh4cmVzLCB5cmVzLCBwYXItPnJlZ3MucGl4Y2xvY2spOworCiAJcGFyLT5yZWdzID0gc3RkX21vZGVzW2lfYmVzdF07CiAKIAkvKiBvdmVybGF5ICovCkBAIC0yMzksMzYgKzI0NCwzNiBAQAogCiB2b2lkIGk4MTBmYl9maWxsX3Zhcl90aW1pbmdzKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQogewotCXN0cnVjdCBpODEwZmJfcGFyIHBhcjsKIAl1MzIgdG90YWwsIHhyZXMsIHlyZXM7CisJdTMyIG1vZGUsIHBpeGNsb2NrOwogCiAJeHJlcyA9IHZhci0+eHJlczsKIAl5cmVzID0gdmFyLT55cmVzOwogCQotCXBhci5yZWdzLnBpeGNsb2NrID0gMTAwMDAwMDAwMC92YXItPnBpeGNsb2NrOwotCWk4MTBmYl9lbmNvZGVfcmVnaXN0ZXJzKHZhciwgJnBhciwgeHJlcywgeXJlcyk7CisJcGl4Y2xvY2sgPSAxMDAwMDAwMDAwIC8gdmFyLT5waXhjbG9jazsKKwltb2RlID0gaTgxMGZiX2ZpbmRfYmVzdF9tb2RlKHhyZXMsIHlyZXMsIHBpeGNsb2NrKTsKIAkKLQl0b3RhbCA9ICgocGFyLnJlZ3MuY3IwMCB8IChwYXIucmVncy5jcjM1ICYgMSkgPDwgOCkgKyAzKSA8PCAzOworCXRvdGFsID0gKHN0ZF9tb2Rlc1ttb2RlXS5jcjAwIHwgKHN0ZF9tb2Rlc1ttb2RlXS5jcjM1ICYgMSkgPDwgOCkgKyAzOworCXRvdGFsIDw8PSAzOwogCQotCXZhci0+cGl4Y2xvY2sgPSAxMDAwMDAwMDAwL3Bhci5yZWdzLnBpeGNsb2NrOwotCXZhci0+cmlnaHRfbWFyZ2luID0gKHBhci5yZWdzLmNyMDQgPDwgMykgLSB4cmVzOwotCXZhci0+aHN5bmNfbGVuID0gKChwYXIucmVncy5jcjA1ICYgMHgxRikgLSAKLQkJCSAgICAgICAocGFyLnJlZ3MuY3IwNCAmIDB4MUYpKSA8PCAzOworCXZhci0+cGl4Y2xvY2sgPSAxMDAwMDAwMDAwIC8gc3RkX21vZGVzW21vZGVdLnBpeGNsb2NrOworCXZhci0+cmlnaHRfbWFyZ2luID0gKHN0ZF9tb2Rlc1ttb2RlXS5jcjA0IDw8IDMpIC0geHJlczsKKwl2YXItPmhzeW5jX2xlbiA9ICgoc3RkX21vZGVzW21vZGVdLmNyMDUgJiAweDFGKSAtCisJCQkgKHN0ZF9tb2Rlc1ttb2RlXS5jcjA0ICYgMHgxRikpIDw8IDM7CiAJdmFyLT5sZWZ0X21hcmdpbiA9ICh0b3RhbCAtICh4cmVzICsgdmFyLT5yaWdodF9tYXJnaW4gKyAKIAkJCQkgICAgIHZhci0+aHN5bmNfbGVuKSk7CiAJdmFyLT5zeW5jID0gRkJfU1lOQ19PTl9HUkVFTjsKLQlpZiAofihwYXIucmVncy5tc3IgJiAoMSA8PCA2KSkpCisJaWYgKH4oc3RkX21vZGVzW21vZGVdLm1zciAmICgxIDw8IDYpKSkKIAkJdmFyLT5zeW5jIHw9IEZCX1NZTkNfSE9SX0hJR0hfQUNUOwotCWlmICh+KHBhci5yZWdzLm1zciAmICgxIDw8IDcpKSkKKwlpZiAofihzdGRfbW9kZXNbbW9kZV0ubXNyICYgKDEgPDwgNykpKQogCQl2YXItPnN5bmMgfD0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUOwogCi0KLQl0b3RhbCA9ICgocGFyLnJlZ3MuY3IwNiB8IChwYXIucmVncy5jcjMwICYgMHgwRikgIDw8IDgpKSArIDI7Ci0JdmFyLT5sb3dlcl9tYXJnaW4gPSAocGFyLnJlZ3MuY3IxMCB8IAotCQkJICAgICAocGFyLnJlZ3MuY3IzMiAmIDB4MEYpIDw8IDgpIC0geXJlczsKLQl2YXItPnZzeW5jX2xlbiA9IChwYXIucmVncy5jcjExICYgMHgwRikgLSAodmFyLT5sb3dlcl9tYXJnaW4gJiAweDBGKTsKLQl2YXItPnVwcGVyX21hcmdpbiA9IHRvdGFsIC0gKHlyZXMgKyB2YXItPmxvd2VyX21hcmdpbiArIAotCQkJCSAgICAgdmFyLT52c3luY19sZW4pOworCXRvdGFsID0gKHN0ZF9tb2Rlc1ttb2RlXS5jcjA2IHwgKHN0ZF9tb2Rlc1ttb2RlXS5jcjMwICYgMHhGKSAgPDwgOCkgKyAyOworCXZhci0+bG93ZXJfbWFyZ2luID0gKHN0ZF9tb2Rlc1ttb2RlXS5jcjEwIHwKKwkJCSAgICAoc3RkX21vZGVzW21vZGVdLmNyMzIgJiAweDBGKSA8PCA4KSAtIHlyZXM7CisJdmFyLT52c3luY19sZW4gPSAoc3RkX21vZGVzW21vZGVdLmNyMTEgJiAweDBGKSAtCisJCQkgKHZhci0+bG93ZXJfbWFyZ2luICYgMHgwRik7CisJdmFyLT51cHBlcl9tYXJnaW4gPSB0b3RhbCAtICh5cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbik7CiB9CiAKIHUzMiBpODEwX2dldF93YXRlcm1hcmsoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCAwY2FmZDY0Li41YmEzOTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTg3NCw2ICs4NzQsOSBAQAogCWlmIChiYWlsZWFybHkgPT0gMTgpCiAJCWJhaWxvdXQoZGluZm8pOwogCisJLyogcmVhZCBhY3RpdmUgcGlwZSAqLworCWRpbmZvLT5waXBlID0gaW50ZWxmYmh3X2FjdGl2ZV9waXBlKCZkaW5mby0+c2F2ZV9zdGF0ZSk7CisKIAkvKiBDdXJzb3IgaW5pdGlhbGlzYXRpb24gKi8KIAlpZiAoZGluZm8tPmh3Y3Vyc29yKSB7CiAJCWludGVsZmJod19jdXJzb3JfaW5pdChkaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggMDY4OWY5Ny4uODE2Mjc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwpAQCAtNDY5LDYgKzQ2OSwzMiBAQAogfQogCiAKKy8qIENoZWNrIHdoaWNoIHBpcGUgaXMgY29ubmVjdGVkIHRvIGFuIGFjdGl2ZSBkaXNwbGF5IHBsYW5lLiAqLworaW50IGludGVsZmJod19hY3RpdmVfcGlwZShjb25zdCBzdHJ1Y3QgaW50ZWxmYl9od3N0YXRlICpodykKK3sKKwlpbnQgcGlwZSA9IC0xOworCisJLyoga2VlcCBvbGQgZGVmYXVsdCBiZWhhdmlvdXIgLSBwcmVmZXIgUElQRV9BICovCisJaWYgKGh3LT5kaXNwX2JfY3RybCAmIERJU1BQTEFORV9QTEFORV9FTkFCTEUpIHsKKwkJcGlwZSA9IChody0+ZGlzcF9iX2N0cmwgPj4gRElTUFBMQU5FX1NFTF9QSVBFX1NISUZUKTsKKwkJcGlwZSAmPSBQSVBFX01BU0s7CisJCWlmICh1bmxpa2VseShwaXBlID09IFBJUEVfQSkpCisJCQlyZXR1cm4gUElQRV9BOworCX0KKwlpZiAoaHctPmRpc3BfYV9jdHJsICYgRElTUFBMQU5FX1BMQU5FX0VOQUJMRSkgeworCQlwaXBlID0gKGh3LT5kaXNwX2FfY3RybCA+PiBESVNQUExBTkVfU0VMX1BJUEVfU0hJRlQpOworCQlwaXBlICY9IFBJUEVfTUFTSzsKKwkJaWYgKGxpa2VseShwaXBlID09IFBJUEVfQSkpCisJCQlyZXR1cm4gUElQRV9BOworCX0KKwkvKiBJbXBvc3NpYmxlIHRoYXQgbm8gcGlwZSBpcyBzZWxlY3RlZCAtIHJldHVybiBQSVBFX0EgKi8KKwlXQVJOX09OKHBpcGUgPT0gLTEpOworCWlmICh1bmxpa2VseShwaXBlID09IC0xKSkKKwkJcGlwZSA9IFBJUEVfQTsKKworCXJldHVybiBwaXBlOworfQorCiB2b2lkIGludGVsZmJod19zZXRjb2xyZWcoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sIHVuc2lnbmVkIHJlZ25vLAogCQkJIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsCiAJCQkgdW5zaWduZWQgdHJhbnNwKQpAQCAtMTAxOSw3ICsxMDQ1LDcgQEAKIAkJCSBzdHJ1Y3QgaW50ZWxmYl9od3N0YXRlICpodywKIAkJCSBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKIHsKLQlpbnQgcGlwZSA9IFBJUEVfQTsKKwlpbnQgcGlwZSA9IGludGVsZmJod19hY3RpdmVfcGlwZShodyk7CiAJdTMyICpkcGxsLCAqZnAwLCAqZnAxOwogCXUzMiBtMSwgbTIsIG4sIHAxLCBwMiwgY2xvY2tfdGFyZ2V0LCBjbG9jazsKIAl1MzIgaHN5bmNfc3RhcnQsIGhzeW5jX2VuZCwgaGJsYW5rX3N0YXJ0LCBoYmxhbmtfZW5kLCBodG90YWwsIGhhY3RpdmU7CkBAIC0xMDMzLDEyICsxMDU5LDYgQEAKIAkvKiBEaXNhYmxlIFZHQSAqLwogCWh3LT52Z2FjbnRybCB8PSBWR0FfRElTQUJMRTsKIAotCS8qIENoZWNrIHdoZXRoZXIgcGlwZSBBIG9yIHBpcGUgQiBpcyBlbmFibGVkLiAqLwotCWlmIChody0+cGlwZV9hX2NvbmYgJiBQSVBFQ09ORl9FTkFCTEUpCi0JCXBpcGUgPSBQSVBFX0E7Ci0JZWxzZSBpZiAoaHctPnBpcGVfYl9jb25mICYgUElQRUNPTkZfRU5BQkxFKQotCQlwaXBlID0gUElQRV9COwotCiAJLyogU2V0IHdoaWNoIHBpcGUncyByZWdpc3RlcnMgd2lsbCBiZSBzZXQuICovCiAJaWYgKHBpcGUgPT0gUElQRV9CKSB7CiAJCWRwbGwgPSAmaHctPmRwbGxfYjsKQEAgLTEyNjIsNyArMTI4Miw2IEBACiBpbnQgaW50ZWxmYmh3X3Byb2dyYW1fbW9kZShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbywKIAkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbGZiX2h3c3RhdGUgKmh3LCBpbnQgYmxhbmspCiB7Ci0JaW50IHBpcGUgPSBQSVBFX0E7CiAJdTMyIHRtcDsKIAljb25zdCB1MzIgKmRwbGwsICpmcDAsICpmcDEsICpwaXBlX2NvbmY7CiAJY29uc3QgdTMyICpocywgKmh0LCAqaGIsICp2cywgKnZ0LCAqdmIsICpzczsKQEAgLTEyNzIsNyArMTI5MSw3IEBACiAJdTMyIHNyY19zaXplX3JlZzsKIAl1MzIgY291bnQsIHRtcF92YWxbM107CiAKLQkvKiBBc3N1bWUgc2luZ2xlIHBpcGUsIGRpc3BsYXkgcGxhbmUgQSwgYW5hbG9nIENSVC4gKi8KKwkvKiBBc3N1bWUgc2luZ2xlIHBpcGUgKi8KIAogI2lmIFZFUkJPU0UgPiAwCiAJREJHX01TRygiaW50ZWxmYmh3X3Byb2dyYW1fbW9kZVxuIik7CkBAIC0xMjgzLDE1ICsxMzAyLDkgQEAKIAl0bXAgfD0gVkdBX0RJU0FCTEU7CiAJT1VUUkVHKFZHQUNOVFJMLCB0bXApOwogCi0JLyogQ2hlY2sgd2hldGhlciBwaXBlIEEgb3IgcGlwZSBCIGlzIGVuYWJsZWQuICovCi0JaWYgKGh3LT5waXBlX2FfY29uZiAmIFBJUEVDT05GX0VOQUJMRSkKLQkJcGlwZSA9IFBJUEVfQTsKLQllbHNlIGlmIChody0+cGlwZV9iX2NvbmYgJiBQSVBFQ09ORl9FTkFCTEUpCi0JCXBpcGUgPSBQSVBFX0I7CisJZGluZm8tPnBpcGUgPSBpbnRlbGZiaHdfYWN0aXZlX3BpcGUoaHcpOwogCi0JZGluZm8tPnBpcGUgPSBwaXBlOwotCi0JaWYgKHBpcGUgPT0gUElQRV9CKSB7CisJaWYgKGRpbmZvLT5waXBlID09IFBJUEVfQikgewogCQlkcGxsID0gJmh3LT5kcGxsX2I7CiAJCWZwMCA9ICZody0+ZnBiMDsKIAkJZnAxID0gJmh3LT5mcGIxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5oIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5oCmluZGV4IDBiMDc2YmEuLjIxNmNhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmgKQEAgLTYwNCw1ICs2MDQsNiBAQAogZXh0ZXJuIGludCBpbnRlbGZiaHdfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CiBleHRlcm4gdm9pZCBpbnRlbGZiaHdfZGlzYWJsZV9pcnEoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pOwogZXh0ZXJuIGludCBpbnRlbGZiaHdfd2FpdF9mb3JfdnN5bmMoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sIHUzMiBwaXBlKTsKK2V4dGVybiBpbnQgaW50ZWxmYmh3X2FjdGl2ZV9waXBlKGNvbnN0IHN0cnVjdCBpbnRlbGZiX2h3c3RhdGUgKmh3KTsKIAogI2VuZGlmIC8qIF9JTlRFTEZCSFdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmMKaW5kZXggMDlmNmUwNC4uYzE1ZjhhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jCkBAIC0zNjgsNyArMzY4LDggQEAKIAkJCQkJTTEwNjRfWERWSUNMS0NUUkxfQzFEVklDTEtFTiB8CiAJCQkJCU0xMDY0X1hEVklDTEtDVFJMX0RWSUxPT1BDVEwgfAogCQkJCQlNMTA2NF9YRFZJQ0xLQ1RSTF9QMUxPT1BCV0RUQ1RMOwotCQkJCW1hdHJveGZiX0RBQ19vdXQobWluZm8sIE0xMDY0X1hEVklDTEtDVFJMLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXR0aW5nIHRoaXMgYnJlYWtzIFBDIHN5c3RlbXMgc28gZG9uJ3QgZG8gaXQgKi8KKwkJCQkvKiBtYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YRFZJQ0xLQ1RSTCwgdG1wKTsgKi8KIAkJCQltYXRyb3hmYl9EQUNfb3V0KG1pbmZvLCBNMTA2NF9YUFdSQ1RSTCwKIAkJCQkJCSB4cHdyY3RybCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF4aW5lZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWF4aW5lZmIuYwppbmRleCA1ZTkxYzJiLi43ODU0YzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21heGluZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXhpbmVmYi5jCkBAIC05Miw2ICs5Miw5IEBACiAJLyogdmFsdWUgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBwYWxldHRlIHJlZy4gKi8KIAl1bnNpZ25lZCBsb25nIGh3X2NvbG9ydmFsdWUgPSAwOwogCisJaWYgKHJlZ25vID4gMjU1KQorCQlyZXR1cm4gMTsKKwogCXJlZCAgID4+PSA4OyAgICAvKiBUaGUgY21hcCBmaWVsZHMgYXJlIDE2IGJpdHMgICAgKi8KIAlncmVlbiA+Pj0gODsgICAgLyogd2lkZSwgYnV0IHRoZSBoYXJ3YXJlIGNvbG9ybWFwICovCiAJYmx1ZSAgPj49IDg7ICAgIC8qIHJlZ2lzdGVycyBhcmUgb25seSA4IGJpdHMgd2lkZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYjg2Mnh4L01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9tYjg2Mnh4L01ha2VmaWxlCmluZGV4IDA3NjY0ODEuLmQ3Nzc3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHgvTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTUI4NjJ4eCBmcmFtZWJ1ZmZlciBkcml2ZXIKICMKIAotb2JqLSQoQ09ORklHX0ZCX01CODYyWFgpCTo9IG1iODYyeHhmYi5vCitvYmotJChDT05GSUdfRkJfTUI4NjJYWCkJOj0gbWI4NjJ4eGZiLm8gbWI4NjJ4eGZiX2FjY2VsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9tYjg2Mnh4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9tYjg2Mnh4ZmIuYwppbmRleCBhMjhlM2NmLi5mYWJiMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21iODYyeHgvbWI4NjJ4eGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYjg2Mnh4L21iODYyeHhmYi5jCkBAIC0yMTQsNiArMjE0LDggQEAKIAl1bnNpZ25lZCBsb25nIHJlZywgc2M7CiAKIAlkZXZfZGJnKHBhci0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAocGFyLT50eXBlID09IEJUX0NPUkFMUCkKKwkJbWI4NjJ4eGZiX2luaXRfYWNjZWwoZmJpLCBmYmktPnZhci54cmVzKTsKIAogCWlmIChwYXItPnByZV9pbml0KQogCQlyZXR1cm4gMDsKQEAgLTQ1Myw2ICs0NTUsMTggQEAKIAkJcHRyICs9IHNwcmludGYocHRyLCAiJTA4eCA9ICUwOHhcbiIsCiAJCQkgICAgICAgcmVnLCBpbnJlZyhkaXNwLCByZWcpKTsKIAorCWZvciAocmVnID0gMHg0MDA7IHJlZyA8PSAweDQxMDsgcmVnICs9IDQpCisJCXB0ciArPSBzcHJpbnRmKHB0ciwgImdlbyAlMDh4ID0gJTA4eFxuIiwKKwkJCSAgICAgICByZWcsIGlucmVnKGdlbywgcmVnKSk7CisKKwlmb3IgKHJlZyA9IDB4NDAwOyByZWcgPD0gMHg0MTA7IHJlZyArPSA0KQorCQlwdHIgKz0gc3ByaW50ZihwdHIsICJkcmF3ICUwOHggPSAlMDh4XG4iLAorCQkJICAgICAgIHJlZywgaW5yZWcoZHJhdywgcmVnKSk7CisKKwlmb3IgKHJlZyA9IDB4NDQwOyByZWcgPD0gMHg0NTA7IHJlZyArPSA0KQorCQlwdHIgKz0gc3ByaW50ZihwdHIsICJkcmF3ICUwOHggPSAlMDh4XG4iLAorCQkJICAgICAgIHJlZywgaW5yZWcoZHJhdywgcmVnKSk7CisKIAlyZXR1cm4gcHRyIC0gYnVmOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21iODYyeHgvbWI4NjJ4eGZiLmggYi9kcml2ZXJzL3ZpZGVvL21iODYyeHgvbWI4NjJ4eGZiLmgKaW5kZXggYzRjOGY0ZC4uZDdlN2NiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYjg2Mnh4L21iODYyeHhmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9tYjg2Mnh4ZmIuaApAQCAtNjEsNiArNjEsOCBAQAogCXUzMgkJCXBzZXVkb19wYWxldHRlWzE2XTsKIH07CiAKK2V4dGVybiB2b2lkIG1iODYyeHhmYl9pbml0X2FjY2VsKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgeHJlcyk7CisKICNpZiBkZWZpbmVkKENPTkZJR19GQl9NQjg2MlhYX0xJTUUpICYmIGRlZmluZWQoQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQykKICNlcnJvcgkiU2VsZWN0IExpbWUgR0RDIG9yIENvcmFsUC9DYXJtaW5lIHN1cHBvcnQsIGJ1dCBub3QgYm90aCB0b2dldGhlciIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYjg2Mnh4L21iODYyeHhmYl9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9tYjg2Mnh4L21iODYyeHhmYl9hY2NlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTI1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHgvbWI4NjJ4eGZiX2FjY2VsLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBkcml2ZXJzL21iODYyeHgvbWI4NjJ4eGZiX2FjY2VsLmMKKyAqCisgKiBGdWppdHN1IENhcm1pbmUvQ29yYWwtUChBKS9MaW1lIGZyYW1lYnVmZmVyIGRyaXZlciBhY2NlbGVyYXRpb24gc3VwcG9ydAorICoKKyAqIChDKSAyMDA3IEFsZXhhbmRlciBTaGlzaGtpbiA8dmlydHVvc29Ac2xpbmQub3JnPgorICogKEMpIDIwMDkgVmFsZW50aW4gU2l0ZGlrb3YgPHZhbGVudGluLnNpdGRpa292QHNpZW1lbnMuY29tPgorICogKEMpIDIwMDkgU2llbWVucyBBRworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19PRikKKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2VuZGlmCisjaW5jbHVkZSAibWI4NjJ4eGZiLmgiCisjaW5jbHVkZSAibWI4NjJ4eF9yZWcuaCIKKyNpbmNsdWRlICJtYjg2Mnh4ZmJfYWNjZWwuaCIKKworc3RhdGljIHZvaWQgbWI4NjJ4eGZiX3dyaXRlX2ZpZm8odTMyIGNvdW50LCB1MzIgKmRhdGEsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBtYjg2Mnh4ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RhdGljIHUzMiBmcmVlOworCisJdTMyIHRvdGFsID0gMDsKKwl3aGlsZSAodG90YWwgPCBjb3VudCkgeworCQlpZiAoZnJlZSkgeworCQkJb3V0cmVnKGdlbywgR0RDX0dFT19SRUdfSU5QVVRfRklGTywgZGF0YVt0b3RhbF0pOworCQkJdG90YWwrKzsKKwkJCWZyZWUtLTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUgPSAodTMyKSBpbnJlZyhkcmF3LCBHRENfUkVHX0ZJRk9fQ09VTlQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtYjg2MjkwZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCV9fdTMyIGNtZFs2XTsKKworCWNtZFswXSA9IChHRENfVFlQRV9TRVRSRUdJU1RFUiA8PCAyNCkgfCAoMSA8PCAxNikgfCBHRENfUkVHX01PREVfQklUTUFQOworCS8qIFNldCByYXN0ZXIgb3BlcmF0aW9uICovCisJY21kWzFdID0gKDIgPDwgNykgfCAoR0RDX1JPUF9DT1BZIDw8IDkpOworCWNtZFsyXSA9IEdEQ19UWVBFX0JMVENPUFlQIDw8IDI0OworCisJaWYgKGFyZWEtPnN4ID49IGFyZWEtPmR4ICYmIGFyZWEtPnN5ID49IGFyZWEtPmR5KQorCQljbWRbMl0gfD0gR0RDX0NNRF9CTFRDT1BZX1RPUF9MRUZUIDw8IDE2OworCWVsc2UgaWYgKGFyZWEtPnN4ID49IGFyZWEtPmR4ICYmIGFyZWEtPnN5IDw9IGFyZWEtPmR5KQorCQljbWRbMl0gfD0gR0RDX0NNRF9CTFRDT1BZX0JPVFRPTV9MRUZUIDw8IDE2OworCWVsc2UgaWYgKGFyZWEtPnN4IDw9IGFyZWEtPmR4ICYmIGFyZWEtPnN5ID49IGFyZWEtPmR5KQorCQljbWRbMl0gfD0gR0RDX0NNRF9CTFRDT1BZX1RPUF9SSUdIVCA8PCAxNjsKKwllbHNlCisJCWNtZFsyXSB8PSBHRENfQ01EX0JMVENPUFlfQk9UVE9NX1JJR0hUIDw8IDE2OworCisJY21kWzNdID0gKGFyZWEtPnN5IDw8IDE2KSB8IGFyZWEtPnN4OworCWNtZFs0XSA9IChhcmVhLT5keSA8PCAxNikgfCBhcmVhLT5keDsKKwljbWRbNV0gPSAoYXJlYS0+aGVpZ2h0IDw8IDE2KSB8IGFyZWEtPndpZHRoOworCW1iODYyeHhmYl93cml0ZV9maWZvKDYsIGNtZCwgaW5mbyk7Cit9CisKKy8qCisgKiBGaWxsIGluIHRoZSBjbWQgYXJyYXkgL0dEQyBGSUZPIGNvbW1hbmRzLyB0byBkcmF3IGEgMWJpdCBpbWFnZS4KKyAqIE1ha2Ugc3VyZSBjbWQgaGFzIGVub3VnaCByb29tIQorICovCitzdGF0aWMgdm9pZCBtYjg2MjkwZmJfaW1hZ2VibGl0MSh1MzIgKmNtZCwgdTE2IHN0ZXAsIHUxNiBkeCwgdTE2IGR5LAorCQkJCSB1MTYgd2lkdGgsIHUxNiBoZWlnaHQsIHUzMiBmZ2NvbG9yLAorCQkJCSB1MzIgYmdjb2xvciwgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSwKKwkJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IGk7CisJdW5zaWduZWQgY29uc3QgY2hhciAqbGluZTsKKwl1MTYgYnl0ZXM7CisKKwkvKiBzZXQgY29sb3JzIGFuZCByYXN0ZXIgb3BlcmF0aW9uIHJlZ3MgKi8KKwljbWRbMF0gPSAoR0RDX1RZUEVfU0VUUkVHSVNURVIgPDwgMjQpIHwgKDEgPDwgMTYpIHwgR0RDX1JFR19NT0RFX0JJVE1BUDsKKwkvKiBTZXQgcmFzdGVyIG9wZXJhdGlvbiAqLworCWNtZFsxXSA9ICgyIDw8IDcpIHwgKEdEQ19ST1BfQ09QWSA8PCA5KTsKKwljbWRbMl0gPQorCSAgICAoR0RDX1RZUEVfU0VUQ09MT1JSRUdJU1RFUiA8PCAyNCkgfCAoR0RDX0NNRF9CT0RZX0ZPUkVfQ09MT1IgPDwgMTYpOworCWNtZFszXSA9IGZnY29sb3I7CisJY21kWzRdID0KKwkgICAgKEdEQ19UWVBFX1NFVENPTE9SUkVHSVNURVIgPDwgMjQpIHwgKEdEQ19DTURfQk9EWV9CQUNLX0NPTE9SIDw8IDE2KTsKKwljbWRbNV0gPSBiZ2NvbG9yOworCisJaSA9IDA7CisJbGluZSA9IGltYWdlLT5kYXRhOworCWJ5dGVzID0gKGltYWdlLT53aWR0aCArIDcpID4+IDM7CisKKwkvKiBhbmQgdGhlIGltYWdlICovCisJY21kWzZdID0gKEdEQ19UWVBFX0RSQVdCSVRNQVBQIDw8IDI0KSB8CisJICAgIChHRENfQ01EX0JJVE1BUCA8PCAxNikgfCAoMiArIChzdGVwICogaGVpZ2h0KSk7CisJY21kWzddID0gKGR5IDw8IDE2KSB8IGR4OworCWNtZFs4XSA9IChoZWlnaHQgPDwgMTYpIHwgd2lkdGg7CisKKwl3aGlsZSAoaSA8IGhlaWdodCkgeworCQltZW1jcHkoJmNtZFs5ICsgaSAqIHN0ZXBdLCBsaW5lLCBzdGVwIDw8IDIpOworI2lmZGVmIF9fTElUVExFX0VORElBTgorCQl7CisJCQlpbnQgayA9IDA7CisJCQlmb3IgKGsgPSAwOyBrIDwgc3RlcDsgaysrKQorCQkJCWNtZFs5ICsgaSAqIHN0ZXAgKyBrXSA9CisJCQkJICAgIGNwdV90b19iZTMyKGNtZFs5ICsgaSAqIHN0ZXAgKyBrXSk7CisJCX0KKyNlbmRpZgorCQlsaW5lICs9IGJ5dGVzOworCQlpKys7CisJfQorfQorCisvKgorICogRmlsbCBpbiB0aGUgY21kIGFycmF5IC9HREMgRklGTyBjb21tYW5kcy8gdG8gZHJhdyBhIDhiaXQgaW1hZ2UuCisgKiBNYWtlIHN1cmUgY21kIGhhcyBlbm91Z2ggcm9vbSEKKyAqLworc3RhdGljIHZvaWQgbWI4NjI5MGZiX2ltYWdlYmxpdDgodTMyICpjbWQsIHUxNiBzdGVwLCB1MTYgZHgsIHUxNiBkeSwKKwkJCQkgdTE2IHdpZHRoLCB1MTYgaGVpZ2h0LCB1MzIgZmdjb2xvciwKKwkJCQkgdTMyIGJnY29sb3IsIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsCisJCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCBpLCBqOworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKmxpbmUsICpwdHI7CisJdTE2IGJ5dGVzOworCisJY21kWzBdID0gKEdEQ19UWVBFX0RSQVdCSVRNQVBQIDw8IDI0KSB8CisJICAgIChHRENfQ01EX0JMVF9EUkFXIDw8IDE2KSB8ICgyICsgKGhlaWdodCAqIHN0ZXApKTsKKwljbWRbMV0gPSAoZHkgPDwgMTYpIHwgZHg7CisJY21kWzJdID0gKGhlaWdodCA8PCAxNikgfCB3aWR0aDsKKworCWkgPSAwOworCWxpbmUgPSBwdHIgPSBpbWFnZS0+ZGF0YTsKKwlieXRlcyA9IGltYWdlLT53aWR0aDsKKworCXdoaWxlIChpIDwgaGVpZ2h0KSB7CisJCXB0ciA9IGxpbmU7CisJCWZvciAoaiA9IDA7IGogPCBzdGVwOyBqKyspIHsKKwkJCWNtZFszICsgaSAqIHN0ZXAgKyBqXSA9CisJCQkgICAgKCgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpWypwdHJdKSAmIDB4ZmZmZjsKKwkJCXB0cisrOworCQkJY21kWzMgKyBpICogc3RlcCArIGpdIHw9CisJCQkgICAgKCgoKHUzMiAqKSAoaW5mby0+CisJCQkJCXBzZXVkb19wYWxldHRlKSlbKnB0cl0pICYgMHhmZmZmKSA8PCAxNjsKKwkJCXB0cisrOworCQl9CisKKwkJbGluZSArPSBieXRlczsKKwkJaSsrOworCX0KK30KKworLyoKKyAqIEZpbGwgaW4gdGhlIGNtZCBhcnJheSAvR0RDIEZJRk8gY29tbWFuZHMvIHRvIGRyYXcgYSAxNmJpdCBpbWFnZS4KKyAqIE1ha2Ugc3VyZSBjbWQgaGFzIGVub3VnaCByb29tIQorICovCitzdGF0aWMgdm9pZCBtYjg2MjkwZmJfaW1hZ2VibGl0MTYodTMyICpjbWQsIHUxNiBzdGVwLCB1MTYgZHgsIHUxNiBkeSwKKwkJCQkgIHUxNiB3aWR0aCwgdTE2IGhlaWdodCwgdTMyIGZnY29sb3IsCisJCQkJICB1MzIgYmdjb2xvciwgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSwKKwkJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCBpOworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKmxpbmU7CisJdTE2IGJ5dGVzOworCisJaSA9IDA7CisJbGluZSA9IGltYWdlLT5kYXRhOworCWJ5dGVzID0gaW1hZ2UtPndpZHRoIDw8IDE7CisKKwljbWRbMF0gPSAoR0RDX1RZUEVfRFJBV0JJVE1BUFAgPDwgMjQpIHwKKwkgICAgKEdEQ19DTURfQkxUX0RSQVcgPDwgMTYpIHwgKDIgKyBzdGVwICogaGVpZ2h0KTsKKwljbWRbMV0gPSAoZHkgPDwgMTYpIHwgZHg7CisJY21kWzJdID0gKGhlaWdodCA8PCAxNikgfCB3aWR0aDsKKworCXdoaWxlIChpIDwgaGVpZ2h0KSB7CisJCW1lbWNweSgmY21kWzMgKyBpICogc3RlcF0sIGxpbmUsIHN0ZXApOworCQlsaW5lICs9IGJ5dGVzOworCQlpKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBtYjg2MjkwZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCWNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJaW50IG1kcjsKKwl1MzIgKmNtZCA9IE5VTEw7CisJdm9pZCAoKmNtZGZuKSAodTMyICosIHUxNiwgdTE2LCB1MTYsIHUxNiwgdTE2LCB1MzIsIHUzMiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqLCBzdHJ1Y3QgZmJfaW5mbyAqKSA9IE5VTEw7CisJdTMyIGNtZGxlbjsKKwl1MzIgZmdjb2xvciA9IDAsIGJnY29sb3IgPSAwOworCXUxNiBzdGVwOworCisJdTE2IHdpZHRoID0gaW1hZ2UtPndpZHRoLCBoZWlnaHQgPSBpbWFnZS0+aGVpZ2h0OworCXUxNiBkeCA9IGltYWdlLT5keCwgZHkgPSBpbWFnZS0+ZHk7CisJaW50IHgyLCB5MiwgdnhyZXMsIHZ5cmVzOworCisJbWRyID0gKEdEQ19ST1BfQ09QWSA8PCA5KTsKKwl4MiA9IGltYWdlLT5keCArIGltYWdlLT53aWR0aDsKKwl5MiA9IGltYWdlLT5keSArIGltYWdlLT5oZWlnaHQ7CisJdnhyZXMgPSBpbmZvLT52YXIueHJlc192aXJ0dWFsOworCXZ5cmVzID0gaW5mby0+dmFyLnlyZXNfdmlydHVhbDsKKwl4MiA9IG1pbih4MiwgdnhyZXMpOworCXkyID0gbWluKHkyLCB2eXJlcyk7CisJd2lkdGggPSB4MiAtIGR4OworCWhlaWdodCA9IHkyIC0gZHk7CisKKwlzd2l0Y2ggKGltYWdlLT5kZXB0aCkgeworCWNhc2UgMToKKwkJc3RlcCA9ICh3aWR0aCArIDMxKSA+PiA1OworCQljbWRsZW4gPSA5ICsgaGVpZ2h0ICogc3RlcDsKKwkJY21kZm4gPSBtYjg2MjkwZmJfaW1hZ2VibGl0MTsKKwkJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAorCQkgICAgaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElSRUNUQ09MT1IpIHsKKwkJCWZnY29sb3IgPQorCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07CisJCQliZ2NvbG9yID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCQl9IGVsc2UgeworCQkJZmdjb2xvciA9IGltYWdlLT5mZ19jb2xvcjsKKwkJCWJnY29sb3IgPSBpbWFnZS0+YmdfY29sb3I7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgODoKKwkJc3RlcCA9ICh3aWR0aCArIDEpID4+IDE7CisJCWNtZGxlbiA9IDMgKyBoZWlnaHQgKiBzdGVwOworCQljbWRmbiA9IG1iODYyOTBmYl9pbWFnZWJsaXQ4OworCQlicmVhazsKKworCWNhc2UgMTY6CisJCXN0ZXAgPSAod2lkdGggKyAxKSA+PiAxOworCQljbWRsZW4gPSAzICsgaGVpZ2h0ICogc3RlcDsKKwkJY21kZm4gPSBtYjg2MjkwZmJfaW1hZ2VibGl0MTY7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCXJldHVybjsKKwl9CisKKwljbWQgPSBrbWFsbG9jKGNtZGxlbiAqIDQsIEdGUF9ETUEpOworCWlmICghY21kKQorCQlyZXR1cm4gY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJY21kZm4oY21kLCBzdGVwLCBkeCwgZHksIHdpZHRoLCBoZWlnaHQsIGZnY29sb3IsIGJnY29sb3IsIGltYWdlLCBpbmZvKTsKKwltYjg2Mnh4ZmJfd3JpdGVfZmlmbyhjbWRsZW4sIGNtZCwgaW5mbyk7CisJa2ZyZWUoY21kKTsKK30KKworc3RhdGljIHZvaWQgbWI4NjI5MGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKworCXUzMiB4MiwgeTIsIHZ4cmVzLCB2eXJlcywgaGVpZ2h0LCB3aWR0aCwgZmc7CisJdTMyIGNtZFs3XTsKKworCXZ4cmVzID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKKwl2eXJlcyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CisKKwlpZiAoIXJlY3QtPndpZHRoIHx8ICFyZWN0LT5oZWlnaHQgfHwgcmVjdC0+ZHggPiB2eHJlcworCSAgICB8fCByZWN0LT5keSA+IHZ5cmVzKQorCQlyZXR1cm47CisKKwkvKiBXZSBjb3VsZCB1c2UgaGFyZHdhcmUgY2xpcHBpbmcgYnV0IG9uIG1hbnkgY2FyZHMgeW91IGdldCBhcm91bmQKKwkgKiBoYXJkd2FyZSBjbGlwcGluZyBieSB3cml0aW5nIHRvIGZyYW1lYnVmZmVyIGRpcmVjdGx5LiAqLworCXgyID0gcmVjdC0+ZHggKyByZWN0LT53aWR0aDsKKwl5MiA9IHJlY3QtPmR5ICsgcmVjdC0+aGVpZ2h0OworCXgyID0gbWluKHgyLCB2eHJlcyk7CisJeTIgPSBtaW4oeTIsIHZ5cmVzKTsKKwl3aWR0aCA9IHgyIC0gcmVjdC0+ZHg7CisJaGVpZ2h0ID0geTIgLSByZWN0LT5keTsKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SIHx8CisJICAgIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKQorCQlmZyA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlY3QtPmNvbG9yXTsKKwllbHNlCisJCWZnID0gcmVjdC0+Y29sb3I7CisKKwlzd2l0Y2ggKHJlY3QtPnJvcCkgeworCisJY2FzZSBST1BfWE9SOgorCQkvKiBTZXQgcmFzdGVyIG9wZXJhdGlvbiAqLworCQljbWRbMV0gPSAoMiA8PCA3KSB8IChHRENfUk9QX1hPUiA8PCA5KTsKKwkJYnJlYWs7CisKKwljYXNlIFJPUF9DT1BZOgorCQkvKiBTZXQgcmFzdGVyIG9wZXJhdGlvbiAqLworCQljbWRbMV0gPSAoMiA8PCA3KSB8IChHRENfUk9QX0NPUFkgPDwgOSk7CisJCWJyZWFrOworCisJfQorCisJY21kWzBdID0gKEdEQ19UWVBFX1NFVFJFR0lTVEVSIDw8IDI0KSB8ICgxIDw8IDE2KSB8IEdEQ19SRUdfTU9ERV9CSVRNQVA7CisJLyogY21kWzFdIHNldCBlYXJsaWVyICovCisJY21kWzJdID0KKwkgICAgKEdEQ19UWVBFX1NFVENPTE9SUkVHSVNURVIgPDwgMjQpIHwgKEdEQ19DTURfQk9EWV9GT1JFX0NPTE9SIDw8IDE2KTsKKwljbWRbM10gPSBmZzsKKwljbWRbNF0gPSAoR0RDX1RZUEVfRFJBV1JFQ1RQIDw8IDI0KSB8IChHRENfQ01EX0JMVF9GSUxMIDw8IDE2KTsKKwljbWRbNV0gPSAocmVjdC0+ZHkgPDwgMTYpIHwgKHJlY3QtPmR4KTsKKwljbWRbNl0gPSAoaGVpZ2h0IDw8IDE2KSB8IHdpZHRoOworCisJbWI4NjJ4eGZiX3dyaXRlX2ZpZm8oNywgY21kLCBpbmZvKTsKK30KKwordm9pZCBtYjg2Mnh4ZmJfaW5pdF9hY2NlbChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHhyZXMpCit7CisJc3RydWN0IG1iODYyeHhmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKKwkJaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0OworCQlpbmZvLT5mYm9wcy0+ZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWE7CisJCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0OworCX0gZWxzZSB7CisJCW91dHJlZyhkaXNwLCBHQ19MMEVNLCAzKTsKKwkJaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0ID0gbWI4NjI5MGZiX2ZpbGxyZWN0OworCQlpbmZvLT5mYm9wcy0+ZmJfY29weWFyZWEgPSBtYjg2MjkwZmJfY29weWFyZWE7CisJCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQgPSBtYjg2MjkwZmJfaW1hZ2VibGl0OworCX0KKwlvdXRyZWcoZHJhdywgR0RDX1JFR19EUkFXX0JBU0UsIDApOworCW91dHJlZyhkcmF3LCBHRENfUkVHX01PREVfTUlTQywgMHg4MDAwKTsKKwlvdXRyZWcoZHJhdywgR0RDX1JFR19YX1JFU09MVVRJT04sIHhyZXMpOworCisJaW5mby0+ZmxhZ3MgfD0KKwkgICAgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8CisJICAgIEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVDsKKwlpbmZvLT5maXguYWNjZWwgPSAweGZmOwkvKkZJWE1FOiBhZGQgcmlnaHQgZGVmaW5lICovCit9CitFWFBPUlRfU1lNQk9MKG1iODYyeHhmYl9pbml0X2FjY2VsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9tYjg2Mnh4ZmJfYWNjZWwuaCBiL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9tYjg2Mnh4ZmJfYWNjZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmEyZGZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9tYjg2Mnh4L21iODYyeHhmYl9hY2NlbC5oCkBAIC0wLDAgKzEsMjAzIEBACisjaWZuZGVmIF9fTUI4MjZYWEZCX0FDQ0VMX0hfXworI2RlZmluZSBfX01CODI2WFhGQl9BQ0NFTF9IX18KKworLyogcmVnaXN0ZXJzICovCisjZGVmaW5lIEdEQ19HRU9fUkVHX0lOUFVUX0ZJRk8gMHgwMDAwMDQwMEwKKworLyogU3BlY2lhbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0RDX1JFR19DVFJMICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBMCisjZGVmaW5lIEdEQ19SRUdfRklGT19TVEFUVVMgICAgICAgICAweDAwMDAwNDA0TAorI2RlZmluZSBHRENfUkVHX0ZJRk9fQ09VTlQgICAgICAgICAgMHgwMDAwMDQwOEwKKyNkZWZpbmUgR0RDX1JFR19TRVRVUF9TVEFUVVMgICAgICAgIDB4MDAwMDA0MENMCisjZGVmaW5lIEdEQ19SRUdfRERBX1NUQVRVUyAgICAgICAgICAweDAwMDAwNDEwTAorI2RlZmluZSBHRENfUkVHX0VOR0lORV9TVEFUVVMgICAgICAgMHgwMDAwMDQxNEwKKyNkZWZpbmUgR0RDX1JFR19FUlJPUl9TVEFUVVMgICAgICAgIDB4MDAwMDA0MThMCisjZGVmaW5lIEdEQ19SRUdfTU9ERV9NSVNDICAgICAgICAgICAweDAwMDAwNDIwTAkvKiBNRFIwICovCisjZGVmaW5lIEdEQ19SRUdfTU9ERV9MSU5FICAgICAgICAgICAweDAwMDAwNDI0TAkvKiBNRFIxICovCisjZGVmaW5lIEdEQ19SRUdfTU9ERV9QT0xZR09OICAgICAgICAweDAwMDAwNDI4TAkvKiBNRFIyICovCisjZGVmaW5lIEdEQ19SRUdfTU9ERV9URVhUVVJFICAgICAgICAweDAwMDAwNDJDTAkvKiBNRFIzICovCisjZGVmaW5lIEdEQ19SRUdfTU9ERV9CSVRNQVAgICAgICAgICAweDAwMDAwNDMwTAkvKiBNRFI0ICovCisjZGVmaW5lIEdEQ19SRUdfTU9ERV9FWFRFTlNJT04gICAgICAweDAwMDAwNDNDTAkvKiBNRFI3ICovCisKKy8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEdEQ19SRUdfRFJBV19CQVNFICAgICAgICAgICAweDAwMDAwNDQwTAorI2RlZmluZSBHRENfUkVHX1hfUkVTT0xVVElPTiAgICAgICAgMHgwMDAwMDQ0NEwKKyNkZWZpbmUgR0RDX1JFR19aX0JBU0UgICAgICAgICAgICAgIDB4MDAwMDA0NDhMCisjZGVmaW5lIEdEQ19SRUdfVEVYVFVSRV9CQVNFICAgICAgICAweDAwMDAwNDRDTAorI2RlZmluZSBHRENfUkVHX1BPTFlHT05fRkxBR19CQVNFICAgMHgwMDAwMDQ1MEwKKyNkZWZpbmUgR0RDX1JFR19DTElQX1hNSU4gICAgICAgICAgIDB4MDAwMDA0NTRMCisjZGVmaW5lIEdEQ19SRUdfQ0xJUF9YTUFYICAgICAgICAgICAweDAwMDAwNDU4TAorI2RlZmluZSBHRENfUkVHX0NMSVBfWU1JTiAgICAgICAgICAgMHgwMDAwMDQ1Q0wKKyNkZWZpbmUgR0RDX1JFR19DTElQX1lNQVggICAgICAgICAgIDB4MDAwMDA0NjBMCisjZGVmaW5lIEdEQ19SRUdfVEVYVVJFX1NJWkUgICAgICAgICAweDAwMDAwNDY0TAorI2RlZmluZSBHRENfUkVHX1RJTEVfU0laRSAgICAgICAgICAgMHgwMDAwMDQ2OEwKKyNkZWZpbmUgR0RDX1JFR19URVhfQlVGX09GRlNFVCAgICAgIDB4MDAwMDA0NkNMCisKKy8qIGZvciBNQjg2MjkzIG9yIGxhdGVyICovCisjZGVmaW5lIEdEQ19SRUdfQUxQSEFfTUFQX0JBU0UgICAgICAweDAwMDAwNDc0TAkvKiBBQlIgKi8KKworLyogQ29uc3RhbnQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdEQ19SRUdfRk9SRUdST1VORF9DT0xPUiAgICAweDAwMDAwNDgwTAorI2RlZmluZSBHRENfUkVHX0JBQ0tHUk9VTkRfQ09MT1IgICAgMHgwMDAwMDQ4NEwKKyNkZWZpbmUgR0RDX1JFR19BTFBIQSAgICAgICAgICAgICAgIDB4MDAwMDA0ODhMCisjZGVmaW5lIEdEQ19SRUdfTElORV9QQVRURVJOICAgICAgICAweDAwMDAwNDhDTAorI2RlZmluZSBHRENfUkVHX1RFWF9CT1JERVJfQ09MT1IgICAgMHgwMDAwMDQ5NEwKKyNkZWZpbmUgR0RDX1JFR19MSU5FX1BBVFRFUk5fT0ZGU0VUIDB4MDAwMDAzRTBMCisKKy8qIENvb21hbmQgQ29kZSAqLworI2RlZmluZSBHRENfQ01EX1BJWEVMICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBMCisjZGVmaW5lIEdEQ19DTURfUElYRUxfWiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKworI2RlZmluZSBHRENfQ01EX1hfVkVDVE9SICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBMCisjZGVmaW5lIEdEQ19DTURfWV9WRUNUT1IgICAgICAgICAgICAgICAgMHgwMDAwMDAyMUwKKyNkZWZpbmUgR0RDX0NNRF9YX1ZFQ1RPUl9OT0VORCAgICAgICAgICAweDAwMDAwMDIyTAorI2RlZmluZSBHRENfQ01EX1lfVkVDVE9SX05PRU5EICAgICAgICAgIDB4MDAwMDAwMjNMCisjZGVmaW5lIEdEQ19DTURfWF9WRUNUT1JfQkxQTyAgICAgICAgICAgMHgwMDAwMDAyNEwKKyNkZWZpbmUgR0RDX0NNRF9ZX1ZFQ1RPUl9CTFBPICAgICAgICAgICAweDAwMDAwMDI1TAorI2RlZmluZSBHRENfQ01EX1hfVkVDVE9SX05PRU5EX0JMUE8gICAgIDB4MDAwMDAwMjZMCisjZGVmaW5lIEdEQ19DTURfWV9WRUNUT1JfTk9FTkRfQkxQTyAgICAgMHgwMDAwMDAyN0wKKyNkZWZpbmUgR0RDX0NNRF9BQV9YX1ZFQ1RPUiAgICAgICAgICAgICAweDAwMDAwMDI4TAorI2RlZmluZSBHRENfQ01EX0FBX1lfVkVDVE9SICAgICAgICAgICAgIDB4MDAwMDAwMjlMCisjZGVmaW5lIEdEQ19DTURfQUFfWF9WRUNUT1JfTk9FTkQgICAgICAgMHgwMDAwMDAyQUwKKyNkZWZpbmUgR0RDX0NNRF9BQV9ZX1ZFQ1RPUl9OT0VORCAgICAgICAweDAwMDAwMDJCTAorI2RlZmluZSBHRENfQ01EX0FBX1hfVkVDVE9SX0JMUE8gICAgICAgIDB4MDAwMDAwMkNMCisjZGVmaW5lIEdEQ19DTURfQUFfWV9WRUNUT1JfQkxQTyAgICAgICAgMHgwMDAwMDAyREwKKyNkZWZpbmUgR0RDX0NNRF9BQV9YX1ZFQ1RPUl9OT0VORF9CTFBPICAweDAwMDAwMDJFTAorI2RlZmluZSBHRENfQ01EX0FBX1lfVkVDVE9SX05PRU5EX0JMUE8gIDB4MDAwMDAwMkZMCisKKyNkZWZpbmUgR0RDX0NNRF8wX1ZFQ1RPUiAgICAgICAgICAgICAgICAweDAwMDAwMDMwTAorI2RlZmluZSBHRENfQ01EXzFfVkVDVE9SICAgICAgICAgICAgICAgIDB4MDAwMDAwMzFMCisjZGVmaW5lIEdEQ19DTURfMF9WRUNUT1JfTk9FTkQgICAgICAgICAgMHgwMDAwMDAzMkwKKyNkZWZpbmUgR0RDX0NNRF8xX1ZFQ1RPUl9OT0VORCAgICAgICAgICAweDAwMDAwMDMzTAorI2RlZmluZSBHRENfQ01EXzBfVkVDVE9SX0JMUE8gICAgICAgICAgIDB4MDAwMDAwMzRMCisjZGVmaW5lIEdEQ19DTURfMV9WRUNUT1JfQkxQTyAgICAgICAgICAgMHgwMDAwMDAzNUwKKyNkZWZpbmUgR0RDX0NNRF8wX1ZFQ1RPUl9OT0VORF9CTFBPICAgICAweDAwMDAwMDM2TAorI2RlZmluZSBHRENfQ01EXzFfVkVDVE9SX05PRU5EX0JMUE8gICAgIDB4MDAwMDAwMzdMCisjZGVmaW5lIEdEQ19DTURfQUFfMF9WRUNUT1IgICAgICAgICAgICAgMHgwMDAwMDAzOEwKKyNkZWZpbmUgR0RDX0NNRF9BQV8xX1ZFQ1RPUiAgICAgICAgICAgICAweDAwMDAwMDM5TAorI2RlZmluZSBHRENfQ01EX0FBXzBfVkVDVE9SX05PRU5EICAgICAgIDB4MDAwMDAwM0FMCisjZGVmaW5lIEdEQ19DTURfQUFfMV9WRUNUT1JfTk9FTkQgICAgICAgMHgwMDAwMDAzQkwKKyNkZWZpbmUgR0RDX0NNRF9BQV8wX1ZFQ1RPUl9CTFBPICAgICAgICAweDAwMDAwMDNDTAorI2RlZmluZSBHRENfQ01EX0FBXzFfVkVDVE9SX0JMUE8gICAgICAgIDB4MDAwMDAwM0RMCisjZGVmaW5lIEdEQ19DTURfQUFfMF9WRUNUT1JfTk9FTkRfQkxQTyAgMHgwMDAwMDAzRUwKKyNkZWZpbmUgR0RDX0NNRF9BQV8xX1ZFQ1RPUl9OT0VORF9CTFBPICAweDAwMDAwMDNGTAorCisjZGVmaW5lIEdEQ19DTURfQkxUX0ZJTEwgICAgICAgICAgICAgICAgMHgwMDAwMDA0MUwKKyNkZWZpbmUgR0RDX0NNRF9CTFRfRFJBVyAgICAgICAgICAgICAgICAweDAwMDAwMDQyTAorI2RlZmluZSBHRENfQ01EX0JJVE1BUCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDNMCisjZGVmaW5lIEdEQ19DTURfQkxUQ09QWV9UT1BfTEVGVCAgICAgICAgMHgwMDAwMDA0NEwKKyNkZWZpbmUgR0RDX0NNRF9CTFRDT1BZX1RPUF9SSUdIVCAgICAgICAweDAwMDAwMDQ1TAorI2RlZmluZSBHRENfQ01EX0JMVENPUFlfQk9UVE9NX0xFRlQgICAgIDB4MDAwMDAwNDZMCisjZGVmaW5lIEdEQ19DTURfQkxUQ09QWV9CT1RUT01fUklHSFQgICAgMHgwMDAwMDA0N0wKKyNkZWZpbmUgR0RDX0NNRF9MT0FEX1RFWFRVUkUgICAgICAgICAgICAweDAwMDAwMDQ4TAorI2RlZmluZSBHRENfQ01EX0xPQURfVElMRSAgICAgICAgICAgICAgIDB4MDAwMDAwNDlMCisKKyNkZWZpbmUgR0RDX0NNRF9UUkFQX1JJR0hUICAgICAgICAgICAgICAweDAwMDAwMDYwTAorI2RlZmluZSBHRENfQ01EX1RSQVBfTEVGVCAgICAgICAgICAgICAgIDB4MDAwMDAwNjFMCisjZGVmaW5lIEdEQ19DTURfVFJJQU5HTEVfRkFOICAgICAgICAgICAgMHgwMDAwMDA2MkwKKyNkZWZpbmUgR0RDX0NNRF9GTEFHX1RSSUFOR0xFX0ZBTiAgICAgICAweDAwMDAwMDYzTAorCisjZGVmaW5lIEdEQ19DTURfRkxVU0hfRkIgICAgICAgICAgICAgICAgMHgwMDAwMDBDMUwKKyNkZWZpbmUgR0RDX0NNRF9GTFVTSF9aICAgICAgICAgICAgICAgICAweDAwMDAwMEMyTAorCisjZGVmaW5lIEdEQ19DTURfUE9MWUdPTl9CRUdJTiAgICAgICAgICAgMHgwMDAwMDBFMEwKKyNkZWZpbmUgR0RDX0NNRF9QT0xZR09OX0VORCAgICAgICAgICAgICAweDAwMDAwMEUxTAorI2RlZmluZSBHRENfQ01EX0NMRUFSX1BPTFlfRkxBRyAgICAgICAgIDB4MDAwMDAwRTJMCisjZGVmaW5lIEdEQ19DTURfTk9STUFMICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRkwKKworI2RlZmluZSBHRENfQ01EX1ZFQ1RPUl9CTFBPX0ZMQUcgICAgICAgIDB4MDAwNDAwMDBMCisjZGVmaW5lIEdEQ19DTURfRkFTVF9WRUNUT1JfQkxQT19GTEFHICAgMHgwMDAwMDAwNEwKKworLyogZm9yIE1CODYyOTMgb3IgbGF0ZXIgKi8KKyNkZWZpbmUgR0RDX0NNRF9NRFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBMCisjZGVmaW5lIEdEQ19DTURfTURSMVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBHRENfQ01EX01EUjFCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgR0RDX0NNRF9NRFIyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIEdEQ19DTURfTURSMlMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzTAorI2RlZmluZSBHRENfQ01EX01EUjJUTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwN0wKKyNkZWZpbmUgR0RDX0NNRF9HTURSMUUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBMCisjZGVmaW5lIEdEQ19DTURfR01EUjJFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBHRENfQ01EX09WRVJMQVBfU0hBRE9XX1hZICAgICAgICAgICAgICAgMHgwMDAwMDAwMEwKKyNkZWZpbmUgR0RDX0NNRF9PVkVSTEFQX1NIQURPV19YWV9DT01QT1NJVElPTiAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIEdEQ19DTURfT1ZFUkxBUF9aX1BBQ0tFRF9PTkJTICAgICAgICAgICAweDAwMDAwMDA3TAorI2RlZmluZSBHRENfQ01EX09WRVJMQVBfWl9PUklHSU4gICAgICAgICAgICAgICAgMHgwMDAwMDAwMEwKKyNkZWZpbmUgR0RDX0NNRF9PVkVSTEFQX1pfTk9OX1RPUExFRlQgICAgICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIEdEQ19DTURfT1ZFUkxBUF9aX0JPUkRFUiAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBHRENfQ01EX09WRVJMQVBfWl9TSEFET1cgICAgICAgICAgICAgICAgMHgwMDAwMDAwM0wKKyNkZWZpbmUgR0RDX0NNRF9CTFRDT1BZX0FMVF9BTFBIQSAgICAgICAgICAgICAgIDB4MDAwMDAwMDBMCS8qIFJlc2VydmVyZCAqLworI2RlZmluZSBHRENfQ01EX0RDX0xPR09VVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMEwJLyogUmVzZXJ2ZXJkICovCisjZGVmaW5lIEdEQ19DTURfQk9EWV9GT1JFX0NPTE9SICAgICAgICAgICAgICAgICAweDAwMDAwMDAwTAorI2RlZmluZSBHRENfQ01EX0JPRFlfQkFDS19DT0xPUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgR0RDX0NNRF9TSEFET1dfRk9SRV9DT0xPUiAgICAgICAgICAgICAgIDB4MDAwMDAwMDJMCisjZGVmaW5lIEdEQ19DTURfU0hBRE9XX0JBQ0tfQ09MT1IgICAgICAgICAgICAgICAweDAwMDAwMDAzTAorI2RlZmluZSBHRENfQ01EX0JPUkRFUl9GT1JFX0NPTE9SICAgICAgICAgICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgR0RDX0NNRF9CT1JERVJfQkFDS19DT0xPUiAgICAgICAgICAgICAgIDB4MDAwMDAwMDVMCisKKy8qIFR5cGUgQ29kZSBUYWJsZSAqLworI2RlZmluZSBHRENfVFlQRV9HX05PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBHRENfVFlQRV9HX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxTAorI2RlZmluZSBHRENfVFlQRV9HX0JFR0lOQ09OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyTAorI2RlZmluZSBHRENfVFlQRV9HX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzTAorI2RlZmluZSBHRENfVFlQRV9HX1ZFUlRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwTAorI2RlZmluZSBHRENfVFlQRV9HX1ZFUlRFWExPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyTAorI2RlZmluZSBHRENfVFlQRV9HX1ZFUlRFWE5PUExPRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzTAorI2RlZmluZSBHRENfVFlQRV9HX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBHRENfVFlQRV9HX1ZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxTAorI2RlZmluZSBHRENfVFlQRV9HX0RFUFRIUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyTAorI2RlZmluZSBHRENfVFlQRV9HX0xPQURNQVRSSVggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzTAorI2RlZmluZSBHRENfVFlQRV9HX1ZJRVdWT0xVTUVYWUNMSVAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0TAorI2RlZmluZSBHRENfVFlQRV9HX1ZJRVdWT0xVTUVaQ0xJUCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ1TAorI2RlZmluZSBHRENfVFlQRV9HX1ZJRVdWT0xVTUVXQ0xJUCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ2TAorI2RlZmluZSBHRENfVFlQRV9TRVRMVkVSVEVYMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyTAorI2RlZmluZSBHRENfVFlQRV9TRVRMVkVSVEVYMklQICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczTAorI2RlZmluZSBHRENfVFlQRV9TRVRNT0RFUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwTAorI2RlZmluZSBHRENfVFlQRV9TRVRHTU9ERVJFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMxTAorI2RlZmluZSBHRENfVFlQRV9PVkVSTEFQWFlPRkZUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEM4TAorI2RlZmluZSBHRENfVFlQRV9PVkVSTEFQWk9GRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEM5TAorI2RlZmluZSBHRENfVFlQRV9EQ19MT0dPVVRBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMENDTAorI2RlZmluZSBHRENfVFlQRV9TRVRDT0xPUlJFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMENFTAorI2RlZmluZSBHRENfVFlQRV9HX0JFR0lORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUxTAorI2RlZmluZSBHRENfVFlQRV9HX0JFR0lOQ09OVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUyTAorI2RlZmluZSBHRENfVFlQRV9HX0VOREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUzTAorI2RlZmluZSBHRENfVFlQRV9EUkFXUElYRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwTAorI2RlZmluZSBHRENfVFlQRV9EUkFXUElYRUxaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBHRENfVFlQRV9EUkFXTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBHRENfVFlQRV9EUkFXTElORTJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzTAorI2RlZmluZSBHRENfVFlQRV9EUkFXTElORTJJUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBHRENfVFlQRV9EUkFXVFJBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1TAorI2RlZmluZSBHRENfVFlQRV9EUkFXVkVSVEVYMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2TAorI2RlZmluZSBHRENfVFlQRV9EUkFXVkVSVEVYMklQICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3TAorI2RlZmluZSBHRENfVFlQRV9EUkFXUkVDVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5TAorI2RlZmluZSBHRENfVFlQRV9EUkFXQklUTUFQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCTAorI2RlZmluZSBHRENfVFlQRV9CTFRDT1BZUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBETAorI2RlZmluZSBHRENfVFlQRV9CTFRDT1BZQUxURVJOQVRFUCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGTAorI2RlZmluZSBHRENfVFlQRV9MT0FEVEVYVFVSRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExTAorI2RlZmluZSBHRENfVFlQRV9CTFRURVhUVVJFUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzTAorI2RlZmluZSBHRENfVFlQRV9CTFRDT1BZQUxUQUxQSEFCTEVORFAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGTAorI2RlZmluZSBHRENfVFlQRV9TRVRWRVJURVgySSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwTAorI2RlZmluZSBHRENfVFlQRV9TRVRWRVJURVgySVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcxTAorI2RlZmluZSBHRENfVFlQRV9EUkFXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwTAorI2RlZmluZSBHRENfVFlQRV9TRVRSRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYxTAorI2RlZmluZSBHRENfVFlQRV9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZDTAorI2RlZmluZSBHRENfVFlQRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZETAorI2RlZmluZSBHRENfVFlQRV9OT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKworLyogUmFzdGVyIG9wZXJhdGlvbiAqLworI2RlZmluZSBHRENfUk9QX0NMRUFSICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHRENfUk9QX0FORCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBHRENfUk9QX0FORF9SRVZFUlNFICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHRENfUk9QX0NPUFkgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHRENfUk9QX0FORF9JTlZFUlRFRCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBHRENfUk9QX05PUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBHRENfUk9QX1hPUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwNgorI2RlZmluZSBHRENfUk9QX09SICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNworI2RlZmluZSBHRENfUk9QX05PUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBHRENfUk9QX0VRVUlWICAgICAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBHRENfUk9QX0lOVkVSVCAgICAgICAgICAgICAgICAgIDB4MDAwQQorI2RlZmluZSBHRENfUk9QX09SX1JFVkVSU0UgICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBHRENfUk9QX0NPUFlfSU5WRVJURUQgICAgICAgICAgIDB4MDAwQworI2RlZmluZSBHRENfUk9QX09SX0lOVkVSVEVEICAgICAgICAgICAgIDB4MDAwRAorI2RlZmluZSBHRENfUk9QX05BTkQgICAgICAgICAgICAgICAgICAgIDB4MDAwRQorI2RlZmluZSBHRENfUk9QX1NFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCmluZGV4IDM0ZTRlNzkuLjAxMjlmMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKKysrIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI3VuZGVmIERFQlVHCiAKQEAgLTQwMiwyMSArNDAzLDYgQEAKIEVYUE9SVF9TWU1CT0wodmVzYV9tb2Rlcyk7CiAjZW5kaWYgLyogQ09ORklHX0ZCX01PREVfSEVMUEVSUyAqLwogCi1zdGF0aWMgaW50IG15X2F0b2koY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpbnQgdmFsID0gMDsKLQotICAgIGZvciAoOzsgbmFtZSsrKSB7Ci0Jc3dpdGNoICgqbmFtZSkgewotCSAgICBjYXNlICcwJyAuLi4gJzknOgotCQl2YWwgPSAxMCp2YWwrKCpuYW1lLScwJyk7Ci0JCWJyZWFrOwotCSAgICBkZWZhdWx0OgotCQlyZXR1cm4gdmFsOwotCX0KLSAgICB9Ci19Ci0KIC8qKgogICoJZmJfdHJ5X21vZGUgLSB0ZXN0IGEgdmlkZW8gbW9kZQogICoJQHZhcjogZnJhbWUgYnVmZmVyIHVzZXIgZGVmaW5lZCBwYXJ0IG9mIGRpc3BsYXkKQEAgLTUzOSw3ICs1MjUsNyBAQAogCQkgICAgbmFtZWxlbiA9IGk7CiAJCSAgICBpZiAoIXJlZnJlc2hfc3BlY2lmaWVkICYmICFicHBfc3BlY2lmaWVkICYmCiAJCQkheXJlc19zcGVjaWZpZWQpIHsKLQkJCXJlZnJlc2ggPSBteV9hdG9pKCZuYW1lW2krMV0pOworCQkJcmVmcmVzaCA9IHNpbXBsZV9zdHJ0b2woJm5hbWVbaSsxXSwgTlVMTCwgMTApOwogCQkJcmVmcmVzaF9zcGVjaWZpZWQgPSAxOwogCQkJaWYgKGN2dCB8fCByYikKIAkJCSAgICBjdnQgPSAwOwpAQCAtNTQ5LDcgKzUzNSw3IEBACiAJCWNhc2UgJy0nOgogCQkgICAgbmFtZWxlbiA9IGk7CiAJCSAgICBpZiAoIWJwcF9zcGVjaWZpZWQgJiYgIXlyZXNfc3BlY2lmaWVkKSB7Ci0JCQlicHAgPSBteV9hdG9pKCZuYW1lW2krMV0pOworCQkJYnBwID0gc2ltcGxlX3N0cnRvbCgmbmFtZVtpKzFdLCBOVUxMLCAxMCk7CiAJCQlicHBfc3BlY2lmaWVkID0gMTsKIAkJCWlmIChjdnQgfHwgcmIpCiAJCQkgICAgY3Z0ID0gMDsKQEAgLTU1OCw3ICs1NDQsNyBAQAogCQkgICAgYnJlYWs7CiAJCWNhc2UgJ3gnOgogCQkgICAgaWYgKCF5cmVzX3NwZWNpZmllZCkgewotCQkJeXJlcyA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQl5cmVzID0gc2ltcGxlX3N0cnRvbCgmbmFtZVtpKzFdLCBOVUxMLCAxMCk7CiAJCQl5cmVzX3NwZWNpZmllZCA9IDE7CiAJCSAgICB9IGVsc2UKIAkJCWdvdG8gZG9uZTsKQEAgLTU4Niw3ICs1NzIsNyBAQAogCSAgICB9CiAJfQogCWlmIChpIDwgMCAmJiB5cmVzX3NwZWNpZmllZCkgewotCSAgICB4cmVzID0gbXlfYXRvaShuYW1lKTsKKwkgICAgeHJlcyA9IHNpbXBsZV9zdHJ0b2wobmFtZSwgTlVMTCwgMTApOwogCSAgICByZXNfc3BlY2lmaWVkID0gMTsKIAl9CiBkb25lOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwppbmRleCA0ZDhjNTRjLi5iMDQzYWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29mZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwpAQCAtMjgyLDggKzI4MiwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBvZmZiX2Rlc3Ryb3koc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQorCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+YXBlcnR1cmVfYmFzZSwgaW5mby0+YXBlcnR1cmVfc2l6ZSk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKK30KKwogc3RhdGljIHN0cnVjdCBmYl9vcHMgb2ZmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9kZXN0cm95CT0gb2ZmYl9kZXN0cm95LAogCS5mYl9zZXRjb2xyZWcJPSBvZmZiX3NldGNvbHJlZywKIAkuZmJfc2V0X3Bhcgk9IG9mZmJfc2V0X3BhciwKIAkuZmJfYmxhbmsJPSBvZmZiX2JsYW5rLApAQCAtNDgyLDEwICs0OTEsMTQgQEAKIAl2YXItPnN5bmMgPSAwOwogCXZhci0+dm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOwogCisJLyogc2V0IG9mZmIgYXBlcnR1cmUgc2l6ZSBmb3IgZ2VuZXJpYyBwcm9iaW5nICovCisJaW5mby0+YXBlcnR1cmVfYmFzZSA9IGFkZHJlc3M7CisJaW5mby0+YXBlcnR1cmVfc2l6ZSA9IGZpeC0+c21lbV9sZW47CisKIAlpbmZvLT5mYm9wcyA9ICZvZmZiX29wczsKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoYWRkcmVzcywgZml4LT5zbWVtX2xlbik7CiAJaW5mby0+cHNldWRvX3BhbGV0dGUgPSAodm9pZCAqKSAoaW5mbyArIDEpOwotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBmb3JlaWduX2VuZGlhbjsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX01JU0NfRklSTVdBUkUgfCBmb3JlaWduX2VuZGlhbjsKIAogCWZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfMjQzMHNkcC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF8yNDMwc2RwLmMKaW5kZXggNzYwNjQ1ZC4uZTNlY2NjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF8yNDMwc2RwLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF8yNDMwc2RwLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgVFdMNDAzMF9WUExMMl9ERVZfR1JQICAgICAgICAgICAweDMzCiAjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVESUNBVEVEICAgICAgICAgMHgzNgogCi0jZGVmaW5lIHQyX291dChjLCByLCB2KSB0d2w0MDMwX2kyY193cml0ZV91OChjLCByLCB2KQorI2RlZmluZSB0Ml9vdXQoYywgciwgdikgdHdsX2kyY193cml0ZV91OChjLCByLCB2KQogCiAKIHN0YXRpYyBpbnQgc2RwMjQzMF9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbGRwLmMKaW5kZXggNWJiN2Y2Zi4uMGY1OTUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2xkcC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CkBAIC01OSw3ICs1OSw3IEBACiAjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVWX0dSUCAgICAgICAgICAgMHgzMwogI2RlZmluZSBUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCAgICAgICAgIDB4MzYKIAotI2RlZmluZSB0Ml9vdXQoYywgciwgdikgdHdsNDAzMF9pMmNfd3JpdGVfdTgoYywgciwgdikKKyNkZWZpbmUgdDJfb3V0KGMsIHIsIHYpIHR3bF9pMmNfd3JpdGVfdTgoYywgciwgdikKIAogCiBzdGF0aWMgaW50IGxkcF9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwMmV2bS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwMmV2bS5jCmluZGV4IDAwNmMyZmUuLjdlN2E2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDJldm0uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAyZXZtLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAKICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC02MSw5ICs2MSw5IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9MUiwgMSk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9VRCwgMSk7CiAKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIDB4MTEsIFRXTF9MRURfTEVERU4pOwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDEsIFRXTF9QV01BX1BXTUFPTik7Ci0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgMHgwMiwgVFdMX1BXTUFfUFdNQU9GRik7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIDB4MTEsIFRXTF9MRURfTEVERU4pOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgMHgwMSwgVFdMX1BXTUFfUFdNQU9OKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDIsIFRXTF9QV01BX1BXTUFPRkYpOwogCWJrbGlnaHRfbGV2ZWwgPSAxMDA7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCXU4IGM7CiAJaWYgKChsZXZlbCA+PSAwKSAmJiAobGV2ZWwgPD0gMTAwKSkgewogCQljID0gKDEyNSAqICgxMDAgLSBsZXZlbCkpIC8gMTAwICsgMjsKLQkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgYywgVFdMX1BXTUFfUFdNQU9GRik7CisJCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgYywgVFdMX1BXTUFfUFdNQU9GRik7CiAJCWJrbGlnaHRfbGV2ZWwgPSBsZXZlbDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMKaW5kZXggZmM1MDNkOC4uY2E3NWNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2JlYWdsZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNiZWFnbGUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYwppbmRleCBhZTJlZGM0Li4wNjg0MGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzZXZtLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2V2bS5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNjMsOSArNjMsOSBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfTFIsIDEpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfVUQsIDEpOwogCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDExLCBUV0xfTEVEX0xFREVOKTsKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAxLCBUV0xfUFdNQV9QV01BT04pOwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDIsIFRXTF9QV01BX1BXTUFPRkYpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDExLCBUV0xfTEVEX0xFREVOKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDEsIFRXTF9QV01BX1BXTUFPTik7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAyLCBUV0xfUFdNQV9QV01BT0ZGKTsKIAlia2xpZ2h0X2xldmVsID0gMTAwOwogCiAJcmV0dXJuIDA7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1OCBjOwogCWlmICgobGV2ZWwgPj0gMCkgJiYgKGxldmVsIDw9IDEwMCkpIHsKIAkJYyA9ICgxMjUgKiAoMTAwIC0gbGV2ZWwpKSAvIDEwMCArIDI7Ci0JCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIGMsIFRXTF9QV01BX1BXTUFPRkYpOworCQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIGMsIFRXTF9QV01BX1BXTUFPRkYpOwogCQlia2xpZ2h0X2xldmVsID0gbGV2ZWw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vdmVyby5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vdmVyby5jCmluZGV4IDU2ZWUxOTIuLjU2NDkzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3Zlcm8uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX292ZXJvLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5jCmluZGV4IGI4MzFlMWQuLmEzMzQ4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAorI2luY2x1ZGUgPG1hY2gvbGNkYy5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksMzggKzQwLDYgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRQkJCSJsY2RjIgogCi0jZGVmaW5lIE9NQVBfTENEQ19CQVNFCQkJMHhmZmZlYzAwMAotI2RlZmluZSBPTUFQX0xDRENfU0laRQkJCTI1NgotI2RlZmluZSBPTUFQX0xDRENfSVJRCQkJSU5UX0xDRF9DVFJMCi0KLSNkZWZpbmUgT01BUF9MQ0RDX0NPTlRST0wJCShPTUFQX0xDRENfQkFTRSArIDB4MDApCi0jZGVmaW5lIE9NQVBfTENEQ19USU1JTkcwCQkoT01BUF9MQ0RDX0JBU0UgKyAweDA0KQotI2RlZmluZSBPTUFQX0xDRENfVElNSU5HMQkJKE9NQVBfTENEQ19CQVNFICsgMHgwOCkKLSNkZWZpbmUgT01BUF9MQ0RDX1RJTUlORzIJCShPTUFQX0xDRENfQkFTRSArIDB4MGMpCi0jZGVmaW5lIE9NQVBfTENEQ19TVEFUVVMJCShPTUFQX0xDRENfQkFTRSArIDB4MTApCi0jZGVmaW5lIE9NQVBfTENEQ19TVUJQQU5FTAkJKE9NQVBfTENEQ19CQVNFICsgMHgxNCkKLSNkZWZpbmUgT01BUF9MQ0RDX0xJTkVfSU5UCQkoT01BUF9MQ0RDX0JBU0UgKyAweDE4KQotI2RlZmluZSBPTUFQX0xDRENfRElTUExBWV9TVEFUVVMJKE9NQVBfTENEQ19CQVNFICsgMHgxYykKLQotI2RlZmluZSBPTUFQX0xDRENfU1RBVF9ET05FCQkoMSA8PCAwKQotI2RlZmluZSBPTUFQX0xDRENfU1RBVF9WU1lOQwkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUF9MQ0RDX1NUQVRfU1lOQ19MT1NUCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVBfTENEQ19TVEFUX0FCQwkJKDEgPDwgMykKLSNkZWZpbmUgT01BUF9MQ0RDX1NUQVRfTElORV9JTlQJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVBfTENEQ19TVEFUX0ZVRgkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUF9MQ0RDX1NUQVRfTE9BREVEX1BBTEVUVEUJKDEgPDwgNikKLQotI2RlZmluZSBPTUFQX0xDRENfQ1RSTF9MQ0RfRU4JCSgxIDw8IDApCi0jZGVmaW5lIE9NQVBfTENEQ19DVFJMX0xDRF9URlQJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVBfTENEQ19DVFJMX0xJTkVfSVJRX0NMUl9TRUwJKDEgPDwgMTApCi0KLSNkZWZpbmUgT01BUF9MQ0RDX0lSUV9WU1lOQwkJKDEgPDwgMikKLSNkZWZpbmUgT01BUF9MQ0RDX0lSUV9ET05FCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQX0xDRENfSVJRX0xPQURFRF9QQUxFVFRFCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVBfTENEQ19JUlFfTElORV9OSVJRCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQX0xDRENfSVJRX0xJTkUJCSgxIDw8IDYpCi0jZGVmaW5lIE9NQVBfTENEQ19JUlFfTUFTSwkJKCgoMSA8PCA1KSAtIDEpIDw8IDIpCi0KICNkZWZpbmUgTUFYX1BBTEVUVEVfU0laRQkJUEFHRV9TSVpFCiAKIGVudW0gbGNkY19sb2FkX21vZGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vdXRwdXQuYyBiL2RyaXZlcnMvdmlkZW8vb3V0cHV0LmMKaW5kZXggNWU2NDM5YS4uNTEzN2FhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vdXRwdXQuYworKysgYi9kcml2ZXJzL3ZpZGVvL291dHB1dC5jCkBAIC01MCw3ICs1MCw3IEBACiAJaW50IHJlcXVlc3Rfc3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsJmVuZHAsMCk7CiAJc2l6ZV90IHNpemUgPSBlbmRwIC0gYnVmOwogCi0JaWYgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCWlmIChpc3NwYWNlKCplbmRwKSkKIAkJc2l6ZSsrOwogCWlmIChzaXplICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKaW5kZXggMDU3M2VjNi4uMGYzNjFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKQEAgLTk4LDcgKzk4LDggQEAKIHsKIAlzdHJ1Y3QgcG1hZ2JhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQlCVUdfT04ocmVnbm8gPj0gaW5mby0+Y21hcC5sZW4pOworCWlmIChyZWdubyA+PSBpbmZvLT5jbWFwLmxlbikKKwkJcmV0dXJuIDE7CiAKIAlyZWQgICA+Pj0gODsJLyogVGhlIGNtYXAgZmllbGRzIGFyZSAxNiBiaXRzICAgICovCiAJZ3JlZW4gPj49IDg7CS8qIHdpZGUsIGJ1dCB0aGUgaGFyZHdhcmUgY29sb3JtYXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKaW5kZXggOTg3NDg3Mi4uMmRlMDgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMKQEAgLTEwMiw3ICsxMDIsOCBAQAogewogCXN0cnVjdCBwbWFnYmJmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCUJVR19PTihyZWdubyA+PSBpbmZvLT5jbWFwLmxlbik7CisJaWYgKHJlZ25vID49IGluZm8tPmNtYXAubGVuKQorCQlyZXR1cm4gMTsKIAogCXJlZCAgID4+PSA4OwkvKiBUaGUgY21hcCBmaWVsZHMgYXJlIDE2IGJpdHMgICAgKi8KIAlncmVlbiA+Pj0gODsJLyogd2lkZSwgYnV0IHRoZSBoYXJkd2FyZSBjb2xvcm1hcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IGY1OGEzYWEuLjQxNTg1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTEyMjEsMTMgKzEyMjEsMTQgQEAKIHN0YXRpYyBpbnQgcHhhZmJfc21hcnRfdGhyZWFkKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gYXJnOwotCXN0cnVjdCBweGFmYl9tYWNoX2luZm8gKmluZiA9IGZiaS0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBweGFmYl9tYWNoX2luZm8gKmluZjsKIAotCWlmICghZmJpIHx8ICFpbmYtPnNtYXJ0X3VwZGF0ZSkgeworCWlmICghZmJpIHx8ICFmYmktPmRldi0+cGxhdGZvcm1fZGF0YS0+c21hcnRfdXBkYXRlKSB7CiAJCXByX2VycigiJXM6IG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCwgdGhyZWFkIHRlcm1pbmF0ZWRcbiIsCiAJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaW5mID0gZmJpLT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlwcl9kZWJ1ZygiJXMoKTogdGFzayBzdGFydGluZ1xuIiwgX19mdW5jX18pOwogCkBAIC0xNjY3LDcgKzE2NjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhZmJfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHB4YWZiX3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB4YWZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFmYl9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCBiNGI1ZGU5Li5hNjk4MzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtMjgxLDYgKzI4MSw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQogewogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnCSpiY2ZnID0gJmNoLT5jZmcuYm9hcmRfY2ZnOwogCiAJLyogZW5hYmxlIGNsb2NrcyBiZWZvcmUgYWNjZXNzaW5nIGhhcmR3YXJlICovCiAJc2hfbW9iaWxlX2xjZGNfY2xrX29uKGNoLT5sY2RjKTsKQEAgLTMwNSwxMCArMzA2LDE3IEBACiAKIAkJLyogdHJpZ2dlciBwYW5lbCB1cGRhdGUgKi8KIAkJZG1hX21hcF9zZyhpbmZvLT5kZXYsIGNoLT5zZ2xpc3QsIG5yX3BhZ2VzLCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGJjZmctPnN0YXJ0X3RyYW5zZmVyKQorCQkJYmNmZy0+c3RhcnRfdHJhbnNmZXIoYmNmZy0+Ym9hcmRfZGF0YSwgY2gsCisJCQkJCSAgICAgJnNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzKTsKIAkJbGNkY193cml0ZV9jaGFuKGNoLCBMRFNNMlIsIDEpOwogCQlkbWFfdW5tYXBfc2coaW5mby0+ZGV2LCBjaC0+c2dsaXN0LCBucl9wYWdlcywgRE1BX1RPX0RFVklDRSk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJaWYgKGJjZmctPnN0YXJ0X3RyYW5zZmVyKQorCQkJYmNmZy0+c3RhcnRfdHJhbnNmZXIoYmNmZy0+Ym9hcmRfZGF0YSwgY2gsCisJCQkJCSAgICAgJnNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzKTsKIAkJbGNkY193cml0ZV9jaGFuKGNoLCBMRFNNMlIsIDEpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goc3RydWN0IGZiX2luZm8gKmluZm8pCkBAIC04OTAsNyArODk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX21vYmlsZV9sY2RjX2Rldl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2hfbW9iaWxlX2xjZGNfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHNoX21vYmlsZV9sY2RjX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHNoX21vYmlsZV9sY2RjX3Jlc3VtZSwKIAkucnVudGltZV9zdXNwZW5kID0gc2hfbW9iaWxlX2xjZGNfcnVudGltZV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKaW5kZXggYTRlMDVlNC4uOWQyYjZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCkBAIC0yMTE1LDcgKzIxMTUsNyBAQAogCSAgIGlmKCAoIShpdmlkZW8tPnZiZmxhZ3MyICYgVkIyX1NJU0JSSURHRSkpICYmCiAJICAgICAgICghKChpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMxNV9WR0EpICYmCiAJCQkoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl9DSFJPTlRFTCkpKSApIHsKLQkgICAgICBpZihpdmlkZW8tPnNpc2ZiX3R2c3RkICYgKFRWX1BBTE4gfCBUVl9QQUxOIHwgVFZfTlRTQ0opKSB7CisJICAgICAgaWYoaXZpZGVvLT5zaXNmYl90dnN0ZCAmIChUVl9QQUxNIHwgVFZfUEFMTiB8IFRWX05UU0NKKSkgewogCQkgaXZpZGVvLT5zaXNmYl90dnN0ZCA9IC0xOwogCQkgcHJpbnRrKEtFUk5fRVJSICJzaXNmYjogUEFMTS9QQUxOL05UU0NKIG5vdCBzdXBwb3J0ZWRcbiIpOwogCSAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKaW5kZXggOTI0ZDc5NC4uMzUzNzBkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKQEAgLTY2LDYgKzY2LDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbwkJKmZiWzJdOwkJLyogZmIgaW5mbyBmb3IgYm90aCBoZWFkcyAqLwogCXN0cnVjdCByZXNvdXJjZQkJKmZibWVtX3JlczsJLyogZnJhbWVidWZmZXIgcmVzb3VyY2UgKi8KIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyZWdzX3JlczsJLyogcmVnaXN0ZXJzIHJlc291cmNlICovCisJc3RydWN0IHJlc291cmNlCQkqcmVnczJkX3JlczsJLyogMmQgcmVnaXN0ZXJzIHJlc291cmNlICovCiAJc3RydWN0IHNtNTAxX3BsYXRkYXRhX2ZiICpwZGF0YTsJLyogb3VyIHBsYXRmb3JtIGRhdGEgKi8KIAogCXVuc2lnbmVkIGxvbmcJCSBwbV9jcnRfY3RybDsJLyogcG06IGNydCBjdHJsIHNhdmUgKi8KQEAgLTczLDYgKzc0LDcgQEAKIAlpbnQJCQkgaXJxOwogCWludAkJCSBzd2FwX2VuZGlhbjsJLyogc2V0IHRvIHN3YXAgcmdiPT5iZ3IgKi8KIAl2b2lkIF9faW9tZW0JCSpyZWdzOwkJLyogcmVtYXBwZWQgcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtCQkqcmVnczJkOwkvKiAyZCByZW1hcHBlZCByZWdpc3RlcnMgKi8KIAl2b2lkIF9faW9tZW0JCSpmYm1lbTsJCS8qIHJlbWFwcGVkIGZyYW1lYnVmZmVyICovCiAJc2l6ZV90CQkJIGZibWVtX2xlbjsJLyogbGVuZ3RoIG9mIHJlbWFwcGVkIHJlZ2lvbiAqLwogfTsKQEAgLTEyMyw5ICsxMjUsOSBAQAogICogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGxheSBvdXQgbWVtb3J5IGZvciB0aGUgdHdvIGZyYW1lYnVmZmVycyBhbmQKICAqIGV2ZXJ5dGhpbmcgZWxzZQogICoKLSAqIHxmYm1lbV9yZXMtPnN0YXJ0CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZibWVtX3Jlcy0+ZW5kfAotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ZmJbMF0uZml4LnNtZW1fc3RhcnQgICAgfCAgICAgICAgIHxmYlsxXS5maXguc21lbV9zdGFydCAgICB8ICAgICAySyAgICAgIHwKKyAqIHxmYm1lbV9yZXMtPnN0YXJ0CQkJCQkgICAgICAgZmJtZW1fcmVzLT5lbmR8CisgKiB8CQkJCQkJCQkJICAgICB8CisgKiB8ZmJbMF0uZml4LnNtZW1fc3RhcnQgICAgfAkgICAgICB8ZmJbMV0uZml4LnNtZW1fc3RhcnQgICAgfCAgICAgMksJICAgICB8CiAgKiB8LT4gZmJbMF0uZml4LnNtZW1fbGVuIDwtfCBzcGFyZSAgIHwtPiBmYlsxXS5maXguc21lbV9sZW4gPC18LT4gY3Vyc29ycyA8LXwKICAqCiAgKiBUaGUgInNwYXJlIiBzcGFjZSBpcyBmb3IgdGhlIDJkIGVuZ2luZSBkYXRhCkBAIC0xMjQ2LDcgKzEyNDgsMTczIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihmYnJlZ3NfcG5sLCAwNDQ0LCBzbTUwMWZiX2RlYnVnX3Nob3dfcG5sLCBOVUxMKTsKIAotLyogZnJhbWVidWZmZXIgb3BzICovCisvKiBhY2NlbGVyYXRpb24gb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBzbTUwMWZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IGNvdW50ID0gMTAwMDAwMDsKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqZmJpID0gcGFyLT5pbmZvOworCisJLyogd2FpdCBmb3IgdGhlIDJkIGVuZ2luZSB0byBiZSByZWFkeSAqLworCXdoaWxlICgoY291bnQgPiAwKSAmJgorCSAgICAgICAocmVhZGwoZmJpLT5yZWdzICsgU001MDFfU1lTVEVNX0NPTlRST0wpICYKKwkJU001MDFfU1lTQ1RSTF8yRF9FTkdJTkVfU1RBVFVTKSAhPSAwKQorCQljb3VudC0tOworCisJaWYgKGNvdW50IDw9IDApIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIDJkIGVuZ2luZSBzeW5jXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbTUwMWZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJc3RydWN0IHNtNTAxZmJfcGFyICAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBzbTUwMWZiX2luZm8gKmZiaSA9IHBhci0+aW5mbzsKKwlpbnQgd2lkdGggPSBhcmVhLT53aWR0aDsKKwlpbnQgaGVpZ2h0ID0gYXJlYS0+aGVpZ2h0OworCWludCBzeCA9IGFyZWEtPnN4OworCWludCBzeSA9IGFyZWEtPnN5OworCWludCBkeCA9IGFyZWEtPmR4OworCWludCBkeSA9IGFyZWEtPmR5OworCXVuc2lnbmVkIGxvbmcgcnRsID0gMDsKKworCS8qIHNvdXJjZSBjbGlwICovCisJaWYgKChzeCA+PSBpbmZvLT52YXIueHJlc192aXJ0dWFsKSB8fAorCSAgICAoc3kgPj0gaW5mby0+dmFyLnlyZXNfdmlydHVhbCkpCisJCS8qIHNvdXJjZSBBcmVhIG5vdCB3aXRoaW4gdmlydHVhbCBzY3JlZW4sIHNraXBwaW5nICovCisJCXJldHVybjsKKwlpZiAoKHN4ICsgd2lkdGgpID49IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpCisJCXdpZHRoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAtIHN4IC0gMTsKKwlpZiAoKHN5ICsgaGVpZ2h0KSA+PSBpbmZvLT52YXIueXJlc192aXJ0dWFsKQorCQloZWlnaHQgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsIC0gc3kgLSAxOworCisJLyogZGVzdCBjbGlwICovCisJaWYgKChkeCA+PSBpbmZvLT52YXIueHJlc192aXJ0dWFsKSB8fAorCSAgICAoZHkgPj0gaW5mby0+dmFyLnlyZXNfdmlydHVhbCkpCisJCS8qIERlc3RpbmF0aW9uIEFyZWEgbm90IHdpdGhpbiB2aXJ0dWFsIHNjcmVlbiwgc2tpcHBpbmcgKi8KKwkJcmV0dXJuOworCWlmICgoZHggKyB3aWR0aCkgPj0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCkKKwkJd2lkdGggPSBpbmZvLT52YXIueHJlc192aXJ0dWFsIC0gZHggLSAxOworCWlmICgoZHkgKyBoZWlnaHQpID49IGluZm8tPnZhci55cmVzX3ZpcnR1YWwpCisJCWhlaWdodCA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWwgLSBkeSAtIDE7CisKKwlpZiAoKHN4IDwgZHgpIHx8IChzeSA8IGR5KSkgeworCQlydGwgPSAxIDw8IDI3OworCQlzeCArPSB3aWR0aCAtIDE7CisJCWR4ICs9IHdpZHRoIC0gMTsKKwkJc3kgKz0gaGVpZ2h0IC0gMTsKKwkJZHkgKz0gaGVpZ2h0IC0gMTsKKwl9CisKKwlpZiAoc201MDFmYl9zeW5jKGluZm8pKQorCQlyZXR1cm47CisKKwkvKiBzZXQgdGhlIGJhc2UgYWRkcmVzc2VzICovCisJd3JpdGVsKHBhci0+c2NyZWVuLnNtX2FkZHIsIGZiaS0+cmVnczJkICsgU001MDFfMkRfU09VUkNFX0JBU0UpOworCXdyaXRlbChwYXItPnNjcmVlbi5zbV9hZGRyLCBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX0RFU1RJTkFUSU9OX0JBU0UpOworCisJLyogc2V0IHRoZSB3aW5kb3cgd2lkdGggKi8KKwl3cml0ZWwoKGluZm8tPnZhci54cmVzIDw8IDE2KSB8IGluZm8tPnZhci54cmVzLAorCSAgICAgICBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX1dJTkRPV19XSURUSCk7CisKKwkvKiBzZXQgd2luZG93IHN0cmlkZSAqLworCXdyaXRlbCgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCA8PCAxNikgfCBpbmZvLT52YXIueHJlc192aXJ0dWFsLAorCSAgICAgICBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX1BJVENIKTsKKworCS8qIHNldCBkYXRhIGZvcm1hdCAqLworCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQl3cml0ZWwoMCwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9TVFJFVENIKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJd3JpdGVsKDB4MDAxMDAwMDAsIGZiaS0+cmVnczJkICsgU001MDFfMkRfU1RSRVRDSCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXdyaXRlbCgweDAwMjAwMDAwLCBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX1NUUkVUQ0gpOworCQlicmVhazsKKwl9CisKKwkvKiAyZCBjb21wYXJlIG1hc2sgKi8KKwl3cml0ZWwoMHhmZmZmZmZmZiwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9DT0xPUl9DT01QQVJFX01BU0spOworCisJLyogMmQgbWFzayAqLworCXdyaXRlbCgweGZmZmZmZmZmLCBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX01BU0spOworCisJLyogc291cmNlIGFuZCBkZXN0aW5hdGlvbiB4IHkgKi8KKwl3cml0ZWwoKHN4IDw8IDE2KSB8IHN5LCBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX1NPVVJDRSk7CisJd3JpdGVsKChkeCA8PCAxNikgfCBkeSwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9ERVNUSU5BVElPTik7CisKKwkvKiB3L2ggKi8KKwl3cml0ZWwoKHdpZHRoIDw8IDE2KSB8IGhlaWdodCwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9ESU1FTlNJT04pOworCisJLyogZG8gYXJlYSBtb3ZlICovCisJd3JpdGVsKDB4ODAwMDAwY2MgfCBydGwsIGZiaS0+cmVnczJkICsgU001MDFfMkRfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNtNTAxZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqZmJpID0gcGFyLT5pbmZvOworCWludCB3aWR0aCA9IHJlY3QtPndpZHRoLCBoZWlnaHQgPSByZWN0LT5oZWlnaHQ7CisKKwlpZiAoKHJlY3QtPmR4ID49IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpIHx8CisJICAgIChyZWN0LT5keSA+PSBpbmZvLT52YXIueXJlc192aXJ0dWFsKSkKKwkJLyogUmVjdGFuZ2xlIG5vdCB3aXRoaW4gdmlydHVhbCBzY3JlZW4sIHNraXBwaW5nICovCisJCXJldHVybjsKKwlpZiAoKHJlY3QtPmR4ICsgd2lkdGgpID49IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpCisJCXdpZHRoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAtIHJlY3QtPmR4IC0gMTsKKwlpZiAoKHJlY3QtPmR5ICsgaGVpZ2h0KSA+PSBpbmZvLT52YXIueXJlc192aXJ0dWFsKQorCQloZWlnaHQgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsIC0gcmVjdC0+ZHkgLSAxOworCisJaWYgKHNtNTAxZmJfc3luYyhpbmZvKSkKKwkJcmV0dXJuOworCisJLyogc2V0IHRoZSBiYXNlIGFkZHJlc3NlcyAqLworCXdyaXRlbChwYXItPnNjcmVlbi5zbV9hZGRyLCBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX1NPVVJDRV9CQVNFKTsKKwl3cml0ZWwocGFyLT5zY3JlZW4uc21fYWRkciwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9ERVNUSU5BVElPTl9CQVNFKTsKKworCS8qIHNldCB0aGUgd2luZG93IHdpZHRoICovCisJd3JpdGVsKChpbmZvLT52YXIueHJlcyA8PCAxNikgfCBpbmZvLT52YXIueHJlcywKKwkgICAgICAgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9XSU5ET1dfV0lEVEgpOworCisJLyogc2V0IHdpbmRvdyBzdHJpZGUgKi8KKwl3cml0ZWwoKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgPDwgMTYpIHwgaW5mby0+dmFyLnhyZXNfdmlydHVhbCwKKwkgICAgICAgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9QSVRDSCk7CisKKwkvKiBzZXQgZGF0YSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJd3JpdGVsKDAsIGZiaS0+cmVnczJkICsgU001MDFfMkRfU1RSRVRDSCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXdyaXRlbCgweDAwMTAwMDAwLCBmYmktPnJlZ3MyZCArIFNNNTAxXzJEX1NUUkVUQ0gpOworCQlicmVhazsKKwljYXNlIDMyOgorCQl3cml0ZWwoMHgwMDIwMDAwMCwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9TVFJFVENIKTsKKwkJYnJlYWs7CisJfQorCisJLyogMmQgY29tcGFyZSBtYXNrICovCisJd3JpdGVsKDB4ZmZmZmZmZmYsIGZiaS0+cmVnczJkICsgU001MDFfMkRfQ09MT1JfQ09NUEFSRV9NQVNLKTsKKworCS8qIDJkIG1hc2sgKi8KKwl3cml0ZWwoMHhmZmZmZmZmZiwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9NQVNLKTsKKworCS8qIGNvbG91ciAqLworCXdyaXRlbChyZWN0LT5jb2xvciwgZmJpLT5yZWdzMmQgKyBTTTUwMV8yRF9GT1JFR1JPVU5EKTsKKworCS8qIHggeSAqLworCXdyaXRlbCgocmVjdC0+ZHggPDwgMTYpIHwgcmVjdC0+ZHksIGZiaS0+cmVnczJkICsgU001MDFfMkRfREVTVElOQVRJT04pOworCisJLyogdy9oICovCisJd3JpdGVsKCh3aWR0aCA8PCAxNikgfCBoZWlnaHQsIGZiaS0+cmVnczJkICsgU001MDFfMkRfRElNRU5TSU9OKTsKKworCS8qIGRvIHJlY3RhbmdsZSBmaWxsICovCisJd3JpdGVsKDB4ODAwMTAwY2MsIGZiaS0+cmVnczJkICsgU001MDFfMkRfQ09OVFJPTCk7Cit9CisKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgc201MDFmYl9vcHNfY3J0ID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTEyNTYsOSArMTQyNCwxMCBAQAogCS5mYl9zZXRjb2xyZWcJPSBzbTUwMWZiX3NldGNvbHJlZywKIAkuZmJfcGFuX2Rpc3BsYXkJPSBzbTUwMWZiX3Bhbl9jcnQsCiAJLmZiX2N1cnNvcgk9IHNtNTAxZmJfY3Vyc29yLAotCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKLQkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCisJLmZiX2ZpbGxyZWN0CT0gc201MDFmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBzbTUwMWZiX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9zeW5jCT0gc201MDFmYl9zeW5jLAogfTsKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgc201MDFmYl9vcHNfcG5sID0gewpAQCAtMTI2OSw5ICsxNDM4LDEwIEBACiAJLmZiX2JsYW5rCT0gc201MDFmYl9ibGFua19wbmwsCiAJLmZiX3NldGNvbHJlZwk9IHNtNTAxZmJfc2V0Y29scmVnLAogCS5mYl9jdXJzb3IJPSBzbTUwMWZiX2N1cnNvciwKLQkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAorCS5mYl9maWxscmVjdAk9IHNtNTAxZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gc201MDFmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfc3luYwk9IHNtNTAxZmJfc3luYywKIH07CiAKIC8qIHNtNTAxX2luaXRfY3Vyc29yCkBAIC0xMzI5LDcgKzE0OTksOCBAQAogCQlkZXZfd2FybihkZXYsICJubyBpcnEgZm9yIGRldmljZVxuIik7CiAJfQogCi0JLyogYWxsb2NhdGUsIHJlc2VydmUgYW5kIHJlbWFwIHJlc291cmNlcyBmb3IgcmVnaXN0ZXJzICovCisJLyogYWxsb2NhdGUsIHJlc2VydmUgYW5kIHJlbWFwIHJlc291cmNlcyBmb3IgZGlzcGxheQorCSAqIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJubyByZXNvdXJjZSBkZWZpbml0aW9uIGZvciByZWdpc3RlcnNcbiIpOwpAQCAtMTMzOCw3ICsxNTA5LDcgQEAKIAl9CiAKIAlpbmZvLT5yZWdzX3JlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LAotCQkJCQkgICAgcmVzLT5lbmQgLSByZXMtPnN0YXJ0LAorCQkJCQkgICAgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCQkgICAgcGRldi0+bmFtZSk7CiAKIAlpZiAoaW5mby0+cmVnc19yZXMgPT0gTlVMTCkgewpAQCAtMTM0NywzNyArMTUxOCw2MyBAQAogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAotCWluZm8tPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzEpOworCWluZm8tPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGluZm8tPnJlZ3MgPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZW1hcCByZWdpc3RlcnNcbiIpOwogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyX3JlZ3NfcmVzOwogCX0KIAorCS8qIGFsbG9jYXRlLCByZXNlcnZlIGFuZCByZW1hcCByZXNvdXJjZXMgZm9yIDJkCisJICogY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIm5vIHJlc291cmNlIGRlZmluaXRpb24gZm9yIDJkIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX3JlZ3NfbWFwOworCX0KKworCWluZm8tPnJlZ3MyZF9yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwKKwkJCQkJICAgICAgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCQkgICAgICBwZGV2LT5uYW1lKTsKKworCWlmIChpbmZvLT5yZWdzMmRfcmVzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgY2xhaW0gcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9yZWdzX21hcDsKKwl9CisKKwlpbmZvLT5yZWdzMmQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGluZm8tPnJlZ3MyZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVnczJkX3JlczsKKwl9CisKIAkvKiBhbGxvY2F0ZSwgcmVzZXJ2ZSByZXNvdXJjZXMgZm9yIGZyYW1lYnVmZmVyICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZGVmaW5lZFxuIik7CiAJCXJldCA9IC1FTlhJTzsKLQkJZ290byBlcnJfcmVnc19tYXA7CisJCWdvdG8gZXJyX3JlZ3MyZF9tYXA7CiAJfQogCiAJaW5mby0+ZmJtZW1fcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsCi0JCQkJCSAgICAgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMSwKKwkJCQkJICAgICByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJCSAgICAgcGRldi0+bmFtZSk7CiAJaWYgKGluZm8tPmZibWVtX3JlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGZyYW1lYnVmZmVyXG4iKTsKIAkJcmV0ID0gLUVOWElPOwotCQlnb3RvIGVycl9yZWdzX21hcDsKKwkJZ290byBlcnJfcmVnczJkX21hcDsKIAl9CiAKLQlpbmZvLT5mYm1lbSA9IGlvcmVtYXAocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMSk7CisJaW5mby0+ZmJtZW0gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGluZm8tPmZibWVtID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVtYXAgZnJhbWVidWZmZXJcbiIpOwogCQlnb3RvIGVycl9tZW1fcmVzOwogCX0KIAotCWluZm8tPmZibWVtX2xlbiA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzE7CisJaW5mby0+ZmJtZW1fbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCiAJLyogY2xlYXIgZnJhbWVidWZmZXIgbWVtb3J5IC0gYXZvaWRzIGdhcmJhZ2UgZGF0YSBvbiB1bnVzZWQgZmIgKi8KIAltZW1zZXQoaW5mby0+ZmJtZW0sIDAsIGluZm8tPmZibWVtX2xlbik7CkBAIC0xMzg5LDggKzE1ODYsMTAgQEAKIAkvKiBlbmFibGUgZGlzcGxheSBjb250cm9sbGVyICovCiAJc201MDFfdW5pdF9wb3dlcihkZXYtPnBhcmVudCwgU001MDFfR0FURV9ESVNQTEFZLCAxKTsKIAotCS8qIHNldHVwIGN1cnNvcnMgKi8KKwkvKiBlbmFibGUgMmQgY29udHJvbGxlciAqLworCXNtNTAxX3VuaXRfcG93ZXIoZGV2LT5wYXJlbnQsIFNNNTAxX0dBVEVfMkRfRU5HSU5FLCAxKTsKIAorCS8qIHNldHVwIGN1cnNvcnMgKi8KIAlzbTUwMV9pbml0X2N1cnNvcihpbmZvLT5mYltIRUFEX0NSVF0sIFNNNTAxX0RDX0NSVF9IV0NfQUREUik7CiAJc201MDFfaW5pdF9jdXJzb3IoaW5mby0+ZmJbSEVBRF9QQU5FTF0sIFNNNTAxX0RDX1BBTkVMX0hXQ19BRERSKTsKIApAQCAtMTQwMCw2ICsxNTk5LDEzIEBACiAJcmVsZWFzZV9yZXNvdXJjZShpbmZvLT5mYm1lbV9yZXMpOwogCWtmcmVlKGluZm8tPmZibWVtX3Jlcyk7CiAKKyBlcnJfcmVnczJkX21hcDoKKwlpb3VubWFwKGluZm8tPnJlZ3MyZCk7CisKKyBlcnJfcmVnczJkX3JlczoKKwlyZWxlYXNlX3Jlc291cmNlKGluZm8tPnJlZ3MyZF9yZXMpOworCWtmcmVlKGluZm8tPnJlZ3MyZF9yZXMpOworCiAgZXJyX3JlZ3NfbWFwOgogCWlvdW5tYXAoaW5mby0+cmVncyk7CiAKQEAgLTE0MjAsNiArMTYyNiwxMCBAQAogCXJlbGVhc2VfcmVzb3VyY2UoaW5mby0+ZmJtZW1fcmVzKTsKIAlrZnJlZShpbmZvLT5mYm1lbV9yZXMpOwogCisJaW91bm1hcChpbmZvLT5yZWdzMmQpOworCXJlbGVhc2VfcmVzb3VyY2UoaW5mby0+cmVnczJkX3Jlcyk7CisJa2ZyZWUoaW5mby0+cmVnczJkX3Jlcyk7CisKIAlpb3VubWFwKGluZm8tPnJlZ3MpOwogCXJlbGVhc2VfcmVzb3VyY2UoaW5mby0+cmVnc19yZXMpOwogCWtmcmVlKGluZm8tPnJlZ3NfcmVzKTsKQEAgLTE0ODYsNyArMTY5Niw4IEBACiAJCXBhci0+b3BzLmZiX2N1cnNvciA9IE5VTEw7CiAKIAlmYi0+ZmJvcHMgPSAmcGFyLT5vcHM7Ci0JZmItPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8CisJZmItPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8IEZCSU5GT19SRUFEU19GQVNUIHwKKwkJRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8CiAJCUZCSU5GT19IV0FDQ0VMX1hQQU4gfCBGQklORk9fSFdBQ0NFTF9ZUEFOOwogCiAJLyogZml4ZWQgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwppbmRleCBlM2U1OTdmLi4wOTM1M2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtMTEzNCw0NSArMTEzNCwzMyBAQAogCQkJICAgICpwbHZkc19zZXR0aW5nX2luZm8sCiAJCQkgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQogewotCWJvb2wgdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gZmFsc2U7Ci0JYm9vbCB0dXJuX29uX3NlY29uZF9wb3dlcnNlcXVlbmNlID0gZmFsc2U7Ci0KIAlERUJVR19NU0coS0VSTl9JTkZPICJpbnRlZ3JhdGVkX2x2ZHNfZW5hYmxlLCBvdXRfaW50ZXJmYWNlOiVkXG4iLAogCQkgIHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSk7CiAJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX21vZGUgPT0gTENEX1NQV0cpCiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAwLCBCSVQwICsgQklUMSk7Ci0JIGVsc2UKKwllbHNlCiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAzLCBCSVQwICsgQklUMSk7Ci0JaWYgKElOVEVSRkFDRV9MVkRTMExWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKLQkJdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKLQlpZiAoSU5URVJGQUNFX0xWRFMwID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKLQkJdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKLQlpZiAoSU5URVJGQUNFX0xWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKLQkJdHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CiAKLQlpZiAodHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSkgewotCQkvKiBVc2Ugc2Vjb25kIHBvd2VyIHNlcXVlbmNlIGNvbnRyb2w6ICovCi0KLQkJLyogVXNlIGhhcmR3YXJlIGNvbnRyb2wgcG93ZXIgc2VxdWVuY2UuICovCi0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAwLCBCSVQwKTsKLQotCQkvKiBUdXJuIG9uIGJhY2sgbGlnaHQuICovCi0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAwLCBCSVQ2ICsgQklUNyk7Ci0KLQkJLyogVHVybiBvbiBoYXJkd2FyZSBwb3dlciBzZXF1ZW5jZS4gKi8KLQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JENCwgVklBQ1IsIDB4MDIsIEJJVDEpOwotCX0KLQlpZiAodHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlKSB7CisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9MVkRTMExWRFMxOgorCWNhc2UgSU5URVJGQUNFX0xWRFMwOgogCQkvKiBVc2UgZmlyc3QgcG93ZXIgc2VxdWVuY2UgY29udHJvbDogKi8KLQogCQkvKiBVc2UgaGFyZHdhcmUgY29udHJvbCBwb3dlciBzZXF1ZW5jZS4gKi8KIAkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDAsIEJJVDApOwotCiAJCS8qIFR1cm4gb24gYmFjayBsaWdodC4gKi8KIAkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDAsIEJJVDYgKyBCSVQ3KTsKLQogCQkvKiBUdXJuIG9uIGhhcmR3YXJlIHBvd2VyIHNlcXVlbmNlLiAqLwogCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJCWJyZWFrOworCWNhc2UgSU5URVJGQUNFX0xWRFMxOgorCQkvKiBVc2Ugc2Vjb25kIHBvd2VyIHNlcXVlbmNlIGNvbnRyb2w6ICovCisJCS8qIFVzZSBoYXJkd2FyZSBjb250cm9sIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQzLCBWSUFDUiwgMCwgQklUMCk7CisJCS8qIFR1cm4gb24gYmFjayBsaWdodC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMywgVklBQ1IsIDAsIEJJVDYgKyBCSVQ3KTsKKwkJLyogVHVybiBvbiBoYXJkd2FyZSBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JENCwgVklBQ1IsIDB4MDIsIEJJVDEpOworCQlicmVhazsKIAl9CiAKIAkvKiBUdXJuIERGUCBIaWdoL0xvdyBwYWQgb24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCA1NmVjNjk2Li5kOGRmMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTY4MCw3ICs2ODAsNyBAQAogCQlpZiAoIXZpYWZiX2dhbW1hX3RhYmxlKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChjb3B5X2Zyb21fdXNlcih2aWFmYl9nYW1tYV90YWJsZSwgYXJncCwKLQkJCQlzaXplb2YodmlhZmJfZ2FtbWFfdGFibGUpKSkgeworCQkJCTI1NiAqIHNpemVvZih1MzIpKSkgewogCQkJa2ZyZWUodmlhZmJfZ2FtbWFfdGFibGUpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTY5NCw3ICs2OTQsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXZpYWZiX2dldF9nYW1tYV90YWJsZSh2aWFmYl9nYW1tYV90YWJsZSk7CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgdmlhZmJfZ2FtbWFfdGFibGUsCi0JCQlzaXplb2YodmlhZmJfZ2FtbWFfdGFibGUpKSkgeworCQkJMjU2ICogc2l6ZW9mKHUzMikpKSB7CiAJCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtMTc5Nyw3ICsxNzk3LDcgQEAKIHN0YXRpYyB2b2lkIHZpYWZiX2luaXRfcHJvYyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKip2aWFmYl9lbnRyeSkKIHsKIAkqdmlhZmJfZW50cnkgPSBwcm9jX21rZGlyKCJ2aWFmYiIsIE5VTEwpOwotCWlmICh2aWFmYl9lbnRyeSkgeworCWlmICgqdmlhZmJfZW50cnkpIHsKIAkJcHJvY19jcmVhdGUoImR2cDAiLCAwLCAqdmlhZmJfZW50cnksICZ2aWFmYl9kdnAwX3Byb2NfZm9wcyk7CiAJCXByb2NfY3JlYXRlKCJkdnAxIiwgMCwgKnZpYWZiX2VudHJ5LCAmdmlhZmJfZHZwMV9wcm9jX2ZvcHMpOwogCQlwcm9jX2NyZWF0ZSgiZGZwaCIsIDAsICp2aWFmYl9lbnRyeSwgJnZpYWZiX2RmcGhfcHJvY19mb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAzNzExYjg4Li4wODhmMzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogY29uZmlnIEdFT0RFX1dEVAogCXRyaXN0YXRlICJBTUQgR2VvZGUgQ1M1NTM1L0NTNTUzNiBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIE1HRU9ERV9MWAorCWRlcGVuZHMgb24gQ1M1NTM1X01GR1BUCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBhIHdhdGNoZG9nIGNhcGFiaWxpdHkgYnVpbHQgaW50byB0aGUKIAkgIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXBzIGZvciB0aGUgQU1EIEdlb2RlIEdYIGFuZCBMWApAQCAtODE1LDE2ICs4MTUsNiBAQAogCSAgdGltZXIgaGFzIGV4cGlyZWQgYW5kIG5vIHByb2Nlc3MgaGFzIHdyaXR0ZW4gdG8gL2Rldi93YXRjaGRvZyBkdXJpbmcKIAkgIHRoYXQgdGltZS4KIAotY29uZmlnIFdEVF9STTlLX0dQSQotCXRyaXN0YXRlICJSTTkwMDAvR1BJIGhhcmR3YXJlIHdhdGNoZG9nIgotCWRlcGVuZHMgb24gQ1BVX1JNOTAwMAotCWhlbHAKLQkgIFdhdGNoZG9nIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBHUEkgaGFyZHdhcmUgZm91bmQgb24KLQkgIFBNQy1TaWVycmEgUk05eHh4IENQVXMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJtOWtfd2R0LgotCiBjb25maWcgU0lCWVRFX1dET0cKIAl0cmlzdGF0ZSAiU2lieXRlIFNvQyBoYXJkd2FyZSB3YXRjaGRvZyIKIAlkZXBlbmRzIG9uIENQVV9TQjEKQEAgLTg2MSw4ICs4NTEsMTAgQEAKIAkgIFdhdGNoZG9nIHRpbWVyIGZvdW5kIGluIGEgbnVtYmVyIG9mIEdFIEZhbnVjIHNpbmdsZSBib2FyZCBjb21wdXRlcnMuCiAKIGNvbmZpZyBNUEM1MjAwX1dEVAotCXRyaXN0YXRlICJNUEM1MjAwIFdhdGNoZG9nIFRpbWVyIgorCWJvb2wgIk1QQzUyeHggV2F0Y2hkb2cgVGltZXIiCiAJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eAorCWhlbHAKKwkgIFVzZSBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKEdQVCkgMCBvbiB0aGUgTVBDNTIwMCBhcyBXYXRjaGRvZy4KIAogY29uZmlnIDh4eHhfV0RUCiAJdHJpc3RhdGUgIk1QQzh4eHggUGxhdGZvcm0gV2F0Y2hkb2cgVGltZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQppbmRleCA2OTkxOTliLi40NzVjNjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTEwOSw3ICsxMDksNiBAQAogb2JqLSQoQ09ORklHX0lORFlET0cpICs9IGluZHlkb2cubwogb2JqLSQoQ09ORklHX1dEVF9NVFgxKSArPSBtdHgtMV93ZHQubwogb2JqLSQoQ09ORklHX1BOWDgzM1hfV0RUKSArPSBwbng4MzN4X3dkdC5vCi1vYmotJChDT05GSUdfV0RUX1JNOUtfR1BJKSArPSBybTlrX3dkdC5vCiBvYmotJChDT05GSUdfU0lCWVRFX1dET0cpICs9IHNiX3dkb2cubwogb2JqLSQoQ09ORklHX0FSN19XRFQpICs9IGFyN193ZHQubwogb2JqLSQoQ09ORklHX1RYWDlfV0RUKSArPSB0eHg5d2R0Lm8KQEAgLTExOCw3ICsxMTcsNiBAQAogCiAjIFBPV0VSUEMgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfR0VGX1dEVCkgKz0gZ2VmX3dkdC5vCi1vYmotJChDT05GSUdfTVBDNTIwMF9XRFQpICs9IG1wYzUyMDBfd2R0Lm8KIG9iai0kKENPTkZJR184eHh4X1dEVCkgKz0gbXBjOHh4eF93ZHQubwogb2JqLSQoQ09ORklHX01WNjRYNjBfV0RUKSArPSBtdjY0eDYwX3dkdC5vCiBvYmotJChDT05GSUdfUElLQV9XRFQpICs9IHBpa2Ffd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKaW5kZXggNzdhZmIwYS4uOWM2NTk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKQEAgLTMxNCw3ICszMTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWR4X3dkdF9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWR4X3dkdF9wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSBhZHhfd2R0X3N1c3BlbmQsCiAJLnJlc3VtZSA9IGFkeF93ZHRfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwppbmRleCA5YWNmMDAxLi4zODI1MmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCkBAIC0xLDYgKzEsNyBAQAotLyogV2F0Y2hkb2cgdGltZXIgZm9yIHRoZSBHZW9kZSBHWC9MWCB3aXRoIHRoZSBDUzU1MzUvQ1M1NTM2IGNvbXBhbmlvbiBjaGlwCisvKiBXYXRjaGRvZyB0aW1lciBmb3IgbWFjaGluZXMgd2l0aCB0aGUgQ1M1NTM1L0NTNTUzNiBjb21wYW5pb24gY2hpcAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBjb2xsYWJvcmEuY28udWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE5LDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jczU1MzUuaD4KIAogI2RlZmluZSBHRU9ERVdEVF9IWiA1MDAKICNkZWZpbmUgR0VPREVXRFRfU0NBTEUgNgpAQCAtNDYsMjUgKzQ3LDI1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfZmxhZ3M7Ci1zdGF0aWMgaW50IHdkdF90aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICp3ZHRfdGltZXI7CiBzdGF0aWMgaW50IHNhZmVfY2xvc2U7CiAKIHN0YXRpYyB2b2lkIGdlb2Rld2R0X3Bpbmcodm9pZCkKIHsKIAkvKiBTdG9wIHRoZSBjb3VudGVyICovCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7CiAKIAkvKiBSZXNldCB0aGUgY291bnRlciAqLwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKIAogCS8qIEVuYWJsZSB0aGUgY291bnRlciAqLwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CiB9CiAKIHN0YXRpYyB2b2lkIGdlb2Rld2R0X2Rpc2FibGUodm9pZCkKIHsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7Ci0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2VvZGV3ZHRfc2V0X2hlYXJ0YmVhdChpbnQgdmFsKQpAQCAtNzIsMTAgKzczLDEwIEBACiAJaWYgKHZhbCA8IDEgfHwgdmFsID4gR0VPREVXRFRfTUFYX1NFQ09ORFMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NNUDIsIHZhbCAqIEdFT0RFV0RUX0haKTsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgTUZHUFRfU0VUVVBfQ05URU4pOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NNUDIsIHZhbCAqIEdFT0RFV0RUX0haKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CiAKIAl0aW1lb3V0ID0gdmFsOwogCXJldHVybiAwOwpAQCAtMjE1LDI4ICsyMTYsMjUgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2VvZGV3ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWludCByZXQsIHRpbWVyOworCWludCByZXQ7CiAKLQl0aW1lciA9IGdlb2RlX21mZ3B0X2FsbG9jX3RpbWVyKE1GR1BUX1RJTUVSX0FOWSwgTUZHUFRfRE9NQUlOX1dPUktJTkcpOwotCi0JaWYgKHRpbWVyID09IC0xKSB7CisJd2R0X3RpbWVyID0gY3M1NTM1X21mZ3B0X2FsbG9jX3RpbWVyKE1GR1BUX1RJTUVSX0FOWSwgTUZHUFRfRE9NQUlOX1dPUktJTkcpOworCWlmICghd2R0X3RpbWVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZ2VvZGV3ZHQ6ICBObyB0aW1lcnMgd2VyZSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQl3ZHRfdGltZXIgPSB0aW1lcjsKLQogCS8qIFNldCB1cCB0aGUgdGltZXIgKi8KIAotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLAorCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwKIAkJCSAgR0VPREVXRFRfU0NBTEUgfCAoMyA8PCA4KSk7CiAKIAkvKiBTZXQgdXAgY29tcGFyYXRvciAyIHRvIHJlc2V0IHdoZW4gdGhlIGV2ZW50IGZpcmVzICovCi0JZ2VvZGVfbWZncHRfdG9nZ2xlX2V2ZW50KHdkdF90aW1lciwgTUZHUFRfQ01QMiwgTUZHUFRfRVZFTlRfUkVTRVQsIDEpOworCWNzNTUzNV9tZmdwdF90b2dnbGVfZXZlbnQod2R0X3RpbWVyLCBNRkdQVF9DTVAyLCBNRkdQVF9FVkVOVF9SRVNFVCwgMSk7CiAKIAkvKiBTZXQgdXAgdGhlIGluaXRpYWwgdGltZW91dCAqLwogCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ01QMiwKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ01QMiwKIAkJdGltZW91dCAqIEdFT0RFV0RUX0haKTsKIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmdlb2Rld2R0X21pc2NkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTljNDdjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgotCi0KLSNkZWZpbmUgR1BUX01PREVfV0RUCQkoMSA8PCAxNSkKLSNkZWZpbmUgR1BUX01PREVfQ0UJCSgxIDw8IDEyKQotI2RlZmluZSBHUFRfTU9ERV9NU19USU1FUgkoMHg0KQotCi0KLXN0cnVjdCBtcGM1MjAwX3dkdCB7Ci0JdW5zaWduZWQgY291bnQ7CS8qIHRpbWVyIHRpY2tzIGJlZm9yZSB3YXRjaGRvZyBraWNrcyBpbiAqLwotCWxvbmcgaXBiX2ZyZXE7Ci0Jc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgbWVtOwotCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzOwotCXNwaW5sb2NrX3QgaW9fbG9jazsKLX07Ci0KLS8qIGlzX2FjdGl2ZSBzdG9yZXMgd2V0aGVyIG9yIG5vdCB0aGUgL2Rldi93YXRjaGRvZyBkZXZpY2UgaXMgb3BlbmVkICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc19hY3RpdmU7Ci0KLS8qIG1pc2MgZGV2aWNlcyBkb24ndCBwcm92aWRlIGEgd2F5LCB0byBnZXQgYmFjayB0byAnZGV2JyBvciAnbWlzY2RldicgZnJvbQotICogZmlsZSBvcGVyYXRpb25zLCB3aGljaCBzdWNrcy4gQnV0IHRoZXJlIGNhbiBiZSBtYXggMSB3YXRjaGRvZyBhbnl3YXksIHNvLi4uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXBjNTIwMF93ZHQgKndkdF9nbG9iYWw7Ci0KLQotLyogaGVscGVyIHRvIGNhbGN1bGF0ZSB0aW1lb3V0IGluIHRpbWVyIGNvdW50cyAqLwotc3RhdGljIHZvaWQgbXBjNTIwMF93ZHRfc2V0X3RpbWVvdXQoc3RydWN0IG1wYzUyMDBfd2R0ICp3ZHQsIGludCB0aW1lb3V0KQotewotCS8qIHVzZSBiaWdnZXN0IHByZXNjYWxlciBvZiA2NGsgKi8KLQl3ZHQtPmNvdW50ID0gKHdkdC0+aXBiX2ZyZXEgKyAweGZmZmYpIC8gMHgxMDAwMCAqIHRpbWVvdXQ7Ci0KLQlpZiAod2R0LT5jb3VudCA+IDB4ZmZmZikKLQkJd2R0LT5jb3VudCA9IDB4ZmZmZjsKLX0KLS8qIHJldHVybiB0aW1lb3V0IGluIHNlY29uZHMgKGNhbGN1bGF0ZWQgZnJvbSB0aW1lciBjb3VudCkgKi8KLXN0YXRpYyBpbnQgbXBjNTIwMF93ZHRfZ2V0X3RpbWVvdXQoc3RydWN0IG1wYzUyMDBfd2R0ICp3ZHQpCi17Ci0JcmV0dXJuIHdkdC0+Y291bnQgKiAweDEwMDAwIC8gd2R0LT5pcGJfZnJlcTsKLX0KLQotCi0vKiB3YXRjaGRvZyBvcGVyYXRpb25zICovCi1zdGF0aWMgaW50IG1wYzUyMDBfd2R0X3N0YXJ0KHN0cnVjdCBtcGM1MjAwX3dkdCAqd2R0KQotewotCXNwaW5fbG9jaygmd2R0LT5pb19sb2NrKTsKLQkvKiBkaXNhYmxlICovCi0Jb3V0X2JlMzIoJndkdC0+cmVncy0+bW9kZSwgMCk7Ci0JLyogc2V0IHRpbWVvdXQsIHdpdGggbWF4aW11bSBwcmVzY2FsZXIgKi8KLQlvdXRfYmUzMigmd2R0LT5yZWdzLT5jb3VudCwgMHgwIHwgd2R0LT5jb3VudCk7Ci0JLyogZW5hYmxlIHdhdGNoZG9nICovCi0Jb3V0X2JlMzIoJndkdC0+cmVncy0+bW9kZSwgR1BUX01PREVfQ0UgfCBHUFRfTU9ERV9XRFQgfAotCQkJCQkJR1BUX01PREVfTVNfVElNRVIpOwotCXNwaW5fdW5sb2NrKCZ3ZHQtPmlvX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IG1wYzUyMDBfd2R0X3Bpbmcoc3RydWN0IG1wYzUyMDBfd2R0ICp3ZHQpCi17Ci0Jc3Bpbl9sb2NrKCZ3ZHQtPmlvX2xvY2spOwotCS8qIHdyaXRpbmcgQTUgdG8gT0NQVyByZXNldHMgdGhlIHdhdGNoZG9nICovCi0Jb3V0X2JlMzIoJndkdC0+cmVncy0+bW9kZSwgMHhBNTAwMDAwMCB8Ci0JCQkJKDB4ZmZmZmZmICYgaW5fYmUzMigmd2R0LT5yZWdzLT5tb2RlKSkpOwotCXNwaW5fdW5sb2NrKCZ3ZHQtPmlvX2xvY2spOwotCXJldHVybiAwOwotfQotc3RhdGljIGludCBtcGM1MjAwX3dkdF9zdG9wKHN0cnVjdCBtcGM1MjAwX3dkdCAqd2R0KQotewotCXNwaW5fbG9jaygmd2R0LT5pb19sb2NrKTsKLQkvKiBkaXNhYmxlICovCi0Jb3V0X2JlMzIoJndkdC0+cmVncy0+bW9kZSwgMCk7Ci0Jc3Bpbl91bmxvY2soJndkdC0+aW9fbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogZmlsZSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3NpemVfdCBtcGM1MjAwX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCi0JCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgbXBjNTIwMF93ZHQgKndkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQltcGM1MjAwX3dkdF9waW5nKHdkdCk7Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gbXBjNTIwMF93ZHRfaW5mbyA9IHsKLQkub3B0aW9ucwk9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HLAotCS5pZGVudGl0eQk9ICJtcGM1MjAwIHdhdGNoZG9nIG9uIEdQVDAiLAotfTsKLXN0YXRpYyBsb25nIG1wYzUyMDBfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBtcGM1MjAwX3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBfX3VzZXIgKmRhdGEgPSAoaW50IF9fdXNlciAqKWFyZzsKLQlpbnQgdGltZW91dDsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBXRElPQ19HRVRTVVBQT1JUOgotCQlyZXQgPSBjb3B5X3RvX3VzZXIoZGF0YSwgJm1wYzUyMDBfd2R0X2luZm8sCi0JCQkJCQlzaXplb2YobXBjNTIwMF93ZHRfaW5mbykpOwotCQlpZiAocmV0KQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFdESU9DX0dFVFNUQVRVUzoKLQljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6Ci0JCXJldCA9IHB1dF91c2VyKDAsIGRhdGEpOwotCQlicmVhazsKLQotCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQltcGM1MjAwX3dkdF9waW5nKHdkdCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBXRElPQ19TRVRUSU1FT1VUOgotCQlyZXQgPSBnZXRfdXNlcih0aW1lb3V0LCBkYXRhKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQltcGM1MjAwX3dkdF9zZXRfdGltZW91dCh3ZHQsIHRpbWVvdXQpOwotCQltcGM1MjAwX3dkdF9zdGFydCh3ZHQpOwotCQkvKiBmYWxsIHRocm91Z2ggYW5kIHJldHVybiB0aGUgdGltZW91dCAqLwotCi0JY2FzZSBXRElPQ19HRVRUSU1FT1VUOgotCQl0aW1lb3V0ID0gbXBjNTIwMF93ZHRfZ2V0X3RpbWVvdXQod2R0KTsKLQkJcmV0ID0gcHV0X3VzZXIodGltZW91dCwgZGF0YSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT1RUWTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtcGM1MjAwX3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIC9kZXYvd2F0Y2hkb2cgY2FuIG9ubHkgYmUgb3BlbmVkIG9uY2UgKi8KLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmaXNfYWN0aXZlKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFNldCBhbmQgYWN0aXZhdGUgdGhlIHdhdGNoZG9nICovCi0JbXBjNTIwMF93ZHRfc2V0X3RpbWVvdXQod2R0X2dsb2JhbCwgMzApOwotCW1wYzUyMDBfd2R0X3N0YXJ0KHdkdF9nbG9iYWwpOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IHdkdF9nbG9iYWw7Ci0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwotfQotc3RhdGljIGludCBtcGM1MjAwX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotI2lmIFdBVENIRE9HX05PV0FZT1VUID09IDAKLQlzdHJ1Y3QgbXBjNTIwMF93ZHQgKndkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQltcGM1MjAwX3dkdF9zdG9wKHdkdCk7Ci0Jd2R0LT5jb3VudCA9IDA7CQkvKiA9PSBkaXNhYmxlZCAqLwotI2VuZGlmCi0JY2xlYXJfYml0KDAsICZpc19hY3RpdmUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtcGM1MjAwX3dkdF9mb3BzID0gewotCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCS53cml0ZQk9IG1wYzUyMDBfd2R0X3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bAk9IG1wYzUyMDBfd2R0X2lvY3RsLAotCS5vcGVuCT0gbXBjNTIwMF93ZHRfb3BlbiwKLQkucmVsZWFzZSA9IG1wYzUyMDBfd2R0X3JlbGVhc2UsCi19OwotCi0vKiBtb2R1bGUgb3BlcmF0aW9ucyAqLwotc3RhdGljIGludCBtcGM1MjAwX3dkdF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKLQkJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IG1wYzUyMDBfd2R0ICp3ZHQ7Ci0JaW50IGVycjsKLQljb25zdCB2b2lkICpoYXNfd2R0OwotCWludCBzaXplOwotCi0JaGFzX3dkdCA9IG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgImhhcy13ZHQiLCBOVUxMKTsKLQlpZiAoIWhhc193ZHQpCi0JCWhhc193ZHQgPSBvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJmc2wsaGFzLXdkdCIsIE5VTEwpOwotCWlmICghaGFzX3dkdCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl3ZHQgPSBremFsbG9jKHNpemVvZigqd2R0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3ZHQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd2R0LT5pcGJfZnJlcSA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kob3AtPm5vZGUpOwotCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShvcC0+bm9kZSwgMCwgJndkdC0+bWVtKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9mcmVlOwotCXNpemUgPSB3ZHQtPm1lbS5lbmQgLSB3ZHQtPm1lbS5zdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24od2R0LT5tZW0uc3RhcnQsIHNpemUsICJtcGM1MjAwX3dkdCIpKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCXdkdC0+cmVncyA9IGlvcmVtYXAod2R0LT5tZW0uc3RhcnQsIHNpemUpOwotCWlmICghd2R0LT5yZWdzKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X3JlbGVhc2U7Ci0JfQotCi0JZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCB3ZHQpOwotCXNwaW5fbG9ja19pbml0KCZ3ZHQtPmlvX2xvY2spOwotCi0Jd2R0LT5taXNjZGV2ID0gKHN0cnVjdCBtaXNjZGV2aWNlKSB7Ci0JCS5taW5vcgk9IFdBVENIRE9HX01JTk9SLAotCQkubmFtZQk9ICJ3YXRjaGRvZyIsCi0JCS5mb3BzCT0gJm1wYzUyMDBfd2R0X2ZvcHMsCi0JCS5wYXJlbnQgPSAmb3AtPmRldiwKLQl9OwotCXdkdF9nbG9iYWwgPSB3ZHQ7Ci0JZXJyID0gbWlzY19yZWdpc3Rlcigmd2R0LT5taXNjZGV2KTsKLQlpZiAoIWVycikKLQkJcmV0dXJuIDA7Ci0KLQlpb3VubWFwKHdkdC0+cmVncyk7Ci1vdXRfcmVsZWFzZToKLQlyZWxlYXNlX21lbV9yZWdpb24od2R0LT5tZW0uc3RhcnQsIHNpemUpOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUod2R0KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG1wYzUyMDBfd2R0X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKLXsKLQlzdHJ1Y3QgbXBjNTIwMF93ZHQgKndkdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7Ci0KLQltcGM1MjAwX3dkdF9zdG9wKHdkdCk7Ci0JbWlzY19kZXJlZ2lzdGVyKCZ3ZHQtPm1pc2NkZXYpOwotCWlvdW5tYXAod2R0LT5yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24od2R0LT5tZW0uc3RhcnQsIHdkdC0+bWVtLmVuZCAtIHdkdC0+bWVtLnN0YXJ0ICsgMSk7Ci0Ja2ZyZWUod2R0KTsKLQotCXJldHVybiAwOwotfQotc3RhdGljIGludCBtcGM1MjAwX3dkdF9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IG1wYzUyMDBfd2R0ICp3ZHQgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwotCW1wYzUyMDBfd2R0X3N0b3Aod2R0KTsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgbXBjNTIwMF93ZHRfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQotewotCXN0cnVjdCBtcGM1MjAwX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKLQlpZiAod2R0LT5jb3VudCkKLQkJbXBjNTIwMF93ZHRfc3RhcnQod2R0KTsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgbXBjNTIwMF93ZHRfc2h1dGRvd24oc3RydWN0IG9mX2RldmljZSAqb3ApCi17Ci0Jc3RydWN0IG1wYzUyMDBfd2R0ICp3ZHQgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwotCW1wYzUyMDBfd2R0X3N0b3Aod2R0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTIwMF93ZHRfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZ3B0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCIsIH0sCi0Je30sCi19Owotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjNTIwMF93ZHRfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAibXBjNTIwMC1ncHQtd2R0IiwKLQkubWF0Y2hfdGFibGUJPSBtcGM1MjAwX3dkdF9tYXRjaCwKLQkucHJvYmUJCT0gbXBjNTIwMF93ZHRfcHJvYmUsCi0JLnJlbW92ZQkJPSBtcGM1MjAwX3dkdF9yZW1vdmUsCi0JLnN1c3BlbmQJPSBtcGM1MjAwX3dkdF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gbXBjNTIwMF93ZHRfcmVzdW1lLAotCS5zaHV0ZG93bgk9IG1wYzUyMDBfd2R0X3NodXRkb3duLAotfTsKLQotCi1zdGF0aWMgaW50IF9faW5pdCBtcGM1MjAwX3dkdF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTIwMF93ZHRfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1wYzUyMDBfd2R0X2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTIwMF93ZHRfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQobXBjNTIwMF93ZHRfaW5pdCk7Ci1tb2R1bGVfZXhpdChtcGM1MjAwX3dkdF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiRG9tZW4gUHVuY2VyIDxkb21lbi5wdW5jZXJAdGVsYXJnby5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci1NT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3JtOWtfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3JtOWtfd2R0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNjY5NTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE5ICswLDAgQEAKLS8qCi0gKiAgV2F0Y2hkb2cgaW1wbGVtZW50YXRpb24gZm9yIEdQSSBoL3cgZm91bmQgb24gUE1DLVNpZXJyYSBSTTl4eHgKLSAqICBjaGlwcy4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCi0gKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+Ci0KLSNpbmNsdWRlIDxybTlrX3dkdC5oPgotCi0KLSNkZWZpbmUgQ0xPQ0sgICAgICAgICAgICAgICAgICAxMjUwMDAwMDAKLSNkZWZpbmUgTUFYX1RJTUVPVVRfU0VDT05EUyAgICAzMgotI2RlZmluZSBDUENDUiAgICAgICAgICAgICAgICAgIDB4MDA4MAotI2RlZmluZSBDUEdJRzFTUiAgICAgICAgICAgICAgIDB4MDA0NAotI2RlZmluZSBDUEdJRzFFUiAgICAgICAgICAgICAgIDB4MDA1NAotCi0KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCB3ZHRfZ3BpX2lycWhkbChpbnQsIHZvaWQgKik7Ci1zdGF0aWMgdm9pZCB3ZHRfZ3BpX3N0YXJ0KHZvaWQpOwotc3RhdGljIHZvaWQgd2R0X2dwaV9zdG9wKHZvaWQpOwotc3RhdGljIHZvaWQgd2R0X2dwaV9zZXRfdGltZW91dCh1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCB3ZHRfZ3BpX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwotc3RhdGljIGludCB3ZHRfZ3BpX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwotc3RhdGljIHNzaXplX3Qgd2R0X2dwaV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCi0JCQkJCQkJCWxvZmZfdCAqKTsKLXN0YXRpYyBsb25nIHdkdF9ncGlfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyBpbnQgd2R0X2dwaV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlICp3ZHRfZ3BpX2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosCi0JCQkJCQljb25zdCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IF9fZXhpdCB3ZHRfZ3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwotCi0KLXN0YXRpYyBjb25zdCBjaGFyIHdkdF9ncGlfbmFtZVtdID0gIndkdF9ncGkiOwotc3RhdGljIGF0b21pY190IG9wZW5jbnQ7Ci1zdGF0aWMgaW50IGV4cGVjdF9jbG9zZTsKLXN0YXRpYyBpbnQgbG9ja2VkOwotCi0KLS8qIFRoZXNlIGFyZSBzZXQgZnJvbSBkZXZpY2UgcmVzb3VyY2VzICovCi1zdGF0aWMgdm9pZCBfX2lvbWVtICp3ZF9yZWdzOwotc3RhdGljIHVuc2lnbmVkIGludCB3ZF9pcnEsIHdkX2N0cjsKLQotCi0vKiBNb2R1bGUgYXJndW1lbnRzICovCi1zdGF0aWMgaW50IHRpbWVvdXQgPSBNQVhfVElNRU9VVF9TRUNPTkRTOwotbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMiKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRhZGRyID0gMHhiZmZkYzIwMDsKLW1vZHVsZV9wYXJhbShyZXNldGFkZHIsIHVsb25nLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmVzZXRhZGRyLCAiQWRkcmVzcyB0byB3cml0ZSB0byB0byBmb3JjZSBhIHJlc2V0Iik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZsYWdhZGRyID0gMHhiZmZkYzEwNDsKLW1vZHVsZV9wYXJhbShmbGFnYWRkciwgdWxvbmcsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmbGFnYWRkciwgIkFkZHJlc3MgdG8gd3JpdGUgdG8gYm9vdCBmbGFncyB0byIpOwotCi1zdGF0aWMgaW50IHBvd2VyY3ljbGU7Ci1tb2R1bGVfcGFyYW0ocG93ZXJjeWNsZSwgYm9vbCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvd2VyY3ljbGUsICJDeWNsZSBwb3dlciBpZiB3YXRjaGRvZyBleHBpcmVzIik7Ci0KLXN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKLW1vZHVsZV9wYXJhbShub3dheW91dCwgYm9vbCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIGRpc2FibGVkIG9uY2Ugc3RhcnRlZCIpOwotCi0KLS8qIEtlcm5lbCBpbnRlcmZhY2VzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSB3ZHRfZ3BpX29wZW4sCi0JLnJlbGVhc2UJPSB3ZHRfZ3BpX3JlbGVhc2UsCi0JLndyaXRlCQk9IHdkdF9ncGlfd3JpdGUsCi0JLnVubG9ja2VkX2lvY3RsCT0gd2R0X2dwaV9pb2N0bCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0gewotCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKLQkubmFtZQkJPSB3ZHRfZ3BpX25hbWUsCi0JLmZvcHMJCT0gJmZvcHMsCi19OwotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHdkdF9ncGlfc2h1dGRvd24gPSB7Ci0JLm5vdGlmaWVyX2NhbGwJPSB3ZHRfZ3BpX25vdGlmeSwKLX07Ci0KLQotLyogSW50ZXJydXB0IGhhbmRsZXIgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCB3ZHRfZ3BpX2lycWhkbChpbnQgaXJxLCB2b2lkICpjdHh0KQotewotCWlmICghdW5saWtlbHkoX19yYXdfcmVhZGwod2RfcmVncyArIDB4MDAwOCkgJiAweDEpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0JX19yYXdfd3JpdGVsKDB4MSwgd2RfcmVncyArIDB4MDAwOCk7Ci0KLQotCXByaW50ayhLRVJOX0NSSVQgIiVzOiB3YXRjaGRvZyBleHBpcmVkIC0gcmVzZXR0aW5nIHN5c3RlbVxuIiwKLQkJd2R0X2dwaV9uYW1lKTsKLQotCSoodm9sYXRpbGUgY2hhciAqKSBmbGFnYWRkciB8PSAweDAxOwotCSoodm9sYXRpbGUgY2hhciAqKSByZXNldGFkZHIgPSBwb3dlcmN5Y2xlID8gMHgwMSA6IDB4MjsKLQlpb2IoKTsKLQl3aGlsZSAoMSkKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KLQotLyogV2F0Y2hkb2cgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCB3ZHRfZ3BpX3N0YXJ0KHZvaWQpCi17Ci0JdTMyIHJlZzsKLQotCWxvY2tfdGl0YW5fcmVncygpOwotCXJlZyA9IHRpdGFuX3JlYWRsKENQR0lHMUVSKTsKLQl0aXRhbl93cml0ZWwocmVnIHwgKDB4MTAwIDw8IHdkX2N0ciksIENQR0lHMUVSKTsKLQlpb2IoKTsKLQl1bmxvY2tfdGl0YW5fcmVncygpOwotfQotCi1zdGF0aWMgdm9pZCB3ZHRfZ3BpX3N0b3Aodm9pZCkKLXsKLQl1MzIgcmVnOwotCi0JbG9ja190aXRhbl9yZWdzKCk7Ci0JcmVnID0gdGl0YW5fcmVhZGwoQ1BDQ1IpICYgfigweGYgPDwgKHdkX2N0ciAqIDQpKTsKLQl0aXRhbl93cml0ZWwocmVnLCBDUENDUik7Ci0JcmVnID0gdGl0YW5fcmVhZGwoQ1BHSUcxRVIpOwotCXRpdGFuX3dyaXRlbChyZWcgJiB+KDB4MTAwIDw8IHdkX2N0ciksIENQR0lHMUVSKTsKLQlpb2IoKTsKLQl1bmxvY2tfdGl0YW5fcmVncygpOwotfQotCi1zdGF0aWMgdm9pZCB3ZHRfZ3BpX3NldF90aW1lb3V0KHVuc2lnbmVkIGludCB0bykKLXsKLQl1MzIgcmVnOwotCWNvbnN0IHUzMiB3ZHZhbCA9ICh0byAqIENMT0NLKSAmIH4weDAwMDAwMDBmOwotCi0JbG9ja190aXRhbl9yZWdzKCk7Ci0JcmVnID0gdGl0YW5fcmVhZGwoQ1BDQ1IpICYgfigweGYgPDwgKHdkX2N0ciAqIDQpKTsKLQl0aXRhbl93cml0ZWwocmVnLCBDUENDUik7Ci0Jd21iKCk7Ci0JX19yYXdfd3JpdGVsKHdkdmFsLCB3ZF9yZWdzICsgMHgwMDAwKTsKLQl3bWIoKTsKLQl0aXRhbl93cml0ZWwocmVnIHwgKDB4MiA8PCAod2RfY3RyICogNCkpLCBDUENDUik7Ci0Jd21iKCk7Ci0JdGl0YW5fd3JpdGVsKHJlZyB8ICgweDUgPDwgKHdkX2N0ciAqIDQpKSwgQ1BDQ1IpOwotCWlvYigpOwotCXVubG9ja190aXRhbl9yZWdzKCk7Ci19Ci0KLQotLyogL2Rldi93YXRjaGRvZyBvcGVyYXRpb25zICovCi1zdGF0aWMgaW50IHdkdF9ncGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbnQgcmVzOwotCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfaWZfcG9zaXRpdmUoJm9wZW5jbnQpIDwgMCkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlleHBlY3RfY2xvc2UgPSAwOwotCWlmIChsb2NrZWQpIHsKLQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JCWZyZWVfaXJxKHdkX2lycSwgJm1pc2NkZXYpOwotCQlsb2NrZWQgPSAwOwotCX0KLQotCXJlcyA9IHJlcXVlc3RfaXJxKHdkX2lycSwgd2R0X2dwaV9pcnFoZGwsIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgd2R0X2dwaV9uYW1lLCAmbWlzY2Rldik7Ci0JaWYgKHVubGlrZWx5KHJlcykpCi0JCXJldHVybiByZXM7Ci0KLQl3ZHRfZ3BpX3NldF90aW1lb3V0KHRpbWVvdXQpOwotCXdkdF9ncGlfc3RhcnQoKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiB3YXRjaGRvZyBzdGFydGVkLCB0aW1lb3V0ID0gJXUgc2Vjb25kc1xuIiwKLQkJd2R0X2dwaV9uYW1lLCB0aW1lb3V0KTsKLQlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgd2R0X2dwaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChub3dheW91dCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gd2F5IG91dCAtIHdhdGNoZG9nIGxlZnQgcnVubmluZ1xuIiwKLQkJCXdkdF9ncGlfbmFtZSk7Ci0JCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7Ci0JCWxvY2tlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJaWYgKGV4cGVjdF9jbG9zZSkgewotCQkJd2R0X2dwaV9zdG9wKCk7Ci0JCQlmcmVlX2lycSh3ZF9pcnEsICZtaXNjZGV2KTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3YXRjaGRvZyBzdG9wcGVkXG4iLAotCQkJCQkJCXdkdF9ncGlfbmFtZSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9DUklUICIlczogdW5leHBlY3RlZCBjbG9zZSgpIC0iCi0JCQkJIiB3YXRjaGRvZyBsZWZ0IHJ1bm5pbmdcbiIsCi0JCQkJd2R0X2dwaV9uYW1lKTsKLQkJCXdkdF9ncGlfc2V0X3RpbWVvdXQodGltZW91dCk7Ci0JCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCQkJbG9ja2VkID0gMTsKLQkJfQotCX0KLQotCWF0b21pY19pbmMoJm9wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCB3ZHRfZ3BpX3dyaXRlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqZCwgc2l6ZV90IHMsCi0JCQkJCQkJCWxvZmZfdCAqbykKLXsKLQljaGFyIHZhbDsKLQotCXdkdF9ncGlfc2V0X3RpbWVvdXQodGltZW91dCk7Ci0JZXhwZWN0X2Nsb3NlID0gKHMgPiAwKSAmJiAhZ2V0X3VzZXIodmFsLCBkKSAmJiAodmFsID09ICdWJyk7Ci0JcmV0dXJuIHMgPyAxIDogMDsKLX0KLQotc3RhdGljIGxvbmcgd2R0X2dwaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JbG9uZyByZXMgPSAtRU5PVFRZOwotCWNvbnN0IGxvbmcgc2l6ZSA9IF9JT0NfU0laRShjbWQpOwotCWludCBzdGF0OwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyB3ZGluZm8gPSB7Ci0JCS5pZGVudGl0eSAgICAgICAgICAgICAgID0gIlJNOXh4eC9HUEkgd2F0Y2hkb2ciLAotCQkuZmlybXdhcmVfdmVyc2lvbiAgICAgICA9IDAsCi0JCS5vcHRpb25zICAgICAgICAgICAgICAgID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcKLQl9OwotCi0JaWYgKHVubGlrZWx5KF9JT0NfVFlQRShjbWQpICE9IFdBVENIRE9HX0lPQ1RMX0JBU0UpKQotCQlyZXR1cm4gLUVOT1RUWTsKLQotCWlmICgoX0lPQ19ESVIoY21kKSAmIF9JT0NfUkVBRCkKLQkgICAgJiYgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGFyZywgc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkKLQkgICAgJiYgIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYXJnLCBzaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlleHBlY3RfY2xvc2UgPSAwOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6Ci0JCXdkaW5mby5vcHRpb25zID0gbm93YXlvdXQgPwotCQkJV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcgOgotCQkJV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcgfAotCQkJV0RJT0ZfTUFHSUNDTE9TRTsKLQkJcmVzID0gX19jb3B5X3RvX3VzZXIoYXJncCwgJndkaW5mbywgc2l6ZSkgPyAgLUVGQVVMVCA6IHNpemU7Ci0JCWJyZWFrOwotCi0JY2FzZSBXRElPQ19HRVRTVEFUVVM6Ci0JCWJyZWFrOwotCi0JY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgotCQlzdGF0ID0gKCoodm9sYXRpbGUgY2hhciAqKSBmbGFnYWRkciAmIDB4MDEpCi0JCQk/IFdESU9GX0NBUkRSRVNFVCA6IDA7Ci0JCXJlcyA9IF9fY29weV90b191c2VyKGFyZ3AsICZzdGF0LCBzaXplKSA/Ci0JCQktRUZBVUxUIDogc2l6ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIFdESU9DX1NFVE9QVElPTlM6Ci0JCWJyZWFrOwotCi0JY2FzZSBXRElPQ19LRUVQQUxJVkU6Ci0JCXdkdF9ncGlfc2V0X3RpbWVvdXQodGltZW91dCk7Ci0JCXJlcyA9IHNpemU7Ci0JCWJyZWFrOwotCi0JY2FzZSBXRElPQ19TRVRUSU1FT1VUOgotCQl7Ci0JCQlpbnQgdmFsOwotCQkJaWYgKHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJnZhbCwgYXJncCwgc2l6ZSkpKSB7Ci0JCQkJcmVzID0gLUVGQVVMVDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKHZhbCA+IE1BWF9USU1FT1VUX1NFQ09ORFMpCi0JCQkJdmFsID0gTUFYX1RJTUVPVVRfU0VDT05EUzsKLQkJCXRpbWVvdXQgPSB2YWw7Ci0JCQl3ZHRfZ3BpX3NldF90aW1lb3V0KHZhbCk7Ci0JCQlyZXMgPSBzaXplOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRpbWVvdXQgc2V0IHRvICV1IHNlY29uZHNcbiIsCi0JCQkJd2R0X2dwaV9uYW1lLCB0aW1lb3V0KTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKLQkJcmVzID0gX19jb3B5X3RvX3VzZXIoYXJncCwgJnRpbWVvdXQsIHNpemUpID8KLQkJCS1FRkFVTFQgOiBzaXplOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmVzOwotfQotCi0KLS8qIFNodXRkb3duIG5vdGlmaWVyICovCi1zdGF0aWMgaW50IHdkdF9ncGlfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAotCQkJICB2b2lkICp1bnVzZWQpCi17Ci0JaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKLQkJd2R0X2dwaV9zdG9wKCk7Ci0KLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLQotLyogSW5pdCAmIGV4aXQgcHJvY2VkdXJlcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2LAotCQkJCQljb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQljaGFyIGJ1Zls4MF07Ci0JaWYgKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlc18wIiwgbmFtZSkgPj0gc2l6ZW9mKGJ1ZikpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkdiwgdHlwZSwgYnVmKTsKLX0KLQotLyogTm8gaG90cGx1Z2dpbmcgb24gdGhlIHBsYXRmb3JtIGJ1cyAtIHVzZSBfX2RldmluaXQgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2KQotewotCWludCByZXM7Ci0JY29uc3Qgc3RydWN0IHJlc291cmNlCi0JCSogY29uc3QgcnIgPSB3ZHRfZ3BpX2dldF9yZXNvdXJjZShwZHYsIFdEVF9SRVNPVVJDRV9SRUdTLAotCQkJCQkJICBJT1JFU09VUkNFX01FTSksCi0JCSogY29uc3QgcmkgPSB3ZHRfZ3BpX2dldF9yZXNvdXJjZShwZHYsIFdEVF9SRVNPVVJDRV9JUlEsCi0JCQkJCQkgIElPUkVTT1VSQ0VfSVJRKSwKLQkJKiBjb25zdCByYyA9IHdkdF9ncGlfZ2V0X3Jlc291cmNlKHBkdiwgV0RUX1JFU09VUkNFX0NPVU5URVIsCi0JCQkJCQkgIDApOwotCi0JaWYgKHVubGlrZWx5KCFyciB8fCAhcmkgfHwgIXJjKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXdkX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUocnItPnN0YXJ0LCByci0+ZW5kICsgMSAtIHJyLT5zdGFydCk7Ci0JaWYgKHVubGlrZWx5KCF3ZF9yZWdzKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jd2RfaXJxID0gcmktPnN0YXJ0OwotCXdkX2N0ciA9IHJjLT5zdGFydDsKLQlyZXMgPSBtaXNjX3JlZ2lzdGVyKCZtaXNjZGV2KTsKLQlpZiAocmVzKQotCQlpb3VubWFwKHdkX3JlZ3MpOwotCWVsc2UKLQkJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfZ3BpX3NodXRkb3duKTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3ZHRfZ3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JaW50IHJlczsKLQotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfZ3BpX3NodXRkb3duKTsKLQlyZXMgPSBtaXNjX2RlcmVnaXN0ZXIoJm1pc2NkZXYpOwotCWlvdW5tYXAod2RfcmVncyk7Ci0Jd2RfcmVncyA9IE5VTEw7Ci0JcmV0dXJuIHJlczsKLX0KLQotCi0vKiBEZXZpY2UgZHJpdmVyIGluaXQgJiBleGl0ICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3Z3RfZ3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQkJPSB3ZHRfZ3BpX25hbWUsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQkJPSB3ZHRfZ3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2R0X2dwaV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9pbml0X21vZHVsZSh2b2lkKQotewotCWF0b21pY19zZXQoJm9wZW5jbnQsIDEpOwotCWlmICh0aW1lb3V0ID4gTUFYX1RJTUVPVVRfU0VDT05EUykKLQkJdGltZW91dCA9IE1BWF9USU1FT1VUX1NFQ09ORFM7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2dwaV9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHdkdF9ncGlfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQod2R0X2dwaV9jbGVhbnVwX21vZHVsZSk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJCYXNsZXIgZVhjaXRlIHdhdGNoZG9nIGRyaXZlciBmb3IgZ3BpIGRldmljZXMiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy90d2w0MDMwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy90d2w0MDMwX3dkdC5jCmluZGV4IGNiNDY1NTYuLjgxNjJhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdHdsNDAzMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3R3bDQwMzBfd2R0LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjZGVmaW5lIFRXTDQwMzBfV0FUQ0hET0dfQ0ZHX1JFR19PRkZTCTB4MwogCkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyBpbnQgdHdsNDAzMF93ZHRfd3JpdGUodW5zaWduZWQgY2hhciB2YWwpCiB7Ci0JcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCB2YWwsCisJcmV0dXJuIHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIHZhbCwKIAkJCQkJVFdMNDAzMF9XQVRDSERPR19DRkdfUkVHX09GRlMpOwogfQogCmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGMzMGRmYzAuLjFjZjEyYjMgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC03MTEsMTAgKzcxMSw4IEBACiAJICovCiAJcmV0ID0gcmV0cnkoaW9jYik7CiAKLQlpZiAocmV0ICE9IC1FSU9DQlJFVFJZICYmIHJldCAhPSAtRUlPQ0JRVUVVRUQpIHsKLQkJQlVHX09OKCFsaXN0X2VtcHR5KCZpb2NiLT5raV93YWl0LnRhc2tfbGlzdCkpOworCWlmIChyZXQgIT0gLUVJT0NCUkVUUlkgJiYgcmV0ICE9IC1FSU9DQlFVRVVFRCkKIAkJYWlvX2NvbXBsZXRlKGlvY2IsIHJldCwgMCk7Ci0JfQogb3V0OgogCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwogCkBAIC04NjYsMTMgKzg2NCw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcnVuID0gMDsKIAotCS8qIFdlJ3JlIHN1cHBvc2VkIHRvIGJlIHRoZSBvbmx5IHBhdGggcHV0dGluZyB0aGUgaW9jYiBiYWNrIG9uIHRoZSBydW4KLQkgKiBsaXN0LiAgSWYgd2UgZmluZCB0aGF0IHRoZSBpb2NiIGlzICpiYWNrKiBvbiBhIHdhaXQgcXVldWUgYWxyZWFkeQotCSAqIHRoYW4gcmV0cnkgaGFzIGhhcHBlbmVkIGJlZm9yZSB3ZSBjb3VsZCBxdWV1ZSB0aGUgaW9jYi4gIFRoaXMgYWxzbwotCSAqIG1lYW5zIHRoYXQgdGhlIHJldHJ5IGNvdWxkIGhhdmUgY29tcGxldGVkIGFuZCBmcmVlZCBvdXIgaW9jYiwgbm8KLQkgKiBnb29kLiAqLwotCUJVR19PTigoIWxpc3RfZW1wdHkoJmlvY2ItPmtpX3dhaXQudGFza19saXN0KSkpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+Y3R4X2xvY2ssIGZsYWdzKTsKIAkvKiBzZXQgdGhpcyBpbnNpZGUgdGhlIGxvY2sgc28gdGhhdCB3ZSBjYW4ndCByYWNlIHdpdGggYWlvX3J1bl9pb2NiKCkKIAkgKiB0ZXN0aW5nIGl0IGFuZCBwdXR0aW5nIHRoZSBpb2NiIG9uIHRoZSBydW4gbGlzdCB1bmRlciB0aGUgbG9jayAqLwpAQCAtODg2LDcgKzg3Nyw3IEBACiAvKgogICoga2lja19pb2NiOgogICogICAgICBDYWxsZWQgdHlwaWNhbGx5IGZyb20gYSB3YWl0IHF1ZXVlIGNhbGxiYWNrIGNvbnRleHQKLSAqICAgICAgKGFpb193YWtlX2Z1bmN0aW9uKSB0byB0cmlnZ2VyIGEgcmV0cnkgb2YgdGhlIGlvY2IuCisgKiAgICAgIHRvIHRyaWdnZXIgYSByZXRyeSBvZiB0aGUgaW9jYi4KICAqICAgICAgVGhlIHJldHJ5IGlzIHVzdWFsbHkgZXhlY3V0ZWQgYnkgYWlvIHdvcmtxdWV1ZQogICogICAgICB0aHJlYWRzIChTZWUgYWlvX2tpY2tfaGFuZGxlcikuCiAgKi8KQEAgLTE1MjAsMzEgKzE1MTEsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogYWlvX3dha2VfZnVuY3Rpb246Ci0gKiAJd2FpdCBxdWV1ZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWlvIG5vdGlmaWNhdGlvbiwKLSAqIAlTaW1wbHkgdHJpZ2dlcnMgYSByZXRyeSBvZiB0aGUgb3BlcmF0aW9uIHZpYSBraWNrX2lvY2IuCi0gKgotICogCVRoaXMgY2FsbGJhY2sgaXMgc3BlY2lmaWVkIGluIHRoZSB3YWl0IHF1ZXVlIGVudHJ5IGluCi0gKglhIGtpb2NiLgotICoKLSAqIE5vdGU6Ci0gKiBUaGlzIHJvdXRpbmUgaXMgZXhlY3V0ZWQgd2l0aCB0aGUgd2FpdCBxdWV1ZSBsb2NrIGhlbGQuCi0gKiBTaW5jZSBraWNrX2lvY2IgYWNxdWlyZXMgaW9jYi0+Y3R4LT5jdHhfbG9jaywgaXQgbmVzdHMKLSAqIHRoZSBpb2N0eCBsb2NrIGluc2lkZSB0aGUgd2FpdCBxdWV1ZSBsb2NrLiBUaGlzIGlzIHNhZmUKLSAqIGJlY2F1c2UgdGhpcyBjYWxsYmFjayBpc24ndCB1c2VkIGZvciB3YWl0IHF1ZXVlcyB3aGljaAotICogYXJlIG5lc3RlZCBpbnNpZGUgaW9jdHggbG9jayAoaS5lLiBjdHgtPndhaXQpCi0gKi8KLXN0YXRpYyBpbnQgYWlvX3dha2VfZnVuY3Rpb24od2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLAotCQkJICAgICBpbnQgc3luYywgdm9pZCAqa2V5KQotewotCXN0cnVjdCBraW9jYiAqaW9jYiA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3Qga2lvY2IsIGtpX3dhaXQpOwotCi0JbGlzdF9kZWxfaW5pdCgmd2FpdC0+dGFza19saXN0KTsKLQlraWNrX2lvY2IoaW9jYik7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIGFpb19iYXRjaF9hZGQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgIHN0cnVjdCBobGlzdF9oZWFkICpiYXRjaF9oYXNoKQogewpAQCAtMTY0Miw4ICsxNjA4LDYgQEAKIAlyZXEtPmtpX2J1ZiA9IChjaGFyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWlvY2ItPmFpb19idWY7CiAJcmVxLT5raV9sZWZ0ID0gcmVxLT5raV9uYnl0ZXMgPSBpb2NiLT5haW9fbmJ5dGVzOwogCXJlcS0+a2lfb3Bjb2RlID0gaW9jYi0+YWlvX2xpb19vcGNvZGU7Ci0JaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmcmVxLT5raV93YWl0LCBhaW9fd2FrZV9mdW5jdGlvbik7Ci0JSU5JVF9MSVNUX0hFQUQoJnJlcS0+a2lfd2FpdC50YXNrX2xpc3QpOwogCiAJcmV0ID0gYWlvX3NldHVwX2lvY2IocmVxKTsKIApkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKaW5kZXggMmNhN2E3Yy4uOWYwYmYxMyAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC0zNSwxNCArMzUsMTMgQEAKIAkJCSAgICAgbW50KTsKIH0KIAotc3RhdGljIGludCBhbm9uX2lub2RlZnNfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCisvKgorICogYW5vbl9pbm9kZWZzX2RuYW1lKCkgaXMgY2FsbGVkIGZyb20gZF9wYXRoKCkuCisgKi8KK3N0YXRpYyBjaGFyICphbm9uX2lub2RlZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCiB7Ci0JLyoKLQkgKiBXZSBmYWtlZCB2ZnMgdG8gYmVsaWV2ZSB0aGUgZGVudHJ5IHdhcyBoYXNoZWQgd2hlbiB3ZSBjcmVhdGVkIGl0LgotCSAqIE5vdyB3ZSByZXN0b3JlIHRoZSBmbGFnIHNvIHRoYXQgZHB1dCgpIHdpbGwgd29yayBjb3JyZWN0bHkuCi0JICovCi0JZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gZHluYW1pY19kbmFtZShkZW50cnksIGJ1ZmZlciwgYnVmbGVuLCAiYW5vbl9pbm9kZTolcyIsCisJCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBhbm9uX2lub2RlX2ZzX3R5cGUgPSB7CkBAIC01MSw3ICs1MCw3IEBACiAJLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Ci0JLmRfZGVsZXRlCT0gYW5vbl9pbm9kZWZzX2RlbGV0ZV9kZW50cnksCisJLmRfZG5hbWUJPSBhbm9uX2lub2RlZnNfZG5hbWUsCiB9OwogCiAvKgpAQCAtODgsNyArODcsNyBAQAogCQkJCXZvaWQgKnByaXYsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcXN0ciB0aGlzOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCWludCBlcnJvcjsKIApAQCAtMTA2LDEwICsxMDUsMTEgQEAKIAl0aGlzLm5hbWUgPSBuYW1lOwogCXRoaXMubGVuID0gc3RybGVuKG5hbWUpOwogCXRoaXMuaGFzaCA9IDA7Ci0JZGVudHJ5ID0gZF9hbGxvYyhhbm9uX2lub2RlX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKLQlpZiAoIWRlbnRyeSkKKwlwYXRoLmRlbnRyeSA9IGRfYWxsb2MoYW5vbl9pbm9kZV9tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CisJaWYgKCFwYXRoLmRlbnRyeSkKIAkJZ290byBlcnJfbW9kdWxlOwogCisJcGF0aC5tbnQgPSBtbnRnZXQoYW5vbl9pbm9kZV9tbnQpOwogCS8qCiAJICogV2Uga25vdyB0aGUgYW5vbl9pbm9kZSBpbm9kZSBjb3VudCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIHplcm8sCiAJICogc28gd2UgY2FuIGF2b2lkIGRvaW5nIGFuIGlncmFiKCkgYW5kIHdlIGNhbiB1c2UgYW4gb3Blbi1jb2RlZApAQCAtMTE3LDI3ICsxMTcsMjQgQEAKIAkgKi8KIAlhdG9taWNfaW5jKCZhbm9uX2lub2RlX2lub2RlLT5pX2NvdW50KTsKIAotCWRlbnRyeS0+ZF9vcCA9ICZhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnM7Ci0JLyogRG8gbm90IHB1Ymxpc2ggdGhpcyBkZW50cnkgaW5zaWRlIHRoZSBnbG9iYWwgZGVudHJ5IGhhc2ggdGFibGUgKi8KLQlkZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9VTkhBU0hFRDsKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgYW5vbl9pbm9kZV9pbm9kZSk7CisJcGF0aC5kZW50cnktPmRfb3AgPSAmYW5vbl9pbm9kZWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfaW5zdGFudGlhdGUocGF0aC5kZW50cnksIGFub25faW5vZGVfaW5vZGUpOwogCiAJZXJyb3IgPSAtRU5GSUxFOwotCWZpbGUgPSBhbGxvY19maWxlKGFub25faW5vZGVfbW50LCBkZW50cnksCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgZm9wcyk7CisJZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIE9QRU5fRk1PREUoZmxhZ3MpLCBmb3BzKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gZXJyX2RwdXQ7CiAJZmlsZS0+Zl9tYXBwaW5nID0gYW5vbl9pbm9kZV9pbm9kZS0+aV9tYXBwaW5nOwogCiAJZmlsZS0+Zl9wb3MgPSAwOwotCWZpbGUtPmZfZmxhZ3MgPSBPX1JEV1IgfCAoZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlmaWxlLT5mX2ZsYWdzID0gZmxhZ3MgJiAoT19BQ0NNT0RFIHwgT19OT05CTE9DSyk7CiAJZmlsZS0+Zl92ZXJzaW9uID0gMDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCiAJcmV0dXJuIGZpbGU7CiAKIGVycl9kcHV0OgotCWRwdXQoZGVudHJ5KTsKKwlwYXRoX3B1dCgmcGF0aCk7CiBlcnJfbW9kdWxlOgogCW1vZHVsZV9wdXQoZm9wcy0+b3duZXIpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCA4ZjdjZGRlLi4wMTE4ZDY3IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC02MCw2ICs2MCwxMSBAQAogCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCiB9IHdoaWxlICgwKQogCitzdHJ1Y3QgcmVoYXNoX2VudHJ5IHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKwogLyogVW5pZmllZCBpbmZvIHN0cnVjdHVyZS4gIFRoaXMgaXMgcG9pbnRlZCB0byBieSBib3RoIHRoZSBkZW50cnkgYW5kCiAgICBpbm9kZSBzdHJ1Y3R1cmVzLiAgRWFjaCBmaWxlIGluIHRoZSBmaWxlc3lzdGVtIGhhcyBhbiBpbnN0YW5jZSBvZiB0aGlzCiAgICBzdHJ1Y3R1cmUuICBJdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVudHJ5LCBzbyBkZW50cmllcyBhcmUgbmV2ZXIKQEAgLTc1LDYgKzgwLDkgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBleHBpcmVfY29tcGxldGU7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsKKwlpbnQgYWN0aXZlX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgcmVoYXNoX2xpc3Q7CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIGV4cGlyaW5nOwogCiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CkBAIC05NSw2ICsxMDMsOCBAQAogCiAjZGVmaW5lIEFVVE9GU19JTkZfRVhQSVJJTkcJKDE8PDApIC8qIGRlbnRyeSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBleHBpcmluZyAqLwogI2RlZmluZSBBVVRPRlNfSU5GX01PVU5UUE9JTlQJKDE8PDEpIC8qIG1vdW50cG9pbnQgc3RhdHVzIGZvciBkaXJlY3QgZXhwaXJlICovCisjZGVmaW5lIEFVVE9GU19JTkZfUEVORElORwkoMTw8MikgLyogZGVudHJ5IHBlbmRpbmcgbW91bnQgKi8KKyNkZWZpbmUgQVVUT0ZTX0lORl9SRUhBU0gJKDE8PDMpIC8qIGRlbnRyeSBpbiB0cmFuc2l0IHRvIC0+bG9va3VwKCkgKi8KIAogc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlIHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKQEAgLTE2MSw3ICsxNzEsNyBAQAogewogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5mID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CiAKLQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0FVVE9GU19QRU5ESU5HKQorCWlmIChpbmYtPmZsYWdzICYgQVVUT0ZTX0lORl9QRU5ESU5HKQogCQlyZXR1cm4gMTsKIAogCWlmIChpbmYtPmZsYWdzICYgQVVUT0ZTX0lORl9FWFBJUklORykKQEAgLTI2NCw1ICsyNzQsMzEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXV0b2ZzNF9hZGRfZXhwaXJpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCWlmIChpbm8pIHsKKwkJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmluby0+ZXhwaXJpbmcpKQorCQkJbGlzdF9hZGQoJmluby0+ZXhwaXJpbmcsICZzYmktPmV4cGlyaW5nX2xpc3QpOworCQlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF1dG9mczRfZGVsX2V4cGlyaW5nKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKKwlpZiAoaW5vKSB7CisJCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmaW5vLT5leHBpcmluZykpCisJCQlsaXN0X2RlbF9pbml0KCZpbm8tPmV4cGlyaW5nKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCX0KKwlyZXR1cm47Cit9CisKIHZvaWQgYXV0b2ZzNF9kZW50cnlfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHZvaWQgYXV0b2ZzNF9raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZXhwaXJlLmMgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCmluZGV4IDNkYTE4ZDQuLjc0YmM5YWEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZXhwaXJlLmMKKysrIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwpAQCAtMjcsNyArMjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIE5vIHBvaW50IGV4cGlyaW5nIGEgcGVuZGluZyBtb3VudCAqLwotCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkcpCisJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1BFTkRJTkcpCiAJCXJldHVybiAwOwogCiAJaWYgKCFkb19ub3cpIHsKQEAgLTI3OSw2ICsyNzksNyBAQAogCQkJcm9vdC0+ZF9tb3VudGVkLS07CiAJCX0KIAkJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX0VYUElSSU5HOworCQlhdXRvZnM0X2FkZF9leHBpcmluZyhyb290KTsKIAkJaW5pdF9jb21wbGV0aW9uKCZpbm8tPmV4cGlyZV9jb21wbGV0ZSk7CiAJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwogCQlyZXR1cm4gcm9vdDsKQEAgLTQwNiw2ICs0MDcsNyBAQAogCQlleHBpcmVkLCAoaW50KWV4cGlyZWQtPmRfbmFtZS5sZW4sIGV4cGlyZWQtPmRfbmFtZS5uYW1lKTsKIAlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZXhwaXJlZCk7CiAJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX0VYUElSSU5HOworCWF1dG9mczRfYWRkX2V4cGlyaW5nKGV4cGlyZWQpOwogCWluaXRfY29tcGxldGlvbigmaW5vLT5leHBpcmVfY29tcGxldGUpOwogCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwpAQCAtNDMzLDcgKzQzNSw3IEBACiAKIAkJRFBSSU5USygiZXhwaXJlIGRvbmUgc3RhdHVzPSVkIiwgc3RhdHVzKTsKIAotCQlpZiAoZF91bmhhc2hlZChkZW50cnkpKQorCQlpZiAoZF91bmhhc2hlZChkZW50cnkpICYmIElTX0RFQURESVIoZGVudHJ5LT5kX2lub2RlKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXJldHVybiBzdGF0dXM7CkBAIC00NzMsNiArNDc1LDcgQEAKIAlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CiAJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CiAJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9FWFBJUklORzsKKwlhdXRvZnM0X2RlbF9leHBpcmluZyhkZW50cnkpOwogCWNvbXBsZXRlX2FsbCgmaW5vLT5leHBpcmVfY29tcGxldGUpOwogCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwogCkBAIC01MDMsNiArNTA2LDcgQEAKIAkJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfTU9VTlRQT0lOVDsKIAkJfQogCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX0VYUElSSU5HOworCQlhdXRvZnM0X2RlbF9leHBpcmluZyhkZW50cnkpOwogCQljb21wbGV0ZV9hbGwoJmluby0+ZXhwaXJlX2NvbXBsZXRlKTsKIAkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiAJCWRwdXQoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCA2OWM4MTQyLi5kMGEzZGUyIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC00OSw2ICs0OSw4IEBACiAJCWluby0+ZGVudHJ5ID0gTlVMTDsKIAkJaW5vLT5zaXplID0gMDsKIAkJSU5JVF9MSVNUX0hFQUQoJmluby0+YWN0aXZlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmluby0+cmVoYXNoX2xpc3QpOworCQlpbm8tPmFjdGl2ZV9jb3VudCA9IDA7CiAJCUlOSVRfTElTVF9IRUFEKCZpbm8tPmV4cGlyaW5nKTsKIAkJYXRvbWljX3NldCgmaW5vLT5jb3VudCwgMCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCBiOTZhM2M1Li4zMGNjOWRkIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtNzIsNiArNzIsMTM5IEBACiAJLnJtZGlyCQk9IGF1dG9mczRfZGlyX3JtZGlyLAogfTsKIAorc3RhdGljIHZvaWQgYXV0b2ZzNF9hZGRfYWN0aXZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKKwlpZiAoaW5vKSB7CisJCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJCWlmICghaW5vLT5hY3RpdmVfY291bnQpIHsKKwkJCWlmIChsaXN0X2VtcHR5KCZpbm8tPmFjdGl2ZSkpCisJCQkJbGlzdF9hZGQoJmluby0+YWN0aXZlLCAmc2JpLT5hY3RpdmVfbGlzdCk7CisJCX0KKwkJaW5vLT5hY3RpdmVfY291bnQrKzsKKwkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGF1dG9mczRfZGVsX2FjdGl2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisJaWYgKGlubykgeworCQlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQlpbm8tPmFjdGl2ZV9jb3VudC0tOworCQlpZiAoIWluby0+YWN0aXZlX2NvdW50KSB7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmluby0+YWN0aXZlKSkKKwkJCQlsaXN0X2RlbF9pbml0KCZpbm8tPmFjdGl2ZSk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGF1dG9mczRfYWRkX3JlaGFzaF9lbnRyeShzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubywKKwkJCQkgICAgIHN0cnVjdCByZWhhc2hfZW50cnkgKmVudHJ5KQoreworCWVudHJ5LT50YXNrID0gY3VycmVudDsKKwlJTklUX0xJU1RfSEVBRCgmZW50cnktPmxpc3QpOworCWxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmluby0+cmVoYXNoX2xpc3QpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXV0b2ZzNF9yZW1vdmVfcmVoYXNoX2VudHJ5KHN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmaW5vLT5yZWhhc2hfbGlzdDsKKwlzdHJ1Y3QgcmVoYXNoX2VudHJ5ICplbnRyeTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBoZWFkLCBsaXN0KSB7CisJCWlmIChlbnRyeS0+dGFzayA9PSBjdXJyZW50KSB7CisJCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQkJa2ZyZWUoZW50cnkpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhdXRvZnM0X3JlbW92ZV9yZWhhc2hfZW50cnlzKHN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vKQoreworCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gaW5vLT5zYmk7CisJc3RydWN0IHJlaGFzaF9lbnRyeSAqZW50cnksICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisKKwlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwlpZiAoIShpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9SRUhBU0gpKSB7CisJCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCXJldHVybjsKKwl9CisJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9SRUhBU0g7CisJaGVhZCA9ICZpbm8tPnJlaGFzaF9saXN0OworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgaGVhZCwgbGlzdCkgeworCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQlrZnJlZShlbnRyeSk7CisJfQorCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwlkcHV0KGluby0+ZGVudHJ5KTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXV0b2ZzNF9yZXZhbGlkYXRlX2Ryb3Aoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgICBzdHJ1Y3QgcmVoYXNoX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKKwkvKgorCSAqIEFkZCB0byB0aGUgYWN0aXZlIGxpc3Qgc28gd2UgY2FuIHBpY2sgdGhpcyB1cCBpbgorCSAqIC0+bG9va3VwKCkuIEFsc28gYWRkIGFuIGVudHJ5IHRvIGEgcmVoYXNoIGxpc3Qgc28KKwkgKiB3ZSBrbm93IHdoZW4gdGhlcmUgYXJlIG5vIGRlbnRyeXMgaW4gZmxpZ2h0IHNvIHdlCisJICoga25vdyB3aGVuIHdlIGNhbiByZWhhc2ggdGhlIGRlbnRyeS4KKwkgKi8KKwlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZpbm8tPmFjdGl2ZSkpCisJCWxpc3RfYWRkKCZpbm8tPmFjdGl2ZSwgJnNiaS0+YWN0aXZlX2xpc3QpOworCWF1dG9mczRfYWRkX3JlaGFzaF9lbnRyeShpbm8sIGVudHJ5KTsKKwlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJaWYgKCEoaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfUkVIQVNIKSkgeworCQlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfUkVIQVNIOworCQlkZ2V0KGRlbnRyeSk7CisJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCQlfX2RfZHJvcChkZW50cnkpOworCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGF1dG9mczRfcmV2YWxpZGF0ZV9yZWhhc2goc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCWlmIChpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9SRUhBU0gpIHsKKwkJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwkJYXV0b2ZzNF9yZW1vdmVfcmVoYXNoX2VudHJ5KGlubyk7CisJCWlmIChsaXN0X2VtcHR5KCZpbm8tPnJlaGFzaF9saXN0KSkgeworCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9SRUhBU0g7CisJCQlkX3JlaGFzaChkZW50cnkpOworCQkJZHB1dChpbm8tPmRlbnRyeSk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXV0b2ZzNF9uZWVkX21vdW50KHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgcmVzID0gMDsKKwlpZiAoZmxhZ3MgJiAoVFJJR0dFUl9GTEFHUyB8IFRSSUdHRVJfSU5URU5UUykpCisJCXJlcyA9IDE7CisJcmV0dXJuIHJlczsKK30KKwogc3RhdGljIGludCBhdXRvZnM0X2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CkBAIC05Myw3ICsyMjYsNyBAQAogCSAqIGl0LgogCSAqLwogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCWlmICghZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgX19zaW1wbGVfZW1wdHkoZGVudHJ5KSkgeworCWlmICghZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgbGlzdF9lbXB0eSgmZGVudHJ5LT5kX3N1YmRpcnMpKSB7CiAJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KQEAgLTEwMyw3ICsyMzYsNyBAQAogCXJldHVybiBkY2FjaGVfZGlyX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgaW50IHRyeV90b19maWxsX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBmbGFncykKK3N0YXRpYyBpbnQgdHJ5X3RvX2ZpbGxfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRlbnRyeS0+ZF9zYik7CiAJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKQEAgLTExNiw1NSArMjQ5LDE3IEBACiAJICogV2FpdCBmb3IgYSBwZW5kaW5nIG1vdW50LCB0cmlnZ2VyaW5nIG9uZSBpZiB0aGVyZQogCSAqIGlzbid0IG9uZSBhbHJlYWR5CiAJICovCi0JaWYgKGRlbnRyeS0+ZF9pbm9kZSA9PSBOVUxMKSB7Ci0JCURQUklOVEsoIndhaXRpbmcgZm9yIG1vdW50IG5hbWU9JS4qcyIsCi0JCQkgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlEUFJJTlRLKCJ3YWl0aW5nIGZvciBtb3VudCBuYW1lPSUuKnMiLAorCQkgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAotCQlzdGF0dXMgPSBhdXRvZnM0X3dhaXQoc2JpLCBkZW50cnksIE5GWV9NT1VOVCk7CisJc3RhdHVzID0gYXV0b2ZzNF93YWl0KHNiaSwgZGVudHJ5LCBORllfTU9VTlQpOwogCi0JCURQUklOVEsoIm1vdW50IGRvbmUgc3RhdHVzPSVkIiwgc3RhdHVzKTsKKwlEUFJJTlRLKCJtb3VudCBkb25lIHN0YXR1cz0lZCIsIHN0YXR1cyk7CiAKLQkJLyogVHVybiB0aGlzIGludG8gYSByZWFsIG5lZ2F0aXZlIGRlbnRyeT8gKi8KLQkJaWYgKHN0YXR1cyA9PSAtRU5PRU5UKSB7Ci0JCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX0FVVE9GU19QRU5ESU5HOwotCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzKSB7Ci0JCQkvKiBSZXR1cm4gYSBuZWdhdGl2ZSBkZW50cnksIGJ1dCBsZWF2ZSBpdCAicGVuZGluZyIgKi8KLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQkvKiBUcmlnZ2VyIG1vdW50IGZvciBwYXRoIGNvbXBvbmVudCBvciBmb2xsb3cgbGluayAqLwotCX0gZWxzZSBpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0FVVE9GU19QRU5ESU5HIHx8Ci0JCQlmbGFncyAmIChUUklHR0VSX0ZMQUdTIHwgVFJJR0dFUl9JTlRFTlRTKSB8fAotCQkJY3VycmVudC0+bGlua19jb3VudCkgewotCQlEUFJJTlRLKCJ3YWl0aW5nIGZvciBtb3VudCBuYW1lPSUuKnMiLAotCQkJZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkvKiBVcGRhdGUgZXhwaXJ5IGNvdW50ZXIgKi8KKwlpbm8tPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAKLQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkc7Ci0JCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCXN0YXR1cyA9IGF1dG9mczRfd2FpdChzYmksIGRlbnRyeSwgTkZZX01PVU5UKTsKLQotCQlEUFJJTlRLKCJtb3VudCBkb25lIHN0YXR1cz0lZCIsIHN0YXR1cyk7Ci0KLQkJaWYgKHN0YXR1cykgewotCQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCQlkZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9BVVRPRlNfUEVORElORzsKLQkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSBleHBpcnkgY291bnRlciBhZnRlciBzdWNjZXNzZnVsIG1vdW50ICovCi0JaWYgKGlubykKLQkJaW5vLT5sYXN0X3VzZWQgPSBqaWZmaWVzOwotCi0Jc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JZGVudHJ5LT5kX2ZsYWdzICY9IH5EQ0FDSEVfQVVUT0ZTX1BFTkRJTkc7Ci0Jc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qIEZvciBhdXRvZnMgZGlyZWN0IG1vdW50cyB0aGUgZm9sbG93IGxpbmsgdHJpZ2dlcnMgdGhlIG1vdW50ICovCkBAIC0yMDIsMjcgKzI5NywzOSBAQAogCWF1dG9mczRfZXhwaXJlX3dhaXQoZGVudHJ5KTsKIAogCS8qIFdlIHRyaWdnZXIgYSBtb3VudCBmb3IgYWxtb3N0IGFsbCBmbGFncyAqLwotCWxvb2t1cF90eXBlID0gbmQtPmZsYWdzICYgKFRSSUdHRVJfRkxBR1MgfCBUUklHR0VSX0lOVEVOVFMpOwotCWlmICghKGxvb2t1cF90eXBlIHx8IGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9BVVRPRlNfUEVORElORykpCisJbG9va3VwX3R5cGUgPSBhdXRvZnM0X25lZWRfbW91bnQobmQtPmZsYWdzKTsKKwlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJaWYgKCEobG9va3VwX3R5cGUgfHwgaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfUEVORElORykpIHsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiAJCWdvdG8gZm9sbG93OworCX0KIAogCS8qCiAJICogSWYgdGhlIGRlbnRyeSBjb250YWlucyBkaXJlY3RvcmllcyB0aGVuIGl0IGlzIGFuIGF1dG9mcwogCSAqIG11bHRpLW1vdW50IHdpdGggbm8gcm9vdCBtb3VudCBvZmZzZXQuIFNvIGRvbid0IHRyeSB0bwogCSAqIG1vdW50IGl0IGFnYWluLgogCSAqLwotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkcgfHwKLQkgICAgKCFkX21vdW50cG9pbnQoZGVudHJ5KSAmJiBfX3NpbXBsZV9lbXB0eShkZW50cnkpKSkgeworCWlmIChpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9QRU5ESU5HIHx8CisJICAgICghZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgbGlzdF9lbXB0eSgmZGVudHJ5LT5kX3N1YmRpcnMpKSkgeworCQlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfUEVORElORzsKIAkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiAKLQkJc3RhdHVzID0gdHJ5X3RvX2ZpbGxfZGVudHJ5KGRlbnRyeSwgMCk7CisJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnkpOworCisJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9QRU5ESU5HOworCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBvdXRfZXJyb3I7CiAKIAkJZ290byBmb2xsb3c7CiAJfQogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiBmb2xsb3c6CiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBubyByb290IG1vdW50IGl0IG11c3QgYmUgYW4gYXV0b2ZzCkBAIC0yNTQsMTggKzM2MSw0NyBAQAogewogCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRpci0+aV9zYik7Ci0JaW50IG96X21vZGUgPSBhdXRvZnM0X296X21vZGUoc2JpKTsKKwlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCXN0cnVjdCByZWhhc2hfZW50cnkgKmVudHJ5OwogCWludCBmbGFncyA9IG5kID8gbmQtPmZsYWdzIDogMDsKLQlpbnQgc3RhdHVzID0gMTsKKwl1bnNpZ25lZCBpbnQgbXV0ZXhfYXF1aXJlZDsKIAotCS8qIFBlbmRpbmcgZGVudHJ5ICovCisJRFBSSU5USygibmFtZSA9ICUuKnMgb3pfbW9kZSA9ICVkIiwKKwkJZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lLCBvel9tb2RlKTsKKworCS8qIERhZW1vbiBuZXZlciBjYXVzZXMgYSBtb3VudCB0byB0cmlnZ2VyICovCisJaWYgKGF1dG9mczRfb3pfbW9kZShzYmkpKQorCQlyZXR1cm4gMTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlaGFzaF9lbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfYXF1aXJlZCA9IG11dGV4X3RyeWxvY2soJmRpci0+aV9tdXRleCk7CisKIAlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJLyogUGVuZGluZyBkZW50cnkgKi8KIAlpZiAoYXV0b2ZzNF9pc3BlbmRpbmcoZGVudHJ5KSkgewotCQkvKiBUaGUgZGFlbW9uIG5ldmVyIGNhdXNlcyBhIG1vdW50IHRvIHRyaWdnZXIgKi8KLQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCWludCBzdGF0dXM7CiAKLQkJaWYgKG96X21vZGUpCi0JCQlyZXR1cm4gMTsKKwkJLyoKKwkJICogV2UgY2FuIG9ubHkgdW5oYXNoIGFuZCBzZW5kIHRoaXMgdG8gLT5sb29rdXAoKSBpZgorCQkgKiB0aGUgZGlyZWN0b3J5IG11dGV4IGlzIGhlbGQgb3ZlciBkX3JldmFsaWRhdGUoKSBhbmQKKwkJICogLT5sb29rdXAoKS4gVGhpcyBwcmV2ZW50cyB0aGUgVkZTIGZyb20gaW5jb3JyZWN0bHkKKwkJICogc2VlaW5nIHRoZSBkZW50cnkgYXMgbm9uLWV4aXN0ZW50LgorCQkgKi8KKwkJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX1BFTkRJTkc7CisJCWlmICghbXV0ZXhfYXF1aXJlZCkgeworCQkJYXV0b2ZzNF9yZXZhbGlkYXRlX2Ryb3AoZGVudHJ5LCBlbnRyeSk7CisJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOworCQlrZnJlZShlbnRyeSk7CiAKIAkJLyoKIAkJICogSWYgdGhlIGRpcmVjdG9yeSBoYXMgZ29uZSBhd2F5IGR1ZSB0byBhbiBleHBpcmUKQEAgLTI3OSw0NiArNDE1LDgyIEBACiAJCSAqIEEgemVybyBzdGF0dXMgaXMgc3VjY2VzcyBvdGhlcndpc2Ugd2UgaGF2ZSBhCiAJCSAqIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAJCSAqLwotCQlzdGF0dXMgPSB0cnlfdG9fZmlsbF9kZW50cnkoZGVudHJ5LCBmbGFncyk7CisJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnkpOworCisJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9QRU5ESU5HOworCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwogCQlpZiAoc3RhdHVzID09IDApCiAJCQlyZXR1cm4gMTsKIAogCQlyZXR1cm4gc3RhdHVzOwogCX0KLQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKLQotCS8qIE5lZ2F0aXZlIGRlbnRyeS4uIGludmFsaWRhdGUgaWYgIm9sZCIgKi8KLQlpZiAoZGVudHJ5LT5kX2lub2RlID09IE5VTEwpCi0JCXJldHVybiAwOwogCiAJLyogQ2hlY2sgZm9yIGEgbm9uLW1vdW50cG9pbnQgZGlyZWN0b3J5IHdpdGggbm8gY29udGVudHMgKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYKLQkgICAgIWRfbW91bnRwb2ludChkZW50cnkpICYmIAotCSAgICBfX3NpbXBsZV9lbXB0eShkZW50cnkpKSB7CisJICAgICFkX21vdW50cG9pbnQoZGVudHJ5KSAmJiBsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpIHsKIAkJRFBSSU5USygiZGVudHJ5PSVwICUuKnMsIGVtcHR5ZGlyIiwKIAkJCSBkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAKLQkJLyogVGhlIGRhZW1vbiBuZXZlciBjYXVzZXMgYSBtb3VudCB0byB0cmlnZ2VyICovCi0JCWlmIChvel9tb2RlKQotCQkJcmV0dXJuIDE7CisJCWlmIChhdXRvZnM0X25lZWRfbW91bnQoZmxhZ3MpIHx8IGN1cnJlbnQtPmxpbmtfY291bnQpIHsKKwkJCWludCBzdGF0dXM7CiAKLQkJLyoKLQkJICogQSB6ZXJvIHN0YXR1cyBpcyBzdWNjZXNzIG90aGVyd2lzZSB3ZSBoYXZlIGEKLQkJICogbmVnYXRpdmUgZXJyb3IgY29kZS4KLQkJICovCi0JCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnksIGZsYWdzKTsKLQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJcmV0dXJuIDE7CisJCQkvKgorCQkJICogV2UgY2FuIG9ubHkgdW5oYXNoIGFuZCBzZW5kIHRoaXMgdG8gLT5sb29rdXAoKSBpZgorCQkJICogdGhlIGRpcmVjdG9yeSBtdXRleCBpcyBoZWxkIG92ZXIgZF9yZXZhbGlkYXRlKCkgYW5kCisJCQkgKiAtPmxvb2t1cCgpLiBUaGlzIHByZXZlbnRzIHRoZSBWRlMgZnJvbSBpbmNvcnJlY3RseQorCQkJICogc2VlaW5nIHRoZSBkZW50cnkgYXMgbm9uLWV4aXN0ZW50LgorCQkJICovCisJCQlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfUEVORElORzsKKwkJCWlmICghbXV0ZXhfYXF1aXJlZCkgeworCQkJCWF1dG9mczRfcmV2YWxpZGF0ZV9kcm9wKGRlbnRyeSwgZW50cnkpOworCQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisJCQlrZnJlZShlbnRyeSk7CiAKLQkJcmV0dXJuIHN0YXR1czsKKwkJCS8qCisJCQkgKiBBIHplcm8gc3RhdHVzIGlzIHN1Y2Nlc3Mgb3RoZXJ3aXNlIHdlIGhhdmUgYQorCQkJICogbmVnYXRpdmUgZXJyb3IgY29kZS4KKwkJCSAqLworCQkJc3RhdHVzID0gdHJ5X3RvX2ZpbGxfZGVudHJ5KGRlbnRyeSk7CisKKwkJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfUEVORElORzsKKwkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCisJCQlpZiAoc3RhdHVzID09IDApCisJCQkJcmV0dXJuIDE7CisKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKworCWlmIChtdXRleF9hcXVpcmVkKQorCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisKKwlrZnJlZShlbnRyeSk7CiAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgYXV0b2ZzNF9mcmVlX3JlaGFzaF9lbnRyeXMoc3RydWN0IGF1dG9mc19pbmZvICppbmYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZpbmYtPnJlaGFzaF9saXN0OworCXN0cnVjdCByZWhhc2hfZW50cnkgKmVudHJ5LCAqbmV4dDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGhlYWQsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KK30KKwogdm9pZCBhdXRvZnM0X2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlKQogewogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5mOwpAQCAtMzM3LDYgKzUwOSw4IEBACiAJCQkJbGlzdF9kZWwoJmluZi0+YWN0aXZlKTsKIAkJCWlmICghbGlzdF9lbXB0eSgmaW5mLT5leHBpcmluZykpCiAJCQkJbGlzdF9kZWwoJmluZi0+ZXhwaXJpbmcpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZpbmYtPnJlaGFzaF9saXN0KSkKKwkJCQlhdXRvZnM0X2ZyZWVfcmVoYXNoX2VudHJ5cyhpbmYpOwogCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCQl9CiAKQEAgLTM1OSwzNSArNTMzLDUyIEBACiAJLmRfcmVsZWFzZQk9IGF1dG9mczRfZGVudHJ5X3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9sb29rdXBfYWN0aXZlKHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKmF1dG9mczRfbG9va3VwX2FjdGl2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJc3RydWN0IHFzdHIgKm5hbWUgPSAmZGVudHJ5LT5kX25hbWU7CiAJdW5zaWduZWQgaW50IGxlbiA9IG5hbWUtPmxlbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtPmhhc2g7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqaGVhZDsKIAorcmVzdGFydDoKIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCWhlYWQgPSAmc2JpLT5hY3RpdmVfbGlzdDsKIAlsaXN0X2Zvcl9lYWNoKHAsIGhlYWQpIHsKIAkJc3RydWN0IGF1dG9mc19pbmZvICppbm87Ci0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwkJc3RydWN0IGRlbnRyeSAqYWN0aXZlOwogCQlzdHJ1Y3QgcXN0ciAqcXN0cjsKIAogCQlpbm8gPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBhdXRvZnNfaW5mbywgYWN0aXZlKTsKLQkJZGVudHJ5ID0gaW5vLT5kZW50cnk7CisJCWFjdGl2ZSA9IGluby0+ZGVudHJ5OwogCi0JCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCQlzcGluX2xvY2soJmFjdGl2ZS0+ZF9sb2NrKTsKIAogCQkvKiBBbHJlYWR5IGdvbmU/ICovCi0JCWlmIChhdG9taWNfcmVhZCgmZGVudHJ5LT5kX2NvdW50KSA9PSAwKQorCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZS0+ZF9jb3VudCkgPT0gMCkKIAkJCWdvdG8gbmV4dDsKIAotCQlxc3RyID0gJmRlbnRyeS0+ZF9uYW1lOwotCi0JCWlmIChkZW50cnktPmRfbmFtZS5oYXNoICE9IGhhc2gpCisJCWlmIChhY3RpdmUtPmRfaW5vZGUgJiYgSVNfREVBRERJUihhY3RpdmUtPmRfaW5vZGUpKSB7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmluby0+cmVoYXNoX2xpc3QpKSB7CisJCQkJZGdldChhY3RpdmUpOworCQkJCXNwaW5fdW5sb2NrKCZhY3RpdmUtPmRfbG9jayk7CisJCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQkJYXV0b2ZzNF9yZW1vdmVfcmVoYXNoX2VudHJ5cyhpbm8pOworCQkJCWRwdXQoYWN0aXZlKTsKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9CiAJCQlnb3RvIG5leHQ7Ci0JCWlmIChkZW50cnktPmRfcGFyZW50ICE9IHBhcmVudCkKKwkJfQorCisJCXFzdHIgPSAmYWN0aXZlLT5kX25hbWU7CisKKwkJaWYgKGFjdGl2ZS0+ZF9uYW1lLmhhc2ggIT0gaGFzaCkKKwkJCWdvdG8gbmV4dDsKKwkJaWYgKGFjdGl2ZS0+ZF9wYXJlbnQgIT0gcGFyZW50KQogCQkJZ290byBuZXh0OwogCiAJCWlmIChxc3RyLT5sZW4gIT0gbGVuKQpAQCAtMzk1LDE1ICs1ODYsMTMgQEAKIAkJaWYgKG1lbWNtcChxc3RyLT5uYW1lLCBzdHIsIGxlbikpCiAJCQlnb3RvIG5leHQ7CiAKLQkJaWYgKGRfdW5oYXNoZWQoZGVudHJ5KSkgewotCQkJZGdldChkZW50cnkpOwotCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCQlyZXR1cm4gZGVudHJ5OwotCQl9CisJCWRnZXQoYWN0aXZlKTsKKwkJc3Bpbl91bmxvY2soJmFjdGl2ZS0+ZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlyZXR1cm4gYWN0aXZlOwogbmV4dDoKLQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmFjdGl2ZS0+ZF9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CkBAIC00MTEsOCArNjAwLDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2xvb2t1cF9leHBpcmluZyhzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2xvb2t1cF9leHBpcmluZyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJc3RydWN0IHFzdHIgKm5hbWUgPSAmZGVudHJ5LT5kX25hbWU7CiAJdW5zaWduZWQgaW50IGxlbiA9IG5hbWUtPmxlbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtPmhhc2g7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKQEAgLTQyMywyMyArNjE1LDIzIEBACiAJaGVhZCA9ICZzYmktPmV4cGlyaW5nX2xpc3Q7CiAJbGlzdF9mb3JfZWFjaChwLCBoZWFkKSB7CiAJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOwotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJCXN0cnVjdCBkZW50cnkgKmV4cGlyaW5nOwogCQlzdHJ1Y3QgcXN0ciAqcXN0cjsKIAogCQlpbm8gPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBhdXRvZnNfaW5mbywgZXhwaXJpbmcpOwotCQlkZW50cnkgPSBpbm8tPmRlbnRyeTsKKwkJZXhwaXJpbmcgPSBpbm8tPmRlbnRyeTsKIAotCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZleHBpcmluZy0+ZF9sb2NrKTsKIAogCQkvKiBCYWQgbHVjaywgd2UndmUgYWxyZWFkeSBiZWVuIGRlbnRyeV9pcHV0ICovCi0JCWlmICghZGVudHJ5LT5kX2lub2RlKQorCQlpZiAoIWV4cGlyaW5nLT5kX2lub2RlKQogCQkJZ290byBuZXh0OwogCi0JCXFzdHIgPSAmZGVudHJ5LT5kX25hbWU7CisJCXFzdHIgPSAmZXhwaXJpbmctPmRfbmFtZTsKIAotCQlpZiAoZGVudHJ5LT5kX25hbWUuaGFzaCAhPSBoYXNoKQorCQlpZiAoZXhwaXJpbmctPmRfbmFtZS5oYXNoICE9IGhhc2gpCiAJCQlnb3RvIG5leHQ7Ci0JCWlmIChkZW50cnktPmRfcGFyZW50ICE9IHBhcmVudCkKKwkJaWYgKGV4cGlyaW5nLT5kX3BhcmVudCAhPSBwYXJlbnQpCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKHFzdHItPmxlbiAhPSBsZW4pCkBAIC00NDcsMTUgKzYzOSwxMyBAQAogCQlpZiAobWVtY21wKHFzdHItPm5hbWUsIHN0ciwgbGVuKSkKIAkJCWdvdG8gbmV4dDsKIAotCQlpZiAoZF91bmhhc2hlZChkZW50cnkpKSB7Ci0JCQlkZ2V0KGRlbnRyeSk7Ci0JCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJCXJldHVybiBkZW50cnk7Ci0JCX0KKwkJZGdldChleHBpcmluZyk7CisJCXNwaW5fdW5sb2NrKCZleHBpcmluZy0+ZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlyZXR1cm4gZXhwaXJpbmc7CiBuZXh0OgotCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCQlzcGluX3VubG9jaygmZXhwaXJpbmctPmRfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwpAQCAtNDYzLDEzICs2NTMsNTYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBhdXRvZnNfaW5mbyAqaW5pdF9uZXdfZGVudHJ5KHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvel9tb2RlKQoreworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOworCisJLyoKKwkgKiBNYXJrIHRoZSBkZW50cnkgaW5jb21wbGV0ZSBidXQgZG9uJ3QgaGFzaCBpdC4gV2UgZG8gdGhpcworCSAqIHRvIHNlcmlhbGl6ZSBvdXIgaW5vZGUgY3JlYXRpb24gb3BlcmF0aW9ucyAoc3ltbGluayBhbmQKKwkgKiBta2Rpcikgd2hpY2ggcHJldmVudHMgZGVhZGxvY2sgZHVyaW5nIHRoZSBjYWxsYmFjayB0bworCSAqIHRoZSBkYWVtb24uIFN1YnNlcXVlbnQgdXNlciBzcGFjZSBsb29rdXBzIGZvciB0aGUgc2FtZQorCSAqIGRlbnRyeSBhcmUgcGxhY2VkIG9uIHRoZSB3YWl0IHF1ZXVlIHdoaWxlIHRoZSBkYWVtb24KKwkgKiBpdHNlbGYgaXMgYWxsb3dlZCBwYXNzYWdlIHVucmVzdGljdGVkIHNvIHRoZSBjcmVhdGUKKwkgKiBvcGVyYXRpb24gaXRzZWxmIGNhbiB0aGVuIGhhc2ggdGhlIGRlbnRyeS4gRmluYWxseSwKKwkgKiB3ZSBjaGVjayBmb3IgdGhlIGhhc2hlZCBkZW50cnkgYW5kIHJldHVybiB0aGUgbmV3bHkKKwkgKiBoYXNoZWQgZGVudHJ5LgorCSAqLworCWRlbnRyeS0+ZF9vcCA9ICZhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnM7CisKKwkvKgorCSAqIEFuZCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lIGRlbnRyeSBpcyB1c2VkIGZvcgorCSAqIGFsbCBmb2xsb3dpbmcgbG9va3VwIGNhbGxzIHVudGlsIGl0IGlzIGhhc2hlZCBzbyB0aGF0CisJICogdGhlIGRlbnRyeSBmbGFncyBhcmUgcGVyc2lzdGVudCB0aHJvdWdob3V0IHRoZSByZXF1ZXN0LgorCSAqLworCWlubyA9IGF1dG9mczRfaW5pdF9pbm8oTlVMTCwgc2JpLCAwNTU1KTsKKwlpZiAoIWlubykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkZW50cnktPmRfZnNkYXRhID0gaW5vOworCWluby0+ZGVudHJ5ID0gZGVudHJ5OworCisJLyoKKwkgKiBPbmx5IHNldCB0aGUgbW91bnQgcGVuZGluZyBmbGFnIGZvciBuZXcgZGVudHJ5cyBub3QgY3JlYXRlZAorCSAqIGJ5IHRoZSBkYWVtb24uCisJICovCisJaWYgKCFvel9tb2RlKQorCQlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfUEVORElORzsKKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBOVUxMKTsKKworCXJldHVybiBpbm87Cit9CisKIC8qIExvb2t1cHMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5ICovCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CiAJc3RydWN0IGF1dG9mc19pbmZvICppbm87Ci0Jc3RydWN0IGRlbnRyeSAqZXhwaXJpbmcsICp1bmhhc2hlZDsKKwlzdHJ1Y3QgZGVudHJ5ICpleHBpcmluZywgKmFjdGl2ZTsKIAlpbnQgb3pfbW9kZTsKKwlpbnQgc3RhdHVzID0gMDsKIAogCURQUklOVEsoIm5hbWUgPSAlLipzIiwKIAkJZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKQEAgLTQ4NCwxMjIgKzcxNyw5OSBAQAogCURQUklOVEsoInBpZCA9ICV1LCBwZ3JwID0gJXUsIGNhdGF0b25pYyA9ICVkLCBvel9tb2RlID0gJWQiLAogCQkgY3VycmVudC0+cGlkLCB0YXNrX3BncnBfbnIoY3VycmVudCksIHNiaS0+Y2F0YXRvbmljLCBvel9tb2RlKTsKIAotCXVuaGFzaGVkID0gYXV0b2ZzNF9sb29rdXBfYWN0aXZlKHNiaSwgZGVudHJ5LT5kX3BhcmVudCwgJmRlbnRyeS0+ZF9uYW1lKTsKLQlpZiAodW5oYXNoZWQpCi0JCWRlbnRyeSA9IHVuaGFzaGVkOwotCWVsc2UgewotCQkvKgotCQkgKiBNYXJrIHRoZSBkZW50cnkgaW5jb21wbGV0ZSBidXQgZG9uJ3QgaGFzaCBpdC4gV2UgZG8gdGhpcwotCQkgKiB0byBzZXJpYWxpemUgb3VyIGlub2RlIGNyZWF0aW9uIG9wZXJhdGlvbnMgKHN5bWxpbmsgYW5kCi0JCSAqIG1rZGlyKSB3aGljaCBwcmV2ZW50cyBkZWFkbG9jayBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvCi0JCSAqIHRoZSBkYWVtb24uIFN1YnNlcXVlbnQgdXNlciBzcGFjZSBsb29rdXBzIGZvciB0aGUgc2FtZQotCQkgKiBkZW50cnkgYXJlIHBsYWNlZCBvbiB0aGUgd2FpdCBxdWV1ZSB3aGlsZSB0aGUgZGFlbW9uCi0JCSAqIGl0c2VsZiBpcyBhbGxvd2VkIHBhc3NhZ2UgdW5yZXN0aWN0ZWQgc28gdGhlIGNyZWF0ZQotCQkgKiBvcGVyYXRpb24gaXRzZWxmIGNhbiB0aGVuIGhhc2ggdGhlIGRlbnRyeS4gRmluYWxseSwKLQkJICogd2UgY2hlY2sgZm9yIHRoZSBoYXNoZWQgZGVudHJ5IGFuZCByZXR1cm4gdGhlIG5ld2x5Ci0JCSAqIGhhc2hlZCBkZW50cnkuCi0JCSAqLwotCQlkZW50cnktPmRfb3AgPSAmYXV0b2ZzNF9yb290X2RlbnRyeV9vcGVyYXRpb25zOwotCi0JCS8qCi0JCSAqIEFuZCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lIGRlbnRyeSBpcyB1c2VkIGZvcgotCQkgKiBhbGwgZm9sbG93aW5nIGxvb2t1cCBjYWxscyB1bnRpbCBpdCBpcyBoYXNoZWQgc28gdGhhdAotCQkgKiB0aGUgZGVudHJ5IGZsYWdzIGFyZSBwZXJzaXN0ZW50IHRocm91Z2hvdXQgdGhlIHJlcXVlc3QuCi0JCSAqLwotCQlpbm8gPSBhdXRvZnM0X2luaXRfaW5vKE5VTEwsIHNiaSwgMDU1NSk7Ci0JCWlmICghaW5vKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQkJZGVudHJ5LT5kX2ZzZGF0YSA9IGlubzsKLQkJaW5vLT5kZW50cnkgPSBkZW50cnk7Ci0KLQkJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJbGlzdF9hZGQoJmluby0+YWN0aXZlLCAmc2JpLT5hY3RpdmVfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgTlVMTCk7CisJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOworCWFjdGl2ZSA9IGF1dG9mczRfbG9va3VwX2FjdGl2ZShkZW50cnkpOworCWlmIChhY3RpdmUpIHsKKwkJZGVudHJ5ID0gYWN0aXZlOworCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKKwkJLyogSWYgdGhpcyBjYW1lIGZyb20gcmV2YWxpZGF0ZSwgcmVoYXNoIGl0ICovCisJCWF1dG9mczRfcmV2YWxpZGF0ZV9yZWhhc2goZGVudHJ5KTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCWlubyA9IGluaXRfbmV3X2RlbnRyeShzYmksIGRlbnRyeSwgb3pfbW9kZSk7CisJCWlmIChJU19FUlIoaW5vKSkKKwkJCXJldHVybiAoc3RydWN0IGRlbnRyeSAqKSBpbm87CiAJfQogCisJYXV0b2ZzNF9hZGRfYWN0aXZlKGRlbnRyeSk7CisKIAlpZiAoIW96X21vZGUpIHsKKwkJZXhwaXJpbmcgPSBhdXRvZnM0X2xvb2t1cF9leHBpcmluZyhkZW50cnkpOwogCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JCWV4cGlyaW5nID0gYXV0b2ZzNF9sb29rdXBfZXhwaXJpbmcoc2JpLAotCQkJCQkJICAgZGVudHJ5LT5kX3BhcmVudCwKLQkJCQkJCSAgICZkZW50cnktPmRfbmFtZSk7CiAJCWlmIChleHBpcmluZykgewogCQkJLyoKIAkJCSAqIElmIHdlIGFyZSByYWNpbmcgd2l0aCBleHBpcmUgdGhlIHJlcXVlc3QgbWlnaHQgbm90CiAJCQkgKiBiZSBxdWl0ZSBjb21wbGV0ZSBidXQgdGhlIGRpcmVjdG9yeSBoYXMgYmVlbiByZW1vdmVkCiAJCQkgKiBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsLCBzbyBqdXN0IHdhaXQgZm9yIGl0LgogCQkJICovCi0JCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZXhwaXJpbmcpOwogCQkJYXV0b2ZzNF9leHBpcmVfd2FpdChleHBpcmluZyk7Ci0JCQlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCQkJaWYgKCFsaXN0X2VtcHR5KCZpbm8tPmV4cGlyaW5nKSkKLQkJCQlsaXN0X2RlbF9pbml0KCZpbm8tPmV4cGlyaW5nKTsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKIAkJCWRwdXQoZXhwaXJpbmcpOwogCQl9Ci0KLQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkc7Ci0JCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpCi0JCQkoZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpKGRlbnRyeSwgbmQpOworCQlzdGF0dXMgPSB0cnlfdG9fZmlsbF9kZW50cnkoZGVudHJ5KTsKIAkJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKKwkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOworCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1BFTkRJTkc7CisJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwogCX0KIAorCWF1dG9mczRfZGVsX2FjdGl2ZShkZW50cnkpOworCiAJLyoKLQkgKiBJZiB3ZSBhcmUgc3RpbGwgcGVuZGluZywgY2hlY2sgaWYgd2UgaGFkIHRvIGhhbmRsZQorCSAqIElmIHdlIGhhZCBhIG1vdW50IGZhaWwsIGNoZWNrIGlmIHdlIGhhZCB0byBoYW5kbGUKIAkgKiBhIHNpZ25hbC4gSWYgc28gd2UgY2FuIGZvcmNlIGEgcmVzdGFydC4uCiAJICovCi0JaWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9BVVRPRlNfUEVORElORykgeworCWlmIChzdGF0dXMpIHsKIAkJLyogU2VlIGlmIHdlIHdlcmUgaW50ZXJydXB0ZWQgKi8KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlzaWdzZXRfdCAqc2lnc2V0ID0gJmN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsOwogCQkJaWYgKHNpZ2lzbWVtYmVyIChzaWdzZXQsIFNJR0tJTEwpIHx8CiAJCQkgICAgc2lnaXNtZW1iZXIgKHNpZ3NldCwgU0lHUVVJVCkgfHwKIAkJCSAgICBzaWdpc21lbWJlciAoc2lnc2V0LCBTSUdJTlQpKSB7Ci0JCQkgICAgaWYgKHVuaGFzaGVkKQotCQkJCWRwdXQodW5oYXNoZWQpOworCQkJICAgIGlmIChhY3RpdmUpCisJCQkJZHB1dChhY3RpdmUpOwogCQkJICAgIHJldHVybiBFUlJfUFRSKC1FUkVTVEFSVE5PSU5UUik7CiAJCQl9CiAJCX0KLQkJaWYgKCFvel9tb2RlKSB7Ci0JCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX0FVVE9GU19QRU5ESU5HOwotCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJfQogCX0KIAogCS8qCi0JICogSWYgdGhpcyBkZW50cnkgaXMgdW5oYXNoZWQsIHRoZW4gd2Ugc2hvdWxkbid0IGhvbm91ciB0aGlzCi0JICogbG9va3VwLiAgUmV0dXJuaW5nIEVOT0VOVCBoZXJlIGRvZXNuJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nCi0JICogZm9yIGFsbCBzeXN0ZW0gY2FsbHMsIGJ1dCBpdCBzaG91bGQgYmUgT0sgZm9yIHRoZSBvcGVyYXRpb25zCi0JICogd2UgcGVybWl0IGZyb20gYW4gYXV0b2ZzLgorCSAqIFVzZXIgc3BhY2UgY2FuIChhbmQgaGFzIGRvbmUgaW4gdGhlIHBhc3QpIHJlbW92ZSBhbmQgcmUtY3JlYXRlCisJICogdGhpcyBkaXJlY3RvcnkgZHVyaW5nIHRoZSBjYWxsYmFjay4gVGhpcyBjYW4gbGVhdmUgdXMgd2l0aCBhbgorCSAqIHVuaGFzaGVkIGRlbnRyeSwgYnV0IGEgc3VjY2Vzc2Z1bCBtb3VudCEgIFNvIHdlIG5lZWQgdG8KKwkgKiBwZXJmb3JtIGFub3RoZXIgY2FjaGVkIGxvb2t1cCBpbiBjYXNlIHRoZSBkZW50cnkgbm93IGV4aXN0cy4KIAkgKi8KLQlpZiAoIW96X21vZGUgJiYgZF91bmhhc2hlZChkZW50cnkpKSB7Ci0JCS8qCi0JCSAqIEEgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiBjYW4gKGFuZCBoYXMgZG9uZSBpbiB0aGUgcGFzdCkKLQkJICogcmVtb3ZlIGFuZCByZS1jcmVhdGUgdGhpcyBkaXJlY3RvcnkgZHVyaW5nIHRoZSBjYWxsYmFjay4KLQkJICogVGhpcyBjYW4gbGVhdmUgdXMgd2l0aCBhbiB1bmhhc2hlZCBkZW50cnksIGJ1dCBhCi0JCSAqIHN1Y2Nlc3NmdWwgbW91bnQhICBTbyB3ZSBuZWVkIHRvIHBlcmZvcm0gYW5vdGhlcgotCQkgKiBjYWNoZWQgbG9va3VwIGluIGNhc2UgdGhlIGRlbnRyeSBub3cgZXhpc3RzLgotCQkgKi8KLQkJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQkJc3RydWN0IGRlbnRyeSAqbmV3ID0gZF9sb29rdXAocGFyZW50LCAmZGVudHJ5LT5kX25hbWUpOwotCQlpZiAobmV3ICE9IE5VTEwpCi0JCQlkZW50cnkgPSBuZXc7Ci0JCWVsc2UKLQkJCWRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0KLQkJaWYgKHVuaGFzaGVkKQotCQkJZHB1dCh1bmhhc2hlZCk7Ci0KLQkJcmV0dXJuIGRlbnRyeTsKKwlpZiAoIW96X21vZGUgJiYgIWhhdmVfc3VibW91bnRzKGRlbnRyeSkpIHsKKwkJc3RydWN0IGRlbnRyeSAqbmV3OworCQluZXcgPSBkX2xvb2t1cChkZW50cnktPmRfcGFyZW50LCAmZGVudHJ5LT5kX25hbWUpOworCQlpZiAobmV3KSB7CisJCQlpZiAoYWN0aXZlKQorCQkJCWRwdXQoYWN0aXZlKTsKKwkJCXJldHVybiBuZXc7CisJCX0gZWxzZSB7CisJCQlpZiAoIXN0YXR1cykKKwkJCQlzdGF0dXMgPSAtRU5PRU5UOworCQl9CiAJfQogCi0JaWYgKHVuaGFzaGVkKQotCQlyZXR1cm4gdW5oYXNoZWQ7CisJLyoKKwkgKiBJZiB3ZSBoYWQgYSBtb3VudCBmYWlsdXJlLCByZXR1cm4gc3RhdHVzIHRvIHVzZXIgc3BhY2UuCisJICogSWYgdGhlIG1vdW50IHN1Y2NlZWRlZCBhbmQgd2UgdXNlZCBhIGRlbnRyeSBmcm9tIHRoZSBhY3RpdmUgcXVldWUKKwkgKiByZXR1cm4gaXQuCisJICovCisJaWYgKHN0YXR1cykgeworCQlkZW50cnkgPSBFUlJfUFRSKHN0YXR1cyk7CisJCWlmIChhY3RpdmUpCisJCQlkcHV0KGFjdGl2ZSk7CisJCXJldHVybiBkZW50cnk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVmFsaWQgc3VjY2Vzc2Z1bCBtb3VudCwgcmV0dXJuIGFjdGl2ZSBkZW50cnkgb3IgTlVMTAorCQkgKiBmb3IgYSBuZXcgZGVudHJ5LgorCQkgKi8KKwkJaWYgKGFjdGl2ZSkKKwkJCXJldHVybiBhY3RpdmU7CisJfQogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC02MjQsMTEgKzgzNCw2IEBACiAJaWYgKCFpbm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmluby0+YWN0aXZlKSkKLQkJbGlzdF9kZWxfaW5pdCgmaW5vLT5hY3RpdmUpOwotCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQogCWluby0+c2l6ZSA9IHN0cmxlbihzeW1uYW1lKTsKIAljcCA9IGttYWxsb2MoaW5vLT5zaXplICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcCkgewpAQCAtNzA1LDEwICs5MTAsNiBAQAogCWRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKIAogCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJmluby0+ZXhwaXJpbmcpKQotCQlsaXN0X2FkZCgmaW5vLT5leHBpcmluZywgJnNiaS0+ZXhwaXJpbmdfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCV9fZF9kcm9wKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKQEAgLTczNCwxMCArOTM1LDYgQEAKIAkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJcmV0dXJuIC1FTk9URU1QVFk7CiAJfQotCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJmluby0+ZXhwaXJpbmcpKQotCQlsaXN0X2FkZCgmaW5vLT5leHBpcmluZywgJnNiaS0+ZXhwaXJpbmdfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCV9fZF9kcm9wKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKQEAgLTc3NSwxMSArOTcyLDYgQEAKIAlpZiAoIWlubykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmaW5vLT5hY3RpdmUpKQotCQlsaXN0X2RlbF9pbml0KCZpbm8tPmFjdGl2ZSk7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCiAJaW5vZGUgPSBhdXRvZnM0X2dldF9pbm9kZShkaXItPmlfc2IsIGlubyk7CiAJaWYgKCFpbm9kZSkgewogCQlpZiAoIWRlbnRyeS0+ZF9mc2RhdGEpCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfYW91dC5jIGIvZnMvYmluZm10X2FvdXQuYwppbmRleCBiNjM5ZGNmLi4zNDZiNjk0IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfYW91dC5jCisrKyBiL2ZzL2JpbmZtdF9hb3V0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIGludCBsb2FkX2FvdXRfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIHN0YXRpYyBpbnQgbG9hZF9hb3V0X2xpYnJhcnkoc3RydWN0IGZpbGUqKTsKLXN0YXRpYyBpbnQgYW91dF9jb3JlX2R1bXAobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGxpbWl0KTsKK3N0YXRpYyBpbnQgYW91dF9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAKIHN0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IGFvdXRfZm9ybWF0ID0gewogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCkBAIC04OSw4ICs4OSw5IEBACiAgKiBkdW1waW5nIG9mIHRoZSBwcm9jZXNzIHJlc3VsdHMgaW4gYW5vdGhlciBlcnJvci4uCiAgKi8KIAotc3RhdGljIGludCBhb3V0X2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGltaXQpCitzdGF0aWMgaW50IGFvdXRfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiB7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBjcHJtLT5maWxlOwogCW1tX3NlZ21lbnRfdCBmczsKIAlpbnQgaGFzX2R1bXBlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBkdW1wX3N0YXJ0LCBkdW1wX3NpemU7CkBAIC0xMDgsMTYgKzEwOSwxNiBAQAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0RVTVBDT1JFOwogICAgICAgIAlzdHJuY3B5KGR1bXAudV9jb21tLCBjdXJyZW50LT5jb21tLCBzaXplb2YoZHVtcC51X2NvbW0pKTsKIAlkdW1wLnVfYXIwID0gb2Zmc2V0b2Yoc3RydWN0IHVzZXIsIHJlZ3MpOwotCWR1bXAuc2lnbmFsID0gc2lnbnI7Ci0JYW91dF9kdW1wX3RocmVhZChyZWdzLCAmZHVtcCk7CisJZHVtcC5zaWduYWwgPSBjcHJtLT5zaWducjsKKwlhb3V0X2R1bXBfdGhyZWFkKGNwcm0tPnJlZ3MsICZkdW1wKTsKIAogLyogSWYgdGhlIHNpemUgb2YgdGhlIGR1bXAgZmlsZSBleGNlZWRzIHRoZSBybGltaXQsIHRoZW4gc2VlIHdoYXQgd291bGQgaGFwcGVuCiAgICBpZiB3ZSB3cm90ZSB0aGUgc3RhY2ssIGJ1dCBub3QgdGhlIGRhdGEgYXJlYS4gICovCi0JaWYgKChkdW1wLnVfZHNpemUgKyBkdW1wLnVfc3NpemUrMSkgKiBQQUdFX1NJWkUgPiBsaW1pdCkKKwlpZiAoKGR1bXAudV9kc2l6ZSArIGR1bXAudV9zc2l6ZSsxKSAqIFBBR0VfU0laRSA+IGNwcm0tPmxpbWl0KQogCQlkdW1wLnVfZHNpemUgPSAwOwogCiAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byB3cml0ZSB0aGUgc3RhY2sgYW5kIGRhdGEgYXJlYXMuICovCi0JaWYgKChkdW1wLnVfc3NpemUgKyAxKSAqIFBBR0VfU0laRSA+IGxpbWl0KQorCWlmICgoZHVtcC51X3NzaXplICsgMSkgKiBQQUdFX1NJWkUgPiBjcHJtLT5saW1pdCkKIAkJZHVtcC51X3NzaXplID0gMDsKIAogLyogbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgYSBkYXRhIGFuZCBzdGFjayBhcmVhIHRvIGR1bXAgKi8KZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCBkMTVlYTE3Li5lZGQ5MGM0IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC00NCw4ICs0NCw4IEBACiAgKiBJZiB3ZSBkb24ndCBzdXBwb3J0IGNvcmUgZHVtcGluZywgdGhlbiBzdXBwbHkgYSBOVUxMIHNvIHdlCiAgKiBkb24ndCBldmVuIHRyeS4KICAqLwotI2lmIGRlZmluZWQoVVNFX0VMRl9DT1JFX0RVTVApICYmIGRlZmluZWQoQ09ORklHX0VMRl9DT1JFKQotc3RhdGljIGludCBlbGZfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCk7CisjaWZkZWYgQ09ORklHX0VMRl9DT1JFCitzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAjZWxzZQogI2RlZmluZSBlbGZfY29yZV9kdW1wCU5VTEwKICNlbmRpZgpAQCAtMTEwMSwxMiArMTEwMSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0vKgotICogTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIHN0aWxsIHVzZSB0cmFkaXRpb25hbCBjb3JlIGR1bXBzIGFuZCBub3QKLSAqIHRoZSBFTEYgY29yZSBkdW1wLiAgRWFjaCBwbGF0Zm9ybSBjYW4gc2VsZWN0IGl0IGFzIGFwcHJvcHJpYXRlLgotICovCi0jaWYgZGVmaW5lZChVU0VfRUxGX0NPUkVfRFVNUCkgJiYgZGVmaW5lZChDT05GSUdfRUxGX0NPUkUpCi0KKyNpZmRlZiBDT05GSUdfRUxGX0NPUkUKIC8qCiAgKiBFTEYgY29yZSBkdW1wZXIKICAqCkBAIC0xMjc3LDggKzEyNzIsOSBAQAogfQogI3VuZGVmIERVTVBfV1JJVEUKIAotI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQlcCi0JaWYgKChzaXplICs9IChucikpID4gbGltaXQgfHwgIWR1bXBfd3JpdGUoZmlsZSwgKGFkZHIpLCAobnIpKSkgXAorI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQkJCQlcCisJaWYgKChzaXplICs9IChucikpID4gY3BybS0+bGltaXQgfHwJCVwKKwkgICAgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgKGFkZHIpLCAobnIpKSkJXAogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogc3RhdGljIHZvaWQgZmlsbF9lbGZfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MsCkBAIC0xOTA2LDcgKzE5MDIsNyBAQAogICogYW5kIHRoZW4gdGhleSBhcmUgYWN0dWFsbHkgd3JpdHRlbiBvdXQuICBJZiB3ZSBydW4gb3V0IG9mIGNvcmUgbGltaXQKICAqIHdlIGp1c3QgdHJ1bmNhdGUuCiAgKi8KLXN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGltaXQpCitzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKIHsKIAlpbnQgaGFzX2R1bXBlZCA9IDA7CiAJbW1fc2VnbWVudF90IGZzOwpAQCAtMTk1Miw3ICsxOTQ4LDcgQEAKIAkgKiBub3Rlcy4gIFRoaXMgYWxzbyBzZXRzIHVwIHRoZSBmaWxlIGhlYWRlci4KIAkgKi8KIAlpZiAoIWZpbGxfbm90ZV9pbmZvKGVsZiwgc2VncyArIDEsIC8qIGluY2x1ZGluZyBub3RlcyBzZWN0aW9uICovCi0JCQkgICAgJmluZm8sIHNpZ25yLCByZWdzKSkKKwkJCSAgICAmaW5mbywgY3BybS0+c2lnbnIsIGNwcm0tPnJlZ3MpKQogCQlnb3RvIGNsZWFudXA7CiAKIAloYXNfZHVtcGVkID0gMTsKQEAgLTIwMTQsMTQgKzIwMTAsMTQgQEAKICNlbmRpZgogCiAgCS8qIHdyaXRlIG91dCB0aGUgbm90ZXMgc2VjdGlvbiAqLwotCWlmICghd3JpdGVfbm90ZV9pbmZvKCZpbmZvLCBmaWxlLCAmZm9mZnNldCkpCisJaWYgKCF3cml0ZV9ub3RlX2luZm8oJmluZm8sIGNwcm0tPmZpbGUsICZmb2Zmc2V0KSkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKLQlpZiAoZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGZpbGUsICZmb2Zmc2V0KSkKKwlpZiAoZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0tPmZpbGUsICZmb2Zmc2V0KSkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKIAkvKiBBbGlnbiB0byBwYWdlICovCi0JaWYgKCFkdW1wX3NlZWsoZmlsZSwgZGF0YW9mZiAtIGZvZmZzZXQpKQorCWlmICghZHVtcF9zZWVrKGNwcm0tPmZpbGUsIGRhdGFvZmYgLSBmb2Zmc2V0KSkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKIAlmb3IgKHZtYSA9IGZpcnN0X3ZtYShjdXJyZW50LCBnYXRlX3ZtYSk7IHZtYSAhPSBOVUxMOwpAQCAtMjAzOCwxMiArMjAzNCwxMyBAQAogCQkJcGFnZSA9IGdldF9kdW1wX3BhZ2UoYWRkcik7CiAJCQlpZiAocGFnZSkgewogCQkJCXZvaWQgKmthZGRyID0ga21hcChwYWdlKTsKLQkJCQlzdG9wID0gKChzaXplICs9IFBBR0VfU0laRSkgPiBsaW1pdCkgfHwKLQkJCQkJIWR1bXBfd3JpdGUoZmlsZSwga2FkZHIsIFBBR0VfU0laRSk7CisJCQkJc3RvcCA9ICgoc2l6ZSArPSBQQUdFX1NJWkUpID4gY3BybS0+bGltaXQpIHx8CisJCQkJCSFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIGthZGRyLAorCQkJCQkJICAgIFBBR0VfU0laRSk7CiAJCQkJa3VubWFwKHBhZ2UpOwogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCX0gZWxzZQotCQkJCXN0b3AgPSAhZHVtcF9zZWVrKGZpbGUsIFBBR0VfU0laRSk7CisJCQkJc3RvcCA9ICFkdW1wX3NlZWsoY3BybS0+ZmlsZSwgUEFHRV9TSVpFKTsKIAkJCWlmIChzdG9wKQogCQkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCQl9CkBAIC0yMDYzLDcgKzIwNjAsNyBAQAogCXJldHVybiBoYXNfZHVtcGVkOwogfQogCi0jZW5kaWYJCS8qIFVTRV9FTEZfQ09SRV9EVU1QICovCisjZW5kaWYJCS8qIENPTkZJR19FTEZfQ09SRSAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2VsZl9iaW5mbXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCAzODUwMmM2Li5jMjUyNTZhIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC03NSwxNCArNzUsMTQgQEAKIHN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2J5X2RpcmVjdF9tbWFwKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICosCiAJCQkJCSAgICAgc3RydWN0IGZpbGUgKiwgc3RydWN0IG1tX3N0cnVjdCAqKTsKIAotI2lmIGRlZmluZWQoVVNFX0VMRl9DT1JFX0RVTVApICYmIGRlZmluZWQoQ09ORklHX0VMRl9DT1JFKQotc3RhdGljIGludCBlbGZfZmRwaWNfY29yZV9kdW1wKGxvbmcsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcgbGltaXQpOworI2lmZGVmIENPTkZJR19FTEZfQ09SRQorc3RhdGljIGludCBlbGZfZmRwaWNfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IGVsZl9mZHBpY19mb3JtYXQgPSB7CiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKIAkubG9hZF9iaW5hcnkJPSBsb2FkX2VsZl9mZHBpY19iaW5hcnksCi0jaWYgZGVmaW5lZChVU0VfRUxGX0NPUkVfRFVNUCkgJiYgZGVmaW5lZChDT05GSUdfRUxGX0NPUkUpCisjaWZkZWYgQ09ORklHX0VMRl9DT1JFCiAJLmNvcmVfZHVtcAk9IGVsZl9mZHBpY19jb3JlX2R1bXAsCiAjZW5kaWYKIAkubWluX2NvcmVkdW1wCT0gRUxGX0VYRUNfUEFHRVNJWkUsCkBAIC0zODAsNyArMzgwLDggQEAKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWN1cnJlbnQtPm1tLT5zdGFydF9icmsgPSBkb19tbWFwKE5VTEwsIDAsIHN0YWNrX3NpemUsCiAJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAotCQkJCQkgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0dST1dTRE9XTiwKKwkJCQkJIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8CisJCQkJCSBNQVBfVU5JTklUSUFMSVpFRCB8IE1BUF9HUk9XU0RPV04sCiAJCQkJCSAwKTsKIAogCWlmIChJU19FUlJfVkFMVUUoY3VycmVudC0+bW0tPnN0YXJ0X2JyaykpIHsKQEAgLTEyMDAsNyArMTIwMSw3IEBACiAgKgogICogTW9kZWxsZWQgb24gZnMvYmluZm10X2VsZi5jIGNvcmUgZHVtcGVyCiAgKi8KLSNpZiBkZWZpbmVkKFVTRV9FTEZfQ09SRV9EVU1QKSAmJiBkZWZpbmVkKENPTkZJR19FTEZfQ09SRSkKKyNpZmRlZiBDT05GSUdfRUxGX0NPUkUKIAogLyoKICAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKQEAgLTEzMjUsOCArMTMyNiw5IEBACiAjdW5kZWYgRFVNUF9XUklURQogI3VuZGVmIERVTVBfU0VFSwogCi0jZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCVwKLQlpZiAoKHNpemUgKz0gKG5yKSkgPiBsaW1pdCB8fCAhZHVtcF93cml0ZShmaWxlLCAoYWRkciksIChucikpKSBcCisjZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCQkJCVwKKwlpZiAoKHNpemUgKz0gKG5yKSkgPiBjcHJtLT5saW1pdCB8fAkJXAorCSAgICAhZHVtcF93cml0ZShjcHJtLT5maWxlLCAoYWRkciksIChucikpKQlcCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9lbGZfZmRwaWNfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MpCkBAIC0xNTgxLDggKzE1ODMsNyBAQAogICogYW5kIHRoZW4gdGhleSBhcmUgYWN0dWFsbHkgd3JpdHRlbiBvdXQuICBJZiB3ZSBydW4gb3V0IG9mIGNvcmUgbGltaXQKICAqIHdlIGp1c3QgdHJ1bmNhdGUuCiAgKi8KLXN0YXRpYyBpbnQgZWxmX2ZkcGljX2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3N0YXRpYyBpbnQgZWxmX2ZkcGljX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQogewogI2RlZmluZQlOVU1fTk9URVMJNgogCWludCBoYXNfZHVtcGVkID0gMDsKQEAgLTE2NDEsNyArMTY0Miw3IEBACiAJCWdvdG8gY2xlYW51cDsKICNlbmRpZgogCi0JaWYgKHNpZ25yKSB7CisJaWYgKGNwcm0tPnNpZ25yKSB7CiAJCXN0cnVjdCBjb3JlX3RocmVhZCAqY3Q7CiAJCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdG1wOwogCkBAIC0xNjYwLDE0ICsxNjYxLDE0IEBACiAJCQlpbnQgc3o7CiAKIAkJCXRtcCA9IGxpc3RfZW50cnkodCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0KTsKLQkJCXN6ID0gZWxmX2R1bXBfdGhyZWFkX3N0YXR1cyhzaWduciwgdG1wKTsKKwkJCXN6ID0gZWxmX2R1bXBfdGhyZWFkX3N0YXR1cyhjcHJtLT5zaWduciwgdG1wKTsKIAkJCXRocmVhZF9zdGF0dXNfc2l6ZSArPSBzejsKIAkJfQogCX0KIAogCS8qIG5vdyBjb2xsZWN0IHRoZSBkdW1wIGZvciB0aGUgY3VycmVudCAqLwotCWZpbGxfcHJzdGF0dXMocHJzdGF0dXMsIGN1cnJlbnQsIHNpZ25yKTsKLQllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLT5wcl9yZWcsIHJlZ3MpOworCWZpbGxfcHJzdGF0dXMocHJzdGF0dXMsIGN1cnJlbnQsIGNwcm0tPnNpZ25yKTsKKwllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLT5wcl9yZWcsIGNwcm0tPnJlZ3MpOwogCiAJc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBfY291bnQ7CiAjaWZkZWYgRUxGX0NPUkVfRVhUUkFfUEhEUlMKQEAgLTE3MDIsNyArMTcwMyw3IEBACiAKICAgCS8qIFRyeSB0byBkdW1wIHRoZSBGUFUuICovCiAJaWYgKChwcnN0YXR1cy0+cHJfZnB2YWxpZCA9Ci0JICAgICBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKGN1cnJlbnQsIHJlZ3MsIGZwdSkpKQorCSAgICAgZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhjdXJyZW50LCBjcHJtLT5yZWdzLCBmcHUpKSkKIAkJZmlsbF9ub3RlKG5vdGVzICsgbnVtbm90ZSsrLAogCQkJICAiQ09SRSIsIE5UX1BSRlBSRUcsIHNpemVvZigqZnB1KSwgZnB1KTsKICNpZmRlZiBFTEZfQ09SRV9DT1BZX1hGUFJFR1MKQEAgLTE3NzMsNyArMTc3NCw3IEBACiAKICAJLyogd3JpdGUgb3V0IHRoZSBub3RlcyBzZWN0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKLQkJaWYgKCF3cml0ZW5vdGUobm90ZXMgKyBpLCBmaWxlKSkKKwkJaWYgKCF3cml0ZW5vdGUobm90ZXMgKyBpLCBjcHJtLT5maWxlKSkKIAkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJLyogd3JpdGUgb3V0IHRoZSB0aHJlYWQgc3RhdHVzIG5vdGVzIHNlY3Rpb24gKi8KQEAgLTE3ODIsMTQgKzE3ODMsMTUgQEAKIAkJCQlsaXN0X2VudHJ5KHQsIHN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cywgbGlzdCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHRtcC0+bnVtX25vdGVzOyBpKyspCi0JCQlpZiAoIXdyaXRlbm90ZSgmdG1wLT5ub3Rlc1tpXSwgZmlsZSkpCisJCQlpZiAoIXdyaXRlbm90ZSgmdG1wLT5ub3Rlc1tpXSwgY3BybS0+ZmlsZSkpCiAJCQkJZ290byBlbmRfY29yZWR1bXA7CiAJfQogCi0JaWYgKCFkdW1wX3NlZWsoZmlsZSwgZGF0YW9mZikpCisJaWYgKCFkdW1wX3NlZWsoY3BybS0+ZmlsZSwgZGF0YW9mZikpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCi0JaWYgKGVsZl9mZHBpY19kdW1wX3NlZ21lbnRzKGZpbGUsICZzaXplLCAmbGltaXQsIG1tX2ZsYWdzKSA8IDApCisJaWYgKGVsZl9mZHBpY19kdW1wX3NlZ21lbnRzKGNwcm0tPmZpbGUsICZzaXplLCAmY3BybS0+bGltaXQsCisJCQkJICAgIG1tX2ZsYWdzKSA8IDApCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAjaWZkZWYgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQpAQCAtMTgyNSw0ICsxODI3LDQgQEAKICN1bmRlZiBOVU1fTk9URVMKIH0KIAotI2VuZGlmCQkvKiBVU0VfRUxGX0NPUkVfRFVNUCAqLworI2VuZGlmCQkvKiBDT05GSUdfRUxGX0NPUkUgKi8KZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9mbGF0LmMgYi9mcy9iaW5mbXRfZmxhdC5jCmluZGV4IGEyNzk2NjUuLmQ0YTAwZWEgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9mbGF0LmMKKysrIGIvZnMvYmluZm10X2ZsYXQuYwpAQCAtODcsNyArODcsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCBwdF9yZWdzICogcmVncyk7Ci1zdGF0aWMgaW50IGZsYXRfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCk7CitzdGF0aWMgaW50IGZsYXRfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogCiBzdGF0aWMgc3RydWN0IGxpbnV4X2JpbmZtdCBmbGF0X2Zvcm1hdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLApAQCAtMTAyLDEwICsxMDIsMTAgQEAKICAqIEN1cnJlbnRseSBvbmx5IGEgc3R1Yi1mdW5jdGlvbi4KICAqLwogCi1zdGF0aWMgaW50IGZsYXRfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3N0YXRpYyBpbnQgZmxhdF9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKIHsKIAlwcmludGsoIlByb2Nlc3MgJXM6JWQgcmVjZWl2ZWQgc2lnbnIgJWQgYW5kIHNob3VsZCBoYXZlIGNvcmUgZHVtcGVkXG4iLAotCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAoaW50KSBzaWducik7CisJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIChpbnQpIGNwcm0tPnNpZ25yKTsKIAlyZXR1cm4oMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9zb20uYyBiL2ZzL2JpbmZtdF9zb20uYwppbmRleCBlZmY3NGI5Li4yYTliNTMzIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfc29tLmMKKysrIGIvZnMvYmluZm10X3NvbS5jCkBAIC00Myw3ICs0Myw3IEBACiAgKiBkb24ndCBldmVuIHRyeS4KICAqLwogI2lmIDAKLXN0YXRpYyBpbnQgc29tX2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBsaW1pdCk7CitzdGF0aWMgaW50IHNvbV9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAjZWxzZQogI2RlZmluZSBzb21fY29yZV9kdW1wCU5VTEwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYWNsLmMgYi9mcy9idHJmcy9hY2wuYwppbmRleCAzNjE2MDQyLi4yZTllNjk5IDEwMDY0NAotLS0gYS9mcy9idHJmcy9hY2wuYworKysgYi9mcy9idHJmcy9hY2wuYwpAQCAtNzMsMTMgKzczLDEzIEBACiAJcmV0dXJuIGFjbDsKIH0KIAotc3RhdGljIGludCBidHJmc194YXR0cl9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAotCQkJICAgICAgIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgYnRyZnNfeGF0dHJfYWNsX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCXZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByZXQgPSAwOwogCi0JYWNsID0gYnRyZnNfZ2V0X2FjbChpbm9kZSwgdHlwZSk7CisJYWNsID0gYnRyZnNfZ2V0X2FjbChkZW50cnktPmRfaW5vZGUsIHR5cGUpOwogCiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwpAQCAtOTQsNyArOTQsOCBAQAogLyoKICAqIE5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIGZzX211dGV4IGhlbGQKICAqLwotc3RhdGljIGludCBidHJmc19zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpCitzdGF0aWMgaW50IGJ0cmZzX3NldF9hY2woc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSkKIHsKIAlpbnQgcmV0LCBzaXplID0gMDsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMTQwLDggKzE0MSw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBfX2J0cmZzX3NldHhhdHRyKGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgMCk7Ci0KKwlyZXQgPSBfX2J0cmZzX3NldHhhdHRyKHRyYW5zLCBpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIDApOwogb3V0OgogCWtmcmVlKHZhbHVlKTsKIApAQCAtMTUxLDEwICsxNTEsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGJ0cmZzX3hhdHRyX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCi0JCQkgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBidHJmc194YXR0cl9hY2xfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKIAogCWlmICh2YWx1ZSkgewpAQCAtMTY3LDM4ICsxNjcsMTMgQEAKIAkJfQogCX0KIAotCXJldCA9IGJ0cmZzX3NldF9hY2woaW5vZGUsIGFjbCwgdHlwZSk7CisJcmV0ID0gYnRyZnNfc2V0X2FjbChOVUxMLCBkZW50cnktPmRfaW5vZGUsIGFjbCwgdHlwZSk7CiAKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgaW50IGJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3NfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICAgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQotewotCXJldHVybiBidHJmc194YXR0cl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIHZhbHVlLCBzaXplKTsKLX0KLQotc3RhdGljIGludCBidHJmc194YXR0cl9hY2xfYWNjZXNzX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQotewotCXJldHVybiBidHJmc194YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIHZhbHVlLCBzaXplKTsKLX0KLQotc3RhdGljIGludCBidHJmc194YXR0cl9hY2xfZGVmYXVsdF9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgICAgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQotewotCXJldHVybiBidHJmc194YXR0cl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCB2YWx1ZSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYnRyZnNfeGF0dHJfYWNsX2RlZmF1bHRfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIGJ0cmZzX3hhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLCBzaXplKTsKLX0KLQogaW50IGJ0cmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CkBAIC0yMjEsNyArMTk2LDggQEAKICAqIHN0dWZmIGhhcyBiZWVuIGZpeGVkIHRvIHdvcmsgd2l0aCB0aGF0LiAgSWYgdGhlIGxvY2tpbmcgc3R1ZmYgY2hhbmdlcywgd2UKICAqIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhlIGFjbCBsb2NraW5nIHN0dWZmLgogICovCi1pbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCitpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CiAJaW50IHJldCA9IDA7CkBAIC0yNDYsNyArMjIyLDggQEAKIAkJbW9kZV90IG1vZGU7CiAKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCXJldCA9IGJ0cmZzX3NldF9hY2woaW5vZGUsIGFjbCwgQUNMX1RZUEVfREVGQVVMVCk7CisJCQlyZXQgPSBidHJmc19zZXRfYWNsKHRyYW5zLCBpbm9kZSwgYWNsLAorCQkJCQkgICAgQUNMX1RZUEVfREVGQVVMVCk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CkBAIC0yNjEsNyArMjM4LDcgQEAKIAkJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQkJaWYgKHJldCA+IDApIHsKIAkJCQkvKiB3ZSBuZWVkIGFuIGFjbCAqLwotCQkJCXJldCA9IGJ0cmZzX3NldF9hY2woaW5vZGUsIGNsb25lLAorCQkJCXJldCA9IGJ0cmZzX3NldF9hY2wodHJhbnMsIGlub2RlLCBjbG9uZSwKIAkJCQkJCSAgICBBQ0xfVFlQRV9BQ0NFU1MpOwogCQkJfQogCQl9CkBAIC0yOTQsNyArMjcxLDcgQEAKIAogCXJldCA9IHBvc2l4X2FjbF9jaG1vZF9tYXNxKGNsb25lLCBpbm9kZS0+aV9tb2RlKTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gYnRyZnNfc2V0X2FjbChpbm9kZSwgY2xvbmUsIEFDTF9UWVBFX0FDQ0VTUyk7CisJCXJldCA9IGJ0cmZzX3NldF9hY2woTlVMTCwgaW5vZGUsIGNsb25lLCBBQ0xfVFlQRV9BQ0NFU1MpOwogCiAJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOwogCkBAIC0zMDMsMTQgKzI4MCwxNiBAQAogCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBidHJmc194YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyID0gewogCS5wcmVmaXggPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKLQkuZ2V0CT0gYnRyZnNfeGF0dHJfYWNsX2RlZmF1bHRfZ2V0LAotCS5zZXQJPSBidHJmc194YXR0cl9hY2xfZGVmYXVsdF9zZXQsCisJLmZsYWdzCT0gQUNMX1RZUEVfREVGQVVMVCwKKwkuZ2V0CT0gYnRyZnNfeGF0dHJfYWNsX2dldCwKKwkuc2V0CT0gYnRyZnNfeGF0dHJfYWNsX3NldCwKIH07CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKLQkuZ2V0CT0gYnRyZnNfeGF0dHJfYWNsX2FjY2Vzc19nZXQsCi0JLnNldAk9IGJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3Nfc2V0LAorCS5mbGFncwk9IEFDTF9UWVBFX0FDQ0VTUywKKwkuZ2V0CT0gYnRyZnNfeGF0dHJfYWNsX2dldCwKKwkuc2V0CT0gYnRyZnNfeGF0dHJfYWNsX3NldCwKIH07CiAKICNlbHNlIC8qIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgKi8KQEAgLTMyMCw3ICsyOTksOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCitpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaCBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKaW5kZXggZjY3ODNhNC4uM2YxZjUwZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAorKysgYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCkBAIC00NCw5ICs0NCw2IEBACiAJICovCiAJc3RydWN0IGV4dGVudF9pb190cmVlIGlvX2ZhaWx1cmVfdHJlZTsKIAotCS8qIGhlbGQgd2hpbGUgaW5lc3J0aW5nIG9yIGRlbGV0aW5nIGV4dGVudHMgZnJvbSBmaWxlcyAqLwotCXN0cnVjdCBtdXRleCBleHRlbnRfbXV0ZXg7Ci0KIAkvKiBoZWxkIHdoaWxlIGxvZ2dpbmcgdGhlIGlub2RlIGluIHRyZWUtbG9nLmMgKi8KIAlzdHJ1Y3QgbXV0ZXggbG9nX211dGV4OwogCkBAIC0xNjYsNyArMTYzLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGJ0cmZzX2lfc2l6ZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc2l6ZSkKIHsKLQlpbm9kZS0+aV9zaXplID0gc2l6ZTsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIHNpemUpOwogCUJUUkZTX0koaW5vZGUpLT5kaXNrX2lfc2l6ZSA9IHNpemU7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmMgYi9mcy9idHJmcy9jdHJlZS5jCmluZGV4IGVjOTZmM2EuLmM0YmM1NzAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtMzcsNiArMzcsMTEgQEAKIAkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpzcmNfYnVmKTsKIHN0YXRpYyBpbnQgZGVsX3B0cihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCSAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgbGV2ZWwsIGludCBzbG90KTsKK3N0YXRpYyBpbnQgc2V0dXBfaXRlbXNfZm9yX2luc2VydChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCXN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCXN0cnVjdCBidHJmc19rZXkgKmNwdV9rZXksIHUzMiAqZGF0YV9zaXplLAorCQkJdTMyIHRvdGFsX2RhdGEsIHUzMiB0b3RhbF9zaXplLCBpbnQgbnIpOworCiAKIHN0cnVjdCBidHJmc19wYXRoICpidHJmc19hbGxvY19wYXRoKHZvaWQpCiB7CkBAIC00NTEsOSArNDU2LDggQEAKIAkJZXh0ZW50X2J1ZmZlcl9nZXQoY293KTsKIAkJc3Bpbl91bmxvY2soJnJvb3QtPm5vZGVfbG9jayk7CiAKLQkJYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ1Zi0+c3RhcnQsIGJ1Zi0+bGVuLAotCQkJCSAgcGFyZW50X3N0YXJ0LCByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkgIGxldmVsLCAwKTsKKwkJYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHRyYW5zLCByb290LCBidWYtPnN0YXJ0LCBidWYtPmxlbiwKKwkJCQlwYXJlbnRfc3RhcnQsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLCBsZXZlbCk7CiAJCWZyZWVfZXh0ZW50X2J1ZmZlcihidWYpOwogCQlhZGRfcm9vdF90b19kaXJ0eV9saXN0KHJvb3QpOwogCX0gZWxzZSB7CkBAIC00NjgsOSArNDcyLDggQEAKIAkJYnRyZnNfc2V0X25vZGVfcHRyX2dlbmVyYXRpb24ocGFyZW50LCBwYXJlbnRfc2xvdCwKIAkJCQkJICAgICAgdHJhbnMtPnRyYW5zaWQpOwogCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXJlbnQpOwotCQlidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnVmLT5zdGFydCwgYnVmLT5sZW4sCi0JCQkJICBwYXJlbnRfc3RhcnQsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCSAgbGV2ZWwsIDApOworCQlidHJmc19mcmVlX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsIGJ1Zi0+c3RhcnQsIGJ1Zi0+bGVuLAorCQkJCXBhcmVudF9zdGFydCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsKTsKIAl9CiAJaWYgKHVubG9ja19vcmlnKQogCQlidHJmc190cmVlX3VubG9jayhidWYpOwpAQCAtMTAzMCw4ICsxMDMzLDggQEAKIAkJYnRyZnNfdHJlZV91bmxvY2sobWlkKTsKIAkJLyogb25jZSBmb3IgdGhlIHBhdGggKi8KIAkJZnJlZV9leHRlbnRfYnVmZmVyKG1pZCk7Ci0JCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBtaWQtPnN0YXJ0LCBtaWQtPmxlbiwKLQkJCQkJMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsLCAxKTsKKwkJcmV0ID0gYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHRyYW5zLCByb290LCBtaWQtPnN0YXJ0LCBtaWQtPmxlbiwKKwkJCQkJICAgIDAsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLCBsZXZlbCk7CiAJCS8qIG9uY2UgZm9yIHRoZSByb290IHB0ciAqLwogCQlmcmVlX2V4dGVudF9idWZmZXIobWlkKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEwOTUsMTAgKzEwOTgsMTAgQEAKIAkJCQkgICAgICAgMSk7CiAJCQlpZiAod3JldCkKIAkJCQlyZXQgPSB3cmV0OwotCQkJd3JldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCi0JCQkJCQkgYmxvY2tzaXplLCAwLAotCQkJCQkJIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCQkJIGxldmVsLCAwKTsKKwkJCXdyZXQgPSBidHJmc19mcmVlX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsCisJCQkJCQkgICAgIGJ5dGVuciwgYmxvY2tzaXplLCAwLAorCQkJCQkJICAgICByb290LT5yb290X2tleS5vYmplY3RpZCwKKwkJCQkJCSAgICAgbGV2ZWwpOwogCQkJaWYgKHdyZXQpCiAJCQkJcmV0ID0gd3JldDsKIAkJfSBlbHNlIHsKQEAgLTExNDMsOSArMTE0Niw4IEBACiAJCXdyZXQgPSBkZWxfcHRyKHRyYW5zLCByb290LCBwYXRoLCBsZXZlbCArIDEsIHBzbG90KTsKIAkJaWYgKHdyZXQpCiAJCQlyZXQgPSB3cmV0OwotCQl3cmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAotCQkJCQkgMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCSBsZXZlbCwgMCk7CisJCXdyZXQgPSBidHJmc19mcmVlX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCQkJCQkgMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsKTsKIAkJaWYgKHdyZXQpCiAJCQlyZXQgPSB3cmV0OwogCX0gZWxzZSB7CkBAIC0yOTk3LDc1ICsyOTk5LDg1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIGEgc2luZ2xlIGl0ZW0gaW50byB0d28gaXRlbXMsCi0gKiBnaXZpbmcgJ25ld19rZXknIHRvIHRoZSBuZXcgaXRlbSBhbmQgc3BsaXR0aW5nIHRoZQotICogb2xkIG9uZSBhdCBzcGxpdF9vZmZzZXQgKGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBpdGVtKS4KLSAqCi0gKiBUaGUgcGF0aCBtYXkgYmUgcmVsZWFzZWQgYnkgdGhpcyBvcGVyYXRpb24uICBBZnRlcgotICogdGhlIHNwbGl0LCB0aGUgcGF0aCBpcyBwb2ludGluZyB0byB0aGUgb2xkIGl0ZW0uICBUaGUKLSAqIG5ldyBpdGVtIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBzYW1lIG5vZGUgYXMgdGhlIG9sZCBvbmUuCi0gKgotICogTm90ZSwgdGhlIGl0ZW0gYmVpbmcgc3BsaXQgbXVzdCBiZSBzbWFsbGVyIGVub3VnaCB0byBsaXZlIGFsb25lIG9uCi0gKiBhIHRyZWUgYmxvY2sgd2l0aCByb29tIGZvciBvbmUgZXh0cmEgc3RydWN0IGJ0cmZzX2l0ZW0KLSAqCi0gKiBUaGlzIGFsbG93cyB1cyB0byBzcGxpdCB0aGUgaXRlbSBpbiBwbGFjZSwga2VlcGluZyBhIGxvY2sgb24gdGhlCi0gKiBsZWFmIHRoZSBlbnRpcmUgdGltZS4KLSAqLwotaW50IGJ0cmZzX3NwbGl0X2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCSAgICAgc3RydWN0IGJ0cmZzX2tleSAqbmV3X2tleSwKLQkJICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X29mZnNldCkKK3N0YXRpYyBub2lubGluZSBpbnQgc2V0dXBfbGVhZl9mb3Jfc3BsaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgaW5zX2xlbikKIHsKLQl1MzIgaXRlbV9zaXplOworCXN0cnVjdCBidHJmc19rZXkga2V5OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwotCXN0cnVjdCBidHJmc19rZXkgb3JpZ19rZXk7Ci0Jc3RydWN0IGJ0cmZzX2l0ZW0gKml0ZW07Ci0Jc3RydWN0IGJ0cmZzX2l0ZW0gKm5ld19pdGVtOwotCWludCByZXQgPSAwOwotCWludCBzbG90OwotCXUzMiBucml0ZW1zOwotCXUzMiBvcmlnX29mZnNldDsKLQlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICpmaTsKKwl1NjQgZXh0ZW50X2xlbiA9IDA7CisJdTMyIGl0ZW1fc2l6ZTsKKwlpbnQgcmV0OwogCiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwotCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCAmb3JpZ19rZXksIHBhdGgtPnNsb3RzWzBdKTsKLQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpID49IHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpCi0JCWdvdG8gc3BsaXQ7CisJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKKworCUJVR19PTihrZXkudHlwZSAhPSBCVFJGU19FWFRFTlRfREFUQV9LRVkgJiYKKwkgICAgICAga2V5LnR5cGUgIT0gQlRSRlNfRVhURU5UX0NTVU1fS0VZKTsKKworCWlmIChidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgbGVhZikgPj0gaW5zX2xlbikKKwkJcmV0dXJuIDA7CiAKIAlpdGVtX3NpemUgPSBidHJmc19pdGVtX3NpemVfbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pOworCWlmIChrZXkudHlwZSA9PSBCVFJGU19FWFRFTlRfREFUQV9LRVkpIHsKKwkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKKwkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCQlleHRlbnRfbGVuID0gYnRyZnNfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpKTsKKwl9CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCi0JcGF0aC0+c2VhcmNoX2Zvcl9zcGxpdCA9IDE7CiAJcGF0aC0+a2VlcF9sb2NrcyA9IDE7Ci0KLQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJm9yaWdfa2V5LCBwYXRoLCAwLCAxKTsKKwlwYXRoLT5zZWFyY2hfZm9yX3NwbGl0ID0gMTsKKwlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgMCwgMSk7CiAJcGF0aC0+c2VhcmNoX2Zvcl9zcGxpdCA9IDA7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOwogCisJcmV0ID0gLUVBR0FJTjsKKwlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJLyogaWYgb3VyIGl0ZW0gaXNuJ3QgdGhlcmUgb3IgZ290IHNtYWxsZXIsIHJldHVybiBub3cgKi8KLQlpZiAocmV0ICE9IDAgfHwgaXRlbV9zaXplICE9IGJ0cmZzX2l0ZW1fc2l6ZV9ucihwYXRoLT5ub2Rlc1swXSwKLQkJCQkJCQlwYXRoLT5zbG90c1swXSkpIHsKLQkJcGF0aC0+a2VlcF9sb2NrcyA9IDA7Ci0JCXJldHVybiAtRUFHQUlOOworCWlmIChyZXQgPiAwIHx8IGl0ZW1fc2l6ZSAhPSBidHJmc19pdGVtX3NpemVfbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pKQorCQlnb3RvIGVycjsKKworCWlmIChrZXkudHlwZSA9PSBCVFJGU19FWFRFTlRfREFUQV9LRVkpIHsKKwkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKKwkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCQlpZiAoZXh0ZW50X2xlbiAhPSBidHJmc19maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmkpKQorCQkJZ290byBlcnI7CiAJfQogCiAJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7Ci0JcmV0ID0gc3BsaXRfbGVhZih0cmFucywgcm9vdCwgJm9yaWdfa2V5LCBwYXRoLAotCQkJIHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSksIDEpOwotCXBhdGgtPmtlZXBfbG9ja3MgPSAwOworCXJldCA9IHNwbGl0X2xlYWYodHJhbnMsIHJvb3QsICZrZXksIHBhdGgsIGluc19sZW4sIDEpOwogCUJVR19PTihyZXQpOwogCisJcGF0aC0+a2VlcF9sb2NrcyA9IDA7CiAJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CisJcmV0dXJuIDA7CitlcnI6CisJcGF0aC0+a2VlcF9sb2NrcyA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBzcGxpdF9pdGVtKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19rZXkgKm5ld19rZXksCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9vZmZzZXQpCit7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CisJc3RydWN0IGJ0cmZzX2l0ZW0gKml0ZW07CisJc3RydWN0IGJ0cmZzX2l0ZW0gKm5ld19pdGVtOworCWludCBzbG90OworCWNoYXIgKmJ1ZjsKKwl1MzIgbnJpdGVtczsKKwl1MzIgaXRlbV9zaXplOworCXUzMiBvcmlnX29mZnNldDsKKwlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CisKIAlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJQlVHX09OKGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWFmKSA8IHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpOwogCi1zcGxpdDoKLQkvKgotCSAqIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyB0byB0aGUgcGF0aCBmcm9tIHNwbGl0X2xlYWYgbGVhdmUgaXQKLQkgKiBpbiBhIGJsb2NraW5nIHN0YXRlCi0JICovCiAJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CiAKIAlpdGVtID0gYnRyZnNfaXRlbV9ucihsZWFmLCBwYXRoLT5zbG90c1swXSk7CkBAIC0zMDczLDE5ICszMDg1LDE5IEBACiAJaXRlbV9zaXplID0gYnRyZnNfaXRlbV9zaXplKGxlYWYsIGl0ZW0pOwogCiAJYnVmID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgYnVmLCBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwKIAkJCSAgICBwYXRoLT5zbG90c1swXSksIGl0ZW1fc2l6ZSk7CisKIAlzbG90ID0gcGF0aC0+c2xvdHNbMF0gKyAxOwotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKLQogCWlmIChzbG90ICE9IG5yaXRlbXMpIHsKIAkJLyogc2hpZnQgdGhlIGl0ZW1zICovCiAJCW1lbW1vdmVfZXh0ZW50X2J1ZmZlcihsZWFmLCBidHJmc19pdGVtX25yX29mZnNldChzbG90ICsgMSksCi0JCQkgICAgICBidHJmc19pdGVtX25yX29mZnNldChzbG90KSwKLQkJCSAgICAgIChucml0ZW1zIC0gc2xvdCkgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKLQorCQkJCWJ0cmZzX2l0ZW1fbnJfb2Zmc2V0KHNsb3QpLAorCQkJCShucml0ZW1zIC0gc2xvdCkgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKIAl9CiAKIAlidHJmc19jcHVfa2V5X3RvX2Rpc2soJmRpc2tfa2V5LCBuZXdfa2V5KTsKQEAgLTMxMTMsMTYgKzMxMjUsODEgQEAKIAkJCSAgICBpdGVtX3NpemUgLSBzcGxpdF9vZmZzZXQpOwogCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCi0JcmV0ID0gMDsKLQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpIDwgMCkgewotCQlidHJmc19wcmludF9sZWFmKHJvb3QsIGxlYWYpOwotCQlCVUcoKTsKLQl9CisJQlVHX09OKGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWFmKSA8IDApOwogCWtmcmVlKGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNwbGl0cyBhIHNpbmdsZSBpdGVtIGludG8gdHdvIGl0ZW1zLAorICogZ2l2aW5nICduZXdfa2V5JyB0byB0aGUgbmV3IGl0ZW0gYW5kIHNwbGl0dGluZyB0aGUKKyAqIG9sZCBvbmUgYXQgc3BsaXRfb2Zmc2V0IChmcm9tIHRoZSBzdGFydCBvZiB0aGUgaXRlbSkuCisgKgorICogVGhlIHBhdGggbWF5IGJlIHJlbGVhc2VkIGJ5IHRoaXMgb3BlcmF0aW9uLiAgQWZ0ZXIKKyAqIHRoZSBzcGxpdCwgdGhlIHBhdGggaXMgcG9pbnRpbmcgdG8gdGhlIG9sZCBpdGVtLiAgVGhlCisgKiBuZXcgaXRlbSBpcyBnb2luZyB0byBiZSBpbiB0aGUgc2FtZSBub2RlIGFzIHRoZSBvbGQgb25lLgorICoKKyAqIE5vdGUsIHRoZSBpdGVtIGJlaW5nIHNwbGl0IG11c3QgYmUgc21hbGxlciBlbm91Z2ggdG8gbGl2ZSBhbG9uZSBvbgorICogYSB0cmVlIGJsb2NrIHdpdGggcm9vbSBmb3Igb25lIGV4dHJhIHN0cnVjdCBidHJmc19pdGVtCisgKgorICogVGhpcyBhbGxvd3MgdXMgdG8gc3BsaXQgdGhlIGl0ZW0gaW4gcGxhY2UsIGtlZXBpbmcgYSBsb2NrIG9uIHRoZQorICogbGVhZiB0aGUgZW50aXJlIHRpbWUuCisgKi8KK2ludCBidHJmc19zcGxpdF9pdGVtKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkgICAgIHN0cnVjdCBidHJmc19rZXkgKm5ld19rZXksCisJCSAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9vZmZzZXQpCit7CisJaW50IHJldDsKKwlyZXQgPSBzZXR1cF9sZWFmX2Zvcl9zcGxpdCh0cmFucywgcm9vdCwgcGF0aCwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3BsaXRfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgbmV3X2tleSwgc3BsaXRfb2Zmc2V0KTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBkdXBsaWNhdGUgYSBpdGVtLCBnaXZpbmcgJ25ld19rZXknIHRvIHRoZSBuZXcgaXRlbS4KKyAqIEl0IGd1YXJhbnRlZXMgYm90aCBpdGVtcyBsaXZlIGluIHRoZSBzYW1lIHRyZWUgbGVhZiBhbmQgdGhlIG5ldyBpdGVtCisgKiBpcyBjb250aWd1b3VzIHdpdGggdGhlIG9yaWdpbmFsIGl0ZW0uCisgKgorICogVGhpcyBhbGxvd3MgdXMgdG8gc3BsaXQgZmlsZSBleHRlbnQgaW4gcGxhY2UsIGtlZXBpbmcgYSBsb2NrIG9uIHRoZQorICogbGVhZiB0aGUgZW50aXJlIHRpbWUuCisgKi8KK2ludCBidHJmc19kdXBsaWNhdGVfaXRlbShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCSBzdHJ1Y3QgYnRyZnNfa2V5ICpuZXdfa2V5KQoreworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOworCWludCByZXQ7CisJdTMyIGl0ZW1fc2l6ZTsKKworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKKwlpdGVtX3NpemUgPSBidHJmc19pdGVtX3NpemVfbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pOworCXJldCA9IHNldHVwX2xlYWZfZm9yX3NwbGl0KHRyYW5zLCByb290LCBwYXRoLAorCQkJCSAgIGl0ZW1fc2l6ZSArIHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwYXRoLT5zbG90c1swXSsrOworCXJldCA9IHNldHVwX2l0ZW1zX2Zvcl9pbnNlcnQodHJhbnMsIHJvb3QsIHBhdGgsIG5ld19rZXksICZpdGVtX3NpemUsCisJCQkJICAgICBpdGVtX3NpemUsIGl0ZW1fc2l6ZSArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pLCAxKTsKKwlCVUdfT04ocmV0KTsKKworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKKwltZW1jcHlfZXh0ZW50X2J1ZmZlcihsZWFmLAorCQkJICAgICBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwgcGF0aC0+c2xvdHNbMF0pLAorCQkJICAgICBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwgcGF0aC0+c2xvdHNbMF0gLSAxKSwKKwkJCSAgICAgaXRlbV9zaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIG1ha2UgdGhlIGl0ZW0gcG9pbnRlZCB0byBieSB0aGUgcGF0aCBzbWFsbGVyLiAgbmV3X3NpemUgaW5kaWNhdGVzCiAgKiBob3cgc21hbGwgdG8gbWFrZSBpdCwgYW5kIGZyb21fZW5kIHRlbGxzIHVzIGlmIHdlIGp1c3QgY2hvcCBieXRlcwogICogb2ZmIHRoZSBlbmQgb2YgdGhlIGl0ZW0gb3IgaWYgd2Ugc2hpZnQgdGhlIGl0ZW0gdG8gY2hvcCBieXRlcyBvZmYKQEAgLTM3MTQsOCArMzc5MSw4IEBACiAJICovCiAJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMCk7CiAKLQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgbGVhZi0+c3RhcnQsIGxlYWYtPmxlbiwKLQkJCQkwLCByb290LT5yb290X2tleS5vYmplY3RpZCwgMCwgMCk7CisJcmV0ID0gYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHRyYW5zLCByb290LCBsZWFmLT5zdGFydCwgbGVhZi0+bGVuLAorCQkJCSAgICAwLCByb290LT5yb290X2tleS5vYmplY3RpZCwgMCk7CiAJcmV0dXJuIHJldDsKIH0KIC8qCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA0NDRiM2U5Li45ZjgwNmRkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTMxMCw2ICszMTAsOSBAQAogI2RlZmluZSBCVFJGU19NQVhfSU5MSU5FX0RBVEFfU0laRShyKSAoQlRSRlNfTEVBRl9EQVRBX1NJWkUocikgLSBcCiAJCQkJCXNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkgLSBcCiAJCQkJCXNpemVvZihzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSkpCisjZGVmaW5lIEJUUkZTX01BWF9YQVRUUl9TSVpFKHIpCShCVFJGU19MRUFGX0RBVEFfU0laRShyKSAtIFwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSAtXAorCQkJCSBzaXplb2Yoc3RydWN0IGJ0cmZzX2Rpcl9pdGVtKSkKIAogCiAvKgpAQCAtODU5LDggKzg2Miw5IEBACiAJc3RydWN0IG11dGV4IG9yZGVyZWRfb3BlcmF0aW9uc19tdXRleDsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGV4dGVudF9jb21taXRfc2VtOwogCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSBzdWJ2b2xfc2VtOworCXN0cnVjdCByd19zZW1hcGhvcmUgY2xlYW51cF93b3JrX3NlbTsKIAorCXN0cnVjdCByd19zZW1hcGhvcmUgc3Vidm9sX3NlbTsKIAlzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qgc3Vidm9sX3NyY3U7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zX2xpc3Q7CkBAIC04NjgsNiArODcyLDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlYWRfcm9vdHM7CiAJc3RydWN0IGxpc3RfaGVhZCBjYWNoaW5nX2Jsb2NrX2dyb3VwczsKIAorCXNwaW5sb2NrX3QgZGVsYXllZF9pcHV0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBkZWxheWVkX2lwdXRzOworCiAJYXRvbWljX3QgbnJfYXN5bmNfc3VibWl0czsKIAlhdG9taWNfdCBhc3luY19zdWJtaXRfZHJhaW5pbmc7CiAJYXRvbWljX3QgbnJfYXN5bmNfYmlvczsKQEAgLTEwMzQsMTIgKzEwNDEsMTIgQEAKIAlpbnQgcmVmX2Nvd3M7CiAJaW50IHRyYWNrX2RpcnR5OwogCWludCBpbl9yYWRpeDsKKwlpbnQgY2xlYW5fb3JwaGFuczsKIAogCXU2NCBkZWZyYWdfdHJhbnNfc3RhcnQ7CiAJc3RydWN0IGJ0cmZzX2tleSBkZWZyYWdfcHJvZ3Jlc3M7CiAJc3RydWN0IGJ0cmZzX2tleSBkZWZyYWdfbWF4OwogCWludCBkZWZyYWdfcnVubmluZzsKLQlpbnQgZGVmcmFnX2xldmVsOwogCWNoYXIgKm5hbWU7CiAJaW50IGluX3N5c2ZzOwogCkBAIC0xOTc1LDYgKzE5ODIsMTAgQEAKIAkJCQkJdTY0IHBhcmVudCwgdTY0IHJvb3Rfb2JqZWN0aWQsCiAJCQkJCXN0cnVjdCBidHJmc19kaXNrX2tleSAqa2V5LCBpbnQgbGV2ZWwsCiAJCQkJCXU2NCBoaW50LCB1NjQgZW1wdHlfc2l6ZSk7CitpbnQgYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgdTY0IGJ5dGVuciwgdTMyIGJsb2Nrc2l6ZSwKKwkJCSAgdTY0IHBhcmVudCwgdTY0IHJvb3Rfb2JqZWN0aWQsIGludCBsZXZlbCk7CiBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnRyZnNfaW5pdF9uZXdfYnVmZmVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCSAgICB1NjQgYnl0ZW5yLCB1MzIgYmxvY2tzaXplLApAQCAtMjA4OSw2ICsyMTAwLDEwIEBACiAJCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCiAJCSAgICAgc3RydWN0IGJ0cmZzX2tleSAqbmV3X2tleSwKIAkJICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X29mZnNldCk7CitpbnQgYnRyZnNfZHVwbGljYXRlX2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkgc3RydWN0IGJ0cmZzX2tleSAqbmV3X2tleSk7CiBpbnQgYnRyZnNfc2VhcmNoX3Nsb3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHN0cnVjdCBidHJmc19yb290CiAJCSAgICAgICpyb290LCBzdHJ1Y3QgYnRyZnNfa2V5ICprZXksIHN0cnVjdCBidHJmc19wYXRoICpwLCBpbnQKIAkJICAgICAgaW5zX2xlbiwgaW50IGNvdyk7CkBAIC0yMTk2LDkgKzIyMTEsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAogCQkJICAgICAgc3RydWN0IGJ0cmZzX2Rpcl9pdGVtICpkaSk7CiBpbnQgYnRyZnNfaW5zZXJ0X3hhdHRyX2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgdTE2IG5hbWVfbGVuLCBjb25zdCB2b2lkICpkYXRhLCB1MTYgZGF0YV9sZW4sCi0JCQkgICAgdTY0IGRpcik7CisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBvYmplY3RpZCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgbmFtZV9sZW4sCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGRhdGFfbGVuKTsKIHN0cnVjdCBidHJmc19kaXJfaXRlbSAqYnRyZnNfbG9va3VwX3hhdHRyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCB1NjQgZGlyLApAQCAtMjI5Miw3ICsyMzA4LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgbmV3X3NpemUsCiAJCQkgICAgICAgdTMyIG1pbl90eXBlKTsKIAotaW50IGJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2RlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CitpbnQgYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgZGVsYXlfaXB1dCk7CiBpbnQgYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwogaW50IGJ0cmZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwpAQCAtMjMzMiw2ICsyMzQ4LDggQEAKIHZvaWQgYnRyZnNfb3JwaGFuX2NsZWFudXAoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTsKIGludCBidHJmc19pbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7Cit2b2lkIGJ0cmZzX2FkZF9kZWxheWVkX2lwdXQoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qIGlvY3RsLmMgKi8KQEAgLTIzNDUsMTIgKzIzNjMsOSBAQAogCQkJICAgIGludCBza2lwX3Bpbm5lZCk7CiBpbnQgYnRyZnNfY2hlY2tfZmlsZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7Ci1pbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBsb2NrZWRfZW5kLAotCQkgICAgICAgdTY0IGlubGluZV9saW1pdCwgdTY0ICpoaW50X2Jsb2NrLCBpbnQgZHJvcF9jYWNoZSk7CitpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgKmhpbnRfYnl0ZSwgaW50IGRyb3BfY2FjaGUpOwogaW50IGJ0cmZzX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCk7CiBpbnQgYnRyZnNfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIApAQCAtMjM4MCw3ICsyMzk1LDggQEAKICNlbHNlCiAjZGVmaW5lIGJ0cmZzX2NoZWNrX2FjbCBOVUxMCiAjZW5kaWYKLWludCBidHJmc19pbml0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CitpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKTsKIGludCBidHJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qIHJlbG9jYXRpb24uYyAqLwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlyLWl0ZW0uYyBiL2ZzL2J0cmZzL2Rpci1pdGVtLmMKaW5kZXggZjNhNjA3NS4uZTkxMDNiMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlyLWl0ZW0uYworKysgYi9mcy9idHJmcy9kaXItaXRlbS5jCkBAIC02OCwxMiArNjgsMTIgQEAKICAqIGludG8gdGhlIHRyZWUKICAqLwogaW50IGJ0cmZzX2luc2VydF94YXR0cl9pdGVtKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgIHUxNiBuYW1lX2xlbiwgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGRhdGFfbGVuLAotCQkJICAgIHU2NCBkaXIpCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBvYmplY3RpZCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgbmFtZV9sZW4sCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGRhdGFfbGVuKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBidHJmc19kaXJfaXRlbSAqZGlyX2l0ZW07CiAJdW5zaWduZWQgbG9uZyBuYW1lX3B0ciwgZGF0YV9wdHI7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXksIGxvY2F0aW9uOwpAQCAtODEsMTUgKzgxLDExIEBACiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJdTMyIGRhdGFfc2l6ZTsKIAotCWtleS5vYmplY3RpZCA9IGRpcjsKKwlCVUdfT04obmFtZV9sZW4gKyBkYXRhX2xlbiA+IEJUUkZTX01BWF9YQVRUUl9TSVpFKHJvb3QpKTsKKworCWtleS5vYmplY3RpZCA9IG9iamVjdGlkOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19YQVRUUl9JVEVNX0tFWSk7CiAJa2V5Lm9mZnNldCA9IGJ0cmZzX25hbWVfaGFzaChuYW1lLCBuYW1lX2xlbik7Ci0JcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlpZiAoIXBhdGgpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChuYW1lX2xlbiArIGRhdGFfbGVuICsgc2l6ZW9mKHN0cnVjdCBidHJmc19kaXJfaXRlbSkgPgotCSAgICBCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSAtIHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpCi0JCXJldHVybiAtRU5PU1BDOwogCiAJZGF0YV9zaXplID0gc2l6ZW9mKCpkaXJfaXRlbSkgKyBuYW1lX2xlbiArIGRhdGFfbGVuOwogCWRpcl9pdGVtID0gaW5zZXJ0X3dpdGhfb3ZlcmZsb3codHJhbnMsIHJvb3QsIHBhdGgsICZrZXksIGRhdGFfc2l6ZSwKQEAgLTExNyw3ICsxMTMsNiBAQAogCXdyaXRlX2V4dGVudF9idWZmZXIobGVhZiwgZGF0YSwgZGF0YV9wdHIsIGRhdGFfbGVuKTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CiAKLQlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDAyYjZhZmIuLjAwOWUzYmQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTg5Miw2ICs4OTIsOCBAQAogCXJvb3QtPnN0cmlwZXNpemUgPSBzdHJpcGVzaXplOwogCXJvb3QtPnJlZl9jb3dzID0gMDsKIAlyb290LT50cmFja19kaXJ0eSA9IDA7CisJcm9vdC0+aW5fcmFkaXggPSAwOworCXJvb3QtPmNsZWFuX29ycGhhbnMgPSAwOwogCiAJcm9vdC0+ZnNfaW5mbyA9IGZzX2luZm87CiAJcm9vdC0+b2JqZWN0aWQgPSBvYmplY3RpZDsKQEAgLTkyOCw3ICs5MzAsNiBAQAogCXJvb3QtPmRlZnJhZ190cmFuc19zdGFydCA9IGZzX2luZm8tPmdlbmVyYXRpb247CiAJaW5pdF9jb21wbGV0aW9uKCZyb290LT5rb2JqX3VucmVnaXN0ZXIpOwogCXJvb3QtPmRlZnJhZ19ydW5uaW5nID0gMDsKLQlyb290LT5kZWZyYWdfbGV2ZWwgPSAwOwogCXJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkID0gb2JqZWN0aWQ7CiAJcm9vdC0+YW5vbl9zdXBlci5zX3Jvb3QgPSBOVUxMOwogCXJvb3QtPmFub25fc3VwZXIuc19kZXYgPSAwOwpAQCAtOTgwLDEyICs5ODEsMTIgQEAKIAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdCgmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzLAotCQkJCSAgICAwLCAmc3RhcnQsICZlbmQsIEVYVEVOVF9ESVJUWSk7CisJCQkJMCwgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfTkVXKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWNsZWFyX2V4dGVudF9kaXJ0eSgmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzLAotCQkJCSAgIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKKwkJY2xlYXJfZXh0ZW50X2JpdHMoJmxvZ19yb290X3RyZWUtPmRpcnR5X2xvZ19wYWdlcywgc3RhcnQsIGVuZCwKKwkJCQkgIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ORVcsIEdGUF9OT0ZTKTsKIAl9CiAJZWIgPSBmc19pbmZvLT5sb2dfcm9vdF90cmVlLT5ub2RlOwogCkBAIC0xMjEwLDggKzEyMTEsMTAgQEAKIAlyZXQgPSByYWRpeF90cmVlX2luc2VydCgmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXgsCiAJCQkJKHVuc2lnbmVkIGxvbmcpcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJcm9vdCk7Ci0JaWYgKHJldCA9PSAwKQorCWlmIChyZXQgPT0gMCkgewogCQlyb290LT5pbl9yYWRpeCA9IDE7CisJCXJvb3QtPmNsZWFuX29ycGhhbnMgPSAxOworCX0KIAlzcGluX3VubG9jaygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCWlmIChyZXQpIHsKQEAgLTEyMjUsMTAgKzEyMjgsNiBAQAogCXJldCA9IGJ0cmZzX2ZpbmRfZGVhZF9yb290cyhmc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkKTsKIAlXQVJOX09OKHJldCk7Ci0KLQlpZiAoIShmc19pbmZvLT5zYi0+c19mbGFncyAmIE1TX1JET05MWSkpCi0JCWJ0cmZzX29ycGhhbl9jbGVhbnVwKHJvb3QpOwotCiAJcmV0dXJuIHJvb3Q7CiBmYWlsOgogCWZyZWVfZnNfcm9vdChyb290KTsKQEAgLTE0NzcsNiArMTQ3Niw3IEBACiAKIAkJaWYgKCEocm9vdC0+ZnNfaW5mby0+c2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmCiAJCSAgICBtdXRleF90cnlsb2NrKCZyb290LT5mc19pbmZvLT5jbGVhbmVyX211dGV4KSkgeworCQkJYnRyZnNfcnVuX2RlbGF5ZWRfaXB1dHMocm9vdCk7CiAJCQlidHJmc19jbGVhbl9vbGRfc25hcHNob3RzKHJvb3QpOwogCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5jbGVhbmVyX211dGV4KTsKIAkJfQpAQCAtMTYwNiw2ICsxNjA2LDcgQEAKIAlJTklUX1JBRElYX1RSRUUoJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LCBHRlBfQVRPTUlDKTsKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+dHJhbnNfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmRlYWRfcm9vdHMpOworCUlOSVRfTElTVF9IRUFEKCZmc19pbmZvLT5kZWxheWVkX2lwdXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+aGFzaGVycyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmRlbGFsbG9jX2lub2Rlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucyk7CkBAIC0xNjE0LDYgKzE2MTUsNyBAQAogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPnJlZl9jYWNoZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dF9sb2NrKTsKIAogCWluaXRfY29tcGxldGlvbigmZnNfaW5mby0+a29ial91bnJlZ2lzdGVyKTsKIAlmc19pbmZvLT50cmVlX3Jvb3QgPSB0cmVlX3Jvb3Q7CkBAIC0xNjg5LDYgKzE2OTEsNyBAQAogCW11dGV4X2luaXQoJmZzX2luZm8tPmNsZWFuZXJfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnZvbHVtZV9tdXRleCk7CiAJaW5pdF9yd3NlbSgmZnNfaW5mby0+ZXh0ZW50X2NvbW1pdF9zZW0pOworCWluaXRfcndzZW0oJmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCWluaXRfcndzZW0oJmZzX2luZm8tPnN1YnZvbF9zZW0pOwogCiAJYnRyZnNfaW5pdF9mcmVlX2NsdXN0ZXIoJmZzX2luZm8tPm1ldGFfYWxsb2NfY2x1c3Rlcik7CkBAIC0yMzg2LDggKzIzODksMTQgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+Y2xlYW5lcl9tdXRleCk7CisJYnRyZnNfcnVuX2RlbGF5ZWRfaXB1dHMocm9vdCk7CiAJYnRyZnNfY2xlYW5fb2xkX3NuYXBzaG90cyhyb290KTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPmNsZWFuZXJfbXV0ZXgpOworCisJLyogd2FpdCB1bnRpbCBvbmdvaW5nIGNsZWFudXAgd29yayBkb25lICovCisJZG93bl93cml0ZSgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CisJdXBfd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCUJVR19PTihyZXQpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggOTQ2MjdjNC4uNTZlNTAxMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0xOTUsNiArMTk1LDE0IEBACiAJaW50IHN0cmlwZV9sZW47CiAJaW50IGksIG5yLCByZXQ7CiAKKwlpZiAoY2FjaGUtPmtleS5vYmplY3RpZCA8IEJUUkZTX1NVUEVSX0lORk9fT0ZGU0VUKSB7CisJCXN0cmlwZV9sZW4gPSBCVFJGU19TVVBFUl9JTkZPX09GRlNFVCAtIGNhY2hlLT5rZXkub2JqZWN0aWQ7CisJCWNhY2hlLT5ieXRlc19zdXBlciArPSBzdHJpcGVfbGVuOworCQlyZXQgPSBhZGRfZXhjbHVkZWRfZXh0ZW50KHJvb3QsIGNhY2hlLT5rZXkub2JqZWN0aWQsCisJCQkJCSAgc3RyaXBlX2xlbik7CisJCUJVR19PTihyZXQpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBCVFJGU19TVVBFUl9NSVJST1JfTUFYOyBpKyspIHsKIAkJYnl0ZW5yID0gYnRyZnNfc2Jfb2Zmc2V0KGkpOwogCQlyZXQgPSBidHJmc19ybWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsCkBAIC0yNTUsNyArMjYzLDcgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWlmIChleHRlbnRfc3RhcnQgPT0gc3RhcnQpIHsKKwkJaWYgKGV4dGVudF9zdGFydCA8PSBzdGFydCkgewogCQkJc3RhcnQgPSBleHRlbnRfZW5kICsgMTsKIAkJfSBlbHNlIGlmIChleHRlbnRfc3RhcnQgPiBzdGFydCAmJiBleHRlbnRfc3RhcnQgPCBlbmQpIHsKIAkJCXNpemUgPSBleHRlbnRfc3RhcnQgLSBzdGFydDsKQEAgLTI4ODAsOSArMjg4OCw5IEBACiAJcm9vdCA9IGFzeW5jLT5yb290OwogCWluZm8gPSBhc3luYy0+aW5mbzsKIAotCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKKwlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCwgMCk7CiAJd2FrZV91cCgmaW5mby0+Zmx1c2hfd2FpdCk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCwgMCk7CiAKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwogCWluZm8tPmZsdXNoaW5nID0gMDsKQEAgLTI5NTYsOCArMjk2NCw4IEBACiAJcmV0dXJuOwogCiBmbHVzaDoKLQlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QsIDApOworCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDAsIDApOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpbmZvLT5mbHVzaGluZyA9IDA7CkBAIC0zNDU0LDE0ICszNDYyLDYgQEAKIAllbHNlCiAJCW9sZF92YWwgLT0gbnVtX2J5dGVzOwogCWJ0cmZzX3NldF9zdXBlcl9ieXRlc191c2VkKCZpbmZvLT5zdXBlcl9jb3B5LCBvbGRfdmFsKTsKLQotCS8qIGJsb2NrIGFjY291bnRpbmcgZm9yIHJvb3QgaXRlbSAqLwotCW9sZF92YWwgPSBidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSk7Ci0JaWYgKGFsbG9jKQotCQlvbGRfdmFsICs9IG51bV9ieXRlczsKLQllbHNlCi0JCW9sZF92YWwgLT0gbnVtX2J5dGVzOwotCWJ0cmZzX3NldF9yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSwgb2xkX3ZhbCk7CiAJc3Bpbl91bmxvY2soJmluZm8tPmRlbGFsbG9jX2xvY2spOwogCiAJd2hpbGUgKHRvdGFsKSB7CkBAIC00MDQ5LDYgKzQwNDksMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgdTY0IGJ5dGVuciwgdTMyIGJsb2Nrc2l6ZSwKKwkJCSAgdTY0IHBhcmVudCwgdTY0IHJvb3Rfb2JqZWN0aWQsIGludCBsZXZlbCkKK3sKKwl1NjQgdXNlZDsKKwlzcGluX2xvY2soJnJvb3QtPm5vZGVfbG9jayk7CisJdXNlZCA9IGJ0cmZzX3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtKSAtIGJsb2Nrc2l6ZTsKKwlidHJmc19zZXRfcm9vdF91c2VkKCZyb290LT5yb290X2l0ZW0sIHVzZWQpOworCXNwaW5fdW5sb2NrKCZyb290LT5ub2RlX2xvY2spOworCisJcmV0dXJuIGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkgcGFyZW50LCByb290X29iamVjdGlkLCBsZXZlbCwgMCk7Cit9CisKIHN0YXRpYyB1NjQgc3RyaXBlX2FsaWduKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgdmFsKQogewogCXU2NCBtYXNrID0gKCh1NjQpcm9vdC0+c3RyaXBlc2l6ZSAtIDEpOwpAQCAtNDU3OCw3ICs0NTkzLDYgQEAKIHsKIAlpbnQgcmV0OwogCXU2NCBzZWFyY2hfc3RhcnQgPSAwOwotCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAogCWRhdGEgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCBkYXRhKTsKIGFnYWluOgpAQCAtNDU4NiwxNyArNDYwMCw5IEBACiAJICogdGhlIG9ubHkgcGxhY2UgdGhhdCBzZXRzIGVtcHR5X3NpemUgaXMgYnRyZnNfcmVhbGxvY19ub2RlLCB3aGljaAogCSAqIGlzIG5vdCBjYWxsZWQgcmVjdXJzaXZlbHkgb24gYWxsb2NhdGlvbnMKIAkgKi8KLQlpZiAoZW1wdHlfc2l6ZSB8fCByb290LT5yZWZfY293cykgewotCQlpZiAoIShkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpKSB7Ci0JCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCi0JCQkJICAgICAyICogMTAyNCAqIDEwMjQsCi0JCQkJICAgICBCVFJGU19CTE9DS19HUk9VUF9NRVRBREFUQSB8Ci0JCQkJICAgICAoaW5mby0+bWV0YWRhdGFfYWxsb2NfcHJvZmlsZSAmCi0JCQkJICAgICAgaW5mby0+YXZhaWxfbWV0YWRhdGFfYWxsb2NfYml0cyksIDApOwotCQl9CisJaWYgKGVtcHR5X3NpemUgfHwgcm9vdC0+cmVmX2Nvd3MpCiAJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKIAkJCQkgICAgIG51bV9ieXRlcyArIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwgMCk7Ci0JfQogCiAJV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKIAlyZXQgPSBmaW5kX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBudW1fYnl0ZXMsIGVtcHR5X3NpemUsCkBAIC00ODk3LDYgKzQ5MDMsMTQgQEAKIAkJCQkJZXh0ZW50X29wKTsKIAkJQlVHX09OKHJldCk7CiAJfQorCisJaWYgKHJvb3Rfb2JqZWN0aWQgPT0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQpIHsKKwkJdTY0IHVzZWQ7CisJCXNwaW5fbG9jaygmcm9vdC0+bm9kZV9sb2NrKTsKKwkJdXNlZCA9IGJ0cmZzX3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtKSArIG51bV9ieXRlczsKKwkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtLCB1c2VkKTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPm5vZGVfbG9jayk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQ5MTksOCArNDkzMywxNiBAQAogCWJ0cmZzX3NldF9idWZmZXJfdXB0b2RhdGUoYnVmKTsKIAogCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCkgewotCQlzZXRfZXh0ZW50X2RpcnR5KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsIGJ1Zi0+c3RhcnQsCi0JCQkgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSwgR0ZQX05PRlMpOworCQkvKgorCQkgKiB3ZSBhbGxvdyB0d28gbG9nIHRyYW5zYWN0aW9ucyBhdCBhIHRpbWUsIHVzZSBkaWZmZXJlbnQKKwkJICogRVhFTlQgYml0IHRvIGRpZmZlcmVudGlhdGUgZGlydHkgcGFnZXMuCisJCSAqLworCQlpZiAocm9vdC0+bG9nX3RyYW5zaWQgJSAyID09IDApCisJCQlzZXRfZXh0ZW50X2RpcnR5KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsIGJ1Zi0+c3RhcnQsCisJCQkJCWJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEsIEdGUF9OT0ZTKTsKKwkJZWxzZQorCQkJc2V0X2V4dGVudF9uZXcoJnJvb3QtPmRpcnR5X2xvZ19wYWdlcywgYnVmLT5zdGFydCwKKwkJCQkJYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSwgR0ZQX05PRlMpOwogCX0gZWxzZSB7CiAJCXNldF9leHRlbnRfZGlydHkoJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGlydHlfcGFnZXMsIGJ1Zi0+c3RhcnQsCiAJCQkgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSwgR0ZQX05PRlMpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IDc3Zjc1OTMuLmZlYWExM2IgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTE3OSwxOCArMTc5LDE0IEBACiAJCX0KIAkJZmxhZ3MgPSBlbS0+ZmxhZ3M7CiAJCWlmIChza2lwX3Bpbm5lZCAmJiB0ZXN0X2JpdChFWFRFTlRfRkxBR19QSU5ORUQsICZlbS0+ZmxhZ3MpKSB7Ci0JCQlpZiAoZW0tPnN0YXJ0IDw9IHN0YXJ0ICYmCi0JCQkgICAgKCF0ZXN0ZW5kIHx8IGVtLT5zdGFydCArIGVtLT5sZW4gPj0gc3RhcnQgKyBsZW4pKSB7CisJCQlpZiAodGVzdGVuZCAmJiBlbS0+c3RhcnQgKyBlbS0+bGVuID49IHN0YXJ0ICsgbGVuKSB7CiAJCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJCQl3cml0ZV91bmxvY2soJmVtX3RyZWUtPmxvY2spOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKHN0YXJ0IDwgZW0tPnN0YXJ0KSB7Ci0JCQkJbGVuID0gZW0tPnN0YXJ0IC0gc3RhcnQ7Ci0JCQl9IGVsc2UgeworCQkJc3RhcnQgPSBlbS0+c3RhcnQgKyBlbS0+bGVuOworCQkJaWYgKHRlc3RlbmQpCiAJCQkJbGVuID0gc3RhcnQgKyBsZW4gLSAoZW0tPnN0YXJ0ICsgZW0tPmxlbik7Ci0JCQkJc3RhcnQgPSBlbS0+c3RhcnQgKyBlbS0+bGVuOwotCQkJfQogCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJCXdyaXRlX3VubG9jaygmZW1fdHJlZS0+bG9jayk7CiAJCQljb250aW51ZTsKQEAgLTI2NSwzMTkgKzI2MSwyNDcgQEAKICAqIElmIGFuIGV4dGVudCBpbnRlcnNlY3RzIHRoZSByYW5nZSBidXQgaXMgbm90IGVudGlyZWx5IGluc2lkZSB0aGUgcmFuZ2UKICAqIGl0IGlzIGVpdGhlciB0cnVuY2F0ZWQgb3Igc3BsaXQuICBBbnl0aGluZyBlbnRpcmVseSBpbnNpZGUgdGhlIHJhbmdlCiAgKiBpcyBkZWxldGVkIGZyb20gdGhlIHRyZWUuCi0gKgotICogaW5saW5lX2xpbWl0IGlzIHVzZWQgdG8gdGVsbCB0aGlzIGNvZGUgd2hpY2ggb2Zmc2V0cyBpbiB0aGUgZmlsZSB0byBrZWVwCi0gKiBpZiB0aGV5IGNvbnRhaW4gaW5saW5lIGV4dGVudHMuCiAgKi8KLW5vaW5saW5lIGludCBidHJmc19kcm9wX2V4dGVudHMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IGxvY2tlZF9lbmQsCi0JCSAgICAgICB1NjQgaW5saW5lX2xpbWl0LCB1NjQgKmhpbnRfYnl0ZSwgaW50IGRyb3BfY2FjaGUpCitpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgKmhpbnRfYnl0ZSwgaW50IGRyb3BfY2FjaGUpCiB7Ci0JdTY0IGV4dGVudF9lbmQgPSAwOwotCXU2NCBzZWFyY2hfc3RhcnQgPSBzdGFydDsKLQl1NjQgcmFtX2J5dGVzID0gMDsKLQl1NjQgZGlza19ieXRlbnIgPSAwOwotCXU2NCBvcmlnX2xvY2tlZF9lbmQgPSBsb2NrZWRfZW5kOwotCXU4IGNvbXByZXNzaW9uOwotCXU4IGVuY3J5cHRpb247Ci0JdTE2IG90aGVyX2VuY29kaW5nID0gMDsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwotCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICpleHRlbnQ7CisJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmZpOwogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBidHJmc19rZXkga2V5OwotCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtIG9sZDsKLQlpbnQga2VlcDsKLQlpbnQgc2xvdDsKLQlpbnQgYm9va2VuZDsKLQlpbnQgZm91bmRfdHlwZSA9IDA7Ci0JaW50IGZvdW5kX2V4dGVudDsKLQlpbnQgZm91bmRfaW5saW5lOworCXN0cnVjdCBidHJmc19rZXkgbmV3X2tleTsKKwl1NjQgc2VhcmNoX3N0YXJ0ID0gc3RhcnQ7CisJdTY0IGRpc2tfYnl0ZW5yID0gMDsKKwl1NjQgbnVtX2J5dGVzID0gMDsKKwl1NjQgZXh0ZW50X29mZnNldCA9IDA7CisJdTY0IGV4dGVudF9lbmQgPSAwOworCWludCBkZWxfbnIgPSAwOworCWludCBkZWxfc2xvdCA9IDA7CisJaW50IGV4dGVudF90eXBlOwogCWludCByZWNvdzsKIAlpbnQgcmV0OwogCi0JaW5saW5lX2xpbWl0ID0gMDsKIAlpZiAoZHJvcF9jYWNoZSkKIAkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBlbmQgLSAxLCAwKTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwogCXdoaWxlICgxKSB7CiAJCXJlY293ID0gMDsKLQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQlyZXQgPSBidHJmc19sb29rdXBfZmlsZV9leHRlbnQodHJhbnMsIHJvb3QsIHBhdGgsIGlub2RlLT5pX2lubywKIAkJCQkJICAgICAgIHNlYXJjaF9zdGFydCwgLTEpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlpZiAocmV0ID4gMCkgewotCQkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApIHsKLQkJCQlyZXQgPSAwOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcGF0aC0+c2xvdHNbMF0tLTsKKwkJCWJyZWFrOworCQlpZiAocmV0ID4gMCAmJiBwYXRoLT5zbG90c1swXSA+IDAgJiYgc2VhcmNoX3N0YXJ0ID09IHN0YXJ0KSB7CisJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmtleSwgcGF0aC0+c2xvdHNbMF0gLSAxKTsKKwkJCWlmIChrZXkub2JqZWN0aWQgPT0gaW5vZGUtPmlfaW5vICYmCisJCQkgICAga2V5LnR5cGUgPT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKQorCQkJCXBhdGgtPnNsb3RzWzBdLS07CiAJCX0KLW5leHRfc2xvdDoKLQkJa2VlcCA9IDA7Ci0JCWJvb2tlbmQgPSAwOwotCQlmb3VuZF9leHRlbnQgPSAwOwotCQlmb3VuZF9pbmxpbmUgPSAwOwotCQljb21wcmVzc2lvbiA9IDA7Ci0JCWVuY3J5cHRpb24gPSAwOwotCQlleHRlbnQgPSBOVUxMOwotCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKIAkJcmV0ID0gMDsKLQkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHNsb3QpOwotCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmtleSkgPT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZICYmCi0JCSAgICBrZXkub2Zmc2V0ID49IGVuZCkgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGJ0cmZzX2tleV90eXBlKCZrZXkpID4gQlRSRlNfRVhURU5UX0RBVEFfS0VZIHx8Ci0JCSAgICBrZXkub2JqZWN0aWQgIT0gaW5vZGUtPmlfaW5vKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAocmVjb3cpIHsKLQkJCXNlYXJjaF9zdGFydCA9IG1heChrZXkub2Zmc2V0LCBzdGFydCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmtleSkgPT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKSB7Ci0JCQlleHRlbnQgPSBidHJmc19pdGVtX3B0cihsZWFmLCBzbG90LAotCQkJCQkJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCQkJZm91bmRfdHlwZSA9IGJ0cmZzX2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZXh0ZW50KTsKLQkJCWNvbXByZXNzaW9uID0gYnRyZnNfZmlsZV9leHRlbnRfY29tcHJlc3Npb24obGVhZiwKLQkJCQkJCQkJICAgIGV4dGVudCk7Ci0JCQllbmNyeXB0aW9uID0gYnRyZnNfZmlsZV9leHRlbnRfZW5jcnlwdGlvbihsZWFmLAotCQkJCQkJCQkgIGV4dGVudCk7Ci0JCQlvdGhlcl9lbmNvZGluZyA9IGJ0cmZzX2ZpbGVfZXh0ZW50X290aGVyX2VuY29kaW5nKGxlYWYsCi0JCQkJCQkJCSAgZXh0ZW50KTsKLQkJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX1JFRyB8fAotCQkJICAgIGZvdW5kX3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpIHsKLQkJCQlleHRlbnRfZW5kID0KLQkJCQkgICAgIGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfYnl0ZW5yKGxlYWYsCi0JCQkJCQkJCSAgIGV4dGVudCk7Ci0JCQkJaWYgKGV4dGVudF9lbmQpCi0JCQkJCSpoaW50X2J5dGUgPSBleHRlbnRfZW5kOwotCi0JCQkJZXh0ZW50X2VuZCA9IGtleS5vZmZzZXQgKwotCQkJCSAgICAgYnRyZnNfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGV4dGVudCk7Ci0JCQkJcmFtX2J5dGVzID0gYnRyZnNfZmlsZV9leHRlbnRfcmFtX2J5dGVzKGxlYWYsCi0JCQkJCQkJCWV4dGVudCk7Ci0JCQkJZm91bmRfZXh0ZW50ID0gMTsKLQkJCX0gZWxzZSBpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9JTkxJTkUpIHsKLQkJCQlmb3VuZF9pbmxpbmUgPSAxOwotCQkJCWV4dGVudF9lbmQgPSBrZXkub2Zmc2V0ICsKLQkJCQkgICAgIGJ0cmZzX2ZpbGVfZXh0ZW50X2lubGluZV9sZW4obGVhZiwgZXh0ZW50KTsKK25leHRfc2xvdDoKKwkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQlpZiAocGF0aC0+c2xvdHNbMF0gPj0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZikpIHsKKwkJCUJVR19PTihkZWxfbnIgPiAwKTsKKwkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCQkJaWYgKHJldCA+IDApIHsKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOwogCQkJfQorCQkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQkJcmVjb3cgPSAxOworCQl9CisKKwkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKKwkJaWYgKGtleS5vYmplY3RpZCA+IGlub2RlLT5pX2lubyB8fAorCQkgICAga2V5LnR5cGUgPiBCVFJGU19FWFRFTlRfREFUQV9LRVkgfHwga2V5Lm9mZnNldCA+PSBlbmQpCisJCQlicmVhazsKKworCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CisJCWV4dGVudF90eXBlID0gYnRyZnNfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBmaSk7CisKKwkJaWYgKGV4dGVudF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX1JFRyB8fAorCQkgICAgZXh0ZW50X3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpIHsKKwkJCWRpc2tfYnl0ZW5yID0gYnRyZnNfZmlsZV9leHRlbnRfZGlza19ieXRlbnIobGVhZiwgZmkpOworCQkJbnVtX2J5dGVzID0gYnRyZnNfZmlsZV9leHRlbnRfZGlza19udW1fYnl0ZXMobGVhZiwgZmkpOworCQkJZXh0ZW50X29mZnNldCA9IGJ0cmZzX2ZpbGVfZXh0ZW50X29mZnNldChsZWFmLCBmaSk7CisJCQlleHRlbnRfZW5kID0ga2V5Lm9mZnNldCArCisJCQkJYnRyZnNfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpKTsKKwkJfSBlbHNlIGlmIChleHRlbnRfdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9JTkxJTkUpIHsKKwkJCWV4dGVudF9lbmQgPSBrZXkub2Zmc2V0ICsKKwkJCQlidHJmc19maWxlX2V4dGVudF9pbmxpbmVfbGVuKGxlYWYsIGZpKTsKIAkJfSBlbHNlIHsKKwkJCVdBUk5fT04oMSk7CiAJCQlleHRlbnRfZW5kID0gc2VhcmNoX3N0YXJ0OwogCQl9CiAKLQkJLyogd2UgZm91bmQgbm90aGluZyB3ZSBjYW4gZHJvcCAqLwotCQlpZiAoKCFmb3VuZF9leHRlbnQgJiYgIWZvdW5kX2lubGluZSkgfHwKLQkJICAgIHNlYXJjaF9zdGFydCA+PSBleHRlbnRfZW5kKSB7Ci0JCQlpbnQgbmV4dHJldDsKLQkJCXUzMiBucml0ZW1zOwotCQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwotCQkJaWYgKHNsb3QgPj0gbnJpdGVtcyAtIDEpIHsKLQkJCQluZXh0cmV0ID0gYnRyZnNfbmV4dF9sZWFmKHJvb3QsIHBhdGgpOwotCQkJCWlmIChuZXh0cmV0KQotCQkJCQlnb3RvIG91dDsKLQkJCQlyZWNvdyA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCXBhdGgtPnNsb3RzWzBdKys7Ci0JCQl9CisJCWlmIChleHRlbnRfZW5kIDw9IHNlYXJjaF9zdGFydCkgeworCQkJcGF0aC0+c2xvdHNbMF0rKzsKIAkJCWdvdG8gbmV4dF9zbG90OwogCQl9CiAKLQkJaWYgKGVuZCA8PSBleHRlbnRfZW5kICYmIHN0YXJ0ID49IGtleS5vZmZzZXQgJiYgZm91bmRfaW5saW5lKQotCQkJKmhpbnRfYnl0ZSA9IEVYVEVOVF9NQVBfSU5MSU5FOwotCi0JCWlmIChmb3VuZF9leHRlbnQpIHsKLQkJCXJlYWRfZXh0ZW50X2J1ZmZlcihsZWFmLCAmb2xkLCAodW5zaWduZWQgbG9uZylleHRlbnQsCi0JCQkJCSAgIHNpemVvZihvbGQpKTsKLQkJfQotCi0JCWlmIChlbmQgPCBleHRlbnRfZW5kICYmIGVuZCA+PSBrZXkub2Zmc2V0KSB7Ci0JCQlib29rZW5kID0gMTsKLQkJCWlmIChmb3VuZF9pbmxpbmUgJiYgc3RhcnQgPD0ga2V5Lm9mZnNldCkKLQkJCQlrZWVwID0gMTsKLQkJfQotCi0JCWlmIChib29rZW5kICYmIGZvdW5kX2V4dGVudCkgewotCQkJaWYgKGxvY2tlZF9lbmQgPCBleHRlbnRfZW5kKSB7Ci0JCQkJcmV0ID0gdHJ5X2xvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCWxvY2tlZF9lbmQsIGV4dGVudF9lbmQgLSAxLAotCQkJCQkJR0ZQX05PRlMpOwotCQkJCWlmICghcmV0KSB7Ci0JCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQkJCQkJbG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkJbG9ja2VkX2VuZCwgZXh0ZW50X2VuZCAtIDEsCi0JCQkJCQlHRlBfTk9GUyk7Ci0JCQkJCWxvY2tlZF9lbmQgPSBleHRlbnRfZW5kOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJbG9ja2VkX2VuZCA9IGV4dGVudF9lbmQ7Ci0JCQl9Ci0JCQlkaXNrX2J5dGVuciA9IGxlNjRfdG9fY3B1KG9sZC5kaXNrX2J5dGVucik7Ci0JCQlpZiAoZGlza19ieXRlbnIgIT0gMCkgewotCQkJCXJldCA9IGJ0cmZzX2luY19leHRlbnRfcmVmKHRyYW5zLCByb290LAotCQkJCQkgICBkaXNrX2J5dGVuciwKLQkJCQkJICAgbGU2NF90b19jcHUob2xkLmRpc2tfbnVtX2J5dGVzKSwgMCwKLQkJCQkJICAgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCSAgIGtleS5vYmplY3RpZCwga2V5Lm9mZnNldCAtCi0JCQkJCSAgIGxlNjRfdG9fY3B1KG9sZC5vZmZzZXQpKTsKLQkJCQlCVUdfT04ocmV0KTsKLQkJCX0KLQkJfQotCi0JCWlmIChmb3VuZF9pbmxpbmUpIHsKLQkJCXU2NCBtYXNrID0gcm9vdC0+c2VjdG9yc2l6ZSAtIDE7Ci0JCQlzZWFyY2hfc3RhcnQgPSAoZXh0ZW50X2VuZCArIG1hc2spICYgfm1hc2s7Ci0JCX0gZWxzZQotCQkJc2VhcmNoX3N0YXJ0ID0gZXh0ZW50X2VuZDsKLQotCQkvKiB0cnVuY2F0ZSBleGlzdGluZyBleHRlbnQgKi8KLQkJaWYgKHN0YXJ0ID4ga2V5Lm9mZnNldCkgewotCQkJdTY0IG5ld19udW07Ci0JCQl1NjQgb2xkX251bTsKLQkJCWtlZXAgPSAxOwotCQkJV0FSTl9PTihzdGFydCAmIChyb290LT5zZWN0b3JzaXplIC0gMSkpOwotCQkJaWYgKGZvdW5kX2V4dGVudCkgewotCQkJCW5ld19udW0gPSBzdGFydCAtIGtleS5vZmZzZXQ7Ci0JCQkJb2xkX251bSA9IGJ0cmZzX2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLAotCQkJCQkJCQkgICAgICBleHRlbnQpOwotCQkJCSpoaW50X2J5dGUgPQotCQkJCQlidHJmc19maWxlX2V4dGVudF9kaXNrX2J5dGVucihsZWFmLAotCQkJCQkJCQkgICAgICBleHRlbnQpOwotCQkJCWlmIChidHJmc19maWxlX2V4dGVudF9kaXNrX2J5dGVucihsZWFmLAotCQkJCQkJCQkgIGV4dGVudCkpIHsKLQkJCQkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBvbGRfbnVtIC0KLQkJCQkJCQluZXdfbnVtKTsKLQkJCQl9Ci0JCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLAotCQkJCQkJCWV4dGVudCwgbmV3X251bSk7Ci0JCQkJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7Ci0JCQl9IGVsc2UgaWYgKGtleS5vZmZzZXQgPCBpbmxpbmVfbGltaXQgJiYKLQkJCQkgICAoZW5kID4gZXh0ZW50X2VuZCkgJiYKLQkJCQkgICAoaW5saW5lX2xpbWl0IDwgZXh0ZW50X2VuZCkpIHsKLQkJCQl1MzIgbmV3X3NpemU7Ci0JCQkJbmV3X3NpemUgPSBidHJmc19maWxlX2V4dGVudF9jYWxjX2lubGluZV9zaXplKAotCQkJCQkJICAgaW5saW5lX2xpbWl0IC0ga2V5Lm9mZnNldCk7Ci0JCQkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBleHRlbnRfZW5kIC0KLQkJCQkJCWlubGluZV9saW1pdCk7Ci0JCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3JhbV9ieXRlcyhsZWFmLCBleHRlbnQsCi0JCQkJCQkJbmV3X3NpemUpOwotCQkJCWlmICghY29tcHJlc3Npb24gJiYgIWVuY3J5cHRpb24pIHsKLQkJCQkJYnRyZnNfdHJ1bmNhdGVfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwKLQkJCQkJCQkgICAgbmV3X3NpemUsIDEpOwotCQkJCX0KLQkJCX0KLQkJfQotCQkvKiBkZWxldGUgdGhlIGVudGlyZSBleHRlbnQgKi8KLQkJaWYgKCFrZWVwKSB7Ci0JCQlpZiAoZm91bmRfaW5saW5lKQotCQkJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgZXh0ZW50X2VuZCAtCi0JCQkJCQlrZXkub2Zmc2V0KTsKLQkJCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKLQkJCS8qIFRPRE8gdXBkYXRlIHByb2dyZXNzIG1hcmtlciBhbmQgcmV0dXJuICovCi0JCQlCVUdfT04ocmV0KTsKLQkJCWV4dGVudCA9IE5VTEw7CisJCXNlYXJjaF9zdGFydCA9IG1heChrZXkub2Zmc2V0LCBzdGFydCk7CisJCWlmIChyZWNvdykgewogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJLyogdGhlIGV4dGVudCB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYm9va2VuZCAmJiBmb3VuZF9pbmxpbmUgJiYgc3RhcnQgPD0ga2V5Lm9mZnNldCkgewotCQkJdTMyIG5ld19zaXplOwotCQkJbmV3X3NpemUgPSBidHJmc19maWxlX2V4dGVudF9jYWxjX2lubGluZV9zaXplKAotCQkJCQkJICAgZXh0ZW50X2VuZCAtIGVuZCk7Ci0JCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIGVuZCAtIGtleS5vZmZzZXQpOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3JhbV9ieXRlcyhsZWFmLCBleHRlbnQsCi0JCQkJCQkJbmV3X3NpemUpOwotCQkJaWYgKCFjb21wcmVzc2lvbiAmJiAhZW5jcnlwdGlvbikKLQkJCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pdGVtKHRyYW5zLCByb290LCBwYXRoLAotCQkJCQkJCSAgbmV3X3NpemUsIDApOwotCQkJQlVHX09OKHJldCk7Ci0JCX0KLQkJLyogY3JlYXRlIGJvb2tlbmQsIHNwbGl0dGluZyB0aGUgZXh0ZW50IGluIHR3byAqLwotCQlpZiAoYm9va2VuZCAmJiBmb3VuZF9leHRlbnQpIHsKLQkJCXN0cnVjdCBidHJmc19rZXkgaW5zOwotCQkJaW5zLm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOwotCQkJaW5zLm9mZnNldCA9IGVuZDsKLQkJCWJ0cmZzX3NldF9rZXlfdHlwZSgmaW5zLCBCVFJGU19FWFRFTlRfREFUQV9LRVkpOwogCi0JCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7Ci0JCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7Ci0JCQlyZXQgPSBidHJmc19pbnNlcnRfZW1wdHlfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgJmlucywKLQkJCQkJCSAgICAgIHNpemVvZigqZXh0ZW50KSk7Ci0JCQlCVUdfT04ocmV0KTsKKwkJLyoKKwkJICogICAgIHwgLSByYW5nZSB0byBkcm9wIC0gfAorCQkgKiAgfCAtLS0tLS0tLSBleHRlbnQgLS0tLS0tLS0gfAorCQkgKi8KKwkJaWYgKHN0YXJ0ID4ga2V5Lm9mZnNldCAmJiBlbmQgPCBleHRlbnRfZW5kKSB7CisJCQlCVUdfT04oZGVsX25yID4gMCk7CisJCQlCVUdfT04oZXh0ZW50X3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfSU5MSU5FKTsKKworCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOworCQkJbmV3X2tleS5vZmZzZXQgPSBzdGFydDsKKwkJCXJldCA9IGJ0cmZzX2R1cGxpY2F0ZV9pdGVtKHRyYW5zLCByb290LCBwYXRoLAorCQkJCQkJICAgJm5ld19rZXkpOworCQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHJldCA8IDApCisJCQkJYnJlYWs7CiAKIAkJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQkJCWV4dGVudCA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAotCQkJCQkJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCQkJd3JpdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCAmb2xkLAotCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpZXh0ZW50LCBzaXplb2Yob2xkKSk7CisJCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdIC0gMSwKKwkJCQkJICAgIHN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtKTsKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJc3RhcnQgLSBrZXkub2Zmc2V0KTsKIAotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2NvbXByZXNzaW9uKGxlYWYsIGV4dGVudCwKLQkJCQkJCQkgIGNvbXByZXNzaW9uKTsKLQkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9lbmNyeXB0aW9uKGxlYWYsIGV4dGVudCwKLQkJCQkJCQkgZW5jcnlwdGlvbik7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfb3RoZXJfZW5jb2RpbmcobGVhZiwgZXh0ZW50LAotCQkJCQkJCSAgICAgb3RoZXJfZW5jb2RpbmcpOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X29mZnNldChsZWFmLCBleHRlbnQsCi0JCQkJICAgIGxlNjRfdG9fY3B1KG9sZC5vZmZzZXQpICsgZW5kIC0ga2V5Lm9mZnNldCk7Ci0JCQlXQVJOX09OKGxlNjRfdG9fY3B1KG9sZC5udW1fYnl0ZXMpIDwKLQkJCQkoZXh0ZW50X2VuZCAtIGVuZCkpOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBleHRlbnQsCi0JCQkJCQkJZXh0ZW50X2VuZCAtIGVuZCk7CisJCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwogCi0JCQkvKgotCQkJICogc2V0IHRoZSByYW0gYnl0ZXMgdG8gdGhlIHNpemUgb2YgdGhlIGZ1bGwgZXh0ZW50Ci0JCQkgKiBiZWZvcmUgc3BsaXR0aW5nLiAgVGhpcyBpcyBhIHdvcnN0IGNhc2UgZmxhZywKLQkJCSAqIGJ1dCBpdHMgdGhlIGJlc3Qgd2UgY2FuIGRvIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdwotCQkJICogaG93IHNwbGl0dGluZyBhZmZlY3RzIGNvbXByZXNzaW9uCi0JCQkgKi8KLQkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9yYW1fYnl0ZXMobGVhZiwgZXh0ZW50LAotCQkJCQkJCXJhbV9ieXRlcyk7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBleHRlbnQsIGZvdW5kX3R5cGUpOworCQkJZXh0ZW50X29mZnNldCArPSBzdGFydCAtIGtleS5vZmZzZXQ7CisJCQlidHJmc19zZXRfZmlsZV9leHRlbnRfb2Zmc2V0KGxlYWYsIGZpLCBleHRlbnRfb2Zmc2V0KTsKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJZXh0ZW50X2VuZCAtIHN0YXJ0KTsKKwkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCi0JCQlidHJmc191bmxvY2tfdXBfc2FmZShwYXRoLCAxKTsKLQkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHBhdGgtPm5vZGVzWzBdKTsKLQkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKHBhdGgtPm5vZGVzWzBdKTsKLQotCQkJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAwOwotCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJaWYgKGRpc2tfYnl0ZW5yICE9IDApCi0JCQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBleHRlbnRfZW5kIC0gZW5kKTsKLQkJfQotCi0JCWlmIChmb3VuZF9leHRlbnQgJiYgIWtlZXApIHsKLQkJCXU2NCBvbGRfZGlza19ieXRlbnIgPSBsZTY0X3RvX2NwdShvbGQuZGlza19ieXRlbnIpOwotCi0JCQlpZiAob2xkX2Rpc2tfYnl0ZW5yICE9IDApIHsKLQkJCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsCi0JCQkJCQlsZTY0X3RvX2NwdShvbGQubnVtX2J5dGVzKSk7Ci0JCQkJcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsCi0JCQkJCQlvbGRfZGlza19ieXRlbnIsCi0JCQkJCQlsZTY0X3RvX2NwdShvbGQuZGlza19udW1fYnl0ZXMpLAotCQkJCQkJMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCQlrZXkub2JqZWN0aWQsIGtleS5vZmZzZXQgLQotCQkJCQkJbGU2NF90b19jcHUob2xkLm9mZnNldCkpOworCQkJaWYgKGRpc2tfYnl0ZW5yID4gMCkgeworCQkJCXJldCA9IGJ0cmZzX2luY19leHRlbnRfcmVmKHRyYW5zLCByb290LAorCQkJCQkJZGlza19ieXRlbnIsIG51bV9ieXRlcywgMCwKKwkJCQkJCXJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAorCQkJCQkJbmV3X2tleS5vYmplY3RpZCwKKwkJCQkJCXN0YXJ0IC0gZXh0ZW50X29mZnNldCk7CiAJCQkJQlVHX09OKHJldCk7Ci0JCQkJKmhpbnRfYnl0ZSA9IG9sZF9kaXNrX2J5dGVucjsKKwkJCQkqaGludF9ieXRlID0gZGlza19ieXRlbnI7CiAJCQl9CisJCQlrZXkub2Zmc2V0ID0gc3RhcnQ7CisJCX0KKwkJLyoKKwkJICogIHwgLS0tLSByYW5nZSB0byBkcm9wIC0tLS0tIHwKKwkJICogICAgICB8IC0tLS0tLS0tIGV4dGVudCAtLS0tLS0tLSB8CisJCSAqLworCQlpZiAoc3RhcnQgPD0ga2V5Lm9mZnNldCAmJiBlbmQgPCBleHRlbnRfZW5kKSB7CisJCQlCVUdfT04oZXh0ZW50X3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfSU5MSU5FKTsKKworCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOworCQkJbmV3X2tleS5vZmZzZXQgPSBlbmQ7CisJCQlidHJmc19zZXRfaXRlbV9rZXlfc2FmZSh0cmFucywgcm9vdCwgcGF0aCwgJm5ld19rZXkpOworCisJCQlleHRlbnRfb2Zmc2V0ICs9IGVuZCAtIGtleS5vZmZzZXQ7CisJCQlidHJmc19zZXRfZmlsZV9leHRlbnRfb2Zmc2V0KGxlYWYsIGZpLCBleHRlbnRfb2Zmc2V0KTsKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJZXh0ZW50X2VuZCAtIGVuZCk7CisJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKKwkJCWlmIChkaXNrX2J5dGVuciA+IDApIHsKKwkJCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIGVuZCAtIGtleS5vZmZzZXQpOworCQkJCSpoaW50X2J5dGUgPSBkaXNrX2J5dGVucjsKKwkJCX0KKwkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHNlYXJjaF9zdGFydCA+PSBlbmQpIHsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKKwkJc2VhcmNoX3N0YXJ0ID0gZXh0ZW50X2VuZDsKKwkJLyoKKwkJICogICAgICAgfCAtLS0tIHJhbmdlIHRvIGRyb3AgLS0tLS0gfAorCQkgKiAgfCAtLS0tLS0tLSBleHRlbnQgLS0tLS0tLS0gfAorCQkgKi8KKwkJaWYgKHN0YXJ0ID4ga2V5Lm9mZnNldCAmJiBlbmQgPj0gZXh0ZW50X2VuZCkgeworCQkJQlVHX09OKGRlbF9uciA+IDApOworCQkJQlVHX09OKGV4dGVudF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX0lOTElORSk7CisKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJc3RhcnQgLSBrZXkub2Zmc2V0KTsKKwkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOworCQkJaWYgKGRpc2tfYnl0ZW5yID4gMCkgeworCQkJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgZXh0ZW50X2VuZCAtIHN0YXJ0KTsKKwkJCQkqaGludF9ieXRlID0gZGlza19ieXRlbnI7CisJCQl9CisJCQlpZiAoZW5kID09IGV4dGVudF9lbmQpCisJCQkJYnJlYWs7CisKKwkJCXBhdGgtPnNsb3RzWzBdKys7CisJCQlnb3RvIG5leHRfc2xvdDsKIAkJfQorCisJCS8qCisJCSAqICB8IC0tLS0gcmFuZ2UgdG8gZHJvcCAtLS0tLSB8CisJCSAqICAgIHwgLS0tLS0tIGV4dGVudCAtLS0tLS0gfAorCQkgKi8KKwkJaWYgKHN0YXJ0IDw9IGtleS5vZmZzZXQgJiYgZW5kID49IGV4dGVudF9lbmQpIHsKKwkJCWlmIChkZWxfbnIgPT0gMCkgeworCQkJCWRlbF9zbG90ID0gcGF0aC0+c2xvdHNbMF07CisJCQkJZGVsX25yID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJQlVHX09OKGRlbF9zbG90ICsgZGVsX25yICE9IHBhdGgtPnNsb3RzWzBdKTsKKwkJCQlkZWxfbnIrKzsKKwkJCX0KKworCQkJaWYgKGV4dGVudF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX0lOTElORSkgeworCQkJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwKKwkJCQkJCWV4dGVudF9lbmQgLSBrZXkub2Zmc2V0KTsKKwkJCQlleHRlbnRfZW5kID0gQUxJR04oZXh0ZW50X2VuZCwKKwkJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUpOworCQkJfSBlbHNlIGlmIChkaXNrX2J5dGVuciA+IDApIHsKKwkJCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwKKwkJCQkJCWRpc2tfYnl0ZW5yLCBudW1fYnl0ZXMsIDAsCisJCQkJCQlyb290LT5yb290X2tleS5vYmplY3RpZCwKKwkJCQkJCWtleS5vYmplY3RpZCwga2V5Lm9mZnNldCAtCisJCQkJCQlleHRlbnRfb2Zmc2V0KTsKKwkJCQlCVUdfT04ocmV0KTsKKwkJCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsCisJCQkJCQlleHRlbnRfZW5kIC0ga2V5Lm9mZnNldCk7CisJCQkJKmhpbnRfYnl0ZSA9IGRpc2tfYnl0ZW5yOworCQkJfQorCisJCQlpZiAoZW5kID09IGV4dGVudF9lbmQpCisJCQkJYnJlYWs7CisKKwkJCWlmIChwYXRoLT5zbG90c1swXSArIDEgPCBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKSkgeworCQkJCXBhdGgtPnNsb3RzWzBdKys7CisJCQkJZ290byBuZXh0X3Nsb3Q7CisJCQl9CisKKwkJCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwgZGVsX3Nsb3QsCisJCQkJCSAgICAgIGRlbF9ucik7CisJCQlCVUdfT04ocmV0KTsKKworCQkJZGVsX25yID0gMDsKKwkJCWRlbF9zbG90ID0gMDsKKworCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCQkJY29udGludWU7CisJCX0KKworCQlCVUdfT04oMSk7CiAJfQotb3V0OgorCisJaWYgKGRlbF9uciA+IDApIHsKKwkJcmV0ID0gYnRyZnNfZGVsX2l0ZW1zKHRyYW5zLCByb290LCBwYXRoLCBkZWxfc2xvdCwgZGVsX25yKTsKKwkJQlVHX09OKHJldCk7CisJfQorCiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCWlmIChsb2NrZWRfZW5kID4gb3JpZ19sb2NrZWRfZW5kKSB7Ci0JCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBvcmlnX2xvY2tlZF9lbmQsCi0JCQkgICAgICBsb2NrZWRfZW5kIC0gMSwgR0ZQX05PRlMpOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjAsMjMgKzU0NCwyMyBAQAogICogdHdvIG9yIHRocmVlLgogICovCiBpbnQgYnRyZnNfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogeworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmZpOwogCXN0cnVjdCBidHJmc19rZXkga2V5OworCXN0cnVjdCBidHJmc19rZXkgbmV3X2tleTsKIAl1NjQgYnl0ZW5yOwogCXU2NCBudW1fYnl0ZXM7CiAJdTY0IGV4dGVudF9lbmQ7CiAJdTY0IG9yaWdfb2Zmc2V0OwogCXU2NCBvdGhlcl9zdGFydDsKIAl1NjQgb3RoZXJfZW5kOwotCXU2NCBzcGxpdCA9IHN0YXJ0OwotCXU2NCBsb2NrZWRfZW5kID0gZW5kOwotCWludCBleHRlbnRfdHlwZTsKLQlpbnQgc3BsaXRfZW5kID0gMTsKKwl1NjQgc3BsaXQ7CisJaW50IGRlbF9uciA9IDA7CisJaW50IGRlbF9zbG90ID0gMDsKIAlpbnQgcmV0OwogCiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBlbmQgLSAxLCAwKTsKQEAgLTY0NCwxMiArNTY4LDEwIEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOwogYWdhaW46CisJc3BsaXQgPSBzdGFydDsKIAlrZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJa2V5LnR5cGUgPSBCVFJGU19FWFRFTlRfREFUQV9LRVk7Ci0JaWYgKHNwbGl0ID09IHN0YXJ0KQotCQlrZXkub2Zmc2V0ID0gc3BsaXQ7Ci0JZWxzZQotCQlrZXkub2Zmc2V0ID0gc3BsaXQgLSAxOworCWtleS5vZmZzZXQgPSBzcGxpdDsKIAogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJaWYgKHJldCA+IDAgJiYgcGF0aC0+c2xvdHNbMF0gPiAwKQpAQCAtNjYxLDggKzU4Myw4IEBACiAJICAgICAgIGtleS50eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7Ci0JZXh0ZW50X3R5cGUgPSBidHJmc19maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpKTsKLQlCVUdfT04oZXh0ZW50X3R5cGUgIT0gQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpOworCUJVR19PTihidHJmc19maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpKSAhPQorCSAgICAgICBCVFJGU19GSUxFX0VYVEVOVF9QUkVBTExPQyk7CiAJZXh0ZW50X2VuZCA9IGtleS5vZmZzZXQgKyBidHJmc19maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmkpOwogCUJVR19PTihrZXkub2Zmc2V0ID4gc3RhcnQgfHwgZXh0ZW50X2VuZCA8IGVuZCk7CiAKQEAgLTY3MCwxNTAgKzU5Miw5MSBAQAogCW51bV9ieXRlcyA9IGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfbnVtX2J5dGVzKGxlYWYsIGZpKTsKIAlvcmlnX29mZnNldCA9IGtleS5vZmZzZXQgLSBidHJmc19maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmkpOwogCi0JaWYgKGtleS5vZmZzZXQgPT0gc3RhcnQpCi0JCXNwbGl0ID0gZW5kOworCXdoaWxlIChzdGFydCA+IGtleS5vZmZzZXQgfHwgZW5kIDwgZXh0ZW50X2VuZCkgeworCQlpZiAoa2V5Lm9mZnNldCA9PSBzdGFydCkKKwkJCXNwbGl0ID0gZW5kOwogCi0JaWYgKGtleS5vZmZzZXQgPT0gc3RhcnQgJiYgZXh0ZW50X2VuZCA9PSBlbmQpIHsKLQkJaW50IGRlbF9uciA9IDA7Ci0JCWludCBkZWxfc2xvdCA9IDA7Ci0JCW90aGVyX3N0YXJ0ID0gZW5kOwotCQlvdGhlcl9lbmQgPSAwOwotCQlpZiAoZXh0ZW50X21lcmdlYWJsZShsZWFmLCBwYXRoLT5zbG90c1swXSArIDEsIGlub2RlLT5pX2lubywKLQkJCQkgICAgIGJ5dGVuciwgJm90aGVyX3N0YXJ0LCAmb3RoZXJfZW5kKSkgewotCQkJZXh0ZW50X2VuZCA9IG90aGVyX2VuZDsKLQkJCWRlbF9zbG90ID0gcGF0aC0+c2xvdHNbMF0gKyAxOwotCQkJZGVsX25yKys7Ci0JCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsCi0JCQkJCQkwLCByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkJCWlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOwotCQkJQlVHX09OKHJldCk7CisJCW1lbWNweSgmbmV3X2tleSwgJmtleSwgc2l6ZW9mKG5ld19rZXkpKTsKKwkJbmV3X2tleS5vZmZzZXQgPSBzcGxpdDsKKwkJcmV0ID0gYnRyZnNfZHVwbGljYXRlX2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsICZuZXdfa2V5KTsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CisJCQlnb3RvIGFnYWluOwogCQl9Ci0JCW90aGVyX3N0YXJ0ID0gMDsKLQkJb3RoZXJfZW5kID0gc3RhcnQ7Ci0JCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdIC0gMSwgaW5vZGUtPmlfaW5vLAotCQkJCSAgICAgYnl0ZW5yLCAmb3RoZXJfc3RhcnQsICZvdGhlcl9lbmQpKSB7Ci0JCQlrZXkub2Zmc2V0ID0gb3RoZXJfc3RhcnQ7Ci0JCQlkZWxfc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQkJZGVsX25yKys7Ci0JCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsCi0JCQkJCQkwLCByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkJCWlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOwotCQkJQlVHX09OKHJldCk7Ci0JCX0KLQkJc3BsaXRfZW5kID0gMDsKLQkJaWYgKGRlbF9uciA9PSAwKSB7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBmaSwKLQkJCQkJCSAgIEJUUkZTX0ZJTEVfRVhURU5UX1JFRyk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KKwkJQlVHX09OKHJldCA8IDApOwogCi0JCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgZGVsX3Nsb3QgLSAxLAorCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0gLSAxLAogCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7Ci0JCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLCBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOwogCQlidHJmc19zZXRfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpLAotCQkJCQkJZXh0ZW50X2VuZCAtIGtleS5vZmZzZXQpOworCQkJCQkJc3BsaXQgLSBrZXkub2Zmc2V0KTsKKworCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CisKKwkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X29mZnNldChsZWFmLCBmaSwgc3BsaXQgLSBvcmlnX29mZnNldCk7CisJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQlleHRlbnRfZW5kIC0gc3BsaXQpOwogCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAotCQlyZXQgPSBidHJmc19kZWxfaXRlbXModHJhbnMsIHJvb3QsIHBhdGgsIGRlbF9zbG90LCBkZWxfbnIpOworCQlyZXQgPSBidHJmc19pbmNfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDAsCisJCQkJCSAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAorCQkJCQkgICBpbm9kZS0+aV9pbm8sIG9yaWdfb2Zmc2V0KTsKIAkJQlVHX09OKHJldCk7Ci0JCWdvdG8gcmVsZWFzZTsKLQl9IGVsc2UgaWYgKHNwbGl0ID09IHN0YXJ0KSB7Ci0JCWlmIChsb2NrZWRfZW5kIDwgZXh0ZW50X2VuZCkgewotCQkJcmV0ID0gdHJ5X2xvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJbG9ja2VkX2VuZCwgZXh0ZW50X2VuZCAtIDEsIEdGUF9OT0ZTKTsKLQkJCWlmICghcmV0KSB7Ci0JCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJCWxvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJbG9ja2VkX2VuZCwgZXh0ZW50X2VuZCAtIDEsIEdGUF9OT0ZTKTsKLQkJCQlsb2NrZWRfZW5kID0gZXh0ZW50X2VuZDsKLQkJCQlnb3RvIGFnYWluOwotCQkJfQotCQkJbG9ja2VkX2VuZCA9IGV4dGVudF9lbmQ7Ci0JCX0KLQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgc3BsaXQgLSBrZXkub2Zmc2V0KTsKLQl9IGVsc2UgIHsKLQkJQlVHX09OKGtleS5vZmZzZXQgIT0gc3RhcnQpOwotCQlrZXkub2Zmc2V0ID0gc3BsaXQ7Ci0JCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmksIGtleS5vZmZzZXQgLQotCQkJCQkgICAgIG9yaWdfb2Zmc2V0KTsKLQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgZXh0ZW50X2VuZCAtIHNwbGl0KTsKLQkJYnRyZnNfc2V0X2l0ZW1fa2V5X3NhZmUodHJhbnMsIHJvb3QsIHBhdGgsICZrZXkpOwotCQlleHRlbnRfZW5kID0gc3BsaXQ7Ci0JfQogCi0JaWYgKGV4dGVudF9lbmQgPT0gZW5kKSB7Ci0JCXNwbGl0X2VuZCA9IDA7Ci0JCWV4dGVudF90eXBlID0gQlRSRlNfRklMRV9FWFRFTlRfUkVHOwotCX0KLQlpZiAoZXh0ZW50X2VuZCA9PSBlbmQgJiYgc3BsaXQgPT0gc3RhcnQpIHsKLQkJb3RoZXJfc3RhcnQgPSBlbmQ7Ci0JCW90aGVyX2VuZCA9IDA7Ci0JCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdICsgMSwgaW5vZGUtPmlfaW5vLAotCQkJCSAgICAgYnl0ZW5yLCAmb3RoZXJfc3RhcnQsICZvdGhlcl9lbmQpKSB7Ci0JCQlwYXRoLT5zbG90c1swXSsrOwotCQkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKLQkJCQkJICAgIHN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtKTsKLQkJCWtleS5vZmZzZXQgPSBzcGxpdDsKLQkJCWJ0cmZzX3NldF9pdGVtX2tleV9zYWZlKHRyYW5zLCByb290LCBwYXRoLCAma2V5KTsKLQkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmksIGtleS5vZmZzZXQgLQotCQkJCQkJICAgICBvcmlnX29mZnNldCk7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpLAotCQkJCQkJCW90aGVyX2VuZCAtIHNwbGl0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQlpZiAoZXh0ZW50X2VuZCA9PSBlbmQgJiYgc3BsaXQgPT0gZW5kKSB7Ci0JCW90aGVyX3N0YXJ0ID0gMDsKLQkJb3RoZXJfZW5kID0gc3RhcnQ7Ci0JCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdIC0gMSAsIGlub2RlLT5pX2lubywKLQkJCQkgICAgIGJ5dGVuciwgJm90aGVyX3N0YXJ0LCAmb3RoZXJfZW5kKSkgeworCQlpZiAoc3BsaXQgPT0gc3RhcnQpIHsKKwkJCWtleS5vZmZzZXQgPSBzdGFydDsKKwkJfSBlbHNlIHsKKwkJCUJVR19PTihzdGFydCAhPSBrZXkub2Zmc2V0KTsKIAkJCXBhdGgtPnNsb3RzWzBdLS07Ci0JCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAotCQkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgZXh0ZW50X2VuZCAtCi0JCQkJCQkJb3RoZXJfc3RhcnQpOwotCQkJZ290byBkb25lOworCQkJZXh0ZW50X2VuZCA9IGVuZDsKIAkJfQogCX0KIAotCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwotCi0JcmV0ID0gYnRyZnNfaW5jX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAwLAotCQkJCSAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCSAgIGlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOwotCUJVR19PTihyZXQpOwotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQotCWtleS5vZmZzZXQgPSBzdGFydDsKLQlyZXQgPSBidHJmc19pbnNlcnRfZW1wdHlfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgJmtleSwgc2l6ZW9mKCpmaSkpOwotCUJVR19PTihyZXQpOwotCi0JbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwogCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCiAJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCWJ0cmZzX3NldF9maWxlX2V4dGVudF9nZW5lcmF0aW9uKGxlYWYsIGZpLCB0cmFucy0+dHJhbnNpZCk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZmksIGV4dGVudF90eXBlKTsKLQlidHJmc19zZXRfZmlsZV9leHRlbnRfZGlza19ieXRlbnIobGVhZiwgZmksIGJ5dGVucik7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2Rpc2tfbnVtX2J5dGVzKGxlYWYsIGZpLCBudW1fYnl0ZXMpOwotCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmksIGtleS5vZmZzZXQgLSBvcmlnX29mZnNldCk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgZXh0ZW50X2VuZCAtIGtleS5vZmZzZXQpOwotCWJ0cmZzX3NldF9maWxlX2V4dGVudF9yYW1fYnl0ZXMobGVhZiwgZmksIG51bV9ieXRlcyk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2NvbXByZXNzaW9uKGxlYWYsIGZpLCAwKTsKLQlidHJmc19zZXRfZmlsZV9leHRlbnRfZW5jcnlwdGlvbihsZWFmLCBmaSwgMCk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X290aGVyX2VuY29kaW5nKGxlYWYsIGZpLCAwKTsKLWRvbmU6CisKKwlvdGhlcl9zdGFydCA9IGVuZDsKKwlvdGhlcl9lbmQgPSAwOworCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdICsgMSwgaW5vZGUtPmlfaW5vLAorCQkJICAgICBieXRlbnIsICZvdGhlcl9zdGFydCwgJm90aGVyX2VuZCkpIHsKKwkJZXh0ZW50X2VuZCA9IG90aGVyX2VuZDsKKwkJZGVsX3Nsb3QgPSBwYXRoLT5zbG90c1swXSArIDE7CisJCWRlbF9ucisrOworCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsCisJCQkJCTAsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAorCQkJCQlpbm9kZS0+aV9pbm8sIG9yaWdfb2Zmc2V0KTsKKwkJQlVHX09OKHJldCk7CisJfQorCW90aGVyX3N0YXJ0ID0gMDsKKwlvdGhlcl9lbmQgPSBzdGFydDsKKwlpZiAoZXh0ZW50X21lcmdlYWJsZShsZWFmLCBwYXRoLT5zbG90c1swXSAtIDEsIGlub2RlLT5pX2lubywKKwkJCSAgICAgYnl0ZW5yLCAmb3RoZXJfc3RhcnQsICZvdGhlcl9lbmQpKSB7CisJCWtleS5vZmZzZXQgPSBvdGhlcl9zdGFydDsKKwkJZGVsX3Nsb3QgPSBwYXRoLT5zbG90c1swXTsKKwkJZGVsX25yKys7CisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcywKKwkJCQkJMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCisJCQkJCWlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOworCQlCVUdfT04ocmV0KTsKKwl9CisJaWYgKGRlbF9uciA9PSAwKSB7CisJCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLAorCQkJCQkgICBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOworCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKKwkJZ290byBvdXQ7CisJfQorCisJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBkZWxfc2xvdCAtIDEsCisJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLCBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOworCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCWV4dGVudF9lbmQgLSBrZXkub2Zmc2V0KTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAotcmVsZWFzZToKLQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7Ci0JaWYgKHNwbGl0X2VuZCAmJiBzcGxpdCA9PSBzdGFydCkgewotCQlzcGxpdCA9IGVuZDsKLQkJZ290byBhZ2FpbjsKLQl9Ci0JaWYgKGxvY2tlZF9lbmQgPiBlbmQpIHsKLQkJdW5sb2NrX2V4dGVudCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIGVuZCwgbG9ja2VkX2VuZCAtIDEsCi0JCQkgICAgICBHRlBfTk9GUyk7Ci0JfQorCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwgZGVsX3Nsb3QsIGRlbF9ucik7CisJQlVHX09OKHJldCk7CitvdXQ6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggYjNhZDE2OC4uNTQ0MGJhYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC04OCwxMyArODgsMTQgQEAKIAkJCQkgICB1NjQgc3RhcnQsIHU2NCBlbmQsIGludCAqcGFnZV9zdGFydGVkLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgKm5yX3dyaXR0ZW4sIGludCB1bmxvY2spOwogCi1zdGF0aWMgaW50IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgIHN0cnVjdCBpbm9kZSAqZGlyKQorc3RhdGljIGludCBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgIHN0cnVjdCBpbm9kZSAqZGlyKQogewogCWludCBlcnI7CiAKLQllcnIgPSBidHJmc19pbml0X2FjbChpbm9kZSwgZGlyKTsKKwllcnIgPSBidHJmc19pbml0X2FjbCh0cmFucywgaW5vZGUsIGRpcik7CiAJaWYgKCFlcnIpCi0JCWVyciA9IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQoaW5vZGUsIGRpcik7CisJCWVyciA9IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQodHJhbnMsIGlub2RlLCBkaXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4OCw4ICsxODksMTggQEAKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAKKwkvKgorCSAqIHdlJ3JlIGFuIGlubGluZSBleHRlbnQsIHNvIG5vYm9keSBjYW4KKwkgKiBleHRlbmQgdGhlIGZpbGUgcGFzdCBpX3NpemUgd2l0aG91dCBsb2NraW5nCisJICogYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2NrZWQuCisJICoKKwkgKiBXZSBtdXN0IGRvIGFueSBpc2l6ZSBhbmQgaW5vZGUgdXBkYXRlcworCSAqIGJlZm9yZSB3ZSB1bmxvY2sgdGhlIHBhZ2VzLiAgT3RoZXJ3aXNlIHdlCisJICogY291bGQgZW5kIHVwIHJhY2luZyB3aXRoIHVubGluay4KKwkgKi8KIAlCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUgPSBpbm9kZS0+aV9zaXplOwogCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOworCiAJcmV0dXJuIDA7CiBmYWlsOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTIzMCw4ICsyNDEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIHJvb3QsIGlub2RlLCBzdGFydCwKLQkJCQkgYWxpZ25lZF9lbmQsIGFsaWduZWRfZW5kLCBzdGFydCwKKwlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBzdGFydCwgYWxpZ25lZF9lbmQsCiAJCQkJICZoaW50X2J5dGUsIDEpOwogCUJVR19PTihyZXQpOwogCkBAIC00MTYsNyArNDI2LDYgQEAKIAkJCQkJCSAgICBzdGFydCwgZW5kLAogCQkJCQkJICAgIHRvdGFsX2NvbXByZXNzZWQsIHBhZ2VzKTsKIAkJfQotCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCS8qCiAJCQkgKiBpbmxpbmUgZXh0ZW50IGNyZWF0aW9uIHdvcmtlZCwgd2UgZG9uJ3QgbmVlZApAQCAtNDMwLDkgKzQzOSwxMSBAQAogCQkJICAgICBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAogCQkJICAgICBFWFRFTlRfQ0xFQVJfQUNDT1VOVElORyB8CiAJCQkgICAgIEVYVEVOVF9TRVRfV1JJVEVCQUNLIHwgRVhURU5UX0VORF9XUklURUJBQ0spOwotCQkJcmV0ID0gMDsKKworCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWdvdG8gZnJlZV9wYWdlc19vdXQ7CiAJCX0KKwkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CiAKIAlpZiAod2lsbF9jb21wcmVzcykgewpAQCAtNTQzLDcgKzU1NCw2IEBACiAJaWYgKGxpc3RfZW1wdHkoJmFzeW5jX2Nvdy0+ZXh0ZW50cykpCiAJCXJldHVybiAwOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhc3luY19jb3ctPmV4dGVudHMpKSB7CiAJCWFzeW5jX2V4dGVudCA9IGxpc3RfZW50cnkoYXN5bmNfY293LT5leHRlbnRzLm5leHQsCkBAIC01OTAsMTkgKzYwMCwxNSBAQAogCQlsb2NrX2V4dGVudChpb190cmVlLCBhc3luY19leHRlbnQtPnN0YXJ0LAogCQkJICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKyBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwKIAkJCSAgICBHRlBfTk9GUyk7Ci0JCS8qCi0JCSAqIGhlcmUgd2UncmUgZG9pbmcgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIG9mIHRoZQotCQkgKiBjb21wcmVzc2VkIHBhZ2VzCi0JCSAqLwotCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKLQkJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJCWFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCAwKTsKIAorCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgYXN5bmNfZXh0ZW50LT5jb21wcmVzc2VkX3NpemUsCiAJCQkJCSAgIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCiAJCWlmIChyZXQpIHsKIAkJCWludCBpOwogCQkJZm9yIChpID0gMDsgaSA8IGFzeW5jX2V4dGVudC0+bnJfcGFnZXM7IGkrKykgewpAQCAtNjE4LDYgKzYyNCwxNCBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCisJCS8qCisJCSAqIGhlcmUgd2UncmUgZG9pbmcgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIG9mIHRoZQorCQkgKiBjb21wcmVzc2VkIHBhZ2VzCisJCSAqLworCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKKwkJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJCWFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCAwKTsKKwogCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwogCQllbS0+c3RhcnQgPSBhc3luY19leHRlbnQtPnN0YXJ0OwogCQllbS0+bGVuID0gYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZTsKQEAgLTY0OSw4ICs2NjMsNiBAQAogCQkJCQkgICAgICAgQlRSRlNfT1JERVJFRF9DT01QUkVTU0VEKTsKIAkJQlVHX09OKHJldCk7CiAKLQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQogCQkvKgogCQkgKiBjbGVhciBkaXJ0eSwgc2V0IHdyaXRlYmFjayBhbmQgdW5sb2NrIHRoZSBwYWdlcy4KIAkJICovCkBAIC02NzIsMTMgKzY4NCwxMSBAQAogCQkJCSAgICBhc3luY19leHRlbnQtPm5yX3BhZ2VzKTsKIAogCQlCVUdfT04ocmV0KTsKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCQlhbGxvY19oaW50ID0gaW5zLm9iamVjdGlkICsgaW5zLm9mZnNldDsKIAkJa2ZyZWUoYXN5bmNfZXh0ZW50KTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQyLDYgKzc1Miw3IEBACiAJCQkJICAgICBFWFRFTlRfQ0xFQVJfRElSVFkgfAogCQkJCSAgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfAogCQkJCSAgICAgRVhURU5UX0VORF9XUklURUJBQ0spOworCiAJCQkqbnJfd3JpdHRlbiA9ICpucl93cml0dGVuICsKIAkJCSAgICAgKGVuZCAtIHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFKSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCSpwYWdlX3N0YXJ0ZWQgPSAxOwpAQCAtMTU5Niw3ICsxNjA3LDYgQEAKIAkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZpbGVfcG9zLAogCQkJCSAgICAgICB1NjQgZGlza19ieXRlbnIsIHU2NCBkaXNrX251bV9ieXRlcywKIAkJCQkgICAgICAgdTY0IG51bV9ieXRlcywgdTY0IHJhbV9ieXRlcywKLQkJCQkgICAgICAgdTY0IGxvY2tlZF9lbmQsCiAJCQkJICAgICAgIHU4IGNvbXByZXNzaW9uLCB1OCBlbmNyeXB0aW9uLAogCQkJCSAgICAgICB1MTYgb3RoZXJfZW5jb2RpbmcsIGludCBleHRlbnRfdHlwZSkKIHsKQEAgLTE2MjIsOSArMTYzMiw4IEBACiAJICogdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byB1bnBpbiBpdCBhbmQgYWxsb3cgaXQgdG8gYmUgbWVyZ2VkCiAJICogd2l0aCB0aGUgb3RoZXJzLgogCSAqLwotCXJldCA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgcm9vdCwgaW5vZGUsIGZpbGVfcG9zLAotCQkJCSBmaWxlX3BvcyArIG51bV9ieXRlcywgbG9ja2VkX2VuZCwKLQkJCQkgZmlsZV9wb3MsICZoaW50LCAwKTsKKwlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBmaWxlX3BvcywgZmlsZV9wb3MgKyBudW1fYnl0ZXMsCisJCQkJICZoaW50LCAwKTsKIAlCVUdfT04ocmV0KTsKIAogCWlucy5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKQEAgLTE3MzAsMjMgKzE3MzksMzIgQEAKIAkJfQogCX0KIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQogCWlmICghb3JkZXJlZF9leHRlbnQpCiAJCW9yZGVyZWRfZXh0ZW50ID0gYnRyZnNfbG9va3VwX29yZGVyZWRfZXh0ZW50KGlub2RlLCBzdGFydCk7CiAJQlVHX09OKCFvcmRlcmVkX2V4dGVudCk7Ci0JaWYgKHRlc3RfYml0KEJUUkZTX09SREVSRURfTk9DT1csICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKQotCQlnb3RvIG5vY293OworCWlmICh0ZXN0X2JpdChCVFJGU19PUkRFUkVEX05PQ09XLCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJm9yZGVyZWRfZXh0ZW50LT5saXN0KSk7CisJCXJldCA9IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZF9leHRlbnQpOworCQlpZiAoIXJldCkgeworCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJCQlCVUdfT04ocmV0KTsKKwkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQogCiAJbG9ja19leHRlbnQoaW9fdHJlZSwgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkgICAgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0ICsgb3JkZXJlZF9leHRlbnQtPmxlbiAtIDEsCiAJCSAgICBHRlBfTk9GUyk7CiAKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisKIAlpZiAodGVzdF9iaXQoQlRSRlNfT1JERVJFRF9DT01QUkVTU0VELCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkKIAkJY29tcHJlc3NlZCA9IDE7CiAJaWYgKHRlc3RfYml0KEJUUkZTX09SREVSRURfUFJFQUxMT0MsICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKSB7CiAJCUJVR19PTihjb21wcmVzc2VkKTsKLQkJcmV0ID0gYnRyZnNfbWFya19leHRlbnRfd3JpdHRlbih0cmFucywgcm9vdCwgaW5vZGUsCisJCXJldCA9IGJ0cmZzX21hcmtfZXh0ZW50X3dyaXR0ZW4odHJhbnMsIGlub2RlLAogCQkJCQkJb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkJCQkJb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0ICsKIAkJCQkJCW9yZGVyZWRfZXh0ZW50LT5sZW4pOwpAQCAtMTc1OCw4ICsxNzc2LDYgQEAKIAkJCQkJCW9yZGVyZWRfZXh0ZW50LT5kaXNrX2xlbiwKIAkJCQkJCW9yZGVyZWRfZXh0ZW50LT5sZW4sCiAJCQkJCQlvcmRlcmVkX2V4dGVudC0+bGVuLAotCQkJCQkJb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0ICsKLQkJCQkJCW9yZGVyZWRfZXh0ZW50LT5sZW4sCiAJCQkJCQljb21wcmVzc2VkLCAwLCAwLAogCQkJCQkJQlRSRlNfRklMRV9FWFRFTlRfUkVHKTsKIAkJdW5waW5fZXh0ZW50X2NhY2hlKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWUsCkBAIC0xNzcwLDIyICsxNzg2LDIwIEBACiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBvcmRlcmVkX2V4dGVudC0+ZmlsZV9vZmZzZXQsCiAJCSAgICBvcmRlcmVkX2V4dGVudC0+ZmlsZV9vZmZzZXQgKyBvcmRlcmVkX2V4dGVudC0+bGVuIC0gMSwKIAkJICAgIEdGUF9OT0ZTKTsKLW5vY293OgogCWFkZF9wZW5kaW5nX2NzdW1zKHRyYW5zLCBpbm9kZSwgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkJICAmb3JkZXJlZF9leHRlbnQtPmxpc3QpOwogCi0JbXV0ZXhfbG9jaygmQlRSRlNfSShpbm9kZSktPmV4dGVudF9tdXRleCk7Ci0JYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBvcmRlcmVkX2V4dGVudCk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7Ci0JYnRyZnNfcmVtb3ZlX29yZGVyZWRfZXh0ZW50KGlub2RlLCBvcmRlcmVkX2V4dGVudCk7Ci0JbXV0ZXhfdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X211dGV4KTsKLQorCS8qIHRoaXMgYWxzbyByZW1vdmVzIHRoZSBvcmRlcmVkIGV4dGVudCBmcm9tIHRoZSB0cmVlICovCisJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7CisJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJQlVHX09OKHJldCk7CisJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKK291dDoKIAkvKiBvbmNlIGZvciB1cyAqLwogCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkX2V4dGVudCk7CiAJLyogb25jZSBmb3IgdGhlIHRyZWUgKi8KIAlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZF9leHRlbnQpOwogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwOCw2ICsyMDIyLDU0IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0cnVjdCBkZWxheWVkX2lwdXQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworfTsKKwordm9pZCBidHJmc19hZGRfZGVsYXllZF9pcHV0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+ZnNfaW5mbzsKKwlzdHJ1Y3QgZGVsYXllZF9pcHV0ICpkZWxheWVkOworCisJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZpbm9kZS0+aV9jb3VudCwgLTEsIDEpKQorCQlyZXR1cm47CisKKwlkZWxheWVkID0ga21hbGxvYyhzaXplb2YoKmRlbGF5ZWQpLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7CisJZGVsYXllZC0+aW5vZGUgPSBpbm9kZTsKKworCXNwaW5fbG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRlbGF5ZWQtPmxpc3QsICZmc19pbmZvLT5kZWxheWVkX2lwdXRzKTsKKwlzcGluX3VubG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworfQorCit2b2lkIGJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHN0cnVjdCBidHJmc19yb290ICpyb290KQoreworCUxJU1RfSEVBRChsaXN0KTsKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGRlbGF5ZWRfaXB1dCAqZGVsYXllZDsKKwlpbnQgZW1wdHk7CisKKwlzcGluX2xvY2soJmZzX2luZm8tPmRlbGF5ZWRfaXB1dF9sb2NrKTsKKwllbXB0eSA9IGxpc3RfZW1wdHkoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dHMpOworCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5kZWxheWVkX2lwdXRfbG9jayk7CisJaWYgKGVtcHR5KQorCQlyZXR1cm47CisKKwlkb3duX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCXNwaW5fbG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dHMsICZsaXN0KTsKKwlzcGluX3VubG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCQlkZWxheWVkID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBkZWxheWVkX2lwdXQsIGxpc3QpOworCQlsaXN0X2RlbCgmZGVsYXllZC0+bGlzdCk7CisJCWlwdXQoZGVsYXllZC0+aW5vZGUpOworCQlrZnJlZShkZWxheWVkKTsKKwl9CisJdXBfcmVhZCgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7Cit9CisKIC8qCiAgKiBUaGlzIGNyZWF0ZXMgYW4gb3JwaGFuIGVudHJ5IGZvciB0aGUgZ2l2ZW4gaW5vZGUgaW4gY2FzZSBzb21ldGhpbmcgZ29lcwogICogd3JvbmcgaW4gdGhlIG1pZGRsZSBvZiBhbiB1bmxpbmsvdHJ1bmNhdGUuCkBAIC0yMDgwLDE2ICsyMTQyLDE3IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgcmV0ID0gMCwgbnJfdW5saW5rID0gMCwgbnJfdHJ1bmNhdGUgPSAwOwogCi0JcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlpZiAoIXBhdGgpCisJaWYgKCF4Y2hnKCZyb290LT5jbGVhbl9vcnBoYW5zLCAwKSkKIAkJcmV0dXJuOworCisJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlCVUdfT04oIXBhdGgpOwogCXBhdGgtPnJlYWRhID0gLTE7CiAKIAlrZXkub2JqZWN0aWQgPSBCVFJGU19PUlBIQU5fT0JKRUNUSUQ7CiAJYnRyZnNfc2V0X2tleV90eXBlKCZrZXksIEJUUkZTX09SUEhBTl9JVEVNX0tFWSk7CiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAKLQogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkgewpAQCAtMjgzNCwzNyArMjg5Nyw0MCBAQAogICogbWluX3R5cGUgaXMgdGhlIG1pbmltdW0ga2V5IHR5cGUgdG8gdHJ1bmNhdGUgZG93biB0by4gIElmIHNldCB0byAwLCB0aGlzCiAgKiB3aWxsIGtpbGwgYWxsIHRoZSBpdGVtcyBvbiB0aGlzIGlub2RlLCBpbmNsdWRpbmcgdGhlIElOT0RFX0lURU1fS0VZLgogICovCi1ub2lubGluZSBpbnQgYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQl1NjQgbmV3X3NpemUsIHUzMiBtaW5fdHlwZSkKK2ludCBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHU2NCBuZXdfc2l6ZSwgdTMyIG1pbl90eXBlKQogewotCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7Ci0Jc3RydWN0IGJ0cmZzX2tleSBrZXk7Ci0Jc3RydWN0IGJ0cmZzX2tleSBmb3VuZF9rZXk7Ci0JdTMyIGZvdW5kX3R5cGUgPSAodTgpLTE7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmZpOworCXN0cnVjdCBidHJmc19rZXkga2V5OworCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwogCXU2NCBleHRlbnRfc3RhcnQgPSAwOwogCXU2NCBleHRlbnRfbnVtX2J5dGVzID0gMDsKIAl1NjQgZXh0ZW50X29mZnNldCA9IDA7CiAJdTY0IGl0ZW1fZW5kID0gMDsKKwl1NjQgbWFzayA9IHJvb3QtPnNlY3RvcnNpemUgLSAxOworCXUzMiBmb3VuZF90eXBlID0gKHU4KS0xOwogCWludCBmb3VuZF9leHRlbnQ7CiAJaW50IGRlbF9pdGVtOwogCWludCBwZW5kaW5nX2RlbF9uciA9IDA7CiAJaW50IHBlbmRpbmdfZGVsX3Nsb3QgPSAwOwogCWludCBleHRlbnRfdHlwZSA9IC0xOwogCWludCBlbmNvZGluZzsKLQl1NjQgbWFzayA9IHJvb3QtPnNlY3RvcnNpemUgLSAxOworCWludCByZXQ7CisJaW50IGVyciA9IDA7CisKKwlCVUdfT04obmV3X3NpemUgPiAwICYmIG1pbl90eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAKIAlpZiAocm9vdC0+cmVmX2Nvd3MpCiAJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBuZXdfc2l6ZSAmICh+bWFzayksICh1NjQpLTEsIDApOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOwogCXBhdGgtPnJlYWRhID0gLTE7CiAKLQkvKiBGSVhNRSwgYWRkIHJlZG8gbGluayB0byB0cmVlIHNvIHdlIGRvbid0IGxlYWsgb24gY3Jhc2ggKi8KIAlrZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAJa2V5LnR5cGUgPSAodTgpLTE7CkBAIC0yODcyLDE3ICsyOTM4LDE3IEBACiBzZWFyY2hfYWdhaW46CiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyID0gcmV0OworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAocmV0ID4gMCkgewogCQkvKiB0aGVyZSBhcmUgbm8gaXRlbXMgaW4gdGhlIHRyZWUgZm9yIHVzIHRvIHRydW5jYXRlLCB3ZSdyZQogCQkgKiBkb25lCiAJCSAqLwotCQlpZiAocGF0aC0+c2xvdHNbMF0gPT0gMCkgewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KKwkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApCisJCQlnb3RvIG91dDsKIAkJcGF0aC0+c2xvdHNbMF0tLTsKIAl9CiAKQEAgLTI5MTcsMjggKzI5ODMsMTcgQEAKIAkJCX0KIAkJCWl0ZW1fZW5kLS07CiAJCX0KLQkJaWYgKGl0ZW1fZW5kIDwgbmV3X3NpemUpIHsKLQkJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0RJUl9JVEVNX0tFWSkKLQkJCQlmb3VuZF90eXBlID0gQlRSRlNfSU5PREVfSVRFTV9LRVk7Ci0JCQllbHNlIGlmIChmb3VuZF90eXBlID09IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSkKLQkJCQlmb3VuZF90eXBlID0gQlRSRlNfRVhURU5UX0RBVEFfS0VZOwotCQkJZWxzZSBpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19FWFRFTlRfREFUQV9LRVkpCi0JCQkJZm91bmRfdHlwZSA9IEJUUkZTX1hBVFRSX0lURU1fS0VZOwotCQkJZWxzZSBpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19YQVRUUl9JVEVNX0tFWSkKLQkJCQlmb3VuZF90eXBlID0gQlRSRlNfSU5PREVfUkVGX0tFWTsKLQkJCWVsc2UgaWYgKGZvdW5kX3R5cGUpCi0JCQkJZm91bmRfdHlwZS0tOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQkJYnRyZnNfc2V0X2tleV90eXBlKCZrZXksIGZvdW5kX3R5cGUpOwotCQkJZ290byBuZXh0OwotCQl9Ci0JCWlmIChmb3VuZF9rZXkub2Zmc2V0ID49IG5ld19zaXplKQorCQlpZiAoZm91bmRfdHlwZSA+IG1pbl90eXBlKSB7CiAJCQlkZWxfaXRlbSA9IDE7Ci0JCWVsc2UKLQkJCWRlbF9pdGVtID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpdGVtX2VuZCA8IG5ld19zaXplKQorCQkJCWJyZWFrOworCQkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPj0gbmV3X3NpemUpCisJCQkJZGVsX2l0ZW0gPSAxOworCQkJZWxzZQorCQkJCWRlbF9pdGVtID0gMDsKKwkJfQogCQlmb3VuZF9leHRlbnQgPSAwOwotCiAJCS8qIEZJWE1FLCBzaHJpbmsgdGhlIGV4dGVudCBpZiB0aGUgcmVmIGNvdW50IGlzIG9ubHkgMSAqLwogCQlpZiAoZm91bmRfdHlwZSAhPSBCVFJGU19FWFRFTlRfREFUQV9LRVkpCiAJCQlnb3RvIGRlbGV0ZTsKQEAgLTMwMjUsNDIgKzMwODAsMzYgQEAKIAkJCQkJCWlub2RlLT5pX2lubywgZXh0ZW50X29mZnNldCk7CiAJCQlCVUdfT04ocmV0KTsKIAkJfQotbmV4dDoKLQkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApIHsKLQkJCWlmIChwZW5kaW5nX2RlbF9ucikKLQkJCQlnb3RvIGRlbF9wZW5kaW5nOwotCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJaWYgKGZvdW5kX3R5cGUgPT0gQlRSRlNfSU5PREVfSVRFTV9LRVkpCi0JCQkJYnJlYWs7Ci0JCQlnb3RvIHNlYXJjaF9hZ2FpbjsKLQkJfQogCi0JCXBhdGgtPnNsb3RzWzBdLS07Ci0JCWlmIChwZW5kaW5nX2RlbF9uciAmJgotCQkgICAgcGF0aC0+c2xvdHNbMF0gKyAxICE9IHBlbmRpbmdfZGVsX3Nsb3QpIHsKLQkJCXN0cnVjdCBidHJmc19rZXkgZGVidWc7Ci1kZWxfcGVuZGluZzoKLQkJCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShwYXRoLT5ub2Rlc1swXSwgJmRlYnVnLAotCQkJCQkgICAgICBwZW5kaW5nX2RlbF9zbG90KTsKLQkJCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwKLQkJCQkJICAgICAgcGVuZGluZ19kZWxfc2xvdCwKLQkJCQkJICAgICAgcGVuZGluZ19kZWxfbnIpOwotCQkJQlVHX09OKHJldCk7Ci0JCQlwZW5kaW5nX2RlbF9uciA9IDA7CisJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0lOT0RFX0lURU1fS0VZKQorCQkJYnJlYWs7CisKKwkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDAgfHwKKwkJICAgIHBhdGgtPnNsb3RzWzBdICE9IHBlbmRpbmdfZGVsX3Nsb3QpIHsKKwkJCWlmIChyb290LT5yZWZfY293cykgeworCQkJCWVyciA9IC1FQUdBSU47CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpZiAocGVuZGluZ19kZWxfbnIpIHsKKwkJCQlyZXQgPSBidHJmc19kZWxfaXRlbXModHJhbnMsIHJvb3QsIHBhdGgsCisJCQkJCQlwZW5kaW5nX2RlbF9zbG90LAorCQkJCQkJcGVuZGluZ19kZWxfbnIpOworCQkJCUJVR19PTihyZXQpOworCQkJCXBlbmRpbmdfZGVsX25yID0gMDsKKwkJCX0KIAkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQkJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0lOT0RFX0lURU1fS0VZKQotCQkJCWJyZWFrOwogCQkJZ290byBzZWFyY2hfYWdhaW47CisJCX0gZWxzZSB7CisJCQlwYXRoLT5zbG90c1swXS0tOwogCQl9CiAJfQotCXJldCA9IDA7Ci1lcnJvcjoKK291dDoKIAlpZiAocGVuZGluZ19kZWxfbnIpIHsKIAkJcmV0ID0gYnRyZnNfZGVsX2l0ZW1zKHRyYW5zLCByb290LCBwYXRoLCBwZW5kaW5nX2RlbF9zbG90LAogCQkJCSAgICAgIHBlbmRpbmdfZGVsX25yKTsKIAl9CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTMxODAsMTAgKzMyMjksNiBAQAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JZXJyID0gYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOwogCQlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGhvbGVfc3RhcnQsCkBAIC0zMTk2LDkgKzMyNDEsNiBAQAogCQlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZCk7CiAJfQogCi0JdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQogCWN1cl9vZmZzZXQgPSBob2xlX3N0YXJ0OwogCXdoaWxlICgxKSB7CiAJCWVtID0gYnRyZnNfZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgY3VyX29mZnNldCwKQEAgLTMyMDYsNDAgKzMyNDgsMTIwIEBACiAJCUJVR19PTihJU19FUlIoZW0pIHx8ICFlbSk7CiAJCWxhc3RfYnl0ZSA9IG1pbihleHRlbnRfbWFwX2VuZChlbSksIGJsb2NrX2VuZCk7CiAJCWxhc3RfYnl0ZSA9IChsYXN0X2J5dGUgKyBtYXNrKSAmIH5tYXNrOwotCQlpZiAodGVzdF9iaXQoRVhURU5UX0ZMQUdfVkFDQU5DWSwgJmVtLT5mbGFncykpIHsKKwkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfRkxBR19QUkVBTExPQywgJmVtLT5mbGFncykpIHsKIAkJCXU2NCBoaW50X2J5dGUgPSAwOwogCQkJaG9sZV9zaXplID0gbGFzdF9ieXRlIC0gY3VyX29mZnNldDsKLQkJCWVyciA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgcm9vdCwgaW5vZGUsCi0JCQkJCQkgY3VyX29mZnNldCwKLQkJCQkJCSBjdXJfb2Zmc2V0ICsgaG9sZV9zaXplLAotCQkJCQkJIGJsb2NrX2VuZCwKLQkJCQkJCSBjdXJfb2Zmc2V0LCAmaGludF9ieXRlLCAxKTsKKworCQkJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAyKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAKLQkJCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7Ci0JCQlpZiAoZXJyKQotCQkJCWJyZWFrOworCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCisJCQllcnIgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBjdXJfb2Zmc2V0LAorCQkJCQkJIGN1cl9vZmZzZXQgKyBob2xlX3NpemUsCisJCQkJCQkgJmhpbnRfYnl0ZSwgMSk7CisJCQlCVUdfT04oZXJyKTsKIAogCQkJZXJyID0gYnRyZnNfaW5zZXJ0X2ZpbGVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQlpbm9kZS0+aV9pbm8sIGN1cl9vZmZzZXQsIDAsCiAJCQkJCTAsIGhvbGVfc2l6ZSwgMCwgaG9sZV9zaXplLAogCQkJCQkwLCAwLCAwKTsKKwkJCUJVR19PTihlcnIpOworCiAJCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgaG9sZV9zdGFydCwKIAkJCQkJbGFzdF9ieXRlIC0gMSwgMCk7Ci0JCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CisKKwkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMik7CiAJCX0KIAkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJY3VyX29mZnNldCA9IGxhc3RfYnl0ZTsKLQkJaWYgKGVyciB8fCBjdXJfb2Zmc2V0ID49IGJsb2NrX2VuZCkKKwkJaWYgKGN1cl9vZmZzZXQgPj0gYmxvY2tfZW5kKQogCQkJYnJlYWs7CiAJfQogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIGhvbGVfc3RhcnQsIGJsb2NrX2VuZCAtIDEsIEdGUF9OT0ZTKTsKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGJ0cmZzX3NldGF0dHJfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKKwl1bnNpZ25lZCBsb25nIG5yOworCWludCByZXQ7CisKKwlpZiAoYXR0ci0+aWFfc2l6ZSA9PSBpbm9kZS0+aV9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkgeworCQl1bnNpZ25lZCBsb25nIGxpbWl0OworCQlsaW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfRlNJWkVdLnJsaW1fY3VyOworCQlpZiAoYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NiLT5zX21heGJ5dGVzKQorCQkJcmV0dXJuIC1FRkJJRzsKKwkJaWYgKGxpbWl0ICE9IFJMSU1fSU5GSU5JVFkgJiYgYXR0ci0+aWFfc2l6ZSA+IGxpbWl0KSB7CisJCQlzZW5kX3NpZyhTSUdYRlNaLCBjdXJyZW50LCAwKTsKKwkJCXJldHVybiAtRUZCSUc7CisJCX0KKwl9CisKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCisJcmV0ID0gYnRyZnNfb3JwaGFuX2FkZCh0cmFucywgaW5vZGUpOworCUJVR19PTihyZXQpOworCisJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CisJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CisKKwlpZiAoYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpIHsKKwkJcmV0ID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAocmV0KSB7CisJCQlidHJmc190cnVuY2F0ZShpbm9kZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBpbm9kZS0+aV9zaXplLCBOVUxMKTsKKworCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKKworCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwkJQlVHX09OKHJldCk7CisJCWlmIChpbm9kZS0+aV9ubGluayA+IDApIHsKKwkJCXJldCA9IGJ0cmZzX29ycGhhbl9kZWwodHJhbnMsIGlub2RlKTsKKwkJCUJVR19PTihyZXQpOworCQl9CisJCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSdyZSB0cnVuY2F0aW5nIGEgZmlsZSB0aGF0IHVzZWQgdG8gaGF2ZSBnb29kIGRhdGEgZG93biB0bworCSAqIHplcm8uIE1ha2Ugc3VyZSBpdCBnZXRzIGludG8gdGhlIG9yZGVyZWQgZmx1c2ggbGlzdCBzbyB0aGF0CisJICogYW55IG5ldyB3cml0ZXMgZ2V0IGRvd24gdG8gZGlzayBxdWlja2x5LgorCSAqLworCWlmIChhdHRyLT5pYV9zaXplID09IDApCisJCUJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UgPSAxOworCisJLyogd2UgZG9uJ3Qgc3VwcG9ydCBzd2FwZmlsZXMsIHNvIHZtdHJ1bmNhdGUgc2hvdWxkbid0IGZhaWwgKi8KKwlyZXQgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwlCVUdfT04ocmV0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJ0cmZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKQEAgLTMyNTAsMjMgKzMzNzIsMTQgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkpIHsKLQkJaWYgKGF0dHItPmlhX3NpemUgPiBpbm9kZS0+aV9zaXplKSB7Ci0JCQllcnIgPSBidHJmc19jb250X2V4cGFuZChpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZSBpZiAoaW5vZGUtPmlfc2l6ZSA+IDAgJiYKLQkJCSAgIGF0dHItPmlhX3NpemUgPT0gMCkgewotCi0JCQkvKiB3ZSdyZSB0cnVuY2F0aW5nIGEgZmlsZSB0aGF0IHVzZWQgdG8gaGF2ZSBnb29kCi0JCQkgKiBkYXRhIGRvd24gdG8gemVyby4gIE1ha2Ugc3VyZSBpdCBnZXRzIGludG8KLQkJCSAqIHRoZSBvcmRlcmVkIGZsdXNoIGxpc3Qgc28gdGhhdCBhbnkgbmV3IHdyaXRlcwotCQkJICogZ2V0IGRvd24gdG8gZGlzayBxdWlja2x5LgotCQkJICovCi0JCQlCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9kYXRhX2Nsb3NlID0gMTsKLQkJfQorCQllcnIgPSBidHJmc19zZXRhdHRyX3NpemUoaW5vZGUsIGF0dHIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CisJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKIAotCWVyciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCWlmIChhdHRyLT5pYV92YWxpZCkKKwkJZXJyID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CiAKIAlpZiAoIWVyciAmJiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkpCiAJCWVyciA9IGJ0cmZzX2FjbF9jaG1vZChpbm9kZSk7CkBAIC0zMjg3LDM2ICszNDAwLDQzIEBACiAJfQogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CiAKKwlpZiAocm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfcmVjb3ZlcmluZykgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5pX29ycGhhbikpOworCQlnb3RvIG5vX2RlbGV0ZTsKKwl9CisKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPiAwKSB7CiAJCUJVR19PTihidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgIT0gMCk7CiAJCWdvdG8gbm9fZGVsZXRlOwogCX0KIAogCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgMCk7Ci0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JcmV0ID0gYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXModHJhbnMsIHJvb3QsIGlub2RlLCBpbm9kZS0+aV9zaXplLCAwKTsKLQlpZiAocmV0KSB7Ci0JCWJ0cmZzX29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwotCQlnb3RvIG5vX2RlbGV0ZV9sb2NrOworCXdoaWxlICgxKSB7CisJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsIDAsIDApOworCisJCWlmIChyZXQgIT0gLUVBR0FJTikKKwkJCWJyZWFrOworCisJCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQl0cmFucyA9IE5VTEw7CisJCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCX0KIAotCWJ0cmZzX29ycGhhbl9kZWwodHJhbnMsIGlub2RlKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOworCQlCVUdfT04ocmV0KTsKKwl9CiAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKLQljbGVhcl9pbm9kZShpbm9kZSk7Ci0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwotCXJldHVybjsKLQotbm9fZGVsZXRlX2xvY2s6Ci0JbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIG5vX2RlbGV0ZToKIAljbGVhcl9pbm9kZShpbm9kZSk7CisJcmV0dXJuOwogfQogCiAvKgpAQCAtMzU2OSw3ICszNjg5LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CiAJUkJfQ0xFQVJfTk9ERSgmQlRSRlNfSShpbm9kZSktPnJiX25vZGUpOwogCWJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZV9pbml0KCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF90cmVlKTsKLQltdXRleF9pbml0KCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X211dGV4KTsKIAltdXRleF9pbml0KCZCVFJGU19JKGlub2RlKS0+bG9nX211dGV4KTsKIH0KIApAQCAtMzY5NSw2ICszODE0LDEzIEBACiAJfQogCXNyY3VfcmVhZF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnN1YnZvbF9zcmN1LCBpbmRleCk7CiAKKwlpZiAocm9vdCAhPSBzdWJfcm9vdCkgeworCQlkb3duX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCQlpZiAoIShpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCQlidHJmc19vcnBoYW5fY2xlYW51cChzdWJfcm9vdCk7CisJCXVwX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCX0KKwogCXJldHVybiBpbm9kZTsKIH0KIApAQCAtNDIxOSw3ICs0MzQ1LDcgQEAKIAlpZiAoSVNfRVJSKGlub2RlKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eShpbm9kZSwgZGlyKTsKKwllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyKTsKIAlpZiAoZXJyKSB7CiAJCWRyb3BfaW5vZGUgPSAxOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC00MjkwLDcgKzQ0MTYsNyBAQAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KGlub2RlLCBkaXIpOworCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIpOwogCWlmIChlcnIpIHsKIAkJZHJvcF9pbm9kZSA9IDE7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQzMzYsNiArNDQ2MiwxMCBAQAogCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCS8qIGRvIG5vdCBhbGxvdyBzeXNfbGluaydzIHdpdGggb3RoZXIgc3Vidm9scyBvZiB0aGUgc2FtZSBkZXZpY2UgKi8KKwlpZiAocm9vdC0+b2JqZWN0aWQgIT0gQlRSRlNfSShpbm9kZSktPnJvb3QtPm9iamVjdGlkKQorCQlyZXR1cm4gLUVQRVJNOworCiAJLyoKIAkgKiAxIGl0ZW0gZm9yIGlub2RlIHJlZgogCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcwpAQCAtNDQyMyw3ICs0NTUzLDcgQEAKIAogCWRyb3Bfb25fZXJyID0gMTsKIAotCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkoaW5vZGUsIGRpcik7CisJZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eSh0cmFucywgaW5vZGUsIGRpcik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZmFpbDsKIApAQCAtNTA3NCwxNyArNTIwNCwyMCBAQAogCXVuc2lnbmVkIGxvbmcgbnI7CiAJdTY0IG1hc2sgPSByb290LT5zZWN0b3JzaXplIC0gMTsKIAotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwotCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCi0JCXJldHVybjsKKwl9CiAKIAlyZXQgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwogCWlmIChyZXQpCiAJCXJldHVybjsKKwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmICh+bWFzayksICh1NjQpLTEpOworCWJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSwgTlVMTCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJLyoKIAkgKiBzZXRhdHRyIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBvcmRlcmVkX2RhdGFfY2xvc2UgZmxhZywKQEAgLTUxMDYsMjEgKzUyMzksMzIgQEAKIAlpZiAoaW5vZGUtPmlfc2l6ZSA9PSAwICYmIEJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UpCiAJCWJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbih0cmFucywgcm9vdCwgaW5vZGUpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKKwl3aGlsZSAoMSkgeworCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsCisJCQkJCQkgaW5vZGUtPmlfc2l6ZSwKKwkJCQkJCSBCVFJGU19FWFRFTlRfREFUQV9LRVkpOworCQlpZiAocmV0ICE9IC1FQUdBSU4pCisJCQlicmVhazsKIAotCXJldCA9IGJ0cmZzX29ycGhhbl9hZGQodHJhbnMsIGlub2RlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQkvKiBGSVhNRSwgYWRkIHJlZG8gbGluayB0byB0cmVlIHNvIHdlIGRvbid0IGxlYWsgb24gY3Jhc2ggKi8KLQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlLT5pX3NpemUsCi0JCQkJICAgICAgQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKLQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJCUJVR19PTihyZXQpOwogCi0JcmV0ID0gYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOworCQluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKKwkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CisKKwkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CisJfQorCisJaWYgKHJldCA9PSAwICYmIGlub2RlLT5pX25saW5rID4gMCkgeworCQlyZXQgPSBidHJmc19vcnBoYW5fZGVsKHRyYW5zLCBpbm9kZSk7CisJCUJVR19PTihyZXQpOworCX0KKworCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCUJVR19PTihyZXQpOwogCi1vdXQ6CiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIAlCVUdfT04ocmV0KTsKQEAgLTUyMTcsOSArNTM2MSw5IEBACiAKIAlzcGluX2xvY2soJnJvb3QtPmxpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZCVFJGU19JKGlub2RlKS0+aV9vcnBoYW4pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQlRSRlM6IGlub2RlICVsdTogaW5vZGUgc3RpbGwgb24gdGhlIG9ycGhhbiIKLQkJICAgICAgICIgbGlzdFxuIiwgaW5vZGUtPmlfaW5vKTsKLQkJZHVtcF9zdGFjaygpOworCQlwcmludGsoS0VSTl9JTkZPICJCVFJGUzogaW5vZGUgJWx1IHN0aWxsIG9uIHRoZSBvcnBoYW4gbGlzdFxuIiwKKwkJICAgICAgIGlub2RlLT5pX2lubyk7CisJCWxpc3RfZGVsX2luaXQoJkJUUkZTX0koaW5vZGUpLT5pX29ycGhhbik7CiAJfQogCXNwaW5fdW5sb2NrKCZyb290LT5saXN0X2xvY2spOwogCkBAIC01NDc2LDcgKzU2MjAsNyBAQAogICogc29tZSBmYWlybHkgc2xvdyBjb2RlIHRoYXQgbmVlZHMgb3B0aW1pemF0aW9uLiBUaGlzIHdhbGtzIHRoZSBsaXN0CiAgKiBvZiBhbGwgdGhlIGlub2RlcyB3aXRoIHBlbmRpbmcgZGVsYWxsb2MgYW5kIGZvcmNlcyB0aGVtIHRvIGRpc2suCiAgKi8KLWludCBidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgZGVsYXlfaXB1dCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2lub2RlczsKIAlzdHJ1Y3QgYnRyZnNfaW5vZGUgKmJpbm9kZTsKQEAgLTU0OTUsNyArNTYzOSwxMCBAQAogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJCWlmIChpbm9kZSkgewogCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKLQkJCWlwdXQoaW5vZGUpOworCQkJaWYgKGRlbGF5X2lwdXQpCisJCQkJYnRyZnNfYWRkX2RlbGF5ZWRfaXB1dChpbm9kZSk7CisJCQllbHNlCisJCQkJaXB1dChpbm9kZSk7CiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CkBAIC01NTY5LDcgKzU3MTYsNyBAQAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KGlub2RlLCBkaXIpOworCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIpOwogCWlmIChlcnIpIHsKIAkJZHJvcF9pbm9kZSA9IDE7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTU2NDEsMTAgKzU3ODgsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHByZWFsbG9jX2ZpbGVfcmFuZ2Uoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJICAgICAgIHU2NCBsb2NrZWRfZW5kLCB1NjQgYWxsb2NfaGludCwgaW50IG1vZGUpCitzdGF0aWMgaW50IHByZWFsbG9jX2ZpbGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAorCQkJICAgICAgIHU2NCBhbGxvY19oaW50LCBpbnQgbW9kZSkKIHsKKwlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc19rZXkgaW5zOwogCXU2NCBhbGxvY19zaXplOwpAQCAtNTY1NSw0MyArNTgwMiw1NiBAQAogCXdoaWxlIChudW1fYnl0ZXMgPiAwKSB7CiAJCWFsbG9jX3NpemUgPSBtaW4obnVtX2J5dGVzLCByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKIAotCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsIGFsbG9jX3NpemUsCiAJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUsIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlXQVJOX09OKDEpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIHN0b3BfdHJhbnM7CiAJCX0KKworCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDMpOworCQlpZiAocmV0KSB7CisJCQlidHJmc19mcmVlX3Jlc2VydmVkX2V4dGVudChyb290LCBpbnMub2JqZWN0aWQsCisJCQkJCQkgICBpbnMub2Zmc2V0KTsKKwkJCWdvdG8gc3RvcF90cmFuczsKKwkJfQorCiAJCXJldCA9IGluc2VydF9yZXNlcnZlZF9maWxlX2V4dGVudCh0cmFucywgaW5vZGUsCiAJCQkJCQkgIGN1cl9vZmZzZXQsIGlucy5vYmplY3RpZCwKIAkJCQkJCSAgaW5zLm9mZnNldCwgaW5zLm9mZnNldCwKLQkJCQkJCSAgaW5zLm9mZnNldCwgbG9ja2VkX2VuZCwKLQkJCQkJCSAgMCwgMCwgMCwKKwkJCQkJCSAgaW5zLm9mZnNldCwgMCwgMCwgMCwKIAkJCQkJCSAgQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpOwogCQlCVUdfT04ocmV0KTsKIAkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIGN1cl9vZmZzZXQsCiAJCQkJCWN1cl9vZmZzZXQgKyBpbnMub2Zmc2V0IC0xLCAwKTsKKwogCQludW1fYnl0ZXMgLT0gaW5zLm9mZnNldDsKIAkJY3VyX29mZnNldCArPSBpbnMub2Zmc2V0OwogCQlhbGxvY19oaW50ID0gaW5zLm9iamVjdGlkICsgaW5zLm9mZnNldDsKLQkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOwotCX0KLW91dDoKLQlpZiAoY3VyX29mZnNldCA+IHN0YXJ0KSB7CisKIAkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJCUJUUkZTX0koaW5vZGUpLT5mbGFncyB8PSBCVFJGU19JTk9ERV9QUkVBTExPQzsKIAkJaWYgKCEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpICYmCi0JCSAgICBjdXJfb2Zmc2V0ID4gaV9zaXplX3JlYWQoaW5vZGUpKQotCQkJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCBjdXJfb2Zmc2V0KTsKKwkJICAgIGN1cl9vZmZzZXQgPiBpbm9kZS0+aV9zaXplKSB7CisJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGN1cl9vZmZzZXQpOworCQkJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBjdXJfb2Zmc2V0LCBOVUxMKTsKKwkJfQorCiAJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQlCVUdfT04ocmV0KTsKLQl9CiAKKwkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDMpOworCX0KIAlyZXR1cm4gcmV0OworCitzdG9wX3RyYW5zOgorCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJcmV0dXJuIHJldDsKKwogfQogCiBzdGF0aWMgbG9uZyBidHJmc19mYWxsb2NhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsCkBAIC01NzA1LDggKzU4NjUsNiBAQAogCXU2NCBsb2NrZWRfZW5kOwogCXU2NCBtYXNrID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPnNlY3RvcnNpemUgLSAxOwogCXN0cnVjdCBleHRlbnRfbWFwICplbTsKLQlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKIAlpbnQgcmV0OwogCiAJYWxsb2Nfc3RhcnQgPSBvZmZzZXQgJiB+bWFzazsKQEAgLTU3MjUsOSArNTg4Myw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7Ci0KLQlyZXQgPSBidHJmc19jaGVja19kYXRhX2ZyZWVfc3BhY2Uocm9vdCwgaW5vZGUsCisJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKEJUUkZTX0koaW5vZGUpLT5yb290LCBpbm9kZSwKIAkJCQkJICBhbGxvY19lbmQgLSBhbGxvY19zdGFydCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC01NzM2LDEyICs1ODkyLDYgQEAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CiAKLQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihCVFJGU19JKGlub2RlKS0+cm9vdCwgMSk7Ci0JCWlmICghdHJhbnMpIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dF9mcmVlOwotCQl9Ci0KIAkJLyogdGhlIGV4dGVudCBsb2NrIGlzIG9yZGVyZWQgaW5zaWRlIHRoZSBydW5uaW5nCiAJCSAqIHRyYW5zYWN0aW9uCiAJCSAqLwpAQCAtNTc1NSw4ICs1OTA1LDYgQEAKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKIAkJCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAogCQkJCSAgICAgIGFsbG9jX3N0YXJ0LCBsb2NrZWRfZW5kLCBHRlBfTk9GUyk7Ci0JCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIEJUUkZTX0koaW5vZGUpLT5yb290KTsKLQogCQkJLyoKIAkJCSAqIHdlIGNhbid0IHdhaXQgb24gdGhlIHJhbmdlIHdpdGggdGhlIHRyYW5zYWN0aW9uCiAJCQkgKiBydW5uaW5nIG9yIHdpdGggdGhlIGV4dGVudCBsb2NrIGhlbGQKQEAgLTU3NzcsMTAgKzU5MjUsMTIgQEAKIAkJQlVHX09OKElTX0VSUihlbSkgfHwgIWVtKTsKIAkJbGFzdF9ieXRlID0gbWluKGV4dGVudF9tYXBfZW5kKGVtKSwgYWxsb2NfZW5kKTsKIAkJbGFzdF9ieXRlID0gKGxhc3RfYnl0ZSArIG1hc2spICYgfm1hc2s7Ci0JCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9IT0xFKSB7Ci0JCQlyZXQgPSBwcmVhbGxvY19maWxlX3JhbmdlKHRyYW5zLCBpbm9kZSwgY3VyX29mZnNldCwKLQkJCQkJbGFzdF9ieXRlLCBsb2NrZWRfZW5kICsgMSwKLQkJCQkJYWxsb2NfaGludCwgbW9kZSk7CisJCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9IT0xFIHx8CisJCSAgICAoY3VyX29mZnNldCA+PSBpbm9kZS0+aV9zaXplICYmCisJCSAgICAgIXRlc3RfYml0KEVYVEVOVF9GTEFHX1BSRUFMTE9DLCAmZW0tPmZsYWdzKSkpIHsKKwkJCXJldCA9IHByZWFsbG9jX2ZpbGVfcmFuZ2UoaW5vZGUsCisJCQkJCQkgIGN1cl9vZmZzZXQsIGxhc3RfYnl0ZSwKKwkJCQkJCSAgYWxsb2NfaGludCwgbW9kZSk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJCQkJYnJlYWs7CkBAIC01Nzk5LDkgKzU5NDksOCBAQAogCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBhbGxvY19zdGFydCwgbG9ja2VkX2VuZCwKIAkJICAgICAgR0ZQX05PRlMpOwogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCBCVFJGU19JKGlub2RlKS0+cm9vdCk7Ci1vdXRfZnJlZToKLQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsIGFsbG9jX2VuZCAtIGFsbG9jX3N0YXJ0KTsKKwlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2UoQlRSRlNfSShpbm9kZSktPnJvb3QsIGlub2RlLAorCQkJCSAgICAgICBhbGxvY19lbmQgLSBhbGxvY19zdGFydCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGNkYmIwNTQuLjY0NWExNzkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjM3LDcgKzIzNyw2IEBACiAJdTY0IG9iamVjdGlkOwogCXU2NCBuZXdfZGlyaWQgPSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEOwogCXU2NCBpbmRleCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKIAkvKgogCSAqIDEgLSBpbm9kZSBpdGVtCkBAIC0yOTAsNyArMjg5LDcgQEAKIAlidHJmc19zZXRfcm9vdF9nZW5lcmF0aW9uKCZyb290X2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAlidHJmc19zZXRfcm9vdF9sZXZlbCgmcm9vdF9pdGVtLCAwKTsKIAlidHJmc19zZXRfcm9vdF9yZWZzKCZyb290X2l0ZW0sIDEpOwotCWJ0cmZzX3NldF9yb290X3VzZWQoJnJvb3RfaXRlbSwgMCk7CisJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdF9pdGVtLCBsZWFmLT5sZW4pOwogCWJ0cmZzX3NldF9yb290X2xhc3Rfc25hcHNob3QoJnJvb3RfaXRlbSwgMCk7CiAKIAltZW1zZXQoJnJvb3RfaXRlbS5kcm9wX3Byb2dyZXNzLCAwLCBzaXplb2Yocm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MpKTsKQEAgLTM0MiwyNCArMzQxLDIxIEBACiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgYnRyZnNfbG9va3VwX2RlbnRyeShkaXIsIGRlbnRyeSkpOwogZmFpbDoKLQluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAllcnIgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCWlmIChlcnIgJiYgIXJldCkKIAkJcmV0ID0gZXJyOwogCiAJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwotCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY3JlYXRlX3NuYXBzaG90KHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBidHJmc19wZW5kaW5nX3NuYXBzaG90ICpwZW5kaW5nX3NuYXBzaG90OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCWludCByZXQgPSAwOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBuciA9IDA7CisJaW50IHJldDsKIAogCWlmICghcm9vdC0+cmVmX2Nvd3MpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzcyLDIwICszNjgsMjAgQEAKIAkgKi8KIAlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF91bmxvY2s7CisJCWdvdG8gZmFpbDsKIAogCXBlbmRpbmdfc25hcHNob3QgPSBremFsbG9jKHNpemVvZigqcGVuZGluZ19zbmFwc2hvdCksIEdGUF9OT0ZTKTsKIAlpZiAoIXBlbmRpbmdfc25hcHNob3QpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwotCQlnb3RvIGZhaWxfdW5sb2NrOworCQlnb3RvIGZhaWw7CiAJfQogCXBlbmRpbmdfc25hcHNob3QtPm5hbWUgPSBrbWFsbG9jKG5hbWVsZW4gKyAxLCBHRlBfTk9GUyk7CiAJaWYgKCFwZW5kaW5nX3NuYXBzaG90LT5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWtmcmVlKHBlbmRpbmdfc25hcHNob3QpOwogCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7Ci0JCWdvdG8gZmFpbF91bmxvY2s7CisJCWdvdG8gZmFpbDsKIAl9CiAJbWVtY3B5KHBlbmRpbmdfc25hcHNob3QtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCXBlbmRpbmdfc25hcHNob3QtPm5hbWVbbmFtZWxlbl0gPSAnXDAnOwpAQCAtMzk1LDEwICszOTEsMTkgQEAKIAlwZW5kaW5nX3NuYXBzaG90LT5yb290ID0gcm9vdDsKIAlsaXN0X2FkZCgmcGVuZGluZ19zbmFwc2hvdC0+bGlzdCwKIAkJICZ0cmFucy0+dHJhbnNhY3Rpb24tPnBlbmRpbmdfc25hcHNob3RzKTsKLQllcnIgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJQlVHX09OKHJldCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCi1mYWlsX3VubG9jazoKLQlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKKwlpbm9kZSA9IGJ0cmZzX2xvb2t1cF9kZW50cnkoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQlyZXQgPSBQVFJfRVJSKGlub2RlKTsKKwkJZ290byBmYWlsOworCX0KKwlCVUdfT04oIWlub2RlKTsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCXJldCA9IDA7CitmYWlsOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMjcsOCArMTAzMiw3IEBACiAJQlVHX09OKCF0cmFucyk7CiAKIAkvKiBwdW5jaCBob2xlIGluIGRlc3RpbmF0aW9uIGZpcnN0ICovCi0JYnRyZnNfZHJvcF9leHRlbnRzKHRyYW5zLCByb290LCBpbm9kZSwgb2ZmLCBvZmYgKyBsZW4sCi0JCQkgICBvZmYgKyBsZW4sIDAsICZoaW50X2J5dGUsIDEpOworCWJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgaW5vZGUsIG9mZiwgb2ZmICsgbGVuLCAmaGludF9ieXRlLCAxKTsKIAogCS8qIGNsb25lIGRhdGEgKi8KIAlrZXkub2JqZWN0aWQgPSBzcmMtPmlfaW5vOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwppbmRleCA1Nzk5YmM0Li5iMTBhNDlkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYworKysgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwpAQCAtMjkxLDE2ICsyOTEsMTYgQEAKIAogLyoKICAqIHJlbW92ZSBhbiBvcmRlcmVkIGV4dGVudCBmcm9tIHRoZSB0cmVlLiAgTm8gcmVmZXJlbmNlcyBhcmUgZHJvcHBlZAotICogYnV0LCBhbnlvbmUgd2FpdGluZyBvbiB0aGlzIGV4dGVudCBpcyB3b2tlbiB1cC4KKyAqIGFuZCB5b3UgbXVzdCB3YWtlX3VwIGVudHJ5LT53YWl0LiAgWW91IG11c3QgaG9sZCB0aGUgdHJlZSBtdXRleAorICogd2hpbGUgeW91IGNhbGwgdGhpcyBmdW5jdGlvbi4KICAqLwotaW50IGJ0cmZzX3JlbW92ZV9vcmRlcmVkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBfX2J0cmZzX3JlbW92ZV9vcmRlcmVkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqZW50cnkpCiB7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZSAqdHJlZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAogCXRyZWUgPSAmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfdHJlZTsKLQltdXRleF9sb2NrKCZ0cmVlLT5tdXRleCk7CiAJbm9kZSA9ICZlbnRyeS0+cmJfbm9kZTsKIAlyYl9lcmFzZShub2RlLCAmdHJlZS0+dHJlZSk7CiAJdHJlZS0+bGFzdCA9IE5VTEw7CkBAIC0zMjYsMTYgKzMyNiwzNCBAQAogCX0KIAlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOwogCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZW1vdmUgYW4gb3JkZXJlZCBleHRlbnQgZnJvbSB0aGUgdHJlZS4gIE5vIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQKKyAqIGJ1dCBhbnkgd2FpdGVycyBhcmUgd29rZW4uCisgKi8KK2ludCBidHJmc19yZW1vdmVfb3JkZXJlZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKmVudHJ5KQoreworCXN0cnVjdCBidHJmc19vcmRlcmVkX2lub2RlX3RyZWUgKnRyZWU7CisJaW50IHJldDsKKworCXRyZWUgPSAmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfdHJlZTsKKwltdXRleF9sb2NrKCZ0cmVlLT5tdXRleCk7CisJcmV0ID0gX19idHJmc19yZW1vdmVfb3JkZXJlZF9leHRlbnQoaW5vZGUsIGVudHJ5KTsKIAltdXRleF91bmxvY2soJnRyZWUtPm11dGV4KTsKIAl3YWtlX3VwKCZlbnRyeS0+d2FpdCk7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgogICogd2FpdCBmb3IgYWxsIHRoZSBvcmRlcmVkIGV4dGVudHMgaW4gYSByb290LiAgVGhpcyBpcyBkb25lIHdoZW4gYmFsYW5jaW5nCiAgKiBzcGFjZSBiZXR3ZWVuIGRyaXZlcy4KICAqLwotaW50IGJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9jb3dfb25seSkKK2ludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgICBpbnQgbm9jb3dfb25seSwgaW50IGRlbGF5X2lwdXQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBzcGxpY2U7CiAJc3RydWN0IGxpc3RfaGVhZCAqY3VyOwpAQCAtMzcyLDcgKzM5MCwxMCBAQAogCQlpZiAoaW5vZGUpIHsKIAkJCWJ0cmZzX3N0YXJ0X29yZGVyZWRfZXh0ZW50KGlub2RlLCBvcmRlcmVkLCAxKTsKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKLQkJCWlwdXQoaW5vZGUpOworCQkJaWYgKGRlbGF5X2lwdXQpCisJCQkJYnRyZnNfYWRkX2RlbGF5ZWRfaXB1dChpbm9kZSk7CisJCQllbHNlCisJCQkJaXB1dChpbm9kZSk7CiAJCX0gZWxzZSB7CiAJCQlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZCk7CiAJCX0KQEAgLTQzMCw3ICs0NTEsNyBAQAogCQkJCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CiAJCQllbHNlCiAJCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKLQkJCWlwdXQoaW5vZGUpOworCQkJYnRyZnNfYWRkX2RlbGF5ZWRfaXB1dChpbm9kZSk7CiAJCX0KIAogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTU4OSw3ICs2MTAsNyBAQAogICogQWZ0ZXIgYW4gZXh0ZW50IGlzIGRvbmUsIGNhbGwgdGhpcyB0byBjb25kaXRpb25hbGx5IHVwZGF0ZSB0aGUgb24gZGlzawogICogaV9zaXplLiAgaV9zaXplIGlzIHVwZGF0ZWQgdG8gY292ZXIgYW55IGZ1bGx5IHdyaXR0ZW4gcGFydCBvZiB0aGUgZmlsZS4KICAqLwotaW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZCkKIHsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9pbm9kZV90cmVlICp0cmVlID0gJkJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX3RyZWU7CkBAIC01OTcsMTggKzYxOCwzMCBAQAogCXU2NCBkaXNrX2lfc2l6ZTsKIAl1NjQgbmV3X2lfc2l6ZTsKIAl1NjQgaV9zaXplX3Rlc3Q7CisJdTY0IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICp0ZXN0OworCWludCByZXQgPSAxOworCisJaWYgKG9yZGVyZWQpCisJCW9mZnNldCA9IGVudHJ5X2VuZChvcmRlcmVkKTsKIAogCW11dGV4X2xvY2soJnRyZWUtPm11dGV4KTsKIAlkaXNrX2lfc2l6ZSA9IEJUUkZTX0koaW5vZGUpLT5kaXNrX2lfc2l6ZTsKIAorCS8qIHRydW5jYXRlIGZpbGUgKi8KKwlpZiAoZGlza19pX3NpemUgPiBpX3NpemUpIHsKKwkJQlRSRlNfSShpbm9kZSktPmRpc2tfaV9zaXplID0gaV9zaXplOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAkvKgogCSAqIGlmIHRoZSBkaXNrIGlfc2l6ZSBpcyBhbHJlYWR5IGF0IHRoZSBpbm9kZS0+aV9zaXplLCBvcgogCSAqIHRoaXMgb3JkZXJlZCBleHRlbnQgaXMgaW5zaWRlIHRoZSBkaXNrIGlfc2l6ZSwgd2UncmUgZG9uZQogCSAqLwotCWlmIChkaXNrX2lfc2l6ZSA+PSBpbm9kZS0+aV9zaXplIHx8Ci0JICAgIG9yZGVyZWQtPmZpbGVfb2Zmc2V0ICsgb3JkZXJlZC0+bGVuIDw9IGRpc2tfaV9zaXplKSB7CisJaWYgKGRpc2tfaV9zaXplID09IGlfc2l6ZSB8fCBvZmZzZXQgPD0gZGlza19pX3NpemUpIHsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC02MTYsOCArNjQ5LDcgQEAKIAkgKiB3ZSBjYW4ndCB1cGRhdGUgdGhlIGRpc2tfaXNpemUgaWYgdGhlcmUgYXJlIGRlbGFsbG9jIGJ5dGVzCiAJICogYmV0d2VlbiBkaXNrX2lfc2l6ZSBhbmQgIHRoaXMgb3JkZXJlZCBleHRlbnQKIAkgKi8KLQlpZiAodGVzdF9yYW5nZV9iaXQoaW9fdHJlZSwgZGlza19pX3NpemUsCi0JCQkgICBvcmRlcmVkLT5maWxlX29mZnNldCArIG9yZGVyZWQtPmxlbiAtIDEsCisJaWYgKHRlc3RfcmFuZ2VfYml0KGlvX3RyZWUsIGRpc2tfaV9zaXplLCBvZmZzZXQgLSAxLAogCQkJICAgRVhURU5UX0RFTEFMTE9DLCAwLCBOVUxMKSkgewogCQlnb3RvIG91dDsKIAl9CkBAIC02MjYsMjAgKzY1OCwzMiBAQAogCSAqIGlmIHdlIGZpbmQgYW4gb3JkZXJlZCBleHRlbnQgdGhlbiB3ZSBjYW4ndCB1cGRhdGUgZGlzayBpX3NpemUKIAkgKiB5ZXQKIAkgKi8KLQlub2RlID0gJm9yZGVyZWQtPnJiX25vZGU7Ci0Jd2hpbGUgKDEpIHsKLQkJbm9kZSA9IHJiX3ByZXYobm9kZSk7Ci0JCWlmICghbm9kZSkKLQkJCWJyZWFrOworCWlmIChvcmRlcmVkKSB7CisJCW5vZGUgPSByYl9wcmV2KCZvcmRlcmVkLT5yYl9ub2RlKTsKKwl9IGVsc2UgeworCQlwcmV2ID0gdHJlZV9zZWFyY2godHJlZSwgb2Zmc2V0KTsKKwkJLyoKKwkJICogd2UgaW5zZXJ0IGZpbGUgZXh0ZW50cyB3aXRob3V0IGludm9sdmluZyBvcmRlcmVkIHN0cnVjdCwKKwkJICogc28gdGhlcmUgc2hvdWxkIGJlIG5vIG9yZGVyZWQgc3RydWN0IGNvdmVyIHRoaXMgb2Zmc2V0CisJCSAqLworCQlpZiAocHJldikgeworCQkJdGVzdCA9IHJiX2VudHJ5KHByZXYsIHN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCwKKwkJCQkJcmJfbm9kZSk7CisJCQlCVUdfT04ob2Zmc2V0X2luX2VudHJ5KHRlc3QsIG9mZnNldCkpOworCQl9CisJCW5vZGUgPSBwcmV2OworCX0KKwl3aGlsZSAobm9kZSkgewogCQl0ZXN0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50LCByYl9ub2RlKTsKIAkJaWYgKHRlc3QtPmZpbGVfb2Zmc2V0ICsgdGVzdC0+bGVuIDw9IGRpc2tfaV9zaXplKQogCQkJYnJlYWs7Ci0JCWlmICh0ZXN0LT5maWxlX29mZnNldCA+PSBpbm9kZS0+aV9zaXplKQorCQlpZiAodGVzdC0+ZmlsZV9vZmZzZXQgPj0gaV9zaXplKQogCQkJYnJlYWs7CiAJCWlmICh0ZXN0LT5maWxlX29mZnNldCA+PSBkaXNrX2lfc2l6ZSkKIAkJCWdvdG8gb3V0OworCQlub2RlID0gcmJfcHJldihub2RlKTsKIAl9Ci0JbmV3X2lfc2l6ZSA9IG1pbl90KHU2NCwgZW50cnlfZW5kKG9yZGVyZWQpLCBpX3NpemVfcmVhZChpbm9kZSkpOworCW5ld19pX3NpemUgPSBtaW5fdCh1NjQsIG9mZnNldCwgaV9zaXplKTsKIAogCS8qCiAJICogYXQgdGhpcyBwb2ludCwgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IHVwZGF0ZSBpX3NpemUgdG8gYXQgbGVhc3QKQEAgLTY0Nyw3ICs2OTEsMTQgQEAKIAkgKiB3YWxrIGZvcndhcmQgYW5kIHNlZSBpZiBpb3MgZnJvbSBoaWdoZXIgdXAgaW4gdGhlIGZpbGUgaGF2ZQogCSAqIGZpbmlzaGVkLgogCSAqLwotCW5vZGUgPSByYl9uZXh0KCZvcmRlcmVkLT5yYl9ub2RlKTsKKwlpZiAob3JkZXJlZCkgeworCQlub2RlID0gcmJfbmV4dCgmb3JkZXJlZC0+cmJfbm9kZSk7CisJfSBlbHNlIHsKKwkJaWYgKHByZXYpCisJCQlub2RlID0gcmJfbmV4dChwcmV2KTsKKwkJZWxzZQorCQkJbm9kZSA9IHJiX2ZpcnN0KCZ0cmVlLT50cmVlKTsKKwl9CiAJaV9zaXplX3Rlc3QgPSAwOwogCWlmIChub2RlKSB7CiAJCS8qCkBAIC02NTUsMTAgKzcwNiwxMCBAQAogCQkgKiBiZXR3ZWVuIG91ciBvcmRlcmVkIGV4dGVudCBhbmQgdGhlIG5leHQgb25lLgogCQkgKi8KIAkJdGVzdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCwgcmJfbm9kZSk7Ci0JCWlmICh0ZXN0LT5maWxlX29mZnNldCA+IGVudHJ5X2VuZChvcmRlcmVkKSkKKwkJaWYgKHRlc3QtPmZpbGVfb2Zmc2V0ID4gb2Zmc2V0KQogCQkJaV9zaXplX3Rlc3QgPSB0ZXN0LT5maWxlX29mZnNldDsKIAl9IGVsc2UgewotCQlpX3NpemVfdGVzdCA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJaV9zaXplX3Rlc3QgPSBpX3NpemU7CiAJfQogCiAJLyoKQEAgLTY2NywxNSArNzE4LDI1IEBACiAJICogYXJlIG5vIGRlbGFsbG9jIGJ5dGVzIGluIHRoaXMgYXJlYSwgaXQgaXMgc2FmZSB0byB1cGRhdGUKIAkgKiBkaXNrX2lfc2l6ZSB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24uCiAJICovCi0JaWYgKGlfc2l6ZV90ZXN0ID4gZW50cnlfZW5kKG9yZGVyZWQpICYmCi0JICAgICF0ZXN0X3JhbmdlX2JpdChpb190cmVlLCBlbnRyeV9lbmQob3JkZXJlZCksIGlfc2l6ZV90ZXN0IC0gMSwKLQkJCSAgIEVYVEVOVF9ERUxBTExPQywgMCwgTlVMTCkpIHsKLQkJbmV3X2lfc2l6ZSA9IG1pbl90KHU2NCwgaV9zaXplX3Rlc3QsIGlfc2l6ZV9yZWFkKGlub2RlKSk7CisJaWYgKGlfc2l6ZV90ZXN0ID4gb2Zmc2V0ICYmCisJICAgICF0ZXN0X3JhbmdlX2JpdChpb190cmVlLCBvZmZzZXQsIGlfc2l6ZV90ZXN0IC0gMSwKKwkJCSAgICBFWFRFTlRfREVMQUxMT0MsIDAsIE5VTEwpKSB7CisJCW5ld19pX3NpemUgPSBtaW5fdCh1NjQsIGlfc2l6ZV90ZXN0LCBpX3NpemUpOwogCX0KIAlCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUgPSBuZXdfaV9zaXplOworCXJldCA9IDA7CiBvdXQ6CisJLyoKKwkgKiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgb3JkZXJlZCBleHRlbnQgd2l0aCB0aGUgdHJlZSBsb2NrIGhlbGQKKwkgKiBzbyB0aGF0IG90aGVyIHBlb3BsZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9uJ3QgZmluZCBvdXIgZnVsbHkKKwkgKiBwcm9jZXNzZWQgb3JkZXJlZCBlbnRyeSBhbmQgc2tpcCB1cGRhdGluZyB0aGUgaV9zaXplCisJICovCisJaWYgKG9yZGVyZWQpCisJCV9fYnRyZnNfcmVtb3ZlX29yZGVyZWRfZXh0ZW50KGlub2RlLCBvcmRlcmVkKTsKIAltdXRleF91bmxvY2soJnRyZWUtPm11dGV4KTsKLQlyZXR1cm4gMDsKKwlpZiAob3JkZXJlZCkKKwkJd2FrZV91cCgmb3JkZXJlZC0+d2FpdCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKaW5kZXggZjgyZTg3NC4uMWZlMTI4MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKQEAgLTE1MCwxMiArMTUwLDEzIEBACiBpbnQgYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGxlbik7CiBzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKgogYnRyZnNfbG9va3VwX2ZpcnN0X29yZGVyZWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqIGlub2RlLCB1NjQgZmlsZV9vZmZzZXQpOwotaW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZCk7CiBpbnQgYnRyZnNfZmluZF9vcmRlcmVkX3N1bShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LCB1NjQgZGlza19ieXRlbnIsIHUzMiAqc3VtKTsKLWludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG5vY293X29ubHkpOwogaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KTsKIGludCBidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgaW50IG5vY293X29ubHksIGludCBkZWxheV9pcHV0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IGNmY2M5M2MuLmE5NzI4NjggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTE1NjEsNiArMTU2MSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwdXRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGlub2RldmVjICppdmVjOworCXdoaWxlICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlpdmVjID0gbGlzdF9lbnRyeShsaXN0LT5uZXh0LCBzdHJ1Y3QgaW5vZGV2ZWMsIGxpc3QpOworCQlsaXN0X2RlbCgmaXZlYy0+bGlzdCk7CisJCXdoaWxlIChpdmVjLT5uciA+IDApIHsKKwkJCWl2ZWMtPm5yLS07CisJCQlpcHV0KGl2ZWMtPmlub2RlW2l2ZWMtPm5yXSk7CisJCX0KKwkJa2ZyZWUoaXZlYyk7CisJfQorfQorCiBzdGF0aWMgaW50IGZpbmRfbmV4dF9rZXkoc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBsZXZlbCwKIAkJCSBzdHJ1Y3QgYnRyZnNfa2V5ICprZXkpCiAKQEAgLTE3MjMsNiArMTczNywxMSBAQAogCiAJCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCisJCS8qCisJCSAqIHB1dCBpbm9kZXMgb3V0c2lkZSB0cmFuc2FjdGlvbiwgb3RoZXJ3aXNlIHdlIG1heSBkZWFkbG9jay4KKwkJICovCisJCXB1dF9pbm9kZXMoJmlub2RlX2xpc3QpOworCiAJCWlmIChyZXBsYWNlZCAmJiByYy0+c3RhZ2UgPT0gVVBEQVRFX0RBVEFfUFRSUykKIAkJCWludmFsaWRhdGVfZXh0ZW50X2NhY2hlKHJvb3QsICZrZXksICZuZXh0X2tleSk7CiAJfQpAQCAtMTc1MiwxOSArMTc3MSw3IEBACiAKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIAotCS8qCi0JICogcHV0IGlub2RlcyB3aGlsZSB3ZSBhcmVuJ3QgaG9sZGluZyB0aGUgdHJlZSBsb2NrcwotCSAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmaW5vZGVfbGlzdCkpIHsKLQkJc3RydWN0IGlub2RldmVjICppdmVjOwotCQlpdmVjID0gbGlzdF9lbnRyeShpbm9kZV9saXN0Lm5leHQsIHN0cnVjdCBpbm9kZXZlYywgbGlzdCk7Ci0JCWxpc3RfZGVsKCZpdmVjLT5saXN0KTsKLQkJd2hpbGUgKGl2ZWMtPm5yID4gMCkgewotCQkJaXZlYy0+bnItLTsKLQkJCWlwdXQoaXZlYy0+aW5vZGVbaXZlYy0+bnJdKTsKLQkJfQotCQlrZnJlZShpdmVjKTsKLQl9CisJcHV0X2lub2RlcygmaW5vZGVfbGlzdCk7CiAKIAlpZiAocmVwbGFjZWQgJiYgcmMtPnN0YWdlID09IFVQREFURV9EQVRBX1BUUlMpCiAJCWludmFsaWRhdGVfZXh0ZW50X2NhY2hlKHJvb3QsICZrZXksICZuZXh0X2tleSk7CkBAIC0zNTM0LDggKzM1NDEsOCBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJjLT5ibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJjLT5ibG9ja19ncm91cC0+ZmxhZ3MpOwogCi0JYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKGZzX2luZm8tPnRyZWVfcm9vdCk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMoZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMoZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhmc19pbmZvLT50cmVlX3Jvb3QsIDAsIDApOwogCiAJd2hpbGUgKDEpIHsKIAkJcmMtPmV4dGVudHNfZm91bmQgPSAwOwpAQCAtMzc1NSw2ICszNzYyLDcgQEAKIAkJCQkgICAgICAgQlRSRlNfREFUQV9SRUxPQ19UUkVFX09CSkVDVElEKTsKIAkJaWYgKElTX0VSUihmc19yb290KSkKIAkJCWVyciA9IFBUUl9FUlIoZnNfcm9vdCk7CisJCWJ0cmZzX29ycGhhbl9jbGVhbnVwKGZzX3Jvb3QpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggNzUyYTU0Ni4uM2Y5YjQ1NyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJY2hhciAqcCwgKm51bTsKIAlpbnQgaW50YXJnOworCWludCByZXQgPSAwOwogCiAJaWYgKCFvcHRpb25zKQogCQlyZXR1cm4gMDsKQEAgLTI2MiwxMiArMjYzLDE4IEBACiAJCWNhc2UgT3B0X2Rpc2NhcmQ6CiAJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRElTQ0FSRCk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyOgorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IHVucmVjb2duaXplZCBtb3VudCBvcHRpb24gIgorCQkJICAgICAgICInJXMnXG4iLCBwKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAJfQorb3V0OgogCWtmcmVlKG9wdGlvbnMpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC00MDUsOCArNDEyLDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOwotCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDApOworCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290LCAwKTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAwKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTQ1MCw2ICs0NTcsOCBAQAogCQlzZXFfcHV0cyhzZXEsICIsbm90cmVlbG9nIik7CiAJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIEZMVVNIT05DT01NSVQpKQogCQlzZXFfcHV0cyhzZXEsICIsZmx1c2hvbmNvbW1pdCIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGRpc2NhcmQiKTsKIAlpZiAoIShyb290LT5mc19pbmZvLT5zYi0+c19mbGFncyAmIE1TX1BPU0lYQUNMKSkKIAkJc2VxX3B1dHMoc2VxLCAiLG5vYWNsIik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBjMjA3ZThjLi5iMmFjYzc5IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTMzMyw2ICszMzMsOSBAQAogCW1lbXNldCh0cmFucywgMCwgc2l6ZW9mKCp0cmFucykpOwogCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCB0cmFucyk7CiAKKwlpZiAodGhyb3R0bGUpCisJCWJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHJvb3QpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NCw3ICszNTcsNyBAQAogICogdGhvc2UgZXh0ZW50cyBhcmUgc2VudCB0byBkaXNrIGJ1dCBkb2VzIG5vdCB3YWl0IG9uIHRoZW0KICAqLwogaW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJICAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcywgaW50IG1hcmspCiB7CiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKQEAgLTM2Nyw3ICszNzAsNyBAQAogCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KGRpcnR5X3BhZ2VzLCBzdGFydCwgJnN0YXJ0LCAmZW5kLAotCQkJCQkgICAgRVhURU5UX0RJUlRZKTsKKwkJCQkJICAgIG1hcmspOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKQEAgLTQxMyw3ICs0MTYsNyBAQAogICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCiAgKi8KIGludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKKwkJCSAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMsIGludCBtYXJrKQogewogCWludCByZXQ7CiAJaW50IGVyciA9IDA7CkBAIC00MjUsMTIgKzQyOCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAl3aGlsZSAoMSkgewotCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKLQkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CisJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdChkaXJ0eV9wYWdlcywgc3RhcnQsICZzdGFydCwgJmVuZCwKKwkJCQkJICAgIG1hcmspOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJY2xlYXJfZXh0ZW50X2RpcnR5KGRpcnR5X3BhZ2VzLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7CisJCWNsZWFyX2V4dGVudF9iaXRzKGRpcnR5X3BhZ2VzLCBzdGFydCwgZW5kLCBtYXJrLCBHRlBfTk9GUyk7CiAJCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKIAkJCWluZGV4ID0gc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAkJCXN0YXJ0ID0gKHU2NCkoaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtNDYwLDEzICs0NjMsMTMgQEAKICAqIHRob3NlIGV4dGVudHMgYXJlIG9uIGRpc2sgZm9yIHRyYW5zYWN0aW9uIG9yIGxvZyBjb21taXQKICAqLwogaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKQorCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMsIGludCBtYXJrKQogewogCWludCByZXQ7CiAJaW50IHJldDI7CiAKLQlyZXQgPSBidHJmc193cml0ZV9tYXJrZWRfZXh0ZW50cyhyb290LCBkaXJ0eV9wYWdlcyk7Ci0JcmV0MiA9IGJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzLCBtYXJrKTsKKwlyZXQyID0gYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhyb290LCBkaXJ0eV9wYWdlcywgbWFyayk7CiAJcmV0dXJuIHJldCB8fCByZXQyOwogfQogCkBAIC00NzksNyArNDgyLDggQEAKIAkJcmV0dXJuIGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoYnRyZWVfaW5vZGUtPmlfbWFwcGluZyk7CiAJfQogCXJldHVybiBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhyb290LAotCQkJCQkgICAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kaXJ0eV9wYWdlcyk7CisJCQkJCSAgICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRpcnR5X3BhZ2VzLAorCQkJCQkgICBFWFRFTlRfRElSVFkpOwogfQogCiAvKgpAQCAtNDk3LDEzICs1MDEsMTYgQEAKIHsKIAlpbnQgcmV0OwogCXU2NCBvbGRfcm9vdF9ieXRlbnI7CisJdTY0IG9sZF9yb290X3VzZWQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnRyZWVfcm9vdCA9IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdDsKIAorCW9sZF9yb290X3VzZWQgPSBidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSk7CiAJYnRyZnNfd3JpdGVfZGlydHlfYmxvY2tfZ3JvdXBzKHRyYW5zLCByb290KTsKIAogCXdoaWxlICgxKSB7CiAJCW9sZF9yb290X2J5dGVuciA9IGJ0cmZzX3Jvb3RfYnl0ZW5yKCZyb290LT5yb290X2l0ZW0pOwotCQlpZiAob2xkX3Jvb3RfYnl0ZW5yID09IHJvb3QtPm5vZGUtPnN0YXJ0KQorCQlpZiAob2xkX3Jvb3RfYnl0ZW5yID09IHJvb3QtPm5vZGUtPnN0YXJ0ICYmCisJCSAgICBvbGRfcm9vdF91c2VkID09IGJ0cmZzX3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtKSkKIAkJCWJyZWFrOwogCiAJCWJ0cmZzX3NldF9yb290X25vZGUoJnJvb3QtPnJvb3RfaXRlbSwgcm9vdC0+bm9kZSk7CkBAIC01MTIsNiArNTE5LDcgQEAKIAkJCQkJJnJvb3QtPnJvb3RfaXRlbSk7CiAJCUJVR19PTihyZXQpOwogCisJCW9sZF9yb290X3VzZWQgPSBidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSk7CiAJCXJldCA9IGJ0cmZzX3dyaXRlX2RpcnR5X2Jsb2NrX2dyb3Vwcyh0cmFucywgcm9vdCk7CiAJCUJVR19PTihyZXQpOwogCX0KQEAgLTc5NSw3ICs4MDMsNiBAQAogCW1lbWNweSgmcGVuZGluZy0+cm9vdF9rZXksICZrZXksIHNpemVvZihrZXkpKTsKIGZhaWw6CiAJa2ZyZWUobmV3X3Jvb3RfaXRlbSk7Ci0JYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgwNyw3ICs4MTQsNiBAQAogCXU2NCBpbmRleCA9IDA7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CiAJc3RydWN0IGlub2RlICpwYXJlbnRfaW5vZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcGFyZW50X3Jvb3Q7CiAKIAlwYXJlbnRfaW5vZGUgPSBwZW5kaW5nLT5kZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwpAQCAtODM5LDggKzg0NSw2IEBACiAKIAlCVUdfT04ocmV0KTsKIAotCWlub2RlID0gYnRyZnNfbG9va3VwX2RlbnRyeShwYXJlbnRfaW5vZGUsIHBlbmRpbmctPmRlbnRyeSk7Ci0JZF9pbnN0YW50aWF0ZShwZW5kaW5nLT5kZW50cnksIGlub2RlKTsKIGZhaWw6CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCBmc19pbmZvLT5mc19yb290KTsKIAlyZXR1cm4gcmV0OwpAQCAtOTk0LDExICs5OTgsMTEgQEAKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAkJaWYgKGZsdXNoX29uX2NvbW1pdCkgewotCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOwotCQkJcmV0ID0gYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisJCQlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCwgMSk7CisJCQlyZXQgPSBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAxKTsKIAkJCUJVR19PTihyZXQpOwogCQl9IGVsc2UgaWYgKHNuYXBfcGVuZGluZykgewotCQkJcmV0ID0gYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMSk7CisJCQlyZXQgPSBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAxKTsKIAkJCUJVR19PTihyZXQpOwogCQl9CiAKQEAgLTExMTYsNiArMTEyMCwxMCBAQAogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOwogCiAJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIHRyYW5zKTsKKworCWlmIChjdXJyZW50ICE9IHJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWQpCisJCWJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHJvb3QpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaCBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKaW5kZXggZDRlM2U3YS4uOTNjN2NjYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAorKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogaW50IGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CisJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcywgaW50IG1hcmspOwogaW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKTsKKwkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzLCBpbnQgbWFyayk7CiBpbnQgYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CisJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcywgaW50IG1hcmspOwogaW50IGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDc0MTY2NmEuLjRhOTQzNGIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtNTQyLDggKzU0Miw4IEBACiAKIAlzYXZlZF9uYnl0ZXMgPSBpbm9kZV9nZXRfYnl0ZXMoaW5vZGUpOwogCS8qIGRyb3AgYW55IG92ZXJsYXBwaW5nIGV4dGVudHMgKi8KLQlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIHJvb3QsIGlub2RlLAotCQkJIHN0YXJ0LCBleHRlbnRfZW5kLCBleHRlbnRfZW5kLCBzdGFydCwgJmFsbG9jX2hpbnQsIDEpOworCXJldCA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgaW5vZGUsIHN0YXJ0LCBleHRlbnRfZW5kLAorCQkJCSAmYWxsb2NfaGludCwgMSk7CiAJQlVHX09OKHJldCk7CiAKIAlpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9SRUcgfHwKQEAgLTkzMCw2ICs5MzAsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpbnNlcnRfb3JwaGFuX2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IG9mZnNldCkKK3sKKwlpbnQgcmV0OworCXJldCA9IGJ0cmZzX2ZpbmRfb3JwaGFuX2l0ZW0ocm9vdCwgb2Zmc2V0KTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gYnRyZnNfaW5zZXJ0X29ycGhhbl9pdGVtKHRyYW5zLCByb290LCBvZmZzZXQpOworCXJldHVybiByZXQ7Cit9CisKKwogLyoKICAqIFRoZXJlIGFyZSBhIGZldyBjb3JuZXJzIHdoZXJlIHRoZSBsaW5rIGNvdW50IG9mIHRoZSBmaWxlIGNhbid0CiAgKiBiZSBwcm9wZXJseSBtYWludGFpbmVkIGR1cmluZyByZXBsYXkuICBTbywgaW5zdGVhZCBvZiBhZGRpbmcKQEAgLTk5Nyw5ICsxMDA4LDEzIEBACiAJfQogCUJUUkZTX0koaW5vZGUpLT5pbmRleF9jbnQgPSAodTY0KS0xOwogCi0JaWYgKGlub2RlLT5pX25saW5rID09IDAgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQlyZXQgPSByZXBsYXlfZGlyX2RlbGV0ZXModHJhbnMsIHJvb3QsIE5VTEwsIHBhdGgsCi0JCQkJCSBpbm9kZS0+aV9pbm8sIDEpOworCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCQlyZXQgPSByZXBsYXlfZGlyX2RlbGV0ZXModHJhbnMsIHJvb3QsIE5VTEwsIHBhdGgsCisJCQkJCQkgaW5vZGUtPmlfaW5vLCAxKTsKKwkJCUJVR19PTihyZXQpOworCQl9CisJCXJldCA9IGluc2VydF9vcnBoYW5faXRlbSh0cmFucywgcm9vdCwgaW5vZGUtPmlfaW5vKTsKIAkJQlVHX09OKHJldCk7CiAJfQogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTE1ODcsNyArMTYwMiw2IEBACiAJCS8qIGlub2RlIGtleXMgYXJlIGRvbmUgZHVyaW5nIHRoZSBmaXJzdCBzdGFnZSAqLwogCQlpZiAoa2V5LnR5cGUgPT0gQlRSRlNfSU5PREVfSVRFTV9LRVkgJiYKIAkJICAgIHdjLT5zdGFnZSA9PSBMT0dfV0FMS19SRVBMQVlfSU5PREVTKSB7Ci0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCQkJc3RydWN0IGJ0cmZzX2lub2RlX2l0ZW0gKmlub2RlX2l0ZW07CiAJCQl1MzIgbW9kZTsKIApAQCAtMTYwMywzMSArMTYxNywxNiBAQAogCQkJCQkgICAgIGViLCBpLCAma2V5KTsKIAkJCUJVR19PTihyZXQpOwogCi0JCQkvKiBmb3IgcmVndWxhciBmaWxlcywgdHJ1bmNhdGUgYXdheQotCQkJICogZXh0ZW50cyBwYXN0IHRoZSBuZXcgRU9GCisJCQkvKiBmb3IgcmVndWxhciBmaWxlcywgbWFrZSBzdXJlIGNvcnJlc3BvbmRpbmcKKwkJCSAqIG9yaHBhbiBpdGVtIGV4aXN0LiBleHRlbnRzIHBhc3QgdGhlIG5ldyBFT0YKKwkJCSAqIHdpbGwgYmUgdHJ1bmNhdGVkIGxhdGVyIGJ5IG9ycGhhbiBjbGVhbnVwLgogCQkJICovCiAJCQlpZiAoU19JU1JFRyhtb2RlKSkgewotCQkJCWlub2RlID0gcmVhZF9vbmVfaW5vZGUocm9vdCwKLQkJCQkJCSAgICAgICBrZXkub2JqZWN0aWQpOwotCQkJCUJVR19PTighaW5vZGUpOwotCi0JCQkJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXMod2MtPnRyYW5zLAotCQkJCQlyb290LCBpbm9kZSwgaW5vZGUtPmlfc2l6ZSwKLQkJCQkJQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKKwkJCQlyZXQgPSBpbnNlcnRfb3JwaGFuX2l0ZW0od2MtPnRyYW5zLCByb290LAorCQkJCQkJCSBrZXkub2JqZWN0aWQpOwogCQkJCUJVR19PTihyZXQpOwotCi0JCQkJLyogaWYgdGhlIG5saW5rIGNvdW50IGlzIHplcm8gaGVyZSwgdGhlIGlwdXQKLQkJCQkgKiB3aWxsIGZyZWUgdGhlIGlub2RlLiAgV2UgYnVtcCBpdCB0byBtYWtlCi0JCQkJICogc3VyZSBpdCBkb2Vzbid0IGdldCBmcmVlZCB1bnRpbCB0aGUgbGluawotCQkJCSAqIGNvdW50IGZpeHVwIGlzIGRvbmUKLQkJCQkgKi8KLQkJCQlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkgewotCQkJCQlidHJmc19pbmNfbmxpbmsoaW5vZGUpOwotCQkJCQlidHJmc191cGRhdGVfaW5vZGUod2MtPnRyYW5zLAotCQkJCQkJCSAgIHJvb3QsIGlub2RlKTsKLQkJCQl9Ci0JCQkJaXB1dChpbm9kZSk7CiAJCQl9CisKIAkJCXJldCA9IGxpbmtfdG9fZml4dXBfZGlyKHdjLT50cmFucywgcm9vdCwKIAkJCQkJCXBhdGgsIGtleS5vYmplY3RpZCk7CiAJCQlCVUdfT04ocmV0KTsKQEAgLTE5NzcsMTAgKzE5NzYsMTEgQEAKIHsKIAlpbnQgaW5kZXgxOwogCWludCBpbmRleDI7CisJaW50IG1hcms7CiAJaW50IHJldDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZ19yb290X3RyZWUgPSByb290LT5mc19pbmZvLT5sb2dfcm9vdF90cmVlOwotCXU2NCBsb2dfdHJhbnNpZCA9IDA7CisJdW5zaWduZWQgbG9uZyBsb2dfdHJhbnNpZCA9IDA7CiAKIAltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCWluZGV4MSA9IHJvb3QtPmxvZ190cmFuc2lkICUgMjsKQEAgLTIwMTQsMjQgKzIwMTQsMjkgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbG9nX3RyYW5zaWQgPSByb290LT5sb2dfdHJhbnNpZDsKKwlpZiAobG9nX3RyYW5zaWQgJSAyID09IDApCisJCW1hcmsgPSBFWFRFTlRfRElSVFk7CisJZWxzZQorCQltYXJrID0gRVhURU5UX05FVzsKKwogCS8qIHdlIHN0YXJ0IElPIG9uICBhbGwgdGhlIG1hcmtlZCBleHRlbnRzIGhlcmUsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogCSAqIHdhaXQgZm9yIHRoZW0gdW50aWwgbGF0ZXIuCiAJICovCi0JcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzLCBtYXJrKTsKIAlCVUdfT04ocmV0KTsKIAogCWJ0cmZzX3NldF9yb290X25vZGUoJmxvZy0+cm9vdF9pdGVtLCBsb2ctPm5vZGUpOwogCiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKLQlsb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ190cmFuc2lkKys7CiAJbG9nLT5sb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ19zdGFydF9waWQgPSAwOwogCXNtcF9tYigpOwogCS8qCi0JICogbG9nIHRyZWUgaGFzIGJlZW4gZmx1c2hlZCB0byBkaXNrLCBuZXcgbW9kaWZpY2F0aW9ucyBvZgotCSAqIHRoZSBsb2cgd2lsbCBiZSB3cml0dGVuIHRvIG5ldyBwb3NpdGlvbnMuIHNvIGl0J3Mgc2FmZSB0bwotCSAqIGFsbG93IGxvZyB3cml0ZXJzIHRvIGdvIGluLgorCSAqIElPIGhhcyBiZWVuIHN0YXJ0ZWQsIGJsb2NrcyBvZiB0aGUgbG9nIHRyZWUgaGF2ZSBXUklUVEVOIGZsYWcgc2V0CisJICogaW4gdGhlaXIgaGVhZGVycy4gbmV3IG1vZGlmaWNhdGlvbnMgb2YgdGhlIGxvZyB3aWxsIGJlIHdyaXR0ZW4gdG8KKwkgKiBuZXcgcG9zaXRpb25zLiBzbyBpdCdzIHNhZmUgdG8gYWxsb3cgbG9nIHdyaXRlcnMgdG8gZ28gaW4uCiAJICovCiAJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCkBAIC0yMDUyLDcgKzIwNTcsNyBAQAogCiAJaW5kZXgyID0gbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdKSkgewotCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcywgbWFyayk7CiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKIAkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKQEAgLTIwNzIsMTYgKzIwNzcsMTcgQEAKIAkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgogCSAqLwogCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgewotCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcywgbWFyayk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXRfd2FrZV9sb2dfcm9vdDsKIAl9CiAKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2dfcm9vdF90cmVlLAotCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMpOworCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMsCisJCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX05FVyk7CiAJQlVHX09OKHJldCk7Ci0JYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CisJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcywgbWFyayk7CiAKIAlidHJmc19zZXRfc3VwZXJfbG9nX3Jvb3QoJnJvb3QtPmZzX2luZm8tPnN1cGVyX2Zvcl9jb21taXQsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bm9kZS0+c3RhcnQpOwpAQCAtMjE0NywxMiArMjE1MywxMiBAQAogCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZsb2ctPmRpcnR5X2xvZ19wYWdlcywKLQkJCQkgICAgMCwgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfRElSVFkpOworCQkJCTAsICZzdGFydCwgJmVuZCwgRVhURU5UX0RJUlRZIHwgRVhURU5UX05FVyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQljbGVhcl9leHRlbnRfZGlydHkoJmxvZy0+ZGlydHlfbG9nX3BhZ2VzLAotCQkJCSAgIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKKwkJY2xlYXJfZXh0ZW50X2JpdHMoJmxvZy0+ZGlydHlfbG9nX3BhZ2VzLCBzdGFydCwgZW5kLAorCQkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX05FVywgR0ZQX05PRlMpOwogCX0KIAogCWlmIChsb2ctPmxvZ190cmFuc2lkID4gMCkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IDdlZGE0ODMuLjE5OGNmZjIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTIyMDksNyArMjIwOSw3IEBACiAJCW1heF9jaHVua19zaXplID0gMTAgKiBjYWxjX3NpemU7CiAJCW1pbl9zdHJpcGVfc2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CiAJfSBlbHNlIGlmICh0eXBlICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpIHsKLQkJbWF4X2NodW5rX3NpemUgPSA0ICogY2FsY19zaXplOworCQltYXhfY2h1bmtfc2l6ZSA9IDI1NiAqIDEwMjQgKiAxMDI0OwogCQltaW5fc3RyaXBlX3NpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogCX0gZWxzZSBpZiAodHlwZSAmIEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTSkgewogCQljYWxjX3NpemUgPSA4ICogMTAyNCAqIDEwMjQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5jIGIvZnMvYnRyZnMveGF0dHIuYwppbmRleCBiNmRkNTk2Li4xOTNiNThmIDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTg1LDIyICs4NSwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2J0cmZzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGRvX3NldHhhdHRyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBidHJmc19kaXJfaXRlbSAqZGk7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKLQlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlpbnQgcmV0ID0gMCwgbW9kID0gMDsKKwlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHJldCA9IDA7CisKKwlpZiAobmFtZV9sZW4gKyBzaXplID4gQlRSRlNfTUFYX1hBVFRSX1NJWkUocm9vdCkpCisJCXJldHVybiAtRU5PU1BDOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCiAJLyogZmlyc3QgbGV0cyBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgeGF0dHIgKi8KIAlkaSA9IGJ0cmZzX2xvb2t1cF94YXR0cih0cmFucywgcm9vdCwgcGF0aCwgaW5vZGUtPmlfaW5vLCBuYW1lLAogCQkJCXN0cmxlbihuYW1lKSwgLTEpOwpAQCAtMTE4LDE1ICsxMTksMTIgQEAKIAkJfQogCiAJCXJldCA9IGJ0cmZzX2RlbGV0ZV9vbmVfZGlyX25hbWUodHJhbnMsIHJvb3QsIHBhdGgsIGRpKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQlCVUdfT04ocmV0KTsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCiAJCS8qIGlmIHdlIGRvbid0IGhhdmUgYSB2YWx1ZSB0aGVuIHdlIGFyZSByZW1vdmluZyB0aGUgeGF0dHIgKi8KLQkJaWYgKCF2YWx1ZSkgewotCQkJbW9kID0gMTsKKwkJaWYgKCF2YWx1ZSkKIAkJCWdvdG8gb3V0OwotCQl9CiAJfSBlbHNlIHsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCkBAIC0xMzgsMjAgKzEzNiw0NSBAQAogCX0KIAogCS8qIG9rIHdlIGhhdmUgdG8gY3JlYXRlIGEgY29tcGxldGVseSBuZXcgeGF0dHIgKi8KLQlyZXQgPSBidHJmc19pbnNlcnRfeGF0dHJfaXRlbSh0cmFucywgcm9vdCwgbmFtZSwgc3RybGVuKG5hbWUpLAotCQkJCSAgICAgIHZhbHVlLCBzaXplLCBpbm9kZS0+aV9pbm8pOworCXJldCA9IGJ0cmZzX2luc2VydF94YXR0cl9pdGVtKHRyYW5zLCByb290LCBwYXRoLCBpbm9kZS0+aV9pbm8sCisJCQkJICAgICAgbmFtZSwgbmFtZV9sZW4sIHZhbHVlLCBzaXplKTsKKwlCVUdfT04ocmV0KTsKK291dDoKKwlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IF9fYnRyZnNfc2V0eGF0dHIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCWludCByZXQ7CisKKwlpZiAodHJhbnMpCisJCXJldHVybiBkb19zZXR4YXR0cih0cmFucywgaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CisKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCisJcmV0ID0gZG9fc2V0eGF0dHIodHJhbnMsIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCW1vZCA9IDE7CiAKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwlCVUdfT04ocmV0KTsKIG91dDoKLQlpZiAobW9kKSB7Ci0JCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKLQl9Ci0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAyKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTQsNyArMzM3LDkgQEAKIAogCWlmIChzaXplID09IDApCiAJCXZhbHVlID0gIiI7ICAvKiBlbXB0eSBFQSwgZG8gbm90IHJlbW92ZSAqLwotCXJldHVybiBfX2J0cmZzX3NldHhhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKKworCXJldHVybiBfX2J0cmZzX3NldHhhdHRyKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsCisJCQkJZmxhZ3MpOwogfQogCiBpbnQgYnRyZnNfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtMzI5LDEwICszNTQsMTMgQEAKIAogCWlmICghYnRyZnNfaXNfdmFsaWRfeGF0dHIobmFtZSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gX19idHJmc19zZXR4YXR0cihkZW50cnktPmRfaW5vZGUsIG5hbWUsIE5VTEwsIDAsIFhBVFRSX1JFUExBQ0UpOworCisJcmV0dXJuIF9fYnRyZnNfc2V0eGF0dHIoTlVMTCwgZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBOVUxMLCAwLAorCQkJCVhBVFRSX1JFUExBQ0UpOwogfQogCi1pbnQgYnRyZnNfeGF0dHJfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcikKK2ludCBidHJmc194YXR0cl9zZWN1cml0eV9pbml0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCiB7CiAJaW50IGVycjsKIAlzaXplX3QgbGVuOwpAQCAtMzU0LDcgKzM4Miw3IEBACiAJfSBlbHNlIHsKIAkJc3RyY3B5KG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCk7CiAJCXN0cmNweShuYW1lICsgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiwgc3VmZml4KTsKLQkJZXJyID0gX19idHJmc19zZXR4YXR0cihpbm9kZSwgbmFtZSwgdmFsdWUsIGxlbiwgMCk7CisJCWVyciA9IF9fYnRyZnNfc2V0eGF0dHIodHJhbnMsIGlub2RlLCBuYW1lLCB2YWx1ZSwgbGVuLCAwKTsKIAkJa2ZyZWUobmFtZSk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5oIGIvZnMvYnRyZnMveGF0dHIuaAppbmRleCBjNzFlOWMzLi43MjFlZmEwIDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5oCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmgKQEAgLTI3LDE1ICsyNywxNiBAQAogCiBleHRlcm4gc3NpemVfdCBfX2J0cmZzX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIGludCBfX2J0cmZzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLQorZXh0ZXJuIGludCBfX2J0cmZzX3NldHhhdHRyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHNzaXplX3QgYnRyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgYnRyZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gaW50IGJ0cmZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSk7CiAKLWV4dGVybiBpbnQgYnRyZnNfeGF0dHJfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CitleHRlcm4gaW50IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CiAKICNlbmRpZiAvKiBfX1hBVFRSX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvYmluZC5jIGIvZnMvY2FjaGVmaWxlcy9iaW5kLmMKaW5kZXggMzc5N2UwMC4uMjkwNjA3NyAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9iaW5kLmMKKysrIGIvZnMvY2FjaGVmaWxlcy9iaW5kLmMKQEAgLTg0LDcgKzg0LDcgQEAKIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYWRkX2NhY2hlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKIHsKIAlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKmZzZGVmOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHBhdGggcGF0aDsKIAlzdHJ1Y3Qga3N0YXRmcyBzdGF0czsKIAlzdHJ1Y3QgZGVudHJ5ICpncmF2ZXlhcmQsICpjYWNoZWRpciwgKnJvb3Q7CiAJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CkBAIC0xMTQsMTUgKzExNCwxMiBAQAogCV9kZWJ1ZygiLSBmc2RlZiAlcCIsIGZzZGVmKTsKIAogCS8qIGxvb2sgdXAgdGhlIGRpcmVjdG9yeSBhdCB0aGUgcm9vdCBvZiB0aGUgY2FjaGUgKi8KLQltZW1zZXQoJm5kLCAwLCBzaXplb2YobmQpKTsKLQotCXJldCA9IHBhdGhfbG9va3VwKGNhY2hlLT5yb290ZGlybmFtZSwgTE9PS1VQX0RJUkVDVE9SWSwgJm5kKTsKKwlyZXQgPSBrZXJuX3BhdGgoY2FjaGUtPnJvb3RkaXJuYW1lLCBMT09LVVBfRElSRUNUT1JZLCAmcGF0aCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3Jfb3Blbl9yb290OwogCi0JY2FjaGUtPm1udCA9IG1udGdldChuZC5wYXRoLm1udCk7Ci0Jcm9vdCA9IGRnZXQobmQucGF0aC5kZW50cnkpOwotCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwljYWNoZS0+bW50ID0gcGF0aC5tbnQ7CisJcm9vdCA9IHBhdGguZGVudHJ5OwogCiAJLyogY2hlY2sgcGFyYW1ldGVycyAqLwogCXJldCA9IC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uYyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKaW5kZXggNDYxODUxNi4uYzI0MTM1NiAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uYworKysgYi9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTI1Nyw4ICsyNTgsNyBAQAogCQlpZiAoYXJncyA9PSBkYXRhKQogCQkJZ290byBlcnJvcjsKIAkJKmFyZ3MgPSAnXDAnOwotCQlmb3IgKGFyZ3MrKzsgaXNzcGFjZSgqYXJncyk7IGFyZ3MrKykKLQkJCWNvbnRpbnVlOworCQlhcmdzID0gc2tpcF9zcGFjZXMoKythcmdzKTsKIAl9CiAKIAkvKiBydW4gdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmQgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9yZHdyLmMgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwppbmRleCBhNmM4YzZmLi4xZDgzMzI1IDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL3Jkd3IuYworKysgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwpAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKQEAgLTkyMyw3ICs5MjIsNiBAQAogCWlmIChJU19FUlIoZmlsZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihmaWxlKTsKIAl9IGVsc2UgewotCQlpbWFfY291bnRzX2dldChmaWxlKTsKIAkJcmV0ID0gLUVJTzsKIAkJaWYgKGZpbGUtPmZfb3AtPndyaXRlKSB7CiAJCQlwb3MgPSAobG9mZl90KSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9leHBvcnQuYyBiL2ZzL2NpZnMvZXhwb3J0LmMKaW5kZXggNzU5NDlkNi4uNjE3N2Y3YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9leHBvcnQuYworKysgYi9mcy9jaWZzL2V4cG9ydC5jCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogIC8qCi0gICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nCisgICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL0V4cG9ydGluZwogICAqIGFuZCBleGFtcGxlcyBpbiBmcy9leHBvcnRmcwogICAqCiAgICogU2luY2UgY2lmcyBpcyBhIG5ldHdvcmsgZmlsZSBzeXN0ZW0sIGFuICJmc2lkIiBtdXN0IGJlIGluY2x1ZGVkIGZvcgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA2YzE5MDQwLi4wMGQ5MGMyIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RpcmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDIzNDY4OTUuLjMzMmRkMDAgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xMTEsNDMgKzExMSw0MCBAQAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgogCisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorCiAjaWZkZWYgQ09ORklHX1NQQVJDCiAjaW5jbHVkZSA8YXNtL2ZiaW8uaD4KICNlbmRpZgogCi1zdGF0aWMgaW50IGRvX2lvY3RsMzJfcG9pbnRlcih1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IGZpbGUgKmYpCi17Ci0JcmV0dXJuIHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOwotfQotCi1zdGF0aWMgaW50IHdfbG9uZyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB3X2xvbmcodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQljb21wYXRfdWxvbmdfdCBfX3VzZXIgKmFyZ3ApCiB7CiAJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwogCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyB2YWw7Ci0JCisKIAlzZXRfZnMgKEtFUk5FTF9EUyk7CiAJZXJyID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKSZ2YWwpOwogCXNldF9mcyAob2xkX2ZzKTsKLQlpZiAoIWVyciAmJiBwdXRfdXNlcih2YWwsICh1MzIgX191c2VyICopY29tcGF0X3B0cihhcmcpKSkKKwlpZiAoIWVyciAmJiBwdXRfdXNlcih2YWwsIGFyZ3ApKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gZXJyOwogfQotIAotc3RhdGljIGludCByd19sb25nKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisKK3N0YXRpYyBpbnQgcndfbG9uZyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCisJCWNvbXBhdF91bG9uZ190IF9fdXNlciAqYXJncCkKIHsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JdTMyIF9fdXNlciAqYXJncHRyID0gY29tcGF0X3B0cihhcmcpOwogCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyB2YWw7Ci0JCi0JaWYoZ2V0X3VzZXIodmFsLCBhcmdwdHIpKQorCisJaWYoZ2V0X3VzZXIodmFsLCBhcmdwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJc2V0X2ZzIChLRVJORUxfRFMpOwogCWVyciA9IHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZykmdmFsKTsKIAlzZXRfZnMgKG9sZF9mcyk7Ci0JaWYgKCFlcnIgJiYgcHV0X3VzZXIodmFsLCBhcmdwdHIpKQorCWlmICghZXJyICYmIHB1dF91c2VyKHZhbCwgYXJncCkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNjEsNyArMTU4LDggQEAKIAl9IHU7CiB9OwogCi1zdGF0aWMgaW50IGRvX3ZpZGVvX2dldF9ldmVudCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkb192aWRlb19nZXRfZXZlbnQodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQlzdHJ1Y3QgY29tcGF0X3ZpZGVvX2V2ZW50IF9fdXNlciAqdXApCiB7CiAJc3RydWN0IHZpZGVvX2V2ZW50IGtldmVudDsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CkBAIC0xNzIsOCArMTcwLDYgQEAKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmICghZXJyKSB7Ci0JCXN0cnVjdCBjb21wYXRfdmlkZW9fZXZlbnQgX191c2VyICp1cCA9IGNvbXBhdF9wdHIoYXJnKTsKLQogCQllcnIgID0gcHV0X3VzZXIoa2V2ZW50LnR5cGUsICZ1cC0+dHlwZSk7CiAJCWVyciB8PSBwdXRfdXNlcihrZXZlbnQudGltZXN0YW1wLCAmdXAtPnRpbWVzdGFtcCk7CiAJCWVyciB8PSBwdXRfdXNlcihrZXZlbnQudS5zaXplLncsICZ1cC0+dS5zaXplLncpOwpAQCAtMTkyLDE1ICsxODgsMTQgQEAKICAgICAgICAgaW50MzJfdCBzaXplOwogfTsKIAotc3RhdGljIGludCBkb192aWRlb19zdGlsbHBpY3R1cmUodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZG9fdmlkZW9fc3RpbGxwaWN0dXJlKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwKKwlzdHJ1Y3QgY29tcGF0X3ZpZGVvX3N0aWxsX3BpY3R1cmUgX191c2VyICp1cCkKIHsKLQlzdHJ1Y3QgY29tcGF0X3ZpZGVvX3N0aWxsX3BpY3R1cmUgX191c2VyICp1cDsKIAlzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSBfX3VzZXIgKnVwX25hdGl2ZTsKIAljb21wYXRfdXB0cl90IGZwOwogCWludDMyX3Qgc2l6ZTsKIAlpbnQgZXJyOwogCi0JdXAgPSAoc3RydWN0IGNvbXBhdF92aWRlb19zdGlsbF9waWN0dXJlIF9fdXNlciAqKSBhcmc7CiAJZXJyICA9IGdldF91c2VyKGZwLCAmdXAtPmlGcmFtZSk7CiAJZXJyIHw9IGdldF91c2VyKHNpemUsICZ1cC0+c2l6ZSk7CiAJaWYgKGVycikKQEAgLTIyNCwxNCArMjE5LDEzIEBACiAJY29tcGF0X3VwdHJfdCBwYWxldHRlOwogfTsKIAotc3RhdGljIGludCBkb192aWRlb19zZXRfc3B1X3BhbGV0dGUodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZG9fdmlkZW9fc2V0X3NwdV9wYWxldHRlKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwKKwkJc3RydWN0IGNvbXBhdF92aWRlb19zcHVfcGFsZXR0ZSBfX3VzZXIgKnVwKQogewotCXN0cnVjdCBjb21wYXRfdmlkZW9fc3B1X3BhbGV0dGUgX191c2VyICp1cDsKIAlzdHJ1Y3QgdmlkZW9fc3B1X3BhbGV0dGUgX191c2VyICp1cF9uYXRpdmU7CiAJY29tcGF0X3VwdHJfdCBwYWxwOwogCWludCBsZW5ndGgsIGVycjsKIAotCXVwID0gKHN0cnVjdCBjb21wYXRfdmlkZW9fc3B1X3BhbGV0dGUgX191c2VyICopIGFyZzsKIAllcnIgID0gZ2V0X3VzZXIocGFscCwgJnVwLT5wYWxldHRlKTsKIAllcnIgfD0gZ2V0X3VzZXIobGVuZ3RoLCAmdXAtPmxlbmd0aCk7CiAKQEAgLTI5OSwxNiArMjkzLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2dfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc2dfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJc2dfaW9faGRyMzJfdCBfX3VzZXIgKnNnaW8zMikKIHsKIAlzZ19pb19oZHJfdCBfX3VzZXIgKnNnaW87Ci0Jc2dfaW9faGRyMzJfdCBfX3VzZXIgKnNnaW8zMjsKIAl1MTYgaW92ZWNfY291bnQ7CiAJdTMyIGRhdGE7CiAJdm9pZCBfX3VzZXIgKmR4ZmVycDsKIAlpbnQgZXJyOwogCi0Jc2dpbzMyID0gY29tcGF0X3B0cihhcmcpOwogCWlmIChnZXRfdXNlcihpb3ZlY19jb3VudCwgJnNnaW8zMi0+aW92ZWNfY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMzk4LDExICszOTEsMTEgQEAKIAlpbnQgdW51c2VkOwogfTsKIAotc3RhdGljIGludCBzZ19ncnRfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc2dfZ3J0X3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0CisJCQljb21wYXRfc2dfcmVxX2luZm8gX191c2VyICpvKQogewogCWludCBlcnIsIGk7CiAJc2dfcmVxX2luZm9fdCBfX3VzZXIgKnI7Ci0Jc3RydWN0IGNvbXBhdF9zZ19yZXFfaW5mbyBfX3VzZXIgKm8gPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJciA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzZ19yZXFfaW5mb190KSpTR19NQVhfUVVFVUUpOwogCWVyciA9IHN5c19pb2N0bChmZCxjbWQsKHVuc2lnbmVkIGxvbmcpcik7CiAJaWYgKGVyciA8IDApCkBAIC00MzAsOSArNDIzLDkgQEAKICNkZWZpbmUgUFBQSU9DU1BBU1MzMglfSU9XKCd0JywgNzEsIHN0cnVjdCBzb2NrX2Zwcm9nMzIpCiAjZGVmaW5lIFBQUElPQ1NBQ1RJVkUzMglfSU9XKCd0JywgNzAsIHN0cnVjdCBzb2NrX2Zwcm9nMzIpCiAKLXN0YXRpYyBpbnQgcHBwX3NvY2tfZnByb2dfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgcHBwX3NvY2tfZnByb2dfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJc3RydWN0IHNvY2tfZnByb2czMiBfX3VzZXIgKnVfZnByb2czMikKIHsKLQlzdHJ1Y3Qgc29ja19mcHJvZzMyIF9fdXNlciAqdV9mcHJvZzMyID0gY29tcGF0X3B0cihhcmcpOwogCXN0cnVjdCBzb2NrX2Zwcm9nIF9fdXNlciAqdV9mcHJvZzY0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2Zwcm9nKSk7CiAJdm9pZCBfX3VzZXIgKmZwdHI2NDsKIAl1MzIgZnB0cjMyOwpAQCAtNDY5LDE1ICs0NjIsMTQgQEAKIH07CiAjZGVmaW5lIFBQUElPQ0dJRExFMzIJCV9JT1IoJ3QnLCA2Mywgc3RydWN0IHBwcF9pZGxlMzIpCiAKLXN0YXRpYyBpbnQgcHBwX2dpZGxlKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHBwcF9naWRsZSh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCisJCXN0cnVjdCBwcHBfaWRsZTMyIF9fdXNlciAqaWRsZTMyKQogewogCXN0cnVjdCBwcHBfaWRsZSBfX3VzZXIgKmlkbGU7Ci0Jc3RydWN0IHBwcF9pZGxlMzIgX191c2VyICppZGxlMzI7CiAJX19rZXJuZWxfdGltZV90IHhtaXQsIHJlY3Y7CiAJaW50IGVycjsKIAogCWlkbGUgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmlkbGUpKTsKLQlpZGxlMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAKIAllcnIgPSBzeXNfaW9jdGwoZmQsIFBQUElPQ0dJRExFLCAodW5zaWduZWQgbG9uZykgaWRsZSk7CiAKQEAgLTQ5MSwxNSArNDgzLDE0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBwcHBfc2NvbXByZXNzKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHBwcF9zY29tcHJlc3ModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCXN0cnVjdCBwcHBfb3B0aW9uX2RhdGEzMiBfX3VzZXIgKm9kYXRhMzIpCiB7CiAJc3RydWN0IHBwcF9vcHRpb25fZGF0YSBfX3VzZXIgKm9kYXRhOwotCXN0cnVjdCBwcHBfb3B0aW9uX2RhdGEzMiBfX3VzZXIgKm9kYXRhMzI7CiAJX191MzIgZGF0YTsKIAl2b2lkIF9fdXNlciAqZGF0YXA7CiAKIAlvZGF0YSA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqb2RhdGEpKTsKLQlvZGF0YTMyID0gY29tcGF0X3B0cihhcmcpOwogCiAJaWYgKGdldF91c2VyKGRhdGEsICZvZGF0YTMyLT5wdHIpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTUxNSwzNSArNTA2LDYgQEAKIAlyZXR1cm4gc3lzX2lvY3RsKGZkLCBQUFBJT0NTQ09NUFJFU1MsICh1bnNpZ25lZCBsb25nKSBvZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgcHBwX2lvY3RsX3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IGVycjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQUFBJT0NHSURMRTMyOgotCQllcnIgPSBwcHBfZ2lkbGUoZmQsIGNtZCwgYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBQUElPQ1NDT01QUkVTUzMyOgotCQllcnIgPSBwcHBfc2NvbXByZXNzKGZkLCBjbWQsIGFyZyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZG8gewotCQkJc3RhdGljIGludCBjb3VudDsKLQkJCWlmICgrK2NvdW50IDw9IDIwKQotCQkJCXByaW50aygicHBwX2lvY3RsOiBVbmtub3duIGNtZCBmZCglZCkgIgotCQkJCSAgICAgICAiY21kKCUwOHgpIGFyZyglMDh4KVxuIiwKLQkJCQkgICAgICAgKGludClmZCwgKHVuc2lnbmVkIGludCljbWQsICh1bnNpZ25lZCBpbnQpYXJnKTsKLQkJfSB3aGlsZSgwKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQogI2lmZGVmIENPTkZJR19CTE9DSwogc3RydWN0IG10Z2V0MzIgewogCWNvbXBhdF9sb25nX3QJbXRfdHlwZTsKQEAgLTU2MSw3ICs1MjMsNyBAQAogfTsKICNkZWZpbmUgTVRJT0NQT1MzMglfSU9SKCdtJywgMywgc3RydWN0IG10cG9zMzIpCiAKLXN0YXRpYyBpbnQgbXRfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbXRfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJc3RydWN0IG10Z2V0IGdldDsKQEAgLTU4MSwxNSArNTQzLDYgQEAKIAkJa2NtZCA9IE1USU9DR0VUOwogCQlrYXJnID0gJmdldDsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZG8gewotCQkJc3RhdGljIGludCBjb3VudDsKLQkJCWlmICgrK2NvdW50IDw9IDIwKQotCQkJCXByaW50aygibXRfaW9jdGw6IFVua25vd24gY21kIGZkKCVkKSAiCi0JCQkJICAgICAgICJjbWQoJTA4eCkgYXJnKCUwOHgpXG4iLAotCQkJCSAgICAgICAoaW50KWZkLCAodW5zaWduZWQgaW50KWNtZCwgKHVuc2lnbmVkIGludClhcmcpOwotCQl9IHdoaWxlKDApOwotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJc2V0X2ZzIChLRVJORUxfRFMpOwogCWVyciA9IHN5c19pb2N0bCAoZmQsIGtjbWQsICh1bnNpZ25lZCBsb25nKWthcmcpOwpAQCAtNTk4LDExICs1NTEsMTEgQEAKIAkJcmV0dXJuIGVycjsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTVRJT0NQT1MzMjoKLQkJdXBvczMyID0gY29tcGF0X3B0cihhcmcpOworCQl1cG9zMzIgPSBhcmdwOwogCQllcnIgPSBfX3B1dF91c2VyKHBvcy5tdF9ibGtubywgJnVwb3MzMi0+bXRfYmxrbm8pOwogCQlicmVhazsKIAljYXNlIE1USU9DR0VUMzI6Ci0JCXVtZ2V0MzIgPSBjb21wYXRfcHRyKGFyZyk7CisJCXVtZ2V0MzIgPSBhcmdwOwogCQllcnIgPSBfX3B1dF91c2VyKGdldC5tdF90eXBlLCAmdW1nZXQzMi0+bXRfdHlwZSk7CiAJCWVyciB8PSBfX3B1dF91c2VyKGdldC5tdF9yZXNpZCwgJnVtZ2V0MzItPm10X3Jlc2lkKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoZ2V0Lm10X2RzcmVnLCAmdW1nZXQzMi0+bXRfZHNyZWcpOwpAQCAtNjE3LDE2MiArNTcwLDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19CTE9DSyAqLwogCi0jaWZkZWYgQ09ORklHX1ZUCi0KLXN0YXRpYyBpbnQgdnRfY2hlY2soc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgdmNfZGF0YSAqdmM7Ci0JCi0JaWYgKGZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsICE9IHR0eV9pb2N0bCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JICAgICAgICAgICAgICAgIAotCXR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgaW5vZGUsICJ0dHlfaW9jdGwiKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JaWYgKHR0eS0+b3BzLT5pb2N0bCAhPSB2dF9pb2N0bCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YyA9IChzdHJ1Y3QgdmNfZGF0YSAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCF2Y19jb25zX2FsbG9jYXRlZCh2Yy0+dmNfbnVtKSkgCS8qIGltcG9zc2libGU/ICovCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0KLQkvKgotCSAqIFRvIGhhdmUgcGVybWlzc2lvbnMgdG8gZG8gbW9zdCBvZiB0aGUgdnQgaW9jdGxzLCB3ZSBlaXRoZXIgaGF2ZQotCSAqIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgdHR5LCBvciBoYXZlIENBUF9TWVNfVFRZX0NPTkZJRy4KLQkgKi8KLQlpZiAoY3VycmVudC0+c2lnbmFsLT50dHkgPT0gdHR5IHx8IGNhcGFibGUoQ0FQX1NZU19UVFlfQ09ORklHKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotfQotCi1zdHJ1Y3QgY29uc29sZWZvbnRkZXNjMzIgewotCXVuc2lnbmVkIHNob3J0IGNoYXJjb3VudDsgICAgICAgLyogY2hhcmFjdGVycyBpbiBmb250ICgyNTYgb3IgNTEyKSAqLwotCXVuc2lnbmVkIHNob3J0IGNoYXJoZWlnaHQ7ICAgICAgLyogc2NhbiBsaW5lcyBwZXIgY2hhcmFjdGVyICgxLTMyKSAqLwotCWNvbXBhdF9jYWRkcl90IGNoYXJkYXRhOwkvKiBmb250IGRhdGEgaW4gZXhwYW5kZWQgZm9ybSAqLwotfTsKLQotc3RhdGljIGludCBkb19mb250eF9pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY29uc29sZWZvbnRkZXNjMzIgX191c2VyICp1c2VyX2NmZCA9IGNvbXBhdF9wdHIoYXJnKTsKLQlzdHJ1Y3QgY29uc29sZV9mb250X29wIG9wOwotCWNvbXBhdF9jYWRkcl90IGRhdGE7Ci0JaW50IGksIHBlcm07Ci0KLQlwZXJtID0gdnRfY2hlY2soZmlsZSk7Ci0JaWYgKHBlcm0gPCAwKSByZXR1cm4gcGVybTsKLQkKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUElPX0ZPTlRYOgotCQlpZiAoIXBlcm0pCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlvcC5vcCA9IEtEX0ZPTlRfT1BfU0VUOwotCQlvcC5mbGFncyA9IDA7Ci0JCW9wLndpZHRoID0gODsKLQkJaWYgKGdldF91c2VyKG9wLmhlaWdodCwgJnVzZXJfY2ZkLT5jaGFyaGVpZ2h0KSB8fAotCQkgICAgZ2V0X3VzZXIob3AuY2hhcmNvdW50LCAmdXNlcl9jZmQtPmNoYXJjb3VudCkgfHwKLQkJICAgIGdldF91c2VyKGRhdGEsICZ1c2VyX2NmZC0+Y2hhcmRhdGEpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCW9wLmRhdGEgPSBjb21wYXRfcHRyKGRhdGEpOwotCQlyZXR1cm4gY29uX2ZvbnRfb3AodmNfY29uc1tmZ19jb25zb2xlXS5kLCAmb3ApOwotCWNhc2UgR0lPX0ZPTlRYOgotCQlvcC5vcCA9IEtEX0ZPTlRfT1BfR0VUOwotCQlvcC5mbGFncyA9IDA7Ci0JCW9wLndpZHRoID0gODsKLQkJaWYgKGdldF91c2VyKG9wLmhlaWdodCwgJnVzZXJfY2ZkLT5jaGFyaGVpZ2h0KSB8fAotCQkgICAgZ2V0X3VzZXIob3AuY2hhcmNvdW50LCAmdXNlcl9jZmQtPmNoYXJjb3VudCkgfHwKLQkJICAgIGdldF91c2VyKGRhdGEsICZ1c2VyX2NmZC0+Y2hhcmRhdGEpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICghZGF0YSkKLQkJCXJldHVybiAwOwotCQlvcC5kYXRhID0gY29tcGF0X3B0cihkYXRhKTsKLQkJaSA9IGNvbl9mb250X29wKHZjX2NvbnNbZmdfY29uc29sZV0uZCwgJm9wKTsKLQkJaWYgKGkpCi0JCQlyZXR1cm4gaTsKLQkJaWYgKHB1dF91c2VyKG9wLmhlaWdodCwgJnVzZXJfY2ZkLT5jaGFyaGVpZ2h0KSB8fAotCQkgICAgcHV0X3VzZXIob3AuY2hhcmNvdW50LCAmdXNlcl9jZmQtPmNoYXJjb3VudCkgfHwKLQkJICAgIHB1dF91c2VyKChjb21wYXRfY2FkZHJfdCkodW5zaWduZWQgbG9uZylvcC5kYXRhLAotCQkJCSZ1c2VyX2NmZC0+Y2hhcmRhdGEpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RydWN0IGNvbnNvbGVfZm9udF9vcDMyIHsKLQljb21wYXRfdWludF90IG9wOyAgICAgICAgLyogb3BlcmF0aW9uIGNvZGUgS0RfRk9OVF9PUF8qICovCi0JY29tcGF0X3VpbnRfdCBmbGFnczsgICAgIC8qIEtEX0ZPTlRfRkxBR18qICovCi0JY29tcGF0X3VpbnRfdCB3aWR0aCwgaGVpZ2h0OyAgICAgLyogZm9udCBzaXplICovCi0JY29tcGF0X3VpbnRfdCBjaGFyY291bnQ7Ci0JY29tcGF0X2NhZGRyX3QgZGF0YTsgICAgLyogZm9udCBkYXRhIHdpdGggaGVpZ2h0IGZpeGVkIHRvIDMyICovCi19OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotc3RhdGljIGludCBkb19rZGZvbnRvcF9pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY29uc29sZV9mb250X29wIG9wOwotCXN0cnVjdCBjb25zb2xlX2ZvbnRfb3AzMiBfX3VzZXIgKmZvbnRvcCA9IGNvbXBhdF9wdHIoYXJnKTsKLQlpbnQgcGVybSA9IHZ0X2NoZWNrKGZpbGUpLCBpOwotCXN0cnVjdCB2Y19kYXRhICp2YzsKLQkKLQlpZiAocGVybSA8IDApIHJldHVybiBwZXJtOwotCQotCWlmIChjb3B5X2Zyb21fdXNlcigmb3AsIGZvbnRvcCwgc2l6ZW9mKHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AzMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIXBlcm0gJiYgb3Aub3AgIT0gS0RfRk9OVF9PUF9HRVQpCi0JCXJldHVybiAtRVBFUk07Ci0Jb3AuZGF0YSA9IGNvbXBhdF9wdHIoKChzdHJ1Y3QgY29uc29sZV9mb250X29wMzIgKikmb3ApLT5kYXRhKTsKLQlvcC5mbGFncyB8PSBLRF9GT05UX0ZMQUdfT0xEOwotCXZjID0gKChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YSktPmRyaXZlcl9kYXRhOwotCWkgPSBjb25fZm9udF9vcCh2YywgJm9wKTsKLQlpZiAoaSkKLQkJcmV0dXJuIGk7Ci0JKChzdHJ1Y3QgY29uc29sZV9mb250X29wMzIgKikmb3ApLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpb3AuZGF0YTsKLQlpZiAoY29weV90b191c2VyKGZvbnRvcCwgJm9wLCBzaXplb2Yoc3RydWN0IGNvbnNvbGVfZm9udF9vcDMyKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgdW5pbWFwZGVzYzMyIHsKLQl1bnNpZ25lZCBzaG9ydCBlbnRyeV9jdDsKLQljb21wYXRfY2FkZHJfdCBlbnRyaWVzOwotfTsKLQotc3RhdGljIGludCBkb191bmltYXBfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVuaW1hcGRlc2MzMiB0bXA7Ci0Jc3RydWN0IHVuaW1hcGRlc2MzMiBfX3VzZXIgKnVzZXJfdWQgPSBjb21wYXRfcHRyKGFyZyk7Ci0JaW50IHBlcm0gPSB2dF9jaGVjayhmaWxlKTsKLQlzdHJ1Y3QgdmNfZGF0YSAqdmM7Ci0KLQlpZiAocGVybSA8IDApCi0JCXJldHVybiBwZXJtOwotCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyX3VkLCBzaXplb2YgdG1wKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHRtcC5lbnRyaWVzKQotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGNvbXBhdF9wdHIodG1wLmVudHJpZXMpLAotCQkJCXRtcC5lbnRyeV9jdCpzaXplb2Yoc3RydWN0IHVuaXBhaXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCXZjID0gKChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YSktPmRyaXZlcl9kYXRhOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQSU9fVU5JTUFQOgotCQlpZiAoIXBlcm0pCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlyZXR1cm4gY29uX3NldF91bmltYXAodmMsIHRtcC5lbnRyeV9jdCwKLQkJCQkJCWNvbXBhdF9wdHIodG1wLmVudHJpZXMpKTsKLQljYXNlIEdJT19VTklNQVA6Ci0JCWlmICghcGVybSAmJiBmZ19jb25zb2xlICE9IHZjLT52Y19udW0pCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlyZXR1cm4gY29uX2dldF91bmltYXAodmMsIHRtcC5lbnRyeV9jdCwgJih1c2VyX3VkLT5lbnRyeV9jdCksCi0JCQkJCQljb21wYXRfcHRyKHRtcC5lbnRyaWVzKSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1ZUICovCi0KLXN0YXRpYyBpbnQgZG9fc21iX2dldG1vdW50dWlkKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRvX3NtYl9nZXRtb3VudHVpZCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCisJCQljb21wYXRfdWlkX3QgX191c2VyICphcmdwKQogewogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKIAlfX2tlcm5lbF91aWRfdCBrdWlkOwpAQCAtNzg1LDIwICs1ODQsMTUgQEAKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmIChlcnIgPj0gMCkKLQkJZXJyID0gcHV0X3VzZXIoa3VpZCwgKGNvbXBhdF91aWRfdCBfX3VzZXIgKiljb21wYXRfcHRyKGFyZykpOworCQllcnIgPSBwdXRfdXNlcihrdWlkLCBhcmdwKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBfX3VzZWQgaW50Ci1yZXRfZWludmFsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGlvY19zZXR0aW1lb3V0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwKKwkJY29tcGF0X3Vsb25nX3QgX191c2VyICphcmdwKQogewotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGlvY19zZXR0aW1lb3V0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIHJ3X2xvbmcoZmQsIEFVVE9GU19JT0NfU0VUVElNRU9VVCwgYXJnKTsKKwlyZXR1cm4gcndfbG9uZyhmZCwgQVVUT0ZTX0lPQ19TRVRUSU1FT1VULCBhcmdwKTsKIH0KIAogLyogQmx1ZXRvb3RoIGlvY3RscyAqLwpAQCAtODU2LDcgKzY1MCw4IEBACiAgICAgICAgIHJldHVybiByZXQgPyAtRUZBVUxUIDogMDsKIH0KIAotc3RhdGljIGludCByYXdfaW9jdGwodW5zaWduZWQgZmQsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHJhd19pb2N0bCh1bnNpZ25lZCBmZCwgdW5zaWduZWQgY21kLAorCQlzdHJ1Y3QgcmF3MzJfY29uZmlnX3JlcXVlc3QgX191c2VyICp1c2VyX3JlcSkKIHsKICAgICAgICAgaW50IHJldDsKIApAQCAtODY0LDcgKzY1OSw2IEBACiAgICAgICAgIGNhc2UgUkFXX1NFVEJJTkQ6CiAgICAgICAgIGNhc2UgUkFXX0dFVEJJTkQ6IHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmF3X2NvbmZpZ19yZXF1ZXN0IHJlcTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgcmF3MzJfY29uZmlnX3JlcXVlc3QgX191c2VyICp1c2VyX3JlcSA9IGNvbXBhdF9wdHIoYXJnKTsKICAgICAgICAgICAgICAgICBtbV9zZWdtZW50X3Qgb2xkZnMgPSBnZXRfZnMoKTsKIAogICAgICAgICAgICAgICAgIGlmICgocmV0ID0gZ2V0X3JhdzMyX3JlcXVlc3QoJnJlcSwgdXNlcl9yZXEpKSkKQEAgLTg3OSw5ICs2NzMsNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldCA9IHN5c19pb2N0bChmZCwgY21kLCBhcmcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXQ7CiB9CkBAIC05MDksMTEgKzcwMCwxMSBAQAogICAgICAgICBjb21wYXRfaW50X3QgICAgcmVzZXJ2ZWRbMV07CiB9OwogCi1zdGF0aWMgaW50IHNlcmlhbF9zdHJ1Y3RfaW9jdGwodW5zaWduZWQgZmQsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHNlcmlhbF9zdHJ1Y3RfaW9jdGwodW5zaWduZWQgZmQsIHVuc2lnbmVkIGNtZCwKKwkJCXN0cnVjdCBzZXJpYWxfc3RydWN0MzIgX191c2VyICpzczMyKQogewogICAgICAgICB0eXBlZGVmIHN0cnVjdCBzZXJpYWxfc3RydWN0IFNTOwogICAgICAgICB0eXBlZGVmIHN0cnVjdCBzZXJpYWxfc3RydWN0MzIgU1MzMjsKLSAgICAgICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QzMiBfX3VzZXIgKnNzMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAgICAgICAgIGludCBlcnI7CiAgICAgICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IHNzOwogICAgICAgICBtbV9zZWdtZW50X3Qgb2xkc2VnID0gZ2V0X2ZzKCk7CkBAIC05NTEsOTYgKzc0Miw2IEBACiAgICAgICAgIHJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIzMiB7Ci0gICAgICAgIHU4IGJSZXF1ZXN0VHlwZTsKLSAgICAgICAgdTggYlJlcXVlc3Q7Ci0gICAgICAgIHUxNiB3VmFsdWU7Ci0gICAgICAgIHUxNiB3SW5kZXg7Ci0gICAgICAgIHUxNiB3TGVuZ3RoOwotICAgICAgICB1MzIgdGltZW91dDsgIC8qIGluIG1pbGxpc2Vjb25kcyAqLwotICAgICAgICBjb21wYXRfY2FkZHJfdCBkYXRhOwotfTsKLQotI2RlZmluZSBVU0JERVZGU19DT05UUk9MMzIgICAgICAgICAgIF9JT1dSKCdVJywgMCwgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcjMyKQotCi1zdGF0aWMgaW50IGRvX3VzYmRldmZzX2NvbnRyb2wodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLSAgICAgICAgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcjMyIF9fdXNlciAqcDMyID0gY29tcGF0X3B0cihhcmcpOwotICAgICAgICBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyIF9fdXNlciAqcDsKLSAgICAgICAgX191MzIgdWRhdGE7Ci0gICAgICAgIHAgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnApKTsKLSAgICAgICAgaWYgKGNvcHlfaW5fdXNlcihwLCBwMzIsIChzaXplb2YoKnAzMikgLSBzaXplb2YoY29tcGF0X2NhZGRyX3QpKSkgfHwKLSAgICAgICAgICAgIGdldF91c2VyKHVkYXRhLCAmcDMyLT5kYXRhKSB8fAotCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKHVkYXRhKSwgJnAtPmRhdGEpKQotCQlyZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgcmV0dXJuIHN5c19pb2N0bChmZCwgVVNCREVWRlNfQ09OVFJPTCwgKHVuc2lnbmVkIGxvbmcpcCk7Ci19Ci0KLQotc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlcjMyIHsKLSAgICAgICAgY29tcGF0X3VpbnRfdCBlcDsKLSAgICAgICAgY29tcGF0X3VpbnRfdCBsZW47Ci0gICAgICAgIGNvbXBhdF91aW50X3QgdGltZW91dDsgLyogaW4gbWlsbGlzZWNvbmRzICovCi0gICAgICAgIGNvbXBhdF9jYWRkcl90IGRhdGE7Ci19OwotCi0jZGVmaW5lIFVTQkRFVkZTX0JVTEszMiAgICAgICAgICAgICAgX0lPV1IoJ1UnLCAyLCBzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyMzIpCi0KLXN0YXRpYyBpbnQgZG9fdXNiZGV2ZnNfYnVsayh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotICAgICAgICBzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyMzIgX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7Ci0gICAgICAgIHN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIgX191c2VyICpwOwotICAgICAgICBjb21wYXRfdWludF90IG47Ci0gICAgICAgIGNvbXBhdF9jYWRkcl90IGFkZHI7Ci0KLSAgICAgICAgcCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcCkpOwotCi0gICAgICAgIGlmIChnZXRfdXNlcihuLCAmcDMyLT5lcCkgfHwgcHV0X3VzZXIobiwgJnAtPmVwKSB8fAotICAgICAgICAgICAgZ2V0X3VzZXIobiwgJnAzMi0+bGVuKSB8fCBwdXRfdXNlcihuLCAmcC0+bGVuKSB8fAotICAgICAgICAgICAgZ2V0X3VzZXIobiwgJnAzMi0+dGltZW91dCkgfHwgcHV0X3VzZXIobiwgJnAtPnRpbWVvdXQpIHx8Ci0gICAgICAgICAgICBnZXRfdXNlcihhZGRyLCAmcDMyLT5kYXRhKSB8fCBwdXRfdXNlcihjb21wYXRfcHRyKGFkZHIpLCAmcC0+ZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICAgICAgcmV0dXJuIHN5c19pb2N0bChmZCwgVVNCREVWRlNfQlVMSywgKHVuc2lnbmVkIGxvbmcpcCk7Ci19Ci0KLQotLyoKLSAqICBVU0JERVZGU19TVUJNSVRVUkIsIFVTQkRFVkZTX1JFQVBVUkIgYW5kIFVTQkRFVkZTX1JFQVBVUkJOREVMQVkKLSAqICBhcmUgaGFuZGxlZCBpbiB1c2JkZXZmcyBjb3JlLgkJCS1DaHJpc3RvcGhlciBMaQotICovCi0KLXN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsMzIgewotICAgICAgICBjb21wYXRfaW50X3Qgc2lnbnI7Ci0gICAgICAgIGNvbXBhdF9jYWRkcl90IGNvbnRleHQ7Ci19OwotCi0jZGVmaW5lIFVTQkRFVkZTX0RJU0NTSUdOQUwzMiAgICAgIF9JT1IoJ1UnLCAxNCwgc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwzMikKLQotc3RhdGljIGludCBkb191c2JkZXZmc19kaXNjc2lnbmFsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0gICAgICAgIHN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsIGtkaXM7Ci0gICAgICAgIHN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsMzIgX191c2VyICp1ZGlzOwotICAgICAgICBtbV9zZWdtZW50X3Qgb2xkX2ZzOwotICAgICAgICB1MzIgdWN0eDsKLSAgICAgICAgaW50IGVycjsKLQotICAgICAgICB1ZGlzID0gY29tcGF0X3B0cihhcmcpOwotCi0gICAgICAgIGlmIChnZXRfdXNlcihrZGlzLnNpZ25yLCAmdWRpcy0+c2lnbnIpIHx8Ci0gICAgICAgICAgICBfX2dldF91c2VyKHVjdHgsICZ1ZGlzLT5jb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgICAgICBrZGlzLmNvbnRleHQgPSBjb21wYXRfcHRyKHVjdHgpOwotCi0gICAgICAgIG9sZF9mcyA9IGdldF9mcygpOwotICAgICAgICBzZXRfZnMoS0VSTkVMX0RTKTsKLSAgICAgICAgZXJyID0gc3lzX2lvY3RsKGZkLCBVU0JERVZGU19ESVNDU0lHTkFMLCAodW5zaWduZWQgbG9uZykgJmtkaXMpOwotICAgICAgICBzZXRfZnMob2xkX2ZzKTsKLQotICAgICAgICByZXR1cm4gZXJyOwotfQotCiAvKgogICogSTJDIGxheWVyIGlvY3RscwogICovCkBAIC0xMDY5LDkgKzc3MCw5IEBACiAJc3RydWN0IGkyY19tc2cgbXNnc1swXTsKIH07CiAKLXN0YXRpYyBpbnQgZG9faTJjX3Jkd3JfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZG9faTJjX3Jkd3JfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJc3RydWN0IGkyY19yZHdyX2lvY3RsX2RhdGEzMiAgICBfX3VzZXIgKnVkYXRhKQogewotCXN0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhMzIJX191c2VyICp1ZGF0YSA9IGNvbXBhdF9wdHIoYXJnKTsKIAlzdHJ1Y3QgaTJjX3Jkd3JfYWxpZ25lZAkJX191c2VyICp0ZGF0YTsKIAlzdHJ1Y3QgaTJjX21zZwkJCV9fdXNlciAqdG1zZ3M7CiAJc3RydWN0IGkyY19tc2czMgkJX191c2VyICp1bXNnczsKQEAgLTExMDUsMTAgKzgwNiwxMCBAQAogCXJldHVybiBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpdGRhdGEpOwogfQogCi1zdGF0aWMgaW50IGRvX2kyY19zbWJ1c19pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkb19pMmNfc21idXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJc3RydWN0IGkyY19zbWJ1c19pb2N0bF9kYXRhMzIgICBfX3VzZXIgKnVkYXRhKQogewogCXN0cnVjdCBpMmNfc21idXNfaW9jdGxfZGF0YQlfX3VzZXIgKnRkYXRhOwotCXN0cnVjdCBpMmNfc21idXNfaW9jdGxfZGF0YTMyCV9fdXNlciAqdWRhdGE7CiAJY29tcGF0X2NhZGRyX3QJCQlkYXRhcDsKIAogCXRkYXRhID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCp0ZGF0YSkpOwpAQCAtMTExNyw3ICs4MTgsNiBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdGRhdGEsIHNpemVvZigqdGRhdGEpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQl1ZGF0YSA9IGNvbXBhdF9wdHIoYXJnKTsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdWRhdGEsIHNpemVvZigqdWRhdGEpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTExMzcsNyArODM3LDcgQEAKICNkZWZpbmUgUlRDX0VQT0NIX1JFQUQzMglfSU9SKCdwJywgMHgwZCwgY29tcGF0X3Vsb25nX3QpCiAjZGVmaW5lIFJUQ19FUE9DSF9TRVQzMgkJX0lPVygncCcsIDB4MGUsIGNvbXBhdF91bG9uZ190KQogCi1zdGF0aWMgaW50IHJ0Y19pb2N0bCh1bnNpZ25lZCBmZCwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgcnRjX2lvY3RsKHVuc2lnbmVkIGZkLCB1bnNpZ25lZCBjbWQsIHZvaWQgX191c2VyICphcmdwKQogewogCW1tX3NlZ21lbnRfdCBvbGRmcyA9IGdldF9mcygpOwogCWNvbXBhdF91bG9uZ190IHZhbDMyOwpAQCAtMTE1NSwyOSArODU1LDE0IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQl2YWwzMiA9IGt2YWw7Ci0JCXJldHVybiBwdXRfdXNlcih2YWwzMiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOworCQlyZXR1cm4gcHV0X3VzZXIodmFsMzIsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJncCk7CiAJY2FzZSBSVENfSVJRUF9TRVQzMjoKLQkJcmV0dXJuIHN5c19pb2N0bChmZCwgUlRDX0lSUVBfU0VULCBhcmcpOyAKKwkJcmV0dXJuIHN5c19pb2N0bChmZCwgUlRDX0lSUVBfU0VULCAodW5zaWduZWQgbG9uZylhcmdwKTsKIAljYXNlIFJUQ19FUE9DSF9TRVQzMjoKLQkJcmV0dXJuIHN5c19pb2N0bChmZCwgUlRDX0VQT0NIX1NFVCwgYXJnKTsKLQlkZWZhdWx0OgotCQkvKiB1bnJlYWNoZWQgKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJcmV0dXJuIHN5c19pb2N0bChmZCwgUlRDX0VQT0NIX1NFVCwgKHVuc2lnbmVkIGxvbmcpYXJncCk7CiAJfQotfQogCi1zdGF0aWMgaW50Ci1scF90aW1lb3V0X3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdGMgPSAoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqKWFyZzsKLQlzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnRuID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7Ci0Jc3RydWN0IHRpbWV2YWwgdHM7Ci0JaWYgKGdldF91c2VyKHRzLnR2X3NlYywgJnRjLT50dl9zZWMpIHx8Ci0JICAgIGdldF91c2VyKHRzLnR2X3VzZWMsICZ0Yy0+dHZfdXNlYykgfHwKLQkgICAgcHV0X3VzZXIodHMudHZfc2VjLCAmdG4tPnR2X3NlYykgfHwKLQkgICAgcHV0X3VzZXIodHMudHZfdXNlYywgJnRuLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZyl0bik7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAogLyogb24gaWEzMiBsX3N0YXJ0IGlzIG9uIGEgMzItYml0IGJvdW5kYXJ5ICovCkBAIC0xMTk3LDkgKzg4Miw5IEBACiAjZGVmaW5lIEZTX0lPQ19SRVNWU1A2NF8zMglfSU9XICgnWCcsIDQyLCBzdHJ1Y3Qgc3BhY2VfcmVzdl8zMikKIAogLyoganVzdCBhY2NvdW50IGZvciBkaWZmZXJlbnQgYWxpZ25tZW50ICovCi1zdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXN0cnVjdCBzcGFjZV9yZXN2XzMyICAgIF9fdXNlciAqcDMyKQogewotCXN0cnVjdCBzcGFjZV9yZXN2XzMyCV9fdXNlciAqcDMyID0gY29tcGF0X3B0cihhcmcpOwogCXN0cnVjdCBzcGFjZV9yZXN2CV9fdXNlciAqcCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcCkpOwogCiAJaWYgKGNvcHlfaW5fdXNlcigmcC0+bF90eXBlLAkmcDMyLT5sX3R5cGUsCXNpemVvZihzMTYpKSB8fApAQCAtMTIxNSwyNyArOTAwLDEzIEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIHNpbXBsZSByZXZlcnNpYmxlIHRyYW5zZm9ybSB0byBtYWtlIG91ciB0YWJsZSBtb3JlIGV2ZW5seQorICogZGlzdHJpYnV0ZWQgYWZ0ZXIgc29ydGluZy4KKyAqLworI2RlZmluZSBYRk9STShpKSAoKChpKSBeICgoaSkgPDwgMjcpIF4gKChpKSA8PCAxNykpICYgMHhmZmZmZmZmZikKIAotdHlwZWRlZiBpbnQgKCppb2N0bF90cmFuc19oYW5kbGVyX3QpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAotCQkJCQl1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZmlsZSAqKTsKLQotc3RydWN0IGlvY3RsX3RyYW5zIHsKLQl1bnNpZ25lZCBsb25nIGNtZDsKLQlpb2N0bF90cmFuc19oYW5kbGVyX3QgaGFuZGxlcjsKLQlzdHJ1Y3QgaW9jdGxfdHJhbnMgKm5leHQ7Ci19OwotCi0jZGVmaW5lIEhBTkRMRV9JT0NUTChjbWQsaGFuZGxlcikgXAotCXsgKGNtZCksIChpb2N0bF90cmFuc19oYW5kbGVyX3QpKGhhbmRsZXIpIH0sCi0KLS8qIHBvaW50ZXIgdG8gY29tcGF0aWJsZSBzdHJ1Y3R1cmUgb3Igbm8gYXJndW1lbnQgKi8KLSNkZWZpbmUgQ09NUEFUSUJMRV9JT0NUTChjbWQpIFwKLQl7IChjbWQpLCBkb19pb2N0bDMyX3BvaW50ZXIgfSwKLQotLyogYXJndW1lbnQgaXMgYW4gdW5zaWduZWQgbG9uZyBpbnRlZ2VyLCBub3QgYSBwb2ludGVyICovCi0jZGVmaW5lIFVMT05HX0lPQ1RMKGNtZCkgXAotCXsgKGNtZCksIChpb2N0bF90cmFuc19oYW5kbGVyX3Qpc3lzX2lvY3RsIH0sCi0KKyNkZWZpbmUgQ09NUEFUSUJMRV9JT0NUTChjbWQpIFhGT1JNKGNtZCksCiAvKiBpb2N0bCBzaG91bGQgbm90IGJlIHdhcm5lZCBhYm91dCBldmVuIGlmIGl0J3Mgbm90IGltcGxlbWVudGVkLgogICAgVmFsaWQgcmVhc29ucyB0byB1c2UgdGhpczoKICAgIC0gSXQgaXMgaW1wbGVtZW50ZWQgd2l0aCAtPmNvbXBhdF9pb2N0bCBvbiBzb21lIGRldmljZSwgYnV0IHByb2dyYW1zCkBAIC0xMjQ1LDcgKzkxNiw3IEBACiAgICBNb3N0IG90aGVyIHJlYXNvbnMgYXJlIG5vdCB2YWxpZC4gKi8KICNkZWZpbmUgSUdOT1JFX0lPQ1RMKGNtZCkgQ09NUEFUSUJMRV9JT0NUTChjbWQpCiAKLXN0YXRpYyBzdHJ1Y3QgaW9jdGxfdHJhbnMgaW9jdGxfc3RhcnRbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW9jdGxfcG9pbnRlcltdID0gewogLyogY29tcGF0aWJsZSBpb2N0bHMgZmlyc3QgKi8KIENPTVBBVElCTEVfSU9DVEwoMHg0QjUwKSAgIC8qIEtER0hXQ0xLIC0gbm90IGluIHRoZSBrZXJuZWwsIGJ1dCBkb24ndCBjb21wbGFpbiAqLwogQ09NUEFUSUJMRV9JT0NUTCgweDRCNTEpICAgLyogS0RTSFdDTEsgLSBub3QgaW4gdGhlIGtlcm5lbCwgYnV0IGRvbid0IGNvbXBsYWluICovCkBAIC0xMjU2LDcgKzkyNyw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKFRDU0VUQVcpCiBDT01QQVRJQkxFX0lPQ1RMKFRDU0VUQUYpCiBDT01QQVRJQkxFX0lPQ1RMKFRDU0JSSykKLVVMT05HX0lPQ1RMKFRDU0JSS1ApCiBDT01QQVRJQkxFX0lPQ1RMKFRDWE9OQykKIENPTVBBVElCTEVfSU9DVEwoVENGTFNIKQogQ09NUEFUSUJMRV9JT0NUTChUQ0dFVFMpCkBAIC0xMjY2LDcgKzkzNiw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NMSU5VWCkKIENPTVBBVElCTEVfSU9DVEwoVElPQ1NCUkspCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NDQlJLKQotVUxPTkdfSU9DVEwoVElPQ01JV0FJVCkKIENPTVBBVElCTEVfSU9DVEwoVElPQ0dJQ09VTlQpCiAvKiBMaXR0bGUgdCAqLwogQ09NUEFUSUJMRV9JT0NUTChUSU9DR0VURCkKQEAgLTEyODgsNyArOTU3LDYgQEAKIENPTVBBVElCTEVfSU9DVEwoVElPQ09VVFEpCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTUEdSUCkKIENPTVBBVElCTEVfSU9DVEwoVElPQ0dQR1JQKQotVUxPTkdfSU9DVEwoVElPQ1NDVFRZKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DR1BUTikKIENPTVBBVElCTEVfSU9DVEwoVElPQ1NQVExDSykKIENPTVBBVElCTEVfSU9DVEwoVElPQ1NFUkdFVExTUikKQEAgLTEzMTEsNDQgKzk3OSwxMSBAQAogLyogJ1gnIC0gb3JpZ2luYWxseSBYRlMgYnV0IHNvbWUgbm93IGluIHRoZSBWRlMgKi8KIENPTVBBVElCTEVfSU9DVEwoRklGUkVFWkUpCiBDT01QQVRJQkxFX0lPQ1RMKEZJVEhBVykKLS8qIFJBSUQgKi8KLUNPTVBBVElCTEVfSU9DVEwoUkFJRF9WRVJTSU9OKQotQ09NUEFUSUJMRV9JT0NUTChHRVRfQVJSQVlfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoR0VUX0RJU0tfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoUFJJTlRfUkFJRF9ERUJVRykKLUNPTVBBVElCTEVfSU9DVEwoUkFJRF9BVVRPUlVOKQotQ09NUEFUSUJMRV9JT0NUTChDTEVBUl9BUlJBWSkKLUNPTVBBVElCTEVfSU9DVEwoQUREX05FV19ESVNLKQotVUxPTkdfSU9DVEwoSE9UX1JFTU9WRV9ESVNLKQotQ09NUEFUSUJMRV9JT0NUTChTRVRfQVJSQVlfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoU0VUX0RJU0tfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoV1JJVEVfUkFJRF9JTkZPKQotQ09NUEFUSUJMRV9JT0NUTChVTlBST1RFQ1RfQVJSQVkpCi1DT01QQVRJQkxFX0lPQ1RMKFBST1RFQ1RfQVJSQVkpCi1VTE9OR19JT0NUTChIT1RfQUREX0RJU0spCi1VTE9OR19JT0NUTChTRVRfRElTS19GQVVMVFkpCi1DT01QQVRJQkxFX0lPQ1RMKFJVTl9BUlJBWSkKLUNPTVBBVElCTEVfSU9DVEwoU1RPUF9BUlJBWSkKLUNPTVBBVElCTEVfSU9DVEwoU1RPUF9BUlJBWV9STykKLUNPTVBBVElCTEVfSU9DVEwoUkVTVEFSVF9BUlJBWV9SVykKLUNPTVBBVElCTEVfSU9DVEwoR0VUX0JJVE1BUF9GSUxFKQotVUxPTkdfSU9DVEwoU0VUX0JJVE1BUF9GSUxFKQotLyogQmlnIEsgKi8KLUNPTVBBVElCTEVfSU9DVEwoUElPX0ZPTlQpCi1DT01QQVRJQkxFX0lPQ1RMKEdJT19GT05UKQotQ09NUEFUSUJMRV9JT0NUTChQSU9fQ01BUCkKLUNPTVBBVElCTEVfSU9DVEwoR0lPX0NNQVApCi1VTE9OR19JT0NUTChLRFNJR0FDQ0VQVCkKIENPTVBBVElCTEVfSU9DVEwoS0RHRVRLRVlDT0RFKQogQ09NUEFUSUJMRV9JT0NUTChLRFNFVEtFWUNPREUpCi1VTE9OR19JT0NUTChLSU9DU09VTkQpCi1VTE9OR19JT0NUTChLRE1LVE9ORSkKIENPTVBBVElCTEVfSU9DVEwoS0RHS0JUWVBFKQotVUxPTkdfSU9DVEwoS0RTRVRNT0RFKQogQ09NUEFUSUJMRV9JT0NUTChLREdFVE1PREUpCi1VTE9OR19JT0NUTChLRFNLQk1PREUpCiBDT01QQVRJQkxFX0lPQ1RMKEtER0tCTU9ERSkKLVVMT05HX0lPQ1RMKEtEU0tCTUVUQSkKIENPTVBBVElCTEVfSU9DVEwoS0RHS0JNRVRBKQogQ09NUEFUSUJMRV9JT0NUTChLREdLQkVOVCkKIENPTVBBVElCTEVfSU9DVEwoS0RTS0JFTlQpCkBAIC0xMzU4LDE1ICs5OTMsNyBAQAogQ09NUEFUSUJMRV9JT0NUTChLRFNLQkRJQUNSKQogQ09NUEFUSUJMRV9JT0NUTChLREtCRFJFUCkKIENPTVBBVElCTEVfSU9DVEwoS0RHS0JMRUQpCi1VTE9OR19JT0NUTChLRFNLQkxFRCkKIENPTVBBVElCTEVfSU9DVEwoS0RHRVRMRUQpCi1VTE9OR19JT0NUTChLRFNFVExFRCkKLUNPTVBBVElCTEVfSU9DVEwoR0lPX1NDUk5NQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBJT19TQ1JOTUFQKQotQ09NUEFUSUJMRV9JT0NUTChHSU9fVU5JU0NSTk1BUCkKLUNPTVBBVElCTEVfSU9DVEwoUElPX1VOSVNDUk5NQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBJT19GT05UUkVTRVQpCi1DT01QQVRJQkxFX0lPQ1RMKFBJT19VTklNQVBDTFIpCiAjaWZkZWYgQ09ORklHX0JMT0NLCiAvKiBCaWcgUyAqLwogQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX0dFVF9JRExVTikKQEAgLTEzNzgsMjAgKzEwMDUsNiBAQAogQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX1BST0JFX0hPU1QpCiBDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfR0VUX1BDSSkKICNlbmRpZgotLyogQmlnIFYgKi8KLUNPTVBBVElCTEVfSU9DVEwoVlRfU0VUTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoVlRfR0VUTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoVlRfR0VUU1RBVEUpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX09QRU5RUlkpCi1VTE9OR19JT0NUTChWVF9BQ1RJVkFURSkKLVVMT05HX0lPQ1RMKFZUX1dBSVRBQ1RJVkUpCi1VTE9OR19JT0NUTChWVF9SRUxESVNQKQotVUxPTkdfSU9DVEwoVlRfRElTQUxMT0NBVEUpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX1JFU0laRSkKLUNPTVBBVElCTEVfSU9DVEwoVlRfUkVTSVpFWCkKLUNPTVBBVElCTEVfSU9DVEwoVlRfTE9DS1NXSVRDSCkKLUNPTVBBVElCTEVfSU9DVEwoVlRfVU5MT0NLU1dJVENIKQotQ09NUEFUSUJMRV9JT0NUTChWVF9HRVRISUZPTlRNQVNLKQogLyogTGl0dGxlIHAgKC9kZXYvcnRjLCAvZGV2L2VudmN0cmwsIGV0Yy4pICovCiBDT01QQVRJQkxFX0lPQ1RMKFJUQ19BSUVfT04pCiBDT01QQVRJQkxFX0lPQ1RMKFJUQ19BSUVfT0ZGKQpAQCAtMTQyMCwxMSArMTAzMywxMiBAQAogLyogU29ja2V0IGxldmVsIHN0dWZmICovCiBDT01QQVRJQkxFX0lPQ1RMKEZJT1FTSVpFKQogI2lmZGVmIENPTkZJR19CTE9DSworLyogbG9vcCAqLworSUdOT1JFX0lPQ1RMKExPT1BfQ0xSX0ZEKQogLyogU0cgc3R1ZmYgKi8KIENPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1RJTUVPVVQpCiBDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9USU1FT1VUKQogQ09NUEFUSUJMRV9JT0NUTChTR19FTVVMQVRFRF9IT1NUKQotVUxPTkdfSU9DVEwoU0dfU0VUX1RSQU5TRk9STSkKIENPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1RSQU5TRk9STSkKIENPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1JFU0VSVkVEX1NJWkUpCiBDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9SRVNFUlZFRF9TSVpFKQpAQCAtMTQ3OCw4ICsxMDkyLDYgQEAKIC8qIFBQUE9YICovCiBDT01QQVRJQkxFX0lPQ1RMKFBQUE9FSU9DU0ZXRCkKIENPTVBBVElCTEVfSU9DVEwoUFBQT0VJT0NERldEKQotLyogTFAgKi8KLUNPTVBBVElCTEVfSU9DVEwoTFBHRVRTVEFUVVMpCiAvKiBwcGRldiAqLwogQ09NUEFUSUJMRV9JT0NUTChQUFNFVE1PREUpCiBDT01QQVRJQkxFX0lPQ1RMKFBQUlNUQVRVUykKQEAgLTE2NjEsOCArMTI3Myw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1NFVExFVkVMUykKIENPTVBBVElCTEVfSU9DVEwoT1NTX0dFVFZFUlNJT04pCiAvKiBBVVRPRlMgKi8KLVVMT05HX0lPQ1RMKEFVVE9GU19JT0NfUkVBRFkpCi1VTE9OR19JT0NUTChBVVRPRlNfSU9DX0ZBSUwpCiBDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQ0FUQVRPTklDKQogQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX1BST1RPVkVSKQogQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0VYUElSRSkKQEAgLTE3NTUsMzAgKzEzNjUsMTEgQEAKIENPTVBBVElCTEVfSU9DVEwoUENJSU9DX01NQVBfSVNfSU8pCiBDT01QQVRJQkxFX0lPQ1RMKFBDSUlPQ19NTUFQX0lTX01FTSkKIENPTVBBVElCTEVfSU9DVEwoUENJSU9DX1dSSVRFX0NPTUJJTkUpCi0vKiBVU0IgKi8KLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVTRVRFUCkKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU0VUSU5URVJGQUNFKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19HRVREUklWRVIpCi1DT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0RJU0NBUkRVUkIpCi1DT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0NMQUlNSU5URVJGQUNFKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRUxFQVNFSU5URVJGQUNFKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DT05ORUNUSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfSFVCX1BPUlRJTkZPKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRVNFVCkKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU1VCTUlUVVJCMzIpCi1DT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1JFQVBVUkIzMikKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DTEVBUl9IQUxUKQogLyogTkJEICovCi1VTE9OR19JT0NUTChOQkRfU0VUX1NPQ0spCi1VTE9OR19JT0NUTChOQkRfU0VUX0JMS1NJWkUpCi1VTE9OR19JT0NUTChOQkRfU0VUX1NJWkUpCiBDT01QQVRJQkxFX0lPQ1RMKE5CRF9ET19JVCkKIENPTVBBVElCTEVfSU9DVEwoTkJEX0NMRUFSX1NPQ0spCiBDT01QQVRJQkxFX0lPQ1RMKE5CRF9DTEVBUl9RVUUpCiBDT01QQVRJQkxFX0lPQ1RMKE5CRF9QUklOVF9ERUJVRykKLVVMT05HX0lPQ1RMKE5CRF9TRVRfU0laRV9CTE9DS1MpCiBDT01QQVRJQkxFX0lPQ1RMKE5CRF9ESVNDT05ORUNUKQogLyogaTJjICovCiBDT01QQVRJQkxFX0lPQ1RMKEkyQ19TTEFWRSkKQEAgLTE4NzgsNDIgKzE0NjksNiBAQAogQ09NUEFUSUJMRV9JT0NUTChKU0lPQ0dCVVRUT05TKQogQ09NUEFUSUJMRV9JT0NUTChKU0lPQ0dOQU1FKDApKQogCi0vKiBub3cgdGhpbmdzIHRoYXQgbmVlZCBoYW5kbGVycyAqLwotI2lmZGVmIENPTkZJR19CTE9DSwotSEFORExFX0lPQ1RMKFNHX0lPLHNnX2lvY3RsX3RyYW5zKQotSEFORExFX0lPQ1RMKFNHX0dFVF9SRVFVRVNUX1RBQkxFLCBzZ19ncnRfdHJhbnMpCi0jZW5kaWYKLUhBTkRMRV9JT0NUTChQUFBJT0NHSURMRTMyLCBwcHBfaW9jdGxfdHJhbnMpCi1IQU5ETEVfSU9DVEwoUFBQSU9DU0NPTVBSRVNTMzIsIHBwcF9pb2N0bF90cmFucykKLUhBTkRMRV9JT0NUTChQUFBJT0NTUEFTUzMyLCBwcHBfc29ja19mcHJvZ19pb2N0bF90cmFucykKLUhBTkRMRV9JT0NUTChQUFBJT0NTQUNUSVZFMzIsIHBwcF9zb2NrX2Zwcm9nX2lvY3RsX3RyYW5zKQotI2lmZGVmIENPTkZJR19CTE9DSwotSEFORExFX0lPQ1RMKE1USU9DR0VUMzIsIG10X2lvY3RsX3RyYW5zKQotSEFORExFX0lPQ1RMKE1USU9DUE9TMzIsIG10X2lvY3RsX3RyYW5zKQotI2VuZGlmCi0jZGVmaW5lIEFVVE9GU19JT0NfU0VUVElNRU9VVDMyIF9JT1dSKDB4OTMsMHg2NCx1bnNpZ25lZCBpbnQpCi1IQU5ETEVfSU9DVEwoQVVUT0ZTX0lPQ19TRVRUSU1FT1VUMzIsIGlvY19zZXR0aW1lb3V0KQotI2lmZGVmIENPTkZJR19WVAotSEFORExFX0lPQ1RMKFBJT19GT05UWCwgZG9fZm9udHhfaW9jdGwpCi1IQU5ETEVfSU9DVEwoR0lPX0ZPTlRYLCBkb19mb250eF9pb2N0bCkKLUhBTkRMRV9JT0NUTChQSU9fVU5JTUFQLCBkb191bmltYXBfaW9jdGwpCi1IQU5ETEVfSU9DVEwoR0lPX1VOSU1BUCwgZG9fdW5pbWFwX2lvY3RsKQotSEFORExFX0lPQ1RMKEtERk9OVE9QLCBkb19rZGZvbnRvcF9pb2N0bCkKLSNlbmRpZgotLyogT25lIFNNQiBpb2N0bCBuZWVkcyB0cmFuc2xhdGlvbnMuICovCi0jZGVmaW5lIFNNQl9JT0NfR0VUTU9VTlRVSURfMzIgX0lPUigndScsIDEsIGNvbXBhdF91aWRfdCkKLUhBTkRMRV9JT0NUTChTTUJfSU9DX0dFVE1PVU5UVUlEXzMyLCBkb19zbWJfZ2V0bW91bnR1aWQpCi0vKiBibG9jayBzdHVmZiAqLwotI2lmZGVmIENPTkZJR19CTE9DSwotLyogbG9vcCAqLwotSUdOT1JFX0lPQ1RMKExPT1BfQ0xSX0ZEKQotLyogUmF3IGRldmljZXMgKi8KLUhBTkRMRV9JT0NUTChSQVdfU0VUQklORCwgcmF3X2lvY3RsKQotSEFORExFX0lPQ1RMKFJBV19HRVRCSU5ELCByYXdfaW9jdGwpCi0jZW5kaWYKLS8qIFNlcmlhbCAqLwotSEFORExFX0lPQ1RMKFRJT0NHU0VSSUFMLCBzZXJpYWxfc3RydWN0X2lvY3RsKQotSEFORExFX0lPQ1RMKFRJT0NTU0VSSUFMLCBzZXJpYWxfc3RydWN0X2lvY3RsKQogI2lmZGVmIFRJT0NHTFRDCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NHTFRDKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DU0xUQykKQEAgLTE5MjgsMzkgKzE0ODMsNiBAQAogQ09NUEFUSUJMRV9JT0NUTChUSU9DU1RBUlQpCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTVE9QKQogI2VuZGlmCi0vKiBVc2JkZXZmcyAqLwotSEFORExFX0lPQ1RMKFVTQkRFVkZTX0NPTlRST0wzMiwgZG9fdXNiZGV2ZnNfY29udHJvbCkKLUhBTkRMRV9JT0NUTChVU0JERVZGU19CVUxLMzIsIGRvX3VzYmRldmZzX2J1bGspCi1IQU5ETEVfSU9DVEwoVVNCREVWRlNfRElTQ1NJR05BTDMyLCBkb191c2JkZXZmc19kaXNjc2lnbmFsKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19JT0NUTDMyKQotLyogaTJjICovCi1IQU5ETEVfSU9DVEwoSTJDX0ZVTkNTLCB3X2xvbmcpCi1IQU5ETEVfSU9DVEwoSTJDX1JEV1IsIGRvX2kyY19yZHdyX2lvY3RsKQotSEFORExFX0lPQ1RMKEkyQ19TTUJVUywgZG9faTJjX3NtYnVzX2lvY3RsKQotLyogTm90IGltcGxlbWVudGVkIGluIHRoZSBuYXRpdmUga2VybmVsICovCi1IQU5ETEVfSU9DVEwoUlRDX0lSUVBfUkVBRDMyLCBydGNfaW9jdGwpCi1IQU5ETEVfSU9DVEwoUlRDX0lSUVBfU0VUMzIsIHJ0Y19pb2N0bCkKLUhBTkRMRV9JT0NUTChSVENfRVBPQ0hfUkVBRDMyLCBydGNfaW9jdGwpCi1IQU5ETEVfSU9DVEwoUlRDX0VQT0NIX1NFVDMyLCBydGNfaW9jdGwpCi0KLS8qIGR2YiAqLwotSEFORExFX0lPQ1RMKFZJREVPX0dFVF9FVkVOVCwgZG9fdmlkZW9fZ2V0X2V2ZW50KQotSEFORExFX0lPQ1RMKFZJREVPX1NUSUxMUElDVFVSRSwgZG9fdmlkZW9fc3RpbGxwaWN0dXJlKQotSEFORExFX0lPQ1RMKFZJREVPX1NFVF9TUFVfUEFMRVRURSwgZG9fdmlkZW9fc2V0X3NwdV9wYWxldHRlKQotCi0vKiBwYXJwb3J0ICovCi1DT01QQVRJQkxFX0lPQ1RMKExQVElNRSkKLUNPTVBBVElCTEVfSU9DVEwoTFBDSEFSKQotQ09NUEFUSUJMRV9JT0NUTChMUEFCT1JUT1BFTikKLUNPTVBBVElCTEVfSU9DVEwoTFBDQVJFRlVMKQotQ09NUEFUSUJMRV9JT0NUTChMUFdBSVQpCi1DT01QQVRJQkxFX0lPQ1RMKExQU0VUSVJRKQotQ09NUEFUSUJMRV9JT0NUTChMUEdFVFNUQVRVUykKLUNPTVBBVElCTEVfSU9DVEwoTFBHRVRTVEFUVVMpCi1DT01QQVRJQkxFX0lPQ1RMKExQUkVTRVQpCi0vKkxQR0VUU1RBVFMgbm90IGltcGxlbWVudGVkLCBidXQgbm8ga2VybmVscyBzZWVtIHRvIGNvbXBpbGUgaXQgaW4gYW55d2F5cyovCi1DT01QQVRJQkxFX0lPQ1RMKExQR0VURkxBR1MpCi1IQU5ETEVfSU9DVEwoTFBTRVRUSU1FT1VULCBscF90aW1lb3V0X3RyYW5zKQogCiAvKiBmYXQgJ3InIGlvY3Rscy4gVGhlc2UgYXJlIGhhbmRsZWQgYnkgZmF0IHdpdGggLT5jb21wYXRfaW9jdGwsCiAgICBidXQgd2UgZG9uJ3Qgd2FudCB3YXJuaW5ncyBvbiBvdGhlciBmaWxlIHN5c3RlbXMuIFNvIGRlY2xhcmUKQEAgLTE5ODgsMTIgKzE1MTAsMTA4IEBACiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgSU9DVExfSEFTSFNJWkUgMjU2Ci1zdGF0aWMgc3RydWN0IGlvY3RsX3RyYW5zICppb2N0bDMyX2hhc2hfdGFibGVbSU9DVExfSEFTSFNJWkVdOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW9jdGwzMl9oYXNoKHVuc2lnbmVkIGxvbmcgY21kKQorLyoKKyAqIENvbnZlcnQgY29tbW9uIGlvY3RsIGFyZ3VtZW50cyBiYXNlZCBvbiB0aGVpciBjb21tYW5kIG51bWJlcgorICoKKyAqIFBsZWFzZSBkbyBub3QgYWRkIGFueSBjb2RlIGluIGhlcmUuIEluc3RlYWQsIGltcGxlbWVudAorICogYSBjb21wYXRfaW9jdGwgb3BlcmF0aW9uIGluIHRoZSBwbGFjZSB0aGF0IGhhbmRsZdGVIHRoZQorICogaW9jdGwgZm9yIHRoZSBuYXRpdmUgY2FzZS4KKyAqLworc3RhdGljIGxvbmcgZG9faW9jdGxfdHJhbnMoaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiAoKChjbWQgPj4gNikgXiAoY21kID4+IDQpIF4gY21kKSkgJSBJT0NUTF9IQVNIU0laRTsKKwl2b2lkIF9fdXNlciAqYXJncCA9IGNvbXBhdF9wdHIoYXJnKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBQUFBJT0NHSURMRTMyOgorCQlyZXR1cm4gcHBwX2dpZGxlKGZkLCBjbWQsIGFyZ3ApOworCWNhc2UgUFBQSU9DU0NPTVBSRVNTMzI6CisJCXJldHVybiBwcHBfc2NvbXByZXNzKGZkLCBjbWQsIGFyZ3ApOworCWNhc2UgUFBQSU9DU1BBU1MzMjoKKwljYXNlIFBQUElPQ1NBQ1RJVkUzMjoKKwkJcmV0dXJuIHBwcF9zb2NrX2Zwcm9nX2lvY3RsX3RyYW5zKGZkLCBjbWQsIGFyZ3ApOworI2lmZGVmIENPTkZJR19CTE9DSworCWNhc2UgU0dfSU86CisJCXJldHVybiBzZ19pb2N0bF90cmFucyhmZCwgY21kLCBhcmdwKTsKKwljYXNlIFNHX0dFVF9SRVFVRVNUX1RBQkxFOgorCQlyZXR1cm4gc2dfZ3J0X3RyYW5zKGZkLCBjbWQsIGFyZ3ApOworCWNhc2UgTVRJT0NHRVQzMjoKKwljYXNlIE1USU9DUE9TMzI6CisJCXJldHVybiBtdF9pb2N0bF90cmFucyhmZCwgY21kLCBhcmdwKTsKKwkvKiBSYXcgZGV2aWNlcyAqLworCWNhc2UgUkFXX1NFVEJJTkQ6CisJY2FzZSBSQVdfR0VUQklORDoKKwkJcmV0dXJuIHJhd19pb2N0bChmZCwgY21kLCBhcmdwKTsKKyNlbmRpZgorI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQzMiBfSU9XUigweDkzLDB4NjQsdW5zaWduZWQgaW50KQorCWNhc2UgQVVUT0ZTX0lPQ19TRVRUSU1FT1VUMzI6CisJCXJldHVybiBpb2Nfc2V0dGltZW91dChmZCwgY21kLCBhcmdwKTsKKwkvKiBPbmUgU01CIGlvY3RsIG5lZWRzIHRyYW5zbGF0aW9ucy4gKi8KKyNkZWZpbmUgU01CX0lPQ19HRVRNT1VOVFVJRF8zMiBfSU9SKCd1JywgMSwgY29tcGF0X3VpZF90KQorCWNhc2UgU01CX0lPQ19HRVRNT1VOVFVJRF8zMjoKKwkJcmV0dXJuIGRvX3NtYl9nZXRtb3VudHVpZChmZCwgY21kLCBhcmdwKTsKKwkvKiBTZXJpYWwgKi8KKwljYXNlIFRJT0NHU0VSSUFMOgorCWNhc2UgVElPQ1NTRVJJQUw6CisJCXJldHVybiBzZXJpYWxfc3RydWN0X2lvY3RsKGZkLCBjbWQsIGFyZ3ApOworCS8qIGkyYyAqLworCWNhc2UgSTJDX0ZVTkNTOgorCQlyZXR1cm4gd19sb25nKGZkLCBjbWQsIGFyZ3ApOworCWNhc2UgSTJDX1JEV1I6CisJCXJldHVybiBkb19pMmNfcmR3cl9pb2N0bChmZCwgY21kLCBhcmdwKTsKKwljYXNlIEkyQ19TTUJVUzoKKwkJcmV0dXJuIGRvX2kyY19zbWJ1c19pb2N0bChmZCwgY21kLCBhcmdwKTsKKwkvKiBOb3QgaW1wbGVtZW50ZWQgaW4gdGhlIG5hdGl2ZSBrZXJuZWwgKi8KKwljYXNlIFJUQ19JUlFQX1JFQUQzMjoKKwljYXNlIFJUQ19JUlFQX1NFVDMyOgorCWNhc2UgUlRDX0VQT0NIX1JFQUQzMjoKKwljYXNlIFJUQ19FUE9DSF9TRVQzMjoKKwkJcmV0dXJuIHJ0Y19pb2N0bChmZCwgY21kLCBhcmdwKTsKKworCS8qIGR2YiAqLworCWNhc2UgVklERU9fR0VUX0VWRU5UOgorCQlyZXR1cm4gZG9fdmlkZW9fZ2V0X2V2ZW50KGZkLCBjbWQsIGFyZ3ApOworCWNhc2UgVklERU9fU1RJTExQSUNUVVJFOgorCQlyZXR1cm4gZG9fdmlkZW9fc3RpbGxwaWN0dXJlKGZkLCBjbWQsIGFyZ3ApOworCWNhc2UgVklERU9fU0VUX1NQVV9QQUxFVFRFOgorCQlyZXR1cm4gZG9fdmlkZW9fc2V0X3NwdV9wYWxldHRlKGZkLCBjbWQsIGFyZ3ApOworCX0KKworCS8qCisJICogVGhlc2UgdGFrZSBhbiBpbnRlZ2VyIGluc3RlYWQgb2YgYSBwb2ludGVyIGFzICdhcmcnLAorCSAqIHNvIHdlIG11c3Qgbm90IGRvIGEgY29tcGF0X3B0cigpIHRyYW5zbGF0aW9uLgorCSAqLworCXN3aXRjaCAoY21kKSB7CisJLyogQmlnIFQgKi8KKwljYXNlIFRDU0JSS1A6CisJY2FzZSBUSU9DTUlXQUlUOgorCWNhc2UgVElPQ1NDVFRZOgorCS8qIFJBSUQgKi8KKwljYXNlIEhPVF9SRU1PVkVfRElTSzoKKwljYXNlIEhPVF9BRERfRElTSzoKKwljYXNlIFNFVF9ESVNLX0ZBVUxUWToKKwljYXNlIFNFVF9CSVRNQVBfRklMRToKKwkvKiBCaWcgSyAqLworCWNhc2UgS0RTSUdBQ0NFUFQ6CisJY2FzZSBLSU9DU09VTkQ6CisJY2FzZSBLRE1LVE9ORToKKwljYXNlIEtEU0VUTU9ERToKKwljYXNlIEtEU0tCTU9ERToKKwljYXNlIEtEU0tCTUVUQToKKwljYXNlIEtEU0tCTEVEOgorCWNhc2UgS0RTRVRMRUQ6CisJLyogQVVUT0ZTICovCisJY2FzZSBBVVRPRlNfSU9DX1JFQURZOgorCWNhc2UgQVVUT0ZTX0lPQ19GQUlMOgorCS8qIE5CRCAqLworCWNhc2UgTkJEX1NFVF9TT0NLOgorCWNhc2UgTkJEX1NFVF9CTEtTSVpFOgorCWNhc2UgTkJEX1NFVF9TSVpFOgorCWNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzoKKwkJcmV0dXJuIGRvX3Zmc19pb2N0bChmaWxlLCBmZCwgY21kLCBhcmcpOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBhdF9pb2N0bF9lcnJvcihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGZkLApAQCAtMjAyNSwxMiArMTY0MywzMyBAQAogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGF0aCk7CiB9CiAKK3N0YXRpYyBpbnQgY29tcGF0X2lvY3RsX2NoZWNrX3RhYmxlKHVuc2lnbmVkIGludCB4Y21kKQoreworCWludCBpOworCWNvbnN0IGludCBtYXggPSBBUlJBWV9TSVpFKGlvY3RsX3BvaW50ZXIpIC0gMTsKKworCUJVSUxEX0JVR19PTihtYXggPj0gKDEgPDwgMTYpKTsKKworCS8qIGd1ZXNzIGluaXRpYWwgb2Zmc2V0IGludG8gdGFibGUsIGFzc3VtaW5nIGEKKwkgICBub3JtYWxpemVkIGRpc3RyaWJ1dGlvbiAqLworCWkgPSAoKHhjbWQgPj4gMTYpICogbWF4KSA+PiAxNjsKKworCS8qIGRvIGxpbmVhciBzZWFyY2ggdXAgZmlyc3QsIHVudGlsIGdyZWF0ZXIgb3IgZXF1YWwgKi8KKwl3aGlsZSAoaW9jdGxfcG9pbnRlcltpXSA8IHhjbWQgJiYgaSA8IG1heCkKKwkJaSsrOworCisJLyogdGhlbiBkbyBsaW5lYXIgc2VhcmNoIGRvd24gKi8KKwl3aGlsZSAoaW9jdGxfcG9pbnRlcltpXSA+IHhjbWQgJiYgaSA+IDApCisJCWktLTsKKworCXJldHVybiBpb2N0bF9wb2ludGVyW2ldID09IHhjbWQ7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2lvY3RsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlpbnQgZXJyb3IgPSAtRUJBREY7Ci0Jc3RydWN0IGlvY3RsX3RyYW5zICp0OwogCWludCBmcHV0X25lZWRlZDsKIAogCWZpbHAgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOwpAQCAtMjA1OCw3ICsxNjk3LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCiAJY2FzZSBGU19JT0NfUkVTVlNQXzMyOgogCWNhc2UgRlNfSU9DX1JFU1ZTUDY0XzMyOgotCQllcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBhcmcpOworCQllcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBjb21wYXRfcHRyKGFyZykpOwogCQlnb3RvIG91dF9mcHV0OwogI2Vsc2UKIAljYXNlIEZTX0lPQ19SRVNWU1A6CkBAIC0yMDg3LDEyICsxNzI2LDExIEBACiAJCWJyZWFrOwogCX0KIAotCWZvciAodCA9IGlvY3RsMzJfaGFzaF90YWJsZVtpb2N0bDMyX2hhc2goY21kKV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmICh0LT5jbWQgPT0gY21kKQotCQkJZ290byBmb3VuZF9oYW5kbGVyOwotCX0KKwlpZiAoY29tcGF0X2lvY3RsX2NoZWNrX3RhYmxlKFhGT1JNKGNtZCkpKQorCQlnb3RvIGZvdW5kX2hhbmRsZXI7CiAKLQl7CisJZXJyb3IgPSBkb19pb2N0bF90cmFucyhmZCwgY21kLCBhcmcsIGZpbHApOworCWlmIChlcnJvciA9PSAtRU5PSU9DVExDTUQpIHsKIAkJc3RhdGljIGludCBjb3VudDsKIAogCQlpZiAoKytjb3VudCA8PSA1MCkKQEAgLTIxMDMsMTMgKzE3NDEsNyBAQAogCWdvdG8gb3V0X2ZwdXQ7CiAKICBmb3VuZF9oYW5kbGVyOgotCWlmICh0LT5oYW5kbGVyKSB7Ci0JCWxvY2tfa2VybmVsKCk7Ci0JCWVycm9yID0gdC0+aGFuZGxlcihmZCwgY21kLCBhcmcsIGZpbHApOwotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCWdvdG8gb3V0X2ZwdXQ7Ci0JfQotCisJYXJnID0gKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpOwogIGRvX2lvY3RsOgogCWVycm9yID0gZG9fdmZzX2lvY3RsKGZpbHAsIGZkLCBjbWQsIGFyZyk7CiAgb3V0X2ZwdXQ6CkBAIC0yMTE4LDM1ICsxNzUwLDIyIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBpb2N0bDMyX2luc2VydF90cmFuc2xhdGlvbihzdHJ1Y3QgaW9jdGxfdHJhbnMgKnRyYW5zKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9zeXMzMl9pb2N0bF9jbXAoY29uc3Qgdm9pZCAqcCwgY29uc3Qgdm9pZCAqcSkKIHsKLQl1bnNpZ25lZCBsb25nIGhhc2g7Ci0Jc3RydWN0IGlvY3RsX3RyYW5zICp0OwotCi0JaGFzaCA9IGlvY3RsMzJfaGFzaCAodHJhbnMtPmNtZCk7Ci0JaWYgKCFpb2N0bDMyX2hhc2hfdGFibGVbaGFzaF0pCi0JCWlvY3RsMzJfaGFzaF90YWJsZVtoYXNoXSA9IHRyYW5zOwotCWVsc2UgewotCQl0ID0gaW9jdGwzMl9oYXNoX3RhYmxlW2hhc2hdOwotCQl3aGlsZSAodC0+bmV4dCkKLQkJCXQgPSB0LT5uZXh0OwotCQl0cmFucy0+bmV4dCA9IE5VTEw7Ci0JCXQtPm5leHQgPSB0cmFuczsKLQl9CisJdW5zaWduZWQgaW50IGEsIGI7CisJYSA9ICoodW5zaWduZWQgaW50ICopcDsKKwliID0gKih1bnNpZ25lZCBpbnQgKilxOworCWlmIChhID4gYikKKwkJcmV0dXJuIDE7CisJaWYgKGEgPCBiKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfc3lzMzJfaW9jdGwodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlvY3RsX3N0YXJ0KTsgaSsrKSB7Ci0JCWlmIChpb2N0bF9zdGFydFtpXS5uZXh0KSB7Ci0JCQlwcmludGsoImlvY3RsIHRyYW5zbGF0aW9uICVkIGJhZFxuIixpKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlvY3RsMzJfaW5zZXJ0X3RyYW5zbGF0aW9uKCZpb2N0bF9zdGFydFtpXSk7Ci0JfQorCXNvcnQoaW9jdGxfcG9pbnRlciwgQVJSQVlfU0laRShpb2N0bF9wb2ludGVyKSwgc2l6ZW9mKCppb2N0bF9wb2ludGVyKSwKKwkJaW5pdF9zeXMzMl9pb2N0bF9jbXAsIE5VTEwpOwogCXJldHVybiAwOwogfQogX19pbml0Y2FsbChpbml0X3N5czMyX2lvY3RsKTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggYTEwMGZhMy4uOTUzMTczYSAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTk3OCw2ICs5NzgsNyBAQAogCXEuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHEubmFtZSwgcS5sZW4pOwogCXJldHVybiBkX2FsbG9jKHBhcmVudCwgJnEpOwogfQorRVhQT1JUX1NZTUJPTChkX2FsbG9jX25hbWUpOwogCiAvKiB0aGUgY2FsbGVyIG11c3QgaG9sZCBkY2FjaGVfbG9jayAqLwogc3RhdGljIHZvaWQgX19kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2RpcmVjdC1pby5jIGIvZnMvZGlyZWN0LWlvLmMKaW5kZXggYjkxMjI3MC4uZTgyYWRjMiAxMDA2NDQKLS0tIGEvZnMvZGlyZWN0LWlvLmMKKysrIGIvZnMvZGlyZWN0LWlvLmMKQEAgLTUzLDEzICs1Myw2IEBACiAgKgogICogSWYgYmxrZmFjdG9yIGlzIHplcm8gdGhlbiB0aGUgdXNlcidzIHJlcXVlc3Qgd2FzIGFsaWduZWQgdG8gdGhlIGZpbGVzeXN0ZW0ncwogICogYmxvY2tzaXplLgotICoKLSAqIGxvY2tfdHlwZSBpcyBESU9fTE9DS0lORyBmb3IgcmVndWxhciBmaWxlcyBvbiBkaXJlY3QtSU8tbmFpdmUgZmlsZXN5c3RlbXMuCi0gKiBUaGlzIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRvIGRvIHRoZSBmYW5jeSBsb2NraW5nIHdoaWNoIHByZXZlbnRzCi0gKiBkaXJlY3QtSU8gZnJvbSBiZWluZyBhYmxlIHRvIHJlYWQgdW5pbml0aWFsaXNlZCBkaXNrIGJsb2Nrcy4gIElmIGl0cyB6ZXJvCi0gKiAoYmxvY2tkZXYpIHRoaXMgbG9ja2luZyBpcyBub3QgZG9uZSwgYW5kIGlmIGl0IGlzIERJT19PV05fTE9DS0lORyBpX211dGV4IGlzCi0gKiBub3QgaGVsZCBmb3IgdGhlIGVudGlyZSBkaXJlY3Qgd3JpdGUgKHRha2VuIGJyaWVmbHksIGluaXRpYWxseSwgZHVyaW5nIGEKLSAqIGRpcmVjdCByZWFkIHRob3VnaCwgYnV0IGl0cyBuZXZlciBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgYSBkaXJlY3QtSU8pLgogICovCiAKIHN0cnVjdCBkaW8gewpAQCAtNjgsNyArNjEsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJ3OwogCWxvZmZfdCBpX3NpemU7CQkJLyogaV9zaXplIHdoZW4gc3VibWl0dGVkICovCi0JaW50IGxvY2tfdHlwZTsJCQkvKiBkb2Vzbid0IGNoYW5nZSAqLworCWludCBmbGFnczsJCQkvKiBkb2Vzbid0IGNoYW5nZSAqLwogCXVuc2lnbmVkIGJsa2JpdHM7CQkvKiBkb2Vzbid0IGNoYW5nZSAqLwogCXVuc2lnbmVkIGJsa2ZhY3RvcjsJCS8qIFdoZW4gd2UncmUgdXNpbmcgYW4gYWxpZ25tZW50IHdoaWNoCiAJCQkJCSAgIGlzIGZpbmVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0ncyBzb2Z0CkBAIC0xMDQsMjIgKzk3LDYgQEAKIAl1bnNpZ25lZCBjdXJfcGFnZV9sZW47CQkvKiBOciBvZiBieXRlcyBhdCBjdXJfcGFnZV9vZmZzZXQgKi8KIAlzZWN0b3JfdCBjdXJfcGFnZV9ibG9jazsJLyogV2hlcmUgaXQgc3RhcnRzICovCiAKLQkvKgotCSAqIFBhZ2UgZmV0Y2hpbmcgc3RhdGUuIFRoZXNlIHZhcmlhYmxlcyBiZWxvbmcgdG8gZGlvX3JlZmlsbF9wYWdlcygpLgotCSAqLwotCWludCBjdXJyX3BhZ2U7CQkJLyogY2hhbmdlcyAqLwotCWludCB0b3RhbF9wYWdlczsJCS8qIGRvZXNuJ3QgY2hhbmdlICovCi0JdW5zaWduZWQgbG9uZyBjdXJyX3VzZXJfYWRkcmVzczsvKiBjaGFuZ2VzICovCi0KLQkvKgotCSAqIFBhZ2UgcXVldWUuICBUaGVzZSB2YXJpYWJsZXMgYmVsb25nIHRvIGRpb19yZWZpbGxfcGFnZXMoKSBhbmQKLQkgKiBkaW9fZ2V0X3BhZ2UoKS4KLQkgKi8KLQlzdHJ1Y3QgcGFnZSAqcGFnZXNbRElPX1BBR0VTXTsJLyogcGFnZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBoZWFkOwkJCS8qIG5leHQgcGFnZSB0byBwcm9jZXNzICovCi0JdW5zaWduZWQgdGFpbDsJCQkvKiBsYXN0IHZhbGlkIHBhZ2UgKyAxICovCi0JaW50IHBhZ2VfZXJyb3JzOwkJLyogZXJybm8gZnJvbSBnZXRfdXNlcl9wYWdlcygpICovCi0KIAkvKiBCSU8gY29tcGxldGlvbiBzdGF0ZSAqLwogCXNwaW5sb2NrX3QgYmlvX2xvY2s7CQkvKiBwcm90ZWN0cyBCSU8gZmllbGRzIGJlbG93ICovCiAJdW5zaWduZWQgbG9uZyByZWZjb3VudDsJCS8qIGRpcmVjdF9pb193b3JrZXIoKSBhbmQgYmlvcyAqLwpAQCAtMTMxLDYgKzEwOCwyOCBAQAogCWludCBpc19hc3luYzsJCQkvKiBpcyBJTyBhc3luYyA/ICovCiAJaW50IGlvX2Vycm9yOwkJCS8qIElPIGVycm9yIGluIGNvbXBsZXRpb24gcGF0aCAqLwogCXNzaXplX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgLyogSU8gcmVzdWx0ICovCisKKwkvKgorCSAqIFBhZ2UgZmV0Y2hpbmcgc3RhdGUuIFRoZXNlIHZhcmlhYmxlcyBiZWxvbmcgdG8gZGlvX3JlZmlsbF9wYWdlcygpLgorCSAqLworCWludCBjdXJyX3BhZ2U7CQkJLyogY2hhbmdlcyAqLworCWludCB0b3RhbF9wYWdlczsJCS8qIGRvZXNuJ3QgY2hhbmdlICovCisJdW5zaWduZWQgbG9uZyBjdXJyX3VzZXJfYWRkcmVzczsvKiBjaGFuZ2VzICovCisKKwkvKgorCSAqIFBhZ2UgcXVldWUuICBUaGVzZSB2YXJpYWJsZXMgYmVsb25nIHRvIGRpb19yZWZpbGxfcGFnZXMoKSBhbmQKKwkgKiBkaW9fZ2V0X3BhZ2UoKS4KKwkgKi8KKwl1bnNpZ25lZCBoZWFkOwkJCS8qIG5leHQgcGFnZSB0byBwcm9jZXNzICovCisJdW5zaWduZWQgdGFpbDsJCQkvKiBsYXN0IHZhbGlkIHBhZ2UgKyAxICovCisJaW50IHBhZ2VfZXJyb3JzOwkJLyogZXJybm8gZnJvbSBnZXRfdXNlcl9wYWdlcygpICovCisKKwkvKgorCSAqIHBhZ2VzW10gKGFuZCBhbnkgZmllbGRzIHBsYWNlZCBhZnRlciBpdCkgYXJlIG5vdCB6ZXJvZWQgb3V0IGF0CisJICogYWxsb2NhdGlvbiB0aW1lLiAgRG9uJ3QgYWRkIG5ldyBmaWVsZHMgYWZ0ZXIgcGFnZXNbXSB1bmxlc3MgeW91CisJICogd2lzaCB0aGF0IHRoZXkgbm90IGJlIHplcm9lZC4KKwkgKi8KKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbRElPX1BBR0VTXTsJLyogcGFnZSBidWZmZXIgKi8KIH07CiAKIC8qCkBAIC0yNDAsNyArMjM5LDggQEAKIAlpZiAoZGlvLT5lbmRfaW8gJiYgZGlvLT5yZXN1bHQpCiAJCWRpby0+ZW5kX2lvKGRpby0+aW9jYiwgb2Zmc2V0LCB0cmFuc2ZlcnJlZCwKIAkJCSAgICBkaW8tPm1hcF9iaC5iX3ByaXZhdGUpOwotCWlmIChkaW8tPmxvY2tfdHlwZSA9PSBESU9fTE9DS0lORykKKworCWlmIChkaW8tPmZsYWdzICYgRElPX0xPQ0tJTkcpCiAJCS8qIGxvY2tkZXA6IG5vbi1vd25lciByZWxlYXNlICovCiAJCXVwX3JlYWRfbm9uX293bmVyKCZkaW8tPmlub2RlLT5pX2FsbG9jX3NlbSk7CiAKQEAgLTUxNSwyMSArNTE1LDI0IEBACiAJCW1hcF9iaC0+Yl9zdGF0ZSA9IDA7CiAJCW1hcF9iaC0+Yl9zaXplID0gZnNfY291bnQgPDwgZGlvLT5pbm9kZS0+aV9ibGtiaXRzOwogCisJCS8qCisJCSAqIEZvciB3cml0ZXMgaW5zaWRlIGlfc2l6ZSBvbiBhIERJT19TS0lQX0hPTEVTIGZpbGVzeXN0ZW0gd2UKKwkJICogZm9yYmlkIGJsb2NrIGNyZWF0aW9uczogb25seSBvdmVyd3JpdGVzIGFyZSBwZXJtaXR0ZWQuCisJCSAqIFdlIHdpbGwgcmV0dXJuIGVhcmx5IHRvIHRoZSBjYWxsZXIgb25jZSB3ZSBzZWUgYW4KKwkJICogdW5tYXBwZWQgYnVmZmVyIGhlYWQgcmV0dXJuZWQsIGFuZCB0aGUgY2FsbGVyIHdpbGwgZmFsbAorCQkgKiBiYWNrIHRvIGJ1ZmZlcmVkIEkvTy4KKwkJICoKKwkJICogT3RoZXJ3aXNlIHRoZSBkZWNpc2lvbiBpcyBsZWZ0IHRvIHRoZSBnZXRfYmxvY2tzIG1ldGhvZCwKKwkJICogd2hpY2ggbWF5IGRlY2lkZSB0byBoYW5kbGUgaXQgb3IgYWxzbyByZXR1cm4gYW4gdW5tYXBwZWQKKwkJICogYnVmZmVyIGhlYWQuCisJCSAqLwogCQljcmVhdGUgPSBkaW8tPnJ3ICYgV1JJVEU7Ci0JCWlmIChkaW8tPmxvY2tfdHlwZSA9PSBESU9fTE9DS0lORykgeworCQlpZiAoZGlvLT5mbGFncyAmIERJT19TS0lQX0hPTEVTKSB7CiAJCQlpZiAoZGlvLT5ibG9ja19pbl9maWxlIDwgKGlfc2l6ZV9yZWFkKGRpby0+aW5vZGUpID4+CiAJCQkJCQkJZGlvLT5ibGtiaXRzKSkKIAkJCQljcmVhdGUgPSAwOwotCQl9IGVsc2UgaWYgKGRpby0+bG9ja190eXBlID09IERJT19OT19MT0NLSU5HKSB7Ci0JCQljcmVhdGUgPSAwOwogCQl9CiAKLQkJLyoKLQkJICogRm9yIHdyaXRlcyBpbnNpZGUgaV9zaXplIHdlIGZvcmJpZCBibG9jayBjcmVhdGlvbnM6IG9ubHkKLQkJICogb3ZlcndyaXRlcyBhcmUgcGVybWl0dGVkLiAgV2UgZmFsbCBiYWNrIHRvIGJ1ZmZlcmVkIHdyaXRlcwotCQkgKiBhdCBhIGhpZ2hlciBsZXZlbCBmb3IgaW5zaWRlLWlfc2l6ZSBibG9jay1pbnN0YW50aWF0aW5nCi0JCSAqIHdyaXRlcy4KLQkJICovCiAJCXJldCA9ICgqZGlvLT5nZXRfYmxvY2spKGRpby0+aW5vZGUsIGZzX3N0YXJ0YmxrLAogCQkJCQkJbWFwX2JoLCBjcmVhdGUpOwogCX0KQEAgLTEwMzksNyArMTA0Miw3IEBACiAJICogd2UgY2FuIGxldCBpX211dGV4IGdvIG5vdyB0aGF0IGl0cyBhY2hpZXZlZCBpdHMgcHVycG9zZQogCSAqIG9mIHByb3RlY3RpbmcgdXMgZnJvbSBsb29raW5nIHVwIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLgogCSAqLwotCWlmICgocncgPT0gUkVBRCkgJiYgKGRpby0+bG9ja190eXBlID09IERJT19MT0NLSU5HKSkKKwlpZiAocncgPT0gUkVBRCAmJiAoZGlvLT5mbGFncyAmIERJT19MT0NLSU5HKSkKIAkJbXV0ZXhfdW5sb2NrKCZkaW8tPmlub2RlLT5pX211dGV4KTsKIAogCS8qCkBAIC0xMDg2LDMwICsxMDg5LDI4IEBACiAKIC8qCiAgKiBUaGlzIGlzIGEgbGlicmFyeSBmdW5jdGlvbiBmb3IgdXNlIGJ5IGZpbGVzeXN0ZW0gZHJpdmVycy4KLSAqIFRoZSBsb2NraW5nIHJ1bGVzIGFyZSBnb3Zlcm5lZCBieSB0aGUgZGlvX2xvY2tfdHlwZSBwYXJhbWV0ZXIuCiAgKgotICogRElPX05PX0xPQ0tJTkcgKG5vIGxvY2tpbmcsIGZvciByYXcgYmxvY2sgZGV2aWNlIGFjY2VzcykKLSAqIEZvciB3cml0ZXMsIGlfbXV0ZXggaXMgbm90IGhlbGQgb24gZW50cnk7IGl0IGlzIG5ldmVyIHRha2VuLgorICogVGhlIGxvY2tpbmcgcnVsZXMgYXJlIGdvdmVybmVkIGJ5IHRoZSBmbGFncyBwYXJhbWV0ZXI6CisgKiAgLSBpZiB0aGUgZmxhZ3MgdmFsdWUgY29udGFpbnMgRElPX0xPQ0tJTkcgd2UgdXNlIGEgZmFuY3kgbG9ja2luZworICogICAgc2NoZW1lIGZvciBkdW1iIGZpbGVzeXN0ZW1zLgorICogICAgRm9yIHdyaXRlcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1bmRlciBpX211dGV4IGFuZCByZXR1cm5zIHdpdGgKKyAqICAgIGlfbXV0ZXggaGVsZCwgZm9yIHJlYWRzLCBpX211dGV4IGlzIG5vdCBoZWxkIG9uIGVudHJ5LCBidXQgaXQgaXMKKyAqICAgIHRha2VuIGFuZCBkcm9wcGVkIGFnYWluIGJlZm9yZSByZXR1cm5pbmcuCisgKiAgICBGb3IgcmVhZHMgYW5kIHdyaXRlcyBpX2FsbG9jX3NlbSBpcyB0YWtlbiBpbiBzaGFyZWQgbW9kZSBhbmQgcmVsZWFzZWQKKyAqICAgIG9uIEkvTyBjb21wbGV0aW9uICh3aGljaCBtYXkgaGFwcGVuIGFzeW5jaHJvbm91c2x5IGFmdGVyIHJldHVybmluZyB0bworICogICAgdGhlIGNhbGxlcikuCiAgKgotICogRElPX0xPQ0tJTkcgKHNpbXBsZSBsb2NraW5nIGZvciByZWd1bGFyIGZpbGVzKQotICogRm9yIHdyaXRlcyB3ZSBhcmUgY2FsbGVkIHVuZGVyIGlfbXV0ZXggYW5kIHJldHVybiB3aXRoIGlfbXV0ZXggaGVsZCwgZXZlbgotICogdGhvdWdoIGl0IGlzIGludGVybmFsbHkgZHJvcHBlZC4KLSAqIEZvciByZWFkcywgaV9tdXRleCBpcyBub3QgaGVsZCBvbiBlbnRyeSwgYnV0IGl0IGlzIHRha2VuIGFuZCBkcm9wcGVkIGJlZm9yZQotICogcmV0dXJuaW5nLgotICoKLSAqIERJT19PV05fTE9DS0lORyAoZmlsZXN5c3RlbSBwcm92aWRlcyBzeW5jaHJvbmlzYXRpb24gYW5kIGhhbmRsaW5nIG9mCi0gKgl1bmluaXRpYWxpc2VkIGRhdGEsIGFsbG93aW5nIHBhcmFsbGVsIGRpcmVjdCByZWFkZXJzIGFuZCB3cml0ZXJzKQotICogRm9yIHdyaXRlcyB3ZSBhcmUgY2FsbGVkIHdpdGhvdXQgaV9tdXRleCwgcmV0dXJuIHdpdGhvdXQgaXQsIG5ldmVyIHRvdWNoIGl0LgotICogRm9yIHJlYWRzIHdlIGFyZSBjYWxsZWQgdW5kZXIgaV9tdXRleCBhbmQgcmV0dXJuIHdpdGggaV9tdXRleCBoZWxkLCBldmVuCi0gKiB0aG91Z2ggaXQgbWF5IGJlIGludGVybmFsbHkgZHJvcHBlZC4KLSAqCi0gKiBBZGRpdGlvbmFsIGlfYWxsb2Nfc2VtIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBpbmxpbmUgYmVsb3cuCisgKiAgLSBpZiB0aGUgZmxhZ3MgdmFsdWUgZG9lcyBOT1QgY29udGFpbiBESU9fTE9DS0lORyB3ZSBkb24ndCB1c2UgYW55CisgKiAgICBpbnRlcm5hbCBsb2NraW5nIGJ1dCByYXRoZXIgcmVseSBvbiB0aGUgZmlsZXN5c3RlbSB0byBzeW5jaHJvbml6ZQorICogICAgZGlyZWN0IEkvTyByZWFkcy93cml0ZXMgdmVyc3VzIGVhY2ggb3RoZXIgYW5kIHRydW5jYXRlLgorICogICAgRm9yIHJlYWRzIGFuZCB3cml0ZXMgYm90aCBpX211dGV4IGFuZCBpX2FsbG9jX3NlbSBhcmUgbm90IGhlbGQgb24KKyAqICAgIGVudHJ5IGFuZCBhcmUgbmV2ZXIgdGFrZW4uCiAgKi8KIHNzaXplX3QKIF9fYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LCAKIAl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGdldF9ibG9ja190IGdldF9ibG9jaywgZGlvX2lvZG9uZV90IGVuZF9pbywKLQlpbnQgZGlvX2xvY2tfdHlwZSkKKwlpbnQgZmxhZ3MpCiB7CiAJaW50IHNlZzsKIAlzaXplX3Qgc2l6ZTsKQEAgLTExMjAsOCArMTEyMSw2IEBACiAJc3NpemVfdCByZXR2YWwgPSAtRUlOVkFMOwogCWxvZmZfdCBlbmQgPSBvZmZzZXQ7CiAJc3RydWN0IGRpbyAqZGlvOwotCWludCByZWxlYXNlX2lfbXV0ZXggPSAwOwotCWludCBhY3F1aXJlX2lfbXV0ZXggPSAwOwogCiAJaWYgKHJ3ICYgV1JJVEUpCiAJCXJ3ID0gV1JJVEVfT0RJUkVDVF9QTFVHOwpAQCAtMTE1MSw0OCArMTE1MCw0MSBAQAogCQl9CiAJfQogCi0JZGlvID0ga3phbGxvYyhzaXplb2YoKmRpbyksIEdGUF9LRVJORUwpOworCWRpbyA9IGttYWxsb2Moc2l6ZW9mKCpkaW8pLCBHRlBfS0VSTkVMKTsKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWlmICghZGlvKQogCQlnb3RvIG91dDsKLQogCS8qCi0JICogRm9yIGJsb2NrIGRldmljZSBhY2Nlc3MgRElPX05PX0xPQ0tJTkcgaXMgdXNlZCwKLQkgKgluZWl0aGVyIHJlYWRlcnMgbm9yIHdyaXRlcnMgZG8gYW55IGxvY2tpbmcgYXQgYWxsCi0JICogRm9yIHJlZ3VsYXIgZmlsZXMgdXNpbmcgRElPX0xPQ0tJTkcsCi0JICoJcmVhZGVycyBuZWVkIHRvIGdyYWIgaV9tdXRleCBhbmQgaV9hbGxvY19zZW0KLQkgKgl3cml0ZXJzIG5lZWQgdG8gZ3JhYiBpX2FsbG9jX3NlbSBvbmx5IChpX211dGV4IGlzIGFscmVhZHkgaGVsZCkKLQkgKiBGb3IgcmVndWxhciBmaWxlcyB1c2luZyBESU9fT1dOX0xPQ0tJTkcsCi0JICoJbmVpdGhlciByZWFkZXJzIG5vciB3cml0ZXJzIHRha2UgYW55IGxvY2tzIGhlcmUKKwkgKiBCZWxpZXZlIGl0IG9yIG5vdCwgemVyb2luZyBvdXQgdGhlIHBhZ2UgYXJyYXkgY2F1c2VkIGEgLjUlCisJICogcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpbiBhIGRhdGFiYXNlIGJlbmNobWFyay4gIFNvLCB3ZSB0YWtlCisJICogY2FyZSB0byBvbmx5IHplcm8gb3V0IHdoYXQncyBuZWVkZWQuCiAJICovCi0JZGlvLT5sb2NrX3R5cGUgPSBkaW9fbG9ja190eXBlOwotCWlmIChkaW9fbG9ja190eXBlICE9IERJT19OT19MT0NLSU5HKSB7CisJbWVtc2V0KGRpbywgMCwgb2Zmc2V0b2Yoc3RydWN0IGRpbywgcGFnZXMpKTsKKworCWRpby0+ZmxhZ3MgPSBmbGFnczsKKwlpZiAoZGlvLT5mbGFncyAmIERJT19MT0NLSU5HKSB7CiAJCS8qIHdhdGNoIG91dCBmb3IgYSAwIGxlbiBpbyBmcm9tIGEgdHJpY2tzeSBmcyAqLwogCQlpZiAocncgPT0gUkVBRCAmJiBlbmQgPiBvZmZzZXQpIHsKLQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPQorCQkJCQlpb2NiLT5raV9maWxwLT5mX21hcHBpbmc7CiAKLQkJCW1hcHBpbmcgPSBpb2NiLT5raV9maWxwLT5mX21hcHBpbmc7Ci0JCQlpZiAoZGlvX2xvY2tfdHlwZSAhPSBESU9fT1dOX0xPQ0tJTkcpIHsKLQkJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQkJcmVsZWFzZV9pX211dGV4ID0gMTsKLQkJCX0KKwkJCS8qIHdpbGwgYmUgcmVsZWFzZWQgYnkgZGlyZWN0X2lvX3dvcmtlciAqLworCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJCQlyZXR2YWwgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIG9mZnNldCwKIAkJCQkJCQkgICAgICBlbmQgLSAxKTsKIAkJCWlmIChyZXR2YWwpIHsKKwkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJCQlrZnJlZShkaW8pOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCi0JCQlpZiAoZGlvX2xvY2tfdHlwZSA9PSBESU9fT1dOX0xPQ0tJTkcpIHsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQlhY3F1aXJlX2lfbXV0ZXggPSAxOwotCQkJfQogCQl9CiAKLQkJaWYgKGRpb19sb2NrX3R5cGUgPT0gRElPX0xPQ0tJTkcpCi0JCQkvKiBsb2NrZGVwOiBub3QgdGhlIG93bmVyIHdpbGwgcmVsZWFzZSBpdCAqLwotCQkJZG93bl9yZWFkX25vbl9vd25lcigmaW5vZGUtPmlfYWxsb2Nfc2VtKTsKKwkJLyoKKwkJICogV2lsbCBiZSByZWxlYXNlZCBhdCBJL08gY29tcGxldGlvbiwgcG9zc2libHkgaW4gYQorCQkgKiBkaWZmZXJlbnQgdGhyZWFkLgorCQkgKi8KKwkJZG93bl9yZWFkX25vbl9vd25lcigmaW5vZGUtPmlfYWxsb2Nfc2VtKTsKIAl9CiAKIAkvKgpAQCAtMTIxMCwyNCArMTIwMiwxOSBAQAogCS8qCiAJICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3CiAJICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2FpbiBmb3IgRElPX0xPQ0tJTkcuCi0JICogTk9URTogRElPX05PX0xPQ0svRElPX09XTl9MT0NLIGNhbGxlcnMgaGF2ZSB0byBoYW5kbGUgdGhpcyBieQotCSAqIGl0J3Mgb3duIG1lYW5lci4KKwkgKgorCSAqIE5PVEU6IGZpbGVzeXN0ZW1zIHdpdGggdGhlaXIgb3duIGxvY2tpbmcgaGF2ZSB0byBoYW5kbGUgdGhpcworCSAqIG9uIHRoZWlyIG93bi4KIAkgKi8KLQlpZiAodW5saWtlbHkocmV0dmFsIDwgMCAmJiAocncgJiBXUklURSkpKSB7Ci0JCWxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQotCQlpZiAoZW5kID4gaXNpemUgJiYgZGlvX2xvY2tfdHlwZSA9PSBESU9fTE9DS0lORykKLQkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlzaXplKTsKKwlpZiAoZmxhZ3MgJiBESU9fTE9DS0lORykgeworCQlpZiAodW5saWtlbHkoKHJ3ICYgV1JJVEUpICYmIHJldHZhbCA8IDApKSB7CisJCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJCQlpZiAoZW5kID4gaXNpemUpCisJCQkJdm10cnVuY2F0ZShpbm9kZSwgaXNpemUpOworCQl9CiAJfQogCi0JaWYgKHJ3ID09IFJFQUQgJiYgZGlvX2xvY2tfdHlwZSA9PSBESU9fTE9DS0lORykKLQkJcmVsZWFzZV9pX211dGV4ID0gMDsKLQogb3V0OgotCWlmIChyZWxlYXNlX2lfbXV0ZXgpCi0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWVsc2UgaWYgKGFjcXVpcmVfaV9tdXRleCkKLQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKF9fYmxvY2tkZXZfZGlyZWN0X0lPKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jIGIvZnMvZWNyeXB0ZnMvZGVudHJ5LmMKaW5kZXggMmRkYTVhZC4uOGYwMDZhMCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMKKysrIGIvZnMvZWNyeXB0ZnMvZGVudHJ5LmMKQEAgLTYyLDcgKzYyLDcgQEAKIAkJc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZSA9CiAJCQllY3J5cHRmc19pbm9kZV90b19sb3dlcihkZW50cnktPmRfaW5vZGUpOwogCi0JCWZzc3RhY2tfY29weV9hdHRyX2FsbChkZW50cnktPmRfaW5vZGUsIGxvd2VyX2lub2RlLCBOVUxMKTsKKwkJZnNzdGFja19jb3B5X2F0dHJfYWxsKGRlbnRyeS0+ZF9pbm9kZSwgbG93ZXJfaW5vZGUpOwogCX0KIG91dDoKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCAwNTZmZWQ2Mi4uNDI5Y2EwYiAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC02MjYsOSArNjI2LDkgQEAKIAkJCWxvd2VyX25ld19kaXJfZGVudHJ5LT5kX2lub2RlLCBsb3dlcl9uZXdfZGVudHJ5KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2xvY2s7Ci0JZnNzdGFja19jb3B5X2F0dHJfYWxsKG5ld19kaXIsIGxvd2VyX25ld19kaXJfZGVudHJ5LT5kX2lub2RlLCBOVUxMKTsKKwlmc3N0YWNrX2NvcHlfYXR0cl9hbGwobmV3X2RpciwgbG93ZXJfbmV3X2Rpcl9kZW50cnktPmRfaW5vZGUpOwogCWlmIChuZXdfZGlyICE9IG9sZF9kaXIpCi0JCWZzc3RhY2tfY29weV9hdHRyX2FsbChvbGRfZGlyLCBsb3dlcl9vbGRfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgTlVMTCk7CisJCWZzc3RhY2tfY29weV9hdHRyX2FsbChvbGRfZGlyLCBsb3dlcl9vbGRfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiBvdXRfbG9jazoKIAl1bmxvY2tfcmVuYW1lKGxvd2VyX29sZF9kaXJfZGVudHJ5LCBsb3dlcl9uZXdfZGlyX2RlbnRyeSk7CiAJZHB1dChsb3dlcl9uZXdfZGVudHJ5LT5kX3BhcmVudCk7CkBAIC05NjcsNyArOTY3LDcgQEAKIAlyYyA9IG5vdGlmeV9jaGFuZ2UobG93ZXJfZGVudHJ5LCBpYSk7CiAJbXV0ZXhfdW5sb2NrKCZsb3dlcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgotCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUsIE5VTEwpOworCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IGM2YWM4NWQuLjU2N2JjNGIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdGFjay5oPgotI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgogCiAvKioKQEAgLTExOSw3ICsxMTgsNiBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQogCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JaW50IG9wZW5lZF9sb3dlcl9maWxlID0gMDsKIAlpbnQgcmMgPSAwOwogCiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CkBAIC0xMzYsMTIgKzEzNCw5IEBACiAJCQkgICAgICAgImZvciBsb3dlcl9kZW50cnkgWzB4JXBdIGFuZCBsb3dlcl9tbnQgWzB4JXBdOyAiCiAJCQkgICAgICAgInJjID0gWyVkXVxuIiwgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIHJjKTsKIAkJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUgPSBOVUxMOwotCQl9IGVsc2UKLQkJCW9wZW5lZF9sb3dlcl9maWxlID0gMTsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwotCWlmIChvcGVuZWRfbG93ZXJfZmlsZSkKLQkJaW1hX2NvdW50c19nZXQoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xOTQsNyArMTg5LDcgQEAKIAkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBsb3dlcl9pbm9kZS0+aV9tb2RlLAogCQkJCSAgIGxvd2VyX2lub2RlLT5pX3JkZXYpOwogCWRlbnRyeS0+ZF9vcCA9ICZlY3J5cHRmc19kb3BzOwotCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUsIE5VTEwpOworCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUpOwogCS8qIFRoaXMgc2l6ZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGZvciByZWFsIGZpbGVzIHcvIGhlYWRlcnMgYW5kCiAJICogb3RoZXIgbWV0YWRhdGEgKi8KIAlmc3N0YWNrX2NvcHlfaW5vZGVfc2l6ZShpbm9kZSwgbG93ZXJfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRmZC5jIGIvZnMvZXZlbnRmZC5jCmluZGV4IDhiNDdlNDIuLmQyNjQwMmYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50ZmQuYworKysgYi9mcy9ldmVudGZkLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCWN0eC0+ZmxhZ3MgPSBmbGFnczsKIAogCWZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoIltldmVudGZkXSIsICZldmVudGZkX2ZvcHMsIGN0eCwKLQkJCQkgIGZsYWdzICYgRUZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJCQkJICBPX1JEV1IgfCAoZmxhZ3MgJiBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKSk7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZXZlbnRmZF9mcmVlX2N0eChjdHgpOwogCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IDM2NmM1MDMuLmJkMDU2YTUgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCSAqIGEgZmlsZSBzdHJ1Y3R1cmUgYW5kIGEgZnJlZSBmaWxlIGRlc2NyaXB0b3IuCiAJICovCiAJZXJyb3IgPSBhbm9uX2lub2RlX2dldGZkKCJbZXZlbnRwb2xsXSIsICZldmVudHBvbGxfZm9wcywgZXAsCi0JCQkJIGZsYWdzICYgT19DTE9FWEVDKTsKKwkJCQkgT19SRFdSIHwgKGZsYWdzICYgT19DTE9FWEVDKSk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZXBfZnJlZShlcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjMGM2MzZlLi42MzJiMDJlIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC04MjYsNyArODI2LDkgQEAKIAkJYXR0YWNoX3BpZCh0c2ssIFBJRFRZUEVfUElELCAgdGFza19waWQobGVhZGVyKSk7CiAJCXRyYW5zZmVyX3BpZChsZWFkZXIsIHRzaywgUElEVFlQRV9QR0lEKTsKIAkJdHJhbnNmZXJfcGlkKGxlYWRlciwgdHNrLCBQSURUWVBFX1NJRCk7CisKIAkJbGlzdF9yZXBsYWNlX3JjdSgmbGVhZGVyLT50YXNrcywgJnRzay0+dGFza3MpOworCQlsaXN0X3JlcGxhY2VfaW5pdCgmbGVhZGVyLT5zaWJsaW5nLCAmdHNrLT5zaWJsaW5nKTsKIAogCQl0c2stPmdyb3VwX2xlYWRlciA9IHRzazsKIAkJbGVhZGVyLT5ncm91cF9sZWFkZXIgPSB0c2s7CkBAIC05MjMsNiArOTI1LDE1IEBACiB2b2lkIHNldF90YXNrX2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNoYXIgKmJ1ZikKIHsKIAl0YXNrX2xvY2sodHNrKTsKKworCS8qCisJICogVGhyZWFkcyBtYXkgYWNjZXNzIGN1cnJlbnQtPmNvbW0gd2l0aG91dCBob2xkaW5nCisJICogdGhlIHRhc2sgbG9jaywgc28gd3JpdGUgdGhlIHN0cmluZyBjYXJlZnVsbHkuCisJICogUmVhZGVycyB3aXRob3V0IGEgbG9jayBtYXkgc2VlIGluY29tcGxldGUgbmV3CisJICogbmFtZXMgYnV0IGFyZSBzYWZlIGZyb20gbm9uLXRlcm1pbmF0aW5nIHN0cmluZyByZWFkcy4KKwkgKi8KKwltZW1zZXQodHNrLT5jb21tLCAwLCBUQVNLX0NPTU1fTEVOKTsKKwl3bWIoKTsKIAlzdHJsY3B5KHRzay0+Y29tbSwgYnVmLCBzaXplb2YodHNrLT5jb21tKSk7CiAJdGFza191bmxvY2sodHNrKTsKIAlwZXJmX2V2ZW50X2NvbW0odHNrKTsKQEAgLTE3NTIsMTcgKzE3NjMsMjAgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXN0cnVjdCBsaW51eF9iaW5mbXQgKiBiaW5mbXQ7CiAJc3RydWN0IGlub2RlICogaW5vZGU7Ci0Jc3RydWN0IGZpbGUgKiBmaWxlOwogCWNvbnN0IHN0cnVjdCBjcmVkICpvbGRfY3JlZDsKIAlzdHJ1Y3QgY3JlZCAqY3JlZDsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgZmxhZyA9IDA7CiAJaW50IGlzcGlwZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DT1JFXS5ybGltX2N1cjsKIAljaGFyICoqaGVscGVyX2FyZ3YgPSBOVUxMOwogCWludCBoZWxwZXJfYXJnYyA9IDA7CiAJaW50IGR1bXBfY291bnQgPSAwOwogCXN0YXRpYyBhdG9taWNfdCBjb3JlX2R1bXBfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zIGNwcm0gPSB7CisJCS5zaWduciA9IHNpZ25yLAorCQkucmVncyA9IHJlZ3MsCisJCS5saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ09SRV0ucmxpbV9jdXIsCisJfTsKIAogCWF1ZGl0X2NvcmVfZHVtcHMoc2lnbnIpOwogCkBAIC0xODE4LDE1ICsxODMyLDE1IEBACiAJaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCBzaWducik7CiAJdW5sb2NrX2tlcm5lbCgpOwogCi0JaWYgKCghaXNwaXBlKSAmJiAoY29yZV9saW1pdCA8IGJpbmZtdC0+bWluX2NvcmVkdW1wKSkKKwlpZiAoKCFpc3BpcGUpICYmIChjcHJtLmxpbWl0IDwgYmluZm10LT5taW5fY29yZWR1bXApKQogCQlnb3RvIGZhaWxfdW5sb2NrOwogCiAgCWlmIChpc3BpcGUpIHsKLQkJaWYgKGNvcmVfbGltaXQgPT0gMCkgeworCQlpZiAoY3BybS5saW1pdCA9PSAwKSB7CiAJCQkvKgogCQkJICogTm9ybWFsbHkgY29yZSBsaW1pdHMgYXJlIGlycmVsZXZhbnQgdG8gcGlwZXMsIHNpbmNlCiAJCQkgKiB3ZSdyZSBub3Qgd3JpdGluZyB0byB0aGUgZmlsZSBzeXN0ZW0sIGJ1dCB3ZSB1c2UKLQkJCSAqIGNvcmVfbGltaXQgb2YgMCBoZXJlIGFzIGEgc3BlYWNpYWwgdmFsdWUuIEFueQorCQkJICogY3BybS5saW1pdCBvZiAwIGhlcmUgYXMgYSBzcGVhY2lhbCB2YWx1ZS4gQW55CiAJCQkgKiBub24temVybyBsaW1pdCBnZXRzIHNldCB0byBSTElNX0lORklOSVRZIGJlbG93LCBidXQKIAkJCSAqIGEgbGltaXQgb2YgMCBza2lwcyB0aGUgZHVtcC4gIFRoaXMgaXMgYSBjb25zaXN0ZW50CiAJCQkgKiB3YXkgdG8gY2F0Y2ggcmVjdXJzaXZlIGNyYXNoZXMuICBXZSBjYW4gc3RpbGwgY3Jhc2gKQEAgLTE4NTksMjUgKzE4NzMsMjUgQEAKIAkJCWdvdG8gZmFpbF9kcm9wY291bnQ7CiAJCX0KIAotCQljb3JlX2xpbWl0ID0gUkxJTV9JTkZJTklUWTsKKwkJY3BybS5saW1pdCA9IFJMSU1fSU5GSU5JVFk7CiAKIAkJLyogU0lHUElQRSBjYW4gaGFwcGVuLCBidXQgaXQncyBqdXN0IG5ldmVyIHByb2Nlc3NlZCAqLwogCQlpZiAoY2FsbF91c2VybW9kZWhlbHBlcl9waXBlKGhlbHBlcl9hcmd2WzBdLCBoZWxwZXJfYXJndiwgTlVMTCwKLQkJCQkmZmlsZSkpIHsKKwkJCQkmY3BybS5maWxlKSkgewogIAkJCXByaW50ayhLRVJOX0lORk8gIkNvcmUgZHVtcCB0byAlcyBwaXBlIGZhaWxlZFxuIiwKIAkJCSAgICAgICBjb3JlbmFtZSk7CiAJCQlnb3RvIGZhaWxfZHJvcGNvdW50OwogIAkJfQogIAl9IGVsc2UKLSAJCWZpbGUgPSBmaWxwX29wZW4oY29yZW5hbWUsCisJCWNwcm0uZmlsZSA9IGZpbHBfb3Blbihjb3JlbmFtZSwKIAkJCQkgT19DUkVBVCB8IDIgfCBPX05PRk9MTE9XIHwgT19MQVJHRUZJTEUgfCBmbGFnLAogCQkJCSAwNjAwKTsKLQlpZiAoSVNfRVJSKGZpbGUpKQorCWlmIChJU19FUlIoY3BybS5maWxlKSkKIAkJZ290byBmYWlsX2Ryb3Bjb3VudDsKLQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBjcHJtLmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKGlub2RlLT5pX25saW5rID4gMSkKIAkJZ290byBjbG9zZV9mYWlsOwkvKiBtdWx0aXBsZSBsaW5rcyAtIGRvbid0IGR1bXAgKi8KLQlpZiAoIWlzcGlwZSAmJiBkX3VuaGFzaGVkKGZpbGUtPmZfcGF0aC5kZW50cnkpKQorCWlmICghaXNwaXBlICYmIGRfdW5oYXNoZWQoY3BybS5maWxlLT5mX3BhdGguZGVudHJ5KSkKIAkJZ290byBjbG9zZV9mYWlsOwogCiAJLyogQUs6IGFjdHVhbGx5IGkgc2VlIG5vIHJlYXNvbiB0byBub3QgYWxsb3cgdGhpcyBmb3IgbmFtZWQgcGlwZXMgZXRjLiwKQEAgLTE4OTAsMjEgKzE5MDQsMjIgQEAKIAkgKi8KIAlpZiAoaW5vZGUtPmlfdWlkICE9IGN1cnJlbnRfZnN1aWQoKSkKIAkJZ290byBjbG9zZV9mYWlsOwotCWlmICghZmlsZS0+Zl9vcCkKKwlpZiAoIWNwcm0uZmlsZS0+Zl9vcCkKIAkJZ290byBjbG9zZV9mYWlsOwotCWlmICghZmlsZS0+Zl9vcC0+d3JpdGUpCisJaWYgKCFjcHJtLmZpbGUtPmZfb3AtPndyaXRlKQogCQlnb3RvIGNsb3NlX2ZhaWw7Ci0JaWYgKCFpc3BpcGUgJiYgZG9fdHJ1bmNhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCwgMCwgZmlsZSkgIT0gMCkKKwlpZiAoIWlzcGlwZSAmJgorCSAgICBkb190cnVuY2F0ZShjcHJtLmZpbGUtPmZfcGF0aC5kZW50cnksIDAsIDAsIGNwcm0uZmlsZSkgIT0gMCkKIAkJZ290byBjbG9zZV9mYWlsOwogCi0JcmV0dmFsID0gYmluZm10LT5jb3JlX2R1bXAoc2lnbnIsIHJlZ3MsIGZpbGUsIGNvcmVfbGltaXQpOworCXJldHZhbCA9IGJpbmZtdC0+Y29yZV9kdW1wKCZjcHJtKTsKIAogCWlmIChyZXR2YWwpCiAJCWN1cnJlbnQtPnNpZ25hbC0+Z3JvdXBfZXhpdF9jb2RlIHw9IDB4ODA7CiBjbG9zZV9mYWlsOgogCWlmIChpc3BpcGUgJiYgY29yZV9waXBlX2xpbWl0KQotCQl3YWl0X2Zvcl9kdW1wX2hlbHBlcnMoZmlsZSk7Ci0JZmlscF9jbG9zZShmaWxlLCBOVUxMKTsKKwkJd2FpdF9mb3JfZHVtcF9oZWxwZXJzKGNwcm0uZmlsZSk7CisJZmlscF9jbG9zZShjcHJtLmZpbGUsIE5VTEwpOwogZmFpbF9kcm9wY291bnQ6CiAJaWYgKGR1bXBfY291bnQpCiAJCWF0b21pY19kZWMoJmNvcmVfZHVtcF9jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9leHBvcnRmcy9leHBmcy5jIGIvZnMvZXhwb3J0ZnMvZXhwZnMuYwppbmRleCAxOTdjN2RiLi5lOWUxNzU5IDEwMDY0NAotLS0gYS9mcy9leHBvcnRmcy9leHBmcy5jCisrKyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKQEAgLTYsNyArNiw3IEBACiAgKiBhbmQgZm9yIG1hcHBpbmcgYmFjayBmcm9tIGZpbGUgaGFuZGxlcyB0byBkZW50cmllcy4KICAqCiAgKiBGb3IgZGV0YWlscyBvbiB3aHkgd2UgZG8gYWxsIHRoZSBzdHJhbmdlIGFuZCBoYWlyeSB0aGluZ3MgaW4gaGVyZQotICogdGFrZSBhIGxvb2sgYXQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcuCisgKiB0YWtlIGEgbG9vayBhdCBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9FeHBvcnRpbmcuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9leHQyL2FjbC5jIGIvZnMvZXh0Mi9hY2wuYwppbmRleCBhNjNkNDQyLi5hOTllNTQzIDEwMDY0NAotLS0gYS9mcy9leHQyL2FjbC5jCisrKyBiL2ZzL2V4dDIvYWNsLmMKQEAgLTMzOSwxMiArMzM5LDEyIEBACiAgKiBFeHRlbmRlZCBhdHRyaWJ1dCBoYW5kbGVycwogICovCiBzdGF0aWMgc2l6ZV90Ci1leHQyX3hhdHRyX2xpc3RfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAotCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorZXh0Ml94YXR0cl9saXN0X2FjbF9hY2Nlc3Moc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKTsKIAotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkpCisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFBPU0lYX0FDTCkpCiAJCXJldHVybiAwOwogCWlmIChsaXN0ICYmIHNpemUgPD0gbGlzdF9zaXplKQogCQltZW1jcHkobGlzdCwgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywgc2l6ZSk7CkBAIC0zNTIsMTIgKzM1MiwxMiBAQAogfQogCiBzdGF0aWMgc2l6ZV90Ci1leHQyX3hhdHRyX2xpc3RfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCitleHQyX3hhdHRyX2xpc3RfYWNsX2RlZmF1bHQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOwogCi0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSkKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgUE9TSVhfQUNMKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X3NpemUpCiAJCW1lbWNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwgc2l6ZSk7CkBAIC0zNjUsMTUgKzM2NSwxOCBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQyX3hhdHRyX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCitleHQyX3hhdHRyX2dldF9hY2woc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCisJCSAgIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwogCi0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSkKKwlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgUE9TSVhfQUNMKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JYWNsID0gZXh0Ml9nZXRfYWNsKGlub2RlLCB0eXBlKTsKKwlhY2wgPSBleHQyX2dldF9hY2woZGVudHJ5LT5kX2lub2RlLCB0eXBlKTsKIAlpZiAoSVNfRVJSKGFjbCkpCiAJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAJaWYgKGFjbCA9PSBOVUxMKQpAQCAtMzg1LDMzICszODgsMTcgQEAKIH0KIAogc3RhdGljIGludAotZXh0Ml94YXR0cl9nZXRfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQyX3hhdHRyX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYnVmZmVyLCBzaXplKTsKLX0KLQotc3RhdGljIGludAotZXh0Ml94YXR0cl9nZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCi17Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDJfeGF0dHJfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgYnVmZmVyLCBzaXplKTsKLX0KLQotc3RhdGljIGludAotZXh0Ml94YXR0cl9zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCB2b2lkICp2YWx1ZSwKLQkJICAgc2l6ZV90IHNpemUpCitleHQyX3hhdHRyX3NldF9hY2woc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKKwkJICAgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCBlcnJvcjsKIAotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkpCisJaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFBPU0lYX0FDTCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJaWYgKCFpc19vd25lcl9vcl9jYXAoZGVudHJ5LT5kX2lub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh2YWx1ZSkgewpAQCAtNDI2LDQxICs0MTMsMjUgQEAKIAl9IGVsc2UKIAkJYWNsID0gTlVMTDsKIAotCWVycm9yID0gZXh0Ml9zZXRfYWNsKGlub2RlLCB0eXBlLCBhY2wpOworCWVycm9yID0gZXh0Ml9zZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSwgYWNsKTsKIAogcmVsZWFzZV9hbmRfb3V0OgogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50Ci1leHQyX3hhdHRyX3NldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQotewotCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQyX3hhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgdmFsdWUsIHNpemUpOwotfQotCi1zdGF0aWMgaW50Ci1leHQyX3hhdHRyX3NldF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDJfeGF0dHJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgdmFsdWUsIHNpemUpOwotfQotCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQyX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKIAkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKKwkuZmxhZ3MJPSBBQ0xfVFlQRV9BQ0NFU1MsCiAJLmxpc3QJPSBleHQyX3hhdHRyX2xpc3RfYWNsX2FjY2VzcywKLQkuZ2V0CT0gZXh0Ml94YXR0cl9nZXRfYWNsX2FjY2VzcywKLQkuc2V0CT0gZXh0Ml94YXR0cl9zZXRfYWNsX2FjY2VzcywKKwkuZ2V0CT0gZXh0Ml94YXR0cl9nZXRfYWNsLAorCS5zZXQJPSBleHQyX3hhdHRyX3NldF9hY2wsCiB9OwogCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQyX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CiAJLnByZWZpeAk9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULAorCS5mbGFncwk9IEFDTF9UWVBFX0RFRkFVTFQsCiAJLmxpc3QJPSBleHQyX3hhdHRyX2xpc3RfYWNsX2RlZmF1bHQsCi0JLmdldAk9IGV4dDJfeGF0dHJfZ2V0X2FjbF9kZWZhdWx0LAotCS5zZXQJPSBleHQyX3hhdHRyX3NldF9hY2xfZGVmYXVsdCwKKwkuZ2V0CT0gZXh0Ml94YXR0cl9nZXRfYWNsLAorCS5zZXQJPSBleHQyX3hhdHRyX3NldF9hY2wsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggZmMyYmQwNS4uNzUxNjk1NyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYworKysgYi9mcy9leHQyL2Rpci5jCkBAIC03MjEsNSArNzIxLDUgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDJfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKKwkuZnN5bmMJCT0gZXh0Ml9mc3luYywKIH07CmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oCmluZGV4IGRhMzE4YjAuLjA2MTkxNGEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZXh0Mi5oCisrKyBiL2ZzL2V4dDIvZXh0Mi5oCkBAIC0xNTUsNiArMTU1LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7CiAKIC8qIGZpbGUuYyAqLworZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYyk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfeGlwX2ZpbGVfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZmlsZS5jIGIvZnMvZXh0Mi9maWxlLmMKaW5kZXggYTJmM2FmZC4uNTg2ZTM1OCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9maWxlLmMKKysrIGIvZnMvZXh0Mi9maWxlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlICJleHQyLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJhY2wuaCIKQEAgLTM4LDYgKzM5LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfaW5vZGUtPmlfc2I7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOworCisJcmV0ID0gc2ltcGxlX2ZzeW5jKGZpbGUsIGRlbnRyeSwgZGF0YXN5bmMpOworCWlmIChyZXQgPT0gLUVJTyB8fCB0ZXN0X2FuZF9jbGVhcl9iaXQoQVNfRUlPLCAmbWFwcGluZy0+ZmxhZ3MpKSB7CisJCS8qIFdlIGRvbid0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqLworCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKKwkJCSAgICJkZXRlY3RlZCBJTyBlcnJvciB3aGVuIHdyaXRpbmcgbWV0YWRhdGEgYnVmZmVycyIpOworCQlyZXQgPSAtRUlPOworCX0KKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogV2UgaGF2ZSBtb3N0bHkgTlVMTCdzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBvayBmb3IKICAqIHRoZSBleHQyIGZpbGVzeXN0ZW0uCkBAIC01NSw3ICs3Miw3IEBACiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBleHQyX3JlbGVhc2VfZmlsZSwKLQkuZnN5bmMJCT0gc2ltcGxlX2ZzeW5jLAorCS5mc3luYwkJPSBleHQyX2ZzeW5jLAogCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKIH07CkBAIC03Miw3ICs4OSw3IEBACiAJLm1tYXAJCT0geGlwX2ZpbGVfbW1hcCwKIAkub3BlbgkJPSBnZW5lcmljX2ZpbGVfb3BlbiwKIAkucmVsZWFzZQk9IGV4dDJfcmVsZWFzZV9maWxlLAotCS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCisJLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCAxMzg4ODAyLi5mOWNiNTRhIDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0xMTA1LDkgKzExMDUsMzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBleHQyX2NsZWFyX3N1cGVyX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpzYmggPSBFWFQyX1NCKHNiKS0+c19zYmg7CisKKwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHNiaCkpIHsKKwkJLyoKKwkJICogT2gsIGRlYXIuICBBIHByZXZpb3VzIGF0dGVtcHQgdG8gd3JpdGUgdGhlCisJCSAqIHN1cGVyYmxvY2sgZmFpbGVkLiAgVGhpcyBjb3VsZCBoYXBwZW4gYmVjYXVzZSB0aGUKKwkJICogVVNCIGRldmljZSB3YXMgeWFua2VkIG91dC4gIE9yIGl0IGNvdWxkIGhhcHBlbiB0bworCQkgKiBiZSBhIHRyYW5zaWVudCB3cml0ZSBlcnJvciBhbmQgbWF5YmUgdGhlIGJsb2NrIHdpbGwKKwkJICogYmUgcmVtYXBwZWQuICBOb3RoaW5nIHdlIGNhbiBkbyBidXQgdG8gcmV0cnkgdGhlCisJCSAqIHdyaXRlIGFuZCBob3BlIGZvciB0aGUgYmVzdC4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiRVhUMi1mczogJXMgcHJldmlvdXMgSS9PIGVycm9yIHRvICIKKwkJICAgICAgICJzdXBlcmJsb2NrIGRldGVjdGVkIiwgc2ItPnNfaWQpOworCQljbGVhcl9idWZmZXJfd3JpdGVfaW9fZXJyb3Ioc2JoKTsKKwkJc2V0X2J1ZmZlcl91cHRvZGF0ZShzYmgpOworCX0KK30KKwogc3RhdGljIHZvaWQgZXh0Ml9jb21taXRfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLAogCQkJICAgICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogZXMpCiB7CisJZXh0Ml9jbGVhcl9zdXBlcl9lcnJvcihzYik7CiAJZXMtPnNfd3RpbWUgPSBjcHVfdG9fbGUzMihnZXRfc2Vjb25kcygpKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShFWFQyX1NCKHNiKS0+c19zYmgpOwogCXNiLT5zX2RpcnQgPSAwOwpAQCAtMTExNSw2ICsxMTM2LDcgQEAKIAogc3RhdGljIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcykKIHsKKwlleHQyX2NsZWFyX3N1cGVyX2Vycm9yKHNiKTsKIAllcy0+c19mcmVlX2Jsb2Nrc19jb3VudCA9IGNwdV90b19sZTMyKGV4dDJfY291bnRfZnJlZV9ibG9ja3Moc2IpKTsKIAllcy0+c19mcmVlX2lub2Rlc19jb3VudCA9IGNwdV90b19sZTMyKGV4dDJfY291bnRfZnJlZV9pbm9kZXMoc2IpKTsKIAllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jCmluZGV4IDc5MTM1MzEuLjkwNGYwMDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIveGF0dHIuYworKysgYi9mcy9leHQyL3hhdHRyLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYmNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAiZXh0Mi5oIgogI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAiYWNsLmgiCkBAIC0yNDksOCArMjUwLDkgQEAKICAqIHVzZWQgLyByZXF1aXJlZCBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50Ci1leHQyX3hhdHRyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCitleHQyX3hhdHRyX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCBleHQyX3hhdHRyX2VudHJ5ICplbnRyeTsKIAljaGFyICplbmQ7CkBAIC0zMDAsOSArMzAyLDEwIEBACiAJCQlleHQyX3hhdHRyX2hhbmRsZXIoZW50cnktPmVfbmFtZV9pbmRleCk7CiAKIAkJaWYgKGhhbmRsZXIpIHsKLQkJCXNpemVfdCBzaXplID0gaGFuZGxlci0+bGlzdChpbm9kZSwgYnVmZmVyLCByZXN0LAorCQkJc2l6ZV90IHNpemUgPSBoYW5kbGVyLT5saXN0KGRlbnRyeSwgYnVmZmVyLCByZXN0LAogCQkJCQkJICAgIGVudHJ5LT5lX25hbWUsCi0JCQkJCQkgICAgZW50cnktPmVfbmFtZV9sZW4pOworCQkJCQkJICAgIGVudHJ5LT5lX25hbWVfbGVuLAorCQkJCQkJICAgIGhhbmRsZXItPmZsYWdzKTsKIAkJCWlmIChidWZmZXIpIHsKIAkJCQlpZiAoc2l6ZSA+IHJlc3QpIHsKIAkJCQkJZXJyb3IgPSAtRVJBTkdFOwpAQCAtMzMwLDcgKzMzMyw3IEBACiBzc2l6ZV90CiBleHQyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7Ci0JcmV0dXJuIGV4dDJfeGF0dHJfbGlzdChkZW50cnktPmRfaW5vZGUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGV4dDJfeGF0dHJfbGlzdChkZW50cnksIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMgYi9mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggNzBjMGRiZC4uYzgxNTU4NCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi94YXR0cl9zZWN1cml0eS5jCisrKyBiL2ZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYwpAQCAtMTEsOCArMTEsOCBAQAogI2luY2x1ZGUgInhhdHRyLmgiCiAKIHN0YXRpYyBzaXplX3QKLWV4dDJfeGF0dHJfc2VjdXJpdHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAotCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK2V4dDJfeGF0dHJfc2VjdXJpdHlfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCQkgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBpbnQgcHJlZml4X2xlbiA9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU47CiAJY29uc3Qgc2l6ZV90IHRvdGFsX2xlbiA9IHByZWZpeF9sZW4gKyBuYW1lX2xlbiArIDE7CkBAIC0yNiwyMiArMjYsMjIgQEAKIH0KIAogc3RhdGljIGludAotZXh0Ml94YXR0cl9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCitleHQyX3hhdHRyX3NlY3VyaXR5X2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0Ml94YXR0cl9nZXQoaW5vZGUsIEVYVDJfWEFUVFJfSU5ERVhfU0VDVVJJVFksIG5hbWUsCisJcmV0dXJuIGV4dDJfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwgbmFtZSwKIAkJCSAgICAgIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQKLWV4dDJfeGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK2V4dDJfeGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQyX3hhdHRyX3NldChpbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwgbmFtZSwKKwlyZXR1cm4gZXh0Ml94YXR0cl9zZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLCBuYW1lLAogCQkJICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0cl90cnVzdGVkLmMgYi9mcy9leHQyL3hhdHRyX3RydXN0ZWQuYwppbmRleCBlODIxOWY4Li4yYTI2ZDcxIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyX3RydXN0ZWQuYworKysgYi9mcy9leHQyL3hhdHRyX3RydXN0ZWQuYwpAQCAtMTMsOCArMTMsOCBAQAogI2luY2x1ZGUgInhhdHRyLmgiCiAKIHN0YXRpYyBzaXplX3QKLWV4dDJfeGF0dHJfdHJ1c3RlZF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCQljb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCitleHQyX3hhdHRyX3RydXN0ZWRfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJY29uc3QgaW50IHByZWZpeF9sZW4gPSBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU47CiAJY29uc3Qgc2l6ZV90IHRvdGFsX2xlbiA9IHByZWZpeF9sZW4gKyBuYW1lX2xlbiArIDE7CkBAIC0zMSwyMiArMzEsMjIgQEAKIH0KIAogc3RhdGljIGludAotZXh0Ml94YXR0cl90cnVzdGVkX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2V4dDJfeGF0dHJfdHJ1c3RlZF9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0Ml94YXR0cl9nZXQoaW5vZGUsIEVYVDJfWEFUVFJfSU5ERVhfVFJVU1RFRCwgbmFtZSwKKwlyZXR1cm4gZXh0Ml94YXR0cl9nZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQyX1hBVFRSX0lOREVYX1RSVVNURUQsIG5hbWUsCiAJCQkgICAgICBidWZmZXIsIHNpemUpOwogfQogCiBzdGF0aWMgaW50Ci1leHQyX3hhdHRyX3RydXN0ZWRfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK2V4dDJfeGF0dHJfdHJ1c3RlZF9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDJfeGF0dHJfc2V0KGlub2RlLCBFWFQyX1hBVFRSX0lOREVYX1RSVVNURUQsIG5hbWUsCisJcmV0dXJuIGV4dDJfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9UUlVTVEVELCBuYW1lLAogCQkJICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0cl91c2VyLmMgYi9mcy9leHQyL3hhdHRyX3VzZXIuYwppbmRleCA5MjQ5NWQyLi4zZjZjYWYzIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyX3VzZXIuYworKysgYi9mcy9leHQyL3hhdHRyX3VzZXIuYwpAQCAtMTIsMTMgKzEyLDEzIEBACiAjaW5jbHVkZSAieGF0dHIuaCIKIAogc3RhdGljIHNpemVfdAotZXh0Ml94YXR0cl91c2VyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCitleHQyX3hhdHRyX3VzZXJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJY29uc3Qgc2l6ZV90IHByZWZpeF9sZW4gPSBYQVRUUl9VU0VSX1BSRUZJWF9MRU47CiAJY29uc3Qgc2l6ZV90IHRvdGFsX2xlbiA9IHByZWZpeF9sZW4gKyBuYW1lX2xlbiArIDE7CiAKLQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBYQVRUUl9VU0VSKSkKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgWEFUVFJfVVNFUikpCiAJCXJldHVybiAwOwogCiAJaWYgKGxpc3QgJiYgdG90YWxfbGVuIDw9IGxpc3Rfc2l6ZSkgewpAQCAtMzAsMjcgKzMwLDI4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWV4dDJfeGF0dHJfdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCitleHQyX3hhdHRyX3VzZXJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgWEFUVFJfVVNFUikpCisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFhBVFRSX1VTRVIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGV4dDJfeGF0dHJfZ2V0KGlub2RlLCBFWFQyX1hBVFRSX0lOREVYX1VTRVIsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGV4dDJfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUMl9YQVRUUl9JTkRFWF9VU0VSLAorCQkJICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotZXh0Ml94YXR0cl91c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitleHQyX3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFhBVFRSX1VTRVIpKQorCWlmICghdGVzdF9vcHQoZGVudHJ5LT5kX3NiLCBYQVRUUl9VU0VSKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGV4dDJfeGF0dHJfc2V0KGlub2RlLCBFWFQyX1hBVFRSX0lOREVYX1VTRVIsIG5hbWUsCi0JCQkgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBleHQyX3hhdHRyX3NldChkZW50cnktPmRfaW5vZGUsIEVYVDJfWEFUVFJfSU5ERVhfVVNFUiwKKwkJCSAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CiB9CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDJfeGF0dHJfdXNlcl9oYW5kbGVyID0gewpkaWZmIC0tZ2l0IGEvZnMvZXh0My9hY2wuYyBiL2ZzL2V4dDMvYWNsLmMKaW5kZXggYzliMGRmMy4uODJiYTM0MSAxMDA2NDQKLS0tIGEvZnMvZXh0My9hY2wuYworKysgYi9mcy9leHQzL2FjbC5jCkBAIC0zNjYsMTIgKzM2NiwxMiBAQAogICogRXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXJzCiAgKi8KIHN0YXRpYyBzaXplX3QKLWV4dDNfeGF0dHJfbGlzdF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X2xlbiwKLQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK2V4dDNfeGF0dHJfbGlzdF9hY2xfYWNjZXNzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3RfbGVuLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKTsKIAotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkpCisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFBPU0lYX0FDTCkpCiAJCXJldHVybiAwOwogCWlmIChsaXN0ICYmIHNpemUgPD0gbGlzdF9sZW4pCiAJCW1lbWNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTLCBzaXplKTsKQEAgLTM3OSwxMiArMzc5LDEyIEBACiB9CiAKIHN0YXRpYyBzaXplX3QKLWV4dDNfeGF0dHJfbGlzdF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9sZW4sCi0JCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorZXh0M194YXR0cl9saXN0X2FjbF9kZWZhdWx0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3RfbGVuLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOwogCi0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSkKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgUE9TSVhfQUNMKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X2xlbikKIAkJbWVtY3B5KGxpc3QsIFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULCBzaXplKTsKQEAgLTM5MiwxNSArMzkyLDE4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWV4dDNfeGF0dHJfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2V4dDNfeGF0dHJfZ2V0X2FjbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKKwkJICAgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpKQorCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdGVzdF9vcHQoZGVudHJ5LT5kX3NiLCBQT1NJWF9BQ0wpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlhY2wgPSBleHQzX2dldF9hY2woaW5vZGUsIHR5cGUpOworCWFjbCA9IGV4dDNfZ2V0X2FjbChkZW50cnktPmRfaW5vZGUsIHR5cGUpOwogCWlmIChJU19FUlIoYWNsKSkKIAkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAlpZiAoYWNsID09IE5VTEwpCkBAIC00MTIsMzEgKzQxNSwxNiBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQzX3hhdHRyX2dldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCitleHQzX3hhdHRyX3NldF9hY2woc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKKwkJICAgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDNfeGF0dHJfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBidWZmZXIsIHNpemUpOwotfQotCi1zdGF0aWMgaW50Ci1leHQzX3hhdHRyX2dldF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0M194YXR0cl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBidWZmZXIsIHNpemUpOwotfQotCi1zdGF0aWMgaW50Ci1leHQzX3hhdHRyX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IHZvaWQgKnZhbHVlLAotCQkgICBzaXplX3Qgc2l6ZSkKLXsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCBlcnJvciwgcmV0cmllcyA9IDA7CiAKKwlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQpAQCAtNDY4LDM0ICs0NTYsMTggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQKLWV4dDNfeGF0dHJfc2V0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDNfeGF0dHJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCB2YWx1ZSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4dDNfeGF0dHJfc2V0X2FjbF9kZWZhdWx0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0M194YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCB2YWx1ZSwgc2l6ZSk7Ci19Ci0KIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDNfeGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyID0gewogCS5wcmVmaXgJPSBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTLAorCS5mbGFncwk9IEFDTF9UWVBFX0FDQ0VTUywKIAkubGlzdAk9IGV4dDNfeGF0dHJfbGlzdF9hY2xfYWNjZXNzLAotCS5nZXQJPSBleHQzX3hhdHRyX2dldF9hY2xfYWNjZXNzLAotCS5zZXQJPSBleHQzX3hhdHRyX3NldF9hY2xfYWNjZXNzLAorCS5nZXQJPSBleHQzX3hhdHRyX2dldF9hY2wsCisJLnNldAk9IGV4dDNfeGF0dHJfc2V0X2FjbCwKIH07CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDNfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlciA9IHsKIAkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQsCisJLmZsYWdzCT0gQUNMX1RZUEVfREVGQVVMVCwKIAkubGlzdAk9IGV4dDNfeGF0dHJfbGlzdF9hY2xfZGVmYXVsdCwKLQkuZ2V0CT0gZXh0M194YXR0cl9nZXRfYWNsX2RlZmF1bHQsCi0JLnNldAk9IGV4dDNfeGF0dHJfc2V0X2FjbF9kZWZhdWx0LAorCS5nZXQJPSBleHQzX3hhdHRyX2dldF9hY2wsCisJLnNldAk9IGV4dDNfeGF0dHJfc2V0X2FjbCwKIH07CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggYWQxNDIyNy4uNDU1ZTZlNiAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtOTcwLDcgKzk3MCw3IEBACiAJCWlmIChtYXhfYmxvY2tzID4gRElPX01BWF9CTE9DS1MpCiAJCQltYXhfYmxvY2tzID0gRElPX01BWF9CTE9DS1M7CiAJCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgRElPX0NSRURJVFMgKwotCQkJCTIgKiBFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYikpOworCQkJCUVYVDNfTUFYUVVPVEFTX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYikpOwogCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gb3V0OwpAQCAtMzE0Niw4ICszMTQ2LDggQEAKIAogCQkvKiAodXNlcitncm91cCkqKG9sZCtuZXcpIHN0cnVjdHVyZSwgaW5vZGUgd3JpdGUgKHNiLAogCQkgKiBpbm9kZSBibG9jaywgPyAtIGJ1dCB0cnVuY2F0ZSBpbm9kZSB1cGRhdGUgaGFzIGl0KSAqLwotCQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIqKEVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpKwotCQkJCQlFWFQzX1FVT1RBX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKSszKTsKKwkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikrCisJCQkJCUVYVDNfTUFYUVVPVEFTX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKzMpOwogCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJCWVycm9yID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBlcnJfb3V0OwpAQCAtMzIzOSw3ICszMjM5LDcgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKIAkvKiBXZSBrbm93IHRoYXQgc3RydWN0dXJlIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdmZzX2RxX2luaXQgc28KIAkgKiB3ZSB3aWxsIGJlIHVwZGF0aW5nIG9ubHkgdGhlIGRhdGEgYmxvY2tzICsgaW5vZGVzICovCi0JcmV0ICs9IDIqRVhUM19RVU9UQV9UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpOworCXJldCArPSBFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpOwogI2VuZGlmCiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IGFhZDY0MDAuLjdiMGU0NGY3IDEwMDY0NAotLS0gYS9mcy9leHQzL25hbWVpLmMKKysrIGIvZnMvZXh0My9uYW1laS5jCkBAIC0xNjk5LDcgKzE2OTksNyBAQAogcmV0cnk6CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAzICsKLQkJCQkJMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOworCQkJCQlFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKQEAgLTE3MzMsNyArMTczMyw3IEBACiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwotCQkJCQkyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CisJCQkJCUVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApAQCAtMTc2OSw3ICsxNzY5LDcgQEAKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCi0JCQkJCTIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKKwkJCQkJRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCkBAIC0xOTIwLDcgKzE5MjAsNyBAQAogCXN0cnVjdCBleHQzX2lsb2MgaWxvYzsKIAlpbnQgZXJyID0gMCwgcmM7CiAKLQlsb2NrX3N1cGVyKHNiKTsKKwltdXRleF9sb2NrKCZFWFQzX1NCKHNiKS0+c19vcnBoYW5fbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZFWFQzX0koaW5vZGUpLT5pX29ycGhhbikpCiAJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtMTkyOSw5ICsxOTI5LDEzIEBACiAKIAkvKiBAQEAgRklYTUU6IE9ic2VydmF0aW9uIGZyb20gYXZpcm86CiAJICogSSB0aGluayBJIGNhbiB0cmlnZ2VyIEpfQVNTRVJUIGluIGV4dDNfb3JwaGFuX2FkZCgpLiAgV2UgYmxvY2sKLQkgKiBoZXJlIChvbiBsb2NrX3N1cGVyKCkpLCBzbyByYWNlIHdpdGggZXh0M19saW5rKCkgd2hpY2ggbWlnaHQgYnVtcAorCSAqIGhlcmUgKG9uIHNfb3JwaGFuX2xvY2spLCBzbyByYWNlIHdpdGggZXh0M19saW5rKCkgd2hpY2ggbWlnaHQgYnVtcAogCSAqIC0+aV9ubGluay4gRm9yLCBzYXkgaXQsIGNoYXJhY3RlciBkZXZpY2UuIE5vdCBhIHJlZ3VsYXIgZmlsZSwKIAkgKiBub3QgYSBkaXJlY3RvcnksIG5vdCBhIHN5bWxpbmsgYW5kIC0+aV9ubGluayA+IDAuCisJICoKKwkgKiB0eXRzbywgNC8yNS8yMDA5OiBJJ20gbm90IHN1cmUgaG93IHRoYXQgY291bGQgaGFwcGVuOworCSAqIHNob3VsZG4ndCB0aGUgZnMgY29yZSBwcm90ZWN0IHVzIGZyb20gdGhlc2Ugc29ydCBvZgorCSAqIHVubGluaygpL2xpbmsoKSByYWNlcz8KIAkgKi8KIAlKX0FTU0VSVCAoKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fAogCQlTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB8fCBpbm9kZS0+aV9ubGluayA9PSAwKTsKQEAgLTE5NjgsNyArMTk3Miw3IEBACiAJamJkX2RlYnVnKDQsICJvcnBoYW4gaW5vZGUgJWx1IHdpbGwgcG9pbnQgdG8gJWRcbiIsCiAJCQlpbm9kZS0+aV9pbm8sIE5FWFRfT1JQSEFOKGlub2RlKSk7CiBvdXRfdW5sb2NrOgotCXVubG9ja19zdXBlcihzYik7CisJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKHNiKS0+c19vcnBoYW5fbG9jayk7CiAJZXh0M19zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIGVycik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE5ODYsMTEgKzE5OTAsOSBAQAogCXN0cnVjdCBleHQzX2lsb2MgaWxvYzsKIAlpbnQgZXJyID0gMDsKIAotCWxvY2tfc3VwZXIoaW5vZGUtPmlfc2IpOwotCWlmIChsaXN0X2VtcHR5KCZlaS0+aV9vcnBoYW4pKSB7Ci0JCXVubG9ja19zdXBlcihpbm9kZS0+aV9zYik7Ci0JCXJldHVybiAwOwotCX0KKwltdXRleF9sb2NrKCZFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19vcnBoYW5fbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJmVpLT5pX29ycGhhbikpCisJCWdvdG8gb3V0OwogCiAJaW5vX25leHQgPSBORVhUX09SUEhBTihpbm9kZSk7CiAJcHJldiA9IGVpLT5pX29ycGhhbi5wcmV2OwpAQCAtMjA0MCw3ICsyMDQyLDcgQEAKIG91dF9lcnI6CiAJZXh0M19zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIGVycik7CiBvdXQ6Ci0JdW5sb2NrX3N1cGVyKGlub2RlLT5pX3NiKTsKKwltdXRleF91bmxvY2soJkVYVDNfU0IoaW5vZGUtPmlfc2IpLT5zX29ycGhhbl9sb2NrKTsKIAlyZXR1cm4gZXJyOwogCiBvdXRfYnJlbHNlOgpAQCAtMjE3NSw3ICsyMTc3LDcgQEAKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgNSArCi0JCQkJCTIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKKwkJCQkJRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCA1ZjgzYjYxLi41NDM1MWFjIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIAotCWxvY2tfc3VwZXIoc2IpOworCW11dGV4X2xvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKGlucHV0LT5ncm91cCAhPSBzYmktPnNfZ3JvdXBzX2NvdW50KSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X2pvdXJuYWw7CkBAIC0zMjQsNyArMzI0LDcgQEAKIAlicmVsc2UoYmgpOwogCiBleGl0X2pvdXJuYWw6Ci0JdW5sb2NrX3N1cGVyKHNiKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKChlcnIyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKSkgJiYgIWVycikKIAkJZXJyID0gZXJyMjsKIApAQCAtNjYyLDExICs2NjIsMTIgQEAKICAqIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgdGhlIG5ldyBibG9jayBhbmQgaW5vZGUgY291bnRzIGFyZSBpbiB0aGUgYmFja3VwCiAgKiBzdXBlcmJsb2NrcywgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV3IGdyb3VwIG1ldGFkYXRhIGluIHRoZSBHRFQgYmFja3Vwcy4KICAqCi0gKiBXZSBkbyBub3QgbmVlZCBsb2NrX3N1cGVyKCkgZm9yIHRoaXMsIGJlY2F1c2UgdGhlc2UgYmxvY2tzIGFyZSBub3QKLSAqIG90aGVyd2lzZSB0b3VjaGVkIGJ5IHRoZSBmaWxlc3lzdGVtIGNvZGUgd2hlbiBpdCBpcyBtb3VudGVkLiAgV2UgZG9uJ3QKLSAqIG5lZWQgdG8gd29ycnkgYWJvdXQgbGFzdCBjaGFuZ2luZyBmcm9tIHNiaS0+c19ncm91cHNfY291bnQsIGJlY2F1c2UgdGhlCi0gKiB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB3ZSBkbyBub3QgY29weSB0aGUgZnVsbCBudW1iZXIgb2YgYmFja3VwcwotICogYXQgdGhpcyB0aW1lLiAgVGhlIHJlc2l6ZSB3aGljaCBjaGFuZ2VkIHNfZ3JvdXBzX2NvdW50IHdpbGwgYmFja3VwIGFnYWluLgorICogV2UgZG8gbm90IG5lZWQgdGFrZSB0aGUgc19yZXNpemVfbG9jayBmb3IgdGhpcywgYmVjYXVzZSB0aGVzZQorICogYmxvY2tzIGFyZSBub3Qgb3RoZXJ3aXNlIHRvdWNoZWQgYnkgdGhlIGZpbGVzeXN0ZW0gY29kZSB3aGVuIGl0IGlzCisgKiBtb3VudGVkLiAgV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBsYXN0IGNoYW5naW5nIGZyb20KKyAqIHNiaS0+c19ncm91cHNfY291bnQsIGJlY2F1c2UgdGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGF0IHdlCisgKiBkbyBub3QgY29weSB0aGUgZnVsbCBudW1iZXIgb2YgYmFja3VwcyBhdCB0aGlzIHRpbWUuICBUaGUgcmVzaXplCisgKiB3aGljaCBjaGFuZ2VkIHNfZ3JvdXBzX2NvdW50IHdpbGwgYmFja3VwIGFnYWluLgogICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmFja3VwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgaW50IGJsa19vZmYsIGNoYXIgKmRhdGEsIGludCBzaXplKQpAQCAtODI1LDcgKzgyNiw3IEBACiAJCWdvdG8gZXhpdF9wdXQ7CiAJfQogCi0JbG9ja19zdXBlcihzYik7CisJbXV0ZXhfbG9jaygmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoaW5wdXQtPmdyb3VwICE9IHNiaS0+c19ncm91cHNfY291bnQpIHsKIAkJZXh0M193YXJuaW5nKHNiLCBfX2Z1bmNfXywKIAkJCSAgICAgIm11bHRpcGxlIHJlc2l6ZXJzIHJ1biBvbiBmaWxlc3lzdGVtISIpOwpAQCAtODU2LDcgKzg1Nyw3IEBACiAJLyoKIAkgKiBPSywgbm93IHdlJ3ZlIHNldCB1cCB0aGUgbmV3IGdyb3VwLiAgVGltZSB0byBtYWtlIGl0IGFjdGl2ZS4KIAkgKgotCSAqIEN1cnJlbnQga2VybmVscyBkb24ndCBsb2NrIGFsbCBhbGxvY2F0aW9ucyB2aWEgbG9ja19zdXBlcigpLAorCSAqIFdlIGRvIG5vdCBsb2NrIGFsbCBhbGxvY2F0aW9ucyB2aWEgc19yZXNpemVfbG9jawogCSAqIHNvIHdlIGhhdmUgdG8gYmUgc2FmZSB3cnQuIGNvbmN1cnJlbnQgYWNjZXNzZXMgdGhlIGdyb3VwCiAJICogZGF0YS4gIFNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBzZXQgYWxsIG9mIHRoZSByZWxldmFudAogCSAqIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSBldGMuICpiZWZvcmUqIHdlIGVuYWJsZSB0aGUgZ3JvdXAuCkBAIC05MDAsMTIgKzkwMSwxMiBAQAogCSAqCiAJICogVGhlIHByZWNpc2UgcnVsZXMgd2UgdXNlIGFyZToKIAkgKgotCSAqICogV3JpdGVycyBvZiBzX2dyb3Vwc19jb3VudCAqbXVzdCogaG9sZCBsb2NrX3N1cGVyCisJICogKiBXcml0ZXJzIG9mIHNfZ3JvdXBzX2NvdW50ICptdXN0KiBob2xkIHNfcmVzaXplX2xvY2sKIAkgKiBBTkQKIAkgKiAqIFdyaXRlcnMgbXVzdCBwZXJmb3JtIGEgc21wX3dtYigpIGFmdGVyIHVwZGF0aW5nIGFsbCBkZXBlbmRlbnQKIAkgKiAgIGRhdGEgYW5kIGJlZm9yZSBtb2RpZnlpbmcgdGhlIGdyb3VwcyBjb3VudAogCSAqCi0JICogKiBSZWFkZXJzIG11c3QgaG9sZCBsb2NrX3N1cGVyKCkgb3ZlciB0aGUgYWNjZXNzCisJICogKiBSZWFkZXJzIG11c3QgaG9sZCBzX3Jlc2l6ZV9sb2NrIG92ZXIgdGhlIGFjY2VzcwogCSAqIE9SCiAJICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzIGNvdW50CiAJICogICBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgpAQCAtOTM2LDcgKzkzNyw3IEBACiAJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgc2JpLT5zX3NiaCk7CiAKIGV4aXRfam91cm5hbDoKLQl1bmxvY2tfc3VwZXIoc2IpOworCW11dGV4X3VubG9jaygmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoKGVycjIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpKSAmJiAhZXJyKQogCQllcnIgPSBlcnIyOwogCWlmICghZXJyKSB7CkBAIC05NzMsNyArOTc0LDcgQEAKIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyB3cnQgb3RoZXIgcmVzaXplcnMganVzdAogCSAqIHlldDogd2UncmUgZ29pbmcgdG8gcmV2YWxpZGF0ZSBlcy0+c19ibG9ja3NfY291bnQgYWZ0ZXIKLQkgKiB0YWtpbmcgbG9ja19zdXBlcigpIGJlbG93LiAqLworCSAqIHRha2luZyB0aGUgc19yZXNpemVfbG9jayBiZWxvdy4gKi8KIAlvX2Jsb2Nrc19jb3VudCA9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCk7CiAJb19ncm91cHNfY291bnQgPSBFWFQzX1NCKHNiKS0+c19ncm91cHNfY291bnQ7CiAKQEAgLTEwNDUsMTEgKzEwNDYsMTEgQEAKIAkJZ290byBleGl0X3B1dDsKIAl9CiAKLQlsb2NrX3N1cGVyKHNiKTsKKwltdXRleF9sb2NrKCZFWFQzX1NCKHNiKS0+c19yZXNpemVfbG9jayk7CiAJaWYgKG9fYmxvY2tzX2NvdW50ICE9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCkpIHsKIAkJZXh0M193YXJuaW5nKHNiLCBfX2Z1bmNfXywKIAkJCSAgICAgIm11bHRpcGxlIHJlc2l6ZXJzIHJ1biBvbiBmaWxlc3lzdGVtISIpOwotCQl1bmxvY2tfc3VwZXIoc2IpOworCQltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfcHV0OwpAQCAtMTA1OSwxMyArMTA2MCwxMyBAQAogCQkJCQkJIEVYVDNfU0Ioc2IpLT5zX3NiaCkpKSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCiAJCQkgICAgICJlcnJvciAlZCBvbiBqb3VybmFsIHdyaXRlIGFjY2VzcyIsIGVycik7Ci0JCXVubG9ja19zdXBlcihzYik7CisJCW11dGV4X3VubG9jaygmRVhUM19TQihzYiktPnNfcmVzaXplX2xvY2spOwogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KIAllcy0+c19ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUzMihvX2Jsb2Nrc19jb3VudCArIGFkZCk7CiAJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgRVhUM19TQihzYiktPnNfc2JoKTsKLQl1bmxvY2tfc3VwZXIoc2IpOworCW11dGV4X3VubG9jaygmRVhUM19TQihzYiktPnNfcmVzaXplX2xvY2spOwogCWV4dDNfZGVidWcoImZyZWVpbmcgYmxvY2tzICVsdSB0aHJvdWdoICJFM0ZTQkxLIlxuIiwgb19ibG9ja3NfY291bnQsCiAJCSAgIG9fYmxvY2tzX2NvdW50ICsgYWRkKTsKIAlleHQzX2ZyZWVfYmxvY2tzX3NiKGhhbmRsZSwgc2IsIG9fYmxvY2tzX2NvdW50LCBhZGQsICZmcmVlZF9ibG9ja3MpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDdhZDFlOGMuLmFmYTJiNTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTE5MjgsNiArMTkyOCw4IEBACiAJc2ItPmRxX29wID0gJmV4dDNfcXVvdGFfb3BlcmF0aW9uczsKICNlbmRpZgogCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfb3JwaGFuKTsgLyogdW5saW5rZWQgYnV0IG9wZW4gZmlsZXMgKi8KKwltdXRleF9pbml0KCZzYmktPnNfb3JwaGFuX2xvY2spOworCW11dGV4X2luaXQoJnNiaS0+c19yZXNpemVfbG9jayk7CiAKIAlzYi0+c19yb290ID0gTlVMTDsKIApAQCAtMjAxNCwxNCArMjAxNiw3IEBACiAJfQogCiAJZXh0M19zZXR1cF9zdXBlciAoc2IsIGVzLCBzYi0+c19mbGFncyAmIE1TX1JET05MWSk7Ci0JLyoKLQkgKiBha3BtOiBjb3JlIHJlYWRfc3VwZXIoKSBjYWxscyBpbiBoZXJlIHdpdGggdGhlIHN1cGVyYmxvY2sgbG9ja2VkLgotCSAqIFRoYXQgZGVhZGxvY2tzLCBiZWNhdXNlIG9ycGhhbiBjbGVhbnVwIG5lZWRzIHRvIGxvY2sgdGhlIHN1cGVyYmxvY2sKLQkgKiBpbiBudW1lcm91cyBwbGFjZXMuICBIZXJlIHdlIGp1c3QgcG9wIHRoZSBsb2NrIC0gaXQncyByZWxhdGl2ZWx5Ci0JICogaGFybWxlc3MsIGJlY2F1c2Ugd2UgYXJlIG5vdyByZWFkeSB0byBhY2NlcHQgd3JpdGVfc3VwZXIoKSByZXF1ZXN0cywKLQkgKiBhbmQgYXZpcm8gc2F5cyB0aGF0J3MgdGhlIG9ubHkgcmVhc29uIGZvciBoYW5naW5nIG9udG8gdGhlCi0JICogc3VwZXJibG9jayBsb2NrLgotCSAqLworCiAJRVhUM19TQihzYiktPnNfbW91bnRfc3RhdGUgfD0gRVhUM19PUlBIQU5fRlM7CiAJZXh0M19vcnBoYW5fY2xlYW51cChzYiwgZXMpOwogCUVYVDNfU0Ioc2IpLT5zX21vdW50X3N0YXRlICY9IH5FWFQzX09SUEhBTl9GUzsKQEAgLTI0MDMsMTMgKzIzOTgsMTEgQEAKIAlpZiAoam91cm5hbF9mbHVzaChqb3VybmFsKSA8IDApCiAJCWdvdG8gb3V0OwogCi0JbG9ja19zdXBlcihzYik7CiAJaWYgKEVYVDNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSKSAmJgogCSAgICBzYi0+c19mbGFncyAmIE1TX1JET05MWSkgewogCQlFWFQzX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSKTsKIAkJZXh0M19jb21taXRfc3VwZXIoc2IsIGVzLCAxKTsKIAl9Ci0JdW5sb2NrX3N1cGVyKHNiKTsKIAogb3V0OgogCWpvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoam91cm5hbCk7CkBAIC0yNjAxLDEzICsyNTk0LDcgQEAKIAkJCSAgICAoc2JpLT5zX21vdW50X3N0YXRlICYgRVhUM19WQUxJRF9GUykpCiAJCQkJZXMtPnNfc3RhdGUgPSBjcHVfdG9fbGUxNihzYmktPnNfbW91bnRfc3RhdGUpOwogCi0JCQkvKgotCQkJICogV2UgaGF2ZSB0byB1bmxvY2sgc3VwZXIgc28gdGhhdCB3ZSBjYW4gd2FpdCBmb3IKLQkJCSAqIHRyYW5zYWN0aW9ucy4KLQkJCSAqLwotCQkJdW5sb2NrX3N1cGVyKHNiKTsKIAkJCWV4dDNfbWFya19yZWNvdmVyeV9jb21wbGV0ZShzYiwgZXMpOwotCQkJbG9ja19zdXBlcihzYik7CiAJCX0gZWxzZSB7CiAJCQlfX2xlMzIgcmV0OwogCQkJaWYgKChyZXQgPSBFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHIuYyBiL2ZzL2V4dDMveGF0dHIuYwppbmRleCAzODdkOTJkLi42Njg5NWNjIDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyLmMKKysrIGIvZnMvZXh0My94YXR0ci5jCkBAIC05OSw3ICs5OSw3IEBACiAJCQkJCQkgc3RydWN0IG1iX2NhY2hlX2VudHJ5ICoqKTsKIHN0YXRpYyB2b2lkIGV4dDNfeGF0dHJfcmVoYXNoKHN0cnVjdCBleHQzX3hhdHRyX2hlYWRlciAqLAogCQkJICAgICAgc3RydWN0IGV4dDNfeGF0dHJfZW50cnkgKik7Ci1zdGF0aWMgaW50IGV4dDNfeGF0dHJfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpidWZmZXIsCitzdGF0aWMgaW50IGV4dDNfeGF0dHJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwKIAkJCSAgIHNpemVfdCBidWZmZXJfc2l6ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgbWJfY2FjaGUgKmV4dDNfeGF0dHJfY2FjaGU7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHNzaXplX3QKIGV4dDNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLQlyZXR1cm4gZXh0M194YXR0cl9saXN0KGRlbnRyeS0+ZF9pbm9kZSwgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gZXh0M194YXR0cl9saXN0KGRlbnRyeSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludApAQCAtMzMyLDcgKzMzMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWV4dDNfeGF0dHJfbGlzdF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQzX3hhdHRyX2VudHJ5ICplbnRyeSwKK2V4dDNfeGF0dHJfbGlzdF9lbnRyaWVzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGV4dDNfeGF0dHJfZW50cnkgKmVudHJ5LAogCQkJY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCiB7CiAJc2l6ZV90IHJlc3QgPSBidWZmZXJfc2l6ZTsKQEAgLTM0Miw5ICszNDIsMTAgQEAKIAkJCWV4dDNfeGF0dHJfaGFuZGxlcihlbnRyeS0+ZV9uYW1lX2luZGV4KTsKIAogCQlpZiAoaGFuZGxlcikgewotCQkJc2l6ZV90IHNpemUgPSBoYW5kbGVyLT5saXN0KGlub2RlLCBidWZmZXIsIHJlc3QsCisJCQlzaXplX3Qgc2l6ZSA9IGhhbmRsZXItPmxpc3QoZGVudHJ5LCBidWZmZXIsIHJlc3QsCiAJCQkJCQkgICAgZW50cnktPmVfbmFtZSwKLQkJCQkJCSAgICBlbnRyeS0+ZV9uYW1lX2xlbik7CisJCQkJCQkgICAgZW50cnktPmVfbmFtZV9sZW4sCisJCQkJCQkgICAgaGFuZGxlci0+ZmxhZ3MpOwogCQkJaWYgKGJ1ZmZlcikgewogCQkJCWlmIChzaXplID4gcmVzdCkKIAkJCQkJcmV0dXJuIC1FUkFOR0U7CkBAIC0zNTcsOCArMzU4LDkgQEAKIH0KIAogc3RhdGljIGludAotZXh0M194YXR0cl9ibG9ja19saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQorZXh0M194YXR0cl9ibG9ja19saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAKQEAgLTM4Myw3ICszODUsNyBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCWV4dDNfeGF0dHJfY2FjaGVfaW5zZXJ0KGJoKTsKLQllcnJvciA9IGV4dDNfeGF0dHJfbGlzdF9lbnRyaWVzKGlub2RlLCBCRklSU1QoYmgpLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwllcnJvciA9IGV4dDNfeGF0dHJfbGlzdF9lbnRyaWVzKGRlbnRyeSwgQkZJUlNUKGJoKSwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CiAKIGNsZWFudXA6CiAJYnJlbHNlKGJoKTsKQEAgLTM5Miw4ICszOTQsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQzX3hhdHRyX2lib2R5X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCitleHQzX3hhdHRyX2lib2R5X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBleHQzX3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyOwogCXN0cnVjdCBleHQzX2lub2RlICpyYXdfaW5vZGU7CiAJc3RydWN0IGV4dDNfaWxvYyBpbG9jOwpAQCAtNDExLDcgKzQxNCw3IEBACiAJZXJyb3IgPSBleHQzX3hhdHRyX2NoZWNrX25hbWVzKElGSVJTVChoZWFkZXIpLCBlbmQpOwogCWlmIChlcnJvcikKIAkJZ290byBjbGVhbnVwOwotCWVycm9yID0gZXh0M194YXR0cl9saXN0X2VudHJpZXMoaW5vZGUsIElGSVJTVChoZWFkZXIpLAorCWVycm9yID0gZXh0M194YXR0cl9saXN0X2VudHJpZXMoZGVudHJ5LCBJRklSU1QoaGVhZGVyKSwKIAkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSk7CiAKIGNsZWFudXA6CkBAIC00MzAsMTIgKzQzMywxMiBAQAogICogdXNlZCAvIHJlcXVpcmVkIG9uIHN1Y2Nlc3MuCiAgKi8KIHN0YXRpYyBpbnQKLWV4dDNfeGF0dHJfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKK2V4dDNfeGF0dHJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQogewogCWludCBpX2Vycm9yLCBiX2Vycm9yOwogCi0JZG93bl9yZWFkKCZFWFQzX0koaW5vZGUpLT54YXR0cl9zZW0pOwotCWlfZXJyb3IgPSBleHQzX3hhdHRyX2lib2R5X2xpc3QoaW5vZGUsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCWRvd25fcmVhZCgmRVhUM19JKGRlbnRyeS0+ZF9pbm9kZSktPnhhdHRyX3NlbSk7CisJaV9lcnJvciA9IGV4dDNfeGF0dHJfaWJvZHlfbGlzdChkZW50cnksIGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCWlmIChpX2Vycm9yIDwgMCkgewogCQliX2Vycm9yID0gMDsKIAl9IGVsc2UgewpAQCAtNDQzLDExICs0NDYsMTEgQEAKIAkJCWJ1ZmZlciArPSBpX2Vycm9yOwogCQkJYnVmZmVyX3NpemUgLT0gaV9lcnJvcjsKIAkJfQotCQliX2Vycm9yID0gZXh0M194YXR0cl9ibG9ja19saXN0KGlub2RlLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwkJYl9lcnJvciA9IGV4dDNfeGF0dHJfYmxvY2tfbGlzdChkZW50cnksIGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCQlpZiAoYl9lcnJvciA8IDApCiAJCQlpX2Vycm9yID0gMDsKIAl9Ci0JdXBfcmVhZCgmRVhUM19JKGlub2RlKS0+eGF0dHJfc2VtKTsKKwl1cF9yZWFkKCZFWFQzX0koZGVudHJ5LT5kX2lub2RlKS0+eGF0dHJfc2VtKTsKIAlyZXR1cm4gaV9lcnJvciArIGJfZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL2V4dDMveGF0dHJfc2VjdXJpdHkuYwppbmRleCAzN2I4MTA5Li40NzQzNDg3IDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvZXh0My94YXR0cl9zZWN1cml0eS5jCkBAIC0xMiw4ICsxMiw4IEBACiAjaW5jbHVkZSAieGF0dHIuaCIKIAogc3RhdGljIHNpemVfdAotZXh0M194YXR0cl9zZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCQkgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorZXh0M194YXR0cl9zZWN1cml0eV9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTjsKIAljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKQEAgLTI4LDIzICsyOCwyMyBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQzX3hhdHRyX3NlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2V4dDNfeGF0dHJfc2VjdXJpdHlfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDNfeGF0dHJfZ2V0KGlub2RlLCBFWFQzX1hBVFRSX0lOREVYX1NFQ1VSSVRZLCBuYW1lLAotCQkJICAgICAgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gZXh0M194YXR0cl9nZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQzX1hBVFRSX0lOREVYX1NFQ1VSSVRZLAorCQkJICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotZXh0M194YXR0cl9zZWN1cml0eV9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorZXh0M194YXR0cl9zZWN1cml0eV9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDNfeGF0dHJfc2V0KGlub2RlLCBFWFQzX1hBVFRSX0lOREVYX1NFQ1VSSVRZLCBuYW1lLAotCQkJICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gZXh0M194YXR0cl9zZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQzX1hBVFRSX0lOREVYX1NFQ1VSSVRZLAorCQkJICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2V4dDMveGF0dHJfdHJ1c3RlZC5jCmluZGV4IGM3YzQxYTQuLmU1NTYyODQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMveGF0dHJfdHJ1c3RlZC5jCisrKyBiL2ZzL2V4dDMveGF0dHJfdHJ1c3RlZC5jCkBAIC0xNCw4ICsxNCw4IEBACiAjaW5jbHVkZSAieGF0dHIuaCIKIAogc3RhdGljIHNpemVfdAotZXh0M194YXR0cl90cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK2V4dDNfeGF0dHJfdHJ1c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IFhBVFRSX1RSVVNURURfUFJFRklYX0xFTjsKIAljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKQEAgLTMyLDIyICszMiwyMiBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQzX3hhdHRyX3RydXN0ZWRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorZXh0M194YXR0cl90cnVzdGVkX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0M194YXR0cl9nZXQoaW5vZGUsIEVYVDNfWEFUVFJfSU5ERVhfVFJVU1RFRCwgbmFtZSwKLQkJCSAgICAgIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGV4dDNfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUM19YQVRUUl9JTkRFWF9UUlVTVEVELAorCQkJICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotZXh0M194YXR0cl90cnVzdGVkX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitleHQzX3hhdHRyX3RydXN0ZWRfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQzX3hhdHRyX3NldChpbm9kZSwgRVhUM19YQVRUUl9JTkRFWF9UUlVTVEVELCBuYW1lLAorCXJldHVybiBleHQzX3hhdHRyX3NldChkZW50cnktPmRfaW5vZGUsIEVYVDNfWEFUVFJfSU5ERVhfVFJVU1RFRCwgbmFtZSwKIAkJCSAgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHJfdXNlci5jIGIvZnMvZXh0My94YXR0cl91c2VyLmMKaW5kZXggNDMwZmU2My4uM2JjZmU5ZSAxMDA2NDQKLS0tIGEvZnMvZXh0My94YXR0cl91c2VyLmMKKysrIGIvZnMvZXh0My94YXR0cl91c2VyLmMKQEAgLTEzLDEzICsxMywxMyBAQAogI2luY2x1ZGUgInhhdHRyLmgiCiAKIHN0YXRpYyBzaXplX3QKLWV4dDNfeGF0dHJfdXNlcl9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCSAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorZXh0M194YXR0cl91c2VyX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQljb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gWEFUVFJfVVNFUl9QUkVGSVhfTEVOOwogCWNvbnN0IHNpemVfdCB0b3RhbF9sZW4gPSBwcmVmaXhfbGVuICsgbmFtZV9sZW4gKyAxOwogCi0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgWEFUVFJfVVNFUikpCisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFhBVFRSX1VTRVIpKQogCQlyZXR1cm4gMDsKIAogCWlmIChsaXN0ICYmIHRvdGFsX2xlbiA8PSBsaXN0X3NpemUpIHsKQEAgLTMxLDI2ICszMSwyNyBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQzX3hhdHRyX3VzZXJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorZXh0M194YXR0cl91c2VyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKKwkJc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFhBVFRSX1VTRVIpKQorCWlmICghdGVzdF9vcHQoZGVudHJ5LT5kX3NiLCBYQVRUUl9VU0VSKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBleHQzX3hhdHRyX2dldChpbm9kZSwgRVhUM19YQVRUUl9JTkRFWF9VU0VSLCBuYW1lLCBidWZmZXIsIHNpemUpOworCXJldHVybiBleHQzX3hhdHRyX2dldChkZW50cnktPmRfaW5vZGUsIEVYVDNfWEFUVFJfSU5ERVhfVVNFUiwKKwkJCSAgICAgIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQKLWV4dDNfeGF0dHJfdXNlcl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorZXh0M194YXR0cl91c2VyX3NldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBYQVRUUl9VU0VSKSkKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgWEFUVFJfVVNFUikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gZXh0M194YXR0cl9zZXQoaW5vZGUsIEVYVDNfWEFUVFJfSU5ERVhfVVNFUiwgbmFtZSwKLQkJCSAgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7CisJcmV0dXJuIGV4dDNfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUM19YQVRUUl9JTkRFWF9VU0VSLAorCQkJICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0M194YXR0cl91c2VyX2hhbmRsZXIgPSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2FjbC5jIGIvZnMvZXh0NC9hY2wuYwppbmRleCAwZGY4OGIyLi44YTJhMjlkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2FjbC5jCisrKyBiL2ZzL2V4dDQvYWNsLmMKQEAgLTM2NCwxMiArMzY0LDEyIEBACiAgKiBFeHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlcnMKICAqLwogc3RhdGljIHNpemVfdAotZXh0NF94YXR0cl9saXN0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3RfbGVuLAotCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorZXh0NF94YXR0cl9saXN0X2FjbF9hY2Nlc3Moc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9sZW4sCisJCQkgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MpOwogCi0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSkKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgUE9TSVhfQUNMKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X2xlbikKIAkJbWVtY3B5KGxpc3QsIFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsIHNpemUpOwpAQCAtMzc3LDEyICszNzcsMTIgQEAKIH0KIAogc3RhdGljIHNpemVfdAotZXh0NF94YXR0cl9saXN0X2FjbF9kZWZhdWx0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X2xlbiwKLQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCitleHQ0X3hhdHRyX2xpc3RfYWNsX2RlZmF1bHQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9sZW4sCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCk7CiAKLQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpKQorCWlmICghdGVzdF9vcHQoZGVudHJ5LT5kX3NiLCBQT1NJWF9BQ0wpKQogCQlyZXR1cm4gMDsKIAlpZiAobGlzdCAmJiBzaXplIDw9IGxpc3RfbGVuKQogCQltZW1jcHkobGlzdCwgUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQsIHNpemUpOwpAQCAtMzkwLDE1ICszOTAsMTggQEAKIH0KIAogc3RhdGljIGludAotZXh0NF94YXR0cl9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorZXh0NF94YXR0cl9nZXRfYWNsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkgICBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCBlcnJvcjsKIAotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkpCisJaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFBPU0lYX0FDTCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWFjbCA9IGV4dDRfZ2V0X2FjbChpbm9kZSwgdHlwZSk7CisJYWNsID0gZXh0NF9nZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCWlmIChhY2wgPT0gTlVMTCkKQEAgLTQxMCwzMSArNDEzLDE2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWV4dDRfeGF0dHJfZ2V0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2V4dDRfeGF0dHJfc2V0X2FjbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAorCQkgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0NF94YXR0cl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4dDRfeGF0dHJfZ2V0X2FjbF9kZWZhdWx0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQ0X3hhdHRyX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4dDRfeGF0dHJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsCi0JCSAgIHNpemVfdCBzaXplKQoteworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yLCByZXRyaWVzID0gMDsKIAorCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCkBAIC00NjYsMzQgKzQ1NCwxOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludAotZXh0NF94YXR0cl9zZXRfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZXh0NF94YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIHZhbHVlLCBzaXplKTsKLX0KLQotc3RhdGljIGludAotZXh0NF94YXR0cl9zZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQotewotCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQ0X3hhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLCBzaXplKTsKLX0KLQogc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIgPSB7CiAJLnByZWZpeAk9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCisJLmZsYWdzCT0gQUNMX1RZUEVfQUNDRVNTLAogCS5saXN0CT0gZXh0NF94YXR0cl9saXN0X2FjbF9hY2Nlc3MsCi0JLmdldAk9IGV4dDRfeGF0dHJfZ2V0X2FjbF9hY2Nlc3MsCi0JLnNldAk9IGV4dDRfeGF0dHJfc2V0X2FjbF9hY2Nlc3MsCisJLmdldAk9IGV4dDRfeGF0dHJfZ2V0X2FjbCwKKwkuc2V0CT0gZXh0NF94YXR0cl9zZXRfYWNsLAogfTsKIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyID0gewogCS5wcmVmaXgJPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKKwkuZmxhZ3MJPSBBQ0xfVFlQRV9ERUZBVUxULAogCS5saXN0CT0gZXh0NF94YXR0cl9saXN0X2FjbF9kZWZhdWx0LAotCS5nZXQJPSBleHQ0X3hhdHRyX2dldF9hY2xfZGVmYXVsdCwKLQkuc2V0CT0gZXh0NF94YXR0cl9zZXRfYWNsX2RlZmF1bHQsCisJLmdldAk9IGV4dDRfeGF0dHJfZ2V0X2FjbCwKKwkuc2V0CT0gZXh0NF94YXR0cl9zZXRfYWNsLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYWIzMWU2NS4uNTZmOTI3MSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTcwNCw2ICs3MDQsMTAgQEAKIAlfX3UxNiBpX2V4dHJhX2lzaXplOwogCiAJc3BpbmxvY2tfdCBpX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2s7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJLyogcXVvdGEgc3BhY2UgcmVzZXJ2YXRpb24sIG1hbmFnZWQgaW50ZXJuYWxseSBieSBxdW90YSBjb2RlICovCisJcXNpemVfdCBpX3Jlc2VydmVkX3F1b3RhOworI2VuZGlmCiAKIAkvKiBjb21wbGV0ZWQgYXN5bmMgRElPcyB0aGF0IG1pZ2h0IG5lZWQgdW53cml0dGVuIGV4dGVudHMgaGFuZGxpbmcgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGlfYWlvX2Rpb19jb21wbGV0ZV9saXN0OwpAQCAtMTQzNSw3ICsxNDM5LDcgQEAKIGV4dGVybiBpbnQgZXh0NF9ibG9ja190cnVuY2F0ZV9wYWdlKGhhbmRsZV90ICpoYW5kbGUsCiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgZnJvbSk7CiBleHRlcm4gaW50IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Ci1leHRlcm4gcXNpemVfdCBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oc3RydWN0IGlub2RlICppbm9kZSk7CiAvKiBpb2N0bC5jICovCiBleHRlcm4gbG9uZyBleHQ0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggNTM1MmRiMS4uYWI4MDc5NiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTAwMywxNyArMTAwMywxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKKyNpZmRlZiBDT05GSUdfUVVPVEEKK3FzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsOwotCi0Jc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwotCXRvdGFsID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyArCi0JCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7Ci0Jc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0KLQlyZXR1cm4gKHRvdGFsIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCXJldHVybiAmRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9xdW90YTsKIH0KKyNlbmRpZgogLyoKICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG1ldGFkYXRhIGJsb2NrcyBuZWVkIHRvIHJlc2VydmUKICAqIHRvIGFsbG9jYXRlIEBibG9ja3MgZm9yIG5vbiBleHRlbnQgZmlsZSBiYXNlZCBmaWxlCkBAIC0xMDUxLDcgKzEwNDYsNyBAQAogc3RhdGljIHZvaWQgZXh0NF9kYV91cGRhdGVfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdXNlZCkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKLQlpbnQgdG90YWwsIG1kYiwgbWRiX2ZyZWU7CisJaW50IHRvdGFsLCBtZGIsIG1kYl9mcmVlLCBtZGJfY2xhaW0gPSAwOwogCiAJc3Bpbl9sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCS8qIHJlY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWJsb2NrcyBzdGlsbCBuZWVkIHRvIGJlIHJlc2VydmVkICovCkBAIC0xMDY0LDcgKzEwNTksOSBAQAogCiAJaWYgKG1kYl9mcmVlKSB7CiAJCS8qIEFjY291bnQgZm9yIGFsbG9jYXRlZCBtZXRhX2Jsb2NrcyAqLwotCQltZGJfZnJlZSAtPSBFWFQ0X0koaW5vZGUpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrczsKKwkJbWRiX2NsYWltID0gRVhUNF9JKGlub2RlKS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3M7CisJCUJVR19PTihtZGJfZnJlZSA8IG1kYl9jbGFpbSk7CisJCW1kYl9mcmVlIC09IG1kYl9jbGFpbTsKIAogCQkvKiB1cGRhdGUgZnMgZGlydHkgYmxvY2tzIGNvdW50ZXIgKi8KIAkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgbWRiX2ZyZWUpOwpAQCAtMTA3NSw4ICsxMDcyLDExIEBACiAJLyogdXBkYXRlIHBlci1pbm9kZSByZXNlcnZhdGlvbnMgKi8KIAlCVUdfT04odXNlZCAgPiBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKIAlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzIC09IHVzZWQ7CisJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgdXNlZCArIG1kYl9jbGFpbSk7CiAJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAKKwl2ZnNfZHFfY2xhaW1fYmxvY2soaW5vZGUsIHVzZWQgKyBtZGJfY2xhaW0pOworCiAJLyoKIAkgKiBmcmVlIHRob3NlIG92ZXItYm9va2luZyBxdW90YSBmb3IgbWV0YWRhdGEgYmxvY2tzCiAJICovCkBAIC0xODE2LDE5ICsxODE2LDE3IEBACiAKIAltZF9uZWVkZWQgPSBtZGJsb2NrcyAtIEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CiAJdG90YWwgPSBtZF9uZWVkZWQgKyBucmJsb2NrczsKKwlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAogCS8qCiAJICogTWFrZSBxdW90YSByZXNlcnZhdGlvbiBoZXJlIHRvIHByZXZlbnQgcXVvdGEgb3ZlcmZsb3cKIAkgKiBsYXRlci4gUmVhbCBxdW90YSBhY2NvdW50aW5nIGlzIGRvbmUgYXQgcGFnZXMgd3JpdGVvdXQKIAkgKiB0aW1lLgogCSAqLwotCWlmICh2ZnNfZHFfcmVzZXJ2ZV9ibG9jayhpbm9kZSwgdG90YWwpKSB7Ci0JCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCWlmICh2ZnNfZHFfcmVzZXJ2ZV9ibG9jayhpbm9kZSwgdG90YWwpKQogCQlyZXR1cm4gLUVEUVVPVDsKLQl9CiAKIAlpZiAoZXh0NF9jbGFpbV9mcmVlX2Jsb2NrcyhzYmksIHRvdGFsKSkgewotCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKIAkJaWYgKGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpIHsKIAkJCXlpZWxkKCk7CkBAIC0xODM2LDEwICsxODM0LDExIEBACiAJCX0KIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQorCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICs9IG5yYmxvY2tzOwotCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSBtZGJsb2NrczsKLQorCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgKz0gbWRfbmVlZGVkOwogCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCiAJcmV0dXJuIDA7ICAgICAgIC8qIHN1Y2Nlc3MgKi8KIH0KIApAQCAtNDc5NCw2ICs0NzkzLDkgQEAKIAkJCSgoX191NjQpbGUxNl90b19jcHUocmF3X2lub2RlLT5pX2ZpbGVfYWNsX2hpZ2gpKSA8PCAzMjsKIAlpbm9kZS0+aV9zaXplID0gZXh0NF9pc2l6ZShyYXdfaW5vZGUpOwogCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwllaS0+aV9yZXNlcnZlZF9xdW90YSA9IDA7CisjZW5kaWYKIAlpbm9kZS0+aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2dlbmVyYXRpb24pOwogCWVpLT5pX2Jsb2NrX2dyb3VwID0gaWxvYy5ibG9ja19ncm91cDsKIAllaS0+aV9sYXN0X2FsbG9jX2dyb3VwID0gfjA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGMxZTE5ZDUuLmQzNGFmYWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yNzU1LDEyICsyNzU1LDYgQEAKIAlpZiAoIShhYy0+YWNfZmxhZ3MgJiBFWFQ0X01CX0RFTEFMTE9DX1JFU0VSVkVEKSkKIAkJLyogcmVsZWFzZSBhbGwgdGhlIHJlc2VydmVkIGJsb2NrcyBpZiBub24gZGVsYWxsb2MgKi8KIAkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgcmVzZXJ2X2Jsa3MpOwotCWVsc2UgewotCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLAotCQkJCQkJYWMtPmFjX2JfZXguZmVfbGVuKTsKLQkJLyogY29udmVydCByZXNlcnZlZCBxdW90YSBibG9ja3MgdG8gcmVhbCBxdW90YSBibG9ja3MgKi8KLQkJdmZzX2RxX2NsYWltX2Jsb2NrKGFjLT5hY19pbm9kZSwgYWMtPmFjX2JfZXguZmVfbGVuKTsKLQl9CiAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLApAQCAtMzk1NSw3ICszOTQ5LDcgQEAKIAkgKiBwZXIgY3B1IGxvY2FsaXR5IGdyb3VwIGlzIHRvIHJlZHVjZSB0aGUgY29udGVudGlvbiBiZXR3ZWVuIGJsb2NrCiAJICogcmVxdWVzdCBmcm9tIG11bHRpcGxlIENQVXMuCiAJICovCi0JYWMtPmFjX2xnID0gcGVyX2NwdV9wdHIoc2JpLT5zX2xvY2FsaXR5X2dyb3VwcywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJYWMtPmFjX2xnID0gX190aGlzX2NwdV9wdHIoc2JpLT5zX2xvY2FsaXR5X2dyb3Vwcyk7CiAKIAkvKiB3ZSdyZSBnb2luZyB0byB1c2UgZ3JvdXAgYWxsb2NhdGlvbiAqLwogCWFjLT5hY19mbGFncyB8PSBFWFQ0X01CX0hJTlRfR1JPVVBfQUxMT0M7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggNzY4YzExMS4uNmVkOWFhOSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNzA0LDYgKzcwNCw5IEBACiAJZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzID0gMDsKIAllaS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmKGVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spKTsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwllaS0+aV9yZXNlcnZlZF9xdW90YSA9IDA7CisjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KTsKIAllaS0+Y3VyX2Fpb19kaW8gPSBOVUxMOwogCWVpLT5pX3N5bmNfdGlkID0gMDsKQEAgLTEwMTQsNyArMTAxNyw5IEBACiAJLnJlc2VydmVfc3BhY2UJPSBkcXVvdF9yZXNlcnZlX3NwYWNlLAogCS5jbGFpbV9zcGFjZQk9IGRxdW90X2NsYWltX3NwYWNlLAogCS5yZWxlYXNlX3Jzdgk9IGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2UsCisjaWZkZWYgQ09ORklHX1FVT1RBCiAJLmdldF9yZXNlcnZlZF9zcGFjZSA9IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlLAorI2VuZGlmCiAJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCiAJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAogCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKQEAgLTIxMzcsMTEgKzIxNDIsOCBAQAogewogCWNoYXIgKmVuZHA7CiAKLQl3aGlsZSAoKmJ1ZiAmJiBpc3NwYWNlKCpidWYpKQotCQlidWYrKzsKLQkqdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKLQl3aGlsZSAoKmVuZHAgJiYgaXNzcGFjZSgqZW5kcCkpCi0JCWVuZHArKzsKKwkqdmFsdWUgPSBzaW1wbGVfc3RydG91bChza2lwX3NwYWNlcyhidWYpLCAmZW5kcCwgMCk7CisJZW5kcCA9IHNraXBfc3BhY2VzKGVuZHApOwogCWlmICgqZW5kcCB8fCAqdmFsdWUgPiBtYXgpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTEwYmY5YS4uODMyMThiZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCisrKyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtOTIsNyArOTIsNyBAQAogCQkJCQkJIHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqKik7CiBzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JlaGFzaChzdHJ1Y3QgZXh0NF94YXR0cl9oZWFkZXIgKiwKIAkJCSAgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICopOwotc3RhdGljIGludCBleHQ0X3hhdHRyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmZmVyLAorc3RhdGljIGludCBleHQ0X3hhdHRyX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsCiAJCQkgICBzaXplX3QgYnVmZmVyX3NpemUpOwogCiBzdGF0aWMgc3RydWN0IG1iX2NhY2hlICpleHQ0X3hhdHRyX2NhY2hlOwpAQCAtMTQwLDcgKzE0MCw3IEBACiBzc2l6ZV90CiBleHQ0X2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7Ci0JcmV0dXJuIGV4dDRfeGF0dHJfbGlzdChkZW50cnktPmRfaW5vZGUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGV4dDRfeGF0dHJfbGlzdChkZW50cnksIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMyNSw3ICszMjUsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQ0X3hhdHRyX2xpc3RfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksCitleHQ0X3hhdHRyX2xpc3RfZW50cmllcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwKIAkJCWNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQogewogCXNpemVfdCByZXN0ID0gYnVmZmVyX3NpemU7CkBAIC0zMzUsOSArMzM1LDEwIEBACiAJCQlleHQ0X3hhdHRyX2hhbmRsZXIoZW50cnktPmVfbmFtZV9pbmRleCk7CiAKIAkJaWYgKGhhbmRsZXIpIHsKLQkJCXNpemVfdCBzaXplID0gaGFuZGxlci0+bGlzdChpbm9kZSwgYnVmZmVyLCByZXN0LAorCQkJc2l6ZV90IHNpemUgPSBoYW5kbGVyLT5saXN0KGRlbnRyeSwgYnVmZmVyLCByZXN0LAogCQkJCQkJICAgIGVudHJ5LT5lX25hbWUsCi0JCQkJCQkgICAgZW50cnktPmVfbmFtZV9sZW4pOworCQkJCQkJICAgIGVudHJ5LT5lX25hbWVfbGVuLAorCQkJCQkJICAgIGhhbmRsZXItPmZsYWdzKTsKIAkJCWlmIChidWZmZXIpIHsKIAkJCQlpZiAoc2l6ZSA+IHJlc3QpCiAJCQkJCXJldHVybiAtRVJBTkdFOwpAQCAtMzUwLDggKzM1MSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWV4dDRfeGF0dHJfYmxvY2tfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKK2V4dDRfeGF0dHJfYmxvY2tfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJaW50IGVycm9yOwogCkBAIC0zNzYsNyArMzc4LDcgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAlleHQ0X3hhdHRyX2NhY2hlX2luc2VydChiaCk7Ci0JZXJyb3IgPSBleHQ0X3hhdHRyX2xpc3RfZW50cmllcyhpbm9kZSwgQkZJUlNUKGJoKSwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisJZXJyb3IgPSBleHQ0X3hhdHRyX2xpc3RfZW50cmllcyhkZW50cnksIEJGSVJTVChiaCksIGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCiBjbGVhbnVwOgogCWJyZWxzZShiaCk7CkBAIC0zODUsOCArMzg3LDkgQEAKIH0KIAogc3RhdGljIGludAotZXh0NF94YXR0cl9pYm9keV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQorZXh0NF94YXR0cl9pYm9keV9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjsKIAlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKQEAgLTQwNCw3ICs0MDcsNyBAQAogCWVycm9yID0gZXh0NF94YXR0cl9jaGVja19uYW1lcyhJRklSU1QoaGVhZGVyKSwgZW5kKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gY2xlYW51cDsKLQllcnJvciA9IGV4dDRfeGF0dHJfbGlzdF9lbnRyaWVzKGlub2RlLCBJRklSU1QoaGVhZGVyKSwKKwllcnJvciA9IGV4dDRfeGF0dHJfbGlzdF9lbnRyaWVzKGRlbnRyeSwgSUZJUlNUKGhlYWRlciksCiAJCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCiBjbGVhbnVwOgpAQCAtNDIzLDEyICs0MjYsMTIgQEAKICAqIHVzZWQgLyByZXF1aXJlZCBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50Ci1leHQ0X3hhdHRyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCitleHQ0X3hhdHRyX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKIHsKIAlpbnQgaV9lcnJvciwgYl9lcnJvcjsKIAotCWRvd25fcmVhZCgmRVhUNF9JKGlub2RlKS0+eGF0dHJfc2VtKTsKLQlpX2Vycm9yID0gZXh0NF94YXR0cl9pYm9keV9saXN0KGlub2RlLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwlkb3duX3JlYWQoJkVYVDRfSShkZW50cnktPmRfaW5vZGUpLT54YXR0cl9zZW0pOworCWlfZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2xpc3QoZGVudHJ5LCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAlpZiAoaV9lcnJvciA8IDApIHsKIAkJYl9lcnJvciA9IDA7CiAJfSBlbHNlIHsKQEAgLTQzNiwxMSArNDM5LDExIEBACiAJCQlidWZmZXIgKz0gaV9lcnJvcjsKIAkJCWJ1ZmZlcl9zaXplIC09IGlfZXJyb3I7CiAJCX0KLQkJYl9lcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfbGlzdChpbm9kZSwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisJCWJfZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX2xpc3QoZGVudHJ5LCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAkJaWYgKGJfZXJyb3IgPCAwKQogCQkJaV9lcnJvciA9IDA7CiAJfQotCXVwX3JlYWQoJkVYVDRfSShpbm9kZSktPnhhdHRyX3NlbSk7CisJdXBfcmVhZCgmRVhUNF9JKGRlbnRyeS0+ZF9pbm9kZSktPnhhdHRyX3NlbSk7CiAJcmV0dXJuIGlfZXJyb3IgKyBiX2Vycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggY2E1Zjg5Zi4uOTgzYzI1MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jCisrKyBiL2ZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYwpAQCAtMTIsOCArMTIsOCBAQAogI2luY2x1ZGUgInhhdHRyLmgiCiAKIHN0YXRpYyBzaXplX3QKLWV4dDRfeGF0dHJfc2VjdXJpdHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAotCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK2V4dDRfeGF0dHJfc2VjdXJpdHlfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJY29uc3Qgc2l6ZV90IHByZWZpeF9sZW4gPSBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKS0xOwogCWNvbnN0IHNpemVfdCB0b3RhbF9sZW4gPSBwcmVmaXhfbGVuICsgbmFtZV9sZW4gKyAxOwpAQCAtMjgsMjMgKzI4LDIzIEBACiB9CiAKIHN0YXRpYyBpbnQKLWV4dDRfeGF0dHJfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorZXh0NF94YXR0cl9zZWN1cml0eV9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDRfeGF0dHJfZ2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLCBuYW1lLAotCQkJICAgICAgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gZXh0NF94YXR0cl9nZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLAorCQkJICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotZXh0NF94YXR0cl9zZWN1cml0eV9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorZXh0NF94YXR0cl9zZWN1cml0eV9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLCBuYW1lLAotCQkJICAgICAgdmFsdWUsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gZXh0NF94YXR0cl9zZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLAorCQkJICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jCmluZGV4IGFjMWE1MmMuLjE1YjUwZWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jCisrKyBiL2ZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jCkBAIC0xNCw4ICsxNCw4IEBACiAjaW5jbHVkZSAieGF0dHIuaCIKIAogc3RhdGljIHNpemVfdAotZXh0NF94YXR0cl90cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK2V4dDRfeGF0dHJfdHJ1c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IFhBVFRSX1RSVVNURURfUFJFRklYX0xFTjsKIAljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKQEAgLTMyLDIzICszMiwyMyBAQAogfQogCiBzdGF0aWMgaW50Ci1leHQ0X3hhdHRyX3RydXN0ZWRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorZXh0NF94YXR0cl90cnVzdGVkX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKKwkJc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBleHQ0X3hhdHRyX2dldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELCBuYW1lLAotCQkJICAgICAgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gZXh0NF94YXR0cl9nZXQoZGVudHJ5LT5kX2lub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1RSVVNURUQsCisJCQkgICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwogfQogCiBzdGF0aWMgaW50Ci1leHQ0X3hhdHRyX3RydXN0ZWRfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK2V4dDRfeGF0dHJfdHJ1c3RlZF9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1RSVVNURUQsIG5hbWUsCi0JCQkgICAgICB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBleHQ0X3hhdHRyX3NldChkZW50cnktPmRfaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfVFJVU1RFRCwKKwkJCSAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CiB9CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyID0gewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0cl91c2VyLmMgYi9mcy9leHQ0L3hhdHRyX3VzZXIuYwppbmRleCBkOTFhYTYxLi5jNGNlMDU3IDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyX3VzZXIuYworKysgYi9mcy9leHQ0L3hhdHRyX3VzZXIuYwpAQCAtMTMsMTMgKzEzLDEzIEBACiAjaW5jbHVkZSAieGF0dHIuaCIKIAogc3RhdGljIHNpemVfdAotZXh0NF94YXR0cl91c2VyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCitleHQ0X3hhdHRyX3VzZXJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IFhBVFRSX1VTRVJfUFJFRklYX0xFTjsKIAljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKIAotCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIFhBVFRSX1VTRVIpKQorCWlmICghdGVzdF9vcHQoZGVudHJ5LT5kX3NiLCBYQVRUUl9VU0VSKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAobGlzdCAmJiB0b3RhbF9sZW4gPD0gbGlzdF9zaXplKSB7CkBAIC0zMSwyNiArMzEsMjcgQEAKIH0KIAogc3RhdGljIGludAotZXh0NF94YXR0cl91c2VyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK2V4dDRfeGF0dHJfdXNlcl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCF0ZXN0X29wdChpbm9kZS0+aV9zYiwgWEFUVFJfVVNFUikpCisJaWYgKCF0ZXN0X29wdChkZW50cnktPmRfc2IsIFhBVFRSX1VTRVIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGV4dDRfeGF0dHJfZ2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1VTRVIsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGV4dDRfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLAorCQkJICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotZXh0NF94YXR0cl91c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitleHQ0X3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBYQVRUUl9VU0VSKSkKKwlpZiAoIXRlc3Rfb3B0KGRlbnRyeS0+ZF9zYiwgWEFUVFJfVVNFUikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfVVNFUiwgbmFtZSwKLQkJCSAgICAgIHZhbHVlLCBzaXplLCBmbGFncyk7CisJcmV0dXJuIGV4dDRfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLAorCQkJICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXIgPSB7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmgKaW5kZXggN2RiMDk3OS4uZTZlZmRmYSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdC5oCisrKyBiL2ZzL2ZhdC9mYXQuaApAQCAtNDQsNyArNDQsOCBAQAogCQkgbm9jYXNlOjEsCSAgLyogRG9lcyB0aGlzIG5lZWQgY2FzZSBjb252ZXJzaW9uPyAwPW5lZWQgY2FzZSBjb252ZXJzaW9uKi8KIAkJIHVzZWZyZWU6MSwJICAvKiBVc2UgZnJlZV9jbHVzdGVycyBmb3IgRkFUMzIgKi8KIAkJIHR6X3V0YzoxLAkgIC8qIEZpbGVzeXN0ZW0gdGltZXN0YW1wcyBhcmUgaW4gVVRDICovCi0JCSByb2RpcjoxOwkgIC8qIGFsbG93IEFUVFJfUk8gZm9yIGRpcmVjdG9yeSAqLworCQkgcm9kaXI6MSwJICAvKiBhbGxvdyBBVFRSX1JPIGZvciBkaXJlY3RvcnkgKi8KKwkJIGRpc2NhcmQ6MTsJICAvKiBJc3N1ZSBkaXNjYXJkIHJlcXVlc3RzIG9uIGRlbGV0aW9ucyAqLwogfTsKIAogI2RlZmluZSBGQVRfSEFTSF9CSVRTCTgKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXRlbnQuYyBiL2ZzL2ZhdC9mYXRlbnQuYwppbmRleCBhODEwMzc3Li44MTE4NGQzIDEwMDY0NAotLS0gYS9mcy9mYXQvZmF0ZW50LmMKKysrIGIvZnMvZmF0L2ZhdGVudC5jCkBAIC01NjYsMTYgKzU2NiwyMSBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCi0JCS8qIAotCQkgKiBJc3N1ZSBkaXNjYXJkIGZvciB0aGUgc2VjdG9ycyB3ZSBubyBsb25nZXIgY2FyZSBhYm91dCwKLQkJICogYmF0Y2hpbmcgY29udGlndW91cyBjbHVzdGVycyBpbnRvIG9uZSByZXF1ZXN0Ci0JCSAqLwotCQlpZiAoY2x1c3RlciAhPSBmYXRlbnQuZW50cnkgKyAxKSB7Ci0JCQlpbnQgbnJfY2x1cyA9IGZhdGVudC5lbnRyeSAtIGZpcnN0X2NsICsgMTsKKwkJaWYgKHNiaS0+b3B0aW9ucy5kaXNjYXJkKSB7CisJCQkvKgorCQkJICogSXNzdWUgZGlzY2FyZCBmb3IgdGhlIHNlY3RvcnMgd2Ugbm8gbG9uZ2VyCisJCQkgKiBjYXJlIGFib3V0LCBiYXRjaGluZyBjb250aWd1b3VzIGNsdXN0ZXJzCisJCQkgKiBpbnRvIG9uZSByZXF1ZXN0CisJCQkgKi8KKwkJCWlmIChjbHVzdGVyICE9IGZhdGVudC5lbnRyeSArIDEpIHsKKwkJCQlpbnQgbnJfY2x1cyA9IGZhdGVudC5lbnRyeSAtIGZpcnN0X2NsICsgMTsKIAotCQkJc2JfaXNzdWVfZGlzY2FyZChzYiwgZmF0X2NsdXNfdG9fYmxrbnIoc2JpLCBmaXJzdF9jbCksCi0JCQkJCSBucl9jbHVzICogc2JpLT5zZWNfcGVyX2NsdXMpOwotCQkJZmlyc3RfY2wgPSBjbHVzdGVyOworCQkJCXNiX2lzc3VlX2Rpc2NhcmQoc2IsCisJCQkJCWZhdF9jbHVzX3RvX2Jsa25yKHNiaSwgZmlyc3RfY2wpLAorCQkJCQlucl9jbHVzICogc2JpLT5zZWNfcGVyX2NsdXMpOworCisJCQkJZmlyc3RfY2wgPSBjbHVzdGVyOworCQkJfQogCQl9CiAKIAkJb3BzLT5lbnRfcHV0KCZmYXRlbnQsIEZBVF9FTlRfRlJFRSk7CmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IDc2Yjc5NjEuLjE0ZGE1MzAgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC04NTgsNiArODU4LDggQEAKIAkJc2VxX3B1dHMobSwgIixlcnJvcnM9cGFuaWMiKTsKIAllbHNlCiAJCXNlcV9wdXRzKG0sICIsZXJyb3JzPXJlbW91bnQtcm8iKTsKKwlpZiAob3B0cy0+ZGlzY2FyZCkKKwkJc2VxX3B1dHMobSwgIixkaXNjYXJkIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg3MSw3ICs4NzMsNyBAQAogCU9wdF9zaG9ydG5hbWVfd2lubnQsIE9wdF9zaG9ydG5hbWVfbWl4ZWQsIE9wdF91dGY4X25vLCBPcHRfdXRmOF95ZXMsCiAJT3B0X3VuaV94bF9ubywgT3B0X3VuaV94bF95ZXMsIE9wdF9ub251bXRhaWxfbm8sIE9wdF9ub251bXRhaWxfeWVzLAogCU9wdF9vYnNvbGF0ZSwgT3B0X2ZsdXNoLCBPcHRfdHpfdXRjLCBPcHRfcm9kaXIsIE9wdF9lcnJfY29udCwKLQlPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLCBPcHRfZXJyLAorCU9wdF9lcnJfcGFuaWMsIE9wdF9lcnJfcm8sIE9wdF9kaXNjYXJkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgZmF0X3Rva2VucyA9IHsKQEAgLTg5OSw2ICs5MDEsNyBAQAogCXtPcHRfZXJyX2NvbnQsICJlcnJvcnM9Y29udGludWUifSwKIAl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAogCXtPcHRfZXJyX3JvLCAiZXJyb3JzPXJlbW91bnQtcm8ifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCiAJe09wdF9vYnNvbGF0ZSwgImNvbnY9YmluYXJ5In0sCiAJe09wdF9vYnNvbGF0ZSwgImNvbnY9dGV4dCJ9LAogCXtPcHRfb2Jzb2xhdGUsICJjb252PWF1dG8ifSwKQEAgLTExMzYsNiArMTEzOSw5IEBACiAJCWNhc2UgT3B0X3JvZGlyOgogCQkJb3B0cy0+cm9kaXIgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlvcHRzLT5kaXNjYXJkID0gMTsKKwkJCWJyZWFrOwogCiAJCS8qIG9ic29sZXRlIG1vdW50IG9wdGlvbnMgKi8KIAkJY2FzZSBPcHRfb2Jzb2xhdGU6CmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuYwppbmRleCAwZjU1ZjVjLi5kM2RhMDVmIDEwMDY0NAotLS0gYS9mcy9mYXQvbWlzYy5jCisrKyBiL2ZzL2ZhdC9taXNjLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlICJmYXQuaCIKIAogLyoKQEAgLTE1NywxMCArMTU4LDYgQEAKICNkZWZpbmUgU0VDU19QRVJfTUlOCTYwCiAjZGVmaW5lIFNFQ1NfUEVSX0hPVVIJKDYwICogNjApCiAjZGVmaW5lIFNFQ1NfUEVSX0RBWQkoU0VDU19QRVJfSE9VUiAqIDI0KQotI2RlZmluZSBVTklYX1NFQ1NfMTk4MAkzMTU1MzI4MDBMCi0jaWYgQklUU19QRVJfTE9ORyA9PSA2NAotI2RlZmluZSBVTklYX1NFQ1NfMjEwOAk0MzU0ODE5MjAwTAotI2VuZGlmCiAvKiBkYXlzIGJldHdlZW4gMS4xLjcwIGFuZCAxLjEuODAgKDIgbGVhcCBkYXlzKSAqLwogI2RlZmluZSBEQVlTX0RFTFRBCSgzNjUgKiAxMCArIDIpCiAvKiAxMjAgKDIxMDAgLSAxOTgwKSBpc24ndCBsZWFwIHllYXIgKi8KQEAgLTIxMyw1OCArMjEwLDM1IEBACiB2b2lkIGZhdF90aW1lX3VuaXgyZmF0KHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmksIHN0cnVjdCB0aW1lc3BlYyAqdHMsCiAJCSAgICAgICBfX2xlMTYgKnRpbWUsIF9fbGUxNiAqZGF0ZSwgdTggKnRpbWVfY3MpCiB7Ci0JdGltZV90IHNlY29uZCA9IHRzLT50dl9zZWM7Ci0JdGltZV90IGRheSwgbGVhcF9kYXksIG1vbnRoLCB5ZWFyOworCXN0cnVjdCB0bSB0bTsKKwl0aW1lX3RvX3RtKHRzLT50dl9zZWMsIHNiaS0+b3B0aW9ucy50el91dGMgPyAwIDoKKwkJICAgLXN5c190ei50el9taW51dGVzd2VzdCAqIDYwLCAmdG0pOwogCi0JaWYgKCFzYmktPm9wdGlvbnMudHpfdXRjKQotCQlzZWNvbmQgLT0gc3lzX3R6LnR6X21pbnV0ZXN3ZXN0ICogU0VDU19QRVJfTUlOOwotCi0JLyogSmFuIDEgR01UIDAwOjAwOjAwIDE5ODAuIEJ1dCB3aGF0IGFib3V0IGFub3RoZXIgdGltZSB6b25lPyAqLwotCWlmIChzZWNvbmQgPCBVTklYX1NFQ1NfMTk4MCkgeworCS8qICBGQVQgY2FuIG9ubHkgc3VwcG9ydCB5ZWFyIGJldHdlZW4gMTk4MCB0byAyMTA3ICovCisJaWYgKHRtLnRtX3llYXIgPCAxOTgwIC0gMTkwMCkgewogCQkqdGltZSA9IDA7CiAJCSpkYXRlID0gY3B1X3RvX2xlMTYoKDAgPDwgOSkgfCAoMSA8PCA1KSB8IDEpOwogCQlpZiAodGltZV9jcykKIAkJCSp0aW1lX2NzID0gMDsKIAkJcmV0dXJuOwogCX0KLSNpZiBCSVRTX1BFUl9MT05HID09IDY0Ci0JaWYgKHNlY29uZCA+PSBVTklYX1NFQ1NfMjEwOCkgeworCWlmICh0bS50bV95ZWFyID4gMjEwNyAtIDE5MDApIHsKIAkJKnRpbWUgPSBjcHVfdG9fbGUxNigoMjMgPDwgMTEpIHwgKDU5IDw8IDUpIHwgMjkpOwogCQkqZGF0ZSA9IGNwdV90b19sZTE2KCgxMjcgPDwgOSkgfCAoMTIgPDwgNSkgfCAzMSk7CiAJCWlmICh0aW1lX2NzKQogCQkJKnRpbWVfY3MgPSAxOTk7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKIAotCWRheSA9IHNlY29uZCAvIFNFQ1NfUEVSX0RBWSAtIERBWVNfREVMVEE7Ci0JeWVhciA9IGRheSAvIDM2NTsKLQlsZWFwX2RheSA9ICh5ZWFyICsgMykgLyA0OwotCWlmICh5ZWFyID4gWUVBUl8yMTAwKQkJLyogMjEwMCBpc24ndCBsZWFwIHllYXIgKi8KLQkJbGVhcF9kYXktLTsKLQlpZiAoeWVhciAqIDM2NSArIGxlYXBfZGF5ID4gZGF5KQotCQl5ZWFyLS07Ci0JbGVhcF9kYXkgPSAoeWVhciArIDMpIC8gNDsKLQlpZiAoeWVhciA+IFlFQVJfMjEwMCkJCS8qIDIxMDAgaXNuJ3QgbGVhcCB5ZWFyICovCi0JCWxlYXBfZGF5LS07Ci0JZGF5IC09IHllYXIgKiAzNjUgKyBsZWFwX2RheTsKKwkvKiBmcm9tIDE5MDAgLT4gZnJvbSAxOTgwICovCisJdG0udG1feWVhciAtPSA4MDsKKwkvKiAwfjExIC0+IDF+MTIgKi8KKwl0bS50bV9tb24rKzsKKwkvKiAwfjU5IC0+IDB+MjkoMnNlYyBjb3VudHMpICovCisJdG0udG1fc2VjID4+PSAxOwogCi0JaWYgKElTX0xFQVBfWUVBUih5ZWFyKSAmJiBkYXkgPT0gZGF5c19pbl95ZWFyWzNdKSB7Ci0JCW1vbnRoID0gMjsKLQl9IGVsc2UgewotCQlpZiAoSVNfTEVBUF9ZRUFSKHllYXIpICYmIGRheSA+IGRheXNfaW5feWVhclszXSkKLQkJCWRheS0tOwotCQlmb3IgKG1vbnRoID0gMTsgbW9udGggPCAxMjsgbW9udGgrKykgewotCQkJaWYgKGRheXNfaW5feWVhclttb250aCArIDFdID4gZGF5KQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCWRheSAtPSBkYXlzX2luX3llYXJbbW9udGhdOwotCi0JKnRpbWUgPSBjcHVfdG9fbGUxNigoKHNlY29uZCAvIFNFQ1NfUEVSX0hPVVIpICUgMjQpIDw8IDExCi0JCQkgICAgfCAoKHNlY29uZCAvIFNFQ1NfUEVSX01JTikgJSA2MCkgPDwgNQotCQkJICAgIHwgKHNlY29uZCAlIFNFQ1NfUEVSX01JTikgPj4gMSk7Ci0JKmRhdGUgPSBjcHVfdG9fbGUxNigoeWVhciA8PCA5KSB8IChtb250aCA8PCA1KSB8IChkYXkgKyAxKSk7CisJKnRpbWUgPSBjcHVfdG9fbGUxNih0bS50bV9ob3VyIDw8IDExIHwgdG0udG1fbWluIDw8IDUgfCB0bS50bV9zZWMpOworCSpkYXRlID0gY3B1X3RvX2xlMTYodG0udG1feWVhciA8PCA5IHwgdG0udG1fbW9uIDw8IDUgfCB0bS50bV9tZGF5KTsKIAlpZiAodGltZV9jcykKIAkJKnRpbWVfY3MgPSAodHMtPnR2X3NlYyAmIDEpICogMTAwICsgdHMtPnR2X25zZWMgLyAxMDAwMDAwMDsKIH0KQEAgLTI4NSw0ICsyNTksMyBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQotCmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggNGJlZjRjMC4uNjk2NTJjNSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMjEsOSArMjEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAvKiBzeXNjdGwgdHVuYWJsZXMuLi4gKi8KIHN0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCBmaWxlc19zdGF0ID0gewogCS5tYXhfZmlsZXMgPSBOUl9GSUxFCkBAIC0xNDcsOCArMTUwLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotRVhQT1JUX1NZTUJPTChnZXRfZW1wdHlfZmlscCk7Ci0KIC8qKgogICogYWxsb2NfZmlsZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgJ3N0cnVjdCBmaWxlJwogICogQG1udDogdGhlIHZmc21vdW50IG9uIHdoaWNoIHRoZSBmaWxlIHdpbGwgcmVzaWRlCkBAIC0xNjQsOCArMTY1LDggQEAKICAqIElmIGFsbCB0aGUgY2FsbGVycyBvZiBpbml0X2ZpbGUoKSBhcmUgZWxpbWluYXRlZCwgaXRzCiAgKiBjb2RlIHNob3VsZCBiZSBtb3ZlZCBpbnRvIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0cnVjdCBmaWxlICphbGxvY19maWxlKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCWZtb2RlX3QgbW9kZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wKQorc3RydWN0IGZpbGUgKmFsbG9jX2ZpbGUoc3RydWN0IHBhdGggKnBhdGgsIGZtb2RlX3QgbW9kZSwKKwkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wKQogewogCXN0cnVjdCBmaWxlICpmaWxlOwogCkBAIC0xNzMsMzUgKzE3NCw4IEBACiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gTlVMTDsKIAotCWluaXRfZmlsZShmaWxlLCBtbnQsIGRlbnRyeSwgbW9kZSwgZm9wKTsKLQlyZXR1cm4gZmlsZTsKLX0KLUVYUE9SVF9TWU1CT0woYWxsb2NfZmlsZSk7Ci0KLS8qKgotICogaW5pdF9maWxlIC0gaW5pdGlhbGl6ZSBhICdzdHJ1Y3QgZmlsZScKLSAqIEBmaWxlOiB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgJ3N0cnVjdCBmaWxlJyB0byBpbml0aWFsaXplZAotICogQG1udDogdGhlIHZmc21vdW50IG9uIHdoaWNoIHRoZSBmaWxlIHJlc2lkZXMKLSAqIEBkZW50cnk6IHRoZSBkZW50cnkgcmVwcmVzZW50aW5nIHRoaXMgZmlsZQotICogQG1vZGU6IHRoZSBtb2RlIHRoZSBmaWxlIGlzIG9wZW5lZCB3aXRoCi0gKiBAZm9wOiB0aGUgJ3N0cnVjdCBmaWxlX29wZXJhdGlvbnMnIGZvciB0aGlzIGZpbGUKLSAqCi0gKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIG1lbWJlcnMgZGlyZWN0bHkuICBEb2luZyBzbwotICogYXZvaWRzIG1ha2luZyBtaXN0YWtlcyBsaWtlIGZvcmdldHRpbmcgdGhlIG1udGdldCgpIG9yCi0gKiBmb3JnZXR0aW5nIHRvIHRha2UgYSB3cml0ZSBvbiB0aGUgbW50LgotICoKLSAqIE5vdGU6IFRoaXMgaXMgYSBjcmFwcHkgaW50ZXJmYWNlLiAgSXQgaXMgaGVyZSB0byBtYWtlCi0gKiBtZXJnaW5nIHdpdGggdGhlIGV4aXN0aW5nIHVzZXJzIG9mIGdldF9lbXB0eV9maWxwKCkKLSAqIHdobyBoYXZlIGNvbXBsZXggZmFpbHVyZSBsb2dpYyBlYXNpZXIuICBBbGwgdXNlcnMKLSAqIG9mIHRoaXMgc2hvdWxkIGJlIG1vdmluZyB0byBhbGxvY19maWxlKCkuCi0gKi8KLWludCBpbml0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JICAgZm1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3ApCi17Ci0JaW50IGVycm9yID0gMDsKLQlmaWxlLT5mX3BhdGguZGVudHJ5ID0gZGVudHJ5OwotCWZpbGUtPmZfcGF0aC5tbnQgPSBtbnRnZXQobW50KTsKLQlmaWxlLT5mX21hcHBpbmcgPSBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKwlmaWxlLT5mX3BhdGggPSAqcGF0aDsKKwlmaWxlLT5mX21hcHBpbmcgPSBwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKIAlmaWxlLT5mX21vZGUgPSBtb2RlOwogCWZpbGUtPmZfb3AgPSBmb3A7CiAKQEAgLTIxMSwxNCArMTg1LDE0IEBACiAJICogdmlzaWJsZS4gIFdlIGRvIHRoaXMgZm9yIGNvbnNpc3RlbmN5LCBhbmQgc28KIAkgKiB0aGF0IHdlIGNhbiBkbyBkZWJ1Z2dpbmcgY2hlY2tzIGF0IF9fZnB1dCgpCiAJICovCi0JaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmICFzcGVjaWFsX2ZpbGUoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CisJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmICFzcGVjaWFsX2ZpbGUocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CiAJCWZpbGVfdGFrZV93cml0ZShmaWxlKTsKLQkJZXJyb3IgPSBtbnRfY2xvbmVfd3JpdGUobW50KTsKLQkJV0FSTl9PTihlcnJvcik7CisJCVdBUk5fT04obW50X2Nsb25lX3dyaXRlKHBhdGgtPm1udCkpOwogCX0KLQlyZXR1cm4gZXJyb3I7CisJaW1hX2NvdW50c19nZXQoZmlsZSk7CisJcmV0dXJuIGZpbGU7CiB9Ci1FWFBPUlRfU1lNQk9MKGluaXRfZmlsZSk7CitFWFBPUlRfU1lNQk9MKGFsbG9jX2ZpbGUpOwogCiB2b2lkIGZwdXQoc3RydWN0IGZpbGUgKmZpbGUpCiB7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29iamVjdC1saXN0LmMgYi9mcy9mc2NhY2hlL29iamVjdC1saXN0LmMKaW5kZXggZTU5MDI0Mi4uMzIyMWEwYyAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9vYmplY3QtbGlzdC5jCisrKyBiL2ZzL2ZzY2FjaGUvb2JqZWN0LWxpc3QuYwpAQCAtOTEsNyArOTEsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpmc2NhY2hlX29iamxpc3RfbG9va3VwKGxvZmZfdCAqX3BvcykKIHsKLQlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBvYmosICpvYmosICptaW5vYmogPSBOVUxMOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqcG9iaiwgKm9iaiA9IE5VTEwsICptaW5vYmogPSBOVUxMOwogCXN0cnVjdCByYl9ub2RlICpwOwogCXVuc2lnbmVkIGxvbmcgcG9zOwogCmRpZmYgLS1naXQgYS9mcy9nZW5lcmljX2FjbC5jIGIvZnMvZ2VuZXJpY19hY2wuYwppbmRleCBlMGI1M2FhLi41NTQ1ODAzIDEwMDY0NAotLS0gYS9mcy9nZW5lcmljX2FjbC5jCisrKyBiL2ZzL2dlbmVyaWNfYWNsLmMKQEAgLTEsNjIgKzEsNTggQEAKIC8qCi0gKiBmcy9nZW5lcmljX2FjbC5jCi0gKgogICogKEMpIDIwMDUgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCisgKgorICogR2VuZXJpYyBBQ0wgc3VwcG9ydCBmb3IgaW4tbWVtb3J5IGZpbGVzeXN0ZW1zLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19hY2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2xfeGF0dHIuaD4KIAotLyoqCi0gKiBnZW5lcmljX2FjbF9saXN0ICAtICBHZW5lcmljIHhhdHRyX2hhbmRsZXItPmxpc3QoKSBvcGVyYXRpb24KLSAqIEBvcHM6CUZpbGVzeXN0ZW0gc3BlY2lmaWMgZ2V0YWNsIGFuZCBzZXRhY2wgY2FsbGJhY2tzCi0gKi8KLXNpemVfdAotZ2VuZXJpY19hY2xfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqb3BzLAotCQkgaW50IHR5cGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUpCisKK3N0YXRpYyBzaXplX3QKK2dlbmVyaWNfYWNsX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQljb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKLQljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnhuYW1lOwogCXNpemVfdCBzaXplOwogCi0JYWNsID0gb3BzLT5nZXRhY2woaW5vZGUsIHR5cGUpOworCWFjbCA9IGdldF9jYWNoZWRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSk7CiAJaWYgKCFhY2wpCiAJCXJldHVybiAwOwogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CiAKLQlzd2l0Y2godHlwZSkgewotCQljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKLQkJCW5hbWUgPSBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgotCQkJbmFtZSA9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgorCQl4bmFtZSA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJeG5hbWUgPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CiAJfQotCXNpemUgPSBzdHJsZW4obmFtZSkgKyAxOworCXNpemUgPSBzdHJsZW4oeG5hbWUpICsgMTsKIAlpZiAobGlzdCAmJiBzaXplIDw9IGxpc3Rfc2l6ZSkKLQkJbWVtY3B5KGxpc3QsIG5hbWUsIHNpemUpOworCQltZW1jcHkobGlzdCwgeG5hbWUsIHNpemUpOwogCXJldHVybiBzaXplOwogfQogCi0vKioKLSAqIGdlbmVyaWNfYWNsX2dldCAgLSAgR2VuZXJpYyB4YXR0cl9oYW5kbGVyLT5nZXQoKSBvcGVyYXRpb24KLSAqIEBvcHM6CUZpbGVzeXN0ZW0gc3BlY2lmaWMgZ2V0YWNsIGFuZCBzZXRhY2wgY2FsbGJhY2tzCi0gKi8KLWludAotZ2VuZXJpY19hY2xfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICpvcHMsCi0JCWludCB0eXBlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc3RhdGljIGludAorZ2VuZXJpY19hY2xfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkgICAgIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwogCi0JYWNsID0gb3BzLT5nZXRhY2woaW5vZGUsIHR5cGUpOworCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYWNsID0gZ2V0X2NhY2hlZF9hY2woZGVudHJ5LT5kX2lub2RlLCB0eXBlKTsKIAlpZiAoIWFjbCkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCWVycm9yID0gcG9zaXhfYWNsX3RvX3hhdHRyKGFjbCwgYnVmZmVyLCBzaXplKTsKQEAgLTY1LDE3ICs2MSwxNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyoqCi0gKiBnZW5lcmljX2FjbF9zZXQgIC0gIEdlbmVyaWMgeGF0dHJfaGFuZGxlci0+c2V0KCkgb3BlcmF0aW9uCi0gKiBAb3BzOglGaWxlc3lzdGVtIHNwZWNpZmljIGdldGFjbCBhbmQgc2V0YWNsIGNhbGxiYWNrcwotICovCi1pbnQKLWdlbmVyaWNfYWNsX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqb3BzLAotCQlpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQorc3RhdGljIGludAorZ2VuZXJpY19hY2xfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCisJCSAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMOwogCWludCBlcnJvcjsKIAorCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQpAQCAtOTEsMjggKzg2LDI3IEBACiAJCWVycm9yID0gcG9zaXhfYWNsX3ZhbGlkKGFjbCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZmFpbGVkOwotCQlzd2l0Y2godHlwZSkgewotCQkJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6Ci0JCQkJbW9kZSA9IGlub2RlLT5pX21vZGU7Ci0JCQkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKLQkJCQlpZiAoZXJyb3IgPCAwKQotCQkJCQlnb3RvIGZhaWxlZDsKLQkJCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKLQkJCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwotCQkJCQlhY2wgPSBOVUxMOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgotCQkJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gZmFpbGVkOwotCQkJCX0KLQkJCQlicmVhazsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgorCQkJbW9kZSA9IGlub2RlLT5pX21vZGU7CisJCQllcnJvciA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJm1vZGUpOworCQkJaWYgKGVycm9yIDwgMCkKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCWlub2RlLT5pX21vZGUgPSBtb2RlOworCQkJaWYgKGVycm9yID09IDApIHsKKwkJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCQkJCWFjbCA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCQkJZXJyb3IgPSAtRUlOVkFMOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jb3BzLT5zZXRhY2woaW5vZGUsIHR5cGUsIGFjbCk7CisJc2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CiAJZXJyb3IgPSAwOwogZmFpbGVkOgogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CkBAIC0xMjEsMTQgKzExNSwxMiBAQAogCiAvKioKICAqIGdlbmVyaWNfYWNsX2luaXQgIC0gIFRha2UgY2FyZSBvZiBhY2wgaW5oZXJpdGFuY2UgYXQgQGlub2RlIGNyZWF0ZSB0aW1lCi0gKiBAb3BzOglGaWxlc3lzdGVtIHNwZWNpZmljIGdldGFjbCBhbmQgc2V0YWNsIGNhbGxiYWNrcwogICoKICAqIEZpbGVzIGNyZWF0ZWQgaW5zaWRlIGEgZGlyZWN0b3J5IHdpdGggYSBkZWZhdWx0IEFDTCBpbmhlcml0IHRoZQogICogZGlyZWN0b3J5J3MgZGVmYXVsdCBBQ0wuCiAgKi8KIGludAotZ2VuZXJpY19hY2xfaW5pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICpvcHMpCitnZW5lcmljX2FjbF9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CiAJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwpAQCAtMTM2LDcgKzEyOCw3IEBACiAKIAlpbm9kZS0+aV9tb2RlID0gbW9kZSAmIH5jdXJyZW50X3VtYXNrKCk7CiAJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpKQotCQlhY2wgPSBvcHMtPmdldGFjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOworCQlhY2wgPSBnZXRfY2FjaGVkX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwogCWlmIChhY2wpIHsKIAkJc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CiAKQEAgLTE0NSw3ICsxMzcsNyBAQAogCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJaWYgKCFjbG9uZSkKIAkJCQlnb3RvIGNsZWFudXA7Ci0JCQlvcHMtPnNldGFjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgY2xvbmUpOworCQkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGNsb25lKTsKIAkJCXBvc2l4X2FjbF9yZWxlYXNlKGNsb25lKTsKIAkJfQogCQljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9LRVJORUwpOwpAQCAtMTU2LDcgKzE0OCw3IEBACiAJCWlmIChlcnJvciA+PSAwKSB7CiAJCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJCWlmIChlcnJvciA+IDApCi0JCQkJb3BzLT5zZXRhY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgY2xvbmUpOworCQkJCXNldF9jYWNoZWRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKIAkJfQogCQlwb3NpeF9hY2xfcmVsZWFzZShjbG9uZSk7CiAJfQpAQCAtMTY5LDIwICsxNjEsMTkgQEAKIAogLyoqCiAgKiBnZW5lcmljX2FjbF9jaG1vZCAgLSAgY2hhbmdlIHRoZSBhY2Nlc3MgYWNsIG9mIEBpbm9kZSB1cG9uIGNobW9kKCkKLSAqIEBvcHM6CUZJbGVzeXN0ZW0gc3BlY2lmaWMgZ2V0YWNsIGFuZCBzZXRhY2wgY2FsbGJhY2tzCiAgKgogICogQSBjaG1vZCBhbHNvIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBvd25lciwgZ3JvdXAvbWFzaywgYW5kCiAgKiBvdGhlciBBQ0wgZW50cmllcy4KICAqLwogaW50Ci1nZW5lcmljX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqb3BzKQorZ2VuZXJpY19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wsICpjbG9uZTsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlhY2wgPSBvcHMtPmdldGFjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlhY2wgPSBnZXRfY2FjaGVkX2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKIAlpZiAoYWNsKSB7CiAJCWNsb25lID0gcG9zaXhfYWNsX2Nsb25lKGFjbCwgR0ZQX0tFUk5FTCk7CiAJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CkBAIC0xOTAsOCArMTgxLDM3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZXJyb3IgPSBwb3NpeF9hY2xfY2htb2RfbWFzcShjbG9uZSwgaW5vZGUtPmlfbW9kZSk7CiAJCWlmICghZXJyb3IpCi0JCQlvcHMtPnNldGFjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBjbG9uZSk7CisJCQlzZXRfY2FjaGVkX2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBjbG9uZSk7CiAJCXBvc2l4X2FjbF9yZWxlYXNlKGNsb25lKTsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQorCitpbnQKK2dlbmVyaWNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IGdldF9jYWNoZWRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCisJaWYgKGFjbCkgeworCQlpbnQgZXJyb3IgPSBwb3NpeF9hY2xfcGVybWlzc2lvbihpbm9kZSwgYWNsLCBtYXNrKTsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwlyZXR1cm4gLUVBR0FJTjsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2VuZXJpY19hY2xfYWNjZXNzX2hhbmRsZXIgPSB7CisJLnByZWZpeCA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCisJLmZsYWdzCT0gQUNMX1RZUEVfQUNDRVNTLAorCS5saXN0CT0gZ2VuZXJpY19hY2xfbGlzdCwKKwkuZ2V0CT0gZ2VuZXJpY19hY2xfZ2V0LAorCS5zZXQJPSBnZW5lcmljX2FjbF9zZXQsCit9OworCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciBnZW5lcmljX2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CisJLnByZWZpeCA9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULAorCS5mbGFncwk9IEFDTF9UWVBFX0RFRkFVTFQsCisJLmxpc3QJPSBnZW5lcmljX2FjbF9saXN0LAorCS5nZXQJPSBnZW5lcmljX2FjbF9nZXQsCisJLnNldAk9IGdlbmVyaWNfYWNsX3NldCwKK307CmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5jIGIvZnMvZ2ZzMi9hY2wuYwppbmRleCAzZWIxZWE4Li44N2VlMzA5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5jCisrKyBiL2ZzL2dmczIvYWNsLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWVycm9yID0gcG9zaXhfYWNsX3RvX3hhdHRyKGFjbCwgZGF0YSwgbGVuKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKLQllcnJvciA9IGdmczJfeGF0dHJfc2V0KGlub2RlLCBHRlMyX0VBVFlQRV9TWVMsIG5hbWUsIGRhdGEsIGxlbiwgMCk7CisJZXJyb3IgPSBfX2dmczJfeGF0dHJfc2V0KGlub2RlLCBuYW1lLCBkYXRhLCBsZW4sIDAsIEdGUzJfRUFUWVBFX1NZUyk7CiAJaWYgKCFlcnJvcikKIAkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CiBvdXQ6CkBAIC0yMzIsOSArMjMyLDEwIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl94YXR0cl9zeXN0ZW1fZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGdmczJfeGF0dHJfc3lzdGVtX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB4dHlwZSkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgdHlwZTsKIAlpbnQgZXJyb3I7CkBAIC0yNTUsOSArMjU2LDExIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGdmczJfeGF0dHJfc3lzdGVtX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9zeXN0ZW1fc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsCisJCQkJIGludCB4dHlwZSkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKIAlpbnQgZXJyb3IgPSAwLCB0eXBlOwpAQCAtMzE5LDcgKzMyMiw3IEBACiAJfQogCiBzZXRfYWNsOgotCWVycm9yID0gZ2ZzMl94YXR0cl9zZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1NZUywgbmFtZSwgdmFsdWUsIHNpemUsIDApOworCWVycm9yID0gX19nZnMyX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIDAsIEdGUzJfRUFUWVBFX1NZUyk7CiAJaWYgKCFlcnJvcikgewogCQlpZiAoYWNsKQogCQkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CkBAIC0zMzQsNiArMzM3LDcgQEAKIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zeXN0ZW1faGFuZGxlciA9IHsKIAkucHJlZml4ID0gWEFUVFJfU1lTVEVNX1BSRUZJWCwKKwkuZmxhZ3MgID0gR0ZTMl9FQVRZUEVfU1lTLAogCS5nZXQgICAgPSBnZnMyX3hhdHRyX3N5c3RlbV9nZXQsCiAJLnNldCAgICA9IGdmczJfeGF0dHJfc3lzdGVtX3NldCwKIH07CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggMjZiYTJhNC4uNmUyMjBmNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgKiBkaXJlY3RvcnkgZW50cnkgd2hlbiBnZnMyX2lub2RlX2xvb2t1cCgpIGlzIGludm9rZWQuIFBhcnQgb2YgdGhlIGNvZGUKICAqIHNlZ21lbnQgaW5zaWRlIGdmczJfaW5vZGVfbG9va3VwIGNvZGUgbmVlZHMgdG8gZ2V0IG1vdmVkIGFyb3VuZC4KICAqCi0gKiBDbGVhbiB1cCBJX0xPQ0sgYW5kIElfTkVXIGFzIHdlbGwuCisgKiBDbGVhcnMgSV9ORVcgYXMgd2VsbC4KICAqKi8KIAogdm9pZCBnZnMyX3NldF9pb3Aoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTgwMSw3ICs4MDEsOCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciA9IGdmczJfeGF0dHJfc2V0KCZpcC0+aV9pbm9kZSwgR0ZTMl9FQVRZUEVfU0VDVVJJVFksIG5hbWUsIHZhbHVlLCBsZW4sIDApOworCWVyciA9IF9fZ2ZzMl94YXR0cl9zZXQoJmlwLT5pX2lub2RlLCBuYW1lLCB2YWx1ZSwgbGVuLCAwLAorCQkJICAgICAgIEdGUzJfRUFUWVBFX1NFQ1VSSVRZKTsKIAlrZnJlZSh2YWx1ZSk7CiAJa2ZyZWUobmFtZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3lzLmMgYi9mcy9nZnMyL3N5cy5jCmluZGV4IGM1ZGFkMWUuLjBkYzM0NjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3lzLmMKKysrIGIvZnMvZ2ZzMi9zeXMuYwpAQCAtODUsMTEgKzg1LDcgQEAKIAlidWZbMF0gPSAnXDAnOwogCWlmICghZ2ZzMl91dWlkX3ZhbGlkKHV1aWQpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSIKLQkJCSIlMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCi0JCQl1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLAotCQkJdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwgdXVpZFsxMF0sIHV1aWRbMTFdLAotCQkJdXVpZFsxMl0sIHV1aWRbMTNdLCB1dWlkWzE0XSwgdXVpZFsxNV0pOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVwVUJcbiIsIHV1aWQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBmcmVlemVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQpAQCAtNTc1LDE0ICs1NzEsOCBAQAogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tQUk9UTz0lcyIsIHNkcC0+c2RfcHJvdG9fbmFtZSk7CiAJaWYgKCFzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQogCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJKT1VSTkFMSUQ9JXUiLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKTsKLQlpZiAoZ2ZzMl91dWlkX3ZhbGlkKHV1aWQpKSB7Ci0JCWFkZF91ZXZlbnRfdmFyKGVudiwgIlVVSUQ9JTAyWCUwMlglMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWC0iCi0JCQkgICAgICAgIiUwMlglMDJYLSUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCIsCi0JCQkgICAgICAgdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwgdXVpZFs0XSwKLQkJCSAgICAgICB1dWlkWzVdLCB1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLAotCQkJICAgICAgIHV1aWRbMTBdLCB1dWlkWzExXSwgdXVpZFsxMl0sIHV1aWRbMTNdLAotCQkJICAgICAgIHV1aWRbMTRdLCB1dWlkWzE1XSk7Ci0JfQorCWlmIChnZnMyX3V1aWRfdmFsaWQodXVpZCkpCisJCWFkZF91ZXZlbnRfdmFyKGVudiwgIlVVSUQ9JXBVQiIsIHV1aWQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3hhdHRyLmMgYi9mcy9nZnMyL3hhdHRyLmMKaW5kZXggOTEyZjVjYi4uOGEwNDEwOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi94YXR0ci5jCisrKyBiL2ZzL2dmczIveGF0dHIuYwpAQCAtNTY3LDE4ICs1NjcsMTcgQEAKIC8qKgogICogZ2ZzMl94YXR0cl9nZXQgLSBHZXQgYSBHRlMyIGV4dGVuZGVkIGF0dHJpYnV0ZQogICogQGlub2RlOiBUaGUgaW5vZGUKLSAqIEB0eXBlOiBUaGUgdHlwZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGUKICAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlCiAgKiBAYnVmZmVyOiBUaGUgYnVmZmVyIHRvIHdyaXRlIHRoZSByZXN1bHQgaW50bwogICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIKKyAqIEB0eXBlOiBUaGUgdHlwZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGUKICAqCiAgKiBSZXR1cm5zOiBhY3R1YWwgc2l6ZSBvZiBkYXRhIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvcgogICovCi0KLWludCBnZnMyX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwogCWludCBlcnJvcjsKIApAQCAtMTExOSw3ICsxMTE4LDcgQEAKIAogLyoqCiAgKiBnZnMyX3hhdHRyX3JlbW92ZSAtIFJlbW92ZSBhIEdGUzIgZXh0ZW5kZWQgYXR0cmlidXRlCi0gKiBAaW5vZGU6IFRoZSBpbm9kZQorICogQGlwOiBUaGUgaW5vZGUKICAqIEB0eXBlOiBUaGUgdHlwZSBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlCiAgKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQogICoKQEAgLTExMzAsOSArMTEyOSw4IEBACiAgKiBSZXR1cm5zOiAwLCBvciBlcnJubyBvbiBmYWlsdXJlCiAgKi8KIAotc3RhdGljIGludCBnZnMyX3hhdHRyX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9yZW1vdmUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwogCWludCBlcnJvcjsKIApAQCAtMTE1NiwyNCArMTE1NCwyNCBAQAogfQogCiAvKioKLSAqIGdmczJfeGF0dHJfc2V0IC0gU2V0IChvciByZW1vdmUpIGEgR0ZTMiBleHRlbmRlZCBhdHRyaWJ1dGUKLSAqIEBpbm9kZTogVGhlIGlub2RlCi0gKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQorICogX19nZnMyX3hhdHRyX3NldCAtIFNldCAob3IgcmVtb3ZlKSBhIEdGUzIgZXh0ZW5kZWQgYXR0cmlidXRlCisgKiBAaXA6IFRoZSBpbm9kZQogICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKICAqIEB2YWx1ZTogVGhlIHZhbHVlIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgKE5VTEwgZm9yIHJlbW92ZSkKICAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgQHZhbHVlIGFyZ3VtZW50CiAgKiBAZmxhZ3M6IENyZWF0ZSBvciBSZXBsYWNlCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQogICoKICAqIFNlZSBnZnMyX3hhdHRyX3JlbW92ZSgpIGZvciBkZXRhaWxzIG9mIHRoZSByZW1vdmFsIG9mIHhhdHRycy4KICAqCiAgKiBSZXR1cm5zOiAwIG9yIGVycm5vIG9uIGZhaWx1cmUKICAqLwogCi1pbnQgZ2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoraW50IF9fZ2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwogCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwogCXVuc2lnbmVkIGludCBuYW1lbCA9IHN0cmxlbihuYW1lKTsKIAlpbnQgZXJyb3I7CkBAIC0xMTg0LDcgKzExODIsNyBAQAogCQlyZXR1cm4gLUVSQU5HRTsKIAogCWlmICh2YWx1ZSA9PSBOVUxMKQotCQlyZXR1cm4gZ2ZzMl94YXR0cl9yZW1vdmUoaW5vZGUsIHR5cGUsIG5hbWUpOworCQlyZXR1cm4gZ2ZzMl94YXR0cl9yZW1vdmUoaXAsIHR5cGUsIG5hbWUpOwogCiAJaWYgKGVhX2NoZWNrX3NpemUoc2RwLCBuYW1lbCwgc2l6ZSkpCiAJCXJldHVybiAtRVJBTkdFOwpAQCAtMTIyNCw2ICsxMjIyLDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50IGdmczJfeGF0dHJfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQoreworCXJldHVybiBfX2dmczJfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgdmFsdWUsCisJCQkJc2l6ZSwgZmxhZ3MsIHR5cGUpOworfQorCiBzdGF0aWMgaW50IGVhX2FjbF9jaG1vZF91bnN0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLAogCQkJCSAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgY2hhciAqZGF0YSkKIHsKQEAgLTE1MjksNDAgKzE1MzQsMTggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl94YXR0cl91c2VyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCi17Ci0JcmV0dXJuIGdmczJfeGF0dHJfZ2V0KGlub2RlLCBHRlMyX0VBVFlQRV9VU1IsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl94YXR0cl91c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQotewotCXJldHVybiBnZnMyX3hhdHRyX3NldChpbm9kZSwgR0ZTMl9FQVRZUEVfVVNSLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGdmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLQlyZXR1cm4gZ2ZzMl94YXR0cl9nZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1NFQ1VSSVRZLCBuYW1lLCBidWZmZXIsIHNpemUpOwotfQotCi1zdGF0aWMgaW50IGdmczJfeGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIGdmczJfeGF0dHJfc2V0KGlub2RlLCBHRlMyX0VBVFlQRV9TRUNVUklUWSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKLX0KLQogc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGdmczJfeGF0dHJfdXNlcl9oYW5kbGVyID0gewogCS5wcmVmaXggPSBYQVRUUl9VU0VSX1BSRUZJWCwKLQkuZ2V0ICAgID0gZ2ZzMl94YXR0cl91c2VyX2dldCwKLQkuc2V0ICAgID0gZ2ZzMl94YXR0cl91c2VyX3NldCwKKwkuZmxhZ3MgID0gR0ZTMl9FQVRZUEVfVVNSLAorCS5nZXQgICAgPSBnZnMyX3hhdHRyX2dldCwKKwkuc2V0ICAgID0gZ2ZzMl94YXR0cl9zZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zZWN1cml0eV9oYW5kbGVyID0gewogCS5wcmVmaXggPSBYQVRUUl9TRUNVUklUWV9QUkVGSVgsCi0JLmdldCAgICA9IGdmczJfeGF0dHJfc2VjdXJpdHlfZ2V0LAotCS5zZXQgICAgPSBnZnMyX3hhdHRyX3NlY3VyaXR5X3NldCwKKwkuZmxhZ3MgID0gR0ZTMl9FQVRZUEVfU0VDVVJJVFksCisJLmdldCAgICA9IGdmczJfeGF0dHJfZ2V0LAorCS5zZXQgICAgPSBnZnMyX3hhdHRyX3NldCwKIH07CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpnZnMyX3hhdHRyX2hhbmRsZXJzW10gPSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3hhdHRyLmggYi9mcy9nZnMyL3hhdHRyLmgKaW5kZXggOGQ2YWU1OC4uZDM5MmY4MyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi94YXR0ci5oCisrKyBiL2ZzL2dmczIveGF0dHIuaApAQCAtNTMsMTAgKzUzLDkgQEAKIAlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVsX3ByZXY7CiB9OwogCi1leHRlcm4gaW50IGdmczJfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKLWV4dGVybiBpbnQgZ2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgX19nZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBpbnQgZmxhZ3MsIGludCB0eXBlKTsKIGV4dGVybiBzc2l6ZV90IGdmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IGdmczJfZWFfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwogCmRpZmYgLS1naXQgYS9mcy9oZnMvY2F0YWxvZy5jIGIvZnMvaGZzL2NhdGFsb2cuYwppbmRleCA2ZDk4ZjExLi40MjRiMDMzIDEwMDY0NAotLS0gYS9mcy9oZnMvY2F0YWxvZy5jCisrKyBiL2ZzL2hmcy9jYXRhbG9nLmMKQEAgLTI4OSw2ICsyODksMTAgQEAKIAllcnIgPSBoZnNfYnJlY19maW5kKCZzcmNfZmQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OworCWlmIChzcmNfZmQuZW50cnlsZW5ndGggPiBzaXplb2YoZW50cnkpIHx8IHNyY19mZC5lbnRyeWxlbmd0aCA8IDApIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQogCiAJaGZzX2Jub2RlX3JlYWQoc3JjX2ZkLmJub2RlLCAmZW50cnksIHNyY19mZC5lbnRyeW9mZnNldCwKIAkJCSAgICBzcmNfZmQuZW50cnlsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzL2Rpci5jIGIvZnMvaGZzL2Rpci5jCmluZGV4IDdjNjliOTguLjJiM2I4NjEgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9kaXIuYworKysgYi9mcy9oZnMvZGlyLmMKQEAgLTc5LDYgKzc5LDExIEBACiAJCWZpbHAtPmZfcG9zKys7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMToKKwkJaWYgKGZkLmVudHJ5bGVuZ3RoID4gc2l6ZW9mKGVudHJ5KSB8fCBmZC5lbnRyeWxlbmd0aCA8IDApIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCWhmc19ibm9kZV9yZWFkKGZkLmJub2RlLCAmZW50cnksIGZkLmVudHJ5b2Zmc2V0LCBmZC5lbnRyeWxlbmd0aCk7CiAJCWlmIChlbnRyeS50eXBlICE9IEhGU19DRFJfVEhEKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImhmczogYmFkIGNhdGFsb2cgZm9sZGVyIHRocmVhZFxuIik7CkBAIC0xMDksNiArMTE0LDEyIEBACiAJCQllcnIgPSAtRUlPOwogCQkJZ290byBvdXQ7CiAJCX0KKworCQlpZiAoZmQuZW50cnlsZW5ndGggPiBzaXplb2YoZW50cnkpIHx8IGZkLmVudHJ5bGVuZ3RoIDwgMCkgeworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJaGZzX2Jub2RlX3JlYWQoZmQuYm5vZGUsICZlbnRyeSwgZmQuZW50cnlvZmZzZXQsIGZkLmVudHJ5bGVuZ3RoKTsKIAkJdHlwZSA9IGVudHJ5LnR5cGU7CiAJCWxlbiA9IGhmc19tYWMyYXNjKHNiLCBzdHJidWYsICZmZC5rZXktPmNhdC5DTmFtZSk7CmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IGY3ZmNiZTQuLjVlZDcyNTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC00MDksOCArNDA5LDEzIEBACiAJLyogdHJ5IHRvIGdldCB0aGUgcm9vdCBpbm9kZSAqLwogCWhmc19maW5kX2luaXQoSEZTX1NCKHNiKS0+Y2F0X3RyZWUsICZmZCk7CiAJcmVzID0gaGZzX2NhdF9maW5kX2JyZWMoc2IsIEhGU19ST09UX0NOSUQsICZmZCk7Ci0JaWYgKCFyZXMpCisJaWYgKCFyZXMpIHsKKwkJaWYgKGZkLmVudHJ5bGVuZ3RoID4gc2l6ZW9mKHJlYykgfHwgZmQuZW50cnlsZW5ndGggPCAwKSB7CisJCQlyZXMgPSAgLUVJTzsKKwkJCWdvdG8gYmFpbDsKKwkJfQogCQloZnNfYm5vZGVfcmVhZChmZC5ibm9kZSwgJnJlYywgZmQuZW50cnlvZmZzZXQsIGZkLmVudHJ5bGVuZ3RoKTsKKwl9CiAJaWYgKHJlcykgewogCQloZnNfZmluZF9leGl0KCZmZCk7CiAJCWdvdG8gYmFpbF9ub19yb290OwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IGYyZmVhYTAuLmNhZGM0Y2UgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogLyogTWFyayB0aGUgZmlsZXN5c3RlbSBkaXJ0eSwgc28gdGhhdCBjaGtkc2sgY2hlY2tzIGl0IHdoZW4gb3MvMiBib290ZWQgKi8KIApAQCAtMTE1LDE1ICsxMTYsMTMgQEAKIHVuc2lnbmVkIGhwZnNfY291bnRfb25lX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlY25vKQogewogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQl1bnNpZ25lZCAqYml0czsKLQl1bnNpZ25lZCBpLCBjb3VudDsKLQlpZiAoIShiaXRzID0gaHBmc19tYXBfNHNlY3RvcnMocywgc2Vjbm8sICZxYmgsIDQpKSkgcmV0dXJuIDA7Ci0JY291bnQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCAyMDQ4IC8gc2l6ZW9mKHVuc2lnbmVkKTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGI7IAotCQlpZiAoIWJpdHNbaV0pIGNvbnRpbnVlOwotCQlmb3IgKGIgPSBiaXRzW2ldOyBiOyBiPj49MSkgY291bnQgKz0gYiAmIDE7Ci0JfQorCXVuc2lnbmVkIGxvbmcgKmJpdHM7CisJdW5zaWduZWQgY291bnQ7CisKKwliaXRzID0gaHBmc19tYXBfNHNlY3RvcnMocywgc2Vjbm8sICZxYmgsIDQpOworCWlmICghYml0cykKKwkJcmV0dXJuIDA7CisJY291bnQgPSBiaXRtYXBfd2VpZ2h0KGJpdHMsIDIwNDggKiBCSVRTX1BFUl9CWVRFKTsKIAlocGZzX2JyZWxzZTQoJnFiaCk7CiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA4N2ExMjU4Li5hMGJiZDNkIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Rub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtOTIyLDcgKzkyMSw4IEBACiAJaW50IGVycm9yID0gLUVOT01FTTsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKnJvb3Q7CisJc3RydWN0IHBhdGggcGF0aDsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OwogCXN0cnVjdCBxc3RyIHF1aWNrX3N0cmluZzsKIAogCSp1c2VyID0gTlVMTDsKQEAgLTk0NCwxMCArOTQ0LDExIEBACiAJcXVpY2tfc3RyaW5nLm5hbWUgPSBuYW1lOwogCXF1aWNrX3N0cmluZy5sZW4gPSBzdHJsZW4ocXVpY2tfc3RyaW5nLm5hbWUpOwogCXF1aWNrX3N0cmluZy5oYXNoID0gMDsKLQlkZW50cnkgPSBkX2FsbG9jKHJvb3QsICZxdWlja19zdHJpbmcpOwotCWlmICghZGVudHJ5KQorCXBhdGguZGVudHJ5ID0gZF9hbGxvYyhyb290LCAmcXVpY2tfc3RyaW5nKTsKKwlpZiAoIXBhdGguZGVudHJ5KQogCQlnb3RvIG91dF9zaG1fdW5sb2NrOwogCisJcGF0aC5tbnQgPSBtbnRnZXQoaHVnZXRsYmZzX3Zmc21vdW50KTsKIAllcnJvciA9IC1FTk9TUEM7CiAJaW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKHJvb3QtPmRfc2IsIGN1cnJlbnRfZnN1aWQoKSwKIAkJCQljdXJyZW50X2ZzZ2lkKCksIFNfSUZSRUcgfCBTX0lSV1hVR08sIDApOwpAQCAtOTYwLDI0ICs5NjEsMjIgQEAKIAkJCWFjY3RmbGFnKSkKIAkJZ290byBvdXRfaW5vZGU7CiAKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCWRfaW5zdGFudGlhdGUocGF0aC5kZW50cnksIGlub2RlKTsKIAlpbm9kZS0+aV9zaXplID0gc2l6ZTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAKIAllcnJvciA9IC1FTkZJTEU7Ci0JZmlsZSA9IGFsbG9jX2ZpbGUoaHVnZXRsYmZzX3Zmc21vdW50LCBkZW50cnksCi0JCQlGTU9ERV9XUklURSB8IEZNT0RFX1JFQUQsCisJZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIEZNT0RFX1dSSVRFIHwgRk1PREVfUkVBRCwKIAkJCSZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0X2RlbnRyeTsgLyogaW5vZGUgaXMgYWxyZWFkeSBhdHRhY2hlZCAqLwotCWltYV9jb3VudHNfZ2V0KGZpbGUpOwogCiAJcmV0dXJuIGZpbGU7CiAKIG91dF9pbm9kZToKIAlpcHV0KGlub2RlKTsKIG91dF9kZW50cnk6Ci0JZHB1dChkZW50cnkpOworCXBhdGhfcHV0KCZwYXRoKTsKIG91dF9zaG1fdW5sb2NrOgogCWlmICgqdXNlcikgewogCQl1c2VyX3NobV91bmxvY2soc2l6ZSwgKnVzZXIpOwpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggMDZjMWYwMi4uMDNkZmViMiAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkgKiBQcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiB0aHJvdWdoIHNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKIAkgKi8KIAlzbXBfbWIoKTsKLQl3YWtlX3VwX2JpdCgmaW5vZGUtPmlfc3RhdGUsIF9fSV9MT0NLKTsKKwl3YWtlX3VwX2JpdCgmaW5vZGUtPmlfc3RhdGUsIF9fSV9ORVcpOwogfQogCiAvKioKQEAgLTY5MCwxNyArNjkwLDE3IEBACiAJfQogI2VuZGlmCiAJLyoKLQkgKiBUaGlzIGlzIHNwZWNpYWwhICBXZSBkbyBub3QgbmVlZCB0aGUgc3BpbmxvY2sgd2hlbiBjbGVhcmluZyBJX0xPQ0ssCisJICogVGhpcyBpcyBzcGVjaWFsISAgV2UgZG8gbm90IG5lZWQgdGhlIHNwaW5sb2NrIHdoZW4gY2xlYXJpbmcgSV9ORVcsCiAJICogYmVjYXVzZSB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgbm9ib2R5IGVsc2UgdHJpZXMgdG8gZG8gYW55dGhpbmcgYWJvdXQKIAkgKiB0aGUgc3RhdGUgb2YgdGhlIGlub2RlIHdoZW4gaXQgaXMgbG9ja2VkLCBhcyB3ZSBqdXN0IGNyZWF0ZWQgaXQgKHNvCi0JICogdGhlcmUgY2FuIGJlIG5vIG9sZCBob2xkZXJzIHRoYXQgaGF2ZW4ndCB0ZXN0ZWQgSV9MT0NLKS4KKwkgKiB0aGVyZSBjYW4gYmUgbm8gb2xkIGhvbGRlcnMgdGhhdCBoYXZlbid0IHRlc3RlZCBJX05FVykuCiAJICogSG93ZXZlciB3ZSBtdXN0IGVtaXQgdGhlIG1lbW9yeSBiYXJyaWVyIHNvIHRoYXQgb3RoZXIgQ1BVcyByZWxpYWJseQotCSAqIHNlZSB0aGUgY2xlYXJpbmcgb2YgSV9MT0NLIGFmdGVyIHRoZSBvdGhlciBpbm9kZSBpbml0aWFsaXNhdGlvbiBoYXMKKwkgKiBzZWUgdGhlIGNsZWFyaW5nIG9mIElfTkVXIGFmdGVyIHRoZSBvdGhlciBpbm9kZSBpbml0aWFsaXNhdGlvbiBoYXMKIAkgKiBjb21wbGV0ZWQuCiAJICovCiAJc21wX21iKCk7Ci0JV0FSTl9PTigoaW5vZGUtPmlfc3RhdGUgJiAoSV9MT0NLfElfTkVXKSkgIT0gKElfTE9DS3xJX05FVykpOwotCWlub2RlLT5pX3N0YXRlICY9IH4oSV9MT0NLfElfTkVXKTsKKwlXQVJOX09OKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpOworCWlub2RlLT5pX3N0YXRlICY9IH5JX05FVzsKIAl3YWtlX3VwX2lub2RlKGlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0wodW5sb2NrX25ld19pbm9kZSk7CkBAIC03MzEsNyArNzMxLDcgQEAKIAkJCQlnb3RvIHNldF9mYWlsZWQ7CiAKIAkJCV9faW5vZGVfYWRkX3RvX2xpc3RzKHNiLCBoZWFkLCBpbm9kZSk7Ci0JCQlpbm9kZS0+aV9zdGF0ZSA9IElfTE9DS3xJX05FVzsKKwkJCWlub2RlLT5pX3N0YXRlID0gSV9ORVc7CiAJCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKIAkJCS8qIFJldHVybiB0aGUgbG9ja2VkIGlub2RlIHdpdGggSV9ORVcgc2V0LCB0aGUKQEAgLTc3OCw3ICs3NzgsNyBAQAogCQlpZiAoIW9sZCkgewogCQkJaW5vZGUtPmlfaW5vID0gaW5vOwogCQkJX19pbm9kZV9hZGRfdG9fbGlzdHMoc2IsIGhlYWQsIGlub2RlKTsKLQkJCWlub2RlLT5pX3N0YXRlID0gSV9MT0NLfElfTkVXOworCQkJaW5vZGUtPmlfc3RhdGUgPSBJX05FVzsKIAkJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKIAogCQkJLyogUmV0dXJuIHRoZSBsb2NrZWQgaW5vZGUgd2l0aCBJX05FVyBzZXQsIHRoZQpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAlpbm9fdCBpbm8gPSBpbm9kZS0+aV9pbm87CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBpbm9kZV9oYXNodGFibGUgKyBoYXNoKHNiLCBpbm8pOwogCi0JaW5vZGUtPmlfc3RhdGUgfD0gSV9MT0NLfElfTkVXOworCWlub2RlLT5pX3N0YXRlIHw9IElfTkVXOwogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCQlzdHJ1Y3QgaW5vZGUgKm9sZCA9IE5VTEw7CkBAIC0xMTIwLDcgKzExMjAsNyBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IGlub2RlX2hhc2h0YWJsZSArIGhhc2goc2IsIGhhc2h2YWwpOwogCi0JaW5vZGUtPmlfc3RhdGUgfD0gSV9MT0NLfElfTkVXOworCWlub2RlLT5pX3N0YXRlIHw9IElfTkVXOwogCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CkBAIC0xNTEwLDcgKzE1MTAsNyBAQAogICogdW50aWwgdGhlIGRlbGV0aW9uIF9taWdodF8gaGF2ZSBjb21wbGV0ZWQuICBDYWxsZXJzIGFyZSByZXNwb25zaWJsZQogICogdG8gcmVjaGVjayBpbm9kZSBzdGF0ZS4KICAqCi0gKiBJdCBkb2Vzbid0IG1hdHRlciBpZiBJX0xPQ0sgaXMgbm90IHNldCBpbml0aWFsbHksIGEgY2FsbCB0bworICogSXQgZG9lc24ndCBtYXR0ZXIgaWYgSV9ORVcgaXMgbm90IHNldCBpbml0aWFsbHksIGEgY2FsbCB0bwogICogd2FrZV91cF9pbm9kZSgpIGFmdGVyIHJlbW92aW5nIGZyb20gdGhlIGhhc2ggbGlzdCB3aWxsIERUUlQuCiAgKgogICogVGhpcyBpcyBjYWxsZWQgd2l0aCBpbm9kZV9sb2NrIGhlbGQuCkBAIC0xNTE4LDggKzE1MTgsOCBAQAogc3RhdGljIHZvaWQgX193YWl0X29uX2ZyZWVpbmdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7Ci0JREVGSU5FX1dBSVRfQklUKHdhaXQsICZpbm9kZS0+aV9zdGF0ZSwgX19JX0xPQ0spOwotCXdxID0gYml0X3dhaXRxdWV1ZSgmaW5vZGUtPmlfc3RhdGUsIF9fSV9MT0NLKTsKKwlERUZJTkVfV0FJVF9CSVQod2FpdCwgJmlub2RlLT5pX3N0YXRlLCBfX0lfTkVXKTsKKwl3cSA9IGJpdF93YWl0cXVldWUoJmlub2RlLT5pX3N0YXRlLCBfX0lfTkVXKTsKIAlwcmVwYXJlX3RvX3dhaXQod3EsICZ3YWl0LndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJc2NoZWR1bGUoKTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDUxNTE3NWIuLmU5NmExNjYgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtNzksOCArNzksMTYgQEAKICAqIGZpbGVfdGFibGUuYwogICovCiBleHRlcm4gdm9pZCBtYXJrX2ZpbGVzX3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqZ2V0X2VtcHR5X2ZpbHAodm9pZCk7CiAKIC8qCiAgKiBzdXBlci5jCiAgKi8KIGV4dGVybiBpbnQgZG9fcmVtb3VudF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCB2b2lkICosIGludCk7CisKKy8qCisgKiBvcGVuLmMKKyAqLworc3RydWN0IG5hbWVpZGF0YTsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2V4cG9ydC5jIGIvZnMvaXNvZnMvZXhwb3J0LmMKaW5kZXggZTgxYTMwNS4uZWQ3NTJjYiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvZXhwb3J0LmMKKysrIGIvZnMvaXNvZnMvZXhwb3J0LmMKQEAgLTksNyArOSw3IEBACiAgKgogICogVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgaGVscGZ1bDoKICAqCi0gKiAgICAgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcKKyAqICAgICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9FeHBvcnRpbmcKICAqICAgICBmcy9leHBvcnRmcy9leHBmcy5jLgogICovCiAKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IDQxNjBhZmEuLmJkMjI0ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtMTkxMyw3ICsxOTEzLDcgQEAKIHsKIAlqYmRfZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImpiZCIsIE5VTEwpOwogCWlmIChqYmRfZGVidWdmc19kaXIpCi0JCWpiZF9kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX3U4KCJqYmQtZGVidWciLCBTX0lSVUdPLAorCQlqYmRfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OCgiamJkLWRlYnVnIiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSAgICAgICBqYmRfZGVidWdmc19kaXIsCiAJCQkJCSAgICAgICAmam91cm5hbF9lbmFibGVfZGVidWcpOwogfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBiN2NhM2E5Li4xN2FmODc5IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMjExNSw3ICsyMTE1LDggQEAKIHsKIAlqYmQyX2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJqYmQyIiwgTlVMTCk7CiAJaWYgKGpiZDJfZGVidWdmc19kaXIpCi0JCWpiZDJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChKQkQyX0RFQlVHX05BTUUsIFNfSVJVR08sCisJCWpiZDJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OChKQkQyX0RFQlVHX05BTUUsCisJCQkJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGpiZDJfZGVidWdmc19kaXIsCiAJCQkJCSAgICAgICAmamJkMl9qb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CiB9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9hY2wuYyBiL2ZzL2pmZnMyL2FjbC5jCmluZGV4IDdlZGI2MmUuLjdjZGMzMTkgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2FjbC5jCisrKyBiL2ZzL2pmZnMyL2FjbC5jCkBAIC0zNTAsOCArMzUwLDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzaXplX3QgamZmczJfYWNsX2FjY2Vzc19saXN0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3N0YXRpYyBzaXplX3QgamZmczJfYWNsX2FjY2Vzc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LAorCQlzaXplX3QgbGlzdF9zaXplLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IGludCByZXRsZW4gPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyk7CiAKQEAgLTM2MCw4ICszNjAsOCBAQAogCXJldHVybiByZXRsZW47CiB9CiAKLXN0YXRpYyBzaXplX3QgamZmczJfYWNsX2RlZmF1bHRfbGlzdHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorc3RhdGljIHNpemVfdCBqZmZzMl9hY2xfZGVmYXVsdF9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LAorCQlzaXplX3QgbGlzdF9zaXplLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IGludCByZXRsZW4gPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOwogCkBAIC0zNzAsMTIgKzM3MCwxNiBAQAogCXJldHVybiByZXRsZW47CiB9CiAKLXN0YXRpYyBpbnQgamZmczJfYWNsX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBqZmZzMl9hY2xfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IHJjOwogCi0JYWNsID0gamZmczJfZ2V0X2FjbChpbm9kZSwgdHlwZSk7CisJaWYgKG5hbWVbMF0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY2wgPSBqZmZzMl9nZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCWlmICghYWNsKQpAQCAtMzg2LDI2ICszOTAsMTUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgamZmczJfYWNsX2FjY2Vzc19nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCWlmIChuYW1lWzBdICE9ICdcMCcpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBqZmZzMl9hY2xfZ2V0eGF0dHIoaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYnVmZmVyLCBzaXplKTsKLX0KLQotc3RhdGljIGludCBqZmZzMl9hY2xfZGVmYXVsdF9nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCWlmIChuYW1lWzBdICE9ICdcMCcpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBqZmZzMl9hY2xfZ2V0eGF0dHIoaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgamZmczJfYWNsX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGpmZnMyX2FjbF9zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IHJjOwogCi0JaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCWlmIChuYW1lWzBdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghaXNfb3duZXJfb3JfY2FwKGRlbnRyeS0+ZF9pbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAodmFsdWUpIHsKQEAgLTQyMCwzOCArNDEzLDI0IEBACiAJfSBlbHNlIHsKIAkJYWNsID0gTlVMTDsKIAl9Ci0JcmMgPSBqZmZzMl9zZXRfYWNsKGlub2RlLCB0eXBlLCBhY2wpOworCXJjID0gamZmczJfc2V0X2FjbChkZW50cnktPmRfaW5vZGUsIHR5cGUsIGFjbCk7CiAgb3V0OgogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGpmZnMyX2FjbF9hY2Nlc3Nfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKLXsKLQlpZiAobmFtZVswXSAhPSAnXDAnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gamZmczJfYWNsX3NldHhhdHRyKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGJ1ZmZlciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgamZmczJfYWNsX2RlZmF1bHRfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JaWYgKG5hbWVbMF0gIT0gJ1wwJykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGpmZnMyX2FjbF9zZXR4YXR0cihpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgYnVmZmVyLCBzaXplKTsKLX0KLQogc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfYWNsX2FjY2Vzc194YXR0cl9oYW5kbGVyID0gewogCS5wcmVmaXgJPSBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTLAorCS5mbGFncwk9IEFDTF9UWVBFX0RFRkFVTFQsCiAJLmxpc3QJPSBqZmZzMl9hY2xfYWNjZXNzX2xpc3R4YXR0ciwKLQkuZ2V0CT0gamZmczJfYWNsX2FjY2Vzc19nZXR4YXR0ciwKLQkuc2V0CT0gamZmczJfYWNsX2FjY2Vzc19zZXR4YXR0ciwKKwkuZ2V0CT0gamZmczJfYWNsX2dldHhhdHRyLAorCS5zZXQJPSBqZmZzMl9hY2xfc2V0eGF0dHIsCiB9OwogCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl9hY2xfZGVmYXVsdF94YXR0cl9oYW5kbGVyID0gewogCS5wcmVmaXgJPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKKwkuZmxhZ3MJPSBBQ0xfVFlQRV9ERUZBVUxULAogCS5saXN0CT0gamZmczJfYWNsX2RlZmF1bHRfbGlzdHhhdHRyLAotCS5nZXQJPSBqZmZzMl9hY2xfZGVmYXVsdF9nZXR4YXR0ciwKLQkuc2V0CT0gamZmczJfYWNsX2RlZmF1bHRfc2V0eGF0dHIsCisJLmdldAk9IGpmZnMyX2FjbF9nZXR4YXR0ciwKKwkuc2V0CT0gamZmczJfYWNsX3NldHhhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2djLmMgYi9mcy9qZmZzMi9nYy5jCmluZGV4IDA5MGM1NTYuLjNiNmYyZmEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2djLmMKKysrIGIvZnMvamZmczIvZ2MuYwpAQCAtNzAwLDcgKzcwMCw4IEBACiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSByaTsKIAlzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICpsYXN0X2ZyYWc7CiAJdW5pb24gamZmczJfZGV2aWNlX25vZGUgZGV2OwotCWNoYXIgKm1kYXRhID0gTlVMTCwgbWRhdGFsZW4gPSAwOworCWNoYXIgKm1kYXRhID0gTlVMTDsKKwlpbnQgbWRhdGFsZW4gPSAwOwogCXVpbnQzMl90IGFsbG9jbGVuLCBpbGVuOwogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jIGIvZnMvamZmczIvcmVhZGlub2RlLmMKaW5kZXggMzc4OTkxYy4uZTIyZGU4MyAxMDA2NDQKLS0tIGEvZnMvamZmczIvcmVhZGlub2RlLmMKKysrIGIvZnMvamZmczIvcmVhZGlub2RlLmMKQEAgLTEyODQsNyArMTI4NCw3IEBACiAJCQkJZi0+dGFyZ2V0ID0gTlVMTDsKIAkJCQltdXRleF91bmxvY2soJmYtPnNlbSk7CiAJCQkJamZmczJfZG9fY2xlYXJfaW5vZGUoYywgZik7Ci0JCQkJcmV0dXJuIC1yZXQ7CisJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAogCQkJZi0+dGFyZ2V0W2plMzJfdG9fY3B1KGxhdGVzdF9ub2RlLT5jc2l6ZSldID0gJ1wwJzsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3NlY3VyaXR5LmMgYi9mcy9qZmZzMi9zZWN1cml0eS5jCmluZGV4IDAyYzM5YzYuLmVhY2NlZTAgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3NlY3VyaXR5LmMKKysrIGIvZnMvamZmczIvc2VjdXJpdHkuYwpAQCAtNDQsMjYgKzQ0LDI4IEBACiB9CiAKIC8qIC0tLS0gWEFUVFIgSGFuZGxlciBmb3IgInNlY3VyaXR5LioiIC0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW50IGpmZnMyX3NlY3VyaXR5X2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgamZmczJfc2VjdXJpdHlfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCWlmICghc3RyY21wKG5hbWUsICIiKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfU0VDVVJJVFksIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGRvX2pmZnMyX2dldHhhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgSkZGUzJfWFBSRUZJWF9TRUNVUklUWSwKKwkJCQkgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBqZmZzMl9zZWN1cml0eV9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCQkJICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3N0YXRpYyBpbnQgamZmczJfc2VjdXJpdHlfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewogCWlmICghc3RyY21wKG5hbWUsICIiKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gZG9famZmczJfc2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfU0VDVVJJVFksIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihkZW50cnktPmRfaW5vZGUsIEpGRlMyX1hQUkVGSVhfU0VDVVJJVFksCisJCQkJIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgc2l6ZV90IGpmZnMyX3NlY3VyaXR5X2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCitzdGF0aWMgc2l6ZV90IGpmZnMyX3NlY3VyaXR5X2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsCisJCXNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJc2l6ZV90IHJldGxlbiA9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4gKyBuYW1lX2xlbiArIDE7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N1bW1hcnkuYyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwppbmRleCA2Y2FmMWUxZS4uODAwMTcxZCAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VtbWFyeS5jCisrKyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBpbnQgamZmczJfc3VtX2luaXQoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCiB7Ci0JdWludDMyX3Qgc3VtX3NpemUgPSBtYXhfdCh1aW50MzJfdCwgYy0+c2VjdG9yX3NpemUsIE1BWF9TVU1NQVJZX1NJWkUpOworCXVpbnQzMl90IHN1bV9zaXplID0gbWluX3QodWludDMyX3QsIGMtPnNlY3Rvcl9zaXplLCBNQVhfU1VNTUFSWV9TSVpFKTsKIAogCWMtPnN1bW1hcnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtbWFyeSksIEdGUF9LRVJORUwpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi94YXR0ci5jIGIvZnMvamZmczIveGF0dHIuYwppbmRleCA0YjEwNzg4Li45ZTc1YzYyYyAxMDA2NDQKLS0tIGEvZnMvamZmczIveGF0dHIuYworKysgYi9mcy9qZmZzMi94YXR0ci5jCkBAIC05OTAsOSArOTkwLDExIEBACiAJCWlmICgheGhhbmRsZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYnVmZmVyKSB7Ci0JCQlyYyA9IHhoYW5kbGUtPmxpc3QoaW5vZGUsIGJ1ZmZlcitsZW4sIHNpemUtbGVuLCB4ZC0+eG5hbWUsIHhkLT5uYW1lX2xlbik7CisJCQlyYyA9IHhoYW5kbGUtPmxpc3QoZGVudHJ5LCBidWZmZXIrbGVuLCBzaXplLWxlbiwKKwkJCQkJICAgeGQtPnhuYW1lLCB4ZC0+bmFtZV9sZW4sIHhkLT5mbGFncyk7CiAJCX0gZWxzZSB7Ci0JCQlyYyA9IHhoYW5kbGUtPmxpc3QoaW5vZGUsIE5VTEwsIDAsIHhkLT54bmFtZSwgeGQtPm5hbWVfbGVuKTsKKwkJCXJjID0geGhhbmRsZS0+bGlzdChkZW50cnksIE5VTEwsIDAsIHhkLT54bmFtZSwKKwkJCQkJICAgeGQtPm5hbWVfbGVuLCB4ZC0+ZmxhZ3MpOwogCQl9CiAJCWlmIChyYyA8IDApCiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYwppbmRleCA4ZWM1NzY1Li4zZTVhNWUzIDEwMDY0NAotLS0gYS9mcy9qZmZzMi94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jCkBAIC0xNiwyNCArMTYsMjYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSAibm9kZWxpc3QuaCIKIAotc3RhdGljIGludCBqZmZzMl90cnVzdGVkX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBqZmZzMl90cnVzdGVkX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJaWYgKCFzdHJjbXAobmFtZSwgIiIpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVFJVU1RFRCwgbmFtZSwgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gZG9famZmczJfZ2V0eGF0dHIoZGVudHJ5LT5kX2lub2RlLCBKRkZTMl9YUFJFRklYX1RSVVNURUQsCisJCQkJIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgamZmczJfdHJ1c3RlZF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCQkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorc3RhdGljIGludCBqZmZzMl90cnVzdGVkX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKIAlpZiAoIXN0cmNtcChuYW1lLCAiIikpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9UUlVTVEVELCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gZG9famZmczJfc2V0eGF0dHIoZGVudHJ5LT5kX2lub2RlLCBKRkZTMl9YUFJFRklYX1RSVVNURUQsCisJCQkJIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgc2l6ZV90IGpmZnMyX3RydXN0ZWRfbGlzdHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorc3RhdGljIHNpemVfdCBqZmZzMl90cnVzdGVkX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsCisJCXNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJc2l6ZV90IHJldGxlbiA9IFhBVFRSX1RSVVNURURfUFJFRklYX0xFTiArIG5hbWVfbGVuICsgMTsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIveGF0dHJfdXNlci5jIGIvZnMvamZmczIveGF0dHJfdXNlci5jCmluZGV4IDhiYmVhYjkuLjg1NDRhZjYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYworKysgYi9mcy9qZmZzMi94YXR0cl91c2VyLmMKQEAgLTE2LDI0ICsxNiwyNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlICJub2RlbGlzdC5oIgogCi1zdGF0aWMgaW50IGpmZnMyX3VzZXJfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBqZmZzMl91c2VyX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlpZiAoIXN0cmNtcChuYW1lLCAiIikpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBkb19qZmZzMl9nZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9VU0VSLCBuYW1lLCBidWZmZXIsIHNpemUpOworCXJldHVybiBkb19qZmZzMl9nZXR4YXR0cihkZW50cnktPmRfaW5vZGUsIEpGRlMyX1hQUkVGSVhfVVNFUiwKKwkJCQkgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBqZmZzMl91c2VyX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorc3RhdGljIGludCBqZmZzMl91c2VyX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKIAlpZiAoIXN0cmNtcChuYW1lLCAiIikpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9VU0VSLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gZG9famZmczJfc2V0eGF0dHIoZGVudHJ5LT5kX2lub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsCisJCQkJIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgc2l6ZV90IGpmZnMyX3VzZXJfbGlzdHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorc3RhdGljIHNpemVfdCBqZmZzMl91c2VyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsCisJCXNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJc2l6ZV90IHJldGxlbiA9IFhBVFRSX1VTRVJfUFJFRklYX0xFTiArIG5hbWVfbGVuICsgMTsKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eG5tZ3IuYyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKaW5kZXggZjI2ZTRkMC4uZDk0NWVhNyAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eG5tZ3IuYworKysgYi9mcy9qZnMvamZzX3R4bm1nci5jCkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogCQkgKi8KIAkJLyoKIAkJICogSSBiZWxpZXZlIHRoaXMgY29kZSBpcyBubyBsb25nZXIgbmVlZGVkLiAgU3BsaXR0aW5nIElfTE9DSwotCQkgKiBpbnRvIHR3byBiaXRzLCBJX0xPQ0sgYW5kIElfU1lOQyBzaG91bGQgcHJldmVudCB0aGlzCisJCSAqIGludG8gdHdvIGJpdHMsIElfTkVXIGFuZCBJX1NZTkMgc2hvdWxkIHByZXZlbnQgdGhpcwogCQkgKiBkZWFkbG9jayBhcyB3ZWxsLiAgQnV0IHNpbmNlIEkgZG9uJ3QgaGF2ZSBhIEpGUyB0ZXN0bG9hZAogCQkgKiB0byB2ZXJpZnkgdGhpcywgb25seSBhIHRyaXZpYWwgcy9JX0xPQ0svSV9TWU5DLyB3YXMgZG9uZS4KIAkJICogSm9lcm4KZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggMjIzNGM3My4uZDkyOWE4MiAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTUyNCw3ICs1MjQsNyBAQAogCSAqIFBhZ2UgY2FjaGUgaXMgaW5kZXhlZCBieSBsb25nLgogCSAqIEkgd291bGQgdXNlIE1BWF9MRlNfRklMRVNJWkUsIGJ1dCBpdCdzIG9ubHkgaGFsZiBhcyBiaWcKIAkgKi8KLQlzYi0+c19tYXhieXRlcyA9IG1pbigoKHU2NCkgUEFHRV9DQUNIRV9TSVpFIDw8IDMyKSAtIDEsIHNiLT5zX21heGJ5dGVzKTsKKwlzYi0+c19tYXhieXRlcyA9IG1pbigoKHU2NCkgUEFHRV9DQUNIRV9TSVpFIDw8IDMyKSAtIDEsICh1NjQpc2ItPnNfbWF4Ynl0ZXMpOwogI2VuZGlmCiAJc2ItPnNfdGltZV9ncmFuID0gMTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDIxOTU3NmMuLjZlOGQxN2UgMTAwNjQ0Ci0tLSBhL2ZzL2xpYmZzLmMKKysrIGIvZnMvbGliZnMuYwpAQCAtODQ4LDcgKzg0OCw2IEBACiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9ucyk7CiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9kaXJfb3BlcmF0aW9ucyk7CiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9lbXB0eSk7Ci1FWFBPUlRfU1lNQk9MKGRfYWxsb2NfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9maWxsX3N1cGVyKTsKIEVYUE9SVF9TWU1CT0woc2ltcGxlX2dldGF0dHIpOwogRVhQT1JUX1NZTUJPTChzaW1wbGVfbGluayk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmM0cHJvYy5jIGIvZnMvbG9ja2Qvc3ZjNHByb2MuYwppbmRleCBiZDE3M2E2Li5hNzk2NmVlIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmM0cHJvYy5jCisrKyBiL2ZzL2xvY2tkL3N2YzRwcm9jLmMKQEAgLTExLDEwICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2QvbG9ja2QuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9zaGFyZS5oPgogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNwcm9jLmMgYi9mcy9sb2NrZC9zdmNwcm9jLmMKaW5kZXggZTFkMjhkZC4uNTZjOTUxOSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjcHJvYy5jCisrKyBiL2ZzL2xvY2tkL3N2Y3Byb2MuYwpAQCAtMTEsMTAgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9sb2NrZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL3NoYXJlLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDg3Zjk3YmEuLjY4OTIxZDkgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKiBbRmViLTE5OTcgVC4gU2Nob2ViZWwtVGhldWVyXQogICogRnVuZGFtZW50YWwgY2hhbmdlcyBpbiB0aGUgcGF0aG5hbWUgbG9va3VwIG1lY2hhbmlzbXMgKG5hbWVpKQpAQCAtMTA4LDggKzEwOCw2IEBACiAgKiBhbnkgZXh0cmEgY29udGVudGlvbi4uLgogICovCiAKLXN0YXRpYyBpbnQgX19saW5rX3BhdGhfd2Fsayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7Ci0KIC8qIEluIG9yZGVyIHRvIHJlZHVjZSBzb21lIHJhY2VzLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGRvaW5nIGFkZGl0aW9uYWwKICAqIGNoZWNraW5nIGFuZCBob3BlZnVsbHkgc3BlZWRpbmcgdGhpbmdzIHVwLCB3ZSBjb3B5IGZpbGVuYW1lcyB0byB0aGUKICAqIGtlcm5lbCBkYXRhIHNwYWNlIGJlZm9yZSB1c2luZyB0aGVtLi4KQEAgLTQxNCwzNiArNDEyLDU1IEBACiB9CiAKIC8qCi0gKiBJbnRlcm5hbCBsb29rdXAoKSB1c2luZyB0aGUgbmV3IGdlbmVyaWMgZGNhY2hlLgotICogU01QLXNhZmUKKyAqIGZvcmNlX3JldmFsX3BhdGggLSBmb3JjZSByZXZhbGlkYXRpb24gb2YgYSBkZW50cnkKKyAqCisgKiBJbiBzb21lIHNpdHVhdGlvbnMgdGhlIHBhdGggd2Fsa2luZyBjb2RlIHdpbGwgdHJ1c3QgZGVudHJpZXMgd2l0aG91dAorICogcmV2YWxpZGF0aW5nIHRoZW0uIFRoaXMgY2F1c2VzIHByb2JsZW1zIGZvciBmaWxlc3lzdGVtcyB0aGF0IGRlcGVuZCBvbgorICogZF9yZXZhbGlkYXRlIHRvIGhhbmRsZSBmaWxlIG9wZW5zIChlLmcuIE5GU3Y0KS4gV2hlbiBGU19SRVZBTF9ET1QgaXMgc2V0CisgKiAod2hpY2ggaW5kaWNhdGVzIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGRlbnRyeSB0byBnbyBzdGFsZSksIGZvcmNlCisgKiBhIGRfcmV2YWxpZGF0ZSBjYWxsIGJlZm9yZSBwcm9jZWVkaW5nLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgcmV2YWxpZGF0aW9uIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgcmV2YWxpZGF0aW9uIGZhaWxzLAorICogZWl0aGVyIHJldHVybiB0aGUgZXJyb3IgcmV0dXJuZWQgYnkgZF9yZXZhbGlkYXRlIG9yIC1FU1RBTEUgaWYgdGhlCisgKiByZXZhbGlkYXRpb24gaXQganVzdCByZXR1cm5lZCAwLiBJZiBkX3JldmFsaWRhdGUgcmV0dXJucyAwLCB3ZSBhdHRlbXB0IHRvCisgKiBpbnZhbGlkYXRlIHRoZSBkZW50cnkuIEl0J3MgdXAgdG8gdGhlIGNhbGxlciB0byBoYW5kbGUgcHV0dGluZyByZWZlcmVuY2VzCisgKiB0byB0aGUgcGF0aCBpZiBuZWNlc3NhcnkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICogY2FjaGVkX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICogcGFyZW50LCBzdHJ1Y3QgcXN0ciAqIG5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIGludAorZm9yY2VfcmV2YWxfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IF9fZF9sb29rdXAocGFyZW50LCBuYW1lKTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgtPmRlbnRyeTsKIAotCS8qIGxvY2tlc3MgX19kX2xvb2t1cCBtYXkgZmFpbCBkdWUgdG8gY29uY3VycmVudCBkX21vdmUoKSAKLQkgKiBpbiBzb21lIHVucmVsYXRlZCBkaXJlY3RvcnksIHNvIHRyeSB3aXRoIGRfbG9va3VwCisJLyoKKwkgKiBvbmx5IGNoZWNrIG9uIGZpbGVzeXN0ZW1zIHdoZXJlIGl0J3MgcG9zc2libGUgZm9yIHRoZSBkZW50cnkgdG8KKwkgKiBiZWNvbWUgc3RhbGUuIEl0J3MgYXNzdW1lZCB0aGF0IGlmIHRoaXMgZmxhZyBpcyBzZXQgdGhlbiB0aGUKKwkgKiBkX3JldmFsaWRhdGUgb3Agd2lsbCBhbHNvIGJlIGRlZmluZWQuCiAJICovCi0JaWYgKCFkZW50cnkpCi0JCWRlbnRyeSA9IGRfbG9va3VwKHBhcmVudCwgbmFtZSk7CisJaWYgKCEoZGVudHJ5LT5kX3NiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfUkVWQUxfRE9UKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkKLQkJZGVudHJ5ID0gZG9fcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwlzdGF0dXMgPSBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwlpZiAoc3RhdHVzID4gMCkKKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gZGVudHJ5OworCWlmICghc3RhdHVzKSB7CisJCWRfaW52YWxpZGF0ZShkZW50cnkpOworCQlzdGF0dXMgPSAtRVNUQUxFOworCX0KKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgotICogU2hvcnQtY3V0IHZlcnNpb24gb2YgcGVybWlzc2lvbigpLCBmb3IgY2FsbGluZyBieQotICogcGF0aF93YWxrKCksIHdoZW4gZGNhY2hlIGxvY2sgaXMgaGVsZC4gIENvbWJpbmVzIHBhcnRzCi0gKiBvZiBwZXJtaXNzaW9uKCkgYW5kIGdlbmVyaWNfcGVybWlzc2lvbigpLCBhbmQgdGVzdHMgT05MWSBmb3IKLSAqIE1BWV9FWEVDIHBlcm1pc3Npb24uCisgKiBTaG9ydC1jdXQgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCksIGZvciBjYWxsaW5nIG9uIGRpcmVjdG9yaWVzCisgKiBkdXJpbmcgcGF0aG5hbWUgcmVzb2x1dGlvbi4gIENvbWJpbmVzIHBhcnRzIG9mIHBlcm1pc3Npb24oKQorICogYW5kIGdlbmVyaWNfcGVybWlzc2lvbigpLCBhbmQgdGVzdHMgT05MWSBmb3IgTUFZX0VYRUMgcGVybWlzc2lvbi4KICAqCiAgKiBJZiBhcHByb3ByaWF0ZSwgY2hlY2sgREFDIG9ubHkuICBJZiBub3QgYXBwcm9wcmlhdGUsIG9yCi0gKiBzaG9ydC1jdXQgREFDIGZhaWxzLCB0aGVuIGNhbGwgcGVybWlzc2lvbigpIHRvIGRvIG1vcmUKKyAqIHNob3J0LWN1dCBEQUMgZmFpbHMsIHRoZW4gY2FsbCAtPnBlcm1pc3Npb24oKSB0byBkbyBtb3JlCiAgKiBjb21wbGV0ZSBwZXJtaXNzaW9uIGNoZWNrLgogICovCi1zdGF0aWMgaW50IGV4ZWNfcGVybWlzc2lvbl9saXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW50IGV4ZWNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWludCByZXQ7CiAKQEAgLTQ2NSw5OSArNDgyLDYgQEAKIAlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOwogfQogCi0vKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiBldmVyeXRoaW5nIGVsc2UgZmFpbHMsIGFuZCB3ZSBhY3R1YWxseSBoYXZlCi0gKiB0byBnbyB0byB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gdG8gZmluZCBvdXQgd2hhdCB3ZSBzaG91bGQgZG8uLgotICoKLSAqIFdlIGdldCB0aGUgZGlyZWN0b3J5IHNlbWFwaG9yZSwgYW5kIGFmdGVyIGdldHRpbmcgdGhhdCB3ZSBhbHNvCi0gKiBtYWtlIHN1cmUgdGhhdCBub2JvZHkgYWRkZWQgdGhlIGVudHJ5IHRvIHRoZSBkY2FjaGUgaW4gdGhlIG1lYW50aW1lLi4KLSAqIFNNUC1zYWZlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICogcmVhbF9sb29rdXAoc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgc3RydWN0IHFzdHIgKiBuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICogcmVzdWx0OwotCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFyZW50LT5kX2lub2RlOwotCi0JbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKLQkvKgotCSAqIEZpcnN0IHJlLWRvIHRoZSBjYWNoZWQgbG9va3VwIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZAotCSAqIHdoaWxlIHdlIHdhaXRlZCBmb3IgdGhlIGRpcmVjdG9yeSBzZW1hcGhvcmUuLgotCSAqCi0JICogRklYTUUhIFRoaXMgY291bGQgdXNlIHZlcnNpb24gbnVtYmVyaW5nIG9yIHNpbWlsYXIgdG8KLQkgKiBhdm9pZCB1bm5lY2Vzc2FyeSBjYWNoZSBsb29rdXBzLgotCSAqCi0JICogVGhlICJkY2FjaGVfbG9jayIgaXMgcHVyZWx5IHRvIHByb3RlY3QgdGhlIFJDVSBsaXN0IHdhbGtlcgotCSAqIGZyb20gY29uY3VycmVudCByZW5hbWVzIGF0IHRoaXMgcG9pbnQgKHdlIG11c3RuJ3QgZ2V0IGZhbHNlCi0JICogbmVnYXRpdmVzIGZyb20gdGhlIFJDVSBsaXN0IHdhbGsgaGVyZSwgdW5saWtlIHRoZSBvcHRpbWlzdGljCi0JICogZmFzdCB3YWxrKS4KLQkgKgotCSAqIHNvIGRvaW5nIGRfbG9va3VwKCkgKHdpdGggc2VxbG9jayksIGluc3RlYWQgb2YgbG9ja2ZyZWUgX19kX2xvb2t1cAotCSAqLwotCXJlc3VsdCA9IGRfbG9va3VwKHBhcmVudCwgbmFtZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCi0JCS8qIERvbid0IGNyZWF0ZSBjaGlsZCBkZW50cnkgZm9yIGEgZGVhZCBkaXJlY3RvcnkuICovCi0JCXJlc3VsdCA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0JCWlmIChJU19ERUFERElSKGRpcikpCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkJZGVudHJ5ID0gZF9hbGxvYyhwYXJlbnQsIG5hbWUpOwotCQlyZXN1bHQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlpZiAoZGVudHJ5KSB7Ci0JCQlyZXN1bHQgPSBkaXItPmlfb3AtPmxvb2t1cChkaXIsIGRlbnRyeSwgbmQpOwotCQkJaWYgKHJlc3VsdCkKLQkJCQlkcHV0KGRlbnRyeSk7Ci0JCQllbHNlCi0JCQkJcmVzdWx0ID0gZGVudHJ5OwotCQl9Ci1vdXRfdW5sb2NrOgotCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoKLQkgKiBVaGh1aCEgTmFzdHkgY2FzZTogdGhlIGNhY2hlIHdhcyByZS1wb3B1bGF0ZWQgd2hpbGUKLQkgKiB3ZSB3YWl0ZWQgb24gdGhlIHNlbWFwaG9yZS4gTmVlZCB0byByZXZhbGlkYXRlLgotCSAqLwotCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKLQlpZiAocmVzdWx0LT5kX29wICYmIHJlc3VsdC0+ZF9vcC0+ZF9yZXZhbGlkYXRlKSB7Ci0JCXJlc3VsdCA9IGRvX3JldmFsaWRhdGUocmVzdWx0LCBuZCk7Ci0JCWlmICghcmVzdWx0KQotCQkJcmVzdWx0ID0gRVJSX1BUUigtRU5PRU5UKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFdyYXBwZXIgdG8gcmV0cnkgcGF0aG5hbWUgcmVzb2x1dGlvbiB3aGVuZXZlciB0aGUgdW5kZXJseWluZwotICogZmlsZSBzeXN0ZW0gcmV0dXJucyBhbiBFU1RBTEUuCi0gKgotICogUmV0cnkgdGhlIHdob2xlIHBhdGggb25jZSwgZm9yY2luZyByZWFsIGxvb2t1cCByZXF1ZXN0cwotICogaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBkY2FjaGUuCi0gKi8KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXN0cnVjdCBwYXRoIHNhdmUgPSBuZC0+cGF0aDsKLQlpbnQgcmVzdWx0OwotCi0JLyogbWFrZSBzdXJlIHRoZSBzdHVmZiB3ZSBzYXZlZCBkb2Vzbid0IGdvIGF3YXkgKi8KLQlwYXRoX2dldCgmc2F2ZSk7Ci0KLQlyZXN1bHQgPSBfX2xpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKLQlpZiAocmVzdWx0ID09IC1FU1RBTEUpIHsKLQkJLyogbmQtPnBhdGggaGFkIGJlZW4gZHJvcHBlZCAqLwotCQluZC0+cGF0aCA9IHNhdmU7Ci0JCXBhdGhfZ2V0KCZuZC0+cGF0aCk7Ci0JCW5kLT5mbGFncyB8PSBMT09LVVBfUkVWQUw7Ci0JCXJlc3VsdCA9IF9fbGlua19wYXRoX3dhbGsobmFtZSwgbmQpOwotCX0KLQotCXBhdGhfcHV0KCZzYXZlKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzZXRfcm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlpZiAoIW5kLT5yb290Lm1udCkgewpAQCAtNTY5LDYgKzQ5Myw4IEBACiAJfQogfQogCitzdGF0aWMgaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX192ZnNfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNvbnN0IGNoYXIgKmxpbmspCiB7CiAJaW50IHJlcyA9IDA7CkBAIC02NDEsMTEgKzU2NywxNCBAQAogCQllcnJvciA9IDA7CiAJCWlmIChzKQogCQkJZXJyb3IgPSBfX3Zmc19mb2xsb3dfbGluayhuZCwgcyk7CisJCWVsc2UgaWYgKG5kLT5sYXN0X3R5cGUgPT0gTEFTVF9CSU5EKSB7CisJCQllcnJvciA9IGZvcmNlX3JldmFsX3BhdGgoJm5kLT5wYXRoLCBuZCk7CisJCQlpZiAoZXJyb3IpCisJCQkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKKwkJfQogCQlpZiAoZGVudHJ5LT5kX2lub2RlLT5pX29wLT5wdXRfbGluaykKIAkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+cHV0X2xpbmsoZGVudHJ5LCBuZCwgY29va2llKTsKIAl9Ci0JcGF0aF9wdXQocGF0aCk7Ci0KIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTY3Miw2ICs2MDEsNyBAQAogCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQrKzsKIAluZC0+ZGVwdGgrKzsKIAllcnIgPSBfX2RvX2ZvbGxvd19saW5rKHBhdGgsIG5kKTsKKwlwYXRoX3B1dChwYXRoKTsKIAljdXJyZW50LT5saW5rX2NvdW50LS07CiAJbmQtPmRlcHRoLS07CiAJcmV0dXJuIGVycjsKQEAgLTc5Nyw4ICs3MjcsMTkgQEAKIAkJICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IG5kLT5wYXRoLm1udDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBfX2RfbG9va3VwKG5kLT5wYXRoLmRlbnRyeSwgbmFtZSk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcGFyZW50OworCXN0cnVjdCBpbm9kZSAqZGlyOworCS8qCisJICogU2VlIGlmIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSBtaWdodCB3YW50CisJICogdG8gdXNlIGl0cyBvd24gaGFzaC4uCisJICovCisJaWYgKG5kLT5wYXRoLmRlbnRyeS0+ZF9vcCAmJiBuZC0+cGF0aC5kZW50cnktPmRfb3AtPmRfaGFzaCkgeworCQlpbnQgZXJyID0gbmQtPnBhdGguZGVudHJ5LT5kX29wLT5kX2hhc2gobmQtPnBhdGguZGVudHJ5LCBuYW1lKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAorCWRlbnRyeSA9IF9fZF9sb29rdXAobmQtPnBhdGguZGVudHJ5LCBuYW1lKTsKIAlpZiAoIWRlbnRyeSkKIAkJZ290byBuZWVkX2xvb2t1cDsKIAlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKQpAQCAtODEwLDcgKzc1MSw1OSBAQAogCXJldHVybiAwOwogCiBuZWVkX2xvb2t1cDoKLQlkZW50cnkgPSByZWFsX2xvb2t1cChuZC0+cGF0aC5kZW50cnksIG5hbWUsIG5kKTsKKwlwYXJlbnQgPSBuZC0+cGF0aC5kZW50cnk7CisJZGlyID0gcGFyZW50LT5kX2lub2RlOworCisJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKKwkvKgorCSAqIEZpcnN0IHJlLWRvIHRoZSBjYWNoZWQgbG9va3VwIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZAorCSAqIHdoaWxlIHdlIHdhaXRlZCBmb3IgdGhlIGRpcmVjdG9yeSBzZW1hcGhvcmUuLgorCSAqCisJICogRklYTUUhIFRoaXMgY291bGQgdXNlIHZlcnNpb24gbnVtYmVyaW5nIG9yIHNpbWlsYXIgdG8KKwkgKiBhdm9pZCB1bm5lY2Vzc2FyeSBjYWNoZSBsb29rdXBzLgorCSAqCisJICogVGhlICJkY2FjaGVfbG9jayIgaXMgcHVyZWx5IHRvIHByb3RlY3QgdGhlIFJDVSBsaXN0IHdhbGtlcgorCSAqIGZyb20gY29uY3VycmVudCByZW5hbWVzIGF0IHRoaXMgcG9pbnQgKHdlIG11c3RuJ3QgZ2V0IGZhbHNlCisJICogbmVnYXRpdmVzIGZyb20gdGhlIFJDVSBsaXN0IHdhbGsgaGVyZSwgdW5saWtlIHRoZSBvcHRpbWlzdGljCisJICogZmFzdCB3YWxrKS4KKwkgKgorCSAqIHNvIGRvaW5nIGRfbG9va3VwKCkgKHdpdGggc2VxbG9jayksIGluc3RlYWQgb2YgbG9ja2ZyZWUgX19kX2xvb2t1cAorCSAqLworCWRlbnRyeSA9IGRfbG9va3VwKHBhcmVudCwgbmFtZSk7CisJaWYgKCFkZW50cnkpIHsKKwkJc3RydWN0IGRlbnRyeSAqbmV3OworCisJCS8qIERvbid0IGNyZWF0ZSBjaGlsZCBkZW50cnkgZm9yIGEgZGVhZCBkaXJlY3RvcnkuICovCisJCWRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7CisJCWlmIChJU19ERUFERElSKGRpcikpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJbmV3ID0gZF9hbGxvYyhwYXJlbnQsIG5hbWUpOworCQlkZW50cnkgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlpZiAobmV3KSB7CisJCQlkZW50cnkgPSBkaXItPmlfb3AtPmxvb2t1cChkaXIsIG5ldywgbmQpOworCQkJaWYgKGRlbnRyeSkKKwkJCQlkcHV0KG5ldyk7CisJCQllbHNlCisJCQkJZGVudHJ5ID0gbmV3OworCQl9CitvdXRfdW5sb2NrOgorCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisJCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJCWdvdG8gZmFpbDsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogVWhodWghIE5hc3R5IGNhc2U6IHRoZSBjYWNoZSB3YXMgcmUtcG9wdWxhdGVkIHdoaWxlCisJICogd2Ugd2FpdGVkIG9uIHRoZSBzZW1hcGhvcmUuIE5lZWQgdG8gcmV2YWxpZGF0ZS4KKwkgKi8KKwltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisJaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkgeworCQlkZW50cnkgPSBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCQlpZiAoIWRlbnRyeSkKKwkJCWRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7CisJfQogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBmYWlsOwogCWdvdG8gZG9uZTsKQEAgLTgzNSw3ICs4MjgsNyBAQAogICogUmV0dXJucyAwIGFuZCBuZCB3aWxsIGhhdmUgdmFsaWQgZGVudHJ5IGFuZCBtbnQgb24gc3VjY2Vzcy4KICAqIFJldHVybnMgZXJyb3IgYW5kIGRyb3BzIHJlZmVyZW5jZSB0byBpbnB1dCBuYW1laSBkYXRhIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgX19saW5rX3BhdGhfd2Fsayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyBpbnQgbGlua19wYXRoX3dhbGsoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJc3RydWN0IHBhdGggbmV4dDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtODU4LDcgKzg1MSw3IEBACiAJCXVuc2lnbmVkIGludCBjOwogCiAJCW5kLT5mbGFncyB8PSBMT09LVVBfQ09OVElOVUU7Ci0JCWVyciA9IGV4ZWNfcGVybWlzc2lvbl9saXRlKGlub2RlKTsKKwkJZXJyID0gZXhlY19wZXJtaXNzaW9uKGlub2RlKTsKICAJCWlmIChlcnIpCiAJCQlicmVhazsKIApAQCAtODk4LDE2ICs4OTEsNiBAQAogCQkJY2FzZSAxOgogCQkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qCi0JCSAqIFNlZSBpZiB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gbWlnaHQgd2FudAotCQkgKiB0byB1c2UgaXRzIG93biBoYXNoLi4KLQkJICovCi0JCWlmIChuZC0+cGF0aC5kZW50cnktPmRfb3AgJiYgbmQtPnBhdGguZGVudHJ5LT5kX29wLT5kX2hhc2gpIHsKLQkJCWVyciA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9vcC0+ZF9oYXNoKG5kLT5wYXRoLmRlbnRyeSwKLQkJCQkJCQkgICAgJnRoaXMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJYnJlYWs7Ci0JCX0KIAkJLyogVGhpcyBkb2VzIHRoZSBhY3R1YWwgbG9va3Vwcy4uICovCiAJCWVyciA9IGRvX2xvb2t1cChuZCwgJnRoaXMsICZuZXh0KTsKIAkJaWYgKGVycikKQEAgLTk1MywxMiArOTM2LDYgQEAKIAkJCWNhc2UgMToKIAkJCQlnb3RvIHJldHVybl9yZXZhbDsKIAkJfQotCQlpZiAobmQtPnBhdGguZGVudHJ5LT5kX29wICYmIG5kLT5wYXRoLmRlbnRyeS0+ZF9vcC0+ZF9oYXNoKSB7Ci0JCQllcnIgPSBuZC0+cGF0aC5kZW50cnktPmRfb3AtPmRfaGFzaChuZC0+cGF0aC5kZW50cnksCi0JCQkJCQkJICAgICZ0aGlzKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCWJyZWFrOwotCQl9CiAJCWVyciA9IGRvX2xvb2t1cChuZCwgJnRoaXMsICZuZXh0KTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwpAQCAtMTAxNyw4ICs5OTQsMjcgQEAKIAogc3RhdGljIGludCBwYXRoX3dhbGsoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CisJc3RydWN0IHBhdGggc2F2ZSA9IG5kLT5wYXRoOworCWludCByZXN1bHQ7CisKIAljdXJyZW50LT50b3RhbF9saW5rX2NvdW50ID0gMDsKLQlyZXR1cm4gbGlua19wYXRoX3dhbGsobmFtZSwgbmQpOworCisJLyogbWFrZSBzdXJlIHRoZSBzdHVmZiB3ZSBzYXZlZCBkb2Vzbid0IGdvIGF3YXkgKi8KKwlwYXRoX2dldCgmc2F2ZSk7CisKKwlyZXN1bHQgPSBsaW5rX3BhdGhfd2FsayhuYW1lLCBuZCk7CisJaWYgKHJlc3VsdCA9PSAtRVNUQUxFKSB7CisJCS8qIG5kLT5wYXRoIGhhZCBiZWVuIGRyb3BwZWQgKi8KKwkJY3VycmVudC0+dG90YWxfbGlua19jb3VudCA9IDA7CisJCW5kLT5wYXRoID0gc2F2ZTsKKwkJcGF0aF9nZXQoJm5kLT5wYXRoKTsKKwkJbmQtPmZsYWdzIHw9IExPT0tVUF9SRVZBTDsKKwkJcmVzdWx0ID0gbGlua19wYXRoX3dhbGsobmFtZSwgbmQpOworCX0KKworCXBhdGhfcHV0KCZzYXZlKTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgcGF0aF9pbml0KGludCBkZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IG5hbWVpZGF0YSAqbmQpCkBAIC0xMTQxLDM2ICsxMTM3LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKioKLSAqIHBhdGhfbG9va3VwX29wZW4gLSBsb29rdXAgYSBmaWxlIHBhdGggd2l0aCBvcGVuIGludGVudAotICogQGRmZDogdGhlIGRpcmVjdG9yeSB0byB1c2UgYXMgYmFzZSwgb3IgQVRfRkRDV0QKLSAqIEBuYW1lOiBwb2ludGVyIHRvIGZpbGUgbmFtZQotICogQGxvb2t1cF9mbGFnczogbG9va3VwIGludGVudCBmbGFncwotICogQG5kOiBwb2ludGVyIHRvIG5hbWVpZGF0YQotICogQG9wZW5fZmxhZ3M6IG9wZW4gaW50ZW50IGZsYWdzCi0gKi8KLXN0YXRpYyBpbnQgcGF0aF9sb29rdXBfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyICpuYW1lLAotCQl1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZ3MpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbHAgPSBnZXRfZW1wdHlfZmlscCgpOwotCWludCBlcnI7Ci0KLQlpZiAoZmlscCA9PSBOVUxMKQotCQlyZXR1cm4gLUVORklMRTsKLQluZC0+aW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7Ci0JbmQtPmludGVudC5vcGVuLmZsYWdzID0gb3Blbl9mbGFnczsKLQluZC0+aW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSAwOwotCWVyciA9IGRvX3BhdGhfbG9va3VwKGRmZCwgbmFtZSwgbG9va3VwX2ZsYWdzfExPT0tVUF9PUEVOLCBuZCk7Ci0JaWYgKElTX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSkpIHsKLQkJaWYgKGVyciA9PSAwKSB7Ci0JCQllcnIgPSBQVFJfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKTsKLQkJCXBhdGhfcHV0KCZuZC0+cGF0aCk7Ci0JCX0KLQl9IGVsc2UgaWYgKGVyciAhPSAwKQotCQlyZWxlYXNlX29wZW5faW50ZW50KG5kKTsKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19sb29rdXBfaGFzaChzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJc3RydWN0IGRlbnRyeSAqYmFzZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CkBAIC0xMTkxLDcgKzExNTcsMTcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCWRlbnRyeSA9IGNhY2hlZF9sb29rdXAoYmFzZSwgbmFtZSwgbmQpOworCWRlbnRyeSA9IF9fZF9sb29rdXAoYmFzZSwgbmFtZSk7CisKKwkvKiBsb2NrZXNzIF9fZF9sb29rdXAgbWF5IGZhaWwgZHVlIHRvIGNvbmN1cnJlbnQgZF9tb3ZlKCkKKwkgKiBpbiBzb21lIHVucmVsYXRlZCBkaXJlY3RvcnksIHNvIHRyeSB3aXRoIGRfbG9va3VwCisJICovCisJaWYgKCFkZW50cnkpCisJCWRlbnRyeSA9IGRfbG9va3VwKGJhc2UsIG5hbWUpOworCisJaWYgKGRlbnRyeSAmJiBkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpCisJCWRlbnRyeSA9IGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisKIAlpZiAoIWRlbnRyeSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpuZXc7CiAKQEAgLTEyMjMsNyArMTE5OSw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQtPnBhdGguZGVudHJ5LT5kX2lub2RlLCBNQVlfRVhFQyk7CisJZXJyID0gZXhlY19wZXJtaXNzaW9uKG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAlyZXR1cm4gX19sb29rdXBfaGFzaCgmbmQtPmxhc3QsIG5kLT5wYXRoLmRlbnRyeSwgbmQpOwpAQCAtMTI3Myw3ICsxMjQ5LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JZXJyID0gaW5vZGVfcGVybWlzc2lvbihiYXNlLT5kX2lub2RlLCBNQVlfRVhFQyk7CisJZXJyID0gZXhlY19wZXJtaXNzaW9uKGJhc2UtPmRfaW5vZGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJcmV0dXJuIF9fbG9va3VwX2hhc2goJnRoaXMsIGJhc2UsIE5VTEwpOwpAQCAtMTUxMSw2OSArMTQ4Nyw0NSBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBpbWFfcGF0aF9jaGVjayhwYXRoLCBhY2NfbW9kZSA/Ci0JCQkgICAgICAgYWNjX21vZGUgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykgOgotCQkJICAgICAgIEFDQ19NT0RFKGZsYWcpICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFKSwKLQkJCSAgICAgICBJTUFfQ09VTlRfVVBEQVRFKTsKLQotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwogCS8qCiAJICogQW4gYXBwZW5kLW9ubHkgZmlsZSBtdXN0IGJlIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSBmb3Igd3JpdGluZy4KIAkgKi8KIAlpZiAoSVNfQVBQRU5EKGlub2RlKSkgewotCQllcnJvciA9IC1FUEVSTTsKIAkJaWYgICgoZmxhZyAmIEZNT0RFX1dSSVRFKSAmJiAhKGZsYWcgJiBPX0FQUEVORCkpCi0JCQlnb3RvIGVycl9vdXQ7CisJCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoZmxhZyAmIE9fVFJVTkMpCi0JCQlnb3RvIGVycl9vdXQ7CisJCQlyZXR1cm4gLUVQRVJNOwogCX0KIAogCS8qIE9fTk9BVElNRSBjYW4gb25seSBiZSBzZXQgYnkgdGhlIG93bmVyIG9yIHN1cGVydXNlciAqLwotCWlmIChmbGFnICYgT19OT0FUSU1FKQotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpIHsKLQkJCWVycm9yID0gLUVQRVJNOwotCQkJZ290byBlcnJfb3V0OwotCQl9CisJaWYgKGZsYWcgJiBPX05PQVRJTUUgJiYgIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCXJldHVybiAtRVBFUk07CiAKIAkvKgogCSAqIEVuc3VyZSB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgbGVhc2VzIG9uIHRoZSBmaWxlLgogCSAqLwotCWVycm9yID0gYnJlYWtfbGVhc2UoaW5vZGUsIGZsYWcpOworCXJldHVybiBicmVha19sZWFzZShpbm9kZSwgZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLT5kZW50cnktPmRfaW5vZGU7CisJaW50IGVycm9yID0gZ2V0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlpZiAoZmxhZyAmIE9fVFJVTkMpIHsKLQkJZXJyb3IgPSBnZXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBlcnJfb3V0OwotCi0JCS8qCi0JCSAqIFJlZnVzZSB0byB0cnVuY2F0ZSBmaWxlcyB3aXRoIG1hbmRhdG9yeSBsb2NrcyBoZWxkIG9uIHRoZW0uCi0JCSAqLwotCQllcnJvciA9IGxvY2tzX3ZlcmlmeV9sb2NrZWQoaW5vZGUpOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHBhdGgsIDAsCi0JCQkJCSAgICAgICBBVFRSX01USU1FfEFUVFJfQ1RJTUV8QVRUUl9PUEVOKTsKLQkJaWYgKCFlcnJvcikgewotCQkJdmZzX2RxX2luaXQoaW5vZGUpOwotCi0JCQllcnJvciA9IGRvX3RydW5jYXRlKGRlbnRyeSwgMCwKLQkJCQkJICAgIEFUVFJfTVRJTUV8QVRUUl9DVElNRXxBVFRSX09QRU4sCi0JCQkJCSAgICBOVUxMKTsKLQkJfQotCQlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBlcnJfb3V0OwotCX0gZWxzZQotCQlpZiAoZmxhZyAmIEZNT0RFX1dSSVRFKQotCQkJdmZzX2RxX2luaXQoaW5vZGUpOwotCi0JcmV0dXJuIDA7Ci1lcnJfb3V0OgotCWltYV9jb3VudHNfcHV0KHBhdGgsIGFjY19tb2RlID8KLQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpIDoKLQkJICAgICAgIEFDQ19NT0RFKGZsYWcpICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFKSk7CisJCXJldHVybiBlcnJvcjsKKwkvKgorCSAqIFJlZnVzZSB0byB0cnVuY2F0ZSBmaWxlcyB3aXRoIG1hbmRhdG9yeSBsb2NrcyBoZWxkIG9uIHRoZW0uCisJICovCisJZXJyb3IgPSBsb2Nrc192ZXJpZnlfbG9ja2VkKGlub2RlKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUocGF0aCwgMCwKKwkJCQkgICAgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTik7CisJaWYgKCFlcnJvcikgeworCQllcnJvciA9IGRvX3RydW5jYXRlKHBhdGgtPmRlbnRyeSwgMCwKKwkJCQkgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTiwKKwkJCQkgICAgTlVMTCk7CisJfQorCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTYyOCw3ICsxNTgwLDcgQEAKIAlyZXR1cm4gZmxhZzsKIH0KIAotc3RhdGljIGludCBvcGVuX3dpbGxfd3JpdGVfdG9fZnMoaW50IGZsYWcsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW50IG9wZW5fd2lsbF90cnVuY2F0ZShpbnQgZmxhZywgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAkvKgogCSAqIFdlJ2xsIG5ldmVyIHdyaXRlIHRvIHRoZSBmcyB1bmRlcmx5aW5nCkBAIC0xNjUwLDEwICsxNjAyLDEwIEBACiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IHBhdGggcGF0aDsKKwlzdHJ1Y3QgcGF0aCBwYXRoLCBzYXZlOwogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgY291bnQgPSAwOwotCWludCB3aWxsX3dyaXRlOworCWludCB3aWxsX3RydW5jYXRlOwogCWludCBmbGFnID0gb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpOwogCiAJLyoKQEAgLTE2ODEsOCArMTYzMywyMyBAQAogCSAqIFRoZSBzaW1wbGVzdCBjYXNlIC0ganVzdCBhIHBsYWluIGxvb2t1cC4KIAkgKi8KIAlpZiAoIShmbGFnICYgT19DUkVBVCkpIHsKLQkJZXJyb3IgPSBwYXRoX2xvb2t1cF9vcGVuKGRmZCwgcGF0aG5hbWUsIGxvb2t1cF9mbGFncyhmbGFnKSwKLQkJCQkJICZuZCwgZmxhZyk7CisJCWZpbHAgPSBnZXRfZW1wdHlfZmlscCgpOworCisJCWlmIChmaWxwID09IE5VTEwpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5GSUxFKTsKKwkJbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7CisJCWZpbHAtPmZfZmxhZ3MgPSBvcGVuX2ZsYWc7CisJCW5kLmludGVudC5vcGVuLmZsYWdzID0gZmxhZzsKKwkJbmQuaW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSAwOworCQllcnJvciA9IGRvX3BhdGhfbG9va3VwKGRmZCwgcGF0aG5hbWUsCisJCQkJCWxvb2t1cF9mbGFncyhmbGFnKXxMT09LVVBfT1BFTiwgJm5kKTsKKwkJaWYgKElTX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKSkgeworCQkJaWYgKGVycm9yID09IDApIHsKKwkJCQllcnJvciA9IFBUUl9FUlIobmQuaW50ZW50Lm9wZW4uZmlsZSk7CisJCQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQkJfQorCQl9IGVsc2UgaWYgKGVycm9yKQorCQkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJCWdvdG8gb2s7CkBAIC0xNzE3LDYgKzE2ODQsNyBAQAogCWlmIChmaWxwID09IE5VTEwpCiAJCWdvdG8gZXhpdF9wYXJlbnQ7CiAJbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7CisJZmlscC0+Zl9mbGFncyA9IG9wZW5fZmxhZzsKIAluZC5pbnRlbnQub3Blbi5mbGFncyA9IGZsYWc7CiAJbmQuaW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSBtb2RlOwogCWRpciA9IG5kLnBhdGguZGVudHJ5OwpAQCAtMTc1NywxNCArMTcyNSwxOCBAQAogCQkJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOwogCQkJZ290byBleGl0OwogCQl9Ci0JCWZpbHAgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIG9wZW5fZmxhZyk7Ci0JCWlmIChJU19FUlIoZmlscCkpCi0JCQlpbWFfY291bnRzX3B1dCgmbmQucGF0aCwKLQkJCQkgICAgICAgYWNjX21vZGUgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfAotCQkJCQkJICAgTUFZX0VYRUMpKTsKKwkJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCk7CiAJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJaWYgKG5kLnJvb3QubW50KQogCQkJcGF0aF9wdXQoJm5kLnJvb3QpOworCQlpZiAoIUlTX0VSUihmaWxwKSkgeworCQkJZXJyb3IgPSBpbWFfcGF0aF9jaGVjaygmZmlscC0+Zl9wYXRoLCBmaWxwLT5mX21vZGUgJgorCQkJCSAgICAgICAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpOworCQkJaWYgKGVycm9yKSB7CisJCQkJZnB1dChmaWxwKTsKKwkJCQlmaWxwID0gRVJSX1BUUihlcnJvcik7CisJCQl9CisJCX0KIAkJcmV0dXJuIGZpbHA7CiAJfQogCkBAIC0xNzkyLDcgKzE3NjQsNyBAQAogCiAJcGF0aF90b19uYW1laWRhdGEoJnBhdGgsICZuZCk7CiAJZXJyb3IgPSAtRUlTRElSOwotCWlmIChwYXRoLmRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKHBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCWlmIChTX0lTRElSKHBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlnb3RvIGV4aXQ7CiBvazoKIAkvKgpAQCAtMTgwNSwyOCArMTc3Nyw0NSBAQAogCSAqIGJlIGF2b2lkZWQuIFRha2luZyB0aGlzIG1udCB3cml0ZSBoZXJlCiAJICogZW5zdXJlcyB0aGF0ICgyKSBjYW4gbm90IG9jY3VyLgogCSAqLwotCXdpbGxfd3JpdGUgPSBvcGVuX3dpbGxfd3JpdGVfdG9fZnMoZmxhZywgbmQucGF0aC5kZW50cnktPmRfaW5vZGUpOwotCWlmICh3aWxsX3dyaXRlKSB7CisJd2lsbF90cnVuY2F0ZSA9IG9wZW5fd2lsbF90cnVuY2F0ZShmbGFnLCBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKHdpbGxfdHJ1bmNhdGUpIHsKIAkJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXhpdDsKIAl9CiAJZXJyb3IgPSBtYXlfb3BlbigmbmQucGF0aCwgYWNjX21vZGUsIGZsYWcpOwogCWlmIChlcnJvcikgewotCQlpZiAod2lsbF93cml0ZSkKKwkJaWYgKHdpbGxfdHJ1bmNhdGUpCiAJCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgb3Blbl9mbGFnKTsKLQlpZiAoSVNfRVJSKGZpbHApKQotCQlpbWFfY291bnRzX3B1dCgmbmQucGF0aCwKLQkJCSAgICAgICBhY2NfbW9kZSAmIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSk7CisJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCk7CisJaWYgKCFJU19FUlIoZmlscCkpIHsKKwkJZXJyb3IgPSBpbWFfcGF0aF9jaGVjaygmZmlscC0+Zl9wYXRoLCBmaWxwLT5mX21vZGUgJgorCQkJICAgICAgIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSk7CisJCWlmIChlcnJvcikgeworCQkJZnB1dChmaWxwKTsKKwkJCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKKwkJfQorCX0KKwlpZiAoIUlTX0VSUihmaWxwKSkgeworCQlpZiAoYWNjX21vZGUgJiBNQVlfV1JJVEUpCisJCQl2ZnNfZHFfaW5pdChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisKKwkJaWYgKHdpbGxfdHJ1bmNhdGUpIHsKKwkJCWVycm9yID0gaGFuZGxlX3RydW5jYXRlKCZuZC5wYXRoKTsKKwkJCWlmIChlcnJvcikgeworCQkJCWZwdXQoZmlscCk7CisJCQkJZmlscCA9IEVSUl9QVFIoZXJyb3IpOworCQkJfQorCQl9CisJfQogCS8qCiAJICogSXQgaXMgbm93IHNhZmUgdG8gZHJvcCB0aGUgbW50IHdyaXRlCiAJICogYmVjYXVzZSB0aGUgZmlscCBoYXMgaGFkIGEgd3JpdGUgdGFrZW4KIAkgKiBvbiBpdHMgYmVoYWxmLgogCSAqLwotCWlmICh3aWxsX3dyaXRlKQorCWlmICh3aWxsX3RydW5jYXRlKQogCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CiAJaWYgKG5kLnJvb3QubW50KQogCQlwYXRoX3B1dCgmbmQucm9vdCk7CkBAIC0xODYzLDcgKzE4NTIsMTggQEAKIAllcnJvciA9IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHBhdGguZGVudHJ5LCAmbmQpOwogCWlmIChlcnJvcikKIAkJZ290byBleGl0X2RwdXQ7CisJc2F2ZSA9IG5kLnBhdGg7CisJcGF0aF9nZXQoJnNhdmUpOwogCWVycm9yID0gX19kb19mb2xsb3dfbGluaygmcGF0aCwgJm5kKTsKKwlpZiAoZXJyb3IgPT0gLUVTVEFMRSkgeworCQkvKiBuZC5wYXRoIGhhZCBiZWVuIGRyb3BwZWQgKi8KKwkJbmQucGF0aCA9IHNhdmU7CisJCXBhdGhfZ2V0KCZuZC5wYXRoKTsKKwkJbmQuZmxhZ3MgfD0gTE9PS1VQX1JFVkFMOworCQllcnJvciA9IF9fZG9fZm9sbG93X2xpbmsoJnBhdGgsICZuZCk7CisJfQorCXBhdGhfcHV0KCZzYXZlKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAJaWYgKGVycm9yKSB7CiAJCS8qIERvZXMgc29tZW9uZSB1bmRlcnN0YW5kIGNvZGUgZmxvdyBoZXJlPyBPciBpdCBpcyBvbmx5CiAJCSAqIG1lIHNvIHN0dXBpZD8gQW5hdGhlbWEgdG8gd2hvZXZlciBkZXNpZ25lZCB0aGlzIG5vbi1zZW5zZQpkaWZmIC0tZ2l0IGEvZnMvbmZzL0tjb25maWcgYi9mcy9uZnMvS2NvbmZpZwppbmRleCAyYTc3YmMyLi41OWU1NjczIDEwMDY0NAotLS0gYS9mcy9uZnMvS2NvbmZpZworKysgYi9mcy9uZnMvS2NvbmZpZwpAQCAtOTAsNyArOTAsNyBAQAogCSAgSWYgeW91IHdhbnQgeW91ciBzeXN0ZW0gdG8gbW91bnQgaXRzIHJvb3QgZmlsZSBzeXN0ZW0gdmlhIE5GUywKIAkgIGNob29zZSBZIGhlcmUuICBUaGlzIGlzIGNvbW1vbiBwcmFjdGljZSBmb3IgbWFuYWdpbmcgc3lzdGVtcwogCSAgd2l0aG91dCBsb2NhbCBwZXJtYW5lbnQgc3RvcmFnZS4gIEZvciBkZXRhaWxzLCByZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0Pi4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc3Jvb3QudHh0Pi4KIAogCSAgTW9zdCBwZW9wbGUgc2F5IE4gaGVyZS4KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCAyOTNmYTA1Li43M2FiMjIwIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtNzgsMTEgKzc4LDYgQEAKIAogCXNldF9mcmVlemFibGUoKTsKIAotCS8qCi0JICogRklYTUU6IGRvIHdlIHJlYWxseSBuZWVkIHRvIHJ1biB0aGlzIHVuZGVyIHRoZSBCS0w/IElmIHNvLCBwbGVhc2UKLQkgKiBhZGQgYSBjb21tZW50IGFib3V0IHdoYXQgaXQncyBpbnRlbmRlZCB0byBwcm90ZWN0LgotCSAqLwotCWxvY2tfa2VybmVsKCk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJLyoKIAkJICogTGlzdGVuIGZvciBhIHJlcXVlc3Qgb24gdGhlIHNvY2tldApAQCAtMTA0LDcgKzk5LDYgQEAKIAkJcHJldmVyciA9IGVycjsKIAkJc3ZjX3Byb2Nlc3MocnFzdHApOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MCwxMSArMTU0LDYgQEAKIAogCXNldF9mcmVlemFibGUoKTsKIAotCS8qCi0JICogRklYTUU6IGRvIHdlIHJlYWxseSBuZWVkIHRvIHJ1biB0aGlzIHVuZGVyIHRoZSBCS0w/IElmIHNvLCBwbGVhc2UKLQkgKiBhZGQgYSBjb21tZW50IGFib3V0IHdoYXQgaXQncyBpbnRlbmRlZCB0byBwcm90ZWN0LgotCSAqLwotCWxvY2tfa2VybmVsKCk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJcHJlcGFyZV90b193YWl0KCZzZXJ2LT5zdl9jYl93YWl0cSwgJndxLCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzcGluX2xvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwpAQCAtMTgzLDcgKzE3Miw2IEBACiAJCX0KIAkJZmluaXNoX3dhaXQoJnNlcnYtPnN2X2NiX3dhaXRxLCAmd3EpOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5Nyw2ICszODUsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHN2Y192ZXJzaW9uICpuZnM0X2NhbGxiYWNrX3ZlcnNpb25bXSA9IHsKIAlbMV0gPSAmbmZzNF9jYWxsYmFja192ZXJzaW9uMSwKKwlbNF0gPSAmbmZzNF9jYWxsYmFja192ZXJzaW9uNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3N0YXQgbmZzNF9jYWxsYmFja19zdGF0czsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5oIGIvZnMvbmZzL2NhbGxiYWNrLmgKaW5kZXggMDdiYWE4Mi4uZDQwMzZiZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmgKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmgKQEAgLTEwNiw2ICsxMDYsMTkgQEAKIGV4dGVybiB1bnNpZ25lZCBuZnM0X2NhbGxiYWNrX3NlcXVlbmNlKHN0cnVjdCBjYl9zZXF1ZW5jZWFyZ3MgKmFyZ3MsCiAJCQkJICAgICAgIHN0cnVjdCBjYl9zZXF1ZW5jZXJlcyAqcmVzKTsKIAorZXh0ZXJuIGludCBuZnM0MV92YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLAorCQkJCQkgICAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCk7CisKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfUkRBVEFfRExHCTAKKyNkZWZpbmUgUkNBNF9UWVBFX01BU0tfV0RBVEFfRExHCTEKKworc3RydWN0IGNiX3JlY2FsbGFueWFyZ3MgeworCXN0cnVjdCBzb2NrYWRkcgkqY3JhYV9hZGRyOworCXVpbnQzMl90CWNyYWFfb2Jqc190b19rZWVwOworCXVpbnQzMl90CWNyYWFfdHlwZV9tYXNrOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIG5mczRfY2FsbGJhY2tfcmVjYWxsYW55KHN0cnVjdCBjYl9yZWNhbGxhbnlhcmdzICphcmdzLCB2b2lkICpkdW1teSk7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIGV4dGVybiBfX2JlMzIgbmZzNF9jYWxsYmFja19nZXRhdHRyKHN0cnVjdCBjYl9nZXRhdHRyYXJncyAqYXJncywgc3RydWN0IGNiX2dldGF0dHJyZXMgKnJlcyk7CkBAIC0xMTQsOCArMTI3LDkgQEAKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiBleHRlcm4gaW50IG5mc19jYWxsYmFja191cCh1MzIgbWlub3J2ZXJzaW9uLCBzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOwogZXh0ZXJuIHZvaWQgbmZzX2NhbGxiYWNrX2Rvd24oaW50IG1pbm9ydmVyc2lvbik7CitleHRlcm4gaW50IG5mczRfdmFsaWRhdGVfZGVsZWdhdGlvbl9zdGF0ZWlkKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbiwKKwkJCQkJICAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCk7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNCAqLwotCiAvKgogICogbmZzNDE6IENhbGxiYWNrcyBhcmUgZXhwZWN0ZWQgdG8gbm90IGNhdXNlIHN1YnN0YW50aWFsIGxhdGVuY3ksCiAgKiBzbyB3ZSBsaW1pdCB0aGVpciBjb25jdXJyZW5jeSB0byAxIGJ5IHNldHRpbmcgdXAgdGhlIG1heGltdW0gbnVtYmVyCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCBiN2RhMWY1Li5kZWZhOWI0IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTYxLDYgKzYxLDE2IEBACiAJcmV0dXJuIHJlcy0+c3RhdHVzOwogfQogCitzdGF0aWMgaW50ICgqbmZzX3ZhbGlkYXRlX2RlbGVnYXRpb25fc3RhdGVpZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKSkoc3RydWN0IG5mc19kZWxlZ2F0aW9uICosIGNvbnN0IG5mczRfc3RhdGVpZCAqKQoreworI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQorCWlmIChjbHAtPmNsX21pbm9ydmVyc2lvbiA+IDApCisJCXJldHVybiBuZnM0MV92YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQ7CisjZW5kaWYKKwlyZXR1cm4gbmZzNF92YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQ7Cit9CisKKwogX19iZTMyIG5mczRfY2FsbGJhY2tfcmVjYWxsKHN0cnVjdCBjYl9yZWNhbGxhcmdzICphcmdzLCB2b2lkICpkdW1teSkKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwpAQCAtODEsNyArOTEsOCBAQAogCQlpbm9kZSA9IG5mc19kZWxlZ2F0aW9uX2ZpbmRfaW5vZGUoY2xwLCAmYXJncy0+ZmgpOwogCQlpZiAoaW5vZGUgIT0gTlVMTCkgewogCQkJLyogU2V0IHVwIGEgaGVscGVyIHRocmVhZCB0byBhY3R1YWxseSByZXR1cm4gdGhlIGRlbGVnYXRpb24gKi8KLQkJCXN3aXRjaChuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsICZhcmdzLT5zdGF0ZWlkKSkgeworCQkJc3dpdGNoIChuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsICZhcmdzLT5zdGF0ZWlkLAorCQkJCQkJCQkgIG5mc192YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQoY2xwKSkpIHsKIAkJCQljYXNlIDA6CiAJCQkJCXJlcyA9IDA7CiAJCQkJCWJyZWFrOwpAQCAtMTAyLDggKzExMywzMSBAQAogCXJldHVybiByZXM7CiB9CiAKK2ludCBuZnM0X3ZhbGlkYXRlX2RlbGVnYXRpb25fc3RhdGVpZChzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24sIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkKK3sKKwlpZiAoZGVsZWdhdGlvbiA9PSBOVUxMIHx8IG1lbWNtcChkZWxlZ2F0aW9uLT5zdGF0ZWlkLmRhdGEsIHN0YXRlaWQtPmRhdGEsCisJCQkJCSBzaXplb2YoZGVsZWdhdGlvbi0+c3RhdGVpZC5kYXRhKSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKIAoraW50IG5mczQxX3ZhbGlkYXRlX2RlbGVnYXRpb25fc3RhdGVpZChzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24sIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkKK3sKKwlpZiAoZGVsZWdhdGlvbiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIHNlcWlkIGlzIDQtYnl0ZXMgbG9uZyAqLworCWlmICgoKHUzMiAqKSAmc3RhdGVpZC0+ZGF0YSlbMF0gIT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKG1lbWNtcCgmZGVsZWdhdGlvbi0+c3RhdGVpZC5kYXRhWzRdLCAmc3RhdGVpZC0+ZGF0YVs0XSwKKwkJICAgc2l6ZW9mKHN0YXRlaWQtPmRhdGEpLTQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAvKgogICogVmFsaWRhdGUgdGhlIHNlcXVlbmNlSUQgc2VudCBieSB0aGUgc2VydmVyLgogICogUmV0dXJuIHN1Y2Nlc3MgaWYgdGhlIHNlcXVlbmNlSUQgaXMgb25lIG1vcmUgdGhhbiB3aGF0IHdlIGxhc3Qgc2F3IG9uCkBAIC0yMjcsNCArMjYxLDMyIEBACiAJcmV0dXJuIHJlcy0+Y3NyX3N0YXR1czsKIH0KIAordW5zaWduZWQgbmZzNF9jYWxsYmFja19yZWNhbGxhbnkoc3RydWN0IGNiX3JlY2FsbGFueWFyZ3MgKmFyZ3MsIHZvaWQgKmR1bW15KQoreworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CisJaW50IHN0YXR1czsKKwlmbW9kZV90IGZsYWdzID0gMDsKKworCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfT1BfTk9UX0lOX1NFU1NJT04pOworCWNscCA9IG5mc19maW5kX2NsaWVudChhcmdzLT5jcmFhX2FkZHIsIDQpOworCWlmIChjbHAgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlkcHJpbnRrKCJORlM6IFJFQ0FMTF9BTlkgY2FsbGJhY2sgcmVxdWVzdCBmcm9tICVzXG4iLAorCQlycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9BRERSKSk7CisKKwlpZiAodGVzdF9iaXQoUkNBNF9UWVBFX01BU0tfUkRBVEFfRExHLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKQorCQkgICAgICZhcmdzLT5jcmFhX3R5cGVfbWFzaykpCisJCWZsYWdzID0gRk1PREVfUkVBRDsKKwlpZiAodGVzdF9iaXQoUkNBNF9UWVBFX01BU0tfV0RBVEFfRExHLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKQorCQkgICAgICZhcmdzLT5jcmFhX3R5cGVfbWFzaykpCisJCWZsYWdzIHw9IEZNT0RFX1dSSVRFOworCisJaWYgKGZsYWdzKQorCQluZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9uX3R5cGVzKGNscCwgZmxhZ3MpOworCXN0YXR1cyA9IGh0b25sKE5GUzRfT0spOworb3V0OgorCWRwcmludGsoIiVzOiBleGl0IHdpdGggc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBudG9obChzdGF0dXMpKTsKKwlyZXR1cm4gc3RhdHVzOworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCmluZGV4IDc2YjBhYTBmLi44ZTFhMjUxIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAjZGVmaW5lIENCX09QX1NFUVVFTkNFX1JFU19NQVhTWgkoQ0JfT1BfSERSX1JFU19NQVhTWiArIFwKIAkJCQkJNCArIDEgKyAzKQorI2RlZmluZSBDQl9PUF9SRUNBTExBTllfUkVTX01BWFNaCShDQl9PUF9IRFJfUkVTX01BWFNaKQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWSBORlNEQkdfQ0FMTEJBQ0sKQEAgLTMyNiw2ICszMjcsMjUgQEAKIAlnb3RvIG91dDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGRlY29kZV9yZWNhbGxhbnlfYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJCSAgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICAgc3RydWN0IGNiX3JlY2FsbGFueWFyZ3MgKmFyZ3MpCit7CisJdWludDMyX3QgKnA7CisKKwlhcmdzLT5jcmFhX2FkZHIgPSBzdmNfYWRkcihycXN0cCk7CisJcCA9IHJlYWRfYnVmKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KHAgPT0gTlVMTCkpCisJCXJldHVybiBodG9ubChORlM0RVJSX0JBRFhEUik7CisJYXJncy0+Y3JhYV9vYmpzX3RvX2tlZXAgPSBudG9obCgqcCsrKTsKKwlwID0gcmVhZF9idWYoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJcmV0dXJuIGh0b25sKE5GUzRFUlJfQkFEWERSKTsKKwlhcmdzLT5jcmFhX3R5cGVfbWFzayA9IG50b2hsKCpwKTsKKworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0YXRpYyBfX2JlMzIgZW5jb2RlX3N0cmluZyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIpCkBAIC01MzMsNiArNTUzLDcgQEAKIAljYXNlIE9QX0NCX0dFVEFUVFI6CiAJY2FzZSBPUF9DQl9SRUNBTEw6CiAJY2FzZSBPUF9DQl9TRVFVRU5DRToKKwljYXNlIE9QX0NCX1JFQ0FMTF9BTlk6CiAJCSpvcCA9ICZjYWxsYmFja19vcHNbb3BfbnJdOwogCQlicmVhazsKIApAQCAtNTQwLDcgKzU2MSw2IEBACiAJY2FzZSBPUF9DQl9OT1RJRllfREVWSUNFSUQ6CiAJY2FzZSBPUF9DQl9OT1RJRlk6CiAJY2FzZSBPUF9DQl9QVVNIX0RFTEVHOgotCWNhc2UgT1BfQ0JfUkVDQUxMX0FOWToKIAljYXNlIE9QX0NCX1JFQ0FMTEFCTEVfT0JKX0FWQUlMOgogCWNhc2UgT1BfQ0JfUkVDQUxMX1NMT1Q6CiAJY2FzZSBPUF9DQl9XQU5UU19DQU5DRUxMRUQ6CkBAIC02ODgsNiArNzA4LDExIEBACiAJCS5lbmNvZGVfcmVzID0gKGNhbGxiYWNrX2VuY29kZV9yZXNfdCllbmNvZGVfY2Jfc2VxdWVuY2VfcmVzLAogCQkucmVzX21heHNpemUgPSBDQl9PUF9TRVFVRU5DRV9SRVNfTUFYU1osCiAJfSwKKwlbT1BfQ0JfUkVDQUxMX0FOWV0gPSB7CisJCS5wcm9jZXNzX29wID0gKGNhbGxiYWNrX3Byb2Nlc3Nfb3BfdCluZnM0X2NhbGxiYWNrX3JlY2FsbGFueSwKKwkJLmRlY29kZV9hcmdzID0gKGNhbGxiYWNrX2RlY29kZV9hcmdfdClkZWNvZGVfcmVjYWxsYW55X2FyZ3MsCisJCS5yZXNfbWF4c2l6ZSA9IENCX09QX1JFQ0FMTEFOWV9SRVNfTUFYU1osCisJfSwKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIH07CiAKQEAgLTcxOCwzICs3NDMsMTAgQEAKIAkudnNfZGlzcGF0Y2ggPSBOVUxMLAogfTsKIAorc3RydWN0IHN2Y192ZXJzaW9uIG5mczRfY2FsbGJhY2tfdmVyc2lvbjQgPSB7CisJLnZzX3ZlcnMgPSA0LAorCS52c19ucHJvYyA9IEFSUkFZX1NJWkUobmZzNF9jYWxsYmFja19wcm9jZWR1cmVzMSksCisJLnZzX3Byb2MgPSBuZnM0X2NhbGxiYWNrX3Byb2NlZHVyZXMxLAorCS52c194ZHJzaXplID0gTkZTNF9DQUxMQkFDS19YRFJTSVpFLAorCS52c19kaXNwYXRjaCA9IE5VTEwsCit9OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDk5ZWExOTYuLmVlNzc3MTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTEyNjAsMTAgKzEyNjAsMjAgQEAKIHN0YXRpYyB2b2lkIG5mczRfc2Vzc2lvbl9zZXRfcndzaXplKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CiAjaWZkZWYgQ09ORklHX05GU19WNF8xCisJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzczsKKwl1MzIgc2VydmVyX3Jlc3Bfc3o7CisJdTMyIHNlcnZlcl9ycXN0X3N6OworCiAJaWYgKCFuZnM0X2hhc19zZXNzaW9uKHNlcnZlci0+bmZzX2NsaWVudCkpCiAJCXJldHVybjsKLQlzZXJ2ZXItPnJzaXplID0gc2VydmVyLT5uZnNfY2xpZW50LT5jbF9zZXNzaW9uLT5mY19hdHRycy5tYXhfcmVzcF9zejsKLQlzZXJ2ZXItPndzaXplID0gc2VydmVyLT5uZnNfY2xpZW50LT5jbF9zZXNzaW9uLT5mY19hdHRycy5tYXhfcnFzdF9zejsKKwlzZXNzID0gc2VydmVyLT5uZnNfY2xpZW50LT5jbF9zZXNzaW9uOworCXNlcnZlcl9yZXNwX3N6ID0gc2Vzcy0+ZmNfYXR0cnMubWF4X3Jlc3Bfc3ogLSBuZnM0MV9tYXhyZWFkX292ZXJoZWFkOworCXNlcnZlcl9ycXN0X3N6ID0gc2Vzcy0+ZmNfYXR0cnMubWF4X3Jxc3Rfc3ogLSBuZnM0MV9tYXh3cml0ZV9vdmVyaGVhZDsKKworCWlmIChzZXJ2ZXItPnJzaXplID4gc2VydmVyX3Jlc3Bfc3opCisJCXNlcnZlci0+cnNpemUgPSBzZXJ2ZXJfcmVzcF9zejsKKwlpZiAoc2VydmVyLT53c2l6ZSA+IHNlcnZlcl9ycXN0X3N6KQorCQlzZXJ2ZXItPndzaXplID0gc2VydmVyX3Jxc3Rfc3o7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IDZkZDQ4YTQuLjI1NjNiZWIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtOTIsNyArOTIsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIG5mc19kZWxlZ2F0aW9uX2NsYWltX29wZW5zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkKK3N0YXRpYyBpbnQgbmZzX2RlbGVnYXRpb25fY2xhaW1fb3BlbnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eDsKQEAgLTExNiwxMCArMTE2LDExIEBACiAJCQllcnIgPSBuZnNfZGVsZWdhdGlvbl9jbGFpbV9sb2NrcyhjdHgsIHN0YXRlKTsKIAkJcHV0X25mc19vcGVuX2NvbnRleHQoY3R4KTsKIAkJaWYgKGVyciAhPSAwKQotCQkJcmV0dXJuOworCQkJcmV0dXJuIGVycjsKIAkJZ290byBhZ2FpbjsKIAl9CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjYxLDMwICsyNjIsMzQgQEAKIC8qCiAgKiBCYXNpYyBwcm9jZWR1cmUgZm9yIHJldHVybmluZyBhIGRlbGVnYXRpb24gdG8gdGhlIHNlcnZlcgogICovCi1zdGF0aWMgaW50IF9fbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKK3N0YXRpYyBpbnQgX19uZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLCBpbnQgaXNzeW5jKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJaW50IGVycjsKIAotCW5mc19tc3luY19pbm9kZShpbm9kZSk7CiAJLyoKIAkgKiBHdWFyZCBhZ2FpbnN0IG5ldyBkZWxlZ2F0ZWQgb3Blbi9sb2NrL3VubG9jayBjYWxscyBhbmQgYWdhaW5zdAogCSAqIHN0YXRlIHJlY292ZXJ5CiAJICovCiAJZG93bl93cml0ZSgmbmZzaS0+cndzZW0pOwotCW5mc19kZWxlZ2F0aW9uX2NsYWltX29wZW5zKGlub2RlLCAmZGVsZWdhdGlvbi0+c3RhdGVpZCk7CisJZXJyID0gbmZzX2RlbGVnYXRpb25fY2xhaW1fb3BlbnMoaW5vZGUsICZkZWxlZ2F0aW9uLT5zdGF0ZWlkKTsKIAl1cF93cml0ZSgmbmZzaS0+cndzZW0pOwotCW5mc19tc3luY19pbm9kZShpbm9kZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gbmZzX2RvX3JldHVybl9kZWxlZ2F0aW9uKGlub2RlLCBkZWxlZ2F0aW9uLCAxKTsKKwllcnIgPSBuZnNfZG9fcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsIGRlbGVnYXRpb24sIGlzc3luYyk7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogLyoKICAqIFJldHVybiBhbGwgZGVsZWdhdGlvbnMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciByZXR1cm4KICAqLwotdm9pZCBuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK2ludCBuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb247CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZXJyID0gMDsKIAogcmVzdGFydDoKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0yOTgsMTIgKzMwMywxOCBAQAogCQlkZWxlZ2F0aW9uID0gbmZzX2RldGFjaF9kZWxlZ2F0aW9uX2xvY2tlZChORlNfSShpbm9kZSksIE5VTEwpOwogCQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWlmIChkZWxlZ2F0aW9uICE9IE5VTEwpCi0JCQlfX25mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSwgZGVsZWdhdGlvbik7CisJCWlmIChkZWxlZ2F0aW9uICE9IE5VTEwpIHsKKwkJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisJCQllcnIgPSBfX25mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSwgZGVsZWdhdGlvbiwgMCk7CisJCX0KIAkJaXB1dChpbm9kZSk7Ci0JCWdvdG8gcmVzdGFydDsKKwkJaWYgKCFlcnIpCisJCQlnb3RvIHJlc3RhcnQ7CisJCXNldF9iaXQoTkZTNENMTlRfREVMRUdSRVRVUk4sICZjbHAtPmNsX3N0YXRlKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMzgsOCArMzQ5LDEwIEBACiAJCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJZGVsZWdhdGlvbiA9IG5mc19kZXRhY2hfZGVsZWdhdGlvbl9sb2NrZWQobmZzaSwgTlVMTCk7CiAJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwotCQlpZiAoZGVsZWdhdGlvbiAhPSBOVUxMKQotCQkJZXJyID0gX19uZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsIGRlbGVnYXRpb24pOworCQlpZiAoZGVsZWdhdGlvbiAhPSBOVUxMKSB7CisJCQluZnNfbXN5bmNfaW5vZGUoaW5vZGUpOworCQkJZXJyID0gX19uZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsIGRlbGVnYXRpb24sIDEpOworCQl9CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0zNjgsMzEgKzM4MSw0NSBAQAogCQlzcGluX3VubG9jaygmZGVsZWdhdGlvbi0+bG9jayk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwotCW5mc19jbGllbnRfcmV0dXJuX21hcmtlZF9kZWxlZ2F0aW9ucyhjbHApOworCWlmIChuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoY2xwKSAhPSAwKQorCQluZnM0X3NjaGVkdWxlX3N0YXRlX21hbmFnZXIoY2xwKTsKIH0KIAotc3RhdGljIHZvaWQgbmZzX2NsaWVudF9tYXJrX3JldHVybl9hbGxfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3N0YXRpYwordm9pZCBuZnNfY2xpZW50X21hcmtfcmV0dXJuX2FsbF9kZWxlZ2F0aW9uX3R5cGVzKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGZtb2RlX3QgZmxhZ3MpCiB7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRlbGVnYXRpb24sICZjbHAtPmNsX2RlbGVnYXRpb25zLCBzdXBlcl9saXN0KSB7Ci0JCXNldF9iaXQoTkZTX0RFTEVHQVRJT05fUkVUVVJOLCAmZGVsZWdhdGlvbi0+ZmxhZ3MpOwotCQlzZXRfYml0KE5GUzRDTE5UX0RFTEVHUkVUVVJOLCAmY2xwLT5jbF9zdGF0ZSk7CisJCWlmICgoZGVsZWdhdGlvbi0+dHlwZSA9PSAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpICYmICEoZmxhZ3MgJiBGTU9ERV9XUklURSkpCisJCQljb250aW51ZTsKKwkJaWYgKGRlbGVnYXRpb24tPnR5cGUgJiBmbGFncykKKwkJCW5mc19tYXJrX3JldHVybl9kZWxlZ2F0aW9uKGNscCwgZGVsZWdhdGlvbik7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCitzdGF0aWMgdm9pZCBuZnNfY2xpZW50X21hcmtfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCW5mc19jbGllbnRfbWFya19yZXR1cm5fYWxsX2RlbGVnYXRpb25fdHlwZXMoY2xwLCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKK30KKwogc3RhdGljIHZvaWQgbmZzX2RlbGVnYXRpb25fcnVuX3N0YXRlX21hbmFnZXIoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlpZiAodGVzdF9iaXQoTkZTNENMTlRfREVMRUdSRVRVUk4sICZjbHAtPmNsX3N0YXRlKSkKIAkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9tYW5hZ2VyKGNscCk7CiB9CiAKK3ZvaWQgbmZzX2V4cGlyZV9hbGxfZGVsZWdhdGlvbl90eXBlcyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBmbW9kZV90IGZsYWdzKQoreworCW5mc19jbGllbnRfbWFya19yZXR1cm5fYWxsX2RlbGVnYXRpb25fdHlwZXMoY2xwLCBmbGFncyk7CisJbmZzX2RlbGVnYXRpb25fcnVuX3N0YXRlX21hbmFnZXIoY2xwKTsKK30KKwogdm9pZCBuZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewotCW5mc19jbGllbnRfbWFya19yZXR1cm5fYWxsX2RlbGVnYXRpb25zKGNscCk7Ci0JbmZzX2RlbGVnYXRpb25fcnVuX3N0YXRlX21hbmFnZXIoY2xwKTsKKwluZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9uX3R5cGVzKGNscCwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiB9CiAKIC8qCkBAIC00MTMsOCArNDQwLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkZWxlZ2F0aW9uLCAmY2xwLT5jbF9kZWxlZ2F0aW9ucywgc3VwZXJfbGlzdCkgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5GU19ERUxFR0FUSU9OX1JFRkVSRU5DRUQsICZkZWxlZ2F0aW9uLT5mbGFncykpCiAJCQljb250aW51ZTsKLQkJc2V0X2JpdChORlNfREVMRUdBVElPTl9SRVRVUk4sICZkZWxlZ2F0aW9uLT5mbGFncyk7Ci0JCXNldF9iaXQoTkZTNENMTlRfREVMRUdSRVRVUk4sICZjbHAtPmNsX3N0YXRlKTsKKwkJbmZzX21hcmtfcmV0dXJuX2RlbGVnYXRpb24oY2xwLCBkZWxlZ2F0aW9uKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC00MjgsMTggKzQ1NCwyMSBAQAogLyoKICAqIEFzeW5jaHJvbm91cyBkZWxlZ2F0aW9uIHJlY2FsbCEKICAqLwotaW50IG5mc19hc3luY19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQpCitpbnQgbmZzX2FzeW5jX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCwKKwkJCQkgICAgICBpbnQgKCp2YWxpZGF0ZV9zdGF0ZWlkKShzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24sCisJCQkJCQkJICAgICAgY29uc3QgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkKSkKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQ7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWRlbGVnYXRpb24gPSByY3VfZGVyZWZlcmVuY2UoTkZTX0koaW5vZGUpLT5kZWxlZ2F0aW9uKTsKLQlpZiAoZGVsZWdhdGlvbiA9PSBOVUxMIHx8IG1lbWNtcChkZWxlZ2F0aW9uLT5zdGF0ZWlkLmRhdGEsIHN0YXRlaWQtPmRhdGEsCi0JCQkJc2l6ZW9mKGRlbGVnYXRpb24tPnN0YXRlaWQuZGF0YSkpICE9IDApIHsKKworCWlmICghdmFsaWRhdGVfc3RhdGVpZChkZWxlZ2F0aW9uLCBzdGF0ZWlkKSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQorCiAJbmZzX21hcmtfcmV0dXJuX2RlbGVnYXRpb24oY2xwLCBkZWxlZ2F0aW9uKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAluZnNfZGVsZWdhdGlvbl9ydW5fc3RhdGVfbWFuYWdlcihjbHApOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uaCBiL2ZzL25mcy9kZWxlZ2F0aW9uLmgKaW5kZXggMDlmMzgzNy4uOTQ0YjYyNyAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uaAorKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5oCkBAIC0zNCwxNSArMzQsMTggQEAKIGludCBuZnNfaW5vZGVfc2V0X2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJwY19jcmVkICpjcmVkLCBzdHJ1Y3QgbmZzX29wZW5yZXMgKnJlcyk7CiB2b2lkIG5mc19pbm9kZV9yZWNsYWltX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJwY19jcmVkICpjcmVkLCBzdHJ1Y3QgbmZzX29wZW5yZXMgKnJlcyk7CiBpbnQgbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IG5mc19hc3luY19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQpOworaW50IG5mc19hc3luY19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQsCisJCQkJICAgICAgaW50ICgqdmFsaWRhdGVfc3RhdGVpZCkoc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLAorCQkJCQkJCSAgICAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkpOwogdm9pZCBuZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb25fbm9yZWNsYWltKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiBzdHJ1Y3QgaW5vZGUgKm5mc19kZWxlZ2F0aW9uX2ZpbmRfaW5vZGUoc3RydWN0IG5mc19jbGllbnQgKmNscCwgY29uc3Qgc3RydWN0IG5mc19maCAqZmhhbmRsZSk7CiB2b2lkIG5mc19zdXBlcl9yZXR1cm5fYWxsX2RlbGVnYXRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogdm9pZCBuZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKK3ZvaWQgbmZzX2V4cGlyZV9hbGxfZGVsZWdhdGlvbl90eXBlcyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBmbW9kZV90IGZsYWdzKTsKIHZvaWQgbmZzX2V4cGlyZV91bnJlZmVyZW5jZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiB2b2lkIG5mc19oYW5kbGVfY2JfcGF0aGRvd24oc3RydWN0IG5mc19jbGllbnQgKmNscCk7Ci12b2lkIG5mc19jbGllbnRfcmV0dXJuX21hcmtlZF9kZWxlZ2F0aW9ucyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKK2ludCBuZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiAKIHZvaWQgbmZzX2RlbGVnYXRpb25fbWFya19yZWNsYWltKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApOwogdm9pZCBuZnNfZGVsZWdhdGlvbl9yZWFwX3VuY2xhaW1lZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCA3Y2IyOTg1Li4yYzVhY2U0IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTc5LDU1ICsxNTc5LDQ2IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gTlVMTCwgKnJlaGFzaCA9IE5VTEw7CiAJaW50IGVycm9yID0gLUVCVVNZOwogCi0JLyoKLQkgKiBUbyBwcmV2ZW50IGFueSBuZXcgcmVmZXJlbmNlcyB0byB0aGUgdGFyZ2V0IGR1cmluZyB0aGUgcmVuYW1lLAotCSAqIHdlIHVuaGFzaCB0aGUgZGVudHJ5IGFuZCBmcmVlIHRoZSBpbm9kZSBpbiBhZHZhbmNlLgotCSAqLwotCWlmICghZF91bmhhc2hlZChuZXdfZGVudHJ5KSkgewotCQlkX2Ryb3AobmV3X2RlbnRyeSk7Ci0JCXJlaGFzaCA9IG5ld19kZW50cnk7Ci0JfQotCiAJZGZwcmludGsoVkZTLCAiTkZTOiByZW5hbWUoJXMvJXMgLT4gJXMvJXMsIGN0PSVkKVxuIiwKIAkJIG9sZF9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCSBuZXdfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIG5ld19kZW50cnktPmRfbmFtZS5uYW1lLAogCQkgYXRvbWljX3JlYWQoJm5ld19kZW50cnktPmRfY291bnQpKTsKIAogCS8qCi0JICogRmlyc3QgY2hlY2sgd2hldGhlciB0aGUgdGFyZ2V0IGlzIGJ1c3kgLi4uIHdlIGNhbid0Ci0JICogc2FmZWx5IGRvIF9hbnlfIHJlbmFtZSBpZiB0aGUgdGFyZ2V0IGlzIGluIHVzZS4KLQkgKgotCSAqIEZvciBmaWxlcywgbWFrZSBhIGNvcHkgb2YgdGhlIGRlbnRyeSBhbmQgdGhlbiBkbyBhIAotCSAqIHNpbGx5LXJlbmFtZS4gSWYgdGhlIHNpbGx5LXJlbmFtZSBzdWNjZWVkcywgdGhlCi0JICogY29waWVkIGRlbnRyeSBpcyBoYXNoZWQgYW5kIGJlY29tZXMgdGhlIG5ldyB0YXJnZXQuCisJICogRm9yIG5vbi1kaXJlY3RvcmllcywgY2hlY2sgd2hldGhlciB0aGUgdGFyZ2V0IGlzIGJ1c3kgYW5kIGlmIHNvLAorCSAqIG1ha2UgYSBjb3B5IG9mIHRoZSBkZW50cnkgYW5kIHRoZW4gZG8gYSBzaWxseS1yZW5hbWUuIElmIHRoZQorCSAqIHNpbGx5LXJlbmFtZSBzdWNjZWVkcywgdGhlIGNvcGllZCBkZW50cnkgaXMgaGFzaGVkIGFuZCBiZWNvbWVzCisJICogdGhlIG5ldyB0YXJnZXQuCiAJICovCi0JaWYgKCFuZXdfaW5vZGUpCi0JCWdvdG8gZ29fYWhlYWQ7Ci0JaWYgKFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKSB7Ci0JCWVycm9yID0gLUVJU0RJUjsKLQkJaWYgKCFTX0lTRElSKG9sZF9pbm9kZS0+aV9tb2RlKSkKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJm5ld19kZW50cnktPmRfY291bnQpID4gMikgewotCQlpbnQgZXJyOwotCQkvKiBjb3B5IHRoZSB0YXJnZXQgZGVudHJ5J3MgbmFtZSAqLwotCQlkZW50cnkgPSBkX2FsbG9jKG5ld19kZW50cnktPmRfcGFyZW50LAotCQkJCSAmbmV3X2RlbnRyeS0+ZF9uYW1lKTsKLQkJaWYgKCFkZW50cnkpCi0JCQlnb3RvIG91dDsKKwlpZiAobmV3X2lub2RlICYmICFTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSkgeworCQkvKgorCQkgKiBUbyBwcmV2ZW50IGFueSBuZXcgcmVmZXJlbmNlcyB0byB0aGUgdGFyZ2V0IGR1cmluZyB0aGUKKwkJICogcmVuYW1lLCB3ZSB1bmhhc2ggdGhlIGRlbnRyeSBpbiBhZHZhbmNlLgorCQkgKi8KKwkJaWYgKCFkX3VuaGFzaGVkKG5ld19kZW50cnkpKSB7CisJCQlkX2Ryb3AobmV3X2RlbnRyeSk7CisJCQlyZWhhc2ggPSBuZXdfZGVudHJ5OworCQl9CiAKLQkJLyogc2lsbHktcmVuYW1lIHRoZSBleGlzdGluZyB0YXJnZXQgLi4uICovCi0JCWVyciA9IG5mc19zaWxseXJlbmFtZShuZXdfZGlyLCBuZXdfZGVudHJ5KTsKLQkJaWYgKCFlcnIpIHsKLQkJCW5ld19kZW50cnkgPSByZWhhc2ggPSBkZW50cnk7CisJCWlmIChhdG9taWNfcmVhZCgmbmV3X2RlbnRyeS0+ZF9jb3VudCkgPiAyKSB7CisJCQlpbnQgZXJyOworCisJCQkvKiBjb3B5IHRoZSB0YXJnZXQgZGVudHJ5J3MgbmFtZSAqLworCQkJZGVudHJ5ID0gZF9hbGxvYyhuZXdfZGVudHJ5LT5kX3BhcmVudCwKKwkJCQkJICZuZXdfZGVudHJ5LT5kX25hbWUpOworCQkJaWYgKCFkZW50cnkpCisJCQkJZ290byBvdXQ7CisKKwkJCS8qIHNpbGx5LXJlbmFtZSB0aGUgZXhpc3RpbmcgdGFyZ2V0IC4uLiAqLworCQkJZXJyID0gbmZzX3NpbGx5cmVuYW1lKG5ld19kaXIsIG5ld19kZW50cnkpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKworCQkJbmV3X2RlbnRyeSA9IGRlbnRyeTsKIAkJCW5ld19pbm9kZSA9IE5VTEw7Ci0JCQkvKiBpbnN0YW50aWF0ZSB0aGUgcmVwbGFjZW1lbnQgdGFyZ2V0ICovCi0JCQlkX2luc3RhbnRpYXRlKG5ld19kZW50cnksIE5VTEwpOwotCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZuZXdfZGVudHJ5LT5kX2NvdW50KSA+IDEpCi0JCQkvKiBkZW50cnkgc3RpbGwgYnVzeT8gKi8KLQkJCWdvdG8gb3V0OworCQl9CiAJfQogCi1nb19haGVhZDoKIAkvKgogCSAqIC4uLiBwcnVuZSBjaGlsZCBkZW50cmllcyBhbmQgd3JpdGViYWNrcyBpZiBuZWVkZWQuCiAJICovCmRpZmYgLS1naXQgYS9mcy9uZnMvZG5zX3Jlc29sdmUuYyBiL2ZzL25mcy9kbnNfcmVzb2x2ZS5jCmluZGV4IGY0ZDU0YmEuLjk1ZTFjYTcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kbnNfcmVzb2x2ZS5jCisrKyBiL2ZzL25mcy9kbnNfcmVzb2x2ZS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IG5mc19kbnNfZW50ICpuZnNfZG5zX2xvb2t1cChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKK3N0YXRpYyBzdHJ1Y3QgbmZzX2Ruc19lbnQgKm5mc19kbnNfbG9va3VwKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAogCQlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSkKIHsKIAlzdHJ1Y3QgY2FjaGVfaGVhZCAqY2g7CkBAIC0xNTksNyArMTU5LDcgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgbmZzX2Ruc19lbnQsIGgpOwogfQogCi1zdHJ1Y3QgbmZzX2Ruc19lbnQgKm5mc19kbnNfdXBkYXRlKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAorc3RhdGljIHN0cnVjdCBuZnNfZG5zX2VudCAqbmZzX2Ruc191cGRhdGUoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsCiAJCXN0cnVjdCBuZnNfZG5zX2VudCAqbmV3LAogCQlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSkKIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggZTIxYjFiYi4uMjllNDY0ZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTMwLDYgKzMwLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG5mczRfaGFzX3BlcnNpc3RlbnRfc2Vzc2lvbihjb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworI2lmZGVmIENPTkZJR19ORlNfVjRfMQorCWlmIChuZnM0X2hhc19zZXNzaW9uKGNscCkpCisJCXJldHVybiAoY2xwLT5jbF9zZXNzaW9uLT5mbGFncyAmIFNFU1NJT040X1BFUlNJU1QpOworI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50IHsKIAljb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeTsKQEAgLTE1Niw2ICsxNjUsNyBAQAogCiAvKiBjYWxsYmFja194ZHIuYyAqLwogZXh0ZXJuIHN0cnVjdCBzdmNfdmVyc2lvbiBuZnM0X2NhbGxiYWNrX3ZlcnNpb24xOworZXh0ZXJuIHN0cnVjdCBzdmNfdmVyc2lvbiBuZnM0X2NhbGxiYWNrX3ZlcnNpb240OwogCiAvKiBwYWdlbGlzdC5jICovCiBleHRlcm4gaW50IF9faW5pdCBuZnNfaW5pdF9uZnNwYWdlY2FjaGUodm9pZCk7CkBAIC0xNzcsMjQgKzE4NywxNCBAQAogZXh0ZXJuIHN0cnVjdCBycGNfcHJvY2luZm8gbmZzM19wcm9jZWR1cmVzW107CiBleHRlcm4gX19iZTMyICpuZnMzX2RlY29kZV9kaXJlbnQoX19iZTMyICosIHN0cnVjdCBuZnNfZW50cnkgKiwgaW50KTsKIAotLyogbmZzNHByb2MuYyAqLwotc3RhdGljIGlubGluZSB2b2lkIG5mczRfcmVzdGFydF9ycGMoc3RydWN0IHJwY190YXNrICp0YXNrLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewotI2lmZGVmIENPTkZJR19ORlNfVjRfMQotCWlmIChuZnM0X2hhc19zZXNzaW9uKGNscCkgJiYKLQkgICAgdGVzdF9iaXQoTkZTNENMTlRfU0VTU0lPTl9TRVRVUCwgJmNscC0+Y2xfc3RhdGUpKSB7Ci0JCXJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSh0YXNrKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KLQlycGNfcmVzdGFydF9jYWxsKHRhc2spOwotfQotCiAvKiBuZnM0eGRyLmMgKi8KICNpZmRlZiBDT05GSUdfTkZTX1Y0CiBleHRlcm4gX19iZTMyICpuZnM0X2RlY29kZV9kaXJlbnQoX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2VudHJ5ICplbnRyeSwgaW50IHBsdXMpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX05GU19WNF8xCitleHRlcm4gY29uc3QgdTMyIG5mczQxX21heHJlYWRfb3ZlcmhlYWQ7CitleHRlcm4gY29uc3QgdTMyIG5mczQxX21heHdyaXRlX292ZXJoZWFkOworI2VuZGlmCiAKIC8qIG5mczRwcm9jLmMgKi8KICNpZmRlZiBDT05GSUdfTkZTX1Y0CkBAIC0yNzMsMjAgKzI3Myw2IEBACiAJCQkJICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCiAJCQkJICAgaW50IGNhY2hlX3JlcGx5KTsKIAotI2lmZGVmIENPTkZJR19ORlNfVjRfMQotZXh0ZXJuIHZvaWQgbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICosCi0JCQkJICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcyk7Ci0jZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZnM0X3NlcXVlbmNlX2ZyZWVfc2xvdChjb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAotCQkJCQkgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcykKLXsKLSNpZmRlZiBDT05GSUdfTkZTX1Y0XzEKLQlpZiAobmZzNF9oYXNfc2Vzc2lvbihjbHApKQotCQluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoY2xwLCByZXMpOwotI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwotfQotCiAvKgogICogRGV0ZXJtaW5lIHRoZSBkZXZpY2UgbmFtZSBhcyBhIHN0cmluZwogICovCkBAIC0zODAsMyArMzY2LDE1IEBACiAJcmV0dXJuICgodW5zaWduZWQgbG9uZylsZW4gKyAodW5zaWduZWQgbG9uZyliYXNlICsKIAkJUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIH0KKworLyoKKyAqIEhlbHBlciBmb3IgcmVzdGFydGluZyBSUEMgY2FsbHMgaW4gdGhlIHBvc3NpYmxlIHByZXNlbmNlIG9mIE5GU3Y0LjEKKyAqIHNlc3Npb25zLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX3Jlc3RhcnRfcnBjKHN0cnVjdCBycGNfdGFzayAqdGFzaywgY29uc3Qgc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlpZiAobmZzNF9oYXNfc2Vzc2lvbihjbHApKQorCQlycGNfcmVzdGFydF9jYWxsX3ByZXBhcmUodGFzayk7CisJZWxzZQorCQlycGNfcmVzdGFydF9jYWxsKHRhc2spOworfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lvc3RhdC5oIGIvZnMvbmZzL2lvc3RhdC5oCmluZGV4IGNlZGE1MGEuLjQ2ZDc3OWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pb3N0YXQuaAorKysgYi9mcy9uZnMvaW9zdGF0LmgKQEAgLTI1LDEzICsyNSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2luY19zZXJ2ZXJfc3RhdHMoY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKIAkJCQkJZW51bSBuZnNfc3RhdF9ldmVudGNvdW50ZXJzIHN0YXQpCiB7Ci0Jc3RydWN0IG5mc19pb3N0YXRzICppb3N0YXRzOwotCWludCBjcHU7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JaW9zdGF0cyA9IHBlcl9jcHVfcHRyKHNlcnZlci0+aW9fc3RhdHMsIGNwdSk7Ci0JaW9zdGF0cy0+ZXZlbnRzW3N0YXRdKys7Ci0JcHV0X2NwdSgpOworCXRoaXNfY3B1X2luYyhzZXJ2ZXItPmlvX3N0YXRzLT5ldmVudHNbc3RhdF0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2luY19zdGF0cyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLApAQCAtNDQsMTMgKzM4LDcgQEAKIAkJCQkJZW51bSBuZnNfc3RhdF9ieXRlY291bnRlcnMgc3RhdCwKIAkJCQkJdW5zaWduZWQgbG9uZyBhZGRlbmQpCiB7Ci0Jc3RydWN0IG5mc19pb3N0YXRzICppb3N0YXRzOwotCWludCBjcHU7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JaW9zdGF0cyA9IHBlcl9jcHVfcHRyKHNlcnZlci0+aW9fc3RhdHMsIGNwdSk7Ci0JaW9zdGF0cy0+Ynl0ZXNbc3RhdF0gKz0gYWRkZW5kOwotCXB1dF9jcHUoKTsKKwl0aGlzX2NwdV9hZGQoc2VydmVyLT5pb19zdGF0cy0+Ynl0ZXNbc3RhdF0sIGFkZGVuZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfYWRkX3N0YXRzKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC02NSwxMyArNTMsNyBAQAogCQkJCQkgZW51bSBuZnNfc3RhdF9mc2NhY2hlY291bnRlcnMgc3RhdCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkZW5kKQogewotCXN0cnVjdCBuZnNfaW9zdGF0cyAqaW9zdGF0czsKLQlpbnQgY3B1OwotCi0JY3B1ID0gZ2V0X2NwdSgpOwotCWlvc3RhdHMgPSBwZXJfY3B1X3B0cihORlNfU0VSVkVSKGlub2RlKS0+aW9fc3RhdHMsIGNwdSk7Ci0JaW9zdGF0cy0+ZnNjYWNoZVtzdGF0XSArPSBhZGRlbmQ7Ci0JcHV0X2NwdSgpOworCXRoaXNfY3B1X2FkZChORlNfU0VSVkVSKGlub2RlKS0+aW9fc3RhdHMtPmZzY2FjaGVbc3RhdF0sIGFkZGVuZCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBiL2ZzL25mcy9uZnM0X2ZzLmgKaW5kZXggNmVhMDdhMy4uODY1MjY1YiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRfZnMuaAorKysgYi9mcy9uZnMvbmZzNF9mcy5oCkBAIC00NCw3ICs0NCw4IEBACiAJTkZTNENMTlRfUkVDTEFJTV9SRUJPT1QsCiAJTkZTNENMTlRfUkVDTEFJTV9OT0dSQUNFLAogCU5GUzRDTE5UX0RFTEVHUkVUVVJOLAotCU5GUzRDTE5UX1NFU1NJT05fU0VUVVAsCisJTkZTNENMTlRfU0VTU0lPTl9SRVNFVCwKKwlORlM0Q0xOVF9TRVNTSU9OX0RSQUlOSU5HLAogfTsKIAogLyoKQEAgLTEwNyw2ICsxMDgsMTAgQEAKIAlORlNfT1dORVJfUkVDTEFJTV9OT0dSQUNFCiB9OwogCisjZGVmaW5lIE5GU19MT0NLX05FVwkJMAorI2RlZmluZSBORlNfTE9DS19SRUNMQUlNCTEKKyNkZWZpbmUgTkZTX0xPQ0tfRVhQSVJFRAkyCisKIC8qCiAgKiBzdHJ1Y3QgbmZzNF9zdGF0ZSBtYWludGFpbnMgdGhlIGNsaWVudC1zaWRlIHN0YXRlIGZvciBhIGdpdmVuCiAgKiAoc3RhdGVfb3duZXIsaW5vZGUpIHR1cGxlIChPUEVOKSBvciBzdGF0ZV9vd25lciAoTE9DSykuCkBAIC0xODAsNiArMTg1LDcgQEAKIAlpbnQgKCpyZWNvdmVyX2xvY2spKHN0cnVjdCBuZnM0X3N0YXRlICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CiAJaW50ICgqZXN0YWJsaXNoX2NsaWQpKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsKIAlzdHJ1Y3QgcnBjX2NyZWQgKiAoKmdldF9jbGlkX2NyZWQpKHN0cnVjdCBuZnNfY2xpZW50ICopOworCWludCAoKnJlY2xhaW1fY29tcGxldGUpKHN0cnVjdCBuZnNfY2xpZW50ICopOwogfTsKIAogc3RydWN0IG5mczRfc3RhdGVfbWFpbnRlbmFuY2Vfb3BzIHsKQEAgLTIwMCw5ICsyMDYsMTEgQEAKIC8qIG5mczRwcm9jLmMgKi8KIGV4dGVybiBpbnQgbmZzNF9wcm9jX3NldGNsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICosIHUzMiwgdW5zaWduZWQgc2hvcnQsIHN0cnVjdCBycGNfY3JlZCAqKTsKIGV4dGVybiBpbnQgbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHJwY19jcmVkICopOworZXh0ZXJuIGludCBuZnM0X3Byb2NfZXhjaGFuZ2VfaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKTsKIGV4dGVybiBpbnQgbmZzNF9wcm9jX2FzeW5jX3JlbmV3KHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsKIGV4dGVybiBpbnQgbmZzNF9wcm9jX3JlbmV3KHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsKIGV4dGVybiBpbnQgbmZzNF9pbml0X2NsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsKK2V4dGVybiBpbnQgbmZzNDFfaW5pdF9jbGllbnRpZChzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKik7CiBleHRlcm4gaW50IG5mczRfZG9fY2xvc2Uoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgaW50IHdhaXQpOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm5mczRfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBpbnQgbmZzNF9vcGVuX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOwpAQCAtMjE4LDkgKzIyNiwxMSBAQAogCQlpbnQgY2FjaGVfcmVwbHksIHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiBleHRlcm4gdm9pZCBuZnM0X2Rlc3Ryb3lfc2Vzc2lvbihzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXNzaW9uKTsKIGV4dGVybiBzdHJ1Y3QgbmZzNF9zZXNzaW9uICpuZnM0X2FsbG9jX3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKmNscCk7Ci1leHRlcm4gaW50IG5mczRfcHJvY19jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqLCBpbnQgcmVzZXQpOworZXh0ZXJuIGludCBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKik7CiBleHRlcm4gaW50IG5mczRfcHJvY19kZXN0cm95X3Nlc3Npb24oc3RydWN0IG5mczRfc2Vzc2lvbiAqKTsKIGV4dGVybiBpbnQgbmZzNF9pbml0X3Nlc3Npb24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcik7CitleHRlcm4gaW50IG5mczRfcHJvY19nZXRfbGVhc2VfdGltZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAorCQlzdHJ1Y3QgbmZzX2ZzaW5mbyAqZnNpbmZvKTsKICNlbHNlIC8qIENPTkZJR19ORlNfdjRfMSAqLwogc3RhdGljIGlubGluZSBpbnQgbmZzNF9zZXR1cF9zZXF1ZW5jZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLCBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcywKQEAgLTI2Nyw2ICsyNzcsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKIGV4dGVybiB2b2lkIG5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKIGV4dGVybiBpbnQgbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpOworZXh0ZXJuIHZvaWQgbmZzNDFfaGFuZGxlX3NlcXVlbmNlX2ZsYWdfZXJyb3JzKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHUzMiBmbGFncyk7CiBleHRlcm4gdm9pZCBuZnM0X3B1dF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKmxzcCk7CiBleHRlcm4gaW50IG5mczRfc2V0X2xvY2tfc3RhdGUoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CiBleHRlcm4gdm9pZCBuZnM0X2NvcHlfc3RhdGVpZChuZnM0X3N0YXRlaWQgKiwgc3RydWN0IG5mczRfc3RhdGUgKiwgZmxfb3duZXJfdCk7CkBAIC0yNzUsNiArMjg2LDcgQEAKIGV4dGVybiBpbnQgbmZzX3dhaXRfb25fc2VxdWVuY2Uoc3RydWN0IG5mc19zZXFpZCAqc2VxaWQsIHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiBleHRlcm4gdm9pZCBuZnNfaW5jcmVtZW50X29wZW5fc2VxaWQoaW50IHN0YXR1cywgc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpOwogZXh0ZXJuIHZvaWQgbmZzX2luY3JlbWVudF9sb2NrX3NlcWlkKGludCBzdGF0dXMsIHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkKTsKK2V4dGVybiB2b2lkIG5mc19yZWxlYXNlX3NlcWlkKHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkKTsKIGV4dGVybiB2b2lkIG5mc19mcmVlX3NlcWlkKHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkKTsKIAogZXh0ZXJuIGNvbnN0IG5mczRfc3RhdGVpZCB6ZXJvX3N0YXRlaWQ7CkBAIC0yODcsNiArMjk5LDcgQEAKIAogLyogY2FsbGJhY2tfeGRyLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gbmZzNF9jYWxsYmFja192ZXJzaW9uMTsKK2V4dGVybiBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gbmZzNF9jYWxsYmFja192ZXJzaW9uNDsKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA3NDFhNTYyLi4xOThkNTFkIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNjQsNiArNjQsNyBAQAogCiBzdHJ1Y3QgbmZzNF9vcGVuZGF0YTsKIHN0YXRpYyBpbnQgX25mczRfcHJvY19vcGVuKHN0cnVjdCBuZnM0X29wZW5kYXRhICpkYXRhKTsKK3N0YXRpYyBpbnQgX25mczRfcmVjb3Zlcl9wcm9jX29wZW4oc3RydWN0IG5mczRfb3BlbmRhdGEgKmRhdGEpOwogc3RhdGljIGludCBuZnM0X2RvX2ZzaW5mbyhzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZnNpbmZvICopOwogc3RhdGljIGludCBuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcihzdHJ1Y3QgcnBjX3Rhc2sgKiwgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mczRfc3RhdGUgKik7CiBzdGF0aWMgaW50IF9uZnM0X3Byb2NfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOwpAQCAtMjcwLDExICsyNzEsMTggQEAKIAkJY2FzZSAtTkZTNEVSUl9TRVFfTUlTT1JERVJFRDoKIAkJCWRwcmludGsoIiVzIEVSUk9SOiAlZCBSZXNldCBzZXNzaW9uXG4iLCBfX2Z1bmNfXywKIAkJCQllcnJvcmNvZGUpOwotCQkJc2V0X2JpdChORlM0Q0xOVF9TRVNTSU9OX1NFVFVQLCAmY2xwLT5jbF9zdGF0ZSk7CisJCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7CiAJCQlleGNlcHRpb24tPnJldHJ5ID0gMTsKLQkJCS8qIEZBTExUSFJPVUdIICovCisJCQlicmVhazsKICNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpICovCiAJCWNhc2UgLU5GUzRFUlJfRklMRV9PUEVOOgorCQkJaWYgKGV4Y2VwdGlvbi0+dGltZW91dCA+IEhaKSB7CisJCQkJLyogV2UgaGF2ZSByZXRyaWVkIGEgZGVjZW50IGFtb3VudCwgdGltZSB0bworCQkJCSAqIGZhaWwKKwkJCQkgKi8KKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgLU5GUzRFUlJfR1JBQ0U6CiAJCWNhc2UgLU5GUzRFUlJfREVMQVk6CiAJCQlyZXQgPSBuZnM0X2RlbGF5KHNlcnZlci0+Y2xpZW50LCAmZXhjZXB0aW9uLT50aW1lb3V0KTsKQEAgLTMxMSw0OCArMzE5LDY3IEBACiAgKiBzbyB3ZSBuZWVkIHRvIHNjYW4gZG93biBmcm9tIGhpZ2hlc3RfdXNlZF9zbG90aWQgdG8gMCBsb29raW5nIGZvciB0aGUgbm93CiAgKiBoaWdoZXN0IHNsb3RpZCBpbiB1c2UuCiAgKiBJZiBub25lIGZvdW5kLCBoaWdoZXN0X3VzZWRfc2xvdGlkIGlzIHNldCB0byAtMS4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHRibC0+c2xvdF90YmxfbG9jawogICovCiBzdGF0aWMgdm9pZAogbmZzNF9mcmVlX3Nsb3Qoc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsLCB1OCBmcmVlX3Nsb3RpZCkKIHsKIAlpbnQgc2xvdGlkID0gZnJlZV9zbG90aWQ7CiAKLQlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CiAJLyogY2xlYXIgdXNlZCBiaXQgaW4gYml0bWFwICovCiAJX19jbGVhcl9iaXQoc2xvdGlkLCB0YmwtPnVzZWRfc2xvdHMpOwogCiAJLyogdXBkYXRlIGhpZ2hlc3RfdXNlZF9zbG90aWQgd2hlbiBpdCBpcyBmcmVlZCAqLwogCWlmIChzbG90aWQgPT0gdGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkKSB7CiAJCXNsb3RpZCA9IGZpbmRfbGFzdF9iaXQodGJsLT51c2VkX3Nsb3RzLCB0YmwtPm1heF9zbG90cyk7Ci0JCWlmIChzbG90aWQgPj0gMCAmJiBzbG90aWQgPCB0YmwtPm1heF9zbG90cykKKwkJaWYgKHNsb3RpZCA8IHRibC0+bWF4X3Nsb3RzKQogCQkJdGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkID0gc2xvdGlkOwogCQllbHNlCiAJCQl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQgPSAtMTsKIAl9Ci0JcnBjX3dha2VfdXBfbmV4dCgmdGJsLT5zbG90X3RibF93YWl0cSk7Ci0Jc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CiAJZHByaW50aygiJXM6IGZyZWVfc2xvdGlkICV1IGhpZ2hlc3RfdXNlZF9zbG90aWQgJWRcbiIsIF9fZnVuY19fLAogCQlmcmVlX3Nsb3RpZCwgdGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkKTsKIH0KIAotdm9pZCBuZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoY29uc3Qgc3RydWN0IG5mc19jbGllbnQgKmNscCwKKy8qCisgKiBTaWduYWwgc3RhdGUgbWFuYWdlciB0aHJlYWQgaWYgc2Vzc2lvbiBpcyBkcmFpbmVkCisgKi8KK3N0YXRpYyB2b2lkIG5mczQxX2NoZWNrX2RyYWluX3Nlc3Npb25fY29tcGxldGUoc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzKQoreworCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKworCWlmICghdGVzdF9iaXQoTkZTNENMTlRfU0VTU0lPTl9EUkFJTklORywgJnNlcy0+Y2xwLT5jbF9zdGF0ZSkpIHsKKwkJdGFzayA9IHJwY193YWtlX3VwX25leHQoJnNlcy0+ZmNfc2xvdF90YWJsZS5zbG90X3RibF93YWl0cSk7CisJCWlmICh0YXNrKQorCQkJcnBjX3Rhc2tfc2V0X3ByaW9yaXR5KHRhc2ssIFJQQ19QUklPUklUWV9QUklWSUxFR0VEKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzZXMtPmZjX3Nsb3RfdGFibGUuaGlnaGVzdF91c2VkX3Nsb3RpZCAhPSAtMSkKKwkJcmV0dXJuOworCisJZHByaW50aygiJXMgQ09NUExFVEU6IFNlc3Npb24gRHJhaW5lZFxuIiwgX19mdW5jX18pOworCWNvbXBsZXRlKCZzZXMtPmNvbXBsZXRlKTsKK30KKworc3RhdGljIHZvaWQgbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCiAJCQkgICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcykKIHsKIAlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0Ymw7CiAKLQlpZiAoIW5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQlkcHJpbnRrKCIlczogTm8gc2Vzc2lvblxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQogCXRibCA9ICZjbHAtPmNsX3Nlc3Npb24tPmZjX3Nsb3RfdGFibGU7CiAJaWYgKHJlcy0+c3Jfc2xvdGlkID09IE5GUzRfTUFYX1NMT1RfVEFCTEUpIHsKLQkJZHByaW50aygiJXM6IE5vIHNsb3RcbiIsIF9fZnVuY19fKTsKIAkJLyoganVzdCB3YWtlIHVwIHRoZSBuZXh0IGd1eSB3YWl0aW5nIHNpbmNlCiAJCSAqIHdlIG1heSBoYXZlIG5vdCBjb25zdW1lZCBhIHNsb3QgYWZ0ZXIgYWxsICovCi0JCXJwY193YWtlX3VwX25leHQoJnRibC0+c2xvdF90Ymxfd2FpdHEpOworCQlkcHJpbnRrKCIlczogTm8gc2xvdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQorCisJc3Bpbl9sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCW5mczRfZnJlZV9zbG90KHRibCwgcmVzLT5zcl9zbG90aWQpOworCW5mczQxX2NoZWNrX2RyYWluX3Nlc3Npb25fY29tcGxldGUoY2xwLT5jbF9zZXNzaW9uKTsKKwlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKIAlyZXMtPnNyX3Nsb3RpZCA9IE5GUzRfTUFYX1NMT1RfVEFCTEU7CiB9CiAKQEAgLTM3NywxMCArNDA0LDEwIEBACiAJaWYgKHJlcy0+c3Jfc2xvdGlkID09IE5GUzRfTUFYX1NMT1RfVEFCTEUpCiAJCWdvdG8gb3V0OwogCi0JdGJsID0gJmNscC0+Y2xfc2Vzc2lvbi0+ZmNfc2xvdF90YWJsZTsKLQlzbG90ID0gdGJsLT5zbG90cyArIHJlcy0+c3Jfc2xvdGlkOwotCisJLyogQ2hlY2sgdGhlIFNFUVVFTkNFIG9wZXJhdGlvbiBzdGF0dXMgKi8KIAlpZiAocmVzLT5zcl9zdGF0dXMgPT0gMCkgeworCQl0YmwgPSAmY2xwLT5jbF9zZXNzaW9uLT5mY19zbG90X3RhYmxlOworCQlzbG90ID0gdGJsLT5zbG90cyArIHJlcy0+c3Jfc2xvdGlkOwogCQkvKiBVcGRhdGUgdGhlIHNsb3QncyBzZXF1ZW5jZSBhbmQgY2xpZW50aWQgbGVhc2UgdGltZXIgKi8KIAkJKytzbG90LT5zZXFfbnI7CiAJCXRpbWVzdGFtcCA9IHJlcy0+c3JfcmVuZXdhbF90aW1lOwpAQCAtMzg4LDcgKzQxNSw4IEBACiAJCWlmICh0aW1lX2JlZm9yZShjbHAtPmNsX2xhc3RfcmVuZXdhbCwgdGltZXN0YW1wKSkKIAkJCWNscC0+Y2xfbGFzdF9yZW5ld2FsID0gdGltZXN0YW1wOwogCQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKLQkJcmV0dXJuOworCQkvKiBDaGVjayBzZXF1ZW5jZSBmbGFncyAqLworCQluZnM0MV9oYW5kbGVfc2VxdWVuY2VfZmxhZ19lcnJvcnMoY2xwLCByZXMtPnNyX3N0YXR1c19mbGFncyk7CiAJfQogb3V0OgogCS8qIFRoZSBzZXNzaW9uIG1heSBiZSByZXNldCBieSBvbmUgb2YgdGhlIGVycm9yIGhhbmRsZXJzLiAqLwpAQCAtNDA3LDcgKzQzNSw3IEBACiAgKiBOb3RlOiBtdXN0IGJlIGNhbGxlZCB3aXRoIHVuZGVyIHRoZSBzbG90X3RibF9sb2NrLgogICovCiBzdGF0aWMgdTgKLW5mczRfZmluZF9zbG90KHN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCwgc3RydWN0IHJwY190YXNrICp0YXNrKQorbmZzNF9maW5kX3Nsb3Qoc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsKQogewogCWludCBzbG90aWQ7CiAJdTggcmV0X2lkID0gTkZTNF9NQVhfU0xPVF9UQUJMRTsKQEAgLTQyOSwyNCArNDU3LDYgQEAKIAlyZXR1cm4gcmV0X2lkOwogfQogCi1zdGF0aWMgaW50IG5mczRfcmVjb3Zlcl9zZXNzaW9uKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb24pCi17Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlc3Npb24tPmNscDsKLQl1bnNpZ25lZCBpbnQgbG9vcDsKLQlpbnQgcmV0OwotCi0JZm9yIChsb29wID0gTkZTNF9NQVhfTE9PUF9PTl9SRUNPVkVSOyBsb29wICE9IDA7IGxvb3AtLSkgewotCQlyZXQgPSBuZnM0X3dhaXRfY2xudF9yZWNvdmVyKGNscCk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCWJyZWFrOwotCQlpZiAoIXRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fU0VUVVAsICZjbHAtPmNsX3N0YXRlKSkKLQkJCWJyZWFrOwotCQluZnM0X3NjaGVkdWxlX3N0YXRlX21hbmFnZXIoY2xwKTsKLQkJcmV0ID0gLUVJTzsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBuZnM0MV9zZXR1cF9zZXF1ZW5jZShzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXNzaW9uLAogCQkJCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MgKmFyZ3MsCiAJCQkJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCkBAIC00NTUsNyArNDY1LDYgQEAKIHsKIAlzdHJ1Y3QgbmZzNF9zbG90ICpzbG90OwogCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibDsKLQlpbnQgc3RhdHVzID0gMDsKIAl1OCBzbG90aWQ7CiAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKQEAgLTQ2OCwyNCArNDc3LDI3IEBACiAJdGJsID0gJnNlc3Npb24tPmZjX3Nsb3RfdGFibGU7CiAKIAlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7Ci0JaWYgKHRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fU0VUVVAsICZzZXNzaW9uLT5jbHAtPmNsX3N0YXRlKSkgewotCQlpZiAodGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkICE9IC0xKSB7Ci0JCQlycGNfc2xlZXBfb24oJnRibC0+c2xvdF90Ymxfd2FpdHEsIHRhc2ssIE5VTEwpOwotCQkJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7Ci0JCQlkcHJpbnRrKCI8LS0gJXM6IFNlc3Npb24gcmVzZXQ6IGRyYWluaW5nXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCi0JCS8qIFRoZSBzbG90IHRhYmxlIGlzIGVtcHR5OyBzdGFydCB0aGUgcmVzZXQgdGhyZWFkICovCi0JCWRwcmludGsoIiVzIFNlc3Npb24gUmVzZXRcbiIsIF9fZnVuY19fKTsKKwlpZiAodGVzdF9iaXQoTkZTNENMTlRfU0VTU0lPTl9EUkFJTklORywgJnNlc3Npb24tPmNscC0+Y2xfc3RhdGUpICYmCisJICAgICFycGNfdGFza19oYXNfcHJpb3JpdHkodGFzaywgUlBDX1BSSU9SSVRZX1BSSVZJTEVHRUQpKSB7CisJCS8qCisJCSAqIFRoZSBzdGF0ZSBtYW5hZ2VyIHdpbGwgd2FpdCB1bnRpbCB0aGUgc2xvdCB0YWJsZSBpcyBlbXB0eS4KKwkJICogU2NoZWR1bGUgdGhlIHJlc2V0IHRocmVhZAorCQkgKi8KKwkJcnBjX3NsZWVwX29uKCZ0YmwtPnNsb3RfdGJsX3dhaXRxLCB0YXNrLCBOVUxMKTsKIAkJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7Ci0JCXN0YXR1cyA9IG5mczRfcmVjb3Zlcl9zZXNzaW9uKHNlc3Npb24pOwotCQlpZiAoc3RhdHVzKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3Bpbl9sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOworCQlkcHJpbnRrKCIlcyBTY2hlZHVsZSBTZXNzaW9uIFJlc2V0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCXNsb3RpZCA9IG5mczRfZmluZF9zbG90KHRibCwgdGFzayk7CisJaWYgKCFycGNfcXVldWVfZW1wdHkoJnRibC0+c2xvdF90Ymxfd2FpdHEpICYmCisJICAgICFycGNfdGFza19oYXNfcHJpb3JpdHkodGFzaywgUlBDX1BSSU9SSVRZX1BSSVZJTEVHRUQpKSB7CisJCXJwY19zbGVlcF9vbigmdGJsLT5zbG90X3RibF93YWl0cSwgdGFzaywgTlVMTCk7CisJCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOworCQlkcHJpbnRrKCIlcyBlbmZvcmNlIEZJRk8gb3JkZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJc2xvdGlkID0gbmZzNF9maW5kX3Nsb3QodGJsKTsKIAlpZiAoc2xvdGlkID09IE5GUzRfTUFYX1NMT1RfVEFCTEUpIHsKIAkJcnBjX3NsZWVwX29uKCZ0YmwtPnNsb3RfdGJsX3dhaXRxLCB0YXNrLCBOVUxMKTsKIAkJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CkBAIC00OTQsNiArNTA2LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CiAKKwlycGNfdGFza19zZXRfcHJpb3JpdHkodGFzaywgUlBDX1BSSU9SSVRZX05PUk1BTCk7CiAJc2xvdCA9IHRibC0+c2xvdHMgKyBzbG90aWQ7CiAJYXJncy0+c2Ffc2Vzc2lvbiA9IHNlc3Npb247CiAJYXJncy0+c2Ffc2xvdGlkID0gc2xvdGlkOwpAQCAtNTI3LDcgKzU0MCw3IEBACiAJCWdvdG8gb3V0OwogCXJldCA9IG5mczQxX3NldHVwX3NlcXVlbmNlKGNscC0+Y2xfc2Vzc2lvbiwgYXJncywgcmVzLCBjYWNoZV9yZXBseSwKIAkJCQkgICB0YXNrKTsKLQlpZiAocmV0ICE9IC1FQUdBSU4pIHsKKwlpZiAocmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7CiAJCS8qIHRlcm1pbmF0ZSBycGMgdGFzayAqLwogCQl0YXNrLT50a19zdGF0dXMgPSByZXQ7CiAJCXRhc2stPnRrX2FjdGlvbiA9IE5VTEw7CkBAIC01NTYsMTIgKzU2OSwxNyBAQAogCXJwY19jYWxsX3N0YXJ0KHRhc2spOwogfQogCitzdGF0aWMgdm9pZCBuZnM0MV9jYWxsX3ByaXZfc3luY19wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCit7CisJcnBjX3Rhc2tfc2V0X3ByaW9yaXR5KHRhc2ssIFJQQ19QUklPUklUWV9QUklWSUxFR0VEKTsKKwluZnM0MV9jYWxsX3N5bmNfcHJlcGFyZSh0YXNrLCBjYWxsZGF0YSk7Cit9CisKIHN0YXRpYyB2b2lkIG5mczQxX2NhbGxfc3luY19kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mczQxX2NhbGxfc3luY19kYXRhICpkYXRhID0gY2FsbGRhdGE7CiAKIAluZnM0MV9zZXF1ZW5jZV9kb25lKGRhdGEtPmNscCwgZGF0YS0+c2VxX3JlcywgdGFzay0+dGtfc3RhdHVzKTsKLQluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoZGF0YS0+Y2xwLCBkYXRhLT5zZXFfcmVzKTsKIH0KIAogc3RydWN0IHJwY19jYWxsX29wcyBuZnM0MV9jYWxsX3N5bmNfb3BzID0gewpAQCAtNTY5LDEyICs1ODcsMTggQEAKIAkucnBjX2NhbGxfZG9uZSA9IG5mczQxX2NhbGxfc3luY19kb25lLAogfTsKIAorc3RydWN0IHJwY19jYWxsX29wcyBuZnM0MV9jYWxsX3ByaXZfc3luY19vcHMgPSB7CisJLnJwY19jYWxsX3ByZXBhcmUgPSBuZnM0MV9jYWxsX3ByaXZfc3luY19wcmVwYXJlLAorCS5ycGNfY2FsbF9kb25lID0gbmZzNDFfY2FsbF9zeW5jX2RvbmUsCit9OworCiBzdGF0aWMgaW50IG5mczRfY2FsbF9zeW5jX3NlcXVlbmNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCiAJCQkJICAgc3RydWN0IHJwY19jbG50ICpjbG50LAogCQkJCSAgIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLAogCQkJCSAgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MgKmFyZ3MsCiAJCQkJICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCi0JCQkJICAgaW50IGNhY2hlX3JlcGx5KQorCQkJCSAgIGludCBjYWNoZV9yZXBseSwKKwkJCQkgICBpbnQgcHJpdmlsZWdlZCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBycGNfdGFzayAqdGFzazsKQEAgLTU5Miw2ICs2MTYsOCBAQAogCX07CiAKIAlyZXMtPnNyX3Nsb3RpZCA9IE5GUzRfTUFYX1NMT1RfVEFCTEU7CisJaWYgKHByaXZpbGVnZWQpCisJCXRhc2tfc2V0dXAuY2FsbGJhY2tfb3BzID0gJm5mczQxX2NhbGxfcHJpdl9zeW5jX29wczsKIAl0YXNrID0gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwKTsKIAlpZiAoSVNfRVJSKHRhc2spKQogCQlyZXQgPSBQVFJfRVJSKHRhc2spOwpAQCAtNjA5LDcgKzYzNSw3IEBACiAJCQkgICAgaW50IGNhY2hlX3JlcGx5KQogewogCXJldHVybiBuZnM0X2NhbGxfc3luY19zZXF1ZW5jZShzZXJ2ZXItPm5mc19jbGllbnQsIHNlcnZlci0+Y2xpZW50LAotCQkJCSAgICAgICBtc2csIGFyZ3MsIHJlcywgY2FjaGVfcmVwbHkpOworCQkJCSAgICAgICBtc2csIGFyZ3MsIHJlcywgY2FjaGVfcmVwbHksIDApOwogfQogCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCkBAIC02MzcsMTUgKzY2Myw2IEBACiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiB9CiAKLS8qIG5vIHJlc3RhcnQsIHRoZXJlZm9yZSBmcmVlIHNsb3QgaGVyZSAqLwotc3RhdGljIHZvaWQgbmZzNF9zZXF1ZW5jZV9kb25lX2ZyZWVfc2xvdChjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAotCQkJCQkgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCi0JCQkJCSBpbnQgcnBjX3N0YXR1cykKLXsKLQluZnM0X3NlcXVlbmNlX2RvbmUoc2VydmVyLCByZXMsIHJwY19zdGF0dXMpOwotCW5mczRfc2VxdWVuY2VfZnJlZV9zbG90KHNlcnZlci0+bmZzX2NsaWVudCwgcmVzKTsKLX0KLQogc3RhdGljIHZvaWQgdXBkYXRlX2NoYW5nZWF0dHIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvICpjaW5mbykKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koZGlyKTsKQEAgLTcyMCw5ICs3MzcsMTUgQEAKIAlwLT5vX2FyZy5iaXRtYXNrID0gc2VydmVyLT5hdHRyX2JpdG1hc2s7CiAJcC0+b19hcmcuY2xhaW0gPSBORlM0X09QRU5fQ0xBSU1fTlVMTDsKIAlpZiAoZmxhZ3MgJiBPX0VYQ0wpIHsKLQkJdTMyICpzID0gKHUzMiAqKSBwLT5vX2FyZy51LnZlcmlmaWVyLmRhdGE7Ci0JCXNbMF0gPSBqaWZmaWVzOwotCQlzWzFdID0gY3VycmVudC0+cGlkOworCQlpZiAobmZzNF9oYXNfcGVyc2lzdGVudF9zZXNzaW9uKHNlcnZlci0+bmZzX2NsaWVudCkpIHsKKwkJCS8qIEdVQVJERUQgKi8KKwkJCXAtPm9fYXJnLnUuYXR0cnMgPSAmcC0+YXR0cnM7CisJCQltZW1jcHkoJnAtPmF0dHJzLCBhdHRycywgc2l6ZW9mKHAtPmF0dHJzKSk7CisJCX0gZWxzZSB7IC8qIEVYQ0xVU0lWRTRfMSAqLworCQkJdTMyICpzID0gKHUzMiAqKSBwLT5vX2FyZy51LnZlcmlmaWVyLmRhdGE7CisJCQlzWzBdID0gamlmZmllczsKKwkJCXNbMV0gPSBjdXJyZW50LT5waWQ7CisJCX0KIAl9IGVsc2UgaWYgKGZsYWdzICYgT19DUkVBVCkgewogCQlwLT5vX2FyZy51LmF0dHJzID0gJnAtPmF0dHJzOwogCQltZW1jcHkoJnAtPmF0dHJzLCBhdHRycywgc2l6ZW9mKHAtPmF0dHJzKSk7CkBAIC03NzYsMTMgKzc5OSwxNiBAQAogCQlnb3RvIG91dDsKIAlzd2l0Y2ggKG1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpIHsKIAkJY2FzZSBGTU9ERV9SRUFEOgotCQkJcmV0IHw9IHRlc3RfYml0KE5GU19PX1JET05MWV9TVEFURSwgJnN0YXRlLT5mbGFncykgIT0gMDsKKwkJCXJldCB8PSB0ZXN0X2JpdChORlNfT19SRE9OTFlfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpICE9IDAKKwkJCQkmJiBzdGF0ZS0+bl9yZG9ubHkgIT0gMDsKIAkJCWJyZWFrOwogCQljYXNlIEZNT0RFX1dSSVRFOgotCQkJcmV0IHw9IHRlc3RfYml0KE5GU19PX1dST05MWV9TVEFURSwgJnN0YXRlLT5mbGFncykgIT0gMDsKKwkJCXJldCB8PSB0ZXN0X2JpdChORlNfT19XUk9OTFlfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpICE9IDAKKwkJCQkmJiBzdGF0ZS0+bl93cm9ubHkgIT0gMDsKIAkJCWJyZWFrOwogCQljYXNlIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEU6Ci0JCQlyZXQgfD0gdGVzdF9iaXQoTkZTX09fUkRXUl9TVEFURSwgJnN0YXRlLT5mbGFncykgIT0gMDsKKwkJCXJldCB8PSB0ZXN0X2JpdChORlNfT19SRFdSX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSAhPSAwCisJCQkJJiYgc3RhdGUtPm5fcmR3ciAhPSAwOwogCX0KIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMTA0Nyw3ICsxMDczLDcgQEAKIAltZW1zZXQoJm9wZW5kYXRhLT5vX3JlcywgMCwgc2l6ZW9mKG9wZW5kYXRhLT5vX3JlcykpOwogCW1lbXNldCgmb3BlbmRhdGEtPmNfcmVzLCAwLCBzaXplb2Yob3BlbmRhdGEtPmNfcmVzKSk7CiAJbmZzNF9pbml0X29wZW5kYXRhX3JlcyhvcGVuZGF0YSk7Ci0JcmV0ID0gX25mczRfcHJvY19vcGVuKG9wZW5kYXRhKTsKKwlyZXQgPSBfbmZzNF9yZWNvdmVyX3Byb2Nfb3BlbihvcGVuZGF0YSk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OyAKIAluZXdzdGF0ZSA9IG5mczRfb3BlbmRhdGFfdG9fbmZzNF9zdGF0ZShvcGVuZGF0YSk7CkBAIC0xMTgzLDYgKzEyMDksMTQgQEAKIAkJCWNhc2UgLUVOT0VOVDoKIAkJCWNhc2UgLUVTVEFMRToKIAkJCQlnb3RvIG91dDsKKwkJCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKKwkJCWNhc2UgLU5GUzRFUlJfQkFEU0xPVDoKKwkJCWNhc2UgLU5GUzRFUlJfQkFEX0hJR0hfU0xPVDoKKwkJCWNhc2UgLU5GUzRFUlJfQ09OTl9OT1RfQk9VTkRfVE9fU0VTU0lPTjoKKwkJCWNhc2UgLU5GUzRFUlJfREVBRFNFU1NJT046CisJCQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeSgKKwkJCQkJc2VydmVyLT5uZnNfY2xpZW50KTsKKwkJCQlnb3RvIG91dDsKIAkJCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CiAJCQljYXNlIC1ORlM0RVJSX1NUQUxFX1NUQVRFSUQ6CiAJCQljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CkBAIC0xMzMwLDE0ICsxMzY0LDIwIEBACiAKIH0KIAorc3RhdGljIHZvaWQgbmZzNF9yZWNvdmVyX29wZW5fcHJlcGFyZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmNhbGxkYXRhKQoreworCXJwY190YXNrX3NldF9wcmlvcml0eSh0YXNrLCBSUENfUFJJT1JJVFlfUFJJVklMRUdFRCk7CisJbmZzNF9vcGVuX3ByZXBhcmUodGFzaywgY2FsbGRhdGEpOworfQorCiBzdGF0aWMgdm9pZCBuZnM0X29wZW5fZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmNhbGxkYXRhKQogewogCXN0cnVjdCBuZnM0X29wZW5kYXRhICpkYXRhID0gY2FsbGRhdGE7CiAKIAlkYXRhLT5ycGNfc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOwogCi0JbmZzNF9zZXF1ZW5jZV9kb25lX2ZyZWVfc2xvdChkYXRhLT5vX2FyZy5zZXJ2ZXIsICZkYXRhLT5vX3Jlcy5zZXFfcmVzLAotCQkJCSAgICAgdGFzay0+dGtfc3RhdHVzKTsKKwluZnM0X3NlcXVlbmNlX2RvbmUoZGF0YS0+b19hcmcuc2VydmVyLCAmZGF0YS0+b19yZXMuc2VxX3JlcywKKwkJCXRhc2stPnRrX3N0YXR1cyk7CiAKIAlpZiAoUlBDX0FTU0FTU0lOQVRFRCh0YXNrKSkKIAkJcmV0dXJuOwpAQCAtMTM4OCwxMCArMTQyOCwxMyBAQAogCS5ycGNfcmVsZWFzZSA9IG5mczRfb3Blbl9yZWxlYXNlLAogfTsKIAotLyoKLSAqIE5vdGU6IE9uIGVycm9yLCBuZnM0X3Byb2Nfb3BlbiB3aWxsIGZyZWUgdGhlIHN0cnVjdCBuZnM0X29wZW5kYXRhCi0gKi8KLXN0YXRpYyBpbnQgX25mczRfcHJvY19vcGVuKHN0cnVjdCBuZnM0X29wZW5kYXRhICpkYXRhKQorc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgbmZzNF9yZWNvdmVyX29wZW5fb3BzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gbmZzNF9yZWNvdmVyX29wZW5fcHJlcGFyZSwKKwkucnBjX2NhbGxfZG9uZSA9IG5mczRfb3Blbl9kb25lLAorCS5ycGNfcmVsZWFzZSA9IG5mczRfb3Blbl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBuZnM0X3J1bl9vcGVuX3Rhc2soc3RydWN0IG5mczRfb3BlbmRhdGEgKmRhdGEsIGludCBpc3JlY292ZXIpCiB7CiAJc3RydWN0IGlub2RlICpkaXIgPSBkYXRhLT5kaXItPmRfaW5vZGU7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoZGlyKTsKQEAgLTE0MTgsMjEgKzE0NjEsNTcgQEAKIAlkYXRhLT5ycGNfZG9uZSA9IDA7CiAJZGF0YS0+cnBjX3N0YXR1cyA9IDA7CiAJZGF0YS0+Y2FuY2VsbGVkID0gMDsKKwlpZiAoaXNyZWNvdmVyKQorCQl0YXNrX3NldHVwX2RhdGEuY2FsbGJhY2tfb3BzID0gJm5mczRfcmVjb3Zlcl9vcGVuX29wczsKIAl0YXNrID0gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwotCWlmIChJU19FUlIodGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHRhc2spOwotCXN0YXR1cyA9IG5mczRfd2FpdF9mb3JfY29tcGxldGlvbl9ycGNfdGFzayh0YXNrKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGF0YS0+Y2FuY2VsbGVkID0gMTsKLQkJc21wX3dtYigpOwotCX0gZWxzZQotCQlzdGF0dXMgPSBkYXRhLT5ycGNfc3RhdHVzOwotCXJwY19wdXRfdGFzayh0YXNrKTsKKyAgICAgICAgaWYgKElTX0VSUih0YXNrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUih0YXNrKTsKKyAgICAgICAgc3RhdHVzID0gbmZzNF93YWl0X2Zvcl9jb21wbGV0aW9uX3JwY190YXNrKHRhc2spOworICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5jYW5jZWxsZWQgPSAxOworICAgICAgICAgICAgICAgIHNtcF93bWIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RhdHVzID0gZGF0YS0+cnBjX3N0YXR1czsKKyAgICAgICAgcnBjX3B1dF90YXNrKHRhc2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfbmZzNF9yZWNvdmVyX3Byb2Nfb3BlbihzdHJ1Y3QgbmZzNF9vcGVuZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRhdGEtPmRpci0+ZF9pbm9kZTsKKwlzdHJ1Y3QgbmZzX29wZW5yZXMgKm9fcmVzID0gJmRhdGEtPm9fcmVzOworICAgICAgICBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gbmZzNF9ydW5fb3Blbl90YXNrKGRhdGEsIDEpOwogCWlmIChzdGF0dXMgIT0gMCB8fCAhZGF0YS0+cnBjX2RvbmUpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlpZiAob19yZXMtPmZoLnNpemUgPT0gMCkKLQkJX25mczRfcHJvY19sb29rdXAoZGlyLCBvX2FyZy0+bmFtZSwgJm9fcmVzLT5maCwgb19yZXMtPmZfYXR0cik7CisJbmZzX3JlZnJlc2hfaW5vZGUoZGlyLCBvX3Jlcy0+ZGlyX2F0dHIpOworCisJaWYgKG9fcmVzLT5yZmxhZ3MgJiBORlM0X09QRU5fUkVTVUxUX0NPTkZJUk0pIHsKKwkJc3RhdHVzID0gX25mczRfcHJvY19vcGVuX2NvbmZpcm0oZGF0YSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIE5vdGU6IE9uIGVycm9yLCBuZnM0X3Byb2Nfb3BlbiB3aWxsIGZyZWUgdGhlIHN0cnVjdCBuZnM0X29wZW5kYXRhCisgKi8KK3N0YXRpYyBpbnQgX25mczRfcHJvY19vcGVuKHN0cnVjdCBuZnM0X29wZW5kYXRhICpkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gZGF0YS0+ZGlyLT5kX2lub2RlOworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGRpcik7CisJc3RydWN0IG5mc19vcGVuYXJncyAqb19hcmcgPSAmZGF0YS0+b19hcmc7CisJc3RydWN0IG5mc19vcGVucmVzICpvX3JlcyA9ICZkYXRhLT5vX3JlczsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gbmZzNF9ydW5fb3Blbl90YXNrKGRhdGEsIDApOworCWlmIChzdGF0dXMgIT0gMCB8fCAhZGF0YS0+cnBjX2RvbmUpCisJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAob19hcmctPm9wZW5fZmxhZ3MgJiBPX0NSRUFUKSB7CiAJCXVwZGF0ZV9jaGFuZ2VhdHRyKGRpciwgJm9fcmVzLT5jaW5mbyk7CkBAIC0xNDg4LDcgKzE1NjcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5mczRfZG9fb3Blbl9leHBpcmVkKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQgbmZzNF9kb19vcGVuX2V4cGlyZWQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKHN0YXRlLT5pbm9kZSk7CiAJc3RydWN0IG5mczRfZXhjZXB0aW9uIGV4Y2VwdGlvbiA9IHsgfTsKQEAgLTE0OTYsMTAgKzE1NzUsMTYgQEAKIAogCWRvIHsKIAkJZXJyID0gX25mczRfb3Blbl9leHBpcmVkKGN0eCwgc3RhdGUpOwotCQlpZiAoZXJyICE9IC1ORlM0RVJSX0RFTEFZKQotCQkJYnJlYWs7Ci0JCW5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CisJCXN3aXRjaCAoZXJyKSB7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJY2FzZSAtTkZTNEVSUl9HUkFDRToKKwkJY2FzZSAtTkZTNEVSUl9ERUxBWToKKwkJCW5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CisJCQllcnIgPSAwOworCQl9CiAJfSB3aGlsZSAoZXhjZXB0aW9uLnJldHJ5KTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzEyLDYgKzE3OTcsMTggQEAKIAlrZnJlZShjYWxsZGF0YSk7CiB9CiAKK3N0YXRpYyB2b2lkIG5mczRfY2xvc2VfY2xlYXJfc3RhdGVpZF9mbGFncyhzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsCisJCWZtb2RlX3QgZm1vZGUpCit7CisJc3Bpbl9sb2NrKCZzdGF0ZS0+b3duZXItPnNvX2xvY2spOworCWlmICghKGZtb2RlICYgRk1PREVfUkVBRCkpCisJCWNsZWFyX2JpdChORlNfT19SRE9OTFlfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOworCWlmICghKGZtb2RlICYgRk1PREVfV1JJVEUpKQorCQljbGVhcl9iaXQoTkZTX09fV1JPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKKwljbGVhcl9iaXQoTkZTX09fUkRXUl9TVEFURSwgJnN0YXRlLT5mbGFncyk7CisJc3Bpbl91bmxvY2soJnN0YXRlLT5vd25lci0+c29fbG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIG5mczRfY2xvc2VfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5mczRfY2xvc2VkYXRhICpjYWxsZGF0YSA9IGRhdGE7CkBAIC0xNzI4LDYgKzE4MjUsOCBAQAogCQljYXNlIDA6CiAJCQluZnNfc2V0X29wZW5fc3RhdGVpZChzdGF0ZSwgJmNhbGxkYXRhLT5yZXMuc3RhdGVpZCwgMCk7CiAJCQlyZW5ld19sZWFzZShzZXJ2ZXIsIGNhbGxkYXRhLT50aW1lc3RhbXApOworCQkJbmZzNF9jbG9zZV9jbGVhcl9zdGF0ZWlkX2ZsYWdzKHN0YXRlLAorCQkJCQljYWxsZGF0YS0+YXJnLmZtb2RlKTsKIAkJCWJyZWFrOwogCQljYXNlIC1ORlM0RVJSX1NUQUxFX1NUQVRFSUQ6CiAJCWNhc2UgLU5GUzRFUlJfT0xEX1NUQVRFSUQ6CkBAIC0xNzM2LDEyICsxODM1LDEwIEBACiAJCQlpZiAoY2FsbGRhdGEtPmFyZy5mbW9kZSA9PSAwKQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIHNlcnZlciwgc3RhdGUpID09IC1FQUdBSU4pIHsKLQkJCQluZnM0X3Jlc3RhcnRfcnBjKHRhc2ssIHNlcnZlci0+bmZzX2NsaWVudCk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIHNlcnZlciwgc3RhdGUpID09IC1FQUdBSU4pCisJCQkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOwogCX0KLQluZnM0X3NlcXVlbmNlX2ZyZWVfc2xvdChzZXJ2ZXItPm5mc19jbGllbnQsICZjYWxsZGF0YS0+cmVzLnNlcV9yZXMpOworCW5mc19yZWxlYXNlX3NlcWlkKGNhbGxkYXRhLT5hcmcuc2VxaWQpOwogCW5mc19yZWZyZXNoX2lub2RlKGNhbGxkYXRhLT5pbm9kZSwgY2FsbGRhdGEtPnJlcy5mYXR0cik7CiB9CiAKQEAgLTE3NDksMzggKzE4NDYsMzkgQEAKIHsKIAlzdHJ1Y3QgbmZzNF9jbG9zZWRhdGEgKmNhbGxkYXRhID0gZGF0YTsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUgPSBjYWxsZGF0YS0+c3RhdGU7Ci0JaW50IGNsZWFyX3JkLCBjbGVhcl93ciwgY2xlYXJfcmR3cjsKKwlpbnQgY2FsbF9jbG9zZSA9IDA7CiAKIAlpZiAobmZzX3dhaXRfb25fc2VxdWVuY2UoY2FsbGRhdGEtPmFyZy5zZXFpZCwgdGFzaykgIT0gMCkKIAkJcmV0dXJuOwogCi0JY2xlYXJfcmQgPSBjbGVhcl93ciA9IGNsZWFyX3Jkd3IgPSAwOworCXRhc2stPnRrX21zZy5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9PUEVOX0RPV05HUkFERV07CisJY2FsbGRhdGEtPmFyZy5mbW9kZSA9IEZNT0RFX1JFQUR8Rk1PREVfV1JJVEU7CiAJc3Bpbl9sb2NrKCZzdGF0ZS0+b3duZXItPnNvX2xvY2spOwogCS8qIENhbGN1bGF0ZSB0aGUgY2hhbmdlIGluIG9wZW4gbW9kZSAqLwogCWlmIChzdGF0ZS0+bl9yZHdyID09IDApIHsKIAkJaWYgKHN0YXRlLT5uX3Jkb25seSA9PSAwKSB7Ci0JCQljbGVhcl9yZCB8PSB0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX09fUkRPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKLQkJCWNsZWFyX3Jkd3IgfD0gdGVzdF9hbmRfY2xlYXJfYml0KE5GU19PX1JEV1JfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOworCQkJY2FsbF9jbG9zZSB8PSB0ZXN0X2JpdChORlNfT19SRE9OTFlfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOworCQkJY2FsbF9jbG9zZSB8PSB0ZXN0X2JpdChORlNfT19SRFdSX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKKwkJCWNhbGxkYXRhLT5hcmcuZm1vZGUgJj0gfkZNT0RFX1JFQUQ7CiAJCX0KIAkJaWYgKHN0YXRlLT5uX3dyb25seSA9PSAwKSB7Ci0JCQljbGVhcl93ciB8PSB0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX09fV1JPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKLQkJCWNsZWFyX3Jkd3IgfD0gdGVzdF9hbmRfY2xlYXJfYml0KE5GU19PX1JEV1JfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOworCQkJY2FsbF9jbG9zZSB8PSB0ZXN0X2JpdChORlNfT19XUk9OTFlfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOworCQkJY2FsbF9jbG9zZSB8PSB0ZXN0X2JpdChORlNfT19SRFdSX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKKwkJCWNhbGxkYXRhLT5hcmcuZm1vZGUgJj0gfkZNT0RFX1dSSVRFOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZzdGF0ZS0+b3duZXItPnNvX2xvY2spOwotCWlmICghY2xlYXJfcmQgJiYgIWNsZWFyX3dyICYmICFjbGVhcl9yZHdyKSB7CisKKwlpZiAoIWNhbGxfY2xvc2UpIHsKIAkJLyogTm90ZTogZXhpdCBfd2l0aG91dF8gY2FsbGluZyBuZnM0X2Nsb3NlX2RvbmUgKi8KIAkJdGFzay0+dGtfYWN0aW9uID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KKworCWlmIChjYWxsZGF0YS0+YXJnLmZtb2RlID09IDApCisJCXRhc2stPnRrX21zZy5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9DTE9TRV07CisKIAluZnNfZmF0dHJfaW5pdChjYWxsZGF0YS0+cmVzLmZhdHRyKTsKLQlpZiAodGVzdF9iaXQoTkZTX09fUkRPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSAhPSAwKSB7Ci0JCXRhc2stPnRrX21zZy5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9PUEVOX0RPV05HUkFERV07Ci0JCWNhbGxkYXRhLT5hcmcuZm1vZGUgPSBGTU9ERV9SRUFEOwotCX0gZWxzZSBpZiAodGVzdF9iaXQoTkZTX09fV1JPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSAhPSAwKSB7Ci0JCXRhc2stPnRrX21zZy5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9PUEVOX0RPV05HUkFERV07Ci0JCWNhbGxkYXRhLT5hcmcuZm1vZGUgPSBGTU9ERV9XUklURTsKLQl9CiAJY2FsbGRhdGEtPnRpbWVzdGFtcCA9IGppZmZpZXM7CiAJaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoKE5GU19TRVJWRVIoY2FsbGRhdGEtPmlub2RlKSktPm5mc19jbGllbnQsCiAJCQkJJmNhbGxkYXRhLT5hcmcuc2VxX2FyZ3MsICZjYWxsZGF0YS0+cmVzLnNlcV9yZXMsCkBAIC0xODMyLDggKzE5MzAsNiBAQAogCWNhbGxkYXRhLT5zdGF0ZSA9IHN0YXRlOwogCWNhbGxkYXRhLT5hcmcuZmggPSBORlNfRkgoc3RhdGUtPmlub2RlKTsKIAljYWxsZGF0YS0+YXJnLnN0YXRlaWQgPSAmc3RhdGUtPm9wZW5fc3RhdGVpZDsKLQlpZiAobmZzNF9oYXNfc2Vzc2lvbihzZXJ2ZXItPm5mc19jbGllbnQpKQotCQltZW1zZXQoY2FsbGRhdGEtPmFyZy5zdGF0ZWlkLT5kYXRhLCAwLCA0KTsgICAgLyogY2xlYXIgc2VxaWQgKi8KIAkvKiBTZXJpYWxpemF0aW9uIGZvciB0aGUgc2VxdWVuY2UgaWQgKi8KIAljYWxsZGF0YS0+YXJnLnNlcWlkID0gbmZzX2FsbG9jX3NlcWlkKCZzdGF0ZS0+b3duZXItPnNvX3NlcWlkKTsKIAlpZiAoY2FsbGRhdGEtPmFyZy5zZXFpZCA9PSBOVUxMKQpAQCAtMTk4MSw3ICsyMDc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBuZnM0X2Nsb3NlX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgaW50IGlzX3N5bmMpCitzdGF0aWMgdm9pZCBuZnM0X2Nsb3NlX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgaW50IGlzX3N5bmMpCiB7CiAJaWYgKGN0eC0+c3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMjUzMiw3ICsyNjI4LDYgQEAKIAluZnM0X3NlcXVlbmNlX2RvbmUocmVzLT5zZXJ2ZXIsICZyZXMtPnNlcV9yZXMsIHRhc2stPnRrX3N0YXR1cyk7CiAJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIHJlcy0+c2VydmVyLCBOVUxMKSA9PSAtRUFHQUlOKQogCQlyZXR1cm4gMDsKLQluZnM0X3NlcXVlbmNlX2ZyZWVfc2xvdChyZXMtPnNlcnZlci0+bmZzX2NsaWVudCwgJnJlcy0+c2VxX3Jlcyk7CiAJdXBkYXRlX2NoYW5nZWF0dHIoZGlyLCAmcmVzLT5jaW5mbyk7CiAJbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlKGRpciwgJnJlcy0+ZGlyX2F0dHIpOwogCXJldHVybiAxOwpAQCAtMjk3MSwxMSArMzA2NiwxMCBAQAogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBuZnM0X3NlcXVlbmNlX2ZyZWVfc2xvdCBjYWxsZWQgaW4gdGhlIHJlYWQgcnBjX2NhbGxfZG9uZSAqLwogCW5mczRfc2VxdWVuY2VfZG9uZShzZXJ2ZXIsICZkYXRhLT5yZXMuc2VxX3JlcywgdGFzay0+dGtfc3RhdHVzKTsKIAogCWlmIChuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBzZXJ2ZXIsIGRhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUpID09IC1FQUdBSU4pIHsKLQkJbmZzNF9yZXN0YXJ0X3JwYyh0YXNrLCBzZXJ2ZXItPm5mc19jbGllbnQpOworCQluZnNfcmVzdGFydF9ycGModGFzaywgc2VydmVyLT5uZnNfY2xpZW50KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0yOTk1LDEyICszMDg5LDExIEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRhdGEtPmlub2RlOwogCQotCS8qIHNsb3QgaXMgZnJlZWQgaW4gbmZzX3dyaXRlYmFja19kb25lICovCiAJbmZzNF9zZXF1ZW5jZV9kb25lKE5GU19TRVJWRVIoaW5vZGUpLCAmZGF0YS0+cmVzLnNlcV9yZXMsCiAJCQkgICB0YXNrLT50a19zdGF0dXMpOwogCiAJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIE5GU19TRVJWRVIoaW5vZGUpLCBkYXRhLT5hcmdzLmNvbnRleHQtPnN0YXRlKSA9PSAtRUFHQUlOKSB7Ci0JCW5mczRfcmVzdGFydF9ycGModGFzaywgTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQpOworCQluZnNfcmVzdGFydF9ycGModGFzaywgTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJaWYgKHRhc2stPnRrX3N0YXR1cyA+PSAwKSB7CkBAIC0zMDI4LDExICszMTIxLDkgQEAKIAluZnM0X3NlcXVlbmNlX2RvbmUoTkZTX1NFUlZFUihpbm9kZSksICZkYXRhLT5yZXMuc2VxX3JlcywKIAkJCSAgIHRhc2stPnRrX3N0YXR1cyk7CiAJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIE5GU19TRVJWRVIoaW5vZGUpLCBOVUxMKSA9PSAtRUFHQUlOKSB7Ci0JCW5mczRfcmVzdGFydF9ycGModGFzaywgTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQpOworCQluZnNfcmVzdGFydF9ycGModGFzaywgTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9Ci0JbmZzNF9zZXF1ZW5jZV9mcmVlX3Nsb3QoTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQsCi0JCQkJJmRhdGEtPnJlcy5zZXFfcmVzKTsKIAluZnNfcmVmcmVzaF9pbm9kZShpbm9kZSwgZGF0YS0+cmVzLmZhdHRyKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNTAsNyArMzQ0MSw3IEBACiAJCWNhc2UgLU5GUzRFUlJfU0VRX01JU09SREVSRUQ6CiAJCQlkcHJpbnRrKCIlcyBFUlJPUiAlZCwgUmVzZXQgc2Vzc2lvblxuIiwgX19mdW5jX18sCiAJCQkJdGFzay0+dGtfc3RhdHVzKTsKLQkJCXNldF9iaXQoTkZTNENMTlRfU0VTU0lPTl9TRVRVUCwgJmNscC0+Y2xfc3RhdGUpOworCQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOwogCQkJdGFzay0+dGtfc3RhdHVzID0gMDsKIAkJCXJldHVybiAtRUFHQUlOOwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpAQCAtMzQ4MywxMiArMzU3NCwyMyBAQAogewogCXN0cnVjdCBuZnM0X2RlbGVncmV0dXJuZGF0YSAqZGF0YSA9IGNhbGxkYXRhOwogCi0JbmZzNF9zZXF1ZW5jZV9kb25lX2ZyZWVfc2xvdChkYXRhLT5yZXMuc2VydmVyLCAmZGF0YS0+cmVzLnNlcV9yZXMsCi0JCQkJICAgICB0YXNrLT50a19zdGF0dXMpOworCW5mczRfc2VxdWVuY2VfZG9uZShkYXRhLT5yZXMuc2VydmVyLCAmZGF0YS0+cmVzLnNlcV9yZXMsCisJCQl0YXNrLT50a19zdGF0dXMpOwogCi0JZGF0YS0+cnBjX3N0YXR1cyA9IHRhc2stPnRrX3N0YXR1czsKLQlpZiAoZGF0YS0+cnBjX3N0YXR1cyA9PSAwKQorCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CisJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgorCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKKwljYXNlIDA6CiAJCXJlbmV3X2xlYXNlKGRhdGEtPnJlcy5zZXJ2ZXIsIGRhdGEtPnRpbWVzdGFtcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBkYXRhLT5yZXMuc2VydmVyLCBOVUxMKSA9PQorCQkJCS1FQUdBSU4pIHsKKwkJCW5mc19yZXN0YXJ0X3JwYyh0YXNrLCBkYXRhLT5yZXMuc2VydmVyLT5uZnNfY2xpZW50KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlkYXRhLT5ycGNfc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOwogfQogCiBzdGF0aWMgdm9pZCBuZnM0X2RlbGVncmV0dXJuX3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpCkBAIC0zNzQxLDExICszODQzLDkgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIGNhbGxkYXRhLT5zZXJ2ZXIsIE5VTEwpID09IC1FQUdBSU4pCi0JCQkJbmZzNF9yZXN0YXJ0X3JwYyh0YXNrLAotCQkJCQkJY2FsbGRhdGEtPnNlcnZlci0+bmZzX2NsaWVudCk7CisJCQkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssCisJCQkJCQkgY2FsbGRhdGEtPnNlcnZlci0+bmZzX2NsaWVudCk7CiAJfQotCW5mczRfc2VxdWVuY2VfZnJlZV9zbG90KGNhbGxkYXRhLT5zZXJ2ZXItPm5mc19jbGllbnQsCi0JCQkJJmNhbGxkYXRhLT5yZXMuc2VxX3Jlcyk7CiB9CiAKIHN0YXRpYyB2b2lkIG5mczRfbG9ja3VfcHJlcGFyZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCkBAIC0zOTIxLDE0ICs0MDIxLDIwIEBACiAJZHByaW50aygiJXM6IGRvbmUhLCByZXQgPSAlZFxuIiwgX19mdW5jX18sIGRhdGEtPnJwY19zdGF0dXMpOwogfQogCitzdGF0aWMgdm9pZCBuZnM0X3JlY292ZXJfbG9ja19wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCit7CisJcnBjX3Rhc2tfc2V0X3ByaW9yaXR5KHRhc2ssIFJQQ19QUklPUklUWV9QUklWSUxFR0VEKTsKKwluZnM0X2xvY2tfcHJlcGFyZSh0YXNrLCBjYWxsZGF0YSk7Cit9CisKIHN0YXRpYyB2b2lkIG5mczRfbG9ja19kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mczRfbG9ja2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKIAogCWRwcmludGsoIiVzOiBiZWdpbiFcbiIsIF9fZnVuY19fKTsKIAotCW5mczRfc2VxdWVuY2VfZG9uZV9mcmVlX3Nsb3QoZGF0YS0+c2VydmVyLCAmZGF0YS0+cmVzLnNlcV9yZXMsCi0JCQkJICAgICB0YXNrLT50a19zdGF0dXMpOworCW5mczRfc2VxdWVuY2VfZG9uZShkYXRhLT5zZXJ2ZXIsICZkYXRhLT5yZXMuc2VxX3JlcywKKwkJCXRhc2stPnRrX3N0YXR1cyk7CiAKIAlkYXRhLT5ycGNfc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOwogCWlmIChSUENfQVNTQVNTSU5BVEVEKHRhc2spKQpAQCAtMzk3Niw3ICs0MDgyLDEzIEBACiAJLnJwY19yZWxlYXNlID0gbmZzNF9sb2NrX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgaW50IF9uZnM0X2RvX3NldGxrKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwsIGludCByZWNsYWltKQorc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgbmZzNF9yZWNvdmVyX2xvY2tfb3BzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gbmZzNF9yZWNvdmVyX2xvY2tfcHJlcGFyZSwKKwkucnBjX2NhbGxfZG9uZSA9IG5mczRfbG9ja19kb25lLAorCS5ycGNfcmVsZWFzZSA9IG5mczRfbG9ja19yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfbmZzNF9kb19zZXRsayhzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLCBpbnQgcmVjb3ZlcnlfdHlwZSkKIHsKIAlzdHJ1Y3QgbmZzNF9sb2NrZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2s7CkBAIC00MDAwLDggKzQxMTIsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKElTX1NFVExLVyhjbWQpKQogCQlkYXRhLT5hcmcuYmxvY2sgPSAxOwotCWlmIChyZWNsYWltICE9IDApCi0JCWRhdGEtPmFyZy5yZWNsYWltID0gMTsKKwlpZiAocmVjb3ZlcnlfdHlwZSA+IE5GU19MT0NLX05FVykgeworCQlpZiAocmVjb3ZlcnlfdHlwZSA9PSBORlNfTE9DS19SRUNMQUlNKQorCQkJZGF0YS0+YXJnLnJlY2xhaW0gPSBORlNfTE9DS19SRUNMQUlNOworCQl0YXNrX3NldHVwX2RhdGEuY2FsbGJhY2tfb3BzID0gJm5mczRfcmVjb3Zlcl9sb2NrX29wczsKKwl9CiAJbXNnLnJwY19hcmdwID0gJmRhdGEtPmFyZywKIAltc2cucnBjX3Jlc3AgPSAmZGF0YS0+cmVzLAogCXRhc2tfc2V0dXBfZGF0YS5jYWxsYmFja19kYXRhID0gZGF0YTsKQEAgLTQwMjgsNyArNDE0Myw3IEBACiAJCS8qIENhY2hlIHRoZSBsb2NrIGlmIHBvc3NpYmxlLi4uICovCiAJCWlmICh0ZXN0X2JpdChORlNfREVMRUdBVEVEX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSAhPSAwKQogCQkJcmV0dXJuIDA7Ci0JCWVyciA9IF9uZnM0X2RvX3NldGxrKHN0YXRlLCBGX1NFVExLLCByZXF1ZXN0LCAxKTsKKwkJZXJyID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIEZfU0VUTEssIHJlcXVlc3QsIE5GU19MT0NLX1JFQ0xBSU0pOwogCQlpZiAoZXJyICE9IC1ORlM0RVJSX0RFTEFZKQogCQkJYnJlYWs7CiAJCW5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CkBAIC00MDQ4LDExICs0MTYzLDE3IEBACiAJZG8gewogCQlpZiAodGVzdF9iaXQoTkZTX0RFTEVHQVRFRF9TVEFURSwgJnN0YXRlLT5mbGFncykgIT0gMCkKIAkJCXJldHVybiAwOwotCQllcnIgPSBfbmZzNF9kb19zZXRsayhzdGF0ZSwgRl9TRVRMSywgcmVxdWVzdCwgMCk7Ci0JCWlmIChlcnIgIT0gLU5GUzRFUlJfREVMQVkpCi0JCQlicmVhazsKLQkJbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwgZXJyLCAmZXhjZXB0aW9uKTsKKwkJZXJyID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIEZfU0VUTEssIHJlcXVlc3QsIE5GU19MT0NLX0VYUElSRUQpOworCQlzd2l0Y2ggKGVycikgeworCQlkZWZhdWx0OgorCQkJZ290byBvdXQ7CisJCWNhc2UgLU5GUzRFUlJfR1JBQ0U6CisJCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJCQluZnM0X2hhbmRsZV9leGNlcHRpb24oc2VydmVyLCBlcnIsICZleGNlcHRpb24pOworCQkJZXJyID0gMDsKKwkJfQogCX0gd2hpbGUgKGV4Y2VwdGlvbi5yZXRyeSk7CitvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDA3OCw3ICs0MTk5LDcgQEAKIAkJc3RhdHVzID0gZG9fdmZzX2xvY2socmVxdWVzdC0+ZmxfZmlsZSwgcmVxdWVzdCk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0Jc3RhdHVzID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIGNtZCwgcmVxdWVzdCwgMCk7CisJc3RhdHVzID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIGNtZCwgcmVxdWVzdCwgTkZTX0xPQ0tfTkVXKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAkvKiBOb3RlOiB3ZSBhbHdheXMgd2FudCB0byBzbGVlcCBoZXJlISAqLwpAQCAtNDE2MSw3ICs0MjgyLDcgQEAKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gb3V0OwogCWRvIHsKLQkJZXJyID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIEZfU0VUTEssIGZsLCAwKTsKKwkJZXJyID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIEZfU0VUTEssIGZsLCBORlNfTE9DS19ORVcpOwogCQlzd2l0Y2ggKGVycikgewogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmhhbmRsZWQgZXJyb3IgJWQuXG4iLApAQCAtNDE3Miw2ICs0MjkzLDExIEBACiAJCQljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CiAJCQljYXNlIC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEOgogCQkJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgorCQkJY2FzZSAtTkZTNEVSUl9CQURTRVNTSU9OOgorCQkJY2FzZSAtTkZTNEVSUl9CQURTTE9UOgorCQkJY2FzZSAtTkZTNEVSUl9CQURfSElHSF9TTE9UOgorCQkJY2FzZSAtTkZTNEVSUl9DT05OX05PVF9CT1VORF9UT19TRVNTSU9OOgorCQkJY2FzZSAtTkZTNEVSUl9ERUFEU0VTU0lPTjoKIAkJCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KHNlcnZlci0+bmZzX2NsaWVudCk7CiAJCQkJZ290byBvdXQ7CiAJCQljYXNlIC1FUkVTVEFSVFNZUzoKQEAgLTQyOTYsNyArNDQyMiw3IEBACiAgKiBORlM0RVJSX0JBRFNFU1NJT04gaW4gdGhlIHNlcXVlbmNlIG9wZXJhdGlvbiwgYW5kIHdpbGwgdGhlcmVmb3JlCiAgKiBiZSBpbiBzb21lIHBoYXNlIG9mIHNlc3Npb24gcmVzZXQuCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF9wcm9jX2V4Y2hhbmdlX2lkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK2ludCBuZnM0X3Byb2NfZXhjaGFuZ2VfaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQogewogCW5mczRfdmVyaWZpZXIgdmVyaWZpZXI7CiAJc3RydWN0IG5mczQxX2V4Y2hhbmdlX2lkX2FyZ3MgYXJncyA9IHsKQEAgLTQzMTgsNiArNDQ0NCw5IEBACiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CiAJQlVHX09OKGNscCA9PSBOVUxMKTsKIAorCS8qIFJlbW92ZSBzZXJ2ZXItb25seSBmbGFncyAqLworCWFyZ3MuZmxhZ3MgJj0gfkVYQ0hHSUQ0X0ZMQUdfQ09ORklSTUVEX1I7CisKIAlwID0gKHUzMiAqKXZlcmlmaWVyLmRhdGE7CiAJKnArKyA9IGh0b25sKCh1MzIpY2xwLT5jbF9ib290X3RpbWUudHZfc2VjKTsKIAkqcCA9IGh0b25sKCh1MzIpY2xwLT5jbF9ib290X3RpbWUudHZfbnNlYyk7CkBAIC00MzYxLDExICs0NDkwLDEyIEBACiAJCQkoc3RydWN0IG5mczRfZ2V0X2xlYXNlX3RpbWVfZGF0YSAqKWNhbGxkYXRhOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CisJcnBjX3Rhc2tfc2V0X3ByaW9yaXR5KHRhc2ssIFJQQ19QUklPUklUWV9QUklWSUxFR0VEKTsKIAkvKiBqdXN0IHNldHVwIHNlcXVlbmNlLCBkbyBub3QgdHJpZ2dlciBzZXNzaW9uIHJlY292ZXJ5CiAJICAgc2luY2Ugd2UncmUgaW52b2tlZCB3aXRoaW4gb25lICovCiAJcmV0ID0gbmZzNDFfc2V0dXBfc2VxdWVuY2UoZGF0YS0+Y2xwLT5jbF9zZXNzaW9uLAotCQkJCQkmZGF0YS0+YXJncy0+bGFfc2VxX2FyZ3MsCi0JCQkJCSZkYXRhLT5yZXMtPmxyX3NlcV9yZXMsIDAsIHRhc2spOworCQkJCSAgICZkYXRhLT5hcmdzLT5sYV9zZXFfYXJncywKKwkJCQkgICAmZGF0YS0+cmVzLT5scl9zZXFfcmVzLCAwLCB0YXNrKTsKIAogCUJVR19PTihyZXQgPT0gLUVBR0FJTik7CiAJcnBjX2NhbGxfc3RhcnQodGFzayk7CkBAIC00Mzg5LDEwICs0NTE5LDkgQEAKIAkJZHByaW50aygiJXMgUmV0cnk6IHRrX3N0YXR1cyAlZFxuIiwgX19mdW5jX18sIHRhc2stPnRrX3N0YXR1cyk7CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUlOKTsKIAkJdGFzay0+dGtfc3RhdHVzID0gMDsKLQkJbmZzNF9yZXN0YXJ0X3JwYyh0YXNrLCBkYXRhLT5jbHApOworCQluZnNfcmVzdGFydF9ycGModGFzaywgZGF0YS0+Y2xwKTsKIAkJcmV0dXJuOwogCX0KLQluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoZGF0YS0+Y2xwLCAmZGF0YS0+cmVzLT5scl9zZXFfcmVzKTsKIAlkcHJpbnRrKCI8LS0gJXNcbiIsIF9fZnVuY19fKTsKIH0KIApAQCAtNDQ2NSw3ICs0NTk0LDYgQEAKIAlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IG1heF9zbG90czsgKytpKQogCQl0YmwtPnNsb3RzW2ldLnNlcV9uciA9IGl2YWx1ZTsKLQl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQgPSAtMTsKIAlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKIAlkcHJpbnRrKCIlczogdGJsPSVwIHNsb3RzPSVwIG1heF9zbG90cz0lZFxuIiwgX19mdW5jX18sCiAJCXRibCwgdGJsLT5zbG90cywgdGJsLT5tYXhfc2xvdHMpOwpAQCAtNDUxNSw3ICs0NjQzLDYgQEAKIHN0YXRpYyBpbnQgbmZzNF9pbml0X3Nsb3RfdGFibGUoc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsLAogCQlpbnQgbWF4X3Nsb3RzLCBpbnQgaXZhbHVlKQogewotCWludCBpOwogCXN0cnVjdCBuZnM0X3Nsb3QgKnNsb3Q7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKQEAgLTQ1MjYsMTggKzQ2NTMsOSBAQAogCXNsb3QgPSBrY2FsbG9jKG1heF9zbG90cywgc2l6ZW9mKHN0cnVjdCBuZnM0X3Nsb3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNsb3QpCiAJCWdvdG8gb3V0OwotCWZvciAoaSA9IDA7IGkgPCBtYXhfc2xvdHM7ICsraSkKLQkJc2xvdFtpXS5zZXFfbnIgPSBpdmFsdWU7CiAJcmV0ID0gMDsKIAogCXNwaW5fbG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKLQlpZiAodGJsLT5zbG90cyAhPSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwotCQlkcHJpbnRrKCIlczogc2xvdCB0YWJsZSBhbHJlYWR5IGluaXRpYWxpemVkLiB0Ymw9JXAgc2xvdHM9JXBcbiIsCi0JCQlfX2Z1bmNfXywgdGJsLCB0YmwtPnNsb3RzKTsKLQkJV0FSTl9PTigxKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiAJdGJsLT5tYXhfc2xvdHMgPSBtYXhfc2xvdHM7CiAJdGJsLT5zbG90cyA9IHNsb3Q7CiAJdGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkID0gLTE7ICAvKiBubyBzbG90IGlzIGN1cnJlbnRseSB1c2VkICovCkBAIC00NTQ3LDEwICs0NjY1LDYgQEAKIG91dDoKIAlkcHJpbnRrKCI8LS0gJXM6IHJldHVybiAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAJcmV0dXJuIHJldDsKLQotb3V0X2ZyZWU6Ci0Ja2ZyZWUoc2xvdCk7Ci0JZ290byBvdXQ7CiB9CiAKIC8qCkBAIC00NTU4LDE3ICs0NjcyLDI0IEBACiAgKi8KIHN0YXRpYyBpbnQgbmZzNF9pbml0X3Nsb3RfdGFibGVzKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0Ymw7CisJaW50IHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBuZnM0X2luaXRfc2xvdF90YWJsZSgmc2Vzc2lvbi0+ZmNfc2xvdF90YWJsZSwKLQkJCXNlc3Npb24tPmZjX2F0dHJzLm1heF9yZXFzLCAxKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOworCXRibCA9ICZzZXNzaW9uLT5mY19zbG90X3RhYmxlOworCWlmICh0YmwtPnNsb3RzID09IE5VTEwpIHsKKwkJc3RhdHVzID0gbmZzNF9pbml0X3Nsb3RfdGFibGUodGJsLAorCQkJCXNlc3Npb24tPmZjX2F0dHJzLm1heF9yZXFzLCAxKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJfQogCi0Jc3RhdHVzID0gbmZzNF9pbml0X3Nsb3RfdGFibGUoJnNlc3Npb24tPmJjX3Nsb3RfdGFibGUsCi0JCQlzZXNzaW9uLT5iY19hdHRycy5tYXhfcmVxcywgMCk7Ci0JaWYgKHN0YXR1cykKLQkJbmZzNF9kZXN0cm95X3Nsb3RfdGFibGVzKHNlc3Npb24pOworCXRibCA9ICZzZXNzaW9uLT5iY19zbG90X3RhYmxlOworCWlmICh0YmwtPnNsb3RzID09IE5VTEwpIHsKKwkJc3RhdHVzID0gbmZzNF9pbml0X3Nsb3RfdGFibGUodGJsLAorCQkJCXNlc3Npb24tPmJjX2F0dHJzLm1heF9yZXFzLCAwKTsKKwkJaWYgKHN0YXR1cykKKwkJCW5mczRfZGVzdHJveV9zbG90X3RhYmxlcyhzZXNzaW9uKTsKKwl9CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDU4Miw3ICs0NzAzLDYgQEAKIAlpZiAoIXNlc3Npb24pCiAJCXJldHVybiBOVUxMOwogCi0Jc2V0X2JpdChORlM0Q0xOVF9TRVNTSU9OX1NFVFVQLCAmY2xwLT5jbF9zdGF0ZSk7CiAJLyoKIAkgKiBUaGUgY3JlYXRlIHNlc3Npb24gcmVwbHkgcmFjZXMgd2l0aCB0aGUgc2VydmVyIGJhY2sKIAkgKiBjaGFubmVsIHByb2JlLiBNYXJrIHRoZSBjbGllbnQgTkZTX0NTX1NFU1NJT05fSU5JVElORwpAQCAtNDU5MCwxMiArNDcxMCwxNSBAQAogCSAqIG5mc19jbGllbnQgc3RydWN0CiAJICovCiAJY2xwLT5jbF9jb25zX3N0YXRlID0gTkZTX0NTX1NFU1NJT05fSU5JVElORzsKKwlpbml0X2NvbXBsZXRpb24oJnNlc3Npb24tPmNvbXBsZXRlKTsKIAogCXRibCA9ICZzZXNzaW9uLT5mY19zbG90X3RhYmxlOworCXRibC0+aGlnaGVzdF91c2VkX3Nsb3RpZCA9IC0xOwogCXNwaW5fbG9ja19pbml0KCZ0YmwtPnNsb3RfdGJsX2xvY2spOwotCXJwY19pbml0X3dhaXRfcXVldWUoJnRibC0+c2xvdF90Ymxfd2FpdHEsICJGb3JlQ2hhbm5lbCBTbG90IHRhYmxlIik7CisJcnBjX2luaXRfcHJpb3JpdHlfd2FpdF9xdWV1ZSgmdGJsLT5zbG90X3RibF93YWl0cSwgIkZvcmVDaGFubmVsIFNsb3QgdGFibGUiKTsKIAogCXRibCA9ICZzZXNzaW9uLT5iY19zbG90X3RhYmxlOworCXRibC0+aGlnaGVzdF91c2VkX3Nsb3RpZCA9IC0xOwogCXNwaW5fbG9ja19pbml0KCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCXJwY19pbml0X3dhaXRfcXVldWUoJnRibC0+c2xvdF90Ymxfd2FpdHEsICJCYWNrQ2hhbm5lbCBTbG90IHRhYmxlIik7CiAKQEAgLTQ3NDcsMTEgKzQ4NzAsMTAgQEAKICAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIHZlcmlmeSB0aGUgc2Vzc2lvbiBpcwogICogZXhwaXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KLWludCBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKmNscCwgaW50IHJlc2V0KQoraW50IG5mczRfcHJvY19jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgKnB0cjsKLQlzdHJ1Y3QgbmZzX2ZzaW5mbyBmc2luZm87CiAJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNscC0+Y2xfc2Vzc2lvbjsKIAogCWRwcmludGsoIi0tPiAlcyBjbHA9JXAgc2Vzc2lvbj0lcFxuIiwgX19mdW5jX18sIGNscCwgc2Vzc2lvbik7CkBAIC00NzYwLDM1ICs0ODgyLDE5IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7CiAKLQkvKiBJbml0IG9yIHJlc2V0IHRoZSBmb3JlIGNoYW5uZWwgKi8KLQlpZiAocmVzZXQpCi0JCXN0YXR1cyA9IG5mczRfcmVzZXRfc2xvdF90YWJsZXMoc2Vzc2lvbik7Ci0JZWxzZQotCQlzdGF0dXMgPSBuZnM0X2luaXRfc2xvdF90YWJsZXMoc2Vzc2lvbik7Ci0JZHByaW50aygiZm9yZSBjaGFubmVsIHNsb3QgdGFibGUgaW5pdGlhbGl6YXRpb24gcmV0dXJuZWQgJWRcbiIsIHN0YXR1cyk7CisJLyogSW5pdCBhbmQgcmVzZXQgdGhlIGZvcmUgY2hhbm5lbCAqLworCXN0YXR1cyA9IG5mczRfaW5pdF9zbG90X3RhYmxlcyhzZXNzaW9uKTsKKwlkcHJpbnRrKCJzbG90IHRhYmxlIGluaXRpYWxpemF0aW9uIHJldHVybmVkICVkXG4iLCBzdGF0dXMpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0OworCXN0YXR1cyA9IG5mczRfcmVzZXRfc2xvdF90YWJsZXMoc2Vzc2lvbik7CisJZHByaW50aygic2xvdCB0YWJsZSByZXNldCByZXR1cm5lZCAlZFxuIiwgc3RhdHVzKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIAogCXB0ciA9ICh1bnNpZ25lZCAqKSZzZXNzaW9uLT5zZXNzX2lkLmRhdGFbMF07CiAJZHByaW50aygiJXMgY2xpZW50PnNlcWlkICVkIHNlc3Npb25pZCAldToldToldToldVxuIiwgX19mdW5jX18sCiAJCWNscC0+Y2xfc2VxaWQsIHB0clswXSwgcHRyWzFdLCBwdHJbMl0sIHB0clszXSk7Ci0KLQlpZiAocmVzZXQpCi0JCS8qIExlYXNlIHRpbWUgaXMgYWxlYWR5IHNldCAqLwotCQlnb3RvIG91dDsKLQotCS8qIEdldCB0aGUgbGVhc2UgdGltZSAqLwotCXN0YXR1cyA9IG5mczRfcHJvY19nZXRfbGVhc2VfdGltZShjbHAsICZmc2luZm8pOwotCWlmIChzdGF0dXMgPT0gMCkgewotCQkvKiBVcGRhdGUgbGVhc2UgdGltZSBhbmQgc2NoZWR1bGUgcmVuZXdhbCAqLwotCQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7Ci0JCWNscC0+Y2xfbGVhc2VfdGltZSA9IGZzaW5mby5sZWFzZV90aW1lICogSFo7Ci0JCWNscC0+Y2xfbGFzdF9yZW5ld2FsID0gamlmZmllczsKLQkJY2xlYXJfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKTsKLQkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0KLQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZW5ld2FsKGNscCk7Ci0JfQogb3V0OgogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwogCXJldHVybiBzdGF0dXM7CkBAIC00ODI3LDEzICs0OTMzLDI0IEBACiBpbnQgbmZzNF9pbml0X3Nlc3Npb24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gc2VydmVyLT5uZnNfY2xpZW50OworCXN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb247CisJdW5zaWduZWQgaW50IHJzaXplLCB3c2l6ZTsKIAlpbnQgcmV0OwogCiAJaWYgKCFuZnM0X2hhc19zZXNzaW9uKGNscCkpCiAJCXJldHVybiAwOwogCi0JY2xwLT5jbF9zZXNzaW9uLT5mY19hdHRycy5tYXhfcnFzdF9zeiA9IHNlcnZlci0+d3NpemU7Ci0JY2xwLT5jbF9zZXNzaW9uLT5mY19hdHRycy5tYXhfcmVzcF9zeiA9IHNlcnZlci0+cnNpemU7CisJcnNpemUgPSBzZXJ2ZXItPnJzaXplOworCWlmIChyc2l6ZSA9PSAwKQorCQlyc2l6ZSA9IE5GU19NQVhfRklMRV9JT19TSVpFOworCXdzaXplID0gc2VydmVyLT53c2l6ZTsKKwlpZiAod3NpemUgPT0gMCkKKwkJd3NpemUgPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKKworCXNlc3Npb24gPSBjbHAtPmNsX3Nlc3Npb247CisJc2Vzc2lvbi0+ZmNfYXR0cnMubWF4X3Jxc3Rfc3ogPSB3c2l6ZSArIG5mczQxX21heHdyaXRlX292ZXJoZWFkOworCXNlc3Npb24tPmZjX2F0dHJzLm1heF9yZXNwX3N6ID0gcnNpemUgKyBuZnM0MV9tYXhyZWFkX292ZXJoZWFkOworCiAJcmV0ID0gbmZzNF9yZWNvdmVyX2V4cGlyZWRfbGVhc2Uoc2VydmVyKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gbmZzNF9jaGVja19jbGllbnRfcmVhZHkoY2xwKTsKQEAgLTQ4NTgsNyArNDk3NSw3IEBACiAJYXJncy5zYV9jYWNoZV90aGlzID0gMDsKIAogCXJldHVybiBuZnM0X2NhbGxfc3luY19zZXF1ZW5jZShjbHAsIGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAmYXJncywKLQkJCQkgICAgICAgJnJlcywgMCk7CisJCQkJICAgICAgICZyZXMsIGFyZ3Muc2FfY2FjaGVfdGhpcywgMSk7CiB9CiAKIHZvaWQgbmZzNDFfc2VxdWVuY2VfY2FsbF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKQEAgLTQ4NzIsMTEgKzQ5ODksMTAgQEAKIAogCQlpZiAoX25mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIE5VTEwsIGNscCwgTlVMTCkKIAkJCQkJCQkJPT0gLUVBR0FJTikgewotCQkJbmZzNF9yZXN0YXJ0X3JwYyh0YXNrLCBjbHApOworCQkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIGNscCk7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNscCwgdGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIAlkcHJpbnRrKCIlcyBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sIHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAKIAlrZnJlZSh0YXNrLT50a19tc2cucnBjX2FyZ3ApOwpAQCAtNDkzMSw2ICs1MDQ3LDExMCBAQAogCQkJICAgICAgJm5mczQxX3NlcXVlbmNlX29wcywgKHZvaWQgKiljbHApOwogfQogCitzdHJ1Y3QgbmZzNF9yZWNsYWltX2NvbXBsZXRlX2RhdGEgeworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CisJc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfYXJncyBhcmc7CisJc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfcmVzIHJlczsKK307CisKK3N0YXRpYyB2b2lkIG5mczRfcmVjbGFpbV9jb21wbGV0ZV9wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzNF9yZWNsYWltX2NvbXBsZXRlX2RhdGEgKmNhbGxkYXRhID0gZGF0YTsKKworCXJwY190YXNrX3NldF9wcmlvcml0eSh0YXNrLCBSUENfUFJJT1JJVFlfUFJJVklMRUdFRCk7CisJaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoY2FsbGRhdGEtPmNscCwgJmNhbGxkYXRhLT5hcmcuc2VxX2FyZ3MsCisJCQkJJmNhbGxkYXRhLT5yZXMuc2VxX3JlcywgMCwgdGFzaykpCisJCXJldHVybjsKKworCXJwY19jYWxsX3N0YXJ0KHRhc2spOworfQorCitzdGF0aWMgdm9pZCBuZnM0X3JlY2xhaW1fY29tcGxldGVfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5mczRfcmVjbGFpbV9jb21wbGV0ZV9kYXRhICpjYWxsZGF0YSA9IGRhdGE7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IGNhbGxkYXRhLT5jbHA7CisJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMgPSAmY2FsbGRhdGEtPnJlcy5zZXFfcmVzOworCisJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CisJbmZzNDFfc2VxdWVuY2VfZG9uZShjbHAsIHJlcywgdGFzay0+dGtfc3RhdHVzKTsKKwlzd2l0Y2ggKHRhc2stPnRrX3N0YXR1cykgeworCWNhc2UgMDoKKwljYXNlIC1ORlM0RVJSX0NPTVBMRVRFX0FMUkVBRFk6CisJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKKwljYXNlIC1ORlM0RVJSX0RFQURTRVNTSU9OOgorCQkvKgorCQkgKiBIYW5kbGUgdGhlIHNlc3Npb24gZXJyb3IsIGJ1dCBkbyBub3QgcmV0cnkgdGhlIG9wZXJhdGlvbiwgYXMKKwkJICogd2UgaGF2ZSBubyB3YXkgb2YgdGVsbGluZyB3aGV0aGVyIHRoZSBjbGllbnRpZCBoYWQgdG8gYmUKKwkJICogcmVzZXQgYmVmb3JlIHdlIGdvdCBvdXIgcmVwbHkuICBJZiByZXNldCwgYSBuZXcgd2F2ZSBvZgorCQkgKiByZWNsYWltIG9wZXJhdGlvbnMgd2lsbCBmb2xsb3csIGNvbnRhaW5pbmcgdGhlaXIgb3duIHJlY2xhaW0KKwkJICogY29tcGxldGUuICBXZSBkb24ndCB3YW50IG91ciByZXRyeSB0byBnZXQgb24gdGhlIHdheSBvZgorCQkgKiByZWNvdmVyeSBieSBpbmNvcnJlY3RseSBpbmRpY2F0aW5nIHRvIHRoZSBzZXJ2ZXIgdGhhdCB3ZSdyZQorCQkgKiBkb25lIHJlY2xhaW1pbmcgc3RhdGUgc2luY2UgdGhlIHByb2Nlc3MgaGFkIHRvIGJlIHJlc3RhcnRlZC4KKwkJICovCisJCV9uZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBOVUxMLCBjbHAsIE5VTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoX25mczRfYXN5bmNfaGFuZGxlX2Vycm9yKAorCQkJCXRhc2ssIE5VTEwsIGNscCwgTlVMTCkgPT0gLUVBR0FJTikgeworCQkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZHByaW50aygiPC0tICVzXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIG5mczRfZnJlZV9yZWNsYWltX2NvbXBsZXRlX2RhdGEodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzNF9yZWNsYWltX2NvbXBsZXRlX2RhdGEgKmNhbGxkYXRhID0gZGF0YTsKKworCWtmcmVlKGNhbGxkYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgbmZzNF9yZWNsYWltX2NvbXBsZXRlX2NhbGxfb3BzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gbmZzNF9yZWNsYWltX2NvbXBsZXRlX3ByZXBhcmUsCisJLnJwY19jYWxsX2RvbmUgPSBuZnM0X3JlY2xhaW1fY29tcGxldGVfZG9uZSwKKwkucnBjX3JlbGVhc2UgPSBuZnM0X2ZyZWVfcmVjbGFpbV9jb21wbGV0ZV9kYXRhLAorfTsKKworLyoKKyAqIElzc3VlIGEgZ2xvYmFsIHJlY2xhaW0gY29tcGxldGUuCisgKi8KK3N0YXRpYyBpbnQgbmZzNDFfcHJvY19yZWNsYWltX2NvbXBsZXRlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJc3RydWN0IG5mczRfcmVjbGFpbV9jb21wbGV0ZV9kYXRhICpjYWxsZGF0YTsKKwlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2s7CisJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKKwkJLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX1JFQ0xBSU1fQ09NUExFVEVdLAorCX07CisJc3RydWN0IHJwY190YXNrX3NldHVwIHRhc2tfc2V0dXBfZGF0YSA9IHsKKwkJLnJwY19jbGllbnQgPSBjbHAtPmNsX3JwY2NsaWVudCwKKwkJLnJwY19tZXNzYWdlID0gJm1zZywKKwkJLmNhbGxiYWNrX29wcyA9ICZuZnM0X3JlY2xhaW1fY29tcGxldGVfY2FsbF9vcHMsCisJCS5mbGFncyA9IFJQQ19UQVNLX0FTWU5DLAorCX07CisJaW50IHN0YXR1cyA9IC1FTk9NRU07CisKKwlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKKwljYWxsZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpjYWxsZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChjYWxsZGF0YSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKwljYWxsZGF0YS0+Y2xwID0gY2xwOworCWNhbGxkYXRhLT5hcmcub25lX2ZzID0gMDsKKwljYWxsZGF0YS0+cmVzLnNlcV9yZXMuc3Jfc2xvdGlkID0gTkZTNF9NQVhfU0xPVF9UQUJMRTsKKworCW1zZy5ycGNfYXJncCA9ICZjYWxsZGF0YS0+YXJnOworCW1zZy5ycGNfcmVzcCA9ICZjYWxsZGF0YS0+cmVzOworCXRhc2tfc2V0dXBfZGF0YS5jYWxsYmFja19kYXRhID0gY2FsbGRhdGE7CisJdGFzayA9IHJwY19ydW5fdGFzaygmdGFza19zZXR1cF9kYXRhKTsKKwlpZiAoSVNfRVJSKHRhc2spKQorCQlzdGF0dXMgPSBQVFJfRVJSKHRhc2spOworCXJwY19wdXRfdGFzayh0YXNrKTsKK291dDoKKwlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiBzdHJ1Y3QgbmZzNF9zdGF0ZV9yZWNvdmVyeV9vcHMgbmZzNDBfcmVib290X3JlY292ZXJ5X29wcyA9IHsKQEAgLTQ5NDgsOCArNTE2OCw5IEBACiAJLnN0YXRlX2ZsYWdfYml0CT0gTkZTX1NUQVRFX1JFQ0xBSU1fUkVCT09ULAogCS5yZWNvdmVyX29wZW4JPSBuZnM0X29wZW5fcmVjbGFpbSwKIAkucmVjb3Zlcl9sb2NrCT0gbmZzNF9sb2NrX3JlY2xhaW0sCi0JLmVzdGFibGlzaF9jbGlkID0gbmZzNF9wcm9jX2V4Y2hhbmdlX2lkLAorCS5lc3RhYmxpc2hfY2xpZCA9IG5mczQxX2luaXRfY2xpZW50aWQsCiAJLmdldF9jbGlkX2NyZWQJPSBuZnM0X2dldF9leGNoYW5nZV9pZF9jcmVkLAorCS5yZWNsYWltX2NvbXBsZXRlID0gbmZzNDFfcHJvY19yZWNsYWltX2NvbXBsZXRlLAogfTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIApAQCAtNDk2OCw3ICs1MTg5LDcgQEAKIAkuc3RhdGVfZmxhZ19iaXQJPSBORlNfU1RBVEVfUkVDTEFJTV9OT0dSQUNFLAogCS5yZWNvdmVyX29wZW4JPSBuZnM0X29wZW5fZXhwaXJlZCwKIAkucmVjb3Zlcl9sb2NrCT0gbmZzNF9sb2NrX2V4cGlyZWQsCi0JLmVzdGFibGlzaF9jbGlkID0gbmZzNF9wcm9jX2V4Y2hhbmdlX2lkLAorCS5lc3RhYmxpc2hfY2xpZCA9IG5mczQxX2luaXRfY2xpZW50aWQsCiAJLmdldF9jbGlkX2NyZWQJPSBuZnM0X2dldF9leGNoYW5nZV9pZF9jcmVkLAogfTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAyZWY0ZmVjLi42ZDI2M2VkIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0xMTYsNiArMTE2LDc5IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKIAorc3RhdGljIGludCBuZnM0MV9zZXR1cF9zdGF0ZV9yZW5ld2FsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgbmZzX2ZzaW5mbyBmc2luZm87CisKKwlzdGF0dXMgPSBuZnM0X3Byb2NfZ2V0X2xlYXNlX3RpbWUoY2xwLCAmZnNpbmZvKTsKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLyogVXBkYXRlIGxlYXNlIHRpbWUgYW5kIHNjaGVkdWxlIHJlbmV3YWwgKi8KKwkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOworCQljbHAtPmNsX2xlYXNlX3RpbWUgPSBmc2luZm8ubGVhc2VfdGltZSAqIEhaOworCQljbHAtPmNsX2xhc3RfcmVuZXdhbCA9IGppZmZpZXM7CisJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCisJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVuZXdhbChjbHApOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG5mczRfZW5kX2RyYWluX3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXMgPSBjbHAtPmNsX3Nlc3Npb247CisJaW50IG1heF9zbG90czsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfU0VTU0lPTl9EUkFJTklORywgJmNscC0+Y2xfc3RhdGUpKSB7CisJCXNwaW5fbG9jaygmc2VzLT5mY19zbG90X3RhYmxlLnNsb3RfdGJsX2xvY2spOworCQltYXhfc2xvdHMgPSBzZXMtPmZjX3Nsb3RfdGFibGUubWF4X3Nsb3RzOworCQl3aGlsZSAobWF4X3Nsb3RzLS0pIHsKKwkJCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKworCQkJdGFzayA9IHJwY193YWtlX3VwX25leHQoJnNlcy0+ZmNfc2xvdF90YWJsZS4KKwkJCQkJCXNsb3RfdGJsX3dhaXRxKTsKKwkJCWlmICghdGFzaykKKwkJCQlicmVhazsKKwkJCXJwY190YXNrX3NldF9wcmlvcml0eSh0YXNrLCBSUENfUFJJT1JJVFlfUFJJVklMRUdFRCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnNlcy0+ZmNfc2xvdF90YWJsZS5zbG90X3RibF9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2VzID0gY2xwLT5jbF9zZXNzaW9uOworCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCA9ICZzZXMtPmZjX3Nsb3RfdGFibGU7CisKKwlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CisJc2V0X2JpdChORlM0Q0xOVF9TRVNTSU9OX0RSQUlOSU5HLCAmY2xwLT5jbF9zdGF0ZSk7CisJaWYgKHRibC0+aGlnaGVzdF91c2VkX3Nsb3RpZCAhPSAtMSkgeworCQlJTklUX0NPTVBMRVRJT04oc2VzLT5jb21wbGV0ZSk7CisJCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOworCQlyZXR1cm4gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZzZXMtPmNvbXBsZXRlKTsKKwl9CisJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBuZnM0MV9pbml0X2NsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK3sKKwlpbnQgc3RhdHVzOworCisJbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKGNscCk7CisJc3RhdHVzID0gbmZzNF9wcm9jX2V4Y2hhbmdlX2lkKGNscCwgY3JlZCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gb3V0OworCW5mczQxX3NldHVwX3N0YXRlX3JlbmV3YWwoY2xwKTsKKwluZnNfbWFya19jbGllbnRfcmVhZHkoY2xwLCBORlNfQ1NfUkVBRFkpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKIHN0cnVjdCBycGNfY3JlZCAqbmZzNF9nZXRfZXhjaGFuZ2VfaWRfY3JlZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKQEAgLTY5MywxNiArNzY2LDIxIEBACiAJcmV0dXJuIG5ldzsKIH0KIAotdm9pZCBuZnNfZnJlZV9zZXFpZChzdHJ1Y3QgbmZzX3NlcWlkICpzZXFpZCkKK3ZvaWQgbmZzX3JlbGVhc2Vfc2VxaWQoc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpCiB7CiAJaWYgKCFsaXN0X2VtcHR5KCZzZXFpZC0+bGlzdCkpIHsKIAkJc3RydWN0IHJwY19zZXF1ZW5jZSAqc2VxdWVuY2UgPSBzZXFpZC0+c2VxdWVuY2UtPnNlcXVlbmNlOwogCiAJCXNwaW5fbG9jaygmc2VxdWVuY2UtPmxvY2spOwotCQlsaXN0X2RlbCgmc2VxaWQtPmxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZzZXFpZC0+bGlzdCk7CiAJCXNwaW5fdW5sb2NrKCZzZXF1ZW5jZS0+bG9jayk7CiAJCXJwY193YWtlX3VwKCZzZXF1ZW5jZS0+d2FpdCk7CiAJfQorfQorCit2b2lkIG5mc19mcmVlX3NlcWlkKHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkKQoreworCW5mc19yZWxlYXNlX3NlcWlkKHNlcWlkKTsKIAlrZnJlZShzZXFpZCk7CiB9CiAKQEAgLTg3Nyw2ICs5NTUsMTAgQEAKIAkJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKIAkJCWNhc2UgLU5GUzRFUlJfTk9fR1JBQ0U6CiAJCQljYXNlIC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEOgorCQkJY2FzZSAtTkZTNEVSUl9CQURTRVNTSU9OOgorCQkJY2FzZSAtTkZTNEVSUl9CQURTTE9UOgorCQkJY2FzZSAtTkZTNEVSUl9CQURfSElHSF9TTE9UOgorCQkJY2FzZSAtTkZTNEVSUl9DT05OX05PVF9CT1VORF9UT19TRVNTSU9OOgogCQkJCWdvdG8gb3V0OwogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmhhbmRsZWQgZXJyb3IgJWQuIFplcm9pbmcgc3RhdGVcbiIsCkBAIC05NTksNiArMTA0MSwxMCBAQAogCQkJY2FzZSAtTkZTNEVSUl9OT19HUkFDRToKIAkJCQluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9ub2dyYWNlKHNwLT5zb19jbGllbnQsIHN0YXRlKTsKIAkJCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJCQljYXNlIC1ORlM0RVJSX0JBRFNFU1NJT046CisJCQljYXNlIC1ORlM0RVJSX0JBRFNMT1Q6CisJCQljYXNlIC1ORlM0RVJSX0JBRF9ISUdIX1NMT1Q6CisJCQljYXNlIC1ORlM0RVJSX0NPTk5fTk9UX0JPVU5EX1RPX1NFU1NJT046CiAJCQkJZ290byBvdXRfZXJyOwogCQl9CiAJCW5mczRfcHV0X29wZW5fc3RhdGUoc3RhdGUpOwpAQCAtMTAxMSw2ICsxMDk3LDE0IEBACiAJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1faGVscGVyKGNscCwgbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fcmVib290KTsKIH0KIAorc3RhdGljIHZvaWQgbmZzNF9yZWNsYWltX2NvbXBsZXRlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCisJCQkJIGNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqb3BzKQoreworCS8qIE5vdGlmeSB0aGUgc2VydmVyIHdlJ3JlIGRvbmUgcmVjbGFpbWluZyBvdXIgc3RhdGUgKi8KKwlpZiAob3BzLT5yZWNsYWltX2NvbXBsZXRlKQorCQkodm9pZClvcHMtPnJlY2xhaW1fY29tcGxldGUoY2xwKTsKK30KKwogc3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9lbmRfcmVjbGFpbV9yZWJvb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3A7CkBAIC0xMDIwLDYgKzExMTQsOSBAQAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KE5GUzRDTE5UX1JFQ0xBSU1fUkVCT09ULCAmY2xwLT5jbF9zdGF0ZSkpCiAJCXJldHVybjsKIAorCW5mczRfcmVjbGFpbV9jb21wbGV0ZShjbHAsCisJCW5mczRfcmVib290X3JlY292ZXJ5X29wc1tjbHAtPmNsX21pbm9ydmVyc2lvbl0pOworCiAJZm9yIChwb3MgPSByYl9maXJzdCgmY2xwLT5jbF9zdGF0ZV9vd25lcnMpOyBwb3MgIT0gTlVMTDsgcG9zID0gcmJfbmV4dChwb3MpKSB7CiAJCXNwID0gcmJfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciwgc29fY2xpZW50X25vZGUpOwogCQlzcGluX2xvY2soJnNwLT5zb19sb2NrKTsKQEAgLTEwNDYsMjUgKzExNDMsMjUgQEAKIAluZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9oZWxwZXIoY2xwLCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9ub2dyYWNlKTsKIH0KIAotc3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9lbmRfcmVjbGFpbV9ub2dyYWNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0JY2xlYXJfYml0KE5GUzRDTE5UX1JFQ0xBSU1fTk9HUkFDRSwgJmNscC0+Y2xfc3RhdGUpOwotfQotCi1zdGF0aWMgdm9pZCBuZnM0X3JlY292ZXJ5X2hhbmRsZV9lcnJvcihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBpbnQgZXJyb3IpCitzdGF0aWMgaW50IG5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGludCBlcnJvcikKIHsKIAlzd2l0Y2ggKGVycm9yKSB7CiAJCWNhc2UgLU5GUzRFUlJfQ0JfUEFUSF9ET1dOOgogCQkJbmZzX2hhbmRsZV9jYl9wYXRoZG93bihjbHApOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAtTkZTNEVSUl9OT19HUkFDRToKKwkJCW5mczRfc3RhdGVfZW5kX3JlY2xhaW1fcmVib290KGNscCk7CisJCQlyZXR1cm4gMDsKIAkJY2FzZSAtTkZTNEVSUl9TVEFMRV9DTElFTlRJRDoKIAkJY2FzZSAtTkZTNEVSUl9MRUFTRV9NT1ZFRDoKIAkJCXNldF9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpOworCQkJbmZzNF9zdGF0ZV9lbmRfcmVjbGFpbV9yZWJvb3QoY2xwKTsKIAkJCW5mczRfc3RhdGVfc3RhcnRfcmVjbGFpbV9yZWJvb3QoY2xwKTsKIAkJCWJyZWFrOwogCQljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CiAJCQlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKTsKIAkJCW5mczRfc3RhdGVfc3RhcnRfcmVjbGFpbV9ub2dyYWNlKGNscCk7CisJCQlicmVhazsKIAkJY2FzZSAtTkZTNEVSUl9CQURTRVNTSU9OOgogCQljYXNlIC1ORlM0RVJSX0JBRFNMT1Q6CiAJCWNhc2UgLU5GUzRFUlJfQkFEX0hJR0hfU0xPVDoKQEAgLTEwNzIsOCArMTE2OSwxMSBAQAogCQljYXNlIC1ORlM0RVJSX0NPTk5fTk9UX0JPVU5EX1RPX1NFU1NJT046CiAJCWNhc2UgLU5GUzRFUlJfU0VRX0ZBTFNFX1JFVFJZOgogCQljYXNlIC1ORlM0RVJSX1NFUV9NSVNPUkRFUkVEOgotCQkJc2V0X2JpdChORlM0Q0xOVF9TRVNTSU9OX1NFVFVQLCAmY2xwLT5jbF9zdGF0ZSk7CisJCQlzZXRfYml0KE5GUzRDTE5UX1NFU1NJT05fUkVTRVQsICZjbHAtPmNsX3N0YXRlKTsKKwkJCS8qIFplcm8gc2Vzc2lvbiByZXNldCBlcnJvcnMgKi8KKwkJCXJldHVybiAwOwogCX0KKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgbmZzNF9kb19yZWNsYWltKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqb3BzKQpAQCAtMTA5Myw4ICsxMTkzLDcgQEAKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCXNldF9iaXQob3BzLT5vd25lcl9mbGFnX2JpdCwgJnNwLT5zb19mbGFncyk7CiAJCQluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7Ci0JCQluZnM0X3JlY292ZXJ5X2hhbmRsZV9lcnJvcihjbHAsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOworCQkJcmV0dXJuIG5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKIAkJfQogCQluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7CiAJCWdvdG8gcmVzdGFydDsKQEAgLTExMjQsOCArMTIyMyw3IEBACiAJc3RhdHVzID0gb3BzLT5yZW5ld19sZWFzZShjbHAsIGNyZWQpOwogCXB1dF9ycGNjcmVkKGNyZWQpOwogb3V0OgotCW5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBuZnM0X3JlY292ZXJ5X2hhbmRsZV9lcnJvcihjbHAsIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyBpbnQgbmZzNF9yZWNsYWltX2xlYXNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCkBAIC0xMTUxLDU1ICsxMjQ5LDU5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTkZTX1Y0XzEKLXN0YXRpYyB2b2lkIG5mczRfc2Vzc2lvbl9yZWNvdmVyeV9oYW5kbGVfZXJyb3Ioc3RydWN0IG5mc19jbGllbnQgKmNscCwgaW50IGVycikKK3ZvaWQgbmZzNDFfaGFuZGxlX3NlcXVlbmNlX2ZsYWdfZXJyb3JzKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHUzMiBmbGFncykKIHsKLQlzd2l0Y2ggKGVycikgewotCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJaWYgKCFmbGFncykKKwkJcmV0dXJuOworCWVsc2UgaWYgKGZsYWdzICYgU0VRNF9TVEFUVVNfUkVTVEFSVF9SRUNMQUlNX05FRURFRCkgewogCQlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKTsKLQkJc2V0X2JpdChORlM0Q0xOVF9TRVNTSU9OX1NFVFVQLCAmY2xwLT5jbF9zdGF0ZSk7Ci0JfQorCQluZnM0X3N0YXRlX3N0YXJ0X3JlY2xhaW1fcmVib290KGNscCk7CisJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVjb3ZlcnkoY2xwKTsKKwl9IGVsc2UgaWYgKGZsYWdzICYgKFNFUTRfU1RBVFVTX0VYUElSRURfQUxMX1NUQVRFX1JFVk9LRUQgfAorCQkJICAgIFNFUTRfU1RBVFVTX0VYUElSRURfU09NRV9TVEFURV9SRVZPS0VEIHwKKwkJCSAgICBTRVE0X1NUQVRVU19BRE1JTl9TVEFURV9SRVZPS0VEIHwKKwkJCSAgICBTRVE0X1NUQVRVU19SRUNBTExBQkxFX1NUQVRFX1JFVk9LRUQgfAorCQkJICAgIFNFUTRfU1RBVFVTX0xFQVNFX01PVkVEKSkgeworCQlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKTsKKwkJbmZzNF9zdGF0ZV9zdGFydF9yZWNsYWltX25vZ3JhY2UoY2xwKTsKKwkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOworCX0gZWxzZSBpZiAoZmxhZ3MgJiAoU0VRNF9TVEFUVVNfQ0JfUEFUSF9ET1dOIHwKKwkJCSAgICBTRVE0X1NUQVRVU19CQUNLQ0hBTk5FTF9GQVVMVCB8CisJCQkgICAgU0VRNF9TVEFUVVNfQ0JfUEFUSF9ET1dOX1NFU1NJT04pKQorCQluZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9ucyhjbHApOwogfQogCiBzdGF0aWMgaW50IG5mczRfcmVzZXRfc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogCWludCBzdGF0dXM7CiAKKwluZnM0X2JlZ2luX2RyYWluX3Nlc3Npb24oY2xwKTsKIAlzdGF0dXMgPSBuZnM0X3Byb2NfZGVzdHJveV9zZXNzaW9uKGNscC0+Y2xfc2Vzc2lvbik7CiAJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLU5GUzRFUlJfQkFEU0VTU0lPTiAmJgogCSAgICBzdGF0dXMgIT0gLU5GUzRFUlJfREVBRFNFU1NJT04pIHsKLQkJbmZzNF9zZXNzaW9uX3JlY292ZXJ5X2hhbmRsZV9lcnJvcihjbHAsIHN0YXR1cyk7CisJCXN0YXR1cyA9IG5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJbWVtc2V0KGNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLCAwLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwLCAxKTsKKwlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzKQotCQluZnM0X3Nlc3Npb25fcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKLQkJLyogZmFsbCB0aHJvdWdoKi8KKwkJc3RhdHVzID0gbmZzNF9yZWNvdmVyeV9oYW5kbGVfZXJyb3IoY2xwLCBzdGF0dXMpOworCiBvdXQ6Ci0JLyogV2FrZSB1cCB0aGUgbmV4dCBycGMgdGFzayBldmVuIG9uIGVycm9yICovCi0JcnBjX3dha2VfdXBfbmV4dCgmY2xwLT5jbF9zZXNzaW9uLT5mY19zbG90X3RhYmxlLnNsb3RfdGJsX3dhaXRxKTsKKwkvKgorCSAqIExldCB0aGUgc3RhdGUgbWFuYWdlciByZWVzdGFibGlzaCBzdGF0ZQorCSAqLworCWlmICghdGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpICYmCisJICAgIHN0YXR1cyA9PSAwKQorCQluZnM0MV9zZXR1cF9zdGF0ZV9yZW5ld2FsKGNscCk7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IG5mczRfaW5pdGlhbGl6ZV9zZXNzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IG5mczRfcHJvY19jcmVhdGVfc2Vzc2lvbihjbHAsIDApOwotCWlmICghc3RhdHVzKSB7Ci0JCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQpIHsKLQkJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7Ci0JCXNldF9iaXQoTkZTNENMTlRfU0VTU0lPTl9TRVRVUCwgJmNscC0+Y2xfc3RhdGUpOwotCX0gZWxzZSB7Ci0JCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIHN0YXR1cyk7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19CiAjZWxzZSAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIHN0YXRpYyBpbnQgbmZzNF9yZXNldF9zZXNzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbnQgbmZzNF9pbml0aWFsaXplX3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKmNscCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGludCBuZnM0X2VuZF9kcmFpbl9zZXNzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogLyogU2V0IE5GUzRDTE5UX0xFQVNFX0VYUElSRUQgZm9yIGFsbCB2NC4wIGVycm9ycyBhbmQgZm9yIHJlY292ZXJhYmxlIGVycm9ycwpAQCAtMTIzNCw3ICsxMzM2LDggQEAKIAkJCXN0YXR1cyA9IG5mczRfcmVjbGFpbV9sZWFzZShjbHApOwogCQkJaWYgKHN0YXR1cykgewogCQkJCW5mczRfc2V0X2xlYXNlX2V4cGlyZWQoY2xwLCBzdGF0dXMpOwotCQkJCWlmIChzdGF0dXMgPT0gLUVBR0FJTikKKwkJCQlpZiAodGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwKKwkJCQkJCQkmY2xwLT5jbF9zdGF0ZSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChjbHAtPmNsX2NvbnNfc3RhdGUgPT0KIAkJCQkJCQlORlNfQ1NfU0VTU0lPTl9JTklUSU5HKQpAQCAtMTI0Miw1NyArMTM0NSw1NCBAQAogCQkJCWdvdG8gb3V0X2Vycm9yOwogCQkJfQogCQkJY2xlYXJfYml0KE5GUzRDTE5UX0NIRUNLX0xFQVNFLCAmY2xwLT5jbF9zdGF0ZSk7CisJCQlzZXRfYml0KE5GUzRDTE5UX1JFQ0xBSU1fUkVCT09ULCAmY2xwLT5jbF9zdGF0ZSk7CiAJCX0KIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5GUzRDTE5UX0NIRUNLX0xFQVNFLCAmY2xwLT5jbF9zdGF0ZSkpIHsKIAkJCXN0YXR1cyA9IG5mczRfY2hlY2tfbGVhc2UoY2xwKTsKLQkJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSkpCiAJCQkJY29udGludWU7Ci0JCX0KLQkJLyogSW5pdGlhbGl6ZSBvciByZXNldCB0aGUgc2Vzc2lvbiAqLwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5GUzRDTE5UX1NFU1NJT05fU0VUVVAsICZjbHAtPmNsX3N0YXRlKQotCQkgICAmJiBuZnM0X2hhc19zZXNzaW9uKGNscCkpIHsKLQkJCWlmIChjbHAtPmNsX2NvbnNfc3RhdGUgPT0gTkZTX0NTX1NFU1NJT05fSU5JVElORykKLQkJCQlzdGF0dXMgPSBuZnM0X2luaXRpYWxpemVfc2Vzc2lvbihjbHApOwotCQkJZWxzZQotCQkJCXN0YXR1cyA9IG5mczRfcmVzZXRfc2Vzc2lvbihjbHApOwotCQkJaWYgKHN0YXR1cykgewotCQkJCWlmIChzdGF0dXMgPT0gLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQpCi0JCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1ORlM0RVJSX0NCX1BBVEhfRE9XTikKIAkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0KIAkJfQorCisJCS8qIEluaXRpYWxpemUgb3IgcmVzZXQgdGhlIHNlc3Npb24gKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORlM0Q0xOVF9TRVNTSU9OX1JFU0VULCAmY2xwLT5jbF9zdGF0ZSkKKwkJICAgJiYgbmZzNF9oYXNfc2Vzc2lvbihjbHApKSB7CisJCQlzdGF0dXMgPSBuZnM0X3Jlc2V0X3Nlc3Npb24oY2xwKTsKKwkJCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIG91dF9lcnJvcjsKKwkJfQorCiAJCS8qIEZpcnN0IHJlY292ZXIgcmVib290IHN0YXRlLi4uICovCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfUkVDTEFJTV9SRUJPT1QsICZjbHAtPmNsX3N0YXRlKSkgeworCQlpZiAodGVzdF9iaXQoTkZTNENMTlRfUkVDTEFJTV9SRUJPT1QsICZjbHAtPmNsX3N0YXRlKSkgewogCQkJc3RhdHVzID0gbmZzNF9kb19yZWNsYWltKGNscCwKIAkJCQluZnM0X3JlYm9vdF9yZWNvdmVyeV9vcHNbY2xwLT5jbF9taW5vcnZlcnNpb25dKTsKLQkJCWlmIChzdGF0dXMgPT0gLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQpCi0JCQkJY29udGludWU7Ci0JCQlpZiAodGVzdF9iaXQoTkZTNENMTlRfU0VTU0lPTl9TRVRVUCwgJmNscC0+Y2xfc3RhdGUpKQorCQkJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKSB8fAorCQkJICAgIHRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fUkVTRVQsICZjbHAtPmNsX3N0YXRlKSkKIAkJCQljb250aW51ZTsKIAkJCW5mczRfc3RhdGVfZW5kX3JlY2xhaW1fcmVib290KGNscCk7Ci0JCQljb250aW51ZTsKKwkJCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9SRUNMQUlNX05PR1JBQ0UsICZjbHAtPmNsX3N0YXRlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gb3V0X2Vycm9yOwogCQl9CiAKIAkJLyogTm93IHJlY292ZXIgZXhwaXJlZCBzdGF0ZS4uLiAqLwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5GUzRDTE5UX1JFQ0xBSU1fTk9HUkFDRSwgJmNscC0+Y2xfc3RhdGUpKSB7CiAJCQlzdGF0dXMgPSBuZnM0X2RvX3JlY2xhaW0oY2xwLAogCQkJCW5mczRfbm9ncmFjZV9yZWNvdmVyeV9vcHNbY2xwLT5jbF9taW5vcnZlcnNpb25dKTsKLQkJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQkJc2V0X2JpdChORlM0Q0xOVF9SRUNMQUlNX05PR1JBQ0UsICZjbHAtPmNsX3N0YXRlKTsKLQkJCQlpZiAoc3RhdHVzID09IC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAoc3RhdHVzID09IC1ORlM0RVJSX0VYUElSRUQpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9TRVNTSU9OX1NFVFVQLAotCQkJCQkJCQkmY2xwLT5jbF9zdGF0ZSkpCi0JCQkJCWNvbnRpbnVlOworCQkJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKSB8fAorCQkJICAgIHRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fUkVTRVQsICZjbHAtPmNsX3N0YXRlKSB8fAorCQkJICAgIHRlc3RfYml0KE5GUzRDTE5UX1JFQ0xBSU1fUkVCT09ULCAmY2xwLT5jbF9zdGF0ZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc3RhdHVzIDwgMCkKIAkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0gZWxzZQotCQkJCW5mczRfc3RhdGVfZW5kX3JlY2xhaW1fbm9ncmFjZShjbHApOwotCQkJY29udGludWU7CiAJCX0KIAorCQluZnM0X2VuZF9kcmFpbl9zZXNzaW9uKGNscCk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfREVMRUdSRVRVUk4sICZjbHAtPmNsX3N0YXRlKSkgewogCQkJbmZzX2NsaWVudF9yZXR1cm5fbWFya2VkX2RlbGVnYXRpb25zKGNscCk7CiAJCQljb250aW51ZTsKQEAgLTEzMDksOCArMTQwOSw3IEBACiBvdXRfZXJyb3I6CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3I6IHN0YXRlIG1hbmFnZXIgZmFpbGVkIG9uIE5GU3Y0IHNlcnZlciAlcyIKIAkJCSIgd2l0aCBlcnJvciAlZFxuIiwgY2xwLT5jbF9ob3N0bmFtZSwgLXN0YXR1cyk7Ci0JaWYgKHRlc3RfYml0KE5GUzRDTE5UX1JFQ0xBSU1fUkVCT09ULCAmY2xwLT5jbF9zdGF0ZSkpCi0JCW5mczRfc3RhdGVfZW5kX3JlY2xhaW1fcmVib290KGNscCk7CisJbmZzNF9lbmRfZHJhaW5fc2Vzc2lvbihjbHApOwogCW5mczRfY2xlYXJfc3RhdGVfbWFuYWdlcl9iaXQoY2xwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggMjBiNGUzMC4uZTQzN2ZkNiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC00NiwxMSArNDYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KICNpbmNsdWRlIDxsaW51eC9uZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2lkbWFwLmg+CiAjaW5jbHVkZSAibmZzNF9mcy5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCiAKICNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfWERSCiAKQEAgLTEzNCw3ICsxMzYsNyBAQAogI2RlZmluZSBkZWNvZGVfbG9va3VwX21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6KQogI2RlZmluZSBlbmNvZGVfc2hhcmVfYWNjZXNzX21heHN6IFwKIAkJCQkoMikKLSNkZWZpbmUgZW5jb2RlX2NyZWF0ZW1vZGVfbWF4c3oJKDEgKyBlbmNvZGVfYXR0cnNfbWF4c3opCisjZGVmaW5lIGVuY29kZV9jcmVhdGVtb2RlX21heHN6CSgxICsgZW5jb2RlX2F0dHJzX21heHN6ICsgZW5jb2RlX3ZlcmlmaWVyX21heHN6KQogI2RlZmluZSBlbmNvZGVfb3BlbnR5cGVfbWF4c3oJKDEgKyBlbmNvZGVfY3JlYXRlbW9kZV9tYXhzeikKICNkZWZpbmUgZW5jb2RlX2NsYWltX251bGxfbWF4c3oJKDEgKyBuZnM0X25hbWVfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9vcGVuX21heHN6CShvcF9lbmNvZGVfaGRyX21heHN6ICsgXApAQCAtMjk5LDYgKzMwMSw4IEBACiAJCQkJWERSX1FVQURMRU4oTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgKyA0KQogI2RlZmluZSBkZWNvZGVfc2VxdWVuY2VfbWF4c3oJKG9wX2RlY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJWERSX1FVQURMRU4oTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgKyA1KQorI2RlZmluZSBlbmNvZGVfcmVjbGFpbV9jb21wbGV0ZV9tYXhzegkob3BfZW5jb2RlX2hkcl9tYXhzeiArIDQpCisjZGVmaW5lIGRlY29kZV9yZWNsYWltX2NvbXBsZXRlX21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6ICsgNCkKICNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLwogI2RlZmluZSBlbmNvZGVfc2VxdWVuY2VfbWF4c3oJMAogI2RlZmluZSBkZWNvZGVfc2VxdWVuY2VfbWF4c3oJMApAQCAtNjc2LDYgKzY4MCwyNSBAQAogCQkJCQkgZGVjb2RlX3NlcXVlbmNlX21heHN6ICsgXAogCQkJCQkgZGVjb2RlX3B1dHJvb3RmaF9tYXhzeiArIFwKIAkJCQkJIGRlY29kZV9mc2luZm9fbWF4c3opCisjZGVmaW5lIE5GUzRfZW5jX3JlY2xhaW1fY29tcGxldGVfc3oJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfc2VxdWVuY2VfbWF4c3ogKyBcCisJCQkJCSBlbmNvZGVfcmVjbGFpbV9jb21wbGV0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9kZWNfcmVjbGFpbV9jb21wbGV0ZV9zegkoY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9zZXF1ZW5jZV9tYXhzeiArIFwKKwkJCQkJIGRlY29kZV9yZWNsYWltX2NvbXBsZXRlX21heHN6KQorCitjb25zdCB1MzIgbmZzNDFfbWF4d3JpdGVfb3ZlcmhlYWQgPSAoKFJQQ19NQVhfSEVBREVSX1dJVEhfQVVUSCArCisJCQkJICAgICAgY29tcG91bmRfZW5jb2RlX2hkcl9tYXhzeiArCisJCQkJICAgICAgZW5jb2RlX3NlcXVlbmNlX21heHN6ICsKKwkJCQkgICAgICBlbmNvZGVfcHV0ZmhfbWF4c3ogKworCQkJCSAgICAgIGVuY29kZV9nZXRhdHRyX21heHN6KSAqCisJCQkJICAgICBYRFJfVU5JVCk7CisKK2NvbnN0IHUzMiBuZnM0MV9tYXhyZWFkX292ZXJoZWFkID0gKChSUENfTUFYX0hFQURFUl9XSVRIX0FVVEggKworCQkJCSAgICAgY29tcG91bmRfZGVjb2RlX2hkcl9tYXhzeiArCisJCQkJICAgICBkZWNvZGVfc2VxdWVuY2VfbWF4c3ogKworCQkJCSAgICAgZGVjb2RlX3B1dGZoX21heHN6KSAqCisJCQkJICAgIFhEUl9VTklUKTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogc3RhdGljIGNvbnN0IHVtb2RlX3QgbmZzX3R5cGUyZm10W10gPSB7CkBAIC0xMTQwLDYgKzExNjMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZV9jcmVhdGVtb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfb3BlbmFyZ3MgKmFyZykKIHsKIAlfX2JlMzIgKnA7CisJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIAogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CiAJc3dpdGNoKGFyZy0+b3Blbl9mbGFncyAmIE9fRVhDTCkgewpAQCAtMTE0OCw4ICsxMTcyLDIzIEBACiAJCWVuY29kZV9hdHRycyh4ZHIsIGFyZy0+dS5hdHRycywgYXJnLT5zZXJ2ZXIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkqcCA9IGNwdV90b19iZTMyKE5GUzRfQ1JFQVRFX0VYQ0xVU0lWRSk7Ci0JCWVuY29kZV9uZnM0X3ZlcmlmaWVyKHhkciwgJmFyZy0+dS52ZXJpZmllcik7CisJCWNscCA9IGFyZy0+c2VydmVyLT5uZnNfY2xpZW50OworCQlpZiAoY2xwLT5jbF9taW5vcnZlcnNpb24gPiAwKSB7CisJCQlpZiAobmZzNF9oYXNfcGVyc2lzdGVudF9zZXNzaW9uKGNscCkpIHsKKwkJCQkqcCA9IGNwdV90b19iZTMyKE5GUzRfQ1JFQVRFX0dVQVJERUQpOworCQkJCWVuY29kZV9hdHRycyh4ZHIsIGFyZy0+dS5hdHRycywgYXJnLT5zZXJ2ZXIpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgaWF0dHIgZHVtbXk7CisKKwkJCQkqcCA9IGNwdV90b19iZTMyKE5GUzRfQ1JFQVRFX0VYQ0xVU0lWRTRfMSk7CisJCQkJZW5jb2RlX25mczRfdmVyaWZpZXIoeGRyLCAmYXJnLT51LnZlcmlmaWVyKTsKKwkJCQlkdW1teS5pYV92YWxpZCA9IDA7CisJCQkJZW5jb2RlX2F0dHJzKHhkciwgJmR1bW15LCBhcmctPnNlcnZlcik7CisJCQl9CisJCX0gZWxzZSB7CisJCQkqcCA9IGNwdV90b19iZTMyKE5GUzRfQ1JFQVRFX0VYQ0xVU0lWRSk7CisJCQllbmNvZGVfbmZzNF92ZXJpZmllcih4ZHIsICZhcmctPnUudmVyaWZpZXIpOworCQl9CiAJfQogfQogCkBAIC0xNTkyLDYgKzE2MzEsMTkgQEAKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfZGVzdHJveV9zZXNzaW9uX21heHN6OwogfQorCitzdGF0aWMgdm9pZCBlbmNvZGVfcmVjbGFpbV9jb21wbGV0ZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgICBzdHJ1Y3QgbmZzNDFfcmVjbGFpbV9jb21wbGV0ZV9hcmdzICphcmdzLAorCQkJCSAgICBzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCit7CisJX19iZTMyICpwOworCisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA4KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfUkVDTEFJTV9DT01QTEVURSk7CisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPm9uZV9mcyk7CisJaGRyLT5ub3BzKys7CisJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3JlY2xhaW1fY29tcGxldGVfbWF4c3o7Cit9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0YXRpYyB2b2lkIGVuY29kZV9zZXF1ZW5jZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLApAQCAtMjA5Niw3ICsyMTQ4LDcgQEAKIAllbmNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsIHJlcSwgJmhkcik7CiAJZW5jb2RlX3NlcXVlbmNlKCZ4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CiAJZW5jb2RlX3B1dGZoKCZ4ZHIsIGFyZ3MtPmZoLCAmaGRyKTsKLQlyZXBsZW4gPSBoZHIucmVwbGVuICsgbmZzNF9mYXR0cl9iaXRtYXBfbWF4c3ogKyAxOworCXJlcGxlbiA9IGhkci5yZXBsZW4gKyBvcF9kZWNvZGVfaGRyX21heHN6ICsgbmZzNF9mYXR0cl9iaXRtYXBfbWF4c3ogKyAxOwogCWVuY29kZV9nZXRhdHRyX3R3bygmeGRyLCBGQVRUUjRfV09SRDBfQUNMLCAwLCAmaGRyKTsKIAogCXhkcl9pbmxpbmVfcGFnZXMoJnJlcS0+cnFfcmN2X2J1ZiwgcmVwbGVuIDw8IDIsCkBAIC0yNDIwLDYgKzI0NzIsMjYgQEAKIAllbmNvZGVfbm9wcygmaGRyKTsKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIGEgUkVDTEFJTV9DT01QTEVURSByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbnQgbmZzNF94ZHJfZW5jX3JlY2xhaW1fY29tcGxldGUoc3RydWN0IHJwY19ycXN0ICpyZXEsIHVpbnQzMl90ICpwLAorCQkJCSAgICAgc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CisJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7CisJCS5taW5vcnZlcnNpb24gPSBuZnM0X3hkcl9taW5vcnZlcnNpb24oJmFyZ3MtPnNlcV9hcmdzKQorCX07CisKKwl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7CisJZW5jb2RlX2NvbXBvdW5kX2hkcigmeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSgmeGRyLCAmYXJncy0+c2VxX2FyZ3MsICZoZHIpOworCWVuY29kZV9yZWNsYWltX2NvbXBsZXRlKCZ4ZHIsIGFyZ3MsICZoZHIpOworCWVuY29kZV9ub3BzKCZoZHIpOworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0YXRpYyB2b2lkIHByaW50X292ZXJmbG93X21zZyhjb25zdCBjaGFyICpmdW5jLCBjb25zdCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyKQpAQCAtNDUyOCw2ICs0NjAwLDExIEBACiB7CiAJcmV0dXJuIGRlY29kZV9vcF9oZHIoeGRyLCBPUF9ERVNUUk9ZX1NFU1NJT04pOwogfQorCitzdGF0aWMgaW50IGRlY29kZV9yZWNsYWltX2NvbXBsZXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHZvaWQgKmR1bW15KQoreworCXJldHVybiBkZWNvZGVfb3BfaGRyKHhkciwgT1BfUkVDTEFJTV9DT01QTEVURSk7Cit9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0YXRpYyBpbnQgZGVjb2RlX3NlcXVlbmNlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCkBAIC00NTgzLDggKzQ2NjAsOCBAQAogCWR1bW15ID0gYmUzMl90b19jcHVwKHArKyk7CiAJLyogdGFyZ2V0IGhpZ2hlc3Qgc2xvdCBpZCAtIGN1cnJlbnRseSBub3QgcHJvY2Vzc2VkICovCiAJZHVtbXkgPSBiZTMyX3RvX2NwdXAocCsrKTsKLQkvKiByZXN1bHQgZmxhZ3MgLSBjdXJyZW50bHkgbm90IHByb2Nlc3NlZCAqLwotCWR1bW15ID0gYmUzMl90b19jcHVwKHApOworCS8qIHJlc3VsdCBmbGFncyAqLworCXJlcy0+c3Jfc3RhdHVzX2ZsYWdzID0gYmUzMl90b19jcHVwKHApOwogCXN0YXR1cyA9IDA7CiBvdXRfZXJyOgogCXJlcy0+c3Jfc3RhdHVzID0gc3RhdHVzOwpAQCAtNTMwOSw3ICs1Mzg2LDcgQEAKIH0KIAogLyoKLSAqIEZTSU5GTyByZXF1ZXN0CisgKiBEZWNvZGUgRlNJTkZPIHJlc3BvbnNlCiAgKi8KIHN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2ZzaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAogCQkJICAgICAgIHN0cnVjdCBuZnM0X2ZzaW5mb19yZXMgKnJlcykKQEAgLTUzMzAsNyArNTQwNyw3IEBACiB9CiAKIC8qCi0gKiBQQVRIQ09ORiByZXF1ZXN0CisgKiBEZWNvZGUgUEFUSENPTkYgcmVzcG9uc2UKICAqLwogc3RhdGljIGludCBuZnM0X3hkcl9kZWNfcGF0aGNvbmYoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKIAkJCQkgc3RydWN0IG5mczRfcGF0aGNvbmZfcmVzICpyZXMpCkBAIC01MzUxLDcgKzU0MjgsNyBAQAogfQogCiAvKgotICogU1RBVEZTIHJlcXVlc3QKKyAqIERlY29kZSBTVEFURlMgcmVzcG9uc2UKICAqLwogc3RhdGljIGludCBuZnM0X3hkcl9kZWNfc3RhdGZzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCiAJCQkgICAgICAgc3RydWN0IG5mczRfc3RhdGZzX3JlcyAqcmVzKQpAQCAtNTM3Miw3ICs1NDQ5LDcgQEAKIH0KIAogLyoKLSAqIEdFVEFUVFJfQklUTUFQIHJlcXVlc3QKKyAqIERlY29kZSBHRVRBVFRSX0JJVE1BUCByZXNwb25zZQogICovCiBzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXJ2ZXJfY2FwcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzNF9zZXJ2ZXJfY2Fwc19yZXMgKnJlcykKIHsKQEAgLTU0MTEsNyArNTQ4OCw3IEBACiB9CiAKIC8qCi0gKiBhIFNFVENMSUVOVElEIHJlcXVlc3QKKyAqIERlY29kZSBTRVRDTElFTlRJRCByZXNwb25zZQogICovCiBzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXRjbGllbnRpZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAogCQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQpAQCAtNTQyOCw3ICs1NTA1LDcgQEAKIH0KIAogLyoKLSAqIGEgU0VUQ0xJRU5USURfQ09ORklSTSByZXF1ZXN0CisgKiBEZWNvZGUgU0VUQ0xJRU5USURfQ09ORklSTSByZXNwb25zZQogICovCiBzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfZnNpbmZvICpmc2luZm8pCiB7CkBAIC01NDQ4LDcgKzU1MjUsNyBAQAogfQogCiAvKgotICogREVMRUdSRVRVUk4gcmVxdWVzdAorICogRGVjb2RlIERFTEVHUkVUVVJOIHJlc3BvbnNlCiAgKi8KIHN0YXRpYyBpbnQgbmZzNF94ZHJfZGVjX2RlbGVncmV0dXJuKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgc3RydWN0IG5mczRfZGVsZWdyZXR1cm5yZXMgKnJlcykKIHsKQEAgLTU0NzQsNyArNTU1MSw3IEBACiB9CiAKIC8qCi0gKiBGU19MT0NBVElPTlMgcmVxdWVzdAorICogRGVjb2RlIEZTX0xPQ0FUSU9OUyByZXNwb25zZQogICovCiBzdGF0aWMgaW50IG5mczRfeGRyX2RlY19mc19sb2NhdGlvbnMoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKIAkJCQkgICAgIHN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9uc19yZXMgKnJlcykKQEAgLTU1MDQsNyArNTU4MSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKIC8qCi0gKiBFWENIQU5HRV9JRCByZXF1ZXN0CisgKiBEZWNvZGUgRVhDSEFOR0VfSUQgcmVzcG9uc2UKICAqLwogc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZXhjaGFuZ2VfaWQoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgdWludDMyX3QgKnAsCiAJCQkJICAgIHZvaWQgKnJlcykKQEAgLTU1MjEsNyArNTU5OCw3IEBACiB9CiAKIC8qCi0gKiBhIENSRUFURV9TRVNTSU9OIHJlcXVlc3QKKyAqIERlY29kZSBDUkVBVEVfU0VTU0lPTiByZXNwb25zZQogICovCiBzdGF0aWMgaW50IG5mczRfeGRyX2RlY19jcmVhdGVfc2Vzc2lvbihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKIAkJCQkgICAgICAgc3RydWN0IG5mczQxX2NyZWF0ZV9zZXNzaW9uX3JlcyAqcmVzKQpAQCAtNTUzOCw3ICs1NjE1LDcgQEAKIH0KIAogLyoKLSAqIGEgREVTVFJPWV9TRVNTSU9OIHJlcXVlc3QKKyAqIERlY29kZSBERVNUUk9ZX1NFU1NJT04gcmVzcG9uc2UKICAqLwogc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZGVzdHJveV9zZXNzaW9uKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHVpbnQzMl90ICpwLAogCQkJCQl2b2lkICpkdW1teSkKQEAgLTU1NTUsNyArNTYzMiw3IEBACiB9CiAKIC8qCi0gKiBhIFNFUVVFTkNFIHJlcXVlc3QKKyAqIERlY29kZSBTRVFVRU5DRSByZXNwb25zZQogICovCiBzdGF0aWMgaW50IG5mczRfeGRyX2RlY19zZXF1ZW5jZShzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1aW50MzJfdCAqcCwKIAkJCQkgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCkBAIC01NTcyLDcgKzU2NDksNyBAQAogfQogCiAvKgotICogYSBHRVRfTEVBU0VfVElNRSByZXF1ZXN0CisgKiBEZWNvZGUgR0VUX0xFQVNFX1RJTUUgcmVzcG9uc2UKICAqLwogc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZ2V0X2xlYXNlX3RpbWUoc3RydWN0IHJwY19ycXN0ICpycXN0cCwgdWludDMyX3QgKnAsCiAJCQkJICAgICAgIHN0cnVjdCBuZnM0X2dldF9sZWFzZV90aW1lX3JlcyAqcmVzKQpAQCAtNTU5MSw2ICs1NjY4LDI1IEBACiAJCXN0YXR1cyA9IGRlY29kZV9mc2luZm8oJnhkciwgcmVzLT5scl9mc2luZm8pOwogCXJldHVybiBzdGF0dXM7CiB9CisKKy8qCisgKiBEZWNvZGUgUkVDTEFJTV9DT01QTEVURSByZXNwb25zZQorICovCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19yZWNsYWltX2NvbXBsZXRlKHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHVpbnQzMl90ICpwLAorCQkJCQkgc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfcmVzICpyZXMpCit7CisJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOworCWludCBzdGF0dXM7CisKKwl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJxc3RwLT5ycV9yY3ZfYnVmLCBwKTsKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKCZ4ZHIsICZoZHIpOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoJnhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZWNvZGVfcmVjbGFpbV9jb21wbGV0ZSgmeGRyLCAodm9pZCAqKU5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIF9fYmUzMiAqbmZzNF9kZWNvZGVfZGlyZW50KF9fYmUzMiAqcCwgc3RydWN0IG5mc19lbnRyeSAqZW50cnksIGludCBwbHVzKQpAQCAtNTc2Nyw2ICs1ODYzLDcgQEAKICAgUFJPQyhERVNUUk9ZX1NFU1NJT04sCWVuY19kZXN0cm95X3Nlc3Npb24sCWRlY19kZXN0cm95X3Nlc3Npb24pLAogICBQUk9DKFNFUVVFTkNFLAllbmNfc2VxdWVuY2UsCWRlY19zZXF1ZW5jZSksCiAgIFBST0MoR0VUX0xFQVNFX1RJTUUsCWVuY19nZXRfbGVhc2VfdGltZSwJZGVjX2dldF9sZWFzZV90aW1lKSwKKyAgUFJPQyhSRUNMQUlNX0NPTVBMRVRFLCBlbmNfcmVjbGFpbV9jb21wbGV0ZSwgIGRlY19yZWNsYWltX2NvbXBsZXRlKSwKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9yZWFkLmMgYi9mcy9uZnMvcmVhZC5jCmluZGV4IDEyYzllNjYuLmRiOWIzNjAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9yZWFkLmMKKysrIGIvZnMvbmZzL3JlYWQuYwpAQCAtMzU2LDI1ICszNTYsMTkgQEAKIAlzdHJ1Y3QgbmZzX3JlYWRyZXMgKnJlc3AgPSAmZGF0YS0+cmVzOwogCiAJaWYgKHJlc3AtPmVvZiB8fCByZXNwLT5jb3VudCA9PSBhcmdwLT5jb3VudCkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCS8qIFRoaXMgaXMgYSBzaG9ydCByZWFkISAqLwogCW5mc19pbmNfc3RhdHMoZGF0YS0+aW5vZGUsIE5GU0lPU19TSE9SVFJFQUQpOwogCS8qIEhhcyB0aGUgc2VydmVyIGF0IGxlYXN0IG1hZGUgc29tZSBwcm9ncmVzcz8gKi8KIAlpZiAocmVzcC0+Y291bnQgPT0gMCkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCS8qIFllcywgc28gcmV0cnkgdGhlIHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSAqLwogCWFyZ3AtPm9mZnNldCArPSByZXNwLT5jb3VudDsKIAlhcmdwLT5wZ2Jhc2UgKz0gcmVzcC0+Y291bnQ7CiAJYXJncC0+Y291bnQgLT0gcmVzcC0+Y291bnQ7Ci0JbmZzNF9yZXN0YXJ0X3JwYyh0YXNrLCBORlNfU0VSVkVSKGRhdGEtPmlub2RlKS0+bmZzX2NsaWVudCk7Ci0JcmV0dXJuOwotb3V0OgotCW5mczRfc2VxdWVuY2VfZnJlZV9zbG90KE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpLT5uZnNfY2xpZW50LAotCQkJCSZkYXRhLT5yZXMuc2VxX3Jlcyk7Ci0JcmV0dXJuOwotCisJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpLT5uZnNfY2xpZW50KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggOTBiZTU1MS4uY2U5MDdlZiAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTE3NSwxNCArMTc1LDE2IEBACiB9OwogCiBlbnVtIHsKLQlPcHRfeHBydF91ZHAsIE9wdF94cHJ0X3RjcCwgT3B0X3hwcnRfcmRtYSwKKwlPcHRfeHBydF91ZHAsIE9wdF94cHJ0X3VkcDYsIE9wdF94cHJ0X3RjcCwgT3B0X3hwcnRfdGNwNiwgT3B0X3hwcnRfcmRtYSwKIAogCU9wdF94cHJ0X2VycgogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgbmZzX3hwcnRfcHJvdG9jb2xfdG9rZW5zID0gewogCXsgT3B0X3hwcnRfdWRwLCAidWRwIiB9LAorCXsgT3B0X3hwcnRfdWRwNiwgInVkcDYiIH0sCiAJeyBPcHRfeHBydF90Y3AsICJ0Y3AiIH0sCisJeyBPcHRfeHBydF90Y3A2LCAidGNwNiIgfSwKIAl7IE9wdF94cHJ0X3JkbWEsICJyZG1hIiB9LAogCiAJeyBPcHRfeHBydF9lcnIsIE5VTEwgfQpAQCAtNDkyLDYgKzQ5NCw0NSBAQAogCXJldHVybiBzZWNfZmxhdm91cnNbaV0uc3RyOwogfQogCitzdGF0aWMgdm9pZCBuZnNfc2hvd19tb3VudGRfbmV0aWQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcywKKwkJCQkgIGludCBzaG93ZGVmYXVsdHMpCit7CisJc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopICZuZnNzLT5tb3VudGRfYWRkcmVzczsKKworCXNlcV9wcmludGYobSwgIixtb3VudHByb3RvPSIpOworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXN3aXRjaCAobmZzcy0+bW91bnRkX3Byb3RvY29sKSB7CisJCWNhc2UgSVBQUk9UT19VRFA6CisJCQlzZXFfcHJpbnRmKG0sIFJQQ0JJTkRfTkVUSURfVURQKTsKKwkJCWJyZWFrOworCQljYXNlIElQUFJPVE9fVENQOgorCQkJc2VxX3ByaW50ZihtLCBSUENCSU5EX05FVElEX1RDUCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChzaG93ZGVmYXVsdHMpCisJCQkJc2VxX3ByaW50ZihtLCAiYXV0byIpOworCQl9CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXN3aXRjaCAobmZzcy0+bW91bnRkX3Byb3RvY29sKSB7CisJCWNhc2UgSVBQUk9UT19VRFA6CisJCQlzZXFfcHJpbnRmKG0sIFJQQ0JJTkRfTkVUSURfVURQNik7CisJCQlicmVhazsKKwkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCXNlcV9wcmludGYobSwgUlBDQklORF9ORVRJRF9UQ1A2KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKHNob3dkZWZhdWx0cykKKwkJCQlzZXFfcHJpbnRmKG0sICJhdXRvIik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHNob3dkZWZhdWx0cykKKwkJCXNlcV9wcmludGYobSwgImF1dG8iKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG5mc19zaG93X21vdW50ZF9vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MsCiAJCQkJICAgIGludCBzaG93ZGVmYXVsdHMpCiB7CkBAIC01MDUsNyArNTQ2LDcgQEAKIAl9CiAJY2FzZSBBRl9JTkVUNjogewogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXA7Ci0JCXNlcV9wcmludGYobSwgIixtb3VudGFkZHI9JXBJNiIsICZzaW42LT5zaW42X2FkZHIpOworCQlzZXFfcHJpbnRmKG0sICIsbW91bnRhZGRyPSVwSTZjIiwgJnNpbjYtPnNpbjZfYWRkcik7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpAQCAtNTE4LDE3ICs1NTksNyBAQAogCWlmIChuZnNzLT5tb3VudGRfcG9ydCB8fCBzaG93ZGVmYXVsdHMpCiAJCXNlcV9wcmludGYobSwgIixtb3VudHBvcnQ9JXUiLCBuZnNzLT5tb3VudGRfcG9ydCk7CiAKLQlzd2l0Y2ggKG5mc3MtPm1vdW50ZF9wcm90b2NvbCkgewotCWNhc2UgSVBQUk9UT19VRFA6Ci0JCXNlcV9wcmludGYobSwgIixtb3VudHByb3RvPXVkcCIpOwotCQlicmVhazsKLQljYXNlIElQUFJPVE9fVENQOgotCQlzZXFfcHJpbnRmKG0sICIsbW91bnRwcm90bz10Y3AiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKHNob3dkZWZhdWx0cykKLQkJCXNlcV9wcmludGYobSwgIixtb3VudHByb3RvPWF1dG8iKTsKLQl9CisJbmZzX3Nob3dfbW91bnRkX25ldGlkKG0sIG5mc3MsIHNob3dkZWZhdWx0cyk7CiB9CiAKIC8qCkBAIC01NzgsNyArNjA5LDcgQEAKIAkJCXNlcV9wdXRzKG0sIG5mc19pbmZvcC0+bm9zdHIpOwogCX0KIAlzZXFfcHJpbnRmKG0sICIscHJvdG89JXMiLAotCQkgICBycGNfcGVlcmFkZHIyc3RyKG5mc3MtPmNsaWVudCwgUlBDX0RJU1BMQVlfUFJPVE8pKTsKKwkJICAgcnBjX3BlZXJhZGRyMnN0cihuZnNzLT5jbGllbnQsIFJQQ19ESVNQTEFZX05FVElEKSk7CiAJaWYgKHZlcnNpb24gPT0gNCkgewogCQlpZiAobmZzcy0+cG9ydCAhPSBORlNfUE9SVCkKIAkJCXNlcV9wcmludGYobSwgIixwb3J0PSV1IiwgbmZzcy0+cG9ydCk7CkBAIC03MTQsOCArNzQ1LDYgQEAKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOwogCXN0cnVjdCBycGNfY2xudCAqcnBjOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCXNlcnZlciA9IE5GU19TQihzYik7CiAJLyogLUVJTyBhbGwgcGVuZGluZyBJL08gKi8KIAlycGMgPSBzZXJ2ZXItPmNsaWVudF9hY2w7CkBAIC03MjQsOCArNzUzLDYgQEAKIAlycGMgPSBzZXJ2ZXItPmNsaWVudDsKIAlpZiAoIUlTX0VSUihycGMpKQogCQlycGNfa2lsbGFsbF90YXNrcyhycGMpOwotCi0JdW5sb2NrX2tlcm5lbCgpOwogfQogCiBzdGF0aWMgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKHVuc2lnbmVkIGludCB2ZXJzaW9uKQpAQCAtNzM0LDggKzc2MSw2IEBACiAKIAlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSkgewotCQlkYXRhLT5yc2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKLQkJZGF0YS0+d3NpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CiAJCWRhdGEtPmFjcmVnbWluCQk9IE5GU19ERUZfQUNSRUdNSU47CiAJCWRhdGEtPmFjcmVnbWF4CQk9IE5GU19ERUZfQUNSRUdNQVg7CiAJCWRhdGEtPmFjZGlybWluCQk9IE5GU19ERUZfQUNESVJNSU47CkBAIC04ODcsNiArOTEyLDggQEAKIHsKIAljaGFyICpwLCAqc3RyaW5nLCAqc2VjZGF0YTsKIAlpbnQgcmMsIHNsb3BweSA9IDAsIGludmFsaWRfb3B0aW9uID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBwcm90b2ZhbWlseSA9IEFGX1VOU1BFQzsKKwl1bnNpZ25lZCBzaG9ydCBtb3VudGZhbWlseSA9IEFGX1VOU1BFQzsKIAogCWlmICghcmF3KSB7CiAJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBtb3VudCBvcHRpb25zIHN0cmluZyB3YXMgTlVMTC5cbiIpOwpAQCAtMTIzMiwxMiArMTI1OSwxNyBAQAogCQkJdG9rZW4gPSBtYXRjaF90b2tlbihzdHJpbmcsCiAJCQkJCSAgICBuZnNfeHBydF9wcm90b2NvbF90b2tlbnMsIGFyZ3MpOwogCisJCQlwcm90b2ZhbWlseSA9IEFGX0lORVQ7CiAJCQlzd2l0Y2ggKHRva2VuKSB7CisJCQljYXNlIE9wdF94cHJ0X3VkcDY6CisJCQkJcHJvdG9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJCWNhc2UgT3B0X3hwcnRfdWRwOgogCQkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9UQ1A7CiAJCQkJbW50LT5uZnNfc2VydmVyLnByb3RvY29sID0gWFBSVF9UUkFOU1BPUlRfVURQOwogCQkJCWtmcmVlKHN0cmluZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlIE9wdF94cHJ0X3RjcDY6CisJCQkJcHJvdG9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJCWNhc2UgT3B0X3hwcnRfdGNwOgogCQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX1RDUDsKIAkJCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9UQ1A7CkBAIC0xMjY1LDEwICsxMjk3LDE1IEBACiAJCQkJCSAgICBuZnNfeHBydF9wcm90b2NvbF90b2tlbnMsIGFyZ3MpOwogCQkJa2ZyZWUoc3RyaW5nKTsKIAorCQkJbW91bnRmYW1pbHkgPSBBRl9JTkVUOwogCQkJc3dpdGNoICh0b2tlbikgeworCQkJY2FzZSBPcHRfeHBydF91ZHA2OgorCQkJCW1vdW50ZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQljYXNlIE9wdF94cHJ0X3VkcDoKIAkJCQltbnQtPm1vdW50X3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1VEUDsKIAkJCQlicmVhazsKKwkJCWNhc2UgT3B0X3hwcnRfdGNwNjoKKwkJCQltb3VudGZhbWlseSA9IEFGX0lORVQ2OwogCQkJY2FzZSBPcHRfeHBydF90Y3A6CiAJCQkJbW50LT5tb3VudF9zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9UQ1A7CiAJCQkJYnJlYWs7CkBAIC0xMzY3LDggKzE0MDQsMzMgQEAKIAlpZiAoIXNsb3BweSAmJiBpbnZhbGlkX29wdGlvbikKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIHZlcmlmeSB0aGF0IGFueSBwcm90bz0vbW91bnRwcm90bz0gb3B0aW9ucyBtYXRjaCB0aGUgYWRkcmVzcworCSAqIGZhbWlsaWllcyBpbiB0aGUgYWRkcj0vbW91bnRhZGRyPSBvcHRpb25zLgorCSAqLworCWlmIChwcm90b2ZhbWlseSAhPSBBRl9VTlNQRUMgJiYKKwkgICAgcHJvdG9mYW1pbHkgIT0gbW50LT5uZnNfc2VydmVyLmFkZHJlc3Muc3NfZmFtaWx5KQorCQlnb3RvIG91dF9wcm90b19taXNtYXRjaDsKKworCWlmIChtb3VudGZhbWlseSAhPSBBRl9VTlNQRUMpIHsKKwkJaWYgKG1udC0+bW91bnRfc2VydmVyLmFkZHJsZW4pIHsKKwkJCWlmIChtb3VudGZhbWlseSAhPSBtbnQtPm1vdW50X3NlcnZlci5hZGRyZXNzLnNzX2ZhbWlseSkKKwkJCQlnb3RvIG91dF9tb3VudHByb3RvX21pc21hdGNoOworCQl9IGVsc2UgeworCQkJaWYgKG1vdW50ZmFtaWx5ICE9IG1udC0+bmZzX3NlcnZlci5hZGRyZXNzLnNzX2ZhbWlseSkKKwkJCQlnb3RvIG91dF9tb3VudHByb3RvX21pc21hdGNoOworCQl9CisJfQorCiAJcmV0dXJuIDE7CiAKK291dF9tb3VudHByb3RvX21pc21hdGNoOgorCXByaW50ayhLRVJOX0lORk8gIk5GUzogbW91bnQgc2VydmVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggbW91bnRwcm90bz0gIgorCQkJICJvcHRpb25cbiIpOworCXJldHVybiAwOworb3V0X3Byb3RvX21pc21hdGNoOgorCXByaW50ayhLRVJOX0lORk8gIk5GUzogc2VydmVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcHJvdG89IG9wdGlvblxuIik7CisJcmV0dXJuIDA7CiBvdXRfaW52YWxpZF9hZGRyZXNzOgogCXByaW50ayhLRVJOX0lORk8gIk5GUzogYmFkIElQIGFkZHJlc3Mgc3BlY2lmaWVkOiAlc1xuIiwgcCk7CiAJcmV0dXJuIDA7CkBAIC0xODgxLDcgKzE5NDMsNiBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbG9ja19rZXJuZWwoKTsKIAkvKiBmaWxsIG91dCBzdHJ1Y3Qgd2l0aCB2YWx1ZXMgZnJvbSBleGlzdGluZyBtb3VudCAqLwogCWRhdGEtPmZsYWdzID0gbmZzcy0+ZmxhZ3M7CiAJZGF0YS0+cnNpemUgPSBuZnNzLT5yc2l6ZTsKQEAgLTE5MDcsNyArMTk2OCw2IEBACiAJZXJyb3IgPSBuZnNfY29tcGFyZV9yZW1vdW50X2RhdGEobmZzcywgZGF0YSk7CiBvdXQ6CiAJa2ZyZWUoZGF0YSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jCmluZGV4IDEwNjRjOTEuLjZkYTNkM2YgMTAwNjQ0Ci0tLSBhL2ZzL25mcy91bmxpbmsuYworKysgYi9mcy9uZnMvdW5saW5rLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRhdGEtPmRpcjsKIAogCWlmICghTkZTX1BST1RPKGRpciktPnVubGlua19kb25lKHRhc2ssIGRpcikpCi0JCW5mczRfcmVzdGFydF9ycGModGFzaywgTkZTX1NFUlZFUihkaXIpLT5uZnNfY2xpZW50KTsKKwkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIE5GU19TRVJWRVIoZGlyKS0+bmZzX2NsaWVudCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCBiMWNlMmVhLi5kMTcxNjk2IDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKIAkJCQkgKi8KIAkJCQlhcmdwLT5zdGFibGUgPSBORlNfRklMRV9TWU5DOwogCQkJfQotCQkJbmZzNF9yZXN0YXJ0X3JwYyh0YXNrLCBzZXJ2ZXItPm5mc19jbGllbnQpOworCQkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIHNlcnZlci0+bmZzX2NsaWVudCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlpZiAodGltZV9iZWZvcmUoY29tcGxhaW4sIGppZmZpZXMpKSB7CkBAIC0xMjI4LDcgKzEyMjgsNiBAQAogCQkvKiBDYW4ndCBkbyBhbnl0aGluZyBhYm91dCBpdCBleGNlcHQgdGhyb3cgYW4gZXJyb3IuICovCiAJCXRhc2stPnRrX3N0YXR1cyA9IC1FSU87CiAJfQotCW5mczRfc2VxdWVuY2VfZnJlZV9zbG90KHNlcnZlci0+bmZzX2NsaWVudCwgJmRhdGEtPnJlcy5zZXFfcmVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxMiwxNSArMTYxMSwxNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlwYWdlX2NhY2hlX2dldChuZXdwYWdlKTsKKwlzcGluX2xvY2soJm1hcHBpbmctPmhvc3QtPmlfbG9jayk7CiAJcmVxLT53Yl9wYWdlID0gbmV3cGFnZTsKIAlTZXRQYWdlUHJpdmF0ZShuZXdwYWdlKTsKLQlzZXRfcGFnZV9wcml2YXRlKG5ld3BhZ2UsIHBhZ2VfcHJpdmF0ZShwYWdlKSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShuZXdwYWdlLCAodW5zaWduZWQgbG9uZylyZXEpOwogCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwlzcGluX3VubG9jaygmbWFwcGluZy0+aG9zdC0+aV9sb2NrKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiBvdXRfdW5sb2NrOgogCW5mc19jbGVhcl9wYWdlX3RhZ19sb2NrZWQocmVxKTsKLQluZnNfcmVsZWFzZV9yZXF1ZXN0KHJlcSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mc2N0bC5jIGIvZnMvbmZzY3RsLmMKaW5kZXggOGY5YTIwNS4uZDM4NTRkOSAxMDA2NDQKLS0tIGEvZnMvbmZzY3RsLmMKKysrIGIvZnMvbmZzY3RsLmMKQEAgLTcsOCArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzZC9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvY3JlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9mcy9uZnNkL2F1dGguYyBiL2ZzL25mc2QvYXV0aC5jCmluZGV4IDM2ZmNhYmJmLi43OTcxN2E0IDEwMDY0NAotLS0gYS9mcy9uZnNkL2F1dGguYworKysgYi9mcy9uZnNkL2F1dGguYwpAQCAtMSwxNSArMSw3IEBACi0vKgotICogbGludXgvZnMvbmZzZC9hdXRoLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+Ci0gKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y2F1dGguaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2V4cG9ydC5oPgorI2luY2x1ZGUgIm5mc2QuaCIKICNpbmNsdWRlICJhdXRoLmgiCiAKIGludCBuZnNleHBfZmxhZ3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCkKZGlmZiAtLWdpdCBhL2ZzL25mc2QvY2FjaGUuaCBiL2ZzL25mc2QvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODkyYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzZC9jYWNoZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBSZXF1ZXN0IHJlcGx5IGNhY2hlLiBUaGlzIHdhcyBoZWF2aWx5IGluc3BpcmVkIGJ5IHRoZQorICogaW1wbGVtZW50YXRpb24gaW4gNC4zQlNELzQuNEJTRC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CisgKi8KKworI2lmbmRlZiBORlNDQUNIRV9ICisjZGVmaW5lIE5GU0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KKworLyoKKyAqIFJlcHJlc2VudGF0aW9uIG9mIGEgcmVwbHkgY2FjaGUgZW50cnkuCisgKi8KK3N0cnVjdCBzdmNfY2FjaGVyZXAgeworCXN0cnVjdCBobGlzdF9ub2RlCWNfaGFzaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNfbHJ1OworCisJdW5zaWduZWQgY2hhcgkJY19zdGF0ZSwJLyogdW51c2VkLCBpbnByb2csIGRvbmUgKi8KKwkJCQljX3R5cGUsCQkvKiBzdGF0dXMsIGJ1ZmZlciAqLworCQkJCWNfc2VjdXJlIDogMTsJLyogcmVxIGNhbWUgZnJvbSBwb3J0IDwgMTAyNCAqLworCXN0cnVjdCBzb2NrYWRkcl9pbgljX2FkZHI7CisJX19iZTMyCQkJY194aWQ7CisJdTMyCQkJY19wcm90OworCXUzMgkJCWNfcHJvYzsKKwl1MzIJCQljX3ZlcnM7CisJdW5zaWduZWQgbG9uZwkJY190aW1lc3RhbXA7CisJdW5pb24geworCQlzdHJ1Y3Qga3ZlYwl1X3ZlYzsKKwkJX19iZTMyCQl1X3N0YXR1czsKKwl9CQkJY191OworfTsKKworI2RlZmluZSBjX3JlcGx2ZWMJCWNfdS51X3ZlYworI2RlZmluZSBjX3JlcGxzdGF0CQljX3UudV9zdGF0dXMKKworLyogY2FjaGUgZW50cnkgc3RhdGVzICovCitlbnVtIHsKKwlSQ19VTlVTRUQsCisJUkNfSU5QUk9HLAorCVJDX0RPTkUKK307CisKKy8qIHJldHVybiB2YWx1ZXMgKi8KK2VudW0geworCVJDX0RST1BJVCwKKwlSQ19SRVBMWSwKKwlSQ19ET0lULAorCVJDX0lOVFIKK307CisKKy8qCisgKiBDYWNoZSB0eXBlcy4KKyAqIFdlIG1heSB3YW50IHRvIGFkZCBtb3JlIHR5cGVzIG9uZSBkYXksIGUuZy4gZm9yIGRpcm9wcmVzIGFuZAorICogYXR0cnN0YXQgcmVwbGllcy4gVXNpbmcgY2FjaGUgZW50cmllcyB3aXRoIGZpeGVkIGxlbmd0aCBpbnN0ZWFkCisgKiBvZiBidWZmZXIgcG9pbnRlcnMgbWF5IGJlIG1vcmUgZWZmaWNpZW50LgorICovCitlbnVtIHsKKwlSQ19OT0NBQ0hFLAorCVJDX1JFUExTVEFULAorCVJDX1JFUExCVUZGLAorfTsKKworLyoKKyAqIElmIHJlcXVlc3RzIGFyZSByZXRyYW5zbWl0dGVkIHdpdGhpbiB0aGlzIGludGVydmFsLCB0aGV5J3JlIGRyb3BwZWQuCisgKi8KKyNkZWZpbmUgUkNfREVMQVkJCShIWi81KQorCitpbnQJbmZzZF9yZXBseV9jYWNoZV9pbml0KHZvaWQpOwordm9pZAluZnNkX3JlcGx5X2NhY2hlX3NodXRkb3duKHZvaWQpOworaW50CW5mc2RfY2FjaGVfbG9va3VwKHN0cnVjdCBzdmNfcnFzdCAqLCBpbnQpOwordm9pZAluZnNkX2NhY2hlX3VwZGF0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgaW50LCBfX2JlMzIgKik7CisKKyNpZmRlZiBDT05GSUdfTkZTRF9WNAordm9pZAluZnNkNF9zZXRfc3RhdHAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpzdGF0cCk7CisjZWxzZSAgLyogQ09ORklHX05GU0RfVjQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNkNF9zZXRfc3RhdHAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpzdGF0cCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTkZTRF9WNCAqLworCisjZW5kaWYgLyogTkZTQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQuYyBiL2ZzL25mc2QvZXhwb3J0LmMKaW5kZXggYzFjOWUwMy4uYzQ4NzgxMCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9leHBvcnQuYworKysgYi9mcy9uZnNkL2V4cG9ydC5jCkBAIC0xLDcgKzEsNSBAQAogI2RlZmluZSBNU05GUwkvKiBIQUNLIEhBQ0sgKi8KIC8qCi0gKiBsaW51eC9mcy9uZnNkL2V4cG9ydC5jCi0gKgogICogTkZTIGV4cG9ydGluZyBhbmQgdmFsaWRhdGlvbi4KICAqCiAgKiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgY2xpZW50cywgZWFjaCBvZiB3aGljaCBoYXMgYSBsaXN0IG9mCkBAIC0xNCwyOSArMTIsMTYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoLCA8b2tpckBtb25hZC5zd2IuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydGZzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNmaC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3lzY2FsbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2FwaS5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAKKyNpbmNsdWRlICJuZnNkLmgiCisjaW5jbHVkZSAibmZzZmguaCIKKwogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZCU5GU0REQkdfRVhQT1JUCiAKIHR5cGVkZWYgc3RydWN0IGF1dGhfZG9tYWluCXN2Y19jbGllbnQ7CkBAIC0zNjksMTYgKzM1NCwyNSBAQAogCQkJCQkgICAgc3RydWN0IHN2Y19leHBvcnQgKm9sZCk7CiBzdGF0aWMgc3RydWN0IHN2Y19leHBvcnQgKnN2Y19leHBvcnRfbG9va3VwKHN0cnVjdCBzdmNfZXhwb3J0ICopOwogCi1zdGF0aWMgaW50IGNoZWNrX2V4cG9ydChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGNoYXIgKnV1aWQpCitzdGF0aWMgaW50IGNoZWNrX2V4cG9ydChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmZsYWdzLCB1bnNpZ25lZCBjaGFyICp1dWlkKQogewogCi0JLyogV2UgY3VycmVudGx5IGV4cG9ydCBvbmx5IGRpcnMgYW5kIHJlZ3VsYXIgZmlsZXMuCi0JICogVGhpcyBpcyB3aGF0IHVtb3VudGQgZG9lcy4KKwkvKgorCSAqIFdlIGN1cnJlbnRseSBleHBvcnQgb25seSBkaXJzLCByZWd1bGFyIGZpbGVzLCBhbmQgKGZvciB2NAorCSAqIHBzZXVkb3Jvb3QpIHN5bWxpbmtzLgogCSAqLwogCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJgogCSAgICAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuIC1FTk9URElSOwogCisJLyoKKwkgKiBNb3VudGQgc2hvdWxkIG5ldmVyIHBhc3MgZG93biBhIHdyaXRlYWJsZSBWNFJPT1QgZXhwb3J0LCBidXQsCisJICoganVzdCB0byBtYWtlIHN1cmU6CisJICovCisJaWYgKCpmbGFncyAmIE5GU0VYUF9WNFJPT1QpCisJCSpmbGFncyB8PSBORlNFWFBfUkVBRE9OTFk7CisKIAkvKiBUaGVyZSBhcmUgdHdvIHJlcXVpcmVtZW50cyBvbiBhIGZpbGVzeXN0ZW0gdG8gYmUgZXhwb3J0YWJsZS4KIAkgKiAxOiAgV2UgbXVzdCBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBmaWxlc3lzdGVtIGZyb20gYSBudW1iZXIuCiAJICogICAgICAgZWl0aGVyIGEgZGV2aWNlIG51bWJlciAoc28gRlNfUkVRVUlSRVNfREVWIG5lZWRlZCkKQEAgLTM4Nyw3ICszODEsNyBAQAogCSAqICAgICAgIFRoaXMgbWVhbnMgdGhhdCBzX2V4cG9ydF9vcCBtdXN0IGJlIHNldC4KIAkgKi8KIAlpZiAoIShpbm9kZS0+aV9zYi0+c190eXBlLT5mc19mbGFncyAmIEZTX1JFUVVJUkVTX0RFVikgJiYKLQkgICAgIShmbGFncyAmIE5GU0VYUF9GU0lEKSAmJgorCSAgICAhKCpmbGFncyAmIE5GU0VYUF9GU0lEKSAmJgogCSAgICB1dWlkID09IE5VTEwpIHsKIAkJZHByaW50aygiZXhwX2V4cG9ydDogZXhwb3J0IG9mIG5vbi1kZXYgZnMgd2l0aG91dCBmc2lkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MDIsNyArNTk2LDcgQEAKIAkJCQlnb3RvIG91dDQ7CiAJCX0KIAotCQllcnIgPSBjaGVja19leHBvcnQoZXhwLmV4X3BhdGguZGVudHJ5LT5kX2lub2RlLCBleHAuZXhfZmxhZ3MsCisJCWVyciA9IGNoZWNrX2V4cG9ydChleHAuZXhfcGF0aC5kZW50cnktPmRfaW5vZGUsICZleHAuZXhfZmxhZ3MsCiAJCQkJICAgZXhwLmV4X3V1aWQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ0OwpAQCAtMTA0MSw3ICsxMDM1LDcgQEAKIAkJZ290byBmaW5pc2g7CiAJfQogCi0JZXJyID0gY2hlY2tfZXhwb3J0KHBhdGguZGVudHJ5LT5kX2lub2RlLCBueHAtPmV4X2ZsYWdzLCBOVUxMKTsKKwllcnIgPSBjaGVja19leHBvcnQocGF0aC5kZW50cnktPmRfaW5vZGUsICZueHAtPmV4X2ZsYWdzLCBOVUxMKTsKIAlpZiAoZXJyKSBnb3RvIGZpbmlzaDsKIAogCWVyciA9IC1FTk9NRU07CkBAIC0xMzIwLDYgKzEzMTQsMjMgQEAKIAlyZXR1cm4gZXhwOwogfQogCitzdGF0aWMgc3RydWN0IHN2Y19leHBvcnQgKmZpbmRfZnNpZHplcm9fZXhwb3J0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCit7CisJc3RydWN0IHN2Y19leHBvcnQgKmV4cDsKKwl1MzIgZnNpZHZbMl07CisKKwlta19mc2lkKEZTSURfTlVNLCBmc2lkdiwgMCwgMCwgMCwgTlVMTCk7CisKKwlleHAgPSBycXN0X2V4cF9maW5kKHJxc3RwLCBGU0lEX05VTSwgZnNpZHYpOworCS8qCisJICogV2Ugc2hvdWxkbid0IGhhdmUgYWNjZXB0aW5nIGFuIG5mc3Y0IHJlcXVlc3QgYXQgYWxsIGlmIHdlCisJICogZG9uJ3QgaGF2ZSBhIHBzZXVkb2V4cG9ydCE6CisJICovCisJaWYgKElTX0VSUihleHApICYmIFBUUl9FUlIoZXhwKSA9PSAtRU5PRU5UKQorCQlleHAgPSBFUlJfUFRSKC1FU0VSVkVSRkFVTFQpOworCXJldHVybiBleHA7Cit9CisKIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSBuZWVkIHRoZSBmaWxlaGFuZGxlIGZvciB0aGUgcm9vdCBvZiB0aGUgcHNldWRvZnMsCiAgKiBmb3IgYSBnaXZlbiBORlN2NCBjbGllbnQuICAgVGhlIHJvb3QgaXMgZGVmaW5lZCB0byBiZSB0aGUKQEAgLTEzMzAsMTEgKzEzNDEsOCBAQAogewogCXN0cnVjdCBzdmNfZXhwb3J0ICpleHA7CiAJX19iZTMyIHJ2OwotCXUzMiBmc2lkdlsyXTsKIAotCW1rX2ZzaWQoRlNJRF9OVU0sIGZzaWR2LCAwLCAwLCAwLCBOVUxMKTsKLQotCWV4cCA9IHJxc3RfZXhwX2ZpbmQocnFzdHAsIEZTSURfTlVNLCBmc2lkdik7CisJZXhwID0gZmluZF9mc2lkemVyb19leHBvcnQocnFzdHApOwogCWlmIChJU19FUlIoZXhwKSkKIAkJcmV0dXJuIG5mc2Vycm5vKFBUUl9FUlIoZXhwKSk7CiAJcnYgPSBmaF9jb21wb3NlKGZocCwgZXhwLCBleHAtPmV4X3BhdGguZGVudHJ5LCBOVUxMKTsKQEAgLTE0MjUsNiArMTQzMyw3IEBACiAJeyBORlNFWFBfQ1JPU1NNT1VOVCwgeyJjcm9zc21udCIsICIifX0sCiAJeyBORlNFWFBfTk9TVUJUUkVFQ0hFQ0ssIHsibm9fc3VidHJlZV9jaGVjayIsICIifX0sCiAJeyBORlNFWFBfTk9BVVRITkxNLCB7Imluc2VjdXJlX2xvY2tzIiwgIiJ9fSwKKwl7IE5GU0VYUF9WNFJPT1QsIHsidjRyb290IiwgIiJ9fSwKICNpZmRlZiBNU05GUwogCXsgTkZTRVhQX01TTkZTLCB7Im1zbmZzIiwgIiJ9fSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9sb2NrZC5jIGIvZnMvbmZzZC9sb2NrZC5jCmluZGV4IGIyNzg2YTUuLjBjNmQ4MTYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbG9ja2QuYworKysgYi9mcy9uZnNkL2xvY2tkLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvZnMvbmZzZC9sb2NrZC5jCi0gKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgc3R1YnMgbmVlZGVkIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIGxvY2tkLgogICogVGhpcyBsZXZlbCBvZiBpbmRpcmVjdGlvbiBpcyBuZWNlc3Nhcnkgc28gd2UgY2FuIHJ1biBuZnNkK2xvY2tkIHdpdGhvdXQKICAqIHJlcXVpcmluZyB0aGUgbmZzIGNsaWVudCB0byBiZSBjb21waWxlZCBpbi9sb2FkZWQsIGFuZCB2aWNlIHZlcnNhLgpAQCAtOCwxNCArNiwxMCBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KKyNpbmNsdWRlICJuZnNkLmgiCisjaW5jbHVkZSAidmZzLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19MT0NLRAogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczJhY2wuYyBiL2ZzL25mc2QvbmZzMmFjbC5jCmluZGV4IDRlMzIxOWUuLmYyMDU4OWQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzMmFjbC5jCisrKyBiL2ZzL25mc2QvbmZzMmFjbC5jCkBAIC0xLDE5ICsxLDE1IEBACiAvKgotICogbGludXgvZnMvbmZzZC9uZnMyYWNsLmMKLSAqCiAgKiBQcm9jZXNzIHZlcnNpb24gMiBORlNBQ0wgcmVxdWVzdHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3hkcjMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KKyNpbmNsdWRlICJuZnNkLmgiCisvKiBGSVhNRTogbmZzYWNsLmggaXMgYSBicm9rZW4gaGVhZGVyICovCiAjaW5jbHVkZSA8bGludXgvbmZzYWNsLmg+CisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ4ZHIzLmgiCisjaW5jbHVkZSAidmZzLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19QUk9DCiAjZGVmaW5lIFJFVFVSTl9TVEFUVVMoc3QpCXsgcmVzcC0+c3RhdHVzID0gKHN0KTsgcmV0dXJuIChzdCk7IH0KQEAgLTIxNyw2ICsyMTMsMTYgQEAKICAqIFhEUiBlbmNvZGUgZnVuY3Rpb25zCiAgKi8KIAorLyoKKyAqIFRoZXJlIG11c3QgYmUgYW4gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIHZvaWQgcmVzdWx0cyBzbyBzdmNfcHJvY2VzcworICogd2lsbCB3b3JrIHByb3Blcmx5LgorICovCitpbnQKK25mc2FjbHN2Y19lbmNvZGVfdm9pZHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHZvaWQgKmR1bW15KQoreworCXJldHVybiB4ZHJfcmVzc2l6ZV9jaGVjayhycXN0cCwgcCk7Cit9CisKIC8qIEdFVEFDTCAqLwogc3RhdGljIGludCBuZnNhY2xzdmNfZW5jb2RlX2dldGFjbHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCiAJCXN0cnVjdCBuZnNkM19nZXRhY2xyZXMgKnJlc3ApCkBAIC0zMDgsNyArMzE0LDYgQEAKIH0KIAogI2RlZmluZSBuZnNhY2xzdmNfZGVjb2RlX3ZvaWRhcmdzCU5VTEwKLSNkZWZpbmUgbmZzYWNsc3ZjX2VuY29kZV92b2lkcmVzCU5VTEwKICNkZWZpbmUgbmZzYWNsc3ZjX3JlbGVhc2Vfdm9pZAkJTlVMTAogI2RlZmluZSBuZnNkM19maGFuZGxlYXJncwluZnNkX2ZoYW5kbGUKICNkZWZpbmUgbmZzZDNfYXR0cnN0YXRyZXMJbmZzZF9hdHRyc3RhdApAQCAtMzQ2LDUgKzM1MSw1IEBACiAJCS52c19wcm9jCT0gbmZzZF9hY2xfcHJvY2VkdXJlczIsCiAJCS52c19kaXNwYXRjaAk9IG5mc2RfZGlzcGF0Y2gsCiAJCS52c194ZHJzaXplCT0gTkZTM19TVkNfWERSU0laRSwKLQkJLnZzX2hpZGRlbgk9IDEsCisJCS52c19oaWRkZW4JPSAwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM2FjbC5jIGIvZnMvbmZzZC9uZnMzYWNsLmMKaW5kZXggOTk4MWRiYi4uZTBjNDg0NiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzYWNsLmMKKysrIGIvZnMvbmZzZC9uZnMzYWNsLmMKQEAgLTEsMTggKzEsMTUgQEAKIC8qCi0gKiBsaW51eC9mcy9uZnNkL25mczNhY2wuYwotICoKICAqIFByb2Nlc3MgdmVyc2lvbiAzIE5GU0FDTCByZXF1ZXN0cy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgotI2luY2x1ZGUgPGxpbnV4L25mczMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIzLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CisjaW5jbHVkZSAibmZzZC5oIgorLyogRklYTUU6IG5mc2FjbC5oIGlzIGEgYnJva2VuIGhlYWRlciAqLwogI2luY2x1ZGUgPGxpbnV4L25mc2FjbC5oPgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAieGRyMy5oIgorI2luY2x1ZGUgInZmcy5oIgogCiAjZGVmaW5lIFJFVFVSTl9TVEFUVVMoc3QpCXsgcmVzcC0+c3RhdHVzID0gKHN0KTsgcmV0dXJuIChzdCk7IH0KIApAQCAtMjY0LDYgKzI2MSw2IEBACiAJCS52c19wcm9jCT0gbmZzZF9hY2xfcHJvY2VkdXJlczMsCiAJCS52c19kaXNwYXRjaAk9IG5mc2RfZGlzcGF0Y2gsCiAJCS52c194ZHJzaXplCT0gTkZTM19TVkNfWERSU0laRSwKLQkJLnZzX2hpZGRlbgk9IDEsCisJCS52c19oaWRkZW4JPSAwLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzcHJvYy5jIGIvZnMvbmZzZC9uZnMzcHJvYy5jCmluZGV4IGE3MTNjNDEuLjNkNjhmNDUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3Byb2MuYworKysgYi9mcy9uZnNkL25mczNwcm9jLmMKQEAgLTEsMzAgKzEsMTYgQEAKIC8qCi0gKiBsaW51eC9mcy9uZnNkL25mczNwcm9jLmMKLSAqCiAgKiBQcm9jZXNzIHZlcnNpb24gMyBORlMgcmVxdWVzdHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCi0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3hkcjMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMzLmg+CisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ4ZHIzLmgiCisjaW5jbHVkZSAidmZzLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19QUk9DCiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3hkci5jIGIvZnMvbmZzZC9uZnMzeGRyLmMKaW5kZXggZDBhMmNlMS4uMmE1MzNhMCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzeGRyLmMKKysrIGIvZnMvbmZzZC9uZnMzeGRyLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvZnMvbmZzZC9uZnMzeGRyLmMKLSAqCiAgKiBYRFIgc3VwcG9ydCBmb3IgbmZzZC9wcm90b2NvbCB2ZXJzaW9uIDMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgpAQCAtOCwxOSArNiw4IEBACiAgKiAyMDAzLTA4LTA5IEphbWllIExva2llcjogVXNlIGh0b25sKCkgZm9yIG5hbm9zZWNvbmRzLCBub3QgaHRvbnMoKSEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzMy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC92ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QveGRyMy5oPgorI2luY2x1ZGUgInhkcjMuaCIKICNpbmNsdWRlICJhdXRoLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19YRFIKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGFjbC5jIGIvZnMvbmZzZC9uZnM0YWNsLmMKaW5kZXggNzI1ZDAyZi4uODgxNTA2OCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0YWNsLmMKKysrIGIvZnMvbmZzZC9uZnM0YWNsLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGZzL25mczRhY2wvYWNsLmMKLSAqCiAgKiAgQ29tbW9uIE5GU3Y0IEFDTCBoYW5kbGluZyBjb2RlLgogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCkBAIC0zNiwxNSArMzQsNyBAQAogICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzNF9hY2wuaD4KIAogCkBAIC0zODksNyArMzc5LDcgQEAKIAlzb3J0X3BhY2xfcmFuZ2UocGFjbCwgMSwgaS0xKTsKIAogCUJVR19PTihwYWNsLT5hX2VudHJpZXNbaV0uZV90YWcgIT0gQUNMX0dST1VQX09CSik7Ci0JaiA9IGkrKzsKKwlqID0gKytpOwogCXdoaWxlIChwYWNsLT5hX2VudHJpZXNbal0uZV90YWcgPT0gQUNMX0dST1VQKQogCQlqKys7CiAJc29ydF9wYWNsX3JhbmdlKHBhY2wsIGksIGotMSk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCAyNGU4ZDc4Li5jNmVlZDJhIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKLSAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgogICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzMsMjIgKzMxLDkgQEAKICAqICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNzb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9zdGF0ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHNvY2suaD4KKyNpbmNsdWRlICJuZnNkLmgiCisjaW5jbHVkZSAic3RhdGUuaCIKIAogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZICAgICAgICAgICAgICAgIE5GU0REQkdfUFJPQwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRpZG1hcC5jIGIvZnMvbmZzZC9uZnM0aWRtYXAuYwppbmRleCBiYTJjMTk5Li42ZTI5ODNiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRpZG1hcC5jCisrKyBiL2ZzL25mc2QvbmZzNGlkbWFwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGZzL25mc2QvbmZzNGlkbWFwLmMKLSAqCiAgKiAgTWFwcGluZyBvZiBVSUQvR0lEcyB0byBuYW1lIGFuZCB2aWNlIHZlcnNhLgogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKQEAgLTM1LDIyICszMyw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgotI2luY2x1ZGUgPGxpbnV4L25mcy5oPgotI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNfcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2RfaWRtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y2F1dGguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogQ2FjaGUgZW50cnkKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHByb2MuYyBiL2ZzL25mc2QvbmZzNHByb2MuYwppbmRleCBiZWJjMGMyLi4zNzUxNGM0IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnM0cHJvYy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBmcy9uZnNkL25mczRwcm9jLmMKLSAqCiAgKiAgU2VydmVyLXNpZGUgcHJvY2VkdXJlcyBmb3IgTkZTdjQuCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwMiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KQEAgLTM0LDIwICszMiwxMSBAQAogICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwogICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzNC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3RhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3hkcjQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnM0X2FjbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXBpLmg+CisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ4ZHI0LmgiCisjaW5jbHVkZSAidmZzLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19QUk9DCiAKQEAgLTE3MCw3ICsxNTksNyBAQAogCQlhY2Ntb2RlIHw9IE5GU0RfTUFZX1JFQUQ7CiAJaWYgKG9wZW4tPm9wX3NoYXJlX2FjY2VzcyAmIE5GUzRfU0hBUkVfQUNDRVNTX1dSSVRFKQogCQlhY2Ntb2RlIHw9IChORlNEX01BWV9XUklURSB8IE5GU0RfTUFZX1RSVU5DKTsKLQlpZiAob3Blbi0+b3Bfc2hhcmVfZGVueSAmIE5GUzRfU0hBUkVfREVOWV9XUklURSkKKwlpZiAob3Blbi0+b3Bfc2hhcmVfZGVueSAmIE5GUzRfU0hBUkVfREVOWV9SRUFEKQogCQlhY2Ntb2RlIHw9IE5GU0RfTUFZX1dSSVRFOwogCiAJc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCBTX0lGUkVHLCBhY2Ntb2RlKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwppbmRleCBiNTM0ODQwLi41YTc1NGY3IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRyZWNvdmVyLmMKKysrIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSogIGxpbnV4L2ZzL25mc2QvbmZzNHJlY292ZXIuYwotKgogKiAgQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgogKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKQEAgLTMzLDIwICszMSwxNCBAQAogKgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9zdGF0ZS5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QveGRyNC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKworI2luY2x1ZGUgIm5mc2QuaCIKKyNpbmNsdWRlICJzdGF0ZS5oIgorI2luY2x1ZGUgInZmcy5oIgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkgICAgICAgICAgICAgICAgTkZTRERCR19QUk9DCiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDIxNTNmOWJkLi5mMTllZDg2IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTEsNiArMSw0IEBACiAvKgotKiAgbGludXgvZnMvbmZzZC9uZnM0c3RhdGUuYwotKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgogKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKQEAgLTM0LDI4ICszMiwxNCBAQAogKgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3N0YXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHI0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9sb2NrZC9iaW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKyNpbmNsdWRlICJ4ZHI0LmgiCisjaW5jbHVkZSAidmZzLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWSAgICAgICAgICAgICAgICBORlNEREJHX1BST0MKIApAQCAtNDc3LDEzICs0NjEsMTQgQEAKIAogLyoKICAqIGZjaGFuIGhvbGRzIHRoZSBjbGllbnQgdmFsdWVzIG9uIGlucHV0LCBhbmQgdGhlIHNlcnZlciB2YWx1ZXMgb24gb3V0cHV0CisgKiBzdl9tYXhfbWVzZyBpcyB0aGUgbWF4aW11bSBwYXlsb2FkIHBsdXMgb25lIHBhZ2UgZm9yIG92ZXJoZWFkLgogICovCiBzdGF0aWMgaW50IGluaXRfZm9yZWNoYW5uZWxfYXR0cnMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJCQkgIHN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzICpzZXNzaW9uX2ZjaGFuLAogCQkJCSAgc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgKmZjaGFuKQogewogCWludCBzdGF0dXMgPSAwOwotCV9fdTMyICAgbWF4Y291bnQgPSBzdmNfbWF4X3BheWxvYWQocnFzdHApOworCV9fdTMyICAgbWF4Y291bnQgPSBuZnNkX3NlcnYtPnN2X21heF9tZXNnOwogCiAJLyogaGVhZGVycGFkc3ogc2V0IHRvIHplcm8gaW4gZW5jb2RlIHJvdXRpbmUgKi8KIApAQCAtNTIzLDYgKzUwOCwxNSBAQAogCQlrZnJlZShzZXMtPnNlX3Nsb3RzW2ldKTsKIH0KIAorLyoKKyAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gY2FjaGUgdGhlIHJwYyBhbmQgc2Vzc2lvbiBoZWFkZXJzLCBzbyB3ZQorICogY2FuIGFsbG9jYXRlIGEgbGl0dGxlIGxlc3MgZm9yIGVhY2ggc2xvdDoKKyAqLworc3RhdGljIGlubGluZSBpbnQgc2xvdF9ieXRlcyhzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyAqY2EpCit7CisJcmV0dXJuIGNhLT5tYXhyZXNwX2NhY2hlZCAtIE5GU0RfTUlOX0hEUl9TRVFfU1o7Cit9CisKIHN0YXRpYyBpbnQKIGFsbG9jX2luaXRfc2Vzc2lvbihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwKIAkJICAgc3RydWN0IG5mc2Q0X2NyZWF0ZV9zZXNzaW9uICpjc2VzKQpAQCAtNTU0LDcgKzU0OCw3IEBACiAJbWVtY3B5KG5ldywgJnRtcCwgc2l6ZW9mKCpuZXcpKTsKIAogCS8qIGFsbG9jYXRlIGVhY2ggc3RydWN0IG5mc2Q0X3Nsb3QgYW5kIGRhdGEgY2FjaGUgaW4gb25lIHBpZWNlICovCi0JY2FjaGVzaXplID0gbmV3LT5zZV9mY2hhbm5lbC5tYXhyZXNwX2NhY2hlZCAtIE5GU0RfTUlOX0hEUl9TRVFfU1o7CisJY2FjaGVzaXplID0gc2xvdF9ieXRlcygmbmV3LT5zZV9mY2hhbm5lbCk7CiAJZm9yIChpID0gMDsgaSA8IG5ldy0+c2VfZmNoYW5uZWwubWF4cmVxczsgaSsrKSB7CiAJCXNwID0ga3phbGxvYyhzaXplb2YoKnNwKSArIGNhY2hlc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc3ApCkBAIC02MjgsMTAgKzYyMiwxMiBAQAogZnJlZV9zZXNzaW9uKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBuZnNkNF9zZXNzaW9uICpzZXM7CisJaW50IG1lbTsKIAogCXNlcyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiwgc2VfcmVmKTsKIAlzcGluX2xvY2soJm5mc2RfZHJjX2xvY2spOwotCW5mc2RfZHJjX21lbV91c2VkIC09IHNlcy0+c2VfZmNoYW5uZWwubWF4cmVxcyAqIE5GU0RfU0xPVF9DQUNIRV9TSVpFOworCW1lbSA9IHNlcy0+c2VfZmNoYW5uZWwubWF4cmVxcyAqIHNsb3RfYnl0ZXMoJnNlcy0+c2VfZmNoYW5uZWwpOworCW5mc2RfZHJjX21lbV91c2VkIC09IG1lbTsKIAlzcGluX3VubG9jaygmbmZzZF9kcmNfbG9jayk7CiAJZnJlZV9zZXNzaW9uX3Nsb3RzKHNlcyk7CiAJa2ZyZWUoc2VzKTsKQEAgLTI0MDQsMTEgKzI0MDAsOCBAQAogCiAJbWVtY3B5KCZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkLCAmZHAtPmRsX3N0YXRlaWQsIHNpemVvZihkcC0+ZGxfc3RhdGVpZCkpOwogCi0JZHByaW50aygiTkZTRDogZGVsZWdhdGlvbiBzdGF0ZWlkPSglMDh4LyUwOHgvJTA4eC8lMDh4KVxuXG4iLAotCSAgICAgICAgICAgICBkcC0+ZGxfc3RhdGVpZC5zaV9ib290LAotCSAgICAgICAgICAgICBkcC0+ZGxfc3RhdGVpZC5zaV9zdGF0ZW93bmVyaWQsCi0JICAgICAgICAgICAgIGRwLT5kbF9zdGF0ZWlkLnNpX2ZpbGVpZCwKLQkgICAgICAgICAgICAgZHAtPmRsX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7CisJZHByaW50aygiTkZTRDogZGVsZWdhdGlvbiBzdGF0ZWlkPSIgU1RBVEVJRF9GTVQgIlxuIiwKKwkJU1RBVEVJRF9WQUwoJmRwLT5kbF9zdGF0ZWlkKSk7CiBvdXQ6CiAJaWYgKG9wZW4tPm9wX2NsYWltX3R5cGUgPT0gTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTCiAJCQkmJiBmbGFnID09IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FCkBAIC0yNDk4LDkgKzI0OTEsOCBAQAogCiAJc3RhdHVzID0gbmZzX29rOwogCi0JZHByaW50aygibmZzNF9wcm9jZXNzX29wZW4yOiBzdGF0ZWlkPSglMDh4LyUwOHgvJTA4eC8lMDh4KVxuIiwKLQkgICAgICAgICAgICBzdHAtPnN0X3N0YXRlaWQuc2lfYm9vdCwgc3RwLT5zdF9zdGF0ZWlkLnNpX3N0YXRlb3duZXJpZCwKLQkgICAgICAgICAgICBzdHAtPnN0X3N0YXRlaWQuc2lfZmlsZWlkLCBzdHAtPnN0X3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7CisJZHByaW50aygiJXM6IHN0YXRlaWQ9IiBTVEFURUlEX0ZNVCAiXG4iLCBfX2Z1bmNfXywKKwkJU1RBVEVJRF9WQUwoJnN0cC0+c3Rfc3RhdGVpZCkpOwogb3V0OgogCWlmIChmcCkKIAkJcHV0X25mczRfZmlsZShmcCk7CkBAIC0yNjY2LDkgKzI2NTgsOCBAQAogewogCWlmICh0aW1lX2FmdGVyKCh1bnNpZ25lZCBsb25nKWJvb3RfdGltZSwKIAkJCSh1bnNpZ25lZCBsb25nKXN0YXRlaWQtPnNpX2Jvb3QpKSB7Ci0JCWRwcmludGsoIk5GU0Q6IHN0YWxlIHN0YXRlaWQgKCUwOHgvJTA4eC8lMDh4LyUwOHgpIVxuIiwKLQkJCXN0YXRlaWQtPnNpX2Jvb3QsIHN0YXRlaWQtPnNpX3N0YXRlb3duZXJpZCwKLQkJCXN0YXRlaWQtPnNpX2ZpbGVpZCwgc3RhdGVpZC0+c2lfZ2VuZXJhdGlvbik7CisJCWRwcmludGsoIk5GU0Q6IHN0YWxlIHN0YXRlaWQgIiBTVEFURUlEX0ZNVCAiIVxuIiwKKwkJCVNUQVRFSURfVkFMKHN0YXRlaWQpKTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtMjY4MCw5ICsyNjcxLDggQEAKIAlpZiAodGltZV9iZWZvcmUoKHVuc2lnbmVkIGxvbmcpYm9vdF90aW1lLAogCQkJKCh1bnNpZ25lZCBsb25nKXN0YXRlaWQtPnNpX2Jvb3QpKSAmJgogCSAgICB0aW1lX2JlZm9yZSgodW5zaWduZWQgbG9uZykoc3RhdGVpZC0+c2lfYm9vdCArIGxlYXNlX3RpbWUpLCBnZXRfc2Vjb25kcygpKSkgewotCQlkcHJpbnRrKCJORlNEOiBleHBpcmVkIHN0YXRlaWQgKCUwOHgvJTA4eC8lMDh4LyUwOHgpIVxuIiwKLQkJCXN0YXRlaWQtPnNpX2Jvb3QsIHN0YXRlaWQtPnNpX3N0YXRlb3duZXJpZCwKLQkJCXN0YXRlaWQtPnNpX2ZpbGVpZCwgc3RhdGVpZC0+c2lfZ2VuZXJhdGlvbik7CisJCWRwcmludGsoIk5GU0Q6IGV4cGlyZWQgc3RhdGVpZCAiIFNUQVRFSURfRk1UICIhXG4iLAorCQkJU1RBVEVJRF9WQUwoc3RhdGVpZCkpOwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNjk2LDkgKzI2ODYsOCBAQAogCWlmIChFWFBJUkVEX1NUQVRFSUQoc3RhdGVpZCkpCiAJCXJldHVybiBuZnNlcnJfZXhwaXJlZDsKIAotCWRwcmludGsoIk5GU0Q6IGJhZCBzdGF0ZWlkICglMDh4LyUwOHgvJTA4eC8lMDh4KSFcbiIsCi0JCXN0YXRlaWQtPnNpX2Jvb3QsIHN0YXRlaWQtPnNpX3N0YXRlb3duZXJpZCwKLQkJc3RhdGVpZC0+c2lfZmlsZWlkLCBzdGF0ZWlkLT5zaV9nZW5lcmF0aW9uKTsKKwlkcHJpbnRrKCJORlNEOiBiYWQgc3RhdGVpZCAiIFNUQVRFSURfRk1UICIhXG4iLAorCQlTVEFURUlEX1ZBTChzdGF0ZWlkKSk7CiAJcmV0dXJuIG5mc2Vycl9iYWRfc3RhdGVpZDsKIH0KIApAQCAtMjg4NCwxMCArMjg3Myw4IEBACiAJc3RydWN0IHN2Y19maCAqY3VycmVudF9maCA9ICZjc3RhdGUtPmN1cnJlbnRfZmg7CiAJX19iZTMyIHN0YXR1czsKIAotCWRwcmludGsoIk5GU0Q6IHByZXByb2Nlc3Nfc2VxaWRfb3A6IHNlcWlkPSVkICIgCi0JCQkic3RhdGVpZCA9ICglMDh4LyUwOHgvJTA4eC8lMDh4KVxuIiwgc2VxaWQsCi0JCXN0YXRlaWQtPnNpX2Jvb3QsIHN0YXRlaWQtPnNpX3N0YXRlb3duZXJpZCwgc3RhdGVpZC0+c2lfZmlsZWlkLAotCQlzdGF0ZWlkLT5zaV9nZW5lcmF0aW9uKTsKKwlkcHJpbnRrKCJORlNEOiAlczogc2VxaWQ9JWQgc3RhdGVpZCA9ICIgU1RBVEVJRF9GTVQgIlxuIiwgX19mdW5jX18sCisJCXNlcWlkLCBTVEFURUlEX1ZBTChzdGF0ZWlkKSk7CiAKIAkqc3RwcCA9IE5VTEw7CiAJKnNvcHAgPSBOVUxMOwpAQCAtMzAxOSwxMiArMzAwNiw4IEBACiAJc29wLT5zb19jb25maXJtZWQgPSAxOwogCXVwZGF0ZV9zdGF0ZWlkKCZzdHAtPnN0X3N0YXRlaWQpOwogCW1lbWNweSgmb2MtPm9jX3Jlc3Bfc3RhdGVpZCwgJnN0cC0+c3Rfc3RhdGVpZCwgc2l6ZW9mKHN0YXRlaWRfdCkpOwotCWRwcmludGsoIk5GU0Q6IG5mc2Q0X29wZW5fY29uZmlybTogc3VjY2Vzcywgc2VxaWQ9JWQgIiAKLQkJInN0YXRlaWQ9KCUwOHgvJTA4eC8lMDh4LyUwOHgpXG4iLCBvYy0+b2Nfc2VxaWQsCi0JCSAgICAgICAgIHN0cC0+c3Rfc3RhdGVpZC5zaV9ib290LAotCQkgICAgICAgICBzdHAtPnN0X3N0YXRlaWQuc2lfc3RhdGVvd25lcmlkLAotCQkgICAgICAgICBzdHAtPnN0X3N0YXRlaWQuc2lfZmlsZWlkLAotCQkgICAgICAgICBzdHAtPnN0X3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7CisJZHByaW50aygiTkZTRDogJXM6IHN1Y2Nlc3MsIHNlcWlkPSVkIHN0YXRlaWQ9IiBTVEFURUlEX0ZNVCAiXG4iLAorCQlfX2Z1bmNfXywgb2MtPm9jX3NlcWlkLCBTVEFURUlEX1ZBTCgmc3RwLT5zdF9zdGF0ZWlkKSk7CiAKIAluZnNkNF9jcmVhdGVfY2xpZF9kaXIoc29wLT5zb19jbGllbnQpOwogb3V0OgpAQCAtMzI4Myw5ICszMjY2LDggQEAKIAlzdHJ1Y3QgbmZzNF9maWxlICpmcDsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkbDsKIAotCWRwcmludGsoIk5GU0Q6ZmluZF9kZWxlZ2F0aW9uX3N0YXRlaWQgc3RhdGVpZD0oJTA4eC8lMDh4LyUwOHgvJTA4eClcbiIsCi0gICAgICAgICAgICAgICAgICAgIHN0aWQtPnNpX2Jvb3QsIHN0aWQtPnNpX3N0YXRlb3duZXJpZCwKLSAgICAgICAgICAgICAgICAgICAgc3RpZC0+c2lfZmlsZWlkLCBzdGlkLT5zaV9nZW5lcmF0aW9uKTsKKwlkcHJpbnRrKCJORlNEOiAlczogc3RhdGVpZD0iIFNUQVRFSURfRk1UICJcbiIsIF9fZnVuY19fLAorCQlTVEFURUlEX1ZBTChzdGlkKSk7CiAKIAlmcCA9IGZpbmRfZmlsZShpbm8pOwogCWlmICghZnApCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDBmYmQ1MGMuLmE4NTg3ZTkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC00MCwyNCArNDAsMTYgQEAKICAqIGF0IHRoZSBlbmQgb2YgbmZzNHN2Y19kZWNvZGVfY29tcG91bmRhcmdzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3RhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3hkcjQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkX2lkbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzNC5oPgogI2luY2x1ZGUgPGxpbnV4L25mczRfYWNsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aF9nc3MuaD4KIAorI2luY2x1ZGUgInhkcjQuaCIKKyNpbmNsdWRlICJ2ZnMuaCIKKwogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZCQlORlNEREJHX1hEUgogCiAvKgpAQCAtMjIwNCwxMSArMjE5NiwxNCBAQAogCSAqIHdlIHdpbGwgbm90IGZvbGxvdyB0aGUgY3Jvc3MgbW91bnQgYW5kIHdpbGwgZmlsbCB0aGUgYXR0cmlidHV0ZXMKIAkgKiBkaXJlY3RseSBmcm9tIHRoZSBtb3VudHBvaW50IGRlbnRyeS4KIAkgKi8KLQlpZiAoZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgIWF0dHJpYnV0ZXNfbmVlZF9tb3VudChjZC0+cmRfYm12YWwpKQotCQlpZ25vcmVfY3Jvc3NtbnQgPSAxOwotCWVsc2UgaWYgKGRfbW91bnRwb2ludChkZW50cnkpKSB7CisJaWYgKG5mc2RfbW91bnRwb2ludChkZW50cnksIGV4cCkpIHsKIAkJaW50IGVycjsKIAorCQlpZiAoIShleHAtPmV4X2ZsYWdzICYgTkZTRVhQX1Y0Uk9PVCkKKwkJCQkmJiAhYXR0cmlidXRlc19uZWVkX21vdW50KGNkLT5yZF9ibXZhbCkpIHsKKwkJCWlnbm9yZV9jcm9zc21udCA9IDE7CisJCQlnb3RvIG91dF9lbmNvZGU7CisJCX0KIAkJLyoKIAkJICogV2h5IHRoZSBoZWNrIGFyZW4ndCB3ZSBqdXN0IHVzaW5nIG5mc2RfbG9va3VwPz8KIAkJICogRGlmZmVyZW50ICIuIi8iLi4iIGhhbmRsaW5nPyAgU29tZXRoaW5nIGVsc2U/CkBAIC0yMjI0LDYgKzIyMTksNyBAQAogCQkJZ290byBvdXRfcHV0OwogCiAJfQorb3V0X2VuY29kZToKIAluZnNlcnIgPSBuZnNkNF9lbmNvZGVfZmF0dHIoTlVMTCwgZXhwLCBkZW50cnksIHAsIGJ1ZmxlbiwgY2QtPnJkX2JtdmFsLAogCQkJCQljZC0+cmRfcnFzdHAsIGlnbm9yZV9jcm9zc21udCk7CiBvdXRfcHV0OgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjYWNoZS5jIGIvZnMvbmZzZC9uZnNjYWNoZS5jCmluZGV4IDQ2Mzg2MzUuLmRhMDg1NjAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY2FjaGUuYworKysgYi9mcy9uZnNkL25mc2NhY2hlLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvZnMvbmZzZC9uZnNjYWNoZS5jCi0gKgogICogUmVxdWVzdCByZXBseSBjYWNoZS4gVGhpcyBpcyBjdXJyZW50bHkgYSBnbG9iYWwgY2FjaGUsIGJ1dCB0aGlzIG1heQogICogY2hhbmdlIGluIHRoZSBmdXR1cmUgYW5kIGJlIGEgcGVyLWNsaWVudCBjYWNoZS4KICAqCkBAIC0xMCwxNiArOCw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9jYWNoZS5oPgorI2luY2x1ZGUgIm5mc2QuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgogCiAvKiBTaXplIG9mIHJlcGx5IGNhY2hlLiBDb21tb24gdmFsdWVzIGFyZToKICAqIDQuM0JTRDoJMTI4CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCA1YzAxZmMxLi4yNjA0YzNlIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTEsNDYgKzEsMjAgQEAKIC8qCi0gKiBsaW51eC9mcy9uZnNkL25mc2N0bC5jCi0gKgogICogU3lzY2FsbCBpbnRlcmZhY2UgdG8ga25mc2QuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9uZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkX2lkbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbG9ja2QvYmluZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3Zjc29jay5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3hkci5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2xvY2tkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KIAotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlICJuZnNkLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKIAogLyoKICAqCVdlIGhhdmUgYSBzaW5nbGUgZGlyZWN0b3J5IHdpdGggOSBub2RlcyBpbiBpdC4KQEAgLTU1LDYgKzI5LDcgQEAKIAlORlNEX0dldGZkLAogCU5GU0RfR2V0ZnMsCiAJTkZTRF9MaXN0LAorCU5GU0RfRXhwb3J0X2ZlYXR1cmVzLAogCU5GU0RfRmgsCiAJTkZTRF9GT19VbmxvY2tJUCwKIAlORlNEX0ZPX1VubG9ja0ZTLApAQCAtMTczLDYgKzE0OCwyNCBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKK3N0YXRpYyBpbnQgZXhwb3J0X2ZlYXR1cmVzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXNlcV9wcmludGYobSwgIjB4JXggMHgleFxuIiwgTkZTRVhQX0FMTEZMQUdTLCBORlNFWFBfU0VDSU5GT19GTEFHUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXhwb3J0X2ZlYXR1cmVzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGV4cG9ydF9mZWF0dXJlc19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhwb3J0X2ZlYXR1cmVzX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gZXhwb3J0X2ZlYXR1cmVzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIGV4dGVybiBpbnQgbmZzZF9wb29sX3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAKQEAgLTEzMzAsNiArMTMyMyw4IEBACiAJCVtORlNEX0dldGZkXSA9IHsiLmdldGZkIiwgJnRyYW5zYWN0aW9uX29wcywgU19JV1VTUnxTX0lSVVNSfSwKIAkJW05GU0RfR2V0ZnNdID0geyIuZ2V0ZnMiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lXVVNSfFNfSVJVU1J9LAogCQlbTkZTRF9MaXN0XSA9IHsiZXhwb3J0cyIsICZleHBvcnRzX29wZXJhdGlvbnMsIFNfSVJVR099LAorCQlbTkZTRF9FeHBvcnRfZmVhdHVyZXNdID0geyJleHBvcnRfZmVhdHVyZXMiLAorCQkJCQkmZXhwb3J0X2ZlYXR1cmVzX29wZXJhdGlvbnMsIFNfSVJVR099LAogCQlbTkZTRF9GT19VbmxvY2tJUF0gPSB7InVubG9ja19pcCIsCiAJCQkJCSZ0cmFuc2FjdGlvbl9vcHMsIFNfSVdVU1J8U19JUlVTUn0sCiAJCVtORlNEX0ZPX1VubG9ja0ZTXSA9IHsidW5sb2NrX2ZpbGVzeXN0ZW0iLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNkLmggYi9mcy9uZnNkL25mc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTQyYTFhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzZC9uZnNkLmgKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBIb2RnZS1wb2RnZSBjb2xsZWN0aW9uIG9mIGtuZnNkLXJlbGF0ZWQgc3R1ZmYuCisgKiBJIHdpbGwgc29ydCB0aGlzIG91dCBsYXRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05GU0RfTkZTRF9ICisjZGVmaW5lIExJTlVYX05GU0RfTkZTRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZnNkL2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNkL3N0YXRzLmg+CisvKgorICogbmZzZCB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgTkZTRF9TVVBQT1JURURfTUlOT1JfVkVSU0lPTgkxCisKK3N0cnVjdCByZWFkZGlyX2NkIHsKKwlfX2JlMzIJCQllcnI7CS8qIDAsIG5mc2Vyciwgb3IgbmZzZXJyX2VvZiAqLworfTsKKworCitleHRlcm4gc3RydWN0IHN2Y19wcm9ncmFtCW5mc2RfcHJvZ3JhbTsKK2V4dGVybiBzdHJ1Y3Qgc3ZjX3ZlcnNpb24JbmZzZF92ZXJzaW9uMiwgbmZzZF92ZXJzaW9uMywKKwkJCQluZnNkX3ZlcnNpb240OworZXh0ZXJuIHUzMgkJCW5mc2Rfc3VwcG9ydGVkX21pbm9ydmVyc2lvbjsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXgJCW5mc2RfbXV0ZXg7CitleHRlcm4gc3RydWN0IHN2Y19zZXJ2CQkqbmZzZF9zZXJ2OworZXh0ZXJuIHNwaW5sb2NrX3QJCW5mc2RfZHJjX2xvY2s7CitleHRlcm4gdW5zaWduZWQgaW50CQluZnNkX2RyY19tYXhfbWVtOworZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kcmNfbWVtX3VzZWQ7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZzX2V4cG9ydHNfb3A7CisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzLgorICovCitpbnQJCW5mc2Rfc3ZjKHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBucnNlcnZzKTsKK2ludAkJbmZzZF9kaXNwYXRjaChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnN0YXRwKTsKKworaW50CQluZnNkX25ydGhyZWFkcyh2b2lkKTsKK2ludAkJbmZzZF9ucnBvb2xzKHZvaWQpOworaW50CQluZnNkX2dldF9ucnRocmVhZHMoaW50IG4sIGludCAqKTsKK2ludAkJbmZzZF9zZXRfbnJ0aHJlYWRzKGludCBuLCBpbnQgKik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORlNEX1YyX0FDTCkgfHwgZGVmaW5lZChDT05GSUdfTkZTRF9WM19BQ0wpCisjaWZkZWYgQ09ORklHX05GU0RfVjJfQUNMCitleHRlcm4gc3RydWN0IHN2Y192ZXJzaW9uIG5mc2RfYWNsX3ZlcnNpb24yOworI2Vsc2UKKyNkZWZpbmUgbmZzZF9hY2xfdmVyc2lvbjIgTlVMTAorI2VuZGlmCisjaWZkZWYgQ09ORklHX05GU0RfVjNfQUNMCitleHRlcm4gc3RydWN0IHN2Y192ZXJzaW9uIG5mc2RfYWNsX3ZlcnNpb24zOworI2Vsc2UKKyNkZWZpbmUgbmZzZF9hY2xfdmVyc2lvbjMgTlVMTAorI2VuZGlmCisjZW5kaWYKKworZW51bSB2ZXJzX29wIHtORlNEX1NFVCwgTkZTRF9DTEVBUiwgTkZTRF9URVNULCBORlNEX0FWQUlMIH07CitpbnQgbmZzZF92ZXJzKGludCB2ZXJzLCBlbnVtIHZlcnNfb3AgY2hhbmdlKTsKK2ludCBuZnNkX21pbm9ydmVyc2lvbih1MzIgbWlub3J2ZXJzaW9uLCBlbnVtIHZlcnNfb3AgY2hhbmdlKTsKK3ZvaWQgbmZzZF9yZXNldF92ZXJzaW9ucyh2b2lkKTsKK2ludCBuZnNkX2NyZWF0ZV9zZXJ2KHZvaWQpOworCitleHRlcm4gaW50IG5mc2RfbWF4X2Jsa3NpemU7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mc2RfdjRjbGllbnQoc3RydWN0IHN2Y19ycXN0ICpycSkKK3sKKwlyZXR1cm4gcnEtPnJxX3Byb2cgPT0gTkZTX1BST0dSQU0gJiYgcnEtPnJxX3ZlcnMgPT0gNDsKK30KKworLyogCisgKiBORlN2NCBTdGF0ZQorICovCisjaWZkZWYgQ09ORklHX05GU0RfVjQKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWF4X2RlbGVnYXRpb25zOworaW50IG5mczRfc3RhdGVfaW5pdCh2b2lkKTsKK3ZvaWQgbmZzZDRfZnJlZV9zbGFicyh2b2lkKTsKK2ludCBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpOwordm9pZCBuZnM0X3N0YXRlX3NodXRkb3duKHZvaWQpOwordGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKTsKK3ZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKTsKK2ludCBuZnM0X3Jlc2V0X3JlY292ZXJ5ZGlyKGNoYXIgKnJlY2Rpcik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbmZzNF9zdGF0ZV9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNkNF9mcmVlX3NsYWJzKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgbmZzNF9zdGF0ZV9zdGFydCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9zdGF0ZV9zaHV0ZG93bih2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG5mczRfcmVzZXRfcmVjb3ZlcnlkaXIoY2hhciAqcmVjZGlyKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworLyoKKyAqIGxvY2tkIGJpbmRpbmcKKyAqLwordm9pZAkJbmZzZF9sb2NrZF9pbml0KHZvaWQpOwordm9pZAkJbmZzZF9sb2NrZF9zaHV0ZG93bih2b2lkKTsKKworCisvKgorICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgcHJlLXhkcidlZCB2YWx1ZXMgZm9yIGZhc3RlciBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUJbmZzX29rCQkJY3B1X3RvX2JlMzIoTkZTX09LKQorI2RlZmluZQluZnNlcnJfcGVybQkJY3B1X3RvX2JlMzIoTkZTRVJSX1BFUk0pCisjZGVmaW5lCW5mc2Vycl9ub2VudAkJY3B1X3RvX2JlMzIoTkZTRVJSX05PRU5UKQorI2RlZmluZQluZnNlcnJfaW8JCWNwdV90b19iZTMyKE5GU0VSUl9JTykKKyNkZWZpbmUJbmZzZXJyX254aW8JCWNwdV90b19iZTMyKE5GU0VSUl9OWElPKQorI2RlZmluZQluZnNlcnJfZWFnYWluCQljcHVfdG9fYmUzMihORlNFUlJfRUFHQUlOKQorI2RlZmluZQluZnNlcnJfYWNjZXMJCWNwdV90b19iZTMyKE5GU0VSUl9BQ0NFUykKKyNkZWZpbmUJbmZzZXJyX2V4aXN0CQljcHVfdG9fYmUzMihORlNFUlJfRVhJU1QpCisjZGVmaW5lCW5mc2Vycl94ZGV2CQljcHVfdG9fYmUzMihORlNFUlJfWERFVikKKyNkZWZpbmUJbmZzZXJyX25vZGV2CQljcHVfdG9fYmUzMihORlNFUlJfTk9ERVYpCisjZGVmaW5lCW5mc2Vycl9ub3RkaXIJCWNwdV90b19iZTMyKE5GU0VSUl9OT1RESVIpCisjZGVmaW5lCW5mc2Vycl9pc2RpcgkJY3B1X3RvX2JlMzIoTkZTRVJSX0lTRElSKQorI2RlZmluZQluZnNlcnJfaW52YWwJCWNwdV90b19iZTMyKE5GU0VSUl9JTlZBTCkKKyNkZWZpbmUJbmZzZXJyX2ZiaWcJCWNwdV90b19iZTMyKE5GU0VSUl9GQklHKQorI2RlZmluZQluZnNlcnJfbm9zcGMJCWNwdV90b19iZTMyKE5GU0VSUl9OT1NQQykKKyNkZWZpbmUJbmZzZXJyX3JvZnMJCWNwdV90b19iZTMyKE5GU0VSUl9ST0ZTKQorI2RlZmluZQluZnNlcnJfbWxpbmsJCWNwdV90b19iZTMyKE5GU0VSUl9NTElOSykKKyNkZWZpbmUJbmZzZXJyX29wbm90c3VwcAljcHVfdG9fYmUzMihORlNFUlJfT1BOT1RTVVBQKQorI2RlZmluZQluZnNlcnJfbmFtZXRvb2xvbmcJY3B1X3RvX2JlMzIoTkZTRVJSX05BTUVUT09MT05HKQorI2RlZmluZQluZnNlcnJfbm90ZW1wdHkJCWNwdV90b19iZTMyKE5GU0VSUl9OT1RFTVBUWSkKKyNkZWZpbmUJbmZzZXJyX2RxdW90CQljcHVfdG9fYmUzMihORlNFUlJfRFFVT1QpCisjZGVmaW5lCW5mc2Vycl9zdGFsZQkJY3B1X3RvX2JlMzIoTkZTRVJSX1NUQUxFKQorI2RlZmluZQluZnNlcnJfcmVtb3RlCQljcHVfdG9fYmUzMihORlNFUlJfUkVNT1RFKQorI2RlZmluZQluZnNlcnJfd2ZsdXNoCQljcHVfdG9fYmUzMihORlNFUlJfV0ZMVVNIKQorI2RlZmluZQluZnNlcnJfYmFkaGFuZGxlCWNwdV90b19iZTMyKE5GU0VSUl9CQURIQU5ETEUpCisjZGVmaW5lCW5mc2Vycl9ub3RzeW5jCQljcHVfdG9fYmUzMihORlNFUlJfTk9UX1NZTkMpCisjZGVmaW5lCW5mc2Vycl9iYWRjb29raWUJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9DT09LSUUpCisjZGVmaW5lCW5mc2Vycl9ub3RzdXBwCQljcHVfdG9fYmUzMihORlNFUlJfTk9UU1VQUCkKKyNkZWZpbmUJbmZzZXJyX3Rvb3NtYWxsCQljcHVfdG9fYmUzMihORlNFUlJfVE9PU01BTEwpCisjZGVmaW5lCW5mc2Vycl9zZXJ2ZXJmYXVsdAljcHVfdG9fYmUzMihORlNFUlJfU0VSVkVSRkFVTFQpCisjZGVmaW5lCW5mc2Vycl9iYWR0eXBlCQljcHVfdG9fYmUzMihORlNFUlJfQkFEVFlQRSkKKyNkZWZpbmUJbmZzZXJyX2p1a2Vib3gJCWNwdV90b19iZTMyKE5GU0VSUl9KVUtFQk9YKQorI2RlZmluZQluZnNlcnJfZGVuaWVkCQljcHVfdG9fYmUzMihORlNFUlJfREVOSUVEKQorI2RlZmluZQluZnNlcnJfZGVhZGxvY2sJCWNwdV90b19iZTMyKE5GU0VSUl9ERUFETE9DSykKKyNkZWZpbmUgbmZzZXJyX2V4cGlyZWQgICAgICAgICAgY3B1X3RvX2JlMzIoTkZTRVJSX0VYUElSRUQpCisjZGVmaW5lCW5mc2Vycl9iYWRfY29va2llCWNwdV90b19iZTMyKE5GU0VSUl9CQURfQ09PS0lFKQorI2RlZmluZQluZnNlcnJfc2FtZQkJY3B1X3RvX2JlMzIoTkZTRVJSX1NBTUUpCisjZGVmaW5lCW5mc2Vycl9jbGlkX2ludXNlCWNwdV90b19iZTMyKE5GU0VSUl9DTElEX0lOVVNFKQorI2RlZmluZQluZnNlcnJfc3RhbGVfY2xpZW50aWQJY3B1X3RvX2JlMzIoTkZTRVJSX1NUQUxFX0NMSUVOVElEKQorI2RlZmluZQluZnNlcnJfcmVzb3VyY2UJCWNwdV90b19iZTMyKE5GU0VSUl9SRVNPVVJDRSkKKyNkZWZpbmUJbmZzZXJyX21vdmVkCQljcHVfdG9fYmUzMihORlNFUlJfTU9WRUQpCisjZGVmaW5lCW5mc2Vycl9ub2ZpbGVoYW5kbGUJY3B1X3RvX2JlMzIoTkZTRVJSX05PRklMRUhBTkRMRSkKKyNkZWZpbmUJbmZzZXJyX21pbm9yX3ZlcnNfbWlzbWF0Y2gJY3B1X3RvX2JlMzIoTkZTRVJSX01JTk9SX1ZFUlNfTUlTTUFUQ0gpCisjZGVmaW5lIG5mc2Vycl9zaGFyZV9kZW5pZWQJY3B1X3RvX2JlMzIoTkZTRVJSX1NIQVJFX0RFTklFRCkKKyNkZWZpbmUgbmZzZXJyX3N0YWxlX3N0YXRlaWQJY3B1X3RvX2JlMzIoTkZTRVJSX1NUQUxFX1NUQVRFSUQpCisjZGVmaW5lIG5mc2Vycl9vbGRfc3RhdGVpZAljcHVfdG9fYmUzMihORlNFUlJfT0xEX1NUQVRFSUQpCisjZGVmaW5lIG5mc2Vycl9iYWRfc3RhdGVpZAljcHVfdG9fYmUzMihORlNFUlJfQkFEX1NUQVRFSUQpCisjZGVmaW5lIG5mc2Vycl9iYWRfc2VxaWQJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9TRVFJRCkKKyNkZWZpbmUJbmZzZXJyX3N5bWxpbmsJCWNwdV90b19iZTMyKE5GU0VSUl9TWU1MSU5LKQorI2RlZmluZQluZnNlcnJfbm90X3NhbWUJCWNwdV90b19iZTMyKE5GU0VSUl9OT1RfU0FNRSkKKyNkZWZpbmUJbmZzZXJyX3Jlc3RvcmVmaAljcHVfdG9fYmUzMihORlNFUlJfUkVTVE9SRUZIKQorI2RlZmluZQluZnNlcnJfYXR0cm5vdHN1cHAJY3B1X3RvX2JlMzIoTkZTRVJSX0FUVFJOT1RTVVBQKQorI2RlZmluZQluZnNlcnJfYmFkX3hkcgkJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9YRFIpCisjZGVmaW5lCW5mc2Vycl9vcGVubW9kZQkJY3B1X3RvX2JlMzIoTkZTRVJSX09QRU5NT0RFKQorI2RlZmluZQluZnNlcnJfbG9ja3NfaGVsZAljcHVfdG9fYmUzMihORlNFUlJfTE9DS1NfSEVMRCkKKyNkZWZpbmUJbmZzZXJyX29wX2lsbGVnYWwJY3B1X3RvX2JlMzIoTkZTRVJSX09QX0lMTEVHQUwpCisjZGVmaW5lCW5mc2Vycl9ncmFjZQkJY3B1X3RvX2JlMzIoTkZTRVJSX0dSQUNFKQorI2RlZmluZQluZnNlcnJfbm9fZ3JhY2UJCWNwdV90b19iZTMyKE5GU0VSUl9OT19HUkFDRSkKKyNkZWZpbmUJbmZzZXJyX3JlY2xhaW1fYmFkCWNwdV90b19iZTMyKE5GU0VSUl9SRUNMQUlNX0JBRCkKKyNkZWZpbmUJbmZzZXJyX2JhZG5hbWUJCWNwdV90b19iZTMyKE5GU0VSUl9CQUROQU1FKQorI2RlZmluZQluZnNlcnJfY2JfcGF0aF9kb3duCWNwdV90b19iZTMyKE5GU0VSUl9DQl9QQVRIX0RPV04pCisjZGVmaW5lCW5mc2Vycl9sb2NrZWQJCWNwdV90b19iZTMyKE5GU0VSUl9MT0NLRUQpCisjZGVmaW5lCW5mc2Vycl93cm9uZ3NlYwkJY3B1X3RvX2JlMzIoTkZTRVJSX1dST05HU0VDKQorI2RlZmluZSBuZnNlcnJfYmFkaW9tb2RlCQljcHVfdG9fYmUzMihORlM0RVJSX0JBRElPTU9ERSkKKyNkZWZpbmUgbmZzZXJyX2JhZGxheW91dAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9CQURMQVlPVVQpCisjZGVmaW5lIG5mc2Vycl9iYWRfc2Vzc2lvbl9kaWdlc3QJY3B1X3RvX2JlMzIoTkZTNEVSUl9CQURfU0VTU0lPTl9ESUdFU1QpCisjZGVmaW5lIG5mc2Vycl9iYWRzZXNzaW9uCQljcHVfdG9fYmUzMihORlM0RVJSX0JBRFNFU1NJT04pCisjZGVmaW5lIG5mc2Vycl9iYWRzbG90CQkJY3B1X3RvX2JlMzIoTkZTNEVSUl9CQURTTE9UKQorI2RlZmluZSBuZnNlcnJfY29tcGxldGVfYWxyZWFkeQkJY3B1X3RvX2JlMzIoTkZTNEVSUl9DT01QTEVURV9BTFJFQURZKQorI2RlZmluZSBuZnNlcnJfY29ubl9ub3RfYm91bmRfdG9fc2Vzc2lvbiBjcHVfdG9fYmUzMihORlM0RVJSX0NPTk5fTk9UX0JPVU5EX1RPX1NFU1NJT04pCisjZGVmaW5lIG5mc2Vycl9kZWxlZ19hbHJlYWR5X3dhbnRlZAljcHVfdG9fYmUzMihORlM0RVJSX0RFTEVHX0FMUkVBRFlfV0FOVEVEKQorI2RlZmluZSBuZnNlcnJfYmFja19jaGFuX2J1c3kJCWNwdV90b19iZTMyKE5GUzRFUlJfQkFDS19DSEFOX0JVU1kpCisjZGVmaW5lIG5mc2Vycl9sYXlvdXR0cnlsYXRlcgkJY3B1X3RvX2JlMzIoTkZTNEVSUl9MQVlPVVRUUllMQVRFUikKKyNkZWZpbmUgbmZzZXJyX2xheW91dHVuYXZhaWxhYmxlCWNwdV90b19iZTMyKE5GUzRFUlJfTEFZT1VUVU5BVkFJTEFCTEUpCisjZGVmaW5lIG5mc2Vycl9ub21hdGNoaW5nX2xheW91dAljcHVfdG9fYmUzMihORlM0RVJSX05PTUFUQ0hJTkdfTEFZT1VUKQorI2RlZmluZSBuZnNlcnJfcmVjYWxsY29uZmxpY3QJCWNwdV90b19iZTMyKE5GUzRFUlJfUkVDQUxMQ09ORkxJQ1QpCisjZGVmaW5lIG5mc2Vycl91bmtub3duX2xheW91dHR5cGUJY3B1X3RvX2JlMzIoTkZTNEVSUl9VTktOT1dOX0xBWU9VVFRZUEUpCisjZGVmaW5lIG5mc2Vycl9zZXFfbWlzb3JkZXJlZAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9TRVFfTUlTT1JERVJFRCkKKyNkZWZpbmUgbmZzZXJyX3NlcXVlbmNlX3BvcwkJY3B1X3RvX2JlMzIoTkZTNEVSUl9TRVFVRU5DRV9QT1MpCisjZGVmaW5lIG5mc2Vycl9yZXFfdG9vX2JpZwkJY3B1X3RvX2JlMzIoTkZTNEVSUl9SRVFfVE9PX0JJRykKKyNkZWZpbmUgbmZzZXJyX3JlcF90b29fYmlnCQljcHVfdG9fYmUzMihORlM0RVJSX1JFUF9UT09fQklHKQorI2RlZmluZSBuZnNlcnJfcmVwX3Rvb19iaWdfdG9fY2FjaGUJY3B1X3RvX2JlMzIoTkZTNEVSUl9SRVBfVE9PX0JJR19UT19DQUNIRSkKKyNkZWZpbmUgbmZzZXJyX3JldHJ5X3VuY2FjaGVkX3JlcAljcHVfdG9fYmUzMihORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUCkKKyNkZWZpbmUgbmZzZXJyX3Vuc2FmZV9jb21wb3VuZAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9VTlNBRkVfQ09NUE9VTkQpCisjZGVmaW5lIG5mc2Vycl90b29fbWFueV9vcHMJCWNwdV90b19iZTMyKE5GUzRFUlJfVE9PX01BTllfT1BTKQorI2RlZmluZSBuZnNlcnJfb3Bfbm90X2luX3Nlc3Npb24JY3B1X3RvX2JlMzIoTkZTNEVSUl9PUF9OT1RfSU5fU0VTU0lPTikKKyNkZWZpbmUgbmZzZXJyX2hhc2hfYWxnX3Vuc3VwcAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9IQVNIX0FMR19VTlNVUFApCisjZGVmaW5lIG5mc2Vycl9jbGllbnRpZF9idXN5CQljcHVfdG9fYmUzMihORlM0RVJSX0NMSUVOVElEX0JVU1kpCisjZGVmaW5lIG5mc2Vycl9wbmZzX2lvX2hvbGUJCWNwdV90b19iZTMyKE5GUzRFUlJfUE5GU19JT19IT0xFKQorI2RlZmluZSBuZnNlcnJfc2VxX2ZhbHNlX3JldHJ5CQljcHVfdG9fYmUzMihORlM0RVJSX1NFUV9GQUxTRV9SRVRSWSkKKyNkZWZpbmUgbmZzZXJyX2JhZF9oaWdoX3Nsb3QJCWNwdV90b19iZTMyKE5GUzRFUlJfQkFEX0hJR0hfU0xPVCkKKyNkZWZpbmUgbmZzZXJyX2RlYWRzZXNzaW9uCQljcHVfdG9fYmUzMihORlM0RVJSX0RFQURTRVNTSU9OKQorI2RlZmluZSBuZnNlcnJfZW5jcl9hbGdfdW5zdXBwCQljcHVfdG9fYmUzMihORlM0RVJSX0VOQ1JfQUxHX1VOU1VQUCkKKyNkZWZpbmUgbmZzZXJyX3BuZnNfbm9fbGF5b3V0CQljcHVfdG9fYmUzMihORlM0RVJSX1BORlNfTk9fTEFZT1VUKQorI2RlZmluZSBuZnNlcnJfbm90X29ubHlfb3AJCWNwdV90b19iZTMyKE5GUzRFUlJfTk9UX09OTFlfT1ApCisjZGVmaW5lIG5mc2Vycl93cm9uZ19jcmVkCQljcHVfdG9fYmUzMihORlM0RVJSX1dST05HX0NSRUQpCisjZGVmaW5lIG5mc2Vycl93cm9uZ190eXBlCQljcHVfdG9fYmUzMihORlM0RVJSX1dST05HX1RZUEUpCisjZGVmaW5lIG5mc2Vycl9kaXJkZWxlZ191bmF2YWlsCQljcHVfdG9fYmUzMihORlM0RVJSX0RJUkRFTEVHX1VOQVZBSUwpCisjZGVmaW5lIG5mc2Vycl9yZWplY3RfZGVsZWcJCWNwdV90b19iZTMyKE5GUzRFUlJfUkVKRUNUX0RFTEVHKQorI2RlZmluZSBuZnNlcnJfcmV0dXJuY29uZmxpY3QJCWNwdV90b19iZTMyKE5GUzRFUlJfUkVUVVJOQ09ORkxJQ1QpCisjZGVmaW5lIG5mc2Vycl9kZWxlZ19yZXZva2VkCQljcHVfdG9fYmUzMihORlM0RVJSX0RFTEVHX1JFVk9LRUQpCisKKy8qIGVycm9yIGNvZGVzIGZvciBpbnRlcm5hbCB1c2UgKi8KKy8qIGlmIGEgcmVxdWVzdCBmYWlscyBkdWUgdG8ga21hbGxvYyBmYWlsdXJlLCBpdCBnZXRzIGRyb3BwZWQuCisgKiAgQ2xpZW50IHNob3VsZCByZXNlbmQgZXZlbnR1YWxseQorICovCisjZGVmaW5lCW5mc2Vycl9kcm9waXQJCWNwdV90b19iZTMyKDMwMDAwKQorLyogZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGluIHJlYWRkaXIgKi8KKyNkZWZpbmUJbmZzZXJyX2VvZgkJY3B1X3RvX2JlMzIoMzAwMDEpCisvKiByZXBsYXkgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUJbmZzZXJyX3JlcGxheV9tZQljcHVfdG9fYmUzMigxMTAwMSkKKy8qIG5mczQxIHJlcGxheSBkZXRlY3RlZCAqLworI2RlZmluZQluZnNlcnJfcmVwbGF5X2NhY2hlCWNwdV90b19iZTMyKDExMDAyKQorCisvKiBDaGVjayBmb3IgZGlyIGVudHJpZXMgJy4nIGFuZCAnLi4nICovCisjZGVmaW5lIGlzZG90ZW50KG4sIGwpCShsIDwgMyAmJiBuWzBdID09ICcuJyAmJiAobCA9PSAxIHx8IG5bMV0gPT0gJy4nKSkKKworLyoKKyAqIFRpbWUgb2Ygc2VydmVyIHN0YXJ0dXAKKyAqLworZXh0ZXJuIHN0cnVjdCB0aW1ldmFsCW5mc3N2Y19ib290OworCisjaWZkZWYgQ09ORklHX05GU0RfVjQKKworLyogYmVmb3JlIHByb2Nlc3NpbmcgYSBDT01QT1VORCBvcGVyYXRpb24sIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGVyZQorICogaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIgZm9yIFhEUiBlbmNvZGUgdG8gc3VjY2VlZC4gIG90aGVyd2lzZSwKKyAqIHdlIG1pZ2h0IHByb2Nlc3MgYW4gb3BlcmF0aW9uIHdpdGggc2lkZSBlZmZlY3RzLCBhbmQgYmUgdW5hYmxlIHRvCisgKiB0ZWxsIHRoZSBjbGllbnQgdGhhdCB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKyAqCisgKiBDT01QT1VORF9TTEFDS19TUEFDRSAtIHRoaXMgaXMgdGhlIG1pbmltdW0gYnl0ZXMgb2YgYnVmZmVyIHNwYWNlCisgKiBuZWVkZWQgdG8gZW5jb2RlIGFuICJvcmRpbmFyeSIgX3N1Y2Nlc3NmdWxfIG9wZXJhdGlvbi4gIChHRVRBVFRSLAorICogUkVBRCwgUkVBRERJUiwgYW5kIFJFQURMSU5LIGhhdmUgdGhlaXIgb3duIGJ1ZmZlciBjaGVja3MuKSAgaWYgd2UKKyAqIGZhbGwgYmVsb3cgdGhpcyBsZXZlbCwgd2UgZmFpbCB0aGUgbmV4dCBvcGVyYXRpb24gd2l0aCBORlM0RVJSX1JFU09VUkNFLgorICoKKyAqIENPTVBPVU5EX0VSUl9TTEFDS19TUEFDRSAtIHRoaXMgaXMgdGhlIG1pbmltdW0gYnl0ZXMgb2YgYnVmZmVyIHNwYWNlCisgKiBuZWVkZWQgdG8gZW5jb2RlIGFuIG9wZXJhdGlvbiB3aGljaCBoYXMgZmFpbGVkIHdpdGggTkZTNEVSUl9SRVNPVVJDRS4KKyAqIGNhcmUgaXMgdGFrZW4gdG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgZmFsbCBiZWxvdyB0aGlzIGxldmVsIGZvciBhbnkKKyAqIHJlYXNvbi4KKyAqLworI2RlZmluZQlDT01QT1VORF9TTEFDS19TUEFDRQkJMTQwICAgIC8qIE9QX0dFVEZIICovCisjZGVmaW5lIENPTVBPVU5EX0VSUl9TTEFDS19TUEFDRQkxMiAgICAgLyogT1BfU0VUQVRUUiAqLworCisjZGVmaW5lIE5GU0RfTEVBU0VfVElNRSAgICAgICAgICAgICAgICAgKG5mczRfbGVhc2VfdGltZSgpKQorI2RlZmluZSBORlNEX0xBVU5EUk9NQVRfTUlOVElNRU9VVCAgICAgIDEwICAgLyogc2Vjb25kcyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBieSB0aGUgTkZTdjQgc2VydmVyOgorICogICAgQVJDSElWRSAgICAgICAoZGVwcmVjYXRlZCBhbnl3YXkpCisgKiAgICBISURERU4gICAgICAgICh1bmxpa2VseSB0byBiZSBzdXBwb3J0ZWQgYW55IHRpbWUgc29vbikKKyAqICAgIE1JTUVUWVBFICAgICAgKHVubGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBhbnkgdGltZSBzb29uKQorICogICAgUVVPVEFfKiAgICAgICAod2lsbCBiZSBzdXBwb3J0ZWQgaW4gYSBmb3J0aGNvbWluZyBwYXRjaCkKKyAqICAgIFNZU1RFTSAgICAgICAgKHVubGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBhbnkgdGltZSBzb29uKQorICogICAgVElNRV9CQUNLVVAgICAodW5saWtlbHkgdG8gYmUgc3VwcG9ydGVkIGFueSB0aW1lIHNvb24pCisgKiAgICBUSU1FX0NSRUFURSAgICh1bmxpa2VseSB0byBiZSBzdXBwb3J0ZWQgYW55IHRpbWUgc29vbikKKyAqLworI2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoRkFUVFI0X1dPUkQwX1NVUFBPUlRFRF9BVFRSUyAgIHwgRkFUVFI0X1dPUkQwX1RZUEUgICAgICAgICB8IEZBVFRSNF9XT1JEMF9GSF9FWFBJUkVfVFlQRSAgIFwKKyB8IEZBVFRSNF9XT1JEMF9DSEFOR0UgICAgICAgICAgfCBGQVRUUjRfV09SRDBfU0laRSAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0xJTktfU1VQUE9SVCAgICAgXAorIHwgRkFUVFI0X1dPUkQwX1NZTUxJTktfU1VQUE9SVCB8IEZBVFRSNF9XT1JEMF9OQU1FRF9BVFRSICAgfCBGQVRUUjRfV09SRDBfRlNJRCAgICAgICAgICAgICBcCisgfCBGQVRUUjRfV09SRDBfVU5JUVVFX0hBTkRMRVMgIHwgRkFUVFI0X1dPUkQwX0xFQVNFX1RJTUUgICB8IEZBVFRSNF9XT1JEMF9SREFUVFJfRVJST1IgICAgIFwKKyB8IEZBVFRSNF9XT1JEMF9BQ0xTVVBQT1JUICAgICAgfCBGQVRUUjRfV09SRDBfQ0FOU0VUVElNRSAgIHwgRkFUVFI0X1dPUkQwX0NBU0VfSU5TRU5TSVRJVkUgXAorIHwgRkFUVFI0X1dPUkQwX0NBU0VfUFJFU0VSVklORyB8IEZBVFRSNF9XT1JEMF9DSE9XTl9SRVNUUklDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfCBGQVRUUjRfV09SRDBfRklMRUhBTkRMRSAgICAgIHwgRkFUVFI0X1dPUkQwX0ZJTEVJRCAgICAgICB8IEZBVFRSNF9XT1JEMF9GSUxFU19BVkFJTCAgICAgIFwKKyB8IEZBVFRSNF9XT1JEMF9GSUxFU19GUkVFICAgICAgfCBGQVRUUjRfV09SRDBfRklMRVNfVE9UQUwgIHwgRkFUVFI0X1dPUkQwX0ZTX0xPQ0FUSU9OUyB8IEZBVFRSNF9XT1JEMF9IT01PR0VORU9VUyAgICAgIFwKKyB8IEZBVFRSNF9XT1JEMF9NQVhGSUxFU0laRSAgICAgfCBGQVRUUjRfV09SRDBfTUFYTElOSyAgICAgIHwgRkFUVFI0X1dPUkQwX01BWE5BTUUgICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQwX01BWFJFQUQgICAgICAgICB8IEZBVFRSNF9XT1JEMF9NQVhXUklURSAgICAgfCBGQVRUUjRfV09SRDBfQUNMKQorCisjZGVmaW5lIE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyhGQVRUUjRfV09SRDFfTU9ERSAgICAgICAgICAgICAgfCBGQVRUUjRfV09SRDFfTk9fVFJVTkMgICAgIHwgRkFUVFI0X1dPUkQxX05VTUxJTktTICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQxX09XTkVSCSAgICAgICAgfCBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVAgIHwgRkFUVFI0X1dPUkQxX1JBV0RFViAgICAgICAgICAgXAorIHwgRkFUVFI0X1dPUkQxX1NQQUNFX0FWQUlMICAgICB8IEZBVFRSNF9XT1JEMV9TUEFDRV9GUkVFICAgfCBGQVRUUjRfV09SRDFfU1BBQ0VfVE9UQUwgICAgICBcCisgfCBGQVRUUjRfV09SRDFfU1BBQ0VfVVNFRCAgICAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTICB8IEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgIFwKKyB8IEZBVFRSNF9XT1JEMV9USU1FX0RFTFRBICAgfCBGQVRUUjRfV09SRDFfVElNRV9NRVRBREFUQSAgICBcCisgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRlkgICAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVCB8IEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKKworI2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDIgMAorCisjZGVmaW5lIE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQwIFwKKwlORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAKKworI2RlZmluZSBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMSBcCisJTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQxCisKKyNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgXAorCShORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDIgfCBGQVRUUjRfV09SRDJfU1VQUEFUVFJfRVhDTENSRUFUKQorCitzdGF0aWMgaW5saW5lIHUzMiBuZnNkX3N1cHBhdHRyczAodTMyIG1pbm9ydmVyc2lvbikKK3sKKwlyZXR1cm4gbWlub3J2ZXJzaW9uID8gTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDAKKwkJCSAgICA6IE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMDsKK30KKworc3RhdGljIGlubGluZSB1MzIgbmZzZF9zdXBwYXR0cnMxKHUzMiBtaW5vcnZlcnNpb24pCit7CisJcmV0dXJuIG1pbm9ydmVyc2lvbiA/IE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQxCisJCQkgICAgOiBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG5mc2Rfc3VwcGF0dHJzMih1MzIgbWlub3J2ZXJzaW9uKQoreworCXJldHVybiBtaW5vcnZlcnNpb24gPyBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMgorCQkJICAgIDogTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQyOworfQorCisvKiBUaGVzZSB3aWxsIHJldHVybiBFUlJfSU5WQUwgaWYgc3BlY2lmaWVkIGluIEdFVEFUVFIgb3IgUkVBRERJUi4gKi8KKyNkZWZpbmUgTkZTRF9XUklURU9OTFlfQVRUUlNfV09SRDEJCQkJCQkJICAgIFwKKyhGQVRUUjRfV09SRDFfVElNRV9BQ0NFU1NfU0VUICAgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKQorCisvKiBUaGVzZSBhcmUgdGhlIG9ubHkgYXR0cnMgYWxsb3dlZCBpbiBDUkVBVEUvT1BFTi9TRVRBVFRSLiAqLworI2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoRkFUVFI0X1dPUkQwX1NJWkUgICAgICAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0FDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorI2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoRkFUVFI0X1dPUkQxX01PREUgICAgICAgICAgICAgIHwgRkFUVFI0X1dPUkQxX09XTkVSICAgICAgICAgfCBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVAgICAgIFwKKyB8IEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKQorI2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMiAwCisKKyNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDAgXAorCU5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwCisvKgorICogd2UgY3VycmVudGx5IHN0b3JlIHRoZSBleGNsdXNpdmUgY3JlYXRlIHZlcmlmaWVyIGluIHRoZSB2X3thLG19dGltZQorICogYXR0cmlidXRlcyBzbyB0aGUgY2xpZW50IGNhbid0IHNldCB0aGVzZSBhdCBjcmVhdGUgdGltZSB1c2luZyBFWENMVVNJVkU0XzEKKyAqLworI2RlZmluZSBORlNEX1NVUFBBVFRSX0VYQ0xDUkVBVF9XT1JEMSBcCisJKE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxICYgXAorCSB+KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKSkKKyNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDIgXAorCU5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQyCisKKyNlbmRpZiAvKiBDT05GSUdfTkZTRF9WNCAqLworCisjZW5kaWYgLyogTElOVVhfTkZTRF9ORlNEX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzZmguYyBiL2ZzL25mc2QvbmZzZmguYwppbmRleCAwMTk2NWIyLi41NWM4ZTYzIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2ZoLmMKKysrIGIvZnMvbmZzZC9uZnNmaC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGxpbnV4L2ZzL25mc2QvbmZzZmguYwotICoKICAqIE5GUyBzZXJ2ZXIgZmlsZSBoYW5kbGUgdHJlYXRtZW50LgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KQEAgLTksMTkgKzcsMTEgQEAKICAqIC4uLiBhbmQgYWdhaW4gU291dGhlcm4tV2ludGVyIDIwMDEgdG8gc3VwcG9ydCBleHBvcnRfb3BlcmF0aW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogCi0jaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+CisjaW5jbHVkZSAibmZzZC5oIgorI2luY2x1ZGUgInZmcy5oIgogI2luY2x1ZGUgImF1dGguaCIKIAogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZCQlORlNEREJHX0ZICkBAIC05Niw4ICs4NiwxMCBAQAogc3RhdGljIF9fYmUzMiBuZnNkX3NldHVzZXJfYW5kX2NoZWNrX3BvcnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJCQkJICBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwKQogeworCWludCBmbGFncyA9IG5mc2V4cF9mbGFncyhycXN0cCwgZXhwKTsKKwogCS8qIENoZWNrIGlmIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQgZnJvbSBhIHNlY3VyZSBwb3J0LiAqLwotCWlmICghcnFzdHAtPnJxX3NlY3VyZSAmJiBFWF9TRUNVUkUoZXhwKSkgeworCWlmICghcnFzdHAtPnJxX3NlY3VyZSAmJiAhKGZsYWdzICYgTkZTRVhQX0lOU0VDVVJFX1BPUlQpKSB7CiAJCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwogCQlkcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIm5mc2Q6IHJlcXVlc3QgZnJvbSBpbnNlY3VyZSBwb3J0ICVzIVxuIiwKQEAgLTEwOSw2ICsxMDEsMzYgQEAKIAlyZXR1cm4gbmZzZXJybm8obmZzZF9zZXR1c2VyKHJxc3RwLCBleHApKTsKIH0KIAorc3RhdGljIGlubGluZSBfX2JlMzIgY2hlY2tfcHNldWRvX3Jvb3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBzdmNfZXhwb3J0ICpleHApCit7CisJaWYgKCEoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9WNFJPT1QpKQorCQlyZXR1cm4gbmZzX29rOworCS8qCisJICogdjIvdjMgY2xpZW50cyBoYXZlIG5vIG5lZWQgZm9yIHRoZSBWNFJPT1QgZXhwb3J0LS10aGV5IHVzZQorCSAqIHRoZSBtb3VudCBwcm90b2NsIGluc3RlYWQ7IGFsc28sIGZ1cnRoZXIgVjRST09UIGNoZWNrcyBtYXkgYmUKKwkgKiBpbiB2NC1zcGVjaWZpYyBjb2RlLCBpbiB3aGljaCBjYXNlIHYyL3YzIGNsaWVudHMgY291bGQgYnlwYXNzCisJICogdGhlbS4KKwkgKi8KKwlpZiAoIW5mc2RfdjRjbGllbnQocnFzdHApKQorCQlyZXR1cm4gbmZzZXJyX3N0YWxlOworCS8qCisJICogV2UncmUgZXhwb3Npbmcgb25seSB0aGUgZGlyZWN0b3JpZXMgYW5kIHN5bWxpbmtzIHRoYXQgaGF2ZSB0byBiZQorCSAqIHRyYXZlcnNlZCBvbiB0aGUgd2F5IHRvIHJlYWwgZXhwb3J0czoKKwkgKi8KKwlpZiAodW5saWtlbHkoIVNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCisJCSAgICAgIVNfSVNMTksoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSkKKwkJcmV0dXJuIG5mc2Vycl9zdGFsZTsKKwkvKgorCSAqIEEgcHNldWRvcm9vdCBleHBvcnQgZ2l2ZXMgcGVybWlzc2lvbiB0byBhY2Nlc3Mgb25seSBvbmUKKwkgKiBzaW5nbGUgZGlyZWN0b3J5OyB0aGUga2VybmVsIGhhcyB0byBtYWtlIGFub3RoZXIgdXBjYWxsCisJICogYmVmb3JlIGdyYW50aW5nIGFjY2VzcyB0byBhbnl0aGluZyBlbHNlIHVuZGVyIGl0OgorCSAqLworCWlmICh1bmxpa2VseShkZW50cnkgIT0gZXhwLT5leF9wYXRoLmRlbnRyeSkpCisJCXJldHVybiBuZnNlcnJfc3RhbGU7CisJcmV0dXJuIG5mc19vazsKK30KKwogLyoKICAqIFVzZSB0aGUgZ2l2ZW4gZmlsZWhhbmRsZSB0byBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIGV4cG9ydCBhbmQKICAqIGRlbnRyeS4gIE9uIHN1Y2Nlc3MsIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHNldCBmaF9leHBvcnQgYW5kCkBAIC0yMzIsMTQgKzI1NCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChleHAtPmV4X2ZsYWdzICYgTkZTRVhQX05PU1VCVFJFRUNIRUNLKSB7Ci0JCWVycm9yID0gbmZzZF9zZXR1c2VyX2FuZF9jaGVja19wb3J0KHJxc3RwLCBleHApOwotCQlpZiAoZXJyb3IpIHsKLQkJCWRwdXQoZGVudHJ5KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCiAJCQkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpIHsKIAkJcHJpbnRrKCJuZnNkOiBmaW5kX2ZoX2RlbnRyeSByZXR1cm5lZCBhIERJU0NPTk5FQ1RFRCBkaXJlY3Rvcnk6ICVzLyVzXG4iLApAQCAtMjk0LDI4ICszMDgsMzIgQEAKIAkJZXJyb3IgPSBuZnNkX3NldF9maF9kZW50cnkocnFzdHAsIGZocCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwotCQlkZW50cnkgPSBmaHAtPmZoX2RlbnRyeTsKLQkJZXhwID0gZmhwLT5maF9leHBvcnQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICoganVzdCByZWNoZWNraW5nIHBlcm1pc3Npb25zCi0JCSAqIChlLmcuIG5mc3Byb2NfY3JlYXRlIGNhbGxzIGZoX3ZlcmlmeSwgdGhlbiBuZnNkX2NyZWF0ZQotCQkgKiBkb2VzIGFzIHdlbGwpCi0JCSAqLwotCQlkcHJpbnRrKCJuZnNkOiBmaF92ZXJpZnkgLSBqdXN0IGNoZWNraW5nXG4iKTsKLQkJZGVudHJ5ID0gZmhwLT5maF9kZW50cnk7Ci0JCWV4cCA9IGZocC0+ZmhfZXhwb3J0OwotCQkvKgotCQkgKiBTZXQgdXNlciBjcmVkcyBmb3IgdGhpcyBleHBvcnRwb2ludDsgbmVjZXNzYXJ5IGV2ZW4KLQkJICogaW4gdGhlICJqdXN0IGNoZWNraW5nIiBjYXNlIGJlY2F1c2UgdGhpcyBtYXkgYmUgYQotCQkgKiBmaWxlaGFuZGxlIHRoYXQgd2FzIGNyZWF0ZWQgYnkgZmhfY29tcG9zZSwgYW5kIHRoYXQKLQkJICogaXMgYWJvdXQgdG8gYmUgdXNlZCBpbiBhbm90aGVyIG5mc3Y0IGNvbXBvdW5kCi0JCSAqIG9wZXJhdGlvbi4KLQkJICovCi0JCWVycm9yID0gbmZzZF9zZXR1c2VyX2FuZF9jaGVja19wb3J0KHJxc3RwLCBleHApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKIAl9CisJZGVudHJ5ID0gZmhwLT5maF9kZW50cnk7CisJZXhwID0gZmhwLT5maF9leHBvcnQ7CisJLyoKKwkgKiBXZSBzdGlsbCBoYXZlIHRvIGRvIGFsbCB0aGVzZSBwZXJtaXNzaW9uIGNoZWNrcywgZXZlbiB3aGVuCisJICogZmhfZGVudHJ5IGlzIGFscmVhZHkgc2V0OgorCSAqIAktIGZoX3ZlcmlmeSBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50CisJICogCSAgImFjY2VzcyIgYXJndW1lbnRzIChlLmcuIG5mc2RfcHJvY19jcmVhdGUgY2FsbHMKKwkgKiAJICBmaF92ZXJpZnkoLi4uLE5GU0RfTUFZX0VYRUMpIGZpcnN0LCB0aGVuIGxhdGVyIChpbgorCSAqIAkgIG5mc2RfY3JlYXRlKSBjYWxscyBmaF92ZXJpZnkoLi4uLE5GU0RfTUFZX0NSRUFURSkuCisJICoJLSBpbiB0aGUgTkZTdjQgY2FzZSwgdGhlIGZpbGVoYW5kbGUgbWF5IGhhdmUgYmVlbiBmaWxsZWQKKwkgKgkgIGluIGJ5IGZoX2NvbXBvc2UsIGFuZCBnaXZlbiBhIGRlbnRyeSwgYnV0IGZ1cnRoZXIKKwkgKgkgIGNvbXBvdW5kIG9wZXJhdGlvbnMgcGVyZm9ybWVkIHdpdGggdGhhdCBmaWxlaGFuZGxlCisJICoJICBzdGlsbCBuZWVkIHBlcm1pc3Npb25zIGNoZWNrcy4gIEluIHRoZSB3b3JzdCBjYXNlLCBhCisJICoJICBtb3VudHBvaW50IGNyb3NzaW5nIG1heSBoYXZlIGNoYW5nZWQgdGhlIGV4cG9ydAorCSAqCSAgb3B0aW9ucywgYW5kIHdlIG1heSBub3cgbmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgdWlkCisJICoJICAoZm9yIGV4YW1wbGUsIGlmIGRpZmZlcmVudCBpZC1zcXVhc2hpbmcgb3B0aW9ucyBhcmUgaW4KKwkgKgkgIGVmZmVjdCBvbiB0aGUgbmV3IGZpbGVzeXN0ZW0pLgorCSAqLworCWVycm9yID0gY2hlY2tfcHNldWRvX3Jvb3QocnFzdHAsIGRlbnRyeSwgZXhwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJZXJyb3IgPSBuZnNkX3NldHVzZXJfYW5kX2NoZWNrX3BvcnQocnFzdHAsIGV4cCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKIAogCWVycm9yID0gbmZzZF9tb2RlX2NoZWNrKHJxc3RwLCBkZW50cnktPmRfaW5vZGUtPmlfbW9kZSwgdHlwZSk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNmaC5oIGIvZnMvbmZzZC9uZnNmaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZmI4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnNkL25mc2ZoLmgKQEAgLTAsMCArMSwyMDggQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4gKi8KKworI2lmbmRlZiBfTElOVVhfTkZTRF9GSF9JTlRfSAorI2RlZmluZSBfTElOVVhfTkZTRF9GSF9JTlRfSAorCisjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNmaC5oPgorCitlbnVtIG5mc2RfZnNpZCB7CisJRlNJRF9ERVYgPSAwLAorCUZTSURfTlVNLAorCUZTSURfTUFKT1JfTUlOT1IsCisJRlNJRF9FTkNPREVfREVWLAorCUZTSURfVVVJRDRfSU5VTSwKKwlGU0lEX1VVSUQ4LAorCUZTSURfVVVJRDE2LAorCUZTSURfVVVJRDE2X0lOVU0sCit9OworCitlbnVtIGZzaWRfc291cmNlIHsKKwlGU0lEU09VUkNFX0RFViwKKwlGU0lEU09VUkNFX0ZTSUQsCisJRlNJRFNPVVJDRV9VVUlELAorfTsKK2V4dGVybiBlbnVtIGZzaWRfc291cmNlIGZzaWRfc291cmNlKHN0cnVjdCBzdmNfZmggKmZocCk7CisKKworLyogVGhpcyBtaWdodCBsb29rIGEgbGl0dGxlIGxhcmdlIHRvICJpbmxpbmUiIGJ1dCBpbiBhbGwgY2FsbHMgZXhjZXB0CisgKiBvbmUsICd2ZXJzJyBpcyBjb25zdGFudCBzbyBtb3N0ZSBvZiB0aGUgZnVuY3Rpb24gZGlzYXBwZWFycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1rX2ZzaWQoaW50IHZlcnMsIHUzMiAqZnNpZHYsIGRldl90IGRldiwgaW5vX3QgaW5vLAorCQkJICAgdTMyIGZzaWQsIHVuc2lnbmVkIGNoYXIgKnV1aWQpCit7CisJdTMyICp1cDsKKwlzd2l0Y2godmVycykgeworCWNhc2UgRlNJRF9ERVY6CisJCWZzaWR2WzBdID0gaHRvbmwoKE1BSk9SKGRldik8PDE2KSB8CisJCQkJIE1JTk9SKGRldikpOworCQlmc2lkdlsxXSA9IGlub190X3RvX3UzMihpbm8pOworCQlicmVhazsKKwljYXNlIEZTSURfTlVNOgorCQlmc2lkdlswXSA9IGZzaWQ7CisJCWJyZWFrOworCWNhc2UgRlNJRF9NQUpPUl9NSU5PUjoKKwkJZnNpZHZbMF0gPSBodG9ubChNQUpPUihkZXYpKTsKKwkJZnNpZHZbMV0gPSBodG9ubChNSU5PUihkZXYpKTsKKwkJZnNpZHZbMl0gPSBpbm9fdF90b191MzIoaW5vKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTSURfRU5DT0RFX0RFVjoKKwkJZnNpZHZbMF0gPSBuZXdfZW5jb2RlX2RldihkZXYpOworCQlmc2lkdlsxXSA9IGlub190X3RvX3UzMihpbm8pOworCQlicmVhazsKKworCWNhc2UgRlNJRF9VVUlENF9JTlVNOgorCQkvKiA0IGJ5dGUgZnNpZCBhbmQgaW5vZGUgbnVtYmVyICovCisJCXVwID0gKHUzMiopdXVpZDsKKwkJZnNpZHZbMF0gPSBpbm9fdF90b191MzIoaW5vKTsKKwkJZnNpZHZbMV0gPSB1cFswXSBeIHVwWzFdIF4gdXBbMl0gXiB1cFszXTsKKwkJYnJlYWs7CisKKwljYXNlIEZTSURfVVVJRDg6CisJCS8qIDggYnl0ZSBmc2lkICAqLworCQl1cCA9ICh1MzIqKXV1aWQ7CisJCWZzaWR2WzBdID0gdXBbMF0gXiB1cFsyXTsKKwkJZnNpZHZbMV0gPSB1cFsxXSBeIHVwWzNdOworCQlicmVhazsKKworCWNhc2UgRlNJRF9VVUlEMTY6CisJCS8qIDE2IGJ5dGUgZnNpZCAtIE5GU3YzKyBvbmx5ICovCisJCW1lbWNweShmc2lkdiwgdXVpZCwgMTYpOworCQlicmVhazsKKworCWNhc2UgRlNJRF9VVUlEMTZfSU5VTToKKwkJLyogOCBieXRlIGlub2RlIGFuZCAxNiBieXRlIGZzaWQgKi8KKwkJKih1NjQqKWZzaWR2ID0gKHU2NClpbm87CisJCW1lbWNweShmc2lkdisyLCB1dWlkLCAxNik7CisJCWJyZWFrOworCWRlZmF1bHQ6IEJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQga2V5X2xlbihpbnQgdHlwZSkKK3sKKwlzd2l0Y2godHlwZSkgeworCWNhc2UgRlNJRF9ERVY6CQlyZXR1cm4gODsKKwljYXNlIEZTSURfTlVNOiAJCXJldHVybiA0OworCWNhc2UgRlNJRF9NQUpPUl9NSU5PUjoJcmV0dXJuIDEyOworCWNhc2UgRlNJRF9FTkNPREVfREVWOglyZXR1cm4gODsKKwljYXNlIEZTSURfVVVJRDRfSU5VTToJcmV0dXJuIDg7CisJY2FzZSBGU0lEX1VVSUQ4OglyZXR1cm4gODsKKwljYXNlIEZTSURfVVVJRDE2OglyZXR1cm4gMTY7CisJY2FzZSBGU0lEX1VVSUQxNl9JTlVNOglyZXR1cm4gMjQ7CisJZGVmYXVsdDogcmV0dXJuIDA7CisJfQorfQorCisvKgorICogU2hvcnRoYW5kIGZvciBkcHJpbnRrKCkncworICovCitleHRlcm4gY2hhciAqIFNWQ0ZIX2ZtdChzdHJ1Y3Qgc3ZjX2ZoICpmaHApOworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcworICovCitfX2JlMzIJZmhfdmVyaWZ5KHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIGludCwgaW50KTsKK19fYmUzMglmaF9jb21wb3NlKHN0cnVjdCBzdmNfZmggKiwgc3RydWN0IHN2Y19leHBvcnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qgc3ZjX2ZoICopOworX19iZTMyCWZoX3VwZGF0ZShzdHJ1Y3Qgc3ZjX2ZoICopOwordm9pZAlmaF9wdXQoc3RydWN0IHN2Y19maCAqKTsKKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IHN2Y19maCAqCitmaF9jb3B5KHN0cnVjdCBzdmNfZmggKmRzdCwgc3RydWN0IHN2Y19maCAqc3JjKQoreworCVdBUk5fT04oc3JjLT5maF9kZW50cnkgfHwgc3JjLT5maF9sb2NrZWQpOworCQkJCisJKmRzdCA9ICpzcmM7CisJcmV0dXJuIGRzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmaF9jb3B5X3NoYWxsb3coc3RydWN0IGtuZnNkX2ZoICpkc3QsIHN0cnVjdCBrbmZzZF9maCAqc3JjKQoreworCWRzdC0+Zmhfc2l6ZSA9IHNyYy0+Zmhfc2l6ZTsKKwltZW1jcHkoJmRzdC0+ZmhfYmFzZSwgJnNyYy0+ZmhfYmFzZSwgc3JjLT5maF9zaXplKTsKK30KKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IHN2Y19maCAqCitmaF9pbml0KHN0cnVjdCBzdmNfZmggKmZocCwgaW50IG1heHNpemUpCit7CisJbWVtc2V0KGZocCwgMCwgc2l6ZW9mKCpmaHApKTsKKwlmaHAtPmZoX21heHNpemUgPSBtYXhzaXplOworCXJldHVybiBmaHA7Cit9CisKKyNpZmRlZiBDT05GSUdfTkZTRF9WMworLyoKKyAqIEZpbGwgaW4gdGhlIHByZV9vcCBhdHRyIGZvciB0aGUgd2NjIGRhdGEKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitmaWxsX3ByZV93Y2Moc3RydWN0IHN2Y19maCAqZmhwKQoreworCXN0cnVjdCBpbm9kZSAgICAqaW5vZGU7CisKKwlpbm9kZSA9IGZocC0+ZmhfZGVudHJ5LT5kX2lub2RlOworCWlmICghZmhwLT5maF9wcmVfc2F2ZWQpIHsKKwkJZmhwLT5maF9wcmVfbXRpbWUgPSBpbm9kZS0+aV9tdGltZTsKKwkJZmhwLT5maF9wcmVfY3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKKwkJZmhwLT5maF9wcmVfc2l6ZSAgPSBpbm9kZS0+aV9zaXplOworCQlmaHAtPmZoX3ByZV9jaGFuZ2UgPSBpbm9kZS0+aV92ZXJzaW9uOworCQlmaHAtPmZoX3ByZV9zYXZlZCA9IDE7CisJfQorfQorCitleHRlcm4gdm9pZCBmaWxsX3Bvc3Rfd2NjKHN0cnVjdCBzdmNfZmggKik7CisjZWxzZQorI2RlZmluZQlmaWxsX3ByZV93Y2MoaWdub3JlZCkKKyNkZWZpbmUgZmlsbF9wb3N0X3djYyhub3R1c2VkKQorI2VuZGlmIC8qIENPTkZJR19ORlNEX1YzICovCisKKworLyoKKyAqIExvY2sgYSBmaWxlIGhhbmRsZS9pbm9kZQorICogTk9URTogYm90aCBmaF9sb2NrIGFuZCBmaF91bmxvY2sgYXJlIGRvbmUgImJ5IGhhbmQiIGluCisgKiB2ZnMuYzpuZnNkX3JlbmFtZSBhcyBpdCBuZWVkcyB0byBncmFiIDIgaV9tdXRleCdzIGF0IG9uY2UKKyAqIHNvLCBhbnkgY2hhbmdlcyBoZXJlIHNob3VsZCBiZSByZWZsZWN0ZWQgdGhlcmUuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitmaF9sb2NrX25lc3RlZChzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHVuc2lnbmVkIGludCBzdWJjbGFzcykKK3sKKwlzdHJ1Y3QgZGVudHJ5CSpkZW50cnkgPSBmaHAtPmZoX2RlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlOworCisJQlVHX09OKCFkZW50cnkpOworCisJaWYgKGZocC0+ZmhfbG9ja2VkKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZoX2xvY2s6ICVzLyVzIGFscmVhZHkgbG9ja2VkIVxuIiwKKwkJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgc3ViY2xhc3MpOworCWZpbGxfcHJlX3djYyhmaHApOworCWZocC0+ZmhfbG9ja2VkID0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmaF9sb2NrKHN0cnVjdCBzdmNfZmggKmZocCkKK3sKKwlmaF9sb2NrX25lc3RlZChmaHAsIElfTVVURVhfTk9STUFMKTsKK30KKworLyoKKyAqIFVubG9jayBhIGZpbGUgaGFuZGxlL2lub2RlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZmhfdW5sb2NrKHN0cnVjdCBzdmNfZmggKmZocCkKK3sKKwlCVUdfT04oIWZocC0+ZmhfZGVudHJ5KTsKKworCWlmIChmaHAtPmZoX2xvY2tlZCkgeworCQlmaWxsX3Bvc3Rfd2NjKGZocCk7CisJCW11dGV4X3VubG9jaygmZmhwLT5maF9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCQlmaHAtPmZoX2xvY2tlZCA9IDA7CisJfQorfQorCisjZW5kaWYgLyogX0xJTlVYX05GU0RfRkhfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzcHJvYy5jIGIvZnMvbmZzZC9uZnNwcm9jLmMKaW5kZXggMGViOWM4Mi4uYTA0N2FkNiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnNwcm9jLmMKQEAgLTEsMjkgKzEsMTQgQEAKIC8qCi0gKiBuZnNwcm9jMi5jCVByb2Nlc3MgdmVyc2lvbiAyIE5GUyByZXF1ZXN0cy4KLSAqIGxpbnV4L2ZzL25mc2QvbmZzMnByb2MuYwotICogCiAgKiBQcm9jZXNzIHZlcnNpb24gMiBORlMgcmVxdWVzdHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIuaD4KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInhkci5oIgorI2luY2x1ZGUgInZmcy5oIgogCiB0eXBlZGVmIHN0cnVjdCBzdmNfcnFzdAlzdmNfcnFzdDsKIHR5cGVkZWYgc3RydWN0IHN2Y19idWYJc3ZjX2J1ZjsKQEAgLTc1OCw2ICs3NDMsNyBAQAogCQl7IG5mc2Vycl9pbywgLUVUWFRCU1kgfSwKIAkJeyBuZnNlcnJfbm90c3VwcCwgLUVPUE5PVFNVUFAgfSwKIAkJeyBuZnNlcnJfdG9vc21hbGwsIC1FVE9PU01BTEwgfSwKKwkJeyBuZnNlcnJfc2VydmVyZmF1bHQsIC1FU0VSVkVSRkFVTFQgfSwKIAl9OwogCWludAlpOwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3N2Yy5jIGIvZnMvbmZzZC9uZnNzdmMuYwppbmRleCA2N2VhODNlLi4xNzE2OTllIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3N2Yy5jCisrKyBiL2ZzL25mc2QvbmZzc3ZjLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvZnMvbmZzZC9uZnNzdmMuYwotICoKICAqIENlbnRyYWwgcHJvY2Vzc2luZyBmb3IgbmZzZC4KICAqCiAgKiBBdXRob3JzOglPbGFmIEtpcmNoIChva2lyQG1vbmFkLnN3Yi5kZSkKQEAgLTgsMzMgKzYsMTkgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3Zjc29jay5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3RhdHMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2QvYmluZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibmZzZC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidmZzLmgiCiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQlORlNEREJHX1NWQwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3hkci5jIGIvZnMvbmZzZC9uZnN4ZHIuYwppbmRleCBhZmQwOGUyLi40Y2UwMDVkIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3hkci5jCisrKyBiL2ZzL25mc2QvbmZzeGRyLmMKQEAgLTEsMjAgKzEsMTAgQEAKIC8qCi0gKiBsaW51eC9mcy9uZnNkL25mc3hkci5jCi0gKgogICogWERSIHN1cHBvcnQgZm9yIG5mc2QKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L25mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgInhkci5oIgogI2luY2x1ZGUgImF1dGguaCIKIAogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZCQlORlNEREJHX1hEUgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9zdGF0ZS5oIGIvZnMvbmZzZC9zdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZmVhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnNkL3N0YXRlLmgKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIEtlbmRyaWNrIFNtaXRoIDxrbXNtaXRoQHVtaWNoLmVkdT4KKyAqICBBbmR5IEFkYW1zb24gPGFuZHJvc0B1bWljaC5lZHU+CisgKiAgCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9ORlNENF9TVEFURV9ICisjZGVmaW5lIF9ORlNENF9TVEFURV9ICisKKyNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2ZoLmg+CisjaW5jbHVkZSAibmZzZmguaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiAgICAgICAgICAgICBjbF9ib290OworCXUzMiAgICAgICAgICAgICBjbF9pZDsKK30gY2xpZW50aWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiAgICAgICAgICAgICBzb19ib290OworCXUzMiAgICAgICAgICAgICBzb19zdGF0ZW93bmVyaWQ7CisJdTMyICAgICAgICAgICAgIHNvX2ZpbGVpZDsKK30gc3RhdGVpZF9vcGFxdWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiAgICAgICAgICAgICAgICAgICAgIHNpX2dlbmVyYXRpb247CisJc3RhdGVpZF9vcGFxdWVfdCAgICAgICAgc2lfb3BhcXVlOworfSBzdGF0ZWlkX3Q7CisjZGVmaW5lIHNpX2Jvb3QgICAgICAgICAgIHNpX29wYXF1ZS5zb19ib290CisjZGVmaW5lIHNpX3N0YXRlb3duZXJpZCAgIHNpX29wYXF1ZS5zb19zdGF0ZW93bmVyaWQKKyNkZWZpbmUgc2lfZmlsZWlkICAgICAgICAgc2lfb3BhcXVlLnNvX2ZpbGVpZAorCisjZGVmaW5lIFNUQVRFSURfRk1UCSIoJTA4eC8lMDh4LyUwOHgvJTA4eCkiCisjZGVmaW5lIFNUQVRFSURfVkFMKHMpIFwKKwkocyktPnNpX2Jvb3QsIFwKKwkocyktPnNpX3N0YXRlb3duZXJpZCwgXAorCShzKS0+c2lfZmlsZWlkLCBcCisJKHMpLT5zaV9nZW5lcmF0aW9uCisKK3N0cnVjdCBuZnNkNF9jYl9zZXF1ZW5jZSB7CisJLyogYXJncy9yZXMgKi8KKwl1MzIJCQljYnNfbWlub3J2ZXJzaW9uOworCXN0cnVjdCBuZnM0X2NsaWVudAkqY2JzX2NscDsKK307CisKK3N0cnVjdCBuZnM0X2RlbGVnYXRpb24geworCXN0cnVjdCBsaXN0X2hlYWQJZGxfcGVyZmlsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRsX3BlcmNsbnQ7CisJc3RydWN0IGxpc3RfaGVhZAlkbF9yZWNhbGxfbHJ1OyAgLyogZGVsZWdhdGlvbiByZWNhbGxlZCAqLworCWF0b21pY190CQlkbF9jb3VudDsgICAgICAgLyogcmVmIGNvdW50ICovCisJc3RydWN0IG5mczRfY2xpZW50CSpkbF9jbGllbnQ7CisJc3RydWN0IG5mczRfZmlsZQkqZGxfZmlsZTsKKwlzdHJ1Y3QgZmlsZV9sb2NrCSpkbF9mbG9jazsKKwlzdHJ1Y3QgZmlsZQkJKmRsX3Zmc19maWxlOworCXUzMgkJCWRsX3R5cGU7CisJdGltZV90CQkJZGxfdGltZTsKKy8qIEZvciByZWNhbGw6ICovCisJdTMyCQkJZGxfaWRlbnQ7CisJc3RhdGVpZF90CQlkbF9zdGF0ZWlkOworCXN0cnVjdCBrbmZzZF9maAkJZGxfZmg7CisJaW50CQkJZGxfcmV0cmllczsKK307CisKKy8qIGNsaWVudCBkZWxlZ2F0aW9uIGNhbGxiYWNrIGluZm8gKi8KK3N0cnVjdCBuZnM0X2NiX2Nvbm4geworCS8qIFNFVENMSUVOVElEIGluZm8gKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQljYl9hZGRyOworCXNpemVfdAkJCWNiX2FkZHJsZW47CisJdTMyICAgICAgICAgICAgICAgICAgICAgY2JfcHJvZzsKKwl1MzIJCQljYl9taW5vcnZlcnNpb247CisJdTMyICAgICAgICAgICAgICAgICAgICAgY2JfaWRlbnQ7CS8qIG1pbm9ydmVyc2lvbiAwIG9ubHkgKi8KKwkvKiBSUEMgY2xpZW50IGluZm8gKi8KKwlhdG9taWNfdAkJY2Jfc2V0OyAgICAgLyogc3VjY2Vzc2Z1bCBDQl9OVUxMIGNhbGwgKi8KKwlzdHJ1Y3QgcnBjX2NsbnQgKiAgICAgICBjYl9jbGllbnQ7Cit9OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBzbG90cyBwZXIgc2Vzc2lvbi4gMTYwIGlzIHVzZWZ1bCBmb3IgbG9uZyBoYXVsIFRDUCAqLworI2RlZmluZSBORlNEX01BWF9TTE9UU19QRVJfU0VTU0lPTiAgICAgMTYwCisvKiBNYXhpbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHBlciBzZXNzaW9uIGNvbXBvdW5kICovCisjZGVmaW5lIE5GU0RfTUFYX09QU19QRVJfQ09NUE9VTkQJMTYKKy8qIE1heGltdW0gIHNlc3Npb24gcGVyIHNsb3QgY2FjaGUgc2l6ZSAqLworI2RlZmluZSBORlNEX1NMT1RfQ0FDSEVfU0laRQkJMTAyNAorLyogTWF4aW11bSBudW1iZXIgb2YgTkZTRF9TTE9UX0NBQ0hFX1NJWkUgc2xvdHMgcGVyIHNlc3Npb24gKi8KKyNkZWZpbmUgTkZTRF9DQUNIRV9TSVpFX1NMT1RTX1BFUl9TRVNTSU9OCTMyCisjZGVmaW5lIE5GU0RfTUFYX01FTV9QRVJfU0VTU0lPTiAgXAorCQkoTkZTRF9DQUNIRV9TSVpFX1NMT1RTX1BFUl9TRVNTSU9OICogTkZTRF9TTE9UX0NBQ0hFX1NJWkUpCisKK3N0cnVjdCBuZnNkNF9zbG90IHsKKwlib29sCXNsX2ludXNlOworCWJvb2wJc2xfY2FjaGV0aGlzOworCXUxNglzbF9vcGNudDsKKwl1MzIJc2xfc2VxaWQ7CisJX19iZTMyCXNsX3N0YXR1czsKKwl1MzIJc2xfZGF0YWxlbjsKKwljaGFyCXNsX2RhdGFbXTsKK307CisKK3N0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIHsKKwl1MzIJCWhlYWRlcnBhZHN6OworCXUzMgkJbWF4cmVxX3N6OworCXUzMgkJbWF4cmVzcF9zejsKKwl1MzIJCW1heHJlc3BfY2FjaGVkOworCXUzMgkJbWF4b3BzOworCXUzMgkJbWF4cmVxczsKKwl1MzIJCW5yX3JkbWFfYXR0cnM7CisJdTMyCQlyZG1hX2F0dHJzOworfTsKKworc3RydWN0IG5mc2Q0X2NyZWF0ZV9zZXNzaW9uIHsKKwljbGllbnRpZF90CQkJY2xpZW50aWQ7CisJc3RydWN0IG5mczRfc2Vzc2lvbmlkCQlzZXNzaW9uaWQ7CisJdTMyCQkJCXNlcWlkOworCXUzMgkJCQlmbGFnczsKKwlzdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycwlmb3JlX2NoYW5uZWw7CisJc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMJYmFja19jaGFubmVsOworCXUzMgkJCQljYWxsYmFja19wcm9nOworCXUzMgkJCQl1aWQ7CisJdTMyCQkJCWdpZDsKK307CisKKy8qIFRoZSBzaW5nbGUgc2xvdCBjbGllbnRpZCBjYWNoZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBuZnNkNF9jbGlkX3Nsb3QgeworCXUzMgkJCQlzbF9zZXFpZDsKKwlfX2JlMzIJCQkJc2xfc3RhdHVzOworCXN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbglzbF9jcl9zZXM7Cit9OworCitzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiB7CisJc3RydWN0IGtyZWYJCXNlX3JlZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNlX2hhc2g7CS8qIGhhc2ggYnkgc2Vzc2lvbmlkICovCisJc3RydWN0IGxpc3RfaGVhZAlzZV9wZXJjbG50OworCXUzMgkJCXNlX2ZsYWdzOworCXN0cnVjdCBuZnM0X2NsaWVudAkqc2VfY2xpZW50OwkvKiBmb3IgZXhwaXJlX2NsaWVudCAqLworCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAlzZV9zZXNzaW9uaWQ7CisJc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgc2VfZmNoYW5uZWw7CisJc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMgc2VfYmNoYW5uZWw7CisJc3RydWN0IG5mc2Q0X3Nsb3QJKnNlX3Nsb3RzW107CS8qIGZvcndhcmQgY2hhbm5lbCBzbG90cyAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkCituZnNkNF9wdXRfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqc2VzKQoreworCWV4dGVybiB2b2lkIGZyZWVfc2Vzc2lvbihzdHJ1Y3Qga3JlZiAqa3JlZik7CisJa3JlZl9wdXQoJnNlcy0+c2VfcmVmLCBmcmVlX3Nlc3Npb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25mc2Q0X2dldF9zZXNzaW9uKHN0cnVjdCBuZnNkNF9zZXNzaW9uICpzZXMpCit7CisJa3JlZl9nZXQoJnNlcy0+c2VfcmVmKTsKK30KKworLyogZm9ybWF0dGVkIGNvbnRlbnRzIG9mIG5mczRfc2Vzc2lvbmlkICovCitzdHJ1Y3QgbmZzZDRfc2Vzc2lvbmlkIHsKKwljbGllbnRpZF90CWNsaWVudGlkOworCXUzMgkJc2VxdWVuY2U7CisJdTMyCQlyZXNlcnZlZDsKK307CisKKyNkZWZpbmUgSEVYRElSX0xFTiAgICAgMzMgLyogaGV4IHZlcnNpb24gb2YgMTYgYnl0ZSBtZDUgb2YgY2xfbmFtZSBwbHVzICdcMCcgKi8KKworLyoKKyAqIHN0cnVjdCBuZnM0X2NsaWVudCAtIG9uZSBwZXIgY2xpZW50LiAgQ2xpZW50aWRzIGxpdmUgaGVyZS4KKyAqIAlvIEVhY2ggbmZzNF9jbGllbnQgaXMgaGFzaGVkIGJ5IGNsaWVudGlkLgorICoKKyAqIAlvIEVhY2ggbmZzNF9jbGllbnRzIGlzIGFsc28gaGFzaGVkIGJ5IG5hbWUgCisgKiAJICAodGhlIG9wYXF1ZSBxdWFudGl0eSBpbml0aWFsbHkgc2VudCBieSB0aGUgY2xpZW50IHRvIGlkZW50aWZ5IGl0c2VsZikuCisgKiAJICAKKyAqCW8gY2xfcGVyY2xpZW50IGxpc3QgaXMgdXNlZCB0byBlbnN1cmUgbm8gZGFuZ2xpbmcgc3RhdGVvd25lciByZWZlcmVuY2VzCisgKgkgIHdoZW4gd2UgZXhwaXJlIHRoZSBuZnM0X2NsaWVudAorICovCitzdHJ1Y3QgbmZzNF9jbGllbnQgeworCXN0cnVjdCBsaXN0X2hlYWQJY2xfaWRoYXNoOyAJLyogaGFzaCBieSBjbF9jbGllbnRpZC5pZCAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xfc3RyaGFzaDsgCS8qIGhhc2ggYnkgY2xfbmFtZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xfb3Blbm93bmVyczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsX2RlbGVnYXRpb25zOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGNsX2xydTsgICAgICAgICAvKiB0YWlsIHF1ZXVlICovCisJc3RydWN0IHhkcl9uZXRvYmoJY2xfbmFtZTsgCS8qIGlkIGdlbmVyYXRlZCBieSBjbGllbnQgKi8KKwljaGFyICAgICAgICAgICAgICAgICAgICBjbF9yZWNkaXJbSEVYRElSX0xFTl07IC8qIHJlY292ZXJ5IGRpciAqLworCW5mczRfdmVyaWZpZXIJCWNsX3ZlcmlmaWVyOyAJLyogZ2VuZXJhdGVkIGJ5IGNsaWVudCAqLworCXRpbWVfdCAgICAgICAgICAgICAgICAgIGNsX3RpbWU7ICAgICAgICAvKiB0aW1lIG9mIGxhc3QgbGVhc2UgcmVuZXdhbCAqLworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWNsX2FkZHI7IAkvKiBjbGllbnQgaXBhZGRyZXNzICovCisJdTMyCQkJY2xfZmxhdm9yOwkvKiBzZXRjbGllbnRpZCBwc2V1ZG9mbGF2b3IgKi8KKwljaGFyCQkJKmNsX3ByaW5jaXBhbDsJLyogc2V0Y2xpZW50aWQgcHJpbmNpcGFsIG5hbWUgKi8KKwlzdHJ1Y3Qgc3ZjX2NyZWQJCWNsX2NyZWQ7IAkvKiBzZXRjbGllbnRpZCBwcmluY2lwYWwgKi8KKwljbGllbnRpZF90CQljbF9jbGllbnRpZDsJLyogZ2VuZXJhdGVkIGJ5IHNlcnZlciAqLworCW5mczRfdmVyaWZpZXIJCWNsX2NvbmZpcm07CS8qIGdlbmVyYXRlZCBieSBzZXJ2ZXIgKi8KKwlzdHJ1Y3QgbmZzNF9jYl9jb25uCWNsX2NiX2Nvbm47ICAgICAvKiBjYWxsYmFjayBpbmZvICovCisJYXRvbWljX3QJCWNsX2NvdW50OwkvKiByZWYgY291bnQgKi8KKwl1MzIJCQljbF9maXJzdHN0YXRlOwkvKiByZWNvdmVyeSBkaXIgY3JlYXRpb24gKi8KKworCS8qIGZvciBuZnM0MSAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xfc2Vzc2lvbnM7CisJc3RydWN0IG5mc2Q0X2NsaWRfc2xvdAljbF9jc19zbG90OwkvKiBjcmVhdGVfc2Vzc2lvbiBzbG90ICovCisJdTMyCQkJY2xfZXhjaGFuZ2VfZmxhZ3M7CisJc3RydWN0IG5mczRfc2Vzc2lvbmlkCWNsX3Nlc3Npb25pZDsKKworCS8qIGZvciBuZnM0MSBjYWxsYmFja3MgKi8KKwkvKiBXZSBjdXJyZW50bHkgc3VwcG9ydCBhIHNpbmdsZSBiYWNrIGNoYW5uZWwgd2l0aCBhIHNpbmdsZSBzbG90ICovCisJdW5zaWduZWQgbG9uZwkJY2xfY2Jfc2xvdF9idXN5OworCXUzMgkJCWNsX2NiX3NlcV9ucjsKKwlzdHJ1Y3Qgc3ZjX3hwcnQJCSpjbF9jYl94cHJ0OwkvKiA0LjEgY2FsbGJhY2sgdHJhbnNwb3J0ICovCisJc3RydWN0IHJwY193YWl0X3F1ZXVlCWNsX2NiX3dhaXRxOwkvKiBiYWNrY2hhbm5lbCBjYWxsZXJzIG1heSAqLworCQkJCQkJLyogd2FpdCBoZXJlIGZvciBzbG90cyAqLworfTsKKworLyogc3RydWN0IG5mczRfY2xpZW50X3Jlc2V0CisgKiBvbmUgcGVyIG9sZCBjbGllbnQuIFBvcHVsYXRlcyByZXNldF9zdHJfaGFzaHRibC4gRmlsbGVkIGZyb20gY29uZl9pZF9oYXNodGJsCisgKiB1cG9uIGxlYXNlIHJlc2V0LCBvciBmcm9tIHVwY2FsbCB0byBzdGF0ZV9kYWVtb24gKHRvIHJlYWQgaW4gc3RhdGUKKyAqIGZyb20gbm9uLXZvbGl0aWxlIHN0b3JhZ2UpIHVwb24gcmVib290LgorICovCitzdHJ1Y3QgbmZzNF9jbGllbnRfcmVjbGFpbSB7CisJc3RydWN0IGxpc3RfaGVhZAljcl9zdHJoYXNoOwkvKiBoYXNoIGJ5IGNyX25hbWUgKi8KKwljaGFyCQkJY3JfcmVjZGlyW0hFWERJUl9MRU5dOyAvKiByZWNvdmVyIGRpciAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkCit1cGRhdGVfc3RhdGVpZChzdGF0ZWlkX3QgKnN0YXRlaWQpCit7CisJc3RhdGVpZC0+c2lfZ2VuZXJhdGlvbisrOworfQorCisvKiBBIHJlYXNvbmFibGUgdmFsdWUgZm9yIFJFUExBWV9JU0laRSB3YXMgZXN0aW1hdGVkIGFzIGZvbGxvd3M6ICAKKyAqIFRoZSBPUEVOIHJlc3BvbnNlLCB0eXBpY2FsbHkgdGhlIGxhcmdlc3QsIHJlcXVpcmVzIAorICogICA0KHN0YXR1cykgKyA4KHN0YXRlaWQpICsgMjAoY2hhbmdlaW5mbykgKyA0KHJmbGFncykgKyAgOCh2ZXJpZmllcikgKyAKKyAqICAgNChkZWxlZy4gdHlwZSkgKyA4KGRlbGVnLiBzdGF0ZWlkKSArIDQoZGVsZWcuIHJlY2FsbCBmbGFnKSArIAorICogICAyMChkZWxlZy4gc3BhY2UgbGltaXQpICsgfjMyKGRlbGVnLiBhY2UpID0gMTEyIGJ5dGVzIAorICovCisKKyNkZWZpbmUgTkZTRDRfUkVQTEFZX0lTSVpFICAgICAgIDExMiAKKworLyoKKyAqIFJlcGxheSBidWZmZXIsIHdoZXJlIHRoZSByZXN1bHQgb2YgdGhlIGxhc3Qgc2VxaWQtbXV0YXRpbmcgb3BlcmF0aW9uIAorICogaXMgY2FjaGVkLiAKKyAqLworc3RydWN0IG5mczRfcmVwbGF5IHsKKwlfX2JlMzIJCQlycF9zdGF0dXM7CisJdW5zaWduZWQgaW50CQlycF9idWZsZW47CisJY2hhcgkJCSpycF9idWY7CisJdW5zaWduZWQJCWludHJwX2FsbG9jYXRlZDsKKwlzdHJ1Y3Qga25mc2RfZmgJCXJwX29wZW5maDsKKwljaGFyCQkJcnBfaWJ1ZltORlNENF9SRVBMQVlfSVNJWkVdOworfTsKKworLyoKKyogbmZzNF9zdGF0ZW93bmVyIGNhbiBlaXRoZXIgYmUgYW4gb3Blbl9vd25lciwgb3IgYSBsb2NrX293bmVyCisqCisqICAgIHNvX2lkaGFzaDogIHN0YXRlaWRfaGFzaHRibFtdIGZvciBvcGVuIG93bmVyLCBsb2Nrc3RhdGVpZF9oYXNodGJsW10KKyogICAgICAgICBmb3IgbG9ja19vd25lcgorKiAgICBzb19zdHJoYXNoOiBvd25lcnN0cl9oYXNodGJsW10gZm9yIG9wZW5fb3duZXIsIGxvY2tfb3duZXJzdHJfaGFzaHRibFtdCisqICAgICAgICAgZm9yIGxvY2tfb3duZXIKKyogICAgc29fcGVyY2xpZW50OiBuZnM0X2NsaWVudC0+Y2xfcGVyY2xpZW50IGVudHJ5IC0gdXNlZCB3aGVuIG5mczRfY2xpZW50CisqICAgICAgICAgc3RydWN0IGlzIHJlYXBlZC4KKyogICAgc29fcGVyZmlsZXN0YXRlOiBoZWFkcyB0aGUgbGlzdCBvZiBuZnM0X3N0YXRlaWQgKGVpdGhlciBvcGVuIG9yIGxvY2spIAorKiAgICAgICAgIGFuZCBpcyB1c2VkIHRvIGVuc3VyZSBubyBkYW5nbGluZyBuZnM0X3N0YXRlaWQgcmVmZXJlbmNlcyB3aGVuIHdlIAorKiAgICAgICAgIHJlbGVhc2UgYSBzdGF0ZW93bmVyLgorKiAgICBzb19wZXJsb2Nrb3duZXI6IChvcGVuKSBuZnM0X3N0YXRlaWQtPnN0X3BlcmxvY2tvd25lciBlbnRyeSAtIHVzZWQgd2hlbgorKiAgICAgICAgIGNsb3NlIGlzIGNhbGxlZCB0byByZWFwIGFzc29jaWF0ZWQgYnl0ZS1yYW5nZSBsb2NrcworKiAgICBzb19jbG9zZV9scnU6IChvcGVuKSBzdGF0ZW93bmVyIGlzIHBsYWNlZCBvbiB0aGlzIGxpc3QgaW5zdGVhZCBvZiBiZWluZworKiAgICAgICAgIHJlYXBlZCAod2hlbiBzb19wZXJmaWxlc3RhdGUgaXMgZW1wdHkpIHRvIGhvbGQgdGhlIGxhc3QgY2xvc2UgcmVwbGF5LgorKiAgICAgICAgIHJlYXBlZCBieSBsYXVuZHJhbWF0IHRocmVhZCBhZnRlciBsZWFzZSBwZXJpb2QuCisqLworc3RydWN0IG5mczRfc3RhdGVvd25lciB7CisJc3RydWN0IGtyZWYJCXNvX3JlZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzb19pZGhhc2g7ICAgLyogaGFzaCBieSBzb19pZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNvX3N0cmhhc2g7ICAgLyogaGFzaCBieSBvcF9uYW1lICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgc29fcGVyY2xpZW50OworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNvX3N0YXRlaWRzOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNvX3BlcnN0YXRlaWQ7IC8qIGZvciBsb2Nrb3duZXJzIG9ubHkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXNvX2Nsb3NlX2xydTsgLyogdGFpbCBxdWV1ZSAqLworCXRpbWVfdAkJCXNvX3RpbWU7IC8qIHRpbWUgb2YgcGxhY2VtZW50IG9uIHNvX2Nsb3NlX2xydSAqLworCWludAkJCXNvX2lzX29wZW5fb3duZXI7IC8qIDE9b3Blbm93bmVyLDA9bG9ja293bmVyICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgc29faWQ7CisJc3RydWN0IG5mczRfY2xpZW50ICogICAgc29fY2xpZW50OworCS8qIGFmdGVyIGluY3JlbWVudCBpbiBFTkNPREVfU0VRSURfT1BfVEFJTCwgcmVwcmVzZW50cyB0aGUgbmV4dAorCSAqIHNlcXVlbmNlIGlkIGV4cGVjdGVkIGZyb20gdGhlIGNsaWVudDogKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICBzb19zZXFpZDsKKwlzdHJ1Y3QgeGRyX25ldG9iaiAgICAgICBzb19vd25lcjsgICAgIC8qIG9wZW4gb3duZXIgbmFtZSAqLworCWludCAgICAgICAgICAgICAgICAgICAgIHNvX2NvbmZpcm1lZDsgLyogc3VjY2Vzc2Z1bCBPUEVOX0NPTkZJUk0/ICovCisJc3RydWN0IG5mczRfcmVwbGF5CXNvX3JlcGxheTsKK307CisKKy8qCisqICBuZnM0X2ZpbGU6IGEgZmlsZSBvcGVuZWQgYnkgc29tZSBudW1iZXIgb2YgKG9wZW4pIG5mczRfc3RhdGVvd25lcnMuCisqICAgIG8gZmlfcGVyZmlsZSBsaXN0IGlzIHVzZWQgdG8gc2VhcmNoIGZvciBjb25mbGljdGluZyAKKyogICAgICBzaGFyZV9hY2Nlcywgc2hhcmVfZGVueSBvbiB0aGUgZmlsZS4KKyovCitzdHJ1Y3QgbmZzNF9maWxlIHsKKwlhdG9taWNfdAkJZmlfcmVmOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZpX2hhc2g7ICAgIC8qIGhhc2ggYnkgInN0cnVjdCBpbm9kZSAqIiAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZpX3N0YXRlaWRzOworCXN0cnVjdCBsaXN0X2hlYWQJZmlfZGVsZWdhdGlvbnM7CisJc3RydWN0IGlub2RlCQkqZmlfaW5vZGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgZmlfaWQ7ICAgICAgLyogdXNlZCB3aXRoIHN0YXRlb3duZXItPnNvX2lkIAorCQkJCQkgICAgICogZm9yIHN0YXRlaWRfaGFzaHRibCBoYXNoICovCisJYm9vbAkJCWZpX2hhZF9jb25mbGljdDsKK307CisKKy8qCisqIG5mczRfc3RhdGVpZCBjYW4gZWl0aGVyIGJlIGFuIG9wZW4gc3RhdGVpZCBvciAoZXZlbnR1YWxseSkgYSBsb2NrIHN0YXRlaWQKKyoKKyogKG9wZW4pbmZzNF9zdGF0ZWlkOiBvbmUgcGVyIChvcGVuKW5mczRfc3RhdGVvd25lciwgbmZzNF9maWxlCisqCisqIAlzdF9oYXNoOiBzdGF0ZWlkX2hhc2h0YmxbXSBlbnRyeSBvciBsb2Nrc3RhdGVpZF9oYXNodGJsIGVudHJ5CisqIAlzdF9wZXJmaWxlOiBmaWxlX2hhc2h0YmxbXSBlbnRyeS4KKyogCXN0X3BlcmZpbGVfc3RhdGU6IG5mczRfc3RhdGVvd25lci0+c29fcGVyZmlsZXN0YXRlCisqICAgICAgIHN0X3BlcmxvY2tvd25lcjogKG9wZW4gc3RhdGVpZCkgbGlzdCBvZiBsb2NrIG5mczRfc3RhdGVvd25lcnMKKyogCXN0X2FjY2Vzc19ibWFwOiB1c2VkIG9ubHkgZm9yIG9wZW4gc3RhdGVpZAorKiAJc3RfZGVueV9ibWFwOiB1c2VkIG9ubHkgZm9yIG9wZW4gc3RhdGVpZAorKglzdF9vcGVuc3RwOiBvcGVuIHN0YXRlaWQgbG9jayBzdGF0ZWlkIHdhcyBkZXJpdmVkIGZyb20KKyoKKyogWFhYOiBvcGVuIHN0YXRlaWRzIGFuZCBsb2NrIHN0YXRlaWRzIGhhdmUgZGl2ZXJnZWQgc3VmZmljaWVudGx5IHRoYXQKKyogd2Ugc2hvdWxkIGNvbnNpZGVyIGRlZmluaW5nIHNlcGFyYXRlIHN0cnVjdHMgZm9yIHRoZSB0d28gY2FzZXMuCisqLworCitzdHJ1Y3QgbmZzNF9zdGF0ZWlkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBzdF9oYXNoOyAKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBzdF9wZXJmaWxlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIHN0X3BlcnN0YXRlb3duZXI7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgc3RfbG9ja293bmVyczsKKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICAgICAgKiBzdF9zdGF0ZW93bmVyOworCXN0cnVjdCBuZnM0X2ZpbGUgICAgICAgICAgICAqIHN0X2ZpbGU7CisJc3RhdGVpZF90ICAgICAgICAgICAgICAgICAgICAgc3Rfc3RhdGVpZDsKKwlzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICAgKiBzdF92ZnNfZmlsZTsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBzdF9hY2Nlc3NfYm1hcDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBzdF9kZW55X2JtYXA7CisJc3RydWN0IG5mczRfc3RhdGVpZCAgICAgICAgICogc3Rfb3BlbnN0cDsKK307CisKKy8qIGZsYWdzIGZvciBwcmVwcm9jZXNzX3NlcWlkX29wKCkgKi8KKyNkZWZpbmUgSEFTX1NFU1NJT04gICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDT05GSVJNICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE9QRU5fU1RBVEUgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTE9DS19TVEFURSAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRF9TVEFURQkgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgV1JfU1RBVEUJICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENMT1NFX1NUQVRFICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworI2RlZmluZSBzZXFpZF9tdXRhdGluZ19lcnIoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgXAorCSgoKGVycikgIT0gbmZzZXJyX3N0YWxlX2NsaWVudGlkKSAmJiAgICBcCisJKChlcnIpICE9IG5mc2Vycl9iYWRfc2VxaWQpICYmICAgICAgICAgIFwKKwkoKGVycikgIT0gbmZzZXJyX3N0YWxlX3N0YXRlaWQpICYmICAgICAgXAorCSgoZXJyKSAhPSBuZnNlcnJfYmFkX3N0YXRlaWQpKQorCitzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGU7CisKK2V4dGVybiBfX2JlMzIgbmZzNF9wcmVwcm9jZXNzX3N0YXRlaWRfb3Aoc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJCXN0YXRlaWRfdCAqc3RhdGVpZCwgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKmZpbHApOworZXh0ZXJuIHZvaWQgbmZzNF9sb2NrX3N0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgbmZzNF91bmxvY2tfc3RhdGUodm9pZCk7CitleHRlcm4gaW50IG5mczRfaW5fZ3JhY2Uodm9pZCk7CitleHRlcm4gX19iZTMyIG5mczRfY2hlY2tfb3Blbl9yZWNsYWltKGNsaWVudGlkX3QgKmNsaWQpOworZXh0ZXJuIHZvaWQgcHV0X25mczRfY2xpZW50KHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKTsKK2V4dGVybiB2b2lkIG5mczRfZnJlZV9zdGF0ZW93bmVyKHN0cnVjdCBrcmVmICprcmVmKTsKK2V4dGVybiBpbnQgc2V0X2NhbGxiYWNrX2NyZWQodm9pZCk7CitleHRlcm4gdm9pZCBuZnNkNF9wcm9iZV9jYWxsYmFjayhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7CitleHRlcm4gdm9pZCBuZnNkNF9jYl9yZWNhbGwoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApOworZXh0ZXJuIHZvaWQgbmZzNF9wdXRfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCk7CitleHRlcm4gX19iZTMyIG5mczRfbWFrZV9yZWNfY2xpZG5hbWUoY2hhciAqY2xpZG5hbWUsIHN0cnVjdCB4ZHJfbmV0b2JqICpjbG5hbWUpOworZXh0ZXJuIHZvaWQgbmZzZDRfaW5pdF9yZWNkaXIoY2hhciAqcmVjZGlyX25hbWUpOworZXh0ZXJuIGludCBuZnNkNF9yZWNkaXJfbG9hZCh2b2lkKTsKK2V4dGVybiB2b2lkIG5mc2Q0X3NodXRkb3duX3JlY2Rpcih2b2lkKTsKK2V4dGVybiBpbnQgbmZzNF9jbGllbnRfdG9fcmVjbGFpbShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgbmZzNF9oYXNfcmVjbGFpbWVkX3N0YXRlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgdXNlX2V4Y2hhbmdlX2lkKTsKK2V4dGVybiB2b2lkIG5mc2Q0X3JlY2Rpcl9wdXJnZV9vbGQodm9pZCk7CitleHRlcm4gaW50IG5mc2Q0X2NyZWF0ZV9jbGlkX2RpcihzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7CitleHRlcm4gdm9pZCBuZnNkNF9yZW1vdmVfY2xpZF9kaXIoc3RydWN0IG5mczRfY2xpZW50ICpjbHApOworCitzdGF0aWMgaW5saW5lIHZvaWQKK25mczRfcHV0X3N0YXRlb3duZXIoc3RydWN0IG5mczRfc3RhdGVvd25lciAqc28pCit7CisJa3JlZl9wdXQoJnNvLT5zb19yZWYsIG5mczRfZnJlZV9zdGF0ZW93bmVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCituZnM0X2dldF9zdGF0ZW93bmVyKHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvKQoreworCWtyZWZfZ2V0KCZzby0+c29fcmVmKTsKK30KKworI2VuZGlmICAgLyogTkZTRDRfU1RBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9zdGF0cy5jIGIvZnMvbmZzZC9zdGF0cy5jCmluZGV4IDcxOTQ0Y2QuLjUyMzJkM2UgMTAwNjQ0Ci0tLSBhL2ZzL25mc2Qvc3RhdHMuYworKysgYi9mcy9uZnNkL3N0YXRzLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvZnMvbmZzZC9zdGF0cy5jCi0gKgogICogcHJvY2ZzLWJhc2VkIHVzZXIgYWNjZXNzIHRvIGtuZnNkIHN0YXRpc3RpY3MKICAqCiAgKiAvcHJvYy9uZXQvcnBjL25mc2QKQEAgLTIzLDE4ICsyMSwxMyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3RhdHMuaD4KIAorI2luY2x1ZGUgIm5mc2QuaCIKKwogc3RydWN0IG5mc2Rfc3RhdHMJbmZzZHN0YXRzOwogc3RydWN0IHN2Y19zdGF0CQluZnNkX3N2Y3N0YXRzID0gewogCS5wcm9ncmFtCT0gJm5mc2RfcHJvZ3JhbSwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IGEyOTNmMDIuLjdjMmUzMzcgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMSw3ICsxLDUgQEAKICNkZWZpbmUgTVNORlMJLyogSEFDSyBIQUNLICovCiAvKgotICogbGludXgvZnMvbmZzZC92ZnMuYwotICoKICAqIEZpbGUgb3BlcmF0aW9ucyB1c2VkIGJ5IG5mc2QuIFNvbWUgb2YgdGhlc2UgaGF2ZSBiZWVuIHJpcHBlZCBmcm9tCiAgKiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGJlY2F1c2UgdGhleSB3ZXJlbid0IGV4cG9ydGVkLCBvdGhlcnMKICAqIGFyZSBwYXJ0aWFsIGR1cGxpY2F0ZXMgd2l0aCBhZGRlZCBvciBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHkuCkBAIC0xNiw0OSArMTQsMzIgQEAKICAqIFplcm9jcHkgTkZTIHN1cHBvcnQgKEMpIDIwMDIgSGlyb2thenUgVGFrYWhhc2hpIDx0YWthQHZhbGludXguY28uanA+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zcGxpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaWZkZWYgQ09ORklHX05GU0RfVjMKLSNpbmNsdWRlIDxsaW51eC9uZnMzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIzLmg+Ci0jZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2ZoLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgotI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+Ci0jaWZkZWYgQ09ORklHX05GU0RfVjQKLSNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzNF9hY2wuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkX2lkbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNlbmRpZiAvKiBDT05GSUdfTkZTRF9WNCAqLwogI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW1hLmg+Ci0KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisjaWZkZWYgQ09ORklHX05GU0RfVjMKKyNpbmNsdWRlICJ4ZHIzLmgiCisjZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KKworI2lmZGVmIENPTkZJR19ORlNEX1Y0CisjaW5jbHVkZSA8bGludXgvbmZzNF9hY2wuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNkX2lkbWFwLmg+CisjZW5kaWYgLyogQ09ORklHX05GU0RfVjQgKi8KKworI2luY2x1ZGUgIm5mc2QuaCIKKyNpbmNsdWRlICJ2ZnMuaCIKKwogI2RlZmluZSBORlNEREJHX0ZBQ0lMSVRZCQlORlNEREJHX0ZJTEVPUAogCiAKQEAgLTg5LDEyICs3MCw2IEBACiAjZGVmaW5lIFJBUEFSTV9IQVNIX01BU0sJKFJBUEFSTV9IQVNIX1NJWkUtMSkKIHN0YXRpYyBzdHJ1Y3QgcmFwYXJtX2hidWNrZXQJcmFwYXJtX2hhc2hbUkFQQVJNX0hBU0hfU0laRV07CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1uZnNkX3Y0Y2xpZW50KHN0cnVjdCBzdmNfcnFzdCAqcnEpCi17Ci0gICAgcmV0dXJuIHJxLT5ycV9wcm9nID09IE5GU19QUk9HUkFNICYmIHJxLT5ycV92ZXJzID09IDQ7Ci19Ci0KIC8qIAogICogQ2FsbGVkIGZyb20gbmZzZF9sb29rdXAgYW5kIGVuY29kZV9kaXJlbnQuIENoZWNrIGlmIHdlIGhhdmUgY3Jvc3NlZCAKICAqIGEgbW91bnQgcG9pbnQuCkBAIC0xMTYsOCArOTEsMTYgQEAKIAogCWV4cDIgPSBycXN0X2V4cF9nZXRfYnlfbmFtZShycXN0cCwgJnBhdGgpOwogCWlmIChJU19FUlIoZXhwMikpIHsKLQkJaWYgKFBUUl9FUlIoZXhwMikgIT0gLUVOT0VOVCkKLQkJCWVyciA9IFBUUl9FUlIoZXhwMik7CisJCWVyciA9IFBUUl9FUlIoZXhwMik7CisJCS8qCisJCSAqIFdlIG5vcm1hbGx5IGFsbG93IE5GUyBjbGllbnRzIHRvIGNvbnRpbnVlCisJCSAqICJ1bmRlcm5lYXRoIiBhIG1vdW50cG9pbnQgdGhhdCBpcyBub3QgZXhwb3J0ZWQuCisJCSAqIFRoZSBleGNlcHRpb24gaXMgVjRST09ULCB3aGVyZSBubyB0cmF2ZXJzYWwgaXMgZXZlcgorCQkgKiBhbGxvd2VkIHdpdGhvdXQgYW4gZXhwbGljaXQgZXhwb3J0IG9mIHRoZSBuZXcKKwkJICogZGlyZWN0b3J5LgorCQkgKi8KKwkJaWYgKGVyciA9PSAtRU5PRU5UICYmICEoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9WNFJPT1QpKQorCQkJZXJyID0gMDsKIAkJcGF0aF9wdXQoJnBhdGgpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDEsNiArMTI0LDUzIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgZm9sbG93X3RvX3BhcmVudChzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkcDsKKworCXdoaWxlIChwYXRoLT5kZW50cnkgPT0gcGF0aC0+bW50LT5tbnRfcm9vdCAmJiBmb2xsb3dfdXAocGF0aCkpCisJCTsKKwlkcCA9IGRnZXRfcGFyZW50KHBhdGgtPmRlbnRyeSk7CisJZHB1dChwYXRoLT5kZW50cnkpOworCXBhdGgtPmRlbnRyeSA9IGRwOworfQorCitzdGF0aWMgaW50IG5mc2RfbG9va3VwX3BhcmVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgZGVudHJ5ICpkcGFyZW50LCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqKmV4cCwgc3RydWN0IGRlbnRyeSAqKmRlbnRyeXApCit7CisJc3RydWN0IHN2Y19leHBvcnQgKmV4cDI7CisJc3RydWN0IHBhdGggcGF0aCA9IHsubW50ID0gbW50Z2V0KCgqZXhwKS0+ZXhfcGF0aC5tbnQpLAorCQkJICAgIC5kZW50cnkgPSBkZ2V0KGRwYXJlbnQpfTsKKworCWZvbGxvd190b19wYXJlbnQoJnBhdGgpOworCisJZXhwMiA9IHJxc3RfZXhwX3BhcmVudChycXN0cCwgJnBhdGgpOworCWlmIChQVFJfRVJSKGV4cDIpID09IC1FTk9FTlQpIHsKKwkJKmRlbnRyeXAgPSBkZ2V0KGRwYXJlbnQpOworCX0gZWxzZSBpZiAoSVNfRVJSKGV4cDIpKSB7CisJCXBhdGhfcHV0KCZwYXRoKTsKKwkJcmV0dXJuIFBUUl9FUlIoZXhwMik7CisJfSBlbHNlIHsKKwkJKmRlbnRyeXAgPSBkZ2V0KHBhdGguZGVudHJ5KTsKKwkJZXhwX3B1dCgqZXhwKTsKKwkJKmV4cCA9IGV4cDI7CisJfQorCXBhdGhfcHV0KCZwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZvciBuZnNkIHB1cnBvc2VzLCB3ZSB0cmVhdCBWNFJPT1QgZXhwb3J0cyBhcyB0aG91Z2ggdGhlcmUgd2FzIGFuCisgKiBleHBvcnQgYXQgKmV2ZXJ5KiBkaXJlY3RvcnkuCisgKi8KK2ludCBuZnNkX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwKQoreworCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkKKwkJcmV0dXJuIDE7CisJaWYgKCEoZXhwLT5leF9mbGFncyAmIE5GU0VYUF9WNFJPT1QpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZGVudHJ5LT5kX2lub2RlICE9IE5VTEw7Cit9CisKIF9fYmUzMgogbmZzZF9sb29rdXBfZGVudHJ5KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwKIAkJICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGxlbiwKQEAgLTE2OSwzNSArMTk5LDEzIEBACiAJCQlkZW50cnkgPSBkZ2V0KGRwYXJlbnQpOwogCQllbHNlIGlmIChkcGFyZW50ICE9IGV4cC0+ZXhfcGF0aC5kZW50cnkpCiAJCQlkZW50cnkgPSBkZ2V0X3BhcmVudChkcGFyZW50KTsKLQkJZWxzZSBpZiAoIUVYX05PSElERShleHApKQorCQllbHNlIGlmICghRVhfTk9ISURFKGV4cCkgJiYgIW5mc2RfdjRjbGllbnQocnFzdHApKQogCQkJZGVudHJ5ID0gZGdldChkcGFyZW50KTsgLyogLi4gPT0gLiBqdXN0IGxpa2UgYXQgLyAqLwogCQllbHNlIHsKIAkJCS8qIGNoZWNraW5nIG1vdW50cG9pbnQgY3Jvc3NpbmcgaXMgdmVyeSBkaWZmZXJlbnQgd2hlbiBzdGVwcGluZyB1cCAqLwotCQkJc3RydWN0IHN2Y19leHBvcnQgKmV4cDIgPSBOVUxMOwotCQkJc3RydWN0IGRlbnRyeSAqZHA7Ci0JCQlzdHJ1Y3QgcGF0aCBwYXRoID0gey5tbnQgPSBtbnRnZXQoZXhwLT5leF9wYXRoLm1udCksCi0JCQkJCSAgICAuZGVudHJ5ID0gZGdldChkcGFyZW50KX07Ci0KLQkJCXdoaWxlIChwYXRoLmRlbnRyeSA9PSBwYXRoLm1udC0+bW50X3Jvb3QgJiYKLQkJCSAgICAgICBmb2xsb3dfdXAoJnBhdGgpKQotCQkJCTsKLQkJCWRwID0gZGdldF9wYXJlbnQocGF0aC5kZW50cnkpOwotCQkJZHB1dChwYXRoLmRlbnRyeSk7Ci0JCQlwYXRoLmRlbnRyeSA9IGRwOwotCi0JCQlleHAyID0gcnFzdF9leHBfcGFyZW50KHJxc3RwLCAmcGF0aCk7Ci0JCQlpZiAoUFRSX0VSUihleHAyKSA9PSAtRU5PRU5UKSB7Ci0JCQkJZGVudHJ5ID0gZGdldChkcGFyZW50KTsKLQkJCX0gZWxzZSBpZiAoSVNfRVJSKGV4cDIpKSB7Ci0JCQkJaG9zdF9lcnIgPSBQVFJfRVJSKGV4cDIpOwotCQkJCXBhdGhfcHV0KCZwYXRoKTsKKwkJCWhvc3RfZXJyID0gbmZzZF9sb29rdXBfcGFyZW50KHJxc3RwLCBkcGFyZW50LCAmZXhwLCAmZGVudHJ5KTsKKwkJCWlmIChob3N0X2VycikKIAkJCQlnb3RvIG91dF9uZnNlcnI7Ci0JCQl9IGVsc2UgewotCQkJCWRlbnRyeSA9IGRnZXQocGF0aC5kZW50cnkpOwotCQkJCWV4cF9wdXQoZXhwKTsKLQkJCQlleHAgPSBleHAyOwotCQkJfQotCQkJcGF0aF9wdXQoJnBhdGgpOwogCQl9CiAJfSBlbHNlIHsKIAkJZmhfbG9jayhmaHApOwpAQCAtMjA4LDcgKzIxNiw3IEBACiAJCS8qCiAJCSAqIGNoZWNrIGlmIHdlIGhhdmUgY3Jvc3NlZCBhIG1vdW50IHBvaW50IC4uLgogCQkgKi8KLQkJaWYgKGRfbW91bnRwb2ludChkZW50cnkpKSB7CisJCWlmIChuZnNkX21vdW50cG9pbnQoZGVudHJ5LCBleHApKSB7CiAJCQlpZiAoKGhvc3RfZXJyID0gbmZzZF9jcm9zc19tbnQocnFzdHAsICZkZW50cnksICZleHApKSkgewogCQkJCWRwdXQoZGVudHJ5KTsKIAkJCQlnb3RvIG91dF9uZnNlcnI7CkBAIC03NDQsOCArNzUyLDYgQEAKIAkJCSAgICBmbGFncywgY3VycmVudF9jcmVkKCkpOwogCWlmIChJU19FUlIoKmZpbHApKQogCQlob3N0X2VyciA9IFBUUl9FUlIoKmZpbHApOwotCWVsc2UKLQkJaW1hX2NvdW50c19nZXQoKmZpbHApOwogb3V0X25mc2VycjoKIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CiBvdXQ6CkBAIC0yMTI0LDggKzIxMzAsNyBAQAogCSAqLwogCXBhdGgubW50ID0gZXhwLT5leF9wYXRoLm1udDsKIAlwYXRoLmRlbnRyeSA9IGRlbnRyeTsKLQllcnIgPSBpbWFfcGF0aF9jaGVjaygmcGF0aCwgYWNjICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpLAotCQkJICAgICBJTUFfQ09VTlRfTEVBVkUpOworCWVyciA9IGltYV9wYXRoX2NoZWNrKCZwYXRoLCBhY2MgJiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpOwogbmZzZF9vdXQ6CiAJcmV0dXJuIGVycj8gbmZzZXJybm8oZXJyKSA6IDA7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5oIGIvZnMvbmZzZC92ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjFkZTBhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzZC92ZnMuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgorICovCisKKyNpZm5kZWYgTElOVVhfTkZTRF9WRlNfSAorI2RlZmluZSBMSU5VWF9ORlNEX1ZGU19ICisKKyNpbmNsdWRlICJuZnNmaC5oIgorCisvKgorICogRmxhZ3MgZm9yIG5mc2RfcGVybWlzc2lvbgorICovCisjZGVmaW5lIE5GU0RfTUFZX05PUAkJMAorI2RlZmluZSBORlNEX01BWV9FWEVDCQkxIC8qID09IE1BWV9FWEVDICovCisjZGVmaW5lIE5GU0RfTUFZX1dSSVRFCQkyIC8qID09IE1BWV9XUklURSAqLworI2RlZmluZSBORlNEX01BWV9SRUFECQk0IC8qID09IE1BWV9SRUFEICovCisjZGVmaW5lIE5GU0RfTUFZX1NBVFRSCQk4CisjZGVmaW5lIE5GU0RfTUFZX1RSVU5DCQkxNgorI2RlZmluZSBORlNEX01BWV9MT0NLCQkzMgorI2RlZmluZSBORlNEX01BWV9PV05FUl9PVkVSUklERQk2NAorI2RlZmluZSBORlNEX01BWV9MT0NBTF9BQ0NFU1MJMTI4IC8qIElSSVggZG9pbmcgbG9jYWwgYWNjZXNzIGNoZWNrIG9uIGRldmljZSBzcGVjaWFsIGZpbGUqLworI2RlZmluZSBORlNEX01BWV9CWVBBU1NfR1NTX09OX1JPT1QgMjU2CisKKyNkZWZpbmUgTkZTRF9NQVlfQ1JFQVRFCQkoTkZTRF9NQVlfRVhFQ3xORlNEX01BWV9XUklURSkKKyNkZWZpbmUgTkZTRF9NQVlfUkVNT1ZFCQkoTkZTRF9NQVlfRVhFQ3xORlNEX01BWV9XUklURXxORlNEX01BWV9UUlVOQykKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciByZWFkZGlyCisgKi8KK3R5cGVkZWYgaW50ICgqbmZzZF9kaXJvcF90KShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGludCk7CisKKy8qIG5mc2QvdmZzLmMgKi8KK2ludAkJZmhfbG9ja19wYXJlbnQoc3RydWN0IHN2Y19maCAqLCBzdHJ1Y3QgZGVudHJ5ICopOworaW50CQluZnNkX3JhY2FjaGVfaW5pdChpbnQpOwordm9pZAkJbmZzZF9yYWNhY2hlX3NodXRkb3duKHZvaWQpOworaW50CQluZnNkX2Nyb3NzX21udChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgZGVudHJ5ICoqZHBwLAorCQkgICAgICAgICAgICAgICAgc3RydWN0IHN2Y19leHBvcnQgKipleHBwKTsKK19fYmUzMgkJbmZzZF9sb29rdXAoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKKwkJCQljb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgc3RydWN0IHN2Y19maCAqKTsKK19fYmUzMgkJIG5mc2RfbG9va3VwX2RlbnRyeShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LAorCQkJCXN0cnVjdCBzdmNfZXhwb3J0ICoqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKK19fYmUzMgkJbmZzZF9zZXRhdHRyKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisJCQkJc3RydWN0IGlhdHRyICosIGludCwgdGltZV90KTsKK2ludCBuZnNkX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqKTsKKyNpZmRlZiBDT05GSUdfTkZTRF9WNAorX19iZTMyICAgICAgICAgIG5mc2Q0X3NldF9uZnM0X2FjbChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzNF9hY2wgKik7CitpbnQgICAgICAgICAgICAgbmZzZDRfZ2V0X25mczRfYWNsKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuZnM0X2FjbCAqKik7CisjZW5kaWYgLyogQ09ORklHX05GU0RfVjQgKi8KK19fYmUzMgkJbmZzZF9jcmVhdGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKKwkJCQljaGFyICpuYW1lLCBpbnQgbGVuLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzLAorCQkJCWludCB0eXBlLCBkZXZfdCByZGV2LCBzdHJ1Y3Qgc3ZjX2ZoICpyZXMpOworI2lmZGVmIENPTkZJR19ORlNEX1YzCitfX2JlMzIJCW5mc2RfYWNjZXNzKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIHUzMiAqLCB1MzIgKik7CitfX2JlMzIJCW5mc2RfY3JlYXRlX3YzKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisJCQkJY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IGlhdHRyICphdHRycywKKwkJCQlzdHJ1Y3Qgc3ZjX2ZoICpyZXMsIGludCBjcmVhdGVtb2RlLAorCQkJCXUzMiAqdmVyaWZpZXIsIGludCAqdHJ1bmNwLCBpbnQgKmNyZWF0ZWQpOworX19iZTMyCQluZnNkX2NvbW1pdChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWxvZmZfdCwgdW5zaWduZWQgbG9uZyk7CisjZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KK19fYmUzMgkJbmZzZF9vcGVuKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIGludCwKKwkJCQlpbnQsIHN0cnVjdCBmaWxlICoqKTsKK3ZvaWQJCW5mc2RfY2xvc2Uoc3RydWN0IGZpbGUgKik7CitfX2JlMzIgCQluZnNkX3JlYWQoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwgc3RydWN0IGZpbGUgKiwKKwkJCQlsb2ZmX3QsIHN0cnVjdCBrdmVjICosIGludCwgdW5zaWduZWQgbG9uZyAqKTsKK19fYmUzMiAJCW5mc2Rfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKixzdHJ1Y3QgZmlsZSAqLAorCQkJCWxvZmZfdCwgc3RydWN0IGt2ZWMgKixpbnQsIHVuc2lnbmVkIGxvbmcgKiwgaW50ICopOworX19iZTMyCQluZnNkX3JlYWRsaW5rKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisJCQkJY2hhciAqLCBpbnQgKik7CitfX2JlMzIJCW5mc2Rfc3ltbGluayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWNoYXIgKm5hbWUsIGludCBsZW4sIGNoYXIgKnBhdGgsIGludCBwbGVuLAorCQkJCXN0cnVjdCBzdmNfZmggKnJlcywgc3RydWN0IGlhdHRyICopOworX19iZTMyCQluZnNkX2xpbmsoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKKwkJCQljaGFyICosIGludCwgc3RydWN0IHN2Y19maCAqKTsKK19fYmUzMgkJbmZzZF9yZW5hbWUoc3RydWN0IHN2Y19ycXN0ICosCisJCQkJc3RydWN0IHN2Y19maCAqLCBjaGFyICosIGludCwKKwkJCQlzdHJ1Y3Qgc3ZjX2ZoICosIGNoYXIgKiwgaW50KTsKK19fYmUzMgkJbmZzZF9yZW1vdmUoc3RydWN0IHN2Y19ycXN0ICosCisJCQkJc3RydWN0IHN2Y19maCAqLCBjaGFyICosIGludCk7CitfX2JlMzIJCW5mc2RfdW5saW5rKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIGludCB0eXBlLAorCQkJCWNoYXIgKm5hbWUsIGludCBsZW4pOworaW50CQluZnNkX3RydW5jYXRlKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisJCQkJdW5zaWduZWQgbG9uZyBzaXplKTsKK19fYmUzMgkJbmZzZF9yZWFkZGlyKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCisJCQkgICAgIGxvZmZfdCAqLCBzdHJ1Y3QgcmVhZGRpcl9jZCAqLCBmaWxsZGlyX3QpOworX19iZTMyCQluZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCXN0cnVjdCBrc3RhdGZzICosIGludCBhY2Nlc3MpOworCitpbnQJCW5mc2Rfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOworX19iZTMyCQluZnNkX3Blcm1pc3Npb24oc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZXhwb3J0ICosCisJCQkJc3RydWN0IGRlbnRyeSAqLCBpbnQpOworaW50CQluZnNkX3N5bmNfZGlyKHN0cnVjdCBkZW50cnkgKmRwKTsKKworI2lmIGRlZmluZWQoQ09ORklHX05GU0RfVjJfQUNMKSB8fCBkZWZpbmVkKENPTkZJR19ORlNEX1YzX0FDTCkKK3N0cnVjdCBwb3NpeF9hY2wgKm5mc2RfZ2V0X3Bvc2l4X2FjbChzdHJ1Y3Qgc3ZjX2ZoICosIGludCk7CitpbnQgbmZzZF9zZXRfcG9zaXhfYWNsKHN0cnVjdCBzdmNfZmggKiwgaW50LCBzdHJ1Y3QgcG9zaXhfYWNsICopOworI2VuZGlmCisKKyNlbmRpZiAvKiBMSU5VWF9ORlNEX1ZGU19IICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL3hkci5oIGIvZnMvbmZzZC94ZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2IxODYzCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzZC94ZHIuaApAQCAtMCwwICsxLDE3MyBAQAorLyogWERSIHR5cGVzIGZvciBuZnNkLiBUaGlzIGlzIG1haW5seSBhIHR5cGluZyBleGVyY2lzZS4gKi8KKworI2lmbmRlZiBMSU5VWF9ORlNEX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9ICisKKyNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlICJuZnNkLmgiCisjaW5jbHVkZSAibmZzZmguaCIKKworc3RydWN0IG5mc2RfZmhhbmRsZSB7CisJc3RydWN0IHN2Y19maAkJZmg7Cit9OworCitzdHJ1Y3QgbmZzZF9zYXR0cmFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCXN0cnVjdCBpYXR0cgkJYXR0cnM7Cit9OworCitzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmg7CisJX191MzIJCQlvZmZzZXQ7CisJX191MzIJCQljb3VudDsKKwlpbnQJCQl2bGVuOworfTsKKworc3RydWN0IG5mc2Rfd3JpdGVhcmdzIHsKKwlzdmNfZmgJCQlmaDsKKwlfX3UzMgkJCW9mZnNldDsKKwlpbnQJCQlsZW47CisJaW50CQkJdmxlbjsKK307CisKK3N0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47CisJc3RydWN0IGlhdHRyCQlhdHRyczsKK307CisKK3N0cnVjdCBuZnNkX3JlbmFtZWFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZmaDsKKwljaGFyICoJCQlmbmFtZTsKKwl1bnNpZ25lZCBpbnQJCWZsZW47CisJc3RydWN0IHN2Y19maAkJdGZoOworCWNoYXIgKgkJCXRuYW1lOworCXVuc2lnbmVkIGludAkJdGxlbjsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRsaW5rYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmg7CisJY2hhciAqCQkJYnVmZmVyOworfTsKKwkKK3N0cnVjdCBuZnNkX2xpbmthcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJc3RydWN0IHN2Y19maAkJdGZoOworCWNoYXIgKgkJCXRuYW1lOworCXVuc2lnbmVkIGludAkJdGxlbjsKK307CisKK3N0cnVjdCBuZnNkX3N5bWxpbmthcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJY2hhciAqCQkJZm5hbWU7CisJdW5zaWduZWQgaW50CQlmbGVuOworCWNoYXIgKgkJCXRuYW1lOworCXVuc2lnbmVkIGludAkJdGxlbjsKKwlzdHJ1Y3QgaWF0dHIJCWF0dHJzOworfTsKKworc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCV9fdTMyCQkJY29va2llOworCV9fdTMyCQkJY291bnQ7CisJX19iZTMyICoJCWJ1ZmZlcjsKK307CisKK3N0cnVjdCBuZnNkX2F0dHJzdGF0IHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlzdHJ1Y3Qga3N0YXQJCXN0YXQ7Cit9OworCitzdHJ1Y3QgbmZzZF9kaXJvcHJlcyAgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCXN0cnVjdCBrc3RhdAkJc3RhdDsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRsaW5rcmVzIHsKKwlpbnQJCQlsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkcmVzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwl1bnNpZ25lZCBsb25nCQljb3VudDsKKwlzdHJ1Y3Qga3N0YXQJCXN0YXQ7Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkZGlycmVzIHsKKwlpbnQJCQljb3VudDsKKworCXN0cnVjdCByZWFkZGlyX2NkCWNvbW1vbjsKKwlfX2JlMzIgKgkJYnVmZmVyOworCWludAkJCWJ1ZmxlbjsKKwlfX2JlMzIgKgkJb2Zmc2V0OworfTsKKworc3RydWN0IG5mc2Rfc3RhdGZzcmVzIHsKKwlzdHJ1Y3Qga3N0YXRmcwkJc3RhdHM7Cit9OworCisvKgorICogU3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIFhEUiBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisgKi8KK3VuaW9uIG5mc2RfeGRyc3RvcmUgeworCXN0cnVjdCBuZnNkX3NhdHRyYXJncwlzYXR0cjsKKwlzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MJZGlyb3A7CisJc3RydWN0IG5mc2RfcmVhZGFyZ3MJcmVhZDsKKwlzdHJ1Y3QgbmZzZF93cml0ZWFyZ3MJd3JpdGU7CisJc3RydWN0IG5mc2RfY3JlYXRlYXJncwljcmVhdGU7CisJc3RydWN0IG5mc2RfcmVuYW1lYXJncwlyZW5hbWU7CisJc3RydWN0IG5mc2RfbGlua2FyZ3MJbGluazsKKwlzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncwlzeW1saW5rOworCXN0cnVjdCBuZnNkX3JlYWRkaXJhcmdzCXJlYWRkaXI7Cit9OworCisjZGVmaW5lIE5GUzJfU1ZDX1hEUlNJWkUJc2l6ZW9mKHVuaW9uIG5mc2RfeGRyc3RvcmUpCisKKworaW50IG5mc3N2Y19kZWNvZGVfdm9pZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHZvaWQgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfZmhhbmRsZSAqKTsKK2ludCBuZnNzdmNfZGVjb2RlX3NhdHRyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2Rfc2F0dHJhcmdzICopOworaW50IG5mc3N2Y19kZWNvZGVfZGlyb3BhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9yZWFkYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2RfcmVhZGFyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV93cml0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkX3dyaXRlYXJncyAqKTsKK2ludCBuZnNzdmNfZGVjb2RlX2NyZWF0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9yZW5hbWVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZF9yZW5hbWVhcmdzICopOworaW50IG5mc3N2Y19kZWNvZGVfcmVhZGxpbmthcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZF9yZWFkbGlua2FyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2RfbGlua2FyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9zeW1saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2Rfc3ltbGlua2FyZ3MgKik7CitpbnQgbmZzc3ZjX2RlY29kZV9yZWFkZGlyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgKik7CitpbnQgbmZzc3ZjX2VuY29kZV92b2lkKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKK2ludCBuZnNzdmNfZW5jb2RlX2F0dHJzdGF0KHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfYXR0cnN0YXQgKik7CitpbnQgbmZzc3ZjX2VuY29kZV9kaXJvcHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkX2Rpcm9wcmVzICopOworaW50IG5mc3N2Y19lbmNvZGVfcmVhZGxpbmtyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZF9yZWFkbGlua3JlcyAqKTsKK2ludCBuZnNzdmNfZW5jb2RlX3JlYWRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZF9yZWFkcmVzICopOworaW50IG5mc3N2Y19lbmNvZGVfc3RhdGZzcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2Rfc3RhdGZzcmVzICopOworaW50IG5mc3N2Y19lbmNvZGVfcmVhZGRpcnJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkX3JlYWRkaXJyZXMgKik7CisKK2ludCBuZnNzdmNfZW5jb2RlX2VudHJ5KHZvaWQgKiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCk7CisKK2ludCBuZnNzdmNfcmVsZWFzZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfZmhhbmRsZSAqKTsKKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgTkZTdjIgQUNMIGNvZGUgKi8KK19fYmUzMiAqbmZzMnN2Y19lbmNvZGVfZmF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHApOworX19iZTMyICpuZnMyc3ZjX2RlY29kZV9maChfX2JlMzIgKnAsIHN0cnVjdCBzdmNfZmggKmZocCk7CisKKyNlbmRpZiAvKiBMSU5VWF9ORlNEX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QveGRyMy5oIGIvZnMvbmZzZC94ZHIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmOTgwZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mc2QveGRyMy5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogWERSIHR5cGVzIGZvciBORlN2MyBpbiBuZnNkLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORlNEX1hEUjNfSAorI2RlZmluZSBfTElOVVhfTkZTRF9YRFIzX0gKKworI2luY2x1ZGUgInhkci5oIgorCitzdHJ1Y3QgbmZzZDNfc2F0dHJhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlzdHJ1Y3QgaWF0dHIJCWF0dHJzOworCWludAkJCWNoZWNrX2d1YXJkOworCXRpbWVfdAkJCWd1YXJkdGltZTsKK307CisKK3N0cnVjdCBuZnNkM19kaXJvcGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWNoYXIgKgkJCW5hbWU7CisJdW5zaWduZWQgaW50CQlsZW47Cit9OworCitzdHJ1Y3QgbmZzZDNfYWNjZXNzYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmg7CisJdW5zaWduZWQgaW50CQlhY2Nlc3M7Cit9OworCitzdHJ1Y3QgbmZzZDNfcmVhZGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCV9fdTY0CQkJb2Zmc2V0OworCV9fdTMyCQkJY291bnQ7CisJaW50CQkJdmxlbjsKK307CisKK3N0cnVjdCBuZnNkM193cml0ZWFyZ3MgeworCXN2Y19maAkJCWZoOworCV9fdTY0CQkJb2Zmc2V0OworCV9fdTMyCQkJY291bnQ7CisJaW50CQkJc3RhYmxlOworCV9fdTMyCQkJbGVuOworCWludAkJCXZsZW47Cit9OworCitzdHJ1Y3QgbmZzZDNfY3JlYXRlYXJncyB7CisJc3RydWN0IHN2Y19maAkJZmg7CisJY2hhciAqCQkJbmFtZTsKKwl1bnNpZ25lZCBpbnQJCWxlbjsKKwlpbnQJCQljcmVhdGVtb2RlOworCXN0cnVjdCBpYXR0cgkJYXR0cnM7CisJX19iZTMyICoJCXZlcmY7Cit9OworCitzdHJ1Y3QgbmZzZDNfbWtub2RhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwljaGFyICoJCQluYW1lOworCXVuc2lnbmVkIGludAkJbGVuOworCV9fdTMyCQkJZnR5cGU7CisJX191MzIJCQltYWpvciwgbWlub3I7CisJc3RydWN0IGlhdHRyCQlhdHRyczsKK307CisKK3N0cnVjdCBuZnNkM19yZW5hbWVhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJY2hhciAqCQkJZm5hbWU7CisJdW5zaWduZWQgaW50CQlmbGVuOworCXN0cnVjdCBzdmNfZmgJCXRmaDsKKwljaGFyICoJCQl0bmFtZTsKKwl1bnNpZ25lZCBpbnQJCXRsZW47Cit9OworCitzdHJ1Y3QgbmZzZDNfcmVhZGxpbmthcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwljaGFyICoJCQlidWZmZXI7Cit9OworCitzdHJ1Y3QgbmZzZDNfbGlua2FyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZmaDsKKwlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7CisJY2hhciAqCQkJdG5hbWU7CisJdW5zaWduZWQgaW50CQl0bGVuOworfTsKKworc3RydWN0IG5mc2QzX3N5bWxpbmthcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7CisJY2hhciAqCQkJZm5hbWU7CisJdW5zaWduZWQgaW50CQlmbGVuOworCWNoYXIgKgkJCXRuYW1lOworCXVuc2lnbmVkIGludAkJdGxlbjsKKwlzdHJ1Y3QgaWF0dHIJCWF0dHJzOworfTsKKworc3RydWN0IG5mc2QzX3JlYWRkaXJhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlfX3U2NAkJCWNvb2tpZTsKKwlfX3UzMgkJCWRpcmNvdW50OworCV9fdTMyCQkJY291bnQ7CisJX19iZTMyICoJCXZlcmY7CisJX19iZTMyICoJCWJ1ZmZlcjsKK307CisKK3N0cnVjdCBuZnNkM19jb21taXRhcmdzIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlfX3U2NAkJCW9mZnNldDsKKwlfX3UzMgkJCWNvdW50OworfTsKKworc3RydWN0IG5mc2QzX2dldGFjbGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWludAkJCW1hc2s7Cit9OworCitzdHJ1Y3QgcG9zaXhfYWNsOworc3RydWN0IG5mc2QzX3NldGFjbGFyZ3MgeworCXN0cnVjdCBzdmNfZmgJCWZoOworCWludAkJCW1hc2s7CisJc3RydWN0IHBvc2l4X2FjbAkqYWNsX2FjY2VzczsKKwlzdHJ1Y3QgcG9zaXhfYWNsCSphY2xfZGVmYXVsdDsKK307CisKK3N0cnVjdCBuZnNkM19hdHRyc3RhdCB7CisJX19iZTMyCQkJc3RhdHVzOworCXN0cnVjdCBzdmNfZmgJCWZoOworCXN0cnVjdCBrc3RhdCAgICAgICAgICAgIHN0YXQ7Cit9OworCisvKiBMT09LVVAsIENSRUFURSwgTUtESVIsIFNZTUxJTkssIE1LTk9EICovCitzdHJ1Y3QgbmZzZDNfZGlyb3ByZXMgIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZGlyZmg7CisJc3RydWN0IHN2Y19maAkJZmg7Cit9OworCitzdHJ1Y3QgbmZzZDNfYWNjZXNzcmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJX191MzIJCQlhY2Nlc3M7Cit9OworCitzdHJ1Y3QgbmZzZDNfcmVhZGxpbmtyZXMgeworCV9fYmUzMgkJCXN0YXR1czsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlfX3UzMgkJCWxlbjsKK307CisKK3N0cnVjdCBuZnNkM19yZWFkcmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJdW5zaWduZWQgbG9uZwkJY291bnQ7CisJaW50CQkJZW9mOworfTsKKworc3RydWN0IG5mc2QzX3dyaXRlcmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJdW5zaWduZWQgbG9uZwkJY291bnQ7CisJaW50CQkJY29tbWl0dGVkOworfTsKKworc3RydWN0IG5mc2QzX3JlbmFtZXJlcyB7CisJX19iZTMyCQkJc3RhdHVzOworCXN0cnVjdCBzdmNfZmgJCWZmaDsKKwlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7Cit9OworCitzdHJ1Y3QgbmZzZDNfbGlua3JlcyB7CisJX19iZTMyCQkJc3RhdHVzOworCXN0cnVjdCBzdmNfZmgJCXRmaDsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKK307CisKK3N0cnVjdCBuZnNkM19yZWFkZGlycmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJc3RydWN0IHN2Y19maAkJZmg7CisJaW50CQkJY291bnQ7CisJX19iZTMyCQkJdmVyZlsyXTsKKworCXN0cnVjdCByZWFkZGlyX2NkCWNvbW1vbjsKKwlfX2JlMzIgKgkJYnVmZmVyOworCWludAkJCWJ1ZmxlbjsKKwlfX2JlMzIgKgkJb2Zmc2V0OworCV9fYmUzMiAqCQlvZmZzZXQxOworCXN0cnVjdCBzdmNfcnFzdCAqCXJxc3RwOworCit9OworCitzdHJ1Y3QgbmZzZDNfZnNzdGF0cmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJc3RydWN0IGtzdGF0ZnMJCXN0YXRzOworCV9fdTMyCQkJaW52YXJzZWM7Cit9OworCitzdHJ1Y3QgbmZzZDNfZnNpbmZvcmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJX191MzIJCQlmX3J0bWF4OworCV9fdTMyCQkJZl9ydHByZWY7CisJX191MzIJCQlmX3J0bXVsdDsKKwlfX3UzMgkJCWZfd3RtYXg7CisJX191MzIJCQlmX3d0cHJlZjsKKwlfX3UzMgkJCWZfd3RtdWx0OworCV9fdTMyCQkJZl9kdHByZWY7CisJX191NjQJCQlmX21heGZpbGVzaXplOworCV9fdTMyCQkJZl9wcm9wZXJ0aWVzOworfTsKKworc3RydWN0IG5mc2QzX3BhdGhjb25mcmVzIHsKKwlfX2JlMzIJCQlzdGF0dXM7CisJX191MzIJCQlwX2xpbmtfbWF4OworCV9fdTMyCQkJcF9uYW1lX21heDsKKwlfX3UzMgkJCXBfbm9fdHJ1bmM7CisJX191MzIJCQlwX2Nob3duX3Jlc3RyaWN0ZWQ7CisJX191MzIJCQlwX2Nhc2VfaW5zZW5zaXRpdmU7CisJX191MzIJCQlwX2Nhc2VfcHJlc2VydmluZzsKK307CisKK3N0cnVjdCBuZnNkM19jb21taXRyZXMgeworCV9fYmUzMgkJCXN0YXR1czsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKK307CisKK3N0cnVjdCBuZnNkM19nZXRhY2xyZXMgeworCV9fYmUzMgkJCXN0YXR1czsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKKwlpbnQJCQltYXNrOworCXN0cnVjdCBwb3NpeF9hY2wJKmFjbF9hY2Nlc3M7CisJc3RydWN0IHBvc2l4X2FjbAkqYWNsX2RlZmF1bHQ7Cit9OworCisvKiBkdW1teSB0eXBlIGZvciByZWxlYXNlICovCitzdHJ1Y3QgbmZzZDNfZmhhbmRsZV9wYWlyIHsKKwlfX3UzMgkJCWR1bW15OworCXN0cnVjdCBzdmNfZmgJCWZoMTsKKwlzdHJ1Y3Qgc3ZjX2ZoCQlmaDI7Cit9OworCisvKgorICogU3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIFhEUiBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisgKi8KK3VuaW9uIG5mc2QzX3hkcnN0b3JlIHsKKwlzdHJ1Y3QgbmZzZDNfc2F0dHJhcmdzCQlzYXR0cmFyZ3M7CisJc3RydWN0IG5mc2QzX2Rpcm9wYXJncwkJZGlyb3BhcmdzOworCXN0cnVjdCBuZnNkM19yZWFkYXJncwkJcmVhZGFyZ3M7CisJc3RydWN0IG5mc2QzX3dyaXRlYXJncwkJd3JpdGVhcmdzOworCXN0cnVjdCBuZnNkM19jcmVhdGVhcmdzCQljcmVhdGVhcmdzOworCXN0cnVjdCBuZnNkM19yZW5hbWVhcmdzCQlyZW5hbWVhcmdzOworCXN0cnVjdCBuZnNkM19saW5rYXJncwkJbGlua2FyZ3M7CisJc3RydWN0IG5mc2QzX3N5bWxpbmthcmdzCXN5bWxpbmthcmdzOworCXN0cnVjdCBuZnNkM19yZWFkZGlyYXJncwlyZWFkZGlyYXJnczsKKwlzdHJ1Y3QgbmZzZDNfZGlyb3ByZXMgCQlkaXJvcHJlczsKKwlzdHJ1Y3QgbmZzZDNfYWNjZXNzcmVzCQlhY2Nlc3NyZXM7CisJc3RydWN0IG5mc2QzX3JlYWRsaW5rcmVzCXJlYWRsaW5rcmVzOworCXN0cnVjdCBuZnNkM19yZWFkcmVzCQlyZWFkcmVzOworCXN0cnVjdCBuZnNkM193cml0ZXJlcwkJd3JpdGVyZXM7CisJc3RydWN0IG5mc2QzX3JlbmFtZXJlcwkJcmVuYW1lcmVzOworCXN0cnVjdCBuZnNkM19saW5rcmVzCQlsaW5rcmVzOworCXN0cnVjdCBuZnNkM19yZWFkZGlycmVzCQlyZWFkZGlycmVzOworCXN0cnVjdCBuZnNkM19mc3N0YXRyZXMJCWZzc3RhdHJlczsKKwlzdHJ1Y3QgbmZzZDNfZnNpbmZvcmVzCQlmc2luZm9yZXM7CisJc3RydWN0IG5mc2QzX3BhdGhjb25mcmVzCXBhdGhjb25mcmVzOworCXN0cnVjdCBuZnNkM19jb21taXRyZXMJCWNvbW1pdHJlczsKKwlzdHJ1Y3QgbmZzZDNfZ2V0YWNscmVzCQlnZXRhY2xyZXM7Cit9OworCisjZGVmaW5lIE5GUzNfU1ZDX1hEUlNJWkUJCXNpemVvZih1bmlvbiBuZnNkM194ZHJzdG9yZSkKKworaW50IG5mczNzdmNfZGVjb2RlX2ZoYW5kbGUoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZF9maGFuZGxlICopOworaW50IG5mczNzdmNfZGVjb2RlX3NhdHRyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX3NhdHRyYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9kaXJvcGFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19kaXJvcGFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfYWNjZXNzYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX2FjY2Vzc2FyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfcmVhZGFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19yZWFkYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV93cml0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM193cml0ZWFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfY3JlYXRlYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX2NyZWF0ZWFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfbWtkaXJhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfY3JlYXRlYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9ta25vZGFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19ta25vZGFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfcmVuYW1lYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX3JlbmFtZWFyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfcmVhZGxpbmthcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVhZGxpbmthcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX2xpbmthcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfbGlua2FyZ3MgKik7CitpbnQgbmZzM3N2Y19kZWNvZGVfc3ltbGlua2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19zeW1saW5rYXJncyAqKTsKK2ludCBuZnMzc3ZjX2RlY29kZV9yZWFkZGlyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX3JlYWRkaXJhcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX3JlYWRkaXJwbHVzYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX3JlYWRkaXJhcmdzICopOworaW50IG5mczNzdmNfZGVjb2RlX2NvbW1pdGFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19jb21taXRhcmdzICopOworaW50IG5mczNzdmNfZW5jb2RlX3ZvaWRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCB2b2lkICopOworaW50IG5mczNzdmNfZW5jb2RlX2F0dHJzdGF0KHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfYXR0cnN0YXQgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfd2Njc3RhdChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX2F0dHJzdGF0ICopOworaW50IG5mczNzdmNfZW5jb2RlX2Rpcm9wcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfZGlyb3ByZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfYWNjZXNzcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfYWNjZXNzcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX3JlYWRsaW5rcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVhZGxpbmtyZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfcmVhZHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkM19yZWFkcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX3dyaXRlcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2QzX3dyaXRlcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX2NyZWF0ZXJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX2Rpcm9wcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX3JlbmFtZXJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCisJCQkJc3RydWN0IG5mc2QzX3JlbmFtZXJlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9saW5rcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfbGlua3JlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9yZWFkZGlycmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcmVhZGRpcnJlcyAqKTsKK2ludCBuZnMzc3ZjX2VuY29kZV9mc3N0YXRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19mc3N0YXRyZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfZnNpbmZvcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfZnNpbmZvcmVzICopOworaW50IG5mczNzdmNfZW5jb2RlX3BhdGhjb25mcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfcGF0aGNvbmZyZXMgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfY29tbWl0cmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJCQlzdHJ1Y3QgbmZzZDNfY29tbWl0cmVzICopOworCitpbnQgbmZzM3N2Y19yZWxlYXNlX2ZoYW5kbGUoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19hdHRyc3RhdCAqKTsKK2ludCBuZnMzc3ZjX3JlbGVhc2VfZmhhbmRsZTIoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQkJCXN0cnVjdCBuZnNkM19maGFuZGxlX3BhaXIgKik7CitpbnQgbmZzM3N2Y19lbmNvZGVfZW50cnkodm9pZCAqLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCWludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sCisJCQkJdW5zaWduZWQgaW50KTsKK2ludCBuZnMzc3ZjX2VuY29kZV9lbnRyeV9wbHVzKHZvaWQgKiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLAorCQkJCXVuc2lnbmVkIGludCk7CisvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBORlN2MyBBQ0wgY29kZSAqLworX19iZTMyICpuZnMzc3ZjX2VuY29kZV9wb3N0X29wX2F0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLAorCQkJCXN0cnVjdCBzdmNfZmggKmZocCk7CitfX2JlMzIgKm5mczNzdmNfZGVjb2RlX2ZoKF9fYmUzMiAqcCwgc3RydWN0IHN2Y19maCAqZmhwKTsKKworCisjZW5kaWYgLyogX0xJTlVYX05GU0RfWERSM19IICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL3hkcjQuaCBiL2ZzL25mc2QveGRyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTMzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnNkL3hkcjQuaApAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqICBTZXJ2ZXItc2lkZSB0eXBlcyBmb3IgTkZTdjQuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBLZW5kcmljayBTbWl0aCA8a21zbWl0aEB1bWljaC5lZHU+CisgKiAgQW5keSBBZGFtc29uICAgPGFuZHJvc0B1bWljaC5lZHU+CisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogIGFyZSBtZXQ6CisgKgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX05GU0RfWERSNF9ICisjZGVmaW5lIF9MSU5VWF9ORlNEX1hEUjRfSAorCisjaW5jbHVkZSAic3RhdGUuaCIKKyNpbmNsdWRlICJuZnNkLmgiCisKKyNkZWZpbmUgTkZTRDRfTUFYX1RBR0xFTgkxMjgKKyNkZWZpbmUgWERSX0xFTihuKSAgICAgICAgICAgICAgICAgICAgICgoKG4pICsgMykgJiB+MykKKworc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlIHsKKwlzdHJ1Y3Qgc3ZjX2ZoCQljdXJyZW50X2ZoOworCXN0cnVjdCBzdmNfZmgJCXNhdmVfZmg7CisJc3RydWN0IG5mczRfc3RhdGVvd25lcgkqcmVwbGF5X293bmVyOworCS8qIEZvciBzZXNzaW9ucyBEUkMgKi8KKwlzdHJ1Y3QgbmZzZDRfc2Vzc2lvbgkqc2Vzc2lvbjsKKwlzdHJ1Y3QgbmZzZDRfc2xvdAkqc2xvdDsKKwlfX2JlMzIJCQkqZGF0YXA7CisJc2l6ZV90CQkJaW92bGVuOworCXUzMgkJCW1pbm9ydmVyc2lvbjsKKwl1MzIJCQlzdGF0dXM7Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfaGFzX3Nlc3Npb24oc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjcykKK3sKKwlyZXR1cm4gY3MtPnNsb3QgIT0gTlVMTDsKK30KKworc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvIHsKKwl1MzIJCWF0b21pYzsKKwlib29sCQljaGFuZ2Vfc3VwcG9ydGVkOworCXUzMgkJYmVmb3JlX2N0aW1lX3NlYzsKKwl1MzIJCWJlZm9yZV9jdGltZV9uc2VjOworCXU2NAkJYmVmb3JlX2NoYW5nZTsKKwl1MzIJCWFmdGVyX2N0aW1lX3NlYzsKKwl1MzIJCWFmdGVyX2N0aW1lX25zZWM7CisJdTY0CQlhZnRlcl9jaGFuZ2U7Cit9OworCitzdHJ1Y3QgbmZzZDRfYWNjZXNzIHsKKwl1MzIJCWFjX3JlcV9hY2Nlc3M7ICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJYWNfc3VwcG9ydGVkOyAgICAgICAvKiByZXNwb25zZSAqLworCXUzMgkJYWNfcmVzcF9hY2Nlc3M7ICAgICAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X2Nsb3NlIHsKKwl1MzIJCWNsX3NlcWlkOyAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXN0YXRlaWRfdAljbF9zdGF0ZWlkOyAgICAgICAgIC8qIHJlcXVlc3QrcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICogY2xfc3RhdGVvd25lcjsJLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9jb21taXQgeworCXU2NAkJY29fb2Zmc2V0OyAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQljb19jb3VudDsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwluZnM0X3ZlcmlmaWVyCWNvX3ZlcmY7ICAgICAgICAgICAgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9jcmVhdGUgeworCXUzMgkJY3JfbmFtZWxlbjsgICAgICAgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQljcl9uYW1lOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCWNyX3R5cGU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJc3RydWN0IHsKKwkJCXUzMiBuYW1lbGVuOworCQkJY2hhciAqbmFtZTsKKwkJfSBsaW5rOyAgIC8qIE5GNExOSyAqLworCQlzdHJ1Y3QgeworCQkJdTMyIHNwZWNkYXRhMTsKKwkJCXUzMiBzcGVjZGF0YTI7CisJCX0gZGV2OyAgICAvKiBORjRCTEssIE5GNENIUiAqLworCX0gdTsKKwl1MzIJCWNyX2JtdmFsWzNdOyAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBpYXR0cgljcl9pYXR0cjsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIGNyX2NpbmZvOyAvKiByZXNwb25zZSAqLworCXN0cnVjdCBuZnM0X2FjbCAqY3JfYWNsOworfTsKKyNkZWZpbmUgY3JfbGlua2xlbgl1LmxpbmsubmFtZWxlbgorI2RlZmluZSBjcl9saW5rbmFtZQl1LmxpbmsubmFtZQorI2RlZmluZSBjcl9zcGVjZGF0YTEJdS5kZXYuc3BlY2RhdGExCisjZGVmaW5lIGNyX3NwZWNkYXRhMgl1LmRldi5zcGVjZGF0YTIKKworc3RydWN0IG5mc2Q0X2RlbGVncmV0dXJuIHsKKwlzdGF0ZWlkX3QJZHJfc3RhdGVpZDsKK307CisKK3N0cnVjdCBuZnNkNF9nZXRhdHRyIHsKKwl1MzIJCWdhX2JtdmFsWzNdOyAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBzdmNfZmgJKmdhX2ZocDsgICAgICAgICAgICAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X2xpbmsgeworCXUzMgkJbGlfbmFtZWxlbjsgICAgICAgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlsaV9uYW1lOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIGxpX2NpbmZvOyAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X2xvY2tfZGVuaWVkIHsKKwljbGllbnRpZF90CWxkX2NsaWVudGlkOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgICAqbGRfc29wOworCXU2NCAgICAgICAgICAgICBsZF9zdGFydDsKKwl1NjQgICAgICAgICAgICAgbGRfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICBsZF90eXBlOworfTsKKworc3RydWN0IG5mc2Q0X2xvY2sgeworCS8qIHJlcXVlc3QgKi8KKwl1MzIgICAgICAgICAgICAgbGtfdHlwZTsKKwl1MzIgICAgICAgICAgICAgbGtfcmVjbGFpbTsgICAgICAgICAvKiBib29sZWFuICovCisJdTY0ICAgICAgICAgICAgIGxrX29mZnNldDsKKwl1NjQgICAgICAgICAgICAgbGtfbGVuZ3RoOworCXUzMiAgICAgICAgICAgICBsa19pc19uZXc7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyICAgICAgICAgICAgIG9wZW5fc2VxaWQ7CisJCQlzdGF0ZWlkX3QgICAgICAgb3Blbl9zdGF0ZWlkOworCQkJdTMyICAgICAgICAgICAgIGxvY2tfc2VxaWQ7CisJCQljbGllbnRpZF90ICAgICAgY2xpZW50aWQ7CisJCQlzdHJ1Y3QgeGRyX25ldG9iaiBvd25lcjsKKwkJfSBuZXc7CisJCXN0cnVjdCB7CisJCQlzdGF0ZWlkX3QgICAgICAgbG9ja19zdGF0ZWlkOworCQkJdTMyICAgICAgICAgICAgIGxvY2tfc2VxaWQ7CisJCX0gb2xkOworCX0gdjsKKworCS8qIHJlc3BvbnNlICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RhdGVpZF90ICAgICAgICAgICAgICAgc3RhdGVpZDsKKwkJfSBvazsKKwkJc3RydWN0IG5mc2Q0X2xvY2tfZGVuaWVkICAgICAgICBkZW5pZWQ7CisJfSB1OworCS8qIFRoZSBsa19yZXBsYXlfb3duZXIgaXMgdGhlIG9wZW4gb3duZXIgaW4gdGhlIG9wZW5fdG9fbG9ja19vd25lcgorCSAqIGNhc2UgYW5kIHRoZSBsb2NrIG93bmVyIG90aGVyd2lzZTogKi8KKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpsa19yZXBsYXlfb3duZXI7Cit9OworI2RlZmluZSBsa19uZXdfb3Blbl9zZXFpZCAgICAgICB2Lm5ldy5vcGVuX3NlcWlkCisjZGVmaW5lIGxrX25ld19vcGVuX3N0YXRlaWQgICAgIHYubmV3Lm9wZW5fc3RhdGVpZAorI2RlZmluZSBsa19uZXdfbG9ja19zZXFpZCAgICAgICB2Lm5ldy5sb2NrX3NlcWlkCisjZGVmaW5lIGxrX25ld19jbGllbnRpZCAgICAgICAgIHYubmV3LmNsaWVudGlkCisjZGVmaW5lIGxrX25ld19vd25lciAgICAgICAgICAgIHYubmV3Lm93bmVyCisjZGVmaW5lIGxrX29sZF9sb2NrX3N0YXRlaWQgICAgIHYub2xkLmxvY2tfc3RhdGVpZAorI2RlZmluZSBsa19vbGRfbG9ja19zZXFpZCAgICAgICB2Lm9sZC5sb2NrX3NlcWlkCisKKyNkZWZpbmUgbGtfcmZsYWdzICAgICAgIHUub2sucmZsYWdzCisjZGVmaW5lIGxrX3Jlc3Bfc3RhdGVpZCB1Lm9rLnN0YXRlaWQKKyNkZWZpbmUgbGtfZGVuaWVkICAgICAgIHUuZGVuaWVkCisKKworc3RydWN0IG5mc2Q0X2xvY2t0IHsKKwl1MzIJCQkJbHRfdHlwZTsKKwljbGllbnRpZF90CQkJbHRfY2xpZW50aWQ7CisJc3RydWN0IHhkcl9uZXRvYmoJCWx0X293bmVyOworCXU2NAkJCQlsdF9vZmZzZXQ7CisJdTY0CQkJCWx0X2xlbmd0aDsKKwlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICogCWx0X3N0YXRlb3duZXI7CisJc3RydWN0IG5mc2Q0X2xvY2tfZGVuaWVkICAJbHRfZGVuaWVkOworfTsKKworIAorc3RydWN0IG5mc2Q0X2xvY2t1IHsKKwl1MzIgICAgICAgICAgICAgbHVfdHlwZTsKKwl1MzIgICAgICAgICAgICAgbHVfc2VxaWQ7CisJc3RhdGVpZF90ICAgICAgIGx1X3N0YXRlaWQ7CisJdTY0ICAgICAgICAgICAgIGx1X29mZnNldDsKKwl1NjQgICAgICAgICAgICAgbHVfbGVuZ3RoOworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgICpsdV9zdGF0ZW93bmVyOworfTsKKworCitzdHJ1Y3QgbmZzZDRfbG9va3VwIHsKKwl1MzIJCWxvX2xlbjsgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCWNoYXIgKgkJbG9fbmFtZTsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCit9OworCitzdHJ1Y3QgbmZzZDRfcHV0ZmggeworCXUzMgkJcGZfZmhsZW47ICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJY2hhcgkJKnBmX2ZodmFsOyAgICAgICAgICAvKiByZXF1ZXN0ICovCit9OworCitzdHJ1Y3QgbmZzZDRfb3BlbiB7CisJdTMyCQlvcF9jbGFpbV90eXBlOyAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgeGRyX25ldG9iaiBvcF9mbmFtZTsJICAgIC8qIHJlcXVlc3QgLSBldmVyeXRoaW5nIGJ1dCBDTEFJTV9QUkVWICovCisJdTMyCQlvcF9kZWxlZ2F0ZV90eXBlOyAgIC8qIHJlcXVlc3QgLSBDTEFJTV9QUkVWIG9ubHkgKi8KKwlzdGF0ZWlkX3QgICAgICAgb3BfZGVsZWdhdGVfc3RhdGVpZDsgLyogcmVxdWVzdCAtIHJlc3BvbnNlICovCisJdTMyCQlvcF9jcmVhdGU7ICAgICAJICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCW9wX2NyZWF0ZW1vZGU7ICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJb3BfYm12YWxbM107ICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IGlhdHRyCWlhdHRyOyAgICAgICAgICAgICAgLyogVU5DSEVDS0VENCwgR1VBUkRFRDQsIEVYQ0xVU0lWRTRfMSAqLworCW5mczRfdmVyaWZpZXIJdmVyZjsgICAgICAgICAgICAgICAvKiBFWENMVVNJVkU0ICovCisJY2xpZW50aWRfdAlvcF9jbGllbnRpZDsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgeGRyX25ldG9iaiBvcF9vd25lcjsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCW9wX3NlcWlkOyAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJb3Bfc2hhcmVfYWNjZXNzOyAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlvcF9zaGFyZV9kZW55OyAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdGF0ZWlkX3QJb3Bfc3RhdGVpZDsgICAgICAgICAvKiByZXNwb25zZSAqLworCXUzMgkJb3BfcmVjYWxsOyAgICAgICAgICAvKiByZWNhbGwgKi8KKwlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIG9wX2NpbmZvOyAvKiByZXNwb25zZSAqLworCXUzMgkJb3BfcmZsYWdzOyAgICAgICAgICAvKiByZXNwb25zZSAqLworCWludAkJb3BfdHJ1bmNhdGU7ICAgICAgICAvKiB1c2VkIGR1cmluZyBwcm9jZXNzaW5nICovCisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqb3Bfc3RhdGVvd25lcjsgLyogdXNlZCBkdXJpbmcgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBuZnM0X2FjbCAqb3BfYWNsOworfTsKKyNkZWZpbmUgb3BfaWF0dHIJaWF0dHIKKyNkZWZpbmUgb3BfdmVyZgkJdmVyZgorCitzdHJ1Y3QgbmZzZDRfb3Blbl9jb25maXJtIHsKKwlzdGF0ZWlkX3QJb2NfcmVxX3N0YXRlaWQJCS8qIHJlcXVlc3QgKi87CisJdTMyCQlvY19zZXFpZCAgICAJCS8qIHJlcXVlc3QgKi87CisJc3RhdGVpZF90CW9jX3Jlc3Bfc3RhdGVpZAkJLyogcmVzcG9uc2UgKi87CisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqIG9jX3N0YXRlb3duZXI7CS8qIHJlc3BvbnNlICovCit9OworCitzdHJ1Y3QgbmZzZDRfb3Blbl9kb3duZ3JhZGUgeworCXN0YXRlaWRfdCAgICAgICBvZF9zdGF0ZWlkOworCXUzMiAgICAgICAgICAgICBvZF9zZXFpZDsKKwl1MzIgICAgICAgICAgICAgb2Rfc2hhcmVfYWNjZXNzOworCXUzMiAgICAgICAgICAgICBvZF9zaGFyZV9kZW55OworCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKm9kX3N0YXRlb3duZXI7Cit9OworCisKK3N0cnVjdCBuZnNkNF9yZWFkIHsKKwlzdGF0ZWlkX3QJcmRfc3RhdGVpZDsgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTY0CQlyZF9vZmZzZXQ7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCXJkX2xlbmd0aDsgICAgICAgICAgLyogcmVxdWVzdCAqLworCWludAkJcmRfdmxlbjsKKwlzdHJ1Y3QgZmlsZSAgICAgKnJkX2ZpbHA7CisJCisJc3RydWN0IHN2Y19ycXN0ICpyZF9ycXN0cDsgICAgICAgICAgLyogcmVzcG9uc2UgKi8KKwlzdHJ1Y3Qgc3ZjX2ZoICogcmRfZmhwOyAgICAgICAgICAgICAvKiByZXNwb25zZSAqLworfTsKKworc3RydWN0IG5mc2Q0X3JlYWRkaXIgeworCXU2NAkJcmRfY29va2llOyAgICAgICAgICAvKiByZXF1ZXN0ICovCisJbmZzNF92ZXJpZmllcglyZF92ZXJmOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCXJkX2RpcmNvdW50OyAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJcmRfbWF4Y291bnQ7ICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlyZF9ibXZhbFszXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJkX3Jxc3RwOyAgICAgICAgICAvKiByZXNwb25zZSAqLworCXN0cnVjdCBzdmNfZmggKiByZF9maHA7ICAgICAgICAgICAgIC8qIHJlc3BvbnNlICovCisKKwlzdHJ1Y3QgcmVhZGRpcl9jZAljb21tb247CisJX19iZTMyICoJCWJ1ZmZlcjsKKwlpbnQJCQlidWZsZW47CisJX19iZTMyICoJCW9mZnNldDsKK307CisKK3N0cnVjdCBuZnNkNF9yZWxlYXNlX2xvY2tvd25lciB7CisJY2xpZW50aWRfdCAgICAgICAgcmxfY2xpZW50aWQ7CisJc3RydWN0IHhkcl9uZXRvYmogcmxfb3duZXI7Cit9Oworc3RydWN0IG5mc2Q0X3JlYWRsaW5rIHsKKwlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJsX3Jxc3RwOyAgICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IHN2Y19maCAqCXJsX2ZocDsgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworfTsKKworc3RydWN0IG5mc2Q0X3JlbW92ZSB7CisJdTMyCQlybV9uYW1lbGVuOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyICoJCXJtX25hbWU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgcm1fY2luZm87IC8qIHJlc3BvbnNlICovCit9OworCitzdHJ1Y3QgbmZzZDRfcmVuYW1lIHsKKwl1MzIJCXJuX3NuYW1lbGVuOyAgICAgICAgLyogcmVxdWVzdCAqLworCWNoYXIgKgkJcm5fc25hbWU7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlybl90bmFtZWxlbjsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyICoJCXJuX3RuYW1lOyAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgcm5fc2luZm87IC8qIHJlc3BvbnNlICovCisJc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvICBybl90aW5mbzsgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9zZWNpbmZvIHsKKwl1MzIgc2lfbmFtZWxlbjsJCQkJCS8qIHJlcXVlc3QgKi8KKwljaGFyICpzaV9uYW1lOwkJCQkJLyogcmVxdWVzdCAqLworCXN0cnVjdCBzdmNfZXhwb3J0ICpzaV9leHA7CQkJLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9zZXRhdHRyIHsKKwlzdGF0ZWlkX3QJc2Ffc3RhdGVpZDsgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzYV9ibXZhbFszXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgaWF0dHIJc2FfaWF0dHI7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJc3RydWN0IG5mczRfYWNsICpzYV9hY2w7Cit9OworCitzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQgeworCW5mczRfdmVyaWZpZXIJc2VfdmVyZjsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9uYW1lbGVuOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwljaGFyICoJCXNlX25hbWU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJc2VfY2FsbGJhY2tfcHJvZzsgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9jYWxsYmFja19uZXRpZF9sZW47ICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlzZV9jYWxsYmFja19uZXRpZF92YWw7ICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9jYWxsYmFja19hZGRyX2xlbjsgICAvKiByZXF1ZXN0ICovCisJY2hhciAqCQlzZV9jYWxsYmFja19hZGRyX3ZhbDsgICAvKiByZXF1ZXN0ICovCisJdTMyCQlzZV9jYWxsYmFja19pZGVudDsgIC8qIHJlcXVlc3QgKi8KKwljbGllbnRpZF90CXNlX2NsaWVudGlkOyAgICAgICAgLyogcmVzcG9uc2UgKi8KKwluZnM0X3ZlcmlmaWVyCXNlX2NvbmZpcm07ICAgICAgICAgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9zZXRjbGllbnRpZF9jb25maXJtIHsKKwljbGllbnRpZF90CXNjX2NsaWVudGlkOworCW5mczRfdmVyaWZpZXIJc2NfY29uZmlybTsKK307CisKKy8qIGFsc28gdXNlZCBmb3IgTlZFUklGWSAqLworc3RydWN0IG5mc2Q0X3ZlcmlmeSB7CisJdTMyCQl2ZV9ibXZhbFszXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1MzIJCXZlX2F0dHJsZW47ICAgICAgICAgLyogcmVxdWVzdCAqLworCWNoYXIgKgkJdmVfYXR0cnZhbDsgICAgICAgICAvKiByZXF1ZXN0ICovCit9OworCitzdHJ1Y3QgbmZzZDRfd3JpdGUgeworCXN0YXRlaWRfdAl3cl9zdGF0ZWlkOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwl1NjQJCXdyX29mZnNldDsgICAgICAgICAgLyogcmVxdWVzdCAqLworCXUzMgkJd3Jfc3RhYmxlX2hvdzsgICAgICAvKiByZXF1ZXN0ICovCisJdTMyCQl3cl9idWZsZW47ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwlpbnQJCXdyX3ZsZW47CisKKwl1MzIJCXdyX2J5dGVzX3dyaXR0ZW47ICAgLyogcmVzcG9uc2UgKi8KKwl1MzIJCXdyX2hvd193cml0dGVuOyAgICAgLyogcmVzcG9uc2UgKi8KKwluZnM0X3ZlcmlmaWVyCXdyX3ZlcmlmaWVyOyAgICAgICAgLyogcmVzcG9uc2UgKi8KK307CisKK3N0cnVjdCBuZnNkNF9leGNoYW5nZV9pZCB7CisJbmZzNF92ZXJpZmllcgl2ZXJpZmllcjsKKwlzdHJ1Y3QgeGRyX25ldG9iaiBjbG5hbWU7CisJdTMyCQlmbGFnczsKKwljbGllbnRpZF90CWNsaWVudGlkOworCXUzMgkJc2VxaWQ7CisJaW50CQlzcGFfaG93OworfTsKKworc3RydWN0IG5mc2Q0X3NlcXVlbmNlIHsKKwlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJc2Vzc2lvbmlkOwkJLyogcmVxdWVzdC9yZXNwb25zZSAqLworCXUzMgkJCXNlcWlkOwkJCS8qIHJlcXVlc3QvcmVzcG9uc2UgKi8KKwl1MzIJCQlzbG90aWQ7CQkJLyogcmVxdWVzdC9yZXNwb25zZSAqLworCXUzMgkJCW1heHNsb3RzOwkJLyogcmVxdWVzdC9yZXNwb25zZSAqLworCXUzMgkJCWNhY2hldGhpczsJCS8qIHJlcXVlc3QgKi8KKyNpZiAwCisJdTMyCQkJdGFyZ2V0X21heHNsb3RzOwkvKiByZXNwb25zZSAqLworCXUzMgkJCXN0YXR1c19mbGFnczsJCS8qIHJlc3BvbnNlICovCisjZW5kaWYgLyogbm90IHlldCAqLworfTsKKworc3RydWN0IG5mc2Q0X2Rlc3Ryb3lfc2Vzc2lvbiB7CisJc3RydWN0IG5mczRfc2Vzc2lvbmlkCXNlc3Npb25pZDsKK307CisKK3N0cnVjdCBuZnNkNF9vcCB7CisJaW50CQkJCQlvcG51bTsKKwlfX2JlMzIJCQkJCXN0YXR1czsKKwl1bmlvbiB7CisJCXN0cnVjdCBuZnNkNF9hY2Nlc3MJCWFjY2VzczsKKwkJc3RydWN0IG5mc2Q0X2Nsb3NlCQljbG9zZTsKKwkJc3RydWN0IG5mc2Q0X2NvbW1pdAkJY29tbWl0OworCQlzdHJ1Y3QgbmZzZDRfY3JlYXRlCQljcmVhdGU7CisJCXN0cnVjdCBuZnNkNF9kZWxlZ3JldHVybglkZWxlZ3JldHVybjsKKwkJc3RydWN0IG5mc2Q0X2dldGF0dHIJCWdldGF0dHI7CisJCXN0cnVjdCBzdmNfZmggKgkJCWdldGZoOworCQlzdHJ1Y3QgbmZzZDRfbGluawkJbGluazsKKwkJc3RydWN0IG5mc2Q0X2xvY2sJCWxvY2s7CisJCXN0cnVjdCBuZnNkNF9sb2NrdAkJbG9ja3Q7CisJCXN0cnVjdCBuZnNkNF9sb2NrdQkJbG9ja3U7CisJCXN0cnVjdCBuZnNkNF9sb29rdXAJCWxvb2t1cDsKKwkJc3RydWN0IG5mc2Q0X3ZlcmlmeQkJbnZlcmlmeTsKKwkJc3RydWN0IG5mc2Q0X29wZW4JCW9wZW47CisJCXN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0Jb3Blbl9jb25maXJtOworCQlzdHJ1Y3QgbmZzZDRfb3Blbl9kb3duZ3JhZGUJb3Blbl9kb3duZ3JhZGU7CisJCXN0cnVjdCBuZnNkNF9wdXRmaAkJcHV0Zmg7CisJCXN0cnVjdCBuZnNkNF9yZWFkCQlyZWFkOworCQlzdHJ1Y3QgbmZzZDRfcmVhZGRpcgkJcmVhZGRpcjsKKwkJc3RydWN0IG5mc2Q0X3JlYWRsaW5rCQlyZWFkbGluazsKKwkJc3RydWN0IG5mc2Q0X3JlbW92ZQkJcmVtb3ZlOworCQlzdHJ1Y3QgbmZzZDRfcmVuYW1lCQlyZW5hbWU7CisJCWNsaWVudGlkX3QJCQlyZW5ldzsKKwkJc3RydWN0IG5mc2Q0X3NlY2luZm8JCXNlY2luZm87CisJCXN0cnVjdCBuZnNkNF9zZXRhdHRyCQlzZXRhdHRyOworCQlzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQJc2V0Y2xpZW50aWQ7CisJCXN0cnVjdCBuZnNkNF9zZXRjbGllbnRpZF9jb25maXJtIHNldGNsaWVudGlkX2NvbmZpcm07CisJCXN0cnVjdCBuZnNkNF92ZXJpZnkJCXZlcmlmeTsKKwkJc3RydWN0IG5mc2Q0X3dyaXRlCQl3cml0ZTsKKwkJc3RydWN0IG5mc2Q0X3JlbGVhc2VfbG9ja293bmVyCXJlbGVhc2VfbG9ja293bmVyOworCisJCS8qIE5GU3Y0LjEgKi8KKwkJc3RydWN0IG5mc2Q0X2V4Y2hhbmdlX2lkCWV4Y2hhbmdlX2lkOworCQlzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24JY3JlYXRlX3Nlc3Npb247CisJCXN0cnVjdCBuZnNkNF9kZXN0cm95X3Nlc3Npb24JZGVzdHJveV9zZXNzaW9uOworCQlzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UJCXNlcXVlbmNlOworCX0gdTsKKwlzdHJ1Y3QgbmZzNF9yZXBsYXkgKgkJCXJlcGxheTsKK307CisKK3N0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgeworCS8qIHNjcmF0Y2ggdmFyaWFibGVzIGZvciBYRFIgZGVjb2RlICovCisJX19iZTMyICoJCQlwOworCV9fYmUzMiAqCQkJZW5kOworCXN0cnVjdCBwYWdlICoqCQkJcGFnZWxpc3Q7CisJaW50CQkJCXBhZ2VsZW47CisJX19iZTMyCQkJCXRtcFs4XTsKKwlfX2JlMzIgKgkJCXRtcHA7CisJc3RydWN0IHRtcGJ1ZiB7CisJCXN0cnVjdCB0bXBidWYgKm5leHQ7CisJCXZvaWQgKCpyZWxlYXNlKShjb25zdCB2b2lkICopOworCQl2b2lkICpidWY7CisJfQkJCQkqdG9fZnJlZTsKKworCXN0cnVjdCBzdmNfcnFzdAkJCSpycXN0cDsKKworCXUzMgkJCQl0YWdsZW47CisJY2hhciAqCQkJCXRhZzsKKwl1MzIJCQkJbWlub3J2ZXJzaW9uOworCXUzMgkJCQlvcGNudDsKKwlzdHJ1Y3QgbmZzZDRfb3AJCQkqb3BzOworCXN0cnVjdCBuZnNkNF9vcAkJCWlvcHNbOF07Cit9OworCitzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgeworCS8qIHNjcmF0Y2ggdmFyaWFibGVzIGZvciBYRFIgZW5jb2RlICovCisJX19iZTMyICoJCQlwOworCV9fYmUzMiAqCQkJZW5kOworCXN0cnVjdCB4ZHJfYnVmICoJCXhidWY7CisJc3RydWN0IHN2Y19ycXN0ICoJCXJxc3RwOworCisJdTMyCQkJCXRhZ2xlbjsKKwljaGFyICoJCQkJdGFnOworCXUzMgkJCQlvcGNudDsKKwlfX2JlMzIgKgkJCXRhZ3A7IC8qIHRhZywgb3Bjb3VudCBlbmNvZGUgbG9jYXRpb24gKi8KKwlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUJY3N0YXRlOworfTsKKworc3RhdGljIGlubGluZSBib29sIG5mc2Q0X2lzX3NvbG9fc2VxdWVuY2Uoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQoreworCXN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3MgPSByZXNwLT5ycXN0cC0+cnFfYXJncDsKKwlyZXR1cm4gcmVzcC0+b3BjbnQgPT0gMSAmJiBhcmdzLT5vcHNbMF0ub3BudW0gPT0gT1BfU0VRVUVOQ0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBuZnNkNF9ub3RfY2FjaGVkKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCkKK3sKKwlyZXR1cm4gIXJlc3AtPmNzdGF0ZS5zbG90LT5zbF9jYWNoZXRoaXMgfHwgbmZzZDRfaXNfc29sb19zZXF1ZW5jZShyZXNwKTsKK30KKworI2RlZmluZSBORlM0X1NWQ19YRFJTSVpFCQlzaXplb2Yoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncykKKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfY2hhbmdlX2luZm8oc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvICpjaW5mbywgc3RydWN0IHN2Y19maCAqZmhwKQoreworCUJVR19PTighZmhwLT5maF9wcmVfc2F2ZWQgfHwgIWZocC0+ZmhfcG9zdF9zYXZlZCk7CisJY2luZm8tPmF0b21pYyA9IDE7CisJY2luZm8tPmNoYW5nZV9zdXBwb3J0ZWQgPSBJU19JX1ZFUlNJT04oZmhwLT5maF9kZW50cnktPmRfaW5vZGUpOworCWlmIChjaW5mby0+Y2hhbmdlX3N1cHBvcnRlZCkgeworCQljaW5mby0+YmVmb3JlX2NoYW5nZSA9IGZocC0+ZmhfcHJlX2NoYW5nZTsKKwkJY2luZm8tPmFmdGVyX2NoYW5nZSA9IGZocC0+ZmhfcG9zdF9jaGFuZ2U7CisJfSBlbHNlIHsKKwkJY2luZm8tPmJlZm9yZV9jdGltZV9zZWMgPSBmaHAtPmZoX3ByZV9jdGltZS50dl9zZWM7CisJCWNpbmZvLT5iZWZvcmVfY3RpbWVfbnNlYyA9IGZocC0+ZmhfcHJlX2N0aW1lLnR2X25zZWM7CisJCWNpbmZvLT5hZnRlcl9jdGltZV9zZWMgPSBmaHAtPmZoX3Bvc3RfYXR0ci5jdGltZS50dl9zZWM7CisJCWNpbmZvLT5hZnRlcl9jdGltZV9uc2VjID0gZmhwLT5maF9wb3N0X2F0dHIuY3RpbWUudHZfbnNlYzsKKwl9Cit9CisKK2ludCBuZnM0c3ZjX2VuY29kZV92b2lkcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKK2ludCBuZnM0c3ZjX2RlY29kZV9jb21wb3VuZGFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAorCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICopOworaW50IG5mczRzdmNfZW5jb2RlX2NvbXBvdW5kcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICopOwordm9pZCBuZnNkNF9lbmNvZGVfb3BlcmF0aW9uKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqLCBzdHJ1Y3QgbmZzZDRfb3AgKik7Cit2b2lkIG5mc2Q0X2VuY29kZV9yZXBsYXkoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBzdHJ1Y3QgbmZzZDRfb3AgKm9wKTsKK19fYmUzMiBuZnNkNF9lbmNvZGVfZmF0dHIoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqZXhwLAorCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX2JlMzIgKmJ1ZmZlciwgaW50ICpjb3VudHAsCisJCSAgICAgICB1MzIgKmJtdmFsLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgaW50IGlnbm9yZV9jcm9zc21udCk7CitleHRlcm4gX19iZTMyIG5mc2Q0X3NldGNsaWVudGlkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQlzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQgKnNldGNsaWQpOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQlzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybSAqc2V0Y2xpZW50aWRfY29uZmlybSk7CitleHRlcm4gdm9pZCBuZnNkNF9zdG9yZV9jYWNoZV9lbnRyeShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3ApOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9yZXBsYXlfY2FjaGVfZW50cnkoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLAorCQlzdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgKnNlcSk7CitleHRlcm4gX19iZTMyIG5mc2Q0X2V4Y2hhbmdlX2lkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorc3RydWN0IG5mc2Q0X2V4Y2hhbmdlX2lkICopOworCQlleHRlcm4gX19iZTMyIG5mc2Q0X2NyZWF0ZV9zZXNzaW9uKHN0cnVjdCBzdmNfcnFzdCAqLAorCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKKwkJc3RydWN0IG5mc2Q0X2NyZWF0ZV9zZXNzaW9uICopOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9zZXF1ZW5jZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCisJCXN0cnVjdCBuZnNkNF9zZXF1ZW5jZSAqKTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfZGVzdHJveV9zZXNzaW9uKHN0cnVjdCBzdmNfcnFzdCAqLAorCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKKwkJc3RydWN0IG5mc2Q0X2Rlc3Ryb3lfc2Vzc2lvbiAqKTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfcHJvY2Vzc19vcGVuMShzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKKwkJc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9wcm9jZXNzX29wZW4yKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfb3Blbl9jb25maXJtKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLCBzdHJ1Y3QgbmZzZDRfb3Blbl9jb25maXJtICpvYyk7CitleHRlcm4gX19iZTMyIG5mc2Q0X2Nsb3NlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQlzdHJ1Y3QgbmZzZDRfY2xvc2UgKmNsb3NlKTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCisJCXN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZSAqb2QpOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9sb2NrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQlzdHJ1Y3QgbmZzZDRfbG9jayAqbG9jayk7CitleHRlcm4gX19iZTMyIG5mc2Q0X2xvY2t0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQlzdHJ1Y3QgbmZzZDRfbG9ja3QgKmxvY2t0KTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfbG9ja3Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCisJCXN0cnVjdCBuZnNkNF9sb2NrdSAqbG9ja3UpOworZXh0ZXJuIF9fYmUzMgorbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCisJCXN0cnVjdCBuZnNkNF9yZWxlYXNlX2xvY2tvd25lciAqcmxvY2tvd25lcik7CitleHRlcm4gdm9pZCBuZnNkNF9yZWxlYXNlX2NvbXBvdW5kYXJncyhzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICopOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9kZWxlZ3JldHVybihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwgc3RydWN0IG5mc2Q0X2RlbGVncmV0dXJuICpkcik7CitleHRlcm4gX19iZTMyIG5mc2Q0X3JlbmV3KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCQkgIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLCBjbGllbnRpZF90ICpjbGlkKTsKKyNlbmRpZgorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zdXBlci5jIGIvZnMvbmlsZnMyL3N1cGVyLmMKaW5kZXggNTQwM2IzZS4uODE3M2ZhZSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3N1cGVyLmMKKysrIGIvZnMvbmlsZnMyL3N1cGVyLmMKQEAgLTExMTgsOCArMTExOCw3IEBACiAJLyogQWJhbmRvbmluZyB0aGUgbmV3bHkgYWxsb2NhdGVkIHN1cGVyYmxvY2sgKi8KIAltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJcHV0X25pbGZzKG5pbGZzKTsKLQl1cF93cml0ZSgmcy0+c191bW91bnQpOwotCWRlYWN0aXZhdGVfc3VwZXIocyk7CisJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CiAJLyoKIAkgKiBkZWFjdGl2YXRlX3N1cGVyKCkgaW52b2tlcyBjbG9zZV9iZGV2X2V4Y2x1c2l2ZSgpLgogCSAqIFdlIG11c3QgZmluaXNoIGFsbCBwb3N0LWNsZWFuaW5nIGJlZm9yZSB0aGlzIGNhbGw7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCmluZGV4IDVlZjVmMzYuLjgyNzFjZjAgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCkBAIC02NDYsNiArNjQ2LDcgQEAKIAlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwOwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCWludCBmZCwgcmV0OwogCiAJLyogQ2hlY2sgdGhlIElOXyogY29uc3RhbnRzIGZvciBjb25zaXN0ZW5jeS4gICovCkBAIC02NTksMTIgKzY2MCw2IEBACiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIGZkOwogCi0JZmlscCA9IGdldF9lbXB0eV9maWxwKCk7Ci0JaWYgKCFmaWxwKSB7Ci0JCXJldCA9IC1FTkZJTEU7Ci0JCWdvdG8gb3V0X3B1dF9mZDsKLQl9Ci0KIAl1c2VyID0gZ2V0X2N1cnJlbnRfdXNlcigpOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PQogCQkJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMpKSB7CkBAIC02NzksMjQgKzY3NCwyOCBAQAogCQlnb3RvIG91dF9mcmVlX3VpZDsKIAl9CiAKLQlmaWxwLT5mX29wID0gJmlub3RpZnlfZm9wczsKLQlmaWxwLT5mX3BhdGgubW50ID0gbW50Z2V0KGlub3RpZnlfbW50KTsKLQlmaWxwLT5mX3BhdGguZGVudHJ5ID0gZGdldChpbm90aWZ5X21udC0+bW50X3Jvb3QpOwotCWZpbHAtPmZfbWFwcGluZyA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKLQlmaWxwLT5mX21vZGUgPSBGTU9ERV9SRUFEOworCWF0b21pY19pbmMoJnVzZXItPmlub3RpZnlfZGV2cyk7CisKKwlwYXRoLm1udCA9IGlub3RpZnlfbW50OworCXBhdGguZGVudHJ5ID0gaW5vdGlmeV9tbnQtPm1udF9yb290OworCXBhdGhfZ2V0KCZwYXRoKTsKKwlmaWxwID0gYWxsb2NfZmlsZSgmcGF0aCwgRk1PREVfUkVBRCwgJmlub3RpZnlfZm9wcyk7CisJaWYgKCFmaWxwKQorCQlnb3RvIEVuZmlsZTsKKwogCWZpbHAtPmZfZmxhZ3MgPSBPX1JET05MWSB8IChmbGFncyAmIE9fTk9OQkxPQ0spOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGdyb3VwOwogCi0JYXRvbWljX2luYygmdXNlci0+aW5vdGlmeV9kZXZzKTsKLQogCWZkX2luc3RhbGwoZmQsIGZpbHApOwogCiAJcmV0dXJuIGZkOwogCitFbmZpbGU6CisJcmV0ID0gLUVORklMRTsKKwlwYXRoX3B1dCgmcGF0aCk7CisJYXRvbWljX2RlYygmdXNlci0+aW5vdGlmeV9kZXZzKTsKIG91dF9mcmVlX3VpZDoKIAlmcmVlX3VpZCh1c2VyKTsKLQlwdXRfZmlscChmaWxwKTsKLW91dF9wdXRfZmQ6CiAJcHV0X3VudXNlZF9mZChmZCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCA5OTM4MDM0Li5kYzI1MDVhIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC01MzAsNyArNTMwLDcgQEAKICAqIHRoZSBudGZzIGlub2RlLgogICoKICAqIFE6IFdoYXQgbG9ja3MgYXJlIGhlbGQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkPwotICogQTogaV9zdGF0ZSBoYXMgSV9MT0NLIHNldCwgaGVuY2UgdGhlIGlub2RlIGlzIGxvY2tlZCwgYWxzbworICogQTogaV9zdGF0ZSBoYXMgSV9ORVcgc2V0LCBoZW5jZSB0aGUgaW5vZGUgaXMgbG9ja2VkLCBhbHNvCiAgKiAgICBpX2NvdW50IGlzIHNldCB0byAxLCBzbyBpdCBpcyBub3QgZ29pbmcgdG8gZ28gYXdheQogICogICAgaV9mbGFncyBpcyBzZXQgdG8gMCBhbmQgd2UgaGF2ZSBubyBidXNpbmVzcyB0b3VjaGluZyBpdC4gIE9ubHkgYW4gaW9jdGwoKQogICogICAgaXMgYWxsb3dlZCB0byB3cml0ZSB0byB0aGVtLiBXZSBzaG91bGQgb2YgY291cnNlIGJlIGhvbm91cmluZyB0aGVtIGJ1dApAQCAtMTIwNyw3ICsxMjA3LDcgQEAKICAqIG5lY2Vzc2FyeSBmaWVsZHMgaW4gQHZpIGFzIHdlbGwgYXMgaW5pdGlhbGl6aW5nIHRoZSBudGZzIGlub2RlLgogICoKICAqIFE6IFdoYXQgbG9ja3MgYXJlIGhlbGQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkPwotICogQTogaV9zdGF0ZSBoYXMgSV9MT0NLIHNldCwgaGVuY2UgdGhlIGlub2RlIGlzIGxvY2tlZCwgYWxzbworICogQTogaV9zdGF0ZSBoYXMgSV9ORVcgc2V0LCBoZW5jZSB0aGUgaW5vZGUgaXMgbG9ja2VkLCBhbHNvCiAgKiAgICBpX2NvdW50IGlzIHNldCB0byAxLCBzbyBpdCBpcyBub3QgZ29pbmcgdG8gZ28gYXdheQogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC1lcnJubyBvbiBlcnJvci4gIEluIHRoZSBlcnJvciBjYXNlLCB0aGUgaW5vZGUgd2lsbApAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKICAqIG5vcm1hbCBkaXJlY3RvcnkgaW5vZGVzLgogICoKICAqIFE6IFdoYXQgbG9ja3MgYXJlIGhlbGQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkPwotICogQTogaV9zdGF0ZSBoYXMgSV9MT0NLIHNldCwgaGVuY2UgdGhlIGlub2RlIGlzIGxvY2tlZCwgYWxzbworICogQTogaV9zdGF0ZSBoYXMgSV9ORVcgc2V0LCBoZW5jZSB0aGUgaW5vZGUgaXMgbG9ja2VkLCBhbHNvCiAgKiAgICBpX2NvdW50IGlzIHNldCB0byAxLCBzbyBpdCBpcyBub3QgZ29pbmcgdG8gZ28gYXdheQogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC1lcnJubyBvbiBlcnJvci4gIEluIHRoZSBlcnJvciBjYXNlLCB0aGUgaW5vZGUgd2lsbApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCBmYmVhZWM3Li5lM2U0NzQxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hY2wuYworKysgYi9mcy9vY2ZzMi9hY2wuYwpAQCAtMzMxLDEzICszMzEsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc2l6ZV90IG9jZnMyX3hhdHRyX2xpc3RfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHNpemVfdCBvY2ZzMl94YXR0cl9saXN0X2FjbF9hY2Nlc3Moc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCQkgIGNoYXIgKmxpc3QsCiAJCQkJCSAgc2l6ZV90IGxpc3RfbGVuLAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgc2l6ZV90IG5hbWVfbGVuKQorCQkJCQkgIHNpemVfdCBuYW1lX2xlbiwKKwkJCQkJICBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRlbnRyeS0+ZF9zYik7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyk7CiAKIAlpZiAoIShvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSkKQEAgLTM0OCwxMyArMzQ5LDE0IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyBzaXplX3Qgb2NmczJfeGF0dHJfbGlzdF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHNpemVfdCBvY2ZzMl94YXR0cl9saXN0X2FjbF9kZWZhdWx0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkJICAgY2hhciAqbGlzdCwKIAkJCQkJICAgc2l6ZV90IGxpc3RfbGVuLAogCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICBzaXplX3QgbmFtZV9sZW4pCisJCQkJCSAgIHNpemVfdCBuYW1lX2xlbiwKKwkJCQkJICAgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkZW50cnktPmRfc2IpOwogCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUKTsKIAogCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKQpAQCAtMzY1LDE5ICszNjcsMTkgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl94YXR0cl9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAgaW50IHR5cGUsCi0JCQkgICAgICAgdm9pZCAqYnVmZmVyLAotCQkJICAgICAgIHNpemVfdCBzaXplKQorc3RhdGljIGludCBvY2ZzMl94YXR0cl9nZXRfYWNsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkZW50cnktPmRfc2IpOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgcmV0OwogCisJaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCEob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWFjbCA9IG9jZnMyX2dldF9hY2woaW5vZGUsIHR5cGUpOworCWFjbCA9IG9jZnMyX2dldF9hY2woZGVudHJ5LT5kX2lub2RlLCB0eXBlKTsKIAlpZiAoSVNfRVJSKGFjbCkpCiAJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAJaWYgKGFjbCA9PSBOVUxMKQpAQCAtMzg4LDM1ICszOTAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2dldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgICB2b2lkICpidWZmZXIsCi0JCQkJICAgICAgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NldF9hY2woc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIG9jZnMyX3hhdHRyX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYnVmZmVyLCBzaXplKTsKLX0KLQotc3RhdGljIGludCBvY2ZzMl94YXR0cl9nZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgICAgdm9pZCAqYnVmZmVyLAotCQkJCSAgICAgICBzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgYnVmZmVyLCBzaXplKTsKLX0KLQotc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAgaW50IHR5cGUsCi0JCQkgICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsCi0JCQkgICAgICAgc2l6ZV90IHNpemUpCi17CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIShvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC00NDIsMzggKzQyNSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLAotCQkJCSAgICAgIHNpemVfdCBzaXplLAotCQkJCSAgICAgIGludCBmbGFncykKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gb2NmczJfeGF0dHJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCB2YWx1ZSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2FjbF9kZWZhdWx0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLAotCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgaW50IGZsYWdzKQotewotCWlmIChzdHJjbXAobmFtZSwgIiIpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBvY2ZzMl94YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCB2YWx1ZSwgc2l6ZSk7Ci19Ci0KIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKIAkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKKwkuZmxhZ3MJPSBBQ0xfVFlQRV9BQ0NFU1MsCiAJLmxpc3QJPSBvY2ZzMl94YXR0cl9saXN0X2FjbF9hY2Nlc3MsCi0JLmdldAk9IG9jZnMyX3hhdHRyX2dldF9hY2xfYWNjZXNzLAotCS5zZXQJPSBvY2ZzMl94YXR0cl9zZXRfYWNsX2FjY2VzcywKKwkuZ2V0CT0gb2NmczJfeGF0dHJfZ2V0X2FjbCwKKwkuc2V0CT0gb2NmczJfeGF0dHJfc2V0X2FjbCwKIH07CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CiAJLnByZWZpeAk9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULAorCS5mbGFncwk9IEFDTF9UWVBFX0RFRkFVTFQsCiAJLmxpc3QJPSBvY2ZzMl94YXR0cl9saXN0X2FjbF9kZWZhdWx0LAotCS5nZXQJPSBvY2ZzMl94YXR0cl9nZXRfYWNsX2RlZmF1bHQsCi0JLnNldAk9IG9jZnMyX3hhdHRyX3NldF9hY2xfZGVmYXVsdCwKKwkuZ2V0CT0gb2NmczJfeGF0dHJfZ2V0X2FjbCwKKwkuc2V0CT0gb2NmczJfeGF0dHJfc2V0X2FjbCwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCA3YzcxOThhLi5kMTdiZGM3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTE3NjUsOSArMTc2NSw5IEBACiAgKgogICogVGhlIGFycmF5IGluZGV4IG9mIHRoZSBzdWJ0cmVlIHJvb3QgaXMgcGFzc2VkIGJhY2suCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpCitpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpCiB7CiAJaW50IGkgPSAwOwogCkBAIC0yODcyLDggKzI4NzIsOCBAQAogICogVGhpcyBsb29rcyBzaW1pbGFyLCBidXQgaXMgc3VidGx5IGRpZmZlcmVudCB0bwogICogb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoKS4KICAqLwotc3RhdGljIGludCBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgdTMyICpjcG9zKQoraW50IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCB1MzIgKmNwb3MpCiB7CiAJaW50IGksIGosIHJldCA9IDA7CiAJdTY0IGJsa25vOwpAQCAtNzE5MCw4ICs3MTkwLDggQEAKIAkgKiB3YWl0IG9uIHRoZW0gLSB0aGUgdHJ1bmNhdGVfaW5vZGVfcGFnZXMoKSBjYWxsIGxhdGVyIHdpbGwKIAkgKiBkbyB0aGF0IGZvciB1cy4KIAkgKi8KLQlyZXQgPSBkb19zeW5jX21hcHBpbmdfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgcmFuZ2Vfc3RhcnQsCi0JCQkJICAgIHJhbmdlX2VuZCAtIDEsIFNZTkNfRklMRV9SQU5HRV9XUklURSk7CisJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHJhbmdlX3N0YXJ0LAorCQkJCSAgICAgICByYW5nZV9lbmQgLSAxKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmggYi9mcy9vY2ZzMi9hbGxvYy5oCmluZGV4IDljMTIyZDU3Li4xZGI0MzU5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5oCisrKyBiL2ZzL29jZnMyL2FsbG9jLmgKQEAgLTMxNyw0ICszMTcsOSBAQAogaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IG9jZnMyX2NhY2hpbmdfaW5mbyAqY2ksCiAJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgpOworaW50IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCB1MzIgKmNwb3MpOworaW50IG9jZnMyX2ZpbmRfc3VidHJlZV9yb290KHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKmxlZnQsCisJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0KTsKICNlbmRpZiAvKiBPQ0ZTMl9BTExPQ19IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggZGViMmIxMy4uM2RhZTRhMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtNTQ3LDYgKzU0Nyw5IEBACiAgKgogICogY2FsbGVkIGxpa2UgdGhpczogZGlvLT5nZXRfYmxvY2tzKGRpby0+aW5vZGUsIGZzX3N0YXJ0YmxrLAogICogCQkJCQlmc19jb3VudCwgbWFwX2JoLCBkaW8tPnJ3ID09IFdSSVRFKTsKKyAqCisgKiBOb3RlIHRoYXQgd2UgbmV2ZXIgYm90aGVyIHRvIGFsbG9jYXRlIGJsb2NrcyBoZXJlLCBhbmQgdGh1cyBpZ25vcmUgdGhlCisgKiBjcmVhdGUgYXJndW1lbnQuCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfZGlyZWN0X0lPX2dldF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCkBAIC01NjMsMTQgKzU2Niw2IEBACiAKIAlpbm9kZV9ibG9ja3MgPSBvY2ZzMl9ibG9ja3NfZm9yX2J5dGVzKGlub2RlLT5pX3NiLCBpX3NpemVfcmVhZChpbm9kZSkpOwogCi0JLyoKLQkgKiBBbnkgd3JpdGUgcGFzdCBFT0YgaXMgbm90IGFsbG93ZWQgYmVjYXVzZSB3ZSdkIGJlIGV4dGVuZGluZy4KLQkgKi8KLQlpZiAoY3JlYXRlICYmIChpYmxvY2sgKyBtYXhfYmxvY2tzKSA+IGlub2RlX2Jsb2NrcykgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhaWw7Ci0JfQotCiAJLyogVGhpcyBmaWd1cmVzIG91dCB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBjb250aWd1b3VzIGJsb2NrLCBhbmQKIAkgKiBvdXIgbG9naWNhbCBvZmZzZXQgKi8KIAlyZXQgPSBvY2ZzMl9leHRlbnRfbWFwX2dldF9ibG9ja3MoaW5vZGUsIGlibG9jaywgJnBfYmxrbm8sCkBAIC01ODIsMTUgKzU3Nyw2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlpZiAoIW9jZnMyX3NwYXJzZV9hbGxvYyhPQ0ZTMl9TQihpbm9kZS0+aV9zYikpICYmICFwX2Jsa25vICYmIGNyZWF0ZSkgewotCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCSAgICAiSW5vZGUgJWxsdSBoYXMgYSBob2xlIGF0IGJsb2NrICVsbHVcbiIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpYmxvY2spOwotCQlyZXQgPSAtRVJPRlM7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KIAkvKiBXZSBzaG91bGQgYWxyZWFkeSBDb1cgdGhlIHJlZmNvdW50ZWQgZXh0ZW50LiAqLwogCUJVR19PTihleHRfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCk7CiAJLyoKQEAgLTYwMSwyMCArNTg3LDggQEAKIAkgKi8KIAlpZiAocF9ibGtubyAmJiAhKGV4dF9mbGFncyAmIE9DRlMyX0VYVF9VTldSSVRURU4pKQogCQltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgcF9ibGtubyk7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIG9jZnMyX3ByZXBhcmVfaW5vZGVfZm9yX3dyaXRlKCkgc2hvdWxkIGhhdmUgY2F1Z2h0Ci0JCSAqIHRoZSBjYXNlIHdoZXJlIHdlJ2QgYmUgZmlsbGluZyBhIGhvbGUgYW5kIHRyaWdnZXJlZAotCQkgKiBhIGJ1ZmZlcmVkIHdyaXRlIGluc3RlYWQuCi0JCSAqLwotCQlpZiAoY3JlYXRlKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBiYWlsOwotCQl9Ci0KKwllbHNlCiAJCWNsZWFyX2J1ZmZlcl9tYXBwZWQoYmhfcmVzdWx0KTsKLQl9CiAKIAkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgbWFwIG1vcmUgdGhhbiBtYXhfYmxvY2tzIGJsb2NrcyBoZXJlIGFzCiAJICAgdGhhdCdzIGFsbCB0aGUga2VybmVsIHdpbGwgaGFuZGxlIGF0IHRoaXMgcG9pbnQuICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCBmMDEwYjIyLi4zZTliNDYwMDIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjEwOCw2ICsyMTA4LDcgQEAKIAl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAorCWlub2RlLT5pX25saW5rID0gMDsKIAkvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLAogCQkJCSAgICAwLCAmbmV3X2RpX2JoLCBwYXJlbnRfZGlfYmgsIGhhbmRsZSwKQEAgLTIxMzYsNiArMjEzNyw3IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAorCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIGxlYXZlOgogCWlmIChzdGF0dXMgPCAwICYmIGRpZF9xdW90YV9pbm9kZSkKIAkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwpAQCAtMjI2Nyw2ICsyMjY5LDggQEAKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAlsZTMyX2FkZF9jcHUoJmRpLT5pX2ZsYWdzLCAtT0NGUzJfT1JQSEFORURfRkwpOwogCWRpLT5pX29ycGhhbmVkX3Nsb3QgPSAwOworCWlub2RlLT5pX25saW5rID0gMTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZGksIGlub2RlLT5pX25saW5rKTsKIAlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOwogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKQEAgLTIyODQsNyArMjI4OCw2IEBACiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJZGVudHJ5LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlzdGF0dXMgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCAzMDk2N2UzLi43NGRiMmJlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogfQogCi12b2lkIG9jZnMyX2tyZWZfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgdm9pZCBvY2ZzMl9rcmVmX3JlbW92ZV9yZWZjb3VudF90cmVlKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlID0KIAkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlLCByZl9nZXRjbnQpOwpAQCAtNTI0LDIzICs1MjQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWVfYnlfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJ3LAotCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICoqcmV0X3RyZWUsCi0JCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmVmX2JoKQotewotCWludCByZXQ7Ci0JdTY0IHJlZl9ibGtubzsKLQotCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9ibG9jayhpbm9kZSwgJnJlZl9ibGtubyk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZShPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIHJlZl9ibGtubywKLQkJCQkJcncsIHJldF90cmVlLCByZWZfYmgpOwotfQotCiB2b2lkIG9jZnMyX3VubG9ja19yZWZjb3VudF90cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF90cmVlICp0cmVlLCBpbnQgcncpCiB7CkBAIC05NjksNiArOTUyLDEwMyBAQAogfQogCiAvKgorICogRmluZCB0aGUgZW5kIHJhbmdlIGZvciBhIGxlYWYgcmVmY291bnQgYmxvY2sgaW5kaWNhdGVkIGJ5CisgKiBlbC0+bF9yZWNzW2luZGV4XS5lX2Jsa25vLgorICovCitzdGF0aWMgaW50IG9jZnMyX2dldF9yZWZjb3VudF9jcG9zX2VuZChzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWZfcm9vdF9iaCwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWIsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkJICAgICAgIGludCBpbmRleCwgIHUzMiAqY3Bvc19lbmQpCit7CisJaW50IHJldCwgaSwgc3VidHJlZV9yb290OworCXUzMiBjcG9zOworCXU2NCBibGtubzsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKKwlzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoID0gTlVMTCwgKnJpZ2h0X3BhdGggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnRtcF9lbDsKKworCWlmIChpbmRleCA8IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMSkgeworCQkvKgorCQkgKiBXZSBoYXZlIGEgZXh0ZW50IHJlYyBhZnRlciBpbmRleCwgc28ganVzdCB1c2UgdGhlIGVfY3BvcworCQkgKiBvZiB0aGUgbmV4dCBleHRlbnQgcmVjLgorCQkgKi8KKwkJKmNwb3NfZW5kID0gbGUzMl90b19jcHUoZWwtPmxfcmVjc1tpbmRleCsxXS5lX2Nwb3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWViIHx8IChlYiAmJiAhZWItPmhfbmV4dF9sZWFmX2JsaykpIHsKKwkJLyoKKwkJICogV2UgYXJlIHRoZSBsYXN0IGV4dGVudCByZWMsIHNvIGFueSBoaWdoIGNwb3Mgc2hvdWxkCisJCSAqIGJlIHN0b3JlZCBpbiB0aGlzIGxlYWYgcmVmY291bnQgYmxvY2suCisJCSAqLworCQkqY3Bvc19lbmQgPSBVSU5UX01BWDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZXh0ZW50IGJsb2NrIGlzbid0IHRoZSBsYXN0IG9uZSwgd2UgaGF2ZSB0byBmaW5kCisJICogdGhlIHN1YnRyZWUgcm9vdCBiZXR3ZWVuIHRoaXMgZXh0ZW50IGJsb2NrIGFuZCB0aGUgbmV4dAorCSAqIGxlYWYgZXh0ZW50IGJsb2NrIGFuZCBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgZV9jcG9zIGZyb20KKwkgKiB0aGUgc3Vicm9vdC4gT3RoZXJ3aXNlIHdlIG1heSBjb3JydXB0IHRoZSBiLXRyZWUuCisJICovCisJb2NmczJfaW5pdF9yZWZjb3VudF9leHRlbnRfdHJlZSgmZXQsIGNpLCByZWZfcm9vdF9iaCk7CisKKwlsZWZ0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aF9mcm9tX2V0KCZldCk7CisJaWYgKCFsZWZ0X3BhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwljcG9zID0gbGUzMl90b19jcHUoZWItPmhfbGlzdC5sX3JlY3NbaW5kZXhdLmVfY3Bvcyk7CisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGNpLCBsZWZ0X3BhdGgsIGNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyaWdodF9wYXRoID0gb2NmczJfbmV3X3BhdGhfZnJvbV9wYXRoKGxlZnRfcGF0aCk7CisJaWYgKCFyaWdodF9wYXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKHNiLCBsZWZ0X3BhdGgsICZjcG9zKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGNpLCByaWdodF9wYXRoLCBjcG9zKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJc3VidHJlZV9yb290ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoJmV0LCBsZWZ0X3BhdGgsCisJCQkJCSAgICAgICByaWdodF9wYXRoKTsKKworCXRtcF9lbCA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfcm9vdF0uZWw7CisJYmxrbm8gPSBsZWZ0X3BhdGgtPnBfbm9kZVtzdWJ0cmVlX3Jvb3QrMV0uYmgtPmJfYmxvY2tucjsKKwlmb3IgKGkgPSAwOyBpIDwgbGUzMl90b19jcHUodG1wX2VsLT5sX25leHRfZnJlZV9yZWMpOyBpKyspIHsKKwkJaWYgKGxlNjRfdG9fY3B1KHRtcF9lbC0+bF9yZWNzW2ldLmVfYmxrbm8pID09IGJsa25vKSB7CisJCQkqY3Bvc19lbmQgPSBsZTMyX3RvX2NwdSh0bXBfZWwtPmxfcmVjc1tpKzFdLmVfY3Bvcyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCUJVR19PTihpID09IGxlMzJfdG9fY3B1KHRtcF9lbC0+bF9uZXh0X2ZyZWVfcmVjKSk7CisKK291dDoKKwlvY2ZzMl9mcmVlX3BhdGgobGVmdF9wYXRoKTsKKwlvY2ZzMl9mcmVlX3BhdGgocmlnaHRfcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIEdpdmVuIGEgY3BvcyBhbmQgbGVuLCB0cnkgdG8gZmluZCB0aGUgcmVmY291bnQgcmVjb3JkIHdoaWNoIGNvbnRhaW5zIGNwb3MuCiAgKiAxLiBJZiBjcG9zIGNhbiBiZSBmb3VuZCBpbiBvbmUgcmVmY291bnQgcmVjb3JkLCByZXR1cm4gdGhlIHJlY29yZC4KICAqIDIuIElmIGNwb3MgY2FuJ3QgYmUgZm91bmQsIHJldHVybiBhIGZha2UgcmVjb3JkIHdoaWNoIHN0YXJ0IGZyb20gY3BvcwpAQCAtOTgzLDEwICsxMDYzLDEwIEBACiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfYmgpCiB7CiAJaW50IHJldCA9IDAsIGksIGZvdW5kOwotCXUzMiBsb3dfY3BvczsKKwl1MzIgbG93X2Nwb3MsIHVuaW5pdGlhbGl6ZWRfdmFyKGNwb3NfZW5kKTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICp0bXAsICpyZWMgPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoID0gTlVMTCwgKnJlZl9sZWFmX2JoID0gTlVMTDsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb2NmczJfbWV0YWRhdGFfY2FjaGVfZ2V0X3N1cGVyKGNpKTsKIAlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKnJiID0KQEAgLTEwMzQsMTIgKzExMTQsMTYgQEAKIAkJfQogCX0KIAotCS8qIGFkanVzdCBsZW4gd2hlbiB3ZSBoYXZlIG9jZnMyX2V4dGVudF9yZWMgYWZ0ZXIgaXQuICovCi0JaWYgKGZvdW5kICYmIGkgPCBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDEpIHsKLQkJdG1wID0gJmVsLT5sX3JlY3NbaSsxXTsKKwlpZiAoZm91bmQpIHsKKwkJcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X2Nwb3NfZW5kKGNpLCByZWZfcm9vdF9iaCwKKwkJCQkJCSAgZWIsIGVsLCBpLCAmY3Bvc19lbmQpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQogCi0JCWlmIChsZTMyX3RvX2NwdSh0bXAtPmVfY3BvcykgPCBjcG9zICsgbGVuKQotCQkJbGVuID0gbGUzMl90b19jcHUodG1wLT5lX2Nwb3MpIC0gY3BvczsKKwkJaWYgKGNwb3NfZW5kIDwgbG93X2Nwb3MgKyBsZW4pCisJCQlsZW4gPSBjcG9zX2VuZCAtIGxvd19jcG9zOwogCX0KIAogCXJldCA9IG9jZnMyX3JlYWRfcmVmY291bnRfYmxvY2soY2ksIGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyksCkBAIC0xNDE4LDcgKzE1MDIsNyBAQAogCiAJLyogY2hhbmdlIG9sZCBhbmQgbmV3IHJsX3VzZWQgYWNjb3JkaW5nbHkuICovCiAJbGUxNl9hZGRfY3B1KCZybC0+cmxfdXNlZCwgLW51bV9tb3ZlZCk7Ci0JbmV3X3JsLT5ybF91c2VkID0gY3B1X3RvX2xlMzIobnVtX21vdmVkKTsKKwluZXdfcmwtPnJsX3VzZWQgPSBjcHVfdG9fbGUxNihudW1fbW92ZWQpOwogCiAJc29ydCgmcmwtPnJsX3JlY3MsIGxlMTZfdG9fY3B1KHJsLT5ybF91c2VkKSwKIAkgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVmY291bnRfcmVjKSwKQEAgLTE3OTcsNyArMTg4MSw4IEBACiAJCXJlY3NfbmVlZCsrOwogCiAJLyogSWYgdGhlIGxlYWYgYmxvY2sgZG9uJ3QgaGF2ZSBlbm91Z2ggcmVjb3JkLCBleHBhbmQgaXQuICovCi0JaWYgKGxlMTZfdG9fY3B1KHJmX2xpc3QtPnJsX3VzZWQpICsgcmVjc19uZWVkID4gcmZfbGlzdC0+cmxfY291bnQpIHsKKwlpZiAobGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgKyByZWNzX25lZWQgPgorCQkJCQkgbGUxNl90b19jcHUocmZfbGlzdC0+cmxfY291bnQpKSB7CiAJCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMgdG1wX3JlYzsKIAkJdTY0IGNwb3MgPSBsZTY0X3RvX2NwdShvcmlnX3JlYy0+cl9jcG9zKTsKIAkJbGVuID0gbGUzMl90b19jcHUob3JpZ19yZWMtPnJfY2x1c3RlcnMpOwpAQCAtMTg1OSw3ICsxOTQ0LDcgQEAKIAkJbWVtY3B5KHRhaWxfcmVjLCBvcmlnX3JlYywgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpKTsKIAkJbGU2NF9hZGRfY3B1KCZ0YWlsX3JlYy0+cl9jcG9zLAogCQkJICAgICBsZTMyX3RvX2NwdSh0YWlsX3JlYy0+cl9jbHVzdGVycykgLSBsZW4pOwotCQl0YWlsX3JlYy0+cl9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KGxlbik7CisJCXRhaWxfcmVjLT5yX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobGVuKTsKIAl9CiAKIAkvKgpAQCAtMzg0MCw4ICszOTI1LDcgQEAKIAl9CiAKIAlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgZXQsIGNwb3MsCi0JCQljcHVfdG9fbGU2NChvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCi0JCQkJCQkJICAgICBwX2NsdXN0ZXIpKSwKKwkJCW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgcF9jbHVzdGVyKSwKIAkJCW51bV9jbHVzdGVycywgZXh0X2ZsYWdzLCBtZXRhX2FjKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQyNTMsOCArNDMzNyw4IEBACiAgKiBAbmV3X2RlbnRyeTogICAgICAgIHRhcmdldCBkZW50cnkKICAqIEBwcmVzZXJ2ZTogIGlmIHRydWUsIHByZXNlcnZlIGFsbCBmaWxlIGF0dHJpYnV0ZXMKICAqLwotaW50IG9jZnMyX3Zmc19yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBib29sIHByZXNlcnZlKQorc3RhdGljIGludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZXJyb3I7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBmZTM0MTkwLi40M2MxMTQ4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTIwNSw4ICsyMDUsNiBAQAogCQkJCQkgICBpbnQgb2Zmc2V0LAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKnh2LAogCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCk7Ci1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NlY3VyaXR5X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiAKIHN0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CkBAIC02OTc4LDkgKzY5NzYsOSBAQAogCiAJcmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgJnNpKTsKIAlpZiAoIXJldCkgewotCQlyZXQgPSBvY2ZzMl94YXR0cl9zZWN1cml0eV9zZXQoaW5vZGUsIHNpLm5hbWUsCi0JCQkJCSAgICAgICBzaS52YWx1ZSwgc2kudmFsdWVfbGVuLAotCQkJCQkgICAgICAgWEFUVFJfQ1JFQVRFKTsKKwkJcmV0ID0gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwKKwkJCQkgICAgICBzaS5uYW1lLCBzaS52YWx1ZSwgc2kudmFsdWVfbGVuLAorCQkJCSAgICAgIFhBVFRSX0NSRUFURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gbGVhdmU7CkBAIC03MDA4LDkgKzcwMDYsOSBAQAogLyoKICAqICdzZWN1cml0eScgYXR0cmlidXRlcyBzdXBwb3J0CiAgKi8KLXN0YXRpYyBzaXplX3Qgb2NmczJfeGF0dHJfc2VjdXJpdHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LAorc3RhdGljIHNpemVfdCBvY2ZzMl94YXR0cl9zZWN1cml0eV9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwKIAkJCQkJc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJc2l6ZV90IG5hbWVfbGVuKQorCQkJCQlzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTjsKIAljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKQEAgLTcwMjMsMjMgKzcwMjEsMjMgQEAKIAlyZXR1cm4gdG90YWxfbGVuOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZWN1cml0eV9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwgbmFtZSwKLQkJCSAgICAgICBidWZmZXIsIHNpemUpOworCXJldHVybiBvY2ZzMl94YXR0cl9nZXQoZGVudHJ5LT5kX2lub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwKKwkJCSAgICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NlY3VyaXR5X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIG9jZnMyX3hhdHRyX3NldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksIG5hbWUsIHZhbHVlLAotCQkJICAgICAgIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksCisJCQkgICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC03MDc2LDkgKzcwNzQsOSBAQAogLyoKICAqICd0cnVzdGVkJyBhdHRyaWJ1dGVzIHN1cHBvcnQKICAqLwotc3RhdGljIHNpemVfdCBvY2ZzMl94YXR0cl90cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKK3N0YXRpYyBzaXplX3Qgb2NmczJfeGF0dHJfdHJ1c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwKIAkJCQkgICAgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgICAgc2l6ZV90IG5hbWVfbGVuKQorCQkJCSAgICAgICBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOOwogCWNvbnN0IHNpemVfdCB0b3RhbF9sZW4gPSBwcmVmaXhfbGVuICsgbmFtZV9sZW4gKyAxOwpAQCAtNzA5MSwyMyArNzA4OSwyMyBAQAogCXJldHVybiB0b3RhbF9sZW47CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfdHJ1c3RlZF9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBvY2ZzMl94YXR0cl90cnVzdGVkX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBvY2ZzMl94YXR0cl9nZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsIG5hbWUsCi0JCQkgICAgICAgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCwKKwkJCSAgICAgICBuYW1lLCBidWZmZXIsIHNpemUpOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3RydXN0ZWRfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3RydXN0ZWRfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIG9jZnMyX3hhdHRyX3NldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCwgbmFtZSwgdmFsdWUsCi0JCQkgICAgICAgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBvY2ZzMl94YXR0cl9zZXQoZGVudHJ5LT5kX2lub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELAorCQkJICAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CiB9CiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlciA9IHsKQEAgLTcxMjAsMTMgKzcxMTgsMTMgQEAKIC8qCiAgKiAndXNlcicgYXR0cmlidXRlcyBzdXBwb3J0CiAgKi8KLXN0YXRpYyBzaXplX3Qgb2NmczJfeGF0dHJfdXNlcl9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsCitzdGF0aWMgc2l6ZV90IG9jZnMyX3hhdHRyX3VzZXJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsCiAJCQkJICAgIHNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHNpemVfdCBuYW1lX2xlbikKKwkJCQkgICAgc2l6ZV90IG5hbWVfbGVuLCBpbnQgdHlwZSkKIHsKIAljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IFhBVFRSX1VTRVJfUFJFRklYX0xFTjsKIAljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRlbnRyeS0+ZF9zYik7CiAKIAlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX05PVVNFUlhBVFRSKQogCQlyZXR1cm4gMDsKQEAgLTcxMzksMzEgKzcxMzcsMzEgQEAKIAlyZXR1cm4gdG90YWxfbGVuOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3VzZXJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXNlcl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRlbnRyeS0+ZF9zYik7CiAKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX05PVVNFUlhBVFRSKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIG9jZnMyX3hhdHRyX2dldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVVNFUiwgbmFtZSwKKwlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVVNFUiwgbmFtZSwKIAkJCSAgICAgICBidWZmZXIsIHNpemUpOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGVudHJ5LT5kX3NiKTsKIAogCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBvY2ZzMl94YXR0cl9zZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1VTRVIsIG5hbWUsIHZhbHVlLAotCQkJICAgICAgIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVVNFUiwKKwkJCSAgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogfQogCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXIgPSB7CmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggYjRiMzFkMi4uMDQwY2VmNyAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBpbnQgdmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CkBAIC04MTgsMTUgKzgyMSwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGUgKl9fZGVudHJ5X29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqZiwKKwkJCQkJc3RydWN0IGZpbGUgKmYsCiAJCQkJCWludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSwKIAkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyb3I7CiAKLQlmLT5mX2ZsYWdzID0gZmxhZ3M7Ci0JZi0+Zl9tb2RlID0gKF9fZm9yY2UgZm1vZGVfdCkoKGZsYWdzKzEpICYgT19BQ0NNT0RFKSB8IEZNT0RFX0xTRUVLIHwKKwlmLT5mX21vZGUgPSBPUEVOX0ZNT0RFKGYtPmZfZmxhZ3MpIHwgRk1PREVfTFNFRUsgfAogCQkJCUZNT0RFX1BSRUFEIHwgRk1PREVfUFdSSVRFOwogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChmLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewpAQCAtODU1LDYgKzg1Nyw3IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gY2xlYW51cF9hbGw7CiAJfQorCWltYV9jb3VudHNfZ2V0KGYpOwogCiAJZi0+Zl9mbGFncyAmPSB+KE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX05PQ1RUWSB8IE9fVFJVTkMpOwogCkBAIC05MjYsNyArOTI5LDYgQEAKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gb3V0X2VycjsKIAluZC0+aW50ZW50Lm9wZW4uZmlsZSA9IF9fZGVudHJ5X29wZW4oZGdldChkZW50cnkpLCBtbnRnZXQobmQtPnBhdGgubW50KSwKLQkJCQkJICAgICBuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgLSAxLAogCQkJCQkgICAgIG5kLT5pbnRlbnQub3Blbi5maWxlLAogCQkJCQkgICAgIG9wZW4sIGNyZWQpOwogb3V0OgpAQCAtOTQ1LDcgKzk0Nyw3IEBACiAgKgogICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZGVzdHJveXMgdGhlIG9yaWdpbmFsIG5hbWVpZGF0YQogICovCi1zdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBmbGFncykKK3N0cnVjdCBmaWxlICpuYW1laWRhdGFfdG9fZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBmaWxlICpmaWxwOwpAQCAtOTU0LDcgKzk1Niw3IEBACiAJZmlscCA9IG5kLT5pbnRlbnQub3Blbi5maWxlOwogCS8qIEhhcyB0aGUgZmlsZXN5c3RlbSBpbml0aWFsaXNlZCB0aGUgZmlsZSBmb3IgdXM/ICovCiAJaWYgKGZpbHAtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKLQkJZmlscCA9IF9fZGVudHJ5X29wZW4obmQtPnBhdGguZGVudHJ5LCBuZC0+cGF0aC5tbnQsIGZsYWdzLCBmaWxwLAorCQlmaWxwID0gX19kZW50cnlfb3BlbihuZC0+cGF0aC5kZW50cnksIG5kLT5wYXRoLm1udCwgZmlscCwKIAkJCQkgICAgIE5VTEwsIGNyZWQpOwogCWVsc2UKIAkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKQEAgLTk5Myw3ICs5OTUsOCBAQAogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJfQogCi0JcmV0dXJuIF9fZGVudHJ5X29wZW4oZGVudHJ5LCBtbnQsIGZsYWdzLCBmLCBOVUxMLCBjcmVkKTsKKwlmLT5mX2ZsYWdzID0gZmxhZ3M7CisJcmV0dXJuIF9fZGVudHJ5X29wZW4oZGVudHJ5LCBtbnQsIGYsIE5VTEwsIGNyZWQpOwogfQogRVhQT1JUX1NZTUJPTChkZW50cnlfb3Blbik7CiAKZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCBhZTE3ZDAyLi4zN2JhMjlmIDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC05MDYsMTcgKzkwNiw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnBpcGVfbW50IF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgaW50IHBpcGVmc19kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQkvKgotCSAqIEF0IGNyZWF0aW9uIHRpbWUsIHdlIHByZXRlbmRlZCB0aGlzIGRlbnRyeSB3YXMgaGFzaGVkCi0JICogKGJ5IGNsZWFyaW5nIERDQUNIRV9VTkhBU0hFRCBiaXQgaW4gZF9mbGFncykKLQkgKiBBdCBkZWxldGUgdGltZSwgd2UgcmVzdG9yZSB0aGUgdHJ1dGggOiBub3QgaGFzaGVkLgotCSAqIChzbyB0aGF0IGRwdXQoKSBjYW4gcHJvY2VlZCBjb3JyZWN0bHkpCi0JICovCi0JZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQlyZXR1cm4gMDsKLX0KIAogLyoKICAqIHBpcGVmc19kbmFtZSgpIGlzIGNhbGxlZCBmcm9tIGRfcGF0aCgpLgpAQCAtOTI4LDcgKzkxNyw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGlwZWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewotCS5kX2RlbGV0ZQk9IHBpcGVmc19kZWxldGVfZGVudHJ5LAogCS5kX2RuYW1lCT0gcGlwZWZzX2RuYW1lLAogfTsKIApAQCAtOTc0LDcgKzk2Miw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBmaWxlICpmOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBxc3RyIG5hbWUgPSB7IC5uYW1lID0gIiIgfTsKIAogCWVyciA9IC1FTkZJTEU7CkBAIC05ODMsMjEgKzk3MSwxNiBAQAogCQlnb3RvIGVycjsKIAogCWVyciA9IC1FTk9NRU07Ci0JZGVudHJ5ID0gZF9hbGxvYyhwaXBlX21udC0+bW50X3NiLT5zX3Jvb3QsICZuYW1lKTsKLQlpZiAoIWRlbnRyeSkKKwlwYXRoLmRlbnRyeSA9IGRfYWxsb2MocGlwZV9tbnQtPm1udF9zYi0+c19yb290LCAmbmFtZSk7CisJaWYgKCFwYXRoLmRlbnRyeSkKIAkJZ290byBlcnJfaW5vZGU7CisJcGF0aC5tbnQgPSBtbnRnZXQocGlwZV9tbnQpOwogCi0JZGVudHJ5LT5kX29wID0gJnBpcGVmc19kZW50cnlfb3BlcmF0aW9uczsKLQkvKgotCSAqIFdlIGRvbnQgd2FudCB0byBwdWJsaXNoIHRoaXMgZGVudHJ5IGludG8gZ2xvYmFsIGRlbnRyeSBoYXNoIHRhYmxlLgotCSAqIFdlIHByZXRlbmQgZGVudHJ5IGlzIGFscmVhZHkgaGFzaGVkLCBieSB1bnNldHRpbmcgRENBQ0hFX1VOSEFTSEVECi0JICogVGhpcyBwZXJtaXRzIGEgd29ya2luZyAvcHJvYy8kcGlkL2ZkL1hYWCBvbiBwaXBlcwotCSAqLwotCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJcGF0aC5kZW50cnktPmRfb3AgPSAmcGlwZWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfaW5zdGFudGlhdGUocGF0aC5kZW50cnksIGlub2RlKTsKIAogCWVyciA9IC1FTkZJTEU7Ci0JZiA9IGFsbG9jX2ZpbGUocGlwZV9tbnQsIGRlbnRyeSwgRk1PREVfV1JJVEUsICZ3cml0ZV9waXBlZmlmb19mb3BzKTsKKwlmID0gYWxsb2NfZmlsZSgmcGF0aCwgRk1PREVfV1JJVEUsICZ3cml0ZV9waXBlZmlmb19mb3BzKTsKIAlpZiAoIWYpCiAJCWdvdG8gZXJyX2RlbnRyeTsKIAlmLT5mX21hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwpAQCAtMTAwOSw3ICs5OTIsNyBAQAogCiAgZXJyX2RlbnRyeToKIAlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7Ci0JZHB1dChkZW50cnkpOworCXBhdGhfcHV0KCZwYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogCiAgZXJyX2lub2RlOgpAQCAtMTAyOCwyMCArMTAxMSwxNCBAQAogCiBzdHJ1Y3QgZmlsZSAqY3JlYXRlX3JlYWRfcGlwZShzdHJ1Y3QgZmlsZSAqd3JmLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGZpbGUgKmYgPSBnZXRfZW1wdHlfZmlscCgpOworCS8qIEdyYWIgcGlwZSBmcm9tIHRoZSB3cml0ZXIgKi8KKwlzdHJ1Y3QgZmlsZSAqZiA9IGFsbG9jX2ZpbGUoJndyZi0+Zl9wYXRoLCBGTU9ERV9SRUFELAorCQkJCSAgICAmcmVhZF9waXBlZmlmb19mb3BzKTsKIAlpZiAoIWYpCiAJCXJldHVybiBFUlJfUFRSKC1FTkZJTEUpOwogCi0JLyogR3JhYiBwaXBlIGZyb20gdGhlIHdyaXRlciAqLwotCWYtPmZfcGF0aCA9IHdyZi0+Zl9wYXRoOwogCXBhdGhfZ2V0KCZ3cmYtPmZfcGF0aCk7Ci0JZi0+Zl9tYXBwaW5nID0gd3JmLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7Ci0KLQlmLT5mX3BvcyA9IDA7CiAJZi0+Zl9mbGFncyA9IE9fUkRPTkxZIHwgKGZsYWdzICYgT19OT05CTE9DSyk7Ci0JZi0+Zl9vcCA9ICZyZWFkX3BpcGVmaWZvX2ZvcHM7Ci0JZi0+Zl9tb2RlID0gRk1PREVfUkVBRDsKLQlmLT5mX3ZlcnNpb24gPSAwOwogCiAJcmV0dXJuIGY7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNGJhZGRlMS4uZjU2MDMyNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMTM0LDEzICsxMzQsMTYgQEAKICAqIHNpbXBsZSBiaXQgdGVzdHMuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0YXNrX3N0YXRlX2FycmF5W10gPSB7Ci0JIlIgKHJ1bm5pbmcpIiwJCS8qICAwICovCi0JIlMgKHNsZWVwaW5nKSIsCQkvKiAgMSAqLwotCSJEIChkaXNrIHNsZWVwKSIsCS8qICAyICovCi0JIlQgKHN0b3BwZWQpIiwJCS8qICA0ICovCi0JIlQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgOCAqLwotCSJaICh6b21iaWUpIiwJCS8qIDE2ICovCi0JIlggKGRlYWQpIgkJLyogMzIgKi8KKwkiUiAocnVubmluZykiLAkJLyogICAwICovCisJIlMgKHNsZWVwaW5nKSIsCQkvKiAgIDEgKi8KKwkiRCAoZGlzayBzbGVlcCkiLAkvKiAgIDIgKi8KKwkiVCAoc3RvcHBlZCkiLAkJLyogICA0ICovCisJInQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgIDggKi8KKwkiWiAoem9tYmllKSIsCQkvKiAgMTYgKi8KKwkiWCAoZGVhZCkiLAkJLyogIDMyICovCisJInggKGRlYWQpIiwJCS8qICA2NCAqLworCSJLICh3YWtla2lsbCkiLAkJLyogMTI4ICovCisJIlcgKHdha2luZykiLAkJLyogMjU2ICovCiB9OwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF90YXNrX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtMTQ4LDYgKzE1MSw4IEBACiAJdW5zaWduZWQgaW50IHN0YXRlID0gKHRzay0+c3RhdGUgJiBUQVNLX1JFUE9SVCkgfCB0c2stPmV4aXRfc3RhdGU7CiAJY29uc3QgY2hhciAqKnAgPSAmdGFza19zdGF0ZV9hcnJheVswXTsKIAorCUJVSUxEX0JVR19PTigxICsgaWxvZzIoVEFTS19TVEFURV9NQVgpICE9IEFSUkFZX1NJWkUodGFza19zdGF0ZV9hcnJheSkpOworCiAJd2hpbGUgKHN0YXRlKSB7CiAJCXArKzsKIAkJc3RhdGUgPj49IDE7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGFmNjQzYjUuLjE4ZDVjYzYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xMjY1LDYgKzEyNjUsNzIgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBzc2l6ZV90IGNvbW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJY2hhciBidWZmZXJbVEFTS19DT01NX0xFTl07CisKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGNvdW50ID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQorCQljb3VudCA9IHNpemVvZihidWZmZXIpIC0gMTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVTUkNIOworCisJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKGN1cnJlbnQsIHApKQorCQlzZXRfdGFza19jb21tKHAsIGJ1ZmZlcik7CisJZWxzZQorCQljb3VudCA9IC1FSU5WQUw7CisKKwlwdXRfdGFza19zdHJ1Y3QocCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgY29tbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlwID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVTUkNIOworCisJdGFza19sb2NrKHApOworCXNlcV9wcmludGYobSwgIiVzXG4iLCBwLT5jb21tKTsKKwl0YXNrX3VubG9jayhwKTsKKworCXB1dF90YXNrX3N0cnVjdChwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2luZ2xlX29wZW4oZmlscCwgY29tbV9zaG93LCBOVUxMKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkJbS0+cHJpdmF0ZSA9IGlub2RlOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zZXRfY29tbV9vcGVyYXRpb25zID0geworCS5vcGVuCQk9IGNvbW1fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkud3JpdGUJCT0gY29tbV93cml0ZSwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIFdlIGFkZGVkIG9yIHJlbW92ZWQgYSB2bWEgbWFwcGluZyB0aGUgZXhlY3V0YWJsZS4gVGhlIHZtYXMgYXJlIG9ubHkgbWFwcGVkCiAgKiBkdXJpbmcgZXhlYyBhbmQgYXJlIG5vdCBtYXBwZWQgd2l0aCB0aGUgbW1hcCBzeXN0ZW0gY2FsbC4KQEAgLTIyMDAsNyArMjI2Niw3IEBACiAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChVU0VfRUxGX0NPUkVfRFVNUCkgJiYgZGVmaW5lZChDT05GSUdfRUxGX0NPUkUpCisjaWZkZWYgQ09ORklHX0VMRl9DT1JFCiBzdGF0aWMgc3NpemVfdCBwcm9jX2NvcmVkdW1wX2ZpbHRlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0yNTA0LDYgKzI1NzAsNyBAQAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogCVJFRygic2NoZWQiLCAgICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19waWRfc2NoZWRfb3BlcmF0aW9ucyksCiAjZW5kaWYKKwlSRUcoImNvbW0iLCAgICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19waWRfc2V0X2NvbW1fb3BlcmF0aW9ucyksCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKIAlJTkYoInN5c2NhbGwiLCAgICBTX0lSVVNSLCBwcm9jX3BpZF9zeXNjYWxsKSwKICNlbmRpZgpAQCAtMjU1Niw3ICsyNjIzLDcgQEAKICNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OCiAJUkVHKCJtYWtlLWl0LWZhaWwiLCBTX0lSVUdPfFNfSVdVU1IsIHByb2NfZmF1bHRfaW5qZWN0X29wZXJhdGlvbnMpLAogI2VuZGlmCi0jaWYgZGVmaW5lZChVU0VfRUxGX0NPUkVfRFVNUCkgJiYgZGVmaW5lZChDT05GSUdfRUxGX0NPUkUpCisjaWZkZWYgQ09ORklHX0VMRl9DT1JFCiAJUkVHKCJjb3JlZHVtcF9maWx0ZXIiLCBTX0lSVUdPfFNfSVdVU1IsIHByb2NfY29yZWR1bXBfZmlsdGVyX29wZXJhdGlvbnMpLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORwpAQCAtMjgzOCw2ICsyOTA1LDcgQEAKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAlSRUcoInNjaGVkIiwgICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19waWRfc2NoZWRfb3BlcmF0aW9ucyksCiAjZW5kaWYKKwlSRUcoImNvbW0iLCAgICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19waWRfc2V0X2NvbW1fb3BlcmF0aW9ucyksCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKIAlJTkYoInN5c2NhbGwiLCAgIFNfSVJVU1IsIHByb2NfcGlkX3N5c2NhbGwpLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IGZhNjc4YWIuLjQ4MGNiMTAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC00MjksNyArNDI5LDcgQEAKIAkJCXVuc2lnbmVkIGludCBpbm87CiAKIAkJCWlubyA9IGRlLT5sb3dfaW5vOwotCQkJZGVfZ2V0KGRlKTsKKwkJCXBkZV9nZXQoZGUpOwogCQkJc3Bpbl91bmxvY2soJnByb2Nfc3ViZGlyX2xvY2spOwogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJaW5vZGUgPSBwcm9jX2dldF9pbm9kZShkaXItPmlfc2IsIGlubywgZGUpOwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAoZGUpCi0JCWRlX3B1dChkZSk7CisJCXBkZV9wdXQoZGUpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIApAQCAtNTA5LDE3ICs1MDksMTcgQEAKIAkJCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm5leHQ7CiAKIAkJCQkvKiBmaWxsZGlyIHBhc3NlcyBpbmZvIHRvIHVzZXIgc3BhY2UgKi8KLQkJCQlkZV9nZXQoZGUpOworCQkJCXBkZV9nZXQoZGUpOwogCQkJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAkJCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlLT5uYW1lLCBkZS0+bmFtZWxlbiwgZmlscC0+Zl9wb3MsCiAJCQkJCSAgICBkZS0+bG93X2lubywgZGUtPm1vZGUgPj4gMTIpIDwgMCkgewotCQkJCQlkZV9wdXQoZGUpOworCQkJCQlwZGVfcHV0KGRlKTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQogCQkJCXNwaW5fbG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJCQkJZmlscC0+Zl9wb3MrKzsKIAkJCQluZXh0ID0gZGUtPm5leHQ7Ci0JCQkJZGVfcHV0KGRlKTsKKwkJCQlwZGVfcHV0KGRlKTsKIAkJCQlkZSA9IG5leHQ7CiAJCQl9IHdoaWxlIChkZSk7CiAJCQlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7CkBAIC03NjMsNyArNzYzLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBmcmVlX3Byb2NfZW50cnkoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKK3N0YXRpYyB2b2lkIGZyZWVfcHJvY19lbnRyeShzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQogewogCXVuc2lnbmVkIGludCBpbm8gPSBkZS0+bG93X2lubzsKIApAQCAtNzc3LDYgKzc3NywxMiBAQAogCWtmcmVlKGRlKTsKIH0KIAordm9pZCBwZGVfcHV0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZGUtPmNvdW50KSkKKwkJZnJlZV9wcm9jX2VudHJ5KHBkZSk7Cit9CisKIC8qCiAgKiBSZW1vdmUgYSAvcHJvYyBlbnRyeSBhbmQgZnJlZSBpdCBpZiBpdCdzIG5vdCBjdXJyZW50bHkgaW4gdXNlLgogICovCkBAIC04NDUsNiArODUxLDUgQEAKIAlXQVJOKGRlLT5zdWJkaXIsIEtFUk5fV0FSTklORyAiJXM6IHJlbW92aW5nIG5vbi1lbXB0eSBkaXJlY3RvcnkgIgogCQkJIiclcy8lcycsIGxlYWtpbmcgYXQgbGVhc3QgJyVzJ1xuIiwgX19mdW5jX18sCiAJCQlkZS0+cGFyZW50LT5uYW1lLCBkZS0+bmFtZSwgZGUtPnN1YmRpci0+bmFtZSk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRlLT5jb3VudCkpCi0JCWZyZWVfcHJvY19lbnRyeShkZSk7CisJcGRlX3B1dChkZSk7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2lub2RlLmMgYi9mcy9wcm9jL2lub2RlLmMKaW5kZXggZDc4YWRlMzAuLjQ0NWEwMmIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTI0LDI5ICsyNCw2IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlX2dldChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQotewotCWF0b21pY19pbmMoJmRlLT5jb3VudCk7Ci0JcmV0dXJuIGRlOwotfQotCi0vKgotICogRGVjcmVtZW50cyB0aGUgdXNlIGNvdW50IGFuZCBjaGVja3MgZm9yIGRlZmVycmVkIGRlbGV0aW9uLgotICovCi12b2lkIGRlX3B1dChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQotewotCWlmICghYXRvbWljX3JlYWQoJmRlLT5jb3VudCkpIHsKLQkJcHJpbnRrKCJkZV9wdXQ6IGVudHJ5ICVzIGFscmVhZHkgZnJlZSFcbiIsIGRlLT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZS0+Y291bnQpKQotCQlmcmVlX3Byb2NfZW50cnkoZGUpOwotfQotCi0vKgotICogRGVjcmVtZW50IHRoZSB1c2UgY291bnQgb2YgdGhlIHByb2NfZGlyX2VudHJ5LgotICovCiBzdGF0aWMgdm9pZCBwcm9jX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGU7CkBAIC01OSw3ICszNiw3IEBACiAJLyogTGV0IGdvIG9mIGFueSBhc3NvY2lhdGVkIHByb2MgZGlyZWN0b3J5IGVudHJ5ICovCiAJZGUgPSBQUk9DX0koaW5vZGUpLT5wZGU7CiAJaWYgKGRlKQotCQlkZV9wdXQoZGUpOworCQlwZGVfcHV0KGRlKTsKIAlpZiAoUFJPQ19JKGlub2RlKS0+c3lzY3RsKQogCQlzeXNjdGxfaGVhZF9wdXQoUFJPQ19JKGlub2RlKS0+c3lzY3RsKTsKIAljbGVhcl9pbm9kZShpbm9kZSk7CkBAIC00ODAsNyArNDU3LDcgQEAKIAkJfQogCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAl9IGVsc2UKLQkgICAgICAgZGVfcHV0KGRlKTsKKwkgICAgICAgcGRlX3B1dChkZSk7CiAJcmV0dXJuIGlub2RlOwogfQkJCQogCkBAIC00OTUsNyArNDcyLDcgQEAKIAlzLT5zX29wID0gJnByb2Nfc29wczsKIAlzLT5zX3RpbWVfZ3JhbiA9IDE7CiAJCi0JZGVfZ2V0KCZwcm9jX3Jvb3QpOworCXBkZV9nZXQoJnByb2Nfcm9vdCk7CiAJcm9vdF9pbm9kZSA9IHByb2NfZ2V0X2lub2RlKHMsIFBST0NfUk9PVF9JTk8sICZwcm9jX3Jvb3QpOwogCWlmICghcm9vdF9pbm9kZSkKIAkJZ290byBvdXRfbm9fcm9vdDsKQEAgLTUwOSw2ICs0ODYsNiBAQAogb3V0X25vX3Jvb3Q6CiAJcHJpbnRrKCJwcm9jX3JlYWRfc3VwZXI6IGdldCByb290IGlub2RlIGZhaWxlZFxuIik7CiAJaXB1dChyb290X2lub2RlKTsKLQlkZV9wdXQoJnByb2Nfcm9vdCk7CisJcGRlX3B1dCgmcHJvY19yb290KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaAppbmRleCA3NTNjYTM3Li4xZjI0YTNlIDEwMDY0NAotLS0gYS9mcy9wcm9jL2ludGVybmFsLmgKKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oCkBAIC02MSw4ICs2MSw2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX25ldF9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfbmV0X2lub2RlX29wZXJhdGlvbnM7CiAKLXZvaWQgZnJlZV9wcm9jX2VudHJ5KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpOwotCiB2b2lkIHByb2NfaW5pdF9pbm9kZWNhY2hlKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKnByb2NfcGlkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC0xMDEsOCArOTksMTIgQEAKIGludCB0YXNrX3N0YXRtKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICopOwogdm9pZCB0YXNrX21lbShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3RydWN0IG1tX3N0cnVjdCAqKTsKIAotc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZV9nZXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSk7Ci12b2lkIGRlX3B1dChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGVfZ2V0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlKQoreworCWF0b21pY19pbmMoJnBkZS0+Y291bnQpOworCXJldHVybiBwZGU7Cit9Cit2b2lkIHBkZV9wdXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpOwogCiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIGludCBwcm9jX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wYWdlLmMgYi9mcy9wcm9jL3BhZ2UuYwppbmRleCA1MDMzY2UwLi4xODBjZjVhIDEwMDY0NAotLS0gYS9mcy9wcm9jL3BhZ2UuYworKysgYi9mcy9wcm9jL3BhZ2UuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTcxLDUyICs3MiwxMiBAQAogICogcGh5c2ljYWwgcGFnZSBmbGFncy4KICAqLwogCi0vKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdG8gZGVjb3VwbGUgaW50ZXJuYWwgZmxhZ3MgZnJvbSBleHBvcnRlZCBvbmVzICovCi0KLSNkZWZpbmUgS1BGX0xPQ0tFRAkJMAotI2RlZmluZSBLUEZfRVJST1IJCTEKLSNkZWZpbmUgS1BGX1JFRkVSRU5DRUQJCTIKLSNkZWZpbmUgS1BGX1VQVE9EQVRFCQkzCi0jZGVmaW5lIEtQRl9ESVJUWQkJNAotI2RlZmluZSBLUEZfTFJVCQkJNQotI2RlZmluZSBLUEZfQUNUSVZFCQk2Ci0jZGVmaW5lIEtQRl9TTEFCCQk3Ci0jZGVmaW5lIEtQRl9XUklURUJBQ0sJCTgKLSNkZWZpbmUgS1BGX1JFQ0xBSU0JCTkKLSNkZWZpbmUgS1BGX0JVRERZCQkxMAotCi0vKiAxMS0yMDogbmV3IGFkZGl0aW9ucyBpbiAyLjYuMzEgKi8KLSNkZWZpbmUgS1BGX01NQVAJCTExCi0jZGVmaW5lIEtQRl9BTk9OCQkxMgotI2RlZmluZSBLUEZfU1dBUENBQ0hFCQkxMwotI2RlZmluZSBLUEZfU1dBUEJBQ0tFRAkJMTQKLSNkZWZpbmUgS1BGX0NPTVBPVU5EX0hFQUQJMTUKLSNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKLSNkZWZpbmUgS1BGX0hVR0UJCTE3Ci0jZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKLSNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQotI2RlZmluZSBLUEZfTk9QQUdFCQkyMAotCi0jZGVmaW5lIEtQRl9LU00JCQkyMQotCi0vKiBrZXJuZWwgaGFja2luZyBhc3Npc3RhbmNlcwotICogV0FSTklORzogc3ViamVjdCB0byBjaGFuZ2UsIG5ldmVyIHJlbHkgb24gdGhlbSEKLSAqLwotI2RlZmluZSBLUEZfUkVTRVJWRUQJCTMyCi0jZGVmaW5lIEtQRl9NTE9DS0VECQkzMwotI2RlZmluZSBLUEZfTUFQUEVEVE9ESVNLCTM0Ci0jZGVmaW5lIEtQRl9QUklWQVRFCQkzNQotI2RlZmluZSBLUEZfUFJJVkFURV8yCQkzNgotI2RlZmluZSBLUEZfT1dORVJfUFJJVkFURQkzNwotI2RlZmluZSBLUEZfQVJDSAkJMzgKLSNkZWZpbmUgS1BGX1VOQ0FDSEVECQkzOQotCiBzdGF0aWMgaW5saW5lIHU2NCBrcGZfY29weV9iaXQodTY0IGtmbGFncywgaW50IHViaXQsIGludCBrYml0KQogewogCXJldHVybiAoKGtmbGFncyA+PiBrYml0KSAmIDEpIDw8IHViaXQ7CiB9CiAKLXN0YXRpYyB1NjQgZ2V0X3VmbGFncyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3U2NCBzdGFibGVfcGFnZV9mbGFncyhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAl1NjQgazsKIAl1NjQgdTsKQEAgLTIxOSw3ICsxODAsNyBAQAogCQllbHNlCiAJCQlwcGFnZSA9IE5VTEw7CiAKLQkJaWYgKHB1dF91c2VyKGdldF91ZmxhZ3MocHBhZ2UpLCBvdXQpKSB7CisJCWlmIChwdXRfdXNlcihzdGFibGVfcGFnZV9mbGFncyhwcGFnZSksIG91dCkpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYyBiL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKaW5kZXggN2JhNzlhNS4uMTIzMjU3YiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYworKysgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC0yNSwyNiArMjYsMjcgQEAKIC8qCiAgKiBTdXBwbHkgZGF0YSBvbiBhIHJlYWQgZnJvbSAvcHJvYy9kZXZpY2UtdHJlZS9ub2RlL3Byb3BlcnR5LgogICovCi1zdGF0aWMgaW50IHByb3BlcnR5X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCSAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHByb3BlcnR5X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcCA9IGRhdGE7Ci0JaW50IG47CisJc3RydWN0IHByb3BlcnR5ICpwcCA9IG0tPnByaXZhdGU7CiAKLQlpZiAob2ZmID49IHBwLT5sZW5ndGgpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQluID0gcHAtPmxlbmd0aCAtIG9mZjsKLQlpZiAobiA+IGNvdW50KQotCQluID0gY291bnQ7Ci0JZWxzZQotCQkqZW9mID0gMTsKLQltZW1jcHkocGFnZSwgKGNoYXIgKilwcC0+dmFsdWUgKyBvZmYsIG4pOwotCSpzdGFydCA9IHBhZ2U7Ci0JcmV0dXJuIG47CisJc2VxX3dyaXRlKG0sIHBwLT52YWx1ZSwgcHAtPmxlbmd0aCk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcHJvcGVydHlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9wZXJ0eV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9wZXJ0eV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHByb3BlcnR5X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIEZvciBhIG5vZGUgd2l0aCBhIG5hbWUgbGlrZSAiZ2NAMTAiLCB3ZSBtYWtlIHN5bWxpbmtzIGNhbGxlZCAiZ2MiCiAgKiBhbmQgIkAxMCIgdG8gaXQuCkBAIC02MywxMCArNjUsOSBAQAogCSAqIFVuZm9ydHVuYXRlbHkgcHJvY19yZWdpc3RlciBwdXRzIGVhY2ggbmV3IGVudHJ5CiAJICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4gIFNvIHdlIHJlYXJyYW5nZSB0aGVtLgogCSAqLwotCWVudCA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkobmFtZSwKLQkJCQkgICAgIHN0cm5jbXAobmFtZSwgInNlY3VyaXR5LSIsIDkpCi0JCQkJICAgICA/IFNfSVJVR08gOiBTX0lSVVNSLCBkZSwKLQkJCQkgICAgIHByb3BlcnR5X3JlYWRfcHJvYywgcHApOworCWVudCA9IHByb2NfY3JlYXRlX2RhdGEobmFtZSwKKwkJCSAgICAgICBzdHJuY21wKG5hbWUsICJzZWN1cml0eS0iLCA5KSA/IFNfSVJVR08gOiBTX0lSVVNSLAorCQkJICAgICAgIGRlLCAmcHJvcGVydHlfcHJvY19mb3BzLCBwcCk7CiAJaWYgKGVudCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDJhMWJlZjkuLjQ3YzAzZjQgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTY1MCw2ICs2NTAsNTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdTY0IGh1Z2VfcHRlX3RvX3BhZ2VtYXBfZW50cnkocHRlX3QgcHRlLCBpbnQgb2Zmc2V0KQoreworCXU2NCBwbWUgPSAwOworCWlmIChwdGVfcHJlc2VudChwdGUpKQorCQlwbWUgPSBQTV9QRlJBTUUocHRlX3BmbihwdGUpICsgb2Zmc2V0KQorCQkJfCBQTV9QU0hJRlQoUEFHRV9TSElGVCkgfCBQTV9QUkVTRU5UOworCXJldHVybiBwbWU7Cit9CisKK3N0YXRpYyBpbnQgcGFnZW1hcF9odWdldGxiX3JhbmdlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBwYWdlbWFwcmVhZCAqcG0gPSB3YWxrLT5wcml2YXRlOworCXN0cnVjdCBoc3RhdGUgKmhzID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKworCXZtYSA9IGZpbmRfdm1hKHdhbGstPm1tLCBhZGRyKTsKKwlpZiAodm1hKQorCQlocyA9IGhzdGF0ZV92bWEodm1hKTsKKwlmb3IgKDsgYWRkciAhPSBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCXU2NCBwZm4gPSBQTV9OT1RfUFJFU0VOVDsKKworCQlpZiAodm1hICYmIChhZGRyID49IHZtYS0+dm1fZW5kKSkgeworCQkJdm1hID0gZmluZF92bWEod2Fsay0+bW0sIGFkZHIpOworCQkJaWYgKHZtYSkKKwkJCQlocyA9IGhzdGF0ZV92bWEodm1hKTsKKwkJfQorCisJCWlmICh2bWEgJiYgKHZtYS0+dm1fc3RhcnQgPD0gYWRkcikgJiYgaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHsKKwkJCS8qIGNhbGN1bGF0ZSBwZm4gb2YgdGhlICJyYXciIHBhZ2UgaW4gdGhlIGh1Z2VwYWdlLiAqLworCQkJaW50IG9mZnNldCA9IChhZGRyICYgfmh1Z2VfcGFnZV9tYXNrKGhzKSkgPj4gUEFHRV9TSElGVDsKKwkJCXBmbiA9IGh1Z2VfcHRlX3RvX3BhZ2VtYXBfZW50cnkoKnB0ZSwgb2Zmc2V0KTsKKwkJfQorCQllcnIgPSBhZGRfdG9fcGFnZW1hcChhZGRyLCBwZm4sIHBtKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJY29uZF9yZXNjaGVkKCk7CisKKwlyZXR1cm4gZXJyOworfQorCiAvKgogICogL3Byb2MvcGlkL3BhZ2VtYXAgLSBhbiBhcnJheSBtYXBwaW5nIHZpcnR1YWwgcGFnZXMgdG8gcGZucwogICoKQEAgLTc0Miw2ICs3ODYsNyBAQAogCiAJcGFnZW1hcF93YWxrLnBtZF9lbnRyeSA9IHBhZ2VtYXBfcHRlX3JhbmdlOwogCXBhZ2VtYXBfd2Fsay5wdGVfaG9sZSA9IHBhZ2VtYXBfcHRlX2hvbGU7CisJcGFnZW1hcF93YWxrLmh1Z2V0bGJfZW50cnkgPSBwYWdlbWFwX2h1Z2V0bGJfcmFuZ2U7CiAJcGFnZW1hcF93YWxrLm1tID0gbW07CiAJcGFnZW1hcF93YWxrLnByaXZhdGUgPSAmcG07CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19ub21tdS5jIGIvZnMvcHJvYy90YXNrX25vbW11LmMKaW5kZXggOGY1YzA1ZC4uNWQ5ZmQ2NCAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX25vbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX25vbW11LmMKQEAgLTExMCw5ICsxMTAsMTMgQEAKIAkJfQogCX0KIAotCXNpemUgKz0gKCp0ZXh0ID0gbW0tPmVuZF9jb2RlIC0gbW0tPnN0YXJ0X2NvZGUpOwotCXNpemUgKz0gKCpkYXRhID0gbW0tPnN0YXJ0X3N0YWNrIC0gbW0tPnN0YXJ0X2RhdGEpOworCSp0ZXh0ID0gKFBBR0VfQUxJR04obW0tPmVuZF9jb2RlKSAtIChtbS0+c3RhcnRfY29kZSAmIFBBR0VfTUFTSykpCisJCT4+IFBBR0VfU0hJRlQ7CisJKmRhdGEgPSAoUEFHRV9BTElHTihtbS0+c3RhcnRfc3RhY2spIC0gKG1tLT5zdGFydF9kYXRhICYgUEFHRV9NQVNLKSkKKwkJPj4gUEFHRV9TSElGVDsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXNpemUgPj49IFBBR0VfU0hJRlQ7CisJc2l6ZSArPSAqdGV4dCArICpkYXRhOwogCSpyZXNpZGVudCA9IHNpemU7CiAJcmV0dXJuIHNpemU7CiB9CmRpZmYgLS1naXQgYS9mcy9xbng0L2JpdG1hcC5jIGIvZnMvcW54NC9iaXRtYXAuYwppbmRleCAzMmY1ZDEzLi4yMmUwZDYwIDEwMDY0NAotLS0gYS9mcy9xbng0L2JpdG1hcC5jCisrKyBiL2ZzL3FueDQvYml0bWFwLmMKQEAgLTE3LDEzICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSAicW54NC5oIgogCi0jaWYgMAotaW50IHFueDRfbmV3X2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiBzdGF0aWMgdm9pZCBjb3VudF9iaXRzKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKmJtUGFydCwgcmVnaXN0ZXIgaW50IHNpemUsCiAJCSAgICAgICBpbnQgKmNvbnN0IHRmKQogewpAQCAtMzUsMjIgKzI4LDcgQEAKIAl9CiAJZG8gewogCQliID0gKmJtUGFydCsrOwotCQlpZiAoKGIgJiAxKSA9PSAwKQotCQkJdG90Kys7Ci0JCWlmICgoYiAmIDIpID09IDApCi0JCQl0b3QrKzsKLQkJaWYgKChiICYgNCkgPT0gMCkKLQkJCXRvdCsrOwotCQlpZiAoKGIgJiA4KSA9PSAwKQotCQkJdG90Kys7Ci0JCWlmICgoYiAmIDE2KSA9PSAwKQotCQkJdG90Kys7Ci0JCWlmICgoYiAmIDMyKSA9PSAwKQotCQkJdG90Kys7Ci0JCWlmICgoYiAmIDY0KSA9PSAwKQotCQkJdG90Kys7Ci0JCWlmICgoYiAmIDEyOCkgPT0gMCkKLQkJCXRvdCsrOworCQl0b3QgKz0gOCAtIGh3ZWlnaHQ4KGIpOwogCQlzaXplLS07CiAJfSB3aGlsZSAoc2l6ZSAhPSAwKTsKIAkqdGYgPSB0b3Q7CmRpZmYgLS1naXQgYS9mcy9xbng0L2lub2RlLmMgYi9mcy9xbng0L2lub2RlLmMKaW5kZXggNDQ5ZjVhNi4uZWJmMzQ0MCAxMDA2NDQKLS0tIGEvZnMvcW54NC9pbm9kZS5jCisrKyBiL2ZzL3FueDQvaW5vZGUuYwpAQCAtNjQsMjUgKzY0LDcgQEAKIAkJcmVzdWx0ID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBucik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQotCWlmICghY3JlYXRlKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLSNpZiAwCi0JdG1wID0gcW54NF9uZXdfYmxvY2soaW5vZGUtPmlfc2IpOwotCWlmICghdG1wKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXN1bHQgPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIHRtcCk7Ci0JaWYgKHRzdCkgewotCQlxbng0X2ZyZWVfYmxvY2soaW5vZGUtPmlfc2IsIHRtcCk7Ci0JCWJyZWxzZShyZXN1bHQpOwotCQlnb3RvIHJlcGVhdDsKLQl9Ci0JdHN0ID0gdG1wOwotI2VuZGlmCi0JaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCBidWZmZXJfaGVhZCAqcW54NF9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2ssIGludCBjcmVhdGUpCkBAIC0xMTMsOCArOTUsNiBAQAogCWlmICggcGh5cyApIHsKIAkJLy8gbG9naWNhbCBibG9jayBpcyBiZWZvcmUgRU9GCiAJCW1hcF9iaChiaCwgaW5vZGUtPmlfc2IsIHBoeXMpOwotCX0gZWxzZSBpZiAoIGNyZWF0ZSApIHsKLQkJLy8gdG8gYmUgZG9uZS4KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCBjZDZiYjlhLi5kZWE4NmFiIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTMyMyw2ICszMjMsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7CiAKKy8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCitzdGF0aWMgaW5saW5lIGludCBtYXJrX2FsbF9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKiBjb25zdCAqZHF1b3QpCit7CisJaW50IHJldCwgZXJyLCBjbnQ7CisKKwlyZXQgPSBlcnIgPSAwOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoZHF1b3RbY250XSkKKwkJCS8qIEV2ZW4gaW4gY2FzZSBvZiBlcnJvciB3ZSBoYXZlIHRvIGNvbnRpbnVlICovCisJCQlyZXQgPSBtYXJrX2RxdW90X2RpcnR5KGRxdW90W2NudF0pOworCQlpZiAoIWVycikKKwkJCWVyciA9IHJldDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRxcHV0X2FsbChzdHJ1Y3QgZHF1b3QgKipkcXVvdCkKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlkcXB1dChkcXVvdFtjbnRdKTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiBuZWVkcyBkcV9saXN0X2xvY2sgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNsZWFyX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7CkBAIC0xMjY4LDggKzEyOTIsNyBAQAogb3V0X2VycjoKIAl1cF93cml0ZSgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwogCS8qIERyb3AgdW51c2VkIHJlZmVyZW5jZXMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWRxcHV0KGdvdFtjbnRdKTsKKwlkcXB1dF9hbGwoZ290KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9pbml0aWFsaXplKTsKQEAgLTEyODgsOSArMTMxMSw3IEBACiAJCWlub2RlLT5pX2RxdW90W2NudF0gPSBOVUxMOwogCX0KIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChwdXRbY250XSk7CisJZHFwdXRfYWxsKHB1dCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2Ryb3ApOwpAQCAtMTMxOSw2ICsxMzQwLDY3IEBACiBFWFBPUlRfU1lNQk9MKHZmc19kcV9kcm9wKTsKIAogLyoKKyAqIGlub2RlX3Jlc2VydmVkX3NwYWNlIGlzIG1hbmFnZWQgaW50ZXJuYWxseSBieSBxdW90YSwgYW5kIHByb3RlY3RlZCBieQorICogaV9sb2NrIHNpbWlsYXIgdG8gaV9ibG9ja3MraV9ieXRlcy4KKyAqLworc3RhdGljIHFzaXplX3QgKmlub2RlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQoreworCS8qIEZpbGVzeXN0ZW0gbXVzdCBleHBsaWNpdGx5IGRlZmluZSBpdCdzIG93biBtZXRob2QgaW4gb3JkZXIgdG8gdXNlCisJICogcXVvdGEgcmVzZXJ2YXRpb24gaW50ZXJmYWNlICovCisJQlVHX09OKCFpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZSk7CisJcmV0dXJuIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKK30KKworc3RhdGljIHZvaWQgaW5vZGVfYWRkX3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCSppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSkgKz0gbnVtYmVyOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworCitzdGF0aWMgdm9pZCBpbm9kZV9jbGFpbV9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpIC09IG51bWJlcjsKKwlfX2lub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX3N1Yl9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpIC09IG51bWJlcjsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyBxc2l6ZV90IGlub2RlX2dldF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlxc2l6ZV90IHJldDsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXJldCA9ICppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2luY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCQkJaW50IHJlc2VydmUpCit7CisJaWYgKHJlc2VydmUpCisJCWlub2RlX2FkZF9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CisJZWxzZQorCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2RlY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQoreworCWlmIChyZXNlcnZlKQorCQlpbm9kZV9zdWJfcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOworCWVsc2UKKwkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworfQorCisvKgogICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKICAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKICAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCkBAIC0xMzM2LDYgKzE0MTgsMjEgQEAKIAlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKKwkvKgorCSAqIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorCSAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleAorCSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9pbmNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKIAkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKIApAQCAtMTM0Niw3ICsxNDQzLDggQEAKIAkJaWYgKGNoZWNrX2JkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm4sIHdhcm50eXBlK2NudCkKIAkJICAgID09IE5PX1FVT1RBKSB7CiAJCQlyZXQgPSBOT19RVU9UQTsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCQkJZ290byBvdXRfZmx1c2hfd2FybjsKIAkJfQogCX0KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTEzNTcsNjQgKzE0NTUsMjkgQEAKIAkJZWxzZQogCQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwogCX0KLQlpZiAoIXJlc2VydmUpCi0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLW91dF91bmxvY2s6CisJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF9mbHVzaF93YXJuOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKK291dF9mbHVzaF93YXJuOgogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQogewotCWludCBjbnQsIHJldCA9IFFVT1RBX09LOwotCi0JLyoKLQkgKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLQkgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXgKLQkgKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKLQlpZiAocmV0ID09IE5PX1FVT1RBKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotb3V0X3VubG9jazoKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwogCiBpbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCiB7Ci0JaW50IHJldCA9IFFVT1RBX09LOwotCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlnb3RvIG91dDsKLQotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAxKTsKLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X3Jlc2VydmVfc3BhY2UpOwogCkBAIC0xNDU1LDEwICsxNTE4LDcgQEAKIHdhcm5fcHV0X2FsbDoKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpZiAocmV0ID09IFFVT1RBX09LKQotCQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworCQltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIHJldDsKQEAgLTE0NzEsMTQgKzE1MzEsMTQgQEAKIAlpbnQgcmV0ID0gUVVPVEFfT0s7CiAKIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkJewogCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE0OTAsMTIgKzE1NTAsOSBAQAogCQkJCQkJCW51bWJlcik7CiAJfQogCS8qIFVwZGF0ZSBpbm9kZSBieXRlcyAqLwotCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xNTAzLDM4ICsxNTYwLDkgQEAKIEVYUE9SVF9TWU1CT0woZHF1b3RfY2xhaW1fc3BhY2UpOwogCiAvKgotICogUmVsZWFzZSByZXNlcnZlZCBxdW90YSBzcGFjZQotICovCi12b2lkIGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCi17Ci0JaW50IGNudDsKLQotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXQ7Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBSZWxlYXNlIHJlc2VydmVkIGRxdW90cyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0KLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybjsKLX0KLUVYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSk7Ci0KLS8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAogICovCi1pbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK2ludCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQogewogCXVuc2lnbmVkIGludCBjbnQ7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwpAQCAtMTU0Myw3ICsxNTcxLDcgQEAKICAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCiAJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CiBvdXRfc3ViOgotCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJCXJldHVybiBRVU9UQV9PSzsKIAl9CiAKQEAgLTE1NTgsMjEgKzE1ODYsNDAgQEAKIAkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJY29udGludWU7CiAJCXdhcm50eXBlW2NudF0gPSBpbmZvX2JkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJaWYgKHJlc2VydmUpCisJCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWVsc2UKKwkJCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAl9Ci0JaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF91bmxvY2s7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOworb3V0X3VubG9jazoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlyZXR1cm4gUVVPVEFfT0s7CiB9CisKK2ludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXJldHVybiAgX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBudW1iZXIsIDApOworfQogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKIAogLyoKKyAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCV9fZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnVtYmVyLCAxKTsKKworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKTsKKworLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KIGludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQpAQCAtMTU5OSwxMCArMTY0Niw3IEBACiAJCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CiAJfQogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOwogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCXJldHVybiBRVU9UQV9PSzsKQEAgLTE2MTAsMTkgKzE2NTQsNiBAQAogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKIAogLyoKLSAqIGNhbGwgYmFjayBmdW5jdGlvbiwgZ2V0IHJlc2VydmVkIHF1b3RhIHNwYWNlIGZyb20gdW5kZXJseWluZyBmcwotICovCi1xc2l6ZV90IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXFzaXplX3QgcmVzZXJ2ZWRfc3BhY2UgPSAwOwotCi0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmCi0JICAgIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKQotCQlyZXNlcnZlZF9zcGFjZSA9IGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKLQlyZXR1cm4gcmVzZXJ2ZWRfc3BhY2U7Ci19Ci0KLS8qCiAgKiBUcmFuc2ZlciB0aGUgbnVtYmVyIG9mIGlub2RlIGFuZCBibG9ja3MgZnJvbSBvbmUgZGlza3F1b3RhIHRvIGFuIG90aGVyLgogICoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCkBAIC0xNjY1LDcgKzE2OTYsNyBAQAogCX0KIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJY3VyX3NwYWNlID0gaW5vZGVfZ2V0X2J5dGVzKGlub2RlKTsKLQlyc3Zfc3BhY2UgPSBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXJzdl9zcGFjZSA9IGlub2RlX2dldF9yc3Zfc3BhY2UoaW5vZGUpOwogCXNwYWNlID0gY3VyX3NwYWNlICsgcnN2X3NwYWNlOwogCS8qIEJ1aWxkIHRoZSB0cmFuc2Zlcl9mcm9tIGxpc3QgYW5kIGNoZWNrIHRoZSBsaW1pdHMgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTE3MDksMjUgKzE3NDAsMTggQEAKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCi0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJaWYgKHRyYW5zZmVyX3RvW2NudF0pIHsKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfdG9bY250XSk7Ci0JCQkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KLQkJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwotCQl9Ci0JfQorCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX2Zyb20pOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX3RvKTsKKwkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwogd2Fybl9wdXRfYWxsOgogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX3RvLCB3YXJudHlwZV90byk7CiAJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9pbm9kZXMpOwogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21fc3BhY2UpOwogcHV0X2FsbDoKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJZHFwdXQodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJZHFwdXQodHJhbnNmZXJfdG9bY250XSk7Ci0JfQorCWRxcHV0X2FsbCh0cmFuc2Zlcl9mcm9tKTsKKwlkcXB1dF9hbGwodHJhbnNmZXJfdG8pOwogCXJldHVybiByZXQ7CiBvdmVyX3F1b3RhOgogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKaW5kZXggM2RmYzIzZS4uZTNkYTAyZiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuYworKysgYi9mcy9xdW90YS9xdW90YV92Mi5jCkBAIC05Nyw4ICs5NywxMSBAQAogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCiAJaWYgKCF2Ml9yZWFkX2hlYWRlcihzYiwgdHlwZSwgJmRxaGVhZCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLTE7CiAJdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfdmVyc2lvbik7CisJaWYgKChpbmZvLT5kcWlfZm10X2lkID09IFFGTVRfVkZTX1YwICYmIHZlcnNpb24gIT0gMCkgfHwKKwkgICAgKGluZm8tPmRxaV9mbXRfaWQgPT0gUUZNVF9WRlNfVjEgJiYgdmVyc2lvbiAhPSAxKSkKKwkJcmV0dXJuIC0xOwogCiAJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7CkBAIC0xMjAsOCArMTIzLDggQEAKIAkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmY7CiAJfSBlbHNlIHsKIAkJLyogdXNlZCBzcGFjZSBpcyBzdG9yZWQgYXMgdW5zaWduZWQgNjQtYml0IHZhbHVlICovCi0JCWluZm8tPmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmY7CS8qIDJeNjQtMSAqLwotCQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmOworCQlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwkvKiAyXjY0LTEgKi8KKwkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTDsKIAl9CiAJaW5mby0+ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tPmRxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCAzMmZhZTQwLi4yZWZjNTcxIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC02MCw3ICs2MCw3IEBACiAgKi8KIGludCByYW1mc19ub21tdV9leHBhbmRfZm9yX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IG5ld3NpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBucGFnZXMsIHhwYWdlcywgbG9vcCwgbGltaXQ7CisJdW5zaWduZWQgbG9uZyBucGFnZXMsIHhwYWdlcywgbG9vcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXM7CiAJdW5zaWduZWQgb3JkZXI7CiAJdm9pZCAqZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL01ha2VmaWxlIGIvZnMvcmVpc2VyZnMvTWFrZWZpbGUKaW5kZXggNmE5ZTMwYy4uNzkyYjNjYiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvTWFrZWZpbGUKKysrIGIvZnMvcmVpc2VyZnMvTWFrZWZpbGUKQEAgLTcsNyArNywxMSBAQAogcmVpc2VyZnMtb2JqcyA6PSBiaXRtYXAubyBkb19iYWxhbi5vIG5hbWVpLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gZml4X25vZGUubyBcCiAJCSBzdXBlci5vIHByaW50cy5vIG9iamVjdGlkLm8gbGJhbGFuY2UubyBpYmFsYW5jZS5vIHN0cmVlLm8gXAogCQkgaGFzaGVzLm8gdGFpbF9jb252ZXJzaW9uLm8gam91cm5hbC5vIHJlc2l6ZS5vIFwKLQkJIGl0ZW1fb3BzLm8gaW9jdGwubyBwcm9jZnMubyB4YXR0ci5vIGxvY2subworCQkgaXRlbV9vcHMubyBpb2N0bC5vIHhhdHRyLm8gbG9jay5vCisKK2lmZXEgKCQoQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTykseSkKK3JlaXNlcmZzLW9ianMgKz0gcHJvY2ZzLm8KK2VuZGlmCiAKIGlmZXEgKCQoQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSKSx5KQogcmVpc2VyZnMtb2JqcyArPSB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCAzYTI4ZTc3Li4yOTBhZTM4IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTI1MzgsNiArMjUzOCwxMiBAQAogCXJldHVybiByZWlzZXJmc193cml0ZV9mdWxsX3BhZ2UocGFnZSwgd2JjKTsKIH0KIAorc3RhdGljIHZvaWQgcmVpc2VyZnNfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShpbm9kZSwgMCk7Cit9CisKIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKQEAgLTI2MDQsNiArMjYxMCw4IEBACiAJaWYgKHJldCkgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkvKiBUcnVuY2F0ZSBhbGxvY2F0ZWQgYmxvY2tzICovCisJCXJlaXNlcmZzX3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yNzAxLDkgKzI3MDksNyBAQAogCSAqKiB0cmFuc2FjdGlvbiB0cmFja2luZyBzdHVmZiB3aGVuIHRoZSBzaXplIGNoYW5nZXMuICBTbywgd2UgaGF2ZQogCSAqKiB0byBkbyB0aGUgaV9zaXplIHVwZGF0ZXMgaGVyZS4KIAkgKi8KLQlwb3MgKz0gY29waWVkOwotCi0JaWYgKHBvcyA+IGlub2RlLT5pX3NpemUpIHsKKwlpZiAocG9zICsgY29waWVkID4gaW5vZGUtPmlfc2l6ZSkgewogCQlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIG15dGg7CiAJCWxvY2tfZGVwdGggPSByZWlzZXJmc193cml0ZV9sb2NrX29uY2UoaW5vZGUtPmlfc2IpOwogCQlsb2NrZWQgPSB0cnVlOwpAQCAtMjcyMSw3ICsyNzI3LDcgQEAKIAkJCWdvdG8gam91cm5hbF9lcnJvcjsKIAogCQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwotCQlpbm9kZS0+aV9zaXplID0gcG9zOworCQlpbm9kZS0+aV9zaXplID0gcG9zICsgY29waWVkOwogCQkvKgogCQkgKiB0aGlzIHdpbGwganVzdCBuZXN0IGludG8gb3VyIHRyYW5zYWN0aW9uLiAgSXQncyBpbXBvcnRhbnQKIAkJICogdG8gdXNlIG1hcmtfaW5vZGVfZGlydHkgc28gdGhlIGlub2RlIGdldHMgcHVzaGVkIGFyb3VuZCBvbiB0aGUKQEAgLTI3NTEsNiArMjc1NywxMCBAQAogCQlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgbG9ja19kZXB0aCk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXJlaXNlcmZzX3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7CisKIAlyZXR1cm4gcmV0ID09IDAgPyBjb3BpZWQgOiByZXQ7CiAKICAgICAgIGpvdXJuYWxfZXJyb3I6CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9wcm9jZnMuYyBiL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCmluZGV4IDkyMjllNTUuLjdhOTk4MTEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCisrKyBiL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCkBAIC0xNyw4ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAotI2lmZGVmIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8KLQogLyoKICAqIExPQ0tJTkc6CiAgKgpAQCAtNDgsMTQgKzQ2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHJlaXNlcmZzX2dsb2JhbF92ZXJzaW9uX2luX3Byb2MoY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQkqc3RhcnQgPSBidWZmZXI7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgU0YoIHggKSAoIHIgLT4geCApCiAjZGVmaW5lIFNGUCggeCApIFNGKCBzX3Byb2NfaW5mb19kYXRhLnggKQogI2RlZmluZSBTRlBMKCB4ICkgU0ZQKCB4WyBsZXZlbCBdICkKQEAgLTUzOCwxOSArNTI4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZWlzZXJmc19wcm9jX3JlZ2lzdGVyX2dsb2JhbChjaGFyICpuYW1lLAotCQkJCQkJICAgICByZWFkX3Byb2NfdCAqIGZ1bmMpCi17Ci0JcmV0dXJuIChwcm9jX2luZm9fcm9vdCkgPyBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KG5hbWUsIDAsCi0JCQkJCQkJIHByb2NfaW5mb19yb290LAotCQkJCQkJCSBmdW5jLCBOVUxMKSA6IE5VTEw7Ci19Ci0KLXZvaWQgcmVpc2VyZnNfcHJvY191bnJlZ2lzdGVyX2dsb2JhbChjb25zdCBjaGFyICpuYW1lKQotewotCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHByb2NfaW5mb19yb290KTsKLX0KLQogaW50IHJlaXNlcmZzX3Byb2NfaW5mb19nbG9iYWxfaW5pdCh2b2lkKQogewogCWlmIChwcm9jX2luZm9fcm9vdCA9PSBOVUxMKSB7CkBAIC01NzIsNDggKzU0OSw2IEBACiAJfQogCXJldHVybiAwOwogfQotCi0vKiBSRUlTRVJGU19QUk9DX0lORk8gKi8KLSNlbHNlCi0KLWludCByZWlzZXJmc19wcm9jX2luZm9faW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiAwOwotfQotaW50IHJlaXNlcmZzX3Byb2NfaW5mb19kb25lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcmVpc2VyZnNfcHJvY19yZWdpc3Rlcl9nbG9iYWwoY2hhciAqbmFtZSwKLQkJCQkJCSAgICAgcmVhZF9wcm9jX3QgKiBmdW5jKQotewotCXJldHVybiBOVUxMOwotfQotCi12b2lkIHJlaXNlcmZzX3Byb2NfdW5yZWdpc3Rlcl9nbG9iYWwoY29uc3QgY2hhciAqbmFtZSkKLXs7Ci19Ci0KLWludCByZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLWludCByZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2RvbmUodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHJlaXNlcmZzX2dsb2JhbF92ZXJzaW9uX2luX3Byb2MoY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsCi0JCQkJICAgIG9mZl90IG9mZnNldCwKLQkJCQkgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogUkVJU0VSRlNfUFJPQ19JTkZPICovCi0jZW5kaWYKLQogLyoKICAqIFJldmlzaW9uIDEuMS44LjIgIDIwMDEvMDcvMTUgMTc6MDg6NDIgIGdvZAogICogIC4gdXNlIGdldF9zdXBlcigpIGluIHByb2Nmcy5jCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCAzMzliMGJhLi5iNGE3ZGQwIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTIyMjIsOCArMjIyMiw2IEBACiAJfQogCiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9pbml0KCk7Ci0JcmVpc2VyZnNfcHJvY19yZWdpc3Rlcl9nbG9iYWwoInZlcnNpb24iLAotCQkJCSAgICAgIHJlaXNlcmZzX2dsb2JhbF92ZXJzaW9uX2luX3Byb2MpOwogCiAJcmV0ID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcmVpc2VyZnNfZnNfdHlwZSk7CiAKQEAgLTIyMzEsNyArMjIyOSw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJlaXNlcmZzX3Byb2NfdW5yZWdpc3Rlcl9nbG9iYWwoInZlcnNpb24iKTsKIAlyZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2RvbmUoKTsKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKIApAQCAtMjI0MCw3ICsyMjM3LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmVpc2VyZnNfZnModm9pZCkKIHsKLQlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZyZWlzZXJmc19mc190eXBlKTsKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IDU4YWE4ZTcuLjhjNzAzM2EgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKICNkZWZpbmUgUFJJVlJPT1RfTkFNRSAiLnJlaXNlcmZzX3ByaXYiCiAjZGVmaW5lIFhBUk9PVF9OQU1FICAgInhhdHRycyIKQEAgLTcyNiwxNSArNzI3LDE0IEBACiByZWlzZXJmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCiAJCSAgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChkZW50cnktPmRfc2ItPnNfeGF0dHIsIG5hbWUpOwogCi0JaWYgKCFoYW5kbGVyIHx8IGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCisJaWYgKCFoYW5kbGVyIHx8IGdldF9pbm9kZV9zZF92ZXJzaW9uKGRlbnRyeS0+ZF9pbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXR1cm4gaGFuZGxlci0+Z2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOworCXJldHVybiBoYW5kbGVyLT5nZXQoZGVudHJ5LCBuYW1lLCBidWZmZXIsIHNpemUsIGhhbmRsZXItPmZsYWdzKTsKIH0KIAogLyoKQEAgLTc0NiwxNSArNzQ2LDE0IEBACiByZWlzZXJmc19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAogCQkgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChkZW50cnktPmRfc2ItPnNfeGF0dHIsIG5hbWUpOwogCi0JaWYgKCFoYW5kbGVyIHx8IGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCisJaWYgKCFoYW5kbGVyIHx8IGdldF9pbm9kZV9zZF92ZXJzaW9uKGRlbnRyeS0+ZF9pbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBoYW5kbGVyLT5zZXQoZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MsIGhhbmRsZXItPmZsYWdzKTsKIH0KIAogLyoKQEAgLTc2NCwyMSArNzYzLDIwIEBACiAgKi8KIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKLQloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisJaGFuZGxlciA9IGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoZGVudHJ5LT5kX3NiLT5zX3hhdHRyLCBuYW1lKTsKIAotCWlmICghaGFuZGxlciB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCWlmICghaGFuZGxlciB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGhhbmRsZXItPnNldChpbm9kZSwgbmFtZSwgTlVMTCwgMCwgWEFUVFJfUkVQTEFDRSk7CisJcmV0dXJuIGhhbmRsZXItPnNldChkZW50cnksIG5hbWUsIE5VTEwsIDAsIFhBVFRSX1JFUExBQ0UsIGhhbmRsZXItPmZsYWdzKTsKIH0KIAogc3RydWN0IGxpc3R4YXR0cl9idWYgewogCXNpemVfdCBzaXplOwogCXNpemVfdCBwb3M7CiAJY2hhciAqYnVmOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogfTsKIAogc3RhdGljIGludCBsaXN0eGF0dHJfZmlsbGVyKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCkBAIC03ODksMTcgKzc4NywxOSBAQAogCWlmIChuYW1lWzBdICE9ICcuJyB8fAogCSAgICAobmFtZWxlbiAhPSAxICYmIChuYW1lWzFdICE9ICcuJyB8fCBuYW1lbGVuICE9IDIpKSkgewogCQlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKLQkJaGFuZGxlciA9IGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoYi0+aW5vZGUtPmlfc2ItPnNfeGF0dHIsCisJCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGItPmRlbnRyeS0+ZF9zYi0+c194YXR0ciwKIAkJCQkJCSAgICBuYW1lKTsKIAkJaWYgKCFoYW5kbGVyKQkvKiBVbnN1cHBvcnRlZCB4YXR0ciBuYW1lICovCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGItPmJ1ZikgewotCQkJc2l6ZSA9IGhhbmRsZXItPmxpc3QoYi0+aW5vZGUsIGItPmJ1ZiArIGItPnBvcywKLQkJCQkJIGItPnNpemUsIG5hbWUsIG5hbWVsZW4pOworCQkJc2l6ZSA9IGhhbmRsZXItPmxpc3QoYi0+ZGVudHJ5LCBiLT5idWYgKyBiLT5wb3MsCisJCQkJCSBiLT5zaXplLCBuYW1lLCBuYW1lbGVuLAorCQkJCQkgaGFuZGxlci0+ZmxhZ3MpOwogCQkJaWYgKHNpemUgPiBiLT5zaXplKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQl9IGVsc2UgewotCQkJc2l6ZSA9IGhhbmRsZXItPmxpc3QoYi0+aW5vZGUsIE5VTEwsIDAsIG5hbWUsIG5hbWVsZW4pOworCQkJc2l6ZSA9IGhhbmRsZXItPmxpc3QoYi0+ZGVudHJ5LCBOVUxMLCAwLCBuYW1lLAorCQkJCQkgICAgIG5hbWVsZW4sIGhhbmRsZXItPmZsYWdzKTsKIAkJfQogCiAJCWItPnBvcyArPSBzaXplOwpAQCAtODIwLDcgKzgyMCw3IEBACiAJaW50IGVyciA9IDA7CiAJbG9mZl90IHBvcyA9IDA7CiAJc3RydWN0IGxpc3R4YXR0cl9idWYgYnVmID0gewotCQkuaW5vZGUgPSBkZW50cnktPmRfaW5vZGUsCisJCS5kZW50cnkgPSBkZW50cnksCiAJCS5idWYgPSBidWZmZXIsCiAJCS5zaXplID0gYnVmZmVyID8gc2l6ZSA6IDAsCiAJfTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKaW5kZXggMzVkNmU2Ny4uY2MzMmU2YSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKQEAgLTE1LDggKzE1LDEwIEBACiAJCQkgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsKTsKIAogc3RhdGljIGludAoteGF0dHJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQorcG9zaXhfYWNsX3NldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAorCQlzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgZXJyb3IsIGVycm9yMjsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwpAQCAtNjAsMTUgKzYyLDE2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXhhdHRyX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCitwb3NpeF9hY2xfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQlzaXplX3Qgc2l6ZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCBlcnJvcjsKIAotCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQorCWlmICghcmVpc2VyZnNfcG9zaXhhY2woZGVudHJ5LT5kX3NiKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JYWNsID0gcmVpc2VyZnNfZ2V0X2FjbChpbm9kZSwgdHlwZSk7CisJYWNsID0gcmVpc2VyZnNfZ2V0X2FjbChkZW50cnktPmRfaW5vZGUsIHR5cGUpOwogCWlmIChJU19FUlIoYWNsKSkKIAkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAlpZiAoYWNsID09IE5VTEwpCkBAIC00ODIsMzAgKzQ4NSwxMiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludAotcG9zaXhfYWNsX2FjY2Vzc19nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCWlmIChzdHJsZW4obmFtZSkgIT0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MpIC0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHhhdHRyX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYnVmZmVyLCBzaXplKTsKLX0KLQotc3RhdGljIGludAotcG9zaXhfYWNsX2FjY2Vzc19zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKLXsKLQlpZiAoc3RybGVuKG5hbWUpICE9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKSAtIDEpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiB4YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIHZhbHVlLCBzaXplKTsKLX0KLQotc3RhdGljIHNpemVfdCBwb3NpeF9hY2xfYWNjZXNzX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKK3N0YXRpYyBzaXplX3QgcG9zaXhfYWNsX2FjY2Vzc19saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwKIAkJCQkgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgc2l6ZV90IG5hbWVfbGVuKQorCQkJCSAgICBzaXplX3QgbmFtZV9sZW4sIGludCB0eXBlKQogewogCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MpOwotCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQorCWlmICghcmVpc2VyZnNfcG9zaXhhY2woZGVudHJ5LT5kX3NiKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X3NpemUpCiAJCW1lbWNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTLCBzaXplKTsKQEAgLTUxNCwzNSArNDk5LDE4IEBACiAKIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKLQkuZ2V0ID0gcG9zaXhfYWNsX2FjY2Vzc19nZXQsCi0JLnNldCA9IHBvc2l4X2FjbF9hY2Nlc3Nfc2V0LAorCS5mbGFncyA9IEFDTF9UWVBFX0FDQ0VTUywKKwkuZ2V0ID0gcG9zaXhfYWNsX2dldCwKKwkuc2V0ID0gcG9zaXhfYWNsX3NldCwKIAkubGlzdCA9IHBvc2l4X2FjbF9hY2Nlc3NfbGlzdCwKIH07CiAKLXN0YXRpYyBpbnQKLXBvc2l4X2FjbF9kZWZhdWx0X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCWlmIChzdHJsZW4obmFtZSkgIT0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUKSAtIDEpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiB4YXR0cl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBidWZmZXIsIHNpemUpOwotfQotCi1zdGF0aWMgaW50Ci1wb3NpeF9hY2xfZGVmYXVsdF9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JaWYgKHN0cmxlbihuYW1lKSAhPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpIC0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHhhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLCBzaXplKTsKLX0KLQotc3RhdGljIHNpemVfdCBwb3NpeF9hY2xfZGVmYXVsdF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsCitzdGF0aWMgc2l6ZV90IHBvc2l4X2FjbF9kZWZhdWx0X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LAogCQkJCSAgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIHNpemVfdCBuYW1lX2xlbikKKwkJCQkgICAgIHNpemVfdCBuYW1lX2xlbiwgaW50IHR5cGUpCiB7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOwotCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQorCWlmICghcmVpc2VyZnNfcG9zaXhhY2woZGVudHJ5LT5kX3NiKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X3NpemUpCiAJCW1lbWNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwgc2l6ZSk7CkBAIC01NTEsNyArNTE5LDggQEAKIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgcmVpc2VyZnNfcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQsCi0JLmdldCA9IHBvc2l4X2FjbF9kZWZhdWx0X2dldCwKLQkuc2V0ID0gcG9zaXhfYWNsX2RlZmF1bHRfc2V0LAorCS5mbGFncyA9IEFDTF9UWVBFX0RFRkFVTFQsCisJLmdldCA9IHBvc2l4X2FjbF9nZXQsCisJLnNldCA9IHBvc2l4X2FjbF9zZXQsCiAJLmxpc3QgPSBwb3NpeF9hY2xfZGVmYXVsdF9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMgYi9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jCmluZGV4IGE5MmM4NzkuLmQ4YjViZmMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYwpAQCAtOCwzNiArOCwzNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHN0YXRpYyBpbnQKLXNlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQorc2VjdXJpdHlfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJaW50IGhhbmRsZXJfZmxhZ3MpCiB7CiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChJU19QUklWQVRFKGlub2RlKSkKKwlpZiAoSVNfUFJJVkFURShkZW50cnktPmRfaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitzZWN1cml0eV9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisJICAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgaGFuZGxlcl9mbGFncykKIHsKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKElTX1BSSVZBVEUoaW5vZGUpKQorCWlmIChJU19QUklWQVRFKGRlbnRyeS0+ZF9pbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfc2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfc2V0KGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBzaXplX3Qgc2VjdXJpdHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9sZW4sCi0JCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pCitzdGF0aWMgc2l6ZV90IHNlY3VyaXR5X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9sZW4sCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBoYW5kbGVyX2ZsYWdzKQogewogCWNvbnN0IHNpemVfdCBsZW4gPSBuYW1lbGVuICsgMTsKIAotCWlmIChJU19QUklWQVRFKGlub2RlKSkKKwlpZiAoSVNfUFJJVkFURShkZW50cnktPmRfaW5vZGUpKQogCQlyZXR1cm4gMDsKIAogCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X2xlbikgewpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCmluZGV4IGE4NjUwNDIuLjViMDhhYWMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl90cnVzdGVkLmMKQEAgLTgsMzYgKzgsMzcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdGF0aWMgaW50Ci10cnVzdGVkX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQordHJ1c3RlZF9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorCSAgICBpbnQgaGFuZGxlcl9mbGFncykKIHsKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgSVNfUFJJVkFURShpbm9kZSkpCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZBVEUoZGVudHJ5LT5kX2lub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiByZWlzZXJmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChkZW50cnktPmRfaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQKLXRydXN0ZWRfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3RydXN0ZWRfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCSAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgaGFuZGxlcl9mbGFncykKIHsKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgSVNfUFJJVkFURShpbm9kZSkpCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZBVEUoZGVudHJ5LT5kX2lub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKIH0KIAotc3RhdGljIHNpemVfdCB0cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3N0YXRpYyBzaXplX3QgdHJ1c3RlZF9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IGhhbmRsZXJfZmxhZ3MpCiB7CiAJY29uc3Qgc2l6ZV90IGxlbiA9IG5hbWVfbGVuICsgMTsKIAotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgSVNfUFJJVkFURShkZW50cnktPmRfaW5vZGUpKQogCQlyZXR1cm4gMDsKIAogCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X3NpemUpIHsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYwppbmRleCBlMzIzOGRjLi43NWQ1OWM0IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCkBAIC03LDM0ICs3LDM1IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RhdGljIGludAotdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3VzZXJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkgaW50IGhhbmRsZXJfZmxhZ3MpCiB7CiAKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1VTRVJfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCisJaWYgKCFyZWlzZXJmc194YXR0cnNfdXNlcihkZW50cnktPmRfc2IpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKKwlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfZ2V0KGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogc3RhdGljIGludAotdXNlcl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAotCSBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQordXNlcl9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCBoYW5kbGVyX2ZsYWdzKQogewogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzX3VzZXIoaW5vZGUtPmlfc2IpKQorCWlmICghcmVpc2VyZnNfeGF0dHJzX3VzZXIoZGVudHJ5LT5kX3NiKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKIH0KIAotc3RhdGljIHNpemVfdCB1c2VyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3N0YXRpYyBzaXplX3QgdXNlcl9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwgaW50IGhhbmRsZXJfZmxhZ3MpCiB7CiAJY29uc3Qgc2l6ZV90IGxlbiA9IG5hbWVfbGVuICsgMTsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzX3VzZXIoaW5vZGUtPmlfc2IpKQorCWlmICghcmVpc2VyZnNfeGF0dHJzX3VzZXIoZGVudHJ5LT5kX3NiKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGxpc3QgJiYgbGVuIDw9IGxpc3Rfc2l6ZSkgewogCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZV9sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvc2lnbmFsZmQuYyBiL2ZzL3NpZ25hbGZkLmMKaW5kZXggYjA3NTY1Yy4uMWRhYmU0ZSAxMDA2NDQKLS0tIGEvZnMvc2lnbmFsZmQuYworKysgYi9mcy9zaWduYWxmZC5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJICogYW5vbl9pbm9kZV9nZXRmZCgpIHdpbGwgaW5zdGFsbCB0aGUgZmQuCiAJCSAqLwogCQl1ZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbc2lnbmFsZmRdIiwgJnNpZ25hbGZkX2ZvcHMsIGN0eCwKLQkJCQkgICAgICAgZmxhZ3MgJiAoT19DTE9FWEVDIHwgT19OT05CTE9DSykpOworCQkJCSAgICAgICBPX1JEV1IgfCAoZmxhZ3MgJiAoT19DTE9FWEVDIHwgT19OT05CTE9DSykpKTsKIAkJaWYgKHVmZCA8IDApCiAJCQlrZnJlZShjdHgpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9zdGFjay5jIGIvZnMvc3RhY2suYwppbmRleCA2NzcxNmY2Li40YTZmN2Y0IDEwMDY0NAotLS0gYS9mcy9zdGFjay5jCisrKyBiL2ZzL3N0YWNrLmMKQEAgLTcsMTggKzcsNjMgQEAKICAqIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGlubGluZWQgc2luY2UgaV9zaXplX3tyZWFkLHdyaXRlfSBpcyByYXRoZXIKICAqIGhlYXZ5LXdlaWdodCBvbiAzMi1iaXQgc3lzdGVtcwogICovCi12b2lkIGZzc3RhY2tfY29weV9pbm9kZV9zaXplKHN0cnVjdCBpbm9kZSAqZHN0LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnNyYykKK3ZvaWQgZnNzdGFja19jb3B5X2lub2RlX3NpemUoc3RydWN0IGlub2RlICpkc3QsIHN0cnVjdCBpbm9kZSAqc3JjKQogewotCWlfc2l6ZV93cml0ZShkc3QsIGlfc2l6ZV9yZWFkKChzdHJ1Y3QgaW5vZGUgKilzcmMpKTsKLQlkc3QtPmlfYmxvY2tzID0gc3JjLT5pX2Jsb2NrczsKKwlsb2ZmX3QgaV9zaXplOworCWJsa2NudF90IGlfYmxvY2tzOworCisJLyoKKwkgKiBpX3NpemVfcmVhZCgpIGluY2x1ZGVzIGl0cyBvd24gc2VxbG9ja2luZyBhbmQgcHJvdGVjdGlvbiBmcm9tCisJICogcHJlZW1wdGlvbiAoc2VlIGluY2x1ZGUvbGludXgvZnMuaCk6IHdlIG5lZWQgbm90aGluZyBleHRyYSBmb3IKKwkgKiB0aGF0IGhlcmUsIGFuZCBwcmVmZXIgdG8gYXZvaWQgbmVzdGluZyBsb2NrcyB0aGFuIGF0dGVtcHQgdG8ga2VlcAorCSAqIGlfc2l6ZSBhbmQgaV9ibG9ja3MgaW4gc3luYyB0b2dldGhlci4KKwkgKi8KKwlpX3NpemUgPSBpX3NpemVfcmVhZChzcmMpOworCisJLyoKKwkgKiBCdXQgaWYgQ09ORklHX0xCREFGIChvbiAzMi1iaXQpLCB3ZSBvdWdodCB0byBtYWtlIGFuIGVmZm9ydCB0bworCSAqIGtlZXAgdGhlIHR3byBoYWx2ZXMgb2YgaV9ibG9ja3MgaW4gc3luYyBkZXNwaXRlIFNNUCBvciBQUkVFTVBUIC0KKwkgKiB0aG91Z2ggc3RhdCdzIGdlbmVyaWNfZmlsbGF0dHIoKSBkb2Vzbid0IGJvdGhlciwgYW5kIHdlIHdvbid0IGJlCisJICogYXBwbHlpbmcgcXVvdGFzICh3aGVyZSBpX2Jsb2NrcyBkb2VzIGJlY29tZSBpbXBvcnRhbnQpIGF0IHRoZQorCSAqIHVwcGVyIGxldmVsLgorCSAqCisJICogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGF0IGxvY2tpbmcgaXMgdXNlZCBhdCB0aGUgbG93ZXIgbGV2ZWw7CisJICogYnV0IGlmIGl0J3MgYSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgcXVvdGFzLCBpdCB3aWxsIGJlIHVzaW5nCisJICogaV9sb2NrIGFzIGluIGlub2RlX2FkZF9ieXRlcygpLiAgdG1wZnMgdXNlcyBvdGhlciBsb2NraW5nLCBhbmQKKwkgKiBpdHMgMzItYml0IGlzIChqdXN0KSBhYmxlIHRvIGV4Y2VlZCAyVEIgaV9zaXplIHdpdGggdGhlIGFpZCBvZgorCSAqIGhvbGVzOyBidXQgaXRzIGlfYmxvY2tzIGNhbm5vdCBjYXJyeSBpbnRvIHRoZSB1cHBlciBsb25nIHdpdGhvdXQKKwkgKiBhbG1vc3QgMlRCIHN3YXAgLSBsZXQncyBpZ25vcmUgdGhhdCBjYXNlLgorCSAqLworCWlmIChzaXplb2YoaV9ibG9ja3MpID4gc2l6ZW9mKGxvbmcpKQorCQlzcGluX2xvY2soJnNyYy0+aV9sb2NrKTsKKwlpX2Jsb2NrcyA9IHNyYy0+aV9ibG9ja3M7CisJaWYgKHNpemVvZihpX2Jsb2NrcykgPiBzaXplb2YobG9uZykpCisJCXNwaW5fdW5sb2NrKCZzcmMtPmlfbG9jayk7CisKKwkvKgorCSAqIElmIENPTkZJR19TTVAgb3IgQ09ORklHX1BSRUVNUFQgb24gMzItYml0LCBpdCdzIHZpdGFsIGZvcgorCSAqIGZzc3RhY2tfY29weV9pbm9kZV9zaXplKCkgdG8gaG9sZCBzb21lIGxvY2sgYXJvdW5kCisJICogaV9zaXplX3dyaXRlKCksIG90aGVyd2lzZSBpX3NpemVfcmVhZCgpIG1heSBzcGluIGZvcmV2ZXIgKHNlZQorCSAqIGluY2x1ZGUvbGludXgvZnMuaCkuICBXZSBkb24ndCBuZWNlc3NhcmlseSBob2xkIGlfbXV0ZXggd2hlbiB0aGlzCisJICogaXMgY2FsbGVkLCBzbyB0YWtlIGlfbG9jayBmb3IgdGhhdCBjYXNlLgorCSAqCisJICogQW5kIGlmIENPTkZJR19MQkFERiAob24gMzItYml0KSwgY29udGludWUgb3VyIGVmZm9ydCB0byBrZWVwIHRoZQorCSAqIHR3byBoYWx2ZXMgb2YgaV9ibG9ja3MgaW4gc3luYyBkZXNwaXRlIFNNUCBvciBQUkVFTVBUOiB1c2UgaV9sb2NrCisJICogZm9yIHRoYXQgY2FzZSB0b28sIGFuZCBkbyBib3RoIGF0IG9uY2UgYnkgY29tYmluaW5nIHRoZSB0ZXN0cy4KKwkgKgorCSAqIFRoZXJlIGlzIG5vbmUgb2YgdGhpcyBsb2NraW5nIG92ZXJoZWFkIGluIHRoZSA2NC1iaXQgY2FzZS4KKwkgKi8KKwlpZiAoc2l6ZW9mKGlfc2l6ZSkgPiBzaXplb2YobG9uZykgfHwgc2l6ZW9mKGlfYmxvY2tzKSA+IHNpemVvZihsb25nKSkKKwkJc3Bpbl9sb2NrKCZkc3QtPmlfbG9jayk7CisJaV9zaXplX3dyaXRlKGRzdCwgaV9zaXplKTsKKwlkc3QtPmlfYmxvY2tzID0gaV9ibG9ja3M7CisJaWYgKHNpemVvZihpX3NpemUpID4gc2l6ZW9mKGxvbmcpIHx8IHNpemVvZihpX2Jsb2NrcykgPiBzaXplb2YobG9uZykpCisJCXNwaW5fdW5sb2NrKCZkc3QtPmlfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc3N0YWNrX2NvcHlfaW5vZGVfc2l6ZSk7CiAKLS8qIGNvcHkgYWxsIGF0dHJpYnV0ZXM7IGdldF9ubGlua3MgaXMgb3B0aW9uYWwgd2F5IHRvIG92ZXJyaWRlIHRoZSBpX25saW5rCi0gKiBjb3B5aW5nCi0gKi8KLXZvaWQgZnNzdGFja19jb3B5X2F0dHJfYWxsKHN0cnVjdCBpbm9kZSAqZGVzdCwgY29uc3Qgc3RydWN0IGlub2RlICpzcmMsCi0JCQkJaW50ICgqZ2V0X25saW5rcykoc3RydWN0IGlub2RlICopKQorLyogY29weSBhbGwgYXR0cmlidXRlcyAqLwordm9pZCBmc3N0YWNrX2NvcHlfYXR0cl9hbGwoc3RydWN0IGlub2RlICpkZXN0LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnNyYykKIHsKIAlkZXN0LT5pX21vZGUgPSBzcmMtPmlfbW9kZTsKIAlkZXN0LT5pX3VpZCA9IHNyYy0+aV91aWQ7CkBAIC0yOSwxNCArNzQsNiBAQAogCWRlc3QtPmlfY3RpbWUgPSBzcmMtPmlfY3RpbWU7CiAJZGVzdC0+aV9ibGtiaXRzID0gc3JjLT5pX2Jsa2JpdHM7CiAJZGVzdC0+aV9mbGFncyA9IHNyYy0+aV9mbGFnczsKLQotCS8qCi0JICogVXBkYXRlIHRoZSBubGlua3MgQUZURVIgdXBkYXRpbmcgdGhlIGFib3ZlIGZpZWxkcywgYmVjYXVzZSB0aGUKLQkgKiBnZXRfbGlua3MgY2FsbGJhY2sgbWF5IGRlcGVuZCBvbiB0aGVtLgotCSAqLwotCWlmICghZ2V0X25saW5rcykKLQkJZGVzdC0+aV9ubGluayA9IHNyYy0+aV9ubGluazsKLQllbHNlCi0JCWRlc3QtPmlfbmxpbmsgPSAoKmdldF9ubGlua3MpKGRlc3QpOworCWRlc3QtPmlfbmxpbmsgPSBzcmMtPmlfbmxpbms7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc3N0YWNrX2NvcHlfYXR0cl9hbGwpOwpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IDA3NTY5NGUuLmM0ZWNkNTIgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTQwMSw5ICs0MDEsOSBAQAogfQogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NUQVQ2NCAqLwogCi12b2lkIGlub2RlX2FkZF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpCisvKiBDYWxsZXIgaXMgaGVyZSByZXNwb25zaWJsZSBmb3Igc3VmZmljaWVudCBsb2NraW5nIChpZS4gaW5vZGUtPmlfbG9jaykgKi8KK3ZvaWQgX19pbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQogewotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaW5vZGUtPmlfYmxvY2tzICs9IGJ5dGVzID4+IDk7CiAJYnl0ZXMgJj0gNTExOwogCWlub2RlLT5pX2J5dGVzICs9IGJ5dGVzOwpAQCAtNDExLDYgKzQxMSwxMiBAQAogCQlpbm9kZS0+aV9ibG9ja3MrKzsKIAkJaW5vZGUtPmlfYnl0ZXMgLT0gNTEyOwogCX0KK30KKwordm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJX19pbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGJ5dGVzKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDE5ZWI3MGIuLmFmZjA0NmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtOTAxLDggKzkwMSw5IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CisJfSBlbHNlIHsKKwkJZG9fcmVtb3VudF9zYihzLCBmbGFncywgZGF0YSwgMCk7CiAJfQotCWRvX3JlbW91bnRfc2IocywgZmxhZ3MsIGRhdGEsIDApOwogCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggMzY3NTJhNi4uNDE4NzI3YSAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtMzU1LDYgKzM1NSw3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlsb2ZmX3QgZW5kYnl0ZTsJCQkvKiBpbmNsdXNpdmUgKi8KIAlpbnQgZnB1dF9uZWVkZWQ7CiAJdW1vZGVfdCBpX21vZGU7CkBAIC00MDUsNyArNDA2LDI4IEBACiAJCQkhU19JU0xOSyhpX21vZGUpKQogCQlnb3RvIG91dF9wdXQ7CiAKLQlyZXQgPSBkb19zeW5jX21hcHBpbmdfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCBvZmZzZXQsIGVuZGJ5dGUsIGZsYWdzKTsKKwltYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOworCWlmICghbWFwcGluZykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9wdXQ7CisJfQorCisJcmV0ID0gMDsKKwlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpIHsKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmRieXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9wdXQ7CisJfQorCisJaWYgKGZsYWdzICYgU1lOQ19GSUxFX1JBTkdFX1dSSVRFKSB7CisJCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShtYXBwaW5nLCBvZmZzZXQsIGVuZGJ5dGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3B1dDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUikKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmRieXRlKTsKKwogb3V0X3B1dDoKIAlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKQEAgLTQzNywzOCArNDU5LDMgQEAKIH0KIFNZU0NBTExfQUxJQVMoc3lzX3N5bmNfZmlsZV9yYW5nZTIsIFN5U19zeW5jX2ZpbGVfcmFuZ2UyKTsKICNlbmRpZgotCi0vKgotICogYGVuZGJ5dGUnIGlzIGluY2x1c2l2ZQotICovCi1pbnQgZG9fc3luY19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgb2Zmc2V0LAotCQkJICBsb2ZmX3QgZW5kYnl0ZSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCWludCByZXQ7Ci0KLQlpZiAoIW1hcHBpbmcpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gMDsKLQlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpIHsKLQkJcmV0ID0gZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmRieXRlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpIHsKLQkJcmV0ID0gX19maWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UobWFwcGluZywgb2Zmc2V0LCBlbmRieXRlLAotCQkJCQkJV0JfU1lOQ19BTEwpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChmbGFncyAmIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKSB7Ci0JCXJldCA9IGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKG1hcHBpbmcsIG9mZnNldCwgZW5kYnl0ZSk7Ci0JfQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChkb19zeW5jX21hcHBpbmdfcmFuZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCA2MGM3MDJiLi5hMGE1MDBhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtNDgzLDcgKzQ4Myw4IEBACiAgKglAYXR0cjoJYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KIAotaW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cikKK2ludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogCUJVR19PTigha29iaiB8fCAha29iai0+c2QgfHwgIWF0dHIpOwogCkBAIC00OTcsNyArNDk4LDggQEAKICAqCUBhdHRyOglhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogCi12b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cikKK3ZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKGtvYmotPnNkLCBhdHRyLT5hdHRyLm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvdGltZXJmZC5jIGIvZnMvdGltZXJmZC5jCmluZGV4IGIwNDJiZDcuLjFiZmM5NWEgMTAwNjQ0Ci0tLSBhL2ZzL3RpbWVyZmQuYworKysgYi9mcy90aW1lcmZkLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWhydGltZXJfaW5pdCgmY3R4LT50bXIsIGNsb2NraWQsIEhSVElNRVJfTU9ERV9BQlMpOwogCiAJdWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW3RpbWVyZmRdIiwgJnRpbWVyZmRfZm9wcywgY3R4LAotCQkJICAgICAgIGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJCQkgICAgICAgT19SRFdSIHwgKGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUykpOwogCWlmICh1ZmQgPCAwKQogCQlrZnJlZShjdHgpOwogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCA4YTc3MWM1Li45MDQ5MjMyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTM1MCwxMyArMzUwLDggQEAKIAkJICAgICAgIGxlMzJfdG9fY3B1KHN1cC0+Zm10X3ZlcnNpb24pKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlx0dGltZV9ncmFuICAgICAgJXVcbiIsCiAJCSAgICAgICBsZTMyX3RvX2NwdShzdXAtPnRpbWVfZ3JhbikpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiXHRVVUlEICAgICAgICAgICAlMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYIgotCQkgICAgICAgIi0lMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCi0JCSAgICAgICBzdXAtPnV1aWRbMF0sIHN1cC0+dXVpZFsxXSwgc3VwLT51dWlkWzJdLCBzdXAtPnV1aWRbM10sCi0JCSAgICAgICBzdXAtPnV1aWRbNF0sIHN1cC0+dXVpZFs1XSwgc3VwLT51dWlkWzZdLCBzdXAtPnV1aWRbN10sCi0JCSAgICAgICBzdXAtPnV1aWRbOF0sIHN1cC0+dXVpZFs5XSwgc3VwLT51dWlkWzEwXSwgc3VwLT51dWlkWzExXSwKLQkJICAgICAgIHN1cC0+dXVpZFsxMl0sIHN1cC0+dXVpZFsxM10sIHN1cC0+dXVpZFsxNF0sCi0JCSAgICAgICBzdXAtPnV1aWRbMTVdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0VVVJRCAgICAgICAgICAgJXBVQlxuIiwKKwkJICAgICAgIHN1cC0+dXVpZCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFVCSUZTX01TVF9OT0RFOgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmlsZS5jIGIvZnMvdWJpZnMvZmlsZS5jCmluZGV4IDM5ODQ5ZjguLjE2YTY0NDQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqCiAgKiBTaW1pbGFybHksIEBpX211dGV4IGlzIG5vdCBhbHdheXMgbG9ja2VkIGluICd1Ymlmc19yZWFkcGFnZSgpJywgZS5nLiwgdGhlCiAgKiByZWFkLWFoZWFkIHBhdGggZG9lcyBub3QgbG9jayBpdCAoInN5c19yZWFkIC0+IGdlbmVyaWNfZmlsZV9haW9fcmVhZCAtPgotICogb25kZW1hbmRfcmVhZGFoZWFkIC0+IHJlYWRwYWdlIikuIEluIGNhc2Ugb2YgcmVhZGFoZWFkLCBASV9MT0NLIGZsYWcgaXMgbm90CisgKiBvbmRlbWFuZF9yZWFkYWhlYWQgLT4gcmVhZHBhZ2UiKS4gSW4gY2FzZSBvZiByZWFkYWhlYWQsIEBJX1NZTkMgZmxhZyBpcyBub3QKICAqIHNldCBhcyB3ZWxsLiBIb3dldmVyLCBVQklGUyBkaXNhYmxlcyByZWFkYWhlYWQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc3VwZXIuYyBiL2ZzL3ViaWZzL3N1cGVyLmMKaW5kZXggOTQzYWQ1Ni4uNDNmOWQxOSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc3VwZXIuYworKysgYi9mcy91Ymlmcy9zdXBlci5jCkBAIC0xMzkzLDEyICsxMzkzLDcgQEAKIAkJYy0+bGViX3NpemUsIGMtPmxlYl9zaXplID4+IDEwKTsKIAlkYmdfbXNnKCJkYXRhIGpvdXJuYWwgaGVhZHM6ICAlZCIsCiAJCWMtPmpoZWFkX2NudCAtIE5PTkRBVEFfSkhFQURTX0NOVCk7Ci0JZGJnX21zZygiVVVJRDogICAgICAgICAgICAgICAgJTAyWCUwMlglMDJYJTAyWC0lMDJYJTAyWCIKLQkgICAgICAgIi0lMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiLAotCSAgICAgICBjLT51dWlkWzBdLCBjLT51dWlkWzFdLCBjLT51dWlkWzJdLCBjLT51dWlkWzNdLAotCSAgICAgICBjLT51dWlkWzRdLCBjLT51dWlkWzVdLCBjLT51dWlkWzZdLCBjLT51dWlkWzddLAotCSAgICAgICBjLT51dWlkWzhdLCBjLT51dWlkWzldLCBjLT51dWlkWzEwXSwgYy0+dXVpZFsxMV0sCi0JICAgICAgIGMtPnV1aWRbMTJdLCBjLT51dWlkWzEzXSwgYy0+dXVpZFsxNF0sIGMtPnV1aWRbMTVdKTsKKwlkYmdfbXNnKCJVVUlEOiAgICAgICAgICAgICAgICAlcFVCIiwgYy0+dXVpZCk7CiAJZGJnX21zZygiYmlnX2xwdCAgICAgICAgICAgICAgJWQiLCBjLT5iaWdfbHB0KTsKIAlkYmdfbXNnKCJsb2cgTEVCczogICAgICAgICAgICAlZCAoJWQgLSAlZCkiLAogCQljLT5sb2dfbGVicywgVUJJRlNfTE9HX0xOVU0sIGMtPmxvZ19sYXN0KTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9iYWxsb2MuYyBiL2ZzL3VkZi9iYWxsb2MuYwppbmRleCAxZTA2ODUzLi44MjM3MmUzIDEwMDY0NAotLS0gYS9mcy91ZGYvYmFsbG9jLmMKKysrIGIvZnMvdWRmL2JhbGxvYy5jCkBAIC00NDAsNyArNDQwLDcgQEAKIAkgICAgKGJsb2MtPmxvZ2ljYWxCbG9ja051bSArIGNvdW50KSA+CiAJCXBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbikgewogCQl1ZGZfZGVidWcoIiVkIDwgJWQgfHwgJWQgKyAlZCA+ICVkXG4iLAotCQkJICBibG9jLmxvZ2ljYWxCbG9ja051bSwgMCwgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIGNvdW50LAorCQkJICBibG9jLT5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MtPmxvZ2ljYWxCbG9ja051bSwgY291bnQsCiAJCQkgIHBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IGI4MGNiZDcuLmYzMTFkNTAgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTk2LDYgKzE5Niw3IEBACiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJbG9ja19rZXJuZWwoKTsKIAkJdWRmX2Rpc2NhcmRfcHJlYWxsb2MoaW5vZGUpOworCQl1ZGZfdHJ1bmNhdGVfdGFpbF9leHRlbnQoaW5vZGUpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggNmQyNGMyYy4uZjkwMjMxZSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTk3LDE1ICs5NywxNyBAQAogICovCiB2b2lkIHVkZl9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87Ci0JaWYgKCEoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCWxvY2tfa2VybmVsKCk7Ci0JCXVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChpbm9kZSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAwKTsKLQkJaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKGlub2RlKTsKKwlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOworCisJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCICYmCisJICAgIGlub2RlLT5pX3NpemUgIT0gaWluZm8tPmlfbGVuRXh0ZW50cykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnMgKCVzKTogSW5vZGUgJWx1IChtb2RlICVvKSBoYXMgIgorCQkJImlub2RlIHNpemUgJWxsdSBkaWZmZXJlbnQgZnJvbSBleHRlbnQgbGVuZ2h0ICVsbHUuICIKKwkJCSJGaWxlc3lzdGVtIG5lZWQgbm90IGJlIHN0YW5kYXJkcyBjb21wbGlhbnQuXG4iLAorCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbW9kZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW5vZGUtPmlfc2l6ZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaWluZm8tPmlfbGVuRXh0ZW50cyk7CiAJfQotCWlpbmZvID0gVURGX0koaW5vZGUpOwogCWtmcmVlKGlpbmZvLT5pX2V4dC5pX2RhdGEpOwogCWlpbmZvLT5pX2V4dC5pX2RhdGEgPSBOVUxMOwogfQpAQCAtMTk4LDcgKzIwMCw2IEBACiAJaW50IG5ld2Jsb2NrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGJoID0gTlVMTDsKIAlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKLQl1aW50MzJfdCBlbGVuOwogCXVpbnQ4X3QgYWxsb2N0eXBlOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKIApAQCAtMjczLDEyICsyNzQsMTEgQEAKIAllbG9jLmxvZ2ljYWxCbG9ja051bSA9ICpibG9jazsKIAllbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9CiAJCQkJaWluZm8tPmlfbG9jYXRpb24ucGFydGl0aW9uUmVmZXJlbmNlTnVtOwotCWVsZW4gPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7Ci0JaWluZm8tPmlfbGVuRXh0ZW50cyA9IGVsZW47CisJaWluZm8tPmlfbGVuRXh0ZW50cyA9IGlub2RlLT5pX3NpemU7CiAJZXBvcy5iaCA9IE5VTEw7CiAJZXBvcy5ibG9jayA9IGlpbmZvLT5pX2xvY2F0aW9uOwogCWVwb3Mub2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgZWxlbiwgMCk7CisJdWRmX2FkZF9hZXh0KGlub2RlLCAmZXBvcywgJmVsb2MsIGlub2RlLT5pX3NpemUsIDApOwogCS8qIFVuaXF1ZUlEIHN0dWZmICovCiAKIAlicmVsc2UoZXBvcy5iaCk7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IDIxZGFkOGMuLmNkMjExNTAgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC00MDgsMTUgKzQwOCw2IEBACiAJfQogCiBhZGQ6Ci0JLyogSXMgdGhlcmUgYW55IGV4dGVudCB3aG9zZSBzaXplIHdlIG5lZWQgdG8gcm91bmQgdXA/ICovCi0JaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCICYmIGVsZW4pIHsKLQkJZWxlbiA9IChlbGVuICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgJiB+KHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOwotCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwotCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwotCQl1ZGZfd3JpdGVfYWV4dChkaXIsICZlcG9zLCAmZWxvYywgZWxlbiwgMSk7Ci0JfQogCWZfcG9zICs9IG5maWRsZW47CiAKIAlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgJiYKQEAgLTQzOSw2ICs0MzAsNyBAQAogCQl1ZGZfY3VycmVudF9hZXh0KGRpciwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSk7CiAJfQogCisJLyogRW50cnkgZml0cyBpbnRvIGN1cnJlbnQgYmxvY2s/ICovCiAJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIGZpYmgtPmVvZmZzZXQgPj0gbmZpZGxlbikgewogCQlmaWJoLT5zb2Zmc2V0ID0gZmliaC0+ZW9mZnNldDsKIAkJZmliaC0+ZW9mZnNldCArPSBuZmlkbGVuOwpAQCAtNDYyLDYgKzQ1NCwxNiBAQAogCQkJCShmaWJoLT5zYmgtPmJfZGF0YSArIGZpYmgtPnNvZmZzZXQpOwogCQl9CiAJfSBlbHNlIHsKKwkJLyogUm91bmQgdXAgbGFzdCBleHRlbnQgaW4gdGhlIGZpbGUgKi8KKwkJZWxlbiA9IChlbGVuICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgJiB+KHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOworCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKKwkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOworCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCisJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOworCQl1ZGZfd3JpdGVfYWV4dChkaXIsICZlcG9zLCAmZWxvYywgZWxlbiwgMSk7CisJCWRpbmZvLT5pX2xlbkV4dGVudHMgPSAoZGluZm8tPmlfbGVuRXh0ZW50cyArIHNiLT5zX2Jsb2Nrc2l6ZQorCQkJCQktIDEpICYgfihzYi0+c19ibG9ja3NpemUgLSAxKTsKKwogCQlmaWJoLT5zb2Zmc2V0ID0gZmliaC0+ZW9mZnNldCAtIHNiLT5zX2Jsb2Nrc2l6ZTsKIAkJZmliaC0+ZW9mZnNldCArPSBuZmlkbGVuIC0gc2ItPnNfYmxvY2tzaXplOwogCQlpZiAoZmliaC0+c2JoICE9IGZpYmgtPmViaCkgewpAQCAtNTA4LDYgKzUxMCwyMCBAQAogCQlkaXItPmlfc2l6ZSArPSBuZmlkbGVuOwogCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpCiAJCQlkaW5mby0+aV9sZW5BbGxvYyArPSBuZmlkbGVuOworCQllbHNlIHsKKwkJCS8qIEZpbmQgdGhlIGxhc3QgZXh0ZW50IGFuZCB0cnVuY2F0ZSBpdCB0byBwcm9wZXIgc2l6ZSAqLworCQkJd2hpbGUgKHVkZl9uZXh0X2FleHQoZGlyLCAmZXBvcywgJmVsb2MsICZlbGVuLCAxKSA9PQorCQkJCShFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKKwkJCQk7CisJCQllbGVuIC09IGRpbmZvLT5pX2xlbkV4dGVudHMgLSBkaXItPmlfc2l6ZTsKKwkJCWlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQorCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOworCQkJZWxzZSBpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQorCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CisJCQl1ZGZfd3JpdGVfYWV4dChkaXIsICZlcG9zLCAmZWxvYywgZWxlbiwgMSk7CisJCQlkaW5mby0+aV9sZW5FeHRlbnRzID0gZGlyLT5pX3NpemU7CisJCX0KKwogCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJCWdvdG8gb3V0X29rOwogCX0gZWxzZSB7CkBAIC05MjIsNyArOTM4LDcgQEAKIAkJYmxvY2sgPSB1ZGZfZ2V0X3BibG9jayhpbm9kZS0+aV9zYiwgYmxvY2ssCiAJCQkJaWluZm8tPmlfbG9jYXRpb24ucGFydGl0aW9uUmVmZXJlbmNlTnVtLAogCQkJCTApOwotCQllcG9zLmJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CisJCWVwb3MuYmggPSB1ZGZfdGdldGJsayhpbm9kZS0+aV9zYiwgYmxvY2spOwogCQlsb2NrX2J1ZmZlcihlcG9zLmJoKTsKIAkJbWVtc2V0KGVwb3MuYmgtPmJfZGF0YSwgMHgwMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShlcG9zLmJoKTsKQEAgLTk5OSw2ICsxMDE1LDggQEAKIAlpbm9kZS0+aV9zaXplID0gZWxlbjsKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpCiAJCWlpbmZvLT5pX2xlbkFsbG9jID0gaW5vZGUtPmlfc2l6ZTsKKwllbHNlCisJCXVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKIAlmaSA9IHVkZl9hZGRfZW50cnkoZGlyLCBkZW50cnksICZmaWJoLCAmY2ZpLCAmZXJyKTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmMKaW5kZXggOWQxYjhjMi4uMWU0NTQzYyAxMDA2NDQKLS0tIGEvZnMvdWRmL3N1cGVyLmMKKysrIGIvZnMvdWRmL3N1cGVyLmMKQEAgLTEwNzgsMjEgKzEwNzgsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdWRmX2ZpbmRfdmF0X2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBwX2luZGV4LAorCQkJICAgICAgIGludCB0eXBlMV9pbmRleCwgc2VjdG9yX3Qgc3RhcnRfYmxvY2spCit7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOworCXN0cnVjdCB1ZGZfcGFydF9tYXAgKm1hcCA9ICZzYmktPnNfcGFydG1hcHNbcF9pbmRleF07CisJc2VjdG9yX3QgdmF0X2Jsb2NrOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBpbm87CisKKwkvKgorCSAqIFZBVCBmaWxlIGVudHJ5IGlzIGluIHRoZSBsYXN0IHJlY29yZGVkIGJsb2NrLiBTb21lIGJyb2tlbiBkaXNrcyBoYXZlCisJICogaXQgYSBmZXcgYmxvY2tzIGJlZm9yZSBzbyB0cnkgYSBiaXQgaGFyZGVyLi4uCisJICovCisJaW5vLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IHR5cGUxX2luZGV4OworCWZvciAodmF0X2Jsb2NrID0gc3RhcnRfYmxvY2s7CisJICAgICB2YXRfYmxvY2sgPj0gbWFwLT5zX3BhcnRpdGlvbl9yb290ICYmCisJICAgICB2YXRfYmxvY2sgPj0gc3RhcnRfYmxvY2sgLSAzICYmCisJICAgICAhc2JpLT5zX3ZhdF9pbm9kZTsgdmF0X2Jsb2NrLS0pIHsKKwkJaW5vLmxvZ2ljYWxCbG9ja051bSA9IHZhdF9ibG9jayAtIG1hcC0+c19wYXJ0aXRpb25fcm9vdDsKKwkJc2JpLT5zX3ZhdF9pbm9kZSA9IHVkZl9pZ2V0KHNiLCAmaW5vKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgdWRmX2xvYWRfdmF0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBwX2luZGV4LCBpbnQgdHlwZTFfaW5kZXgpCiB7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCB1ZGZfcGFydF9tYXAgKm1hcCA9ICZzYmktPnNfcGFydG1hcHNbcF9pbmRleF07Ci0Jc3RydWN0IGtlcm5lbF9sYl9hZGRyIGlubzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKnZhdGk7CiAJdWludDMyX3QgcG9zOwogCXN0cnVjdCB2aXJ0dWFsQWxsb2NhdGlvblRhYmxlMjAgKnZhdDIwOwogCXNlY3Rvcl90IGJsb2NrcyA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKLQkvKiBWQVQgZmlsZSBlbnRyeSBpcyBpbiB0aGUgbGFzdCByZWNvcmRlZCBibG9jayAqLwotCWluby5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSB0eXBlMV9pbmRleDsKLQlpbm8ubG9naWNhbEJsb2NrTnVtID0gc2JpLT5zX2xhc3RfYmxvY2sgLSBtYXAtPnNfcGFydGl0aW9uX3Jvb3Q7Ci0Jc2JpLT5zX3ZhdF9pbm9kZSA9IHVkZl9pZ2V0KHNiLCAmaW5vKTsKKwl1ZGZfZmluZF92YXRfYmxvY2soc2IsIHBfaW5kZXgsIHR5cGUxX2luZGV4LCBzYmktPnNfbGFzdF9ibG9jayk7CiAJaWYgKCFzYmktPnNfdmF0X2lub2RlICYmCiAJICAgIHNiaS0+c19sYXN0X2Jsb2NrICE9IGJsb2NrcyAtIDEpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJVREYtZnM6IEZhaWxlZCB0byByZWFkIFZBVCBpbm9kZSBmcm9tIHRoZSIKQEAgLTExMDAsOSArMTExOCw3IEBACiAJCSAgICAgICAiYmxvY2sgb2YgdGhlIGRldmljZSAoJWx1KS5cbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZylzYmktPnNfbGFzdF9ibG9jaywKIAkJICAgICAgICh1bnNpZ25lZCBsb25nKWJsb2NrcyAtIDEpOwotCQlpbm8ucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gdHlwZTFfaW5kZXg7Ci0JCWluby5sb2dpY2FsQmxvY2tOdW0gPSBibG9ja3MgLSAxIC0gbWFwLT5zX3BhcnRpdGlvbl9yb290OwotCQlzYmktPnNfdmF0X2lub2RlID0gdWRmX2lnZXQoc2IsICZpbm8pOworCQl1ZGZfZmluZF92YXRfYmxvY2soc2IsIHBfaW5kZXgsIHR5cGUxX2luZGV4LCBibG9ja3MgLSAxKTsKIAl9CiAJaWYgKCFzYmktPnNfdmF0X2lub2RlKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9kaXIuYyBiL2ZzL3Vmcy9kaXIuYwppbmRleCA2ZjY3MWYxLi4yMmFmNjhmIDEwMDY0NAotLS0gYS9mcy91ZnMvZGlyLmMKKysrIGIvZnMvdWZzL2Rpci5jCkBAIC03MCwxMyArNzAsMTMgQEAKIAlyZXR1cm4gKGlub2RlLT5pX3NpemUrUEFHRV9DQUNIRV9TSVpFLTEpPj5QQUdFX0NBQ0hFX1NISUZUOwogfQogCi1pbm9fdCB1ZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoraW5vX3QgdWZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBxc3RyICpxc3RyKQogewogCWlub190IHJlcyA9IDA7CiAJc3RydWN0IHVmc19kaXJfZW50cnkgKmRlOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCQotCWRlID0gdWZzX2ZpbmRfZW50cnkoZGlyLCBkZW50cnksICZwYWdlKTsKKwlkZSA9IHVmc19maW5kX2VudHJ5KGRpciwgcXN0ciwgJnBhZ2UpOwogCWlmIChkZSkgewogCQlyZXMgPSBmczMyX3RvX2NwdShkaXItPmlfc2IsIGRlLT5kX2lubyk7CiAJCXVmc19wdXRfcGFnZShwYWdlKTsKQEAgLTI0OSwxMiArMjQ5LDEyIEBACiAgKiAoYXMgYSBwYXJhbWV0ZXIgLSByZXNfZGlyKS4gUGFnZSBpcyByZXR1cm5lZCBtYXBwZWQgYW5kIHVubG9ja2VkLgogICogRW50cnkgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZC4KICAqLwotc3RydWN0IHVmc19kaXJfZW50cnkgKnVmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCitzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqdWZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBxc3RyICpxc3RyLAogCQkJCSAgICAgc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwotCWludCBuYW1lbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOworCWNvbnN0IGNoYXIgKm5hbWUgPSBxc3RyLT5uYW1lOworCWludCBuYW1lbGVuID0gcXN0ci0+bGVuOwogCXVuc2lnbmVkIHJlY2xlbiA9IFVGU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBuOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gdWZzX2Rpcl9wYWdlcyhkaXIpOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCAyMzExOWZlLi40YzI2ZDllIDEwMDY0NAotLS0gYS9mcy91ZnMvbmFtZWkuYworKysgYi9mcy91ZnMvbmFtZWkuYwpAQCAtNTYsNyArNTYsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JaW5vID0gdWZzX2lub2RlX2J5X25hbWUoZGlyLCBkZW50cnkpOworCWlubyA9IHVmc19pbm9kZV9ieV9uYW1lKGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAoaW5vKSB7CiAJCWlub2RlID0gdWZzX2lnZXQoZGlyLT5pX3NiLCBpbm8pOwogCQlpZiAoSVNfRVJSKGlub2RlKSkgewpAQCAtMjM3LDcgKzIzNyw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKLQlkZSA9IHVmc19maW5kX2VudHJ5KGRpciwgZGVudHJ5LCAmcGFnZSk7CisJZGUgPSB1ZnNfZmluZF9lbnRyeShkaXIsICZkZW50cnktPmRfbmFtZSwgJnBhZ2UpOwogCWlmICghZGUpCiAJCWdvdG8gb3V0OwogCkBAIC0yODEsNyArMjgxLDcgQEAKIAlzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqb2xkX2RlOwogCWludCBlcnIgPSAtRU5PRU5UOwogCi0Jb2xkX2RlID0gdWZzX2ZpbmRfZW50cnkob2xkX2Rpciwgb2xkX2RlbnRyeSwgJm9sZF9wYWdlKTsKKwlvbGRfZGUgPSB1ZnNfZmluZF9lbnRyeShvbGRfZGlyLCAmb2xkX2RlbnRyeS0+ZF9uYW1lLCAmb2xkX3BhZ2UpOwogCWlmICghb2xkX2RlKQogCQlnb3RvIG91dDsKIApAQCAtMzAxLDcgKzMwMSw3IEBACiAJCQlnb3RvIG91dF9kaXI7CiAKIAkJZXJyID0gLUVOT0VOVDsKLQkJbmV3X2RlID0gdWZzX2ZpbmRfZW50cnkobmV3X2RpciwgbmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKKwkJbmV3X2RlID0gdWZzX2ZpbmRfZW50cnkobmV3X2RpciwgJm5ld19kZW50cnktPmRfbmFtZSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7CiAJCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IDVmYWVkNzkuLjE0M2MyMGIgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC02Niw2ICs2Niw3IEBACiAgKi8KIAogCisjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIApAQCAtOTYsNiArOTcsNTYgQEAKICNpbmNsdWRlICJzd2FiLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogCitzdGF0aWMgc3RydWN0IGlub2RlICp1ZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vLCB1MzIgZ2VuZXJhdGlvbikKK3sKKwlzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqdXNwaSA9IFVGU19TQihzYiktPnNfdXNwaTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaWYgKGlubyA8IFVGU19ST09USU5PIHx8IGlubyA+IHVzcGktPnNfbmNnICogdXNwaS0+c19pcGcpCisJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCisJaW5vZGUgPSB1ZnNfaWdldChzYiwgaW5vKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwlpZiAoZ2VuZXJhdGlvbiAmJiBpbm9kZS0+aV9nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pIHsKKwkJaXB1dChpbm9kZSk7CisJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCX0KKwlyZXR1cm4gaW5vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCwKKwkJCQkgICAgICAgaW50IGZoX2xlbiwgaW50IGZoX3R5cGUpCit7CisJcmV0dXJuIGdlbmVyaWNfZmhfdG9fZGVudHJ5KHNiLCBmaWQsIGZoX2xlbiwgZmhfdHlwZSwgdWZzX25mc19nZXRfaW5vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdWZzX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsCisJCQkJICAgICAgIGludCBmaF9sZW4sIGludCBmaF90eXBlKQoreworCXJldHVybiBnZW5lcmljX2ZoX3RvX3BhcmVudChzYiwgZmlkLCBmaF9sZW4sIGZoX3R5cGUsIHVmc19uZnNfZ2V0X2lub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQoreworCXN0cnVjdCBxc3RyIGRvdF9kb3QgPSB7CisJCS5uYW1lCT0gIi4uIiwKKwkJLmxlbgk9IDIsCisJfTsKKwlpbm9fdCBpbm87CisKKwlpbm8gPSB1ZnNfaW5vZGVfYnlfbmFtZShjaGlsZC0+ZF9pbm9kZSwgJmRvdF9kb3QpOworCWlmICghaW5vKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwlyZXR1cm4gZF9vYnRhaW5fYWxpYXModWZzX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubykpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIHVmc19leHBvcnRfb3BzID0geworCS5maF90b19kZW50cnkJPSB1ZnNfZmhfdG9fZGVudHJ5LAorCS5maF90b19wYXJlbnQJPSB1ZnNfZmhfdG9fcGFyZW50LAorCS5nZXRfcGFyZW50CT0gdWZzX2dldF9wYXJlbnQsCit9OworCiAjaWZkZWYgQ09ORklHX1VGU19ERUJVRwogLyoKICAqIFByaW50IGNvbnRlbnRzIG9mIHVmc19zdXBlcl9ibG9jaywgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKQEAgLTk5MCw2ICsxMDQxLDcgQEAKIAkgKiBSZWFkIHVmc19zdXBlcl9ibG9jayBpbnRvIGludGVybmFsIGRhdGEgc3RydWN0dXJlcwogCSAqLwogCXNiLT5zX29wID0gJnVmc19zdXBlcl9vcHM7CisJc2ItPnNfZXhwb3J0X29wID0gJnVmc19leHBvcnRfb3BzOwogCXNiLT5kcV9vcCA9IE5VTEw7IC8qKiovCiAJc2ItPnNfbWFnaWMgPSBmczMyX3RvX2NwdShzYiwgdXNiMy0+ZnNfbWFnaWMpOwogCmRpZmYgLS1naXQgYS9mcy91ZnMvdWZzLmggYi9mcy91ZnMvdWZzLmgKaW5kZXggNjQ0ZTc3ZS4uMGI0YzM5YiAxMDA2NDQKLS0tIGEvZnMvdWZzL3Vmcy5oCisrKyBiL2ZzL3Vmcy91ZnMuaApAQCAtODYsOSArODYsOSBAQAogLyogZGlyLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gaW50IHVmc19hZGRfbGluayAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gaW5vX3QgdWZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gaW5vX3QgdWZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIGludCB1ZnNfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwotZXh0ZXJuIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICp1ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcGFnZSAqKik7CitleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKnVmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcGFnZSAqKik7CiBleHRlcm4gaW50IHVmc19kZWxldGVfZW50cnkoc3RydWN0IGlub2RlICosIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIGludCB1ZnNfZW1wdHlfZGlyIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKnVmc19kb3Rkb3Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICoqKTsKZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jCmluZGV4IDZkNGY2ZDMuLjQ2Zjg3ZTggMTAwNjQ0Ci0tLSBhL2ZzL3hhdHRyLmMKKysrIGIvZnMveGF0dHIuYwpAQCAtNjE1LDEyICs2MTUsMTEgQEAKIGdlbmVyaWNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKLQloYW5kbGVyID0geGF0dHJfcmVzb2x2ZV9uYW1lKGlub2RlLT5pX3NiLT5zX3hhdHRyLCAmbmFtZSk7CisJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShkZW50cnktPmRfc2ItPnNfeGF0dHIsICZuYW1lKTsKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gaGFuZGxlci0+Z2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOworCXJldHVybiBoYW5kbGVyLT5nZXQoZGVudHJ5LCBuYW1lLCBidWZmZXIsIHNpemUsIGhhbmRsZXItPmZsYWdzKTsKIH0KIAogLyoKQEAgLTYzMCwxOCArNjI5LDIwIEBACiBzc2l6ZV90CiBnZW5lcmljX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsICoqaGFuZGxlcnMgPSBpbm9kZS0+aV9zYi0+c194YXR0cjsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciwgKipoYW5kbGVycyA9IGRlbnRyeS0+ZF9zYi0+c194YXR0cjsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IDA7CiAKIAlpZiAoIWJ1ZmZlcikgewotCQlmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCBoYW5kbGVyKQotCQkJc2l6ZSArPSBoYW5kbGVyLT5saXN0KGlub2RlLCBOVUxMLCAwLCBOVUxMLCAwKTsKKwkJZm9yX2VhY2hfeGF0dHJfaGFuZGxlcihoYW5kbGVycywgaGFuZGxlcikgeworCQkJc2l6ZSArPSBoYW5kbGVyLT5saXN0KGRlbnRyeSwgTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJICAgICAgaGFuZGxlci0+ZmxhZ3MpOworCQl9CiAJfSBlbHNlIHsKIAkJY2hhciAqYnVmID0gYnVmZmVyOwogCiAJCWZvcl9lYWNoX3hhdHRyX2hhbmRsZXIoaGFuZGxlcnMsIGhhbmRsZXIpIHsKLQkJCXNpemUgPSBoYW5kbGVyLT5saXN0KGlub2RlLCBidWYsIGJ1ZmZlcl9zaXplLCBOVUxMLCAwKTsKKwkJCXNpemUgPSBoYW5kbGVyLT5saXN0KGRlbnRyeSwgYnVmLCBidWZmZXJfc2l6ZSwKKwkJCQkJICAgICBOVUxMLCAwLCBoYW5kbGVyLT5mbGFncyk7CiAJCQlpZiAoc2l6ZSA+IGJ1ZmZlcl9zaXplKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJYnVmICs9IHNpemU7CkBAIC02NTksMTQgKzY2MCwxMyBAQAogZ2VuZXJpY19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAlpZiAoc2l6ZSA9PSAwKQogCQl2YWx1ZSA9ICIiOyAgLyogZW1wdHkgRUEsIGRvIG5vdCByZW1vdmUgKi8KLQloYW5kbGVyID0geGF0dHJfcmVzb2x2ZV9uYW1lKGlub2RlLT5pX3NiLT5zX3hhdHRyLCAmbmFtZSk7CisJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShkZW50cnktPmRfc2ItPnNfeGF0dHIsICZuYW1lKTsKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBoYW5kbGVyLT5zZXQoZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgMCwgaGFuZGxlci0+ZmxhZ3MpOwogfQogCiAvKgpAQCAtNjc3LDEyICs2NzcsMTIgQEAKIGdlbmVyaWNfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKLQloYW5kbGVyID0geGF0dHJfcmVzb2x2ZV9uYW1lKGlub2RlLT5pX3NiLT5zX3hhdHRyLCAmbmFtZSk7CisJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShkZW50cnktPmRfc2ItPnNfeGF0dHIsICZuYW1lKTsKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCBOVUxMLCAwLCBYQVRUUl9SRVBMQUNFKTsKKwlyZXR1cm4gaGFuZGxlci0+c2V0KGRlbnRyeSwgbmFtZSwgTlVMTCwgMCwKKwkJCSAgICBYQVRUUl9SRVBMQUNFLCBoYW5kbGVyLT5mbGFncyk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19nZXR4YXR0cik7CmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGUKaW5kZXggN2E1OWRhZS4uNTY2NDFmZSAxMDA2NDQKLS0tIGEvZnMveGZzL01ha2VmaWxlCisrKyBiL2ZzL3hmcy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsOCBAQAogCiBvYmotJChDT05GSUdfWEZTX0ZTKQkJKz0geGZzLm8KIAoreGZzLXkJCQkJKz0gbGludXgtMi42L3hmc190cmFjZS5vCisKIHhmcy0kKENPTkZJR19YRlNfUVVPVEEpCQkrPSAkKGFkZHByZWZpeCBxdW90YS8sIFwKIAkJCQkgICB4ZnNfZHF1b3QubyBcCiAJCQkJICAgeGZzX2RxdW90X2l0ZW0ubyBcCkBAIC05MCw4ICs5Miw3IEBACiAJCQkJICAgeGZzX3J3Lm8gXAogCQkJCSAgIHhmc19kbW9wcy5vCiAKLXhmcy0kKENPTkZJR19YRlNfVFJBQ0UpCQkrPSB4ZnNfYnRyZWVfdHJhY2UubyBcCi0JCQkJICAgeGZzX2RpcjJfdHJhY2UubworeGZzLSQoQ09ORklHX1hGU19UUkFDRSkJCSs9IHhmc19idHJlZV90cmFjZS5vCiAKICMgT2JqZWN0cyBpbiBsaW51eC8KIHhmcy15CQkJCSs9ICQoYWRkcHJlZml4ICQoWEZTX0xJTlVYKS8sIFwKQEAgLTExMyw2ICsxMTQsMyBAQAogeGZzLXkJCQkJKz0gJChhZGRwcmVmaXggc3VwcG9ydC8sIFwKIAkJCQkgICBkZWJ1Zy5vIFwKIAkJCQkgICB1dWlkLm8pCi0KLXhmcy0kKENPTkZJR19YRlNfVFJBQ0UpCQkrPSBzdXBwb3J0L2t0cmFjZS5vCi0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKaW5kZXggYjIzYTU0NS4uMjUxMjEyNSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsX3hhdHRyLmg+CiAKQEAgLTM1MywzNyArMzU0LDE0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0vKgotICogU3lzdGVtIHhhdHRyIGhhbmRsZXJzLgotICoKLSAqIEN1cnJlbnRseSBQb3NpeCBBQ0xzIGFyZSB0aGUgb25seSBzeXN0ZW0gbmFtZXNwYWNlIGV4dGVuZGVkIGF0dHJpYnV0ZQotICogaGFuZGxlcnMgc3VwcG9ydGVkIGJ5IFhGUywgc28gd2UganVzdCBpbXBsZW1lbnQgdGhlIGhhbmRsZXJzIGhlcmUuCi0gKiBJZiB3ZSBldmVyIHN1cHBvcnQgb3RoZXIgc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMgdGhpcyB3aWxsIG5lZWQKLSAqIHNvbWUgcmVmYWN0b3JpbmcuCi0gKi8KLQogc3RhdGljIGludAoteGZzX2RlY29kZV9hY2woY29uc3QgY2hhciAqbmFtZSkKLXsKLQlpZiAoc3RyY21wKG5hbWUsICJwb3NpeF9hY2xfYWNjZXNzIikgPT0gMCkKLQkJcmV0dXJuIEFDTF9UWVBFX0FDQ0VTUzsKLQllbHNlIGlmIChzdHJjbXAobmFtZSwgInBvc2l4X2FjbF9kZWZhdWx0IikgPT0gMCkKLQkJcmV0dXJuIEFDTF9UWVBFX0RFRkFVTFQ7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQKLXhmc194YXR0cl9zeXN0ZW1fZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCXZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3hmc194YXR0cl9hY2xfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JaW50IHR5cGUsIGVycm9yOworCWludCBlcnJvcjsKIAotCXR5cGUgPSB4ZnNfZGVjb2RlX2FjbChuYW1lKTsKLQlpZiAodHlwZSA8IDApCi0JCXJldHVybiB0eXBlOwotCi0JYWNsID0geGZzX2dldF9hY2woaW5vZGUsIHR5cGUpOworCWFjbCA9IHhmc19nZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgdHlwZSk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCWlmIChhY2wgPT0gTlVMTCkKQEAgLTM5NiwxNSArMzc0LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLXhmc194YXR0cl9zeXN0ZW1fc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreGZzX3hhdHRyX2FjbF9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHR5cGUpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMOwotCWludCBlcnJvciA9IDAsIHR5cGU7CisJaW50IGVycm9yID0gMDsKIAotCXR5cGUgPSB4ZnNfZGVjb2RlX2FjbChuYW1lKTsKLQlpZiAodHlwZSA8IDApCi0JCXJldHVybiB0eXBlOwogCWlmIChmbGFncyAmIFhBVFRSX0NSRUFURSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHR5cGUgPT0gQUNMX1RZUEVfREVGQVVMVCAmJiAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKQEAgLTQ2MSw4ICs0MzcsMTYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0cnVjdCB4YXR0cl9oYW5kbGVyIHhmc194YXR0cl9zeXN0ZW1faGFuZGxlciA9IHsKLQkucHJlZml4CT0gWEFUVFJfU1lTVEVNX1BSRUZJWCwKLQkuZ2V0CT0geGZzX3hhdHRyX3N5c3RlbV9nZXQsCi0JLnNldAk9IHhmc194YXR0cl9zeXN0ZW1fc2V0LAorc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKKwkuZmxhZ3MJPSBBQ0xfVFlQRV9BQ0NFU1MsCisJLmdldAk9IHhmc194YXR0cl9hY2xfZ2V0LAorCS5zZXQJPSB4ZnNfeGF0dHJfYWNsX3NldCwKK307CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHhmc194YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyID0geworCS5wcmVmaXgJPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKKwkuZmxhZ3MJPSBBQ0xfVFlQRV9ERUZBVUxULAorCS5nZXQJPSB4ZnNfeGF0dHJfYWNsX2dldCwKKwkuc2V0CT0geGZzX3hhdHRyX2FjbF9zZXQsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDg3ODEzZTQuLjY2YWJlMzYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfaW9tYXAuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKICNpbmNsdWRlIDxsaW51eC9tcGFnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KQEAgLTc2LDcgKzc3LDcgQEAKIAkJd2FrZV91cCh0b19pb2VuZF93cShpcCkpOwogfQogCi1TVEFUSUMgdm9pZAordm9pZAogeGZzX2NvdW50X3BhZ2Vfc3RhdGUoCiAJc3RydWN0IHBhZ2UJCSpwYWdlLAogCWludAkJCSpkZWxhbGxvYywKQEAgLTk4LDQ4ICs5OSw2IEBACiAJfSB3aGlsZSAoKGJoID0gYmgtPmJfdGhpc19wYWdlKSAhPSBoZWFkKTsKIH0KIAotI2lmIGRlZmluZWQoWEZTX1JXX1RSQUNFKQotdm9pZAoteGZzX3BhZ2VfdHJhY2UoCi0JaW50CQl0YWcsCi0Jc3RydWN0IGlub2RlCSppbm9kZSwKLQlzdHJ1Y3QgcGFnZQkqcGFnZSwKLQl1bnNpZ25lZCBsb25nCXBnb2ZmKQotewotCXhmc19pbm9kZV90CSppcDsKLQlsb2ZmX3QJCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCWxvZmZfdAkJb2Zmc2V0ID0gcGFnZV9vZmZzZXQocGFnZSk7Ci0JaW50CQlkZWxhbGxvYyA9IC0xLCB1bm1hcHBlZCA9IC0xLCB1bndyaXR0ZW4gPSAtMTsKLQotCWlmIChwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQotCQl4ZnNfY291bnRfcGFnZV9zdGF0ZShwYWdlLCAmZGVsYWxsb2MsICZ1bm1hcHBlZCwgJnVud3JpdHRlbik7Ci0KLQlpcCA9IFhGU19JKGlub2RlKTsKLQlpZiAoIWlwLT5pX3J3dHJhY2UpCi0JCXJldHVybjsKLQotCWt0cmFjZV9lbnRlcihpcC0+aV9yd3RyYWNlLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyl0YWcpLAotCQkodm9pZCAqKWlwLAotCQkodm9pZCAqKWlub2RlLAotCQkodm9pZCAqKXBhZ2UsCi0JCSh2b2lkICopcGdvZmYsCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgoaXAtPmlfZC5kaV9zaXplID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGlwLT5pX2QuZGlfc2l6ZSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKChpc2l6ZSA+PiAzMikgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpc2l6ZSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKChvZmZzZXQgPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykob2Zmc2V0ICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZylkZWxhbGxvYyksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXVubWFwcGVkKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdW53cml0dGVuKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpY3VycmVudF9waWQoKSksCi0JCSh2b2lkICopTlVMTCk7Ci19Ci0jZWxzZQotI2RlZmluZSB4ZnNfcGFnZV90cmFjZSh0YWcsIGlub2RlLCBwYWdlLCBwZ29mZikKLSNlbmRpZgotCiBTVEFUSUMgc3RydWN0IGJsb2NrX2RldmljZSAqCiB4ZnNfZmluZF9iZGV2X2Zvcl9pbm9kZSgKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKQEAgLTEyMDIsNyArMTE2MSw3IEBACiAJaW50CQkJZGVsYWxsb2MsIHVubWFwcGVkLCB1bndyaXR0ZW47CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCi0JeGZzX3BhZ2VfdHJhY2UoWEZTX1dSSVRFUEFHRV9FTlRFUiwgaW5vZGUsIHBhZ2UsIDApOworCXRyYWNlX3hmc193cml0ZXBhZ2UoaW5vZGUsIHBhZ2UsIDApOwogCiAJLyoKIAkgKiBXZSBuZWVkIGEgdHJhbnNhY3Rpb24gaWY6CkBAIC0xMzA3LDcgKzEyNjYsNyBAQAogCQkubnJfdG9fd3JpdGUgPSAxLAogCX07CiAKLQl4ZnNfcGFnZV90cmFjZShYRlNfUkVMRUFTRVBBR0VfRU5URVIsIGlub2RlLCBwYWdlLCAwKTsKKwl0cmFjZV94ZnNfcmVsZWFzZXBhZ2UoaW5vZGUsIHBhZ2UsIDApOwogCiAJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQogCQlyZXR1cm4gMDsKQEAgLTE1MTUsMTkgKzE0NzQsMTMgQEAKIAogCWJkZXYgPSB4ZnNfZmluZF9iZGV2X2Zvcl9pbm9kZShYRlNfSShpbm9kZSkpOwogCi0JaWYgKHJ3ID09IFdSSVRFKSB7Ci0JCWlvY2ItPnByaXZhdGUgPSB4ZnNfYWxsb2NfaW9lbmQoaW5vZGUsIElPTUFQX1VOV1JJVFRFTik7Ci0JCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19vd25fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsCi0JCQliZGV2LCBpb3YsIG9mZnNldCwgbnJfc2VncywKLQkJCXhmc19nZXRfYmxvY2tzX2RpcmVjdCwKLQkJCXhmc19lbmRfaW9fZGlyZWN0KTsKLQl9IGVsc2UgewotCQlpb2NiLT5wcml2YXRlID0geGZzX2FsbG9jX2lvZW5kKGlub2RlLCBJT01BUF9SRUFEKTsKLQkJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLAotCQkJYmRldiwgaW92LCBvZmZzZXQsIG5yX3NlZ3MsCi0JCQl4ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QsCi0JCQl4ZnNfZW5kX2lvX2RpcmVjdCk7Ci0JfQorCWlvY2ItPnByaXZhdGUgPSB4ZnNfYWxsb2NfaW9lbmQoaW5vZGUsIHJ3ID09IFdSSVRFID8KKwkJCQkJSU9NQVBfVU5XUklUVEVOIDogSU9NQVBfUkVBRCk7CisKKwlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGlvdiwKKwkJCQkJICAgIG9mZnNldCwgbnJfc2VncywKKwkJCQkJICAgIHhmc19nZXRfYmxvY2tzX2RpcmVjdCwKKwkJCQkJICAgIHhmc19lbmRfaW9fZGlyZWN0KTsKIAogCWlmICh1bmxpa2VseShyZXQgIT0gLUVJT0NCUVVFVUVEICYmIGlvY2ItPnByaXZhdGUpKQogCQl4ZnNfZGVzdHJveV9pb2VuZChpb2NiLT5wcml2YXRlKTsKQEAgLTE1ODcsOCArMTU0MCw3IEBACiAJc3RydWN0IHBhZ2UJCSpwYWdlLAogCXVuc2lnbmVkIGxvbmcJCW9mZnNldCkKIHsKLQl4ZnNfcGFnZV90cmFjZShYRlNfSU5WQUxJRFBBR0VfRU5URVIsCi0JCQlwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlLCBvZmZzZXQpOworCXRyYWNlX3hmc19pbnZhbGlkYXRlcGFnZShwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlLCBvZmZzZXQpOwogCWJsb2NrX2ludmFsaWRhdGVwYWdlKHBhZ2UsIG9mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaAppbmRleCAyMjFiM2U2Li40Y2ZjNmVhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oCkBAIC00NSw0ICs0NSw2IEBACiBleHRlcm4gdm9pZCB4ZnNfaW9lbmRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHhmc19pb2VuZF93YWl0KHN0cnVjdCB4ZnNfaW5vZGUgKik7CiAKK2V4dGVybiB2b2lkIHhmc19jb3VudF9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGludCAqLCBpbnQgKiwgaW50ICopOworCiAjZW5kaWYgLyogX19YRlNfQU9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggNGRkYzk3My4uNzdiOGJlOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogc3RhdGljIGttZW1fem9uZV90ICp4ZnNfYnVmX3pvbmU7CiBTVEFUSUMgaW50IHhmc2J1ZmQodm9pZCAqKTsKQEAgLTUzLDM0ICs1NCw2IEBACiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqeGZzZGF0YWRfd29ya3F1ZXVlOwogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnhmc2NvbnZlcnRkX3dvcmtxdWV1ZTsKIAotI2lmZGVmIFhGU19CVUZfVFJBQ0UKLXZvaWQKLXhmc19idWZfdHJhY2UoCi0JeGZzX2J1Zl90CSpicCwKLQljaGFyCQkqaWQsCi0Jdm9pZAkJKmRhdGEsCi0Jdm9pZAkJKnJhKQotewotCWt0cmFjZV9lbnRlcih4ZnNfYnVmX3RyYWNlX2J1ZiwKLQkJYnAsIGlkLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJwLT5iX2ZsYWdzLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJwLT5iX2hvbGQuY291bnRlciwKLQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylicC0+Yl9zZW1hLmNvdW50LAotCQkodm9pZCAqKWN1cnJlbnQsCi0JCWRhdGEsIHJhLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKSgoYnAtPmJfZmlsZV9vZmZzZXQ+PjMyKSAmIDB4ZmZmZmZmZmYpLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKShicC0+Yl9maWxlX29mZnNldCAmIDB4ZmZmZmZmZmYpLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJwLT5iX2J1ZmZlcl9sZW5ndGgsCi0JCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotfQota3RyYWNlX3QgKnhmc19idWZfdHJhY2VfYnVmOwotI2RlZmluZSBYRlNfQlVGX1RSQUNFX1NJWkUJNDA5NgotI2RlZmluZSBYQl9UUkFDRShicCwgaWQsIGRhdGEpCVwKLQl4ZnNfYnVmX3RyYWNlKGJwLCBpZCwgKHZvaWQgKilkYXRhLCAodm9pZCAqKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLSNlbHNlCi0jZGVmaW5lIFhCX1RSQUNFKGJwLCBpZCwgZGF0YSkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNpZmRlZiBYRlNfQlVGX0xPQ0tfVFJBQ0tJTkcKICMgZGVmaW5lIFhCX1NFVF9PV05FUihicCkJKChicCktPmJfbGFzdF9ob2xkZXIgPSBjdXJyZW50LT5waWQpCiAjIGRlZmluZSBYQl9DTEVBUl9PV05FUihicCkJKChicCktPmJfbGFzdF9ob2xkZXIgPSAtMSkKQEAgLTI3OSw3ICsyNTIsOCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJwLT5iX3dhaXRlcnMpOwogCiAJWEZTX1NUQVRTX0lOQyh4Yl9jcmVhdGUpOwotCVhCX1RSQUNFKGJwLCAiaW5pdGlhbGl6ZSIsIHRhcmdldCk7CisKKwl0cmFjZV94ZnNfYnVmX2luaXQoYnAsIF9SRVRfSVBfKTsKIH0KIAogLyoKQEAgLTMxOCw2ICsyOTIsNyBAQAogewogCWlmIChicC0+Yl9wYWdlcyAhPSBicC0+Yl9wYWdlX2FycmF5KSB7CiAJCWttZW1fZnJlZShicC0+Yl9wYWdlcyk7CisJCWJwLT5iX3BhZ2VzID0gTlVMTDsKIAl9CiB9CiAKQEAgLTMzMiw3ICszMDcsNyBAQAogeGZzX2J1Zl9mcmVlKAogCXhmc19idWZfdAkJKmJwKQogewotCVhCX1RSQUNFKGJwLCAiZnJlZSIsIDApOworCXRyYWNlX3hmc19idWZfZnJlZShicCwgX1JFVF9JUF8pOwogCiAJQVNTRVJUKGxpc3RfZW1wdHkoJmJwLT5iX2hhc2hfbGlzdCkpOwogCkBAIC0zNDksOSArMzI0LDggQEAKIAkJCQlBU1NFUlQoIVBhZ2VQcml2YXRlKHBhZ2UpKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJfQotCQlfeGZzX2J1Zl9mcmVlX3BhZ2VzKGJwKTsKIAl9Ci0KKwlfeGZzX2J1Zl9mcmVlX3BhZ2VzKGJwKTsKIAl4ZnNfYnVmX2RlYWxsb2NhdGUoYnApOwogfQogCkBAIC00NDUsNyArNDE5LDYgQEAKIAlpZiAocGFnZV9jb3VudCA9PSBicC0+Yl9wYWdlX2NvdW50KQogCQlicC0+Yl9mbGFncyB8PSBYQkZfRE9ORTsKIAotCVhCX1RSQUNFKGJwLCAibG9va3VwX3BhZ2VzIiwgKGxvbmcpcGFnZV9jb3VudCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01NDgsNyArNTIxLDYgQEAKIAlpZiAoZG93bl90cnlsb2NrKCZicC0+Yl9zZW1hKSkgewogCQlpZiAoIShmbGFncyAmIFhCRl9UUllMT0NLKSkgewogCQkJLyogd2FpdCBmb3IgYnVmZmVyIG93bmVyc2hpcCAqLwotCQkJWEJfVFJBQ0UoYnAsICJnZXRfbG9jayIsIDApOwogCQkJeGZzX2J1Zl9sb2NrKGJwKTsKIAkJCVhGU19TVEFUU19JTkMoeGJfZ2V0X2xvY2tlZF93YWl0ZWQpOwogCQl9IGVsc2UgewpAQCAtNTcxLDcgKzU0Myw4IEBACiAJCUFTU0VSVCgoYnAtPmJfZmxhZ3MgJiBfWEJGX0RFTFdSSV9RKSA9PSAwKTsKIAkJYnAtPmJfZmxhZ3MgJj0gWEJGX01BUFBFRDsKIAl9Ci0JWEJfVFJBQ0UoYnAsICJnb3RfbG9jayIsIDApOworCisJdHJhY2VfeGZzX2J1Zl9maW5kKGJwLCBmbGFncywgX1JFVF9JUF8pOwogCVhGU19TVEFUU19JTkMoeGJfZ2V0X2xvY2tlZCk7CiAJcmV0dXJuIGJwOwogfQpAQCAtNjI3LDcgKzYwMCw3IEBACiAJYnAtPmJfYm4gPSBpb2ZmOwogCWJwLT5iX2NvdW50X2Rlc2lyZWQgPSBicC0+Yl9idWZmZXJfbGVuZ3RoOwogCi0JWEJfVFJBQ0UoYnAsICJnZXQiLCAodW5zaWduZWQgbG9uZylmbGFncyk7CisJdHJhY2VfeGZzX2J1Zl9nZXQoYnAsIGZsYWdzLCBfUkVUX0lQXyk7CiAJcmV0dXJuIGJwOwogCiAgbm9fYnVmZmVyOgpAQCAtNjQ0LDggKzYxNyw2IEBACiB7CiAJaW50CQkJc3RhdHVzOwogCi0JWEJfVFJBQ0UoYnAsICJfeGZzX2J1Zl9yZWFkIiwgKHVuc2lnbmVkIGxvbmcpZmxhZ3MpOwotCiAJQVNTRVJUKCEoZmxhZ3MgJiAoWEJGX0RFTFdSSXxYQkZfV1JJVEUpKSk7CiAJQVNTRVJUKGJwLT5iX2JuICE9IFhGU19CVUZfREFERFJfTlVMTCk7CiAKQEAgLTY3MywxOSArNjQ0LDE4IEBACiAKIAlicCA9IHhmc19idWZfZ2V0KHRhcmdldCwgaW9mZiwgaXNpemUsIGZsYWdzKTsKIAlpZiAoYnApIHsKKwkJdHJhY2VfeGZzX2J1Zl9yZWFkKGJwLCBmbGFncywgX1JFVF9JUF8pOworCiAJCWlmICghWEZTX0JVRl9JU0RPTkUoYnApKSB7Ci0JCQlYQl9UUkFDRShicCwgInJlYWQiLCAodW5zaWduZWQgbG9uZylmbGFncyk7CiAJCQlYRlNfU1RBVFNfSU5DKHhiX2dldF9yZWFkKTsKIAkJCV94ZnNfYnVmX3JlYWQoYnAsIGZsYWdzKTsKIAkJfSBlbHNlIGlmIChmbGFncyAmIFhCRl9BU1lOQykgewotCQkJWEJfVFJBQ0UoYnAsICJyZWFkX2FzeW5jIiwgKHVuc2lnbmVkIGxvbmcpZmxhZ3MpOwogCQkJLyoKIAkJCSAqIFJlYWQgYWhlYWQgY2FsbCB3aGljaCBpcyBhbHJlYWR5IHNhdGlzZmllZCwKIAkJCSAqIGRyb3AgdGhlIGJ1ZmZlcgogCQkJICovCiAJCQlnb3RvIG5vX2J1ZmZlcjsKIAkJfSBlbHNlIHsKLQkJCVhCX1RSQUNFKGJwLCAicmVhZF9kb25lIiwgKHVuc2lnbmVkIGxvbmcpZmxhZ3MpOwogCQkJLyogV2UgZG8gbm90IHdhbnQgcmVhZCBpbiB0aGUgZmxhZ3MgKi8KIAkJCWJwLT5iX2ZsYWdzICY9IH5YQkZfUkVBRDsKIAkJfQpAQCAtODIzLDcgKzc5Myw3IEBACiAKIAl4ZnNfYnVmX3VubG9jayhicCk7CiAKLQlYQl9UUkFDRShicCwgIm5vX2RhZGRyIiwgbGVuKTsKKwl0cmFjZV94ZnNfYnVmX2dldF9ub2FkZHIoYnAsIF9SRVRfSVBfKTsKIAlyZXR1cm4gYnA7CiAKICBmYWlsX2ZyZWVfbWVtOgpAQCAtODQ1LDggKzgxNSw4IEBACiB4ZnNfYnVmX2hvbGQoCiAJeGZzX2J1Zl90CQkqYnApCiB7CisJdHJhY2VfeGZzX2J1Zl9ob2xkKGJwLCBfUkVUX0lQXyk7CiAJYXRvbWljX2luYygmYnAtPmJfaG9sZCk7Ci0JWEJfVFJBQ0UoYnAsICJob2xkIiwgMCk7CiB9CiAKIC8qCkBAIC04NTksNyArODI5LDcgQEAKIHsKIAl4ZnNfYnVmaGFzaF90CQkqaGFzaCA9IGJwLT5iX2hhc2g7CiAKLQlYQl9UUkFDRShicCwgInJlbGUiLCBicC0+Yl9yZWxzZSk7CisJdHJhY2VfeGZzX2J1Zl9yZWxlKGJwLCBfUkVUX0lQXyk7CiAKIAlpZiAodW5saWtlbHkoIWhhc2gpKSB7CiAJCUFTU0VSVCghYnAtPmJfcmVsc2UpOwpAQCAtOTA5LDIxICs4NzksMTkgQEAKIAlpbnQJCQlsb2NrZWQ7CiAKIAlsb2NrZWQgPSBkb3duX3RyeWxvY2soJmJwLT5iX3NlbWEpID09IDA7Ci0JaWYgKGxvY2tlZCkgeworCWlmIChsb2NrZWQpCiAJCVhCX1NFVF9PV05FUihicCk7Ci0JfQotCVhCX1RSQUNFKGJwLCAiY29uZF9sb2NrIiwgKGxvbmcpbG9ja2VkKTsKKworCXRyYWNlX3hmc19idWZfY29uZF9sb2NrKGJwLCBfUkVUX0lQXyk7CiAJcmV0dXJuIGxvY2tlZCA/IDAgOiAtRUJVU1k7CiB9CiAKLSNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKFhGU19CTElfVFJBQ0UpCiBpbnQKIHhmc19idWZfbG9ja192YWx1ZSgKIAl4ZnNfYnVmX3QJCSpicCkKIHsKIAlyZXR1cm4gYnAtPmJfc2VtYS5jb3VudDsKIH0KLSNlbmRpZgogCiAvKgogICoJTG9ja3MgYSBidWZmZXIgb2JqZWN0LgpAQCAtOTM1LDEyICs5MDMsMTQgQEAKIHhmc19idWZfbG9jaygKIAl4ZnNfYnVmX3QJCSpicCkKIHsKLQlYQl9UUkFDRShicCwgImxvY2siLCAwKTsKKwl0cmFjZV94ZnNfYnVmX2xvY2soYnAsIF9SRVRfSVBfKTsKKwogCWlmIChhdG9taWNfcmVhZCgmYnAtPmJfaW9fcmVtYWluaW5nKSkKIAkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKGJwLT5iX3RhcmdldC0+YnRfbWFwcGluZyk7CiAJZG93bigmYnAtPmJfc2VtYSk7CiAJWEJfU0VUX09XTkVSKGJwKTsKLQlYQl9UUkFDRShicCwgImxvY2tlZCIsIDApOworCisJdHJhY2VfeGZzX2J1Zl9sb2NrX2RvbmUoYnAsIF9SRVRfSVBfKTsKIH0KIAogLyoKQEAgLTk2Miw3ICs5MzIsOCBAQAogCiAJWEJfQ0xFQVJfT1dORVIoYnApOwogCXVwKCZicC0+Yl9zZW1hKTsKLQlYQl9UUkFDRShicCwgInVubG9jayIsIDApOworCisJdHJhY2VfeGZzX2J1Zl91bmxvY2soYnAsIF9SRVRfSVBfKTsKIH0KIAogCkBAIC05NzQsMTcgKzk0NSwxOCBAQAogeGZzX2J1Zl9waW4oCiAJeGZzX2J1Zl90CQkqYnApCiB7CisJdHJhY2VfeGZzX2J1Zl9waW4oYnAsIF9SRVRfSVBfKTsKIAlhdG9taWNfaW5jKCZicC0+Yl9waW5fY291bnQpOwotCVhCX1RSQUNFKGJwLCAicGluIiwgKGxvbmcpYnAtPmJfcGluX2NvdW50LmNvdW50ZXIpOwogfQogCiB2b2lkCiB4ZnNfYnVmX3VucGluKAogCXhmc19idWZfdAkJKmJwKQogeworCXRyYWNlX3hmc19idWZfdW5waW4oYnAsIF9SRVRfSVBfKTsKKwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+Yl9waW5fY291bnQpKQogCQl3YWtlX3VwX2FsbCgmYnAtPmJfd2FpdGVycyk7Ci0JWEJfVFJBQ0UoYnAsICJ1bnBpbiIsIChsb25nKWJwLT5iX3Bpbl9jb3VudC5jb3VudGVyKTsKIH0KIAogaW50CkBAIC0xMDM1LDcgKzEwMDcsNyBAQAogCSAqLwogCWlmICgoYnAtPmJfZXJyb3IgPT0gRU9QTk9UU1VQUCkgJiYKIAkgICAgKGJwLT5iX2ZsYWdzICYgKFhCRl9PUkRFUkVEfFhCRl9BU1lOQykpID09IChYQkZfT1JERVJFRHxYQkZfQVNZTkMpKSB7Ci0JCVhCX1RSQUNFKGJwLCAib3JkZXJlZF9yZXRyeSIsIGJwLT5iX2lvZG9uZSk7CisJCXRyYWNlX3hmc19idWZfb3JkZXJlZF9yZXRyeShicCwgX1JFVF9JUF8pOwogCQlicC0+Yl9mbGFncyAmPSB+WEJGX09SREVSRUQ7CiAJCWJwLT5iX2ZsYWdzIHw9IF9YRlNfQkFSUklFUl9GQUlMRUQ7CiAJCXhmc19idWZfaW9yZXF1ZXN0KGJwKTsKQEAgLTEwNTAsMTIgKzEwMjIsMTIgQEAKIAl4ZnNfYnVmX3QJCSpicCwKIAlpbnQJCQlzY2hlZHVsZSkKIHsKKwl0cmFjZV94ZnNfYnVmX2lvZG9uZShicCwgX1JFVF9JUF8pOworCiAJYnAtPmJfZmxhZ3MgJj0gfihYQkZfUkVBRCB8IFhCRl9XUklURSB8IFhCRl9SRUFEX0FIRUFEKTsKIAlpZiAoYnAtPmJfZXJyb3IgPT0gMCkKIAkJYnAtPmJfZmxhZ3MgfD0gWEJGX0RPTkU7CiAKLQlYQl9UUkFDRShicCwgImlvZG9uZSIsIGJwLT5iX2lvZG9uZSk7Ci0KIAlpZiAoKGJwLT5iX2lvZG9uZSkgfHwgKGJwLT5iX2ZsYWdzICYgWEJGX0FTWU5DKSkgewogCQlpZiAoc2NoZWR1bGUpIHsKIAkJCUlOSVRfV09SSygmYnAtPmJfaW9kb25lX3dvcmssIHhmc19idWZfaW9kb25lX3dvcmspOwpAQCAtMTA3NSw3ICsxMDQ3LDcgQEAKIHsKIAlBU1NFUlQoZXJyb3IgPj0gMCAmJiBlcnJvciA8PSAweGZmZmYpOwogCWJwLT5iX2Vycm9yID0gKHVuc2lnbmVkIHNob3J0KWVycm9yOwotCVhCX1RSQUNFKGJwLCAiaW9lcnJvciIsICh1bnNpZ25lZCBsb25nKWVycm9yKTsKKwl0cmFjZV94ZnNfYnVmX2lvZXJyb3IoYnAsIGVycm9yLCBfUkVUX0lQXyk7CiB9CiAKIGludApAQCAtMTA4Myw3ICsxMDU1LDcgQEAKIAl2b2lkCQkJKm1wLAogCXN0cnVjdCB4ZnNfYnVmCQkqYnApCiB7Ci0JWEJfVFJBQ0UoYnAsICJiYXdyaXRlIiwgMCk7CisJdHJhY2VfeGZzX2J1Zl9iYXdyaXRlKGJwLCBfUkVUX0lQXyk7CiAKIAlBU1NFUlQoYnAtPmJfYm4gIT0gWEZTX0JVRl9EQUREUl9OVUxMKTsKIApAQCAtMTEwMiw3ICsxMDc0LDcgQEAKIAl2b2lkCQkJKm1wLAogCXN0cnVjdCB4ZnNfYnVmCQkqYnApCiB7Ci0JWEJfVFJBQ0UoYnAsICJiZHdyaXRlIiwgMCk7CisJdHJhY2VfeGZzX2J1Zl9iZHdyaXRlKGJwLCBfUkVUX0lQXyk7CiAKIAlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOwogCWJwLT5iX21vdW50ID0gbXA7CkBAIC0xMTc3LDEwICsxMTQ5LDE0IEBACiAJaWYgKGJwLT5iX2ZsYWdzICYgWEJGX09SREVSRUQpIHsKIAkJQVNTRVJUKCEoYnAtPmJfZmxhZ3MgJiBYQkZfUkVBRCkpOwogCQlydyA9IFdSSVRFX0JBUlJJRVI7Ci0JfSBlbHNlIGlmIChicC0+Yl9mbGFncyAmIF9YQkZfUlVOX1FVRVVFUykgeworCX0gZWxzZSBpZiAoYnAtPmJfZmxhZ3MgJiBYQkZfTE9HX0JVRkZFUikgewogCQlBU1NFUlQoIShicC0+Yl9mbGFncyAmIFhCRl9SRUFEX0FIRUFEKSk7CiAJCWJwLT5iX2ZsYWdzICY9IH5fWEJGX1JVTl9RVUVVRVM7CiAJCXJ3ID0gKGJwLT5iX2ZsYWdzICYgWEJGX1dSSVRFKSA/IFdSSVRFX1NZTkMgOiBSRUFEX1NZTkM7CisJfSBlbHNlIGlmIChicC0+Yl9mbGFncyAmIF9YQkZfUlVOX1FVRVVFUykgeworCQlBU1NFUlQoIShicC0+Yl9mbGFncyAmIFhCRl9SRUFEX0FIRUFEKSk7CisJCWJwLT5iX2ZsYWdzICY9IH5fWEJGX1JVTl9RVUVVRVM7CisJCXJ3ID0gKGJwLT5iX2ZsYWdzICYgWEJGX1dSSVRFKSA/IFdSSVRFX01FVEEgOiBSRUFEX01FVEE7CiAJfSBlbHNlIHsKIAkJcncgPSAoYnAtPmJfZmxhZ3MgJiBYQkZfV1JJVEUpID8gV1JJVEUgOgogCQkgICAgIChicC0+Yl9mbGFncyAmIFhCRl9SRUFEX0FIRUFEKSA/IFJFQURBIDogUkVBRDsKQEAgLTEyNTMsNyArMTIyOSw3IEBACiB4ZnNfYnVmX2lvcmVxdWVzdCgKIAl4ZnNfYnVmX3QJCSpicCkKIHsKLQlYQl9UUkFDRShicCwgImlvcmVxdWVzdCIsIDApOworCXRyYWNlX3hmc19idWZfaW9yZXF1ZXN0KGJwLCBfUkVUX0lQXyk7CiAKIAlpZiAoYnAtPmJfZmxhZ3MgJiBYQkZfREVMV1JJKSB7CiAJCXhmc19idWZfZGVsd3JpX3F1ZXVlKGJwLCAxKTsKQEAgLTEyODcsMTEgKzEyNjMsMTMgQEAKIHhmc19idWZfaW93YWl0KAogCXhmc19idWZfdAkJKmJwKQogewotCVhCX1RSQUNFKGJwLCAiaW93YWl0IiwgMCk7CisJdHJhY2VfeGZzX2J1Zl9pb3dhaXQoYnAsIF9SRVRfSVBfKTsKKwogCWlmIChhdG9taWNfcmVhZCgmYnAtPmJfaW9fcmVtYWluaW5nKSkKIAkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKGJwLT5iX3RhcmdldC0+YnRfbWFwcGluZyk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmYnAtPmJfaW93YWl0KTsKLQlYQl9UUkFDRShicCwgImlvd2FpdGVkIiwgKGxvbmcpYnAtPmJfZXJyb3IpOworCisJdHJhY2VfeGZzX2J1Zl9pb3dhaXRfZG9uZShicCwgX1JFVF9JUF8pOwogCXJldHVybiBicC0+Yl9lcnJvcjsKIH0KIApAQCAtMTYwNCw3ICsxNTgyLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpkd3EgPSAmYnAtPmJfdGFyZ2V0LT5idF9kZWx3cml0ZV9xdWV1ZTsKIAlzcGlubG9ja190CQkqZHdsayA9ICZicC0+Yl90YXJnZXQtPmJ0X2RlbHdyaXRlX2xvY2s7CiAKLQlYQl9UUkFDRShicCwgImRlbHdyaV9xIiwgKGxvbmcpdW5sb2NrKTsKKwl0cmFjZV94ZnNfYnVmX2RlbHdyaV9xdWV1ZShicCwgX1JFVF9JUF8pOworCiAJQVNTRVJUKChicC0+Yl9mbGFncyYoWEJGX0RFTFdSSXxYQkZfQVNZTkMpKSA9PSAoWEJGX0RFTFdSSXxYQkZfQVNZTkMpKTsKIAogCXNwaW5fbG9jayhkd2xrKTsKQEAgLTE2NDQsNyArMTYyMyw3IEBACiAJaWYgKGRlcXVldWVkKQogCQl4ZnNfYnVmX3JlbGUoYnApOwogCi0JWEJfVFJBQ0UoYnAsICJkZWx3cmlfZHEiLCAobG9uZylkZXF1ZXVlZCk7CisJdHJhY2VfeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCwgX1JFVF9JUF8pOwogfQogCiBTVEFUSUMgdm9pZApAQCAtMTY5Miw3ICsxNjcxLDcgQEAKIAlJTklUX0xJU1RfSEVBRChsaXN0KTsKIAlzcGluX2xvY2soZHdsayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJwLCBuLCBkd3EsIGJfbGlzdCkgewotCQlYQl9UUkFDRShicCwgIndhbGtxMSIsIChsb25nKXhmc19idWZfaXNwaW4oYnApKTsKKwkJdHJhY2VfeGZzX2J1Zl9kZWx3cmlfc3BsaXQoYnAsIF9SRVRfSVBfKTsKIAkJQVNTRVJUKGJwLT5iX2ZsYWdzICYgWEJGX0RFTFdSSSk7CiAKIAkJaWYgKCF4ZnNfYnVmX2lzcGluKGJwKSAmJiAheGZzX2J1Zl9jb25kX2xvY2soYnApKSB7CkBAIC0xODE2LDE0ICsxNzk1LDEwIEBACiBpbnQgX19pbml0CiB4ZnNfYnVmX2luaXQodm9pZCkKIHsKLSNpZmRlZiBYRlNfQlVGX1RSQUNFCi0JeGZzX2J1Zl90cmFjZV9idWYgPSBrdHJhY2VfYWxsb2MoWEZTX0JVRl9UUkFDRV9TSVpFLCBLTV9OT0ZTKTsKLSNlbmRpZgotCiAJeGZzX2J1Zl96b25lID0ga21lbV96b25lX2luaXRfZmxhZ3Moc2l6ZW9mKHhmc19idWZfdCksICJ4ZnNfYnVmIiwKIAkJCQkJCUtNX1pPTkVfSFdBTElHTiwgTlVMTCk7CiAJaWYgKCF4ZnNfYnVmX3pvbmUpCi0JCWdvdG8gb3V0X2ZyZWVfdHJhY2VfYnVmOworCQlnb3RvIG91dDsKIAogCXhmc2xvZ2Rfd29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgieGZzbG9nZCIpOwogCWlmICgheGZzbG9nZF93b3JrcXVldWUpCkBAIC0xODQ2LDEwICsxODIxLDcgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNsb2dkX3dvcmtxdWV1ZSk7CiAgb3V0X2ZyZWVfYnVmX3pvbmU6CiAJa21lbV96b25lX2Rlc3Ryb3koeGZzX2J1Zl96b25lKTsKLSBvdXRfZnJlZV90cmFjZV9idWY6Ci0jaWZkZWYgWEZTX0JVRl9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19idWZfdHJhY2VfYnVmKTsKLSNlbmRpZgorIG91dDoKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtMTg2MSw5ICsxODMzLDYgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNkYXRhZF93b3JrcXVldWUpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHhmc2xvZ2Rfd29ya3F1ZXVlKTsKIAlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfYnVmX3pvbmUpOwotI2lmZGVmIFhGU19CVUZfVFJBQ0UKLQlrdHJhY2VfZnJlZSh4ZnNfYnVmX3RyYWNlX2J1Zik7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19LREJfTU9EVUxFUwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCA1ZjA3ZGQ5Li5hMzRjN2I1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtNTUsNiArNTUsNyBAQAogCVhCRl9GU19NQU5BR0VEID0gKDEgPDwgOCksICAvKiBmaWxlc3lzdGVtIGNvbnRyb2xzIGZyZWVpbmcgbWVtb3J5ICAqLwogIAlYQkZfT1JERVJFRCA9ICgxIDw8IDExKSwgICAgLyogdXNlIG9yZGVyZWQgd3JpdGVzCQkgICAqLwogCVhCRl9SRUFEX0FIRUFEID0gKDEgPDwgMTIpLCAvKiBhc3luY2hyb25vdXMgcmVhZC1haGVhZAkJICAgKi8KKwlYQkZfTE9HX0JVRkZFUiA9ICgxIDw8IDEzKSwgLyogdGhpcyBpcyBhIGJ1ZmZlciB1c2VkIGZvciB0aGUgbG9nICAgKi8KIAogCS8qIGZsYWdzIHVzZWQgb25seSBhcyBhcmd1bWVudHMgdG8gYWNjZXNzIHJvdXRpbmVzICovCiAJWEJGX0xPQ0sgPSAoMSA8PCAxNCksICAgICAgIC8qIGxvY2sgcmVxdWVzdGVkCQkJICAgKi8KQEAgLTk1LDYgKzk2LDI4IEBACiAJX1hGU19CQVJSSUVSX0ZBSUxFRCA9ICgxIDw8IDIzKSwKIH0geGZzX2J1Zl9mbGFnc190OwogCisjZGVmaW5lIFhGU19CVUZfRkxBR1MgXAorCXsgWEJGX1JFQUQsCQkiUkVBRCIgfSwgXAorCXsgWEJGX1dSSVRFLAkJIldSSVRFIiB9LCBcCisJeyBYQkZfTUFQUEVELAkJIk1BUFBFRCIgfSwgXAorCXsgWEJGX0FTWU5DLAkJIkFTWU5DIiB9LCBcCisJeyBYQkZfRE9ORSwJCSJET05FIiB9LCBcCisJeyBYQkZfREVMV1JJLAkJIkRFTFdSSSIgfSwgXAorCXsgWEJGX1NUQUxFLAkJIlNUQUxFIiB9LCBcCisJeyBYQkZfRlNfTUFOQUdFRCwJIkZTX01BTkFHRUQiIH0sIFwKKwl7IFhCRl9PUkRFUkVELAkJIk9SREVSRUQiIH0sIFwKKwl7IFhCRl9SRUFEX0FIRUFELAkiUkVBRF9BSEVBRCIgfSwgXAorCXsgWEJGX0xPQ0ssCQkiTE9DSyIgfSwgIAkvKiBzaG91bGQgbmV2ZXIgYmUgc2V0ICovXAorCXsgWEJGX1RSWUxPQ0ssCQkiVFJZTE9DSyIgfSwgCS8qIGRpdHRvICovXAorCXsgWEJGX0RPTlRfQkxPQ0ssCSJET05UX0JMT0NLIiB9LAkvKiBkaXR0byAqL1wKKwl7IF9YQkZfUEFHRV9DQUNIRSwJIlBBR0VfQ0FDSEUiIH0sIFwKKwl7IF9YQkZfUEFHRVMsCQkiUEFHRVMiIH0sIFwKKwl7IF9YQkZfUlVOX1FVRVVFUywJIlJVTl9RVUVVRVMiIH0sIFwKKwl7IF9YQkZfREVMV1JJX1EsCSJERUxXUklfUSIgfSwgXAorCXsgX1hCRl9QQUdFX0xPQ0tFRCwJIlBBR0VfTE9DS0VEIiB9LCBcCisJeyBfWEZTX0JBUlJJRVJfRkFJTEVELAkiQkFSUklFUl9GQUlMRUQiIH0KKworCiB0eXBlZGVmIGVudW0gewogCVhCVF9GT1JDRV9TTEVFUCA9IDAsCiAJWEJUX0ZPUkNFX0ZMVVNIID0gMSwKQEAgLTI0MywxMyArMjY2LDYgQEAKIGV4dGVybiBpbnQgeGZzX2J1Zl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgeGZzX2J1Zl90ZXJtaW5hdGUodm9pZCk7CiAKLSNpZmRlZiBYRlNfQlVGX1RSQUNFCi1leHRlcm4ga3RyYWNlX3QgKnhmc19idWZfdHJhY2VfYnVmOwotZXh0ZXJuIHZvaWQgeGZzX2J1Zl90cmFjZSh4ZnNfYnVmX3QgKiwgY2hhciAqLCB2b2lkICosIHZvaWQgKik7Ci0jZWxzZQotI2RlZmluZSB4ZnNfYnVmX3RyYWNlKGJwLGlkLHB0cixyYSkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgeGZzX2J1Zl90YXJnZXRfbmFtZSh0YXJnZXQpCVwKIAkoeyBjaGFyIF9fYltCREVWTkFNRV9TSVpFXTsgYmRldm5hbWUoKHRhcmdldCktPmJ0X2JkZXYsIF9fYik7IF9fYjsgfSkKIApAQCAtMzY1LDEwICszODEsNiBAQAogCiAjZGVmaW5lIHhmc19icGluKGJwKQkJeGZzX2J1Zl9waW4oYnApCiAjZGVmaW5lIHhmc19idW5waW4oYnApCQl4ZnNfYnVmX3VucGluKGJwKQotCi0jZGVmaW5lIHhmc19idWZ0cmFjZShpZCwgYnApCVwKLQkgICAgeGZzX2J1Zl90cmFjZShicCwgaWQsIE5VTEwsICh2b2lkICopX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQotCiAjZGVmaW5lIHhmc19iaW9kb25lKGJwKQkJeGZzX2J1Zl9pb2VuZChicCwgMCkKIAogI2RlZmluZSB4ZnNfYmlvbW92ZShicCwgb2ZmLCBsZW4sIGRhdGEsIHJ3KSBcCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKaW5kZXggMDhiZTM2ZC4uNzUwMWI4NSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIGludCAgZnNfbm9lcnIodm9pZCkgeyByZXR1cm4gMDsgfQogaW50ICBmc19ub3N5cyh2b2lkKSB7IHJldHVybiBFTk9TWVM7IH0KQEAgLTUxLDYgKzUyLDggQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IFZGU19JKGlwKS0+aV9tYXBwaW5nOwogCWludAkJcmV0ID0gMDsKIAorCXRyYWNlX3hmc19wYWdlY2FjaGVfaW52YWwoaXAsIGZpcnN0LCBsYXN0KTsKKwogCWlmIChtYXBwaW5nLT5ucnBhZ2VzKSB7CiAJCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChtYXBwaW5nKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IDViYjUyM2QuLmEwMzRjZjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX2V4cG9ydC5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCmluZGV4IGVhZmNjN2MuLmJlMTUyN2IgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJ4ZnNfYXR0ci5oIgogI2luY2x1ZGUgInhmc19pb2N0bC5oIgogI2luY2x1ZGUgInhmc19pb2N0bDMyLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKICNkZWZpbmUgIF9OQVRJVkVfSU9DKGNtZCwgdHlwZSkgXAogCSAgX0lPQyhfSU9DX0RJUihjbWQpLCBfSU9DX1RZUEUoY21kKSwgX0lPQ19OUihjbWQpLCBzaXplb2YodHlwZSkpCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggMWYzYjRiOC4uMjI1OTQ2MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc191dGlscy5oIgogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CkBAIC03OTMsNyArNzk0LDcgQEAKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9ICZpcC0+aV92bm9kZTsKIAogCWlub2RlLT5pX2lubyA9IGlwLT5pX2lubzsKLQlpbm9kZS0+aV9zdGF0ZSA9IElfTkVXfElfTE9DSzsKKwlpbm9kZS0+aV9zdGF0ZSA9IElfTkVXOwogCWlub2RlX2FkZF90b19saXN0cyhpcC0+aV9tb3VudC0+bV9zdXBlciwgaW5vZGUpOwogCiAJaW5vZGUtPmlfbW9kZQk9IGlwLT5pX2QuZGlfbW9kZTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDYxMjdlMjQuLjVhZjBjODFjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxzdi5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAotI2luY2x1ZGUgPHN1cHBvcnQva3RyYWNlLmg+CiAjaW5jbHVkZSA8c3VwcG9ydC9kZWJ1Zy5oPgogI2luY2x1ZGUgPHN1cHBvcnQvdXVpZC5oPgogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDFiZjQ3ZjIuLjBkMzI0NTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC00OCw3MyArNDgsMTIgQEAKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKICNpbmNsdWRlICJ4ZnNfaW9tYXAuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAogCi0jaWYgZGVmaW5lZChYRlNfUldfVFJBQ0UpCi12b2lkCi14ZnNfcndfZW50ZXJfdHJhY2UoCi0JaW50CQkJdGFnLAotCXhmc19pbm9kZV90CQkqaXAsCi0Jdm9pZAkJCSpkYXRhLAotCXNpemVfdAkJCXNlZ3MsCi0JbG9mZl90CQkJb2Zmc2V0LAotCWludAkJCWlvZmxhZ3MpCi17Ci0JaWYgKGlwLT5pX3J3dHJhY2UgPT0gTlVMTCkKLQkJcmV0dXJuOwotCWt0cmFjZV9lbnRlcihpcC0+aV9yd3RyYWNlLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXRhZywKLQkJKHZvaWQgKilpcCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKChpcC0+aV9kLmRpX3NpemUgPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoaXAtPmlfZC5kaV9zaXplICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKWRhdGEsCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNlZ3MpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKG9mZnNldCA+PiAzMikgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShvZmZzZXQgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKWlvZmxhZ3MpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKGlwLT5pX25ld19zaXplID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGlwLT5pX25ld19zaXplICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyljdXJyZW50X3BpZCgpKSwKLQkJKHZvaWQgKilOVUxMLAotCQkodm9pZCAqKU5VTEwsCi0JCSh2b2lkICopTlVMTCwKLQkJKHZvaWQgKilOVUxMKTsKLX0KLQotdm9pZAoteGZzX2ludmFsX2NhY2hlZF90cmFjZSgKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JeGZzX29mZl90CW9mZnNldCwKLQl4ZnNfb2ZmX3QJbGVuLAotCXhmc19vZmZfdAlmaXJzdCwKLQl4ZnNfb2ZmX3QJbGFzdCkKLXsKLQotCWlmIChpcC0+aV9yd3RyYWNlID09IE5VTEwpCi0JCXJldHVybjsKLQlrdHJhY2VfZW50ZXIoaXAtPmlfcnd0cmFjZSwKLQkJKHZvaWQgKikoX19wc2ludF90KVhGU19JTlZBTF9DQUNIRUQsCi0JCSh2b2lkICopaXAsCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgob2Zmc2V0ID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKG9mZnNldCAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKChsZW4gPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykobGVuICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKGZpcnN0ID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGZpcnN0ICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKGxhc3QgPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykobGFzdCAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpY3VycmVudF9waWQoKSksCi0JCSh2b2lkICopTlVMTCwKLQkJKHZvaWQgKilOVUxMLAotCQkodm9pZCAqKU5VTEwsCi0JCSh2b2lkICopTlVMTCwKLQkJKHZvaWQgKilOVUxMKTsKLX0KLSNlbmRpZgotCiAvKgogICoJeGZzX2lvemVybwogICoKQEAgLTI1MCw4ICsxODksNyBAQAogCQl9CiAJfQogCi0JeGZzX3J3X2VudGVyX3RyYWNlKFhGU19SRUFEX0VOVEVSLCBpcCwKLQkJCQkodm9pZCAqKWlvdnAsIHNlZ3MsICpvZmZzZXQsIGlvZmxhZ3MpOworCXRyYWNlX3hmc19maWxlX3JlYWQoaXAsIHNpemUsICpvZmZzZXQsIGlvZmxhZ3MpOwogCiAJaW9jYi0+a2lfcG9zID0gKm9mZnNldDsKIAlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgaW92cCwgc2VncywgKm9mZnNldCk7CkBAIC0yOTIsOCArMjMwLDkgQEAKIAkJCXJldHVybiAtZXJyb3I7CiAJCX0KIAl9Ci0JeGZzX3J3X2VudGVyX3RyYWNlKFhGU19TUExJQ0VfUkVBRF9FTlRFUiwgaXAsCi0JCQkgICBwaXBlLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOworCisJdHJhY2VfeGZzX2ZpbGVfc3BsaWNlX3JlYWQoaXAsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CisKIAlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoaW5maWxwLCBwcG9zLCBwaXBlLCBjb3VudCwgZmxhZ3MpOwogCWlmIChyZXQgPiAwKQogCQlYRlNfU1RBVFNfQUREKHhzX3JlYWRfYnl0ZXMsIHJldCk7CkBAIC0zNDIsOCArMjgxLDggQEAKIAkJaXAtPmlfbmV3X3NpemUgPSBuZXdfc2l6ZTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCi0JeGZzX3J3X2VudGVyX3RyYWNlKFhGU19TUExJQ0VfV1JJVEVfRU5URVIsIGlwLAotCQkJICAgcGlwZSwgY291bnQsICpwcG9zLCBpb2ZsYWdzKTsKKwl0cmFjZV94ZnNfZmlsZV9zcGxpY2Vfd3JpdGUoaXAsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CisKIAlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHBpcGUsIG91dGZpbHAsIHBwb3MsIGNvdW50LCBmbGFncyk7CiAJaWYgKHJldCA+IDApCiAJCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7CkBAIC03MTAsOCArNjQ5LDYgQEAKIAlpZiAoKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpIHsKIAkJaWYgKG1hcHBpbmctPm5ycGFnZXMpIHsKIAkJCVdBUk5fT04obmVlZF9pX211dGV4ID09IDApOwotCQkJeGZzX2ludmFsX2NhY2hlZF90cmFjZSh4aXAsIHBvcywgLTEsCi0JCQkJCShwb3MgJiBQQUdFX0NBQ0hFX01BU0spLCAtMSk7CiAJCQllcnJvciA9IHhmc19mbHVzaGludmFsX3BhZ2VzKHhpcCwKIAkJCQkJKHBvcyAmIFBBR0VfQ0FDSEVfTUFTSyksCiAJCQkJCS0xLCBGSV9SRU1BUEZfTE9DS0VEKTsKQEAgLTcyOCw4ICs2NjUsNyBAQAogCQkJbmVlZF9pX211dGV4ID0gMDsKIAkJfQogCi0gCQl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX0RJT1dSX0VOVEVSLCB4aXAsICh2b2lkICopaW92cCwgc2VncywKLQkJCQkqb2Zmc2V0LCBpb2ZsYWdzKTsKKwkJdHJhY2VfeGZzX2ZpbGVfZGlyZWN0X3dyaXRlKHhpcCwgY291bnQsICpvZmZzZXQsIGlvZmxhZ3MpOwogCQlyZXQgPSBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGlvdnAsCiAJCQkJJnNlZ3MsIHBvcywgb2Zmc2V0LCBjb3VudCwgb2NvdW50KTsKIApAQCAtNzUyLDggKzY4OCw3IEBACiAJCXNzaXplX3QgcmV0MiA9IDA7CiAKIHdyaXRlX3JldHJ5OgotCQl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1dSSVRFX0VOVEVSLCB4aXAsICh2b2lkICopaW92cCwgc2VncywKLQkJCQkqb2Zmc2V0LCBpb2ZsYWdzKTsKKwkJdHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfd3JpdGUoeGlwLCBjb3VudCwgKm9mZnNldCwgaW9mbGFncyk7CiAJCXJldDIgPSBnZW5lcmljX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaW92cCwgc2VncywKIAkJCQlwb3MsIG9mZnNldCwgY291bnQsIHJldCk7CiAJCS8qCkBAIC04NTgsNyArNzkzLDcgQEAKIHhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICpicCkKIHsKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihicC0+Yl9tb3VudCkpIHsKLQkJeGZzX2J1ZnRyYWNlKCJYRlNfX0JEU1RSQVQgSU9FUlJPUiIsIGJwKTsKKwkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwogCQkvKgogCQkgKiBNZXRhZGF0YSB3cml0ZSB0aGF0IGRpZG4ndCBnZXQgbG9nZ2VkIGJ1dAogCQkgKiB3cml0dGVuIGRlbGF5ZWQgYW55d2F5LiBUaGVzZSBhcmVuJ3QgYXNzb2NpYXRlZApAQCAtODkxLDcgKzgyNiw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl4ZnNfYnVmdHJhY2UoIlhGU0JEU1RSQVQgSU9FUlJPUiIsIGJwKTsKKwl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7CiAJeGZzX2Jpb2Vycm9yX3JlbHNlKGJwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAppbmRleCBlNmJlMzdkLi5kMWY3Nzg5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApAQCAtMjAsNTIgKzIwLDcgQEAKIAogc3RydWN0IHhmc19tb3VudDsKIHN0cnVjdCB4ZnNfaW5vZGU7Ci1zdHJ1Y3QgeGZzX2JtYnRfaXJlYzsKIHN0cnVjdCB4ZnNfYnVmOwotc3RydWN0IHhmc19pb21hcDsKLQotI2lmIGRlZmluZWQoWEZTX1JXX1RSQUNFKQotLyoKLSAqIERlZmluZXMgZm9yIHRoZSB0cmFjZSBtZWNoYW5pc21zIGluIHhmc19scncuYy4KLSAqLwotI2RlZmluZQlYRlNfUldfS1RSQUNFX1NJWkUJMTI4Ci0KLSNkZWZpbmUJWEZTX1JFQURfRU5URVIJCTEKLSNkZWZpbmUJWEZTX1dSSVRFX0VOVEVSCQkyCi0jZGVmaW5lIFhGU19JT01BUF9SRUFEX0VOVEVSCTMKLSNkZWZpbmUJWEZTX0lPTUFQX1dSSVRFX0VOVEVSCTQKLSNkZWZpbmUJWEZTX0lPTUFQX1JFQURfTUFQCTUKLSNkZWZpbmUJWEZTX0lPTUFQX1dSSVRFX01BUAk2Ci0jZGVmaW5lCVhGU19JT01BUF9XUklURV9OT1NQQUNFCTcKLSNkZWZpbmUJWEZTX0lUUlVOQ19TVEFSVAk4Ci0jZGVmaW5lCVhGU19JVFJVTkNfRklOSVNIMQk5Ci0jZGVmaW5lCVhGU19JVFJVTkNfRklOSVNIMgkxMAotI2RlZmluZQlYRlNfQ1RSVU5DMQkJMTEKLSNkZWZpbmUJWEZTX0NUUlVOQzIJCTEyCi0jZGVmaW5lCVhGU19DVFJVTkMzCQkxMwotI2RlZmluZQlYRlNfQ1RSVU5DNAkJMTQKLSNkZWZpbmUJWEZTX0NUUlVOQzUJCTE1Ci0jZGVmaW5lCVhGU19DVFJVTkM2CQkxNgotI2RlZmluZQlYRlNfQlVOTUFQCQkxNwotI2RlZmluZQlYRlNfSU5WQUxfQ0FDSEVECTE4Ci0jZGVmaW5lCVhGU19ESU9SRF9FTlRFUgkJMTkKLSNkZWZpbmUJWEZTX0RJT1dSX0VOVEVSCQkyMAotI2RlZmluZQlYRlNfV1JJVEVQQUdFX0VOVEVSCTIyCi0jZGVmaW5lCVhGU19SRUxFQVNFUEFHRV9FTlRFUgkyMwotI2RlZmluZQlYRlNfSU5WQUxJRFBBR0VfRU5URVIJMjQKLSNkZWZpbmUJWEZTX0lPTUFQX0FMTE9DX0VOVEVSCTI1Ci0jZGVmaW5lCVhGU19JT01BUF9BTExPQ19NQVAJMjYKLSNkZWZpbmUJWEZTX0lPTUFQX1VOV1JJVFRFTgkyNwotI2RlZmluZSBYRlNfU1BMSUNFX1JFQURfRU5URVIJMjgKLSNkZWZpbmUgWEZTX1NQTElDRV9XUklURV9FTlRFUgkyOQotZXh0ZXJuIHZvaWQgeGZzX3J3X2VudGVyX3RyYWNlKGludCwgc3RydWN0IHhmc19pbm9kZSAqLAotCQl2b2lkICosIHNpemVfdCwgbG9mZl90LCBpbnQpOwotZXh0ZXJuIHZvaWQgeGZzX2ludmFsX2NhY2hlZF90cmFjZShzdHJ1Y3QgeGZzX2lub2RlICosCi0JCXhmc19vZmZfdCwgeGZzX29mZl90LCB4ZnNfb2ZmX3QsIHhmc19vZmZfdCk7Ci0jZWxzZQotI2RlZmluZSB4ZnNfcndfZW50ZXJfdHJhY2UodGFnLCBpcCwgZGF0YSwgc2l6ZSwgb2Zmc2V0LCBpb2ZsYWdzKQotI2RlZmluZSB4ZnNfaW52YWxfY2FjaGVkX3RyYWNlKGlwLCBvZmZzZXQsIGxlbiwgZmlyc3QsIGxhc3QpCi0jZW5kaWYKIAogLyogZXJyb3JzIGZyb20geGZzYmRzdHJhdCgpIG11c3QgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGJ1ZmZlciAqLwogZXh0ZXJuIHZvaWQgeGZzYmRzdHJhdChzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfYnVmICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggMWJmYjBlOS4uMDk3ODNjYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAogICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KKwogI2luY2x1ZGUgInhmcy5oIgogI2luY2x1ZGUgInhmc19iaXQuaCIKICNpbmNsdWRlICJ4ZnNfbG9nLmgiCkBAIC01MiwxMSArNTMsMTEgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgogI2luY2x1ZGUgInhmc19maWxlc3RyZWFtLmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKICNpbmNsdWRlICJ4ZnNfZXh0ZnJlZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX21ydV9jYWNoZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3N5bmMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTUyNSw4ICsxNTI2LDYgQEAKIAkJZ290byBmYWlsX3ZucmVsZTsKIAogCWtmcmVlKG10cHQpOwotCi0JeGZzX2l0cmFjZV9leGl0KFhGU19JKHNiLT5zX3Jvb3QtPmRfaW5vZGUpKTsKIAlyZXR1cm4gMDsKIAogIG91dF9maWxlc3RyZWFtX3VubW91bnQ6CkBAIC0xNjAyLDk0ICsxNjAxLDYgQEAKIH07CiAKIFNUQVRJQyBpbnQgX19pbml0Ci14ZnNfYWxsb2NfdHJhY2VfYnVmcyh2b2lkKQotewotI2lmZGVmIFhGU19BTExPQ19UUkFDRQotCXhmc19hbGxvY190cmFjZV9idWYgPSBrdHJhY2VfYWxsb2MoWEZTX0FMTE9DX1RSQUNFX1NJWkUsIEtNX01BWUZBSUwpOwotCWlmICgheGZzX2FsbG9jX3RyYWNlX2J1ZikKLQkJZ290byBvdXQ7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQk1BUF9UUkFDRQotCXhmc19ibWFwX3RyYWNlX2J1ZiA9IGt0cmFjZV9hbGxvYyhYRlNfQk1BUF9UUkFDRV9TSVpFLCBLTV9NQVlGQUlMKTsKLQlpZiAoIXhmc19ibWFwX3RyYWNlX2J1ZikKLQkJZ290byBvdXRfZnJlZV9hbGxvY190cmFjZTsKLSNlbmRpZgotI2lmZGVmIFhGU19CVFJFRV9UUkFDRQotCXhmc19hbGxvY2J0X3RyYWNlX2J1ZiA9IGt0cmFjZV9hbGxvYyhYRlNfQUxMT0NCVF9UUkFDRV9TSVpFLAotCQkJCQkgICAgIEtNX01BWUZBSUwpOwotCWlmICgheGZzX2FsbG9jYnRfdHJhY2VfYnVmKQotCQlnb3RvIG91dF9mcmVlX2JtYXBfdHJhY2U7Ci0KLQl4ZnNfaW5vYnRfdHJhY2VfYnVmID0ga3RyYWNlX2FsbG9jKFhGU19JTk9CVF9UUkFDRV9TSVpFLCBLTV9NQVlGQUlMKTsKLQlpZiAoIXhmc19pbm9idF90cmFjZV9idWYpCi0JCWdvdG8gb3V0X2ZyZWVfYWxsb2NidF90cmFjZTsKLQotCXhmc19ibWJ0X3RyYWNlX2J1ZiA9IGt0cmFjZV9hbGxvYyhYRlNfQk1CVF9UUkFDRV9TSVpFLCBLTV9NQVlGQUlMKTsKLQlpZiAoIXhmc19ibWJ0X3RyYWNlX2J1ZikKLQkJZ290byBvdXRfZnJlZV9pbm9idF90cmFjZTsKLSNlbmRpZgotI2lmZGVmIFhGU19BVFRSX1RSQUNFCi0JeGZzX2F0dHJfdHJhY2VfYnVmID0ga3RyYWNlX2FsbG9jKFhGU19BVFRSX1RSQUNFX1NJWkUsIEtNX01BWUZBSUwpOwotCWlmICgheGZzX2F0dHJfdHJhY2VfYnVmKQotCQlnb3RvIG91dF9mcmVlX2JtYnRfdHJhY2U7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfRElSMl9UUkFDRQotCXhmc19kaXIyX3RyYWNlX2J1ZiA9IGt0cmFjZV9hbGxvYyhYRlNfRElSMl9HVFJBQ0VfU0laRSwgS01fTUFZRkFJTCk7Ci0JaWYgKCF4ZnNfZGlyMl90cmFjZV9idWYpCi0JCWdvdG8gb3V0X2ZyZWVfYXR0cl90cmFjZTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci0KLSNpZmRlZiBYRlNfRElSMl9UUkFDRQotIG91dF9mcmVlX2F0dHJfdHJhY2U6Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQVRUUl9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19hdHRyX3RyYWNlX2J1Zik7Ci0gb3V0X2ZyZWVfYm1idF90cmFjZToKLSNlbmRpZgotI2lmZGVmIFhGU19CVFJFRV9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19ibWJ0X3RyYWNlX2J1Zik7Ci0gb3V0X2ZyZWVfaW5vYnRfdHJhY2U6Ci0Ja3RyYWNlX2ZyZWUoeGZzX2lub2J0X3RyYWNlX2J1Zik7Ci0gb3V0X2ZyZWVfYWxsb2NidF90cmFjZToKLQlrdHJhY2VfZnJlZSh4ZnNfYWxsb2NidF90cmFjZV9idWYpOwotIG91dF9mcmVlX2JtYXBfdHJhY2U6Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQk1BUF9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19ibWFwX3RyYWNlX2J1Zik7Ci0gb3V0X2ZyZWVfYWxsb2NfdHJhY2U6Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQUxMT0NfVFJBQ0UKLQlrdHJhY2VfZnJlZSh4ZnNfYWxsb2NfdHJhY2VfYnVmKTsKLSBvdXQ6Ci0jZW5kaWYKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotU1RBVElDIHZvaWQKLXhmc19mcmVlX3RyYWNlX2J1ZnModm9pZCkKLXsKLSNpZmRlZiBYRlNfRElSMl9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19kaXIyX3RyYWNlX2J1Zik7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQVRUUl9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19hdHRyX3RyYWNlX2J1Zik7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQlRSRUVfVFJBQ0UKLQlrdHJhY2VfZnJlZSh4ZnNfYm1idF90cmFjZV9idWYpOwotCWt0cmFjZV9mcmVlKHhmc19pbm9idF90cmFjZV9idWYpOwotCWt0cmFjZV9mcmVlKHhmc19hbGxvY2J0X3RyYWNlX2J1Zik7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQk1BUF9UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19ibWFwX3RyYWNlX2J1Zik7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQUxMT0NfVFJBQ0UKLQlrdHJhY2VfZnJlZSh4ZnNfYWxsb2NfdHJhY2VfYnVmKTsKLSNlbmRpZgotfQotCi1TVEFUSUMgaW50IF9faW5pdAogeGZzX2luaXRfem9uZXModm9pZCkKIHsKIApAQCAtMTgzMCw3ICsxNzQxLDYgQEAKIAlwcmludGsoS0VSTl9JTkZPIFhGU19WRVJTSU9OX1NUUklORyAiIHdpdGggIgogCQkJIFhGU19CVUlMRF9PUFRJT05TICIgZW5hYmxlZFxuIik7CiAKLQlrdHJhY2VfaW5pdCg2NCk7CiAJeGZzX2lvZW5kX2luaXQoKTsKIAl4ZnNfZGlyX3N0YXJ0dXAoKTsKIApAQCAtMTgzOCwxMyArMTc0OCw5IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0geGZzX2FsbG9jX3RyYWNlX2J1ZnMoKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2Rlc3Ryb3lfem9uZXM7Ci0KIAllcnJvciA9IHhmc19tcnVfY2FjaGVfaW5pdCgpOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZV90cmFjZV9idWZmZXJzOworCQlnb3RvIG91dF9kZXN0cm95X3pvbmVzOwogCiAJZXJyb3IgPSB4ZnNfZmlsZXN0cmVhbV9pbml0KCk7CiAJaWYgKGVycm9yKQpAQCAtMTg3OSw4ICsxNzg1LDYgQEAKIAl4ZnNfZmlsZXN0cmVhbV91bmluaXQoKTsKICBvdXRfbXJ1X2NhY2hlX3VuaW5pdDoKIAl4ZnNfbXJ1X2NhY2hlX3VuaW5pdCgpOwotIG91dF9mcmVlX3RyYWNlX2J1ZmZlcnM6Ci0JeGZzX2ZyZWVfdHJhY2VfYnVmcygpOwogIG91dF9kZXN0cm95X3pvbmVzOgogCXhmc19kZXN0cm95X3pvbmVzKCk7CiAgb3V0OgpAQCAtMTg5Nyw5ICsxODAxLDcgQEAKIAl4ZnNfYnVmX3Rlcm1pbmF0ZSgpOwogCXhmc19maWxlc3RyZWFtX3VuaW5pdCgpOwogCXhmc19tcnVfY2FjaGVfdW5pbml0KCk7Ci0JeGZzX2ZyZWVfdHJhY2VfYnVmcygpOwogCXhmc19kZXN0cm95X3pvbmVzKCk7Ci0Ja3RyYWNlX3VuaW5pdCgpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X3hmc19mcyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAppbmRleCAxODE3NWViLi4yMzNkNGI5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKQEAgLTU2LDEyICs1Niw2IEBACiAjIGRlZmluZSBYRlNfQklHRlNfU1RSSU5HCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YRlNfVFJBQ0UKLSMgZGVmaW5lIFhGU19UUkFDRV9TVFJJTkcJInRyYWNpbmcsICIKLSNlbHNlCi0jIGRlZmluZSBYRlNfVFJBQ0VfU1RSSU5HCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKICMgZGVmaW5lIFhGU19ETUFQSV9TVFJJTkcJImRtYXBpIHN1cHBvcnQsICIKICNlbHNlCkBAIC03OCw3ICs3Miw2IEBACiAJCQkJWEZTX1NFQ1VSSVRZX1NUUklORyBcCiAJCQkJWEZTX1JFQUxUSU1FX1NUUklORyBcCiAJCQkJWEZTX0JJR0ZTX1NUUklORyBcCi0JCQkJWEZTX1RSQUNFX1NUUklORyBcCiAJCQkJWEZTX0RNQVBJX1NUUklORyBcCiAJCQkJWEZTX0RCR19TVFJJTkcgLyogREJHIG11c3QgYmUgbGFzdCAqLwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggZDg5NWEzYS4uNmZlZDk3YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX3F1b3RhLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2ZWIzYwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlICJ4ZnMuaCIKKyNpbmNsdWRlICJ4ZnNfZnMuaCIKKyNpbmNsdWRlICJ4ZnNfdHlwZXMuaCIKKyNpbmNsdWRlICJ4ZnNfYml0LmgiCisjaW5jbHVkZSAieGZzX2xvZy5oIgorI2luY2x1ZGUgInhmc19pbnVtLmgiCisjaW5jbHVkZSAieGZzX3RyYW5zLmgiCisjaW5jbHVkZSAieGZzX3NiLmgiCisjaW5jbHVkZSAieGZzX2FnLmgiCisjaW5jbHVkZSAieGZzX2RpcjIuaCIKKyNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKKyNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgorI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgorI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKKyNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgorI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCisjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgorI2luY2x1ZGUgInhmc19pbm9kZS5oIgorI2luY2x1ZGUgInhmc19idHJlZS5oIgorI2luY2x1ZGUgInhmc19kbWFwaS5oIgorI2luY2x1ZGUgInhmc19tb3VudC5oIgorI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKKyNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCisjaW5jbHVkZSAieGZzX2FsbG9jLmgiCisjaW5jbHVkZSAieGZzX2JtYXAuaCIKKyNpbmNsdWRlICJ4ZnNfYXR0ci5oIgorI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCisjaW5jbHVkZSAieGZzX2F0dHJfbGVhZi5oIgorI2luY2x1ZGUgInhmc19sb2dfcHJpdi5oIgorI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgorI2luY2x1ZGUgInhmc19xdW90YS5oIgorI2luY2x1ZGUgInhmc19pb21hcC5oIgorI2luY2x1ZGUgInhmc19hb3BzLmgiCisjaW5jbHVkZSAicXVvdGEveGZzX2RxdW90X2l0ZW0uaCIKKyNpbmNsdWRlICJxdW90YS94ZnNfZHF1b3QuaCIKKworLyoKKyAqIEZvcm1hdCBmc2Jsb2NrIG51bWJlciBpbnRvIGEgc3RhdGljIGJ1ZmZlciAmIHJldHVybiBpdC4KKyAqLworU1RBVElDIGNoYXIgKnhmc19mbXRmc2Jsb2NrKHhmc19mc2Jsb2NrX3QgYm5vKQoreworCXN0YXRpYyBjaGFyIHJ2YWxbNTBdOworCisJaWYgKGJubyA9PSBOVUxMRlNCTE9DSykKKwkJc3ByaW50ZihydmFsLCAiTlVMTEZTQkxPQ0siKTsKKwllbHNlIGlmIChpc251bGxzdGFydGJsb2NrKGJubykpCisJCXNwcmludGYocnZhbCwgIk5VTExTVEFSVEJMT0NLKCVsbGQpIiwgc3RhcnRibG9ja3ZhbChibm8pKTsKKwllbHNlCisJCXNwcmludGYocnZhbCwgIiVsbGQiLCAoeGZzX2Rmc2Jub190KWJubyk7CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qCisgKiBXZSBpbmNsdWRlIHRoaXMgbGFzdCB0byBoYXZlIHRoZSBoZWxwZXJzIGFib3ZlIGF2YWlsYWJsZSBmb3IgdGhlIHRyYWNlCisgKiBldmVudCBpbXBsZW1lbnRhdGlvbnMuCisgKi8KKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInhmc190cmFjZS5oIgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwODM0YgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKQEAgLTAsMCArMSwxMzY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBDaHJpc3RvcGggSGVsbHdpZworICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0geGZzCisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfWEZTX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9YRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitzdHJ1Y3QgeGZzX2FnZjsKK3N0cnVjdCB4ZnNfYWxsb2NfYXJnOworc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dDsKK3N0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtOworc3RydWN0IHhmc19kYV9hcmdzOworc3RydWN0IHhmc19kYV9ub2RlX2VudHJ5Oworc3RydWN0IHhmc19kcXVvdDsKK3N0cnVjdCB4bG9nX3RpY2tldDsKK3N0cnVjdCBsb2c7CisKKyNkZWZpbmUgREVGSU5FX0FUVFJfTElTVF9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY3R4KSwgXAorCVRQX0FSR1MoY3R4KSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pIFwKKwkJX19maWVsZCh1MzIsIGhhc2h2YWwpIFwKKwkJX19maWVsZCh1MzIsIGJsa25vKSBcCisJCV9fZmllbGQodTMyLCBvZmZzZXQpIFwKKwkJX19maWVsZCh2b2lkICosIGFsaXN0KSBcCisJCV9fZmllbGQoaW50LCBidWZzaXplKSBcCisJCV9fZmllbGQoaW50LCBjb3VudCkgXAorCQlfX2ZpZWxkKGludCwgZmlyc3R1KSBcCisJCV9fZmllbGQoaW50LCBkdXBjbnQpIFwKKwkJX19maWVsZChpbnQsIGZsYWdzKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IFZGU19JKGN0eC0+ZHApLT5pX3NiLT5zX2RldjsgXAorCQlfX2VudHJ5LT5pbm8gPSBjdHgtPmRwLT5pX2lubzsgXAorCQlfX2VudHJ5LT5oYXNodmFsID0gY3R4LT5jdXJzb3ItPmhhc2h2YWw7IFwKKwkJX19lbnRyeS0+Ymxrbm8gPSBjdHgtPmN1cnNvci0+Ymxrbm87IFwKKwkJX19lbnRyeS0+b2Zmc2V0ID0gY3R4LT5jdXJzb3ItPm9mZnNldDsgXAorCQlfX2VudHJ5LT5hbGlzdCA9IGN0eC0+YWxpc3Q7IFwKKwkJX19lbnRyeS0+YnVmc2l6ZSA9IGN0eC0+YnVmc2l6ZTsgXAorCQlfX2VudHJ5LT5jb3VudCA9IGN0eC0+Y291bnQ7IFwKKwkJX19lbnRyeS0+Zmlyc3R1ID0gY3R4LT5maXJzdHU7IFwKKwkJX19lbnRyeS0+ZmxhZ3MgPSBjdHgtPmZsYWdzOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggY3Vyc29yIGgvYi9vIDB4JXgvMHgleC8ldSBkdXBjbnQgJXUgIiBcCisJCSAgImFsaXN0IDB4JXAgc2l6ZSAldSBjb3VudCAldSBmaXJzdHUgJXUgZmxhZ3MgJWQgJXMiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgICBfX2VudHJ5LT5pbm8sIFwKKwkJICAgX19lbnRyeS0+aGFzaHZhbCwgXAorCQkgICBfX2VudHJ5LT5ibGtubywgXAorCQkgICBfX2VudHJ5LT5vZmZzZXQsIFwKKwkJICAgX19lbnRyeS0+ZHVwY250LCBcCisJCSAgIF9fZW50cnktPmFsaXN0LCBcCisJCSAgIF9fZW50cnktPmJ1ZnNpemUsIFwKKwkJICAgX19lbnRyeS0+Y291bnQsIFwKKwkJICAgX19lbnRyeS0+Zmlyc3R1LCBcCisJCSAgIF9fZW50cnktPmZsYWdzLCBcCisJCSAgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0FUVFJfRkxBR1MpIFwKKwkpIFwKKykKK0RFRklORV9BVFRSX0xJU1RfRVZFTlQoeGZzX2F0dHJfbGlzdF9zZik7CitERUZJTkVfQVRUUl9MSVNUX0VWRU5UKHhmc19hdHRyX2xpc3Rfc2ZfYWxsKTsKK0RFRklORV9BVFRSX0xJU1RfRVZFTlQoeGZzX2F0dHJfbGlzdF9sZWFmKTsKK0RFRklORV9BVFRSX0xJU1RfRVZFTlQoeGZzX2F0dHJfbGlzdF9sZWFmX2VuZCk7CitERUZJTkVfQVRUUl9MSVNUX0VWRU5UKHhmc19hdHRyX2xpc3RfZnVsbCk7CitERUZJTkVfQVRUUl9MSVNUX0VWRU5UKHhmc19hdHRyX2xpc3RfYWRkKTsKK0RFRklORV9BVFRSX0xJU1RfRVZFTlQoeGZzX2F0dHJfbGlzdF93cm9uZ19ibGspOworREVGSU5FX0FUVFJfTElTVF9FVkVOVCh4ZnNfYXR0cl9saXN0X25vdGZvdW5kKTsKKworVFJBQ0VfRVZFTlQoeGZzX2F0dHJfbGlzdF9ub2RlX2Rlc2NlbmQsCisJVFBfUFJPVE8oc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY3R4LAorCQkgc3RydWN0IHhmc19kYV9ub2RlX2VudHJ5ICpidHJlZSksCisJVFBfQVJHUyhjdHgsIGJ0cmVlKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQodTMyLCBoYXNodmFsKQorCQlfX2ZpZWxkKHUzMiwgYmxrbm8pCisJCV9fZmllbGQodTMyLCBvZmZzZXQpCisJCV9fZmllbGQodm9pZCAqLCBhbGlzdCkKKwkJX19maWVsZChpbnQsIGJ1ZnNpemUpCisJCV9fZmllbGQoaW50LCBjb3VudCkKKwkJX19maWVsZChpbnQsIGZpcnN0dSkKKwkJX19maWVsZChpbnQsIGR1cGNudCkKKwkJX19maWVsZChpbnQsIGZsYWdzKQorCQlfX2ZpZWxkKHUzMiwgYnRfaGFzaHZhbCkKKwkJX19maWVsZCh1MzIsIGJ0X2JlZm9yZSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShjdHgtPmRwKS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubyA9IGN0eC0+ZHAtPmlfaW5vOworCQlfX2VudHJ5LT5oYXNodmFsID0gY3R4LT5jdXJzb3ItPmhhc2h2YWw7CisJCV9fZW50cnktPmJsa25vID0gY3R4LT5jdXJzb3ItPmJsa25vOworCQlfX2VudHJ5LT5vZmZzZXQgPSBjdHgtPmN1cnNvci0+b2Zmc2V0OworCQlfX2VudHJ5LT5hbGlzdCA9IGN0eC0+YWxpc3Q7CisJCV9fZW50cnktPmJ1ZnNpemUgPSBjdHgtPmJ1ZnNpemU7CisJCV9fZW50cnktPmNvdW50ID0gY3R4LT5jb3VudDsKKwkJX19lbnRyeS0+Zmlyc3R1ID0gY3R4LT5maXJzdHU7CisJCV9fZW50cnktPmZsYWdzID0gY3R4LT5mbGFnczsKKwkJX19lbnRyeS0+YnRfaGFzaHZhbCA9IGJlMzJfdG9fY3B1KGJ0cmVlLT5oYXNodmFsKTsKKwkJX19lbnRyeS0+YnRfYmVmb3JlID0gYmUzMl90b19jcHUoYnRyZWUtPmJlZm9yZSk7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IGN1cnNvciBoL2IvbyAweCV4LzB4JXgvJXUgZHVwY250ICV1ICIKKwkJICAiYWxpc3QgMHglcCBzaXplICV1IGNvdW50ICV1IGZpcnN0dSAldSBmbGFncyAlZCAlcyAiCisJCSAgIm5vZGUgaGFzaHZhbCAldSwgbm9kZSBiZWZvcmUgJXUiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgIF9fZW50cnktPmlubywKKwkJICAgX19lbnRyeS0+aGFzaHZhbCwKKwkJICAgX19lbnRyeS0+Ymxrbm8sCisJCSAgIF9fZW50cnktPm9mZnNldCwKKwkJICAgX19lbnRyeS0+ZHVwY250LAorCQkgICBfX2VudHJ5LT5hbGlzdCwKKwkJICAgX19lbnRyeS0+YnVmc2l6ZSwKKwkJICAgX19lbnRyeS0+Y291bnQsCisJCSAgIF9fZW50cnktPmZpcnN0dSwKKwkJICAgX19lbnRyeS0+ZmxhZ3MsCisJCSAgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0FUVFJfRkxBR1MpLAorCQkgICBfX2VudHJ5LT5idF9oYXNodmFsLAorCQkgICBfX2VudHJ5LT5idF9iZWZvcmUpCispOworCitUUkFDRV9FVkVOVCh4ZnNfaWV4dF9pbnNlcnQsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19leHRudW1fdCBpZHgsCisJCSBzdHJ1Y3QgeGZzX2JtYnRfaXJlYyAqciwgaW50IHN0YXRlLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksCisJVFBfQVJHUyhpcCwgaWR4LCByLCBzdGF0ZSwgY2FsbGVyX2lwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQoeGZzX2V4dG51bV90LCBpZHgpCisJCV9fZmllbGQoeGZzX2ZpbGVvZmZfdCwgc3RhcnRvZmYpCisJCV9fZmllbGQoeGZzX2ZzYmxvY2tfdCwgc3RhcnRibG9jaykKKwkJX19maWVsZCh4ZnNfZmlsYmxrc190LCBibG9ja2NvdW50KQorCQlfX2ZpZWxkKHhmc19leG50c3RfdCwgc3RhdGUpCisJCV9fZmllbGQoaW50LCBibWFwX3N0YXRlKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87CisJCV9fZW50cnktPmlkeCA9IGlkeDsKKwkJX19lbnRyeS0+c3RhcnRvZmYgPSByLT5icl9zdGFydG9mZjsKKwkJX19lbnRyeS0+c3RhcnRibG9jayA9IHItPmJyX3N0YXJ0YmxvY2s7CisJCV9fZW50cnktPmJsb2NrY291bnQgPSByLT5icl9ibG9ja2NvdW50OworCQlfX2VudHJ5LT5zdGF0ZSA9IHItPmJyX3N0YXRlOworCQlfX2VudHJ5LT5ibWFwX3N0YXRlID0gc3RhdGU7CisJCV9fZW50cnktPmNhbGxlcl9pcCA9IGNhbGxlcl9pcDsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc3RhdGUgJXMgaWR4ICVsZCAiCisJCSAgIm9mZnNldCAlbGxkIGJsb2NrICVzIGNvdW50ICVsbGQgZmxhZyAlZCBjYWxsZXIgJXBmIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmJtYXBfc3RhdGUsICJ8IiwgWEZTX0JNQVBfRVhUX0ZMQUdTKSwKKwkJICAobG9uZylfX2VudHJ5LT5pZHgsCisJCSAgX19lbnRyeS0+c3RhcnRvZmYsCisJCSAgeGZzX2ZtdGZzYmxvY2soX19lbnRyeS0+c3RhcnRibG9jayksCisJCSAgX19lbnRyeS0+YmxvY2tjb3VudCwKKwkJICBfX2VudHJ5LT5zdGF0ZSwKKwkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkKKyk7CisKKyNkZWZpbmUgREVGSU5FX0JNQVBfRVZFTlQobmFtZSkgXAorVFJBQ0VfRVZFTlQobmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfZXh0bnVtX3QgaWR4LCBpbnQgc3RhdGUsIFwKKwkJIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwgXAorCVRQX0FSR1MoaXAsIGlkeCwgc3RhdGUsIGNhbGxlcl9pcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCisJCV9fZmllbGQoeGZzX2V4dG51bV90LCBpZHgpIFwKKwkJX19maWVsZCh4ZnNfZmlsZW9mZl90LCBzdGFydG9mZikgXAorCQlfX2ZpZWxkKHhmc19mc2Jsb2NrX3QsIHN0YXJ0YmxvY2spIFwKKwkJX19maWVsZCh4ZnNfZmlsYmxrc190LCBibG9ja2NvdW50KSBcCisJCV9fZmllbGQoeGZzX2V4bnRzdF90LCBzdGF0ZSkgXAorCQlfX2ZpZWxkKGludCwgYm1hcF9zdGF0ZSkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlzdHJ1Y3QgeGZzX2lmb3JrCSppZnAgPSAoc3RhdGUgJiBCTUFQX0FUVFJGT1JLKSA/IFwKKwkJCQkJCWlwLT5pX2FmcCA6ICZpcC0+aV9kZjsgXAorCQlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwlyOyBcCisJXAorCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpLCAmcik7IFwKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsgXAorCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87IFwKKwkJX19lbnRyeS0+aWR4ID0gaWR4OyBcCisJCV9fZW50cnktPnN0YXJ0b2ZmID0gci5icl9zdGFydG9mZjsgXAorCQlfX2VudHJ5LT5zdGFydGJsb2NrID0gci5icl9zdGFydGJsb2NrOyBcCisJCV9fZW50cnktPmJsb2NrY291bnQgPSByLmJyX2Jsb2NrY291bnQ7IFwKKwkJX19lbnRyeS0+c3RhdGUgPSByLmJyX3N0YXRlOyBcCisJCV9fZW50cnktPmJtYXBfc3RhdGUgPSBzdGF0ZTsgXAorCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzdGF0ZSAlcyBpZHggJWxkICIgXAorCQkgICJvZmZzZXQgJWxsZCBibG9jayAlcyBjb3VudCAlbGxkIGZsYWcgJWQgY2FsbGVyICVwZiIsIFwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCisJCSAgX19lbnRyeS0+aW5vLCBcCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5ibWFwX3N0YXRlLCAifCIsIFhGU19CTUFQX0VYVF9GTEFHUyksIFwKKwkJICAobG9uZylfX2VudHJ5LT5pZHgsIFwKKwkJICBfX2VudHJ5LT5zdGFydG9mZiwgXAorCQkgIHhmc19mbXRmc2Jsb2NrKF9fZW50cnktPnN0YXJ0YmxvY2spLCBcCisJCSAgX19lbnRyeS0+YmxvY2tjb3VudCwgXAorCQkgIF9fZW50cnktPnN0YXRlLCBcCisJCSAgKGNoYXIgKilfX2VudHJ5LT5jYWxsZXJfaXApIFwKKykKKworREVGSU5FX0JNQVBfRVZFTlQoeGZzX2lleHRfcmVtb3ZlKTsKK0RFRklORV9CTUFQX0VWRU5UKHhmc19ibWFwX3ByZV91cGRhdGUpOworREVGSU5FX0JNQVBfRVZFTlQoeGZzX2JtYXBfcG9zdF91cGRhdGUpOworREVGSU5FX0JNQVBfRVZFTlQoeGZzX2V4dGxpc3QpOworCisjZGVmaW5lIERFRklORV9CVUZfRVZFTlQodG5hbWUpIFwKK1RSQUNFX0VWRU5UKHRuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19idWYgKmJwLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKGJwLCBjYWxsZXJfaXApLCBcCisJVFBfU1RSVUNUX19lbnRyeSggXAorCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKKwkJX19maWVsZCh4ZnNfZGFkZHJfdCwgYm5vKSBcCisJCV9fZmllbGQoc2l6ZV90LCBidWZmZXJfbGVuZ3RoKSBcCisJCV9fZmllbGQoaW50LCBob2xkKSBcCisJCV9fZmllbGQoaW50LCBwaW5jb3VudCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkLCBsb2NrdmFsKSBcCisJCV9fZmllbGQodW5zaWduZWQsIGZsYWdzKSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgY2FsbGVyX2lwKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IGJwLT5iX3RhcmdldC0+YnRfZGV2OyBcCisJCV9fZW50cnktPmJubyA9IGJwLT5iX2JuOyBcCisJCV9fZW50cnktPmJ1ZmZlcl9sZW5ndGggPSBicC0+Yl9idWZmZXJfbGVuZ3RoOyBcCisJCV9fZW50cnktPmhvbGQgPSBhdG9taWNfcmVhZCgmYnAtPmJfaG9sZCk7IFwKKwkJX19lbnRyeS0+cGluY291bnQgPSBhdG9taWNfcmVhZCgmYnAtPmJfcGluX2NvdW50KTsgXAorCQlfX2VudHJ5LT5sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJwKTsgXAorCQlfX2VudHJ5LT5mbGFncyA9IGJwLT5iX2ZsYWdzOyBcCisJCV9fZW50cnktPmNhbGxlcl9pcCA9IGNhbGxlcl9pcDsgXAorCSksIFwKKwlUUF9wcmludGsoImRldiAlZDolZCBibm8gMHglbGx4IGxlbiAweCV6eCBob2xkICVkIHBpbmNvdW50ICVkICIgXAorCQkgICJsb2NrICVkIGZsYWdzICVzIGNhbGxlciAlcGYiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+Ym5vLCBcCisJCSAgX19lbnRyeS0+YnVmZmVyX2xlbmd0aCwgXAorCQkgIF9fZW50cnktPmhvbGQsIFwKKwkJICBfX2VudHJ5LT5waW5jb3VudCwgXAorCQkgIF9fZW50cnktPmxvY2t2YWwsIFwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCAifCIsIFhGU19CVUZfRkxBR1MpLCBcCisJCSAgKHZvaWQgKilfX2VudHJ5LT5jYWxsZXJfaXApIFwKKykKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9pbml0KTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9mcmVlKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9ob2xkKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9yZWxlKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9waW4pOworREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX3VucGluKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9pb2RvbmUpOworREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX2lvcmVxdWVzdCk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfYmF3cml0ZSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfYmR3cml0ZSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfbG9jayk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfbG9ja19kb25lKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9jb25kX2xvY2spOworREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX3VubG9jayk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfb3JkZXJlZF9yZXRyeSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfaW93YWl0KTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9pb3dhaXRfZG9uZSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfZGVsd3JpX3F1ZXVlKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfZGVsd3JpX3NwbGl0KTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9nZXRfbm9hZGRyKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2Jkc3RyYXRfc2h1dCk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfaXRlbV9yZWxzZSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfaXRlbV9pb2RvbmUpOworREVGSU5FX0JVRl9FVkVOVCh4ZnNfYnVmX2l0ZW1faW9kb25lX2FzeW5jKTsKK0RFRklORV9CVUZfRVZFTlQoeGZzX2J1Zl9lcnJvcl9yZWxzZSk7CitERUZJTkVfQlVGX0VWRU5UKHhmc190cmFuc19yZWFkX2J1Zl9pbyk7CitERUZJTkVfQlVGX0VWRU5UKHhmc190cmFuc19yZWFkX2J1Zl9zaHV0KTsKKworLyogbm90IHJlYWxseSBidWZmZXIgdHJhY2VzLCBidXQgdGhlIGJ1ZiBwcm92aWRlcyB1c2VmdWwgaW5mb3JtYXRpb24gKi8KK0RFRklORV9CVUZfRVZFTlQoeGZzX2J0cmVlX2NvcnJ1cHQpOworREVGSU5FX0JVRl9FVkVOVCh4ZnNfZGFfYnRyZWVfY29ycnVwdCk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19yZXNldF9kcWNvdW50cyk7CitERUZJTkVfQlVGX0VWRU5UKHhmc19pbm9kZV9pdGVtX3B1c2gpOworCisvKiBwYXNzIGZsYWdzIGV4cGxpY2l0bHkgKi8KKyNkZWZpbmUgREVGSU5FX0JVRl9GTEFHU19FVkVOVCh0bmFtZSkgXAorVFJBQ0VfRVZFTlQodG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2J1ZiAqYnAsIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKGJwLCBmbGFncywgY2FsbGVyX2lwKSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQoeGZzX2RhZGRyX3QsIGJubykgXAorCQlfX2ZpZWxkKHNpemVfdCwgYnVmZmVyX2xlbmd0aCkgXAorCQlfX2ZpZWxkKGludCwgaG9sZCkgXAorCQlfX2ZpZWxkKGludCwgcGluY291bnQpIFwKKwkJX19maWVsZCh1bnNpZ25lZCwgbG9ja3ZhbCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykgXAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBicC0+Yl90YXJnZXQtPmJ0X2RldjsgXAorCQlfX2VudHJ5LT5ibm8gPSBicC0+Yl9ibjsgXAorCQlfX2VudHJ5LT5idWZmZXJfbGVuZ3RoID0gYnAtPmJfYnVmZmVyX2xlbmd0aDsgXAorCQlfX2VudHJ5LT5mbGFncyA9IGZsYWdzOyBcCisJCV9fZW50cnktPmhvbGQgPSBhdG9taWNfcmVhZCgmYnAtPmJfaG9sZCk7IFwKKwkJX19lbnRyeS0+cGluY291bnQgPSBhdG9taWNfcmVhZCgmYnAtPmJfcGluX2NvdW50KTsgXAorCQlfX2VudHJ5LT5sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJwKTsgXAorCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYm5vIDB4JWxseCBsZW4gMHglenggaG9sZCAlZCBwaW5jb3VudCAlZCAiIFwKKwkJICAibG9jayAlZCBmbGFncyAlcyBjYWxsZXIgJXBmIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmJubywgXAorCQkgIF9fZW50cnktPmJ1ZmZlcl9sZW5ndGgsIFwKKwkJICBfX2VudHJ5LT5ob2xkLCBcCisJCSAgX19lbnRyeS0+cGluY291bnQsIFwKKwkJICBfX2VudHJ5LT5sb2NrdmFsLCBcCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBYRlNfQlVGX0ZMQUdTKSwgXAorCQkgICh2b2lkICopX19lbnRyeS0+Y2FsbGVyX2lwKSBcCispCitERUZJTkVfQlVGX0ZMQUdTX0VWRU5UKHhmc19idWZfZmluZCk7CitERUZJTkVfQlVGX0ZMQUdTX0VWRU5UKHhmc19idWZfZ2V0KTsKK0RFRklORV9CVUZfRkxBR1NfRVZFTlQoeGZzX2J1Zl9yZWFkKTsKKworVFJBQ0VfRVZFTlQoeGZzX2J1Zl9pb2Vycm9yLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfYnVmICpicCwgaW50IGVycm9yLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksCisJVFBfQVJHUyhicCwgZXJyb3IsIGNhbGxlcl9pcCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19kYWRkcl90LCBibm8pCisJCV9fZmllbGQoc2l6ZV90LCBidWZmZXJfbGVuZ3RoKQorCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykKKwkJX19maWVsZChpbnQsIGhvbGQpCisJCV9fZmllbGQoaW50LCBwaW5jb3VudCkKKwkJX19maWVsZCh1bnNpZ25lZCwgbG9ja3ZhbCkKKwkJX19maWVsZChpbnQsIGVycm9yKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBicC0+Yl90YXJnZXQtPmJ0X2RldjsKKwkJX19lbnRyeS0+Ym5vID0gYnAtPmJfYm47CisJCV9fZW50cnktPmJ1ZmZlcl9sZW5ndGggPSBicC0+Yl9idWZmZXJfbGVuZ3RoOworCQlfX2VudHJ5LT5ob2xkID0gYXRvbWljX3JlYWQoJmJwLT5iX2hvbGQpOworCQlfX2VudHJ5LT5waW5jb3VudCA9IGF0b21pY19yZWFkKCZicC0+Yl9waW5fY291bnQpOworCQlfX2VudHJ5LT5sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJwKTsKKwkJX19lbnRyeS0+ZXJyb3IgPSBlcnJvcjsKKwkJX19lbnRyeS0+ZmxhZ3MgPSBicC0+Yl9mbGFnczsKKwkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYm5vIDB4JWxseCBsZW4gMHglenggaG9sZCAlZCBwaW5jb3VudCAlZCAiCisJCSAgImxvY2sgJWQgZXJyb3IgJWQgZmxhZ3MgJXMgY2FsbGVyICVwZiIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmJubywKKwkJICBfX2VudHJ5LT5idWZmZXJfbGVuZ3RoLAorCQkgIF9fZW50cnktPmhvbGQsCisJCSAgX19lbnRyeS0+cGluY291bnQsCisJCSAgX19lbnRyeS0+bG9ja3ZhbCwKKwkJICBfX2VudHJ5LT5lcnJvciwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCAifCIsIFhGU19CVUZfRkxBR1MpLAorCQkgICh2b2lkICopX19lbnRyeS0+Y2FsbGVyX2lwKQorKTsKKworI2RlZmluZSBERUZJTkVfQlVGX0lURU1fRVZFTlQodG5hbWUpIFwKK1RSQUNFX0VWRU5UKHRuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19idWZfbG9nX2l0ZW0gKmJpcCksIFwKKwlUUF9BUkdTKGJpcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19kYWRkcl90LCBidWZfYm5vKSBcCisJCV9fZmllbGQoc2l6ZV90LCBidWZfbGVuKSBcCisJCV9fZmllbGQoaW50LCBidWZfaG9sZCkgXAorCQlfX2ZpZWxkKGludCwgYnVmX3BpbmNvdW50KSBcCisJCV9fZmllbGQoaW50LCBidWZfbG9ja3ZhbCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkLCBidWZfZmxhZ3MpIFwKKwkJX19maWVsZCh1bnNpZ25lZCwgYmxpX3JlY3VyKSBcCisJCV9fZmllbGQoaW50LCBibGlfcmVmY291bnQpIFwKKwkJX19maWVsZCh1bnNpZ25lZCwgYmxpX2ZsYWdzKSBcCisJCV9fZmllbGQodm9pZCAqLCBsaV9kZXNjKSBcCisJCV9fZmllbGQodW5zaWduZWQsIGxpX2ZsYWdzKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IGJpcC0+YmxpX2J1Zi0+Yl90YXJnZXQtPmJ0X2RldjsgXAorCQlfX2VudHJ5LT5ibGlfZmxhZ3MgPSBiaXAtPmJsaV9mbGFnczsgXAorCQlfX2VudHJ5LT5ibGlfcmVjdXIgPSBiaXAtPmJsaV9yZWN1cjsgXAorCQlfX2VudHJ5LT5ibGlfcmVmY291bnQgPSBhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpOyBcCisJCV9fZW50cnktPmJ1Zl9ibm8gPSBiaXAtPmJsaV9idWYtPmJfYm47IFwKKwkJX19lbnRyeS0+YnVmX2xlbiA9IGJpcC0+YmxpX2J1Zi0+Yl9idWZmZXJfbGVuZ3RoOyBcCisJCV9fZW50cnktPmJ1Zl9mbGFncyA9IGJpcC0+YmxpX2J1Zi0+Yl9mbGFnczsgXAorCQlfX2VudHJ5LT5idWZfaG9sZCA9IGF0b21pY19yZWFkKCZiaXAtPmJsaV9idWYtPmJfaG9sZCk7IFwKKwkJX19lbnRyeS0+YnVmX3BpbmNvdW50ID0gXAorCQkJYXRvbWljX3JlYWQoJmJpcC0+YmxpX2J1Zi0+Yl9waW5fY291bnQpOyBcCisJCV9fZW50cnktPmJ1Zl9sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJpcC0+YmxpX2J1Zik7IFwKKwkJX19lbnRyeS0+bGlfZGVzYyA9IGJpcC0+YmxpX2l0ZW0ubGlfZGVzYzsgXAorCQlfX2VudHJ5LT5saV9mbGFncyA9IGJpcC0+YmxpX2l0ZW0ubGlfZmxhZ3M7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYm5vIDB4JWxseCBsZW4gMHglenggaG9sZCAlZCBwaW5jb3VudCAlZCAiIFwKKwkJICAibG9jayAlZCBmbGFncyAlcyByZWN1ciAlZCByZWZjb3VudCAlZCBibGlmbGFncyAlcyAiIFwKKwkJICAibGlkZXNjIDB4JXAgbGlmbGFncyAlcyIsIFwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5idWZfYm5vLCBcCisJCSAgX19lbnRyeS0+YnVmX2xlbiwgXAorCQkgIF9fZW50cnktPmJ1Zl9ob2xkLCBcCisJCSAgX19lbnRyeS0+YnVmX3BpbmNvdW50LCBcCisJCSAgX19lbnRyeS0+YnVmX2xvY2t2YWwsIFwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmJ1Zl9mbGFncywgInwiLCBYRlNfQlVGX0ZMQUdTKSwgXAorCQkgIF9fZW50cnktPmJsaV9yZWN1ciwgXAorCQkgIF9fZW50cnktPmJsaV9yZWZjb3VudCwgXAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+YmxpX2ZsYWdzLCAifCIsIFhGU19CTElfRkxBR1MpLCBcCisJCSAgX19lbnRyeS0+bGlfZGVzYywgXAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+bGlfZmxhZ3MsICJ8IiwgWEZTX0xJX0ZMQUdTKSkgXAorKQorREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV9zaXplKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fc2l6ZV9zdGFsZSk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX2Zvcm1hdCk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX2Zvcm1hdF9zdGFsZSk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX3Bpbik7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX3VucGluKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fdW5waW5fc3RhbGUpOworREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV90cnlsb2NrKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fdW5sb2NrKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fdW5sb2NrX3N0YWxlKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fcHVzaCk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2dldF9idWYpOworREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRfYnVmX3JlY3VyKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfZ2V0c2IpOworREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRzYl9yZWN1cik7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX3JlYWRfYnVmKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfcmVhZF9idWZfcmVjdXIpOworREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19sb2dfYnVmKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfYnJlbHNlKTsKK0RFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfYmpvaW4pOworREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19iaG9sZCk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2Job2xkX3JlbGVhc2UpOworREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19iaW52YWwpOworCisjZGVmaW5lIERFRklORV9MT0NLX0VWRU5UKG5hbWUpIFwKK1RSQUNFX0VWRU5UKG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICppcCwgdW5zaWduZWQgbG9ja19mbGFncywgXAorCQkgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCisJVFBfQVJHUyhpcCwgIGxvY2tfZmxhZ3MsIGNhbGxlcl9pcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCisJCV9fZmllbGQoaW50LCBsb2NrX2ZsYWdzKSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgY2FsbGVyX2lwKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IFZGU19JKGlwKS0+aV9zYi0+c19kZXY7IFwKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOyBcCisJCV9fZW50cnktPmxvY2tfZmxhZ3MgPSBsb2NrX2ZsYWdzOyBcCisJCV9fZW50cnktPmNhbGxlcl9pcCA9IGNhbGxlcl9pcDsgXAorCSksIFwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IGZsYWdzICVzIGNhbGxlciAlcGYiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fZW50cnktPmlubywgXAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+bG9ja19mbGFncywgInwiLCBYRlNfTE9DS19GTEFHUyksIFwKKwkJICAodm9pZCAqKV9fZW50cnktPmNhbGxlcl9pcCkgXAorKQorCitERUZJTkVfTE9DS19FVkVOVCh4ZnNfaWxvY2spOworREVGSU5FX0xPQ0tfRVZFTlQoeGZzX2lsb2NrX25vd2FpdCk7CitERUZJTkVfTE9DS19FVkVOVCh4ZnNfaWxvY2tfZGVtb3RlKTsKK0RFRklORV9MT0NLX0VWRU5UKHhmc19pdW5sb2NrKTsKKworI2RlZmluZSBERUZJTkVfSUdFVF9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXApLCBcCisJVFBfQVJHUyhpcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IFZGU19JKGlwKS0+aV9zYi0+c19kZXY7IFwKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHgiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fZW50cnktPmlubykgXAorKQorREVGSU5FX0lHRVRfRVZFTlQoeGZzX2lnZXRfc2tpcCk7CitERUZJTkVfSUdFVF9FVkVOVCh4ZnNfaWdldF9yZWNsYWltKTsKK0RFRklORV9JR0VUX0VWRU5UKHhmc19pZ2V0X2ZvdW5kKTsKK0RFRklORV9JR0VUX0VWRU5UKHhmc19pZ2V0X2FsbG9jKTsKKworI2RlZmluZSBERUZJTkVfSU5PREVfRVZFTlQobmFtZSkgXAorVFJBQ0VfRVZFTlQobmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKGlwLCBjYWxsZXJfaXApLCBcCisJVFBfU1RSVUNUX19lbnRyeSggXAorCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykgXAorCQlfX2ZpZWxkKGludCwgY291bnQpIFwKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjYWxsZXJfaXApIFwKKwkpLCBcCisJVFBfZmFzdF9hc3NpZ24oIFwKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsgXAorCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87IFwKKwkJX19lbnRyeS0+Y291bnQgPSBhdG9taWNfcmVhZCgmVkZTX0koaXApLT5pX2NvdW50KTsgXAorCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBjb3VudCAlZCBjYWxsZXIgJXBmIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5pbm8sIFwKKwkJICBfX2VudHJ5LT5jb3VudCwgXAorCQkgIChjaGFyICopX19lbnRyeS0+Y2FsbGVyX2lwKSBcCispCitERUZJTkVfSU5PREVfRVZFTlQoeGZzX2lob2xkKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfaXJlbGUpOworLyogdGhlIG9sZCB4ZnNfaXRyYWNlX2VudHJ5IHRyYWNlciAtIHRvIGJlIHJlcGxhY2VkIGJ5IHMudGguIGluIHRoZSBWRlMgKi8KK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfaW5vZGUpOworI2RlZmluZSB4ZnNfaXRyYWNlX2VudHJ5KGlwKSAgICBcCisJdHJhY2VfeGZzX2lub2RlKGlwLCBfVEhJU19JUF8pCisKKyNkZWZpbmUgREVGSU5FX0RRVU9UX0VWRU5UKHRuYW1lKSBcCitUUkFDRV9FVkVOVCh0bmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfZHF1b3QgKmRxcCksIFwKKwlUUF9BUkdTKGRxcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKF9fYmUzMiwgaWQpIFwKKwkJX19maWVsZCh1bnNpZ25lZCwgZmxhZ3MpIFwKKwkJX19maWVsZCh1bnNpZ25lZCwgbnJlZnMpIFwKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIHJlc19iY291bnQpIFwKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIGJjb3VudCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgaWNvdW50KSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCBibGtfaGFyZGxpbWl0KSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCBibGtfc29mdGxpbWl0KSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCBpbm9faGFyZGxpbWl0KSBcCisJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCBpbm9fc29mdGxpbWl0KSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IGRxcC0+cV9tb3VudC0+bV9zdXBlci0+c19kZXY7IFwKKwkJX19lbnRyeS0+aWQgPSBkcXAtPnFfY29yZS5kX2lkOyBcCisJCV9fZW50cnktPmZsYWdzID0gZHFwLT5kcV9mbGFnczsgXAorCQlfX2VudHJ5LT5ucmVmcyA9IGRxcC0+cV9ucmVmczsgXAorCQlfX2VudHJ5LT5yZXNfYmNvdW50ID0gZHFwLT5xX3Jlc19iY291bnQ7IFwKKwkJX19lbnRyeS0+YmNvdW50ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9iY291bnQpOyBcCisJCV9fZW50cnktPmljb3VudCA9IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWNvdW50KTsgXAorCQlfX2VudHJ5LT5ibGtfaGFyZGxpbWl0ID0gXAorCQkJYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0KTsgXAorCQlfX2VudHJ5LT5ibGtfc29mdGxpbWl0ID0gXAorCQkJYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfc29mdGxpbWl0KTsgXAorCQlfX2VudHJ5LT5pbm9faGFyZGxpbWl0ID0gXAorCQkJYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9faGFyZGxpbWl0KTsgXAorCQlfX2VudHJ5LT5pbm9fc29mdGxpbWl0ID0gXAorCQkJYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KTsgXAorCSksIFwKKwlUUF9wcmludGsoImRldiAlZDolZCBpZCAweCV4IGZsYWdzICVzIG5yZWZzICV1IHJlc19iYyAweCVsbHggIiBcCisJCSAgImJjbnQgMHglbGx4IFtoYXJkIDB4JWxseCB8IHNvZnQgMHglbGx4XSAiIFwKKwkJICAiaWNudCAweCVsbHggW2hhcmQgMHglbGx4IHwgc29mdCAweCVsbHhdIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBiZTMyX3RvX2NwdShfX2VudHJ5LT5pZCksIFwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCAifCIsIFhGU19EUV9GTEFHUyksIFwKKwkJICBfX2VudHJ5LT5ucmVmcywgXAorCQkgIF9fZW50cnktPnJlc19iY291bnQsIFwKKwkJICBfX2VudHJ5LT5iY291bnQsIFwKKwkJICBfX2VudHJ5LT5ibGtfaGFyZGxpbWl0LCBcCisJCSAgX19lbnRyeS0+YmxrX3NvZnRsaW1pdCwgXAorCQkgIF9fZW50cnktPmljb3VudCwgXAorCQkgIF9fZW50cnktPmlub19oYXJkbGltaXQsIFwKKwkJICBfX2VudHJ5LT5pbm9fc29mdGxpbWl0KSBcCispCitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxYWRqdXN0KTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFzaGFrZV9kaXJ0eSk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2Rxc2hha2VfdW5saW5rKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFyZWNsYWltX3dhbnQpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcXJlY2xhaW1fZGlydHkpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcXJlY2xhaW1fdW5saW5rKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFhdHRhY2hfZm91bmQpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWF0dGFjaF9nZXQpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWluaXQpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcXJldXNlKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFhbGxvYyk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxdG9icF9yZWFkKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFyZWFkKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFyZWFkX2ZhaWwpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWxvb2t1cF9mb3VuZCk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxbG9va3VwX3dhbnQpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWxvb2t1cF9mcmVlbGlzdCk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxbG9va3VwX21vdmUpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWxvb2t1cF9kb25lKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFnZXRfaGl0KTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFnZXRfbWlzcyk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxcHV0KTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFwdXRfd2FpdCk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxcHV0X2ZyZWUpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcXJlbGUpOworREVGSU5FX0RRVU9UX0VWRU5UKHhmc19kcWZsdXNoKTsKK0RFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFmbHVzaF9mb3JjZSk7CitERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxZmx1c2hfZG9uZSk7CisvKiBub3QgcmVhbGx5IGlnZXQgZXZlbnRzLCBidXQgd2UgcmUtdXNlIHRoZSBmb3JtYXQgKi8KK0RFRklORV9JR0VUX0VWRU5UKHhmc19kcXVvdF9kcWFsbG9jKTsKK0RFRklORV9JR0VUX0VWRU5UKHhmc19kcXVvdF9kcWRldGFjaCk7CisKKworI2RlZmluZSBERUZJTkVfTE9HR1JBTlRfRVZFTlQodG5hbWUpIFwKK1RSQUNFX0VWRU5UKHRuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IGxvZyAqbG9nLCBzdHJ1Y3QgeGxvZ190aWNrZXQgKnRpYyksIFwKKwlUUF9BUkdTKGxvZywgdGljKSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQodW5zaWduZWQsIHRyYW5zX3R5cGUpIFwKKwkJX19maWVsZChjaGFyLCBvY250KSBcCisJCV9fZmllbGQoY2hhciwgY250KSBcCisJCV9fZmllbGQoaW50LCBjdXJyX3JlcykgXAorCQlfX2ZpZWxkKGludCwgdW5pdF9yZXMpIFwKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIGZsYWdzKSBcCisJCV9fZmllbGQodm9pZCAqLCByZXNlcnZlX2hlYWRxKSBcCisJCV9fZmllbGQodm9pZCAqLCB3cml0ZV9oZWFkcSkgXAorCQlfX2ZpZWxkKGludCwgZ3JhbnRfcmVzZXJ2ZV9jeWNsZSkgXAorCQlfX2ZpZWxkKGludCwgZ3JhbnRfcmVzZXJ2ZV9ieXRlcykgXAorCQlfX2ZpZWxkKGludCwgZ3JhbnRfd3JpdGVfY3ljbGUpIFwKKwkJX19maWVsZChpbnQsIGdyYW50X3dyaXRlX2J5dGVzKSBcCisJCV9fZmllbGQoaW50LCBjdXJyX2N5Y2xlKSBcCisJCV9fZmllbGQoaW50LCBjdXJyX2Jsb2NrKSBcCisJCV9fZmllbGQoeGZzX2xzbl90LCB0YWlsX2xzbikgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBsb2ctPmxfbXAtPm1fc3VwZXItPnNfZGV2OyBcCisJCV9fZW50cnktPnRyYW5zX3R5cGUgPSB0aWMtPnRfdHJhbnNfdHlwZTsgXAorCQlfX2VudHJ5LT5vY250ID0gdGljLT50X29jbnQ7IFwKKwkJX19lbnRyeS0+Y250ID0gdGljLT50X2NudDsgXAorCQlfX2VudHJ5LT5jdXJyX3JlcyA9IHRpYy0+dF9jdXJyX3JlczsgXAorCQlfX2VudHJ5LT51bml0X3JlcyA9IHRpYy0+dF91bml0X3JlczsgXAorCQlfX2VudHJ5LT5mbGFncyA9IHRpYy0+dF9mbGFnczsgXAorCQlfX2VudHJ5LT5yZXNlcnZlX2hlYWRxID0gbG9nLT5sX3Jlc2VydmVfaGVhZHE7IFwKKwkJX19lbnRyeS0+d3JpdGVfaGVhZHEgPSBsb2ctPmxfd3JpdGVfaGVhZHE7IFwKKwkJX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9jeWNsZSA9IGxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlOyBcCisJCV9fZW50cnktPmdyYW50X3Jlc2VydmVfYnl0ZXMgPSBsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlczsgXAorCQlfX2VudHJ5LT5ncmFudF93cml0ZV9jeWNsZSA9IGxvZy0+bF9ncmFudF93cml0ZV9jeWNsZTsgXAorCQlfX2VudHJ5LT5ncmFudF93cml0ZV9ieXRlcyA9IGxvZy0+bF9ncmFudF93cml0ZV9ieXRlczsgXAorCQlfX2VudHJ5LT5jdXJyX2N5Y2xlID0gbG9nLT5sX2N1cnJfY3ljbGU7IFwKKwkJX19lbnRyeS0+Y3Vycl9ibG9jayA9IGxvZy0+bF9jdXJyX2Jsb2NrOyBcCisJCV9fZW50cnktPnRhaWxfbHNuID0gbG9nLT5sX3RhaWxfbHNuOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIHR5cGUgJXMgdF9vY250ICV1IHRfY250ICV1IHRfY3Vycl9yZXMgJXUgIiBcCisJCSAgInRfdW5pdF9yZXMgJXUgdF9mbGFncyAlcyByZXNlcnZlX2hlYWRxIDB4JXAgIiBcCisJCSAgIndyaXRlX2hlYWRxIDB4JXAgZ3JhbnRfcmVzZXJ2ZV9jeWNsZSAlZCAiIFwKKwkJICAiZ3JhbnRfcmVzZXJ2ZV9ieXRlcyAlZCBncmFudF93cml0ZV9jeWNsZSAlZCAiIFwKKwkJICAiZ3JhbnRfd3JpdGVfYnl0ZXMgJWQgY3Vycl9jeWNsZSAlZCBjdXJyX2Jsb2NrICVkICIgXAorCQkgICJ0YWlsX2N5Y2xlICVkIHRhaWxfYmxvY2sgJWQiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+dHJhbnNfdHlwZSwgWEZTX1RSQU5TX1RZUEVTKSwgXAorCQkgIF9fZW50cnktPm9jbnQsIFwKKwkJICBfX2VudHJ5LT5jbnQsIFwKKwkJICBfX2VudHJ5LT5jdXJyX3JlcywgXAorCQkgIF9fZW50cnktPnVuaXRfcmVzLCBcCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBYTE9HX1RJQ19GTEFHUyksIFwKKwkJICBfX2VudHJ5LT5yZXNlcnZlX2hlYWRxLCBcCisJCSAgX19lbnRyeS0+d3JpdGVfaGVhZHEsIFwKKwkJICBfX2VudHJ5LT5ncmFudF9yZXNlcnZlX2N5Y2xlLCBcCisJCSAgX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9ieXRlcywgXAorCQkgIF9fZW50cnktPmdyYW50X3dyaXRlX2N5Y2xlLCBcCisJCSAgX19lbnRyeS0+Z3JhbnRfd3JpdGVfYnl0ZXMsIFwKKwkJICBfX2VudHJ5LT5jdXJyX2N5Y2xlLCBcCisJCSAgX19lbnRyeS0+Y3Vycl9ibG9jaywgXAorCQkgIENZQ0xFX0xTTihfX2VudHJ5LT50YWlsX2xzbiksIFwKKwkJICBCTE9DS19MU04oX19lbnRyeS0+dGFpbF9sc24pIFwKKwkpIFwKKykKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX2RvbmVfbm9ucGVybSk7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19kb25lX3Blcm0pOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVzZXJ2ZSk7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ191bW91bnRfd3JpdGUpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZ3JhbnRfZW50ZXIpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZ3JhbnRfZXhpdCk7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19ncmFudF9lcnJvcik7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19ncmFudF9zbGVlcDEpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZ3JhbnRfd2FrZTEpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZ3JhbnRfc2xlZXAyKTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX2dyYW50X3dha2UyKTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfZW50ZXIpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVncmFudF93cml0ZV9leGl0KTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfZXJyb3IpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVncmFudF93cml0ZV9zbGVlcDEpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfcmVncmFudF93cml0ZV93YWtlMSk7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3dyaXRlX3NsZWVwMik7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3dyaXRlX3dha2UyKTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3JlZ3JhbnRfcmVzZXJ2ZV9lbnRlcik7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3Jlc2VydmVfZXhpdCk7CitERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZWdyYW50X3Jlc2VydmVfc3ViKTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3VuZ3JhbnRfZW50ZXIpOworREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfdW5ncmFudF9leGl0KTsKK0RFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX3VuZ3JhbnRfc3ViKTsKKworI2RlZmluZSBERUZJTkVfUldfRVZFTlQobmFtZSkgXAorVFJBQ0VfRVZFTlQobmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzaXplX3QgY291bnQsIGxvZmZfdCBvZmZzZXQsIGludCBmbGFncyksIFwKKwlUUF9BUkdTKGlwLCBjb3VudCwgb2Zmc2V0LCBmbGFncyksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCisJCV9fZmllbGQoeGZzX2ZzaXplX3QsIHNpemUpIFwKKwkJX19maWVsZCh4ZnNfZnNpemVfdCwgbmV3X3NpemUpIFwKKwkJX19maWVsZChsb2ZmX3QsIG9mZnNldCkgXAorCQlfX2ZpZWxkKHNpemVfdCwgY291bnQpIFwKKwkJX19maWVsZChpbnQsIGZsYWdzKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IFZGU19JKGlwKS0+aV9zYi0+c19kZXY7IFwKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOyBcCisJCV9fZW50cnktPnNpemUgPSBpcC0+aV9kLmRpX3NpemU7IFwKKwkJX19lbnRyeS0+bmV3X3NpemUgPSBpcC0+aV9uZXdfc2l6ZTsgXAorCQlfX2VudHJ5LT5vZmZzZXQgPSBvZmZzZXQ7IFwKKwkJX19lbnRyeS0+Y291bnQgPSBjb3VudDsgXAorCQlfX2VudHJ5LT5mbGFncyA9IGZsYWdzOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc2l6ZSAweCVsbHggbmV3X3NpemUgMHglbGx4ICIgXAorCQkgICJvZmZzZXQgMHglbGx4IGNvdW50IDB4JXp4IGlvZmxhZ3MgJXMiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fZW50cnktPmlubywgXAorCQkgIF9fZW50cnktPnNpemUsIFwKKwkJICBfX2VudHJ5LT5uZXdfc2l6ZSwgXAorCQkgIF9fZW50cnktPm9mZnNldCwgXAorCQkgIF9fZW50cnktPmNvdW50LCBcCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBYRlNfSU9fRkxBR1MpKSBcCispCitERUZJTkVfUldfRVZFTlQoeGZzX2ZpbGVfcmVhZCk7CitERUZJTkVfUldfRVZFTlQoeGZzX2ZpbGVfYnVmZmVyZWRfd3JpdGUpOworREVGSU5FX1JXX0VWRU5UKHhmc19maWxlX2RpcmVjdF93cml0ZSk7CitERUZJTkVfUldfRVZFTlQoeGZzX2ZpbGVfc3BsaWNlX3JlYWQpOworREVGSU5FX1JXX0VWRU5UKHhmc19maWxlX3NwbGljZV93cml0ZSk7CisKKworI2RlZmluZSBERUZJTkVfUEFHRV9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmKSwgXAorCVRQX0FSR1MoaW5vZGUsIHBhZ2UsIG9mZiksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCisJCV9fZmllbGQocGdvZmZfdCwgcGdvZmYpIFwKKwkJX19maWVsZChsb2ZmX3QsIHNpemUpIFwKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBvZmZzZXQpIFwKKwkJX19maWVsZChpbnQsIGRlbGFsbG9jKSBcCisJCV9fZmllbGQoaW50LCB1bm1hcHBlZCkgXAorCQlfX2ZpZWxkKGludCwgdW53cml0dGVuKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCWludCBkZWxhbGxvYyA9IC0xLCB1bm1hcHBlZCA9IC0xLCB1bndyaXR0ZW4gPSAtMTsgXAorCVwKKwkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIFwKKwkJCXhmc19jb3VudF9wYWdlX3N0YXRlKHBhZ2UsICZkZWxhbGxvYywgXAorCQkJCQkgICAgICZ1bm1hcHBlZCwgJnVud3JpdHRlbik7IFwKKwkJX19lbnRyeS0+ZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OyBcCisJCV9fZW50cnktPmlubyA9IFhGU19JKGlub2RlKS0+aV9pbm87IFwKKwkJX19lbnRyeS0+cGdvZmYgPSBwYWdlX29mZnNldChwYWdlKTsgXAorCQlfX2VudHJ5LT5zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOyBcCisJCV9fZW50cnktPm9mZnNldCA9IG9mZjsgXAorCQlfX2VudHJ5LT5kZWxhbGxvYyA9IGRlbGFsbG9jOyBcCisJCV9fZW50cnktPnVubWFwcGVkID0gdW5tYXBwZWQ7IFwKKwkJX19lbnRyeS0+dW53cml0dGVuID0gdW53cml0dGVuOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggcGdvZmYgMHglbHggc2l6ZSAweCVsbHggb2Zmc2V0ICVseCAiIFwKKwkJICAiZGVsYWxsb2MgJWQgdW5tYXBwZWQgJWQgdW53cml0dGVuICVkIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5pbm8sIFwKKwkJICBfX2VudHJ5LT5wZ29mZiwgXAorCQkgIF9fZW50cnktPnNpemUsIFwKKwkJICBfX2VudHJ5LT5vZmZzZXQsIFwKKwkJICBfX2VudHJ5LT5kZWxhbGxvYywgXAorCQkgIF9fZW50cnktPnVubWFwcGVkLCBcCisJCSAgX19lbnRyeS0+dW53cml0dGVuKSBcCispCitERUZJTkVfUEFHRV9FVkVOVCh4ZnNfd3JpdGVwYWdlKTsKK0RFRklORV9QQUdFX0VWRU5UKHhmc19yZWxlYXNlcGFnZSk7CitERUZJTkVfUEFHRV9FVkVOVCh4ZnNfaW52YWxpZGF0ZXBhZ2UpOworCisjZGVmaW5lIERFRklORV9JT01BUF9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19vZmZfdCBvZmZzZXQsIHNzaXplX3QgY291bnQsIFwKKwkJIGludCBmbGFncywgc3RydWN0IHhmc19ibWJ0X2lyZWMgKmlyZWMpLCBcCisJVFBfQVJHUyhpcCwgb2Zmc2V0LCBjb3VudCwgZmxhZ3MsIGlyZWMpLCBcCisJVFBfU1RSVUNUX19lbnRyeSggXAorCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykgXAorCQlfX2ZpZWxkKGxvZmZfdCwgc2l6ZSkgXAorCQlfX2ZpZWxkKGxvZmZfdCwgbmV3X3NpemUpIFwKKwkJX19maWVsZChsb2ZmX3QsIG9mZnNldCkgXAorCQlfX2ZpZWxkKHNpemVfdCwgY291bnQpIFwKKwkJX19maWVsZChpbnQsIGZsYWdzKSBcCisJCV9fZmllbGQoeGZzX2ZpbGVvZmZfdCwgc3RhcnRvZmYpIFwKKwkJX19maWVsZCh4ZnNfZnNibG9ja190LCBzdGFydGJsb2NrKSBcCisJCV9fZmllbGQoeGZzX2ZpbGJsa3NfdCwgYmxvY2tjb3VudCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OyBcCisJCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsgXAorCQlfX2VudHJ5LT5zaXplID0gaXAtPmlfZC5kaV9zaXplOyBcCisJCV9fZW50cnktPm5ld19zaXplID0gaXAtPmlfbmV3X3NpemU7IFwKKwkJX19lbnRyeS0+b2Zmc2V0ID0gb2Zmc2V0OyBcCisJCV9fZW50cnktPmNvdW50ID0gY291bnQ7IFwKKwkJX19lbnRyeS0+ZmxhZ3MgPSBmbGFnczsgXAorCQlfX2VudHJ5LT5zdGFydG9mZiA9IGlyZWMgPyBpcmVjLT5icl9zdGFydG9mZiA6IDA7IFwKKwkJX19lbnRyeS0+c3RhcnRibG9jayA9IGlyZWMgPyBpcmVjLT5icl9zdGFydGJsb2NrIDogMDsgXAorCQlfX2VudHJ5LT5ibG9ja2NvdW50ID0gaXJlYyA/IGlyZWMtPmJyX2Jsb2NrY291bnQgOiAwOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc2l6ZSAweCVsbHggbmV3X3NpemUgMHglbGx4ICIgXAorCQkgICJvZmZzZXQgMHglbGx4IGNvdW50ICV6ZCBmbGFncyAlcyAiIFwKKwkJICAic3RhcnRvZmYgMHglbGx4IHN0YXJ0YmxvY2sgMHglbGx4IGJsb2NrY291bnQgMHglbGx4IiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5pbm8sIFwKKwkJICBfX2VudHJ5LT5zaXplLCBcCisJCSAgX19lbnRyeS0+bmV3X3NpemUsIFwKKwkJICBfX2VudHJ5LT5vZmZzZXQsIFwKKwkJICBfX2VudHJ5LT5jb3VudCwgXAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgQk1BUElfRkxBR1MpLCBcCisJCSAgX19lbnRyeS0+c3RhcnRvZmYsIFwKKwkJICBfX2VudHJ5LT5zdGFydGJsb2NrLCBcCisJCSAgX19lbnRyeS0+YmxvY2tjb3VudCkgXAorKQorREVGSU5FX0lPTUFQX0VWRU5UKHhmc19pb21hcF9lbnRlcik7CitERUZJTkVfSU9NQVBfRVZFTlQoeGZzX2lvbWFwX2ZvdW5kKTsKK0RFRklORV9JT01BUF9FVkVOVCh4ZnNfaW9tYXBfYWxsb2MpOworCisjZGVmaW5lIERFRklORV9TSU1QTEVfSU9fRVZFTlQobmFtZSkgXAorVFJBQ0VfRVZFTlQobmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGNvdW50KSwgXAorCVRQX0FSR1MoaXAsIG9mZnNldCwgY291bnQpLCBcCisJVFBfU1RSVUNUX19lbnRyeSggXAorCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykgXAorCQlfX2ZpZWxkKGxvZmZfdCwgc2l6ZSkgXAorCQlfX2ZpZWxkKGxvZmZfdCwgbmV3X3NpemUpIFwKKwkJX19maWVsZChsb2ZmX3QsIG9mZnNldCkgXAorCQlfX2ZpZWxkKHNpemVfdCwgY291bnQpIFwKKwkpLCBcCisJVFBfZmFzdF9hc3NpZ24oIFwKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsgXAorCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87IFwKKwkJX19lbnRyeS0+c2l6ZSA9IGlwLT5pX2QuZGlfc2l6ZTsgXAorCQlfX2VudHJ5LT5uZXdfc2l6ZSA9IGlwLT5pX25ld19zaXplOyBcCisJCV9fZW50cnktPm9mZnNldCA9IG9mZnNldDsgXAorCQlfX2VudHJ5LT5jb3VudCA9IGNvdW50OyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc2l6ZSAweCVsbHggbmV3X3NpemUgMHglbGx4ICIgXAorCQkgICJvZmZzZXQgMHglbGx4IGNvdW50ICV6ZCIsIFwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCisJCSAgX19lbnRyeS0+aW5vLCBcCisJCSAgX19lbnRyeS0+c2l6ZSwgXAorCQkgIF9fZW50cnktPm5ld19zaXplLCBcCisJCSAgX19lbnRyeS0+b2Zmc2V0LCBcCisJCSAgX19lbnRyeS0+Y291bnQpIFwKKyk7CitERUZJTkVfU0lNUExFX0lPX0VWRU5UKHhmc19kZWxhbGxvY19lbm9zcGMpOworREVGSU5FX1NJTVBMRV9JT19FVkVOVCh4ZnNfdW53cml0dGVuX2NvbnZlcnQpOworCisKK1RSQUNFX0VWRU5UKHhmc19pdHJ1bmNhdGVfc3RhcnQsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19mc2l6ZV90IG5ld19zaXplLCBpbnQgZmxhZywKKwkJIHhmc19vZmZfdCB0b3NzX3N0YXJ0LCB4ZnNfb2ZmX3QgdG9zc19maW5pc2gpLAorCVRQX0FSR1MoaXAsIG5ld19zaXplLCBmbGFnLCB0b3NzX3N0YXJ0LCB0b3NzX2ZpbmlzaCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQorCQlfX2ZpZWxkKHhmc19mc2l6ZV90LCBzaXplKQorCQlfX2ZpZWxkKHhmc19mc2l6ZV90LCBuZXdfc2l6ZSkKKwkJX19maWVsZCh4ZnNfb2ZmX3QsIHRvc3Nfc3RhcnQpCisJCV9fZmllbGQoeGZzX29mZl90LCB0b3NzX2ZpbmlzaCkKKwkJX19maWVsZChpbnQsIGZsYWcpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOworCQlfX2VudHJ5LT5zaXplID0gaXAtPmlfZC5kaV9zaXplOworCQlfX2VudHJ5LT5uZXdfc2l6ZSA9IG5ld19zaXplOworCQlfX2VudHJ5LT50b3NzX3N0YXJ0ID0gdG9zc19zdGFydDsKKwkJX19lbnRyeS0+dG9zc19maW5pc2ggPSB0b3NzX2ZpbmlzaDsKKwkJX19lbnRyeS0+ZmxhZyA9IGZsYWc7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4ICVzIHNpemUgMHglbGx4IG5ld19zaXplIDB4JWxseCAiCisJCSAgInRvc3Mgc3RhcnQgMHglbGx4IHRvc3MgZmluaXNoIDB4JWxseCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFnLCAifCIsIFhGU19JVFJVTkNfRkxBR1MpLAorCQkgIF9fZW50cnktPnNpemUsCisJCSAgX19lbnRyeS0+bmV3X3NpemUsCisJCSAgX19lbnRyeS0+dG9zc19zdGFydCwKKwkJICBfX2VudHJ5LT50b3NzX2ZpbmlzaCkKKyk7CisKKyNkZWZpbmUgREVGSU5FX0lUUlVOQ19FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19mc2l6ZV90IG5ld19zaXplKSwgXAorCVRQX0FSR1MoaXAsIG5ld19zaXplKSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pIFwKKwkJX19maWVsZCh4ZnNfZnNpemVfdCwgc2l6ZSkgXAorCQlfX2ZpZWxkKHhmc19mc2l6ZV90LCBuZXdfc2l6ZSkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OyBcCisJCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsgXAorCQlfX2VudHJ5LT5zaXplID0gaXAtPmlfZC5kaV9zaXplOyBcCisJCV9fZW50cnktPm5ld19zaXplID0gbmV3X3NpemU7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzaXplIDB4JWxseCBuZXdfc2l6ZSAweCVsbHgiLCBcCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAorCQkgIF9fZW50cnktPmlubywgXAorCQkgIF9fZW50cnktPnNpemUsIFwKKwkJICBfX2VudHJ5LT5uZXdfc2l6ZSkgXAorKQorREVGSU5FX0lUUlVOQ19FVkVOVCh4ZnNfaXRydW5jYXRlX2ZpbmlzaF9zdGFydCk7CitERUZJTkVfSVRSVU5DX0VWRU5UKHhmc19pdHJ1bmNhdGVfZmluaXNoX2VuZCk7CisKK1RSQUNFX0VWRU5UKHhmc19wYWdlY2FjaGVfaW52YWwsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19vZmZfdCBzdGFydCwgeGZzX29mZl90IGZpbmlzaCksCisJVFBfQVJHUyhpcCwgc3RhcnQsIGZpbmlzaCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQorCQlfX2ZpZWxkKHhmc19mc2l6ZV90LCBzaXplKQorCQlfX2ZpZWxkKHhmc19vZmZfdCwgc3RhcnQpCisJCV9fZmllbGQoeGZzX29mZl90LCBmaW5pc2gpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOworCQlfX2VudHJ5LT5zaXplID0gaXAtPmlfZC5kaV9zaXplOworCQlfX2VudHJ5LT5zdGFydCA9IHN0YXJ0OworCQlfX2VudHJ5LT5maW5pc2ggPSBmaW5pc2g7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHNpemUgMHglbGx4IHN0YXJ0IDB4JWxseCBmaW5pc2ggMHglbGx4IiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5zaXplLAorCQkgIF9fZW50cnktPnN0YXJ0LAorCQkgIF9fZW50cnktPmZpbmlzaCkKKyk7CisKK1RSQUNFX0VWRU5UKHhmc19idW5tYXAsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19maWxlb2ZmX3QgYm5vLCB4ZnNfZmlsYmxrc190IGxlbiwKKwkJIGludCBmbGFncywgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLAorCVRQX0FSR1MoaXAsIGJubywgbGVuLCBmbGFncywgY2FsbGVyX2lwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQoeGZzX2ZzaXplX3QsIHNpemUpCisJCV9fZmllbGQoeGZzX2ZpbGVvZmZfdCwgYm5vKQorCQlfX2ZpZWxkKHhmc19maWxibGtzX3QsIGxlbikKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjYWxsZXJfaXApCisJCV9fZmllbGQoaW50LCBmbGFncykKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87CisJCV9fZW50cnktPnNpemUgPSBpcC0+aV9kLmRpX3NpemU7CisJCV9fZW50cnktPmJubyA9IGJubzsKKwkJX19lbnRyeS0+bGVuID0gbGVuOworCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7CisJCV9fZW50cnktPmZsYWdzID0gZmxhZ3M7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHNpemUgMHglbGx4IGJubyAweCVsbHggbGVuIDB4JWxseCIKKwkJICAiZmxhZ3MgJXMgY2FsbGVyICVwZiIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+c2l6ZSwKKwkJICBfX2VudHJ5LT5ibm8sCisJCSAgX19lbnRyeS0+bGVuLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0JNQVBJX0ZMQUdTKSwKKwkJICAodm9pZCAqKV9fZW50cnktPmNhbGxlcl9pcCkKKworKTsKKworVFJBQ0VfRVZFTlQoeGZzX2FsbG9jX2J1c3ksCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sIHhmc19hZ2Jsb2NrX3QgYWdibm8sCisJCSB4ZnNfZXh0bGVuX3QgbGVuLCBpbnQgc2xvdCksCisJVFBfQVJHUyhtcCwgYWdubywgYWdibm8sIGxlbiwgc2xvdCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKQorCQlfX2ZpZWxkKHhmc19hZ2Jsb2NrX3QsIGFnYm5vKQorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbGVuKQorCQlfX2ZpZWxkKGludCwgc2xvdCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBtcC0+bV9zdXBlci0+c19kZXY7CisJCV9fZW50cnktPmFnbm8gPSBhZ25vOworCQlfX2VudHJ5LT5hZ2JubyA9IGFnYm5vOworCQlfX2VudHJ5LT5sZW4gPSBsZW47CisJCV9fZW50cnktPnNsb3QgPSBzbG90OworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSBhZ2JubyAldSBsZW4gJXUgc2xvdCAlZCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5hZ25vLAorCQkgIF9fZW50cnktPmFnYm5vLAorCQkgIF9fZW50cnktPmxlbiwKKwkJICBfX2VudHJ5LT5zbG90KQorCispOworCisjZGVmaW5lIFhGU19CVVNZX1NUQVRFUyBcCisJeyAwLAkiZm91bmQiIH0sIFwKKwl7IDEsCSJtaXNzaW5nIiB9CisKK1RSQUNFX0VWRU5UKHhmc19hbGxvY191bmJ1c3ksCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sCisJCSBpbnQgc2xvdCwgaW50IGZvdW5kKSwKKwlUUF9BUkdTKG1wLCBhZ25vLCBzbG90LCBmb3VuZCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKQorCQlfX2ZpZWxkKGludCwgc2xvdCkKKwkJX19maWVsZChpbnQsIGZvdW5kKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IG1wLT5tX3N1cGVyLT5zX2RldjsKKwkJX19lbnRyeS0+YWdubyA9IGFnbm87CisJCV9fZW50cnktPnNsb3QgPSBzbG90OworCQlfX2VudHJ5LT5mb3VuZCA9IGZvdW5kOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSBzbG90ICVkICVzIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmFnbm8sCisJCSAgX19lbnRyeS0+c2xvdCwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmZvdW5kLCBYRlNfQlVTWV9TVEFURVMpKQorKTsKKworVFJBQ0VfRVZFTlQoeGZzX2FsbG9jX2J1c3lzZWFyY2gsCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sIHhmc19hZ2Jsb2NrX3QgYWdibm8sCisJCSB4ZnNfZXh0bGVuX3QgbGVuLCBpbnQgZm91bmQpLAorCVRQX0FSR1MobXAsIGFnbm8sIGFnYm5vLCBsZW4sIGZvdW5kKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2FnbnVtYmVyX3QsIGFnbm8pCisJCV9fZmllbGQoeGZzX2FnYmxvY2tfdCwgYWdibm8pCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCBsZW4pCisJCV9fZmllbGQoaW50LCBmb3VuZCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBtcC0+bV9zdXBlci0+c19kZXY7CisJCV9fZW50cnktPmFnbm8gPSBhZ25vOworCQlfX2VudHJ5LT5hZ2JubyA9IGFnYm5vOworCQlfX2VudHJ5LT5sZW4gPSBsZW47CisJCV9fZW50cnktPmZvdW5kID0gZm91bmQ7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBhZ25vICV1IGFnYm5vICV1IGxlbiAldSAlcyIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5hZ25vLAorCQkgIF9fZW50cnktPmFnYm5vLAorCQkgIF9fZW50cnktPmxlbiwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmZvdW5kLCBYRlNfQlVTWV9TVEFURVMpKQorKTsKKworVFJBQ0VfRVZFTlQoeGZzX2FnZiwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc19hZ2YgKmFnZiwgaW50IGZsYWdzLAorCQkgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLAorCVRQX0FSR1MobXAsIGFnZiwgZmxhZ3MsIGNhbGxlcl9pcCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKQorCQlfX2ZpZWxkKGludCwgZmxhZ3MpCisJCV9fZmllbGQoX191MzIsIGxlbmd0aCkKKwkJX19maWVsZChfX3UzMiwgYm5vX3Jvb3QpCisJCV9fZmllbGQoX191MzIsIGNudF9yb290KQorCQlfX2ZpZWxkKF9fdTMyLCBibm9fbGV2ZWwpCisJCV9fZmllbGQoX191MzIsIGNudF9sZXZlbCkKKwkJX19maWVsZChfX3UzMiwgZmxmaXJzdCkKKwkJX19maWVsZChfX3UzMiwgZmxsYXN0KQorCQlfX2ZpZWxkKF9fdTMyLCBmbGNvdW50KQorCQlfX2ZpZWxkKF9fdTMyLCBmcmVlYmxrcykKKwkJX19maWVsZChfX3UzMiwgbG9uZ2VzdCkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjYWxsZXJfaXApCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gbXAtPm1fc3VwZXItPnNfZGV2OworCQlfX2VudHJ5LT5hZ25vID0gYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pLAorCQlfX2VudHJ5LT5mbGFncyA9IGZsYWdzOworCQlfX2VudHJ5LT5sZW5ndGggPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZW5ndGgpLAorCQlfX2VudHJ5LT5ibm9fcm9vdCA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX3Jvb3RzW1hGU19CVE5VTV9CTk9dKSwKKwkJX19lbnRyeS0+Y250X3Jvb3QgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9yb290c1tYRlNfQlROVU1fQ05UXSksCisJCV9fZW50cnktPmJub19sZXZlbCA9CisJCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGV2ZWxzW1hGU19CVE5VTV9CTk9dKSwKKwkJX19lbnRyeS0+Y250X2xldmVsID0KKwkJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVF0pLAorCQlfX2VudHJ5LT5mbGZpcnN0ID0gYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxmaXJzdCksCisJCV9fZW50cnktPmZsbGFzdCA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZsbGFzdCksCisJCV9fZW50cnktPmZsY291bnQgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGNvdW50KSwKKwkJX19lbnRyeS0+ZnJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcyksCisJCV9fZW50cnktPmxvbmdlc3QgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sb25nZXN0KTsKKwkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSBmbGFncyAlcyBsZW5ndGggJXUgcm9vdHMgYiAldSBjICV1ICIKKwkJICAibGV2ZWxzIGIgJXUgYyAldSBmbGZpcnN0ICV1IGZsbGFzdCAldSBmbGNvdW50ICV1ICIKKwkJICAiZnJlZWJsa3MgJXUgbG9uZ2VzdCAldSBjYWxsZXIgJXBmIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmFnbm8sCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBYRlNfQUdGX0ZMQUdTKSwKKwkJICBfX2VudHJ5LT5sZW5ndGgsCisJCSAgX19lbnRyeS0+Ym5vX3Jvb3QsCisJCSAgX19lbnRyeS0+Y250X3Jvb3QsCisJCSAgX19lbnRyeS0+Ym5vX2xldmVsLAorCQkgIF9fZW50cnktPmNudF9sZXZlbCwKKwkJICBfX2VudHJ5LT5mbGZpcnN0LAorCQkgIF9fZW50cnktPmZsbGFzdCwKKwkJICBfX2VudHJ5LT5mbGNvdW50LAorCQkgIF9fZW50cnktPmZyZWVibGtzLAorCQkgIF9fZW50cnktPmxvbmdlc3QsCisJCSAgKHZvaWQgKilfX2VudHJ5LT5jYWxsZXJfaXApCispOworCitUUkFDRV9FVkVOVCh4ZnNfZnJlZV9leHRlbnQsCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sIHhmc19hZ2Jsb2NrX3QgYWdibm8sCisJCSB4ZnNfZXh0bGVuX3QgbGVuLCBib29sIGlzZmwsIGludCBoYXZlbGVmdCwgaW50IGhhdmVyaWdodCksCisJVFBfQVJHUyhtcCwgYWdubywgYWdibm8sIGxlbiwgaXNmbCwgaGF2ZWxlZnQsIGhhdmVyaWdodCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKQorCQlfX2ZpZWxkKHhmc19hZ2Jsb2NrX3QsIGFnYm5vKQorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbGVuKQorCQlfX2ZpZWxkKGludCwgaXNmbCkKKwkJX19maWVsZChpbnQsIGhhdmVsZWZ0KQorCQlfX2ZpZWxkKGludCwgaGF2ZXJpZ2h0KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IG1wLT5tX3N1cGVyLT5zX2RldjsKKwkJX19lbnRyeS0+YWdubyA9IGFnbm87CisJCV9fZW50cnktPmFnYm5vID0gYWdibm87CisJCV9fZW50cnktPmxlbiA9IGxlbjsKKwkJX19lbnRyeS0+aXNmbCA9IGlzZmw7CisJCV9fZW50cnktPmhhdmVsZWZ0ID0gaGF2ZWxlZnQ7CisJCV9fZW50cnktPmhhdmVyaWdodCA9IGhhdmVyaWdodDsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGFnbm8gJXUgYWdibm8gJXUgbGVuICV1IGlzZmwgJWQgJXMiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgX19lbnRyeS0+YWdubywKKwkJICBfX2VudHJ5LT5hZ2JubywKKwkJICBfX2VudHJ5LT5sZW4sCisJCSAgX19lbnRyeS0+aXNmbCwKKwkJICBfX2VudHJ5LT5oYXZlbGVmdCA/CisJCQkoX19lbnRyeS0+aGF2ZXJpZ2h0ID8gImJvdGgiIDogImxlZnQiKSA6CisJCQkoX19lbnRyeS0+aGF2ZXJpZ2h0ID8gInJpZ2h0IiA6ICJub25lIikpCisKKyk7CisKKyNkZWZpbmUgREVGSU5FX0FMTE9DX0VWRU5UKG5hbWUpIFwKK1RSQUNFX0VWRU5UKG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2FsbG9jX2FyZyAqYXJncyksIFwKKwlUUF9BUkdTKGFyZ3MpLCBcCisJVFBfU1RSVUNUX19lbnRyeSggXAorCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKKwkJX19maWVsZCh4ZnNfYWdudW1iZXJfdCwgYWdubykgXAorCQlfX2ZpZWxkKHhmc19hZ2Jsb2NrX3QsIGFnYm5vKSBcCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCBtaW5sZW4pIFwKKwkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIG1heGxlbikgXAorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbW9kKSBcCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCBwcm9kKSBcCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCBtaW5sZWZ0KSBcCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCB0b3RhbCkgXAorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgYWxpZ25tZW50KSBcCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCBtaW5hbGlnbnNsb3ApIFwKKwkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIGxlbikgXAorCQlfX2ZpZWxkKHNob3J0LCB0eXBlKSBcCisJCV9fZmllbGQoc2hvcnQsIG90eXBlKSBcCisJCV9fZmllbGQoY2hhciwgd2FzZGVsKSBcCisJCV9fZmllbGQoY2hhciwgd2FzZnJvbWZsKSBcCisJCV9fZmllbGQoY2hhciwgaXNmbCkgXAorCQlfX2ZpZWxkKGNoYXIsIHVzZXJkYXRhKSBcCisJCV9fZmllbGQoeGZzX2ZzYmxvY2tfdCwgZmlyc3RibG9jaykgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBhcmdzLT5tcC0+bV9zdXBlci0+c19kZXY7IFwKKwkJX19lbnRyeS0+YWdubyA9IGFyZ3MtPmFnbm87IFwKKwkJX19lbnRyeS0+YWdibm8gPSBhcmdzLT5hZ2JubzsgXAorCQlfX2VudHJ5LT5taW5sZW4gPSBhcmdzLT5taW5sZW47IFwKKwkJX19lbnRyeS0+bWF4bGVuID0gYXJncy0+bWF4bGVuOyBcCisJCV9fZW50cnktPm1vZCA9IGFyZ3MtPm1vZDsgXAorCQlfX2VudHJ5LT5wcm9kID0gYXJncy0+cHJvZDsgXAorCQlfX2VudHJ5LT5taW5sZWZ0ID0gYXJncy0+bWlubGVmdDsgXAorCQlfX2VudHJ5LT50b3RhbCA9IGFyZ3MtPnRvdGFsOyBcCisJCV9fZW50cnktPmFsaWdubWVudCA9IGFyZ3MtPmFsaWdubWVudDsgXAorCQlfX2VudHJ5LT5taW5hbGlnbnNsb3AgPSBhcmdzLT5taW5hbGlnbnNsb3A7IFwKKwkJX19lbnRyeS0+bGVuID0gYXJncy0+bGVuOyBcCisJCV9fZW50cnktPnR5cGUgPSBhcmdzLT50eXBlOyBcCisJCV9fZW50cnktPm90eXBlID0gYXJncy0+b3R5cGU7IFwKKwkJX19lbnRyeS0+d2FzZGVsID0gYXJncy0+d2FzZGVsOyBcCisJCV9fZW50cnktPndhc2Zyb21mbCA9IGFyZ3MtPndhc2Zyb21mbDsgXAorCQlfX2VudHJ5LT5pc2ZsID0gYXJncy0+aXNmbDsgXAorCQlfX2VudHJ5LT51c2VyZGF0YSA9IGFyZ3MtPnVzZXJkYXRhOyBcCisJCV9fZW50cnktPmZpcnN0YmxvY2sgPSBhcmdzLT5maXJzdGJsb2NrOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGFnbm8gJXUgYWdibm8gJXUgbWlubGVuICV1IG1heGxlbiAldSBtb2QgJXUgIiBcCisJCSAgInByb2QgJXUgbWlubGVmdCAldSB0b3RhbCAldSBhbGlnbm1lbnQgJXUgbWluYWxpZ25zbG9wICV1ICIgXAorCQkgICJsZW4gJXUgdHlwZSAlcyBvdHlwZSAlcyB3YXNkZWwgJWQgd2FzZnJvbWZsICVkIGlzZmwgJWQgIiBcCisJCSAgInVzZXJkYXRhICVkIGZpcnN0YmxvY2sgMHglbGx4IiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5hZ25vLCBcCisJCSAgX19lbnRyeS0+YWdibm8sIFwKKwkJICBfX2VudHJ5LT5taW5sZW4sIFwKKwkJICBfX2VudHJ5LT5tYXhsZW4sIFwKKwkJICBfX2VudHJ5LT5tb2QsIFwKKwkJICBfX2VudHJ5LT5wcm9kLCBcCisJCSAgX19lbnRyeS0+bWlubGVmdCwgXAorCQkgIF9fZW50cnktPnRvdGFsLCBcCisJCSAgX19lbnRyeS0+YWxpZ25tZW50LCBcCisJCSAgX19lbnRyeS0+bWluYWxpZ25zbG9wLCBcCisJCSAgX19lbnRyeS0+bGVuLCBcCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT50eXBlLCBYRlNfQUxMT0NfVFlQRVMpLCBcCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5vdHlwZSwgWEZTX0FMTE9DX1RZUEVTKSwgXAorCQkgIF9fZW50cnktPndhc2RlbCwgXAorCQkgIF9fZW50cnktPndhc2Zyb21mbCwgXAorCQkgIF9fZW50cnktPmlzZmwsIFwKKwkJICBfX2VudHJ5LT51c2VyZGF0YSwgXAorCQkgIF9fZW50cnktPmZpcnN0YmxvY2spIFwKKykKKworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19leGFjdF9kb25lKTsKK0RFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfZXhhY3RfZXJyb3IpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19uZWFyX25vbWlubGVmdCk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX25lYXJfZmlyc3QpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19uZWFyX2dyZWF0ZXIpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19uZWFyX2xlc3Nlcik7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX25lYXJfZXJyb3IpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19zaXplX25laXRoZXIpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19zaXplX25vZW50cnkpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19zaXplX25vbWlubGVmdCk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3NpemVfZG9uZSk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3NpemVfZXJyb3IpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19zbWFsbF9mcmVlbGlzdCk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3NtYWxsX25vdGVub3VnaCk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3NtYWxsX2RvbmUpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY19zbWFsbF9lcnJvcik7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3ZleHRlbnRfYmFkYXJncyk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3ZleHRlbnRfbm9maXgpOworREVGSU5FX0FMTE9DX0VWRU5UKHhmc19hbGxvY192ZXh0ZW50X25vYWdicCk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3ZleHRlbnRfbG9vcGZhaWxlZCk7CitERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX3ZleHRlbnRfYWxsZmFpbGVkKTsKKworI2RlZmluZSBERUZJTkVfRElSMl9UUkFDRSh0bmFtZSkgXAorVFJBQ0VfRVZFTlQodG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MpLCBcCisJVFBfQVJHUyhhcmdzKSwgXAorCVRQX1NUUlVDVF9fZW50cnkoIFwKKwkJX19maWVsZChkZXZfdCwgZGV2KSBcCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pIFwKKwkJX19keW5hbWljX2FycmF5KGNoYXIsIG5hbWUsIGFyZ3MtPm5hbWVsZW4pIFwKKwkJX19maWVsZChpbnQsIG5hbWVsZW4pIFwKKwkJX19maWVsZCh4ZnNfZGFoYXNoX3QsIGhhc2h2YWwpIFwKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGludW1iZXIpIFwKKwkJX19maWVsZChpbnQsIG9wX2ZsYWdzKSBcCisJKSwgXAorCVRQX2Zhc3RfYXNzaWduKCBcCisJCV9fZW50cnktPmRldiA9IFZGU19JKGFyZ3MtPmRwKS0+aV9zYi0+c19kZXY7IFwKKwkJX19lbnRyeS0+aW5vID0gYXJncy0+ZHAtPmlfaW5vOyBcCisJCWlmIChhcmdzLT5uYW1lbGVuKSBcCisJCQltZW1jcHkoX19nZXRfc3RyKG5hbWUpLCBhcmdzLT5uYW1lLCBhcmdzLT5uYW1lbGVuKTsgXAorCQlfX2VudHJ5LT5uYW1lbGVuID0gYXJncy0+bmFtZWxlbjsgXAorCQlfX2VudHJ5LT5oYXNodmFsID0gYXJncy0+aGFzaHZhbDsgXAorCQlfX2VudHJ5LT5pbnVtYmVyID0gYXJncy0+aW51bWJlcjsgXAorCQlfX2VudHJ5LT5vcF9mbGFncyA9IGFyZ3MtPm9wX2ZsYWdzOyBcCisJKSwgXAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggbmFtZSAlLipzIG5hbWVsZW4gJWQgaGFzaHZhbCAweCV4ICIgXAorCQkgICJpbnVtYmVyIDB4JWxseCBvcF9mbGFncyAlcyIsIFwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCisJCSAgX19lbnRyeS0+aW5vLCBcCisJCSAgX19lbnRyeS0+bmFtZWxlbiwgXAorCQkgIF9fZW50cnktPm5hbWVsZW4gPyBfX2dldF9zdHIobmFtZSkgOiBOVUxMLCBcCisJCSAgX19lbnRyeS0+bmFtZWxlbiwgXAorCQkgIF9fZW50cnktPmhhc2h2YWwsIFwKKwkJICBfX2VudHJ5LT5pbnVtYmVyLCBcCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5vcF9mbGFncywgInwiLCBYRlNfREFfT1BfRkxBR1MpKSBcCispCitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9zZl9hZGRuYW1lKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX3NmX2NyZWF0ZSk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9zZl9sb29rdXApOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfc2ZfcmVwbGFjZSk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9zZl9yZW1vdmVuYW1lKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX3NmX3RvaW5vNCk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9zZl90b2lubzgpOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfc2ZfdG9fYmxvY2spOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfYmxvY2tfYWRkbmFtZSk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ibG9ja19sb29rdXApOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfYmxvY2tfcmVwbGFjZSk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ibG9ja19yZW1vdmVuYW1lKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2Jsb2NrX3RvX3NmKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2Jsb2NrX3RvX2xlYWYpOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbGVhZl9hZGRuYW1lKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2xlYWZfbG9va3VwKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2xlYWZfcmVwbGFjZSk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9sZWFmX3JlbW92ZW5hbWUpOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbGVhZl90b19ibG9jayk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9sZWFmX3RvX25vZGUpOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbm9kZV9hZGRuYW1lKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX25vZGVfbG9va3VwKTsKK0RFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX25vZGVfcmVwbGFjZSk7CitERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ub2RlX3JlbW92ZW5hbWUpOworREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbm9kZV90b19sZWFmKTsKKworI2RlZmluZSBERUZJTkVfRElSMl9TUEFDRV9UUkFDRSh0bmFtZSkgXAorVFJBQ0VfRVZFTlQodG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGludCBpZHgpLCBcCisJVFBfQVJHUyhhcmdzLCBpZHgpLCBcCisJVFBfU1RSVUNUX19lbnRyeSggXAorCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykgXAorCQlfX2ZpZWxkKGludCwgb3BfZmxhZ3MpIFwKKwkJX19maWVsZChpbnQsIGlkeCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShhcmdzLT5kcCktPmlfc2ItPnNfZGV2OyBcCisJCV9fZW50cnktPmlubyA9IGFyZ3MtPmRwLT5pX2lubzsgXAorCQlfX2VudHJ5LT5vcF9mbGFncyA9IGFyZ3MtPm9wX2ZsYWdzOyBcCisJCV9fZW50cnktPmlkeCA9IGlkeDsgXAorCSksIFwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IG9wX2ZsYWdzICVzIGluZGV4ICVkIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5pbm8sIFwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPm9wX2ZsYWdzLCAifCIsIFhGU19EQV9PUF9GTEFHUyksIFwKKwkJICBfX2VudHJ5LT5pZHgpIFwKKykKK0RFRklORV9ESVIyX1NQQUNFX1RSQUNFKHhmc19kaXIyX2xlYWZuX2FkZCk7CitERUZJTkVfRElSMl9TUEFDRV9UUkFDRSh4ZnNfZGlyMl9sZWFmbl9yZW1vdmUpOworREVGSU5FX0RJUjJfU1BBQ0VfVFJBQ0UoeGZzX2RpcjJfZ3Jvd19pbm9kZSk7CitERUZJTkVfRElSMl9TUEFDRV9UUkFDRSh4ZnNfZGlyMl9zaHJpbmtfaW5vZGUpOworCitUUkFDRV9FVkVOVCh4ZnNfZGlyMl9sZWFmbl9tb3ZlZW50cywKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGludCBzcmNfaWR4LCBpbnQgZHN0X2lkeCwgaW50IGNvdW50KSwKKwlUUF9BUkdTKGFyZ3MsIHNyY19pZHgsIGRzdF9pZHgsIGNvdW50KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQoaW50LCBvcF9mbGFncykKKwkJX19maWVsZChpbnQsIHNyY19pZHgpCisJCV9fZmllbGQoaW50LCBkc3RfaWR4KQorCQlfX2ZpZWxkKGludCwgY291bnQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koYXJncy0+ZHApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gYXJncy0+ZHAtPmlfaW5vOworCQlfX2VudHJ5LT5vcF9mbGFncyA9IGFyZ3MtPm9wX2ZsYWdzOworCQlfX2VudHJ5LT5zcmNfaWR4ID0gc3JjX2lkeDsKKwkJX19lbnRyeS0+ZHN0X2lkeCA9IGRzdF9pZHg7CisJCV9fZW50cnktPmNvdW50ID0gY291bnQ7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IG9wX2ZsYWdzICVzICIKKwkJICAic3JjX2lkeCAlZCBkc3RfaWR4ICVkIGNvdW50ICVkIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPm9wX2ZsYWdzLCAifCIsIFhGU19EQV9PUF9GTEFHUyksCisJCSAgX19lbnRyeS0+c3JjX2lkeCwKKwkJICBfX2VudHJ5LT5kc3RfaWR4LAorCQkgIF9fZW50cnktPmNvdW50KQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9YRlNfSCAqLworCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB4ZnNfdHJhY2UKKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCmluZGV4IDAwY2FiZjUuLjdjMjIwYjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaApAQCAtMzksNiArMzksMTAgQEAKICNkZWZpbmUgSU9fSVNESVJFQ1QJMHgwMDAwNAkJLyogYnlwYXNzIHBhZ2UgY2FjaGUgKi8KICNkZWZpbmUgSU9fSU5WSVMJMHgwMDAyMAkJLyogZG9uJ3QgdXBkYXRlIGlub2RlIHRpbWVzdGFtcHMgKi8KIAorI2RlZmluZSBYRlNfSU9fRkxBR1MgXAorCXsgSU9fSVNESVJFQ1QsCSJESVJFQ1QiIH0sIFwKKwl7IElPX0lOVklTLAkiSU5WSVMifQorCiAvKgogICogRmx1c2gvSW52YWxpZGF0ZSBvcHRpb25zIGZvciB2b3BfdG9zcy9mbHVzaC9mbHVzaGludmFsX3BhZ2VzLgogICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYwppbmRleCA0OTdjN2ZiLi4wYjE4Nzg4IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3hhdHRyLmMKQEAgLTMwLDEwICszMCwxMCBAQAogCiAKIHN0YXRpYyBpbnQKLV9feGZzX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAoreGZzX3hhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCiAJCXZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IHhmbGFncykKIHsKLQlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IGVycm9yLCBhc2l6ZSA9IHNpemU7CiAKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQpAQCAtNTIsMTAgKzUyLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLV9feGZzX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKK3hmc194YXR0cl9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHhmbGFncykKIHsKLQlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGRlbnRyeS0+ZF9pbm9kZSk7CiAKIAlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTcxLDc1ICs3MSwzNCBAQAogCXJldHVybiAteGZzX2F0dHJfc2V0KGlwLCBuYW1lLCAodm9pZCAqKXZhbHVlLCBzaXplLCB4ZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50Ci14ZnNfeGF0dHJfdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQotewotCXJldHVybiBfX3hmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKLX0KLQotc3RhdGljIGludAoteGZzX3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQotewotCXJldHVybiBfX3hmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncywgMCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciB4ZnNfeGF0dHJfdXNlcl9oYW5kbGVyID0gewogCS5wcmVmaXgJPSBYQVRUUl9VU0VSX1BSRUZJWCwKLQkuZ2V0CT0geGZzX3hhdHRyX3VzZXJfZ2V0LAotCS5zZXQJPSB4ZnNfeGF0dHJfdXNlcl9zZXQsCisJLmZsYWdzCT0gMCwgLyogbm8gZmxhZ3MgaW1wbGllcyB1c2VyIG5hbWVzcGFjZSAqLworCS5nZXQJPSB4ZnNfeGF0dHJfZ2V0LAorCS5zZXQJPSB4ZnNfeGF0dHJfc2V0LAogfTsKIAotCi1zdGF0aWMgaW50Ci14ZnNfeGF0dHJfdHJ1c3RlZF9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQotewotCXJldHVybiBfX3hmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBBVFRSX1JPT1QpOwotfQotCi1zdGF0aWMgaW50Ci14ZnNfeGF0dHJfdHJ1c3RlZF9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIF9feGZzX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzLCBBVFRSX1JPT1QpOwotfQotCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX3RydXN0ZWRfaGFuZGxlciA9IHsKIAkucHJlZml4CT0gWEFUVFJfVFJVU1RFRF9QUkVGSVgsCi0JLmdldAk9IHhmc194YXR0cl90cnVzdGVkX2dldCwKLQkuc2V0CT0geGZzX3hhdHRyX3RydXN0ZWRfc2V0LAorCS5mbGFncwk9IEFUVFJfUk9PVCwKKwkuZ2V0CT0geGZzX3hhdHRyX2dldCwKKwkuc2V0CT0geGZzX3hhdHRyX3NldCwKIH07CiAKLQotc3RhdGljIGludAoteGZzX3hhdHRyX3NlY3VyZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQotewotCXJldHVybiBfX3hmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBBVFRSX1NFQ1VSRSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXhmc194YXR0cl9zZWN1cmVfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQotewotCXJldHVybiBfX3hmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncywgQVRUUl9TRUNVUkUpOwotfQotCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIgPSB7CiAJLnByZWZpeAk9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwKLQkuZ2V0CT0geGZzX3hhdHRyX3NlY3VyZV9nZXQsCi0JLnNldAk9IHhmc194YXR0cl9zZWN1cmVfc2V0LAorCS5mbGFncwk9IEFUVFJfU0VDVVJFLAorCS5nZXQJPSB4ZnNfeGF0dHJfZ2V0LAorCS5zZXQJPSB4ZnNfeGF0dHJfc2V0LAogfTsKIAotCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqeGZzX3hhdHRyX2hhbmRsZXJzW10gPSB7CiAJJnhmc194YXR0cl91c2VyX2hhbmRsZXIsCiAJJnhmc194YXR0cl90cnVzdGVkX2hhbmRsZXIsCiAJJnhmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyLAogI2lmZGVmIENPTkZJR19YRlNfUE9TSVhfQUNMCi0JJnhmc194YXR0cl9zeXN0ZW1faGFuZGxlciwKKwkmeGZzX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciwKKwkmeGZzX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIsCiAjZW5kaWYKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCmluZGV4IDJmM2YyMjI5Li5kN2M3ZWVhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zX3NwYWNlLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfcW0uaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogCiAvKgpAQCAtMTEyLDEwICsxMTMsNyBAQAogCQlpbml0X2NvbXBsZXRpb24oJmRxcC0+cV9mbHVzaCk7CiAJCWNvbXBsZXRlKCZkcXAtPnFfZmx1c2gpOwogCi0jaWZkZWYgWEZTX0RRVU9UX1RSQUNFCi0JCWRxcC0+cV90cmFjZSA9IGt0cmFjZV9hbGxvYyhEUVVPVF9UUkFDRV9TSVpFLCBLTV9OT0ZTKTsKLQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFJTklUIik7Ci0jZW5kaWYKKwkJdHJhY2VfeGZzX2RxaW5pdChkcXApOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIE9ubHkgdGhlIHFfY29yZSBwb3J0aW9uIHdhcyB6ZXJvZWQgaW4gZHFyZWNsYWltX29uZSgpLgpAQCAtMTM2LDEwICsxMzQsNyBAQAogCQkgZHFwLT5xX2hhc2ggPSBOVUxMOwogCQkgQVNTRVJUKGRxcC0+ZHFfZmxuZXh0ID09IGRxcC0+ZHFfZmxwcmV2KTsKIAotI2lmZGVmIFhGU19EUVVPVF9UUkFDRQotCQkgQVNTRVJUKGRxcC0+cV90cmFjZSk7Ci0JCSB4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUVJFQ0xBSU1FRF9JTklUIik7Ci0jZW5kaWYKKwkJdHJhY2VfeGZzX2RxcmV1c2UoZHFwKTsKIAl9CiAKIAkvKgpAQCAtMTY3LDEzICsxNjIsOCBAQAogCiAJbXV0ZXhfZGVzdHJveSgmZHFwLT5xX3Fsb2NrKTsKIAlzdl9kZXN0cm95KCZkcXAtPnFfcGlud2FpdCk7Ci0KLSNpZmRlZiBYRlNfRFFVT1RfVFJBQ0UKLQlpZiAoZHFwLT5xX3RyYWNlKQotCSAgICAga3RyYWNlX2ZyZWUoZHFwLT5xX3RyYWNlKTsKLQlkcXAtPnFfdHJhY2UgPSBOVUxMOwotI2VuZGlmCiAJa21lbV96b25lX2ZyZWUoeGZzX0dxbS0+cW1fZHF6b25lLCBkcXApOworCiAJYXRvbWljX2RlYygmeGZzX0dxbS0+cW1fdG90YWxkcXVvdHMpOwogfQogCkBAIC0xOTUsNDkgKzE4NSw2IEBACiAJZC0+ZGRfZGlza2RxLmRfZmxhZ3MgPSB0eXBlOwogfQogCi0KLSNpZmRlZiBYRlNfRFFVT1RfVFJBQ0UKLS8qCi0gKiBEcXVvdCB0cmFjaW5nIGZvciBkZWJ1Z2dpbmcuCi0gKi8KLS8qIEFSR1NVU0VEICovCi12b2lkCi1fX3hmc19kcXRyYWNlX2VudHJ5KAotCXhmc19kcXVvdF90CSpkcXAsCi0JY2hhcgkJKmZ1bmMsCi0Jdm9pZAkJKnJldGFkZHIsCi0JeGZzX2lub2RlX3QJKmlwKQotewotCXhmc19kcXVvdF90CSp1ZHFwID0gTlVMTDsKLQl4ZnNfaW5vX3QJaW5vID0gMDsKLQotCUFTU0VSVChkcXAtPnFfdHJhY2UpOwotCWlmIChpcCkgewotCQlpbm8gPSBpcC0+aV9pbm87Ci0JCXVkcXAgPSBpcC0+aV91ZHF1b3Q7Ci0JfQotCWt0cmFjZV9lbnRlcihkcXAtPnFfdHJhY2UsCi0JCSAgICAgKHZvaWQgKikoX19wc2ludF90KURRVU9UX0tUUkFDRV9FTlRSWSwKLQkJICAgICAodm9pZCAqKWZ1bmMsCi0JCSAgICAgKHZvaWQgKikoX19wc2ludF90KWRxcC0+cV9ucmVmcywKLQkJICAgICAodm9pZCAqKShfX3BzaW50X3QpZHFwLT5kcV9mbGFncywKLQkJICAgICAodm9pZCAqKShfX3BzaW50X3QpZHFwLT5xX3Jlc19iY291bnQsCi0JCSAgICAgKHZvaWQgKikoX19wc2ludF90KWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmNvdW50KSwKLQkJICAgICAodm9pZCAqKShfX3BzaW50X3QpYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pY291bnQpLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdCliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19oYXJkbGltaXQpLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdCliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19zb2Z0bGltaXQpLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdCliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19oYXJkbGltaXQpLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdCliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19zb2Z0bGltaXQpLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdCliZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2lkKSwKLQkJICAgICAodm9pZCAqKShfX3BzaW50X3QpY3VycmVudF9waWQoKSwKLQkJICAgICAodm9pZCAqKShfX3BzaW50X3QpaW5vLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdClyZXRhZGRyLAotCQkgICAgICh2b2lkICopKF9fcHNpbnRfdCl1ZHFwKTsKLQlyZXR1cm47Ci19Ci0jZW5kaWYKLQotCiAvKgogICogSWYgZGVmYXVsdCBsaW1pdHMgYXJlIGluIGZvcmNlLCBwdXNoIHRoZW0gaW50byB0aGUgZHF1b3Qgbm93LgogICogV2Ugb3ZlcndyaXRlIHRoZSBkcXVvdCBsaW1pdHMgb25seSBpZiB0aGV5IGFyZSB6ZXJvIGFuZCB0aGlzCkBAIC00MjUsNyArMzcyLDggQEAKIAl4ZnNfdHJhbnNfdAkqdHAgPSAqdHBwOwogCiAJQVNTRVJUKHRwICE9IE5VTEwpOwotCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRQUxMT0MiKTsKKworCXRyYWNlX3hmc19kcWFsbG9jKGRxcCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGJtYXAgZnJlZWxpc3QgcHJpb3IgdG8gY2FsbGluZyBibWFwaSBjb2RlLgpAQCAtNjEyLDcgKzU2MCw4IEBACiAJICogKGluIHdoaWNoIGNhc2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBidWYpLgogCSAqLwogCWlmICghIG5ld2RxdW90KSB7Ci0JCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRVE9CUCBSRUFEQlVGIik7CisJCXRyYWNlX3hmc19kcXRvYnBfcmVhZChkcXApOworCiAJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVhZF9idWYobXAsIHRwLCBtcC0+bV9kZGV2X3RhcmdwLAogCQkJCQkgICAgICAgZHFwLT5xX2Jsa25vLAogCQkJCQkgICAgICAgWEZTX1FJX0RRQ0hVTktMRU4obXApLApAQCAtNjcwLDExICs2MTksMTIgQEAKIAogCUFTU0VSVCh0cHApOwogCisJdHJhY2VfeGZzX2RxcmVhZChkcXApOworCiAJLyoKIAkgKiBnZXQgYSBwb2ludGVyIHRvIHRoZSBvbi1kaXNrIGRxdW90IGFuZCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgaXQKIAkgKiBkcXAgYWxyZWFkeSBrbm93cyBpdHMgb3duIHR5cGUgKEdST1VQL1VTRVIpLgogCSAqLwotCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRUkVBRCIpOwogCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHF0b2JwKHRwcCwgZHFwLCAmZGRxcCwgJmJwLCBmbGFncykpKSB7CiAJCXJldHVybiAoZXJyb3IpOwogCX0KQEAgLTc2Myw3ICs3MTMsNyBAQAogCQkgKiBvciBpZiB0aGUgZHF1b3QgZGlkbid0IGV4aXN0IG9uIGRpc2sgYW5kIHdlIGFzayB0bwogCQkgKiBhbGxvY2F0ZSAoRU5PRU5UKS4KIAkJICovCi0JCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRUkVBRCBGQUlMIik7CisJCXRyYWNlX3hmc19kcXJlYWRfZmFpbChkcXApOwogCQljYW5jZWxmbGFncyB8PSBYRlNfVFJBTlNfQUJPUlQ7CiAJCWdvdG8gZXJyb3IwOwogCX0KQEAgLTgxNyw3ICs3NjcsOCBAQAogCQkgKiBpZCBjYW4ndCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBoYXNobG9jayBhbnl3YXkuCiAJCSAqLwogCQlpZiAoYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCkgPT0gaWQgJiYgZHFwLT5xX21vdW50ID09IG1wKSB7Ci0JCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUZPVU5EIEJZIExPT0tVUCIpOworCQkJdHJhY2VfeGZzX2RxbG9va3VwX2ZvdW5kKGRxcCk7CisKIAkJCS8qCiAJCQkgKiBBbGwgaW4gY29yZSBkcXVvdHMgbXVzdCBiZSBvbiB0aGUgZHFsaXN0IG9mIG1wCiAJCQkgKi8KQEAgLTgyNyw3ICs3NzgsNyBAQAogCQkJaWYgKGRxcC0+cV9ucmVmcyA9PSAwKSB7CiAJCQkJQVNTRVJUIChYRlNfRFFfSVNfT05fRlJFRUxJU1QoZHFwKSk7CiAJCQkJaWYgKCEgeGZzX3FtX2ZyZWVsaXN0X2xvY2tfbm93YWl0KHhmc19HcW0pKSB7Ci0JCQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRTE9PS1VQOiBXQU5UIik7CisJCQkJCXRyYWNlX3hmc19kcWxvb2t1cF93YW50KGRxcCk7CiAKIAkJCQkJLyoKIAkJCQkJICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBkcXJlY2xhaW1fb25lKCkKQEAgLTg1Nyw4ICs4MDgsNyBAQAogCQkJCQkvKgogCQkJCQkgKiB0YWtlIGl0IG9mZiB0aGUgZnJlZWxpc3QKIAkJCQkJICovCi0JCQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwKLQkJCQkJCQkiRFFMT09LVVA6IFRBS0VPRkYgRkwiKTsKKwkJCQkJdHJhY2VfeGZzX2RxbG9va3VwX2ZyZWVsaXN0KGRxcCk7CiAJCQkJCVhRTV9GUkVFTElTVF9SRU1PVkUoZHFwKTsKIAkJCQkJLyogeGZzX3FtX2ZyZWVsaXN0X3ByaW50KCYoeGZzX0dxbS0+CiAJCQkJCQkJcW1fZHFmcmVlbGlzdCksCkBAIC04NzgsOCArODI4LDcgQEAKIAkJCSAqLwogCQkJQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmcWgtPnFoX2xvY2spKTsKIAkJCWlmIChkcXAtPkhMX1BSRVZQICE9ICZxaC0+cWhfbmV4dCkgewotCQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwKLQkJCQkJCSAgIkRRTE9PS1VQOiBIQVNIIE1PVkVUT0ZST05UIik7CisJCQkJdHJhY2VfeGZzX2RxbG9va3VwX21vdmUoZHFwKTsKIAkJCQlpZiAoKGQgPSBkcXAtPkhMX05FWFQpKQogCQkJCQlkLT5ITF9QUkVWUCA9IGRxcC0+SExfUFJFVlA7CiAJCQkJKihkcXAtPkhMX1BSRVZQKSA9IGQ7CkBAIC04ODksNyArODM4LDcgQEAKIAkJCQlkcXAtPkhMX1BSRVZQID0gJnFoLT5xaF9uZXh0OwogCQkJCXFoLT5xaF9uZXh0ID0gZHFwOwogCQkJfQotCQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiTE9PS1VQIEVORCIpOworCQkJdHJhY2VfeGZzX2RxbG9va3VwX2RvbmUoZHFwKTsKIAkJCSpPX2RxcHAgPSBkcXA7CiAJCQlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZxaC0+cWhfbG9jaykpOwogCQkJcmV0dXJuICgwKTsKQEAgLTk3MSw3ICs5MjAsNyBAQAogCQlBU1NFUlQoKk9fZHFwcCk7CiAJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKCpPX2RxcHApKTsKIAkJbXV0ZXhfdW5sb2NrKCZoLT5xaF9sb2NrKTsKLQkJeGZzX2RxdHJhY2VfZW50cnkoKk9fZHFwcCwgIkRRR0VUIERPTkUgKEZST00gQ0FDSEUpIik7CisJCXRyYWNlX3hmc19kcWdldF9oaXQoKk9fZHFwcCk7CiAJCXJldHVybiAoMCk7CS8qIHN1Y2Nlc3MgKi8KIAl9CiAJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcWNhY2hlbWlzc2VzKTsKQEAgLTExMDQsNyArMTA1Myw3IEBACiAJbXV0ZXhfdW5sb2NrKCZoLT5xaF9sb2NrKTsKICBkcXJldDoKIAlBU1NFUlQoKGlwID09IE5VTEwpIHx8IHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7Ci0JeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFHRVQgRE9ORSIpOworCXRyYWNlX3hmc19kcWdldF9taXNzKGRxcCk7CiAJKk9fZHFwcCA9IGRxcDsKIAlyZXR1cm4gKDApOwogfQpAQCAtMTEyNCw3ICsxMDczLDggQEAKIAogCUFTU0VSVChkcXAtPnFfbnJlZnMgPiAwKTsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKLQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUVBVVCIpOworCisJdHJhY2VfeGZzX2RxcHV0KGRxcCk7CiAKIAlpZiAoZHFwLT5xX25yZWZzICE9IDEpIHsKIAkJZHFwLT5xX25yZWZzLS07CkBAIC0xMTM3LDcgKzEwODcsNyBAQAogCSAqIGluIHRoZSByaWdodCBvcmRlcjsgYnV0IHRyeSB0byBnZXQgaXQgb3V0LW9mLW9yZGVyIGZpcnN0CiAJICovCiAJaWYgKCEgeGZzX3FtX2ZyZWVsaXN0X2xvY2tfbm93YWl0KHhmc19HcW0pKSB7Ci0JCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRUFVUOiBGTExPQ0stV0FJVCIpOworCQl0cmFjZV94ZnNfZHFwdXRfd2FpdChkcXApOwogCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJeGZzX3FtX2ZyZWVsaXN0X2xvY2soeGZzX0dxbSk7CiAJCXhmc19kcWxvY2soZHFwKTsKQEAgLTExNDgsNyArMTA5OCw4IEBACiAKIAkJLyogV2UgY2FuJ3QgZGVwZW5kIG9uIG5yZWZzIGJlaW5nID09IDEgaGVyZSAqLwogCQlpZiAoLS1kcXAtPnFfbnJlZnMgPT0gMCkgewotCQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFQVVQ6IE9OIEZSRUVMSVNUIik7CisJCQl0cmFjZV94ZnNfZHFwdXRfZnJlZShkcXApOworCiAJCQkvKgogCQkJICogaW5zZXJ0IGF0IGVuZCBvZiB0aGUgZnJlZWxpc3QuCiAJCQkgKi8KQEAgLTExOTYsNyArMTE0Nyw3IEBACiAJaWYgKCFkcXApCiAJCXJldHVybjsKIAotCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRUkVMRSIpOworCXRyYWNlX3hmc19kcXJlbGUoZHFwKTsKIAogCXhmc19kcWxvY2soZHFwKTsKIAkvKgpAQCAtMTIyOSw3ICsxMTgwLDcgQEAKIAogCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwogCUFTU0VSVCghY29tcGxldGlvbl9kb25lKCZkcXAtPnFfZmx1c2gpKTsKLQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUZMVVNIIik7CisJdHJhY2VfeGZzX2RxZmx1c2goZHFwKTsKIAogCS8qCiAJICogSWYgbm90IGRpcnR5LCBvciBpdCdzIHBpbm5lZCBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0bwpAQCAtMTI1OSw3ICsxMjEwLDYgQEAKIAkgKiB0aGUgb25kaXNrLWRxdW90IGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGZvci4KIAkgKi8KIAlpZiAoKGVycm9yID0geGZzX3FtX2RxdG9icChOVUxMLCBkcXAsICZkZHFwLCAmYnAsIFhGU19RTU9QVF9ET1dBUk4pKSkgewotCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUVRPQlAgRkFJTCIpOwogCQlBU1NFUlQoZXJyb3IgIT0gRU5PRU5UKTsKIAkJLyoKIAkJICogUXVvdGFzIGNvdWxkIGhhdmUgZ290dGVuIHR1cm5lZCBvZmYgKEVTUkNIKQpAQCAtMTI5Nyw3ICsxMjQ3LDcgQEAKIAkgKiBnZXQgc3R1Y2sgd2FpdGluZyBpbiB0aGUgd3JpdGUgZm9yIHRvbyBsb25nLgogCSAqLwogCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUZMVVNIIExPRyBGT1JDRSIpOworCQl0cmFjZV94ZnNfZHFmbHVzaF9mb3JjZShkcXApOwogCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOwogCX0KIApAQCAtMTMwOCw3ICsxMjU4LDkgQEAKIAl9IGVsc2UgewogCQllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKIAl9Ci0JeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFGTFVTSCBFTkQiKTsKKworCXRyYWNlX3hmc19kcWZsdXNoX2RvbmUoZHFwKTsKKwogCS8qCiAJICogZHFwIGlzIHN0aWxsIGxvY2tlZCwgYnV0IGNhbGxlciBpcyBmcmVlIHRvIHVubG9jayBpdCBub3cuCiAJICovCkBAIC0xNDgzLDcgKzE0MzUsNyBAQAogCSAqLwogCWlmIChYRlNfRFFfSVNfRElSVFkoZHFwKSkgewogCQlpbnQJZXJyb3I7Ci0JCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRUFVSR0UgLT5EUUZMVVNIOiBEUURJUlRZIik7CisKIAkJLyogZHFmbHVzaCB1bmxvY2tzIGRxZmxvY2sgKi8KIAkJLyoKIAkJICogR2l2ZW4gdGhhdCBkcXB1cmdlIGlzIGEgdmVyeSByYXJlIG9jY3VycmVuY2UsIGl0IGlzIE9LCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmggYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmgKaW5kZXggYTJjMTZiYy4uYTBmN2RhNSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaApAQCAtODUsOSArODUsNiBAQAogCXN0cnVjdCBjb21wbGV0aW9uIHFfZmx1c2g7CS8qIGZsdXNoIGNvbXBsZXRpb24gcXVldWUgKi8KIAlhdG9taWNfdCAgICAgICAgICBxX3BpbmNvdW50OwkvKiBkcXVvdCBwaW4gY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBxX3BpbndhaXQ7CS8qIGRxdW90IHBpbm5pbmcgd2FpdCBxdWV1ZSAqLwotI2lmZGVmIFhGU19EUVVPVF9UUkFDRQotCXN0cnVjdCBrdHJhY2UJKnFfdHJhY2U7CS8qIHRyYWNlIGhlYWRlciBzdHJ1Y3R1cmUgKi8KLSNlbmRpZgogfSB4ZnNfZHF1b3RfdDsKIAogCkBAIC0xNDQsMjQgKzE0MSw2IEBACiAJCQkJICAgICAoWEZTX0lTX1VRVU9UQV9PTigoZCktPnFfbW91bnQpKSA6IFwKIAkJCQkgICAgIChYRlNfSVNfT1FVT1RBX09OKChkKS0+cV9tb3VudCkpKSkKIAotI2lmZGVmIFhGU19EUVVPVF9UUkFDRQotLyoKLSAqIERxdW90IFRyYWNpbmcgc3R1ZmYuCi0gKi8KLSNkZWZpbmUgRFFVT1RfVFJBQ0VfU0laRQk2NAotI2RlZmluZSBEUVVPVF9LVFJBQ0VfRU5UUlkJMQotCi1leHRlcm4gdm9pZAkJX194ZnNfZHF0cmFjZV9lbnRyeSh4ZnNfZHF1b3RfdCAqZHFwLCBjaGFyICpmdW5jLAotCQkJCQkgICAgdm9pZCAqLCB4ZnNfaW5vZGVfdCAqKTsKLSNkZWZpbmUgeGZzX2RxdHJhY2VfZW50cnlfaW5vKGEsYixpcCkgXAotCQlfX3hmc19kcXRyYWNlX2VudHJ5KChhKSwgKGIpLCAodm9pZCopX19yZXR1cm5fYWRkcmVzcywgKGlwKSkKLSNkZWZpbmUgeGZzX2RxdHJhY2VfZW50cnkoYSxiKSBcCi0JCV9feGZzX2RxdHJhY2VfZW50cnkoKGEpLCAoYiksICh2b2lkKilfX3JldHVybl9hZGRyZXNzLCBOVUxMKQotI2Vsc2UKLSNkZWZpbmUgeGZzX2RxdHJhY2VfZW50cnkoYSxiKQotI2RlZmluZSB4ZnNfZHF0cmFjZV9lbnRyeV9pbm8oYSxiLGlwKQotI2VuZGlmCi0KICNpZmRlZiBRVU9UQURFQlVHCiBleHRlcm4gdm9pZAkJeGZzX3FtX2RxcHJpbnQoeGZzX2RxdW90X3QgKik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDQ1YjFiZmUuLjllNjI3YTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnNfc3BhY2UuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKICNpbmNsdWRlICJ4ZnNfcW0uaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIFRoZSBnbG9iYWwgcXVvdGEgbWFuYWdlci4gVGhlcmUgaXMgb25seSBvbmUgb2YgdGhlc2UgZm9yIHRoZSBlbnRpcmUKQEAgLTQ1Myw3ICs0NTQsNyBAQAogCQkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCQljb250aW51ZTsKIAkJfQotCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJGTFVTSEFMTDogRFFESVJUWSIpOworCiAJCS8qIFhYWCBhIHNlbnRpbmVsIHdvdWxkIGJlIGJldHRlciAqLwogCQlyZWNsID0gWEZTX1FJX01QTFJFQ0xBSU1TKG1wKTsKIAkJaWYgKCF4ZnNfZHFmbG9ja19ub3dhaXQoZHFwKSkgewpAQCAtNjUxLDcgKzY1Miw3IEBACiAJICovCiAJZHFwID0gKklPX2lkcXBwOwogCWlmIChkcXApIHsKLQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFBVFRBQ0g6IGZvdW5kIGluIGlwIik7CisJCXRyYWNlX3hmc19kcWF0dGFjaF9mb3VuZChkcXApOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTcwNCw3ICs3MDUsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFBVFRBQ0g6IGZvdW5kIGJ5IGRxZ2V0Iik7CisJdHJhY2VfeGZzX2RxYXR0YWNoX2dldChkcXApOwogCiAJLyoKIAkgKiBkcWdldCBtYXkgaGF2ZSBkcm9wcGVkIGFuZCByZS1hY3F1aXJlZCB0aGUgaWxvY2ssIGJ1dCBpdCBndWFyYW50ZWVzCkBAIC04OTAsMTUgKzg5MSwxNSBAQAogCWlmICghKGlwLT5pX3VkcXVvdCB8fCBpcC0+aV9nZHF1b3QpKQogCQlyZXR1cm47CiAKKwl0cmFjZV94ZnNfZHF1b3RfZHFkZXRhY2goaXApOworCiAJQVNTRVJUKGlwLT5pX2lubyAhPSBpcC0+aV9tb3VudC0+bV9zYi5zYl91cXVvdGlubyk7CiAJQVNTRVJUKGlwLT5pX2lubyAhPSBpcC0+aV9tb3VudC0+bV9zYi5zYl9ncXVvdGlubyk7CiAJaWYgKGlwLT5pX3VkcXVvdCkgewotCQl4ZnNfZHF0cmFjZV9lbnRyeV9pbm8oaXAtPmlfdWRxdW90LCAiRFFERVRUQUNIIiwgaXApOwogCQl4ZnNfcW1fZHFyZWxlKGlwLT5pX3VkcXVvdCk7CiAJCWlwLT5pX3VkcXVvdCA9IE5VTEw7CiAJfQogCWlmIChpcC0+aV9nZHF1b3QpIHsKLQkJeGZzX2RxdHJhY2VfZW50cnlfaW5vKGlwLT5pX2dkcXVvdCwgIkRRREVUVEFDSCIsIGlwKTsKIAkJeGZzX3FtX2RxcmVsZShpcC0+aV9nZHF1b3QpOwogCQlpcC0+aV9nZHF1b3QgPSBOVUxMOwogCX0KQEAgLTk3Nyw3ICs5NzgsNiBAQAogCQkgKiBhY3Jvc3MgYSBkaXNrIHdyaXRlCiAJCSAqLwogCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhtcCk7Ci0JCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIlhRTV9TWU5DOiBEUUZMVVNIIik7CiAJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBmbHVzaF9mbGFncyk7CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlpZiAoZXJyb3IgJiYgWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCkBAIC0xMzUwLDcgKzEzNTAsOCBAQAogCXhmc19kaXNrX2RxdW90X3QJKmRkcTsKIAlpbnQJCQlqOwogCi0JeGZzX2J1ZnRyYWNlKCJSRVNFVCBEUVVPVFMiLCBicCk7CisJdHJhY2VfeGZzX3Jlc2V0X2RxY291bnRzKGJwLCBfUkVUX0lQXyk7CisKIAkvKgogCSAqIFJlc2V0IGFsbCBjb3VudGVycyBhbmQgdGltZXJzLiBUaGV5J2xsIGJlCiAJICogc3RhcnRlZCBhZnJlc2ggYnkgeGZzX3FtX3F1b3RhY2hlY2suCkBAIC0xNTQzLDcgKzE1NDQsOSBAQAogCXhmc19xY250X3QJCXJ0YmxrcykKIHsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKLQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJRQ0hFQ0sgRFFBREpVU1QiKTsKKworCXRyYWNlX3hmc19kcWFkanVzdChkcXApOworCiAJLyoKIAkgKiBBZGp1c3QgdGhlIGlub2RlIGNvdW50IGFuZCB0aGUgYmxvY2sgY291bnQgdG8gcmVmbGVjdCB0aGlzIGlub2RlJ3MKIAkgKiByZXNvdXJjZSB1c2FnZS4KQEAgLTE5OTQsNyArMTk5Nyw5IEBACiAJCSAqLwogCQlpZiAoWEZTX0RRX0lTX0RJUlRZKGRxcCkpIHsKIAkJCWludAllcnJvcjsKLQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRU0hBS0U6IERRRElSVFkiKTsKKworCQkJdHJhY2VfeGZzX2Rxc2hha2VfZGlydHkoZHFwKTsKKwogCQkJLyoKIAkJCSAqIFdlIGZsdXNoIGl0IGRlbGF5ZWQgd3JpdGUsIHNvIGRvbid0IGJvdGhlcgogCQkJICogcmVsZWFzaW5nIHRoZSBtcGxvY2suCkBAIC0yMDM4LDcgKzIwNDMsOSBAQAogCQkJCXJldHVybiBucmVjbGFpbWVkOwogCQkJZ290byB0cnlhZ2FpbjsKIAkJfQotCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUVNIQUtFOiBVTkxJTktJTkciKTsKKworCQl0cmFjZV94ZnNfZHFzaGFrZV91bmxpbmsoZHFwKTsKKwogI2lmZGVmIFFVT1RBREVCVUcKIAkJY21uX2VycihDRV9ERUJVRywgIlNoYWtlIDB4JXAsIElEIDB4JXhcbiIsCiAJCQlkcXAsIGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWQpKTsKQEAgLTIxMjUsNyArMjEzMiw5IEBACiAJCSAqLwogCQlpZiAoZHFwLT5kcV9mbGFncyAmIFhGU19EUV9XQU5UKSB7CiAJCQlBU1NFUlQoISAoZHFwLT5kcV9mbGFncyAmIFhGU19EUV9JTkFDVElWRSkpOwotCQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFSRUNMQUlNOiBEUVdBTlQiKTsKKworCQkJdHJhY2VfeGZzX2RxcmVjbGFpbV93YW50KGRxcCk7CisKIAkJCXhmc19kcXVubG9jayhkcXApOwogCQkJeGZzX3FtX2ZyZWVsaXN0X3VubG9jayh4ZnNfR3FtKTsKIAkJCWlmICgrK3Jlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKQEAgLTIxNzEsNyArMjE4MCw5IEBACiAJCSAqLwogCQlpZiAoWEZTX0RRX0lTX0RJUlRZKGRxcCkpIHsKIAkJCWludAllcnJvcjsKLQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRUkVDTEFJTTogRFFESVJUWSIpOworCisJCQl0cmFjZV94ZnNfZHFyZWNsYWltX2RpcnR5KGRxcCk7CisKIAkJCS8qCiAJCQkgKiBXZSBmbHVzaCBpdCBkZWxheWVkIHdyaXRlLCBzbyBkb24ndCBib3RoZXIKIAkJCSAqIHJlbGVhc2luZyB0aGUgZnJlZWxpc3QgbG9jay4KQEAgLTIxOTQsOCArMjIwNSw5IEBACiAJCWlmICghbXV0ZXhfdHJ5bG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spKQogCQkJZ290byBtcGxpc3R1bmxvY2s7CiAKKwkJdHJhY2VfeGZzX2RxcmVjbGFpbV91bmxpbmsoZHFwKTsKKwogCQlBU1NFUlQoZHFwLT5xX25yZWZzID09IDApOwotCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUVJFQ0xBSU06IFVOTElOS0lORyIpOwogCQlYUU1fTVBMSVNUX1JFTU9WRSgmKFhGU19RSV9NUExfTElTVChkcXAtPnFfbW91bnQpKSwgZHFwKTsKIAkJWFFNX0hBU0hMSVNUX1JFTU9WRShkcXAtPnFfaGFzaCwgZHFwKTsKIAkJWFFNX0ZSRUVMSVNUX1JFTU9WRShkcXApOwpAQCAtMjQzMCw3ICsyNDQyLDcgQEAKIAkJfQogCX0KIAlpZiAodXEpCi0JCXhmc19kcXRyYWNlX2VudHJ5X2lubyh1cSwgIkRRQUxMT0MiLCBpcCk7CisJCXRyYWNlX3hmc19kcXVvdF9kcWFsbG9jKGlwKTsKIAogCXhmc19pdW5sb2NrKGlwLCBsb2NrZmxhZ3MpOwogCWlmIChPX3VkcXBwKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDVkMWEzYjkuLjcxYWY3NmYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKICNpbmNsdWRlICJ4ZnNfcW0uaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogI2lmZGVmIERFQlVHCiAjIGRlZmluZSBxZHByaW50ayhzLCBhcmdzLi4uKQljbW5fZXJyKENFX0RFQlVHLCBzLCAjIyBhcmdzKQpAQCAtNDk2LDcgKzQ5Nyw2IEBACiAJCUFTU0VSVChlcnJvciAhPSBFTk9FTlQpOwogCQlyZXR1cm4gKGVycm9yKTsKIAl9Ci0JeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiUV9TRVRRTElNOiBBRlQgRFFHRVQiKTsKIAl4ZnNfdHJhbnNfZHFqb2luKHRwLCBkcXApOwogCWRkcSA9ICZkcXAtPnFfY29yZTsKIApAQCAtNjAyLDcgKzYwMiw2IEBACiAJZHFwLT5kcV9mbGFncyB8PSBYRlNfRFFfRElSVFk7CiAJeGZzX3RyYW5zX2xvZ19kcXVvdCh0cCwgZHFwKTsKIAotCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIlFfU0VUUUxJTTogQ09NTUlUIik7CiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIAl4ZnNfcW1fZHFwcmludChkcXApOwogCXhmc19xbV9kcXJlbGUoZHFwKTsKQEAgLTYzMCw3ICs2MjksNiBAQAogCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJRX0dFVFFVT1RBIFNVQ0NFU1MiKTsKIAkvKgogCSAqIElmIGV2ZXJ5dGhpbmcncyBOVUxMLCB0aGlzIGRxdW90IGRvZXNuJ3QgcXVpdGUgZXhpc3QgYXMgZmFyIGFzCiAJICogb3VyIHV0aWxpdHkgcHJvZ3JhbXMgYXJlIGNvbmNlcm5lZC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jIGIvZnMveGZzL3N1cHBvcnQva3RyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNDk0YzIuLjAwMDAwMDAKLS0tIGEvZnMveGZzL3N1cHBvcnQva3RyYWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgPHhmcy5oPgotCi1zdGF0aWMga21lbV96b25lX3QgKmt0cmFjZV9oZHJfem9uZTsKLXN0YXRpYyBrbWVtX3pvbmVfdCAqa3RyYWNlX2VudF96b25lOwotc3RhdGljIGludCAgICAgICAgICBrdHJhY2VfemVudHJpZXM7Ci0KLXZvaWQgX19pbml0Ci1rdHJhY2VfaW5pdChpbnQgemVudHJpZXMpCi17Ci0Ja3RyYWNlX3plbnRyaWVzID0gcm91bmR1cF9wb3dfb2ZfdHdvKHplbnRyaWVzKTsKLQotCWt0cmFjZV9oZHJfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZihrdHJhY2VfdCksCi0JCQkJCSJrdHJhY2VfaGRyIik7Ci0JQVNTRVJUKGt0cmFjZV9oZHJfem9uZSk7Ci0KLQlrdHJhY2VfZW50X3pvbmUgPSBrbWVtX3pvbmVfaW5pdChrdHJhY2VfemVudHJpZXMKLQkJCQkJKiBzaXplb2Yoa3RyYWNlX2VudHJ5X3QpLAotCQkJCQkia3RyYWNlX2VudCIpOwotCUFTU0VSVChrdHJhY2VfZW50X3pvbmUpOwotfQotCi12b2lkIF9fZXhpdAota3RyYWNlX3VuaW5pdCh2b2lkKQotewotCWttZW1fem9uZV9kZXN0cm95KGt0cmFjZV9oZHJfem9uZSk7Ci0Ja21lbV96b25lX2Rlc3Ryb3koa3RyYWNlX2VudF96b25lKTsKLX0KLQotLyoKLSAqIGt0cmFjZV9hbGxvYygpCi0gKgotICogQWxsb2NhdGUgYSBrdHJhY2UgaGVhZGVyIGFuZCBlbm91Z2ggYnVmZmVyaW5nIGZvciB0aGUgZ2l2ZW4KLSAqIG51bWJlciBvZiBlbnRyaWVzLiBSb3VuZCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdXAgdG8gYQotICogcG93ZXIgb2YgMiBzbyB3ZSBjYW4gZG8gZmFzdCBtYXNraW5nIHRvIGdldCB0aGUgaW5kZXggZnJvbQotICogdGhlIGF0b21pYyBpbmRleCBjb3VudGVyLgotICovCi1rdHJhY2VfdCAqCi1rdHJhY2VfYWxsb2MoaW50IG5lbnRyaWVzLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3Qgc2xlZXApCi17Ci0Ja3RyYWNlX3QgICAgICAgICprdHA7Ci0Ja3RyYWNlX2VudHJ5X3QgICprdGVwOwotCWludAkJZW50cmllczsKLQotCWt0cCA9IChrdHJhY2VfdCopa21lbV96b25lX2FsbG9jKGt0cmFjZV9oZHJfem9uZSwgc2xlZXApOwotCi0JaWYgKGt0cCA9PSAoa3RyYWNlX3QqKU5VTEwpIHsKLQkJLyoKLQkJICogS01fU0xFRVAgY2FsbGVycyBkb24ndCBleHBlY3QgZmFpbHVyZS4KLQkJICovCi0JCWlmIChzbGVlcCAmIEtNX1NMRUVQKQotCQkJcGFuaWMoImt0cmFjZV9hbGxvYzogTlVMTCBtZW1vcnkgb24gS01fU0xFRVAgcmVxdWVzdCEiKTsKLQotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKgotCSAqIFNwZWNpYWwgdHJlYXRtZW50IGZvciBidWZmZXJzIHdpdGggdGhlIGt0cmFjZV96ZW50cmllcyBlbnRyaWVzCi0JICovCi0JZW50cmllcyA9IHJvdW5kdXBfcG93X29mX3R3byhuZW50cmllcyk7Ci0JaWYgKGVudHJpZXMgPT0ga3RyYWNlX3plbnRyaWVzKSB7Ci0JCWt0ZXAgPSAoa3RyYWNlX2VudHJ5X3QqKWttZW1fem9uZV96YWxsb2Moa3RyYWNlX2VudF96b25lLAotCQkJCQkJCSAgICBzbGVlcCk7Ci0JfSBlbHNlIHsKLQkJa3RlcCA9IChrdHJhY2VfZW50cnlfdCopa21lbV96YWxsb2MoKGVudHJpZXMgKiBzaXplb2YoKmt0ZXApKSwKLQkJCQkJCQkgICAgc2xlZXAgfCBLTV9MQVJHRSk7Ci0JfQotCi0JaWYgKGt0ZXAgPT0gTlVMTCkgewotCQkvKgotCQkgKiBLTV9TTEVFUCBjYWxsZXJzIGRvbid0IGV4cGVjdCBmYWlsdXJlLgotCQkgKi8KLQkJaWYgKHNsZWVwICYgS01fU0xFRVApCi0JCQlwYW5pYygia3RyYWNlX2FsbG9jOiBOVUxMIG1lbW9yeSBvbiBLTV9TTEVFUCByZXF1ZXN0ISIpOwotCi0JCWttZW1fZnJlZShrdHApOwotCi0JCXJldHVybiBOVUxMOwotCX0KLQotCWt0cC0+a3RfZW50cmllcyAgPSBrdGVwOwotCWt0cC0+a3RfbmVudHJpZXMgPSBlbnRyaWVzOwotCUFTU0VSVChpc19wb3dlcl9vZl8yKGVudHJpZXMpKTsKLQlrdHAtPmt0X2luZGV4X21hc2sgPSBlbnRyaWVzIC0gMTsKLQlhdG9taWNfc2V0KCZrdHAtPmt0X2luZGV4LCAwKTsKLQlrdHAtPmt0X3JvbGxvdmVyID0gMDsKLQlyZXR1cm4ga3RwOwotfQotCi0KLS8qCi0gKiBrdHJhY2VfZnJlZSgpCi0gKgotICogRnJlZSB1cCB0aGUga3RyYWNlIGhlYWRlciBhbmQgYnVmZmVyLiAgSXQgaXMgdXAgdG8gdGhlIGNhbGxlcgotICogdG8gZW5zdXJlIHRoYXQgbm8tb25lIGlzIHJlZmVyZW5jaW5nIGl0LgotICovCi12b2lkCi1rdHJhY2VfZnJlZShrdHJhY2VfdCAqa3RwKQotewotCWlmIChrdHAgPT0gKGt0cmFjZV90ICopTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBTcGVjaWFsIHRyZWF0bWVudCBmb3IgdGhlIFZub2RlIHRyYWNlIGJ1ZmZlci4KLQkgKi8KLQlpZiAoa3RwLT5rdF9uZW50cmllcyA9PSBrdHJhY2VfemVudHJpZXMpCi0JCWttZW1fem9uZV9mcmVlKGt0cmFjZV9lbnRfem9uZSwga3RwLT5rdF9lbnRyaWVzKTsKLQllbHNlCi0JCWttZW1fZnJlZShrdHAtPmt0X2VudHJpZXMpOwotCi0Ja21lbV96b25lX2ZyZWUoa3RyYWNlX2hkcl96b25lLCBrdHApOwotfQotCi0KLS8qCi0gKiBFbnRlciB0aGUgZ2l2ZW4gdmFsdWVzIGludG8gdGhlICJuZXh0IiBlbnRyeSBpbiB0aGUgdHJhY2UgYnVmZmVyLgotICoga3RfaW5kZXggaXMgYWx3YXlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBlbnRyeSB0byBiZSBmaWxsZWQuCi0gKi8KLXZvaWQKLWt0cmFjZV9lbnRlcigKLQlrdHJhY2VfdCAgICAgICAgKmt0cCwKLQl2b2lkICAgICAgICAgICAgKnZhbDAsCi0Jdm9pZCAgICAgICAgICAgICp2YWwxLAotCXZvaWQgICAgICAgICAgICAqdmFsMiwKLQl2b2lkICAgICAgICAgICAgKnZhbDMsCi0Jdm9pZCAgICAgICAgICAgICp2YWw0LAotCXZvaWQgICAgICAgICAgICAqdmFsNSwKLQl2b2lkICAgICAgICAgICAgKnZhbDYsCi0Jdm9pZCAgICAgICAgICAgICp2YWw3LAotCXZvaWQgICAgICAgICAgICAqdmFsOCwKLQl2b2lkICAgICAgICAgICAgKnZhbDksCi0Jdm9pZCAgICAgICAgICAgICp2YWwxMCwKLQl2b2lkICAgICAgICAgICAgKnZhbDExLAotCXZvaWQgICAgICAgICAgICAqdmFsMTIsCi0Jdm9pZCAgICAgICAgICAgICp2YWwxMywKLQl2b2lkICAgICAgICAgICAgKnZhbDE0LAotCXZvaWQgICAgICAgICAgICAqdmFsMTUpCi17Ci0JaW50ICAgICAgICAgICAgIGluZGV4OwotCWt0cmFjZV9lbnRyeV90ICAqa3RlcDsKLQotCUFTU0VSVChrdHAgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIEdyYWIgYW4gZW50cnkgYnkgcHVzaGluZyB0aGUgaW5kZXggdXAgdG8gdGhlIG5leHQgb25lLgotCSAqLwotCWluZGV4ID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJmt0cC0+a3RfaW5kZXgpOwotCWluZGV4ID0gKGluZGV4IC0gMSkgJiBrdHAtPmt0X2luZGV4X21hc2s7Ci0JaWYgKCFrdHAtPmt0X3JvbGxvdmVyICYmIGluZGV4ID09IGt0cC0+a3RfbmVudHJpZXMgLSAxKQotCQlrdHAtPmt0X3JvbGxvdmVyID0gMTsKLQotCUFTU0VSVCgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwga3RwLT5rdF9uZW50cmllcykpOwotCi0Ja3RlcCA9ICYoa3RwLT5rdF9lbnRyaWVzW2luZGV4XSk7Ci0KLQlrdGVwLT52YWxbMF0gID0gdmFsMDsKLQlrdGVwLT52YWxbMV0gID0gdmFsMTsKLQlrdGVwLT52YWxbMl0gID0gdmFsMjsKLQlrdGVwLT52YWxbM10gID0gdmFsMzsKLQlrdGVwLT52YWxbNF0gID0gdmFsNDsKLQlrdGVwLT52YWxbNV0gID0gdmFsNTsKLQlrdGVwLT52YWxbNl0gID0gdmFsNjsKLQlrdGVwLT52YWxbN10gID0gdmFsNzsKLQlrdGVwLT52YWxbOF0gID0gdmFsODsKLQlrdGVwLT52YWxbOV0gID0gdmFsOTsKLQlrdGVwLT52YWxbMTBdID0gdmFsMTA7Ci0Ja3RlcC0+dmFsWzExXSA9IHZhbDExOwotCWt0ZXAtPnZhbFsxMl0gPSB2YWwxMjsKLQlrdGVwLT52YWxbMTNdID0gdmFsMTM7Ci0Ja3RlcC0+dmFsWzE0XSA9IHZhbDE0OwotCWt0ZXAtPnZhbFsxNV0gPSB2YWwxNTsKLX0KLQotLyoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlci4KLSAqLwotaW50Ci1rdHJhY2VfbmVudHJpZXMoCi0Ja3RyYWNlX3QgICAgICAgICprdHApCi17Ci0JaW50CWluZGV4OwotCWlmIChrdHAgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlpbmRleCA9IGF0b21pY19yZWFkKCZrdHAtPmt0X2luZGV4KSAmIGt0cC0+a3RfaW5kZXhfbWFzazsKLQlyZXR1cm4gKGt0cC0+a3Rfcm9sbG92ZXIgPyBrdHAtPmt0X25lbnRyaWVzIDogaW5kZXgpOwotfQotCi0vKgotICoga3RyYWNlX2ZpcnN0KCkKLSAqCi0gKiBUaGlzIGlzIHVzZWQgdG8gZmluZCB0aGUgc3RhcnQgb2YgdGhlIHRyYWNlIGJ1ZmZlci4KLSAqIEluIGNvbmp1bmN0aW9uIHdpdGgga3RyYWNlX25leHQoKSBpdCBjYW4gYmUgdXNlZCB0bwotICogaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbnRpcmUgdHJhY2UgYnVmZmVyLiAgVGhpcyBjb2RlIGRvZXMKLSAqIG5vdCBkbyBhbnkgbG9ja2luZyBiZWNhdXNlIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBpcyBjYWxsZWQKLSAqIGZyb20gdGhlIGRlYnVnZ2VyLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBwYXNzIGluIGEgcG9pbnRlciB0byBhIGt0cmFjZV9zbmFwCi0gKiBzdHJ1Y3R1cmUgaW4gd2hpY2ggd2Ugd2lsbCBrZWVwIHNvbWUgc3RhdGUgdXNlZCB0bwotICogaXRlcmF0ZSB0aHJvdWdoIHRoZSBidWZmZXIuICBUaGlzIHN0YXRlIG11c3Qgbm90IHRvdWNoZWQKLSAqIGJ5IGFueSBjb2RlIG91dHNpZGUgb2YgdGhpcyBtb2R1bGUuCi0gKi8KLWt0cmFjZV9lbnRyeV90ICoKLWt0cmFjZV9maXJzdChrdHJhY2VfdCAgICprdHAsIGt0cmFjZV9zbmFwX3QgICAgICprdHNwKQotewotCWt0cmFjZV9lbnRyeV90ICAqa3RlcDsKLQlpbnQgICAgICAgICAgICAgaW5kZXg7Ci0JaW50ICAgICAgICAgICAgIG5lbnRyaWVzOwotCi0JaWYgKGt0cC0+a3Rfcm9sbG92ZXIpCi0JCWluZGV4ID0gYXRvbWljX3JlYWQoJmt0cC0+a3RfaW5kZXgpICYga3RwLT5rdF9pbmRleF9tYXNrOwotCWVsc2UKLQkJaW5kZXggPSAwOwotCi0Ja3RzcC0+a3Nfc3RhcnQgPSBpbmRleDsKLQlrdGVwID0gJihrdHAtPmt0X2VudHJpZXNbaW5kZXhdKTsKLQotCW5lbnRyaWVzID0ga3RyYWNlX25lbnRyaWVzKGt0cCk7Ci0JaW5kZXgrKzsKLQlpZiAoaW5kZXggPCBuZW50cmllcykgewotCQlrdHNwLT5rc19pbmRleCA9IGluZGV4OwotCX0gZWxzZSB7Ci0JCWt0c3AtPmtzX2luZGV4ID0gMDsKLQkJaWYgKGluZGV4ID4gbmVudHJpZXMpCi0JCQlrdGVwID0gTlVMTDsKLQl9Ci0JcmV0dXJuIGt0ZXA7Ci19Ci0KLS8qCi0gKiBrdHJhY2VfbmV4dCgpCi0gKgotICogVGhpcyBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZW50cmllcyBvZiB0aGUgZ2l2ZW4KLSAqIHRyYWNlIGJ1ZmZlci4gIFRoZSBjYWxsZXIgbXVzdCBwYXNzIGluIHRoZSBrdHJhY2Vfc25hcF90Ci0gKiBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgYnkga3RyYWNlX2ZpcnN0KCkuICBUaGUgcmV0dXJuIHZhbHVlCi0gKiB3aWxsIGJlIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIG5leHQga3RyYWNlX2VudHJ5IG9yIE5VTEwKLSAqIGlmIGFsbCBvZiB0aGUgZW50cmllcyBoYXZlIGJlZW4gdHJhdmVyc2VkLgotICovCi1rdHJhY2VfZW50cnlfdCAqCi1rdHJhY2VfbmV4dCgKLQlrdHJhY2VfdCAgICAgICAgKmt0cCwKLQlrdHJhY2Vfc25hcF90ICAgKmt0c3ApCi17Ci0JaW50ICAgICAgICAgICAgIGluZGV4OwotCWt0cmFjZV9lbnRyeV90ICAqa3RlcDsKLQotCWluZGV4ID0ga3RzcC0+a3NfaW5kZXg7Ci0JaWYgKGluZGV4ID09IGt0c3AtPmtzX3N0YXJ0KSB7Ci0JCWt0ZXAgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCWt0ZXAgPSAma3RwLT5rdF9lbnRyaWVzW2luZGV4XTsKLQl9Ci0KLQlpbmRleCsrOwotCWlmIChpbmRleCA9PSBrdHJhY2VfbmVudHJpZXMoa3RwKSkgewotCQlrdHNwLT5rc19pbmRleCA9IDA7Ci0JfSBlbHNlIHsKLQkJa3RzcC0+a3NfaW5kZXggPSBpbmRleDsKLQl9Ci0KLQlyZXR1cm4ga3RlcDsKLX0KLQotLyoKLSAqIGt0cmFjZV9za2lwKCkKLSAqCi0gKiBTa2lwIHRoZSBuZXh0ICJjb3VudCIgZW50cmllcyBhbmQgcmV0dXJuIHRoZSBlbnRyeSBhZnRlciB0aGF0LgotICogUmV0dXJuIE5VTEwgaWYgdGhpcyBjYXVzZXMgdXMgdG8gaXRlcmF0ZSBwYXN0IHRoZSBiZWdpbm5pbmcgYWdhaW4uCi0gKi8KLWt0cmFjZV9lbnRyeV90ICoKLWt0cmFjZV9za2lwKAotCWt0cmFjZV90ICAgICAgICAqa3RwLAotCWludCAgICAgICAgICAgICBjb3VudCwKLQlrdHJhY2Vfc25hcF90ICAgKmt0c3ApCi17Ci0JaW50ICAgICAgICAgICAgIGluZGV4OwotCWludCAgICAgICAgICAgICBuZXdfaW5kZXg7Ci0Ja3RyYWNlX2VudHJ5X3QgICprdGVwOwotCWludCAgICAgICAgICAgICBuZW50cmllcyA9IGt0cmFjZV9uZW50cmllcyhrdHApOwotCi0JaW5kZXggPSBrdHNwLT5rc19pbmRleDsKLQluZXdfaW5kZXggPSBpbmRleCArIGNvdW50OwotCXdoaWxlIChuZXdfaW5kZXggPj0gbmVudHJpZXMpIHsKLQkJbmV3X2luZGV4IC09IG5lbnRyaWVzOwotCX0KLQlpZiAoaW5kZXggPT0ga3RzcC0+a3Nfc3RhcnQpIHsKLQkJLyoKLQkJICogV2UndmUgaXRlcmF0ZWQgYXJvdW5kIHRvIHRoZSBzdGFydCwgc28gd2UncmUgZG9uZS4KLQkJICovCi0JCWt0ZXAgPSBOVUxMOwotCX0gZWxzZSBpZiAoKG5ld19pbmRleCA8IGluZGV4KSAmJiAoaW5kZXggPCBrdHNwLT5rc19pbmRleCkpIHsKLQkJLyoKLQkJICogV2UndmUgc2tpcHBlZCBwYXN0IHRoZSBzdGFydCBhZ2Fpbiwgc28gd2UncmUgZG9uZS4KLQkJICovCi0JCWt0ZXAgPSBOVUxMOwotCQlrdHNwLT5rc19pbmRleCA9IGt0c3AtPmtzX3N0YXJ0OwotCX0gZWxzZSB7Ci0JCWt0ZXAgPSAmKGt0cC0+a3RfZW50cmllc1tuZXdfaW5kZXhdKTsKLQkJbmV3X2luZGV4Kys7Ci0JCWlmIChuZXdfaW5kZXggPT0gbmVudHJpZXMpIHsKLQkJCWt0c3AtPmtzX2luZGV4ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWt0c3AtPmtzX2luZGV4ID0gbmV3X2luZGV4OwotCQl9Ci0JfQotCXJldHVybiBrdGVwOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQva3RyYWNlLmggYi9mcy94ZnMvc3VwcG9ydC9rdHJhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxZDY5NC4uMDAwMDAwMAotLS0gYS9mcy94ZnMvc3VwcG9ydC9rdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpZm5kZWYgX19YRlNfU1VQUE9SVF9LVFJBQ0VfSF9fCi0jZGVmaW5lIF9fWEZTX1NVUFBPUlRfS1RSQUNFX0hfXwotCi0vKgotICogVHJhY2UgYnVmZmVyIGVudHJ5IHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qga3RyYWNlX2VudHJ5IHsKLQl2b2lkCSp2YWxbMTZdOwotfSBrdHJhY2VfZW50cnlfdDsKLQotLyoKLSAqIFRyYWNlIGJ1ZmZlciBoZWFkZXIgc3RydWN0dXJlLgotICovCi10eXBlZGVmIHN0cnVjdCBrdHJhY2UgewotCWludAkJa3RfbmVudHJpZXM7CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRyYWNlIGJ1ZiAqLwotCWF0b21pY190CWt0X2luZGV4OwkvKiBjdXJyZW50IGluZGV4IGluIGVudHJpZXMgKi8KLQl1bnNpZ25lZCBpbnQJa3RfaW5kZXhfbWFzazsKLQlpbnQJCWt0X3JvbGxvdmVyOwotCWt0cmFjZV9lbnRyeV90CSprdF9lbnRyaWVzOwkvKiBidWZmZXIgb2YgZW50cmllcyAqLwotfSBrdHJhY2VfdDsKLQotLyoKLSAqIFRyYWNlIGJ1ZmZlciBzbmFwc2hvdCBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGt0cmFjZV9zbmFwIHsKLQlpbnQJCWtzX3N0YXJ0OwkvKiBrdF9pbmRleCBhdCB0aW1lIG9mIHNuYXAgKi8KLQlpbnQJCWtzX2luZGV4OwkvKiBjdXJyZW50IGluZGV4ICovCi19IGt0cmFjZV9zbmFwX3Q7Ci0KLQotI2lmZGVmIENPTkZJR19YRlNfVFJBQ0UKLQotZXh0ZXJuIHZvaWQga3RyYWNlX2luaXQoaW50IHplbnRyaWVzKTsKLWV4dGVybiB2b2lkIGt0cmFjZV91bmluaXQodm9pZCk7Ci0KLWV4dGVybiBrdHJhY2VfdCAqa3RyYWNlX2FsbG9jKGludCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLWV4dGVybiB2b2lkIGt0cmFjZV9mcmVlKGt0cmFjZV90ICopOwotCi1leHRlcm4gdm9pZCBrdHJhY2VfZW50ZXIoCi0Ja3RyYWNlX3QJKiwKLQl2b2lkCQkqLAotCXZvaWQJCSosCi0Jdm9pZAkJKiwKLQl2b2lkCQkqLAotCXZvaWQJCSosCi0Jdm9pZAkJKiwKLQl2b2lkCQkqLAotCXZvaWQJCSosCi0Jdm9pZAkJKiwKLQl2b2lkCQkqLAotCXZvaWQJCSosCi0Jdm9pZAkJKiwKLQl2b2lkCQkqLAotCXZvaWQJCSosCi0Jdm9pZAkJKiwKLQl2b2lkCQkqKTsKLQotZXh0ZXJuIGt0cmFjZV9lbnRyeV90ICAgKmt0cmFjZV9maXJzdChrdHJhY2VfdCAqLCBrdHJhY2Vfc25hcF90ICopOwotZXh0ZXJuIGludCAgICAgICAgICAgICAga3RyYWNlX25lbnRyaWVzKGt0cmFjZV90ICopOwotZXh0ZXJuIGt0cmFjZV9lbnRyeV90ICAgKmt0cmFjZV9uZXh0KGt0cmFjZV90ICosIGt0cmFjZV9zbmFwX3QgKik7Ci1leHRlcm4ga3RyYWNlX2VudHJ5X3QgICAqa3RyYWNlX3NraXAoa3RyYWNlX3QgKiwgaW50LCBrdHJhY2Vfc25hcF90ICopOwotCi0jZWxzZQotI2RlZmluZSBrdHJhY2VfaW5pdCh4KQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGt0cmFjZV91bmluaXQoKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYJLyogQ09ORklHX1hGU19UUkFDRSAqLwotCi0jZW5kaWYJLyogX19YRlNfU1VQUE9SVF9LVFJBQ0VfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzLmggYi9mcy94ZnMveGZzLmgKaW5kZXggMTcyNTRiNS4uNWFkOGFkMyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmcy5oCisrKyBiL2ZzL3hmcy94ZnMuaApAQCAtMjUsMjEgKzI1LDUgQEAKIC8qICNkZWZpbmUgUVVPVEFERUJVRyAxICovCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YRlNfVFJBQ0UKLSNkZWZpbmUgWEZTX0FMTE9DX1RSQUNFIDEKLSNkZWZpbmUgWEZTX0FUVFJfVFJBQ0UgMQotI2RlZmluZSBYRlNfQkxJX1RSQUNFIDEKLSNkZWZpbmUgWEZTX0JNQVBfVFJBQ0UgMQotI2RlZmluZSBYRlNfQlRSRUVfVFJBQ0UgMQotI2RlZmluZSBYRlNfRElSMl9UUkFDRSAxCi0jZGVmaW5lIFhGU19EUVVPVF9UUkFDRSAxCi0jZGVmaW5lIFhGU19JTE9DS19UUkFDRSAxCi0jZGVmaW5lIFhGU19MT0dfVFJBQ0UgMQotI2RlZmluZSBYRlNfUldfVFJBQ0UgMQotI2RlZmluZSBYRlNfQlVGX1RSQUNFIDEKLSNkZWZpbmUgWEZTX0lOT0RFX1RSQUNFIDEKLSNkZWZpbmUgWEZTX0ZJTEVTVFJFQU1TX1RSQUNFIDEKLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgtMi42L3hmc19saW51eC5oPgogI2VuZGlmCS8qIF9fWEZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hY2wuaCBiL2ZzL3hmcy94ZnNfYWNsLmgKaW5kZXggOTQ3YjE1MC4uMDBmZDM1N2MgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWNsLmgKKysrIGIvZnMveGZzL3hmc19hY2wuaApAQCAtNDksNyArNDksOCBAQAogZXh0ZXJuIGludCBwb3NpeF9hY2xfYWNjZXNzX2V4aXN0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgcG9zaXhfYWNsX2RlZmF1bHRfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCi1leHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX3N5c3RlbV9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHhmc194YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXI7CiAjZWxzZQogIyBkZWZpbmUgeGZzX2NoZWNrX2FjbAkJCQkJTlVMTAogIyBkZWZpbmUgeGZzX2dldF9hY2woaW5vZGUsIHR5cGUpCQkJTlVMTApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hZy5oIGIvZnMveGZzL3hmc19hZy5oCmluZGV4IGE1ZDU0YmYuLjY3MDJiZDggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTg2LDYgKzg2LDIwIEBACiAjZGVmaW5lCVhGU19BR0ZfTlVNX0JJVFMJMTIKICNkZWZpbmUJWEZTX0FHRl9BTExfQklUUwkoKDEgPDwgWEZTX0FHRl9OVU1fQklUUykgLSAxKQogCisjZGVmaW5lIFhGU19BR0ZfRkxBR1MgXAorCXsgWEZTX0FHRl9NQUdJQ05VTSwJIk1BR0lDTlVNIiB9LCBcCisJeyBYRlNfQUdGX1ZFUlNJT05OVU0sCSJWRVJTSU9OTlVNIiB9LCBcCisJeyBYRlNfQUdGX1NFUU5PLAkiU0VRTk8iIH0sIFwKKwl7IFhGU19BR0ZfTEVOR1RILAkiTEVOR1RIIiB9LCBcCisJeyBYRlNfQUdGX1JPT1RTLAkiUk9PVFMiIH0sIFwKKwl7IFhGU19BR0ZfTEVWRUxTLAkiTEVWRUxTIiB9LCBcCisJeyBYRlNfQUdGX0ZMRklSU1QsCSJGTEZJUlNUIiB9LCBcCisJeyBYRlNfQUdGX0ZMTEFTVCwJIkZMTEFTVCIgfSwgXAorCXsgWEZTX0FHRl9GTENPVU5ULAkiRkxDT1VOVCIgfSwgXAorCXsgWEZTX0FHRl9GUkVFQkxLUywJIkZSRUVCTEtTIiB9LCBcCisJeyBYRlNfQUdGX0xPTkdFU1QsCSJMT05HRVNUIiB9LCBcCisJeyBYRlNfQUdGX0JUUkVFQkxLUywJIkJUUkVFQkxLUyIgfQorCiAvKiBkaXNrIGJsb2NrICh4ZnNfZGFkZHJfdCkgaW4gdGhlIEFHICovCiAjZGVmaW5lIFhGU19BR0ZfREFERFIobXApCSgoeGZzX2RhZGRyX3QpKDEgPDwgKG1wKS0+bV9zZWN0YmJfbG9nKSkKICNkZWZpbmUJWEZTX0FHRl9CTE9DSyhtcCkJWEZTX0hEUl9CTE9DSyhtcCwgWEZTX0FHRl9EQUREUihtcCkpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMmNmOTQ0ZS4uYTFjNjVmYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogCiAjZGVmaW5lIFhGU19BQlNESUZGKGEsYikJKCgoYSkgPD0gKGIpKSA/ICgoYikgLSAoYSkpIDogKChhKSAtIChiKSkpCkBAIC01MSwzMCArNTIsNiBAQAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCiAJCSAgICB4ZnNfZXh0bGVuX3QgbGVuKTsKIAotI2lmIGRlZmluZWQoWEZTX0FMTE9DX1RSQUNFKQota3RyYWNlX3QgKnhmc19hbGxvY190cmFjZV9idWY7Ci0KLSNkZWZpbmUJVFJBQ0VfQUxMT0MocyxhKQlcCi0JeGZzX2FsbG9jX3RyYWNlX2FsbG9jKF9fZnVuY19fLCBzLCBhLCBfX0xJTkVfXykKLSNkZWZpbmUJVFJBQ0VfRlJFRShzLGEsYix4LGYpCVwKLQl4ZnNfYWxsb2NfdHJhY2VfZnJlZShfX2Z1bmNfXywgcywgbXAsIGEsIGIsIHgsIGYsIF9fTElORV9fKQotI2RlZmluZQlUUkFDRV9NT0RBR0YocyxhLGYpCVwKLQl4ZnNfYWxsb2NfdHJhY2VfbW9kYWdmKF9fZnVuY19fLCBzLCBtcCwgYSwgZiwgX19MSU5FX18pCi0jZGVmaW5lCVRSQUNFX0JVU1koX19mdW5jX18scyxhZyxhZ2IsbCxzbCx0cCkJXAotCXhmc19hbGxvY190cmFjZV9idXN5KF9fZnVuY19fLCBzLCBtcCwgYWcsIGFnYiwgbCwgc2wsIHRwLCBYRlNfQUxMT0NfS1RSQUNFX0JVU1ksIF9fTElORV9fKQotI2RlZmluZQlUUkFDRV9VTkJVU1koX19mdW5jX18scyxhZyxzbCx0cCkJXAotCXhmc19hbGxvY190cmFjZV9idXN5KF9fZnVuY19fLCBzLCBtcCwgYWcsIC0xLCAtMSwgc2wsIHRwLCBYRlNfQUxMT0NfS1RSQUNFX1VOQlVTWSwgX19MSU5FX18pCi0jZGVmaW5lCVRSQUNFX0JVU1lTRUFSQ0goX19mdW5jX18scyxhZyxhZ2IsbCx0cCkJXAotCXhmc19hbGxvY190cmFjZV9idXN5KF9fZnVuY19fLCBzLCBtcCwgYWcsIGFnYiwgbCwgMCwgdHAsIFhGU19BTExPQ19LVFJBQ0VfQlVTWVNFQVJDSCwgX19MSU5FX18pCi0jZWxzZQotI2RlZmluZQlUUkFDRV9BTExPQyhzLGEpCi0jZGVmaW5lCVRSQUNFX0ZSRUUocyxhLGIseCxmKQotI2RlZmluZQlUUkFDRV9NT0RBR0YocyxhLGYpCi0jZGVmaW5lCVRSQUNFX0JVU1kocyxhLGFnLGFnYixsLHNsLHRwKQotI2RlZmluZQlUUkFDRV9VTkJVU1koZm5hbWUscyxhZyxzbCx0cCkKLSNkZWZpbmUJVFJBQ0VfQlVTWVNFQVJDSChmbmFtZSxzLGFnLGFnYixsLHRwKQotI2VuZGlmCS8qIFhGU19BTExPQ19UUkFDRSAqLwotCiAvKgogICogUHJvdG90eXBlcyBmb3IgcGVyLWFnIGFsbG9jYXRpb24gcm91dGluZXMKICAqLwpAQCAtNDk4LDEyNCArNDc1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoWEZTX0FMTE9DX1RSQUNFKQotLyoKLSAqIEFkZCBhbiBhbGxvY2F0aW9uIHRyYWNlIGVudHJ5IGZvciBhbiBhbGxvYyBjYWxsLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2FsbG9jX3RyYWNlX2FsbG9jKAotCWNvbnN0IGNoYXIJKm5hbWUsCQkvKiBmdW5jdGlvbiB0YWcgc3RyaW5nICovCi0JY2hhcgkJKnN0ciwJCS8qIGFkZGl0aW9uYWwgc3RyaW5nICovCi0JeGZzX2FsbG9jX2FyZ190CSphcmdzLAkJLyogYWxsb2NhdGlvbiBhcmd1bWVudCBzdHJ1Y3R1cmUgKi8KLQlpbnQJCWxpbmUpCQkvKiBzb3VyY2UgbGluZSBudW1iZXIgKi8KLXsKLQlrdHJhY2VfZW50ZXIoeGZzX2FsbG9jX3RyYWNlX2J1ZiwKLQkJKHZvaWQgKikoX19wc2ludF90KShYRlNfQUxMT0NfS1RSQUNFX0FMTE9DIHwgKGxpbmUgPDwgMTYpKSwKLQkJKHZvaWQgKiluYW1lLAotCQkodm9pZCAqKXN0ciwKLQkJKHZvaWQgKilhcmdzLT5tcCwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYXJncy0+YWdubywKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYXJncy0+YWdibm8sCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFyZ3MtPm1pbmxlbiwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYXJncy0+bWF4bGVuLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdClhcmdzLT5tb2QsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFyZ3MtPnByb2QsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFyZ3MtPm1pbmxlZnQsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFyZ3MtPnRvdGFsLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdClhcmdzLT5hbGlnbm1lbnQsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFyZ3MtPmxlbiwKLQkJKHZvaWQgKikoKCgoX19wc2ludF90KWFyZ3MtPnR5cGUpIDw8IDE2KSB8Ci0JCQkgKF9fcHNpbnRfdClhcmdzLT5vdHlwZSksCi0JCSh2b2lkICopKF9fcHNpbnRfdCkoKGFyZ3MtPndhc2RlbCA8PCAzKSB8Ci0JCQkJICAgIChhcmdzLT53YXNmcm9tZmwgPDwgMikgfAotCQkJCSAgICAoYXJncy0+aXNmbCA8PCAxKSB8Ci0JCQkJICAgIChhcmdzLT51c2VyZGF0YSA8PCAwKSkpOwotfQotCi0vKgotICogQWRkIGFuIGFsbG9jYXRpb24gdHJhY2UgZW50cnkgZm9yIGEgZnJlZSBjYWxsLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2FsbG9jX3RyYWNlX2ZyZWUoCi0JY29uc3QgY2hhcgkqbmFtZSwJCS8qIGZ1bmN0aW9uIHRhZyBzdHJpbmcgKi8KLQljaGFyCQkqc3RyLAkJLyogYWRkaXRpb25hbCBzdHJpbmcgKi8KLQl4ZnNfbW91bnRfdAkqbXAsCQkvKiBmaWxlIHN5c3RlbSBtb3VudCBwb2ludCAqLwotCXhmc19hZ251bWJlcl90CWFnbm8sCQkvKiBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwotCXhmc19hZ2Jsb2NrX3QJYWdibm8sCQkvKiBhLmcuIHJlbGF0aXZlIGJsb2NrIG51bWJlciAqLwotCXhmc19leHRsZW5fdAlsZW4sCQkvKiBsZW5ndGggb2YgZXh0ZW50ICovCi0JaW50CQlpc2ZsLAkJLyogc2V0IGlmIGlzIGZyZWVsaXN0IGFsbG9jYXRpb24vZnJlZSAqLwotCWludAkJbGluZSkJCS8qIHNvdXJjZSBsaW5lIG51bWJlciAqLwotewotCWt0cmFjZV9lbnRlcih4ZnNfYWxsb2NfdHJhY2VfYnVmLAotCQkodm9pZCAqKShfX3BzaW50X3QpKFhGU19BTExPQ19LVFJBQ0VfRlJFRSB8IChsaW5lIDw8IDE2KSksCi0JCSh2b2lkICopbmFtZSwKLQkJKHZvaWQgKilzdHIsCi0JCSh2b2lkICopbXAsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFnbm8sCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFnYm5vLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdClsZW4sCi0JCSh2b2lkICopKF9fcHNpbnRfdClpc2ZsLAotCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLX0KLQotLyoKLSAqIEFkZCBhbiBhbGxvY2F0aW9uIHRyYWNlIGVudHJ5IGZvciBtb2RpZnlpbmcgYW4gYWdmLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2FsbG9jX3RyYWNlX21vZGFnZigKLQljb25zdCBjaGFyCSpuYW1lLAkJLyogZnVuY3Rpb24gdGFnIHN0cmluZyAqLwotCWNoYXIJCSpzdHIsCQkvKiBhZGRpdGlvbmFsIHN0cmluZyAqLwotCXhmc19tb3VudF90CSptcCwJCS8qIGZpbGUgc3lzdGVtIG1vdW50IHBvaW50ICovCi0JeGZzX2FnZl90CSphZ2YsCQkvKiBuZXcgYWdmIHZhbHVlICovCi0JaW50CQlmbGFncywJCS8qIGxvZ2dpbmcgZmxhZ3MgZm9yIGFnZiAqLwotCWludAkJbGluZSkJCS8qIHNvdXJjZSBsaW5lIG51bWJlciAqLwotewotCWt0cmFjZV9lbnRlcih4ZnNfYWxsb2NfdHJhY2VfYnVmLAotCQkodm9pZCAqKShfX3BzaW50X3QpKFhGU19BTExPQ19LVFJBQ0VfTU9EQUdGIHwgKGxpbmUgPDwgMTYpKSwKLQkJKHZvaWQgKiluYW1lLAotCQkodm9pZCAqKXN0ciwKLQkJKHZvaWQgKiltcCwKLQkJKHZvaWQgKikoX19wc2ludF90KWZsYWdzLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCliZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KGFnZi0+YWdmX2xlbmd0aCksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KGFnZi0+YWdmX3Jvb3RzW1hGU19CVE5VTV9CTk9dKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYWdmLT5hZ2Zfcm9vdHNbWEZTX0JUTlVNX0NOVF0pLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCliZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0JOT10pLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCliZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVF0pLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCliZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGZpcnN0KSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxsYXN0KSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZyZWVibGtzKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYWdmLT5hZ2ZfbG9uZ2VzdCkpOwotfQotCi1TVEFUSUMgdm9pZAoteGZzX2FsbG9jX3RyYWNlX2J1c3koCi0JY29uc3QgY2hhcgkqbmFtZSwJCS8qIGZ1bmN0aW9uIHRhZyBzdHJpbmcgKi8KLQljaGFyCQkqc3RyLAkJLyogYWRkaXRpb25hbCBzdHJpbmcgKi8KLQl4ZnNfbW91bnRfdAkqbXAsCQkvKiBmaWxlIHN5c3RlbSBtb3VudCBwb2ludCAqLwotCXhmc19hZ251bWJlcl90CWFnbm8sCQkvKiBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwotCXhmc19hZ2Jsb2NrX3QJYWdibm8sCQkvKiBhLmcuIHJlbGF0aXZlIGJsb2NrIG51bWJlciAqLwotCXhmc19leHRsZW5fdAlsZW4sCQkvKiBsZW5ndGggb2YgZXh0ZW50ICovCi0JaW50CQlzbG90LAkJLyogcGVyYWcgQnVzeSBzbG90ICovCi0JeGZzX3RyYW5zX3QJKnRwLAotCWludAkJdHJ0eXBlLAkJLyogdHlwZTogYWRkLCBkZWxldGUsIHNlYXJjaCAqLwotCWludAkJbGluZSkJCS8qIHNvdXJjZSBsaW5lIG51bWJlciAqLwotewotCWt0cmFjZV9lbnRlcih4ZnNfYWxsb2NfdHJhY2VfYnVmLAotCQkodm9pZCAqKShfX3BzaW50X3QpKHRydHlwZSB8IChsaW5lIDw8IDE2KSksCi0JCSh2b2lkICopbmFtZSwKLQkJKHZvaWQgKilzdHIsCi0JCSh2b2lkICopbXAsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFnbm8sCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KWFnYm5vLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdClsZW4sCi0JCSh2b2lkICopKF9fcHNpbnRfdClzbG90LAotCQkodm9pZCAqKXRwLAotCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLX0KLSNlbmRpZgkvKiBYRlNfQUxMT0NfVFJBQ0UgKi8KLQogLyoKICAqIEFsbG9jYXRpb24gZ3JvdXAgbGV2ZWwgZnVuY3Rpb25zLgogICovCkBAIC02NjUsOSArNTI0LDYgQEAKIAkgKi8KIAlpZiAoYXJncy0+YWdibm8gIT0gTlVMTEFHQkxPQ0spIHsKIAkJeGZzX2FnZl90CSphZ2Y7CS8qIGFsbG9jYXRpb24gZ3JvdXAgZnJlZWxpc3QgaGVhZGVyICovCi0jaWZkZWYgWEZTX0FMTE9DX1RSQUNFCi0JCXhmc19tb3VudF90CSptcCA9IGFyZ3MtPm1wOwotI2VuZGlmCiAJCWxvbmcJCXNsZW4gPSAobG9uZylhcmdzLT5sZW47CiAKIAkJQVNTRVJUKGFyZ3MtPmxlbiA+PSBhcmdzLT5taW5sZW4gJiYgYXJncy0+bGVuIDw9IGFyZ3MtPm1heGxlbik7CkBAIC02ODIsNyArNTM4LDYgQEAKIAkJCWFyZ3MtPnBhZy0+cGFnZl9mcmVlYmxrcyAtPSBhcmdzLT5sZW47CiAJCQlBU1NFUlQoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZnJlZWJsa3MpIDw9CiAJCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGVuZ3RoKSk7Ci0JCQlUUkFDRV9NT0RBR0YoTlVMTCwgYWdmLCBYRlNfQUdGX0ZSRUVCTEtTKTsKIAkJCXhmc19hbGxvY19sb2dfYWdmKGFyZ3MtPnRwLCBhcmdzLT5hZ2JwLAogCQkJCQkJWEZTX0FHRl9GUkVFQkxLUyk7CiAJCQkvKiBzZWFyY2ggdGhlIGJ1c3lsaXN0IGZvciB0aGVzZSBibG9ja3MgKi8KQEAgLTc5MiwxMyArNjQ3LDE0IEBACiAJfQogCXhmc19idHJlZV9kZWxfY3Vyc29yKGJub19jdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7Ci0JVFJBQ0VfQUxMT0MoIm5vcm1hbCIsIGFyZ3MpOworCisJdHJhY2VfeGZzX2FsbG9jX2V4YWN0X2RvbmUoYXJncyk7CiAJYXJncy0+d2FzZnJvbWZsID0gMDsKIAlyZXR1cm4gMDsKIAogZXJyb3IwOgogCXhmc19idHJlZV9kZWxfY3Vyc29yKGJub19jdXIsIFhGU19CVFJFRV9FUlJPUik7Ci0JVFJBQ0VfQUxMT0MoImVycm9yIiwgYXJncyk7CisJdHJhY2VfeGZzX2FsbG9jX2V4YWN0X2Vycm9yKGFyZ3MpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtOTU4LDcgKzgxNCw3IEBACiAJCWFyZ3MtPmxlbiA9IGJsZW47CiAJCWlmICgheGZzX2FsbG9jX2ZpeF9taW5sZWZ0KGFyZ3MpKSB7CiAJCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCQlUUkFDRV9BTExPQygibm9taW5sZWZ0IiwgYXJncyk7CisJCQl0cmFjZV94ZnNfYWxsb2NfbmVhcl9ub21pbmxlZnQoYXJncyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlibGVuID0gYXJncy0+bGVuOwpAQCAtOTgxLDcgKzgzNyw4IEBACiAJCQlnb3RvIGVycm9yMDsKIAkJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY250X2N1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihibm9fY3VyX2x0LCBYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCVRSQUNFX0FMTE9DKCJmaXJzdCIsIGFyZ3MpOworCisJCXRyYWNlX3hmc19hbGxvY19uZWFyX2ZpcnN0KGFyZ3MpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyoKQEAgLTEyNzIsNyArMTEyOSw3IEBACiAJICogSWYgd2UgY291bGRuJ3QgZ2V0IGFueXRoaW5nLCBnaXZlIHVwLgogCSAqLwogCWlmIChibm9fY3VyX2x0ID09IE5VTEwgJiYgYm5vX2N1cl9ndCA9PSBOVUxMKSB7Ci0JCVRSQUNFX0FMTE9DKCJuZWl0aGVyIiwgYXJncyk7CisJCXRyYWNlX3hmc19hbGxvY19zaXplX25laXRoZXIoYXJncyk7CiAJCWFyZ3MtPmFnYm5vID0gTlVMTEFHQkxPQ0s7CiAJCXJldHVybiAwOwogCX0KQEAgLTEyOTksNyArMTE1Niw3IEBACiAJYXJncy0+bGVuID0gWEZTX0VYVExFTl9NSU4obHRsZW5hLCBhcmdzLT5tYXhsZW4pOwogCXhmc19hbGxvY19maXhfbGVuKGFyZ3MpOwogCWlmICgheGZzX2FsbG9jX2ZpeF9taW5sZWZ0KGFyZ3MpKSB7Ci0JCVRSQUNFX0FMTE9DKCJub21pbmxlZnQiLCBhcmdzKTsKKwkJdHJhY2VfeGZzX2FsbG9jX25lYXJfbm9taW5sZWZ0KGFyZ3MpOwogCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihibm9fY3VyX2x0LCBYRlNfQlRSRUVfTk9FUlJPUik7CiAJCXhmc19idHJlZV9kZWxfY3Vyc29yKGNudF9jdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAkJcmV0dXJuIDA7CkBAIC0xMzE0LDEzICsxMTcxLDE4IEBACiAJaWYgKChlcnJvciA9IHhmc19hbGxvY19maXh1cF90cmVlcyhjbnRfY3VyLCBibm9fY3VyX2x0LCBsdGJubywgbHRsZW4sCiAJCQlsdG5ldywgcmxlbiwgWEZTQV9GSVhVUF9CTk9fT0spKSkKIAkJZ290byBlcnJvcjA7Ci0JVFJBQ0VfQUxMT0MoaiA/ICJndCIgOiAibHQiLCBhcmdzKTsKKworCWlmIChqKQorCQl0cmFjZV94ZnNfYWxsb2NfbmVhcl9ncmVhdGVyKGFyZ3MpOworCWVsc2UKKwkJdHJhY2VfeGZzX2FsbG9jX25lYXJfbGVzc2VyKGFyZ3MpOworCiAJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY250X2N1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCXhmc19idHJlZV9kZWxfY3Vyc29yKGJub19jdXJfbHQsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAlyZXR1cm4gMDsKIAogIGVycm9yMDoKLQlUUkFDRV9BTExPQygiZXJyb3IiLCBhcmdzKTsKKwl0cmFjZV94ZnNfYWxsb2NfbmVhcl9lcnJvcihhcmdzKTsKIAlpZiAoY250X2N1ciAhPSBOVUxMKQogCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfRVJST1IpOwogCWlmIChibm9fY3VyX2x0ICE9IE5VTEwpCkBAIC0xMzcxLDcgKzEyMzMsNyBAQAogCQkJZ290byBlcnJvcjA7CiAJCWlmIChpID09IDAgfHwgZmxlbiA9PSAwKSB7CiAJCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7Ci0JCQlUUkFDRV9BTExPQygibm9lbnRyeSIsIGFyZ3MpOworCQkJdHJhY2VfeGZzX2FsbG9jX3NpemVfbm9lbnRyeShhcmdzKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCUFTU0VSVChpID09IDEpOwpAQCAtMTQ0OCw3ICsxMzEwLDcgQEAKIAl4ZnNfYWxsb2NfZml4X2xlbihhcmdzKTsKIAlpZiAocmxlbiA8IGFyZ3MtPm1pbmxlbiB8fCAheGZzX2FsbG9jX2ZpeF9taW5sZWZ0KGFyZ3MpKSB7CiAJCXhmc19idHJlZV9kZWxfY3Vyc29yKGNudF9jdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKLQkJVFJBQ0VfQUxMT0MoIm5vbWlubGVmdCIsIGFyZ3MpOworCQl0cmFjZV94ZnNfYWxsb2Nfc2l6ZV9ub21pbmxlZnQoYXJncyk7CiAJCWFyZ3MtPmFnYm5vID0gTlVMTEFHQkxPQ0s7CiAJCXJldHVybiAwOwogCX0KQEAgLTE0NzEsMTEgKzEzMzMsMTEgQEAKIAkJYXJncy0+YWdibm8gKyBhcmdzLT5sZW4gPD0KIAkJCWJlMzJfdG9fY3B1KFhGU19CVUZfVE9fQUdGKGFyZ3MtPmFnYnApLT5hZ2ZfbGVuZ3RoKSwKIAkJZXJyb3IwKTsKLQlUUkFDRV9BTExPQygibm9ybWFsIiwgYXJncyk7CisJdHJhY2VfeGZzX2FsbG9jX3NpemVfZG9uZShhcmdzKTsKIAlyZXR1cm4gMDsKIAogZXJyb3IwOgotCVRSQUNFX0FMTE9DKCJlcnJvciIsIGFyZ3MpOworCXRyYWNlX3hmc19hbGxvY19zaXplX2Vycm9yKGFyZ3MpOwogCWlmIChjbnRfY3VyKQogCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcihjbnRfY3VyLCBYRlNfQlRSRUVfRVJST1IpOwogCWlmIChibm9fY3VyKQpAQCAtMTUzNCw3ICsxMzk2LDcgQEAKIAkJCQliZTMyX3RvX2NwdShYRlNfQlVGX1RPX0FHRihhcmdzLT5hZ2JwKS0+YWdmX2xlbmd0aCksCiAJCQkJZXJyb3IwKTsKIAkJCWFyZ3MtPndhc2Zyb21mbCA9IDE7Ci0JCQlUUkFDRV9BTExPQygiZnJlZWxpc3QiLCBhcmdzKTsKKwkJCXRyYWNlX3hmc19hbGxvY19zbWFsbF9mcmVlbGlzdChhcmdzKTsKIAkJCSpzdGF0ID0gMDsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xNTU2LDE3ICsxNDE4LDE3IEBACiAJICovCiAJaWYgKGZsZW4gPCBhcmdzLT5taW5sZW4pIHsKIAkJYXJncy0+YWdibm8gPSBOVUxMQUdCTE9DSzsKLQkJVFJBQ0VfQUxMT0MoIm5vdGVub3VnaCIsIGFyZ3MpOworCQl0cmFjZV94ZnNfYWxsb2Nfc21hbGxfbm90ZW5vdWdoKGFyZ3MpOwogCQlmbGVuID0gMDsKIAl9CiAJKmZibm9wID0gZmJubzsKIAkqZmxlbnAgPSBmbGVuOwogCSpzdGF0ID0gMTsKLQlUUkFDRV9BTExPQygibm9ybWFsIiwgYXJncyk7CisJdHJhY2VfeGZzX2FsbG9jX3NtYWxsX2RvbmUoYXJncyk7CiAJcmV0dXJuIDA7CiAKIGVycm9yMDoKLQlUUkFDRV9BTExPQygiZXJyb3IiLCBhcmdzKTsKKwl0cmFjZV94ZnNfYWxsb2Nfc21hbGxfZXJyb3IoYXJncyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xODA5LDE3ICsxNjcxLDE0IEBACiAJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcykgPD0KIAkJCWJlMzJfdG9fY3B1KGFnZi0+YWdmX2xlbmd0aCksCiAJCQllcnJvcjApOwotCQlUUkFDRV9NT0RBR0YoTlVMTCwgYWdmLCBYRlNfQUdGX0ZSRUVCTEtTKTsKIAkJeGZzX2FsbG9jX2xvZ19hZ2YodHAsIGFnYnAsIFhGU19BR0ZfRlJFRUJMS1MpOwogCQlpZiAoIWlzZmwpCiAJCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfRkRCTE9DS1MsIChsb25nKWxlbik7CiAJCVhGU19TVEFUU19JTkMoeHNfZnJlZXgpOwogCQlYRlNfU1RBVFNfQUREKHhzX2ZyZWViLCBsZW4pOwogCX0KLQlUUkFDRV9GUkVFKGhhdmVsZWZ0ID8KLQkJCShoYXZlcmlnaHQgPyAiYm90aCIgOiAibGVmdCIpIDoKLQkJCShoYXZlcmlnaHQgPyAicmlnaHQiIDogIm5vbmUiKSwKLQkJYWdubywgYm5vLCBsZW4sIGlzZmwpOworCisJdHJhY2VfeGZzX2ZyZWVfZXh0ZW50KG1wLCBhZ25vLCBibm8sIGxlbiwgaXNmbCwgaGF2ZWxlZnQsIGhhdmVyaWdodCk7CiAKIAkvKgogCSAqIFNpbmNlIGJsb2NrcyBtb3ZlIHRvIHRoZSBmcmVlIGxpc3Qgd2l0aG91dCB0aGUgY29vcmRpbmF0aW9uCkBAIC0xODM2LDcgKzE2OTUsNyBAQAogCXJldHVybiAwOwogCiAgZXJyb3IwOgotCVRSQUNFX0ZSRUUoImVycm9yIiwgYWdubywgYm5vLCBsZW4sIGlzZmwpOworCXRyYWNlX3hmc19mcmVlX2V4dGVudChtcCwgYWdubywgYm5vLCBsZW4sIGlzZmwsIC0xLCAtMSk7CiAJaWYgKGJub19jdXIpCiAJCXhmc19idHJlZV9kZWxfY3Vyc29yKGJub19jdXIsIFhGU19CVFJFRV9FUlJPUik7CiAJaWYgKGNudF9jdXIpCkBAIC0yMTIyLDcgKzE5ODEsNiBAQAogCQlsb2dmbGFncyB8PSBYRlNfQUdGX0JUUkVFQkxLUzsKIAl9CiAKLQlUUkFDRV9NT0RBR0YoTlVMTCwgYWdmLCBsb2dmbGFncyk7CiAJeGZzX2FsbG9jX2xvZ19hZ2YodHAsIGFnYnAsIGxvZ2ZsYWdzKTsKIAkqYm5vcCA9IGJubzsKIApAQCAtMjE2NSw2ICsyMDIzLDggQEAKIAkJc2l6ZW9mKHhmc19hZ2ZfdCkKIAl9OwogCisJdHJhY2VfeGZzX2FnZih0cC0+dF9tb3VudHAsIFhGU19CVUZfVE9fQUdGKGJwKSwgZmllbGRzLCBfUkVUX0lQXyk7CisKIAl4ZnNfYnRyZWVfb2Zmc2V0cyhmaWVsZHMsIG9mZnNldHMsIFhGU19BR0ZfTlVNX0JJVFMsICZmaXJzdCwgJmxhc3QpOwogCXhmc190cmFuc19sb2dfYnVmKHRwLCBicCwgKHVpbnQpZmlyc3QsICh1aW50KWxhc3QpOwogfQpAQCAtMjIzMCwxMyArMjA5MCwxMSBAQAogCQlsb2dmbGFncyB8PSBYRlNfQUdGX0JUUkVFQkxLUzsKIAl9CiAKLQlUUkFDRV9NT0RBR0YoTlVMTCwgYWdmLCBsb2dmbGFncyk7CiAJeGZzX2FsbG9jX2xvZ19hZ2YodHAsIGFnYnAsIGxvZ2ZsYWdzKTsKIAogCUFTU0VSVChiZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGNvdW50KSA8PSBYRlNfQUdGTF9TSVpFKG1wKSk7CiAJYmxvY2twID0gJmFnZmwtPmFnZmxfYm5vW2JlMzJfdG9fY3B1KGFnZi0+YWdmX2ZsbGFzdCldOwogCSpibG9ja3AgPSBjcHVfdG9fYmUzMihibm8pOwotCVRSQUNFX01PREFHRihOVUxMLCBhZ2YsIGxvZ2ZsYWdzKTsKIAl4ZnNfYWxsb2NfbG9nX2FnZih0cCwgYWdicCwgbG9nZmxhZ3MpOwogCXhmc190cmFuc19sb2dfYnVmKHRwLCBhZ2ZsYnAsCiAJCShpbnQpKCh4ZnNfY2FkZHJfdClibG9ja3AgLSAoeGZzX2NhZGRyX3QpYWdmbCksCkBAIC0yMzk5LDcgKzIyNTcsNyBAQAogCSAgICBhcmdzLT5taW5sZW4gPiBhcmdzLT5tYXhsZW4gfHwgYXJncy0+bWlubGVuID4gYWdzaXplIHx8CiAJICAgIGFyZ3MtPm1vZCA+PSBhcmdzLT5wcm9kKSB7CiAJCWFyZ3MtPmZzYm5vID0gTlVMTEZTQkxPQ0s7Ci0JCVRSQUNFX0FMTE9DKCJiYWRhcmdzIiwgYXJncyk7CisJCXRyYWNlX3hmc19hbGxvY192ZXh0ZW50X2JhZGFyZ3MoYXJncyk7CiAJCXJldHVybiAwOwogCX0KIAltaW5sZWZ0ID0gYXJncy0+bWlubGVmdDsKQEAgLTI0MTgsMTIgKzIyNzYsMTIgQEAKIAkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIDApOwogCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKIAkJaWYgKGVycm9yKSB7Ci0JCQlUUkFDRV9BTExPQygibm9maXgiLCBhcmdzKTsKKwkJCXRyYWNlX3hmc19hbGxvY192ZXh0ZW50X25vZml4KGFyZ3MpOwogCQkJZ290byBlcnJvcjA7CiAJCX0KIAkJaWYgKCFhcmdzLT5hZ2JwKSB7CiAJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQkJVFJBQ0VfQUxMT0MoIm5vYWdicCIsIGFyZ3MpOworCQkJdHJhY2VfeGZzX2FsbG9jX3ZleHRlbnRfbm9hZ2JwKGFyZ3MpOwogCQkJYnJlYWs7CiAJCX0KIAkJYXJncy0+YWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKG1wLCBhcmdzLT5mc2Jubyk7CkBAIC0yNDg4LDcgKzIzNDYsNyBAQAogCQkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIGZsYWdzKTsKIAkJCWFyZ3MtPm1pbmxlZnQgPSBtaW5sZWZ0OwogCQkJaWYgKGVycm9yKSB7Ci0JCQkJVFJBQ0VfQUxMT0MoIm5vZml4IiwgYXJncyk7CisJCQkJdHJhY2VfeGZzX2FsbG9jX3ZleHRlbnRfbm9maXgoYXJncyk7CiAJCQkJZ290byBlcnJvcjA7CiAJCQl9CiAJCQkvKgpAQCAtMjQ5OSw3ICsyMzU3LDkgQEAKIAkJCQkJZ290byBlcnJvcjA7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlUUkFDRV9BTExPQygibG9vcGZhaWxlZCIsIGFyZ3MpOworCisJCQl0cmFjZV94ZnNfYWxsb2NfdmV4dGVudF9sb29wZmFpbGVkKGFyZ3MpOworCiAJCQkvKgogCQkJICogRGlkbid0IHdvcmssIGZpZ3VyZSBvdXQgdGhlIG5leHQgaXRlcmF0aW9uLgogCQkJICovCkBAIC0yNTI2LDcgKzIzODYsNyBAQAogCQkJaWYgKGFyZ3MtPmFnbm8gPT0gc2Fnbm8pIHsKIAkJCQlpZiAobm9fbWluID09IDEpIHsKIAkJCQkJYXJncy0+YWdibm8gPSBOVUxMQUdCTE9DSzsKLQkJCQkJVFJBQ0VfQUxMT0MoImFsbGZhaWxlZCIsIGFyZ3MpOworCQkJCQl0cmFjZV94ZnNfYWxsb2NfdmV4dGVudF9hbGxmYWlsZWQoYXJncyk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlpZiAoZmxhZ3MgPT0gMCkgewpAQCAtMjY0MiwxNiArMjUwMiwxNiBAQAogCQl9CiAJfQogCisJdHJhY2VfeGZzX2FsbG9jX2J1c3kobXAsIGFnbm8sIGJubywgbGVuLCBuKTsKKwogCWlmIChuIDwgWEZTX1BBR0JfTlVNX1NMT1RTKSB7CiAJCWJzeSA9ICZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3Rbbl07CiAJCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQrKzsKLQkJVFJBQ0VfQlVTWSgieGZzX2FsbG9jX21hcmtfYnVzeSIsICJnb3QiLCBhZ25vLCBibm8sIGxlbiwgbiwgdHApOwogCQlic3ktPmJ1c3lfc3RhcnQgPSBibm87CiAJCWJzeS0+YnVzeV9sZW5ndGggPSBsZW47CiAJCWJzeS0+YnVzeV90cCA9IHRwOwogCQl4ZnNfdHJhbnNfYWRkX2J1c3kodHAsIGFnbm8sIG4pOwogCX0gZWxzZSB7Ci0JCVRSQUNFX0JVU1koInhmc19hbGxvY19tYXJrX2J1c3kiLCAiRlVMTCIsIGFnbm8sIGJubywgbGVuLCAtMSwgdHApOwogCQkvKgogCQkgKiBUaGUgYnVzeSBsaXN0IGlzIGZ1bGwhICBTaW5jZSBpdCBpcyBub3cgbm90IHBvc3NpYmxlIHRvCiAJCSAqIHRyYWNrIHRoZSBmcmVlIGJsb2NrLCBtYWtlIHRoaXMgYSBzeW5jaHJvbm91cyB0cmFuc2FjdGlvbgpAQCAtMjY3OCwxMiArMjUzOCwxMiBAQAogCWxpc3QgPSBtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3Q7CiAKIAlBU1NFUlQoaWR4IDwgWEZTX1BBR0JfTlVNX1NMT1RTKTsKKworCXRyYWNlX3hmc19hbGxvY191bmJ1c3kobXAsIGFnbm8sIGlkeCwgbGlzdFtpZHhdLmJ1c3lfdHAgPT0gdHApOworCiAJaWYgKGxpc3RbaWR4XS5idXN5X3RwID09IHRwKSB7Ci0JCVRSQUNFX1VOQlVTWSgieGZzX2FsbG9jX2NsZWFyX2J1c3kiLCAiZm91bmQiLCBhZ25vLCBpZHgsIHRwKTsKIAkJbGlzdFtpZHhdLmJ1c3lfdHAgPSBOVUxMOwogCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2NvdW50LS07Ci0JfSBlbHNlIHsKLQkJVFJBQ0VfVU5CVVNZKCJ4ZnNfYWxsb2NfY2xlYXJfYnVzeSIsICJtaXNzaW5nIiwgYWdubywgaWR4LCB0cCk7CiAJfQogCiAJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CkBAIC0yNzI0LDI0ICsyNTg0LDIyIEBACiAJCQlpZiAoKGJubyA+IGJlbmQpIHx8ICh1ZW5kIDwgYnN5LT5idXN5X3N0YXJ0KSkgewogCQkJCWNudC0tOwogCQkJfSBlbHNlIHsKLQkJCQlUUkFDRV9CVVNZU0VBUkNIKCJ4ZnNfYWxsb2Nfc2VhcmNoX2J1c3kiLAotCQkJCQkgImZvdW5kMSIsIGFnbm8sIGJubywgbGVuLCB0cCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CiAKKwl0cmFjZV94ZnNfYWxsb2NfYnVzeXNlYXJjaChtcCwgYWdubywgYm5vLCBsZW4sICEhY250KTsKKwogCS8qCiAJICogSWYgYSBibG9jayB3YXMgZm91bmQsIGZvcmNlIHRoZSBsb2cgdGhyb3VnaCB0aGUgTFNOIG9mIHRoZQogCSAqIHRyYW5zYWN0aW9uIHRoYXQgZnJlZWQgdGhlIGJsb2NrCiAJICovCiAJaWYgKGNudCkgewotCQlUUkFDRV9CVVNZU0VBUkNIKCJ4ZnNfYWxsb2Nfc2VhcmNoX2J1c3kiLCAiZm91bmQiLCBhZ25vLCBibm8sIGxlbiwgdHApOwogCQlsc24gPSBic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbjsKIAkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CiAJCXhmc19sb2dfZm9yY2UobXAsIGxzbiwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMpOwogCX0gZWxzZSB7Ci0JCVRSQUNFX0JVU1lTRUFSQ0goInhmc19hbGxvY19zZWFyY2hfYnVzeSIsICJub3QtZm91bmQiLCBhZ25vLCBibm8sIGxlbiwgdHApOwogCQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmggYi9mcy94ZnMveGZzX2FsbG9jLmgKaW5kZXggZTcwNGNhZWUuLjU5OWJmZmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuaAorKysgYi9mcy94ZnMveGZzX2FsbG9jLmgKQEAgLTM3LDYgKzM3LDE1IEBACiAJWEZTX0FMTE9DVFlQRV9USElTX0JOTwkJLyogYXQgZXhhY3RseSB0aGlzIGJsb2NrICovCiB9IHhmc19hbGxvY3R5cGVfdDsKIAorI2RlZmluZSBYRlNfQUxMT0NfVFlQRVMgXAorCXsgWEZTX0FMTE9DVFlQRV9BTllfQUcsCQkiQU5ZX0FHIiB9LCBcCisJeyBYRlNfQUxMT0NUWVBFX0ZJUlNUX0FHLAkiRklSU1RfQUciIH0sIFwKKwl7IFhGU19BTExPQ1RZUEVfU1RBUlRfQUcsCSJTVEFSVF9BRyIgfSwgXAorCXsgWEZTX0FMTE9DVFlQRV9USElTX0FHLAkiVEhJU19BRyIgfSwgXAorCXsgWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk8sCSJTVEFSVF9CTk8iIH0sIFwKKwl7IFhGU19BTExPQ1RZUEVfTkVBUl9CTk8sCSJORUFSX0JOTyIgfSwgXAorCXsgWEZTX0FMTE9DVFlQRV9USElTX0JOTywJIlRISVNfQk5PIiB9CisKIC8qCiAgKiBGbGFncyBmb3IgeGZzX2FsbG9jX2ZpeF9mcmVlbGlzdC4KICAqLwpAQCAtMTA5LDI0ICsxMTgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaWYgZGVmaW5lZChYRlNfQUxMT0NfVFJBQ0UpCi0vKgotICogQWxsb2NhdGlvbiB0cmFjaW5nIGJ1ZmZlciBzaXplLgotICovCi0jZGVmaW5lCVhGU19BTExPQ19UUkFDRV9TSVpFCTQwOTYKLWV4dGVybiBrdHJhY2VfdCAqeGZzX2FsbG9jX3RyYWNlX2J1ZjsKLQotLyoKLSAqIFR5cGVzIGZvciBhbGxvYyB0cmFjaW5nLgotICovCi0jZGVmaW5lCVhGU19BTExPQ19LVFJBQ0VfQUxMT0MJMQotI2RlZmluZQlYRlNfQUxMT0NfS1RSQUNFX0ZSRUUJMgotI2RlZmluZQlYRlNfQUxMT0NfS1RSQUNFX01PREFHRgkzCi0jZGVmaW5lCVhGU19BTExPQ19LVFJBQ0VfQlVTWQk0Ci0jZGVmaW5lCVhGU19BTExPQ19LVFJBQ0VfVU5CVVNZCTUKLSNkZWZpbmUJWEZTX0FMTE9DX0tUUkFDRV9CVVNZU0VBUkNICTYKLSNlbmRpZgotCiB2b2lkCiB4ZnNfYWxsb2NfbWFya19idXN5KHhmc190cmFuc190ICp0cCwKIAkJeGZzX2FnbnVtYmVyX3QgYWdubywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYwppbmRleCBjMTBjM2EyLi5hZGJkOTE0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAieGZzX2lhbGxvYy5oIgogI2luY2x1ZGUgInhmc19hbGxvYy5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAKIFNUQVRJQyBzdHJ1Y3QgeGZzX2J0cmVlX2N1ciAqCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuYyBiL2ZzL3hmcy94ZnNfYXR0ci5jCmluZGV4IDhmZTZmNmI3Li5lOTUzYjZjZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyLmMKKysrIGIvZnMveGZzL3hmc19hdHRyLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnNfc3BhY2UuaCIKICNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIHhmc19hdHRyLmMKQEAgLTg5LDEwICs5MCw2IEBACiAKICNkZWZpbmUgQVRUUl9STVRWQUxVRV9NQVBTSVpFCTEJLyogIyBvZiBtYXAgZW50cmllcyBhdCBvbmNlICovCiAKLSNpZiBkZWZpbmVkKFhGU19BVFRSX1RSQUNFKQota3RyYWNlX3QgKnhmc19hdHRyX3RyYWNlX2J1ZjsKLSNlbmRpZgotCiBTVEFUSUMgaW50CiB4ZnNfYXR0cl9uYW1lX3RvX3huYW1lKAogCXN0cnVjdCB4ZnNfbmFtZQkqeG5hbWUsCkBAIC02NDAsNyArNjM3LDYgQEAKIAkJcmV0dXJuIEVJTzsKIAogCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JeGZzX2F0dHJfdHJhY2VfbF9jKCJzeXNjYWxsIHN0YXJ0IiwgY29udGV4dCk7CiAKIAkvKgogCSAqIERlY2lkZSBvbiB3aGF0IHdvcmsgcm91dGluZXMgdG8gY2FsbCBiYXNlZCBvbiB0aGUgaW5vZGUgc2l6ZS4KQEAgLTY1Niw3ICs2NTIsNiBAQAogCX0KIAogCXhmc19pdW5sb2NrKGRwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQl4ZnNfYXR0cl90cmFjZV9sX2MoInN5c2NhbGwgZW5kIiwgY29udGV4dCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC03MDIsNyArNjk3LDcgQEAKIAkJCWNvbnRleHQtPmNvdW50ICogc2l6ZW9mKGFsaXN0LT5hbF9vZmZzZXRbMF0pOwogCWNvbnRleHQtPmZpcnN0dSAtPSBBVFRSX0VOVFNJWkUobmFtZWxlbik7CiAJaWYgKGNvbnRleHQtPmZpcnN0dSA8IGFycmF5dG9wKSB7Ci0JCXhmc19hdHRyX3RyYWNlX2xfYygiYnVmZmVyIGZ1bGwiLCBjb250ZXh0KTsKKwkJdHJhY2VfeGZzX2F0dHJfbGlzdF9mdWxsKGNvbnRleHQpOwogCQlhbGlzdC0+YWxfbW9yZSA9IDE7CiAJCWNvbnRleHQtPnNlZW5fZW5vdWdoID0gMTsKIAkJcmV0dXJuIDE7CkBAIC03MTQsNyArNzA5LDcgQEAKIAlhZXAtPmFfbmFtZVtuYW1lbGVuXSA9IDA7CiAJYWxpc3QtPmFsX29mZnNldFtjb250ZXh0LT5jb3VudCsrXSA9IGNvbnRleHQtPmZpcnN0dTsKIAlhbGlzdC0+YWxfY291bnQgPSBjb250ZXh0LT5jb3VudDsKLQl4ZnNfYXR0cl90cmFjZV9sX2MoImFkZCIsIGNvbnRleHQpOworCXRyYWNlX3hmc19hdHRyX2xpc3RfYWRkKGNvbnRleHQpOwogCXJldHVybiAwOwogfQogCkBAIC0xODUzLDcgKzE4NDgsNyBAQAogCQkJbm9kZSA9IGJwLT5kYXRhOwogCQkJc3dpdGNoIChiZTE2X3RvX2NwdShub2RlLT5oZHIuaW5mby5tYWdpYykpIHsKIAkJCWNhc2UgWEZTX0RBX05PREVfTUFHSUM6Ci0JCQkJeGZzX2F0dHJfdHJhY2VfbF9jbigid3JvbmcgYmxrIiwgY29udGV4dCwgbm9kZSk7CisJCQkJdHJhY2VfeGZzX2F0dHJfbGlzdF93cm9uZ19ibGsoY29udGV4dCk7CiAJCQkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CiAJCQkJYnAgPSBOVUxMOwogCQkJCWJyZWFrOwpAQCAtMTg2MSwyMCArMTg1NiwxOCBAQAogCQkJCWxlYWYgPSBicC0+ZGF0YTsKIAkJCQlpZiAoY3Vyc29yLT5oYXNodmFsID4gYmUzMl90b19jcHUobGVhZi0+ZW50cmllc1sKIAkJCQkgICAgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKSkgewotCQkJCQl4ZnNfYXR0cl90cmFjZV9sX2NsKCJ3cm9uZyBibGsiLAotCQkJCQkJCSAgIGNvbnRleHQsIGxlYWYpOworCQkJCQl0cmFjZV94ZnNfYXR0cl9saXN0X3dyb25nX2Jsayhjb250ZXh0KTsKIAkJCQkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CiAJCQkJCWJwID0gTlVMTDsKIAkJCQl9IGVsc2UgaWYgKGN1cnNvci0+aGFzaHZhbCA8PQogCQkJCQkgICAgIGJlMzJfdG9fY3B1KGxlYWYtPmVudHJpZXNbMF0uaGFzaHZhbCkpIHsKLQkJCQkJeGZzX2F0dHJfdHJhY2VfbF9jbCgibWF5YmUgd3JvbmcgYmxrIiwKLQkJCQkJCQkgICBjb250ZXh0LCBsZWFmKTsKKwkJCQkJdHJhY2VfeGZzX2F0dHJfbGlzdF93cm9uZ19ibGsoY29udGV4dCk7CiAJCQkJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwogCQkJCQlicCA9IE5VTEw7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQl4ZnNfYXR0cl90cmFjZV9sX2MoIndyb25nIGJsayAtID8/IiwgY29udGV4dCk7CisJCQkJdHJhY2VfeGZzX2F0dHJfbGlzdF93cm9uZ19ibGsoY29udGV4dCk7CiAJCQkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CiAJCQkJYnAgPSBOVUxMOwogCQkJfQpAQCAtMTkxOSw4ICsxOTEyLDggQEAKIAkJCQlpZiAoY3Vyc29yLT5oYXNodmFsCiAJCQkJCQk8PSBiZTMyX3RvX2NwdShidHJlZS0+aGFzaHZhbCkpIHsKIAkJCQkJY3Vyc29yLT5ibGtubyA9IGJlMzJfdG9fY3B1KGJ0cmVlLT5iZWZvcmUpOwotCQkJCQl4ZnNfYXR0cl90cmFjZV9sX2NiKCJkZXNjZW5kaW5nIiwKLQkJCQkJCQkgICAgY29udGV4dCwgYnRyZWUpOworCQkJCQl0cmFjZV94ZnNfYXR0cl9saXN0X25vZGVfZGVzY2VuZChjb250ZXh0LAorCQkJCQkJCQkJIGJ0cmVlKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtMjI3MCw4NSArMjI2MywzIEBACiAJfQogCXJldHVybigwKTsKIH0KLQotI2lmIGRlZmluZWQoWEZTX0FUVFJfVFJBQ0UpCi0vKgotICogQWRkIGEgdHJhY2UgYnVmZmVyIGVudHJ5IGZvciBhbiBhdHRyX2xpc3QgY29udGV4dCBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQKLXhmc19hdHRyX3RyYWNlX2xfYyhjaGFyICp3aGVyZSwgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCkKLXsKLQl4ZnNfYXR0cl90cmFjZV9lbnRlcihYRlNfQVRUUl9LVFJBQ0VfTF9DLCB3aGVyZSwgY29udGV4dCwKLQkJKF9fcHN1bnNpZ25lZF90KU5VTEwsCi0JCShfX3BzdW5zaWduZWRfdClOVUxMLAotCQkoX19wc3Vuc2lnbmVkX3QpTlVMTCk7Ci19Ci0KLS8qCi0gKiBBZGQgYSB0cmFjZSBidWZmZXIgZW50cnkgZm9yIGEgY29udGV4dCBzdHJ1Y3R1cmUgYW5kIGEgQnRyZWUgbm9kZS4KLSAqLwotdm9pZAoteGZzX2F0dHJfdHJhY2VfbF9jbihjaGFyICp3aGVyZSwgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKLQkJCSBzdHJ1Y3QgeGZzX2RhX2ludG5vZGUgKm5vZGUpCi17Ci0JeGZzX2F0dHJfdHJhY2VfZW50ZXIoWEZTX0FUVFJfS1RSQUNFX0xfQ04sIHdoZXJlLCBjb250ZXh0LAotCQkoX19wc3Vuc2lnbmVkX3QpYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KSwKLQkJKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KG5vZGUtPmJ0cmVlWzBdLmhhc2h2YWwpLAotCQkoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUobm9kZS0+YnRyZWVbCi0JCQkJICAgIGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCktMV0uaGFzaHZhbCkpOwotfQotCi0vKgotICogQWRkIGEgdHJhY2UgYnVmZmVyIGVudHJ5IGZvciBhIGNvbnRleHQgc3RydWN0dXJlIGFuZCBhIEJ0cmVlIGVsZW1lbnQuCi0gKi8KLXZvaWQKLXhmc19hdHRyX3RyYWNlX2xfY2IoY2hhciAqd2hlcmUsIHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIHN0cnVjdCB4ZnNfZGFfbm9kZV9lbnRyeSAqYnRyZWUpCi17Ci0JeGZzX2F0dHJfdHJhY2VfZW50ZXIoWEZTX0FUVFJfS1RSQUNFX0xfQ0IsIHdoZXJlLCBjb250ZXh0LAotCQkoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpLAotCQkoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYnRyZWUtPmJlZm9yZSksCi0JCShfX3BzdW5zaWduZWRfdClOVUxMKTsKLX0KLQotLyoKLSAqIEFkZCBhIHRyYWNlIGJ1ZmZlciBlbnRyeSBmb3IgYSBjb250ZXh0IHN0cnVjdHVyZSBhbmQgYSBsZWFmIGJsb2NrLgotICovCi12b2lkCi14ZnNfYXR0cl90cmFjZV9sX2NsKGNoYXIgKndoZXJlLCBzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAotCQkJICAgICAgc3RydWN0IHhmc19hdHRyX2xlYWZibG9jayAqbGVhZikKLXsKLQl4ZnNfYXR0cl90cmFjZV9lbnRlcihYRlNfQVRUUl9LVFJBQ0VfTF9DTCwgd2hlcmUsIGNvbnRleHQsCi0JCShfX3BzdW5zaWduZWRfdCliZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpLAotCQkoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUobGVhZi0+ZW50cmllc1swXS5oYXNodmFsKSwKLQkJKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KGxlYWYtPmVudHJpZXNbCi0JCQkJYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKSk7Ci19Ci0KLS8qCi0gKiBBZGQgYSB0cmFjZSBidWZmZXIgZW50cnkgZm9yIHRoZSBhcmd1bWVudHMgZ2l2ZW4gdG8gdGhlIHJvdXRpbmUsCi0gKiBnZW5lcmljIGZvcm0uCi0gKi8KLXZvaWQKLXhmc19hdHRyX3RyYWNlX2VudGVyKGludCB0eXBlLCBjaGFyICp3aGVyZSwKLQkJCSBzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAotCQkJIF9fcHN1bnNpZ25lZF90IGExMywgX19wc3Vuc2lnbmVkX3QgYTE0LAotCQkJIF9fcHN1bnNpZ25lZF90IGExNSkKLXsKLQlBU1NFUlQoeGZzX2F0dHJfdHJhY2VfYnVmKTsKLQlrdHJhY2VfZW50ZXIoeGZzX2F0dHJfdHJhY2VfYnVmLCAodm9pZCAqKSgoX19wc3Vuc2lnbmVkX3QpdHlwZSksCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCl3aGVyZSksCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCljb250ZXh0LT5kcCksCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCljb250ZXh0LT5jdXJzb3ItPmhhc2h2YWwpLAotCQkodm9pZCAqKSgoX19wc3Vuc2lnbmVkX3QpY29udGV4dC0+Y3Vyc29yLT5ibGtubyksCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCljb250ZXh0LT5jdXJzb3ItPm9mZnNldCksCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCljb250ZXh0LT5hbGlzdCksCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCljb250ZXh0LT5idWZzaXplKSwKLQkJKHZvaWQgKikoKF9fcHN1bnNpZ25lZF90KWNvbnRleHQtPmNvdW50KSwKLQkJKHZvaWQgKikoKF9fcHN1bnNpZ25lZF90KWNvbnRleHQtPmZpcnN0dSksCi0JCU5VTEwsCi0JCSh2b2lkICopKChfX3BzdW5zaWduZWRfdCljb250ZXh0LT5kdXBjbnQpLAotCQkodm9pZCAqKSgoX19wc3Vuc2lnbmVkX3QpY29udGV4dC0+ZmxhZ3MpLAotCQkodm9pZCAqKWExMywgKHZvaWQgKilhMTQsICh2b2lkICopYTE1KTsKLX0KLSNlbmRpZgkvKiBYRlNfQVRUUl9UUkFDRSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyLmggYi9mcy94ZnMveGZzX2F0dHIuaAppbmRleCAxMmYwYmUzLi41OWI0MTBjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHIuaAorKysgYi9mcy94ZnMveGZzX2F0dHIuaApAQCAtNDgsNiArNDgsMTYgQEAKICNkZWZpbmUgQVRUUl9LRVJOT1RJTUUJMHgxMDAwCS8qIFtrZXJuZWxdIGRvbid0IHVwZGF0ZSBpbm9kZSB0aW1lc3RhbXBzICovCiAjZGVmaW5lIEFUVFJfS0VSTk9WQUwJMHgyMDAwCS8qIFtrZXJuZWxdIGdldCBhdHRyIHNpemUgb25seSwgbm90IHZhbHVlICovCiAKKyNkZWZpbmUgWEZTX0FUVFJfRkxBR1MgXAorCXsgQVRUUl9ET05URk9MTE9XLCAJIkRPTlRGT0xMT1ciIH0sIFwKKwl7IEFUVFJfUk9PVCwJCSJST09UIiB9LCBcCisJeyBBVFRSX1RSVVNULAkJIlRSVVNUIiB9LCBcCisJeyBBVFRSX1NFQ1VSRSwJCSJTRUNVUkUiIH0sIFwKKwl7IEFUVFJfQ1JFQVRFLAkJIkNSRUFURSIgfSwgXAorCXsgQVRUUl9SRVBMQUNFLAkJIlJFUExBQ0UiIH0sIFwKKwl7IEFUVFJfS0VSTk9USU1FLAkiS0VSTk9USU1FIiB9LCBcCisJeyBBVFRSX0tFUk5PVkFMLAkiS0VSTk9WQUwiIH0KKwogLyoKICAqIFRoZSBtYXhpbXVtIHNpemUgKGludG8gdGhlIGtlcm5lbCBvciByZXR1cm5lZCBmcm9tIHRoZSBrZXJuZWwpIG9mIGFuCiAgKiBhdHRyaWJ1dGUgdmFsdWUgb3IgdGhlIGJ1ZmZlciB1c2VkIGZvciBhbiBhdHRyX2xpc3QoKSBjYWxsLiAgTGFyZ2VyCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCAwYjY4NzM1Li5iYWY0MWI1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJ4ZnNfYXR0ci5oIgogI2luY2x1ZGUgInhmc19hdHRyX2xlYWYuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIHhmc19hdHRyX2xlYWYuYwpAQCAtNTk0LDcgKzU5NSw3IEBACiAJY3Vyc29yID0gY29udGV4dC0+Y3Vyc29yOwogCUFTU0VSVChjdXJzb3IgIT0gTlVMTCk7CiAKLQl4ZnNfYXR0cl90cmFjZV9sX2MoInNmIHN0YXJ0IiwgY29udGV4dCk7CisJdHJhY2VfeGZzX2F0dHJfbGlzdF9zZihjb250ZXh0KTsKIAogCS8qCiAJICogSWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggYW5kIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHN0YXJ0LApAQCAtNjI3LDcgKzYyOCw3IEBACiAJCQkJcmV0dXJuIGVycm9yOwogCQkJc2ZlID0gWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZSk7CiAJCX0KLQkJeGZzX2F0dHJfdHJhY2VfbF9jKCJzZiBiaWctZ3VscCIsIGNvbnRleHQpOworCQl0cmFjZV94ZnNfYXR0cl9saXN0X3NmX2FsbChjb250ZXh0KTsKIAkJcmV0dXJuKDApOwogCX0KIApAQCAtNjUzLDcgKzY1NCw2IEBACiAJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2F0dHJfc2hvcnRmb3JtX2xpc3QiLAogCQkJCQkgICAgIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJCSAgICAgY29udGV4dC0+ZHAtPmlfbW91bnQsIHNmZSk7Ci0JCQl4ZnNfYXR0cl90cmFjZV9sX2MoInNmIGNvcnJ1cHRlZCIsIGNvbnRleHQpOwogCQkJa21lbV9mcmVlKHNidWYpOwogCQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCQl9CkBAIC02OTMsNyArNjkzLDYgQEAKIAl9CiAJaWYgKGkgPT0gbnNidWYpIHsKIAkJa21lbV9mcmVlKHNidWYpOwotCQl4ZnNfYXR0cl90cmFjZV9sX2MoImJsayBlbmQiLCBjb250ZXh0KTsKIAkJcmV0dXJuKDApOwogCX0KIApAQCAtNzE5LDcgKzcxOCw2IEBACiAJfQogCiAJa21lbV9mcmVlKHNidWYpOwotCXhmc19hdHRyX3RyYWNlX2xfYygic2YgRS1PLUYiLCBjb250ZXh0KTsKIAlyZXR1cm4oMCk7CiB9CiAKQEAgLTIzMjMsNyArMjMyMSw3IEBACiAJY3Vyc29yID0gY29udGV4dC0+Y3Vyc29yOwogCWN1cnNvci0+aW5pdHRlZCA9IDE7CiAKLQl4ZnNfYXR0cl90cmFjZV9sX2NsKCJibGsgc3RhcnQiLCBjb250ZXh0LCBsZWFmKTsKKwl0cmFjZV94ZnNfYXR0cl9saXN0X2xlYWYoY29udGV4dCk7CiAKIAkvKgogCSAqIFJlLWZpbmQgb3VyIHBsYWNlIGluIHRoZSBsZWFmIGJsb2NrIGlmIHRoaXMgaXMgYSBuZXcgc3lzY2FsbC4KQEAgLTIzNDQsNyArMjM0Miw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKGkgPT0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSkgewotCQkJeGZzX2F0dHJfdHJhY2VfbF9jKCJub3QgZm91bmQiLCBjb250ZXh0KTsKKwkJCXRyYWNlX3hmc19hdHRyX2xpc3Rfbm90Zm91bmQoY29udGV4dCk7CiAJCQlyZXR1cm4oMCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjQxOSw3ICsyNDE3LDcgQEAKIAkJCWJyZWFrOwogCQljdXJzb3ItPm9mZnNldCsrOwogCX0KLQl4ZnNfYXR0cl90cmFjZV9sX2NsKCJibGsgZW5kIiwgY29udGV4dCwgbGVhZik7CisJdHJhY2VfeGZzX2F0dHJfbGlzdF9sZWFmX2VuZChjb250ZXh0KTsKIAlyZXR1cm4ocmV0dmFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX3NmLmggYi9mcy94ZnMveGZzX2F0dHJfc2YuaAppbmRleCBlYTIyODM5Li43NmFiN2IwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfc2YuaAorKysgYi9mcy94ZnMveGZzX2F0dHJfc2YuaApAQCAtMjUsOCArMjUsNiBAQAogICogdG8gZml0IGludG8gdGhlIGxpdGVyYWwgYXJlYSBvZiB0aGUgaW5vZGUuCiAgKi8KIAotc3RydWN0IHhmc19pbm9kZTsKLQogLyoKICAqIEVudHJpZXMgYXJlIHBhY2tlZCB0b3dhcmQgdGhlIHRvcCBhcyB0aWdodCBhcyBwb3NzaWJsZS4KICAqLwpAQCAtNjksNDIgKzY3LDQgQEAKIAkoYmUxNl90b19jcHUoKCh4ZnNfYXR0cl9zaG9ydGZvcm1fdCAqKQlcCiAJCSgoZHApLT5pX2FmcC0+aWZfdTEuaWZfZGF0YSkpLT5oZHIudG90c2l6ZSkpCiAKLSNpZiBkZWZpbmVkKFhGU19BVFRSX1RSQUNFKQotLyoKLSAqIEtlcm5lbCB0cmFjaW5nIHN1cHBvcnQgZm9yIGF0dHJpYnV0ZSBsaXN0cwotICovCi1zdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0Owotc3RydWN0IHhmc19kYV9pbnRub2RlOwotc3RydWN0IHhmc19kYV9ub2RlX2VudHJ5Owotc3RydWN0IHhmc19hdHRyX2xlYWZibG9jazsKLQotI2RlZmluZQlYRlNfQVRUUl9UUkFDRV9TSVpFCTQwOTYJLyogc2l6ZSBvZiBnbG9iYWwgdHJhY2UgYnVmZmVyICovCi1leHRlcm4ga3RyYWNlX3QJKnhmc19hdHRyX3RyYWNlX2J1ZjsKLQotLyoKLSAqIFRyYWNlIHJlY29yZCB0eXBlcy4KLSAqLwotI2RlZmluZQlYRlNfQVRUUl9LVFJBQ0VfTF9DCTEJLyogY29udGV4dCAqLwotI2RlZmluZQlYRlNfQVRUUl9LVFJBQ0VfTF9DTgkyCS8qIGNvbnRleHQsIG5vZGUgKi8KLSNkZWZpbmUJWEZTX0FUVFJfS1RSQUNFX0xfQ0IJMwkvKiBjb250ZXh0LCBidHJlZSAqLwotI2RlZmluZQlYRlNfQVRUUl9LVFJBQ0VfTF9DTAk0CS8qIGNvbnRleHQsIGxlYWYgKi8KLQotdm9pZCB4ZnNfYXR0cl90cmFjZV9sX2MoY2hhciAqd2hlcmUsIHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQpOwotdm9pZCB4ZnNfYXR0cl90cmFjZV9sX2NuKGNoYXIgKndoZXJlLCBzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAotCQkJICAgICAgc3RydWN0IHhmc19kYV9pbnRub2RlICpub2RlKTsKLXZvaWQgeGZzX2F0dHJfdHJhY2VfbF9jYihjaGFyICp3aGVyZSwgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKLQkJCSAgICAgIHN0cnVjdCB4ZnNfZGFfbm9kZV9lbnRyeSAqYnRyZWUpOwotdm9pZCB4ZnNfYXR0cl90cmFjZV9sX2NsKGNoYXIgKndoZXJlLCBzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjb250ZXh0LAotCQkJICAgICAgc3RydWN0IHhmc19hdHRyX2xlYWZibG9jayAqbGVhZik7Ci12b2lkIHhmc19hdHRyX3RyYWNlX2VudGVyKGludCB0eXBlLCBjaGFyICp3aGVyZSwKLQkJCSAgICAgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKLQkJCSAgICAgX19wc3Vuc2lnbmVkX3QgYTEzLCBfX3BzdW5zaWduZWRfdCBhMTQsCi0JCQkgICAgIF9fcHN1bnNpZ25lZF90IGExNSk7Ci0jZWxzZQotI2RlZmluZQl4ZnNfYXR0cl90cmFjZV9sX2ModyxjKQotI2RlZmluZQl4ZnNfYXR0cl90cmFjZV9sX2NuKHcsYyxuKQotI2RlZmluZQl4ZnNfYXR0cl90cmFjZV9sX2NiKHcsYyxiKQotI2RlZmluZQl4ZnNfYXR0cl90cmFjZV9sX2NsKHcsYyxsKQotI2VuZGlmIC8qIFhGU19BVFRSX1RSQUNFICovCi0KICNlbmRpZgkvKiBfX1hGU19BVFRSX1NGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA4OTcxZmIwLi45ODI1MWNkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc19maWxlc3RyZWFtLmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIAogI2lmZGVmIERFQlVHCkBAIC0yNzIsNzEgKzI3Myw2IEBACiAJaW50ICAgICAgICAgICAgIHdoaWNoZm9yaywJLyogZGF0YSBvciBhdHRyaWJ1dGUgZm9yayAqLwogCWNoYXIJCSphZW9mKTsJCS8qIHJldHVybiB2YWx1ZSAqLwogCi0jaWZkZWYgWEZTX0JNQVBfVFJBQ0UKLS8qCi0gKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byBhIGNhbGwgdG8geGZzX2lleHRfcmVtb3ZlLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2JtYXBfdHJhY2VfZGVsZXRlKAotCWNvbnN0IGNoYXIJKmZuYW1lLAkJLyogZnVuY3Rpb24gbmFtZSAqLwotCWNoYXIJCSpkZXNjLAkJLyogb3BlcmF0aW9uIGRlc2NyaXB0aW9uICovCi0JeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJaWR4LAkJLyogaW5kZXggb2YgZW50cnkoZW50cmllcykgZGVsZXRlZCAqLwotCXhmc19leHRudW1fdAljbnQsCQkvKiBjb3VudCBvZiBlbnRyaWVzIGRlbGV0ZWQsIDEgb3IgMiAqLwotCWludAkJd2hpY2hmb3JrKTsJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KLQotLyoKLSAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IHByaW9yIHRvIGEgY2FsbCB0byB4ZnNfaWV4dF9pbnNlcnQsIG9yCi0gKiByZWFkaW5nIGluIHRoZSBleHRlbnRzIGxpc3QgZnJvbSB0aGUgZGlzayAoaW4gdGhlIGJ0cmVlKS4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19ibWFwX3RyYWNlX2luc2VydCgKLQljb25zdCBjaGFyCSpmbmFtZSwJCS8qIGZ1bmN0aW9uIG5hbWUgKi8KLQljaGFyCQkqZGVzYywJCS8qIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiAqLwotCXhmc19pbm9kZV90CSppcCwJCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCi0JeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IG9mIGVudHJ5KGVudHJpZXMpIGluc2VydGVkICovCi0JeGZzX2V4dG51bV90CWNudCwJCS8qIGNvdW50IG9mIGVudHJpZXMgaW5zZXJ0ZWQsIDEgb3IgMiAqLwotCXhmc19ibWJ0X2lyZWNfdAkqcjEsCQkvKiBpbnNlcnRlZCByZWNvcmQgMSAqLwotCXhmc19ibWJ0X2lyZWNfdAkqcjIsCQkvKiBpbnNlcnRlZCByZWNvcmQgMiBvciBudWxsICovCi0JaW50CQl3aGljaGZvcmspOwkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwotCi0vKgotICogQWRkIGJtYXAgdHJhY2UgZW50cnkgYWZ0ZXIgdXBkYXRpbmcgYW4gZXh0ZW50IHJlY29yZCBpbiBwbGFjZS4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKAotCWNvbnN0IGNoYXIJKmZuYW1lLAkJLyogZnVuY3Rpb24gbmFtZSAqLwotCWNoYXIJCSpkZXNjLAkJLyogb3BlcmF0aW9uIGRlc2NyaXB0aW9uICovCi0JeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJaWR4LAkJLyogaW5kZXggb2YgZW50cnkgdXBkYXRlZCAqLwotCWludAkJd2hpY2hmb3JrKTsJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KLQotLyoKLSAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IHByaW9yIHRvIHVwZGF0aW5nIGFuIGV4dGVudCByZWNvcmQgaW4gcGxhY2UuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfYm1hcF90cmFjZV9wcmVfdXBkYXRlKAotCWNvbnN0IGNoYXIJKmZuYW1lLAkJLyogZnVuY3Rpb24gbmFtZSAqLwotCWNoYXIJCSpkZXNjLAkJLyogb3BlcmF0aW9uIGRlc2NyaXB0aW9uICovCi0JeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJaWR4LAkJLyogaW5kZXggb2YgZW50cnkgdG8gYmUgdXBkYXRlZCAqLwotCWludAkJd2hpY2hmb3JrKTsJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KLQotI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9ERUxFVEUoZCxpcCxpLGMsdykJXAotCXhmc19ibWFwX3RyYWNlX2RlbGV0ZShfX2Z1bmNfXyxkLGlwLGksYyx3KQotI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9JTlNFUlQoZCxpcCxpLGMscjEscjIsdykJXAotCXhmc19ibWFwX3RyYWNlX2luc2VydChfX2Z1bmNfXyxkLGlwLGksYyxyMSxyMix3KQotI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURShkLGlwLGksdykJXAotCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKF9fZnVuY19fLGQsaXAsaSx3KQotI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKGQsaXAsaSx3KQlcCi0JeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShfX2Z1bmNfXyxkLGlwLGksdykKLSNlbHNlCi0jZGVmaW5lCVhGU19CTUFQX1RSQUNFX0RFTEVURShkLGlwLGksYyx3KQotI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9JTlNFUlQoZCxpcCxpLGMscjEscjIsdykKLSNkZWZpbmUJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoZCxpcCxpLHcpCi0jZGVmaW5lCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoZCxpcCxpLHcpCi0jZW5kaWYJLyogWEZTX0JNQVBfVFJBQ0UgKi8KLQogLyoKICAqIENvbXB1dGUgdGhlIHdvcnN0LWNhc2UgbnVtYmVyIG9mIGluZGlyZWN0IGJsb2NrcyB0aGF0IHdpbGwgYmUgdXNlZAogICogZm9yIGlwJ3MgZGVsYXllZCBleHRlbnQgb2YgbGVuZ3RoICJsZW4iLgpAQCAtMzYzLDE4ICsyOTksNiBAQAogI2RlZmluZQl4ZnNfYm1hcF92YWxpZGF0ZV9yZXQoYm5vLGxlbixmbGFncyxtdmFsLG9ubWFwLG5tYXApCiAjZW5kaWYgLyogREVCVUcgKi8KIAotI2lmIGRlZmluZWQoWEZTX1JXX1RSQUNFKQotU1RBVElDIHZvaWQKLXhmc19idW5tYXBfdHJhY2UoCi0JeGZzX2lub2RlX3QJCSppcCwKLQl4ZnNfZmlsZW9mZl90CQlibm8sCi0JeGZzX2ZpbGJsa3NfdAkJbGVuLAotCWludAkJCWZsYWdzLAotCWluc3RfdAkJCSpyYSk7Ci0jZWxzZQotI2RlZmluZQl4ZnNfYnVubWFwX3RyYWNlKGlwLCBibm8sIGxlbiwgZmxhZ3MsIHJhKQotI2VuZGlmCS8qIFhGU19SV19UUkFDRSAqLwotCiBTVEFUSUMgaW50CiB4ZnNfYm1hcF9jb3VudF90cmVlKAogCXhmc19tb3VudF90ICAgICAqbXAsCkBAIC01OTAsOSArNTE0LDkgQEAKIAkgKiBhbHJlYWR5IGV4dGVudHMgaW4gdGhlIGxpc3QuCiAJICovCiAJaWYgKG5leHRlbnRzID09IDApIHsKLQkJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKCJpbnNlcnQgZW1wdHkiLCBpcCwgMCwgMSwgbmV3LCBOVUxMLAotCQkJd2hpY2hmb3JrKTsKLQkJeGZzX2lleHRfaW5zZXJ0KGlmcCwgMCwgMSwgbmV3KTsKKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCAwLCAxLCBuZXcsCisJCQkJd2hpY2hmb3JrID09IFhGU19BVFRSX0ZPUksgPyBCTUFQX0FUVFJGT1JLIDogMCk7CisKIAkJQVNTRVJUKGN1ciA9PSBOVUxMKTsKIAkJaWZwLT5pZl9sYXN0ZXggPSAwOwogCQlpZiAoIWlzbnVsbHN0YXJ0YmxvY2sobmV3LT5icl9zdGFydGJsb2NrKSkgewpAQCAtNzU5LDI2ICs2ODMsMTAgQEAKIAl4ZnNfZmlsYmxrc190CQl0ZW1wPTA7CS8qIHZhbHVlIGZvciBkbmV3IGNhbGN1bGF0aW9ucyAqLwogCXhmc19maWxibGtzX3QJCXRlbXAyPTA7LyogdmFsdWUgZm9yIGRuZXcgY2FsY3VsYXRpb25zICovCiAJaW50CQkJdG1wX3J2YWw7CS8qIHBhcnRpYWwgbG9nZ2luZyBmbGFncyAqLwotCWVudW0gewkJCQkvKiBiaXQgbnVtYmVyIGRlZmluaXRpb25zIGZvciBzdGF0ZSAqLwotCQlMRUZUX0NPTlRJRywJUklHSFRfQ09OVElHLAotCQlMRUZUX0ZJTExJTkcsCVJJR0hUX0ZJTExJTkcsCi0JCUxFRlRfREVMQVksCVJJR0hUX0RFTEFZLAotCQlMRUZUX1ZBTElELAlSSUdIVF9WQUxJRAotCX07CiAKICNkZWZpbmUJTEVGVAkJclswXQogI2RlZmluZQlSSUdIVAkJclsxXQogI2RlZmluZQlQUkVWCQlyWzJdCi0jZGVmaW5lCU1BU0soYikJCSgxIDw8IChiKSkKLSNkZWZpbmUJTUFTSzIoYSxiKQkoTUFTSyhhKSB8IE1BU0soYikpCi0jZGVmaW5lCU1BU0szKGEsYixjKQkoTUFTSzIoYSxiKSB8IE1BU0soYykpCi0jZGVmaW5lCU1BU0s0KGEsYixjLGQpCShNQVNLMyhhLGIsYykgfCBNQVNLKGQpKQotI2RlZmluZQlTVEFURV9TRVQoYix2KQkoKHYpID8gKHN0YXRlIHw9IE1BU0soYikpIDogKHN0YXRlICY9IH5NQVNLKGIpKSkKLSNkZWZpbmUJU1RBVEVfVEVTVChiKQkoc3RhdGUgJiBNQVNLKGIpKQotI2RlZmluZQlTVEFURV9TRVRfVEVTVChiLHYpCSgodikgPyAoKHN0YXRlIHw9IE1BU0soYikpLCAxKSA6IFwKLQkJCQkgICAgICAgKChzdGF0ZSAmPSB+TUFTSyhiKSksIDApKQotI2RlZmluZQlTV0lUQ0hfU1RBVEUJCVwKLQkoc3RhdGUgJiBNQVNLNChMRUZUX0ZJTExJTkcsIFJJR0hUX0ZJTExJTkcsIExFRlRfQ09OVElHLCBSSUdIVF9DT05USUcpKQogCiAJLyoKIAkgKiBTZXQgdXAgYSBidW5jaCBvZiB2YXJpYWJsZXMgdG8gbWFrZSB0aGUgdGVzdHMgc2ltcGxlci4KQEAgLTc5MCw2OSArNjk4LDgwIEBACiAJbmV3X2VuZG9mZiA9IG5ldy0+YnJfc3RhcnRvZmYgKyBuZXctPmJyX2Jsb2NrY291bnQ7CiAJQVNTRVJUKFBSRVYuYnJfc3RhcnRvZmYgPD0gbmV3LT5icl9zdGFydG9mZik7CiAJQVNTRVJUKFBSRVYuYnJfc3RhcnRvZmYgKyBQUkVWLmJyX2Jsb2NrY291bnQgPj0gbmV3X2VuZG9mZik7CisKIAkvKgogCSAqIFNldCBmbGFncyBkZXRlcm1pbmluZyB3aGF0IHBhcnQgb2YgdGhlIHByZXZpb3VzIGRlbGF5ZWQgYWxsb2NhdGlvbgogCSAqIGV4dGVudCBpcyBiZWluZyByZXBsYWNlZCBieSBhIHJlYWwgYWxsb2NhdGlvbi4KIAkgKi8KLQlTVEFURV9TRVQoTEVGVF9GSUxMSU5HLCBQUkVWLmJyX3N0YXJ0b2ZmID09IG5ldy0+YnJfc3RhcnRvZmYpOwotCVNUQVRFX1NFVChSSUdIVF9GSUxMSU5HLAotCQlQUkVWLmJyX3N0YXJ0b2ZmICsgUFJFVi5icl9ibG9ja2NvdW50ID09IG5ld19lbmRvZmYpOworCWlmIChQUkVWLmJyX3N0YXJ0b2ZmID09IG5ldy0+YnJfc3RhcnRvZmYpCisJCXN0YXRlIHw9IEJNQVBfTEVGVF9GSUxMSU5HOworCWlmIChQUkVWLmJyX3N0YXJ0b2ZmICsgUFJFVi5icl9ibG9ja2NvdW50ID09IG5ld19lbmRvZmYpCisJCXN0YXRlIHw9IEJNQVBfUklHSFRfRklMTElORzsKKwogCS8qCiAJICogQ2hlY2sgYW5kIHNldCBmbGFncyBpZiB0aGlzIHNlZ21lbnQgaGFzIGEgbGVmdCBuZWlnaGJvci4KIAkgKiBEb24ndCBzZXQgY29udGlndW91cyBpZiB0aGUgY29tYmluZWQgZXh0ZW50IHdvdWxkIGJlIHRvbyBsYXJnZS4KIAkgKi8KLQlpZiAoU1RBVEVfU0VUX1RFU1QoTEVGVF9WQUxJRCwgaWR4ID4gMCkpIHsKKwlpZiAoaWR4ID4gMCkgeworCQlzdGF0ZSB8PSBCTUFQX0xFRlRfVkFMSUQ7CiAJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLCAmTEVGVCk7Ci0JCVNUQVRFX1NFVChMRUZUX0RFTEFZLCBpc251bGxzdGFydGJsb2NrKExFRlQuYnJfc3RhcnRibG9jaykpOworCisJCWlmIChpc251bGxzdGFydGJsb2NrKExFRlQuYnJfc3RhcnRibG9jaykpCisJCQlzdGF0ZSB8PSBCTUFQX0xFRlRfREVMQVk7CiAJfQotCVNUQVRFX1NFVChMRUZUX0NPTlRJRywKLQkJU1RBVEVfVEVTVChMRUZUX1ZBTElEKSAmJiAhU1RBVEVfVEVTVChMRUZUX0RFTEFZKSAmJgotCQlMRUZULmJyX3N0YXJ0b2ZmICsgTEVGVC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRvZmYgJiYKLQkJTEVGVC5icl9zdGFydGJsb2NrICsgTEVGVC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRibG9jayAmJgotCQlMRUZULmJyX3N0YXRlID09IG5ldy0+YnJfc3RhdGUgJiYKLQkJTEVGVC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTik7CisKKwlpZiAoKHN0YXRlICYgQk1BUF9MRUZUX1ZBTElEKSAmJiAhKHN0YXRlICYgQk1BUF9MRUZUX0RFTEFZKSAmJgorCSAgICBMRUZULmJyX3N0YXJ0b2ZmICsgTEVGVC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRvZmYgJiYKKwkgICAgTEVGVC5icl9zdGFydGJsb2NrICsgTEVGVC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRibG9jayAmJgorCSAgICBMRUZULmJyX3N0YXRlID09IG5ldy0+YnJfc3RhdGUgJiYKKwkgICAgTEVGVC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTikKKwkJc3RhdGUgfD0gQk1BUF9MRUZUX0NPTlRJRzsKKwogCS8qCiAJICogQ2hlY2sgYW5kIHNldCBmbGFncyBpZiB0aGlzIHNlZ21lbnQgaGFzIGEgcmlnaHQgbmVpZ2hib3IuCiAJICogRG9uJ3Qgc2V0IGNvbnRpZ3VvdXMgaWYgdGhlIGNvbWJpbmVkIGV4dGVudCB3b3VsZCBiZSB0b28gbGFyZ2UuCiAJICogQWxzbyBjaGVjayBmb3IgYWxsLXRocmVlLWNvbnRpZ3VvdXMgYmVpbmcgdG9vIGxhcmdlLgogCSAqLwotCWlmIChTVEFURV9TRVRfVEVTVChSSUdIVF9WQUxJRCwKLQkJCWlkeCA8Ci0JCQlpcC0+aV9kZi5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkgLSAxKSkgeworCWlmIChpZHggPCBpcC0+aV9kZi5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkgLSAxKSB7CisJCXN0YXRlIHw9IEJNQVBfUklHSFRfVkFMSUQ7CiAJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIDEpLCAmUklHSFQpOwotCQlTVEFURV9TRVQoUklHSFRfREVMQVksIGlzbnVsbHN0YXJ0YmxvY2soUklHSFQuYnJfc3RhcnRibG9jaykpOworCisJCWlmIChpc251bGxzdGFydGJsb2NrKFJJR0hULmJyX3N0YXJ0YmxvY2spKQorCQkJc3RhdGUgfD0gQk1BUF9SSUdIVF9ERUxBWTsKIAl9Ci0JU1RBVEVfU0VUKFJJR0hUX0NPTlRJRywKLQkJU1RBVEVfVEVTVChSSUdIVF9WQUxJRCkgJiYgIVNUQVRFX1RFU1QoUklHSFRfREVMQVkpICYmCi0JCW5ld19lbmRvZmYgPT0gUklHSFQuYnJfc3RhcnRvZmYgJiYKLQkJbmV3LT5icl9zdGFydGJsb2NrICsgbmV3LT5icl9ibG9ja2NvdW50ID09Ci0JCSAgICBSSUdIVC5icl9zdGFydGJsb2NrICYmCi0JCW5ldy0+YnJfc3RhdGUgPT0gUklHSFQuYnJfc3RhdGUgJiYKLQkJbmV3LT5icl9ibG9ja2NvdW50ICsgUklHSFQuYnJfYmxvY2tjb3VudCA8PSBNQVhFWFRMRU4gJiYKLQkJKChzdGF0ZSAmIE1BU0szKExFRlRfQ09OVElHLCBMRUZUX0ZJTExJTkcsIFJJR0hUX0ZJTExJTkcpKSAhPQotCQkgIE1BU0szKExFRlRfQ09OVElHLCBMRUZUX0ZJTExJTkcsIFJJR0hUX0ZJTExJTkcpIHx8Ci0JCSBMRUZULmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50Ci0JCSAgICAgPD0gTUFYRVhUTEVOKSk7CisKKwlpZiAoKHN0YXRlICYgQk1BUF9SSUdIVF9WQUxJRCkgJiYgIShzdGF0ZSAmIEJNQVBfUklHSFRfREVMQVkpICYmCisJICAgIG5ld19lbmRvZmYgPT0gUklHSFQuYnJfc3RhcnRvZmYgJiYKKwkgICAgbmV3LT5icl9zdGFydGJsb2NrICsgbmV3LT5icl9ibG9ja2NvdW50ID09IFJJR0hULmJyX3N0YXJ0YmxvY2sgJiYKKwkgICAgbmV3LT5icl9zdGF0ZSA9PSBSSUdIVC5icl9zdGF0ZSAmJgorCSAgICBuZXctPmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTiAmJgorCSAgICAoKHN0YXRlICYgKEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX0xFRlRfRklMTElORyB8CisJCSAgICAgICBCTUFQX1JJR0hUX0ZJTExJTkcpKSAhPQorCQkgICAgICAoQk1BUF9MRUZUX0NPTlRJRyB8IEJNQVBfTEVGVF9GSUxMSU5HIHwKKwkJICAgICAgIEJNQVBfUklHSFRfRklMTElORykgfHwKKwkgICAgIExFRlQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCArIFJJR0hULmJyX2Jsb2NrY291bnQKKwkJCTw9IE1BWEVYVExFTikpCisJCXN0YXRlIHw9IEJNQVBfUklHSFRfQ09OVElHOworCiAJZXJyb3IgPSAwOwogCS8qCiAJICogU3dpdGNoIG91dCBiYXNlZCBvbiB0aGUgRklMTElORyBhbmQgQ09OVElHIHN0YXRlIGJpdHMuCiAJICovCi0Jc3dpdGNoIChTV0lUQ0hfU1RBVEUpIHsKLQotCWNhc2UgTUFTSzQoTEVGVF9GSUxMSU5HLCBSSUdIVF9GSUxMSU5HLCBMRUZUX0NPTlRJRywgUklHSFRfQ09OVElHKToKKwlzd2l0Y2ggKHN0YXRlICYgKEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRyB8CisJCQkgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUcpKSB7CisJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfAorCSAgICAgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CiAJCS8qCiAJCSAqIEZpbGxpbmcgaW4gYWxsIG9mIGEgcHJldmlvdXNseSBkZWxheWVkIGFsbG9jYXRpb24gZXh0ZW50LgogCQkgKiBUaGUgbGVmdCBhbmQgcmlnaHQgbmVpZ2hib3JzIGFyZSBib3RoIGNvbnRpZ3VvdXMgd2l0aCBuZXcuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMRnxSRnxMQ3xSQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlMRUZULmJyX2Jsb2NrY291bnQgKyBQUkVWLmJyX2Jsb2NrY291bnQgKwogCQkJUklHSFQuYnJfYmxvY2tjb3VudCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxSRnxMQ3xSQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCVhGU19CTUFQX1RSQUNFX0RFTEVURSgiTEZ8UkZ8TEN8UkMiLCBpcCwgaWR4LCAyLCBYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAyKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOworCisJCXhmc19pZXh0X3JlbW92ZShpcCwgaWR4LCAyLCBzdGF0ZSk7CiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeCAtIDE7CiAJCWlwLT5pX2QuZGlfbmV4dGVudHMtLTsKIAkJaWYgKGN1ciA9PSBOVUxMKQpAQCAtODg1LDIwICs4MDQsMTggQEAKIAkJCVJJR0hULmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLMyhMRUZUX0ZJTExJTkcsIFJJR0hUX0ZJTExJTkcsIExFRlRfQ09OVElHKToKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRzoKIAkJLyoKIAkJICogRmlsbGluZyBpbiBhbGwgb2YgYSBwcmV2aW91c2x5IGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnQuCiAJCSAqIFRoZSBsZWZ0IG5laWdoYm9yIGlzIGNvbnRpZ3VvdXMsIHRoZSByaWdodCBpcyBub3QuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMRnxSRnxMQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlMRUZULmJyX2Jsb2NrY291bnQgKyBQUkVWLmJyX2Jsb2NrY291bnQpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiTEZ8UkZ8TEMiLCBpcCwgaWR4IC0gMSwKLQkJCVhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CisKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKLQkJWEZTX0JNQVBfVFJBQ0VfREVMRVRFKCJMRnxSRnxMQyIsIGlwLCBpZHgsIDEsIFhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9yZW1vdmUoaWZwLCBpZHgsIDEpOworCQl4ZnNfaWV4dF9yZW1vdmUoaXAsIGlkeCwgMSwgc3RhdGUpOwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfREVYVDsKIAkJZWxzZSB7CkBAIC05MjEsMTkgKzgzOCwxOSBAQAogCQkJUFJFVi5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAotCWNhc2UgTUFTSzMoTEVGVF9GSUxMSU5HLCBSSUdIVF9GSUxMSU5HLCBSSUdIVF9DT05USUcpOgorCWNhc2UgQk1BUF9MRUZUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKIAkJLyoKIAkJICogRmlsbGluZyBpbiBhbGwgb2YgYSBwcmV2aW91c2x5IGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnQuCiAJCSAqIFRoZSByaWdodCBuZWlnaGJvciBpcyBjb250aWd1b3VzLCB0aGUgbGVmdCBpcyBub3QuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMRnxSRnxSQyIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCwgbmV3LT5icl9zdGFydGJsb2NrKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsCiAJCQlQUkVWLmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50KTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIkxGfFJGfFJDIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOworCiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeDsKLQkJWEZTX0JNQVBfVFJBQ0VfREVMRVRFKCJMRnxSRnxSQyIsIGlwLCBpZHggKyAxLCAxLCBYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4ICsgMSwgMSk7CisJCXhmc19pZXh0X3JlbW92ZShpcCwgaWR4ICsgMSwgMSwgc3RhdGUpOwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfREVYVDsKIAkJZWxzZSB7CkBAIC05NTYsMTUgKzg3MywxNiBAQAogCQkJUklHSFQuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0syKExFRlRfRklMTElORywgUklHSFRfRklMTElORyk6CisJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfUklHSFRfRklMTElORzoKIAkJLyoKIAkJICogRmlsbGluZyBpbiBhbGwgb2YgYSBwcmV2aW91c2x5IGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnQuCiAJCSAqIE5laXRoZXIgdGhlIGxlZnQgbm9yIHJpZ2h0IG5laWdoYm9ycyBhcmUgY29udGlndW91cyB3aXRoCiAJCSAqIHRoZSBuZXcgb25lLgogCQkgKi8KLQkJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURSgiTEZ8UkYiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsIG5ldy0+YnJfc3RhcnRibG9jayk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxSRiIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKKwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHg7CiAJCWlwLT5pX2QuZGlfbmV4dGVudHMrKzsKIAkJaWYgKGN1ciA9PSBOVUxMKQpAQCAtOTg3LDE5ICs5MDUsMjAgQEAKIAkJdGVtcDIgPSBuZXctPmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLMihMRUZUX0ZJTExJTkcsIExFRlRfQ09OVElHKToKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRzoKIAkJLyoKIAkJICogRmlsbGluZyBpbiB0aGUgZmlyc3QgcGFydCBvZiBhIHByZXZpb3VzIGRlbGF5ZWQgYWxsb2NhdGlvbi4KIAkJICogVGhlIGxlZnQgbmVpZ2hib3IgaXMgY29udGlndW91cy4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGfExDIiwgaXAsIGlkeCAtIDEsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHggLSAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLAogCQkJTEVGVC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0b2ZmKGVwLAogCQkJUFJFVi5icl9zdGFydG9mZiArIG5ldy0+YnJfYmxvY2tjb3VudCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxMQyIsIGlwLCBpZHggLSAxLCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOworCiAJCXRlbXAgPSBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXctPmJyX2Jsb2NrY291bnQ7Ci0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGfExDIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLCB0ZW1wKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJaWYgKGN1ciA9PSBOVUxMKQpAQCAtMTAyMSw3ICs5NDAsNyBAQAogCQl0ZW1wID0gWEZTX0ZJTEJMS1NfTUlOKHhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcCksCiAJCQlzdGFydGJsb2NrdmFsKFBSRVYuYnJfc3RhcnRibG9jaykpOwogCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCwgbnVsbHN0YXJ0YmxvY2soKGludCl0ZW1wKSk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxMQyIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJKmRuZXcgPSB0ZW1wOwogCQkvKiBERUxUQTogVGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIGluLWNvcmUgZXh0ZW50cyBtb3ZlZC4gKi8KIAkJdGVtcCA9IExFRlQuYnJfc3RhcnRvZmY7CkBAIC0xMDI5LDE4ICs5NDgsMTYgQEAKIAkJCVBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0soTEVGVF9GSUxMSU5HKToKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HOgogCQkvKgogCQkgKiBGaWxsaW5nIGluIHRoZSBmaXJzdCBwYXJ0IG9mIGEgcHJldmlvdXMgZGVsYXllZCBhbGxvY2F0aW9uLgogCQkgKiBUaGUgbGVmdCBuZWlnaGJvciBpcyBub3QgY29udGlndW91cy4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9zdGFydG9mZihlcCwgbmV3X2VuZG9mZik7CiAJCXRlbXAgPSBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXctPmJyX2Jsb2NrY291bnQ7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLCB0ZW1wKTsKLQkJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKCJMRiIsIGlwLCBpZHgsIDEsIG5ldywgTlVMTCwKLQkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHgsIDEsIG5ldyk7CisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4LCAxLCBuZXcsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTEwNzEsMjcgKzk4OCwyNyBAQAogCQkJKGN1ciA/IGN1ci0+YmNfcHJpdmF0ZS5iLmFsbG9jYXRlZCA6IDApKTsKIAkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4ICsgMSk7CiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKGVwLCBudWxsc3RhcnRibG9jaygoaW50KXRlbXApKTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIkxGIiwgaXAsIGlkeCArIDEsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4ICsgMSwgc3RhdGUsIF9USElTX0lQXyk7CiAJCSpkbmV3ID0gdGVtcDsKIAkJLyogREVMVEE6IE9uZSBpbi1jb3JlIGV4dGVudCBpcyBzcGxpdCBpbiB0d28uICovCiAJCXRlbXAgPSBQUkVWLmJyX3N0YXJ0b2ZmOwogCQl0ZW1wMiA9IFBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0syKFJJR0hUX0ZJTExJTkcsIFJJR0hUX0NPTlRJRyk6CisJY2FzZSBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKIAkJLyoKIAkJICogRmlsbGluZyBpbiB0aGUgbGFzdCBwYXJ0IG9mIGEgcHJldmlvdXMgZGVsYXllZCBhbGxvY2F0aW9uLgogCQkgKiBUaGUgcmlnaHQgbmVpZ2hib3IgaXMgY29udGlndW91cyB3aXRoIHRoZSBuZXcgYWxsb2NhdGlvbi4KIAkJICovCiAJCXRlbXAgPSBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXctPmJyX2Jsb2NrY291bnQ7Ci0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIlJGfFJDIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7Ci0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIlJGfFJDIiwgaXAsIGlkeCArIDEsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHggKyAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwogCQl4ZnNfYm1idF9zZXRfYWxsZih4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4ICsgMSksCiAJCQluZXctPmJyX3N0YXJ0b2ZmLCBuZXctPmJyX3N0YXJ0YmxvY2ssCiAJCQluZXctPmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50LAogCQkJUklHSFQuYnJfc3RhdGUpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiUkZ8UkMiLCBpcCwgaWR4ICsgMSwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggKyAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4ICsgMTsKIAkJaWYgKGN1ciA9PSBOVUxMKQogCQkJcnZhbCA9IFhGU19JTE9HX0RFWFQ7CkBAIC0xMTEyLDcgKzEwMjksNyBAQAogCQl0ZW1wID0gWEZTX0ZJTEJMS1NfTUlOKHhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcCksCiAJCQlzdGFydGJsb2NrdmFsKFBSRVYuYnJfc3RhcnRibG9jaykpOwogCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCwgbnVsbHN0YXJ0YmxvY2soKGludCl0ZW1wKSk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJSRnxSQyIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJKmRuZXcgPSB0ZW1wOwogCQkvKiBERUxUQTogVGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIGluLWNvcmUgZXh0ZW50cyBtb3ZlZC4gKi8KIAkJdGVtcCA9IFBSRVYuYnJfc3RhcnRvZmY7CkBAIC0xMTIwLDE3ICsxMDM3LDE1IEBACiAJCQlSSUdIVC5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAotCWNhc2UgTUFTSyhSSUdIVF9GSUxMSU5HKToKKwljYXNlIEJNQVBfUklHSFRfRklMTElORzoKIAkJLyoKIAkJICogRmlsbGluZyBpbiB0aGUgbGFzdCBwYXJ0IG9mIGEgcHJldmlvdXMgZGVsYXllZCBhbGxvY2F0aW9uLgogCQkgKiBUaGUgcmlnaHQgbmVpZ2hib3IgaXMgbm90IGNvbnRpZ3VvdXMuCiAJCSAqLwogCQl0ZW1wID0gUFJFVi5icl9ibG9ja2NvdW50IC0gbmV3LT5icl9ibG9ja2NvdW50OwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJSRiIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7Ci0JCVhGU19CTUFQX1RSQUNFX0lOU0VSVCgiUkYiLCBpcCwgaWR4ICsgMSwgMSwgbmV3LCBOVUxMLAotCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCXhmc19pZXh0X2luc2VydChpZnAsIGlkeCArIDEsIDEsIG5ldyk7CisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4ICsgMSwgMSwgbmV3LCBzdGF0ZSk7CiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeCArIDE7CiAJCWlwLT5pX2QuZGlfbmV4dGVudHMrKzsKIAkJaWYgKGN1ciA9PSBOVUxMKQpAQCAtMTE2MSw3ICsxMDc2LDcgQEAKIAkJCShjdXIgPyBjdXItPmJjX3ByaXZhdGUuYi5hbGxvY2F0ZWQgOiAwKSk7CiAJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKGVwLCBudWxsc3RhcnRibG9jaygoaW50KXRlbXApKTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIlJGIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQkqZG5ldyA9IHRlbXA7CiAJCS8qIERFTFRBOiBPbmUgaW4tY29yZSBleHRlbnQgaXMgc3BsaXQgaW4gdHdvLiAqLwogCQl0ZW1wID0gUFJFVi5icl9zdGFydG9mZjsKQEAgLTExNzUsNyArMTA5MCw3IEBACiAJCSAqIFRoaXMgY2FzZSBpcyBhdm9pZGVkIGFsbW9zdCBhbGwgdGhlIHRpbWUuCiAJCSAqLwogCQl0ZW1wID0gbmV3LT5icl9zdGFydG9mZiAtIFBSRVYuYnJfc3RhcnRvZmY7Ci0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIjAiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCAwLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7CiAJCXJbMF0gPSAqbmV3OwogCQlyWzFdLmJyX3N0YXRlID0gUFJFVi5icl9zdGF0ZTsKQEAgLTExODMsOSArMTA5OCw3IEBACiAJCXJbMV0uYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOwogCQl0ZW1wMiA9IFBSRVYuYnJfc3RhcnRvZmYgKyBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXdfZW5kb2ZmOwogCQlyWzFdLmJyX2Jsb2NrY291bnQgPSB0ZW1wMjsKLQkJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKCIwIiwgaXAsIGlkeCArIDEsIDIsICZyWzBdLCAmclsxXSwKLQkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHggKyAxLCAyLCAmclswXSk7CisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4ICsgMSwgMiwgJnJbMF0sIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4ICsgMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cysrOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xMjQyLDI0ICsxMTU1LDI0IEBACiAJCX0KIAkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsIG51bGxzdGFydGJsb2NrKChpbnQpdGVtcCkpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiMCIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCIwIiwgaXAsIGlkeCArIDIsIFhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4ICsgMiwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggKyAyKSwKIAkJCW51bGxzdGFydGJsb2NrKChpbnQpdGVtcDIpKTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIjAiLCBpcCwgaWR4ICsgMiwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggKyAyLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJKmRuZXcgPSB0ZW1wICsgdGVtcDI7CiAJCS8qIERFTFRBOiBPbmUgaW4tY29yZSBleHRlbnQgaXMgc3BsaXQgaW4gdGhyZWUuICovCiAJCXRlbXAgPSBQUkVWLmJyX3N0YXJ0b2ZmOwogCQl0ZW1wMiA9IFBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0szKExFRlRfRklMTElORywgTEVGVF9DT05USUcsIFJJR0hUX0NPTlRJRyk6Ci0JY2FzZSBNQVNLMyhSSUdIVF9GSUxMSU5HLCBMRUZUX0NPTlRJRywgUklHSFRfQ09OVElHKToKLQljYXNlIE1BU0syKExFRlRfRklMTElORywgUklHSFRfQ09OVElHKToKLQljYXNlIE1BU0syKFJJR0hUX0ZJTExJTkcsIExFRlRfQ09OVElHKToKLQljYXNlIE1BU0syKExFRlRfQ09OVElHLCBSSUdIVF9DT05USUcpOgotCWNhc2UgTUFTSyhMRUZUX0NPTlRJRyk6Ci0JY2FzZSBNQVNLKFJJR0hUX0NPTlRJRyk6CisJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKKwljYXNlIEJNQVBfUklHSFRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CisJY2FzZSBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX0xFRlRfQ09OVElHOgorCWNhc2UgQk1BUF9MRUZUX0NPTlRJRyB8IEJNQVBfUklHSFRfQ09OVElHOgorCWNhc2UgQk1BUF9MRUZUX0NPTlRJRzoKKwljYXNlIEJNQVBfUklHSFRfQ09OVElHOgogCQkvKgogCQkgKiBUaGVzZSBjYXNlcyBhcmUgYWxsIGltcG9zc2libGUuCiAJCSAqLwpAQCAtMTI3OSwxNCArMTE5Miw2IEBACiAjdW5kZWYJTEVGVAogI3VuZGVmCVJJR0hUCiAjdW5kZWYJUFJFVgotI3VuZGVmCU1BU0sKLSN1bmRlZglNQVNLMgotI3VuZGVmCU1BU0szCi0jdW5kZWYJTUFTSzQKLSN1bmRlZglTVEFURV9TRVQKLSN1bmRlZglTVEFURV9URVNUCi0jdW5kZWYJU1RBVEVfU0VUX1RFU1QKLSN1bmRlZglTV0lUQ0hfU1RBVEUKIH0KIAogLyoKQEAgLTEzMTYsMjcgKzEyMjEsMTAgQEAKIAlpbnQJCQlzdGF0ZSA9IDA7Lyogc3RhdGUgYml0cywgYWNjZXNzZWQgdGhydSBtYWNyb3MgKi8KIAl4ZnNfZmlsYmxrc190CQl0ZW1wPTA7CiAJeGZzX2ZpbGJsa3NfdAkJdGVtcDI9MDsKLQllbnVtIHsJCQkJLyogYml0IG51bWJlciBkZWZpbml0aW9ucyBmb3Igc3RhdGUgKi8KLQkJTEVGVF9DT05USUcsCVJJR0hUX0NPTlRJRywKLQkJTEVGVF9GSUxMSU5HLAlSSUdIVF9GSUxMSU5HLAotCQlMRUZUX0RFTEFZLAlSSUdIVF9ERUxBWSwKLQkJTEVGVF9WQUxJRCwJUklHSFRfVkFMSUQKLQl9OwogCiAjZGVmaW5lCUxFRlQJCXJbMF0KICNkZWZpbmUJUklHSFQJCXJbMV0KICNkZWZpbmUJUFJFVgkJclsyXQotI2RlZmluZQlNQVNLKGIpCQkoMSA8PCAoYikpCi0jZGVmaW5lCU1BU0syKGEsYikJKE1BU0soYSkgfCBNQVNLKGIpKQotI2RlZmluZQlNQVNLMyhhLGIsYykJKE1BU0syKGEsYikgfCBNQVNLKGMpKQotI2RlZmluZQlNQVNLNChhLGIsYyxkKQkoTUFTSzMoYSxiLGMpIHwgTUFTSyhkKSkKLSNkZWZpbmUJU1RBVEVfU0VUKGIsdikJKCh2KSA/IChzdGF0ZSB8PSBNQVNLKGIpKSA6IChzdGF0ZSAmPSB+TUFTSyhiKSkpCi0jZGVmaW5lCVNUQVRFX1RFU1QoYikJKHN0YXRlICYgTUFTSyhiKSkKLSNkZWZpbmUJU1RBVEVfU0VUX1RFU1QoYix2KQkoKHYpID8gKChzdGF0ZSB8PSBNQVNLKGIpKSwgMSkgOiBcCi0JCQkJICAgICAgICgoc3RhdGUgJj0gfk1BU0soYikpLCAwKSkKLSNkZWZpbmUJU1dJVENIX1NUQVRFCQlcCi0JKHN0YXRlICYgTUFTSzQoTEVGVF9GSUxMSU5HLCBSSUdIVF9GSUxMSU5HLCBMRUZUX0NPTlRJRywgUklHSFRfQ09OVElHKSkKLQogCS8qCiAJICogU2V0IHVwIGEgYnVuY2ggb2YgdmFyaWFibGVzIHRvIG1ha2UgdGhlIHRlc3RzIHNpbXBsZXIuCiAJICovCkBAIC0xMzUyLDY4ICsxMjQwLDc4IEBACiAJbmV3X2VuZG9mZiA9IG5ldy0+YnJfc3RhcnRvZmYgKyBuZXctPmJyX2Jsb2NrY291bnQ7CiAJQVNTRVJUKFBSRVYuYnJfc3RhcnRvZmYgPD0gbmV3LT5icl9zdGFydG9mZik7CiAJQVNTRVJUKFBSRVYuYnJfc3RhcnRvZmYgKyBQUkVWLmJyX2Jsb2NrY291bnQgPj0gbmV3X2VuZG9mZik7CisKIAkvKgogCSAqIFNldCBmbGFncyBkZXRlcm1pbmluZyB3aGF0IHBhcnQgb2YgdGhlIHByZXZpb3VzIG9sZGV4dCBhbGxvY2F0aW9uCiAJICogZXh0ZW50IGlzIGJlaW5nIHJlcGxhY2VkIGJ5IGEgbmV3ZXh0IGFsbG9jYXRpb24uCiAJICovCi0JU1RBVEVfU0VUKExFRlRfRklMTElORywgUFJFVi5icl9zdGFydG9mZiA9PSBuZXctPmJyX3N0YXJ0b2ZmKTsKLQlTVEFURV9TRVQoUklHSFRfRklMTElORywKLQkJUFJFVi5icl9zdGFydG9mZiArIFBSRVYuYnJfYmxvY2tjb3VudCA9PSBuZXdfZW5kb2ZmKTsKKwlpZiAoUFJFVi5icl9zdGFydG9mZiA9PSBuZXctPmJyX3N0YXJ0b2ZmKQorCQlzdGF0ZSB8PSBCTUFQX0xFRlRfRklMTElORzsKKwlpZiAoUFJFVi5icl9zdGFydG9mZiArIFBSRVYuYnJfYmxvY2tjb3VudCA9PSBuZXdfZW5kb2ZmKQorCQlzdGF0ZSB8PSBCTUFQX1JJR0hUX0ZJTExJTkc7CisKIAkvKgogCSAqIENoZWNrIGFuZCBzZXQgZmxhZ3MgaWYgdGhpcyBzZWdtZW50IGhhcyBhIGxlZnQgbmVpZ2hib3IuCiAJICogRG9uJ3Qgc2V0IGNvbnRpZ3VvdXMgaWYgdGhlIGNvbWJpbmVkIGV4dGVudCB3b3VsZCBiZSB0b28gbGFyZ2UuCiAJICovCi0JaWYgKFNUQVRFX1NFVF9URVNUKExFRlRfVkFMSUQsIGlkeCA+IDApKSB7CisJaWYgKGlkeCA+IDApIHsKKwkJc3RhdGUgfD0gQk1BUF9MRUZUX1ZBTElEOwogCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwgJkxFRlQpOwotCQlTVEFURV9TRVQoTEVGVF9ERUxBWSwgaXNudWxsc3RhcnRibG9jayhMRUZULmJyX3N0YXJ0YmxvY2spKTsKKworCQlpZiAoaXNudWxsc3RhcnRibG9jayhMRUZULmJyX3N0YXJ0YmxvY2spKQorCQkJc3RhdGUgfD0gQk1BUF9MRUZUX0RFTEFZOwogCX0KLQlTVEFURV9TRVQoTEVGVF9DT05USUcsCi0JCVNUQVRFX1RFU1QoTEVGVF9WQUxJRCkgJiYgIVNUQVRFX1RFU1QoTEVGVF9ERUxBWSkgJiYKLQkJTEVGVC5icl9zdGFydG9mZiArIExFRlQuYnJfYmxvY2tjb3VudCA9PSBuZXctPmJyX3N0YXJ0b2ZmICYmCi0JCUxFRlQuYnJfc3RhcnRibG9jayArIExFRlQuYnJfYmxvY2tjb3VudCA9PSBuZXctPmJyX3N0YXJ0YmxvY2sgJiYKLQkJTEVGVC5icl9zdGF0ZSA9PSBuZXdleHQgJiYKLQkJTEVGVC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTik7CisKKwlpZiAoKHN0YXRlICYgQk1BUF9MRUZUX1ZBTElEKSAmJiAhKHN0YXRlICYgQk1BUF9MRUZUX0RFTEFZKSAmJgorCSAgICBMRUZULmJyX3N0YXJ0b2ZmICsgTEVGVC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRvZmYgJiYKKwkgICAgTEVGVC5icl9zdGFydGJsb2NrICsgTEVGVC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRibG9jayAmJgorCSAgICBMRUZULmJyX3N0YXRlID09IG5ld2V4dCAmJgorCSAgICBMRUZULmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgPD0gTUFYRVhUTEVOKQorCQlzdGF0ZSB8PSBCTUFQX0xFRlRfQ09OVElHOworCiAJLyoKIAkgKiBDaGVjayBhbmQgc2V0IGZsYWdzIGlmIHRoaXMgc2VnbWVudCBoYXMgYSByaWdodCBuZWlnaGJvci4KIAkgKiBEb24ndCBzZXQgY29udGlndW91cyBpZiB0aGUgY29tYmluZWQgZXh0ZW50IHdvdWxkIGJlIHRvbyBsYXJnZS4KIAkgKiBBbHNvIGNoZWNrIGZvciBhbGwtdGhyZWUtY29udGlndW91cyBiZWluZyB0b28gbGFyZ2UuCiAJICovCi0JaWYgKFNUQVRFX1NFVF9URVNUKFJJR0hUX1ZBTElELAotCQkJaWR4IDwKLQkJCWlwLT5pX2RmLmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSAtIDEpKSB7CisJaWYgKGlkeCA8IGlwLT5pX2RmLmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSAtIDEpIHsKKwkJc3RhdGUgfD0gQk1BUF9SSUdIVF9WQUxJRDsKIAkJeGZzX2JtYnRfZ2V0X2FsbCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4ICsgMSksICZSSUdIVCk7Ci0JCVNUQVRFX1NFVChSSUdIVF9ERUxBWSwgaXNudWxsc3RhcnRibG9jayhSSUdIVC5icl9zdGFydGJsb2NrKSk7CisJCWlmIChpc251bGxzdGFydGJsb2NrKFJJR0hULmJyX3N0YXJ0YmxvY2spKQorCQkJc3RhdGUgfD0gQk1BUF9SSUdIVF9ERUxBWTsKIAl9Ci0JU1RBVEVfU0VUKFJJR0hUX0NPTlRJRywKLQkJU1RBVEVfVEVTVChSSUdIVF9WQUxJRCkgJiYgIVNUQVRFX1RFU1QoUklHSFRfREVMQVkpICYmCi0JCW5ld19lbmRvZmYgPT0gUklHSFQuYnJfc3RhcnRvZmYgJiYKLQkJbmV3LT5icl9zdGFydGJsb2NrICsgbmV3LT5icl9ibG9ja2NvdW50ID09Ci0JCSAgICBSSUdIVC5icl9zdGFydGJsb2NrICYmCi0JCW5ld2V4dCA9PSBSSUdIVC5icl9zdGF0ZSAmJgotCQluZXctPmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTiAmJgotCQkoKHN0YXRlICYgTUFTSzMoTEVGVF9DT05USUcsIExFRlRfRklMTElORywgUklHSFRfRklMTElORykpICE9Ci0JCSAgTUFTSzMoTEVGVF9DT05USUcsIExFRlRfRklMTElORywgUklHSFRfRklMTElORykgfHwKLQkJIExFRlQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCArIFJJR0hULmJyX2Jsb2NrY291bnQKLQkJICAgICA8PSBNQVhFWFRMRU4pKTsKKworCWlmICgoc3RhdGUgJiBCTUFQX1JJR0hUX1ZBTElEKSAmJiAhKHN0YXRlICYgQk1BUF9SSUdIVF9ERUxBWSkgJiYKKwkgICAgbmV3X2VuZG9mZiA9PSBSSUdIVC5icl9zdGFydG9mZiAmJgorCSAgICBuZXctPmJyX3N0YXJ0YmxvY2sgKyBuZXctPmJyX2Jsb2NrY291bnQgPT0gUklHSFQuYnJfc3RhcnRibG9jayAmJgorCSAgICBuZXdleHQgPT0gUklHSFQuYnJfc3RhdGUgJiYKKwkgICAgbmV3LT5icl9ibG9ja2NvdW50ICsgUklHSFQuYnJfYmxvY2tjb3VudCA8PSBNQVhFWFRMRU4gJiYKKwkgICAgKChzdGF0ZSAmIChCTUFQX0xFRlRfQ09OVElHIHwgQk1BUF9MRUZUX0ZJTExJTkcgfAorCQkgICAgICAgQk1BUF9SSUdIVF9GSUxMSU5HKSkgIT0KKwkJICAgICAgKEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX0xFRlRfRklMTElORyB8CisJCSAgICAgICBCTUFQX1JJR0hUX0ZJTExJTkcpIHx8CisJICAgICBMRUZULmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50CisJCQk8PSBNQVhFWFRMRU4pKQorCQlzdGF0ZSB8PSBCTUFQX1JJR0hUX0NPTlRJRzsKKwogCS8qCiAJICogU3dpdGNoIG91dCBiYXNlZCBvbiB0aGUgRklMTElORyBhbmQgQ09OVElHIHN0YXRlIGJpdHMuCiAJICovCi0Jc3dpdGNoIChTV0lUQ0hfU1RBVEUpIHsKLQotCWNhc2UgTUFTSzQoTEVGVF9GSUxMSU5HLCBSSUdIVF9GSUxMSU5HLCBMRUZUX0NPTlRJRywgUklHSFRfQ09OVElHKToKKwlzd2l0Y2ggKHN0YXRlICYgKEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRyB8CisJCQkgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUcpKSB7CisJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfAorCSAgICAgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CiAJCS8qCiAJCSAqIFNldHRpbmcgYWxsIG9mIGEgcHJldmlvdXMgb2xkZXh0IGV4dGVudCB0byBuZXdleHQuCiAJCSAqIFRoZSBsZWZ0IGFuZCByaWdodCBuZWlnaGJvcnMgYXJlIGJvdGggY29udGlndW91cyB3aXRoIG5ldy4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGfFJGfExDfFJDIiwgaXAsIGlkeCAtIDEsCi0JCQlYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwKIAkJCUxFRlQuYnJfYmxvY2tjb3VudCArIFBSRVYuYnJfYmxvY2tjb3VudCArCiAJCQlSSUdIVC5icl9ibG9ja2NvdW50KTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIkxGfFJGfExDfFJDIiwgaXAsIGlkeCAtIDEsCi0JCQlYRlNfREFUQV9GT1JLKTsKLQkJWEZTX0JNQVBfVFJBQ0VfREVMRVRFKCJMRnxSRnxMQ3xSQyIsIGlwLCBpZHgsIDIsIFhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9yZW1vdmUoaWZwLCBpZHgsIDIpOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CisKKwkJeGZzX2lleHRfcmVtb3ZlKGlwLCBpZHgsIDIsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cyAtPSAyOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xNDUwLDIwICsxMzQ4LDE4IEBACiAJCQlSSUdIVC5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAotCWNhc2UgTUFTSzMoTEVGVF9GSUxMSU5HLCBSSUdIVF9GSUxMSU5HLCBMRUZUX0NPTlRJRyk6CisJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfUklHSFRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUc6CiAJCS8qCiAJCSAqIFNldHRpbmcgYWxsIG9mIGEgcHJldmlvdXMgb2xkZXh0IGV4dGVudCB0byBuZXdleHQuCiAJCSAqIFRoZSBsZWZ0IG5laWdoYm9yIGlzIGNvbnRpZ3VvdXMsIHRoZSByaWdodCBpcyBub3QuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMRnxSRnxMQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlMRUZULmJyX2Jsb2NrY291bnQgKyBQUkVWLmJyX2Jsb2NrY291bnQpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiTEZ8UkZ8TEMiLCBpcCwgaWR4IC0gMSwKLQkJCVhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CisKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKLQkJWEZTX0JNQVBfVFJBQ0VfREVMRVRFKCJMRnxSRnxMQyIsIGlwLCBpZHgsIDEsIFhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9yZW1vdmUoaWZwLCBpZHgsIDEpOworCQl4ZnNfaWV4dF9yZW1vdmUoaXAsIGlkeCwgMSwgc3RhdGUpOwogCQlpcC0+aV9kLmRpX25leHRlbnRzLS07CiAJCWlmIChjdXIgPT0gTlVMTCkKIAkJCXJ2YWwgPSBYRlNfSUxPR19DT1JFIHwgWEZTX0lMT0dfREVYVDsKQEAgLTE0OTIsMjEgKzEzODgsMTggQEAKIAkJCVBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0szKExFRlRfRklMTElORywgUklHSFRfRklMTElORywgUklHSFRfQ09OVElHKToKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CiAJCS8qCiAJCSAqIFNldHRpbmcgYWxsIG9mIGEgcHJldmlvdXMgb2xkZXh0IGV4dGVudCB0byBuZXdleHQuCiAJCSAqIFRoZSByaWdodCBuZWlnaGJvciBpcyBjb250aWd1b3VzLCB0aGUgbGVmdCBpcyBub3QuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMRnxSRnxSQyIsIGlwLCBpZHgsCi0JCQlYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsCiAJCQlQUkVWLmJyX2Jsb2NrY291bnQgKyBSSUdIVC5icl9ibG9ja2NvdW50KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXRlKGVwLCBuZXdleHQpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiTEZ8UkZ8UkMiLCBpcCwgaWR4LAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHg7Ci0JCVhGU19CTUFQX1RSQUNFX0RFTEVURSgiTEZ8UkZ8UkMiLCBpcCwgaWR4ICsgMSwgMSwgWEZTX0RBVEFfRk9SSyk7Ci0JCXhmc19pZXh0X3JlbW92ZShpZnAsIGlkeCArIDEsIDEpOworCQl4ZnNfaWV4dF9yZW1vdmUoaXAsIGlkeCArIDEsIDEsIHN0YXRlKTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cy0tOwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfQ09SRSB8IFhGU19JTE9HX0RFWFQ7CkBAIC0xNTM1LDE3ICsxNDI4LDE2IEBACiAJCQlSSUdIVC5icl9ibG9ja2NvdW50OwogCQlicmVhazsKIAotCWNhc2UgTUFTSzIoTEVGVF9GSUxMSU5HLCBSSUdIVF9GSUxMSU5HKToKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9GSUxMSU5HOgogCQkvKgogCQkgKiBTZXR0aW5nIGFsbCBvZiBhIHByZXZpb3VzIG9sZGV4dCBleHRlbnQgdG8gbmV3ZXh0LgogCQkgKiBOZWl0aGVyIHRoZSBsZWZ0IG5vciByaWdodCBuZWlnaGJvcnMgYXJlIGNvbnRpZ3VvdXMgd2l0aAogCQkgKiB0aGUgbmV3IG9uZS4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGfFJGIiwgaXAsIGlkeCwKLQkJCVhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfc3RhdGUoZXAsIG5ld2V4dCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxSRiIsIGlwLCBpZHgsCi0JCQlYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CisKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfREVYVDsKQEAgLTE1NjYsMjcgKzE0NTgsMjUgQEAKIAkJdGVtcDIgPSBuZXctPmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLMihMRUZUX0ZJTExJTkcsIExFRlRfQ09OVElHKToKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9MRUZUX0NPTlRJRzoKIAkJLyoKIAkJICogU2V0dGluZyB0aGUgZmlyc3QgcGFydCBvZiBhIHByZXZpb3VzIG9sZGV4dCBleHRlbnQgdG8gbmV3ZXh0LgogCQkgKiBUaGUgbGVmdCBuZWlnaGJvciBpcyBjb250aWd1b3VzLgogCQkgKi8KLQkJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURSgiTEZ8TEMiLCBpcCwgaWR4IC0gMSwKLQkJCVhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHggLSAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLAogCQkJTEVGVC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0b2ZmKGVwLAogCQkJUFJFVi5icl9zdGFydG9mZiArIG5ldy0+YnJfYmxvY2tjb3VudCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxMQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGfExDIiwgaXAsIGlkeCwKLQkJCVhGU19EQVRBX0ZPUkspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CisKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsCiAJCQluZXctPmJyX3N0YXJ0YmxvY2sgKyBuZXctPmJyX2Jsb2NrY291bnQpOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwKIAkJCVBSRVYuYnJfYmxvY2tjb3VudCAtIG5ldy0+YnJfYmxvY2tjb3VudCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMRnxMQyIsIGlwLCBpZHgsCi0JCQlYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CisKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJaWYgKGN1ciA9PSBOVUxMKQogCQkJcnZhbCA9IFhGU19JTE9HX0RFWFQ7CkBAIC0xNjE3LDIyICsxNTA3LDIxIEBACiAJCQlQUkVWLmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLKExFRlRfRklMTElORyk6CisJY2FzZSBCTUFQX0xFRlRfRklMTElORzoKIAkJLyoKIAkJICogU2V0dGluZyB0aGUgZmlyc3QgcGFydCBvZiBhIHByZXZpb3VzIG9sZGV4dCBleHRlbnQgdG8gbmV3ZXh0LgogCQkgKiBUaGUgbGVmdCBuZWlnaGJvciBpcyBub3QgY29udGlndW91cy4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxGIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCUFTU0VSVChlcCAmJiB4ZnNfYm1idF9nZXRfc3RhdGUoZXApID09IG9sZGV4dCk7CiAJCXhmc19ibWJ0X3NldF9zdGFydG9mZihlcCwgbmV3X2VuZG9mZik7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLAogCQkJUFJFVi5icl9ibG9ja2NvdW50IC0gbmV3LT5icl9ibG9ja2NvdW50KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsCiAJCQluZXctPmJyX3N0YXJ0YmxvY2sgKyBuZXctPmJyX2Jsb2NrY291bnQpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiTEYiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKLQkJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKCJMRiIsIGlwLCBpZHgsIDEsIG5ldywgTlVMTCwKLQkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHgsIDEsIG5ldyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOworCisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4LCAxLCBuZXcsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTE2NjAsMjQgKzE1NDksMjEgQEAKIAkJdGVtcDIgPSBQUkVWLmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLMihSSUdIVF9GSUxMSU5HLCBSSUdIVF9DT05USUcpOgorCWNhc2UgQk1BUF9SSUdIVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CiAJCS8qCiAJCSAqIFNldHRpbmcgdGhlIGxhc3QgcGFydCBvZiBhIHByZXZpb3VzIG9sZGV4dCBleHRlbnQgdG8gbmV3ZXh0LgogCQkgKiBUaGUgcmlnaHQgbmVpZ2hib3IgaXMgY29udGlndW91cyB3aXRoIHRoZSBuZXcgYWxsb2NhdGlvbi4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIlJGfFJDIiwgaXAsIGlkeCwKLQkJCVhGU19EQVRBX0ZPUkspOwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJSRnxSQyIsIGlwLCBpZHggKyAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCArIDEsIHN0YXRlLCBfVEhJU19JUF8pOwogCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwKIAkJCVBSRVYuYnJfYmxvY2tjb3VudCAtIG5ldy0+YnJfYmxvY2tjb3VudCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJSRnxSQyIsIGlwLCBpZHgsCi0JCQlYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9hbGxmKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggKyAxKSwKIAkJCW5ldy0+YnJfc3RhcnRvZmYsIG5ldy0+YnJfc3RhcnRibG9jaywKIAkJCW5ldy0+YnJfYmxvY2tjb3VudCArIFJJR0hULmJyX2Jsb2NrY291bnQsIG5ld2V4dCk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJSRnxSQyIsIGlwLCBpZHggKyAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggKyAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKKwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfREVYVDsKQEAgLTE3MDcsMTggKzE1OTMsMTcgQEAKIAkJCVJJR0hULmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLKFJJR0hUX0ZJTExJTkcpOgorCWNhc2UgQk1BUF9SSUdIVF9GSUxMSU5HOgogCQkvKgogCQkgKiBTZXR0aW5nIHRoZSBsYXN0IHBhcnQgb2YgYSBwcmV2aW91cyBvbGRleHQgZXh0ZW50IHRvIG5ld2V4dC4KIAkJICogVGhlIHJpZ2h0IG5laWdoYm9yIGlzIG5vdCBjb250aWd1b3VzLgogCQkgKi8KLQkJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURSgiUkYiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsCiAJCQlQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXctPmJyX2Jsb2NrY291bnQpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiUkYiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKLQkJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKCJSRiIsIGlwLCBpZHggKyAxLCAxLCBuZXcsIE5VTEwsCi0JCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2lleHRfaW5zZXJ0KGlmcCwgaWR4ICsgMSwgMSwgbmV3KTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CisKKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHggKyAxLCAxLCBuZXcsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4ICsgMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cysrOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xNzU2LDE5ICsxNjQxLDE4IEBACiAJCSAqIG5ld2V4dC4gIENvbnRpZ3VpdHkgaXMgaW1wb3NzaWJsZSBoZXJlLgogCQkgKiBPbmUgZXh0ZW50IGJlY29tZXMgdGhyZWUgZXh0ZW50cy4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIjAiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsCiAJCQluZXctPmJyX3N0YXJ0b2ZmIC0gUFJFVi5icl9zdGFydG9mZik7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCIwIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOworCiAJCXJbMF0gPSAqbmV3OwogCQlyWzFdLmJyX3N0YXJ0b2ZmID0gbmV3X2VuZG9mZjsKIAkJclsxXS5icl9ibG9ja2NvdW50ID0KIAkJCVBSRVYuYnJfc3RhcnRvZmYgKyBQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXdfZW5kb2ZmOwogCQlyWzFdLmJyX3N0YXJ0YmxvY2sgPSBuZXctPmJyX3N0YXJ0YmxvY2sgKyBuZXctPmJyX2Jsb2NrY291bnQ7CiAJCXJbMV0uYnJfc3RhdGUgPSBvbGRleHQ7Ci0JCVhGU19CTUFQX1RSQUNFX0lOU0VSVCgiMCIsIGlwLCBpZHggKyAxLCAyLCAmclswXSwgJnJbMV0sCi0JCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2lleHRfaW5zZXJ0KGlmcCwgaWR4ICsgMSwgMiwgJnJbMF0pOworCQl4ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCArIDEsIDIsICZyWzBdLCBzdGF0ZSk7CiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeCArIDE7CiAJCWlwLT5pX2QuZGlfbmV4dGVudHMgKz0gMjsKIAkJaWYgKGN1ciA9PSBOVUxMKQpAQCAtMTgxMywxMyArMTY5NywxMyBAQAogCQl0ZW1wMiA9IFBSRVYuYnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0szKExFRlRfRklMTElORywgTEVGVF9DT05USUcsIFJJR0hUX0NPTlRJRyk6Ci0JY2FzZSBNQVNLMyhSSUdIVF9GSUxMSU5HLCBMRUZUX0NPTlRJRywgUklHSFRfQ09OVElHKToKLQljYXNlIE1BU0syKExFRlRfRklMTElORywgUklHSFRfQ09OVElHKToKLQljYXNlIE1BU0syKFJJR0hUX0ZJTExJTkcsIExFRlRfQ09OVElHKToKLQljYXNlIE1BU0syKExFRlRfQ09OVElHLCBSSUdIVF9DT05USUcpOgotCWNhc2UgTUFTSyhMRUZUX0NPTlRJRyk6Ci0JY2FzZSBNQVNLKFJJR0hUX0NPTlRJRyk6CisJY2FzZSBCTUFQX0xFRlRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKKwljYXNlIEJNQVBfUklHSFRfRklMTElORyB8IEJNQVBfTEVGVF9DT05USUcgfCBCTUFQX1JJR0hUX0NPTlRJRzoKKwljYXNlIEJNQVBfTEVGVF9GSUxMSU5HIHwgQk1BUF9SSUdIVF9DT05USUc6CisJY2FzZSBCTUFQX1JJR0hUX0ZJTExJTkcgfCBCTUFQX0xFRlRfQ09OVElHOgorCWNhc2UgQk1BUF9MRUZUX0NPTlRJRyB8IEJNQVBfUklHSFRfQ09OVElHOgorCWNhc2UgQk1BUF9MRUZUX0NPTlRJRzoKKwljYXNlIEJNQVBfUklHSFRfQ09OVElHOgogCQkvKgogCQkgKiBUaGVzZSBjYXNlcyBhcmUgYWxsIGltcG9zc2libGUuCiAJCSAqLwpAQCAtMTgzOSwxNCArMTcyMyw2IEBACiAjdW5kZWYJTEVGVAogI3VuZGVmCVJJR0hUCiAjdW5kZWYJUFJFVgotI3VuZGVmCU1BU0sKLSN1bmRlZglNQVNLMgotI3VuZGVmCU1BU0szCi0jdW5kZWYJTUFTSzQKLSN1bmRlZglTVEFURV9TRVQKLSN1bmRlZglTVEFURV9URVNUCi0jdW5kZWYJU1RBVEVfU0VUX1RFU1QKLSN1bmRlZglTV0lUQ0hfU1RBVEUKIH0KIAogLyoKQEAgLTE4NzIsNjIgKzE3NDgsNTcgQEAKIAlpbnQJCQlzdGF0ZTsgIC8qIHN0YXRlIGJpdHMsIGFjY2Vzc2VkIHRocnUgbWFjcm9zICovCiAJeGZzX2ZpbGJsa3NfdAkJdGVtcD0wOwkvKiB0ZW1wIGZvciBpbmRpcmVjdCBjYWxjdWxhdGlvbnMgKi8KIAl4ZnNfZmlsYmxrc190CQl0ZW1wMj0wOwotCWVudW0gewkJCQkvKiBiaXQgbnVtYmVyIGRlZmluaXRpb25zIGZvciBzdGF0ZSAqLwotCQlMRUZUX0NPTlRJRywJUklHSFRfQ09OVElHLAotCQlMRUZUX0RFTEFZLAlSSUdIVF9ERUxBWSwKLQkJTEVGVF9WQUxJRCwJUklHSFRfVkFMSUQKLQl9OwotCi0jZGVmaW5lCU1BU0soYikJCQkoMSA8PCAoYikpCi0jZGVmaW5lCU1BU0syKGEsYikJCShNQVNLKGEpIHwgTUFTSyhiKSkKLSNkZWZpbmUJU1RBVEVfU0VUKGIsdikJCSgodikgPyAoc3RhdGUgfD0gTUFTSyhiKSkgOiAoc3RhdGUgJj0gfk1BU0soYikpKQotI2RlZmluZQlTVEFURV9URVNUKGIpCQkoc3RhdGUgJiBNQVNLKGIpKQotI2RlZmluZQlTVEFURV9TRVRfVEVTVChiLHYpCSgodikgPyAoKHN0YXRlIHw9IE1BU0soYikpLCAxKSA6IFwKLQkJCQkgICAgICAgKChzdGF0ZSAmPSB+TUFTSyhiKSksIDApKQotI2RlZmluZQlTV0lUQ0hfU1RBVEUJCShzdGF0ZSAmIE1BU0syKExFRlRfQ09OVElHLCBSSUdIVF9DT05USUcpKQogCiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgWEZTX0RBVEFfRk9SSyk7CiAJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKIAlzdGF0ZSA9IDA7CiAJQVNTRVJUKGlzbnVsbHN0YXJ0YmxvY2sobmV3LT5icl9zdGFydGJsb2NrKSk7CisKIAkvKgogCSAqIENoZWNrIGFuZCBzZXQgZmxhZ3MgaWYgdGhpcyBzZWdtZW50IGhhcyBhIGxlZnQgbmVpZ2hib3IKIAkgKi8KLQlpZiAoU1RBVEVfU0VUX1RFU1QoTEVGVF9WQUxJRCwgaWR4ID4gMCkpIHsKKwlpZiAoaWR4ID4gMCkgeworCQlzdGF0ZSB8PSBCTUFQX0xFRlRfVkFMSUQ7CiAJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLCAmbGVmdCk7Ci0JCVNUQVRFX1NFVChMRUZUX0RFTEFZLCBpc251bGxzdGFydGJsb2NrKGxlZnQuYnJfc3RhcnRibG9jaykpOworCisJCWlmIChpc251bGxzdGFydGJsb2NrKGxlZnQuYnJfc3RhcnRibG9jaykpCisJCQlzdGF0ZSB8PSBCTUFQX0xFRlRfREVMQVk7CiAJfQorCiAJLyoKIAkgKiBDaGVjayBhbmQgc2V0IGZsYWdzIGlmIHRoZSBjdXJyZW50IChyaWdodCkgc2VnbWVudCBleGlzdHMuCiAJICogSWYgaXQgZG9lc24ndCBleGlzdCwgd2UncmUgY29udmVydGluZyB0aGUgaG9sZSBhdCBlbmQtb2YtZmlsZS4KIAkgKi8KLQlpZiAoU1RBVEVfU0VUX1RFU1QoUklHSFRfVkFMSUQsCi0JCQkgICBpZHggPAotCQkJICAgaXAtPmlfZGYuaWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKSkgeworCWlmIChpZHggPCBpcC0+aV9kZi5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpIHsKKwkJc3RhdGUgfD0gQk1BUF9SSUdIVF9WQUxJRDsKIAkJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJnJpZ2h0KTsKLQkJU1RBVEVfU0VUKFJJR0hUX0RFTEFZLCBpc251bGxzdGFydGJsb2NrKHJpZ2h0LmJyX3N0YXJ0YmxvY2spKTsKKworCQlpZiAoaXNudWxsc3RhcnRibG9jayhyaWdodC5icl9zdGFydGJsb2NrKSkKKwkJCXN0YXRlIHw9IEJNQVBfUklHSFRfREVMQVk7CiAJfQorCiAJLyoKIAkgKiBTZXQgY29udGlndWl0eSBmbGFncyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgbmVpZ2hib3JzLgogCSAqIERvbid0IGxldCBleHRlbnRzIGdldCB0b28gbGFyZ2UsIGV2ZW4gaWYgdGhlIHBpZWNlcyBhcmUgY29udGlndW91cy4KIAkgKi8KLQlTVEFURV9TRVQoTEVGVF9DT05USUcsCi0JCVNUQVRFX1RFU1QoTEVGVF9WQUxJRCkgJiYgU1RBVEVfVEVTVChMRUZUX0RFTEFZKSAmJgotCQlsZWZ0LmJyX3N0YXJ0b2ZmICsgbGVmdC5icl9ibG9ja2NvdW50ID09IG5ldy0+YnJfc3RhcnRvZmYgJiYKLQkJbGVmdC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTik7Ci0JU1RBVEVfU0VUKFJJR0hUX0NPTlRJRywKLQkJU1RBVEVfVEVTVChSSUdIVF9WQUxJRCkgJiYgU1RBVEVfVEVTVChSSUdIVF9ERUxBWSkgJiYKLQkJbmV3LT5icl9zdGFydG9mZiArIG5ldy0+YnJfYmxvY2tjb3VudCA9PSByaWdodC5icl9zdGFydG9mZiAmJgotCQluZXctPmJyX2Jsb2NrY291bnQgKyByaWdodC5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTiAmJgotCQkoIVNUQVRFX1RFU1QoTEVGVF9DT05USUcpIHx8Ci0JCSAobGVmdC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50ICsKLQkJICAgICByaWdodC5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTikpKTsKKwlpZiAoKHN0YXRlICYgQk1BUF9MRUZUX1ZBTElEKSAmJiAoc3RhdGUgJiBCTUFQX0xFRlRfREVMQVkpICYmCisJICAgIGxlZnQuYnJfc3RhcnRvZmYgKyBsZWZ0LmJyX2Jsb2NrY291bnQgPT0gbmV3LT5icl9zdGFydG9mZiAmJgorCSAgICBsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgPD0gTUFYRVhUTEVOKQorCQlzdGF0ZSB8PSBCTUFQX0xFRlRfQ09OVElHOworCisJaWYgKChzdGF0ZSAmIEJNQVBfUklHSFRfVkFMSUQpICYmIChzdGF0ZSAmIEJNQVBfUklHSFRfREVMQVkpICYmCisJICAgIG5ldy0+YnJfc3RhcnRvZmYgKyBuZXctPmJyX2Jsb2NrY291bnQgPT0gcmlnaHQuYnJfc3RhcnRvZmYgJiYKKwkgICAgbmV3LT5icl9ibG9ja2NvdW50ICsgcmlnaHQuYnJfYmxvY2tjb3VudCA8PSBNQVhFWFRMRU4gJiYKKwkgICAgKCEoc3RhdGUgJiBCTUFQX0xFRlRfQ09OVElHKSB8fAorCSAgICAgKGxlZnQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCArCisJICAgICAgcmlnaHQuYnJfYmxvY2tjb3VudCA8PSBNQVhFWFRMRU4pKSkKKwkJc3RhdGUgfD0gQk1BUF9SSUdIVF9DT05USUc7CisKIAkvKgogCSAqIFN3aXRjaCBvdXQgYmFzZWQgb24gdGhlIGNvbnRpZ3VpdHkgZmxhZ3MuCiAJICovCi0Jc3dpdGNoIChTV0lUQ0hfU1RBVEUpIHsKLQotCWNhc2UgTUFTSzIoTEVGVF9DT05USUcsIFJJR0hUX0NPTlRJRyk6CisJc3dpdGNoIChzdGF0ZSAmIChCTUFQX0xFRlRfQ09OVElHIHwgQk1BUF9SSUdIVF9DT05USUcpKSB7CisJY2FzZSBCTUFQX0xFRlRfQ09OVElHIHwgQk1BUF9SSUdIVF9DT05USUc6CiAJCS8qCiAJCSAqIE5ldyBhbGxvY2F0aW9uIGlzIGNvbnRpZ3VvdXMgd2l0aCBkZWxheWVkIGFsbG9jYXRpb25zCiAJCSAqIG9uIHRoZSBsZWZ0IGFuZCBvbiB0aGUgcmlnaHQuCkBAIC0xOTM1LDggKzE4MDYsOCBAQAogCQkgKi8KIAkJdGVtcCA9IGxlZnQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCArCiAJCQlyaWdodC5icl9ibG9ja2NvdW50OwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMQ3xSQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwgdGVtcCk7CiAJCW9sZGxlbiA9IHN0YXJ0YmxvY2t2YWwobGVmdC5icl9zdGFydGJsb2NrKSArCiAJCQlzdGFydGJsb2NrdmFsKG5ldy0+YnJfc3RhcnRibG9jaykgKwpAQCAtMTk0NCw1MyArMTgxNSw1MiBAQAogCQluZXdsZW4gPSB4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIHRlbXApOwogCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQludWxsc3RhcnRibG9jaygoaW50KW5ld2xlbikpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiTEN8UkMiLCBpcCwgaWR4IC0gMSwKLQkJCVhGU19EQVRBX0ZPUkspOwotCQlYRlNfQk1BUF9UUkFDRV9ERUxFVEUoIkxDfFJDIiwgaXAsIGlkeCwgMSwgWEZTX0RBVEFfRk9SSyk7Ci0JCXhmc19pZXh0X3JlbW92ZShpZnAsIGlkeCwgMSk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggLSAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKKworCQl4ZnNfaWV4dF9yZW1vdmUoaXAsIGlkeCwgMSwgc3RhdGUpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggLSAxOwogCQkvKiBERUxUQTogVHdvIGluLWNvcmUgZXh0ZW50cyB3ZXJlIHJlcGxhY2VkIGJ5IG9uZS4gKi8KIAkJdGVtcDIgPSB0ZW1wOwogCQl0ZW1wID0gbGVmdC5icl9zdGFydG9mZjsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0soTEVGVF9DT05USUcpOgorCWNhc2UgQk1BUF9MRUZUX0NPTlRJRzoKIAkJLyoKIAkJICogTmV3IGFsbG9jYXRpb24gaXMgY29udGlndW91cyB3aXRoIGEgZGVsYXllZCBhbGxvY2F0aW9uCiAJCSAqIG9uIHRoZSBsZWZ0LgogCQkgKiBNZXJnZSB0aGUgbmV3IGFsbG9jYXRpb24gd2l0aCB0aGUgbGVmdCBuZWlnaGJvci4KIAkJICovCiAJCXRlbXAgPSBsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQ7Ci0JCVhGU19CTUFQX1RSQUNFX1BSRV9VUERBVEUoIkxDIiwgaXAsIGlkeCAtIDEsCi0JCQlYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwgdGVtcCk7CiAJCW9sZGxlbiA9IHN0YXJ0YmxvY2t2YWwobGVmdC5icl9zdGFydGJsb2NrKSArCiAJCQlzdGFydGJsb2NrdmFsKG5ldy0+YnJfc3RhcnRibG9jayk7CiAJCW5ld2xlbiA9IHhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcCk7CiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwKIAkJCW51bGxzdGFydGJsb2NrKChpbnQpbmV3bGVuKSk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJMQyIsIGlwLCBpZHggLSAxLAotCQkJWEZTX0RBVEFfRk9SSyk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggLSAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKKwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggLSAxOwogCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGdyZXcgaW50byBhIGhvbGUuICovCiAJCXRlbXAyID0gdGVtcDsKIAkJdGVtcCA9IGxlZnQuYnJfc3RhcnRvZmY7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLKFJJR0hUX0NPTlRJRyk6CisJY2FzZSBCTUFQX1JJR0hUX0NPTlRJRzoKIAkJLyoKIAkJICogTmV3IGFsbG9jYXRpb24gaXMgY29udGlndW91cyB3aXRoIGEgZGVsYXllZCBhbGxvY2F0aW9uCiAJCSAqIG9uIHRoZSByaWdodC4KIAkJICogTWVyZ2UgdGhlIG5ldyBhbGxvY2F0aW9uIHdpdGggdGhlIHJpZ2h0IG5laWdoYm9yLgogCQkgKi8KLQkJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURSgiUkMiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJdGVtcCA9IG5ldy0+YnJfYmxvY2tjb3VudCArIHJpZ2h0LmJyX2Jsb2NrY291bnQ7CiAJCW9sZGxlbiA9IHN0YXJ0YmxvY2t2YWwobmV3LT5icl9zdGFydGJsb2NrKSArCiAJCQlzdGFydGJsb2NrdmFsKHJpZ2h0LmJyX3N0YXJ0YmxvY2spOwogCQluZXdsZW4gPSB4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIHRlbXApOwogCQl4ZnNfYm1idF9zZXRfYWxsZihlcCwgbmV3LT5icl9zdGFydG9mZiwKIAkJCW51bGxzdGFydGJsb2NrKChpbnQpbmV3bGVuKSwgdGVtcCwgcmlnaHQuYnJfc3RhdGUpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiUkMiLCBpcCwgaWR4LCBYRlNfREFUQV9GT1JLKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CisKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwogCQkvKiBERUxUQTogT25lIGluLWNvcmUgZXh0ZW50IGdyZXcgaW50byBhIGhvbGUuICovCiAJCXRlbXAyID0gdGVtcDsKQEAgLTIwMDQsOSArMTg3NCw3IEBACiAJCSAqIEluc2VydCBhIG5ldyBlbnRyeS4KIAkJICovCiAJCW9sZGxlbiA9IG5ld2xlbiA9IDA7Ci0JCVhGU19CTUFQX1RSQUNFX0lOU0VSVCgiMCIsIGlwLCBpZHgsIDEsIG5ldywgTlVMTCwKLQkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHgsIDEsIG5ldyk7CisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4LCAxLCBuZXcsIHN0YXRlKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwogCQkvKiBERUxUQTogQSBuZXcgaW4tY29yZSBleHRlbnQgd2FzIGFkZGVkIGluIGEgaG9sZS4gKi8KIAkJdGVtcDIgPSBuZXctPmJyX2Jsb2NrY291bnQ7CkBAIC0yMDMwLDEyICsxODk4LDYgQEAKIAl9CiAJKmxvZ2ZsYWdzcCA9IDA7CiAJcmV0dXJuIDA7Ci0jdW5kZWYJTUFTSwotI3VuZGVmCU1BU0syCi0jdW5kZWYJU1RBVEVfU0VUCi0jdW5kZWYJU1RBVEVfVEVTVAotI3VuZGVmCVNUQVRFX1NFVF9URVNUCi0jdW5kZWYJU1dJVENIX1NUQVRFCiB9CiAKIC8qCkBAIC0yMDYyLDgzICsxOTI0LDc1IEBACiAJaW50CQkJc3RhdGU7CS8qIHN0YXRlIGJpdHMsIGFjY2Vzc2VkIHRocnUgbWFjcm9zICovCiAJeGZzX2ZpbGJsa3NfdAkJdGVtcD0wOwogCXhmc19maWxibGtzX3QJCXRlbXAyPTA7Ci0JZW51bSB7CQkJCS8qIGJpdCBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHN0YXRlICovCi0JCUxFRlRfQ09OVElHLAlSSUdIVF9DT05USUcsCi0JCUxFRlRfREVMQVksCVJJR0hUX0RFTEFZLAotCQlMRUZUX1ZBTElELAlSSUdIVF9WQUxJRAotCX07Ci0KLSNkZWZpbmUJTUFTSyhiKQkJCSgxIDw8IChiKSkKLSNkZWZpbmUJTUFTSzIoYSxiKQkJKE1BU0soYSkgfCBNQVNLKGIpKQotI2RlZmluZQlTVEFURV9TRVQoYix2KQkJKCh2KSA/IChzdGF0ZSB8PSBNQVNLKGIpKSA6IChzdGF0ZSAmPSB+TUFTSyhiKSkpCi0jZGVmaW5lCVNUQVRFX1RFU1QoYikJCShzdGF0ZSAmIE1BU0soYikpCi0jZGVmaW5lCVNUQVRFX1NFVF9URVNUKGIsdikJKCh2KSA/ICgoc3RhdGUgfD0gTUFTSyhiKSksIDEpIDogXAotCQkJCSAgICAgICAoKHN0YXRlICY9IH5NQVNLKGIpKSwgMCkpCi0jZGVmaW5lCVNXSVRDSF9TVEFURQkJKHN0YXRlICYgTUFTSzIoTEVGVF9DT05USUcsIFJJR0hUX0NPTlRJRykpCiAKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwogCUFTU0VSVChpZHggPD0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpOwogCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CiAJc3RhdGUgPSAwOworCisJaWYgKHdoaWNoZm9yayA9PSBYRlNfQVRUUl9GT1JLKQorCQlzdGF0ZSB8PSBCTUFQX0FUVFJGT1JLOworCiAJLyoKIAkgKiBDaGVjayBhbmQgc2V0IGZsYWdzIGlmIHRoaXMgc2VnbWVudCBoYXMgYSBsZWZ0IG5laWdoYm9yLgogCSAqLwotCWlmIChTVEFURV9TRVRfVEVTVChMRUZUX1ZBTElELCBpZHggPiAwKSkgeworCWlmIChpZHggPiAwKSB7CisJCXN0YXRlIHw9IEJNQVBfTEVGVF9WQUxJRDsKIAkJeGZzX2JtYnRfZ2V0X2FsbCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksICZsZWZ0KTsKLQkJU1RBVEVfU0VUKExFRlRfREVMQVksIGlzbnVsbHN0YXJ0YmxvY2sobGVmdC5icl9zdGFydGJsb2NrKSk7CisJCWlmIChpc251bGxzdGFydGJsb2NrKGxlZnQuYnJfc3RhcnRibG9jaykpCisJCQlzdGF0ZSB8PSBCTUFQX0xFRlRfREVMQVk7CiAJfQorCiAJLyoKIAkgKiBDaGVjayBhbmQgc2V0IGZsYWdzIGlmIHRoaXMgc2VnbWVudCBoYXMgYSBjdXJyZW50IHZhbHVlLgogCSAqIE5vdCB0cnVlIGlmIHdlJ3JlIGluc2VydGluZyBpbnRvIHRoZSAiaG9sZSIgYXQgZW9mLgogCSAqLwotCWlmIChTVEFURV9TRVRfVEVTVChSSUdIVF9WQUxJRCwKLQkJCSAgIGlkeCA8Ci0JCQkgICBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSkpIHsKKwlpZiAoaWR4IDwgaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpIHsKKwkJc3RhdGUgfD0gQk1BUF9SSUdIVF9WQUxJRDsKIAkJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJnJpZ2h0KTsKLQkJU1RBVEVfU0VUKFJJR0hUX0RFTEFZLCBpc251bGxzdGFydGJsb2NrKHJpZ2h0LmJyX3N0YXJ0YmxvY2spKTsKKwkJaWYgKGlzbnVsbHN0YXJ0YmxvY2socmlnaHQuYnJfc3RhcnRibG9jaykpCisJCQlzdGF0ZSB8PSBCTUFQX1JJR0hUX0RFTEFZOwogCX0KKwogCS8qCiAJICogV2UncmUgaW5zZXJ0aW5nIGEgcmVhbCBhbGxvY2F0aW9uIGJldHdlZW4gImxlZnQiIGFuZCAicmlnaHQiLgogCSAqIFNldCB0aGUgY29udGlndWl0eSBmbGFncy4gIERvbid0IGxldCBleHRlbnRzIGdldCB0b28gbGFyZ2UuCiAJICovCi0JU1RBVEVfU0VUKExFRlRfQ09OVElHLAotCQlTVEFURV9URVNUKExFRlRfVkFMSUQpICYmICFTVEFURV9URVNUKExFRlRfREVMQVkpICYmCi0JCWxlZnQuYnJfc3RhcnRvZmYgKyBsZWZ0LmJyX2Jsb2NrY291bnQgPT0gbmV3LT5icl9zdGFydG9mZiAmJgotCQlsZWZ0LmJyX3N0YXJ0YmxvY2sgKyBsZWZ0LmJyX2Jsb2NrY291bnQgPT0gbmV3LT5icl9zdGFydGJsb2NrICYmCi0JCWxlZnQuYnJfc3RhdGUgPT0gbmV3LT5icl9zdGF0ZSAmJgotCQlsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgPD0gTUFYRVhUTEVOKTsKLQlTVEFURV9TRVQoUklHSFRfQ09OVElHLAotCQlTVEFURV9URVNUKFJJR0hUX1ZBTElEKSAmJiAhU1RBVEVfVEVTVChSSUdIVF9ERUxBWSkgJiYKLQkJbmV3LT5icl9zdGFydG9mZiArIG5ldy0+YnJfYmxvY2tjb3VudCA9PSByaWdodC5icl9zdGFydG9mZiAmJgotCQluZXctPmJyX3N0YXJ0YmxvY2sgKyBuZXctPmJyX2Jsb2NrY291bnQgPT0KLQkJICAgIHJpZ2h0LmJyX3N0YXJ0YmxvY2sgJiYKLQkJbmV3LT5icl9zdGF0ZSA9PSByaWdodC5icl9zdGF0ZSAmJgotCQluZXctPmJyX2Jsb2NrY291bnQgKyByaWdodC5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTiAmJgotCQkoIVNUQVRFX1RFU1QoTEVGVF9DT05USUcpIHx8Ci0JCSBsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgKwotCQkgICAgIHJpZ2h0LmJyX2Jsb2NrY291bnQgPD0gTUFYRVhUTEVOKSk7CisJaWYgKChzdGF0ZSAmIEJNQVBfTEVGVF9WQUxJRCkgJiYgIShzdGF0ZSAmIEJNQVBfTEVGVF9ERUxBWSkgJiYKKwkgICAgbGVmdC5icl9zdGFydG9mZiArIGxlZnQuYnJfYmxvY2tjb3VudCA9PSBuZXctPmJyX3N0YXJ0b2ZmICYmCisJICAgIGxlZnQuYnJfc3RhcnRibG9jayArIGxlZnQuYnJfYmxvY2tjb3VudCA9PSBuZXctPmJyX3N0YXJ0YmxvY2sgJiYKKwkgICAgbGVmdC5icl9zdGF0ZSA9PSBuZXctPmJyX3N0YXRlICYmCisJICAgIGxlZnQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCA8PSBNQVhFWFRMRU4pCisJCXN0YXRlIHw9IEJNQVBfTEVGVF9DT05USUc7CisKKwlpZiAoKHN0YXRlICYgQk1BUF9SSUdIVF9WQUxJRCkgJiYgIShzdGF0ZSAmIEJNQVBfUklHSFRfREVMQVkpICYmCisJICAgIG5ldy0+YnJfc3RhcnRvZmYgKyBuZXctPmJyX2Jsb2NrY291bnQgPT0gcmlnaHQuYnJfc3RhcnRvZmYgJiYKKwkgICAgbmV3LT5icl9zdGFydGJsb2NrICsgbmV3LT5icl9ibG9ja2NvdW50ID09IHJpZ2h0LmJyX3N0YXJ0YmxvY2sgJiYKKwkgICAgbmV3LT5icl9zdGF0ZSA9PSByaWdodC5icl9zdGF0ZSAmJgorCSAgICBuZXctPmJyX2Jsb2NrY291bnQgKyByaWdodC5icl9ibG9ja2NvdW50IDw9IE1BWEVYVExFTiAmJgorCSAgICAoIShzdGF0ZSAmIEJNQVBfTEVGVF9DT05USUcpIHx8CisJICAgICBsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgKworCSAgICAgcmlnaHQuYnJfYmxvY2tjb3VudCA8PSBNQVhFWFRMRU4pKQorCQlzdGF0ZSB8PSBCTUFQX1JJR0hUX0NPTlRJRzsKIAogCWVycm9yID0gMDsKIAkvKgogCSAqIFNlbGVjdCB3aGljaCBjYXNlIHdlJ3JlIGluIGhlcmUsIGFuZCBpbXBsZW1lbnQgaXQuCiAJICovCi0Jc3dpdGNoIChTV0lUQ0hfU1RBVEUpIHsKLQotCWNhc2UgTUFTSzIoTEVGVF9DT05USUcsIFJJR0hUX0NPTlRJRyk6CisJc3dpdGNoIChzdGF0ZSAmIChCTUFQX0xFRlRfQ09OVElHIHwgQk1BUF9SSUdIVF9DT05USUcpKSB7CisJY2FzZSBCTUFQX0xFRlRfQ09OVElHIHwgQk1BUF9SSUdIVF9DT05USUc6CiAJCS8qCiAJCSAqIE5ldyBhbGxvY2F0aW9uIGlzIGNvbnRpZ3VvdXMgd2l0aCByZWFsIGFsbG9jYXRpb25zIG9uIHRoZQogCQkgKiBsZWZ0IGFuZCBvbiB0aGUgcmlnaHQuCiAJCSAqIE1lcmdlIGFsbCB0aHJlZSBpbnRvIGEgc2luZ2xlIGV4dGVudCByZWNvcmQuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMQ3xSQyIsIGlwLCBpZHggLSAxLAotCQkJd2hpY2hmb3JrKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4IC0gMSwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwKIAkJCWxlZnQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCArCiAJCQlyaWdodC5icl9ibG9ja2NvdW50KTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIkxDfFJDIiwgaXAsIGlkeCAtIDEsCi0JCQl3aGljaGZvcmspOwotCQlYRlNfQk1BUF9UUkFDRV9ERUxFVEUoIkxDfFJDIiwgaXAsIGlkeCwgMSwgd2hpY2hmb3JrKTsKLQkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAxKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCAtIDEsIHN0YXRlLCBfVEhJU19JUF8pOworCisJCXhmc19pZXh0X3JlbW92ZShpcCwgaWR4LCAxLCBzdGF0ZSk7CiAJCWlmcC0+aWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJWEZTX0lGT1JLX05FWFRfU0VUKGlwLCB3aGljaGZvcmssCiAJCQlYRlNfSUZPUktfTkVYVEVOVFMoaXAsIHdoaWNoZm9yaykgLSAxKTsKQEAgLTIxNzMsMTYgKzIwMjcsMTcgQEAKIAkJCXJpZ2h0LmJyX2Jsb2NrY291bnQ7CiAJCWJyZWFrOwogCi0JY2FzZSBNQVNLKExFRlRfQ09OVElHKToKKwljYXNlIEJNQVBfTEVGVF9DT05USUc6CiAJCS8qCiAJCSAqIE5ldyBhbGxvY2F0aW9uIGlzIGNvbnRpZ3VvdXMgd2l0aCBhIHJlYWwgYWxsb2NhdGlvbgogCQkgKiBvbiB0aGUgbGVmdC4KIAkJICogTWVyZ2UgdGhlIG5ldyBhbGxvY2F0aW9uIHdpdGggdGhlIGxlZnQgbmVpZ2hib3IuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJMQyIsIGlwLCBpZHggLSAxLCB3aGljaGZvcmspOworCQl0cmFjZV94ZnNfYm1hcF9wcmVfdXBkYXRlKGlwLCBpZHggLSAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLAogCQkJbGVmdC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50KTsKLQkJWEZTX0JNQVBfVFJBQ0VfUE9TVF9VUERBVEUoIkxDIiwgaXAsIGlkeCAtIDEsIHdoaWNoZm9yayk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHggLSAxLCBzdGF0ZSwgX1RISVNfSVBfKTsKKwogCQlpZnAtPmlmX2xhc3RleCA9IGlkeCAtIDE7CiAJCWlmIChjdXIgPT0gTlVMTCkgewogCQkJcnZhbCA9IHhmc19pbG9nX2ZleHQod2hpY2hmb3JrKTsKQEAgLTIyMDcsMTcgKzIwNjIsMTggQEAKIAkJCW5ldy0+YnJfYmxvY2tjb3VudDsKIAkJYnJlYWs7CiAKLQljYXNlIE1BU0soUklHSFRfQ09OVElHKToKKwljYXNlIEJNQVBfUklHSFRfQ09OVElHOgogCQkvKgogCQkgKiBOZXcgYWxsb2NhdGlvbiBpcyBjb250aWd1b3VzIHdpdGggYSByZWFsIGFsbG9jYXRpb24KIAkJICogb24gdGhlIHJpZ2h0LgogCQkgKiBNZXJnZSB0aGUgbmV3IGFsbG9jYXRpb24gd2l0aCB0aGUgcmlnaHQgbmVpZ2hib3IuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCJSQyIsIGlwLCBpZHgsIHdoaWNoZm9yayk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9hbGxmKGVwLCBuZXctPmJyX3N0YXJ0b2ZmLCBuZXctPmJyX3N0YXJ0YmxvY2ssCiAJCQluZXctPmJyX2Jsb2NrY291bnQgKyByaWdodC5icl9ibG9ja2NvdW50LAogCQkJcmlnaHQuYnJfc3RhdGUpOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiUkMiLCBpcCwgaWR4LCB3aGljaGZvcmspOworCQl0cmFjZV94ZnNfYm1hcF9wb3N0X3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKKwogCQlpZnAtPmlmX2xhc3RleCA9IGlkeDsKIAkJaWYgKGN1ciA9PSBOVUxMKSB7CiAJCQlydmFsID0geGZzX2lsb2dfZmV4dCh3aGljaGZvcmspOwpAQCAtMjI0OCw4ICsyMTA0LDcgQEAKIAkJICogcmVhbCBhbGxvY2F0aW9uLgogCQkgKiBJbnNlcnQgYSBuZXcgZW50cnkuCiAJCSAqLwotCQlYRlNfQk1BUF9UUkFDRV9JTlNFUlQoIjAiLCBpcCwgaWR4LCAxLCBuZXcsIE5VTEwsIHdoaWNoZm9yayk7Ci0JCXhmc19pZXh0X2luc2VydChpZnAsIGlkeCwgMSwgbmV3KTsKKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHgsIDEsIG5ldywgc3RhdGUpOwogCQlpZnAtPmlmX2xhc3RleCA9IGlkeDsKIAkJWEZTX0lGT1JLX05FWFRfU0VUKGlwLCB3aGljaGZvcmssCiAJCQlYRlNfSUZPUktfTkVYVEVOVFMoaXAsIHdoaWNoZm9yaykgKyAxKTsKQEAgLTIyODMsMTIgKzIxMzgsNiBAQAogZG9uZToKIAkqbG9nZmxhZ3NwID0gcnZhbDsKIAlyZXR1cm4gZXJyb3I7Ci0jdW5kZWYJTUFTSwotI3VuZGVmCU1BU0syCi0jdW5kZWYJU1RBVEVfU0VUCi0jdW5kZWYJU1RBVEVfVEVTVAotI3VuZGVmCVNUQVRFX1NFVF9URVNUCi0jdW5kZWYJU1dJVENIX1NUQVRFCiB9CiAKIC8qCkBAIC0zMTE1LDggKzI5NjQsMTMgQEAKIAl1aW50CQkJcWZpZWxkOwkvKiBxdW90YSBmaWVsZCB0byB1cGRhdGUgKi8KIAl4ZnNfZmlsYmxrc190CQl0ZW1wOwkvKiBmb3IgaW5kaXJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyAqLwogCXhmc19maWxibGtzX3QJCXRlbXAyOwkvKiBmb3IgaW5kaXJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyAqLworCWludAkJCXN0YXRlID0gMDsKIAogCVhGU19TVEFUU19JTkMoeHNfZGVsX2V4bGlzdCk7CisKKwlpZiAod2hpY2hmb3JrID09IFhGU19BVFRSX0ZPUkspCisJCXN0YXRlIHw9IEJNQVBfQVRUUkZPUks7CisKIAltcCA9IGlwLT5pX21vdW50OwogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CiAJQVNTRVJUKChpZHggPj0gMCkgJiYgKGlkeCA8IGlmcC0+aWZfYnl0ZXMgLwpAQCAtMzE5Niw4ICszMDUwLDggQEAKIAkJLyoKIAkJICogTWF0Y2hlcyB0aGUgd2hvbGUgZXh0ZW50LiAgRGVsZXRlIHRoZSBlbnRyeS4KIAkJICovCi0JCVhGU19CTUFQX1RSQUNFX0RFTEVURSgiMyIsIGlwLCBpZHgsIDEsIHdoaWNoZm9yayk7Ci0JCXhmc19pZXh0X3JlbW92ZShpZnAsIGlkeCwgMSk7CisJCXhmc19pZXh0X3JlbW92ZShpcCwgaWR4LCAxLAorCQkJCXdoaWNoZm9yayA9PSBYRlNfQVRUUl9GT1JLID8gQk1BUF9BVFRSRk9SSyA6IDApOwogCQlpZnAtPmlmX2xhc3RleCA9IGlkeDsKIAkJaWYgKGRlbGF5KQogCQkJYnJlYWs7CkBAIC0zMjE3LDcgKzMwNzEsNyBAQAogCQkvKgogCQkgKiBEZWxldGluZyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZXh0ZW50LgogCQkgKi8KLQkJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURSgiMiIsIGlwLCBpZHgsIHdoaWNoZm9yayk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9zdGFydG9mZihlcCwgZGVsX2VuZG9mZik7CiAJCXRlbXAgPSBnb3QuYnJfYmxvY2tjb3VudCAtIGRlbC0+YnJfYmxvY2tjb3VudDsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwpAQCAtMzIyNiwxMyArMzA4MCwxMiBAQAogCQkJdGVtcCA9IFhGU19GSUxCTEtTX01JTih4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIHRlbXApLAogCQkJCWRhX29sZCk7CiAJCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCwgbnVsbHN0YXJ0YmxvY2soKGludCl0ZW1wKSk7Ci0JCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiMiIsIGlwLCBpZHgsCi0JCQkJd2hpY2hmb3JrKTsKKwkJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQkJZGFfbmV3ID0gdGVtcDsKIAkJCWJyZWFrOwogCQl9CiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKGVwLCBkZWxfZW5kYmxvY2spOwotCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiMiIsIGlwLCBpZHgsIHdoaWNoZm9yayk7CisJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQlpZiAoIWN1cikgewogCQkJZmxhZ3MgfD0geGZzX2lsb2dfZmV4dCh3aGljaGZvcmspOwogCQkJYnJlYWs7CkBAIC0zMjQ4LDE5ICszMTAxLDE4IEBACiAJCSAqIERlbGV0aW5nIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGV4dGVudC4KIAkJICovCiAJCXRlbXAgPSBnb3QuYnJfYmxvY2tjb3VudCAtIGRlbC0+YnJfYmxvY2tjb3VudDsKLQkJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURSgiMSIsIGlwLCBpZHgsIHdoaWNoZm9yayk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLCB0ZW1wKTsKIAkJaWZwLT5pZl9sYXN0ZXggPSBpZHg7CiAJCWlmIChkZWxheSkgewogCQkJdGVtcCA9IFhGU19GSUxCTEtTX01JTih4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIHRlbXApLAogCQkJCWRhX29sZCk7CiAJCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCwgbnVsbHN0YXJ0YmxvY2soKGludCl0ZW1wKSk7Ci0JCQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURSgiMSIsIGlwLCBpZHgsCi0JCQkJd2hpY2hmb3JrKTsKKwkJCXRyYWNlX3hmc19ibWFwX3Bvc3RfdXBkYXRlKGlwLCBpZHgsIHN0YXRlLCBfVEhJU19JUF8pOwogCQkJZGFfbmV3ID0gdGVtcDsKIAkJCWJyZWFrOwogCQl9Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCIxIiwgaXAsIGlkeCwgd2hpY2hmb3JrKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CiAJCWlmICghY3VyKSB7CiAJCQlmbGFncyB8PSB4ZnNfaWxvZ19mZXh0KHdoaWNoZm9yayk7CiAJCQlicmVhazsKQEAgLTMyNzcsNyArMzEyOSw3IEBACiAJCSAqIERlbGV0aW5nIHRoZSBtaWRkbGUgb2YgdGhlIGV4dGVudC4KIAkJICovCiAJCXRlbXAgPSBkZWwtPmJyX3N0YXJ0b2ZmIC0gZ290LmJyX3N0YXJ0b2ZmOwotCQlYRlNfQk1BUF9UUkFDRV9QUkVfVVBEQVRFKCIwIiwgaXAsIGlkeCwgd2hpY2hmb3JrKTsKKwkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCBzdGF0ZSwgX1RISVNfSVBfKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwogCQluZXcuYnJfc3RhcnRvZmYgPSBkZWxfZW5kb2ZmOwogCQl0ZW1wMiA9IGdvdF9lbmRvZmYgLSBkZWxfZW5kb2ZmOwpAQCAtMzM2NCwxMCArMzIxNiw4IEBACiAJCQkJfQogCQkJfQogCQl9Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCIwIiwgaXAsIGlkeCwgd2hpY2hmb3JrKTsKLQkJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKCIwIiwgaXAsIGlkeCArIDEsIDEsICZuZXcsIE5VTEwsCi0JCQl3aGljaGZvcmspOwotCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHggKyAxLCAxLCAmbmV3KTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIGlkeCwgc3RhdGUsIF9USElTX0lQXyk7CisJCXhmc19pZXh0X2luc2VydChpcCwgaWR4ICsgMSwgMSwgJm5ldywgc3RhdGUpOwogCQlpZnAtPmlmX2xhc3RleCA9IGlkeCArIDE7CiAJCWJyZWFrOwogCX0KQEAgLTM2ODcsNyArMzUzNyw5IEBACiAJCXhmc19pZXh0X2FkZChpZnAsIDAsIDEpOwogCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCAwKTsKIAkJeGZzX2JtYnRfc2V0X2FsbGYoZXAsIDAsIGFyZ3MuZnNibm8sIDEsIFhGU19FWFRfTk9STSk7Ci0JCVhGU19CTUFQX1RSQUNFX1BPU1RfVVBEQVRFKCJuZXciLCBpcCwgMCwgd2hpY2hmb3JrKTsKKwkJdHJhY2VfeGZzX2JtYXBfcG9zdF91cGRhdGUoaXAsIDAsCisJCQkJd2hpY2hmb3JrID09IFhGU19BVFRSX0ZPUksgPyBCTUFQX0FUVFJGT1JLIDogMCwKKwkJCQlfVEhJU19JUF8pOwogCQlYRlNfSUZPUktfTkVYVF9TRVQoaXAsIHdoaWNoZm9yaywgMSk7CiAJCWlwLT5pX2QuZGlfbmJsb2NrcyA9IDE7CiAJCXhmc190cmFuc19tb2RfZHF1b3RfYnlpbm8odHAsIGlwLApAQCAtMzgwMCwxNTggKzM2NTIsNiBAQAogCXJldHVybiBlcDsKIH0KIAotCi0jaWZkZWYgWEZTX0JNQVBfVFJBQ0UKLWt0cmFjZV90CSp4ZnNfYm1hcF90cmFjZV9idWY7Ci0KLS8qCi0gKiBBZGQgYSBibWFwIHRyYWNlIGJ1ZmZlciBlbnRyeS4gIEJhc2Ugcm91dGluZSBmb3IgdGhlIG90aGVycy4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19ibWFwX3RyYWNlX2FkZGVudHJ5KAotCWludAkJb3Bjb2RlLAkJLyogb3BlcmF0aW9uICovCi0JY29uc3QgY2hhcgkqZm5hbWUsCQkvKiBmdW5jdGlvbiBuYW1lICovCi0JY2hhcgkJKmRlc2MsCQkvKiBvcGVyYXRpb24gZGVzY3JpcHRpb24gKi8KLQl4ZnNfaW5vZGVfdAkqaXAsCQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwotCXhmc19leHRudW1fdAlpZHgsCQkvKiBpbmRleCBvZiBlbnRyeShpZXMpICovCi0JeGZzX2V4dG51bV90CWNudCwJCS8qIGNvdW50IG9mIGVudHJpZXMsIDEgb3IgMiAqLwotCXhmc19ibWJ0X3JlY19ob3N0X3QgKnIxLAkvKiBmaXJzdCByZWNvcmQgKi8KLQl4ZnNfYm1idF9yZWNfaG9zdF90ICpyMiwJLyogc2Vjb25kIHJlY29yZCBvciBudWxsICovCi0JaW50CQl3aGljaGZvcmspCS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCi17Ci0JeGZzX2JtYnRfcmVjX2hvc3RfdCB0cjI7Ci0KLQlBU1NFUlQoY250ID09IDEgfHwgY250ID09IDIpOwotCUFTU0VSVChyMSAhPSBOVUxMKTsKLQlpZiAoY250ID09IDEpIHsKLQkJQVNTRVJUKHIyID09IE5VTEwpOwotCQlyMiA9ICZ0cjI7Ci0JCW1lbXNldCgmdHIyLCAwLCBzaXplb2YodHIyKSk7Ci0JfSBlbHNlCi0JCUFTU0VSVChyMiAhPSBOVUxMKTsKLQlrdHJhY2VfZW50ZXIoeGZzX2JtYXBfdHJhY2VfYnVmLAotCQkodm9pZCAqKShfX3BzaW50X3QpKG9wY29kZSB8ICh3aGljaGZvcmsgPDwgMTYpKSwKLQkJKHZvaWQgKilmbmFtZSwgKHZvaWQgKilkZXNjLCAodm9pZCAqKWlwLAotCQkodm9pZCAqKShfX3BzaW50X3QpaWR4LAotCQkodm9pZCAqKShfX3BzaW50X3QpY250LAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCkoaXAtPmlfaW5vID4+IDMyKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHVuc2lnbmVkKWlwLT5pX2lubywKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHIxLT5sMCA+PiAzMiksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KSh1bnNpZ25lZCkocjEtPmwwKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHIxLT5sMSA+PiAzMiksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KSh1bnNpZ25lZCkocjEtPmwxKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHIyLT5sMCA+PiAzMiksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KSh1bnNpZ25lZCkocjItPmwwKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHIyLT5sMSA+PiAzMiksCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KSh1bnNpZ25lZCkocjItPmwxKQotCQkpOwotCUFTU0VSVChpcC0+aV94dHJhY2UpOwotCWt0cmFjZV9lbnRlcihpcC0+aV94dHJhY2UsCi0JCSh2b2lkICopKF9fcHNpbnRfdCkob3Bjb2RlIHwgKHdoaWNoZm9yayA8PCAxNikpLAotCQkodm9pZCAqKWZuYW1lLCAodm9pZCAqKWRlc2MsICh2b2lkICopaXAsCi0JCSh2b2lkICopKF9fcHNpbnRfdClpZHgsCi0JCSh2b2lkICopKF9fcHNpbnRfdCljbnQsCi0JCSh2b2lkICopKF9fcHN1bnNpZ25lZF90KShpcC0+aV9pbm8gPj4gMzIpLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCkodW5zaWduZWQpaXAtPmlfaW5vLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCkocjEtPmwwID4+IDMyKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHVuc2lnbmVkKShyMS0+bDApLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCkocjEtPmwxID4+IDMyKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHVuc2lnbmVkKShyMS0+bDEpLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCkocjItPmwwID4+IDMyKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHVuc2lnbmVkKShyMi0+bDApLAotCQkodm9pZCAqKShfX3BzdW5zaWduZWRfdCkocjItPmwxID4+IDMyKSwKLQkJKHZvaWQgKikoX19wc3Vuc2lnbmVkX3QpKHVuc2lnbmVkKShyMi0+bDEpCi0JCSk7Ci19Ci0KLS8qCi0gKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byBhIGNhbGwgdG8geGZzX2lleHRfcmVtb3ZlLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2JtYXBfdHJhY2VfZGVsZXRlKAotCWNvbnN0IGNoYXIJKmZuYW1lLAkJLyogZnVuY3Rpb24gbmFtZSAqLwotCWNoYXIJCSpkZXNjLAkJLyogb3BlcmF0aW9uIGRlc2NyaXB0aW9uICovCi0JeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJaWR4LAkJLyogaW5kZXggb2YgZW50cnkoZW50cmllcykgZGVsZXRlZCAqLwotCXhmc19leHRudW1fdAljbnQsCQkvKiBjb3VudCBvZiBlbnRyaWVzIGRlbGV0ZWQsIDEgb3IgMiAqLwotCWludAkJd2hpY2hmb3JrKQkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwotewotCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KLQotCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7Ci0JeGZzX2JtYXBfdHJhY2VfYWRkZW50cnkoWEZTX0JNQVBfS1RSQUNFX0RFTEVURSwgZm5hbWUsIGRlc2MsIGlwLCBpZHgsCi0JCWNudCwgeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCksCi0JCWNudCA9PSAyID8geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIDEpIDogTlVMTCwKLQkJd2hpY2hmb3JrKTsKLX0KLQotLyoKLSAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IHByaW9yIHRvIGEgY2FsbCB0byB4ZnNfaWV4dF9pbnNlcnQsIG9yCi0gKiByZWFkaW5nIGluIHRoZSBleHRlbnRzIGxpc3QgZnJvbSB0aGUgZGlzayAoaW4gdGhlIGJ0cmVlKS4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19ibWFwX3RyYWNlX2luc2VydCgKLQljb25zdCBjaGFyCSpmbmFtZSwJCS8qIGZ1bmN0aW9uIG5hbWUgKi8KLQljaGFyCQkqZGVzYywJCS8qIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiAqLwotCXhmc19pbm9kZV90CSppcCwJCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCi0JeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IG9mIGVudHJ5KGVudHJpZXMpIGluc2VydGVkICovCi0JeGZzX2V4dG51bV90CWNudCwJCS8qIGNvdW50IG9mIGVudHJpZXMgaW5zZXJ0ZWQsIDEgb3IgMiAqLwotCXhmc19ibWJ0X2lyZWNfdAkqcjEsCQkvKiBpbnNlcnRlZCByZWNvcmQgMSAqLwotCXhmc19ibWJ0X2lyZWNfdAkqcjIsCQkvKiBpbnNlcnRlZCByZWNvcmQgMiBvciBudWxsICovCi0JaW50CQl3aGljaGZvcmspCS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCi17Ci0JeGZzX2JtYnRfcmVjX2hvc3RfdCB0cjE7CS8qIGNvbXByZXNzZWQgcmVjb3JkIDEgKi8KLQl4ZnNfYm1idF9yZWNfaG9zdF90IHRyMjsJLyogY29tcHJlc3NlZCByZWNvcmQgMiBpZiBuZWVkZWQgKi8KLQotCXhmc19ibWJ0X3NldF9hbGwoJnRyMSwgcjEpOwotCWlmIChjbnQgPT0gMikgewotCQlBU1NFUlQocjIgIT0gTlVMTCk7Ci0JCXhmc19ibWJ0X3NldF9hbGwoJnRyMiwgcjIpOwotCX0gZWxzZSB7Ci0JCUFTU0VSVChjbnQgPT0gMSk7Ci0JCUFTU0VSVChyMiA9PSBOVUxMKTsKLQl9Ci0JeGZzX2JtYXBfdHJhY2VfYWRkZW50cnkoWEZTX0JNQVBfS1RSQUNFX0lOU0VSVCwgZm5hbWUsIGRlc2MsIGlwLCBpZHgsCi0JCWNudCwgJnRyMSwgY250ID09IDIgPyAmdHIyIDogTlVMTCwgd2hpY2hmb3JrKTsKLX0KLQotLyoKLSAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IGFmdGVyIHVwZGF0aW5nIGFuIGV4dGVudCByZWNvcmQgaW4gcGxhY2UuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZSgKLQljb25zdCBjaGFyCSpmbmFtZSwJCS8qIGZ1bmN0aW9uIG5hbWUgKi8KLQljaGFyCQkqZGVzYywJCS8qIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiAqLwotCXhmc19pbm9kZV90CSppcCwJCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCi0JeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IG9mIGVudHJ5IHVwZGF0ZWQgKi8KLQlpbnQJCXdoaWNoZm9yaykJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KLXsKLQl4ZnNfaWZvcmtfdAkqaWZwOwkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCi0KLQlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwotCXhmc19ibWFwX3RyYWNlX2FkZGVudHJ5KFhGU19CTUFQX0tUUkFDRV9QT1NUX1VQLCBmbmFtZSwgZGVzYywgaXAsIGlkeCwKLQkJMSwgeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCksIE5VTEwsIHdoaWNoZm9yayk7Ci19Ci0KLS8qCi0gKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byB1cGRhdGluZyBhbiBleHRlbnQgcmVjb3JkIGluIHBsYWNlLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZSgKLQljb25zdCBjaGFyCSpmbmFtZSwJCS8qIGZ1bmN0aW9uIG5hbWUgKi8KLQljaGFyCQkqZGVzYywJCS8qIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiAqLwotCXhmc19pbm9kZV90CSppcCwJCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCi0JeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IG9mIGVudHJ5IHRvIGJlIHVwZGF0ZWQgKi8KLQlpbnQJCXdoaWNoZm9yaykJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KLXsKLQl4ZnNfaWZvcmtfdAkqaWZwOwkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCi0KLQlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwotCXhmc19ibWFwX3RyYWNlX2FkZGVudHJ5KFhGU19CTUFQX0tUUkFDRV9QUkVfVVAsIGZuYW1lLCBkZXNjLCBpcCwgaWR4LCAxLAotCQl4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KSwgTlVMTCwgd2hpY2hmb3JrKTsKLX0KLSNlbmRpZgkvKiBYRlNfQk1BUF9UUkFDRSAqLwotCiAvKgogICogQ29tcHV0ZSB0aGUgd29yc3QtY2FzZSBudW1iZXIgb2YgaW5kaXJlY3QgYmxvY2tzIHRoYXQgd2lsbCBiZSB1c2VkCiAgKiBmb3IgaXAncyBkZWxheWVkIGV4dGVudCBvZiBsZW5ndGggImxlbiIuCkBAIC0zOTgzLDM3ICszNjgzLDYgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotI2lmIGRlZmluZWQoWEZTX1JXX1RSQUNFKQotU1RBVElDIHZvaWQKLXhmc19idW5tYXBfdHJhY2UoCi0JeGZzX2lub2RlX3QJCSppcCwKLQl4ZnNfZmlsZW9mZl90CQlibm8sCi0JeGZzX2ZpbGJsa3NfdAkJbGVuLAotCWludAkJCWZsYWdzLAotCWluc3RfdAkJCSpyYSkKLXsKLQlpZiAoaXAtPmlfcnd0cmFjZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0Ja3RyYWNlX2VudGVyKGlwLT5pX3J3dHJhY2UsCi0JCSh2b2lkICopKF9fcHNpbnRfdClYRlNfQlVOTUFQLAotCQkodm9pZCAqKWlwLAotCQkodm9pZCAqKShfX3BzaW50X3QpKChpcC0+aV9kLmRpX3NpemUgPj4gMzIpICYgMHhmZmZmZmZmZiksCi0JCSh2b2lkICopKF9fcHNpbnRfdCkoaXAtPmlfZC5kaV9zaXplICYgMHhmZmZmZmZmZiksCi0JCSh2b2lkICopKF9fcHNpbnRfdCkoKCh4ZnNfZGZpbG9mZl90KWJubyA+PiAzMikgJiAweGZmZmZmZmZmKSwKLQkJKHZvaWQgKikoX19wc2ludF90KSgoeGZzX2RmaWxvZmZfdClibm8gJiAweGZmZmZmZmZmKSwKLQkJKHZvaWQgKikoX19wc2ludF90KWxlbiwKLQkJKHZvaWQgKikoX19wc2ludF90KWZsYWdzLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWN1cnJlbnRfY3B1KCksCi0JCSh2b2lkICopcmEsCi0JCSh2b2lkICopMCwKLQkJKHZvaWQgKikwLAotCQkodm9pZCAqKTAsCi0JCSh2b2lkICopMCwKLQkJKHZvaWQgKikwLAotCQkodm9pZCAqKTApOwotfQotI2VuZGlmCi0KIC8qCiAgKiBDb252ZXJ0IGlub2RlIGZyb20gbm9uLWF0dHJpYnV0ZWQgdG8gYXR0cmlidXRlZC4KICAqIE11c3Qgbm90IGJlIGluIGEgdHJhbnNhY3Rpb24sIGlwIG11c3Qgbm90IGJlIGxvY2tlZC4KQEAgLTQ3MDIsMzQgKzQzNzEsMzAgQEAKIAlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiB9CiAKLSNpZmRlZiBYRlNfQk1BUF9UUkFDRQorI2lmZGVmIERFQlVHCiAvKgogICogQWRkIGJtYXAgdHJhY2UgaW5zZXJ0IGVudHJpZXMgZm9yIGFsbCB0aGUgY29udGVudHMgb2YgdGhlIGV4dGVudCByZWNvcmRzLgogICovCiB2b2lkCiB4ZnNfYm1hcF90cmFjZV9leGxpc3QoCi0JY29uc3QgY2hhcgkqZm5hbWUsCQkvKiBmdW5jdGlvbiBuYW1lICovCiAJeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJY250LAkJLyogY291bnQgb2YgZW50cmllcyBpbiB0aGUgbGlzdCAqLwotCWludAkJd2hpY2hmb3JrKQkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLworCWludAkJd2hpY2hmb3JrLAkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLworCXVuc2lnbmVkIGxvbmcJY2FsbGVyX2lwKQogewotCXhmc19ibWJ0X3JlY19ob3N0X3QgKmVwOwkvKiBjdXJyZW50IGV4dGVudCByZWNvcmQgKi8KIAl4ZnNfZXh0bnVtX3QJaWR4OwkJLyogZXh0ZW50IHJlY29yZCBpbmRleCAqLwogCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KLQl4ZnNfYm1idF9pcmVjX3QJczsJCS8qIGZpbGUgZXh0ZW50IHJlY29yZCAqLworCWludAkJc3RhdGUgPSAwOworCisJaWYgKHdoaWNoZm9yayA9PSBYRlNfQVRUUl9GT1JLKQorCQlzdGF0ZSB8PSBCTUFQX0FUVFJGT1JLOwogCiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKIAlBU1NFUlQoY250ID09IChpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSkpOwotCWZvciAoaWR4ID0gMDsgaWR4IDwgY250OyBpZHgrKykgewotCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpOwotCQl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmcyk7Ci0JCVhGU19CTUFQX1RSQUNFX0lOU0VSVCgiZXhsaXN0IiwgaXAsIGlkeCwgMSwgJnMsIE5VTEwsCi0JCQl3aGljaGZvcmspOwotCX0KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNudDsgaWR4KyspCisJCXRyYWNlX3hmc19leHRsaXN0KGlwLCBpZHgsIHdoaWNoZm9yaywgY2FsbGVyX2lwKTsKIH0KLSNlbmRpZgogCi0jaWZkZWYgREVCVUcKIC8qCiAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBibWJ0X2lyZWNzIGJlaW5nIHJldHVybmVkIGZyb20gYm1hcGkgYXJlIHZhbGlkCiAgKiBnaXZlbiB0aGUgY2FsbGVycyBvcmlnaW5hbCBwYXJhbWV0ZXJzLiAgU3BlY2lmaWNhbGx5IGNoZWNrIHRoZQpAQCAtNTQ3OCw3ICs1MTQzLDggQEAKIAlpbnQJCQlyc3ZkOwkJLyogT0sgdG8gYWxsb2NhdGUgcmVzZXJ2ZWQgYmxvY2tzICovCiAJeGZzX2ZzYmxvY2tfdAkJc3VtOwogCi0JeGZzX2J1bm1hcF90cmFjZShpcCwgYm5vLCBsZW4sIGZsYWdzLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7CisJdHJhY2VfeGZzX2J1bm1hcChpcCwgYm5vLCBsZW4sIGZsYWdzLCBfUkVUX0lQXyk7CisKIAl3aGljaGZvcmsgPSAoZmxhZ3MgJiBYRlNfQk1BUElfQVRUUkZPUkspID8KIAkJWEZTX0FUVFJfRk9SSyA6IFhGU19EQVRBX0ZPUks7CiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5oIGIvZnMveGZzL3hmc19ibWFwLmgKaW5kZXggNTZmNjJkMi4uNDE5ZGFmYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmgKKysrIGIvZnMveGZzL3hmc19ibWFwLmgKQEAgLTk1LDYgKzk1LDIxIEBACiAJCQkJCS8qIG5lZWQgd3JpdGUgY2FjaGUgZmx1c2hpbmcgYW5kIG5vICovCiAJCQkJCS8qIGFkZGl0aW9uYWwgYWxsb2NhdGlvbiBhbGlnbm1lbnRzICovCiAKKyNkZWZpbmUgWEZTX0JNQVBJX0ZMQUdTIFwKKwl7IFhGU19CTUFQSV9XUklURSwJIldSSVRFIiB9LCBcCisJeyBYRlNfQk1BUElfREVMQVksCSJERUxBWSIgfSwgXAorCXsgWEZTX0JNQVBJX0VOVElSRSwJIkVOVElSRSIgfSwgXAorCXsgWEZTX0JNQVBJX01FVEFEQVRBLAkiTUVUQURBVEEiIH0sIFwKKwl7IFhGU19CTUFQSV9FWEFDVCwJIkVYQUNUIiB9LCBcCisJeyBYRlNfQk1BUElfQVRUUkZPUkssCSJBVFRSRk9SSyIgfSwgXAorCXsgWEZTX0JNQVBJX0FTWU5DLAkiQVNZTkMiIH0sIFwKKwl7IFhGU19CTUFQSV9SU1ZCTE9DS1MsCSJSU1ZCTE9DS1MiIH0sIFwKKwl7IFhGU19CTUFQSV9QUkVBTExPQywJIlBSRUFMTE9DIiB9LCBcCisJeyBYRlNfQk1BUElfSUdTVEFURSwJIklHU1RBVEUiIH0sIFwKKwl7IFhGU19CTUFQSV9DT05USUcsCSJDT05USUciIH0sIFwKKwl7IFhGU19CTUFQSV9DT05WRVJULAkiQ09OVkVSVCIgfQorCisKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19ibWFwaV9hZmxhZyhpbnQgdykKIHsKIAlyZXR1cm4gKHcgPT0gWEZTX0FUVFJfRk9SSyA/IFhGU19CTUFQSV9BVFRSRk9SSyA6IDApOwpAQCAtMTM1LDM2ICsxNTAsNDMgQEAKIAljaGFyCQkJY29udjsJLyogb3ZlcndyaXRpbmcgdW53cml0dGVuIGV4dGVudHMgKi8KIH0geGZzX2JtYWxsb2NhX3Q7CiAKLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoWEZTX0JNQVBfVFJBQ0UpCiAvKgotICogVHJhY2Ugb3BlcmF0aW9ucyBmb3IgYm1hcCBleHRlbnQgdHJhY2luZworICogRmxhZ3MgZm9yIHhmc19ibWFwX2FkZF9leHRlbnQqLgogICovCi0jZGVmaW5lCVhGU19CTUFQX0tUUkFDRV9ERUxFVEUJMQotI2RlZmluZQlYRlNfQk1BUF9LVFJBQ0VfSU5TRVJUCTIKLSNkZWZpbmUJWEZTX0JNQVBfS1RSQUNFX1BSRV9VUAkzCi0jZGVmaW5lCVhGU19CTUFQX0tUUkFDRV9QT1NUX1VQCTQKKyNkZWZpbmUgQk1BUF9MRUZUX0NPTlRJRwkoMSA8PCAwKQorI2RlZmluZSBCTUFQX1JJR0hUX0NPTlRJRwkoMSA8PCAxKQorI2RlZmluZSBCTUFQX0xFRlRfRklMTElORwkoMSA8PCAyKQorI2RlZmluZSBCTUFQX1JJR0hUX0ZJTExJTkcJKDEgPDwgMykKKyNkZWZpbmUgQk1BUF9MRUZUX0RFTEFZCQkoMSA8PCA0KQorI2RlZmluZSBCTUFQX1JJR0hUX0RFTEFZCSgxIDw8IDUpCisjZGVmaW5lIEJNQVBfTEVGVF9WQUxJRAkJKDEgPDwgNikKKyNkZWZpbmUgQk1BUF9SSUdIVF9WQUxJRAkoMSA8PCA3KQorI2RlZmluZSBCTUFQX0FUVFJGT1JLCQkoMSA8PCA4KQogCi0jZGVmaW5lCVhGU19CTUFQX1RSQUNFX1NJWkUJNDA5NgkvKiBzaXplIG9mIGdsb2JhbCB0cmFjZSBidWZmZXIgKi8KLSNkZWZpbmUJWEZTX0JNQVBfS1RSQUNFX1NJWkUJMzIJLyogc2l6ZSBvZiBwZXItaW5vZGUgdHJhY2UgYnVmZmVyICovCi1leHRlcm4ga3RyYWNlX3QJKnhmc19ibWFwX3RyYWNlX2J1ZjsKKyNkZWZpbmUgWEZTX0JNQVBfRVhUX0ZMQUdTIFwKKwl7IEJNQVBfTEVGVF9DT05USUcsCSJMQyIgfSwgXAorCXsgQk1BUF9SSUdIVF9DT05USUcsCSJSQyIgfSwgXAorCXsgQk1BUF9MRUZUX0ZJTExJTkcsCSJMRiIgfSwgXAorCXsgQk1BUF9SSUdIVF9GSUxMSU5HLAkiUkYiIH0sIFwKKwl7IEJNQVBfQVRUUkZPUkssCSJBVFRSIiB9CiAKIC8qCiAgKiBBZGQgYm1hcCB0cmFjZSBpbnNlcnQgZW50cmllcyBmb3IgYWxsIHRoZSBjb250ZW50cyBvZiB0aGUgZXh0ZW50IGxpc3QuCisgKgorICogUXVpdGUgZXhjZXNzaXZlIHRyYWNpbmcuICBPbmx5IGRvIHRoaXMgZm9yIGRlYnVnIGJ1aWxkcy4KICAqLworI2lmIGRlZmluZWQoX19LRVJORUwpICYmIGRlZmluZWQoREVCVUcpCiB2b2lkCiB4ZnNfYm1hcF90cmFjZV9leGxpc3QoCi0JY29uc3QgY2hhcgkJKmZuYW1lLAkJLyogZnVuY3Rpb24gbmFtZSAqLwogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJCWNudCwJCS8qIGNvdW50IG9mIGVudHJpZXMgaW4gbGlzdCAqLwotCWludAkJCXdoaWNoZm9yayk7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCisJaW50CQkJd2hpY2hmb3JrLAorCXVuc2lnbmVkIGxvbmcJCWNhbGxlcl9pcCk7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAjZGVmaW5lCVhGU19CTUFQX1RSQUNFX0VYTElTVChpcCxjLHcpCVwKLQl4ZnNfYm1hcF90cmFjZV9leGxpc3QoX19mdW5jX18saXAsYyx3KQotCi0jZWxzZQkvKiBfX0tFUk5FTF9fICYmIFhGU19CTUFQX1RSQUNFICovCi0KKwl4ZnNfYm1hcF90cmFjZV9leGxpc3QoaXAsYyx3LCBfVEhJU19JUF8pCisjZWxzZQogI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9FWExJU1QoaXAsYyx3KQotCi0jZW5kaWYJLyogX19LRVJORUxfXyAmJiBYRlNfQk1BUF9UUkFDRSAqLworI2VuZGlmCiAKIC8qCiAgKiBDb252ZXJ0IGlub2RlIGZyb20gbm9uLWF0dHJpYnV0ZWQgdG8gYXR0cmlidXRlZC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKaW5kZXggNmY1Y2NlZC4uMzg3NTFkNSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKQEAgLTc2OCwxMiArNzY4LDYgQEAKIAkJKHZvaWQgKilhMCwgKHZvaWQgKilhMSwgKHZvaWQgKilhMiwgKHZvaWQgKilhMywKIAkJKHZvaWQgKilhNCwgKHZvaWQgKilhNSwgKHZvaWQgKilhNiwgKHZvaWQgKilhNywKIAkJKHZvaWQgKilhOCwgKHZvaWQgKilhOSwgKHZvaWQgKilhMTApOwotCWt0cmFjZV9lbnRlcihpcC0+aV9idHJhY2UsCi0JCSh2b2lkICopKChfX3BzaW50X3QpdHlwZSB8ICh3aGljaGZvcmsgPDwgOCkgfCAobGluZSA8PCAxNikpLAotCQkodm9pZCAqKWZ1bmMsICh2b2lkICopcywgKHZvaWQgKilpcCwgKHZvaWQgKiljdXIsCi0JCSh2b2lkICopYTAsICh2b2lkICopYTEsICh2b2lkICopYTIsICh2b2lkICopYTMsCi0JCSh2b2lkICopYTQsICh2b2lkICopYTUsICh2b2lkICopYTYsICh2b2lkICopYTcsCi0JCSh2b2lkICopYTgsICh2b2lkICopYTksICh2b2lkICopYTEwKTsKIH0KIAogU1RBVElDIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKaW5kZXggNTU0OWQ0OS4uY2YwN2NhNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKQEAgLTQ2LDIwICs0NiwxMiBAQAogI2RlZmluZSBCTUJUX1NUQVJUQkxPQ0tfQklUTEVOCTUyCiAjZGVmaW5lIEJNQlRfQkxPQ0tDT1VOVF9CSVRMRU4JMjEKIAotCi0jZGVmaW5lIEJNQlRfVVNFXzY0CTEKLQotdHlwZWRlZiBzdHJ1Y3QgeGZzX2JtYnRfcmVjXzMyCi17Ci0JX191aW50MzJfdAkJbDAsIGwxLCBsMiwgbDM7Ci19IHhmc19ibWJ0X3JlY18zMl90OwotdHlwZWRlZiBzdHJ1Y3QgeGZzX2JtYnRfcmVjXzY0Ci17Cit0eXBlZGVmIHN0cnVjdCB4ZnNfYm1idF9yZWMgewogCV9fYmU2NAkJCWwwLCBsMTsKLX0geGZzX2JtYnRfcmVjXzY0X3Q7Cit9IHhmc19ibWJ0X3JlY190OwogCiB0eXBlZGVmIF9fdWludDY0X3QJeGZzX2JtYnRfcmVjX2Jhc2VfdDsJLyogdXNlIHRoaXMgZm9yIGNhc3RzICovCi10eXBlZGVmIHhmc19ibWJ0X3JlY182NF90IHhmc19ibWJ0X3JlY190LCB4ZnNfYm1kcl9yZWNfdDsKK3R5cGVkZWYgeGZzX2JtYnRfcmVjX3QgeGZzX2JtZHJfcmVjX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHhmc19ibWJ0X3JlY19ob3N0IHsKIAlfX3VpbnQ2NF90CQlsMCwgbDE7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggNTJiNWYxNC4uMzZhMDk5MmQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2J0cmVlLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJ4ZnNfYnRyZWVfdHJhY2UuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCiAgKiBDdXJzb3IgYWxsb2NhdGlvbiB6b25lLgpAQCAtODEsNyArODIsNyBAQAogCQkJWEZTX0VSUlRBR19CVFJFRV9DSEVDS19MQkxPQ0ssCiAJCQlYRlNfUkFORE9NX0JUUkVFX0NIRUNLX0xCTE9DSykpKSB7CiAJCWlmIChicCkKLQkJCXhmc19idWZ0cmFjZSgiTEJUUkVFIEVSUk9SIiwgYnApOworCQkJdHJhY2VfeGZzX2J0cmVlX2NvcnJ1cHQoYnAsIF9SRVRfSVBfKTsKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2J0cmVlX2NoZWNrX2xibG9jayIsIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJIG1wKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwpAQCAtMTE5LDcgKzEyMCw3IEBACiAJCQlYRlNfRVJSVEFHX0JUUkVFX0NIRUNLX1NCTE9DSywKIAkJCVhGU19SQU5ET01fQlRSRUVfQ0hFQ0tfU0JMT0NLKSkpIHsKIAkJaWYgKGJwKQotCQkJeGZzX2J1ZnRyYWNlKCJTQlRSRUUgRVJST1IiLCBicCk7CisJCQl0cmFjZV94ZnNfYnRyZWVfY29ycnVwdChicCwgX1JFVF9JUF8pOwogCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2J0cmVlX2NoZWNrX3NibG9jayIsCiAJCQlYRlNfRVJSTEVWRUxfTE9XLCBjdXItPmJjX21wLCBibG9jayk7CiAJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnRyZWVfdHJhY2UuaCBiL2ZzL3hmcy94ZnNfYnRyZWVfdHJhY2UuaAppbmRleCBiM2Y1ZWIzLi4yZDhhMzA5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J0cmVlX3RyYWNlLmgKKysrIGIvZnMveGZzL3hmc19idHJlZV90cmFjZS5oCkBAIC01OCw4ICs1OCw2IEBACiAJCXN0cnVjdCB4ZnNfYnVmICosIGludCwgaW50KTsKIHZvaWQgeGZzX2J0cmVlX3RyYWNlX2FyZ2JpaShjb25zdCBjaGFyICosIHN0cnVjdCB4ZnNfYnRyZWVfY3VyICosCiAJCXN0cnVjdCB4ZnNfYnVmICosIGludCwgaW50LCBpbnQpOwotdm9pZCB4ZnNfYnRyZWVfdHJhY2VfYXJnZmZmaShjb25zdCBjaGFyICosIHN0cnVjdCB4ZnNfYnRyZWVfY3VyICosCi0JCXhmc19kZmlsb2ZmX3QsIHhmc19kZnNibm9fdCwgeGZzX2RmaWxibGtzX3QsIGludCwgaW50KTsKIHZvaWQgeGZzX2J0cmVlX3RyYWNlX2FyZ2koY29uc3QgY2hhciAqLCBzdHJ1Y3QgeGZzX2J0cmVlX2N1ciAqLCBpbnQsIGludCk7CiB2b2lkIHhmc19idHJlZV90cmFjZV9hcmdpcGsoY29uc3QgY2hhciAqLCBzdHJ1Y3QgeGZzX2J0cmVlX2N1ciAqLCBpbnQsCiAJCXVuaW9uIHhmc19idHJlZV9wdHIsIHVuaW9uIHhmc19idHJlZV9rZXkgKiwgaW50KTsKQEAgLTcxLDI0ICs2OSwxMCBAQAogCQl1bmlvbiB4ZnNfYnRyZWVfcmVjICosIGludCk7CiB2b2lkIHhmc19idHJlZV90cmFjZV9jdXJzb3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgeGZzX2J0cmVlX2N1ciAqLCBpbnQsIGludCk7CiAKLQotI2RlZmluZSBYRlNfQUxMT0NCVF9UUkFDRV9TSVpFCTQwOTYJLyogc2l6ZSBvZiBnbG9iYWwgdHJhY2UgYnVmZmVyICovCi1leHRlcm4ga3RyYWNlX3QJKnhmc19hbGxvY2J0X3RyYWNlX2J1ZjsKLQotI2RlZmluZSBYRlNfSU5PQlRfVFJBQ0VfU0laRQk0MDk2CS8qIHNpemUgb2YgZ2xvYmFsIHRyYWNlIGJ1ZmZlciAqLwotZXh0ZXJuIGt0cmFjZV90CSp4ZnNfaW5vYnRfdHJhY2VfYnVmOwotCi0jZGVmaW5lIFhGU19CTUJUX1RSQUNFX1NJWkUJNDA5NgkvKiBzaXplIG9mIGdsb2JhbCB0cmFjZSBidWZmZXIgKi8KLSNkZWZpbmUgWEZTX0JNQlRfS1RSQUNFX1NJWkUJMzIJLyogc2l6ZSBvZiBwZXItaW5vZGUgdHJhY2UgYnVmZmVyICovCi1leHRlcm4ga3RyYWNlX3QJKnhmc19ibWJ0X3RyYWNlX2J1ZjsKLQotCiAjZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdCSShjLCBiLCBpKQlcCiAJeGZzX2J0cmVlX3RyYWNlX2FyZ2JpKF9fZnVuY19fLCBjLCBiLCBpLCBfX0xJTkVfXykKICNkZWZpbmUJWEZTX0JUUkVFX1RSQUNFX0FSR0JJSShjLCBiLCBpLCBqKQlcCiAJeGZzX2J0cmVlX3RyYWNlX2FyZ2JpaShfX2Z1bmNfXywgYywgYiwgaSwgaiwgX19MSU5FX18pCi0jZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdGRkZJKGMsIG8sIGIsIGksIGopCVwKLQl4ZnNfYnRyZWVfdHJhY2VfYXJnZmZmaShfX2Z1bmNfXywgYywgbywgYiwgaSwgaiwgX19MSU5FX18pCiAjZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdJKGMsIGkpCVwKIAl4ZnNfYnRyZWVfdHJhY2VfYXJnaShfX2Z1bmNfXywgYywgaSwgX19MSU5FX18pCiAjZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdJUEsoYywgaSwgcCwgaykJXApAQCAtMTA0LDcgKzg4LDYgQEAKICNlbHNlCiAjZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdCSShjLCBiLCBpKQogI2RlZmluZQlYRlNfQlRSRUVfVFJBQ0VfQVJHQklJKGMsIGIsIGksIGopCi0jZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdGRkZJKGMsIG8sIGIsIGksIGopCiAjZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdJKGMsIGkpCiAjZGVmaW5lCVhGU19CVFJFRV9UUkFDRV9BUkdJUEsoYywgaSwgcCwgcykKICNkZWZpbmUJWEZTX0JUUkVFX1RSQUNFX0FSR0lQUihjLCBpLCBwLCByKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5jIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCmluZGV4IDkyYWY0MDkuLmEzMGY3ZTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAKIGttZW1fem9uZV90CSp4ZnNfYnVmX2l0ZW1fem9uZTsKQEAgLTE2NCw3ICsxNjUsNyBAQAogCQkgKiBpcyB0aGUgYnVmIGxvZyBmb3JtYXQgc3RydWN0dXJlIHdpdGggdGhlCiAJCSAqIGNhbmNlbCBmbGFnIGluIGl0LgogCQkgKi8KLQkJeGZzX2J1Zl9pdGVtX3RyYWNlKCJTSVpFIFNUQUxFIiwgYmlwKTsKKwkJdHJhY2VfeGZzX2J1Zl9pdGVtX3NpemVfc3RhbGUoYmlwKTsKIAkJQVNTRVJUKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCk7CiAJCXJldHVybiAxOwogCX0KQEAgLTIwNiw3ICsyMDcsNyBAQAogCQl9CiAJfQogCi0JeGZzX2J1Zl9pdGVtX3RyYWNlKCJTSVpFIE5PUk0iLCBiaXApOworCXRyYWNlX3hmc19idWZfaXRlbV9zaXplKGJpcCk7CiAJcmV0dXJuIG52ZWNzOwogfQogCkBAIC0yNTksNyArMjYwLDcgQEAKIAkJICogaXMgdGhlIGJ1ZiBsb2cgZm9ybWF0IHN0cnVjdHVyZSB3aXRoIHRoZQogCQkgKiBjYW5jZWwgZmxhZyBpbiBpdC4KIAkJICovCi0JCXhmc19idWZfaXRlbV90cmFjZSgiRk9STUFUIFNUQUxFIiwgYmlwKTsKKwkJdHJhY2VfeGZzX2J1Zl9pdGVtX2Zvcm1hdF9zdGFsZShiaXApOwogCQlBU1NFUlQoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKTsKIAkJYmlwLT5ibGlfZm9ybWF0LmJsZl9zaXplID0gbnZlY3M7CiAJCXJldHVybjsKQEAgLTMzNSw3ICszMzYsNyBAQAogCS8qCiAJICogQ2hlY2sgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudC4KIAkgKi8KLQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIkZPUk1BVCBOT1JNIiwgYmlwKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fZm9ybWF0KGJpcCk7CiAJeGZzX2J1Zl9pdGVtX2xvZ19jaGVjayhiaXApOwogfQogCkBAIC0zNTUsOCArMzU2LDcgQEAKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwogCUFTU0VSVCgoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkgfHwKIAkgICAgICAgKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCXhmc19idWZfaXRlbV90cmFjZSgiUElOIiwgYmlwKTsKLQl4ZnNfYnVmdHJhY2UoIlhGU19QSU4iLCBicCk7CisJdHJhY2VfeGZzX2J1Zl9pdGVtX3BpbihiaXApOwogCXhmc19icGluKGJwKTsKIH0KIApAQCAtMzgzLDggKzM4Myw3IEBACiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90ICopID09IGJpcCk7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKLQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIlVOUElOIiwgYmlwKTsKLQl4ZnNfYnVmdHJhY2UoIlhGU19VTlBJTiIsIGJwKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fdW5waW4oYmlwKTsKIAogCWZyZWVkID0gYXRvbWljX2RlY19hbmRfdGVzdCgmYmlwLT5ibGlfcmVmY291bnQpOwogCWFpbHAgPSBiaXAtPmJsaV9pdGVtLmxpX2FpbHA7CkBAIC0zOTUsOCArMzk0LDggQEAKIAkJQVNTRVJUKCEoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSk7CiAJCUFTU0VSVChYRlNfQlVGX0lTU1RBTEUoYnApKTsKIAkJQVNTRVJUKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCk7Ci0JCXhmc19idWZfaXRlbV90cmFjZSgiVU5QSU4gU1RBTEUiLCBiaXApOwotCQl4ZnNfYnVmdHJhY2UoIlhGU19VTlBJTiBTVEFMRSIsIGJwKTsKKwkJdHJhY2VfeGZzX2J1Zl9pdGVtX3VucGluX3N0YWxlKGJpcCk7CisKIAkJLyoKIAkJICogSWYgd2UgZ2V0IGNhbGxlZCBoZXJlIGJlY2F1c2Ugb2YgYW4gSU8gZXJyb3IsIHdlIG1heQogCQkgKiBvciBtYXkgbm90IGhhdmUgdGhlIGl0ZW0gb24gdGhlIEFJTC4geGZzX3RyYW5zX2FpbF9kZWxldGUoKQpAQCAtNDQwLDggKzQzOSw4IEBACiAJaWYgKChhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpID09IDEpICYmCiAJICAgIChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpKSB7CiAJCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJpcC0+YmxpX2J1ZikgPD0gMCk7Ci0JCXhmc19idWZfaXRlbV90cmFjZSgiVU5QSU4gUkVNT1ZFIiwgYmlwKTsKLQkJeGZzX2J1ZnRyYWNlKCJYRlNfVU5QSU5fUkVNT1ZFIiwgYnApOworCQl0cmFjZV94ZnNfYnVmX2l0ZW1fdW5waW5fc3RhbGUoYmlwKTsKKwogCQkvKgogCQkgKiB5ZXMgLS0gY2xlYXIgdGhlIHhhY3Rpb24gZGVzY3JpcHRvciBpbi11c2UgZmxhZwogCQkgKiBhbmQgZnJlZSB0aGUgY2h1bmsgaWYgcmVxdWlyZWQuICBXZSBjYW4gc2FmZWx5CkBAIC00OTUsNyArNDk0LDcgQEAKIAlYRlNfQlVGX0hPTEQoYnApOwogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7Ci0JeGZzX2J1Zl9pdGVtX3RyYWNlKCJUUllMT0NLIFNVQ0NFU1MiLCBiaXApOworCXRyYWNlX3hmc19idWZfaXRlbV90cnlsb2NrKGJpcCk7CiAJcmV0dXJuIFhGU19JVEVNX1NVQ0NFU1M7CiB9CiAKQEAgLTUyNCw3ICs1MjMsNiBAQAogCXVpbnQJCWhvbGQ7CiAKIAlicCA9IGJpcC0+YmxpX2J1ZjsKLQl4ZnNfYnVmdHJhY2UoIlhGU19VTkxPQ0siLCBicCk7CiAKIAkvKgogCSAqIENsZWFyIHRoZSBidWZmZXIncyBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgdHJhbnNhY3Rpb24uCkBAIC01NDcsNyArNTQ1LDcgQEAKIAkgKi8KIAlpZiAoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSB7CiAJCWJpcC0+YmxpX2ZsYWdzICY9IH5YRlNfQkxJX0xPR0dFRDsKLQkJeGZzX2J1Zl9pdGVtX3RyYWNlKCJVTkxPQ0sgU1RBTEUiLCBiaXApOworCQl0cmFjZV94ZnNfYnVmX2l0ZW1fdW5sb2NrX3N0YWxlKGJpcCk7CiAJCUFTU0VSVChiaXAtPmJsaV9mb3JtYXQuYmxmX2ZsYWdzICYgWEZTX0JMSV9DQU5DRUwpOwogCQlpZiAoIWFib3J0ZWQpCiAJCQlyZXR1cm47CkBAIC01NzQsNyArNTcyLDcgQEAKIAkgKiByZWxlYXNlIHRoZSBidWZmZXIgYXQgdGhlIGVuZCBvZiB0aGlzIHJvdXRpbmUuCiAJICovCiAJaG9sZCA9IGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9IT0xEOwotCXhmc19idWZfaXRlbV90cmFjZSgiVU5MT0NLIiwgYmlwKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fdW5sb2NrKGJpcCk7CiAKIAkvKgogCSAqIElmIHRoZSBidWYgaXRlbSBpc24ndCB0cmFja2luZyBhbnkgZGF0YSwgZnJlZSBpdC4KQEAgLTYxOCw3ICs2MTYsOCBAQAogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwLAogCXhmc19sc25fdAkJbHNuKQogewotCXhmc19idWZfaXRlbV90cmFjZSgiQ09NTUlUVEVEIiwgYmlwKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fY29tbWl0dGVkKGJpcCk7CisKIAlpZiAoKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9JTk9ERV9BTExPQ19CVUYpICYmCiAJICAgIChiaXAtPmJsaV9pdGVtLmxpX2xzbiAhPSAwKSkgewogCQlyZXR1cm4gYmlwLT5ibGlfaXRlbS5saV9sc247CkBAIC02NDAsNyArNjM5LDcgQEAKIAl4ZnNfYnVmX3QJKmJwOwogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7Ci0JeGZzX2J1Zl9pdGVtX3RyYWNlKCJQVVNIIiwgYmlwKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fcHVzaChiaXApOwogCiAJYnAgPSBiaXAtPmJsaV9idWY7CiAKQEAgLTczOCw5ICs3MzcsNiBAQAogCWJpcC0+YmxpX2Zvcm1hdC5ibGZfYmxrbm8gPSAoX19pbnQ2NF90KVhGU19CVUZfQUREUihicCk7CiAJYmlwLT5ibGlfZm9ybWF0LmJsZl9sZW4gPSAodXNob3J0KUJUT0JCKFhGU19CVUZfQ09VTlQoYnApKTsKIAliaXAtPmJsaV9mb3JtYXQuYmxmX21hcF9zaXplID0gbWFwX3NpemU7Ci0jaWZkZWYgWEZTX0JMSV9UUkFDRQotCWJpcC0+YmxpX3RyYWNlID0ga3RyYWNlX2FsbG9jKFhGU19CTElfVFJBQ0VfU0laRSwgS01fTk9GUyk7Ci0jZW5kaWYKIAogI2lmZGVmIFhGU19UUkFOU19ERUJVRwogCS8qCkBAIC04NzgsOSArODc0LDYgQEAKIAlrbWVtX2ZyZWUoYmlwLT5ibGlfbG9nZ2VkKTsKICNlbmRpZiAvKiBYRlNfVFJBTlNfREVCVUcgKi8KIAotI2lmZGVmIFhGU19CTElfVFJBQ0UKLQlrdHJhY2VfZnJlZShiaXAtPmJsaV90cmFjZSk7Ci0jZW5kaWYKIAlrbWVtX3pvbmVfZnJlZSh4ZnNfYnVmX2l0ZW1fem9uZSwgYmlwKTsKIH0KIApAQCAtODk3LDcgKzg5MCw4IEBACiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXA7CiAKLQl4ZnNfYnVmdHJhY2UoIlhGU19SRUxTRSIsIGJwKTsKKwl0cmFjZV94ZnNfYnVmX2l0ZW1fcmVsc2UoYnAsIF9SRVRfSVBfKTsKKwogCWJpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfYnVmX2xvZ19pdGVtX3QqKTsKIAlYRlNfQlVGX1NFVF9GU1BSSVZBVEUoYnAsIGJpcC0+YmxpX2l0ZW0ubGlfYmlvX2xpc3QpOwogCWlmICgoWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHZvaWQgKikgPT0gTlVMTCkgJiYKQEAgLTk5NCw3ICs5ODgsNyBAQAogCQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKIAkJCUFTU0VSVChYRlNfQlVGX1RBUkdFVChicCkgPT0gbXAtPm1fZGRldl90YXJncCk7CiAJCQlYRlNfQlVGX1NVUEVSX1NUQUxFKGJwKTsKLQkJCXhmc19idWZ0cmFjZSgiQlVGX0lPRE9ORV9DQiIsIGJwKTsKKwkJCXRyYWNlX3hmc19idWZfaXRlbV9pb2RvbmUoYnAsIF9SRVRfSVBfKTsKIAkJCXhmc19idWZfZG9fY2FsbGJhY2tzKGJwLCBsaXApOwogCQkJWEZTX0JVRl9TRVRfRlNQUklWQVRFKGJwLCBOVUxMKTsKIAkJCVhGU19CVUZfQ0xSX0lPRE9ORV9GVU5DKGJwKTsKQEAgLTEwMzAsNyArMTAyNCw3IEBACiAJCQkJWEZTX0JVRl9TRVRfU1RBUlQoYnApOwogCQkJfQogCQkJQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApKTsKLQkJCXhmc19idWZ0cmFjZSgiQlVGX0lPRE9ORSBBU1lOQyIsIGJwKTsKKwkJCXRyYWNlX3hmc19idWZfaXRlbV9pb2RvbmVfYXN5bmMoYnAsIF9SRVRfSVBfKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwogCQl9IGVsc2UgewogCQkJLyoKQEAgLTEwNTMsOSArMTA0Nyw3IEBACiAJCX0KIAkJcmV0dXJuOwogCX0KLSNpZmRlZiBYRlNFUlJPUkRFQlVHCi0JeGZzX2J1ZnRyYWNlKCJYRlMgQlVGQ0IgTk9FUlIiLCBicCk7Ci0jZW5kaWYKKwogCXhmc19idWZfZG9fY2FsbGJhY2tzKGJwLCBsaXApOwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURShicCwgTlVMTCk7CiAJWEZTX0JVRl9DTFJfSU9ET05FX0ZVTkMoYnApOwpAQCAtMTA4MSw3ICsxMDczLDkgQEAKIAlYRlNfQlVGX0RPTkUoYnApOwogCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKIAlYRlNfQlVGX0VSUk9SKGJwLDApOwotCXhmc19idWZ0cmFjZSgiQlVGX0VSUk9SX1JFTFNFIiwgYnApOworCisJdHJhY2VfeGZzX2J1Zl9lcnJvcl9yZWxzZShicCwgX1JFVF9JUF8pOworCiAJaWYgKCEgWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCiAJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7CiAJLyoKQEAgLTExMjgsMzQgKzExMjIsMyBAQAogCXhmc190cmFuc19haWxfZGVsZXRlKGFpbHAsICh4ZnNfbG9nX2l0ZW1fdCAqKWJpcCk7CiAJeGZzX2J1Zl9pdGVtX2ZyZWUoYmlwKTsKIH0KLQotI2lmIGRlZmluZWQoWEZTX0JMSV9UUkFDRSkKLXZvaWQKLXhmc19idWZfaXRlbV90cmFjZSgKLQljaGFyCQkJKmlkLAotCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwKQotewotCXhmc19idWZfdAkJKmJwOwotCUFTU0VSVChiaXAtPmJsaV90cmFjZSAhPSBOVUxMKTsKLQotCWJwID0gYmlwLT5ibGlfYnVmOwotCWt0cmFjZV9lbnRlcihiaXAtPmJsaV90cmFjZSwKLQkJICAgICAodm9pZCAqKWlkLAotCQkgICAgICh2b2lkICopYmlwLT5ibGlfYnVmLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWJpcC0+YmxpX2ZsYWdzKSwKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZyliaXAtPmJsaV9yZWN1ciksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCi0JCQkJKDB4RkZGRkZGRkYgJiBYRlNfQlVGX0FERFIoYnApID4+IDMyKSksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKDB4RkZGRkZGRkYgJiBYRlNfQlVGX0FERFIoYnApKSksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpWEZTX0JVRl9DT1VOVChicCkpLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKVhGU19CVUZfQkZMQUdTKGJwKSksCi0JCSAgICAgWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHZvaWQgKiksCi0JCSAgICAgWEZTX0JVRl9GU1BSSVZBVEUyKGJwLCB2b2lkICopLAotCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpWEZTX0JVRl9JU1BJTk5FRChicCksCi0JCSAgICAgKHZvaWQgKilYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSwKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZykoWEZTX0JVRl9WQUxVU0VNQShicCkpKSwKLQkJICAgICAodm9pZCAqKWJpcC0+YmxpX2l0ZW0ubGlfZGVzYywKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZyliaXAtPmJsaV9pdGVtLmxpX2ZsYWdzKSk7Ci19Ci0jZW5kaWYgLyogWEZTX0JMSV9UUkFDRSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5oIGIvZnMveGZzL3hmc19idWZfaXRlbS5oCmluZGV4IDVhNDFjMzQuLjIxN2YzNGEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmgKQEAgLTcwLDIyICs3MCwyMSBAQAogI2RlZmluZQlYRlNfQkxJX0lOT0RFX0FMTE9DX0JVRgkweDEwCiAjZGVmaW5lIFhGU19CTElfU1RBTEVfSU5PREUJMHgyMAogCisjZGVmaW5lIFhGU19CTElfRkxBR1MgXAorCXsgWEZTX0JMSV9IT0xELAkJIkhPTEQiIH0sIFwKKwl7IFhGU19CTElfRElSVFksCSJESVJUWSIgfSwgXAorCXsgWEZTX0JMSV9TVEFMRSwJIlNUQUxFIiB9LCBcCisJeyBYRlNfQkxJX0xPR0dFRCwJIkxPR0dFRCIgfSwgXAorCXsgWEZTX0JMSV9JTk9ERV9BTExPQ19CVUYsICJJTk9ERV9BTExPQyIgfSwgXAorCXsgWEZTX0JMSV9TVEFMRV9JTk9ERSwJIlNUQUxFX0lOT0RFIiB9CisKIAogI2lmZGVmIF9fS0VSTkVMX18KIAogc3RydWN0IHhmc19idWY7Ci1zdHJ1Y3Qga3RyYWNlOwogc3RydWN0IHhmc19tb3VudDsKIHN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtOwogCi0jaWYgZGVmaW5lZChYRlNfQkxJX1RSQUNFKQotI2RlZmluZQlYRlNfQkxJX1RSQUNFX1NJWkUJMzIKLQotdm9pZAl4ZnNfYnVmX2l0ZW1fdHJhY2UoY2hhciAqLCBzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbSAqKTsKLSNlbHNlCi0jZGVmaW5lCXhmc19idWZfaXRlbV90cmFjZShpZCwgYmlwKQotI2VuZGlmCi0KIC8qCiAgKiBUaGlzIGlzIHRoZSBpbiBjb3JlIGxvZyBpdGVtIHN0cnVjdHVyZSB1c2VkIHRvIHRyYWNrIGluZm9ybWF0aW9uCiAgKiBuZWVkZWQgdG8gbG9nIGJ1ZmZlcnMuICBJdCB0cmFja3MgaG93IG1hbnkgdGltZXMgdGhlIGxvY2sgaGFzIGJlZW4KQEAgLTk3LDkgKzk2LDYgQEAKIAl1bnNpZ25lZCBpbnQJCWJsaV9mbGFnczsJLyogbWlzYyBmbGFncyAqLwogCXVuc2lnbmVkIGludAkJYmxpX3JlY3VyOwkvKiBsb2NrIHJlY3Vyc2lvbiBjb3VudCAqLwogCWF0b21pY190CQlibGlfcmVmY291bnQ7CS8qIGNudCBvZiB0cCByZWZzICovCi0jaWZkZWYgWEZTX0JMSV9UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSpibGlfdHJhY2U7CS8qIGV2ZW50IHRyYWNlIGJ1ZiAqLwotI2VuZGlmCiAjaWZkZWYgWEZTX1RSQU5TX0RFQlVHCiAJY2hhcgkJCSpibGlfb3JpZzsJLyogb3JpZ2luYWwgYnVmZmVyIGNvcHkgKi8KIAljaGFyCQkJKmJsaV9sb2dnZWQ7CS8qIGJ5dGVzIGxvZ2dlZCAoYml0bWFwKSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5jIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCmluZGV4IDI4NDdiYmMuLmMwYzg4NjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9ibG9jay5oIgogI2luY2x1ZGUgInhmc19kaXIyX25vZGUuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIHhmc19kYV9idHJlZS5jCkBAIC0yMTA3LDcgKzIxMDgsNyBAQAogCQkJCSAgIChiZTMyX3RvX2NwdShmcmVlLT5oZHIubWFnaWMpICE9IFhGU19ESVIyX0ZSRUVfTUFHSUMpLAogCQkJCW1wLCBYRlNfRVJSVEFHX0RBX1JFQURfQlVGLAogCQkJCVhGU19SQU5ET01fREFfUkVBRF9CVUYpKSkgewotCQkJeGZzX2J1ZnRyYWNlKCJEQSBSRUFEIEVSUk9SIiwgcmJwLT5icHNbMF0pOworCQkJdHJhY2VfeGZzX2RhX2J0cmVlX2NvcnJ1cHQocmJwLT5icHNbMF0sIF9SRVRfSVBfKTsKIAkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfZGFfZG9fYnVmKDIpIiwKIAkJCQkJICAgICBYRlNfRVJSTEVWRUxfTE9XLCBtcCwgaW5mbyk7CiAJCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5oIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCmluZGV4IDhjNTM2MTYuLjMwY2QwOGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKQEAgLTEyNSw2ICsxMjUsMTMgQEAKICNkZWZpbmUgWEZTX0RBX09QX09LTk9FTlQJMHgwMDA4CS8qIGxvb2t1cC9hZGQgb3AsIEVOT0VOVCBvaywgZWxzZSBkaWUgKi8KICNkZWZpbmUgWEZTX0RBX09QX0NJTE9PS1VQCTB4MDAxMAkvKiBsb29rdXAgdG8gcmV0dXJuIENJIG5hbWUgaWYgZm91bmQgKi8KIAorI2RlZmluZSBYRlNfREFfT1BfRkxBR1MgXAorCXsgWEZTX0RBX09QX0pVU1RDSEVDSywJIkpVU1RDSEVDSyIgfSwgXAorCXsgWEZTX0RBX09QX1JFTkFNRSwJIlJFTkFNRSIgfSwgXAorCXsgWEZTX0RBX09QX0FERE5BTUUsCSJBREROQU1FIiB9LCBcCisJeyBYRlNfREFfT1BfT0tOT0VOVCwJIk9LTk9FTlQiIH0sIFwKKwl7IFhGU19EQV9PUF9DSUxPT0tVUCwJIkNJTE9PS1VQIiB9CisKIC8qCiAgKiBTdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYnVmZmVyKHMpIGZvciBhIGJsb2NrLgogICogVGhpcyBpcyBuZWVkZWQgaW4gdGhlIGRpcmVjdG9yeSB2ZXJzaW9uIDIgZm9ybWF0IGNhc2UsIHdoZW4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCBhYjg5YTdlLi5kMTQ4M2E0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCiAgKiBTeXNzZ2kgaW50ZXJmYWNlIGZvciBzd2FwZXh0CkBAIC0xNjgsNyArMTY5LDYgQEAKIAl9CiAKIAlpZiAoVk5fQ0FDSEVEKFZGU19JKHRpcCkpICE9IDApIHsKLQkJeGZzX2ludmFsX2NhY2hlZF90cmFjZSh0aXAsIDAsIC0xLCAwLCAtMSk7CiAJCWVycm9yID0geGZzX2ZsdXNoaW52YWxfcGFnZXModGlwLCAwLCAtMSwKIAkJCQlGSV9SRU1BUEZfTE9DS0VEKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmMgYi9mcy94ZnMveGZzX2RpcjIuYwppbmRleCBiYjFkNThlYi4uOTM2MzRhNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmMKKysrIGIvZnMveGZzL3hmc19kaXIyLmMKQEAgLTQwLDkgKzQwLDkgQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9sZWFmLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfYmxvY2suaCIKICNpbmNsdWRlICJ4ZnNfZGlyMl9ub2RlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogc3RydWN0IHhmc19uYW1lIHhmc19uYW1lX2RvdGRvdCA9IHsiLi4iLCAyfTsKIApAQCAtNTI1LDcgKzUyNSw4IEBACiAJeGZzX3RyYW5zX3QJKnRwOwogCXhmc19kcmZzYm5vX3QJbmJsa3M7CiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzX3MoImdyb3dfaW5vZGUiLCBhcmdzLCBzcGFjZSk7CisJdHJhY2VfeGZzX2RpcjJfZ3Jvd19pbm9kZShhcmdzLCBzcGFjZSk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCXRwID0gYXJncy0+dHJhbnM7CiAJbXAgPSBkcC0+aV9tb3VudDsKQEAgLTcwMyw3ICs3MDQsOCBAQAogCXhmc19tb3VudF90CSptcDsKIAl4ZnNfdHJhbnNfdAkqdHA7CiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzX2RiKCJzaHJpbmtfaW5vZGUiLCBhcmdzLCBkYiwgYnApOworCXRyYWNlX3hmc19kaXIyX3Nocmlua19pbm9kZShhcmdzLCBkYik7CisKIAlkcCA9IGFyZ3MtPmRwOwogCW1wID0gZHAtPmlfbW91bnQ7CiAJdHAgPSBhcmdzLT50cmFuczsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKaW5kZXggYWI1MmU5ZS4uZGRjNGVjYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9kYXRhLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfbGVhZi5oIgogI2luY2x1ZGUgInhmc19kaXIyX2Jsb2NrLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMuCkBAIC05NCw3ICs5NCw4IEBACiAJX19iZTE2CQkJKnRhZ3A7CQkvKiBwb2ludGVyIHRvIHRhZyB2YWx1ZSAqLwogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmUgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoImJsb2NrX2FkZG5hbWUiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9ibG9ja19hZGRuYW1lKGFyZ3MpOworCiAJZHAgPSBhcmdzLT5kcDsKIAl0cCA9IGFyZ3MtPnRyYW5zOwogCW1wID0gZHAtPmlfbW91bnQ7CkBAIC01OTAsNyArNTkxLDggQEAKIAlpbnQJCQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwogCXhmc19tb3VudF90CQkqbXA7CQkvKiBmaWxlc3lzdGVtIG1vdW50IHBvaW50ICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJibG9ja19sb29rdXAiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9ibG9ja19sb29rdXAoYXJncyk7CisKIAkvKgogCSAqIEdldCB0aGUgYnVmZmVyLCBsb29rIHVwIHRoZSBlbnRyeS4KIAkgKiBJZiBub3QgZm91bmQgKEVOT0VOVCkgdGhlbiByZXR1cm4sIGhhdmUgbm8gYnVmZmVyLgpAQCAtNzQ3LDcgKzc0OSw4IEBACiAJaW50CQkJc2l6ZTsJCS8qIHNob3J0Zm9ybSBzaXplICovCiAJeGZzX3RyYW5zX3QJCSp0cDsJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoImJsb2NrX3JlbW92ZW5hbWUiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9ibG9ja19yZW1vdmVuYW1lKGFyZ3MpOworCiAJLyoKIAkgKiBMb29rIHVwIHRoZSBlbnRyeSBpbiB0aGUgYmxvY2suICBHZXRzIHRoZSBidWZmZXIgYW5kIGVudHJ5IGluZGV4LgogCSAqIEl0IHdpbGwgYWx3YXlzIGJlIHRoZXJlLCB0aGUgdm5vZGVvcHMgbGV2ZWwgZG9lcyBhIGxvb2t1cCBmaXJzdC4KQEAgLTgyMyw3ICs4MjYsOCBAQAogCWludAkJCWVycm9yOwkJLyogZXJyb3IgcmV0dXJuIHZhbHVlICovCiAJeGZzX21vdW50X3QJCSptcDsJCS8qIGZpbGVzeXN0ZW0gbW91bnQgcG9pbnQgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoImJsb2NrX3JlcGxhY2UiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9ibG9ja19yZXBsYWNlKGFyZ3MpOworCiAJLyoKIAkgKiBMb29rdXAgdGhlIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkuICBHZXQgYnVmZmVyIGFuZCBlbnRyeSBpbmRleC4KIAkgKiBUaGlzIHdpbGwgYWx3YXlzIHN1Y2NlZWQgc2luY2UgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBkb25lIGEgbG9va3VwLgpAQCAtODk3LDcgKzkwMSw4IEBACiAJaW50CQkJdG87CQkvKiBibG9jay9sZWFmIHRvIGluZGV4ICovCiAJeGZzX3RyYW5zX3QJCSp0cDsJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3NfYmIoImxlYWZfdG9fYmxvY2siLCBhcmdzLCBsYnAsIGRicCk7CisJdHJhY2VfeGZzX2RpcjJfbGVhZl90b19ibG9jayhhcmdzKTsKKwogCWRwID0gYXJncy0+ZHA7CiAJdHAgPSBhcmdzLT50cmFuczsKIAltcCA9IGRwLT5pX21vdW50OwpAQCAtMTA0NCw3ICsxMDQ5LDggQEAKIAl4ZnNfdHJhbnNfdAkJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCXN0cnVjdCB4ZnNfbmFtZQkJbmFtZTsKIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoInNmX3RvX2Jsb2NrIiwgYXJncyk7CisJdHJhY2VfeGZzX2RpcjJfc2ZfdG9fYmxvY2soYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCXRwID0gYXJncy0+dHJhbnM7CiAJbXAgPSBkcC0+aV9tb3VudDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IDQxYWQ1MzcuLjI5ZjQ4NGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgInhmc19kaXIyX2xlYWYuaCIKICNpbmNsdWRlICJ4ZnNfZGlyMl9ibG9jay5oIgogI2luY2x1ZGUgInhmc19kaXIyX25vZGUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl90cmFjZS5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAvKgogICogTG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgpAQCAtODAsNyArODAsOCBAQAogCWludAkJCW5lZWRzY2FuOwkvKiBuZWVkIHRvIHJlc2NhbiBiZXN0ZnJlZSAqLwogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzX2IoImJsb2NrX3RvX2xlYWYiLCBhcmdzLCBkYnApOworCXRyYWNlX3hmc19kaXIyX2Jsb2NrX3RvX2xlYWYoYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCW1wID0gZHAtPmlfbW91bnQ7CiAJdHAgPSBhcmdzLT50cmFuczsKQEAgLTE4OCw3ICsxODksOCBAQAogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAJeGZzX2RpcjJfZGJfdAkJdXNlX2Jsb2NrOwkvKiBkYXRhIGJsb2NrIG51bWJlciAqLwogCi0JeGZzX2RpcjJfdHJhY2VfYXJncygibGVhZl9hZGRuYW1lIiwgYXJncyk7CisJdHJhY2VfeGZzX2RpcjJfbGVhZl9hZGRuYW1lKGFyZ3MpOworCiAJZHAgPSBhcmdzLT5kcDsKIAl0cCA9IGFyZ3MtPnRyYW5zOwogCW1wID0gZHAtPmlfbW91bnQ7CkBAIC0xMjY2LDcgKzEyNjgsOCBAQAogCXhmc19kaXIyX2xlYWZfZW50cnlfdAkqbGVwOwkJLyogbGVhZiBlbnRyeSAqLwogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJsZWFmX2xvb2t1cCIsIGFyZ3MpOworCXRyYWNlX3hmc19kaXIyX2xlYWZfbG9va3VwKGFyZ3MpOworCiAJLyoKIAkgKiBMb29rIHVwIG5hbWUgaW4gdGhlIGxlYWYgYmxvY2ssIHJldHVybmluZyBib3RoIGJ1ZmZlcnMgYW5kIGluZGV4LgogCSAqLwpAQCAtMTQ1NCw3ICsxNDU3LDggQEAKIAl4ZnNfZGlyMl9kYXRhX29mZl90CW9sZGJlc3Q7CS8qIG9sZCB2YWx1ZSBvZiBiZXN0IGZyZWUgKi8KIAl4ZnNfdHJhbnNfdAkJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCi0JeGZzX2RpcjJfdHJhY2VfYXJncygibGVhZl9yZW1vdmVuYW1lIiwgYXJncyk7CisJdHJhY2VfeGZzX2RpcjJfbGVhZl9yZW1vdmVuYW1lKGFyZ3MpOworCiAJLyoKIAkgKiBMb29rdXAgdGhlIGxlYWYgZW50cnksIGdldCB0aGUgbGVhZiBhbmQgZGF0YSBibG9ja3MgcmVhZCBpbi4KIAkgKi8KQEAgLTE1ODYsNyArMTU5MCw4IEBACiAJeGZzX2RpcjJfbGVhZl9lbnRyeV90CSpsZXA7CQkvKiBsZWFmIGVudHJ5ICovCiAJeGZzX3RyYW5zX3QJCSp0cDsJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoImxlYWZfcmVwbGFjZSIsIGFyZ3MpOworCXRyYWNlX3hmc19kaXIyX2xlYWZfcmVwbGFjZShhcmdzKTsKKwogCS8qCiAJICogTG9vayB1cCB0aGUgZW50cnkuCiAJICovCkBAIC0xNzY2LDcgKzE3NzEsOSBAQAogCWlmIChzdGF0ZS0+cGF0aC5hY3RpdmUgPiAxKQogCQlyZXR1cm4gMDsKIAlhcmdzID0gc3RhdGUtPmFyZ3M7Ci0JeGZzX2RpcjJfdHJhY2VfYXJncygibm9kZV90b19sZWFmIiwgYXJncyk7CisKKwl0cmFjZV94ZnNfZGlyMl9ub2RlX3RvX2xlYWYoYXJncyk7CisKIAltcCA9IHN0YXRlLT5tcDsKIAlkcCA9IGFyZ3MtPmRwOwogCXRwID0gYXJncy0+dHJhbnM7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5jIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwppbmRleCA1YTgxY2NkLi5jZTZlMzU1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9sZWFmLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfYmxvY2suaCIKICNpbmNsdWRlICJ4ZnNfZGlyMl9ub2RlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KQEAgLTEyMyw3ICsxMjMsOCBAQAogCV9fYmUxNgkJCSp0bzsJCS8qIHBvaW50ZXIgdG8gZnJlZXNwYWNlIGVudHJ5ICovCiAJeGZzX3RyYW5zX3QJCSp0cDsJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3NfYigibGVhZl90b19ub2RlIiwgYXJncywgbGJwKTsKKwl0cmFjZV94ZnNfZGlyMl9sZWFmX3RvX25vZGUoYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCW1wID0gZHAtPmlfbW91bnQ7CiAJdHAgPSBhcmdzLT50cmFuczsKQEAgLTE5Niw3ICsxOTcsOCBAQAogCXhmc19tb3VudF90CQkqbXA7CQkvKiBmaWxlc3lzdGVtIG1vdW50IHBvaW50ICovCiAJeGZzX3RyYW5zX3QJCSp0cDsJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3Nfc2IoImxlYWZuX2FkZCIsIGFyZ3MsIGluZGV4LCBicCk7CisJdHJhY2VfeGZzX2RpcjJfbGVhZm5fYWRkKGFyZ3MsIGluZGV4KTsKKwogCWRwID0gYXJncy0+ZHA7CiAJbXAgPSBkcC0+aV9tb3VudDsKIAl0cCA9IGFyZ3MtPnRyYW5zOwpAQCAtNzExLDggKzcxMyw4IEBACiAJaW50CQlzdGFsZTsJCQkvKiBjb3VudCBzdGFsZSBsZWF2ZXMgY29waWVkICovCiAJeGZzX3RyYW5zX3QJKnRwOwkJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3NfYmliaWkoImxlYWZuX21vdmVlbnRzIiwgYXJncywgYnBfcywgc3RhcnRfcywgYnBfZCwKLQkJc3RhcnRfZCwgY291bnQpOworCXRyYWNlX3hmc19kaXIyX2xlYWZuX21vdmVlbnRzKGFyZ3MsIHN0YXJ0X3MsIHN0YXJ0X2QsIGNvdW50KTsKKwogCS8qCiAJICogU2lsZW50bHkgcmV0dXJuIGlmIG5vdGhpbmcgdG8gZG8uCiAJICovCkBAIC05MzMsNyArOTM1LDggQEAKIAlpbnQJCQluZWVkc2NhbjsJLyogbmVlZCB0byByZXNjYW4gZGF0YSBmcmVlcyAqLwogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzX3NiKCJsZWFmbl9yZW1vdmUiLCBhcmdzLCBpbmRleCwgYnApOworCXRyYWNlX3hmc19kaXIyX2xlYWZuX3JlbW92ZShhcmdzLCBpbmRleCk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCXRwID0gYXJncy0+dHJhbnM7CiAJbXAgPSBkcC0+aV9tb3VudDsKQEAgLTEzNjMsNyArMTM2Niw4IEBACiAJaW50CQkJcnZhbDsJCS8qIHN1Yi1yZXR1cm4gdmFsdWUgKi8KIAl4ZnNfZGFfc3RhdGVfdAkJKnN0YXRlOwkJLyogYnRyZWUgY3Vyc29yICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJub2RlX2FkZG5hbWUiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9ub2RlX2FkZG5hbWUoYXJncyk7CisKIAkvKgogCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzdGF0ZSAoYnRyZWUgY3Vyc29yKS4KIAkgKi8KQEAgLTE4MjIsNyArMTgyNiw4IEBACiAJaW50CQlydmFsOwkJCS8qIG9wZXJhdGlvbiByZXR1cm4gdmFsdWUgKi8KIAl4ZnNfZGFfc3RhdGVfdAkqc3RhdGU7CQkJLyogYnRyZWUgY3Vyc29yICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJub2RlX2xvb2t1cCIsIGFyZ3MpOworCXRyYWNlX3hmc19kaXIyX25vZGVfbG9va3VwKGFyZ3MpOworCiAJLyoKIAkgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgYnRyZWUgY3Vyc29yLgogCSAqLwpAQCAtMTg3NSw3ICsxODgwLDggQEAKIAlpbnQJCQlydmFsOwkJLyogb3BlcmF0aW9uIHJldHVybiB2YWx1ZSAqLwogCXhmc19kYV9zdGF0ZV90CQkqc3RhdGU7CQkvKiBidHJlZSBjdXJzb3IgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoIm5vZGVfcmVtb3ZlbmFtZSIsIGFyZ3MpOworCXRyYWNlX3hmc19kaXIyX25vZGVfcmVtb3ZlbmFtZShhcmdzKTsKKwogCS8qCiAJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGJ0cmVlIGN1cnNvci4KIAkgKi8KQEAgLTE5NDQsNyArMTk1MCw4IEBACiAJaW50CQkJcnZhbDsJCS8qIGludGVybmFsIHJldHVybiB2YWx1ZSAqLwogCXhmc19kYV9zdGF0ZV90CQkqc3RhdGU7CQkvKiBidHJlZSBjdXJzb3IgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoIm5vZGVfcmVwbGFjZSIsIGFyZ3MpOworCXRyYWNlX3hmc19kaXIyX25vZGVfcmVwbGFjZShhcmdzKTsKKwogCS8qCiAJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGJ0cmVlIGN1cnNvci4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKaW5kZXggZTg5NzM0ZS4uOWQ0ZjE3YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX3NmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9kYXRhLmgiCiAjaW5jbHVkZSAieGZzX2RpcjJfbGVhZi5oIgogI2luY2x1ZGUgInhmc19kaXIyX2Jsb2NrLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogLyoKICAqIFByb3RvdHlwZXMgZm9yIGludGVybmFsIGZ1bmN0aW9ucy4KQEAgLTE2OSw3ICsxNjksOCBAQAogCXhmc19kaXIyX3NmX3QJCSpzZnA7CQkvKiBzaG9ydGZvcm0gc3RydWN0dXJlICovCiAJeGZzX2lub190ICAgICAgICAgICAgICAgdGVtcDsKIAotCXhmc19kaXIyX3RyYWNlX2FyZ3Nfc2IoImJsb2NrX3RvX3NmIiwgYXJncywgc2l6ZSwgYnApOworCXRyYWNlX3hmc19kaXIyX2Jsb2NrX3RvX3NmKGFyZ3MpOworCiAJZHAgPSBhcmdzLT5kcDsKIAltcCA9IGRwLT5pX21vdW50OwogCkBAIC0yODEsNyArMjgyLDggQEAKIAl4ZnNfZGlyMl9zZl90CQkqc2ZwOwkJLyogc2hvcnRmb3JtIHN0cnVjdHVyZSAqLwogCXhmc19kaXIyX3NmX2VudHJ5X3QJKnNmZXAgPSBOVUxMOwkvKiBzaG9ydGZvcm0gZW50cnkgKi8KIAotCXhmc19kaXIyX3RyYWNlX2FyZ3MoInNmX2FkZG5hbWUiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9zZl9hZGRuYW1lKGFyZ3MpOworCiAJQVNTRVJUKHhmc19kaXIyX3NmX2xvb2t1cChhcmdzKSA9PSBFTk9FTlQpOwogCWRwID0gYXJncy0+ZHA7CiAJQVNTRVJUKGRwLT5pX2RmLmlmX2ZsYWdzICYgWEZTX0lGSU5MSU5FKTsKQEAgLTY1NCw3ICs2NTYsOCBAQAogCXhmc19kaXIyX3NmX3QJKnNmcDsJCS8qIHNob3J0Zm9ybSBzdHJ1Y3R1cmUgKi8KIAlpbnQJCXNpemU7CQkvKiBkaXJlY3Rvcnkgc2l6ZSAqLwogCi0JeGZzX2RpcjJfdHJhY2VfYXJnc19pKCJzZl9jcmVhdGUiLCBhcmdzLCBwaW5vKTsKKwl0cmFjZV94ZnNfZGlyMl9zZl9jcmVhdGUoYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCiAJQVNTRVJUKGRwICE9IE5VTEwpOwpAQCAtODA4LDcgKzgxMSw4IEBACiAJZW51bSB4ZnNfZGFjbXAJCWNtcDsJCS8qIGNvbXBhcmlzb24gcmVzdWx0ICovCiAJeGZzX2RpcjJfc2ZfZW50cnlfdAkqY2lfc2ZlcDsJLyogY2FzZS1pbnNlbnMuIGVudHJ5ICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJzZl9sb29rdXAiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9zZl9sb29rdXAoYXJncyk7CisKIAl4ZnNfZGlyMl9zZl9jaGVjayhhcmdzKTsKIAlkcCA9IGFyZ3MtPmRwOwogCkBAIC04OTEsNyArODk1LDggQEAKIAl4ZnNfZGlyMl9zZl9lbnRyeV90CSpzZmVwOwkJLyogc2hvcnRmb3JtIGRpcmVjdG9yeSBlbnRyeSAqLwogCXhmc19kaXIyX3NmX3QJCSpzZnA7CQkvKiBzaG9ydGZvcm0gc3RydWN0dXJlICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJzZl9yZW1vdmVuYW1lIiwgYXJncyk7CisJdHJhY2VfeGZzX2RpcjJfc2ZfcmVtb3ZlbmFtZShhcmdzKTsKKwogCWRwID0gYXJncy0+ZHA7CiAKIAlBU1NFUlQoZHAtPmlfZGYuaWZfZmxhZ3MgJiBYRlNfSUZJTkxJTkUpOwpAQCAtOTgyLDcgKzk4Nyw4IEBACiAJeGZzX2RpcjJfc2ZfZW50cnlfdAkqc2ZlcDsJCS8qIHNob3J0Zm9ybSBkaXJlY3RvcnkgZW50cnkgKi8KIAl4ZnNfZGlyMl9zZl90CQkqc2ZwOwkJLyogc2hvcnRmb3JtIHN0cnVjdHVyZSAqLwogCi0JeGZzX2RpcjJfdHJhY2VfYXJncygic2ZfcmVwbGFjZSIsIGFyZ3MpOworCXRyYWNlX3hmc19kaXIyX3NmX3JlcGxhY2UoYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCiAJQVNTRVJUKGRwLT5pX2RmLmlmX2ZsYWdzICYgWEZTX0lGSU5MSU5FKTsKQEAgLTExMjUsNyArMTEzMSw4IEBACiAJeGZzX2RpcjJfc2ZfZW50cnlfdAkqc2ZlcDsJCS8qIG5ldyBzZiBlbnRyeSAqLwogCXhmc19kaXIyX3NmX3QJCSpzZnA7CQkvKiBuZXcgc2YgZGlyZWN0b3J5ICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJzZl90b2lubzQiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9zZl90b2lubzQoYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCiAJLyoKQEAgLTEyMDIsNyArMTIwOSw4IEBACiAJeGZzX2RpcjJfc2ZfZW50cnlfdAkqc2ZlcDsJCS8qIG5ldyBzZiBlbnRyeSAqLwogCXhmc19kaXIyX3NmX3QJCSpzZnA7CQkvKiBuZXcgc2YgZGlyZWN0b3J5ICovCiAKLQl4ZnNfZGlyMl90cmFjZV9hcmdzKCJzZl90b2lubzgiLCBhcmdzKTsKKwl0cmFjZV94ZnNfZGlyMl9zZl90b2lubzgoYXJncyk7CisKIAlkcCA9IGFyZ3MtPmRwOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl90cmFjZS5jIGIvZnMveGZzL3hmc19kaXIyX3RyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYzdjMGMuLjAwMDAwMDAKLS0tIGEvZnMveGZzL3hmc19kaXIyX3RyYWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgInhmcy5oIgotI2luY2x1ZGUgInhmc19mcy5oIgotI2luY2x1ZGUgInhmc190eXBlcy5oIgotI2luY2x1ZGUgInhmc19pbnVtLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCi0jaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKLQotI2lmZGVmIFhGU19ESVIyX1RSQUNFCi1rdHJhY2VfdAkqeGZzX2RpcjJfdHJhY2VfYnVmOwotCi0vKgotICogRW50ZXIgc29tZXRoaW5nIGluIHRoZSB0cmFjZSBidWZmZXJzLgotICovCi1zdGF0aWMgdm9pZAoteGZzX2RpcjJfdHJhY2VfZW50ZXIoCi0JeGZzX2lub2RlX3QJKmRwLAotCWludAkJdHlwZSwKLQljaGFyCQkqd2hlcmUsCi0JY2hhcgkJKm5hbWUsCi0JaW50CQluYW1lbGVuLAotCXZvaWQJCSphMCwKLQl2b2lkCQkqYTEsCi0Jdm9pZAkJKmEyLAotCXZvaWQJCSphMywKLQl2b2lkCQkqYTQsCi0Jdm9pZAkJKmE1LAotCXZvaWQJCSphNiwKLQl2b2lkCQkqYTcpCi17Ci0Jdm9pZAkJKm5bNV07Ci0KLQlBU1NFUlQoeGZzX2RpcjJfdHJhY2VfYnVmKTsKLQlBU1NFUlQoZHAtPmlfZGlyX3RyYWNlKTsKLQlpZiAobmFtZSkKLQkJbWVtY3B5KG4sIG5hbWUsIG1pbigoaW50KXNpemVvZihuKSwgbmFtZWxlbikpOwotCWVsc2UKLQkJbWVtc2V0KChjaGFyICopbiwgMCwgc2l6ZW9mKG4pKTsKLQlrdHJhY2VfZW50ZXIoeGZzX2RpcjJfdHJhY2VfYnVmLAotCQkodm9pZCAqKShsb25nKXR5cGUsICh2b2lkICopd2hlcmUsCi0JCSh2b2lkICopYTAsICh2b2lkICopYTEsICh2b2lkICopYTIsICh2b2lkICopYTMsCi0JCSh2b2lkICopYTQsICh2b2lkICopYTUsICh2b2lkICopYTYsICh2b2lkICopYTcsCi0JCSh2b2lkICopKGxvbmcpbmFtZWxlbiwKLQkJKHZvaWQgKiluWzBdLCAodm9pZCAqKW5bMV0sICh2b2lkICopblsyXSwKLQkJKHZvaWQgKiluWzNdLCAodm9pZCAqKW5bNF0pOwotCWt0cmFjZV9lbnRlcihkcC0+aV9kaXJfdHJhY2UsCi0JCSh2b2lkICopKGxvbmcpdHlwZSwgKHZvaWQgKil3aGVyZSwKLQkJKHZvaWQgKilhMCwgKHZvaWQgKilhMSwgKHZvaWQgKilhMiwgKHZvaWQgKilhMywKLQkJKHZvaWQgKilhNCwgKHZvaWQgKilhNSwgKHZvaWQgKilhNiwgKHZvaWQgKilhNywKLQkJKHZvaWQgKikobG9uZyluYW1lbGVuLAotCQkodm9pZCAqKW5bMF0sICh2b2lkICopblsxXSwgKHZvaWQgKiluWzJdLAotCQkodm9pZCAqKW5bM10sICh2b2lkICopbls0XSk7Ci19Ci0KLXZvaWQKLXhmc19kaXIyX3RyYWNlX2FyZ3MoCi0JY2hhcgkJKndoZXJlLAotCXhmc19kYV9hcmdzX3QJKmFyZ3MpCi17Ci0JeGZzX2RpcjJfdHJhY2VfZW50ZXIoYXJncy0+ZHAsIFhGU19ESVIyX0tUUkFDRV9BUkdTLCB3aGVyZSwKLQkJKGNoYXIgKilhcmdzLT5uYW1lLCAoaW50KWFyZ3MtPm5hbWVsZW4sCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYXJncy0+aGFzaHZhbCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgPj4gMzIpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgJiAweEZGRkZGRkZGKSksCi0JCSh2b2lkICopYXJncy0+ZHAsICh2b2lkICopYXJncy0+dHJhbnMsCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0pVU1RDSEVDSyksCi0JCU5VTEwsIE5VTEwpOwotfQotCi12b2lkCi14ZnNfZGlyMl90cmFjZV9hcmdzX2IoCi0JY2hhcgkJKndoZXJlLAotCXhmc19kYV9hcmdzX3QJKmFyZ3MsCi0JeGZzX2RhYnVmX3QJKmJwKQotewotCXhmc19kaXIyX3RyYWNlX2VudGVyKGFyZ3MtPmRwLCBYRlNfRElSMl9LVFJBQ0VfQVJHU19CLCB3aGVyZSwKLQkJKGNoYXIgKilhcmdzLT5uYW1lLCAoaW50KWFyZ3MtPm5hbWVsZW4sCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYXJncy0+aGFzaHZhbCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgPj4gMzIpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgJiAweEZGRkZGRkZGKSksCi0JCSh2b2lkICopYXJncy0+ZHAsICh2b2lkICopYXJncy0+dHJhbnMsCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0pVU1RDSEVDSyksCi0JCSh2b2lkICopKGJwID8gYnAtPmJwc1swXSA6IE5VTEwpLCBOVUxMKTsKLX0KLQotdm9pZAoteGZzX2RpcjJfdHJhY2VfYXJnc19iYigKLQljaGFyCQkqd2hlcmUsCi0JeGZzX2RhX2FyZ3NfdAkqYXJncywKLQl4ZnNfZGFidWZfdAkqbGJwLAotCXhmc19kYWJ1Zl90CSpkYnApCi17Ci0JeGZzX2RpcjJfdHJhY2VfZW50ZXIoYXJncy0+ZHAsIFhGU19ESVIyX0tUUkFDRV9BUkdTX0JCLCB3aGVyZSwKLQkJKGNoYXIgKilhcmdzLT5uYW1lLCAoaW50KWFyZ3MtPm5hbWVsZW4sCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYXJncy0+aGFzaHZhbCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgPj4gMzIpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgJiAweEZGRkZGRkZGKSksCi0JCSh2b2lkICopYXJncy0+ZHAsICh2b2lkICopYXJncy0+dHJhbnMsCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0pVU1RDSEVDSyksCi0JCSh2b2lkICopKGxicCA/IGxicC0+YnBzWzBdIDogTlVMTCksCi0JCSh2b2lkICopKGRicCA/IGRicC0+YnBzWzBdIDogTlVMTCkpOwotfQotCi12b2lkCi14ZnNfZGlyMl90cmFjZV9hcmdzX2JpYmlpKAotCWNoYXIJCSp3aGVyZSwKLQl4ZnNfZGFfYXJnc190CSphcmdzLAotCXhmc19kYWJ1Zl90CSpicywKLQlpbnQJCXNzLAotCXhmc19kYWJ1Zl90CSpiZCwKLQlpbnQJCXNkLAotCWludAkJYykKLXsKLQl4ZnNfYnVmX3QJKmJwYnMgPSBicyA/IGJzLT5icHNbMF0gOiBOVUxMOwotCXhmc19idWZfdAkqYnBiZCA9IGJkID8gYmQtPmJwc1swXSA6IE5VTEw7Ci0KLQl4ZnNfZGlyMl90cmFjZV9lbnRlcihhcmdzLT5kcCwgWEZTX0RJUjJfS1RSQUNFX0FSR1NfQklCSUksIHdoZXJlLAotCQkoY2hhciAqKWFyZ3MtPm5hbWUsIChpbnQpYXJncy0+bmFtZWxlbiwKLQkJKHZvaWQgKilhcmdzLT5kcCwgKHZvaWQgKilhcmdzLT50cmFucywKLQkJKHZvaWQgKilicGJzLCAodm9pZCAqKShsb25nKXNzLCAodm9pZCAqKWJwYmQsICh2b2lkICopKGxvbmcpc2QsCi0JCSh2b2lkICopKGxvbmcpYywgTlVMTCk7Ci19Ci0KLXZvaWQKLXhmc19kaXIyX3RyYWNlX2FyZ3NfZGIoCi0JY2hhcgkJKndoZXJlLAotCXhmc19kYV9hcmdzX3QJKmFyZ3MsCi0JeGZzX2RpcjJfZGJfdAlkYiwKLQl4ZnNfZGFidWZfdAkqYnApCi17Ci0JeGZzX2J1Zl90CSpkYnAgPSBicCA/IGJwLT5icHNbMF0gOiBOVUxMOwotCi0JeGZzX2RpcjJfdHJhY2VfZW50ZXIoYXJncy0+ZHAsIFhGU19ESVIyX0tUUkFDRV9BUkdTX0RCLCB3aGVyZSwKLQkJKGNoYXIgKilhcmdzLT5uYW1lLCAoaW50KWFyZ3MtPm5hbWVsZW4sCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYXJncy0+aGFzaHZhbCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgPj4gMzIpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgJiAweEZGRkZGRkZGKSksCi0JCSh2b2lkICopYXJncy0+ZHAsICh2b2lkICopYXJncy0+dHJhbnMsCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0pVU1RDSEVDSyksCi0JCSh2b2lkICopKGxvbmcpZGIsICh2b2lkICopZGJwKTsKLX0KLQotdm9pZAoteGZzX2RpcjJfdHJhY2VfYXJnc19pKAotCWNoYXIJCSp3aGVyZSwKLQl4ZnNfZGFfYXJnc190CSphcmdzLAotCXhmc19pbm9fdAlpKQotewotCXhmc19kaXIyX3RyYWNlX2VudGVyKGFyZ3MtPmRwLCBYRlNfRElSMl9LVFJBQ0VfQVJHU19JLCB3aGVyZSwKLQkJKGNoYXIgKilhcmdzLT5uYW1lLCAoaW50KWFyZ3MtPm5hbWVsZW4sCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYXJncy0+aGFzaHZhbCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgPj4gMzIpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgJiAweEZGRkZGRkZGKSksCi0JCSh2b2lkICopYXJncy0+ZHAsICh2b2lkICopYXJncy0+dHJhbnMsCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0pVU1RDSEVDSyksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpID4+IDMyKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpICYgMHhGRkZGRkZGRikpKTsKLX0KLQotdm9pZAoteGZzX2RpcjJfdHJhY2VfYXJnc19zKAotCWNoYXIJCSp3aGVyZSwKLQl4ZnNfZGFfYXJnc190CSphcmdzLAotCWludAkJcykKLXsKLQl4ZnNfZGlyMl90cmFjZV9lbnRlcihhcmdzLT5kcCwgWEZTX0RJUjJfS1RSQUNFX0FSR1NfUywgd2hlcmUsCi0JCShjaGFyICopYXJncy0+bmFtZSwgKGludClhcmdzLT5uYW1lbGVuLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFyZ3MtPmhhc2h2YWwsCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShhcmdzLT5pbnVtYmVyID4+IDMyKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShhcmdzLT5pbnVtYmVyICYgMHhGRkZGRkZGRikpLAotCQkodm9pZCAqKWFyZ3MtPmRwLCAodm9pZCAqKWFyZ3MtPnRyYW5zLAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKShhcmdzLT5vcF9mbGFncyAmIFhGU19EQV9PUF9KVVNUQ0hFQ0spLAotCQkodm9pZCAqKShsb25nKXMsIE5VTEwpOwotfQotCi12b2lkCi14ZnNfZGlyMl90cmFjZV9hcmdzX3NiKAotCWNoYXIJCSp3aGVyZSwKLQl4ZnNfZGFfYXJnc190CSphcmdzLAotCWludAkJcywKLQl4ZnNfZGFidWZfdAkqYnApCi17Ci0JeGZzX2J1Zl90CSpkYnAgPSBicCA/IGJwLT5icHNbMF0gOiBOVUxMOwotCi0JeGZzX2RpcjJfdHJhY2VfZW50ZXIoYXJncy0+ZHAsIFhGU19ESVIyX0tUUkFDRV9BUkdTX1NCLCB3aGVyZSwKLQkJKGNoYXIgKilhcmdzLT5uYW1lLCAoaW50KWFyZ3MtPm5hbWVsZW4sCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYXJncy0+aGFzaHZhbCwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgPj4gMzIpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPmludW1iZXIgJiAweEZGRkZGRkZGKSksCi0JCSh2b2lkICopYXJncy0+ZHAsICh2b2lkICopYXJncy0+dHJhbnMsCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0pVU1RDSEVDSyksCi0JCSh2b2lkICopKGxvbmcpcywgKHZvaWQgKilkYnApOwotfQotI2VuZGlmCS8qIFhGU19ESVIyX1RSQUNFICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfdHJhY2UuaCBiL2ZzL3hmcy94ZnNfZGlyMl90cmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNjNzU0Li4wMDAwMDAwCi0tLSBhL2ZzL3hmcy94ZnNfZGlyMl90cmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMCwyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpZm5kZWYgX19YRlNfRElSMl9UUkFDRV9IX18KLSNkZWZpbmUgX19YRlNfRElSMl9UUkFDRV9IX18KLQotLyoKLSAqIFRyYWNpbmcgZm9yIHhmcyB2MiBkaXJlY3Rvcmllcy4KLSAqLwotCi0jaWYgZGVmaW5lZChYRlNfRElSMl9UUkFDRSkKLQotc3RydWN0IGt0cmFjZTsKLXN0cnVjdCB4ZnNfZGFidWY7Ci1zdHJ1Y3QgeGZzX2RhX2FyZ3M7Ci0KLSNkZWZpbmUJWEZTX0RJUjJfR1RSQUNFX1NJWkUJCTQwOTYJLyogZ2xvYmFsIGJ1ZmZlciAqLwotI2RlZmluZQlYRlNfRElSMl9LVFJBQ0VfU0laRQkJMzIJLyogcGVyLWlub2RlIGJ1ZmZlciAqLwotZXh0ZXJuIHN0cnVjdCBrdHJhY2UgKnhmc19kaXIyX3RyYWNlX2J1ZjsKLQotI2RlZmluZQlYRlNfRElSMl9LVFJBQ0VfQVJHUwkJMQkvKiBhcmdzIG9ubHkgKi8KLSNkZWZpbmUJWEZTX0RJUjJfS1RSQUNFX0FSR1NfQgkJMgkvKiBhcmdzICsgYnVmZmVyICovCi0jZGVmaW5lCVhGU19ESVIyX0tUUkFDRV9BUkdTX0JCCQkzCS8qIGFyZ3MgKyAyIGJ1ZmZlcnMgKi8KLSNkZWZpbmUJWEZTX0RJUjJfS1RSQUNFX0FSR1NfREIJCTQJLyogYXJncywgZGIsIGJ1ZmZlciAqLwotI2RlZmluZQlYRlNfRElSMl9LVFJBQ0VfQVJHU19JCQk1CS8qIGFyZ3MsIGludW0gKi8KLSNkZWZpbmUJWEZTX0RJUjJfS1RSQUNFX0FSR1NfUwkJNgkvKiBhcmdzLCBpbnQgKi8KLSNkZWZpbmUJWEZTX0RJUjJfS1RSQUNFX0FSR1NfU0IJCTcJLyogYXJncywgaW50LCBidWZmZXIgKi8KLSNkZWZpbmUJWEZTX0RJUjJfS1RSQUNFX0FSR1NfQklCSUkJOAkvKiBhcmdzLCBidWYvaW50L2J1Zi9pbnQvaW50ICovCi0KLXZvaWQgeGZzX2RpcjJfdHJhY2VfYXJncyhjaGFyICp3aGVyZSwgc3RydWN0IHhmc19kYV9hcmdzICphcmdzKTsKLXZvaWQgeGZzX2RpcjJfdHJhY2VfYXJnc19iKGNoYXIgKndoZXJlLCBzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JCQkgICBzdHJ1Y3QgeGZzX2RhYnVmICpicCk7Ci12b2lkIHhmc19kaXIyX3RyYWNlX2FyZ3NfYmIoY2hhciAqd2hlcmUsIHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQkJCSAgICBzdHJ1Y3QgeGZzX2RhYnVmICpsYnAsIHN0cnVjdCB4ZnNfZGFidWYgKmRicCk7Ci12b2lkIHhmc19kaXIyX3RyYWNlX2FyZ3NfYmliaWkoY2hhciAqd2hlcmUsIHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQkJCSAgICAgICBzdHJ1Y3QgeGZzX2RhYnVmICpicywgaW50IHNzLAotCQkJICAgICAgIHN0cnVjdCB4ZnNfZGFidWYgKmJkLCBpbnQgc2QsIGludCBjKTsKLXZvaWQgeGZzX2RpcjJfdHJhY2VfYXJnc19kYihjaGFyICp3aGVyZSwgc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCQkJICAgIHhmc19kaXIyX2RiX3QgZGIsIHN0cnVjdCB4ZnNfZGFidWYgKmJwKTsKLXZvaWQgeGZzX2RpcjJfdHJhY2VfYXJnc19pKGNoYXIgKndoZXJlLCBzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIHhmc19pbm9fdCBpKTsKLXZvaWQgeGZzX2RpcjJfdHJhY2VfYXJnc19zKGNoYXIgKndoZXJlLCBzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGludCBzKTsKLXZvaWQgeGZzX2RpcjJfdHJhY2VfYXJnc19zYihjaGFyICp3aGVyZSwgc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCBpbnQgcywKLQkJCSAgICBzdHJ1Y3QgeGZzX2RhYnVmICpicCk7Ci0KLSNlbHNlCS8qIFhGU19ESVIyX1RSQUNFICovCi0KLSNkZWZpbmUJeGZzX2RpcjJfdHJhY2VfYXJncyh3aGVyZSwgYXJncykKLSNkZWZpbmUJeGZzX2RpcjJfdHJhY2VfYXJnc19iKHdoZXJlLCBhcmdzLCBicCkKLSNkZWZpbmUJeGZzX2RpcjJfdHJhY2VfYXJnc19iYih3aGVyZSwgYXJncywgbGJwLCBkYnApCi0jZGVmaW5lCXhmc19kaXIyX3RyYWNlX2FyZ3NfYmliaWkod2hlcmUsIGFyZ3MsIGJzLCBzcywgYmQsIHNkLCBjKQotI2RlZmluZQl4ZnNfZGlyMl90cmFjZV9hcmdzX2RiKHdoZXJlLCBhcmdzLCBkYiwgYnApCi0jZGVmaW5lCXhmc19kaXIyX3RyYWNlX2FyZ3NfaSh3aGVyZSwgYXJncywgaSkKLSNkZWZpbmUJeGZzX2RpcjJfdHJhY2VfYXJnc19zKHdoZXJlLCBhcmdzLCBzKQotI2RlZmluZQl4ZnNfZGlyMl90cmFjZV9hcmdzX3NiKHdoZXJlLCBhcmdzLCBzLCBicCkKLQotI2VuZGlmCS8qIFhGU19ESVIyX1RSQUNFICovCi0KLSNlbmRpZgkvKiBfX1hGU19ESVIyX1RSQUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwppbmRleCBlZGY4YmRmLi5hNjMxZTE0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYworKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInhmc191dGlscy5oIgogI2luY2x1ZGUgInhmc19tcnVfY2FjaGUuaCIKICNpbmNsdWRlICJ4ZnNfZmlsZXN0cmVhbS5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAjaWZkZWYgWEZTX0ZJTEVTVFJFQU1TX1RSQUNFCiAKQEAgLTM5NCw5ICszOTUsNyBAQAogCWl0ZW1fem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZihmc3RybV9pdGVtX3QpLCAiZnN0cm1faXRlbSIpOwogCWlmICghaXRlbV96b25lKQogCQlyZXR1cm4gLUVOT01FTTsKLSNpZmRlZiBYRlNfRklMRVNUUkVBTVNfVFJBQ0UKLQl4ZnNfZmlsZXN0cmVhbXNfdHJhY2VfYnVmID0ga3RyYWNlX2FsbG9jKFhGU19GU1RSTV9LVFJBQ0VfU0laRSwgS01fTk9GUyk7Ci0jZW5kaWYKKwogCXJldHVybiAwOwogfQogCkBAIC00MDcsOSArNDA2LDYgQEAKIHZvaWQKIHhmc19maWxlc3RyZWFtX3VuaW5pdCh2b2lkKQogewotI2lmZGVmIFhGU19GSUxFU1RSRUFNU19UUkFDRQotCWt0cmFjZV9mcmVlKHhmc19maWxlc3RyZWFtc190cmFjZV9idWYpOwotI2VuZGlmCiAJa21lbV96b25lX2Rlc3Ryb3koaXRlbV96b25lKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IDM2MDc5YWEuLmExMzkxOWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJ4ZnNfcnRhbGxvYy5oIgogI2luY2x1ZGUgInhmc19ydy5oIgogI2luY2x1ZGUgInhmc19maWxlc3RyZWFtLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCiAgKiBGaWxlIHN5c3RlbSBvcGVyYXRpb25zCkBAIC0zNDcsNiArMzQ4LDcgQEAKIAkJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9sZW5ndGgsIG5ldyk7CiAJCUFTU0VSVChiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZW5ndGgpID09CiAJCSAgICAgICBiZTMyX3RvX2NwdShhZ2ktPmFnaV9sZW5ndGgpKTsKKwogCQl4ZnNfYWxsb2NfbG9nX2FnZih0cCwgYnAsIFhGU19BR0ZfTEVOR1RIKTsKIAkJLyoKIAkJICogRnJlZSB0aGUgbmV3IHNwYWNlLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCAwNzNiYjRhLi5mYTQwMmE2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX2JtYXAuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWVfdHJhY2UuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl90cmFjZS5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAKIC8qCkBAIC05MCwzMCArOTAsOCBAQAogCWlwLT5pX3NpemUgPSAwOwogCWlwLT5pX25ld19zaXplID0gMDsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSBpbm9kZSdzIHRyYWNlIGJ1ZmZlcnMuCi0JICovCi0jaWZkZWYJWEZTX0lOT0RFX1RSQUNFCi0JaXAtPmlfdHJhY2UgPSBrdHJhY2VfYWxsb2MoSU5PREVfVFJBQ0VfU0laRSwgS01fTk9GUyk7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQk1BUF9UUkFDRQotCWlwLT5pX3h0cmFjZSA9IGt0cmFjZV9hbGxvYyhYRlNfQk1BUF9LVFJBQ0VfU0laRSwgS01fTk9GUyk7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfQlRSRUVfVFJBQ0UKLQlpcC0+aV9idHJhY2UgPSBrdHJhY2VfYWxsb2MoWEZTX0JNQlRfS1RSQUNFX1NJWkUsIEtNX05PRlMpOwotI2VuZGlmCi0jaWZkZWYgWEZTX1JXX1RSQUNFCi0JaXAtPmlfcnd0cmFjZSA9IGt0cmFjZV9hbGxvYyhYRlNfUldfS1RSQUNFX1NJWkUsIEtNX05PRlMpOwotI2VuZGlmCi0jaWZkZWYgWEZTX0lMT0NLX1RSQUNFCi0JaXAtPmlfbG9ja190cmFjZSA9IGt0cmFjZV9hbGxvYyhYRlNfSUxPQ0tfS1RSQUNFX1NJWkUsIEtNX05PRlMpOwotI2VuZGlmCi0jaWZkZWYgWEZTX0RJUjJfVFJBQ0UKLQlpcC0+aV9kaXJfdHJhY2UgPSBrdHJhY2VfYWxsb2MoWEZTX0RJUjJfS1RSQUNFX1NJWkUsIEtNX05PRlMpOwotI2VuZGlmCi0KIAkvKiBwcmV2ZW50IGFueW9uZSBmcm9tIHVzaW5nIHRoaXMgeWV0ICovCi0JVkZTX0koaXApLT5pX3N0YXRlID0gSV9ORVd8SV9MT0NLOworCVZGU19JKGlwKS0+aV9zdGF0ZSA9IElfTkVXOwogCiAJcmV0dXJuIGlwOwogfQpAQCAtMTMzLDI1ICsxMTEsNiBAQAogCWlmIChpcC0+aV9hZnApCiAJCXhmc19pZGVzdHJveV9mb3JrKGlwLCBYRlNfQVRUUl9GT1JLKTsKIAotI2lmZGVmIFhGU19JTk9ERV9UUkFDRQotCWt0cmFjZV9mcmVlKGlwLT5pX3RyYWNlKTsKLSNlbmRpZgotI2lmZGVmIFhGU19CTUFQX1RSQUNFCi0Ja3RyYWNlX2ZyZWUoaXAtPmlfeHRyYWNlKTsKLSNlbmRpZgotI2lmZGVmIFhGU19CVFJFRV9UUkFDRQotCWt0cmFjZV9mcmVlKGlwLT5pX2J0cmFjZSk7Ci0jZW5kaWYKLSNpZmRlZiBYRlNfUldfVFJBQ0UKLQlrdHJhY2VfZnJlZShpcC0+aV9yd3RyYWNlKTsKLSNlbmRpZgotI2lmZGVmIFhGU19JTE9DS19UUkFDRQotCWt0cmFjZV9mcmVlKGlwLT5pX2xvY2tfdHJhY2UpOwotI2VuZGlmCi0jaWZkZWYgWEZTX0RJUjJfVFJBQ0UKLQlrdHJhY2VfZnJlZShpcC0+aV9kaXJfdHJhY2UpOwotI2VuZGlmCi0KIAlpZiAoaXAtPmlfaXRlbXApIHsKIAkJLyoKIAkJICogT25seSBpZiB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZnMgd2lsbCB3ZSBzZWUgYW4KQEAgLTIxMCw2ICsxNjksNyBAQAogCSAqCSAgICAgaW5zdGVhZCBvZiBwb2xsaW5nIGZvciBpdC4KIAkgKi8KIAlpZiAoaXAtPmlfZmxhZ3MgJiAoWEZTX0lORVd8WEZTX0lSRUNMQUlNKSkgeworCQl0cmFjZV94ZnNfaWdldF9za2lwKGlwKTsKIAkJWEZTX1NUQVRTX0lOQyh4c19pZ19mcmVjeWNsZSk7CiAJCWVycm9yID0gRUFHQUlOOwogCQlnb3RvIG91dF9lcnJvcjsKQEAgLTIyOCw3ICsxODgsNyBAQAogCSAqIE5lZWQgdG8gY2FyZWZ1bGx5IGdldCBpdCBiYWNrIGludG8gdXNlYWJsZSBzdGF0ZS4KIAkgKi8KIAlpZiAoaXAtPmlfZmxhZ3MgJiBYRlNfSVJFQ0xBSU1BQkxFKSB7Ci0JCXhmc19pdHJhY2VfZXhpdF90YWcoaXAsICJ4ZnNfaWdldC5hbGxvYyIpOworCQl0cmFjZV94ZnNfaWdldF9yZWNsYWltKGlwKTsKIAogCQkvKgogCQkgKiBXZSBuZWVkIHRvIHNldCBYRlNfSU5FVyBhdG9taWNhbGx5IHdpdGggY2xlYXJpbmcgdGhlCkBAIC0yNTQsOSArMjE0LDEwIEBACiAJCQlpcC0+aV9mbGFncyAmPSB+WEZTX0lORVc7CiAJCQlpcC0+aV9mbGFncyB8PSBYRlNfSVJFQ0xBSU1BQkxFOwogCQkJX194ZnNfaW5vZGVfc2V0X3JlY2xhaW1fdGFnKHBhZywgaXApOworCQkJdHJhY2VfeGZzX2lnZXRfcmVjbGFpbShpcCk7CiAJCQlnb3RvIG91dF9lcnJvcjsKIAkJfQotCQlpbm9kZS0+aV9zdGF0ZSA9IElfTE9DS3xJX05FVzsKKwkJaW5vZGUtPmlfc3RhdGUgPSBJX05FVzsKIAl9IGVsc2UgewogCQkvKiBJZiB0aGUgVkZTIGlub2RlIGlzIGJlaW5nIHRvcm4gZG93biwgcGF1c2UgYW5kIHRyeSBhZ2Fpbi4gKi8KIAkJaWYgKCFpZ3JhYihpbm9kZSkpIHsKQEAgLTI3Myw4ICsyMzQsOSBAQAogCQl4ZnNfaWxvY2soaXAsIGxvY2tfZmxhZ3MpOwogCiAJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lTVEFMRSk7Ci0JeGZzX2l0cmFjZV9leGl0X3RhZyhpcCwgInhmc19pZ2V0LmZvdW5kIik7CiAJWEZTX1NUQVRTX0lOQyh4c19pZ19mb3VuZCk7CisKKwl0cmFjZV94ZnNfaWdldF9mb3VuZChpcCk7CiAJcmV0dXJuIDA7CiAKIG91dF9lcnJvcjoKQEAgLTMwOCw3ICsyNzAsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZGVzdHJveTsKIAotCXhmc19pdHJhY2VfZXhpdF90YWcoaXAsICJ4ZnNfaWdldC5hbGxvYyIpOworCXhmc19pdHJhY2VfZW50cnkoaXApOwogCiAJaWYgKChpcC0+aV9kLmRpX21vZGUgPT0gMCkgJiYgIShmbGFncyAmIFhGU19JR0VUX0NSRUFURSkpIHsKIAkJZXJyb3IgPSBFTk9FTlQ7CkBAIC0zNTMsNiArMzE1LDggQEAKIAogCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKworCXRyYWNlX3hmc19pZ2V0X2FsbG9jKGlwKTsKIAkqaXBwID0gaXA7CiAJcmV0dXJuIDA7CiAKQEAgLTUxNCwxNyArNDc4LDIxIEBACiB7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKIAlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CisJeGZzX2FnaW5vX3QJCWFnaW5vID0gWEZTX0lOT19UT19BR0lOTyhtcCwgaXAtPmlfaW5vKTsKIAogCVhGU19TVEFUU19JTkMoeHNfaWdfcmVjbGFpbXMpOwogCiAJLyoKLQkgKiBSZW1vdmUgdGhlIGlub2RlIGZyb20gdGhlIHBlci1BRyByYWRpeCB0cmVlLiAgSXQgZG9lc24ndCBtYXR0ZXIKLQkgKiBpZiBpdCB3YXMgbmV2ZXIgYWRkZWQgdG8gaXQgYmVjYXVzZSByYWRpeF90cmVlX2RlbGV0ZSBjYW4gZGVhbAotCSAqIHdpdGggdGhhdCBjYXNlIGp1c3QgZmluZS4KKwkgKiBSZW1vdmUgdGhlIGlub2RlIGZyb20gdGhlIHBlci1BRyByYWRpeCB0cmVlLgorCSAqCisJICogQmVjYXVzZSByYWRpeF90cmVlX2RlbGV0ZSB3b24ndCBjb21wbGFpbiBldmVuIGlmIHRoZSBpdGVtIHdhcyBuZXZlcgorCSAqIGFkZGVkIHRvIHRoZSB0cmVlIGFzc2VydCB0aGF0IGl0J3MgYmVlbiB0aGVyZSBiZWZvcmUgdG8gY2F0Y2gKKwkgKiBwcm9ibGVtcyB3aXRoIHRoZSBpbm9kZSBsaWZlIHRpbWUgZWFybHkgb24uCiAJICovCiAJcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKIAl3cml0ZV9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JcmFkaXhfdHJlZV9kZWxldGUoJnBhZy0+cGFnX2ljaV9yb290LCBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pKTsKKwlpZiAoIXJhZGl4X3RyZWVfZGVsZXRlKCZwYWctPnBhZ19pY2lfcm9vdCwgYWdpbm8pKQorCQlBU1NFUlQoMCk7CiAJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKIApAQCAtNjM5LDcgKzYwNyw3IEBACiAJZWxzZSBpZiAobG9ja19mbGFncyAmIFhGU19JTE9DS19TSEFSRUQpCiAJCW1yYWNjZXNzX25lc3RlZCgmaXAtPmlfbG9jaywgWEZTX0lMT0NLX0RFUChsb2NrX2ZsYWdzKSk7CiAKLQl4ZnNfaWxvY2tfdHJhY2UoaXAsIDEsIGxvY2tfZmxhZ3MsIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKKwl0cmFjZV94ZnNfaWxvY2soaXAsIGxvY2tfZmxhZ3MsIF9SRVRfSVBfKTsKIH0KIAogLyoKQEAgLTY4NCw3ICs2NTIsNyBAQAogCQlpZiAoIW1ydHJ5YWNjZXNzKCZpcC0+aV9sb2NrKSkKIAkJCWdvdG8gb3V0X3VuZG9faW9sb2NrOwogCX0KLQl4ZnNfaWxvY2tfdHJhY2UoaXAsIDIsIGxvY2tfZmxhZ3MsIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKKwl0cmFjZV94ZnNfaWxvY2tfbm93YWl0KGlwLCBsb2NrX2ZsYWdzLCBfUkVUX0lQXyk7CiAJcmV0dXJuIDE7CiAKICBvdXRfdW5kb19pb2xvY2s6CkBAIC03NDYsNyArNzE0LDcgQEAKIAkJeGZzX3RyYW5zX3VubG9ja2VkX2l0ZW0oaXAtPmlfaXRlbXAtPmlsaV9pdGVtLmxpX2FpbHAsCiAJCQkJCSh4ZnNfbG9nX2l0ZW1fdCopKGlwLT5pX2l0ZW1wKSk7CiAJfQotCXhmc19pbG9ja190cmFjZShpcCwgMywgbG9ja19mbGFncywgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOworCXRyYWNlX3hmc19pdW5sb2NrKGlwLCBsb2NrX2ZsYWdzLCBfUkVUX0lQXyk7CiB9CiAKIC8qCkBAIC03NjUsNiArNzMzLDggQEAKIAkJbXJkZW1vdGUoJmlwLT5pX2xvY2spOwogCWlmIChsb2NrX2ZsYWdzICYgWEZTX0lPTE9DS19FWENMKQogCQltcmRlbW90ZSgmaXAtPmlfaW9sb2NrKTsKKworCXRyYWNlX3hmc19pbG9ja19kZW1vdGUoaXAsIGxvY2tfZmxhZ3MsIF9SRVRfSVBfKTsKIH0KIAogI2lmZGVmIERFQlVHCkBAIC03OTUsNTIgKzc2NSwzIEBACiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKLQotI2lmZGVmCVhGU19JTk9ERV9UUkFDRQotCi0jZGVmaW5lIEtUUkFDRV9FTlRFUihpcCwgdmssIHMsIGxpbmUsIHJhKQkJCVwKLQlrdHJhY2VfZW50ZXIoKGlwKS0+aV90cmFjZSwJCQkJXAotLyogIDAgKi8JCSh2b2lkICopKF9fcHNpbnRfdCkodmspLAkJXAotLyogIDEgKi8JCSh2b2lkICopKHMpLAkJCQlcCi0vKiAgMiAqLwkJKHZvaWQgKikoX19wc2ludF90KSBsaW5lLAkJXAotLyogIDMgKi8JCSh2b2lkICopKF9fcHNpbnRfdClhdG9taWNfcmVhZCgmVkZTX0koaXApLT5pX2NvdW50KSwgXAotLyogIDQgKi8JCSh2b2lkICopKHJhKSwJCQkJXAotLyogIDUgKi8JCU5VTEwsCQkJCQlcCi0vKiAgNiAqLwkJKHZvaWQgKikoX19wc2ludF90KWN1cnJlbnRfY3B1KCksCVwKLS8qICA3ICovCQkodm9pZCAqKShfX3BzaW50X3QpY3VycmVudF9waWQoKSwJXAotLyogIDggKi8JCSh2b2lkICopX19yZXR1cm5fYWRkcmVzcywJCVwKLS8qICA5ICovCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotCi0vKgotICogVm5vZGUgdHJhY2luZyBjb2RlLgotICovCi12b2lkCi1feGZzX2l0cmFjZV9lbnRyeSh4ZnNfaW5vZGVfdCAqaXAsIGNvbnN0IGNoYXIgKmZ1bmMsIGluc3RfdCAqcmEpCi17Ci0JS1RSQUNFX0VOVEVSKGlwLCBJTk9ERV9LVFJBQ0VfRU5UUlksIGZ1bmMsIDAsIHJhKTsKLX0KLQotdm9pZAotX3hmc19pdHJhY2VfZXhpdCh4ZnNfaW5vZGVfdCAqaXAsIGNvbnN0IGNoYXIgKmZ1bmMsIGluc3RfdCAqcmEpCi17Ci0JS1RSQUNFX0VOVEVSKGlwLCBJTk9ERV9LVFJBQ0VfRVhJVCwgZnVuYywgMCwgcmEpOwotfQotCi12b2lkCi14ZnNfaXRyYWNlX2hvbGQoeGZzX2lub2RlX3QgKmlwLCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW5zdF90ICpyYSkKLXsKLQlLVFJBQ0VfRU5URVIoaXAsIElOT0RFX0tUUkFDRV9IT0xELCBmaWxlLCBsaW5lLCByYSk7Ci19Ci0KLXZvaWQKLV94ZnNfaXRyYWNlX3JlZih4ZnNfaW5vZGVfdCAqaXAsIGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnN0X3QgKnJhKQotewotCUtUUkFDRV9FTlRFUihpcCwgSU5PREVfS1RSQUNFX1JFRiwgZmlsZSwgbGluZSwgcmEpOwotfQotCi12b2lkCi14ZnNfaXRyYWNlX3JlbGUoeGZzX2lub2RlX3QgKmlwLCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW5zdF90ICpyYSkKLXsKLQlLVFJBQ0VfRU5URVIoaXAsIElOT0RFX0tUUkFDRV9SRUxFLCBmaWxlLCBsaW5lLCByYSk7Ci19Ci0jZW5kaWYJLyogWEZTX0lOT0RFX1RSQUNFICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggYjkyYTRmYS4uY2UyNzhiMyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtNDcsMTAgKzQ3LDEwIEBACiAjaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCi0jaW5jbHVkZSAieGZzX2RpcjJfdHJhY2UuaCIKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKICNpbmNsdWRlICJ4ZnNfZmlsZXN0cmVhbS5oIgogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiBrbWVtX3pvbmVfdCAqeGZzX2lmb3JrX3pvbmU7CiBrbWVtX3pvbmVfdCAqeGZzX2lub2RlX3pvbmU7CkBAIC0xMjkxLDQyICsxMjkxLDYgQEAKIAlyZXR1cm4gbGFzdF9ieXRlOwogfQogCi0jaWYgZGVmaW5lZChYRlNfUldfVFJBQ0UpCi1TVEFUSUMgdm9pZAoteGZzX2l0cnVuY190cmFjZSgKLQlpbnQJCXRhZywKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JaW50CQlmbGFnLAotCXhmc19mc2l6ZV90CW5ld19zaXplLAotCXhmc19vZmZfdAl0b3NzX3N0YXJ0LAotCXhmc19vZmZfdAl0b3NzX2ZpbmlzaCkKLXsKLQlpZiAoaXAtPmlfcnd0cmFjZSA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlrdHJhY2VfZW50ZXIoaXAtPmlfcnd0cmFjZSwKLQkJICAgICAodm9pZCopKChsb25nKXRhZyksCi0JCSAgICAgKHZvaWQqKWlwLAotCQkgICAgICh2b2lkKikodW5zaWduZWQgbG9uZykoKGlwLT5pX2QuZGlfc2l6ZSA+PiAzMikgJiAweGZmZmZmZmZmKSwKLQkJICAgICAodm9pZCopKHVuc2lnbmVkIGxvbmcpKGlwLT5pX2QuZGlfc2l6ZSAmIDB4ZmZmZmZmZmYpLAotCQkgICAgICh2b2lkKikoKGxvbmcpZmxhZyksCi0JCSAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSgobmV3X3NpemUgPj4gMzIpICYgMHhmZmZmZmZmZiksCi0JCSAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKShuZXdfc2l6ZSAmIDB4ZmZmZmZmZmYpLAotCQkgICAgICh2b2lkKikodW5zaWduZWQgbG9uZykoKHRvc3Nfc3RhcnQgPj4gMzIpICYgMHhmZmZmZmZmZiksCi0JCSAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSh0b3NzX3N0YXJ0ICYgMHhmZmZmZmZmZiksCi0JCSAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSgodG9zc19maW5pc2ggPj4gMzIpICYgMHhmZmZmZmZmZiksCi0JCSAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSh0b3NzX2ZpbmlzaCAmIDB4ZmZmZmZmZmYpLAotCQkgICAgICh2b2lkKikodW5zaWduZWQgbG9uZyljdXJyZW50X2NwdSgpLAotCQkgICAgICh2b2lkKikodW5zaWduZWQgbG9uZyljdXJyZW50X3BpZCgpLAotCQkgICAgICh2b2lkKilOVUxMLAotCQkgICAgICh2b2lkKilOVUxMLAotCQkgICAgICh2b2lkKilOVUxMKTsKLX0KLSNlbHNlCi0jZGVmaW5lCXhmc19pdHJ1bmNfdHJhY2UodGFnLCBpcCwgZmxhZywgbmV3X3NpemUsIHRvc3Nfc3RhcnQsIHRvc3NfZmluaXNoKQotI2VuZGlmCi0KIC8qCiAgKiBTdGFydCB0aGUgdHJ1bmNhdGlvbiBvZiB0aGUgZmlsZSB0byBuZXdfc2l6ZS4gIFRoZSBuZXcgc2l6ZQogICogbXVzdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgc2l6ZS4gIFRoaXMgcm91dGluZSB3aWxsCkBAIC0xNDA5LDggKzEzNzMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJbGFzdF9ieXRlID0geGZzX2ZpbGVfbGFzdF9ieXRlKGlwKTsKLQl4ZnNfaXRydW5jX3RyYWNlKFhGU19JVFJVTkNfU1RBUlQsIGlwLCBmbGFncywgbmV3X3NpemUsIHRvc3Nfc3RhcnQsCi0JCQkgbGFzdF9ieXRlKTsKKwl0cmFjZV94ZnNfaXRydW5jYXRlX3N0YXJ0KGlwLCBmbGFncywgbmV3X3NpemUsIHRvc3Nfc3RhcnQsIGxhc3RfYnl0ZSk7CiAJaWYgKGxhc3RfYnl0ZSA+IHRvc3Nfc3RhcnQpIHsKIAkJaWYgKGZsYWdzICYgWEZTX0lUUlVOQ19ERUZJTklURSkgewogCQkJeGZzX3Rvc3NwYWdlcyhpcCwgdG9zc19zdGFydCwKQEAgLTE1MTQsNyArMTQ3Nyw4IEBACiAJCW5ld19zaXplID0gMExMOwogCX0KIAlmaXJzdF91bm1hcF9ibG9jayA9IFhGU19CX1RPX0ZTQihtcCwgKHhmc191ZnNpemVfdCluZXdfc2l6ZSk7Ci0JeGZzX2l0cnVuY190cmFjZShYRlNfSVRSVU5DX0ZJTklTSDEsIGlwLCAwLCBuZXdfc2l6ZSwgMCwgMCk7CisJdHJhY2VfeGZzX2l0cnVuY2F0ZV9maW5pc2hfc3RhcnQoaXAsIG5ld19zaXplKTsKKwogCS8qCiAJICogVGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIHNldCB0aGUgc2l6ZSB0byBuZXdfc2l6ZSBwZXJtYW5lbnRseQogCSAqIG9uIGRpc2suICBUaGlzIHdheSB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFueW9uZSBldmVyCkBAIC0xNzMxLDcgKzE2OTUsNyBAQAogCUFTU0VSVCgobmV3X3NpemUgIT0gMCkgfHwKIAkgICAgICAgKGZvcmsgPT0gWEZTX0FUVFJfRk9SSykgfHwKIAkgICAgICAgKGlwLT5pX2QuZGlfbmV4dGVudHMgPT0gMCkpOwotCXhmc19pdHJ1bmNfdHJhY2UoWEZTX0lUUlVOQ19GSU5JU0gyLCBpcCwgMCwgbmV3X3NpemUsIDAsIDApOworCXRyYWNlX3hmc19pdHJ1bmNhdGVfZmluaXNoX2VuZChpcCwgbmV3X3NpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0zMjUyLDIzICszMjE2LDYgQEAKIAlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiB9CiAKLQotCi0jaWZkZWYgWEZTX0lMT0NLX1RSQUNFCi12b2lkCi14ZnNfaWxvY2tfdHJhY2UoeGZzX2lub2RlX3QgKmlwLCBpbnQgbG9jaywgdW5zaWduZWQgaW50IGxvY2tmbGFncywgaW5zdF90ICpyYSkKLXsKLQlrdHJhY2VfZW50ZXIoaXAtPmlfbG9ja190cmFjZSwKLQkJICAgICAodm9pZCAqKWlwLAotCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpbG9jaywgLyogMSA9IExPQ0ssIDM9VU5MT0NLLCBldGMgKi8KLQkJICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWxvY2tmbGFncywgLyogWEZTX0lMT0NLX0VYQ0wgZXRjICovCi0JCSAgICAgKHZvaWQgKilyYSwJCS8qIGNhbGxlciBvZiBpbG9jayAqLwotCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3VycmVudF9jcHUoKSwKLQkJICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcGlkKCksCi0JCSAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci19Ci0jZW5kaWYKLQogLyoKICAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGV4dGVudCByZWNvcmQgYXQgZmlsZSBpbmRleCBpZHguCiAgKi8KQEAgLTMzMDAsMTMgKzMyNDcsMTcgQEAKICAqLwogdm9pZAogeGZzX2lleHRfaW5zZXJ0KAotCXhmc19pZm9ya190CSppZnAsCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KKwl4ZnNfaW5vZGVfdAkqaXAsCQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAlpZHgsCQkvKiBzdGFydGluZyBpbmRleCBvZiBuZXcgaXRlbXMgKi8KIAl4ZnNfZXh0bnVtX3QJY291bnQsCQkvKiBudW1iZXIgb2YgaW5zZXJ0ZWQgaXRlbXMgKi8KLQl4ZnNfYm1idF9pcmVjX3QJKm5ldykJCS8qIGl0ZW1zIHRvIGluc2VydCAqLworCXhmc19ibWJ0X2lyZWNfdAkqbmV3LAkJLyogaXRlbXMgdG8gaW5zZXJ0ICovCisJaW50CQlzdGF0ZSkJCS8qIHR5cGUgb2YgZXh0ZW50IGNvbnZlcnNpb24gKi8KIHsKKwl4ZnNfaWZvcmtfdAkqaWZwID0gKHN0YXRlICYgQk1BUF9BVFRSRk9SSykgPyBpcC0+aV9hZnAgOiAmaXAtPmlfZGY7CiAJeGZzX2V4dG51bV90CWk7CQkvKiBleHRlbnQgcmVjb3JkIGluZGV4ICovCiAKKwl0cmFjZV94ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCwgbmV3LCBzdGF0ZSwgX1JFVF9JUF8pOworCiAJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKTsKIAl4ZnNfaWV4dF9hZGQoaWZwLCBpZHgsIGNvdW50KTsKIAlmb3IgKGkgPSBpZHg7IGkgPCBpZHggKyBjb3VudDsgaSsrLCBuZXcrKykKQEAgLTM1NDksMTMgKzM1MDAsMTcgQEAKICAqLwogdm9pZAogeGZzX2lleHRfcmVtb3ZlKAotCXhmc19pZm9ya190CSppZnAsCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KKwl4ZnNfaW5vZGVfdAkqaXAsCQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAlpZHgsCQkvKiBpbmRleCB0byBiZWdpbiByZW1vdmluZyBleHRzICovCi0JaW50CQlleHRfZGlmZikJLyogbnVtYmVyIG9mIGV4dGVudHMgdG8gcmVtb3ZlICovCisJaW50CQlleHRfZGlmZiwJLyogbnVtYmVyIG9mIGV4dGVudHMgdG8gcmVtb3ZlICovCisJaW50CQlzdGF0ZSkJCS8qIHR5cGUgb2YgZXh0ZW50IGNvbnZlcnNpb24gKi8KIHsKKwl4ZnNfaWZvcmtfdAkqaWZwID0gKHN0YXRlICYgQk1BUF9BVFRSRk9SSykgPyBpcC0+aV9hZnAgOiAmaXAtPmlfZGY7CiAJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBmaWxlICovCiAJaW50CQluZXdfc2l6ZTsJLyogc2l6ZSBvZiBleHRlbnRzIGFmdGVyIHJlbW92YWwgKi8KIAorCXRyYWNlX3hmc19pZXh0X3JlbW92ZShpcCwgaWR4LCBzdGF0ZSwgX1JFVF9JUF8pOworCiAJQVNTRVJUKGV4dF9kaWZmID4gMCk7CiAJbmV4dGVudHMgPSBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKIAluZXdfc2l6ZSA9IChuZXh0ZW50cyAtIGV4dF9kaWZmKSAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggNDE1NTVkZS4uZWMxZjI4YyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtMjEzLDcgKzIxMyw2IEBACiAKIHN0cnVjdCBiaHZfZGVzYzsKIHN0cnVjdCBjcmVkOwotc3RydWN0IGt0cmFjZTsKIHN0cnVjdCB4ZnNfYnVmOwogc3RydWN0IHhmc19ibWFwX2ZyZWU7CiBzdHJ1Y3QgeGZzX2JtYnRfaXJlYzsKQEAgLTIyMiwxMyArMjIxLDYgQEAKIHN0cnVjdCB4ZnNfdHJhbnM7CiBzdHJ1Y3QgeGZzX2RxdW90OwogCi0jaWYgZGVmaW5lZChYRlNfSUxPQ0tfVFJBQ0UpCi0jZGVmaW5lIFhGU19JTE9DS19LVFJBQ0VfU0laRQkzMgotZXh0ZXJuIHZvaWQgeGZzX2lsb2NrX3RyYWNlKHN0cnVjdCB4ZnNfaW5vZGUgKiwgaW50LCB1bnNpZ25lZCBpbnQsIGluc3RfdCAqKTsKLSNlbHNlCi0jZGVmaW5lCXhmc19pbG9ja190cmFjZShpLG4sZixyYSkKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBkbV9hdHRyc19zIHsKIAlfX3VpbnQzMl90CWRhX2RtZXZtYXNrOwkvKiBETUlHIGV2ZW50IG1hc2sgKi8KIAlfX3VpbnQxNl90CWRhX2Rtc3RhdGU7CS8qIERNSUcgc3RhdGUgaW5mbyAqLwpAQCAtMjcxLDI2ICsyNjMsNiBAQAogCiAJLyogVkZTIGlub2RlICovCiAJc3RydWN0IGlub2RlCQlpX3Zub2RlOwkvKiBlbWJlZGRlZCBWRlMgaW5vZGUgKi8KLQotCS8qIFRyYWNlIGJ1ZmZlcnMgcGVyIGlub2RlLiAqLwotI2lmZGVmIFhGU19JTk9ERV9UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSppX3RyYWNlOwkvKiBnZW5lcmFsIGlub2RlIHRyYWNlICovCi0jZW5kaWYKLSNpZmRlZiBYRlNfQk1BUF9UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSppX3h0cmFjZTsJLyogaW5vZGUgZXh0ZW50IGxpc3QgdHJhY2UgKi8KLSNlbmRpZgotI2lmZGVmIFhGU19CVFJFRV9UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSppX2J0cmFjZTsJLyogaW5vZGUgYm1hcCBidHJlZSB0cmFjZSAqLwotI2VuZGlmCi0jaWZkZWYgWEZTX1JXX1RSQUNFCi0Jc3RydWN0IGt0cmFjZQkJKmlfcnd0cmFjZTsJLyogaW5vZGUgcmVhZC93cml0ZSB0cmFjZSAqLwotI2VuZGlmCi0jaWZkZWYgWEZTX0lMT0NLX1RSQUNFCi0Jc3RydWN0IGt0cmFjZQkJKmlfbG9ja190cmFjZTsJLyogaW5vZGUgbG9jay91bmxvY2sgdHJhY2UgKi8KLSNlbmRpZgotI2lmZGVmIFhGU19ESVIyX1RSQUNFCi0Jc3RydWN0IGt0cmFjZQkJKmlfZGlyX3RyYWNlOwkvKiBpbm9kZSBkaXJlY3RvcnkgdHJhY2UgKi8KLSNlbmRpZgogfSB4ZnNfaW5vZGVfdDsKIAogI2RlZmluZSBYRlNfSVNJWkUoaXApCSgoKGlwKS0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpID8gXApAQCAtNDA2LDYgKzM3OCwxNCBAQAogI2RlZmluZSBYRlNfTE9DS19NQVNLCQkoWEZTX0lPTE9DS19FWENMIHwgWEZTX0lPTE9DS19TSEFSRUQgXAogCQkJCXwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfU0hBUkVEKQogCisjZGVmaW5lIFhGU19MT0NLX0ZMQUdTIFwKKwl7IFhGU19JT0xPQ0tfRVhDTCwJIklPTE9DS19FWENMIiB9LCBcCisJeyBYRlNfSU9MT0NLX1NIQVJFRCwJIklPTE9DS19TSEFSRUQiIH0sIFwKKwl7IFhGU19JTE9DS19FWENMLAkiSUxPQ0tfRVhDTCIgfSwgXAorCXsgWEZTX0lMT0NLX1NIQVJFRCwJIklMT0NLX1NIQVJFRCIgfSwgXAorCXsgWEZTX0lVTkxPQ0tfTk9OT1RJRlksCSJJVU5MT0NLX05PTk9USUZZIiB9CisKKwogLyoKICAqIEZsYWdzIGZvciBsb2NrZGVwIGFubm90YXRpb25zLgogICoKQEAgLTQ1NSw2ICs0MzUsMTAgQEAKICNkZWZpbmUJWEZTX0lUUlVOQ19ERUZJTklURQkweDEKICNkZWZpbmUJWEZTX0lUUlVOQ19NQVlCRQkweDIKIAorI2RlZmluZSBYRlNfSVRSVU5DX0ZMQUdTIFwKKwl7IFhGU19JVFJVTkNfREVGSU5JVEUsCSJERUZJTklURSIgfSwgXAorCXsgWEZTX0lUUlVOQ19NQVlCRSwJIk1BWUJFIiB9CisKIC8qCiAgKiBGb3IgbXVsdGlwbGUgZ3JvdXBzIHN1cHBvcnQ6IGlmIFNfSVNHSUQgYml0IGlzIHNldCBpbiB0aGUgcGFyZW50CiAgKiBkaXJlY3RvcnksIGdyb3VwIG9mIG5ldyBmaWxlIGlzIHNldCB0byB0aGF0IG9mIHRoZSBwYXJlbnQsIGFuZApAQCAtNTA3LDQ4ICs0OTEsMTYgQEAKIHZvaWQJCXhmc19zeW5jaHJvbml6ZV90aW1lcyh4ZnNfaW5vZGVfdCAqKTsKIHZvaWQJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoeGZzX2lub2RlX3QgKik7CiAKLSNpZiBkZWZpbmVkKFhGU19JTk9ERV9UUkFDRSkKLQotI2RlZmluZQlJTk9ERV9UUkFDRV9TSVpFCTE2CQkvKiBudW1iZXIgb2YgdHJhY2UgZW50cmllcyAqLwotI2RlZmluZQlJTk9ERV9LVFJBQ0VfRU5UUlkJMQotI2RlZmluZQlJTk9ERV9LVFJBQ0VfRVhJVAkyCi0jZGVmaW5lCUlOT0RFX0tUUkFDRV9IT0xECTMKLSNkZWZpbmUJSU5PREVfS1RSQUNFX1JFRgk0Ci0jZGVmaW5lCUlOT0RFX0tUUkFDRV9SRUxFCTUKLQotZXh0ZXJuIHZvaWQgX3hmc19pdHJhY2VfZW50cnkoc3RydWN0IHhmc19pbm9kZSAqLCBjb25zdCBjaGFyICosIGluc3RfdCAqKTsKLWV4dGVybiB2b2lkIF94ZnNfaXRyYWNlX2V4aXQoc3RydWN0IHhmc19pbm9kZSAqLCBjb25zdCBjaGFyICosIGluc3RfdCAqKTsKLWV4dGVybiB2b2lkIHhmc19pdHJhY2VfaG9sZChzdHJ1Y3QgeGZzX2lub2RlICosIGNoYXIgKiwgaW50LCBpbnN0X3QgKik7Ci1leHRlcm4gdm9pZCBfeGZzX2l0cmFjZV9yZWYoc3RydWN0IHhmc19pbm9kZSAqLCBjaGFyICosIGludCwgaW5zdF90ICopOwotZXh0ZXJuIHZvaWQgeGZzX2l0cmFjZV9yZWxlKHN0cnVjdCB4ZnNfaW5vZGUgKiwgY2hhciAqLCBpbnQsIGluc3RfdCAqKTsKLSNkZWZpbmUgeGZzX2l0cmFjZV9lbnRyeShpcCkJXAotCV94ZnNfaXRyYWNlX2VudHJ5KGlwLCBfX2Z1bmNfXywgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpCi0jZGVmaW5lIHhmc19pdHJhY2VfZXhpdChpcCkJXAotCV94ZnNfaXRyYWNlX2V4aXQoaXAsIF9fZnVuY19fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcykKLSNkZWZpbmUgeGZzX2l0cmFjZV9leGl0X3RhZyhpcCwgdGFnKQlcCi0JX3hmc19pdHJhY2VfZXhpdChpcCwgdGFnLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcykKLSNkZWZpbmUgeGZzX2l0cmFjZV9yZWYoaXApCVwKLQlfeGZzX2l0cmFjZV9yZWYoaXAsIF9fRklMRV9fLCBfX0xJTkVfXywgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpCi0KLSNlbHNlCi0jZGVmaW5lCXhmc19pdHJhY2VfZW50cnkoYSkKLSNkZWZpbmUJeGZzX2l0cmFjZV9leGl0KGEpCi0jZGVmaW5lCXhmc19pdHJhY2VfZXhpdF90YWcoYSwgYikKLSNkZWZpbmUJeGZzX2l0cmFjZV9ob2xkKGEsIGIsIGMsIGQpCi0jZGVmaW5lCXhmc19pdHJhY2VfcmVmKGEpCi0jZGVmaW5lCXhmc19pdHJhY2VfcmVsZShhLCBiLCBjLCBkKQotI2VuZGlmCi0KICNkZWZpbmUgSUhPTEQoaXApIFwKIGRvIHsgXAogCUFTU0VSVChhdG9taWNfcmVhZCgmVkZTX0koaXApLT5pX2NvdW50KSA+IDApIDsgXAogCWF0b21pY19pbmMoJihWRlNfSShpcCktPmlfY291bnQpKTsgXAotCXhmc19pdHJhY2VfaG9sZCgoaXApLCBfX0ZJTEVfXywgX19MSU5FX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsgXAorCXRyYWNlX3hmc19paG9sZChpcCwgX1RISVNfSVBfKTsgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBJUkVMRShpcCkgXAogZG8geyBcCi0JeGZzX2l0cmFjZV9yZWxlKChpcCksIF9fRklMRV9fLCBfX0xJTkVfXywgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOyBcCisJdHJhY2VfeGZzX2lyZWxlKGlwLCBfVEhJU19JUF8pOyBcCiAJaXB1dChWRlNfSShpcCkpOyBcCiB9IHdoaWxlICgwKQogCkBAIC01NzcsMTEgKzUyOSwxMSBAQAogaW50CQl4ZnNfaWV4dGVudHNfY29weShzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19ibWJ0X3JlY190ICosIGludCk7CiAKIHhmc19ibWJ0X3JlY19ob3N0X3QgKnhmc19pZXh0X2dldF9leHQoeGZzX2lmb3JrX3QgKiwgeGZzX2V4dG51bV90KTsKLXZvaWQJCXhmc19pZXh0X2luc2VydCh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QsIHhmc19leHRudW1fdCwKLQkJCQl4ZnNfYm1idF9pcmVjX3QgKik7Cit2b2lkCQl4ZnNfaWV4dF9pbnNlcnQoeGZzX2lub2RlX3QgKiwgeGZzX2V4dG51bV90LCB4ZnNfZXh0bnVtX3QsCisJCQkJeGZzX2JtYnRfaXJlY190ICosIGludCk7CiB2b2lkCQl4ZnNfaWV4dF9hZGQoeGZzX2lmb3JrX3QgKiwgeGZzX2V4dG51bV90LCBpbnQpOwogdm9pZAkJeGZzX2lleHRfYWRkX2luZGlyZWN0X211bHRpKHhmc19pZm9ya190ICosIGludCwgeGZzX2V4dG51bV90LCBpbnQpOwotdm9pZAkJeGZzX2lleHRfcmVtb3ZlKHhmc19pZm9ya190ICosIHhmc19leHRudW1fdCwgaW50KTsKK3ZvaWQJCXhmc19pZXh0X3JlbW92ZSh4ZnNfaW5vZGVfdCAqLCB4ZnNfZXh0bnVtX3QsIGludCwgaW50KTsKIHZvaWQJCXhmc19pZXh0X3JlbW92ZV9pbmxpbmUoeGZzX2lmb3JrX3QgKiwgeGZzX2V4dG51bV90LCBpbnQpOwogdm9pZAkJeGZzX2lleHRfcmVtb3ZlX2RpcmVjdCh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QsIGludCk7CiB2b2lkCQl4ZnNfaWV4dF9yZW1vdmVfaW5kaXJlY3QoeGZzX2lmb3JrX3QgKiwgeGZzX2V4dG51bV90LCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwppbmRleCA5Nzk0Yjg3Li5mMzg4NTVkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogCiBrbWVtX3pvbmVfdAkqeGZzX2lsaV96b25lOwkJLyogaW5vZGUgbG9nIGl0ZW0gem9uZSAqLwpAQCAtODAwLDcgKzgwMSw5IEBACiAJCQkJICAhY29tcGxldGlvbl9kb25lKCZpcC0+aV9mbHVzaCkpOwogCQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCXhmc19idWZ0cmFjZSgiSU5PREUgSVRFTSBQVVNIIiwgYnApOworCisJCQl0cmFjZV94ZnNfaW5vZGVfaXRlbV9wdXNoKGJwLCBfUkVUX0lQXyk7CisKIAkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewogCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKIAkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaCBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCmluZGV4IDY1YmFlNGMuLmNjOGRmMWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCkBAIC0xMjcsNyArMTI3LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKIHN0cnVjdCB4ZnNfYnVmOwotc3RydWN0IHhmc19ibWJ0X3JlY182NDsKK3N0cnVjdCB4ZnNfYm1idF9yZWM7CiBzdHJ1Y3QgeGZzX2lub2RlOwogc3RydWN0IHhmc19tb3VudDsKIApAQCAtMTQwLDkgKzE0MCw5IEBACiAJdW5zaWduZWQgc2hvcnQJCWlsaV9mbGFnczsJICAgLyogbWlzYyBmbGFncyAqLwogCXVuc2lnbmVkIHNob3J0CQlpbGlfbG9nZ2VkOwkgICAvKiBmbHVzaGVkIGxvZ2dlZCBkYXRhICovCiAJdW5zaWduZWQgaW50CQlpbGlfbGFzdF9maWVsZHM7ICAgLyogZmllbGRzIHdoZW4gZmx1c2hlZCAqLwotCXN0cnVjdCB4ZnNfYm1idF9yZWNfNjQJKmlsaV9leHRlbnRzX2J1ZjsgIC8qIGFycmF5IG9mIGxvZ2dlZAorCXN0cnVjdCB4ZnNfYm1idF9yZWMJKmlsaV9leHRlbnRzX2J1ZjsgIC8qIGFycmF5IG9mIGxvZ2dlZAogCQkJCQkJICAgICAgZGF0YSBleHRzICovCi0Jc3RydWN0IHhmc19ibWJ0X3JlY182NAkqaWxpX2FleHRlbnRzX2J1ZjsgLyogYXJyYXkgb2YgbG9nZ2VkCisJc3RydWN0IHhmc19ibWJ0X3JlYwkqaWxpX2FleHRlbnRzX2J1ZjsgLyogYXJyYXkgb2YgbG9nZ2VkCiAJCQkJCQkgICAgICBhdHRyIGV4dHMgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBpbGlfcHVzaGJ1Zl9mbGFnOyAgLyogb25lIGJpdCB1c2VkIGluIHB1c2hfYWlsICovCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCA3Mjk0YWJjLi4wYjY1MDM5OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtNDcsNzIgKzQ3LDggQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnNfc3BhY2UuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKICNpbmNsdWRlICJ4ZnNfaW9tYXAuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAotI2lmIGRlZmluZWQoWEZTX1JXX1RSQUNFKQotdm9pZAoteGZzX2lvbWFwX2VudGVyX3RyYWNlKAotCWludAkJdGFnLAotCXhmc19pbm9kZV90CSppcCwKLQl4ZnNfb2ZmX3QJb2Zmc2V0LAotCXNzaXplX3QJCWNvdW50KQotewotCWlmICghaXAtPmlfcnd0cmFjZSkKLQkJcmV0dXJuOwotCi0Ja3RyYWNlX2VudGVyKGlwLT5pX3J3dHJhY2UsCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXRhZyksCi0JCSh2b2lkICopaXAsCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgoaXAtPmlfZC5kaV9zaXplID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGlwLT5pX2QuZGlfc2l6ZSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKChvZmZzZXQgPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykob2Zmc2V0ICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyljb3VudCksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgoaXAtPmlfbmV3X3NpemUgPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoaXAtPmlfbmV3X3NpemUgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcGlkKCkpLAotCQkodm9pZCAqKU5VTEwsCi0JCSh2b2lkICopTlVMTCwKLQkJKHZvaWQgKilOVUxMLAotCQkodm9pZCAqKU5VTEwsCi0JCSh2b2lkICopTlVMTCwKLQkJKHZvaWQgKilOVUxMKTsKLX0KLQotdm9pZAoteGZzX2lvbWFwX21hcF90cmFjZSgKLQlpbnQJCXRhZywKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JeGZzX29mZl90CW9mZnNldCwKLQlzc2l6ZV90CQljb3VudCwKLQl4ZnNfaW9tYXBfdAkqaW9tYXBwLAotCXhmc19ibWJ0X2lyZWNfdAkqaW1hcHAsCi0JaW50CQlmbGFncykKLXsKLQlpZiAoIWlwLT5pX3J3dHJhY2UpCi0JCXJldHVybjsKLQotCWt0cmFjZV9lbnRlcihpcC0+aV9yd3RyYWNlLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyl0YWcpLAotCQkodm9pZCAqKWlwLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKGlwLT5pX2QuZGlfc2l6ZSA+PiAzMikgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpcC0+aV9kLmRpX3NpemUgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgob2Zmc2V0ID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKG9mZnNldCAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpY291bnQpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZylmbGFncyksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgoaW9tYXBwLT5pb21hcF9vZmZzZXQgPj4gMzIpICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoaW9tYXBwLT5pb21hcF9vZmZzZXQgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpb21hcHAtPmlvbWFwX2RlbHRhKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpb21hcHAtPmlvbWFwX2JzaXplKSksCi0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpb21hcHAtPmlvbWFwX2JuKSksCi0JCSh2b2lkICopKF9fcHNpbnRfdCkoaW1hcHAtPmJyX3N0YXJ0b2ZmKSwKLQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGltYXBwLT5icl9ibG9ja2NvdW50KSksCi0JCSh2b2lkICopKF9fcHNpbnRfdCkoaW1hcHAtPmJyX3N0YXJ0YmxvY2spKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHhmc19pb21hcF9lbnRlcl90cmFjZSh0YWcsIGlvLCBvZmZzZXQsIGNvdW50KQotI2RlZmluZSB4ZnNfaW9tYXBfbWFwX3RyYWNlKHRhZywgaW8sIG9mZnNldCwgY291bnQsIGlvbWFwcCwgaW1hcHAsIGZsYWdzKQotI2VuZGlmCiAKICNkZWZpbmUgWEZTX1dSSVRFSU9fQUxJR04obXAsb2ZmKQkoKChvZmYpID4+IG1wLT5tX3dyaXRlaW9fbG9nKSBcCiAJCQkJCQk8PCBtcC0+bV93cml0ZWlvX2xvZykKQEAgLTE4NywyMSArMTIzLDIwIEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKKwl0cmFjZV94ZnNfaW9tYXBfZW50ZXIoaXAsIG9mZnNldCwgY291bnQsIGZsYWdzLCBOVUxMKTsKKwogCXN3aXRjaCAoZmxhZ3MgJiAoQk1BUElfUkVBRCB8IEJNQVBJX1dSSVRFIHwgQk1BUElfQUxMT0NBVEUpKSB7CiAJY2FzZSBCTUFQSV9SRUFEOgotCQl4ZnNfaW9tYXBfZW50ZXJfdHJhY2UoWEZTX0lPTUFQX1JFQURfRU5URVIsIGlwLCBvZmZzZXQsIGNvdW50KTsKIAkJbG9ja21vZGUgPSB4ZnNfaWxvY2tfbWFwX3NoYXJlZChpcCk7CiAJCWJtYXBpX2ZsYWdzID0gWEZTX0JNQVBJX0VOVElSRTsKIAkJYnJlYWs7CiAJY2FzZSBCTUFQSV9XUklURToKLQkJeGZzX2lvbWFwX2VudGVyX3RyYWNlKFhGU19JT01BUF9XUklURV9FTlRFUiwgaXAsIG9mZnNldCwgY291bnQpOwogCQlsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMOwogCQlpZiAoZmxhZ3MgJiBCTUFQSV9JR05TVEFURSkKIAkJCWJtYXBpX2ZsYWdzIHw9IFhGU19CTUFQSV9JR1NUQVRFfFhGU19CTUFQSV9FTlRJUkU7CiAJCXhmc19pbG9jayhpcCwgbG9ja21vZGUpOwogCQlicmVhazsKIAljYXNlIEJNQVBJX0FMTE9DQVRFOgotCQl4ZnNfaW9tYXBfZW50ZXJfdHJhY2UoWEZTX0lPTUFQX0FMTE9DX0VOVEVSLCBpcCwgb2Zmc2V0LCBjb3VudCk7CiAJCWxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDsKIAkJYm1hcGlfZmxhZ3MgPSBYRlNfQk1BUElfRU5USVJFOwogCkBAIC0yMzcsOCArMTcyLDcgQEAKIAkJaWYgKG5pbWFwcyAmJgogCQkgICAgKGltYXAuYnJfc3RhcnRibG9jayAhPSBIT0xFU1RBUlRCTE9DSykgJiYKIAkJICAgIChpbWFwLmJyX3N0YXJ0YmxvY2sgIT0gREVMQVlTVEFSVEJMT0NLKSkgewotCQkJeGZzX2lvbWFwX21hcF90cmFjZShYRlNfSU9NQVBfV1JJVEVfTUFQLCBpcCwKLQkJCQkJb2Zmc2V0LCBjb3VudCwgaW9tYXBwLCAmaW1hcCwgZmxhZ3MpOworCQkJdHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGNvdW50LCBmbGFncywgJmltYXApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjUwLDggKzE4NCw3IEBACiAJCQkJCQkgICAgICAmaW1hcCwgJm5pbWFwcyk7CiAJCX0KIAkJaWYgKCFlcnJvcikgewotCQkJeGZzX2lvbWFwX21hcF90cmFjZShYRlNfSU9NQVBfQUxMT0NfTUFQLCBpcCwKLQkJCQkJb2Zmc2V0LCBjb3VudCwgaW9tYXBwLCAmaW1hcCwgZmxhZ3MpOworCQkJdHJhY2VfeGZzX2lvbWFwX2FsbG9jKGlwLCBvZmZzZXQsIGNvdW50LCBmbGFncywgJmltYXApOwogCQl9CiAJCWlvbWFwX2ZsYWdzID0gSU9NQVBfTkVXOwogCQlicmVhazsKQEAgLTI2MSw4ICsxOTQsNyBAQAogCQlsb2NrbW9kZSA9IDA7CiAKIAkJaWYgKG5pbWFwcyAmJiAhaXNudWxsc3RhcnRibG9jayhpbWFwLmJyX3N0YXJ0YmxvY2spKSB7Ci0JCQl4ZnNfaW9tYXBfbWFwX3RyYWNlKFhGU19JT01BUF9XUklURV9NQVAsIGlwLAotCQkJCQlvZmZzZXQsIGNvdW50LCBpb21hcHAsICZpbWFwLCBmbGFncyk7CisJCQl0cmFjZV94ZnNfaW9tYXBfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIGZsYWdzLCAmaW1hcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC02MjMsOCArNTU1LDcgQEAKIAkgKiBkZWxhbGxvYyBibG9ja3MgYW5kIHJldHJ5IHdpdGhvdXQgRU9GIHByZWFsbG9jYXRpb24uCiAJICovCiAJaWYgKG5pbWFwcyA9PSAwKSB7Ci0JCXhmc19pb21hcF9lbnRlcl90cmFjZShYRlNfSU9NQVBfV1JJVEVfTk9TUEFDRSwKLQkJCQkJaXAsIG9mZnNldCwgY291bnQpOworCQl0cmFjZV94ZnNfZGVsYWxsb2NfZW5vc3BjKGlwLCBvZmZzZXQsIGNvdW50KTsKIAkJaWYgKGZsdXNoZWQpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7CiAKQEAgLTgzNyw3ICs3NjgsNyBAQAogCWludAkJY29tbWl0dGVkOwogCWludAkJZXJyb3I7CiAKLQl4ZnNfaW9tYXBfZW50ZXJfdHJhY2UoWEZTX0lPTUFQX1VOV1JJVFRFTiwgaXAsIG9mZnNldCwgY291bnQpOworCXRyYWNlX3hmc191bndyaXR0ZW5fY29udmVydChpcCwgb2Zmc2V0LCBjb3VudCk7CiAKIAlvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKIAljb3VudF9mc2IgPSBYRlNfQl9UT19GU0IobXAsICh4ZnNfdWZzaXplX3Qpb2Zmc2V0ICsgY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5oIGIvZnMveGZzL3hmc19pb21hcC5oCmluZGV4IGZkY2Y3YjguLjE3NGYyOTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuaAorKysgYi9mcy94ZnMveGZzX2lvbWFwLmgKQEAgLTQzLDYgKzQzLDE0IEBACiAJQk1BUElfVFJZTE9DSyA9ICgxIDw8IDcpLAkvKiBub24tYmxvY2tpbmcgcmVxdWVzdCAqLwogfSBibWFwaV9mbGFnc190OwogCisjZGVmaW5lIEJNQVBJX0ZMQUdTIFwKKwl7IEJNQVBJX1JFQUQsCQkiUkVBRCIgfSwgXAorCXsgQk1BUElfV1JJVEUsCQkiV1JJVEUiIH0sIFwKKwl7IEJNQVBJX0FMTE9DQVRFLAkiQUxMT0NBVEUiIH0sIFwKKwl7IEJNQVBJX0lHTlNUQVRFLAkiSUdOU1RBVEUiIH0sIFwKKwl7IEJNQVBJX0RJUkVDVCwJCSJESVJFQ1QiIH0sIFwKKwl7IEJNQVBJX01NQVAsCQkiTU1BUCIgfSwgXAorCXsgQk1BUElfVFJZTE9DSywJIlRSWUxPQ0siIH0KIAogLyoKICAqIHhmc19pb21hcF90OiAgRmlsZSBzeXN0ZW0gSS9PIG1hcApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggOWRiZGZmMy4uNjAwYjViMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19ydy5oIgorI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiBrbWVtX3pvbmVfdAkqeGZzX2xvZ190aWNrZXRfem9uZTsKIApAQCAtMTIyLDg1ICsxMjMsNiBAQAogCiBTVEFUSUMgaW50CXhsb2dfaWNsb2dzX2VtcHR5KHhsb2dfdCAqbG9nKTsKIAotI2lmIGRlZmluZWQoWEZTX0xPR19UUkFDRSkKLQotI2RlZmluZSBYTE9HX1RSQUNFX0xPR0dSQU5UX1NJWkUJMjA0OAotI2RlZmluZSBYTE9HX1RSQUNFX0lDTE9HX1NJWkUJCTI1NgotCi12b2lkCi14bG9nX3RyYWNlX2xvZ2dyYW50X2FsbG9jKHhsb2dfdCAqbG9nKQotewotCWxvZy0+bF9ncmFudF90cmFjZSA9IGt0cmFjZV9hbGxvYyhYTE9HX1RSQUNFX0xPR0dSQU5UX1NJWkUsIEtNX05PRlMpOwotfQotCi12b2lkCi14bG9nX3RyYWNlX2xvZ2dyYW50X2RlYWxsb2MoeGxvZ190ICpsb2cpCi17Ci0Ja3RyYWNlX2ZyZWUobG9nLT5sX2dyYW50X3RyYWNlKTsKLX0KLQotdm9pZAoteGxvZ190cmFjZV9sb2dncmFudCh4bG9nX3QgKmxvZywgeGxvZ190aWNrZXRfdCAqdGljLCB4ZnNfY2FkZHJfdCBzdHJpbmcpCi17Ci0JdW5zaWduZWQgbG9uZyBjbnRzOwotCi0JLyogdGlja2V0IGNvdW50cyBhcmUgMSBieXRlIGVhY2ggKi8KLQljbnRzID0gKCh1bnNpZ25lZCBsb25nKXRpYy0+dF9vY250KSB8ICgodW5zaWduZWQgbG9uZyl0aWMtPnRfY250KSA8PCA4OwotCi0Ja3RyYWNlX2VudGVyKGxvZy0+bF9ncmFudF90cmFjZSwKLQkJICAgICAodm9pZCAqKXRpYywKLQkJICAgICAodm9pZCAqKWxvZy0+bF9yZXNlcnZlX2hlYWRxLAotCQkgICAgICh2b2lkICopbG9nLT5sX3dyaXRlX2hlYWRxLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlKSwKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZylsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlcyksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpbG9nLT5sX2dyYW50X3dyaXRlX2N5Y2xlKSwKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZylsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXMpLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWxvZy0+bF9jdXJyX2N5Y2xlKSwKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZylsb2ctPmxfY3Vycl9ibG9jayksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpQ1lDTEVfTFNOKGxvZy0+bF90YWlsX2xzbikpLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKUJMT0NLX0xTTihsb2ctPmxfdGFpbF9sc24pKSwKLQkJICAgICAodm9pZCAqKXN0cmluZywKLQkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl0aWMtPnRfdHJhbnNfdHlwZSksCi0JCSAgICAgKHZvaWQgKiljbnRzLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXRpYy0+dF9jdXJyX3JlcyksCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdGljLT50X3VuaXRfcmVzKSk7Ci19Ci0KLXZvaWQKLXhsb2dfdHJhY2VfaWNsb2dfYWxsb2MoeGxvZ19pbl9jb3JlX3QgKmljbG9nKQotewotCWljbG9nLT5pY190cmFjZSA9IGt0cmFjZV9hbGxvYyhYTE9HX1RSQUNFX0lDTE9HX1NJWkUsIEtNX05PRlMpOwotfQotCi12b2lkCi14bG9nX3RyYWNlX2ljbG9nX2RlYWxsb2MoeGxvZ19pbl9jb3JlX3QgKmljbG9nKQotewotCWt0cmFjZV9mcmVlKGljbG9nLT5pY190cmFjZSk7Ci19Ci0KLXZvaWQKLXhsb2dfdHJhY2VfaWNsb2coeGxvZ19pbl9jb3JlX3QgKmljbG9nLCB1aW50IHN0YXRlKQotewotCWt0cmFjZV9lbnRlcihpY2xvZy0+aWNfdHJhY2UsCi0JCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpc3RhdGUpLAotCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcGlkKCkpLAotCQkgICAgICh2b2lkICopTlVMTCwgKHZvaWQgKilOVUxMLCAodm9pZCAqKU5VTEwsICh2b2lkICopTlVMTCwKLQkJICAgICAodm9pZCAqKU5VTEwsICh2b2lkICopTlVMTCwgKHZvaWQgKilOVUxMLCAodm9pZCAqKU5VTEwsCi0JCSAgICAgKHZvaWQgKilOVUxMLCAodm9pZCAqKU5VTEwsICh2b2lkICopTlVMTCwgKHZvaWQgKilOVUxMLAotCQkgICAgICh2b2lkICopTlVMTCwgKHZvaWQgKilOVUxMKTsKLX0KLSNlbHNlCi0KLSNkZWZpbmUJeGxvZ190cmFjZV9sb2dncmFudF9hbGxvYyhsb2cpCi0jZGVmaW5lCXhsb2dfdHJhY2VfbG9nZ3JhbnRfZGVhbGxvYyhsb2cpCi0jZGVmaW5lCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLHRpYyxzdHJpbmcpCi0KLSNkZWZpbmUJeGxvZ190cmFjZV9pY2xvZ19hbGxvYyhpY2xvZykKLSNkZWZpbmUJeGxvZ190cmFjZV9pY2xvZ19kZWFsbG9jKGljbG9nKQotI2RlZmluZQl4bG9nX3RyYWNlX2ljbG9nKGljbG9nLHN0YXRlKQotCi0jZW5kaWYgLyogWEZTX0xPR19UUkFDRSAqLwotCiAKIHN0YXRpYyB2b2lkCiB4bG9nX2luc190aWNrZXRxKHN0cnVjdCB4bG9nX3RpY2tldCAqKnFwLCBzdHJ1Y3QgeGxvZ190aWNrZXQgKnRpYykKQEAgLTM1MywxNSArMjc1LDE3IEBACiAKIAlpZiAoKHRpY2tldC0+dF9mbGFncyAmIFhMT0dfVElDX1BFUk1fUkVTRVJWKSA9PSAwIHx8CiAJICAgIChmbGFncyAmIFhGU19MT0dfUkVMX1BFUk1fUkVTRVJWKSkgeworCQl0cmFjZV94ZnNfbG9nX2RvbmVfbm9ucGVybShsb2csIHRpY2tldCk7CisKIAkJLyoKIAkJICogUmVsZWFzZSB0aWNrZXQgaWYgbm90IHBlcm1hbmVudCByZXNlcnZhdGlvbiBvciBhIHNwZWNpZmljCiAJCSAqIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSB0byByZWxlYXNlIGEgcGVybWFuZW50IHJlc2VydmF0aW9uLgogCQkgKi8KLQkJeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpY2tldCwgInhmc19sb2dfZG9uZTogKG5vbi1wZXJtYW5lbnQpIik7CiAJCXhsb2dfdW5ncmFudF9sb2dfc3BhY2UobG9nLCB0aWNrZXQpOwogCQl4ZnNfbG9nX3RpY2tldF9wdXQodGlja2V0KTsKIAl9IGVsc2UgewotCQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGlja2V0LCAieGZzX2xvZ19kb25lOiAocGVybWFuZW50KSIpOworCQl0cmFjZV94ZnNfbG9nX2RvbmVfcGVybShsb2csIHRpY2tldCk7CisKIAkJeGxvZ19yZWdyYW50X3Jlc2VydmVfbG9nX3NwYWNlKGxvZywgdGlja2V0KTsKIAkJLyogSWYgdGhpcyB0aWNrZXQgd2FzIGEgcGVybWFuZW50IHJlc2VydmF0aW9uIGFuZCB3ZSBhcmVuJ3QKIAkJICogdHJ5aW5nIHRvIHJlbGVhc2UgaXQsIHJlc2V0IHRoZSBpbml0ZWQgZmxhZ3M7IHNvIG5leHQgdGltZQpAQCAtNTA1LDEwICs0MjksMTMgQEAKIAogCVhGU19TVEFUU19JTkMoeHNfdHJ5X2xvZ3NwYWNlKTsKIAorCiAJaWYgKCp0aWNrZXQgIT0gTlVMTCkgewogCQlBU1NFUlQoZmxhZ3MgJiBYRlNfTE9HX1BFUk1fUkVTRVJWKTsKIAkJaW50ZXJuYWxfdGlja2V0ID0gKHhsb2dfdGlja2V0X3QgKikqdGlja2V0OwotCQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgaW50ZXJuYWxfdGlja2V0LCAieGZzX2xvZ19yZXNlcnZlOiBleGlzdGluZyB0aWNrZXQgKHBlcm1hbmVudCB0cmFucykiKTsKKworCQl0cmFjZV94ZnNfbG9nX3Jlc2VydmUobG9nLCBpbnRlcm5hbF90aWNrZXQpOworCiAJCXhsb2dfZ3JhbnRfcHVzaF9haWwobXAsIGludGVybmFsX3RpY2tldC0+dF91bml0X3Jlcyk7CiAJCXJldHZhbCA9IHhsb2dfcmVncmFudF93cml0ZV9sb2dfc3BhY2UobG9nLCBpbnRlcm5hbF90aWNrZXQpOwogCX0gZWxzZSB7CkBAIC01MTksMTAgKzQ0Niw5IEBACiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVOT01FTSk7CiAJCWludGVybmFsX3RpY2tldC0+dF90cmFuc190eXBlID0gdF90eXBlOwogCQkqdGlja2V0ID0gaW50ZXJuYWxfdGlja2V0OwotCQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgaW50ZXJuYWxfdGlja2V0LCAKLQkJCShpbnRlcm5hbF90aWNrZXQtPnRfZmxhZ3MgJiBYTE9HX1RJQ19QRVJNX1JFU0VSVikgPwotCQkJInhmc19sb2dfcmVzZXJ2ZTogY3JlYXRlIG5ldyB0aWNrZXQgKHBlcm1hbmVudCB0cmFucykiIDoKLQkJCSJ4ZnNfbG9nX3Jlc2VydmU6IGNyZWF0ZSBuZXcgdGlja2V0Iik7CisKKwkJdHJhY2VfeGZzX2xvZ19yZXNlcnZlKGxvZywgaW50ZXJuYWxfdGlja2V0KTsKKwogCQl4bG9nX2dyYW50X3B1c2hfYWlsKG1wLAogCQkJCSAgICAoaW50ZXJuYWxfdGlja2V0LT50X3VuaXRfcmVzICoKIAkJCQkgICAgIGludGVybmFsX3RpY2tldC0+dF9jbnQpKTsKQEAgLTczNCw3ICs2NjAsNyBAQAogCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQl9CiAJCWlmICh0aWMpIHsKLQkJCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWMsICJ1bm1vdW50IHJlYyIpOworCQkJdHJhY2VfeGZzX2xvZ191bW91bnRfd3JpdGUobG9nLCB0aWMpOwogCQkJeGxvZ191bmdyYW50X2xvZ19zcGFjZShsb2csIHRpYyk7CiAJCQl4ZnNfbG9nX3RpY2tldF9wdXQodGljKTsKIAkJfQpAQCAtMTAzMCw3ICs5NTYsNiBAQAogCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBsLT5sX21wLAogCQkJCSJ4bG9nX2lvZG9uZTogQmFycmllcnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiCiAJCQkJIiBieSBkZXZpY2UuIERpc2FibGluZyBiYXJyaWVyc1xuIik7Ci0JCXhmc19idWZ0cmFjZSgiWExPR19JT0RPTkUgQkFSUklFUlMgT0ZGIiwgYnApOwogCX0KIAogCS8qCkBAIC0xMDg1LDEzICsxMDEwLDEwIEBACiAJCXJldHVybiAwOwogCX0KIAotCXhmc19idWZ0cmFjZSgiWExPR19fQkRTVFJBVCBJT0VSUk9SIiwgYnApOwogCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CiAJWEZTX0JVRl9TVEFMRShicCk7CiAJeGZzX2Jpb2RvbmUoYnApOwogCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQotCiB9CiAKIC8qCkBAIC0xMjQ2LDcgKzExNjgsNiBAQAogCXNwaW5fbG9ja19pbml0KCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJc3ZfaW5pdCgmbG9nLT5sX2ZsdXNoX3dhaXQsIDAsICJmbHVzaF93YWl0Iik7CiAKLQl4bG9nX3RyYWNlX2xvZ2dyYW50X2FsbG9jKGxvZyk7CiAJLyogbG9nIHJlY29yZCBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgQkJTSVpFOyBzZWUgeGxvZ19yZWNfaGVhZGVyX3QgKi8KIAlBU1NFUlQoKFhGU19CVUZfU0laRShicCkgJiBCQk1BU0spID09IDApOwogCkBAIC0xMzA1LDggKzEyMjYsNiBAQAogCQlzdl9pbml0KCZpY2xvZy0+aWNfZm9yY2Vfd2FpdCwgU1ZfREVGQVVMVCwgImljbG9nLWZvcmNlIik7CiAJCXN2X2luaXQoJmljbG9nLT5pY193cml0ZV93YWl0LCBTVl9ERUZBVUxULCAiaWNsb2ctd3JpdGUiKTsKIAotCQl4bG9nX3RyYWNlX2ljbG9nX2FsbG9jKGljbG9nKTsKLQogCQlpY2xvZ3AgPSAmaWNsb2ctPmljX25leHQ7CiAJfQogCSppY2xvZ3AgPSBsb2ctPmxfaWNsb2c7CQkJLyogY29tcGxldGUgcmluZyAqLwpAQCAtMTMyMSwxMyArMTI0MCwxMSBAQAogCQkJc3ZfZGVzdHJveSgmaWNsb2ctPmljX2ZvcmNlX3dhaXQpOwogCQkJc3ZfZGVzdHJveSgmaWNsb2ctPmljX3dyaXRlX3dhaXQpOwogCQkJeGZzX2J1Zl9mcmVlKGljbG9nLT5pY19icCk7Ci0JCQl4bG9nX3RyYWNlX2ljbG9nX2RlYWxsb2MoaWNsb2cpOwogCQl9CiAJCWttZW1fZnJlZShpY2xvZyk7CiAJfQogCXNwaW5sb2NrX2Rlc3Ryb3koJmxvZy0+bF9pY2xvZ2xvY2spOwogCXNwaW5sb2NrX2Rlc3Ryb3koJmxvZy0+bF9ncmFudF9sb2NrKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50X2RlYWxsb2MobG9nKTsKIAl4ZnNfYnVmX2ZyZWUobG9nLT5sX3hidWYpOwogb3V0X2ZyZWVfbG9nOgogCWttZW1fZnJlZShsb2cpOwpAQCAtMTUyNCw2ICsxNDQxLDcgQEAKIAlYRlNfQlVGX1pFUk9GTEFHUyhicCk7CiAJWEZTX0JVRl9CVVNZKGJwKTsKIAlYRlNfQlVGX0FTWU5DKGJwKTsKKwlicC0+Yl9mbGFncyB8PSBYQkZfTE9HX0JVRkZFUjsKIAkvKgogCSAqIERvIGFuIG9yZGVyZWQgd3JpdGUgZm9yIHRoZSBsb2cgYmxvY2suCiAJICogSXRzIHVubmVjZXNzYXJ5IHRvIGZsdXNoIHRoZSBmaXJzdCBzcGxpdCBibG9jayBpbiB0aGUgbG9nIHdyYXAgY2FzZS4KQEAgLTE1NjEsNiArMTQ3OSw3IEBACiAJCVhGU19CVUZfWkVST0ZMQUdTKGJwKTsKIAkJWEZTX0JVRl9CVVNZKGJwKTsKIAkJWEZTX0JVRl9BU1lOQyhicCk7CisJCWJwLT5iX2ZsYWdzIHw9IFhCRl9MT0dfQlVGRkVSOwogCQlpZiAobG9nLT5sX21wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCiAJCQlYRlNfQlVGX09SREVSRUQoYnApOwogCQlkcHRyID0gWEZTX0JVRl9QVFIoYnApOwpAQCAtMTYwNyw3ICsxNTI2LDYgQEAKIAkJc3ZfZGVzdHJveSgmaWNsb2ctPmljX2ZvcmNlX3dhaXQpOwogCQlzdl9kZXN0cm95KCZpY2xvZy0+aWNfd3JpdGVfd2FpdCk7CiAJCXhmc19idWZfZnJlZShpY2xvZy0+aWNfYnApOwotCQl4bG9nX3RyYWNlX2ljbG9nX2RlYWxsb2MoaWNsb2cpOwogCQluZXh0X2ljbG9nID0gaWNsb2ctPmljX25leHQ7CiAJCWttZW1fZnJlZShpY2xvZyk7CiAJCWljbG9nID0gbmV4dF9pY2xvZzsKQEAgLTE2MTYsNyArMTUzNCw2IEBACiAJc3BpbmxvY2tfZGVzdHJveSgmbG9nLT5sX2dyYW50X2xvY2spOwogCiAJeGZzX2J1Zl9mcmVlKGxvZy0+bF94YnVmKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50X2RlYWxsb2MobG9nKTsKIAlsb2ctPmxfbXAtPm1fbG9nID0gTlVMTDsKIAlrbWVtX2ZyZWUobG9nKTsKIH0JLyogeGxvZ19kZWFsbG9jX2xvZyAqLwpAQCAtMjQxNCw3ICsyMzMxLDYgQEAKIAogCWljbG9nID0gbG9nLT5sX2ljbG9nOwogCWlmIChpY2xvZy0+aWNfc3RhdGUgIT0gWExPR19TVEFURV9BQ1RJVkUpIHsKLQkJeGxvZ190cmFjZV9pY2xvZyhpY2xvZywgWExPR19UUkFDRV9TTEVFUF9GTFVTSCk7CiAJCVhGU19TVEFUU19JTkMoeHNfbG9nX25vaWNsb2dzKTsKIAogCQkvKiBXYWl0IGZvciBsb2cgd3JpdGVzIHRvIGhhdmUgZmx1c2hlZCAqLwpAQCAtMjUyMCwxMyArMjQzNiwxNSBAQAogCiAJLyogSXMgdGhlcmUgc3BhY2Ugb3IgZG8gd2UgbmVlZCB0byBzbGVlcD8gKi8KIAlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGljLCAieGxvZ19ncmFudF9sb2dfc3BhY2U6IGVudGVyIik7CisKKwl0cmFjZV94ZnNfbG9nX2dyYW50X2VudGVyKGxvZywgdGljKTsKIAogCS8qIHNvbWV0aGluZyBpcyBhbHJlYWR5IHNsZWVwaW5nOyBpbnNlcnQgbmV3IHRyYW5zYWN0aW9uIGF0IGVuZCAqLwogCWlmIChsb2ctPmxfcmVzZXJ2ZV9oZWFkcSkgewogCQl4bG9nX2luc190aWNrZXRxKCZsb2ctPmxfcmVzZXJ2ZV9oZWFkcSwgdGljKTsKLQkJeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpYywKLQkJCQkgICAgInhsb2dfZ3JhbnRfbG9nX3NwYWNlOiBzbGVlcCAxIik7CisKKwkJdHJhY2VfeGZzX2xvZ19ncmFudF9zbGVlcDEobG9nLCB0aWMpOworCiAJCS8qCiAJCSAqIEdvdHRhIGNoZWNrIHRoaXMgYmVmb3JlIGdvaW5nIHRvIHNsZWVwLCB3aGlsZSB3ZSdyZQogCQkgKiBob2xkaW5nIHRoZSBncmFudCBsb2NrLgpAQCAtMjU0MCw4ICsyNDU4LDcgQEAKIAkJICogSWYgd2UgZ290IGFuIGVycm9yLCBhbmQgdGhlIGZpbGVzeXN0ZW0gaXMgc2h1dHRpbmcgZG93biwKIAkJICogd2UnbGwgY2F0Y2ggaXQgZG93biBiZWxvdy4gU28ganVzdCBjb250aW51ZS4uLgogCQkgKi8KLQkJeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpYywKLQkJCQkgICAgInhsb2dfZ3JhbnRfbG9nX3NwYWNlOiB3YWtlIDEiKTsKKwkJdHJhY2VfeGZzX2xvZ19ncmFudF93YWtlMShsb2csIHRpYyk7CiAJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCX0KIAlpZiAodGljLT50X2ZsYWdzICYgWEZTX0xPR19QRVJNX1JFU0VSVikKQEAgLTI1NTgsOCArMjQ3NSw5IEBACiAJaWYgKGZyZWVfYnl0ZXMgPCBuZWVkX2J5dGVzKSB7CiAJCWlmICgodGljLT50X2ZsYWdzICYgWExPR19USUNfSU5fUSkgPT0gMCkKIAkJCXhsb2dfaW5zX3RpY2tldHEoJmxvZy0+bF9yZXNlcnZlX2hlYWRxLCB0aWMpOwotCQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGljLAotCQkJCSAgICAieGxvZ19ncmFudF9sb2dfc3BhY2U6IHNsZWVwIDIiKTsKKworCQl0cmFjZV94ZnNfbG9nX2dyYW50X3NsZWVwMihsb2csIHRpYyk7CisKIAkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAkJeGxvZ19ncmFudF9wdXNoX2FpbChsb2ctPmxfbXAsIG5lZWRfYnl0ZXMpOwogCQlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKQEAgLTI1NzEsOCArMjQ4OSw4IEBACiAJCWlmIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKQogCQkJZ290byBlcnJvcl9yZXR1cm47CiAKLQkJeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpYywKLQkJCQkgICAgInhsb2dfZ3JhbnRfbG9nX3NwYWNlOiB3YWtlIDIiKTsKKwkJdHJhY2VfeGZzX2xvZ19ncmFudF93YWtlMihsb2csIHRpYyk7CisKIAkJZ290byByZWRvOwogCX0gZWxzZSBpZiAodGljLT50X2ZsYWdzICYgWExPR19USUNfSU5fUSkKIAkJeGxvZ19kZWxfdGlja2V0cSgmbG9nLT5sX3Jlc2VydmVfaGVhZHEsIHRpYyk7CkBAIC0yNTkyLDcgKzI1MTAsNyBAQAogCQlBU1NFUlQobG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzIDw9IEJCVE9CKEJMT0NLX0xTTih0YWlsX2xzbikpKTsKIAl9CiAjZW5kaWYKLQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGljLCAieGxvZ19ncmFudF9sb2dfc3BhY2U6IGV4aXQiKTsKKwl0cmFjZV94ZnNfbG9nX2dyYW50X2V4aXQobG9nLCB0aWMpOwogCXhsb2dfdmVyaWZ5X2dyYW50X2hlYWQobG9nLCAxKTsKIAlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCXJldHVybiAwOwpAQCAtMjYwMCw3ICsyNTE4LDkgQEAKICBlcnJvcl9yZXR1cm46CiAJaWYgKHRpYy0+dF9mbGFncyAmIFhMT0dfVElDX0lOX1EpCiAJCXhsb2dfZGVsX3RpY2tldHEoJmxvZy0+bF9yZXNlcnZlX2hlYWRxLCB0aWMpOwotCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWMsICJ4bG9nX2dyYW50X2xvZ19zcGFjZTogZXJyX3JldCIpOworCisJdHJhY2VfeGZzX2xvZ19ncmFudF9lcnJvcihsb2csIHRpYyk7CisKIAkvKgogCSAqIElmIHdlIGFyZSBmYWlsaW5nLCBtYWtlIHN1cmUgdGhlIHRpY2tldCBkb2Vzbid0IGhhdmUgYW55CiAJICogY3VycmVudCByZXNlcnZhdGlvbnMuIFdlIGRvbid0IHdhbnQgdG8gYWRkIHRoaXMgYmFjayB3aGVuCkBAIC0yNjQwLDcgKzI1NjAsOCBAQAogI2VuZGlmCiAKIAlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGljLCAieGxvZ19yZWdyYW50X3dyaXRlX2xvZ19zcGFjZTogZW50ZXIiKTsKKworCXRyYWNlX3hmc19sb2dfcmVncmFudF93cml0ZV9lbnRlcihsb2csIHRpYyk7CiAKIAlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkKIAkJZ290byBlcnJvcl9yZXR1cm47CkBAIC0yNjY5LDggKzI1OTAsOCBAQAogCQkJaWYgKCh0aWMtPnRfZmxhZ3MgJiBYTE9HX1RJQ19JTl9RKSA9PSAwKQogCQkJCXhsb2dfaW5zX3RpY2tldHEoJmxvZy0+bF93cml0ZV9oZWFkcSwgdGljKTsKIAotCQkJeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpYywKLQkJCQkgICAgInhsb2dfcmVncmFudF93cml0ZV9sb2dfc3BhY2U6IHNsZWVwIDEiKTsKKwkJCXRyYWNlX3hmc19sb2dfcmVncmFudF93cml0ZV9zbGVlcDEobG9nLCB0aWMpOworCiAJCQlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCQkJeGxvZ19ncmFudF9wdXNoX2FpbChsb2ctPmxfbXAsIG5lZWRfYnl0ZXMpOwogCQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CkBAIC0yNjg1LDggKzI2MDYsNyBAQAogCQkJaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCiAJCQkJZ290byBlcnJvcl9yZXR1cm47CiAKLQkJCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWMsCi0JCQkJICAgICJ4bG9nX3JlZ3JhbnRfd3JpdGVfbG9nX3NwYWNlOiB3YWtlIDEiKTsKKwkJCXRyYWNlX3hmc19sb2dfcmVncmFudF93cml0ZV93YWtlMShsb2csIHRpYyk7CiAJCX0KIAl9CiAKQEAgLTI3MDQsNiArMjYyNCw4IEBACiAJCXNwaW5fbG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCiAJCVhGU19TVEFUU19JTkMoeHNfc2xlZXBfbG9nc3BhY2UpOworCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfc2xlZXAyKGxvZywgdGljKTsKKwogCQlzdl93YWl0KCZ0aWMtPnRfd2FpdCwgUElOT0R8UExUV0FJVCwgJmxvZy0+bF9ncmFudF9sb2NrLCBzKTsKIAogCQkvKiBJZiB3ZSdyZSBzaHV0dGluZyBkb3duLCB0aGlzIHRpYyBpcyBhbHJlYWR5IG9mZiB0aGUgcXVldWUgKi8KQEAgLTI3MTEsOCArMjYzMyw3IEBACiAJCWlmIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKQogCQkJZ290byBlcnJvcl9yZXR1cm47CiAKLQkJeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpYywKLQkJCQkgICAgInhsb2dfcmVncmFudF93cml0ZV9sb2dfc3BhY2U6IHdha2UgMiIpOworCQl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfd2FrZTIobG9nLCB0aWMpOwogCQlnb3RvIHJlZG87CiAJfSBlbHNlIGlmICh0aWMtPnRfZmxhZ3MgJiBYTE9HX1RJQ19JTl9RKQogCQl4bG9nX2RlbF90aWNrZXRxKCZsb2ctPmxfd3JpdGVfaGVhZHEsIHRpYyk7CkBAIC0yNzI3LDcgKzI2NDgsOCBAQAogCX0KICNlbmRpZgogCi0JeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpYywgInhsb2dfcmVncmFudF93cml0ZV9sb2dfc3BhY2U6IGV4aXQiKTsKKwl0cmFjZV94ZnNfbG9nX3JlZ3JhbnRfd3JpdGVfZXhpdChsb2csIHRpYyk7CisKIAl4bG9nX3ZlcmlmeV9ncmFudF9oZWFkKGxvZywgMSk7CiAJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTI3MzYsNyArMjY1OCw5IEBACiAgZXJyb3JfcmV0dXJuOgogCWlmICh0aWMtPnRfZmxhZ3MgJiBYTE9HX1RJQ19JTl9RKQogCQl4bG9nX2RlbF90aWNrZXRxKCZsb2ctPmxfcmVzZXJ2ZV9oZWFkcSwgdGljKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGljLCAieGxvZ19yZWdyYW50X3dyaXRlX2xvZ19zcGFjZTogZXJyX3JldCIpOworCisJdHJhY2VfeGZzX2xvZ19yZWdyYW50X3dyaXRlX2Vycm9yKGxvZywgdGljKTsKKwogCS8qCiAJICogSWYgd2UgYXJlIGZhaWxpbmcsIG1ha2Ugc3VyZSB0aGUgdGlja2V0IGRvZXNuJ3QgaGF2ZSBhbnkKIAkgKiBjdXJyZW50IHJlc2VydmF0aW9ucy4gV2UgZG9uJ3Qgd2FudCB0byBhZGQgdGhpcyBiYWNrIHdoZW4KQEAgLTI3NjAsOCArMjY4NCw4IEBACiB4bG9nX3JlZ3JhbnRfcmVzZXJ2ZV9sb2dfc3BhY2UoeGxvZ190CSAgICAgKmxvZywKIAkJCSAgICAgICB4bG9nX3RpY2tldF90ICp0aWNrZXQpCiB7Ci0JeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpY2tldCwKLQkJCSAgICAieGxvZ19yZWdyYW50X3Jlc2VydmVfbG9nX3NwYWNlOiBlbnRlciIpOworCXRyYWNlX3hmc19sb2dfcmVncmFudF9yZXNlcnZlX2VudGVyKGxvZywgdGlja2V0KTsKKwogCWlmICh0aWNrZXQtPnRfY250ID4gMCkKIAkJdGlja2V0LT50X2NudC0tOwogCkBAIC0yNzY5LDggKzI2OTMsOSBAQAogCXhsb2dfZ3JhbnRfc3ViX3NwYWNlKGxvZywgdGlja2V0LT50X2N1cnJfcmVzKTsKIAl0aWNrZXQtPnRfY3Vycl9yZXMgPSB0aWNrZXQtPnRfdW5pdF9yZXM7CiAJeGxvZ190aWNfcmVzZXRfcmVzKHRpY2tldCk7Ci0JeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpY2tldCwKLQkJCSAgICAieGxvZ19yZWdyYW50X3Jlc2VydmVfbG9nX3NwYWNlOiBzdWIgY3VycmVudCByZXMiKTsKKworCXRyYWNlX3hmc19sb2dfcmVncmFudF9yZXNlcnZlX3N1Yihsb2csIHRpY2tldCk7CisKIAl4bG9nX3ZlcmlmeV9ncmFudF9oZWFkKGxvZywgMSk7CiAKIAkvKiBqdXN0IHJldHVybiBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgb2YgdGhlIHByZS1yZXNlcnZlZCBzcGFjZSAqLwpAQCAtMjc4MCw4ICsyNzA1LDkgQEAKIAl9CiAKIAl4bG9nX2dyYW50X2FkZF9zcGFjZV9yZXNlcnZlKGxvZywgdGlja2V0LT50X3VuaXRfcmVzKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGlja2V0LAotCQkJICAgICJ4bG9nX3JlZ3JhbnRfcmVzZXJ2ZV9sb2dfc3BhY2U6IGV4aXQiKTsKKworCXRyYWNlX3hmc19sb2dfcmVncmFudF9yZXNlcnZlX2V4aXQobG9nLCB0aWNrZXQpOworCiAJeGxvZ192ZXJpZnlfZ3JhbnRfaGVhZChsb2csIDApOwogCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJdGlja2V0LT50X2N1cnJfcmVzID0gdGlja2V0LT50X3VuaXRfcmVzOwpAQCAtMjgxMSwxMSArMjczNywxMSBAQAogCQl0aWNrZXQtPnRfY250LS07CiAKIAlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGlja2V0LCAieGxvZ191bmdyYW50X2xvZ19zcGFjZTogZW50ZXIiKTsKKwl0cmFjZV94ZnNfbG9nX3VuZ3JhbnRfZW50ZXIobG9nLCB0aWNrZXQpOwogCiAJeGxvZ19ncmFudF9zdWJfc3BhY2UobG9nLCB0aWNrZXQtPnRfY3Vycl9yZXMpOwogCi0JeGxvZ190cmFjZV9sb2dncmFudChsb2csIHRpY2tldCwgInhsb2dfdW5ncmFudF9sb2dfc3BhY2U6IHN1YiBjdXJyZW50Iik7CisJdHJhY2VfeGZzX2xvZ191bmdyYW50X3N1Yihsb2csIHRpY2tldCk7CiAKIAkvKiBJZiB0aGlzIGlzIGEgcGVybWFuZW50IHJlc2VydmF0aW9uIHRpY2tldCwgd2UgbWF5IGJlIGFibGUgdG8gZnJlZQogCSAqIHVwIG1vcmUgc3BhY2UgYmFzZWQgb24gdGhlIHJlbWFpbmluZyBjb3VudC4KQEAgLTI4MjUsNyArMjc1MSw4IEBACiAJCXhsb2dfZ3JhbnRfc3ViX3NwYWNlKGxvZywgdGlja2V0LT50X3VuaXRfcmVzKnRpY2tldC0+dF9jbnQpOwogCX0KIAotCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWNrZXQsICJ4bG9nX3VuZ3JhbnRfbG9nX3NwYWNlOiBleGl0Iik7CisJdHJhY2VfeGZzX2xvZ191bmdyYW50X2V4aXQobG9nLCB0aWNrZXQpOworCiAJeGxvZ192ZXJpZnlfZ3JhbnRfaGVhZChsb2csIDEpOwogCXNwaW5fdW5sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJeGZzX2xvZ19tb3ZlX3RhaWwobG9nLT5sX21wLCAxKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaCBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAppbmRleCA2NzljN2M0Li5kNTU2NjJkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19wcml2LmgKKysrIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIF9fWEZTX0xPR19QUklWX0hfXwogCiBzdHJ1Y3QgeGZzX2J1ZjsKLXN0cnVjdCBrdHJhY2U7CiBzdHJ1Y3QgbG9nOwogc3RydWN0IHhsb2dfdGlja2V0Owogc3RydWN0IHhmc19idWZfY2FuY2VsOwpAQCAtMTM1LDYgKzEzNCwxMiBAQAogI2RlZmluZSBYTE9HX1RJQ19JTklURUQJCTB4MQkvKiBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwogI2RlZmluZSBYTE9HX1RJQ19QRVJNX1JFU0VSVgkweDIJLyogcGVybWFuZW50IHJlc2VydmF0aW9uICovCiAjZGVmaW5lIFhMT0dfVElDX0lOX1EJCTB4NAorCisjZGVmaW5lIFhMT0dfVElDX0ZMQUdTIFwKKwl7IFhMT0dfVElDX0lOSVRFRCwJIlhMT0dfVElDX0lOSVRFRCIgfSwgXAorCXsgWExPR19USUNfUEVSTV9SRVNFUlYsCSJYTE9HX1RJQ19QRVJNX1JFU0VSViIgfSwgXAorCXsgWExPR19USUNfSU5fUSwJIlhMT0dfVElDX0lOX1EiIH0KKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogI2RlZmluZSBYTE9HX1VOTU9VTlRfVFlQRQkweDU1NmUJLyogVW4gZm9yIFVubW91bnQgKi8KQEAgLTM2MSw5ICszNjYsNiBAQAogCWludAkJCWljX2J3cml0ZWNudDsKIAl1bnNpZ25lZCBzaG9ydAkJaWNfc3RhdGU7CiAJY2hhcgkJCSppY19kYXRhcDsJLyogcG9pbnRlciB0byBpY2xvZyBkYXRhICovCi0jaWZkZWYgWEZTX0xPR19UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSppY190cmFjZTsKLSNlbmRpZgogCiAJLyogQ2FsbGJhY2sgc3RydWN0dXJlcyBuZWVkIHRoZWlyIG93biBjYWNoZWxpbmUgKi8KIAlzcGlubG9ja190CQlpY19jYWxsYmFja19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CkBAIC00MjksMTAgKzQzMSw2IEBACiAJaW50CQkJbF9ncmFudF93cml0ZV9jeWNsZTsKIAlpbnQJCQlsX2dyYW50X3dyaXRlX2J5dGVzOwogCi0jaWZkZWYgWEZTX0xPR19UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSpsX2dyYW50X3RyYWNlOwotI2VuZGlmCi0KIAkvKiBUaGUgZm9sbG93aW5nIGZpZWxkIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmc7IG5lZWQgdG8gaG9sZCBpY2xvZ2xvY2sgKi8KICNpZmRlZiBERUJVRwogCWNoYXIJCQkqbF9pY2xvZ19iYWtbWExPR19NQVhfSUNMT0dTXTsKQEAgLTQ1NiwxMiArNDU0LDYgQEAKIAogZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfbG9nX3RpY2tldF96b25lOwogCi0vKiBpY2xvZyB0cmFjaW5nICovCi0jZGVmaW5lIFhMT0dfVFJBQ0VfR1JBQl9GTFVTSCAgMQotI2RlZmluZSBYTE9HX1RSQUNFX1JFTF9GTFVTSCAgIDIKLSNkZWZpbmUgWExPR19UUkFDRV9TTEVFUF9GTFVTSCAzCi0jZGVmaW5lIFhMT0dfVFJBQ0VfV0FLRV9GTFVTSCAgNAotCiAvKgogICogVW5tb3VudCByZWNvcmQgdHlwZSBpcyB1c2VkIGFzIGEgcHNldWRvIHRyYW5zYWN0aW9uIHR5cGUgZm9yIHRoZSB0aWNrZXQuCiAgKiBJdCdzIHZhbHVlIG11c3QgYmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgWEZTX1RSQU5TXyogdmFsdWVzLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDFlYzk4ZWQuLjY5YWMyZTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKICNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogU1RBVElDIGludAl4bG9nX2ZpbmRfemVyb2VkKHhsb2dfdCAqLCB4ZnNfZGFkZHJfdCAqKTsKIFNUQVRJQyBpbnQJeGxvZ19jbGVhcl9zdGFsZV9ibG9ja3MoeGxvZ190ICosIHhmc19sc25fdCk7CkBAIC0yMjUsMTYgKzIyNiwxMCBAQAogCXhmc19tb3VudF90CQkqbXAsCiAJeGxvZ19yZWNfaGVhZGVyX3QJKmhlYWQpCiB7Ci0JaW50CQkJYjsKLQotCWNtbl9lcnIoQ0VfREVCVUcsICIlczogIFNCIDogdXVpZCA9ICIsIF9fZnVuY19fKTsKLQlmb3IgKGIgPSAwOyBiIDwgMTY7IGIrKykKLQkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCAoKF9fdWludDhfdCAqKSZtcC0+bV9zYi5zYl91dWlkKVtiXSk7Ci0JY21uX2VycihDRV9ERUJVRywgIiwgZm10ID0gJWRcbiIsIFhMT0dfRk1UKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiICAgIGxvZyA6IHV1aWQgPSAiKTsKLQlmb3IgKGIgPSAwOyBiIDwgMTY7IGIrKykKLQkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCAoKF9fdWludDhfdCAqKSZoZWFkLT5oX2ZzX3V1aWQpW2JdKTsKLQljbW5fZXJyKENFX0RFQlVHLCAiLCBmbXQgPSAlZFxuIiwgYmUzMl90b19jcHUoaGVhZC0+aF9mbXQpKTsKKwljbW5fZXJyKENFX0RFQlVHLCAiJXM6ICBTQiA6IHV1aWQgPSAlcFUsIGZtdCA9ICVkXG4iLAorCQlfX2Z1bmNfXywgJm1wLT5tX3NiLnNiX3V1aWQsIFhMT0dfRk1UKTsKKwljbW5fZXJyKENFX0RFQlVHLCAiICAgIGxvZyA6IHV1aWQgPSAlcFUsIGZtdCA9ICVkXG4iLAorCQkmaGVhZC0+aF9mc191dWlkLCBiZTMyX3RvX2NwdShoZWFkLT5oX2ZtdCkpOwogfQogI2Vsc2UKICNkZWZpbmUgeGxvZ19oZWFkZXJfY2hlY2tfZHVtcChtcCwgaGVhZCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuYyBiL2ZzL3hmcy94ZnNfbW91bnQuYwppbmRleCA2NmE4ODhhLi5lYjQwM2I0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmMKKysrIGIvZnMveGZzL3hmc19tb3VudC5jCkBAIC00NCw2ICs0NCw4IEBACiAjaW5jbHVkZSAieGZzX3F1b3RhLmgiCiAjaW5jbHVkZSAieGZzX2Zzb3BzLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCisKIAogU1RBVElDIHZvaWQJeGZzX3VubW91bnRmc193YWl0KHhmc19tb3VudF90ICopOwogCkBAIC0yMzg5LDEyICsyMzkxLDEyIEBACiB7CiAJeGZzX2ljc2JfY250c190CSppY3NicDsKIAlsb25nIGxvbmcJbGNvdW50ZXI7CS8qIGxvbmcgY291bnRlciBmb3IgNjQgYml0IGZpZWxkcyAqLwotCWludAkJY3B1LCByZXQgPSAwOworCWludAkJcmV0ID0gMDsKIAogCW1pZ2h0X3NsZWVwKCk7CiBhZ2FpbjoKLQljcHUgPSBnZXRfY3B1KCk7Ci0JaWNzYnAgPSAoeGZzX2ljc2JfY250c190ICopcGVyX2NwdV9wdHIobXAtPm1fc2JfY250cywgY3B1KTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpY3NicCA9IHRoaXNfY3B1X3B0cihtcC0+bV9zYl9jbnRzKTsKIAogCS8qCiAJICogaWYgdGhlIGNvdW50ZXIgaXMgZGlzYWJsZWQsIGdvIHRvIHNsb3cgcGF0aApAQCAtMjQzOCwxMSArMjQ0MCwxMSBAQAogCQlicmVhazsKIAl9CiAJeGZzX2ljc2JfdW5sb2NrX2NudHIoaWNzYnApOwotCXB1dF9jcHUoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiAwOwogCiBzbG93X3BhdGg6Ci0JcHV0X2NwdSgpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAkvKgogCSAqIHNlcmlhbGlzZSB3aXRoIGEgbXV0ZXggc28gd2UgZG9uJ3QgYnVybiBsb3RzIG9mIGNwdSBvbgpAQCAtMjQ5MCw3ICsyNDkyLDcgQEAKIAogYmFsYW5jZV9jb3VudGVyOgogCXhmc19pY3NiX3VubG9ja19jbnRyKGljc2JwKTsKLQlwdXRfY3B1KCk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAogCS8qCiAJICogV2UgbWF5IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBoZXJlIGlmIG11bHRpcGxlIHBlci1jcHUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcXVvdGEuaCBiL2ZzL3hmcy94ZnNfcXVvdGEuaAppbmRleCAzZWM5MWFjLi45MWJmZDYwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3F1b3RhLmgKKysrIGIvZnMveGZzL3hmc19xdW90YS5oCkBAIC05Miw2ICs5MiwxNCBAQAogCiAjZGVmaW5lIFhGU19EUV9BTExUWVBFUwkJKFhGU19EUV9VU0VSfFhGU19EUV9QUk9KfFhGU19EUV9HUk9VUCkKIAorI2RlZmluZSBYRlNfRFFfRkxBR1MgXAorCXsgWEZTX0RRX1VTRVIsCQkiVVNFUiIgfSwgXAorCXsgWEZTX0RRX1BST0osCQkiUFJPSiIgfSwgXAorCXsgWEZTX0RRX0dST1VQLAkJIkdST1VQIiB9LCBcCisJeyBYRlNfRFFfRElSVFksCQkiRElSVFkiIH0sIFwKKwl7IFhGU19EUV9XQU5ULAkJIldBTlQiIH0sIFwKKwl7IFhGU19EUV9JTkFDVElWRSwJIklOQUNUSVZFIiB9CisKIC8qCiAgKiBJbiB0aGUgd29yc3QgY2FzZSwgd2hlbiBib3RoIHVzZXIgYW5kIGdyb3VwIHF1b3RhcyBhcmUgb24sCiAgKiB3ZSBjYW4gaGF2ZSBhIG1heCBvZiB0aHJlZSBkcXVvdHMgY2hhbmdpbmcgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3JlbmFtZS5jIGIvZnMveGZzL3hmc19yZW5hbWUuYwppbmRleCBiODFkZWVhLi5mYzFjZGEyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3JlbmFtZS5jCisrKyBiL2ZzL3hmcy94ZnNfcmVuYW1lLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKICNpbmNsdWRlICJ4ZnNfdHJhbnNfc3BhY2UuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmMgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwppbmRleCAzODVmNmRjLi45ZTE1YTExIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuYworKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3NwYWNlLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcncuYyBiL2ZzL3hmcy94ZnNfcncuYwppbmRleCA0YzE5OWQxLi41YWEwN2NhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J3LmMKKysrIGIvZnMveGZzL3hmc19ydy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX2J1Zl9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCiAgKiBUaGlzIGlzIGEgc3Vicm91dGluZSBmb3IgeGZzX3dyaXRlKCkgYW5kIG90aGVyIHdyaXRlcnMgKHhmc19pb2N0bCkKQEAgLTE3MSw3ICsxNzIsNiBAQAogCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgogCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KIAkgKi8KLQl4ZnNfYnVmdHJhY2UoIlhGUyBJT0VSUk9SIiwgYnApOwogCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CiAJLyoKIAkgKiBXZSdyZSBjYWxsaW5nIGJpb2RvbmUsIHNvIGRlbGV0ZSBCX0RPTkUgZmxhZy4gRWl0aGVyIHdheQpAQCAtMjA1LDcgKzIwNSw2IEBACiAJQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IHhmc19idWZfaW9kb25lX2NhbGxiYWNrcyk7CiAJQVNTRVJUKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApICE9IHhsb2dfaW9kb25lKTsKIAotCXhmc19idWZ0cmFjZSgiWEZTIElPRVJSRUxTRSIsIGJwKTsKIAlmbCA9IFhGU19CVUZfQkZMQUdTKGJwKTsKIAkvKgogCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IGEwNTc0ZjUuLmNhNjRmMzMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTEwMCw2ICsxMDAsNDkgQEAKICNkZWZpbmUJWEZTX1RSQU5TX1RZUEVfTUFYCQk0MQogLyogbmV3IHRyYW5zYWN0aW9uIHR5cGVzIG5lZWQgdG8gYmUgcmVmbGVjdGVkIGluIHhmc19sb2dwcmludCg4KSAqLwogCisjZGVmaW5lIFhGU19UUkFOU19UWVBFUyBcCisJeyBYRlNfVFJBTlNfU0VUQVRUUl9OT1RfU0laRSwJIlNFVEFUVFJfTk9UX1NJWkUiIH0sIFwKKwl7IFhGU19UUkFOU19TRVRBVFRSX1NJWkUsCSJTRVRBVFRSX1NJWkUiIH0sIFwKKwl7IFhGU19UUkFOU19JTkFDVElWRSwJCSJJTkFDVElWRSIgfSwgXAorCXsgWEZTX1RSQU5TX0NSRUFURSwJCSJDUkVBVEUiIH0sIFwKKwl7IFhGU19UUkFOU19DUkVBVEVfVFJVTkMsCSJDUkVBVEVfVFJVTkMiIH0sIFwKKwl7IFhGU19UUkFOU19UUlVOQ0FURV9GSUxFLAkiVFJVTkNBVEVfRklMRSIgfSwgXAorCXsgWEZTX1RSQU5TX1JFTU9WRSwJCSJSRU1PVkUiIH0sIFwKKwl7IFhGU19UUkFOU19MSU5LLAkJIkxJTksiIH0sIFwKKwl7IFhGU19UUkFOU19SRU5BTUUsCQkiUkVOQU1FIiB9LCBcCisJeyBYRlNfVFJBTlNfTUtESVIsCQkiTUtESVIiIH0sIFwKKwl7IFhGU19UUkFOU19STURJUiwJCSJSTURJUiIgfSwgXAorCXsgWEZTX1RSQU5TX1NZTUxJTkssCQkiU1lNTElOSyIgfSwgXAorCXsgWEZTX1RSQU5TX1NFVF9ETUFUVFJTLAkiU0VUX0RNQVRUUlMiIH0sIFwKKwl7IFhGU19UUkFOU19HUk9XRlMsCQkiR1JPV0ZTIiB9LCBcCisJeyBYRlNfVFJBTlNfU1RSQVRfV1JJVEUsCSJTVFJBVF9XUklURSIgfSwgXAorCXsgWEZTX1RSQU5TX0RJT1NUUkFULAkJIkRJT1NUUkFUIiB9LCBcCisJeyBYRlNfVFJBTlNfV1JJVEVJRCwJCSJXUklURUlEIiB9LCBcCisJeyBYRlNfVFJBTlNfQUREQUZPUkssCQkiQUREQUZPUksiIH0sIFwKKwl7IFhGU19UUkFOU19BVFRSSU5WQUwsCQkiQVRUUklOVkFMIiB9LCBcCisJeyBYRlNfVFJBTlNfQVRSVU5DQVRFLAkJIkFUUlVOQ0FURSIgfSwgXAorCXsgWEZTX1RSQU5TX0FUVFJfU0VULAkJIkFUVFJfU0VUIiB9LCBcCisJeyBYRlNfVFJBTlNfQVRUUl9STSwJCSJBVFRSX1JNIiB9LCBcCisJeyBYRlNfVFJBTlNfQVRUUl9GTEFHLAkJIkFUVFJfRkxBRyIgfSwgXAorCXsgWEZTX1RSQU5TX0NMRUFSX0FHSV9CVUNLRVQsCSJDTEVBUl9BR0lfQlVDS0VUIiB9LCBcCisJeyBYRlNfVFJBTlNfUU1fU0JDSEFOR0UsCSJRTV9TQkNIQU5HRSIgfSwgXAorCXsgWEZTX1RSQU5TX1FNX1FVT1RBT0ZGLAkiUU1fUVVPVEFPRkYiIH0sIFwKKwl7IFhGU19UUkFOU19RTV9EUUFMTE9DLAkJIlFNX0RRQUxMT0MiIH0sIFwKKwl7IFhGU19UUkFOU19RTV9TRVRRTElNLAkJIlFNX1NFVFFMSU0iIH0sIFwKKwl7IFhGU19UUkFOU19RTV9EUUNMVVNURVIsCSJRTV9EUUNMVVNURVIiIH0sIFwKKwl7IFhGU19UUkFOU19RTV9RSU5PQ1JFQVRFLAkiUU1fUUlOT0NSRUFURSIgfSwgXAorCXsgWEZTX1RSQU5TX1FNX1FVT1RBT0ZGX0VORCwJIlFNX1FPRkZfRU5EIiB9LCBcCisJeyBYRlNfVFJBTlNfU0JfVU5JVCwJCSJTQl9VTklUIiB9LCBcCisJeyBYRlNfVFJBTlNfRlNZTkNfVFMsCQkiRlNZTkNfVFMiIH0sIFwKKwl7IFhGU19UUkFOU19HUk9XRlNSVF9BTExPQywJIkdST1dGU1JUX0FMTE9DIiB9LCBcCisJeyBYRlNfVFJBTlNfR1JPV0ZTUlRfWkVSTywJIkdST1dGU1JUX1pFUk8iIH0sIFwKKwl7IFhGU19UUkFOU19HUk9XRlNSVF9GUkVFLAkiR1JPV0ZTUlRfRlJFRSIgfSwgXAorCXsgWEZTX1RSQU5TX1NXQVBFWFQsCQkiU1dBUEVYVCIgfSwgXAorCXsgWEZTX1RSQU5TX1NCX0NPVU5ULAkJIlNCX0NPVU5UIiB9LCBcCisJeyBYRlNfVFJBTlNfRFVNTVkxLAkJIkRVTU1ZMSIgfSwgXAorCXsgWEZTX1RSQU5TX0RVTU1ZMiwJCSJEVU1NWTIiIH0sIFwKKwl7IFhMT0dfVU5NT1VOVF9SRUNfVFlQRSwJIlVOTU9VTlQiIH0KKwogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gdHJhY2sgbG9nIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aAogICogYSB0cmFuc2FjdGlvbi4gIEl0IHBvaW50cyB0byB0aGUgbG9nIGl0ZW0gYW5kIGtlZXBzIHNvbWUKQEAgLTc4Miw2ICs4MjUsMTAgQEAKICNkZWZpbmUJWEZTX0xJX0lOX0FJTAkweDEKICNkZWZpbmUgWEZTX0xJX0FCT1JURUQJMHgyCiAKKyNkZWZpbmUgWEZTX0xJX0ZMQUdTIFwKKwl7IFhGU19MSV9JTl9BSUwsCSJJTl9BSUwiIH0sIFwKKwl7IFhGU19MSV9BQk9SVEVELAkiQUJPUlRFRCIgfQorCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaXRlbV9vcHMgewogCXVpbnQgKCppb3Bfc2l6ZSkoeGZzX2xvZ19pdGVtX3QgKik7CiAJdm9pZCAoKmlvcF9mb3JtYXQpKHhmc19sb2dfaXRlbV90ICosIHN0cnVjdCB4ZnNfbG9nX2lvdmVjICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggMDNhMWY3MC4uNDkxMzA2MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfcncuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogCiBTVEFUSUMgeGZzX2J1Zl90ICp4ZnNfdHJhbnNfYnVmX2l0ZW1fbWF0Y2goeGZzX3RyYW5zX3QgKiwgeGZzX2J1ZnRhcmdfdCAqLApAQCAtOTUsMjYgKzk2LDIzIEBACiAJfQogCWlmIChicCAhPSBOVUxMKSB7CiAJCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA8PSAwKTsKLQkJaWYgKFhGU19GT1JDRURfU0hVVERPV04odHAtPnRfbW91bnRwKSkgewotCQkJeGZzX2J1ZnRyYWNlKCJUUkFOUyBHRVQgUkVDVVIgU0hVVCIsIGJwKTsKKwkJaWYgKFhGU19GT1JDRURfU0hVVERPV04odHAtPnRfbW91bnRwKSkKIAkJCVhGU19CVUZfU1VQRVJfU1RBTEUoYnApOwotCQl9CisKIAkJLyoKIAkJICogSWYgdGhlIGJ1ZmZlciBpcyBzdGFsZSB0aGVuIGl0IHdhcyBiaW52YWwnZWQKIAkJICogc2luY2UgbGFzdCByZWFkLiAgVGhpcyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGUKIAkJICogY2FsbGVyIGlzbid0IGFsbG93ZWQgdG8gdXNlIHRoZSBkYXRhIGFueXdheS4KIAkJICovCi0JCWVsc2UgaWYgKFhGU19CVUZfSVNTVEFMRShicCkpIHsKLQkJCXhmc19idWZ0cmFjZSgiVFJBTlMgR0VUIFJFQ1VSIFNUQUxFIiwgYnApOworCQllbHNlIGlmIChYRlNfQlVGX0lTU1RBTEUoYnApKQogCQkJQVNTRVJUKCFYRlNfQlVGX0lTREVMQVlXUklURShicCkpOwotCQl9CisKIAkJQVNTRVJUKFhGU19CVUZfRlNQUklWQVRFMihicCwgeGZzX3RyYW5zX3QgKikgPT0gdHApOwogCQliaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90ICopOwogCQlBU1NFUlQoYmlwICE9IE5VTEwpOwogCQlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwogCQliaXAtPmJsaV9yZWN1cisrOwotCQl4ZnNfYnVmdHJhY2UoIlRSQU5TIEdFVCBSRUNVUiIsIGJwKTsKLQkJeGZzX2J1Zl9pdGVtX3RyYWNlKCJHRVQgUkVDVVIiLCBiaXApOworCQl0cmFjZV94ZnNfdHJhbnNfZ2V0X2J1Zl9yZWN1cihiaXApOwogCQlyZXR1cm4gKGJwKTsKIAl9CiAKQEAgLTE2Niw4ICsxNjQsNyBAQAogCSAqLwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIHRwKTsKIAotCXhmc19idWZ0cmFjZSgiVFJBTlMgR0VUIiwgYnApOwotCXhmc19idWZfaXRlbV90cmFjZSgiR0VUIiwgYmlwKTsKKwl0cmFjZV94ZnNfdHJhbnNfZ2V0X2J1ZihiaXApOwogCXJldHVybiAoYnApOwogfQogCkBAIC0yMDcsNyArMjA0LDcgQEAKIAkJQVNTRVJUKGJpcCAhPSBOVUxMKTsKIAkJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKIAkJYmlwLT5ibGlfcmVjdXIrKzsKLQkJeGZzX2J1Zl9pdGVtX3RyYWNlKCJHRVRTQiBSRUNVUiIsIGJpcCk7CisJCXRyYWNlX3hmc190cmFuc19nZXRzYl9yZWN1cihiaXApOwogCQlyZXR1cm4gKGJwKTsKIAl9CiAKQEAgLTI0OSw3ICsyNDYsNyBAQAogCSAqLwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIHRwKTsKIAotCXhmc19idWZfaXRlbV90cmFjZSgiR0VUU0IiLCBiaXApOworCXRyYWNlX3hmc190cmFuc19nZXRzYihiaXApOwogCXJldHVybiAoYnApOwogfQogCkBAIC0zNDcsNyArMzQ0LDcgQEAKIAkJQVNTRVJUKFhGU19CVUZfRlNQUklWQVRFKGJwLCB2b2lkICopICE9IE5VTEwpOwogCQlBU1NFUlQoKFhGU19CVUZfSVNFUlJPUihicCkpID09IDApOwogCQlpZiAoIShYRlNfQlVGX0lTRE9ORShicCkpKSB7Ci0JCQl4ZnNfYnVmdHJhY2UoIlJFQURfQlVGX0lOQ09SRSAhRE9ORSIsIGJwKTsKKwkJCXRyYWNlX3hmc190cmFuc19yZWFkX2J1Zl9pbyhicCwgX1JFVF9JUF8pOwogCQkJQVNTRVJUKCFYRlNfQlVGX0lTQVNZTkMoYnApKTsKIAkJCVhGU19CVUZfUkVBRChicCk7CiAJCQl4ZnNiZHN0cmF0KHRwLT50X21vdW50cCwgYnApOwpAQCAtMzcyLDcgKzM2OSw3IEBACiAJCSAqIGJyZWxzZSBpdCBlaXRoZXIuIEp1c3QgZ2V0IG91dC4KIAkJICovCiAJCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewotCQkJeGZzX2J1ZnRyYWNlKCJSRUFEX0JVRl9JTkNPUkUgWEZTU0hVVEROIiwgYnApOworCQkJdHJhY2VfeGZzX3RyYW5zX3JlYWRfYnVmX3NodXQoYnAsIF9SRVRfSVBfKTsKIAkJCSpicHAgPSBOVUxMOwogCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQl9CkBAIC0zODIsNyArMzc5LDcgQEAKIAkJYmlwLT5ibGlfcmVjdXIrKzsKIAogCQlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwotCQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIlJFQUQgUkVDVVIiLCBiaXApOworCQl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWZfcmVjdXIoYmlwKTsKIAkJKmJwcCA9IGJwOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00MDIsNyArMzk5LDYgQEAKIAl9CiAJaWYgKFhGU19CVUZfR0VURVJST1IoYnApICE9IDApIHsKIAkgICAgWEZTX0JVRl9TVVBFUl9TVEFMRShicCk7Ci0JCXhmc19idWZ0cmFjZSgiUkVBRCBFUlJPUiIsIGJwKTsKIAkJZXJyb3IgPSBYRlNfQlVGX0dFVEVSUk9SKGJwKTsKIAogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGZzX3RyYW5zX3JlYWRfYnVmIiwgbXAsCkBAIC00NjEsOCArNDU3LDcgQEAKIAkgKi8KIAlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCB0cCk7CiAKLQl4ZnNfYnVmdHJhY2UoIlRSQU5TIFJFQUQiLCBicCk7Ci0JeGZzX2J1Zl9pdGVtX3RyYWNlKCJSRUFEIiwgYmlwKTsKKwl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWYoYmlwKTsKIAkqYnBwID0gYnA7CiAJcmV0dXJuIDA7CiAKQEAgLTQ4MCw3ICs0NzUsNyBAQAogCUFTU0VSVCgoWEZTX0JVRl9CRkxBR1MoYnApICYgKFhGU19CX1NUQUxFfFhGU19CX0RFTFdSSSkpICE9CiAJCQkJCQkoWEZTX0JfU1RBTEV8WEZTX0JfREVMV1JJKSk7CiAKLQl4ZnNfYnVmdHJhY2UoIlJFQURfQlVGIFhGU1NIVVRETiIsIGJwKTsKKwl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWZfc2h1dChicCwgX1JFVF9JUF8pOwogCXhmc19idWZfcmVsc2UoYnApOwogCSpicHAgPSBOVUxMOwogCXJldHVybiBYRlNfRVJST1IoRUlPKTsKQEAgLTU0NiwxMyArNTQxLDE0IEBACiAJbGlkcCA9IHhmc190cmFuc19maW5kX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCopYmlwKTsKIAlBU1NFUlQobGlkcCAhPSBOVUxMKTsKIAorCXRyYWNlX3hmc190cmFuc19icmVsc2UoYmlwKTsKKwogCS8qCiAJICogSWYgdGhlIHJlbGVhc2UgaXMganVzdCBmb3IgYSByZWN1cnNpdmUgbG9jaywKIAkgKiB0aGVuIGRlY3JlbWVudCB0aGUgY291bnQgYW5kIHJldHVybi4KIAkgKi8KIAlpZiAoYmlwLT5ibGlfcmVjdXIgPiAwKSB7CiAJCWJpcC0+YmxpX3JlY3VyLS07Ci0JCXhmc19idWZfaXRlbV90cmFjZSgiUkVMU0UgUkVDVVIiLCBiaXApOwogCQlyZXR1cm47CiAJfQogCkBAIC01NjAsMTAgKzU1Niw4IEBACiAJICogSWYgdGhlIGJ1ZmZlciBpcyBkaXJ0eSB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbiwgd2UgY2FuJ3QKIAkgKiByZWxlYXNlIGl0IHVudGlsIHdlIGNvbW1pdC4KIAkgKi8KLQlpZiAobGlkcC0+bGlkX2ZsYWdzICYgWEZTX0xJRF9ESVJUWSkgewotCQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIlJFTFNFIERJUlRZIiwgYmlwKTsKKwlpZiAobGlkcC0+bGlkX2ZsYWdzICYgWEZTX0xJRF9ESVJUWSkKIAkJcmV0dXJuOwotCX0KIAogCS8qCiAJICogSWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBpbnZhbGlkYXRlZCwgdGhlbiB3ZSBjYW4ndCByZWxlYXNlCkBAIC01NzEsMTMgKzU2NSwxMCBAQAogCSAqIGFzIHBhcnQgb2YgdGhpcyB0cmFuc2FjdGlvbi4gIFRoaXMgcHJldmVudHMgdXMgZnJvbSBwdWxsaW5nCiAJICogdGhlIGl0ZW0gZnJvbSB0aGUgQUlMIGJlZm9yZSB3ZSBzaG91bGQuCiAJICovCi0JaWYgKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkgewotCQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIlJFTFNFIFNUQUxFIiwgYmlwKTsKKwlpZiAoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKQogCQlyZXR1cm47Ci0JfQogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkpOwotCXhmc19idWZfaXRlbV90cmFjZSgiUkVMU0UiLCBiaXApOwogCiAJLyoKIAkgKiBGcmVlIHVwIHRoZSBsb2cgaXRlbSBkZXNjcmlwdG9yIHRyYWNraW5nIHRoZSByZWxlYXNlZCBpdGVtLgpAQCAtNjc0LDcgKzY2NSw3IEBACiAJICovCiAJWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgdHApOwogCi0JeGZzX2J1Zl9pdGVtX3RyYWNlKCJCSk9JTiIsIGJpcCk7CisJdHJhY2VfeGZzX3RyYW5zX2Jqb2luKGJpcCk7CiB9CiAKIC8qCkBAIC02OTgsNyArNjg5LDcgQEAKIAlBU1NFUlQoIShiaXAtPmJsaV9mb3JtYXQuYmxmX2ZsYWdzICYgWEZTX0JMSV9DQU5DRUwpKTsKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwogCWJpcC0+YmxpX2ZsYWdzIHw9IFhGU19CTElfSE9MRDsKLQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIkJIT0xEIiwgYmlwKTsKKwl0cmFjZV94ZnNfdHJhbnNfYmhvbGQoYmlwKTsKIH0KIAogLyoKQEAgLTcyMSw3ICs3MTIsOCBAQAogCUFTU0VSVChhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpID4gMCk7CiAJQVNTRVJUKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9IT0xEKTsKIAliaXAtPmJsaV9mbGFncyAmPSB+WEZTX0JMSV9IT0xEOwotCXhmc19idWZfaXRlbV90cmFjZSgiQkhPTEQgUkVMRUFTRSIsIGJpcCk7CisKKwl0cmFjZV94ZnNfdHJhbnNfYmhvbGRfcmVsZWFzZShiaXApOwogfQogCiAvKgpAQCAtNzY3LDYgKzc1OSw4IEBACiAJWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIHhmc19idWZfaW9kb25lX2NhbGxiYWNrcyk7CiAJYmlwLT5ibGlfaXRlbS5saV9jYiA9ICh2b2lkKCopKHhmc19idWZfdCoseGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2lvZG9uZTsKIAorCXRyYWNlX3hmc190cmFuc19sb2dfYnVmKGJpcCk7CisKIAkvKgogCSAqIElmIHdlIGludmFsaWRhdGVkIHRoZSBidWZmZXIgd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24sIHRoZW4KIAkgKiBjYW5jZWwgdGhlIGludmFsaWRhdGlvbiBub3cgdGhhdCB3ZSdyZSBkaXJ0eWluZyB0aGUgYnVmZmVyCkBAIC03NzQsNyArNzY4LDYgQEAKIAkgKiBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciB0aGlzIGVudGlyZSB0aW1lLgogCSAqLwogCWlmIChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpIHsKLQkJeGZzX2J1Zl9pdGVtX3RyYWNlKCJCTE9HIFVOU1RBTEUiLCBiaXApOwogCQliaXAtPmJsaV9mbGFncyAmPSB+WEZTX0JMSV9TVEFMRTsKIAkJQVNTRVJUKFhGU19CVUZfSVNTVEFMRShicCkpOwogCQlYRlNfQlVGX1VOU1RBTEUoYnApOwpAQCAtNzg5LDcgKzc4Miw2IEBACiAJbGlkcC0+bGlkX2ZsYWdzICY9IH5YRlNfTElEX0JVRl9TVEFMRTsKIAliaXAtPmJsaV9mbGFncyB8PSBYRlNfQkxJX0xPR0dFRDsKIAl4ZnNfYnVmX2l0ZW1fbG9nKGJpcCwgZmlyc3QsIGxhc3QpOwotCXhmc19idWZfaXRlbV90cmFjZSgiQkxPRyIsIGJpcCk7CiB9CiAKIApAQCAtODI4LDYgKzgyMCw4IEBACiAJQVNTRVJUKGxpZHAgIT0gTlVMTCk7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKIAorCXRyYWNlX3hmc190cmFuc19iaW52YWwoYmlwKTsKKwogCWlmIChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpIHsKIAkJLyoKIAkJICogSWYgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGludmFsaWRhdGVkLCB0aGVuCkBAIC04NDAsOCArODM0LDYgQEAKIAkJQVNTRVJUKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCk7CiAJCUFTU0VSVChsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKTsKIAkJQVNTRVJUKHRwLT50X2ZsYWdzICYgWEZTX1RSQU5TX0RJUlRZKTsKLQkJeGZzX2J1ZnRyYWNlKCJYRlNfQklOVkFMIFJFQ1VSIiwgYnApOwotCQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIkJJTlZBTCBSRUNVUiIsIGJpcCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg3NSw4ICs4NjcsNiBAQAogCSAgICAgIChiaXAtPmJsaV9mb3JtYXQuYmxmX21hcF9zaXplICogc2l6ZW9mKHVpbnQpKSk7CiAJbGlkcC0+bGlkX2ZsYWdzIHw9IFhGU19MSURfRElSVFl8WEZTX0xJRF9CVUZfU1RBTEU7CiAJdHAtPnRfZmxhZ3MgfD0gWEZTX1RSQU5TX0RJUlRZOwotCXhmc19idWZ0cmFjZSgiWEZTX0JJTlZBTCIsIGJwKTsKLQl4ZnNfYnVmX2l0ZW1fdHJhY2UoIkJJTlZBTCIsIGJpcCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggNTc4ZjNmNS4uNjU1OGZmZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgInhmc19sb2dfcHJpdi5oIgogI2luY2x1ZGUgInhmc19maWxlc3RyZWFtLmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIGludAogeGZzX3NldGF0dHIoCkBAIC0xMzk3LDcgKzEzOTgsNiBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZV9uYW1lOwogCi0JeGZzX2l0cmFjZV9yZWYoKmlwcCk7CiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX25hbWU6CkBAIC0xNTQzLDcgKzE1NDMsNiBAQAogCSAqIEF0IHRoaXMgcG9pbnQsIHdlJ3ZlIGdvdHRlbiBhIG5ld2x5IGFsbG9jYXRlZCBpbm9kZS4KIAkgKiBJdCBpcyBsb2NrZWQgKGFuZCBqb2luZWQgdG8gdGhlIHRyYW5zYWN0aW9uKS4KIAkgKi8KLQl4ZnNfaXRyYWNlX3JlZihpcCk7CiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CiAKIAkvKgpAQCAtMjAwMyw5ICsyMDAyLDYgQEAKIAlpZiAoIWlzX2RpciAmJiBsaW5rX3plcm8gJiYgeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oaXApKQogCQl4ZnNfZmlsZXN0cmVhbV9kZWFzc29jaWF0ZShpcCk7CiAKLQl4ZnNfaXRyYWNlX2V4aXQoaXApOwotCXhmc19pdHJhY2VfZXhpdChkcCk7Ci0KICBzdGRfcmV0dXJuOgogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUUkVNT1ZFKSkgewogCQlYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RSRU1PVkUsIGRwLCBETV9SSUdIVF9OVUxMLApAQCAtMjMwMiw3ICsyMjk4LDYgQEAKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQlnb3RvIGVycm9yMTsKIAl9Ci0JeGZzX2l0cmFjZV9yZWYoaXApOwogCiAJLyoKIAkgKiBBbiBlcnJvciBhZnRlciB3ZSd2ZSBqb2luZWQgZHAgdG8gdGhlIHRyYW5zYWN0aW9uIHdpbGwgcmVzdWx0IGluIHRoZQpAQCAtMjg0NSw3ICsyODQwLDYgQEAKIAlpb2Zmc2V0ID0gb2Zmc2V0ICYgfihyb3VuZGluZyAtIDEpOwogCiAJaWYgKFZOX0NBQ0hFRChWRlNfSShpcCkpICE9IDApIHsKLQkJeGZzX2ludmFsX2NhY2hlZF90cmFjZShpcCwgaW9mZnNldCwgLTEsIGlvZmZzZXQsIC0xKTsKIAkJZXJyb3IgPSB4ZnNfZmx1c2hpbnZhbF9wYWdlcyhpcCwgaW9mZnNldCwgLTEsIEZJX1JFTUFQRl9MT0NLRUQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF91bmxvY2tfaW9sb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmggYi9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaAppbmRleCA1YzgyM2Q1Li5kODE0ZGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNvdXRwdXQuaApAQCAtODUsNyArODUsOCBAQAogI2RlZmluZSBBQ1BJX0xWX0lOSVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBQ1BJX0xWX0RFQlVHX09CSkVDVCAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBBQ1BJX0xWX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBQ1BJX0xWX1JFUEFJUiAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBQ1BJX0xWX0FMTF9FWENFUFRJT05TICAgICAgMHgwMDAwMDAwRgogCiAvKiBUcmFjZSB2ZXJib3NpdHkgbGV2ZWwgMSBbU3RhbmRhcmQgVHJhY2UgTGV2ZWxdICovCiAKQEAgLTE0Myw2ICsxNDQsNyBAQAogI2RlZmluZSBBQ1BJX0RCX0lOSVQgICAgICAgICAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9JTklUKQogI2RlZmluZSBBQ1BJX0RCX0RFQlVHX09CSkVDVCAgICAgICAgQUNQSV9ERUJVR19MRVZFTCAoQUNQSV9MVl9ERUJVR19PQkpFQ1QpCiAjZGVmaW5lIEFDUElfREJfSU5GTyAgICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX0lORk8pCisjZGVmaW5lIEFDUElfREJfUkVQQUlSICAgICAgICAgICAgICBBQ1BJX0RFQlVHX0xFVkVMIChBQ1BJX0xWX1JFUEFJUikKICNkZWZpbmUgQUNQSV9EQl9BTExfRVhDRVBUSU9OUyAgICAgIEFDUElfREVCVUdfTEVWRUwgKEFDUElfTFZfQUxMX0VYQ0VQVElPTlMpCiAKIC8qIFRyYWNlIGxldmVsIC0tIGFsc28gdXNlZCBpbiB0aGUgZ2xvYmFsICJEZWJ1Z0xldmVsIiAqLwpAQCAtMTc0LDggKzE3Niw4IEBACiAKIC8qIERlZmF1bHRzIGZvciBkZWJ1Z19sZXZlbCwgZGVidWcgYW5kIG5vcm1hbCAqLwogCi0jZGVmaW5lIEFDUElfREVCVUdfREVGQVVMVCAgICAgICAgICAoQUNQSV9MVl9JTkZPKQotI2RlZmluZSBBQ1BJX05PUk1BTF9ERUZBVUxUICAgICAgICAgKEFDUElfTFZfSU5JVCB8IEFDUElfTFZfREVCVUdfT0JKRUNUKQorI2RlZmluZSBBQ1BJX0RFQlVHX0RFRkFVTFQgICAgICAgICAgKEFDUElfTFZfSU5GTyB8IEFDUElfTFZfUkVQQUlSKQorI2RlZmluZSBBQ1BJX05PUk1BTF9ERUZBVUxUICAgICAgICAgKEFDUElfTFZfSU5JVCB8IEFDUElfTFZfREVCVUdfT0JKRUNUIHwgQUNQSV9MVl9SRVBBSVIpCiAjZGVmaW5lIEFDUElfREVCVUdfQUxMICAgICAgICAgICAgICAoQUNQSV9MVl9BTUxfRElTQVNTRU1CTEUgfCBBQ1BJX0xWX0FMTF9FWENFUFRJT05TIHwgQUNQSV9MVl9BTEwpCiAKICNpZiBkZWZpbmVkIChBQ1BJX0RFQlVHX09VVFBVVCkgfHwgIWRlZmluZWQgKEFDUElfTk9fRVJST1JfTUVTU0FHRVMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggNWUxYWQzYy4uODZlOTczNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAwOTExMTIKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDkxMjE0CiAKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAjaW5jbHVkZSAiYWN0YmwuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCA4YjY2OGVhLi4yOTI0NWM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0yOTQsNyArMjk0LDcgQEAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIHZvaWQgYWNwaV9wcm9jZXNzb3JfcHBjX2luaXQodm9pZCk7CiB2b2lkIGFjcGlfcHJvY2Vzc29yX3BwY19leGl0KHZvaWQpOwotaW50IGFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKK2ludCBhY3BpX3Byb2Nlc3Nvcl9wcGNfaGFzX2NoYW5nZWQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwgaW50IGV2ZW50X2ZsYWcpOwogZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfYmlvc19saW1pdChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgKmxpbWl0KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9wcm9jZXNzb3JfcHBjX2luaXQodm9pZCkKQEAgLTMwNSw3ICszMDUsOCBAQAogewogCXJldHVybjsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IGFjcGlfcHJvY2Vzc29yX3BwY19oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9wcm9jZXNzb3JfcHBjX2hhc19jaGFuZ2VkKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCisJCQkJCQkJCWludCBldmVudF9mbGFnKQogewogCXN0YXRpYyB1bnNpZ25lZCBpbnQgcHJpbnRvdXQgPSAxOwogCWlmIChwcmludG91dCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaAppbmRleCBjODk0NjQ2Li5lY2M0NGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaApAQCAtMTUsMTkgKzE1LDE5IEBACiAjICBkZWZpbmUgQVRPTUlDX0hBU0hfU0laRSA0CiAjICBkZWZpbmUgQVRPTUlDX0hBU0goYSkgKCYoX19hdG9taWNfaGFzaFsgKCgodW5zaWduZWQgbG9uZykgYSkvTDFfQ0FDSEVfQllURVMpICYgKEFUT01JQ19IQVNIX1NJWkUtMSkgXSkpCiAKLWV4dGVybiByYXdfc3BpbmxvY2tfdCBfX2F0b21pY19oYXNoW0FUT01JQ19IQVNIX1NJWkVdIF9fbG9ja19hbGlnbmVkOworZXh0ZXJuIGFyY2hfc3BpbmxvY2tfdCBfX2F0b21pY19oYXNoW0FUT01JQ19IQVNIX1NJWkVdIF9fbG9ja19hbGlnbmVkOwogCiAvKiBDYW4ndCB1c2UgcmF3X3NwaW5fbG9ja19pcnEgYmVjYXVzZSBvZiAjaW5jbHVkZSBwcm9ibGVtcywgc28KICAqIHRoaXMgaXMgdGhlIHN1YnN0aXR1dGUgKi8KICNkZWZpbmUgX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZShsLGYpIGRvIHsJXAotCXJhd19zcGlubG9ja190ICpzID0gQVRPTUlDX0hBU0gobCk7CVwKKwlhcmNoX3NwaW5sb2NrX3QgKnMgPSBBVE9NSUNfSEFTSChsKTsJXAogCWxvY2FsX2lycV9zYXZlKGYpOwkJCVwKLQlfX3Jhd19zcGluX2xvY2socyk7CQkJXAorCWFyY2hfc3Bpbl9sb2NrKHMpOwkJCVwKIH0gd2hpbGUoMCkKIAogI2RlZmluZSBfYXRvbWljX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobCxmKSBkbyB7CVwKLQlyYXdfc3BpbmxvY2tfdCAqcyA9IEFUT01JQ19IQVNIKGwpOwkJXAotCV9fcmF3X3NwaW5fdW5sb2NrKHMpOwkJCQlcCisJYXJjaF9zcGlubG9ja190ICpzID0gQVRPTUlDX0hBU0gobCk7CQlcCisJYXJjaF9zcGluX3VubG9jayhzKTsJCQkJXAogCWxvY2FsX2lycV9yZXN0b3JlKGYpOwkJCQlcCiB9IHdoaWxlKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IDRiNjc1NTkuLjE4YzQzNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtMTEzLDIyICsxMTMsMjIgQEAKICNlbmRpZgogCiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pCSh7CQkJCVwKLQlzdGF0aWMgaW50IF9fd2FybmVkOwkJCQkJXAorCXN0YXRpYyBib29sIF9fd2FybmVkOwkJCQkJXAogCWludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kaXRpb24pOwkJCVwKIAkJCQkJCQkJXAogCWlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UpKQkJCQlcCiAJCWlmIChXQVJOX09OKCFfX3dhcm5lZCkpIAkJCVwKLQkJCV9fd2FybmVkID0gMTsJCQkJXAorCQkJX193YXJuZWQgPSB0cnVlOwkJCVwKIAl1bmxpa2VseShfX3JldF93YXJuX29uY2UpOwkJCQlcCiB9KQogCiAjZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLikJKHsJCQlcCi0Jc3RhdGljIGludCBfX3dhcm5lZDsJCQkJCVwKKwlzdGF0aWMgYm9vbCBfX3dhcm5lZDsJCQkJCVwKIAlpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZGl0aW9uKTsJCQlcCiAJCQkJCQkJCVwKIAlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKSkJCQkJXAogCQlpZiAoV0FSTighX193YXJuZWQsIGZvcm1hdCkpIAkJCVwKLQkJCV9fd2FybmVkID0gMTsJCQkJXAorCQkJX193YXJuZWQgPSB0cnVlOwkJCVwKIAl1bmxpa2VseShfX3JldF93YXJuX29uY2UpOwkJCQlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggNjgxZGRmMy4uZmNkMjY4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtNTEsNyArNTEsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBCZWZvcmUgTGludXggMi42LjMyIG9ubHkgT19EU1lOQyBzZW1hbnRpY3Mgd2VyZSBpbXBsZW1lbnRlZCwgYnV0IHVzaW5nCisgKiBCZWZvcmUgTGludXggMi42LjMzIG9ubHkgT19EU1lOQyBzZW1hbnRpY3Mgd2VyZSBpbXBsZW1lbnRlZCwgYnV0IHVzaW5nCiAgKiB0aGUgT19TWU5DIGZsYWcuICBXZSBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIG51bWVyaWNhbCB2YWx1ZQogICogZm9yIE9fRFNZTkMgc2VtYW50aWNzIG5vdywgYnV0IHVzaW5nIHRoZSBjb3JyZWN0IHN5bWJvbGljIG5hbWUgZm9yIGl0LgogICogVGhpcyBuZXcgdmFsdWUgaXMgdXNlZCB0byByZXF1ZXN0IHRydWUgUG9zaXggT19TWU5DIHNlbWFudGljcy4gIEl0IGlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDY2ZDYxMDYuLjQ4NWVlYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0yOCw2ICsyOCw3IEBACiAJcmV0dXJuICgodW5zaWduZWQpbnVtYmVyKSA8IEFSQ0hfTlJfR1BJT1M7CiB9CiAKK3N0cnVjdCBkZXZpY2U7CiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBzdHJ1Y3QgbW9kdWxlOwogCkBAIC0xNDQsNiArMTQ1LDcgQEAKIGV4dGVybiBpbnQgZ3Bpb19leHBvcnQodW5zaWduZWQgZ3BpbywgYm9vbCBkaXJlY3Rpb25fbWF5X2NoYW5nZSk7CiBleHRlcm4gaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQkJdW5zaWduZWQgZ3Bpbyk7CitleHRlcm4gaW50IGdwaW9fc3lzZnNfc2V0X2FjdGl2ZV9sb3codW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKIGV4dGVybiB2b2lkIGdwaW9fdW5leHBvcnQodW5zaWduZWQgZ3Bpbyk7CiAKICNlbmRpZgkvKiBDT05GSUdfR1BJT19TWVNGUyAqLwpAQCAtMTgxLDYgKzE4Myw4IEBACiAKICNpZm5kZWYgQ09ORklHX0dQSU9fU1lTRlMKIAorc3RydWN0IGRldmljZTsKKwogLyogc3lzZnMgc3VwcG9ydCBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIGdwaW9saWIsIHdoZXJlIGl0J3Mgb3B0aW9uYWwgKi8KIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19leHBvcnQodW5zaWduZWQgZ3BpbywgYm9vbCBkaXJlY3Rpb25fbWF5X2NoYW5nZSkKQEAgLTE5NCw2ICsxOTgsMTEgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZ3Bpb19zeXNmc19zZXRfYWN0aXZlX2xvdyh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3VuZXhwb3J0KHVuc2lnbmVkIGdwaW8pCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKaW5kZXggNWVlMTNiMi4uM2RhOWUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaApAQCAtMTksNiArMTksMTEgQEAKICNkZWZpbmUgTUFQX1RZUEUJMHgwZgkJLyogTWFzayBmb3IgdHlwZSBvZiBtYXBwaW5nICovCiAjZGVmaW5lIE1BUF9GSVhFRAkweDEwCQkvKiBJbnRlcnByZXQgYWRkciBleGFjdGx5ICovCiAjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAkJLyogZG9uJ3QgdXNlIGEgZmlsZSAqLworI2lmZGVmIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQKKyMgZGVmaW5lIE1BUF9VTklOSVRJQUxJWkVEIDB4NDAwMDAwMAkvKiBGb3IgYW5vbnltb3VzIG1tYXAsIG1lbW9yeSBjb3VsZCBiZSB1bmluaXRpYWxpemVkICovCisjZWxzZQorIyBkZWZpbmUgTUFQX1VOSU5JVElBTElaRUQgMHgwCQkvKiBEb24ndCBzdXBwb3J0IHRoaXMgZmxhZyAqLworI2VuZGlmCiAKICNkZWZpbmUgTVNfQVNZTkMJMQkJLyogc3luYyBtZW1vcnkgYXN5bmNocm9ub3VzbHkgKi8KICNkZWZpbmUgTVNfSU5WQUxJREFURQkyCQkvKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KQEAgLTM1LDYgKzQwLDcgQEAKICNkZWZpbmUgTUFEVl9ET05URk9SSwkxMAkJLyogZG9uJ3QgaW5oZXJpdCBhY3Jvc3MgZm9yayAqLwogI2RlZmluZSBNQURWX0RPRk9SSwkxMQkJLyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqLwogI2RlZmluZSBNQURWX0hXUE9JU09OCTEwMAkJLyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqLworI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEJCS8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovCiAKICNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICAxMgkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KICNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxMwkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaAppbmRleCA5MDA3OWMzLi44MDg3YjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKQEAgLTU2LDYgKzU2LDkgQEAKICNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKSBcCiAJKCpTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3Zhcih2YXIpLCBfX215X2NwdV9vZmZzZXQpKQogCisjZGVmaW5lIHRoaXNfY3B1X3B0cihwdHIpIFNISUZUX1BFUkNQVV9QVFIocHRyLCBteV9jcHVfb2Zmc2V0KQorI2RlZmluZSBfX3RoaXNfY3B1X3B0cihwdHIpIFNISUZUX1BFUkNQVV9QVFIocHRyLCBfX215X2NwdV9vZmZzZXQpCisKIAogI2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQogZXh0ZXJuIHZvaWQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKTsKQEAgLTY2LDYgKzY5LDggQEAKICNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkJCQkoKigodm9pZCkoY3B1KSwgJnBlcl9jcHVfdmFyKHZhcikpKQogI2RlZmluZSBfX2dldF9jcHVfdmFyKHZhcikJCQlwZXJfY3B1X3Zhcih2YXIpCiAjZGVmaW5lIF9fcmF3X2dldF9jcHVfdmFyKHZhcikJCQlwZXJfY3B1X3Zhcih2YXIpCisjZGVmaW5lIHRoaXNfY3B1X3B0cihwdHIpIHBlcl9jcHVfcHRyKHB0ciwgMCkKKyNkZWZpbmUgX190aGlzX2NwdV9wdHIocHRyKSB0aGlzX2NwdV9wdHIocHRyKQogCiAjZW5kaWYJLyogU01QICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCmluZGV4IDdjMzhjMTQuLjZhMGIzMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaApAQCAtNjIyLDkgKzYyMiwxMyBAQAogX19TWVNDQUxMKF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbykKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gMjQxCiBfX1NZU0NBTEwoX19OUl9wZXJmX2V2ZW50X29wZW4sIHN5c19wZXJmX2V2ZW50X29wZW4pCisjZGVmaW5lIF9fTlJfYWNjZXB0NCAyNDIKK19fU1lTQ0FMTChfX05SX2FjY2VwdDQsIHN5c19hY2NlcHQ0KQorI2RlZmluZSBfX05SX3JlY3ZtbXNnIDI0MworX19TWVNDQUxMKF9fTlJfcmVjdm1tc2csIHN5c19yZWN2bW1zZykKIAogI3VuZGVmIF9fTlJfc3lzY2FsbHMKLSNkZWZpbmUgX19OUl9zeXNjYWxscyAyNDIKKyNkZWZpbmUgX19OUl9zeXNjYWxscyAyNDQKIAogLyoKICAqIEFsbCBzeXNjYWxscyBiZWxvdyBoZXJlIHNob3VsZCBnbyBhd2F5IHJlYWxseSwKQEAgLTgwMiw3ICs4MDYsNyBAQAogI2RlZmluZSBfX05SX3N0YXRmcyBfX05SMzI2NF9zdGF0ZnMKICNkZWZpbmUgX19OUl9mc3RhdGZzIF9fTlIzMjY0X2ZzdGF0ZnMKICNkZWZpbmUgX19OUl90cnVuY2F0ZSBfX05SMzI2NF90cnVuY2F0ZQotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSBfX05SMzI2NF90cnVuY2F0ZQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSBfX05SMzI2NF9mdHJ1bmNhdGUKICNkZWZpbmUgX19OUl9sc2VlayBfX05SMzI2NF9sc2VlawogI2RlZmluZSBfX05SX3NlbmRmaWxlIF9fTlIzMjY0X3NlbmRmaWxlCiAjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdCBfX05SMzI2NF9mc3RhdGF0CkBAIC04MTgsNyArODIyLDcgQEAKICNkZWZpbmUgX19OUl9zdGF0ZnM2NCBfX05SMzI2NF9zdGF0ZnMKICNkZWZpbmUgX19OUl9mc3RhdGZzNjQgX19OUjMyNjRfZnN0YXRmcwogI2RlZmluZSBfX05SX3RydW5jYXRlNjQgX19OUjMyNjRfdHJ1bmNhdGUKLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NCBfX05SMzI2NF90cnVuY2F0ZQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0IF9fTlIzMjY0X2Z0cnVuY2F0ZQogI2RlZmluZSBfX05SX2xsc2VlayBfX05SMzI2NF9sc2VlawogI2RlZmluZSBfX05SX3NlbmRmaWxlNjQgX19OUjMyNjRfc2VuZGZpbGUKICNkZWZpbmUgX19OUl9mc3RhdGF0NjQgX19OUjMyNjRfZnN0YXRhdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IGI2ZTgxOGYuLjY3ZTY1MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTUyLDggKzUyLDEyIEBACiAjZGVmaW5lIExPQURfT0ZGU0VUIDAKICNlbmRpZgogCi0jaWZuZGVmIFZNTElOVVhfU1lNQk9MCi0jZGVmaW5lIFZNTElOVVhfU1lNQk9MKF9zeW1fKSBfc3ltXworI2lmbmRlZiBTWU1CT0xfUFJFRklYCisjZGVmaW5lIFZNTElOVVhfU1lNQk9MKHN5bSkgc3ltCisjZWxzZQorI2RlZmluZSBQQVNURTIoeCx5KSB4IyN5CisjZGVmaW5lIFBBU1RFKHgseSkgUEFTVEUyKHgseSkKKyNkZWZpbmUgVk1MSU5VWF9TWU1CT0woc3ltKSBQQVNURShTWU1CT0xfUFJFRklYLCBzeW0pCiAjZW5kaWYKIAogLyogQWxpZ24gLiB0byBhIDggYnl0ZSBib3VuZGFyeSBlcXVhbHMgdG8gbWF4aW11bSBmdW5jdGlvbiBhbGlnbm1lbnQuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9LYnVpbGQgYi9pbmNsdWRlL2RybS9LYnVpbGQKaW5kZXggY2ZhNmFmNC4uYmQzYTFjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vS2J1aWxkCisrKyBiL2luY2x1ZGUvZHJtL0tidWlsZApAQCAtNyw1ICs3LDYgQEAKIHVuaWZkZWYteSArPSByYWRlb25fZHJtLmgKIHVuaWZkZWYteSArPSBzaXNfZHJtLmgKIHVuaWZkZWYteSArPSBzYXZhZ2VfZHJtLmgKK3VuaWZkZWYteSArPSB2bXdnZnhfZHJtLmgKIHVuaWZkZWYteSArPSB2aWFfZHJtLmgKIHVuaWZkZWYteSArPSBub3V2ZWF1X2RybS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMTllZjhlYi4uNzFkYWZiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMjk2LDYgKzI5Niw3IEBACiAjZGVmaW5lCURSTV9NQVNURVIJMHgyCiAjZGVmaW5lIERSTV9ST09UX09OTFkJMHg0CiAjZGVmaW5lIERSTV9DT05UUk9MX0FMTE9XIDB4OAorI2RlZmluZSBEUk1fVU5MT0NLRUQJMHgxMAogCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgewogCXVuc2lnbmVkIGludCBjbWQ7CkBAIC0xMTI4LDggKzExMjksOCBAQAogCQkJCS8qIERyaXZlciBzdXBwb3J0IChkcm1fZHJ2LmgpICovCiBleHRlcm4gaW50IGRybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwogZXh0ZXJuIHZvaWQgZHJtX2V4aXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50IGRybV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gbG9uZyBkcm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBsb25nIGRybV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fb2JqZWN0LmggYi9pbmNsdWRlL2RybS90dG0vdHRtX29iamVjdC5oCmluZGV4IDcwM2NhNGQuLjBkOWRiMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9vYmplY3QuaApAQCAtNzcsNyArNzcsMTEgQEAKIAl0dG1fYnVmZmVyX3R5cGUsCiAJdHRtX2xvY2tfdHlwZSwKIAl0dG1fZHJpdmVyX3R5cGUwID0gMjU2LAotCXR0bV9kcml2ZXJfdHlwZTEKKwl0dG1fZHJpdmVyX3R5cGUxLAorCXR0bV9kcml2ZXJfdHlwZTIsCisJdHRtX2RyaXZlcl90eXBlMywKKwl0dG1fZHJpdmVyX3R5cGU0LAorCXR0bV9kcml2ZXJfdHlwZTUKIH07CiAKIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmggYi9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlN2UxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaApAQCAtMCwwICsxLDU3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19WTVdHRlhfRFJNX0hfXworI2RlZmluZSBfX1ZNV0dGWF9EUk1fSF9fCisKKyNkZWZpbmUgRFJNX1ZNV19NQVhfU1VSRkFDRV9GQUNFUyA2CisjZGVmaW5lIERSTV9WTVdfTUFYX01JUF9MRVZFTFMgMjQKKworI2RlZmluZSBEUk1fVk1XX0VYVF9OQU1FX0xFTiAxMjgKKworI2RlZmluZSBEUk1fVk1XX0dFVF9QQVJBTSAgICAgICAgICAgIDAKKyNkZWZpbmUgRFJNX1ZNV19BTExPQ19ETUFCVUYgICAgICAgICAxCisjZGVmaW5lIERSTV9WTVdfVU5SRUZfRE1BQlVGICAgICAgICAgMgorI2RlZmluZSBEUk1fVk1XX0NVUlNPUl9CWVBBU1MgICAgICAgIDMKKy8qIGd1YXJkZWQgYnkgRFJNX1ZNV19QQVJBTV9OVU1fU1RSRUFNUyAhPSAwKi8KKyNkZWZpbmUgRFJNX1ZNV19DT05UUk9MX1NUUkVBTSAgICAgICA0CisjZGVmaW5lIERSTV9WTVdfQ0xBSU1fU1RSRUFNICAgICAgICAgNQorI2RlZmluZSBEUk1fVk1XX1VOUkVGX1NUUkVBTSAgICAgICAgIDYKKy8qIGd1YXJkZWQgYnkgRFJNX1ZNV19QQVJBTV8zRCA9PSAxICovCisjZGVmaW5lIERSTV9WTVdfQ1JFQVRFX0NPTlRFWFQgICAgICAgNworI2RlZmluZSBEUk1fVk1XX1VOUkVGX0NPTlRFWFQgICAgICAgIDgKKyNkZWZpbmUgRFJNX1ZNV19DUkVBVEVfU1VSRkFDRSAgICAgICA5CisjZGVmaW5lIERSTV9WTVdfVU5SRUZfU1VSRkFDRSAgICAgICAgMTAKKyNkZWZpbmUgRFJNX1ZNV19SRUZfU1VSRkFDRSAgICAgICAgICAxMQorI2RlZmluZSBEUk1fVk1XX0VYRUNCVUYgICAgICAgICAgICAgIDEyCisjZGVmaW5lIERSTV9WTVdfRklGT19ERUJVRyAgICAgICAgICAgMTMKKyNkZWZpbmUgRFJNX1ZNV19GRU5DRV9XQUlUICAgICAgICAgICAxNAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0dFVF9QQVJBTSAtIGdldCBkZXZpY2UgaW5mb3JtYXRpb24uCisgKgorICogRFJNX1ZNV19QQVJBTV9GSUZPX09GRlNFVDoKKyAqIE9mZnNldCB0byB1c2UgdG8gbWFwIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBGSUZPIHJlYWQtb25seS4KKyAqIFRoZSBmaWZvIGlzIG1hcHBlZCB1c2luZyB0aGUgbW1hcCgpIHN5c3RlbSBjYWxsIG9uIHRoZSBkcm0gZGV2aWNlLgorICoKKyAqIERSTV9WTVdfUEFSQU1fT1ZFUkxBWV9JT0NUTDoKKyAqIERvZXMgdGhlIGRyaXZlciBzdXBwb3J0IHRoZSBvdmVybGF5IGlvY3RsLgorICovCisKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9OVU1fU1RSRUFNUyAgICAgIDAKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9OVU1fRlJFRV9TVFJFQU1TIDEKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV8zRCAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9GSUZPX09GRlNFVCAgICAgIDMKKworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X2dldHBhcmFtX2FyZworICoKKyAqIEB2YWx1ZTogUmV0dXJuZWQgdmFsdWUuIC8vT3V0CisgKiBAcGFyYW06IFBhcmFtZXRlciB0byBxdWVyeS4gLy9Jbi4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19HRVRfUEFSQU0gSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfZ2V0cGFyYW1fYXJnIHsKKwl1aW50NjRfdCB2YWx1ZTsKKwl1aW50MzJfdCBwYXJhbTsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0VYVEVOU0lPTiAtIFF1ZXJ5IGRldmljZSBleHRlbnNpb25zLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfZXh0ZW5zaW9uX3JlcAorICoKKyAqIEBleGlzdHM6IFRoZSBxdWVyaWVkIGV4dGVuc2lvbiBleGlzdHMuCisgKiBAZHJpdmVyX2lvY3RsX29mZnNldDogSW9jdGwgbnVtYmVyIG9mIHRoZSBmaXJzdCBpb2N0bCBpbiB0aGUgZXh0ZW5zaW9uLgorICogQGRyaXZlcl9zYXJlYV9vZmZzZXQ6IE9mZnNldCB0byBhbnkgc3BhY2UgaW4gdGhlIERSSSBTQVJFQQorICogdXNlZCBieSB0aGUgZXh0ZW5zaW9uLgorICogQG1ham9yOiBNYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZXh0ZW5zaW9uLgorICogQG1pbm9yOiBNaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZXh0ZW5zaW9uLgorICogQHBsOiBQYXRjaCBsZXZlbCB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIE91dHB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19FWFRFTlNJT04gSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfZXh0ZW5zaW9uX3JlcCB7CisJaW50MzJfdCBleGlzdHM7CisJdWludDMyX3QgZHJpdmVyX2lvY3RsX29mZnNldDsKKwl1aW50MzJfdCBkcml2ZXJfc2FyZWFfb2Zmc2V0OworCXVpbnQzMl90IG1ham9yOworCXVpbnQzMl90IG1pbm9yOworCXVpbnQzMl90IHBsOworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqCisgKiB1bmlvbiBkcm1fdm13X2V4dGVuc2lvbl9hcmcKKyAqCisgKiBAZXh0ZW5zaW9uIC0gQXNjaWkgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRvIGJlIHF1ZXJpZWQuIC8vSW4KKyAqIEByZXAgLSBSZXBseSBhcyBkZWZpbmVkIGFib3ZlLiAvL091dAorICoKKyAqIEFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX0VYVEVOU0lPTiBJb2N0bC4KKyAqLworCit1bmlvbiBkcm1fdm13X2V4dGVuc2lvbl9hcmcgeworCWNoYXIgZXh0ZW5zaW9uW0RSTV9WTVdfRVhUX05BTUVfTEVOXTsKKwlzdHJ1Y3QgZHJtX3Ztd19leHRlbnNpb25fcmVwIHJlcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0NSRUFURV9DT05URVhUIC0gQ3JlYXRlIGEgaG9zdCBjb250ZXh0LgorICoKKyAqIEFsbG9jYXRlcyBhIGRldmljZSB1bmlxdWUgY29udGV4dCBpZCwgYW5kIHF1ZXVlcyBhIGNyZWF0ZSBjb250ZXh0IGNvbW1hbmQKKyAqIGZvciB0aGUgaG9zdC4gRG9lcyBub3Qgd2FpdCBmb3IgaG9zdCBjb21wbGV0aW9uLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfY29udGV4dF9hcmcKKyAqCisgKiBAY2lkOiBEZXZpY2UgdW5pcXVlIGNvbnRleHQgSUQuCisgKgorICogT3V0cHV0IGFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX0NSRUFURV9DT05URVhUIElvY3RsLgorICogSW5wdXQgYXJndW1lbnQgdG8gdGhlIERSTV9WTVdfVU5SRUZfQ09OVEVYVCBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19jb250ZXh0X2FyZyB7CisJaW50MzJfdCBjaWQ7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19VTlJFRl9DT05URVhUIC0gQ3JlYXRlIGEgaG9zdCBjb250ZXh0LgorICoKKyAqIEZyZWVzIGEgZ2xvYmFsIGNvbnRleHQgaWQsIGFuZCBxdWV1ZXMgYSBkZXN0cm95IGhvc3QgY29tbWFuZCBmb3IgdGhlIGhvc3QuCisgKiBEb2VzIG5vdCB3YWl0IGZvciBob3N0IGNvbXBsZXRpb24uIFRoZSBjb250ZXh0IElEIGNhbiBiZSB1c2VkIGRpcmVjdGx5CisgKiBpbiB0aGUgY29tbWFuZCBzdHJlYW0gYW5kIHNob3dzIHVwIGFzIHRoZSBzYW1lIGNvbnRleHQgSUQgb24gdGhlIGhvc3QuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgLSBDcmVhdGUgYSBob3N0IHN1ZmFjZS4KKyAqCisgKiBBbGxvY2F0ZXMgYSBkZXZpY2UgdW5pcXVlIHN1cmZhY2UgaWQsIGFuZCBxdWV1ZXMgYSBjcmVhdGUgc3VyZmFjZSBjb21tYW5kCisgKiBmb3IgdGhlIGhvc3QuIERvZXMgbm90IHdhaXQgZm9yIGhvc3QgY29tcGxldGlvbi4gVGhlIHN1cmZhY2UgSUQgY2FuIGJlCisgKiB1c2VkIGRpcmVjdGx5IGluIHRoZSBjb21tYW5kIHN0cmVhbSBhbmQgc2hvd3MgdXAgYXMgdGhlIHNhbWUgc3VyZmFjZQorICogSUQgb24gdGhlIGhvc3QuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZHJtX3dtdl9zdXJmYWNlX2NyZWF0ZV9yZXEKKyAqCisgKiBAZmxhZ3M6IFN1cmZhY2UgZmxhZ3MgYXMgdW5kZXJzdG9vZCBieSB0aGUgaG9zdC4KKyAqIEBmb3JtYXQ6IFN1cmZhY2UgZm9ybWF0IGFzIHVuZGVyc3Rvb2QgYnkgdGhlIGhvc3QuCisgKiBAbWlwX2xldmVsczogTnVtYmVyIG9mIG1pcCBsZXZlbHMgZm9yIGVhY2ggZmFjZS4KKyAqIEFuIHVudXNlZCBmYWNlIHNob3VsZCBoYXZlIDAgZW5jb2RlZC4KKyAqIEBzaXplX2FkZHI6IEFkZHJlc3Mgb2YgYSB1c2VyLXNwYWNlIGFycmF5IG9mIHNydWN0IGRybV92bXdfc2l6ZQorICogY2FzdCB0byBhbiB1aW50NjRfdCBmb3IgMzItNjQgYml0IGNvbXBhdGliaWxpdHkuCisgKiBUaGUgc2l6ZSBvZiB0aGUgYXJyYXkgc2hvdWxkIGVxdWFsIHRoZSB0b3RhbCBudW1iZXIgb2YgbWlwbWFwIGxldmVscy4KKyAqIEBzaGFyZWFibGU6IEJvb2xlYW4gd2hldGhlciBvdGhlciBjbGllbnRzIChhcyBpZGVudGlmaWVkIGJ5IGZpbGUgZGVzY3JpcHRvcnMpCisgKiBtYXkgcmVmZXJlbmNlIHRoaXMgc3VyZmFjZS4KKyAqCisgKiBJbnB1dCBkYXRhIHRvIHRoZSBEUk1fVk1XX0NSRUFURV9TVVJGQUNFIElvY3RsLgorICogT3V0cHV0IGRhdGEgZnJvbSB0aGUgRFJNX1ZNV19SRUZfU1VSRkFDRSBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9yZXEgeworCXVpbnQzMl90IGZsYWdzOworCXVpbnQzMl90IGZvcm1hdDsKKwl1aW50MzJfdCBtaXBfbGV2ZWxzW0RSTV9WTVdfTUFYX1NVUkZBQ0VfRkFDRVNdOworCXVpbnQ2NF90IHNpemVfYWRkcjsKKwlpbnQzMl90IHNoYXJlYWJsZTsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKgorICogc3RydWN0IGRybV93bXZfc3VyZmFjZV9hcmcKKyAqCisgKiBAc2lkOiBTdXJmYWNlIGlkIG9mIGNyZWF0ZWQgc3VyZmFjZSBvciBzdXJmYWNlIHRvIGRlc3Ryb3kgb3IgcmVmZXJlbmNlLgorICoKKyAqIE91dHB1dCBkYXRhIGZyb20gdGhlIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgSW9jdGwuCisgKiBJbnB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19VTlJFRl9TVVJGQUNFIElvY3RsLgorICogSW5wdXQgYXJndW1lbnQgdG8gdGhlIERSTV9WTVdfUkVGX1NVUkZBQ0UgSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgeworCWludDMyX3Qgc2lkOworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19zaXplIGlvY3RsLgorICoKKyAqIEB3aWR0aCAtIG1pcCBsZXZlbCB3aWR0aAorICogQGhlaWdodCAtIG1pcCBsZXZlbCBoZWlnaHQKKyAqIEBkZXB0aCAtIG1pcCBsZXZlbCBkZXB0aAorICoKKyAqIERlc2NyaXB0aW9uIG9mIGEgbWlwIGxldmVsLgorICogSW5wdXQgZGF0YSB0byB0aGUgRFJNX1dNV19DUkVBVEVfU1VSRkFDRSBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19zaXplIHsKKwl1aW50MzJfdCB3aWR0aDsKKwl1aW50MzJfdCBoZWlnaHQ7CisJdWludDMyX3QgZGVwdGg7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKioKKyAqIHVuaW9uIGRybV92bXdfc3VyZmFjZV9jcmVhdGVfYXJnCisgKgorICogQHJlcDogT3V0cHV0IGRhdGEgYXMgZGVzY3JpYmVkIGFib3ZlLgorICogQHJlcTogSW5wdXQgZGF0YSBhcyBkZXNjcmliZWQgYWJvdmUuCisgKgorICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgSW9jdGwuCisgKi8KKwordW5pb24gZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9hcmcgeworCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnIHJlcDsKKwlzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9yZXEgcmVxOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfUkVGX1NVUkZBQ0UgLSBSZWZlcmVuY2UgYSBob3N0IHN1cmZhY2UuCisgKgorICogUHV0cyBhIHJlZmVyZW5jZSBvbiBhIGhvc3Qgc3VyZmFjZSB3aXRoIGEgZ2l2ZSBzaWQsIGFzIHByZXZpb3VzbHkKKyAqIHJldHVybmVkIGJ5IHRoZSBEUk1fVk1XX0NSRUFURV9TVVJGQUNFIGlvY3RsLgorICogQSByZWZlcmVuY2Ugd2lsbCBtYWtlIHN1cmUgdGhlIHN1cmZhY2UgaXNuJ3QgZGVzdHJveWVkIHdoaWxlIHdlIGhvbGQKKyAqIGl0IGFuZCB3aWxsIGFsbG93IHRoZSBjYWxsaW5nIGNsaWVudCB0byB1c2UgdGhlIHN1cmZhY2UgSUQgaW4gdGhlIGNvbW1hbmQKKyAqIHN0cmVhbS4KKyAqCisgKiBPbiBzdWNjZXNzZnVsIHJldHVybiwgdGhlIElvY3RsIHJldHVybnMgdGhlIHN1cmZhY2UgaW5mb3JtYXRpb24gZ2l2ZW4KKyAqIGluIHRoZSBEUk1fVk1XX0NSRUFURV9TVVJGQUNFIGlvY3RsLgorICovCisKKy8qKgorICogdW5pb24gZHJtX3Ztd19zdXJmYWNlX3JlZmVyZW5jZV9hcmcKKyAqCisgKiBAcmVwOiBPdXRwdXQgZGF0YSBhcyBkZXNjcmliZWQgYWJvdmUuCisgKiBAcmVxOiBJbnB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19SRUZfU1VSRkFDRSBJb2N0bC4KKyAqLworCit1bmlvbiBkcm1fdm13X3N1cmZhY2VfcmVmZXJlbmNlX2FyZyB7CisJc3RydWN0IGRybV92bXdfc3VyZmFjZV9jcmVhdGVfcmVxIHJlcDsKKwlzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyByZXE7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19VTlJFRl9TVVJGQUNFIC0gVW5yZWZlcmVuY2UgYSBob3N0IHN1cmZhY2UuCisgKgorICogQ2xlYXIgYSByZWZlcmVuY2UgcHJldmlvdXNseSBwdXQgb24gYSBob3N0IHN1cmZhY2UuCisgKiBXaGVuIGFsbCByZWZlcmVuY2VzIGFyZSBnb25lLCBpbmNsdWRpbmcgdGhlIG9uZSBpbXBsaWNpdGx5IHBsYWNlZAorICogb24gY3JlYXRpb24sCisgKiBhIGRlc3Ryb3kgc3VyZmFjZSBjb21tYW5kIHdpbGwgYmUgcXVldWVkIGZvciB0aGUgaG9zdC4KKyAqIERvZXMgbm90IHdhaXQgZm9yIGNvbXBsZXRpb24uCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfRVhFQ0JVRgorICoKKyAqIFN1Ym1pdCBhIGNvbW1hbmQgYnVmZmVyIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QsIGFuZCByZXR1cm4gYQorICogZmVuY2Ugc2VxdWVuY2UgdGhhdCB3aGVuIHNpZ25hbGVkLCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZCBidWZmZXIgaGFzCisgKiBleGVjdXRlZC4KKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X2V4ZWNidWZfYXJnCisgKgorICogQGNvbW1hbmRzOiBVc2VyLXNwYWNlIGFkZHJlc3Mgb2YgYSBjb21tYW5kIGJ1ZmZlciBjYXN0IHRvIGFuIHVpbnQ2NF90LgorICogQGNvbW1hbmQtc2l6ZTogU2l6ZSBpbiBieXRlcyBvZiB0aGUgY29tbWFuZCBidWZmZXIuCisgKiBAZmVuY2VfcmVwOiBVc2VyLXNwYWNlIGFkZHJlc3Mgb2YgYSBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9yZXAgY2FzdCB0byBhbgorICogdWludDY0X3QuCisgKgorICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfRVhFQ0JVRiBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19leGVjYnVmX2FyZyB7CisJdWludDY0X3QgY29tbWFuZHM7CisJdWludDMyX3QgY29tbWFuZF9zaXplOworCXVpbnQzMl90IHBhZDY0OworCXVpbnQ2NF90IGZlbmNlX3JlcDsKK307CisKKy8qKgorICogc3RydWN0IGRybV92bXdfZmVuY2VfcmVwCisgKgorICogQGZlbmNlX3NlcTogRmVuY2Ugc2VxdWVuY2UgYXNzb2NpYXRlZCB3aXRoIGEgY29tbWFuZCBzdWJtaXNzaW9uLgorICogQGVycm9yOiBUaGlzIG1lbWJlciBzaG91bGQndmUgYmVlbiBzZXQgdG8gLUVGQVVMVCBvbiBzdWJtaXNzaW9uLgorICogVGhlIGZvbGxvd2luZyBhY3Rpb25zIHNob3VsZCBiZSB0YWtlIG9uIGNvbXBsZXRpb246CisgKiBlcnJvciA9PSAtRUZBVUxUOiBGZW5jZSBjb21tdW5pY2F0aW9uIGZhaWxlZC4gVGhlIGhvc3QgaXMgc3luY2hyb25pemVkLgorICogVXNlIHRoZSBsYXN0IGZlbmNlIGlkIHJlYWQgZnJvbSB0aGUgRklGTyBmZW5jZSByZWdpc3Rlci4KKyAqIGVycm9yICE9IDAgJiYgZXJyb3IgIT0gLUVGQVVMVDoKKyAqIEZlbmNlIHN1Ym1pc3Npb24gZmFpbGVkLiBUaGUgaG9zdCBpcyBzeW5jaHJvbml6ZWQuIFVzZSB0aGUgZmVuY2Vfc2VxIG1lbWJlci4KKyAqIGVycm9yID09IDA6IEFsbCBpcyBPSywgVGhlIGhvc3QgbWF5IG5vdCBiZSBzeW5jaHJvbml6ZWQuCisgKiBVc2UgdGhlIGZlbmNlX3NlcSBtZW1iZXIuCisgKgorICogSW5wdXQgLyBPdXRwdXQgZGF0YSB0byB0aGUgRFJNX1ZNV19FWEVDQlVGIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2ZlbmNlX3JlcCB7CisJdWludDY0X3QgZmVuY2Vfc2VxOworCWludDMyX3QgZXJyb3I7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogRFJNX1ZNV19BTExPQ19ETUFCVUYKKyAqCisgKiBBbGxvY2F0ZSBhIERNQSBidWZmZXIgdGhhdCBpcyB2aXNpYmxlIGFsc28gdG8gdGhlIGhvc3QuCisgKiBOT1RFOiBUaGUgYnVmZmVyIGlzCisgKiBpZGVudGlmaWVkIGJ5IGEgaGFuZGxlIGFuZCBhbiBvZmZzZXQsIHdoaWNoIGFyZSBwcml2YXRlIHRvIHRoZSBndWVzdCwgYnV0CisgKiB1c2VhYmxlIGluIHRoZSBjb21tYW5kIHN0cmVhbS4gVGhlIGd1ZXN0IGtlcm5lbCBtYXkgdHJhbnNsYXRlIHRoZXNlCisgKiBhbmQgcGF0Y2ggdXAgdGhlIGNvbW1hbmQgc3RyZWFtIGFjY29yZGluZ2x5LiBJbiB0aGUgZnV0dXJlLCB0aGUgb2Zmc2V0IG1heQorICogYmUgemVybyBhdCBhbGwgdGltZXMsIG9yIGl0IG1heSBkaXNhcHBlYXIgZnJvbSB0aGUgaW50ZXJmYWNlIGJlZm9yZSBpdCBpcworICogZml4ZWQuCisgKgorICogVGhlIERNQSBidWZmZXIgbWF5IHN0YXkgdXNlci1zcGFjZSBtYXBwZWQgaW4gdGhlIGd1ZXN0IGF0IGFsbCB0aW1lcywKKyAqIGFuZCBpcyB0aHVzIHN1aXRhYmxlIGZvciBzdWItYWxsb2NhdGlvbi4KKyAqCisgKiBETUEgYnVmZmVycyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBtbWFwKCkgc3lzY2FsbCBvbiB0aGUgZHJtIGRldmljZS4KKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9yZXEKKyAqCisgKiBAc2l6ZTogUmVxdWlyZWQgbWluaW11bSBzaXplIG9mIHRoZSBidWZmZXIuCisgKgorICogSW5wdXQgZGF0YSB0byB0aGUgRFJNX1ZNV19BTExPQ19ETUFCVUYgSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfYWxsb2NfZG1hYnVmX3JlcSB7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKgorICogc3RydWN0IGRybV92bXdfZG1hYnVmX3JlcAorICoKKyAqIEBtYXBfaGFuZGxlOiBPZmZzZXQgdG8gdXNlIGluIHRoZSBtbWFwKCkgY2FsbCB1c2VkIHRvIG1hcCB0aGUgYnVmZmVyLgorICogQGhhbmRsZTogSGFuZGxlIHVuaXF1ZSB0byB0aGlzIGJ1ZmZlci4gVXNlZCBmb3IgdW5yZWZlcmVuY2luZy4KKyAqIEBjdXJfZ21yX2lkOiBHTVIgaWQgdG8gdXNlIGluIHRoZSBjb21tYW5kIHN0cmVhbSB3aGVuIHRoaXMgYnVmZmVyIGlzCisgKiByZWZlcmVuY2VkLiBTZWUgbm90IGFib3ZlLgorICogQGN1cl9nbXJfb2Zmc2V0OiBPZmZzZXQgdG8gdXNlIGluIHRoZSBjb21tYW5kIHN0cmVhbSB3aGVuIHRoaXMgYnVmZmVyIGlzCisgKiByZWZlcmVuY2VkLiBTZWUgbm90ZSBhYm92ZS4KKyAqCisgKiBPdXRwdXQgZGF0YSBmcm9tIHRoZSBEUk1fVk1XX0FMTE9DX0RNQUJVRiBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwIHsKKwl1aW50NjRfdCBtYXBfaGFuZGxlOworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBjdXJfZ21yX2lkOworCXVpbnQzMl90IGN1cl9nbXJfb2Zmc2V0OworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqCisgKiB1bmlvbiBkcm1fdm13X2RtYWJ1Zl9hcmcKKyAqCisgKiBAcmVxOiBJbnB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqIEByZXA6IE91dHB1dCBkYXRhIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19BTExPQ19ETUFCVUYgSW9jdGwuCisgKi8KKwordW5pb24gZHJtX3Ztd19hbGxvY19kbWFidWZfYXJnIHsKKwlzdHJ1Y3QgZHJtX3Ztd19hbGxvY19kbWFidWZfcmVxIHJlcTsKKwlzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwIHJlcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX1VOUkVGX0RNQUJVRiAtIEZyZWUgYSBETUEgYnVmZmVyLgorICoKKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X3VucmVmX2RtYWJ1Zl9hcmcKKyAqCisgKiBAaGFuZGxlOiBIYW5kbGUgaW5kaWNhdGluZyB3aGF0IGJ1ZmZlciB0byBmcmVlLiBPYnRhaW5lZCBmcm9tIHRoZQorICogRFJNX1ZNV19BTExPQ19ETUFCVUYgSW9jdGwuCisgKgorICogQXJndW1lbnQgdG8gdGhlIERSTV9WTVdfVU5SRUZfRE1BQlVGIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X3VucmVmX2RtYWJ1Zl9hcmcgeworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ2NDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0ZJRk9fREVCVUcgLSBHZXQgbGFzdCBGSUZPIHN1Ym1pc3Npb24uCisgKgorICogVGhpcyBJT0NUTCBjb3BpZXMgdGhlIGxhc3QgRklGTyBzdWJtaXNzaW9uIGRpcmVjdGx5IG91dCBvZiB0aGUgRklGTyBidWZmZXIuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19maWZvX2RlYnVnX2FyZworICoKKyAqIEBkZWJ1Z19idWZmZXI6IFVzZXIgc3BhY2UgYWRkcmVzcyBvZiBhIGRlYnVnX2J1ZmZlciBjYXN0IHRvIGFuIHVpbnQ2NF90IC8vSW4KKyAqIEBkZWJ1Z19idWZmZXJfc2l6ZTogU2l6ZSBpbiBieXRlcyBvZiBkZWJ1ZyBidWZmZXIgLy9JbgorICogQHVzZWRfc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIGNvcGllZCB0byB0aGUgYnVmZmVyIC8vIE91dAorICogQGRpZF9ub3RfZml0OiBCb29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGUgZmlmbyBjb250ZW50cyBkaWQgbm90IGZpdC4gLy9PdXQKKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19GSUZPX0RFQlVHIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2ZpZm9fZGVidWdfYXJnIHsKKwl1aW50NjRfdCBkZWJ1Z19idWZmZXI7CisJdWludDMyX3QgZGVidWdfYnVmZmVyX3NpemU7CisJdWludDMyX3QgdXNlZF9zaXplOworCWludDMyX3QgZGlkX25vdF9maXQ7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCitzdHJ1Y3QgZHJtX3Ztd19mZW5jZV93YWl0X2FyZyB7CisJdWludDY0X3Qgc2VxdWVuY2U7CisJdWludDY0X3Qga2VybmVsX2Nvb2tpZTsKKwlpbnQzMl90IGNvb2tpZV92YWxpZDsKKwlpbnQzMl90IHBhZDY0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ09OVFJPTF9TVFJFQU0gLSBDb250cm9sIG92ZXJsYXlzLCBha2Egc3RyZWFtcy4KKyAqCisgKiBUaGlzIElPQ1RMIGNvbnRyb2xzIHRoZSBvdmVybGF5IHVuaXRzIG9mIHRoZSBzdmdhIGRldmljZS4KKyAqIFRoZSBTVkdBIG92ZXJsYXkgdW5pdHMgZG9lcyBub3Qgd29yayBsaWtlIHJlZ3VsYXIgaGFyZHdhcmUgdW5pdHMgaW4KKyAqIHRoYXQgdGhleSBkbyBub3QgYXV0b21hdGljYWx5IHJlYWQgYmFjayB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGRtYQorICogYnVmZmVyLiBCdXQgaW5zdGVhZCBvbmx5IHJlYWQgYmFjayBmb3IgZWFjaCBjYWxsIHRvIHRoaXMgaW9jdGwsIGFuZAorICogYXQgYW55IHBvaW50IGJldHdlZW4gdGhpcyBjYWxsIGJlaW5nIG1hZGUgYW5kIGEgZm9sbG93aW5nIGNhbGwgdGhhdAorICogZWl0aGVyIGNoYW5nZXMgdGhlIGJ1ZmZlciBvciBkaXNhYmxlcyB0aGUgc3RyZWFtLgorICovCisKKy8qKgorICogc3RydWN0IGRybV92bXdfcmVjdAorICoKKyAqIERlZmluZXMgYSByZWN0YW5nbGUuIFVzZWQgaW4gdGhlIG92ZXJsYXkgaW9jdGwgdG8gZGVmaW5lCisgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlY3RhbmdsZS4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19yZWN0IHsKKwlpbnQzMl90IHg7CisJaW50MzJfdCB5OworCXVpbnQzMl90IHc7CisJdWludDMyX3QgaDsKK307CisKKy8qKgorICogc3RydWN0IGRybV92bXdfY29udHJvbF9zdHJlYW1fYXJnCisgKgorICogQHN0cmVhbV9pZDogU3RlYXJtIHRvIGNvbnRyb2wKKyAqIEBlbmFibGVkOiBJZiBmYWxzZSBhbGwgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4KKyAqIEBoYW5kbGU6IEhhbmRsZSB0byBidWZmZXIgZm9yIGdldHRpbmcgZGF0YSBmcm9tLgorICogQGZvcm1hdDogRm9ybWF0IG9mIHRoZSBvdmVybGF5IGFzIHVuZGVyc3Rvb2QgYnkgdGhlIGhvc3QuCisgKiBAd2lkdGg6IFdpZHRoIG9mIHRoZSBvdmVybGF5LgorICogQGhlaWdodDogSGVpZ2h0IG9mIHRoZSBvdmVybGF5LgorICogQHNpemU6IFNpemUgb2YgdGhlIG92ZXJsYXkgaW4gYnl0ZXMuCisgKiBAcGl0Y2g6IEFycmF5IG9mIHBpdGNoZXMsIHRoZSB0d28gbGFzdCBhcmUgb25seSB1c2VkIGZvciBZVVYxMiBmb3JtYXRzLgorICogQG9mZnNldDogT2Zmc2V0IGZyb20gc3RhcnQgb2YgZG1hIGJ1ZmZlciB0byBvdmVybGF5LgorICogQHNyYzogU291cmNlIHJlY3QsIG11c3QgYmUgd2l0aGluIHRoZSBkZWZpbmVkIGFyZWEgYWJvdmUuCisgKiBAZHN0OiBEZXN0aW5hdGlvbiByZWN0LCB4IGFuZCB5IG1heSBiZSBuZWdhdGl2ZS4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DT05UUk9MX1NUUkVBTSBJb2N0bC4KKyAqLworCitzdHJ1Y3QgZHJtX3Ztd19jb250cm9sX3N0cmVhbV9hcmcgeworCXVpbnQzMl90IHN0cmVhbV9pZDsKKwl1aW50MzJfdCBlbmFibGVkOworCisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgY29sb3Jfa2V5OworCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IG9mZnNldDsKKwlpbnQzMl90IGZvcm1hdDsKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IHdpZHRoOworCXVpbnQzMl90IGhlaWdodDsKKwl1aW50MzJfdCBwaXRjaFszXTsKKworCXVpbnQzMl90IHBhZDY0OworCXN0cnVjdCBkcm1fdm13X3JlY3Qgc3JjOworCXN0cnVjdCBkcm1fdm13X3JlY3QgZHN0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ1VSU09SX0JZUEFTUyAtIEdpdmUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgY3Vyc29yIGJ5cGFzcy4KKyAqCisgKi8KKworI2RlZmluZSBEUk1fVk1XX0NVUlNPUl9CWVBBU1NfQUxMICAgICgxIDw8IDApCisjZGVmaW5lIERSTV9WTVdfQ1VSU09SX0JZUEFTU19GTEFHUyAgICAgICAoMSkKKworLyoqCisgKiBzdHJ1Y3QgZHJtX3Ztd19jdXJzb3JfYnlwYXNzX2FyZworICoKKyAqIEBmbGFnczogRmxhZ3MuCisgKiBAY3J0Y19pZDogQ3J0YyBpZCwgb25seSB1c2VkIGlmIERNUl9DVVJTT1JfQllQQVNTX0FMTCBpc24ndCBwYXNzZWQuCisgKiBAeHBvczogWCBwb3NpdGlvbiBvZiBjdXJzb3IuCisgKiBAeXBvczogWSBwb3NpdGlvbiBvZiBjdXJzb3IuCisgKiBAeGhvdDogWCBob3RzcG90LgorICogQHlob3Q6IFkgaG90c3BvdC4KKyAqCisgKiBBcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DVVJTT1JfQllQQVNTIElvY3RsLgorICovCisKK3N0cnVjdCBkcm1fdm13X2N1cnNvcl9ieXBhc3NfYXJnIHsKKwl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCBjcnRjX2lkOworCWludDMyX3QgeHBvczsKKwlpbnQzMl90IHlwb3M7CisJaW50MzJfdCB4aG90OworCWludDMyX3QgeWhvdDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBEUk1fVk1XX0NMQUlNX1NUUkVBTSAtIENsYWltIGEgc2luZ2xlIHN0cmVhbS4KKyAqLworCisvKioKKyAqIHN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnCisgKgorICogQHN0cmVhbV9pZDogRGV2aWNlIHVuaXF1ZSBjb250ZXh0IElELgorICoKKyAqIE91dHB1dCBhcmd1bWVudCB0byB0aGUgRFJNX1ZNV19DUkVBVEVfQ09OVEVYVCBJb2N0bC4KKyAqIElucHV0IGFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX1VOUkVGX0NPTlRFWFQgSW9jdGwuCisgKi8KKworc3RydWN0IGRybV92bXdfc3RyZWFtX2FyZyB7CisJdWludDMyX3Qgc3RyZWFtX2lkOworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfVU5SRUZfU1RSRUFNIC0gVW5jbGFpbSBhIHN0cmVhbS4KKyAqCisgKiBSZXR1cm4gYSBzaW5nbGUgc3RyZWFtIHRoYXQgd2FzIGNsYWltZWQgYnkgdGhpcyBwcm9jZXNzLiBBbHNvIG1ha2VzCisgKiBzdXJlIHRoYXQgdGhlIHN0cmVhbSBoYXMgYmVlbiBzdG9wcGVkLgorICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBmNzI5MTRkLi43NTZmODMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTE4LDYgKzExOCw3IEBACiBoZWFkZXIteSArPSBuY3Bfbm8uaAogaGVhZGVyLXkgKz0gbmVpZ2hib3VyLmgKIGhlYWRlci15ICs9IG5ldF9kcm9wbW9uLmgKK2hlYWRlci15ICs9IG5ldF90c3RhbXAuaAogaGVhZGVyLXkgKz0gbmV0ZmlsdGVyX2FycC5oCiBoZWFkZXIteSArPSBuZXRyb20uaAogaGVhZGVyLXkgKz0gbmZzMi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IGRmY2Q5MjAuLmNlOTQ1ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0yNDAsNyArMjQwLDcgQEAKICNkZWZpbmUgUFhNX0lOVkFMCSgtMSkKICNkZWZpbmUgTklEX0lOVkFMCSgtMSkKIAotaW50IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3Qoc3RydWN0IHJlc291cmNlICpyZXMpOworaW50IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMpOwogCiBpbnQgYWNwaV9jaGVja19yZWdpb24ocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgbiwKIAkJICAgICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0yNTMsMTAgKzI1MywxNiBAQAogdm9pZCBfX2luaXQgYWNwaV9zNF9ub19udnModm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKK3N0cnVjdCBhY3BpX29zY19jb250ZXh0IHsKKwljaGFyICp1dWlkX3N0cjsgLyogdXVpZCBzdHJpbmcgKi8KKwlpbnQgcmV2OworCXN0cnVjdCBhY3BpX2J1ZmZlciBjYXA7IC8qIGFyZzIvYXJnMyAqLworCXN0cnVjdCBhY3BpX2J1ZmZlciByZXQ7IC8qIGZyZWUgYnkgY2FsbGVyIGlmIHN1Y2Nlc3MgKi8KK307CisKICNkZWZpbmUgT1NDX1FVRVJZX1RZUEUJCQkwCiAjZGVmaW5lIE9TQ19TVVBQT1JUX1RZUEUgCQkxCiAjZGVmaW5lIE9TQ19DT05UUk9MX1RZUEUJCTIKLSNkZWZpbmUgT1NDX1NVUFBPUlRfTUFTS1MJCTB4MWYKIAogLyogX09TQyBEVzAgRGVmaW5pdGlvbiAqLwogI2RlZmluZSBPU0NfUVVFUllfRU5BQkxFCQkxCkBAIC0yNjUsMTIgKzI3MSwyMyBAQAogI2RlZmluZSBPU0NfSU5WQUxJRF9SRVZJU0lPTl9FUlJPUgk4CiAjZGVmaW5lIE9TQ19DQVBBQklMSVRJRVNfTUFTS19FUlJPUgkxNgogCithY3BpX3N0YXR1cyBhY3BpX3J1bl9vc2MoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9vc2NfY29udGV4dCAqY29udGV4dCk7CisKKy8qIHBsYXRmb3JtLXdpZGUgX09TQyBiaXRzICovCisjZGVmaW5lIE9TQ19TQl9QQURfU1VQUE9SVAkJMQorI2RlZmluZSBPU0NfU0JfUFBDX09TVF9TVVBQT1JUCQkyCisjZGVmaW5lIE9TQ19TQl9QUjNfU1VQUE9SVAkJNAorI2RlZmluZSBPU0NfU0JfQ1BVSFBfT1NUX1NVUFBPUlQJOAorI2RlZmluZSBPU0NfU0JfQVBFSV9TVVBQT1JUCQkxNgorCisvKiBQQ0kgZGVmaW5lZCBfT1NDIGJpdHMgKi8KIC8qIF9PU0MgRFcxIERlZmluaXRpb24gKE9TIFN1cHBvcnQgRmllbGRzKSAqLwogI2RlZmluZSBPU0NfRVhUX1BDSV9DT05GSUdfU1VQUE9SVAkJMQogI2RlZmluZSBPU0NfQUNUSVZFX1NUQVRFX1BXUl9TVVBQT1JUIAkJMgogI2RlZmluZSBPU0NfQ0xPQ0tfUFdSX0NBUEFCSUxJVFlfU1VQUE9SVAk0CiAjZGVmaW5lIE9TQ19QQ0lfU0VHTUVOVF9HUk9VUFNfU1VQUE9SVAkJOAogI2RlZmluZSBPU0NfTVNJX1NVUFBPUlQJCQkJMTYKKyNkZWZpbmUgT1NDX1BDSV9TVVBQT1JUX01BU0tTCQkJMHgxZgogCiAvKiBfT1NDIERXMSBEZWZpbml0aW9uIChPUyBDb250cm9sIEZpZWxkcykgKi8KICNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MCTEKQEAgLTI3OSw3ICsyOTYsNyBAQAogI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfQUVSX0NPTlRST0wJCTgKICNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTAkxNgogCi0jZGVmaW5lIE9TQ19DT05UUk9MX01BU0tTIAkoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwgCVwKKyNkZWZpbmUgT1NDX1BDSV9DT05UUk9MX01BU0tTIAkoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwgCVwKIAkJCQlPU0NfU0hQQ19OQVRJVkVfSFBfQ09OVFJPTCB8IAkJXAogCQkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CQlcCiAJCQkJT1NDX1BDSV9FWFBSRVNTX0FFUl9DT05UUk9MIHwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWlvLmggYi9pbmNsdWRlL2xpbnV4L2Fpby5oCmluZGV4IGFlYTIxOWQuLjgxMWRiYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9haW8uaApAQCAtMTAyLDcgKzEwMiw2IEBACiAJfSBraV9vYmo7CiAKIAlfX3U2NAkJCWtpX3VzZXJfZGF0YTsJLyogdXNlcidzIGRhdGEgZm9yIGNvbXBsZXRpb24gKi8KLQl3YWl0X3F1ZXVlX3QJCWtpX3dhaXQ7CiAJbG9mZl90CQkJa2lfcG9zOwogCiAJdm9pZAkJCSpwcml2YXRlOwpAQCAtMTQwLDcgKzEzOSw2IEBACiAJCSh4KS0+a2lfZHRvciA9IE5VTEw7CQkJXAogCQkoeCktPmtpX29iai50c2sgPSB0c2s7CQkJXAogCQkoeCktPmtpX3VzZXJfZGF0YSA9IDA7ICAgICAgICAgICAgICAgICAgXAotCQlpbml0X3dhaXQoKCYoeCktPmtpX3dhaXQpKTsgICAgICAgICAgICAgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgQUlPX1JJTkdfTUFHSUMJCQkweGExMGExMGExCkBAIC0yMjMsOCArMjIxLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X2FpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9CiAjZW5kaWYgLyogQ09ORklHX0FJTyAqLwogCi0jZGVmaW5lIGlvX3dhaXRfdG9fa2lvY2Iod2FpdCkgY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBraW9jYiwga2lfd2FpdCkKLQogc3RhdGljIGlubGluZSBzdHJ1Y3Qga2lvY2IgKmxpc3Rfa2lvY2Ioc3RydWN0IGxpc3RfaGVhZCAqaCkKIHsKIAlyZXR1cm4gbGlzdF9lbnRyeShoLCBzdHJ1Y3Qga2lvY2IsIGtpX2xpc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaCBiL2luY2x1ZGUvbGludXgvYXRtZWwtbWNpLmgKaW5kZXggNTdiMTg0Ni4uM2UwOWIzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1lbC1tY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWVsLW1jaS5oCkBAIC0zLDggKzMsNiBAQAogCiAjZGVmaW5lIEFUTUVMX01DSV9NQVhfTlJfU0xPVFMJMgogCi0jaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgotCiAvKioKICAqIHN0cnVjdCBtY2lfc2xvdF9wZGF0YSAtIGJvYXJkLXNwZWNpZmljIHBlci1zbG90IGNvbmZpZ3VyYXRpb24KICAqIEBidXNfd2lkdGg6IE51bWJlciBvZiBkYXRhIGxpbmVzIHdpcmVkIHVwIHRoZSBzbG90CkBAIC0zNCw3ICszMiw3IEBACiAgKiBAc2xvdDogUGVyLXNsb3QgY29uZmlndXJhdGlvbiBkYXRhLgogICovCiBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgewotCXN0cnVjdCBkd19kbWFfc2xhdmUJZG1hX3NsYXZlOworCXN0cnVjdCBtY2lfZG1hX2RhdGEJKmRtYV9zbGF2ZTsKIAlzdHJ1Y3QgbWNpX3Nsb3RfcGRhdGEJc2xvdFtBVE1FTF9NQ0lfTUFYX05SX1NMT1RTXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCmluZGV4IDBmNWY1NzguLjhjNGY4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaApAQCAtMzYsMTggKzM2LDE4IEBACiBzdHJ1Y3QgZmJfaW5mbzsKIAogc3RydWN0IGJhY2tsaWdodF9vcHMgewotCXVuc2lnbmVkIGludCBvcHRpb25zOworCWNvbnN0IHVuc2lnbmVkIGludCBvcHRpb25zOwogCiAjZGVmaW5lIEJMX0NPUkVfU1VTUEVORFJFU1VNRQkoMSA8PCAwKQogCiAJLyogTm90aWZ5IHRoZSBiYWNrbGlnaHQgZHJpdmVyIHNvbWUgcHJvcGVydHkgaGFzIGNoYW5nZWQgKi8KLQlpbnQgKCp1cGRhdGVfc3RhdHVzKShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqKTsKKwlpbnQgKCogY29uc3QgdXBkYXRlX3N0YXR1cykoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKik7CiAJLyogUmV0dXJuIHRoZSBjdXJyZW50IGJhY2tsaWdodCBicmlnaHRuZXNzIChhY2NvdW50aW5nIGZvciBwb3dlciwKIAkgICBmYl9ibGFuayBldGMuKSAqLwotCWludCAoKmdldF9icmlnaHRuZXNzKShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqKTsKKwlpbnQgKCogY29uc3QgZ2V0X2JyaWdodG5lc3MpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICopOwogCS8qIENoZWNrIGlmIGdpdmVuIGZyYW1lYnVmZmVyIGRldmljZSBpcyB0aGUgb25lIGJvdW5kIHRvIHRoaXMgYmFja2xpZ2h0OwogCSAgIHJldHVybiAwIGlmIG5vdCwgIT0wIGlmIGl0IGlzLiBJZiBOVUxMLCBiYWNrbGlnaHQgYWx3YXlzIG1hdGNoZXMgdGhlIGZiLiAqLwotCWludCAoKmNoZWNrX2ZiKShzdHJ1Y3QgZmJfaW5mbyAqKTsKKwlpbnQgKCogY29uc3QgY2hlY2tfZmIpKHN0cnVjdCBmYl9pbmZvICopOwogfTsKIAogLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBiYWNrbGlnaHQgKi8KQEAgLTg2LDcgKzg2LDcgQEAKIAkgICByZWdpc3RlcmVkIHRoaXMgZGV2aWNlIGhhcyBiZWVuIHVubG9hZGVkLCBhbmQgaWYgY2xhc3NfZ2V0X2RldmRhdGEoKQogCSAgIHBvaW50cyB0byBzb21ldGhpbmcgaW4gdGhlIGJvZHkgb2YgdGhhdCBkcml2ZXIsIGl0IGlzIGFsc28gaW52YWxpZC4gKi8KIAlzdHJ1Y3QgbXV0ZXggb3BzX2xvY2s7Ci0Jc3RydWN0IGJhY2tsaWdodF9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzOwogCiAJLyogVGhlIGZyYW1lYnVmZmVyIG5vdGlmaWVyIGJsb2NrICovCiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZiX25vdGlmOwpAQCAtMTAzLDcgKzEwMyw3IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLAotCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IGJhY2tsaWdodF9vcHMgKm9wcyk7CisJc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkZXZkYXRhLCBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIGJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpOwogZXh0ZXJuIHZvaWQgYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsCiAJCQkJICAgZW51bSBiYWNrbGlnaHRfdXBkYXRlX3JlYXNvbiByZWFzb24pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCBhZWNlNDg2Li5jZDQzNDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtNjgsNiArNjgsMTQgQEAKIAogI2RlZmluZSBCSU5QUk1fTUFYX1JFQ1VSU0lPTiA0CiAKKy8qIEZ1bmN0aW9uIHBhcmFtZXRlciBmb3IgYmluZm10LT5jb3JlZHVtcCAqLworc3RydWN0IGNvcmVkdW1wX3BhcmFtcyB7CisJbG9uZyBzaWducjsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwl1bnNpZ25lZCBsb25nIGxpbWl0OworfTsKKwogLyoKICAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIGxvYWQgdGhlIGJpbmFyeSBmb3JtYXRzIHRoYXQKICAqIGxpbnV4IGFjY2VwdHMuCkBAIC03Nyw3ICs4NSw3IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCWludCAoKmxvYWRfYmluYXJ5KShzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCAgcHRfcmVncyAqIHJlZ3MpOwogCWludCAoKmxvYWRfc2hsaWIpKHN0cnVjdCBmaWxlICopOwotCWludCAoKmNvcmVfZHVtcCkobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGxpbWl0KTsKKwlpbnQgKCpjb3JlX2R1bXApKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogCXVuc2lnbmVkIGxvbmcgbWluX2NvcmVkdW1wOwkvKiBtaW5pbWFsIGR1bXAgc2l6ZSAqLwogCWludCBoYXN2ZHNvOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDc1NmQ3OGIuLmRhZjhjNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtNDIsNiArNDIsOSBAQAogICogYml0bWFwX2VtcHR5KHNyYywgbmJpdHMpCQkJQXJlIGFsbCBiaXRzIHplcm8gaW4gKnNyYz8KICAqIGJpdG1hcF9mdWxsKHNyYywgbmJpdHMpCQkJQXJlIGFsbCBiaXRzIHNldCBpbiAqc3JjPwogICogYml0bWFwX3dlaWdodChzcmMsIG5iaXRzKQkJCUhhbW1pbmcgV2VpZ2h0OiBudW1iZXIgc2V0IGJpdHMKKyAqIGJpdG1hcF9zZXQoZHN0LCBwb3MsIG5iaXRzKQkJCVNldCBzcGVjaWZpZWQgYml0IGFyZWEKKyAqIGJpdG1hcF9jbGVhcihkc3QsIHBvcywgbmJpdHMpCQlDbGVhciBzcGVjaWZpZWQgYml0IGFyZWEKKyAqIGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGJ1ZiwgbGVuLCBwb3MsIG4sIG1hc2spCUZpbmQgYml0IGZyZWUgYXJlYQogICogYml0bWFwX3NoaWZ0X3JpZ2h0KGRzdCwgc3JjLCBuLCBuYml0cykJKmRzdCA9ICpzcmMgPj4gbgogICogYml0bWFwX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4sIG5iaXRzKQkqZHN0ID0gKnNyYyA8PCBuCiAgKiBiaXRtYXBfcmVtYXAoZHN0LCBzcmMsIG9sZCwgbmV3LCBuYml0cykJKmRzdCA9IG1hcChvbGQsIG5ldykoc3JjKQpAQCAtMTA4LDYgKzExMSwxNCBAQAogCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwMiwgaW50IGJpdHMpOwogZXh0ZXJuIGludCBfX2JpdG1hcF93ZWlnaHQoY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgYml0cyk7CiAKK2V4dGVybiB2b2lkIGJpdG1hcF9zZXQodW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgaSwgaW50IGxlbik7CitleHRlcm4gdm9pZCBiaXRtYXBfY2xlYXIodW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc3RhcnQsIGludCBucik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJlYSh1bnNpZ25lZCBsb25nICptYXAsCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgdW5zaWduZWQgaW50IG5yLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrKTsKKwogZXh0ZXJuIGludCBiaXRtYXBfc2NucHJpbnRmKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG5iaXRzKTsKIGV4dGVybiBpbnQgX19iaXRtYXBfcGFyc2UoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgaXNfdXNlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaAppbmRleCA5ZWNiYjc4Li5jODE4MzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9jYW4vbmV0bGluay5oCkBAIC04MCw2ICs4MCw3IEBACiAjZGVmaW5lIENBTl9DVFJMTU9ERV9MT09QQkFDSwkweDEJLyogTG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBDQU5fQ1RSTE1PREVfTElTVEVOT05MWQkweDIgCS8qIExpc3Rlbi1vbmx5IG1vZGUgKi8KICNkZWZpbmUgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUwkweDQJLyogVHJpcGxlIHNhbXBsaW5nIG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX09ORV9TSE9UCTB4OAkvKiBPbmUtU2hvdCBtb2RlICovCiAKIC8qCiAgKiBDQU4gZGV2aWNlIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1LmggYi9pbmNsdWRlL2xpbnV4L2NwdS5oCmluZGV4IDQ3NTM2MTkuLmUyODc4NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHUuaApAQCAtNDMsNiArNDMsOCBAQAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2NwdShzdHJ1Y3QgY3B1ICpjcHUpOworZXh0ZXJuIHNzaXplX3QgYXJjaF9jcHVfcHJvYmUoY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3QgYXJjaF9jcHVfcmVsZWFzZShjb25zdCBjaGFyICosIHNpemVfdCk7CiAjZW5kaWYKIHN0cnVjdCBub3RpZmllcl9ibG9jazsKIApAQCAtMTE1LDYgKzExNywxOSBAQAogI2RlZmluZSB1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIobmIpCiBpbnQgY3B1X2Rvd24odW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9DUFVfUFJPQkVfUkVMRUFTRQorZXh0ZXJuIHZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX2xvY2sodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfdW5sb2NrKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfbG9jayh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX3VubG9jayh2b2lkKQoreworfQorI2VuZGlmCisKICNlbHNlCQkvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogI2RlZmluZSBnZXRfb25saW5lX2NwdXMoKQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCmluZGV4IDc4OWNmNWYuLmQ3N2I1NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCkBAIC04NCw2ICs4NCw3IEBACiAjZGVmaW5lIG51bV9vbmxpbmVfY3B1cygpCWNwdW1hc2tfd2VpZ2h0KGNwdV9vbmxpbmVfbWFzaykKICNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKQljcHVtYXNrX3dlaWdodChjcHVfcG9zc2libGVfbWFzaykKICNkZWZpbmUgbnVtX3ByZXNlbnRfY3B1cygpCWNwdW1hc2tfd2VpZ2h0KGNwdV9wcmVzZW50X21hc2spCisjZGVmaW5lIG51bV9hY3RpdmVfY3B1cygpCWNwdW1hc2tfd2VpZ2h0KGNwdV9hY3RpdmVfbWFzaykKICNkZWZpbmUgY3B1X29ubGluZShjcHUpCQljcHVtYXNrX3Rlc3RfY3B1KChjcHUpLCBjcHVfb25saW5lX21hc2spCiAjZGVmaW5lIGNwdV9wb3NzaWJsZShjcHUpCWNwdW1hc2tfdGVzdF9jcHUoKGNwdSksIGNwdV9wb3NzaWJsZV9tYXNrKQogI2RlZmluZSBjcHVfcHJlc2VudChjcHUpCWNwdW1hc2tfdGVzdF9jcHUoKGNwdSksIGNwdV9wcmVzZW50X21hc2spCkBAIC05Miw2ICs5Myw3IEBACiAjZGVmaW5lIG51bV9vbmxpbmVfY3B1cygpCTEKICNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKQkxCiAjZGVmaW5lIG51bV9wcmVzZW50X2NwdXMoKQkxCisjZGVmaW5lIG51bV9hY3RpdmVfY3B1cygpCTEKICNkZWZpbmUgY3B1X29ubGluZShjcHUpCQkoKGNwdSkgPT0gMCkKICNkZWZpbmUgY3B1X3Bvc3NpYmxlKGNwdSkJKChjcHUpID09IDApCiAjZGVmaW5lIGNwdV9wcmVzZW50KGNwdSkJKChjcHUpID09IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NzNTUzNS5oIGIvaW5jbHVkZS9saW51eC9jczU1MzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWExZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jczU1MzUuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIEFNRCBDUzU1MzUvQ1M1NTM2IGRlZmluaXRpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAgQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0NTNTUzNV9ICisjZGVmaW5lIF9DUzU1MzVfSAorCisvKiBNU1JzICovCisjZGVmaW5lIE1TUl9HTElVX1AyRF9STzAJMHgxMDAwMDAyOQorCisjZGVmaW5lIE1TUl9MWF9HTERfTVNSX0NPTkZJRwkweDQ4MDAyMDAxCisjZGVmaW5lIE1TUl9MWF9NU1JfUEFEU0VMCTB4NDgwMDIwMTEJLyogTk9UIDB4NDgwMDAwMTE7IHRoZSBkYXRhCisJCQkJCQkgKiBzaGVldCBoYXMgdGhlIHdyb25nIHZhbHVlICovCisjZGVmaW5lIE1TUl9HTENQX1NZU19SU1RQTEwJMHg0QzAwMDAxNAorI2RlZmluZSBNU1JfR0xDUF9ET1RQTEwJCTB4NEMwMDAwMTUKKworI2RlZmluZSBNU1JfTEJBUl9TTUIJCTB4NTE0MDAwMEIKKyNkZWZpbmUgTVNSX0xCQVJfR1BJTwkJMHg1MTQwMDAwQworI2RlZmluZSBNU1JfTEJBUl9NRkdQVAkJMHg1MTQwMDAwRAorI2RlZmluZSBNU1JfTEJBUl9BQ1BJCQkweDUxNDAwMDBFCisjZGVmaW5lIE1TUl9MQkFSX1BNUwkJMHg1MTQwMDAwRgorCisjZGVmaW5lIE1TUl9ESVZJTF9TT0ZUX1JFU0VUCTB4NTE0MDAwMTcKKworI2RlZmluZSBNU1JfUElDX1lTRUxfTE9XCTB4NTE0MDAwMjAKKyNkZWZpbmUgTVNSX1BJQ19ZU0VMX0hJR0gJMHg1MTQwMDAyMQorI2RlZmluZSBNU1JfUElDX1pTRUxfTE9XCTB4NTE0MDAwMjIKKyNkZWZpbmUgTVNSX1BJQ19aU0VMX0hJR0gJMHg1MTQwMDAyMworI2RlZmluZSBNU1JfUElDX0lSUU1fTFBDCTB4NTE0MDAwMjUKKworI2RlZmluZSBNU1JfTUZHUFRfSVJRCQkweDUxNDAwMDI4CisjZGVmaW5lIE1TUl9NRkdQVF9OUgkJMHg1MTQwMDAyOQorI2RlZmluZSBNU1JfTUZHUFRfU0VUVVAJCTB4NTE0MDAwMkIKKworI2RlZmluZSBNU1JfTFhfU1BBUkVfTVNSCTB4ODAwMDAwMTEJLyogREMtc3BlY2lmaWMgKi8KKworI2RlZmluZSBNU1JfR1hfR0xEX01TUl9DT05GSUcJMHhDMDAwMjAwMQorI2RlZmluZSBNU1JfR1hfTVNSX1BBRFNFTAkweEMwMDAyMDExCisKKy8qIHJlc291cmNlIHNpemVzICovCisjZGVmaW5lIExCQVJfR1BJT19TSVpFCQkweEZGCisjZGVmaW5lIExCQVJfTUZHUFRfU0laRQkJMHg0MAorI2RlZmluZSBMQkFSX0FDUElfU0laRQkJMHg0MAorI2RlZmluZSBMQkFSX1BNU19TSVpFCQkweDgwCisKKy8qIFZTQTIgbWFnaWMgdmFsdWVzICovCisjZGVmaW5lIFZTQV9WUkNfSU5ERVgJCTB4QUMxQworI2RlZmluZSBWU0FfVlJDX0RBVEEJCTB4QUMxRQorI2RlZmluZSBWU0FfVlJfVU5MT0NLCQkweEZDNTMgIC8qIHVubG9jayB2aXJ0dWFsIHJlZ2lzdGVyICovCisjZGVmaW5lIFZTQV9WUl9TSUdOQVRVUkUJMHgwMDAzCisjZGVmaW5lIFZTQV9WUl9NRU1fU0laRQkJMHgwMjAwCisjZGVmaW5lIEFNRF9WU0FfU0lHCQkweDQxMzIgIC8qIHNpZ25hdHVyZSBpcyBhc2NpaSAnVlNBMicgKi8KKyNkZWZpbmUgR1NXX1ZTQV9TSUcJCTB4NTM0ZCAgLyogR2VuZXJhbCBTb2Z0d2FyZSBzaWduYXR1cmUgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGNzNTUzNV9oYXNfdnNhMih2b2lkKQoreworCXN0YXRpYyBpbnQgaGFzX3ZzYTIgPSAtMTsKKworCWlmIChoYXNfdnNhMiA9PSAtMSkgeworCQl1aW50MTZfdCB2YWw7CisKKwkJLyoKKwkJICogVGhlIFZTQSBoYXMgdmlydHVhbCByZWdpc3RlcnMgdGhhdCB3ZSBjYW4gcXVlcnkgZm9yIGEKKwkJICogc2lnbmF0dXJlLgorCQkgKi8KKwkJb3V0dyhWU0FfVlJfVU5MT0NLLCBWU0FfVlJDX0lOREVYKTsKKwkJb3V0dyhWU0FfVlJfU0lHTkFUVVJFLCBWU0FfVlJDX0lOREVYKTsKKworCQl2YWwgPSBpbncoVlNBX1ZSQ19EQVRBKTsKKwkJaGFzX3ZzYTIgPSAodmFsID09IEFNRF9WU0FfU0lHIHx8IHZhbCA9PSBHU1dfVlNBX1NJRyk7CisJfQorCisJcmV0dXJuIGhhc192c2EyOworfQorCisvKiBHUElPcyAqLworI2RlZmluZSBHUElPX09VVFBVVF9WQUwJCTB4MDAKKyNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFCTB4MDQKKyNkZWZpbmUgR1BJT19PVVRQVVRfT1BFTl9EUkFJTgkweDA4CisjZGVmaW5lIEdQSU9fT1VUUFVUX0lOVkVSVAkweDBDCisjZGVmaW5lIEdQSU9fT1VUUFVUX0FVWDEJMHgxMAorI2RlZmluZSBHUElPX09VVFBVVF9BVVgyCTB4MTQKKyNkZWZpbmUgR1BJT19QVUxMX1VQCQkweDE4CisjZGVmaW5lIEdQSU9fUFVMTF9ET1dOCQkweDFDCisjZGVmaW5lIEdQSU9fSU5QVVRfRU5BQkxFCTB4MjAKKyNkZWZpbmUgR1BJT19JTlBVVF9JTlZFUlQJMHgyNAorI2RlZmluZSBHUElPX0lOUFVUX0ZJTFRFUgkweDI4CisjZGVmaW5lIEdQSU9fSU5QVVRfRVZFTlRfQ09VTlQJMHgyQworI2RlZmluZSBHUElPX1JFQURfQkFDSwkJMHgzMAorI2RlZmluZSBHUElPX0lOUFVUX0FVWDEJCTB4MzQKKyNkZWZpbmUgR1BJT19FVkVOVFNfRU5BQkxFCTB4MzgKKyNkZWZpbmUgR1BJT19MT0NLX0VOQUJMRQkweDNDCisjZGVmaW5lIEdQSU9fUE9TSVRJVkVfRURHRV9FTgkweDQwCisjZGVmaW5lIEdQSU9fTkVHQVRJVkVfRURHRV9FTgkweDQ0CisjZGVmaW5lIEdQSU9fUE9TSVRJVkVfRURHRV9TVFMJMHg0OAorI2RlZmluZSBHUElPX05FR0FUSVZFX0VER0VfU1RTCTB4NEMKKworI2RlZmluZSBHUElPX01BUF9YCQkweEUwCisjZGVmaW5lIEdQSU9fTUFQX1kJCTB4RTQKKyNkZWZpbmUgR1BJT19NQVBfWgkJMHhFOAorI2RlZmluZSBHUElPX01BUF9XCQkweEVDCisKK3ZvaWQgY3M1NTM1X2dwaW9fc2V0KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgaW50IHJlZyk7Cit2b2lkIGNzNTUzNV9ncGlvX2NsZWFyKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgaW50IHJlZyk7CitpbnQgY3M1NTM1X2dwaW9faXNzZXQodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcmVnKTsKKworLyogTUZHUFRzICovCisKKyNkZWZpbmUgTUZHUFRfTUFYX1RJTUVSUwk4CisjZGVmaW5lIE1GR1BUX1RJTUVSX0FOWQkJKC0xKQorCisjZGVmaW5lIE1GR1BUX0RPTUFJTl9XT1JLSU5HCTEKKyNkZWZpbmUgTUZHUFRfRE9NQUlOX1NUQU5EQlkJMgorI2RlZmluZSBNRkdQVF9ET01BSU5fQU5ZCShNRkdQVF9ET01BSU5fV09SS0lORyB8IE1GR1BUX0RPTUFJTl9TVEFOREJZKQorCisjZGVmaW5lIE1GR1BUX0NNUDEJCTAKKyNkZWZpbmUgTUZHUFRfQ01QMgkJMQorCisjZGVmaW5lIE1GR1BUX0VWRU5UX0lSUQkJMAorI2RlZmluZSBNRkdQVF9FVkVOVF9OTUkJCTEKKyNkZWZpbmUgTUZHUFRfRVZFTlRfUkVTRVQJMworCisjZGVmaW5lIE1GR1BUX1JFR19DTVAxCQkwCisjZGVmaW5lIE1GR1BUX1JFR19DTVAyCQkyCisjZGVmaW5lIE1GR1BUX1JFR19DT1VOVEVSCTQKKyNkZWZpbmUgTUZHUFRfUkVHX1NFVFVQCQk2CisKKyNkZWZpbmUgTUZHUFRfU0VUVVBfQ05URU4JKDEgPDwgMTUpCisjZGVmaW5lIE1GR1BUX1NFVFVQX0NNUDIJKDEgPDwgMTQpCisjZGVmaW5lIE1GR1BUX1NFVFVQX0NNUDEJKDEgPDwgMTMpCisjZGVmaW5lIE1GR1BUX1NFVFVQX1NFVFVQCSgxIDw8IDEyKQorI2RlZmluZSBNRkdQVF9TRVRVUF9TVE9QRU4JKDEgPDwgMTEpCisjZGVmaW5lIE1GR1BUX1NFVFVQX0VYVEVOCSgxIDw8IDEwKQorI2RlZmluZSBNRkdQVF9TRVRVUF9SRVZFTgkoMSA8PCA1KQorI2RlZmluZSBNRkdQVF9TRVRVUF9DTEtTRUwJKDEgPDwgNCkKKworc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lcjsKKworZXh0ZXJuIHVpbnQxNl90IGNzNTUzNV9tZmdwdF9yZWFkKHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyLAorCQl1aW50MTZfdCByZWcpOworZXh0ZXJuIHZvaWQgY3M1NTM1X21mZ3B0X3dyaXRlKHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyLCB1aW50MTZfdCByZWcsCisJCXVpbnQxNl90IHZhbHVlKTsKKworZXh0ZXJuIGludCBjczU1MzVfbWZncHRfdG9nZ2xlX2V2ZW50KHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyLCBpbnQgY21wLAorCQlpbnQgZXZlbnQsIGludCBlbmFibGUpOworZXh0ZXJuIGludCBjczU1MzVfbWZncHRfc2V0X2lycShzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICp0aW1lciwgaW50IGNtcCwKKwkJaW50ICppcnEsIGludCBlbmFibGUpOworZXh0ZXJuIHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKmNzNTUzNV9tZmdwdF9hbGxvY190aW1lcihpbnQgdGltZXIsCisJCWludCBkb21haW4pOworZXh0ZXJuIHZvaWQgY3M1NTM1X21mZ3B0X2ZyZWVfdGltZXIoc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqdGltZXIpOworCitzdGF0aWMgaW5saW5lIGludCBjczU1MzVfbWZncHRfc2V0dXBfaXJxKHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyLAorCQlpbnQgY21wLCBpbnQgKmlycSkKK3sKKwlyZXR1cm4gY3M1NTM1X21mZ3B0X3NldF9pcnEodGltZXIsIGNtcCwgaXJxLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3M1NTM1X21mZ3B0X3JlbGVhc2VfaXJxKHN0cnVjdCBjczU1MzVfbWZncHRfdGltZXIgKnRpbWVyLAorCQlpbnQgY21wLCBpbnQgKmlycSkKK3sKKwlyZXR1cm4gY3M1NTM1X21mZ3B0X3NldF9pcnEodGltZXIsIGNtcCwgaXJxLCAwKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N0eXBlLmggYi9pbmNsdWRlL2xpbnV4L2N0eXBlLmgKaW5kZXggYWZhMzYzOS4uYTNkNmVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jdHlwZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3R5cGUuaApAQCAtMTUsNyArMTUsNyBAQAogI2RlZmluZSBfWAkweDQwCS8qIGhleCBkaWdpdCAqLwogI2RlZmluZSBfU1AJMHg4MAkvKiBoYXJkIHNwYWNlICgweDIwKSAqLwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBfY3R5cGVbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIF9jdHlwZVtdOwogCiAjZGVmaW5lIF9faXNtYXNrKHgpIChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoeCldKQogCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIGlzbG93ZXIoYykJKChfX2lzbWFzayhjKSYoX0wpKSAhPSAwKQogI2RlZmluZSBpc3ByaW50KGMpCSgoX19pc21hc2soYykmKF9QfF9VfF9MfF9EfF9TUCkpICE9IDApCiAjZGVmaW5lIGlzcHVuY3QoYykJKChfX2lzbWFzayhjKSYoX1ApKSAhPSAwKQorLyogTm90ZTogaXNzcGFjZSgpIG11c3QgcmV0dXJuIGZhbHNlIGZvciAlTlVMLXRlcm1pbmF0b3IgKi8KICNkZWZpbmUgaXNzcGFjZShjKQkoKF9faXNtYXNrKGMpJihfUykpICE9IDApCiAjZGVmaW5lIGlzdXBwZXIoYykJKChfX2lzbWFzayhjKSYoX1UpKSAhPSAwKQogI2RlZmluZSBpc3hkaWdpdChjKQkoKF9faXNtYXNrKGMpJihfRHxfWCkpICE9IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaCBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCmluZGV4IDEyZmY4YzMuLjUwMzJiOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oCkBAIC0yNSw3ICsyNSw3IEBACiAJdm9pZCAqcDsKIAogCWlmIChzaXplIDwgMCkKLQkJZXJyb3IoIk1hbGxvYyBlcnJvciIpOworCQlyZXR1cm4gTlVMTDsKIAlpZiAoIW1hbGxvY19wdHIpCiAJCW1hbGxvY19wdHIgPSBmcmVlX21lbV9wdHI7CiAKQEAgLTM1LDcgKzM1LDcgQEAKIAltYWxsb2NfcHRyICs9IHNpemU7CiAKIAlpZiAoZnJlZV9tZW1fZW5kX3B0ciAmJiBtYWxsb2NfcHRyID49IGZyZWVfbWVtX2VuZF9wdHIpCi0JCWVycm9yKCJPdXQgb2YgbWVtb3J5Iik7CisJCXJldHVybiBOVUxMOwogCiAJbWFsbG9jX2NvdW50Kys7CiAJcmV0dXJuIHA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IGRmNzYwN2UuLmQ0YzljMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0yMzUsNyArMjM1LDcgQEAKIGNvbnN0IGNoYXIgKmRtX2RldmljZV9uYW1lKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CiBpbnQgZG1fY29weV9uYW1lX2FuZF91dWlkKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgY2hhciAqbmFtZSwgY2hhciAqdXVpZCk7CiBzdHJ1Y3QgZ2VuZGlzayAqZG1fZGlzayhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwotaW50IGRtX3N1c3BlbmRlZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOworaW50IGRtX3N1c3BlbmRlZChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSk7CiBpbnQgZG1fbm9mbHVzaF9zdXNwZW5kaW5nKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKIHVuaW9uIG1hcF9pbmZvICpkbV9nZXRfbWFwaW5mbyhzdHJ1Y3QgYmlvICpiaW8pOwogdW5pb24gbWFwX2luZm8gKmRtX2dldF9ycV9tYXBpbmZvKHN0cnVjdCByZXF1ZXN0ICpycSk7CkBAIC0yNzYsNyArMjc2LDcgQEAKIC8qCiAgKiBUYWJsZSByZWZlcmVuY2UgY291bnRpbmcuCiAgKi8KLXN0cnVjdCBkbV90YWJsZSAqZG1fZ2V0X3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CitzdHJ1Y3QgZG1fdGFibGUgKmRtX2dldF9saXZlX3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CiB2b2lkIGRtX3RhYmxlX2dldChzdHJ1Y3QgZG1fdGFibGUgKnQpOwogdm9pZCBkbV90YWJsZV9wdXQoc3RydWN0IGRtX3RhYmxlICp0KTsKIApAQCAtMjk1LDggKzI5NSwxMCBAQAogCiAvKgogICogVGhlIGRldmljZSBtdXN0IGJlIHN1c3BlbmRlZCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4KKyAqIFJldHVybnMgdGhlIHByZXZpb3VzIHRhYmxlLCB3aGljaCB0aGUgY2FsbGVyIG11c3QgZGVzdHJveS4KICAqLwotaW50IGRtX3N3YXBfdGFibGUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgZG1fdGFibGUgKnQpOworc3RydWN0IGRtX3RhYmxlICpkbV9zd2FwX3RhYmxlKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwKKwkJCSAgICAgICBzdHJ1Y3QgZG1fdGFibGUgKnQpOwogCiAvKgogICogQSB3cmFwcGVyIGFyb3VuZCB2bWFsbG9jLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggMmE3M2Q5Yi4uYTYyNzk5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xNjYsOSArMTY2LDkgQEAKIAlfX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQogCiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKLQkJCQkJICAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCQljb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKLQkJCSAgICAgICBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkgICAgICAgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpOwogCiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYWRkX2tvYmooc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKIAkJCQkJc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0zMTksMTMgKzMxOSwxMyBAQAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICplbnRyeSk7CisJCQkJCWNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICplbnRyeSk7CiBleHRlcm4gdm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKTsKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKKwkJCQkJY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCSAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiBpbnQgZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrX293bmVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdm9pZCAoKmZ1bmMpKHN0cnVjdCBkZXZpY2UgKmRldiksIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaCBiL2luY2x1ZGUvbGludXgvZG0tZGlydHktbG9nLmgKaW5kZXggNWU4YjExZC4uNzA4NDUwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWRpcnR5LWxvZy5oCkBAIC0yMSw2ICsyMSw3IEBACiAKIHN0cnVjdCBkbV9kaXJ0eV9sb2cgewogCXN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqdHlwZTsKKwlpbnQgKCpmbHVzaF9jYWxsYmFja19mbikoc3RydWN0IGRtX3RhcmdldCAqdGkpOwogCXZvaWQgKmNvbnRleHQ7CiB9OwogCkBAIC0xMzYsOCArMTM3LDkgQEAKICAqIHR5cGUtPmNvbnN0cnVjdG9yL2Rlc3RydWN0b3IoKSBkaXJlY3RseS4KICAqLwogc3RydWN0IGRtX2RpcnR5X2xvZyAqZG1fZGlydHlfbG9nX2NyZWF0ZShjb25zdCBjaGFyICp0eXBlX25hbWUsCi0JCQkJCSBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwKLQkJCQkJIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KTsKKwkJCXN0cnVjdCBkbV90YXJnZXQgKnRpLAorCQkJaW50ICgqZmx1c2hfY2FsbGJhY2tfZm4pKHN0cnVjdCBkbV90YXJnZXQgKnRpKSwKKwkJCXVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KTsKIHZvaWQgZG1fZGlydHlfbG9nX2Rlc3Ryb3koc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nKTsKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAppbmRleCAyYWI4NGM4Li5hYTk1NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDMgU2lzdGluYSBTb2Z0d2FyZSAoVUspIExpbWl0ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTEdQTC4KICAqLwpAQCAtMjY2LDkgKzI2Niw5IEBACiAjZGVmaW5lIERNX0RFVl9TRVRfR0VPTUVUUlkJX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9TRVRfR0VPTUVUUllfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCiAKICNkZWZpbmUgRE1fVkVSU0lPTl9NQUpPUgk0Ci0jZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMTUKKyNkZWZpbmUgRE1fVkVSU0lPTl9NSU5PUgkxNgogI2RlZmluZSBETV9WRVJTSU9OX1BBVENITEVWRUwJMAotI2RlZmluZSBETV9WRVJTSU9OX0VYVFJBCSItaW9jdGwgKDIwMDktMDQtMDEpIgorI2RlZmluZSBETV9WRVJTSU9OX0VYVFJBCSItaW9jdGwgKDIwMDktMTEtMDUpIgogCiAvKiBTdGF0dXMgYml0cyAqLwogI2RlZmluZSBETV9SRUFET05MWV9GTEFHCSgxIDw8IDApIC8qIEluL091dCAqLwpAQCAtMzA5LDQgKzMwOSwxMSBAQAogICovCiAjZGVmaW5lIERNX05PRkxVU0hfRkxBRwkJKDEgPDwgMTEpIC8qIEluICovCiAKKy8qCisgKiBJZiBzZXQsIGFueSB0YWJsZSBpbmZvcm1hdGlvbiByZXR1cm5lZCB3aWxsIHJlbGF0ZSB0byB0aGUgaW5hY3RpdmUKKyAqIHRhYmxlIGluc3RlYWQgb2YgdGhlIGxpdmUgb25lLiAgQWx3YXlzIGNoZWNrIERNX0lOQUNUSVZFX1BSRVNFTlRfRkxBRworICogaXMgc2V0IGJlZm9yZSB1c2luZyB0aGUgZGF0YSByZXR1cm5lZC4KKyAqLworI2RlZmluZSBETV9RVUVSWV9JTkFDVElWRV9UQUJMRV9GTEFHCSgxIDw8IDEyKSAvKiBJbiAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX0RNX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0tcmVnaW9uLWhhc2guaCBiL2luY2x1ZGUvbGludXgvZG0tcmVnaW9uLWhhc2guaAppbmRleCBhOWU2NTJhLi45ZTJhN2E0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLXJlZ2lvbi1oYXNoLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1yZWdpb24taGFzaC5oCkBAIC03OCw4ICs3OCw3IEBACiAvKiBEZWxheSBiaW9zIG9uIHJlZ2lvbnMuICovCiB2b2lkIGRtX3JoX2RlbGF5KHN0cnVjdCBkbV9yZWdpb25faGFzaCAqcmgsIHN0cnVjdCBiaW8gKmJpbyk7CiAKLXZvaWQgZG1fcmhfbWFya19ub3N5bmMoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwKLQkJICAgICAgIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgZG9uZSwgaW50IGVycm9yKTsKK3ZvaWQgZG1fcmhfbWFya19ub3N5bmMoc3RydWN0IGRtX3JlZ2lvbl9oYXNoICpyaCwgc3RydWN0IGJpbyAqYmlvKTsKIAogLyoKICAqIFJlZ2lvbiByZWNvdmVyeSBjb250cm9sLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKaW5kZXggMmI5ZjJhYy4uNzg3ODQ5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCkBAIC03NCw3ICs3NCw3IEBACiAgKiAgY29udHJvbCBjb21wbGV0aW9uLCBhbmQgY29tbXVuaWNhdGUgc3RhdHVzLgogICogQERNQV9QUkVQX0lOVEVSUlVQVCAtIHRyaWdnZXIgYW4gaW50ZXJydXB0IChjYWxsYmFjaykgdXBvbiBjb21wbGV0aW9uIG9mCiAgKiAgdGhpcyB0cmFuc2FjdGlvbgotICogQERNQV9DVFJMX0FDSyAtIHRoZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSByZXVzZWQgdW50aWwgdGhlIGNsaWVudAorICogQERNQV9DVFJMX0FDSyAtIGlmIGNsZWFyLCB0aGUgZGVzY3JpcHRvciBjYW5ub3QgYmUgcmV1c2VkIHVudGlsIHRoZSBjbGllbnQKICAqICBhY2tub3dsZWRnZXMgcmVjZWlwdCwgaS5lLiBoYXMgaGFzIGEgY2hhbmNlIHRvIGVzdGFibGlzaCBhbnkgZGVwZW5kZW5jeQogICogIGNoYWlucwogICogQERNQV9DT01QTF9TS0lQX1NSQ19VTk1BUCAtIHNldCB0byBkaXNhYmxlIGRtYS11bm1hcHBpbmcgdGhlIHNvdXJjZSBidWZmZXIocykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHN0LmggYi9pbmNsdWRlL2xpbnV4L2RzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjZmZWQ4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZHN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODcgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX19EU1RfSAotI2RlZmluZSBfX0RTVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgotCi0jZGVmaW5lIERTVF9OQU1FTEVOCQkzMgotI2RlZmluZSBEU1RfTkFNRQkJImRzdCIKLQotZW51bSB7Ci0JLyogUmVtb3ZlIG5vZGUgd2l0aCBnaXZlbiBpZCBmcm9tIHN0b3JhZ2UgKi8KLQlEU1RfREVMX05PREUJPSAwLAotCS8qIEFkZCByZW1vdGUgbm9kZSB3aXRoIGdpdmVuIGlkIHRvIHRoZSBzdG9yYWdlICovCi0JRFNUX0FERF9SRU1PVEUsCi0JLyogQWRkIGxvY2FsIG5vZGUgd2l0aCBnaXZlbiBpZCB0byB0aGUgc3RvcmFnZSB0byBiZSBleHBvcnRlZCBhbmQgdXNlZCBieSByZW1vdGUgcGVlcnMgKi8KLQlEU1RfQUREX0VYUE9SVCwKLQkvKiBDcnlwdG8gaW5pdGlhbGl6YXRpb24gY29tbWFuZCAoaGFzaC9jaXBoZXIgdXNlZCB0byBwcm90ZWN0IHRoZSBjb25uZWN0aW9uKSAqLwotCURTVF9DUllQVE8sCi0JLyogU2VjdXJpdHkgYXR0cmlidXRlcyBmb3IgZ2l2ZW4gY29ubmVjdGlvbiAocGVybWlzc2lvbnMgZm9yIGV4YW1wbGUpICovCi0JRFNUX1NFQ1VSSVRZLAotCS8qIFJlZ2lzdGVyIGdpdmVuIG5vZGUgaW4gdGhlIGJsb2NrIGxheWVyIHN1YnN5c3RlbSAqLwotCURTVF9TVEFSVCwKLQlEU1RfQ01EX01BWAotfTsKLQotc3RydWN0IGRzdF9jdGwKLXsKLQkvKiBTdG9yYWdlIG5hbWUgKi8KLQljaGFyCQkJbmFtZVtEU1RfTkFNRUxFTl07Ci0JLyogQ29tbWFuZCBmbGFncyAqLwotCV9fdTMyCQkJZmxhZ3M7Ci0JLyogQ29tbWFuZCBpdHNlbGYgKHNlZSBhYm92ZSkgKi8KLQlfX3UzMgkJCWNtZDsKLQkvKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBwZXIgc2luZ2xlIHJlcXVlc3QgaW4gdGhpcyBkZXZpY2UgKi8KLQlfX3UzMgkJCW1heF9wYWdlczsKLQkvKiBTdGFsZS9lcnJvciB0cmFuc2FjdGlvbiBzY2FubmluZyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLwotCV9fdTMyCQkJdHJhbnNfc2Nhbl90aW1lb3V0OwotCS8qIE1heGltdW0gbnVtYmVyIG9mIHJldHJ5IHNlbmRzIGJlZm9yZSBjb21wbGV0aW5nIHRyYW5zYWN0aW9uIGFzIGJyb2tlbiAqLwotCV9fdTMyCQkJdHJhbnNfbWF4X3JldHJpZXM7Ci0JLyogU3RvcmFnZSBzaXplICovCi0JX191NjQJCQlzaXplOwotfTsKLQotLyogUmVwbHkgY29tbWFuZCBjYXJyaWVzIGNvbXBsZXRpb24gc3RhdHVzICovCi1zdHJ1Y3QgZHN0X2N0bF9hY2sKLXsKLQlzdHJ1Y3QgY25fbXNnCQltc2c7Ci0JaW50CQkJZXJyb3I7Ci0JaW50CQkJdW51c2VkWzNdOwotfTsKLQotLyoKLSAqIFVuZm9ydHVuYWx0ZWx5IHNvY2tldCBhZGRyZXNzIHN0cnVjdHVyZSBpcyBub3QgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlCi0gKiBhbmQgaXMgcmVkZWZpbmVkIHRoZXJlLgotICovCi0jZGVmaW5lIFNBRERSX01BWF9EQVRBCTEyOAotCi1zdHJ1Y3Qgc2FkZHIgewotCS8qIGFkZHJlc3MgZmFtaWx5LCBBRl94eHgJKi8KLQl1bnNpZ25lZCBzaG9ydAkJc2FfZmFtaWx5OwotCS8qIDE0IGJ5dGVzIG9mIHByb3RvY29sIGFkZHJlc3MJKi8KLQljaGFyCQkJc2FfZGF0YVtTQUREUl9NQVhfREFUQV07Ci0JLyogTnVtYmVyIG9mIGJ5dGVzIHVzZWQgaW4gc2FfZGF0YSAqLwotCXVuc2lnbmVkIHNob3J0CQlzYV9kYXRhX2xlbjsKLX07Ci0KLS8qIEFkZHJlc3Mgc3RydWN0dXJlICovCi1zdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCi17Ci0JLyogU29ja2V0IHR5cGU6IGRhdGFncmFtLCBzdHJlYW0uLi4qLwotCXVuc2lnbmVkIGludAkJdHlwZTsKLQkvKiBMZXQgbWUgZ3Vlc3MsIGlzIGl0IGEgSnVwaXRlciBkaWFtZXRlcj8gKi8KLQl1bnNpZ25lZCBpbnQJCXByb3RvOwotCS8qIFBlZXIncyBhZGRyZXNzICovCi0Jc3RydWN0IHNhZGRyCQlhZGRyOwotfTsKLQotc3RydWN0IGRzdF9jcnlwdG9fY3RsCi17Ci0JLyogQ2lwaGVyIGFuZCBoYXNoIG5hbWVzICovCi0JY2hhcgkJCWNpcGhlcl9hbGdvW0RTVF9OQU1FTEVOXTsKLQljaGFyCQkJaGFzaF9hbGdvW0RTVF9OQU1FTEVOXTsKLQotCS8qIEtleSBzaXplcy4gQ2FuIGJlIHplcm8gZm9yIGRpZ2VzdCBmb3IgZXhhbXBsZSAqLwotCXVuc2lnbmVkIGludAkJY2lwaGVyX2tleXNpemUsIGhhc2hfa2V5c2l6ZTsKLQkvKiBBbGlnbm1lbnQuIENhbGN1bGF0ZWQgYnkgdGhlIERTVCBpdHNlbGYuICovCi0JdW5zaWduZWQgaW50CQljcnlwdG9fYXR0YWNoZWRfc2l6ZTsKLQkvKiBOdW1iZXIgb2YgdGhyZWFkcyB0byBwZXJmb3JtIGNyeXB0byBvcGVyYXRpb25zICovCi0JaW50CQkJdGhyZWFkX251bTsKLX07Ci0KLS8qIEV4cG9ydCBzZWN1cml0eSBhdHRyaWJ1dGVzIGhhdmUgdGhpcyBiaXRzIGNoZWNrZWQgaW4gd2hlbiBjbGllbnQgY29ubmVjdHMgKi8KLSNkZWZpbmUgRFNUX1BFUk1fUkVBRAkJKDE8PDApCi0jZGVmaW5lIERTVF9QRVJNX1dSSVRFCQkoMTw8MSkKLQotLyoKLSAqIFJpZ2h0IG5vdyBpdCBpcyBzaW1wbGUgbW9kZWwsIHdoZXJlIGVhY2ggcmVtb3RlIGFkZHJlc3MKLSAqIGlzIGFzc2lnbmVkIHRvIHNldCBvZiBwZXJtaXNzaW9ucyBpdCBpcyBhbGxvd2VkIHRvIHBlcmZvcm0uCi0gKiBJbiByZWFsIHdvcmxkIGJsb2NrIGRldmljZSBkb2VzIG5vdCBrbm93IGFueXRoaW5nIGJ1dAotICogcmVhZGluZyBhbmQgd3JpdGluZywgc28gaXQgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2guCi0gKi8KLXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIKLXsKLQl1bnNpZ25lZCBpbnQJCXBlcm1pc3Npb25zOwotCXN0cnVjdCBzYWRkcgkJYWRkcjsKLX07Ci0KLS8qCi0gKiBFeHBvcnQgY29udHJvbCBjb21tYW5kOiBkZXZpY2UgdG8gZXhwb3J0IGFuZCBuZXR3b3JrIGFkZHJlc3MgdG8gYWNjZXB0Ci0gKiBjbGllbnRzIHRvIHdvcmsgd2l0aCBnaXZlbiBkZXZpY2UKLSAqLwotc3RydWN0IGRzdF9leHBvcnRfY3RsCi17Ci0JY2hhcgkJCWRldmljZVtEU1RfTkFNRUxFTl07Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bAljdGw7Ci19OwotCi1lbnVtIHsKLQlEU1RfQ0ZHCT0gMSwgCQkvKiBSZXF1ZXN0IHJlbW90ZSBjb25maWd1cmF0aW9uICovCi0JRFNUX0lPLAkJCS8qIElPIGNvbW1hbmQgKi8KLQlEU1RfSU9fUkVTUE9OU0UsCS8qIElPIHJlc3BvbnNlICovCi0JRFNUX1BJTkcsCQkvKiBLZWVwYWxpdmUgbWVzc2FnZSAqLwotCURTVF9OQ01EX01BWCwKLX07Ci0KLXN0cnVjdCBkc3RfY21kCi17Ci0JLyogTmV0d29yayBjb21tYW5kIGl0c2VsZiwgc2VlIGFib3ZlICovCi0JX191MzIJCQljbWQ7Ci0JLyoKLQkgKiBTaXplIG9mIHRoZSBhdHRhY2hlZCBkYXRhCi0JICogKGluIG1vc3QgY2FzZXMsIGZvciBSRUFEIGNvbW1hbmQgaXQgbWVhbnMgaG93IG1hbnkgYnl0ZXMgd2VyZSByZXF1ZXN0ZWQpCi0JICovCi0JX191MzIJCQlzaXplOwotCS8qIENyeXB0byBzaXplOiBudW1iZXIgb2YgYXR0YWNoZWQgYnl0ZXMgd2l0aCBkaWdlc3QvaG1hYyAqLwotCV9fdTMyCQkJY3NpemU7Ci0JLyogSGVyZSB3ZSBjYW4gY2Fycnkgc2VjcmV0IGRhdGEgKi8KLQlfX3UzMgkJCXJlc2VydmVkOwotCS8qIFJlYWQvd3JpdGUgYml0cywgc2VlIGhvdyB0aGV5IGFyZSBlbmNvZGVkIGluIGJpbyBzdHJ1Y3R1cmUgKi8KLQlfX3U2NAkJCXJ3OwotCS8qIEJJTyBmbGFncyAqLwotCV9fdTY0CQkJZmxhZ3M7Ci0JLyogVW5pcXVlIGNvbW1hbmQgaWQgKGxpa2UgdHJhbnNhY3Rpb24gSUQpICovCi0JX191NjQJCQlpZDsKLQkvKiBTZWN0b3IgdG8gc3RhcnQgSU8gZnJvbSAqLwotCV9fdTY0CQkJc2VjdG9yOwotCS8qIEhhc2ggZGF0YSBpcyBwbGFjZWQgYWZ0ZXIgdGhpcyBoZWFkZXIgKi8KLQlfX3U4CQkJaGFzaFswXTsKLX07Ci0KLS8qCi0gKiBDb252ZXJ0IGNvbW1hbmQgdG8vZnJvbSBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gKiBXZSBkbyBub3QgdXNlIGh0b24qKCkgZnVuY3Rpb25zLCBzaW5jZSB0aGVyZSBpcwotICogbm8gNjQtYml0IGltcGxlbWVudGF0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X2NvbnZlcnRfY21kKHN0cnVjdCBkc3RfY21kICpjKQotewotCWMtPmNtZCA9IF9fY3B1X3RvX2JlMzIoYy0+Y21kKTsKLQljLT5jc2l6ZSA9IF9fY3B1X3RvX2JlMzIoYy0+Y3NpemUpOwotCWMtPnNpemUgPSBfX2NwdV90b19iZTMyKGMtPnNpemUpOwotCWMtPnNlY3RvciA9IF9fY3B1X3RvX2JlNjQoYy0+c2VjdG9yKTsKLQljLT5pZCA9IF9fY3B1X3RvX2JlNjQoYy0+aWQpOwotCWMtPmZsYWdzID0gX19jcHVfdG9fYmU2NChjLT5mbGFncyk7Ci0JYy0+cncgPSBfX2NwdV90b19iZTY0KGMtPnJ3KTsKLX0KLQotLyogVHJhbnNhY3Rpb24gaWQgKi8KLXR5cGVkZWYgX191NjQgZHN0X2dlbl90OwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLQotI2lmZGVmIENPTkZJR19EU1RfREVCVUcKLSNkZWZpbmUgZHByaW50ayhmLCBhLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgZiwgIyNhKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKLQlkcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7fQotI2VuZGlmCi0KLXN0cnVjdCBkc3Rfbm9kZTsKLQotc3RydWN0IGRzdF90cmFucwotewotCS8qIERTVCBub2RlIHdlIGFyZSB3b3JraW5nIHdpdGggKi8KLQlzdHJ1Y3QgZHN0X25vZGUJCSpuOwotCi0JLyogRW50cnkgaW5zaWRlIHRyYW5zYWN0aW9uIHRyZWUgKi8KLQlzdHJ1Y3QgcmJfbm9kZQkJdHJhbnNfZW50cnk7Ci0KLQkvKiBNZXJsaW4ga2lsbHMgdGhpcyB0cmFuc2FjdGlvbiB3aGVuIHRoaXMgbWVtb3J5IGNlbGwgZXF1YWxzIHplcm8gKi8KLQlhdG9taWNfdAkJcmVmY250OwotCi0JLyogSG93IHRoaXMgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHByb2Nlc3NlZCBieSBjcnlwdG8gZW5naW5lICovCi0Jc2hvcnQJCQllbmM7Ci0JLyogSG93IG1hbnkgdGltZXMgdGhpcyB0cmFuc2FjdGlvbiB3YXMgcmVzZW50ICovCi0Jc2hvcnQJCQlyZXRyaWVzOwotCS8qIENvbXBsZXRpb24gc3RhdHVzICovCi0JaW50CQkJZXJyb3I7Ci0KLQkvKiBXaGVuIGRpZCB3ZSBzZW5kIGl0IHRvIHRoZSByZW1vdGUgcGVlciAqLwotCWxvbmcJCQlzZW5kX3RpbWU7Ci0KLQkvKiBNeSBuYW1lIGlzLi4uCi0JICogV2VsbCwgY29tcHV0ZXJzIGRvZXMgbm90IHNwZWFrLCB0aGV5IGhhdmUgdW5pcXVlIGlkIGluc3RlYWQgKi8KLQlkc3RfZ2VuX3QJCWdlbjsKLQotCS8qIEJsb2NrIElPIHdlIGFyZSB3b3JraW5nIHdpdGggKi8KLQlzdHJ1Y3QgYmlvCQkqYmlvOwotCi0JLyogTmV0d29yayBjb21tYW5kIGZvciBhYm92ZSBibG9jayBJTyByZXF1ZXN0ICovCi0Jc3RydWN0IGRzdF9jbWQJCWNtZDsKLX07Ci0KLXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZQotewotCS8qIFdoYXQgc2hvdWxkIHdlIGRvIHdpdGggYWxsIGJsb2NrIHJlcXVlc3RzICovCi0Jc3RydWN0IGNyeXB0b19oYXNoCSpoYXNoOwotCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlcgkqY2lwaGVyOwotCi0JLyogUG9vbCBvZiBwYWdlcyB1c2VkIHRvIGVuY3J5cHQgZGF0YSBpbnRvIGJlZm9yZSBzZW5kaW5nICovCi0JaW50CQkJcGFnZV9udW07Ci0Jc3RydWN0IHBhZ2UJCSoqcGFnZXM7Ci0KLQkvKiBXaGF0IHRvIGRvIHdpdGggY3VycmVudCByZXF1ZXN0ICovCi0JaW50CQkJZW5jOwotCS8qIFdobyB3ZSBhcmUgYW5kIHdoZXJlIGRvIHdlIGdvICovCi0Jc3RydWN0IHNjYXR0ZXJsaXN0CSpzcmMsICpkc3Q7Ci0KLQkvKiBNYXhpbXVtIHRpbWVvdXQgd2FpdGluZyBmb3IgZW5jcnlwdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KLQlsb25nCQkJdGltZW91dDsKLQkvKiBJViBpcyBhIDY0LWJpdCBzZXF1ZW50aWFsIGNvdW50ZXIgKi8KLQl1NjQJCQlpdjsKLQotCS8qIFNlY3JldCBkYXRhICovCi0Jdm9pZAkJCSpwcml2YXRlOwotCi0JLyogQ2FjaGVkIHRlbXBvcmFyeSBkYXRhIGxpdmVzIGhlcmUgKi8KLQlpbnQJCQlzaXplOwotCXZvaWQJCQkqZGF0YTsKLX07Ci0KLXN0cnVjdCBkc3Rfc3RhdGUKLXsKLQkvKiBUaGUgbWFpbiBzdGF0ZSBwcm90ZWN0aW9uICovCi0Jc3RydWN0IG11dGV4CQlzdGF0ZV9sb2NrOwotCi0JLyogUG9sbGluZyBtYWNoaW5lcnkgZm9yIHNvY2tldHMgKi8KLQl3YWl0X3F1ZXVlX3QgCQl3YWl0OwotCXdhaXRfcXVldWVfaGVhZF90IAkqd2hlYWQ7Ci0JLyogTW9zdCBvZiBldmVudHMgYXJlIGJlaW5nIHdhaXRlZCBoZXJlICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgCXRocmVhZF93YWl0OwotCi0JLyogV2hvIG93bnMgdGhpcz8gKi8KLQlzdHJ1Y3QgZHN0X25vZGUJCSpub2RlOwotCi0JLyogTmV0d29yayBhZGRyZXNzIGZvciB0aGlzIHN0YXRlICovCi0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bAljdGw7Ci0KLQkvKiBQZXJtaXNzaW9ucyB0byB3b3JrIHdpdGg6IHJlYWQtb25seSBvciBydyBjb25uZWN0aW9uICovCi0JdTMyCQkJcGVybWlzc2lvbnM7Ci0KLQkvKiBDYWxsZWQgd2hlbiB3ZSBuZWVkIHRvIGNsZWFuIHByaXZhdGUgZGF0YSAqLwotCXZvaWQJCQkoKiBjbGVhbnVwKShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLQkvKiBVc2VkIGJ5IHRoZSBzZXJ2ZXI6IEJJTyBjb21wbGV0aW9uIHF1ZXVlcyBCSU9zIGhlcmUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCXJlcXVlc3RfbGlzdDsKLQlzcGlubG9ja190CQlyZXF1ZXN0X2xvY2s7Ci0KLQkvKiBHdWVzcyB3aGF0PyBObywgaXQgaXMgbm90IG51bWJlciBvZiBwbGFuZXRzICovCi0JYXRvbWljX3QJCXJlZmNudDsKLQotCS8qIFRoaXMgZmxhZ3MgaXMgc2V0IHdoZW4gY29ubmVjdGlvbiBzaG91bGQgYmUgZHJvcHBlZCAqLwotCWludAkJCW5lZWRfZXhpdDsKLQotCS8qCi0JICogU29ja2V0IHRvIHdvcmsgd2l0aC4gU2Vjb25kIHBvaW50ZXIgaXMgdXNlZCBmb3IKLQkgKiBsb2NrbGVzcyBjaGVjayBpZiBzb2NrZXQgd2FzIGNoYW5nZWQgYmVmb3JlIHBlcmZvcm1pbmcKLQkgKiBuZXh0IGFjdGlvbiAobGlrZSB3b3JraW5nIHdpdGggY2FjaGVkIHBvbGxpbmcgcmVzdWx0KQotCSAqLwotCXN0cnVjdCBzb2NrZXQJCSpzb2NrZXQsICpyZWFkX3NvY2tldDsKLQotCS8qIENhY2hlZCBwcmVhbGxvY2F0ZWQgZGF0YSAqLwotCXZvaWQJCQkqZGF0YTsKLQl1bnNpZ25lZCBpbnQJCXNpemU7Ci0KLQkvKiBDdXJyZW50bHkgcHJvY2Vzc2VkIGNvbW1hbmQgKi8KLQlzdHJ1Y3QgZHN0X2NtZAkJY21kOwotfTsKLQotc3RydWN0IGRzdF9pbmZvCi17Ci0JLyogRGV2aWNlIHNpemUgKi8KLQl1NjQJCQlzaXplOwotCi0JLyogTG9jYWwgZGV2aWNlIG5hbWUgZm9yIGV4cG9ydCBkZXZpY2VzICovCi0JY2hhcgkJCWxvY2FsW0RTVF9OQU1FTEVOXTsKLQotCS8qIE5ldHdvcmsgc2V0dXAgKi8KLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCW5ldDsKLQotCS8qIFN5c2ZzIGJpdHMgdXNlIHRoaXMgKi8KLQlzdHJ1Y3QgZGV2aWNlCQlkZXZpY2U7Ci19OwotCi1zdHJ1Y3QgZHN0X25vZGUKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGVfZW50cnk7Ci0KLQkvKiBIaSwgbXkgbmFtZSBpcyBzdG9yZWQgaGVyZSAqLwotCWNoYXIJCQluYW1lW0RTVF9OQU1FTEVOXTsKLQkvKiBNeSBjYWNoZSBuYW1lIGlzIHN0b3JlZCBoZXJlICovCi0JY2hhcgkJCWNhY2hlX25hbWVbRFNUX05BTUVMRU5dOwotCi0JLyogQmxvY2sgZGV2aWNlIGF0dGFjaGVkIHRvIGdpdmVuIG5vZGUuCi0JICogT25seSB2YWxpZCBmb3IgZXhwb3J0aW5nIG5vZGVzICovCi0Jc3RydWN0IGJsb2NrX2RldmljZSAJKmJkZXY7Ci0JLyogTmV0d29yayBzdGF0ZSBtYWNoaW5lIGZvciBnaXZlbiBwZWVyICovCi0Jc3RydWN0IGRzdF9zdGF0ZQkqc3RhdGU7Ci0KLQkvKiBCbG9jayBJTyBtYWNoaW5lcnkgKi8KLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcXVldWU7Ci0Jc3RydWN0IGdlbmRpc2sJCSpkaXNrOwotCi0JLyogTnVtYmVyIG9mIHRocmVhZHMgaW4gcHJvY2Vzc2luZyBwb29sICovCi0JaW50CQkJdGhyZWFkX251bTsKLQkvKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBzaW5nbGUgSU8gKi8KLQlpbnQJCQltYXhfcGFnZXM7Ci0KLQkvKiBJJ20gdGhhdCBiaWcgaW4gYnl0ZXMgKi8KLQlsb2ZmX3QJCQlzaXplOwotCi0JLyogRXhwb3J0ZWQgdG8gdXNlcnNwYWNlIG5vZGUgaW5mb3JtYXRpb24gKi8KLQlzdHJ1Y3QgZHN0X2luZm8JCSppbmZvOwotCi0JLyoKLQkgKiBTZWN1cml0eSBhdHRyaWJ1dGUgbGlzdC4KLQkgKiBVc2VkIG9ubHkgYnkgZXhwb3J0aW5nIG5vZGUgY3VycmVudGx5LgotCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQJc2VjdXJpdHlfbGlzdDsKLQlzdHJ1Y3QgbXV0ZXgJCXNlY3VyaXR5X2xvY2s7Ci0KLQkvKgotCSAqIFdoZW4gdGhpcyB1bmVyZmxvd3MgYmVsb3cgemVybywgdW5pdmVyc2l0eSBjb2xsYXBzZXMuCi0JICogQnV0IHRoaXMgd2lsbCBub3QgaGFwcGVuLCBzaW5jZSBub2RlIHdpbGwgYmUgZnJlZWQsCi0JICogd2hlbiByZWZlcmVuY2UgY291bnRlciByZWFjaGVzIHplcm8uCi0JICovCi0JYXRvbWljX3QJCXJlZmNudDsKLQotCS8qIEhvdyBwcmVjaXNlbHkgc2hvdWxkIEkgYmUgc3RhcnRlZD8gKi8KLQlpbnQgCQkJKCpzdGFydCkoc3RydWN0IGRzdF9ub2RlICopOwotCi0JLyogQ3J5cHRvIGNhcGFiaWxpdGllcyAqLwotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bAljcnlwdG87Ci0JdTgJCQkqaGFzaF9rZXk7Ci0JdTgJCQkqY2lwaGVyX2tleTsKLQotCS8qIFBvb2wgb2YgcHJvY2Vzc2luZyB0aHJlYWQgKi8KLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wJKnBvb2w7Ci0KLQkvKiBUcmFuc2FjdGlvbiBJRHMgbGl2ZSBoZXJlICovCi0JYXRvbWljX2xvbmdfdAkJZ2VuOwotCi0JLyoKLQkgKiBIb3cgZnJlcXVlbnRseSBhbmQgaG93IG1hbnkgdGltZXMgdHJhbnNhY3Rpb24KLQkgKiB0cmVlIHNob3VsZCBiZSBzY2FubmVkIHRvIGRyb3Agc3RhbGUgb2JqZWN0cy4KLQkgKi8KLQlsb25nCQkJdHJhbnNfc2Nhbl90aW1lb3V0OwotCWludAkJCXRyYW5zX21heF9yZXRyaWVzOwotCi0JLyogU21hbGwgZ25vbWVzIGxpdmUgaGVyZSAqLwotCXN0cnVjdCByYl9yb290CQl0cmFuc19yb290OwotCXN0cnVjdCBtdXRleAkJdHJhbnNfbG9jazsKLQotCS8qCi0JICogVHJhbnNhY3Rpb24gY2FjaGUvbWVtb3J5IHBvb2wuCi0JICogSXQgaXMgYmlnIGVub3VnaCB0byBjb250YWluIG5vdCBvbmx5IHRyYW5zYWN0aW9uCi0JICogaXRzZWxmLCBidXQgYWRkaXRpb25hbCBjcnlwdG8gZGF0YSAoZGlnZXN0L2htYWMpLgotCSAqLwotCXN0cnVjdCBrbWVtX2NhY2hlCSp0cmFuc19jYWNoZTsKLQltZW1wb29sX3QJCSp0cmFuc19wb29sOwotCi0JLyogVGhpcyBlbnRpdHkgc2NhbnMgdHJhbnNhY3Rpb24gdHJlZSAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsgCXRyYW5zX3dvcms7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotfTsKLQotLyogS2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGUgKi8KLXN0cnVjdCBkc3Rfc2VjdXJlCi17Ci0Jc3RydWN0IGxpc3RfaGVhZAlzZWNfZW50cnk7Ci0Jc3RydWN0IGRzdF9zZWN1cmVfdXNlcglzZWM7Ci19OwotCi1pbnQgZHN0X3Byb2Nlc3NfYmlvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKTsKLQotaW50IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcik7Ci1pbnQgZHN0X25vZGVfaW5pdF9saXN0ZW5lZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9nZXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JQlVHX09OKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA9PSAwKTsKLQlhdG9taWNfaW5jKCZzdC0+cmVmY250KTsKLQlyZXR1cm4gc3Q7Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX3B1dChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHN0X25vZGUgKm4pOwotaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLXZvaWQgZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotdm9pZCBkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi1pbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotdm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JbXV0ZXhfbG9jaygmc3QtPnN0YXRlX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX3VubG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQltdXRleF91bmxvY2soJnN0LT5zdGF0ZV9sb2NrKTsKLX0KLQotdm9pZCBkc3RfcG9sbF9leGl0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLWludCBkc3RfcG9sbF9pbml0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZHN0X3N0YXRlX3BvbGwoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JdW5zaWduZWQgaW50IHJldmVudHMgPSBQT0xMSFVQIHwgUE9MTEVSUjsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoc3QtPnNvY2tldCkKLQkJcmV2ZW50cyA9IHN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCBOVUxMKTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiByZXZlbnRzOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkc3RfdGhyZWFkX3NldHVwKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHN0X25vZGVfcHV0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9ub2RlICpkc3Rfbm9kZV9nZXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWF0b21pY19pbmMoJm4tPnJlZmNudCk7Ci0JcmV0dXJuIG47Ci19Ci0KLWludCBkc3RfZGF0YV9yZWN2KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1pbnQgZHN0X3JlY3ZfY2RhdGEoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmNkYXRhKTsKLWludCBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG1vcmUpOwotCi1pbnQgZHN0X3NlbmRfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgZHN0X2NtZCAqY21kLCBzdHJ1Y3QgYmlvICpiaW8pOwotCi1pbnQgZHN0X3Byb2Nlc3NfaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotaW50IGRzdF9leHBvcnRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKTsKLWludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbyk7Ci1pbnQgZHN0X3N0YXJ0X2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi1pbnQgX19pbml0IGRzdF9leHBvcnRfaW5pdCh2b2lkKTsKLXZvaWQgZHN0X2V4cG9ydF9leGl0KHZvaWQpOwotCi0vKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgZXhwb3J0IGJsb2NrIElPIHJlcXVlc3RzICovCi1zdHJ1Y3QgZHN0X2V4cG9ydF9wcml2Ci17Ci0Jc3RydWN0IGxpc3RfaGVhZAkJcmVxdWVzdF9lbnRyeTsKLQlzdHJ1Y3QgZHN0X3N0YXRlCQkqc3RhdGU7Ci0Jc3RydWN0IGJpbwkJCSpiaW87Ci0Jc3RydWN0IGRzdF9jbWQJCQljbWQ7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3RyYW5zX2dldChzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWF0b21pY19pbmMoJnQtPnJlZmNudCk7Ci19Ci0KLXN0cnVjdCBkc3RfdHJhbnMgKmRzdF90cmFuc19zZWFyY2goc3RydWN0IGRzdF9ub2RlICpub2RlLCBkc3RfZ2VuX3QgZ2VuKTsKLWludCBkc3RfdHJhbnNfcmVtb3ZlKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotdm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotCi0vKgotICogQ29udmVydCBiaW8gaW50byBuZXR3b3JrIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfYmlvX3RvX2NtZChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY21kICpjbWQsCi0JCXUzMiBjb21tYW5kLCB1NjQgaWQpCi17Ci0JY21kLT5jbWQgPSBjb21tYW5kOwotCWNtZC0+ZmxhZ3MgPSAoYmlvLT5iaV9mbGFncyA8PCBCSU9fUE9PTF9CSVRTKSA+PiBCSU9fUE9PTF9CSVRTOwotCWNtZC0+cncgPSBiaW8tPmJpX3J3OwotCWNtZC0+c2l6ZSA9IGJpby0+Ymlfc2l6ZTsKLQljbWQtPmNzaXplID0gMDsKLQljbWQtPmlkID0gaWQ7Ci0JY21kLT5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKLX07Ci0KLWludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLWludCBkc3RfdHJhbnNfY3J5cHRvKHN0cnVjdCBkc3RfdHJhbnMgKnQpOwotCi1pbnQgZHN0X25vZGVfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCk7Ci12b2lkIGRzdF9ub2RlX2NyeXB0b19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRzdF9uZWVkX2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKLQkvKgotCSAqIExvZ2ljYWwgT1IgaXMgYXBwcm9wcmlhdGUgaGVyZSwgYnV0IGJvb2xlYW4gb25lIHByb2R1Y2VzCi0JICogbW9yZSBvcHRpbWFsIGNvZGUsIHNvIGl0IGlzIHVzZWQgaW5zdGVhZC4KLQkgKi8KLQlyZXR1cm4gKGMtPmhhc2hfYWxnb1swXSB8IGMtPmNpcGhlcl9hbGdvWzBdKTsKLX0KLQotaW50IGRzdF9ub2RlX3RyYW5zX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci12b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKTsKLQotLyoKLSAqIFBvb2wgb2YgdGhyZWFkcy4KLSAqIFJlYWR5IGxpc3QgY29udGFpbnMgdGhyZWFkcyBjdXJyZW50bHkgZnJlZSB0byBiZSB1c2VkLAotICogYWN0aXZlIG9uZSBjb250YWlucyB0aHJlYWRzIHdpdGggc29tZSB3b3JrIHNjaGVkdWxlZCBmb3IgdGhlbS4KLSAqIENhbGxlciBjYW4gd2FpdCBpbiBnaXZlbiBxdWV1ZSB3aGVuIHRocmVhZCBpcyByZWFkeS4KLSAqLwotc3RydWN0IHRocmVhZF9wb29sCi17Ci0JaW50CQkJdGhyZWFkX251bTsKLQlzdHJ1Y3QgbXV0ZXgJCXRocmVhZF9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJcmVhZHlfbGlzdCwgYWN0aXZlX2xpc3Q7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotfTsKLQotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCk7Ci12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQoc3RydWN0IHRocmVhZF9wb29sICpwLCB1bnNpZ25lZCBpbnQgaWQpOwotaW50IHRocmVhZF9wb29sX2FkZF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQljaGFyICpuYW1lLAotCQl1bnNpZ25lZCBpbnQgaWQsCi0JCXZvaWQgKigqIGluaXQpKHZvaWQgKmRhdGEpLAotCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhKTsKLQotdm9pZCB0aHJlYWRfcG9vbF9kZXN0cm95KHN0cnVjdCB0aHJlYWRfcG9vbCAqcCk7Ci1zdHJ1Y3QgdGhyZWFkX3Bvb2wgKnRocmVhZF9wb29sX2NyZWF0ZShpbnQgbnVtLCBjaGFyICpuYW1lLAotCQl2b2lkICooKiBpbml0KSh2b2lkICpkYXRhKSwKLQkJdm9pZCAoKiBjbGVhbnVwKSh2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSk7Ci0KLWludCB0aHJlYWRfcG9vbF9zY2hlZHVsZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKiBzZXR1cCkodm9pZCAqc3RvcmVkX3ByaXZhdGUsIHZvaWQgKnNldHVwX2RhdGEpLAotCQlpbnQgKCogYWN0aW9uKSh2b2lkICpzdG9yZWRfcHJpdmF0ZSwgdm9pZCAqc2V0dXBfZGF0YSksCi0JCXZvaWQgKnNldHVwX2RhdGEsIGxvbmcgdGltZW91dCk7Ci1pbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCi0JCWludCAoKiBzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCWludCAoKiBhY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQsIHZvaWQgKmlkKTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfX0RTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCmluZGV4IGEwZDk0MjIuLmY4YzJlMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCkBAIC01Nyw4ICs1Nyw3IEBACiAJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKIAkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKIAlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBwcl9mbXQoZm10KSwJXAotCQkJCSMjX19WQV9BUkdTX18pOwkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLAkjI19fVkFfQVJHU19fKTsJCVwKIAl9IHdoaWxlICgwKQogCiAKQEAgLTY5LDkgKzY4LDcgQEAKIAl7IEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19GSUxFX18sIGZtdCwgREVCVUdfSEFTSCwJXAogCQlERUJVR19IQVNIMiwgX19MSU5FX18sIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgfTsJXAogCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGVzY3JpcHRvcikpCQkJCVwKLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAkJCVwKLQkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBmbXQsCVwKLQkJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKTsJXAogCX0gd2hpbGUgKDApCiAKICNlbHNlCkBAIC04MSw4ICs3OCwxMCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKQkJCQkJXAorCWRvIHsgaWYgKDApIHByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pCQkJCVwKKwlkbyB7IGlmICgwKSBkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGNlNDU4MWYuLmZiNzM3YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjgwLDExICsyODAsNyBAQAogc3RhdGljIGlubGluZSBjaGFyICoKIGVmaV9ndWlkX3VucGFyc2UoZWZpX2d1aWRfdCAqZ3VpZCwgY2hhciAqb3V0KQogewotCXNwcmludGYob3V0LCAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLAotCQlndWlkLT5iWzNdLCBndWlkLT5iWzJdLCBndWlkLT5iWzFdLCBndWlkLT5iWzBdLAotCQlndWlkLT5iWzVdLCBndWlkLT5iWzRdLCBndWlkLT5iWzddLCBndWlkLT5iWzZdLAotCQlndWlkLT5iWzhdLCBndWlkLT5iWzldLCBndWlkLT5iWzEwXSwgZ3VpZC0+YlsxMV0sCi0JCWd1aWQtPmJbMTJdLCBndWlkLT5iWzEzXSwgZ3VpZC0+YlsxNF0sIGd1aWQtPmJbMTVdKTsKKwlzcHJpbnRmKG91dCwgIiVwVWwiLCBndWlkLT5iKTsKICAgICAgICAgcmV0dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggOTBhNGVkMC4uMGNjNGQ1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zNjEsNyArMzYxLDcgQEAKICNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KLSNkZWZpbmUgTlRfUFJYU1RBVFVTCTB4MzAwCQkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLworI2RlZmluZSBOVF9TMzkwX0hJR0hfR1BSUwkweDMwMAkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLwogCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oIGIvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaAppbmRleCA5MGQxYzIxLi45YTMzYzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKQEAgLTQyLDYgKzQyLDggQEAKIAlFTkNMT1NVUkVfU1RBVFVTX05PVF9JTlNUQUxMRUQsCiAJRU5DTE9TVVJFX1NUQVRVU19VTktOT1dOLAogCUVOQ0xPU1VSRV9TVEFUVVNfVU5BVkFJTEFCTEUsCisJLyogbGFzdCBlbGVtZW50IGZvciBjb3VudGluZyBwdXJwb3NlcyAqLworCUVOQ0xPU1VSRV9TVEFUVVNfTUFYCiB9OwogCiAvKiBTRkYtODQ4NSBhY3Rpdml0eSBsaWdodCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnIuaCBiL2luY2x1ZGUvbGludXgvZXJyLmgKaW5kZXggZWM4N2YzMS4uMWIxMjY0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Vyci5oCkBAIC0zNCw2ICszNCwxMSBAQAogCXJldHVybiBJU19FUlJfVkFMVUUoKHVuc2lnbmVkIGxvbmcpcHRyKTsKIH0KIAorc3RhdGljIGlubGluZSBsb25nIElTX0VSUl9PUl9OVUxMKGNvbnN0IHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gIXB0ciB8fCBJU19FUlJfVkFMVUUoKHVuc2lnbmVkIGxvbmcpcHRyKTsKK30KKwogLyoqCiAgKiBFUlJfQ0FTVCAtIEV4cGxpY2l0bHkgY2FzdCBhbiBlcnJvci12YWx1ZWQgcG9pbnRlciB0byBhbm90aGVyIHBvaW50ZXIgdHlwZQogICogQHB0cjogVGhlIHBvaW50ZXIgdG8gY2FzdC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaCBiL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaAppbmRleCAyN2U3NzJjLi5kYzEyZjQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCkBAIC05Nyw3ICs5Nyw3IEBACiAgKiBAZ2V0X25hbWU6ICAgICAgIGZpbmQgdGhlIG5hbWUgZm9yIGEgZ2l2ZW4gaW5vZGUgaW4gYSBnaXZlbiBkaXJlY3RvcnkKICAqIEBnZXRfcGFyZW50OiAgICAgZmluZCB0aGUgcGFyZW50IG9mIGEgZ2l2ZW4gZGlyZWN0b3J5CiAgKgotICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nIGZvciBkZXRhaWxzIG9uIGhvdyB0byB1c2UKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9FeHBvcnRpbmcgZm9yIGRldGFpbHMgb24gaG93IHRvIHVzZQogICogdGhpcyBpbnRlcmZhY2UgY29ycmVjdGx5LgogICoKICAqIGVuY29kZV9maDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKaW5kZXggZjA3ZjM0ZC4uMjU4MDg4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgKQEAgLTcyLDYgKzcyLDggQEAKIAlzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CiAJc3RydWN0IGpvdXJuYWxfcyAqIHNfam91cm5hbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOworCXN0cnVjdCBtdXRleCBzX29ycGhhbl9sb2NrOworCXN0cnVjdCBtdXRleCBzX3Jlc2l6ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqam91cm5hbF9iZGV2OwogI2lmZGVmIENPTkZJR19KQkRfREVCVUcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaCBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaAppbmRleCBjZjgyZDUxLi5kN2I1ZGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2RlZmluZSBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKHNiKQkoRVhUM19TSU5HTEVEQVRBX1RSQU5TX0JMT0NLUyArIFwKIAkJCQkJIEVYVDNfWEFUVFJfVFJBTlNfQkxPQ0tTIC0gMiArIFwKLQkJCQkJIDIqRVhUM19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKQorCQkJCQkgRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSkKIAogLyogRGVsZXRlIG9wZXJhdGlvbnMgcG90ZW50aWFsbHkgaGl0IG9uZSBkaXJlY3RvcnkncyBuYW1lc3BhY2UgcGx1cyBhbgogICogZW50aXJlIGlub2RlLCBwbHVzIGFyYml0cmFyeSBhbW91bnRzIG9mIGJpdG1hcC9pbmRpcmVjdGlvbiBkYXRhLiAgQmUKICAqIGdlbmVyb3VzLiAgV2UgY2FuIGdyb3cgdGhlIGRlbGV0ZSB0cmFuc2FjdGlvbiBsYXRlciBpZiBuZWNlc3NhcnkuICovCiAKLSNkZWZpbmUgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKHNiKQkoMiAqIEVYVDNfREFUQV9UUkFOU19CTE9DS1Moc2IpICsgNjQpCisjZGVmaW5lIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhzYikgICAoRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKHNiKSArIDY0KQogCiAvKiBEZWZpbmUgYW4gYXJiaXRyYXJ5IGxpbWl0IGZvciB0aGUgYW1vdW50IG9mIGRhdGEgd2Ugd2lsbCBhbnRpY2lwYXRlCiAgKiB3cml0aW5nIHRvIGFueSBnaXZlbiB0cmFuc2FjdGlvbi4gIEZvciB1bmJvdW5kZWQgdHJhbnNhY3Rpb25zIHN1Y2ggYXMKQEAgLTg2LDYgKzg2LDkgQEAKICNkZWZpbmUgRVhUM19RVU9UQV9JTklUX0JMT0NLUyhzYikgMAogI2RlZmluZSBFWFQzX1FVT1RBX0RFTF9CTE9DS1Moc2IpIDAKICNlbmRpZgorI2RlZmluZSBFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1Moc2IpIChNQVhRVU9UQVMqRVhUM19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKQorI2RlZmluZSBFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKHNiKSkKKyNkZWZpbmUgRVhUM19NQVhRVU9UQVNfREVMX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX0RFTF9CTE9DS1Moc2IpKQogCiBpbnQKIGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvZmlsZS5oCmluZGV4IDMzNWEwYTUuLjU1NTU1MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlsZS5oCkBAIC0xOCwxMSArMTgsOSBAQAogc3RydWN0IGZpbGVfb3BlcmF0aW9uczsKIHN0cnVjdCB2ZnNtb3VudDsKIHN0cnVjdCBkZW50cnk7Ci1leHRlcm4gaW50IGluaXRfZmlsZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBmbW9kZV90IG1vZGUsCi0JCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcCk7Ci1leHRlcm4gc3RydWN0IGZpbGUgKmFsbG9jX2ZpbGUoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJZm1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3ApOworc3RydWN0IHBhdGg7CitleHRlcm4gc3RydWN0IGZpbGUgKmFsbG9jX2ZpbGUoc3RydWN0IHBhdGggKiwgZm1vZGVfdCBtb2RlLAorCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmcHV0X2xpZ2h0KHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZnB1dF9uZWVkZWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggYTA1N2Y0OC4uOTE0N2NhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTUyLDYgKzE1Miw3IEBACiAjZGVmaW5lIFdSSVRFX1NZTkNfUExVRwkoV1JJVEUgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19OT0lETEUpKQogI2RlZmluZSBXUklURV9TWU5DCShXUklURV9TWU5DX1BMVUcgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSkKICNkZWZpbmUgV1JJVEVfT0RJUkVDVF9QTFVHCShXUklURSB8ICgxIDw8IEJJT19SV19TWU5DSU8pKQorI2RlZmluZSBXUklURV9NRVRBCShXUklURSB8ICgxIDw8IEJJT19SV19NRVRBKSkKICNkZWZpbmUgU1dSSVRFX1NZTkNfUExVRwlcCiAJCQkoU1dSSVRFIHwgKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfTk9JRExFKSkKICNkZWZpbmUgU1dSSVRFX1NZTkMJKFNXUklURV9TWU5DX1BMVUcgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSkKQEAgLTEwOTQsMTAgKzEwOTUsNiBAQAogCiBleHRlcm4gdm9pZCBzZW5kX3NpZ2lvKHN0cnVjdCBmb3duX3N0cnVjdCAqZm93biwgaW50IGZkLCBpbnQgYmFuZCk7CiAKLS8qIGZzL3N5bmMuYyAqLwotZXh0ZXJuIGludCBkb19zeW5jX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBvZmZzZXQsCi0JCQlsb2ZmX3QgZW5kYnl0ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLQogI2lmZGVmIENPTkZJR19GSUxFX0xPQ0tJTkcKIGV4dGVybiBpbnQgZmNudGxfZ2V0bGsoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZsb2NrIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgZmNudGxfc2V0bGsodW5zaWduZWQgaW50LCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCkBAIC0xNTkwLDcgKzE1ODcsNyBAQAogICogdW50aWwgdGhhdCBmbGFnIGlzIGNsZWFyZWQuICBJX1dJTExfRlJFRSwgSV9GUkVFSU5HIGFuZCBJX0NMRUFSIGFyZSBzZXQgYXQKICAqIHZhcmlvdXMgc3RhZ2VzIG9mIHJlbW92aW5nIGFuIGlub2RlLgogICoKLSAqIFR3byBiaXRzIGFyZSB1c2VkIGZvciBsb2NraW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiwgSV9MT0NLIGFuZCBJX1NZTkMuCisgKiBUd28gYml0cyBhcmUgdXNlZCBmb3IgbG9ja2luZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24sIElfTkVXIGFuZCBJX1NZTkMuCiAgKgogICogSV9ESVJUWV9TWU5DCQlJbm9kZSBpcyBkaXJ0eSwgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZSB3cml0dGVuIG9uCiAgKgkJCWZkYXRhc3luYygpLiAgaV9hdGltZSBpcyB0aGUgdXN1YWwgY2F1c2UuCkBAIC0xNTk5LDggKzE1OTYsMTQgQEAKICAqCQkJZG9uJ3QgaGF2ZSB0byB3cml0ZSBpbm9kZSBvbiBmZGF0YXN5bmMoKSB3aGVuIG9ubHkKICAqCQkJbXRpbWUgaGFzIGNoYW5nZWQgaW4gaXQuCiAgKiBJX0RJUlRZX1BBR0VTCUlub2RlIGhhcyBkaXJ0eSBwYWdlcy4gIElub2RlIGl0c2VsZiBtYXkgYmUgY2xlYW4uCi0gKiBJX05FVwkJZ2V0X25ld19pbm9kZSgpIHNldHMgaV9zdGF0ZSB0byBJX0xPQ0t8SV9ORVcuICBCb3RoCi0gKgkJCWFyZSBjbGVhcmVkIGJ5IHVubG9ja19uZXdfaW5vZGUoKSwgY2FsbGVkIGZyb20gaWdldCgpLgorICogSV9ORVcJCVNlcnZlcyBhcyBib3RoIGEgbXV0ZXggYW5kIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgorICoJCQlOZXcgaW5vZGVzIHNldCBJX05FVy4gIElmIHR3byBwcm9jZXNzZXMgYm90aCBjcmVhdGUKKyAqCQkJdGhlIHNhbWUgaW5vZGUsIG9uZSBvZiB0aGVtIHdpbGwgcmVsZWFzZSBpdHMgaW5vZGUgYW5kCisgKgkJCXdhaXQgZm9yIElfTkVXIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSByZXR1cm5pbmcuCisgKgkJCUlub2RlcyBpbiBJX1dJTExfRlJFRSwgSV9GUkVFSU5HIG9yIElfQ0xFQVIgc3RhdGUgY2FuCisgKgkJCWFsc28gY2F1c2Ugd2FpdGluZyBvbiBJX05FVywgd2l0aG91dCBJX05FVyBhY3R1YWxseQorICoJCQliZWluZyBzZXQuICBmaW5kX2lub2RlKCkgdXNlcyB0aGlzIHRvIHByZXZlbnQgcmV0dXJuaW5nCisgKgkJCW5lYXJseS1kZWFkIGlub2Rlcy4KICAqIElfV0lMTF9GUkVFCQlNdXN0IGJlIHNldCB3aGVuIGNhbGxpbmcgd3JpdGVfaW5vZGVfbm93KCkgaWYgaV9jb3VudAogICoJCQlpcyB6ZXJvLiAgSV9GUkVFSU5HIG11c3QgYmUgc2V0IHdoZW4gSV9XSUxMX0ZSRUUgaXMKICAqCQkJY2xlYXJlZC4KQEAgLTE2MTQsMzUgKzE2MTcsMjMgQEAKICAqCQkJcHJvaGliaXRlZCBmb3IgbWFueSBwdXJwb3Nlcy4gIGlnZXQoKSBtdXN0IHdhaXQgZm9yCiAgKgkJCXRoZSBpbm9kZSB0byBiZSBjb21wbGV0ZWx5IHJlbGVhc2VkLCB0aGVuIGNyZWF0ZSBpdAogICoJCQlhbmV3LiAgT3RoZXIgZnVuY3Rpb25zIHdpbGwganVzdCBpZ25vcmUgc3VjaCBpbm9kZXMsCi0gKgkJCWlmIGFwcHJvcHJpYXRlLiAgSV9MT0NLIGlzIHVzZWQgZm9yIHdhaXRpbmcuCisgKgkJCWlmIGFwcHJvcHJpYXRlLiAgSV9ORVcgaXMgdXNlZCBmb3Igd2FpdGluZy4KICAqCi0gKiBJX0xPQ0sJCVNlcnZlcyBhcyBib3RoIGEgbXV0ZXggYW5kIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgotICoJCQlOZXcgaW5vZGVzIHNldCBJX0xPQ0suICBJZiB0d28gcHJvY2Vzc2VzIGJvdGggY3JlYXRlCi0gKgkJCXRoZSBzYW1lIGlub2RlLCBvbmUgb2YgdGhlbSB3aWxsIHJlbGVhc2UgaXRzIGlub2RlIGFuZAotICoJCQl3YWl0IGZvciBJX0xPQ0sgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHJldHVybmluZy4KLSAqCQkJSW5vZGVzIGluIElfV0lMTF9GUkVFLCBJX0ZSRUVJTkcgb3IgSV9DTEVBUiBzdGF0ZSBjYW4KLSAqCQkJYWxzbyBjYXVzZSB3YWl0aW5nIG9uIElfTE9DSywgd2l0aG91dCBJX0xPQ0sgYWN0dWFsbHkKLSAqCQkJYmVpbmcgc2V0LiAgZmluZF9pbm9kZSgpIHVzZXMgdGhpcyB0byBwcmV2ZW50IHJldHVybmluZwotICoJCQluZWFybHktZGVhZCBpbm9kZXMuCi0gKiBJX1NZTkMJCVNpbWlsYXIgdG8gSV9MT0NLLCBidXQgbGltaXRlZCBpbiBzY29wZSB0byB3cml0ZWJhY2sKLSAqCQkJb2YgaW5vZGUgZGlydHkgZGF0YS4gIEhhdmluZyBhIHNlcGFyYXRlIGxvY2sgZm9yIHRoaXMKLSAqCQkJcHVycG9zZSByZWR1Y2VzIGxhdGVuY3kgYW5kIHByZXZlbnRzIHNvbWUgZmlsZXN5c3RlbS0KLSAqCQkJc3BlY2lmaWMgZGVhZGxvY2tzLgorICogSV9TWU5DCQlTeW5jaG9uaXplZCB3cml0ZSBvZiBkaXJ0eSBpbm9kZSBkYXRhLiAgVGhlIGJpdHMgaXMKKyAqCQkJc2V0IGR1cmluZyBkYXRhIHdyaXRlYmFjaywgYW5kIGNsZWFyZWQgd2l0aCBhIHdha2V1cAorICoJCQlvbiB0aGUgYml0IGFkZHJlc3Mgb25jZSBpdCBpcyBkb25lLgogICoKICAqIFE6IFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBJX1dJTExfRlJFRSBhbmQgSV9GUkVFSU5HPwotICogUTogaWdyYWIoKSBvbmx5IGNoZWNrcyBvbiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKS4gIFNob3VsZCBpdCBhbHNvIGNoZWNrIG9uCi0gKiAgICBJX0NMRUFSPyAgSWYgbm90LCB3aHk/CiAgKi8KICNkZWZpbmUgSV9ESVJUWV9TWU5DCQkxCiAjZGVmaW5lIElfRElSVFlfREFUQVNZTkMJMgogI2RlZmluZSBJX0RJUlRZX1BBR0VTCQk0Ci0jZGVmaW5lIElfTkVXCQkJOAorI2RlZmluZSBfX0lfTkVXCQkJMworI2RlZmluZSBJX05FVwkJCSgxIDw8IF9fSV9ORVcpCiAjZGVmaW5lIElfV0lMTF9GUkVFCQkxNgogI2RlZmluZSBJX0ZSRUVJTkcJCTMyCiAjZGVmaW5lIElfQ0xFQVIJCQk2NAotI2RlZmluZSBfX0lfTE9DSwkJNwotI2RlZmluZSBJX0xPQ0sJCQkoMSA8PCBfX0lfTE9DSykKLSNkZWZpbmUgX19JX1NZTkMJCTgKKyNkZWZpbmUgX19JX1NZTkMJCTcKICNkZWZpbmUgSV9TWU5DCQkJKDEgPDwgX19JX1NZTkMpCiAKICNkZWZpbmUgSV9ESVJUWSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQyB8IElfRElSVFlfUEFHRVMpCkBAIC0yMTg5LDcgKzIxODAsNiBAQAogCV9faW5zZXJ0X2lub2RlX2hhc2goaW5vZGUsIGlub2RlLT5pX2lubyk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZSAqIGdldF9lbXB0eV9maWxwKHZvaWQpOwogZXh0ZXJuIHZvaWQgZmlsZV9tb3ZlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIGV4dGVybiB2b2lkIGZpbGVfa2lsbChzdHJ1Y3QgZmlsZSAqZik7CiAjaWZkZWYgQ09ORklHX0JMT0NLCkBAIC0yMjY0LDkgKzIyNTQsMTEgQEAKIAlpbnQgbG9ja190eXBlKTsKIAogZW51bSB7Ci0JRElPX0xPQ0tJTkcgPSAxLCAvKiBuZWVkIGxvY2tpbmcgYmV0d2VlbiBidWZmZXJlZCBhbmQgZGlyZWN0IGFjY2VzcyAqLwotCURJT19OT19MT0NLSU5HLCAgLyogYmRldjsgbm8gbG9ja2luZyBhdCBhbGwgYmV0d2VlbiBidWZmZXJlZC9kaXJlY3QgKi8KLQlESU9fT1dOX0xPQ0tJTkcsIC8qIGZpbGVzeXN0ZW0gbG9ja3MgYnVmZmVyZWQgYW5kIGRpcmVjdCBpbnRlcm5hbGx5ICovCisJLyogbmVlZCBsb2NraW5nIGJldHdlZW4gYnVmZmVyZWQgYW5kIGRpcmVjdCBhY2Nlc3MgKi8KKwlESU9fTE9DS0lORwk9IDB4MDEsCisKKwkvKiBmaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsbGluZyBob2xlcyAqLworCURJT19TS0lQX0hPTEVTCT0gMHgwMiwKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3NpemVfdCBibG9ja2Rldl9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCkBAIC0yMjc1LDcgKzIyNjcsOCBAQAogCWRpb19pb2RvbmVfdCBlbmRfaW8pCiB7CiAJcmV0dXJuIF9fYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgYmRldiwgaW92LCBvZmZzZXQsCi0JCQkJbnJfc2VncywgZ2V0X2Jsb2NrLCBlbmRfaW8sIERJT19MT0NLSU5HKTsKKwkJCQkgICAgbnJfc2VncywgZ2V0X2Jsb2NrLCBlbmRfaW8sCisJCQkJICAgIERJT19MT0NLSU5HIHwgRElPX1NLSVBfSE9MRVMpOwogfQogCiBzdGF0aWMgaW5saW5lIHNzaXplX3QgYmxvY2tkZXZfZGlyZWN0X0lPX25vX2xvY2tpbmcoaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCkBAIC0yMjg0LDE2ICsyMjc3LDcgQEAKIAlkaW9faW9kb25lX3QgZW5kX2lvKQogewogCXJldHVybiBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGlvdiwgb2Zmc2V0LAotCQkJCW5yX3NlZ3MsIGdldF9ibG9jaywgZW5kX2lvLCBESU9fTk9fTE9DS0lORyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBibG9ja2Rldl9kaXJlY3RfSU9fb3duX2xvY2tpbmcoaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0Jc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2ssCi0JZGlvX2lvZG9uZV90IGVuZF9pbykKLXsKLQlyZXR1cm4gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsIG9mZnNldCwKLQkJCQlucl9zZWdzLCBnZXRfYmxvY2ssIGVuZF9pbywgRElPX09XTl9MT0NLSU5HKTsKKwkJCQlucl9zZWdzLCBnZXRfYmxvY2ssIGVuZF9pbywgMCk7CiB9CiAjZW5kaWYKIApAQCAtMjMxMyw2ICsyMjk3LDcgQEAKIGV4dGVybiBpbnQgZ2VuZXJpY19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosIGludCk7CiBleHRlcm4gdm9pZCBnZW5lcmljX2ZpbGxhdHRyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qga3N0YXQgKik7CiBleHRlcm4gaW50IHZmc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKK3ZvaWQgX19pbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKIHZvaWQgaW5vZGVfYWRkX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcyk7CiB2b2lkIGlub2RlX3N1Yl9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpOwogbG9mZl90IGlub2RlX2dldF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTI0NzgsNSArMjQ2Myw4IEBACiAKIGludCBfX2luaXQgZ2V0X2ZpbGVzeXN0ZW1fbGlzdChjaGFyICpidWYpOwogCisjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCisjZGVmaW5lIE9QRU5fRk1PREUoZmxhZykgKChfX2ZvcmNlIGZtb2RlX3QpKChmbGFnICsgMSkgJiBPX0FDQ01PREUpKQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3N0YWNrLmggYi9pbmNsdWRlL2xpbnV4L2ZzX3N0YWNrLmgKaW5kZXggYmI1MTZjZS4uZGEzMTdjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc19zdGFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNfc3RhY2suaApAQCAtOCwxMCArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogLyogZXh0ZXJucyBmb3IgZnMvc3RhY2suYyAqLwotZXh0ZXJuIHZvaWQgZnNzdGFja19jb3B5X2F0dHJfYWxsKHN0cnVjdCBpbm9kZSAqZGVzdCwgY29uc3Qgc3RydWN0IGlub2RlICpzcmMsCi0JCQkJaW50ICgqZ2V0X25saW5rcykoc3RydWN0IGlub2RlICopKTsKLQotZXh0ZXJuIHZvaWQgZnNzdGFja19jb3B5X2lub2RlX3NpemUoc3RydWN0IGlub2RlICpkc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKTsKK2V4dGVybiB2b2lkIGZzc3RhY2tfY29weV9hdHRyX2FsbChzdHJ1Y3QgaW5vZGUgKmRlc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKTsKK2V4dGVybiB2b2lkIGZzc3RhY2tfY29weV9pbm9kZV9zaXplKHN0cnVjdCBpbm9kZSAqZHN0LCBzdHJ1Y3QgaW5vZGUgKnNyYyk7CiAKIC8qIGlubGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3N0YWNrX2NvcHlfYXR0cl9hdGltZShzdHJ1Y3QgaW5vZGUgKmRlc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmggYi9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKaW5kZXggNDNmYzk1ZC4uMjhlMzNmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaApAQCAtNzQsNyArNzQsMTIgQEAKIHN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgewogCXUzMiAJaW5pdGlhbF9zcG1vZGU7CS8qIGluaXRpYWwgU1BNT0RFIHZhbHVlICovCiAJczE2CWJ1c19udW07Ci0JYm9vbAlxZV9tb2RlOworCXVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgU1BJX1FFX0NQVV9NT0RFCQkoMSA8PCAwKSAvKiBRRSBDUFUgKCJQSU8iKSBtb2RlICovCisjZGVmaW5lIFNQSV9DUE1fTU9ERQkJKDEgPDwgMSkgLyogQ1BNL1FFICgiRE1BIikgbW9kZSAqLworI2RlZmluZSBTUElfQ1BNMQkJKDEgPDwgMikgLyogU1BJIHVuaXQgaXMgaW4gQ1BNMSBibG9jayAqLworI2RlZmluZSBTUElfQ1BNMgkJKDEgPDwgMykgLyogU1BJIHVuaXQgaXMgaW4gQ1BNMiBibG9jayAqLworI2RlZmluZSBTUElfUUUJCQkoMSA8PCA0KSAvKiBTUEkgdW5pdCBpcyBpbiBRRSBibG9jayAqLwogCS8qIGJvYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uICovCiAJdTE2CW1heF9jaGlwc2VsZWN0OwogCXZvaWQJKCpjc19jb250cm9sKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBib29sIG9uKTsKQEAgLTkwLDYgKzk1LDEwIEBACiAgKiBsZWFkIHRvIGEgZGVlcCBzbGVlcCAoaS5lLiBwb3dlciByZW1vdmVkIGZyb20gdGhlIGNvcmUsCiAgKiBpbnN0ZWFkIG9mIGp1c3QgdGhlIGNsb2NrKS4KICAqLworI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSAmJiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKQogaW50IGZzbF9kZWVwX3NsZWVwKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGZzbF9kZWVwX3NsZWVwKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAjZW5kaWYgLyogX0ZTTF9ERVZJQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCmluZGV4IDQ3YmJkZjkuLjIyMzNjOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaApAQCAtNTcsNiArNTcsNyBAQAogCS8qIFRoZSBiZWxvdyBpcyB6ZXJvZWQgb3V0IGluIHBpcGVfcmVhZCAqLwogCXN0cnVjdCB0cmFjZV9zZXEJc2VxOwogCXN0cnVjdCB0cmFjZV9lbnRyeQkqZW50OworCWludAkJCWxlZnRvdmVyOwogCWludAkJCWNwdTsKIAl1NjQJCQl0czsKIApAQCAtMTMwLDcgKzEzMSw3IEBACiAJdm9pZAkJCSptb2Q7CiAJdm9pZAkJCSpkYXRhOwogCi0JYXRvbWljX3QJCXByb2ZpbGVfY291bnQ7CisJaW50CQkJcHJvZmlsZV9jb3VudDsKIAlpbnQJCQkoKnByb2ZpbGVfZW5hYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJdm9pZAkJCSgqcHJvZmlsZV9kaXNhYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiB9OwpAQCAtMTU3LDcgKzE1OCw3IEBACiAJRklMVEVSX1BUUl9TVFJJTkcsCiB9OwogCi1leHRlcm4gaW50IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitleHRlcm4gaW50IHRyYWNlX2V2ZW50X3Jhd19pbml0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHRyYWNlX2RlZmluZV9maWVsZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGNvbnN0IGNoYXIgKnR5cGUsCiAJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwKIAkJCSAgICAgIGludCBpc19zaWduZWQsIGludCBmaWx0ZXJfdHlwZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfYWNsLmggYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfYWNsLmgKaW5kZXggODg2ZjVmYS4uY2E2NjZkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5lcmljX2FjbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19hY2wuaApAQCAtMSwzNiArMSwxNSBAQAotLyoKLSAqIGluY2x1ZGUvbGludXgvZ2VuZXJpY19hY2wuaAotICoKLSAqIChDKSAyMDA1IEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgotICovCisjaWZuZGVmIExJTlVYX0dFTkVSSUNfQUNMX0gKKyNkZWZpbmUgTElOVVhfR0VORVJJQ19BQ0xfSAogCi0jaWZuZGVmIEdFTkVSSUNfQUNMX0gKLSNkZWZpbmUgR0VORVJJQ19BQ0xfSAorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2xfeGF0dHIuaD4KK3N0cnVjdCBpbm9kZTsKIAotLyoqCi0gKiBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAgLSAgZmlsZXN5c3RlbSBvcGVyYXRpb25zCi0gKgotICogRmlsZXN5c3RlbXMgbXVzdCBtYWtlIHRoZXNlIG9wZXJhdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmljCi0gKiBvcGVyYXRpb25zLgotICovCi1zdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqKCpnZXRhY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotCXZvaWQgKCpzZXRhY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHN0cnVjdCBwb3NpeF9hY2wgKik7Ci19OworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGdlbmVyaWNfYWNsX2FjY2Vzc19oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGdlbmVyaWNfYWNsX2RlZmF1bHRfaGFuZGxlcjsKIAotc2l6ZV90IGdlbmVyaWNfYWNsX2xpc3Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICosIGludCwKLQkJCWNoYXIgKiwgc2l6ZV90KTsKLWludCBnZW5lcmljX2FjbF9nZXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICosIGludCwKLQkJICAgIHZvaWQgKiwgc2l6ZV90KTsKLWludCBnZW5lcmljX2FjbF9zZXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICosIGludCwKLQkJICAgIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKLWludCBnZW5lcmljX2FjbF9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJICAgICBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqKTsKLWludCBnZW5lcmljX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgKik7CitpbnQgZ2VuZXJpY19hY2xfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOworaW50IGdlbmVyaWNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqKTsKK2ludCBnZW5lcmljX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIExJTlVYX0dFTkVSSUNfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKaW5kZXggMDU5YmQxOC4uNGU5NDlhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKQEAgLTk5LDYgKzk5LDEyIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fc3lzZnNfc2V0X2FjdGl2ZV9sb3codW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiByZXF1ZXN0ZWQgKi8KKwlXQVJOX09OKDEpOworCXJldHVybiAtRUlOVkFMOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb191bmV4cG9ydCh1bnNpZ25lZCBncGlvKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCA5YmFjZTRiLi41ZDg2ZmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtMTYyLDE4ICsxNjIsMjMgQEAKICAqIEBleHBpcmVzX25leHQ6CWFic29sdXRlIHRpbWUgb2YgdGhlIG5leHQgZXZlbnQgd2hpY2ggd2FzIHNjaGVkdWxlZAogICoJCQl2aWEgY2xvY2tfc2V0X25leHRfZXZlbnQoKQogICogQGhyZXNfYWN0aXZlOglTdGF0ZSBvZiBoaWdoIHJlc29sdXRpb24gbW9kZQotICogQGNoZWNrX2Nsb2NrczoJSW5kaWN0YXRvciwgd2hlbiBzZXQgZXZhbHVhdGUgdGltZSBzb3VyY2UgYW5kIGNsb2NrCi0gKgkJCWV2ZW50IGRldmljZXMgd2hldGhlciBoaWdoIHJlc29sdXRpb24gbW9kZSBjYW4gYmUKLSAqCQkJYWN0aXZhdGVkLgotICogQG5yX2V2ZW50czoJCVRvdGFsIG51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgZXZlbnRzCisgKiBAaGFuZ19kZXRlY3RlZDoJVGhlIGxhc3QgaHJ0aW1lciBpbnRlcnJ1cHQgZGV0ZWN0ZWQgYSBoYW5nCisgKiBAbnJfZXZlbnRzOgkJVG90YWwgbnVtYmVyIG9mIGhydGltZXIgaW50ZXJydXB0IGV2ZW50cworICogQG5yX3JldHJpZXM6CQlUb3RhbCBudW1iZXIgb2YgaHJ0aW1lciBpbnRlcnJ1cHQgcmV0cmllcworICogQG5yX2hhbmdzOgkJVG90YWwgbnVtYmVyIG9mIGhydGltZXIgaW50ZXJydXB0IGhhbmdzCisgKiBAbWF4X2hhbmdfdGltZToJTWF4aW11bSB0aW1lIHNwZW50IGluIGhydGltZXJfaW50ZXJydXB0CiAgKi8KIHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlIHsKLQlzcGlubG9ja190CQkJbG9jazsKKwlyYXdfc3BpbmxvY2tfdAkJCWxvY2s7CiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZQljbG9ja19iYXNlW0hSVElNRVJfTUFYX0NMT0NLX0JBU0VTXTsKICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAJa3RpbWVfdAkJCQlleHBpcmVzX25leHQ7CiAJaW50CQkJCWhyZXNfYWN0aXZlOworCWludAkJCQloYW5nX2RldGVjdGVkOwogCXVuc2lnbmVkIGxvbmcJCQlucl9ldmVudHM7CisJdW5zaWduZWQgbG9uZwkJCW5yX3JldHJpZXM7CisJdW5zaWduZWQgbG9uZwkJCW5yX2hhbmdzOworCWt0aW1lX3QJCQkJbWF4X2hhbmdfdGltZTsKICNlbmRpZgogfTsKIApAQCAtNDM1LDQ3ICs0NDAsNCBAQAogLyogU2hvdyBwZW5kaW5nIHRpbWVyczogKi8KIGV4dGVybiB2b2lkIHN5c3JxX3RpbWVyX2xpc3Rfc2hvdyh2b2lkKTsKIAotLyoKLSAqIFRpbWVyLXN0YXRpc3RpY3MgaW5mbzoKLSAqLwotI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUwotCi1leHRlcm4gdm9pZCB0aW1lcl9zdGF0c191cGRhdGVfc3RhdHModm9pZCAqdGltZXIsIHBpZF90IHBpZCwgdm9pZCAqc3RhcnRmLAotCQkJCSAgICAgdm9pZCAqdGltZXJmLCBjaGFyICpjb21tLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHRpbWVyX2ZsYWcpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfYWNjb3VudF9ocnRpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcikKLXsKLQlpZiAobGlrZWx5KCF0aW1lcl9zdGF0c19hY3RpdmUpKQotCQlyZXR1cm47Ci0JdGltZXJfc3RhdHNfdXBkYXRlX3N0YXRzKHRpbWVyLCB0aW1lci0+c3RhcnRfcGlkLCB0aW1lci0+c3RhcnRfc2l0ZSwKLQkJCQkgdGltZXItPmZ1bmN0aW9uLCB0aW1lci0+c3RhcnRfY29tbSwgMCk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCi0JCQkJCQkgdm9pZCAqYWRkcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGF0c19ocnRpbWVyX3NldF9zdGFydF9pbmZvKHN0cnVjdCBocnRpbWVyICp0aW1lcikKLXsKLQlfX3RpbWVyX3N0YXRzX2hydGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGF0c19ocnRpbWVyX2NsZWFyX3N0YXJ0X2luZm8oc3RydWN0IGhydGltZXIgKnRpbWVyKQotewotCXRpbWVyLT5zdGFydF9zaXRlID0gTlVMTDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfYWNjb3VudF9ocnRpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXRzX2hydGltZXJfc2V0X3N0YXJ0X2luZm8oc3RydWN0IGhydGltZXIgKnRpbWVyKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfaHJ0aW1lcl9jbGVhcl9zdGFydF9pbmZvKHN0cnVjdCBocnRpbWVyICp0aW1lcikKLXsKLX0KLSNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNDFhNTlhZi4uNzhiNGJjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTIzLDYgKzIzLDEyIEBACiBpbnQgaHVnZXRsYl9zeXNjdGxfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIGludCBodWdldGxiX3RyZWF0X21vdmFibGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKworI2lmZGVmIENPTkZJR19OVU1BCitpbnQgaHVnZXRsYl9tZW1wb2xpY3lfc3lzY3RsX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsCisJCQkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CisjZW5kaWYKKwogaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBpbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAogCQkJc3RydWN0IHBhZ2UgKiosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oIGIvaW5jbHVkZS9saW51eC9od19icmVha3BvaW50LmgKaW5kZXggYTAzZGFlZC4uNDEyMzVjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9od19icmVha3BvaW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9od19icmVha3BvaW50LmgKQEAgLTIwLDE5ICsyMCwxOCBAQAogCiAjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAogCi0vKiBBcyBpdCdzIGZvciBpbi1rZXJuZWwgb3IgcHRyYWNlIHVzZSwgd2Ugd2FudCBpdCB0byBiZSBwaW5uZWQgKi8KLSNkZWZpbmUgREVGSU5FX0JSRUFLUE9JTlRfQVRUUihuYW1lKQlcCi1zdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIG5hbWUgPSB7CQlcCi0JLnR5cGUgPSBQRVJGX1RZUEVfQlJFQUtQT0lOVCwJXAotCS5zaXplID0gc2l6ZW9mKG5hbWUpLAkJXAotCS5waW5uZWQgPSAxLAkJCVwKLX07Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBod19icmVha3BvaW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKKwltZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKCphdHRyKSk7CisKIAlhdHRyLT50eXBlID0gUEVSRl9UWVBFX0JSRUFLUE9JTlQ7CiAJYXR0ci0+c2l6ZSA9IHNpemVvZigqYXR0cik7CisJLyoKKwkgKiBBcyBpdCdzIGZvciBpbi1rZXJuZWwgb3IgcHRyYWNlIHVzZSwgd2Ugd2FudCBpdCB0byBiZSBwaW5uZWQKKwkgKiBhbmQgdG8gY2FsbCBpdHMgY2FsbGJhY2sgZXZlcnkgaGl0cy4KKwkgKi8KIAlhdHRyLT5waW5uZWQgPSAxOworCWF0dHItPnNhbXBsZV9wZXJpb2QgPSAxOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHdfYnJlYWtwb2ludF9hZGRyKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKQEAgLTUyLDI3ICs1MSwyNCBAQAogCiBleHRlcm4gc3RydWN0IHBlcmZfZXZlbnQgKgogcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCi0JCQkgICAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgICBwZXJmX292ZXJmbG93X2hhbmRsZXJfdCB0cmlnZ2VyZWQsCiAJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogCiAvKiBGSVhNRTogb25seSBjaGFuZ2UgZnJvbSB0aGUgYXR0ciwgYW5kIGRvbid0IHVucmVnaXN0ZXIgKi8KLWV4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudCAqCi1tb2RpZnlfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKLQkJCSAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKLQkJCSAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKLQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIGludAorbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpOwogCiAvKgogICogS2VybmVsIGJyZWFrcG9pbnRzIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1bGFyIHRocmVhZC4KICAqLwogZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50ICoKIHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludF9jcHUoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKLQkJCQlwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkLAorCQkJCXBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90CXRyaWdnZXJlZCwKIAkJCQlpbnQgY3B1KTsKIAogZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50ICoqCiByZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKLQkJCSAgICBwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkKTsKKwkJCSAgICBwZXJmX292ZXJmbG93X2hhbmRsZXJfdCB0cmlnZ2VyZWQpOwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwogZXh0ZXJuIGludCBfX3JlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwpAQCAtOTMsMjAgKzg5LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfZXZlbnQgKgogcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCi0JCQkgICAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgICBwZXJmX292ZXJmbG93X2hhbmRsZXJfdCB0cmlnZ2VyZWQsCiAJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCXsgcmV0dXJuIE5VTEw7IH0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfZXZlbnQgKgorc3RhdGljIGlubGluZSBpbnQKIG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLAotCQkJICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAotCQkJICBwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkLAotCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJeyByZXR1cm4gTlVMTDsgfQorCQkJICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQl7IHJldHVybiAtRU5PU1lTOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwZXJmX2V2ZW50ICoKIHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludF9jcHUoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKLQkJCQlwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkLAorCQkJCXBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90CSB0cmlnZ2VyZWQsCiAJCQkJaW50IGNwdSkJCXsgcmV0dXJuIE5VTEw7IH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfZXZlbnQgKioKIHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAotCQkJICAgIHBlcmZfY2FsbGJhY2tfdCB0cmlnZ2VyZWQpCXsgcmV0dXJuIE5VTEw7IH0KKwkJCSAgICBwZXJmX292ZXJmbG93X2hhbmRsZXJfdCB0cmlnZ2VyZWQpCXsgcmV0dXJuIE5VTEw7IH0KIHN0YXRpYyBpbmxpbmUgaW50CiByZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQl7IHJldHVybiAtRU5PU1lTOyB9CiBzdGF0aWMgaW5saW5lIGludApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggNDE5YWI1NC4uMDJmYzYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0xMTAsNyArMTEwLDcgQEAKICAqIEBkcml2ZXI6IERldmljZSBkcml2ZXIgbW9kZWwgZHJpdmVyCiAgKiBAaWRfdGFibGU6IExpc3Qgb2YgSTJDIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCiAgKiBAZGV0ZWN0OiBDYWxsYmFjayBmb3IgZGV2aWNlIGRldGVjdGlvbgotICogQGFkZHJlc3NfZGF0YTogVGhlIEkyQyBhZGRyZXNzZXMgdG8gcHJvYmUgKGZvciBkZXRlY3QpCisgKiBAYWRkcmVzc19saXN0OiBUaGUgSTJDIGFkZHJlc3NlcyB0byBwcm9iZSAoZm9yIGRldGVjdCkKICAqIEBjbGllbnRzOiBMaXN0IG9mIGRldGVjdGVkIGNsaWVudHMgd2UgY3JlYXRlZCAoZm9yIGkyYy1jb3JlIHVzZSBvbmx5KQogICoKICAqIFRoZSBkcml2ZXIub3duZXIgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgZHJpdmVyLgpAQCAtMTYxLDggKzE2MSw4IEBACiAJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkX3RhYmxlOwogCiAJLyogRGV2aWNlIGRldGVjdGlvbiBjYWxsYmFjayBmb3IgYXV0b21hdGljIGRldmljZSBjcmVhdGlvbiAqLwotCWludCAoKmRldGVjdCkoc3RydWN0IGkyY19jbGllbnQgKiwgaW50IGtpbmQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqKTsKLQljb25zdCBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgKmFkZHJlc3NfZGF0YTsKKwlpbnQgKCpkZXRlY3QpKHN0cnVjdCBpMmNfY2xpZW50ICosIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqKTsKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcmVzc19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50czsKIH07CiAjZGVmaW5lIHRvX2kyY19kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpMmNfZHJpdmVyLCBkcml2ZXIpCkBAIC0zOTEsMTQgKzM5MSw2IEBACiAjZGVmaW5lIEkyQ19DTEFTU19EREMJCSgxPDwzKQkvKiBEREMgYnVzIG9uIGdyYXBoaWNzIGFkYXB0ZXJzICovCiAjZGVmaW5lIEkyQ19DTEFTU19TUEQJCSgxPDw3KQkvKiBTUEQgRUVQUk9NcyBhbmQgc2ltaWxhciAqLwogCi0vKiBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBpcyB0aGUgc3RydWN0IGZvciBob2xkaW5nIGRlZmF1bHQgY2xpZW50Ci0gKiBhZGRyZXNzZXMgZm9yIGEgZHJpdmVyIGFuZCBmb3IgdGhlIHBhcmFtZXRlcnMgc3VwcGxpZWQgb24gdGhlCi0gKiBjb21tYW5kIGxpbmUKLSAqLwotc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIHsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqbm9ybWFsX2kyYzsKLX07Ci0KIC8qIEludGVybmFsIG51bWJlcnMgdG8gdGVybWluYXRlIGxpc3RzICovCiAjZGVmaW5lIEkyQ19DTElFTlRfRU5ECQkweGZmZmVVCiAKQEAgLTU3Niw4MiArNTY4LDQgQEAKICNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCAgIDcJCS8qIFNNQnVzIDIuMCAqLwogI2RlZmluZSBJMkNfU01CVVNfSTJDX0JMT0NLX0RBVEEgICAgOAogCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qIFRoZXNlIGRlZmluZXMgYXJlIHVzZWQgZm9yIHByb2JpbmcgaTJjIGNsaWVudCBhZGRyZXNzZXMgKi8KLS8qIFRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbiBsaXN0cyAqLwotI2RlZmluZSBJMkNfQ0xJRU5UX01BWF9PUFRTIDQ4Ci0KLS8qIERlZmF1bHQgZmlsbCBvZiBtYW55IHZhcmlhYmxlcyAqLwotI2RlZmluZSBJMkNfQ0xJRU5UX0RFRkFVTFRTIHtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0JCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLQkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0JCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLQkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0JCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLQkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0JCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLQkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCi0JCQkgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKLQkJCSAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAotCQkJICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfQotCi0vKiBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNIGNyZWF0ZXMgYSBtb2R1bGUgcGFyYW1ldGVyLCBhbmQgcHV0cyBpdCBpbiB0aGUKLSAgIG1vZHVsZSBoZWFkZXIgKi8KLQotI2RlZmluZSBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKHZhcixkZXNjKSBcCi0gIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB2YXJbSTJDX0NMSUVOVF9NQVhfT1BUU10gPSBJMkNfQ0xJRU5UX0RFRkFVTFRTOyBcCi0gIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmFyIyNfbnVtOyBcCi0gIG1vZHVsZV9wYXJhbV9hcnJheSh2YXIsIHNob3J0LCAmdmFyIyNfbnVtLCAwKTsgXAotICBNT0RVTEVfUEFSTV9ERVNDKHZhciwgZGVzYykKLQotI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRF9DT01NT04JCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewkJXAotCS5ub3JtYWxfaTJjCT0gbm9ybWFsX2kyYywJCQkJCVwKLX0KLQotLyogVGhlc2UgYXJlIHRoZSBvbmVzIHlvdSB3YW50IHRvIHVzZSBpbiB5b3VyIG93biBkcml2ZXJzLiBQaWNrIHRoZSBvbmUKLSAgIHdoaWNoIG1hdGNoZXMgdGhlIG51bWJlciBvZiBkZXZpY2VzIHRoZSBkcml2ZXIgZGlmZmVyZW5jaWF0ZXMgYmV0d2Vlbi4gKi8KLSNkZWZpbmUgSTJDX0NMSUVOVF9JTlNNT0QJCQkJCQlcCi1JMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQotI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRF8xKGNoaXAxKQkJCQkJXAotZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSB9OwkJCQkJCVwKLUkyQ19DTElFTlRfSU5TTU9EX0NPTU1PTgotCi0jZGVmaW5lIEkyQ19DTElFTlRfSU5TTU9EXzIoY2hpcDEsIGNoaXAyKQkJCQlcCi1lbnVtIGNoaXBzIHsgYW55X2NoaXAsIGNoaXAxLCBjaGlwMiB9OwkJCQkJXAotSTJDX0NMSUVOVF9JTlNNT0RfQ09NTU9OCi0KLSNkZWZpbmUgSTJDX0NMSUVOVF9JTlNNT0RfMyhjaGlwMSwgY2hpcDIsIGNoaXAzKQkJCVwKLWVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEsIGNoaXAyLCBjaGlwMyB9OwkJCQlcCi1JMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQotI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRF80KGNoaXAxLCBjaGlwMiwgY2hpcDMsIGNoaXA0KQkJCVwKLWVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEsIGNoaXAyLCBjaGlwMywgY2hpcDQgfTsJCQlcCi1JMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQotI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRF81KGNoaXAxLCBjaGlwMiwgY2hpcDMsIGNoaXA0LCBjaGlwNSkJCVwKLWVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEsIGNoaXAyLCBjaGlwMywgY2hpcDQsIGNoaXA1IH07CQlcCi1JMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQotI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRF82KGNoaXAxLCBjaGlwMiwgY2hpcDMsIGNoaXA0LCBjaGlwNSwgY2hpcDYpCVwKLWVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEsIGNoaXAyLCBjaGlwMywgY2hpcDQsIGNoaXA1LCBjaGlwNiB9OwlcCi1JMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQotI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRF83KGNoaXAxLCBjaGlwMiwgY2hpcDMsIGNoaXA0LCBjaGlwNSwgY2hpcDYsIGNoaXA3KSBcCi1lbnVtIGNoaXBzIHsgYW55X2NoaXAsIGNoaXAxLCBjaGlwMiwgY2hpcDMsIGNoaXA0LCBjaGlwNSwgY2hpcDYsCVwKLQkgICAgIGNoaXA3IH07CQkJCQkJCVwKLUkyQ19DTElFTlRfSU5TTU9EX0NPTU1PTgotCi0jZGVmaW5lIEkyQ19DTElFTlRfSU5TTU9EXzgoY2hpcDEsIGNoaXAyLCBjaGlwMywgY2hpcDQsIGNoaXA1LCBjaGlwNiwgY2hpcDcsIGNoaXA4KSBcCi1lbnVtIGNoaXBzIHsgYW55X2NoaXAsIGNoaXAxLCBjaGlwMiwgY2hpcDMsIGNoaXA0LCBjaGlwNSwgY2hpcDYsCVwKLQkgICAgIGNoaXA3LCBjaGlwOCB9OwkJCQkJCVwKLUkyQ19DTElFTlRfSU5TTU9EX0NPTU1PTgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3RwczY1MDEwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90cHM2NTAxMC5oCmluZGV4IDkxOGM1MzUuLjA4YWE5MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3RwczY1MDEwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHBzNjUwMTAuaApAQCAtNzIsNiArNzIsMjEgQEAKICNkZWZpbmUJVFBTX1ZEQ0RDMQkJMHgwYwogIwlkZWZpbmUJVFBTX0VOQUJMRV9MUAkJKDEgPDwgMykKICNkZWZpbmUJVFBTX1ZEQ0RDMgkJMHgwZAorIwlkZWZpbmUJVFBTX0xQX0NPUkVPRkYJKDEgPDwgNykKKyMJZGVmaW5lIAlUUFNfVkNPUkVfMV84VgkoNzw8NCkKKyMJZGVmaW5lIAlUUFNfVkNPUkVfMV81VgkoNiA8PCA0KQorIwlkZWZpbmUgCVRQU19WQ09SRV8xXzRWCSg1IDw8IDQpCisjCWRlZmluZSAJVFBTX1ZDT1JFXzFfM1YJKDQgPDwgNCkKKyMJZGVmaW5lIAlUUFNfVkNPUkVfMV8yVgkoMyA8PCA0KQorIwlkZWZpbmUgCVRQU19WQ09SRV8xXzFWCSgyIDw8IDQpCisjCWRlZmluZSAJVFBTX1ZDT1JFXzFfMFYJKDEgPDwgNCkKKyMJZGVmaW5lIAlUUFNfVkNPUkVfMF84NVYJKDAgPDwgNCkKKyMJZGVmaW5lCVRQU19WQ09SRV9MUF8xXzJWICgzIDw8IDIpCisjCWRlZmluZQlUUFNfVkNPUkVfTFBfMV8xViAoMiA8PCAyKQorIwlkZWZpbmUJVFBTX1ZDT1JFX0xQXzFfMFYgKDEgPDwgMikKKyMJZGVmaW5lCVRQU19WQ09SRV9MUF8wXzg1ViAoMCA8PCAyKQorIwlkZWZpbmUJVFBTX1ZJQgkJKDEgPDwgMSkKKyMJZGVmaW5lCVRQU19WQ09SRV9ESVNDSAkoMSA8PCAwKQogI2RlZmluZQlUUFNfVlJFR1MxCQkweDBlCiAjCWRlZmluZQlUUFNfTERPMl9FTkFCTEUJKDEgPDwgNykKICMJZGVmaW5lCVRQU19MRE8yX09GRgkoMSA8PCA2KQpAQCAtMTUyLDYgKzE2NywxMCBAQAogICovCiBleHRlcm4gaW50IHRwczY1MDEzX3NldF9sb3dfcHdyKHVuc2lnbmVkIG1vZGUpOwogCisvKiB0cHM2NTAxMF9zZXRfdmRjZGMyCisgKiAgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBWRENEQzIKKyAqLworZXh0ZXJuIGludCB0cHM2NTAxMF9jb25maWdfdmRjZGMyKHVuc2lnbmVkIHZhbHVlKTsKIAogc3RydWN0IGkyY19jbGllbnQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxYzViZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oCkBAIC0wLDAgKzEsNjczIEBACisvKgorICogdHdsNDAzMC5oIC0gaGVhZGVyIGZvciBUV0w0MDMwIFBNIGFuZCBhdWRpbyBDT0RFQyBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIEJhc2VkIG9uIHRsdjMyMGFpYzIzLmM6CisgKiBDb3B5cmlnaHQgKGMpIGJ5IEthaSBTdmFobiA8a2FpLnN2YWhuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1RXTF9IXworI2RlZmluZSBfX1RXTF9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisKKy8qCisgKiBVc2luZyB0aGUgdHdsNDAzMCBjb3JlIHdlIGFkZHJlc3MgcmVnaXN0ZXJzIHVzaW5nIGEgcGFpcgorICoJeyBtb2R1bGUgaWQsIHJlbGF0aXZlIHJlZ2lzdGVyIG9mZnNldCB9CisgKiB3aGljaCB0aGF0IGNvcmUgdGhlbiBtYXBzIHRvIHRoZSByZWxldmFudAorICoJeyBpMmMgc2xhdmUsIGFic29sdXRlIHJlZ2lzdGVyIGFkZHJlc3MgfQorICoKKyAqIFRoZSBtb2R1bGUgSURzIGFyZSBtZWFuaW5nZnVsIG9ubHkgdG8gdGhlIHR3bDQwMzAgY29yZSBjb2RlLAorICogd2hpY2ggdXNlcyB0aGVtIGFzIGFycmF5IGluZGljZXMgdG8gbG9vayB1cCB0aGUgZmlyc3QgcmVnaXN0ZXIKKyAqIGFkZHJlc3MgZWFjaCBtb2R1bGUgdXNlcyB3aXRoaW4gYSBnaXZlbiBpMmMgc2xhdmUuCisgKi8KKworLyogU2xhdmUgMCAoaTJjIGFkZHJlc3MgMHg0OCkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfVVNCCQkweDAwCisKKy8qIFNsYXZlIDEgKGkyYyBhZGRyZXNzIDB4NDkpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFCTB4MDEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfR1BJTwkJMHgwMgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlRCUgkJMHgwMworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QSUgJCTB4MDQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfVEVTVAkJMHgwNQorCisvKiBTbGF2ZSAyIChpMmMgYWRkcmVzcyAweDRhKSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9LRVlQQUQJCTB4MDYKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTUFEQwkJMHgwNworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTCTB4MDgKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTEVECQkweDA5CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX01BSU5fQ0hBUkdFCTB4MEEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFJFQ0hBUkdFCTB4MEIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNMAkJMHgwQworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV00xCQkweDBECisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTUEJCTB4MEUKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNQgkJMHgwRgorCisjZGVmaW5lIFRXTDUwMzFfTU9EVUxFX0FDQ0VTU09SWQkweDEwCisjZGVmaW5lIFRXTDUwMzFfTU9EVUxFX0lOVEVSUlVQVFMJMHgxMQorCisvKiBTbGF2ZSAzIChpMmMgYWRkcmVzcyAweDRiKSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9CQUNLVVAJCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfSU5UCQkweDEzCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUgkweDE0CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSCTB4MTUKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUlRDCQkweDE2CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1NFQ1VSRURfUkVHCTB4MTcKKworI2RlZmluZSBUV0xfTU9EVUxFX1VTQgkJVFdMNDAzMF9NT0RVTEVfVVNCCisjZGVmaW5lIFRXTF9NT0RVTEVfQVVESU9fVk9JQ0UJVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UKKyNkZWZpbmUgVFdMX01PRFVMRV9QSUgJCVRXTDQwMzBfTU9EVUxFX1BJSAorI2RlZmluZSBUV0xfTU9EVUxFX01BREMJCVRXTDQwMzBfTU9EVUxFX01BREMKKyNkZWZpbmUgVFdMX01PRFVMRV9NQUlOX0NIQVJHRQlUV0w0MDMwX01PRFVMRV9NQUlOX0NIQVJHRQorI2RlZmluZSBUV0xfTU9EVUxFX1BNX01BU1RFUglUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIKKyNkZWZpbmUgVFdMX01PRFVMRV9QTV9SRUNFSVZFUglUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUgorI2RlZmluZSBUV0xfTU9EVUxFX1JUQwkJVFdMNDAzMF9NT0RVTEVfUlRDCisKKyNkZWZpbmUgR1BJT19JTlRSX09GRlNFVAkwCisjZGVmaW5lIEtFWVBBRF9JTlRSX09GRlNFVAkxCisjZGVmaW5lIEJDSV9JTlRSX09GRlNFVAkJMgorI2RlZmluZSBNQURDX0lOVFJfT0ZGU0VUCTMKKyNkZWZpbmUgVVNCX0lOVFJfT0ZGU0VUCQk0CisjZGVmaW5lIEJDSV9QUkVTX0lOVFJfT0ZGU0VUCTkKKyNkZWZpbmUgVVNCX1BSRVNfSU5UUl9PRkZTRVQJMTAKKyNkZWZpbmUgUlRDX0lOVFJfT0ZGU0VUCQkxMQorCisvKgorICogT2Zmc2V0IGZyb20gVFdMNjAzMF9JUlFfQkFTRSAvIHBkYXRhLT5pcnFfYmFzZQorICovCisjZGVmaW5lIFBXUl9JTlRSX09GRlNFVAkJMAorI2RlZmluZSBIT1RESUVfSU5UUl9PRkZTRVQJMTIKKyNkZWZpbmUgU01QU0xET19JTlRSX09GRlNFVAkxMworI2RlZmluZSBCQVRERVRFQ1RfSU5UUl9PRkZTRVQJMTQKKyNkZWZpbmUgU0lNREVURUNUX0lOVFJfT0ZGU0VUCTE1CisjZGVmaW5lIE1NQ0RFVEVDVF9JTlRSX09GRlNFVAkxNgorI2RlZmluZSBHQVNHQVVHRV9JTlRSX09GRlNFVAkxNworI2RlZmluZSBVU0JPVEdfSU5UUl9PRkZTRVQJNAorI2RlZmluZSBDSEFSR0VSX0lOVFJfT0ZGU0VUCTIKKyNkZWZpbmUgUlNWX0lOVFJfT0ZGU0VUCQkwCisKKy8qIElOVCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFJFR19JTlRfU1RTX0EJCQkweDAwCisjZGVmaW5lIFJFR19JTlRfU1RTX0IJCQkweDAxCisjZGVmaW5lIFJFR19JTlRfU1RTX0MJCQkweDAyCisKKyNkZWZpbmUgUkVHX0lOVF9NU0tfTElORV9BCQkweDAzCisjZGVmaW5lIFJFR19JTlRfTVNLX0xJTkVfQgkJMHgwNAorI2RlZmluZSBSRUdfSU5UX01TS19MSU5FX0MJCTB4MDUKKworI2RlZmluZSBSRUdfSU5UX01TS19TVFNfQQkJMHgwNgorI2RlZmluZSBSRUdfSU5UX01TS19TVFNfQgkJMHgwNworI2RlZmluZSBSRUdfSU5UX01TS19TVFNfQwkJMHgwOAorCisvKiBNQVNLIElOVCBSRUcgR1JPVVAgQSAqLworI2RlZmluZSBUV0w2MDMwX1BXUl9JTlRfTUFTSyAJCTB4MDcKKyNkZWZpbmUgVFdMNjAzMF9SVENfSU5UX01BU0sgCQkweDE4CisjZGVmaW5lIFRXTDYwMzBfSE9URElFX0lOVF9NQVNLIAkweDIwCisjZGVmaW5lIFRXTDYwMzBfU01QU0xET0FfSU5UX01BU0sJMHhDMAorCisvKiBNQVNLIElOVCBSRUcgR1JPVVAgQiAqLworI2RlZmluZSBUV0w2MDMwX1NNUFNMRE9CX0lOVF9NQVNLIAkweDAxCisjZGVmaW5lIFRXTDYwMzBfQkFUREVURUNUX0lOVF9NQVNLIAkweDAyCisjZGVmaW5lIFRXTDYwMzBfU0lNREVURUNUX0lOVF9NQVNLIAkweDA0CisjZGVmaW5lIFRXTDYwMzBfTU1DREVURUNUX0lOVF9NQVNLIAkweDA4CisjZGVmaW5lIFRXTDYwMzBfR1BBRENfSU5UX01BU0sgCQkweDYwCisjZGVmaW5lIFRXTDYwMzBfR0FTR0FVR0VfSU5UX01BU0sgCTB4ODAKKworLyogTUFTSyBJTlQgUkVHIEdST1VQIEMgKi8KKyNkZWZpbmUgVFdMNjAzMF9VU0JPVEdfSU5UX01BU0sgIAkweDBGCisjZGVmaW5lIFRXTDYwMzBfQ0hBUkdFUl9DVFJMX0lOVF9NQVNLIAkweDEwCisjZGVmaW5lIFRXTDYwMzBfQ0hBUkdFUl9GQVVMVF9JTlRfTUFTSyAJMHg2MAorCisKKyNkZWZpbmUgVFdMNDAzMF9DTEFTU19JRCAJCTB4NDAzMAorI2RlZmluZSBUV0w2MDMwX0NMQVNTX0lEIAkJMHg2MDMwCit1bnNpZ25lZCBpbnQgdHdsX3Jldih2b2lkKTsKKyNkZWZpbmUgR0VUX1RXTF9SRVYgKHR3bF9yZXYoKSkKKyNkZWZpbmUgVFdMX0NMQVNTX0lTKGNsYXNzLCBpZCkJCQlcCitzdGF0aWMgaW5saW5lIGludCB0d2xfY2xhc3NfaXNfICMjY2xhc3Modm9pZCkJXAorewkJCQkJCVwKKwlyZXR1cm4gKChpZCkgPT0gKEdFVF9UV0xfUkVWKSkgPyAxIDogMDsJXAorfQorCitUV0xfQ0xBU1NfSVMoNDAzMCwgVFdMNDAzMF9DTEFTU19JRCkKK1RXTF9DTEFTU19JUyg2MDMwLCBUV0w2MDMwX0NMQVNTX0lEKQorCisvKgorICogUmVhZCBhbmQgd3JpdGUgc2luZ2xlIDgtYml0IHJlZ2lzdGVycworICovCitpbnQgdHdsX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbCwgdTggcmVnKTsKK2ludCB0d2xfaTJjX3JlYWRfdTgodTggbW9kX25vLCB1OCAqdmFsLCB1OCByZWcpOworCisvKgorICogUmVhZCBhbmQgd3JpdGUgc2V2ZXJhbCA4LWJpdCByZWdpc3RlcnMgYXQgb25jZS4KKyAqCisgKiBJTVBPUlRBTlQ6ICBGb3IgdHdsX2kyY193cml0ZSgpLCBhbGxvY2F0ZSBudW1fYnl0ZXMgKyAxCisgKiBmb3IgdGhlIHZhbHVlLCBhbmQgcG9wdWxhdGUgeW91ciBkYXRhIHN0YXJ0aW5nIGF0IG9mZnNldCAxLgorICovCitpbnQgdHdsX2kyY193cml0ZSh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1bnNpZ25lZCBudW1fYnl0ZXMpOworaW50IHR3bF9pMmNfcmVhZCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1bnNpZ25lZCBudW1fYnl0ZXMpOworCitpbnQgdHdsNjAzMF9pbnRlcnJ1cHRfdW5tYXNrKHU4IGJpdF9tYXNrLCB1OCBvZmZzZXQpOworaW50IHR3bDYwMzBfaW50ZXJydXB0X21hc2sodTggYml0X21hc2ssIHU4IG9mZnNldCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBOT1RFOiAgYXQgdXAgdG8gMTAyNCByZWdpc3RlcnMsIHRoaXMgaXMgYSBiaWcgY2hpcC4KKyAqCisgKiBBdm9pZCBwdXR0aW5nIHJlZ2lzdGVyIGRlY2xhcmF0aW9ucyBpbiB0aGlzIGZpbGUsIGluc3RlYWQgb2YgaW50bworICogYSBkcml2ZXItcHJpdmF0ZSBmaWxlLCB1bmxlc3Mgc29tZSBvZiB0aGUgcmVnaXN0ZXJzIGluIGEgYmxvY2sKKyAqIG5lZWQgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgZHJpdmVycy4gIE9uZSBleGFtcGxlIGlzIGJsb2NrcyB0aGF0CisgKiBoYXZlIFNlY29uZGFyeSBJUlEgSGFuZGxlciAoU0lIKSByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX0VYQ0xFTl9NQVNLCUJJVCgwKQorI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX1BFTkRESVNfTUFTSwlCSVQoMSkKKyNkZWZpbmUgVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSwlCSVQoMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEdQSU8gQmxvY2sgUmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0dQSU8pCisgKi8KKworI2RlZmluZSBSRUdfR1BJT0RBVEFJTjEJCQkweDAKKyNkZWZpbmUgUkVHX0dQSU9EQVRBSU4yCQkJMHgxCisjZGVmaW5lIFJFR19HUElPREFUQUlOMwkJCTB4MgorI2RlZmluZSBSRUdfR1BJT0RBVEFESVIxCQkweDMKKyNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMgkJMHg0CisjZGVmaW5lIFJFR19HUElPREFUQURJUjMJCTB4NQorI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQxCQkweDYKKyNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMgkJMHg3CisjZGVmaW5lIFJFR19HUElPREFUQU9VVDMJCTB4OAorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDEJCTB4OQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDIJCTB4QQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDMJCTB4QgorI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQxCQkweEMKKyNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMgkJMHhECisjZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDMJCTB4RQorI2RlZmluZSBSRUdfR1BJT19ERUJFTjEJCQkweEYKKyNkZWZpbmUgUkVHX0dQSU9fREVCRU4yCQkJMHgxMAorI2RlZmluZSBSRUdfR1BJT19ERUJFTjMJCQkweDExCisjZGVmaW5lIFJFR19HUElPX0NUUkwJCQkweDEyCisjZGVmaW5lIFJFR19HUElPUFVQRENUUjEJCTB4MTMKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMgkJMHgxNAorI2RlZmluZSBSRUdfR1BJT1BVUERDVFIzCQkweDE1CisjZGVmaW5lIFJFR19HUElPUFVQRENUUjQJCTB4MTYKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSNQkJMHgxNworI2RlZmluZSBSRUdfR1BJT19JU1IxQQkJCTB4MTkKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkEJCQkweDFBCisjZGVmaW5lIFJFR19HUElPX0lTUjNBCQkJMHgxQgorI2RlZmluZSBSRUdfR1BJT19JTVIxQQkJCTB4MUMKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkEJCQkweDFECisjZGVmaW5lIFJFR19HUElPX0lNUjNBCQkJMHgxRQorI2RlZmluZSBSRUdfR1BJT19JU1IxQgkJCTB4MUYKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkIJCQkweDIwCisjZGVmaW5lIFJFR19HUElPX0lTUjNCCQkJMHgyMQorI2RlZmluZSBSRUdfR1BJT19JTVIxQgkJCTB4MjIKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkIJCQkweDIzCisjZGVmaW5lIFJFR19HUElPX0lNUjNCCQkJMHgyNAorI2RlZmluZSBSRUdfR1BJT19FRFIxCQkJMHgyOAorI2RlZmluZSBSRUdfR1BJT19FRFIyCQkJMHgyOQorI2RlZmluZSBSRUdfR1BJT19FRFIzCQkJMHgyQQorI2RlZmluZSBSRUdfR1BJT19FRFI0CQkJMHgyQgorI2RlZmluZSBSRUdfR1BJT19FRFI1CQkJMHgyQworI2RlZmluZSBSRUdfR1BJT19TSUhfQ1RSTAkJMHgyRAorCisvKiBVcCB0byAxOCBzaWduYWxzIGFyZSBhdmFpbGFibGUgYXMgR1BJT3MsIHdoZW4gdGhlaXIKKyAqIHBpbnMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbm90aGVyIHVzZSAoc3VjaCBhcyBVTFBJL1VTQikuCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9HUElPX01BWAkJMTgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEtleXBhZCByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfS0VZUEFEKQorICogLi4uIFNJSC9pbnRlcnJ1cHQgb25seQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IxCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIxCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IyCTB4MTMKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIyCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9TSVIJCTB4MTUJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0VEUgkJMHgxNgorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJSF9DVFJMCTB4MTcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE11bHRpY2hhbm5lbCBBREMgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX01BREMpCisgKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5CisgKi8KKworI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMQkJMHg2MQorI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMQkJMHg2MgorI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMgkJMHg2MworI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMgkJMHg2NAorI2RlZmluZSBUV0w0MDMwX01BRENfU0lSCQkweDY1CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9NQURDX0VEUgkJMHg2NgorI2RlZmluZSBUV0w0MDMwX01BRENfU0lIX0NUUkwJCTB4NjcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEJhdHRlcnkgY2hhcmdlciByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUykKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQQkweDAKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJBCTB4MQorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUEJMHgyCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQQkweDMKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCCTB4NAorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkIJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQgkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJCCTB4NworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMQkweDgJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMgkweDkJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMQkweGEKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjIJMHhiCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIzCTB4YworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTAkweGQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFBvd2VyIEludGVycnVwdCBibG9jayByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5UKQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lTUjEJCTB4MAorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSU1SMQkJMHgxCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JU1IyCQkweDIKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lNUjIJCTB4MworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfU0lSCQkweDQJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfRURSMQkJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIyCQkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX1NJSF9DVFJMCTB4NworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQWNjZXNzb3J5IEludGVycnVwdHMKKyAqLworI2RlZmluZSBUV0w1MDMxX0FDSUlNUl9MU0IJCTB4MDUKKyNkZWZpbmUgVFdMNTAzMV9BQ0lJTVJfTVNCCQkweDA2CisjZGVmaW5lIFRXTDUwMzFfQUNJSURSX0xTQgkJMHgwNworI2RlZmluZSBUV0w1MDMxX0FDSUlEUl9NU0IJCTB4MDgKKyNkZWZpbmUgVFdMNTAzMV9BQ0NJU1IxCQkJMHgwRgorI2RlZmluZSBUV0w1MDMxX0FDQ0lNUjEJCQkweDEwCisjZGVmaW5lIFRXTDUwMzFfQUNDSVNSMgkJCTB4MTEKKyNkZWZpbmUgVFdMNTAzMV9BQ0NJTVIyCQkJMHgxMgorI2RlZmluZSBUV0w1MDMxX0FDQ1NJUgkJCTB4MTMKKyNkZWZpbmUgVFdMNTAzMV9BQ0NFRFIxCQkJMHgxNAorI2RlZmluZSBUV0w1MDMxX0FDQ1NJSENUUkwJCTB4MTUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sbGVyCisgKi8KKworI2RlZmluZSBUV0w1MDMxX0lOVEVSUlVQVFNfQkNJSVNSMQkweDAKKyNkZWZpbmUgVFdMNTAzMV9JTlRFUlJVUFRTX0JDSUlNUjEJMHgxCisjZGVmaW5lIFRXTDUwMzFfSU5URVJSVVBUU19CQ0lJU1IyCTB4MgorI2RlZmluZSBUV0w1MDMxX0lOVEVSUlVQVFNfQkNJSU1SMgkweDMKKyNkZWZpbmUgVFdMNTAzMV9JTlRFUlJVUFRTX0JDSVNJUgkweDQKKyNkZWZpbmUgVFdMNTAzMV9JTlRFUlJVUFRTX0JDSUVEUjEJMHg1CisjZGVmaW5lIFRXTDUwMzFfSU5URVJSVVBUU19CQ0lFRFIyCTB4NgorI2RlZmluZSBUV0w1MDMxX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTAkweDcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUG93ZXIgYnVzIG1lc3NhZ2UgZGVmaW5pdGlvbnMgKi8KKworLyogVGhlIFRXTDQwMzAvNTAzMCBzcGxpdHMgaXRzIHBvd2VyLW1hbmFnZW1lbnQgcmVzb3VyY2VzICh0aGUgdmFyaW91cworICogcmVndWxhdG9ycywgY2xvY2sgYW5kIHJlc2V0IGxpbmVzKSBpbnRvIDMgcHJvY2Vzc29yIGdyb3VwcyAtIFAxLCBQMiBhbmQKKyAqIFAzLiBUaGVzZSBncm91cHMgY2FuIHRoZW4gYmUgY29uZmlndXJlZCB0byB0cmFuc2l0aW9uIGJldHdlZW4gc2xlZXAsIHdhaXQtb24KKyAqIGFuZCBhY3RpdmUgc3RhdGVzIGJ5IHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIHBvd2VyIGJ1cy4gIFNlZSBTZWN0aW9uIDUuNC4yCisgKiBQb3dlciBSZXNvdXJjZXMgb2YgVFdMNDAzMCBUUk0KKyAqLworCisvKiBQcm9jZXNzb3IgZ3JvdXBzICovCisjZGVmaW5lIERFVl9HUlBfTlVMTAkJMHgwCisjZGVmaW5lIERFVl9HUlBfUDEJCTB4MQkvKiBQMTogYWxsIE9NQVAgZGV2aWNlcyAqLworI2RlZmluZSBERVZfR1JQX1AyCQkweDIJLyogUDI6IGFsbCBNb2RlbSBkZXZpY2VzICovCisjZGVmaW5lIERFVl9HUlBfUDMJCTB4NAkvKiBQMzogYWxsIHBlcmlwaGVyYWwgZGV2aWNlcyAqLworCisvKiBSZXNvdXJjZSBncm91cHMgKi8KKyNkZWZpbmUgUkVTX0dSUF9SRVMJCTB4MAkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBSRVNfR1JQX1BQCQkweDEJLyogUG93ZXIgcHJvdmlkZXJzICovCisjZGVmaW5lIFJFU19HUlBfUkMJCTB4MgkvKiBSZXNldCBhbmQgY29udHJvbCAqLworI2RlZmluZSBSRVNfR1JQX1BQX1JDCQkweDMKKyNkZWZpbmUgUkVTX0dSUF9QUgkJMHg0CS8qIFBvd2VyIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgUkVTX0dSUF9QUF9QUgkJMHg1CisjZGVmaW5lIFJFU19HUlBfUkNfUFIJCTB4NgorI2RlZmluZSBSRVNfR1JQX0FMTAkJMHg3CS8qIEFsbCByZXNvdXJjZSBncm91cHMgKi8KKworI2RlZmluZSBSRVNfVFlQRTJfUjAJCTB4MAorCisjZGVmaW5lIFJFU19UWVBFX0FMTAkJMHg3CisKKy8qIFJlc291cmNlIHN0YXRlcyAqLworI2RlZmluZSBSRVNfU1RBVEVfV1JTVAkJMHhGCisjZGVmaW5lIFJFU19TVEFURV9BQ1RJVkUJMHhFCisjZGVmaW5lIFJFU19TVEFURV9TTEVFUAkJMHg4CisjZGVmaW5lIFJFU19TVEFURV9PRkYJCTB4MAorCisvKiBQb3dlciByZXNvdXJjZXMgKi8KKworLyogUG93ZXIgcHJvdmlkZXJzICovCisjZGVmaW5lIFJFU19WQVVYMSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkVTX1ZBVVgyICAgICAgICAgICAgICAgMgorI2RlZmluZSBSRVNfVkFVWDMgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJFU19WQVVYNCAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkVTX1ZNTUMxICAgICAgICAgICAgICAgNQorI2RlZmluZSBSRVNfVk1NQzIgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJFU19WUExMMSAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUkVTX1ZQTEwyICAgICAgICAgICAgICAgOAorI2RlZmluZSBSRVNfVlNJTSAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJFU19WREFDICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFJFU19WSU5UQU5BMSAgICAgICAgICAgIDExCisjZGVmaW5lIFJFU19WSU5UQU5BMiAgICAgICAgICAgIDEyCisjZGVmaW5lIFJFU19WSU5URElHICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJFU19WSU8gICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFJFU19WREQxICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFJFU19WREQyICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJFU19WVVNCXzFWNSAgICAgICAgICAgIDE3CisjZGVmaW5lIFJFU19WVVNCXzFWOCAgICAgICAgICAgIDE4CisjZGVmaW5lIFJFU19WVVNCXzNWMSAgICAgICAgICAgIDE5CisjZGVmaW5lIFJFU19WVVNCQ1AgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFJFU19SRUdFTiAgICAgICAgICAgICAgIDIxCisvKiBSZXNldCBhbmQgY29udHJvbCAqLworI2RlZmluZSBSRVNfTlJFU19QV1JPTiAgICAgICAgICAyMgorI2RlZmluZSBSRVNfQ0xLRU4gICAgICAgICAgICAgICAyMworI2RlZmluZSBSRVNfU1lTRU4gICAgICAgICAgICAgICAyNAorI2RlZmluZSBSRVNfSEZDTEtPVVQgICAgICAgICAgICAyNQorI2RlZmluZSBSRVNfMzJLQ0xLT1VUICAgICAgICAgICAyNgorI2RlZmluZSBSRVNfUkVTRVQgICAgICAgICAgICAgICAyNworLyogUG93ZXIgUmVmZXJlbmNlICovCisjZGVmaW5lIFJFU19NYWluX1JlZiAgICAgICAgICAgIDI4CisKKyNkZWZpbmUgVE9UQUxfUkVTT1VSQ0VTCQkyOAorLyoKKyAqIFBvd2VyIEJ1cyBNZXNzYWdlIEZvcm1hdCAuLi4gdGhlc2UgY2FuIGJlIHNlbnQgaW5kaXZpZHVhbGx5IGJ5IExpbnV4LAorICogYnV0IGFyZSB1c3VhbGx5IHBhcnQgb2YgZG93bmxvYWRlZCBzY3JpcHRzIHRoYXQgYXJlIHJ1biB3aGVuIHZhcmlvdXMKKyAqIHBvd2VyIGV2ZW50cyBhcmUgdHJpZ2dlcmVkLgorICoKKyAqICBCcm9hZGNhc3QgTWVzc2FnZSAoMTYgQml0cyk6CisgKiAgICBERVZfR1JQWzE1OjEzXSBNVFsxMl0gIFJFU19HUlBbMTE6OV0gIFJFU19UWVBFMls4OjddIFJFU19UWVBFWzY6NF0KKyAqICAgIFJFU19TVEFURVszOjBdCisgKgorICogIFNpbmd1bGFyIE1lc3NhZ2UgKDE2IEJpdHMpOgorICogICAgREVWX0dSUFsxNToxM10gTVRbMTJdICBSRVNfSURbMTE6NF0gIFJFU19TVEFURVszOjBdCisgKi8KKworI2RlZmluZSBNU0dfQlJPQURDQVNUKGRldmdycCwgZ3JwLCB0eXBlLCB0eXBlMiwgc3RhdGUpIFwKKwkoIChkZXZncnApIDw8IDEzIHwgMSA8PCAxMiB8IChncnApIDw8IDkgfCAodHlwZTIpIDw8IDcgXAorCXwgKHR5cGUpIDw8IDQgfCAoc3RhdGUpKQorCisjZGVmaW5lIE1TR19TSU5HVUxBUihkZXZncnAsIGlkLCBzdGF0ZSkgXAorCSgoZGV2Z3JwKSA8PCAxMyB8IDAgPDwgMTIgfCAoaWQpIDw8IDQgfCAoc3RhdGUpKQorCisjZGVmaW5lIE1TR19CUk9BRENBU1RfQUxMKGRldmdycCwgc3RhdGUpIFwKKwkoKGRldmdycCkgPDwgNSB8IChzdGF0ZSkpCisKKyNkZWZpbmUgTVNHX0JST0FEQ0FTVF9SRUYgTVNHX0JST0FEQ0FTVF9BTEwKKyNkZWZpbmUgTVNHX0JST0FEQ0FTVF9QUk9WIE1TR19CUk9BRENBU1RfQUxMCisjZGVmaW5lIE1TR19CUk9BRENBU1RfX0NMS19SU1QgTVNHX0JST0FEQ0FTVF9BTEwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCB0d2w0MDMwX2Nsb2NrX2luaXRfZGF0YSB7CisJYm9vbCBjazMya19sb3dwd3JfZW5hYmxlOworfTsKKworc3RydWN0IHR3bDQwMzBfYmNpX3BsYXRmb3JtX2RhdGEgeworCWludCAqYmF0dGVyeV90bXBfdGJsOworCXVuc2lnbmVkIGludCB0YmxzaXplOworfTsKKworLyogVFdMNDAzMF9HUElPX01BWCAoMTgpIEdQSU9zLCB3aXRoIGludGVycnVwdHMgKi8KK3N0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSB7CisJaW50CQlncGlvX2Jhc2U7CisJdW5zaWduZWQJaXJxX2Jhc2UsIGlycV9lbmQ7CisKKwkvKiBwYWNrYWdlIHRoZSB0d28gTEVEIHNpZ25hbHMgYXMgb3V0cHV0LW9ubHkgR1BJT3M/ICovCisJYm9vbAkJdXNlX2xlZHM7CisKKwkvKiBncGlvLW4gc2hvdWxkIGNvbnRyb2wgVk1NQyhuKzEpIGlmIEJJVChuKSBpbiBtbWNfY2QgaXMgc2V0ICovCisJdTgJCW1tY19jZDsKKworCS8qIGlmIEJJVChOKSBpcyBzZXQsIG9yIFZNTUMobisxKSBpcyBsaW5rZWQsIGRlYm91bmNlIEdQSU8tTiAqLworCXUzMgkJZGVib3VuY2U7CisKKwkvKiBGb3IgZ3Bpby1OLCBiaXQgKDEgPDwgTikgaW4gInB1bGx1cHMiIGlzIHNldCBpZiB0aGF0IHB1bGx1cAorCSAqIHNob3VsZCBiZSBlbmFibGVkLiAgRWxzZSwgaWYgdGhhdCBiaXQgaXMgc2V0IGluICJwdWxsZG93bnMiLAorCSAqIHRoYXQgcHVsbGRvd24gaXMgZW5hYmxlZC4gIERvbid0IHdhc3RlIHBvd2VyIGJ5IGxldHRpbmcgYW55CisJICogZGlnaXRhbCBpbnB1dHMgZmxvYXQuLi4KKwkgKi8KKwl1MzIJCXB1bGx1cHM7CisJdTMyCQlwdWxsZG93bnM7CisKKwlpbnQJCSgqc2V0dXApKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3Bpbyk7CisJaW50CQkoKnRlYXJkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pOworfTsKKworc3RydWN0IHR3bDQwMzBfbWFkY19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCWlycV9saW5lOworfTsKKworLyogQm9hcmRzIGhhdmUgdW5pcWUgbWFwcGluZ3Mgb2Yge3JvdywgY29sfSAtLT4ga2V5Y29kZS4KKyAqIENvbHVtbiBhbmQgcm93IGFyZSA4IGJpdHMgZWFjaCwgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgorICogYSBQRVJTSVNURU5UX0tFWSBpcyAiYWx3YXlzIG9uIiBhbmQgbmV2ZXIgcmVwb3J0ZWQuCisgKi8KKyNkZWZpbmUgUEVSU0lTVEVOVF9LRVkociwgYykJS0VZKChyKSwgKGMpLCBLRVlfUkVTRVJWRUQpCisKK3N0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKKwl1bnNpZ25lZCByb3dzOworCXVuc2lnbmVkIGNvbHM7CisJYm9vbCByZXA7Cit9OworCitlbnVtIHR3bDQwMzBfdXNiX21vZGUgeworCVQyX1VTQl9NT0RFX1VMUEkgPSAxLAorCVQyX1VTQl9NT0RFX0NFQTIwMTFfM1BJTiA9IDIsCit9OworCitzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSB7CisJZW51bSB0d2w0MDMwX3VzYl9tb2RlCXVzYl9tb2RlOworfTsKKworc3RydWN0IHR3bDQwMzBfaW5zIHsKKwl1MTYgcG1iX21lc3NhZ2U7CisJdTggZGVsYXk7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9zY3JpcHQgeworCXN0cnVjdCB0d2w0MDMwX2lucyAqc2NyaXB0OworCXVuc2lnbmVkIHNpemU7CisJdTggZmxhZ3M7CisjZGVmaW5lIFRXTDQwMzBfV1JTVF9TQ1JJUFQJKDE8PDApCisjZGVmaW5lIFRXTDQwMzBfV0FLRVVQMTJfU0NSSVBUCSgxPDwxKQorI2RlZmluZSBUV0w0MDMwX1dBS0VVUDNfU0NSSVBUCSgxPDwyKQorI2RlZmluZSBUV0w0MDMwX1NMRUVQX1NDUklQVAkoMTw8MykKK307CisKK3N0cnVjdCB0d2w0MDMwX3Jlc2NvbmZpZyB7CisJdTggcmVzb3VyY2U7CisJdTggZGV2Z3JvdXA7CS8qIFByb2Nlc3NvciBncm91cCB0aGF0IFBvd2VyIHJlc291cmNlIGJlbG9uZ3MgdG8gKi8KKwl1OCB0eXBlOwkvKiBQb3dlciByZXNvdXJjZSBhZGRyZXNzZWQsIDYgLyBicm9hZGNhc3QgbWVzc2FnZSAqLworCXU4IHR5cGUyOwkvKiBQb3dlciByZXNvdXJjZSBhZGRyZXNzZWQsIDMgLyBicm9hZGNhc3QgbWVzc2FnZSAqLworCXU4IHJlbWFwX29mZjsJLyogb2ZmIHN0YXRlIHJlbWFwcGluZyAqLworCXU4IHJlbWFwX3NsZWVwOwkvKiBzbGVlcCBzdGF0ZSByZW1hcHBpbmcgKi8KK307CisKK3N0cnVjdCB0d2w0MDMwX3Bvd2VyX2RhdGEgeworCXN0cnVjdCB0d2w0MDMwX3NjcmlwdCAqKnNjcmlwdHM7CisJdW5zaWduZWQgbnVtOworCXN0cnVjdCB0d2w0MDMwX3Jlc2NvbmZpZyAqcmVzb3VyY2VfY29uZmlnOworI2RlZmluZSBUV0w0MDMwX1JFU0NPTkZJR19VTkRFRgkoKHU4KS0xKQorfTsKKworZXh0ZXJuIHZvaWQgdHdsNDAzMF9wb3dlcl9pbml0KHN0cnVjdCB0d2w0MDMwX3Bvd2VyX2RhdGEgKnRyaXRvbjJfc2NyaXB0cyk7CisKK3N0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgeworCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOworCXVuc2lnbmVkIGludCByYW1wX2RlbGF5X3ZhbHVlOworCXVuc2lnbmVkIGludCBoc19leHRtdXRlOjE7CisJdm9pZCAoKnNldF9oc19leHRtdXRlKShpbnQgbXV0ZSk7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQJYXVkaW9fbWNsazsKKwl1bnNpZ25lZCBpbnQJY29leGlzdDsKK307CisKK3N0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgeworCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOworCXN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEJCSphdWRpbzsKKwlzdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhCQkqdmlicmE7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZAkJCQlpcnFfYmFzZSwgaXJxX2VuZDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbG9ja19pbml0X2RhdGEJCSpjbG9jazsKKwlzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YQkqYmNpOworCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YQkqZ3BpbzsKKwlzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEJKm1hZGM7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEJCSprZXlwYWQ7CisJc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEJCQkqdXNiOworCXN0cnVjdCB0d2w0MDMwX3Bvd2VyX2RhdGEJCSpwb3dlcjsKKwlzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhCQkqY29kZWM7CisKKwkvKiBDb21tb24gTERPIHJlZ3VsYXRvcnMgZm9yIFRXTDQwMzAvVFdMNjAzMCAqLworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdmRhYzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZhdXgxOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdmF1eDI7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2YXV4MzsKKwkvKiBUV0w0MDMwIExETyByZWd1bGF0b3JzICovCisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2cGxsMTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZwbGwyOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdm1tYzE7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2bW1jMjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZzaW07CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2YXV4NDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZpbzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZkZDE7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2ZGQyOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdmludGFuYTE7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2aW50YW5hMjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZpbnRkaWc7CisJLyogVFdMNjAzMCBMRE8gcmVndWxhdG9ycyAqLworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICAgICAgICAgICAgICAqdm1tYzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAgICAgICAgICAgICAgKnZwcDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAgICAgICAgICAgICAgKnZ1c2ltOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICAgICAgICAgICAgICAqdmFuYTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAgICAgICAgICAgICAgKnZjeGlvOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICAgICAgICAgICAgICAqdnVzYjsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCB0d2w0MDMwX3NpaF9zZXR1cChpbnQgbW9kdWxlKTsKKworLyogT2Zmc2V0cyB0byBQb3dlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFdMNDAzMF9WREFDX0RFVl9HUlAJCTB4M0IKKyNkZWZpbmUgVFdMNDAzMF9WREFDX0RFRElDQVRFRAkJMHgzRQorI2RlZmluZSBUV0w0MDMwX1ZBVVgxX0RFVl9HUlAJCTB4MTcKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMV9ERURJQ0FURUQJCTB4MUEKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMl9ERVZfR1JQCQkweDFCCisjZGVmaW5lIFRXTDQwMzBfVkFVWDJfREVESUNBVEVECQkweDFFCisjZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVWX0dSUAkJMHgxRgorI2RlZmluZSBUV0w0MDMwX1ZBVVgzX0RFRElDQVRFRAkJMHgyMgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQorCWV4dGVybiBpbnQgdHdsNDAzMGNoYXJnZXJfdXNiX2VuKGludCBlbmFibGUpOworI2Vsc2UKKwlzdGF0aWMgaW5saW5lIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIExpbnV4LXNwZWNpZmljIHJlZ3VsYXRvciBpZGVudGlmaWVycyAuLi4gZm9yIG5vdywgd2Ugb25seSBzdXBwb3J0CisgKiB0aGUgTERPcywgYW5kIGxlYXZlIHRoZSB0aHJlZSBidWNrIGNvbnZlcnRlcnMgYWxvbmUuICBWREQxIGFuZCBWREQyCisgKiBuZWVkIHRvIHRpZSBpbnRvIGhhcmR3YXJlIGJhc2VkIHZvbHRhZ2Ugc2NhbGluZyAoY3B1ZnJlcSBldGMpLCB3aGlsZQorICogVklPIGlzIGdlbmVyYWxseSBmaXhlZC4KKyAqLworCisvKiBUV0w0MDMwIFNNUFMvTERPJ3MgKi8KKy8qIEVYVEVSTkFMIGRjLXRvLWRjIGJ1Y2sgY29udmVydGVycyAqLworI2RlZmluZSBUV0w0MDMwX1JFR19WREQxCTAKKyNkZWZpbmUgVFdMNDAzMF9SRUdfVkREMgkxCisjZGVmaW5lIFRXTDQwMzBfUkVHX1ZJTwkJMgorCisvKiBFWFRFUk5BTCBMRE9zICovCisjZGVmaW5lIFRXTDQwMzBfUkVHX1ZEQUMJMworI2RlZmluZSBUV0w0MDMwX1JFR19WUExMMQk0CisjZGVmaW5lIFRXTDQwMzBfUkVHX1ZQTEwyCTUJLyogbm90IG9uIGFsbCBjaGlwcyAqLworI2RlZmluZSBUV0w0MDMwX1JFR19WTU1DMQk2CisjZGVmaW5lIFRXTDQwMzBfUkVHX1ZNTUMyCTcJLyogbm90IG9uIGFsbCBjaGlwcyAqLworI2RlZmluZSBUV0w0MDMwX1JFR19WU0lNCTgJLyogbm90IG9uIGFsbCBjaGlwcyAqLworI2RlZmluZSBUV0w0MDMwX1JFR19WQVVYMQk5CS8qIG5vdCBvbiBhbGwgY2hpcHMgKi8KKyNkZWZpbmUgVFdMNDAzMF9SRUdfVkFVWDJfNDAzMAkxMAkvKiAodHdsNDAzMC1zcGVjaWZpYykgKi8KKyNkZWZpbmUgVFdMNDAzMF9SRUdfVkFVWDIJMTEJLyogKHR3bDUwMzAgYW5kIG5ld2VyKSAqLworI2RlZmluZSBUV0w0MDMwX1JFR19WQVVYMwkxMgkvKiBub3Qgb24gYWxsIGNoaXBzICovCisjZGVmaW5lIFRXTDQwMzBfUkVHX1ZBVVg0CTEzCS8qIG5vdCBvbiBhbGwgY2hpcHMgKi8KKworLyogSU5URVJOQUwgTERPcyAqLworI2RlZmluZSBUV0w0MDMwX1JFR19WSU5UQU5BMQkxNAorI2RlZmluZSBUV0w0MDMwX1JFR19WSU5UQU5BMgkxNQorI2RlZmluZSBUV0w0MDMwX1JFR19WSU5URElHCTE2CisjZGVmaW5lIFRXTDQwMzBfUkVHX1ZVU0IxVjUJMTcKKyNkZWZpbmUgVFdMNDAzMF9SRUdfVlVTQjFWOAkxOAorI2RlZmluZSBUV0w0MDMwX1JFR19WVVNCM1YxCTE5CisKKy8qIFRXTDYwMzAgU01QUy9MRE8ncyAqLworLyogRVhURVJOQUwgZGMtdG8tZGMgYnVjayBjb252ZXJ0b3IgY29udG9sbGFibGUgdmlhIFNSICovCisjZGVmaW5lIFRXTDYwMzBfUkVHX1ZERDEJMzAKKyNkZWZpbmUgVFdMNjAzMF9SRUdfVkREMgkzMQorI2RlZmluZSBUV0w2MDMwX1JFR19WREQzCTMyCisKKy8qIE5vbiBTUiBjb21wbGlhbnQgZGMtdG8tZGMgYnVjayBjb252ZXJ0b3JzICovCisjZGVmaW5lCVRXTDYwMzBfUkVHX1ZNRU0JMzMKKyNkZWZpbmUgVFdMNjAzMF9SRUdfVjJWMQkzNAorI2RlZmluZQlUV0w2MDMwX1JFR19WMVYyOQkzNQorI2RlZmluZSBUV0w2MDMwX1JFR19WMVY4CTM2CisKKy8qIEVYVEVSTkFMIExET3MgKi8KKyNkZWZpbmUgVFdMNjAzMF9SRUdfVkFVWDFfNjAzMAkzNworI2RlZmluZSBUV0w2MDMwX1JFR19WQVVYMl82MDMwCTM4CisjZGVmaW5lIFRXTDYwMzBfUkVHX1ZBVVgzXzYwMzAJMzkKKyNkZWZpbmUgVFdMNjAzMF9SRUdfVk1NQwk0MAorI2RlZmluZSBUV0w2MDMwX1JFR19WUFAJCTQxCisjZGVmaW5lIFRXTDYwMzBfUkVHX1ZVU0lNCTQyCisjZGVmaW5lIFRXTDYwMzBfUkVHX1ZBTkEJNDMKKyNkZWZpbmUgVFdMNjAzMF9SRUdfVkNYSU8JNDQKKyNkZWZpbmUgVFdMNjAzMF9SRUdfVkRBQwk0NQorI2RlZmluZSBUV0w2MDMwX1JFR19WVVNCCTQ2CisKKy8qIElOVEVSTkFMIExET3MgKi8KKyNkZWZpbmUgVFdMNjAzMF9SRUdfVlJUQwk0NworCisjZW5kaWYgLyogRW5kIG9mIF9fVFdMNDAzMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMDZhNzUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAyICswLDAgQEAKLS8qCi0gKiB0d2w0MDMwLmggLSBoZWFkZXIgZm9yIFRXTDQwMzAgUE0gYW5kIGF1ZGlvIENPREVDIGRldmljZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKLSAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fVFdMNDAzMF9IXwotI2RlZmluZSBfX1RXTDQwMzBfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgotCi0vKgotICogVXNpbmcgdGhlIHR3bDQwMzAgY29yZSB3ZSBhZGRyZXNzIHJlZ2lzdGVycyB1c2luZyBhIHBhaXIKLSAqCXsgbW9kdWxlIGlkLCByZWxhdGl2ZSByZWdpc3RlciBvZmZzZXQgfQotICogd2hpY2ggdGhhdCBjb3JlIHRoZW4gbWFwcyB0byB0aGUgcmVsZXZhbnQKLSAqCXsgaTJjIHNsYXZlLCBhYnNvbHV0ZSByZWdpc3RlciBhZGRyZXNzIH0KLSAqCi0gKiBUaGUgbW9kdWxlIElEcyBhcmUgbWVhbmluZ2Z1bCBvbmx5IHRvIHRoZSB0d2w0MDMwIGNvcmUgY29kZSwKLSAqIHdoaWNoIHVzZXMgdGhlbSBhcyBhcnJheSBpbmRpY2VzIHRvIGxvb2sgdXAgdGhlIGZpcnN0IHJlZ2lzdGVyCi0gKiBhZGRyZXNzIGVhY2ggbW9kdWxlIHVzZXMgd2l0aGluIGEgZ2l2ZW4gaTJjIHNsYXZlLgotICovCi0KLS8qIFNsYXZlIDAgKGkyYyBhZGRyZXNzIDB4NDgpICovCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1VTQgkJMHgwMAotCi0vKiBTbGF2ZSAxIChpMmMgYWRkcmVzcyAweDQ5KSAqLwotI2RlZmluZSBUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRQkweDAxCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0dQSU8JCTB4MDIKLSNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfSU5UQlIJCTB4MDMKLSNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUElICQkweDA0Ci0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1RFU1QJCTB4MDUKLQotLyogU2xhdmUgMiAoaTJjIGFkZHJlc3MgMHg0YSkgKi8KLSNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfS0VZUEFECQkweDA2Ci0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX01BREMJCTB4MDcKLSNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUwkweDA4Ci0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0xFRAkJMHgwOQotI2RlZmluZSBUV0w0MDMwX01PRFVMRV9NQUlOX0NIQVJHRQkweDBBCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BSRUNIQVJHRQkweDBCCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTTAJCTB4MEMKLSNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNMQkJMHgwRAotI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV01BCQkweDBFCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTUIJCTB4MEYKLQotLyogU2xhdmUgMyAoaTJjIGFkZHJlc3MgMHg0YikgKi8KLSNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfQkFDS1VQCQkweDEwCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVAkJMHgxMQotI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIJMHgxMgotI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUgkweDEzCi0jZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1JUQwkJMHgxNAotI2RlZmluZSBUV0w0MDMwX01PRFVMRV9TRUNVUkVEX1JFRwkweDE1Ci0KLS8qCi0gKiBSZWFkIGFuZCB3cml0ZSBzaW5nbGUgOC1iaXQgcmVnaXN0ZXJzCi0gKi8KLWludCB0d2w0MDMwX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbCwgdTggcmVnKTsKLWludCB0d2w0MDMwX2kyY19yZWFkX3U4KHU4IG1vZF9ubywgdTggKnZhbCwgdTggcmVnKTsKLQotLyoKLSAqIFJlYWQgYW5kIHdyaXRlIHNldmVyYWwgOC1iaXQgcmVnaXN0ZXJzIGF0IG9uY2UuCi0gKgotICogSU1QT1JUQU5UOiAgRm9yIHR3bDQwMzBfaTJjX3dyaXRlKCksIGFsbG9jYXRlIG51bV9ieXRlcyArIDEKLSAqIGZvciB0aGUgdmFsdWUsIGFuZCBwb3B1bGF0ZSB5b3VyIGRhdGEgc3RhcnRpbmcgYXQgb2Zmc2V0IDEuCi0gKi8KLWludCB0d2w0MDMwX2kyY193cml0ZSh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1bnNpZ25lZCBudW1fYnl0ZXMpOwotaW50IHR3bDQwMzBfaTJjX3JlYWQodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdW5zaWduZWQgbnVtX2J5dGVzKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIE5PVEU6ICBhdCB1cCB0byAxMDI0IHJlZ2lzdGVycywgdGhpcyBpcyBhIGJpZyBjaGlwLgotICoKLSAqIEF2b2lkIHB1dHRpbmcgcmVnaXN0ZXIgZGVjbGFyYXRpb25zIGluIHRoaXMgZmlsZSwgaW5zdGVhZCBvZiBpbnRvCi0gKiBhIGRyaXZlci1wcml2YXRlIGZpbGUsIHVubGVzcyBzb21lIG9mIHRoZSByZWdpc3RlcnMgaW4gYSBibG9jawotICogbmVlZCB0byBiZSBzaGFyZWQgd2l0aCBvdGhlciBkcml2ZXJzLiAgT25lIGV4YW1wbGUgaXMgYmxvY2tzIHRoYXQKLSAqIGhhdmUgU2Vjb25kYXJ5IElSUSBIYW5kbGVyIChTSUgpIHJlZ2lzdGVycy4KLSAqLwotCi0jZGVmaW5lIFRXTDQwMzBfU0lIX0NUUkxfRVhDTEVOX01BU0sJQklUKDApCi0jZGVmaW5lIFRXTDQwMzBfU0lIX0NUUkxfUEVORERJU19NQVNLCUJJVCgxKQotI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLCUJJVCgyKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogR1BJTyBCbG9jayBSZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfR1BJTykKLSAqLwotCi0jZGVmaW5lIFJFR19HUElPREFUQUlOMQkJCTB4MAotI2RlZmluZSBSRUdfR1BJT0RBVEFJTjIJCQkweDEKLSNkZWZpbmUgUkVHX0dQSU9EQVRBSU4zCQkJMHgyCi0jZGVmaW5lIFJFR19HUElPREFUQURJUjEJCTB4MwotI2RlZmluZSBSRUdfR1BJT0RBVEFESVIyCQkweDQKLSNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMwkJMHg1Ci0jZGVmaW5lIFJFR19HUElPREFUQU9VVDEJCTB4NgotI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQyCQkweDcKLSNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMwkJMHg4Ci0jZGVmaW5lIFJFR19DTEVBUkdQSU9EQVRBT1VUMQkJMHg5Ci0jZGVmaW5lIFJFR19DTEVBUkdQSU9EQVRBT1VUMgkJMHhBCi0jZGVmaW5lIFJFR19DTEVBUkdQSU9EQVRBT1VUMwkJMHhCCi0jZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDEJCTB4QwotI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQyCQkweEQKLSNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMwkJMHhFCi0jZGVmaW5lIFJFR19HUElPX0RFQkVOMQkJCTB4RgotI2RlZmluZSBSRUdfR1BJT19ERUJFTjIJCQkweDEwCi0jZGVmaW5lIFJFR19HUElPX0RFQkVOMwkJCTB4MTEKLSNkZWZpbmUgUkVHX0dQSU9fQ1RSTAkJCTB4MTIKLSNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMQkJMHgxMwotI2RlZmluZSBSRUdfR1BJT1BVUERDVFIyCQkweDE0Ci0jZGVmaW5lIFJFR19HUElPUFVQRENUUjMJCTB4MTUKLSNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSNAkJMHgxNgotI2RlZmluZSBSRUdfR1BJT1BVUERDVFI1CQkweDE3Ci0jZGVmaW5lIFJFR19HUElPX0lTUjFBCQkJMHgxOQotI2RlZmluZSBSRUdfR1BJT19JU1IyQQkJCTB4MUEKLSNkZWZpbmUgUkVHX0dQSU9fSVNSM0EJCQkweDFCCi0jZGVmaW5lIFJFR19HUElPX0lNUjFBCQkJMHgxQwotI2RlZmluZSBSRUdfR1BJT19JTVIyQQkJCTB4MUQKLSNkZWZpbmUgUkVHX0dQSU9fSU1SM0EJCQkweDFFCi0jZGVmaW5lIFJFR19HUElPX0lTUjFCCQkJMHgxRgotI2RlZmluZSBSRUdfR1BJT19JU1IyQgkJCTB4MjAKLSNkZWZpbmUgUkVHX0dQSU9fSVNSM0IJCQkweDIxCi0jZGVmaW5lIFJFR19HUElPX0lNUjFCCQkJMHgyMgotI2RlZmluZSBSRUdfR1BJT19JTVIyQgkJCTB4MjMKLSNkZWZpbmUgUkVHX0dQSU9fSU1SM0IJCQkweDI0Ci0jZGVmaW5lIFJFR19HUElPX0VEUjEJCQkweDI4Ci0jZGVmaW5lIFJFR19HUElPX0VEUjIJCQkweDI5Ci0jZGVmaW5lIFJFR19HUElPX0VEUjMJCQkweDJBCi0jZGVmaW5lIFJFR19HUElPX0VEUjQJCQkweDJCCi0jZGVmaW5lIFJFR19HUElPX0VEUjUJCQkweDJDCi0jZGVmaW5lIFJFR19HUElPX1NJSF9DVFJMCQkweDJECi0KLS8qIFVwIHRvIDE4IHNpZ25hbHMgYXJlIGF2YWlsYWJsZSBhcyBHUElPcywgd2hlbiB0aGVpcgotICogcGlucyBhcmUgbm90IGFzc2lnbmVkIHRvIGFub3RoZXIgdXNlIChzdWNoIGFzIFVMUEkvVVNCKS4KLSAqLwotI2RlZmluZSBUV0w0MDMwX0dQSU9fTUFYCQkxOAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogS2V5cGFkIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9LRVlQQUQpCi0gKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5Ci0gKi8KLQotI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lTUjEJMHgxMQotI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lNUjEJMHgxMgotI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lTUjIJMHgxMwotI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0lNUjIJMHgxNAotI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJUgkJMHgxNQkvKiB0ZXN0IHJlZ2lzdGVyICovCi0jZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfRURSCQkweDE2Ci0jZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfU0lIX0NUUkwJMHgxNwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogTXVsdGljaGFubmVsIEFEQyByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfTUFEQykKLSAqIC4uLiBTSUgvaW50ZXJydXB0IG9ubHkKLSAqLwotCi0jZGVmaW5lIFRXTDQwMzBfTUFEQ19JU1IxCQkweDYxCi0jZGVmaW5lIFRXTDQwMzBfTUFEQ19JTVIxCQkweDYyCi0jZGVmaW5lIFRXTDQwMzBfTUFEQ19JU1IyCQkweDYzCi0jZGVmaW5lIFRXTDQwMzBfTUFEQ19JTVIyCQkweDY0Ci0jZGVmaW5lIFRXTDQwMzBfTUFEQ19TSVIJCTB4NjUJLyogdGVzdCByZWdpc3RlciAqLwotI2RlZmluZSBUV0w0MDMwX01BRENfRURSCQkweDY2Ci0jZGVmaW5lIFRXTDQwMzBfTUFEQ19TSUhfQ1RSTAkJMHg2NwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogQmF0dGVyeSBjaGFyZ2VyIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTKQotICovCi0KLSNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFBCTB4MAotI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkEJMHgxCi0jZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQQkweDIKLSNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJBCTB4MwotI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUIJMHg0Ci0jZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQgkweDUKLSNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFCCTB4NgotI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMkIJMHg3Ci0jZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSVIxCTB4OAkvKiB0ZXN0IHJlZ2lzdGVyICovCi0jZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSVIyCTB4OQkvKiB0ZXN0IHJlZ2lzdGVyICovCi0jZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIxCTB4YQotI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMgkweGIKLSNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjMJMHhjCi0jZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSUhDVFJMCTB4ZAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogUG93ZXIgSW50ZXJydXB0IGJsb2NrIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9JTlQpCi0gKi8KLQotI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSVNSMQkJMHgwCi0jZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JTVIxCQkweDEKLSNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lTUjIJCTB4MgotI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSU1SMgkJMHgzCi0jZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9TSVIJCTB4NAkvKiB0ZXN0IHJlZ2lzdGVyICovCi0jZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIxCQkweDUKLSNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0VEUjIJCTB4NgotI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfU0lIX0NUUkwJMHg3Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFBvd2VyIGJ1cyBtZXNzYWdlIGRlZmluaXRpb25zICovCi0KLS8qIFRoZSBUV0w0MDMwLzUwMzAgc3BsaXRzIGl0cyBwb3dlci1tYW5hZ2VtZW50IHJlc291cmNlcyAodGhlIHZhcmlvdXMKLSAqIHJlZ3VsYXRvcnMsIGNsb2NrIGFuZCByZXNldCBsaW5lcykgaW50byAzIHByb2Nlc3NvciBncm91cHMgLSBQMSwgUDIgYW5kCi0gKiBQMy4gVGhlc2UgZ3JvdXBzIGNhbiB0aGVuIGJlIGNvbmZpZ3VyZWQgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIHNsZWVwLCB3YWl0LW9uCi0gKiBhbmQgYWN0aXZlIHN0YXRlcyBieSBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSBwb3dlciBidXMuICBTZWUgU2VjdGlvbiA1LjQuMgotICogUG93ZXIgUmVzb3VyY2VzIG9mIFRXTDQwMzAgVFJNCi0gKi8KLQotLyogUHJvY2Vzc29yIGdyb3VwcyAqLwotI2RlZmluZSBERVZfR1JQX05VTEwJCTB4MAotI2RlZmluZSBERVZfR1JQX1AxCQkweDEJLyogUDE6IGFsbCBPTUFQIGRldmljZXMgKi8KLSNkZWZpbmUgREVWX0dSUF9QMgkJMHgyCS8qIFAyOiBhbGwgTW9kZW0gZGV2aWNlcyAqLwotI2RlZmluZSBERVZfR1JQX1AzCQkweDQJLyogUDM6IGFsbCBwZXJpcGhlcmFsIGRldmljZXMgKi8KLQotLyogUmVzb3VyY2UgZ3JvdXBzICovCi0jZGVmaW5lIFJFU19HUlBfUkVTCQkweDAJLyogUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUkVTX0dSUF9QUAkJMHgxCS8qIFBvd2VyIHByb3ZpZGVycyAqLwotI2RlZmluZSBSRVNfR1JQX1JDCQkweDIJLyogUmVzZXQgYW5kIGNvbnRyb2wgKi8KLSNkZWZpbmUgUkVTX0dSUF9QUF9SQwkJMHgzCi0jZGVmaW5lIFJFU19HUlBfUFIJCTB4NAkvKiBQb3dlciByZWZlcmVuY2VzICovCi0jZGVmaW5lIFJFU19HUlBfUFBfUFIJCTB4NQotI2RlZmluZSBSRVNfR1JQX1JDX1BSCQkweDYKLSNkZWZpbmUgUkVTX0dSUF9BTEwJCTB4NwkvKiBBbGwgcmVzb3VyY2UgZ3JvdXBzICovCi0KLSNkZWZpbmUgUkVTX1RZUEUyX1IwCQkweDAKLQotI2RlZmluZSBSRVNfVFlQRV9BTEwJCTB4NwotCi0jZGVmaW5lIFJFU19TVEFURV9XUlNUCQkweEYKLSNkZWZpbmUgUkVTX1NUQVRFX0FDVElWRQkweEUKLSNkZWZpbmUgUkVTX1NUQVRFX1NMRUVQCQkweDgKLSNkZWZpbmUgUkVTX1NUQVRFX09GRgkJMHgwCi0KLS8qIFBvd2VyIHJlc291cmNlcyAqLwotCi0vKiBQb3dlciBwcm92aWRlcnMgKi8KLSNkZWZpbmUgUkVTX1ZBVVgxICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRVNfVkFVWDIgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJFU19WQVVYMyAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUkVTX1ZBVVg0ICAgICAgICAgICAgICAgNAotI2RlZmluZSBSRVNfVk1NQzEgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFJFU19WTU1DMiAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUkVTX1ZQTEwxICAgICAgICAgICAgICAgNwotI2RlZmluZSBSRVNfVlBMTDIgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFJFU19WU0lNICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUkVTX1ZEQUMgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUkVTX1ZJTlRBTkExICAgICAgICAgICAgMTEKLSNkZWZpbmUgUkVTX1ZJTlRBTkEyICAgICAgICAgICAgMTIKLSNkZWZpbmUgUkVTX1ZJTlRESUcgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUkVTX1ZJTyAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUkVTX1ZERDEgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUkVTX1ZERDIgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUkVTX1ZVU0JfMVY1ICAgICAgICAgICAgMTcKLSNkZWZpbmUgUkVTX1ZVU0JfMVY4ICAgICAgICAgICAgMTgKLSNkZWZpbmUgUkVTX1ZVU0JfM1YxICAgICAgICAgICAgMTkKLSNkZWZpbmUgUkVTX1ZVU0JDUCAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUkVTX1JFR0VOICAgICAgICAgICAgICAgMjEKLS8qIFJlc2V0IGFuZCBjb250cm9sICovCi0jZGVmaW5lIFJFU19OUkVTX1BXUk9OICAgICAgICAgIDIyCi0jZGVmaW5lIFJFU19DTEtFTiAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFJFU19TWVNFTiAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFJFU19IRkNMS09VVCAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFJFU18zMktDTEtPVVQgICAgICAgICAgIDI2Ci0jZGVmaW5lIFJFU19SRVNFVCAgICAgICAgICAgICAgIDI3Ci0vKiBQb3dlciBSZWZlcmVuY2UgKi8KLSNkZWZpbmUgUkVTX01haW5fUmVmICAgICAgICAgICAgMjgKLQotI2RlZmluZSBUT1RBTF9SRVNPVVJDRVMJCTI4Ci0vKgotICogUG93ZXIgQnVzIE1lc3NhZ2UgRm9ybWF0IC4uLiB0aGVzZSBjYW4gYmUgc2VudCBpbmRpdmlkdWFsbHkgYnkgTGludXgsCi0gKiBidXQgYXJlIHVzdWFsbHkgcGFydCBvZiBkb3dubG9hZGVkIHNjcmlwdHMgdGhhdCBhcmUgcnVuIHdoZW4gdmFyaW91cwotICogcG93ZXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWQuCi0gKgotICogIEJyb2FkY2FzdCBNZXNzYWdlICgxNiBCaXRzKToKLSAqICAgIERFVl9HUlBbMTU6MTNdIE1UWzEyXSAgUkVTX0dSUFsxMTo5XSAgUkVTX1RZUEUyWzg6N10gUkVTX1RZUEVbNjo0XQotICogICAgUkVTX1NUQVRFWzM6MF0KLSAqCi0gKiAgU2luZ3VsYXIgTWVzc2FnZSAoMTYgQml0cyk6Ci0gKiAgICBERVZfR1JQWzE1OjEzXSBNVFsxMl0gIFJFU19JRFsxMTo0XSAgUkVTX1NUQVRFWzM6MF0KLSAqLwotCi0jZGVmaW5lIE1TR19CUk9BRENBU1QoZGV2Z3JwLCBncnAsIHR5cGUsIHR5cGUyLCBzdGF0ZSkgXAotCSggKGRldmdycCkgPDwgMTMgfCAxIDw8IDEyIHwgKGdycCkgPDwgOSB8ICh0eXBlMikgPDwgNyBcCi0JfCAodHlwZSkgPDwgNCB8IChzdGF0ZSkpCi0KLSNkZWZpbmUgTVNHX1NJTkdVTEFSKGRldmdycCwgaWQsIHN0YXRlKSBcCi0JKChkZXZncnApIDw8IDEzIHwgMCA8PCAxMiB8IChpZCkgPDwgNCB8IChzdGF0ZSkpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0cnVjdCB0d2w0MDMwX2JjaV9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgKmJhdHRlcnlfdG1wX3RibDsKLQl1bnNpZ25lZCBpbnQgdGJsc2l6ZTsKLX07Ci0KLS8qIFRXTDQwMzBfR1BJT19NQVggKDE4KSBHUElPcywgd2l0aCBpbnRlcnJ1cHRzICovCi1zdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgewotCWludAkJZ3Bpb19iYXNlOwotCXVuc2lnbmVkCWlycV9iYXNlLCBpcnFfZW5kOwotCi0JLyogcGFja2FnZSB0aGUgdHdvIExFRCBzaWduYWxzIGFzIG91dHB1dC1vbmx5IEdQSU9zPyAqLwotCWJvb2wJCXVzZV9sZWRzOwotCi0JLyogZ3Bpby1uIHNob3VsZCBjb250cm9sIFZNTUMobisxKSBpZiBCSVQobikgaW4gbW1jX2NkIGlzIHNldCAqLwotCXU4CQltbWNfY2Q7Ci0KLQkvKiBpZiBCSVQoTikgaXMgc2V0LCBvciBWTU1DKG4rMSkgaXMgbGlua2VkLCBkZWJvdW5jZSBHUElPLU4gKi8KLQl1MzIJCWRlYm91bmNlOwotCi0JLyogRm9yIGdwaW8tTiwgYml0ICgxIDw8IE4pIGluICJwdWxsdXBzIiBpcyBzZXQgaWYgdGhhdCBwdWxsdXAKLQkgKiBzaG91bGQgYmUgZW5hYmxlZC4gIEVsc2UsIGlmIHRoYXQgYml0IGlzIHNldCBpbiAicHVsbGRvd25zIiwKLQkgKiB0aGF0IHB1bGxkb3duIGlzIGVuYWJsZWQuICBEb24ndCB3YXN0ZSBwb3dlciBieSBsZXR0aW5nIGFueQotCSAqIGRpZ2l0YWwgaW5wdXRzIGZsb2F0Li4uCi0JICovCi0JdTMyCQlwdWxsdXBzOwotCXUzMgkJcHVsbGRvd25zOwotCi0JaW50CQkoKnNldHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pOwotCWludAkJKCp0ZWFyZG93bikoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKTsKLX07Ci0KLXN0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YSB7Ci0JaW50CQlpcnFfbGluZTsKLX07Ci0KLS8qIEJvYXJkcyBoYXZlIHVuaXFlIG1hcHBpbmdzIG9mIHtyb3csIGNvbH0gLS0+IGtleWNvZGUuCi0gKiBDb2x1bW4gYW5kIHJvdyBhcmUgOCBiaXRzIGVhY2gsIGJ1dCByYW5nZSBvbmx5IGZyb20gMC4uNy4KLSAqIGEgUEVSU0lTVEVOVF9LRVkgaXMgImFsd2F5cyBvbiIgYW5kIG5ldmVyIHJlcG9ydGVkLgotICovCi0jZGVmaW5lIFBFUlNJU1RFTlRfS0VZKHIsIGMpCUtFWSgociksIChjKSwgS0VZX1JFU0VSVkVEKQotCi1zdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB7Ci0JY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7Ci0JdW5zaWduZWQgcm93czsKLQl1bnNpZ25lZCBjb2xzOwotCWJvb2wgcmVwOwotfTsKLQotZW51bSB0d2w0MDMwX3VzYl9tb2RlIHsKLQlUMl9VU0JfTU9ERV9VTFBJID0gMSwKLQlUMl9VU0JfTU9ERV9DRUEyMDExXzNQSU4gPSAyLAotfTsKLQotc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgewotCWVudW0gdHdsNDAzMF91c2JfbW9kZQl1c2JfbW9kZTsKLX07Ci0KLXN0cnVjdCB0d2w0MDMwX2lucyB7Ci0JdTE2IHBtYl9tZXNzYWdlOwotCXU4IGRlbGF5OwotfTsKLQotc3RydWN0IHR3bDQwMzBfc2NyaXB0IHsKLQlzdHJ1Y3QgdHdsNDAzMF9pbnMgKnNjcmlwdDsKLQl1bnNpZ25lZCBzaXplOwotCXU4IGZsYWdzOwotI2RlZmluZSBUV0w0MDMwX1dSU1RfU0NSSVBUCSgxPDwwKQotI2RlZmluZSBUV0w0MDMwX1dBS0VVUDEyX1NDUklQVAkoMTw8MSkKLSNkZWZpbmUgVFdMNDAzMF9XQUtFVVAzX1NDUklQVAkoMTw8MikKLSNkZWZpbmUgVFdMNDAzMF9TTEVFUF9TQ1JJUFQJKDE8PDMpCi19OwotCi1zdHJ1Y3QgdHdsNDAzMF9yZXNjb25maWcgewotCXU4IHJlc291cmNlOwotCXU4IGRldmdyb3VwOwkvKiBQcm9jZXNzb3IgZ3JvdXAgdGhhdCBQb3dlciByZXNvdXJjZSBiZWxvbmdzIHRvICovCi0JdTggdHlwZTsJLyogUG93ZXIgcmVzb3VyY2UgYWRkcmVzc2VkLCA2IC8gYnJvYWRjYXN0IG1lc3NhZ2UgKi8KLQl1OCB0eXBlMjsJLyogUG93ZXIgcmVzb3VyY2UgYWRkcmVzc2VkLCAzIC8gYnJvYWRjYXN0IG1lc3NhZ2UgKi8KLX07Ci0KLXN0cnVjdCB0d2w0MDMwX3Bvd2VyX2RhdGEgewotCXN0cnVjdCB0d2w0MDMwX3NjcmlwdCAqKnNjcmlwdHM7Ci0JdW5zaWduZWQgbnVtOwotCXN0cnVjdCB0d2w0MDMwX3Jlc2NvbmZpZyAqcmVzb3VyY2VfY29uZmlnOwotfTsKLQotZXh0ZXJuIHZvaWQgdHdsNDAzMF9wb3dlcl9pbml0KHN0cnVjdCB0d2w0MDMwX3Bvd2VyX2RhdGEgKnRyaXRvbjJfc2NyaXB0cyk7Ci0KLXN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgewotCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOwotCXVuc2lnbmVkIGludCByYW1wX2RlbGF5X3ZhbHVlOwotCXVuc2lnbmVkIGludCBoc19leHRtdXRlOjE7Ci0Jdm9pZCAoKnNldF9oc19leHRtdXRlKShpbnQgbXV0ZSk7Ci19OwotCi1zdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhIHsKLQl1bnNpZ25lZCBpbnQJYXVkaW9fbWNsazsKLQl1bnNpZ25lZCBpbnQJY29leGlzdDsKLX07Ci0KLXN0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgewotCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOwotCXN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEJCSphdWRpbzsKLQlzdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhCQkqdmlicmE7Ci19OwotCi1zdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZAkJCQlpcnFfYmFzZSwgaXJxX2VuZDsKLQlzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YQkqYmNpOwotCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YQkqZ3BpbzsKLQlzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEJKm1hZGM7Ci0Jc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEJCSprZXlwYWQ7Ci0Jc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEJCQkqdXNiOwotCXN0cnVjdCB0d2w0MDMwX3Bvd2VyX2RhdGEJCSpwb3dlcjsKLQlzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhCQkqY29kZWM7Ci0KLQkvKiBMRE8gcmVndWxhdG9ycyAqLwotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdmRhYzsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZwbGwxOwotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdnBsbDI7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2bW1jMTsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZtbWMyOwotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdnNpbTsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZhdXgxOwotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCQkqdmF1eDI7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEJCSp2YXV4MzsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkJKnZhdXg0OwotCi0JLyogUkVWSVNJVCBtb3JlIHRvIGNvbWUgLi4uIF9ub3RoaW5nXyBzaG91bGQgYmUgaGFyZC13aXJlZCAqLwotfTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotaW50IHR3bDQwMzBfc2loX3NldHVwKGludCBtb2R1bGUpOwotCi0vKiBPZmZzZXRzIHRvIFBvd2VyIFJlZ2lzdGVycyAqLwotI2RlZmluZSBUV0w0MDMwX1ZEQUNfREVWX0dSUAkJMHgzQgotI2RlZmluZSBUV0w0MDMwX1ZEQUNfREVESUNBVEVECQkweDNFCi0jZGVmaW5lIFRXTDQwMzBfVkFVWDFfREVWX0dSUAkJMHgxNwotI2RlZmluZSBUV0w0MDMwX1ZBVVgxX0RFRElDQVRFRAkJMHgxQQotI2RlZmluZSBUV0w0MDMwX1ZBVVgyX0RFVl9HUlAJCTB4MUIKLSNkZWZpbmUgVFdMNDAzMF9WQVVYMl9ERURJQ0FURUQJCTB4MUUKLSNkZWZpbmUgVFdMNDAzMF9WQVVYM19ERVZfR1JQCQkweDFGCi0jZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVESUNBVEVECQkweDIyCi0KLSNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWV9NT0RVTEUpCi0JZXh0ZXJuIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSk7Ci0jZWxzZQotCXN0YXRpYyBpbmxpbmUgaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogTGludXgtc3BlY2lmaWMgcmVndWxhdG9yIGlkZW50aWZpZXJzIC4uLiBmb3Igbm93LCB3ZSBvbmx5IHN1cHBvcnQKLSAqIHRoZSBMRE9zLCBhbmQgbGVhdmUgdGhlIHRocmVlIGJ1Y2sgY29udmVydGVycyBhbG9uZS4gIFZERDEgYW5kIFZERDIKLSAqIG5lZWQgdG8gdGllIGludG8gaGFyZHdhcmUgYmFzZWQgdm9sdGFnZSBzY2FsaW5nIChjcHVmcmVxIGV0YyksIHdoaWxlCi0gKiBWSU8gaXMgZ2VuZXJhbGx5IGZpeGVkLgotICovCi0KLS8qIEVYVEVSTkFMIGRjLXRvLWRjIGJ1Y2sgY29udmVydGVycyAqLwotI2RlZmluZSBUV0w0MDMwX1JFR19WREQxCTAKLSNkZWZpbmUgVFdMNDAzMF9SRUdfVkREMgkxCi0jZGVmaW5lIFRXTDQwMzBfUkVHX1ZJTwkJMgotCi0vKiBFWFRFUk5BTCBMRE9zICovCi0jZGVmaW5lIFRXTDQwMzBfUkVHX1ZEQUMJMwotI2RlZmluZSBUV0w0MDMwX1JFR19WUExMMQk0Ci0jZGVmaW5lIFRXTDQwMzBfUkVHX1ZQTEwyCTUJLyogbm90IG9uIGFsbCBjaGlwcyAqLwotI2RlZmluZSBUV0w0MDMwX1JFR19WTU1DMQk2Ci0jZGVmaW5lIFRXTDQwMzBfUkVHX1ZNTUMyCTcJLyogbm90IG9uIGFsbCBjaGlwcyAqLwotI2RlZmluZSBUV0w0MDMwX1JFR19WU0lNCTgJLyogbm90IG9uIGFsbCBjaGlwcyAqLwotI2RlZmluZSBUV0w0MDMwX1JFR19WQVVYMQk5CS8qIG5vdCBvbiBhbGwgY2hpcHMgKi8KLSNkZWZpbmUgVFdMNDAzMF9SRUdfVkFVWDJfNDAzMAkxMAkvKiAodHdsNDAzMC1zcGVjaWZpYykgKi8KLSNkZWZpbmUgVFdMNDAzMF9SRUdfVkFVWDIJMTEJLyogKHR3bDUwMzAgYW5kIG5ld2VyKSAqLwotI2RlZmluZSBUV0w0MDMwX1JFR19WQVVYMwkxMgkvKiBub3Qgb24gYWxsIGNoaXBzICovCi0jZGVmaW5lIFRXTDQwMzBfUkVHX1ZBVVg0CTEzCS8qIG5vdCBvbiBhbGwgY2hpcHMgKi8KLQotLyogSU5URVJOQUwgTERPcyAqLwotI2RlZmluZSBUV0w0MDMwX1JFR19WSU5UQU5BMQkxNAotI2RlZmluZSBUV0w0MDMwX1JFR19WSU5UQU5BMgkxNQotI2RlZmluZSBUV0w0MDMwX1JFR19WSU5URElHCTE2Ci0jZGVmaW5lIFRXTDQwMzBfUkVHX1ZVU0IxVjUJMTcKLSNkZWZpbmUgVFdMNDAzMF9SRUdfVlVTQjFWOAkxOAotI2RlZmluZSBUV0w0MDMwX1JFR19WVVNCM1YxCTE5Ci0KLSNlbmRpZiAvKiBFbmQgb2YgX19UV0w0MDMwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTgwNDIuaCBiL2luY2x1ZGUvbGludXgvaTgwNDIuaAppbmRleCA2MGMzMzYwLi45YmY2ODcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2k4MDQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pODA0Mi5oCkBAIC0zOSw2ICszOSwxMCBAQAogdm9pZCBpODA0Ml91bmxvY2tfY2hpcCh2b2lkKTsKIGludCBpODA0Ml9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCk7CiBib29sIGk4MDQyX2NoZWNrX3BvcnRfb3duZXIoY29uc3Qgc3RydWN0IHNlcmlvICopOworaW50IGk4MDQyX2luc3RhbGxfZmlsdGVyKGJvb2wgKCpmaWx0ZXIpKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCisJCQkJCXN0cnVjdCBzZXJpbyAqc2VyaW8pKTsKK2ludCBpODA0Ml9yZW1vdmVfZmlsdGVyKGJvb2wgKCpmaWx0ZXIpKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgY2hhciBzdHIsCisJCQkJICAgICAgIHN0cnVjdCBzZXJpbyAqc2VyaW8pKTsKIAogI2Vsc2UKIApAQCAtNTIsNyArNTYsNyBAQAogCiBpbnQgaTgwNDJfY29tbWFuZCh1bnNpZ25lZCBjaGFyICpwYXJhbSwgaW50IGNvbW1hbmQpCiB7Ci0JcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIGJvb2wgaTgwNDJfY2hlY2tfcG9ydF9vd25lcihjb25zdCBzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQpAQCAtNjAsNiArNjQsMTggQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBpODA0Ml9pbnN0YWxsX2ZpbHRlcihib29sICgqZmlsdGVyKSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorCQkJCQlzdHJ1Y3Qgc2VyaW8gKnNlcmlvKSkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworaW50IGk4MDQyX3JlbW92ZV9maWx0ZXIoYm9vbCAoKmZpbHRlcikodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIHN0ciwKKwkJCQkgICAgICAgc3RydWN0IHNlcmlvICpzZXJpbykpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IDE2M2M4NDAuLmFlZWEyODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtNzA3LDYgKzcwNywxMCBAQAogCQkJCQl1OCBhY3Rpb247CiAJCQkJCXU4IHRyYW5zX2lkW1dMQU5fU0FfUVVFUllfVFJfSURfTEVOXTsKIAkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzYV9xdWVyeTsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHNtcHNfY29udHJvbDsKKwkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBodF9zbXBzOwogCQkJfSB1OwogCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhY3Rpb247CiAJfSB1OwpAQCAtNzcxLDcgKzc3NSwxMCBAQAogLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvIC0gTUNTIGluZm9ybWF0aW9uCiAgKiBAcnhfbWFzazogUlggbWFzawotICogQHJ4X2hpZ2hlc3Q6IGhpZ2hlc3Qgc3VwcG9ydGVkIFJYIHJhdGUKKyAqIEByeF9oaWdoZXN0OiBoaWdoZXN0IHN1cHBvcnRlZCBSWCByYXRlLiBJZiBzZXQgcmVwcmVzZW50cworICoJdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIFJYIGRhdGEgcmF0ZSBpbiB1bml0cyBvZiAxIE1icHMuCisgKglJZiB0aGlzIGZpZWxkIGlzIDAgdGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHVzZWQgdG8KKyAqCWNvbnNpZGVyIHRoZSBoaWdoZXN0IFJYIGRhdGEgcmF0ZSBzdXBwb3J0ZWQuCiAgKiBAdHhfcGFyYW1zOiBUWCBwYXJhbWV0ZXJzCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfbWNzX2luZm8gewpAQCAtODI0LDYgKzgzMSw3IEBACiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTERQQ19DT0RJTkcJCTB4MDAwMQogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MAkweDAwMDIKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9TTV9QUwkJCTB4MDAwQworI2RlZmluZQkJSUVFRTgwMjExX0hUX0NBUF9TTV9QU19TSElGVAkyCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRAkJMHgwMDEwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwCQkJMHgwMDIwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwCQkJMHgwMDQwCkBAIC04MzksNiArODQ3LDcgQEAKIC8qIDgwMi4xMW4gSFQgY2FwYWJpbGl0eSBBTVBEVSBzZXR0aW5ncyAoZm9yIGFtcGR1X3BhcmFtc19pbmZvKSAqLwogI2RlZmluZSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9GQUNUT1IJCTB4MDMKICNkZWZpbmUgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWQkJMHgxQworI2RlZmluZQkJSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWV9TSElGVAkyCiAKIC8qCiAgKiBNYXhpbXVtIGxlbmd0aCBvZiBBTVBEVSB0aGF0IHRoZSBTVEEgY2FuIHJlY2VpdmUuCkBAIC05MjIsMTIgKzkzMSwxNyBAQAogI2RlZmluZSBJRUVFODAyMTFfTUFYX0FNUERVX0JVRiAweDQwCiAKIAotLyogU3BhdGlhbCBNdWx0aXBsZXhpbmcgUG93ZXIgU2F2ZSBNb2RlcyAqLworLyogU3BhdGlhbCBNdWx0aXBsZXhpbmcgUG93ZXIgU2F2ZSBNb2RlcyAoZm9yIGNhcGFiaWxpdHkpICovCiAjZGVmaW5lIFdMQU5fSFRfQ0FQX1NNX1BTX1NUQVRJQwkwCiAjZGVmaW5lIFdMQU5fSFRfQ0FQX1NNX1BTX0RZTkFNSUMJMQogI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19JTlZBTElECTIKICNkZWZpbmUgV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQJMwogCisvKiBmb3IgU00gcG93ZXIgY29udHJvbCBmaWVsZCBsb3dlciB0d28gYml0cyAqLworI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9ESVNBQkxFRAkwCisjZGVmaW5lIFdMQU5fSFRfU01QU19DT05UUk9MX1NUQVRJQwkxCisjZGVmaW5lIFdMQU5fSFRfU01QU19DT05UUk9MX0RZTkFNSUMJMworCiAvKiBBdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zICovCiAjZGVmaW5lIFdMQU5fQVVUSF9PUEVOIDAKICNkZWZpbmUgV0xBTl9BVVRIX1NIQVJFRF9LRVkgMQpAQCAtMTA3MSwxMiArMTA4NSwxMiBAQAogCVdMQU5fRUlEX1RJTSA9IDUsCiAJV0xBTl9FSURfSUJTU19QQVJBTVMgPSA2LAogCVdMQU5fRUlEX0NIQUxMRU5HRSA9IDE2LAotCS8qIDgwMi4xMWQgKi8KKwogCVdMQU5fRUlEX0NPVU5UUlkgPSA3LAogCVdMQU5fRUlEX0hQX1BBUkFNUyA9IDgsCiAJV0xBTl9FSURfSFBfVEFCTEUgPSA5LAogCVdMQU5fRUlEX1JFUVVFU1QgPSAxMCwKLQkvKiA4MDIuMTFlICovCisKIAlXTEFOX0VJRF9RQlNTX0xPQUQgPSAxMSwKIAlXTEFOX0VJRF9FRENBX1BBUkFNX1NFVCA9IDEyLAogCVdMQU5fRUlEX1RTUEVDID0gMTMsCkBAIC0xMDk5LDcgKzExMTMsNyBAQAogCVdMQU5fRUlEX1BSRVAgPSA2OSwKIAlXTEFOX0VJRF9QRVJSID0gNzAsCiAJV0xBTl9FSURfUkFOTiA9IDQ5LAkvKiBjb21wYXRpYmxlIHdpdGggRnJlZUJTRCAqLwotCS8qIDgwMi4xMWggKi8KKwogCVdMQU5fRUlEX1BXUl9DT05TVFJBSU5UID0gMzIsCiAJV0xBTl9FSURfUFdSX0NBUEFCSUxJVFkgPSAzMywKIAlXTEFOX0VJRF9UUENfUkVRVUVTVCA9IDM0LApAQCAtMTExMCwyMCArMTEyNCw0MSBAQAogCVdMQU5fRUlEX01FQVNVUkVfUkVQT1JUID0gMzksCiAJV0xBTl9FSURfUVVJRVQgPSA0MCwKIAlXTEFOX0VJRF9JQlNTX0RGUyA9IDQxLAotCS8qIDgwMi4xMWcgKi8KKwogCVdMQU5fRUlEX0VSUF9JTkZPID0gNDIsCiAJV0xBTl9FSURfRVhUX1NVUFBfUkFURVMgPSA1MCwKLQkvKiA4MDIuMTFuICovCisKIAlXTEFOX0VJRF9IVF9DQVBBQklMSVRZID0gNDUsCiAJV0xBTl9FSURfSFRfSU5GT1JNQVRJT04gPSA2MSwKLQkvKiA4MDIuMTFpICovCisKIAlXTEFOX0VJRF9SU04gPSA0OCwKLQlXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMID0gNTYsCi0JV0xBTl9FSURfTU1JRSA9IDc2IC8qIDgwMi4xMXcgKi8sCisJV0xBTl9FSURfTU1JRSA9IDc2LAogCVdMQU5fRUlEX1dQQSA9IDIyMSwKIAlXTEFOX0VJRF9HRU5FUklDID0gMjIxLAogCVdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQyA9IDIyMSwKLQlXTEFOX0VJRF9RT1NfUEFSQU1FVEVSID0gMjIyCisJV0xBTl9FSURfUU9TX1BBUkFNRVRFUiA9IDIyMiwKKworCVdMQU5fRUlEX0FQX0NIQU5fUkVQT1JUID0gNTEsCisJV0xBTl9FSURfTkVJR0hCT1JfUkVQT1JUID0gNTIsCisJV0xBTl9FSURfUkNQSSA9IDUzLAorCVdMQU5fRUlEX0JTU19BVkdfQUNDRVNTX0RFTEFZID0gNjMsCisJV0xBTl9FSURfQU5URU5OQV9JTkZPID0gNjQsCisJV0xBTl9FSURfUlNOSSA9IDY1LAorCVdMQU5fRUlEX01FQVNVUkVNRU5UX1BJTE9UX1RYX0lORk8gPSA2NiwKKwlXTEFOX0VJRF9CU1NfQVZBSUxBQkxFX0NBUEFDSVRZID0gNjcsCisJV0xBTl9FSURfQlNTX0FDX0FDQ0VTU19ERUxBWSA9IDY4LAorCVdMQU5fRUlEX1JSTV9FTkFCTEVEX0NBUEFCSUxJVElFUyA9IDcwLAorCVdMQU5fRUlEX01VTFRJUExFX0JTU0lEID0gNzEsCisKKwlXTEFOX0VJRF9NT0JJTElUWV9ET01BSU4gPSA1NCwKKwlXTEFOX0VJRF9GQVNUX0JTU19UUkFOU0lUSU9OID0gNTUsCisJV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTCA9IDU2LAorCVdMQU5fRUlEX1JJQ19EQVRBID0gNTcsCisJV0xBTl9FSURfUklDX0RFU0NSSVBUT1IgPSA3NSwKKworCVdMQU5fRUlEX0RTRV9SRUdJU1RFUkVEX0xPQ0FUSU9OID0gNTgsCisJV0xBTl9FSURfU1VQUE9SVEVEX1JFR1VMQVRPUllfQ0xBU1NFUyA9IDU5LAorCVdMQU5fRUlEX0VYVF9DSEFOU1dJVENIX0FOTiA9IDYwLAogfTsKIAogLyogQWN0aW9uIGNhdGVnb3J5IGNvZGUgKi8KQEAgLTExNTAsNiArMTE4NSwxOCBAQAogCVdMQU5fQUNUSU9OX1NQQ1RfQ0hMX1NXSVRDSCA9IDQsCiB9OwogCisvKiBIVCBhY3Rpb24gY29kZXMgKi8KK2VudW0gaWVlZTgwMjExX2h0X2FjdGlvbmNvZGUgeworCVdMQU5fSFRfQUNUSU9OX05PVElGWV9DSEFOV0lEVEggPSAwLAorCVdMQU5fSFRfQUNUSU9OX1NNUFMgPSAxLAorCVdMQU5fSFRfQUNUSU9OX1BTTVAgPSAyLAorCVdMQU5fSFRfQUNUSU9OX1BDT19QSEFTRSA9IDMsCisJV0xBTl9IVF9BQ1RJT05fQ1NJID0gNCwKKwlXTEFOX0hUX0FDVElPTl9OT05DT01QUkVTU0VEX0JGID0gNSwKKwlXTEFOX0hUX0FDVElPTl9DT01QUkVTU0VEX0JGID0gNiwKKwlXTEFOX0hUX0FDVElPTl9BU0VMX0lEWF9GRUVEQkFDSyA9IDcsCit9OworCiAvKiBTZWN1cml0eSBrZXkgbGVuZ3RoICovCiBlbnVtIGllZWU4MDIxMV9rZXlfbGVuIHsKIAlXTEFOX0tFWV9MRU5fV0VQNDAgPSA1LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbWEuaCBiL2luY2x1ZGUvbGludXgvaW1hLmgKaW5kZXggMGUzZjJhNC4uOTlkYzZkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ltYS5oCkBAIC0xMywxOCArMTMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogc3RydWN0IGxpbnV4X2JpbnBybTsKIAotI2RlZmluZSBJTUFfQ09VTlRfVVBEQVRFIDEKLSNkZWZpbmUgSU1BX0NPVU5UX0xFQVZFIDAKLQogI2lmZGVmIENPTkZJR19JTUEKIGV4dGVybiBpbnQgaW1hX2Jwcm1fY2hlY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CiBleHRlcm4gaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGltYV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIGludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2ssIGludCB1cGRhdGVfY291bnRzKTsKK2V4dGVybiBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKTsKIGV4dGVybiB2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpOwogZXh0ZXJuIHZvaWQgaW1hX2NvdW50c19nZXQoc3RydWN0IGZpbGUgKmZpbGUpOwotZXh0ZXJuIHZvaWQgaW1hX2NvdW50c19wdXQoc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKTsKIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCkBAIC00Miw3ICszOCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2ssIGludCB1cGRhdGVfY291bnRzKQorc3RhdGljIGlubGluZSBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKQogewogCXJldHVybiAwOwogfQpAQCAtNjIsOSArNTgsNSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGltYV9jb3VudHNfcHV0KHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKLXsKLQlyZXR1cm47Ci19CiAjZW5kaWYgLyogQ09ORklHX0lNQV9IICovCiAjZW5kaWYgLyogX0xJTlVYX0lNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCmluZGV4IGIyMzA0OTIuLmNmMjU3ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCkBAIC04OSw2ICs4OSw3IEBACiAKICNkZWZpbmUgSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIExPR19NQVJUSUFOUykKICNkZWZpbmUgSU5fREVWX1BST1hZX0FSUChpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIFBST1hZX0FSUCkKKyNkZWZpbmUgSU5fREVWX1BST1hZX0FSUF9QVkxBTihpbl9kZXYpCUlOX0RFVl9DT05GX0dFVChpbl9kZXYsIFBST1hZX0FSUF9QVkxBTikKICNkZWZpbmUgSU5fREVWX1NIQVJFRF9NRURJQShpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIFNIQVJFRF9NRURJQSkKICNkZWZpbmUgSU5fREVWX1RYX1JFRElSRUNUUyhpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIFNFTkRfUkVESVJFQ1RTKQogI2RlZmluZSBJTl9ERVZfU0VDX1JFRElSRUNUUyhpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggZmY4YmRlNS4uYWIxZDMxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTE0OSw2ICsxNDksOCBAQAogCiBleHRlcm4gdm9pZCAoKmxhdGVfdGltZV9pbml0KSh2b2lkKTsKIAorZXh0ZXJuIGludCBpbml0Y2FsbF9kZWJ1ZzsKKwogI2VuZGlmCiAgIAogI2lmbmRlZiBNT0RVTEUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IDhkMTBhYTcuLmFiZWM2OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTY1LDcgKzE2NSw3IEBACiAJLmpvdXJuYWxfaW5mbwk9IE5VTEwsCQkJCQkJXAogCS5jcHVfdGltZXJzCT0gSU5JVF9DUFVfVElNRVJTKHRzay5jcHVfdGltZXJzKSwJCVwKIAkuZnNfZXhjbAk9IEFUT01JQ19JTklUKDApLAkJCQlcCi0JLnBpX2xvY2sJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCh0c2sucGlfbG9jayksCQlcCisJLnBpX2xvY2sJPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQodHNrLnBpX2xvY2spLAlcCiAJLnRpbWVyX3NsYWNrX25zID0gNTAwMDAsIC8qIDUwIHVzZWMgZGVmYXVsdCBzbGFjayAqLwkJXAogCS5waWRzID0gewkJCQkJCQlcCiAJCVtQSURUWVBFX1BJRF0gID0gSU5JVF9QSURfTElOSyhQSURUWVBFX1BJRCksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmggYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKaW5kZXggNGYwYTcyYS4uOTMxMGM2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaApAQCAtMzMyLDYgKzMzMiw3IEBACiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlzdHJ1Y3QgaXJfdGFibGUgKmlyX3RhYmxlOwkvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIGluZm8gKi8KICNlbmRpZgorCWludAkJbm9kZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbW11X2ZsdXNoX2NhY2hlKApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaCBiL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKaW5kZXggM2IwNjhlNWIuLjY0ZDFiNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaApAQCAtMTQsMTQgKzE0LDExIEBACiBleHRlcm4gaW50IGlvbW11X2lzX3NwYW5fYm91bmRhcnkodW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgbnIsCiAJCQkJICB1bnNpZ25lZCBsb25nIHNoaWZ0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplKTsKLWV4dGVybiB2b2lkIGlvbW11X2FyZWFfcmVzZXJ2ZSh1bnNpZ25lZCBsb25nICptYXAsIHVuc2lnbmVkIGxvbmcgaSwgaW50IGxlbik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9hcmVhX2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGludCBuciwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNoaWZ0LAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfc2l6ZSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFsaWduX21hc2spOwotZXh0ZXJuIHZvaWQgaW9tbXVfYXJlYV9mcmVlKHVuc2lnbmVkIGxvbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgbnIpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW9fcGFnZV9zaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCmluZGV4IDgzYWE4MTIuLjcxMjk1MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaApAQCAtMTI2LDExICsxMjYsMTEgQEAKIGludCBhZGp1c3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAkJICAgIHJlc291cmNlX3NpemVfdCBzaXplKTsKIHJlc291cmNlX3NpemVfdCByZXNvdXJjZV9hbGlnbm1lbnQoc3RydWN0IHJlc291cmNlICpyZXMpOwotc3RhdGljIGlubGluZSByZXNvdXJjZV9zaXplX3QgcmVzb3VyY2Vfc2l6ZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3N0YXRpYyBpbmxpbmUgcmVzb3VyY2Vfc2l6ZV90IHJlc291cmNlX3NpemUoY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJcmV0dXJuIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CiB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZXNvdXJjZV90eXBlKGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXJldHVybiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9UWVBFX0JJVFM7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwY19uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvaXBjX25hbWVzcGFjZS5oCmluZGV4IGU0MDg3MjIuLjA3YmFhMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBjX25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBjX25hbWVzcGFjZS5oCkBAIC04Nyw3ICs4Nyw3IEBACiAvKiBkZWZhdWx0IHZhbHVlcyAqLwogI2RlZmluZSBERkxUX1FVRVVFU01BWCAyNTYgICAgIC8qIG1heCBudW1iZXIgb2YgbWVzc2FnZSBxdWV1ZXMgKi8KICNkZWZpbmUgREZMVF9NU0dNQVggICAgMTAgICAgICAvKiBtYXggbnVtYmVyIG9mIG1lc3NhZ2VzIGluIGVhY2ggcXVldWUgKi8KLSNkZWZpbmUgSEFSRF9NU0dNQVggICAgKDEzMTA3Mi9zaXplb2Yodm9pZCAqKSkKKyNkZWZpbmUgSEFSRF9NU0dNQVggICAgKDMyNzY4KnNpemVvZih2b2lkICopLzQpCiAjZGVmaW5lIERGTFRfTVNHU0laRU1BWCA4MTkyICAgLyogbWF4IG1lc3NhZ2Ugc2l6ZSAqLwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG1xX2luaXRfbnMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBhMjg3Y2ZjLi40NTE0ODFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXVuc2lnbmVkIGludAkJaXJxX2NvdW50OwkvKiBGb3IgZGV0ZWN0aW5nIGJyb2tlbiBJUlFzICovCiAJdW5zaWduZWQgbG9uZwkJbGFzdF91bmhhbmRsZWQ7CS8qIEFnaW5nIHRpbWVyIGZvciB1bmhhbmRsZWQgY291bnQgKi8KIAl1bnNpZ25lZCBpbnQJCWlycXNfdW5oYW5kbGVkOwotCXNwaW5sb2NrX3QJCWxvY2s7CisJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiAjaWZkZWYgQ09ORklHX1NNUAogCWNwdW1hc2tfdmFyX3QJCWFmZmluaXR5OwogCXVuc2lnbmVkIGludAkJbm9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaCBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAppbmRleCA3OTIyNzQyLi5kOGU5YjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCkBAIC0xMDcsMTggKzEwNyw2IEBACiAJCSAgICAgICBfX2J1aWx0aW5fZXh0cmFjdF9yZXR1cm5fYWRkcigodm9pZCAqKWFkZHIpKTsKIH0KIAotLyoKLSAqIFByZXR0eS1wcmludCBhIGZ1bmN0aW9uIHBvaW50ZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuCi0gKiBQbGVhc2UgdXNlIHRoZSAiJXBGIiB2c3ByaW50ZiBmb3JtYXQgaW5zdGVhZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbChjb25zdCBjaGFyICpmbXQsIHZvaWQgKmFkZHIpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfSUE2NCkgfHwgZGVmaW5lZChDT05GSUdfUFBDNjQpCi0JYWRkciA9ICoodm9pZCAqKilhZGRyOwotI2VuZGlmCi0JcHJpbnRfc3ltYm9sKGZtdCwgKHVuc2lnbmVkIGxvbmcpYWRkcik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9pcF9zeW0odW5zaWduZWQgbG9uZyBpcCkKIHsKIAlwcmludGsoIls8JXA+XSAlcFNcbiIsICh2b2lkICopIGlwLCAodm9pZCAqKSBpcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ5MmE4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIExJTlVYX0tFUk5FTF9QQUdFX0ZMQUdTX0gKKyNkZWZpbmUgTElOVVhfS0VSTkVMX1BBR0VfRkxBR1NfSAorCisvKgorICogU3RhYmxlIHBhZ2UgZmxhZyBiaXRzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCisjZGVmaW5lIEtQRl9MT0NLRUQJCTAKKyNkZWZpbmUgS1BGX0VSUk9SCQkxCisjZGVmaW5lIEtQRl9SRUZFUkVOQ0VECQkyCisjZGVmaW5lIEtQRl9VUFRPREFURQkJMworI2RlZmluZSBLUEZfRElSVFkJCTQKKyNkZWZpbmUgS1BGX0xSVQkJCTUKKyNkZWZpbmUgS1BGX0FDVElWRQkJNgorI2RlZmluZSBLUEZfU0xBQgkJNworI2RlZmluZSBLUEZfV1JJVEVCQUNLCQk4CisjZGVmaW5lIEtQRl9SRUNMQUlNCQk5CisjZGVmaW5lIEtQRl9CVUREWQkJMTAKKworLyogMTEtMjA6IG5ldyBhZGRpdGlvbnMgaW4gMi42LjMxICovCisjZGVmaW5lIEtQRl9NTUFQCQkxMQorI2RlZmluZSBLUEZfQU5PTgkJMTIKKyNkZWZpbmUgS1BGX1NXQVBDQUNIRQkJMTMKKyNkZWZpbmUgS1BGX1NXQVBCQUNLRUQJCTE0CisjZGVmaW5lIEtQRl9DT01QT1VORF9IRUFECTE1CisjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMCTE2CisjZGVmaW5lIEtQRl9IVUdFCQkxNworI2RlZmluZSBLUEZfVU5FVklDVEFCTEUJCTE4CisjZGVmaW5lIEtQRl9IV1BPSVNPTgkJMTkKKyNkZWZpbmUgS1BGX05PUEFHRQkJMjAKKworI2RlZmluZSBLUEZfS1NNCQkJMjEKKworLyoga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMKKyAqIFdBUk5JTkc6IHN1YmplY3QgdG8gY2hhbmdlLCBuZXZlciByZWx5IG9uIHRoZW0hCisgKi8KKyNkZWZpbmUgS1BGX1JFU0VSVkVECQkzMgorI2RlZmluZSBLUEZfTUxPQ0tFRAkJMzMKKyNkZWZpbmUgS1BGX01BUFBFRFRPRElTSwkzNAorI2RlZmluZSBLUEZfUFJJVkFURQkJMzUKKyNkZWZpbmUgS1BGX1BSSVZBVEVfMgkJMzYKKyNkZWZpbmUgS1BGX09XTkVSX1BSSVZBVEUJMzcKKyNkZWZpbmUgS1BGX0FSQ0gJCTM4CisjZGVmaW5lIEtQRl9VTkNBQ0hFRAkJMzkKKworI2VuZGlmIC8qIExJTlVYX0tFUk5FTF9QQUdFX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDNmYTRjNTkuLjNmYzlmNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMjUxLDEwICsyNTEsMTAgQEAKICAqIFByaW50IGEgb25lLXRpbWUgbWVzc2FnZSAoYW5hbG9nb3VzIHRvIFdBUk5fT05DRSgpIGV0IGFsKToKICAqLwogI2RlZmluZSBwcmludGtfb25jZSh4Li4uKSAoewkJCVwKLQlzdGF0aWMgYm9vbCBfX3ByaW50X29uY2UgPSB0cnVlOwlcCisJc3RhdGljIGJvb2wgX19wcmludF9vbmNlOwkJXAogCQkJCQkJXAotCWlmIChfX3ByaW50X29uY2UpIHsJCQlcCi0JCV9fcHJpbnRfb25jZSA9IGZhbHNlOwkJXAorCWlmICghX19wcmludF9vbmNlKSB7CQkJXAorCQlfX3ByaW50X29uY2UgPSB0cnVlOwkJXAogCQlwcmludGsoeCk7CQkJXAogCX0JCQkJCVwKIH0pCkBAIC0zOTcsMTUgKzM5Nyw1OCBAQAogCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKIC8qIGR5bmFtaWNfcHJfZGVidWcoKSB1c2VzIHByX2ZtdCgpIGludGVybmFsbHkgc28gd2UgZG9uJ3QgbmVlZCBpdCBoZXJlICovCi0jZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBkbyB7IFwKLQlkeW5hbWljX3ByX2RlYnVnKGZtdCwgIyNfX1ZBX0FSR1NfXyk7IFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXAorCWR5bmFtaWNfcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKQogI2Vsc2UKICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIFwKIAkoeyBpZiAoMCkgcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyAwOyB9KQogI2VuZGlmCiAKIC8qCisgKiByYXRlbGltaXRlZCBtZXNzYWdlcyB3aXRoIGxvY2FsIHJhdGVsaW1pdF9zdGF0ZSwKKyAqIG5vIGxvY2FsIHJhdGVsaW1pdF9zdGF0ZSB1c2VkIGluIHRoZSAhUFJJTlRLIGNhc2UKKyAqLworI2lmZGVmIENPTkZJR19QUklOVEsKKyNkZWZpbmUgcHJpbnRrX3JhdGVsaW1pdGVkKGZtdCwgLi4uKSAgKHsJCVwKKwlzdGF0aWMgc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBfcnMgPSB7CQlcCisJCS5pbnRlcnZhbCA9IERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLCBcCisJCS5idXJzdCA9IERFRkFVTFRfUkFURUxJTUlUX0JVUlNULCAgICAgICBcCisJfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCVwKKwlpZiAoIV9fcmF0ZWxpbWl0KCZfcnMpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXByaW50ayhmbXQsICMjX19WQV9BUkdTX18pOwkJXAorfSkKKyNlbHNlCisvKiBObyBlZmZlY3QsIGJ1dCB3ZSBzdGlsbCBnZXQgdHlwZSBjaGVja2luZyBldmVuIGluIHRoZSAhUFJJTlRLIGNhc2U6ICovCisjZGVmaW5lIHByaW50a19yYXRlbGltaXRlZCBwcmludGsKKyNlbmRpZgorCisjZGVmaW5lIHByX2VtZXJnX3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fRU1FUkcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2FsZXJ0X3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fQUxFUlQgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2NyaXRfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKwlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9DUklUIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9lcnJfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKwlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9FUlIgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX3dhcm5pbmdfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKwlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9ub3RpY2VfcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKwlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9OT1RJQ0UgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2luZm9fcmF0ZWxpbWl0ZWQoZm10LCAuLi4pIFwKKwlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9JTkZPIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorLyogbm8gcHJfY29udF9yYXRlbGltaXRlZCwgZG9uJ3QgZG8gdGhhdC4uLiAqLworLyogSWYgeW91IGFyZSB3cml0aW5nIGEgZHJpdmVyLCBwbGVhc2UgdXNlIGRldl9kYmcgaW5zdGVhZCAqLworI2lmIGRlZmluZWQoREVCVUcpCisjZGVmaW5lIHByX2RlYnVnX3JhdGVsaW1pdGVkKGZtdCwgLi4uKSBcCisJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fREVCVUcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBwcl9kZWJ1Z19yYXRlbGltaXRlZChmbXQsIC4uLikgXAorCSh7IGlmICgwKSBwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgXAorCQkJCSAgICAgIyNfX1ZBX0FSR1NfXyk7IDA7IH0pCisjZW5kaWYKKworLyoKICAqIEdlbmVyYWwgdHJhY2luZyByZWxhdGVkIHV0aWxpdHkgZnVuY3Rpb25zIC0gdHJhY2VfcHJpbnRrKCksCiAgKiB0cmFjaW5nX29uL3RyYWNpbmdfb2ZmIGFuZCB0cmFjaW5nX3N0YXJ0KCkvdHJhY2luZ19zdG9wCiAgKgpAQCAtNDkyLDYgKzUzNSw4IEBACiBfX3RyYWNlX3ByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CiAKK2V4dGVybiB2b2lkIHRyYWNlX2R1bXBfc3RhY2sodm9pZCk7CisKIC8qCiAgKiBUaGUgZG91YmxlIF9fYnVpbHRpbl9jb25zdGFudF9wIGlzIGJlY2F1c2UgZ2NjIHdpbGwgZ2l2ZSB1cyBhbiBlcnJvcgogICogaWYgd2UgdHJ5IHRvIGFsbG9jYXRlIHRoZSBzdGF0aWMgdmFyaWFibGUgdG8gZm10IGlmIGl0IGlzIG5vdCBhCkBAIC01MjUsNiArNTcwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfb2ZmX3Blcm1hbmVudCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9kdW1wX3N0YWNrKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSBpbnQKIHRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V4ZWMuaCBiL2luY2x1ZGUvbGludXgva2V4ZWMuaAppbmRleCBhZGMzNGYyLi5jMzU2YjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oCkBAIC0yMDYsNiArMjA2LDggQEAKIAogaW50IF9faW5pdCBwYXJzZV9jcmFzaGtlcm5lbChjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIGxvbmcgc3lzdGVtX3JhbSwKIAkJdW5zaWduZWQgbG9uZyBsb25nICpjcmFzaF9zaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNyYXNoX2Jhc2UpOworaW50IGNyYXNoX3Nocmlua19tZW1vcnkodW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CitzaXplX3QgY3Jhc2hfZ2V0X21lbW9yeV9zaXplKHZvaWQpOwogCiAjZWxzZSAvKiAhQ09ORklHX0tFWEVDICovCiBzdHJ1Y3QgcHRfcmVnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZpZm8uaCBiL2luY2x1ZGUvbGludXgva2ZpZm8uaAppbmRleCBhZDZiZGY1Li4zZDQ0ZTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZmlmby5oCkBAIC0xLDYgKzEsNyBAQAogLyoKLSAqIEEgc2ltcGxlIGtlcm5lbCBGSUZPIGltcGxlbWVudGF0aW9uLgorICogQSBnZW5lcmljIGtlcm5lbCBGSUZPIGltcGxlbWVudGF0aW9uLgogICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTgsNiArMTksMjUgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLworCisvKgorICogSG93dG8gcG9ydGluZyBkcml2ZXJzIHRvIHRoZSBuZXcgZ2VuZXJpYyBmaWZvIEFQSToKKyAqCisgKiAtIE1vZGlmeSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlICJzdHJ1Y3Qga2ZpZm8gKiIgb2JqZWN0IGludG8gYQorICogICBpbi1wbGFjZSAic3RydWN0IGtmaWZvIiBvYmplY3QKKyAqIC0gSW5pdCB0aGUgaW4tcGxhY2Ugb2JqZWN0IHdpdGgga2ZpZm9fYWxsb2MoKSBvciBrZmlmb19pbml0KCkKKyAqICAgTm90ZTogVGhlIGFkZHJlc3Mgb2YgdGhlIGluLXBsYWNlICJzdHJ1Y3Qga2ZpZm8iIG9iamVjdCBtdXN0IGJlCisgKiAgIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbnMKKyAqIC0gUmVwbGFjZSB0aGUgdXNlIG9mIF9fa2ZpZm9fcHV0IGludG8ga2ZpZm9faW4gYW5kIF9fa2ZpZm9fZ2V0CisgKiAgIGludG8ga2ZpZm9fb3V0CisgKiAtIFJlcGxhY2UgdGhlIHVzZSBvZiBrZmlmb19wdXQgaW50byBrZmlmb19pbl9sb2NrZWQgYW5kIGtmaWZvX2dldAorICogICBpbnRvIGtmaWZvX291dF9sb2NrZWQKKyAqICAgTm90ZTogdGhlIHNwaW5sb2NrIHBvaW50ZXIgZm9ybWVybHkgcGFzc2VkIHRvIGtmaWZvX2luaXQva2ZpZm9fYWxsb2MKKyAqICAgbXVzdCBiZSBwYXNzZWQgbm93IHRvIHRoZSBrZmlmb19pbl9sb2NrZWQgYW5kIGtmaWZvX291dF9sb2NrZWQKKyAqICAgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLgorICogLSBBbGwgZm9ybWVybHkgbmFtZSBfX2tmaWZvXyogZnVuY3Rpb25zIGhhcyBiZWVuIHJlbmFtZWQgaW50byBrZmlmb18qCisgKi8KKwogI2lmbmRlZiBfTElOVVhfS0ZJRk9fSAogI2RlZmluZSBfTElOVVhfS0ZJRk9fSAogCkBAIC0yOSwxMjQgKzQ5LDU2MiBAQAogCXVuc2lnbmVkIGludCBzaXplOwkvKiB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBpbjsJLyogZGF0YSBpcyBhZGRlZCBhdCBvZmZzZXQgKGluICUgc2l6ZSkgKi8KIAl1bnNpZ25lZCBpbnQgb3V0OwkvKiBkYXRhIGlzIGV4dHJhY3RlZCBmcm9tIG9mZi4gKG91dCAlIHNpemUpICovCi0Jc3BpbmxvY2tfdCAqbG9jazsJLyogcHJvdGVjdHMgY29uY3VycmVudCBtb2RpZmljYXRpb25zICovCiB9OwogCi1leHRlcm4gc3RydWN0IGtmaWZvICprZmlmb19pbml0KHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUsCi0JCQkJZ2ZwX3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spOwotZXh0ZXJuIHN0cnVjdCBrZmlmbyAqa2ZpZm9fYWxsb2ModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLAotCQkJCSBzcGlubG9ja190ICpsb2NrKTsKLWV4dGVybiB2b2lkIGtmaWZvX2ZyZWUoc3RydWN0IGtmaWZvICpmaWZvKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19wdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fZ2V0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pOworLyoKKyAqIE1hY3JvcyBmb3IgZGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBrZmlmbyBkYXRhdHlwZQorICovCisKKy8qIGhlbHBlciBtYWNybyAqLworI2RlZmluZSBfX2tmaWZvX2luaXRpYWxpemVyKHMsIGIpIFwKKwkoc3RydWN0IGtmaWZvKSB7IFwKKwkJLnNpemUJPSBzLCBcCisJCS5pbgk9IDAsIFwKKwkJLm91dAk9IDAsIFwKKwkJLmJ1ZmZlciA9IGIgXAorCX0KIAogLyoqCi0gKiBfX2tmaWZvX3Jlc2V0IC0gcmVtb3ZlcyB0aGUgZW50aXJlIEZJRk8gY29udGVudHMsIG5vIGxvY2tpbmcgdmVyc2lvbgotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIGVtcHRpZWQuCisgKiBERUNMQVJFX0tGSUZPIC0gbWFjcm8gdG8gZGVjbGFyZSBhIGtmaWZvIGFuZCB0aGUgYXNzb2NpYXRlZCBidWZmZXIKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQorICogQHNpemU6IHNpemUgb2YgdGhlIGZpZm8gYnVmZmVyCisgKgorICogTm90ZTE6IHRoZSBtYWNybyBjYW4gYmUgdXNlZCBpbnNpZGUgc3RydWN0IG9yIHVuaW9uIGRlY2xhcmF0aW9uCisgKiBOb3RlMjogdGhlIG1hY3JvIGNyZWF0ZXMgdHdvIG9iamVjdHM6CisgKiAgQSBrZmlmbyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgYSBidWZmZXIgZm9yIHRoZSBrZmlmbworICogIG9iamVjdCBuYW1lZCBuYW1lIyNrZmlmb19idWZmZXIKICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fcmVzZXQoc3RydWN0IGtmaWZvICpmaWZvKQotewotCWZpZm8tPmluID0gZmlmby0+b3V0ID0gMDsKKyNkZWZpbmUgREVDTEFSRV9LRklGTyhuYW1lLCBzaXplKSBcCit1bmlvbiB7IFwKKwlzdHJ1Y3Qga2ZpZm8gbmFtZTsgXAorCXVuc2lnbmVkIGNoYXIgbmFtZSMja2ZpZm9fYnVmZmVyW3NpemUgKyBzaXplb2Yoc3RydWN0IGtmaWZvKV07IFwKIH0KIAogLyoqCisgKiBJTklUX0tGSUZPIC0gSW5pdGlhbGl6ZSBhIGtmaWZvIGRlY2xhcmVkIGJ5IERFQ0xBUkVEX0tGSUZPCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqLworI2RlZmluZSBJTklUX0tGSUZPKG5hbWUpIFwKKwluYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplb2YobmFtZSMja2ZpZm9fYnVmZmVyKSAtIFwKKwkJCQlzaXplb2Yoc3RydWN0IGtmaWZvKSwgbmFtZSMja2ZpZm9fYnVmZmVyKQorCisvKioKKyAqIERFRklORV9LRklGTyAtIG1hY3JvIHRvIGRlZmluZSBhbmQgaW5pdGlhbGl6ZSBhIGtmaWZvCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBhbmQgbG9jYWwga2ZpZm8gZGF0YSB0eXBlIHZhcmlhYmxlcworICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgorICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KKyAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCisgKi8KKyNkZWZpbmUgREVGSU5FX0tGSUZPKG5hbWUsIHNpemUpIFwKKwl1bnNpZ25lZCBjaGFyIG5hbWUjI2tmaWZvX2J1ZmZlcltzaXplXTsgXAorCXN0cnVjdCBrZmlmbyBuYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplLCBuYW1lIyNrZmlmb19idWZmZXIpCisKKyN1bmRlZiBfX2tmaWZvX2luaXRpYWxpemVyCisKK2V4dGVybiB2b2lkIGtmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gX19tdXN0X2NoZWNrIGludCBrZmlmb19hbGxvYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBzaXplLAorCQkJZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOworZXh0ZXJuIHVuc2lnbmVkIGludCBrZmlmb19pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19vdXQoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoqCiAgKiBrZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBGSUZPIGNvbnRlbnRzCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgZW1wdGllZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3Jlc2V0KHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoZmlmby0+bG9jaywgZmxhZ3MpOwotCi0JX19rZmlmb19yZXNldChmaWZvKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCWZpZm8tPmluID0gZmlmby0+b3V0ID0gMDsKIH0KIAogLyoqCi0gKiBrZmlmb19wdXQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPCisgKiBrZmlmb19yZXNldF9vdXQgLSBza2lwIEZJRk8gY29udGVudHMKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fcmVzZXRfb3V0KHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlzbXBfbWIoKTsKKwlmaWZvLT5vdXQgPSBmaWZvLT5pbjsKK30KKworLyoqCisgKiBrZmlmb19zaXplIC0gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlmbyBpbiBieXRlcwogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAYnVmZmVyOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19zaXplKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4gZmlmby0+c2l6ZTsKK30KKworLyoqCisgKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBpbiB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX2xlbihzdHJ1Y3Qga2ZpZm8gKmZpZm8pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50CW91dDsKKworCW91dCA9IGZpZm8tPm91dDsKKwlzbXBfcm1iKCk7CisJcmV0dXJuIGZpZm8tPmluIC0gb3V0OworfQorCisvKioKKyAqIGtmaWZvX2lzX2VtcHR5IC0gcmV0dXJucyB0cnVlIGlmIHRoZSBmaWZvIGlzIGVtcHR5CisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgaW50IGtmaWZvX2lzX2VtcHR5KHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4gZmlmby0+aW4gPT0gZmlmby0+b3V0OworfQorCisvKioKKyAqIGtmaWZvX2lzX2Z1bGwgLSByZXR1cm5zIHRydWUgaWYgdGhlIGZpZm8gaXMgZnVsbAorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIGludCBrZmlmb19pc19mdWxsKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4ga2ZpZm9fbGVuKGZpZm8pID09IGtmaWZvX3NpemUoZmlmbyk7Cit9CisKKy8qKgorICoga2ZpZm9fYXZhaWwgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2F2YWlsKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4ga2ZpZm9fc2l6ZShmaWZvKSAtIGtmaWZvX2xlbihmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19pbl9sb2NrZWQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPIHVzaW5nIGEgc3BpbmxvY2sgZm9yIGxvY2tpbmcKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQG46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbG9jazogcG9pbnRlciB0byB0aGUgc3BpbmxvY2sgdG8gdXNlIGZvciBsb2NraW5nLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAYnVmZmVyIGludG8KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBidWZmZXIgaW50bwogICogdGhlIEZJRk8gZGVwZW5kaW5nIG9uIHRoZSBmcmVlIHNwYWNlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCiAgKiBieXRlcyBjb3BpZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9faW5fbG9ja2VkKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKIAotCXJldCA9IF9fa2ZpZm9fcHV0KGZpZm8sIGJ1ZmZlciwgbGVuKTsKKwlyZXQgPSBrZmlmb19pbihmaWZvLCBmcm9tLCBuKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBrZmlmb19nZXQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPCisgKiBrZmlmb19vdXRfbG9ja2VkIC0gZ2V0cyBzb21lIGRhdGEgZnJvbSB0aGUgRklGTyB1c2luZyBhIHNwaW5sb2NrIGZvciBsb2NraW5nCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEBidWZmZXI6IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgotICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEBsb2NrOiBwb2ludGVyIHRvIHRoZSBzcGlubG9jayB0byB1c2UgZm9yIGxvY2tpbmcuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKLSAqIEBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19nZXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9sb2NrZWQoc3RydWN0IGtmaWZvICpmaWZvLAorCXVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gX19rZmlmb19nZXQoZmlmbywgYnVmZmVyLCBsZW4pOworCXJldCA9IGtmaWZvX291dChmaWZvLCB0bywgbik7CiAKIAkvKgogCSAqIG9wdGltaXphdGlvbjogaWYgdGhlIEZJRk8gaXMgZW1wdHksIHNldCB0aGUgaW5kaWNlcyB0byAwCiAJICogc28gd2UgZG9uJ3Qgd3JhcCB0aGUgbmV4dCB0aW1lCiAJICovCi0JaWYgKGZpZm8tPmluID09IGZpZm8tPm91dCkKLQkJZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOworCWlmIChrZmlmb19pc19lbXB0eShmaWZvKSkKKwkJa2ZpZm9fcmVzZXQoZmlmbyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogX19rZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPLCBubyBsb2NraW5nIHZlcnNpb24KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorZXh0ZXJuIHZvaWQga2ZpZm9fc2tpcChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBsZW4pOworCitleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbik7CisKK2V4dGVybiBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4pOworCisvKgorICogX19rZmlmb19hZGRfb3V0IGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIG91dCBvZmZzZXQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19sZW4oc3RydWN0IGtmaWZvICpmaWZvKQorc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fYWRkX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IG9mZikKIHsKLQlyZXR1cm4gZmlmby0+aW4gLSBmaWZvLT5vdXQ7CisJc21wX21iKCk7CisJZmlmby0+b3V0ICs9IG9mZjsKIH0KIAotLyoqCi0gKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKy8qCisgKiBfX2tmaWZvX2FkZF9pbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBpbiBvZmZzZXQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fbGVuKHN0cnVjdCBrZmlmbyAqZmlmbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2FkZF9pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IG9mZikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNtcF93bWIoKTsKKwlmaWZvLT5pbiArPSBvZmY7Cit9CisKKy8qCisgKiBfX2tmaWZvX29mZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIHRoZSBpbmRleCBvZiBhCisgKiBnaXZlbiBvZmZlc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fb2ZmKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gb2ZmICYgKGZpZm8tPnNpemUgLSAxKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fcGVla19uIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgZGV0ZXJtaW5hdGUgdGhlIGxlbmd0aCBvZgorICogdGhlIG5leHQgcmVjb3JkIGluIHRoZSBmaWZvCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKyNkZWZpbmUgX19LRklGT19HRVQoZmlmbywgb2ZmLCBzaGlmdCkgXAorCSgoZmlmbyktPmJ1ZmZlcltfX2tmaWZvX29mZigoZmlmbyksIChmaWZvKS0+b3V0KyhvZmYpKV0gPDwgKHNoaWZ0KSkKKworCXVuc2lnbmVkIGludCBsOworCisJbCA9IF9fS0ZJRk9fR0VUKGZpZm8sIDAsIDApOworCisJaWYgKC0tcmVjc2l6ZSkKKwkJbCB8PSBfX0tGSUZPX0dFVChmaWZvLCAxLCA4KTsKKworCXJldHVybiBsOworI3VuZGVmCV9fS0ZJRk9fR0VUCit9CisKKy8qCisgKiBfX2tmaWZvX3Bva2VfbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHN0b3JpbmcgdGhlIGxlbmd0aCBvZgorICogdGhlIG5leHQgcmVjb3JkIGludG8gdGhlIGZpZm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fcG9rZV9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCXVuc2lnbmVkIGludCByZWNzaXplLCB1bnNpZ25lZCBpbnQgbikKK3sKKyNkZWZpbmUgX19LRklGT19QVVQoZmlmbywgb2ZmLCB2YWwsIHNoaWZ0KSBcCisJCSggXAorCQkoZmlmbyktPmJ1ZmZlcltfX2tmaWZvX29mZigoZmlmbyksIChmaWZvKS0+aW4rKG9mZikpXSA9IFwKKwkJKHVuc2lnbmVkIGNoYXIpKCh2YWwpID4+IChzaGlmdCkpIFwKKwkJKQorCisJX19LRklGT19QVVQoZmlmbywgMCwgbiwgMCk7CisKKwlpZiAoLS1yZWNzaXplKQorCQlfX0tGSUZPX1BVVChmaWZvLCAxLCBuLCA4KTsKKyN1bmRlZglfX0tGSUZPX1BVVAorfQorCisvKgorICogX19rZmlmb19pbl8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBwdXQgZGF0ZSBpbnRvIHRoZSBmaWZvCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2luX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX24oc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQorewogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gX19rZmlmb19pbl9uKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOwogCi0JcmV0ID0gX19rZmlmb19sZW4oZmlmbyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKLQorCWlmIChsaWtlbHkocmV0ID09IDApKSB7CisJCWlmIChyZWNzaXplKQorCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7CisJCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBrZmlmb19pbl9yZWMgLSBwdXRzIHNvbWUgcmVjb3JkIGRhdGEgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIEBuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlIEZJRk8gYW5kIHJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqIEEgcmV0dXJuZWQgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBAbiB2YWx1ZSBtZWFucyB0aGF0IHRoZSByZWNvcmQgZG9lc24ndAorICogZml0IGludG8gdGhlIGJ1ZmZlci4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9faW5fcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9faW5fZ2VuZXJpYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKKwlyZXR1cm4gX19rZmlmb19pbl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX291dF8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBnZXQgZGF0ZSBmcm9tIHRoZSBmaWZvCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX291dF9yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCByZWNsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICp0bywgdW5zaWduZWQgaW50IG4sCisJdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCAqdG90YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWlmICghcmVjc2l6ZSkgeworCQlsID0gbjsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwl9IGVsc2UgeworCQlsID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7CisJCWlmICh0b3RhbCkKKwkJCSp0b3RhbCA9IGw7CisJCWlmIChuIDwgbCkKKwkJCXJldHVybiBsOworCX0KKworCXJldHVybiBfX2tmaWZvX291dF9uKGZpZm8sIHRvLCBsLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb19vdXRfcmVjIC0gZ2V0cyBzb21lIHJlY29yZCBkYXRhIGZyb20gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBAdG90YWw6IHBvaW50ZXIgd2hlcmUgdGhlIHRvdGFsIG51bWJlciBvZiB0byBjb3BpZWQgYnl0ZXMgc2hvdWxkIHN0b3JlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgRklGTyB0byBAdG8gYW5kIHJldHVybnMgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqIEEgcmV0dXJuZWQgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBAbiB2YWx1ZSBtZWFucyB0aGF0IHRoZSByZWNvcmQgZG9lc24ndAorICogZml0IGludG8gdGhlIEB0byBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKKworeworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCXJldHVybiBfX2tmaWZvX291dF9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CisJcmV0dXJuIF9fa2ZpZm9fb3V0X3JlYyhmaWZvLCB0bywgbiwgcmVjc2l6ZSwgdG90YWwpOworfQorCisvKgorICogX19rZmlmb19mcm9tX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZnJvbSB1c2VyIHNwYWNlIGludG8KKyAqIHRoZSBmaWZvLiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2Zyb21fdXNlcl9yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gX19rZmlmb19mcm9tX3VzZXJfbihmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKKworCWlmIChsaWtlbHkocmV0ID09IDApKSB7CisJCWlmIChyZWNzaXplKQorCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7CisJCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBrZmlmb19mcm9tX3VzZXJfcmVjIC0gcHV0cyBzb21lIGRhdGEgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIEBuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlCisgKiBGSUZPIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXF1YWwgb3IgbGVzcyB0aGUgQG4gdmFsdWUsIHRoZSBjb3B5X2Zyb21fdXNlcigpCisgKiBmdW5jdGlvbnMgaGFzIGZhaWxlZC4gT3RoZXJ3aXNlIHRoZSByZWNvcmQgZG9lc24ndCBmaXQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOworCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX3RvX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZmlmbyBkYXRhIGludG8gdXNlciBzcGFjZQorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb190b191c2VyX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplLAorCXVuc2lnbmVkIGludCAqdG90YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLAorCXVuc2lnbmVkIGludCByZWNzaXplLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXVuc2lnbmVkIGludCBsOworCisJaWYgKCFyZWNzaXplKSB7CisJCWwgPSBuOworCQlpZiAodG90YWwpCisJCQkqdG90YWwgPSBsOworCX0gZWxzZSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwkJaWYgKG4gPCBsKQorCQkJcmV0dXJuIGw7CisJfQorCisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9uKGZpZm8sIHRvLCBuLCBsLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb190b191c2VyX3JlYyAtIGdldHMgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCB3cml0ZSBpdCB0byB1c2VyIHNwYWNlCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICogQHRvdGFsOiBwb2ludGVyIHdoZXJlIHRoZSB0b3RhbCBudW1iZXIgb2YgdG8gY29waWVkIGJ5dGVzIHNob3VsZCBzdG9yZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBuIGJ5dGVzIGZyb20gdGhlIEZJRk8gdG8gdGhlIEB0by4KKyAqIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90CisgKiBiZSBjb3BpZWQuCisgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXF1YWwgb3IgbGVzcyB0aGUgQG4gdmFsdWUsIHRoZSBjb3B5X3RvX3VzZXIoKQorICogZnVuY3Rpb25zIGhhcyBmYWlsZWQuIE90aGVyd2lzZSB0aGUgcmVjb3JkIGRvZXNuJ3QgZml0IGludG8gdGhlIEB0byBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJCXVuc2lnbmVkIGludCAqdG90YWwpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9yZWMoZmlmbywgdG8sIG4sIHJlY3NpemUsIHRvdGFsKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fcGVla18uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBwZWVrIGludG8gdGhlIG5leHQgZmlmbyByZWNvcmQKKyAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fcGVla19yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGludCByZWNzaXplKTsKKworLyoqCisgKiBrZmlmb19wZWVrX3JlYyAtIGdldHMgdGhlIHNpemUgb2YgdGhlIG5leHQgRklGTyByZWNvcmQgZGF0YQorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAcmVjc2l6ZTogc2l6ZSBvZiByZWNvcmQgZmllbGQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIG5leHQgRklGTyByZWNvcmQgaW4gbnVtYmVyIG9mIGJ5dGVzCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19wZWVrX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fcGVla19nZW5lcmljKGZpZm8sIHJlY3NpemUpOworCWlmICghcmVjc2l6ZSkKKwkJcmV0dXJuIGtmaWZvX2xlbihmaWZvKTsKKwlyZXR1cm4gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX3NraXBfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3Igc2tpcCB0aGUgbmV4dCBmaWZvIHJlY29yZAorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19za2lwX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHZvaWQgX19rZmlmb19za2lwX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX3NraXBfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWlmIChyZWNzaXplKSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKworCQlpZiAobCArIHJlY3NpemUgPD0ga2ZpZm9fbGVuKGZpZm8pKSB7CisJCQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbCArIHJlY3NpemUpOworCQkJcmV0dXJuOworCQl9CisJfQorCWtmaWZvX3Jlc2V0X291dChmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19za2lwX3JlYyAtIHNraXAgdGhlIG5leHQgZmlmbyBvdXQgcmVjb3JkCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2tpcHMgdGhlIG5leHQgRklGTyByZWNvcmQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3NraXBfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQorCQlfX2tmaWZvX3NraXBfZ2VuZXJpYyhmaWZvLCByZWNzaXplKTsKKwllbHNlCisJCV9fa2ZpZm9fc2tpcF9yZWMoZmlmbywgcmVjc2l6ZSk7Cit9CisKKy8qKgorICoga2ZpZm9fYXZhaWxfcmVjIC0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiBhIHJlY29yZCBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fYXZhaWxfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IGtmaWZvX3NpemUoZmlmbykgLSBrZmlmb19sZW4oZmlmbyk7CisKKwlyZXR1cm4gKGwgPiByZWNzaXplKSA/IGwgLSByZWNzaXplIDogMDsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKaW5kZXggM2M3NDk3ZC4uOTlkOWE2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCisrKyBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaApAQCAtMzIsOCArMzIsNyBAQAogCQkJICAgICBzaXplX3Qgc2l6ZSkgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19ub3RfbGVhayhjb25zdCB2b2lkICpwdHIpIF9fcmVmOwogZXh0ZXJuIHZvaWQga21lbWxlYWtfaWdub3JlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7Ci1leHRlcm4gdm9pZCBrbWVtbGVha19zY2FuX2FyZWEoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgICAgICBzaXplX3QgbGVuZ3RoLCBnZnBfdCBnZnApIF9fcmVmOworZXh0ZXJuIHZvaWQga21lbWxlYWtfc2Nhbl9hcmVhKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19ub19zY2FuKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19hbGxvY19yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKQEAgLTg0LDggKzgzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19pZ25vcmUoY29uc3Qgdm9pZCAqcHRyKQogewogfQotc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX3NjYW5fYXJlYShjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCSAgICAgIHNpemVfdCBsZW5ndGgsIGdmcF90IGdmcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19zY2FuX2FyZWEoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2VyYXNlKHZvaWQgKipwdHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttc2dfZHVtcC5oIGIvaW5jbHVkZS9saW51eC9rbXNnX2R1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzJhYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9rbXNnX2R1bXAuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogbGludXgvaW5jbHVkZS9rbXNnX2R1bXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXQgSW5zaWdodCBBQgorICoKKyAqIEF1dGhvcjogU2ltb24gS2Fnc3Ryb20gPHNpbW9uLmthZ3N0cm9tQG5ldGluc2lnaHQubmV0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTElOVVhfS01TR19EVU1QX0gKKyNkZWZpbmUgX0xJTlVYX0tNU0dfRFVNUF9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK2VudW0ga21zZ19kdW1wX3JlYXNvbiB7CisJS01TR19EVU1QX09PUFMsCisJS01TR19EVU1QX1BBTklDLAorfTsKKworLyoqCisgKiBzdHJ1Y3Qga21zZ19kdW1wZXIgLSBrZXJuZWwgY3Jhc2ggbWVzc2FnZSBkdW1wZXIgc3RydWN0dXJlCisgKiBAZHVtcDoJVGhlIGNhbGxiYWNrIHdoaWNoIGdldHMgY2FsbGVkIG9uIGNyYXNoZXMuIFRoZSBidWZmZXIgaXMgcGFzc2VkCisgKiAJCWFzIHR3byBzZWN0aW9ucywgd2hlcmUgczEgKGxlbmd0aCBsMSkgY29udGFpbnMgdGhlIG9sZGVyCisgKiAJCW1lc3NhZ2VzIGFuZCBzMiAobGVuZ3RoIGwyKSBjb250YWlucyB0aGUgbmV3ZXIuCisgKiBAbGlzdDoJRW50cnkgaW4gdGhlIGR1bXBlciBsaXN0IChwcml2YXRlKQorICogQHJlZ2lzdGVyZWQ6CUZsYWcgdGhhdCBzcGVjaWZpZXMgaWYgdGhpcyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQKKyAqLworc3RydWN0IGttc2dfZHVtcGVyIHsKKwl2b2lkICgqZHVtcCkoc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXIsIGVudW0ga21zZ19kdW1wX3JlYXNvbiByZWFzb24sCisJCQljb25zdCBjaGFyICpzMSwgdW5zaWduZWQgbG9uZyBsMSwKKwkJCWNvbnN0IGNoYXIgKnMyLCB1bnNpZ25lZCBsb25nIGwyKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IHJlZ2lzdGVyZWQ7Cit9OworCisjaWZkZWYgQ09ORklHX1BSSU5USwordm9pZCBrbXNnX2R1bXAoZW51bSBrbXNnX2R1bXBfcmVhc29uIHJlYXNvbik7CisKK2ludCBrbXNnX2R1bXBfcmVnaXN0ZXIoc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXIpOworCitpbnQga21zZ19kdW1wX3VucmVnaXN0ZXIoc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbXNnX2R1bXAoZW51bSBrbXNnX2R1bXBfcmVhc29uIHJlYXNvbikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQga21zZ19kdW1wX3JlZ2lzdGVyKHN0cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBrbXNnX2R1bXBfdW5yZWdpc3RlcihzdHJ1Y3Qga21zZ19kdW1wZXIgKmR1bXBlcikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0tNU0dfRFVNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tzbS5oIGIvaW5jbHVkZS9saW51eC9rc20uaAppbmRleCBhNDg1YzE0Li40M2JkYWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tzbS5oCisrKyBiL2luY2x1ZGUvbGludXgva3NtLmgKQEAgLTksOCArOSwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+CisKK3N0cnVjdCBzdGFibGVfbm9kZTsKK3N0cnVjdCBtZW1fY2dyb3VwOwogCiAjaWZkZWYgQ09ORklHX0tTTQogaW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LApAQCAtMzQsMzEgKzM4LDYyIEBACiAvKgogICogQSBLU00gcGFnZSBpcyBvbmUgb2YgdGhvc2Ugd3JpdGUtcHJvdGVjdGVkICJzaGFyZWQgcGFnZXMiIG9yICJtZXJnZWQgcGFnZXMiCiAgKiB3aGljaCBLU00gbWFwcyBpbnRvIG11bHRpcGxlIG1tcywgd2hlcmV2ZXIgaWRlbnRpY2FsIGFub255bW91cyBwYWdlIGNvbnRlbnQKLSAqIGlzIGZvdW5kIGluIFZNX01FUkdFQUJMRSB2bWFzLiAgSXQncyBhIFBhZ2VBbm9uIHBhZ2UsIHdpdGggTlVMTCBhbm9uX3ZtYS4KKyAqIGlzIGZvdW5kIGluIFZNX01FUkdFQUJMRSB2bWFzLiAgSXQncyBhIFBhZ2VBbm9uIHBhZ2UsIHBvaW50aW5nIG5vdCB0byBhbnkKKyAqIGFub25fdm1hLCBidXQgdG8gdGhhdCBwYWdlJ3Mgbm9kZSBvZiB0aGUgc3RhYmxlIHRyZWUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IFBhZ2VLc20oc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuICgodW5zaWduZWQgbG9uZylwYWdlLT5tYXBwaW5nID09IFBBR0VfTUFQUElOR19BTk9OKTsKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKXBhZ2UtPm1hcHBpbmcgJiBQQUdFX01BUFBJTkdfRkxBR1MpID09CisJCQkJKFBBR0VfTUFQUElOR19BTk9OIHwgUEFHRV9NQVBQSU5HX0tTTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN0YWJsZV9ub2RlICpwYWdlX3N0YWJsZV9ub2RlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBQYWdlS3NtKHBhZ2UpID8gcGFnZV9ybWFwcGluZyhwYWdlKSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zdGFibGVfbm9kZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJc3RydWN0IHN0YWJsZV9ub2RlICpzdGFibGVfbm9kZSkKK3sKKwlwYWdlLT5tYXBwaW5nID0gKHZvaWQgKilzdGFibGVfbm9kZSArCisJCQkJKFBBR0VfTUFQUElOR19BTk9OIHwgUEFHRV9NQVBQSU5HX0tTTSk7CiB9CiAKIC8qCi0gKiBCdXQgd2UgaGF2ZSB0byBhdm9pZCB0aGUgY2hlY2tpbmcgd2hpY2ggcGFnZV9hZGRfYW5vbl9ybWFwKCkgcGVyZm9ybXMuCisgKiBXaGVuIGRvX3N3YXBfcGFnZSgpIGZpcnN0IGZhdWx0cyBpbiBmcm9tIHN3YXAgd2hhdCB1c2VkIHRvIGJlIGEgS1NNIHBhZ2UsCisgKiBubyBwcm9ibGVtLCBpdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgdm1hJ3MgYW5vbl92bWE7IGJ1dCB0aGVyZWFmdGVyLAorICogaXQgbWlnaHQgYmUgZmF1bHRlZCBpbnRvIGEgZGlmZmVyZW50IGFub25fdm1hIChvciBwZXJoYXBzIHRvIGEgZGlmZmVyZW50CisgKiBvZmZzZXQgaW4gdGhlIHNhbWUgYW5vbl92bWEpLiAgZG9fc3dhcF9wYWdlKCkgY2Fubm90IGRvIGFsbCB0aGUgbG9ja2luZworICogbmVlZGVkIHRvIHJlY29uc3RpdHV0ZSBhIGNyb3NzLWFub25fdm1hIEtTTSBwYWdlOiBmb3Igbm93IGl0IGhhcyB0byBtYWtlCisgKiBhIGNvcHksIGFuZCBsZWF2ZSByZW1lcmdpbmcgdGhlIHBhZ2VzIHRvIGEgbGF0ZXIgcGFzcyBvZiBrc21kLgorICoKKyAqIFdlJ2QgbGlrZSB0byBtYWtlIHRoaXMgY29uZGl0aW9uYWwgb24gdm1hLT52bV9mbGFncyAmIFZNX01FUkdFQUJMRSwKKyAqIGJ1dCB3aGF0IGlmIHRoZSB2bWEgd2FzIHVubWVyZ2VkIHdoaWxlIHRoZSBwYWdlIHdhcyBzd2FwcGVkIG91dD8KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfYWRkX2tzbV9ybWFwKHN0cnVjdCBwYWdlICpwYWdlKQorc3RydWN0IHBhZ2UgKmtzbV9kb2VzX25lZWRfdG9fY29weShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JaWYgKGF0b21pY19pbmNfYW5kX3Rlc3QoJnBhZ2UtPl9tYXBjb3VudCkpIHsKLQkJcGFnZS0+bWFwcGluZyA9ICh2b2lkICopIFBBR0VfTUFQUElOR19BTk9OOwotCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfQU5PTl9QQUdFUyk7Ci0JfQotfQotI2Vsc2UgIC8qICFDT05GSUdfS1NNICovCisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHBhZ2VfYW5vbl92bWEocGFnZSk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpCi17Ci0JcmV0dXJuIDA7CisJaWYgKCFhbm9uX3ZtYSB8fAorCSAgICAoYW5vbl92bWEgPT0gdm1hLT5hbm9uX3ZtYSAmJgorCSAgICAgcGFnZS0+aW5kZXggPT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSkpCisJCXJldHVybiBwYWdlOworCisJcmV0dXJuIGtzbV9kb2VzX25lZWRfdG9fY29weShwYWdlLCB2bWEsIGFkZHJlc3MpOwogfQogCitpbnQgcGFnZV9yZWZlcmVuY2VkX2tzbShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpOworaW50IHRyeV90b191bm1hcF9rc20oc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTsKK2ludCBybWFwX3dhbGtfa3NtKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgKCpybWFwX29uZSkoc3RydWN0IHBhZ2UgKiwKKwkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKSwgdm9pZCAqYXJnKTsKK3ZvaWQga3NtX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKm9sZHBhZ2UpOworCisjZWxzZSAgLyogIUNPTkZJR19LU00gKi8KKwogc3RhdGljIGlubGluZSBpbnQga3NtX2Zvcmsoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKQogewogCXJldHVybiAwOwpAQCAtNzMsNyArMTA4LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIE5vIHN0dWIgcmVxdWlyZWQgZm9yIHBhZ2VfYWRkX2tzbV9ybWFwKHBhZ2UpICovCisjaWZkZWYgQ09ORklHX01NVQorc3RhdGljIGlubGluZSBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYWR2aWNlLCB1bnNpZ25lZCBsb25nICp2bV9mbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfcmVmZXJlbmNlZF9rc20oc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cnlfdG9fdW5tYXBfa3NtKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcm1hcF93YWxrX2tzbShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50ICgqcm1hcF9vbmUpKHN0cnVjdCBwYWdlKiwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiksIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGtzbV9taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpvbGRwYWdlKQoreworfQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KICNlbmRpZiAvKiAhQ09ORklHX0tTTSAqLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0xJTlVYX0tTTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCAyZDI0MWRhLi5hMjRkZTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTQ5Niw2ICs0OTYsNyBAQAogI2RlZmluZSBLVk1fQ0FQX1ZDUFVfRVZFTlRTIDQxCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1BTVyA0MgorI2RlZmluZSBLVk1fQ0FQX1BQQ19TRUdTVEFURSA0MwogCiAjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMtbHAzOTQ0LmggYi9pbmNsdWRlL2xpbnV4L2xlZHMtbHAzOTQ0LmgKaW5kZXggYWZjOWY5Zi4uMjYxOGFhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLWxwMzk0NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy1scDM5NDQuaApAQCAtMTIsOSArMTIsNiBAQAogI2lmbmRlZiBfX0xJTlVYX0xFRFNfTFAzOTQ0X0gKICNkZWZpbmUgX19MSU5VWF9MRURTX0xQMzk0NF9ICiAKLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0KICNkZWZpbmUgTFAzOTQ0X0xFRDAgMAogI2RlZmluZSBMUDM5NDRfTEVEMSAxCiAjZGVmaW5lIExQMzk0NF9MRUQyIDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy1wY2E5NTMyLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMtcGNhOTUzMi5oCmluZGV4IDk2ZWVhOTAuLmYxNThlYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGVkcy1wY2E5NTMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLXBjYTk1MzIuaApAQCAtMzIsNyArMzIsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJY2hhciAqbmFtZTsKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxkZXY7Ci0gICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJZW51bSBwY2E5NTMyX3R5cGUgdHlwZTsKIAllbnVtIHBjYTk1MzJfc3RhdGUgc3RhdGU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLXJlZ3VsYXRvci5oIGIvaW5jbHVkZS9saW51eC9sZWRzLXJlZ3VsYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGViMzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZHMtcmVndWxhdG9yLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGxlZHMtcmVndWxhdG9yLmggLSBwbGF0Zm9ybSBkYXRhIHN0cnVjdHVyZSBmb3IgcmVndWxhdG9yIGRyaXZlbiBMRURzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9MRURTX1JFR1VMQVRPUl9ICisjZGVmaW5lIF9fTElOVVhfTEVEU19SRUdVTEFUT1JfSAorCisvKgorICogVXNlICJ2bGVkIiBhcyBzdXBwbHkgaWQgd2hlbiBkZWNsYXJpbmcgdGhlIHJlZ3VsYXRvciBjb25zdW1lcjoKKyAqCisgKiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGNhcF9yZWd1bGF0b3JfVlZJQl9jb25zdW1lcnMgW10gPSB7CisgKiAJeyAuZGV2X25hbWUgPSAibGVkcy1yZWd1bGF0b3IuMCIsIHN1cHBseSA9ICJ2bGVkIiB9LAorICogfTsKKyAqCisgKiBJZiB5b3UgaGF2ZSBzZXZlcmFsIHJlZ3VsYXRvciBkcml2ZW4gTEVEcywgeW91IGNhbiBhcHBlbmQgYSBudW1lcmljYWwgaWQgdG8KKyAqIC5kZXZfbmFtZSBhcyBkb25lIGFib3ZlLCBhbmQgdXNlIHRoZSBzYW1lIGlkIHdoZW4gZGVjbGFyaW5nIHRoZSBwbGF0Zm9ybQorICogZGV2aWNlOgorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgbGVkX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhIGE3ODBfdmlicmF0b3JfZGF0YSA9IHsKKyAqIAkubmFtZSAgID0gImE3ODA6OnZpYnJhdG9yIiwKKyAqIH07CisgKgorICogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYTc4MF92aWJyYXRvciA9IHsKKyAqIAkubmFtZSA9ICJsZWRzLXJlZ3VsYXRvciIsCisgKiAJLmlkICAgPSAwLAorICogCS5kZXYgID0geworICogCQkucGxhdGZvcm1fZGF0YSA9ICZhNzgwX3ZpYnJhdG9yX2RhdGEsCisgKiAJfSwKKyAqIH07CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworc3RydWN0IGxlZF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSB7CisJY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgICAvKiBMRUQgbmFtZSBhcyBleHBlY3RlZCBieSBMRUQgY2xhc3MgKi8KKwllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7IC8qIGluaXRpYWwgYnJpZ2h0bmVzcyB2YWx1ZSAqLworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfTEVEU19SRUdVTEFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXMzbHYwMmQuaCBiL2luY2x1ZGUvbGludXgvbGlzM2x2MDJkLmgKaW5kZXggM2NjMmYyYy4uZjFjYTBkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXMzbHYwMmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpczNsdjAyZC5oCkBAIC00Myw2ICs0MywyMSBAQAogI2RlZmluZSBMSVMzX1dBS0VVUF9aX0hJCSgxIDw8IDUpCiAJdW5zaWduZWQgY2hhciB3YWtldXBfZmxhZ3M7CiAJdW5zaWduZWQgY2hhciB3YWtldXBfdGhyZXNoOworI2RlZmluZSBMSVMzX05PX01BUAkJMAorI2RlZmluZSBMSVMzX0RFVl9YCQkxCisjZGVmaW5lIExJUzNfREVWX1kJCTIKKyNkZWZpbmUgTElTM19ERVZfWgkJMworI2RlZmluZSBMSVMzX0lOVl9ERVZfWAkgICAgICAgLTEKKyNkZWZpbmUgTElTM19JTlZfREVWX1kJICAgICAgIC0yCisjZGVmaW5lIExJUzNfSU5WX0RFVl9aCSAgICAgICAtMworCXM4IGF4aXNfeDsKKwlzOCBheGlzX3k7CisJczggYXhpc196OworCWludCAoKnNldHVwX3Jlc291cmNlcykodm9pZCk7CisJaW50ICgqcmVsZWFzZV9yZXNvdXJjZXMpKHZvaWQpOworCS8qIExpbWl0cyBmb3Igc2VsZnRlc3QgYXJlIHNwZWNpZmllZCBpbiBjaGlwIGRhdGEgc2hlZXQgKi8KKwlzMTYgc3RfbWluX2xpbWl0c1szXTsgLyogbWluIHBhc3MgbGltaXQgeCwgeSwgeiAqLworCXMxNiBzdF9tYXhfbGltaXRzWzNdOyAvKiBtYXggcGFzcyBsaW1pdCB4LCB5LCB6ICovCiB9OwogCiAjZW5kaWYgLyogX19MSVMzTFYwMkRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGxjLmggYi9pbmNsdWRlL2xpbnV4L2xsYy5oCmluZGV4IDc3MzM1ODU2Li5hZDcwNzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbGxjLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAlMTENfT1BUX0JVU1lfVE1SX0VYUCwJLyogYnVzeSBzdGF0ZSBleHBpcmUgdGltZSAoc2VjcykuICovCiAJTExDX09QVF9UWF9XSU4sCQkvKiB0eCB3aW5kb3cgc2l6ZS4gKi8KIAlMTENfT1BUX1JYX1dJTiwJCS8qIHJ4IHdpbmRvdyBzaXplLiAqLworCUxMQ19PUFRfUEtUSU5GTywJLyogYW5jaWxsYXJ5IHBhY2tldCBpbmZvcm1hdGlvbi4gKi8KIAlMTENfT1BUX01BWAogfTsKIApAQCAtNzAsNiArNzEsMTIgQEAKICNkZWZpbmUgTExDX1NBUF9STQkweEQ0CQkvKiBSZXNvdXJjZSBNYW5hZ2VtZW50IAkJKi8KICNkZWZpbmUgTExDX1NBUF9HTE9CQUwJMHhGRgkJLyogR2xvYmFsIFNBUC4gCQkJKi8KIAorc3RydWN0IGxsY19wa3RpbmZvIHsKKwlpbnQgbHBpX2lmaW5kZXg7CisJdW5zaWduZWQgY2hhciBscGlfc2FwOworCXVuc2lnbmVkIGNoYXIgbHBpX21hY1tJRkhXQUREUkxFTl07Cit9OworCiAjaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBMTENfU0FQX0RZTl9TVEFSVAkweEMwCiAjZGVmaW5lIExMQ19TQVBfRFlOX1NUT1AJMHhERQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sbWIuaCBiL2luY2x1ZGUvbGludXgvbG1iLmgKaW5kZXggMjQ0MmUzZi4uZWY4MmI4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sbWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xtYi5oCkBAIC01NCw2ICs1NCw3IEBACiBleHRlcm4gdTY0IGxtYl9lbmRfb2ZfRFJBTSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBsbWJfZW5mb3JjZV9tZW1vcnlfbGltaXQodTY0IG1lbW9yeV9saW1pdCk7CiBleHRlcm4gaW50IF9faW5pdCBsbWJfaXNfcmVzZXJ2ZWQodTY0IGFkZHIpOworZXh0ZXJuIGludCBsbWJfaXNfcmVnaW9uX3Jlc2VydmVkKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CiBleHRlcm4gaW50IGxtYl9maW5kKHN0cnVjdCBsbWJfcHJvcGVydHkgKnJlcyk7CiAKIGV4dGVybiB2b2lkIGxtYl9kdW1wX2FsbCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYmY5MjEzYi4uMWY5YjExOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTU0LDYgKzU0LDExIEBACiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX2RlbF9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCSAgZW51bSBscnVfbGlzdCBmcm9tLCBlbnVtIGxydV9saXN0IHRvKTsKKworLyogRm9yIGNvYWxlc2NpbmcgdW5jaGFyZ2UgZm9yIHJlZHVjaW5nIG1lbWNnJyBvdmVyaGVhZCovCitleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N0YXJ0KHZvaWQpOworZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9lbmQodm9pZCk7CisKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIGludCBtZW1fY2dyb3VwX3NobWVtX2NoYXJnZV9mYWxsYmFjayhzdHJ1Y3QgcGFnZSAqcGFnZSwKQEAgLTY4LDYgKzczLDcgQEAKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBnZnBfdCBnZnBfbWFzayk7CiBpbnQgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7CiAKK2V4dGVybiBzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTgwLDYgKzg2LDggQEAKIAlyZXR1cm4gY2dyb3VwID09IG1lbTsKIH0KIAorZXh0ZXJuIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1fY2dyb3VwX2NzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKKwogZXh0ZXJuIGludAogbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKipwdHIpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9lbmRfbWlncmF0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCkBAIC0xMTcsNyArMTI1LDcgQEAKIH0KIAogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9vb21fY2FsbGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci12b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX21hcHBlZF9maWxlX3N0YXQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB2YWwpOwordm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9maWxlX21hcHBlZChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHZhbCk7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWNsYWltKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJCQkJCQlnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwKIAkJCQkJCWludCB6aWQpOwpAQCAtMTUxLDYgKzE1OSwxNCBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9lbmQodm9pZCkKK3sKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIH0KQEAgLTE4OSw2ICsyMDUsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewogCXJldHVybiAxOwpAQCAtMjAwLDYgKzIyMSwxMSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICptZW1fY2dyb3VwX2NzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIGludAogbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKipwdHIpCiB7CkBAIC0yNzQsNyArMzAwLDcgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX21hcHBlZF9maWxlX3N0YXQoc3RydWN0IHBhZ2UgKnBhZ2UsCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfZmlsZV9tYXBwZWQoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCQkJaW50IHZhbCkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCmluZGV4IDM3ZmExOWIuLjFhZGZlNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtNTAsNiArNTAsMTkgQEAKIAlpbnQgc3RhdHVzX2NoYW5nZV9uaWQ7CiB9OwogCisvKgorICogRHVyaW5nIHBhZ2VibG9jayBpc29sYXRpb24sIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgd2l0aGluIHRoZQorICogcmFuZ2UgW3N0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpIHdoaWNoIGFyZSBvd25lZCBieSBjb2RlCisgKiBpbiB0aGUgbm90aWZpZXIgY2hhaW4uCisgKi8KKyNkZWZpbmUgTUVNX0lTT0xBVEVfQ09VTlQJKDE8PDApCisKK3N0cnVjdCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwkvKiBTdGFydCBvZiByYW5nZSB0byBjaGVjayAqLworCXVuc2lnbmVkIGludCBucl9wYWdlczsJCS8qICMgcGFnZXMgaW4gcmFuZ2UgdG8gY2hlY2sgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfZm91bmQ7CS8qICMgcGFnZXMgb3duZWQgZm91bmQgYnkgY2FsbGJhY2tzICovCit9OworCiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiBzdHJ1Y3QgbWVtX3NlY3Rpb247CiAKQEAgLTc2LDE0ICs4OSwyOCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkodW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIDA7Cit9CiAjZWxzZQogZXh0ZXJuIGludCByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9uZXdfbWVtb3J5KGludCwgc3RydWN0IG1lbV9zZWN0aW9uICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21lbW9yeV9zZWN0aW9uKHN0cnVjdCBtZW1fc2VjdGlvbiAqKTsKIGV4dGVybiBpbnQgbWVtb3J5X2Rldl9pbml0KHZvaWQpOwogZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5X2Jsb2NrKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBtZW1fc2VjdGlvbiAqLCBpbnQpOwogZXh0ZXJuIGludCBtZW1vcnlfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKK2V4dGVybiBpbnQgbWVtb3J5X2lzb2xhdGVfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKIGV4dGVybiBzdHJ1Y3QgbWVtb3J5X2Jsb2NrICpmaW5kX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtX3NlY3Rpb24gKik7CiAjZGVmaW5lIENPTkZJR19NRU1fQkxPQ0tfU0laRQkoUEFHRVNfUEVSX1NFQ1RJT048PFBBR0VfU0hJRlQpCiBlbnVtIG1lbV9hZGRfY29udGV4dCB7IEJPT1QsIEhPVFBMVUcgfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAppbmRleCBmZWQ5NjkyLi4zNWIwN2I3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC02OSw3ICs2OSw2IEBACiAvKiBWTSBpbnRlcmZhY2UgdGhhdCBtYXkgYmUgdXNlZCBieSBmaXJtd2FyZSBpbnRlcmZhY2UgKi8KIGV4dGVybiBpbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgX19vZmZsaW5lX2lzb2xhdGVkX3BhZ2VzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiByZWFzb25hYmx5IGdlbmVyaWMgaW50ZXJmYWNlIHRvIGV4cGFuZCB0aGUgcGh5c2ljYWwgcGFnZXMgaW4gYSB6b25lICAqLwogZXh0ZXJuIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaAppbmRleCAwODVjOTAzLi4xY2M5NjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKQEAgLTIwMSw2ICsyMDEsNyBAQAogZXh0ZXJuIHN0cnVjdCB6b25lbGlzdCAqaHVnZV96b25lbGlzdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIGdmcF90IGdmcF9mbGFncywKIAkJCQlzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbCwgbm9kZW1hc2tfdCAqKm5vZGVtYXNrKTsKK2V4dGVybiBib29sIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVtYXNrX3QgKm1hc2spOwogZXh0ZXJuIHVuc2lnbmVkIHNsYWJfbm9kZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpOwogCiBleHRlcm4gZW51bSB6b25lX3R5cGUgcG9saWN5X3pvbmU7CkBAIC0zMjgsNiArMzI5LDggQEAKIAlyZXR1cm4gbm9kZV96b25lbGlzdCgwLCBnZnBfZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaW5pdF9ub2RlbWFza19vZl9tZW1wb2xpY3kobm9kZW1hc2tfdCAqbSkgeyByZXR1cm4gZmFsc2U7IH0KKwogc3RhdGljIGlubGluZSBpbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCWNvbnN0IG5vZGVtYXNrX3QgKmZyb21fbm9kZXMsCiAJCQljb25zdCBub2RlbWFza190ICp0b19ub2RlcywgaW50IGZsYWdzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MDcuaCBiL2luY2x1ZGUvbGludXgvbWZkLzg4cG04NjA3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxYjQyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkLzg4cG04NjA3LmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBNYXJ2ZWxsIDg4UE04NjA3IEludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfODhQTTg2MDdfSAorI2RlZmluZSBfX0xJTlVYX01GRF84OFBNODYwN19ICisKK2VudW0geworCVBNODYwN19JRF9CVUNLMSA9IDAsCisJUE04NjA3X0lEX0JVQ0syLAorCVBNODYwN19JRF9CVUNLMywKKworCVBNODYwN19JRF9MRE8xLAorCVBNODYwN19JRF9MRE8yLAorCVBNODYwN19JRF9MRE8zLAorCVBNODYwN19JRF9MRE80LAorCVBNODYwN19JRF9MRE81LAorCVBNODYwN19JRF9MRE82LAorCVBNODYwN19JRF9MRE83LAorCVBNODYwN19JRF9MRE84LAorCVBNODYwN19JRF9MRE85LAorCVBNODYwN19JRF9MRE8xMCwKKwlQTTg2MDdfSURfTERPMTIsCisJUE04NjA3X0lEX0xETzE0LAorCisJUE04NjA3X0lEX1JHX01BWCwKK307CisKKyNkZWZpbmUgQ0hJUF9JRAkJCQkoMHg0MCkKKyNkZWZpbmUgQ0hJUF9JRF9NQVNLCQkJKDB4RjgpCisKKy8qIEludGVycnVwdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X1NUQVRVU18xCQkJKDB4MDEpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfMgkJCSgweDAyKQorI2RlZmluZSBQTTg2MDdfSU5UX1NUQVRVUzEJCSgweDAzKQorI2RlZmluZSBQTTg2MDdfSU5UX1NUQVRVUzIJCSgweDA0KQorI2RlZmluZSBQTTg2MDdfSU5UX1NUQVRVUzMJCSgweDA1KQorI2RlZmluZSBQTTg2MDdfSU5UX01BU0tfMQkJKDB4MDYpCisjZGVmaW5lIFBNODYwN19JTlRfTUFTS18yCQkoMHgwNykKKyNkZWZpbmUgUE04NjA3X0lOVF9NQVNLXzMJCSgweDA4KQorCisvKiBSZWd1bGF0b3IgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X0xETzEJCQkoMHgxMCkKKyNkZWZpbmUgUE04NjA3X0xETzIJCQkoMHgxMSkKKyNkZWZpbmUgUE04NjA3X0xETzMJCQkoMHgxMikKKyNkZWZpbmUgUE04NjA3X0xETzQJCQkoMHgxMykKKyNkZWZpbmUgUE04NjA3X0xETzUJCQkoMHgxNCkKKyNkZWZpbmUgUE04NjA3X0xETzYJCQkoMHgxNSkKKyNkZWZpbmUgUE04NjA3X0xETzcJCQkoMHgxNikKKyNkZWZpbmUgUE04NjA3X0xETzgJCQkoMHgxNykKKyNkZWZpbmUgUE04NjA3X0xETzkJCQkoMHgxOCkKKyNkZWZpbmUgUE04NjA3X0xETzEwCQkJKDB4MTkpCisjZGVmaW5lIFBNODYwN19MRE8xMgkJCSgweDFBKQorI2RlZmluZSBQTTg2MDdfTERPMTQJCQkoMHgxQikKKyNkZWZpbmUgUE04NjA3X1NMRUVQX01PREUxCQkoMHgxQykKKyNkZWZpbmUgUE04NjA3X1NMRUVQX01PREUyCQkoMHgxRCkKKyNkZWZpbmUgUE04NjA3X1NMRUVQX01PREUzCQkoMHgxRSkKKyNkZWZpbmUgUE04NjA3X1NMRUVQX01PREU0CQkoMHgxRikKKyNkZWZpbmUgUE04NjA3X0dPCQkJKDB4MjApCisjZGVmaW5lIFBNODYwN19TTEVFUF9CVUNLMQkJKDB4MjEpCisjZGVmaW5lIFBNODYwN19TTEVFUF9CVUNLMgkJKDB4MjIpCisjZGVmaW5lIFBNODYwN19TTEVFUF9CVUNLMwkJKDB4MjMpCisjZGVmaW5lIFBNODYwN19CVUNLMQkJCSgweDI0KQorI2RlZmluZSBQTTg2MDdfQlVDSzIJCQkoMHgyNSkKKyNkZWZpbmUgUE04NjA3X0JVQ0szCQkJKDB4MjYpCisjZGVmaW5lIFBNODYwN19CVUNLX0NPTlRST0xTCQkoMHgyNykKKyNkZWZpbmUgUE04NjA3X1NVUFBMSUVTX0VOMTEJCSgweDJCKQorI2RlZmluZSBQTTg2MDdfU1VQUExJRVNfRU4xMgkJKDB4MkMpCisjZGVmaW5lIFBNODYwN19HUk9VUDEJCQkoMHgyRCkKKyNkZWZpbmUgUE04NjA3X0dST1VQMgkJCSgweDJFKQorI2RlZmluZSBQTTg2MDdfR1JPVVAzCQkJKDB4MkYpCisjZGVmaW5lIFBNODYwN19HUk9VUDQJCQkoMHgzMCkKKyNkZWZpbmUgUE04NjA3X0dST1VQNQkJCSgweDMxKQorI2RlZmluZSBQTTg2MDdfR1JPVVA2CQkJKDB4MzIpCisjZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjIxCQkoMHgzMykKKyNkZWZpbmUgUE04NjA3X1NVUFBMSUVTX0VOMjIJCSgweDM0KQorCisvKiBSVEMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X1JUQzEJCQkoMHhBMCkKKyNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSMQkJKDB4QTEpCisjZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjIJCSgweEEyKQorI2RlZmluZSBQTTg2MDdfUlRDX0NPVU5URVIzCQkoMHhBMykKKyNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSNAkJKDB4QTQpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMQkJKDB4QTUpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMgkJKDB4QTYpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMwkJKDB4QTcpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFNAkJKDB4QTgpCisjZGVmaW5lIFBNODYwN19SVENfVFJJTTEJCSgweEE5KQorI2RlZmluZSBQTTg2MDdfUlRDX1RSSU0yCQkoMHhBQSkKKyNkZWZpbmUgUE04NjA3X1JUQ19UUklNMwkJKDB4QUIpCisjZGVmaW5lIFBNODYwN19SVENfVFJJTTQJCSgweEFDKQorI2RlZmluZSBQTTg2MDdfUlRDX01JU0MxCQkoMHhBRCkKKyNkZWZpbmUgUE04NjA3X1JUQ19NSVNDMgkJKDB4QUUpCisjZGVmaW5lIFBNODYwN19SVENfTUlTQzMJCSgweEFGKQorCisvKiBNaXNjIFJlZ2lzdGVycyAqLworI2RlZmluZSBQTTg2MDdfQ0hJUF9JRAkJCSgweDAwKQorI2RlZmluZSBQTTg2MDdfTERPMQkJCSgweDEwKQorI2RlZmluZSBQTTg2MDdfRFZDMwkJCSgweDI2KQorI2RlZmluZSBQTTg2MDdfTUlTQzEJCQkoMHg0MCkKKworLyogYml0IGRlZmluaXRpb25zIGZvciBQTTg2MDcgZXZlbnRzICovCisjZGVmaW5lIFBNODYwN19FVkVOVF9PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgUE04NjA3X0VWRU5UX0VYVE9OCQkoMSA8PCAxKQorI2RlZmluZSBQTTg2MDdfRVZFTlRfQ0hHCQkoMSA8PCAyKQorI2RlZmluZSBQTTg2MDdfRVZFTlRfQkFUCQkoMSA8PCAzKQorI2RlZmluZSBQTTg2MDdfRVZFTlRfUlRDCQkoMSA8PCA0KQorI2RlZmluZSBQTTg2MDdfRVZFTlRfQ0MJCQkoMSA8PCA1KQorI2RlZmluZSBQTTg2MDdfRVZFTlRfVkJBVAkJKDEgPDwgOCkKKyNkZWZpbmUgUE04NjA3X0VWRU5UX1ZDSEcJCSgxIDw8IDkpCisjZGVmaW5lIFBNODYwN19FVkVOVF9WU1lTCQkoMSA8PCAxMCkKKyNkZWZpbmUgUE04NjA3X0VWRU5UX1RJTlQJCSgxIDw8IDExKQorI2RlZmluZSBQTTg2MDdfRVZFTlRfR1BBREMwCQkoMSA8PCAxMikKKyNkZWZpbmUgUE04NjA3X0VWRU5UX0dQQURDMQkJKDEgPDwgMTMpCisjZGVmaW5lIFBNODYwN19FVkVOVF9HUEFEQzIJCSgxIDw8IDE0KQorI2RlZmluZSBQTTg2MDdfRVZFTlRfR1BBREMzCQkoMSA8PCAxNSkKKyNkZWZpbmUgUE04NjA3X0VWRU5UX0FVRElPX1NIT1JUCSgxIDw8IDE2KQorI2RlZmluZSBQTTg2MDdfRVZFTlRfUEVOCQkoMSA8PCAxNykKKyNkZWZpbmUgUE04NjA3X0VWRU5UX0hFQURTRVQJCSgxIDw8IDE4KQorI2RlZmluZSBQTTg2MDdfRVZFTlRfSE9PSwkJKDEgPDwgMTkpCisjZGVmaW5lIFBNODYwN19FVkVOVF9NSUNJTgkJKDEgPDwgMjApCisjZGVmaW5lIFBNODYwN19FVkVOVF9DSEdfVElNRU9VVAkoMSA8PCAyMSkKKyNkZWZpbmUgUE04NjA3X0VWRU5UX0NIR19ET05FCQkoMSA8PCAyMikKKyNkZWZpbmUgUE04NjA3X0VWRU5UX0NIR19GQVVMVAkJKDEgPDwgMjMpCisKKy8qIGJpdCBkZWZpbml0aW9ucyBvZiBTdGF0dXMgUXVlcnkgSW50ZXJmYWNlICovCisjZGVmaW5lIFBNODYwN19TVEFUVVNfQ0MJCSgxIDw8IDMpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfUEVOCQkoMSA8PCA0KQorI2RlZmluZSBQTTg2MDdfU1RBVFVTX0hFQURTRVQJCSgxIDw8IDUpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfSE9PSwkJKDEgPDwgNikKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19NSUNJTgkJKDEgPDwgNykKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19PTktFWQkJKDEgPDwgOCkKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19FWFRPTgkJKDEgPDwgOSkKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19DSEcJCSgxIDw8IDEwKQorI2RlZmluZSBQTTg2MDdfU1RBVFVTX0JBVAkJKDEgPDwgMTEpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfVkJVUwkJKDEgPDwgMTIpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfT1YJCSgxIDw8IDEzKQorCisvKiBiaXQgZGVmaW5pdGlvbnMgb2YgQlVDSzMgKi8KKyNkZWZpbmUgUE04NjA3X0JVQ0szX0RPVUJMRQkJKDEgPDwgNikKKworLyogYml0IGRlZmluaXRpb25zIG9mIE1pc2MxICovCisjZGVmaW5lIFBNODYwN19NSVNDMV9QSTJDCQkoMSA8PCAwKQorCisvKiBJbnRlcnJ1cHQgTnVtYmVyIGluIDg4UE04NjA3ICovCitlbnVtIHsKKwlQTTg2MDdfSVJRX09OS0VZID0gMCwKKwlQTTg2MDdfSVJRX0VYVE9OLAorCVBNODYwN19JUlFfQ0hHLAorCVBNODYwN19JUlFfQkFULAorCVBNODYwN19JUlFfUlRDLAorCVBNODYwN19JUlFfVkJBVCA9IDgsCisJUE04NjA3X0lSUV9WQ0hHLAorCVBNODYwN19JUlFfVlNZUywKKwlQTTg2MDdfSVJRX1RJTlQsCisJUE04NjA3X0lSUV9HUEFEQzAsCisJUE04NjA3X0lSUV9HUEFEQzEsCisJUE04NjA3X0lSUV9HUEFEQzIsCisJUE04NjA3X0lSUV9HUEFEQzMsCisJUE04NjA3X0lSUV9BVURJT19TSE9SVCA9IDE2LAorCVBNODYwN19JUlFfUEVOLAorCVBNODYwN19JUlFfSEVBRFNFVCwKKwlQTTg2MDdfSVJRX0hPT0ssCisJUE04NjA3X0lSUV9NSUNJTiwKKwlQTTg2MDdfSVJRX0NIR19GQUlMLAorCVBNODYwN19JUlFfQ0hHX0RPTkUsCisJUE04NjA3X0lSUV9DSEdfRkFVTFQsCit9OworCitlbnVtIHsKKwlQTTg2MDdfQ0hJUF9BMCA9IDB4NDAsCisJUE04NjA3X0NISVBfQTEgPSAweDQxLAorCVBNODYwN19DSElQX0IwID0gMHg0OCwKK307CisKKworc3RydWN0IHBtODYwN19jaGlwIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBtdXRleAkJaW9fbG9jazsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OworCisJaW50ICgqcmVhZCkoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpOworCWludCAoKndyaXRlKShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsIGludCBieXRlcywgdm9pZCAqc3JjKTsKKworCWludAkJCWJ1Y2szX2RvdWJsZTsJLyogRFZDIHJhbXAgc2xvcGUgZG91YmxlICovCisJdW5zaWduZWQgY2hhcgkJY2hpcF9pZDsKKworfTsKKworI2RlZmluZSBQTTg2MDdfTUFYX1JFR1VMQVRPUgkxNQkvKiAzIEJ1Y2tzLCAxMiBMRE9zICovCisKK2VudW0geworCUdJMkNfUE9SVCA9IDAsCisJUEkyQ19QT1JULAorfTsKKworc3RydWN0IHBtODYwN19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJaTJjX3BvcnQ7CS8qIENvbnRyb2xsZWQgYnkgR0kyQyBvciBQSTJDICovCisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnJlZ3VsYXRvcltQTTg2MDdfTUFYX1JFR1VMQVRPUl07Cit9OworCitleHRlcm4gaW50IHBtODYwN19yZWdfcmVhZChzdHJ1Y3QgcG04NjA3X2NoaXAgKiwgaW50KTsKK2V4dGVybiBpbnQgcG04NjA3X3JlZ193cml0ZShzdHJ1Y3QgcG04NjA3X2NoaXAgKiwgaW50LCB1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiBpbnQgcG04NjA3X2J1bGtfcmVhZChzdHJ1Y3QgcG04NjA3X2NoaXAgKiwgaW50LCBpbnQsCisJCQkgICAgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgcG04NjA3X2J1bGtfd3JpdGUoc3RydWN0IHBtODYwN19jaGlwICosIGludCwgaW50LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBwbTg2MDdfc2V0X2JpdHMoc3RydWN0IHBtODYwN19jaGlwICosIGludCwgdW5zaWduZWQgY2hhciwKKwkJCSAgIHVuc2lnbmVkIGNoYXIpOworI2VuZGlmIC8qIF9fTElOVVhfTUZEXzg4UE04NjA3X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FiNDUwMC5oIGIvaW5jbHVkZS9saW51eC9tZmQvYWI0NTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyYTcwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2FiNDUwMC5oCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uCisgKgorICogQXV0aG9yOiBTcmluaWRoaSBLQVNBR0FSIDxzcmluaWRoaS5rYXNhZ2FyQHN0ZXJpY3Nzb24uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEFCNDUwMCBkZXZpY2UgY29yZSBmdW50aW9ucywgZm9yIGNsaWVudCBhY2Nlc3MKKyAqLworI2lmbmRlZiBNRkRfQUI0NTAwX0gKKyNkZWZpbmUgTUZEX0FCNDUwMF9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworLyoKKyAqIEFCNDUwMCBiYW5rIGFkZHJlc3NlcworICovCisjZGVmaW5lIEFCNDUwMF9TWVNfQ1RSTDFfQkxPQ0sJMHgxCisjZGVmaW5lIEFCNDUwMF9TWVNfQ1RSTDJfQkxPQ0sJMHgyCisjZGVmaW5lIEFCNDUwMF9SRUdVX0NUUkwxCTB4MworI2RlZmluZSBBQjQ1MDBfUkVHVV9DVFJMMgkweDQKKyNkZWZpbmUgQUI0NTAwX1VTQgkJMHg1CisjZGVmaW5lIEFCNDUwMF9UVk9VVAkJMHg2CisjZGVmaW5lIEFCNDUwMF9EQkkJCTB4NworI2RlZmluZSBBQjQ1MDBfRUNJX0FWX0FDQwkweDgKKyNkZWZpbmUgQUI0NTAwX1JFU0VSVkVECQkweDkKKyNkZWZpbmUgQUI0NTAwX0dQQURDCQkweEEKKyNkZWZpbmUgQUI0NTAwX0NIQVJHRVIJCTB4QgorI2RlZmluZSBBQjQ1MDBfR0FTX0dBVUdFCTB4QworI2RlZmluZSBBQjQ1MDBfQVVESU8JCTB4RAorI2RlZmluZSBBQjQ1MDBfSU5URVJSVVBUCTB4RQorI2RlZmluZSBBQjQ1MDBfUlRDCQkweEYKKyNkZWZpbmUgQUI0NTAwX01JU0MJCTB4MTAKKyNkZWZpbmUgQUI0NTAwX0RFQlVHCQkweDEyCisjZGVmaW5lIEFCNDUwMF9QUk9EX1RFU1QJMHgxMworI2RlZmluZSBBQjQ1MDBfT1RQX0VNVUwJCTB4MTUKKworLyoKKyAqIFN5c3RlbSBjb250cm9sIDEgcmVnaXN0ZXIgb2Zmc2V0cy4KKyAqIEJhbmsgPSAweDAxCisgKi8KKyNkZWZpbmUgQUI0NTAwX1RVUk5PTl9TVEFUX1JFRwkJMHgwMTAwCisjZGVmaW5lIEFCNDUwMF9SRVNFVF9TVEFUX1JFRwkJMHgwMTAxCisjZGVmaW5lIEFCNDUwMF9QT05LRVkxX1BSRVNTX1NUQVRfUkVHCTB4MDEwMgorCisjZGVmaW5lIEFCNDUwMF9GU01fU1RBVDFfUkVHCQkweDAxNDAKKyNkZWZpbmUgQUI0NTAwX0ZTTV9TVEFUMl9SRUcJCTB4MDE0MQorI2RlZmluZSBBQjQ1MDBfU1lTQ0xLX1JFUV9TVEFUX1JFRwkweDAxNDIKKyNkZWZpbmUgQUI0NTAwX1VTQl9TVEFUMV9SRUcJCTB4MDE0MworI2RlZmluZSBBQjQ1MDBfVVNCX1NUQVQyX1JFRwkJMHgwMTQ0CisjZGVmaW5lIEFCNDUwMF9TVEFUVVNfU1BBUkUxX1JFRwkweDAxNDUKKyNkZWZpbmUgQUI0NTAwX1NUQVRVU19TUEFSRTJfUkVHCTB4MDE0NgorCisjZGVmaW5lIEFCNDUwMF9DVFJMMV9SRUcJCTB4MDE4MAorI2RlZmluZSBBQjQ1MDBfQ1RSTDJfUkVHCQkweDAxODEKKworLyoKKyAqIFN5c3RlbSBjb250cm9sIDIgcmVnaXN0ZXIgb2Zmc2V0cy4KKyAqIGJhbmsgPSAweDAyCisgKi8KKyNkZWZpbmUgQUI0NTAwX0NUUkwzX1JFRwkJMHgwMjAwCisjZGVmaW5lIEFCNDUwMF9NQUlOX1dET0dfQ1RSTF9SRUcJMHgwMjAxCisjZGVmaW5lIEFCNDUwMF9NQUlOX1dET0dfVElNRVJfUkVHCTB4MDIwMgorI2RlZmluZSBBQjQ1MDBfTE9XX0JBVF9SRUcJCTB4MDIwMworI2RlZmluZSBBQjQ1MDBfQkFUVF9PS19SRUcJCTB4MDIwNAorI2RlZmluZSBBQjQ1MDBfU1lTQ0xLX1RJTUVSX1JFRwkJMHgwMjA1CisjZGVmaW5lIEFCNDUwMF9TTVBTQ0xLX0NUUkxfUkVHCQkweDAyMDYKKyNkZWZpbmUgQUI0NTAwX1NNUFNDTEtfU0VMMV9SRUcJCTB4MDIwNworI2RlZmluZSBBQjQ1MDBfU01QU0NMS19TRUwyX1JFRwkJMHgwMjA4CisjZGVmaW5lIEFCNDUwMF9TTVBTQ0xLX1NFTDNfUkVHCQkweDAyMDkKKyNkZWZpbmUgQUI0NTAwX1NZU1VMUENMS19DT05GX1JFRwkweDAyMEEKKyNkZWZpbmUgQUI0NTAwX1NZU1VMUENMS19DVFJMMV9SRUcJMHgwMjBCCisjZGVmaW5lIEFCNDUwMF9TWVNDTEtfQ1RSTF9SRUcJCTB4MDIwQworI2RlZmluZSBBQjQ1MDBfU1lTQ0xLX1JFUTFfVkFMSURfUkVHCTB4MDIwRAorI2RlZmluZSBBQjQ1MDBfU1lTQ0xLX1JFUV9WQUxJRF9SRUcJMHgwMjBFCisjZGVmaW5lIEFCNDUwMF9TWVNDVFJMX1NQQVJFX1JFRwkweDAyMEYKKyNkZWZpbmUgQUI0NTAwX1BBRF9DT05GX1JFRwkJMHgwMjEwCisKKy8qCisgKiBSZWd1IGNvbnRyb2wxIHJlZ2lzdGVyIG9mZnNldHMKKyAqIEJhbmsgPSAweDAzCisgKi8KKyNkZWZpbmUgQUI0NTAwX1JFR1VfU0VSSUFMX0NUUkwxX1JFRwkweDAzMDAKKyNkZWZpbmUgQUI0NTAwX1JFR1VfU0VSSUFMX0NUUkwyX1JFRwkweDAzMDEKKyNkZWZpbmUgQUI0NTAwX1JFR1VfU0VSSUFMX0NUUkwzX1JFRwkweDAzMDIKKyNkZWZpbmUgQUI0NTAwX1JFR1VfUkVRX0NUUkwxX1JFRwkweDAzMDMKKyNkZWZpbmUgQUI0NTAwX1JFR1VfUkVRX0NUUkwyX1JFRwkweDAzMDQKKyNkZWZpbmUgQUI0NTAwX1JFR1VfUkVRX0NUUkwzX1JFRwkweDAzMDUKKyNkZWZpbmUgQUI0NTAwX1JFR1VfUkVRX0NUUkw0X1JFRwkweDAzMDYKKyNkZWZpbmUgQUI0NTAwX1JFR1VfTUlTQzFfUkVHCQkweDAzODAKKyNkZWZpbmUgQUI0NTAwX1JFR1VfT1RHU1VQUExZX0NUUkxfUkVHCTB4MDM4MQorI2RlZmluZSBBQjQ1MDBfUkVHVV9WVVNCX0NUUkxfUkVHCTB4MDM4MgorI2RlZmluZSBBQjQ1MDBfUkVHVV9WQVVESU9fU1VQUExZX1JFRwkweDAzODMKKyNkZWZpbmUgQUI0NTAwX1JFR1VfQ1RSTDFfU1BBUkVfUkVHCTB4MDM4NAorCisvKgorICogUmVndSBjb250cm9sMiBWbW9kIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBBQjQ1MDBfUkVHVV9WTU9EX1JFR1VfUkVHCTB4MDQ0MAorI2RlZmluZSBBQjQ1MDBfUkVHVV9WTU9EX1NFTDFfUkVHCTB4MDQ0MQorI2RlZmluZSBBQjQ1MDBfUkVHVV9WTU9EX1NFTDJfUkVHCTB4MDQ0MgorI2RlZmluZSBBQjQ1MDBfUkVHVV9DVFJMX0RJU0NIX1JFRwkweDA0NDMKKyNkZWZpbmUgQUI0NTAwX1JFR1VfQ1RSTF9ESVNDSDJfUkVHCTB4MDQ0NAorCisvKgorICogVVNCL1VMUEkgcmVnaXN0ZXIgb2Zmc2V0cworICogQmFuayA6IDB4NQorICovCisjZGVmaW5lIEFCNDUwMF9VU0JfTElORV9TVEFUX1JFRwkweDA1ODAKKyNkZWZpbmUgQUI0NTAwX1VTQl9MSU5FX0NUUkwxX1JFRwkweDA1ODEKKyNkZWZpbmUgQUI0NTAwX1VTQl9MSU5FX0NUUkwyX1JFRwkweDA1ODIKKyNkZWZpbmUgQUI0NTAwX1VTQl9MSU5FX0NUUkwzX1JFRwkweDA1ODMKKyNkZWZpbmUgQUI0NTAwX1VTQl9MSU5FX0NUUkw0X1JFRwkweDA1ODQKKyNkZWZpbmUgQUI0NTAwX1VTQl9MSU5FX0NUUkw1X1JFRwkweDA1ODUKKyNkZWZpbmUgQUI0NTAwX1VTQl9PVEdfQ1RSTF9SRUcJCTB4MDU4NworI2RlZmluZSBBQjQ1MDBfVVNCX09UR19TVEFUX1JFRwkJMHgwNTg4CisjZGVmaW5lIEFCNDUwMF9VU0JfT1RHX1NUQVRfUkVHCQkweDA1ODgKKyNkZWZpbmUgQUI0NTAwX1VTQl9DVFJMX1NQQVJFX1JFRwkweDA1ODkKKyNkZWZpbmUgQUI0NTAwX1VTQl9QSFlfQ1RSTF9SRUcJCTB4MDU4QQorCisvKgorICogVFZPVVQgLyBDVFJMIHJlZ2lzdGVyIG9mZnNldHMKKyAqIEJhbmsgOiAweDA2CisgKi8KKyNkZWZpbmUgQUI0NTAwX1RWT1VUX0NUUkxfUkVHCQkweDA2ODAKKworLyoKKyAqIERCSSByZWdpc3RlciBvZmZzZXRzCisgKiBCYW5rIDogMHgwNworICovCisjZGVmaW5lIEFCNDUwMF9EQklfUkVHMV9SRUcJCTB4MDcwMAorI2RlZmluZSBBQjQ1MDBfREJJX1JFRzJfUkVHCQkweDA3MDEKKworLyoKKyAqIEVDSSByZWdzaXRlciBvZmZzZXRzCisgKiBCYW5rIDogMHgwOAorICovCisjZGVmaW5lIEFCNDUwMF9FQ0lfQ1RSTF9SRUcJCTB4MDgwMAorI2RlZmluZSBBQjQ1MDBfRUNJX0hPT0tMRVZFTF9SRUcJMHgwODAxCisjZGVmaW5lIEFCNDUwMF9FQ0lfREFUQU9VVF9SRUcJCTB4MDgwMgorI2RlZmluZSBBQjQ1MDBfRUNJX0RBVEFJTl9SRUcJCTB4MDgwMworCisvKgorICogQVYgQ29ubmVjdG9yIHJlZ2lzdGVyIG9mZnNldHMKKyAqIEJhbmsgOiAweDA4CisgKi8KKyNkZWZpbmUgQUI0NTAwX0FWX0NPTk5fUkVHCQkweDA4NDAKKworLyoKKyAqIEFjY2Vzc29yeSBkZXRlY3Rpb24gcmVnaXN0ZXIgb2Zmc2V0cworICogQmFuayA6IDB4MDgKKyAqLworI2RlZmluZSBBQjQ1MDBfQUNDX0RFVF9EQjFfUkVHCQkweDA4ODAKKyNkZWZpbmUgQUI0NTAwX0FDQ19ERVRfREIyX1JFRwkJMHgwODgxCisKKy8qCisgKiBHUEFEQyByZWdpc3RlciBvZmZzZXRzCisgKiBCYW5rIDogMHgwQQorICovCisjZGVmaW5lIEFCNDUwMF9HUEFEQ19DVFJMMV9SRUcJCTB4MEEwMAorI2RlZmluZSBBQjQ1MDBfR1BBRENfQ1RSTDJfUkVHCQkweDBBMDEKKyNkZWZpbmUgQUI0NTAwX0dQQURDX0NUUkwzX1JFRwkJMHgwQTAyCisjZGVmaW5lIEFCNDUwMF9HUEFEQ19BVVRPX1RJTUVSX1JFRwkweDBBMDMKKyNkZWZpbmUgQUI0NTAwX0dQQURDX1NUQVRfUkVHCQkweDBBMDQKKyNkZWZpbmUgQUI0NTAwX0dQQURDX01BTkRBVEFMX1JFRwkweDBBMDUKKyNkZWZpbmUgQUI0NTAwX0dQQURDX01BTkRBVEFIX1JFRwkweDBBMDYKKyNkZWZpbmUgQUI0NTAwX0dQQURDX0FVVE9EQVRBTF9SRUcJMHgwQTA3CisjZGVmaW5lIEFCNDUwMF9HUEFEQ19BVVRPREFUQUhfUkVHCTB4MEEwOAorI2RlZmluZSBBQjQ1MDBfR1BBRENfTVVYX0NUUkxfUkVHCTB4MEEwOQorCisvKgorICogQ2hhcmdlciAvIHN0YXR1cyByZWdpc3RlciBvZmZmc2V0cworICogQmFuayA6IDB4MEIKKyAqLworI2RlZmluZSBBQjQ1MDBfQ0hfU1RBVFVTMV9SRUcJCTB4MEIwMAorI2RlZmluZSBBQjQ1MDBfQ0hfU1RBVFVTMl9SRUcJCTB4MEIwMQorI2RlZmluZSBBQjQ1MDBfQ0hfVVNCQ0hfU1RBVDFfUkVHCTB4MEIwMgorI2RlZmluZSBBQjQ1MDBfQ0hfVVNCQ0hfU1RBVDJfUkVHCTB4MEIwMworI2RlZmluZSBBQjQ1MDBfQ0hfRlNNX1NUQVRfUkVHCQkweDBCMDQKKyNkZWZpbmUgQUI0NTAwX0NIX1NUQVRfUkVHCQkweDBCMDUKKworLyoKKyAqIENoYXJnZXIgLyBjb250cm9sIHJlZ2lzdGVyIG9mZmZzZXRzCisgKiBCYW5rIDogMHgwQgorICovCisjZGVmaW5lIEFCNDUwMF9DSF9WT0xUX0xWTF9SRUcJCTB4MEI0MAorCisvKgorICogQ2hhcmdlciAvIG1haW4gY29udHJvbCByZWdpc3RlciBvZmZmc2V0cworICogQmFuayA6IDB4MEIKKyAqLworI2RlZmluZSBBQjQ1MDBfTUNIX0NUUkwxCQkweDBCODAKKyNkZWZpbmUgQUI0NTAwX01DSF9DVFJMMgkJMHgwQjgxCisjZGVmaW5lIEFCNDUwMF9NQ0hfSVBUX0NVUkxWTF9SRUcJMHgwQjgyCisjZGVmaW5lIEFCNDUwMF9DSF9XRF9SRUcJCTB4MEI4MworCisvKgorICogQ2hhcmdlciAvIFVTQiBjb250cm9sIHJlZ2lzdGVyIG9mZnNldHMKKyAqIEJhbmsgOiAweDBCCisgKi8KKyNkZWZpbmUgQUI0NTAwX1VTQkNIX0NUUkwxX1JFRwkJMHgwQkMwCisjZGVmaW5lIEFCNDUwMF9VU0JDSF9DVFJMMl9SRUcJCTB4MEJDMQorI2RlZmluZSBBQjQ1MDBfVVNCQ0hfSVBUX0NSTlRMVkxfUkVHCTB4MEJDMgorCisvKgorICogUlRDIGJhbmsgcmVnaXN0ZXIgb2Zmc2V0cworICogQmFuayA6IDB4RgorICovCisjZGVmaW5lIEFCNDUwMF9SVENfU09GRl9TVEFUX1JFRwkweDBGMDAKKyNkZWZpbmUgQUI0NTAwX1JUQ19DQ19DT05GX1JFRwkJMHgwRjAxCisjZGVmaW5lIEFCNDUwMF9SVENfUkVBRF9SRVFfUkVHCQkweDBGMDIKKyNkZWZpbmUgQUI0NTAwX1JUQ19XQVRDSF9UU0VDTUlEX1JFRwkweDBGMDMKKyNkZWZpbmUgQUI0NTAwX1JUQ19XQVRDSF9UU0VDSElfUkVHCTB4MEYwNAorI2RlZmluZSBBQjQ1MDBfUlRDX1dBVENIX1RNSU5fTE9XX1JFRwkweDBGMDUKKyNkZWZpbmUgQUI0NTAwX1JUQ19XQVRDSF9UTUlOX01JRF9SRUcJMHgwRjA2CisjZGVmaW5lIEFCNDUwMF9SVENfV0FUQ0hfVE1JTl9ISV9SRUcJMHgwRjA3CisjZGVmaW5lIEFCNDUwMF9SVENfQUxSTV9NSU5fTE9XX1JFRwkweDBGMDgKKyNkZWZpbmUgQUI0NTAwX1JUQ19BTFJNX01JTl9NSURfUkVHCTB4MEYwOQorI2RlZmluZSBBQjQ1MDBfUlRDX0FMUk1fTUlOX0hJX1JFRwkweDBGMEEKKyNkZWZpbmUgQUI0NTAwX1JUQ19TVEFUX1JFRwkJMHgwRjBCCisjZGVmaW5lIEFCNDUwMF9SVENfQktVUF9DSEdfUkVHCQkweDBGMEMKKyNkZWZpbmUgQUI0NTAwX1JUQ19GT1JDRV9CS1VQX1JFRwkweDBGMEQKKyNkZWZpbmUgQUI0NTAwX1JUQ19DQUxJQl9SRUcJCTB4MEYwRQorI2RlZmluZSBBQjQ1MDBfUlRDX1NXSVRDSF9TVEFUX1JFRwkweDBGMEYKKworLyoKKyAqIFBXTSBPdXQgZ2VuZXJhdG9ycworICogQmFuazogMHgxMAorICovCisjZGVmaW5lIEFCNDUwMF9QV01fT1VUX0NUUkwxX1JFRwkweDEwNjAKKyNkZWZpbmUgQUI0NTAwX1BXTV9PVVRfQ1RSTDJfUkVHCTB4MTA2MQorI2RlZmluZSBBQjQ1MDBfUFdNX09VVF9DVFJMM19SRUcJMHgxMDYyCisjZGVmaW5lIEFCNDUwMF9QV01fT1VUX0NUUkw0X1JFRwkweDEwNjMKKyNkZWZpbmUgQUI0NTAwX1BXTV9PVVRfQ1RSTDVfUkVHCTB4MTA2NAorI2RlZmluZSBBQjQ1MDBfUFdNX09VVF9DVFJMNl9SRUcJMHgxMDY1CisjZGVmaW5lIEFCNDUwMF9QV01fT1VUX0NUUkw3X1JFRwkweDEwNjYKKworI2RlZmluZSBBQjQ1MDBfSTJDX1BBRF9DVFJMX1JFRwkJMHgxMDY3CisjZGVmaW5lIEFCNDUwMF9SRVZfUkVHCQkJMHgxMDgwCisKKy8qKgorICogc3RydWN0IGFiNDUwMAorICogQHNwaTogc3BpIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB0eF9idWY6IHRyYW5zbWl0IGJ1ZmZlcgorICogQHJ4X2J1ZjogcmVjZWl2ZSBidWZmZXIKKyAqIEBsb2NrOiBzeW5jIHByaW1pdGl2ZQorICovCitzdHJ1Y3QgYWI0NTAwIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCXVuc2lnbmVkIGxvbmcJCXR4X2J1Zls0XTsKKwl1bnNpZ25lZCBsb25nCQlyeF9idWZbNF07CisJc3RydWN0IG11dGV4CQlsb2NrOworfTsKKworaW50IGFiNDUwMF93cml0ZShzdHJ1Y3QgYWI0NTAwICphYjQ1MDAsIHVuc2lnbmVkIGNoYXIgYmxvY2ssCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKTsKK2ludCBhYjQ1MDBfcmVhZChzdHJ1Y3QgYWI0NTAwICphYjQ1MDAsIHVuc2lnbmVkIGNoYXIgYmxvY2ssCisJCXVuc2lnbmVkIGxvbmcgYWRkcik7CisKKyNlbmRpZiAvKiBNRkRfQUI0NTAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FkcDU1MjAuaCBiL2luY2x1ZGUvbGludXgvbWZkL2FkcDU1MjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzM3NTU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYWRwNTUyMC5oCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogRGVmaW5pdGlvbnMgYW5kIHBsYXRmb3JtIGRhdGEgZm9yIEFuYWxvZyBEZXZpY2VzCisgKiBBRFA1NTIwL0FEUDU1MDEgTUZEIFBNSUNzIChCYWNrbGlnaHQsIExFRCwgR1BJTyBhbmQgS2V5cykKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKworI2lmbmRlZiBfX0xJTlVYX01GRF9BRFA1NTIwX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfQURQNTUyMF9ICisKKyNkZWZpbmUgSURfQURQNTUyMAkJNTUyMAorI2RlZmluZSBJRF9BRFA1NTAxCQk1NTAxCisKKy8qCisgKiBBRFA1NTIwL0FEUDU1MDEgUmVnaXN0ZXIgTWFwCisgKi8KKworI2RlZmluZSBBRFA1NTIwX01PREVfU1RBVFVTIAkJMHgwMAorI2RlZmluZSBBRFA1NTIwX0lOVEVSUlVQVF9FTkFCTEUgCTB4MDEKKyNkZWZpbmUgQURQNTUyMF9CTF9DT05UUk9MIAkJMHgwMgorI2RlZmluZSBBRFA1NTIwX0JMX1RJTUUgCQkweDAzCisjZGVmaW5lIEFEUDU1MjBfQkxfRkFERSAJCTB4MDQKKyNkZWZpbmUgQURQNTUyMF9EQVlMSUdIVF9NQVggCQkweDA1CisjZGVmaW5lIEFEUDU1MjBfREFZTElHSFRfRElNIAkJMHgwNgorI2RlZmluZSBBRFA1NTIwX09GRklDRV9NQVggCQkweDA3CisjZGVmaW5lIEFEUDU1MjBfT0ZGSUNFX0RJTSAJCTB4MDgKKyNkZWZpbmUgQURQNTUyMF9EQVJLX01BWCAJCTB4MDkKKyNkZWZpbmUgQURQNTUyMF9EQVJLX0RJTSAJCTB4MEEKKyNkZWZpbmUgQURQNTUyMF9CTF9WQUxVRSAJCTB4MEIKKyNkZWZpbmUgQURQNTUyMF9BTFNfQ01QUl9DRkcgCQkweDBDCisjZGVmaW5lIEFEUDU1MjBfTDJfVFJJUCAJCTB4MEQKKyNkZWZpbmUgQURQNTUyMF9MMl9IWVMgCQkJMHgwRQorI2RlZmluZSBBRFA1NTIwX0wzX1RSSVAgCQkweDBGCisjZGVmaW5lIEFEUDU1MjBfTDNfSFlTIAkJCTB4MTAKKyNkZWZpbmUgQURQNTUyMF9MRURfQ09OVFJPTCAJCTB4MTEKKyNkZWZpbmUgQURQNTUyMF9MRURfVElNRSAJCTB4MTIKKyNkZWZpbmUgQURQNTUyMF9MRURfRkFERSAJCTB4MTMKKyNkZWZpbmUgQURQNTUyMF9MRUQxX0NVUlJFTlQgCQkweDE0CisjZGVmaW5lIEFEUDU1MjBfTEVEMl9DVVJSRU5UIAkJMHgxNQorI2RlZmluZSBBRFA1NTIwX0xFRDNfQ1VSUkVOVCAJCTB4MTYKKworLyoKKyAqIEFEUDU1MjAgUmVnaXN0ZXIgTWFwCisgKi8KKworI2RlZmluZSBBRFA1NTIwX0dQSU9fQ0ZHXzEgCQkweDE3CisjZGVmaW5lIEFEUDU1MjBfR1BJT19DRkdfMiAJCTB4MTgKKyNkZWZpbmUgQURQNTUyMF9HUElPX0lOIAkJMHgxOQorI2RlZmluZSBBRFA1NTIwX0dQSU9fT1VUIAkJMHgxQQorI2RlZmluZSBBRFA1NTIwX0dQSU9fSU5UX0VOIAkJMHgxQgorI2RlZmluZSBBRFA1NTIwX0dQSU9fSU5UX1NUQVQgCQkweDFDCisjZGVmaW5lIEFEUDU1MjBfR1BJT19JTlRfTFZMIAkJMHgxRAorI2RlZmluZSBBRFA1NTIwX0dQSU9fREVCT1VOQ0UgCQkweDFFCisjZGVmaW5lIEFEUDU1MjBfR1BJT19QVUxMVVAgCQkweDFGCisjZGVmaW5lIEFEUDU1MjBfS1BfSU5UX1NUQVRfMSAJCTB4MjAKKyNkZWZpbmUgQURQNTUyMF9LUF9JTlRfU1RBVF8yIAkJMHgyMQorI2RlZmluZSBBRFA1NTIwX0tSX0lOVF9TVEFUXzEgCQkweDIyCisjZGVmaW5lIEFEUDU1MjBfS1JfSU5UX1NUQVRfMiAJCTB4MjMKKyNkZWZpbmUgQURQNTUyMF9LRVlfU1RBVF8xIAkJMHgyNAorI2RlZmluZSBBRFA1NTIwX0tFWV9TVEFUXzIgCQkweDI1CisKKy8qCisgKiBNT0RFX1NUQVRVUyBiaXRzCisgKi8KKworI2RlZmluZSBBRFA1NTIwX25TVE5CWQkJKDEgPDwgNykKKyNkZWZpbmUgQURQNTUyMF9CTF9FTiAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgQURQNTUyMF9ESU1fRU4gICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQURQNTUyMF9PVlBfSU5UICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQURQNTUyMF9DTVBSX0lOVCAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQURQNTUyMF9HUElfSU5UICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQURQNTUyMF9LUl9JTlQgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQURQNTUyMF9LUF9JTlQgICAgICAgICAgKDEgPDwgMCkKKworLyoKKyAqIElOVEVSUlVQVF9FTkFCTEUgYml0cworICovCisKKyNkZWZpbmUgQURQNTUyMF9BVVRPX0xEX0VOICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQURQNTUyMF9DTVBSX0lFTiAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQURQNTUyMF9PVlBfSUVOICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQURQNTUyMF9LUl9JRU4gICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQURQNTUyMF9LUF9JRU4gICAgICAgICAgKDEgPDwgMCkKKworLyoKKyAqIEJMX0NPTlRST0wgYml0cworICovCisKKyNkZWZpbmUgQURQNTUyMF9CTF9MVkwgICAgICAgICAgKCh4KSA8PCA1KQorI2RlZmluZSBBRFA1NTIwX0JMX0xBVyAgICAgICAgICAoKHgpIDw8IDQpCisjZGVmaW5lIEFEUDU1MjBfQkxfQVVUT19BREogICAgICgxIDw8IDMpCisjZGVmaW5lIEFEUDU1MjBfT1ZQX0VOICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIEFEUDU1MjBfRk9WUiAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIEFEUDU1MjBfS1BfQkxfRU4gICAgICAgICgxIDw8IDApCisKKy8qCisgKiBBTFNfQ01QUl9DRkcgYml0cworICovCisKKyNkZWZpbmUgQURQNTUyMF9MM19PVVQJCSgxIDw8IDMpCisjZGVmaW5lIEFEUDU1MjBfTDJfT1VUCQkoMSA8PCAyKQorI2RlZmluZSBBRFA1NTIwX0wzX0VOCQkoMSA8PCAxKQorCisjZGVmaW5lIEFEUDUwMjBfTUFYX0JSSUdIVE5FU1MJMHg3RgorCisjZGVmaW5lIEZBREVfVkFMKGluLCBvdXQpCSgoMHhGICYgKGluKSkgfCAoKDB4RiAmIChvdXQpKSA8PCA0KSkKKyNkZWZpbmUgQkxfQ1RSTF9WQUwobGF3LCBhdXRvKQkoKCgxICYgKGF1dG8pKSA8PCAzKSB8ICgoMHgzICYgKGxhdykpIDw8IDQpKQorI2RlZmluZSBBTFNfQ01QUl9DRkdfVkFMKGZpbHQsIGwzX2VuKQkoKCgweDcgJiBmaWx0KSA8PCA1KSB8IGwzX2VuKQorCisvKgorICogTEVEcyBzdWJkZXZpY2UgYml0cyBhbmQgbWFza3MKKyAqLworCisjZGVmaW5lIEFEUDU1MjBfMDFfTUFYTEVEUyAzCisKKyNkZWZpbmUgQURQNTUyMF9GTEFHX0xFRF9NQVNLIAkJMHgzCisjZGVmaW5lIEFEUDU1MjBfRkxBR19PRkZUX1NISUZUIAk4CisjZGVmaW5lIEFEUDU1MjBfRkxBR19PRkZUX01BU0sgCQkweDMKKworI2RlZmluZSBBRFA1NTIwX1IzX01PREUJCSgxIDw8IDUpCisjZGVmaW5lIEFEUDU1MjBfQzNfTU9ERQkJKDEgPDwgNCkKKyNkZWZpbmUgQURQNTUyMF9MRURfTEFXCQkoMSA8PCAzKQorI2RlZmluZSBBRFA1NTIwX0xFRDNfRU4JCSgxIDw8IDIpCisjZGVmaW5lIEFEUDU1MjBfTEVEMl9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgQURQNTUyMF9MRUQxX0VOCQkoMSA8PCAwKQorCisvKgorICogR1BJTyBzdWJkZXZpY2UgYml0cyBhbmQgbWFza3MKKyAqLworCisjZGVmaW5lIEFEUDU1MjBfTUFYR1BJT1MJOAorCisjZGVmaW5lIEFEUDU1MjBfR1BJT19DMwkJKDEgPDwgNykJLyogTEVEMiBvciBHUElPNyBha2EgQzMgKi8KKyNkZWZpbmUgQURQNTUyMF9HUElPX0MyCQkoMSA8PCA2KQorI2RlZmluZSBBRFA1NTIwX0dQSU9fQzEJCSgxIDw8IDUpCisjZGVmaW5lIEFEUDU1MjBfR1BJT19DMAkJKDEgPDwgNCkKKyNkZWZpbmUgQURQNTUyMF9HUElPX1IzCQkoMSA8PCAzKQkvKiBMRUQzIG9yIEdQSU8zIGFrYSBSMyAqLworI2RlZmluZSBBRFA1NTIwX0dQSU9fUjIJCSgxIDw8IDIpCisjZGVmaW5lIEFEUDU1MjBfR1BJT19SMQkJKDEgPDwgMSkKKyNkZWZpbmUgQURQNTUyMF9HUElPX1IwCQkoMSA8PCAwKQorCitzdHJ1Y3QgYWRwNTUyMF9ncGlvX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGdwaW9fc3RhcnQ7CisJdTggZ3Bpb19lbl9tYXNrOworCXU4IGdwaW9fcHVsbHVwX21hc2s7Cit9OworCisvKgorICogS2V5cGFkIHN1YmRldmljZSBiaXRzIGFuZCBtYXNrcworICovCisKKyNkZWZpbmUgQURQNTUyMF9NQVhLRVlTCTE2CisKKyNkZWZpbmUgQURQNTUyMF9DT0xfQzMgCQkoMSA8PCA3KQkvKiBMRUQyIG9yIEdQSU83IGFrYSBDMyAqLworI2RlZmluZSBBRFA1NTIwX0NPTF9DMgkJKDEgPDwgNikKKyNkZWZpbmUgQURQNTUyMF9DT0xfQzEJCSgxIDw8IDUpCisjZGVmaW5lIEFEUDU1MjBfQ09MX0MwCQkoMSA8PCA0KQorI2RlZmluZSBBRFA1NTIwX1JPV19SMwkJKDEgPDwgMykJLyogTEVEMyBvciBHUElPMyBha2EgUjMgKi8KKyNkZWZpbmUgQURQNTUyMF9ST1dfUjIJCSgxIDw8IDIpCisjZGVmaW5lIEFEUDU1MjBfUk9XX1IxCQkoMSA8PCAxKQorI2RlZmluZSBBRFA1NTIwX1JPV19SMAkJKDEgPDwgMCkKKworI2RlZmluZSBBRFA1NTIwX0tFWShyb3csIGNvbCkgKGNvbCArIHJvdyAqIDQpCisjZGVmaW5lIEFEUDU1MjBfS0VZTUFQU0laRQlBRFA1NTIwX01BWEtFWVMKKworc3RydWN0IGFkcDU1MjBfa2V5c19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgcm93c19lbl9tYXNrOwkJLyogTnVtYmVyIG9mIHJvd3MgKi8KKwlpbnQgY29sc19lbl9tYXNrOwkJLyogTnVtYmVyIG9mIGNvbHVtbnMgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqa2V5bWFwOwkvKiBQb2ludGVyIHRvIGtleW1hcCAqLworCXVuc2lnbmVkIHNob3J0IGtleW1hcHNpemU7CS8qIEtleW1hcCBzaXplICovCisJdW5zaWduZWQgcmVwZWF0OjE7CQkvKiBFbmFibGUga2V5IHJlcGVhdCAqLworfTsKKworCisvKgorICogTEVEcyBzdWJkZXZpY2UgcGxhdGZvcm0gZGF0YQorICovCisKKyNkZWZpbmUgRkxBR19JRF9BRFA1NTIwX0xFRDFfQURQNTUwMV9MRUQwIAkxCS8qIEFEUDU1MjAgUElOIElMRUQgKi8KKyNkZWZpbmUgRkxBR19JRF9BRFA1NTIwX0xFRDJfQURQNTUwMV9MRUQxIAkyCS8qIEFEUDU1MjAgUElOIEMzICovCisjZGVmaW5lIEZMQUdfSURfQURQNTUyMF9MRUQzX0FEUDU1MDFfTEVEMiAJMwkvKiBBRFA1NTIwIFBJTiBSMyAqLworCisjZGVmaW5lIEFEUDU1MjBfTEVEX0RJU19CTElOSwkoMCA8PCBBRFA1NTIwX0ZMQUdfT0ZGVF9TSElGVCkKKyNkZWZpbmUgQURQNTUyMF9MRURfT0ZGVF82MDBtcwkoMSA8PCBBRFA1NTIwX0ZMQUdfT0ZGVF9TSElGVCkKKyNkZWZpbmUgQURQNTUyMF9MRURfT0ZGVF84MDBtcwkoMiA8PCBBRFA1NTIwX0ZMQUdfT0ZGVF9TSElGVCkKKyNkZWZpbmUgQURQNTUyMF9MRURfT0ZGVF8xMjAwbXMJKDMgPDwgQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpCisKKyNkZWZpbmUgQURQNTUyMF9MRURfT05UXzIwMG1zCTAKKyNkZWZpbmUgQURQNTUyMF9MRURfT05UXzYwMG1zCTEKKyNkZWZpbmUgQURQNTUyMF9MRURfT05UXzgwMG1zCTIKKyNkZWZpbmUgQURQNTUyMF9MRURfT05UXzEyMDBtcwkzCisKK3N0cnVjdCBhZHA1NTIwX2xlZHNfcGxhdGZvcm1fZGF0YSB7CisJaW50IG51bV9sZWRzOworCXN0cnVjdCBsZWRfaW5mbwkqbGVkczsKKwl1OCBmYWRlX2luOwkJLyogQmFja2xpZ2h0IEZhZGUtSW4gVGltZXIgKi8KKwl1OCBmYWRlX291dDsJCS8qIEJhY2tsaWdodCBGYWRlLU91dCBUaW1lciAqLworCXU4IGxlZF9vbl90aW1lOworfTsKKworLyoKKyAqIEJhY2tsaWdodCBzdWJkZXZpY2UgcGxhdGZvcm0gZGF0YQorICovCisKKyNkZWZpbmUgQURQNTUyMF9GQURFX1RfRElTCTAJLyogRmFkZSBUaW1lciBEaXNhYmxlZCAqLworI2RlZmluZSBBRFA1NTIwX0ZBREVfVF8zMDBtcwkxCS8qIDAuMyBTZWMgKi8KKyNkZWZpbmUgQURQNTUyMF9GQURFX1RfNjAwbXMJMgorI2RlZmluZSBBRFA1NTIwX0ZBREVfVF85MDBtcwkzCisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzEyMDBtcwk0CisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzE1MDBtcwk1CisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzE4MDBtcwk2CisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzIxMDBtcwk3CisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzI0MDBtcwk4CisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzI3MDBtcwk5CisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzMwMDBtcwkxMAorI2RlZmluZSBBRFA1NTIwX0ZBREVfVF8zNTAwbXMJMTEKKyNkZWZpbmUgQURQNTUyMF9GQURFX1RfNDAwMG1zCTEyCisjZGVmaW5lIEFEUDU1MjBfRkFERV9UXzQ1MDBtcwkxMworI2RlZmluZSBBRFA1NTIwX0ZBREVfVF81MDAwbXMJMTQKKyNkZWZpbmUgQURQNTUyMF9GQURFX1RfNTUwMG1zCTE1CS8qIDUuNSBTZWMgKi8KKworI2RlZmluZSBBRFA1NTIwX0JMX0xBV19MSU5FQVIgCTAKKyNkZWZpbmUgQURQNTUyMF9CTF9MQVdfU1FVQVJFIAkxCisjZGVmaW5lIEFEUDU1MjBfQkxfTEFXX0NVQklDMSAJMgorI2RlZmluZSBBRFA1NTIwX0JMX0xBV19DVUJJQzIgCTMKKworI2RlZmluZSBBRFA1NTIwX0JMX0FNQkxfRklMVF84MG1zIAkwCS8qIExpZ2h0IHNlbnNvciBmaWx0ZXIgdGltZSAqLworI2RlZmluZSBBRFA1NTIwX0JMX0FNQkxfRklMVF8xNjBtcyAJMQorI2RlZmluZSBBRFA1NTIwX0JMX0FNQkxfRklMVF8zMjBtcyAJMgorI2RlZmluZSBBRFA1NTIwX0JMX0FNQkxfRklMVF82NDBtcyAJMworI2RlZmluZSBBRFA1NTIwX0JMX0FNQkxfRklMVF8xMjgwbXMgCTQKKyNkZWZpbmUgQURQNTUyMF9CTF9BTUJMX0ZJTFRfMjU2MG1zIAk1CisjZGVmaW5lIEFEUDU1MjBfQkxfQU1CTF9GSUxUXzUxMjBtcyAJNgorI2RlZmluZSBBRFA1NTIwX0JMX0FNQkxfRklMVF8xMDI0MG1zIAk3CS8qIDEwLjI0IHNlYyAqLworCisJLyoKKwkgKiBCbGFja2xpZ2h0IGN1cnJlbnQgMC4uMzBtQQorCSAqLworI2RlZmluZSBBRFA1NTIwX0JMX0NVUl9tQShJKQkJKChJICogMTI3KSAvIDMwKQorCisJLyoKKwkgKiBMMiBjb21wYXJhdG9yIGN1cnJlbnQgMC4uMTAwMHVBCisJICovCisjZGVmaW5lIEFEUDU1MjBfTDJfQ09NUF9DVVJSX3VBKEkpCSgoSSAqIDI1NSkgLyAxMDAwKQorCisJLyoKKwkgKiBMMyBjb21wYXJhdG9yIGN1cnJlbnQgMC4uMTI3dUEKKwkgKi8KKyNkZWZpbmUgQURQNTUyMF9MM19DT01QX0NVUlJfdUEoSSkJKChJICogMjU1KSAvIDEyNykKKworc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgeworCXU4IGZhZGVfaW47CQkvKiBCYWNrbGlnaHQgRmFkZS1JbiBUaW1lciAqLworCXU4IGZhZGVfb3V0OwkJLyogQmFja2xpZ2h0IEZhZGUtT3V0IFRpbWVyICovCisJdTggZmFkZV9sZWRfbGF3OwkvKiBmYWRlLW9uL2ZhZGUtb2ZmIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljICovCisKKwl1OCBlbl9hbWJsX3NlbnM7CS8qIDEgPSBlbmFibGUgYW1iaWVudCBsaWdodCBzZW5zb3IgKi8KKwl1OCBhYm1sX2ZpbHQ7CQkvKiBMaWdodCBzZW5zb3IgZmlsdGVyIHRpbWUgKi8KKwl1OCBsMV9kYXlsaWdodF9tYXg7CS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDFfZGF5bGlnaHRfZGltOwkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGwyX29mZmljZV9tYXg7CS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDJfb2ZmaWNlX2RpbTsJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsM19kYXJrX21heDsJCS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDNfZGFya19kaW07CQkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGwyX3RyaXA7CQkvKiB1c2UgTDJfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAxMDAwIHVBICovCisJdTggbDJfaHlzdDsJCS8qIHVzZSBMMl9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDEwMDAgdUEgKi8KKwl1OCBsM190cmlwOwkJLyogdXNlIEwzX0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gMTI3IHVBICovCisJdTggbDNfaHlzdDsJCS8qIHVzZSBMM19DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDEyNyB1QSAqLworfTsKKworLyoKKyAqIE1GRCBjaGlwIHBsYXRmb3JtIGRhdGEKKyAqLworCitzdHJ1Y3QgYWRwNTUyMF9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgYWRwNTUyMF9rZXlzX3BsYXRmb3JtX2RhdGEgKmtleXM7CisJc3RydWN0IGFkcDU1MjBfZ3Bpb19wbGF0Zm9ybV9kYXRhICpncGlvOworCXN0cnVjdCBhZHA1NTIwX2xlZHNfcGxhdGZvcm1fZGF0YSAqbGVkczsKKwlzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqYmFja2xpZ2h0OworfTsKKworLyoKKyAqIE1GRCBjaGlwIGZ1bmN0aW9ucworICovCisKK2V4dGVybiBpbnQgYWRwNTUyMF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCAqdmFsKTsKK2V4dGVybiBpbnQgYWRwNTUyMF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHU4IHZhbCk7CitleHRlcm4gaW50IGFkcDU1MjBfY2xyX2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKTsKK2V4dGVybiBpbnQgYWRwNTUyMF9zZXRfYml0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgYml0X21hc2spOworCitleHRlcm4gaW50IGFkcDU1MjBfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisKK2V4dGVybiBpbnQgYWRwNTUyMF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX01GRF9BRFA1NTIwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2V6eC1wY2FwLmggYi9pbmNsdWRlL2xpbnV4L21mZC9lengtcGNhcC5oCmluZGV4IDM0MDIwNDJkLi40MGMzNzIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvZXp4LXBjYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9lengtcGNhcC5oCkBAIC0yMzEsOSArMjMxLDYgQEAKICNkZWZpbmUgUENBUF9MRURfNE1BCQkxCiAjZGVmaW5lIFBDQVBfTEVEXzVNQQkJMgogI2RlZmluZSBQQ0FQX0xFRF85TUEJCTMKLSNkZWZpbmUgUENBUF9MRURfR1BJT19WQUxfTUFTSwkweDAwZmZmZmZmCi0jZGVmaW5lIFBDQVBfTEVEX0dQSU9fRU4JMHgwMTAwMDAwMAotI2RlZmluZSBQQ0FQX0xFRF9HUElPX0lOVkVSVAkweDAyMDAwMDAwCiAjZGVmaW5lIFBDQVBfTEVEX1RfTUFTSwkJMHhmCiAjZGVmaW5lIFBDQVBfTEVEX0NfTUFTSwkJMHgzCiAjZGVmaW5lIFBDQVBfQkxfTUFTSwkJMHgxZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My1wcml2YXRlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLXByaXZhdGUuaAppbmRleCA0N2U2OThjLi45NWNmOTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLXByaXZhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLXByaXZhdGUuaApAQCAtMjQsNTIgKzI0LDIzIEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLXN0cnVjdCBtYzEzNzgzX2lycSB7Ci0Jdm9pZCAoKmhhbmRsZXIpKGludCwgdm9pZCAqKTsKLQl2b2lkICpkYXRhOwotfTsKLQotI2RlZmluZSBNQzEzNzgzX05VTV9JUlEJCTIKLSNkZWZpbmUgTUMxMzc4M19JUlFfVFMJCTAKLSNkZWZpbmUgTUMxMzc4M19JUlFfUkVHVUxBVE9SCTEKLQotI2RlZmluZSBNQzEzNzgzX0FEQ19NT0RFX1RTCQkxCi0jZGVmaW5lIE1DMTM3ODNfQURDX01PREVfU0lOR0xFX0NIQU4JMgotI2RlZmluZSBNQzEzNzgzX0FEQ19NT0RFX01VTFRfQ0hBTgkzCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIHN0cnVjdCBtYzEzNzgzIHsKLQlpbnQgcmV2aXNpb247Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGlfZGV2aWNlOwotCi0JaW50ICgqcmVhZF9kZXYpKHZvaWQgKmRhdGEsIGNoYXIgcmVnLCBpbnQgY291bnQsIHUzMiAqZHN0KTsKLQlpbnQgKCp3cml0ZV9kZXYpKHZvaWQgKmRhdGEsIGNoYXIgcmVnLCBpbnQgY291bnQsIGNvbnN0IHUzMiAqc3JjKTsKLQotCXN0cnVjdCBtdXRleCBpb19sb2NrOwotCXZvaWQgKmlvX2RhdGE7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaWRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlpbnQgaXJxOwotCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgZmxhZ3M7CiAKLQlzdHJ1Y3QgbWMxMzc4M19pcnEgaXJxX2hhbmRsZXJbTUMxMzc4M19OVU1fSVJRXTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3QgY29tcGxldGlvbiBhZGNfZG9uZTsKLQl1bnNpZ25lZCBpbnQgdHNfYWN0aXZlOwotCXN0cnVjdCBtdXRleCBhZGNfY29udl9sb2NrOworCWlycV9oYW5kbGVyX3QgaXJxaGFuZGxlcltNQzEzNzgzX05VTV9JUlFdOworCXZvaWQgKmlycWRhdGFbTUMxMzc4M19OVU1fSVJRXTsKIAorCS8qIFhYWCB0aGVzZSBzaG91bGQgZ28gYXMgcGxhdGZvcm1kYXRhIHRvIHRoZSByZWd1bGF0b3Igc3ViZGV2aWNlICovCiAJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSAqcmVndWxhdG9yczsKIAlpbnQgbnVtX3JlZ3VsYXRvcnM7CiB9OwogCi1pbnQgbWMxMzc4M19yZWdfcmVhZChzdHJ1Y3QgbWMxMzc4MyAqLCBpbnQgcmVnX251bSwgdTMyICopOwotaW50IG1jMTM3ODNfcmVnX3dyaXRlKHN0cnVjdCBtYzEzNzgzICosIGludCwgdTMyKTsKLWludCBtYzEzNzgzX3NldF9iaXRzKHN0cnVjdCBtYzEzNzgzICosIGludCwgdTMyLCB1MzIpOwotaW50IG1jMTM3ODNfZnJlZV9pcnEoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOwotaW50IG1jMTM3ODNfcmVnaXN0ZXJfaXJxKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAotCQl2b2lkICgqaGFuZGxlcikgKGludCwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7Ci0KICNkZWZpbmUgTUMxMzc4M19SRUdfSU5URVJSVVBUX1NUQVRVU18wCQkgMAogI2RlZmluZSBNQzEzNzgzX1JFR19JTlRFUlJVUFRfTUFTS18wCQkgMQogI2RlZmluZSBNQzEzNzgzX1JFR19JTlRFUlJVUFRfU0VOU0VfMAkJIDIKQEAgLTEzNiw1NSArMTA3LDYgQEAKICNkZWZpbmUgTUMxMzc4M19SRUdfVEVTVF8zCQkJNjMKICNkZWZpbmUgTUMxMzc4M19SRUdfTkIJCQkJNjQKIAotCi0vKgotICogSW50ZXJydXB0IFN0YXR1cwotICovCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfQURDRE9ORUkJKDEgPDwgMCkKLSNkZWZpbmUgTUMxMzc4M19JTlRfU1RBVF9BRENCSVNET05FSQkoMSA8PCAxKQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX1RTSQkJKDEgPDwgMikKLSNkZWZpbmUgTUMxMzc4M19JTlRfU1RBVF9XSElHSEkJCSgxIDw8IDMpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfV0xPV0kJCSgxIDw8IDQpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfQ0hHREVUSQkoMSA8PCA2KQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX0NIR09WSQkJKDEgPDwgNykKLSNkZWZpbmUgTUMxMzc4M19JTlRfU1RBVF9DSEdSRVZJCSgxIDw8IDgpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfQ0hHU0hPUlRJCSgxIDw8IDkpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfQ0NDVkkJCSgxIDw8IDEwKQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX0NIR0NVUlJJCSgxIDw8IDExKQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX0JQT05JCQkoMSA8PCAxMikKLSNkZWZpbmUgTUMxMzc4M19JTlRfU1RBVF9MT0JBVExJCSgxIDw8IDEzKQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX0xPQkFUSEkJKDEgPDwgMTQpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfVURQSQkJKDEgPDwgMTUpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfVVNCSQkJKDEgPDwgMTYpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfSURJCQkoMSA8PCAxOSkKLSNkZWZpbmUgTUMxMzc4M19JTlRfU1RBVF9VbnVzZWQJCSgxIDw8IDIwKQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX1NFMUkJCSgxIDw8IDIxKQotI2RlZmluZSBNQzEzNzgzX0lOVF9TVEFUX0NLREVUSQkJKDEgPDwgMjIpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX1NUQVRfVURNSQkJKDEgPDwgMjMpCi0KLS8qCi0gKiBJbnRlcnJ1cHQgTWFzawotICovCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfQURDRE9ORU0JKDEgPDwgMCkKLSNkZWZpbmUgTUMxMzc4M19JTlRfTUFTS19BRENCSVNET05FTQkoMSA8PCAxKQotI2RlZmluZSBNQzEzNzgzX0lOVF9NQVNLX1RTTQkJKDEgPDwgMikKLSNkZWZpbmUgTUMxMzc4M19JTlRfTUFTS19XSElHSE0JCSgxIDw8IDMpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfV0xPV00JCSgxIDw8IDQpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfQ0hHREVUTQkoMSA8PCA2KQotI2RlZmluZSBNQzEzNzgzX0lOVF9NQVNLX0NIR09WTQkJKDEgPDwgNykKLSNkZWZpbmUgTUMxMzc4M19JTlRfTUFTS19DSEdSRVZNCSgxIDw8IDgpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfQ0hHU0hPUlRNCSgxIDw8IDkpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfQ0NDVk0JCSgxIDw8IDEwKQotI2RlZmluZSBNQzEzNzgzX0lOVF9NQVNLX0NIR0NVUlJNCSgxIDw8IDExKQotI2RlZmluZSBNQzEzNzgzX0lOVF9NQVNLX0JQT05NCQkoMSA8PCAxMikKLSNkZWZpbmUgTUMxMzc4M19JTlRfTUFTS19MT0JBVExNCSgxIDw8IDEzKQotI2RlZmluZSBNQzEzNzgzX0lOVF9NQVNLX0xPQkFUSE0JKDEgPDwgMTQpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfVURQTQkJKDEgPDwgMTUpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfVVNCTQkJKDEgPDwgMTYpCi0jZGVmaW5lIE1DMTM3ODNfSU5UX01BU0tfSURNCQkoMSA8PCAxOSkKLSNkZWZpbmUgTUMxMzc4M19JTlRfTUFTS19TRTFNCQkoMSA8PCAyMSkKLSNkZWZpbmUgTUMxMzc4M19JTlRfTUFTS19DS0RFVE0JCSgxIDw8IDIyKQotCiAvKgogICogUmVnIFJlZ3VsYXRvciBNb2RlIDAKICAqLwpAQCAtMjg0LDExMyArMjA2LDE1IEBACiAjZGVmaW5lIE1DMTM3ODNfU1dDVFJMX1NXM19TVEJZCQkoMSA8PCAyMSkKICNkZWZpbmUgTUMxMzc4M19TV0NUUkxfU1czX01PREUJCSgxIDw8IDIyKQogCi0vKgotICogQURDL1RvdWNoCi0gKi8KLSNkZWZpbmUgTUMxMzc4M19BREMwX0xJQ0VMTENPTgkJKDEgPDwgMCkKLSNkZWZpbmUgTUMxMzc4M19BREMwX0NIUkdJQ09OCQkoMSA8PCAxKQotI2RlZmluZSBNQzEzNzgzX0FEQzBfQkFUSUNPTgkJKDEgPDwgMikKLSNkZWZpbmUgTUMxMzc4M19BREMwX1JUSEVOIAkJKDEgPDwgMykKLSNkZWZpbmUgTUMxMzc4M19BREMwX0RUSEVOCQkoMSA8PCA0KQotI2RlZmluZSBNQzEzNzgzX0FEQzBfVUlERU4JCSgxIDw8IDUpCi0jZGVmaW5lIE1DMTM3ODNfQURDMF9BRE9VVEVOIAkJKDEgPDwgNikKLSNkZWZpbmUgTUMxMzc4M19BREMwX0FET1VUUEVSCQkoMSA8PCA3KQotI2RlZmluZSBNQzEzNzgzX0FEQzBfQURSRUZFTgkJKDEgPDwgMTApCi0jZGVmaW5lIE1DMTM3ODNfQURDMF9BRFJFRk1PREUJCSgxIDw8IDExKQotI2RlZmluZSBNQzEzNzgzX0FEQzBfVFNNT0QwCQkoMSA8PCAxMikKLSNkZWZpbmUgTUMxMzc4M19BREMwX1RTTU9EMQkJKDEgPDwgMTMpCi0jZGVmaW5lIE1DMTM3ODNfQURDMF9UU01PRDIJCSgxIDw8IDE0KQotI2RlZmluZSBNQzEzNzgzX0FEQzBfQ0hSR1JBV0RJVgkJKDEgPDwgMTUpCi0jZGVmaW5lIE1DMTM3ODNfQURDMF9BRElOQzEJCSgxIDw8IDE2KQotI2RlZmluZSBNQzEzNzgzX0FEQzBfQURJTkMyCQkoMSA8PCAxNykKLSNkZWZpbmUgTUMxMzc4M19BREMwX1dDT01QCQkoMSA8PCAxOCkKLSNkZWZpbmUgTUMxMzc4M19BREMwX0FEQ0JJUzAJCSgxIDw8IDIzKQorc3RhdGljIGlubGluZSBpbnQgbWMxMzc4M19zZXRfYml0cyhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJaW50IHJldDsKKwltYzEzNzgzX2xvY2sobWMxMzc4Myk7CisJcmV0ID0gbWMxMzc4M19yZWdfcm13KG1jMTM3ODMsIG9mZnNldCwgbWFzaywgdmFsKTsKKwltYzEzNzgzX3VubG9jayhtYzEzNzgzKTsKIAotI2RlZmluZSBNQzEzNzgzX0FEQzFfQURFTgkJKDEgPDwgMCkKLSNkZWZpbmUgTUMxMzc4M19BREMxX1JBTkQJCSgxIDw8IDEpCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BRFNFTAkJKDEgPDwgMykKLSNkZWZpbmUgTUMxMzc4M19BREMxX1RSSUdNQVNLCQkoMSA8PCA0KQotI2RlZmluZSBNQzEzNzgzX0FEQzFfQURBMTAJCSgxIDw8IDUpCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BREExMQkJKDEgPDwgNikKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FEQTEyCQkoMSA8PCA3KQotI2RlZmluZSBNQzEzNzgzX0FEQzFfQURBMjAJCSgxIDw8IDgpCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BREEyMQkJKDEgPDwgOSkKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FEQTIyCQkoMSA8PCAxMCkKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FUTzAJCSgxIDw8IDExKQotI2RlZmluZSBNQzEzNzgzX0FEQzFfQVRPMQkJKDEgPDwgMTIpCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BVE8yCQkoMSA8PCAxMykKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FUTzMJCSgxIDw8IDE0KQotI2RlZmluZSBNQzEzNzgzX0FEQzFfQVRPNAkJKDEgPDwgMTUpCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BVE81CQkoMSA8PCAxNikKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FUTzYJCSgxIDw8IDE3KQotI2RlZmluZSBNQzEzNzgzX0FEQzFfQVRPNwkJKDEgPDwgMTgpCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BVE9YCQkoMSA8PCAxOSkKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FTQwkJKDEgPDwgMjApCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9BRFRSSUdJR04JCSgxIDw8IDIxKQotI2RlZmluZSBNQzEzNzgzX0FEQzFfQURPTkVTSE9UCQkoMSA8PCAyMikKLSNkZWZpbmUgTUMxMzc4M19BREMxX0FEQ0JJUzEJCSgxIDw8IDIzKQotCi0jZGVmaW5lIE1DMTM3ODNfQURDMV9DSEFOMF9TSElGVAk1Ci0jZGVmaW5lIE1DMTM3ODNfQURDMV9DSEFOMV9TSElGVAk4Ci0KLSNkZWZpbmUgTUMxMzc4M19BREMyX0FERDEwCQkoMSA8PCAyKQotI2RlZmluZSBNQzEzNzgzX0FEQzJfQUREMTEJCSgxIDw8IDMpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQxMgkJKDEgPDwgNCkKLSNkZWZpbmUgTUMxMzc4M19BREMyX0FERDEzCQkoMSA8PCA1KQotI2RlZmluZSBNQzEzNzgzX0FEQzJfQUREMTQJCSgxIDw8IDYpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQxNQkJKDEgPDwgNykKLSNkZWZpbmUgTUMxMzc4M19BREMyX0FERDE2CQkoMSA8PCA4KQotI2RlZmluZSBNQzEzNzgzX0FEQzJfQUREMTcJCSgxIDw8IDkpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQxOAkJKDEgPDwgMTApCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQxOQkJKDEgPDwgMTEpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyMAkJKDEgPDwgMTQpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyMQkJKDEgPDwgMTUpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyMgkJKDEgPDwgMTYpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyMwkJKDEgPDwgMTcpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyNAkJKDEgPDwgMTgpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyNQkJKDEgPDwgMTkpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyNgkJKDEgPDwgMjApCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyNwkJKDEgPDwgMjEpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyOAkJKDEgPDwgMjIpCi0jZGVmaW5lIE1DMTM3ODNfQURDMl9BREQyOQkJKDEgPDwgMjMpCi0KLSNkZWZpbmUgTUMxMzc4M19BREMzX1dISUdIMAkJKDEgPDwgMCkKLSNkZWZpbmUgTUMxMzc4M19BREMzX1dISUdIMQkJKDEgPDwgMSkKLSNkZWZpbmUgTUMxMzc4M19BREMzX1dISUdIMgkJKDEgPDwgMikKLSNkZWZpbmUgTUMxMzc4M19BREMzX1dISUdIMwkJKDEgPDwgMykKLSNkZWZpbmUgTUMxMzc4M19BREMzX1dISUdINAkJKDEgPDwgNCkKLSNkZWZpbmUgTUMxMzc4M19BREMzX1dISUdINQkJKDEgPDwgNSkKLSNkZWZpbmUgTUMxMzc4M19BREMzX0lDSUQwCQkoMSA8PCA2KQotI2RlZmluZSBNQzEzNzgzX0FEQzNfSUNJRDEJCSgxIDw8IDcpCi0jZGVmaW5lIE1DMTM3ODNfQURDM19JQ0lEMgkJKDEgPDwgOCkKLSNkZWZpbmUgTUMxMzc4M19BREMzX1dMT1cwCQkoMSA8PCA5KQotI2RlZmluZSBNQzEzNzgzX0FEQzNfV0xPVzEJCSgxIDw8IDEwKQotI2RlZmluZSBNQzEzNzgzX0FEQzNfV0xPVzIJCSgxIDw8IDExKQotI2RlZmluZSBNQzEzNzgzX0FEQzNfV0xPVzMJCSgxIDw8IDEyKQotI2RlZmluZSBNQzEzNzgzX0FEQzNfV0xPVzQJCSgxIDw8IDEzKQotI2RlZmluZSBNQzEzNzgzX0FEQzNfV0xPVzUJCSgxIDw8IDE0KQotI2RlZmluZSBNQzEzNzgzX0FEQzNfQURDQklTMgkJKDEgPDwgMjMpCi0KLSNkZWZpbmUgTUMxMzc4M19BREM0X0FEREJJUzEwCQkoMSA8PCAyKQotI2RlZmluZSBNQzEzNzgzX0FEQzRfQUREQklTMTEJCSgxIDw8IDMpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMxMgkJKDEgPDwgNCkKLSNkZWZpbmUgTUMxMzc4M19BREM0X0FEREJJUzEzCQkoMSA8PCA1KQotI2RlZmluZSBNQzEzNzgzX0FEQzRfQUREQklTMTQJCSgxIDw8IDYpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMxNQkJKDEgPDwgNykKLSNkZWZpbmUgTUMxMzc4M19BREM0X0FEREJJUzE2CQkoMSA8PCA4KQotI2RlZmluZSBNQzEzNzgzX0FEQzRfQUREQklTMTcJCSgxIDw8IDkpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMxOAkJKDEgPDwgMTApCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMxOQkJKDEgPDwgMTEpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyMAkJKDEgPDwgMTQpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyMQkJKDEgPDwgMTUpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyMgkJKDEgPDwgMTYpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyMwkJKDEgPDwgMTcpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyNAkJKDEgPDwgMTgpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyNQkJKDEgPDwgMTkpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyNgkJKDEgPDwgMjApCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyNwkJKDEgPDwgMjEpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyOAkJKDEgPDwgMjIpCi0jZGVmaW5lIE1DMTM3ODNfQURDNF9BRERCSVMyOQkJKDEgPDwgMjMpCisJcmV0dXJuIHJldDsKK30KIAogI2VuZGlmIC8qIF9fTElOVVhfTUZEX01DMTM3ODNfUFJJVl9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaCBiL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaAppbmRleCBiM2EyYTcyLi4zNTY4MDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oCkBAIC0xLDI4ICsxLDUwIEBACiAvKgotICogQ29weXJpZ2h0IDIwMDkgUGVuZ3V0cm9uaXgsIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAyMDA5IFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgogICoKLSAqIEluaXRpYWwgZGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBmdW5kZWQgYnkKLSAqIFBoeXRlYyBNZXNzdGVjaG5payBHbWJILCBodHRwOi8vd3d3LnBoeXRlYy5kZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI2lmbmRlZiBfX0xJTlVYX01GRF9NQzEzNzgzX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfTUMxMzc4M19ICiAKLSNpZm5kZWYgX19JTkNMVURFX0xJTlVYX01GRF9NQzEzNzgzX0gKLSNkZWZpbmUgX19JTkNMVURFX0xJTlVYX01GRF9NQzEzNzgzX0gKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogc3RydWN0IG1jMTM3ODM7CisKK3ZvaWQgbWMxMzc4M19sb2NrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzKTsKK3ZvaWQgbWMxMzc4M191bmxvY2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMpOworCitpbnQgbWMxMzc4M19yZWdfcmVhZChzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyICp2YWwpOworaW50IG1jMTM3ODNfcmVnX3dyaXRlKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKK2ludCBtYzEzNzgzX3JlZ19ybXcoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCXUzMiBtYXNrLCB1MzIgdmFsKTsKKworaW50IG1jMTM3ODNfaXJxX3JlcXVlc3Qoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEsCisJCWlycV9oYW5kbGVyX3QgaGFuZGxlciwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGV2KTsKK2ludCBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAorCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRldik7CitpbnQgbWMxMzc4M19pcnFfZnJlZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwgdm9pZCAqZGV2KTsKK2ludCBtYzEzNzgzX2Fja2lycShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSk7CisKK2ludCBtYzEzNzgzX21hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOworaW50IG1jMTM3ODNfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKTsKKworI2RlZmluZSBNQzEzNzgzX0FEQzAJCTQzCisjZGVmaW5lIE1DMTM3ODNfQURDMF9BRFJFRkVOCQkoMSA8PCAxMCkKKyNkZWZpbmUgTUMxMzc4M19BREMwX0FEUkVGTU9ERQkJKDEgPDwgMTEpCisjZGVmaW5lIE1DMTM3ODNfQURDMF9UU01PRDAJCSgxIDw8IDEyKQorI2RlZmluZSBNQzEzNzgzX0FEQzBfVFNNT0QxCQkoMSA8PCAxMykKKyNkZWZpbmUgTUMxMzc4M19BREMwX1RTTU9EMgkJKDEgPDwgMTQpCisjZGVmaW5lIE1DMTM3ODNfQURDMF9BRElOQzEJCSgxIDw8IDE2KQorI2RlZmluZSBNQzEzNzgzX0FEQzBfQURJTkMyCQkoMSA8PCAxNykKKworI2RlZmluZSBNQzEzNzgzX0FEQzBfVFNNT0RfTUFTSwkJKE1DMTM3ODNfQURDMF9UU01PRDAgfCBcCisJCQkJCU1DMTM3ODNfQURDMF9UU01PRDEgfCBcCisJCQkJCU1DMTM3ODNfQURDMF9UU01PRDIpCisKKy8qIHRvIGJlIGNsZWFuZWQgdXAgKi8KIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOwogCiBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIHsKQEAgLTMwLDIzICs1MiwzMCBAQAogCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7CiB9OwogCi1zdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIHsKLQlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3JzOworc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgewogCWludCBudW1fcmVndWxhdG9yczsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSAqcmVndWxhdG9yczsKIH07CiAKLS8qIG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBmbGFncyAqLworc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSB7CisJaW50IG51bV9yZWd1bGF0b3JzOworCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgKnJlZ3VsYXRvcnM7CisKICNkZWZpbmUgTUMxMzc4M19VU0VfVE9VQ0hTQ1JFRU4gKDEgPDwgMCkKICNkZWZpbmUgTUMxMzc4M19VU0VfQ09ERUMJKDEgPDwgMSkKICNkZWZpbmUgTUMxMzc4M19VU0VfQURDCQkoMSA8PCAyKQogI2RlZmluZSBNQzEzNzgzX1VTRV9SVEMJCSgxIDw8IDMpCiAjZGVmaW5lIE1DMTM3ODNfVVNFX1JFR1VMQVRPUgkoMSA8PCA0KQorCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKyNkZWZpbmUgTUMxMzc4M19BRENfTU9ERV9UUwkJMQorI2RlZmluZSBNQzEzNzgzX0FEQ19NT0RFX1NJTkdMRV9DSEFOCTIKKyNkZWZpbmUgTUMxMzc4M19BRENfTU9ERV9NVUxUX0NIQU4JMwogCiBpbnQgbWMxMzc4M19hZGNfZG9fY29udmVyc2lvbihzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IG1vZGUsCiAJCXVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgKnNhbXBsZSk7CiAKLXZvaWQgbWMxMzc4M19hZGNfc2V0X3RzX3N0YXR1cyhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgdW5zaWduZWQgaW50IHN0YXR1cyk7CiAKICNkZWZpbmUJTUMxMzc4M19TV19TVzFBCQkwCiAjZGVmaW5lCU1DMTM3ODNfU1dfU1cxQgkJMQpAQCAtODAsNSArMTA5LDQ2IEBACiAjZGVmaW5lCU1DMTM3ODNfUkVHVV9WMwkJMjkKICNkZWZpbmUJTUMxMzc4M19SRUdVX1Y0CQkzMAogCi0jZW5kaWYgLyogX19JTkNMVURFX0xJTlVYX01GRF9NQzEzNzgzX0ggKi8KKyNkZWZpbmUgTUMxMzc4M19JUlFfQURDRE9ORQkwCisjZGVmaW5lIE1DMTM3ODNfSVJRX0FEQ0JJU0RPTkUJMQorI2RlZmluZSBNQzEzNzgzX0lSUV9UUwkJMgorI2RlZmluZSBNQzEzNzgzX0lSUV9XSElHSAkzCisjZGVmaW5lIE1DMTM3ODNfSVJRX1dMT1cJNAorI2RlZmluZSBNQzEzNzgzX0lSUV9DSEdERVQJNgorI2RlZmluZSBNQzEzNzgzX0lSUV9DSEdPVgk3CisjZGVmaW5lIE1DMTM3ODNfSVJRX0NIR1JFVgk4CisjZGVmaW5lIE1DMTM3ODNfSVJRX0NIR1NIT1JUCTkKKyNkZWZpbmUgTUMxMzc4M19JUlFfQ0NDVgkxMAorI2RlZmluZSBNQzEzNzgzX0lSUV9DSEdDVVJSCTExCisjZGVmaW5lIE1DMTM3ODNfSVJRX0JQT04JMTIKKyNkZWZpbmUgTUMxMzc4M19JUlFfTE9CQVRMCTEzCisjZGVmaW5lIE1DMTM3ODNfSVJRX0xPQkFUSAkxNAorI2RlZmluZSBNQzEzNzgzX0lSUV9VRFAJCTE1CisjZGVmaW5lIE1DMTM3ODNfSVJRX1VTQgkJMTYKKyNkZWZpbmUgTUMxMzc4M19JUlFfSUQJCTE5CisjZGVmaW5lIE1DMTM3ODNfSVJRX1NFMQkJMjEKKyNkZWZpbmUgTUMxMzc4M19JUlFfQ0tERVQJMjIKKyNkZWZpbmUgTUMxMzc4M19JUlFfVURNCQkyMworI2RlZmluZSBNQzEzNzgzX0lSUV8xSFoJCTI0CisjZGVmaW5lIE1DMTM3ODNfSVJRX1RPREEJMjUKKyNkZWZpbmUgTUMxMzc4M19JUlFfT05PRkQxCTI3CisjZGVmaW5lIE1DMTM3ODNfSVJRX09OT0ZEMgkyOAorI2RlZmluZSBNQzEzNzgzX0lSUV9PTk9GRDMJMjkKKyNkZWZpbmUgTUMxMzc4M19JUlFfU1lTUlNUCTMwCisjZGVmaW5lIE1DMTM3ODNfSVJRX1JUQ1JTVAkzMQorI2RlZmluZSBNQzEzNzgzX0lSUV9QQwkJMzIKKyNkZWZpbmUgTUMxMzc4M19JUlFfV0FSTQkzMworI2RlZmluZSBNQzEzNzgzX0lSUV9NRU1ITEQJMzQKKyNkZWZpbmUgTUMxMzc4M19JUlFfUFdSUkRZCTM1CisjZGVmaW5lIE1DMTM3ODNfSVJRX1RIV0FSTkwJMzYKKyNkZWZpbmUgTUMxMzc4M19JUlFfVEhXQVJOSAkzNworI2RlZmluZSBNQzEzNzgzX0lSUV9DTEsJCTM4CisjZGVmaW5lIE1DMTM3ODNfSVJRX1NFTUFGCTM5CisjZGVmaW5lIE1DMTM3ODNfSVJRX01DMkIJNDEKKyNkZWZpbmUgTUMxMzc4M19JUlFfSFNERVQJNDIKKyNkZWZpbmUgTUMxMzc4M19JUlFfSFNMCQk0MworI2RlZmluZSBNQzEzNzgzX0lSUV9BTFNQVEgJNDQKKyNkZWZpbmUgTUMxMzc4M19JUlFfQUhTU0hPUlQJNDUKKyNkZWZpbmUgTUMxMzc4M19OVU1fSVJRCQk0NgogCisjZW5kaWYgLyogX19MSU5VWF9NRkRfTUMxMzc4M19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9wY2Y1MDYzMy9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9wY2Y1MDYzMy9jb3JlLmgKaW5kZXggOWFiYTdiNy4uMzM5OGJkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvcGNmNTA2MzMvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3BjZjUwNjMzL2NvcmUuaApAQCAtMjksNyArMjksMTIgQEAKIAljaGFyICoqYmF0dGVyaWVzOwogCWludCBudW1fYmF0dGVyaWVzOwogCi0JaW50IGNoYXJnaW5nX3Jlc3RhcnRfaW50ZXJ2YWw7CisJLyoKKwkgKiBTaG91bGQgYmUgc2V0IGFjY29yZGluZ2x5IHRvIHRoZSByZWZlcmVuY2UgcmVzaXN0b3IgdXNlZCwgc2VlCisJICogSV97Y2gocmVmKX0gY2hhcmdlciByZWZlcmVuY2UgY3VycmVudCBpbiB0aGUgcGNmNTA2MzMgVXNlcgorCSAqIE1hbnVhbC4KKwkgKi8KKwlpbnQgY2hhcmdlcl9yZWZlcmVuY2VfY3VycmVudF9tYTsKIAogCS8qIENhbGxiYWNrcyAqLwogCXZvaWQgKCpwcm9iZV9kb25lKShzdHJ1Y3QgcGNmNTA2MzMgKik7CkBAIC00MCwxMCArNDUsNiBAQAogCXU4IHJlc3VtZXJzWzVdOwogfTsKIAotc3RydWN0IHBjZjUwNjMzX3N1YmRldl9wZGF0YSB7Ci0Jc3RydWN0IHBjZjUwNjMzICpwY2Y7Ci19OwotCiBzdHJ1Y3QgcGNmNTA2MzNfaXJxIHsKIAl2b2lkICgqaGFuZGxlcikgKGludCwgdm9pZCAqKTsKIAl2b2lkICpkYXRhOwpAQCAtMjE3LDUgKzIxOCw5IEBACiAjZGVmaW5lIFBDRjUwNjMzX1JFR19MRURDVEwgMHgyYQogI2RlZmluZSBQQ0Y1MDYzM19SRUdfTEVERElNIDB4MmIKIAotI2VuZGlmCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2Y1MDYzMyAqZGV2X3RvX3BjZjUwNjMzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7Cit9CiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvcGNmNTA2MzMvbWJjLmggYi9pbmNsdWRlL2xpbnV4L21mZC9wY2Y1MDYzMy9tYmMuaAppbmRleCA0MTE5NTc5Li5kZjRmNWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9wY2Y1MDYzMy9tYmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9wY2Y1MDYzMy9tYmMuaApAQCAtMTI4LDYgKzEyOCw3IEBACiBpbnQgcGNmNTA2MzNfbWJjX3VzYl9jdXJsaW1fc2V0KHN0cnVjdCBwY2Y1MDYzMyAqcGNmLCBpbnQgbWEpOwogCiBpbnQgcGNmNTA2MzNfbWJjX2dldF9zdGF0dXMoc3RydWN0IHBjZjUwNjMzICopOworaW50IHBjZjUwNjMzX21iY19nZXRfdXNiX29ubGluZV9zdGF0dXMoc3RydWN0IHBjZjUwNjMzICopOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9jb3JlLmgKaW5kZXggOTFlYjQ5My4uNTE4NGI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvY29yZS5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9fTUZEX1dNODMxWF9DT1JFX0hfXwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qCiAgKiBSZWdpc3RlciB2YWx1ZXMuCkBAIC0xMTcsNiArMTE2LDcgQEAKICNkZWZpbmUgV004MzFYX0RDM19TTEVFUF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NDA2MwogI2RlZmluZSBXTTgzMVhfREM0X0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHg0MDY0CiAjZGVmaW5lIFdNODMxWF9EQzRfU0xFRVBfQ09OVFJPTCAgICAgICAgICAgICAgICAweDQwNjUKKyNkZWZpbmUgV004MzJYX0RDNF9TTEVFUF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NDA2NwogI2RlZmluZSBXTTgzMVhfRVBFMV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg0MDY2CiAjZGVmaW5lIFdNODMxWF9FUEUyX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDQwNjcKICNkZWZpbmUgV004MzFYX0xETzFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NDA2OApAQCAtMjM1LDYgKzIzNSw4IEBACiAKIHN0cnVjdCByZWd1bGF0b3JfZGV2OwogCisjZGVmaW5lIFdNODMxWF9OVU1fSVJRX1JFR1MgNQorCiBzdHJ1Y3Qgd204MzF4IHsKIAlzdHJ1Y3QgbXV0ZXggaW9fbG9jazsKIApAQCAtMjQ4LDEwICsyNTAsMTEgQEAKIAogCWludCBpcnE7ICAvKiBPdXIgY2hpcCBJUlEgKi8KIAlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlycV93cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3dvcms7CiAJdW5zaWduZWQgaW50IGlycV9iYXNlOwotCWludCBpcnFfbWFza3NbNV07CisJaW50IGlycV9tYXNrc19jdXJbV004MzFYX05VTV9JUlFfUkVHU107ICAgLyogQ3VycmVudGx5IGFjdGl2ZSB2YWx1ZSAqLworCWludCBpcnFfbWFza3NfY2FjaGVbV004MzFYX05VTV9JUlFfUkVHU107IC8qIENhY2hlZCBoYXJkd2FyZSB2YWx1ZSAqLworCisJaW50IG51bV9ncGlvOwogCiAJc3RydWN0IG11dGV4IGF1eGFkY19sb2NrOwogCkBAIC0yNzgsMTIgKzI4MSwzMCBAQAogaW50IHdtODMxeF9pcnFfaW5pdChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCBpcnEpOwogdm9pZCB3bTgzMXhfaXJxX2V4aXQoc3RydWN0IHdtODMxeCAqd204MzF4KTsKIAotaW50IF9fbXVzdF9jaGVjayB3bTgzMXhfcmVxdWVzdF9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LAotCQkJCSAgICB1bnNpZ25lZCBpbnQgaXJxLCBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHZvaWQgKmRldik7Ci12b2lkIHdtODMxeF9mcmVlX2lycShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIHVuc2lnbmVkIGludCwgdm9pZCAqKTsKLXZvaWQgd204MzF4X2Rpc2FibGVfaXJxKHN0cnVjdCB3bTgzMXggKndtODMxeCwgaW50IGlycSk7Ci12b2lkIHdtODMxeF9lbmFibGVfaXJxKHN0cnVjdCB3bTgzMXggKndtODMxeCwgaW50IGlycSk7CitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgd204MzF4X3JlcXVlc3RfaXJxKHN0cnVjdCB3bTgzMXggKndtODMxeCwKKwkJCQkJCSAgdW5zaWduZWQgaW50IGlycSwKKwkJCQkJCSAgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAorCQkJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICB2b2lkICpkZXYpCit7CisJcmV0dXJuIHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwgTlVMTCwgaGFuZGxlciwgZmxhZ3MsIG5hbWUsIGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bTgzMXhfZnJlZV9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LAorCQkJCSAgIHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlmcmVlX2lycShpcnEsIGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bTgzMXhfZGlzYWJsZV9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LCBpbnQgaXJxKQoreworCWRpc2FibGVfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bTgzMXhfZW5hYmxlX2lycShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCBpcnEpCit7CisJZW5hYmxlX2lycShpcnEpOworfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKaW5kZXggOTBkODIwMi4uZmQzMjJhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKQEAgLTQxLDYgKzQxLDIzIEBACiAJaW50IHRpbWVvdXQ7ICAgICAgICAvKiogQ2hhcmdlIGN5Y2xlIHRpbWVvdXQsIGluIG1pbnV0ZXMgKi8KIH07CiAKKy8qKgorICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIFdNODMxeCBEQy1EQyBCdWNrV2lzZSBjb252ZXJ0b3JzLiAgVGhpcworICogc2hvdWxkIGJlIHBhc3NlZCBhcyBkcml2ZXJfZGF0YSBpbiB0aGUgcmVndWxhdG9yX2luaXRfZGF0YS4KKyAqCisgKiBDdXJyZW50bHkgYWxsIHRoZSBjb25maWd1cmF0aW9uIGlzIGZvciB0aGUgZmFzdCBEVlMgc3dpdGNoaW5nCisgKiBzdXBwb3J0IG9mIHRoZSBkZXZpY2VzLiAgVGhpcyBhbGxvd3MgTUZQcyBvbiB0aGUgZGV2aWNlIHRvIGJlCisgKiBjb25maWd1cmVkIGFzIGFuIGlucHV0IHRvIHN3aXRjaCBiZXR3ZWVuIHR3byBvdXRwdXQgdm9sdGFnZXMsCisgKiBhbGxvd2luZyB2b2x0YWdlIHRyYW5zaXRpb25zIHdpdGhvdXQgdGhlIGV4cGVuc2Ugb2YgYW4gYWNjZXNzIG92ZXIKKyAqIEkyQyBvciBTUEkgYnVzZXMuCisgKi8KK3N0cnVjdCB3bTgzMXhfYnVja3ZfcGRhdGEgeworCWludCBkdnNfZ3BpbzsgICAgICAgIC8qKiBDUFUgR1BJTyB0byB1c2UgZm9yIERWUyBzd2l0Y2hpbmcgKi8KKwlpbnQgZHZzX2NvbnRyb2xfc3JjOyAvKiogSGFyZHdhcmUgRFZTIHNvdXJjZSB0byB1c2UgKDEgb3IgMikgKi8KKwlpbnQgZHZzX2luaXRfc3RhdGU7ICAvKiogRFZTIHN0YXRlIHRvIGV4cGVjdCBvbiBzdGFydHVwICovCisJaW50IGR2c19zdGF0ZV9ncGlvOyAgLyoqIENQVSBHUElPIHRvIHVzZSBmb3IgbW9uaXRvcmluZyBzdGF0dXMgKi8KK307CisKIC8qIFNvdXJjZXMgZm9yIHN0YXR1cyBMRUQgY29uZmlndXJhdGlvbi4gIFZhbHVlcyBhcmUgcmVnaXN0ZXIgdmFsdWVzCiAgKiBwbHVzIDEgdG8gYWxsb3cgZm9yIGEgemVybyBkZWZhdWx0IGZvciBwcmVzZXJ2ZS4KICAqLwpAQCAtOTEsNiArMTA4LDcgQEAKIAkvKiogQ2FsbGVkIGFmdGVyIHN1YmRldmljZXMgYXJlIHNldCB1cCAqLwogCWludCAoKnBvc3RfaW5pdCkoc3RydWN0IHdtODMxeCAqd204MzF4KTsKIAorCWludCBpcnFfYmFzZTsKIAlpbnQgZ3Bpb19iYXNlOwogCXN0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X3BkYXRhICpiYWNrbGlnaHQ7CiAJc3RydWN0IHdtODMxeF9iYWNrdXBfcGRhdGEgKmJhY2t1cDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCmluZGV4IDFkNTk1ZGUuLjQzODY4ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaApAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KQEAgLTYwMSw3ICs2MDEsNyBAQAogc3RydWN0IHdtODM1MDsKIAogc3RydWN0IHdtODM1MF9pcnEgewotCXZvaWQgKCpoYW5kbGVyKSAoc3RydWN0IHdtODM1MCAqLCBpbnQsIHZvaWQgKik7CisJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwogCXZvaWQgKmRhdGE7CiB9OwogCkBAIC02NDYsMTAgKzY0NiwxMiBAQAogICogQGluaXQ6IEZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpc2F0aW9uLiAgU2hvdWxkIGJlCiAgKiAgICAgICAgdXNlZCBieSB0aGUgcGxhdGZvcm0gdG8gY29uZmlndXJlIEdQSU8gZnVuY3Rpb25zIGFuZCBzaW1pbGFyLgogICogQGlycV9oaWdoOiBTZXQgaWYgV004MzUwIElSUSBpcyBhY3RpdmUgaGlnaC4KKyAqIEBpcnFfYmFzZTogQmFzZSBJUlEgZm9yIGdlbmlycSAobm90IGN1cnJlbnRseSB1c2VkKS4KICAqLwogc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgKCppbml0KShzdHJ1Y3Qgd204MzUwICp3bTgzNTApOwogCWludCBpcnFfaGlnaDsKKwlpbnQgaXJxX2Jhc2U7CiB9OwogCiAKQEAgLTY3NiwxMSArNjc4LDEzIEBACiAgKiBXTTgzNTAgaW50ZXJuYWwgaW50ZXJydXB0cwogICovCiBpbnQgd204MzUwX3JlZ2lzdGVyX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCi0JCQl2b2lkICgqaGFuZGxlcikgKHN0cnVjdCB3bTgzNTAgKiwgaW50LCB2b2lkICopLAotCQkJdm9pZCAqZGF0YSk7CisJCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKTsKIGludCB3bTgzNTBfZnJlZV9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKTsKIGludCB3bTgzNTBfbWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKTsKIGludCB3bTgzNTBfdW5tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpOwotCitpbnQgd204MzUwX2lycV9pbml0KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKKwkJICAgIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworaW50IHdtODM1MF9pcnFfZXhpdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvZ3Bpby5oCmluZGV4IGVkOTFlOGYuLjcxYWYzZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaApAQCAtMTczLDYgKzE3MywyNCBAQAogI2RlZmluZSBXTTgzNTBfR1BJT19ERUJPVU5DRV9PTgkJCTEKIAogLyoKKyAqIFIzMCAoMHgxRSkgLSBHUElPIEludGVycnVwdCBTdGF0dXMKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKworLyoKICAqIFIxMjggKDB4ODApIC0gR1BJTyBEZWJvdW5jZQogICovCiAjZGVmaW5lIFdNODM1MF9HUDEyX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggNTI3NjAyYy4uN2YwODVjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTEyLDcgKzEyLDggQEAKIGV4dGVybiBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7CiBleHRlcm4gaW50IG1pZ3JhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAogCQkJc3RydWN0IHBhZ2UgKiwgc3RydWN0IHBhZ2UgKik7Ci1leHRlcm4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X3BhZ2VfdCB4LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfcGFnZV90IHgsCisJCQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGludCBvZmZsaW5pbmcpOwogCiBleHRlcm4gaW50IGZhaWxfbWlncmF0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCiAJCQlzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKQEAgLTI2LDEwICsyNyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHB1dGJhY2tfbHJ1X3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X3BhZ2VfdCB4LAotCQl1bnNpZ25lZCBsb25nIHByaXZhdGUpIHsgcmV0dXJuIC1FTk9TWVM7IH0KLQotc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlc190byhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwKLQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgZGVzdCkgeyByZXR1cm4gMDsgfQorCQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGludCBvZmZsaW5pbmcpIHsgcmV0dXJuIC1FTk9TWVM7IH0KIAogc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wcmVwKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCmluZGV4IGNlN2NjNmMuLmU5MmQxYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKQEAgLTYxLDYgKzYxLDcgQEAKIAlNTFg0X0RFVl9DQVBfRkxBR19CQURfUEtFWV9DTlRSCT0gMSA8PCAgOCwKIAlNTFg0X0RFVl9DQVBfRkxBR19CQURfUUtFWV9DTlRSCT0gMSA8PCAgOSwKIAlNTFg0X0RFVl9DQVBfRkxBR19EUERQCQk9IDEgPDwgMTIsCisJTUxYNF9ERVZfQ0FQX0ZMQUdfQkxICQk9IDEgPDwgMTUsCiAJTUxYNF9ERVZfQ0FQX0ZMQUdfTUVNX1dJTkRPVwk9IDEgPDwgMTYsCiAJTUxYNF9ERVZfQ0FQX0ZMQUdfQVBNCQk9IDEgPDwgMTcsCiAJTUxYNF9ERVZfQ0FQX0ZMQUdfQVRPTUlDCT0gMSA8PCAxOCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAyNGMzOTU2Li4yMjY1ZjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC02MjAsMTMgKzYyMCwyMiBAQAogLyoKICAqIE9uIGFuIGFub255bW91cyBwYWdlIG1hcHBlZCBpbnRvIGEgdXNlciB2aXJ0dWFsIG1lbW9yeSBhcmVhLAogICogcGFnZS0+bWFwcGluZyBwb2ludHMgdG8gaXRzIGFub25fdm1hLCBub3QgdG8gYSBzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKLSAqIHdpdGggdGhlIFBBR0VfTUFQUElOR19BTk9OIGJpdCBzZXQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgKiB3aXRoIHRoZSBQQUdFX01BUFBJTkdfQU5PTiBiaXQgc2V0IHRvIGRpc3Rpbmd1aXNoIGl0LiAgU2VlIHJtYXAuaC4KKyAqCisgKiBPbiBhbiBhbm9ueW1vdXMgcGFnZSBpbiBhIFZNX01FUkdFQUJMRSBhcmVhLCBpZiBDT05GSUdfS1NNIGlzIGVuYWJsZWQsCisgKiB0aGUgUEFHRV9NQVBQSU5HX0tTTSBiaXQgbWF5IGJlIHNldCBhbG9uZyB3aXRoIHRoZSBQQUdFX01BUFBJTkdfQU5PTiBiaXQ7CisgKiBhbmQgdGhlbiBwYWdlLT5tYXBwaW5nIHBvaW50cywgbm90IHRvIGFuIGFub25fdm1hLCBidXQgdG8gYSBwcml2YXRlCisgKiBzdHJ1Y3R1cmUgd2hpY2ggS1NNIGFzc29jaWF0ZXMgd2l0aCB0aGF0IG1lcmdlZCBwYWdlLiAgU2VlIGtzbS5oLgorICoKKyAqIFBBR0VfTUFQUElOR19LU00gd2l0aG91dCBQQUdFX01BUFBJTkdfQU5PTiBpcyBjdXJyZW50bHkgbmV2ZXIgdXNlZC4KICAqCiAgKiBQbGVhc2Ugbm90ZSB0aGF0LCBjb25mdXNpbmdseSwgInBhZ2VfbWFwcGluZyIgcmVmZXJzIHRvIHRoZSBpbm9kZQogICogYWRkcmVzc19zcGFjZSB3aGljaCBtYXBzIHRoZSBwYWdlIGZyb20gZGlzazsgd2hlcmVhcyAicGFnZV9tYXBwZWQiCiAgKiByZWZlcnMgdG8gdXNlciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaW50byB3aGljaCB0aGUgcGFnZSBpcyBtYXBwZWQuCiAgKi8KICNkZWZpbmUgUEFHRV9NQVBQSU5HX0FOT04JMQorI2RlZmluZSBQQUdFX01BUFBJTkdfS1NNCTIKKyNkZWZpbmUgUEFHRV9NQVBQSU5HX0ZMQUdTCShQQUdFX01BUFBJTkdfQU5PTiB8IFBBR0VfTUFQUElOR19LU00pCiAKIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSBzd2FwcGVyX3NwYWNlOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqcGFnZV9tYXBwaW5nKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtNjM0LDE2ICs2NDMsMTkgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAKIAlWTV9CVUdfT04oUGFnZVNsYWIocGFnZSkpOwotI2lmZGVmIENPTkZJR19TV0FQCiAJaWYgKHVubGlrZWx5KFBhZ2VTd2FwQ2FjaGUocGFnZSkpKQogCQltYXBwaW5nID0gJnN3YXBwZXJfc3BhY2U7Ci0JZWxzZQotI2VuZGlmCi0JaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKW1hcHBpbmcgJiBQQUdFX01BUFBJTkdfQU5PTikpCisJZWxzZSBpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpbWFwcGluZyAmIFBBR0VfTUFQUElOR19BTk9OKSkKIAkJbWFwcGluZyA9IE5VTEw7CiAJcmV0dXJuIG1hcHBpbmc7CiB9CiAKKy8qIE5ldXRyYWwgcGFnZS0+bWFwcGluZyBwb2ludGVyIHRvIGFkZHJlc3Nfc3BhY2Ugb3IgYW5vbl92bWEgb3Igb3RoZXIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGFnZV9ybWFwcGluZyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcGFnZS0+bWFwcGluZyAmIH5QQUdFX01BUFBJTkdfRkxBR1MpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBQYWdlQW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKXBhZ2UtPm1hcHBpbmcgJiBQQUdFX01BUFBJTkdfQU5PTikgIT0gMDsKQEAgLTc1OCw2ICs3NzAsNyBAQAogICogQHBtZF9lbnRyeTogaWYgc2V0LCBjYWxsZWQgZm9yIGVhY2ggbm9uLWVtcHR5IFBNRCAoM3JkLWxldmVsKSBlbnRyeQogICogQHB0ZV9lbnRyeTogaWYgc2V0LCBjYWxsZWQgZm9yIGVhY2ggbm9uLWVtcHR5IFBURSAoNHRoLWxldmVsKSBlbnRyeQogICogQHB0ZV9ob2xlOiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBob2xlIGF0IGFsbCBsZXZlbHMKKyAqIEBodWdldGxiX2VudHJ5OiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBodWdldGxiIGVudHJ5CiAgKgogICogKHNlZSB3YWxrX3BhZ2VfcmFuZ2UgZm9yIG1vcmUgZGV0YWlscykKICAqLwpAQCAtNzY3LDYgKzc4MCw4IEBACiAJaW50ICgqcG1kX2VudHJ5KShwbWRfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgbW1fd2FsayAqKTsKIAlpbnQgKCpwdGVfZW50cnkpKHB0ZV90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBtbV93YWxrICopOwogCWludCAoKnB0ZV9ob2xlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgbW1fd2FsayAqKTsKKwlpbnQgKCpodWdldGxiX2VudHJ5KShwdGVfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJICAgICBzdHJ1Y3QgbW1fd2FsayAqKTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAl2b2lkICpwcml2YXRlOwogfTsKQEAgLTEwMjIsNiArMTAzNyw5IEBACiBleHRlcm4gdm9pZCByZW1vdmVfYWN0aXZlX3JhbmdlKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4pOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX2FsbF9hY3RpdmVfcmFuZ2VzKHZvaWQpOwordm9pZCBzb3J0X25vZGVfbWFwKHZvaWQpOwordW5zaWduZWQgbG9uZyBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBhYnNlbnRfcGFnZXNfaW5fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4pOwogZXh0ZXJuIHZvaWQgZ2V0X3Bmbl9yYW5nZV9mb3JfbmlkKHVuc2lnbmVkIGludCBuaWQsCkBAIC0xMzE2LDExICsxMzM0LDE3IEBACiAJCQkJIHNpemVfdCBzaXplKTsKIGV4dGVybiB2b2lkIHJlZnVuZF9sb2NrZWRfbWVtb3J5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzaXplX3Qgc2l6ZSk7CiAKK2VudW0gbWZfZmxhZ3MgeworCU1GX0NPVU5UX0lOQ1JFQVNFRCA9IDEgPDwgMCwKK307CiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IHRyYXBubyk7Ci1leHRlcm4gaW50IF9fbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCB0cmFwbm8sIGludCByZWYpOworZXh0ZXJuIGludCBfX21lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgdHJhcG5vLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pOwogZXh0ZXJuIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbDsKIGV4dGVybiBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5OworZXh0ZXJuIHZvaWQgc2hha2VfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgaW50IGFjY2Vzcyk7CiBleHRlcm4gYXRvbWljX2xvbmdfdCBtY2VfYmFkX3BhZ2VzOworZXh0ZXJuIGludCBzb2Z0X29mZmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGZsYWdzKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWRlYnVnLmggYi9pbmNsdWRlL2xpbnV4L21tZGVidWcuaAppbmRleCA4YTU1MDk4Li5lZTI0ZWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tZGVidWcuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgTElOVVhfTU1fREVCVUdfSAogI2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDEKIAotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfVk0KICNkZWZpbmUgVk1fQlVHX09OKGNvbmQpIEJVR19PTihjb25kKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDZmNzU2MTcuLjMwZmU2NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VibG9jay1mbGFncy5oPgotI2luY2x1ZGUgPGxpbnV4L2JvdW5kcy5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC9ib3VuZHMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNDgyZWZjOC4uNmNiMWEzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0yNSw4ICsyNSwxMCBAQAogLyogTm90IFlldCBJbXBsZW1lbnRlZCAqLwogI2RlZmluZSBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRShuYW1lKQogCi0vKiBzb21lIHRvb2xjaGFpbnMgdXNlcyBhIGBfJyBwcmVmaXggZm9yIGFsbCB1c2VyIHN5bWJvbHMgKi8KLSNpZm5kZWYgTU9EVUxFX1NZTUJPTF9QUkVGSVgKKy8qIFNvbWUgdG9vbGNoYWlucyB1c2UgYSBgXycgcHJlZml4IGZvciBhbGwgdXNlciBzeW1ib2xzLiAqLworI2lmZGVmIENPTkZJR19TWU1CT0xfUFJFRklYCisjZGVmaW5lIE1PRFVMRV9TWU1CT0xfUFJFRklYIENPTkZJR19TWU1CT0xfUFJFRklYCisjZWxzZQogI2RlZmluZSBNT0RVTEVfU1lNQk9MX1BSRUZJWCAiIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2JibS5oIGIvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKaW5kZXggZmZmOGM1My4uOWMzNzU3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKQEAgLTE5LDIyICsxOSwyMSBAQAogCiAvKioKICAqIHN0cnVjdCBuYW5kX2JidF9kZXNjciAtIGJhZCBibG9jayB0YWJsZSBkZXNjcmlwdG9yCi0gKiBAb3B0aW9uczoJCW9wdGlvbnMgZm9yIHRoaXMgZGVzY3JpcHRvcgotICogQHBhZ2VzOgkJdGhlIHBhZ2Uocykgd2hlcmUgd2UgZmluZCB0aGUgYmJ0LCB1c2VkIHdpdGgKLSAqIAkJCW9wdGlvbiBCQlRfQUJTUEFHRSB3aGVuIGJidCBpcyBzZWFyY2hlZCwKLSAqIAkJCXRoZW4gd2Ugc3RvcmUgdGhlIGZvdW5kIGJidHMgcGFnZXMgaGVyZS4KLSAqCQkJSXRzIGFuIGFycmF5IGFuZCBzdXBwb3J0cyB1cCB0byA4IGNoaXBzIG5vdwotICogQG9mZnM6CQlvZmZzZXQgb2YgdGhlIHBhdHRlcm4gaW4gdGhlIG9vYiBhcmVhIG9mIHRoZSBwYWdlCi0gKiBAdmVyb2ZmczoJCW9mZnNldCBvZiB0aGUgYmJ0IHZlcnNpb24gY291bnRlciBpbiB0aGUgb29iIGFyZWEgb2YgdGhlIHBhZ2UKLSAqIEB2ZXJzaW9uOgkJdmVyc2lvbiByZWFkIGZyb20gdGhlIGJidCBwYWdlIGR1cmluZyBzY2FuCi0gKiBAbGVuOgkJbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLCBpZiAwIG5vIHBhdHRlcm4gY2hlY2sgaXMgcGVyZm9ybWVkCi0gKiBAbWF4YmxvY2tzOgkJbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHRvIHNlYXJjaCBmb3IgYSBiYnQuIFRoaXMKLSAqCQkJbnVtYmVyIG9mIGJsb2NrcyBpcyByZXNlcnZlZCBhdCB0aGUgZW5kIG9mIHRoZSBkZXZpY2UKLSAqCQkJd2hlcmUgdGhlIHRhYmxlcyBhcmUgd3JpdHRlbi4KLSAqIEByZXNlcnZlZF9ibG9ja19jb2RlOiBpZiBub24tMCwgdGhpcyBwYXR0ZXJuIGRlbm90ZXMgYSByZXNlcnZlZAotICoJCQkocmF0aGVyIHRoYW4gYmFkKSBibG9jayBpbiB0aGUgc3RvcmVkIGJidAotICogQHBhdHRlcm46CQlwYXR0ZXJuIHRvIGlkZW50aWZ5IGJhZCBibG9jayB0YWJsZSBvciBmYWN0b3J5IG1hcmtlZAotICoJCQlnb29kIC8gYmFkIGJsb2NrcywgY2FuIGJlIE5VTEwsIGlmIGxlbiA9IDAKKyAqIEBvcHRpb25zOglvcHRpb25zIGZvciB0aGlzIGRlc2NyaXB0b3IKKyAqIEBwYWdlczoJdGhlIHBhZ2Uocykgd2hlcmUgd2UgZmluZCB0aGUgYmJ0LCB1c2VkIHdpdGggb3B0aW9uIEJCVF9BQlNQQUdFCisgKgkJd2hlbiBiYnQgaXMgc2VhcmNoZWQsIHRoZW4gd2Ugc3RvcmUgdGhlIGZvdW5kIGJidHMgcGFnZXMgaGVyZS4KKyAqCQlJdHMgYW4gYXJyYXkgYW5kIHN1cHBvcnRzIHVwIHRvIDggY2hpcHMgbm93CisgKiBAb2ZmczoJb2Zmc2V0IG9mIHRoZSBwYXR0ZXJuIGluIHRoZSBvb2IgYXJlYSBvZiB0aGUgcGFnZQorICogQHZlcm9mZnM6CW9mZnNldCBvZiB0aGUgYmJ0IHZlcnNpb24gY291bnRlciBpbiB0aGUgb29iIGFyZSBvZiB0aGUgcGFnZQorICogQHZlcnNpb246CXZlcnNpb24gcmVhZCBmcm9tIHRoZSBiYnQgcGFnZSBkdXJpbmcgc2NhbgorICogQGxlbjoJbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLCBpZiAwIG5vIHBhdHRlcm4gY2hlY2sgaXMgcGVyZm9ybWVkCisgKiBAbWF4YmxvY2tzOgltYXhpbXVtIG51bWJlciBvZiBibG9ja3MgdG8gc2VhcmNoIGZvciBhIGJidC4gVGhpcyBudW1iZXIgb2YKKyAqCQlibG9ja3MgaXMgcmVzZXJ2ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZGV2aWNlIHdoZXJlIHRoZSB0YWJsZXMgYXJlCisgKgkJd3JpdHRlbi4KKyAqIEByZXNlcnZlZF9ibG9ja19jb2RlOiBpZiBub24tMCwgdGhpcyBwYXR0ZXJuIGRlbm90ZXMgYSByZXNlcnZlZCAocmF0aGVyIHRoYW4KKyAqICAgICAgICAgICAgICBiYWQpIGJsb2NrIGluIHRoZSBzdG9yZWQgYmJ0CisgKiBAcGF0dGVybjoJcGF0dGVybiB0byBpZGVudGlmeSBiYWQgYmxvY2sgdGFibGUgb3IgZmFjdG9yeSBtYXJrZWQgZ29vZCAvCisgKgkJYmFkIGJsb2NrcywgY2FuIGJlIE5VTEwsIGlmIGxlbiA9IDAKICAqCiAgKiBEZXNjcmlwdG9yIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIG1hcmtlciBhbmQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZQogICogcGF0dGVybiB3aGljaCBpZGVudGlmaWVzIGdvb2QgYW5kIGJhZCBibG9ja3MuIFRoZSBhc3N1bXB0aW9uIGlzIG1hZGUKQEAgLTkwLDcgKzg5LDkgQEAKIC8qCiAgKiBDb25zdGFudHMgZm9yIG9vYiBjb25maWd1cmF0aW9uCiAgKi8KLSNkZWZpbmUgT05FTkFORF9CQURCTE9DS19QT1MJMAorI2RlZmluZSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUwkJNQorI2RlZmluZSBOQU5EX0xBUkdFX0JBREJMT0NLX1BPUwkJMAorI2RlZmluZSBPTkVOQU5EX0JBREJMT0NLX1BPUwkJMAogCiAvKgogICogQmFkIGJsb2NrIHNjYW5uaW5nIGVycm9ycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmggYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAppbmRleCA4OGQzZDhmLi5kZjg5ZjQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApAQCAtNTE4LDEwICs1MTgsMTEgQEAKICNkZWZpbmUgQ0ZJX01GUl9BTlkgMHhmZmZmCiAjZGVmaW5lIENGSV9JRF9BTlkgIDB4ZmZmZgogCi0jZGVmaW5lIENGSV9NRlJfQU1EIDB4MDAwMQotI2RlZmluZSBDRklfTUZSX0FUTUVMIDB4MDAxRgotI2RlZmluZSBDRklfTUZSX1NBTVNVTkcgMHgwMEVDCi0jZGVmaW5lIENGSV9NRlJfU1QgIDB4MDAyMCAJLyogU1RNaWNyb2VsZWN0cm9uaWNzICovCisjZGVmaW5lIENGSV9NRlJfQU1ECTB4MDAwMQorI2RlZmluZSBDRklfTUZSX0lOVEVMCTB4MDA4OQorI2RlZmluZSBDRklfTUZSX0FUTUVMCTB4MDAxRgorI2RlZmluZSBDRklfTUZSX1NBTVNVTkcJMHgwMEVDCisjZGVmaW5lIENGSV9NRlJfU1QJMHgwMDIwIC8qIFNUTWljcm9lbGVjdHJvbmljcyAqLwogCiB2b2lkIGNmaV9maXh1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGNmaV9maXh1cCogZml4dXBzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaAppbmRleCBkNGYzOGM1Li5kMGJmNDIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaApAQCAtMzgsNiArMzgsMTUgQEAKIAlGTF9YSVBfV0hJTEVfRVJBU0lORywKIAlGTF9YSVBfV0hJTEVfV1JJVElORywKIAlGTF9TSFVURE9XTiwKKwkvKiBUaGVzZSAyIGNvbWUgZnJvbSBuYW5kX3N0YXRlX3QsIHdoaWNoIGhhcyBiZWVuIHVuaWZpZWQgaGVyZSAqLworCUZMX1JFQURJTkcsCisJRkxfQ0FDSEVEUFJHLAorCS8qIFRoZXNlIDQgY29tZSBmcm9tIG9uZW5hbmRfc3RhdGVfdCwgd2hpY2ggaGFzIGJlZW4gdW5pZmllZCBoZXJlICovCisJRkxfUkVTRVRJTkcsCisJRkxfT1RQSU5HLAorCUZMX1BSRVBBUklOR19FUkFTRSwKKwlGTF9WRVJJRllJTkdfRVJBU0UsCisKIAlGTF9VTktOT1dOCiB9IGZsc3RhdGVfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IDdhMjMyYTkuLmNjYWI5ZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9iYm0uaD4KIAogc3RydWN0IG10ZF9pbmZvOwogLyogU2NhbiBhbmQgaWRlbnRpZnkgYSBOQU5EIGRldmljZSAqLwpAQCAtMTY4LDcgKzE3MCw2IEBACiAvKiBDaGlwIGRvZXMgbm90IGFsbG93IHN1YnBhZ2Ugd3JpdGVzICovCiAjZGVmaW5lIE5BTkRfTk9fU1VCUEFHRV9XUklURQkweDAwMDAwMjAwCiAKLQogLyogT3B0aW9ucyB2YWxpZCBmb3IgU2Ftc3VuZyBsYXJnZSBwYWdlIGRldmljZXMgKi8KICNkZWZpbmUgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgXAogCShOQU5EX05PX1BBRERJTkcgfCBOQU5EX0NBQ0hFUFJHIHwgTkFORF9DT1BZQkFDSykKQEAgLTE5NCw2ICsxOTUsOSBAQAogLyogVGhpcyBvcHRpb24gaXMgZGVmaW5lZCBpZiB0aGUgYm9hcmQgZHJpdmVyIGFsbG9jYXRlcyBpdHMgb3duIGJ1ZmZlcnMKICAgIChlLmcuIGJlY2F1c2UgaXQgbmVlZHMgdGhlbSBETUEtY29oZXJlbnQgKi8KICNkZWZpbmUgTkFORF9PV05fQlVGRkVSUwkweDAwMDQwMDAwCisvKiBDaGlwIG1heSBub3QgZXhpc3QsIHNvIHNpbGVuY2UgYW55IGVycm9ycyBpbiBzY2FuICovCisjZGVmaW5lIE5BTkRfU0NBTl9TSUxFTlRfTk9ERVYJMHgwMDA4MDAwMAorCiAvKiBPcHRpb25zIHNldCBieSBuYW5kIHNjYW4gKi8KIC8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIGNvbnRyb2xsZXIgc3RydWN0ICovCiAjZGVmaW5lIE5BTkRfQ09OVFJPTExFUl9BTExPQwkweDgwMDAwMDAwCkBAIC0yMDIsMjAgKzIwNiw2IEBACiAjZGVmaW5lIE5BTkRfQ0lfQ0hJUE5SX01TSwkweDAzCiAjZGVmaW5lIE5BTkRfQ0lfQ0VMTFRZUEVfTVNLCTB4MEMKIAotLyoKLSAqIG5hbmRfc3RhdGVfdCAtIGNoaXAgc3RhdGVzCi0gKiBFbnVtZXJhdGlvbiBmb3IgTkFORCBmbGFzaCBjaGlwIHN0YXRlCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0JRkxfUkVBRFksCi0JRkxfUkVBRElORywKLQlGTF9XUklUSU5HLAotCUZMX0VSQVNJTkcsCi0JRkxfU1lOQ0lORywKLQlGTF9DQUNIRURQUkcsCi0JRkxfUE1fU1VTUEVOREVELAotfSBuYW5kX3N0YXRlX3Q7Ci0KIC8qIEtlZXAgZ2NjIGhhcHB5ICovCiBzdHJ1Y3QgbmFuZF9jaGlwOwogCkBAIC00MDIsNyArMzkyLDcgQEAKIAl1aW50OF90CQljZWxsaW5mbzsKIAlpbnQJCWJhZGJsb2NrcG9zOwogCi0JbmFuZF9zdGF0ZV90CXN0YXRlOworCWZsc3RhdGVfdAlzdGF0ZTsKIAogCXVpbnQ4X3QJCSpvb2JfcG9pOwogCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgICpjb250cm9sbGVyOwpAQCAtNDcwLDc1ICs0NjAsNiBAQAogZXh0ZXJuIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiBuYW5kX2ZsYXNoX2lkc1tdOwogZXh0ZXJuIHN0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgbmFuZF9tYW51Zl9pZHNbXTsKIAotLyoqCi0gKiBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgLSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvcgotICogQG9wdGlvbnM6CW9wdGlvbnMgZm9yIHRoaXMgZGVzY3JpcHRvcgotICogQHBhZ2VzOgl0aGUgcGFnZShzKSB3aGVyZSB3ZSBmaW5kIHRoZSBiYnQsIHVzZWQgd2l0aCBvcHRpb24gQkJUX0FCU1BBR0UKLSAqCQl3aGVuIGJidCBpcyBzZWFyY2hlZCwgdGhlbiB3ZSBzdG9yZSB0aGUgZm91bmQgYmJ0cyBwYWdlcyBoZXJlLgotICoJCUl0cyBhbiBhcnJheSBhbmQgc3VwcG9ydHMgdXAgdG8gOCBjaGlwcyBub3cKLSAqIEBvZmZzOglvZmZzZXQgb2YgdGhlIHBhdHRlcm4gaW4gdGhlIG9vYiBhcmVhIG9mIHRoZSBwYWdlCi0gKiBAdmVyb2ZmczoJb2Zmc2V0IG9mIHRoZSBiYnQgdmVyc2lvbiBjb3VudGVyIGluIHRoZSBvb2IgYXJlIG9mIHRoZSBwYWdlCi0gKiBAdmVyc2lvbjoJdmVyc2lvbiByZWFkIGZyb20gdGhlIGJidCBwYWdlIGR1cmluZyBzY2FuCi0gKiBAbGVuOglsZW5ndGggb2YgdGhlIHBhdHRlcm4sIGlmIDAgbm8gcGF0dGVybiBjaGVjayBpcyBwZXJmb3JtZWQKLSAqIEBtYXhibG9ja3M6CW1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB0byBzZWFyY2ggZm9yIGEgYmJ0LiBUaGlzIG51bWJlciBvZgotICoJCWJsb2NrcyBpcyByZXNlcnZlZCBhdCB0aGUgZW5kIG9mIHRoZSBkZXZpY2Ugd2hlcmUgdGhlIHRhYmxlcyBhcmUKLSAqCQl3cml0dGVuLgotICogQHJlc2VydmVkX2Jsb2NrX2NvZGU6IGlmIG5vbi0wLCB0aGlzIHBhdHRlcm4gZGVub3RlcyBhIHJlc2VydmVkIChyYXRoZXIgdGhhbgotICogICAgICAgICAgICAgIGJhZCkgYmxvY2sgaW4gdGhlIHN0b3JlZCBiYnQKLSAqIEBwYXR0ZXJuOglwYXR0ZXJuIHRvIGlkZW50aWZ5IGJhZCBibG9jayB0YWJsZSBvciBmYWN0b3J5IG1hcmtlZCBnb29kIC8KLSAqCQliYWQgYmxvY2tzLCBjYW4gYmUgTlVMTCwgaWYgbGVuID0gMAotICoKLSAqIERlc2NyaXB0b3IgZm9yIHRoZSBiYWQgYmxvY2sgdGFibGUgbWFya2VyIGFuZCB0aGUgZGVzY3JpcHRvciBmb3IgdGhlCi0gKiBwYXR0ZXJuIHdoaWNoIGlkZW50aWZpZXMgZ29vZCBhbmQgYmFkIGJsb2Nrcy4gVGhlIGFzc3VtcHRpb24gaXMgbWFkZQotICogdGhhdCB0aGUgcGF0dGVybiBhbmQgdGhlIHZlcnNpb24gY291bnQgYXJlIGFsd2F5cyBsb2NhdGVkIGluIHRoZSBvb2IgYXJlYQotICogb2YgdGhlIGZpcnN0IGJsb2NrLgotICovCi1zdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgewotCWludAlvcHRpb25zOwotCWludAlwYWdlc1tOQU5EX01BWF9DSElQU107Ci0JaW50CW9mZnM7Ci0JaW50CXZlcm9mZnM7Ci0JdWludDhfdAl2ZXJzaW9uW05BTkRfTUFYX0NISVBTXTsKLQlpbnQJbGVuOwotCWludAltYXhibG9ja3M7Ci0JaW50CXJlc2VydmVkX2Jsb2NrX2NvZGU7Ci0JdWludDhfdAkqcGF0dGVybjsKLX07Ci0KLS8qIE9wdGlvbnMgZm9yIHRoZSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvcnMgKi8KLQotLyogVGhlIG51bWJlciBvZiBiaXRzIHVzZWQgcGVyIGJsb2NrIGluIHRoZSBiYnQgb24gdGhlIGRldmljZSAqLwotI2RlZmluZSBOQU5EX0JCVF9OUkJJVFNfTVNLCTB4MDAwMDAwMEYKLSNkZWZpbmUgTkFORF9CQlRfMUJJVAkJMHgwMDAwMDAwMQotI2RlZmluZSBOQU5EX0JCVF8yQklUCQkweDAwMDAwMDAyCi0jZGVmaW5lIE5BTkRfQkJUXzRCSVQJCTB4MDAwMDAwMDQKLSNkZWZpbmUgTkFORF9CQlRfOEJJVAkJMHgwMDAwMDAwOAotLyogVGhlIGJhZCBibG9jayB0YWJsZSBpcyBpbiB0aGUgbGFzdCBnb29kIGJsb2NrIG9mIHRoZSBkZXZpY2UgKi8KLSNkZWZpbmUJTkFORF9CQlRfTEFTVEJMT0NLCTB4MDAwMDAwMTAKLS8qIFRoZSBiYnQgaXMgYXQgdGhlIGdpdmVuIHBhZ2UsIGVsc2Ugd2UgbXVzdCBzY2FuIGZvciB0aGUgYmJ0ICovCi0jZGVmaW5lIE5BTkRfQkJUX0FCU1BBR0UJMHgwMDAwMDAyMAotLyogVGhlIGJidCBpcyBhdCB0aGUgZ2l2ZW4gcGFnZSwgZWxzZSB3ZSBtdXN0IHNjYW4gZm9yIHRoZSBiYnQgKi8KLSNkZWZpbmUgTkFORF9CQlRfU0VBUkNICQkweDAwMDAwMDQwCi0vKiBiYnQgaXMgc3RvcmVkIHBlciBjaGlwIG9uIG11bHRpY2hpcCBkZXZpY2VzICovCi0jZGVmaW5lIE5BTkRfQkJUX1BFUkNISVAJMHgwMDAwMDA4MAotLyogYmJ0IGhhcyBhIHZlcnNpb24gY291bnRlciBhdCBvZmZzZXQgdmVyb2ZmcyAqLwotI2RlZmluZSBOQU5EX0JCVF9WRVJTSU9OCTB4MDAwMDAxMDAKLS8qIENyZWF0ZSBhIGJidCBpZiBub25lIGF4aXN0cyAqLwotI2RlZmluZSBOQU5EX0JCVF9DUkVBVEUJCTB4MDAwMDAyMDAKLS8qIFNlYXJjaCBnb29kIC8gYmFkIHBhdHRlcm4gdGhyb3VnaCBhbGwgcGFnZXMgb2YgYSBibG9jayAqLwotI2RlZmluZSBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMJMHgwMDAwMDQwMAotLyogU2NhbiBibG9jayBlbXB0eSBkdXJpbmcgZ29vZCAvIGJhZCBibG9jayBzY2FuICovCi0jZGVmaW5lIE5BTkRfQkJUX1NDQU5FTVBUWQkweDAwMDAwODAwCi0vKiBXcml0ZSBiYnQgaWYgbmVjY2VjYXJ5ICovCi0jZGVmaW5lIE5BTkRfQkJUX1dSSVRFCQkweDAwMDAxMDAwCi0vKiBSZWFkIGFuZCB3cml0ZSBiYWNrIGJsb2NrIGNvbnRlbnRzIHdoZW4gd3JpdGluZyBiYnQgKi8KLSNkZWZpbmUgTkFORF9CQlRfU0FWRUNPTlRFTlQJMHgwMDAwMjAwMAotLyogU2VhcmNoIGdvb2QgLyBiYWQgcGF0dGVybiBvbiB0aGUgZmlyc3QgYW5kIHRoZSBzZWNvbmQgcGFnZSAqLwotI2RlZmluZSBOQU5EX0JCVF9TQ0FOMk5EUEFHRQkweDAwMDA0MDAwCi0KLS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgdG8gc2NhbiBmb3IgYSBiYnQgKi8KLSNkZWZpbmUgTkFORF9CQlRfU0NBTl9NQVhCTE9DS1MJNAotCiBleHRlcm4gaW50IG5hbmRfc2Nhbl9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOwogZXh0ZXJuIGludCBuYW5kX3VwZGF0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKIGV4dGVybiBpbnQgbmFuZF9kZWZhdWx0X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CkBAIC01NDgsMTIgKzQ2OSw2IEBACiBleHRlcm4gaW50IG5hbmRfZG9fcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCiAJCQlzaXplX3QgKiByZXRsZW4sIHVpbnQ4X3QgKiBidWYpOwogCi0vKgotKiBDb25zdGFudHMgZm9yIG9vYiBjb25maWd1cmF0aW9uCi0qLwotI2RlZmluZSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUwkJNQotI2RlZmluZSBOQU5EX0xBUkdFX0JBREJMT0NLX1BPUwkJMAotCiAvKioKICAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgLSBjaGlwIGxldmVsIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBucl9jaGlwczoJCW1heC4gbnVtYmVyIG9mIGNoaXBzIHRvIHNjYW4gZm9yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kX2VjYy5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZF9lY2MuaAppbmRleCAwNTJlYThjLi40MWJjMDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kX2VjYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmgKQEAgLTE2LDcgKzE2LDEzIEBACiBzdHJ1Y3QgbXRkX2luZm87CiAKIC8qCi0gKiBDYWxjdWxhdGUgMyBieXRlIEVDQyBjb2RlIGZvciAyNTYgYnl0ZSBibG9jaworICogQ2FsY3VsYXRlIDMgYnl0ZSBFQ0MgY29kZSBmb3IgZWNjc2l6ZSBieXRlIGJsb2NrCisgKi8KK3ZvaWQgX19uYW5kX2NhbGN1bGF0ZV9lY2MoY29uc3QgdV9jaGFyICpkYXQsIHVuc2lnbmVkIGludCBlY2NzaXplLAorCQkJCXVfY2hhciAqZWNjX2NvZGUpOworCisvKgorICogQ2FsY3VsYXRlIDMgYnl0ZSBFQ0MgY29kZSBmb3IgMjU2LzUxMiBieXRlIGJsb2NrCiAgKi8KIGludCBuYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKTsKIApAQCAtMjcsNyArMzMsNyBAQAogCQkJdW5zaWduZWQgaW50IGVjY3NpemUpOwogCiAvKgotICogRGV0ZWN0IGFuZCBjb3JyZWN0IGEgMSBiaXQgZXJyb3IgZm9yIDI1NiBieXRlIGJsb2NrCisgKiBEZXRlY3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2LzUxMiBieXRlIGJsb2NrCiAgKi8KIGludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKaW5kZXggNGU0OWYzMy4uNTUwOWViMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqICBDb3B5cmlnaHQgwqkgMjAwNS0yMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqICBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvZmxhc2hjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmRfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9iYm0uaD4KIApAQCAtMjUsMjIgKzI2LDYgQEAKIC8qIEZyZWUgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIE9uZU5BTkQgZGV2aWNlICovCiBleHRlcm4gdm9pZCBvbmVuYW5kX3JlbGVhc2Uoc3RydWN0IG10ZF9pbmZvICptdGQpOwogCi0vKgotICogb25lbmFuZF9zdGF0ZV90IC0gY2hpcCBzdGF0ZXMKLSAqIEVudW1lcmF0aW9uIGZvciBPbmVOQU5EIGZsYXNoIGNoaXAgc3RhdGUKLSAqLwotdHlwZWRlZiBlbnVtIHsKLQlGTF9SRUFEWSwKLQlGTF9SRUFESU5HLAotCUZMX1dSSVRJTkcsCi0JRkxfRVJBU0lORywKLQlGTF9TWU5DSU5HLAotCUZMX0xPQ0tJTkcsCi0JRkxfUkVTRVRJTkcsCi0JRkxfT1RQSU5HLAotCUZMX1BNX1NVU1BFTkRFRCwKLX0gb25lbmFuZF9zdGF0ZV90OwotCiAvKioKICAqIHN0cnVjdCBvbmVuYW5kX2J1ZmZlcnJhbSAtIE9uZU5BTkQgQnVmZmVyUkFNIERhdGEKICAqIEBibG9ja3BhZ2U6CQlibG9jayAmIHBhZ2UgYWRkcmVzcyBpbiBCdWZmZXJSQU0KQEAgLTEzNyw3ICsxMjIsNyBAQAogCiAJc3BpbmxvY2tfdAkJY2hpcF9sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90CXdxOwotCW9uZW5hbmRfc3RhdGVfdAkJc3RhdGU7CisJZmxzdGF0ZV90CQlzdGF0ZTsKIAl1bnNpZ25lZCBjaGFyCQkqcGFnZV9idWY7CiAJdW5zaWduZWQgY2hhcgkJKm9vYl9idWY7CiAKQEAgLTE1Miw2ICsxMzcsOCBAQAogLyoKICAqIEhlbHBlciBtYWNyb3MKICAqLworI2RlZmluZSBPTkVOQU5EX1BBR0VTX1BFUl9CTE9DSyAgICAgICAgKDE8PDYpCisKICNkZWZpbmUgT05FTkFORF9DVVJSRU5UX0JVRkZFUlJBTSh0aGlzKQkJKHRoaXMtPmJ1ZmZlcnJhbV9pbmRleCkKICNkZWZpbmUgT05FTkFORF9ORVhUX0JVRkZFUlJBTSh0aGlzKQkJKHRoaXMtPmJ1ZmZlcnJhbV9pbmRleCBeIDEpCiAjZGVmaW5lIE9ORU5BTkRfU0VUX05FWFRfQlVGRkVSUkFNKHRoaXMpCSh0aGlzLT5idWZmZXJyYW1faW5kZXggXj0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKaW5kZXggYWNhZGJmNS4uY2Q2ZjNiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKQEAgLTEzMSw2ICsxMzEsOCBAQAogI2RlZmluZSBPTkVOQU5EX0NNRF9MT0NLX1RJR0hUCQkoMHgyQykKICNkZWZpbmUgT05FTkFORF9DTURfVU5MT0NLX0FMTAkJKDB4MjcpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX0VSQVNFCQkoMHg5NCkKKyNkZWZpbmUgT05FTkFORF9DTURfTVVMVElCTE9DS19FUkFTRQkoMHg5NSkKKyNkZWZpbmUgT05FTkFORF9DTURfRVJBU0VfVkVSSUZZCSgweDcxKQogI2RlZmluZSBPTkVOQU5EX0NNRF9SRVNFVAkJKDB4RjApCiAjZGVmaW5lIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MJCSgweDY1KQogI2RlZmluZSBPTkVOQU5EX0NNRF9SRUFESUQJCSgweDkwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCmluZGV4IDAyODk0NjcuLjA1YjQ0MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKQEAgLTcyLDggKzcyLDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBmaWxlICpsb29rdXBfaW5zdGFudGlhdGVfZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQlpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpOwotZXh0ZXJuIHN0cnVjdCBmaWxlICpuYW1laWRhdGFfdG9fZmlscChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IGZsYWdzKTsKLWV4dGVybiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqKTsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IGM0YzA2MDIuLjliODI5OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC0xMjgsNiArMTI4LDggQEAKICNkZWZpbmUgU0VRNF9TVEFUVVNfUkVDQUxMQUJMRV9TVEFURV9SRVZPS0VECTB4MDAwMDAwNDAKICNkZWZpbmUgU0VRNF9TVEFUVVNfTEVBU0VfTU9WRUQJCQkweDAwMDAwMDgwCiAjZGVmaW5lIFNFUTRfU1RBVFVTX1JFU1RBUlRfUkVDTEFJTV9ORUVERUQJMHgwMDAwMDEwMAorI2RlZmluZSBTRVE0X1NUQVRVU19DQl9QQVRIX0RPV05fU0VTU0lPTgkweDAwMDAwMjAwCisjZGVmaW5lIFNFUTRfU1RBVFVTX0JBQ0tDSEFOTkVMX0ZBVUxUCQkweDAwMDAwNDAwCiAKICNkZWZpbmUgTkZTNF9NQVhfVUlOVDY0CSh+KHU2NCkwKQogCkBAIC01MjgsNiArNTMwLDcgQEAKIAlORlNQUk9DNF9DTE5UX0RFU1RST1lfU0VTU0lPTiwKIAlORlNQUk9DNF9DTE5UX1NFUVVFTkNFLAogCU5GU1BST0M0X0NMTlRfR0VUX0xFQVNFX1RJTUUsCisJTkZTUFJPQzRfQ0xOVF9SRUNMQUlNX0NPTVBMRVRFLAogfTsKIAogLyogbmZzNDEgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDMyMDU2OWUuLjM0ZmM2YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMjA5LDYgKzIwOSw3IEBACiAJdW5zaWduZWQgbG9uZwkJCXNlc3Npb25fc3RhdGU7CiAJdTMyCQkJCWhhc2hfYWxnOwogCXUzMgkJCQlzc3ZfbGVuOworCXN0cnVjdCBjb21wbGV0aW9uCQljb21wbGV0ZTsKIAogCS8qIFRoZSBmb3JlIGFuZCBiYWNrIGNoYW5uZWwgKi8KIAlzdHJ1Y3QgbmZzNF9jaGFubmVsX2F0dHJzCWZjX2F0dHJzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAppbmRleCA2MmY2M2ZiLi44OWIyODgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX05GU19YRFJfSAogCiAjaW5jbHVkZSA8bGludXgvbmZzYWNsLmg+CisjaW5jbHVkZSA8bGludXgvbmZzMy5oPgogCiAvKgogICogVG8gY2hhbmdlIHRoZSBtYXhpbXVtIHJzaXplIGFuZCB3c2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIE5GUyBjbGllbnQsIGFkanVzdApAQCAtMTcwLDggKzE3MSw5IEBACiBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgewogCXN0cnVjdCBuZnM0X3Nlc3Npb24JKnNyX3Nlc3Npb247CiAJdTgJCQlzcl9zbG90aWQ7CS8qIHNsb3QgdXNlZCB0byBzZW5kIHJlcXVlc3QgKi8KLQl1bnNpZ25lZCBsb25nCQlzcl9yZW5ld2FsX3RpbWU7CiAJaW50CQkJc3Jfc3RhdHVzOwkvKiBzZXF1ZW5jZSBvcGVyYXRpb24gc3RhdHVzICovCisJdW5zaWduZWQgbG9uZwkJc3JfcmVuZXdhbF90aW1lOworCXUzMgkJCXNyX3N0YXR1c19mbGFnczsKIH07CiAKIHN0cnVjdCBuZnM0X2dldF9sZWFzZV90aW1lX2FyZ3MgewpAQCAtOTM4LDYgKzk0MCwxNiBAQAogc3RydWN0IG5mczQxX2NyZWF0ZV9zZXNzaW9uX3JlcyB7CiAJc3RydWN0IG5mc19jbGllbnQJICAgICAgICpjbGllbnQ7CiB9OworCitzdHJ1Y3QgbmZzNDFfcmVjbGFpbV9jb21wbGV0ZV9hcmdzIHsKKwkvKiBJbiB0aGUgZnV0dXJlIGV4dGVuZCB0byBpbmNsdWRlIGN1cnJfZmggZm9yIHVzZSB3aXRoIG1pZ3JhdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJCQlvbmVfZnM6MTsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzCXNlcV9hcmdzOworfTsKKworc3RydWN0IG5mczQxX3JlY2xhaW1fY29tcGxldGVfcmVzIHsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMJc2VxX3JlczsKK307CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0cnVjdCBuZnNfcGFnZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCmluZGV4IDQzMDExYjYuLmYzMjFiNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNhY2wuaApAQCAtMjksNiArMjksNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KIAogLyogTWF4aW11bSBudW1iZXIgb2YgQUNMIGVudHJpZXMgb3ZlciBORlMgKi8KICNkZWZpbmUgTkZTX0FDTF9NQVhfRU5UUklFUwkxMDI0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTNmNTg5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvbGludXgvbmZzZC9jYWNoZS5oCi0gKgotICogUmVxdWVzdCByZXBseSBjYWNoZS4gVGhpcyB3YXMgaGVhdmlseSBpbnNwaXJlZCBieSB0aGUKLSAqIGltcGxlbWVudGF0aW9uIGluIDQuM0JTRC80LjRCU0QuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgotICovCi0KLSNpZm5kZWYgTkZTQ0FDSEVfSAotI2RlZmluZSBORlNDQUNIRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotCi0vKgotICogUmVwcmVzZW50YXRpb24gb2YgYSByZXBseSBjYWNoZSBlbnRyeS4KLSAqLwotc3RydWN0IHN2Y19jYWNoZXJlcCB7Ci0Jc3RydWN0IGhsaXN0X25vZGUJY19oYXNoOwotCXN0cnVjdCBsaXN0X2hlYWQJY19scnU7Ci0KLQl1bnNpZ25lZCBjaGFyCQljX3N0YXRlLAkvKiB1bnVzZWQsIGlucHJvZywgZG9uZSAqLwotCQkJCWNfdHlwZSwJCS8qIHN0YXR1cywgYnVmZmVyICovCi0JCQkJY19zZWN1cmUgOiAxOwkvKiByZXEgY2FtZSBmcm9tIHBvcnQgPCAxMDI0ICovCi0Jc3RydWN0IHNvY2thZGRyX2luCWNfYWRkcjsKLQlfX2JlMzIJCQljX3hpZDsKLQl1MzIJCQljX3Byb3Q7Ci0JdTMyCQkJY19wcm9jOwotCXUzMgkJCWNfdmVyczsKLQl1bnNpZ25lZCBsb25nCQljX3RpbWVzdGFtcDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBrdmVjCXVfdmVjOwotCQlfX2JlMzIJCXVfc3RhdHVzOwotCX0JCQljX3U7Ci19OwotCi0jZGVmaW5lIGNfcmVwbHZlYwkJY191LnVfdmVjCi0jZGVmaW5lIGNfcmVwbHN0YXQJCWNfdS51X3N0YXR1cwotCi0vKiBjYWNoZSBlbnRyeSBzdGF0ZXMgKi8KLWVudW0gewotCVJDX1VOVVNFRCwKLQlSQ19JTlBST0csCi0JUkNfRE9ORQotfTsKLQotLyogcmV0dXJuIHZhbHVlcyAqLwotZW51bSB7Ci0JUkNfRFJPUElULAotCVJDX1JFUExZLAotCVJDX0RPSVQsCi0JUkNfSU5UUgotfTsKLQotLyoKLSAqIENhY2hlIHR5cGVzLgotICogV2UgbWF5IHdhbnQgdG8gYWRkIG1vcmUgdHlwZXMgb25lIGRheSwgZS5nLiBmb3IgZGlyb3ByZXMgYW5kCi0gKiBhdHRyc3RhdCByZXBsaWVzLiBVc2luZyBjYWNoZSBlbnRyaWVzIHdpdGggZml4ZWQgbGVuZ3RoIGluc3RlYWQKLSAqIG9mIGJ1ZmZlciBwb2ludGVycyBtYXkgYmUgbW9yZSBlZmZpY2llbnQuCi0gKi8KLWVudW0gewotCVJDX05PQ0FDSEUsCi0JUkNfUkVQTFNUQVQsCi0JUkNfUkVQTEJVRkYsCi19OwotCi0vKgotICogSWYgcmVxdWVzdHMgYXJlIHJldHJhbnNtaXR0ZWQgd2l0aGluIHRoaXMgaW50ZXJ2YWwsIHRoZXkncmUgZHJvcHBlZC4KLSAqLwotI2RlZmluZSBSQ19ERUxBWQkJKEhaLzUpCi0KLWludAluZnNkX3JlcGx5X2NhY2hlX2luaXQodm9pZCk7Ci12b2lkCW5mc2RfcmVwbHlfY2FjaGVfc2h1dGRvd24odm9pZCk7Ci1pbnQJbmZzZF9jYWNoZV9sb29rdXAoc3RydWN0IHN2Y19ycXN0ICosIGludCk7Ci12b2lkCW5mc2RfY2FjaGVfdXBkYXRlKHN0cnVjdCBzdmNfcnFzdCAqLCBpbnQsIF9fYmUzMiAqKTsKLQotI2lmZGVmIENPTkZJR19ORlNEX1Y0Ci12b2lkCW5mc2Q0X3NldF9zdGF0cChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnN0YXRwKTsKLSNlbHNlICAvKiBDT05GSUdfTkZTRF9WNCAqLwotc3RhdGljIGlubGluZSB2b2lkIG5mc2Q0X3NldF9zdGF0cChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnN0YXRwKQotewotfQotI2VuZGlmIC8qIENPTkZJR19ORlNEX1Y0ICovCi0KLSNlbmRpZiAvKiBORlNDQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmgKaW5kZXggYTZkOWVmMi4uOGFlNzhhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL2V4cG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaApAQCAtMTIsNyArMTIsNyBAQAogCiAjIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9pbi5oPgorIyBpbmNsdWRlIDxsaW51eC9uZnNkL25mc2ZoLmg+CiAjZW5kaWYKIAogLyoKQEAgLTM5LDExICszOSwyMyBAQAogI2RlZmluZSBORlNFWFBfRlNJRAkJMHgyMDAwCiAjZGVmaW5lCU5GU0VYUF9DUk9TU01PVU5UCTB4NDAwMAogI2RlZmluZQlORlNFWFBfTk9BQ0wJCTB4ODAwMAkvKiByZXNlcnZlZCBmb3IgcG9zc2libGUgQUNMIHJlbGF0ZWQgdXNlICovCi0jZGVmaW5lIE5GU0VYUF9BTExGTEFHUwkJMHhGRTNGCisvKgorICogVGhlIE5GU0VYUF9WNFJPT1QgZmxhZyBjYXVzZXMgdGhlIGtlcm5lbCB0byBnaXZlIGFjY2VzcyBvbmx5IHRvIE5GU3Y0CisgKiBjbGllbnRzLCBhbmQgb25seSB0byB0aGUgc2luZ2xlIGRpcmVjdG9yeSB0aGF0IGlzIHRoZSByb290IG9mIHRoZQorICogZXhwb3J0OyBmdXJ0aGVyIGxvb2t1cCBhbmQgcmVhZGRpciBvcGVyYXRpb25zIGFyZSB0cmVhdGVkIGFzIGlmIGV2ZXJ5CisgKiBzdWJkaXJlY3Rvcnkgd2FzIGEgbW91bnRwb2ludCwgYW5kIGlnbm9yZWQgaWYgdGhleSBhcmUgbm90IHRoZW1zZWx2ZXMKKyAqIGV4cG9ydGVkLiAgVGhpcyBpcyB1c2VkIGJ5IG5mc2QgYW5kIG1vdW50ZCB0byBjb25zdHJ1Y3QgdGhlIE5GU3Y0CisgKiBwc2V1ZG9maWxlc3lzdGVtLCB3aGljaCBwcm92aWRlcyBhY2Nlc3Mgb25seSB0byBwYXRocyBsZWFkaW5nIHRvIGVhY2gKKyAqIGV4cG9ydGVkIGZpbGVzeXN0ZW0uCisgKi8KKyNkZWZpbmUJTkZTRVhQX1Y0Uk9PVAkJMHgxMDAwMAorLyogQWxsIGZsYWdzIHRoYXQgd2UgY2xhaW0gdG8gc3VwcG9ydC4gIChOb3RlIHdlIGRvbid0IHN1cHBvcnQgTk9BQ0wuKSAqLworI2RlZmluZSBORlNFWFBfQUxMRkxBR1MJCTB4MTdFM0YKIAogLyogVGhlIGZsYWdzIHRoYXQgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIHNlY3VyaXR5IGZsYXZvcjogKi8KICNkZWZpbmUgTkZTRVhQX1NFQ0lORk9fRkxBR1MJKE5GU0VYUF9SRUFET05MWSB8IE5GU0VYUF9ST09UU1FVQVNIIFwKLQkJCQkJfCBORlNFWFBfQUxMU1FVQVNIKQorCQkJCQl8IE5GU0VYUF9BTExTUVVBU0ggXAorCQkJCQl8IE5GU0VYUF9JTlNFQ1VSRV9QT1JUKQogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC0xMDgsNyArMTIwLDYgQEAKIAlzdHJ1Y3QgcGF0aAkJZWtfcGF0aDsKIH07CiAKLSNkZWZpbmUgRVhfU0VDVVJFKGV4cCkJCSghKChleHApLT5leF9mbGFncyAmIE5GU0VYUF9JTlNFQ1VSRV9QT1JUKSkKICNkZWZpbmUgRVhfSVNTWU5DKGV4cCkJCSghKChleHApLT5leF9mbGFncyAmIE5GU0VYUF9BU1lOQykpCiAjZGVmaW5lIEVYX05PSElERShleHApCQkoKGV4cCktPmV4X2ZsYWdzICYgTkZTRVhQX05PSElERSkKICNkZWZpbmUgRVhfV0dBVEhFUihleHApCQkoKGV4cCktPmV4X2ZsYWdzICYgTkZTRVhQX0dBVEhFUkVEX1dSSVRFUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTBmZmRkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKLSAqCi0gKiBIb2RnZS1wb2RnZSBjb2xsZWN0aW9uIG9mIGtuZnNkLXJlbGF0ZWQgc3R1ZmYuCi0gKiBJIHdpbGwgc29ydCB0aGlzIG91dCBsYXRlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KLSAqLwotCi0jaWZuZGVmIExJTlVYX05GU0RfTkZTRF9ICi0jZGVmaW5lIExJTlVYX05GU0RfTkZTRF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW91bnQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25mc2QvZGVidWcuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2ZoLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9leHBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3N0YXRzLmg+Ci0vKgotICogbmZzZCB2ZXJzaW9uCi0gKi8KLSNkZWZpbmUgTkZTRF9TVVBQT1JURURfTUlOT1JfVkVSU0lPTgkxCi0KLS8qCi0gKiBGbGFncyBmb3IgbmZzZF9wZXJtaXNzaW9uCi0gKi8KLSNkZWZpbmUgTkZTRF9NQVlfTk9QCQkwCi0jZGVmaW5lIE5GU0RfTUFZX0VYRUMJCTEgLyogPT0gTUFZX0VYRUMgKi8KLSNkZWZpbmUgTkZTRF9NQVlfV1JJVEUJCTIgLyogPT0gTUFZX1dSSVRFICovCi0jZGVmaW5lIE5GU0RfTUFZX1JFQUQJCTQgLyogPT0gTUFZX1JFQUQgKi8KLSNkZWZpbmUgTkZTRF9NQVlfU0FUVFIJCTgKLSNkZWZpbmUgTkZTRF9NQVlfVFJVTkMJCTE2Ci0jZGVmaW5lIE5GU0RfTUFZX0xPQ0sJCTMyCi0jZGVmaW5lIE5GU0RfTUFZX09XTkVSX09WRVJSSURFCTY0Ci0jZGVmaW5lIE5GU0RfTUFZX0xPQ0FMX0FDQ0VTUwkxMjggLyogSVJJWCBkb2luZyBsb2NhbCBhY2Nlc3MgY2hlY2sgb24gZGV2aWNlIHNwZWNpYWwgZmlsZSovCi0jZGVmaW5lIE5GU0RfTUFZX0JZUEFTU19HU1NfT05fUk9PVCAyNTYKLQotI2RlZmluZSBORlNEX01BWV9DUkVBVEUJCShORlNEX01BWV9FWEVDfE5GU0RfTUFZX1dSSVRFKQotI2RlZmluZSBORlNEX01BWV9SRU1PVkUJCShORlNEX01BWV9FWEVDfE5GU0RfTUFZX1dSSVRFfE5GU0RfTUFZX1RSVU5DKQotCi0vKgotICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlYWRkaXIKLSAqLwotc3RydWN0IHJlYWRkaXJfY2QgewotCV9fYmUzMgkJCWVycjsJLyogMCwgbmZzZXJyLCBvciBuZnNlcnJfZW9mICovCi19OwotdHlwZWRlZiBpbnQgKCpuZnNkX2Rpcm9wX3QpKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwgaW50KTsKLQotZXh0ZXJuIHN0cnVjdCBzdmNfcHJvZ3JhbQluZnNkX3Byb2dyYW07Ci1leHRlcm4gc3RydWN0IHN2Y192ZXJzaW9uCW5mc2RfdmVyc2lvbjIsIG5mc2RfdmVyc2lvbjMsCi0JCQkJbmZzZF92ZXJzaW9uNDsKLWV4dGVybiB1MzIJCQluZnNkX3N1cHBvcnRlZF9taW5vcnZlcnNpb247Ci1leHRlcm4gc3RydWN0IG11dGV4CQluZnNkX211dGV4OwotZXh0ZXJuIHN0cnVjdCBzdmNfc2VydgkJKm5mc2Rfc2VydjsKLWV4dGVybiBzcGlubG9ja190CQluZnNkX2RyY19sb2NrOwotZXh0ZXJuIHVuc2lnbmVkIGludAkJbmZzZF9kcmNfbWF4X21lbTsKLWV4dGVybiB1bnNpZ25lZCBpbnQJCW5mc2RfZHJjX21lbV91c2VkOwotCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG5mc19leHBvcnRzX29wOwotCi0vKgotICogRnVuY3Rpb24gcHJvdG90eXBlcy4KLSAqLwotaW50CQluZnNkX3N2Yyh1bnNpZ25lZCBzaG9ydCBwb3J0LCBpbnQgbnJzZXJ2cyk7Ci1pbnQJCW5mc2RfZGlzcGF0Y2goc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpzdGF0cCk7Ci0KLWludAkJbmZzZF9ucnRocmVhZHModm9pZCk7Ci1pbnQJCW5mc2RfbnJwb29scyh2b2lkKTsKLWludAkJbmZzZF9nZXRfbnJ0aHJlYWRzKGludCBuLCBpbnQgKik7Ci1pbnQJCW5mc2Rfc2V0X25ydGhyZWFkcyhpbnQgbiwgaW50ICopOwotCi0vKiBuZnNkL3Zmcy5jICovCi1pbnQJCWZoX2xvY2tfcGFyZW50KHN0cnVjdCBzdmNfZmggKiwgc3RydWN0IGRlbnRyeSAqKTsKLWludAkJbmZzZF9yYWNhY2hlX2luaXQoaW50KTsKLXZvaWQJCW5mc2RfcmFjYWNoZV9zaHV0ZG93bih2b2lkKTsKLWludAkJbmZzZF9jcm9zc19tbnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IGRlbnRyeSAqKmRwcCwKLQkJICAgICAgICAgICAgICAgIHN0cnVjdCBzdmNfZXhwb3J0ICoqZXhwcCk7Ci1fX2JlMzIJCW5mc2RfbG9va3VwKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCi0JCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzdmNfZmggKik7Ci1fX2JlMzIJCSBuZnNkX2xvb2t1cF9kZW50cnkoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKLQkJCQljb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwKLQkJCQlzdHJ1Y3Qgc3ZjX2V4cG9ydCAqKiwgc3RydWN0IGRlbnRyeSAqKik7Ci1fX2JlMzIJCW5mc2Rfc2V0YXR0cihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAotCQkJCXN0cnVjdCBpYXR0ciAqLCBpbnQsIHRpbWVfdCk7Ci0jaWZkZWYgQ09ORklHX05GU0RfVjQKLV9fYmUzMiAgICAgICAgICBuZnNkNF9zZXRfbmZzNF9hY2woc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5mczRfYWNsICopOwotaW50ICAgICAgICAgICAgIG5mc2Q0X2dldF9uZnM0X2FjbChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmZzNF9hY2wgKiopOwotI2VuZGlmIC8qIENPTkZJR19ORlNEX1Y0ICovCi1fX2JlMzIJCW5mc2RfY3JlYXRlKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCi0JCQkJY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IGlhdHRyICphdHRycywKLQkJCQlpbnQgdHlwZSwgZGV2X3QgcmRldiwgc3RydWN0IHN2Y19maCAqcmVzKTsKLSNpZmRlZiBDT05GSUdfTkZTRF9WMwotX19iZTMyCQluZnNkX2FjY2VzcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLCB1MzIgKiwgdTMyICopOwotX19iZTMyCQluZnNkX2NyZWF0ZV92MyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAotCQkJCWNoYXIgKm5hbWUsIGludCBsZW4sIHN0cnVjdCBpYXR0ciAqYXR0cnMsCi0JCQkJc3RydWN0IHN2Y19maCAqcmVzLCBpbnQgY3JlYXRlbW9kZSwKLQkJCQl1MzIgKnZlcmlmaWVyLCBpbnQgKnRydW5jcCwgaW50ICpjcmVhdGVkKTsKLV9fYmUzMgkJbmZzZF9jb21taXQoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKLQkJCQlsb2ZmX3QsIHVuc2lnbmVkIGxvbmcpOwotI2VuZGlmIC8qIENPTkZJR19ORlNEX1YzICovCi1fX2JlMzIJCW5mc2Rfb3BlbihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLCBpbnQsCi0JCQkJaW50LCBzdHJ1Y3QgZmlsZSAqKik7Ci12b2lkCQluZnNkX2Nsb3NlKHN0cnVjdCBmaWxlICopOwotX19iZTMyIAkJbmZzZF9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIHN0cnVjdCBmaWxlICosCi0JCQkJbG9mZl90LCBzdHJ1Y3Qga3ZlYyAqLCBpbnQsIHVuc2lnbmVkIGxvbmcgKik7Ci1fX2JlMzIgCQluZnNkX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosc3RydWN0IGZpbGUgKiwKLQkJCQlsb2ZmX3QsIHN0cnVjdCBrdmVjICosaW50LCB1bnNpZ25lZCBsb25nICosIGludCAqKTsKLV9fYmUzMgkJbmZzZF9yZWFkbGluayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAotCQkJCWNoYXIgKiwgaW50ICopOwotX19iZTMyCQluZnNkX3N5bWxpbmsoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKLQkJCQljaGFyICpuYW1lLCBpbnQgbGVuLCBjaGFyICpwYXRoLCBpbnQgcGxlbiwKLQkJCQlzdHJ1Y3Qgc3ZjX2ZoICpyZXMsIHN0cnVjdCBpYXR0ciAqKTsKLV9fYmUzMgkJbmZzZF9saW5rKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCi0JCQkJY2hhciAqLCBpbnQsIHN0cnVjdCBzdmNfZmggKik7Ci1fX2JlMzIJCW5mc2RfcmVuYW1lKHN0cnVjdCBzdmNfcnFzdCAqLAotCQkJCXN0cnVjdCBzdmNfZmggKiwgY2hhciAqLCBpbnQsCi0JCQkJc3RydWN0IHN2Y19maCAqLCBjaGFyICosIGludCk7Ci1fX2JlMzIJCW5mc2RfcmVtb3ZlKHN0cnVjdCBzdmNfcnFzdCAqLAotCQkJCXN0cnVjdCBzdmNfZmggKiwgY2hhciAqLCBpbnQpOwotX19iZTMyCQluZnNkX3VubGluayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLCBpbnQgdHlwZSwKLQkJCQljaGFyICpuYW1lLCBpbnQgbGVuKTsKLWludAkJbmZzZF90cnVuY2F0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAotCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1fX2JlMzIJCW5mc2RfcmVhZGRpcihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAotCQkJICAgICBsb2ZmX3QgKiwgc3RydWN0IHJlYWRkaXJfY2QgKiwgZmlsbGRpcl90KTsKLV9fYmUzMgkJbmZzZF9zdGF0ZnMoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKLQkJCQlzdHJ1Y3Qga3N0YXRmcyAqLCBpbnQgYWNjZXNzKTsKLQotaW50CQluZnNkX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKLV9fYmUzMgkJbmZzZF9wZXJtaXNzaW9uKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqLAotCQkJCXN0cnVjdCBkZW50cnkgKiwgaW50KTsKLWludAkJbmZzZF9zeW5jX2RpcihzdHJ1Y3QgZGVudHJ5ICpkcCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19ORlNEX1YyX0FDTCkgfHwgZGVmaW5lZChDT05GSUdfTkZTRF9WM19BQ0wpCi0jaWZkZWYgQ09ORklHX05GU0RfVjJfQUNMCi1leHRlcm4gc3RydWN0IHN2Y192ZXJzaW9uIG5mc2RfYWNsX3ZlcnNpb24yOwotI2Vsc2UKLSNkZWZpbmUgbmZzZF9hY2xfdmVyc2lvbjIgTlVMTAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX05GU0RfVjNfQUNMCi1leHRlcm4gc3RydWN0IHN2Y192ZXJzaW9uIG5mc2RfYWNsX3ZlcnNpb24zOwotI2Vsc2UKLSNkZWZpbmUgbmZzZF9hY2xfdmVyc2lvbjMgTlVMTAotI2VuZGlmCi1zdHJ1Y3QgcG9zaXhfYWNsICpuZnNkX2dldF9wb3NpeF9hY2woc3RydWN0IHN2Y19maCAqLCBpbnQpOwotaW50IG5mc2Rfc2V0X3Bvc2l4X2FjbChzdHJ1Y3Qgc3ZjX2ZoICosIGludCwgc3RydWN0IHBvc2l4X2FjbCAqKTsKLSNlbmRpZgotCi1lbnVtIHZlcnNfb3Age05GU0RfU0VULCBORlNEX0NMRUFSLCBORlNEX1RFU1QsIE5GU0RfQVZBSUwgfTsKLWludCBuZnNkX3ZlcnMoaW50IHZlcnMsIGVudW0gdmVyc19vcCBjaGFuZ2UpOwotaW50IG5mc2RfbWlub3J2ZXJzaW9uKHUzMiBtaW5vcnZlcnNpb24sIGVudW0gdmVyc19vcCBjaGFuZ2UpOwotdm9pZCBuZnNkX3Jlc2V0X3ZlcnNpb25zKHZvaWQpOwotaW50IG5mc2RfY3JlYXRlX3NlcnYodm9pZCk7Ci0KLWV4dGVybiBpbnQgbmZzZF9tYXhfYmxrc2l6ZTsKLQotLyogCi0gKiBORlN2NCBTdGF0ZQotICovCi0jaWZkZWYgQ09ORklHX05GU0RfVjQKLWV4dGVybiB1bnNpZ25lZCBpbnQgbWF4X2RlbGVnYXRpb25zOwotaW50IG5mczRfc3RhdGVfaW5pdCh2b2lkKTsKLXZvaWQgbmZzZDRfZnJlZV9zbGFicyh2b2lkKTsKLWludCBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpOwotdm9pZCBuZnM0X3N0YXRlX3NodXRkb3duKHZvaWQpOwotdGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKTsKLXZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKTsKLWludCBuZnM0X3Jlc2V0X3JlY292ZXJ5ZGlyKGNoYXIgKnJlY2Rpcik7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgbmZzNF9zdGF0ZV9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZnNkNF9mcmVlX3NsYWJzKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSBpbnQgbmZzNF9zdGF0ZV9zdGFydCh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9zdGF0ZV9zaHV0ZG93bih2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdGltZV90IG5mczRfbGVhc2VfdGltZSh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9yZXNldF9sZWFzZSh0aW1lX3QgbGVhc2V0aW1lKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IG5mczRfcmVzZXRfcmVjb3ZlcnlkaXIoY2hhciAqcmVjZGlyKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotLyoKLSAqIGxvY2tkIGJpbmRpbmcKLSAqLwotdm9pZAkJbmZzZF9sb2NrZF9pbml0KHZvaWQpOwotdm9pZAkJbmZzZF9sb2NrZF9zaHV0ZG93bih2b2lkKTsKLQotCi0vKgotICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgcHJlLXhkcidlZCB2YWx1ZXMgZm9yIGZhc3RlciBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUJbmZzX29rCQkJY3B1X3RvX2JlMzIoTkZTX09LKQotI2RlZmluZQluZnNlcnJfcGVybQkJY3B1X3RvX2JlMzIoTkZTRVJSX1BFUk0pCi0jZGVmaW5lCW5mc2Vycl9ub2VudAkJY3B1X3RvX2JlMzIoTkZTRVJSX05PRU5UKQotI2RlZmluZQluZnNlcnJfaW8JCWNwdV90b19iZTMyKE5GU0VSUl9JTykKLSNkZWZpbmUJbmZzZXJyX254aW8JCWNwdV90b19iZTMyKE5GU0VSUl9OWElPKQotI2RlZmluZQluZnNlcnJfZWFnYWluCQljcHVfdG9fYmUzMihORlNFUlJfRUFHQUlOKQotI2RlZmluZQluZnNlcnJfYWNjZXMJCWNwdV90b19iZTMyKE5GU0VSUl9BQ0NFUykKLSNkZWZpbmUJbmZzZXJyX2V4aXN0CQljcHVfdG9fYmUzMihORlNFUlJfRVhJU1QpCi0jZGVmaW5lCW5mc2Vycl94ZGV2CQljcHVfdG9fYmUzMihORlNFUlJfWERFVikKLSNkZWZpbmUJbmZzZXJyX25vZGV2CQljcHVfdG9fYmUzMihORlNFUlJfTk9ERVYpCi0jZGVmaW5lCW5mc2Vycl9ub3RkaXIJCWNwdV90b19iZTMyKE5GU0VSUl9OT1RESVIpCi0jZGVmaW5lCW5mc2Vycl9pc2RpcgkJY3B1X3RvX2JlMzIoTkZTRVJSX0lTRElSKQotI2RlZmluZQluZnNlcnJfaW52YWwJCWNwdV90b19iZTMyKE5GU0VSUl9JTlZBTCkKLSNkZWZpbmUJbmZzZXJyX2ZiaWcJCWNwdV90b19iZTMyKE5GU0VSUl9GQklHKQotI2RlZmluZQluZnNlcnJfbm9zcGMJCWNwdV90b19iZTMyKE5GU0VSUl9OT1NQQykKLSNkZWZpbmUJbmZzZXJyX3JvZnMJCWNwdV90b19iZTMyKE5GU0VSUl9ST0ZTKQotI2RlZmluZQluZnNlcnJfbWxpbmsJCWNwdV90b19iZTMyKE5GU0VSUl9NTElOSykKLSNkZWZpbmUJbmZzZXJyX29wbm90c3VwcAljcHVfdG9fYmUzMihORlNFUlJfT1BOT1RTVVBQKQotI2RlZmluZQluZnNlcnJfbmFtZXRvb2xvbmcJY3B1X3RvX2JlMzIoTkZTRVJSX05BTUVUT09MT05HKQotI2RlZmluZQluZnNlcnJfbm90ZW1wdHkJCWNwdV90b19iZTMyKE5GU0VSUl9OT1RFTVBUWSkKLSNkZWZpbmUJbmZzZXJyX2RxdW90CQljcHVfdG9fYmUzMihORlNFUlJfRFFVT1QpCi0jZGVmaW5lCW5mc2Vycl9zdGFsZQkJY3B1X3RvX2JlMzIoTkZTRVJSX1NUQUxFKQotI2RlZmluZQluZnNlcnJfcmVtb3RlCQljcHVfdG9fYmUzMihORlNFUlJfUkVNT1RFKQotI2RlZmluZQluZnNlcnJfd2ZsdXNoCQljcHVfdG9fYmUzMihORlNFUlJfV0ZMVVNIKQotI2RlZmluZQluZnNlcnJfYmFkaGFuZGxlCWNwdV90b19iZTMyKE5GU0VSUl9CQURIQU5ETEUpCi0jZGVmaW5lCW5mc2Vycl9ub3RzeW5jCQljcHVfdG9fYmUzMihORlNFUlJfTk9UX1NZTkMpCi0jZGVmaW5lCW5mc2Vycl9iYWRjb29raWUJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9DT09LSUUpCi0jZGVmaW5lCW5mc2Vycl9ub3RzdXBwCQljcHVfdG9fYmUzMihORlNFUlJfTk9UU1VQUCkKLSNkZWZpbmUJbmZzZXJyX3Rvb3NtYWxsCQljcHVfdG9fYmUzMihORlNFUlJfVE9PU01BTEwpCi0jZGVmaW5lCW5mc2Vycl9zZXJ2ZXJmYXVsdAljcHVfdG9fYmUzMihORlNFUlJfU0VSVkVSRkFVTFQpCi0jZGVmaW5lCW5mc2Vycl9iYWR0eXBlCQljcHVfdG9fYmUzMihORlNFUlJfQkFEVFlQRSkKLSNkZWZpbmUJbmZzZXJyX2p1a2Vib3gJCWNwdV90b19iZTMyKE5GU0VSUl9KVUtFQk9YKQotI2RlZmluZQluZnNlcnJfZGVuaWVkCQljcHVfdG9fYmUzMihORlNFUlJfREVOSUVEKQotI2RlZmluZQluZnNlcnJfZGVhZGxvY2sJCWNwdV90b19iZTMyKE5GU0VSUl9ERUFETE9DSykKLSNkZWZpbmUgbmZzZXJyX2V4cGlyZWQgICAgICAgICAgY3B1X3RvX2JlMzIoTkZTRVJSX0VYUElSRUQpCi0jZGVmaW5lCW5mc2Vycl9iYWRfY29va2llCWNwdV90b19iZTMyKE5GU0VSUl9CQURfQ09PS0lFKQotI2RlZmluZQluZnNlcnJfc2FtZQkJY3B1X3RvX2JlMzIoTkZTRVJSX1NBTUUpCi0jZGVmaW5lCW5mc2Vycl9jbGlkX2ludXNlCWNwdV90b19iZTMyKE5GU0VSUl9DTElEX0lOVVNFKQotI2RlZmluZQluZnNlcnJfc3RhbGVfY2xpZW50aWQJY3B1X3RvX2JlMzIoTkZTRVJSX1NUQUxFX0NMSUVOVElEKQotI2RlZmluZQluZnNlcnJfcmVzb3VyY2UJCWNwdV90b19iZTMyKE5GU0VSUl9SRVNPVVJDRSkKLSNkZWZpbmUJbmZzZXJyX21vdmVkCQljcHVfdG9fYmUzMihORlNFUlJfTU9WRUQpCi0jZGVmaW5lCW5mc2Vycl9ub2ZpbGVoYW5kbGUJY3B1X3RvX2JlMzIoTkZTRVJSX05PRklMRUhBTkRMRSkKLSNkZWZpbmUJbmZzZXJyX21pbm9yX3ZlcnNfbWlzbWF0Y2gJY3B1X3RvX2JlMzIoTkZTRVJSX01JTk9SX1ZFUlNfTUlTTUFUQ0gpCi0jZGVmaW5lIG5mc2Vycl9zaGFyZV9kZW5pZWQJY3B1X3RvX2JlMzIoTkZTRVJSX1NIQVJFX0RFTklFRCkKLSNkZWZpbmUgbmZzZXJyX3N0YWxlX3N0YXRlaWQJY3B1X3RvX2JlMzIoTkZTRVJSX1NUQUxFX1NUQVRFSUQpCi0jZGVmaW5lIG5mc2Vycl9vbGRfc3RhdGVpZAljcHVfdG9fYmUzMihORlNFUlJfT0xEX1NUQVRFSUQpCi0jZGVmaW5lIG5mc2Vycl9iYWRfc3RhdGVpZAljcHVfdG9fYmUzMihORlNFUlJfQkFEX1NUQVRFSUQpCi0jZGVmaW5lIG5mc2Vycl9iYWRfc2VxaWQJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9TRVFJRCkKLSNkZWZpbmUJbmZzZXJyX3N5bWxpbmsJCWNwdV90b19iZTMyKE5GU0VSUl9TWU1MSU5LKQotI2RlZmluZQluZnNlcnJfbm90X3NhbWUJCWNwdV90b19iZTMyKE5GU0VSUl9OT1RfU0FNRSkKLSNkZWZpbmUJbmZzZXJyX3Jlc3RvcmVmaAljcHVfdG9fYmUzMihORlNFUlJfUkVTVE9SRUZIKQotI2RlZmluZQluZnNlcnJfYXR0cm5vdHN1cHAJY3B1X3RvX2JlMzIoTkZTRVJSX0FUVFJOT1RTVVBQKQotI2RlZmluZQluZnNlcnJfYmFkX3hkcgkJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9YRFIpCi0jZGVmaW5lCW5mc2Vycl9vcGVubW9kZQkJY3B1X3RvX2JlMzIoTkZTRVJSX09QRU5NT0RFKQotI2RlZmluZQluZnNlcnJfbG9ja3NfaGVsZAljcHVfdG9fYmUzMihORlNFUlJfTE9DS1NfSEVMRCkKLSNkZWZpbmUJbmZzZXJyX29wX2lsbGVnYWwJY3B1X3RvX2JlMzIoTkZTRVJSX09QX0lMTEVHQUwpCi0jZGVmaW5lCW5mc2Vycl9ncmFjZQkJY3B1X3RvX2JlMzIoTkZTRVJSX0dSQUNFKQotI2RlZmluZQluZnNlcnJfbm9fZ3JhY2UJCWNwdV90b19iZTMyKE5GU0VSUl9OT19HUkFDRSkKLSNkZWZpbmUJbmZzZXJyX3JlY2xhaW1fYmFkCWNwdV90b19iZTMyKE5GU0VSUl9SRUNMQUlNX0JBRCkKLSNkZWZpbmUJbmZzZXJyX2JhZG5hbWUJCWNwdV90b19iZTMyKE5GU0VSUl9CQUROQU1FKQotI2RlZmluZQluZnNlcnJfY2JfcGF0aF9kb3duCWNwdV90b19iZTMyKE5GU0VSUl9DQl9QQVRIX0RPV04pCi0jZGVmaW5lCW5mc2Vycl9sb2NrZWQJCWNwdV90b19iZTMyKE5GU0VSUl9MT0NLRUQpCi0jZGVmaW5lCW5mc2Vycl93cm9uZ3NlYwkJY3B1X3RvX2JlMzIoTkZTRVJSX1dST05HU0VDKQotI2RlZmluZSBuZnNlcnJfYmFkaW9tb2RlCQljcHVfdG9fYmUzMihORlM0RVJSX0JBRElPTU9ERSkKLSNkZWZpbmUgbmZzZXJyX2JhZGxheW91dAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9CQURMQVlPVVQpCi0jZGVmaW5lIG5mc2Vycl9iYWRfc2Vzc2lvbl9kaWdlc3QJY3B1X3RvX2JlMzIoTkZTNEVSUl9CQURfU0VTU0lPTl9ESUdFU1QpCi0jZGVmaW5lIG5mc2Vycl9iYWRzZXNzaW9uCQljcHVfdG9fYmUzMihORlM0RVJSX0JBRFNFU1NJT04pCi0jZGVmaW5lIG5mc2Vycl9iYWRzbG90CQkJY3B1X3RvX2JlMzIoTkZTNEVSUl9CQURTTE9UKQotI2RlZmluZSBuZnNlcnJfY29tcGxldGVfYWxyZWFkeQkJY3B1X3RvX2JlMzIoTkZTNEVSUl9DT01QTEVURV9BTFJFQURZKQotI2RlZmluZSBuZnNlcnJfY29ubl9ub3RfYm91bmRfdG9fc2Vzc2lvbiBjcHVfdG9fYmUzMihORlM0RVJSX0NPTk5fTk9UX0JPVU5EX1RPX1NFU1NJT04pCi0jZGVmaW5lIG5mc2Vycl9kZWxlZ19hbHJlYWR5X3dhbnRlZAljcHVfdG9fYmUzMihORlM0RVJSX0RFTEVHX0FMUkVBRFlfV0FOVEVEKQotI2RlZmluZSBuZnNlcnJfYmFja19jaGFuX2J1c3kJCWNwdV90b19iZTMyKE5GUzRFUlJfQkFDS19DSEFOX0JVU1kpCi0jZGVmaW5lIG5mc2Vycl9sYXlvdXR0cnlsYXRlcgkJY3B1X3RvX2JlMzIoTkZTNEVSUl9MQVlPVVRUUllMQVRFUikKLSNkZWZpbmUgbmZzZXJyX2xheW91dHVuYXZhaWxhYmxlCWNwdV90b19iZTMyKE5GUzRFUlJfTEFZT1VUVU5BVkFJTEFCTEUpCi0jZGVmaW5lIG5mc2Vycl9ub21hdGNoaW5nX2xheW91dAljcHVfdG9fYmUzMihORlM0RVJSX05PTUFUQ0hJTkdfTEFZT1VUKQotI2RlZmluZSBuZnNlcnJfcmVjYWxsY29uZmxpY3QJCWNwdV90b19iZTMyKE5GUzRFUlJfUkVDQUxMQ09ORkxJQ1QpCi0jZGVmaW5lIG5mc2Vycl91bmtub3duX2xheW91dHR5cGUJY3B1X3RvX2JlMzIoTkZTNEVSUl9VTktOT1dOX0xBWU9VVFRZUEUpCi0jZGVmaW5lIG5mc2Vycl9zZXFfbWlzb3JkZXJlZAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9TRVFfTUlTT1JERVJFRCkKLSNkZWZpbmUgbmZzZXJyX3NlcXVlbmNlX3BvcwkJY3B1X3RvX2JlMzIoTkZTNEVSUl9TRVFVRU5DRV9QT1MpCi0jZGVmaW5lIG5mc2Vycl9yZXFfdG9vX2JpZwkJY3B1X3RvX2JlMzIoTkZTNEVSUl9SRVFfVE9PX0JJRykKLSNkZWZpbmUgbmZzZXJyX3JlcF90b29fYmlnCQljcHVfdG9fYmUzMihORlM0RVJSX1JFUF9UT09fQklHKQotI2RlZmluZSBuZnNlcnJfcmVwX3Rvb19iaWdfdG9fY2FjaGUJY3B1X3RvX2JlMzIoTkZTNEVSUl9SRVBfVE9PX0JJR19UT19DQUNIRSkKLSNkZWZpbmUgbmZzZXJyX3JldHJ5X3VuY2FjaGVkX3JlcAljcHVfdG9fYmUzMihORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUCkKLSNkZWZpbmUgbmZzZXJyX3Vuc2FmZV9jb21wb3VuZAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9VTlNBRkVfQ09NUE9VTkQpCi0jZGVmaW5lIG5mc2Vycl90b29fbWFueV9vcHMJCWNwdV90b19iZTMyKE5GUzRFUlJfVE9PX01BTllfT1BTKQotI2RlZmluZSBuZnNlcnJfb3Bfbm90X2luX3Nlc3Npb24JY3B1X3RvX2JlMzIoTkZTNEVSUl9PUF9OT1RfSU5fU0VTU0lPTikKLSNkZWZpbmUgbmZzZXJyX2hhc2hfYWxnX3Vuc3VwcAkJY3B1X3RvX2JlMzIoTkZTNEVSUl9IQVNIX0FMR19VTlNVUFApCi0jZGVmaW5lIG5mc2Vycl9jbGllbnRpZF9idXN5CQljcHVfdG9fYmUzMihORlM0RVJSX0NMSUVOVElEX0JVU1kpCi0jZGVmaW5lIG5mc2Vycl9wbmZzX2lvX2hvbGUJCWNwdV90b19iZTMyKE5GUzRFUlJfUE5GU19JT19IT0xFKQotI2RlZmluZSBuZnNlcnJfc2VxX2ZhbHNlX3JldHJ5CQljcHVfdG9fYmUzMihORlM0RVJSX1NFUV9GQUxTRV9SRVRSWSkKLSNkZWZpbmUgbmZzZXJyX2JhZF9oaWdoX3Nsb3QJCWNwdV90b19iZTMyKE5GUzRFUlJfQkFEX0hJR0hfU0xPVCkKLSNkZWZpbmUgbmZzZXJyX2RlYWRzZXNzaW9uCQljcHVfdG9fYmUzMihORlM0RVJSX0RFQURTRVNTSU9OKQotI2RlZmluZSBuZnNlcnJfZW5jcl9hbGdfdW5zdXBwCQljcHVfdG9fYmUzMihORlM0RVJSX0VOQ1JfQUxHX1VOU1VQUCkKLSNkZWZpbmUgbmZzZXJyX3BuZnNfbm9fbGF5b3V0CQljcHVfdG9fYmUzMihORlM0RVJSX1BORlNfTk9fTEFZT1VUKQotI2RlZmluZSBuZnNlcnJfbm90X29ubHlfb3AJCWNwdV90b19iZTMyKE5GUzRFUlJfTk9UX09OTFlfT1ApCi0jZGVmaW5lIG5mc2Vycl93cm9uZ19jcmVkCQljcHVfdG9fYmUzMihORlM0RVJSX1dST05HX0NSRUQpCi0jZGVmaW5lIG5mc2Vycl93cm9uZ190eXBlCQljcHVfdG9fYmUzMihORlM0RVJSX1dST05HX1RZUEUpCi0jZGVmaW5lIG5mc2Vycl9kaXJkZWxlZ191bmF2YWlsCQljcHVfdG9fYmUzMihORlM0RVJSX0RJUkRFTEVHX1VOQVZBSUwpCi0jZGVmaW5lIG5mc2Vycl9yZWplY3RfZGVsZWcJCWNwdV90b19iZTMyKE5GUzRFUlJfUkVKRUNUX0RFTEVHKQotI2RlZmluZSBuZnNlcnJfcmV0dXJuY29uZmxpY3QJCWNwdV90b19iZTMyKE5GUzRFUlJfUkVUVVJOQ09ORkxJQ1QpCi0jZGVmaW5lIG5mc2Vycl9kZWxlZ19yZXZva2VkCQljcHVfdG9fYmUzMihORlM0RVJSX0RFTEVHX1JFVk9LRUQpCi0KLS8qIGVycm9yIGNvZGVzIGZvciBpbnRlcm5hbCB1c2UgKi8KLS8qIGlmIGEgcmVxdWVzdCBmYWlscyBkdWUgdG8ga21hbGxvYyBmYWlsdXJlLCBpdCBnZXRzIGRyb3BwZWQuCi0gKiAgQ2xpZW50IHNob3VsZCByZXNlbmQgZXZlbnR1YWxseQotICovCi0jZGVmaW5lCW5mc2Vycl9kcm9waXQJCWNwdV90b19iZTMyKDMwMDAwKQotLyogZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGluIHJlYWRkaXIgKi8KLSNkZWZpbmUJbmZzZXJyX2VvZgkJY3B1X3RvX2JlMzIoMzAwMDEpCi0vKiByZXBsYXkgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUJbmZzZXJyX3JlcGxheV9tZQljcHVfdG9fYmUzMigxMTAwMSkKLS8qIG5mczQxIHJlcGxheSBkZXRlY3RlZCAqLwotI2RlZmluZQluZnNlcnJfcmVwbGF5X2NhY2hlCWNwdV90b19iZTMyKDExMDAyKQotCi0vKiBDaGVjayBmb3IgZGlyIGVudHJpZXMgJy4nIGFuZCAnLi4nICovCi0jZGVmaW5lIGlzZG90ZW50KG4sIGwpCShsIDwgMyAmJiBuWzBdID09ICcuJyAmJiAobCA9PSAxIHx8IG5bMV0gPT0gJy4nKSkKLQotLyoKLSAqIFRpbWUgb2Ygc2VydmVyIHN0YXJ0dXAKLSAqLwotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsCW5mc3N2Y19ib290OwotCi0jaWZkZWYgQ09ORklHX05GU0RfVjQKLQotLyogYmVmb3JlIHByb2Nlc3NpbmcgYSBDT01QT1VORCBvcGVyYXRpb24sIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGVyZQotICogaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBidWZmZXIgZm9yIFhEUiBlbmNvZGUgdG8gc3VjY2VlZC4gIG90aGVyd2lzZSwKLSAqIHdlIG1pZ2h0IHByb2Nlc3MgYW4gb3BlcmF0aW9uIHdpdGggc2lkZSBlZmZlY3RzLCBhbmQgYmUgdW5hYmxlIHRvCi0gKiB0ZWxsIHRoZSBjbGllbnQgdGhhdCB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KLSAqCi0gKiBDT01QT1VORF9TTEFDS19TUEFDRSAtIHRoaXMgaXMgdGhlIG1pbmltdW0gYnl0ZXMgb2YgYnVmZmVyIHNwYWNlCi0gKiBuZWVkZWQgdG8gZW5jb2RlIGFuICJvcmRpbmFyeSIgX3N1Y2Nlc3NmdWxfIG9wZXJhdGlvbi4gIChHRVRBVFRSLAotICogUkVBRCwgUkVBRERJUiwgYW5kIFJFQURMSU5LIGhhdmUgdGhlaXIgb3duIGJ1ZmZlciBjaGVja3MuKSAgaWYgd2UKLSAqIGZhbGwgYmVsb3cgdGhpcyBsZXZlbCwgd2UgZmFpbCB0aGUgbmV4dCBvcGVyYXRpb24gd2l0aCBORlM0RVJSX1JFU09VUkNFLgotICoKLSAqIENPTVBPVU5EX0VSUl9TTEFDS19TUEFDRSAtIHRoaXMgaXMgdGhlIG1pbmltdW0gYnl0ZXMgb2YgYnVmZmVyIHNwYWNlCi0gKiBuZWVkZWQgdG8gZW5jb2RlIGFuIG9wZXJhdGlvbiB3aGljaCBoYXMgZmFpbGVkIHdpdGggTkZTNEVSUl9SRVNPVVJDRS4KLSAqIGNhcmUgaXMgdGFrZW4gdG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgZmFsbCBiZWxvdyB0aGlzIGxldmVsIGZvciBhbnkKLSAqIHJlYXNvbi4KLSAqLwotI2RlZmluZQlDT01QT1VORF9TTEFDS19TUEFDRQkJMTQwICAgIC8qIE9QX0dFVEZIICovCi0jZGVmaW5lIENPTVBPVU5EX0VSUl9TTEFDS19TUEFDRQkxMiAgICAgLyogT1BfU0VUQVRUUiAqLwotCi0jZGVmaW5lIE5GU0RfTEVBU0VfVElNRSAgICAgICAgICAgICAgICAgKG5mczRfbGVhc2VfdGltZSgpKQotI2RlZmluZSBORlNEX0xBVU5EUk9NQVRfTUlOVElNRU9VVCAgICAgIDEwICAgLyogc2Vjb25kcyAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBieSB0aGUgTkZTdjQgc2VydmVyOgotICogICAgQVJDSElWRSAgICAgICAoZGVwcmVjYXRlZCBhbnl3YXkpCi0gKiAgICBISURERU4gICAgICAgICh1bmxpa2VseSB0byBiZSBzdXBwb3J0ZWQgYW55IHRpbWUgc29vbikKLSAqICAgIE1JTUVUWVBFICAgICAgKHVubGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBhbnkgdGltZSBzb29uKQotICogICAgUVVPVEFfKiAgICAgICAod2lsbCBiZSBzdXBwb3J0ZWQgaW4gYSBmb3J0aGNvbWluZyBwYXRjaCkKLSAqICAgIFNZU1RFTSAgICAgICAgKHVubGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBhbnkgdGltZSBzb29uKQotICogICAgVElNRV9CQUNLVVAgICAodW5saWtlbHkgdG8gYmUgc3VwcG9ydGVkIGFueSB0aW1lIHNvb24pCi0gKiAgICBUSU1FX0NSRUFURSAgICh1bmxpa2VseSB0byBiZSBzdXBwb3J0ZWQgYW55IHRpbWUgc29vbikKLSAqLwotI2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oRkFUVFI0X1dPUkQwX1NVUFBPUlRFRF9BVFRSUyAgIHwgRkFUVFI0X1dPUkQwX1RZUEUgICAgICAgICB8IEZBVFRSNF9XT1JEMF9GSF9FWFBJUkVfVFlQRSAgIFwKLSB8IEZBVFRSNF9XT1JEMF9DSEFOR0UgICAgICAgICAgfCBGQVRUUjRfV09SRDBfU0laRSAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0xJTktfU1VQUE9SVCAgICAgXAotIHwgRkFUVFI0X1dPUkQwX1NZTUxJTktfU1VQUE9SVCB8IEZBVFRSNF9XT1JEMF9OQU1FRF9BVFRSICAgfCBGQVRUUjRfV09SRDBfRlNJRCAgICAgICAgICAgICBcCi0gfCBGQVRUUjRfV09SRDBfVU5JUVVFX0hBTkRMRVMgIHwgRkFUVFI0X1dPUkQwX0xFQVNFX1RJTUUgICB8IEZBVFRSNF9XT1JEMF9SREFUVFJfRVJST1IgICAgIFwKLSB8IEZBVFRSNF9XT1JEMF9BQ0xTVVBQT1JUICAgICAgfCBGQVRUUjRfV09SRDBfQ0FOU0VUVElNRSAgIHwgRkFUVFI0X1dPUkQwX0NBU0VfSU5TRU5TSVRJVkUgXAotIHwgRkFUVFI0X1dPUkQwX0NBU0VfUFJFU0VSVklORyB8IEZBVFRSNF9XT1JEMF9DSE9XTl9SRVNUUklDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gfCBGQVRUUjRfV09SRDBfRklMRUhBTkRMRSAgICAgIHwgRkFUVFI0X1dPUkQwX0ZJTEVJRCAgICAgICB8IEZBVFRSNF9XT1JEMF9GSUxFU19BVkFJTCAgICAgIFwKLSB8IEZBVFRSNF9XT1JEMF9GSUxFU19GUkVFICAgICAgfCBGQVRUUjRfV09SRDBfRklMRVNfVE9UQUwgIHwgRkFUVFI0X1dPUkQwX0ZTX0xPQ0FUSU9OUyB8IEZBVFRSNF9XT1JEMF9IT01PR0VORU9VUyAgICAgIFwKLSB8IEZBVFRSNF9XT1JEMF9NQVhGSUxFU0laRSAgICAgfCBGQVRUUjRfV09SRDBfTUFYTElOSyAgICAgIHwgRkFUVFI0X1dPUkQwX01BWE5BTUUgICAgICAgICAgXAotIHwgRkFUVFI0X1dPUkQwX01BWFJFQUQgICAgICAgICB8IEZBVFRSNF9XT1JEMF9NQVhXUklURSAgICAgfCBGQVRUUjRfV09SRDBfQUNMKQotCi0jZGVmaW5lIE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLShGQVRUUjRfV09SRDFfTU9ERSAgICAgICAgICAgICAgfCBGQVRUUjRfV09SRDFfTk9fVFJVTkMgICAgIHwgRkFUVFI0X1dPUkQxX05VTUxJTktTICAgICAgICAgXAotIHwgRkFUVFI0X1dPUkQxX09XTkVSCSAgICAgICAgfCBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVAgIHwgRkFUVFI0X1dPUkQxX1JBV0RFViAgICAgICAgICAgXAotIHwgRkFUVFI0X1dPUkQxX1NQQUNFX0FWQUlMICAgICB8IEZBVFRSNF9XT1JEMV9TUEFDRV9GUkVFICAgfCBGQVRUUjRfV09SRDFfU1BBQ0VfVE9UQUwgICAgICBcCi0gfCBGQVRUUjRfV09SRDFfU1BBQ0VfVVNFRCAgICAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTICB8IEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgIFwKLSB8IEZBVFRSNF9XT1JEMV9USU1FX0RFTFRBICAgfCBGQVRUUjRfV09SRDFfVElNRV9NRVRBREFUQSAgICBcCi0gfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRlkgICAgIHwgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVCB8IEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKLQotI2RlZmluZSBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDIgMAotCi0jZGVmaW5lIE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQwIFwKLQlORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDAKLQotI2RlZmluZSBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMSBcCi0JTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQxCi0KLSNkZWZpbmUgTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDIgXAotCShORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDIgfCBGQVRUUjRfV09SRDJfU1VQUEFUVFJfRVhDTENSRUFUKQotCi1zdGF0aWMgaW5saW5lIHUzMiBuZnNkX3N1cHBhdHRyczAodTMyIG1pbm9ydmVyc2lvbikKLXsKLQlyZXR1cm4gbWlub3J2ZXJzaW9uID8gTkZTRDRfMV9TVVBQT1JURURfQVRUUlNfV09SRDAKLQkJCSAgICA6IE5GU0Q0X1NVUFBPUlRFRF9BVFRSU19XT1JEMDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbmZzZF9zdXBwYXR0cnMxKHUzMiBtaW5vcnZlcnNpb24pCi17Ci0JcmV0dXJuIG1pbm9ydmVyc2lvbiA/IE5GU0Q0XzFfU1VQUE9SVEVEX0FUVFJTX1dPUkQxCi0JCQkgICAgOiBORlNENF9TVVBQT1JURURfQVRUUlNfV09SRDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG5mc2Rfc3VwcGF0dHJzMih1MzIgbWlub3J2ZXJzaW9uKQotewotCXJldHVybiBtaW5vcnZlcnNpb24gPyBORlNENF8xX1NVUFBPUlRFRF9BVFRSU19XT1JEMgotCQkJICAgIDogTkZTRDRfU1VQUE9SVEVEX0FUVFJTX1dPUkQyOwotfQotCi0vKiBUaGVzZSB3aWxsIHJldHVybiBFUlJfSU5WQUwgaWYgc3BlY2lmaWVkIGluIEdFVEFUVFIgb3IgUkVBRERJUi4gKi8KLSNkZWZpbmUgTkZTRF9XUklURU9OTFlfQVRUUlNfV09SRDEJCQkJCQkJICAgIFwKLShGQVRUUjRfV09SRDFfVElNRV9BQ0NFU1NfU0VUICAgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKQotCi0vKiBUaGVzZSBhcmUgdGhlIG9ubHkgYXR0cnMgYWxsb3dlZCBpbiBDUkVBVEUvT1BFTi9TRVRBVFRSLiAqLwotI2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oRkFUVFI0X1dPUkQwX1NJWkUgICAgICAgICAgICAgIHwgRkFUVFI0X1dPUkQwX0FDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oRkFUVFI0X1dPUkQxX01PREUgICAgICAgICAgICAgIHwgRkFUVFI0X1dPUkQxX09XTkVSICAgICAgICAgfCBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVAgICAgIFwKLSB8IEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKQotI2RlZmluZSBORlNEX1dSSVRFQUJMRV9BVFRSU19XT1JEMiAwCi0KLSNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDAgXAotCU5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQwCi0vKgotICogd2UgY3VycmVudGx5IHN0b3JlIHRoZSBleGNsdXNpdmUgY3JlYXRlIHZlcmlmaWVyIGluIHRoZSB2X3thLG19dGltZQotICogYXR0cmlidXRlcyBzbyB0aGUgY2xpZW50IGNhbid0IHNldCB0aGVzZSBhdCBjcmVhdGUgdGltZSB1c2luZyBFWENMVVNJVkU0XzEKLSAqLwotI2RlZmluZSBORlNEX1NVUFBBVFRSX0VYQ0xDUkVBVF9XT1JEMSBcCi0JKE5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQxICYgXAotCSB+KEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQgfCBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUKSkKLSNkZWZpbmUgTkZTRF9TVVBQQVRUUl9FWENMQ1JFQVRfV09SRDIgXAotCU5GU0RfV1JJVEVBQkxFX0FUVFJTX1dPUkQyCi0KLSNlbmRpZiAvKiBDT05GSUdfTkZTRF9WNCAqLwotCi0jZW5kaWYgLyogTElOVVhfTkZTRF9ORlNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKaW5kZXggOGY2NDFjOS4uNjVlMzMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKQEAgLTE2LDExICsxNiw5IEBACiAKICMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpZmRlZiBfX0tFUk5FTF9fCi0jIGluY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotIyBpbmNsdWRlIDxsaW51eC9mcy5oPgorIyBpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9uZnNkL2NvbnN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9kZWJ1Zy5oPgogCiAvKgogICogVGhpcyBpcyB0aGUgb2xkICJkZW50cnkgc3R5bGUiIExpbnV4IE5GU3YyIGZpbGUgaGFuZGxlLgpAQCAtMTY0LDIwOCArMTYyLDYgQEAKIAogfSBzdmNfZmg7CiAKLWVudW0gbmZzZF9mc2lkIHsKLQlGU0lEX0RFViA9IDAsCi0JRlNJRF9OVU0sCi0JRlNJRF9NQUpPUl9NSU5PUiwKLQlGU0lEX0VOQ09ERV9ERVYsCi0JRlNJRF9VVUlENF9JTlVNLAotCUZTSURfVVVJRDgsCi0JRlNJRF9VVUlEMTYsCi0JRlNJRF9VVUlEMTZfSU5VTSwKLX07Ci0KLWVudW0gZnNpZF9zb3VyY2UgewotCUZTSURTT1VSQ0VfREVWLAotCUZTSURTT1VSQ0VfRlNJRCwKLQlGU0lEU09VUkNFX1VVSUQsCi19OwotZXh0ZXJuIGVudW0gZnNpZF9zb3VyY2UgZnNpZF9zb3VyY2Uoc3RydWN0IHN2Y19maCAqZmhwKTsKLQotCi0vKiBUaGlzIG1pZ2h0IGxvb2sgYSBsaXR0bGUgbGFyZ2UgdG8gImlubGluZSIgYnV0IGluIGFsbCBjYWxscyBleGNlcHQKLSAqIG9uZSwgJ3ZlcnMnIGlzIGNvbnN0YW50IHNvIG1vc3RlIG9mIHRoZSBmdW5jdGlvbiBkaXNhcHBlYXJzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbWtfZnNpZChpbnQgdmVycywgdTMyICpmc2lkdiwgZGV2X3QgZGV2LCBpbm9fdCBpbm8sCi0JCQkgICB1MzIgZnNpZCwgdW5zaWduZWQgY2hhciAqdXVpZCkKLXsKLQl1MzIgKnVwOwotCXN3aXRjaCh2ZXJzKSB7Ci0JY2FzZSBGU0lEX0RFVjoKLQkJZnNpZHZbMF0gPSBodG9ubCgoTUFKT1IoZGV2KTw8MTYpIHwKLQkJCQkgTUlOT1IoZGV2KSk7Ci0JCWZzaWR2WzFdID0gaW5vX3RfdG9fdTMyKGlubyk7Ci0JCWJyZWFrOwotCWNhc2UgRlNJRF9OVU06Ci0JCWZzaWR2WzBdID0gZnNpZDsKLQkJYnJlYWs7Ci0JY2FzZSBGU0lEX01BSk9SX01JTk9SOgotCQlmc2lkdlswXSA9IGh0b25sKE1BSk9SKGRldikpOwotCQlmc2lkdlsxXSA9IGh0b25sKE1JTk9SKGRldikpOwotCQlmc2lkdlsyXSA9IGlub190X3RvX3UzMihpbm8pOwotCQlicmVhazsKLQotCWNhc2UgRlNJRF9FTkNPREVfREVWOgotCQlmc2lkdlswXSA9IG5ld19lbmNvZGVfZGV2KGRldik7Ci0JCWZzaWR2WzFdID0gaW5vX3RfdG9fdTMyKGlubyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGU0lEX1VVSUQ0X0lOVU06Ci0JCS8qIDQgYnl0ZSBmc2lkIGFuZCBpbm9kZSBudW1iZXIgKi8KLQkJdXAgPSAodTMyKil1dWlkOwotCQlmc2lkdlswXSA9IGlub190X3RvX3UzMihpbm8pOwotCQlmc2lkdlsxXSA9IHVwWzBdIF4gdXBbMV0gXiB1cFsyXSBeIHVwWzNdOwotCQlicmVhazsKLQotCWNhc2UgRlNJRF9VVUlEODoKLQkJLyogOCBieXRlIGZzaWQgICovCi0JCXVwID0gKHUzMiopdXVpZDsKLQkJZnNpZHZbMF0gPSB1cFswXSBeIHVwWzJdOwotCQlmc2lkdlsxXSA9IHVwWzFdIF4gdXBbM107Ci0JCWJyZWFrOwotCi0JY2FzZSBGU0lEX1VVSUQxNjoKLQkJLyogMTYgYnl0ZSBmc2lkIC0gTkZTdjMrIG9ubHkgKi8KLQkJbWVtY3B5KGZzaWR2LCB1dWlkLCAxNik7Ci0JCWJyZWFrOwotCi0JY2FzZSBGU0lEX1VVSUQxNl9JTlVNOgotCQkvKiA4IGJ5dGUgaW5vZGUgYW5kIDE2IGJ5dGUgZnNpZCAqLwotCQkqKHU2NCopZnNpZHYgPSAodTY0KWlubzsKLQkJbWVtY3B5KGZzaWR2KzIsIHV1aWQsIDE2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDogQlVHKCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBrZXlfbGVuKGludCB0eXBlKQotewotCXN3aXRjaCh0eXBlKSB7Ci0JY2FzZSBGU0lEX0RFVjoJCXJldHVybiA4OwotCWNhc2UgRlNJRF9OVU06IAkJcmV0dXJuIDQ7Ci0JY2FzZSBGU0lEX01BSk9SX01JTk9SOglyZXR1cm4gMTI7Ci0JY2FzZSBGU0lEX0VOQ09ERV9ERVY6CXJldHVybiA4OwotCWNhc2UgRlNJRF9VVUlENF9JTlVNOglyZXR1cm4gODsKLQljYXNlIEZTSURfVVVJRDg6CXJldHVybiA4OwotCWNhc2UgRlNJRF9VVUlEMTY6CXJldHVybiAxNjsKLQljYXNlIEZTSURfVVVJRDE2X0lOVU06CXJldHVybiAyNDsKLQlkZWZhdWx0OiByZXR1cm4gMDsKLQl9Ci19Ci0KLS8qCi0gKiBTaG9ydGhhbmQgZm9yIGRwcmludGsoKSdzCi0gKi8KLWV4dGVybiBjaGFyICogU1ZDRkhfZm10KHN0cnVjdCBzdmNfZmggKmZocCk7Ci0KLS8qCi0gKiBGdW5jdGlvbiBwcm90b3R5cGVzCi0gKi8KLV9fYmUzMglmaF92ZXJpZnkoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwgaW50LCBpbnQpOwotX19iZTMyCWZoX2NvbXBvc2Uoc3RydWN0IHN2Y19maCAqLCBzdHJ1Y3Qgc3ZjX2V4cG9ydCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBzdmNfZmggKik7Ci1fX2JlMzIJZmhfdXBkYXRlKHN0cnVjdCBzdmNfZmggKik7Ci12b2lkCWZoX3B1dChzdHJ1Y3Qgc3ZjX2ZoICopOwotCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3Qgc3ZjX2ZoICoKLWZoX2NvcHkoc3RydWN0IHN2Y19maCAqZHN0LCBzdHJ1Y3Qgc3ZjX2ZoICpzcmMpCi17Ci0JV0FSTl9PTihzcmMtPmZoX2RlbnRyeSB8fCBzcmMtPmZoX2xvY2tlZCk7Ci0JCQkKLQkqZHN0ID0gKnNyYzsKLQlyZXR1cm4gZHN0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZoX2NvcHlfc2hhbGxvdyhzdHJ1Y3Qga25mc2RfZmggKmRzdCwgc3RydWN0IGtuZnNkX2ZoICpzcmMpCi17Ci0JZHN0LT5maF9zaXplID0gc3JjLT5maF9zaXplOwotCW1lbWNweSgmZHN0LT5maF9iYXNlLCAmc3JjLT5maF9iYXNlLCBzcmMtPmZoX3NpemUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3Qgc3ZjX2ZoICoKLWZoX2luaXQoc3RydWN0IHN2Y19maCAqZmhwLCBpbnQgbWF4c2l6ZSkKLXsKLQltZW1zZXQoZmhwLCAwLCBzaXplb2YoKmZocCkpOwotCWZocC0+ZmhfbWF4c2l6ZSA9IG1heHNpemU7Ci0JcmV0dXJuIGZocDsKLX0KLQotI2lmZGVmIENPTkZJR19ORlNEX1YzCi0vKgotICogRmlsbCBpbiB0aGUgcHJlX29wIGF0dHIgZm9yIHRoZSB3Y2MgZGF0YQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZpbGxfcHJlX3djYyhzdHJ1Y3Qgc3ZjX2ZoICpmaHApCi17Ci0Jc3RydWN0IGlub2RlICAgICppbm9kZTsKLQotCWlub2RlID0gZmhwLT5maF9kZW50cnktPmRfaW5vZGU7Ci0JaWYgKCFmaHAtPmZoX3ByZV9zYXZlZCkgewotCQlmaHAtPmZoX3ByZV9tdGltZSA9IGlub2RlLT5pX210aW1lOwotCQlmaHAtPmZoX3ByZV9jdGltZSA9IGlub2RlLT5pX2N0aW1lOwotCQlmaHAtPmZoX3ByZV9zaXplICA9IGlub2RlLT5pX3NpemU7Ci0JCWZocC0+ZmhfcHJlX2NoYW5nZSA9IGlub2RlLT5pX3ZlcnNpb247Ci0JCWZocC0+ZmhfcHJlX3NhdmVkID0gMTsKLQl9Ci19Ci0KLWV4dGVybiB2b2lkIGZpbGxfcG9zdF93Y2Moc3RydWN0IHN2Y19maCAqKTsKLSNlbHNlCi0jZGVmaW5lCWZpbGxfcHJlX3djYyhpZ25vcmVkKQotI2RlZmluZSBmaWxsX3Bvc3Rfd2NjKG5vdHVzZWQpCi0jZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KLQotCi0vKgotICogTG9jayBhIGZpbGUgaGFuZGxlL2lub2RlCi0gKiBOT1RFOiBib3RoIGZoX2xvY2sgYW5kIGZoX3VubG9jayBhcmUgZG9uZSAiYnkgaGFuZCIgaW4KLSAqIHZmcy5jOm5mc2RfcmVuYW1lIGFzIGl0IG5lZWRzIHRvIGdyYWIgMiBpX211dGV4J3MgYXQgb25jZQotICogc28sIGFueSBjaGFuZ2VzIGhlcmUgc2hvdWxkIGJlIHJlZmxlY3RlZCB0aGVyZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZoX2xvY2tfbmVzdGVkKHN0cnVjdCBzdmNfZmggKmZocCwgdW5zaWduZWQgaW50IHN1YmNsYXNzKQotewotCXN0cnVjdCBkZW50cnkJKmRlbnRyeSA9IGZocC0+ZmhfZGVudHJ5OwotCXN0cnVjdCBpbm9kZQkqaW5vZGU7Ci0KLQlkZnByaW50ayhGSUxFT1AsICJuZnNkOiBmaF9sb2NrKCVzKSBsb2NrZWQgPSAlZFxuIiwKLQkJCVNWQ0ZIX2ZtdChmaHApLCBmaHAtPmZoX2xvY2tlZCk7Ci0KLQlCVUdfT04oIWRlbnRyeSk7Ci0KLQlpZiAoZmhwLT5maF9sb2NrZWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZmhfbG9jazogJXMvJXMgYWxyZWFkeSBsb2NrZWQhXG4iLAotCQkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBzdWJjbGFzcyk7Ci0JZmlsbF9wcmVfd2NjKGZocCk7Ci0JZmhwLT5maF9sb2NrZWQgPSAxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZoX2xvY2soc3RydWN0IHN2Y19maCAqZmhwKQotewotCWZoX2xvY2tfbmVzdGVkKGZocCwgSV9NVVRFWF9OT1JNQUwpOwotfQotCi0vKgotICogVW5sb2NrIGEgZmlsZSBoYW5kbGUvaW5vZGUKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1maF91bmxvY2soc3RydWN0IHN2Y19maCAqZmhwKQotewotCUJVR19PTighZmhwLT5maF9kZW50cnkpOwotCi0JaWYgKGZocC0+ZmhfbG9ja2VkKSB7Ci0JCWZpbGxfcG9zdF93Y2MoZmhwKTsKLQkJbXV0ZXhfdW5sb2NrKCZmaHAtPmZoX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JCWZocC0+ZmhfbG9ja2VkID0gMDsKLQl9Ci19CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0ZS5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGQxMTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL25mc2Qvc3RhdGUuaAotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDEgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCi0gKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgS2VuZHJpY2sgU21pdGggPGttc21pdGhAdW1pY2guZWR1PgotICogIEFuZHkgQWRhbXNvbiA8YW5kcm9zQHVtaWNoLmVkdT4KLSAqICAKLSAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0OgotICogIAotICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCi0gKiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgotICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0gKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX05GU0Q0X1NUQVRFX0gKLSNkZWZpbmUgX05GU0Q0X1NUQVRFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiAgICAgICAgICAgICBjbF9ib290OwotCXUzMiAgICAgICAgICAgICBjbF9pZDsKLX0gY2xpZW50aWRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiAgICAgICAgICAgICBzb19ib290OwotCXUzMiAgICAgICAgICAgICBzb19zdGF0ZW93bmVyaWQ7Ci0JdTMyICAgICAgICAgICAgIHNvX2ZpbGVpZDsKLX0gc3RhdGVpZF9vcGFxdWVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiAgICAgICAgICAgICAgICAgICAgIHNpX2dlbmVyYXRpb247Ci0Jc3RhdGVpZF9vcGFxdWVfdCAgICAgICAgc2lfb3BhcXVlOwotfSBzdGF0ZWlkX3Q7Ci0jZGVmaW5lIHNpX2Jvb3QgICAgICAgICAgIHNpX29wYXF1ZS5zb19ib290Ci0jZGVmaW5lIHNpX3N0YXRlb3duZXJpZCAgIHNpX29wYXF1ZS5zb19zdGF0ZW93bmVyaWQKLSNkZWZpbmUgc2lfZmlsZWlkICAgICAgICAgc2lfb3BhcXVlLnNvX2ZpbGVpZAotCi1zdHJ1Y3QgbmZzZDRfY2Jfc2VxdWVuY2UgewotCS8qIGFyZ3MvcmVzICovCi0JdTMyCQkJY2JzX21pbm9ydmVyc2lvbjsKLQlzdHJ1Y3QgbmZzNF9jbGllbnQJKmNic19jbHA7Ci19OwotCi1zdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRsX3BlcmZpbGU7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkbF9wZXJjbG50OwotCXN0cnVjdCBsaXN0X2hlYWQJZGxfcmVjYWxsX2xydTsgIC8qIGRlbGVnYXRpb24gcmVjYWxsZWQgKi8KLQlhdG9taWNfdAkJZGxfY291bnQ7ICAgICAgIC8qIHJlZiBjb3VudCAqLwotCXN0cnVjdCBuZnM0X2NsaWVudAkqZGxfY2xpZW50OwotCXN0cnVjdCBuZnM0X2ZpbGUJKmRsX2ZpbGU7Ci0Jc3RydWN0IGZpbGVfbG9jawkqZGxfZmxvY2s7Ci0Jc3RydWN0IGZpbGUJCSpkbF92ZnNfZmlsZTsKLQl1MzIJCQlkbF90eXBlOwotCXRpbWVfdAkJCWRsX3RpbWU7Ci0vKiBGb3IgcmVjYWxsOiAqLwotCXUzMgkJCWRsX2lkZW50OwotCXN0YXRlaWRfdAkJZGxfc3RhdGVpZDsKLQlzdHJ1Y3Qga25mc2RfZmgJCWRsX2ZoOwotCWludAkJCWRsX3JldHJpZXM7Ci19OwotCi0vKiBjbGllbnQgZGVsZWdhdGlvbiBjYWxsYmFjayBpbmZvICovCi1zdHJ1Y3QgbmZzNF9jYl9jb25uIHsKLQkvKiBTRVRDTElFTlRJRCBpbmZvICovCi0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJY2JfYWRkcjsKLQlzaXplX3QJCQljYl9hZGRybGVuOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGNiX3Byb2c7Ci0JdTMyCQkJY2JfbWlub3J2ZXJzaW9uOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGNiX2lkZW50OwkvKiBtaW5vcnZlcnNpb24gMCBvbmx5ICovCi0JLyogUlBDIGNsaWVudCBpbmZvICovCi0JYXRvbWljX3QJCWNiX3NldDsgICAgIC8qIHN1Y2Nlc3NmdWwgQ0JfTlVMTCBjYWxsICovCi0Jc3RydWN0IHJwY19jbG50ICogICAgICAgY2JfY2xpZW50OwotfTsKLQotLyogTWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgcGVyIHNlc3Npb24uIDE2MCBpcyB1c2VmdWwgZm9yIGxvbmcgaGF1bCBUQ1AgKi8KLSNkZWZpbmUgTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04gICAgIDE2MAotLyogTWF4aW11bSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBwZXIgc2Vzc2lvbiBjb21wb3VuZCAqLwotI2RlZmluZSBORlNEX01BWF9PUFNfUEVSX0NPTVBPVU5ECTE2Ci0vKiBNYXhpbXVtICBzZXNzaW9uIHBlciBzbG90IGNhY2hlIHNpemUgKi8KLSNkZWZpbmUgTkZTRF9TTE9UX0NBQ0hFX1NJWkUJCTEwMjQKLS8qIE1heGltdW0gbnVtYmVyIG9mIE5GU0RfU0xPVF9DQUNIRV9TSVpFIHNsb3RzIHBlciBzZXNzaW9uICovCi0jZGVmaW5lIE5GU0RfQ0FDSEVfU0laRV9TTE9UU19QRVJfU0VTU0lPTgkzMgotI2RlZmluZSBORlNEX01BWF9NRU1fUEVSX1NFU1NJT04gIFwKLQkJKE5GU0RfQ0FDSEVfU0laRV9TTE9UU19QRVJfU0VTU0lPTiAqIE5GU0RfU0xPVF9DQUNIRV9TSVpFKQotCi1zdHJ1Y3QgbmZzZDRfc2xvdCB7Ci0JYm9vbAlzbF9pbnVzZTsKLQlib29sCXNsX2NhY2hldGhpczsKLQl1MTYJc2xfb3BjbnQ7Ci0JdTMyCXNsX3NlcWlkOwotCV9fYmUzMglzbF9zdGF0dXM7Ci0JdTMyCXNsX2RhdGFsZW47Ci0JY2hhcglzbF9kYXRhW107Ci19OwotCi1zdHJ1Y3QgbmZzZDRfY2hhbm5lbF9hdHRycyB7Ci0JdTMyCQloZWFkZXJwYWRzejsKLQl1MzIJCW1heHJlcV9zejsKLQl1MzIJCW1heHJlc3Bfc3o7Ci0JdTMyCQltYXhyZXNwX2NhY2hlZDsKLQl1MzIJCW1heG9wczsKLQl1MzIJCW1heHJlcXM7Ci0JdTMyCQlucl9yZG1hX2F0dHJzOwotCXUzMgkJcmRtYV9hdHRyczsKLX07Ci0KLXN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbiB7Ci0JY2xpZW50aWRfdAkJCWNsaWVudGlkOwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAkJc2Vzc2lvbmlkOwotCXUzMgkJCQlzZXFpZDsKLQl1MzIJCQkJZmxhZ3M7Ci0Jc3RydWN0IG5mc2Q0X2NoYW5uZWxfYXR0cnMJZm9yZV9jaGFubmVsOwotCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzCWJhY2tfY2hhbm5lbDsKLQl1MzIJCQkJY2FsbGJhY2tfcHJvZzsKLQl1MzIJCQkJdWlkOwotCXUzMgkJCQlnaWQ7Ci19OwotCi0vKiBUaGUgc2luZ2xlIHNsb3QgY2xpZW50aWQgY2FjaGUgc3RydWN0dXJlICovCi1zdHJ1Y3QgbmZzZDRfY2xpZF9zbG90IHsKLQl1MzIJCQkJc2xfc2VxaWQ7Ci0JX19iZTMyCQkJCXNsX3N0YXR1czsKLQlzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24Jc2xfY3Jfc2VzOwotfTsKLQotc3RydWN0IG5mc2Q0X3Nlc3Npb24gewotCXN0cnVjdCBrcmVmCQlzZV9yZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZAlzZV9oYXNoOwkvKiBoYXNoIGJ5IHNlc3Npb25pZCAqLwotCXN0cnVjdCBsaXN0X2hlYWQJc2VfcGVyY2xudDsKLQl1MzIJCQlzZV9mbGFnczsKLQlzdHJ1Y3QgbmZzNF9jbGllbnQJKnNlX2NsaWVudDsJLyogZm9yIGV4cGlyZV9jbGllbnQgKi8KLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJc2Vfc2Vzc2lvbmlkOwotCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIHNlX2ZjaGFubmVsOwotCXN0cnVjdCBuZnNkNF9jaGFubmVsX2F0dHJzIHNlX2JjaGFubmVsOwotCXN0cnVjdCBuZnNkNF9zbG90CSpzZV9zbG90c1tdOwkvKiBmb3J3YXJkIGNoYW5uZWwgc2xvdHMgKi8KLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbmZzZDRfcHV0X3Nlc3Npb24oc3RydWN0IG5mc2Q0X3Nlc3Npb24gKnNlcykKLXsKLQlleHRlcm4gdm9pZCBmcmVlX3Nlc3Npb24oc3RydWN0IGtyZWYgKmtyZWYpOwotCWtyZWZfcHV0KCZzZXMtPnNlX3JlZiwgZnJlZV9zZXNzaW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1uZnNkNF9nZXRfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiAqc2VzKQotewotCWtyZWZfZ2V0KCZzZXMtPnNlX3JlZik7Ci19Ci0KLS8qIGZvcm1hdHRlZCBjb250ZW50cyBvZiBuZnM0X3Nlc3Npb25pZCAqLwotc3RydWN0IG5mc2Q0X3Nlc3Npb25pZCB7Ci0JY2xpZW50aWRfdAljbGllbnRpZDsKLQl1MzIJCXNlcXVlbmNlOwotCXUzMgkJcmVzZXJ2ZWQ7Ci19OwotCi0jZGVmaW5lIEhFWERJUl9MRU4gICAgIDMzIC8qIGhleCB2ZXJzaW9uIG9mIDE2IGJ5dGUgbWQ1IG9mIGNsX25hbWUgcGx1cyAnXDAnICovCi0KLS8qCi0gKiBzdHJ1Y3QgbmZzNF9jbGllbnQgLSBvbmUgcGVyIGNsaWVudC4gIENsaWVudGlkcyBsaXZlIGhlcmUuCi0gKiAJbyBFYWNoIG5mczRfY2xpZW50IGlzIGhhc2hlZCBieSBjbGllbnRpZC4KLSAqCi0gKiAJbyBFYWNoIG5mczRfY2xpZW50cyBpcyBhbHNvIGhhc2hlZCBieSBuYW1lIAotICogCSAgKHRoZSBvcGFxdWUgcXVhbnRpdHkgaW5pdGlhbGx5IHNlbnQgYnkgdGhlIGNsaWVudCB0byBpZGVudGlmeSBpdHNlbGYpLgotICogCSAgCi0gKglvIGNsX3BlcmNsaWVudCBsaXN0IGlzIHVzZWQgdG8gZW5zdXJlIG5vIGRhbmdsaW5nIHN0YXRlb3duZXIgcmVmZXJlbmNlcwotICoJICB3aGVuIHdlIGV4cGlyZSB0aGUgbmZzNF9jbGllbnQKLSAqLwotc3RydWN0IG5mczRfY2xpZW50IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWNsX2lkaGFzaDsgCS8qIGhhc2ggYnkgY2xfY2xpZW50aWQuaWQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWNsX3N0cmhhc2g7IAkvKiBoYXNoIGJ5IGNsX25hbWUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWNsX29wZW5vd25lcnM7Ci0Jc3RydWN0IGxpc3RfaGVhZAljbF9kZWxlZ2F0aW9uczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBjbF9scnU7ICAgICAgICAgLyogdGFpbCBxdWV1ZSAqLwotCXN0cnVjdCB4ZHJfbmV0b2JqCWNsX25hbWU7IAkvKiBpZCBnZW5lcmF0ZWQgYnkgY2xpZW50ICovCi0JY2hhciAgICAgICAgICAgICAgICAgICAgY2xfcmVjZGlyW0hFWERJUl9MRU5dOyAvKiByZWNvdmVyeSBkaXIgKi8KLQluZnM0X3ZlcmlmaWVyCQljbF92ZXJpZmllcjsgCS8qIGdlbmVyYXRlZCBieSBjbGllbnQgKi8KLQl0aW1lX3QgICAgICAgICAgICAgICAgICBjbF90aW1lOyAgICAgICAgLyogdGltZSBvZiBsYXN0IGxlYXNlIHJlbmV3YWwgKi8KLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQljbF9hZGRyOyAJLyogY2xpZW50IGlwYWRkcmVzcyAqLwotCXUzMgkJCWNsX2ZsYXZvcjsJLyogc2V0Y2xpZW50aWQgcHNldWRvZmxhdm9yICovCi0JY2hhcgkJCSpjbF9wcmluY2lwYWw7CS8qIHNldGNsaWVudGlkIHByaW5jaXBhbCBuYW1lICovCi0Jc3RydWN0IHN2Y19jcmVkCQljbF9jcmVkOyAJLyogc2V0Y2xpZW50aWQgcHJpbmNpcGFsICovCi0JY2xpZW50aWRfdAkJY2xfY2xpZW50aWQ7CS8qIGdlbmVyYXRlZCBieSBzZXJ2ZXIgKi8KLQluZnM0X3ZlcmlmaWVyCQljbF9jb25maXJtOwkvKiBnZW5lcmF0ZWQgYnkgc2VydmVyICovCi0Jc3RydWN0IG5mczRfY2JfY29ubgljbF9jYl9jb25uOyAgICAgLyogY2FsbGJhY2sgaW5mbyAqLwotCWF0b21pY190CQljbF9jb3VudDsJLyogcmVmIGNvdW50ICovCi0JdTMyCQkJY2xfZmlyc3RzdGF0ZTsJLyogcmVjb3ZlcnkgZGlyIGNyZWF0aW9uICovCi0KLQkvKiBmb3IgbmZzNDEgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWNsX3Nlc3Npb25zOwotCXN0cnVjdCBuZnNkNF9jbGlkX3Nsb3QJY2xfY3Nfc2xvdDsJLyogY3JlYXRlX3Nlc3Npb24gc2xvdCAqLwotCXUzMgkJCWNsX2V4Y2hhbmdlX2ZsYWdzOwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAljbF9zZXNzaW9uaWQ7Ci0KLQkvKiBmb3IgbmZzNDEgY2FsbGJhY2tzICovCi0JLyogV2UgY3VycmVudGx5IHN1cHBvcnQgYSBzaW5nbGUgYmFjayBjaGFubmVsIHdpdGggYSBzaW5nbGUgc2xvdCAqLwotCXVuc2lnbmVkIGxvbmcJCWNsX2NiX3Nsb3RfYnVzeTsKLQl1MzIJCQljbF9jYl9zZXFfbnI7Ci0Jc3RydWN0IHN2Y194cHJ0CQkqY2xfY2JfeHBydDsJLyogNC4xIGNhbGxiYWNrIHRyYW5zcG9ydCAqLwotCXN0cnVjdCBycGNfd2FpdF9xdWV1ZQljbF9jYl93YWl0cTsJLyogYmFja2NoYW5uZWwgY2FsbGVycyBtYXkgKi8KLQkJCQkJCS8qIHdhaXQgaGVyZSBmb3Igc2xvdHMgKi8KLX07Ci0KLS8qIHN0cnVjdCBuZnM0X2NsaWVudF9yZXNldAotICogb25lIHBlciBvbGQgY2xpZW50LiBQb3B1bGF0ZXMgcmVzZXRfc3RyX2hhc2h0YmwuIEZpbGxlZCBmcm9tIGNvbmZfaWRfaGFzaHRibAotICogdXBvbiBsZWFzZSByZXNldCwgb3IgZnJvbSB1cGNhbGwgdG8gc3RhdGVfZGFlbW9uICh0byByZWFkIGluIHN0YXRlCi0gKiBmcm9tIG5vbi12b2xpdGlsZSBzdG9yYWdlKSB1cG9uIHJlYm9vdC4KLSAqLwotc3RydWN0IG5mczRfY2xpZW50X3JlY2xhaW0gewotCXN0cnVjdCBsaXN0X2hlYWQJY3Jfc3RyaGFzaDsJLyogaGFzaCBieSBjcl9uYW1lICovCi0JY2hhcgkJCWNyX3JlY2RpcltIRVhESVJfTEVOXTsgLyogcmVjb3ZlciBkaXIgKi8KLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotdXBkYXRlX3N0YXRlaWQoc3RhdGVpZF90ICpzdGF0ZWlkKQotewotCXN0YXRlaWQtPnNpX2dlbmVyYXRpb24rKzsKLX0KLQotLyogQSByZWFzb25hYmxlIHZhbHVlIGZvciBSRVBMQVlfSVNJWkUgd2FzIGVzdGltYXRlZCBhcyBmb2xsb3dzOiAgCi0gKiBUaGUgT1BFTiByZXNwb25zZSwgdHlwaWNhbGx5IHRoZSBsYXJnZXN0LCByZXF1aXJlcyAKLSAqICAgNChzdGF0dXMpICsgOChzdGF0ZWlkKSArIDIwKGNoYW5nZWluZm8pICsgNChyZmxhZ3MpICsgIDgodmVyaWZpZXIpICsgCi0gKiAgIDQoZGVsZWcuIHR5cGUpICsgOChkZWxlZy4gc3RhdGVpZCkgKyA0KGRlbGVnLiByZWNhbGwgZmxhZykgKyAKLSAqICAgMjAoZGVsZWcuIHNwYWNlIGxpbWl0KSArIH4zMihkZWxlZy4gYWNlKSA9IDExMiBieXRlcyAKLSAqLwotCi0jZGVmaW5lIE5GU0Q0X1JFUExBWV9JU0laRSAgICAgICAxMTIgCi0KLS8qCi0gKiBSZXBsYXkgYnVmZmVyLCB3aGVyZSB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IHNlcWlkLW11dGF0aW5nIG9wZXJhdGlvbiAKLSAqIGlzIGNhY2hlZC4gCi0gKi8KLXN0cnVjdCBuZnM0X3JlcGxheSB7Ci0JX19iZTMyCQkJcnBfc3RhdHVzOwotCXVuc2lnbmVkIGludAkJcnBfYnVmbGVuOwotCWNoYXIJCQkqcnBfYnVmOwotCXVuc2lnbmVkCQlpbnRycF9hbGxvY2F0ZWQ7Ci0Jc3RydWN0IGtuZnNkX2ZoCQlycF9vcGVuZmg7Ci0JY2hhcgkJCXJwX2lidWZbTkZTRDRfUkVQTEFZX0lTSVpFXTsKLX07Ci0KLS8qCi0qIG5mczRfc3RhdGVvd25lciBjYW4gZWl0aGVyIGJlIGFuIG9wZW5fb3duZXIsIG9yIGEgbG9ja19vd25lcgotKgotKiAgICBzb19pZGhhc2g6ICBzdGF0ZWlkX2hhc2h0YmxbXSBmb3Igb3BlbiBvd25lciwgbG9ja3N0YXRlaWRfaGFzaHRibFtdCi0qICAgICAgICAgZm9yIGxvY2tfb3duZXIKLSogICAgc29fc3RyaGFzaDogb3duZXJzdHJfaGFzaHRibFtdIGZvciBvcGVuX293bmVyLCBsb2NrX293bmVyc3RyX2hhc2h0YmxbXQotKiAgICAgICAgIGZvciBsb2NrX293bmVyCi0qICAgIHNvX3BlcmNsaWVudDogbmZzNF9jbGllbnQtPmNsX3BlcmNsaWVudCBlbnRyeSAtIHVzZWQgd2hlbiBuZnM0X2NsaWVudAotKiAgICAgICAgIHN0cnVjdCBpcyByZWFwZWQuCi0qICAgIHNvX3BlcmZpbGVzdGF0ZTogaGVhZHMgdGhlIGxpc3Qgb2YgbmZzNF9zdGF0ZWlkIChlaXRoZXIgb3BlbiBvciBsb2NrKSAKLSogICAgICAgICBhbmQgaXMgdXNlZCB0byBlbnN1cmUgbm8gZGFuZ2xpbmcgbmZzNF9zdGF0ZWlkIHJlZmVyZW5jZXMgd2hlbiB3ZSAKLSogICAgICAgICByZWxlYXNlIGEgc3RhdGVvd25lci4KLSogICAgc29fcGVybG9ja293bmVyOiAob3BlbikgbmZzNF9zdGF0ZWlkLT5zdF9wZXJsb2Nrb3duZXIgZW50cnkgLSB1c2VkIHdoZW4KLSogICAgICAgICBjbG9zZSBpcyBjYWxsZWQgdG8gcmVhcCBhc3NvY2lhdGVkIGJ5dGUtcmFuZ2UgbG9ja3MKLSogICAgc29fY2xvc2VfbHJ1OiAob3Blbikgc3RhdGVvd25lciBpcyBwbGFjZWQgb24gdGhpcyBsaXN0IGluc3RlYWQgb2YgYmVpbmcKLSogICAgICAgICByZWFwZWQgKHdoZW4gc29fcGVyZmlsZXN0YXRlIGlzIGVtcHR5KSB0byBob2xkIHRoZSBsYXN0IGNsb3NlIHJlcGxheS4KLSogICAgICAgICByZWFwZWQgYnkgbGF1bmRyYW1hdCB0aHJlYWQgYWZ0ZXIgbGVhc2UgcGVyaW9kLgotKi8KLXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgewotCXN0cnVjdCBrcmVmCQlzb19yZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgc29faWRoYXNoOyAgIC8qIGhhc2ggYnkgc29faWQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzb19zdHJoYXNoOyAgIC8qIGhhc2ggYnkgb3BfbmFtZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNvX3BlcmNsaWVudDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzb19zdGF0ZWlkczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzb19wZXJzdGF0ZWlkOyAvKiBmb3IgbG9ja293bmVycyBvbmx5ICovCi0Jc3RydWN0IGxpc3RfaGVhZAlzb19jbG9zZV9scnU7IC8qIHRhaWwgcXVldWUgKi8KLQl0aW1lX3QJCQlzb190aW1lOyAvKiB0aW1lIG9mIHBsYWNlbWVudCBvbiBzb19jbG9zZV9scnUgKi8KLQlpbnQJCQlzb19pc19vcGVuX293bmVyOyAvKiAxPW9wZW5vd25lciwwPWxvY2tvd25lciAqLwotCXUzMiAgICAgICAgICAgICAgICAgICAgIHNvX2lkOwotCXN0cnVjdCBuZnM0X2NsaWVudCAqICAgIHNvX2NsaWVudDsKLQkvKiBhZnRlciBpbmNyZW1lbnQgaW4gRU5DT0RFX1NFUUlEX09QX1RBSUwsIHJlcHJlc2VudHMgdGhlIG5leHQKLQkgKiBzZXF1ZW5jZSBpZCBleHBlY3RlZCBmcm9tIHRoZSBjbGllbnQ6ICovCi0JdTMyICAgICAgICAgICAgICAgICAgICAgc29fc2VxaWQ7Ci0Jc3RydWN0IHhkcl9uZXRvYmogICAgICAgc29fb3duZXI7ICAgICAvKiBvcGVuIG93bmVyIG5hbWUgKi8KLQlpbnQgICAgICAgICAgICAgICAgICAgICBzb19jb25maXJtZWQ7IC8qIHN1Y2Nlc3NmdWwgT1BFTl9DT05GSVJNPyAqLwotCXN0cnVjdCBuZnM0X3JlcGxheQlzb19yZXBsYXk7Ci19OwotCi0vKgotKiAgbmZzNF9maWxlOiBhIGZpbGUgb3BlbmVkIGJ5IHNvbWUgbnVtYmVyIG9mIChvcGVuKSBuZnM0X3N0YXRlb3duZXJzLgotKiAgICBvIGZpX3BlcmZpbGUgbGlzdCBpcyB1c2VkIHRvIHNlYXJjaCBmb3IgY29uZmxpY3RpbmcgCi0qICAgICAgc2hhcmVfYWNjZXMsIHNoYXJlX2Rlbnkgb24gdGhlIGZpbGUuCi0qLwotc3RydWN0IG5mczRfZmlsZSB7Ci0JYXRvbWljX3QJCWZpX3JlZjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBmaV9oYXNoOyAgICAvKiBoYXNoIGJ5ICJzdHJ1Y3QgaW5vZGUgKiIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBmaV9zdGF0ZWlkczsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWZpX2RlbGVnYXRpb25zOwotCXN0cnVjdCBpbm9kZQkJKmZpX2lub2RlOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGZpX2lkOyAgICAgIC8qIHVzZWQgd2l0aCBzdGF0ZW93bmVyLT5zb19pZCAKLQkJCQkJICAgICAqIGZvciBzdGF0ZWlkX2hhc2h0YmwgaGFzaCAqLwotCWJvb2wJCQlmaV9oYWRfY29uZmxpY3Q7Ci19OwotCi0vKgotKiBuZnM0X3N0YXRlaWQgY2FuIGVpdGhlciBiZSBhbiBvcGVuIHN0YXRlaWQgb3IgKGV2ZW50dWFsbHkpIGEgbG9jayBzdGF0ZWlkCi0qCi0qIChvcGVuKW5mczRfc3RhdGVpZDogb25lIHBlciAob3BlbiluZnM0X3N0YXRlb3duZXIsIG5mczRfZmlsZQotKgotKiAJc3RfaGFzaDogc3RhdGVpZF9oYXNodGJsW10gZW50cnkgb3IgbG9ja3N0YXRlaWRfaGFzaHRibCBlbnRyeQotKiAJc3RfcGVyZmlsZTogZmlsZV9oYXNodGJsW10gZW50cnkuCi0qIAlzdF9wZXJmaWxlX3N0YXRlOiBuZnM0X3N0YXRlb3duZXItPnNvX3BlcmZpbGVzdGF0ZQotKiAgICAgICBzdF9wZXJsb2Nrb3duZXI6IChvcGVuIHN0YXRlaWQpIGxpc3Qgb2YgbG9jayBuZnM0X3N0YXRlb3duZXJzCi0qIAlzdF9hY2Nlc3NfYm1hcDogdXNlZCBvbmx5IGZvciBvcGVuIHN0YXRlaWQKLSogCXN0X2RlbnlfYm1hcDogdXNlZCBvbmx5IGZvciBvcGVuIHN0YXRlaWQKLSoJc3Rfb3BlbnN0cDogb3BlbiBzdGF0ZWlkIGxvY2sgc3RhdGVpZCB3YXMgZGVyaXZlZCBmcm9tCi0qCi0qIFhYWDogb3BlbiBzdGF0ZWlkcyBhbmQgbG9jayBzdGF0ZWlkcyBoYXZlIGRpdmVyZ2VkIHN1ZmZpY2llbnRseSB0aGF0Ci0qIHdlIHNob3VsZCBjb25zaWRlciBkZWZpbmluZyBzZXBhcmF0ZSBzdHJ1Y3RzIGZvciB0aGUgdHdvIGNhc2VzLgotKi8KLQotc3RydWN0IG5mczRfc3RhdGVpZCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgc3RfaGFzaDsgCi0Jc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgc3RfcGVyZmlsZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBzdF9wZXJzdGF0ZW93bmVyOwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIHN0X2xvY2tvd25lcnM7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAgICAgICogc3Rfc3RhdGVvd25lcjsKLQlzdHJ1Y3QgbmZzNF9maWxlICAgICAgICAgICAgKiBzdF9maWxlOwotCXN0YXRlaWRfdCAgICAgICAgICAgICAgICAgICAgIHN0X3N0YXRlaWQ7Ci0Jc3RydWN0IGZpbGUgICAgICAgICAgICAgICAgICogc3RfdmZzX2ZpbGU7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgc3RfYWNjZXNzX2JtYXA7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgc3RfZGVueV9ibWFwOwotCXN0cnVjdCBuZnM0X3N0YXRlaWQgICAgICAgICAqIHN0X29wZW5zdHA7Ci19OwotCi0vKiBmbGFncyBmb3IgcHJlcHJvY2Vzc19zZXFpZF9vcCgpICovCi0jZGVmaW5lIEhBU19TRVNTSU9OICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQ09ORklSTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBPUEVOX1NUQVRFICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIExPQ0tfU1RBVEUgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUkRfU1RBVEUJICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFdSX1NUQVRFCSAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBDTE9TRV9TVEFURSAgICAgICAgICAgICAweDAwMDAwMDQwCi0KLSNkZWZpbmUgc2VxaWRfbXV0YXRpbmdfZXJyKGVycikgICAgICAgICAgICAgICAgICAgICAgIFwKLQkoKChlcnIpICE9IG5mc2Vycl9zdGFsZV9jbGllbnRpZCkgJiYgICAgXAotCSgoZXJyKSAhPSBuZnNlcnJfYmFkX3NlcWlkKSAmJiAgICAgICAgICBcCi0JKChlcnIpICE9IG5mc2Vycl9zdGFsZV9zdGF0ZWlkKSAmJiAgICAgIFwKLQkoKGVycikgIT0gbmZzZXJyX2JhZF9zdGF0ZWlkKSkKLQotc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlOwotCi1leHRlcm4gX19iZTMyIG5mczRfcHJlcHJvY2Vzc19zdGF0ZWlkX29wKHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAotCQlzdGF0ZWlkX3QgKnN0YXRlaWQsIGludCBmbGFncywgc3RydWN0IGZpbGUgKipmaWxwKTsKLWV4dGVybiB2b2lkIG5mczRfbG9ja19zdGF0ZSh2b2lkKTsKLWV4dGVybiB2b2lkIG5mczRfdW5sb2NrX3N0YXRlKHZvaWQpOwotZXh0ZXJuIGludCBuZnM0X2luX2dyYWNlKHZvaWQpOwotZXh0ZXJuIF9fYmUzMiBuZnM0X2NoZWNrX29wZW5fcmVjbGFpbShjbGllbnRpZF90ICpjbGlkKTsKLWV4dGVybiB2b2lkIHB1dF9uZnM0X2NsaWVudChzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCk7Ci1leHRlcm4gdm9pZCBuZnM0X2ZyZWVfc3RhdGVvd25lcihzdHJ1Y3Qga3JlZiAqa3JlZik7Ci1leHRlcm4gaW50IHNldF9jYWxsYmFja19jcmVkKHZvaWQpOwotZXh0ZXJuIHZvaWQgbmZzZDRfcHJvYmVfY2FsbGJhY2soc3RydWN0IG5mczRfY2xpZW50ICpjbHApOwotZXh0ZXJuIHZvaWQgbmZzZDRfY2JfcmVjYWxsKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwKTsKLWV4dGVybiB2b2lkIG5mczRfcHV0X2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApOwotZXh0ZXJuIF9fYmUzMiBuZnM0X21ha2VfcmVjX2NsaWRuYW1lKGNoYXIgKmNsaWRuYW1lLCBzdHJ1Y3QgeGRyX25ldG9iaiAqY2xuYW1lKTsKLWV4dGVybiB2b2lkIG5mc2Q0X2luaXRfcmVjZGlyKGNoYXIgKnJlY2Rpcl9uYW1lKTsKLWV4dGVybiBpbnQgbmZzZDRfcmVjZGlyX2xvYWQodm9pZCk7Ci1leHRlcm4gdm9pZCBuZnNkNF9zaHV0ZG93bl9yZWNkaXIodm9pZCk7Ci1leHRlcm4gaW50IG5mczRfY2xpZW50X3RvX3JlY2xhaW0oY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gaW50IG5mczRfaGFzX3JlY2xhaW1lZF9zdGF0ZShjb25zdCBjaGFyICpuYW1lLCBib29sIHVzZV9leGNoYW5nZV9pZCk7Ci1leHRlcm4gdm9pZCBuZnNkNF9yZWNkaXJfcHVyZ2Vfb2xkKHZvaWQpOwotZXh0ZXJuIGludCBuZnNkNF9jcmVhdGVfY2xpZF9kaXIoc3RydWN0IG5mczRfY2xpZW50ICpjbHApOwotZXh0ZXJuIHZvaWQgbmZzZDRfcmVtb3ZlX2NsaWRfZGlyKHN0cnVjdCBuZnM0X2NsaWVudCAqY2xwKTsKLQotc3RhdGljIGlubGluZSB2b2lkCi1uZnM0X3B1dF9zdGF0ZW93bmVyKHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnNvKQotewotCWtyZWZfcHV0KCZzby0+c29fcmVmLCBuZnM0X2ZyZWVfc3RhdGVvd25lcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbmZzNF9nZXRfc3RhdGVvd25lcihzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzbykKLXsKLQlrcmVmX2dldCgmc28tPnNvX3JlZik7Ci19Ci0KLSNlbmRpZiAgIC8qIE5GU0Q0X1NUQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmggYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3lzY2FsbC5oCmluZGV4IDdhM2I1NjUuLjgxMmJjMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaApAQCAtOSwxNCArOSw4IEBACiAjaWZuZGVmIE5GU0RfU1lTQ0FMTF9ICiAjZGVmaW5lIE5GU0RfU1lTQ0FMTF9ICiAKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpZmRlZiBfX0tFUk5FTF9fCi0jIGluY2x1ZGUgPGxpbnV4L2luLmg+Ci0jZW5kaWYgCi0jaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL2NvbnN0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkL2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZmguaD4KIAogLyoKICAqIFZlcnNpb24gb2YgdGhlIHN5c2NhbGwgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QveGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMTMyZWYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3hkci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2xpbnV4L25mc2QveGRyLmgKLSAqCi0gKiBYRFIgdHlwZXMgZm9yIG5mc2QuIFRoaXMgaXMgbWFpbmx5IGEgdHlwaW5nIGV4ZXJjaXNlLgotICovCi0KLSNpZm5kZWYgTElOVVhfTkZTRF9ICi0jZGVmaW5lIExJTlVYX05GU0RfSAotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMuaD4KLQotc3RydWN0IG5mc2RfZmhhbmRsZSB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci19OwotCi1zdHJ1Y3QgbmZzZF9zYXR0cmFyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCXN0cnVjdCBpYXR0cgkJYXR0cnM7Ci19OwotCi1zdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCWNoYXIgKgkJCW5hbWU7Ci0JdW5zaWduZWQgaW50CQlsZW47Ci19OwotCi1zdHJ1Y3QgbmZzZF9yZWFkYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JX191MzIJCQlvZmZzZXQ7Ci0JX191MzIJCQljb3VudDsKLQlpbnQJCQl2bGVuOwotfTsKLQotc3RydWN0IG5mc2Rfd3JpdGVhcmdzIHsKLQlzdmNfZmgJCQlmaDsKLQlfX3UzMgkJCW9mZnNldDsKLQlpbnQJCQlsZW47Ci0JaW50CQkJdmxlbjsKLX07Ci0KLXN0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCWNoYXIgKgkJCW5hbWU7Ci0JdW5zaWduZWQgaW50CQlsZW47Ci0Jc3RydWN0IGlhdHRyCQlhdHRyczsKLX07Ci0KLXN0cnVjdCBuZnNkX3JlbmFtZWFyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZmaDsKLQljaGFyICoJCQlmbmFtZTsKLQl1bnNpZ25lZCBpbnQJCWZsZW47Ci0Jc3RydWN0IHN2Y19maAkJdGZoOwotCWNoYXIgKgkJCXRuYW1lOwotCXVuc2lnbmVkIGludAkJdGxlbjsKLX07Ci0KLXN0cnVjdCBuZnNkX3JlYWRsaW5rYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JY2hhciAqCQkJYnVmZmVyOwotfTsKLQkKLXN0cnVjdCBuZnNkX2xpbmthcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7Ci0Jc3RydWN0IHN2Y19maAkJdGZoOwotCWNoYXIgKgkJCXRuYW1lOwotCXVuc2lnbmVkIGludAkJdGxlbjsKLX07Ci0KLXN0cnVjdCBuZnNkX3N5bWxpbmthcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7Ci0JY2hhciAqCQkJZm5hbWU7Ci0JdW5zaWduZWQgaW50CQlmbGVuOwotCWNoYXIgKgkJCXRuYW1lOwotCXVuc2lnbmVkIGludAkJdGxlbjsKLQlzdHJ1Y3QgaWF0dHIJCWF0dHJzOwotfTsKLQotc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCV9fdTMyCQkJY29va2llOwotCV9fdTMyCQkJY291bnQ7Ci0JX19iZTMyICoJCWJ1ZmZlcjsKLX07Ci0KLXN0cnVjdCBuZnNkX2F0dHJzdGF0IHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQlzdHJ1Y3Qga3N0YXQJCXN0YXQ7Ci19OwotCi1zdHJ1Y3QgbmZzZF9kaXJvcHJlcyAgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCXN0cnVjdCBrc3RhdAkJc3RhdDsKLX07Ci0KLXN0cnVjdCBuZnNkX3JlYWRsaW5rcmVzIHsKLQlpbnQJCQlsZW47Ci19OwotCi1zdHJ1Y3QgbmZzZF9yZWFkcmVzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQl1bnNpZ25lZCBsb25nCQljb3VudDsKLQlzdHJ1Y3Qga3N0YXQJCXN0YXQ7Ci19OwotCi1zdHJ1Y3QgbmZzZF9yZWFkZGlycmVzIHsKLQlpbnQJCQljb3VudDsKLQotCXN0cnVjdCByZWFkZGlyX2NkCWNvbW1vbjsKLQlfX2JlMzIgKgkJYnVmZmVyOwotCWludAkJCWJ1ZmxlbjsKLQlfX2JlMzIgKgkJb2Zmc2V0OwotfTsKLQotc3RydWN0IG5mc2Rfc3RhdGZzcmVzIHsKLQlzdHJ1Y3Qga3N0YXRmcwkJc3RhdHM7Ci19OwotCi0vKgotICogU3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIFhEUiBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCi0gKi8KLXVuaW9uIG5mc2RfeGRyc3RvcmUgewotCXN0cnVjdCBuZnNkX3NhdHRyYXJncwlzYXR0cjsKLQlzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MJZGlyb3A7Ci0Jc3RydWN0IG5mc2RfcmVhZGFyZ3MJcmVhZDsKLQlzdHJ1Y3QgbmZzZF93cml0ZWFyZ3MJd3JpdGU7Ci0Jc3RydWN0IG5mc2RfY3JlYXRlYXJncwljcmVhdGU7Ci0Jc3RydWN0IG5mc2RfcmVuYW1lYXJncwlyZW5hbWU7Ci0Jc3RydWN0IG5mc2RfbGlua2FyZ3MJbGluazsKLQlzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncwlzeW1saW5rOwotCXN0cnVjdCBuZnNkX3JlYWRkaXJhcmdzCXJlYWRkaXI7Ci19OwotCi0jZGVmaW5lIE5GUzJfU1ZDX1hEUlNJWkUJc2l6ZW9mKHVuaW9uIG5mc2RfeGRyc3RvcmUpCi0KLQotaW50IG5mc3N2Y19kZWNvZGVfdm9pZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHZvaWQgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfZmhhbmRsZSAqKTsKLWludCBuZnNzdmNfZGVjb2RlX3NhdHRyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2Rfc2F0dHJhcmdzICopOwotaW50IG5mc3N2Y19kZWNvZGVfZGlyb3BhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV9yZWFkYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2RfcmVhZGFyZ3MgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV93cml0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkX3dyaXRlYXJncyAqKTsKLWludCBuZnNzdmNfZGVjb2RlX2NyZWF0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV9yZW5hbWVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZF9yZW5hbWVhcmdzICopOwotaW50IG5mc3N2Y19kZWNvZGVfcmVhZGxpbmthcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZF9yZWFkbGlua2FyZ3MgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV9saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2RfbGlua2FyZ3MgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV9zeW1saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2Rfc3ltbGlua2FyZ3MgKik7Ci1pbnQgbmZzc3ZjX2RlY29kZV9yZWFkZGlyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgKik7Ci1pbnQgbmZzc3ZjX2VuY29kZV92b2lkKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKLWludCBuZnNzdmNfZW5jb2RlX2F0dHJzdGF0KHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfYXR0cnN0YXQgKik7Ci1pbnQgbmZzc3ZjX2VuY29kZV9kaXJvcHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkX2Rpcm9wcmVzICopOwotaW50IG5mc3N2Y19lbmNvZGVfcmVhZGxpbmtyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZF9yZWFkbGlua3JlcyAqKTsKLWludCBuZnNzdmNfZW5jb2RlX3JlYWRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZF9yZWFkcmVzICopOwotaW50IG5mc3N2Y19lbmNvZGVfc3RhdGZzcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2Rfc3RhdGZzcmVzICopOwotaW50IG5mc3N2Y19lbmNvZGVfcmVhZGRpcnJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkX3JlYWRkaXJyZXMgKik7Ci0KLWludCBuZnNzdmNfZW5jb2RlX2VudHJ5KHZvaWQgKiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCWludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCk7Ci0KLWludCBuZnNzdmNfcmVsZWFzZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfZmhhbmRsZSAqKTsKLQotLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgTkZTdjIgQUNMIGNvZGUgKi8KLV9fYmUzMiAqbmZzMnN2Y19lbmNvZGVfZmF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHApOwotX19iZTMyICpuZnMyc3ZjX2RlY29kZV9maChfX2JlMzIgKnAsIHN0cnVjdCBzdmNfZmggKmZocCk7Ci0KLSNlbmRpZiAvKiBMSU5VWF9ORlNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHIzLmggYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyMy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjFlZGRkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHIzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvbGludXgvbmZzZC94ZHIzLmgKLSAqCi0gKiBYRFIgdHlwZXMgZm9yIE5GU3YzIGluIG5mc2QuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2LTE5OTgsIE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgotICovCi0KLSNpZm5kZWYgX0xJTlVYX05GU0RfWERSM19ICi0jZGVmaW5lIF9MSU5VWF9ORlNEX1hEUjNfSAotCi0jaW5jbHVkZSA8bGludXgvbmZzZC94ZHIuaD4KLQotc3RydWN0IG5mc2QzX3NhdHRyYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0Jc3RydWN0IGlhdHRyCQlhdHRyczsKLQlpbnQJCQljaGVja19ndWFyZDsKLQl0aW1lX3QJCQlndWFyZHRpbWU7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfZGlyb3BhcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQljaGFyICoJCQluYW1lOwotCXVuc2lnbmVkIGludAkJbGVuOwotfTsKLQotc3RydWN0IG5mc2QzX2FjY2Vzc2FyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCXVuc2lnbmVkIGludAkJYWNjZXNzOwotfTsKLQotc3RydWN0IG5mc2QzX3JlYWRhcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQlfX3U2NAkJCW9mZnNldDsKLQlfX3UzMgkJCWNvdW50OwotCWludAkJCXZsZW47Ci19OwotCi1zdHJ1Y3QgbmZzZDNfd3JpdGVhcmdzIHsKLQlzdmNfZmgJCQlmaDsKLQlfX3U2NAkJCW9mZnNldDsKLQlfX3UzMgkJCWNvdW50OwotCWludAkJCXN0YWJsZTsKLQlfX3UzMgkJCWxlbjsKLQlpbnQJCQl2bGVuOwotfTsKLQotc3RydWN0IG5mc2QzX2NyZWF0ZWFyZ3MgewotCXN0cnVjdCBzdmNfZmgJCWZoOwotCWNoYXIgKgkJCW5hbWU7Ci0JdW5zaWduZWQgaW50CQlsZW47Ci0JaW50CQkJY3JlYXRlbW9kZTsKLQlzdHJ1Y3QgaWF0dHIJCWF0dHJzOwotCV9fYmUzMiAqCQl2ZXJmOwotfTsKLQotc3RydWN0IG5mc2QzX21rbm9kYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JY2hhciAqCQkJbmFtZTsKLQl1bnNpZ25lZCBpbnQJCWxlbjsKLQlfX3UzMgkJCWZ0eXBlOwotCV9fdTMyCQkJbWFqb3IsIG1pbm9yOwotCXN0cnVjdCBpYXR0cgkJYXR0cnM7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfcmVuYW1lYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmZoOwotCWNoYXIgKgkJCWZuYW1lOwotCXVuc2lnbmVkIGludAkJZmxlbjsKLQlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7Ci0JY2hhciAqCQkJdG5hbWU7Ci0JdW5zaWduZWQgaW50CQl0bGVuOwotfTsKLQotc3RydWN0IG5mc2QzX3JlYWRsaW5rYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JY2hhciAqCQkJYnVmZmVyOwotfTsKLQotc3RydWN0IG5mc2QzX2xpbmthcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7Ci0Jc3RydWN0IHN2Y19maAkJdGZoOwotCWNoYXIgKgkJCXRuYW1lOwotCXVuc2lnbmVkIGludAkJdGxlbjsKLX07Ci0KLXN0cnVjdCBuZnNkM19zeW1saW5rYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmZoOwotCWNoYXIgKgkJCWZuYW1lOwotCXVuc2lnbmVkIGludAkJZmxlbjsKLQljaGFyICoJCQl0bmFtZTsKLQl1bnNpZ25lZCBpbnQJCXRsZW47Ci0Jc3RydWN0IGlhdHRyCQlhdHRyczsKLX07Ci0KLXN0cnVjdCBuZnNkM19yZWFkZGlyYXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JX191NjQJCQljb29raWU7Ci0JX191MzIJCQlkaXJjb3VudDsKLQlfX3UzMgkJCWNvdW50OwotCV9fYmUzMiAqCQl2ZXJmOwotCV9fYmUzMiAqCQlidWZmZXI7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfY29tbWl0YXJncyB7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JX191NjQJCQlvZmZzZXQ7Ci0JX191MzIJCQljb3VudDsKLX07Ci0KLXN0cnVjdCBuZnNkM19nZXRhY2xhcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQlpbnQJCQltYXNrOwotfTsKLQotc3RydWN0IHBvc2l4X2FjbDsKLXN0cnVjdCBuZnNkM19zZXRhY2xhcmdzIHsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQlpbnQJCQltYXNrOwotCXN0cnVjdCBwb3NpeF9hY2wJKmFjbF9hY2Nlc3M7Ci0Jc3RydWN0IHBvc2l4X2FjbAkqYWNsX2RlZmF1bHQ7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfYXR0cnN0YXQgewotCV9fYmUzMgkJCXN0YXR1czsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDsKLQlzdHJ1Y3Qga3N0YXQgICAgICAgICAgICBzdGF0OwotfTsKLQotLyogTE9PS1VQLCBDUkVBVEUsIE1LRElSLCBTWU1MSU5LLCBNS05PRCAqLwotc3RydWN0IG5mc2QzX2Rpcm9wcmVzICB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCXN0cnVjdCBzdmNfZmgJCWRpcmZoOwotCXN0cnVjdCBzdmNfZmgJCWZoOwotfTsKLQotc3RydWN0IG5mc2QzX2FjY2Vzc3JlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCXN0cnVjdCBzdmNfZmgJCWZoOwotCV9fdTMyCQkJYWNjZXNzOwotfTsKLQotc3RydWN0IG5mc2QzX3JlYWRsaW5rcmVzIHsKLQlfX2JlMzIJCQlzdGF0dXM7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JX191MzIJCQlsZW47Ci19OwotCi1zdHJ1Y3QgbmZzZDNfcmVhZHJlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCXN0cnVjdCBzdmNfZmgJCWZoOwotCXVuc2lnbmVkIGxvbmcJCWNvdW50OwotCWludAkJCWVvZjsKLX07Ci0KLXN0cnVjdCBuZnNkM193cml0ZXJlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCXN0cnVjdCBzdmNfZmgJCWZoOwotCXVuc2lnbmVkIGxvbmcJCWNvdW50OwotCWludAkJCWNvbW1pdHRlZDsKLX07Ci0KLXN0cnVjdCBuZnNkM19yZW5hbWVyZXMgewotCV9fYmUzMgkJCXN0YXR1czsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmZmg7Ci0Jc3RydWN0IHN2Y19maAkJdGZoOwotfTsKLQotc3RydWN0IG5mc2QzX2xpbmtyZXMgewotCV9fYmUzMgkJCXN0YXR1czsKLQlzdHJ1Y3Qgc3ZjX2ZoCQl0Zmg7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfcmVhZGRpcnJlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCXN0cnVjdCBzdmNfZmgJCWZoOwotCWludAkJCWNvdW50OwotCV9fYmUzMgkJCXZlcmZbMl07Ci0KLQlzdHJ1Y3QgcmVhZGRpcl9jZAljb21tb247Ci0JX19iZTMyICoJCWJ1ZmZlcjsKLQlpbnQJCQlidWZsZW47Ci0JX19iZTMyICoJCW9mZnNldDsKLQlfX2JlMzIgKgkJb2Zmc2V0MTsKLQlzdHJ1Y3Qgc3ZjX3Jxc3QgKglycXN0cDsKLQotfTsKLQotc3RydWN0IG5mc2QzX2Zzc3RhdHJlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCXN0cnVjdCBrc3RhdGZzCQlzdGF0czsKLQlfX3UzMgkJCWludmFyc2VjOwotfTsKLQotc3RydWN0IG5mc2QzX2ZzaW5mb3JlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCV9fdTMyCQkJZl9ydG1heDsKLQlfX3UzMgkJCWZfcnRwcmVmOwotCV9fdTMyCQkJZl9ydG11bHQ7Ci0JX191MzIJCQlmX3d0bWF4OwotCV9fdTMyCQkJZl93dHByZWY7Ci0JX191MzIJCQlmX3d0bXVsdDsKLQlfX3UzMgkJCWZfZHRwcmVmOwotCV9fdTY0CQkJZl9tYXhmaWxlc2l6ZTsKLQlfX3UzMgkJCWZfcHJvcGVydGllczsKLX07Ci0KLXN0cnVjdCBuZnNkM19wYXRoY29uZnJlcyB7Ci0JX19iZTMyCQkJc3RhdHVzOwotCV9fdTMyCQkJcF9saW5rX21heDsKLQlfX3UzMgkJCXBfbmFtZV9tYXg7Ci0JX191MzIJCQlwX25vX3RydW5jOwotCV9fdTMyCQkJcF9jaG93bl9yZXN0cmljdGVkOwotCV9fdTMyCQkJcF9jYXNlX2luc2Vuc2l0aXZlOwotCV9fdTMyCQkJcF9jYXNlX3ByZXNlcnZpbmc7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfY29tbWl0cmVzIHsKLQlfX2JlMzIJCQlzdGF0dXM7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci19OwotCi1zdHJ1Y3QgbmZzZDNfZ2V0YWNscmVzIHsKLQlfX2JlMzIJCQlzdGF0dXM7Ci0Jc3RydWN0IHN2Y19maAkJZmg7Ci0JaW50CQkJbWFzazsKLQlzdHJ1Y3QgcG9zaXhfYWNsCSphY2xfYWNjZXNzOwotCXN0cnVjdCBwb3NpeF9hY2wJKmFjbF9kZWZhdWx0OwotfTsKLQotLyogZHVtbXkgdHlwZSBmb3IgcmVsZWFzZSAqLwotc3RydWN0IG5mc2QzX2ZoYW5kbGVfcGFpciB7Ci0JX191MzIJCQlkdW1teTsKLQlzdHJ1Y3Qgc3ZjX2ZoCQlmaDE7Ci0Jc3RydWN0IHN2Y19maAkJZmgyOwotfTsKLQotLyoKLSAqIFN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciBYRFIgYXJndW1lbnRzIGFuZCByZXN1bHRzLgotICovCi11bmlvbiBuZnNkM194ZHJzdG9yZSB7Ci0Jc3RydWN0IG5mc2QzX3NhdHRyYXJncwkJc2F0dHJhcmdzOwotCXN0cnVjdCBuZnNkM19kaXJvcGFyZ3MJCWRpcm9wYXJnczsKLQlzdHJ1Y3QgbmZzZDNfcmVhZGFyZ3MJCXJlYWRhcmdzOwotCXN0cnVjdCBuZnNkM193cml0ZWFyZ3MJCXdyaXRlYXJnczsKLQlzdHJ1Y3QgbmZzZDNfY3JlYXRlYXJncwkJY3JlYXRlYXJnczsKLQlzdHJ1Y3QgbmZzZDNfcmVuYW1lYXJncwkJcmVuYW1lYXJnczsKLQlzdHJ1Y3QgbmZzZDNfbGlua2FyZ3MJCWxpbmthcmdzOwotCXN0cnVjdCBuZnNkM19zeW1saW5rYXJncwlzeW1saW5rYXJnczsKLQlzdHJ1Y3QgbmZzZDNfcmVhZGRpcmFyZ3MJcmVhZGRpcmFyZ3M7Ci0Jc3RydWN0IG5mc2QzX2Rpcm9wcmVzIAkJZGlyb3ByZXM7Ci0Jc3RydWN0IG5mc2QzX2FjY2Vzc3JlcwkJYWNjZXNzcmVzOwotCXN0cnVjdCBuZnNkM19yZWFkbGlua3JlcwlyZWFkbGlua3JlczsKLQlzdHJ1Y3QgbmZzZDNfcmVhZHJlcwkJcmVhZHJlczsKLQlzdHJ1Y3QgbmZzZDNfd3JpdGVyZXMJCXdyaXRlcmVzOwotCXN0cnVjdCBuZnNkM19yZW5hbWVyZXMJCXJlbmFtZXJlczsKLQlzdHJ1Y3QgbmZzZDNfbGlua3JlcwkJbGlua3JlczsKLQlzdHJ1Y3QgbmZzZDNfcmVhZGRpcnJlcwkJcmVhZGRpcnJlczsKLQlzdHJ1Y3QgbmZzZDNfZnNzdGF0cmVzCQlmc3N0YXRyZXM7Ci0Jc3RydWN0IG5mc2QzX2ZzaW5mb3JlcwkJZnNpbmZvcmVzOwotCXN0cnVjdCBuZnNkM19wYXRoY29uZnJlcwlwYXRoY29uZnJlczsKLQlzdHJ1Y3QgbmZzZDNfY29tbWl0cmVzCQljb21taXRyZXM7Ci0Jc3RydWN0IG5mc2QzX2dldGFjbHJlcwkJZ2V0YWNscmVzOwotfTsKLQotI2RlZmluZSBORlMzX1NWQ19YRFJTSVpFCQlzaXplb2YodW5pb24gbmZzZDNfeGRyc3RvcmUpCi0KLWludCBuZnMzc3ZjX2RlY29kZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfZmhhbmRsZSAqKTsKLWludCBuZnMzc3ZjX2RlY29kZV9zYXR0cmFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19zYXR0cmFyZ3MgKik7Ci1pbnQgbmZzM3N2Y19kZWNvZGVfZGlyb3BhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfZGlyb3BhcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX2FjY2Vzc2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19hY2Nlc3NhcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX3JlYWRhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfcmVhZGFyZ3MgKik7Ci1pbnQgbmZzM3N2Y19kZWNvZGVfd3JpdGVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfd3JpdGVhcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX2NyZWF0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19jcmVhdGVhcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX21rZGlyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2NyZWF0ZWFyZ3MgKik7Ci1pbnQgbmZzM3N2Y19kZWNvZGVfbWtub2RhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfbWtub2RhcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX3JlbmFtZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19yZW5hbWVhcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX3JlYWRsaW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX3JlYWRsaW5rYXJncyAqKTsKLWludCBuZnMzc3ZjX2RlY29kZV9saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2xpbmthcmdzICopOwotaW50IG5mczNzdmNfZGVjb2RlX3N5bWxpbmthcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfc3ltbGlua2FyZ3MgKik7Ci1pbnQgbmZzM3N2Y19kZWNvZGVfcmVhZGRpcmFyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19yZWFkZGlyYXJncyAqKTsKLWludCBuZnMzc3ZjX2RlY29kZV9yZWFkZGlycGx1c2FyZ3Moc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19yZWFkZGlyYXJncyAqKTsKLWludCBuZnMzc3ZjX2RlY29kZV9jb21taXRhcmdzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfY29tbWl0YXJncyAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV92b2lkcmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV9hdHRyc3RhdChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2F0dHJzdGF0ICopOwotaW50IG5mczNzdmNfZW5jb2RlX3djY3N0YXQoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19hdHRyc3RhdCAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV9kaXJvcHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2Rpcm9wcmVzICopOwotaW50IG5mczNzdmNfZW5jb2RlX2FjY2Vzc3JlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2FjY2Vzc3JlcyAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV9yZWFkbGlua3JlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX3JlYWRsaW5rcmVzICopOwotaW50IG5mczNzdmNfZW5jb2RlX3JlYWRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZDNfcmVhZHJlcyAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV93cml0ZXJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkM193cml0ZXJlcyAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV9jcmVhdGVyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19kaXJvcHJlcyAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV9yZW5hbWVyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQkJCXN0cnVjdCBuZnNkM19yZW5hbWVyZXMgKik7Ci1pbnQgbmZzM3N2Y19lbmNvZGVfbGlua3JlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2xpbmtyZXMgKik7Ci1pbnQgbmZzM3N2Y19lbmNvZGVfcmVhZGRpcnJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX3JlYWRkaXJyZXMgKik7Ci1pbnQgbmZzM3N2Y19lbmNvZGVfZnNzdGF0cmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfZnNzdGF0cmVzICopOwotaW50IG5mczNzdmNfZW5jb2RlX2ZzaW5mb3JlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2ZzaW5mb3JlcyAqKTsKLWludCBuZnMzc3ZjX2VuY29kZV9wYXRoY29uZnJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX3BhdGhjb25mcmVzICopOwotaW50IG5mczNzdmNfZW5jb2RlX2NvbW1pdHJlcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCQkJc3RydWN0IG5mc2QzX2NvbW1pdHJlcyAqKTsKLQotaW50IG5mczNzdmNfcmVsZWFzZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfYXR0cnN0YXQgKik7Ci1pbnQgbmZzM3N2Y19yZWxlYXNlX2ZoYW5kbGUyKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKLQkJCQlzdHJ1Y3QgbmZzZDNfZmhhbmRsZV9wYWlyICopOwotaW50IG5mczNzdmNfZW5jb2RlX2VudHJ5KHZvaWQgKiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLAotCQkJCXVuc2lnbmVkIGludCk7Ci1pbnQgbmZzM3N2Y19lbmNvZGVfZW50cnlfcGx1cyh2b2lkICosIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwgdTY0IGlubywKLQkJCQl1bnNpZ25lZCBpbnQpOwotLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgTkZTdjMgQUNMIGNvZGUgKi8KLV9fYmUzMiAqbmZzM3N2Y19lbmNvZGVfcG9zdF9vcF9hdHRyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwKLQkJCQlzdHJ1Y3Qgc3ZjX2ZoICpmaHApOwotX19iZTMyICpuZnMzc3ZjX2RlY29kZV9maChfX2JlMzIgKnAsIHN0cnVjdCBzdmNfZmggKmZocCk7Ci0KLQotI2VuZGlmIC8qIF9MSU5VWF9ORlNEX1hEUjNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaCBiL2luY2x1ZGUvbGludXgvbmZzZC94ZHI0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMTY0YzIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2MyArMCwwIEBACi0vKgotICogIGluY2x1ZGUvbGludXgvbmZzZC94ZHI0LmgKLSAqCi0gKiAgU2VydmVyLXNpZGUgdHlwZXMgZm9yIE5GU3Y0LgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCi0gKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgS2VuZHJpY2sgU21pdGggPGttc21pdGhAdW1pY2guZWR1PgotICogIEFuZHkgQWRhbXNvbiAgIDxhbmRyb3NAdW1pY2guZWR1PgotICoKLSAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0OgotICoKLSAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICogIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLSAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWZuZGVmIF9MSU5VWF9ORlNEX1hEUjRfSAotI2RlZmluZSBfTElOVVhfTkZTRF9YRFI0X0gKLQotI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KLQotI2RlZmluZSBORlNENF9NQVhfVEFHTEVOCTEyOAotI2RlZmluZSBYRFJfTEVOKG4pICAgICAgICAgICAgICAgICAgICAgKCgobikgKyAzKSAmIH4zKQotCi1zdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgewotCXN0cnVjdCBzdmNfZmgJCWN1cnJlbnRfZmg7Ci0Jc3RydWN0IHN2Y19maAkJc2F2ZV9maDsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyCSpyZXBsYXlfb3duZXI7Ci0JLyogRm9yIHNlc3Npb25zIERSQyAqLwotCXN0cnVjdCBuZnNkNF9zZXNzaW9uCSpzZXNzaW9uOwotCXN0cnVjdCBuZnNkNF9zbG90CSpzbG90OwotCV9fYmUzMgkJCSpkYXRhcDsKLQlzaXplX3QJCQlpb3ZsZW47Ci0JdTMyCQkJbWlub3J2ZXJzaW9uOwotCXUzMgkJCXN0YXR1czsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBuZnNkNF9oYXNfc2Vzc2lvbihzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzKQotewotCXJldHVybiBjcy0+c2xvdCAhPSBOVUxMOwotfQotCi1zdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gewotCXUzMgkJYXRvbWljOwotCWJvb2wJCWNoYW5nZV9zdXBwb3J0ZWQ7Ci0JdTMyCQliZWZvcmVfY3RpbWVfc2VjOwotCXUzMgkJYmVmb3JlX2N0aW1lX25zZWM7Ci0JdTY0CQliZWZvcmVfY2hhbmdlOwotCXUzMgkJYWZ0ZXJfY3RpbWVfc2VjOwotCXUzMgkJYWZ0ZXJfY3RpbWVfbnNlYzsKLQl1NjQJCWFmdGVyX2NoYW5nZTsKLX07Ci0KLXN0cnVjdCBuZnNkNF9hY2Nlc3MgewotCXUzMgkJYWNfcmVxX2FjY2VzczsgICAgICAvKiByZXF1ZXN0ICovCi0JdTMyCQlhY19zdXBwb3J0ZWQ7ICAgICAgIC8qIHJlc3BvbnNlICovCi0JdTMyCQlhY19yZXNwX2FjY2VzczsgICAgIC8qIHJlc3BvbnNlICovCi19OwotCi1zdHJ1Y3QgbmZzZDRfY2xvc2UgewotCXUzMgkJY2xfc2VxaWQ7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0Jc3RhdGVpZF90CWNsX3N0YXRlaWQ7ICAgICAgICAgLyogcmVxdWVzdCtyZXNwb25zZSAqLwotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKiBjbF9zdGF0ZW93bmVyOwkvKiByZXNwb25zZSAqLwotfTsKLQotc3RydWN0IG5mc2Q0X2NvbW1pdCB7Ci0JdTY0CQljb19vZmZzZXQ7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCWNvX2NvdW50OyAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCW5mczRfdmVyaWZpZXIJY29fdmVyZjsgICAgICAgICAgICAvKiByZXNwb25zZSAqLwotfTsKLQotc3RydWN0IG5mc2Q0X2NyZWF0ZSB7Ci0JdTMyCQljcl9uYW1lbGVuOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQljaGFyICoJCWNyX25hbWU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCXUzMgkJY3JfdHlwZTsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0JdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCQlzdHJ1Y3QgewotCQkJdTMyIG5hbWVsZW47Ci0JCQljaGFyICpuYW1lOwotCQl9IGxpbms7ICAgLyogTkY0TE5LICovCi0JCXN0cnVjdCB7Ci0JCQl1MzIgc3BlY2RhdGExOwotCQkJdTMyIHNwZWNkYXRhMjsKLQkJfSBkZXY7ICAgIC8qIE5GNEJMSywgTkY0Q0hSICovCi0JfSB1OwotCXUzMgkJY3JfYm12YWxbM107ICAgICAgICAvKiByZXF1ZXN0ICovCi0Jc3RydWN0IGlhdHRyCWNyX2lhdHRyOyAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgY3JfY2luZm87IC8qIHJlc3BvbnNlICovCi0Jc3RydWN0IG5mczRfYWNsICpjcl9hY2w7Ci19OwotI2RlZmluZSBjcl9saW5rbGVuCXUubGluay5uYW1lbGVuCi0jZGVmaW5lIGNyX2xpbmtuYW1lCXUubGluay5uYW1lCi0jZGVmaW5lIGNyX3NwZWNkYXRhMQl1LmRldi5zcGVjZGF0YTEKLSNkZWZpbmUgY3Jfc3BlY2RhdGEyCXUuZGV2LnNwZWNkYXRhMgotCi1zdHJ1Y3QgbmZzZDRfZGVsZWdyZXR1cm4gewotCXN0YXRlaWRfdAlkcl9zdGF0ZWlkOwotfTsKLQotc3RydWN0IG5mc2Q0X2dldGF0dHIgewotCXUzMgkJZ2FfYm12YWxbM107ICAgICAgICAvKiByZXF1ZXN0ICovCi0Jc3RydWN0IHN2Y19maAkqZ2FfZmhwOyAgICAgICAgICAgIC8qIHJlc3BvbnNlICovCi19OwotCi1zdHJ1Y3QgbmZzZDRfbGluayB7Ci0JdTMyCQlsaV9uYW1lbGVuOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQljaGFyICoJCWxpX25hbWU7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgbGlfY2luZm87IC8qIHJlc3BvbnNlICovCi19OwotCi1zdHJ1Y3QgbmZzZDRfbG9ja19kZW5pZWQgewotCWNsaWVudGlkX3QJbGRfY2xpZW50aWQ7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAgICpsZF9zb3A7Ci0JdTY0ICAgICAgICAgICAgIGxkX3N0YXJ0OwotCXU2NCAgICAgICAgICAgICBsZF9sZW5ndGg7Ci0JdTMyICAgICAgICAgICAgIGxkX3R5cGU7Ci19OwotCi1zdHJ1Y3QgbmZzZDRfbG9jayB7Ci0JLyogcmVxdWVzdCAqLwotCXUzMiAgICAgICAgICAgICBsa190eXBlOwotCXUzMiAgICAgICAgICAgICBsa19yZWNsYWltOyAgICAgICAgIC8qIGJvb2xlYW4gKi8KLQl1NjQgICAgICAgICAgICAgbGtfb2Zmc2V0OwotCXU2NCAgICAgICAgICAgICBsa19sZW5ndGg7Ci0JdTMyICAgICAgICAgICAgIGxrX2lzX25ldzsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1MzIgICAgICAgICAgICAgb3Blbl9zZXFpZDsKLQkJCXN0YXRlaWRfdCAgICAgICBvcGVuX3N0YXRlaWQ7Ci0JCQl1MzIgICAgICAgICAgICAgbG9ja19zZXFpZDsKLQkJCWNsaWVudGlkX3QgICAgICBjbGllbnRpZDsKLQkJCXN0cnVjdCB4ZHJfbmV0b2JqIG93bmVyOwotCQl9IG5ldzsKLQkJc3RydWN0IHsKLQkJCXN0YXRlaWRfdCAgICAgICBsb2NrX3N0YXRlaWQ7Ci0JCQl1MzIgICAgICAgICAgICAgbG9ja19zZXFpZDsKLQkJfSBvbGQ7Ci0JfSB2OwotCi0JLyogcmVzcG9uc2UgKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlzdGF0ZWlkX3QgICAgICAgICAgICAgICBzdGF0ZWlkOwotCQl9IG9rOwotCQlzdHJ1Y3QgbmZzZDRfbG9ja19kZW5pZWQgICAgICAgIGRlbmllZDsKLQl9IHU7Ci0JLyogVGhlIGxrX3JlcGxheV9vd25lciBpcyB0aGUgb3BlbiBvd25lciBpbiB0aGUgb3Blbl90b19sb2NrX293bmVyCi0JICogY2FzZSBhbmQgdGhlIGxvY2sgb3duZXIgb3RoZXJ3aXNlOiAqLwotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxrX3JlcGxheV9vd25lcjsKLX07Ci0jZGVmaW5lIGxrX25ld19vcGVuX3NlcWlkICAgICAgIHYubmV3Lm9wZW5fc2VxaWQKLSNkZWZpbmUgbGtfbmV3X29wZW5fc3RhdGVpZCAgICAgdi5uZXcub3Blbl9zdGF0ZWlkCi0jZGVmaW5lIGxrX25ld19sb2NrX3NlcWlkICAgICAgIHYubmV3LmxvY2tfc2VxaWQKLSNkZWZpbmUgbGtfbmV3X2NsaWVudGlkICAgICAgICAgdi5uZXcuY2xpZW50aWQKLSNkZWZpbmUgbGtfbmV3X293bmVyICAgICAgICAgICAgdi5uZXcub3duZXIKLSNkZWZpbmUgbGtfb2xkX2xvY2tfc3RhdGVpZCAgICAgdi5vbGQubG9ja19zdGF0ZWlkCi0jZGVmaW5lIGxrX29sZF9sb2NrX3NlcWlkICAgICAgIHYub2xkLmxvY2tfc2VxaWQKLQotI2RlZmluZSBsa19yZmxhZ3MgICAgICAgdS5vay5yZmxhZ3MKLSNkZWZpbmUgbGtfcmVzcF9zdGF0ZWlkIHUub2suc3RhdGVpZAotI2RlZmluZSBsa19kZW5pZWQgICAgICAgdS5kZW5pZWQKLQotCi1zdHJ1Y3QgbmZzZDRfbG9ja3QgewotCXUzMgkJCQlsdF90eXBlOwotCWNsaWVudGlkX3QJCQlsdF9jbGllbnRpZDsKLQlzdHJ1Y3QgeGRyX25ldG9iagkJbHRfb3duZXI7Ci0JdTY0CQkJCWx0X29mZnNldDsKLQl1NjQJCQkJbHRfbGVuZ3RoOwotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKiAJbHRfc3RhdGVvd25lcjsKLQlzdHJ1Y3QgbmZzZDRfbG9ja19kZW5pZWQgIAlsdF9kZW5pZWQ7Ci19OwotCi0gCi1zdHJ1Y3QgbmZzZDRfbG9ja3UgewotCXUzMiAgICAgICAgICAgICBsdV90eXBlOwotCXUzMiAgICAgICAgICAgICBsdV9zZXFpZDsKLQlzdGF0ZWlkX3QgICAgICAgbHVfc3RhdGVpZDsKLQl1NjQgICAgICAgICAgICAgbHVfb2Zmc2V0OwotCXU2NCAgICAgICAgICAgICBsdV9sZW5ndGg7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAgKmx1X3N0YXRlb3duZXI7Ci19OwotCi0KLXN0cnVjdCBuZnNkNF9sb29rdXAgewotCXUzMgkJbG9fbGVuOyAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0JY2hhciAqCQlsb19uYW1lOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLX07Ci0KLXN0cnVjdCBuZnNkNF9wdXRmaCB7Ci0JdTMyCQlwZl9maGxlbjsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQljaGFyCQkqcGZfZmh2YWw7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLX07Ci0KLXN0cnVjdCBuZnNkNF9vcGVuIHsKLQl1MzIJCW9wX2NsYWltX3R5cGU7ICAgICAgLyogcmVxdWVzdCAqLwotCXN0cnVjdCB4ZHJfbmV0b2JqIG9wX2ZuYW1lOwkgICAgLyogcmVxdWVzdCAtIGV2ZXJ5dGhpbmcgYnV0IENMQUlNX1BSRVYgKi8KLQl1MzIJCW9wX2RlbGVnYXRlX3R5cGU7ICAgLyogcmVxdWVzdCAtIENMQUlNX1BSRVYgb25seSAqLwotCXN0YXRlaWRfdCAgICAgICBvcF9kZWxlZ2F0ZV9zdGF0ZWlkOyAvKiByZXF1ZXN0IC0gcmVzcG9uc2UgKi8KLQl1MzIJCW9wX2NyZWF0ZTsgICAgIAkgICAgLyogcmVxdWVzdCAqLwotCXUzMgkJb3BfY3JlYXRlbW9kZTsgICAgICAvKiByZXF1ZXN0ICovCi0JdTMyCQlvcF9ibXZhbFszXTsgICAgICAgIC8qIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgaWF0dHIJaWF0dHI7ICAgICAgICAgICAgICAvKiBVTkNIRUNLRUQ0LCBHVUFSREVENCwgRVhDTFVTSVZFNF8xICovCi0JbmZzNF92ZXJpZmllcgl2ZXJmOyAgICAgICAgICAgICAgIC8qIEVYQ0xVU0lWRTQgKi8KLQljbGllbnRpZF90CW9wX2NsaWVudGlkOyAgICAgICAgLyogcmVxdWVzdCAqLwotCXN0cnVjdCB4ZHJfbmV0b2JqIG9wX293bmVyOyAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCXUzMgkJb3Bfc2VxaWQ7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0JdTMyCQlvcF9zaGFyZV9hY2Nlc3M7ICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCW9wX3NoYXJlX2Rlbnk7ICAgICAgLyogcmVxdWVzdCAqLwotCXN0YXRlaWRfdAlvcF9zdGF0ZWlkOyAgICAgICAgIC8qIHJlc3BvbnNlICovCi0JdTMyCQlvcF9yZWNhbGw7ICAgICAgICAgIC8qIHJlY2FsbCAqLwotCXN0cnVjdCBuZnNkNF9jaGFuZ2VfaW5mbyAgb3BfY2luZm87IC8qIHJlc3BvbnNlICovCi0JdTMyCQlvcF9yZmxhZ3M7ICAgICAgICAgIC8qIHJlc3BvbnNlICovCi0JaW50CQlvcF90cnVuY2F0ZTsgICAgICAgIC8qIHVzZWQgZHVyaW5nIHByb2Nlc3NpbmcgKi8KLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpvcF9zdGF0ZW93bmVyOyAvKiB1c2VkIGR1cmluZyBwcm9jZXNzaW5nICovCi0Jc3RydWN0IG5mczRfYWNsICpvcF9hY2w7Ci19OwotI2RlZmluZSBvcF9pYXR0cglpYXR0cgotI2RlZmluZSBvcF92ZXJmCQl2ZXJmCi0KLXN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gewotCXN0YXRlaWRfdAlvY19yZXFfc3RhdGVpZAkJLyogcmVxdWVzdCAqLzsKLQl1MzIJCW9jX3NlcWlkICAgIAkJLyogcmVxdWVzdCAqLzsKLQlzdGF0ZWlkX3QJb2NfcmVzcF9zdGF0ZWlkCQkvKiByZXNwb25zZSAqLzsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICogb2Nfc3RhdGVvd25lcjsJLyogcmVzcG9uc2UgKi8KLX07Ci0KLXN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZSB7Ci0Jc3RhdGVpZF90ICAgICAgIG9kX3N0YXRlaWQ7Ci0JdTMyICAgICAgICAgICAgIG9kX3NlcWlkOwotCXUzMiAgICAgICAgICAgICBvZF9zaGFyZV9hY2Nlc3M7Ci0JdTMyICAgICAgICAgICAgIG9kX3NoYXJlX2Rlbnk7Ci0Jc3RydWN0IG5mczRfc3RhdGVvd25lciAqb2Rfc3RhdGVvd25lcjsKLX07Ci0KLQotc3RydWN0IG5mc2Q0X3JlYWQgewotCXN0YXRlaWRfdAlyZF9zdGF0ZWlkOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQl1NjQJCXJkX29mZnNldDsgICAgICAgICAgLyogcmVxdWVzdCAqLwotCXUzMgkJcmRfbGVuZ3RoOyAgICAgICAgICAvKiByZXF1ZXN0ICovCi0JaW50CQlyZF92bGVuOwotCXN0cnVjdCBmaWxlICAgICAqcmRfZmlscDsKLQkKLQlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJkX3Jxc3RwOyAgICAgICAgICAvKiByZXNwb25zZSAqLwotCXN0cnVjdCBzdmNfZmggKiByZF9maHA7ICAgICAgICAgICAgIC8qIHJlc3BvbnNlICovCi19OwotCi1zdHJ1Y3QgbmZzZDRfcmVhZGRpciB7Ci0JdTY0CQlyZF9jb29raWU7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQluZnM0X3ZlcmlmaWVyCXJkX3ZlcmY7ICAgICAgICAgICAgLyogcmVxdWVzdCAqLwotCXUzMgkJcmRfZGlyY291bnQ7ICAgICAgICAvKiByZXF1ZXN0ICovCi0JdTMyCQlyZF9tYXhjb3VudDsgICAgICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXJkX2JtdmFsWzNdOyAgICAgICAgLyogcmVxdWVzdCAqLwotCXN0cnVjdCBzdmNfcnFzdCAqcmRfcnFzdHA7ICAgICAgICAgIC8qIHJlc3BvbnNlICovCi0Jc3RydWN0IHN2Y19maCAqIHJkX2ZocDsgICAgICAgICAgICAgLyogcmVzcG9uc2UgKi8KLQotCXN0cnVjdCByZWFkZGlyX2NkCWNvbW1vbjsKLQlfX2JlMzIgKgkJYnVmZmVyOwotCWludAkJCWJ1ZmxlbjsKLQlfX2JlMzIgKgkJb2Zmc2V0OwotfTsKLQotc3RydWN0IG5mc2Q0X3JlbGVhc2VfbG9ja293bmVyIHsKLQljbGllbnRpZF90ICAgICAgICBybF9jbGllbnRpZDsKLQlzdHJ1Y3QgeGRyX25ldG9iaiBybF9vd25lcjsKLX07Ci1zdHJ1Y3QgbmZzZDRfcmVhZGxpbmsgewotCXN0cnVjdCBzdmNfcnFzdCAqcmxfcnFzdHA7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQlzdHJ1Y3Qgc3ZjX2ZoICoJcmxfZmhwOyAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCi19OwotCi1zdHJ1Y3QgbmZzZDRfcmVtb3ZlIHsKLQl1MzIJCXJtX25hbWVsZW47ICAgICAgICAgLyogcmVxdWVzdCAqLwotCWNoYXIgKgkJcm1fbmFtZTsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0Jc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvICBybV9jaW5mbzsgLyogcmVzcG9uc2UgKi8KLX07Ci0KLXN0cnVjdCBuZnNkNF9yZW5hbWUgewotCXUzMgkJcm5fc25hbWVsZW47ICAgICAgICAvKiByZXF1ZXN0ICovCi0JY2hhciAqCQlybl9zbmFtZTsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXJuX3RuYW1lbGVuOyAgICAgICAgLyogcmVxdWVzdCAqLwotCWNoYXIgKgkJcm5fdG5hbWU7ICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0Jc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvICBybl9zaW5mbzsgLyogcmVzcG9uc2UgKi8KLQlzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gIHJuX3RpbmZvOyAvKiByZXNwb25zZSAqLwotfTsKLQotc3RydWN0IG5mc2Q0X3NlY2luZm8gewotCXUzMiBzaV9uYW1lbGVuOwkJCQkJLyogcmVxdWVzdCAqLwotCWNoYXIgKnNpX25hbWU7CQkJCQkvKiByZXF1ZXN0ICovCi0Jc3RydWN0IHN2Y19leHBvcnQgKnNpX2V4cDsJCQkvKiByZXNwb25zZSAqLwotfTsKLQotc3RydWN0IG5mc2Q0X3NldGF0dHIgewotCXN0YXRlaWRfdAlzYV9zdGF0ZWlkOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXNhX2JtdmFsWzNdOyAgICAgICAgLyogcmVxdWVzdCAqLwotCXN0cnVjdCBpYXR0cglzYV9pYXR0cjsgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgbmZzNF9hY2wgKnNhX2FjbDsKLX07Ci0KLXN0cnVjdCBuZnNkNF9zZXRjbGllbnRpZCB7Ci0JbmZzNF92ZXJpZmllcglzZV92ZXJmOyAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXNlX25hbWVsZW47ICAgICAgICAgLyogcmVxdWVzdCAqLwotCWNoYXIgKgkJc2VfbmFtZTsgICAgICAgICAgICAvKiByZXF1ZXN0ICovCi0JdTMyCQlzZV9jYWxsYmFja19wcm9nOyAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXNlX2NhbGxiYWNrX25ldGlkX2xlbjsgIC8qIHJlcXVlc3QgKi8KLQljaGFyICoJCXNlX2NhbGxiYWNrX25ldGlkX3ZhbDsgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXNlX2NhbGxiYWNrX2FkZHJfbGVuOyAgIC8qIHJlcXVlc3QgKi8KLQljaGFyICoJCXNlX2NhbGxiYWNrX2FkZHJfdmFsOyAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXNlX2NhbGxiYWNrX2lkZW50OyAgLyogcmVxdWVzdCAqLwotCWNsaWVudGlkX3QJc2VfY2xpZW50aWQ7ICAgICAgICAvKiByZXNwb25zZSAqLwotCW5mczRfdmVyaWZpZXIJc2VfY29uZmlybTsgICAgICAgICAvKiByZXNwb25zZSAqLwotfTsKLQotc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0gewotCWNsaWVudGlkX3QJc2NfY2xpZW50aWQ7Ci0JbmZzNF92ZXJpZmllcglzY19jb25maXJtOwotfTsKLQotLyogYWxzbyB1c2VkIGZvciBOVkVSSUZZICovCi1zdHJ1Y3QgbmZzZDRfdmVyaWZ5IHsKLQl1MzIJCXZlX2JtdmFsWzNdOyAgICAgICAgLyogcmVxdWVzdCAqLwotCXUzMgkJdmVfYXR0cmxlbjsgICAgICAgICAvKiByZXF1ZXN0ICovCi0JY2hhciAqCQl2ZV9hdHRydmFsOyAgICAgICAgIC8qIHJlcXVlc3QgKi8KLX07Ci0KLXN0cnVjdCBuZnNkNF93cml0ZSB7Ci0Jc3RhdGVpZF90CXdyX3N0YXRlaWQ7ICAgICAgICAgLyogcmVxdWVzdCAqLwotCXU2NAkJd3Jfb2Zmc2V0OyAgICAgICAgICAvKiByZXF1ZXN0ICovCi0JdTMyCQl3cl9zdGFibGVfaG93OyAgICAgIC8qIHJlcXVlc3QgKi8KLQl1MzIJCXdyX2J1ZmxlbjsgICAgICAgICAgLyogcmVxdWVzdCAqLwotCWludAkJd3JfdmxlbjsKLQotCXUzMgkJd3JfYnl0ZXNfd3JpdHRlbjsgICAvKiByZXNwb25zZSAqLwotCXUzMgkJd3JfaG93X3dyaXR0ZW47ICAgICAvKiByZXNwb25zZSAqLwotCW5mczRfdmVyaWZpZXIJd3JfdmVyaWZpZXI7ICAgICAgICAvKiByZXNwb25zZSAqLwotfTsKLQotc3RydWN0IG5mc2Q0X2V4Y2hhbmdlX2lkIHsKLQluZnM0X3ZlcmlmaWVyCXZlcmlmaWVyOwotCXN0cnVjdCB4ZHJfbmV0b2JqIGNsbmFtZTsKLQl1MzIJCWZsYWdzOwotCWNsaWVudGlkX3QJY2xpZW50aWQ7Ci0JdTMyCQlzZXFpZDsKLQlpbnQJCXNwYV9ob3c7Ci19OwotCi1zdHJ1Y3QgbmZzZDRfc2VxdWVuY2UgewotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAlzZXNzaW9uaWQ7CQkvKiByZXF1ZXN0L3Jlc3BvbnNlICovCi0JdTMyCQkJc2VxaWQ7CQkJLyogcmVxdWVzdC9yZXNwb25zZSAqLwotCXUzMgkJCXNsb3RpZDsJCQkvKiByZXF1ZXN0L3Jlc3BvbnNlICovCi0JdTMyCQkJbWF4c2xvdHM7CQkvKiByZXF1ZXN0L3Jlc3BvbnNlICovCi0JdTMyCQkJY2FjaGV0aGlzOwkJLyogcmVxdWVzdCAqLwotI2lmIDAKLQl1MzIJCQl0YXJnZXRfbWF4c2xvdHM7CS8qIHJlc3BvbnNlICovCi0JdTMyCQkJc3RhdHVzX2ZsYWdzOwkJLyogcmVzcG9uc2UgKi8KLSNlbmRpZiAvKiBub3QgeWV0ICovCi19OwotCi1zdHJ1Y3QgbmZzZDRfZGVzdHJveV9zZXNzaW9uIHsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJc2Vzc2lvbmlkOwotfTsKLQotc3RydWN0IG5mc2Q0X29wIHsKLQlpbnQJCQkJCW9wbnVtOwotCV9fYmUzMgkJCQkJc3RhdHVzOwotCXVuaW9uIHsKLQkJc3RydWN0IG5mc2Q0X2FjY2VzcwkJYWNjZXNzOwotCQlzdHJ1Y3QgbmZzZDRfY2xvc2UJCWNsb3NlOwotCQlzdHJ1Y3QgbmZzZDRfY29tbWl0CQljb21taXQ7Ci0JCXN0cnVjdCBuZnNkNF9jcmVhdGUJCWNyZWF0ZTsKLQkJc3RydWN0IG5mc2Q0X2RlbGVncmV0dXJuCWRlbGVncmV0dXJuOwotCQlzdHJ1Y3QgbmZzZDRfZ2V0YXR0cgkJZ2V0YXR0cjsKLQkJc3RydWN0IHN2Y19maCAqCQkJZ2V0Zmg7Ci0JCXN0cnVjdCBuZnNkNF9saW5rCQlsaW5rOwotCQlzdHJ1Y3QgbmZzZDRfbG9jawkJbG9jazsKLQkJc3RydWN0IG5mc2Q0X2xvY2t0CQlsb2NrdDsKLQkJc3RydWN0IG5mc2Q0X2xvY2t1CQlsb2NrdTsKLQkJc3RydWN0IG5mc2Q0X2xvb2t1cAkJbG9va3VwOwotCQlzdHJ1Y3QgbmZzZDRfdmVyaWZ5CQludmVyaWZ5OwotCQlzdHJ1Y3QgbmZzZDRfb3BlbgkJb3BlbjsKLQkJc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybQlvcGVuX2NvbmZpcm07Ci0JCXN0cnVjdCBuZnNkNF9vcGVuX2Rvd25ncmFkZQlvcGVuX2Rvd25ncmFkZTsKLQkJc3RydWN0IG5mc2Q0X3B1dGZoCQlwdXRmaDsKLQkJc3RydWN0IG5mc2Q0X3JlYWQJCXJlYWQ7Ci0JCXN0cnVjdCBuZnNkNF9yZWFkZGlyCQlyZWFkZGlyOwotCQlzdHJ1Y3QgbmZzZDRfcmVhZGxpbmsJCXJlYWRsaW5rOwotCQlzdHJ1Y3QgbmZzZDRfcmVtb3ZlCQlyZW1vdmU7Ci0JCXN0cnVjdCBuZnNkNF9yZW5hbWUJCXJlbmFtZTsKLQkJY2xpZW50aWRfdAkJCXJlbmV3OwotCQlzdHJ1Y3QgbmZzZDRfc2VjaW5mbwkJc2VjaW5mbzsKLQkJc3RydWN0IG5mc2Q0X3NldGF0dHIJCXNldGF0dHI7Ci0JCXN0cnVjdCBuZnNkNF9zZXRjbGllbnRpZAlzZXRjbGllbnRpZDsKLQkJc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0gc2V0Y2xpZW50aWRfY29uZmlybTsKLQkJc3RydWN0IG5mc2Q0X3ZlcmlmeQkJdmVyaWZ5OwotCQlzdHJ1Y3QgbmZzZDRfd3JpdGUJCXdyaXRlOwotCQlzdHJ1Y3QgbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIJcmVsZWFzZV9sb2Nrb3duZXI7Ci0KLQkJLyogTkZTdjQuMSAqLwotCQlzdHJ1Y3QgbmZzZDRfZXhjaGFuZ2VfaWQJZXhjaGFuZ2VfaWQ7Ci0JCXN0cnVjdCBuZnNkNF9jcmVhdGVfc2Vzc2lvbgljcmVhdGVfc2Vzc2lvbjsKLQkJc3RydWN0IG5mc2Q0X2Rlc3Ryb3lfc2Vzc2lvbglkZXN0cm95X3Nlc3Npb247Ci0JCXN0cnVjdCBuZnNkNF9zZXF1ZW5jZQkJc2VxdWVuY2U7Ci0JfSB1OwotCXN0cnVjdCBuZnM0X3JlcGxheSAqCQkJcmVwbGF5OwotfTsKLQotc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyB7Ci0JLyogc2NyYXRjaCB2YXJpYWJsZXMgZm9yIFhEUiBkZWNvZGUgKi8KLQlfX2JlMzIgKgkJCXA7Ci0JX19iZTMyICoJCQllbmQ7Ci0Jc3RydWN0IHBhZ2UgKioJCQlwYWdlbGlzdDsKLQlpbnQJCQkJcGFnZWxlbjsKLQlfX2JlMzIJCQkJdG1wWzhdOwotCV9fYmUzMiAqCQkJdG1wcDsKLQlzdHJ1Y3QgdG1wYnVmIHsKLQkJc3RydWN0IHRtcGJ1ZiAqbmV4dDsKLQkJdm9pZCAoKnJlbGVhc2UpKGNvbnN0IHZvaWQgKik7Ci0JCXZvaWQgKmJ1ZjsKLQl9CQkJCSp0b19mcmVlOwotCi0Jc3RydWN0IHN2Y19ycXN0CQkJKnJxc3RwOwotCi0JdTMyCQkJCXRhZ2xlbjsKLQljaGFyICoJCQkJdGFnOwotCXUzMgkJCQltaW5vcnZlcnNpb247Ci0JdTMyCQkJCW9wY250OwotCXN0cnVjdCBuZnNkNF9vcAkJCSpvcHM7Ci0Jc3RydWN0IG5mc2Q0X29wCQkJaW9wc1s4XTsKLX07Ci0KLXN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyB7Ci0JLyogc2NyYXRjaCB2YXJpYWJsZXMgZm9yIFhEUiBlbmNvZGUgKi8KLQlfX2JlMzIgKgkJCXA7Ci0JX19iZTMyICoJCQllbmQ7Ci0Jc3RydWN0IHhkcl9idWYgKgkJeGJ1ZjsKLQlzdHJ1Y3Qgc3ZjX3Jxc3QgKgkJcnFzdHA7Ci0KLQl1MzIJCQkJdGFnbGVuOwotCWNoYXIgKgkJCQl0YWc7Ci0JdTMyCQkJCW9wY250OwotCV9fYmUzMiAqCQkJdGFncDsgLyogdGFnLCBvcGNvdW50IGVuY29kZSBsb2NhdGlvbiAqLwotCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZQljc3RhdGU7Ci19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgbmZzZDRfaXNfc29sb19zZXF1ZW5jZShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3ApCi17Ci0Jc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncyA9IHJlc3AtPnJxc3RwLT5ycV9hcmdwOwotCXJldHVybiByZXNwLT5vcGNudCA9PSAxICYmIGFyZ3MtPm9wc1swXS5vcG51bSA9PSBPUF9TRVFVRU5DRTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIG5mc2Q0X25vdF9jYWNoZWQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwKQotewotCXJldHVybiAhcmVzcC0+Y3N0YXRlLnNsb3QtPnNsX2NhY2hldGhpcyB8fCBuZnNkNF9pc19zb2xvX3NlcXVlbmNlKHJlc3ApOwotfQotCi0jZGVmaW5lIE5GUzRfU1ZDX1hEUlNJWkUJCXNpemVvZihzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzKQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNldF9jaGFuZ2VfaW5mbyhzdHJ1Y3QgbmZzZDRfY2hhbmdlX2luZm8gKmNpbmZvLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHApCi17Ci0JQlVHX09OKCFmaHAtPmZoX3ByZV9zYXZlZCB8fCAhZmhwLT5maF9wb3N0X3NhdmVkKTsKLQljaW5mby0+YXRvbWljID0gMTsKLQljaW5mby0+Y2hhbmdlX3N1cHBvcnRlZCA9IElTX0lfVkVSU0lPTihmaHAtPmZoX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGNpbmZvLT5jaGFuZ2Vfc3VwcG9ydGVkKSB7Ci0JCWNpbmZvLT5iZWZvcmVfY2hhbmdlID0gZmhwLT5maF9wcmVfY2hhbmdlOwotCQljaW5mby0+YWZ0ZXJfY2hhbmdlID0gZmhwLT5maF9wb3N0X2NoYW5nZTsKLQl9IGVsc2UgewotCQljaW5mby0+YmVmb3JlX2N0aW1lX3NlYyA9IGZocC0+ZmhfcHJlX2N0aW1lLnR2X3NlYzsKLQkJY2luZm8tPmJlZm9yZV9jdGltZV9uc2VjID0gZmhwLT5maF9wcmVfY3RpbWUudHZfbnNlYzsKLQkJY2luZm8tPmFmdGVyX2N0aW1lX3NlYyA9IGZocC0+ZmhfcG9zdF9hdHRyLmN0aW1lLnR2X3NlYzsKLQkJY2luZm8tPmFmdGVyX2N0aW1lX25zZWMgPSBmaHAtPmZoX3Bvc3RfYXR0ci5jdGltZS50dl9uc2VjOwotCX0KLX0KLQotaW50IG5mczRzdmNfZW5jb2RlX3ZvaWRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCB2b2lkICopOwotaW50IG5mczRzdmNfZGVjb2RlX2NvbXBvdW5kYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosCi0JCXN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKik7Ci1pbnQgbmZzNHN2Y19lbmNvZGVfY29tcG91bmRyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLAotCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKik7Ci12b2lkIG5mc2Q0X2VuY29kZV9vcGVyYXRpb24oc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICosIHN0cnVjdCBuZnNkNF9vcCAqKTsKLXZvaWQgbmZzZDRfZW5jb2RlX3JlcGxheShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIHN0cnVjdCBuZnNkNF9vcCAqb3ApOwotX19iZTMyIG5mc2Q0X2VuY29kZV9mYXR0cihzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBzdmNfZXhwb3J0ICpleHAsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIF9fYmUzMiAqYnVmZmVyLCBpbnQgKmNvdW50cCwKLQkJICAgICAgIHUzMiAqYm12YWwsIHN0cnVjdCBzdmNfcnFzdCAqLCBpbnQgaWdub3JlX2Nyb3NzbW50KTsKLWV4dGVybiBfX2JlMzIgbmZzZDRfc2V0Y2xpZW50aWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCi0JCXN0cnVjdCBuZnNkNF9zZXRjbGllbnRpZCAqc2V0Y2xpZCk7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCi0JCXN0cnVjdCBuZnNkNF9zZXRjbGllbnRpZF9jb25maXJtICpzZXRjbGllbnRpZF9jb25maXJtKTsKLWV4dGVybiB2b2lkIG5mc2Q0X3N0b3JlX2NhY2hlX2VudHJ5KHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCk7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X3JlcGxheV9jYWNoZV9lbnRyeShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsCi0JCXN0cnVjdCBuZnNkNF9zZXF1ZW5jZSAqc2VxKTsKLWV4dGVybiBfX2JlMzIgbmZzZDRfZXhjaGFuZ2VfaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCi1zdHJ1Y3QgbmZzZDRfZXhjaGFuZ2VfaWQgKik7Ci0JCWV4dGVybiBfX2JlMzIgbmZzZDRfY3JlYXRlX3Nlc3Npb24oc3RydWN0IHN2Y19ycXN0ICosCi0JCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAotCQlzdHJ1Y3QgbmZzZDRfY3JlYXRlX3Nlc3Npb24gKik7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X3NlcXVlbmNlKHN0cnVjdCBzdmNfcnFzdCAqLAotCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKLQkJc3RydWN0IG5mc2Q0X3NlcXVlbmNlICopOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9kZXN0cm95X3Nlc3Npb24oc3RydWN0IHN2Y19ycXN0ICosCi0JCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAotCQlzdHJ1Y3QgbmZzZDRfZGVzdHJveV9zZXNzaW9uICopOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9wcm9jZXNzX29wZW4xKHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAotCQlzdHJ1Y3QgbmZzZDRfb3BlbiAqb3Blbik7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X3Byb2Nlc3Nfb3BlbjIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9vcGVuX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosIHN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gKm9jKTsKLWV4dGVybiBfX2JlMzIgbmZzZDRfY2xvc2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCi0JCXN0cnVjdCBuZnNkNF9jbG9zZSAqY2xvc2UpOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9vcGVuX2Rvd25ncmFkZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAotCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKLQkJc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCk7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X2xvY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCi0JCXN0cnVjdCBuZnNkNF9sb2NrICpsb2NrKTsKLWV4dGVybiBfX2JlMzIgbmZzZDRfbG9ja3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCi0JCXN0cnVjdCBuZnNkNF9sb2NrdCAqbG9ja3QpOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9sb2NrdShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAotCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKLQkJc3RydWN0IG5mc2Q0X2xvY2t1ICpsb2NrdSk7Ci1leHRlcm4gX19iZTMyCi1uZnNkNF9yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAotCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKLQkJc3RydWN0IG5mc2Q0X3JlbGVhc2VfbG9ja293bmVyICpybG9ja293bmVyKTsKLWV4dGVybiB2b2lkIG5mc2Q0X3JlbGVhc2VfY29tcG91bmRhcmdzKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKik7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X2RlbGVncmV0dXJuKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCi0JCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLCBzdHJ1Y3QgbmZzZDRfZGVsZWdyZXR1cm4gKmRyKTsKLWV4dGVybiBfX2JlMzIgbmZzZDRfcmVuZXcoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJCSAgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosIGNsaWVudGlkX3QgKmNsaWQpOwotI2VuZGlmCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiAgYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAppbmRleCBkYThlYTJlLi4yYmZiZTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaApAQCAtMjcwLDYgKzI3MCwzMSBAQAogICogQE5MODAyMTFfQ01EX1NFVF9XSVBIWV9ORVROUzogU2V0IGEgd2lwaHkncyBuZXRucy4gTm90ZSB0aGF0IGFsbCBkZXZpY2VzCiAgKglhc3NvY2lhdGVkIHdpdGggdGhpcyB3aXBoeSBtdXN0IGJlIGRvd24gYW5kIHdpbGwgZm9sbG93LgogICoKKyAqIEBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTDogUmVxdWVzdCB0byByZW1haW4gYXdha2Ugb24gdGhlIHNwZWNpZmllZAorICoJY2hhbm5lbCBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZS4gVGhpcyBjYW4gYmUgdXNlZCB0byBkbworICoJb2ZmLWNoYW5uZWwgb3BlcmF0aW9ucyBsaWtlIHRyYW5zbWl0IGEgUHVibGljIEFjdGlvbiBmcmFtZSBhbmQgd2FpdCBmb3IKKyAqCWEgcmVzcG9uc2Ugd2hpbGUgYmVpbmcgYXNzb2NpYXRlZCB0byBhbiBBUCBvbiBhbm90aGVyIGNoYW5uZWwuCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZIG9yICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2gKKyAqCXJhZGlvIGlzIHVzZWQuICVOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCisgKglmcmVxdWVuY3kgZm9yIHRoZSBvcGVyYXRpb24gYW5kICVOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIG1heSBiZQorICoJb3B0aW9uYWxseSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjaGFubmVsIHBhcmFtZXRlcnMuCisgKgklTkw4MDIxMV9BVFRSX0RVUkFUSU9OIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzCisgKgl0byByZW1haW4gb24gdGhlIGNoYW5uZWwuIFRoaXMgY29tbWFuZCBpcyBhbHNvIHVzZWQgYXMgYW4gZXZlbnQgdG8KKyAqCW5vdGlmeSB3aGVuIHRoZSByZXF1ZXN0ZWQgZHVyYXRpb24gc3RhcnRzIChpdCBtYXkgdGFrZSBhIHdoaWxlIGZvciB0aGUKKyAqCWRyaXZlciB0byBzY2hlZHVsZSB0aGlzIHRpbWUgZHVlIHRvIG90aGVyIGNvbmN1cnJlbnQgbmVlZHMgZm9yIHRoZQorICoJcmFkaW8pLgorICoJV2hlbiBjYWxsZWQsIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgYSBjb29raWUgKCVOTDgwMjExX0FUVFJfQ09PS0lFKQorICoJdGhhdCB3aWxsIGJlIGluY2x1ZGVkIHdpdGggYW55IGV2ZW50cyBwZXJ0YWluaW5nIHRvIHRoaXMgcmVxdWVzdDsKKyAqCXRoZSBjb29raWUgaXMgYWxzbyB1c2VkIHRvIGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqIEBOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUw6IFRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgYQorICoJcGVuZGluZyByZW1haW4tb24tY2hhbm5lbCBkdXJhdGlvbiBpZiB0aGUgZGVzaXJlZCBvcGVyYXRpb24gaGFzIGJlZW4KKyAqCWNvbXBsZXRlZCBwcmlvciB0byBleHBpcmF0aW9uIG9mIHRoZSBvcmlnaW5hbGx5IHJlcXVlc3RlZCBkdXJhdGlvbi4KKyAqCSVOTDgwMjExX0FUVFJfV0lQSFkgb3IgJU5MODAyMTFfQVRUUl9JRklOREVYIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAqCXJhZGlvLiBUaGUgJU5MODAyMTFfQVRUUl9DT09LSUUgYXR0cmlidXRlIG11c3QgYmUgZ2l2ZW4gYXMgd2VsbCB0bworICoJdW5pcXVlbHkgaWRlbnRpZnkgdGhlIHJlcXVlc3QuCisgKglUaGlzIGNvbW1hbmQgaXMgYWxzbyB1c2VkIGFzIGFuIGV2ZW50IHRvIG5vdGlmeSB3aGVuIGEgcmVxdWVzdGVkCisgKglyZW1haW4tb24tY2hhbm5lbCBkdXJhdGlvbiBoYXMgZXhwaXJlZC4KKyAqCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0zNTMsNiArMzc4LDkgQEAKIAlOTDgwMjExX0NNRF9ERUxfUE1LU0EsCiAJTkw4MDIxMV9DTURfRkxVU0hfUE1LU0EsCiAKKwlOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKKwlOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUwsCisKIAkvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi8KIAogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwpAQCAtNjA2LDYgKzYzNCwxMCBAQAogICogQE5MODAyMTFfQVRUUl9NQVhfTlVNX1BNS0lEUzogbWF4aW11bSBudW1iZXIgb2YgUE1LSURzIGEgZmlybXdhcmUgY2FuCiAgKgljYWNoZSwgYSB3aXBoeSBhdHRyaWJ1dGUuCiAgKgorICogQE5MODAyMTFfQVRUUl9EVVJBVElPTjogRHVyYXRpb24gb2YgYW4gb3BlcmF0aW9uIGluIG1pbGxpc2Vjb25kcywgdTMyLgorICoKKyAqIEBOTDgwMjExX0FUVFJfQ09PS0lFOiBHZW5lcmljIDY0LWJpdCBjb29raWUgdG8gaWRlbnRpZnkgb2JqZWN0cy4KKyAqCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTc0Myw2ICs3NzUsMTAgQEAKIAlOTDgwMjExX0FUVFJfUE1LSUQsCiAJTkw4MDIxMV9BVFRSX01BWF9OVU1fUE1LSURTLAogCisJTkw4MDIxMV9BVFRSX0RVUkFUSU9OLAorCisJTkw4MDIxMV9BVFRSX0NPT0tJRSwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm9kZS5oIGIvaW5jbHVkZS9saW51eC9ub2RlLmgKaW5kZXggNjgxYTY5Ny4uMDYyOTJkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ub2RlLmgKKysrIGIvaW5jbHVkZS9saW51eC9ub2RlLmgKQEAgLTIxLDEzICsyMSwxOSBAQAogCiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdHJ1Y3Qgbm9kZSB7CiAJc3RydWN0IHN5c19kZXZpY2UJc3lzZGV2OworCisjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFKSAmJiBkZWZpbmVkKENPTkZJR19IVUdFVExCRlMpCisJc3RydWN0IHdvcmtfc3RydWN0CW5vZGVfd29yazsKKyNlbmRpZgogfTsKIAogc3RydWN0IG1lbW9yeV9ibG9jazsKIGV4dGVybiBzdHJ1Y3Qgbm9kZSBub2RlX2RldmljZXNbXTsKK3R5cGVkZWYgIHZvaWQgKCpub2RlX3JlZ2lzdHJhdGlvbl9mdW5jX3QpKHN0cnVjdCBub2RlICopOwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKiwgaW50LCBzdHJ1Y3Qgbm9kZSAqKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CkBAIC0zOSw2ICs0NSwxMSBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9tZW1fc2VjdF91bmRlcl9ub2RlKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbV9ibGssCiAJCQkJCQlpbnQgbmlkKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9tZW1fc2VjdF91bmRlcl9ub2RlcyhzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW1fYmxrKTsKKworI2lmZGVmIENPTkZJR19IVUdFVExCRlMKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2h1Z2V0bGJmc193aXRoX25vZGUobm9kZV9yZWdpc3RyYXRpb25fZnVuY190IGRvcmVnaXN0ZXIsCisJCQkJCSBub2RlX3JlZ2lzdHJhdGlvbl9mdW5jX3QgdW5yZWdpc3Rlcik7CisjZW5kaWYKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9vbmVfbm9kZShpbnQgbmlkKQogewpAQCAtNjUsNiArNzYsMTEgQEAKIHsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2h1Z2V0bGJmc193aXRoX25vZGUobm9kZV9yZWdpc3RyYXRpb25fZnVuY190IHJlZywKKwkJCQkJCW5vZGVfcmVnaXN0cmF0aW9uX2Z1bmNfdCB1bnJlZykKK3sKK30KICNlbmRpZgogCiAjZGVmaW5lIHRvX25vZGUoc3lzX2RldmljZSkgY29udGFpbmVyX29mKHN5c19kZXZpY2UsIHN0cnVjdCBub2RlLCBzeXNkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmggYi9pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgKaW5kZXggYjM1OWM0YS4uNDU0OTk3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ub2RlbWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaApAQCAtMjQ1LDE0ICsyNDUsMTkgQEAKIAlyZXR1cm4gbWluX3QoaW50LE1BWF9OVU1OT0RFUyxmaW5kX25leHRfYml0KHNyY3AtPmJpdHMsIE1BWF9OVU1OT0RFUywgbisxKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X25vZGVtYXNrX29mX25vZGUobm9kZW1hc2tfdCAqbWFzaywgaW50IG5vZGUpCit7CisJbm9kZXNfY2xlYXIoKm1hc2spOworCW5vZGVfc2V0KG5vZGUsICptYXNrKTsKK30KKwogI2RlZmluZSBub2RlbWFza19vZl9ub2RlKG5vZGUpCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJdHlwZW9mKF91bnVzZWRfbm9kZW1hc2tfYXJnXykgbTsJCQkJXAogCWlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQkJXAotCQltLmJpdHNbMF0gPSAxVUw8PChub2RlKTsJCQkJXAorCQltLmJpdHNbMF0gPSAxVUwgPDwgKG5vZGUpOwkJCQlcCiAJfSBlbHNlIHsJCQkJCQkJXAotCQlub2Rlc19jbGVhcihtKTsJCQkJCQlcCi0JCW5vZGVfc2V0KChub2RlKSwgbSk7CQkJCQlcCisJCWluaXRfbm9kZW1hc2tfb2Zfbm9kZSgmbSwgKG5vZGUpKTsJCQlcCiAJfQkJCQkJCQkJXAogCW07CQkJCQkJCQlcCiB9KQpAQCAtNDgwLDE1ICs0ODUsMTcgQEAKICNkZWZpbmUgZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgZm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX09OTElORSkKIAogLyoKLSAqIEZvciBub2RlbWFzayBzY3JhY2ggYXJlYS4oU2VlIENQVU1BU0tfQUxMT0MoKSBpbiBjcHVtYXNrLmgpCisgKiBGb3Igbm9kZW1hc2sgc2NyYWNoIGFyZWEuCisgKiBOT0RFTUFTS19BTExPQyh0eXBlLCBuYW1lKSBhbGxvY2F0ZXMgYW4gb2JqZWN0IHdpdGggYSBzcGVjaWZpZWQgdHlwZSBhbmQKKyAqIG5hbWUuCiAgKi8KLQotI2lmIE5PREVTX1NISUZUID4gOCAvKiBub2RlbWFza190ID4gNjQgYnl0ZXMgKi8KLSNkZWZpbmUgTk9ERU1BU0tfQUxMT0MoeCwgbSkgc3RydWN0IHggKm0gPSBrbWFsbG9jKHNpemVvZigqbSksIEdGUF9LRVJORUwpCi0jZGVmaW5lIE5PREVNQVNLX0ZSRUUobSkga2ZyZWUobSkKKyNpZiBOT0RFU19TSElGVCA+IDggLyogbm9kZW1hc2tfdCA+IDI1NiBieXRlcyAqLworI2RlZmluZSBOT0RFTUFTS19BTExPQyh0eXBlLCBuYW1lLCBnZnBfZmxhZ3MpCVwKKwkJCXR5cGUgKm5hbWUgPSBrbWFsbG9jKHNpemVvZigqbmFtZSksIGdmcF9mbGFncykKKyNkZWZpbmUgTk9ERU1BU0tfRlJFRShtKQkJCWtmcmVlKG0pCiAjZWxzZQotI2RlZmluZSBOT0RFTUFTS19BTExPQyh4LCBtKSBzdHJ1Y3QgeCBfbSwgKm0gPSAmX20KLSNkZWZpbmUgTk9ERU1BU0tfRlJFRShtKQorI2RlZmluZSBOT0RFTUFTS19BTExPQyh0eXBlLCBuYW1lLCBnZnBfZmxhZ3MpCXR5cGUgX25hbWUsICpuYW1lID0gJl9uYW1lCisjZGVmaW5lIE5PREVNQVNLX0ZSRUUobSkJCQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBBIGV4YW1wbGUgc3RydXR1cmUgZm9yIHVzaW5nIE5PREVNQVNLX0FMTE9DLCB1c2VkIGluIG1lbXBvbGljeS4gKi8KQEAgLTQ5Nyw4ICs1MDQsMTAgQEAKIAlub2RlbWFza190CW1hc2syOwogfTsKIAotI2RlZmluZSBOT0RFTUFTS19TQ1JBVENIKHgpIE5PREVNQVNLX0FMTE9DKG5vZGVtYXNrX3NjcmF0Y2gsIHgpCi0jZGVmaW5lIE5PREVNQVNLX1NDUkFUQ0hfRlJFRSh4KSAgTk9ERU1BU0tfRlJFRSh4KQorI2RlZmluZSBOT0RFTUFTS19TQ1JBVENIKHgpCQkJCQkJXAorCQkJTk9ERU1BU0tfQUxMT0Moc3RydWN0IG5vZGVtYXNrX3NjcmF0Y2gsIHgsCVwKKwkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX05PUkVUUlkpCisjZGVmaW5lIE5PREVNQVNLX1NDUkFUQ0hfRlJFRSh4KQlOT0RFTUFTS19GUkVFKHgpCiAKIAogI2VuZGlmIC8qIF9fTElOVVhfTk9ERU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9udW1hLmggYi9pbmNsdWRlL2xpbnV4L251bWEuaAppbmRleCBhMzFhNzMwLi4zYWFhMzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L251bWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L251bWEuaApAQCAtMTAsNCArMTAsNiBAQAogCiAjZGVmaW5lIE1BWF9OVU1OT0RFUyAgICAoMSA8PCBOT0RFU19TSElGVCkKIAorI2RlZmluZQlOVU1BX05PX05PREUJKC0xKQorCiAjZW5kaWYgLyogX0xJTlVYX05VTUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vb20uaCBiL2luY2x1ZGUvbGludXgvb29tLmgKaW5kZXggNmFhYzVmZS4uNTM3NjYyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vb20uaAorKysgYi9pbmNsdWRlL2xpbnV4L29vbS5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogCiBzdHJ1Y3Qgem9uZWxpc3Q7CiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CkBAIC0yNiw3ICsyNyw4IEBACiBleHRlcm4gaW50IHRyeV9zZXRfem9uZV9vb20oc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIGV4dGVybiB2b2lkIGNsZWFyX3pvbmVsaXN0X29vbShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfZmxhZ3MpOwogCi1leHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIpOworZXh0ZXJuIHZvaWQgb3V0X29mX21lbW9yeShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfbWFzaywKKwkJaW50IG9yZGVyLCBub2RlbWFza190ICptYXNrKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfb29tX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX29vbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA2YjIwMmIxLi41YjU5ZjM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JvdW5kcy5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC9ib3VuZHMuaD4KICNlbmRpZiAvKiAhX19HRU5FUkFUSU5HX0JPVU5EU19IICovCiAKIC8qCkBAIC05OSw3ICs5OSw3IEBACiAJUEdfYnVkZHksCQkvKiBQYWdlIGlzIGZyZWUsIG9uIGJ1ZGR5IGxpc3RzICovCiAJUEdfc3dhcGJhY2tlZCwJCS8qIFBhZ2UgaXMgYmFja2VkIGJ5IFJBTS9zd2FwICovCiAJUEdfdW5ldmljdGFibGUsCQkvKiBQYWdlIGlzICJ1bmV2aWN0YWJsZSIgICovCi0jaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAorI2lmZGVmIENPTkZJR19NTVUKIAlQR19tbG9ja2VkLAkJLyogUGFnZSBpcyB2bWEgbWxvY2tlZCAqLwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19VTkNBQ0hFRApAQCAtMjU5LDEyICsyNTksMTAgQEAKIFBBR0VGTEFHKFVuZXZpY3RhYmxlLCB1bmV2aWN0YWJsZSkgX19DTEVBUlBBR0VGTEFHKFVuZXZpY3RhYmxlLCB1bmV2aWN0YWJsZSkKIAlURVNUQ0xFQVJGTEFHKFVuZXZpY3RhYmxlLCB1bmV2aWN0YWJsZSkKIAotI2lmZGVmIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQKLSNkZWZpbmUgTUxPQ0tfUEFHRVMgMQorI2lmZGVmIENPTkZJR19NTVUKIFBBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpIF9fQ0xFQVJQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQogCVRFU1RTQ0ZMQUcoTWxvY2tlZCwgbWxvY2tlZCkgX19URVNUQ0xFQVJGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCiAjZWxzZQotI2RlZmluZSBNTE9DS19QQUdFUyAwCiBQQUdFRkxBR19GQUxTRShNbG9ja2VkKSBTRVRQQUdFRkxBR19OT09QKE1sb2NrZWQpCiAJVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKSBfX1RFU1RDTEVBUkZMQUdfRkFMU0UoTWxvY2tlZCkKICNlbmRpZgpAQCAtMjc3LDEzICsyNzUsMTUgQEAKIAogI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQogUEFHRUZMQUcoSFdQb2lzb24sIGh3cG9pc29uKQotVEVTVFNFVEZMQUcoSFdQb2lzb24sIGh3cG9pc29uKQorVEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24pCiAjZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCA8PCBQR19od3BvaXNvbikKICNlbHNlCiBQQUdFRkxBR19GQUxTRShIV1BvaXNvbikKICNkZWZpbmUgX19QR19IV1BPSVNPTiAwCiAjZW5kaWYKIAordTY0IHN0YWJsZV9wYWdlX2ZsYWdzKHN0cnVjdCBwYWdlICpwYWdlKTsKKwogc3RhdGljIGlubGluZSBpbnQgUGFnZVVwdG9kYXRlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWludCByZXQgPSB0ZXN0X2JpdChQR191cHRvZGF0ZSwgJihwYWdlKS0+ZmxhZ3MpOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKICNlbmRpZiAvKiAhUEFHRUZMQUdTX0VYVEVOREVEICovCiAKLSNpZmRlZiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBfX1BHX01MT0NLRUQJCSgxIDw8IFBHX21sb2NrZWQpCiAjZWxzZQogI2RlZmluZSBfX1BHX01MT0NLRUQJCTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAppbmRleCA0YjkzOGQ0Li5iMGU0ZWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCkBAIC01Nyw2ICs1Nyw4IEBACiBzdGF0aWMgaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlQ2dyb3VwIyN1bmFtZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQlcCiAJeyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgIH0KIAorVEVTVFBDR0ZMQUcoTG9ja2VkLCBMT0NLKQorCiAvKiBDYWNoZSBmbGFnIGlzIHNldCBvbmx5IG9uY2UgKGF0IGFsbG9jYXRpb24pICovCiBURVNUUENHRkxBRyhDYWNoZSwgQ0FDSEUpCiBDTEVBUlBDR0ZMQUcoQ2FjaGUsIENBQ0hFKQpAQCAtODYsMTEgKzg4LDYgQEAKIAliaXRfc3Bpbl9sb2NrKFBDR19MT0NLLCAmcGMtPmZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQotewotCXJldHVybiBiaXRfc3Bpbl90cnlsb2NrKFBDR19MT0NLLCAmcGMtPmZsYWdzKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewogCWJpdF9zcGluX3VubG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAwNDc3MWI5Li5iZjFlNjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTEyNTUsNyArMTI1NSw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9jYXJkYnVzX2lvX3NpemU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfY2FyZGJ1c19tZW1fc2l6ZTsKLWV4dGVybiB1OCBwY2lfZGZsX2NhY2hlX2xpbmVfc2l6ZTsKK2V4dGVybiB1OCBfX2RldmluaXRkYXRhIHBjaV9kZmxfY2FjaGVfbGluZV9zaXplOwogZXh0ZXJuIHU4IHBjaV9jYWNoZV9saW5lX3NpemU7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9ob3RwbHVnX2lvX3NpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGVhZTFmODYuLmNjYThhMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0yMjk1LDYgKzIyOTUsMjAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4NTM2CQkweDAwNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QMjAyMEUJCTB4MDA3MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1AyMDIwCQkweDAwNzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QMjAxMEUJCTB4MDA3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1AyMDEwCQkweDAwNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QMTAyMEUJCTB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1AxMDIwCQkweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QMTAxMUUJCTB4MDEwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1AxMDExCQkweDAxMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QMTAyMkUJCTB4MDExMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1AxMDIyCQkweDAxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QMTAxM0UJCTB4MDExOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1AxMDEzCQkweDAxMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QNDA4MEUJCTB4MDQwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1A0MDgwCQkweDA0MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QNDA0MEUJCTB4MDQwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1A0MDQwCQkweDA0MDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4NjQxCQkweDcwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4NjQxRAkJMHg3MDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODYxMAkJMHg3MDE4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmgKaW5kZXggOWJkMDMxOS4uNWE1ZDZjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LWRlZnMuaApAQCAtNjAsNiArNjAsNyBAQAogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjKQkJCQlcCiAJX19QQ1BVX0RVTU1ZX0FUVFJTIGNoYXIgX19wY3B1X3Njb3BlXyMjbmFtZTsJCQlcCisJZXh0ZXJuIF9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV91bmlxdWVfIyNuYW1lOwkJXAogCV9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV91bmlxdWVfIyNuYW1lOwkJCVwKIAlfX1BDUFVfQVRUUlMoc2VjKSBQRVJfQ1BVX0RFRl9BVFRSSUJVVEVTIF9fd2VhawkJCVwKIAlfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggODc4ODM2Yy4uY2Y1ZWZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC0zNCw4ICszNCw2IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLSNpZm5kZWYgQ09ORklHX0hBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQQotCiAvKiBtaW5pbXVtIHVuaXQgc2l6ZSwgYWxzbyBpcyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYWxsb2NhdGlvbiBzaXplICovCiAjZGVmaW5lIFBDUFVfTUlOX1VOSVRfU0laRQkJUEZOX0FMSUdOKDY0IDw8IDEwKQogCkBAIC0xMzAsMzAgKzEyOCw5IEBACiAjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KQlTSElGVF9QRVJDUFVfUFRSKChwdHIpLCBwZXJfY3B1X29mZnNldCgoY3B1KSkpCiAKIGV4dGVybiB2b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKLQotI2Vsc2UgLyogQ09ORklHX0hBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQSAqLwotCi1zdHJ1Y3QgcGVyY3B1X2RhdGEgewotCXZvaWQgKnB0cnNbMV07Ci19OwotCi0vKiBwb2ludGVyIGRpc2d1aXNpbmcgbWVzc2VzIHVwIHRoZSBrbWVtbGVhayBvYmplY3RzIHRyYWNraW5nICovCi0jaWZuZGVmIENPTkZJR19ERUJVR19LTUVNTEVBSwotI2RlZmluZSBfX3BlcmNwdV9kaXNndWlzZShwZGF0YSkgKHN0cnVjdCBwZXJjcHVfZGF0YSAqKX4odW5zaWduZWQgbG9uZykocGRhdGEpCi0jZWxzZQotI2RlZmluZSBfX3BlcmNwdV9kaXNndWlzZShwZGF0YSkgKHN0cnVjdCBwZXJjcHVfZGF0YSAqKShwZGF0YSkKLSNlbmRpZgotCi0jZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotICAgICAgICBzdHJ1Y3QgcGVyY3B1X2RhdGEgKl9fcCA9IF9fcGVyY3B1X2Rpc2d1aXNlKHB0cik7CQlcCi0gICAgICAgIChfX3R5cGVvZl9fKHB0cikpX19wLT5wdHJzWyhjcHUpXTsJCQkJXAotfSkKLQotI2VuZGlmIC8qIENPTkZJR19IQVZFX0xFR0FDWV9QRVJfQ1BVX0FSRUEgKi8KLQogZXh0ZXJuIHZvaWQgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOwogZXh0ZXJuIHZvaWQgZnJlZV9wZXJjcHUodm9pZCAqX19wZGF0YSk7CitleHRlcm4gcGh5c19hZGRyX3QgcGVyX2NwdV9wdHJfdG9fcGh5cyh2b2lkICphZGRyKTsKIAogI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIGV4dGVybiB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOwpAQCAtMTc5LDYgKzE1NiwxMSBAQAogCWtmcmVlKHApOwogfQogCitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHBlcl9jcHVfcHRyX3RvX3BoeXModm9pZCAqYWRkcikKK3sKKwlyZXR1cm4gX19wYShhZGRyKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpIHsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnBjcHVfbHBhZ2VfcmVtYXBwZWQodm9pZCAqa2FkZHIpCkBAIC0xODgsOCArMTcwLDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkJKHR5cGUgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIFwKLQkJCQkJCSAgICAgICBfX2FsaWdub2ZfXyh0eXBlKSkKKyNkZWZpbmUgYWxsb2NfcGVyY3B1KHR5cGUpCVwKKwkodHlwZW9mKHR5cGUpICopX19hbGxvY19wZXJjcHUoc2l6ZW9mKHR5cGUpLCBfX2FsaWdub2ZfXyh0eXBlKSkKIAogLyoKICAqIE9wdGlvbmFsIG1ldGhvZHMgZm9yIG9wdGltaXplZCBub24tbHZhbHVlIHBlci1jcHUgdmFyaWFibGUgYWNjZXNzLgpAQCAtMjQzLDQgKzIyNSw0MDQgQEAKICMgZGVmaW5lIHBlcmNwdV94b3IodmFyLCB2YWwpCQlfX3BlcmNwdV9nZW5lcmljX3RvX29wKHZhciwgKHZhbCksIF49KQogI2VuZGlmCiAKKy8qCisgKiBCcmFuY2hpbmcgZnVuY3Rpb24gdG8gc3BsaXQgdXAgYSBmdW5jdGlvbiBpbnRvIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0CisgKiBhcmUgY2FsbGVkIGZvciBkaWZmZXJlbnQgc2NhbGFyIHNpemVzIG9mIHRoZSBvYmplY3RzIGhhbmRsZWQuCisgKi8KKworZXh0ZXJuIHZvaWQgX19iYWRfc2l6ZV9jYWxsX3BhcmFtZXRlcih2b2lkKTsKKworI2RlZmluZSBfX3BjcHVfc2l6ZV9jYWxsX3JldHVybihzdGVtLCB2YXJpYWJsZSkJCQkJXAorKHsJdHlwZW9mKHZhcmlhYmxlKSBwc2NyX3JldF9fOwkJCQkJXAorCXN3aXRjaChzaXplb2YodmFyaWFibGUpKSB7CQkJCQlcCisJY2FzZSAxOiBwc2NyX3JldF9fID0gc3RlbSMjMSh2YXJpYWJsZSk7YnJlYWs7CQkJXAorCWNhc2UgMjogcHNjcl9yZXRfXyA9IHN0ZW0jIzIodmFyaWFibGUpO2JyZWFrOwkJCVwKKwljYXNlIDQ6IHBzY3JfcmV0X18gPSBzdGVtIyM0KHZhcmlhYmxlKTticmVhazsJCQlcCisJY2FzZSA4OiBwc2NyX3JldF9fID0gc3RlbSMjOCh2YXJpYWJsZSk7YnJlYWs7CQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19iYWRfc2l6ZV9jYWxsX3BhcmFtZXRlcigpO2JyZWFrOwkJCVwKKwl9CQkJCQkJCQlcCisJcHNjcl9yZXRfXzsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3BjcHVfc2l6ZV9jYWxsKHN0ZW0sIHZhcmlhYmxlLCAuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3dpdGNoKHNpemVvZih2YXJpYWJsZSkpIHsJCQkJCVwKKwkJY2FzZSAxOiBzdGVtIyMxKHZhcmlhYmxlLCBfX1ZBX0FSR1NfXyk7YnJlYWs7CQlcCisJCWNhc2UgMjogc3RlbSMjMih2YXJpYWJsZSwgX19WQV9BUkdTX18pO2JyZWFrOwkJXAorCQljYXNlIDQ6IHN0ZW0jIzQodmFyaWFibGUsIF9fVkFfQVJHU19fKTticmVhazsJCVwKKwkJY2FzZSA4OiBzdGVtIyM4KHZhcmlhYmxlLCBfX1ZBX0FSR1NfXyk7YnJlYWs7CQlcCisJCWRlZmF1bHQ6IAkJCQkJCVwKKwkJCV9fYmFkX3NpemVfY2FsbF9wYXJhbWV0ZXIoKTticmVhazsJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogT3B0aW1pemVkIG1hbmlwdWxhdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRlZCB0aHJvdWdoIHRoZSBwZXIgY3B1CisgKiBhbGxvY2F0b3Igb3IgZm9yIGFkZHJlc3NlcyBvZiBwZXIgY3B1IHZhcmlhYmxlcyAoY2FuIGJlIGRldGVybWluZWQKKyAqIHVzaW5nIHBlcl9jcHVfdmFyKHh4KS4KKyAqCisgKiBUaGVzZSBvcGVyYXRpb24gZ3VhcmFudGVlIGV4Y2x1c2l2aXR5IG9mIGFjY2VzcyBmb3Igb3RoZXIgb3BlcmF0aW9ucworICogb24gdGhlICpzYW1lKiBwcm9jZXNzb3IuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgcGVyIGNwdSBkYXRhIGlzIG9ubHkKKyAqIGFjY2Vzc2VkIGJ5IGEgc2luZ2xlIHByb2Nlc3NvciBpbnN0YW5jZSAodGhlIGN1cnJlbnQgb25lKS4KKyAqCisgKiBUaGUgZmlyc3QgZ3JvdXAgaXMgdXNlZCBmb3IgYWNjZXNzZXMgdGhhdCBtdXN0IGJlIGRvbmUgaW4gYQorICogcHJlZW1wdGlvbiBzYWZlIHdheSBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlIGNvbnRleHQgaXMgbm90IHByZWVtcHQKKyAqIHNhZmUuIEludGVycnVwdHMgbWF5IG9jY3VyLiBJZiB0aGUgaW50ZXJydXB0IG1vZGlmaWVzIHRoZSB2YXJpYWJsZQorICogdG9vIHRoZW4gUk1XIGFjdGlvbnMgd2lsbCBub3QgYmUgcmVsaWFibGUuCisgKgorICogVGhlIGFyY2ggY29kZSBjYW4gcHJvdmlkZSBvcHRpbWl6ZWQgZnVuY3Rpb25zIGluIHR3byB3YXlzOgorICoKKyAqIDEuIE92ZXJyaWRlIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWx5LiBGLmUuIGRlZmluZSB0aGlzX2NwdV9hZGQoKS4KKyAqICAgIFRoZSBhcmNoIG11c3QgdGhlbiBlbnN1cmUgdGhhdCB0aGUgdmFyaW91cyBzY2FsYXIgZm9ybWF0IHBhc3NlZAorICogICAgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICoKKyAqIDIuIFByb3ZpZGUgZnVuY3Rpb25zIGZvciBjZXJ0YWluIHNjYWxhciBzaXplcy4gRi5lLiBwcm92aWRlCisgKiAgICB0aGlzX2NwdV9hZGRfMigpIHRvIHByb3ZpZGUgcGVyIGNwdSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgMiBieXRlCisgKiAgICBzaXplZCBSTVcgYWN0aW9ucy4gSWYgYXJjaCBjb2RlIGRvZXMgbm90IHByb3ZpZGUgb3BlcmF0aW9ucyBmb3IKKyAqICAgIGEgc2NhbGFyIHNpemUgdGhlbiB0aGUgZmFsbGJhY2sgaW4gdGhlIGdlbmVyaWMgY29kZSB3aWxsIGJlCisgKiAgICB1c2VkLgorICovCisKKyNkZWZpbmUgX3RoaXNfY3B1X2dlbmVyaWNfcmVhZChwY3ApCQkJCQlcCisoewl0eXBlb2YocGNwKSByZXRfXzsJCQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQkJXAorCXJldF9fID0gKnRoaXNfY3B1X3B0cigmKHBjcCkpOwkJCQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJCQkJXAorCXJldF9fOwkJCQkJCQkJXAorfSkKKworI2lmbmRlZiB0aGlzX2NwdV9yZWFkCisjIGlmbmRlZiB0aGlzX2NwdV9yZWFkXzEKKyMgIGRlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKQlfdGhpc19jcHVfZ2VuZXJpY19yZWFkKHBjcCkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X3JlYWRfMgorIyAgZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApCV90aGlzX2NwdV9nZW5lcmljX3JlYWQocGNwKQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfcmVhZF80CisjICBkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJX3RoaXNfY3B1X2dlbmVyaWNfcmVhZChwY3ApCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9yZWFkXzgKKyMgIGRlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKQlfdGhpc19jcHVfZ2VuZXJpY19yZWFkKHBjcCkKKyMgZW5kaWYKKyMgZGVmaW5lIHRoaXNfY3B1X3JlYWQocGNwKQlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybih0aGlzX2NwdV9yZWFkXywgKHBjcCkpCisjZW5kaWYKKworI2RlZmluZSBfdGhpc19jcHVfZ2VuZXJpY190b19vcChwY3AsIHZhbCwgb3ApCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQkJXAorCSpfX3RoaXNfY3B1X3B0cigmcGNwKSBvcCB2YWw7CQkJCQlcCisJcHJlZW1wdF9lbmFibGUoKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjaWZuZGVmIHRoaXNfY3B1X3dyaXRlCisjIGlmbmRlZiB0aGlzX2NwdV93cml0ZV8xCisjICBkZWZpbmUgdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCA9KQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfd3JpdGVfMgorIyAgZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgPSkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X3dyaXRlXzQKKyMgIGRlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlfdGhpc19jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksID0pCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV93cml0ZV84CisjICBkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCA9KQorIyBlbmRpZgorIyBkZWZpbmUgdGhpc19jcHVfd3JpdGUocGNwLCB2YWwpCV9fcGNwdV9zaXplX2NhbGwodGhpc19jcHVfd3JpdGVfLCAocGNwKSwgKHZhbCkpCisjZW5kaWYKKworI2lmbmRlZiB0aGlzX2NwdV9hZGQKKyMgaWZuZGVmIHRoaXNfY3B1X2FkZF8xCisjICBkZWZpbmUgdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgKz0pCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9hZGRfMgorIyAgZGVmaW5lIHRoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKQlfdGhpc19jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksICs9KQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfYWRkXzQKKyMgIGRlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCArPSkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X2FkZF84CisjICBkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgKz0pCisjIGVuZGlmCisjIGRlZmluZSB0aGlzX2NwdV9hZGQocGNwLCB2YWwpCQlfX3BjcHVfc2l6ZV9jYWxsKHRoaXNfY3B1X2FkZF8sIChwY3ApLCAodmFsKSkKKyNlbmRpZgorCisjaWZuZGVmIHRoaXNfY3B1X3N1YgorIyBkZWZpbmUgdGhpc19jcHVfc3ViKHBjcCwgdmFsKQkJdGhpc19jcHVfYWRkKChwY3ApLCAtKHZhbCkpCisjZW5kaWYKKworI2lmbmRlZiB0aGlzX2NwdV9pbmMKKyMgZGVmaW5lIHRoaXNfY3B1X2luYyhwY3ApCQl0aGlzX2NwdV9hZGQoKHBjcCksIDEpCisjZW5kaWYKKworI2lmbmRlZiB0aGlzX2NwdV9kZWMKKyMgZGVmaW5lIHRoaXNfY3B1X2RlYyhwY3ApCQl0aGlzX2NwdV9zdWIoKHBjcCksIDEpCisjZW5kaWYKKworI2lmbmRlZiB0aGlzX2NwdV9hbmQKKyMgaWZuZGVmIHRoaXNfY3B1X2FuZF8xCisjICBkZWZpbmUgdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgJj0pCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9hbmRfMgorIyAgZGVmaW5lIHRoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKQlfdGhpc19jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksICY9KQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfYW5kXzQKKyMgIGRlZmluZSB0aGlzX2NwdV9hbmRfNChwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCAmPSkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X2FuZF84CisjICBkZWZpbmUgdGhpc19jcHVfYW5kXzgocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgJj0pCisjIGVuZGlmCisjIGRlZmluZSB0aGlzX2NwdV9hbmQocGNwLCB2YWwpCQlfX3BjcHVfc2l6ZV9jYWxsKHRoaXNfY3B1X2FuZF8sIChwY3ApLCAodmFsKSkKKyNlbmRpZgorCisjaWZuZGVmIHRoaXNfY3B1X29yCisjIGlmbmRlZiB0aGlzX2NwdV9vcl8xCisjICBkZWZpbmUgdGhpc19jcHVfb3JfMShwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCB8PSkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X29yXzIKKyMgIGRlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKQlfdGhpc19jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksIHw9KQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfb3JfNAorIyAgZGVmaW5lIHRoaXNfY3B1X29yXzQocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgfD0pCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9vcl84CisjICBkZWZpbmUgdGhpc19jcHVfb3JfOChwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCB8PSkKKyMgZW5kaWYKKyMgZGVmaW5lIHRoaXNfY3B1X29yKHBjcCwgdmFsKQkJX19wY3B1X3NpemVfY2FsbCh0aGlzX2NwdV9vcl8sIChwY3ApLCAodmFsKSkKKyNlbmRpZgorCisjaWZuZGVmIHRoaXNfY3B1X3hvcgorIyBpZm5kZWYgdGhpc19jcHVfeG9yXzEKKyMgIGRlZmluZSB0aGlzX2NwdV94b3JfMShwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCBePSkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X3hvcl8yCisjICBkZWZpbmUgdGhpc19jcHVfeG9yXzIocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV94b3JfNAorIyAgZGVmaW5lIHRoaXNfY3B1X3hvcl80KHBjcCwgdmFsKQlfdGhpc19jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksIF49KQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfeG9yXzgKKyMgIGRlZmluZSB0aGlzX2NwdV94b3JfOChwY3AsIHZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCBePSkKKyMgZW5kaWYKKyMgZGVmaW5lIHRoaXNfY3B1X3hvcihwY3AsIHZhbCkJCV9fcGNwdV9zaXplX2NhbGwodGhpc19jcHVfb3JfLCAocGNwKSwgKHZhbCkpCisjZW5kaWYKKworLyoKKyAqIEdlbmVyaWMgcGVyY3B1IG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgcmVxdWlyZSBwcmVlbXB0aW9uIGhhbmRsaW5nLgorICogRWl0aGVyIHdlIGRvIG5vdCBjYXJlIGFib3V0IHJhY2VzIG9yIHRoZSBjYWxsZXIgaGFzIHRoZQorICogcmVzcG9uc2liaWxpdHkgb2YgaGFuZGxpbmcgcHJlZW1wdGlvbnMgaXNzdWVzLiBBcmNoIGNvZGUgY2FuIHN0aWxsCisgKiBvdmVycmlkZSB0aGVzZSBpbnN0cnVjdGlvbnMgc2luY2UgdGhlIGFyY2ggcGVyIGNwdSBjb2RlIG1heSBiZSBtb3JlCisgKiBlZmZpY2llbnQgYW5kIG1heSBhY3R1YWxseSBnZXQgcmFjZSBmcmVlbmVzcyBmb3IgZnJlZSAodGhhdCBpcyB0aGUKKyAqIGNhc2UgZm9yIHg4NiBmb3IgZXhhbXBsZSkuCisgKgorICogSWYgdGhlcmUgaXMgbm8gb3RoZXIgcHJvdGVjdGlvbiB0aHJvdWdoIHByZWVtcHQgZGlzYWJsZSBhbmQvb3IKKyAqIGRpc2FibGluZyBpbnRlcnVwdHMgdGhlbiBvbmUgb2YgdGhlc2UgUk1XIG9wZXJhdGlvbnMgY2FuIHNob3cgdW5leHBlY3RlZAorICogYmVoYXZpb3IgYmVjYXVzZSB0aGUgZXhlY3V0aW9uIHRocmVhZCB3YXMgcmVzY2hlZHVsZWQgb24gYW5vdGhlciBwcm9jZXNzb3IKKyAqIG9yIGFuIGludGVycnVwdCBvY2N1cnJlZCBhbmQgdGhlIHNhbWUgcGVyY3B1IHZhcmlhYmxlIHdhcyBtb2RpZmllZCBmcm9tCisgKiB0aGUgaW50ZXJydXB0IGNvbnRleHQuCisgKi8KKyNpZm5kZWYgX190aGlzX2NwdV9yZWFkCisjIGlmbmRlZiBfX3RoaXNfY3B1X3JlYWRfMQorIyAgZGVmaW5lIF9fdGhpc19jcHVfcmVhZF8xKHBjcCkJKCpfX3RoaXNfY3B1X3B0cigmKHBjcCkpKQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV9yZWFkXzIKKyMgIGRlZmluZSBfX3RoaXNfY3B1X3JlYWRfMihwY3ApCSgqX190aGlzX2NwdV9wdHIoJihwY3ApKSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfcmVhZF80CisjICBkZWZpbmUgX190aGlzX2NwdV9yZWFkXzQocGNwKQkoKl9fdGhpc19jcHVfcHRyKCYocGNwKSkpCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X3JlYWRfOAorIyAgZGVmaW5lIF9fdGhpc19jcHVfcmVhZF84KHBjcCkJKCpfX3RoaXNfY3B1X3B0cigmKHBjcCkpKQorIyBlbmRpZgorIyBkZWZpbmUgX190aGlzX2NwdV9yZWFkKHBjcCkJX19wY3B1X3NpemVfY2FsbF9yZXR1cm4oX190aGlzX2NwdV9yZWFkXywgKHBjcCkpCisjZW5kaWYKKworI2RlZmluZSBfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AocGNwLCB2YWwsIG9wKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCSpfX3RoaXNfY3B1X3B0cigmKHBjcCkpIG9wIHZhbDsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgX190aGlzX2NwdV93cml0ZQorIyBpZm5kZWYgX190aGlzX2NwdV93cml0ZV8xCisjICBkZWZpbmUgX190aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCA9KQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV93cml0ZV8yCisjICBkZWZpbmUgX190aGlzX2NwdV93cml0ZV8yKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCA9KQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV93cml0ZV80CisjICBkZWZpbmUgX190aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCA9KQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV93cml0ZV84CisjICBkZWZpbmUgX190aGlzX2NwdV93cml0ZV84KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCA9KQorIyBlbmRpZgorIyBkZWZpbmUgX190aGlzX2NwdV93cml0ZShwY3AsIHZhbCkJX19wY3B1X3NpemVfY2FsbChfX3RoaXNfY3B1X3dyaXRlXywgKHBjcCksICh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgX190aGlzX2NwdV9hZGQKKyMgaWZuZGVmIF9fdGhpc19jcHVfYWRkXzEKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FkZF8xKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCArPSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYWRkXzIKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCArPSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYWRkXzQKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FkZF80KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCArPSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYWRkXzgKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FkZF84KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCArPSkKKyMgZW5kaWYKKyMgZGVmaW5lIF9fdGhpc19jcHVfYWRkKHBjcCwgdmFsKQlfX3BjcHVfc2l6ZV9jYWxsKF9fdGhpc19jcHVfYWRkXywgKHBjcCksICh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgX190aGlzX2NwdV9zdWIKKyMgZGVmaW5lIF9fdGhpc19jcHVfc3ViKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2FkZCgocGNwKSwgLSh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgX190aGlzX2NwdV9pbmMKKyMgZGVmaW5lIF9fdGhpc19jcHVfaW5jKHBjcCkJCV9fdGhpc19jcHVfYWRkKChwY3ApLCAxKQorI2VuZGlmCisKKyNpZm5kZWYgX190aGlzX2NwdV9kZWMKKyMgZGVmaW5lIF9fdGhpc19jcHVfZGVjKHBjcCkJCV9fdGhpc19jcHVfc3ViKChwY3ApLCAxKQorI2VuZGlmCisKKyNpZm5kZWYgX190aGlzX2NwdV9hbmQKKyMgaWZuZGVmIF9fdGhpc19jcHVfYW5kXzEKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCAmPSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYW5kXzIKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCAmPSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYW5kXzQKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FuZF80KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCAmPSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYW5kXzgKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCAmPSkKKyMgZW5kaWYKKyMgZGVmaW5lIF9fdGhpc19jcHVfYW5kKHBjcCwgdmFsKQlfX3BjcHVfc2l6ZV9jYWxsKF9fdGhpc19jcHVfYW5kXywgKHBjcCksICh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgX190aGlzX2NwdV9vcgorIyBpZm5kZWYgX190aGlzX2NwdV9vcl8xCisjICBkZWZpbmUgX190aGlzX2NwdV9vcl8xKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCB8PSkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfb3JfMgorIyAgZGVmaW5lIF9fdGhpc19jcHVfb3JfMihwY3AsIHZhbCkJX190aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgfD0pCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X29yXzQKKyMgIGRlZmluZSBfX3RoaXNfY3B1X29yXzQocGNwLCB2YWwpCV9fdGhpc19jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksIHw9KQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV9vcl84CisjICBkZWZpbmUgX190aGlzX2NwdV9vcl84KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCB8PSkKKyMgZW5kaWYKKyMgZGVmaW5lIF9fdGhpc19jcHVfb3IocGNwLCB2YWwpCV9fcGNwdV9zaXplX2NhbGwoX190aGlzX2NwdV9vcl8sIChwY3ApLCAodmFsKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fdGhpc19jcHVfeG9yCisjIGlmbmRlZiBfX3RoaXNfY3B1X3hvcl8xCisjICBkZWZpbmUgX190aGlzX2NwdV94b3JfMShwY3AsIHZhbCkJX190aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X3hvcl8yCisjICBkZWZpbmUgX190aGlzX2NwdV94b3JfMihwY3AsIHZhbCkJX190aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X3hvcl80CisjICBkZWZpbmUgX190aGlzX2NwdV94b3JfNChwY3AsIHZhbCkJX190aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X3hvcl84CisjICBkZWZpbmUgX190aGlzX2NwdV94b3JfOChwY3AsIHZhbCkJX190aGlzX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGRlZmluZSBfX3RoaXNfY3B1X3hvcihwY3AsIHZhbCkJX19wY3B1X3NpemVfY2FsbChfX3RoaXNfY3B1X3hvcl8sIChwY3ApLCAodmFsKSkKKyNlbmRpZgorCisvKgorICogSVJRIHNhZmUgdmVyc2lvbnMgb2YgdGhlIHBlciBjcHUgUk1XIG9wZXJhdGlvbnMuIE5vdGUgdGhhdCB0aGVzZSBvcGVyYXRpb25zCisgKiBhcmUgKm5vdCogc2FmZSBhZ2FpbnN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgc2FtZSB2YXJpYWJsZSBmcm9tIGFub3RoZXIKKyAqIHByb2Nlc3NvcnMgKHdoaWNoIG9uZSBnZXRzIHdoZW4gdXNpbmcgcmVndWxhciBhdG9taWMgb3BlcmF0aW9ucykKKyAuIFRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXRvbWljIHZzLiBsb2NhbCBpbnRlcnJ1cHRzIGFuZAorICogcHJlZW1wdGlvbiBvbmx5LgorICovCisjZGVmaW5lIGlycXNhZmVfY3B1X2dlbmVyaWNfdG9fb3AocGNwLCB2YWwsIG9wKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJCQkJCQlcCisJKl9fdGhpc19jcHVfcHRyKCYocGNwKSkgb3AgdmFsOwkJCQkJXAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgaXJxc2FmZV9jcHVfYWRkCisjIGlmbmRlZiBpcnFzYWZlX2NwdV9hZGRfMQorIyAgZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8xKHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgKz0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV9hZGRfMgorIyAgZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8yKHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgKz0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV9hZGRfNAorIyAgZGVmaW5lIGlycXNhZmVfY3B1X2FkZF80KHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgKz0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV9hZGRfOAorIyAgZGVmaW5lIGlycXNhZmVfY3B1X2FkZF84KHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgKz0pCisjIGVuZGlmCisjIGRlZmluZSBpcnFzYWZlX2NwdV9hZGQocGNwLCB2YWwpIF9fcGNwdV9zaXplX2NhbGwoaXJxc2FmZV9jcHVfYWRkXywgKHBjcCksICh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgaXJxc2FmZV9jcHVfc3ViCisjIGRlZmluZSBpcnFzYWZlX2NwdV9zdWIocGNwLCB2YWwpCWlycXNhZmVfY3B1X2FkZCgocGNwKSwgLSh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgaXJxc2FmZV9jcHVfaW5jCisjIGRlZmluZSBpcnFzYWZlX2NwdV9pbmMocGNwKQlpcnFzYWZlX2NwdV9hZGQoKHBjcCksIDEpCisjZW5kaWYKKworI2lmbmRlZiBpcnFzYWZlX2NwdV9kZWMKKyMgZGVmaW5lIGlycXNhZmVfY3B1X2RlYyhwY3ApCWlycXNhZmVfY3B1X3N1YigocGNwKSwgMSkKKyNlbmRpZgorCisjaWZuZGVmIGlycXNhZmVfY3B1X2FuZAorIyBpZm5kZWYgaXJxc2FmZV9jcHVfYW5kXzEKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9hbmRfMShwY3AsIHZhbCkgaXJxc2FmZV9jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksICY9KQorIyBlbmRpZgorIyBpZm5kZWYgaXJxc2FmZV9jcHVfYW5kXzIKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9hbmRfMihwY3AsIHZhbCkgaXJxc2FmZV9jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksICY9KQorIyBlbmRpZgorIyBpZm5kZWYgaXJxc2FmZV9jcHVfYW5kXzQKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9hbmRfNChwY3AsIHZhbCkgaXJxc2FmZV9jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksICY9KQorIyBlbmRpZgorIyBpZm5kZWYgaXJxc2FmZV9jcHVfYW5kXzgKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9hbmRfOChwY3AsIHZhbCkgaXJxc2FmZV9jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksICY9KQorIyBlbmRpZgorIyBkZWZpbmUgaXJxc2FmZV9jcHVfYW5kKHBjcCwgdmFsKSBfX3BjcHVfc2l6ZV9jYWxsKGlycXNhZmVfY3B1X2FuZF8sICh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgaXJxc2FmZV9jcHVfb3IKKyMgaWZuZGVmIGlycXNhZmVfY3B1X29yXzEKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9vcl8xKHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgfD0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV9vcl8yCisjICBkZWZpbmUgaXJxc2FmZV9jcHVfb3JfMihwY3AsIHZhbCkgaXJxc2FmZV9jcHVfZ2VuZXJpY190b19vcCgocGNwKSwgKHZhbCksIHw9KQorIyBlbmRpZgorIyBpZm5kZWYgaXJxc2FmZV9jcHVfb3JfNAorIyAgZGVmaW5lIGlycXNhZmVfY3B1X29yXzQocGNwLCB2YWwpIGlycXNhZmVfY3B1X2dlbmVyaWNfdG9fb3AoKHBjcCksICh2YWwpLCB8PSkKKyMgZW5kaWYKKyMgaWZuZGVmIGlycXNhZmVfY3B1X29yXzgKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9vcl84KHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgfD0pCisjIGVuZGlmCisjIGRlZmluZSBpcnFzYWZlX2NwdV9vcihwY3AsIHZhbCkgX19wY3B1X3NpemVfY2FsbChpcnFzYWZlX2NwdV9vcl8sICh2YWwpKQorI2VuZGlmCisKKyNpZm5kZWYgaXJxc2FmZV9jcHVfeG9yCisjIGlmbmRlZiBpcnFzYWZlX2NwdV94b3JfMQorIyAgZGVmaW5lIGlycXNhZmVfY3B1X3hvcl8xKHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV94b3JfMgorIyAgZGVmaW5lIGlycXNhZmVfY3B1X3hvcl8yKHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV94b3JfNAorIyAgZGVmaW5lIGlycXNhZmVfY3B1X3hvcl80KHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV94b3JfOAorIyAgZGVmaW5lIGlycXNhZmVfY3B1X3hvcl84KHBjcCwgdmFsKSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKChwY3ApLCAodmFsKSwgXj0pCisjIGVuZGlmCisjIGRlZmluZSBpcnFzYWZlX2NwdV94b3IocGNwLCB2YWwpIF9fcGNwdV9zaXplX2NhbGwoaXJxc2FmZV9jcHVfeG9yXywgKHZhbCkpCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fTElOVVhfUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2ZiMjU2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NDQgKzAsMCBAQAotLyoKLSAqICBOT1RFOiB0aGlzIGZpbGUgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIGtlcm5lbCByZWxlYXNlLCBpdCBpcwotICogIHByb3ZpZGVkIGFzIGEgY291cnRlc3kgY29weSBvZiB1c2VyLXNwYWNlIGNvZGUgdGhhdCByZWxpZXMgb24gdGhlCi0gKiAgb2xkIChwcmUtcmVuYW1lKSBzeW1ib2xzIGFuZCBjb25zdGFudHMuCi0gKgotICogIFBlcmZvcm1hbmNlIGV2ZW50czoKLSAqCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Ci0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKLSAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQotICoKLSAqICBEYXRhIHR5cGUgZGVmaW5pdGlvbnMsIGRlY2xhcmF0aW9ucywgcHJvdG90eXBlcy4KLSAqCi0gKiAgICBTdGFydGVkIGJ5OiBUaG9tYXMgR2xlaXhuZXIgYW5kIEluZ28gTW9sbmFyCi0gKgotICogIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORwotICovCi0jaWZuZGVmIF9MSU5VWF9QRVJGX0NPVU5URVJfSAotI2RlZmluZSBfTElOVVhfUEVSRl9DT1VOVEVSX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLS8qCi0gKiBVc2VyLXNwYWNlIEFCSSBiaXRzOgotICovCi0KLS8qCi0gKiBhdHRyLnR5cGUKLSAqLwotZW51bSBwZXJmX3R5cGVfaWQgewotCVBFUkZfVFlQRV9IQVJEV0FSRQkJCT0gMCwKLQlQRVJGX1RZUEVfU09GVFdBUkUJCQk9IDEsCi0JUEVSRl9UWVBFX1RSQUNFUE9JTlQJCQk9IDIsCi0JUEVSRl9UWVBFX0hXX0NBQ0hFCQkJPSAzLAotCVBFUkZfVFlQRV9SQVcJCQkJPSA0LAotCi0JUEVSRl9UWVBFX01BWCwJCQkJLyogbm9uLUFCSSAqLwotfTsKLQotLyoKLSAqIEdlbmVyYWxpemVkIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnQgdHlwZXMsIHVzZWQgYnkgdGhlCi0gKiBhdHRyLmV2ZW50X2lkIHBhcmFtZXRlciBvZiB0aGUgc3lzX3BlcmZfY291bnRlcl9vcGVuKCkKLSAqIHN5c2NhbGw6Ci0gKi8KLWVudW0gcGVyZl9od19pZCB7Ci0JLyoKLQkgKiBDb21tb24gaGFyZHdhcmUgZXZlbnRzLCBnZW5lcmFsaXplZCBieSB0aGUga2VybmVsOgotCSAqLwotCVBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJPSAwLAotCVBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCQk9IDEsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCQk9IDIsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCT0gMywKLQlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAotCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwkJPSA1LAotCVBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUwkJPSA2LAotCi0JUEVSRl9DT1VOVF9IV19NQVgsCQkJLyogbm9uLUFCSSAqLwotfTsKLQotLyoKLSAqIEdlbmVyYWxpemVkIGhhcmR3YXJlIGNhY2hlIGNvdW50ZXJzOgotICoKLSAqICAgICAgIHsgTDEtRCwgTDEtSSwgTExDLCBJVExCLCBEVExCLCBCUFUgfSB4Ci0gKiAgICAgICB7IHJlYWQsIHdyaXRlLCBwcmVmZXRjaCB9IHgKLSAqICAgICAgIHsgYWNjZXNzZXMsIG1pc3NlcyB9Ci0gKi8KLWVudW0gcGVyZl9od19jYWNoZV9pZCB7Ci0JUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQJCQk9IDAsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9MMUkJCQk9IDEsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9MTAkJCT0gMiwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX0RUTEIJCT0gMywKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX0lUTEIJCT0gNCwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX0JQVQkJCT0gNSwKLQotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYLAkJLyogbm9uLUFCSSAqLwotfTsKLQotZW51bSBwZXJmX2h3X2NhY2hlX29wX2lkIHsKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCT0gMCwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1dSSVRFCQk9IDEsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9QUkVGRVRDSAkJPSAyLAotCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVgsCQkvKiBub24tQUJJICovCi19OwotCi1lbnVtIHBlcmZfaHdfY2FjaGVfb3BfcmVzdWx0X2lkIHsKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9BQ0NFU1MJPSAwLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJCT0gMSwKLQotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWCwJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBTcGVjaWFsICJzb2Z0d2FyZSIgY291bnRlcnMgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbCwgZXZlbiBpZiB0aGUgaGFyZHdhcmUKLSAqIGRvZXMgbm90IHN1cHBvcnQgcGVyZm9ybWFuY2UgY291bnRlcnMuIFRoZXNlIGNvdW50ZXJzIG1lYXN1cmUgdmFyaW91cwotICogcGh5c2ljYWwgYW5kIHN3IGV2ZW50cyBvZiB0aGUga2VybmVsIChhbmQgYWxsb3cgdGhlIHByb2ZpbGluZyBvZiB0aGVtIGFzCi0gKiB3ZWxsKToKLSAqLwotZW51bSBwZXJmX3N3X2lkcyB7Ci0JUEVSRl9DT1VOVF9TV19DUFVfQ0xPQ0sJCQk9IDAsCi0JUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLCQk9IDEsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwkJPSAyLAotCVBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFUwkJPSAzLAotCVBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMJCT0gNCwKLQlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgkJPSA1LAotCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKCQk9IDYsCi0JUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTCQk9IDcsCi0JUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTCQk9IDgsCi0KLQlQRVJGX0NPVU5UX1NXX01BWCwJCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogQml0cyB0aGF0IGNhbiBiZSBzZXQgaW4gYXR0ci5zYW1wbGVfdHlwZSB0byByZXF1ZXN0IGluZm9ybWF0aW9uCi0gKiBpbiB0aGUgb3ZlcmZsb3cgcGFja2V0cy4KLSAqLwotZW51bSBwZXJmX2NvdW50ZXJfc2FtcGxlX2Zvcm1hdCB7Ci0JUEVSRl9TQU1QTEVfSVAJCQkJPSAxVSA8PCAwLAotCVBFUkZfU0FNUExFX1RJRAkJCQk9IDFVIDw8IDEsCi0JUEVSRl9TQU1QTEVfVElNRQkJCT0gMVUgPDwgMiwKLQlQRVJGX1NBTVBMRV9BRERSCQkJPSAxVSA8PCAzLAotCVBFUkZfU0FNUExFX1JFQUQJCQk9IDFVIDw8IDQsCi0JUEVSRl9TQU1QTEVfQ0FMTENIQUlOCQkJPSAxVSA8PCA1LAotCVBFUkZfU0FNUExFX0lECQkJCT0gMVUgPDwgNiwKLQlQRVJGX1NBTVBMRV9DUFUJCQkJPSAxVSA8PCA3LAotCVBFUkZfU0FNUExFX1BFUklPRAkJCT0gMVUgPDwgOCwKLQlQRVJGX1NBTVBMRV9TVFJFQU1fSUQJCQk9IDFVIDw8IDksCi0JUEVSRl9TQU1QTEVfUkFXCQkJCT0gMVUgPDwgMTAsCi0KLQlQRVJGX1NBTVBMRV9NQVggPSAxVSA8PCAxMSwJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRhIHJldHVybmVkIGJ5IHJlYWQoKSBvbiBhIHBlcmYgY291bnRlciBmZCwKLSAqIGFzIHNwZWNpZmllZCBieSBhdHRyLnJlYWRfZm9ybWF0OgotICoKLSAqIHN0cnVjdCByZWFkX2Zvcm1hdCB7Ci0gKgl7IHU2NAkJdmFsdWU7Ci0gKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKLSAqCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAotICoJfSAmJiAhUEVSRl9GT1JNQVRfR1JPVVAKLSAqCi0gKgl7IHU2NAkJbnI7Ci0gKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKLSAqCSAgeyB1NjQJCXZhbHVlOwotICoJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAotICoJICB9CQljbnRyW25yXTsKLSAqCX0gJiYgUEVSRl9GT1JNQVRfR1JPVVAKLSAqIH07Ci0gKi8KLWVudW0gcGVyZl9jb3VudGVyX3JlYWRfZm9ybWF0IHsKLQlQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQJCT0gMVUgPDwgMCwKLQlQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcJCT0gMVUgPDwgMSwKLQlQRVJGX0ZPUk1BVF9JRAkJCQk9IDFVIDw8IDIsCi0JUEVSRl9GT1JNQVRfR1JPVVAJCQk9IDFVIDw8IDMsCi0KLQlQRVJGX0ZPUk1BVF9NQVggPSAxVSA8PCA0LCAJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLSNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMAk2NAkvKiBzaXplb2YgZmlyc3QgcHVibGlzaGVkIHN0cnVjdCAqLwotCi0vKgotICogSGFyZHdhcmUgZXZlbnQgdG8gbW9uaXRvciB2aWEgYSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGNvdW50ZXI6Ci0gKi8KLXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciB7Ci0KLQkvKgotCSAqIE1ham9yIHR5cGU6IGhhcmR3YXJlL3NvZnR3YXJlL3RyYWNlcG9pbnQvZXRjLgotCSAqLwotCV9fdTMyCQkJdHlwZTsKLQotCS8qCi0JICogU2l6ZSBvZiB0aGUgYXR0ciBzdHJ1Y3R1cmUsIGZvciBmd2QvYndkIGNvbXBhdC4KLQkgKi8KLQlfX3UzMgkJCXNpemU7Ci0KLQkvKgotCSAqIFR5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLQkgKi8KLQlfX3U2NAkJCWNvbmZpZzsKLQotCXVuaW9uIHsKLQkJX191NjQJCXNhbXBsZV9wZXJpb2Q7Ci0JCV9fdTY0CQlzYW1wbGVfZnJlcTsKLQl9OwotCi0JX191NjQJCQlzYW1wbGVfdHlwZTsKLQlfX3U2NAkJCXJlYWRfZm9ybWF0OwotCi0JX191NjQJCQlkaXNhYmxlZCAgICAgICA6ICAxLCAvKiBvZmYgYnkgZGVmYXVsdCAgICAgICAgKi8KLQkJCQlpbmhlcml0CSAgICAgICA6ICAxLCAvKiBjaGlsZHJlbiBpbmhlcml0IGl0ICAgKi8KLQkJCQlwaW5uZWQJICAgICAgIDogIDEsIC8qIG11c3QgYWx3YXlzIGJlIG9uIFBNVSAqLwotCQkJCWV4Y2x1c2l2ZSAgICAgIDogIDEsIC8qIG9ubHkgZ3JvdXAgb24gUE1VICAgICAqLwotCQkJCWV4Y2x1ZGVfdXNlciAgIDogIDEsIC8qIGRvbid0IGNvdW50IHVzZXIgICAgICAqLwotCQkJCWV4Y2x1ZGVfa2VybmVsIDogIDEsIC8qIGRpdHRvIGtlcm5lbCAgICAgICAgICAqLwotCQkJCWV4Y2x1ZGVfaHYgICAgIDogIDEsIC8qIGRpdHRvIGh5cGVydmlzb3IgICAgICAqLwotCQkJCWV4Y2x1ZGVfaWRsZSAgIDogIDEsIC8qIGRvbid0IGNvdW50IHdoZW4gaWRsZSAqLwotCQkJCW1tYXAgICAgICAgICAgIDogIDEsIC8qIGluY2x1ZGUgbW1hcCBkYXRhICAgICAqLwotCQkJCWNvbW0JICAgICAgIDogIDEsIC8qIGluY2x1ZGUgY29tbSBkYXRhICAgICAqLwotCQkJCWZyZXEgICAgICAgICAgIDogIDEsIC8qIHVzZSBmcmVxLCBub3QgcGVyaW9kICAqLwotCQkJCWluaGVyaXRfc3RhdCAgIDogIDEsIC8qIHBlciB0YXNrIGNvdW50cyAgICAgICAqLwotCQkJCWVuYWJsZV9vbl9leGVjIDogIDEsIC8qIG5leHQgZXhlYyBlbmFibGVzICAgICAqLwotCQkJCXRhc2sgICAgICAgICAgIDogIDEsIC8qIHRyYWNlIGZvcmsvZXhpdCAgICAgICAqLwotCQkJCXdhdGVybWFyayAgICAgIDogIDEsIC8qIHdha2V1cF93YXRlcm1hcmsgICAgICAqLwotCi0JCQkJX19yZXNlcnZlZF8xICAgOiA0OTsKLQotCXVuaW9uIHsKLQkJX191MzIJCXdha2V1cF9ldmVudHM7CSAgLyogd2FrZXVwIGV2ZXJ5IG4gZXZlbnRzICovCi0JCV9fdTMyCQl3YWtldXBfd2F0ZXJtYXJrOyAvKiBieXRlcyBiZWZvcmUgd2FrZXVwICAgKi8KLQl9OwotCV9fdTMyCQkJX19yZXNlcnZlZF8yOwotCi0JX191NjQJCQlfX3Jlc2VydmVkXzM7Ci19OwotCi0vKgotICogSW9jdGxzIHRoYXQgY2FuIGJlIGRvbmUgb24gYSBwZXJmIGNvdW50ZXIgZmQ6Ci0gKi8KLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19FTkFCTEUJCV9JTyAoJyQnLCAwKQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX0RJU0FCTEUJX0lPICgnJCcsIDEpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfUkVGUkVTSAlfSU8gKCckJywgMikKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19SRVNFVAkJX0lPICgnJCcsIDMpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfUEVSSU9ECQlfSU9XKCckJywgNCwgdTY0KQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1NFVF9PVVRQVVQJX0lPICgnJCcsIDUpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfU0VUX0ZJTFRFUglfSU9XKCckJywgNiwgY2hhciAqKQotCi1lbnVtIHBlcmZfY291bnRlcl9pb2NfZmxhZ3MgewotCVBFUkZfSU9DX0ZMQUdfR1JPVVAJCT0gMVUgPDwgMCwKLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgb2YgdGhlIHBhZ2UgdGhhdCBjYW4gYmUgbWFwcGVkIHZpYSBtbWFwCi0gKi8KLXN0cnVjdCBwZXJmX2NvdW50ZXJfbW1hcF9wYWdlIHsKLQlfX3UzMgl2ZXJzaW9uOwkJLyogdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KLQlfX3UzMgljb21wYXRfdmVyc2lvbjsJCS8qIGxvd2VzdCB2ZXJzaW9uIHRoaXMgaXMgY29tcGF0IHdpdGggKi8KLQotCS8qCi0JICogQml0cyBuZWVkZWQgdG8gcmVhZCB0aGUgaHcgY291bnRlcnMgaW4gdXNlci1zcGFjZS4KLQkgKgotCSAqICAgdTMyIHNlcTsKLQkgKiAgIHM2NCBjb3VudDsKLQkgKgotCSAqICAgZG8gewotCSAqICAgICBzZXEgPSBwYy0+bG9jazsKLQkgKgotCSAqICAgICBiYXJyaWVyKCkKLQkgKiAgICAgaWYgKHBjLT5pbmRleCkgewotCSAqICAgICAgIGNvdW50ID0gcG1jX3JlYWQocGMtPmluZGV4IC0gMSk7Ci0JICogICAgICAgY291bnQgKz0gcGMtPm9mZnNldDsKLQkgKiAgICAgfSBlbHNlCi0JICogICAgICAgZ290byByZWd1bGFyX3JlYWQ7Ci0JICoKLQkgKiAgICAgYmFycmllcigpOwotCSAqICAgfSB3aGlsZSAocGMtPmxvY2sgIT0gc2VxKTsKLQkgKgotCSAqIE5PVEU6IGZvciBvYnZpb3VzIHJlYXNvbiB0aGlzIG9ubHkgd29ya3Mgb24gc2VsZi1tb25pdG9yaW5nCi0JICogICAgICAgcHJvY2Vzc2VzLgotCSAqLwotCV9fdTMyCWxvY2s7CQkJLyogc2VxbG9jayBmb3Igc3luY2hyb25pemF0aW9uICovCi0JX191MzIJaW5kZXg7CQkJLyogaGFyZHdhcmUgY291bnRlciBpZGVudGlmaWVyICovCi0JX19zNjQJb2Zmc2V0OwkJCS8qIGFkZCB0byBoYXJkd2FyZSBjb3VudGVyIHZhbHVlICovCi0JX191NjQJdGltZV9lbmFibGVkOwkJLyogdGltZSBjb3VudGVyIGFjdGl2ZSAqLwotCV9fdTY0CXRpbWVfcnVubmluZzsJCS8qIHRpbWUgY291bnRlciBvbiBjcHUgKi8KLQotCQkvKgotCQkgKiBIb2xlIGZvciBleHRlbnNpb24gb2YgdGhlIHNlbGYgbW9uaXRvciBjYXBhYmlsaXRpZXMKLQkJICovCi0KLQlfX3U2NAlfX3Jlc2VydmVkWzEyM107CS8qIGFsaWduIHRvIDFrICovCi0KLQkvKgotCSAqIENvbnRyb2wgZGF0YSBmb3IgdGhlIG1tYXAoKSBkYXRhIGJ1ZmZlci4KLQkgKgotCSAqIFVzZXItc3BhY2UgcmVhZGluZyB0aGUgQGRhdGFfaGVhZCB2YWx1ZSBzaG91bGQgaXNzdWUgYW4gcm1iKCksIG9uCi0JICogU01QIGNhcGFibGUgcGxhdGZvcm1zLCBhZnRlciByZWFkaW5nIHRoaXMgdmFsdWUgLS0gc2VlCi0JICogcGVyZl9jb3VudGVyX3dha2V1cCgpLgotCSAqCi0JICogV2hlbiB0aGUgbWFwcGluZyBpcyBQUk9UX1dSSVRFIHRoZSBAZGF0YV90YWlsIHZhbHVlIHNob3VsZCBiZQotCSAqIHdyaXR0ZW4gYnkgdXNlcnNwYWNlIHRvIHJlZmxlY3QgdGhlIGxhc3QgcmVhZCBkYXRhLiBJbiB0aGlzIGNhc2UKLQkgKiB0aGUga2VybmVsIHdpbGwgbm90IG92ZXItd3JpdGUgdW5yZWFkIGRhdGEuCi0JICovCi0JX191NjQgICBkYXRhX2hlYWQ7CQkvKiBoZWFkIGluIHRoZSBkYXRhIHNlY3Rpb24gKi8KLQlfX3U2NAlkYXRhX3RhaWw7CQkvKiB1c2VyLXNwYWNlIHdyaXR0ZW4gdGFpbCAqLwotfTsKLQotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfQ1BVTU9ERV9NQVNLCQkoMyA8PCAwKQotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfQ1BVTU9ERV9VTktOT1dOCQkoMCA8PCAwKQotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfS0VSTkVMCQkJKDEgPDwgMCkKLSNkZWZpbmUgUEVSRl9FVkVOVF9NSVNDX1VTRVIJCQkoMiA8PCAwKQotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfSFlQRVJWSVNPUgkJKDMgPDwgMCkKLQotc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIHsKLQlfX3UzMgl0eXBlOwotCV9fdTE2CW1pc2M7Ci0JX191MTYJc2l6ZTsKLX07Ci0KLWVudW0gcGVyZl9ldmVudF90eXBlIHsKLQotCS8qCi0JICogVGhlIE1NQVAgZXZlbnRzIHJlY29yZCB0aGUgUFJPVF9FWEVDIG1hcHBpbmdzIHNvIHRoYXQgd2UgY2FuCi0JICogY29ycmVsYXRlIHVzZXJzcGFjZSBJUHMgdG8gY29kZS4gVGhleSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgotCSAqCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCi0JICoJdTMyCQkJCXBpZCwgdGlkOwotCSAqCXU2NAkJCQlhZGRyOwotCSAqCXU2NAkJCQlsZW47Ci0JICoJdTY0CQkJCXBnb2ZmOwotCSAqCWNoYXIJCQkJZmlsZW5hbWVbXTsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfTU1BUAkJCT0gMSwKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXU2NAkJCQlpZDsKLQkgKgl1NjQJCQkJbG9zdDsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfTE9TVAkJCT0gMiwKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCi0JICoJdTMyCQkJCXBpZCwgdGlkOwotCSAqCWNoYXIJCQkJY29tbVtdOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9DT01NCQkJPSAzLAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTMyCQkJCXBpZCwgcHBpZDsKLQkgKgl1MzIJCQkJdGlkLCBwdGlkOwotCSAqCXU2NAkJCQl0aW1lOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9FWElUCQkJPSA0LAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTY0CQkJCXRpbWU7Ci0JICoJdTY0CQkJCWlkOwotCSAqCXU2NAkJCQlzdHJlYW1faWQ7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX1RIUk9UVExFCQk9IDUsCi0JUEVSRl9FVkVOVF9VTlRIUk9UVExFCQk9IDYsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgl1MzIJCQkJcGlkLCBwcGlkOwotCSAqCXUzMgkJCQl0aWQsIHB0aWQ7Ci0JICoJdTY0CQkJCXRpbWU7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX0ZPUksJCQk9IDcsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgl1MzIJCQkJcGlkLCB0aWQ7Ci0JICoKLQkgKglzdHJ1Y3QgcmVhZF9mb3JtYXQJCXZhbHVlczsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfUkVBRAkJCT0gOCwKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCi0JICoJeyB1NjQJCQlpcDsJICB9ICYmIFBFUkZfU0FNUExFX0lQCi0JICoJeyB1MzIJCQlwaWQsIHRpZDsgfSAmJiBQRVJGX1NBTVBMRV9USUQKLQkgKgl7IHU2NAkJCXRpbWU7ICAgICB9ICYmIFBFUkZfU0FNUExFX1RJTUUKLQkgKgl7IHU2NAkJCWFkZHI7ICAgICB9ICYmIFBFUkZfU0FNUExFX0FERFIKLQkgKgl7IHU2NAkJCWlkOwkgIH0gJiYgUEVSRl9TQU1QTEVfSUQKLQkgKgl7IHU2NAkJCXN0cmVhbV9pZDt9ICYmIFBFUkZfU0FNUExFX1NUUkVBTV9JRAotCSAqCXsgdTMyCQkJY3B1LCByZXM7IH0gJiYgUEVSRl9TQU1QTEVfQ1BVCi0JICoJeyB1NjQJCQlwZXJpb2Q7ICAgfSAmJiBQRVJGX1NBTVBMRV9QRVJJT0QKLQkgKgotCSAqCXsgc3RydWN0IHJlYWRfZm9ybWF0CXZhbHVlczsJICB9ICYmIFBFUkZfU0FNUExFX1JFQUQKLQkgKgotCSAqCXsgdTY0CQkJbnIsCi0JICoJICB1NjQJCQlpcHNbbnJdOyAgfSAmJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4KLQkgKgotCSAqCSMKLQkgKgkjIFRoZSBSQVcgcmVjb3JkIGJlbG93IGlzIG9wYXF1ZSBkYXRhIHdydCB0aGUgQUJJCi0JICoJIwotCSAqCSMgVGhhdCBpcywgdGhlIEFCSSBkb2Vzbid0IG1ha2UgYW55IHByb21pc2VzIHdydCB0bwotCSAqCSMgdGhlIHN0YWJpbGl0eSBvZiBpdHMgY29udGVudCwgaXQgbWF5IHZhcnkgZGVwZW5kaW5nCi0JICoJIyBvbiBldmVudCwgaGFyZHdhcmUsIGtlcm5lbCB2ZXJzaW9uIGFuZCBwaGFzZSBvZgotCSAqCSMgdGhlIG1vb24uCi0JICoJIwotCSAqCSMgSW4gb3RoZXIgd29yZHMsIFBFUkZfU0FNUExFX1JBVyBjb250ZW50cyBhcmUgbm90IGFuIEFCSS4KLQkgKgkjCi0JICoKLQkgKgl7IHUzMgkJCXNpemU7Ci0JICoJICBjaGFyICAgICAgICAgICAgICAgICAgZGF0YVtzaXplXTt9JiYgUEVSRl9TQU1QTEVfUkFXCi0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX1NBTVBMRQkJPSA5LAotCi0JUEVSRl9FVkVOVF9NQVgsCQkJLyogbm9uLUFCSSAqLwotfTsKLQotZW51bSBwZXJmX2NhbGxjaGFpbl9jb250ZXh0IHsKLQlQRVJGX0NPTlRFWFRfSFYJCQk9IChfX3U2NCktMzIsCi0JUEVSRl9DT05URVhUX0tFUk5FTAkJPSAoX191NjQpLTEyOCwKLQlQRVJGX0NPTlRFWFRfVVNFUgkJPSAoX191NjQpLTUxMiwKLQotCVBFUkZfQ09OVEVYVF9HVUVTVAkJPSAoX191NjQpLTIwNDgsCi0JUEVSRl9DT05URVhUX0dVRVNUX0tFUk5FTAk9IChfX3U2NCktMjE3NiwKLQlQRVJGX0NPTlRFWFRfR1VFU1RfVVNFUgkJPSAoX191NjQpLTI1NjAsCi0KLQlQRVJGX0NPTlRFWFRfTUFYCQk9IChfX3U2NCktNDA5NSwKLX07Ci0KLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQCQkoMVUgPDwgMCkKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkJKDFVIDw8IDEpCi0KLS8qCi0gKiBJbiBjYXNlIHNvbWUgYXBwIHN0aWxsIHJlZmVyZW5jZXMgdGhlIG9sZCBzeW1ib2xzOgotICovCi0KLSNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkJX19OUl9wZXJmX2V2ZW50X29wZW4KLQotI2RlZmluZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRElTQUJMRQlQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUKLSNkZWZpbmUgUFJfVEFTS19QRVJGX0NPVU5URVJTX0VOQUJMRQlQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQotCi0jZW5kaWYgLyogX0xJTlVYX1BFUkZfQ09VTlRFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDQzYWRiZDcuLmM2NmIzNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0xOCwxMCArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAotI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+Ci0jZW5kaWYKLQogLyoKICAqIFVzZXItc3BhY2UgQUJJIGJpdHM6CiAgKi8KQEAgLTIxNSwxNyArMjExLDExIEBACiAJCV9fdTMyCQl3YWtldXBfd2F0ZXJtYXJrOyAvKiBieXRlcyBiZWZvcmUgd2FrZXVwICAgKi8KIAl9OwogCi0JdW5pb24gewotCQlzdHJ1Y3QgeyAvKiBIYXJkd2FyZSBicmVha3BvaW50IGluZm8gKi8KLQkJCV9fdTY0CQlicF9hZGRyOwotCQkJX191MzIJCWJwX3R5cGU7Ci0JCQlfX3UzMgkJYnBfbGVuOwotCQl9OwotCX07Ci0KIAlfX3UzMgkJCV9fcmVzZXJ2ZWRfMjsKIAotCV9fdTY0CQkJX19yZXNlcnZlZF8zOworCV9fdTY0CQkJYnBfYWRkcjsKKwlfX3UzMgkJCWJwX3R5cGU7CisJX191MzIJCQlicF9sZW47CiB9OwogCiAvKgpAQCAtNDUxLDYgKzQ0MSwxMCBAQAogIyBpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgpAQCAtNTY1LDEwICs1NTksMTIgQEAKIAl2b2lkICgqZnVuYykoc3RydWN0IHBlcmZfcGVuZGluZ19lbnRyeSAqKTsKIH07CiAKLXR5cGVkZWYgdm9pZCAoKnBlcmZfY2FsbGJhY2tfdCkoc3RydWN0IHBlcmZfZXZlbnQgKiwgdm9pZCAqKTsKLQogc3RydWN0IHBlcmZfc2FtcGxlX2RhdGE7CiAKK3R5cGVkZWYgdm9pZCAoKnBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90KShzdHJ1Y3QgcGVyZl9ldmVudCAqLCBpbnQsCisJCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICosCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogLyoqCiAgKiBzdHJ1Y3QgcGVyZl9ldmVudCAtIHBlcmZvcm1hbmNlIGV2ZW50IGtlcm5lbCByZXByZXNlbnRhdGlvbjoKICAqLwpAQCAtNjYwLDE4ICs2NTYsMTIgQEAKIAlzdHJ1Y3QgcGlkX25hbWVzcGFjZQkJKm5zOwogCXU2NAkJCQlpZDsKIAotCXZvaWQgKCpvdmVyZmxvd19oYW5kbGVyKShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCi0JCQlpbnQgbm1pLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKLQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwlwZXJmX292ZXJmbG93X2hhbmRsZXJfdAkJb3ZlcmZsb3dfaGFuZGxlcjsKIAogI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCiAJc3RydWN0IGV2ZW50X2ZpbHRlcgkJKmZpbHRlcjsKICNlbmRpZgogCi0JcGVyZl9jYWxsYmFja190CQkJY2FsbGJhY2s7Ci0KLQlwZXJmX2NhbGxiYWNrX3QJCQlldmVudF9jYWxsYmFjazsKLQogI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogfTsKIApAQCAtNjg1LDcgKzY3NSw3IEBACiAJICogUHJvdGVjdCB0aGUgc3RhdGVzIG9mIHRoZSBldmVudHMgaW4gdGhlIGxpc3QsCiAJICogbnJfYWN0aXZlLCBhbmQgdGhlIGxpc3Q6CiAJICovCi0Jc3BpbmxvY2tfdAkJCWxvY2s7CisJcmF3X3NwaW5sb2NrX3QJCQlsb2NrOwogCS8qCiAJICogUHJvdGVjdCB0aGUgbGlzdCBvZiBldmVudHMuICBMb2NraW5nIGVpdGhlciBtdXRleCBvciBsb2NrCiAJICogaXMgc3VmZmljaWVudCB0byBlbnN1cmUgdGhlIGxpc3QgZG9lc24ndCBjaGFuZ2U7IHRvIGNoYW5nZQpAQCAtNzgxLDcgKzc3MSw3IEBACiBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAogCQkJCWludCBjcHUsCiAJCQkJcGlkX3QgcGlkLAotCQkJCXBlcmZfY2FsbGJhY2tfdCBjYWxsYmFjayk7CisJCQkJcGVyZl9vdmVyZmxvd19oYW5kbGVyX3QgY2FsbGJhY2spOwogZXh0ZXJuIHU2NCBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCSB1NjQgKmVuYWJsZWQsIHU2NCAqcnVubmluZyk7CiAKQEAgLTg3Niw2ICs4NjYsOCBAQAogCQkJICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwogZXh0ZXJuIGludCBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkCiBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJeyB9CkBAIC05MDYsNyArODk4LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCkJCQkJeyB9CiBzdGF0aWMgaW5saW5lIGludCAgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKSAgeyByZXR1cm4gLTE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KQkJeyB9Ci0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQkJeyB9CiAjZW5kaWYKIAogI2RlZmluZSBwZXJmX291dHB1dF9wdXQoaGFuZGxlLCB4KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggNDU5MjZkNy4uODIyN2Y3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtODEsNyArODEsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcHJpb19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OwogI2lmZGVmIENPTkZJR19ERUJVR19QSV9MSVNUCi0Jc3BpbmxvY2tfdCAqbG9jazsKKwlyYXdfc3BpbmxvY2tfdCAqcmF3bG9jazsKKwlzcGlubG9ja190ICpzcGlubG9jazsKICNlbmRpZgogfTsKIApAQCAtOTEsOSArOTIsMTEgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfREVCVUdfUElfTElTVAotIyBkZWZpbmUgUExJU1RfSEVBRF9MT0NLX0lOSVQoX2xvY2spCS5sb2NrID0gX2xvY2sKKyMgZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQkJLnNwaW5sb2NrID0gX2xvY2sKKyMgZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUX1JBVyhfbG9jaykJLnJhd2xvY2sgPSBfbG9jawogI2Vsc2UKICMgZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQorIyBkZWZpbmUgUExJU1RfSEVBRF9MT0NLX0lOSVRfUkFXKF9sb2NrKQogI2VuZGlmCiAKICNkZWZpbmUgX1BMSVNUX0hFQURfSU5JVChoZWFkKQkJCQlcCkBAIC0xMDcsMTEgKzExMCwyMiBAQAogICovCiAjZGVmaW5lIFBMSVNUX0hFQURfSU5JVChoZWFkLCBfbG9jaykJCQlcCiB7CQkJCQkJCVwKLSAgICAgICAgX1BMSVNUX0hFQURfSU5JVChoZWFkKSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9QTElTVF9IRUFEX0lOSVQoaGVhZCksCQkJCVwKIAlQTElTVF9IRUFEX0xPQ0tfSU5JVCgmKF9sb2NrKSkJCQlcCiB9CiAKIC8qKgorICogUExJU1RfSEVBRF9JTklUX1JBVyAtIHN0YXRpYyBzdHJ1Y3QgcGxpc3RfaGVhZCBpbml0aWFsaXplcgorICogQGhlYWQ6CXN0cnVjdCBwbGlzdF9oZWFkIHZhcmlhYmxlIG5hbWUKKyAqIEBfbG9jazoJbG9jayB0byBpbml0aWFsaXplIGZvciB0aGlzIGxpc3QKKyAqLworI2RlZmluZSBQTElTVF9IRUFEX0lOSVRfUkFXKGhlYWQsIF9sb2NrKQkJXAorewkJCQkJCQlcCisJX1BMSVNUX0hFQURfSU5JVChoZWFkKSwJCQkJXAorCVBMSVNUX0hFQURfTE9DS19JTklUX1JBVygmKF9sb2NrKSkJCVwKK30KKworLyoqCiAgKiBQTElTVF9OT0RFX0lOSVQgLSBzdGF0aWMgc3RydWN0IHBsaXN0X25vZGUgaW5pdGlhbGl6ZXIKICAqIEBub2RlOglzdHJ1Y3QgcGxpc3Rfbm9kZSB2YXJpYWJsZSBuYW1lCiAgKiBAX19wcmlvOglpbml0aWFsIG5vZGUgcHJpb3JpdHkKQEAgLTExOSwxMyArMTMzLDEzIEBACiAjZGVmaW5lIFBMSVNUX05PREVfSU5JVChub2RlLCBfX3ByaW8pCQkJXAogewkJCQkJCQlcCiAJLnByaW8gID0gKF9fcHJpbyksCQkJCVwKLQkucGxpc3QgPSB7IF9QTElTVF9IRUFEX0lOSVQoKG5vZGUpLnBsaXN0KSB9LCAJXAorCS5wbGlzdCA9IHsgX1BMSVNUX0hFQURfSU5JVCgobm9kZSkucGxpc3QpIH0sCVwKIH0KIAogLyoqCiAgKiBwbGlzdF9oZWFkX2luaXQgLSBkeW5hbWljIHN0cnVjdCBwbGlzdF9oZWFkIGluaXRpYWxpemVyCiAgKiBAaGVhZDoJJnN0cnVjdCBwbGlzdF9oZWFkIHBvaW50ZXIKLSAqIEBsb2NrOglsaXN0IHNwaW5sb2NrLCByZW1lbWJlcmVkIGZvciBkZWJ1Z2dpbmcKKyAqIEBsb2NrOglzcGlubG9jayBwcm90ZWN0aW5nIHRoZSBsaXN0IChkZWJ1Z2dpbmcpCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogcGxpc3RfaGVhZF9pbml0KHN0cnVjdCBwbGlzdF9oZWFkICpoZWFkLCBzcGlubG9ja190ICpsb2NrKQpAQCAtMTMzLDcgKzE0NywyNCBAQAogCUlOSVRfTElTVF9IRUFEKCZoZWFkLT5wcmlvX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZoZWFkLT5ub2RlX2xpc3QpOwogI2lmZGVmIENPTkZJR19ERUJVR19QSV9MSVNUCi0JaGVhZC0+bG9jayA9IGxvY2s7CisJaGVhZC0+c3BpbmxvY2sgPSBsb2NrOworCWhlYWQtPnJhd2xvY2sgPSBOVUxMOworI2VuZGlmCit9CisKKy8qKgorICogcGxpc3RfaGVhZF9pbml0X3JhdyAtIGR5bmFtaWMgc3RydWN0IHBsaXN0X2hlYWQgaW5pdGlhbGl6ZXIKKyAqIEBoZWFkOgkmc3RydWN0IHBsaXN0X2hlYWQgcG9pbnRlcgorICogQGxvY2s6CXJhd19zcGlubG9jayBwcm90ZWN0aW5nIHRoZSBsaXN0IChkZWJ1Z2dpbmcpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorcGxpc3RfaGVhZF9pbml0X3JhdyhzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZCwgcmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJSU5JVF9MSVNUX0hFQUQoJmhlYWQtPnByaW9fbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhlYWQtPm5vZGVfbGlzdCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX1BJX0xJU1QKKwloZWFkLT5yYXdsb2NrID0gbG9jazsKKwloZWFkLT5zcGlubG9jayA9IE5VTEw7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDBkNjU5MzQuLjE5OGI4ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTIxOSw3ICsyMTksNyBAQAogICogdG8gUkFNIGFuZCBoaWJlcm5hdGlvbi4KICAqLwogI2RlZmluZSBTSU1QTEVfREVWX1BNX09QUyhuYW1lLCBzdXNwZW5kX2ZuLCByZXN1bWVfZm4pIFwKLXN0cnVjdCBkZXZfcG1fb3BzIG5hbWUgPSB7IFwKK2NvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5hbWUgPSB7IFwKIAkuc3VzcGVuZCA9IHN1c3BlbmRfZm4sIFwKIAkucmVzdW1lID0gcmVzdW1lX2ZuLCBcCiAJLmZyZWV6ZSA9IHN1c3BlbmRfZm4sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG5wLmggYi9pbmNsdWRlL2xpbnV4L3BucC5oCmluZGV4IGZkZGZhZmEuLjdjNDE5M2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG5wLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbnAuaApAQCAtMzM0LDYgKzMzNCwxOSBAQAogI2RlZmluZSBwbnBfZGV2aWNlX2lzX3BucGJpb3MoZGV2KSAwCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QTlBBQ1BJCitleHRlcm4gc3RydWN0IHBucF9wcm90b2NvbCBwbnBhY3BpX3Byb3RvY29sOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhY3BpX2RldmljZSAqcG5wX2FjcGlfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+cHJvdG9jb2wgPT0gJnBucGFjcGlfcHJvdG9jb2wpCisJCXJldHVybiBkZXYtPmRhdGE7CisJcmV0dXJuIE5VTEw7Cit9CisjZWxzZQorI2RlZmluZSBwbnBfYWNwaV9kZXZpY2UoZGV2KSAwCisjZW5kaWYKKwogLyogc3RhdHVzICovCiAjZGVmaW5lIFBOUF9SRUFEWQkJMHgwMDAwCiAjZGVmaW5lIFBOUF9BVFRBQ0hFRAkJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCA3NDU2ZDdkLi41NmYyZDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTEwNSwxMiArMTA1LDcgQEAKIHsKIAlyZXR1cm4gY2hpbGQtPnJlYWxfcGFyZW50ICE9IGNoaWxkLT5wYXJlbnQ7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHRyYWNlX2xpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKLQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld19wYXJlbnQpCi17Ci0JaWYgKHVubGlrZWx5KGNoaWxkLT5wdHJhY2UpKQotCQlfX3B0cmFjZV9saW5rKGNoaWxkLCBuZXdfcGFyZW50KTsKLX0KKwogc3RhdGljIGlubGluZSB2b2lkIHB0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAlpZiAodW5saWtlbHkoY2hpbGQtPnB0cmFjZSkpCkBAIC0xNjksOSArMTY0LDkgQEAKIAlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPnB0cmFjZWQpOwogCWNoaWxkLT5wYXJlbnQgPSBjaGlsZC0+cmVhbF9wYXJlbnQ7CiAJY2hpbGQtPnB0cmFjZSA9IDA7Ci0JaWYgKHVubGlrZWx5KHB0cmFjZSkpIHsKKwlpZiAodW5saWtlbHkocHRyYWNlKSAmJiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpIHsKIAkJY2hpbGQtPnB0cmFjZSA9IGN1cnJlbnQtPnB0cmFjZTsKLQkJcHRyYWNlX2xpbmsoY2hpbGQsIGN1cnJlbnQtPnBhcmVudCk7CisJCV9fcHRyYWNlX2xpbmsoY2hpbGQsIGN1cnJlbnQtPnBhcmVudCk7CiAJfQogfQogCkBAIC0yNzgsNiArMjczLDE4IEBACiB9CiAjZW5kaWYJLyogYXJjaF9oYXNfYmxvY2tfc3RlcCAqLwogCisjaWZkZWYgQVJDSF9IQVNfVVNFUl9TSU5HTEVfU1RFUF9JTkZPCitleHRlcm4gdm9pZCB1c2VyX3NpbmdsZV9zdGVwX3NpZ2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHNpZ2luZm9fdCAqaW5mbyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVzZXJfc2luZ2xlX3N0ZXBfc2lnaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2lnaW5mb190ICppbmZvKQoreworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5zaV9zaWdubyA9IFNJR1RSQVA7Cit9CisjZW5kaWYKKwogI2lmbmRlZiBhcmNoX3B0cmFjZV9zdG9wX25lZWRlZAogLyoqCiAgKiBhcmNoX3B0cmFjZV9zdG9wX25lZWRlZCAtIERlY2lkZSB3aGV0aGVyIGFyY2hfcHRyYWNlX3N0b3AoKSBzaG91bGQgYmUgY2FsbGVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B3bV9iYWNrbGlnaHQuaCBiL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oCmluZGV4IDdhOTc1NGMuLjAxYjNkNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oCkBAIC0xMCw3ICsxMCw3IEBACiAJdW5zaWduZWQgaW50IGRmdF9icmlnaHRuZXNzOwogCXVuc2lnbmVkIGludCBwd21fcGVyaW9kX25zOwogCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0JaW50ICgqbm90aWZ5KShpbnQgYnJpZ2h0bmVzcyk7CisJaW50ICgqbm90aWZ5KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKTsKIAl2b2lkICgqZXhpdCkoc3RydWN0IGRldmljZSAqZGV2KTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGEuaAppbmRleCBlNzBlNjIxLi5hNjg2MWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCkBAIC0zMTUsOCArMzE1LDkgQEAKIAlpbnQgKCpjbGFpbV9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqLCBxc2l6ZV90KTsKIAkvKiByZWxlYXNlIHJzdmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCiAJdm9pZCAoKnJlbGVhc2VfcnN2KSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwotCS8qIGdldCByZXNlcnZlZCBxdW90YSBmb3IgZGVsYXllZCBhbGxvYyAqLwotCXFzaXplX3QgKCpnZXRfcmVzZXJ2ZWRfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKik7CisJLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jLCB2YWx1ZSByZXR1cm5lZCBpcyBtYW5hZ2VkIGJ5CisJICogcXVvdGEgY29kZSBvbmx5ICovCisJcXNpemVfdCAqKCpnZXRfcmVzZXJ2ZWRfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKik7CiB9OwogCiAvKiBPcGVyYXRpb25zIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9wcS5oCmluZGV4IGQ5MjQ4MGYuLjFjYmJkMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9wcS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9wcS5oCkBAIC03OCw2ICs3OCwyNSBAQAogLyogU2VsZWN0ZWQgYWxnb3JpdGhtICovCiBleHRlcm4gc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2NhbGw7CiAKKy8qIFZhcmlvdXMgcm91dGluZSBzZXRzICovCitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHgxOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9pbnR4MjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfaW50eDQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHg4OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9pbnR4MTY7CitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHgzMjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfbW14eDE7CitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X21teHgyOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9zc2UxeDE7CitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X3NzZTF4MjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfc3NlMngxOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9zc2UyeDI7CitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X3NzZTJ4NDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfYWx0aXZlYzE7CitleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2FsdGl2ZWMyOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9hbHRpdmVjNDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfYWx0aXZlYzg7CisKIC8qIEFsZ29yaXRobSBsaXN0ICovCiBleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzICogY29uc3QgcmFpZDZfYWxnb3NbXTsKIGludCByYWlkNl9zZWxlY3RfYWxnbyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggYzRiYTlhNy4uOTZjYzMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTEwMSw0ICsxMDEsOSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGludCByY3VfcHJlZW1wdF9kZXB0aCh2b2lkKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUSU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYzkzZWVlNS4uODA0NGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiBleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3JjdSh2b2lkKTsKIAorLyoKKyAqIERlZmluZWQgYXMgbWFjcm8gYXMgaXQgaXMgYSB2ZXJ5IGxvdyBsZXZlbCBoZWFkZXIKKyAqIGluY2x1ZGVkIGZyb20gYXJlYXMgdGhhdCBkb24ndCBldmVuIGtub3cgYWJvdXQgY3VycmVudAorICovCisjZGVmaW5lIHJjdV9wcmVlbXB0X2RlcHRoKCkgKGN1cnJlbnQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykKKwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCkKQEAgLTYzLDYgKzY5LDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9wcmVlbXB0X2RlcHRoKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfbG9ja19iaCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKaW5kZXggNDkwYzViMy4uMDMwZDkyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCkBAIC0zNSw2ICszNSw4IEBACiAjaWZuZGVmIF9fTElOVVhfUkVHVUxBVE9SX0NPTlNVTUVSX0hfCiAjZGVmaW5lIF9fTElOVVhfUkVHVUxBVE9SX0NPTlNVTUVSX0hfCiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKwogLyoKICAqIFJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZXMuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCmluZGV4IDg3ZjVmMTcuLjIzNGE4NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKQEAgLTQzLDE2ICs0MywyMCBAQAogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIC0gcmVndWxhdG9yIHN0YXRlIGR1cmluZyBsb3cgcG93ZXIgc3lzdGVtIHN0YXRlcwogICoKLSAqIFRoaXMgZGVzY3JpYmVzIGEgcmVndWxhdG9ycyBzdGF0ZSBkdXJpbmcgYSBzeXN0ZW0gd2lkZSBsb3cgcG93ZXIgc3RhdGUuCisgKiBUaGlzIGRlc2NyaWJlcyBhIHJlZ3VsYXRvcnMgc3RhdGUgZHVyaW5nIGEgc3lzdGVtIHdpZGUgbG93IHBvd2VyCisgKiBzdGF0ZS4gIE9uZSBvZiBlbmFibGVkIG9yIGRpc2FibGVkIG11c3QgYmUgc2V0IGZvciB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdG8gYmUgYXBwbGllZC4KICAqCiAgKiBAdVY6IE9wZXJhdGluZyB2b2x0YWdlIGR1cmluZyBzdXNwZW5kLgogICogQG1vZGU6IE9wZXJhdGluZyBtb2RlIGR1cmluZyBzdXNwZW5kLgogICogQGVuYWJsZWQ6IEVuYWJsZWQgZHVyaW5nIHN1c3BlbmQuCisgKiBAZGlzYWJsZWQ6IERpc2FibGVkIGR1cmluZyBzdXNwZW5kLgogICovCiBzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIHsKIAlpbnQgdVY7CS8qIHN1c3BlbmQgdm9sdGFnZSAqLwogCXVuc2lnbmVkIGludCBtb2RlOyAvKiBzdXNwZW5kIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZSAqLwogCWludCBlbmFibGVkOyAvKiBpcyByZWd1bGF0b3IgZW5hYmxlZCBpbiB0aGlzIHN1c3BlbmQgc3RhdGUgKi8KKwlpbnQgZGlzYWJsZWQ7IC8qIGlzIHRoZSByZWd1bGF0b3IgZGlzYmxlZCBpbiB0aGlzIHN1c3BlbmQgc3RhdGUgKi8KIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWF4ODY2MC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWF4ODY2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MzY3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYXg4NjYwLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIG1heDg2NjAuaCAgLS0gIFZvbHRhZ2UgcmVndWxhdGlvbiBmb3IgdGhlIE1heGltIDg2NjAvODY2MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXb2xmcmFtIFNhbmcsIFBlbmd1dHJvbml4IGUuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19MSU5VWF9SRUdVTEFUT1JfTUFYODY2MF9ICisjZGVmaW5lIF9fTElOVVhfUkVHVUxBVE9SX01BWDg2NjBfSAorCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworZW51bSB7CisJTUFYODY2MF9WMywKKwlNQVg4NjYwX1Y0LAorCU1BWDg2NjBfVjUsCisJTUFYODY2MF9WNiwKKwlNQVg4NjYwX1Y3LAorCU1BWDg2NjBfVl9FTkQsCit9OworCisvKioKKyAqIG1heDg2NjBfc3ViZGV2X2RhdGEgLSByZWd1bGF0b3Igc3ViZGV2IGRhdGEKKyAqIEBpZDogcmVndWxhdG9yIGlkCisgKiBAbmFtZTogcmVndWxhdG9yIG5hbWUKKyAqIEBwbGF0Zm9ybV9kYXRhOiByZWd1bGF0b3IgaW5pdCBkYXRhCisgKi8KK3N0cnVjdCBtYXg4NjYwX3N1YmRldl9kYXRhIHsKKwlpbnQJCQkJaWQ7CisJY2hhcgkJCQkqbmFtZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkqcGxhdGZvcm1fZGF0YTsKK307CisKKy8qKgorICogbWF4ODY2MF9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gZGF0YSBmb3IgbWF4ODY2MAorICogQG51bV9zdWJkZXZzOiBudW1iZXIgb2YgcmVndWxhdG9ycyB1c2VkCisgKiBAc3ViZGV2czogcG9pbnRlciB0byByZWd1bGF0b3JzIHVzZWQKKyAqIEBlbjM0X2lzX2hpZ2g6IGlmIEVOMzQgaXMgZHJpdmVuIGhpZ2gsIHJlZ3VsYXRvcnMgY2Fubm90IGJlIGVuLS9kaXNhYmxlZC4KKyAqLworc3RydWN0IG1heDg2NjBfcGxhdGZvcm1fZGF0YSB7CisJaW50IG51bV9zdWJkZXZzOworCXN0cnVjdCBtYXg4NjYwX3N1YmRldl9kYXRhICpzdWJkZXZzOworCXVuc2lnbmVkIGVuMzRfaXNfaGlnaDoxOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGEwNWI0YTIuLmM5NmMxODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTIwNTEsMjUgKzIwNTEsMTIgQEAKIGludCBzZWFyY2hfYnlfZW50cnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCiAJCQlzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIHN0cnVjdCByZWlzZXJmc19kaXJfZW50cnkgKmRlKTsKIHN0cnVjdCBkZW50cnkgKnJlaXNlcmZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqKTsKLS8qIHByb2Nmcy5jICovCiAKLSNpZiBkZWZpbmVkKCBDT05GSUdfUFJPQ19GUyApICYmIGRlZmluZWQoIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gKQotI2RlZmluZSBSRUlTRVJGU19QUk9DX0lORk8KLSNlbHNlCi0jdW5kZWYgUkVJU0VSRlNfUFJPQ19JTkZPCi0jZW5kaWYKLQorI2lmZGVmIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8KIGludCByZWlzZXJmc19wcm9jX2luZm9faW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCByZWlzZXJmc19wcm9jX2luZm9fZG9uZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcmVpc2VyZnNfcHJvY19yZWdpc3Rlcl9nbG9iYWwoY2hhciAqbmFtZSwKLQkJCQkJCSAgICAgcmVhZF9wcm9jX3QgKiBmdW5jKTsKLXZvaWQgcmVpc2VyZnNfcHJvY191bnJlZ2lzdGVyX2dsb2JhbChjb25zdCBjaGFyICpuYW1lKTsKIGludCByZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2luaXQodm9pZCk7CiBpbnQgcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKHZvaWQpOwotaW50IHJlaXNlcmZzX2dsb2JhbF92ZXJzaW9uX2luX3Byb2MoY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci0KLSNpZiBkZWZpbmVkKCBSRUlTRVJGU19QUk9DX0lORk8gKQogCiAjZGVmaW5lIFBST0NfRVhQKCBlICkgICBlCiAKQEAgLTIwODQsNiArMjA3MSwyNiBAQAogICAgIFBST0NfSU5GT19BREQoIHNiLCBmcmVlX2F0WyAoIGxldmVsICkgXSwgQl9GUkVFX1NQQUNFKCBiaCApICk7CVwKICAgICBQUk9DX0lORk9fQUREKCBzYiwgaXRlbXNfYXRbICggbGV2ZWwgKSBdLCBCX05SX0lURU1TKCBiaCApICkKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19wcm9jX2luZm9faW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19wcm9jX2luZm9fZG9uZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgUFJPQ19FWFAoIGUgKQogI2RlZmluZSBWT0lEX1YgKCAoIHZvaWQgKSAwICkKICNkZWZpbmUgUFJPQ19JTkZPX01BWCggc2IsIGZpZWxkLCB2YWx1ZSApIFZPSURfVgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAppbmRleCBjYjBiYTcwLi5iMDE5YWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaApAQCAtMjYsNiArMjYsOSBAQAogICovCiBzdHJ1Y3QgYW5vbl92bWEgewogCXNwaW5sb2NrX3QgbG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB2bWEgbGlzdCAqLworI2lmZGVmIENPTkZJR19LU00KKwlhdG9taWNfdCBrc21fcmVmY291bnQ7CisjZW5kaWYKIAkvKgogCSAqIE5PVEU6IHRoZSBMU0Igb2YgdGhlIGhlYWQubmV4dCBpcyBzZXQgYnkKIAkgKiBtbV90YWtlX2FsbF9sb2NrcygpIF9hZnRlcl8gdGFraW5nIHRoZSBhYm92ZSBsb2NrLiBTbyB0aGUKQEAgLTM4LDYgKzQxLDM0IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX01NVQorI2lmZGVmIENPTkZJR19LU00KK3N0YXRpYyBpbmxpbmUgdm9pZCBrc21fcmVmY291bnRfaW5pdChzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQoreworCWF0b21pY19zZXQoJmFub25fdm1hLT5rc21fcmVmY291bnQsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBrc21fcmVmY291bnQoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmFub25fdm1hLT5rc21fcmVmY291bnQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrc21fcmVmY291bnRfaW5pdChzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBrc21fcmVmY291bnQoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfS1NNICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICpwYWdlX2Fub25fdm1hKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICgoKHVuc2lnbmVkIGxvbmcpcGFnZS0+bWFwcGluZyAmIFBBR0VfTUFQUElOR19GTEFHUykgIT0KKwkJCQkJICAgIFBBR0VfTUFQUElOR19BTk9OKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcGFnZV9ybWFwcGluZyhwYWdlKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CkBAIC02Miw2ICs5Myw3IEBACiB2b2lkIGFub25fdm1hX3VubGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIGFub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBfX2Fub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwordm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqKTsKIAogLyoKICAqIHJtYXAgaW50ZXJmYWNlcyBjYWxsZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcgcHRlIG9mIHBhZ2UKQEAgLTgxLDYgKzExMyw5IEBACiAgKi8KIGludCBwYWdlX3JlZmVyZW5jZWQoc3RydWN0IHBhZ2UgKiwgaW50IGlzX2xvY2tlZCwKIAkJCXN0cnVjdCBtZW1fY2dyb3VwICpjbnQsIHVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzKTsKK2ludCBwYWdlX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50ICptYXBjb3VudCwgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpOworCiBlbnVtIHR0dV9mbGFncyB7CiAJVFRVX1VOTUFQID0gMCwJCQkvKiB1bm1hcCBtb2RlICovCiAJVFRVX01JR1JBVElPTiA9IDEsCQkvKiBtaWdyYXRpb24gbW9kZSAqLwpAQCAtOTQsNiArMTI5LDggQEAKICNkZWZpbmUgVFRVX0FDVElPTih4KSAoKHgpICYgVFRVX0FDVElPTl9NQVNLKQogCiBpbnQgdHJ5X3RvX3VubWFwKHN0cnVjdCBwYWdlICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTsKK2ludCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAorCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7CiAKIC8qCiAgKiBDYWxsZWQgZnJvbSBtbS9maWxlbWFwX3hpcC5jIHRvIHVubWFwIGVtcHR5IHplcm8gcGFnZQpAQCAtMTI3LDYgKzE2NCwxMiBAQAogdm9pZCBwYWdlX3VubG9ja19hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKTsKIGludCBwYWdlX21hcHBlZF9pbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAorLyoKKyAqIENhbGxlZCBieSBtaWdyYXRlLmMgdG8gcmVtb3ZlIG1pZ3JhdGlvbiBwdGVzLCBidXQgbWlnaHQgYmUgdXNlZCBtb3JlIGxhdGVyLgorICovCitpbnQgcm1hcF93YWxrKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgKCpybWFwX29uZSkoc3RydWN0IHBhZ2UgKiwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiksIHZvaWQgKmFyZyk7CisKICNlbHNlCS8qICFDT05GSUdfTU1VICovCiAKICNkZWZpbmUgYW5vbl92bWFfaW5pdCgpCQlkbyB7fSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRtdXRleC5oIGIvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKaW5kZXggZjE5YjAwYi4uMjgxZDhmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIEBvd25lcjoJdGhlIG11dGV4IG93bmVyCiAgKi8KIHN0cnVjdCBydF9tdXRleCB7Ci0Jc3BpbmxvY2tfdAkJd2FpdF9sb2NrOworCXJhd19zcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IHBsaXN0X2hlYWQJd2FpdF9saXN0OwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqb3duZXI7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMKQEAgLTYzLDggKzYzLDggQEAKICNlbmRpZgogCiAjZGVmaW5lIF9fUlRfTVVURVhfSU5JVElBTElaRVIobXV0ZXhuYW1lKSBcCi0JeyAud2FpdF9sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQobXV0ZXhuYW1lLndhaXRfbG9jaykgXAotCSwgLndhaXRfbGlzdCA9IFBMSVNUX0hFQURfSU5JVChtdXRleG5hbWUud2FpdF9saXN0LCBtdXRleG5hbWUud2FpdF9sb2NrKSBcCisJeyAud2FpdF9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKG11dGV4bmFtZS53YWl0X2xvY2spIFwKKwksIC53YWl0X2xpc3QgPSBQTElTVF9IRUFEX0lOSVRfUkFXKG11dGV4bmFtZS53YWl0X2xpc3QsIG11dGV4bmFtZS53YWl0X2xvY2spIFwKIAksIC5vd25lciA9IE5VTEwgXAogCV9fREVCVUdfUlRfTVVURVhfSU5JVElBTElaRVIobXV0ZXhuYW1lKX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMDUzMzBmYy4uOTU5MDM2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zNjIsNiArMzYyLDggQEAKICNkZWZpbmUgUlRBWF9GRUFUVVJFUyBSVEFYX0ZFQVRVUkVTCiAJUlRBWF9SVE9fTUlOLAogI2RlZmluZSBSVEFYX1JUT19NSU4gUlRBWF9SVE9fTUlOCisJUlRBWF9JTklUUldORCwKKyNkZWZpbmUgUlRBWF9JTklUUldORCBSVEFYX0lOSVRSV05ECiAJX19SVEFYX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yd2xvY2suaCBiL2luY2x1ZGUvbGludXgvcndsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlMGIwMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcndsb2NrLmgKQEAgLTAsMCArMSwxMjUgQEAKKyNpZm5kZWYgX19MSU5VWF9SV0xPQ0tfSAorI2RlZmluZSBfX0xJTlVYX1JXTE9DS19ICisKKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19ICisjIGVycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisjZW5kaWYKKworLyoKKyAqIHJ3bG9jayByZWxhdGVkIG1ldGhvZHMKKyAqCisgKiBzcGxpdCBvdXQgZnJvbSBzcGlubG9jay5oCisgKgorICogcG9ydGlvbnMgQ29weXJpZ2h0IDIwMDUsIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KKyAqLworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisgIGV4dGVybiB2b2lkIF9fcndsb2NrX2luaXQocndsb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworIyBkZWZpbmUgcndsb2NrX2luaXQobG9jaykJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJXAorCV9fcndsb2NrX2luaXQoKGxvY2spLCAjbG9jaywgJl9fa2V5KTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIHJ3bG9ja19pbml0KGxvY2spCQkJCQlcCisJZG8geyAqKGxvY2spID0gX19SV19MT0NLX1VOTE9DS0VEKGxvY2spOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyBleHRlcm4gdm9pZCBkb19yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgZG9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgZG9fcmF3X3JlYWRfbG9jayhsb2NrKQorIGV4dGVybiBpbnQgZG9fcmF3X3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CisgZXh0ZXJuIHZvaWQgZG9fcmF3X3JlYWRfdW5sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyBleHRlcm4gdm9pZCBkb19yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jayk7CisjZGVmaW5lIGRvX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBkb19yYXdfd3JpdGVfbG9jayhsb2NrKQorIGV4dGVybiBpbnQgZG9fcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spOworIGV4dGVybiB2b2lkIGRvX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spOworI2Vsc2UKKyMgZGVmaW5lIGRvX3Jhd19yZWFkX2xvY2socndsb2NrKQlhcmNoX3JlYWRfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorIyBkZWZpbmUgZG9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgXAorCQlhcmNoX3JlYWRfbG9ja19mbGFncygmKGxvY2spLT5yYXdfbG9jaywgKihmbGFncykpCisjIGRlZmluZSBkb19yYXdfcmVhZF90cnlsb2NrKHJ3bG9jaykJYXJjaF9yZWFkX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyMgZGVmaW5lIGRvX3Jhd19yZWFkX3VubG9jayhyd2xvY2spCWFyY2hfcmVhZF91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyMgZGVmaW5lIGRvX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykJYXJjaF93cml0ZV9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjIGRlZmluZSBkb19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgXAorCQlhcmNoX3dyaXRlX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQorIyBkZWZpbmUgZG9fcmF3X3dyaXRlX3RyeWxvY2socndsb2NrKQlhcmNoX3dyaXRlX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyMgZGVmaW5lIGRvX3Jhd193cml0ZV91bmxvY2socndsb2NrKQlhcmNoX3dyaXRlX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorI2VuZGlmCisKKyNkZWZpbmUgcmVhZF9jYW5fbG9jayhyd2xvY2spCQlhcmNoX3JlYWRfY2FuX2xvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgd3JpdGVfY2FuX2xvY2socndsb2NrKQkJYXJjaF93cml0ZV9jYW5fbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorCisvKgorICogRGVmaW5lIHRoZSB2YXJpb3VzIHJ3X2xvY2sgbWV0aG9kcy4gIE5vdGUgd2UgZGVmaW5lIHRoZXNlCisgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgQ09ORklHX1NNUCBvciBDT05GSUdfUFJFRU1QVCBhcmUgc2V0LiBUaGUgdmFyaW91cworICogbWV0aG9kcyBhcmUgZGVmaW5lZCBhcyBub3BzIGluIHRoZSBjYXNlIHRoZXkgYXJlIG5vdCByZXF1aXJlZC4KKyAqLworI2RlZmluZSByZWFkX3RyeWxvY2sobG9jaykJX19jb25kX2xvY2sobG9jaywgX3Jhd19yZWFkX3RyeWxvY2sobG9jaykpCisjZGVmaW5lIHdyaXRlX3RyeWxvY2sobG9jaykJX19jb25kX2xvY2sobG9jaywgX3Jhd193cml0ZV90cnlsb2NrKGxvY2spKQorCisjZGVmaW5lIHdyaXRlX2xvY2sobG9jaykJX3Jhd193cml0ZV9sb2NrKGxvY2spCisjZGVmaW5lIHJlYWRfbG9jayhsb2NrKQkJX3Jhd19yZWFkX2xvY2sobG9jaykKKworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCisKKyNkZWZpbmUgcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJXAorCWRvIHsJCQkJCQlcCisJCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CVwKKwkJZmxhZ3MgPSBfcmF3X3JlYWRfbG9ja19pcnFzYXZlKGxvY2spOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJCVwKKwlkbyB7CQkJCQkJXAorCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCisJCWZsYWdzID0gX3Jhd193cml0ZV9sb2NrX2lycXNhdmUobG9jayk7CVwKKwl9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIHJlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJCVwKKwlkbyB7CQkJCQkJXAorCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCisJCV9yYXdfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJCVwKKwlkbyB7CQkJCQkJXAorCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCisJCV9yYXdfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsJXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZGVmaW5lIHJlYWRfbG9ja19pcnEobG9jaykJCV9yYXdfcmVhZF9sb2NrX2lycShsb2NrKQorI2RlZmluZSByZWFkX2xvY2tfYmgobG9jaykJCV9yYXdfcmVhZF9sb2NrX2JoKGxvY2spCisjZGVmaW5lIHdyaXRlX2xvY2tfaXJxKGxvY2spCQlfcmF3X3dyaXRlX2xvY2tfaXJxKGxvY2spCisjZGVmaW5lIHdyaXRlX2xvY2tfYmgobG9jaykJCV9yYXdfd3JpdGVfbG9ja19iaChsb2NrKQorI2RlZmluZSByZWFkX3VubG9jayhsb2NrKQkJX3Jhd19yZWFkX3VubG9jayhsb2NrKQorI2RlZmluZSB3cml0ZV91bmxvY2sobG9jaykJCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spCisjZGVmaW5lIHJlYWRfdW5sb2NrX2lycShsb2NrKQkJX3Jhd19yZWFkX3VubG9ja19pcnEobG9jaykKKyNkZWZpbmUgd3JpdGVfdW5sb2NrX2lycShsb2NrKQkJX3Jhd193cml0ZV91bmxvY2tfaXJxKGxvY2spCisKKyNkZWZpbmUgcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykJCQlcCisJZG8gewkJCQkJCQlcCisJCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CQlcCisJCV9yYXdfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSByZWFkX3VubG9ja19iaChsb2NrKQkJX3Jhd19yZWFkX3VubG9ja19iaChsb2NrKQorCisjZGVmaW5lIHdyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQkJXAorCWRvIHsJCQkJCQlcCisJCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CVwKKwkJX3Jhd193cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSB3cml0ZV91bmxvY2tfYmgobG9jaykJCV9yYXdfd3JpdGVfdW5sb2NrX2JoKGxvY2spCisKKyNkZWZpbmUgd3JpdGVfdHJ5bG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBcCisoeyBcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCisJd3JpdGVfdHJ5bG9jayhsb2NrKSA/IFwKKwkxIDogKHsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAwOyB9KTsgXAorfSkKKworI2VuZGlmIC8qIF9fTElOVVhfUldMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcndsb2NrX2FwaV9zbXAuaCBiL2luY2x1ZGUvbGludXgvcndsb2NrX2FwaV9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzlmMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yd2xvY2tfYXBpX3NtcC5oCkBAIC0wLDAgKzEsMjgyIEBACisjaWZuZGVmIF9fTElOVVhfUldMT0NLX0FQSV9TTVBfSAorI2RlZmluZSBfX0xJTlVYX1JXTE9DS19BUElfU01QX0gKKworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0FQSV9TTVBfSAorIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2VuZGlmCisKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3J3bG9ja19hcGlfc21wLmgKKyAqCisgKiBzcGlubG9jayBBUEkgZGVjbGFyYXRpb25zIG9uIFNNUCAoYW5kIGRlYnVnKQorICogKGltcGxlbWVudGVkIGluIGtlcm5lbC9zcGlubG9jay5jKQorICoKKyAqIHBvcnRpb25zIENvcHlyaWdodCAyMDA1LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogUmVsZWFzZWQgdW5kZXIgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCisgKi8KKwordm9pZCBfX2xvY2tmdW5jIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQkJX19hY3F1aXJlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfcmVhZF9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQlfX2FjcXVpcmVzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfbG9ja19iaChyd2xvY2tfdCAqbG9jaykJX19hY3F1aXJlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3JlYWRfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3Jhd193cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJX19hY3F1aXJlcyhsb2NrKTsKK3Vuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfcmF3X3JlYWRfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQorCQkJCQkJCV9fYWNxdWlyZXMobG9jayk7Cit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3Jhd193cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCisJCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKK2ludCBfX2xvY2tmdW5jIF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKK2ludCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3JlYWRfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYworX3Jhd19yZWFkX3VubG9ja19pcnFyZXN0b3JlKHJ3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCQkJCV9fcmVsZWFzZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMKK19yYXdfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJCQkJX19yZWxlYXNlcyhsb2NrKTsKKworI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrKGxvY2spIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKGxvY2spIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkgKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfYmgobG9jaykgX19yYXdfcmVhZF9sb2NrX2JoKGxvY2spCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSAorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfYmgobG9jaykgX19yYXdfd3JpdGVfbG9ja19iaChsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfaXJxKGxvY2spIF9fcmF3X3JlYWRfbG9ja19pcnEobG9jaykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfaXJxKGxvY2spIF9fcmF3X3dyaXRlX2xvY2tfaXJxKGxvY2spCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfaXJxc2F2ZShsb2NrKSBfX3Jhd19yZWFkX2xvY2tfaXJxc2F2ZShsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrKSBfX3Jhd193cml0ZV9sb2NrX2lycXNhdmUobG9jaykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sKKyNkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgX19yYXdfcmVhZF90cnlsb2NrKGxvY2spCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSworI2RlZmluZSBfcmF3X3dyaXRlX3RyeWxvY2sobG9jaykgX19yYXdfd3JpdGVfdHJ5bG9jayhsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2sobG9jaykgX19yYXdfcmVhZF91bmxvY2sobG9jaykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sKKyNkZWZpbmUgX3Jhd193cml0ZV91bmxvY2sobG9jaykgX19yYXdfd3JpdGVfdW5sb2NrKGxvY2spCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkgKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9ja19iaChsb2NrKSBfX3Jhd19yZWFkX3VubG9ja19iaChsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSAorI2RlZmluZSBfcmF3X3dyaXRlX3VubG9ja19iaChsb2NrKSBfX3Jhd193cml0ZV91bmxvY2tfYmgobG9jaykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9ja19pcnEobG9jaykgX19yYXdfcmVhZF91bmxvY2tfaXJxKGxvY2spCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUQorI2RlZmluZSBfcmF3X3dyaXRlX3VubG9ja19pcnEobG9jaykgX19yYXdfd3JpdGVfdW5sb2NrX2lycShsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBcCisJX19yYXdfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRQorI2RlZmluZSBfcmF3X3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBcCisJX19yYXdfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmIChkb19yYXdfcmVhZF90cnlsb2NrKGxvY2spKSB7CisJCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKKwkJcmV0dXJuIDE7CisJfQorCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKGRvX3Jhd193cml0ZV90cnlsb2NrKGxvY2spKSB7CisJCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7CisJCXJldHVybiAxOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOworfQorCisvKgorICogSWYgbG9ja2RlcCBpcyBlbmFibGVkIHRoZW4gd2UgdXNlIHRoZSBub24tcHJlZW1wdGlvbiBzcGluLW9wcworICogZXZlbiBvbiBDT05GSUdfUFJFRU1QVCwgYmVjYXVzZSBsb2NrZGVwIGFzc3VtZXMgdGhhdCBpbnRlcnJ1cHRzIGFyZQorICogbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZSAod2hpY2ggdGhlIHByZWVtcHQtc3Bpbi1vcHMgZG8pOgorICovCisjaWYgIWRlZmluZWQoQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLX0FMTE9DKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfcmVhZF90cnlsb2NrLCBkb19yYXdfcmVhZF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X3JlYWRfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEX0ZMQUdTKGxvY2ssIGRvX3Jhd19yZWFkX3RyeWxvY2ssIGRvX3Jhd19yZWFkX2xvY2ssCisJCQkgICAgIGRvX3Jhd19yZWFkX2xvY2tfZmxhZ3MsICZmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfcmVhZF90cnlsb2NrLCBkb19yYXdfcmVhZF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9ja19iaChyd2xvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEKGxvY2ssIGRvX3Jhd19yZWFkX3RyeWxvY2ssIGRvX3Jhd19yZWFkX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfd3JpdGVfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBkb19yYXdfd3JpdGVfdHJ5bG9jaywgZG9fcmF3X3dyaXRlX2xvY2ssCisJCQkgICAgIGRvX3Jhd193cml0ZV9sb2NrX2ZsYWdzLCAmZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfd3JpdGVfdHJ5bG9jaywgZG9fcmF3X3dyaXRlX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9ja19iaChyd2xvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfd3JpdGVfdHJ5bG9jaywgZG9fcmF3X3dyaXRlX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEKGxvY2ssIGRvX3Jhd193cml0ZV90cnlsb2NrLCBkb19yYXdfd3JpdGVfbG9jayk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJZG9fcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2socndsb2NrX3QgKmxvY2spCit7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKwlkb19yYXdfcmVhZF91bmxvY2sobG9jayk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3Jhd19yZWFkX3VubG9ja19pcnFyZXN0b3JlKHJ3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJZG9fcmF3X3JlYWRfdW5sb2NrKGxvY2spOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJZG9fcmF3X3JlYWRfdW5sb2NrKGxvY2spOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCit7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKwlkb19yYXdfcmVhZF91bmxvY2sobG9jayk7CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCWRvX3Jhd193cml0ZV91bmxvY2sobG9jayk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJZG9fcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykKK3sKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCWRvX3Jhd193cml0ZV91bmxvY2sobG9jayk7CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorCisjZW5kaWYgLyogX19MSU5VWF9SV0xPQ0tfQVBJX1NNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J3bG9ja190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9yd2xvY2tfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDMxODA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yd2xvY2tfdHlwZXMuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fTElOVVhfUldMT0NLX1RZUEVTX0gKKyNkZWZpbmUgX19MSU5VWF9SV0xPQ0tfVFlQRVNfSAorCisvKgorICogaW5jbHVkZS9saW51eC9yd2xvY2tfdHlwZXMuaCAtIGdlbmVyaWMgcndsb2NrIHR5cGUgZGVmaW5pdGlvbnMKKyAqCQkJCSAgYW5kIGluaXRpYWxpemVycworICoKKyAqIHBvcnRpb25zIENvcHlyaWdodCAyMDA1LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogUmVsZWFzZWQgdW5kZXIgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlhcmNoX3J3bG9ja190IHJhd19sb2NrOworI2lmZGVmIENPTkZJR19HRU5FUklDX0xPQ0tCUkVBSworCXVuc2lnbmVkIGludCBicmVha19sb2NrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisJdW5zaWduZWQgaW50IG1hZ2ljLCBvd25lcl9jcHU7CisJdm9pZCAqb3duZXI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOworI2VuZGlmCit9IHJ3bG9ja190OworCisjZGVmaW5lIFJXTE9DS19NQUdJQwkJMHhkZWFmMWVlZAorCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyMgZGVmaW5lIFJXX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkJLmRlcF9tYXAgPSB7IC5uYW1lID0gI2xvY2tuYW1lIH0KKyNlbHNlCisjIGRlZmluZSBSV19ERVBfTUFQX0lOSVQobG9ja25hbWUpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworI2RlZmluZSBfX1JXX0xPQ0tfVU5MT0NLRUQobG9ja25hbWUpCQkJCQlcCisJKHJ3bG9ja190KQl7CS5yYXdfbG9jayA9IF9fQVJDSF9SV19MT0NLX1VOTE9DS0VELAlcCisJCQkJLm1hZ2ljID0gUldMT0NLX01BR0lDLAkJCVwKKwkJCQkub3duZXIgPSBTUElOTE9DS19PV05FUl9JTklULAkJXAorCQkJCS5vd25lcl9jcHUgPSAtMSwJCQlcCisJCQkJUldfREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CisjZWxzZQorI2RlZmluZSBfX1JXX0xPQ0tfVU5MT0NLRUQobG9ja25hbWUpIFwKKwkocndsb2NrX3QpCXsJLnJhd19sb2NrID0gX19BUkNIX1JXX0xPQ0tfVU5MT0NLRUQsCVwKKwkJCQlSV19ERVBfTUFQX0lOSVQobG9ja25hbWUpIH0KKyNlbmRpZgorCisvKgorICogUldfTE9DS19VTkxPQ0tFRCBkZWZlYXQgbG9ja2RlcCBzdGF0ZSB0cmFja2luZyBhbmQgaXMgaGVuY2UKKyAqIGRlcHJlY2F0ZWQuCisgKgorICogUGxlYXNlIHVzZSBERUZJTkVfUldMT0NLKCkgb3IgX19SV19MT0NLX1VOTE9DS0VEKCkgYXMgYXBwcm9wcmlhdGUuCisgKi8KKyNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAlfX1JXX0xPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3J3X2luaXQpCisKKyNkZWZpbmUgREVGSU5FX1JXTE9DSyh4KQlyd2xvY2tfdCB4ID0gX19SV19MT0NLX1VOTE9DS0VEKHgpCisKKyNlbmRpZiAvKiBfX0xJTlVYX1JXTE9DS19UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J3c2VtLXNwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3J3c2VtLXNwaW5sb2NrLmgKaW5kZXggNmMzYzBmNi4uYmRmY2MyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yd3NlbS1zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvcndzZW0tc3BpbmxvY2suaApAQCAtNjgsMTEgKzY4LDcgQEAKIGV4dGVybiB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwogZXh0ZXJuIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwogZXh0ZXJuIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKLQotc3RhdGljIGlubGluZSBpbnQgcndzZW1faXNfbG9ja2VkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlyZXR1cm4gKHNlbS0+YWN0aXZpdHkgIT0gMCk7Ci19CitleHRlcm4gaW50IHJ3c2VtX2lzX2xvY2tlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9SV1NFTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggODkxMTVlYy4uZjJmODQyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTkyLDYgKzE5MiwxMiBAQAogI2RlZmluZSBUQVNLX0RFQUQJCTY0CiAjZGVmaW5lIFRBU0tfV0FLRUtJTEwJCTEyOAogI2RlZmluZSBUQVNLX1dBS0lORwkJMjU2CisjZGVmaW5lIFRBU0tfU1RBVEVfTUFYCQk1MTIKKworI2RlZmluZSBUQVNLX1NUQVRFX1RPX0NIQVJfU1RSICJSU0RUdFpYeEtXIgorCitleHRlcm4gY2hhciBfX19hc3NlcnRfdGFza19zdGF0ZVsxIC0gMiohISgKKwkJc2l6ZW9mKFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFIpLTEgIT0gaWxvZzIoVEFTS19TVEFURV9NQVgpKzEpXTsKIAogLyogQ29udmVuaWVuY2UgbWFjcm9zIGZvciB0aGUgc2FrZSBvZiBzZXRfdGFza19zdGF0ZSAqLwogI2RlZmluZSBUQVNLX0tJTExBQkxFCQkoVEFTS19XQUtFS0lMTCB8IFRBU0tfVU5JTlRFUlJVUFRJQkxFKQpAQCAtMTA5MSw3ICsxMDk3LDggQEAKIAkJCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKTsKIAl2b2lkICgqcHJlX3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCXZvaWQgKCpwb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKLQl2b2lkICgqdGFza193YWtlX3VwKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCXZvaWQgKCp0YXNrX3dha2luZykgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwl2b2lkICgqdGFza193b2tlbikgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAogCXZvaWQgKCpzZXRfY3B1c19hbGxvd2VkKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdtYXNrKTsKQEAgLTExMDIsNyArMTEwOSw3IEBACiAKIAl2b2lkICgqc2V0X2N1cnJfdGFzaykgKHN0cnVjdCBycSAqcnEpOwogCXZvaWQgKCp0YXNrX3RpY2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBxdWV1ZWQpOwotCXZvaWQgKCp0YXNrX25ldykgKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisJdm9pZCAoKnRhc2tfZm9yaykgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIAl2b2lkICgqc3dpdGNoZWRfZnJvbSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJICAgICAgIGludCBydW5uaW5nKTsKQEAgLTExMTEsMTAgKzExMTgsMTEgQEAKIAl2b2lkICgqcHJpb19jaGFuZ2VkKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkgICAgIGludCBvbGRwcmlvLCBpbnQgcnVubmluZyk7CiAKLQl1bnNpZ25lZCBpbnQgKCpnZXRfcnJfaW50ZXJ2YWwpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCXVuc2lnbmVkIGludCAoKmdldF9ycl9pbnRlcnZhbCkgKHN0cnVjdCBycSAqcnEsCisJCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQl2b2lkICgqbW92ZWRfZ3JvdXApIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCXZvaWQgKCptb3ZlZF9ncm91cCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG9uX3JxKTsKICNlbmRpZgogfTsKIApAQCAtMTE1MSw4ICsxMTU5LDYgQEAKIAl1NjQJCQlzdGFydF9ydW50aW1lOwogCXU2NAkJCWF2Z193YWtldXA7CiAKLQl1NjQJCQlhdmdfcnVubmluZzsKLQogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJdTY0CQkJd2FpdF9zdGFydDsKIAl1NjQJCQl3YWl0X21heDsKQEAgLTExNzUsNyArMTE4MSw2IEBACiAJdTY0CQkJbnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZzsKIAl1NjQJCQlucl9mYWlsZWRfbWlncmF0aW9uc19ob3Q7CiAJdTY0CQkJbnJfZm9yY2VkX21pZ3JhdGlvbnM7Ci0JdTY0CQkJbnJfZm9yY2VkMl9taWdyYXRpb25zOwogCiAJdTY0CQkJbnJfd2FrZXVwczsKIAl1NjQJCQlucl93YWtldXBzX3N5bmM7CkBAIC0xNDExLDcgKzE0MTYsNyBAQAogI2VuZGlmCiAKIAkvKiBQcm90ZWN0aW9uIG9mIHRoZSBQSSBkYXRhIHN0cnVjdHVyZXM6ICovCi0Jc3BpbmxvY2tfdCBwaV9sb2NrOworCXJhd19zcGlubG9ja190IHBpX2xvY2s7CiAKICNpZmRlZiBDT05GSUdfUlRfTVVURVhFUwogCS8qIFBJIHdhaXRlcnMgYmxvY2tlZCBvbiBhIHJ0X211dGV4IGhlbGQgYnkgdGhpcyB0YXNrICovCkBAIC0xNTQ0LDEwICsxNTQ5LDE4IEBACiAJdW5zaWduZWQgbG9uZyB0cmFjZV9yZWN1cnNpb247CiAjZW5kaWYgLyogQ09ORklHX1RSQUNJTkcgKi8KIAl1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0OworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSIC8qIG1lbWNnIHVzZXMgdGhpcyB0byBkbyBiYXRjaCBqb2IgKi8KKwlzdHJ1Y3QgbWVtY2dfYmF0Y2hfaW5mbyB7CisJCWludCBkb19iYXRjaDsJLyogaW5jcmVtZW50ZWQgd2hlbiBiYXRjaCB1bmNoYXJnZSBzdGFydGVkICovCisJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsgLyogdGFyZ2V0IG1lbWNnIG9mIHVuY2hhcmdlICovCisJCXVuc2lnbmVkIGxvbmcgYnl0ZXM7IAkJLyogdW5jaGFyZ2VkIHVzYWdlICovCisJCXVuc2lnbmVkIGxvbmcgbWVtc3dfYnl0ZXM7IC8qIHVuY2hhcmdlZCBtZW0rc3dhcCB1c2FnZSAqLworCX0gbWVtY2dfYmF0Y2g7CisjZW5kaWYKIH07CiAKIC8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgdGFza19zdHJ1Y3QncyBjcHVzX2FsbG93ZWQuICovCi0jZGVmaW5lIHRza19jcHVtYXNrKHRzaykgKCYodHNrKS0+Y3B1c19hbGxvd2VkKQorI2RlZmluZSB0c2tfY3B1c19hbGxvd2VkKHRzaykgKCYodHNrKS0+Y3B1c19hbGxvd2VkKQogCiAvKgogICogUHJpb3JpdHkgb2YgYSBwcm9jZXNzIGdvZXMgZnJvbSAwLi5NQVhfUFJJTy0xLCB2YWxpZCBSVApAQCAtMTg0MCw3ICsxODUzLDggQEAKIGV4dGVybiBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOwogI2VuZGlmCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCk7CisvKiBmdHJhY2UgY2FsbHMgc2NoZWRfY2xvY2soKSBkaXJlY3RseSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzY2hlZF9jbG9ja19pbml0KHZvaWQpOwogZXh0ZXJuIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSk7CkBAIC0xOTAzLDE0ICsxOTE3LDIyIEBACiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0OwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfc2hhcmVzX3RocmVzaDsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2NoaWxkX3J1bnNfZmlyc3Q7CisKK2VudW0gc2NoZWRfdHVuYWJsZV9zY2FsaW5nIHsKKwlTQ0hFRF9UVU5BQkxFU0NBTElOR19OT05FLAorCVNDSEVEX1RVTkFCTEVTQ0FMSU5HX0xPRywKKwlTQ0hFRF9UVU5BQkxFU0NBTElOR19MSU5FQVIsCisJU0NIRURfVFVOQUJMRVNDQUxJTkdfRU5ELAorfTsKK2V4dGVybiBlbnVtIHNjaGVkX3R1bmFibGVfc2NhbGluZyBzeXNjdGxfc2NoZWRfdHVuYWJsZV9zY2FsaW5nOworCiAjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCi1leHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9mZWF0dXJlczsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0OwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbnJfbWlncmF0ZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3RpbWVfYXZnOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfdGltZXJfbWlncmF0aW9uOwogCi1pbnQgc2NoZWRfbnJfbGF0ZW5jeV9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCitpbnQgc2NoZWRfcHJvY191cGRhdGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwKIAkJbG9mZl90ICpwcG9zKTsKICNlbmRpZgpAQCAtMjA2Niw3ICsyMDg4LDYgQEAKIGV4dGVybiBpbnQgZG9fbm90aWZ5X3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKIGV4dGVybiB2b2lkIF9fd2FrZV91cF9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBmb3JjZV9zaWcoaW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCBmb3JjZV9zaWdfc3BlY2lmaWMoaW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gaW50IHNlbmRfc2lnKGludCwgc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CiBleHRlcm4gdm9pZCB6YXBfb3RoZXJfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIHN0cnVjdCBzaWdxdWV1ZSAqc2lncXVldWVfYWxsb2Modm9pZCk7CkBAIC0yMDg1LDExICsyMTA2LDYgQEAKICNkZWZpbmUgU0VORF9TSUdfUFJJVgkoKHN0cnVjdCBzaWdpbmZvICopIDEpCiAjZGVmaW5lIFNFTkRfU0lHX0ZPUkNFRAkoKHN0cnVjdCBzaWdpbmZvICopIDIpCiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3NpX3NwZWNpYWwoY29uc3Qgc3RydWN0IHNpZ2luZm8gKmluZm8pCi17Ci0JcmV0dXJuIGluZm8gPD0gU0VORF9TSUdfRk9SQ0VEOwotfQotCiAvKgogICogVHJ1ZSBpZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2suCiAgKi8KQEAgLTI1ODUsOCArMjYwMSw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCiAKLSNkZWZpbmUgVEFTS19TVEFURV9UT19DSEFSX1NUUiAiUlNEVHRaWCIKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggNDY2Y2JhZC4uMmM2MjdkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtOTUsOCArOTUsMTMgQEAKIGV4dGVybiBpbnQgY2FwX25ldGxpbmtfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCBjYXBfbmV0bGlua19yZWN2KHN0cnVjdCBza19idWZmICpza2IsIGludCBjYXApOwogCisjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW1hcF9taW5fYWRkcjsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRhY19tbWFwX21pbl9hZGRyOworI2Vsc2UKKyNkZWZpbmUgZGFjX21tYXBfbWluX2FkZHIJMFVMCisjZW5kaWYKKwogLyoKICAqIFZhbHVlcyB1c2VkIGluIHRoZSB0YXNrX3NlY3VyaXR5X29wcyBjYWxscwogICovCkBAIC0xMjEsNiArMTI2LDcgQEAKICNkZWZpbmUgTFNNX1VOU0FGRV9QVFJBQ0UJMgogI2RlZmluZSBMU01fVU5TQUZFX1BUUkFDRV9DQVAJNAogCisjaWZkZWYgQ09ORklHX01NVQogLyoKICAqIElmIGEgaGludCBhZGRyIGlzIGxlc3MgdGhhbiBtbWFwX21pbl9hZGRyIGNoYW5nZSBoaW50IHRvIGJlIGFzCiAgKiBsb3cgYXMgcG9zc2libGUgYnV0IHN0aWxsIGdyZWF0ZXIgdGhhbiBtbWFwX21pbl9hZGRyCkBAIC0xMzUsNiArMTQxLDcgQEAKIH0KIGV4dGVybiBpbnQgbW1hcF9taW5fYWRkcl9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkJIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VtLmggYi9pbmNsdWRlL2xpbnV4L3NlbS5oCmluZGV4IDFiMTkxYzEuLjhhNGFkYmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VtLmgKQEAgLTg2LDYgKzg2LDcgQEAKIHN0cnVjdCBzZW0gewogCWludAlzZW12YWw7CQkvKiBjdXJyZW50IHZhbHVlICovCiAJaW50CXNlbXBpZDsJCS8qIHBpZCBvZiBsYXN0IG9wZXJhdGlvbiAqLworCXN0cnVjdCBsaXN0X2hlYWQgc2VtX3BlbmRpbmc7IC8qIHBlbmRpbmcgc2luZ2xlLXNvcCBvcGVyYXRpb25zICovCiB9OwogCiAvKiBPbmUgc2VtX2FycmF5IGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIHNldCBvZiBzZW1hcGhvcmVzIGluIHRoZSBzeXN0ZW0uICovCkBAIC05NiwxMSArOTcsMTMgQEAKIAlzdHJ1Y3Qgc2VtCQkqc2VtX2Jhc2U7CS8qIHB0ciB0byBmaXJzdCBzZW1hcGhvcmUgaW4gYXJyYXkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXNlbV9wZW5kaW5nOwkvKiBwZW5kaW5nIG9wZXJhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkICovCiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0X2lkOwkvKiB1bmRvIHJlcXVlc3RzIG9uIHRoaXMgYXJyYXkgKi8KLQl1bnNpZ25lZCBsb25nCQlzZW1fbnNlbXM7CS8qIG5vLiBvZiBzZW1hcGhvcmVzIGluIGFycmF5ICovCisJaW50CQkJc2VtX25zZW1zOwkvKiBuby4gb2Ygc2VtYXBob3JlcyBpbiBhcnJheSAqLworCWludAkJCWNvbXBsZXhfY291bnQ7CS8qIHBlbmRpbmcgY29tcGxleCBvcGVyYXRpb25zICovCiB9OwogCiAvKiBPbmUgcXVldWUgZm9yIGVhY2ggc2xlZXBpbmcgcHJvY2VzcyBpbiB0aGUgc3lzdGVtLiAqLwogc3RydWN0IHNlbV9xdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZAlzaW1wbGVfbGlzdDsgLyogcXVldWUgb2YgcGVuZGluZyBvcGVyYXRpb25zICovCiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkgLyogcXVldWUgb2YgcGVuZGluZyBvcGVyYXRpb25zICovCiAJc3RydWN0IHRhc2tfc3RydWN0CSpzbGVlcGVyOyAvKiB0aGlzIHByb2Nlc3MgKi8KIAlzdHJ1Y3Qgc2VtX3VuZG8JCSp1bmRvOwkgLyogdW5kbyBzdHJ1Y3R1cmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAppbmRleCBkZWVlN2FmLi5lMTY0MjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCkBAIC00MSwyMCArNDEsNCBAQAogZXh0ZXJuIGludCBpbml0X3RtcGZzKHZvaWQpOwogZXh0ZXJuIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpOwogCi0jaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTAotaW50IHNobWVtX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLWludCBzaG1lbV9hY2xfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwotCi1leHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgc2htZW1feGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHNobWVtX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXI7Ci0KLWV4dGVybiBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyBzaG1lbV9hY2xfb3BzOwotCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgc2htZW1fYWNsX2luaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKaW5kZXggODUwZDA1Ny4uY2E2YjJiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaApAQCAtMTEwLDcgKzExMCw3IEBACiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKIHZvaWQgKl9fa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorI2lmZGVmIENPTkZJR19UUkFDSU5HCiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKTsKIGV4dGVybiBzaXplX3Qgc2xhYl9idWZmZXJfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKTsKICNlbHNlCkBAIC0xNjYsNyArMTY2LDcgQEAKIGV4dGVybiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIAotI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKKyNpZmRlZiBDT05GSUdfVFJBQ0lORwogZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCiAJCQkJCSAgIGdmcF90IGZsYWdzLAogCQkJCQkgICBpbnQgbm9kZWlkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCA1YWQ3MGE2Li4xZTE0YmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC0yMTcsNyArMjE3LDcgQEAKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QpOwogdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfS01FTVRSQUNFCisjaWZkZWYgQ09ORklHX1RSQUNJTkcKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzKTsKICNlbHNlCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgpAQCAtMjY2LDcgKzI2Niw3IEBACiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogCi0jaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorI2lmZGVmIENPTkZJR19UUkFDSU5HCiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJCSAgIGdmcF90IGdmcGZsYWdzLAogCQkJCQkgICBpbnQgbm9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtNTAxLXJlZ3MuaCBiL2luY2x1ZGUvbGludXgvc201MDEtcmVncy5oCmluZGV4IGQ1MzY0MmQuLjY3ZWQyYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc201MDEtcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvc201MDEtcmVncy5oCkBAIC0zMSw2ICszMSw4IEBACiAjZGVmaW5lIFNNNTAxX1NZU0NUUkxfUENJX1NVQlNZU19MT0NLCSgxPDwxMSkKICNkZWZpbmUgU001MDFfU1lTQ1RSTF9QQ0lfQlVSU1RfUkVBRF9FTgkoMTw8MTUpCiAKKyNkZWZpbmUgU001MDFfU1lTQ1RSTF8yRF9FTkdJTkVfU1RBVFVTCSgxPDwxOSkKKwogLyogbWlzY2VsbGFuZW91cyBjb250cm9sICovCiAKICNkZWZpbmUgU001MDFfTUlTQ19DT05UUk9MCQkoMHgwMDAwMDQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjNlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaApAQCAtMCwwICsxLDIxMiBAQAorI2lmbmRlZiBEV19TUElfSEVBREVSX0gKKyNkZWZpbmUgRFdfU1BJX0hFQURFUl9ICisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyogQml0IGZpZWxkcyBpbiBDVFJMUjAgKi8KKyNkZWZpbmUgU1BJX0RGU19PRkZTRVQJCQkwCisKKyNkZWZpbmUgU1BJX0ZSRl9PRkZTRVQJCQk0CisjZGVmaW5lIFNQSV9GUkZfU1BJCQkJMHgwCisjZGVmaW5lIFNQSV9GUkZfU1NQCQkJMHgxCisjZGVmaW5lIFNQSV9GUkZfTUlDUk9XSVJFCQkweDIKKyNkZWZpbmUgU1BJX0ZSRl9SRVNWCQkJMHgzCisKKyNkZWZpbmUgU1BJX01PREVfT0ZGU0VUCQkJNgorI2RlZmluZSBTUElfU0NQSF9PRkZTRVQJCQk2CisjZGVmaW5lIFNQSV9TQ09MX09GRlNFVAkJCTcKKyNkZWZpbmUgU1BJX1RNT0RfT0ZGU0VUCQkJOAorI2RlZmluZQlTUElfVE1PRF9UUgkJCTB4MAkJLyogeG1pdCAmIHJlY3YgKi8KKyNkZWZpbmUgU1BJX1RNT0RfVE8JCQkweDEJCS8qIHhtaXQgb25seSAqLworI2RlZmluZSBTUElfVE1PRF9STwkJCTB4MgkJLyogcmVjdiBvbmx5ICovCisjZGVmaW5lIFNQSV9UTU9EX0VQUk9NUkVBRAkJMHgzCQkvKiBlZXByb20gcmVhZCBtb2RlICovCisKKyNkZWZpbmUgU1BJX1NMVk9FX09GRlNFVAkJMTAKKyNkZWZpbmUgU1BJX1NSTF9PRkZTRVQJCQkxMQorI2RlZmluZSBTUElfQ0ZTX09GRlNFVAkJCTEyCisKKy8qIEJpdCBmaWVsZHMgaW4gU1IsIDcgYml0cyAqLworI2RlZmluZSBTUl9NQVNLCQkJCTB4N2YJCS8qIGNvdmVyIDcgYml0cyAqLworI2RlZmluZSBTUl9CVVNZCQkJCSgxIDw8IDApCisjZGVmaW5lIFNSX1RGX05PVF9GVUxMCQkJKDEgPDwgMSkKKyNkZWZpbmUgU1JfVEZfRU1QVAkJCSgxIDw8IDIpCisjZGVmaW5lIFNSX1JGX05PVF9FTVBUCQkJKDEgPDwgMykKKyNkZWZpbmUgU1JfUkZfRlVMTAkJCSgxIDw8IDQpCisjZGVmaW5lIFNSX1RYX0VSUgkJCSgxIDw8IDUpCisjZGVmaW5lIFNSX0RDT0wJCQkJKDEgPDwgNikKKworLyogQml0IGZpZWxkcyBpbiBJU1IsIElNUiwgUklTUiwgNyBiaXRzICovCisjZGVmaW5lIFNQSV9JTlRfVFhFSQkJCSgxIDw8IDApCisjZGVmaW5lIFNQSV9JTlRfVFhPSQkJCSgxIDw8IDEpCisjZGVmaW5lIFNQSV9JTlRfUlhVSQkJCSgxIDw8IDIpCisjZGVmaW5lIFNQSV9JTlRfUlhPSQkJCSgxIDw8IDMpCisjZGVmaW5lIFNQSV9JTlRfUlhGSQkJCSgxIDw8IDQpCisjZGVmaW5lIFNQSV9JTlRfTVNUSQkJCSgxIDw8IDUpCisKKy8qIFRYIFJYIGludGVycnVwdCBsZXZlbCB0aHJlc2hob2xkLCBtYXggY2FuIGJlIDI1NiAqLworI2RlZmluZSBTUElfSU5UX1RIUkVTSE9MRAkJMzIKKworZW51bSBkd19zc2lfdHlwZSB7CisJU1NJX01PVE9fU1BJID0gMCwKKwlTU0lfVElfU1NQLAorCVNTSV9OU19NSUNST1dJUkUsCit9OworCitzdHJ1Y3QgZHdfc3BpX3JlZyB7CisJdTMyCWN0cmwwOworCXUzMgljdHJsMTsKKwl1MzIJc3NpZW5yOworCXUzMgltd2NyOworCXUzMglzZXI7CisJdTMyCWJhdWRyOworCXUzMgl0eGZsdHI7CisJdTMyCXJ4Zmx0cjsKKwl1MzIJdHhmbHI7CisJdTMyCXJ4ZmxyOworCXUzMglzcjsKKwl1MzIJaW1yOworCXUzMglpc3I7CisJdTMyCXJpc3I7CisJdTMyCXR4b2ljcjsKKwl1MzIJcnhvaWNyOworCXUzMglyeHVpY3I7CisJdTMyCW1zdGljcjsKKwl1MzIJaWNyOworCXUzMglkbWFjcjsKKwl1MzIJZG1hdGRscjsKKwl1MzIJZG1hcmRscjsKKwl1MzIJaWRyOworCXUzMgl2ZXJzaW9uOworCXUzMglkcjsJCS8qIEN1cnJlbnRseSBvcGVyIGFzIDMyIGJpdHMsCisJCQkJdGhvdWdoIG9ubHkgbG93IDE2IGJpdHMgbWF0dGVycyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGR3X3NwaSB7CisJc3RydWN0IHNwaV9tYXN0ZXIJKm1hc3RlcjsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqY3VyX2RldjsKKwlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50X2RldjsKKwllbnVtIGR3X3NzaV90eXBlCXR5cGU7CisKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXVuc2lnbmVkIGxvbmcJCXBhZGRyOworCXUzMgkJCWlvbGVuOworCWludAkJCWlycTsKKwl1MzIJCQltYXhfZnJlcTsJLyogbWF4IGJ1cyBmcmVxIHN1cHBvcnRlZCAqLworCisJdTE2CQkJYnVzX251bTsKKwl1MTYJCQludW1fY3M7CQkvKiBzdXBwb3J0ZWQgc2xhdmUgbnVtYmVycyAqLworCisJLyogRHJpdmVyIG1lc3NhZ2UgcXVldWUgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3F1ZXVlOworCXN0cnVjdCB3b3JrX3N0cnVjdAlwdW1wX21lc3NhZ2VzOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKKwlpbnQJCQlidXN5OworCWludAkJCXJ1bjsKKworCS8qIE1lc3NhZ2UgVHJhbnNmZXIgcHVtcCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlwdW1wX3RyYW5zZmVyczsKKworCS8qIEN1cnJlbnQgbWVzc2FnZSB0cmFuc2ZlciBzdGF0ZSBpbmZvICovCisJc3RydWN0IHNwaV9tZXNzYWdlCSpjdXJfbXNnOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJKmN1cl90cmFuc2ZlcjsKKwlzdHJ1Y3QgY2hpcF9kYXRhCSpjdXJfY2hpcDsKKwlzdHJ1Y3QgY2hpcF9kYXRhCSpwcmV2X2NoaXA7CisJc2l6ZV90CQkJbGVuOworCXZvaWQJCQkqdHg7CisJdm9pZAkJCSp0eF9lbmQ7CisJdm9pZAkJCSpyeDsKKwl2b2lkCQkJKnJ4X2VuZDsKKwlpbnQJCQlkbWFfbWFwcGVkOworCWRtYV9hZGRyX3QJCXJ4X2RtYTsKKwlkbWFfYWRkcl90CQl0eF9kbWE7CisJc2l6ZV90CQkJcnhfbWFwX2xlbjsKKwlzaXplX3QJCQl0eF9tYXBfbGVuOworCXU4CQkJbl9ieXRlczsJLyogY3VycmVudCBpcyBhIDEvMiBieXRlcyBvcCAqLworCXU4CQkJbWF4X2JpdHNfcGVyX3dvcmQ7CS8qIG1heGltIGlzIDE2YiAqLworCXUzMgkJCWRtYV93aWR0aDsKKwlpbnQJCQljc19jaGFuZ2U7CisJaW50CQkJKCp3cml0ZSkoc3RydWN0IGR3X3NwaSAqZHdzKTsKKwlpbnQJCQkoKnJlYWQpKHN0cnVjdCBkd19zcGkgKmR3cyk7CisJaXJxcmV0dXJuX3QJCSgqdHJhbnNmZXJfaGFuZGxlcikoc3RydWN0IGR3X3NwaSAqZHdzKTsKKwl2b2lkCQkJKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7CisKKwkvKiBEbWEgaW5mbyAqLworCWludAkJCWRtYV9pbml0ZWQ7CisJc3RydWN0IGRtYV9jaGFuCQkqdHhjaGFuOworCXN0cnVjdCBkbWFfY2hhbgkJKnJ4Y2hhbjsKKwlpbnQJCQl0eGRtYV9kb25lOworCWludAkJCXJ4ZG1hX2RvbmU7CisJdTY0CQkJdHhfcGFyYW07CisJdTY0CQkJcnhfcGFyYW07CisJc3RydWN0IGRldmljZQkJKmRtYV9kZXY7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisKKwkvKiBCdXMgaW50ZXJmYWNlIGluZm8gKi8KKwl2b2lkCQkJKnByaXY7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGRlbnRyeSAqZGVidWdmczsKKyNlbmRpZgorfTsKKworI2RlZmluZSBkd19yZWFkbChkdywgbmFtZSkgXAorCV9fcmF3X3JlYWRsKCYoKChzdHJ1Y3QgZHdfc3BpX3JlZyAqKWR3LT5yZWdzKS0+bmFtZSkpCisjZGVmaW5lIGR3X3dyaXRlbChkdywgbmFtZSwgdmFsKSBcCisJX19yYXdfd3JpdGVsKCh2YWwpLCAmKCgoc3RydWN0IGR3X3NwaV9yZWcgKilkdy0+cmVncyktPm5hbWUpKQorI2RlZmluZSBkd19yZWFkdyhkdywgbmFtZSkgXAorCV9fcmF3X3JlYWR3KCYoKChzdHJ1Y3QgZHdfc3BpX3JlZyAqKWR3LT5yZWdzKS0+bmFtZSkpCisjZGVmaW5lIGR3X3dyaXRldyhkdywgbmFtZSwgdmFsKSBcCisJX19yYXdfd3JpdGV3KCh2YWwpLCAmKCgoc3RydWN0IGR3X3NwaV9yZWcgKilkdy0+cmVncyktPm5hbWUpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpX2VuYWJsZV9jaGlwKHN0cnVjdCBkd19zcGkgKmR3cywgaW50IGVuYWJsZSkKK3sKKwlkd193cml0ZWwoZHdzLCBzc2llbnIsIChlbmFibGUgPyAxIDogMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpX3NldF9jbGsoc3RydWN0IGR3X3NwaSAqZHdzLCB1MTYgZGl2KQoreworCWR3X3dyaXRlbChkd3MsIGJhdWRyLCBkaXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpX2NoaXBfc2VsKHN0cnVjdCBkd19zcGkgKmR3cywgdTE2IGNzKQoreworCWlmIChjcyA+IGR3cy0+bnVtX2NzKQorCQlyZXR1cm47CisJZHdfd3JpdGVsKGR3cywgc2VyLCAxIDw8IGNzKTsKK30KKworLyogRGlzYWJsZSBJUlEgYml0cyAqLworc3RhdGljIGlubGluZSB2b2lkIHNwaV9tYXNrX2ludHIoc3RydWN0IGR3X3NwaSAqZHdzLCB1MzIgbWFzaykKK3sKKwl1MzIgbmV3X21hc2s7CisKKwluZXdfbWFzayA9IGR3X3JlYWRsKGR3cywgaW1yKSAmIH5tYXNrOworCWR3X3dyaXRlbChkd3MsIGltciwgbmV3X21hc2spOworfQorCisvKiBFbmFibGUgSVJRIGJpdHMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGlfdW1hc2tfaW50cihzdHJ1Y3QgZHdfc3BpICpkd3MsIHUzMiBtYXNrKQoreworCXUzMiBuZXdfbWFzazsKKworCW5ld19tYXNrID0gZHdfcmVhZGwoZHdzLCBpbXIpIHwgbWFzazsKKwlkd193cml0ZWwoZHdzLCBpbXIsIG5ld19tYXNrKTsKK30KKworLyoKKyAqIEVhY2ggU1BJIHNsYXZlIGRldmljZSB0byB3b3JrIHdpdGggZHdfYXBpIGNvbnRyb2xsZXIgc2hvdWxkCisgKiBoYXMgc3VjaCBhIHN0cnVjdHVyZSBjbGFpbWluZyBpdHMgd29ya2luZyBtb2RlIChQSU8vRE1BIGV0YyksCisgKiB3aGljaCBjYW4gYmUgc2F2ZSBpbiB0aGUgImNvbnRyb2xsZXJfZGF0YSIgbWVtYmVyIG9mIHRoZQorICogc3RydWN0IHNwaV9kZXZpY2UKKyAqLworc3RydWN0IGR3X3NwaV9jaGlwIHsKKwl1OCBwb2xsX21vZGU7CS8qIDAgZm9yIGNvbnRvbGxlciBwb2xsaW5nIG1vZGUgKi8KKwl1OCB0eXBlOwkvKiBTUEkvU1NQL01pY3J3aXJlICovCisJdTggZW5hYmxlX2RtYTsKKwl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOworfTsKKworZXh0ZXJuIGludCBkd19zcGlfYWRkX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKTsKK2V4dGVybiB2b2lkIGR3X3NwaV9yZW1vdmVfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpOworZXh0ZXJuIGludCBkd19zcGlfc3VzcGVuZF9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cyk7CitleHRlcm4gaW50IGR3X3NwaV9yZXN1bWVfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpOworI2VuZGlmIC8qIERXX1NQSV9IRUFERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc2hfbXNpb2YuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NoX21zaW9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4ZGIzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NoX21zaW9mLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX1NQSV9TSF9NU0lPRl9IX18KKyNkZWZpbmUgX19TUElfU0hfTVNJT0ZfSF9fCisKK3N0cnVjdCBzaF9tc2lvZl9zcGlfaW5mbyB7CisJaW50IHR4X2ZpZm9fb3ZlcnJpZGU7CisJaW50IHJ4X2ZpZm9fb3ZlcnJpZGU7CisJdTE2IG51bV9jaGlwc2VsZWN0OworfTsKKworI2VuZGlmIC8qIF9fU1BJX1NIX01TSU9GX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkveGlsaW54X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkveGlsaW54X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTcyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS94aWxpbnhfc3BpLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfX0xJTlVYX1NQSV9YSUxJTlhfU1BJX0gKKyNkZWZpbmUgX19MSU5VWF9TUElfWElMSU5YX1NQSV9ICisKKy8qKgorICogc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSAtIFBsYXRmb3JtIGRhdGEgb2YgdGhlIFhpbGlueCBTUEkgZHJpdmVyCisgKiBAbnVtX2NoaXBzZWxlY3Q6CU51bWJlciBvZiBjaGlwIHNlbGVjdCBieSB0aGUgSVAuCisgKiBAbGl0dGxlX2VuZGlhbjoJSWYgcmVnaXN0ZXJzIHNob3VsZCBiZSBhY2Nlc3NlZCBsaXR0bGUgZW5kaWFuIG9yIG5vdC4KKyAqIEBiaXRzX3Blcl93b3JkOglOdW1iZXIgb2YgYml0cyBwZXIgd29yZC4KKyAqIEBkZXZpY2VzOgkJRGV2aWNlcyB0byBhZGQgd2hlbiB0aGUgZHJpdmVyIGlzIHByb2JlZC4KKyAqIEBudW1fZGV2aWNlczoJTnVtYmVyIG9mIGRldmljZXMgaW4gdGhlIGRldmljZXMgYXJyYXkuCisgKi8KK3N0cnVjdCB4c3BpX3BsYXRmb3JtX2RhdGEgeworCXUxNiBudW1fY2hpcHNlbGVjdDsKKwlib29sIGxpdHRsZV9lbmRpYW47CisJdTggYml0c19wZXJfd29yZDsKKwlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmRldmljZXM7CisJdTggbnVtX2RldmljZXM7Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9TUElfWElMSU5YX1NQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKaW5kZXggNzFkY2NmZS4uODYwODgyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaApAQCAtOCwxMyArOCwxMyBAQAogICoKICAqIG9uIFNNUCBidWlsZHM6CiAgKgotICogIGFzbS9zcGlubG9ja190eXBlcy5oOiBjb250YWlucyB0aGUgcmF3X3NwaW5sb2NrX3QvcmF3X3J3bG9ja190IGFuZCB0aGUKKyAqICBhc20vc3BpbmxvY2tfdHlwZXMuaDogY29udGFpbnMgdGhlIGFyY2hfc3BpbmxvY2tfdC9hcmNoX3J3bG9ja190IGFuZCB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzCiAgKgogICogIGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg6CiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIGdlbmVyaWMgdHlwZSBhbmQgaW5pdGlhbGl6ZXJzCiAgKgotICogIGFzbS9zcGlubG9jay5oOiAgICAgICBjb250YWlucyB0aGUgX19yYXdfc3Bpbl8qKCkvZXRjLiBsb3dsZXZlbAorICogIGFzbS9zcGlubG9jay5oOiAgICAgICBjb250YWlucyB0aGUgYXJjaF9zcGluXyooKS9ldGMuIGxvd2xldmVsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucywgbW9zdGx5IGlubGluZSBhc3NlbWJseSBjb2RlCiAgKgogICogICAoYWxzbyBpbmNsdWRlZCBvbiBVUC1kZWJ1ZyBidWlsZHM6KQpAQCAtMzQsNyArMzQsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBnZW5lcmljIHR5cGUgYW5kIGluaXRpYWxpemVycwogICoKICAqICBsaW51eC9zcGlubG9ja191cC5oOgotICogICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgX19yYXdfc3Bpbl8qKCkvZXRjLiB2ZXJzaW9uIG9mIFVQCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBhcmNoX3NwaW5fKigpL2V0Yy4gdmVyc2lvbiBvZiBVUAogICogICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMuICh3aGljaCBhcmUgTk9QcyBvbiBub24tZGVidWcsIG5vbi1wcmVlbXB0CiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcykKICAqCkBAIC03NSwxMiArNzUsMTIgQEAKICNkZWZpbmUgX19sb2NrZnVuYyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuc3BpbmxvY2sudGV4dCIpKSkKIAogLyoKLSAqIFB1bGwgdGhlIHJhd19zcGlubG9ja190IGFuZCByYXdfcndsb2NrX3QgZGVmaW5pdGlvbnM6CisgKiBQdWxsIHRoZSBhcmNoX3NwaW5sb2NrX3QgYW5kIGFyY2hfcndsb2NrX3QgZGVmaW5pdGlvbnM6CiAgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCiAvKgotICogUHVsbCB0aGUgX19yYXcqKCkgZnVuY3Rpb25zL2RlY2xhcmF0aW9ucyAoVVAtbm9uZGVidWcgZG9lc250IG5lZWQgdGhlbSk6CisgKiBQdWxsIHRoZSBhcmNoX3NwaW4qKCkgZnVuY3Rpb25zL2RlY2xhcmF0aW9ucyAoVVAtbm9uZGVidWcgZG9lc250IG5lZWQgdGhlbSk6CiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAjIGluY2x1ZGUgPGFzbS9zcGlubG9jay5oPgpAQCAtODksNDUgKzg5LDMxIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwotICBleHRlcm4gdm9pZCBfX3NwaW5fbG9ja19pbml0KHNwaW5sb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwotIyBkZWZpbmUgc3Bpbl9sb2NrX2luaXQobG9jaykJCQkJCVwKKyAgZXh0ZXJuIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2luaXQocmF3X3NwaW5sb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworIyBkZWZpbmUgcmF3X3NwaW5fbG9ja19pbml0KGxvY2spCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKIAkJCQkJCQkJXAotCV9fc3Bpbl9sb2NrX2luaXQoKGxvY2spLCAjbG9jaywgJl9fa2V5KTsJCVwKKwlfX3Jhd19zcGluX2xvY2tfaW5pdCgobG9jayksICNsb2NrLCAmX19rZXkpOwkJXAogfSB3aGlsZSAoMCkKIAogI2Vsc2UKLSMgZGVmaW5lIHNwaW5fbG9ja19pbml0KGxvY2spCQkJCQlcCi0JZG8geyAqKGxvY2spID0gX19TUElOX0xPQ0tfVU5MT0NLRUQobG9jayk7IH0gd2hpbGUgKDApCisjIGRlZmluZSByYXdfc3Bpbl9sb2NrX2luaXQobG9jaykJCQkJXAorCWRvIHsgKihsb2NrKSA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCi0gIGV4dGVybiB2b2lkIF9fcndsb2NrX2luaXQocndsb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwotIyBkZWZpbmUgcndsb2NrX2luaXQobG9jaykJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKLQkJCQkJCQkJXAotCV9fcndsb2NrX2luaXQoKGxvY2spLCAjbG9jaywgJl9fa2V5KTsJCQlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSMgZGVmaW5lIHJ3bG9ja19pbml0KGxvY2spCQkJCQlcCi0JZG8geyAqKGxvY2spID0gX19SV19MT0NLX1VOTE9DS0VEKGxvY2spOyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobG9jaykJX19yYXdfc3Bpbl9pc19sb2NrZWQoJihsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIHJhd19zcGluX2lzX2xvY2tlZChsb2NrKQlhcmNoX3NwaW5faXNfbG9ja2VkKCYobG9jayktPnJhd19sb2NrKQogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLCi0jZGVmaW5lIHNwaW5faXNfY29udGVuZGVkKGxvY2spICgobG9jayktPmJyZWFrX2xvY2spCisjZGVmaW5lIHJhd19zcGluX2lzX2NvbnRlbmRlZChsb2NrKSAoKGxvY2spLT5icmVha19sb2NrKQogI2Vsc2UKIAotI2lmZGVmIF9fcmF3X3NwaW5faXNfY29udGVuZGVkCi0jZGVmaW5lIHNwaW5faXNfY29udGVuZGVkKGxvY2spCV9fcmF3X3NwaW5faXNfY29udGVuZGVkKCYobG9jayktPnJhd19sb2NrKQorI2lmZGVmIGFyY2hfc3Bpbl9pc19jb250ZW5kZWQKKyNkZWZpbmUgcmF3X3NwaW5faXNfY29udGVuZGVkKGxvY2spCWFyY2hfc3Bpbl9pc19jb250ZW5kZWQoJihsb2NrKS0+cmF3X2xvY2spCiAjZWxzZQotI2RlZmluZSBzcGluX2lzX2NvbnRlbmRlZChsb2NrKQkoKCh2b2lkKShsb2NrKSwgMCkpCi0jZW5kaWYgLypfX3Jhd19zcGluX2lzX2NvbnRlbmRlZCovCisjZGVmaW5lIHJhd19zcGluX2lzX2NvbnRlbmRlZChsb2NrKQkoKCh2b2lkKShsb2NrKSwgMCkpCisjZW5kaWYgLyphcmNoX3NwaW5faXNfY29udGVuZGVkKi8KICNlbmRpZgogCiAvKiBUaGUgbG9jayBkb2VzIG5vdCBpbXBseSBmdWxsIG1lbW9yeSBiYXJyaWVyLiAqLwpAQCAtMTM2LDE4MiArMTIyLDI2MCBAQAogI2VuZGlmCiAKIC8qKgotICogc3Bpbl91bmxvY2tfd2FpdCAtIHdhaXQgdW50aWwgdGhlIHNwaW5sb2NrIGdldHMgdW5sb2NrZWQKKyAqIHJhd19zcGluX3VubG9ja193YWl0IC0gd2FpdCB1bnRpbCB0aGUgc3BpbmxvY2sgZ2V0cyB1bmxvY2tlZAogICogQGxvY2s6IHRoZSBzcGlubG9jayBpbiBxdWVzdGlvbi4KICAqLwotI2RlZmluZSBzcGluX3VubG9ja193YWl0KGxvY2spCV9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoJihsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIHJhd19zcGluX3VubG9ja193YWl0KGxvY2spCWFyY2hfc3Bpbl91bmxvY2tfd2FpdCgmKGxvY2spLT5yYXdfbG9jaykKIAogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwotIGV4dGVybiB2b2lkIF9yYXdfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwotI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19zcGluX2xvY2sobG9jaykKLSBleHRlcm4gaW50IF9yYXdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spOwotIGV4dGVybiB2b2lkIF9yYXdfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jayk7Ci0gZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX2xvY2socndsb2NrX3QgKmxvY2spOwotI2RlZmluZSBfcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd19yZWFkX2xvY2sobG9jaykKLSBleHRlcm4gaW50IF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKLSBleHRlcm4gdm9pZCBfcmF3X3JlYWRfdW5sb2NrKHJ3bG9ja190ICpsb2NrKTsKLSBleHRlcm4gdm9pZCBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spOwotI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfd3JpdGVfbG9jayhsb2NrKQotIGV4dGVybiBpbnQgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKLSBleHRlcm4gdm9pZCBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jayk7CisgZXh0ZXJuIHZvaWQgZG9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jayk7CisjZGVmaW5lIGRvX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGRvX3Jhd19zcGluX2xvY2sobG9jaykKKyBleHRlcm4gaW50IGRvX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spOworIGV4dGVybiB2b2lkIGRvX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jayk7CiAjZWxzZQotIyBkZWZpbmUgX3Jhd19zcGluX2xvY2sobG9jaykJCV9fcmF3X3NwaW5fbG9jaygmKGxvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBcCi0JCV9fcmF3X3NwaW5fbG9ja19mbGFncygmKGxvY2spLT5yYXdfbG9jaywgKihmbGFncykpCi0jIGRlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayhsb2NrKQlfX3Jhd19zcGluX3RyeWxvY2soJihsb2NrKS0+cmF3X2xvY2spCi0jIGRlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spCQlfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIF9yYXdfcmVhZF9sb2NrKHJ3bG9jaykJCV9fcmF3X3JlYWRfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQotIyBkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIFwKLQkJX19yYXdfcmVhZF9sb2NrX2ZsYWdzKCYobG9jayktPnJhd19sb2NrLCAqKGZsYWdzKSkKLSMgZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9jaykJX19yYXdfcmVhZF90cnlsb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCi0jIGRlZmluZSBfcmF3X3JlYWRfdW5sb2NrKHJ3bG9jaykJX19yYXdfcmVhZF91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIF9yYXdfd3JpdGVfbG9jayhyd2xvY2spCV9fcmF3X3dyaXRlX2xvY2soJihyd2xvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIF9yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgXAotCQlfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKCYobG9jayktPnJhd19sb2NrLCAqKGZsYWdzKSkKLSMgZGVmaW5lIF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2spCV9fcmF3X3dyaXRlX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfdW5sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWFyY2hfc3Bpbl9sb2NrKCZsb2NrLT5yYXdfbG9jayk7Cit9CiAKLSNkZWZpbmUgcmVhZF9jYW5fbG9jayhyd2xvY2spCQlfX3Jhd19yZWFkX2Nhbl9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCi0jZGVmaW5lIHdyaXRlX2Nhbl9sb2NrKHJ3bG9jaykJCV9fcmF3X3dyaXRlX2Nhbl9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX3Jhd19zcGluX2xvY2tfZmxhZ3MocmF3X3NwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCWFyY2hfc3Bpbl9sb2NrX2ZsYWdzKCZsb2NrLT5yYXdfbG9jaywgKmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gYXJjaF9zcGluX3RyeWxvY2soJihsb2NrKS0+cmF3X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWFyY2hfc3Bpbl91bmxvY2soJmxvY2stPnJhd19sb2NrKTsKK30KKyNlbmRpZgogCiAvKgotICogRGVmaW5lIHRoZSB2YXJpb3VzIHNwaW5fbG9jayBhbmQgcndfbG9jayBtZXRob2RzLiAgTm90ZSB3ZSBkZWZpbmUgdGhlc2UKLSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBDT05GSUdfU01QIG9yIENPTkZJR19QUkVFTVBUIGFyZSBzZXQuIFRoZSB2YXJpb3VzCi0gKiBtZXRob2RzIGFyZSBkZWZpbmVkIGFzIG5vcHMgaW4gdGhlIGNhc2UgdGhleSBhcmUgbm90IHJlcXVpcmVkLgorICogRGVmaW5lIHRoZSB2YXJpb3VzIHNwaW5fbG9jayBtZXRob2RzLiAgTm90ZSB3ZSBkZWZpbmUgdGhlc2UKKyAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBDT05GSUdfU01QIG9yIENPTkZJR19QUkVFTVBUIGFyZSBzZXQuIFRoZQorICogdmFyaW91cyBtZXRob2RzIGFyZSBkZWZpbmVkIGFzIG5vcHMgaW4gdGhlIGNhc2UgdGhleSBhcmUgbm90CisgKiByZXF1aXJlZC4KICAqLwotI2RlZmluZSBzcGluX3RyeWxvY2sobG9jaykJCV9fY29uZF9sb2NrKGxvY2ssIF9zcGluX3RyeWxvY2sobG9jaykpCi0jZGVmaW5lIHJlYWRfdHJ5bG9jayhsb2NrKQkJX19jb25kX2xvY2sobG9jaywgX3JlYWRfdHJ5bG9jayhsb2NrKSkKLSNkZWZpbmUgd3JpdGVfdHJ5bG9jayhsb2NrKQkJX19jb25kX2xvY2sobG9jaywgX3dyaXRlX3RyeWxvY2sobG9jaykpCisjZGVmaW5lIHJhd19zcGluX3RyeWxvY2sobG9jaykJX19jb25kX2xvY2sobG9jaywgX3Jhd19zcGluX3RyeWxvY2sobG9jaykpCiAKLSNkZWZpbmUgc3Bpbl9sb2NrKGxvY2spCQkJX3NwaW5fbG9jayhsb2NrKQorI2RlZmluZSByYXdfc3Bpbl9sb2NrKGxvY2spCV9yYXdfc3Bpbl9sb2NrKGxvY2spCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotIyBkZWZpbmUgc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykgX3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpCi0jIGRlZmluZSBzcGluX2xvY2tfbmVzdF9sb2NrKGxvY2ssIG5lc3RfbG9jaykJCQkJXAorIyBkZWZpbmUgcmF3X3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIFwKKwlfcmF3X3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpCisKKyMgZGVmaW5lIHJhd19zcGluX2xvY2tfbmVzdF9sb2NrKGxvY2ssIG5lc3RfbG9jaykJCQlcCiAJIGRvIHsJCQkJCQkJCVwKIAkJIHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgJihuZXN0X2xvY2spLT5kZXBfbWFwKTtcCi0JCSBfc3Bpbl9sb2NrX25lc3RfbG9jayhsb2NrLCAmKG5lc3RfbG9jayktPmRlcF9tYXApOwlcCisJCSBfcmF3X3NwaW5fbG9ja19uZXN0X2xvY2sobG9jaywgJihuZXN0X2xvY2spLT5kZXBfbWFwKTsJXAogCSB9IHdoaWxlICgwKQogI2Vsc2UKLSMgZGVmaW5lIHNwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIF9zcGluX2xvY2sobG9jaykKLSMgZGVmaW5lIHNwaW5fbG9ja19uZXN0X2xvY2sobG9jaywgbmVzdF9sb2NrKSBfc3Bpbl9sb2NrKGxvY2spCisjIGRlZmluZSByYXdfc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykJCV9yYXdfc3Bpbl9sb2NrKGxvY2spCisjIGRlZmluZSByYXdfc3Bpbl9sb2NrX25lc3RfbG9jayhsb2NrLCBuZXN0X2xvY2spCV9yYXdfc3Bpbl9sb2NrKGxvY2spCiAjZW5kaWYKIAotI2RlZmluZSB3cml0ZV9sb2NrKGxvY2spCQlfd3JpdGVfbG9jayhsb2NrKQotI2RlZmluZSByZWFkX2xvY2sobG9jaykJCQlfcmVhZF9sb2NrKGxvY2spCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQogCi0jZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJCVwKKyNkZWZpbmUgcmF3X3NwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJCVwKIAlkbyB7CQkJCQkJXAogCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCi0JCWZsYWdzID0gX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJXAotCWRvIHsJCQkJCQlcCi0JCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CVwKLQkJZmxhZ3MgPSBfcmVhZF9sb2NrX2lycXNhdmUobG9jayk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSB3cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJXAotCWRvIHsJCQkJCQlcCi0JCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CVwKLQkJZmxhZ3MgPSBfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spOwlcCisJCWZsYWdzID0gX3Jhd19zcGluX2xvY2tfaXJxc2F2ZShsb2NrKTsJXAogCX0gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQobG9jaywgZmxhZ3MsIHN1YmNsYXNzKQkJCVwKKyNkZWZpbmUgcmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZChsb2NrLCBmbGFncywgc3ViY2xhc3MpCQlcCiAJZG8gewkJCQkJCQkJXAogCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwkJCVwKLQkJZmxhZ3MgPSBfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKTsJXAorCQlmbGFncyA9IF9yYXdfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKTsJXAogCX0gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQobG9jaywgZmxhZ3MsIHN1YmNsYXNzKQkJCVwKKyNkZWZpbmUgcmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZChsb2NrLCBmbGFncywgc3ViY2xhc3MpCQlcCiAJZG8gewkJCQkJCQkJXAogCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwkJCVwKLQkJZmxhZ3MgPSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jayk7CQkJXAorCQlmbGFncyA9IF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUobG9jayk7CQkJXAogCX0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2Vsc2UKIAotI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJCQlcCisjZGVmaW5lIHJhd19zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJCVwKIAlkbyB7CQkJCQkJXAogCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCi0JCV9zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncyk7CVwKKwkJX3Jhd19zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncyk7CVwKIAl9IHdoaWxlICgwKQotI2RlZmluZSByZWFkX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJCQlcCi0JZG8gewkJCQkJCVwKLQkJdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsJXAotCQlfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJCVwKLQlkbyB7CQkJCQkJXAotCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwlcCi0JCV93cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKGxvY2ssIGZsYWdzLCBzdWJjbGFzcykJXAotCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQorCisjZGVmaW5lIHJhd19zcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQobG9jaywgZmxhZ3MsIHN1YmNsYXNzKQlcCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQogCiAjZW5kaWYKIAotI2RlZmluZSBzcGluX2xvY2tfaXJxKGxvY2spCQlfc3Bpbl9sb2NrX2lycShsb2NrKQotI2RlZmluZSBzcGluX2xvY2tfYmgobG9jaykJCV9zcGluX2xvY2tfYmgobG9jaykKLSNkZWZpbmUgcmVhZF9sb2NrX2lycShsb2NrKQkJX3JlYWRfbG9ja19pcnEobG9jaykKLSNkZWZpbmUgcmVhZF9sb2NrX2JoKGxvY2spCQlfcmVhZF9sb2NrX2JoKGxvY2spCi0jZGVmaW5lIHdyaXRlX2xvY2tfaXJxKGxvY2spCQlfd3JpdGVfbG9ja19pcnEobG9jaykKLSNkZWZpbmUgd3JpdGVfbG9ja19iaChsb2NrKQkJX3dyaXRlX2xvY2tfYmgobG9jaykKLSNkZWZpbmUgc3Bpbl91bmxvY2sobG9jaykJCV9zcGluX3VubG9jayhsb2NrKQotI2RlZmluZSByZWFkX3VubG9jayhsb2NrKQkJX3JlYWRfdW5sb2NrKGxvY2spCi0jZGVmaW5lIHdyaXRlX3VubG9jayhsb2NrKQkJX3dyaXRlX3VubG9jayhsb2NrKQotI2RlZmluZSBzcGluX3VubG9ja19pcnEobG9jaykJCV9zcGluX3VubG9ja19pcnEobG9jaykKLSNkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spCQlfcmVhZF91bmxvY2tfaXJxKGxvY2spCi0jZGVmaW5lIHdyaXRlX3VubG9ja19pcnEobG9jaykJCV93cml0ZV91bmxvY2tfaXJxKGxvY2spCisjZGVmaW5lIHJhd19zcGluX2xvY2tfaXJxKGxvY2spCQlfcmF3X3NwaW5fbG9ja19pcnEobG9jaykKKyNkZWZpbmUgcmF3X3NwaW5fbG9ja19iaChsb2NrKQkJX3Jhd19zcGluX2xvY2tfYmgobG9jaykKKyNkZWZpbmUgcmF3X3NwaW5fdW5sb2NrKGxvY2spCQlfcmF3X3NwaW5fdW5sb2NrKGxvY2spCisjZGVmaW5lIHJhd19zcGluX3VubG9ja19pcnEobG9jaykJX3Jhd19zcGluX3VubG9ja19pcnEobG9jaykKIAotI2RlZmluZSBzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQkJXAotCWRvIHsJCQkJCQlcCi0JCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CVwKLQkJX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwlcCisjZGVmaW5lIHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQkJXAorCWRvIHsJCQkJCQkJXAorCQl0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgZmxhZ3MpOwkJXAorCQlfcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgc3Bpbl91bmxvY2tfYmgobG9jaykJCV9zcGluX3VubG9ja19iaChsb2NrKQorI2RlZmluZSByYXdfc3Bpbl91bmxvY2tfYmgobG9jaykJX3Jhd19zcGluX3VubG9ja19iaChsb2NrKQogCi0jZGVmaW5lIHJlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCQlcCi0JZG8gewkJCQkJCVwKLQkJdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsJXAotCQlfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSByZWFkX3VubG9ja19iaChsb2NrKQkJX3JlYWRfdW5sb2NrX2JoKGxvY2spCisjZGVmaW5lIHJhd19zcGluX3RyeWxvY2tfYmgobG9jaykgXAorCV9fY29uZF9sb2NrKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrX2JoKGxvY2spKQogCi0jZGVmaW5lIHdyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQkJXAotCWRvIHsJCQkJCQlcCi0JCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7CVwKLQkJX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsJXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIHdyaXRlX3VubG9ja19iaChsb2NrKQkJX3dyaXRlX3VubG9ja19iaChsb2NrKQotCi0jZGVmaW5lIHNwaW5fdHJ5bG9ja19iaChsb2NrKQlfX2NvbmRfbG9jayhsb2NrLCBfc3Bpbl90cnlsb2NrX2JoKGxvY2spKQotCi0jZGVmaW5lIHNwaW5fdHJ5bG9ja19pcnEobG9jaykgXAorI2RlZmluZSByYXdfc3Bpbl90cnlsb2NrX2lycShsb2NrKSBcCiAoeyBcCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsgXAotCXNwaW5fdHJ5bG9jayhsb2NrKSA/IFwKKwlyYXdfc3Bpbl90cnlsb2NrKGxvY2spID8gXAogCTEgOiAoeyBsb2NhbF9pcnFfZW5hYmxlKCk7IDA7ICB9KTsgXAogfSkKIAotI2RlZmluZSBzcGluX3RyeWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgXAorI2RlZmluZSByYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIFwKICh7IFwKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLQlzcGluX3RyeWxvY2sobG9jaykgPyBcCisJcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSA/IFwKIAkxIDogKHsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAwOyB9KTsgXAogfSkKIAotI2RlZmluZSB3cml0ZV90cnlsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIFwKLSh7IFwKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLQl3cml0ZV90cnlsb2NrKGxvY2spID8gXAotCTEgOiAoeyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IDA7IH0pOyBcCisvKioKKyAqIHJhd19zcGluX2Nhbl9sb2NrIC0gd291bGQgcmF3X3NwaW5fdHJ5bG9jaygpIHN1Y2NlZWQ/CisgKiBAbG9jazogdGhlIHNwaW5sb2NrIGluIHF1ZXN0aW9uLgorICovCisjZGVmaW5lIHJhd19zcGluX2Nhbl9sb2NrKGxvY2spCSghcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKQorCisvKiBJbmNsdWRlIHJ3bG9jayBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9yd2xvY2suaD4KKworLyoKKyAqIFB1bGwgdGhlIF9zcGluXyooKS9fcmVhZF8qKCkvX3dyaXRlXyooKSBmdW5jdGlvbnMvZGVjbGFyYXRpb25zOgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKyMgaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfYXBpX3NtcC5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfYXBpX3VwLmg+CisjZW5kaWYKKworLyoKKyAqIE1hcCB0aGUgc3Bpbl9sb2NrIGZ1bmN0aW9ucyB0byB0aGUgcmF3IHZhcmlhbnRzIGZvciBQUkVFTVBUX1JUPW4KKyAqLworCitzdGF0aWMgaW5saW5lIHJhd19zcGlubG9ja190ICpzcGlubG9ja19jaGVjayhzcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiAmbG9jay0+cmxvY2s7Cit9CisKKyNkZWZpbmUgc3Bpbl9sb2NrX2luaXQoX2xvY2spCQkJCVwKK2RvIHsJCQkJCQkJXAorCXNwaW5sb2NrX2NoZWNrKF9sb2NrKTsJCQkJXAorCXJhd19zcGluX2xvY2tfaW5pdCgmKF9sb2NrKS0+cmxvY2spOwkJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXJhd19zcGluX2xvY2soJmxvY2stPnJsb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9ja19iaChzcGlubG9ja190ICpsb2NrKQoreworCXJhd19zcGluX2xvY2tfYmgoJmxvY2stPnJsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIHJhd19zcGluX3RyeWxvY2soJmxvY2stPnJsb2NrKTsKK30KKworI2RlZmluZSBzcGluX2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyYXdfc3Bpbl9sb2NrX25lc3RlZChzcGlubG9ja19jaGVjayhsb2NrKSwgc3ViY2xhc3MpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNwaW5fbG9ja19uZXN0X2xvY2sobG9jaywgbmVzdF9sb2NrKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJhd19zcGluX2xvY2tfbmVzdF9sb2NrKHNwaW5sb2NrX2NoZWNrKGxvY2spLCBuZXN0X2xvY2spOwlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQoreworCXJhd19zcGluX2xvY2tfaXJxKCZsb2NrLT5ybG9jayk7Cit9CisKKyNkZWZpbmUgc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoc3BpbmxvY2tfY2hlY2sobG9jayksIGZsYWdzKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQobG9jaywgZmxhZ3MsIHN1YmNsYXNzKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZChzcGlubG9ja19jaGVjayhsb2NrKSwgZmxhZ3MsIHN1YmNsYXNzKTsgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmF3X3NwaW5fdW5sb2NrKCZsb2NrLT5ybG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19iaChzcGlubG9ja190ICpsb2NrKQoreworCXJhd19zcGluX3VubG9ja19iaCgmbG9jay0+cmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl91bmxvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmbG9jay0+cmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLT5ybG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcGluX3RyeWxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gcmF3X3NwaW5fdHJ5bG9ja19iaCgmbG9jay0+cmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcGluX3RyeWxvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIHJhd19zcGluX3RyeWxvY2tfaXJxKCZsb2NrLT5ybG9jayk7Cit9CisKKyNkZWZpbmUgc3Bpbl90cnlsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQkJXAorKHsJCQkJCQkJCVwKKwlyYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUoc3BpbmxvY2tfY2hlY2sobG9jayksIGZsYWdzKTsgXAogfSkKIAorc3RhdGljIGlubGluZSB2b2lkIHNwaW5fdW5sb2NrX3dhaXQoc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyYXdfc3Bpbl91bmxvY2tfd2FpdCgmbG9jay0+cmxvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcGluX2lzX2xvY2tlZChzcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiByYXdfc3Bpbl9pc19sb2NrZWQoJmxvY2stPnJsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3Bpbl9pc19jb250ZW5kZWQoc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gcmF3X3NwaW5faXNfY29udGVuZGVkKCZsb2NrLT5ybG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwaW5fY2FuX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gcmF3X3NwaW5fY2FuX2xvY2soJmxvY2stPnJsb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9zcGluX2xvY2tlZChzcGlubG9ja190ICpsb2NrKQoreworCWFzc2VydF9yYXdfc3Bpbl9sb2NrZWQoJmxvY2stPnJsb2NrKTsKK30KKwogLyoKICAqIFB1bGwgdGhlIGF0b21pY190IGRlY2xhcmF0aW9uOgogICogKGFzbS1taXBzL2F0b21pYy5oIG5lZWRzIGFib3ZlIGRlZmluaXRpb25zKQpAQCAtMzI5LDE5ICszOTMsNCBAQAogI2RlZmluZSBhdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pYywgbG9jaykgXAogCQlfX2NvbmRfbG9jayhsb2NrLCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWMsIGxvY2spKQogCi0vKioKLSAqIHNwaW5fY2FuX2xvY2sgLSB3b3VsZCBzcGluX3RyeWxvY2soKSBzdWNjZWVkPwotICogQGxvY2s6IHRoZSBzcGlubG9jayBpbiBxdWVzdGlvbi4KLSAqLwotI2RlZmluZSBzcGluX2Nhbl9sb2NrKGxvY2spCSghc3Bpbl9pc19sb2NrZWQobG9jaykpCi0KLS8qCi0gKiBQdWxsIHRoZSBfc3Bpbl8qKCkvX3JlYWRfKigpL193cml0ZV8qKCkgZnVuY3Rpb25zL2RlY2xhcmF0aW9uczoKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCi0jIGluY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX2FwaV91cC5oPgotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0xJTlVYX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKaW5kZXggODI2NGE3Zi4uZTI1M2NjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKQEAgLTE3LDE2NSArMTcsNzYgQEAKIAogaW50IGluX2xvY2tfZnVuY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLSNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKHgpCUJVR19PTighc3Bpbl9pc19sb2NrZWQoeCkpCisjZGVmaW5lIGFzc2VydF9yYXdfc3Bpbl9sb2NrZWQoeCkJQlVHX09OKCFyYXdfc3Bpbl9pc19sb2NrZWQoeCkpCiAKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKLQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfbmVzdF9sb2NrKHNwaW5sb2NrX3QgKmxvY2ssIHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwKQotCQkJCQkJCV9fYWNxdWlyZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19iaChyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCV9fYWNxdWlyZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Ci11bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnFzYXZlKHNwaW5sb2NrX3QgKmxvY2spCi0JCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKLXVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKLQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKLQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi0JCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKLWludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jayk7Ci1pbnQgX19sb2NrZnVuYyBfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKLWludCBfX2xvY2tmdW5jIF93cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKLWludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCQlfX3JlbGVhc2VzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykJCV9fcmVsZWFzZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykJCV9fcmVsZWFzZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCV9fcmVsZWFzZXMobG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQkJX19yZWxlYXNlcyhsb2NrKTsKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9ja19pcnFyZXN0b3JlKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0JCQkJCQkJX19yZWxlYXNlcyhsb2NrKTsKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKLQkJCQkJCQlfX3JlbGVhc2VzKGxvY2spOwotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKLQkJCQkJCQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQkJX19hY3F1aXJlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fbG9ja19uZXN0ZWQocmF3X3NwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKKwkJCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYworX3Jhd19zcGluX2xvY2tfbmVzdF9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrLCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcCkKKwkJCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fbG9ja19iaChyYXdfc3BpbmxvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3Jhd19zcGluX2xvY2tfaXJxKHJhd19zcGlubG9ja190ICpsb2NrKQorCQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOworCit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3Jhd19zcGluX2xvY2tfaXJxc2F2ZShyYXdfc3BpbmxvY2tfdCAqbG9jaykKKwkJCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKK3Vuc2lnbmVkIGxvbmcgX19sb2NrZnVuYworX3Jhd19zcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQocmF3X3NwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKKwkJCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKK2ludCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKTsKK2ludCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl90cnlsb2NrX2JoKHJhd19zcGlubG9ja190ICpsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQkJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fdW5sb2NrX2JoKHJhd19zcGlubG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl91bmxvY2tfaXJxKHJhd19zcGlubG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jCitfcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUocmF3X3NwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJCQkJCV9fcmVsZWFzZXMobG9jayk7CiAKICNpZmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSwotI2RlZmluZSBfc3Bpbl9sb2NrKGxvY2spIF9fc3Bpbl9sb2NrKGxvY2spCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLCi0jZGVmaW5lIF9yZWFkX2xvY2sobG9jaykgX19yZWFkX2xvY2sobG9jaykKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLCi0jZGVmaW5lIF93cml0ZV9sb2NrKGxvY2spIF9fd3JpdGVfbG9jayhsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fbG9jayhsb2NrKSBfX3Jhd19zcGluX2xvY2sobG9jaykKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkgKLSNkZWZpbmUgX3NwaW5fbG9ja19iaChsb2NrKSBfX3NwaW5fbG9ja19iaChsb2NrKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSAotI2RlZmluZSBfcmVhZF9sb2NrX2JoKGxvY2spIF9fcmVhZF9sb2NrX2JoKGxvY2spCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSAotI2RlZmluZSBfd3JpdGVfbG9ja19iaChsb2NrKSBfX3dyaXRlX2xvY2tfYmgobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2tfYmgobG9jaykgX19yYXdfc3Bpbl9sb2NrX2JoKGxvY2spCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUQotI2RlZmluZSBfc3Bpbl9sb2NrX2lycShsb2NrKSBfX3NwaW5fbG9ja19pcnEobG9jaykKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRCi0jZGVmaW5lIF9yZWFkX2xvY2tfaXJxKGxvY2spIF9fcmVhZF9sb2NrX2lycShsb2NrKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRCi0jZGVmaW5lIF93cml0ZV9sb2NrX2lycShsb2NrKSBfX3dyaXRlX2xvY2tfaXJxKGxvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2lycShsb2NrKSBfX3Jhd19zcGluX2xvY2tfaXJxKGxvY2spCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUKLSNkZWZpbmUgX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spIF9fc3Bpbl9sb2NrX2lycXNhdmUobG9jaykKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRQotI2RlZmluZSBfcmVhZF9sb2NrX2lycXNhdmUobG9jaykgX19yZWFkX2xvY2tfaXJxc2F2ZShsb2NrKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRQotI2RlZmluZSBfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spIF9fd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUobG9jaykgX19yYXdfc3Bpbl9sb2NrX2lycXNhdmUobG9jaykKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sKLSNkZWZpbmUgX3NwaW5fdHJ5bG9jayhsb2NrKSBfX3NwaW5fdHJ5bG9jayhsb2NrKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSwotI2RlZmluZSBfcmVhZF90cnlsb2NrKGxvY2spIF9fcmVhZF90cnlsb2NrKGxvY2spCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSwotI2RlZmluZSBfd3JpdGVfdHJ5bG9jayhsb2NrKSBfX3dyaXRlX3RyeWxvY2sobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX3RyeWxvY2sobG9jaykgX19yYXdfc3Bpbl90cnlsb2NrKGxvY2spCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JICi0jZGVmaW5lIF9zcGluX3RyeWxvY2tfYmgobG9jaykgX19zcGluX3RyeWxvY2tfYmgobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX3RyeWxvY2tfYmgobG9jaykgX19yYXdfc3Bpbl90cnlsb2NrX2JoKGxvY2spCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sKLSNkZWZpbmUgX3NwaW5fdW5sb2NrKGxvY2spIF9fc3Bpbl91bmxvY2sobG9jaykKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSwotI2RlZmluZSBfcmVhZF91bmxvY2sobG9jaykgX19yZWFkX3VubG9jayhsb2NrKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSwotI2RlZmluZSBfd3JpdGVfdW5sb2NrKGxvY2spIF9fd3JpdGVfdW5sb2NrKGxvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykgX19yYXdfc3Bpbl91bmxvY2sobG9jaykKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSAotI2RlZmluZSBfc3Bpbl91bmxvY2tfYmgobG9jaykgX19zcGluX3VubG9ja19iaChsb2NrKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JICi0jZGVmaW5lIF9yZWFkX3VubG9ja19iaChsb2NrKSBfX3JlYWRfdW5sb2NrX2JoKGxvY2spCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JICi0jZGVmaW5lIF93cml0ZV91bmxvY2tfYmgobG9jaykgX193cml0ZV91bmxvY2tfYmgobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX3VubG9ja19iaChsb2NrKSBfX3Jhd19zcGluX3VubG9ja19iaChsb2NrKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUQotI2RlZmluZSBfc3Bpbl91bmxvY2tfaXJxKGxvY2spIF9fc3Bpbl91bmxvY2tfaXJxKGxvY2spCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRCi0jZGVmaW5lIF9yZWFkX3VubG9ja19pcnEobG9jaykgX19yZWFkX3VubG9ja19pcnEobG9jaykKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRCi0jZGVmaW5lIF93cml0ZV91bmxvY2tfaXJxKGxvY2spIF9fd3JpdGVfdW5sb2NrX2lycShsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrX2lycShsb2NrKSBfX3Jhd19zcGluX3VubG9ja19pcnEobG9jaykKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFCi0jZGVmaW5lIF9zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBfX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgX19yYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFCi0jZGVmaW5lIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUKLSNkZWZpbmUgX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBfX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9fc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spKSB7CisJaWYgKGRvX3Jhd19zcGluX3RyeWxvY2sobG9jaykpIHsKIAkJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTE4MywyOCArOTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd19yZWFkX3RyeWxvY2sobG9jaykpIHsKLQkJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwotCQlyZXR1cm4gMTsKLQl9Ci0JcHJlZW1wdF9lbmFibGUoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX193cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQotewotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChfcmF3X3dyaXRlX3RyeWxvY2sobG9jaykpIHsKLQkJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXByZWVtcHRfZW5hYmxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBJZiBsb2NrZGVwIGlzIGVuYWJsZWQgdGhlbiB3ZSB1c2UgdGhlIG5vbi1wcmVlbXB0aW9uIHNwaW4tb3BzCiAgKiBldmVuIG9uIENPTkZJR19QUkVFTVBULCBiZWNhdXNlIGxvY2tkZXAgYXNzdW1lcyB0aGF0IGludGVycnVwdHMgYXJlCkBAIC0yMTIsMTQgKzEwMSw3IEBACiAgKi8KICNpZiAhZGVmaW5lZChDT05GSUdfR0VORVJJQ19MT0NLQlJFQUspIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlyd2xvY2tfYWNxdWlyZV9yZWFkKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19yZWFkX3RyeWxvY2ssIF9yYXdfcmVhZF9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc3Bpbl9sb2NrX2lycXNhdmUoc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19zcGluX2xvY2tfaXJxc2F2ZShyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMjgsMjA1ICsxMTAsNzkgQEAKIAlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKIAkvKgogCSAqIE9uIGxvY2tkZXAgd2UgZG9udCB3YW50IHRoZSBoYW5kLWNvZGVkIGlycS1lbmFibGUgb2YKLQkgKiBfcmF3X3NwaW5fbG9ja19mbGFncygpIGNvZGUsIGJlY2F1c2UgbG9ja2RlcCBhc3N1bWVzCisJICogZG9fcmF3X3NwaW5fbG9ja19mbGFncygpIGNvZGUsIGJlY2F1c2UgbG9ja2RlcCBhc3N1bWVzCiAJICogdGhhdCBpbnRlcnJ1cHRzIGFyZSBub3QgcmUtZW5hYmxlZCBkdXJpbmcgbG9jay1hY3F1aXJlOgogCSAqLwogI2lmZGVmIENPTkZJR19MT0NLREVQCi0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfc3Bpbl90cnlsb2NrLCBkb19yYXdfc3Bpbl9sb2NrKTsKICNlbHNlCi0JX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgJmZsYWdzKTsKKwlkb19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssICZmbGFncyk7CiAjZW5kaWYKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NwaW5fbG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2tfaXJxKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfc3Bpbl90cnlsb2NrLCBkb19yYXdfc3Bpbl9sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fc3Bpbl9sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2JoKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3NwaW5fdHJ5bG9jaywgX3Jhd19zcGluX2xvY2spOworCUxPQ0tfQ09OVEVOREVEKGxvY2ssIGRvX3Jhd19zcGluX3RyeWxvY2ssIGRvX3Jhd19zcGluX2xvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yZWFkX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2ssCi0JCQkgICAgIF9yYXdfcmVhZF9sb2NrX2ZsYWdzLCAmZmxhZ3MpOwotCXJldHVybiBmbGFnczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCi17Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX193cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEX0ZMQUdTKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrLAotCQkJICAgICBfcmF3X3dyaXRlX2xvY2tfZmxhZ3MsICZmbGFncyk7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd193cml0ZV90cnlsb2NrLCBfcmF3X3dyaXRlX2xvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQotewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwogCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3dyaXRlX3RyeWxvY2ssIF9yYXdfd3JpdGVfbG9jayk7CisJTE9DS19DT05URU5ERUQobG9jaywgZG9fcmF3X3NwaW5fdHJ5bG9jaywgZG9fcmF3X3NwaW5fbG9jayk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7CisJZG9fcmF3X3NwaW5fdW5sb2NrKGxvY2spOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlYWRfdW5sb2NrKHJ3bG9ja190ICpsb2NrKQotewotCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7Ci0JX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zcGluX3VubG9ja19pcnFyZXN0b3JlKHNwaW5sb2NrX3QgKmxvY2ssCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXdfc3BpbmxvY2tfdCAqbG9jaywKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3Bpbl9yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7Ci0JX3Jhd19zcGluX3VubG9jayhsb2NrKTsKKwlkb19yYXdfc3Bpbl91bmxvY2sobG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NwaW5fdW5sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX2lycShyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOworCWRvX3Jhd19zcGluX3VubG9jayhsb2NrKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fc3Bpbl91bmxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja19iaChyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOworCWRvX3Jhd19zcGluX3VubG9jayhsb2NrKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJbG9jYWxfYmhfZW5hYmxlX2lwKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3JlYWRfdW5sb2NrKGxvY2spOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX3VubG9ja19pcnEocndsb2NrX3QgKmxvY2spCi17Ci0Jcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3JlYWRfdW5sb2NrKGxvY2spOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykKLXsKLQlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfcmVhZF91bmxvY2sobG9jayk7Ci0JcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7Ci0JX3Jhd193cml0ZV91bmxvY2sobG9jayk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlX3VubG9ja19pcnEocndsb2NrX3QgKmxvY2spCi17Ci0Jcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQotewotCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7Ci0JX3Jhd193cml0ZV91bmxvY2sobG9jayk7Ci0JcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBfX3NwaW5fdHJ5bG9ja19iaChzcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrX2JoKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd19zcGluX3RyeWxvY2sobG9jaykpIHsKKwlpZiAoZG9fcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSkgewogCQlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDM1LDQgKzE5MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpbmNsdWRlIDxsaW51eC9yd2xvY2tfYXBpX3NtcC5oPgorCiAjZW5kaWYgLyogX19MSU5VWF9TUElOTE9DS19BUElfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3VwLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oCmluZGV4IDA0ZTFkMzEuLmFmMWY0NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfdXAuaApAQCAtMTYsNyArMTYsNyBAQAogCiAjZGVmaW5lIGluX2xvY2tfZnVuY3Rpb25zKEFERFIpCQkwCiAKLSNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorI2RlZmluZSBhc3NlcnRfcmF3X3NwaW5fbG9ja2VkKGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQogCiAvKgogICogSW4gdGhlIFVQLW5vbmRlYnVnIGNhc2UgdGhlcmUncyBubyByZWFsIGxvY2tpbmcgZ29pbmcgb24sIHNvIHRoZQpAQCAtNDAsNyArNDAsOCBAQAogICBkbyB7IHByZWVtcHRfZW5hYmxlKCk7IF9fcmVsZWFzZShsb2NrKTsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9fVU5MT0NLX0JIKGxvY2spIFwKLSAgZG8geyBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7IGxvY2FsX2JoX2VuYWJsZSgpOyBfX3JlbGVhc2UobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKyAgZG8geyBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7IGxvY2FsX2JoX2VuYWJsZSgpOyBcCisJICBfX3JlbGVhc2UobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfX1VOTE9DS19JUlEobG9jaykgXAogICBkbyB7IGxvY2FsX2lycV9lbmFibGUoKTsgX19VTkxPQ0sobG9jayk7IH0gd2hpbGUgKDApCkBAIC00OCwzNCArNDksMzcgQEAKICNkZWZpbmUgX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykgXAogICBkbyB7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgX19VTkxPQ0sobG9jayk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgX3NwaW5fbG9jayhsb2NrKQkJCV9fTE9DSyhsb2NrKQotI2RlZmluZSBfc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykJX19MT0NLKGxvY2spCi0jZGVmaW5lIF9yZWFkX2xvY2sobG9jaykJCQlfX0xPQ0sobG9jaykKLSNkZWZpbmUgX3dyaXRlX2xvY2sobG9jaykJCQlfX0xPQ0sobG9jaykKLSNkZWZpbmUgX3NwaW5fbG9ja19iaChsb2NrKQkJCV9fTE9DS19CSChsb2NrKQotI2RlZmluZSBfcmVhZF9sb2NrX2JoKGxvY2spCQkJX19MT0NLX0JIKGxvY2spCi0jZGVmaW5lIF93cml0ZV9sb2NrX2JoKGxvY2spCQkJX19MT0NLX0JIKGxvY2spCi0jZGVmaW5lIF9zcGluX2xvY2tfaXJxKGxvY2spCQkJX19MT0NLX0lSUShsb2NrKQotI2RlZmluZSBfcmVhZF9sb2NrX2lycShsb2NrKQkJCV9fTE9DS19JUlEobG9jaykKLSNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxKGxvY2spCQkJX19MT0NLX0lSUShsb2NrKQotI2RlZmluZSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCQlfX0xPQ0tfSVJRU0FWRShsb2NrLCBmbGFncykKLSNkZWZpbmUgX3JlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQkJX19MT0NLX0lSUVNBVkUobG9jaywgZmxhZ3MpCi0jZGVmaW5lIF93cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCV9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKQotI2RlZmluZSBfc3Bpbl90cnlsb2NrKGxvY2spCQkJKHsgX19MT0NLKGxvY2spOyAxOyB9KQotI2RlZmluZSBfcmVhZF90cnlsb2NrKGxvY2spCQkJKHsgX19MT0NLKGxvY2spOyAxOyB9KQotI2RlZmluZSBfd3JpdGVfdHJ5bG9jayhsb2NrKQkJCSh7IF9fTE9DSyhsb2NrKTsgMTsgfSkKLSNkZWZpbmUgX3NwaW5fdHJ5bG9ja19iaChsb2NrKQkJCSh7IF9fTE9DS19CSChsb2NrKTsgMTsgfSkKLSNkZWZpbmUgX3NwaW5fdW5sb2NrKGxvY2spCQkJX19VTkxPQ0sobG9jaykKLSNkZWZpbmUgX3JlYWRfdW5sb2NrKGxvY2spCQkJX19VTkxPQ0sobG9jaykKLSNkZWZpbmUgX3dyaXRlX3VubG9jayhsb2NrKQkJCV9fVU5MT0NLKGxvY2spCi0jZGVmaW5lIF9zcGluX3VubG9ja19iaChsb2NrKQkJCV9fVU5MT0NLX0JIKGxvY2spCi0jZGVmaW5lIF93cml0ZV91bmxvY2tfYmgobG9jaykJCQlfX1VOTE9DS19CSChsb2NrKQotI2RlZmluZSBfcmVhZF91bmxvY2tfYmgobG9jaykJCQlfX1VOTE9DS19CSChsb2NrKQotI2RlZmluZSBfc3Bpbl91bmxvY2tfaXJxKGxvY2spCQkJX19VTkxPQ0tfSVJRKGxvY2spCi0jZGVmaW5lIF9yZWFkX3VubG9ja19pcnEobG9jaykJCQlfX1VOTE9DS19JUlEobG9jaykKLSNkZWZpbmUgX3dyaXRlX3VubG9ja19pcnEobG9jaykJCQlfX1VOTE9DS19JUlEobG9jaykKLSNkZWZpbmUgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCV9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCi0jZGVmaW5lIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQlfX1VOTE9DS19JUlFSRVNUT1JFKGxvY2ssIGZsYWdzKQotI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCV9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrKGxvY2spCQkJX19MT0NLKGxvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykJX19MT0NLKGxvY2spCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrKGxvY2spCQkJX19MT0NLKGxvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfbG9jayhsb2NrKQkJCV9fTE9DSyhsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fbG9ja19iaChsb2NrKQkJCV9fTE9DS19CSChsb2NrKQorI2RlZmluZSBfcmF3X3JlYWRfbG9ja19iaChsb2NrKQkJCV9fTE9DS19CSChsb2NrKQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfYmgobG9jaykJCV9fTE9DS19CSChsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fbG9ja19pcnEobG9jaykJCV9fTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfaXJxKGxvY2spCQlfX0xPQ0tfSVJRKGxvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfbG9ja19pcnEobG9jaykJCV9fTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJX19MT0NLX0lSUVNBVkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCV9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykJX19MT0NLX0lSUVNBVkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spCQkJKHsgX19MT0NLKGxvY2spOyAxOyB9KQorI2RlZmluZSBfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQkJCSh7IF9fTE9DSyhsb2NrKTsgMTsgfSkKKyNkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKGxvY2spCQkJKHsgX19MT0NLKGxvY2spOyAxOyB9KQorI2RlZmluZSBfcmF3X3NwaW5fdHJ5bG9ja19iaChsb2NrKQkJKHsgX19MT0NLX0JIKGxvY2spOyAxOyB9KQorI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spCQkJX19VTkxPQ0sobG9jaykKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhsb2NrKQkJCV9fVU5MT0NLKGxvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrKGxvY2spCQkJX19VTkxPQ0sobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX3VubG9ja19iaChsb2NrKQkJX19VTkxPQ0tfQkgobG9jaykKKyNkZWZpbmUgX3Jhd193cml0ZV91bmxvY2tfYmgobG9jaykJCV9fVU5MT0NLX0JIKGxvY2spCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2tfYmgobG9jaykJCV9fVU5MT0NLX0JIKGxvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2tfaXJxKGxvY2spCQlfX1VOTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9ja19pcnEobG9jaykJCV9fVU5MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfcmF3X3dyaXRlX3VubG9ja19pcnEobG9jaykJCV9fVU5MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIFwKKwkJCQkJX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBcCisJCQkJCV9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9yYXdfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIFwKKwkJCQkJX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykKIAogI2VuZGlmIC8qIF9fTElOVVhfU1BJTkxPQ0tfQVBJX1VQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXMuaAppbmRleCA2OGQ4OGY3Li44NTFiNzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja190eXBlcy5oCkBAIC0xNyw4ICsxNyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAKLXR5cGVkZWYgc3RydWN0IHsKLQlyYXdfc3BpbmxvY2tfdCByYXdfbG9jazsKK3R5cGVkZWYgc3RydWN0IHJhd19zcGlubG9jayB7CisJYXJjaF9zcGlubG9ja190IHJhd19sb2NrOwogI2lmZGVmIENPTkZJR19HRU5FUklDX0xPQ0tCUkVBSwogCXVuc2lnbmVkIGludCBicmVha19sb2NrOwogI2VuZGlmCkBAIC0yOSwyNiArMjksMTAgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOwogI2VuZGlmCi19IHNwaW5sb2NrX3Q7Cit9IHJhd19zcGlubG9ja190OwogCiAjZGVmaW5lIFNQSU5MT0NLX01BR0lDCQkweGRlYWQ0ZWFkCiAKLXR5cGVkZWYgc3RydWN0IHsKLQlyYXdfcndsb2NrX3QgcmF3X2xvY2s7Ci0jaWZkZWYgQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLCi0JdW5zaWduZWQgaW50IGJyZWFrX2xvY2s7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKLQl1bnNpZ25lZCBpbnQgbWFnaWMsIG93bmVyX2NwdTsKLQl2b2lkICpvd25lcjsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCi0Jc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7Ci0jZW5kaWYKLX0gcndsb2NrX3Q7Ci0KLSNkZWZpbmUgUldMT0NLX01BR0lDCQkweGRlYWYxZWVkCi0KICNkZWZpbmUgU1BJTkxPQ0tfT1dORVJfSU5JVAkoKHZvaWQgKiktMUwpCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwpAQCAtNTcsNDQgKzQxLDU2IEBACiAjIGRlZmluZSBTUElOX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLSMgZGVmaW5lIFJXX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkJLmRlcF9tYXAgPSB7IC5uYW1lID0gI2xvY2tuYW1lIH0KKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyMgZGVmaW5lIFNQSU5fREVCVUdfSU5JVChsb2NrbmFtZSkJCVwKKwkubWFnaWMgPSBTUElOTE9DS19NQUdJQywJCVwKKwkub3duZXJfY3B1ID0gLTEsCQkJXAorCS5vd25lciA9IFNQSU5MT0NLX09XTkVSX0lOSVQsCiAjZWxzZQotIyBkZWZpbmUgUldfREVQX01BUF9JTklUKGxvY2tuYW1lKQorIyBkZWZpbmUgU1BJTl9ERUJVR19JTklUKGxvY2tuYW1lKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKLSMgZGVmaW5lIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKQkJCQkJXAotCShzcGlubG9ja190KQl7CS5yYXdfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwJXAotCQkJCS5tYWdpYyA9IFNQSU5MT0NLX01BR0lDLAkJXAotCQkJCS5vd25lciA9IFNQSU5MT0NLX09XTkVSX0lOSVQsCQlcCi0JCQkJLm93bmVyX2NwdSA9IC0xLAkJCVwKLQkJCQlTUElOX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkgfQotI2RlZmluZSBfX1JXX0xPQ0tfVU5MT0NLRUQobG9ja25hbWUpCQkJCQlcCi0JKHJ3bG9ja190KQl7CS5yYXdfbG9jayA9IF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQsCVwKLQkJCQkubWFnaWMgPSBSV0xPQ0tfTUFHSUMsCQkJXAotCQkJCS5vd25lciA9IFNQSU5MT0NLX09XTkVSX0lOSVQsCQlcCi0JCQkJLm93bmVyX2NwdSA9IC0xLAkJCVwKLQkJCQlSV19ERVBfTUFQX0lOSVQobG9ja25hbWUpIH0KLSNlbHNlCi0jIGRlZmluZSBfX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgXAotCShzcGlubG9ja190KQl7CS5yYXdfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwJXAotCQkJCVNQSU5fREVQX01BUF9JTklUKGxvY2tuYW1lKSB9Ci0jZGVmaW5lIF9fUldfTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgXAotCShyd2xvY2tfdCkJewkucmF3X2xvY2sgPSBfX1JBV19SV19MT0NLX1VOTE9DS0VELAlcCi0JCQkJUldfREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CisjZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19JTklUSUFMSVpFUihsb2NrbmFtZSkJXAorCXsJCQkJCVwKKwkucmF3X2xvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VELAlcCisJU1BJTl9ERUJVR19JTklUKGxvY2tuYW1lKQkJXAorCVNQSU5fREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CisKKyNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKQlcCisJKHJhd19zcGlubG9ja190KSBfX1JBV19TUElOX0xPQ0tfSU5JVElBTElaRVIobG9ja25hbWUpCisKKyNkZWZpbmUgREVGSU5FX1JBV19TUElOTE9DSyh4KQlyYXdfc3BpbmxvY2tfdCB4ID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHgpCisKK3R5cGVkZWYgc3RydWN0IHNwaW5sb2NrIHsKKwl1bmlvbiB7CisJCXN0cnVjdCByYXdfc3BpbmxvY2sgcmxvY2s7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgTE9DS19QQURTSVpFIChvZmZzZXRvZihzdHJ1Y3QgcmF3X3NwaW5sb2NrLCBkZXBfbWFwKSkKKwkJc3RydWN0IHsKKwkJCXU4IF9fcGFkZGluZ1tMT0NLX1BBRFNJWkVdOworCQkJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CisJCX07CiAjZW5kaWYKKwl9OworfSBzcGlubG9ja190OworCisjZGVmaW5lIF9fU1BJTl9MT0NLX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSBcCisJeyB7IC5ybG9jayA9IF9fUkFXX1NQSU5fTE9DS19JTklUSUFMSVpFUihsb2NrbmFtZSkgfSB9CisKKyNkZWZpbmUgX19TUElOX0xPQ0tfVU5MT0NLRUQobG9ja25hbWUpIFwKKwkoc3BpbmxvY2tfdCApIF9fU1BJTl9MT0NLX0lOSVRJQUxJWkVSKGxvY2tuYW1lKQogCiAvKgotICogU1BJTl9MT0NLX1VOTE9DS0VEIGFuZCBSV19MT0NLX1VOTE9DS0VEIGRlZmVhdCBsb2NrZGVwIHN0YXRlIHRyYWNraW5nIGFuZAotICogYXJlIGhlbmNlIGRlcHJlY2F0ZWQuCi0gKiBQbGVhc2UgdXNlIERFRklORV9TUElOTE9DSygpL0RFRklORV9SV0xPQ0soKSBvcgotICogX19TUElOX0xPQ0tfVU5MT0NLRUQoKS9fX1JXX0xPQ0tfVU5MT0NLRUQoKSBhcyBhcHByb3ByaWF0ZS4KKyAqIFNQSU5fTE9DS19VTkxPQ0tFRCBkZWZlYXRzIGxvY2tkZXAgc3RhdGUgdHJhY2tpbmcgYW5kIGlzIGhlbmNlCisgKiBkZXByZWNhdGVkLgorICogUGxlYXNlIHVzZSBERUZJTkVfU1BJTkxPQ0soKSBvciBfX1NQSU5fTE9DS19VTkxPQ0tFRCgpIGFzCisgKiBhcHByb3ByaWF0ZS4KICAqLwogI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQJX19TUElOX0xPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3NwaW5faW5pdCkKLSNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAlfX1JXX0xPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3J3X2luaXQpCiAKICNkZWZpbmUgREVGSU5FX1NQSU5MT0NLKHgpCXNwaW5sb2NrX3QgeCA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHgpCi0jZGVmaW5lIERFRklORV9SV0xPQ0soeCkJcndsb2NrX3QgeCA9IF9fUldfTE9DS19VTkxPQ0tFRCh4KQorCisjaW5jbHVkZSA8bGludXgvcndsb2NrX3R5cGVzLmg+CiAKICNlbmRpZiAvKiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXNfdXAuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXNfdXAuaAppbmRleCAwNDEzNWIwLi5jMDliNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja190eXBlc191cC5oCkBAIC0xNiwyMiArMTYsMjIgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzbG9jazsKLX0gcmF3X3NwaW5sb2NrX3Q7Cit9IGFyY2hfc3BpbmxvY2tfdDsKIAotI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgeyAxIH0KKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRCB7IDEgfQogCiAjZWxzZQogCi10eXBlZGVmIHN0cnVjdCB7IH0gcmF3X3NwaW5sb2NrX3Q7Cit0eXBlZGVmIHN0cnVjdCB7IH0gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCB7IH0KKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRCB7IH0KIAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvKiBubyBkZWJ1ZyB2ZXJzaW9uIG9uIFVQICovCi19IHJhd19yd2xvY2tfdDsKK30gYXJjaF9yd2xvY2tfdDsKIAotI2RlZmluZSBfX1JBV19SV19MT0NLX1VOTE9DS0VEIHsgfQorI2RlZmluZSBfX0FSQ0hfUldfTE9DS19VTkxPQ0tFRCB7IH0KIAogI2VuZGlmIC8qIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9ja191cC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja191cC5oCmluZGV4IGQ0ODQxZWQuLmIxNGY2YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3VwLmgKQEAgLTE4LDIxICsxOCwyMSBAQAogICovCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQoeCkJCSgoeCktPnNsb2NrID09IDApCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQoeCkJCSgoeCktPnNsb2NrID09IDApCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX2xvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWxvY2stPnNsb2NrID0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1fX3Jhd19zcGluX2xvY2tfZmxhZ3MocmF3X3NwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCithcmNoX3NwaW5fbG9ja19mbGFncyhhcmNoX3NwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxvY2stPnNsb2NrID0gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWNoYXIgb2xkdmFsID0gbG9jay0+c2xvY2s7CiAKQEAgLTQxLDcgKzQxLDcgQEAKIAlyZXR1cm4gb2xkdmFsID4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3Bpbl91bmxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWxvY2stPnNsb2NrID0gMTsKIH0KQEAgLTQ5LDI4ICs0OSwyOCBAQAogLyoKICAqIFJlYWQtd3JpdGUgc3BpbmxvY2tzLiBObyBkZWJ1ZyB2ZXJzaW9uLgogICovCi0jZGVmaW5lIF9fcmF3X3JlYWRfbG9jayhsb2NrKQkJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2sobG9jaykJCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQotI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2sobG9jaykJKHsgKHZvaWQpKGxvY2spOyAxOyB9KQotI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKGxvY2spCSh7ICh2b2lkKShsb2NrKTsgMTsgfSkKLSNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2sobG9jaykJCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQotI2RlZmluZSBfX3Jhd193cml0ZV91bmxvY2sobG9jaykJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFyY2hfcmVhZF9sb2NrKGxvY2spCQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrKGxvY2spCQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXJjaF9yZWFkX3RyeWxvY2sobG9jaykJKHsgKHZvaWQpKGxvY2spOyAxOyB9KQorI2RlZmluZSBhcmNoX3dyaXRlX3RyeWxvY2sobG9jaykJKHsgKHZvaWQpKGxvY2spOyAxOyB9KQorI2RlZmluZSBhcmNoX3JlYWRfdW5sb2NrKGxvY2spCQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXJjaF93cml0ZV91bmxvY2sobG9jaykJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCiAKICNlbHNlIC8qIERFQlVHX1NQSU5MT0NLICovCi0jZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spCSgodm9pZCkobG9jayksIDApCisjZGVmaW5lIGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykJKCh2b2lkKShsb2NrKSwgMCkKIC8qIGZvciBzY2hlZC5jIGFuZCBrZXJuZWxfbG9jay5jOiAqLwotIyBkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spCQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBfX3Jhd19zcGluX3VubG9jayhsb2NrKQlkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIF9fcmF3X3NwaW5fdHJ5bG9jayhsb2NrKQkoeyAodm9pZCkobG9jayk7IDE7IH0pCisjIGRlZmluZSBhcmNoX3NwaW5fbG9jayhsb2NrKQkJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBhcmNoX3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykJZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBhcmNoX3NwaW5fdW5sb2NrKGxvY2spCWRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgYXJjaF9zcGluX3RyeWxvY2sobG9jaykJKHsgKHZvaWQpKGxvY2spOyAxOyB9KQogI2VuZGlmIC8qIERFQlVHX1NQSU5MT0NLICovCiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQobG9jaykJKCgodm9pZCkobG9jayksIDApKQorI2RlZmluZSBhcmNoX3NwaW5faXNfY29udGVuZGVkKGxvY2spCSgoKHZvaWQpKGxvY2spLCAwKSkKIAotI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKGxvY2spCSgoKHZvaWQpKGxvY2spLCAxKSkKLSNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2sobG9jaykJKCgodm9pZCkobG9jayksIDEpKQorI2RlZmluZSBhcmNoX3JlYWRfY2FuX2xvY2sobG9jaykJKCgodm9pZCkobG9jayksIDEpKQorI2RlZmluZSBhcmNoX3dyaXRlX2Nhbl9sb2NrKGxvY2spCSgoKHZvaWQpKGxvY2spLCAxKSkKIAotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQkJZG8geyBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpCisjZGVmaW5lIGFyY2hfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCisJCWRvIHsgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKGFyY2hfc3Bpbl9pc19sb2NrZWQobG9jaykpCiAKICNlbmRpZiAvKiBfX0xJTlVYX1NQSU5MT0NLX1VQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RtbWFjLmggYi9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYmZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSGVhZGVyIGZpbGUgZm9yIHN0bW1hYyBwbGF0Zm9ybSBkYXRhCisKKyAgQ29weXJpZ2h0IChDKSAyMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fU1RNTUFDX1BMQVRGT1JNX0RBVEEKKyNkZWZpbmUgX19TVE1NQUNfUExBVEZPUk1fREFUQQorCisvKiBwbGF0ZnJvbSBkYXRhIGZvciBwbGF0ZnJvbSBkZXZpY2Ugc3RydWN0dXJlJ3MgcGxhdGZyb21fZGF0YSBmaWVsZCAqLworCisvKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBTVE0gb24tYm9hcmQgZXRoZXJuZXQgZHJpdmVyICovCitzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgeworCWludCBidXNfaWQ7CisJaW50IHBibDsKKwlpbnQgaGFzX2dtYWM7CisJdm9pZCAoKmZpeF9tYWNfc3BlZWQpKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBzcGVlZCk7CisJdm9pZCAoKmJ1c19zZXR1cCkodW5zaWduZWQgbG9uZyBpb2FkZHIpOworI2lmZGVmIENPTkZJR19TVE1fRFJJVkVSUworCXN0cnVjdCBzdG1fcGFkX2NvbmZpZyAqcGFkX2NvbmZpZzsKKyNlbmRpZgorCXZvaWQgKmJzcF9wcml2OworfTsKKworc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgeworCWludCBidXNfaWQ7CisJaW50IHBoeV9hZGRyOworCXVuc2lnbmVkIGludCBwaHlfbWFzazsKKwlpbnQgaW50ZXJmYWNlOworCWludCAoKnBoeV9yZXNldCkodm9pZCAqcHJpdik7CisJdm9pZCAqcHJpdjsKK307CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggYjg1MDg4Ni4uNjUxODM5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC02Miw3ICs2MiwxNSBAQAogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJSQ0hSCiBleHRlcm4gY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAqLGludCk7CiAjZW5kaWYKLWV4dGVybiBjaGFyICogX19tdXN0X2NoZWNrIHN0cnN0cmlwKGNoYXIgKik7CitleHRlcm4gY2hhciAqIF9fbXVzdF9jaGVjayBza2lwX3NwYWNlcyhjb25zdCBjaGFyICopOworCitleHRlcm4gY2hhciAqc3RyaW0oY2hhciAqKTsKKworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgY2hhciAqc3Ryc3RyaXAoY2hhciAqc3RyKQoreworCXJldHVybiBzdHJpbShzdHIpOworfQorCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNUUgogZXh0ZXJuIGNoYXIgKiBzdHJzdHIoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCmluZGV4IDEwNzA5Y2JlLi5jMjc4NmYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTI4LDkgKzI4LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0KIC8qCiAgKiBFbmFibGUgUlBDIGRlYnVnZ2luZy9wcm9maWxpbmcuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19yZG1hLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcmRtYS5oCmluZGV4IDg3Yjg5NWQuLmI3OGYxNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19yZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvcnBjX3JkbWEuaApAQCAtNDAsNiArNDAsOCBAQAogI2lmbmRlZiBfTElOVVhfU1VOUlBDX1JQQ19SRE1BX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19SUENfUkRNQV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgcnBjcmRtYV9zZWdtZW50IHsKIAlfX2JlMzIgcnNfaGFuZGxlOwkvKiBSZWdpc3RlcmVkIG1lbW9yeSBoYW5kbGUgKi8KIAlfX2JlMzIgcnNfbGVuZ3RoOwkvKiBMZW5ndGggb2YgdGhlIGNodW5rIGluIGJ5dGVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAppbmRleCA0MDEwOTc3Li43YmM3ZmQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTEzMCwxMiArMTMwLDE0IEBACiAjZGVmaW5lIFJQQ19UQVNLX0RZTkFNSUMJMHgwMDgwCQkvKiB0YXNrIHdhcyBrbWFsbG9jJ2VkICovCiAjZGVmaW5lIFJQQ19UQVNLX0tJTExFRAkJMHgwMTAwCQkvKiB0YXNrIHdhcyBraWxsZWQgKi8KICNkZWZpbmUgUlBDX1RBU0tfU09GVAkJMHgwMjAwCQkvKiBVc2Ugc29mdCB0aW1lb3V0cyAqLworI2RlZmluZSBSUENfVEFTS19TT0ZUQ09OTgkweDA0MDAJCS8qIEZhaWwgaWYgY2FuJ3QgY29ubmVjdCAqLwogCiAjZGVmaW5lIFJQQ19JU19BU1lOQyh0KQkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19BU1lOQykKICNkZWZpbmUgUlBDX0lTX1NXQVBQRVIodCkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TV0FQUEVSKQogI2RlZmluZSBSUENfRE9fUk9PVE9WRVJSSURFKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfUk9PVENSRURTKQogI2RlZmluZSBSUENfQVNTQVNTSU5BVEVEKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfS0lMTEVEKQogI2RlZmluZSBSUENfSVNfU09GVCh0KQkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TT0ZUKQorI2RlZmluZSBSUENfSVNfU09GVENPTk4odCkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TT0ZUQ09OTikKIAogI2RlZmluZSBSUENfVEFTS19SVU5OSU5HCTAKICNkZWZpbmUgUlBDX1RBU0tfUVVFVUVECQkxCkBAIC0xNzEsNyArMTczLDggQEAKICNkZWZpbmUgUlBDX1BSSU9SSVRZX0xPVwkoLTEpCiAjZGVmaW5lIFJQQ19QUklPUklUWV9OT1JNQUwJKDApCiAjZGVmaW5lIFJQQ19QUklPUklUWV9ISUdICSgxKQotI2RlZmluZSBSUENfTlJfUFJJT1JJVFkJCSgxICsgUlBDX1BSSU9SSVRZX0hJR0ggLSBSUENfUFJJT1JJVFlfTE9XKQorI2RlZmluZSBSUENfUFJJT1JJVFlfUFJJVklMRUdFRAkoMikKKyNkZWZpbmUgUlBDX05SX1BSSU9SSVRZCQkoMSArIFJQQ19QUklPUklUWV9QUklWSUxFR0VEIC0gUlBDX1BSSU9SSVRZX0xPVykKIAogc3RydWN0IHJwY190aW1lciB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CkBAIC0yMjcsNiArMjMwLDcgQEAKIHZvaWQJCXJwY193YWtlX3VwKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqKTsKIHN0cnVjdCBycGNfdGFzayAqcnBjX3dha2VfdXBfbmV4dChzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKik7CiB2b2lkCQlycGNfd2FrZV91cF9zdGF0dXMoc3RydWN0IHJwY193YWl0X3F1ZXVlICosIGludCk7CitpbnQJCXJwY19xdWV1ZV9lbXB0eShzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKik7CiB2b2lkCQlycGNfZGVsYXkoc3RydWN0IHJwY190YXNrICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCAqCQlycGNfbWFsbG9jKHN0cnVjdCBycGNfdGFzayAqLCBzaXplX3QpOwogdm9pZAkJcnBjX2ZyZWUodm9pZCAqKTsKQEAgLTI1Miw2ICsyNTYsMTYgQEAKIAlyZXR1cm4gX19ycGNfd2FpdF9mb3JfY29tcGxldGlvbl90YXNrKHRhc2ssIE5VTEwpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcnBjX3Rhc2tfc2V0X3ByaW9yaXR5KHN0cnVjdCBycGNfdGFzayAqdGFzaywgdW5zaWduZWQgY2hhciBwcmlvKQoreworCXRhc2stPnRrX3ByaW9yaXR5ID0gcHJpbyAtIFJQQ19QUklPUklUWV9MT1c7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJwY190YXNrX2hhc19wcmlvcml0eShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHVuc2lnbmVkIGNoYXIgcHJpbykKK3sKKwlyZXR1cm4gKHRhc2stPnRrX3ByaW9yaXR5ICsgUlBDX1BSSU9SSVRZX0xPVyA9PSBwcmlvKTsKK30KKwogI2lmZGVmIFJQQ19ERUJVRwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICogcnBjX3FuYW1lKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqcSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKaW5kZXggNTJlOGNiMC4uNWEzMDg1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTI5LDcgKzI5LDYgQEAKIAl1bnNpZ25lZCBsb25nCXBhY2tldHM7CiAJdW5zaWduZWQgbG9uZwlzb2NrZXRzX3F1ZXVlZDsKIAl1bnNpZ25lZCBsb25nCXRocmVhZHNfd29rZW47Ci0JdW5zaWduZWQgbG9uZwlvdmVybG9hZHNfYXZvaWRlZDsKIAl1bnNpZ25lZCBsb25nCXRocmVhZHNfdGltZWRvdXQ7CiB9OwogCkBAIC01MCw3ICs0OSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlzcF9zb2NrZXRzOwkvKiBwZW5kaW5nIHNvY2tldHMgKi8KIAl1bnNpZ25lZCBpbnQJCXNwX25ydGhyZWFkczsJLyogIyBvZiB0aHJlYWRzIGluIHBvb2wgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXNwX2FsbF90aHJlYWRzOwkvKiBhbGwgc2VydmVyIHRocmVhZHMgKi8KLQlpbnQJCQlzcF9ud2FraW5nOwkvKiBudW1iZXIgb2YgdGhyZWFkcyB3b2tlbiBidXQgbm90IHlldCBhY3RpdmUgKi8KIAlzdHJ1Y3Qgc3ZjX3Bvb2xfc3RhdHMJc3Bfc3RhdHM7CS8qIHN0YXRpc3RpY3Mgb24gcG9vbCBvcGVyYXRpb24gKi8KIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIApAQCAtMjc1LDE2ICsyNzMsMTEgQEAKIAlzdHJ1Y3QgYXV0aF9kb21haW4gKglycV9jbGllbnQ7CS8qIFJQQyBwZWVyIGluZm8gKi8KIAlzdHJ1Y3QgYXV0aF9kb21haW4gKglycV9nc3NjbGllbnQ7CS8qICJnc3MvIi1zdHlsZSBwZWVyIGluZm8gKi8KIAlzdHJ1Y3Qgc3ZjX2NhY2hlcmVwICoJcnFfY2FjaGVyZXA7CS8qIGNhY2hlIGluZm8gKi8KLQlzdHJ1Y3Qga25mc2RfZmggKglycV9yZWZmaDsJLyogUmVmZXJyZW5jZSBmaWxlaGFuZGxlLCB1c2VkIHRvCi0JCQkJCQkgKiBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgbnVtYmVyCi0JCQkJCQkgKiB0byByZXBvcnQgKHJlYWwgb3IgdmlydHVhbCkKLQkJCQkJCSAqLwogCWludAkJCXJxX3NwbGljZV9vazsgICAvKiB0dXJuZWQgb2ZmIGluIGdzcyBwcml2YWN5CiAJCQkJCQkgKiB0byBwcmV2ZW50IGVuY3J5cHRpbmcgcGFnZQogCQkJCQkJICogY2FjaGUgcGFnZXMgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAlycV93YWl0OwkvKiBzeW5jaHJvbml6YXRpb24gKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnJxX3Rhc2s7CS8qIHNlcnZpY2UgdGhyZWFkICovCi0JaW50CQkJcnFfd2FraW5nOwkvKiAxIGlmIHRocmVhZCBpcyBiZWluZyB3b2tlbiAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggNGVjOTAwMS4uYTI2MDJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTE0NSwzOCArMTQ1LDQzIEBACiAJU1dQX0RJU0NBUkRBQkxFID0gKDEgPDwgMiksCS8qIGJsa2RldiBzdXBwb3J0cyBkaXNjYXJkICovCiAJU1dQX0RJU0NBUkRJTkcJPSAoMSA8PCAzKSwJLyogbm93IGRpc2NhcmRpbmcgYSBmcmVlIGNsdXN0ZXIgKi8KIAlTV1BfU09MSURTVEFURQk9ICgxIDw8IDQpLAkvKiBibGtkZXYgc2Vla3MgYXJlIGNoZWFwICovCisJU1dQX0NPTlRJTlVFRAk9ICgxIDw8IDUpLAkvKiBzd2FwX21hcCBoYXMgY291bnQgY29udGludWF0aW9uICovCiAJCQkJCS8qIGFkZCBvdGhlcnMgaGVyZSBiZWZvcmUuLi4gKi8KIAlTV1BfU0NBTk5JTkcJPSAoMSA8PCA4KSwJLyogcmVmY291bnQgaW4gc2Nhbl9zd2FwX21hcCAqLwogfTsKIAogI2RlZmluZSBTV0FQX0NMVVNURVJfTUFYIDMyCiAKLSNkZWZpbmUgU1dBUF9NQVBfTUFYCTB4N2ZmZQotI2RlZmluZSBTV0FQX01BUF9CQUQJMHg3ZmZmCi0jZGVmaW5lIFNXQVBfSEFTX0NBQ0hFICAweDgwMDAJCS8qIFRoZXJlIGlzIGEgc3dhcCBjYWNoZSBvZiBlbnRyeS4gKi8KLSNkZWZpbmUgU1dBUF9DT1VOVF9NQVNLICh+U1dBUF9IQVNfQ0FDSEUpCisjZGVmaW5lIFNXQVBfTUFQX01BWAkweDNlCS8qIE1heCBkdXBsaWNhdGlvbiBjb3VudCwgaW4gZmlyc3Qgc3dhcF9tYXAgKi8KKyNkZWZpbmUgU1dBUF9NQVBfQkFECTB4M2YJLyogTm90ZSBwYWdlYmxvY2sgaXMgYmFkLCBpbiBmaXJzdCBzd2FwX21hcCAqLworI2RlZmluZSBTV0FQX0hBU19DQUNIRQkweDQwCS8qIEZsYWcgcGFnZSBpcyBjYWNoZWQsIGluIGZpcnN0IHN3YXBfbWFwICovCisjZGVmaW5lIFNXQVBfQ09OVF9NQVgJMHg3ZgkvKiBNYXggY291bnQsIGluIGVhY2ggc3dhcF9tYXAgY29udGludWF0aW9uICovCisjZGVmaW5lIENPVU5UX0NPTlRJTlVFRAkweDgwCS8qIFNlZSBzd2FwX21hcCBjb250aW51YXRpb24gZm9yIGZ1bGwgY291bnQgKi8KKyNkZWZpbmUgU1dBUF9NQVBfU0hNRU0JMHhiZgkvKiBPd25lZCBieSBzaG1lbS90bXBmcywgaW4gZmlyc3Qgc3dhcF9tYXAgKi8KKwogLyoKICAqIFRoZSBpbi1tZW1vcnkgc3RydWN0dXJlIHVzZWQgdG8gdHJhY2sgc3dhcCBhcmVhcy4KICAqLwogc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHByaW87CQkJLyogc3dhcCBwcmlvcml0eSAqLwotCWludCBuZXh0OwkJCS8qIG5leHQgZW50cnkgb24gc3dhcCBsaXN0ICovCi0Jc3RydWN0IGZpbGUgKnN3YXBfZmlsZTsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgZXh0ZW50X2xpc3Q7Ci0Jc3RydWN0IHN3YXBfZXh0ZW50ICpjdXJyX3N3YXBfZXh0ZW50OwotCXVuc2lnbmVkIHNob3J0ICpzd2FwX21hcDsKLQl1bnNpZ25lZCBpbnQgbG93ZXN0X2JpdDsKLQl1bnNpZ25lZCBpbnQgaGlnaGVzdF9iaXQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsJCS8qIFNXUF9VU0VEIGV0Yzogc2VlIGFib3ZlICovCisJc2lnbmVkIHNob3J0CXByaW87CQkvKiBzd2FwIHByaW9yaXR5IG9mIHRoaXMgdHlwZSAqLworCXNpZ25lZCBjaGFyCXR5cGU7CQkvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovCisJc2lnbmVkIGNoYXIJbmV4dDsJCS8qIG5leHQgdHlwZSBvbiB0aGUgc3dhcCBsaXN0ICovCisJdW5zaWduZWQgaW50CW1heDsJCS8qIGV4dGVudCBvZiB0aGUgc3dhcF9tYXAgKi8KKwl1bnNpZ25lZCBjaGFyICpzd2FwX21hcDsJLyogdm1hbGxvYydlZCBhcnJheSBvZiB1c2FnZSBjb3VudHMgKi8KKwl1bnNpZ25lZCBpbnQgbG93ZXN0X2JpdDsJLyogaW5kZXggb2YgZmlyc3QgZnJlZSBpbiBzd2FwX21hcCAqLworCXVuc2lnbmVkIGludCBoaWdoZXN0X2JpdDsJLyogaW5kZXggb2YgbGFzdCBmcmVlIGluIHN3YXBfbWFwICovCisJdW5zaWduZWQgaW50IHBhZ2VzOwkJLyogdG90YWwgb2YgdXNhYmxlIHBhZ2VzIG9mIHN3YXAgKi8KKwl1bnNpZ25lZCBpbnQgaW51c2VfcGFnZXM7CS8qIG51bWJlciBvZiB0aG9zZSBjdXJyZW50bHkgaW4gdXNlICovCisJdW5zaWduZWQgaW50IGNsdXN0ZXJfbmV4dDsJLyogbGlrZWx5IGluZGV4IGZvciBuZXh0IGFsbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgY2x1c3Rlcl9ucjsJLyogY291bnRkb3duIHRvIG5leHQgY2x1c3RlciBzZWFyY2ggKi8KIAl1bnNpZ25lZCBpbnQgbG93ZXN0X2FsbG9jOwkvKiB3aGlsZSBwcmVwYXJpbmcgZGlzY2FyZCBjbHVzdGVyICovCiAJdW5zaWduZWQgaW50IGhpZ2hlc3RfYWxsb2M7CS8qIHdoaWxlIHByZXBhcmluZyBkaXNjYXJkIGNsdXN0ZXIgKi8KLQl1bnNpZ25lZCBpbnQgY2x1c3Rlcl9uZXh0OwotCXVuc2lnbmVkIGludCBjbHVzdGVyX25yOwotCXVuc2lnbmVkIGludCBwYWdlczsKLQl1bnNpZ25lZCBpbnQgbWF4OwotCXVuc2lnbmVkIGludCBpbnVzZV9wYWdlczsKLQl1bnNpZ25lZCBpbnQgb2xkX2Jsb2NrX3NpemU7CisJc3RydWN0IHN3YXBfZXh0ZW50ICpjdXJyX3N3YXBfZXh0ZW50OworCXN0cnVjdCBzd2FwX2V4dGVudCBmaXJzdF9zd2FwX2V4dGVudDsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwkvKiBzd2FwIGRldmljZSBvciBiZGV2IG9mIHN3YXAgZmlsZSAqLworCXN0cnVjdCBmaWxlICpzd2FwX2ZpbGU7CQkvKiBzZWxkb20gcmVmZXJlbmNlZCAqLworCXVuc2lnbmVkIGludCBvbGRfYmxvY2tfc2l6ZTsJLyogc2VsZG9tIHJlZmVyZW5jZWQgKi8KIH07CiAKIHN0cnVjdCBzd2FwX2xpc3RfdCB7CkBAIC0yNzMsNiArMjc4LDcgQEAKIGV4dGVybiB2b2lkIHNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKIAogZXh0ZXJuIGludCBrc3dhcGRfcnVuKGludCBuaWQpOworZXh0ZXJuIHZvaWQga3N3YXBkX3N0b3AoaW50IG5pZCk7CiAKICNpZmRlZiBDT05GSUdfTU1VCiAvKiBsaW51eC9tbS9zaG1lbS5jICovCkBAIC0zMDksMTcgKzMxNSwxOCBAQAogZXh0ZXJuIHZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKik7CiBleHRlcm4gc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKTsKIGV4dGVybiBzd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlX29mX3R5cGUoaW50KTsKLWV4dGVybiB2b2lkIHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90KTsKLWV4dGVybiBpbnQgc3dhcGNhY2hlX3ByZXBhcmUoc3dwX2VudHJ5X3QpOwogZXh0ZXJuIGludCB2YWxpZF9zd2FwaGFuZGxlcyhzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgYWRkX3N3YXBfY291bnRfY29udGludWF0aW9uKHN3cF9lbnRyeV90LCBnZnBfdCk7CitleHRlcm4gdm9pZCBzd2FwX3NobWVtX2FsbG9jKHN3cF9lbnRyeV90KTsKK2V4dGVybiBpbnQgc3dhcF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QpOworZXh0ZXJuIGludCBzd2FwY2FjaGVfcHJlcGFyZShzd3BfZW50cnlfdCk7CiBleHRlcm4gdm9pZCBzd2FwX2ZyZWUoc3dwX2VudHJ5X3QpOwogZXh0ZXJuIHZvaWQgc3dhcGNhY2hlX2ZyZWUoc3dwX2VudHJ5X3QsIHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiBpbnQgZnJlZV9zd2FwX2FuZF9jYWNoZShzd3BfZW50cnlfdCk7CiBleHRlcm4gaW50IHN3YXBfdHlwZV9vZihkZXZfdCwgc2VjdG9yX3QsIHN0cnVjdCBibG9ja19kZXZpY2UgKiopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBjb3VudF9zd2FwX3BhZ2VzKGludCwgaW50KTsKLWV4dGVybiBzZWN0b3JfdCBtYXBfc3dhcF9wYWdlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICosIHBnb2ZmX3QpOworZXh0ZXJuIHNlY3Rvcl90IG1hcF9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqKik7CiBleHRlcm4gc2VjdG9yX3Qgc3dhcGRldl9ibG9jayhpbnQsIHBnb2ZmX3QpOwotZXh0ZXJuIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9pbmZvX3N0cnVjdCh1bnNpZ25lZCk7CiBleHRlcm4gaW50IHJldXNlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiBpbnQgdHJ5X3RvX2ZyZWVfc3dhcChzdHJ1Y3QgcGFnZSAqKTsKIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvOwpAQCAtMzg0LDggKzM5MSwxOCBAQAogI2RlZmluZSBmcmVlX3N3YXBfYW5kX2NhY2hlKHN3cCkJaXNfbWlncmF0aW9uX2VudHJ5KHN3cCkKICNkZWZpbmUgc3dhcGNhY2hlX3ByZXBhcmUoc3dwKQkJaXNfbWlncmF0aW9uX2VudHJ5KHN3cCkKIAotc3RhdGljIGlubGluZSB2b2lkIHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90IHN3cCkKK3N0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2NvdW50X2NvbnRpbnVhdGlvbihzd3BfZW50cnlfdCBzd3AsIGdmcF90IGdmcF9tYXNrKQogeworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9zaG1lbV9hbGxvYyhzd3BfZW50cnlfdCBzd3ApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90IHN3cCkKK3sKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN3YXBfZnJlZShzd3BfZW50cnlfdCBzd3ApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggOTM5YTYxNTAuLjY1NzkzZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTEwMiwxMiArMTAyLDEwIEBACiAjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKIAogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQkJCQkgICAgICAgXAotCS5wcm9maWxlX2NvdW50ID0gQVRPTUlDX0lOSVQoLTEpLAkJCQkgICAgICAgXAogCS5wcm9maWxlX2VuYWJsZSA9IHByb2Zfc3lzZW50ZXJfZW5hYmxlLAkJCQkgICAgICAgXAogCS5wcm9maWxlX2Rpc2FibGUgPSBwcm9mX3N5c2VudGVyX2Rpc2FibGUsCiAKICNkZWZpbmUgVFJBQ0VfU1lTX0VYSVRfUFJPRklMRV9JTklUKHNuYW1lKQkJCQkgICAgICAgXAotCS5wcm9maWxlX2NvdW50ID0gQVRPTUlDX0lOSVQoLTEpLAkJCQkgICAgICAgXAogCS5wcm9maWxlX2VuYWJsZSA9IHByb2Zfc3lzZXhpdF9lbmFibGUsCQkJCSAgICAgICBcCiAJLnByb2ZpbGVfZGlzYWJsZSA9IHByb2Zfc3lzZXhpdF9kaXNhYmxlLAogI2Vsc2UKQEAgLTE0NSw3ICsxNDMsNyBAQAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJzeXNfZW50ZXIiI3NuYW1lLAkJXAogCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAogCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKLQkJLnJhd19pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZSwJCVwKKwkJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJXAogCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9lbnRlcl9mb3JtYXQsCQlcCiAJCS5kZWZpbmVfZmllbGRzCQk9IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcywJXAogCQkucmVnZnVuYwkJPSByZWdfZXZlbnRfc3lzY2FsbF9lbnRlciwJXApAQCAtMTY3LDcgKzE2NSw3IEBACiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLnN5c3RlbSAgICAgICAgICAgICAgICAgPSAic3lzY2FsbHMiLAkJCVwKIAkJLmV2ZW50ICAgICAgICAgICAgICAgICAgPSAmZXhpdF9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKLQkJLnJhd19pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZSwJCVwKKwkJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJXAogCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9leGl0X2Zvcm1hdCwJCVwKIAkJLmRlZmluZV9maWVsZHMJCT0gc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggYmQyN2ZiYy4uOWYyMzZjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC00ODMsNiArNDgzLDcgQEAKIAlORVRfSVBWNF9DT05GX0FSUF9OT1RJRlk9MjIsCiAJTkVUX0lQVjRfQ09ORl9BQ0NFUFRfTE9DQUw9MjMsCiAJTkVUX0lQVjRfQ09ORl9TUkNfVk1BUks9MjQsCisJTkVUX0lQVjRfQ09ORl9QUk9YWV9BUlBfUFZMQU49MjUsCiAJX19ORVRfSVBWNF9DT05GX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDlkNjhmZWQuLmNmYTgzMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTk5LDggKzk5LDkgQEAKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIpOwogCiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwotdm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwordm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CiAKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqZWN0ICp0YXJnZXQsCiAJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xNzUsMTMgKzE3NiwxMyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorCQkJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorCQkJCQkgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltYl9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L3RpbWJfZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDU2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWJfZ3Bpby5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiB0aW1iX2dwaW8uaCB0aW1iZXJkYWxlIEZQR0EgR1BJTyBkcml2ZXIsIHBsYXRmb3JtIGRhdGEgZGVmaW5pdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTElOVVhfVElNQl9HUElPX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUJfR1BJT19ICisKKy8qKgorICogc3RydWN0IHRpbWJncGlvX3BsYXRmb3JtX2RhdGEgLSBQbGF0Zm9ybSBkYXRhIG9mIHRoZSBUaW1iZXJkYWxlIEdQSU8gZHJpdmVyCisgKiBAZ3Bpb19iYXNlCQlUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBHUElPIHBpbiwgc2V0IHRvIC0xIGZvcgorICoJCQlkeW5hbWljIG51bWJlciBhbGxvY2F0aW9uLgorICogQG5yX3BpbnMJCU51bWJlciBvZiBwaW5zIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAoMS0zMikKKyAqIEBpcnFfYmFzZQkJSWYgSVJRIGlzIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUsIHRoaXMgaXMgdGhlIGJhc2UKKyAqCQkJbnVtYmVyIG9mIElSUTpzLiBPbmUgSVJRIHBlciBwaW4gd2lsbCBiZSB1c2VkLiBTZXQgdG8KKyAqCQkJLTEgaWYgSVJROnMgaXMgbm90IHN1cHBvcnRlZC4KKyAqLworc3RydWN0IHRpbWJncGlvX3BsYXRmb3JtX2RhdGEgeworCWludCBncGlvX2Jhc2U7CisJaW50IG5yX3BpbnM7CisJaW50IGlycV9iYXNlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oIGIvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaAppbmRleCAwOTA3N2Y2Li41Y2YzOTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlidWZmZXJbUEFHRV9TSVpFXTsKIAl1bnNpZ25lZCBpbnQJCWxlbjsKIAl1bnNpZ25lZCBpbnQJCXJlYWRwb3M7CisJaW50CQkJZnVsbDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjEsNiArMjIsNyBAQAogewogCXMtPmxlbiA9IDA7CiAJcy0+cmVhZHBvcyA9IDA7CisJcy0+ZnVsbCA9IDA7CiB9CiAKIC8qCkBAIC0zMyw3ICszNSw3IEBACiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAwKSkpOwogZXh0ZXJuIGludAogdHJhY2Vfc2VxX2JwcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCBjb25zdCB1MzIgKmJpbmFyeSk7Ci1leHRlcm4gdm9pZCB0cmFjZV9wcmludF9zZXEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKK2V4dGVybiBpbnQgdHJhY2VfcHJpbnRfc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRyYWNlX3NlcSAqcyk7CiBleHRlcm4gc3NpemVfdCB0cmFjZV9zZXFfdG9fdXNlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkgc2l6ZV90IGNudCk7CiBleHRlcm4gaW50IHRyYWNlX3NlcV9wdXRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnN0cik7CkBAIC01NSw4ICs1Nyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9wcmludF9zZXEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorc3RhdGljIGlubGluZSBpbnQgdHJhY2VfcHJpbnRfc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKKwlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbmxpbmUgc3NpemVfdCB0cmFjZV9zZXFfdG9fdXNlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkgc2l6ZV90IGNudCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCmluZGV4IDFlYjQ0YTkuLjEwZGIwMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaApAQCAtMTM0LDYgKzEzNCwxMyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzdGVwKQogeworCWlmIChzdGVwKSB7CisJCXNpZ2luZm9fdCBpbmZvOworCQl1c2VyX3NpbmdsZV9zdGVwX3NpZ2luZm8oY3VycmVudCwgcmVncywgJmluZm8pOworCQlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgY3VycmVudCk7CisJCXJldHVybjsKKwl9CisKIAlwdHJhY2VfcmVwb3J0X3N5c2NhbGwocmVncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCmluZGV4IDQwNWE5MDMuLmVmM2EyOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5LmgKKysrIGIvaW5jbHVkZS9saW51eC90dHkuaApAQCAtMzUwLDggKzM1MCw2IEBACiAKIGV4dGVybiBzdHJ1Y3Qga3Rlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zOwogCi1leHRlcm4gaW50IGttc2dfcmVkaXJlY3Q7Ci0KIGV4dGVybiB2b2lkIGNvbnNvbGVfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgdmNzX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggYWNmNmU0NS4uMTgxOTM5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKICNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkxODgJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCiAjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCTI1NAkvKiBsb2FkcyBvZiBkZXZpY2VzIDopICovCkBAIC05NCw3ICs5NSw3IEBACiAJdW5zaWduZWQgY2hhcgkJKmJ1bGtfb3V0X2J1ZmZlcjsKIAlpbnQJCQlidWxrX291dF9zaXplOwogCXN0cnVjdCB1cmIJCSp3cml0ZV91cmI7Ci0Jc3RydWN0IGtmaWZvCQkqd3JpdGVfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8JCXdyaXRlX2ZpZm87CiAJaW50CQkJd3JpdGVfdXJiX2J1c3k7CiAJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaCBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKaW5kZXggYjJhN2Q4Yi4uMTU1OTFkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCkBAIC0xMjgsNiArMTI4LDI5IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2lmZGVmIENPTkZJR19DT01QQVQKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKworc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcjMyIHsKKyAgICAgICAgdTggYlJlcXVlc3RUeXBlOworICAgICAgICB1OCBiUmVxdWVzdDsKKyAgICAgICAgdTE2IHdWYWx1ZTsKKyAgICAgICAgdTE2IHdJbmRleDsKKyAgICAgICAgdTE2IHdMZW5ndGg7CisgICAgICAgIHUzMiB0aW1lb3V0OyAgLyogaW4gbWlsbGlzZWNvbmRzICovCisgICAgICAgIGNvbXBhdF9jYWRkcl90IGRhdGE7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyMzIgeworICAgICAgICBjb21wYXRfdWludF90IGVwOworICAgICAgICBjb21wYXRfdWludF90IGxlbjsKKyAgICAgICAgY29tcGF0X3VpbnRfdCB0aW1lb3V0OyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAgICAgICAgY29tcGF0X2NhZGRyX3QgZGF0YTsKK307CisKK3N0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsMzIgeworICAgICAgICBjb21wYXRfaW50X3Qgc2lnbnI7CisgICAgICAgIGNvbXBhdF9jYWRkcl90IGNvbnRleHQ7Cit9OworCiBzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgewogCXVuc2lnbmVkIGNoYXIgdHlwZTsKIAl1bnNpZ25lZCBjaGFyIGVuZHBvaW50OwpAQCAtMTUzLDcgKzE3Niw5IEBACiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZGVmaW5lIFVTQkRFVkZTX0NPTlRST0wgICAgICAgICAgIF9JT1dSKCdVJywgMCwgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcikKKyNkZWZpbmUgVVNCREVWRlNfQ09OVFJPTDMyICAgICAgICAgICBfSU9XUignVScsIDAsIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIzMikKICNkZWZpbmUgVVNCREVWRlNfQlVMSyAgICAgICAgICAgICAgX0lPV1IoJ1UnLCAyLCBzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyKQorI2RlZmluZSBVU0JERVZGU19CVUxLMzIgICAgICAgICAgICAgIF9JT1dSKCdVJywgMiwgc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlcjMyKQogI2RlZmluZSBVU0JERVZGU19SRVNFVEVQICAgICAgICAgICBfSU9SKCdVJywgMywgdW5zaWduZWQgaW50KQogI2RlZmluZSBVU0JERVZGU19TRVRJTlRFUkZBQ0UgICAgICBfSU9SKCdVJywgNCwgc3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSkKICNkZWZpbmUgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTiAgX0lPUignVScsIDUsIHVuc2lnbmVkIGludCkKQEAgLTE2Niw2ICsxOTEsNyBAQAogI2RlZmluZSBVU0JERVZGU19SRUFQVVJCTkRFTEFZICAgICBfSU9XKCdVJywgMTMsIHZvaWQgKikKICNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyICAgX0lPVygnVScsIDEzLCBfX3UzMikKICNkZWZpbmUgVVNCREVWRlNfRElTQ1NJR05BTCAgICAgICAgX0lPUignVScsIDE0LCBzdHJ1Y3QgdXNiZGV2ZnNfZGlzY29ubmVjdHNpZ25hbCkKKyNkZWZpbmUgVVNCREVWRlNfRElTQ1NJR05BTDMyICAgICAgX0lPUignVScsIDE0LCBzdHJ1Y3QgdXNiZGV2ZnNfZGlzY29ubmVjdHNpZ25hbDMyKQogI2RlZmluZSBVU0JERVZGU19DTEFJTUlOVEVSRkFDRSAgICBfSU9SKCdVJywgMTUsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVVNCREVWRlNfUkVMRUFTRUlOVEVSRkFDRSAgX0lPUignVScsIDE2LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFVTQkRFVkZTX0NPTk5FQ1RJTkZPICAgICAgIF9JT1coJ1UnLCAxNywgc3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oIGIvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCmluZGV4IDc5Yjk4MzcuLmNmOTdiNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKIC8qIFNpbXBseSBzYW5pdHkgdmVyc2lvbiBzdGFtcCBmb3IgbW9kdWxlcy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDMyYjkyMjkuLmQ0OTYyYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMjk0LDYgKzI5NCw3IEBACiAKIC8qIEdyZXkgZm9ybWF0cyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfR1JFWSAgICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTAgICAgIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnMCcsICcgJykgLyogMTAgIEdyZXlzY2FsZSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxNiAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICc2JywgJyAnKSAvKiAxNiAgR3JleXNjYWxlICAgICAqLwogCiAvKiBQYWxldHRlIGZvcm1hdHMgKi8KQEAgLTMyOSw3ICszMzAsMTEgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSOCAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICc4JywgJzEnKSAvKiAgOCAgQkdCRy4uIEdSR1IuLiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkc4ICB2NGwyX2ZvdXJjYygnRycsICdCJywgJ1InLCAnRycpIC8qICA4ICBHQkdCLi4gUkdSRy4uICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzggIHY0bDJfZm91cmNjKCdHJywgJ1InLCAnQicsICdHJykgLyogIDggIEdSR1IuLiBCR0JHLi4gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzAnKSAvKiAxMGJpdCByYXcgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NSR0dCOCAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdHJywgJ0InKSAvKiAgOCAgUkdSRy4uIEdCR0IuLiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMCB2NGwyX2ZvdXJjYygnQicsICdHJywgJzEnLCAnMCcpIC8qIDEwICBCR0JHLi4gR1JHUi4uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzEwIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnMScsICcwJykgLyogMTAgIEdCR0IuLiBSR1JHLi4gKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzAnKSAvKiAxMCAgR1JHUi4uIEJHQkcuLiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMCB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMCcpIC8qIDEwICBSR1JHLi4gR0JHQi4uICovCiAJLyogMTBiaXQgcmF3IGJheWVyIERQQ00gY29tcHJlc3NlZCB0byA4IGJpdHMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCB2NGwyX2ZvdXJjYygnQicsICdEJywgJzEnLCAnMCcpCiAJLyoKQEAgLTczMiw2ICs3MzcsOTkgQEAKIH07CiAKIC8qCisgKglWIEkgRCBFIE8JVCBJIE0gSSBOIEcgUwlEIFYJUCBSIEUgUyBFIFQKKyAqLworc3RydWN0IHY0bDJfZHZfcHJlc2V0IHsKKwlfX3UzMglwcmVzZXQ7CisJX191MzIJcmVzZXJ2ZWRbNF07Cit9OworCisvKgorICoJRCBWCVAgUiBFIFMgRSBUIFMJRSBOIFUgTSBFIFIgQSBUIEkgTyBOCisgKi8KK3N0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0IHsKKwlfX3UzMglpbmRleDsKKwlfX3UzMglwcmVzZXQ7CisJX191OAluYW1lWzMyXTsgLyogTmFtZSBvZiB0aGUgcHJlc2V0IHRpbWluZyAqLworCV9fdTMyCXdpZHRoOworCV9fdTMyCWhlaWdodDsKKwlfX3UzMglyZXNlcnZlZFs0XTsKK307CisKKy8qCisgKiAJRCBWCVAgUiBFIFMgRSBUCVYgQSBMIFUgRSBTCisgKi8KKyNkZWZpbmUJCVY0TDJfRFZfSU5WQUxJRAkJMAorI2RlZmluZQkJVjRMMl9EVl80ODBQNTlfOTQJMSAvKiBCVC4xMzYyICovCisjZGVmaW5lCQlWNEwyX0RWXzU3NlA1MAkJMiAvKiBCVC4xMzYyICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFAyNAkJMyAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFAyNQkJNCAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFAzMAkJNSAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFA1MAkJNiAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzcyMFA1OV85NAk3IC8qIFNNUFRFIDI3NE0gKi8KKyNkZWZpbmUJCVY0TDJfRFZfNzIwUDYwCQk4IC8qIFNNUFRFIDI3NE0vMjk2TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwSTI5Xzk3CTkgLyogQlQuMTEyMC8gU01QVEUgMjc0TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwSTMwCQkxMCAvKiBCVC4xMTIwLyBTTVBURSAyNzRNICovCisjZGVmaW5lCQlWNEwyX0RWXzEwODBJMjUJCTExIC8qIEJULjExMjAgKi8KKyNkZWZpbmUJCVY0TDJfRFZfMTA4MEk1MAkJMTIgLyogU01QVEUgMjk2TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwSTYwCQkxMyAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzEwODBQMjQJCTE0IC8qIFNNUFRFIDI5Nk0gKi8KKyNkZWZpbmUJCVY0TDJfRFZfMTA4MFAyNQkJMTUgLyogU01QVEUgMjk2TSAqLworI2RlZmluZQkJVjRMMl9EVl8xMDgwUDMwCQkxNiAvKiBTTVBURSAyOTZNICovCisjZGVmaW5lCQlWNEwyX0RWXzEwODBQNTAJCTE3IC8qIEJULjExMjAgKi8KKyNkZWZpbmUJCVY0TDJfRFZfMTA4MFA2MAkJMTggLyogQlQuMTEyMCAqLworCisvKgorICoJRCBWIAlCIFQJVCBJIE0gSSBOIEcgUworICovCisKKy8qIEJULjY1Ni9CVC4xMTIwIHRpbWluZyBkYXRhICovCitzdHJ1Y3QgdjRsMl9idF90aW1pbmdzIHsKKwlfX3UzMgl3aWR0aDsJCS8qIHdpZHRoIGluIHBpeGVscyAqLworCV9fdTMyCWhlaWdodDsJCS8qIGhlaWdodCBpbiBsaW5lcyAqLworCV9fdTMyCWludGVybGFjZWQ7CS8qIEludGVybGFjZWQgb3IgcHJvZ3Jlc3NpdmUgKi8KKwlfX3UzMglwb2xhcml0aWVzOwkvKiBQb3NpdGl2ZSBvciBuZWdhdGl2ZSBwb2xhcml0eSAqLworCV9fdTY0CXBpeGVsY2xvY2s7CS8qIFBpeGVsIGNsb2NrIGluIEhaLiBFeC4gNzQuMjVNSHotPjc0MjUwMDAwICovCisJX191MzIJaGZyb250cG9yY2g7CS8qIEhvcml6cG9udGFsIGZyb250IHBvcmNoIGluIHBpeGVscyAqLworCV9fdTMyCWhzeW5jOwkJLyogSG9yaXpvbnRhbCBTeW5jIGxlbmd0aCBpbiBwaXhlbHMgKi8KKwlfX3UzMgloYmFja3BvcmNoOwkvKiBIb3Jpem9udGFsIGJhY2sgcG9yY2ggaW4gcGl4ZWxzICovCisJX191MzIJdmZyb250cG9yY2g7CS8qIFZlcnRpY2FsIGZyb250IHBvcmNoIGluIHBpeGVscyAqLworCV9fdTMyCXZzeW5jOwkJLyogVmVydGljYWwgU3luYyBsZW5ndGggaW4gbGluZXMgKi8KKwlfX3UzMgl2YmFja3BvcmNoOwkvKiBWZXJ0aWNhbCBiYWNrIHBvcmNoIGluIGxpbmVzICovCisJX191MzIJaWxfdmZyb250cG9yY2g7CS8qIFZlcnRpY2FsIGZyb250IHBvcmNoIGZvciBib3R0b20gZmllbGQgb2YKKwkJCQkgKiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKKwkJCQkgKi8KKwlfX3UzMglpbF92c3luYzsJLyogVmVydGljYWwgc3luYyBsZW5ndGggZm9yIGJvdHRvbSBmaWVsZCBvZgorCQkJCSAqIGludGVybGFjZWQgZmllbGQgZm9ybWF0cworCQkJCSAqLworCV9fdTMyCWlsX3ZiYWNrcG9yY2g7CS8qIFZlcnRpY2FsIGJhY2sgcG9yY2ggZm9yIGJvdHRvbSBmaWVsZCBvZgorCQkJCSAqIGludGVybGFjZWQgZmllbGQgZm9ybWF0cworCQkJCSAqLworCV9fdTMyCXJlc2VydmVkWzE2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBJbnRlcmxhY2VkIG9yIHByb2dyZXNzaXZlIGZvcm1hdCAqLworI2RlZmluZQlWNEwyX0RWX1BST0dSRVNTSVZFCTAKKyNkZWZpbmUJVjRMMl9EVl9JTlRFUkxBQ0VECTEKKworLyogUG9sYXJpdGllcy4gSWYgYml0IGlzIG5vdCBzZXQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgbmVnYXRpdmUgcG9sYXJpdHkgKi8KKyNkZWZpbmUgVjRMMl9EVl9WU1lOQ19QT1NfUE9MCTB4MDAwMDAwMDEKKyNkZWZpbmUgVjRMMl9EVl9IU1lOQ19QT1NfUE9MCTB4MDAwMDAwMDIKKworCisvKiBEViB0aW1pbmdzICovCitzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzIHsKKwlfX3UzMiB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IHY0bDJfYnRfdGltaW5ncwlidDsKKwkJX191MzIJcmVzZXJ2ZWRbMzJdOworCX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogVmFsdWVzIGZvciB0aGUgdHlwZSBmaWVsZCAqLworI2RlZmluZSBWNEwyX0RWX0JUXzY1Nl8xMTIwCTAJLyogQlQuNjU2LzExMjAgdGltaW5nIHR5cGUgKi8KKworLyoKICAqCVYgSSBEIEUgTyAgIEkgTiBQIFUgVCBTCiAgKi8KIHN0cnVjdCB2NGwyX2lucHV0IHsKQEAgLTc0Miw3ICs4NDAsOCBAQAogCV9fdTMyICAgICAgICB0dW5lcjsgICAgICAgICAgICAgLyogIEFzc29jaWF0ZWQgdHVuZXIgKi8KIAl2NGwyX3N0ZF9pZCAgc3RkOwogCV9fdTMyCSAgICAgc3RhdHVzOwotCV9fdTMyCSAgICAgcmVzZXJ2ZWRbNF07CisJX191MzIJICAgICBjYXBhYmlsaXRpZXM7CisJX191MzIJICAgICByZXNlcnZlZFszXTsKIH07CiAKIC8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KQEAgLTc3Myw2ICs4NzIsMTEgQEAKICNkZWZpbmUgVjRMMl9JTl9TVF9OT19BQ0NFU1MgICAweDAyMDAwMDAwICAvKiBDb25kaXRpb25hbCBhY2Nlc3MgZGVuaWVkICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfVlRSICAgICAgICAgMHgwNDAwMDAwMCAgLyogVlRSIHRpbWUgY29uc3RhbnQgKi8KIAorLyogY2FwYWJpbGl0aWVzIGZsYWdzICovCisjZGVmaW5lIFY0TDJfSU5fQ0FQX1BSRVNFVFMJCTB4MDAwMDAwMDEgLyogU3VwcG9ydHMgU19EVl9QUkVTRVQgKi8KKyNkZWZpbmUgVjRMMl9JTl9DQVBfQ1VTVE9NX1RJTUlOR1MJMHgwMDAwMDAwMiAvKiBTdXBwb3J0cyBTX0RWX1RJTUlOR1MgKi8KKyNkZWZpbmUgVjRMMl9JTl9DQVBfU1RECQkJMHgwMDAwMDAwNCAvKiBTdXBwb3J0cyBTX1NURCAqLworCiAvKgogICoJViBJIEQgRSBPICAgTyBVIFQgUCBVIFQgUwogICovCkBAIC03ODMsMTMgKzg4NywxOSBAQAogCV9fdTMyCSAgICAgYXVkaW9zZXQ7CQkvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLwogCV9fdTMyCSAgICAgbW9kdWxhdG9yOyAgICAgICAgIC8qICBBc3NvY2lhdGVkIG1vZHVsYXRvciAqLwogCXY0bDJfc3RkX2lkICBzdGQ7Ci0JX191MzIJICAgICByZXNlcnZlZFs0XTsKKwlfX3UzMgkgICAgIGNhcGFiaWxpdGllczsKKwlfX3UzMgkgICAgIHJlc2VydmVkWzNdOwogfTsKIC8qICBWYWx1ZXMgZm9yIHRoZSAndHlwZScgZmllbGQgKi8KICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1IJCTEKICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cJCQkyCiAjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWQkzCiAKKy8qIGNhcGFiaWxpdGllcyBmbGFncyAqLworI2RlZmluZSBWNEwyX09VVF9DQVBfUFJFU0VUUwkJMHgwMDAwMDAwMSAvKiBTdXBwb3J0cyBTX0RWX1BSRVNFVCAqLworI2RlZmluZSBWNEwyX09VVF9DQVBfQ1VTVE9NX1RJTUlOR1MJMHgwMDAwMDAwMiAvKiBTdXBwb3J0cyBTX0RWX1RJTUlOR1MgKi8KKyNkZWZpbmUgVjRMMl9PVVRfQ0FQX1NURAkJMHgwMDAwMDAwNCAvKiBTdXBwb3J0cyBTX1NURCAqLworCiAvKgogICoJQyBPIE4gVCBSIE8gTCBTCiAgKi8KQEAgLTE2MjQsNiArMTczNCwxMyBAQAogI2VuZGlmCiAKICNkZWZpbmUgVklESU9DX1NfSFdfRlJFUV9TRUVLCSBfSU9XKCdWJywgODIsIHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlaykKKyNkZWZpbmUJVklESU9DX0VOVU1fRFZfUFJFU0VUUwlfSU9XUignVicsIDgzLCBzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCkKKyNkZWZpbmUJVklESU9DX1NfRFZfUFJFU0VUCV9JT1dSKCdWJywgODQsIHN0cnVjdCB2NGwyX2R2X3ByZXNldCkKKyNkZWZpbmUJVklESU9DX0dfRFZfUFJFU0VUCV9JT1dSKCdWJywgODUsIHN0cnVjdCB2NGwyX2R2X3ByZXNldCkKKyNkZWZpbmUJVklESU9DX1FVRVJZX0RWX1BSRVNFVAlfSU9SKCdWJywgIDg2LCBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQpCisjZGVmaW5lCVZJRElPQ19TX0RWX1RJTUlOR1MJX0lPV1IoJ1YnLCA4Nywgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKKyNkZWZpbmUJVklESU9DX0dfRFZfVElNSU5HUwlfSU9XUignVicsIDg4LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQorCiAvKiBSZW1pbmRlcjogd2hlbiBhZGRpbmcgbmV3IGlvY3RscyBwbGVhc2UgYWRkIHN1cHBvcnQgZm9yIHRoZW0gdG8KICAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGFzIHdlbGwhICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDJkMGYyMjIuLmVlMDNiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtNDAsNiArNDAsOCBAQAogCQlQR1NDQU5fWk9ORV9SRUNMQUlNX0ZBSUxFRCwKICNlbmRpZgogCQlQR0lOT0RFU1RFQUwsIFNMQUJTX1NDQU5ORUQsIEtTV0FQRF9TVEVBTCwgS1NXQVBEX0lOT0RFU1RFQUwsCisJCUtTV0FQRF9MT1dfV01BUktfSElUX1FVSUNLTFksIEtTV0FQRF9ISUdIX1dNQVJLX0hJVF9RVUlDS0xZLAorCQlLU1dBUERfU0tJUF9DT05HRVNUSU9OX1dBSVQsCiAJCVBBR0VPVVRSVU4sIEFMTE9DU1RBTEwsIFBHUk9UQVRFRCwKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJCUhUTEJfQlVERFlfUEdBTExPQywgSFRMQl9CVUREWV9QR0FMTE9DX0ZBSUwsCkBAIC03NiwyNCArNzgsMjIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fY291bnRfdm1fZXZlbnQoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0pCiB7Ci0JX19nZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dKys7CisJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIodm1fZXZlbnRfc3RhdGVzKS5ldmVudFtpdGVtXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF92bV9ldmVudChlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSkKIHsKLQlnZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dKys7Ci0JcHV0X2NwdSgpOworCXRoaXNfY3B1X2luYyhwZXJfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fY291bnRfdm1fZXZlbnRzKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtLCBsb25nIGRlbHRhKQogewotCV9fZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzKS5ldmVudFtpdGVtXSArPSBkZWx0YTsKKwlfX3RoaXNfY3B1X2FkZChwZXJfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dLCBkZWx0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF92bV9ldmVudHMoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0sIGxvbmcgZGVsdGEpCiB7Ci0JZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzKS5ldmVudFtpdGVtXSArPSBkZWx0YTsKLQlwdXRfY3B1KCk7CisJdGhpc19jcHVfYWRkKHBlcl9jcHVfdmFyKHZtX2V2ZW50X3N0YXRlcykuZXZlbnRbaXRlbV0sIGRlbHRhKTsKIH0KIAogZXh0ZXJuIHZvaWQgYWxsX3ZtX2V2ZW50cyh1bnNpZ25lZCBsb25nICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dC5oIGIvaW5jbHVkZS9saW51eC92dC5oCmluZGV4IDdmZmExMWYuLmQ1ZGQwYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTg0LDQgKzg0LDIzIEBACiAKICNkZWZpbmUgVlRfU0VUQUNUSVZBVEUJMHg1NjBGCS8qIEFjdGl2YXRlIGFuZCBzZXQgdGhlIG1vZGUgb2YgYSBjb25zb2xlICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZmRlZiBDT05GSUdfVlRfQ09OU09MRQorCitleHRlcm4gaW50IHZ0X2ttc2dfcmVkaXJlY3QoaW50IG5ldyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHZ0X2ttc2dfcmVkaXJlY3QoaW50IG5ldykKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgdnRfZ2V0X2ttc2dfcmVkaXJlY3QoKSB2dF9rbXNnX3JlZGlyZWN0KC0xKQorCiAjZW5kaWYgLyogX0xJTlVYX1ZUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmggYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCmluZGV4IDcwNWYwMWYuLmMxOGMwMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApAQCAtNzksOCArNzksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHdhaXRfb25faW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAltaWdodF9zbGVlcCgpOwotCXdhaXRfb25fYml0KCZpbm9kZS0+aV9zdGF0ZSwgX19JX0xPQ0ssIGlub2RlX3dhaXQsCi0JCQkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCXdhaXRfb25fYml0KCZpbm9kZS0+aV9zdGF0ZSwgX19JX05FVywgaW5vZGVfd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogfQogc3RhdGljIGlubGluZSB2b2lkIGlub2RlX3N5bmNfd2FpdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94YXR0ci5oIGIvaW5jbHVkZS9saW51eC94YXR0ci5oCmluZGV4IDVjODRhZjguLmZiOWI3ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGF0dHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3hhdHRyLmgKQEAgLTM4LDEyICszOCwxMyBAQAogCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciB7CiAJY2hhciAqcHJlZml4OwotCXNpemVfdCAoKmxpc3QpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pOwotCWludCAoKmdldCkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICBzaXplX3Qgc2l6ZSk7Ci0JaW50ICgqc2V0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCWludCBmbGFnczsJLyogZnMgcHJpdmF0ZSBmbGFncyBwYXNzZWQgYmFjayB0byB0aGUgaGFuZGxlcnMgKi8KKwlzaXplX3QgKCpsaXN0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCBoYW5kbGVyX2ZsYWdzKTsKKwlpbnQgKCpnZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkgICBzaXplX3Qgc2l6ZSwgaW50IGhhbmRsZXJfZmxhZ3MpOworCWludCAoKnNldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisJCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCBoYW5kbGVyX2ZsYWdzKTsKIH07CiAKIHNzaXplX3QgeGF0dHJfZ2V0c2VjdXJpdHkoc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggZTQxYTk5ZS4uMmM2YWYyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0yNiwyNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQotZXh0ZXJuIGludCBtZWRpYV9pcl9kZWJ1ZzsgICAgLyogbWVkaWFfaXJfZGVidWcgbGV2ZWwgKDAsMSwyKSAqLwotI2RlZmluZSBJUl9kcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJaWYgKG1lZGlhX2lyX2RlYnVnID49IGxldmVsKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCAsIF9fZnVuY19fLCAjIyBhcmcpCi0KLSNkZWZpbmUgSVJfVFlQRV9SQzUgICAgIDEKLSNkZWZpbmUgSVJfVFlQRV9QRCAgICAgIDIgLyogUHVsc2UgZGlzdGFuY2UgZW5jb2RlZCBJUiAqLwotI2RlZmluZSBJUl9UWVBFX09USEVSICA5OQotCi1zdHJ1Y3QgaXJfc2NhbmNvZGUgewotCXUxNglzY2FuY29kZTsKLQl1MzIJa2V5Y29kZTsKLX07Ci0KLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlICpzY2FuOwotCWludCBzaXplOwotCXNwaW5sb2NrX3QgbG9jazsKLX07CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgogCiAjZGVmaW5lIFJDNV9TVEFSVCh4KQkoKCh4KT4+MTIpJjMpCiAjZGVmaW5lIFJDNV9UT0dHTEUoeCkJKCgoeCk+PjExKSYxKQpAQCAtNTYsOCArMzcsNiBAQAogCS8qIGNvbmZpZ3VyYXRpb24gKi8KIAlpbnQgICAgICAgICAgICAgICAgaXJfdHlwZTsKIAotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBrZXl0YWJsZTsKLQogCS8qIGtleSBpbmZvICovCiAJdTMyICAgICAgICAgICAgICAgIGlyX2tleTsgICAgICAvKiBpciBzY2FuY29kZSAqLwogCXUzMiAgICAgICAgICAgICAgICBrZXljb2RlOyAgICAgLyogbGludXgga2V5IGNvZGUgKi8KQEAgLTEwNSw3ICs4NCw3IEBACiAvKiBSb3V0aW5lcyBmcm9tIGlyLWZ1bmN0aW9ucy5jICovCiAKIGludCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKLQkJICAgaW50IGlyX3R5cGUsIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMpOworCQkgICBpbnQgaXJfdHlwZSk7CiB2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7CiB2b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAogCQkgICAgICB1MzIgaXJfa2V5KTsKQEAgLTExOCwxOSArOTcsNiBAQAogdm9pZCBpcl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIGlyX3JjNV90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpOwogCi0vKiBSb3V0aW5lcyBmcm9tIGlyLWtleXRhYmxlLmMgKi8KLQotdTMyIGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJCSAgICB1MzIgc2NhbmNvZGUpOwotCi1pbnQgaXJfc2V0X2tleWNvZGVfdGFibGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAotCQkJIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKTsKLQotaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKTsKLWludCBpcl9jb3B5X3RhYmxlKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqZGVzdGluLAotCQkgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpvcmlnaW4pOwotdm9pZCBpcl9pbnB1dF9mcmVlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7Ci0KIC8qIHNjYW5jb2RlLT5rZXljb2RlIG1hcCB0YWJsZXMgZnJvbSBpci1rZXltYXBzLmMgKi8KIAogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbXB0eV90YWJsZTsKQEAgLTE5NSw0ICsxNjEsNSBAQAogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlOwogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ2FkbWVpX3JtMDA4el90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oIGIvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5ZDIwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBSZW1vdGUgQ29udHJvbGxlciBjb3JlIGhlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9JUl9DT1JFCisjZGVmaW5lIF9JUl9DT1JFCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK2V4dGVybiBpbnQgaXJfY29yZV9kZWJ1ZzsKKyNkZWZpbmUgSVJfZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCWlmIChpcl9jb3JlX2RlYnVnID49IGxldmVsKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCAsIF9fZnVuY19fLCAjIyBhcmcpCisKK2VudW0gaXJfdHlwZSB7CisJSVJfVFlQRV9VTktOT1dOCT0gMCwKKwlJUl9UWVBFX1JDNQk9IDEsCisJSVJfVFlQRV9QRAk9IDIsCQkgLyogUHVsc2UgZGlzdGFuY2UgZW5jb2RlZCBJUiAqLworCUlSX1RZUEVfTkVDCT0gMywKKwlJUl9UWVBFX09USEVSCT0gOTksCit9OworCitzdHJ1Y3QgaXJfc2NhbmNvZGUgeworCXUxNglzY2FuY29kZTsKKwl1MzIJa2V5Y29kZTsKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB7CisJc3RydWN0IGlyX3NjYW5jb2RlCSpzY2FuOworCWludAkJCXNpemU7CisJZW51bQkJCWlyX3R5cGUgaXJfdHlwZTsKKwlzcGlubG9ja190CQlsb2NrOworfTsKKworc3RydWN0IGlyX2lucHV0X2RldiB7CisJc3RydWN0IGlucHV0X2RldgkJKmRldjsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUJcmNfdGFiOworfTsKKworLyogUm91dGluZXMgZnJvbSBpci1rZXl0YWJsZS5jICovCisKK3UzMiBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCisJCQkgICAgdTMyIHNjYW5jb2RlKTsKKworaW50IGlyX3NldF9rZXljb2RlX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKKwkJCSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYik7CisKK2ludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcyk7CitpbnQgaXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkgICAgICBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzKTsKK3ZvaWQgaXJfaW5wdXRfdW5yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvbXQ5dDExMi5oIGIvaW5jbHVkZS9tZWRpYS9tdDl0MTEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzYzc0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvbXQ5dDExMi5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qIG10OXQxMTIgQ2FtZXJhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTVQ5VDExMl9IX18KKyNkZWZpbmUgX19NVDlUMTEyX0hfXworCisjZGVmaW5lIE1UOVQxMTJfRkxBR19QQ0xLX1JJU0lOR19FREdFCSgxIDw8IDApCisjZGVmaW5lIE1UOVQxMTJfRkxBR19EQVRBV0lEVEhfOAkoMSA8PCAxKSAvKiBkZWZhdWx0IHdpZHRoIGlzIDEwICovCisKK3N0cnVjdCBtdDl0MTEyX3BsbF9kaXZpZGVyIHsKKwl1OCBtLCBuOworCXU4IHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3OworfTsKKworLyoKKyAqIG10OXQxMTIgY2FtZXJhIGluZm8KKyAqLworc3RydWN0IG10OXQxMTJfY2FtZXJhX2luZm8geworCXUzMiBmbGFnczsKKwlzdHJ1Y3QgbXQ5dDExMl9wbGxfZGl2aWRlciBkaXZpZGVyOworfTsKKworI2VuZGlmIC8qIF9fTVQ5VDExMl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmggYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCmluZGV4IDMwZDk2MjkuLjE0Yzc3ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9vdjc3MnguaApAQCAtMSw0ICsxLDUgQEAKLS8qIG92NzcyeCBDYW1lcmEKKy8qCisgKiBvdjc3MnggQ2FtZXJhCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCiAgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CkBAIC01NCw3ICs1NSw2IEBACiBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIHsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOwogCXVuc2lnbmVkIGxvbmcgICAgICAgICAgZmxhZ3M7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayBsaW5rOwogCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsIGVkZ2VjdHJsOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9yajU0bjFjYjBjLmggYi9pbmNsdWRlL21lZGlhL3JqNTRuMWNiMGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWUzMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9yajU0bjFjYjBjLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIFJKNTROMUNCMEMgUHJpdmF0ZSBkYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19SSjU0TjFDQjBDX0hfXworI2RlZmluZSBfX1JKNTROMUNCMENfSF9fCisKK3N0cnVjdCByajU0bjFfcGRhdGEgeworCXVuc2lnbmVkIGludAltY2xrX2ZyZXE7CisJYm9vbAkJaW9jdGxfaGlnaDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAppbmRleCBlZWQ1ZmNjLi40YWVmZjk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMTA4LDggKzEwOCw2IEBACiAKIHN0cnVjdCBzYWE3MTQ2X3Z2CiB7Ci0JaW50IHZiaV9taW5vcjsKLQogCS8qIHZiaSBjYXB0dXJlICovCiAJc3RydWN0IHNhYTcxNDZfZG1hcXVldWUJCXZiaV9xOwogCS8qIHZiaSB3b3JrYXJvdW5kIGludGVycnVwdCBxdWV1ZSAqLwpAQCAtMTE3LDggKzExNSw2IEBACiAJaW50CQkJCXZiaV9maWVsZGNvdW50OwogCXN0cnVjdCBzYWE3MTQ2X2ZoCQkqdmJpX3N0cmVhbWluZzsKIAotCWludCB2aWRlb19taW5vcjsKLQogCWludAkJCQl2aWRlb19zdGF0dXM7CiAJc3RydWN0IHNhYTcxNDZfZmgJCSp2aWRlb19maDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmggYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaAppbmRleCAwZjM1MjRjLi5iNjc3NDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaAorKysgYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaApAQCAtMyw2ICszLDggQEAKIAogI2RlZmluZSBTSF9DRVVfRkxBR19VU0VfOEJJVF9CVVMJKDEgPDwgMCkgLyogdXNlICA4Yml0IGJ1cyB3aWR0aCAqLwogI2RlZmluZSBTSF9DRVVfRkxBR19VU0VfMTZCSVRfQlVTCSgxIDw8IDEpIC8qIHVzZSAxNmJpdCBidXMgd2lkdGggKi8KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfSFNZTkNfTE9XCQkoMSA8PCAyKSAvKiBkZWZhdWx0IEhpZ2ggaWYgcG9zc2libGUgKi8KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVlNZTkNfTE9XCQkoMSA8PCAzKSAvKiBkZWZhdWx0IEhpZ2ggaWYgcG9zc2libGUgKi8KIAogc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggM2Q3NGU2MC4uZGNjNWI4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTI0LDE4ICsyNCwxMyBAQAogCXN0cnVjdCBkZXZpY2UgKnBkZXY7CQkvKiBQbGF0Zm9ybSBkZXZpY2UgKi8KIAlzMzIgdXNlcl93aWR0aDsKIAlzMzIgdXNlcl9oZWlnaHQ7Ci0JdW5zaWduZWQgc2hvcnQgd2lkdGhfbWluOwotCXVuc2lnbmVkIHNob3J0IGhlaWdodF9taW47Ci0JdW5zaWduZWQgc2hvcnQgeV9za2lwX3RvcDsJLyogTGluZXMgdG8gc2tpcCBhdCB0aGUgdG9wICovCisJZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3JzcGFjZTsKIAl1bnNpZ25lZCBjaGFyIGlmYWNlOwkJLyogSG9zdCBudW1iZXIgKi8KIAl1bnNpZ25lZCBjaGFyIGRldm51bTsJCS8qIERldmljZSBudW1iZXIgcGVyIGhvc3QgKi8KLQl1bnNpZ25lZCBjaGFyIGJ1c3dpZHRoOwkJLyogU2VlIGNvbW1lbnQgaW4gLmMgKi8KIAlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSAqc2Vuc2U7CS8qIFNlZSBjb21tZW50IGluIHN0cnVjdCBkZWZpbml0aW9uICovCiAJc3RydWN0IHNvY19jYW1lcmFfb3BzICpvcHM7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY3VycmVudF9mbXQ7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmZvcm1hdHM7Ci0JaW50IG51bV9mb3JtYXRzOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqY3VycmVudF9mbXQ7CiAJc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp1c2VyX2Zvcm1hdHM7CiAJaW50IG51bV91c2VyX2Zvcm1hdHM7CiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwkJLyogUHJlc2VydmUgZmllbGQgb3ZlciBjbG9zZSgpICovCkBAIC0xMDcsNiArMTAyLDggQEAKIAlpbnQgaTJjX2FkYXB0ZXJfaWQ7CiAJc3RydWN0IGkyY19ib2FyZF9pbmZvICpib2FyZF9pbmZvOwogCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOworCXZvaWQgKnByaXY7CisKIAkvKgogCSAqIEZvciBub24tSTJDIGRldmljZXMgcGxhdGZvcm0gcGxhdGZvcm0gaGFzIHRvIHByb3ZpZGUgbWV0aG9kcyB0bwogCSAqIGFkZCBhIGRldmljZSB0byB0aGUgc3lzdGVtIGFuZCB0byByZW1vdmUKQEAgLTE2MiwyMyArMTU5LDEzIEBACiBpbnQgc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSk7CiB2b2lkIHNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSk7CiAKLWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpzb2NfY2FtZXJhX2Zvcm1hdF9ieV9mb3VyY2MoCi0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpOwogY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICpzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYygKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgaW50IGZvdXJjYyk7CiAKLXN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IHsKLQljb25zdCBjaGFyICpuYW1lOwotCXVuc2lnbmVkIGludCBkZXB0aDsKLQlfX3UzMiBmb3VyY2M7Ci0JZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3JzcGFjZTsKLX07Ci0KIC8qKgogICogc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlIC0gbWF0Y2ggYmV0d2VlbiBob3N0IGFuZCBzZW5zb3IgZm9ybWF0cwotICogQGNhbV9mbXQ6IHNlbnNvciBmb3JtYXQgcHJvdmlkZWQgYnkgdGhlIHNlbnNvcgotICogQGhvc3RfZm10OiBob3N0IGZvcm1hdCBhZnRlciBob3N0IHRyYW5zbGF0aW9uIGZyb20gY2FtX2ZtdAotICogQGJ1c3dpZHRoOiBidXMgd2lkdGggZm9yIHRoaXMgZm9ybWF0CisgKiBAY29kZTogY29kZSBvZiBhIHNlbnNvciBwcm92aWRlZCBmb3JtYXQKKyAqIEBob3N0X2ZtdDogaG9zdCBmb3JtYXQgYWZ0ZXIgaG9zdCB0cmFuc2xhdGlvbiBmcm9tIGNvZGUKICAqCiAgKiBIb3N0IGFuZCBzZW5zb3IgdHJhbnNsYXRpb24gc3RydWN0dXJlLiBVc2VkIGluIHRhYmxlIG9mIGhvc3QgYW5kIHNlbnNvcgogICogZm9ybWF0cyBtYXRjaGluZ3MgaW4gc29jX2NhbWVyYV9kZXZpY2UuIEEgaG9zdCBjYW4gb3ZlcnJpZGUgdGhlIGdlbmVyaWMgbGlzdApAQCAtMTg2LDkgKzE3Myw4IEBACiAgKiBmb3JtYXQgc2V0dXAuCiAgKi8KIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSB7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbV9mbXQ7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmhvc3RfZm10OwotCXVuc2lnbmVkIGNoYXIgYnVzd2lkdGg7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGU7CisJY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpob3N0X2ZtdDsKIH07CiAKIHN0cnVjdCBzb2NfY2FtZXJhX29wcyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCmluZGV4IGJiNzA0MDEuLjBlY2VmZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCkBAIC0xOSwxMSArMTksMTAgQEAKIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gewogCWNvbnN0IGNoYXIgKmZvcm1hdF9uYW1lOwogCXVuc2lnbmVkIGxvbmcgZm9ybWF0X2RlcHRoOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm9ybWF0OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgZm9ybWF0OwogCXVuc2lnbmVkIGxvbmcgYnVzX3BhcmFtOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfbGluayBsaW5rOwogfTsKIAogI2VuZGlmIC8qIF9fU09DX0NBTUVSQV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX21lZGlhYnVzLmggYi9pbmNsdWRlL21lZGlhL3NvY19tZWRpYWJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzN2NkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19tZWRpYWJ1cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBTb0MtY2FtZXJhIE1lZGlhIEJ1cyBBUEkgZXh0ZW5zaW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFNPQ19NRURJQUJVU19ICisjZGVmaW5lIFNPQ19NRURJQUJVU19ICisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFidXMuaD4KKworLyoqCisgKiBlbnVtIHNvY19tYnVzX3BhY2tpbmcgLSBkYXRhIHBhY2tpbmcgdHlwZXMgb24gdGhlIG1lZGlhLWJ1cworICogQFNPQ19NQlVTX1BBQ0tJTkdfTk9ORToJbm8gcGFja2luZywgYml0LWZvci1iaXQgdHJhbnNmZXIgdG8gUkFNCisgKiBAU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEk6CTE2IGJpdHMgdHJhbnNmZXJyZWQgaW4gMiA4LWJpdCBzYW1wbGVzLCBpbiB0aGUKKyAqCQkJCXBvc3NpYmx5IGluY29tcGxldGUgYnl0ZSBoaWdoIGJpdHMgYXJlIHBhZGRpbmcKKyAqIEBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURMTzoJYXMgYWJvdmUsIGJ1dCBsb3cgYml0cyBhcmUgcGFkZGluZworICogQFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTY6CXNhbXBsZSB3aWR0aCAoZS5nLiwgMTAgYml0cykgaGFzIHRvIGJlIGV4dGVuZGVkCisgKgkJCQl0byAxNiBiaXRzCisgKi8KK2VudW0gc29jX21idXNfcGFja2luZyB7CisJU09DX01CVVNfUEFDS0lOR19OT05FLAorCVNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAorCVNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBRExPLAorCVNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTYsCit9OworCisvKioKKyAqIGVudW0gc29jX21idXNfb3JkZXIgLSBzYW1wbGUgb3JkZXIgb24gdGhlIG1lZGlhIGJ1cworICogQFNPQ19NQlVTX09SREVSX0xFOgkJbGVhc3Qgc2lnbmlmaWNhbnQgc2FtcGxlIGZpcnN0CisgKiBAU09DX01CVVNfT1JERVJfQkU6CQltb3N0IHNpZ25pZmljYW50IHNhbXBsZSBmaXJzdAorICovCitlbnVtIHNvY19tYnVzX29yZGVyIHsKKwlTT0NfTUJVU19PUkRFUl9MRSwKKwlTT0NfTUJVU19PUkRFUl9CRSwKK307CisKKy8qKgorICogc3RydWN0IHNvY19tYnVzX3BpeGVsZm10IC0gRGF0YSBmb3JtYXQgb24gdGhlIG1lZGlhIGJ1cworICogQG5hbWU6CQlOYW1lIG9mIHRoZSBmb3JtYXQKKyAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSwgdGhhdCB3aWxsIGJlIG9idGFpbmVkIGlmIHRoZSBkYXRhIGlzCisgKgkJCXN0b3JlZCBpbiBtZW1vcnkgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisgKiBAcGFja2luZzoJCVR5cGUgb2Ygc2FtcGxlLXBhY2tpbmcsIHRoYXQgaGFzIHRvIGJlIHVzZWQKKyAqIEBvcmRlcjoJCVNhbXBsZSBvcmRlciB3aGVuIHN0b3JpbmcgaW4gbWVtb3J5CisgKiBAYml0c19wZXJfc2FtcGxlOglIb3cgbWFueSBiaXRzIHRoZSBicmlkZ2UgaGFzIHRvIHNhbXBsZQorICovCitzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgeworCWNvbnN0IGNoYXIJCSpuYW1lOworCXUzMgkJCWZvdXJjYzsKKwllbnVtIHNvY19tYnVzX3BhY2tpbmcJcGFja2luZzsKKwllbnVtIHNvY19tYnVzX29yZGVyCW9yZGVyOworCXU4CQkJYml0c19wZXJfc2FtcGxlOworfTsKKworY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpzb2NfbWJ1c19nZXRfZm10ZGVzYygKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZSk7CitzMzIgc29jX21idXNfYnl0ZXNfcGVyX2xpbmUodTMyIHdpZHRoLCBjb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgKm1mKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R3OTkxMC5oIGIvaW5jbHVkZS9tZWRpYS90dzk5MTAuaAppbmRleCA3MzIzMWU3Li41ZTI4OTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R3OTkxMC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKQEAgLTMyLDcgKzMyLDYgQEAKIHN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbyB7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKIAllbnVtIHR3OTkxMF9tcG91dF9waW4gIG1wb3V0OwotCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgbGluazsKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKaW5kZXggOTE5NDJkYi4uNmNjMTA3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCkBAIC0yNjcsNiArMjY3LDggQEAKIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMJPSA0NTAxMCwgLyogTm8gd2F5IHRvIGRldGVjdCAibm9ybWFsIiBJNzdBVHggKi8KIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0JPSA0NTAxNSwgLyogYW5kICJsZWFkIGZyZWUiIElBN0FUeCBjaGlwcyAqLwogCVY0TDJfSURFTlRfTVQ5VDAzMQkJPSA0NTAyMCwKKwlWNEwyX0lERU5UX01UOVQxMTEJCT0gNDUwMjEsCisJVjRMMl9JREVOVF9NVDlUMTEyCQk9IDQ1MDIyLAogCVY0TDJfSURFTlRfTVQ5VjExMQkJPSA0NTAzMSwKIAlWNEwyX0lERU5UX01UOVYxMTIJCT0gNDUwMzIsCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCAxYzI1YjEwLi4xYzdiMjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC0yMTIsNSArMjEyLDUgQEAKIAkJCSAgIHVuc2lnbmVkIGludCAqaCwgdW5zaWduZWQgaW50IGhtaW4sCiAJCQkgICB1bnNpZ25lZCBpbnQgaG1heCwgdW5zaWduZWQgaW50IGhhbGlnbiwKIAkJCSAgIHVuc2lnbmVkIGludCBzYWxpZ24pOwotCitpbnQgdjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8odTMyIHByZXNldCwgc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgKmluZm8pOwogI2VuZGlmIC8qIFY0TDJfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggNzNjOTg2Ny4uMmRlZTkzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtMjgsMTAgKzI4LDEwIEBACiBzdHJ1Y3QgdmlkZW9fZGV2aWNlOwogc3RydWN0IHY0bDJfZGV2aWNlOwogCi0vKiBGbGFnIHRvIG1hcmsgdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgYXMgdW5yZWdpc3RlcmVkLgotICAgRHJpdmVycyBjYW4gc2V0IHRoaXMgZmxhZyBpZiB0aGV5IHdhbnQgdG8gYmxvY2sgYWxsIGZ1dHVyZQotICAgZGV2aWNlIGFjY2Vzcy4gSXQgaXMgc2V0IGJ5IHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlLiAqLwotI2RlZmluZSBWNEwyX0ZMX1VOUkVHSVNURVJFRAkoMCkKKy8qIEZsYWcgdG8gbWFyayB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdCBhcyByZWdpc3RlcmVkLgorICAgRHJpdmVycyBjYW4gY2xlYXIgdGhpcyBmbGFnIGlmIHRoZXkgd2FudCB0byBibG9jayBhbGwgZnV0dXJlCisgICBkZXZpY2UgYWNjZXNzLiBJdCBpcyBjbGVhcmVkIGJ5IHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlLiAqLworI2RlZmluZSBWNEwyX0ZMX1JFR0lTVEVSRUQJKDApCiAKIHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CkBAIC05Niw5ICs5Niw3IEBACiAvKiBSZWdpc3RlciB2aWRlbyBkZXZpY2VzLiBOb3RlIHRoYXQgaWYgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxzLAogICAgdGhlIHJlbGVhc2UoKSBjYWxsYmFjayBvZiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSBpcyAqbm90KiBjYWxsZWQsIHNvCiAgICB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGFueSBkYXRhLiBVc3VhbGx5IHRoYXQgbWVhbnMgdGhhdAotICAgeW91IGNhbGwgdmlkZW9fZGV2aWNlX3JlbGVhc2UoKSBvbiBmYWlsdXJlLgotCi0gICBBbHNvIG5vdGUgdGhhdCB2ZGV2LT5taW5vciBpcyBzZXQgdG8gLTEgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQuICovCisgICB5b3UgY2FsbCB2aWRlb19kZXZpY2VfcmVsZWFzZSgpIG9uIGZhaWx1cmUuICovCiBpbnQgX19tdXN0X2NoZWNrIHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKTsKIAogLyogU2FtZSBhcyB2aWRlb19yZWdpc3Rlcl9kZXZpY2UsIGJ1dCBubyB3YXJuaW5nIGlzIGlzc3VlZCBpZiB0aGUgZGVzaXJlZApAQCAtMTA2LDcgKzEwNCw3IEBACiBpbnQgX19tdXN0X2NoZWNrIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9ub193YXJuKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIpOwogCiAvKiBVbnJlZ2lzdGVyIHZpZGVvIGRldmljZXMuIFdpbGwgZG8gbm90aGluZyBpZiB2ZGV2ID09IE5VTEwgb3IKLSAgIHZkZXYtPm1pbm9yIDwgMC4gKi8KKyAgIHZpZGVvX2lzX3JlZ2lzdGVyZWQoKSByZXR1cm5zIGZhbHNlLiAqLwogdm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKIAogLyogaGVscGVyIGZ1bmN0aW9ucyB0byBhbGxvYy9yZWxlYXNlIHN0cnVjdCB2aWRlb19kZXZpY2UsIHRoZQpAQCAtMTQxLDkgKzEzOSwxNCBAQAogCXJldHVybiB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdmlkZW9faXNfdW5yZWdpc3RlcmVkKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnZpZGVvX2RldmljZV9ub2RlX25hbWUoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKIHsKLQlyZXR1cm4gdGVzdF9iaXQoVjRMMl9GTF9VTlJFR0lTVEVSRUQsICZ2ZGV2LT5mbGFncyk7CisJcmV0dXJuIGRldl9uYW1lKCZ2ZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2aWRlb19pc19yZWdpc3RlcmVkKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJcmV0dXJuIHRlc3RfYml0KFY0TDJfRkxfUkVHSVNURVJFRCwgJnZkZXYtPmZsYWdzKTsKIH0KIAogI2VuZGlmIC8qIF9WNEwyX0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IDdhNDUyOWQuLmU4YmEwZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0yMzksNiArMjM5LDIxIEBACiAJaW50ICgqdmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCSAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCk7CiAKKwkvKiBEViBUaW1pbmdzIElPQ1RMcyAqLworCWludCAoKnZpZGlvY19lbnVtX2R2X3ByZXNldHMpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJICAgICAgIHN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0ICpwcmVzZXQpOworCisJaW50ICgqdmlkaW9jX3NfZHZfcHJlc2V0KSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCSAgIHN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcHJlc2V0KTsKKwlpbnQgKCp2aWRpb2NfZ19kdl9wcmVzZXQpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJICAgc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpOworCWludCAoKnZpZGlvY19xdWVyeV9kdl9wcmVzZXQpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcXByZXNldCk7CisJaW50ICgqdmlkaW9jX3NfZHZfdGltaW5ncykgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkgICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncyk7CisJaW50ICgqdmlkaW9jX2dfZHZfdGltaW5ncykgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkgICAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncyk7CisKIAkvKiBGb3Igb3RoZXIgcHJpdmF0ZSBpb2N0bHMgKi8KIAlsb25nICgqdmlkaW9jX2RlZmF1bHQpCSAgICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlpbnQgY21kLCB2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLW1lZGlhYnVzLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItbWVkaWFidXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJlMDJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLW1lZGlhYnVzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIE1lZGlhIEJ1cyBBUEkgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgVjRMMl9NRURJQUJVU19ICisjZGVmaW5lIFY0TDJfTUVESUFCVVNfSAorCisvKgorICogVGhlc2UgcGl4ZWwgY29kZXMgdW5pcXVlbHkgaWRlbnRpZnkgZGF0YSBmb3JtYXRzIG9uIHRoZSBtZWRpYSBidXMuIE1vc3RseQorICogdGhleSBjb3JyZXNwb25kIHRvIHNpbWlsYXJseSBuYW1lZCBWNEwyX1BJWF9GTVRfKiBmb3JtYXRzLCBmb3JtYXQgMCBpcworICogcmVzZXJ2ZWQsIFY0TDJfTUJVU19GTVRfRklYRUQgc2hhbGwgYmUgdXNlZCBieSBob3N0LWNsaWVudCBwYWlycywgd2hlcmUgdGhlCisgKiBkYXRhIGZvcm1hdCBpcyBmaXhlZC4gQWRkaXRpb25hbGx5LCAiMlg4IiBtZWFucyB0aGF0IG9uZSBwaXhlbCBpcyB0cmFuc2ZlcnJlZAorICogaW4gdHdvIDgtYml0IHNhbXBsZXMsICJCRSIgb3IgIkxFIiBzcGVjaWZ5IGluIHdoaWNoIG9yZGVyIHRob3NlIHNhbXBsZXMgYXJlCisgKiB0cmFuc2ZlcnJlZCBvdmVyIHRoZSBidXM6ICJMRSIgbWVhbnMgdGhhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUKKyAqIHRyYW5zZmVycmVkIGZpcnN0LCAiQkUiIG1lYW5zIHRoYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgdHJhbnNmZXJyZWQKKyAqIGZpcnN0LCBhbmQgIlBBREhJIiBhbmQgIlBBRExPIiBkZWZpbmUgd2hpY2ggYml0cyAtIGxvdyBvciBoaWdoLCBpbiB0aGUKKyAqIGluY29tcGxldGUgaGlnaCBieXRlLCBhcmUgZmlsbGVkIHdpdGggcGFkZGluZyBiaXRzLgorICovCitlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgeworCVY0TDJfTUJVU19GTVRfRklYRUQgPSAxLAorCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0xFLAorCVY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0xFLAorCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4X0JFLAorCVY0TDJfTUJVU19GTVRfWVZZVThfMlg4X0JFLAorCVY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9MRSwKKwlWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfQkUsCisJVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFLAorCVY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9CRSwKKwlWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsCisJVjRMMl9NQlVTX0ZNVF9HUkVZOF8xWDgsCisJVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwKKwlWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBREhJX0xFLAorCVY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFETE9fTEUsCisJVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9CRSwKKwlWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0JFLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IC0gZnJhbWUgZm9ybWF0IG9uIHRoZSBtZWRpYSBidXMKKyAqIEB3aWR0aDoJZnJhbWUgd2lkdGgKKyAqIEBoZWlnaHQ6CWZyYW1lIGhlaWdodAorICogQGNvZGU6CWRhdGEgZm9ybWF0IGNvZGUKKyAqIEBmaWVsZDoJdXNlZCBpbnRlcmxhY2luZyB0eXBlCisgKiBAY29sb3JzcGFjZToJY29sb3JzcGFjZSBvZiB0aGUgZGF0YQorICovCitzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IHsKKwlfX3UzMgkJCQl3aWR0aDsKKwlfX3UzMgkJCQloZWlnaHQ7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlCWNvZGU7CisJZW51bSB2NGwyX2ZpZWxkCQkJZmllbGQ7CisJZW51bSB2NGwyX2NvbG9yc3BhY2UJCWNvbG9yc3BhY2U7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAppbmRleCAwMGJmMTc2Li45YmE5OWNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIF9WNEwyX1NVQkRFVl9ICiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFidXMuaD4KIAogLyogZ2VuZXJpYyB2NGwyX2RldmljZSBub3RpZnkgY2FsbGJhY2sgbm90aWZpY2F0aW9uIHZhbHVlcyAqLwogI2RlZmluZSBWNEwyX1NVQkRFVl9JUl9SWF9OT1RJRlkJCV9JT1coJ3YnLCAwLCB1MzIpCkBAIC0yMDcsNyArMjA4LDcgQEAKICAgIHNfc3RkX291dHB1dDogc2V0IHY0bDJfc3RkX2lkIGZvciB2aWRlbyBPVVRQVVQgZGV2aWNlcy4gVGhpcyBpcyBpZ25vcmVkIGJ5CiAJdmlkZW8gaW5wdXQgZGV2aWNlcy4KIAotICBzX2NyeXN0YWxfZnJlcTogc2V0cyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjcnlzdGFsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCisgICBzX2NyeXN0YWxfZnJlcTogc2V0cyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjcnlzdGFsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCiAJY2xvY2tzIGluIEh6LiBBbiBleHRyYSBmbGFncyBmaWVsZCBhbGxvd3MgZGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KIAlyZWdhcmRpbmcgY2xvY2sgZnJlcXVlbmN5IGRpdmlkZXJzLCBldGMuIElmIG5vdCB1c2VkLCB0aGVuIHNldCBmbGFncwogCXRvIDAuIElmIHRoZSBmcmVxdWVuY3kgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiAtRUlOVkFMIGlzIHJldHVybmVkLgpAQCAtMjE3LDYgKzIxOCwyNiBAQAogCiAgICBzX3JvdXRpbmc6IHNlZSBzX3JvdXRpbmcgaW4gYXVkaW9fb3BzLCBleGNlcHQgdGhpcyB2ZXJzaW9uIGlzIGZvciB2aWRlbwogCWRldmljZXMuCisKKyAgIHNfZHZfcHJlc2V0OiBzZXQgZHYgKERpZ2l0YWwgVmlkZW8pIHByZXNldCBpbiB0aGUgc3ViIGRldmljZS4gU2ltaWxhciB0bworCXNfc3RkKCkKKworICAgcXVlcnlfZHZfcHJlc2V0OiBxdWVyeSBkdiBwcmVzZXQgaW4gdGhlIHN1YiBkZXZpY2UuIFRoaXMgaXMgc2ltaWxhciB0bworCXF1ZXJ5c3RkKCkKKworICAgc19kdl90aW1pbmdzKCk6IFNldCBjdXN0b20gZHYgdGltaW5ncyBpbiB0aGUgc3ViIGRldmljZS4gVGhpcyBpcyB1c2VkCisJd2hlbiBzdWIgZGV2aWNlIGlzIGNhcGFibGUgb2Ygc2V0dGluZyBkZXRhaWxlZCB0aW1pbmcgaW5mb3JtYXRpb24KKwlpbiB0aGUgaGFyZHdhcmUgdG8gZ2VuZXJhdGUvZGV0ZWN0IHRoZSB2aWRlbyBzaWduYWwuCisKKyAgIGdfZHZfdGltaW5ncygpOiBHZXQgY3VzdG9tIGR2IHRpbWluZ3MgaW4gdGhlIHN1YiBkZXZpY2UuCisKKyAgIGVudW1fbWJ1c19mbXQ6IGVudW1lcmF0ZSBwaXhlbCBmb3JtYXRzLCBwcm92aWRlZCBieSBhIHZpZGVvIGRhdGEgc291cmNlCisKKyAgIGdfbWJ1c19mbXQ6IGdldCB0aGUgY3VycmVudCBwaXhlbCBmb3JtYXQsIHByb3ZpZGVkIGJ5IGEgdmlkZW8gZGF0YSBzb3VyY2UKKworICAgdHJ5X21idXNfZm10OiB0cnkgdG8gc2V0IGEgcGl4ZWwgZm9ybWF0IG9uIGEgdmlkZW8gZGF0YSBzb3VyY2UKKworICAgc19tYnVzX2ZtdDogc2V0IGEgcGl4ZWwgZm9ybWF0IG9uIGEgdmlkZW8gZGF0YSBzb3VyY2UKICAqLwogc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB7CiAJaW50ICgqc19yb3V0aW5nKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpOwpAQCAtMjQwLDYgKzI2MSwzMyBAQAogCWludCAoKnNfcGFybSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFyYW0pOwogCWludCAoKmVudW1fZnJhbWVzaXplcykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKTsKIAlpbnQgKCplbnVtX2ZyYW1laW50ZXJ2YWxzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAqZml2YWwpOworCWludCAoKnNfZHZfcHJlc2V0KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpOworCWludCAoKnF1ZXJ5X2R2X3ByZXNldCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcHJlc2V0KTsKKwlpbnQgKCpzX2R2X3RpbWluZ3MpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdzKTsKKwlpbnQgKCpnX2R2X3RpbWluZ3MpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdzKTsKKwlpbnQgKCplbnVtX21idXNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgaW5kZXgsCisJCQkgICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSAqY29kZSk7CisJaW50ICgqZ19tYnVzX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KTsKKwlpbnQgKCp0cnlfbWJ1c19mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KTsKKwlpbnQgKCpzX21idXNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmbXQpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2Vuc29yX29wcyAtIHY0bDItc3ViZGV2IHNlbnNvciBvcGVyYXRpb25zCisgKiBAZ19za2lwX3RvcF9saW5lczogbnVtYmVyIG9mIGxpbmVzIGF0IHRoZSB0b3Agb2YgdGhlIGltYWdlIHRvIGJlIHNraXBwZWQuCisgKgkJICAgICAgVGhpcyBpcyBuZWVkZWQgZm9yIHNvbWUgc2Vuc29ycywgd2hpY2ggYWx3YXlzIGNvcnJ1cHQKKyAqCQkgICAgICBzZXZlcmFsIHRvcCBsaW5lcyBvZiB0aGUgb3V0cHV0IGltYWdlLCBvciB3aGljaCBzZW5kIHRoZWlyCisgKgkJICAgICAgbWV0YWRhdGEgaW4gdGhlbS4KKyAqLworc3RydWN0IHY0bDJfc3ViZGV2X3NlbnNvcl9vcHMgeworCWludCAoKmdfc2tpcF90b3BfbGluZXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqbGluZXMpOwogfTsKIAogLyoKQEAgLTMyNiwxMSArMzc0LDEyIEBACiB9OwogCiBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHsKLQljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgICpjb3JlOwotCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgKnR1bmVyOwotCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgKmF1ZGlvOwotCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgKnZpZGVvOwotCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9pcl9vcHMgICAgKmlyOworCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcwkqY29yZTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzCSp0dW5lcjsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzCSphdWRpbzsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzCSp2aWRlbzsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfb3BzCQkqaXI7CisJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3NlbnNvcl9vcHMJKnNlbnNvcjsKIH07CiAKICNkZWZpbmUgVjRMMl9TVUJERVZfTkFNRV9TSVpFIDMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCAwODg0YjlhLi5hZGQ3OTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTk4OCw2ICs5ODgsMTUgQEAKICAqCiAgKiBAZHVtcF9zdXJ2ZXk6IGdldCBzaXRlIHN1cnZleSBpbmZvcm1hdGlvbi4KICAqCisgKiBAcmVtYWluX29uX2NoYW5uZWw6IFJlcXVlc3QgdGhlIGRyaXZlciB0byByZW1haW4gYXdha2Ugb24gdGhlIHNwZWNpZmllZAorICoJY2hhbm5lbCBmb3IgdGhlIHNwZWNpZmllZCBkdXJhdGlvbiB0byBjb21wbGV0ZSBhbiBvZmYtY2hhbm5lbAorICoJb3BlcmF0aW9uIChlLmcuLCBwdWJsaWMgYWN0aW9uIGZyYW1lIGV4Y2hhbmdlKS4gV2hlbiB0aGUgZHJpdmVyIGlzCisgKglyZWFkeSBvbiB0aGUgcmVxdWVzdGVkIGNoYW5uZWwsIGl0IG11c3QgaW5kaWNhdGUgdGhpcyB3aXRoIGFuIGV2ZW50CisgKglub3RpZmljYXRpb24gYnkgY2FsbGluZyBjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKCkuCisgKiBAY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsOiBDYW5jZWwgYW4gb24tZ29pbmcgcmVtYWluLW9uLWNoYW5uZWwgb3BlcmF0aW9uLgorICoJVGhpcyBhbGxvd3MgdGhlIG9wZXJhdGlvbiB0byBiZSB0ZXJtaW5hdGVkIHByaW9yIHRvIHRpbWVvdXQgYmFzZWQgb24KKyAqCXRoZSBkdXJhdGlvbiB2YWx1ZS4KKyAqCiAgKiBAdGVzdG1vZGVfY21kOiBydW4gYSB0ZXN0IG1vZGUgY29tbWFuZAogICoKICAqIEBzZXRfcG1rc2E6IENhY2hlIGEgUE1LSUQgZm9yIGEgQlNTSUQuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZnVsbG1hYwpAQCAtMTEyMyw2ICsxMTMyLDE2IEBACiAJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EpOwogCWludAkoKmZsdXNoX3Bta3NhKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAorCWludAkoKnJlbWFpbl9vbl9jaGFubmVsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGR1cmF0aW9uLAorCQkJCSAgICAgdTY0ICpjb29raWUpOworCWludAkoKmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICB1NjQgY29va2llKTsKKwogCS8qIHNvbWUgdGVtcG9yYXJ5IHN0dWZmIHRvIGZpbmlzaCB3ZXh0ICovCiAJaW50CSgqc2V0X3Bvd2VyX21nbXQpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KTsKQEAgLTE1NzgsNyArMTU5Nyw3IEBACiAgKiBAYWRkcjogdGhlIGRldmljZSBNQUMgYWRkcmVzcwogICogQGlmdHlwZTogdGhlIHZpcnR1YWwgaW50ZXJmYWNlIHR5cGUKICAqLwotaW50IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFkZHIsCitpbnQgaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1OCAqYWRkciwKIAkJCSAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKTsKIAogLyoqCkBAIC0xNTg5LDEwICsxNjA4LDI4IEBACiAgKiBAYnNzaWQ6IHRoZSBuZXR3b3JrIGJzc2lkICh1c2VkIG9ubHkgZm9yIGlmdHlwZSBTVEFUSU9OIGFuZCBBREhPQykKICAqIEBxb3M6IGJ1aWxkIDgwMi4xMSBRb1MgZGF0YSBmcmFtZQogICovCi1pbnQgaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKHN0cnVjdCBza19idWZmICpza2IsIHU4ICphZGRyLAoraW50IGllZWU4MDIxMV9kYXRhX2Zyb21fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1OCAqYWRkciwKIAkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsIHU4ICpic3NpZCwgYm9vbCBxb3MpOwogCiAvKioKKyAqIGllZWU4MDIxMV9hbXNkdV90b184MDIzcyAtIGRlY29kZSBhbiBJRUVFIDgwMi4xMW4gQS1NU0RVIGZyYW1lCisgKgorICogRGVjb2RlIGFuIElFRUUgODAyLjExbiBBLU1TRFUgZnJhbWUgYW5kIGNvbnZlcnQgaXQgdG8gYSBsaXN0IG9mCisgKiA4MDIuMyBmcmFtZXMuIFRoZSBAbGlzdCB3aWxsIGJlIGVtcHR5IGlmIHRoZSBkZWNvZGUgZmFpbHMuIFRoZQorICogQHNrYiBpcyBjb25zdW1lZCBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAqCisgKiBAc2tiOiBUaGUgaW5wdXQgSUVFRSA4MDIuMTFuIEEtTVNEVSBmcmFtZS4KKyAqIEBsaXN0OiBUaGUgb3V0cHV0IGxpc3Qgb2YgODAyLjMgZnJhbWVzLiBJdCBtdXN0IGJlIGFsbG9jYXRlZCBhbmQKKyAqCWluaXRpYWxpemVkIGJ5IGJ5IHRoZSBjYWxsZXIuCisgKiBAYWRkcjogVGhlIGRldmljZSBNQUMgYWRkcmVzcy4KKyAqIEBpZnR5cGU6IFRoZSBkZXZpY2UgaW50ZXJmYWNlIHR5cGUuCisgKiBAZXh0cmFfaGVhZHJvb206IFRoZSBoYXJkd2FyZSBleHRyYSBoZWFkcm9vbSBmb3IgU0tCcyBpbiB0aGUgQGxpc3QuCisgKi8KK3ZvaWQgaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCisJCQkgICAgICBjb25zdCB1OCAqYWRkciwgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20pOworCisvKioKICAqIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgLSBkZXRlcm1pbmUgdGhlIDgwMi4xcC8xZCB0YWcgZm9yIGEgZGF0YSBmcmFtZQogICogQHNrYjogdGhlIGRhdGEgZnJhbWUKICAqLwpAQCAtMjEyOSw1ICsyMTY2LDQ1IEBACiB2b2lkIGNmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcmVhc29uLAogCQkJICAgdTggKmllLCBzaXplX3QgaWVfbGVuLCBnZnBfdCBnZnApOwogCisvKioKKyAqIGNmZzgwMjExX3JlYWR5X29uX2NoYW5uZWwgLSBub3RpZmljYXRpb24gb2YgcmVtYWluX29uX2NoYW5uZWwgc3RhcnQKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAY29va2llOiB0aGUgcmVxdWVzdCBjb29raWUKKyAqIEBjaGFuOiBUaGUgY3VycmVudCBjaGFubmVsIChmcm9tIHJlbWFpbl9vbl9jaGFubmVsIHJlcXVlc3QpCisgKiBAY2hhbm5lbF90eXBlOiBDaGFubmVsIHR5cGUKKyAqIEBkdXJhdGlvbjogRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIGRyaXZlciBpbnRlbnRzIHRvIHJlbWFpbiBvbiB0aGUKKyAqCWNoYW5uZWwKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU2NCBjb29raWUsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkIC0gcmVtYWluX29uX2NoYW5uZWwgZHVyYXRpb24gZXhwaXJlZAorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBjb29raWU6IHRoZSByZXF1ZXN0IGNvb2tpZQorICogQGNoYW46IFRoZSBjdXJyZW50IGNoYW5uZWwgKGZyb20gcmVtYWluX29uX2NoYW5uZWwgcmVxdWVzdCkKKyAqIEBjaGFubmVsX3R5cGU6IENoYW5uZWwgdHlwZQorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICovCit2b2lkIGNmZzgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJdTY0IGNvb2tpZSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkJZ2ZwX3QgZ2ZwKTsKKworCisvKioKKyAqIGNmZzgwMjExX25ld19zdGEgLSBub3RpZnkgdXNlcnNwYWNlIGFib3V0IHN0YXRpb24KKyAqCisgKiBAZGV2OiB0aGUgbmV0ZGV2CisgKiBAbWFjX2FkZHI6IHRoZSBzdGF0aW9uJ3MgYWRkcmVzcworICogQHNpbmZvOiB0aGUgc3RhdGlvbiBpbmZvcm1hdGlvbgorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICovCit2b2lkIGNmZzgwMjExX25ld19zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAorCQkgICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKTsKIAogI2VuZGlmIC8qIF9fTkVUX0NGRzgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKaW5kZXggMzljNGE1OS4uY2UwNzhjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzdC5oCisrKyBiL2luY2x1ZGUvbmV0L2RzdC5oCkBAIC04Myw4ICs4Myw2IEBACiAJICogKEwxX0NBQ0hFX1NJWkUgd291bGQgYmUgdG9vIG11Y2gpCiAJICovCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JbG9uZwkJCV9fcGFkX3RvX2FsaWduX3JlZmNudFsyXTsKLSNlbHNlCiAJbG9uZwkJCV9fcGFkX3RvX2FsaWduX3JlZmNudFsxXTsKICNlbmRpZgogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGMuaCBiL2luY2x1ZGUvbmV0L2xsYy5oCmluZGV4IDc5NDBkYTEuLjU1MDNiNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsYy5oCisrKyBiL2luY2x1ZGUvbmV0L2xsYy5oCkBAIC0xNiw2ICsxNiw5IEBACiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0X251bGxzLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTMxLDYgKzM0LDEyIEBACiAjZGVmaW5lIExMQ19TQVBfU1RBVEVfSU5BQ1RJVkUJMQogI2RlZmluZSBMTENfU0FQX1NUQVRFX0FDVElWRQkyCiAKKyNkZWZpbmUgTExDX1NLX0RFVl9IQVNIX0JJVFMgNgorI2RlZmluZSBMTENfU0tfREVWX0hBU0hfRU5UUklFUyAoMTw8TExDX1NLX0RFVl9IQVNIX0JJVFMpCisKKyNkZWZpbmUgTExDX1NLX0xBRERSX0hBU0hfQklUUyA2CisjZGVmaW5lIExMQ19TS19MQUREUl9IQVNIX0VOVFJJRVMgKDE8PExMQ19TS19MQUREUl9IQVNIX0JJVFMpCisKIC8qKgogICogc3RydWN0IGxsY19zYXAgLSBEZWZpbmVzIHRoZSBTQVAgY29tcG9uZW50CiAgKgpAQCAtNTMsMTggKzYyLDM4IEBACiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCXN0cnVjdCBsbGNfYWRkcgkgbGFkZHI7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCB7Ci0JCXJ3bG9ja190CSAgbG9jazsKLQkJc3RydWN0IGhsaXN0X2hlYWQgbGlzdDsKLQl9IHNrX2xpc3Q7CisJc3BpbmxvY2tfdCBza19sb2NrOworCWludCBza19jb3VudDsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCBza19sYWRkcl9oYXNoW0xMQ19TS19MQUREUl9IQVNIX0VOVFJJRVNdOworCXN0cnVjdCBobGlzdF9oZWFkIHNrX2Rldl9oYXNoW0xMQ19TS19ERVZfSEFTSF9FTlRSSUVTXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBobGlzdF9oZWFkICpsbGNfc2tfZGV2X2hhc2goc3RydWN0IGxsY19zYXAgKnNhcCwgaW50IGlmaW5kZXgpCit7CisJcmV0dXJuICZzYXAtPnNrX2Rldl9oYXNoW2lmaW5kZXggJSBMTENfU0tfREVWX0hBU0hfRU5UUklFU107Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UzMiBsbGNfc2tfbGFkZHJfaGFzaGZuKHN0cnVjdCBsbGNfc2FwICpzYXAsIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCit7CisJcmV0dXJuIGhhc2hfMzIoamhhc2gobGFkZHItPm1hYywgc2l6ZW9mKGxhZGRyLT5tYWMpLCAwKSwKKwkJICAgICAgIExMQ19TS19MQUREUl9IQVNIX0JJVFMpOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbGxjX3NrX2xhZGRyX2hhc2goc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpsYWRkcikKK3sKKwlyZXR1cm4gJnNhcC0+c2tfbGFkZHJfaGFzaFtsbGNfc2tfbGFkZHJfaGFzaGZuKHNhcCwgbGFkZHIpXTsKK30KKwogI2RlZmluZSBMTENfREVTVF9JTlZBTElEICAgICAgICAgMCAgICAgIC8qIEludmFsaWQgTExDIFBEVSB0eXBlICovCiAjZGVmaW5lIExMQ19ERVNUX1NBUCAgICAgICAgICAgICAxICAgICAgLyogVHlwZSAxIGdvZXMgaGVyZSAqLwogI2RlZmluZSBMTENfREVTVF9DT05OICAgICAgICAgICAgMiAgICAgIC8qIFR5cGUgMiBnb2VzIGhlcmUgKi8KIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGxjX3NhcF9saXN0OwotZXh0ZXJuIHJ3bG9ja190IGxsY19zYXBfbGlzdF9sb2NrOworZXh0ZXJuIHNwaW5sb2NrX3QgbGxjX3NhcF9saXN0X2xvY2s7CiAKIGV4dGVybiBpbnQgbGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKaW5kZXggZTIzNzRlMy4uMmY5N2Q4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaAorKysgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCkBAIC03Niw2ICs3Niw4IEBACiAJdTMyCQkgICAgcnhfcGR1X2hkcjsJICAgLyogdXNlZCBmb3Igc2F2aW5nIGhlYWRlciBvZiBsYXN0IHBkdQogCQkJCQkgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi4KIAkJCQkJICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi8KKwl1MzIJCSAgICBjbXNnX2ZsYWdzOworCXN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19zb2NrICpsbGNfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggMGJmMzY5Ny4uZjA3M2EyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC01OTUsOCArNTk1LDEwIEBACiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUw6IHRoZSBjaGFubmVsL2NoYW5uZWxfdHlwZSBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUzogcmV0cnkgbGltaXRzIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTogSWRsZSBmbGFnIGNoYW5nZWQKKyAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfU01QUzogU3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXJzYXZlIG1vZGUgY2hhbmdlZAogICovCiBlbnVtIGllZWU4MDIxMV9jb25mX2NoYW5nZWQgeworCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTCQk9IEJJVCgxKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMCT0gQklUKDIpLAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SCQk9IEJJVCgzKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMJCT0gQklUKDQpLApAQCAtNjA3LDYgKzYwOSwyMSBAQAogfTsKIAogLyoqCisgKiBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgLSBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlciBzYXZlIG1vZGUKKyAqCisgKiBACisgKi8KK2VudW0gaWVlZTgwMjExX3NtcHNfbW9kZSB7CisJSUVFRTgwMjExX1NNUFNfQVVUT01BVElDLAorCUlFRUU4MDIxMV9TTVBTX09GRiwKKwlJRUVFODAyMTFfU01QU19TVEFUSUMsCisJSUVFRTgwMjExX1NNUFNfRFlOQU1JQywKKworCS8qIGtlZXAgbGFzdCAqLworCUlFRUU4MDIxMV9TTVBTX05VTV9NT0RFUywKK307CisKKy8qKgogICogc3RydWN0IGllZWU4MDIxMV9jb25mIC0gY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlCiAgKgogICogVGhpcyBzdHJ1Y3QgaW5kaWNhdGVzIGhvdyB0aGUgZHJpdmVyIHNoYWxsIGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUuCkBAIC02MzQsNiArNjUxLDEwIEBACiAgKiBAc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OiBNYXhpbXVtIG51bWJlciBvZiB0cmFuc21pc3Npb25zIGZvciBhICJzaG9ydCIKICAqICAgIGZyYW1lLCBjYWxsZWQgImRvdDExU2hvcnRSZXRyeUxpbWl0IiBpbiA4MDIuMTEsIGJ1dCBhY3R1YWxseSBtZWFucyB0aGUKICAqICAgIG51bWJlciBvZiB0cmFuc21pc3Npb25zIG5vdCB0aGUgbnVtYmVyIG9mIHJldHJpZXMKKyAqCisgKiBAc21wc19tb2RlOiBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlcnNhdmUgbW9kZTsgbm90ZSB0aGF0CisgKgklSUVFRTgwMjExX1NNUFNfU1RBVElDIGlzIHVzZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdAorICoJY29uZmlndXJlZCBmb3IgYW4gSFQgY2hhbm5lbAogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgewogCXUzMiBmbGFnczsKQEAgLTY0Niw2ICs2NjcsNyBAQAogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlOworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGU7CiB9OwogCiAvKioKQEAgLTY1NywxMiArNjc5LDE0IEBACiAgKiBAdHlwZTogdHlwZSBvZiB0aGlzIHZpcnR1YWwgaW50ZXJmYWNlCiAgKiBAYnNzX2NvbmY6IEJTUyBjb25maWd1cmF0aW9uIGZvciB0aGlzIGludGVyZmFjZSwgZWl0aGVyIG91ciBvd24KICAqCW9yIHRoZSBCU1Mgd2UncmUgYXNzb2NpYXRlZCB0bworICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhpcyBpbnRlcmZhY2UKICAqIEBkcnZfcHJpdjogZGF0YSBhcmVhIGZvciBkcml2ZXIgdXNlLCB3aWxsIGFsd2F5cyBiZSBhbGlnbmVkIHRvCiAgKglzaXplb2Yodm9pZCAqKS4KICAqLwogc3RydWN0IGllZWU4MDIxMV92aWYgewogCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGJzc19jb25mOworCXU4IGFkZHJbRVRIX0FMRU5dOwogCS8qIG11c3QgYmUgbGFzdCAqLwogCXU4IGRydl9wcml2WzBdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOwogfTsKQEAgLTY3NiwzMyArNzAwLDYgQEAKIH0KIAogLyoqCi0gKiBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAtIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBhbiBpbnRlcmZhY2UKLSAqCi0gKiBAdmlmOiBwb2ludGVyIHRvIGEgZHJpdmVyLXVzZSBwZXItaW50ZXJmYWNlIHN0cnVjdHVyZS4gVGhlIHBvaW50ZXIKLSAqCWl0c2VsZiBpcyBhbHNvIHVzZWQgZm9yIHZhcmlvdXMgZnVuY3Rpb25zIGluY2x1ZGluZwotICoJaWVlZTgwMjExX2JlYWNvbl9nZXQoKSBhbmQgaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYygpLgotICogQHR5cGU6IG9uZSBvZiAmZW51bSBubDgwMjExX2lmdHlwZSBjb25zdGFudHMuIERldGVybWluZXMgdGhlIHR5cGUgb2YKLSAqCWFkZGVkL3JlbW92ZWQgaW50ZXJmYWNlLgotICogQG1hY19hZGRyOiBwb2ludGVyIHRvIE1BQyBhZGRyZXNzIG9mIHRoZSBpbnRlcmZhY2UuIFRoaXMgcG9pbnRlciBpcyB2YWxpZAotICoJdW50aWwgdGhlIGludGVyZmFjZSBpcyByZW1vdmVkIChpLmUuIGl0IGNhbm5vdCBiZSB1c2VkIGFmdGVyCi0gKglyZW1vdmVfaW50ZXJmYWNlKCkgY2FsbGJhY2sgd2FzIGNhbGxlZCBmb3IgdGhpcyBpbnRlcmZhY2UpLgotICoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gYWRkX2ludGVyZmFjZSgpIGFuZCByZW1vdmVfaW50ZXJmYWNlKCkKLSAqIGNhbGxiYWNrcyBvZiAmc3RydWN0IGllZWU4MDIxMV9ody4KLSAqCi0gKiBXaGVuIHlvdSBhbGxvdyBtdWx0aXBsZSBpbnRlcmZhY2VzIHRvIGJlIGFkZGVkIHRvIHlvdXIgUEhZLCB0YWtlIGNhcmUKLSAqIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBhY3R1YWxseSBoYW5kbGUgbXVsdGlwbGUgTUFDIGFkZHJlc3Nlcy4gSG93ZXZlciwKLSAqIGFsc28gdGFrZSBjYXJlIHRoYXQgd2hlbiB0aGVyZSdzIG5vIGludGVyZmFjZSBsZWZ0IHdpdGggbWFjX2FkZHIgIT0gJU5VTEwKLSAqIHlvdSByZW1vdmUgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIGRldmljZSB0byBhdm9pZCBhY2tub3dsZWRnaW5nIHBhY2tldHMKLSAqIGluIHB1cmUgbW9uaXRvciBtb2RlLgotICovCi1zdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiB7Ci0JZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jdm9pZCAqbWFjX2FkZHI7Ci19OwotCi0vKioKICAqIGVudW0gaWVlZTgwMjExX2tleV9hbGcgLSBrZXkgYWxnb3JpdGhtCiAgKiBAQUxHX1dFUDogV0VQNDAgb3IgV0VQMTA0CiAgKiBAQUxHX1RLSVA6IFRLSVAKQEAgLTkyNiw2ICs5MjMsMTYgQEAKICAqIEBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUjoKICAqCUhhcmR3YXJlIHN1cHBvcnRzIGRyb3BwaW5nIG9mIGlycmVsZXZhbnQgYmVhY29uIGZyYW1lcyB0bwogICoJYXZvaWQgd2FraW5nIHVwIGNwdS4KKyAqCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX1NUQVRJQ19TTVBTOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgc3RhdGljIHNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2Vyc2F2ZSwKKyAqCWllLiBjYW4gdHVybiBvZmYgYWxsIGJ1dCBvbmUgY2hhaW4gZXZlbiBvbiBIVCBjb25uZWN0aW9ucworICoJdGhhdCBzaG91bGQgYmUgdXNpbmcgbW9yZSBjaGFpbnMuCisgKgorICogQElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFM6CisgKglIYXJkd2FyZSBzdXBwb3J0cyBkeW5hbWljIHNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2Vyc2F2ZSwKKyAqCWllLiBjYW4gdHVybiBvZmYgYWxsIGJ1dCBvbmUgY2hhaW4gYW5kIHRoZW4gd2FrZSB0aGUgcmVzdAorICoJdXAgYXMgcmVxdWlyZWQgYWZ0ZXIsIGZvciBleGFtcGxlLCBydHMvY3RzIGhhbmRzaGFrZS4KICAqLwogZW51bSBpZWVlODAyMTFfaHdfZmxhZ3MgewogCUlFRUU4MDIxMV9IV19IQVNfUkFURV9DT05UUk9MCQkJPSAxPDwwLApAQCAtOTQzLDYgKzk1MCw4IEBACiAJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMJCT0gMTw8MTIsCiAJSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFCQkJPSAxPDwxMywKIAlJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUgkJCT0gMTw8MTQsCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1NUQVRJQ19TTVBTCQk9IDE8PDE1LAorCUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMJCT0gMTw8MTYsCiB9OwogCiAvKioKQEAgLTEyMTEsNiArMTIyMCwzMSBAQAogICovCiAKIC8qKgorICogRE9DOiBTcGF0aWFsIG11bHRpcGxleGluZyBwb3dlciBzYXZlCisgKgorICogU01QUyAoU3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXIgc2F2ZSkgaXMgYSBtZWNoYW5pc20gdG8gY29uc2VydmUKKyAqIHBvd2VyIGluIGFuIDgwMi4xMW4gaW1wbGVtZW50YXRpb24uIEZvciBkZXRhaWxzIG9uIHRoZSBtZWNoYW5pc20KKyAqIGFuZCByYXRpb25hbGUsIHBsZWFzZSByZWZlciB0byA4MDIuMTEgKGFzIGFtZW5kZWQgYnkgODAyLjExbi0yMDA5KQorICogIjExLjIuMyBTTSBwb3dlciBzYXZlIi4KKyAqCisgKiBUaGUgbWFjODAyMTEgaW1wbGVtZW50YXRpb24gaXMgY2FwYWJsZSBvZiBzZW5kaW5nIGFjdGlvbiBmcmFtZXMKKyAqIHRvIHVwZGF0ZSB0aGUgQVAgYWJvdXQgdGhlIHN0YXRpb24ncyBTTVBTIG1vZGUsIGFuZCB3aWxsIGluc3RydWN0CisgKiB0aGUgZHJpdmVyIHRvIGVudGVyIHRoZSBzcGVjaWZpYyBtb2RlLiBJdCB3aWxsIGFsc28gYW5ub3VuY2UgdGhlCisgKiByZXF1ZXN0ZWQgU01QUyBtb2RlIGR1cmluZyB0aGUgYXNzb2NpYXRpb24gaGFuZHNoYWtlLiBIYXJkd2FyZQorICogc3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGlzIHJlcXVpcmVkLCBhbmQgY2FuIGJlIGluZGljYXRlZCBieQorICogaGFyZHdhcmUgZmxhZ3MuCisgKgorICogVGhlIGRlZmF1bHQgbW9kZSB3aWxsIGJlICJhdXRvbWF0aWMiLCB3aGljaCBubDgwMjExL2NmZzgwMjExCisgKiBkZWZpbmVzIHRvIGJlIGR5bmFtaWMgU01QUyBpbiAocmVndWxhcikgcG93ZXJzYXZlLCBhbmQgU01QUworICogdHVybmVkIG9mZiBvdGhlcndpc2UuCisgKgorICogVG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUsIHRoZSBkcml2ZXIgbXVzdCBzZXQgdGhlIGFwcHJvcHJpYXRlCisgKiBoYXJkd2FyZSBzdXBwb3J0IGZsYWdzLCBhbmQgaGFuZGxlIHRoZSBTTVBTIGZsYWcgdG8gdGhlIGNvbmZpZygpCisgKiBvcGVyYXRpb24uIEl0IHdpbGwgdGhlbiB3aXRoIHRoaXMgbWVjaGFuaXNtIGJlIGluc3RydWN0ZWQgdG8KKyAqIGVudGVyIHRoZSByZXF1ZXN0ZWQgU01QUyBtb2RlIHdoaWxlIGFzc29jaWF0ZWQgdG8gYW4gSFQgQVAuCisgKi8KKworLyoqCiAgKiBET0M6IEZyYW1lIGZpbHRlcmluZwogICoKICAqIG1hYzgwMjExIHJlcXVpcmVzIHRvIHNlZSBtYW55IG1hbmFnZW1lbnQgZnJhbWVzIGZvciBwcm9wZXIKQEAgLTEzNDcsNyArMTM4MSw3IEBACiAgKglXaGVuIHRoZSBkZXZpY2UgaXMgc3RhcnRlZCBpdCBzaG91bGQgbm90IGhhdmUgYSBNQUMgYWRkcmVzcwogICoJdG8gYXZvaWQgYWNrbm93bGVkZ2luZyBmcmFtZXMgYmVmb3JlIGEgbm9uLW1vbml0b3IgZGV2aWNlCiAgKglpcyBhZGRlZC4KLSAqCU11c3QgYmUgaW1wbGVtZW50ZWQuCisgKglNdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCiAgKgogICogQHN0b3A6IENhbGxlZCBhZnRlciBsYXN0IG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUKICAqCWlzIGRpc2FibGVkLiBUaGlzIHNob3VsZCB0dXJuIG9mZiB0aGUgaGFyZHdhcmUgKGF0IGxlYXN0CkBAIC0xMzU1LDcgKzEzODksNyBAQAogICoJTWF5IGJlIGNhbGxlZCByaWdodCBhZnRlciBhZGRfaW50ZXJmYWNlIGlmIHRoYXQgcmVqZWN0cwogICoJYW4gaW50ZXJmYWNlLiBJZiB5b3UgYWRkZWQgYW55IHdvcmsgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCiAgKgl5b3Ugc2hvdWxkIGVuc3VyZSB0byBjYW5jZWwgaXQgb24gdGhpcyBjYWxsYmFjay4KLSAqCU11c3QgYmUgaW1wbGVtZW50ZWQuCisgKglNdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCiAgKgogICogQGFkZF9pbnRlcmZhY2U6IENhbGxlZCB3aGVuIGEgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZSBpcwogICoJZW5hYmxlZC4gQmVjYXVzZSBpdCBpcyBub3QgY2FsbGVkIGZvciBtb25pdG9yIG1vZGUgZGV2aWNlcywgQHN0YXJ0CkBAIC0xMzY1LDcgKzEzOTksNyBAQAogICoJaW50ZXJmYWNlIGlzIGdpdmVuIGluIHRoZSBjb25mIHBhcmFtZXRlci4KICAqCVRoZSBjYWxsYmFjayBtYXkgcmVmdXNlIHRvIGFkZCBhbiBpbnRlcmZhY2UgYnkgcmV0dXJuaW5nIGEKICAqCW5lZ2F0aXZlIGVycm9yIGNvZGUgKHdoaWNoIHdpbGwgYmUgc2VlbiBpbiB1c2Vyc3BhY2UuKQotICoJTXVzdCBiZSBpbXBsZW1lbnRlZC4KKyAqCU11c3QgYmUgaW1wbGVtZW50ZWQgYW5kIGNhbiBzbGVlcC4KICAqCiAgKiBAcmVtb3ZlX2ludGVyZmFjZTogTm90aWZpZXMgYSBkcml2ZXIgdGhhdCBhbiBpbnRlcmZhY2UgaXMgZ29pbmcgZG93bi4KICAqCVRoZSBAc3RvcCBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgdGhpcyBpZiBpdCBpcyB0aGUgbGFzdCBpbnRlcmZhY2UKQEAgLTEzNzQsMTkgKzE0MDgsMjAgQEAKICAqCW11c3QgYmUgY2xlYXJlZCBzbyB0aGUgZGV2aWNlIG5vIGxvbmdlciBhY2tub3dsZWRnZXMgcGFja2V0cywKICAqCXRoZSBtYWNfYWRkciBtZW1iZXIgb2YgdGhlIGNvbmYgc3RydWN0dXJlIGlzLCBob3dldmVyLCBzZXQgdG8gdGhlCiAgKglNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIGdvaW5nIGF3YXkuCi0gKglIZW5jZSwgdGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkLgorICoJSGVuY2UsIHRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZC4gSXQgY2FuIHNsZWVwLgogICoKICAqIEBjb25maWc6IEhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuIElFRUUgODAyLjExIGNvZGUgY2FsbHMgdGhpcwogICoJZnVuY3Rpb24gdG8gY2hhbmdlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGUuZy4sIGNoYW5uZWwuCiAgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBmYWlsIGJ1dCByZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQotICoJaWYgaXQgZG9lcy4KKyAqCWlmIGl0IGRvZXMuIFRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQGJzc19pbmZvX2NoYW5nZWQ6IEhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgcmVsYXRlZCB0byBCU1MKICAqCXBhcmFtZXRlcnMgdGhhdCBtYXkgdmFyeSBkdXJpbmcgQlNTJ3MgbGlmZXNwYW4sIGFuZCBtYXkgYWZmZWN0IGxvdwogICoJbGV2ZWwgZHJpdmVyIChlLmcuIGFzc29jL2Rpc2Fzc29jIHN0YXR1cywgZXJwIHBhcmFtZXRlcnMpLgogICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgaWYgbm8gQlNTIGhhcyBiZWVuIHNldCwgdW5sZXNzCiAgKglmb3IgYXNzb2NpYXRpb24gaW5kaWNhdGlvbi4gVGhlIEBjaGFuZ2VkIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2gKLSAqCW9mIHRoZSBic3MgcGFyYW1ldGVycyBoYXMgY2hhbmdlZCB3aGVuIGEgY2FsbCBpcyBtYWRlLgorICoJb2YgdGhlIGJzcyBwYXJhbWV0ZXJzIGhhcyBjaGFuZ2VkIHdoZW4gYSBjYWxsIGlzIG1hZGUuIFRoZSBjYWxsYmFjaworICoJY2FuIHNsZWVwLgogICoKICAqIEBwcmVwYXJlX211bHRpY2FzdDogUHJlcGFyZSBmb3IgbXVsdGljYXN0IGZpbHRlciBjb25maWd1cmF0aW9uLgogICoJVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgcGFzc2VkCkBAIC0xMzk0LDIwICsxNDI5LDIyIEBACiAgKgogICogQGNvbmZpZ3VyZV9maWx0ZXI6IENvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgUlggZmlsdGVyLgogICoJU2VlIHRoZSBzZWN0aW9uICJGcmFtZSBmaWx0ZXJpbmciIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoJVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkLgorICoJVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCiAgKgogICogQHNldF90aW06IFNldCBUSU0gYml0LiBtYWM4MDIxMSBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBUSU0gYml0CiAgKiAJbXVzdCBiZSBzZXQgb3IgY2xlYXJlZCBmb3IgYSBnaXZlbiBTVEEuIE11c3QgYmUgYXRvbWljLgogICoKICAqIEBzZXRfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCi0gKglUaGlzIGNhbGxiYWNrIGNhbiBzbGVlcCwgYW5kIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gYWRkX2ludGVyZmFjZQotICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGdpdmVuIHZpcnR1YWwgaW50ZXJmYWNlCisgKglUaGlzIGNhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gYWRkX2ludGVyZmFjZSBhbmQKKyAqCXJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGdpdmVuIHZpcnR1YWwgaW50ZXJmYWNlCiAgKglpcyBlbmFibGVkLgogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIGtleSBjYW4ndCBiZSBhZGRlZC4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQHVwZGF0ZV90a2lwX2tleTogU2VlIHRoZSBzZWN0aW9uICJIYXJkd2FyZSBjcnlwdG8gYWNjZWxlcmF0aW9uIgogICogCVRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgUnguIENhbGxlZCBmb3IgZHJpdmVycwogICogCXdoaWNoIHNldCBJRUVFODAyMTFfS0VZX0ZMQUdfVEtJUF9SRVFfUlhfUDFfS0VZLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAaHdfc2NhbjogQXNrIHRoZSBoYXJkd2FyZSB0byBzZXJ2aWNlIHRoZSBzY2FuIHJlcXVlc3QsIG5vIG5lZWQgdG8gc3RhcnQKICAqCXRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgaW4gc3RhY2suIFRoZSBzY2FuIG11c3QgaG9ub3VyIHRoZSBjaGFubmVsCkBAIC0xNDIxLDIxICsxNDU4LDI4IEBACiAgKglXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlIGNhbGxlZDsKICAqCW5vdGUgdGhhdCBpdCBhbHNvIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHNjYW4gY2Fubm90IGZpbmlzaCBkdWUgdG8KICAqCWFueSBlcnJvciB1bmxlc3MgdGhpcyBjYWxsYmFjayByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBzd19zY2FuX3N0YXJ0OiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhIHNvZnR3YXJlIHNjYW4KICAqCWlzIHN0YXJ0ZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgotICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYSBzb2Z0d2FyZSBzY2FuCi0gKglmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgorICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYQorICoJc29mdHdhcmUgc2NhbiBmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkCisgKgl0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQGdldF9zdGF0czogUmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzLgogICogCVJldHVybnMgemVybyBpZiBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBnZXRfdGtpcF9zZXE6IElmIHlvdXIgZGV2aWNlIGltcGxlbWVudHMgVEtJUCBlbmNyeXB0aW9uIGluIGhhcmR3YXJlIHRoaXMKICAqCWNhbGxiYWNrIHNob3VsZCBiZSBwcm92aWRlZCB0byByZWFkIHRoZSBUS0lQIHRyYW5zbWl0IElWcyAoYm90aCBJVjMyCiAgKglhbmQgSVYxNikgZm9yIHRoZSBnaXZlbiBrZXkgZnJvbSBoYXJkd2FyZS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAc2V0X3J0c190aHJlc2hvbGQ6IENvbmZpZ3VyYXRpb24gb2YgUlRTIHRocmVzaG9sZCAoaWYgZGV2aWNlIG5lZWRzIGl0KQorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAc3RhX25vdGlmeTogTm90aWZpZXMgbG93IGxldmVsIGRyaXZlciBhYm91dCBhZGRpdGlvbiwgcmVtb3ZhbCBvciBwb3dlcgogICoJc3RhdGUgdHJhbnNpdGlvbiBvZiBhbiBhc3NvY2lhdGVkIHN0YXRpb24sIEFQLCAgSUJTUy9XRFMvbWVzaCBwZWVyIGV0Yy4KQEAgLTE0NDQsMzAgKzE0ODgsMzYgQEAKICAqIEBjb25mX3R4OiBDb25maWd1cmUgVFggcXVldWUgcGFyYW1ldGVycyAoRURDRiAoYWlmcywgY3dfbWluLCBjd19tYXgpLAogICoJYnVyc3RpbmcpIGZvciBhIGhhcmR3YXJlIFRYIHF1ZXVlLgogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQGdldF90eF9zdGF0czogR2V0IHN0YXRpc3RpY3Mgb2YgdGhlIGN1cnJlbnQgVFggcXVldWUgc3RhdHVzLiBUaGlzIGlzIHVzZWQKICAqCXRvIGdldCBudW1iZXIgb2YgY3VycmVudGx5IHF1ZXVlZCBwYWNrZXRzIChxdWV1ZSBsZW5ndGgpLCBtYXhpbXVtIHF1ZXVlCiAgKglzaXplIChsaW1pdCksIGFuZCB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IHVzaW5nIGVhY2ggVFggcXVldWUKICAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMKICAqCWl0ZW1zLgorICoJVGhlIGNhbGxiYWNrIG11c3QgYmUgYXRvbWljLgogICoKICAqIEBnZXRfdHNmOiBHZXQgdGhlIGN1cnJlbnQgVFNGIHRpbWVyIHZhbHVlIGZyb20gZmlybXdhcmUvaGFyZHdhcmUuIEN1cnJlbnRseSwKICAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgQlNTSUQgbWVyZ2luZyBhbmQgZGVidWdnaW5nLiBJcyBub3QgYQogICoJcmVxdWlyZWQgZnVuY3Rpb24uCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBzZXRfdHNmOiBTZXQgdGhlIFRTRiB0aW1lciB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBmaXJtd2FyZS9oYXJkd2FyZS4KICAqICAgICAgQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgSUJTUyBtb2RlIGRlYnVnZ2luZy4gSXMgbm90IGEKICAqCXJlcXVpcmVkIGZ1bmN0aW9uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAcmVzZXRfdHNmOiBSZXNldCB0aGUgVFNGIHRpbWVyIGFuZCBhbGxvdyBmaXJtd2FyZS9oYXJkd2FyZSB0byBzeW5jaHJvbml6ZQogICoJd2l0aCBvdGhlciBTVEFzIGluIHRoZSBJQlNTLiBUaGlzIGlzIG9ubHkgdXNlZCBpbiBJQlNTIG1vZGUuIFRoaXMKICAqCWZ1bmN0aW9uIGlzIG9wdGlvbmFsIGlmIHRoZSBmaXJtd2FyZS9oYXJkd2FyZSB0YWtlcyBmdWxsIGNhcmUgb2YKICAqCVRTRiBzeW5jaHJvbml6YXRpb24uCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEB0eF9sYXN0X2JlYWNvbjogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxhc3QgSUJTUyBiZWFjb24gd2FzIHNlbnQgYnkgdXMuCiAgKglUaGlzIGlzIG5lZWRlZCBvbmx5IGZvciBJQlNTIG1vZGUgYW5kIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcwogICoJdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byByZXBseSB0byBQcm9iZSBSZXF1ZXN0cy4KICAqCVJldHVybnMgbm9uLXplcm8gaWYgdGhpcyBkZXZpY2Ugc2VudCB0aGUgbGFzdCBiZWFjb24uCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBhbXBkdV9hY3Rpb246IFBlcmZvcm0gYSBjZXJ0YWluIEEtTVBEVSBhY3Rpb24KICAqIAlUaGUgUkEvVElEIGNvbWJpbmF0aW9uIGRldGVybWluZXMgdGhlIGRlc3RpbmF0aW9uIGFuZCBUSUQgd2Ugd2FudApAQCAtMTQ3NiwyMSArMTUyNiwyOCBAQAogICogCWlzIHRoZSBmaXJzdCBmcmFtZSB3ZSBleHBlY3QgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLiBOb3RpY2UKICAqIAl0aGF0IFRYL1JYX1NUT1AgY2FuIHBhc3MgTlVMTCBmb3IgdGhpcyBwYXJhbWV0ZXIuCiAgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICoJVGhlIGNhbGxiYWNrIG11c3QgYmUgYXRvbWljLgogICoKICAqIEByZmtpbGxfcG9sbDogUG9sbCByZmtpbGwgaGFyZHdhcmUgc3RhdGUuIElmIHlvdSBuZWVkIHRoaXMsIHlvdSBhbHNvCiAgKgluZWVkIHRvIHNldCB3aXBoeS0+cmZraWxsX3BvbGwgdG8gJXRydWUgYmVmb3JlIHJlZ2lzdHJhdGlvbiwKICAqCWFuZCBuZWVkIHRvIGNhbGwgd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZSgpIGluIHRoZSBjYWxsYmFjay4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQHRlc3Rtb2RlX2NtZDogSW1wbGVtZW50IGEgY2ZnODAyMTEgdGVzdCBtb2RlIGNvbW1hbmQuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBmbHVzaDogRmx1c2ggYWxsIHBlbmRpbmcgZnJhbWVzIGZyb20gdGhlIGhhcmR3YXJlIHF1ZXVlLCBtYWtpbmcgc3VyZQorICoJdGhhdCB0aGUgaGFyZHdhcmUgcXVldWVzIGFyZSBlbXB0eS4gSWYgdGhlIHBhcmFtZXRlciBAZHJvcCBpcyBzZXQKKyAqCXRvICV0cnVlLCBwZW5kaW5nIGZyYW1lcyBtYXkgYmUgZHJvcHBlZC4gVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewogCWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmFkZF9pbnRlcmZhY2UpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogCXZvaWQgKCpyZW1vdmVfaW50ZXJmYWNlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAlpbnQgKCpjb25maWcpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CiAJdm9pZCAoKmJzc19pbmZvX2NoYW5nZWQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLApAQCAtMTUzOCw2ICsxNTk1LDcgQEAKICNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQogCWludCAoKnRlc3Rtb2RlX2NtZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsIGludCBsZW4pOwogI2VuZGlmCisJdm9pZCAoKmZsdXNoKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKTsKIH07CiAKIC8qKgpAQCAtMTc3Nyw3ICsxODM1LDcgQEAKIC8qKgogICogaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIC0gYmVhY29uIGdlbmVyYXRpb24gZnVuY3Rpb24KICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQHRpbV9vZmZzZXQ6IHBvaW50ZXIgdG8gdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFRJTSBJRSBvZmZzZXQuCiAgKglTZXQgdG8gMCBpZiBpbnZhbGlkIChpbiBub24tQVAgbW9kZXMpLgogICogQHRpbV9sZW5ndGg6IHBvaW50ZXIgdG8gdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFRJTSBJRSBsZW5ndGgsCkBAIC0xODA1LDcgKzE4NjMsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2dldCAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqCiAgKiBTZWUgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKCkuCiAgKi8KQEAgLTE4MTgsNyArMTg3Niw3IEBACiAvKioKICAqIGllZWU4MDIxMV9ydHNfZ2V0IC0gUlRTIGZyYW1lIGdlbmVyYXRpb24gZnVuY3Rpb24KICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQGZyYW1lOiBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IGlzIGdvaW5nIHRvIGJlIHByb3RlY3RlZCBieSB0aGUgUlRTLgogICogQGZyYW1lX2xlbjogdGhlIGZyYW1lIGxlbmd0aCAoaW4gb2N0ZXRzKS4KICAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBvZiB0aGUgZnJhbWUuCkBAIC0xODM3LDcgKzE4OTUsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfcnRzX2R1cmF0aW9uIC0gR2V0IHRoZSBkdXJhdGlvbiBmaWVsZCBmb3IgYW4gUlRTIGZyYW1lCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqIEBmcmFtZV9sZW46IHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBSVFMuCiAgKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gb2YgdGhlIGZyYW1lLgogICoKQEAgLTE4NTIsNyArMTkxMCw3IEBACiAvKioKICAqIGllZWU4MDIxMV9jdHN0b3NlbGZfZ2V0IC0gQ1RTLXRvLXNlbGYgZnJhbWUgZ2VuZXJhdGlvbiBmdW5jdGlvbgogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWU6IHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBDVFMtdG8tc2VsZi4KICAqIEBmcmFtZV9sZW46IHRoZSBmcmFtZSBsZW5ndGggKGluIG9jdGV0cykuCiAgKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gb2YgdGhlIGZyYW1lLgpAQCAtMTg3Miw3ICsxOTMwLDcgQEAKIC8qKgogICogaWVlZTgwMjExX2N0c3Rvc2VsZl9kdXJhdGlvbiAtIEdldCB0aGUgZHVyYXRpb24gZmllbGQgZm9yIGEgQ1RTLXRvLXNlbGYgZnJhbWUKICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQGZyYW1lX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgdGhhdCBpcyBnb2luZyB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIENUUy10by1zZWxmLgogICogQGZyYW1lX3R4Y3RsOiAmc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIG9mIHRoZSBmcmFtZS4KICAqCkBAIC0xODg4LDcgKzE5NDYsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbiAtIENhbGN1bGF0ZSB0aGUgZHVyYXRpb24gZmllbGQgZm9yIGEgZnJhbWUKICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQGZyYW1lX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUuCiAgKiBAcmF0ZTogdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZyYW1lIGlzIGdvaW5nIHRvIGJlIHRyYW5zbWl0dGVkLgogICoKQEAgLTE5MDMsNyArMTk2MSw3IEBACiAvKioKICAqIGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMgLSBhY2Nlc3NpbmcgYnVmZmVyZWQgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgZnJhbWVzCiAgKiBAaHc6IHBvaW50ZXIgYXMgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqCiAgKiBGdW5jdGlvbiBmb3IgYWNjZXNzaW5nIGJ1ZmZlcmVkIGJyb2FkY2FzdCBhbmQgbXVsdGljYXN0IGZyYW1lcy4gSWYKICAqIGhhcmR3YXJlL2Zpcm13YXJlIGRvZXMgbm90IGltcGxlbWVudCBidWZmZXJpbmcgb2YgYnJvYWRjYXN0L211bHRpY2FzdApAQCAtMjA3MSw3ICsyMTI5LDcgQEAKIAogLyoqCiAgKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIGFnZ3JlZ2F0ZS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgogICogQHRpZDogdGhlIFRJRCB0byBCQSBvbi4KICAqCkBAIC0yMDgyLDcgKzIxNDAsNyBAQAogCiAvKioKICAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlIC0gbG93IGxldmVsIGRyaXZlciByZWFkeSB0byBhZ2dyZWdhdGUuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjawogICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudC4KICAqIEB0aWQ6IHRoZSBUSUQgdG8gQkEgb24uCiAgKgpAQCAtMjExMCw3ICsyMTY4LDcgQEAKIAogLyoqCiAgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9jYiAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gc3RvcCBhZ2dyZWdhdGUuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjawogICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudC4KICAqIEB0aWQ6IHRoZSBkZXNpcmVkIFRJRCB0byBCQSBvbi4KICAqCkBAIC0yMTIxLDcgKzIxNzksNyBAQAogCiAvKioKICAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIHN0b3AgYWdncmVnYXRlLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYKKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2sKICAqIEByYTogcmVjZWl2ZXIgYWRkcmVzcyBvZiB0aGUgQkEgc2Vzc2lvbiByZWNpcGllbnQuCiAgKiBAdGlkOiB0aGUgZGVzaXJlZCBUSUQgdG8gQkEgb24uCiAgKgpAQCAtMjIwMCw3ICsyMjU4LDcgQEAKIC8qKgogICogaWVlZTgwMjExX2JlYWNvbl9sb3NzIC0gaW5mb3JtIGhhcmR3YXJlIGRvZXMgbm90IHJlY2VpdmUgYmVhY29ucwogICoKLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqCiAgKiBXaGVuIGJlYWNvbiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCB3aXRoIElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSSU5HIGFuZAogICogSUVFRTgwMjExX0NPTkZfUFMgaXMgc2V0LCB0aGUgZHJpdmVyIG5lZWRzIHRvIGluZm9ybSB3aGVuZXZlciB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggMDMwMmYzMS4uYjAxNzMyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTg4LDEyICs4OCw3IEBACiAJdW5zaWduZWQgbG9uZyB1bnJlc19kaXNjYXJkczsJLyogbnVtYmVyIG9mIHVucmVzb2x2ZWQgZHJvcHMgKi8KIH07CiAKLSNkZWZpbmUgTkVJR0hfQ0FDSEVfU1RBVF9JTkModGJsLCBmaWVsZCkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQlcCi0JCShwZXJfY3B1X3B0cigodGJsKS0+c3RhdHMsIHNtcF9wcm9jZXNzb3JfaWQoKSktPmZpZWxkKSsrOyBcCi0JCXByZWVtcHRfZW5hYmxlKCk7CQkJCQlcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgTkVJR0hfQ0FDSEVfU1RBVF9JTkModGJsLCBmaWVsZCkgdGhpc19jcHVfaW5jKCh0YmwpLT5zdGF0cy0+ZmllbGQpCiAKIHN0cnVjdCBuZWlnaGJvdXIgewogCXN0cnVjdCBuZWlnaGJvdXIJKm5leHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggNWNmNzI3MC4uYTA5MDRhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMjkzLDExICsyOTMsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX21heDsKIAogI2RlZmluZSBORl9DVF9TVEFUX0lOQyhuZXQsIGNvdW50KQlcCi0JKHBlcl9jcHVfcHRyKChuZXQpLT5jdC5zdGF0LCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+Y291bnQrKykKKwlfX3RoaXNfY3B1X2luYygobmV0KS0+Y3Quc3RhdC0+Y291bnQpCiAjZGVmaW5lIE5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGNvdW50KQkJXAogZG8gewkJCQkJCQlcCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwkJCQlcCi0JcGVyX2NwdV9wdHIoKG5ldCktPmN0LnN0YXQsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT5jb3VudCsrOwlcCisJX190aGlzX2NwdV9pbmMoKG5ldCktPmN0LnN0YXQtPmNvdW50KTsJCVwKIAlsb2NhbF9iaF9lbmFibGUoKTsJCQkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BlcC5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BlcC5oCmluZGV4IDRjNjFjZGMuLjM1NjcyYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9wZXAuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcGVwLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAl1OAkJCXJ4X2ZjOwkvKiBSWCBmbG93IGNvbnRyb2wgKi8KIAl1OAkJCXR4X2ZjOwkvKiBUWCBmbG93IGNvbnRyb2wgKi8KIAl1OAkJCWluaXRfZW5hYmxlOwkvKiBhdXRvLWVuYWJsZSBhdCBjcmVhdGlvbiAqLworCXU4CQkJYWxpZ25lZDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcF9zb2NrICpwZXBfc2soc3RydWN0IHNvY2sgKnNrKQpAQCAtNzcsNiArNzgsNyBAQAogCiBlbnVtIHsKIAlQTlNfUElQRV9EQVRBID0gMHgyMCwKKwlQTlNfUElQRV9BTElHTkVEX0RBVEEsCiAKIAlQTlNfUEVQX0NPTk5FQ1RfUkVRID0gMHg0MCwKIAlQTlNfUEVQX0NPTk5FQ1RfUkVTUCwKQEAgLTEzOCw2ICsxNDAsNyBAQAogCVBOX1BJUEVfU0JfTkVHT1RJQVRFRF9GQywKIAlQTl9QSVBFX1NCX1JFUVVJUkVEX0ZDX1RYLAogCVBOX1BJUEVfU0JfUFJFRkVSUkVEX0ZDX1JYLAorCVBOX1BJUEVfU0JfQUxJR05FRF9EQVRBLAogfTsKIAogLyogUGhvbmV0IHBpcGUgZmxvdyBjb250cm9sIG1vZGVscyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc25tcC5oIGIvaW5jbHVkZS9uZXQvc25tcC5oCmluZGV4IDhjODQyZTAuLmYwZDc1NmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC9zbm1wLmgKQEAgLTEzNiw0NSArMTM2LDMxIEBACiAjZGVmaW5lIFNOTVBfU1RBVF9CSFBUUihuYW1lKQkobmFtZVswXSkKICNkZWZpbmUgU05NUF9TVEFUX1VTUlBUUihuYW1lKQkobmFtZVsxXSkKIAotI2RlZmluZSBTTk1QX0lOQ19TVEFUU19CSChtaWIsIGZpZWxkKSAJXAotCShwZXJfY3B1X3B0cihtaWJbMF0sIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT5taWJzW2ZpZWxkXSsrKQotI2RlZmluZSBTTk1QX0lOQ19TVEFUU19VU0VSKG1pYiwgZmllbGQpIFwKLQlkbyB7IFwKLQkJcGVyX2NwdV9wdHIobWliWzFdLCBnZXRfY3B1KCkpLT5taWJzW2ZpZWxkXSsrOyBcCi0JCXB1dF9jcHUoKTsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIFNOTVBfSU5DX1NUQVRTKG1pYiwgZmllbGQpIAlcCi0JZG8geyBcCi0JCXBlcl9jcHVfcHRyKG1pYlshaW5fc29mdGlycSgpXSwgZ2V0X2NwdSgpKS0+bWlic1tmaWVsZF0rKzsgXAotCQlwdXRfY3B1KCk7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBTTk1QX0RFQ19TVEFUUyhtaWIsIGZpZWxkKSAJXAotCWRvIHsgXAotCQlwZXJfY3B1X3B0cihtaWJbIWluX3NvZnRpcnEoKV0sIGdldF9jcHUoKSktPm1pYnNbZmllbGRdLS07IFwKLQkJcHV0X2NwdSgpOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU05NUF9BRERfU1RBVFMobWliLCBmaWVsZCwgYWRkZW5kKSAJXAotCWRvIHsgXAotCQlwZXJfY3B1X3B0cihtaWJbIWluX3NvZnRpcnEoKV0sIGdldF9jcHUoKSktPm1pYnNbZmllbGRdICs9IGFkZGVuZDsgXAotCQlwdXRfY3B1KCk7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBTTk1QX0FERF9TVEFUU19CSChtaWIsIGZpZWxkLCBhZGRlbmQpIAlcCi0JKHBlcl9jcHVfcHRyKG1pYlswXSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSktPm1pYnNbZmllbGRdICs9IGFkZGVuZCkKLSNkZWZpbmUgU05NUF9BRERfU1RBVFNfVVNFUihtaWIsIGZpZWxkLCBhZGRlbmQpIAlcCi0JZG8geyBcCi0JCXBlcl9jcHVfcHRyKG1pYlsxXSwgZ2V0X2NwdSgpKS0+bWlic1tmaWVsZF0gKz0gYWRkZW5kOyBcCi0JCXB1dF9jcHUoKTsgXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIFNOTVBfSU5DX1NUQVRTX0JIKG1pYiwgZmllbGQpCVwKKwkJCV9fdGhpc19jcHVfaW5jKG1pYlswXS0+bWlic1tmaWVsZF0pCisjZGVmaW5lIFNOTVBfSU5DX1NUQVRTX1VTRVIobWliLCBmaWVsZCkJXAorCQkJdGhpc19jcHVfaW5jKG1pYlsxXS0+bWlic1tmaWVsZF0pCisjZGVmaW5lIFNOTVBfSU5DX1NUQVRTKG1pYiwgZmllbGQpCVwKKwkJCXRoaXNfY3B1X2luYyhtaWJbIWluX3NvZnRpcnEoKV0tPm1pYnNbZmllbGRdKQorI2RlZmluZSBTTk1QX0RFQ19TVEFUUyhtaWIsIGZpZWxkKQlcCisJCQl0aGlzX2NwdV9kZWMobWliWyFpbl9zb2Z0aXJxKCldLT5taWJzW2ZpZWxkXSkKKyNkZWZpbmUgU05NUF9BRERfU1RBVFNfQkgobWliLCBmaWVsZCwgYWRkZW5kKQlcCisJCQlfX3RoaXNfY3B1X2FkZChtaWJbMF0tPm1pYnNbZmllbGRdLCBhZGRlbmQpCisjZGVmaW5lIFNOTVBfQUREX1NUQVRTX1VTRVIobWliLCBmaWVsZCwgYWRkZW5kKQlcCisJCQl0aGlzX2NwdV9hZGQobWliWzFdLT5taWJzW2ZpZWxkXSwgYWRkZW5kKQogI2RlZmluZSBTTk1QX1VQRF9QT19TVEFUUyhtaWIsIGJhc2VmaWVsZCwgYWRkZW5kKQlcCiAJZG8geyBcCi0JCV9fdHlwZW9mX18obWliWzBdKSBwdHIgPSBwZXJfY3B1X3B0cihtaWJbIWluX3NvZnRpcnEoKV0sIGdldF9jcHUoKSk7XAorCQlfX3R5cGVvZl9fKG1pYlswXSkgcHRyOyBcCisJCXByZWVtcHRfZGlzYWJsZSgpOyBcCisJCXB0ciA9IHRoaXNfY3B1X3B0cigobWliKVshaW5fc29mdGlycSgpXSk7IFwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjUEtUU10rKzsgXAogCQlwdHItPm1pYnNbYmFzZWZpZWxkIyNPQ1RFVFNdICs9IGFkZGVuZDtcCi0JCXB1dF9jcHUoKTsgXAorCQlwcmVlbXB0X2VuYWJsZSgpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgU05NUF9VUERfUE9fU1RBVFNfQkgobWliLCBiYXNlZmllbGQsIGFkZGVuZCkJXAogCWRvIHsgXAotCQlfX3R5cGVvZl9fKG1pYlswXSkgcHRyID0gcGVyX2NwdV9wdHIobWliWyFpbl9zb2Z0aXJxKCldLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTtcCisJCV9fdHlwZW9mX18obWliWzBdKSBwdHIgPSBcCisJCQlfX3RoaXNfY3B1X3B0cigobWliKVshaW5fc29mdGlycSgpXSk7IFwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjUEtUU10rKzsgXAogCQlwdHItPm1pYnNbYmFzZWZpZWxkIyNPQ1RFVFNdICs9IGFkZGVuZDtcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggMzRmNWNjMi4uNzg4Yzk5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTg1NiwxMyArODU2LDYgQEAKIAkJCQkJICBpY3NrLT5pY3NrX3J0bywgVENQX1JUT19NQVgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQotewotCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCi0JX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSwgdHAtPm5vbmFnbGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSkKIHsKIAl0cC0+c25kX3dsMSA9IHNlcTsKQEAgLTk3Miw3ICs5NjUsOCBAQAogLyogRGV0ZXJtaW5lIGEgd2luZG93IHNjYWxpbmcgYW5kIGluaXRpYWwgd2luZG93IHRvIG9mZmVyLiAqLwogZXh0ZXJuIHZvaWQgdGNwX3NlbGVjdF9pbml0aWFsX3dpbmRvdyhpbnQgX19zcGFjZSwgX191MzIgbXNzLAogCQkJCSAgICAgIF9fdTMyICpyY3Zfd25kLCBfX3UzMiAqd2luZG93X2NsYW1wLAotCQkJCSAgICAgIGludCB3c2NhbGVfb2ssIF9fdTggKnJjdl93c2NhbGUpOworCQkJCSAgICAgIGludCB3c2NhbGVfb2ssIF9fdTggKnJjdl93c2NhbGUsCisJCQkJICAgICAgX191MzIgaW5pdF9yY3Zfd25kKTsKIAogc3RhdGljIGlubGluZSBpbnQgdGNwX3dpbl9mcm9tX3NwYWNlKGludCBzcGFjZSkKIHsKQEAgLTEzNDIsNiArMTMzNiwxNSBAQAogCXJldHVybiBza2JfcXVldWVfZW1wdHkoJnNrLT5za193cml0ZV9xdWV1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKHRjcF9zZW5kX2hlYWQoc2spKSB7CisJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCisJCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRjcF9jdXJyZW50X21zcyhzayksIHRwLT5ub25hZ2xlKTsKKwl9Cit9CisKIC8qIFN0YXJ0IHNlcXVlbmNlIG9mIHRoZSBoaWdoZXN0IHNrYiB3aXRoIFNBQ0tlZCBiaXQsIHZhbGlkIG9ubHkgaWYKICAqIHNhY2tlZCA+IDAgb3Igd2hlbiB0aGUgY2FsbGVyIGhhcyBlbnN1cmVkIHZhbGlkaXR5IGJ5IGl0c2VsZi4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3MuaCBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKaW5kZXggYWZjMmJmYi4uNzVmYTM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC0xMjYsOCArMTI2LDggQEAKICNkZWZpbmUgSVJRX1RZUEVfVElNRQkJCTB4MDEKICNkZWZpbmUgSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HCTB4MDIKICNkZWZpbmUgSVJRX0ZPUkNFRF9QVUxTRQkJMHgwNAotI2RlZmluZSBJUlFfRklSU1RfU0hBUkVECQkweDA4Ci0vLyNkZWZpbmUgSVJRX0hBTkRMRV9QUkVTRU5UCQkweDEwCisjZGVmaW5lIElSUV9GSVJTVF9TSEFSRUQJCTB4MDggLyogdW51c2VkICovCisjZGVmaW5lIElSUV9IQU5ETEVfUFJFU0VOVAkJMHgxMCAvKiB1bnVzZWQgKi8KICNkZWZpbmUgSVJRX1BVTFNFX0FMTE9DQVRFRAkJMHgxMDAKIAogLyogQml0cyBpbiBJUlFJbmZvMSBmaWVsZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZHMuaCBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKaW5kZXggZDQwM2MxMi4uZWUxNDg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvZHMuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kcy5oCkBAIC04Miw3ICs4Miw3IEBACiAJLyogdGhlIGhhcmR3YXJlICJmdW5jdGlvbiIgZGV2aWNlOyBjZXJ0YWluIHN1YmRldmljZXMgY2FuCiAJICogc2hhcmUgb25lIGhhcmR3YXJlICJmdW5jdGlvbiIgZGV2aWNlLiAqLwogCXU4CQkJZnVuYzsKLQlzdHJ1Y3QgY29uZmlnX3QqCWZ1bmN0aW9uX2NvbmZpZzsKKwlzdHJ1Y3QgY29uZmlnX3QJCSpmdW5jdGlvbl9jb25maWc7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNvY2tldF9kZXZpY2VfbGlzdDsKIApAQCAtMTIxLDE0ICsxMjEsMTQgQEAKIAl1MTYJCQltYW5mX2lkOwogCXUxNgkJCWNhcmRfaWQ7CiAKLQljaGFyICoJCQlwcm9kX2lkWzRdOworCWNoYXIJCQkqcHJvZF9pZFs0XTsKIAogCXU2NAkJCWRtYV9tYXNrOwogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAkvKiBkZXZpY2UgZHJpdmVyIHdhbnRlZCBieSBjYXJkbWdyICovCi0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKgljYXJkbWdyOworCXN0cnVjdCBwY21jaWFfZHJpdmVyCSpjYXJkbWdyOwogI2VuZGlmCiAKIAkvKiBkYXRhIHByaXZhdGUgdG8gZHJpdmVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvbWVtX29wLmggYi9pbmNsdWRlL3BjbWNpYS9tZW1fb3AuaAppbmRleCA4ZDE5Yjk0Li4wZmEwNmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9tZW1fb3AuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9tZW1fb3AuaApAQCAtMTUsOCArMTUsOCBAQAogI2lmbmRlZiBfTElOVVhfTUVNX09QX0gKICNkZWZpbmUgX0xJTlVYX01FTV9PUF9ICiAKKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qCiAgICBJZiBVTlNBRkVfTUVNQ1BZIGlzIGRlZmluZWQsIHdlIHVzZSB0aGUgKG9wdGltaXplZCkgc3lzdGVtIHJvdXRpbmVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCA3YzIzYmU3Li5jYmZiYTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCXNvY2tldF9saXN0OwogCXN0cnVjdCBjb21wbGV0aW9uCQlzb2NrZXRfcmVsZWFzZWQ7CiAKLSAJLyogZGVwcmVjYXRlZCAqLworCS8qIGRlcHJlY2F0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJCQlzb2NrOwkJLyogc29ja2V0IG51bWJlciAqLwogCiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXVfaW50CQkJCW1hcF9zaXplOwogCXVfaW50CQkJCWlvX29mZnNldDsKIAl1X2ludAkJCQlwY2lfaXJxOwotCXN0cnVjdCBwY2lfZGV2ICoJCWNiX2RldjsKKwlzdHJ1Y3QgcGNpX2RldgkJCSpjYl9kZXY7CiAKIAogCS8qIHNvY2tldCBzZXR1cCBpcyBkb25lIHNvIHJlc291cmNlcyBzaG91bGQgYmUgYWJsZSB0byBiZSBhbGxvY2F0ZWQuCkBAIC0xNzksOSArMTc5LDkgQEAKIAl1OAkJCQlyZXNlcnZlZDo1OwogCiAJLyogc29ja2V0IG9wZXJhdGlvbnMgKi8KLQlzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgKglvcHM7Ci0Jc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgKglyZXNvdXJjZV9vcHM7Ci0Jdm9pZCAqCQkJCXJlc291cmNlX2RhdGE7CisJc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zCSpvcHM7CisJc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMJKnJlc291cmNlX29wczsKKwl2b2lkCQkJCSpyZXNvdXJjZV9kYXRhOwogCiAJLyogWm9vbSB2aWRlbyBiZWhhdmlvdXIgaXMgc28gY2hpcCBzcGVjaWZpYyBpdHMgbm90IHdvcnRoIGFkZGluZwogCSAgIHRoaXMgdG8gX29wcyAqLwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIAkvKiBjYXJkYnVzICgzMi1iaXQpICovCiAjaWZkZWYgQ09ORklHX0NBUkRCVVMKLQlzdHJ1Y3QgcmVzb3VyY2UgKgkJY2JfY2lzX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqY2JfY2lzX3JlczsKIAl2b2lkIF9faW9tZW0JCQkqY2JfY2lzX3ZpcnQ7CiAjZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2FkZHIuaCBiL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgKaW5kZXggNDgzMDU3Yi4uZmEwZDUyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX2FkZHIuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KQEAgLTYwLDggKzYxLDggQEAKIAl1bnNpZ25lZCBjaGFyIHNyY19kZXZfYWRkcltNQVhfQUREUl9MRU5dOwogCXVuc2lnbmVkIGNoYXIgZHN0X2Rldl9hZGRyW01BWF9BRERSX0xFTl07CiAJdW5zaWduZWQgY2hhciBicm9hZGNhc3RbTUFYX0FERFJfTEVOXTsKLQllbnVtIHJkbWFfbm9kZV90eXBlIGRldl90eXBlOwotCXN0cnVjdCBuZXRfZGV2aWNlICpzcmNfZGV2OworCXVuc2lnbmVkIHNob3J0IGRldl90eXBlOworCWludCBib3VuZF9kZXZfaWY7CiB9OwogCiAvKioKQEAgLTEyMSw0MCArMTIyLDI5IEBACiAJbWVtY3B5KGdpZCwgZGV2X2FkZHItPmJyb2FkY2FzdCArIDQsIHNpemVvZiAqZ2lkKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfZ2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAotCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3N0YXRpYyBpbmxpbmUgaW50IHJkbWFfYWRkcl9naWRfb2Zmc2V0KHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcikKIHsKLQltZW1jcHkoZ2lkLCBkZXZfYWRkci0+c3JjX2Rldl9hZGRyICsgNCwgc2l6ZW9mICpnaWQpOworCXJldHVybiBkZXZfYWRkci0+ZGV2X3R5cGUgPT0gQVJQSFJEX0lORklOSUJBTkQgPyA0IDogMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfc2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAotCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZG1hX2FkZHJfZ2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB1bmlvbiBpYl9naWQgKmdpZCkKIHsKLQltZW1jcHkoZGV2X2FkZHItPnNyY19kZXZfYWRkciArIDQsIGdpZCwgc2l6ZW9mICpnaWQpOworCW1lbWNweShnaWQsIGRldl9hZGRyLT5zcmNfZGV2X2FkZHIgKyByZG1hX2FkZHJfZ2lkX29mZnNldChkZXZfYWRkciksIHNpemVvZiAqZ2lkKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfZ2V0X2RnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAotCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZG1hX2FkZHJfc2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB1bmlvbiBpYl9naWQgKmdpZCkKIHsKLQltZW1jcHkoZ2lkLCBkZXZfYWRkci0+ZHN0X2Rldl9hZGRyICsgNCwgc2l6ZW9mICpnaWQpOworCW1lbWNweShkZXZfYWRkci0+c3JjX2Rldl9hZGRyICsgcmRtYV9hZGRyX2dpZF9vZmZzZXQoZGV2X2FkZHIpLCBnaWQsIHNpemVvZiAqZ2lkKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfc2V0X2RnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAotCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZG1hX2FkZHJfZ2V0X2RnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB1bmlvbiBpYl9naWQgKmdpZCkKIHsKLQltZW1jcHkoZGV2X2FkZHItPmRzdF9kZXZfYWRkciArIDQsIGdpZCwgc2l6ZW9mICpnaWQpOworCW1lbWNweShnaWQsIGRldl9hZGRyLT5kc3RfZGV2X2FkZHIgKyByZG1hX2FkZHJfZ2lkX29mZnNldChkZXZfYWRkciksIHNpemVvZiAqZ2lkKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGl3X2FkZHJfZ2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAotCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZG1hX2FkZHJfc2V0X2RnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB1bmlvbiBpYl9naWQgKmdpZCkKIHsKLQltZW1jcHkoZ2lkLCBkZXZfYWRkci0+c3JjX2Rldl9hZGRyLCBzaXplb2YgKmdpZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd19hZGRyX2dldF9kZ2lkKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwKLQkJCQkgICAgdW5pb24gaWJfZ2lkICpnaWQpCi17Ci0JbWVtY3B5KGdpZCwgZGV2X2FkZHItPmRzdF9kZXZfYWRkciwgc2l6ZW9mICpnaWQpOworCW1lbWNweShkZXZfYWRkci0+ZHN0X2Rldl9hZGRyICsgcmRtYV9hZGRyX2dpZF9vZmZzZXQoZGV2X2FkZHIpLCBnaWQsIHNpemVvZiAqZ2lkKTsKIH0KIAogI2VuZGlmIC8qIElCX0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3NhLmggYi9pbmNsdWRlL3JkbWEvaWJfc2EuaAppbmRleCAzODQxYzFhLi4xMDgyYWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfc2EuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfc2EuaApAQCAtMzc5LDQgKzM3OSwxMCBAQAogCQkJIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcmVjLAogCQkJIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKTsKIAorLyoqCisgKiBpYl9zYV91bnBhY2tfcGF0aCAtIENvbnZlcnQgYSBwYXRoIHJlY29yZCBmcm9tIE1BRCBmb3JtYXQgdG8gc3RydWN0CisgKiBpYl9zYV9wYXRoX3JlYy4KKyAqLwordm9pZCBpYl9zYV91bnBhY2tfcGF0aCh2b2lkICphdHRyaWJ1dGUsIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcmVjKTsKKwogI2VuZGlmIC8qIElCX1NBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3NhLmggYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl9zYS5oCmluZGV4IDY1OTEyMDEuLmNmYzdjOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3NhLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfc2EuaApAQCAtMzUsNiArMzUsMjIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKK2VudW0geworCUlCX1BBVEhfR01QCQk9IDEsCisJSUJfUEFUSF9QUklNQVJZCQk9ICgxPDwxKSwKKwlJQl9QQVRIX0FMVEVSTkFURQk9ICgxPDwyKSwKKwlJQl9QQVRIX09VVEJPVU5ECT0gKDE8PDMpLAorCUlCX1BBVEhfSU5CT1VORAkJPSAoMTw8NCksCisJSUJfUEFUSF9JTkJPVU5EX1JFVkVSU0UgPSAoMTw8NSksCisJSUJfUEFUSF9CSURJUkVDVElPTkFMCT0gSUJfUEFUSF9PVVRCT1VORCB8IElCX1BBVEhfSU5CT1VORF9SRVZFUlNFCit9OworCitzdHJ1Y3QgaWJfcGF0aF9yZWNfZGF0YSB7CisJX191MzIJZmxhZ3M7CisJX191MzIJcmVzZXJ2ZWQ7CisJX191MzIJcGF0aF9yZWNbMTZdOworfTsKKwogc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgewogCV9fdTgJZGdpZFsxNl07CiAJX191OAlzZ2lkWzE2XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggYzE3OTMxOC4uMDk1MDllZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTE0MjUsNiArMTQyNSwxMSBAQAogICogQHNlbmRfd3I6IEEgbGlzdCBvZiB3b3JrIHJlcXVlc3RzIHRvIHBvc3Qgb24gdGhlIHNlbmQgcXVldWUuCiAgKiBAYmFkX3NlbmRfd3I6IE9uIGFuIGltbWVkaWF0ZSBmYWlsdXJlLCB0aGlzIHBhcmFtZXRlciB3aWxsIHJlZmVyZW5jZQogICogICB0aGUgd29yayByZXF1ZXN0IHRoYXQgZmFpbGVkIHRvIGJlIHBvc3RlZCBvbiB0aGUgUVAuCisgKgorICogV2hpbGUgSUJBIFZvbC4gMSBzZWN0aW9uIDExLjQuMS4xIHNwZWNpZmllcyB0aGF0IGlmIGFuIGltbWVkaWF0ZQorICogZXJyb3IgaXMgcmV0dXJuZWQsIHRoZSBRUCBzdGF0ZSBzaGFsbCBub3QgYmUgYWZmZWN0ZWQsCisgKiBpYl9wb3N0X3NlbmQoKSB3aWxsIHJldHVybiBhbiBpbW1lZGlhdGUgZXJyb3IgYWZ0ZXIgcXVldWVpbmcgYW55CisgKiBlYXJsaWVyIHdvcmsgcmVxdWVzdHMgaW4gdGhlIGxpc3QuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGliX3Bvc3Rfc2VuZChzdHJ1Y3QgaWJfcXAgKnFwLAogCQkJICAgICAgIHN0cnVjdCBpYl9zZW5kX3dyICpzZW5kX3dyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfdXNlcl9jbS5oIGIvaW5jbHVkZS9yZG1hL3JkbWFfdXNlcl9jbS5oCmluZGV4IGM1NTcwNTQuLjFkMTY1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9yZG1hX3VzZXJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmgKQEAgLTIxNSwxMiArMjE1LDE0IEBACiAKIC8qIE9wdGlvbiBsZXZlbHMgKi8KIGVudW0gewotCVJETUFfT1BUSU9OX0lECQk9IDAKKwlSRE1BX09QVElPTl9JRAkJPSAwLAorCVJETUFfT1BUSU9OX0lCCQk9IDEKIH07CiAKIC8qIE9wdGlvbiBkZXRhaWxzICovCiBlbnVtIHsKLQlSRE1BX09QVElPTl9JRF9UT1MJPSAwCisJUkRNQV9PUFRJT05fSURfVE9TCT0gMCwKKwlSRE1BX09QVElPTl9JQl9QQVRICT0gMQogfTsKIAogc3RydWN0IHJkbWFfdWNtX3NldF9vcHRpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA3Mzk0ZTNiLi5mZjkyYjQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPHNjc2kvaXNjc2lfcHJvdG8uaD4KICNpbmNsdWRlIDxzY3NpL2lzY3NpX2lmLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgpAQCAtMjMxLDcgKzIzMiw3IEBACiB9OwogCiBzdHJ1Y3QgaXNjc2lfcG9vbCB7Ci0Jc3RydWN0IGtmaWZvCQkqcXVldWU7CQkvKiBGSUZPIFF1ZXVlICovCisJc3RydWN0IGtmaWZvCQlxdWV1ZTsJCS8qIEZJRk8gUXVldWUgKi8KIAl2b2lkCQkJKipwb29sOwkJLyogUG9vbCBvZiBlbGVtZW50cyAqLwogCWludAkJCW1heDsJCS8qIE1heCBudW1iZXIgb2YgZWxlbWVudHMgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgKaW5kZXggOWUzMTgyZS4uNzQxYWU3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaApAQCAtODAsNyArODAsNyBAQAogCWludAkJCWRhdGFfb2Zmc2V0OwogCXN0cnVjdCBpc2NzaV9yMnRfaW5mbwkqcjJ0OwkJLyogaW4gcHJvZ3Jlc3Mgc29saWN0IFIyVCAqLwogCXN0cnVjdCBpc2NzaV9wb29sCXIydHBvb2w7Ci0Jc3RydWN0IGtmaWZvCQkqcjJ0cXVldWU7CisJc3RydWN0IGtmaWZvCQlyMnRxdWV1ZTsKIAl2b2lkCQkJKmRkX2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGlic3JwLmggYi9pbmNsdWRlL3Njc2kvbGlic3JwLmgKaW5kZXggYmE2MTVlNC4uMDdlM2FkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYnNycC5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJzcnAuaApAQCAtMjEsNyArMjEsNyBAQAogc3RydWN0IHNycF9xdWV1ZSB7CiAJdm9pZCAqcG9vbDsKIAl2b2lkICppdGVtczsKLQlzdHJ1Y3Qga2ZpZm8gKnF1ZXVlOworCXN0cnVjdCBrZmlmbyBxdWV1ZTsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oIGIvaW5jbHVkZS9zY3NpL29zZF9pbml0aWF0b3IuaAppbmRleCAzOWQ2ZDEwLi5hOGYzNzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oCisrKyBiL2luY2x1ZGUvc2NzaS9vc2RfaW5pdGlhdG9yLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogCXN0cnVjdCBfb3NkX2lvX2luZm8gewogCQlzdHJ1Y3QgYmlvICpiaW87CiAJCXU2NCB0b3RhbF9ieXRlczsKKwkJdTY0IHJlc2lkdWFsOwogCQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCQlzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50ICpsYXN0X3NlZzsKIAkJdTggKnBhZF9idWZmOwpAQCAtMTUwLDEyICsxNTEsMTQgQEAKIAlnZnBfdCBhbGxvY19mbGFnczsKIAl1bnNpZ25lZCB0aW1lb3V0OwogCXVuc2lnbmVkIHJldHJpZXM7CisJdW5zaWduZWQgc2Vuc2VfbGVuOwogCXU4IHNlbnNlW09TRF9NQVhfU0VOU0VfTEVOXTsKIAllbnVtIG9zZF9hdHRyaWJ1dGVzX21vZGUgYXR0cmlidXRlc19tb2RlOwogCiAJb3NkX3JlcV9kb25lX2ZuICphc3luY19kb25lOwogCXZvaWQgKmFzeW5jX3ByaXZhdGU7CiAJaW50IGFzeW5jX2Vycm9yOworCWludCByZXFfZXJyb3JzOwogfTsKIAogc3RhdGljIGlubGluZSBib29sIG9zZF9yZXFfaXNfdmVyMShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQpAQCAtMjk3LDggKzMwMCw2IEBACiB9OwogCiBzdHJ1Y3Qgb3NkX3NlbnNlX2luZm8gewotCXU2NCBvdXRfcmVzaWQ7CQkvKiBaZXJvIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG91dCByZXNpZHVhbCAqLwotCXU2NCBpbl9yZXNpZDsJCS8qIFplcm8gb24gc3VjY2VzcyBvdGhlcndpc2UgaW4gcmVzaWR1YWwgKi8KIAllbnVtIG9zZF9lcnJfcHJpb3JpdHkgb3NkX2Vycl9wcmk7CiAKIAlpbnQga2V5OwkJLyogb25lIG9mIGVudW0gc2NzaV9zZW5zZV9rZXlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90aW1lci5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaAppbmRleCBlNWNlODdhLi45NDk2Yjk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90aW1lci5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKQEAgLTMwMSw4ICszMDEsOCBAQAogCQlfX2VudHJ5LT5pbnRlcnZhbF91c2VjCT0gdmFsdWUtPml0X2ludGVydmFsLnR2X3VzZWM7CiAJKSwKIAotCVRQX3ByaW50aygid2hpY2g9JWQgZXhwaXJlcz0lbHUgaXRfdmFsdWU9JWx1LiVsdSBpdF9pbnRlcnZhbD0lbHUuJWx1IiwKLQkJICBfX2VudHJ5LT53aGljaCwgX19lbnRyeS0+ZXhwaXJlcywKKwlUUF9wcmludGsoIndoaWNoPSVkIGV4cGlyZXM9JWxsdSBpdF92YWx1ZT0lbGQuJWxkIGl0X2ludGVydmFsPSVsZC4lbGQiLAorCQkgIF9fZW50cnktPndoaWNoLCAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmV4cGlyZXMsCiAJCSAgX19lbnRyeS0+dmFsdWVfc2VjLCBfX2VudHJ5LT52YWx1ZV91c2VjLAogCQkgIF9fZW50cnktPmludGVydmFsX3NlYywgX19lbnRyeS0+aW50ZXJ2YWxfdXNlYykKICk7CkBAIC0zMzEsOCArMzMxLDggQEAKIAkJX19lbnRyeS0+cGlkCT0gcGlkX25yKHBpZCk7CiAJKSwKIAotCSAgICBUUF9wcmludGsoIndoaWNoPSVkIHBpZD0lZCBub3c9JWx1IiwgX19lbnRyeS0+d2hpY2gsCi0JCSAgICAgIChpbnQpIF9fZW50cnktPnBpZCwgX19lbnRyeS0+bm93KQorCVRQX3ByaW50aygid2hpY2g9JWQgcGlkPSVkIG5vdz0lbGx1IiwgX19lbnRyeS0+d2hpY2gsCisJCSAgKGludCkgX19lbnRyeS0+cGlkLCAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPm5vdykKICk7CiAKICNlbmRpZiAvKiAgX1RSQUNFX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IGQxYjNkZTkuLjczNTIzMTUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTQzNiwxMCArNDM2LDYgQEAKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CQkJCQlcCiAJaW50IHJldDsJCQkJCQkJXAogCQkJCQkJCQkJXAotCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGV2ZW50X2NhbGwpOwkJCVwKLQlpZiAocmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAogCXRzdHJ1Y3Q7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gcmV0OwkJCQkJCQlcCkBAIC01NTksMTMgKzU1NSw3IEBACiAgKgogICogc3RhdGljIGludCBmdHJhY2VfcmVnX2V2ZW50XzxjYWxsPihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkKICAqIHsKLSAqCWludCByZXQ7Ci0gKgotICoJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9ldmVudF88Y2FsbD4pOwotICoJaWYgKCFyZXQpCi0gKgkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSB0cmFjZSBwb2ludCAiCi0gKgkJCSJwcm9iZSB0byAgPGNhbGw+Iik7Ci0gKglyZXR1cm4gcmV0OworICoJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXzxjYWxsPihmdHJhY2VfZXZlbnRfPGNhbGw+KTsKICAqIH0KICAqCiAgKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQpAQCAtNjIzLDIzICs2MTMsMTIgQEAKICAqCS50cmFjZQkJCT0gZnRyYWNlX3Jhd19vdXRwdXRfPGNhbGw+LCA8LS0gc3RhZ2UgMgogICogfTsKICAqCi0gKiBzdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpCi0gKiB7Ci0gKglpbnQgaWQ7Ci0gKgotICoJaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmZ0cmFjZV9ldmVudF90eXBlXzxjYWxsPik7Ci0gKglpZiAoIWlkKQotICoJCXJldHVybiAtRU5PREVWOwotICoJZXZlbnRfPGNhbGw+LmlkID0gaWQ7Ci0gKglyZXR1cm4gMDsKLSAqIH0KLSAqCiAgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAogICogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQogICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XzxjYWxsPiA9IHsKICAqCS5uYW1lCQkJPSAiPGNhbGw+IiwKICAqCS5zeXN0ZW0JCQk9ICI8c3lzdGVtPiIsCi0gKgkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50XzxjYWxsPiwKKyAqCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwKICAqCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+LAogICoJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+LAogICoJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfPGNhbGw+LApAQCAtNjQ3LDEzICs2MjYsOSBAQAogICoKICAqLwogCi0jdW5kZWYgVFBfRk1UCi0jZGVmaW5lIFRQX0ZNVChmbXQsIGFyZ3MuLi4pCWZtdCAiXG4iLCAjI2FyZ3MKLQogI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCiAKICNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAotCS5wcm9maWxlX2NvdW50ID0gQVRPTUlDX0lOSVQoLTEpLAkJCQlcCiAJLnByb2ZpbGVfZW5hYmxlID0gZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCwJCQlcCiAJLnByb2ZpbGVfZGlzYWJsZSA9IGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNjYWxsLAogCkBAIC03MjgsMTMgKzcwMyw3IEBACiAJCQkJCQkJCQlcCiBzdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCiB7CQkJCQkJCQkJXAotCWludCByZXQ7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwpOwkJXAotCWlmIChyZXQpCQkJCQkJCVwKLQkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSB0cmFjZSBwb2ludCAiCVwKLQkJCSJwcm9iZSB0byAiICNjYWxsICJcbiIpOwkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCisJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAogc3RhdGljIHZvaWQgZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXApAQCAtNzQ0LDE5ICs3MTMsNyBAQAogCQkJCQkJCQkJXAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBmdHJhY2VfZXZlbnRfdHlwZV8jI2NhbGwgPSB7CQkJXAogCS50cmFjZQkJCT0gZnRyYWNlX3Jhd19vdXRwdXRfIyNjYWxsLAkJXAotfTsJCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAotewkJCQkJCQkJCVwKLQlpbnQgaWQ7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmZ0cmFjZV9ldmVudF90eXBlXyMjY2FsbCk7CQlcCi0JaWYgKCFpZCkJCQkJCQkJXAotCQlyZXR1cm4gLUVOT0RFVjsJCQkJCQlcCi0JZXZlbnRfIyNjYWxsLmlkID0gaWQ7CQkJCQkJXAotCUlOSVRfTElTVF9IRUFEKCZldmVudF8jI2NhbGwuZmllbGRzKTsJCQkJXAotCXJldHVybiAwOwkJCQkJCQlcCi19Cit9OwogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCkBAIC03NzYsNyArNzMzLDcgQEAKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAogCS5ldmVudAkJCT0gJmZ0cmFjZV9ldmVudF90eXBlXyMjY2FsbCwJCVwKLQkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbCwJCVwKKwkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCiAJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyN0ZW1wbGF0ZSwJCVwKQEAgLTc5Myw3ICs3NTAsNyBAQAogCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAogCS5zeXN0ZW0JCQk9IF9fc3RyaW5naWZ5KFRSQUNFX1NZU1RFTSksCQlcCiAJLmV2ZW50CQkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfIyNjYWxsLAkJXAotCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsLAkJXAorCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCQlcCiAJLnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsLAkJXAogCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwsCVwKIAkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXApAQCAtOTUzLDcgKzkxMCw2IEBACiAJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsJCQlcCiBlbmRfcmVjdXJzaW9uOgkJCQkJCQkJXAogCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CQkJCQlcCi0JCQkJCQkJCQlcCiB9CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vZGE4eHgtZmIuaCBiL2luY2x1ZGUvdmlkZW8vZGE4eHgtZmIuaAppbmRleCBjMDUxYTUwLi44OWQ0M2IzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL2RhOHh4LWZiLmgKKysrIGIvaW5jbHVkZS92aWRlby9kYTh4eC1mYi5oCkBAIC0zOCw2ICszOCw3IEBACiAJY29uc3QgY2hhciBtYW51X25hbWVbMTBdOwogCXZvaWQgKmNvbnRyb2xsZXJfZGF0YTsKIAljb25zdCBjaGFyIHR5cGVbMjVdOworCXZvaWQgKCpwYW5lbF9wb3dlcl9jdHJsKShpbnQpOwogfTsKIAogc3RydWN0IGxjZF9jdHJsX2NvbmZpZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKaW5kZXggMjUxNDRhYi4uMjg4MjA1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaApAQCAtNTAsNiArNTAsOCBAQAogCXZvaWQgKmJvYXJkX2RhdGE7CiAJaW50ICgqc2V0dXBfc3lzKSh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzeXNfb3BzX2hhbmRsZSwKIAkJCSBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpOworCXZvaWQgKCpzdGFydF90cmFuc2Zlcikodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgICAgICAgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKIAl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7CiAJdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKIH07CmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNTRjNjU1Yy4uYTIzZGE5ZiAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMTA3OSw2ICsxMDc5LDI4IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVECisJYm9vbCAiQWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWQiCisJZGVwZW5kcyBvbiBFTUJFRERFRCAmJiAhTU1VCisJZGVmYXVsdCBuCisJaGVscAorCSAgTm9ybWFsbHksIGFuZCBhY2NvcmRpbmcgdG8gdGhlIExpbnV4IHNwZWMsIGFub255bW91cyBtZW1vcnkgb2J0YWluZWQKKwkgIGZyb20gbW1hcCgpIGhhcyBpdCdzIGNvbnRlbnRzIGNsZWFyZWQgYmVmb3JlIGl0IGlzIHBhc3NlZCB0bworCSAgdXNlcnNwYWNlLiAgRW5hYmxpbmcgdGhpcyBjb25maWcgb3B0aW9uIGFsbG93cyB5b3UgdG8gcmVxdWVzdCB0aGF0CisJICBtbWFwKCkgc2tpcCB0aGF0IGlmIGl0IGlzIGdpdmVuIGFuIE1BUF9VTklOSVRJQUxJWkVEIGZsYWcsIHRodXMKKwkgIHByb3ZpZGluZyBhIGh1Z2UgcGVyZm9ybWFuY2UgYm9vc3QuICBJZiB0aGlzIG9wdGlvbiBpcyBub3QgZW5hYmxlZCwKKwkgIHRoZW4gdGhlIGZsYWcgd2lsbCBiZSBpZ25vcmVkLgorCisJICBUaGlzIGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSB1Q2xpYmMncyBtYWxsb2MoKSwgYW5kIGFsc28gYnkKKwkgIEVMRi1GRFBJQyBiaW5mbXQncyBicmsgYW5kIHN0YWNrIGFsbG9jYXRvci4KKworCSAgQmVjYXVzZSBvZiB0aGUgb2J2aW91cyBzZWN1cml0eSBpc3N1ZXMsIHRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlCisJICBlbmFibGVkIG9uIGVtYmVkZGVkIGRldmljZXMgd2hlcmUgeW91IGNvbnRyb2wgd2hhdCBpcyBydW4gaW4KKwkgIHVzZXJzcGFjZS4gIFNpbmNlIHRoYXQgaXNuJ3QgZ2VuZXJhbGx5IGEgcHJvYmxlbSBvbiBuby1NTVUgc3lzdGVtcywKKwkgIGl0IGlzIG5vcm1hbGx5IHNhZmUgdG8gc2F5IFkgaGVyZS4KKworCSAgU2VlIERvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIGNvbmZpZyBQUk9GSUxJTkcKIAlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAloZWxwCmRpZmYgLS1naXQgYS9pbml0L01ha2VmaWxlIGIvaW5pdC9NYWtlZmlsZQppbmRleCA0YTI0M2RmLi4wYmY2NzdhIDEwMDY0NAotLS0gYS9pbml0L01ha2VmaWxlCisrKyBiL2luaXQvTWFrZWZpbGUKQEAgLTE1LDEyICsxNSw4IEBACiBtb3VudHMtJChDT05GSUdfQkxLX0RFVl9JTklUUkQpCSs9IGRvX21vdW50c19pbml0cmQubwogbW91bnRzLSQoQ09ORklHX0JMS19ERVZfTUQpCSs9IGRvX21vdW50c19tZC5vCiAKLSMgZmlsZXMgdG8gYmUgcmVtb3ZlZCB1cG9uIG1ha2UgY2xlYW4KLWNsZWFuLWZpbGVzIDo9IC4uL2luY2x1ZGUvbGludXgvY29tcGlsZS5oCi0KICMgZGVwZW5kZW5jaWVzIG9uIGdlbmVyYXRlZCBmaWxlcyBuZWVkIHRvIGJlIGxpc3RlZCBleHBsaWNpdGx5Ci0KLSQob2JqKS92ZXJzaW9uLm86IGluY2x1ZGUvbGludXgvY29tcGlsZS5oCiskKG9iaikvdmVyc2lvbi5vOiBpbmNsdWRlL2dlbmVyYXRlZC9jb21waWxlLmgKIAogIyBjb21waWxlLmggY2hhbmdlcyBkZXBlbmRpbmcgb24gaG9zdG5hbWUsIGdlbmVyYXRpb24gbnVtYmVyLCBldGMsCiAjIHNvIHdlIHJlZ2VuZXJhdGUgaXQgYWx3YXlzLgpAQCAtMzAsNyArMjYsNyBAQAogICAgICAgIGNoa19jb21waWxlLmggPSA6CiAgcXVpZXRfY2hrX2NvbXBpbGUuaCA9IGVjaG8gJyAgQ0hLICAgICAkQCcKIHNpbGVudF9jaGtfY29tcGlsZS5oID0gOgotaW5jbHVkZS9saW51eC9jb21waWxlLmg6IEZPUkNFCitpbmNsdWRlL2dlbmVyYXRlZC9jb21waWxlLmg6IEZPUkNFCiAJQCQoJChxdWlldCljaGtfY29tcGlsZS5oKQogCSQoUSkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL21rY29tcGlsZV9oICRAIFwKIAkiJChVVFNfTUFDSElORSkiICIkKENPTkZJR19TTVApIiAiJChDT05GSUdfUFJFRU1QVCkiICIkKENDKSAkKEtCVUlMRF9DRkxBR1MpIgpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggNGMwMGVkYy4uYjM3ZDM0YiAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC00MTMsNyArNDEzLDcgQEAKIAogc3RhdGljIGNoYXIgKiBfX2luaXQgdW5wYWNrX3RvX3Jvb3RmcyhjaGFyICpidWYsIHVuc2lnbmVkIGxlbikKIHsKLQlpbnQgd3JpdHRlbjsKKwlpbnQgd3JpdHRlbiwgcmVzOwogCWRlY29tcHJlc3NfZm4gZGVjb21wcmVzczsKIAljb25zdCBjaGFyICpjb21wcmVzc19uYW1lOwogCXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgbXNnX2J1Zls2NF07CkBAIC00NDUsMTAgKzQ0NSwxMiBAQAogCQl9CiAJCXRoaXNfaGVhZGVyID0gMDsKIAkJZGVjb21wcmVzcyA9IGRlY29tcHJlc3NfbWV0aG9kKGJ1ZiwgbGVuLCAmY29tcHJlc3NfbmFtZSk7Ci0JCWlmIChkZWNvbXByZXNzKQotCQkJZGVjb21wcmVzcyhidWYsIGxlbiwgTlVMTCwgZmx1c2hfYnVmZmVyLCBOVUxMLAorCQlpZiAoZGVjb21wcmVzcykgeworCQkJcmVzID0gZGVjb21wcmVzcyhidWYsIGxlbiwgTlVMTCwgZmx1c2hfYnVmZmVyLCBOVUxMLAogCQkJCSAgICZteV9pbnB0ciwgZXJyb3IpOwotCQllbHNlIGlmIChjb21wcmVzc19uYW1lKSB7CisJCQlpZiAocmVzKQorCQkJCWVycm9yKCJkZWNvbXByZXNzb3IgZmFpbGVkIik7CisJCX0gZWxzZSBpZiAoY29tcHJlc3NfbmFtZSkgewogCQkJaWYgKCFtZXNzYWdlKSB7CiAJCQkJc25wcmludGYobXNnX2J1Ziwgc2l6ZW9mIG1zZ19idWYsCiAJCQkJCSAiY29tcHJlc3Npb24gbWV0aG9kICVzIG5vdCBjb25maWd1cmVkIiwKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNDA1MWQ3NS4uZGFjNDRhOSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTM2OSwxMiArMzY5LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCi0JLyoKLQkgKiBTZXQgdXAgdGhlIGN1cnJlbnQgQ1BVIGFzIHBvc3NpYmxlIHRvIG1pZ3JhdGUgdG8uCi0JICogVGhlIG90aGVyIG9uZXMgd2lsbCBiZSBkb25lIGJ5IGNwdV91cC9jcHVfZG93bigpCi0JICovCi0Jc2V0X2NwdV9hY3RpdmUoc21wX3Byb2Nlc3Nvcl9pZCgpLCB0cnVlKTsKLQogCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHVzZXJzcGFjZSAtLVJSICovCiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CiAJCWlmIChudW1fb25saW5lX2NwdXMoKSA+PSBzZXR1cF9tYXhfY3B1cykKQEAgLTQ4Niw2ICs0ODAsNyBAQAogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJLyogTWFyayB0aGUgYm9vdCBjcHUgInByZXNlbnQiLCAib25saW5lIiBldGMgZm9yIFNNUCBhbmQgVVAgY2FzZSAqLwogCXNldF9jcHVfb25saW5lKGNwdSwgdHJ1ZSk7CisJc2V0X2NwdV9hY3RpdmUoY3B1LCB0cnVlKTsKIAlzZXRfY3B1X3ByZXNlbnQoY3B1LCB0cnVlKTsKIAlzZXRfY3B1X3Bvc3NpYmxlKGNwdSwgdHJ1ZSk7CiB9CkBAIC02OTEsMTAgKzY4NiwxMCBAQAogc3RhdGljIHZvaWQgX19pbml0IGRvX2N0b3JzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0NPTlNUUlVDVE9SUwotCWN0b3JfZm5fdCAqY2FsbCA9IChjdG9yX2ZuX3QgKikgX19jdG9yc19zdGFydDsKKwljdG9yX2ZuX3QgKmZuID0gKGN0b3JfZm5fdCAqKSBfX2N0b3JzX3N0YXJ0OwogCi0JZm9yICg7IGNhbGwgPCAoY3Rvcl9mbl90ICopIF9fY3RvcnNfZW5kOyBjYWxsKyspCi0JCSgqY2FsbCkoKTsKKwlmb3IgKDsgZm4gPCAoY3Rvcl9mbl90ICopIF9fY3RvcnNfZW5kOyBmbisrKQorCQkoKmZuKSgpOwogI2VuZGlmCiB9CiAKQEAgLTc1NSwxMCArNzUwLDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkb19pbml0Y2FsbHModm9pZCkKIHsKLQlpbml0Y2FsbF90ICpjYWxsOworCWluaXRjYWxsX3QgKmZuOwogCi0JZm9yIChjYWxsID0gX19lYXJseV9pbml0Y2FsbF9lbmQ7IGNhbGwgPCBfX2luaXRjYWxsX2VuZDsgY2FsbCsrKQotCQlkb19vbmVfaW5pdGNhbGwoKmNhbGwpOworCWZvciAoZm4gPSBfX2Vhcmx5X2luaXRjYWxsX2VuZDsgZm4gPCBfX2luaXRjYWxsX2VuZDsgZm4rKykKKwkJZG9fb25lX2luaXRjYWxsKCpmbik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gcGVuZGluZyBzdHVmZiBmcm9tIHRoZSBpbml0Y2FsbCBzZXF1ZW5jZSAqLwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CkBAIC03ODUsMTAgKzc4MCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG9fcHJlX3NtcF9pbml0Y2FsbHModm9pZCkKIHsKLQlpbml0Y2FsbF90ICpjYWxsOworCWluaXRjYWxsX3QgKmZuOwogCi0JZm9yIChjYWxsID0gX19pbml0Y2FsbF9zdGFydDsgY2FsbCA8IF9fZWFybHlfaW5pdGNhbGxfZW5kOyBjYWxsKyspCi0JCWRvX29uZV9pbml0Y2FsbCgqY2FsbCk7CisJZm9yIChmbiA9IF9faW5pdGNhbGxfc3RhcnQ7IGZuIDwgX19lYXJseV9pbml0Y2FsbF9lbmQ7IGZuKyspCisJCWRvX29uZV9pbml0Y2FsbCgqZm4pOwogfQogCiBzdGF0aWMgdm9pZCBydW5faW5pdF9wcm9jZXNzKGNoYXIgKmluaXRfZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9pbml0L3ZlcnNpb24uYyBiL2luaXQvdmVyc2lvbi5jCmluZGV4IDUyYThiOTguLmFkZmY1ODYgMTAwNjQ0Ci0tLSBhL2luaXQvdmVyc2lvbi5jCisrKyBiL2luaXQvdmVyc2lvbi5jCkBAIC02LDExICs2LDExIEBACiAgKiAgTWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIExpbnV4LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL2NvbXBpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91dHMuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaWZuZGVmIENPTkZJR19LQUxMU1lNUwpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IGVlOWQ2OTcuLmM3OWJkNTcgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGlkLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjX25hbWVzcGFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlICJ1dGlsLmgiCkBAIC03MzQsNyArNzMzLDYgQEAKIAkJZXJyb3IgPSBQVFJfRVJSKGZpbHApOwogCQlnb3RvIG91dF9wdXRmZDsKIAl9Ci0JaW1hX2NvdW50c19nZXQoZmlscCk7CiAKIAlmZF9pbnN0YWxsKGZkLCBmaWxwKTsKIAlnb3RvIG91dF91cHNlbTsKZGlmZiAtLWdpdCBhL2lwYy9tc2cuYyBiL2lwYy9tc2cuYwppbmRleCAwODViZDU4Li5hZjQyZWY4IDEwMDY0NAotLS0gYS9pcGMvbXNnLmMKKysrIGIvaXBjL21zZy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIHZvaWQgbXNnX2V4aXRfbnMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQogewogCWZyZWVfaXBjcyhucywgJm1zZ19pZHMobnMpLCBmcmVlcXVlKTsKKwlpZHJfZGVzdHJveSgmbnMtPmlkc1tJUENfTVNHX0lEU10uaXBjc19pZHIpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2lwYy9zZW0uYyBiL2lwYy9zZW0uYwppbmRleCA4N2MyYjY0Li5kYmVmOTViIDEwMDY0NAotLS0gYS9pcGMvc2VtLmMKKysrIGIvaXBjL3NlbS5jCkBAIC0xMjksNiArMTI5LDcgQEAKIHZvaWQgc2VtX2V4aXRfbnMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQogewogCWZyZWVfaXBjcyhucywgJnNlbV9pZHMobnMpLCBmcmVlYXJ5KTsKKwlpZHJfZGVzdHJveSgmbnMtPmlkc1tJUENfU0VNX0lEU10uaXBjc19pZHIpOwogfQogI2VuZGlmCiAKQEAgLTI0MCw2ICsyNDEsNyBAQAogCWtleV90IGtleSA9IHBhcmFtcy0+a2V5OwogCWludCBuc2VtcyA9IHBhcmFtcy0+dS5uc2VtczsKIAlpbnQgc2VtZmxnID0gcGFyYW1zLT5mbGc7CisJaW50IGk7CiAKIAlpZiAoIW5zZW1zKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3Miw2ICsyNzQsMTEgQEAKIAlucy0+dXNlZF9zZW1zICs9IG5zZW1zOwogCiAJc21hLT5zZW1fYmFzZSA9IChzdHJ1Y3Qgc2VtICopICZzbWFbMV07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnNlbXM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnNtYS0+c2VtX2Jhc2VbaV0uc2VtX3BlbmRpbmcpOworCisJc21hLT5jb21wbGV4X2NvdW50ID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmc21hLT5zZW1fcGVuZGluZyk7CiAJSU5JVF9MSVNUX0hFQUQoJnNtYS0+bGlzdF9pZCk7CiAJc21hLT5zZW1fbnNlbXMgPSBuc2VtczsKQEAgLTM5Nyw2MyArNDA0LDEwOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qIEdvIHRocm91Z2ggdGhlIHBlbmRpbmcgcXVldWUgZm9yIHRoZSBpbmRpY2F0ZWQgc2VtYXBob3JlCi0gKiBsb29raW5nIGZvciB0YXNrcyB0aGF0IGNhbiBiZSBjb21wbGV0ZWQuCisvKgorICogV2FrZSB1cCBhIHByb2Nlc3Mgd2FpdGluZyBvbiB0aGUgc2VtIHF1ZXVlIHdpdGggYSBnaXZlbiBlcnJvci4KKyAqIFRoZSBxdWV1ZSBpcyBpbnZhbGlkIChtYXkgbm90IGJlIGFjY2Vzc2VkKSBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucy4KICAqLwotc3RhdGljIHZvaWQgdXBkYXRlX3F1ZXVlIChzdHJ1Y3Qgc2VtX2FycmF5ICogc21hKQorc3RhdGljIHZvaWQgd2FrZV91cF9zZW1fcXVldWUoc3RydWN0IHNlbV9xdWV1ZSAqcSwgaW50IGVycm9yKQogewotCWludCBlcnJvcjsKLQlzdHJ1Y3Qgc2VtX3F1ZXVlICogcTsKKwkvKgorCSAqIEhvbGQgcHJlZW1wdCBvZmYgc28gdGhhdCB3ZSBkb24ndCBnZXQgcHJlZW1wdGVkIGFuZCBoYXZlIHRoZQorCSAqIHdha2VlIGJ1c3ktd2FpdCB1bnRpbCB3ZSdyZSBzY2hlZHVsZWQgYmFjayBvbi4gV2UncmUgaG9sZGluZworCSAqIGxvY2tzIGhlcmUgc28gaXQgbWF5IG5vdCBzdHJpY3RseSBiZSBuZWVkZWQsIGhvd2V2ZXIgaWYgdGhlCisJICogbG9ja3MgYmVjb21lIHByZWVtcHRpYmxlIHRoZW4gdGhpcyBwcmV2ZW50cyBzdWNoIGEgcHJvYmxlbS4KKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlxLT5zdGF0dXMgPSBJTl9XQUtFVVA7CisJd2FrZV91cF9wcm9jZXNzKHEtPnNsZWVwZXIpOworCS8qIGhhbmRzLW9mZjogcSBjYW4gZGlzYXBwZWFyIGltbWVkaWF0ZWx5IGFmdGVyIHdyaXRpbmcgcS0+c3RhdHVzLiAqLworCXNtcF93bWIoKTsKKwlxLT5zdGF0dXMgPSBlcnJvcjsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQogCi0JcSA9IGxpc3RfZW50cnkoc21hLT5zZW1fcGVuZGluZy5uZXh0LCBzdHJ1Y3Qgc2VtX3F1ZXVlLCBsaXN0KTsKLQl3aGlsZSAoJnEtPmxpc3QgIT0gJnNtYS0+c2VtX3BlbmRpbmcpIHsKK3N0YXRpYyB2b2lkIHVubGlua19xdWV1ZShzdHJ1Y3Qgc2VtX2FycmF5ICpzbWEsIHN0cnVjdCBzZW1fcXVldWUgKnEpCit7CisJbGlzdF9kZWwoJnEtPmxpc3QpOworCWlmIChxLT5uc29wcyA9PSAxKQorCQlsaXN0X2RlbCgmcS0+c2ltcGxlX2xpc3QpOworCWVsc2UKKwkJc21hLT5jb21wbGV4X2NvdW50LS07Cit9CisKKworLyoqCisgKiB1cGRhdGVfcXVldWUoc21hLCBzZW1udW0pOiBMb29rIGZvciB0YXNrcyB0aGF0IGNhbiBiZSBjb21wbGV0ZWQuCisgKiBAc21hOiBzZW1hcGhvcmUgYXJyYXkuCisgKiBAc2VtbnVtOiBzZW1hcGhvcmUgdGhhdCB3YXMgbW9kaWZpZWQuCisgKgorICogdXBkYXRlX3F1ZXVlIG11c3QgYmUgY2FsbGVkIGFmdGVyIGEgc2VtYXBob3JlIGluIGEgc2VtYXBob3JlIGFycmF5CisgKiB3YXMgbW9kaWZpZWQuIElmIG11bHRpcGxlIHNlbWFwaG9yZSB3ZXJlIG1vZGlmaWVkLCB0aGVuIEBzZW1udW0KKyAqIG11c3QgYmUgc2V0IHRvIC0xLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfcXVldWUoc3RydWN0IHNlbV9hcnJheSAqc21hLCBpbnQgc2VtbnVtKQoreworCXN0cnVjdCBzZW1fcXVldWUgKnE7CisJc3RydWN0IGxpc3RfaGVhZCAqd2FsazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwZW5kaW5nX2xpc3Q7CisJaW50IG9mZnNldDsKKworCS8qIGlmIHRoZXJlIGFyZSBjb21wbGV4IG9wZXJhdGlvbnMgYXJvdW5kLCB0aGVuIGtub3dpbmcgdGhlIHNlbWFwaG9yZQorCSAqIHRoYXQgd2FzIG1vZGlmaWVkIGRvZXNuJ3QgaGVscCB1cy4gQXNzdW1lIHRoYXQgbXVsdGlwbGUgc2VtYXBob3JlcworCSAqIHdlcmUgbW9kaWZpZWQuCisJICovCisJaWYgKHNtYS0+Y29tcGxleF9jb3VudCkKKwkJc2VtbnVtID0gLTE7CisKKwlpZiAoc2VtbnVtID09IC0xKSB7CisJCXBlbmRpbmdfbGlzdCA9ICZzbWEtPnNlbV9wZW5kaW5nOworCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc2VtX3F1ZXVlLCBsaXN0KTsKKwl9IGVsc2UgeworCQlwZW5kaW5nX2xpc3QgPSAmc21hLT5zZW1fYmFzZVtzZW1udW1dLnNlbV9wZW5kaW5nOworCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc2VtX3F1ZXVlLCBzaW1wbGVfbGlzdCk7CisJfQorCithZ2FpbjoKKwl3YWxrID0gcGVuZGluZ19saXN0LT5uZXh0OworCXdoaWxlICh3YWxrICE9IHBlbmRpbmdfbGlzdCkgeworCQlpbnQgZXJyb3IsIGFsdGVyOworCisJCXEgPSAoc3RydWN0IHNlbV9xdWV1ZSAqKSgoY2hhciAqKXdhbGsgLSBvZmZzZXQpOworCQl3YWxrID0gd2Fsay0+bmV4dDsKKworCQkvKiBJZiB3ZSBhcmUgc2Nhbm5pbmcgdGhlIHNpbmdsZSBzb3AsIHBlci1zZW1hcGhvcmUgbGlzdCBvZgorCQkgKiBvbmUgc2VtYXBob3JlIGFuZCB0aGF0IHNlbWFwaG9yZSBpcyAwLCB0aGVuIGl0IGlzIG5vdAorCQkgKiBuZWNlc3NhcnkgdG8gc2NhbiB0aGUgImFsdGVyIiBlbnRyaWVzOiBzaW1wbGUgaW5jcmVtZW50cworCQkgKiB0aGF0IGFmZmVjdCBvbmx5IG9uZSBlbnRyeSBzdWNjZWVkIGltbWVkaWF0ZWx5IGFuZCBjYW5ub3QKKwkJICogYmUgaW4gdGhlICBwZXIgc2VtYXBob3JlIHBlbmRpbmcgcXVldWUsIGFuZCBkZWNyZW1lbnRzCisJCSAqIGNhbm5vdCBiZSBzdWNjZXNzZnVsIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IDAuCisJCSAqLworCQlpZiAoc2VtbnVtICE9IC0xICYmIHNtYS0+c2VtX2Jhc2Vbc2VtbnVtXS5zZW12YWwgPT0gMCAmJgorCQkJCXEtPmFsdGVyKQorCQkJYnJlYWs7CisKIAkJZXJyb3IgPSB0cnlfYXRvbWljX3NlbW9wKHNtYSwgcS0+c29wcywgcS0+bnNvcHMsCiAJCQkJCSBxLT51bmRvLCBxLT5waWQpOwogCiAJCS8qIERvZXMgcS0+c2xlZXBlciBzdGlsbCBuZWVkIHRvIHNsZWVwPyAqLwotCQlpZiAoZXJyb3IgPD0gMCkgewotCQkJc3RydWN0IHNlbV9xdWV1ZSAqbjsKKwkJaWYgKGVycm9yID4gMCkKKwkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogQ29udGludWUgc2Nhbm5pbmcuIFRoZSBuZXh0IG9wZXJhdGlvbgotCQkJICogdGhhdCBtdXN0IGJlIGNoZWNrZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGUKLQkJCSAqIGNvbXBsZXRlZCBvcGVyYXRpb246Ci0JCQkgKiAtIGlmIHRoZSBvcGVyYXRpb24gbW9kaWZpZWQgdGhlIGFycmF5LCB0aGVuCi0JCQkgKiAgIHJlc3RhcnQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgcXVldWUgYW5kCi0JCQkgKiAgIGNoZWNrIGZvciB0aHJlYWRzIHRoYXQgbWlnaHQgYmUgd2FpdGluZwotCQkJICogICBmb3Igc2VtYXBob3JlIHZhbHVlcyB0byBiZWNvbWUgMC4KLQkJCSAqIC0gaWYgdGhlIG9wZXJhdGlvbiBkaWRuJ3QgbW9kaWZ5IHRoZSBhcnJheSwKLQkJCSAqICAgdGhlbiBqdXN0IGNvbnRpbnVlLgotCQkJICogVGhlIG9yZGVyIG9mIGxpc3RfZGVsKCkgYW5kIHJlYWRpbmcgLT5uZXh0Ci0JCQkgKiBpcyBjcnVjaWFsOiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBsaXN0X2RlbCgpCi0JCQkgKiBtdXN0IGJlIGRvbmUgZmlyc3QgW2JlY2F1c2Ugd2UgbWlnaHQgYmUgdGhlCi0JCQkgKiBmaXJzdCBlbnRyeSBpbiAtPnNlbV9wZW5kaW5nXSwgaW4gdGhlIGxhdHRlcgotCQkJICogY2FzZSB0aGUgbGlzdF9kZWwoKSBtdXN0IGJlIGRvbmUgbGFzdAotCQkJICogW2JlY2F1c2UgdGhlIGxpc3QgaXMgaW52YWxpZCBhZnRlciB0aGUgbGlzdF9kZWwoKV0KLQkJCSAqLwotCQkJaWYgKHEtPmFsdGVyKSB7Ci0JCQkJbGlzdF9kZWwoJnEtPmxpc3QpOwotCQkJCW4gPSBsaXN0X2VudHJ5KHNtYS0+c2VtX3BlbmRpbmcubmV4dCwKLQkJCQkJCXN0cnVjdCBzZW1fcXVldWUsIGxpc3QpOwotCQkJfSBlbHNlIHsKLQkJCQluID0gbGlzdF9lbnRyeShxLT5saXN0Lm5leHQsIHN0cnVjdCBzZW1fcXVldWUsCi0JCQkJCQlsaXN0KTsKLQkJCQlsaXN0X2RlbCgmcS0+bGlzdCk7Ci0JCQl9CisJCXVubGlua19xdWV1ZShzbWEsIHEpOwogCi0JCQkvKiB3YWtlIHVwIHRoZSB3YWl0aW5nIHRocmVhZCAqLwotCQkJcS0+c3RhdHVzID0gSU5fV0FLRVVQOwotCi0JCQl3YWtlX3VwX3Byb2Nlc3MocS0+c2xlZXBlcik7Ci0JCQkvKiBoYW5kcy1vZmY6IHEgd2lsbCBkaXNhcHBlYXIgaW1tZWRpYXRlbHkgYWZ0ZXIKLQkJCSAqIHdyaXRpbmcgcS0+c3RhdHVzLgotCQkJICovCi0JCQlzbXBfd21iKCk7Ci0JCQlxLT5zdGF0dXMgPSBlcnJvcjsKLQkJCXEgPSBuOwotCQl9IGVsc2UgewotCQkJcSA9IGxpc3RfZW50cnkocS0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2VtX3F1ZXVlLCBsaXN0KTsKLQkJfQorCQkvKgorCQkgKiBUaGUgbmV4dCBvcGVyYXRpb24gdGhhdCBtdXN0IGJlIGNoZWNrZWQgZGVwZW5kcyBvbiB0aGUgdHlwZQorCQkgKiBvZiB0aGUgY29tcGxldGVkIG9wZXJhdGlvbjoKKwkJICogLSBpZiB0aGUgb3BlcmF0aW9uIG1vZGlmaWVkIHRoZSBhcnJheSwgdGhlbiByZXN0YXJ0IGZyb20gdGhlCisJCSAqICAgaGVhZCBvZiB0aGUgcXVldWUgYW5kIGNoZWNrIGZvciB0aHJlYWRzIHRoYXQgbWlnaHQgYmUKKwkJICogICB3YWl0aW5nIGZvciB0aGUgbmV3IHNlbWFwaG9yZSB2YWx1ZXMuCisJCSAqIC0gaWYgdGhlIG9wZXJhdGlvbiBkaWRuJ3QgbW9kaWZ5IHRoZSBhcnJheSwgdGhlbiBqdXN0CisJCSAqICAgY29udGludWUuCisJCSAqLworCQlhbHRlciA9IHEtPmFsdGVyOworCQl3YWtlX3VwX3NlbV9xdWV1ZShxLCBlcnJvcik7CisJCWlmIChhbHRlciAmJiAhZXJyb3IpCisJCQlnb3RvIGFnYWluOwogCX0KIH0KIApAQCAtNTMzLDEyICs1ODYsOCBAQAogCiAJLyogV2FrZSB1cCBhbGwgcGVuZGluZyBwcm9jZXNzZXMgYW5kIGxldCB0aGVtIGZhaWwgd2l0aCBFSURSTS4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocSwgdHEsICZzbWEtPnNlbV9wZW5kaW5nLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZxLT5saXN0KTsKLQotCQlxLT5zdGF0dXMgPSBJTl9XQUtFVVA7Ci0JCXdha2VfdXBfcHJvY2VzcyhxLT5zbGVlcGVyKTsgLyogZG9lc24ndCBzbGVlcCAqLwotCQlzbXBfd21iKCk7Ci0JCXEtPnN0YXR1cyA9IC1FSURSTTsJLyogaGFuZHMtb2ZmIHEgKi8KKwkJdW5saW5rX3F1ZXVlKHNtYSwgcSk7CisJCXdha2VfdXBfc2VtX3F1ZXVlKHEsIC1FSURSTSk7CiAJfQogCiAJLyogUmVtb3ZlIHRoZSBzZW1hcGhvcmUgc2V0IGZyb20gdGhlIElEUiAqLwpAQCAtNTc1LDcgKzYyNCw3IEBACiBzdGF0aWMgaW50IHNlbWN0bF9ub2xvY2soc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBpbnQgc2VtaWQsCiAJCQkgaW50IGNtZCwgaW50IHZlcnNpb24sIHVuaW9uIHNlbXVuIGFyZykKIHsKLQlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgZXJyOwogCXN0cnVjdCBzZW1fYXJyYXkgKnNtYTsKIAogCXN3aXRjaChjbWQpIHsKQEAgLTY1Miw3ICs3MDEsNiBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gZXJyOwogb3V0X3VubG9jazoKIAlzZW1fdW5sb2NrKHNtYSk7CiAJcmV0dXJuIGVycjsKQEAgLTc1OSw3ICs4MDcsNyBAQAogCQl9CiAJCXNtYS0+c2VtX2N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAkJLyogbWF5YmUgc29tZSBxdWV1ZWQtdXAgcHJvY2Vzc2VzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyAqLwotCQl1cGRhdGVfcXVldWUoc21hKTsKKwkJdXBkYXRlX3F1ZXVlKHNtYSwgLTEpOwogCQllcnIgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtODAxLDcgKzg0OSw3IEBACiAJCWN1cnItPnNlbXBpZCA9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7CiAJCXNtYS0+c2VtX2N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAkJLyogbWF5YmUgc29tZSBxdWV1ZWQtdXAgcHJvY2Vzc2VzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyAqLwotCQl1cGRhdGVfcXVldWUoc21hKTsKKwkJdXBkYXRlX3F1ZXVlKHNtYSwgc2VtbnVtKTsKIAkJZXJyID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KQEAgLTk2MSwxNyArMTAwOSwzMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlbV91bmRvICpsb29rdXBfdW5kbyhzdHJ1Y3Qgc2VtX3VuZG9fbGlzdCAqdWxwLCBpbnQgc2VtaWQpCitzdGF0aWMgc3RydWN0IHNlbV91bmRvICpfX2xvb2t1cF91bmRvKHN0cnVjdCBzZW1fdW5kb19saXN0ICp1bHAsIGludCBzZW1pZCkKIHsKLQlzdHJ1Y3Qgc2VtX3VuZG8gKndhbGs7CisJc3RydWN0IHNlbV91bmRvICp1bjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHdhbGssICZ1bHAtPmxpc3RfcHJvYywgbGlzdF9wcm9jKSB7Ci0JCWlmICh3YWxrLT5zZW1pZCA9PSBzZW1pZCkKLQkJCXJldHVybiB3YWxrOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHVuLCAmdWxwLT5saXN0X3Byb2MsIGxpc3RfcHJvYykgeworCQlpZiAodW4tPnNlbWlkID09IHNlbWlkKQorCQkJcmV0dXJuIHVuOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBzZW1fdW5kbyAqbG9va3VwX3VuZG8oc3RydWN0IHNlbV91bmRvX2xpc3QgKnVscCwgaW50IHNlbWlkKQoreworCXN0cnVjdCBzZW1fdW5kbyAqdW47CisKKyAgCWFzc2VydF9zcGluX2xvY2tlZCgmdWxwLT5sb2NrKTsKKworCXVuID0gX19sb29rdXBfdW5kbyh1bHAsIHNlbWlkKTsKKwlpZiAodW4pIHsKKwkJbGlzdF9kZWxfcmN1KCZ1bi0+bGlzdF9wcm9jKTsKKwkJbGlzdF9hZGRfcmN1KCZ1bi0+bGlzdF9wcm9jLCAmdWxwLT5saXN0X3Byb2MpOworCX0KKwlyZXR1cm4gdW47Cit9CisKIC8qKgogICogZmluZF9hbGxvY191bmRvIC0gTG9va3VwIChhbmQgaWYgbm90IHByZXNlbnQgY3JlYXRlKSB1bmRvIGFycmF5CiAgKiBAbnM6IG5hbWVzcGFjZQpAQCAtMTE2Myw3ICsxMjI1LDggQEAKIAllcnJvciA9IHRyeV9hdG9taWNfc2Vtb3AgKHNtYSwgc29wcywgbnNvcHMsIHVuLCB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpKTsKIAlpZiAoZXJyb3IgPD0gMCkgewogCQlpZiAoYWx0ZXIgJiYgZXJyb3IgPT0gMCkKLQkJCXVwZGF0ZV9xdWV1ZSAoc21hKTsKKwkJCXVwZGF0ZV9xdWV1ZShzbWEsIChuc29wcyA9PSAxKSA/IHNvcHNbMF0uc2VtX251bSA6IC0xKTsKKwogCQlnb3RvIG91dF91bmxvY2tfZnJlZTsKIAl9CiAKQEAgLTExODEsNiArMTI0NCwxOSBAQAogCWVsc2UKIAkJbGlzdF9hZGQoJnF1ZXVlLmxpc3QsICZzbWEtPnNlbV9wZW5kaW5nKTsKIAorCWlmIChuc29wcyA9PSAxKSB7CisJCXN0cnVjdCBzZW0gKmN1cnI7CisJCWN1cnIgPSAmc21hLT5zZW1fYmFzZVtzb3BzLT5zZW1fbnVtXTsKKworCQlpZiAoYWx0ZXIpCisJCQlsaXN0X2FkZF90YWlsKCZxdWV1ZS5zaW1wbGVfbGlzdCwgJmN1cnItPnNlbV9wZW5kaW5nKTsKKwkJZWxzZQorCQkJbGlzdF9hZGQoJnF1ZXVlLnNpbXBsZV9saXN0LCAmY3Vyci0+c2VtX3BlbmRpbmcpOworCX0gZWxzZSB7CisJCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS5zaW1wbGVfbGlzdCk7CisJCXNtYS0+Y29tcGxleF9jb3VudCsrOworCX0KKwogCXF1ZXVlLnN0YXR1cyA9IC1FSU5UUjsKIAlxdWV1ZS5zbGVlcGVyID0gY3VycmVudDsKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKQEAgLTEyMjIsNyArMTI5OCw3IEBACiAJICovCiAJaWYgKHRpbWVvdXQgJiYgamlmZmllc19sZWZ0ID09IDApCiAJCWVycm9yID0gLUVBR0FJTjsKLQlsaXN0X2RlbCgmcXVldWUubGlzdCk7CisJdW5saW5rX3F1ZXVlKHNtYSwgJnF1ZXVlKTsKIAogb3V0X3VubG9ja19mcmVlOgogCXNlbV91bmxvY2soc21hKTsKQEAgLTEzMDcsNyArMTM4Myw3IEBACiAJCWlmIChJU19FUlIoc21hKSkKIAkJCWNvbnRpbnVlOwogCi0JCXVuID0gbG9va3VwX3VuZG8odWxwLCBzZW1pZCk7CisJCXVuID0gX19sb29rdXBfdW5kbyh1bHAsIHNlbWlkKTsKIAkJaWYgKHVuID09IE5VTEwpIHsKIAkJCS8qIGV4aXRfc2VtIHJhY2VkIHdpdGggSVBDX1JNSUQrc2VtZ2V0KCkgdGhhdCBjcmVhdGVkCiAJCQkgKiBleGFjdGx5IHRoZSBzYW1lIHNlbWlkLiBOb3RoaW5nIHRvIGRvLgpAQCAtMTM1MSw3ICsxNDI3LDcgQEAKIAkJfQogCQlzbWEtPnNlbV9vdGltZSA9IGdldF9zZWNvbmRzKCk7CiAJCS8qIG1heWJlIHNvbWUgcXVldWVkLXVwIHByb2Nlc3NlcyB3ZXJlIHdhaXRpbmcgZm9yIHRoaXMgKi8KLQkJdXBkYXRlX3F1ZXVlKHNtYSk7CisJCXVwZGF0ZV9xdWV1ZShzbWEsIC0xKTsKIAkJc2VtX3VubG9jayhzbWEpOwogCiAJCWNhbGxfcmN1KCZ1bi0+cmN1LCBmcmVlX3VuKTsKQEAgLTEzNjUsNyArMTQ0MSw3IEBACiAJc3RydWN0IHNlbV9hcnJheSAqc21hID0gaXQ7CiAKIAlyZXR1cm4gc2VxX3ByaW50ZihzLAotCQkJICAiJTEwZCAlMTBkICAlNG8gJTEwbHUgJTV1ICU1dSAlNXUgJTV1ICUxMGx1ICUxMGx1XG4iLAorCQkJICAiJTEwZCAlMTBkICAlNG8gJTEwdSAlNXUgJTV1ICU1dSAlNXUgJTEwbHUgJTEwbHVcbiIsCiAJCQkgIHNtYS0+c2VtX3Blcm0ua2V5LAogCQkJICBzbWEtPnNlbV9wZXJtLmlkLAogCQkJICBzbWEtPnNlbV9wZXJtLm1vZGUsCmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggMTFiZWM2Mi4uOTJmZTkyMyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwY19uYW1lc3BhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbWEuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTEwMSw2ICsxMDAsNyBAQAogdm9pZCBzaG1fZXhpdF9ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpCiB7CiAJZnJlZV9pcGNzKG5zLCAmc2htX2lkcyhucyksIGRvX3NobV9ybWlkKTsKKwlpZHJfZGVzdHJveSgmbnMtPmlkc1tJUENfU0hNX0lEU10uaXBjc19pZHIpOwogfQogI2VuZGlmCiAKQEAgLTg3OCw4ICs4NzgsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXBhdGguZGVudHJ5ID0gZGdldChzaHAtPnNobV9maWxlLT5mX3BhdGguZGVudHJ5KTsKLQlwYXRoLm1udCAgICA9IHNocC0+c2htX2ZpbGUtPmZfcGF0aC5tbnQ7CisJcGF0aCA9IHNocC0+c2htX2ZpbGUtPmZfcGF0aDsKKwlwYXRoX2dldCgmcGF0aCk7CiAJc2hwLT5zaG1fbmF0dGNoKys7CiAJc2l6ZSA9IGlfc2l6ZV9yZWFkKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzaG1fdW5sb2NrKHNocCk7CkBAIC04ODksMTMgKzg4OSwxMiBAQAogCWlmICghc2ZkKQogCQlnb3RvIG91dF9wdXRfZGVudHJ5OwogCi0JZmlsZSA9IGFsbG9jX2ZpbGUocGF0aC5tbnQsIHBhdGguZGVudHJ5LCBmX21vZGUsCi0JCQlpc19maWxlX2h1Z2VwYWdlcyhzaHAtPnNobV9maWxlKSA/CisJZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIGZfbW9kZSwKKwkJCSAgaXNfZmlsZV9odWdlcGFnZXMoc2hwLT5zaG1fZmlsZSkgPwogCQkJCSZzaG1fZmlsZV9vcGVyYXRpb25zX2h1Z2UgOgogCQkJCSZzaG1fZmlsZV9vcGVyYXRpb25zKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JaW1hX2NvdW50c19nZXQoZmlsZSk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzZmQ7CiAJZmlsZS0+Zl9tYXBwaW5nID0gc2hwLT5zaG1fZmlsZS0+Zl9tYXBwaW5nOwpAQCAtOTUwLDcgKzk0OSw3IEBACiBvdXRfZnJlZToKIAlrZnJlZShzZmQpOwogb3V0X3B1dF9kZW50cnk6Ci0JZHB1dChwYXRoLmRlbnRyeSk7CisJcGF0aF9wdXQoJnBhdGgpOwogCWdvdG8gb3V0X25hdHRjaDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2FjY3QuYyBiL2tlcm5lbC9hY2N0LmMKaW5kZXggOWE0NzE1YS4uYTY2MDVjYSAxMDA2NDQKLS0tIGEva2VybmVsL2FjY3QuYworKysgYi9rZXJuZWwvYWNjdC5jCkBAIC01MzYsNyArNTM2LDggQEAKIAlkb19kaXYoZWxhcHNlZCwgQUhaKTsKIAlhYy5hY19idGltZSA9IGdldF9zZWNvbmRzKCkgLSBlbGFwc2VkOwogCS8qIHdlIHJlYWxseSBuZWVkIHRvIGJpdGUgdGhlIGJ1bGxldCBhbmQgY2hhbmdlIGxheW91dCAqLwotCWN1cnJlbnRfdWlkX2dpZCgmYWMuYWNfdWlkLCAmYWMuYWNfZ2lkKTsKKwlhYy5hY191aWQgPSBvcmlnX2NyZWQtPnVpZDsKKwlhYy5hY19naWQgPSBvcmlnX2NyZWQtPmdpZDsKICNpZiBBQ0NUX1ZFUlNJT049PTIKIAlhYy5hY19haHogPSBBSFo7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IDI0NTFkYzYuLjRiMDViZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCW93bmVyLT5yb290ID0gTlVMTDsKIAl9CiAKLQlmb3IgKGkgPSBqID0gMDsgaSA8IHNpemU7IGkrKywgaisrKSB7CisJZm9yIChpID0gaiA9IDA7IGogPD0gc2l6ZTsgaSsrLCBqKyspIHsKIAkJc3RydWN0IGF1ZGl0X3RyZWUgKnM7CiAJCWlmICgmY2h1bmstPm93bmVyc1tqXSA9PSBwKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlpZiAoIXMpIC8qIHJlc3VsdCBvZiBlYXJsaWVyIGZhbGxiYWNrICovCiAJCQljb250aW51ZTsKIAkJZ2V0X3RyZWUocyk7Ci0JCWxpc3RfcmVwbGFjZV9pbml0KCZjaHVuay0+b3duZXJzW2ldLmxpc3QsICZuZXctPm93bmVyc1tqXS5saXN0KTsKKwkJbGlzdF9yZXBsYWNlX2luaXQoJmNodW5rLT5vd25lcnNbal0ubGlzdCwgJm5ldy0+b3duZXJzW2ldLmxpc3QpOwogCX0KIAogCWxpc3RfcmVwbGFjZV9yY3UoJmNodW5rLT5oYXNoLCAmbmV3LT5oYXNoKTsKQEAgLTM3MywxNSArMzczLDE3IEBACiAJZm9yIChuID0gMDsgbiA8IG9sZC0+Y291bnQ7IG4rKykgewogCQlpZiAob2xkLT5vd25lcnNbbl0ub3duZXIgPT0gdHJlZSkgewogCQkJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCQlwdXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CisJCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAogCWNodW5rID0gYWxsb2NfY2h1bmsob2xkLT5jb3VudCArIDEpOwotCWlmICghY2h1bmspCisJaWYgKCFjaHVuaykgeworCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAlpZiAoaW5vdGlmeV9jbG9uZV93YXRjaCgmb2xkLT53YXRjaCwgJmNodW5rLT53YXRjaCkgPCAwKSB7CkBAIC00MjUsNyArNDI3LDggQEAKIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAlpbm90aWZ5X2V2aWN0X3dhdGNoKCZvbGQtPndhdGNoKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJcHV0X2lub3RpZnlfd2F0Y2goJm9sZC0+d2F0Y2gpOyAvKiBwYWlyIHRvIGlub3RpZnlfZmluZF93YXRjaCAqLworCXB1dF9pbm90aWZ5X3dhdGNoKCZvbGQtPndhdGNoKTsgLyogYW5kIGtpbGwgaXQgKi8KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggMjY3ZTQ4NC4uZmMwZjkyOCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0yNTAsNyArMjUwLDYgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDRcMDAyXDAwNlwwMDYiWyh4KSZPX0FDQ01PREVdKQogc3RhdGljIGlubGluZSBpbnQgb3Blbl9hcmcoaW50IGZsYWdzLCBpbnQgbWFzaykKIHsKIAlpbnQgbiA9IEFDQ19NT0RFKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ib3VuZHMuYyBiL2tlcm5lbC9ib3VuZHMuYwppbmRleCAzYzUzMDEzLi45OGE1MWYyIDEwMDY0NAotLS0gYS9rZXJuZWwvYm91bmRzLmMKKysrIGIva2VybmVsL2JvdW5kcy5jCkBAIC0xMiw3ICsxMiw3IEBACiAKIHZvaWQgZm9vKHZvaWQpCiB7Ci0JLyogVGhlIGVudW0gY29uc3RhbnRzIHRvIHB1dCBpbnRvIGluY2x1ZGUvbGludXgvYm91bmRzLmggKi8KKwkvKiBUaGUgZW51bSBjb25zdGFudHMgdG8gcHV0IGludG8gaW5jbHVkZS9nZW5lcmF0ZWQvYm91bmRzLmggKi8KIAlERUZJTkUoTlJfUEFHRUZMQUdTLCBfX05SX1BBR0VGTEFHUyk7CiAJREVGSU5FKE1BWF9OUl9aT05FUywgX19NQVhfTlJfWk9ORVMpOwogCS8qIEVuZCBvZiBjb25zdGFudHMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCA3YzRlMjcxLi4xYzhkZGQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0yMDksOSArMjA5LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY3B1X2hvdHBsdWdfYmVnaW4oKTsKKwlzZXRfY3B1X2FjdGl2ZShjcHUsIGZhbHNlKTsKIAllcnIgPSBfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9ET1dOX1BSRVBBUkUgfCBtb2QsCiAJCQkJCWhjcHUsIC0xLCAmbnJfY2FsbHMpOwogCWlmIChlcnIgPT0gTk9USUZZX0JBRCkgeworCQlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOworCiAJCW5yX2NhbGxzLS07CiAJCV9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fRkFJTEVEIHwgbW9kLAogCQkJCQkgIGhjcHUsIG5yX2NhbGxzLCBOVUxMKTsKQEAgLTIyMywxMSArMjI2LDExIEBACiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBhcmUgbm90IHJ1bm5hYmxlIG9uIGR5aW5nIGNwdSAqLwogCWNwdW1hc2tfY29weShvbGRfYWxsb3dlZCwgJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCk7Ci0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwKLQkJCSAgICAgY3B1bWFza19vZihjcHVtYXNrX2FueV9idXQoY3B1X29ubGluZV9tYXNrLCBjcHUpKSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1X2FjdGl2ZV9tYXNrKTsKIAogCWVyciA9IF9fc3RvcF9tYWNoaW5lKHRha2VfY3B1X2Rvd24sICZ0Y2RfcGFyYW0sIGNwdW1hc2tfb2YoY3B1KSk7CiAJaWYgKGVycikgeworCQlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwogCQkvKiBDUFUgZGlkbid0IGRpZTogdGVsbCBldmVyeW9uZS4gIENhbid0IGNvbXBsYWluLiAqLwogCQlpZiAocmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fRkFJTEVEIHwgbW9kLAogCQkJCQkgICAgaGNwdSkgPT0gTk9USUZZX0JBRCkKQEAgLTI3OCwyMyArMjgxLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgYWxsIGNwdXMgZGlkIHRoZSByZXNjaGVkdWxlIGFuZCBhcmUgbm90Ci0JICogdXNpbmcgc3RhbGUgdmVyc2lvbiBvZiB0aGUgY3B1X2FjdGl2ZV9tYXNrLgotCSAqIFRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBiZWN1YXNlIHN0b3BfbWFjaGluZSgpCi0JICogdGhhdCB3ZSBydW4gZG93biB0aGUgbGluZSBhbHJlYWR5IHByb3ZpZGVzIHRoZSByZXF1aXJlZAotCSAqIHN5bmNocm9uaXphdGlvbi4gQnV0IGl0J3MgcmVhbGx5IGEgc2lkZSBlZmZlY3QgYW5kIHdlIGRvIG5vdAotCSAqIHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBpbm5hcmRzIG9mIHRoZSBzdG9wX21hY2hpbmUgaGVyZS4KLQkgKi8KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCiAJZXJyID0gX2NwdV9kb3duKGNwdSwgMCk7CiAKLQlpZiAoY3B1X29ubGluZShjcHUpKQotCQlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwotCiBvdXQ6CiAJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKIAlzdG9wX21hY2hpbmVfZGVzdHJveSgpOwpAQCAtMzgzLDEwICszNzEsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCWNwdV9tYXBzX3VwZGF0ZV9iZWdpbigpOwogCWZpcnN0X2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKLQkvKiBXZSB0YWtlIGRvd24gYWxsIG9mIHRoZSBub24tYm9vdCBDUFVzIGluIG9uZSBzaG90IHRvIGF2b2lkIHJhY2VzCisJLyoKKwkgKiBXZSB0YWtlIGRvd24gYWxsIG9mIHRoZSBub24tYm9vdCBDUFVzIGluIG9uZSBzaG90IHRvIGF2b2lkIHJhY2VzCiAJICogd2l0aCB0aGUgdXNlcnNwYWNlIHRyeWluZyB0byB1c2UgdGhlIENQVSBob3RwbHVnIGF0IHRoZSBzYW1lIHRpbWUKIAkgKi8KIAljcHVtYXNrX2NsZWFyKGZyb3plbl9jcHVzKTsKKwogCXByaW50aygiRGlzYWJsaW5nIG5vbi1ib290IENQVXMgLi4uXG4iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGZpcnN0X2NwdSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCAzY2YyMTgzLi5iYTQwMWZhIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC03MzcsNyArNzM3LDcgQEAKIHsKIH0KIAotc3RhdGljIGludCBnZW5lcmF0ZV9zY2hlZF9kb21haW5zKHN0cnVjdCBjcHVtYXNrICoqZG9tYWlucywKK3N0YXRpYyBpbnQgZ2VuZXJhdGVfc2NoZWRfZG9tYWlucyhjcHVtYXNrX3Zhcl90ICoqZG9tYWlucywKIAkJCXN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqKmF0dHJpYnV0ZXMpCiB7CiAJKmRvbWFpbnMgPSBOVUxMOwpAQCAtODcyLDcgKzg3Miw3IEBACiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKIAotCQlpZiAoIWNwdW1hc2tfc3Vic2V0KHRyaWFsY3MtPmNwdXNfYWxsb3dlZCwgY3B1X29ubGluZV9tYXNrKSkKKwkJaWYgKCFjcHVtYXNrX3N1YnNldCh0cmlhbGNzLT5jcHVzX2FsbG93ZWQsIGNwdV9hY3RpdmVfbWFzaykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dmFsID0gdmFsaWRhdGVfY2hhbmdlKGNzLCB0cmlhbGNzKTsKQEAgLTIwMTAsNyArMjAxMCw3IEBACiAJCX0KIAogCQkvKiBDb250aW51ZSBwYXN0IGNwdXNldHMgd2l0aCBhbGwgY3B1cywgbWVtcyBvbmxpbmUgKi8KLQkJaWYgKGNwdW1hc2tfc3Vic2V0KGNwLT5jcHVzX2FsbG93ZWQsIGNwdV9vbmxpbmVfbWFzaykgJiYKKwkJaWYgKGNwdW1hc2tfc3Vic2V0KGNwLT5jcHVzX2FsbG93ZWQsIGNwdV9hY3RpdmVfbWFzaykgJiYKIAkJICAgIG5vZGVzX3N1YnNldChjcC0+bWVtc19hbGxvd2VkLCBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSkpCiAJCQljb250aW51ZTsKIApAQCAtMjAxOSw3ICsyMDE5LDcgQEAKIAkJLyogUmVtb3ZlIG9mZmxpbmUgY3B1cyBhbmQgbWVtcyBmcm9tIHRoaXMgY3B1c2V0LiAqLwogCQltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJCWNwdW1hc2tfYW5kKGNwLT5jcHVzX2FsbG93ZWQsIGNwLT5jcHVzX2FsbG93ZWQsCi0JCQkgICAgY3B1X29ubGluZV9tYXNrKTsKKwkJCSAgICBjcHVfYWN0aXZlX21hc2spOwogCQlub2Rlc19hbmQoY3AtPm1lbXNfYWxsb3dlZCwgY3AtPm1lbXNfYWxsb3dlZCwKIAkJCQkJCW5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldKTsKIAkJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CkBAIC0yMDU3LDggKzIwNTcsMTAgQEAKIAlzd2l0Y2ggKHBoYXNlKSB7CiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46Ci0JY2FzZSBDUFVfREVBRDoKLQljYXNlIENQVV9ERUFEX0ZST1pFTjoKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTIwNjcsNyArMjA2OSw3IEBACiAKIAljZ3JvdXBfbG9jaygpOwogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKLQljcHVtYXNrX2NvcHkodG9wX2NwdXNldC5jcHVzX2FsbG93ZWQsIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jb3B5KHRvcF9jcHVzZXQuY3B1c19hbGxvd2VkLCBjcHVfYWN0aXZlX21hc2spOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCXNjYW5fZm9yX2VtcHR5X2NwdXNldHMoJnRvcF9jcHVzZXQpOwogCW5kb21zID0gZ2VuZXJhdGVfc2NoZWRfZG9tYWlucygmZG9tcywgJmF0dHIpOwpAQCAtMjExNCw3ICsyMTE2LDcgQEAKIAogdm9pZCBfX2luaXQgY3B1c2V0X2luaXRfc21wKHZvaWQpCiB7Ci0JY3B1bWFza19jb3B5KHRvcF9jcHVzZXQuY3B1c19hbGxvd2VkLCBjcHVfb25saW5lX21hc2spOworCWNwdW1hc2tfY29weSh0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCwgY3B1X2FjdGl2ZV9tYXNrKTsKIAl0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCA9IG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldOwogCiAJaG90Y3B1X25vdGlmaWVyKGNwdXNldF90cmFja19vbmxpbmVfY3B1cywgMCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA2ZjUwZWY1Li41NDY3NzRhIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTY4LDEwICs2OCwxMCBAQAogCQlkZXRhY2hfcGlkKHAsIFBJRFRZUEVfU0lEKTsKIAogCQlsaXN0X2RlbF9yY3UoJnAtPnRhc2tzKTsKKwkJbGlzdF9kZWxfaW5pdCgmcC0+c2libGluZyk7CiAJCV9fZ2V0X2NwdV92YXIocHJvY2Vzc19jb3VudHMpLS07CiAJfQogCWxpc3RfZGVsX3JjdSgmcC0+dGhyZWFkX2dyb3VwKTsKLQlsaXN0X2RlbF9pbml0KCZwLT5zaWJsaW5nKTsKIH0KIAogLyoKQEAgLTczNiwxMiArNzM2LDkgQEAKIC8qCiAqIEFueSB0aGF0IG5lZWQgdG8gYmUgcmVsZWFzZV90YXNrJ2QgYXJlIHB1dCBvbiB0aGUgQGRlYWQgbGlzdC4KICAqLwotc3RhdGljIHZvaWQgcmVwYXJlbnRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCitzdGF0aWMgdm9pZCByZXBhcmVudF9sZWFkZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkZWFkKQogewotCWlmIChwLT5wZGVhdGhfc2lnbmFsKQotCQlncm91cF9zZW5kX3NpZ19pbmZvKHAtPnBkZWF0aF9zaWduYWwsIFNFTkRfU0lHX05PSU5GTywgcCk7Ci0KIAlsaXN0X21vdmVfdGFpbCgmcC0+c2libGluZywgJnAtPnJlYWxfcGFyZW50LT5jaGlsZHJlbik7CiAKIAlpZiAodGFza19kZXRhY2hlZChwKSkKQEAgLTc4MCwxMiArNzc3LDE4IEBACiAJcmVhcGVyID0gZmluZF9uZXdfcmVhcGVyKGZhdGhlcik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmZhdGhlci0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKLQkJcC0+cmVhbF9wYXJlbnQgPSByZWFwZXI7Ci0JCWlmIChwLT5wYXJlbnQgPT0gZmF0aGVyKSB7Ci0JCQlCVUdfT04odGFza19wdHJhY2UocCkpOwotCQkJcC0+cGFyZW50ID0gcC0+cmVhbF9wYXJlbnQ7Ci0JCX0KLQkJcmVwYXJlbnRfdGhyZWFkKGZhdGhlciwgcCwgJmRlYWRfY2hpbGRyZW4pOworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBwOworCQlkbyB7CisJCQl0LT5yZWFsX3BhcmVudCA9IHJlYXBlcjsKKwkJCWlmICh0LT5wYXJlbnQgPT0gZmF0aGVyKSB7CisJCQkJQlVHX09OKHRhc2tfcHRyYWNlKHQpKTsKKwkJCQl0LT5wYXJlbnQgPSB0LT5yZWFsX3BhcmVudDsKKwkJCX0KKwkJCWlmICh0LT5wZGVhdGhfc2lnbmFsKQorCQkJCWdyb3VwX3NlbmRfc2lnX2luZm8odC0+cGRlYXRoX3NpZ25hbCwKKwkJCQkJCSAgICBTRU5EX1NJR19OT0lORk8sIHQpOworCQl9IHdoaWxlX2VhY2hfdGhyZWFkKHAsIHQpOworCQlyZXBhcmVudF9sZWFkZXIoZmF0aGVyLCBwLCAmZGVhZF9jaGlsZHJlbik7CiAJfQogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCkBAIC05MzMsNyArOTM2LDcgQEAKIAkgKiBhbiBleGl0aW5nIHRhc2sgY2xlYW5pbmcgdXAgdGhlIHJvYnVzdCBwaSBmdXRleGVzLgogCSAqLwogCXNtcF9tYigpOwotCXNwaW5fdW5sb2NrX3dhaXQoJnRzay0+cGlfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX3dhaXQoJnRzay0+cGlfbG9jayk7CiAKIAlpZiAodW5saWtlbHkoaW5fYXRvbWljKCkpKQogCQlwcmludGsoS0VSTl9JTkZPICJub3RlOiAlc1slZF0gZXhpdGVkIHdpdGggcHJlZW1wdF9jb3VudCAlZFxuIiwKQEAgLTE1NTEsMTQgKzE1NTQsOSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnRzay0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKLQkJLyoKLQkJICogRG8gbm90IGNvbnNpZGVyIGRldGFjaGVkIHRocmVhZHMuCi0JCSAqLwotCQlpZiAoIXRhc2tfZGV0YWNoZWQocCkpIHsKLQkJCWludCByZXQgPSB3YWl0X2NvbnNpZGVyX3Rhc2sod28sIDAsIHApOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9CisJCWludCByZXQgPSB3YWl0X2NvbnNpZGVyX3Rhc2sod28sIDAsIHApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDE0MTVkYzQuLjViMjk1OWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtOTM5LDkgKzkzOSw5IEBACiAKIHN0YXRpYyB2b2lkIHJ0X211dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJnAtPnBpX2xvY2spOworCXJhd19zcGluX2xvY2tfaW5pdCgmcC0+cGlfbG9jayk7CiAjaWZkZWYgQ09ORklHX1JUX01VVEVYRVMKLQlwbGlzdF9oZWFkX2luaXQoJnAtPnBpX3dhaXRlcnMsICZwLT5waV9sb2NrKTsKKwlwbGlzdF9oZWFkX2luaXRfcmF3KCZwLT5waV93YWl0ZXJzLCAmcC0+cGlfbG9jayk7CiAJcC0+cGlfYmxvY2tlZF9vbiA9IE5VTEw7CiAjZW5kaWYKIH0KQEAgLTExMjcsNiArMTEyNywxMCBAQAogI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCiAJcC0+YmxvY2tlZF9vbiA9IE5VTEw7IC8qIG5vdCBibG9ja2VkIHlldCAqLwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKwlwLT5tZW1jZ19iYXRjaC5kb19iYXRjaCA9IDA7CisJcC0+bWVtY2dfYmF0Y2gubWVtY2cgPSBOVUxMOworI2VuZGlmCiAKIAlwLT5idHMgPSBOVUxMOwogCkBAIC0xMjA2LDkgKzEyMTAsMTAgQEAKIAkJcC0+c2FzX3NzX3NwID0gcC0+c2FzX3NzX3NpemUgPSAwOwogCiAJLyoKLQkgKiBTeXNjYWxsIHRyYWNpbmcgc2hvdWxkIGJlIHR1cm5lZCBvZmYgaW4gdGhlIGNoaWxkIHJlZ2FyZGxlc3MKLQkgKiBvZiBDTE9ORV9QVFJBQ0UuCisJICogU3lzY2FsbCB0cmFjaW5nIGFuZCBzdGVwcGluZyBzaG91bGQgYmUgdHVybmVkIG9mZiBpbiB0aGUKKwkgKiBjaGlsZCByZWdhcmRsZXNzIG9mIENMT05FX1BUUkFDRS4KIAkgKi8KKwl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAocCk7CiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9TWVNDQUxMX1RSQUNFKTsKICNpZmRlZiBUSUZfU1lTQ0FMTF9FTVUKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX1NZU0NBTExfRU1VKTsKQEAgLTEyODYsNyArMTI5MSw2IEBACiAJfQogCiAJaWYgKGxpa2VseShwLT5waWQpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJnAtPnNpYmxpbmcsICZwLT5yZWFsX3BhcmVudC0+Y2hpbGRyZW4pOwogCQl0cmFjZWhvb2tfZmluaXNoX2Nsb25lKHAsIGNsb25lX2ZsYWdzLCB0cmFjZSk7CiAKIAkJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpIHsKQEAgLTEyOTgsNiArMTMwMiw3IEBACiAJCQlwLT5zaWduYWwtPnR0eSA9IHR0eV9rcmVmX2dldChjdXJyZW50LT5zaWduYWwtPnR0eSk7CiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwgdGFza19wZ3JwKGN1cnJlbnQpKTsKIAkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHRhc2tfc2Vzc2lvbihjdXJyZW50KSk7CisJCQlsaXN0X2FkZF90YWlsKCZwLT5zaWJsaW5nLCAmcC0+cmVhbF9wYXJlbnQtPmNoaWxkcmVuKTsKIAkJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CiAJCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKSsrOwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IGZiNjVlODIuLjhlM2MzZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0zMDQsOCArMzA0LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpCiB7Ci0JaW50IHJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZyl1YWRkciwKLQkJCQkgMSwgMSwgMCwgTlVMTCwgTlVMTCk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlpbnQgcmV0OworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCAodW5zaWduZWQgbG9uZyl1YWRkciwKKwkJCSAgICAgMSwgMSwgMCwgTlVMTCwgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwogCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIApAQCAtMzk3LDkgKzQwMyw5IEBACiAJICogYW5kIGhhcyBjbGVhbmVkIHVwIHRoZSBwaV9zdGF0ZSBhbHJlYWR5CiAJICovCiAJaWYgKHBpX3N0YXRlLT5vd25lcikgewotCQlzcGluX2xvY2tfaXJxKCZwaV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmcGlfc3RhdGUtPmxpc3QpOwotCQlzcGluX3VubG9ja19pcnEoJnBpX3N0YXRlLT5vd25lci0+cGlfbG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJnBpX3N0YXRlLT5vd25lci0+cGlfbG9jayk7CiAKIAkJcnRfbXV0ZXhfcHJveHlfdW5sb2NrKCZwaV9zdGF0ZS0+cGlfbXV0ZXgsIHBpX3N0YXRlLT5vd25lcik7CiAJfQpAQCAtNDY0LDE4ICs0NzAsMTggQEAKIAkgKiBwaV9zdGF0ZV9saXN0IGFueW1vcmUsIGJ1dCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwKIAkgKiB2ZXJzdXMgd2FpdGVycyB1bnF1ZXVlaW5nIHRoZW1zZWx2ZXM6CiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmY3Vyci0+cGlfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJmN1cnItPnBpX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCiAJCW5leHQgPSBoZWFkLT5uZXh0OwogCQlwaV9zdGF0ZSA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGZ1dGV4X3BpX3N0YXRlLCBsaXN0KTsKIAkJa2V5ID0gcGlfc3RhdGUtPmtleTsKIAkJaGIgPSBoYXNoX2Z1dGV4KCZrZXkpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdXJyLT5waV9sb2NrKTsKIAogCQlzcGluX2xvY2soJmhiLT5sb2NrKTsKIAotCQlzcGluX2xvY2tfaXJxKCZjdXJyLT5waV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pcnEoJmN1cnItPnBpX2xvY2spOwogCQkvKgogCQkgKiBXZSBkcm9wcGVkIHRoZSBwaS1sb2NrLCBzbyByZS1jaGVjayB3aGV0aGVyIHRoaXMKIAkJICogdGFzayBzdGlsbCBvd25zIHRoZSBQSS1zdGF0ZToKQEAgLTQ4OSwxNSArNDk1LDE1IEBACiAJCVdBUk5fT04obGlzdF9lbXB0eSgmcGlfc3RhdGUtPmxpc3QpKTsKIAkJbGlzdF9kZWxfaW5pdCgmcGlfc3RhdGUtPmxpc3QpOwogCQlwaV9zdGF0ZS0+b3duZXIgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdXJyLT5waV9sb2NrKTsKIAogCQlydF9tdXRleF91bmxvY2soJnBpX3N0YXRlLT5waV9tdXRleCk7CiAKIAkJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKIAotCQlzcGluX2xvY2tfaXJxKCZjdXJyLT5waV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pcnEoJmN1cnItPnBpX2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC01NTIsNyArNTU4LDcgQEAKIAkgKiBjaGFuZ2Ugb2YgdGhlIHRhc2sgZmxhZ3MsIHdlIGRvIHRoaXMgcHJvdGVjdGVkIGJ5CiAJICogcC0+cGlfbG9jazoKIAkgKi8KLQlzcGluX2xvY2tfaXJxKCZwLT5waV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmcC0+cGlfbG9jayk7CiAJaWYgKHVubGlrZWx5KHAtPmZsYWdzICYgUEZfRVhJVElORykpIHsKIAkJLyoKIAkJICogVGhlIHRhc2sgaXMgb24gdGhlIHdheSBvdXQuIFdoZW4gUEZfRVhJVFBJRE9ORSBpcwpAQCAtNTYxLDcgKzU2Nyw3IEBACiAJCSAqLwogCQlpbnQgcmV0ID0gKHAtPmZsYWdzICYgUEZfRVhJVFBJRE9ORSkgPyAtRVNSQ0ggOiAtRUFHQUlOOwogCi0JCXNwaW5fdW5sb2NrX2lycSgmcC0+cGlfbG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJnAtPnBpX2xvY2spOwogCQlwdXRfdGFza19zdHJ1Y3QocCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNTgwLDcgKzU4Niw3IEBACiAJV0FSTl9PTighbGlzdF9lbXB0eSgmcGlfc3RhdGUtPmxpc3QpKTsKIAlsaXN0X2FkZCgmcGlfc3RhdGUtPmxpc3QsICZwLT5waV9zdGF0ZV9saXN0KTsKIAlwaV9zdGF0ZS0+b3duZXIgPSBwOwotCXNwaW5fdW5sb2NrX2lycSgmcC0+cGlfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmcC0+cGlfbG9jayk7CiAKIAlwdXRfdGFza19zdHJ1Y3QocCk7CiAKQEAgLTc1NCw3ICs3NjAsNyBAQAogCWlmICghcGlfc3RhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrKCZwaV9zdGF0ZS0+cGlfbXV0ZXgud2FpdF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZwaV9zdGF0ZS0+cGlfbXV0ZXgud2FpdF9sb2NrKTsKIAluZXdfb3duZXIgPSBydF9tdXRleF9uZXh0X293bmVyKCZwaV9zdGF0ZS0+cGlfbXV0ZXgpOwogCiAJLyoKQEAgLTc4MywyMyArNzg5LDIzIEBACiAJCWVsc2UgaWYgKGN1cnZhbCAhPSB1dmFsKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKHJldCkgewotCQkJc3Bpbl91bmxvY2soJnBpX3N0YXRlLT5waV9tdXRleC53YWl0X2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZwaV9zdGF0ZS0+cGlfbXV0ZXgud2FpdF9sb2NrKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZwaV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZwaV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOwogCVdBUk5fT04obGlzdF9lbXB0eSgmcGlfc3RhdGUtPmxpc3QpKTsKIAlsaXN0X2RlbF9pbml0KCZwaV9zdGF0ZS0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJnBpX3N0YXRlLT5vd25lci0+cGlfbG9jayk7CiAKLQlzcGluX2xvY2tfaXJxKCZuZXdfb3duZXItPnBpX2xvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZuZXdfb3duZXItPnBpX2xvY2spOwogCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBpX3N0YXRlLT5saXN0KSk7CiAJbGlzdF9hZGQoJnBpX3N0YXRlLT5saXN0LCAmbmV3X293bmVyLT5waV9zdGF0ZV9saXN0KTsKIAlwaV9zdGF0ZS0+b3duZXIgPSBuZXdfb3duZXI7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZuZXdfb3duZXItPnBpX2xvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJm5ld19vd25lci0+cGlfbG9jayk7CiAKLQlzcGluX3VubG9jaygmcGlfc3RhdGUtPnBpX211dGV4LndhaXRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZwaV9zdGF0ZS0+cGlfbXV0ZXgud2FpdF9sb2NrKTsKIAlydF9tdXRleF91bmxvY2soJnBpX3N0YXRlLT5waV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMDQsNyArMTAxMCw3IEBACiAJCXBsaXN0X2FkZCgmcS0+bGlzdCwgJmhiMi0+Y2hhaW4pOwogCQlxLT5sb2NrX3B0ciA9ICZoYjItPmxvY2s7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BJX0xJU1QKLQkJcS0+bGlzdC5wbGlzdC5sb2NrID0gJmhiMi0+bG9jazsKKwkJcS0+bGlzdC5wbGlzdC5zcGlubG9jayA9ICZoYjItPmxvY2s7CiAjZW5kaWYKIAl9CiAJZ2V0X2Z1dGV4X2tleV9yZWZzKGtleTIpOwpAQCAtMTA0MCw3ICsxMDQ2LDcgQEAKIAogCXEtPmxvY2tfcHRyID0gJmhiLT5sb2NrOwogI2lmZGVmIENPTkZJR19ERUJVR19QSV9MSVNUCi0JcS0+bGlzdC5wbGlzdC5sb2NrID0gJmhiLT5sb2NrOworCXEtPmxpc3QucGxpc3Quc3BpbmxvY2sgPSAmaGItPmxvY2s7CiAjZW5kaWYKIAogCXdha2VfdXBfc3RhdGUocS0+dGFzaywgVEFTS19OT1JNQUwpOwpAQCAtMTM4OCw3ICsxMzk0LDcgQEAKIAogCXBsaXN0X25vZGVfaW5pdCgmcS0+bGlzdCwgcHJpbyk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BJX0xJU1QKLQlxLT5saXN0LnBsaXN0LmxvY2sgPSAmaGItPmxvY2s7CisJcS0+bGlzdC5wbGlzdC5zcGlubG9jayA9ICZoYi0+bG9jazsKICNlbmRpZgogCXBsaXN0X2FkZCgmcS0+bGlzdCwgJmhiLT5jaGFpbik7CiAJcS0+dGFzayA9IGN1cnJlbnQ7CkBAIC0xNTIzLDE4ICsxNTI5LDE4IEBACiAJICogaXRzZWxmLgogCSAqLwogCWlmIChwaV9zdGF0ZS0+b3duZXIgIT0gTlVMTCkgewotCQlzcGluX2xvY2tfaXJxKCZwaV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKIAkJV0FSTl9PTihsaXN0X2VtcHR5KCZwaV9zdGF0ZS0+bGlzdCkpOwogCQlsaXN0X2RlbF9pbml0KCZwaV9zdGF0ZS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKIAl9CiAKIAlwaV9zdGF0ZS0+b3duZXIgPSBuZXdvd25lcjsKIAotCXNwaW5fbG9ja19pcnEoJm5ld293bmVyLT5waV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmbmV3b3duZXItPnBpX2xvY2spOwogCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBpX3N0YXRlLT5saXN0KSk7CiAJbGlzdF9hZGQoJnBpX3N0YXRlLT5saXN0LCAmbmV3b3duZXItPnBpX3N0YXRlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmbmV3b3duZXItPnBpX2xvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJm5ld293bmVyLT5waV9sb2NrKTsKIAlyZXR1cm4gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCBlZGU1Mjc3Li4wMDg2NjI4IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTEyNywxMSArMTI3LDExIEBACiAJZm9yICg7OykgewogCQliYXNlID0gdGltZXItPmJhc2U7CiAJCWlmIChsaWtlbHkoYmFzZSAhPSBOVUxMKSkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCAqZmxhZ3MpOworCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgKmZsYWdzKTsKIAkJCWlmIChsaWtlbHkoYmFzZSA9PSB0aW1lci0+YmFzZSkpCiAJCQkJcmV0dXJuIGJhc2U7CiAJCQkvKiBUaGUgdGltZXIgaGFzIG1pZ3JhdGVkIHRvIGFub3RoZXIgQ1BVOiAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+Y3B1X2Jhc2UtPmxvY2ssICpmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+Y3B1X2Jhc2UtPmxvY2ssICpmbGFncyk7CiAJCX0KIAkJY3B1X3JlbGF4KCk7CiAJfQpAQCAtMjA4LDEzICsyMDgsMTMgQEAKIAogCQkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gbG9ja190aW1lcl9iYXNlKCkgKi8KIAkJdGltZXItPmJhc2UgPSBOVUxMOwotCQlzcGluX3VubG9jaygmYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOwotCQlzcGluX2xvY2soJm5ld19iYXNlLT5jcHVfYmFzZS0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZuZXdfYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOwogCiAJCWlmIChjcHUgIT0gdGhpc19jcHUgJiYgaHJ0aW1lcl9jaGVja190YXJnZXQodGltZXIsIG5ld19iYXNlKSkgewogCQkJY3B1ID0gdGhpc19jcHU7Ci0JCQlzcGluX3VubG9jaygmbmV3X2Jhc2UtPmNwdV9iYXNlLT5sb2NrKTsKLQkJCXNwaW5fbG9jaygmYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZuZXdfYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOworCQkJcmF3X3NwaW5fbG9jaygmYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOwogCQkJdGltZXItPmJhc2UgPSBiYXNlOwogCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtMjMwLDcgKzIzMCw3IEBACiB7CiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSA9IHRpbWVyLT5iYXNlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCAqZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+Y3B1X2Jhc2UtPmxvY2ssICpmbGFncyk7CiAKIAlyZXR1cm4gYmFzZTsKIH0KQEAgLTU1Nyw3ICs1NTcsNyBAQAogc3RhdGljIGludCBocnRpbWVyX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCiAJCQkgICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UpCiB7Ci0Ja3RpbWVfdCAqZXhwaXJlc19uZXh0ID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcykuZXhwaXJlc19uZXh0OworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCWt0aW1lX3QgZXhwaXJlcyA9IGt0aW1lX3N1YihocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKSwgYmFzZS0+b2Zmc2V0KTsKIAlpbnQgcmVzOwogCkBAIC01ODIsNyArNTgyLDE2IEBACiAJaWYgKGV4cGlyZXMudHY2NCA8IDApCiAJCXJldHVybiAtRVRJTUU7CiAKLQlpZiAoZXhwaXJlcy50djY0ID49IGV4cGlyZXNfbmV4dC0+dHY2NCkKKwlpZiAoZXhwaXJlcy50djY0ID49IGNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIGEgaGFuZyB3YXMgZGV0ZWN0ZWQgaW4gdGhlIGxhc3QgdGltZXIgaW50ZXJydXB0IHRoZW4gd2UKKwkgKiBkbyBub3Qgc2NoZWR1bGUgYSB0aW1lciB3aGljaCBpcyBlYXJsaWVyIHRoYW4gdGhlIGV4cGlyeQorCSAqIHdoaWNoIHdlIGVuZm9yY2VkIGluIHRoZSBoYW5nIGRldGVjdGlvbi4gV2Ugd2FudCB0aGUgc3lzdGVtCisJICogdG8gbWFrZSBwcm9ncmVzcy4KKwkgKi8KKwlpZiAoY3B1X2Jhc2UtPmhhbmdfZGV0ZWN0ZWQpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTU5MCw3ICs1OTksNyBAQAogCSAqLwogCXJlcyA9IHRpY2tfcHJvZ3JhbV9ldmVudChleHBpcmVzLCAwKTsKIAlpZiAoIUlTX0VSUl9WQUxVRShyZXMpKQotCQkqZXhwaXJlc19uZXh0ID0gZXhwaXJlczsKKwkJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtNjE5LDEyICs2MjgsMTIgQEAKIAliYXNlID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CiAKIAkvKiBBZGp1c3QgQ0xPQ0tfUkVBTFRJTUUgb2Zmc2V0ICovCi0Jc3Bpbl9sb2NrKCZiYXNlLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiYXNlLT5sb2NrKTsKIAliYXNlLT5jbG9ja19iYXNlW0NMT0NLX1JFQUxUSU1FXS5vZmZzZXQgPQogCQl0aW1lc3BlY190b19rdGltZShyZWFsdGltZV9vZmZzZXQpOwogCiAJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSwgMCk7Ci0Jc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmYmFzZS0+bG9jayk7CiB9CiAKIC8qCkBAIC02ODUsOSArNjk0LDkgQEAKIHsKIAlpZiAoYmFzZS0+Y3B1X2Jhc2UtPmhyZXNfYWN0aXZlICYmIGhydGltZXJfcmVwcm9ncmFtKHRpbWVyLCBiYXNlKSkgewogCQlpZiAod2FrZXVwKSB7Ci0JCQlzcGluX3VubG9jaygmYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZiYXNlLT5jcHVfYmFzZS0+bG9jayk7CiAJCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihIUlRJTUVSX1NPRlRJUlEpOwotCQkJc3Bpbl9sb2NrKCZiYXNlLT5jcHVfYmFzZS0+bG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrKCZiYXNlLT5jcHVfYmFzZS0+bG9jayk7CiAJCX0gZWxzZQogCQkJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihIUlRJTUVSX1NPRlRJUlEpOwogCkBAIC03NDcsMTcgKzc1NiwzMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0hJR0hfUkVTX1RJTUVSUyAqLwogCi0jaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCi12b2lkIF9fdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHZvaWQgKmFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CisjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCiAJaWYgKHRpbWVyLT5zdGFydF9zaXRlKQogCQlyZXR1cm47Ci0KLQl0aW1lci0+c3RhcnRfc2l0ZSA9IGFkZHI7CisJdGltZXItPnN0YXJ0X3NpdGUgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CiAJbWVtY3B5KHRpbWVyLT5zdGFydF9jb21tLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKIAl0aW1lci0+c3RhcnRfcGlkID0gY3VycmVudC0+cGlkOwotfQogI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGF0c19ocnRpbWVyX2NsZWFyX3N0YXJ0X2luZm8oc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUworCXRpbWVyLT5zdGFydF9zaXRlID0gTlVMTDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfYWNjb3VudF9ocnRpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKyNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKwlpZiAobGlrZWx5KCF0aW1lcl9zdGF0c19hY3RpdmUpKQorCQlyZXR1cm47CisJdGltZXJfc3RhdHNfdXBkYXRlX3N0YXRzKHRpbWVyLCB0aW1lci0+c3RhcnRfcGlkLCB0aW1lci0+c3RhcnRfc2l0ZSwKKwkJCQkgdGltZXItPmZ1bmN0aW9uLCB0aW1lci0+c3RhcnRfY29tbSwgMCk7CisjZW5kaWYKK30KIAogLyoKICAqIENvdW50ZXJwYXJ0IHRvIGxvY2tfaHJ0aW1lcl9iYXNlIGFib3ZlOgpAQCAtNzY1LDcgKzc5MCw3IEBACiBzdGF0aWMgaW5saW5lCiB2b2lkIHVubG9ja19ocnRpbWVyX2Jhc2UoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyLCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lci0+YmFzZS0+Y3B1X2Jhc2UtPmxvY2ssICpmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyLT5iYXNlLT5jcHVfYmFzZS0+bG9jaywgKmZsYWdzKTsKIH0KIAogLyoqCkBAIC0xMDk4LDcgKzExMjMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2Jhc2UtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWhydGltZXJfaHJlc19hY3RpdmUoKSkgewogCQlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKywgYmFzZSsrKSB7CkBAIC0xMTE1LDcgKzExNDAsNyBAQAogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2Jhc2UtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2Jhc2UtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChtaW5kZWx0YS50djY0IDwgMCkKIAkJbWluZGVsdGEudHY2NCA9IDA7CkBAIC0xMTk3LDExICsxMjIyLDExIEBACiAJICogdGhleSBnZXQgbWlncmF0ZWQgdG8gYW5vdGhlciBjcHUsIHRoZXJlZm9yZSBpdHMgc2FmZSB0byB1bmxvY2sKIAkgKiB0aGUgdGltZXIgYmFzZS4KIAkgKi8KLQlzcGluX3VubG9jaygmY3B1X2Jhc2UtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmY3B1X2Jhc2UtPmxvY2spOwogCXRyYWNlX2hydGltZXJfZXhwaXJlX2VudHJ5KHRpbWVyLCBub3cpOwogCXJlc3RhcnQgPSBmbih0aW1lcik7CiAJdHJhY2VfaHJ0aW1lcl9leHBpcmVfZXhpdCh0aW1lcik7Ci0Jc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmY3B1X2Jhc2UtPmxvY2spOwogCiAJLyoKIAkgKiBOb3RlOiBXZSBjbGVhciB0aGUgQ0FMTEJBQ0sgYml0IGFmdGVyIGVucXVldWVfaHJ0aW1lciBhbmQKQEAgLTEyMTcsMzAgKzEyNDIsNiBAQAogCiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCi1zdGF0aWMgaW50IGZvcmNlX2Nsb2NrX3JlcHJvZ3JhbTsKLQotLyoKLSAqIEFmdGVyIDUgaXRlcmF0aW9uJ3MgYXR0ZW1wdHMsIHdlIGNvbnNpZGVyIHRoYXQgaHJ0aW1lcl9pbnRlcnJ1cHQoKQotICogaXMgaGFuZ2luZywgd2hpY2ggY291bGQgaGFwcGVuIHdpdGggc29tZXRoaW5nIHRoYXQgc2xvd3MgdGhlIGludGVycnVwdAotICogc3VjaCBhcyB0aGUgdHJhY2luZy4gVGhlbiB3ZSBmb3JjZSB0aGUgY2xvY2sgcmVwcm9ncmFtbWluZyBmb3IgZWFjaCBmdXR1cmUKLSAqIGhydGltZXIgaW50ZXJydXB0cyB0byBhdm9pZCBpbmZpbml0ZSBsb29wcyBhbmQgdXNlIHRoZSBtaW5fZGVsdGFfbnMKLSAqIHRocmVzaG9sZCB0aGF0IHdlIHdpbGwgb3ZlcndyaXRlLgotICogVGhlIG5leHQgdGljayBldmVudCB3aWxsIGJlIHNjaGVkdWxlZCB0byAzIHRpbWVzIHdlIGN1cnJlbnRseSBzcGVuZCBvbgotICogaHJ0aW1lcl9pbnRlcnJ1cHQoKS4gVGhpcyBnaXZlcyBhIGdvb2QgY29tcHJvbWlzZSwgdGhlIGNwdXMgd2lsbCBzcGVuZAotICogMS80IG9mIHRoZWlyIHRpbWUgdG8gcHJvY2VzcyB0aGUgaHJ0aW1lciBpbnRlcnJ1cHRzLiBUaGlzIGlzIGVub3VnaCB0bwotICogbGV0IGl0IHJ1bm5pbmcgd2l0aG91dCBzZXJpb3VzIHN0YXJ2YXRpb24uCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1ocnRpbWVyX2ludGVycnVwdF9oYW5naW5nKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwKLQkJCWt0aW1lX3QgdHJ5X3RpbWUpCi17Ci0JZm9yY2VfY2xvY2tfcmVwcm9ncmFtID0gMTsKLQlkZXYtPm1pbl9kZWx0YV9ucyA9ICh1bnNpZ25lZCBsb25nKXRyeV90aW1lLnR2NjQgKiAzOwotCXByaW50ayhLRVJOX1dBUk5JTkcgImhydGltZXI6IGludGVycnVwdCB0b28gc2xvdywgIgotCSAgICAgICAiZm9yY2luZyBjbG9jayBtaW4gZGVsdGEgdG8gJWxsdSBuc1xuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGV2LT5taW5fZGVsdGFfbnMpOwotfQogLyoKICAqIEhpZ2ggcmVzb2x1dGlvbiB0aW1lciBpbnRlcnJ1cHQKICAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKQEAgLTEyNDksMjQgKzEyNTAsMTggQEAKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlOwotCWt0aW1lX3QgZXhwaXJlc19uZXh0LCBub3c7Ci0JaW50IG5yX3JldHJpZXMgPSAwOwotCWludCBpOworCWt0aW1lX3QgZXhwaXJlc19uZXh0LCBub3csIGVudHJ5X3RpbWUsIGRlbHRhOworCWludCBpLCByZXRyaWVzID0gMDsKIAogCUJVR19PTighY3B1X2Jhc2UtPmhyZXNfYWN0aXZlKTsKIAljcHVfYmFzZS0+bnJfZXZlbnRzKys7CiAJZGV2LT5uZXh0X2V2ZW50LnR2NjQgPSBLVElNRV9NQVg7CiAKLSByZXRyeToKLQkvKiA1IHJldHJpZXMgaXMgZW5vdWdoIHRvIG5vdGljZSBhIGhhbmcgKi8KLQlpZiAoISgrK25yX3JldHJpZXMgJSA1KSkKLQkJaHJ0aW1lcl9pbnRlcnJ1cHRfaGFuZ2luZyhkZXYsIGt0aW1lX3N1YihrdGltZV9nZXQoKSwgbm93KSk7Ci0KLQlub3cgPSBrdGltZV9nZXQoKTsKLQorCWVudHJ5X3RpbWUgPSBub3cgPSBrdGltZV9nZXQoKTsKK3JldHJ5OgogCWV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOwogCi0Jc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmY3B1X2Jhc2UtPmxvY2spOwogCS8qCiAJICogV2Ugc2V0IGV4cGlyZXNfbmV4dCB0byBLVElNRV9NQVggaGVyZSB3aXRoIGNwdV9iYXNlLT5sb2NrCiAJICogaGVsZCB0byBwcmV2ZW50IHRoYXQgYSB0aW1lciBpcyBlbnF1ZXVlZCBpbiBvdXIgcXVldWUgdmlhCkBAIC0xMzIyLDEzICsxMzE3LDUxIEBACiAJICogYWdhaW5zdCBpdC4KIAkgKi8KIAljcHVfYmFzZS0+ZXhwaXJlc19uZXh0ID0gZXhwaXJlc19uZXh0OwotCXNwaW5fdW5sb2NrKCZjcHVfYmFzZS0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjcHVfYmFzZS0+bG9jayk7CiAKIAkvKiBSZXByb2dyYW1taW5nIG5lY2Vzc2FyeSA/ICovCi0JaWYgKGV4cGlyZXNfbmV4dC50djY0ICE9IEtUSU1FX01BWCkgewotCQlpZiAodGlja19wcm9ncmFtX2V2ZW50KGV4cGlyZXNfbmV4dCwgZm9yY2VfY2xvY2tfcmVwcm9ncmFtKSkKLQkJCWdvdG8gcmV0cnk7CisJaWYgKGV4cGlyZXNfbmV4dC50djY0ID09IEtUSU1FX01BWCB8fAorCSAgICAhdGlja19wcm9ncmFtX2V2ZW50KGV4cGlyZXNfbmV4dCwgMCkpIHsKKwkJY3B1X2Jhc2UtPmhhbmdfZGV0ZWN0ZWQgPSAwOworCQlyZXR1cm47CiAJfQorCisJLyoKKwkgKiBUaGUgbmV4dCB0aW1lciB3YXMgYWxyZWFkeSBleHBpcmVkIGR1ZSB0bzoKKwkgKiAtIHRyYWNpbmcKKwkgKiAtIGxvbmcgbGFzdGluZyBjYWxsYmFja3MKKwkgKiAtIGJlaW5nIHNjaGVkdWxlZCBhd2F5IHdoZW4gcnVubmluZyBpbiBhIFZNCisJICoKKwkgKiBXZSBuZWVkIHRvIHByZXZlbnQgdGhhdCB3ZSBsb29wIGZvcmV2ZXIgaW4gdGhlIGhydGltZXIKKwkgKiBpbnRlcnJ1cHQgcm91dGluZS4gV2UgZ2l2ZSBpdCAzIGF0dGVtcHRzIHRvIGF2b2lkCisJICogb3ZlcnJlYWN0aW5nIG9uIHNvbWUgc3B1cmlvdXMgZXZlbnQuCisJICovCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJY3B1X2Jhc2UtPm5yX3JldHJpZXMrKzsKKwlpZiAoKytyZXRyaWVzIDwgMykKKwkJZ290byByZXRyeTsKKwkvKgorCSAqIEdpdmUgdGhlIHN5c3RlbSBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcgZWxzZSB0aGFuIGxvb3BpbmcKKwkgKiBoZXJlLiBXZSBzdG9yZWQgdGhlIGVudHJ5IHRpbWUsIHNvIHdlIGtub3cgZXhhY3RseSBob3cgbG9uZworCSAqIHdlIHNwZW50IGhlcmUuIFdlIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50IHRoaXMgYW1vdW50IG9mCisJICogdGltZSBhd2F5LgorCSAqLworCWNwdV9iYXNlLT5ucl9oYW5ncysrOworCWNwdV9iYXNlLT5oYW5nX2RldGVjdGVkID0gMTsKKwlkZWx0YSA9IGt0aW1lX3N1Yihub3csIGVudHJ5X3RpbWUpOworCWlmIChkZWx0YS50djY0ID4gY3B1X2Jhc2UtPm1heF9oYW5nX3RpbWUudHY2NCkKKwkJY3B1X2Jhc2UtPm1heF9oYW5nX3RpbWUgPSBkZWx0YTsKKwkvKgorCSAqIExpbWl0IGl0IHRvIGEgc2Vuc2libGUgdmFsdWUgYXMgd2UgZW5mb3JjZSBhIGxvbmdlcgorCSAqIGRlbGF5LiBHaXZlIHRoZSBDUFUgYXQgbGVhc3QgMTAwbXMgdG8gY2F0Y2ggdXAuCisJICovCisJaWYgKGRlbHRhLnR2NjQgPiAxMDAgKiBOU0VDX1BFUl9NU0VDKQorCQlleHBpcmVzX25leHQgPSBrdGltZV9hZGRfbnMobm93LCAxMDAgKiBOU0VDX1BFUl9NU0VDKTsKKwllbHNlCisJCWV4cGlyZXNfbmV4dCA9IGt0aW1lX2FkZChub3csIGRlbHRhKTsKKwl0aWNrX3Byb2dyYW1fZXZlbnQoZXhwaXJlc19uZXh0LCAxKTsKKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgImhydGltZXI6IGludGVycnVwdCB0b29rICVsbHUgbnNcbiIsCisJCSAgICBrdGltZV90b19ucyhkZWx0YSkpOwogfQogCiAvKgpAQCAtMTQyNCw3ICsxNDU3LDcgQEAKIAkJCWdldHRpbWUgPSAwOwogCQl9CiAKLQkJc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7CisJCXJhd19zcGluX2xvY2soJmNwdV9iYXNlLT5sb2NrKTsKIAogCQl3aGlsZSAoKG5vZGUgPSBiYXNlLT5maXJzdCkpIHsKIAkJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKQEAgLTE0MzYsNyArMTQ2OSw3IEBACiAKIAkJCV9fcnVuX2hydGltZXIodGltZXIsICZiYXNlLT5zb2Z0aXJxX3RpbWUpOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZjcHVfYmFzZS0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmY3B1X2Jhc2UtPmxvY2spOwogCX0KIH0KIApAQCAtMTU5Miw3ICsxNjI1LDcgQEAKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmcGVyX2NwdShocnRpbWVyX2Jhc2VzLCBjcHUpOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmNwdV9iYXNlLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmNwdV9iYXNlLT5sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKQogCQljcHVfYmFzZS0+Y2xvY2tfYmFzZVtpXS5jcHVfYmFzZSA9IGNwdV9iYXNlOwpAQCAtMTY1MCwxNiArMTY4MywxNiBAQAogCSAqIFRoZSBjYWxsZXIgaXMgZ2xvYmFsbHkgc2VyaWFsaXplZCBhbmQgbm9ib2R5IGVsc2UKIAkgKiB0YWtlcyB0d28gbG9ja3MgYXQgb25jZSwgZGVhZGxvY2sgaXMgbm90IHBvc3NpYmxlLgogCSAqLwotCXNwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2spOwotCXNwaW5fbG9ja19uZXN0ZWQoJm9sZF9iYXNlLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJcmF3X3NwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2spOworCXJhd19zcGluX2xvY2tfbmVzdGVkKCZvbGRfYmFzZS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspIHsKIAkJbWlncmF0ZV9ocnRpbWVyX2xpc3QoJm9sZF9iYXNlLT5jbG9ja19iYXNlW2ldLAogCQkJCSAgICAgJm5ld19iYXNlLT5jbG9ja19iYXNlW2ldKTsKIAl9CiAKLQlzcGluX3VubG9jaygmb2xkX2Jhc2UtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7CiAKIAkvKiBDaGVjaywgaWYgd2UgZ290IGV4cGlyZWQgd29yayB0byBkbyAqLwogCV9faHJ0aW1lcl9wZWVrX2FoZWFkX3RpbWVycygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggY2Y1ZWUxNi4uZGJjYmY2YSAxMDA2NDQKLS0tIGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBucl9jcHVfYnBfcGlubmVkKTsKIAogLyogTnVtYmVyIG9mIHBpbm5lZCB0YXNrIGJyZWFrcG9pbnRzIGluIGEgY3B1ICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCB0YXNrX2JwX3Bpbm5lZFtIQlBfTlVNXSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBucl90YXNrX2JwX3Bpbm5lZFtIQlBfTlVNXSk7CiAKIC8qIE51bWJlciBvZiBub24tcGlubmVkIGNwdS90YXNrIGJyZWFrcG9pbnRzIGluIGEgY3B1ICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBucl9icF9mbGV4aWJsZSk7CkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG1heF90YXNrX2JwX3Bpbm5lZChpbnQgY3B1KQogewogCWludCBpOwotCXVuc2lnbmVkIGludCAqdHNrX3Bpbm5lZCA9IHBlcl9jcHUodGFza19icF9waW5uZWQsIGNwdSk7CisJdW5zaWduZWQgaW50ICp0c2tfcGlubmVkID0gcGVyX2NwdShucl90YXNrX2JwX3Bpbm5lZCwgY3B1KTsKIAogCWZvciAoaSA9IEhCUF9OVU0gLTE7IGkgPj0gMDsgaS0tKSB7CiAJCWlmICh0c2tfcGlubmVkW2ldID4gMCkKQEAgLTgzLDE1ICs4Myw1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHRhc2tfYnBfcGlubmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRzay0+cGVyZl9ldmVudF9jdHhwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50ID0gMDsKKworCWlmIChXQVJOX09OQ0UoIWN0eCwgIk5vIHBlcmYgY29udGV4dCBmb3IgdGhpcyB0YXNrIikpCisJCXJldHVybiAwOworCisJbGlzdCA9ICZjdHgtPmV2ZW50X2xpc3Q7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBUaGUgY3VycmVudCBicmVha3BvaW50IGNvdW50ZXIgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0CisJICogYXQgdGhlIG9wZW4oKSBjYWxsYmFjayB0aW1lCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShicCwgbGlzdCwgZXZlbnRfZW50cnkpIHsKKwkJaWYgKGJwLT5hdHRyLnR5cGUgPT0gUEVSRl9UWVBFX0JSRUFLUE9JTlQpCisJCQljb3VudCsrOworCX0KKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKwogLyoKICAqIFJlcG9ydCB0aGUgbnVtYmVyIG9mIHBpbm5lZC91bi1waW5uZWQgYnJlYWtwb2ludHMgd2UgaGF2ZSBpbgogICogYSBnaXZlbiBjcHUgKGNwdSA+IC0xKSBvciBpbiBhbGwgb2YgdGhlbSAoY3B1ID0gLTEpLgogICovCi1zdGF0aWMgdm9pZCBmZXRjaF9icF9idXN5X3Nsb3RzKHN0cnVjdCBicF9idXN5X3Nsb3RzICpzbG90cywgaW50IGNwdSkKK3N0YXRpYyB2b2lkCitmZXRjaF9icF9idXN5X3Nsb3RzKHN0cnVjdCBicF9idXN5X3Nsb3RzICpzbG90cywgc3RydWN0IHBlcmZfZXZlbnQgKmJwKQogeworCWludCBjcHUgPSBicC0+Y3B1OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gYnAtPmN0eC0+dGFzazsKKwogCWlmIChjcHUgPj0gMCkgewogCQlzbG90cy0+cGlubmVkID0gcGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCBjcHUpOwotCQlzbG90cy0+cGlubmVkICs9IG1heF90YXNrX2JwX3Bpbm5lZChjcHUpOworCQlpZiAoIXRzaykKKwkJCXNsb3RzLT5waW5uZWQgKz0gbWF4X3Rhc2tfYnBfcGlubmVkKGNwdSk7CisJCWVsc2UKKwkJCXNsb3RzLT5waW5uZWQgKz0gdGFza19icF9waW5uZWQodHNrKTsKIAkJc2xvdHMtPmZsZXhpYmxlID0gcGVyX2NwdShucl9icF9mbGV4aWJsZSwgY3B1KTsKIAogCQlyZXR1cm47CkBAIC0xMDEsNyArMTM3LDEwIEBACiAJCXVuc2lnbmVkIGludCBucjsKIAogCQluciA9IHBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZCwgY3B1KTsKLQkJbnIgKz0gbWF4X3Rhc2tfYnBfcGlubmVkKGNwdSk7CisJCWlmICghdHNrKQorCQkJbnIgKz0gbWF4X3Rhc2tfYnBfcGlubmVkKGNwdSk7CisJCWVsc2UKKwkJCW5yICs9IHRhc2tfYnBfcGlubmVkKHRzayk7CiAKIAkJaWYgKG5yID4gc2xvdHMtPnBpbm5lZCkKIAkJCXNsb3RzLT5waW5uZWQgPSBucjsKQEAgLTExOCwzNSArMTU3LDEyIEBACiAgKi8KIHN0YXRpYyB2b2lkIHRvZ2dsZV9icF90YXNrX3Nsb3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUsIGJvb2wgZW5hYmxlKQogewotCWludCBjb3VudCA9IDA7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmJwOwotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRzay0+cGVyZl9ldmVudF9jdHhwOwogCXVuc2lnbmVkIGludCAqdHNrX3Bpbm5lZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50ID0gMDsKIAotCWlmIChXQVJOX09OQ0UoIWN0eCwgIk5vIHBlcmYgY29udGV4dCBmb3IgdGhpcyB0YXNrIikpCi0JCXJldHVybjsKKwljb3VudCA9IHRhc2tfYnBfcGlubmVkKHRzayk7CiAKLQlsaXN0ID0gJmN0eC0+ZXZlbnRfbGlzdDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogVGhlIGN1cnJlbnQgYnJlYWtwb2ludCBjb3VudGVyIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdAotCSAqIGF0IHRoZSBvcGVuKCkgY2FsbGJhY2sgdGltZQotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnAsIGxpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChicC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9CUkVBS1BPSU5UKQotCQkJY291bnQrKzsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChXQVJOX09OQ0UoY291bnQgPCAwLCAiTm8gYnJlYWtwb2ludCBjb3VudGVyIGZvdW5kIGluIHRoZSBjb3VudGVyIGxpc3QiKSkKLQkJcmV0dXJuOwotCi0JdHNrX3Bpbm5lZCA9IHBlcl9jcHUodGFza19icF9waW5uZWQsIGNwdSk7CisJdHNrX3Bpbm5lZCA9IHBlcl9jcHUobnJfdGFza19icF9waW5uZWQsIGNwdSk7CiAJaWYgKGVuYWJsZSkgewogCQl0c2tfcGlubmVkW2NvdW50XSsrOwogCQlpZiAoY291bnQgPiAwKQpAQCAtMTkzLDcgKzIwOSw3IEBACiAgKiAgIC0gSWYgYXR0YWNoZWQgdG8gYSBzaW5nbGUgY3B1LCBjaGVjazoKICAqCiAgKiAgICAgICAocGVyX2NwdShucl9icF9mbGV4aWJsZSwgY3B1KSB8fCAocGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCBjcHUpCi0gKiAgICAgICAgICAgKyBtYXgocGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgY3B1KSkpKSA8IEhCUF9OVU0KKyAqICAgICAgICAgICArIG1heChwZXJfY3B1KG5yX3Rhc2tfYnBfcGlubmVkLCBjcHUpKSkpIDwgSEJQX05VTQogICoKICAqICAgICAgIC0+IElmIHRoZXJlIGFyZSBhbHJlYWR5IG5vbi1waW5uZWQgY291bnRlcnMgaW4gdGhpcyBjcHUsIGl0IG1lYW5zCiAgKiAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGEgZnJlZSBzbG90IGZvciB0aGVtLgpAQCAtMjA0LDcgKzIyMCw3IEBACiAgKiAgIC0gSWYgYXR0YWNoZWQgdG8gZXZlcnkgY3B1cywgY2hlY2s6CiAgKgogICogICAgICAgKHBlcl9jcHUobnJfYnBfZmxleGlibGUsICopIHx8IChtYXgocGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCAqKSkKLSAqICAgICAgICAgICArIG1heChwZXJfY3B1KHRhc2tfYnBfcGlubmVkLCAqKSkpKSA8IEhCUF9OVU0KKyAqICAgICAgICAgICArIG1heChwZXJfY3B1KG5yX3Rhc2tfYnBfcGlubmVkLCAqKSkpKSA8IEhCUF9OVU0KICAqCiAgKiAgICAgICAtPiBUaGlzIGlzIHJvdWdobHkgdGhlIHNhbWUsIGV4Y2VwdCB3ZSBjaGVjayB0aGUgbnVtYmVyIG9mIHBlciBjcHUKICAqICAgICAgICAgIGJwIGZvciBldmVyeSBjcHUgYW5kIHdlIGtlZXAgdGhlIG1heCBvbmUuIFNhbWUgZm9yIHRoZSBwZXIgdGFza3MKQEAgLTIxNiw3ICsyMzIsNyBAQAogICogICAtIElmIGF0dGFjaGVkIHRvIGEgc2luZ2xlIGNwdSwgY2hlY2s6CiAgKgogICogICAgICAgKChwZXJfY3B1KG5yX2JwX2ZsZXhpYmxlLCBjcHUpID4gMSkgKyBwZXJfY3B1KG5yX2NwdV9icF9waW5uZWQsIGNwdSkKLSAqICAgICAgICAgICAgKyBtYXgocGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgY3B1KSkpIDwgSEJQX05VTQorICogICAgICAgICAgICArIG1heChwZXJfY3B1KG5yX3Rhc2tfYnBfcGlubmVkLCBjcHUpKSkgPCBIQlBfTlVNCiAgKgogICogICAgICAgLT4gU2FtZSBjaGVja3MgYXMgYmVmb3JlLiBCdXQgbm93IHRoZSBucl9icF9mbGV4aWJsZSwgaWYgYW55LCBtdXN0IGtlZXAKICAqICAgICAgICAgIG9uZSByZWdpc3RlciBhdCBsZWFzdCAob3IgdGhleSB3aWxsIG5ldmVyIGJlIGZlZCkuCkBAIC0yMjQsNyArMjQwLDcgQEAKICAqICAgLSBJZiBhdHRhY2hlZCB0byBldmVyeSBjcHVzLCBjaGVjazoKICAqCiAgKiAgICAgICAoKHBlcl9jcHUobnJfYnBfZmxleGlibGUsICopID4gMSkgKyBtYXgocGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCAqKSkKLSAqICAgICAgICAgICAgKyBtYXgocGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgKikpKSA8IEhCUF9OVU0KKyAqICAgICAgICAgICAgKyBtYXgocGVyX2NwdShucl90YXNrX2JwX3Bpbm5lZCwgKikpKSA8IEhCUF9OVU0KICAqLwogaW50IHJlc2VydmVfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CkBAIC0yMzMsNyArMjQ5LDcgQEAKIAogCW11dGV4X2xvY2soJm5yX2JwX211dGV4KTsKIAotCWZldGNoX2JwX2J1c3lfc2xvdHMoJnNsb3RzLCBicC0+Y3B1KTsKKwlmZXRjaF9icF9idXN5X3Nsb3RzKCZzbG90cywgYnApOwogCiAJLyogRmxleGlibGUgY291bnRlcnMgbmVlZCB0byBrZWVwIGF0IGxlYXN0IG9uZSBzbG90ICovCiAJaWYgKHNsb3RzLnBpbm5lZCArICghIXNsb3RzLmZsZXhpYmxlKSA9PSBIQlBfTlVNKSB7CkBAIC0yNTksNyArMjc1LDcgQEAKIH0KIAogCi1pbnQgX19yZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoraW50IHJlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CiAJaW50IHJldDsKIApAQCAtMjc2LDE5ICsyOTIsMTIgQEAKIAkgKiBUaGlzIGlzIGEgcXVpY2sgaGFjayB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBzb29uLCBvbmNlIHdlIHJlbW92ZQogCSAqIHRoZSB0bXAgYnJlYWtwb2ludHMgZnJvbSBwdHJhY2UKIAkgKi8KLQlpZiAoIWJwLT5hdHRyLmRpc2FibGVkIHx8IGJwLT5jYWxsYmFjayA9PSBwZXJmX2JwX2V2ZW50KQorCWlmICghYnAtPmF0dHIuZGlzYWJsZWQgfHwgIWJwLT5vdmVyZmxvd19oYW5kbGVyKQogCQlyZXQgPSBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhicCwgYnAtPmN0eC0+dGFzayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcmVnaXN0ZXJfcGVyZl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKLXsKLQlicC0+Y2FsbGJhY2sgPSBwZXJmX2JwX2V2ZW50OwotCi0JcmV0dXJuIF9fcmVnaXN0ZXJfcGVyZl9od19icmVha3BvaW50KGJwKTsKLX0KLQogLyoqCiAgKiByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQgLSByZWdpc3RlciBhIGhhcmR3YXJlIGJyZWFrcG9pbnQgZm9yIHVzZXIgc3BhY2UKICAqIEBhdHRyOiBicmVha3BvaW50IGF0dHJpYnV0ZXMKQEAgLTI5Nyw3ICszMDYsNyBAQAogICovCiBzdHJ1Y3QgcGVyZl9ldmVudCAqCiByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKLQkJCSAgICBwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkLAorCQkJICAgIHBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90IHRyaWdnZXJlZCwKIAkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlyZXR1cm4gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoYXR0ciwgLTEsIHRzay0+cGlkLCB0cmlnZ2VyZWQpOwpAQCAtMzExLDE5ICszMjAsNDAgQEAKICAqIEB0cmlnZ2VyZWQ6IGNhbGxiYWNrIHRvIHRyaWdnZXIgd2hlbiB3ZSBoaXQgdGhlIGJyZWFrcG9pbnQKICAqIEB0c2s6IHBvaW50ZXIgdG8gJ3Rhc2tfc3RydWN0JyBvZiB0aGUgcHJvY2VzcyB0byB3aGljaCB0aGUgYWRkcmVzcyBiZWxvbmdzCiAgKi8KLXN0cnVjdCBwZXJmX2V2ZW50ICoKLW1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAotCQkJICBwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkLAotCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK2ludCBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cikKIHsKLQkvKgotCSAqIEZJWE1FOiBkbyBpdCB3aXRob3V0IHVucmVnaXN0ZXJpbmcKLQkgKiAtIFdlIGRvbid0IHdhbnQgdG8gbG9zZSBvdXIgc2xvdAotCSAqIC0gSWYgdGhlIG5ldyBicCBpcyBpbmNvcnJlY3QsIGRvbid0IGxvc2UgdGhlIG9sZGVyIG9uZQotCSAqLwotCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChicCk7CisJdTY0IG9sZF9hZGRyID0gYnAtPmF0dHIuYnBfYWRkcjsKKwlpbnQgb2xkX3R5cGUgPSBicC0+YXR0ci5icF90eXBlOworCWludCBvbGRfbGVuID0gYnAtPmF0dHIuYnBfbGVuOworCWludCBlcnIgPSAwOwogCi0JcmV0dXJuIHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKGF0dHIsIC0xLCB0c2stPnBpZCwgdHJpZ2dlcmVkKTsKKwlwZXJmX2V2ZW50X2Rpc2FibGUoYnApOworCisJYnAtPmF0dHIuYnBfYWRkciA9IGF0dHItPmJwX2FkZHI7CisJYnAtPmF0dHIuYnBfdHlwZSA9IGF0dHItPmJwX3R5cGU7CisJYnAtPmF0dHIuYnBfbGVuID0gYXR0ci0+YnBfbGVuOworCisJaWYgKGF0dHItPmRpc2FibGVkKQorCQlnb3RvIGVuZDsKKworCWVyciA9IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKGJwLCBicC0+Y3R4LT50YXNrKTsKKwlpZiAoIWVycikKKwkJcGVyZl9ldmVudF9lbmFibGUoYnApOworCisJaWYgKGVycikgeworCQlicC0+YXR0ci5icF9hZGRyID0gb2xkX2FkZHI7CisJCWJwLT5hdHRyLmJwX3R5cGUgPSBvbGRfdHlwZTsKKwkJYnAtPmF0dHIuYnBfbGVuID0gb2xkX2xlbjsKKwkJaWYgKCFicC0+YXR0ci5kaXNhYmxlZCkKKwkJCXBlcmZfZXZlbnRfZW5hYmxlKGJwKTsKKworCQlyZXR1cm4gZXJyOworCX0KKworZW5kOgorCWJwLT5hdHRyLmRpc2FibGVkID0gYXR0ci0+ZGlzYWJsZWQ7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQpOwogCkBAIC0zNDgsNyArMzc4LDcgQEAKICAqLwogc3RydWN0IHBlcmZfZXZlbnQgKioKIHJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAotCQkJICAgIHBlcmZfY2FsbGJhY2tfdCB0cmlnZ2VyZWQpCisJCQkgICAgcGVyZl9vdmVyZmxvd19oYW5kbGVyX3QgdHJpZ2dlcmVkKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICoqY3B1X2V2ZW50cywgKipwZXZlbnQsICpicDsKIAlsb25nIGVycjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMgYi9rZXJuZWwvaXJxL2F1dG9wcm9iZS5jCmluZGV4IDFkZTk3MDAuLjIyOTVhMzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMKKysrIGIva2VybmVsL2lycS9hdXRvcHJvYmUuYwpAQCAtNDUsNyArNDUsNyBAQAogCSAqIGZsdXNoIHN1Y2ggYSBsb25nc3RhbmRpbmcgaXJxIGJlZm9yZSBjb25zaWRlcmluZyBpdCBhcyBzcHVyaW91cy4KIAkgKi8KIAlmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGksIGRlc2MpIHsKLQkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJaWYgKCFkZXNjLT5hY3Rpb24gJiYgIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9QUk9CRSkpIHsKIAkJCS8qCiAJCQkgKiBBbiBvbGQtc3R5bGUgYXJjaGl0ZWN0dXJlIG1pZ2h0IHN0aWxsIGhhdmUKQEAgLTYxLDcgKzYxLDcgQEAKIAkJCQlkZXNjLT5jaGlwLT5zZXRfdHlwZShpLCBJUlFfVFlQRV9QUk9CRSk7CiAJCQlkZXNjLT5jaGlwLT5zdGFydHVwKGkpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwogCX0KIAogCS8qIFdhaXQgZm9yIGxvbmdzdGFuZGluZyBpbnRlcnJ1cHRzIHRvIHRyaWdnZXIuICovCkBAIC03MywxMyArNzMsMTMgQEAKIAkgKiBoYXBwZW5lZCBpbiB0aGUgcHJldmlvdXMgc3RhZ2UsIGl0IG1heSBoYXZlIG1hc2tlZCBpdHNlbGYpCiAJICovCiAJZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpLCBkZXNjKSB7Ci0JCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCWlmICghZGVzYy0+YWN0aW9uICYmICEoZGVzYy0+c3RhdHVzICYgSVJRX05PUFJPQkUpKSB7CiAJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0FVVE9ERVRFQ1QgfCBJUlFfV0FJVElORzsKIAkJCWlmIChkZXNjLT5jaGlwLT5zdGFydHVwKGkpKQogCQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAl9CiAKIAkvKgpAQCAtOTEsNyArOTEsNyBAQAogCSAqIE5vdyBmaWx0ZXIgb3V0IGFueSBvYnZpb3VzbHkgc3B1cmlvdXMgaW50ZXJydXB0cwogCSAqLwogCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKLQkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCiAJCWlmIChzdGF0dXMgJiBJUlFfQVVUT0RFVEVDVCkgewpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCQkJaWYgKGkgPCAzMikKIAkJCQkJbWFzayB8PSAxIDw8IGk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJfQogCiAJcmV0dXJuIG1hc2s7CkBAIC0xMjksNyArMTI5LDcgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKLQkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCiAJCWlmIChzdGF0dXMgJiBJUlFfQVVUT0RFVEVDVCkgewpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgJiB+SVJRX0FVVE9ERVRFQ1Q7CiAJCQlkZXNjLT5jaGlwLT5zaHV0ZG93bihpKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcm9iaW5nX2FjdGl2ZSk7CiAKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7Ci0JCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCXN0YXR1cyA9IGRlc2MtPnN0YXR1czsKIAogCQlpZiAoc3RhdHVzICYgSVJRX0FVVE9ERVRFQ1QpIHsKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkJZGVzYy0+c3RhdHVzID0gc3RhdHVzICYgfklSUV9BVVRPREVURUNUOwogCQkJZGVzYy0+Y2hpcC0+c2h1dGRvd24oaSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJfQogCW11dGV4X3VubG9jaygmcHJvYmluZ19hY3RpdmUpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IGJhNTY2YzIuLmVjYzNmYTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC0zNCw3ICszNCw3IEBACiAJfQogCiAJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgbGVmdCBvdmVyIHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgdXNlIG9mIHRoaXMgaXJxICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlkZXNjLT5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJZGVzYy0+Y2hpcCA9ICZub19pcnFfY2hpcDsKIAlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnE7CkBAIC01MSw3ICs1MSw3IEBACiAJY3B1bWFza19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOwogI2VuZGlmCiAjZW5kaWYKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC02OCw5ICs2OCw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWlmIChkZXNjLT5hY3Rpb24pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQlXQVJOKDEsIEtFUk5fRVJSICJEZXN0cm95aW5nIElSUSVkIHdpdGhvdXQgY2FsbGluZyBmcmVlX2lycVxuIiwKIAkJCWlycSk7CiAJCXJldHVybjsKQEAgLTgyLDcgKzgyLDcgQEAKIAlkZXNjLT5jaGlwID0gJm5vX2lycV9jaGlwOwogCWRlc2MtPm5hbWUgPSBOVUxMOwogCWNsZWFyX2tzdGF0X2lycXMoZGVzYyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtMTA0LDEwICsxMDQsMTAgQEAKIAlpZiAoIWNoaXApCiAJCWNoaXAgPSAmbm9faXJxX2NoaXA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWlycV9jaGlwX3NldF9kZWZhdWx0cyhjaGlwKTsKIAlkZXNjLT5jaGlwID0gY2hpcDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMzLDkgKzEzMyw5IEBACiAJaWYgKHR5cGUgPT0gSVJRX1RZUEVfTk9ORSkKIAkJcmV0dXJuIDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MsIGlycSwgdHlwZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X2lycV90eXBlKTsKQEAgLTE1OCw5ICsxNTgsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPmhhbmRsZXJfZGF0YSA9IGRhdGE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9pcnFfZGF0YSk7CkBAIC0xODMsMTEgKzE4MywxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPm1zaV9kZXNjID0gZW50cnk7CiAJaWYgKGVudHJ5KQogCQllbnRyeS0+aXJxID0gaXJxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTQsOSArMjE0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlkZXNjLT5jaGlwX2RhdGEgPSBkYXRhOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDEsMTIgKzI0MSwxMiBAQAogCWlmICghZGVzYykKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlpZiAobmVzdCkKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9ORVNURURfVEhSRUFEOwogCWVsc2UKIAkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTkVTVEVEX1RIUkVBRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNldF9pcnFfbmVzdGVkX3RocmVhZCk7CiAKQEAgLTM0Myw3ICszNDMsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAogCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCkBAIC0zNTIsMTcgKzM1MiwxNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAogCWFjdGlvbl9yZXQgPSBhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOwogCWlmICghbm9pcnFkZWJ1ZykKIAkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKIAotCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOwogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoYW5kbGVfbmVzdGVkX2lycSk7CiAKQEAgLTM4NCw3ICszODQsNyBAQAogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCi0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTM5NiwxNiArMzk2LDE2IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgYWN0aW9uKTsKIAlpZiAoIW5vaXJxZGVidWcpCiAJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogfQogCiAvKioKQEAgLTQyNCw3ICs0MjQsNyBAQAogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCi0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKIAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCkBAIC00NDEsMTMgKzQ0MSwxMyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7Ci0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIGFjdGlvbik7CiAJaWYgKCFub2lycWRlYnVnKQogCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCi0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOwogCiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9PTkVTSE9UKSkKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWVsc2UgaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSAmJiBkZXNjLT5jaGlwLT51bm1hc2spCiAJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGhhbmRsZV9sZXZlbF9pcnEpOwogCkBAIC00NzUsNyArNDc1LDcgQEAKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAKIAlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpKQogCQlnb3RvIG91dDsKQEAgLTQ5NywxOCArNDk3LDE4IEBACiAKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfUEVORElORzsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgYWN0aW9uKTsKIAlpZiAoIW5vaXJxZGVidWcpCiAJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CiBvdXQ6CiAJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CiAKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIAogLyoqCkBAIC01MzAsNyArNTMwLDcgQEAKIHZvaWQKIGhhbmRsZV9lZGdlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CiAKQEAgLTU3NiwxNyArNTc2LDE3IEBACiAJCX0KIAogCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOwotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgYWN0aW9uKTsKIAkJaWYgKCFub2lycWRlYnVnKQogCQkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKLQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAKIAl9IHdoaWxlICgoZGVzYy0+c3RhdHVzICYgKElSUV9QRU5ESU5HIHwgSVJRX0RJU0FCTEVEKSkgPT0gSVJRX1BFTkRJTkcpOwogCiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CiAKIC8qKgpAQCAtNjQzLDcgKzY0Myw3IEBACiAJfQogCiAJY2hpcF9idXNfbG9jayhpcnEsIGRlc2MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBVbmluc3RhbGw/ICovCiAJaWYgKGhhbmRsZSA9PSBoYW5kbGVfYmFkX2lycSkgewpAQCAtNjYxLDcgKzY2MSw3IEBACiAJCWRlc2MtPmRlcHRoID0gMDsKIAkJZGVzYy0+Y2hpcC0+c3RhcnR1cChpcnEpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAljaGlwX2J1c19zeW5jX3VubG9jayhpcnEsIGRlc2MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19zZXRfaXJxX2hhbmRsZXIpOwpAQCAtNjkyLDkgKzY5Miw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfTk9QUk9CRTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBfX2luaXQgc2V0X2lycV9wcm9iZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNzA3LDcgKzcwNyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PUFJPQkU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCAxN2M3MWJiLi44MTQ5NDBlIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkuY2hpcAkgICAgPSAmbm9faXJxX2NoaXAsCiAJLmhhbmRsZV9pcnEgPSBoYW5kbGVfYmFkX2lycSwKIAkuZGVwdGggICAgICA9IDEsCi0JLmxvY2sgICAgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzY19pbml0LmxvY2spLAorCS5sb2NrICAgICAgID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKGlycV9kZXNjX2luaXQubG9jayksCiB9OwogCiB2b2lkIF9fcmVmIGluaXRfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBub2RlLCBpbnQgbnIpCkBAIC0xMDgsNyArMTA4LDcgQEAKIHsKIAltZW1jcHkoZGVzYywgJmlycV9kZXNjX2luaXQsIHNpemVvZihzdHJ1Y3QgaXJxX2Rlc2MpKTsKIAotCXNwaW5fbG9ja19pbml0KCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmRlc2MtPmxvY2spOwogCWRlc2MtPmlycSA9IGlycTsKICNpZmRlZiBDT05GSUdfU01QCiAJZGVzYy0+bm9kZSA9IG5vZGU7CkBAIC0xMzAsNyArMTMwLDcgQEAKIC8qCiAgKiBQcm90ZWN0IHRoZSBzcGFyc2VfaXJxczoKICAqLwotREVGSU5FX1NQSU5MT0NLKHNwYXJzZV9pcnFfbG9jayk7CitERUZJTkVfUkFXX1NQSU5MT0NLKHNwYXJzZV9pcnFfbG9jayk7CiAKIHN0cnVjdCBpcnFfZGVzYyAqKmlycV9kZXNjX3B0cnMgX19yZWFkX21vc3RseTsKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJCS5jaGlwCSAgICA9ICZub19pcnFfY2hpcCwKIAkJLmhhbmRsZV9pcnEgPSBoYW5kbGVfYmFkX2lycSwKIAkJLmRlcHRoCSAgICA9IDEsCi0JCS5sb2NrCSAgICA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGlycV9kZXNjX2luaXQubG9jayksCisJCS5sb2NrCSAgICA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzY19pbml0LmxvY2spLAogCX0KIH07CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogCWlmIChkZXNjKQogCQlyZXR1cm4gZGVzYzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOwogCiAJLyogV2UgaGF2ZSB0byBjaGVjayBpdCB0byBhdm9pZCByYWNlcyB3aXRoIGFub3RoZXIgQ1BVICovCiAJZGVzYyA9IGlycV9kZXNjX3B0cnNbaXJxXTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWlycV9kZXNjX3B0cnNbaXJxXSA9IGRlc2M7CiAKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BhcnNlX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGRlc2M7CiB9CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkJLmNoaXAgPSAmbm9faXJxX2NoaXAsCiAJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCiAJCS5kZXB0aCA9IDEsCi0JCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaXJxX2Rlc2MtPmxvY2spLAorCQkubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzYy0+bG9jayksCiAJfQogfTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJaWYgKGRlc2MtPmNoaXAtPmFjaykKIAkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJLyoKQEAgLTUxNywxMyArNTE3LDEzIEBACiAJZm9yICg7OykgewogCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCi0JCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCQlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIGFjdGlvbik7CiAJCWlmICghbm9pcnFkZWJ1ZykKIAkJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAKLQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpKQogCQkJYnJlYWs7CiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7CkBAIC01MzYsNyArNTM2LDcgQEAKIAkgKiBkaXNhYmxlZCB3aGlsZSB0aGUgaGFuZGxlciB3YXMgcnVubmluZy4KIAkgKi8KIAlkZXNjLT5jaGlwLT5lbmQoaXJxKTsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggMWI1ZDc0Mi4uYjI4MjFmMCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0xOCw3ICsxOCw3IEBACiBleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CiBleHRlcm4gdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgbm9kZSwgaW50IG5yKTsKIGV4dGVybiB2b2lkIGNsZWFyX2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjKTsKLWV4dGVybiBzcGlubG9ja190IHNwYXJzZV9pcnFfbG9jazsKK2V4dGVybiByYXdfc3BpbmxvY2tfdCBzcGFyc2VfaXJxX2xvY2s7CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQogLyogaXJxX2Rlc2NfcHRycyBhbGxvY2F0ZWQgYXQgYm9vdCB0aW1lICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCA3MzA1YjI5Li5lYjYwNzhjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTQ2LDkgKzQ2LDkgQEAKIAkJCWNwdV9yZWxheCgpOwogCiAJCS8qIE9rLCB0aGF0IGluZGljYXRlZCB3ZSdyZSBkb25lOiBkb3VibGUtY2hlY2sgY2FyZWZ1bGx5LiAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAKIAkJLyogT29wcywgdGhhdCBmYWlsZWQ/ICovCiAJfSB3aGlsZSAoc3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BDTlRYVCkgewpAQCAtMTM0LDcgKzEzNCw3IEBACiAJfQogI2VuZGlmCiAJZGVzYy0+c3RhdHVzIHw9IElSUV9BRkZJTklUWV9TRVQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MSwxMSArMTgxLDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlyZXQgPSBzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCWlmICghcmV0KQogCQlpcnFfc2V0X3RocmVhZF9hZmZpbml0eShkZXNjKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMzEsOSArMjMxLDkgQEAKIAkJcmV0dXJuOwogCiAJY2hpcF9idXNfbG9jayhpcnEsIGRlc2MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIGZhbHNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAljaGlwX2J1c19zeW5jX3VubG9jayhpcnEsIGRlc2MpOwogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycV9ub3N5bmMpOwpAQCAtMzA4LDkgKzMwOCw5IEBACiAJCXJldHVybjsKIAogCWNoaXBfYnVzX2xvY2soaXJxLCBkZXNjKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCV9fZW5hYmxlX2lycShkZXNjLCBpcnEsIGZhbHNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAljaGlwX2J1c19zeW5jX3VubG9jayhpcnEsIGRlc2MpOwogfQogRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCS8qIHdha2V1cC1jYXBhYmxlIGlycXMgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGRyaXZlcnMgdGhhdAogCSAqIGRvbid0IG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBzbGVlcCBtb2RlIGJlaGF2aW9ycy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWlmIChvbikgewogCQlpZiAoZGVzYy0+d2FrZV9kZXB0aCsrID09IDApIHsKIAkJCXJldCA9IHNldF9pcnFfd2FrZV9yZWFsKGlycSwgb24pOwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJCX0KIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXRfaXJxX3dha2UpOwpAQCAtNDg0LDEyICs0ODQsMTIgQEAKIHN0YXRpYyB2b2lkIGlycV9maW5hbGl6ZV9vbmVzaG90KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAljaGlwX2J1c19sb2NrKGlycSwgZGVzYyk7Ci0Jc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgKGRlc2MtPnN0YXR1cyAmIElSUV9NQVNLRUQpKSB7CiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01BU0tFRDsKIAkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJY2hpcF9idXNfc3luY191bmxvY2soaXJxLCBkZXNjKTsKIH0KIApAQCAtNTE0LDkgKzUxNCw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJY3B1bWFza19jb3B5KG1hc2ssIGRlc2MtPmFmZmluaXR5KTsKLQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwogCiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbWFzayk7CiAJZnJlZV9jcHVtYXNrX3ZhcihtYXNrKTsKQEAgLTU0NSw3ICs1NDUsNyBAQAogCiAJCWF0b21pY19pbmMoJmRlc2MtPnRocmVhZHNfYWN0aXZlKTsKIAotCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkgewogCQkJLyoKIAkJCSAqIENIRUNLTUU6IFdlIG1pZ2h0IG5lZWQgYSBkZWRpY2F0ZWQKQEAgLTU1NSw5ICs1NTUsOSBAQAogCQkJICogcmV0cmlnZ2VycyB0aGUgaW50ZXJydXB0IGl0c2VsZiAtLS0gdGdseAogCQkJICovCiAJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFTkRJTkc7Ci0JCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCX0gZWxzZSB7Ci0JCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAKIAkJCWFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CiAKQEAgLTY3OSw3ICs2NzksNyBAQAogCS8qCiAJICogVGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIGhhcyB0byBiZSBleGVjdXRlZCBhdG9taWNhbGx5CiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlvbGRfcHRyID0gJmRlc2MtPmFjdGlvbjsKIAlvbGQgPSAqb2xkX3B0cjsKIAlpZiAob2xkKSB7CkBAIC03NzUsNyArNzc1LDcgQEAKIAkJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBTdHJpY3RseSBubyBuZWVkIHRvIHdha2UgaXQgdXAsIGJ1dCBodW5nX3Rhc2sgY29tcGxhaW5zCkBAIC04MDIsNyArODAyLDcgQEAKIAlyZXQgPSAtRUJVU1k7CiAKIG91dF90aHJlYWQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWYgKG5ldy0+dGhyZWFkKSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IG5ldy0+dGhyZWFkOwogCkBAIC04NDQsNyArODQ0LDcgQEAKIAlpZiAoIWRlc2MpCiAJCXJldHVybiBOVUxMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGFjdGlvbnMgcGVyIElSUSBkZXNjcmlwdG9yLCBmaW5kIHRoZSByaWdodApAQCAtODU2LDcgKzg1Niw3IEBACiAKIAkJaWYgKCFhY3Rpb24pIHsKIAkJCVdBUk4oMSwgIlRyeWluZyB0byBmcmVlIGFscmVhZHktZnJlZSBJUlEgJWRcbiIsIGlycSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtODg0LDcgKzg4NCw3IEBACiAJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAKIAl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IGZjYjZjOTYuLjI0MTk2MjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMjcsNyArMjcsNyBAQAogCWlmICghZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQogCQlyZXR1cm47CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlc2MtPmxvY2spOworCWFzc2VydF9yYXdfc3Bpbl9sb2NrZWQoJmRlc2MtPmxvY2spOwogCiAJLyoKIAkgKiBJZiB0aGVyZSB3YXMgYSB2YWxpZCBtYXNrIHRvIHdvcmsgd2l0aCwgcGxlYXNlCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jIGIva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYwppbmRleCAzZmQzMDE5Li4yNmJhYzlkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCisrKyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkJCQkiZm9yIG1pZ3JhdGlvbi5cbiIsIGlycSk7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0Jc3Bpbl9sb2NrX2luaXQoJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2tfaW5pdCgmZGVzYy0+bG9jayk7CiAJZGVzYy0+bm9kZSA9IG5vZGU7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2MtPmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKIAlpbml0X2NvcHlfa3N0YXRfaXJxcyhvbGRfZGVzYywgZGVzYywgbm9kZSwgbnJfY3B1X2lkcyk7CkBAIC02Nyw3ICs2Nyw3IEBACiAKIAlpcnEgPSBvbGRfZGVzYy0+aXJxOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc3BhcnNlX2lycV9sb2NrLCBmbGFncyk7CiAKIAkvKiBXZSBoYXZlIHRvIGNoZWNrIGl0IHRvIGF2b2lkIHJhY2VzIHdpdGggYW5vdGhlciBDUFUgKi8KIAlkZXNjID0gaXJxX2Rlc2NfcHRyc1tpcnFdOwpAQCAtOTEsNyArOTEsNyBAQAogCX0KIAogCWlycV9kZXNjX3B0cnNbaXJxXSA9IGRlc2M7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BhcnNlX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOwogCiAJLyogZnJlZSB0aGUgb2xkIG9uZSAqLwogCWZyZWVfb25lX2lycV9kZXNjKG9sZF9kZXNjLCBkZXNjKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXJldHVybiBkZXNjOwogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBkZXNjOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wbS5jIGIva2VybmVsL2lycS9wbS5jCmluZGV4IGEwYmIwOWUuLjBkNDAwNWQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3BtLmMKKysrIGIva2VybmVsL2lycS9wbS5jCkBAIC0yOCw5ICsyOCw5IEBACiAJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCV9fZGlzYWJsZV9pcnEoZGVzYywgaXJxLCB0cnVlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCX0KIAogCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykKQEAgLTU2LDkgKzU2LDkgQEAKIAkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgdHJ1ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZXN1bWVfZGV2aWNlX2lycXMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCAwODMyMTQ1Li42ZjUwZWNjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZm9yIChhY3Rpb24gPSBkZXNjLT5hY3Rpb24gOyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgewogCQlpZiAoKGFjdGlvbiAhPSBuZXdfYWN0aW9uKSAmJiBhY3Rpb24tPm5hbWUgJiYKIAkJCQkhc3RyY21wKG5ld19hY3Rpb24tPm5hbWUsIGFjdGlvbi0+bmFtZSkpIHsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IGU0OWVhMWMuLjg5ZmI5MGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaW50IG9rID0gMCwgd29yayA9IDA7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCS8qIEFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIHByb2Nlc3NvciAqLwogCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykgewogCQkvKgpAQCAtMzcsMTMgKzM3LDEzIEBACiAJCSAqLwogCQlpZiAoZGVzYy0+YWN0aW9uICYmIChkZXNjLT5hY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpKQogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRU5ESU5HOwotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCXJldHVybiBvazsKIAl9CiAJLyogSG9ub3VyIHRoZSBub3JtYWwgSVJRIGxvY2tpbmcgKi8KIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCiAJd2hpbGUgKGFjdGlvbikgewogCQkvKiBPbmx5IHNoYXJlZCBJUlEgaGFuZGxlcnMgYXJlIHNhZmUgdG8gY2FsbCAqLwpAQCAtNTYsNyArNTYsNyBAQAogCX0KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCS8qIE5vdyBjbGVhbiB1cCB0aGUgZmxhZ3MgKi8KLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAogCS8qCkBAIC02OCw5ICs2OCw5IEBACiAJCSAqIFBlcmZvcm0gcmVhbCBJUlEgcHJvY2Vzc2luZyBmb3IgdGhlIElSUSB3ZSBkZWZlcnJlZAogCQkgKi8KIAkJd29yayA9IDE7Ci0JCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAkJaGFuZGxlX0lSUV9ldmVudChpcnEsIGFjdGlvbik7Ci0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOwogCX0KIAlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOwpAQCAtODAsNyArODAsNyBAQAogCSAqLwogCWlmICh3b3JrICYmIGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW5kKQogCQlkZXNjLT5jaGlwLT5lbmQoaXJxKTsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCXJldHVybiBvazsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggZjMzNmUyMS4uYTlhOTNkOSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTA4Miw2ICsxMDgzLDY0IEBACiAJfQogfQogCitzaXplX3QgY3Jhc2hfZ2V0X21lbW9yeV9zaXplKHZvaWQpCit7CisJc2l6ZV90IHNpemU7CisJbXV0ZXhfbG9jaygma2V4ZWNfbXV0ZXgpOworCXNpemUgPSBjcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxOworCW11dGV4X3VubG9jaygma2V4ZWNfbXV0ZXgpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3Jlc2VydmVkX3BoeXNfcmFuZ2UodW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJZm9yIChhZGRyID0gYmVnaW47IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKGFkZHIgPj4gUEFHRV9TSElGVCkpOworCQlpbml0X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UoYWRkciA+PiBQQUdFX1NISUZUKSk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKGFkZHIpKTsKKwkJdG90YWxyYW1fcGFnZXMrKzsKKwl9Cit9CisKK2ludCBjcmFzaF9zaHJpbmtfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCisJbXV0ZXhfbG9jaygma2V4ZWNfbXV0ZXgpOworCisJaWYgKGtleGVjX2NyYXNoX2ltYWdlKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gdW5sb2NrOworCX0KKwlzdGFydCA9IGNyYXNoa19yZXMuc3RhcnQ7CisJZW5kID0gY3Jhc2hrX3Jlcy5lbmQ7CisKKwlpZiAobmV3X3NpemUgPj0gZW5kIC0gc3RhcnQgKyAxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWlmIChuZXdfc2l6ZSA9PSBlbmQgLSBzdGFydCArIDEpCisJCQlyZXQgPSAwOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlzdGFydCA9IHJvdW5kdXAoc3RhcnQsIFBBR0VfU0laRSk7CisJZW5kID0gcm91bmR1cChzdGFydCArIG5ld19zaXplLCBQQUdFX1NJWkUpOworCisJZnJlZV9yZXNlcnZlZF9waHlzX3JhbmdlKGVuZCwgY3Jhc2hrX3Jlcy5lbmQpOworCisJaWYgKHN0YXJ0ID09IGVuZCkgeworCQljcmFzaGtfcmVzLmVuZCA9IGVuZDsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmY3Jhc2hrX3Jlcyk7CisJfSBlbHNlCisJCWNyYXNoa19yZXMuZW5kID0gZW5kIC0gMTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygma2V4ZWNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB1MzIgKmFwcGVuZF9lbGZfbm90ZSh1MzIgKmJ1ZiwgY2hhciAqbmFtZSwgdW5zaWduZWQgdHlwZSwgdm9pZCAqZGF0YSwKIAkJCSAgICBzaXplX3QgZGF0YV9sZW4pCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwva2ZpZm8uYyBiL2tlcm5lbC9rZmlmby5jCmluZGV4IDM3NjVmZjMuLmU5MmQ1MTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZmlmby5jCisrKyBiL2tlcm5lbC9rZmlmby5jCkBAIC0xLDYgKzEsNyBAQAogLyoKLSAqIEEgc2ltcGxlIGtlcm5lbCBGSUZPIGltcGxlbWVudGF0aW9uLgorICogQSBnZW5lcmljIGtlcm5lbCBGSUZPIGltcGxlbWVudGF0aW9uLgogICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjUsNTAgKzI2LDQ4IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdGF0aWMgdm9pZCBfa2ZpZm9faW5pdChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJdW5zaWduZWQgaW50IHNpemUpCit7CisJZmlmby0+YnVmZmVyID0gYnVmZmVyOworCWZpZm8tPnNpemUgPSBzaXplOworCisJa2ZpZm9fcmVzZXQoZmlmbyk7Cit9CiAKIC8qKgotICoga2ZpZm9faW5pdCAtIGFsbG9jYXRlcyBhIG5ldyBGSUZPIHVzaW5nIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlcgorICoga2ZpZm9faW5pdCAtIGluaXRpYWxpemUgYSBGSUZPIHVzaW5nIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlcgorICogQGZpZm86IHRoZSBmaWZvIHRvIGFzc2lnbiB0aGUgYnVmZmVyCiAgKiBAYnVmZmVyOiB0aGUgcHJlYWxsb2NhdGVkIGJ1ZmZlciB0byBiZSB1c2VkLgogICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIsIHRoaXMgaGF2ZSB0byBiZSBhIHBvd2VyIG9mIDIuCi0gKiBAZ2ZwX21hc2s6IGdldF9mcmVlX3BhZ2VzIG1hc2ssIHBhc3NlZCB0byBrbWFsbG9jKCkKLSAqIEBsb2NrOiB0aGUgbG9jayB0byBiZSB1c2VkIHRvIHByb3RlY3QgdGhlIGZpZm8gYnVmZmVyCiAgKgotICogRG8gTk9UIHBhc3MgdGhlIGtmaWZvIHRvIGtmaWZvX2ZyZWUoKSBhZnRlciB1c2UhIFNpbXBseSBmcmVlIHRoZQotICogJnN0cnVjdCBrZmlmbyB3aXRoIGtmcmVlKCkuCiAgKi8KLXN0cnVjdCBrZmlmbyAqa2ZpZm9faW5pdCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplLAotCQkJIGdmcF90IGdmcF9tYXNrLCBzcGlubG9ja190ICpsb2NrKQordm9pZCBrZmlmb19pbml0KHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlzdHJ1Y3Qga2ZpZm8gKmZpZm87Ci0KIAkvKiBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyICovCiAJQlVHX09OKCFpc19wb3dlcl9vZl8yKHNpemUpKTsKIAotCWZpZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2ZpZm8pLCBnZnBfbWFzayk7Ci0JaWYgKCFmaWZvKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWZpZm8tPmJ1ZmZlciA9IGJ1ZmZlcjsKLQlmaWZvLT5zaXplID0gc2l6ZTsKLQlmaWZvLT5pbiA9IGZpZm8tPm91dCA9IDA7Ci0JZmlmby0+bG9jayA9IGxvY2s7Ci0KLQlyZXR1cm4gZmlmbzsKKwlfa2ZpZm9faW5pdChmaWZvLCBidWZmZXIsIHNpemUpOwogfQogRVhQT1JUX1NZTUJPTChrZmlmb19pbml0KTsKIAogLyoqCi0gKiBrZmlmb19hbGxvYyAtIGFsbG9jYXRlcyBhIG5ldyBGSUZPIGFuZCBpdHMgaW50ZXJuYWwgYnVmZmVyCi0gKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciB0byBiZSBhbGxvY2F0ZWQuCisgKiBrZmlmb19hbGxvYyAtIGFsbG9jYXRlcyBhIG5ldyBGSUZPIGludGVybmFsIGJ1ZmZlcgorICogQGZpZm86IHRoZSBmaWZvIHRvIGFzc2lnbiB0aGVuIG5ldyBidWZmZXIKKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZCwgdGhpcyBoYXZlIHRvIGJlIGEgcG93ZXIgb2YgMi4KICAqIEBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGttYWxsb2MoKQotICogQGxvY2s6IHRoZSBsb2NrIHRvIGJlIHVzZWQgdG8gcHJvdGVjdCB0aGUgZmlmbyBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBhIG5ldyBmaWZvIGludGVybmFsIGJ1ZmZlcgogICoKICAqIFRoZSBzaXplIHdpbGwgYmUgcm91bmRlZC11cCB0byBhIHBvd2VyIG9mIDIuCisgKiBUaGUgYnVmZmVyIHdpbGwgYmUgcmVsZWFzZSB3aXRoIGtmaWZvX2ZyZWUoKS4KKyAqIFJldHVybiAwIGlmIG5vIGVycm9yLCBvdGhlcndpc2UgdGhlIGFuIGVycm9yIGNvZGUKICAqLwotc3RydWN0IGtmaWZvICprZmlmb19hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHNwaW5sb2NrX3QgKmxvY2spCitpbnQga2ZpZm9fYWxsb2Moc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCXN0cnVjdCBrZmlmbyAqcmV0OwogCiAJLyoKIAkgKiByb3VuZCB1cCB0byB0aGUgbmV4dCBwb3dlciBvZiAyLCBzaW5jZSBvdXIgJ2xldCB0aGUgaW5kaWNlcwpAQCAtODAsNDkgKzc5LDQ3IEBACiAJfQogCiAJYnVmZmVyID0ga21hbGxvYyhzaXplLCBnZnBfbWFzayk7Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmICghYnVmZmVyKSB7CisJCV9rZmlmb19pbml0KGZpZm8sIDAsIDApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQlyZXQgPSBrZmlmb19pbml0KGJ1ZmZlciwgc2l6ZSwgZ2ZwX21hc2ssIGxvY2spOworCV9rZmlmb19pbml0KGZpZm8sIGJ1ZmZlciwgc2l6ZSk7CiAKLQlpZiAoSVNfRVJSKHJldCkpCi0JCWtmcmVlKGJ1ZmZlcik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChrZmlmb19hbGxvYyk7CiAKIC8qKgotICoga2ZpZm9fZnJlZSAtIGZyZWVzIHRoZSBGSUZPCisgKiBrZmlmb19mcmVlIC0gZnJlZXMgdGhlIEZJRk8gaW50ZXJuYWwgYnVmZmVyCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgZnJlZWQuCiAgKi8KIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pCiB7CiAJa2ZyZWUoZmlmby0+YnVmZmVyKTsKLQlrZnJlZShmaWZvKTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZpZm9fZnJlZSk7CiAKIC8qKgotICogX19rZmlmb19wdXQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPLCBubyBsb2NraW5nIHZlcnNpb24KKyAqIGtmaWZvX3NraXAgLSBza2lwIG91dHB1dCBkYXRhCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEBidWZmZXI6IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGJ1ZmZlciBpbnRvCi0gKiB0aGUgRklGTyBkZXBlbmRpbmcgb24gdGhlIGZyZWUgc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAqIGJ5dGVzIGNvcGllZC4KLSAqCi0gKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKLSAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAKICAqLwotdW5zaWduZWQgaW50IF9fa2ZpZm9fcHV0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKK3ZvaWQga2ZpZm9fc2tpcChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA8IGtmaWZvX2xlbihmaWZvKSkgeworCQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbGVuKTsKKwkJcmV0dXJuOworCX0KKwlrZmlmb19yZXNldF9vdXQoZmlmbyk7Cit9CitFWFBPUlRfU1lNQk9MKGtmaWZvX3NraXApOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19pbl9kYXRhKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZikKIHsKIAl1bnNpZ25lZCBpbnQgbDsKIAotCWxlbiA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBmaWZvLT5pbiArIGZpZm8tPm91dCk7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+b3V0IGluZGV4IC1iZWZvcmUtIHdlCiAJICogc3RhcnQgcHV0dGluZyBieXRlcyBpbnRvIHRoZSBrZmlmby4KQEAgLTEzMCw0NSArMTI3LDIxIEBACiAKIAlzbXBfbWIoKTsKIAorCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPmluICsgb2ZmKTsKKwogCS8qIGZpcnN0IHB1dCB0aGUgZGF0YSBzdGFydGluZyBmcm9tIGZpZm8tPmluIHRvIGJ1ZmZlciBlbmQgKi8KLQlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIChmaWZvLT5pbiAmIChmaWZvLT5zaXplIC0gMSkpKTsKLQltZW1jcHkoZmlmby0+YnVmZmVyICsgKGZpZm8tPmluICYgKGZpZm8tPnNpemUgLSAxKSksIGJ1ZmZlciwgbCk7CisJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOworCW1lbWNweShmaWZvLT5idWZmZXIgKyBvZmYsIGZyb20sIGwpOwogCiAJLyogdGhlbiBwdXQgdGhlIHJlc3QgKGlmIGFueSkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCi0JbWVtY3B5KGZpZm8tPmJ1ZmZlciwgYnVmZmVyICsgbCwgbGVuIC0gbCk7Ci0KLQkvKgotCSAqIEVuc3VyZSB0aGF0IHdlIGFkZCB0aGUgYnl0ZXMgdG8gdGhlIGtmaWZvIC1iZWZvcmUtCi0JICogd2UgdXBkYXRlIHRoZSBmaWZvLT5pbiBpbmRleC4KLQkgKi8KLQotCXNtcF93bWIoKTsKLQotCWZpZm8tPmluICs9IGxlbjsKLQotCXJldHVybiBsZW47CisJbWVtY3B5KGZpZm8tPmJ1ZmZlciwgZnJvbSArIGwsIGxlbiAtIGwpOwogfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX3B1dCk7CiAKLS8qKgotICogX19rZmlmb19nZXQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPLCBubyBsb2NraW5nIHZlcnNpb24KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGJ1ZmZlcjogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCi0gKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCi0gKiBAYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgotICoKLSAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAotICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCi0gKi8KLXVuc2lnbmVkIGludCBfX2tmaWZvX2dldChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fb3V0X2RhdGEoc3RydWN0IGtmaWZvICpmaWZvLAorCQl2b2lkICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZikKIHsKIAl1bnNpZ25lZCBpbnQgbDsKIAotCWxlbiA9IG1pbihsZW4sIGZpZm8tPmluIC0gZmlmby0+b3V0KTsKLQogCS8qCiAJICogRW5zdXJlIHRoYXQgd2Ugc2FtcGxlIHRoZSBmaWZvLT5pbiBpbmRleCAtYmVmb3JlLSB3ZQogCSAqIHN0YXJ0IHJlbW92aW5nIGJ5dGVzIGZyb20gdGhlIGtmaWZvLgpAQCAtMTc2LDIyICsxNDksMjUyIEBACiAKIAlzbXBfcm1iKCk7CiAKKwlvZmYgPSBfX2tmaWZvX29mZihmaWZvLCBmaWZvLT5vdXQgKyBvZmYpOworCiAJLyogZmlyc3QgZ2V0IHRoZSBkYXRhIGZyb20gZmlmby0+b3V0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwotCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gKGZpZm8tPm91dCAmIChmaWZvLT5zaXplIC0gMSkpKTsKLQltZW1jcHkoYnVmZmVyLCBmaWZvLT5idWZmZXIgKyAoZmlmby0+b3V0ICYgKGZpZm8tPnNpemUgLSAxKSksIGwpOworCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKKwltZW1jcHkodG8sIGZpZm8tPmJ1ZmZlciArIG9mZiwgbCk7CiAKIAkvKiB0aGVuIGdldCB0aGUgcmVzdCAoaWYgYW55KSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLwotCW1lbWNweShidWZmZXIgKyBsLCBmaWZvLT5idWZmZXIsIGxlbiAtIGwpOworCW1lbWNweSh0byArIGwsIGZpZm8tPmJ1ZmZlciwgbGVuIC0gbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX2RhdGEoc3RydWN0IGtmaWZvICpmaWZvLAorCSBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZikKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKwlpbnQgcmV0OwogCiAJLyoKLQkgKiBFbnN1cmUgdGhhdCB3ZSByZW1vdmUgdGhlIGJ5dGVzIGZyb20gdGhlIGtmaWZvIC1iZWZvcmUtCi0JICogd2UgdXBkYXRlIHRoZSBmaWZvLT5vdXQgaW5kZXguCisJICogRW5zdXJlIHRoYXQgd2Ugc2FtcGxlIHRoZSBmaWZvLT5vdXQgaW5kZXggLWJlZm9yZS0gd2UKKwkgKiBzdGFydCBwdXR0aW5nIGJ5dGVzIGludG8gdGhlIGtmaWZvLgogCSAqLwogCiAJc21wX21iKCk7CiAKLQlmaWZvLT5vdXQgKz0gbGVuOworCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPmluICsgb2ZmKTsKKworCS8qIGZpcnN0IHB1dCB0aGUgZGF0YSBzdGFydGluZyBmcm9tIGZpZm8tPmluIHRvIGJ1ZmZlciBlbmQgKi8KKwlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIG9mZik7CisJcmV0ID0gY29weV9mcm9tX3VzZXIoZmlmby0+YnVmZmVyICsgb2ZmLCBmcm9tLCBsKTsKKworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0ICsgbGVuIC0gbDsKKworCS8qIHRoZW4gcHV0IHRoZSByZXN0IChpZiBhbnkpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLworCXJldHVybiBjb3B5X2Zyb21fdXNlcihmaWZvLT5idWZmZXIsIGZyb20gKyBsLCBsZW4gLSBsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX2RhdGEoc3RydWN0IGtmaWZvICpmaWZvLAorCQl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCit7CisJdW5zaWduZWQgaW50IGw7CisJaW50IHJldDsKKworCS8qCisJICogRW5zdXJlIHRoYXQgd2Ugc2FtcGxlIHRoZSBmaWZvLT5pbiBpbmRleCAtYmVmb3JlLSB3ZQorCSAqIHN0YXJ0IHJlbW92aW5nIGJ5dGVzIGZyb20gdGhlIGtmaWZvLgorCSAqLworCisJc21wX3JtYigpOworCisJb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+b3V0ICsgb2ZmKTsKKworCS8qIGZpcnN0IGdldCB0aGUgZGF0YSBmcm9tIGZpZm8tPm91dCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KKwlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIG9mZik7CisJcmV0ID0gY29weV90b191c2VyKHRvLCBmaWZvLT5idWZmZXIgKyBvZmYsIGwpOworCisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQgKyBsZW4gLSBsOworCisJLyogdGhlbiBnZXQgdGhlIHJlc3QgKGlmIGFueSkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KKwlyZXR1cm4gY29weV90b191c2VyKHRvICsgbCwgZmlmby0+YnVmZmVyLCBsZW4gLSBsKTsKK30KKwordW5zaWduZWQgaW50IF9fa2ZpZm9faW5fbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKGtmaWZvX2F2YWlsKGZpZm8pIDwgbGVuICsgcmVjc2l6ZSkKKwkJcmV0dXJuIGxlbiArIDE7CisKKwlfX2tmaWZvX2luX2RhdGEoZmlmbywgZnJvbSwgbGVuLCByZWNzaXplKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19pbl9uKTsKKworLyoqCisgKiBrZmlmb19pbiAtIHB1dHMgc29tZSBkYXRhIGludG8gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gYnVmZmVyIGludG8KKyAqIHRoZSBGSUZPIGRlcGVuZGluZyBvbiB0aGUgZnJlZSBzcGFjZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgorICogYnl0ZXMgY29waWVkLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3Vuc2lnbmVkIGludCBrZmlmb19pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCisJCQkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlsZW4gPSBtaW4oa2ZpZm9fYXZhaWwoZmlmbyksIGxlbik7CisKKwlfX2tmaWZvX2luX2RhdGEoZmlmbywgZnJvbSwgbGVuLCAwKTsKKwlfX2tmaWZvX2FkZF9pbihmaWZvLCBsZW4pOworCXJldHVybiBsZW47Cit9CitFWFBPUlRfU1lNQk9MKGtmaWZvX2luKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9faW5fZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJcmV0dXJuIF9fa2ZpZm9faW5fcmVjKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9faW5fZ2VuZXJpYyk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX291dF9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKGtmaWZvX2xlbihmaWZvKSA8IGxlbiArIHJlY3NpemUpCisJCXJldHVybiBsZW47CisKKwlfX2tmaWZvX291dF9kYXRhKGZpZm8sIHRvLCBsZW4sIHJlY3NpemUpOworCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4gKyByZWNzaXplKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19vdXRfbik7CisKKy8qKgorICoga2ZpZm9fb3V0IC0gZ2V0cyBzb21lIGRhdGEgZnJvbSB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgorICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQorICogQHRvIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCit1bnNpZ25lZCBpbnQga2ZpZm9fb3V0KHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgY2hhciAqdG8sIHVuc2lnbmVkIGludCBsZW4pCit7CisJbGVuID0gbWluKGtmaWZvX2xlbihmaWZvKSwgbGVuKTsKKworCV9fa2ZpZm9fb3V0X2RhdGEoZmlmbywgdG8sIGxlbiwgMCk7CisJX19rZmlmb19hZGRfb3V0KGZpZm8sIGxlbik7CiAKIAlyZXR1cm4gbGVuOwogfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX2dldCk7CitFWFBPUlRfU1lNQk9MKGtmaWZvX291dCk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX291dF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKK3sKKwlyZXR1cm4gX19rZmlmb19vdXRfcmVjKGZpZm8sIHRvLCBsZW4sIHJlY3NpemUsIHRvdGFsKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19vdXRfZ2VuZXJpYyk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKGtmaWZvX2F2YWlsKGZpZm8pIDwgbGVuICsgcmVjc2l6ZSkKKwkJcmV0dXJuIGxlbiArIDE7CisKKwlyZXR1cm4gX19rZmlmb19mcm9tX3VzZXJfZGF0YShmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2Zyb21fdXNlcl9uKTsKKworLyoqCisgKiBrZmlmb19mcm9tX3VzZXIgLSBwdXRzIHNvbWUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlCisgKiBGSUZPIGRlcGVuZGluZyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCit1bnNpZ25lZCBpbnQga2ZpZm9fZnJvbV91c2VyKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlsZW4gPSBtaW4oa2ZpZm9fYXZhaWwoZmlmbyksIGxlbik7CisJbGVuIC09IF9fa2ZpZm9fZnJvbV91c2VyX2RhdGEoZmlmbywgZnJvbSwgbGVuLCAwKTsKKwlfX2tmaWZvX2FkZF9pbihmaWZvLCBsZW4pOworCXJldHVybiBsZW47Cit9CitFWFBPUlRfU1lNQk9MKGtmaWZvX2Zyb21fdXNlcik7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJcmV0dXJuIF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNsZW4sCisJdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJdW5zaWduZWQgaW50IHJldDsKKworCWlmIChrZmlmb19sZW4oZmlmbykgPCByZWNsZW4gKyByZWNzaXplKQorCQlyZXR1cm4gbGVuOworCisJcmV0ID0gX19rZmlmb190b191c2VyX2RhdGEoZmlmbywgdG8sIHJlY2xlbiwgcmVjc2l6ZSk7CisKKwlpZiAobGlrZWx5KHJldCA9PSAwKSkKKwkJX19rZmlmb19hZGRfb3V0KGZpZm8sIHJlY2xlbiArIHJlY3NpemUpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb190b191c2VyX24pOworCisvKioKKyAqIGtmaWZvX3RvX3VzZXIgLSBnZXRzIGRhdGEgZnJvbSB0aGUgRklGTyBhbmQgd3JpdGUgaXQgdG8gdXNlciBzcGFjZQorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgorICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQorICogQHRvIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCit1bnNpZ25lZCBpbnQga2ZpZm9fdG9fdXNlcihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWxlbiA9IG1pbihrZmlmb19sZW4oZmlmbyksIGxlbik7CisJbGVuIC09IF9fa2ZpZm9fdG9fdXNlcl9kYXRhKGZpZm8sIHRvLCBsZW4sIDApOworCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4pOworCXJldHVybiBsZW47Cit9CitFWFBPUlRfU1lNQk9MKGtmaWZvX3RvX3VzZXIpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKK3sKKwlyZXR1cm4gX19rZmlmb190b191c2VyX3JlYyhmaWZvLCB0bywgbGVuLCByZWNzaXplLCB0b3RhbCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fdG9fdXNlcl9nZW5lcmljKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKHJlY3NpemUgPT0gMCkKKwkJcmV0dXJuIGtmaWZvX2F2YWlsKGZpZm8pOworCisJcmV0dXJuIF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX3BlZWtfZ2VuZXJpYyk7CisKK3ZvaWQgX19rZmlmb19za2lwX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlfX2tmaWZvX3NraXBfcmVjKGZpZm8sIHJlY3NpemUpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX3NraXBfZ2VuZXJpYyk7CisKZGlmZiAtLWdpdCBhL2tlcm5lbC9rc3lzZnMuYyBiL2tlcm5lbC9rc3lzZnMuYwppbmRleCA1MjhkZDc4Li4zZmVhZjVhIDEwMDY0NAotLS0gYS9rZXJuZWwva3N5c2ZzLmMKKysrIGIva2VybmVsL2tzeXNmcy5jCkBAIC0xMDAsNiArMTAwLDI2IEBACiB9CiBLRVJORUxfQVRUUl9STyhrZXhlY19jcmFzaF9sb2FkZWQpOwogCitzdGF0aWMgc3NpemVfdCBrZXhlY19jcmFzaF9zaXplX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV6dVxuIiwgY3Jhc2hfZ2V0X21lbW9yeV9zaXplKCkpOworfQorc3RhdGljIHNzaXplX3Qga2V4ZWNfY3Jhc2hfc2l6ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBjbnQ7CisJaW50IHJldDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZjbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGNyYXNoX3Nocmlua19tZW1vcnkoY250KTsKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGNvdW50OworfQorS0VSTkVMX0FUVFJfUlcoa2V4ZWNfY3Jhc2hfc2l6ZSk7CisKIHN0YXRpYyBzc2l6ZV90IHZtY29yZWluZm9fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCSAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTE0Nyw2ICsxNjcsNyBAQAogI2lmZGVmIENPTkZJR19LRVhFQwogCSZrZXhlY19sb2FkZWRfYXR0ci5hdHRyLAogCSZrZXhlY19jcmFzaF9sb2FkZWRfYXR0ci5hdHRyLAorCSZrZXhlY19jcmFzaF9zaXplX2F0dHIuYXR0ciwKIAkmdm1jb3JlaW5mb19hdHRyLmF0dHIsCiAjZW5kaWYKIAlOVUxMCmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCBhYjdhZTU3Li5mYmI2MjIyIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE1MCw2ICsxNTAsMjkgQEAKIEVYUE9SVF9TWU1CT0woa3RocmVhZF9jcmVhdGUpOwogCiAvKioKKyAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KKyAqIEBwOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgorICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgorICoKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAorICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCisgKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCisgKi8KK3ZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUocCwgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CisJcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOworfQorRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOworCisvKioKICAqIGt0aHJlYWRfc3RvcCAtIHN0b3AgYSB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggZjVkY2QzNi4uNWZlYWRkYyAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC03MywxMSArNzMsMTEgQEAKICAqIHRvIHVzZSBhIHJhdyBzcGlubG9jayAtIHdlIHJlYWxseSBkb250IHdhbnQgdGhlIHNwaW5sb2NrCiAgKiBjb2RlIHRvIHJlY3Vyc2UgYmFjayBpbnRvIHRoZSBsb2NrZGVwIGNvZGUuLi4KICAqLwotc3RhdGljIHJhd19zcGlubG9ja190IGxvY2tkZXBfbG9jayA9IChyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgYXJjaF9zcGlubG9ja190IGxvY2tkZXBfbG9jayA9IChhcmNoX3NwaW5sb2NrX3QpX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogc3RhdGljIGludCBncmFwaF9sb2NrKHZvaWQpCiB7Ci0JX19yYXdfc3Bpbl9sb2NrKCZsb2NrZGVwX2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZsb2NrZGVwX2xvY2spOwogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgaWYgYW5vdGhlciBDUFUgZGV0ZWN0ZWQgYSBidWcgd2hpbGUKIAkgKiB3YWxraW5nIHRoZSBncmFwaCB3ZSBkb250IGNoYW5nZSBpdCAod2hpbGUgdGhlIG90aGVyCkBAIC04NSw3ICs4NSw3IEBACiAJICogZHJvcHBlZCBhbHJlYWR5KQogCSAqLwogCWlmICghZGVidWdfbG9ja3MpIHsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CisJCWFyY2hfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAkvKiBwcmV2ZW50IGFueSByZWN1cnNpb25zIHdpdGhpbiBsb2NrZGVwIGZyb20gY2F1c2luZyBkZWFkbG9ja3MgKi8KQEAgLTk1LDExICs5NSwxMSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBncmFwaF91bmxvY2sodm9pZCkKIHsKLQlpZiAoZGVidWdfbG9ja3MgJiYgIV9fcmF3X3NwaW5faXNfbG9ja2VkKCZsb2NrZGVwX2xvY2spKQorCWlmIChkZWJ1Z19sb2NrcyAmJiAhYXJjaF9zcGluX2lzX2xvY2tlZCgmbG9ja2RlcF9sb2NrKSkKIAkJcmV0dXJuIERFQlVHX0xPQ0tTX1dBUk5fT04oMSk7CiAKIAljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbi0tOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZsb2NrZGVwX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMSw3ICsxMTEsNyBAQAogewogCWludCByZXQgPSBkZWJ1Z19sb2Nrc19vZmYoKTsKIAotCV9fcmF3X3NwaW5fdW5sb2NrKCZsb2NrZGVwX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQwLDcgKzE0MCw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHNbTUFYX0xPQ0tERVBfS0VZU10sIGxvY2tfc3RhdHMpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzW01BWF9MT0NLREVQX0tFWVNdLAorCQkgICAgICBjcHVfbG9ja19zdGF0cyk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGxvY2tzdGF0X2Nsb2NrKHZvaWQpCiB7CkBAIC0xNjgsNyArMTY5LDcgQEAKIAlpZiAodGltZSA+IGx0LT5tYXgpCiAJCWx0LT5tYXggPSB0aW1lOwogCi0JaWYgKHRpbWUgPCBsdC0+bWluIHx8ICFsdC0+bWluKQorCWlmICh0aW1lIDwgbHQtPm1pbiB8fCAhbHQtPm5yKQogCQlsdC0+bWluID0gdGltZTsKIAogCWx0LT50b3RhbCArPSB0aW1lOwpAQCAtMTc3LDggKzE3OCwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja190aW1lX2FkZChzdHJ1Y3QgbG9ja190aW1lICpzcmMsIHN0cnVjdCBsb2NrX3RpbWUgKmRzdCkKIHsKLQlkc3QtPm1pbiArPSBzcmMtPm1pbjsKLQlkc3QtPm1heCArPSBzcmMtPm1heDsKKwlpZiAoIXNyYy0+bnIpCisJCXJldHVybjsKKworCWlmIChzcmMtPm1heCA+IGRzdC0+bWF4KQorCQlkc3QtPm1heCA9IHNyYy0+bWF4OworCisJaWYgKHNyYy0+bWluIDwgZHN0LT5taW4gfHwgIWRzdC0+bnIpCisJCWRzdC0+bWluID0gc3JjLT5taW47CisKIAlkc3QtPnRvdGFsICs9IHNyYy0+dG90YWw7CiAJZHN0LT5uciArPSBzcmMtPm5yOwogfQpAQCAtMTkxLDcgKzE5OSw3IEBACiAJbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzKSk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqcGNzID0KLQkJCSZwZXJfY3B1KGxvY2tfc3RhdHMsIGNwdSlbY2xhc3MgLSBsb2NrX2NsYXNzZXNdOworCQkJJnBlcl9jcHUoY3B1X2xvY2tfc3RhdHMsIGNwdSlbY2xhc3MgLSBsb2NrX2NsYXNzZXNdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXRzLmNvbnRlbnRpb25fcG9pbnQpOyBpKyspCiAJCQlzdGF0cy5jb250ZW50aW9uX3BvaW50W2ldICs9IHBjcy0+Y29udGVudGlvbl9wb2ludFtpXTsKQEAgLTIxOCw3ICsyMjYsNyBAQAogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqY3B1X3N0YXRzID0KLQkJCSZwZXJfY3B1KGxvY2tfc3RhdHMsIGNwdSlbY2xhc3MgLSBsb2NrX2NsYXNzZXNdOworCQkJJnBlcl9jcHUoY3B1X2xvY2tfc3RhdHMsIGNwdSlbY2xhc3MgLSBsb2NrX2NsYXNzZXNdOwogCiAJCW1lbXNldChjcHVfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cykpOwogCX0KQEAgLTIyOCwxMiArMjM2LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqZ2V0X2xvY2tfc3RhdHMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewotCXJldHVybiAmZ2V0X2NwdV92YXIobG9ja19zdGF0cylbY2xhc3MgLSBsb2NrX2NsYXNzZXNdOworCXJldHVybiAmZ2V0X2NwdV92YXIoY3B1X2xvY2tfc3RhdHMpW2NsYXNzIC0gbG9ja19jbGFzc2VzXTsKIH0KIAogc3RhdGljIHZvaWQgcHV0X2xvY2tfc3RhdHMoc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzKQogewotCXB1dF9jcHVfdmFyKGxvY2tfc3RhdHMpOworCXB1dF9jcHVfdmFyKGNwdV9sb2NrX3N0YXRzKTsKIH0KIAogc3RhdGljIHZvaWQgbG9ja19yZWxlYXNlX2hvbGR0aW1lKHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQpAQCAtMzc5LDcgKzM4Nyw4IEBACiAJICogY29tcGxldGUgdHJhY2UgdGhhdCBtYXhlcyBvdXQgdGhlIGVudHJpZXMgcHJvdmlkZWQgd2lsbCBiZSByZXBvcnRlZAogCSAqIGFzIGluY29tcGxldGUsIGZyaWdnaW4gdXNlbGVzcyA8L3JhbnQ+CiAJICovCi0JaWYgKHRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzLTFdID09IFVMT05HX01BWCkKKwlpZiAodHJhY2UtPm5yX2VudHJpZXMgIT0gMCAmJgorCSAgICB0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcy0xXSA9PSBVTE9OR19NQVgpCiAJCXRyYWNlLT5ucl9lbnRyaWVzLS07CiAKIAl0cmFjZS0+bWF4X2VudHJpZXMgPSB0cmFjZS0+bnJfZW50cmllczsKQEAgLTExNjEsOSArMTE3MCw5IEBACiAJdGhpcy5jbGFzcyA9IGNsYXNzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmbG9ja2RlcF9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmbG9ja2RlcF9sb2NrKTsKIAlyZXQgPSBfX2xvY2tkZXBfY291bnRfZm9yd2FyZF9kZXBzKCZ0aGlzKTsKLQlfX3Jhd19zcGluX3VubG9jaygmbG9ja2RlcF9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZsb2NrZGVwX2xvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMTg4LDkgKzExOTcsOSBAQAogCXRoaXMuY2xhc3MgPSBjbGFzczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmxvY2tkZXBfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmxvY2tkZXBfbG9jayk7CiAJcmV0ID0gX19sb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoJnRoaXMpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZsb2NrZGVwX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCA1ODQyYTcxLi5lOTZiOGVkIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0zNzAsOCArMzcwLDYgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAotI2lmbmRlZiBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCi0KIHN0YXRpYyB2b2lkICpwZXJjcHVfbW9kYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMzk1LDE1NCArMzkzLDYgQEAKIAlmcmVlX3BlcmNwdShmcmVlbWUpOwogfQogCi0jZWxzZSAvKiAuLi4gQ09ORklHX0hBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQSAqLwotCi0vKiBOdW1iZXIgb2YgYmxvY2tzIHVzZWQgYW5kIGFsbG9jYXRlZC4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGNwdV9udW1fdXNlZCwgcGNwdV9udW1fYWxsb2NhdGVkOwotLyogU2l6ZSBvZiBlYWNoIGJsb2NrLiAgLXZlIG1lYW5zIHVzZWQuICovCi1zdGF0aWMgaW50ICpwY3B1X3NpemU7Ci0KLXN0YXRpYyBpbnQgc3BsaXRfYmxvY2sodW5zaWduZWQgaW50IGksIHVuc2lnbmVkIHNob3J0IHNpemUpCi17Ci0JLyogUmVhbGxvY2F0aW9uIHJlcXVpcmVkPyAqLwotCWlmIChwY3B1X251bV91c2VkICsgMSA+IHBjcHVfbnVtX2FsbG9jYXRlZCkgewotCQlpbnQgKm5ldzsKLQotCQluZXcgPSBrcmVhbGxvYyhwY3B1X3NpemUsIHNpemVvZihuZXdbMF0pKnBjcHVfbnVtX2FsbG9jYXRlZCoyLAotCQkJICAgICAgIEdGUF9LRVJORUwpOwotCQlpZiAoIW5ldykKLQkJCXJldHVybiAwOwotCi0JCXBjcHVfbnVtX2FsbG9jYXRlZCAqPSAyOwotCQlwY3B1X3NpemUgPSBuZXc7Ci0JfQotCi0JLyogSW5zZXJ0IGEgbmV3IHN1YmJsb2NrICovCi0JbWVtbW92ZSgmcGNwdV9zaXplW2krMV0sICZwY3B1X3NpemVbaV0sCi0JCXNpemVvZihwY3B1X3NpemVbMF0pICogKHBjcHVfbnVtX3VzZWQgLSBpKSk7Ci0JcGNwdV9udW1fdXNlZCsrOwotCi0JcGNwdV9zaXplW2krMV0gLT0gc2l6ZTsKLQlwY3B1X3NpemVbaV0gPSBzaXplOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibG9ja19zaXplKGludCB2YWwpCi17Ci0JaWYgKHZhbCA8IDApCi0JCXJldHVybiAtdmFsOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkICpwZXJjcHVfbW9kYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAotCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQotewotCXVuc2lnbmVkIGxvbmcgZXh0cmE7Ci0JdW5zaWduZWQgaW50IGk7Ci0Jdm9pZCAqcHRyOwotCWludCBjcHU7Ci0KLQlpZiAoYWxpZ24gPiBQQUdFX1NJWkUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBlci1jcHUgYWxpZ25tZW50ICVsaSA+ICVsaVxuIiwKLQkJICAgICAgIG5hbWUsIGFsaWduLCBQQUdFX1NJWkUpOwotCQlhbGlnbiA9IFBBR0VfU0laRTsKLQl9Ci0KLQlwdHIgPSBfX3Blcl9jcHVfc3RhcnQ7Ci0JZm9yIChpID0gMDsgaSA8IHBjcHVfbnVtX3VzZWQ7IHB0ciArPSBibG9ja19zaXplKHBjcHVfc2l6ZVtpXSksIGkrKykgewotCQkvKiBFeHRyYSBmb3IgYWxpZ25tZW50IHJlcXVpcmVtZW50LiAqLwotCQlleHRyYSA9IEFMSUdOKCh1bnNpZ25lZCBsb25nKXB0ciwgYWxpZ24pIC0gKHVuc2lnbmVkIGxvbmcpcHRyOwotCQlCVUdfT04oaSA9PSAwICYmIGV4dHJhICE9IDApOwotCi0JCWlmIChwY3B1X3NpemVbaV0gPCAwIHx8IHBjcHVfc2l6ZVtpXSA8IGV4dHJhICsgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFRyYW5zZmVyIGV4dHJhIHRvIHByZXZpb3VzIGJsb2NrLiAqLwotCQlpZiAocGNwdV9zaXplW2ktMV0gPCAwKQotCQkJcGNwdV9zaXplW2ktMV0gLT0gZXh0cmE7Ci0JCWVsc2UKLQkJCXBjcHVfc2l6ZVtpLTFdICs9IGV4dHJhOwotCQlwY3B1X3NpemVbaV0gLT0gZXh0cmE7Ci0JCXB0ciArPSBleHRyYTsKLQotCQkvKiBTcGxpdCBibG9jayBpZiB3YXJyYW50ZWQgKi8KLQkJaWYgKHBjcHVfc2l6ZVtpXSAtIHNpemUgPiBzaXplb2YodW5zaWduZWQgbG9uZykpCi0JCQlpZiAoIXNwbGl0X2Jsb2NrKGksIHNpemUpKQotCQkJCXJldHVybiBOVUxMOwotCi0JCS8qIGFkZCB0aGUgcGVyLWNwdSBzY2FubmluZyBhcmVhcyAqLwotCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQkJa21lbWxlYWtfYWxsb2MocHRyICsgcGVyX2NwdV9vZmZzZXQoY3B1KSwgc2l6ZSwgMCwKLQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQkJLyogTWFyayBhbGxvY2F0ZWQgKi8KLQkJcGNwdV9zaXplW2ldID0gLXBjcHVfc2l6ZVtpXTsKLQkJcmV0dXJuIHB0cjsKLQl9Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgYWxsb2NhdGUgJWx1IGJ5dGVzIHBlcmNwdSBkYXRhXG4iLAotCSAgICAgICBzaXplKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgcGVyY3B1X21vZGZyZWUodm9pZCAqZnJlZW1lKQotewotCXVuc2lnbmVkIGludCBpOwotCXZvaWQgKnB0ciA9IF9fcGVyX2NwdV9zdGFydCArIGJsb2NrX3NpemUocGNwdV9zaXplWzBdKTsKLQlpbnQgY3B1OwotCi0JLyogRmlyc3QgZW50cnkgaXMgY29yZSBrZXJuZWwgcGVyY3B1IGRhdGEuICovCi0JZm9yIChpID0gMTsgaSA8IHBjcHVfbnVtX3VzZWQ7IHB0ciArPSBibG9ja19zaXplKHBjcHVfc2l6ZVtpXSksIGkrKykgewotCQlpZiAocHRyID09IGZyZWVtZSkgewotCQkJcGNwdV9zaXplW2ldID0gLXBjcHVfc2l6ZVtpXTsKLQkJCWdvdG8gZnJlZTsKLQkJfQotCX0KLQlCVUcoKTsKLQotIGZyZWU6Ci0JLyogcmVtb3ZlIHRoZSBwZXItY3B1IHNjYW5uaW5nIGFyZWFzICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJa21lbWxlYWtfZnJlZShmcmVlbWUgKyBwZXJfY3B1X29mZnNldChjcHUpKTsKLQotCS8qIE1lcmdlIHdpdGggcHJldmlvdXM/ICovCi0JaWYgKHBjcHVfc2l6ZVtpLTFdID49IDApIHsKLQkJcGNwdV9zaXplW2ktMV0gKz0gcGNwdV9zaXplW2ldOwotCQlwY3B1X251bV91c2VkLS07Ci0JCW1lbW1vdmUoJnBjcHVfc2l6ZVtpXSwgJnBjcHVfc2l6ZVtpKzFdLAotCQkJKHBjcHVfbnVtX3VzZWQgLSBpKSAqIHNpemVvZihwY3B1X3NpemVbMF0pKTsKLQkJaS0tOwotCX0KLQkvKiBNZXJnZSB3aXRoIG5leHQ/ICovCi0JaWYgKGkrMSA8IHBjcHVfbnVtX3VzZWQgJiYgcGNwdV9zaXplW2krMV0gPj0gMCkgewotCQlwY3B1X3NpemVbaV0gKz0gcGNwdV9zaXplW2krMV07Ci0JCXBjcHVfbnVtX3VzZWQtLTsKLQkJbWVtbW92ZSgmcGNwdV9zaXplW2krMV0sICZwY3B1X3NpemVbaSsyXSwKLQkJCShwY3B1X251bV91c2VkIC0gKGkrMSkpICogc2l6ZW9mKHBjcHVfc2l6ZVswXSkpOwotCX0KLX0KLQotc3RhdGljIGludCBwZXJjcHVfbW9kaW5pdCh2b2lkKQotewotCXBjcHVfbnVtX3VzZWQgPSAyOwotCXBjcHVfbnVtX2FsbG9jYXRlZCA9IDI7Ci0JcGNwdV9zaXplID0ga21hbGxvYyhzaXplb2YocGNwdV9zaXplWzBdKSAqIHBjcHVfbnVtX2FsbG9jYXRlZCwKLQkJCSAgICBHRlBfS0VSTkVMKTsKLQkvKiBTdGF0aWMgaW4ta2VybmVsIHBlcmNwdSBkYXRhICh1c2VkKS4gKi8KLQlwY3B1X3NpemVbMF0gPSAtKF9fcGVyX2NwdV9lbmQtX19wZXJfY3B1X3N0YXJ0KTsKLQkvKiBGcmVlIHJvb20uICovCi0JcGNwdV9zaXplWzFdID0gUEVSQ1BVX0VOT1VHSF9ST09NICsgcGNwdV9zaXplWzBdOwotCWlmIChwY3B1X3NpemVbMV0gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm8gcGVyLWNwdSByb29tIGZvciBtb2R1bGVzLlxuIik7Ci0JCXBjcHVfbnVtX3VzZWQgPSAxOwotCX0KLQotCXJldHVybiAwOwotfQotX19pbml0Y2FsbChwZXJjcHVfbW9kaW5pdCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBICovCi0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9wY3B1c2VjKEVsZl9FaGRyICpoZHIsCiAJCQkJIEVsZl9TaGRyICpzZWNoZHJzLAogCQkJCSBjb25zdCBjaGFyICpzZWNzdHJpbmdzKQpAQCAtMTAzMCwxMSArODgwLDIzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKKy8qIElmIHRoZSBhcmNoIGFwcGxpZXMgKG5vbi16ZXJvKSByZWxvY2F0aW9ucyB0byBrZXJuZWwga2NyY3RhYiwgdW5hcHBseSBpdC4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heWJlX3JlbG9jYXRlZCh1bnNpZ25lZCBsb25nIGNyYywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBtb2R1bGUgKmNyY19vd25lcikKK3sKKyNpZmRlZiBBUkNIX1JFTE9DQVRFU19LQ1JDVEFCCisJaWYgKGNyY19vd25lciA9PSBOVUxMKQorCQlyZXR1cm4gY3JjIC0gKHVuc2lnbmVkIGxvbmcpcmVsb2Nfc3RhcnQ7CisjZW5kaWYKKwlyZXR1cm4gY3JjOworfQorCiBzdGF0aWMgaW50IGNoZWNrX3ZlcnNpb24oRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkgdW5zaWduZWQgaW50IHZlcnNpbmRleCwKIAkJCSBjb25zdCBjaGFyICpzeW1uYW1lLAogCQkJIHN0cnVjdCBtb2R1bGUgKm1vZCwgCi0JCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjKQorCQkJIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyYywKKwkJCSBjb25zdCBzdHJ1Y3QgbW9kdWxlICpjcmNfb3duZXIpCiB7CiAJdW5zaWduZWQgaW50IGksIG51bV92ZXJzaW9uczsKIAlzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvICp2ZXJzaW9uczsKQEAgLTEwNTUsMTAgKzkxNywxMCBAQAogCQlpZiAoc3RyY21wKHZlcnNpb25zW2ldLm5hbWUsIHN5bW5hbWUpICE9IDApCiAJCQljb250aW51ZTsKIAotCQlpZiAodmVyc2lvbnNbaV0uY3JjID09ICpjcmMpCisJCWlmICh2ZXJzaW9uc1tpXS5jcmMgPT0gbWF5YmVfcmVsb2NhdGVkKCpjcmMsIGNyY19vd25lcikpCiAJCQlyZXR1cm4gMTsKIAkJREVCVUdQKCJGb3VuZCBjaGVja3N1bSAlbFggdnMgbW9kdWxlICVsWFxuIiwKLQkJICAgICAgICpjcmMsIHZlcnNpb25zW2ldLmNyYyk7CisJCSAgICAgICBtYXliZV9yZWxvY2F0ZWQoKmNyYywgY3JjX293bmVyKSwgdmVyc2lvbnNbaV0uY3JjKTsKIAkJZ290byBiYWRfdmVyc2lvbjsKIAl9CiAKQEAgLTEwODEsNyArOTQzLDggQEAKIAlpZiAoIWZpbmRfc3ltYm9sKE1PRFVMRV9TWU1CT0xfUFJFRklYICJtb2R1bGVfbGF5b3V0IiwgTlVMTCwKIAkJCSAmY3JjLCB0cnVlLCBmYWxzZSkpCiAJCUJVRygpOwotCXJldHVybiBjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgIm1vZHVsZV9sYXlvdXQiLCBtb2QsIGNyYyk7CisJcmV0dXJuIGNoZWNrX3ZlcnNpb24oc2VjaGRycywgdmVyc2luZGV4LCAibW9kdWxlX2xheW91dCIsIG1vZCwgY3JjLAorCQkJICAgICBOVUxMKTsKIH0KIAogLyogRmlyc3QgcGFydCBpcyBrZXJuZWwgdmVyc2lvbiwgd2hpY2ggd2UgaWdub3JlIGlmIG1vZHVsZSBoYXMgY3Jjcy4gKi8KQEAgLTEwOTksNyArOTYyLDggQEAKIAkJCQl1bnNpZ25lZCBpbnQgdmVyc2luZGV4LAogCQkJCWNvbnN0IGNoYXIgKnN5bW5hbWUsCiAJCQkJc3RydWN0IG1vZHVsZSAqbW9kLCAKLQkJCQljb25zdCB1bnNpZ25lZCBsb25nICpjcmMpCisJCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjLAorCQkJCWNvbnN0IHN0cnVjdCBtb2R1bGUgKmNyY19vd25lcikKIHsKIAlyZXR1cm4gMTsKIH0KQEAgLTExMzQsOCArOTk4LDggQEAKIAkvKiB1c2VfbW9kdWxlIGNhbiBmYWlsIGR1ZSB0byBPT00sCiAJICAgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIG9yIHVubG9hZGluZyAqLwogCWlmIChzeW0pIHsKLQkJaWYgKCFjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgbmFtZSwgbW9kLCBjcmMpIHx8Ci0JCSAgICAhdXNlX21vZHVsZShtb2QsIG93bmVyKSkKKwkJaWYgKCFjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgbmFtZSwgbW9kLCBjcmMsIG93bmVyKQorCQkgICAgfHwgIXVzZV9tb2R1bGUobW9kLCBvd25lcikpCiAJCQlzeW0gPSBOVUxMOwogCX0KIAlyZXR1cm4gc3ltOwpAQCAtMjA0Niw5ICsxOTEwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIG9ubHkgc2NhbiB0aGUgc2VjdGlvbnMgY29udGFpbmluZyBkYXRhICovCi0Ja21lbWxlYWtfc2Nhbl9hcmVhKG1vZC0+bW9kdWxlX2NvcmUsICh1bnNpZ25lZCBsb25nKW1vZCAtCi0JCQkgICAodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9jb3JlLAotCQkJICAgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpLCBHRlBfS0VSTkVMKTsKKwlrbWVtbGVha19zY2FuX2FyZWEobW9kLCBzaXplb2Yoc3RydWN0IG1vZHVsZSksIEdGUF9LRVJORUwpOwogCiAJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CiAJCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQpAQCAtMjA1Nyw4ICsxOTE5LDcgQEAKIAkJICAgICYmIHN0cm5jbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIi5ic3MiLCA0KSAhPSAwKQogCQkJY29udGludWU7CiAKLQkJa21lbWxlYWtfc2Nhbl9hcmVhKG1vZC0+bW9kdWxlX2NvcmUsIHNlY2hkcnNbaV0uc2hfYWRkciAtCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfY29yZSwKKwkJa21lbWxlYWtfc2Nhbl9hcmVhKCh2b2lkICopc2VjaGRyc1tpXS5zaF9hZGRyLAogCQkJCSAgIHNlY2hkcnNbaV0uc2hfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJfQogfQpAQCAtMjM4Niw2ICsyMjQ3LDEyIEBACiAJCQkJCSAiX2Z0cmFjZV9ldmVudHMiLAogCQkJCQkgc2l6ZW9mKCptb2QtPnRyYWNlX2V2ZW50cyksCiAJCQkJCSAmbW9kLT5udW1fdHJhY2VfZXZlbnRzKTsKKwkvKgorCSAqIFRoaXMgc2VjdGlvbiBjb250YWlucyBwb2ludGVycyB0byBhbGxvY2F0ZWQgb2JqZWN0cyBpbiB0aGUgdHJhY2UKKwkgKiBjb2RlIGFuZCBub3Qgc2Nhbm5pbmcgaXQgbGVhZHMgdG8gZmFsc2UgcG9zaXRpdmVzLgorCSAqLworCWttZW1sZWFrX3NjYW5fYXJlYShtb2QtPnRyYWNlX2V2ZW50cywgc2l6ZW9mKCptb2QtPnRyYWNlX2V2ZW50cykgKgorCQkJICAgbW9kLT5udW1fdHJhY2VfZXZlbnRzLCBHRlBfS0VSTkVMKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LWRlYnVnLmggYi9rZXJuZWwvbXV0ZXgtZGVidWcuaAppbmRleCA2YjJkNzM1Li41N2Q1MjdhIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXgtZGVidWcuaAorKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuaApAQCAtNDMsMTMgKzQzLDEzIEBACiAJCQkJCQkJXAogCQlERUJVR19MT0NLU19XQVJOX09OKGluX2ludGVycnVwdCgpKTsJXAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJXAotCQlfX3Jhd19zcGluX2xvY2soJihsb2NrKS0+cmF3X2xvY2spOwlcCisJCWFyY2hfc3Bpbl9sb2NrKCYobG9jayktPnJsb2NrLnJhd19sb2NrKTtcCiAJCURFQlVHX0xPQ0tTX1dBUk5fT04obC0+bWFnaWMgIT0gbCk7CVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIHNwaW5fdW5sb2NrX211dGV4KGxvY2ssIGZsYWdzKQkJCVwKLQlkbyB7CQkJCQkJXAotCQlfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jayk7CVwKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJXAotCQlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsJCVwKKyNkZWZpbmUgc3Bpbl91bmxvY2tfbXV0ZXgobG9jaywgZmxhZ3MpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJYXJjaF9zcGluX3VubG9jaygmKGxvY2spLT5ybG9jay5yYXdfbG9jayk7CVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCVwKKwkJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CQkJXAogCX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDk2YjQ1ZDAuLjU4MjdmN2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ttc2dfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTc0LDYgKzc1LDcgQEAKIAlkdW1wX3N0YWNrKCk7CiAjZW5kaWYKIAorCWttc2dfZHVtcChLTVNHX0RVTVBfUEFOSUMpOwogCS8qCiAJICogSWYgd2UgaGF2ZSBjcmFzaGVkIGFuZCB3ZSBoYXZlIGEgY3Jhc2gga2VybmVsIGxvYWRlZCBsZXQgaXQgaGFuZGxlCiAJICogZXZlcnl0aGluZyBlbHNlLgpAQCAtMzM5LDYgKzM0MSw3IEBACiB7CiAJZG9fb29wc19lbnRlcl9leGl0KCk7CiAJcHJpbnRfb29wc19lbmRfbWFya2VyKCk7CisJa21zZ19kdW1wKEtNU0dfRFVNUF9PT1BTKTsKIH0KIAogI2lmZGVmIFdBTlRfV0FSTl9PTl9TTE9XUEFUSApkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IGQ2NTZjMjcuLmNmMWI2OTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awpAQCAtMTIyLDkgKzEyMyw3IEBACiAJCW5leHQgPSBhcmdzICsgaTsKIAogCS8qIENoZXcgdXAgdHJhaWxpbmcgc3BhY2VzLiAqLwotCXdoaWxlIChpc3NwYWNlKCpuZXh0KSkKLQkJbmV4dCsrOwotCXJldHVybiBuZXh0OworCXJldHVybiBza2lwX3NwYWNlcyhuZXh0KTsKIH0KIAogLyogQXJncyBsb29rcyBsaWtlICJmb289YmFyLGJhcjIgYmF6PWZ1eiB3aXoiLiAqLwpAQCAtMTM5LDggKzEzOCw3IEBACiAJREVCVUdQKCJQYXJzaW5nIEFSR1M6ICVzXG4iLCBhcmdzKTsKIAogCS8qIENoZXcgbGVhZGluZyBzcGFjZXMgKi8KLQl3aGlsZSAoaXNzcGFjZSgqYXJncykpCi0JCWFyZ3MrKzsKKwlhcmdzID0gc2tpcF9zcGFjZXMoYXJncyk7CiAKIAl3aGlsZSAoKmFyZ3MpIHsKIAkJaW50IHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDQwYTk5NmUuLjFmMzgyNzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMzYsNyArMzYsNyBAQAogLyoKICAqIEVhY2ggQ1BVIGhhcyBhIGxpc3Qgb2YgcGVyIENQVSBldmVudHM6CiAgKi8KLURFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0LCBwZXJmX2NwdV9jb250ZXh0KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCwgcGVyZl9jcHVfY29udGV4dCk7CiAKIGludCBwZXJmX21heF9ldmVudHMgX19yZWFkX21vc3RseSA9IDE7CiBzdGF0aWMgaW50IHBlcmZfcmVzZXJ2ZWRfcGVyY3B1IF9fcmVhZF9tb3N0bHk7CkBAIC0yMDMsMTQgKzIwMywxNCBAQAogCQkgKiBpZiBzby4gIElmIHdlIGxvY2tlZCB0aGUgcmlnaHQgY29udGV4dCwgdGhlbiBpdAogCQkgKiBjYW4ndCBnZXQgc3dhcHBlZCBvbiB1cyBhbnkgbW9yZS4KIAkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssICpmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOwogCQlpZiAoY3R4ICE9IHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5wZXJmX2V2ZW50X2N0eHApKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssICpmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCAqZmxhZ3MpOwogCQkJZ290byByZXRyeTsKIAkJfQogCiAJCWlmICghYXRvbWljX2luY19ub3RfemVybygmY3R4LT5yZWZjb3VudCkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgKmZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssICpmbGFncyk7CiAJCQljdHggPSBOVUxMOwogCQl9CiAJfQpAQCAtMjMxLDcgKzIzMSw3IEBACiAJY3R4ID0gcGVyZl9sb2NrX3Rhc2tfY29udGV4dCh0YXNrLCAmZmxhZ3MpOwogCWlmIChjdHgpIHsKIAkJKytjdHgtPnBpbl9jb3VudDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIGN0eDsKIH0KQEAgLTI0MCw5ICsyNDAsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAktLWN0eC0+cGluX2NvdW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAlwdXRfY3R4KGN0eCk7CiB9CiAKQEAgLTQyNyw3ICs0MjcsNyBAQAogCWlmIChjdHgtPnRhc2sgJiYgY3B1Y3R4LT50YXNrX2N0eCAhPSBjdHgpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCS8qCiAJICogUHJvdGVjdCB0aGUgbGlzdCBvcGVyYXRpb24gYWdhaW5zdCBOTUkgYnkgZGlzYWJsaW5nIHRoZQogCSAqIGV2ZW50cyBvbiBhIGdsb2JhbCBsZXZlbC4KQEAgLTQ0OSw3ICs0NDksNyBAQAogCX0KIAogCXBlcmZfZW5hYmxlKCk7Ci0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQogCiAKQEAgLTQ4OCwxMiArNDg4LDEyIEBACiAJdGFza19vbmNwdV9mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0LAogCQkJCSBldmVudCk7CiAKLQlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOwogCS8qCiAJICogSWYgdGhlIGNvbnRleHQgaXMgYWN0aXZlIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHNtcCBjYWxsLgogCSAqLwogCWlmIChjdHgtPm5yX2FjdGl2ZSAmJiAhbGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkgewotCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CiAJCWdvdG8gcmV0cnk7CiAJfQogCkBAIC01MDQsNyArNTA0LDcgQEAKIAkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmV2ZW50LT5ncm91cF9lbnRyeSkpCiAJCWxpc3RfZGVsX2V2ZW50KGV2ZW50LCBjdHgpOwotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQogCiAvKgpAQCAtNTM1LDcgKzUzNSw3IEBACiAJaWYgKGN0eC0+dGFzayAmJiBjcHVjdHgtPnRhc2tfY3R4ICE9IGN0eCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CiAKIAkvKgogCSAqIElmIHRoZSBldmVudCBpcyBvbiwgdHVybiBpdCBvZmYuCkBAIC01NTEsNyArNTUxLDcgQEAKIAkJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQogCiAvKgpAQCAtNTY3LDcgKzU2Nyw3IEBACiAgKiBpcyB0aGUgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgQ1BVIGFuZCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLAogICogaGVuY2Ugd2UgY2FuJ3QgZ2V0IGludG8gcGVyZl9ldmVudF90YXNrX3NjaGVkX291dCBmb3IgdGhpcyBjb250ZXh0LgogICovCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQordm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3R4LT50YXNrOwpAQCAtNTg0LDEyICs1ODQsMTIgQEAKICByZXRyeToKIAl0YXNrX29uY3B1X2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2V2ZW50X2Rpc2FibGUsIGV2ZW50KTsKIAotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CiAJLyoKIAkgKiBJZiB0aGUgZXZlbnQgaXMgc3RpbGwgYWN0aXZlLCB3ZSBuZWVkIHRvIHJldHJ5IHRoZSBjcm9zcy1jYWxsLgogCSAqLwogCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogCQlnb3RvIHJldHJ5OwogCX0KIApAQCAtNjAyLDcgKzYwMiw3IEBACiAJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC03NzAsNyArNzcwLDcgQEAKIAkJY3B1Y3R4LT50YXNrX2N0eCA9IGN0eDsKIAl9CiAKLQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAljdHgtPmlzX2FjdGl2ZSA9IDE7CiAJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCkBAIC03ODIsNiArNzgyLDkgQEAKIAogCWFkZF9ldmVudF90b19jdHgoZXZlbnQsIGN0eCk7CiAKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJZ290byB1bmxvY2s7CisKIAkvKgogCSAqIERvbid0IHB1dCB0aGUgZXZlbnQgb24gaWYgaXQgaXMgZGlzYWJsZWQgb3IgaWYKIAkgKiBpdCBpcyBpbiBhIGdyb3VwIGFuZCB0aGUgZ3JvdXAgaXNuJ3Qgb24uCkBAIC04MjAsNyArODIzLDcgQEAKICB1bmxvY2s6CiAJcGVyZl9lbmFibGUoKTsKIAotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAogLyoKQEAgLTg1NiwxMiArODU5LDEyIEBACiAJdGFza19vbmNwdV9mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9pbnN0YWxsX2luX2NvbnRleHQsCiAJCQkJIGV2ZW50KTsKIAotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CiAJLyoKIAkgKiB3ZSBuZWVkIHRvIHJldHJ5IHRoZSBzbXAgY2FsbC4KIAkgKi8KIAlpZiAoY3R4LT5pc19hY3RpdmUgJiYgbGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkgewotCQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CiAJCWdvdG8gcmV0cnk7CiAJfQogCkBAIC04NzIsNyArODc1LDcgQEAKIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmZXZlbnQtPmdyb3VwX2VudHJ5KSkKIAkJYWRkX2V2ZW50X3RvX2N0eChldmVudCwgY3R4KTsKLQlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKIH0KIAogLyoKQEAgLTkxNyw3ICs5MjAsNyBAQAogCQljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OwogCX0KIAotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCWN0eC0+aXNfYWN0aXZlID0gMTsKIAl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAKQEAgLTkyNSw2ICs5MjgsOSBAQAogCQlnb3RvIHVubG9jazsKIAlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOwogCisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCWdvdG8gdW5sb2NrOworCiAJLyoKIAkgKiBJZiB0aGUgZXZlbnQgaXMgaW4gYSBncm91cCBhbmQgaXNuJ3QgdGhlIGdyb3VwIGxlYWRlciwKIAkgKiB0aGVuIGRvbid0IHB1dCBpdCBvbiB1bmxlc3MgdGhlIGdyb3VwIGlzIG9uLgpAQCAtOTU5LDcgKzk2NSw3IEBACiAJfQogCiAgdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAogLyoKQEAgLTk3MSw3ICs5NzcsNyBAQAogICogcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZCBvciBwZXJmX2V2ZW50X2Zvcl9lYWNoIGFzIGRlc2NyaWJlZAogICogZm9yIHBlcmZfZXZlbnRfZGlzYWJsZS4KICAqLwotc3RhdGljIHZvaWQgcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQordm9pZCBwZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7CkBAIC05ODUsNyArOTkxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJmN0eC0+bG9jayk7CiAJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQogCQlnb3RvIG91dDsKIApAQCAtMTAwMCwxMCArMTAwNiwxMCBAQAogCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKIAogIHJldHJ5OgotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogCXRhc2tfb25jcHVfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfZXZlbnRfZW5hYmxlLCBldmVudCk7CiAKLQlzcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZjdHgtPmxvY2spOwogCiAJLyoKIAkgKiBJZiB0aGUgY29udGV4dCBpcyBhY3RpdmUgYW5kIHRoZSBldmVudCBpcyBzdGlsbCBvZmYsCkBAIC0xMDIwLDcgKzEwMjYsNyBAQAogCQlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOwogCiAgb3V0OgotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfcmVmcmVzaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCByZWZyZXNoKQpAQCAtMTA0Miw3ICsxMDQ4LDcgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAKLQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAljdHgtPmlzX2FjdGl2ZSA9IDA7CiAJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQogCQlnb3RvIG91dDsKQEAgLTEwNTUsNyArMTA2MSw3IEBACiAJfQogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAogLyoKQEAgLTExOTMsOCArMTE5OSw4IEBACiAJCSAqIG9yZGVyIHdlIHRha2UgdGhlIGxvY2tzIGJlY2F1c2Ugbm8gb3RoZXIgY3B1IGNvdWxkCiAJCSAqIGJlIHRyeWluZyB0byBsb2NrIGJvdGggb2YgdGhlc2UgdGFza3MuCiAJCSAqLwotCQlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JCXNwaW5fbG9ja19uZXN0ZWQoJm5leHRfY3R4LT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZuZXh0X2N0eC0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCQlpZiAoY29udGV4dF9lcXVpdihjdHgsIG5leHRfY3R4KSkgewogCQkJLyoKIAkJCSAqIFhYWCBkbyB3ZSBuZWVkIGEgbWVtb3J5IGJhcnJpZXIgb2Ygc29ydHMKQEAgLTEyMDgsOCArMTIxNCw4IEBACiAKIAkJCXBlcmZfZXZlbnRfc3luY19zdGF0KGN0eCwgbmV4dF9jdHgpOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZuZXh0X2N0eC0+bG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJm5leHRfY3R4LT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMTI1MSw3ICsxMjU3LDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJaW50IGNhbl9hZGRfaHcgPSAxOwogCi0Jc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CiAJY3R4LT5pc19hY3RpdmUgPSAxOwogCWlmIChsaWtlbHkoIWN0eC0+bnJfZXZlbnRzKSkKIAkJZ290byBvdXQ7CkBAIC0xMzA2LDcgKzEzMTIsNyBAQAogCX0KIAlwZXJmX2VuYWJsZSgpOwogIG91dDoKLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiB9CiAKIC8qCkBAIC0xMzcwLDExICsxMzc2LDE0IEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKIAl1NjQgaW50ZXJydXB0cywgZnJlcTsKIAotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgewogCQlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQogCQkJY29udGludWU7CiAKKwkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQljb250aW51ZTsKKwogCQlod2MgPSAmZXZlbnQtPmh3OwogCiAJCWludGVycnVwdHMgPSBod2MtPmludGVycnVwdHM7CkBAIC0xNDI1LDcgKzE0MzQsNyBAQAogCQkJcGVyZl9lbmFibGUoKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiB9CiAKIC8qCkBAIC0xNDM4LDcgKzE0NDcsNyBAQAogCWlmICghY3R4LT5ucl9ldmVudHMpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCS8qCiAJICogUm90YXRlIHRoZSBmaXJzdCBlbnRyeSBsYXN0ICh3b3JrcyBqdXN0IGZpbmUgZm9yIGdyb3VwIGV2ZW50cyB0b28pOgogCSAqLwpAQCAtMTQ0OSw3ICsxNDU4LDcgQEAKIAl9CiAJcGVyZl9lbmFibGUoKTsKIAotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAogdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBjcHUpCkBAIC0xNDk4LDcgKzE1MDcsNyBAQAogCiAJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGN0eCk7CiAKLQlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CiAJCWlmICghZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMpCkBAIC0xNTE2LDcgKzE1MjUsNyBAQAogCWlmIChlbmFibGVkKQogCQl1bmNsb25lX2N0eChjdHgpOwogCi0Jc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCiAJcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2ssIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAgb3V0OgpAQCAtMTU0MiwxMCArMTU1MSwxMCBAQAogCWlmIChjdHgtPnRhc2sgJiYgY3B1Y3R4LT50YXNrX2N0eCAhPSBjdHgpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKIAl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOwotCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIAogCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogfQpAQCAtMTU2MywxMCArMTU3MiwxMCBAQAogCQlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCQl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiBhdG9taWM2NF9yZWFkKCZldmVudC0+Y291bnQpOwpAQCAtMTU3OSw4ICsxNTg4LDcgQEAKIF9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAogCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwotCXNwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOworCXJhd19zcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsKIAltdXRleF9pbml0KCZjdHgtPm11dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5ncm91cF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5ldmVudF9saXN0KTsKQEAgLTE1OTYsMTUgKzE2MDQsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKLQkvKgotCSAqIElmIGNwdSBpcyBub3QgYSB3aWxkY2FyZCB0aGVuIHRoaXMgaXMgYSBwZXJjcHUgZXZlbnQ6Ci0JICovCi0JaWYgKGNwdSAhPSAtMSkgeworCWlmIChwaWQgPT0gLTEgJiYgY3B1ICE9IC0xKSB7CiAJCS8qIE11c3QgYmUgcm9vdCB0byBvcGVyYXRlIG9uIGEgQ1BVIGV2ZW50OiAqLwogCQlpZiAocGVyZl9wYXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwogCi0JCWlmIChjcHUgPCAwIHx8IGNwdSA+IG51bV9wb3NzaWJsZV9jcHVzKCkpCisJCWlmIChjcHUgPCAwIHx8IGNwdSA+PSBucl9jcHVtYXNrX2JpdHMpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCQkvKgpAQCAtMTYxMiw3ICsxNjE3LDcgQEAKIAkJICogb2ZmbGluZSBDUFUgYW5kIGFjdGl2YXRlIGl0IHdoZW4gdGhlIENQVSBjb21lcyB1cCwgYnV0CiAJCSAqIHRoYXQncyBmb3IgbGF0ZXIuCiAJCSAqLwotCQlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkKKwkJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAogCQljcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOwpAQCAtMTY1MCwxMSArMTY1NSwxMSBAQAogCWN0eCA9IHBlcmZfbG9ja190YXNrX2NvbnRleHQodGFzaywgJmZsYWdzKTsKIAlpZiAoY3R4KSB7CiAJCXVuY2xvbmVfY3R4KGN0eCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJaWYgKCFjdHgpIHsKLQkJY3R4ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCksIEdGUF9LRVJORUwpOworCQljdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWlmICghY3R4KQogCQkJZ290byBlcnJvdXQ7CkBAIC0xOTg4LDcgKzE5OTMsNyBAQAogCWlmICghdmFsdWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKIAlpZiAoZXZlbnQtPmF0dHIuZnJlcSkgewogCQlpZiAodmFsdWUgPiBzeXNjdGxfcGVyZl9ldmVudF9zYW1wbGVfcmF0ZSkgewogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTIwMDEsNyArMjAwNiw3IEBACiAJCWV2ZW50LT5ody5zYW1wbGVfcGVyaW9kID0gdmFsdWU7CiAJfQogdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMyNjMsNiArMzI2OCw5IEBACiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF90YXNrX21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZXZlbnQtPmF0dHIuY29tbSB8fCBldmVudC0+YXR0ci5tbWFwIHx8IGV2ZW50LT5hdHRyLnRhc2spCiAJCXJldHVybiAxOwogCkBAIC0zMjg4LDEyICszMjk2LDExIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KIAlpZiAoIWN0eCkKIAkJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKHRhc2tfZXZlbnQtPnRhc2stPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKIAkJcGVyZl9ldmVudF90YXNrX2N0eChjdHgsIHRhc2tfZXZlbnQpOworCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0zMzcwLDYgKzMzNzcsOSBAQAogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybiAwOworCiAJaWYgKGV2ZW50LT5hdHRyLmNvbW0pCiAJCXJldHVybiAxOwogCkBAIC0zNDA2LDE1ICszNDE2LDEwIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X2NvbW1fY3R4KCZjcHVjdHgtPmN0eCwgY29tbV9ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KLQkvKgotCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCi0JICogZXZlbnRzIGVuZHMgdXAgaW4uCi0JICovCiAJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKIAkJcGVyZl9ldmVudF9jb21tX2N0eChjdHgsIGNvbW1fZXZlbnQpOworCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0zNDg5LDYgKzM0OTQsOSBAQAogc3RhdGljIGludCBwZXJmX2V2ZW50X21tYXBfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCSAgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCiB7CisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybiAwOworCiAJaWYgKGV2ZW50LT5hdHRyLm1tYXApCiAJCXJldHVybiAxOwogCkBAIC0zNTYyLDE1ICszNTcwLDEwIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X21tYXBfY3R4KCZjcHVjdHgtPmN0eCwgbW1hcF9ldmVudCk7Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0KLQkvKgotCSAqIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaCBvZiB0aGUgY2hpbGQgY29udGV4dHMgdGhlCi0JICogZXZlbnRzIGVuZHMgdXAgaW4uCi0JICovCiAJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKIAkJcGVyZl9ldmVudF9tbWFwX2N0eChjdHgsIG1tYXBfZXZlbnQpOworCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJa2ZyZWUoYnVmKTsKQEAgLTM4NjEsNiArMzg2NCw5IEBACiAJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCiAJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXJldHVybiAwOworCiAJaWYgKCFwZXJmX3N3ZXZlbnRfaXNfY291bnRpbmcoZXZlbnQpKQogCQlyZXR1cm4gMDsKIApAQCAtNDAxMSw2ICs0MDE3LDcgQEAKIAlldmVudC0+cG11LT5yZWFkKGV2ZW50KTsKIAogCWRhdGEuYWRkciA9IDA7CisJZGF0YS5yYXcgPSBOVUxMOwogCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwogCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAkvKgpAQCAtNDA4MCw4ICs0MDg3LDcgQEAKIAl1NjQgbm93OwogCiAJbm93ID0gY3B1X2Nsb2NrKGNwdSk7Ci0JcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBub3cpOworCXByZXYgPSBhdG9taWM2NF94Y2hnKCZldmVudC0+aHcucHJldl9jb3VudCwgbm93KTsKIAlhdG9taWM2NF9hZGQobm93IC0gcHJldiwgJmV2ZW50LT5jb3VudCk7CiB9CiAKQEAgLTQyODYsMTUgKzQyOTIsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgKmJwX3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCiB7CiAJaW50IGVycjsKLQkvKgotCSAqIFRoZSBicmVha3BvaW50IGlzIGFscmVhZHkgZmlsbGVkIGlmIHdlIGhhdmVuJ3QgY3JlYXRlZCB0aGUgY291bnRlcgotCSAqIHRocm91Z2ggcGVyZiBzeXNjYWxsCi0JICogRklYTUU6IG1hbmFnZSB0byBnZXQgdHJpZ2VycmVkIHRvIE5VTEwgaWYgaXQgY29tZXMgZnJvbSBzeXNjYWxscwotCSAqLwotCWlmICghYnAtPmNhbGxiYWNrKQotCQllcnIgPSByZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoYnApOwotCWVsc2UKLQkJZXJyID0gX19yZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoYnApOworCisJZXJyID0gcmVnaXN0ZXJfcGVyZl9od19icmVha3BvaW50KGJwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCkBAIC00MzA4LDYgKzQzMDcsNyBAQAogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIHNhbXBsZTsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGRhdGE7CiAKKwlzYW1wbGUucmF3ID0gTlVMTDsKIAlzYW1wbGUuYWRkciA9IGJwLT5hdHRyLmJwX2FkZHI7CiAKIAlpZiAoIXBlcmZfZXhjbHVkZV9ldmVudChicCwgcmVncykpCkBAIC00MzkwLDcgKzQzOTAsNyBAQAogCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCiAJCSAgIHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJCSAgIHN0cnVjdCBwZXJmX2V2ZW50ICpwYXJlbnRfZXZlbnQsCi0JCSAgIHBlcmZfY2FsbGJhY2tfdCBjYWxsYmFjaywKKwkJICAgcGVyZl9vdmVyZmxvd19oYW5kbGVyX3Qgb3ZlcmZsb3dfaGFuZGxlciwKIAkJICAgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7CiAJY29uc3Qgc3RydWN0IHBtdSAqcG11OwpAQCAtNDQzMywxMCArNDQzMywxMCBAQAogCiAJZXZlbnQtPnN0YXRlCQk9IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU7CiAKLQlpZiAoIWNhbGxiYWNrICYmIHBhcmVudF9ldmVudCkKLQkJY2FsbGJhY2sgPSBwYXJlbnRfZXZlbnQtPmNhbGxiYWNrOworCWlmICghb3ZlcmZsb3dfaGFuZGxlciAmJiBwYXJlbnRfZXZlbnQpCisJCW92ZXJmbG93X2hhbmRsZXIgPSBwYXJlbnRfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXI7CiAJCi0JZXZlbnQtPmNhbGxiYWNrCT0gY2FsbGJhY2s7CisJZXZlbnQtPm92ZXJmbG93X2hhbmRsZXIJPSBvdmVyZmxvd19oYW5kbGVyOwogCiAJaWYgKGF0dHItPmRpc2FibGVkKQogCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKQEAgLTQ1NzEsNyArNDU3MSw3IEBACiAJaWYgKGF0dHItPnR5cGUgPj0gUEVSRl9UWVBFX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoYXR0ci0+X19yZXNlcnZlZF8xIHx8IGF0dHItPl9fcmVzZXJ2ZWRfMiB8fCBhdHRyLT5fX3Jlc2VydmVkXzMpCisJaWYgKGF0dHItPl9fcmVzZXJ2ZWRfMSB8fCBhdHRyLT5fX3Jlc2VydmVkXzIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0dHItPnNhbXBsZV90eXBlICYgfihQRVJGX1NBTVBMRV9NQVgtMSkpCkBAIC00NzI0LDcgKzQ3MjQsNyBAQAogCWlmIChJU19FUlIoZXZlbnQpKQogCQlnb3RvIGVycl9wdXRfY29udGV4dDsKIAotCWVyciA9IGFub25faW5vZGVfZ2V0ZmQoIltwZXJmX2V2ZW50XSIsICZwZXJmX2ZvcHMsIGV2ZW50LCAwKTsKKwllcnIgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9ldmVudF0iLCAmcGVyZl9mb3BzLCBldmVudCwgT19SRFdSKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfZnJlZV9wdXRfY29udGV4dDsKIApAQCAtNDc3Niw3ICs0Nzc2LDggQEAKICAqLwogc3RydWN0IHBlcmZfZXZlbnQgKgogcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwgaW50IGNwdSwKLQkJCQkgcGlkX3QgcGlkLCBwZXJmX2NhbGxiYWNrX3QgY2FsbGJhY2spCisJCQkJIHBpZF90IHBpZCwKKwkJCQkgcGVyZl9vdmVyZmxvd19oYW5kbGVyX3Qgb3ZlcmZsb3dfaGFuZGxlcikKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OwpAQCAtNDc5Myw3ICs0Nzk0LDcgQEAKIAl9CiAKIAlldmVudCA9IHBlcmZfZXZlbnRfYWxsb2MoYXR0ciwgY3B1LCBjdHgsIE5VTEwsCi0JCQkJICAgICBOVUxMLCBjYWxsYmFjaywgR0ZQX0tFUk5FTCk7CisJCQkJIE5VTEwsIG92ZXJmbG93X2hhbmRsZXIsIEdGUF9LRVJORUwpOwogCWlmIChJU19FUlIoZXZlbnQpKSB7CiAJCWVyciA9IFBUUl9FUlIoZXZlbnQpOwogCQlnb3RvIGVycl9wdXRfY29udGV4dDsKQEAgLTQ5OTgsNyArNDk5OSw3IEBACiAJICogcmVhZGluZyBjaGlsZC0+cGVyZl9ldmVudF9jdHhwLCB3ZSB3YWl0IHVudGlsIGl0IGhhcwogCSAqIGluY3JlbWVudGVkIHRoZSBjb250ZXh0J3MgcmVmY291bnQgYmVmb3JlIHdlIGRvIHB1dF9jdHggYmVsb3cuCiAJICovCi0Jc3Bpbl9sb2NrKCZjaGlsZF9jdHgtPmxvY2spOworCXJhd19zcGluX2xvY2soJmNoaWxkX2N0eC0+bG9jayk7CiAJY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCA9IE5VTEw7CiAJLyoKIAkgKiBJZiB0aGlzIGNvbnRleHQgaXMgYSBjbG9uZTsgdW5jbG9uZSBpdCBzbyBpdCBjYW4ndCBnZXQKQEAgLTUwMDcsNyArNTAwOCw3IEBACiAJICovCiAJdW5jbG9uZV9jdHgoY2hpbGRfY3R4KTsKIAl1cGRhdGVfY29udGV4dF90aW1lKGNoaWxkX2N0eCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpbGRfY3R4LT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaWxkX2N0eC0+bG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBSZXBvcnQgdGhlIHRhc2sgZGVhZCBhZnRlciB1bnNjaGVkdWxpbmcgdGhlIGV2ZW50cyBzbyB0aGF0IHdlCkBAIC01MDkwLDcgKzUwOTEsNyBAQAogICovCiBpbnQgcGVyZl9ldmVudF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjaGlsZF9jdHgsICpwYXJlbnRfY3R4OworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCA9IE5VTEwsICpwYXJlbnRfY3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNsb25lZF9jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50ID0gY3VycmVudDsKQEAgLTUxMDYsMjAgKzUxMDcsNiBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbyBpbmhlcml0Ci0JICogZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBmb3IgY2xvbmluZy4KLQkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZSBjaGlsZC4KLQkgKi8KLQotCWNoaWxkX2N0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoaWxkX2N0eCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KGNoaWxkX2N0eCwgY2hpbGQpOwotCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7Ci0JZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKLQotCS8qCiAJICogSWYgdGhlIHBhcmVudCdzIGNvbnRleHQgaXMgYSBjbG9uZSwgcGluIGl0IHNvIGl0IHdvbid0IGdldAogCSAqIHN3YXBwZWQgdW5kZXIgdXMuCiAJICovCkBAIC01MTQ5LDYgKzUxMzYsMjYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKCFjaGlsZC0+cGVyZl9ldmVudF9jdHhwKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbworCQkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgorCQkJICogRmlyc3QgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBjb250ZXh0IGZvciB0aGUKKwkJCSAqIGNoaWxkLgorCQkJICovCisKKwkJCWNoaWxkX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNoaWxkX2N0eCkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBleGl0OworCQkJfQorCisJCQlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KGNoaWxkX2N0eCwgY2hpbGQpOworCQkJY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCA9IGNoaWxkX2N0eDsKKwkJCWdldF90YXNrX3N0cnVjdChjaGlsZCk7CisJCX0KKwogCQlyZXQgPSBpbmhlcml0X2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsCiAJCQkJCSAgICAgY2hpbGQsIGNoaWxkX2N0eCk7CiAJCWlmIChyZXQpIHsKQEAgLTUxNzcsNiArNTE4NCw3IEBACiAJCWdldF9jdHgoY2hpbGRfY3R4LT5wYXJlbnRfY3R4KTsKIAl9CiAKK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZwYXJlbnRfY3R4LT5tdXRleCk7CiAKIAlwZXJmX3VucGluX2NvbnRleHQocGFyZW50X2N0eCk7CkBAIC01MjkxLDExICs1Mjk5LDExIEBACiAJcGVyZl9yZXNlcnZlZF9wZXJjcHUgPSB2YWw7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKLQkJc3Bpbl9sb2NrX2lycSgmY3B1Y3R4LT5jdHgubG9jayk7CisJCXJhd19zcGluX2xvY2tfaXJxKCZjcHVjdHgtPmN0eC5sb2NrKTsKIAkJbXB0ID0gbWluKHBlcmZfbWF4X2V2ZW50cyAtIGNwdWN0eC0+Y3R4Lm5yX2V2ZW50cywKIAkJCSAgcGVyZl9tYXhfZXZlbnRzIC0gcGVyZl9yZXNlcnZlZF9wZXJjcHUpOwogCQljcHVjdHgtPm1heF9wZXJ0YXNrID0gbXB0OwotCQlzcGluX3VubG9ja19pcnEoJmNwdWN0eC0+Y3R4LmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjcHVjdHgtPmN0eC5sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJnBlcmZfcmVzb3VyY2VfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCBkM2Y3MjJkLi4yZTE3YzljIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0xNDEsMTEgKzE0MSwxMiBAQAogCQkJICogaW5zdGFsbGluZyBpdDoKIAkJCSAqLwogCQkJc3Bpbl9sb2NrX2lycSgmcGlkbWFwX2xvY2spOwotCQkJaWYgKG1hcC0+cGFnZSkKLQkJCQlrZnJlZShwYWdlKTsKLQkJCWVsc2UKKwkJCWlmICghbWFwLT5wYWdlKSB7CiAJCQkJbWFwLT5wYWdlID0gcGFnZTsKKwkJCQlwYWdlID0gTlVMTDsKKwkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycSgmcGlkbWFwX2xvY2spOworCQkJa2ZyZWUocGFnZSk7CiAJCQlpZiAodW5saWtlbHkoIW1hcC0+cGFnZSkpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTI2OCwxMiArMjY5LDExIEBACiAJZm9yICh0eXBlID0gMDsgdHlwZSA8IFBJRFRZUEVfTUFYOyArK3R5cGUpCiAJCUlOSVRfSExJU1RfSEVBRCgmcGlkLT50YXNrc1t0eXBlXSk7CiAKKwl1cGlkID0gcGlkLT5udW1iZXJzICsgbnMtPmxldmVsOwogCXNwaW5fbG9ja19pcnEoJnBpZG1hcF9sb2NrKTsKLQlmb3IgKGkgPSBucy0+bGV2ZWw7IGkgPj0gMDsgaS0tKSB7Ci0JCXVwaWQgPSAmcGlkLT5udW1iZXJzW2ldOworCWZvciAoIDsgdXBpZCA+PSBwaWQtPm51bWJlcnM7IC0tdXBpZCkKIAkJaGxpc3RfYWRkX2hlYWRfcmN1KCZ1cGlkLT5waWRfY2hhaW4sCiAJCQkJJnBpZF9oYXNoW3BpZF9oYXNoZm4odXBpZC0+bnIsIHVwaWQtPm5zKV0pOwotCX0KIAlzcGluX3VubG9ja19pcnEoJnBpZG1hcF9sb2NrKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2NvbnNvbGUuYyBiL2tlcm5lbC9wb3dlci9jb25zb2xlLmMKaW5kZXggNTE4NzEzNi4uMjE4ZTVhZiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2NvbnNvbGUuYworKysgYi9rZXJuZWwvcG93ZXIvY29uc29sZS5jCkBAIC02LDcgKzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2tiZF9rZXJuLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAtMjEsOCArMjEsNyBAQAogCWlmIChvcmlnX2ZnY29uc29sZSA8IDApCiAJCXJldHVybiAxOwogCi0Jb3JpZ19rbXNnID0ga21zZ19yZWRpcmVjdDsKLQlrbXNnX3JlZGlyZWN0ID0gU1VTUEVORF9DT05TT0xFOworCW9yaWdfa21zZyA9IHZ0X2ttc2dfcmVkaXJlY3QoU1VTUEVORF9DT05TT0xFKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAsNyArMjksNyBAQAogewogCWlmIChvcmlnX2ZnY29uc29sZSA+PSAwKSB7CiAJCXZ0X21vdmVfdG9fY29uc29sZShvcmlnX2ZnY29uc29sZSwgMCk7Ci0JCWttc2dfcmVkaXJlY3QgPSBvcmlnX2ttc2c7CisJCXZ0X2ttc2dfcmVkaXJlY3Qob3JpZ19rbXNnKTsKIAl9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBiNWFjNGQ5Li4xNzQ2M2NhIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ttc2dfZHVtcC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTQwNSw0ICsxNDA2LDEyMiBAQAogCXJldHVybiBmYWxzZTsKIH0KIEVYUE9SVF9TWU1CT0wocHJpbnRrX3RpbWVkX3JhdGVsaW1pdCk7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHVtcF9saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChkdW1wX2xpc3QpOworCisvKioKKyAqIGttc2dfZHVtcF9yZWdpc3RlciAtIHJlZ2lzdGVyIGEga2VybmVsIGxvZyBkdW1wZXIuCisgKiBAZHVtcGVyOiBwb2ludGVyIHRvIHRoZSBrbXNnX2R1bXBlciBzdHJ1Y3R1cmUKKyAqCisgKiBBZGRzIGEga2VybmVsIGxvZyBkdW1wZXIgdG8gdGhlIHN5c3RlbS4gVGhlIGR1bXAgY2FsbGJhY2sgaW4gdGhlCisgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG9vcHNlcyBvciBwYW5pY3MgYW5kIG11c3QgYmUKKyAqIHNldC4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kICUtRUlOVkFMIG9yICUtRUJVU1kgb3RoZXJ3aXNlLgorICovCitpbnQga21zZ19kdW1wX3JlZ2lzdGVyKHN0cnVjdCBrbXNnX2R1bXBlciAqZHVtcGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IC1FQlVTWTsKKworCS8qIFRoZSBkdW1wIGNhbGxiYWNrIG5lZWRzIHRvIGJlIHNldCAqLworCWlmICghZHVtcGVyLT5kdW1wKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkdW1wX2xpc3RfbG9jaywgZmxhZ3MpOworCS8qIERvbid0IGFsbG93IHJlZ2lzdGVyaW5nIG11bHRpcGxlIHRpbWVzICovCisJaWYgKCFkdW1wZXItPnJlZ2lzdGVyZWQpIHsKKwkJZHVtcGVyLT5yZWdpc3RlcmVkID0gMTsKKwkJbGlzdF9hZGRfdGFpbCgmZHVtcGVyLT5saXN0LCAmZHVtcF9saXN0KTsKKwkJZXJyID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHVtcF9saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrbXNnX2R1bXBfcmVnaXN0ZXIpOworCisvKioKKyAqIGttc2dfZHVtcF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIGttc2cgZHVtcGVyLgorICogQGR1bXBlcjogcG9pbnRlciB0byB0aGUga21zZ19kdW1wZXIgc3RydWN0dXJlCisgKgorICogUmVtb3ZlcyBhIGR1bXAgZGV2aWNlIGZyb20gdGhlIHN5c3RlbS4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kCisgKiAlLUVJTlZBTCBvdGhlcndpc2UuCisgKi8KK2ludCBrbXNnX2R1bXBfdW5yZWdpc3RlcihzdHJ1Y3Qga21zZ19kdW1wZXIgKmR1bXBlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR1bXBfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKGR1bXBlci0+cmVnaXN0ZXJlZCkgeworCQlkdW1wZXItPnJlZ2lzdGVyZWQgPSAwOworCQlsaXN0X2RlbCgmZHVtcGVyLT5saXN0KTsKKwkJZXJyID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHVtcF9saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrbXNnX2R1bXBfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICprbXNnX3JlYXNvbnNbXSA9IHsKKwlbS01TR19EVU1QX09PUFNdCT0gIm9vcHMiLAorCVtLTVNHX0RVTVBfUEFOSUNdCT0gInBhbmljIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICprbXNnX3RvX3N0cihlbnVtIGttc2dfZHVtcF9yZWFzb24gcmVhc29uKQoreworCWlmIChyZWFzb24gPj0gQVJSQVlfU0laRShrbXNnX3JlYXNvbnMpIHx8IHJlYXNvbiA8IDApCisJCXJldHVybiAidW5rbm93biI7CisKKwlyZXR1cm4ga21zZ19yZWFzb25zW3JlYXNvbl07Cit9CisKKy8qKgorICoga21zZ19kdW1wIC0gZHVtcCBrZXJuZWwgbG9nIHRvIGtlcm5lbCBtZXNzYWdlIGR1bXBlcnMuCisgKiBAcmVhc29uOiB0aGUgcmVhc29uIChvb3BzLCBwYW5pYyBldGMpIGZvciBkdW1waW5nCisgKgorICogSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGR1bXAgZGV2aWNlcyBhbmQgY2FsbCB0aGUgb29wcy9wYW5pYworICogY2FsbGJhY2tzIHdpdGggdGhlIGxvZyBidWZmZXIuCisgKi8KK3ZvaWQga21zZ19kdW1wKGVudW0ga21zZ19kdW1wX3JlYXNvbiByZWFzb24pCit7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgY2hhcnM7CisJc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXI7CisJY29uc3QgY2hhciAqczEsICpzMjsKKwl1bnNpZ25lZCBsb25nIGwxLCBsMjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogVGhlb3JldGljYWxseSwgdGhlIGxvZyBjb3VsZCBtb3ZlIG9uIGFmdGVyIHdlIGRvIHRoaXMsIGJ1dAorCSAgIHRoZXJlJ3Mgbm90IGEgbG90IHdlIGNhbiBkbyBhYm91dCB0aGF0LiBUaGUgbmV3IG1lc3NhZ2VzCisJICAgd2lsbCBvdmVyd3JpdGUgdGhlIHN0YXJ0IG9mIHdoYXQgd2UgZHVtcC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKKwllbmQgPSBsb2dfZW5kICYgTE9HX0JVRl9NQVNLOworCWNoYXJzID0gbG9nZ2VkX2NoYXJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CisKKwlpZiAobG9nZ2VkX2NoYXJzID4gZW5kKSB7CisJCXMxID0gbG9nX2J1ZiArIGxvZ19idWZfbGVuIC0gbG9nZ2VkX2NoYXJzICsgZW5kOworCQlsMSA9IGxvZ2dlZF9jaGFycyAtIGVuZDsKKworCQlzMiA9IGxvZ19idWY7CisJCWwyID0gZW5kOworCX0gZWxzZSB7CisJCXMxID0gIiI7CisJCWwxID0gMDsKKworCQlzMiA9IGxvZ19idWYgKyBlbmQgLSBsb2dnZWRfY2hhcnM7CisJCWwyID0gbG9nZ2VkX2NoYXJzOworCX0KKworCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmR1bXBfbGlzdF9sb2NrLCBmbGFncykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkdW1wX2ttc2c6IGR1bXAgbGlzdCBsb2NrIGlzIGhlbGQgZHVyaW5nICVzLCBza2lwcGluZyBkdW1wXG4iLAorCQkJCWttc2dfdG9fc3RyKHJlYXNvbikpOworCQlyZXR1cm47CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZHVtcGVyLCAmZHVtcF9saXN0LCBsaXN0KQorCQlkdW1wZXItPmR1bXAoZHVtcGVyLCByZWFzb24sIHMxLCBsMSwgczIsIGwyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdW1wX2xpc3RfbG9jaywgZmxhZ3MpOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCBhNjIxYTY3Li45YmI1MjE3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTc2MywxMyArNzYzLDEzIEBACiAJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJcGlwZV9jb3VudCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCX0KLQkrK19fZ2V0X2NwdV92YXIocmN1X3RvcnR1cmVfY291bnQpW3BpcGVfY291bnRdOworCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKHJjdV90b3J0dXJlX2NvdW50KVtwaXBlX2NvdW50XSk7CiAJY29tcGxldGVkID0gY3VyX29wcy0+Y29tcGxldGVkKCkgLSBjb21wbGV0ZWQ7CiAJaWYgKGNvbXBsZXRlZCA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKSB7CiAJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJY29tcGxldGVkID0gUkNVX1RPUlRVUkVfUElQRV9MRU47CiAJfQotCSsrX19nZXRfY3B1X3ZhcihyY3VfdG9ydHVyZV9iYXRjaClbY29tcGxldGVkXTsKKwlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihyY3VfdG9ydHVyZV9iYXRjaClbY29tcGxldGVkXSk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAljdXJfb3BzLT5yZWFkdW5sb2NrKGlkeCk7CiB9CkBAIC04MTgsMTMgKzgxOCwxMyBAQAogCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4sIGJ1dC4uLiAqLwogCQkJcGlwZV9jb3VudCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCQl9Ci0JCSsrX19nZXRfY3B1X3ZhcihyY3VfdG9ydHVyZV9jb3VudClbcGlwZV9jb3VudF07CisJCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKHJjdV90b3J0dXJlX2NvdW50KVtwaXBlX2NvdW50XSk7CiAJCWNvbXBsZXRlZCA9IGN1cl9vcHMtPmNvbXBsZXRlZCgpIC0gY29tcGxldGVkOwogCQlpZiAoY29tcGxldGVkID4gUkNVX1RPUlRVUkVfUElQRV9MRU4pIHsKIAkJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJCWNvbXBsZXRlZCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCQl9Ci0JCSsrX19nZXRfY3B1X3ZhcihyY3VfdG9ydHVyZV9iYXRjaClbY29tcGxldGVkXTsKKwkJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIocmN1X3RvcnR1cmVfYmF0Y2gpW2NvbXBsZXRlZF0pOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQljdXJfb3BzLT5yZWFkdW5sb2NrKGlkeCk7CiAJCXNjaGVkdWxlKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDc2MGMyNjIuLmM3MDVhNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCXJlbGF5X2NvbnN1bWVfYnl0ZXMocmJ1ZiwgYnVmLT5wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHJlbGF5X3BpcGVfYnVmX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyByZWxheV9waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZSA9IDAsCiAJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAogCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmluZGV4IGRjMTU2ODYuLmFmOTZjMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC0zMDgsMzcgKzMwOCwzNyBAQAogCQkJIHZvaWQgKmFsaWduZl9kYXRhKQogewogCXN0cnVjdCByZXNvdXJjZSAqdGhpcyA9IHJvb3QtPmNoaWxkOwotCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOworCXN0cnVjdCByZXNvdXJjZSB0bXAgPSAqbmV3OwogCi0Jc3RhcnQgPSByb290LT5zdGFydDsKKwl0bXAuc3RhcnQgPSByb290LT5zdGFydDsKIAkvKgogCSAqIFNraXAgcGFzdCBhbiBhbGxvY2F0ZWQgcmVzb3VyY2UgdGhhdCBzdGFydHMgYXQgMCwgc2luY2UgdGhlIGFzc2lnbm1lbnQKLQkgKiBvZiB0aGlzLT5zdGFydCAtIDEgdG8gbmV3LT5lbmQgYmVsb3cgd291bGQgY2F1c2UgYW4gdW5kZXJmbG93LgorCSAqIG9mIHRoaXMtPnN0YXJ0IC0gMSB0byB0bXAtPmVuZCBiZWxvdyB3b3VsZCBjYXVzZSBhbiB1bmRlcmZsb3cuCiAJICovCiAJaWYgKHRoaXMgJiYgdGhpcy0+c3RhcnQgPT0gMCkgewotCQlzdGFydCA9IHRoaXMtPmVuZCArIDE7CisJCXRtcC5zdGFydCA9IHRoaXMtPmVuZCArIDE7CiAJCXRoaXMgPSB0aGlzLT5zaWJsaW5nOwogCX0KIAlmb3IoOzspIHsKIAkJaWYgKHRoaXMpCi0JCQllbmQgPSB0aGlzLT5zdGFydCAtIDE7CisJCQl0bXAuZW5kID0gdGhpcy0+c3RhcnQgLSAxOwogCQllbHNlCi0JCQllbmQgPSByb290LT5lbmQ7Ci0JCWlmIChzdGFydCA8IG1pbikKLQkJCXN0YXJ0ID0gbWluOwotCQlpZiAoZW5kID4gbWF4KQotCQkJZW5kID0gbWF4OwotCQlzdGFydCA9IEFMSUdOKHN0YXJ0LCBhbGlnbik7CisJCQl0bXAuZW5kID0gcm9vdC0+ZW5kOworCQlpZiAodG1wLnN0YXJ0IDwgbWluKQorCQkJdG1wLnN0YXJ0ID0gbWluOworCQlpZiAodG1wLmVuZCA+IG1heCkKKwkJCXRtcC5lbmQgPSBtYXg7CisJCXRtcC5zdGFydCA9IEFMSUdOKHRtcC5zdGFydCwgYWxpZ24pOwogCQlpZiAoYWxpZ25mKQotCQkJYWxpZ25mKGFsaWduZl9kYXRhLCBuZXcsIHNpemUsIGFsaWduKTsKLQkJaWYgKHN0YXJ0IDwgZW5kICYmIGVuZCAtIHN0YXJ0ID49IHNpemUgLSAxKSB7Ci0JCQluZXctPnN0YXJ0ID0gc3RhcnQ7Ci0JCQluZXctPmVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDE7CisJCQlhbGlnbmYoYWxpZ25mX2RhdGEsICZ0bXAsIHNpemUsIGFsaWduKTsKKwkJaWYgKHRtcC5zdGFydCA8IHRtcC5lbmQgJiYgdG1wLmVuZCAtIHRtcC5zdGFydCA+PSBzaXplIC0gMSkgeworCQkJbmV3LT5zdGFydCA9IHRtcC5zdGFydDsKKwkJCW5ldy0+ZW5kID0gdG1wLnN0YXJ0ICsgc2l6ZSAtIDE7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoIXRoaXMpCiAJCQlicmVhazsKLQkJc3RhcnQgPSB0aGlzLT5lbmQgKyAxOworCQl0bXAuc3RhcnQgPSB0aGlzLT5lbmQgKyAxOwogCQl0aGlzID0gdGhpcy0+c2libGluZzsKIAl9CiAJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4LWRlYnVnLmMgYi9rZXJuZWwvcnRtdXRleC1kZWJ1Zy5jCmluZGV4IDVmY2I0ZmUuLmRkYWJiNTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LWRlYnVnLmMKKysrIGIva2VybmVsL3J0bXV0ZXgtZGVidWcuYwpAQCAtMzcsOCArMzcsOCBAQAogCWlmIChydF90cmFjZV9vbikgewkJCQkJXAogCQlydF90cmFjZV9vbiA9IDA7CQkJCVwKIAkJY29uc29sZV92ZXJib3NlKCk7CQkJCVwKLQkJaWYgKHNwaW5faXNfbG9ja2VkKCZjdXJyZW50LT5waV9sb2NrKSkJCVwKLQkJCXNwaW5fdW5sb2NrKCZjdXJyZW50LT5waV9sb2NrKTsJCVwKKwkJaWYgKHJhd19zcGluX2lzX2xvY2tlZCgmY3VycmVudC0+cGlfbG9jaykpCVwKKwkJCXJhd19zcGluX3VubG9jaygmY3VycmVudC0+cGlfbG9jayk7CVwKIAl9CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4LmMgYi9rZXJuZWwvcnRtdXRleC5jCmluZGV4IDI5YmQ0YmEuLmE5NjA0ODEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LmMKKysrIGIva2VybmVsL3J0bXV0ZXguYwpAQCAtMTM4LDkgKzEzOCw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CiAJX19ydF9tdXRleF9hZGp1c3RfcHJpbyh0YXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnBpX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTE5NSw3ICsxOTUsNyBAQAogCS8qCiAJICogVGFzayBjYW4gbm90IGdvIGF3YXkgYXMgd2UgZGlkIGEgZ2V0X3Rhc2soKSBiZWZvcmUgIQogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CiAKIAl3YWl0ZXIgPSB0YXNrLT5waV9ibG9ja2VkX29uOwogCS8qCkBAIC0yMzEsOCArMjMxLDggQEAKIAkJZ290byBvdXRfdW5sb2NrX3BpOwogCiAJbG9jayA9IHdhaXRlci0+bG9jazsKLQlpZiAoIXNwaW5fdHJ5bG9jaygmbG9jay0+d2FpdF9sb2NrKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJaWYgKCFyYXdfc3Bpbl90cnlsb2NrKCZsb2NrLT53YWl0X2xvY2spKSB7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CiAJCWNwdV9yZWxheCgpOwogCQlnb3RvIHJldHJ5OwogCX0KQEAgLTI0MCw3ICsyNDAsNyBAQAogCS8qIERlYWRsb2NrIGRldGVjdGlvbiAqLwogCWlmIChsb2NrID09IG9yaWdfbG9jayB8fCBydF9tdXRleF9vd25lcihsb2NrKSA9PSB0b3BfdGFzaykgewogCQlkZWJ1Z19ydF9tdXRleF9kZWFkbG9jayhkZWFkbG9ja19kZXRlY3QsIG9yaWdfd2FpdGVyLCBsb2NrKTsKLQkJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAkJcmV0ID0gZGVhZGxvY2tfZGV0ZWN0ID8gLUVERUFETEsgOiAwOwogCQlnb3RvIG91dF91bmxvY2tfcGk7CiAJfQpAQCAtMjUzLDEzICsyNTMsMTMgQEAKIAlwbGlzdF9hZGQoJndhaXRlci0+bGlzdF9lbnRyeSwgJmxvY2stPndhaXRfbGlzdCk7CiAKIAkvKiBSZWxlYXNlIHRoZSB0YXNrICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCiAJLyogR3JhYiB0aGUgbmV4dCB0YXNrICovCiAJdGFzayA9IHJ0X211dGV4X293bmVyKGxvY2spOwogCWdldF90YXNrX3N0cnVjdCh0YXNrKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHdhaXRlciA9PSBydF9tdXRleF90b3Bfd2FpdGVyKGxvY2spKSB7CiAJCS8qIEJvb3N0IHRoZSBvd25lciAqLwpAQCAtMjc3LDEwICsyNzcsMTAgQEAKIAkJX19ydF9tdXRleF9hZGp1c3RfcHJpbyh0YXNrKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnBpX2xvY2ssIGZsYWdzKTsKIAogCXRvcF93YWl0ZXIgPSBydF9tdXRleF90b3Bfd2FpdGVyKGxvY2spOwotCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCWlmICghZGV0ZWN0X2RlYWRsb2NrICYmIHdhaXRlciAhPSB0b3Bfd2FpdGVyKQogCQlnb3RvIG91dF9wdXRfdGFzazsKQEAgLTI4OCw3ICsyODgsNyBAQAogCWdvdG8gYWdhaW47CiAKICBvdXRfdW5sb2NrX3BpOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnBpX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogIG91dF9wdXRfdGFzazoKIAlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAKQEAgLTMxMyw5ICszMTMsOSBAQAogCWlmIChwZW5kb3duZXIgPT0gdGFzaykKIAkJcmV0dXJuIDE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGVuZG93bmVyLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwZW5kb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAlpZiAodGFzay0+cHJpbyA+PSBwZW5kb3duZXItPnByaW8pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVuZG93bmVyLT5waV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZW5kb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkgKiBwcmlvcml0eS4KIAkgKi8KIAlpZiAobGlrZWx5KCFydF9tdXRleF9oYXNfd2FpdGVycyhsb2NrKSkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVuZG93bmVyLT5waV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZW5kb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAluZXh0ID0gcnRfbXV0ZXhfdG9wX3dhaXRlcihsb2NrKTsKIAlwbGlzdF9kZWwoJm5leHQtPnBpX2xpc3RfZW50cnksICZwZW5kb3duZXItPnBpX3dhaXRlcnMpOwogCV9fcnRfbXV0ZXhfYWRqdXN0X3ByaW8ocGVuZG93bmVyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZW5kb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVuZG93bmVyLT5waV9sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIFdlIGFyZSBnb2luZyB0byBzdGVhbCB0aGUgbG9jayBhbmQgYSB3YWl0ZXIgd2FzCkBAIC0zNTAsMTAgKzM1MCwxMCBAQAogCSAqIG1pZ2h0IGJlIHRhc2s6CiAJICovCiAJaWYgKGxpa2VseShuZXh0LT50YXNrICE9IHRhc2spKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCQlwbGlzdF9hZGQoJm5leHQtPnBpX2xpc3RfZW50cnksICZ0YXNrLT5waV93YWl0ZXJzKTsKIAkJX19ydF9tdXRleF9hZGp1c3RfcHJpbyh0YXNrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTQyMCw3ICs0MjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNoYWluX3dhbGsgPSAwLCByZXM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCV9fcnRfbXV0ZXhfYWRqdXN0X3ByaW8odGFzayk7CiAJd2FpdGVyLT50YXNrID0gdGFzazsKIAl3YWl0ZXItPmxvY2sgPSBsb2NrOwpAQCAtNDM0LDE3ICs0MzQsMTcgQEAKIAogCXRhc2stPnBpX2Jsb2NrZWRfb24gPSB3YWl0ZXI7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnBpX2xvY2ssIGZsYWdzKTsKIAogCWlmICh3YWl0ZXIgPT0gcnRfbXV0ZXhfdG9wX3dhaXRlcihsb2NrKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvd25lci0+cGlfbG9jaywgZmxhZ3MpOwogCQlwbGlzdF9kZWwoJnRvcF93YWl0ZXItPnBpX2xpc3RfZW50cnksICZvd25lci0+cGlfd2FpdGVycyk7CiAJCXBsaXN0X2FkZCgmd2FpdGVyLT5waV9saXN0X2VudHJ5LCAmb3duZXItPnBpX3dhaXRlcnMpOwogCiAJCV9fcnRfbXV0ZXhfYWRqdXN0X3ByaW8ob3duZXIpOwogCQlpZiAob3duZXItPnBpX2Jsb2NrZWRfb24pCiAJCQljaGFpbl93YWxrID0gMTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm93bmVyLT5waV9sb2NrLCBmbGFncyk7CiAJfQogCWVsc2UgaWYgKGRlYnVnX3J0X211dGV4X2RldGVjdF9kZWFkbG9jayh3YWl0ZXIsIGRldGVjdF9kZWFkbG9jaykpCiAJCWNoYWluX3dhbGsgPSAxOwpAQCAtNDU5LDEyICs0NTksMTIgQEAKIAkgKi8KIAlnZXRfdGFza19zdHJ1Y3Qob3duZXIpOwogCi0Jc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCiAJcmVzID0gcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4ob3duZXIsIGRldGVjdF9kZWFkbG9jaywgbG9jaywgd2FpdGVyLAogCQkJCQkgdGFzayk7CiAKLQlzcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCXJldHVybiByZXM7CiB9CkBAIC00ODMsNyArNDgzLDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBlbmRvd25lcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnBpX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnBpX2xvY2ssIGZsYWdzKTsKIAogCXdhaXRlciA9IHJ0X211dGV4X3RvcF93YWl0ZXIobG9jayk7CiAJcGxpc3RfZGVsKCZ3YWl0ZXItPmxpc3RfZW50cnksICZsb2NrLT53YWl0X2xpc3QpOwpAQCAtNTAwLDcgKzUwMCw3IEBACiAKIAlydF9tdXRleF9zZXRfb3duZXIobG9jaywgcGVuZG93bmVyLCBSVF9NVVRFWF9PV05FUl9QRU5ESU5HKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnBpX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+cGlfbG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBDbGVhciB0aGUgcGlfYmxvY2tlZF9vbiB2YXJpYWJsZSBhbmQgZW5xdWV1ZSBhIHBvc3NpYmxlCkBAIC01MDksNyArNTA5LDcgQEAKIAkgKiB3YWl0ZXIgd2l0aCBoaWdoZXIgcHJpb3JpdHkgdGhhbiBwZW5kaW5nLW93bmVyLT5ub3JtYWxfcHJpbwogCSAqIGlzIGJsb2NrZWQgb24gdGhlIHVuYm9vc3RlZCAocGVuZGluZykgb3duZXIuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBlbmRvd25lci0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGVuZG93bmVyLT5waV9sb2NrLCBmbGFncyk7CiAKIAlXQVJOX09OKCFwZW5kb3duZXItPnBpX2Jsb2NrZWRfb24pOwogCVdBUk5fT04ocGVuZG93bmVyLT5waV9ibG9ja2VkX29uICE9IHdhaXRlcik7CkBAIC01MjMsNyArNTIzLDcgQEAKIAkJbmV4dCA9IHJ0X211dGV4X3RvcF93YWl0ZXIobG9jayk7CiAJCXBsaXN0X2FkZCgmbmV4dC0+cGlfbGlzdF9lbnRyeSwgJnBlbmRvd25lci0+cGlfd2FpdGVycyk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBlbmRvd25lci0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZW5kb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAogCXdha2VfdXBfcHJvY2VzcyhwZW5kb3duZXIpOwogfQpAQCAtNTQxLDE1ICs1NDEsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjaGFpbl93YWxrID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5waV9sb2NrLCBmbGFncyk7CiAJcGxpc3RfZGVsKCZ3YWl0ZXItPmxpc3RfZW50cnksICZsb2NrLT53YWl0X2xpc3QpOwogCXdhaXRlci0+dGFzayA9IE5VTEw7CiAJY3VycmVudC0+cGlfYmxvY2tlZF9vbiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5waV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoZmlyc3QgJiYgb3duZXIgIT0gY3VycmVudCkgewogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZvd25lci0+cGlfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm93bmVyLT5waV9sb2NrLCBmbGFncyk7CiAKIAkJcGxpc3RfZGVsKCZ3YWl0ZXItPnBpX2xpc3RfZW50cnksICZvd25lci0+cGlfd2FpdGVycyk7CiAKQEAgLTU2NCw3ICs1NjQsNyBAQAogCQlpZiAob3duZXItPnBpX2Jsb2NrZWRfb24pCiAJCQljaGFpbl93YWxrID0gMTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvd25lci0+cGlfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlXQVJOX09OKCFwbGlzdF9ub2RlX2VtcHR5KCZ3YWl0ZXItPnBpX2xpc3RfZW50cnkpKTsKQEAgLTU3NSwxMSArNTc1LDExIEBACiAJLyogZ2V0cyBkcm9wcGVkIGluIHJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKCkhICovCiAJZ2V0X3Rhc2tfc3RydWN0KG93bmVyKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCXJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKG93bmVyLCAwLCBsb2NrLCBOVUxMLCBjdXJyZW50KTsKIAotCXNwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogfQogCiAvKgpAQCAtNTkyLDE1ICs1OTIsMTUgQEAKIAlzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICp3YWl0ZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CiAKIAl3YWl0ZXIgPSB0YXNrLT5waV9ibG9ja2VkX29uOwogCWlmICghd2FpdGVyIHx8IHdhaXRlci0+bGlzdF9lbnRyeS5wcmlvID09IHRhc2stPnByaW8pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT5waV9sb2NrLCBmbGFncyk7CiAKIAkvKiBnZXRzIGRyb3BwZWQgaW4gcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4oKSEgKi8KIAlnZXRfdGFza19zdHJ1Y3QodGFzayk7CkBAIC02NzIsMTQgKzY3MiwxNCBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCQlkZWJ1Z19ydF9tdXRleF9wcmludF9kZWFkbG9jayh3YWl0ZXIpOwogCiAJCWlmICh3YWl0ZXItPnRhc2spCiAJCQlzY2hlZHVsZV9ydF9tdXRleChsb2NrKTsKIAotCQlzcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CisJCXJhd19zcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CiAJCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKIAl9CiAKQEAgLTcwMCwxMSArNzAwLDExIEBACiAJZGVidWdfcnRfbXV0ZXhfaW5pdF93YWl0ZXIoJndhaXRlcik7CiAJd2FpdGVyLnRhc2sgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXJhd19zcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CiAKIAkvKiBUcnkgdG8gYWNxdWlyZSB0aGUgbG9jayBhZ2FpbjogKi8KIAlpZiAodHJ5X3RvX3Rha2VfcnRfbXV0ZXgobG9jaykpIHsKLQkJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MzEsNyArNzMxLDcgQEAKIAkgKi8KIAlmaXh1cF9ydF9tdXRleF93YWl0ZXJzKGxvY2spOwogCi0Jc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCiAJLyogUmVtb3ZlIHBlbmRpbmcgdGltZXI6ICovCiAJaWYgKHVubGlrZWx5KHRpbWVvdXQpKQpAQCAtNzU4LDcgKzc1OCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCWlmIChsaWtlbHkocnRfbXV0ZXhfb3duZXIobG9jaykgIT0gY3VycmVudCkpIHsKIApAQCAtNzcwLDcgKzc3MCw3IEBACiAJCWZpeHVwX3J0X211dGV4X3dhaXRlcnMobG9jayk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc4MSw3ICs3ODEsNyBAQAogc3RhdGljIHZvaWQgX19zY2hlZAogcnRfbXV0ZXhfc2xvd3VubG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2spCiB7Ci0Jc3Bpbl9sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXJhd19zcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CiAKIAlkZWJ1Z19ydF9tdXRleF91bmxvY2sobG9jayk7CiAKQEAgLTc4OSwxMyArNzg5LDEzIEBACiAKIAlpZiAoIXJ0X211dGV4X2hhc193YWl0ZXJzKGxvY2spKSB7CiAJCWxvY2stPm93bmVyID0gTlVMTDsKLQkJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAogCXdha2V1cF9uZXh0X3dhaXRlcihsb2NrKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCS8qIFVuZG8gcGkgYm9vc3RpbmcgaWYgbmVjZXNzYXJ5OiAqLwogCXJ0X211dGV4X2FkanVzdF9wcmlvKGN1cnJlbnQpOwpAQCAtOTcwLDggKzk3MCw4IEBACiB2b2lkIF9fcnRfbXV0ZXhfaW5pdChzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJbG9jay0+b3duZXIgPSBOVUxMOwotCXNwaW5fbG9ja19pbml0KCZsb2NrLT53YWl0X2xvY2spOwotCXBsaXN0X2hlYWRfaW5pdCgmbG9jay0+d2FpdF9saXN0LCAmbG9jay0+d2FpdF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmxvY2stPndhaXRfbG9jayk7CisJcGxpc3RfaGVhZF9pbml0X3JhdygmbG9jay0+d2FpdF9saXN0LCAmbG9jay0+d2FpdF9sb2NrKTsKIAogCWRlYnVnX3J0X211dGV4X2luaXQobG9jaywgbmFtZSk7CiB9CkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCW1hcmtfcnRfbXV0ZXhfd2FpdGVycyhsb2NrKTsKIApAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAkJLyogV2UgZ290IHRoZSBsb2NrIGZvciB0YXNrLiAqLwogCQlkZWJ1Z19ydF9tdXRleF9sb2NrKGxvY2spOwogCQlydF9tdXRleF9zZXRfb3duZXIobG9jaywgdGFzaywgMCk7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CiAJCXJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhsb2NrLCB0YXNrKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKIAkJICovCiAJCXJldCA9IDA7CiAJfQotCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCWRlYnVnX3J0X211dGV4X3ByaW50X2RlYWRsb2NrKHdhaXRlcik7CiAKQEAgLTExMDYsNyArMTEwNiw3IEBACiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIApAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIAkgKi8KIAlmaXh1cF9ydF9tdXRleF93YWl0ZXJzKGxvY2spOwogCi0Jc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCiAJLyoKIAkgKiBSZWFkanVzdCBwcmlvcml0eSwgd2hlbiB3ZSBkaWQgbm90IGdldCB0aGUgbG9jay4gV2UgbWlnaHQgaGF2ZSBiZWVuCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGU3ZjJjZmEuLmM1MzVjYzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAogc3RydWN0IHJ0X2JhbmR3aWR0aCB7CiAJLyogbmVzdHMgaW5zaWRlIHRoZSBycSBsb2NrOiAqLwotCXNwaW5sb2NrX3QJCXJ0X3J1bnRpbWVfbG9jazsKKwlyYXdfc3BpbmxvY2tfdAkJcnRfcnVudGltZV9sb2NrOwogCWt0aW1lX3QJCQlydF9wZXJpb2Q7CiAJdTY0CQkJcnRfcnVudGltZTsKIAlzdHJ1Y3QgaHJ0aW1lcgkJcnRfcGVyaW9kX3RpbWVyOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcnRfYi0+cnRfcGVyaW9kID0gbnNfdG9fa3RpbWUocGVyaW9kKTsKIAlydF9iLT5ydF9ydW50aW1lID0gcnVudGltZTsKIAotCXNwaW5fbG9ja19pbml0KCZydF9iLT5ydF9ydW50aW1lX2xvY2spOworCXJhd19zcGluX2xvY2tfaW5pdCgmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKIAogCWhydGltZXJfaW5pdCgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyLAogCQkJQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWlmIChocnRpbWVyX2FjdGl2ZSgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyKSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOworCXJhd19zcGluX2xvY2soJnJ0X2ItPnJ0X3J1bnRpbWVfbG9jayk7CiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGRlbHRhOwogCQlrdGltZV90IHNvZnQsIGhhcmQ7CkBAIC0yMTcsNyArMjE3LDcgQEAKIAkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZydF9iLT5ydF9wZXJpb2RfdGltZXIsIHNvZnQsIGRlbHRhLAogCQkJCUhSVElNRVJfTU9ERV9BQlNfUElOTkVELCAwKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnJ0X2ItPnJ0X3J1bnRpbWVfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOwogfQogCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECkBAIC0yOTgsNyArMjk4LDcgQEAKIAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHksIGluaXRfc2NoZWRfcnRfZW50aXR5KTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcnRfcnEsIGluaXRfcnRfcnEpOworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBydF9ycSwgaW5pdF9ydF9ycV92YXIpOwogI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwogI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjZGVmaW5lIHJvb3RfdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXAKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXU2NCBydF90aW1lOwogCXU2NCBydF9ydW50aW1lOwogCS8qIE5lc3RzIGluc2lkZSB0aGUgcnEgbG9jazogKi8KLQlzcGlubG9ja190IHJ0X3J1bnRpbWVfbG9jazsKKwlyYXdfc3BpbmxvY2tfdCBydF9ydW50aW1lX2xvY2s7CiAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAl1bnNpZ25lZCBsb25nIHJ0X25yX2Jvb3N0ZWQ7CkBAIC01MjUsNyArNTI1LDcgQEAKICAqLwogc3RydWN0IHJxIHsKIAkvKiBydW5xdWV1ZSBsb2NrOiAqLwotCXNwaW5sb2NrX3QgbG9jazsKKwlyYXdfc3BpbmxvY2tfdCBsb2NrOwogCiAJLyoKIAkgKiBucl9ydW5uaW5nIGFuZCBjcHVfbG9hZCBzaG91bGQgYmUgaW4gdGhlIHNhbWUgY2FjaGVsaW5lIGJlY2F1c2UKQEAgLTY4NSw3ICs2ODUsNyBAQAogICovCiBpbnQgcnVucXVldWVfaXNfbG9ja2VkKGludCBjcHUpCiB7Ci0JcmV0dXJuIHNwaW5faXNfbG9ja2VkKCZjcHVfcnEoY3B1KS0+bG9jayk7CisJcmV0dXJuIHJhd19zcGluX2lzX2xvY2tlZCgmY3B1X3JxKGNwdSktPmxvY2spOwogfQogCiAvKgpAQCAtODE0LDYgKzgxNCw3IEBACiAgKiBkZWZhdWx0OiAwLjI1bXMKICAqLwogdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0ID0gMjUwMDAwOwordW5zaWduZWQgaW50IG5vcm1hbGl6ZWRfc3lzY3RsX3NjaGVkX3NoYXJlc19yYXRlbGltaXQgPSAyNTAwMDA7CiAKIC8qCiAgKiBJbmplY3Qgc29tZSBmdXp6eW5lc3MgaW50byBjaGFuZ2luZyB0aGUgcGVyLWNwdSBncm91cCBzaGFyZXMKQEAgLTg5Miw3ICs4OTMsNyBAQAogCSAqLwogCXNwaW5fYWNxdWlyZSgmcnEtPmxvY2suZGVwX21hcCwgMCwgMCwgX1RISVNfSVBfKTsKIAotCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIH0KIAogI2Vsc2UgLyogX19BUkNIX1dBTlRfVU5MT0NLRURfQ1RYU1cgKi8KQEAgLTkxNiw5ICs5MTcsOSBAQAogCW5leHQtPm9uY3B1ID0gMTsKICNlbmRpZgogI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKLQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiAjZWxzZQotCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAjZW5kaWYKIH0KIApAQCAtOTQ4LDEwICs5NDksMTAgQEAKIHsKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwotCQlzcGluX2xvY2soJnJxLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkpKQogCQkJcmV0dXJuIHJxOwotCQlzcGluX3VubG9jaygmcnEtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAl9CiB9CiAKQEAgLTk2OCwxMCArOTY5LDEwIEBACiAJZm9yICg7OykgewogCQlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOwogCQlycSA9IHRhc2tfcnEocCk7Ci0JCXNwaW5fbG9jaygmcnEtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCiAJCQlyZXR1cm4gcnE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCAqZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssICpmbGFncyk7CiAJfQogfQogCkBAIC05ODAsMTkgKzk4MSwxOSBAQAogCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCiAJc21wX21iKCk7IC8qIHNwaW4tdW5sb2NrLXdhaXQgaXMgbm90IGEgZnVsbCBtZW1vcnkgYmFycmllciAqLwotCXNwaW5fdW5sb2NrX3dhaXQoJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfd2FpdCgmcnEtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBfX3Rhc2tfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnEpCiAJX19yZWxlYXNlcyhycS0+bG9jaykKIHsKLQlzcGluX3VubG9jaygmcnEtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19ycV91bmxvY2soc3RydWN0IHJxICpycSwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiAJX19yZWxlYXNlcyhycS0+bG9jaykKIHsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgKmZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssICpmbGFncyk7CiB9CiAKIC8qCkBAIC0xMDA1LDcgKzEwMDYsNyBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlycSA9IHRoaXNfcnEoKTsKLQlzcGluX2xvY2soJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAKIAlyZXR1cm4gcnE7CiB9CkBAIC0xMDUyLDEwICsxMDUzLDEwIEBACiAKIAlXQVJOX09OX09OQ0UoY3B1X29mKHJxKSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCi0Jc3Bpbl9sb2NrKCZycS0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJcnEtPmN1cnItPnNjaGVkX2NsYXNzLT50YXNrX3RpY2socnEsIHJxLT5jdXJyLCAxKTsKLQlzcGluX3VubG9jaygmcnEtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogfQpAQCAtMTA2OCwxMCArMTA2OSwxMCBAQAogewogCXN0cnVjdCBycSAqcnEgPSBhcmc7CiAKLQlzcGluX2xvY2soJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJaHJ0aW1lcl9yZXN0YXJ0KCZycS0+aHJ0aWNrX3RpbWVyKTsKIAlycS0+aHJ0aWNrX2NzZF9wZW5kaW5nID0gMDsKLQlzcGluX3VubG9jaygmcnEtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogfQogCiAvKgpAQCAtMTE3OCw3ICsxMTc5LDcgQEAKIHsKIAlpbnQgY3B1OwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0YXNrX3JxKHApLT5sb2NrKTsKKwlhc3NlcnRfcmF3X3NwaW5fbG9ja2VkKCZ0YXNrX3JxKHApLT5sb2NrKTsKIAogCWlmICh0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocCkpCiAJCXJldHVybjsKQEAgLTEyMDAsMTAgKzEyMDEsMTAgQEAKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncykpCisJaWYgKCFyYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncykpCiAJCXJldHVybjsKIAlyZXNjaGVkX3Rhc2soY3B1X2N1cnIoY3B1KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19OT19IWgpAQCAtMTI3Miw3ICsxMjczLDcgQEAKICNlbHNlIC8qICFDT05GSUdfU01QICovCiBzdGF0aWMgdm9pZCByZXNjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCWFzc2VydF9zcGluX2xvY2tlZCgmdGFza19ycShwKS0+bG9jayk7CisJYXNzZXJ0X3Jhd19zcGluX2xvY2tlZCgmdGFza19ycShwKS0+bG9jayk7CiAJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CiB9CiAKQEAgLTE1OTksMTEgKzE2MDAsMTEgQEAKIAkJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJCXRnLT5jZnNfcnFbY3B1XS0+cnFfd2VpZ2h0ID0gYm9vc3QgPyAwIDogcnFfd2VpZ2h0OwogCQl0Zy0+Y2ZzX3JxW2NwdV0tPnNoYXJlcyA9IGJvb3N0ID8gMCA6IHNoYXJlczsKIAkJX19zZXRfc2Vfc2hhcmVzKHRnLT5zZVtjcHVdLCBzaGFyZXMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTE2MTQsNyArMTYxNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdGdfc2hhcmVzX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHdlaWdodCwgcnFfd2VpZ2h0ID0gMCwgc2hhcmVzID0gMDsKKwl1bnNpZ25lZCBsb25nIHdlaWdodCwgcnFfd2VpZ2h0ID0gMCwgc3VtX3dlaWdodCA9IDAsIHNoYXJlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyAqdXNkX3JxX3dlaWdodDsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2MzAsNiArMTYzMSw3IEBACiAJCXdlaWdodCA9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OwogCQl1c2RfcnFfd2VpZ2h0W2ldID0gd2VpZ2h0OwogCisJCXJxX3dlaWdodCArPSB3ZWlnaHQ7CiAJCS8qCiAJCSAqIElmIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gdGFza3Mgb24gdGhlIGNwdSBwcmV0ZW5kIHRoZXJlCiAJCSAqIGlzIG9uZSBvZiBhdmVyYWdlIGxvYWQgc28gdGhhdCB3aGVuIGEgbmV3IHRhc2sgZ2V0cyB0bwpAQCAtMTYzOCwxMCArMTY0MCwxMyBAQAogCQlpZiAoIXdlaWdodCkKIAkJCXdlaWdodCA9IE5JQ0VfMF9MT0FEOwogCi0JCXJxX3dlaWdodCArPSB3ZWlnaHQ7CisJCXN1bV93ZWlnaHQgKz0gd2VpZ2h0OwogCQlzaGFyZXMgKz0gdGctPmNmc19ycVtpXS0+c2hhcmVzOwogCX0KIAorCWlmICghcnFfd2VpZ2h0KQorCQlycV93ZWlnaHQgPSBzdW1fd2VpZ2h0OworCiAJaWYgKCghc2hhcmVzICYmIHJxX3dlaWdodCkgfHwgc2hhcmVzID4gdGctPnNoYXJlcykKIAkJc2hhcmVzID0gdGctPnNoYXJlczsKIApAQCAtMTcwMSw5ICsxNzA2LDkgQEAKIAlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCiAJCXJldHVybjsKIAotCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJdXBkYXRlX3NoYXJlcyhzZCk7Ci0Jc3Bpbl9sb2NrKCZycS0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfaF9sb2FkKGxvbmcgY3B1KQpAQCAtMTc0Myw3ICsxNzQ4LDcgQEAKIAlfX2FjcXVpcmVzKGJ1c2llc3QtPmxvY2spCiAJX19hY3F1aXJlcyh0aGlzX3JxLT5sb2NrKQogewotCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwogCWRvdWJsZV9ycV9sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOwogCiAJcmV0dXJuIDE7CkBAIC0xNzY0LDE0ICsxNzY5LDE2IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9jaygmYnVzaWVzdC0+bG9jaykpKSB7CisJaWYgKHVubGlrZWx5KCFyYXdfc3Bpbl90cnlsb2NrKCZidXNpZXN0LT5sb2NrKSkpIHsKIAkJaWYgKGJ1c2llc3QgPCB0aGlzX3JxKSB7Ci0JCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7Ci0JCQlzcGluX2xvY2soJmJ1c2llc3QtPmxvY2spOwotCQkJc3Bpbl9sb2NrX25lc3RlZCgmdGhpc19ycS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQkJcmF3X3NwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2soJmJ1c2llc3QtPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnRoaXNfcnEtPmxvY2ssCisJCQkJCSAgICAgIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJCXJldCA9IDE7CiAJCX0gZWxzZQotCQkJc3Bpbl9sb2NrX25lc3RlZCgmYnVzaWVzdC0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJmJ1c2llc3QtPmxvY2ssCisJCQkJCSAgICAgIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3ODUsNyArMTc5Miw3IEBACiB7CiAJaWYgKHVubGlrZWx5KCFpcnFzX2Rpc2FibGVkKCkpKSB7CiAJCS8qIHByaW50aygpIGRvZXNuJ3Qgd29yayBnb29kIHVuZGVyIHJxLT5sb2NrICovCi0JCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKIAkJQlVHX09OKDEpOwogCX0KIApAQCAtMTc5NSw3ICsxODAyLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfdW5sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCiAJX19yZWxlYXNlcyhidXNpZXN0LT5sb2NrKQogewotCXNwaW5fdW5sb2NrKCZidXNpZXN0LT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmJ1c2llc3QtPmxvY2spOwogCWxvY2tfc2V0X3N1YmNsYXNzKCZ0aGlzX3JxLT5sb2NrLmRlcF9tYXAsIDAsIF9SRVRfSVBfKTsKIH0KICNlbmRpZgpAQCAtMTgxMCw2ICsxODE3LDIyIEBACiAjZW5kaWYKIAogc3RhdGljIHZvaWQgY2FsY19sb2FkX2FjY291bnRfYWN0aXZlKHN0cnVjdCBycSAqdGhpc19ycSk7CitzdGF0aWMgdm9pZCB1cGRhdGVfc3lzY3RsKHZvaWQpOworc3RhdGljIGludCBnZXRfdXBkYXRlX3N5c2N0bF9mYWN0b3Iodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCit7CisJc2V0X3Rhc2tfcnEocCwgY3B1KTsKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBBZnRlciAtPmNwdSBpcyBzZXQgdXAgdG8gYSBuZXcgdmFsdWUsIHRhc2tfcnFfbG9jayhwLCAuLi4pIGNhbiBiZQorCSAqIHN1Y2Nlc3NmdWx5IGV4ZWN1dGVkIG9uIGFub3RoZXIgQ1BVLiBXZSBtdXN0IGVuc3VyZSB0aGF0IHVwZGF0ZXMgb2YKKwkgKiBwZXItdGFzayBkYXRhIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgdGhpcyBtb21lbnQuCisJICovCisJc21wX3dtYigpOworCXRhc2tfdGhyZWFkX2luZm8ocCktPmNwdSA9IGNwdTsKKyNlbmRpZgorfQogCiAjaW5jbHVkZSAic2NoZWRfc3RhdHMuaCIKICNpbmNsdWRlICJzY2hlZF9pZGxldGFzay5jIgpAQCAtMTk2NywyMCArMTk5MCw2IEBACiAJcmV0dXJuIGNwdV9jdXJyKHRhc2tfY3B1KHApKSA9PSBwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCXNldF90YXNrX3JxKHAsIGNwdSk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCS8qCi0JICogQWZ0ZXIgLT5jcHUgaXMgc2V0IHVwIHRvIGEgbmV3IHZhbHVlLCB0YXNrX3JxX2xvY2socCwgLi4uKSBjYW4gYmUKLQkgKiBzdWNjZXNzZnVseSBleGVjdXRlZCBvbiBhbm90aGVyIENQVS4gV2UgbXVzdCBlbnN1cmUgdGhhdCB1cGRhdGVzIG9mCi0JICogcGVyLXRhc2sgZGF0YSBoYXZlIGJlZW4gY29tcGxldGVkIGJ5IHRoaXMgbW9tZW50LgotCSAqLwotCXNtcF93bWIoKTsKLQl0YXNrX3RocmVhZF9pbmZvKHApLT5jcHUgPSBjcHU7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NsYXNzX2NoYW5nZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MsCiAJCQkJICAgICAgIGludCBvbGRwcmlvLCBpbnQgcnVubmluZykKQEAgLTE5OTMsMzkgKzIwMDIsNiBAQAogCQlwLT5zY2hlZF9jbGFzcy0+cHJpb19jaGFuZ2VkKHJxLCBwLCBvbGRwcmlvLCBydW5uaW5nKTsKIH0KIAotLyoqCi0gKiBrdGhyZWFkX2JpbmQgLSBiaW5kIGEganVzdC1jcmVhdGVkIGt0aHJlYWQgdG8gYSBjcHUuCi0gKiBAcDogdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KLSAqIEBjcHU6IGNwdSAobWlnaHQgbm90IGJlIG9ubGluZSwgbXVzdCBiZSBwb3NzaWJsZSkgZm9yIEBrIHRvIHJ1biBvbi4KLSAqCi0gKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldF9jcHVzX2FsbG93ZWQoKSwKLSAqIGV4Y2VwdCB0aGF0IEBjcHUgZG9lc24ndCBuZWVkIHRvIGJlIG9ubGluZSwgYW5kIHRoZSB0aHJlYWQgbXVzdCBiZQotICogc3RvcHBlZCAoaS5lLiwganVzdCByZXR1cm5lZCBmcm9tIGt0aHJlYWRfY3JlYXRlKCkpLgotICoKLSAqIEZ1bmN0aW9uIGxpdmVzIGhlcmUgaW5zdGVhZCBvZiBrdGhyZWFkLmMgYmVjYXVzZSBpdCBtZXNzZXMgd2l0aAotICogc2NoZWR1bGVyIGludGVybmFscyB3aGljaCByZXF1aXJlIGxvY2tpbmcuCi0gKi8KLXZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KLQlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShwLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwotCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0Jc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0JcC0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOwotCXAtPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOwotCiAjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIElzIHRoaXMgdGFzayBsaWtlbHkgY2FjaGUtaG90OgpAQCAtMjAzNSw2ICsyMDExLDkgQEAKIHsKIAlzNjQgZGVsdGE7CiAKKwlpZiAocC0+c2NoZWRfY2xhc3MgIT0gJmZhaXJfc2NoZWRfY2xhc3MpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBCdWRkeSBjYW5kaWRhdGVzIGFyZSBjYWNoZSBob3Q6CiAJICovCkBAIC0yMDQzLDkgKzIwMjIsNiBAQAogCQkJICZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bGFzdCkpCiAJCXJldHVybiAxOwogCi0JaWYgKHAtPnNjaGVkX2NsYXNzICE9ICZmYWlyX3NjaGVkX2NsYXNzKQotCQlyZXR1cm4gMDsKLQogCWlmIChzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgPT0gLTEpCiAJCXJldHVybiAxOwogCWlmIChzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgPT0gMCkKQEAgLTIwNTYsMzggKzIwMzIsMjMgQEAKIAlyZXR1cm4gZGVsdGEgPCAoczY0KXN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKIH0KIAotCiB2b2lkIHNldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBuZXdfY3B1KQogewotCWludCBvbGRfY3B1ID0gdGFza19jcHUocCk7Ci0Jc3RydWN0IHJxICpvbGRfcnEgPSBjcHVfcnEob2xkX2NwdSksICpuZXdfcnEgPSBjcHVfcnEobmV3X2NwdSk7Ci0Jc3RydWN0IGNmc19ycSAqb2xkX2Nmc3JxID0gdGFza19jZnNfcnEocCksCi0JCSAgICAgICpuZXdfY2ZzcnEgPSBjcHVfY2ZzX3JxKG9sZF9jZnNycSwgbmV3X2NwdSk7Ci0JdTY0IGNsb2NrX29mZnNldDsKLQotCWNsb2NrX29mZnNldCA9IG9sZF9ycS0+Y2xvY2sgLSBuZXdfcnEtPmNsb2NrOworI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworCS8qCisJICogV2Ugc2hvdWxkIG5ldmVyIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2VkIHRhc2ssCisJICogdHR3dSgpIHdpbGwgc29ydCBvdXQgdGhlIHBsYWNlbWVudC4KKwkgKi8KKwlXQVJOX09OX09OQ0UocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HICYmCisJCQkhKHRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgJiBQUkVFTVBUX0FDVElWRSkpOworI2VuZGlmCiAKIAl0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7CiAKLSNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCWlmIChwLT5zZS53YWl0X3N0YXJ0KQotCQlwLT5zZS53YWl0X3N0YXJ0IC09IGNsb2NrX29mZnNldDsKLQlpZiAocC0+c2Uuc2xlZXBfc3RhcnQpCi0JCXAtPnNlLnNsZWVwX3N0YXJ0IC09IGNsb2NrX29mZnNldDsKLQlpZiAocC0+c2UuYmxvY2tfc3RhcnQpCi0JCXAtPnNlLmJsb2NrX3N0YXJ0IC09IGNsb2NrX29mZnNldDsKLSNlbmRpZgotCWlmIChvbGRfY3B1ICE9IG5ld19jcHUpIHsKKwlpZiAodGFza19jcHUocCkgIT0gbmV3X2NwdSkgewogCQlwLT5zZS5ucl9taWdyYXRpb25zKys7Ci0jaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQkJaWYgKHRhc2tfaG90KHAsIG9sZF9ycS0+Y2xvY2ssIE5VTEwpKQotCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mb3JjZWQyX21pZ3JhdGlvbnMpOwotI2VuZGlmCi0JCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUywKLQkJCQkgICAgIDEsIDEsIE5VTEwsIDApOworCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMsIDEsIDEsIE5VTEwsIDApOwogCX0KLQlwLT5zZS52cnVudGltZSAtPSBvbGRfY2ZzcnEtPm1pbl92cnVudGltZSAtCi0JCQkJCSBuZXdfY2ZzcnEtPm1pbl92cnVudGltZTsKIAogCV9fc2V0X3Rhc2tfY3B1KHAsIG5ld19jcHUpOwogfQpAQCAtMjExMiwxMyArMjA3MywxMCBAQAogCiAJLyoKIAkgKiBJZiB0aGUgdGFzayBpcyBub3Qgb24gYSBydW5xdWV1ZSAoYW5kIG5vdCBydW5uaW5nKSwgdGhlbgotCSAqIGl0IGlzIHN1ZmZpY2llbnQgdG8gc2ltcGx5IHVwZGF0ZSB0aGUgdGFzaydzIGNwdSBmaWVsZC4KKwkgKiB0aGUgbmV4dCB3YWtlLXVwIHdpbGwgcHJvcGVybHkgcGxhY2UgdGhlIHRhc2suCiAJICovCi0JaWYgKCFwLT5zZS5vbl9ycSAmJiAhdGFza19ydW5uaW5nKHJxLCBwKSkgewotCQl1cGRhdGVfcnFfY2xvY2socnEpOwotCQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOworCWlmICghcC0+c2Uub25fcnEgJiYgIXRhc2tfcnVubmluZyhycSwgcCkpCiAJCXJldHVybiAwOwotCX0KIAogCWluaXRfY29tcGxldGlvbigmcmVxLT5kb25lKTsKIAlyZXEtPnRhc2sgPSBwOwpAQCAtMjMyMyw2ICsyMjgxLDc3IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgc2VsZWN0X2ZhbGxiYWNrX3JxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpbnQgZGVzdF9jcHU7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrID0gY3B1bWFza19vZl9ub2RlKGNwdV90b19ub2RlKGNwdSkpOworCisJLyogTG9vayBmb3IgYWxsb3dlZCwgb25saW5lIENQVSBpbiBzYW1lIG5vZGUuICovCisJZm9yX2VhY2hfY3B1X2FuZChkZXN0X2NwdSwgbm9kZW1hc2ssIGNwdV9hY3RpdmVfbWFzaykKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZGVzdF9jcHUsICZwLT5jcHVzX2FsbG93ZWQpKQorCQkJcmV0dXJuIGRlc3RfY3B1OworCisJLyogQW55IGFsbG93ZWQsIG9ubGluZSBDUFU/ICovCisJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoJnAtPmNwdXNfYWxsb3dlZCwgY3B1X2FjdGl2ZV9tYXNrKTsKKwlpZiAoZGVzdF9jcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gZGVzdF9jcHU7CisKKwkvKiBObyBtb3JlIE1yLiBOaWNlIEd1eS4gKi8KKwlpZiAoZGVzdF9jcHUgPj0gbnJfY3B1X2lkcykgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHAsICZwLT5jcHVzX2FsbG93ZWQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoY3B1X2FjdGl2ZV9tYXNrLCAmcC0+Y3B1c19hbGxvd2VkKTsKKworCQkvKgorCQkgKiBEb24ndCB0ZWxsIHRoZW0gYWJvdXQgbW92aW5nIGV4aXRpbmcgdGFza3Mgb3IKKwkJICoga2VybmVsIHRocmVhZHMgKGJvdGggbW0gTlVMTCksIHNpbmNlIHRoZXkgbmV2ZXIKKwkJICogbGVhdmUga2VybmVsLgorCQkgKi8KKwkJaWYgKHAtPm1tICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicHJvY2VzcyAlZCAoJXMpIG5vICIKKwkJCSAgICAgICAibG9uZ2VyIGFmZmluZSB0byBjcHUlZFxuIiwKKwkJCSAgICAgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgY3B1KTsKKwkJfQorCX0KKworCXJldHVybiBkZXN0X2NwdTsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tOgorICoKKyAqICAtIGZvcmssIEBwIGlzIHN0YWJsZSBiZWNhdXNlIGl0IGlzbid0IG9uIHRoZSB0YXNrbGlzdCB5ZXQKKyAqCisgKiAgLSBleGVjLCBAcCBpcyB1bnN0YWJsZSwgcmV0cnkgbG9vcAorICoKKyAqICAtIHdha2UtdXAsIHdlIHNlcmlhbGl6ZSAtPmNwdXNfYWxsb3dlZCBhZ2FpbnN0IFRBU0tfV0FLSU5HIHNvCisgKiAgICAgICAgICAgICB3ZSBzaG91bGQgYmUgZ29vZC4KKyAqLworc3RhdGljIGlubGluZQoraW50IHNlbGVjdF90YXNrX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWdzLCBpbnQgd2FrZV9mbGFncykKK3sKKwlpbnQgY3B1ID0gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIHNkX2ZsYWdzLCB3YWtlX2ZsYWdzKTsKKworCS8qCisJICogSW4gb3JkZXIgbm90IHRvIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2luZyB0YXNrIHdlIG5lZWQKKwkgKiB0byByZWx5IG9uIHR0d3UoKSB0byBwbGFjZSB0aGUgdGFzayBvbiBhIHZhbGlkIC0+Y3B1c19hbGxvd2VkCisJICogY3B1LgorCSAqCisJICogU2luY2UgdGhpcyBpcyBjb21tb24gdG8gYWxsIHBsYWNlbWVudCBzdHJhdGVnaWVzLCB0aGlzIGxpdmVzIGhlcmUuCisJICoKKwkgKiBbIHRoaXMgYWxsb3dzIC0+c2VsZWN0X3Rhc2soKSB0byBzaW1wbHkgcmV0dXJuIHRhc2tfY3B1KHApIGFuZAorCSAqICAgbm90IHdvcnJ5IGFib3V0IHRoaXMgZ2VuZXJpYyBjb25zdHJhaW50IF0KKwkgKi8KKwlpZiAodW5saWtlbHkoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSB8fAorCQkgICAgICFjcHVfb25saW5lKGNwdSkpKQorCQljcHUgPSBzZWxlY3RfZmFsbGJhY2tfcnEodGFza19jcHUocCksIHApOworCisJcmV0dXJuIGNwdTsKK30KKyNlbmRpZgorCiAvKioqCiAgKiB0cnlfdG9fd2FrZV91cCAtIHdha2UgdXAgYSB0aHJlYWQKICAqIEBwOiB0aGUgdG8tYmUtd29rZW4tdXAgdGhyZWFkCkBAIC0yMzc0LDE3ICsyNDAzLDE4IEBACiAJaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKIAkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZS0tOwogCXAtPnN0YXRlID0gVEFTS19XQUtJTkc7Ci0JdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKLQljcHUgPSBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9XQUtFLCB3YWtlX2ZsYWdzKTsKLQlpZiAoY3B1ICE9IG9yaWdfY3B1KSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJcnEgPSBjcHVfcnEoY3B1KTsKLQkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FraW5nKQorCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtpbmcocnEsIHApOworCisJX190YXNrX3JxX3VubG9jayhycSk7CisKKwljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX1dBS0UsIHdha2VfZmxhZ3MpOworCWlmIChjcHUgIT0gb3JpZ19jcHUpCiAJCXNldF90YXNrX2NwdShwLCBjcHUpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisKKwlycSA9IF9fdGFza19ycV9sb2NrKHApOworCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKIAlXQVJOX09OKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKIAljcHUgPSB0YXNrX2NwdShwKTsKQEAgLTI0NDAsOCArMjQ3MCw4IEBACiAKIAlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXApCi0JCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXAocnEsIHApOworCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbikKKwkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4ocnEsIHApOwogCiAJaWYgKHVubGlrZWx5KHJxLT5pZGxlX3N0YW1wKSkgewogCQl1NjQgZGVsdGEgPSBycS0+Y2xvY2sgLSBycS0+aWRsZV9zdGFtcDsKQEAgLTI0OTksNyArMjUyOSw2IEBACiAJcC0+c2UuYXZnX292ZXJsYXAJCT0gMDsKIAlwLT5zZS5zdGFydF9ydW50aW1lCQk9IDA7CiAJcC0+c2UuYXZnX3dha2V1cAkJPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwotCXAtPnNlLmF2Z19ydW5uaW5nCQk9IDA7CiAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXAtPnNlLndhaXRfc3RhcnQJCQk9IDA7CkBAIC0yNTIxLDcgKzI1NTAsNiBAQAogCXAtPnNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX3J1bm5pbmcJPSAwOwogCXAtPnNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdAkJPSAwOwogCXAtPnNlLm5yX2ZvcmNlZF9taWdyYXRpb25zCQk9IDA7Ci0JcC0+c2UubnJfZm9yY2VkMl9taWdyYXRpb25zCQk9IDA7CiAKIAlwLT5zZS5ucl93YWtldXBzCQkJPSAwOwogCXAtPnNlLm5yX3dha2V1cHNfc3luYwkJCT0gMDsKQEAgLTI1NDIsMTQgKzI1NzAsNiBAQAogI2lmZGVmIENPTkZJR19QUkVFTVBUX05PVElGSUVSUwogCUlOSVRfSExJU1RfSEVBRCgmcC0+cHJlZW1wdF9ub3RpZmllcnMpOwogI2VuZGlmCi0KLQkvKgotCSAqIFdlIG1hcmsgdGhlIHByb2Nlc3MgYXMgcnVubmluZyBoZXJlLCBidXQgaGF2ZSBub3QgYWN0dWFsbHkKLQkgKiBpbnNlcnRlZCBpdCBvbnRvIHRoZSBydW5xdWV1ZSB5ZXQuIFRoaXMgZ3VhcmFudGVlcyB0aGF0Ci0JICogbm9ib2R5IHdpbGwgYWN0dWFsbHkgcnVuIGl0LCBhbmQgYSBzaWduYWwgb3Igb3RoZXIgZXh0ZXJuYWwKLQkgKiBldmVudCBjYW5ub3Qgd2FrZSBpdCB1cCBhbmQgaW5zZXJ0IGl0IG9uIHRoZSBydW5xdWV1ZSBlaXRoZXIuCi0JICovCi0JcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiB9CiAKIC8qCkBAIC0yNTU4LDkgKzI1NzgsMTQgQEAKIHZvaWQgc2NoZWRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjbG9uZV9mbGFncykKIHsKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlfX3NjaGVkX2ZvcmsocCk7CisJLyoKKwkgKiBXZSBtYXJrIHRoZSBwcm9jZXNzIGFzIHdha2luZyBoZXJlLiBUaGlzIGd1YXJhbnRlZXMgdGhhdAorCSAqIG5vYm9keSB3aWxsIGFjdHVhbGx5IHJ1biBpdCwgYW5kIGEgc2lnbmFsIG9yIG90aGVyIGV4dGVybmFsCisJICogZXZlbnQgY2Fubm90IHdha2UgaXQgdXAgYW5kIGluc2VydCBpdCBvbiB0aGUgcnVucXVldWUgZWl0aGVyLgorCSAqLworCXAtPnN0YXRlID0gVEFTS19XQUtJTkc7CiAKIAkvKgogCSAqIFJldmVydCB0byBkZWZhdWx0IHByaW9yaXR5L3BvbGljeSBvbiBmb3JrIGlmIHJlcXVlc3RlZC4KQEAgLTI1OTIsMTMgKzI2MTcsMTMgQEAKIAlpZiAoIXJ0X3ByaW8ocC0+cHJpbykpCiAJCXAtPnNjaGVkX2NsYXNzID0gJmZhaXJfc2NoZWRfY2xhc3M7CiAKKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfZm9yaykKKwkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfZm9yayhwKTsKKwogI2lmZGVmIENPTkZJR19TTVAKLQljcHUgPSBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9GT1JLLCAwKTsKKwljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX0ZPUkssIDApOwogI2VuZGlmCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVwZGF0ZV9ycV9jbG9jayhjcHVfcnEoY3B1KSk7CiAJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURTVEFUUykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKQogCWlmIChsaWtlbHkoc2NoZWRfaW5mb19vbigpKSkKQEAgLTI2MjksMjQgKzI2NTQsMTUgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQlCVUdfT04ocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKTsKKwlCVUdfT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOworCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0KLQlpZiAoIXAtPnNjaGVkX2NsYXNzLT50YXNrX25ldyB8fCAhY3VycmVudC0+c2Uub25fcnEpIHsKLQkJYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogTGV0IHRoZSBzY2hlZHVsaW5nIGNsYXNzIGRvIG5ldyB0YXNrIHN0YXJ0dXAKLQkJICogbWFuYWdlbWVudCAoaWYgYW55KToKLQkJICovCi0JCXAtPnNjaGVkX2NsYXNzLT50YXNrX25ldyhycSwgcCk7Ci0JCWluY19ucl9ydW5uaW5nKHJxKTsKLQl9CisJYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7CiAJdHJhY2Vfc2NoZWRfd2FrZXVwX25ldyhycSwgcCwgMSk7CiAJY2hlY2tfcHJlZW1wdF9jdXJyKHJxLCBwLCBXRl9GT1JLKTsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXApCi0JCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXAocnEsIHApOworCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbikKKwkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4ocnEsIHApOwogI2VuZGlmCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiB9CkBAIC0yNzk4LDEwICsyODE0LDEwIEBACiAJaWYgKHJxLT5wb3N0X3NjaGVkdWxlKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJxLT5jdXJyLT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZSkKIAkJCXJxLT5jdXJyLT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZShycSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCiAJCXJxLT5wb3N0X3NjaGVkdWxlID0gMDsKIAl9CkBAIC0zMDgzLDE1ICszMDk5LDE1IEBACiB7CiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCWlmIChycTEgPT0gcnEyKSB7Ci0JCXNwaW5fbG9jaygmcnExLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKIAkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCiAJfSBlbHNlIHsKIAkJaWYgKHJxMSA8IHJxMikgewotCQkJc3Bpbl9sb2NrKCZycTEtPmxvY2spOwotCQkJc3Bpbl9sb2NrX25lc3RlZCgmcnEyLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMi0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCQl9IGVsc2UgewotCQkJc3Bpbl9sb2NrKCZycTItPmxvY2spOwotCQkJc3Bpbl9sb2NrX25lc3RlZCgmcnExLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCQlyYXdfc3Bpbl9sb2NrKCZycTItPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCQl9CiAJfQogCXVwZGF0ZV9ycV9jbG9jayhycTEpOwpAQCAtMzEwOCwyOSArMzEyNCw0NCBAQAogCV9fcmVsZWFzZXMocnExLT5sb2NrKQogCV9fcmVsZWFzZXMocnEyLT5sb2NrKQogewotCXNwaW5fdW5sb2NrKCZycTEtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcnExLT5sb2NrKTsKIAlpZiAocnExICE9IHJxMikKLQkJc3Bpbl91bmxvY2soJnJxMi0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmcnEyLT5sb2NrKTsKIAllbHNlCiAJCV9fcmVsZWFzZShycTItPmxvY2spOwogfQogCiAvKgotICogSWYgZGVzdF9jcHUgaXMgYWxsb3dlZCBmb3IgdGhpcyBwcm9jZXNzLCBtaWdyYXRlIHRoZSB0YXNrIHRvIGl0LgotICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgZm9yY2luZyB0aGUgY3B1X2FsbG93ZWQgbWFzayB0byBvbmx5Ci0gKiBhbGxvdyBkZXN0X2NwdSwgd2hpY2ggd2lsbCBmb3JjZSB0aGUgY3B1IG9udG8gZGVzdF9jcHUuIFRoZW4KLSAqIHRoZSBjcHVfYWxsb3dlZCBtYXNrIGlzIHJlc3RvcmVkLgorICogc2NoZWRfZXhlYyAtIGV4ZWN2ZSgpIGlzIGEgdmFsdWFibGUgYmFsYW5jaW5nIG9wcG9ydHVuaXR5LCBiZWNhdXNlIGF0CisgKiB0aGlzIHBvaW50IHRoZSB0YXNrIGhhcyB0aGUgc21hbGxlc3QgZWZmZWN0aXZlIG1lbW9yeSBhbmQgY2FjaGUgZm9vdHByaW50LgogICovCi1zdGF0aWMgdm9pZCBzY2hlZF9taWdyYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZGVzdF9jcHUpCit2b2lkIHNjaGVkX2V4ZWModm9pZCkKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50OwogCXN0cnVjdCBtaWdyYXRpb25fcmVxIHJlcTsKKwlpbnQgZGVzdF9jcHUsIHRoaXNfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJxICpycTsKIAorYWdhaW46CisJdGhpc19jcHUgPSBnZXRfY3B1KCk7CisJZGVzdF9jcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX0VYRUMsIDApOworCWlmIChkZXN0X2NwdSA9PSB0aGlzX2NwdSkgeworCQlwdXRfY3B1KCk7CisJCXJldHVybjsKKwl9CisKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCXB1dF9jcHUoKTsKKworCS8qCisJICogc2VsZWN0X3Rhc2tfcnEoKSBjYW4gcmFjZSBhZ2FpbnN0IC0+Y3B1c19hbGxvd2VkCisJICovCiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKQotCSAgICB8fCB1bmxpa2VseSghY3B1X2FjdGl2ZShkZXN0X2NwdSkpKQotCQlnb3RvIG91dDsKKwkgICAgfHwgdW5saWtlbHkoIWNwdV9hY3RpdmUoZGVzdF9jcHUpKSkgeworCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwkJZ290byBhZ2FpbjsKKwl9CiAKIAkvKiBmb3JjZSB0aGUgcHJvY2VzcyBvbnRvIHRoZSBzcGVjaWZpZWQgQ1BVICovCiAJaWYgKG1pZ3JhdGVfdGFzayhwLCBkZXN0X2NwdSwgJnJlcSkpIHsKQEAgLTMxNDUsMjQgKzMxNzYsMTAgQEAKIAogCQlyZXR1cm47CiAJfQotb3V0OgogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQogCiAvKgotICogc2NoZWRfZXhlYyAtIGV4ZWN2ZSgpIGlzIGEgdmFsdWFibGUgYmFsYW5jaW5nIG9wcG9ydHVuaXR5LCBiZWNhdXNlIGF0Ci0gKiB0aGlzIHBvaW50IHRoZSB0YXNrIGhhcyB0aGUgc21hbGxlc3QgZWZmZWN0aXZlIG1lbW9yeSBhbmQgY2FjaGUgZm9vdHByaW50LgotICovCi12b2lkIHNjaGVkX2V4ZWModm9pZCkKLXsKLQlpbnQgbmV3X2NwdSwgdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0JbmV3X2NwdSA9IGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShjdXJyZW50LCBTRF9CQUxBTkNFX0VYRUMsIDApOwotCXB1dF9jcHUoKTsKLQlpZiAobmV3X2NwdSAhPSB0aGlzX2NwdSkKLQkJc2NoZWRfbWlncmF0ZV90YXNrKGN1cnJlbnQsIG5ld19jcHUpOwotfQotCi0vKgogICogcHVsbF90YXNrIC0gbW92ZSBhIHRhc2sgZnJvbSBhIHJlbW90ZSBydW5xdWV1ZSB0byB0aGUgbG9jYWwgcnVucXVldWUuCiAgKiBCb3RoIHJ1bnF1ZXVlcyBtdXN0IGJlIGxvY2tlZC4KICAqLwpAQCAtMzE3MiwxMCArMzE4OSw2IEBACiAJZGVhY3RpdmF0ZV90YXNrKHNyY19ycSwgcCwgMCk7CiAJc2V0X3Rhc2tfY3B1KHAsIHRoaXNfY3B1KTsKIAlhY3RpdmF0ZV90YXNrKHRoaXNfcnEsIHAsIDApOwotCS8qCi0JICogTm90ZSB0aGF0IGlkbGUgdGhyZWFkcyBoYXZlIGEgcHJpbyBvZiBNQVhfUFJJTywgZm9yIHRoaXMgdGVzdAotCSAqIHRvIGJlIGFsd2F5cyB0cnVlIGZvciB0aGVtLgotCSAqLwogCWNoZWNrX3ByZWVtcHRfY3Vycih0aGlzX3JxLCBwLCAwKTsKIH0KIApAQCAtNDEzNCw3ICs0MTQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7CiAKLQljcHVtYXNrX2NvcHkoY3B1cywgY3B1X29ubGluZV9tYXNrKTsKKwljcHVtYXNrX2NvcHkoY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTsKIAogCS8qCiAJICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQpAQCAtNDIwNywxNCArNDIyMCwxNSBAQAogCiAJCWlmICh1bmxpa2VseShzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcysyKSkgewogCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CiAKIAkJCS8qIGRvbid0IGtpY2sgdGhlIG1pZ3JhdGlvbl90aHJlYWQsIGlmIHRoZSBjdXJyCiAJCQkgKiB0YXNrIG9uIGJ1c2llc3QgY3B1IGNhbid0IGJlIG1vdmVkIHRvIHRoaXNfY3B1CiAJCQkgKi8KIAkJCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKIAkJCQkJICAgICAgJmJ1c2llc3QtPmN1cnItPmNwdXNfYWxsb3dlZCkpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CisJCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1c2llc3QtPmxvY2ssCisJCQkJCQkJICAgIGZsYWdzKTsKIAkJCQlhbGxfcGlubmVkID0gMTsKIAkJCQlnb3RvIG91dF9vbmVfcGlubmVkOwogCQkJfQpAQCAtNDIyNCw3ICs0MjM4LDcgQEAKIAkJCQlidXNpZXN0LT5wdXNoX2NwdSA9IHRoaXNfY3B1OwogCQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CiAJCQlpZiAoYWN0aXZlX2JhbGFuY2UpCiAJCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOwogCkBAIC00Mjk3LDcgKzQzMTEsNyBAQAogCWludCBhbGxfcGlubmVkID0gMDsKIAlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwogCi0JY3B1bWFza19jb3B5KGNwdXMsIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jb3B5KGNwdXMsIGNwdV9hY3RpdmVfbWFzayk7CiAKIAkvKgogCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKQEAgLTQ0MDYsMTAgKzQ0MjAsMTAgQEAKIAkJLyoKIAkJICogU2hvdWxkIG5vdCBjYWxsIHR0d3Ugd2hpbGUgaG9sZGluZyBhIHJxLT5sb2NrCiAJCSAqLwotCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CiAJCWlmIChhY3RpdmVfYmFsYW5jZSkKIAkJCXdha2VfdXBfcHJvY2VzcyhidXNpZXN0LT5taWdyYXRpb25fdGhyZWFkKTsKLQkJc3Bpbl9sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmdGhpc19ycS0+bG9jayk7CiAKIAl9IGVsc2UKIAkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKQEAgLTQ2OTQsNyArNDcwOCw3IEBACiAJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vaHouY3B1X21hc2spOwogCiAJCS8qIHRpbWUgZm9yIGlsYiBvd25lciBhbHNvIHRvIHNsZWVwICovCi0JCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fb25saW5lX2NwdXMoKSkgeworCQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX2FjdGl2ZV9jcHVzKCkpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCiAJCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7CiAJCQlyZXR1cm4gMDsKQEAgLTUyNzgsMTEgKzUyOTIsMTEgQEAKIAogCXNjaGVkX2Nsb2NrX3RpY2soKTsKIAotCXNwaW5fbG9jaygmcnEtPmxvY2spOworCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCXVwZGF0ZV9jcHVfbG9hZChycSk7CiAJY3Vyci0+c2NoZWRfY2xhc3MtPnRhc2tfdGljayhycSwgY3VyciwgMCk7Ci0Jc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAogCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIsIGNwdSk7CiAKQEAgLTUzOTYsMTMgKzU0MTAsMTQgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3N0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogewotCXU2NCBydW50aW1lID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSAtIHAtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZTsKKwlpZiAocHJldi0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKSB7CisJCXU2NCBydW50aW1lID0gcHJldi0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKIAotCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z19ydW5uaW5nLCBydW50aW1lKTsKKwkJcnVudGltZSAtPSBwcmV2LT5zZS5wcmV2X3N1bV9leGVjX3J1bnRpbWU7CisJCXJ1bnRpbWUgPSBtaW5fdCh1NjQsIHJ1bnRpbWUsIDIqc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KTsKIAotCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpIHsKIAkJLyoKIAkJICogSW4gb3JkZXIgdG8gYXZvaWQgYXZnX292ZXJsYXAgZ3Jvd2luZyBzdGFsZSB3aGVuIHdlIGFyZQogCQkgKiBpbmRlZWQgb3ZlcmxhcHBpbmcgYW5kIGhlbmNlIG5vdCBnZXR0aW5nIHB1dCB0byBzbGVlcCwgZ3JvdwpAQCAtNTQxMiwxMiArNTQyNyw5IEBACiAJCSAqIGNvcnJlbGF0ZXMgdG8gdGhlIGFtb3VudCBvZiBjYWNoZSBmb290cHJpbnQgYSB0YXNrIGNhbgogCQkgKiBidWlsZCB1cC4KIAkJICovCi0JCXJ1bnRpbWUgPSBtaW5fdCh1NjQsIHJ1bnRpbWUsIDIqc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KTsKLQkJdXBkYXRlX2F2ZygmcC0+c2UuYXZnX292ZXJsYXAsIHJ1bnRpbWUpOwotCX0gZWxzZSB7Ci0JCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z19ydW5uaW5nLCAwKTsKKwkJdXBkYXRlX2F2ZygmcHJldi0+c2UuYXZnX292ZXJsYXAsIHJ1bnRpbWUpOwogCX0KLQlwLT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgcCk7CisJcHJldi0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHByZXYpOwogfQogCiAvKgpAQCAtNTQ3OCw3ICs1NDkwLDcgQEAKIAlpZiAoc2NoZWRfZmVhdChIUlRJQ0spKQogCQlocnRpY2tfY2xlYXIocnEpOwogCi0Jc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZycS0+bG9jayk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAljbGVhcl90c2tfbmVlZF9yZXNjaGVkKHByZXYpOwogCkBAIC01NTE0LDcgKzU1MjYsNyBAQAogCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJCXJxID0gY3B1X3JxKGNwdSk7CiAJfSBlbHNlCi0JCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiAKIAlwb3N0X3NjaGVkdWxlKHJxKTsKIApAQCAtNTkzMSwxNCArNTk0MywxNSBAQAogICovCiBib29sIHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICp4KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDE7CiAKLQlzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsKIAlpZiAoIXgtPmRvbmUpCiAJCXJldCA9IDA7CiAJZWxzZQogCQl4LT5kb25lLS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKTsKQEAgLTU5NTMsMTIgKzU5NjYsMTMgQEAKICAqLwogYm9vbCBjb21wbGV0aW9uX2RvbmUoc3RydWN0IGNvbXBsZXRpb24gKngpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMTsKIAotCXNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCWlmICgheC0+ZG9uZSkKIAkJcmV0ID0gMDsKLQlzcGluX3VubG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY29tcGxldGlvbl9kb25lKTsKQEAgLTYzNDMsNyArNjM1Nyw3IEBACiAJICogbWFrZSBzdXJlIG5vIFBJLXdhaXRlcnMgYXJyaXZlIChvciBsZWF2ZSkgd2hpbGUgd2UgYXJlCiAJICogY2hhbmdpbmcgdGhlIHByaW9yaXR5IG9mIHRoZSB0YXNrOgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5waV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBUbyBiZSBhYmxlIHRvIGNoYW5nZSBwLT5wb2xpY3kgc2FmZWx5LCB0aGUgYXByb3ByaWF0ZQogCSAqIHJ1bnF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkLgpAQCAtNjM1Myw3ICs2MzY3LDcgQEAKIAlpZiAodW5saWtlbHkob2xkcG9saWN5ICE9IC0xICYmIG9sZHBvbGljeSAhPSBwLT5wb2xpY3kpKSB7CiAJCXBvbGljeSA9IG9sZHBvbGljeSA9IC0xOwogCQlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cGlfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cGlfbG9jaywgZmxhZ3MpOwogCQlnb3RvIHJlY2hlY2s7CiAJfQogCXVwZGF0ZV9ycV9jbG9jayhycSk7CkBAIC02Mzc3LDcgKzYzOTEsNyBAQAogCQljaGVja19jbGFzc19jaGFuZ2VkKHJxLCBwLCBwcmV2X2NsYXNzLCBvbGRwcmlvLCBydW5uaW5nKTsKIAl9CiAJX190YXNrX3JxX3VubG9jayhycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cGlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAKIAlydF9tdXRleF9hZGp1c3RfcGkocCk7CiAKQEAgLTY0NzcsNyArNjQ5MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dmFsID0gLUVTUkNIOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAJaWYgKHApIHsKIAkJcmV0dmFsID0gc2VjdXJpdHlfdGFza19nZXRzY2hlZHVsZXIocCk7CkBAIC02NDg1LDcgKzY0OTksNyBAQAogCQkJcmV0dmFsID0gcC0+cG9saWN5CiAJCQkJfCAocC0+c2NoZWRfcmVzZXRfb25fZm9yayA/IFNDSEVEX1JFU0VUX09OX0ZPUksgOiAwKTsKIAl9Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY1MDMsNyArNjUxNyw3IEBACiAJaWYgKCFwYXJhbSB8fCBwaWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAJcmV0dmFsID0gLUVTUkNIOwogCWlmICghcCkKQEAgLTY1MTQsNyArNjUyOCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWxwLnNjaGVkX3ByaW9yaXR5ID0gcC0+cnRfcHJpb3JpdHk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKIAkgKiBUaGlzIG9uZSBtaWdodCBzbGVlcCwgd2UgY2Fubm90IGRvIGl0IHdpdGggYSBzcGlubG9jayBoZWxkIC4uLgpAQCAtNjUyNCw3ICs2NTM4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogCiBvdXRfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02NTM1LDIyICs2NTQ5LDE4IEBACiAJaW50IHJldHZhbDsKIAogCWdldF9vbmxpbmVfY3B1cygpOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApIHsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcHV0X29ubGluZV9jcHVzKCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCi0JLyoKLQkgKiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIHNldF9jcHVzX2FsbG93ZWQgd2l0aCB0aGUKLQkgKiB0YXNrbGlzdF9sb2NrIGhlbGQuIFdlIHdpbGwgYnVtcCB0aGUgdGFza19zdHJ1Y3QncwotCSAqIHVzYWdlIGNvdW50IGFuZCB0aGVuIGRyb3AgdGFza2xpc3RfbG9jay4KLQkgKi8KKwkvKiBQcmV2ZW50IHAgZ29pbmcgYXdheSAqLwogCWdldF90YXNrX3N0cnVjdChwKTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzX2FsbG93ZWQsIEdGUF9LRVJORUwpKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CkBAIC02NjMxLDEwICs2NjQxLDEyIEBACiBsb25nIHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJxICpycTsKIAlpbnQgcmV0dmFsOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAKIAlyZXR2YWwgPSAtRVNSQ0g7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKQEAgLTY2NDUsMTAgKzY2NTcsMTIgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwogCWNwdW1hc2tfYW5kKG1hc2ssICZwLT5jcHVzX2FsbG93ZWQsIGNwdV9vbmxpbmVfbWFzayk7CisJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXB1dF9vbmxpbmVfY3B1cygpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTY3MDMsNyArNjcxNyw3IEBACiAJICovCiAJX19yZWxlYXNlKHJxLT5sb2NrKTsKIAlzcGluX3JlbGVhc2UoJnJxLT5sb2NrLmRlcF9tYXAsIDEsIF9USElTX0lQXyk7Ci0JX3Jhd19zcGluX3VubG9jaygmcnEtPmxvY2spOworCWRvX3Jhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAogCXNjaGVkdWxlKCk7CkBAIC02ODgzLDYgKzY4OTcsOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAl1bnNpZ25lZCBpbnQgdGltZV9zbGljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBycSAqcnE7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgdGltZXNwZWMgdDsKIApAQCAtNjg5MCw3ICs2OTA2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR2YWwgPSAtRVNSQ0g7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTY4OTksMTUgKzY5MTUsMTcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQl0aW1lX3NsaWNlID0gcC0+c2NoZWRfY2xhc3MtPmdldF9ycl9pbnRlcnZhbChwKTsKKwlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCXRpbWVfc2xpY2UgPSBwLT5zY2hlZF9jbGFzcy0+Z2V0X3JyX2ludGVydmFsKHJxLCBwKTsKKwl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlqaWZmaWVzX3RvX3RpbWVzcGVjKHRpbWVfc2xpY2UsICZ0KTsKIAlyZXR2YWwgPSBjb3B5X3RvX3VzZXIoaW50ZXJ2YWwsICZ0LCBzaXplb2YodCkpID8gLUVGQVVMVCA6IDA7CiAJcmV0dXJuIHJldHZhbDsKIAogb3V0X3VubG9jazoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjk5NSwxMiArNzAxMywxMiBAQAogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwogCiAJX19zY2hlZF9mb3JrKGlkbGUpOworCWlkbGUtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCWlkbGUtPnNlLmV4ZWNfc3RhcnQgPSBzY2hlZF9jbG9jaygpOwogCi0JaWRsZS0+cHJpbyA9IGlkbGUtPm5vcm1hbF9wcmlvID0gTUFYX1BSSU87CiAJY3B1bWFza19jb3B5KCZpZGxlLT5jcHVzX2FsbG93ZWQsIGNwdW1hc2tfb2YoY3B1KSk7CiAJX19zZXRfdGFza19jcHUoaWRsZSwgY3B1KTsKIApAQCAtNzAwOCw3ICs3MDI2LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoX19BUkNIX1dBTlRfVU5MT0NLRURfQ1RYU1cpCiAJaWRsZS0+b25jcHUgPSAxOwogI2VuZGlmCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFNldCB0aGUgcHJlZW1wdCBjb3VudCBfb3V0c2lkZV8gdGhlIHNwaW5sb2NrcyEgKi8KICNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKQpAQCAtNzA0MSwyMiArNzA1OSw0MyBAQAogICoKICAqIFRoaXMgaWRlYSBjb21lcyBmcm9tIHRoZSBTRCBzY2hlZHVsZXIgb2YgQ29uIEtvbGl2YXM6CiAgKi8KK3N0YXRpYyBpbnQgZ2V0X3VwZGF0ZV9zeXNjdGxfZmFjdG9yKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNwdXMgPSBtaW5fdChpbnQsIG51bV9vbmxpbmVfY3B1cygpLCA4KTsKKwl1bnNpZ25lZCBpbnQgZmFjdG9yOworCisJc3dpdGNoIChzeXNjdGxfc2NoZWRfdHVuYWJsZV9zY2FsaW5nKSB7CisJY2FzZSBTQ0hFRF9UVU5BQkxFU0NBTElOR19OT05FOgorCQlmYWN0b3IgPSAxOworCQlicmVhazsKKwljYXNlIFNDSEVEX1RVTkFCTEVTQ0FMSU5HX0xJTkVBUjoKKwkJZmFjdG9yID0gY3B1czsKKwkJYnJlYWs7CisJY2FzZSBTQ0hFRF9UVU5BQkxFU0NBTElOR19MT0c6CisJZGVmYXVsdDoKKwkJZmFjdG9yID0gMSArIGlsb2cyKGNwdXMpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmFjdG9yOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc3lzY3RsKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGZhY3RvciA9IGdldF91cGRhdGVfc3lzY3RsX2ZhY3RvcigpOworCisjZGVmaW5lIFNFVF9TWVNDVEwobmFtZSkgXAorCShzeXNjdGxfIyNuYW1lID0gKGZhY3RvcikgKiBub3JtYWxpemVkX3N5c2N0bF8jI25hbWUpCisJU0VUX1NZU0NUTChzY2hlZF9taW5fZ3JhbnVsYXJpdHkpOworCVNFVF9TWVNDVEwoc2NoZWRfbGF0ZW5jeSk7CisJU0VUX1NZU0NUTChzY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOworCVNFVF9TWVNDVEwoc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCk7CisjdW5kZWYgU0VUX1NZU0NUTAorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfaW5pdF9ncmFudWxhcml0eSh2b2lkKQogewotCXVuc2lnbmVkIGludCBmYWN0b3IgPSAxICsgaWxvZzIobnVtX29ubGluZV9jcHVzKCkpOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbGltaXQgPSAyMDAwMDAwMDA7Ci0KLQlzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5ICo9IGZhY3RvcjsKLQlpZiAoc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSA+IGxpbWl0KQotCQlzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5ID0gbGltaXQ7Ci0KLQlzeXNjdGxfc2NoZWRfbGF0ZW5jeSAqPSBmYWN0b3I7Ci0JaWYgKHN5c2N0bF9zY2hlZF9sYXRlbmN5ID4gbGltaXQpCi0JCXN5c2N0bF9zY2hlZF9sYXRlbmN5ID0gbGltaXQ7Ci0KLQlzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5ICo9IGZhY3RvcjsKLQotCXN5c2N0bF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0ICo9IGZhY3RvcjsKKwl1cGRhdGVfc3lzY3RsKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC03MDkyLDggKzcxMzEsMjQgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCByZXQgPSAwOwogCisJLyoKKwkgKiBTaW5jZSB3ZSByZWx5IG9uIHdha2UtdXBzIHRvIG1pZ3JhdGUgc2xlZXBpbmcgdGFza3MsIGRvbid0IGNoYW5nZQorCSAqIHRoZSAtPmNwdXNfYWxsb3dlZCBtYXNrIGZyb20gdW5kZXIgd2FraW5nIHRhc2tzLCB3aGljaCB3b3VsZCBiZQorCSAqIHBvc3NpYmxlIHdoZW4gd2UgY2hhbmdlIHJxLT5sb2NrIGluIHR0d3UoKSwgc28gc3luY2hyb25pemUgYWdhaW5zdAorCSAqIFRBU0tfV0FLSU5HIHRvIGF2b2lkIHRoYXQuCisJICovCithZ2FpbjoKKwl3aGlsZSAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpCisJCWNwdV9yZWxheCgpOworCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhuZXdfbWFzaywgY3B1X29ubGluZV9tYXNrKSkgeworCisJaWYgKHAtPnN0YXRlID09IFRBU0tfV0FLSU5HKSB7CisJCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCQlnb3RvIGFnYWluOworCX0KKworCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG5ld19tYXNrLCBjcHVfYWN0aXZlX21hc2spKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTcxMTUsNyArNzE3MCw3IEBACiAJaWYgKGNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIG5ld19tYXNrKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAobWlncmF0ZV90YXNrKHAsIGNwdW1hc2tfYW55X2FuZChjcHVfb25saW5lX21hc2ssIG5ld19tYXNrKSwgJnJlcSkpIHsKKwlpZiAobWlncmF0ZV90YXNrKHAsIGNwdW1hc2tfYW55X2FuZChjcHVfYWN0aXZlX21hc2ssIG5ld19tYXNrKSwgJnJlcSkpIHsKIAkJLyogTmVlZCBoZWxwIGZyb20gbWlncmF0aW9uIHRocmVhZDogZHJvcCBsb2NrIGFuZCB3YWl0LiAqLwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm10ID0gcnEtPm1pZ3JhdGlvbl90aHJlYWQ7CiAKQEAgLTcxNDgsNyArNzIwMyw3IEBACiBzdGF0aWMgaW50IF9fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNyY19jcHUsIGludCBkZXN0X2NwdSkKIHsKIAlzdHJ1Y3QgcnEgKnJxX2Rlc3QsICpycV9zcmM7Ci0JaW50IHJldCA9IDAsIG9uX3JxOworCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KCFjcHVfYWN0aXZlKGRlc3RfY3B1KSkpCiAJCXJldHVybiByZXQ7CkBAIC03MTY0LDEyICs3MjE5LDEzIEBACiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkKIAkJZ290byBmYWlsOwogCi0Jb25fcnEgPSBwLT5zZS5vbl9ycTsKLQlpZiAob25fcnEpCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qgb24gYSBycSwgdGhlIG5leHQgd2FrZS11cCB3aWxsIGVuc3VyZSB3ZSdyZQorCSAqIHBsYWNlZCBwcm9wZXJseS4KKwkgKi8KKwlpZiAocC0+c2Uub25fcnEpIHsKIAkJZGVhY3RpdmF0ZV90YXNrKHJxX3NyYywgcCwgMCk7Ci0KLQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwotCWlmIChvbl9ycSkgeworCQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwogCQlhY3RpdmF0ZV90YXNrKHJxX2Rlc3QsIHAsIDApOwogCQljaGVja19wcmVlbXB0X2N1cnIocnFfZGVzdCwgcCwgMCk7CiAJfQpAQCAtNzIwNCwxMCArNzI2MCwxMCBAQAogCQlzdHJ1Y3QgbWlncmF0aW9uX3JlcSAqcmVxOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCi0JCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAogCQlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkgewotCQkJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiAJCQlicmVhazsKIAkJfQogCkBAIC03MjE5LDcgKzcyNzUsNyBAQAogCQloZWFkID0gJnJxLT5taWdyYXRpb25fcXVldWU7CiAKIAkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogCQkJc2NoZWR1bGUoKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQljb250aW51ZTsKQEAgLTcyMjgsMTQgKzcyODQsMTQgQEAKIAkJbGlzdF9kZWxfaW5pdChoZWFkLT5uZXh0KTsKIAogCQlpZiAocmVxLT50YXNrICE9IE5VTEwpIHsKLQkJCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAkJCV9fbWlncmF0ZV90YXNrKHJlcS0+dGFzaywgY3B1LCByZXEtPmRlc3RfY3B1KTsKIAkJfSBlbHNlIGlmIChsaWtlbHkoY3B1ID09IChiYWRjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewogCQkJcmVxLT5kZXN0X2NwdSA9IFJDVV9NSUdSQVRJT05fR09UX1FTOwotCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCQl9IGVsc2UgewogCQkJcmVxLT5kZXN0X2NwdSA9IFJDVV9NSUdSQVRJT05fTVVTVF9TWU5DOwotCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCQkJV0FSTl9PTkNFKDEsICJtaWdyYXRpb25fdGhyZWFkKCkgb24gQ1BVICVkLCBleHBlY3RlZCAlZFxuIiwgYmFkY3B1LCBjcHUpOwogCQl9CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTcyNjUsMzcgKzczMjEsMTAgQEAKIHN0YXRpYyB2b2lkIG1vdmVfdGFza19vZmZfZGVhZF9jcHUoaW50IGRlYWRfY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGRlc3RfY3B1OwotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpub2RlbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShjcHVfdG9fbm9kZShkZWFkX2NwdSkpOwogCiBhZ2FpbjoKLQkvKiBMb29rIGZvciBhbGxvd2VkLCBvbmxpbmUgQ1BVIGluIHNhbWUgbm9kZS4gKi8KLQlmb3JfZWFjaF9jcHVfYW5kKGRlc3RfY3B1LCBub2RlbWFzaywgY3B1X29ubGluZV9tYXNrKQotCQlpZiAoY3B1bWFza190ZXN0X2NwdShkZXN0X2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkpCi0JCQlnb3RvIG1vdmU7CisJZGVzdF9jcHUgPSBzZWxlY3RfZmFsbGJhY2tfcnEoZGVhZF9jcHUsIHApOwogCi0JLyogQW55IGFsbG93ZWQsIG9ubGluZSBDUFU/ICovCi0JZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoJnAtPmNwdXNfYWxsb3dlZCwgY3B1X29ubGluZV9tYXNrKTsKLQlpZiAoZGVzdF9jcHUgPCBucl9jcHVfaWRzKQotCQlnb3RvIG1vdmU7Ci0KLQkvKiBObyBtb3JlIE1yLiBOaWNlIEd1eS4gKi8KLQlpZiAoZGVzdF9jcHUgPj0gbnJfY3B1X2lkcykgewotCQljcHVzZXRfY3B1c19hbGxvd2VkX2xvY2tlZChwLCAmcC0+Y3B1c19hbGxvd2VkKTsKLQkJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoY3B1X29ubGluZV9tYXNrLCAmcC0+Y3B1c19hbGxvd2VkKTsKLQotCQkvKgotCQkgKiBEb24ndCB0ZWxsIHRoZW0gYWJvdXQgbW92aW5nIGV4aXRpbmcgdGFza3Mgb3IKLQkJICoga2VybmVsIHRocmVhZHMgKGJvdGggbW0gTlVMTCksIHNpbmNlIHRoZXkgbmV2ZXIKLQkJICogbGVhdmUga2VybmVsLgotCQkgKi8KLQkJaWYgKHAtPm1tICYmIHByaW50a19yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAicHJvY2VzcyAlZCAoJXMpIG5vICIKLQkJCSAgICAgICAibG9uZ2VyIGFmZmluZSB0byBjcHUlZFxuIiwKLQkJCSAgICAgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgZGVhZF9jcHUpOwotCQl9Ci0JfQotCi1tb3ZlOgogCS8qIEl0IGNhbiBoYXZlIGFmZmluaXR5IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBjaG9vc2luZy4gKi8KIAlpZiAodW5saWtlbHkoIV9fbWlncmF0ZV90YXNrX2lycShwLCBkZWFkX2NwdSwgZGVzdF9jcHUpKSkKIAkJZ290byBhZ2FpbjsKQEAgLTczMTAsNyArNzMzOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1pZ3JhdGVfbnJfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBycSAqcnFfc3JjKQogewotCXN0cnVjdCBycSAqcnFfZGVzdCA9IGNwdV9ycShjcHVtYXNrX2FueShjcHVfb25saW5lX21hc2spKTsKKwlzdHJ1Y3QgcnEgKnJxX2Rlc3QgPSBjcHVfcnEoY3B1bWFza19hbnkoY3B1X2FjdGl2ZV9tYXNrKSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTczNTgsMTQgKzczODcsMTQgQEAKIAkgKiBTdHJpY3RseSBub3QgbmVjZXNzYXJ5IHNpbmNlIHJlc3Qgb2YgdGhlIENQVXMgYXJlIHN0b3BwZWQgYnkgbm93CiAJICogYW5kIGludGVycnVwdHMgZGlzYWJsZWQgb24gdGhlIGN1cnJlbnQgY3B1LgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCV9fc2V0c2NoZWR1bGVyKHJxLCBwLCBTQ0hFRF9GSUZPLCBNQVhfUlRfUFJJTy0xKTsKIAogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNzQwMSw5ICs3NDMwLDkgQEAKIAkgKiB0aGF0J3MgT0suIE5vIHRhc2sgY2FuIGJlIGFkZGVkIHRvIHRoaXMgQ1BVLCBzbyBpdGVyYXRpb24gaXMKIAkgKiBmaW5lLgogCSAqLwotCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOworCXJhd19zcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIAltb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGRlYWRfY3B1LCBwKTsKLQlzcGluX2xvY2tfaXJxKCZycS0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAogCXB1dF90YXNrX3N0cnVjdChwKTsKIH0KQEAgLTc1NjMsNyArNzU5Miw3IEBACiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnNkX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgdm9pZCByZWdpc3Rlcl9zY2hlZF9kb21haW5fc3lzY3RsKHZvaWQpCiB7Ci0JaW50IGksIGNwdV9udW0gPSBudW1fb25saW5lX2NwdXMoKTsKKwlpbnQgaSwgY3B1X251bSA9IG51bV9wb3NzaWJsZV9jcHVzKCk7CiAJc3RydWN0IGN0bF90YWJsZSAqZW50cnkgPSBzZF9hbGxvY19jdGxfZW50cnkoY3B1X251bSArIDEpOwogCWNoYXIgYnVmWzMyXTsKIApAQCAtNzU3Myw3ICs3NjAyLDcgQEAKIAlpZiAoZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc25wcmludGYoYnVmLCAzMiwgImNwdSVkIiwgaSk7CiAJCWVudHJ5LT5wcm9jbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIAkJZW50cnktPm1vZGUgPSAwNTU1OwpAQCAtNzY2OSwxMyArNzY5OCwxMyBAQAogCiAJCS8qIFVwZGF0ZSBvdXIgcm9vdC1kb21haW4gKi8KIAkJcnEgPSBjcHVfcnEoY3B1KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJxLT5yZCkgewogCQkJQlVHX09OKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcnEtPnJkLT5zcGFuKSk7CiAKIAkJCXNldF9ycV9vbmxpbmUocnEpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtNzcwMCwxNCArNzcyOSwxMyBAQAogCQlwdXRfdGFza19zdHJ1Y3QocnEtPm1pZ3JhdGlvbl90aHJlYWQpOwogCQlycS0+bWlncmF0aW9uX3RocmVhZCA9IE5VTEw7CiAJCS8qIElkbGUgdGFzayBiYWNrIHRvIG5vcm1hbCAob2ZmIHJ1bnF1ZXVlLCBsb3cgcHJpbykgKi8KLQkJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwogCQl1cGRhdGVfcnFfY2xvY2socnEpOwogCQlkZWFjdGl2YXRlX3Rhc2socnEsIHJxLT5pZGxlLCAwKTsKLQkJcnEtPmlkbGUtPnN0YXRpY19wcmlvID0gTUFYX1BSSU87CiAJCV9fc2V0c2NoZWR1bGVyKHJxLCBycS0+aWRsZSwgU0NIRURfTk9STUFMLCAwKTsKIAkJcnEtPmlkbGUtPnNjaGVkX2NsYXNzID0gJmlkbGVfc2NoZWRfY2xhc3M7CiAJCW1pZ3JhdGVfZGVhZF90YXNrcyhjcHUpOwotCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogCQljcHVzZXRfdW5sb2NrKCk7CiAJCW1pZ3JhdGVfbnJfdW5pbnRlcnJ1cHRpYmxlKHJxKTsKIAkJQlVHX09OKHJxLT5ucl9ydW5uaW5nICE9IDApOwpAQCAtNzcxNywzMCArNzc0NSwzMCBAQAogCQkgKiB0aGV5IGRpZG4ndCB0YWtlIHNjaGVkX2hvdGNwdV9tdXRleC4gSnVzdCB3YWtlIHVwCiAJCSAqIHRoZSByZXF1ZXN0b3JzLgogCQkgKi8KLQkJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnJxLT5taWdyYXRpb25fcXVldWUpKSB7CiAJCQlzdHJ1Y3QgbWlncmF0aW9uX3JlcSAqcmVxOwogCiAJCQlyZXEgPSBsaXN0X2VudHJ5KHJxLT5taWdyYXRpb25fcXVldWUubmV4dCwKIAkJCQkJIHN0cnVjdCBtaWdyYXRpb25fcmVxLCBsaXN0KTsKIAkJCWxpc3RfZGVsX2luaXQoJnJlcS0+bGlzdCk7Ci0JCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIAkJCWNvbXBsZXRlKCZyZXEtPmRvbmUpOwotCQkJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX0RZSU5HOgogCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKIAkJLyogVXBkYXRlIG91ciByb290LWRvbWFpbiAqLwogCQlycSA9IGNwdV9ycShjcHUpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwogCQlpZiAocnEtPnJkKSB7CiAJCQlCVUdfT04oIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBycS0+cmQtPnNwYW4pKTsKIAkJCXNldF9ycV9vZmZsaW5lKHJxKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAjZW5kaWYKIAl9CkBAIC03OTcwLDcgKzc5OTgsNyBAQAogCXN0cnVjdCByb290X2RvbWFpbiAqb2xkX3JkID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHJxLT5yZCkgewogCQlvbGRfcmQgPSBycS0+cmQ7CkBAIC03OTk2LDcgKzgwMjQsNyBAQAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHJxLT5jcHUsIGNwdV9hY3RpdmVfbWFzaykpCiAJCXNldF9ycV9vbmxpbmUocnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChvbGRfcmQpCiAJCWZyZWVfcm9vdGRvbWFpbihvbGRfcmQpOwpAQCAtODI4MiwxNCArODMxMCwxNCBAQAogICovCiAjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluLCBjcHVfZG9tYWlucyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfY3B1cyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBzKTsKIAogc3RhdGljIGludAogY3B1X3RvX2NwdV9ncm91cChpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKIAkJIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnLCBzdHJ1Y3QgY3B1bWFzayAqdW51c2VkKQogewogCWlmIChzZykKLQkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfY3B1cywgY3B1KS5zZzsKKwkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBzLCBjcHUpLnNnOwogCXJldHVybiBjcHU7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NDSEVEX1NNVCAqLwpAQCAtOTA5OSw3ICs5MTI3LDcgQEAKIAlpZiAoZG9tc19uZXcgPT0gTlVMTCkgewogCQluZG9tc19jdXIgPSAwOwogCQlkb21zX25ldyA9ICZmYWxsYmFja19kb21zOwotCQljcHVtYXNrX2FuZG5vdChkb21zX25ld1swXSwgY3B1X29ubGluZV9tYXNrLCBjcHVfaXNvbGF0ZWRfbWFwKTsKKwkJY3B1bWFza19hbmRub3QoZG9tc19uZXdbMF0sIGNwdV9hY3RpdmVfbWFzaywgY3B1X2lzb2xhdGVkX21hcCk7CiAJCVdBUk5fT05fT05DRShkYXR0cl9uZXcpOwogCX0KIApAQCAtOTIzMCw4ICs5MjU4LDEwIEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9PTkxJTkU6CiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQljYXNlIENQVV9ERUFEOgotCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKIAkJcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoMSwgTlVMTCwgTlVMTCk7CiAJCXJldHVybiBOT1RJRllfT0s7CiAKQEAgLTkyNzgsNyArOTMwOCw3IEBACiAjZW5kaWYKIAlnZXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9sb2NrKCZzY2hlZF9kb21haW5zX211dGV4KTsKLQlhcmNoX2luaXRfc2NoZWRfZG9tYWlucyhjcHVfb25saW5lX21hc2spOworCWFyY2hfaW5pdF9zY2hlZF9kb21haW5zKGNwdV9hY3RpdmVfbWFzayk7CiAJY3B1bWFza19hbmRub3Qobm9uX2lzb2xhdGVkX2NwdXMsIGNwdV9wb3NzaWJsZV9tYXNrLCBjcHVfaXNvbGF0ZWRfbWFwKTsKIAlpZiAoY3B1bWFza19lbXB0eShub25faXNvbGF0ZWRfY3B1cykpCiAJCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG5vbl9pc29sYXRlZF9jcHVzKTsKQEAgLTkzNTEsMTMgKzkzODEsMTMgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSA9IDA7CiAJcnRfcnEtPm92ZXJsb2FkZWQgPSAwOwotCXBsaXN0X2hlYWRfaW5pdCgmcnRfcnEtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPmxvY2spOworCXBsaXN0X2hlYWRfaW5pdF9yYXcoJnJ0X3JxLT5wdXNoYWJsZV90YXNrcywgJnJxLT5sb2NrKTsKICNlbmRpZgogCiAJcnRfcnEtPnJ0X3RpbWUgPSAwOwogCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAwOwogCXJ0X3JxLT5ydF9ydW50aW1lID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pbml0KCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCXJ0X3JxLT5ydF9ucl9ib29zdGVkID0gMDsKQEAgLTk1MTcsNyArOTU0Nyw3IEBACiAJCXN0cnVjdCBycSAqcnE7CiAKIAkJcnEgPSBjcHVfcnEoaSk7Ci0JCXNwaW5fbG9ja19pbml0KCZycS0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmcnEtPmxvY2spOwogCQlycS0+bnJfcnVubmluZyA9IDA7CiAJCXJxLT5jYWxjX2xvYWRfYWN0aXZlID0gMDsKIAkJcnEtPmNhbGNfbG9hZF91cGRhdGUgPSBqaWZmaWVzICsgTE9BRF9GUkVROwpAQCAtOTU3Nyw3ICs5NjA3LDcgQEAKICNlbGlmIGRlZmluZWQgQ09ORklHX1VTRVJfU0NIRUQKIAkJaW5pdF90Z19ydF9lbnRyeSgmcm9vdF90YXNrX2dyb3VwLCAmcnEtPnJ0LCBOVUxMLCBpLCAwLCBOVUxMKTsKIAkJaW5pdF90Z19ydF9lbnRyeSgmaW5pdF90YXNrX2dyb3VwLAotCQkJCSZwZXJfY3B1KGluaXRfcnRfcnEsIGkpLAorCQkJCSZwZXJfY3B1KGluaXRfcnRfcnFfdmFyLCBpKSwKIAkJCQkmcGVyX2NwdShpbml0X3NjaGVkX3J0X2VudGl0eSwgaSksIGksIDEsCiAJCQkJcm9vdF90YXNrX2dyb3VwLnJ0X3NlW2ldKTsKICNlbmRpZgpAQCAtOTYxNSw3ICs5NjQ1LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1JUX01VVEVYRVMKLQlwbGlzdF9oZWFkX2luaXQoJmluaXRfdGFzay5waV93YWl0ZXJzLCAmaW5pdF90YXNrLnBpX2xvY2spOworCXBsaXN0X2hlYWRfaW5pdF9yYXcoJmluaXRfdGFzay5waV93YWl0ZXJzLCAmaW5pdF90YXNrLnBpX2xvY2spOwogI2VuZGlmCiAKIAkvKgpAQCAtOTY1OSw3ICs5Njg5LDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKIHN0YXRpYyBpbmxpbmUgaW50IHByZWVtcHRfY291bnRfZXF1YWxzKGludCBwcmVlbXB0X29mZnNldCkKIHsKLQlpbnQgbmVzdGVkID0gcHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFOworCWludCBuZXN0ZWQgPSAocHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFKSArIHJjdV9wcmVlbXB0X2RlcHRoKCk7CiAKIAlyZXR1cm4gKG5lc3RlZCA9PSBQUkVFTVBUX0lOQVRPTUlDX0JBU0UgKyBwcmVlbXB0X29mZnNldCk7CiB9CkBAIC05NzQwLDEzICs5NzcwLDEzIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNwaW5fbG9jaygmcC0+cGlfbG9jayk7CisJCXJhd19zcGluX2xvY2soJnAtPnBpX2xvY2spOwogCQlycSA9IF9fdGFza19ycV9sb2NrKHApOwogCiAJCW5vcm1hbGl6ZV90YXNrKHJxLCBwKTsKIAogCQlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKLQkJc3Bpbl91bmxvY2soJnAtPnBpX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnAtPnBpX2xvY2spOwogCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05ODQyLDEzICs5ODcyLDE1IEBACiAJCXNlID0ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZW50aXR5KSwKIAkJCQkgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGkpKTsKIAkJaWYgKCFzZSkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZnJlZV9ycTsKIAogCQlpbml0X3RnX2Nmc19lbnRyeSh0ZywgY2ZzX3JxLCBzZSwgaSwgMCwgcGFyZW50LT5zZVtpXSk7CiAJfQogCiAJcmV0dXJuIDE7CiAKKyBlcnJfZnJlZV9ycToKKwlrZnJlZShjZnNfcnEpOwogIGVycjoKIAlyZXR1cm4gMDsKIH0KQEAgLTk5MzAsMTMgKzk5NjIsMTUgQEAKIAkJcnRfc2UgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkpLAogCQkJCSAgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoaSkpOwogCQlpZiAoIXJ0X3NlKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9mcmVlX3JxOwogCiAJCWluaXRfdGdfcnRfZW50cnkodGcsIHJ0X3JxLCBydF9zZSwgaSwgMCwgcGFyZW50LT5ydF9zZVtpXSk7CiAJfQogCiAJcmV0dXJuIDE7CiAKKyBlcnJfZnJlZV9ycToKKwlrZnJlZShydF9ycSk7CiAgZXJyOgogCXJldHVybiAwOwogfQpAQCAtMTAwNzAsNyArMTAxMDQsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAlpZiAodHNrLT5zY2hlZF9jbGFzcy0+bW92ZWRfZ3JvdXApCi0JCXRzay0+c2NoZWRfY2xhc3MtPm1vdmVkX2dyb3VwKHRzayk7CisJCXRzay0+c2NoZWRfY2xhc3MtPm1vdmVkX2dyb3VwKHRzaywgb25fcnEpOwogI2VuZGlmCiAKIAlpZiAodW5saWtlbHkocnVubmluZykpCkBAIC0xMDEwNSw5ICsxMDEzOSw5IEBACiAJc3RydWN0IHJxICpycSA9IGNmc19ycS0+cnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAlfX3NldF9zZV9zaGFyZXMoc2UsIHNoYXJlcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIERFRklORV9NVVRFWChzaGFyZXNfbXV0ZXgpOwpAQCAtMTAyOTIsMTggKzEwMzI2LDE4IEBACiAJaWYgKGVycikKIAkJZ290byB1bmxvY2s7CiAKLQlzcGluX2xvY2tfaXJxKCZ0Zy0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWVfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pcnEoJnRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZV9sb2NrKTsKIAl0Zy0+cnRfYmFuZHdpZHRoLnJ0X3BlcmlvZCA9IG5zX3RvX2t0aW1lKHJ0X3BlcmlvZCk7CiAJdGctPnJ0X2JhbmR3aWR0aC5ydF9ydW50aW1lID0gcnRfcnVudGltZTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBydF9ycSAqcnRfcnEgPSB0Zy0+cnRfcnFbaV07CiAKLQkJc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAJCXJ0X3JxLT5ydF9ydW50aW1lID0gcnRfcnVudGltZTsKLQkJc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJnRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZ0Zy0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWVfbG9jayk7CiAgdW5sb2NrOgogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAltdXRleF91bmxvY2soJnJ0X2NvbnN0cmFpbnRzX211dGV4KTsKQEAgLTEwNDA4LDE1ICsxMDQ0MiwxNSBAQAogCWlmIChzeXNjdGxfc2NoZWRfcnRfcnVudGltZSA9PSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlZl9ydF9iYW5kd2lkdGgucnRfcnVudGltZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZWZfcnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWVfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBydF9ycSAqcnRfcnEgPSAmY3B1X3JxKGkpLT5ydDsKIAotCQlzcGluX2xvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAkJcnRfcnEtPnJ0X3J1bnRpbWUgPSBnbG9iYWxfcnRfcnVudGltZSgpOwotCQlzcGluX3VubG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlZl9ydF9iYW5kd2lkdGgucnRfcnVudGltZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlZl9ydF9iYW5kd2lkdGgucnRfcnVudGltZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNzA3LDkgKzEwNzQxLDkgQEAKIAkvKgogCSAqIFRha2UgcnEtPmxvY2sgdG8gbWFrZSA2NC1iaXQgcmVhZCBzYWZlIG9uIDMyLWJpdCBwbGF0Zm9ybXMuCiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmY3B1X3JxKGNwdSktPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZjcHVfcnEoY3B1KS0+bG9jayk7CiAJZGF0YSA9ICpjcHV1c2FnZTsKLQlzcGluX3VubG9ja19pcnEoJmNwdV9ycShjcHUpLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjcHVfcnEoY3B1KS0+bG9jayk7CiAjZWxzZQogCWRhdGEgPSAqY3B1dXNhZ2U7CiAjZW5kaWYKQEAgLTEwNzI1LDkgKzEwNzU5LDkgQEAKIAkvKgogCSAqIFRha2UgcnEtPmxvY2sgdG8gbWFrZSA2NC1iaXQgd3JpdGUgc2FmZSBvbiAzMi1iaXQgcGxhdGZvcm1zLgogCSAqLwotCXNwaW5fbG9ja19pcnEoJmNwdV9ycShjcHUpLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2lycSgmY3B1X3JxKGNwdSktPmxvY2spOwogCSpjcHV1c2FnZSA9IHZhbDsKLQlzcGluX3VubG9ja19pcnEoJmNwdV9ycShjcHUpLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjcHVfcnEoY3B1KS0+bG9jayk7CiAjZWxzZQogCSpjcHV1c2FnZSA9IHZhbDsKICNlbmRpZgpAQCAtMTA5NjEsOSArMTA5OTUsOSBAQAogCQlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CiAJCXJlcS0+dGFzayA9IE5VTEw7CiAJCXJlcS0+ZGVzdF9jcHUgPSBSQ1VfTUlHUkFUSU9OX05FRURfUVM7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZycS0+bWlncmF0aW9uX3F1ZXVlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJCXdha2VfdXBfcHJvY2VzcyhycS0+bWlncmF0aW9uX3RocmVhZCk7CiAJfQogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CkBAIC0xMDk3MSwxMSArMTEwMDUsMTEgQEAKIAkJcmVxID0gJnBlcl9jcHUocmN1X21pZ3JhdGlvbl9yZXEsIGNwdSk7CiAJCXJxID0gY3B1X3JxKGNwdSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJCWlmICh1bmxpa2VseShyZXEtPmRlc3RfY3B1ID09IFJDVV9NSUdSQVRJT05fTVVTVF9TWU5DKSkKIAkJCW5lZWRfZnVsbF9zeW5jID0gMTsKIAkJcmVxLT5kZXN0X2NwdSA9IFJDVV9NSUdSQVRJT05fSURMRTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJfQogCXJjdV9leHBlZGl0ZWRfc3RhdGUgPSBSQ1VfRVhQRURJVEVEX1NUQVRFX0lETEU7CiAJc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkX2NvdW50Kys7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IDQ3OWNlNTYuLjViNDk2MTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0yMzYsNiArMjM2LDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzY2hlZF9jbG9ja19pZGxlX3dha2V1cF9ldmVudCk7CiAKK3Vuc2lnbmVkIGxvbmcgbG9uZyBjcHVfY2xvY2soaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljbG9jayA9IHNjaGVkX2Nsb2NrX2NwdShjcHUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiBjbG9jazsKK30KKwogI2Vsc2UgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KIAogdm9pZCBzY2hlZF9jbG9ja19pbml0KHZvaWQpCkBAIC0yNTEsMTcgKzI2MywxMiBAQAogCXJldHVybiBzY2hlZF9jbG9jaygpOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KIAogdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBjbG9jazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNsb2NrID0gc2NoZWRfY2xvY2tfY3B1KGNwdSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIGNsb2NrOworCXJldHVybiBzY2hlZF9jbG9ja19jcHUoY3B1KTsKIH0KKworI2VuZGlmIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCisKIEVYUE9SVF9TWU1CT0xfR1BMKGNwdV9jbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKaW5kZXggMGYwNTJmYy4uNTk3YjMzMCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2NwdXByaS5jCisrKyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwpAQCAtMTM1LDI2ICsxMzUsMjYgQEAKIAlpZiAobGlrZWx5KG5ld3ByaSAhPSBDUFVQUklfSU5WQUxJRCkpIHsKIAkJc3RydWN0IGNwdXByaV92ZWMgKnZlYyA9ICZjcC0+cHJpX3RvX2NwdVtuZXdwcmldOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWMtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2ZWMtPmxvY2ssIGZsYWdzKTsKIAogCQljcHVtYXNrX3NldF9jcHUoY3B1LCB2ZWMtPm1hc2spOwogCQl2ZWMtPmNvdW50Kys7CiAJCWlmICh2ZWMtPmNvdW50ID09IDEpCiAJCQlzZXRfYml0KG5ld3ByaSwgY3AtPnByaV9hY3RpdmUpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjLT5sb2NrLCBmbGFncyk7CiAJfQogCWlmIChsaWtlbHkob2xkcHJpICE9IENQVVBSSV9JTlZBTElEKSkgewogCQlzdHJ1Y3QgY3B1cHJpX3ZlYyAqdmVjICA9ICZjcC0+cHJpX3RvX2NwdVtvbGRwcmldOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWMtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2ZWMtPmxvY2ssIGZsYWdzKTsKIAogCQl2ZWMtPmNvdW50LS07CiAJCWlmICghdmVjLT5jb3VudCkKIAkJCWNsZWFyX2JpdChvbGRwcmksIGNwLT5wcmlfYWN0aXZlKTsKIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB2ZWMtPm1hc2spOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlYy0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJKmN1cnJwcmkgPSBuZXdwcmk7CkBAIC0xODAsNyArMTgwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQ1BVUFJJX05SX1BSSU9SSVRJRVM7IGkrKykgewogCQlzdHJ1Y3QgY3B1cHJpX3ZlYyAqdmVjID0gJmNwLT5wcmlfdG9fY3B1W2ldOwogCi0JCXNwaW5fbG9ja19pbml0KCZ2ZWMtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrX2luaXQoJnZlYy0+bG9jayk7CiAJCXZlYy0+Y291bnQgPSAwOwogCQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmdmVjLT5tYXNrLCBnZnApKQogCQkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2NwdXByaS5oIGIva2VybmVsL3NjaGVkX2NwdXByaS5oCmluZGV4IDlhN2U4NTkuLjdjYjViYjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuaAorKysgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmgKQEAgLTEyLDcgKzEyLDcgQEAKIC8qIHZhbHVlcyAyLTEwMSBhcmUgUlQgcHJpb3JpdGllcyAwLTk5ICovCiAKIHN0cnVjdCBjcHVwcmlfdmVjIHsKLQlzcGlubG9ja190IGxvY2s7CisJcmF3X3NwaW5sb2NrX3QgbG9jazsKIAlpbnQgICAgICAgIGNvdW50OwogCWNwdW1hc2tfdmFyX3QgbWFzazsKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IDY5ODhjZjAuLjY3Zjk1YWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJUxkLiUwNmxkXG4iLCAiZXhlY19jbG9jayIsCiAJCQlTUExJVF9OUyhjZnNfcnEtPmV4ZWNfY2xvY2spKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAoY2ZzX3JxLT5yYl9sZWZ0bW9zdCkKIAkJTUlOX3ZydW50aW1lID0gKF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpKS0+dnJ1bnRpbWU7CiAJbGFzdCA9IF9fcGlja19sYXN0X2VudGl0eShjZnNfcnEpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCW1heF92cnVudGltZSA9IGxhc3QtPnZydW50aW1lOwogCW1pbl92cnVudGltZSA9IGNmc19ycS0+bWluX3ZydW50aW1lOwogCXJxMF9taW5fdnJ1bnRpbWUgPSBjcHVfcnEoMCktPmNmcy5taW5fdnJ1bnRpbWU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJUxkLiUwNmxkXG4iLCAiTUlOX3ZydW50aW1lIiwKIAkJCVNQTElUX05TKE1JTl92cnVudGltZSkpOwogCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlTGQuJTA2bGRcbiIsICJtaW5fdnJ1bnRpbWUiLApAQCAtMzA5LDYgKzMwOSwxMiBAQAogCXByaW50X3JxKG0sIHJxLCBjcHUpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqc2NoZWRfdHVuYWJsZV9zY2FsaW5nX25hbWVzW10gPSB7CisJIm5vbmUiLAorCSJsb2dhcml0bWljIiwKKwkibGluZWFyIgorfTsKKwogc3RhdGljIGludCBzY2hlZF9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwpAQCAtMzM0LDYgKzM0MCwxMCBAQAogI3VuZGVmIFBOCiAjdW5kZWYgUAogCisJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVkICglcylcbiIsICJzeXNjdGxfc2NoZWRfdHVuYWJsZV9zY2FsaW5nIiwKKwkJc3lzY3RsX3NjaGVkX3R1bmFibGVfc2NhbGluZywKKwkJc2NoZWRfdHVuYWJsZV9zY2FsaW5nX25hbWVzW3N5c2N0bF9zY2hlZF90dW5hYmxlX3NjYWxpbmddKTsKKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlwcmludF9jcHUobSwgY3B1KTsKIApAQCAtMzk5LDcgKzQwOSw2IEBACiAJUE4oc2Uuc3VtX2V4ZWNfcnVudGltZSk7CiAJUE4oc2UuYXZnX292ZXJsYXApOwogCVBOKHNlLmF2Z193YWtldXApOwotCVBOKHNlLmF2Z19ydW5uaW5nKTsKIAogCW5yX3N3aXRjaGVzID0gcC0+bnZjc3cgKyBwLT5uaXZjc3c7CiAKQEAgLTQyMyw3ICs0MzIsNiBAQAogCVAoc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZyk7CiAJUChzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QpOwogCVAoc2UubnJfZm9yY2VkX21pZ3JhdGlvbnMpOwotCVAoc2UubnJfZm9yY2VkMl9taWdyYXRpb25zKTsKIAlQKHNlLm5yX3dha2V1cHMpOwogCVAoc2UubnJfd2FrZXVwc19zeW5jKTsKIAlQKHNlLm5yX3dha2V1cHNfbWlncmF0ZSk7CkBAIC00OTksNyArNTA3LDYgQEAKIAlwLT5zZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ydW5uaW5nCT0gMDsKIAlwLT5zZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QJCT0gMDsKIAlwLT5zZS5ucl9mb3JjZWRfbWlncmF0aW9ucwkJPSAwOwotCXAtPnNlLm5yX2ZvcmNlZDJfbWlncmF0aW9ucwkJPSAwOwogCXAtPnNlLm5yX3dha2V1cHMJCQk9IDA7CiAJcC0+c2UubnJfd2FrZXVwc19zeW5jCQkJPSAwOwogCXAtPnNlLm5yX3dha2V1cHNfbWlncmF0ZQkJPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggZjYxODM3YS4uNDJhYzNjOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3l0b3AuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogVGFyZ2V0ZWQgcHJlZW1wdGlvbiBsYXRlbmN5IGZvciBDUFUtYm91bmQgdGFza3M6CkBAIC0zNSwxMiArMzYsMjYgQEAKICAqICBydW4gdm1zdGF0IGFuZCBtb25pdG9yIHRoZSBjb250ZXh0LXN3aXRjaGVzIChjcykgZmllbGQpCiAgKi8KIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbGF0ZW5jeSA9IDUwMDAwMDBVTEw7Cit1bnNpZ25lZCBpbnQgbm9ybWFsaXplZF9zeXNjdGxfc2NoZWRfbGF0ZW5jeSA9IDUwMDAwMDBVTEw7CisKKy8qCisgKiBUaGUgaW5pdGlhbC0gYW5kIHJlLXNjYWxpbmcgb2YgdHVuYWJsZXMgaXMgY29uZmlndXJhYmxlCisgKiAoZGVmYXVsdCBTQ0hFRF9UVU5BQkxFU0NBTElOR19MT0cgPSAqKDEraWxvZyhuY3B1cykpCisgKgorICogT3B0aW9ucyBhcmU6CisgKiBTQ0hFRF9UVU5BQkxFU0NBTElOR19OT05FIC0gdW5zY2FsZWQsIGFsd2F5cyAqMQorICogU0NIRURfVFVOQUJMRVNDQUxJTkdfTE9HIC0gc2NhbGVkIGxvZ2FyaXRobWljYWwsICoxK2lsb2cobmNwdXMpCisgKiBTQ0hFRF9UVU5BQkxFU0NBTElOR19MSU5FQVIgLSBzY2FsZWQgbGluZWFyLCAqbmNwdXMKKyAqLworZW51bSBzY2hlZF90dW5hYmxlX3NjYWxpbmcgc3lzY3RsX3NjaGVkX3R1bmFibGVfc2NhbGluZworCT0gU0NIRURfVFVOQUJMRVNDQUxJTkdfTE9HOwogCiAvKgogICogTWluaW1hbCBwcmVlbXB0aW9uIGdyYW51bGFyaXR5IGZvciBDUFUtYm91bmQgdGFza3M6CiAgKiAoZGVmYXVsdDogMSBtc2VjICogKDEgKyBpbG9nKG5jcHVzKSksIHVuaXRzOiBuYW5vc2Vjb25kcykKICAqLwogdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkgPSAxMDAwMDAwVUxMOwordW5zaWduZWQgaW50IG5vcm1hbGl6ZWRfc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSA9IDEwMDAwMDBVTEw7CiAKIC8qCiAgKiBpcyBrZXB0IGF0IHN5c2N0bF9zY2hlZF9sYXRlbmN5IC8gc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eQpAQCAtNzAsNiArODUsNyBAQAogICogaGF2ZSBpbW1lZGlhdGUgd2FrZXVwL3NsZWVwIGxhdGVuY2llcy4KICAqLwogdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkgPSAxMDAwMDAwVUw7Cit1bnNpZ25lZCBpbnQgbm9ybWFsaXplZF9zeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5ID0gMTAwMDAwMFVMOwogCiBjb25zdF9kZWJ1ZyB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0ID0gNTAwMDAwVUw7CiAKQEAgLTM4MywxMSArMzk5LDEyIEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwotaW50IHNjaGVkX25yX2xhdGVuY3lfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAoraW50IHNjaGVkX3Byb2NfdXBkYXRlX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLAogCQlsb2ZmX3QgKnBwb3MpCiB7CiAJaW50IHJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwlpbnQgZmFjdG9yID0gZ2V0X3VwZGF0ZV9zeXNjdGxfZmFjdG9yKCk7CiAKIAlpZiAocmV0IHx8ICF3cml0ZSkKIAkJcmV0dXJuIHJldDsKQEAgLTM5NSw2ICs0MTIsMTQgQEAKIAlzY2hlZF9ucl9sYXRlbmN5ID0gRElWX1JPVU5EX1VQKHN5c2N0bF9zY2hlZF9sYXRlbmN5LAogCQkJCQlzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5KTsKIAorI2RlZmluZSBXUlRfU1lTQ1RMKG5hbWUpIFwKKwkobm9ybWFsaXplZF9zeXNjdGxfIyNuYW1lID0gc3lzY3RsXyMjbmFtZSAvIChmYWN0b3IpKQorCVdSVF9TWVNDVEwoc2NoZWRfbWluX2dyYW51bGFyaXR5KTsKKwlXUlRfU1lTQ1RMKHNjaGVkX2xhdGVuY3kpOworCVdSVF9TWVNDVEwoc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5KTsKKwlXUlRfU1lTQ1RMKHNjaGVkX3NoYXJlc19yYXRlbGltaXQpOworI3VuZGVmIFdSVF9TWVNDVEwKKwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00ODUsNiArNTEwLDcgQEAKIAljdXJyLT5zdW1fZXhlY19ydW50aW1lICs9IGRlbHRhX2V4ZWM7CiAJc2NoZWRzdGF0X2FkZChjZnNfcnEsIGV4ZWNfY2xvY2ssIGRlbHRhX2V4ZWMpOwogCWRlbHRhX2V4ZWNfd2VpZ2h0ZWQgPSBjYWxjX2RlbHRhX2ZhaXIoZGVsdGFfZXhlYywgY3Vycik7CisKIAljdXJyLT52cnVudGltZSArPSBkZWx0YV9leGVjX3dlaWdodGVkOwogCXVwZGF0ZV9taW5fdnJ1bnRpbWUoY2ZzX3JxKTsKIH0KQEAgLTc0MCwxNiArNzY2LDI2IEBACiAJc2UtPnZydW50aW1lID0gdnJ1bnRpbWU7CiB9CiAKKyNkZWZpbmUgRU5RVUVVRV9XQUtFVVAJMQorI2RlZmluZSBFTlFVRVVFX01JR1JBVEUgMgorCiBzdGF0aWMgdm9pZAotZW5xdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IHdha2V1cCkKK2VucXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIHsKIAkvKgorCSAqIFVwZGF0ZSB0aGUgbm9ybWFsaXplZCB2cnVudGltZSBiZWZvcmUgdXBkYXRpbmcgbWluX3ZydW50aW1lCisJICogdGhyb3VnaCBjYWxsaWcgdXBkYXRlX2N1cnIoKS4KKwkgKi8KKwlpZiAoIShmbGFncyAmIEVOUVVFVUVfV0FLRVVQKSB8fCAoZmxhZ3MgJiBFTlFVRVVFX01JR1JBVEUpKQorCQlzZS0+dnJ1bnRpbWUgKz0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CisKKwkvKgogCSAqIFVwZGF0ZSBydW4tdGltZSBzdGF0aXN0aWNzIG9mIHRoZSAnY3VycmVudCcuCiAJICovCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKIAlhY2NvdW50X2VudGl0eV9lbnF1ZXVlKGNmc19ycSwgc2UpOwogCi0JaWYgKHdha2V1cCkgeworCWlmIChmbGFncyAmIEVOUVVFVUVfV0FLRVVQKSB7CiAJCXBsYWNlX2VudGl0eShjZnNfcnEsIHNlLCAwKTsKIAkJZW5xdWV1ZV9zbGVlcGVyKGNmc19ycSwgc2UpOwogCX0KQEAgLTgwMyw2ICs4MzksMTQgQEAKIAkJX19kZXF1ZXVlX2VudGl0eShjZnNfcnEsIHNlKTsKIAlhY2NvdW50X2VudGl0eV9kZXF1ZXVlKGNmc19ycSwgc2UpOwogCXVwZGF0ZV9taW5fdnJ1bnRpbWUoY2ZzX3JxKTsKKworCS8qCisJICogTm9ybWFsaXplIHRoZSBlbnRpdHkgYWZ0ZXIgdXBkYXRpbmcgdGhlIG1pbl92cnVudGltZSBiZWNhdXNlIHRoZQorCSAqIHVwZGF0ZSBjYW4gcmVmZXIgdG8gdGhlIC0+Y3VyciBpdGVtIGFuZCB3ZSBuZWVkIHRvIHJlZmxlY3QgdGhpcworCSAqIG1vdmVtZW50IGluIG91ciBub3JtYWxpemVkIHBvc2l0aW9uLgorCSAqLworCWlmICghc2xlZXApCisJCXNlLT52cnVudGltZSAtPSBjZnNfcnEtPm1pbl92cnVudGltZTsKIH0KIAogLyoKQEAgLTEwMTMsMTMgKzEwNTcsMTkgQEAKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2U7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3YWtldXApCisJCWZsYWdzIHw9IEVOUVVFVUVfV0FLRVVQOworCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykKKwkJZmxhZ3MgfD0gRU5RVUVVRV9NSUdSQVRFOwogCiAJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7CiAJCWlmIChzZS0+b25fcnEpCiAJCQlicmVhazsKIAkJY2ZzX3JxID0gY2ZzX3JxX29mKHNlKTsKLQkJZW5xdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSwgd2FrZXVwKTsKLQkJd2FrZXVwID0gMTsKKwkJZW5xdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSwgZmxhZ3MpOworCQlmbGFncyA9IEVOUVVFVUVfV0FLRVVQOwogCX0KIAogCWhydGlja191cGRhdGUocnEpOwpAQCAtMTA5NSw2ICsxMTQ1LDE0IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKK3N0YXRpYyB2b2lkIHRhc2tfd2FraW5nX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOworCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGNmc19ycV9vZihzZSk7CisKKwlzZS0+dnJ1bnRpbWUgLT0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7Cit9CisKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogLyoKICAqIGVmZmVjdGl2ZV9sb2FkKCkgY2FsY3VsYXRlcyB0aGUgbG9hZCBjaGFuZ2UgYXMgc2VlbiBmcm9tIHRoZSByb290X3Rhc2tfZ3JvdXAKQEAgLTE0MDMsOCArMTQ2MSwxMCBAQAogCQluZXdfY3B1ID0gcHJldl9jcHU7CiAJfQogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX2RvbWFpbihjcHUsIHRtcCkgeworCQlpZiAoISh0bXAtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIElmIHBvd2VyIHNhdmluZ3MgbG9naWMgaXMgZW5hYmxlZCBmb3IgYSBkb21haW4sIHNlZSBpZiB3ZQogCQkgKiBhcmUgbm90IG92ZXJsb2FkZWQsIGlmIHNvLCBkb24ndCBiYWxhbmNlIHdpZGVyLgpAQCAtMTQ4NCwxMCArMTU0NCw4IEBACiAJCQl1cGRhdGVfc2hhcmVzKHRtcCk7CiAJfQogCi0JaWYgKGFmZmluZV9zZCAmJiB3YWtlX2FmZmluZShhZmZpbmVfc2QsIHAsIHN5bmMpKSB7Ci0JCW5ld19jcHUgPSBjcHU7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoYWZmaW5lX3NkICYmIHdha2VfYWZmaW5lKGFmZmluZV9zZCwgcCwgc3luYykpCisJCXJldHVybiBjcHU7CiAKIAl3aGlsZSAoc2QpIHsKIAkJaW50IGxvYWRfaWR4ID0gc2QtPmZvcmtleGVjX2lkeDsKQEAgLTE1MjgsOCArMTU4Niw2IEBACiAJCS8qIHdoaWxlIGxvb3Agd2lsbCBicmVhayBoZXJlIGlmIHNkID09IE5VTEwgKi8KIAl9CiAKLW91dDoKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gbmV3X2NwdTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC0xNjUxLDEyICsxNzA3LDggQEAKIAlpbnQgc3luYyA9IHdha2VfZmxhZ3MgJiBXRl9TWU5DOwogCWludCBzY2FsZSA9IGNmc19ycS0+bnJfcnVubmluZyA+PSBzY2hlZF9ucl9sYXRlbmN5OwogCi0JdXBkYXRlX2N1cnIoY2ZzX3JxKTsKLQotCWlmICh1bmxpa2VseShydF9wcmlvKHAtPnByaW8pKSkgewotCQlyZXNjaGVkX3Rhc2soY3Vycik7Ci0JCXJldHVybjsKLQl9CisJaWYgKHVubGlrZWx5KHJ0X3ByaW8ocC0+cHJpbykpKQorCQlnb3RvIHByZWVtcHQ7CiAKIAlpZiAodW5saWtlbHkocC0+c2NoZWRfY2xhc3MgIT0gJmZhaXJfc2NoZWRfY2xhc3MpKQogCQlyZXR1cm47CkBAIC0xNjgyLDUwICsxNzM0LDQ0IEBACiAJCXJldHVybjsKIAogCS8qIElkbGUgdGFza3MgYXJlIGJ5IGRlZmluaXRpb24gcHJlZW1wdGVkIGJ5IGV2ZXJ5Ym9keS4gKi8KLQlpZiAodW5saWtlbHkoY3Vyci0+cG9saWN5ID09IFNDSEVEX0lETEUpKSB7Ci0JCXJlc2NoZWRfdGFzayhjdXJyKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAodW5saWtlbHkoY3Vyci0+cG9saWN5ID09IFNDSEVEX0lETEUpKQorCQlnb3RvIHByZWVtcHQ7CiAKLQlpZiAoKHNjaGVkX2ZlYXQoV0FLRVVQX1NZTkMpICYmIHN5bmMpIHx8Ci0JICAgIChzY2hlZF9mZWF0KFdBS0VVUF9PVkVSTEFQKSAmJgotCSAgICAgKHNlLT5hdmdfb3ZlcmxhcCA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCAmJgotCSAgICAgIHBzZS0+YXZnX292ZXJsYXAgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpKSkgewotCQlyZXNjaGVkX3Rhc2soY3Vycik7Ci0JCXJldHVybjsKLQl9CisJaWYgKHNjaGVkX2ZlYXQoV0FLRVVQX1NZTkMpICYmIHN5bmMpCisJCWdvdG8gcHJlZW1wdDsKIAotCWlmIChzY2hlZF9mZWF0KFdBS0VVUF9SVU5OSU5HKSkgewotCQlpZiAocHNlLT5hdmdfcnVubmluZyA8IHNlLT5hdmdfcnVubmluZykgewotCQkJc2V0X25leHRfYnVkZHkocHNlKTsKLQkJCXJlc2NoZWRfdGFzayhjdXJyKTsKLQkJCXJldHVybjsKLQkJfQotCX0KKwlpZiAoc2NoZWRfZmVhdChXQUtFVVBfT1ZFUkxBUCkgJiYKKwkJCXNlLT5hdmdfb3ZlcmxhcCA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCAmJgorCQkJcHNlLT5hdmdfb3ZlcmxhcCA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCkKKwkJZ290byBwcmVlbXB0OwogCiAJaWYgKCFzY2hlZF9mZWF0KFdBS0VVUF9QUkVFTVBUKSkKIAkJcmV0dXJuOwogCisJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKIAlmaW5kX21hdGNoaW5nX3NlKCZzZSwgJnBzZSk7Ci0KIAlCVUdfT04oIXBzZSk7CisJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShzZSwgcHNlKSA9PSAxKQorCQlnb3RvIHByZWVtcHQ7CiAKLQlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpIHsKLQkJcmVzY2hlZF90YXNrKGN1cnIpOwotCQkvKgotCQkgKiBPbmx5IHNldCB0aGUgYmFja3dhcmQgYnVkZHkgd2hlbiB0aGUgY3VycmVudCB0YXNrIGlzIHN0aWxsCi0JCSAqIG9uIHRoZSBycS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSB3YWtldXAgZ2V0cyBpbnRlcmxlYXZlZAotCQkgKiB3aXRoIHNjaGVkdWxlIG9uIHRoZSAtPnByZV9zY2hlZHVsZSgpIG9yIGlkbGVfYmFsYW5jZSgpCi0JCSAqIHBvaW50LCBlaXRoZXIgb2Ygd2hpY2ggY2FuICogZHJvcCB0aGUgcnEgbG9jay4KLQkJICoKLQkJICogQWxzbywgZHVyaW5nIGVhcmx5IGJvb3QgdGhlIGlkbGUgdGhyZWFkIGlzIGluIHRoZSBmYWlyIGNsYXNzLAotCQkgKiBmb3Igb2J2aW91cyByZWFzb25zIGl0cyBhIGJhZCBpZGVhIHRvIHNjaGVkdWxlIGJhY2sgdG8gaXQuCi0JCSAqLwotCQlpZiAodW5saWtlbHkoIXNlLT5vbl9ycSB8fCBjdXJyID09IHJxLT5pZGxlKSkKLQkJCXJldHVybjsKLQkJaWYgKHNjaGVkX2ZlYXQoTEFTVF9CVUREWSkgJiYgc2NhbGUgJiYgZW50aXR5X2lzX3Rhc2soc2UpKQotCQkJc2V0X2xhc3RfYnVkZHkoc2UpOwotCX0KKwlyZXR1cm47CisKK3ByZWVtcHQ6CisJcmVzY2hlZF90YXNrKGN1cnIpOworCS8qCisJICogT25seSBzZXQgdGhlIGJhY2t3YXJkIGJ1ZGR5IHdoZW4gdGhlIGN1cnJlbnQgdGFzayBpcyBzdGlsbAorCSAqIG9uIHRoZSBycS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSB3YWtldXAgZ2V0cyBpbnRlcmxlYXZlZAorCSAqIHdpdGggc2NoZWR1bGUgb24gdGhlIC0+cHJlX3NjaGVkdWxlKCkgb3IgaWRsZV9iYWxhbmNlKCkKKwkgKiBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbiAqIGRyb3AgdGhlIHJxIGxvY2suCisJICoKKwkgKiBBbHNvLCBkdXJpbmcgZWFybHkgYm9vdCB0aGUgaWRsZSB0aHJlYWQgaXMgaW4gdGhlIGZhaXIgY2xhc3MsCisJICogZm9yIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIGl0LgorCSAqLworCWlmICh1bmxpa2VseSghc2UtPm9uX3JxIHx8IGN1cnIgPT0gcnEtPmlkbGUpKQorCQlyZXR1cm47CisKKwlpZiAoc2NoZWRfZmVhdChMQVNUX0JVRERZKSAmJiBzY2FsZSAmJiBlbnRpdHlfaXNfdGFzayhzZSkpCisJCXNldF9sYXN0X2J1ZGR5KHNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxKQpAQCAtMTkwNSw2ICsxOTUxLDE3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHZvaWQgcnFfb25saW5lX2ZhaXIoc3RydWN0IHJxICpycSkKK3sKKwl1cGRhdGVfc3lzY3RsKCk7Cit9CisKK3N0YXRpYyB2b2lkIHJxX29mZmxpbmVfZmFpcihzdHJ1Y3QgcnEgKnJxKQoreworCXVwZGF0ZV9zeXNjdGwoKTsKK30KKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKQEAgLTE5MjIsMjggKzE5NzksMzAgQEAKIH0KIAogLyoKLSAqIFNoYXJlIHRoZSBmYWlybmVzcyBydW50aW1lIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZCwgdGh1cyB0aGUKLSAqIHRvdGFsIGFtb3VudCBvZiBwcmVzc3VyZSBmb3IgQ1BVIHN0YXlzIGVxdWFsIC0gbmV3IHRhc2tzCi0gKiBnZXQgYSBjaGFuY2UgdG8gcnVuIGJ1dCBmcmVxdWVudCBmb3JrZXJzIGFyZSBub3QgYWxsb3dlZCB0bwotICogbW9ub3BvbGl6ZSB0aGUgQ1BVLiBOb3RlOiB0aGUgcGFyZW50IHJ1bnF1ZXVlIGlzIGxvY2tlZCwKLSAqIHRoZSBjaGlsZCBpcyBub3QgcnVubmluZyB5ZXQuCisgKiBjYWxsZWQgb24gZm9yayB3aXRoIHRoZSBjaGlsZCB0YXNrIGFzIGFyZ3VtZW50IGZyb20gdGhlIHBhcmVudCdzIGNvbnRleHQKKyAqICAtIGNoaWxkIG5vdCB5ZXQgb24gdGhlIHRhc2tsaXN0CisgKiAgLSBwcmVlbXB0aW9uIGRpc2FibGVkCiAgKi8KLXN0YXRpYyB2b2lkIHRhc2tfbmV3X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgdGFza19mb3JrX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKHApOworCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKGN1cnJlbnQpOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlLCAqY3VyciA9IGNmc19ycS0+Y3VycjsKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHJxICpycSA9IHRoaXNfcnEoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2NoZWRfaW5mb19xdWV1ZWQocCk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KHRhc2tfY3B1KHApICE9IHRoaXNfY3B1KSkKKwkJX19zZXRfdGFza19jcHUocCwgdGhpc19jcHUpOwogCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKKwogCWlmIChjdXJyKQogCQlzZS0+dnJ1bnRpbWUgPSBjdXJyLT52cnVudGltZTsKIAlwbGFjZV9lbnRpdHkoY2ZzX3JxLCBzZSwgMSk7CiAKLQkvKiAnY3Vycicgd2lsbCBiZSBOVUxMIGlmIHRoZSBjaGlsZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGdyb3VwICovCi0JaWYgKHN5c2N0bF9zY2hlZF9jaGlsZF9ydW5zX2ZpcnN0ICYmIHRoaXNfY3B1ID09IHRhc2tfY3B1KHApICYmCi0JCQljdXJyICYmIGVudGl0eV9iZWZvcmUoY3Vyciwgc2UpKSB7CisJaWYgKHN5c2N0bF9zY2hlZF9jaGlsZF9ydW5zX2ZpcnN0ICYmIGN1cnIgJiYgZW50aXR5X2JlZm9yZShjdXJyLCBzZSkpIHsKIAkJLyoKIAkJICogVXBvbiByZXNjaGVkdWxpbmcsIHNjaGVkX2NsYXNzOjpwdXRfcHJldl90YXNrKCkgd2lsbCBwbGFjZQogCQkgKiAnY3VycmVudCcgd2l0aGluIHRoZSB0cmVlIGJhc2VkIG9uIGl0cyBuZXcga2V5IHZhbHVlLgpAQCAtMTk1Miw3ICsyMDExLDkgQEAKIAkJcmVzY2hlZF90YXNrKHJxLT5jdXJyKTsKIAl9CiAKLQllbnF1ZXVlX3Rhc2tfZmFpcihycSwgcCwgMCk7CisJc2UtPnZydW50aW1lIC09IGNmc19ycS0+bWluX3ZydW50aW1lOworCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0yMDA1LDMwICsyMDY2LDI3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotc3RhdGljIHZvaWQgbW92ZWRfZ3JvdXBfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgdm9pZCBtb3ZlZF9ncm91cF9mYWlyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG9uX3JxKQogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKHApOwogCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKLQlwbGFjZV9lbnRpdHkoY2ZzX3JxLCAmcC0+c2UsIDEpOworCWlmICghb25fcnEpCisJCXBsYWNlX2VudGl0eShjZnNfcnEsICZwLT5zZSwgMSk7CiB9CiAjZW5kaWYKIAotdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9mYWlyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3Vuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmdGFzay0+c2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcnEgKnJxOwogCXVuc2lnbmVkIGludCBycl9pbnRlcnZhbCA9IDA7CiAKIAkvKgogCSAqIFRpbWUgc2xpY2UgaXMgMCBmb3IgU0NIRURfT1RIRVIgdGFza3MgdGhhdCBhcmUgb24gYW4gb3RoZXJ3aXNlCiAJICogaWRsZSBydW5xdWV1ZToKIAkgKi8KLQlycSA9IHRhc2tfcnFfbG9jayh0YXNrLCAmZmxhZ3MpOwogCWlmIChycS0+Y2ZzLmxvYWQud2VpZ2h0KQogCQlycl9pbnRlcnZhbCA9IE5TX1RPX0pJRkZJRVMoc2NoZWRfc2xpY2UoJnJxLT5jZnMsIHNlKSk7Ci0JdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIAlyZXR1cm4gcnJfaW50ZXJ2YWw7CiB9CkBAIC0yMDUyLDExICsyMTEwLDE1IEBACiAKIAkubG9hZF9iYWxhbmNlCQk9IGxvYWRfYmFsYW5jZV9mYWlyLAogCS5tb3ZlX29uZV90YXNrCQk9IG1vdmVfb25lX3Rhc2tfZmFpciwKKwkucnFfb25saW5lCQk9IHJxX29ubGluZV9mYWlyLAorCS5ycV9vZmZsaW5lCQk9IHJxX29mZmxpbmVfZmFpciwKKworCS50YXNrX3dha2luZwkJPSB0YXNrX3dha2luZ19mYWlyLAogI2VuZGlmCiAKIAkuc2V0X2N1cnJfdGFzayAgICAgICAgICA9IHNldF9jdXJyX3Rhc2tfZmFpciwKIAkudGFza190aWNrCQk9IHRhc2tfdGlja19mYWlyLAotCS50YXNrX25ldwkJPSB0YXNrX25ld19mYWlyLAorCS50YXNrX2ZvcmsJCT0gdGFza19mb3JrX2ZhaXIsCiAKIAkucHJpb19jaGFuZ2VkCQk9IHByaW9fY2hhbmdlZF9mYWlyLAogCS5zd2l0Y2hlZF90bwkJPSBzd2l0Y2hlZF90b19mYWlyLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmggYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAppbmRleCAwZDk0MDgzLi5kNTA1OWZkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAorKysgYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaApAQCAtNTQsMTEgKzU0LDYgQEAKIFNDSEVEX0ZFQVQoV0FLRVVQX09WRVJMQVAsIDApCiAKIC8qCi0gKiBXYWtldXAgcHJlZW1wdGlvbiB0b3dhcmRzIHRhc2tzIHRoYXQgcnVuIHNob3J0Ci0gKi8KLVNDSEVEX0ZFQVQoV0FLRVVQX1JVTk5JTkcsIDApCi0KLS8qCiAgKiBVc2UgdGhlIFNZTkMgd2FrZXVwIGhpbnQsIHBpcGVzIGFuZCB0aGUgbGlrZXMgdXNlIHRoaXMgdG8gaW5kaWNhdGUKICAqIHRoZSByZW1vdGUgZW5kIGlzIGxpa2VseSB0byBjb25zdW1lIHRoZSBkYXRhIHdlIGp1c3Qgd3JvdGUsIGFuZAogICogdGhlcmVmb3JlIGhhcyBjYWNoZSBiZW5lZml0IGZyb20gYmVpbmcgcGxhY2VkIG9uIHRoZSBzYW1lIGNwdSwgc2VlCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfaWRsZXRhc2suYyBiL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCmluZGV4IGIxMzNhMjguLjVmOTNiNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCisrKyBiL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCkBAIC0zNCwxMCArMzQsMTAgQEAKIHN0YXRpYyB2b2lkCiBkZXF1ZXVlX3Rhc2tfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKIHsKLQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiAJcHJpbnRrKEtFUk5fRVJSICJiYWQ6IHNjaGVkdWxpbmcgZnJvbSB0aGUgaWRsZSB0aHJlYWQhXG4iKTsKIAlkdW1wX3N0YWNrKCk7Ci0Jc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZycS0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2tfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCkBAIC05Nyw3ICs5Nyw3IEBACiAJCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiB9CiAKLXVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2lkbGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCA1YzVmZWYzLi5mNDgzMjhhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAKIAl3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChyZC0+c3Bhbik7CiAKLQlzcGluX2xvY2soJnJ0X2ItPnJ0X3J1bnRpbWVfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKIAlydF9wZXJpb2QgPSBrdGltZV90b19ucyhydF9iLT5ydF9wZXJpb2QpOwogCWZvcl9lYWNoX2NwdShpLCByZC0+c3BhbikgewogCQlzdHJ1Y3QgcnRfcnEgKml0ZXIgPSBzY2hlZF9ydF9wZXJpb2RfcnRfcnEocnRfYiwgaSk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAkJaWYgKGl0ZXIgPT0gcnRfcnEpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2soJml0ZXItPnJ0X3J1bnRpbWVfbG9jayk7CisJCXJhd19zcGluX2xvY2soJml0ZXItPnJ0X3J1bnRpbWVfbG9jayk7CiAJCS8qCiAJCSAqIEVpdGhlciBhbGwgcnFzIGhhdmUgaW5mIHJ1bnRpbWUgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBzdGVhbAogCQkgKiBvciBfX2Rpc2FibGVfcnVudGltZSgpIGJlbG93IHNldHMgYSBzcGVjaWZpYyBycSB0byBpbmYgdG8KQEAgLTM1OCwxNCArMzU4LDE0IEBACiAJCQlydF9ycS0+cnRfcnVudGltZSArPSBkaWZmOwogCQkJbW9yZSA9IDE7CiAJCQlpZiAocnRfcnEtPnJ0X3J1bnRpbWUgPT0gcnRfcGVyaW9kKSB7Ci0JCQkJc3Bpbl91bmxvY2soJml0ZXItPnJ0X3J1bnRpbWVfbG9jayk7CisJCQkJcmF3X3NwaW5fdW5sb2NrKCZpdGVyLT5ydF9ydW50aW1lX2xvY2spOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiBuZXh0OgotCQlzcGluX3VubG9jaygmaXRlci0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZpdGVyLT5ydF9ydW50aW1lX2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnJ0X2ItPnJ0X3J1bnRpbWVfbG9jayk7CiAKIAlyZXR1cm4gbW9yZTsKIH0KQEAgLTM4Niw4ICszODYsOCBAQAogCQlzNjQgd2FudDsKIAkJaW50IGk7CiAKLQkJc3Bpbl9sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOwotCQlzcGluX2xvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAkJLyoKIAkJICogRWl0aGVyIHdlJ3JlIGFsbCBpbmYgYW5kIG5vYm9keSBuZWVkcyB0byBib3Jyb3csIG9yIHdlJ3JlCiAJCSAqIGFscmVhZHkgZGlzYWJsZWQgYW5kIHRodXMgaGF2ZSBub3RoaW5nIHRvIGRvLCBvciB3ZSBoYXZlCkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJaWYgKHJ0X3JxLT5ydF9ydW50aW1lID09IFJVTlRJTUVfSU5GIHx8CiAJCQkJcnRfcnEtPnJ0X3J1bnRpbWUgPT0gcnRfYi0+cnRfcnVudGltZSkKIAkJCWdvdG8gYmFsYW5jZWQ7Ci0JCXNwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAogCQkvKgogCQkgKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3aGF0IHdlIHN0YXJ0ZWQgb3V0IHdpdGgKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQkJaWYgKGl0ZXIgPT0gcnRfcnEgfHwgaXRlci0+cnRfcnVudGltZSA9PSBSVU5USU1FX0lORikKIAkJCQljb250aW51ZTsKIAotCQkJc3Bpbl9sb2NrKCZpdGVyLT5ydF9ydW50aW1lX2xvY2spOworCQkJcmF3X3NwaW5fbG9jaygmaXRlci0+cnRfcnVudGltZV9sb2NrKTsKIAkJCWlmICh3YW50ID4gMCkgewogCQkJCWRpZmYgPSBtaW5fdChzNjQsIGl0ZXItPnJ0X3J1bnRpbWUsIHdhbnQpOwogCQkJCWl0ZXItPnJ0X3J1bnRpbWUgLT0gZGlmZjsKQEAgLTQyNywxMyArNDI3LDEzIEBACiAJCQkJaXRlci0+cnRfcnVudGltZSAtPSB3YW50OwogCQkJCXdhbnQgLT0gd2FudDsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrKCZpdGVyLT5ydF9ydW50aW1lX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZpdGVyLT5ydF9ydW50aW1lX2xvY2spOwogCiAJCQlpZiAoIXdhbnQpCiAJCQkJYnJlYWs7CiAJCX0KIAotCQlzcGluX2xvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAkJLyoKIAkJICogV2UgY2Fubm90IGJlIGxlZnQgd2FudGluZyAtIHRoYXQgd291bGQgbWVhbiBzb21lIHJ1bnRpbWUKIAkJICogbGVha2VkIG91dCBvZiB0aGUgc3lzdGVtLgpAQCAtNDQ1LDggKzQ0NSw4IEBACiAJCSAqIHJ1bnRpbWUgLSBpbiB3aGljaCBjYXNlIGJvcnJvd2luZyBkb2Vzbid0IG1ha2Ugc2Vuc2UuCiAJCSAqLwogCQlydF9ycS0+cnRfcnVudGltZSA9IFJVTlRJTUVfSU5GOwotCQlzcGluX3VubG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnJ0X2ItPnJ0X3J1bnRpbWVfbG9jayk7CiAJfQogfQogCkBAIC00NTQsOSArNDU0LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwogCV9fZGlzYWJsZV9ydW50aW1lKHJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX2VuYWJsZV9ydW50aW1lKHN0cnVjdCBycSAqcnEpCkBAIC00NzIsMTMgKzQ3MiwxMyBAQAogCWZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSB7CiAJCXN0cnVjdCBydF9iYW5kd2lkdGggKnJ0X2IgPSBzY2hlZF9ydF9iYW5kd2lkdGgocnRfcnEpOwogCi0JCXNwaW5fbG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKLQkJc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAJCXJ0X3JxLT5ydF9ydW50aW1lID0gcnRfYi0+cnRfcnVudGltZTsKIAkJcnRfcnEtPnJ0X3RpbWUgPSAwOwogCQlydF9ycS0+cnRfdGhyb3R0bGVkID0gMDsKLQkJc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOwotCQlzcGluX3VubG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOwogCX0KIH0KIApAQCAtNDg2LDkgKzQ4Niw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAlfX2VuYWJsZV9ydW50aW1lKHJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGJhbGFuY2VfcnVudGltZShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQpAQCAtNDk2LDkgKzQ5Niw5IEBACiAJaW50IG1vcmUgPSAwOwogCiAJaWYgKHJ0X3JxLT5ydF90aW1lID4gcnRfcnEtPnJ0X3J1bnRpbWUpIHsKLQkJc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOwogCQltb3JlID0gZG9fYmFsYW5jZV9ydW50aW1lKHJ0X3JxKTsKLQkJc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAJfQogCiAJcmV0dXJuIG1vcmU7CkBAIC01MjQsMTEgKzUyNCwxMSBAQAogCQlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gc2NoZWRfcnRfcGVyaW9kX3J0X3JxKHJ0X2IsIGkpOwogCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwogCi0JCXNwaW5fbG9jaygmcnEtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJCWlmIChydF9ycS0+cnRfdGltZSkgewogCQkJdTY0IHJ1bnRpbWU7CiAKLQkJCXNwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAkJCWlmIChydF9ycS0+cnRfdGhyb3R0bGVkKQogCQkJCWJhbGFuY2VfcnVudGltZShydF9ycSk7CiAJCQlydW50aW1lID0gcnRfcnEtPnJ0X3J1bnRpbWU7CkBAIC01MzksMTMgKzUzOSwxMyBAQAogCQkJfQogCQkJaWYgKHJ0X3JxLT5ydF90aW1lIHx8IHJ0X3JxLT5ydF9ucl9ydW5uaW5nKQogCQkJCWlkbGUgPSAwOwotCQkJc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKIAkJfSBlbHNlIGlmIChydF9ycS0+cnRfbnJfcnVubmluZykKIAkJCWlkbGUgPSAwOwogCiAJCWlmIChlbnF1ZXVlKQogCQkJc2NoZWRfcnRfcnFfZW5xdWV1ZShydF9ycSk7Ci0JCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogCX0KIAogCXJldHVybiBpZGxlOwpAQCAtNjI0LDExICs2MjQsMTEgQEAKIAkJcnRfcnEgPSBydF9ycV9vZl9zZShydF9zZSk7CiAKIAkJaWYgKHNjaGVkX3J0X3J1bnRpbWUocnRfcnEpICE9IFJVTlRJTUVfSU5GKSB7Ci0JCQlzcGluX2xvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQkJcmF3X3NwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAJCQlydF9ycS0+cnRfdGltZSArPSBkZWx0YV9leGVjOwogCQkJaWYgKHNjaGVkX3J0X3J1bnRpbWVfZXhjZWVkZWQocnRfcnEpKQogCQkJCXJlc2NoZWRfdGFzayhjdXJyKTsKLQkJCXNwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAJCX0KIAl9CiB9CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQAogCQkJCSAgICAgdGFza19ydW5uaW5nKHJxLCB0YXNrKSB8fAogCQkJCSAgICAgIXRhc2stPnNlLm9uX3JxKSkgewogCi0JCQkJc3Bpbl91bmxvY2soJmxvd2VzdF9ycS0+bG9jayk7CisJCQkJcmF3X3NwaW5fdW5sb2NrKCZsb3dlc3RfcnEtPmxvY2spOwogCQkJCWxvd2VzdF9ycSA9IE5VTEw7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogICogSWYgd2UgYXJlIG5vdCBydW5uaW5nIGFuZCB3ZSBhcmUgbm90IGdvaW5nIHRvIHJlc2NoZWR1bGUgc29vbiwgd2Ugc2hvdWxkCiAgKiB0cnkgdG8gcHVzaCB0YXNrcyBhd2F5IG5vdwogICovCi1zdGF0aWMgdm9pZCB0YXNrX3dha2VfdXBfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgdGFza193b2tlbl9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaWYgKCF0YXNrX3J1bm5pbmcocnEsIHApICYmCiAJICAgICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpICYmCkBAIC0xNzIxLDcgKzE3MjEsNyBAQAogCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKLXVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQordW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJLyoKIAkgKiBUaW1lIHNsaWNlIGlzIDAgZm9yIFNDSEVEX0ZJRk8gdGFza3MKQEAgLTE3NTMsNyArMTc1Myw3IEBACiAJLnJxX29mZmxpbmUgICAgICAgICAgICAgPSBycV9vZmZsaW5lX3J0LAogCS5wcmVfc2NoZWR1bGUJCT0gcHJlX3NjaGVkdWxlX3J0LAogCS5wb3N0X3NjaGVkdWxlCQk9IHBvc3Rfc2NoZWR1bGVfcnQsCi0JLnRhc2tfd2FrZV91cAkJPSB0YXNrX3dha2VfdXBfcnQsCisJLnRhc2tfd29rZW4JCT0gdGFza193b2tlbl9ydCwKIAkuc3dpdGNoZWRfZnJvbQkJPSBzd2l0Y2hlZF9mcm9tX3J0LAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCA2Yjk4MmYyLi5kMDk2OTJiIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0yMTgsMTMgKzIxOCwxMyBAQAogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKIAogCS8qCi0JICogV2Ugd29uJ3QgZ2V0IHByb2JsZW1zIHdpdGggdGhlIHRhcmdldCdzIFVJRCBjaGFuZ2luZyB1bmRlciB1cwotCSAqIGJlY2F1c2UgY2hhbmdpbmcgaXQgcmVxdWlyZXMgUkNVIGJlIHVzZWQsIGFuZCBpZiB0ICE9IGN1cnJlbnQsIHRoZQotCSAqIGNhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIFJDVSByZWFkbG9jayAoYnkgd2F5IG9mIGEgc3BpbmxvY2spIGFuZAotCSAqIHdlIHVzZSBSQ1UgcHJvdGVjdGlvbiBoZXJlCisJICogUHJvdGVjdCBhY2Nlc3MgdG8gQHQgY3JlZGVudGlhbHMuIFRoaXMgY2FuIGdvIGF3YXkgd2hlbiBhbGwKKwkgKiBjYWxsZXJzIGhvbGQgcmN1IHJlYWQgbG9jay4KIAkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CiAJdXNlciA9IGdldF91aWQoX190YXNrX2NyZWQodCktPnVzZXIpOwogCWF0b21pY19pbmMoJnVzZXItPnNpZ3BlbmRpbmcpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKG92ZXJyaWRlX3JsaW1pdCB8fAogCSAgICBhdG9taWNfcmVhZCgmdXNlci0+c2lncGVuZGluZykgPD0KQEAgLTQyMyw3ICs0MjMsNyBAQAogCQkgKi8KIAkJaW5mby0+c2lfc2lnbm8gPSBzaWc7CiAJCWluZm8tPnNpX2Vycm5vID0gMDsKLQkJaW5mby0+c2lfY29kZSA9IDA7CisJCWluZm8tPnNpX2NvZGUgPSBTSV9VU0VSOwogCQlpbmZvLT5zaV9waWQgPSAwOwogCQlpbmZvLT5zaV91aWQgPSAwOwogCX0KQEAgLTYwNyw2ICs2MDcsMTcgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaXNfc2lfc3BlY2lhbChjb25zdCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gaW5mbyA8PSBTRU5EX1NJR19GT1JDRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaV9mcm9tdXNlcihjb25zdCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gaW5mbyA9PSBTRU5EX1NJR19OT0lORk8gfHwKKwkJKCFpc19zaV9zcGVjaWFsKGluZm8pICYmIFNJX0ZST01VU0VSKGluZm8pKTsKK30KKwogLyoKICAqIEJhZCBwZXJtaXNzaW9ucyBmb3Igc2VuZGluZyB0aGUgc2lnbmFsCiAgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSBSQ1UgcmVhZCBsb2NrCkBAIC02MjEsNyArNjMyLDcgQEAKIAlpZiAoIXZhbGlkX3NpZ25hbChzaWcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpbmZvICE9IFNFTkRfU0lHX05PSU5GTyAmJiAoaXNfc2lfc3BlY2lhbChpbmZvKSB8fCBTSV9GUk9NS0VSTkVMKGluZm8pKSkKKwlpZiAoIXNpX2Zyb211c2VyKGluZm8pKQogCQlyZXR1cm4gMDsKIAogCWVycm9yID0gYXVkaXRfc2lnbmFsX2luZm8oc2lnLCB0KTsgLyogTGV0IGF1ZGl0IHN5c3RlbSBzZWUgdGhlIHNpZ25hbCAqLwpAQCAtOTQ5LDkgKzk2MCw4IEBACiAJaW50IGZyb21fYW5jZXN0b3JfbnMgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BJRF9OUwotCWlmICghaXNfc2lfc3BlY2lhbChpbmZvKSAmJiBTSV9GUk9NVVNFUihpbmZvKSAmJgotCQkJdGFza19waWRfbnJfbnMoY3VycmVudCwgdGFza19hY3RpdmVfcGlkX25zKHQpKSA8PSAwKQotCQlmcm9tX2FuY2VzdG9yX25zID0gMTsKKwlmcm9tX2FuY2VzdG9yX25zID0gc2lfZnJvbXVzZXIoaW5mbykgJiYKKwkJCSAgICF0YXNrX3BpZF9ucl9ucyhjdXJyZW50LCB0YXNrX2FjdGl2ZV9waWRfbnModCkpOwogI2VuZGlmCiAKIAlyZXR1cm4gX19zZW5kX3NpZ25hbChzaWcsIGluZm8sIHQsIGdyb3VwLCBmcm9tX2FuY2VzdG9yX25zKTsKQEAgLTEwNTIsMTIgKzEwNjIsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQKLWZvcmNlX3NpZ19zcGVjaWZpYyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCi17Ci0JZm9yY2Vfc2lnX2luZm8oc2lnLCBTRU5EX1NJR19GT1JDRUQsIHQpOwotfQotCiAvKgogICogTnVrZSBhbGwgb3RoZXIgdGhyZWFkcyBpbiB0aGUgZ3JvdXAuCiAgKi8KQEAgLTExNzUsMTkgKzExNzksMTkgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJY29uc3Qgc3RydWN0IGNyZWQgKnBjcmVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXZhbGlkX3NpZ25hbChzaWcpKQogCQlyZXR1cm4gcmV0OwogCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IHBpZF90YXNrKHBpZCwgUElEVFlQRV9QSUQpOwogCWlmICghcCkgewogCQlyZXQgPSAtRVNSQ0g7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJcGNyZWQgPSBfX3Rhc2tfY3JlZChwKTsKLQlpZiAoKGluZm8gPT0gU0VORF9TSUdfTk9JTkZPIHx8Ci0JICAgICAoIWlzX3NpX3NwZWNpYWwoaW5mbykgJiYgU0lfRlJPTVVTRVIoaW5mbykpKSAmJgorCWlmIChzaV9mcm9tdXNlcihpbmZvKSAmJgogCSAgICBldWlkICE9IHBjcmVkLT5zdWlkICYmIGV1aWQgIT0gcGNyZWQtPnVpZCAmJgogCSAgICB1aWQgICE9IHBjcmVkLT5zdWlkICYmIHVpZCAgIT0gcGNyZWQtPnVpZCkgewogCQlyZXQgPSAtRVBFUk07CkBAIC0xMTk2LDE0ICsxMjAwLDE2IEBACiAJcmV0ID0gc2VjdXJpdHlfdGFza19raWxsKHAsIGluZm8sIHNpZywgc2VjaWQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQlpZiAoc2lnICYmIHAtPnNpZ2hhbmQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJcmV0ID0gX19zZW5kX3NpZ25hbChzaWcsIGluZm8sIHAsIDEsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisKKwlpZiAoc2lnKSB7CisJCWlmIChsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpKSB7CisJCQlyZXQgPSBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgcCwgMSwgMCk7CisJCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVTUkNIOwogCX0KIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraWxsX3BpZF9pbmZvX2FzX3VpZCk7CkBAIC0xODM3LDExICsxODQzLDYgQEAKIAogCWZvciAoOzspIHsKIAkJc3RydWN0IGtfc2lnYWN0aW9uICprYTsKLQotCQlpZiAodW5saWtlbHkoc2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCkgJiYKLQkJICAgIGRvX3NpZ25hbF9zdG9wKDApKQotCQkJZ290byByZWxvY2s7Ci0KIAkJLyoKIAkJICogVHJhY2luZyBjYW4gaW5kdWNlIGFuIGFydGlmaWNhbCBzaWduYWwgYW5kIGNob29zZSBzaWdhY3Rpb24uCiAJCSAqIFRoZSByZXR1cm4gdmFsdWUgaW4gQHNpZ25yIGRldGVybWluZXMgdGhlIGRlZmF1bHQgYWN0aW9uLApAQCAtMTg1Myw2ICsxODU0LDEwIEBACiAJCWlmICh1bmxpa2VseShzaWduciAhPSAwKSkKIAkJCWthID0gcmV0dXJuX2thOwogCQllbHNlIHsKKwkJCWlmICh1bmxpa2VseShzaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPiAwKSAmJgorCQkJICAgIGRvX3NpZ25hbF9zdG9wKDApKQorCQkJCWdvdG8gcmVsb2NrOworCiAJCQlzaWduciA9IGRlcXVldWVfc2lnbmFsKGN1cnJlbnQsICZjdXJyZW50LT5ibG9ja2VkLAogCQkJCQkgICAgICAgaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXAuYyBiL2tlcm5lbC9zbXAuYwppbmRleCBhOGM3NjA2Li5kZTczNWE2IDEwMDY0NAotLS0gYS9rZXJuZWwvc21wLmMKKysrIGIva2VybmVsL3NtcC5jCkBAIC0xNiwxMSArMTYsMTEgQEAKIAogc3RhdGljIHN0cnVjdCB7CiAJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKLQlzcGlubG9ja190CQlsb2NrOworCXJhd19zcGlubG9ja190CQlsb2NrOwogfSBjYWxsX2Z1bmN0aW9uIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0KIAl7CiAJCS5xdWV1ZQkJPSBMSVNUX0hFQURfSU5JVChjYWxsX2Z1bmN0aW9uLnF1ZXVlKSwKLQkJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoY2FsbF9mdW5jdGlvbi5sb2NrKSwKKwkJLmxvY2sJCT0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKGNhbGxfZnVuY3Rpb24ubG9jayksCiAJfTsKIAogZW51bSB7CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXNwaW5sb2NrX3QJCWxvY2s7CisJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiB9OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSwgY2ZkX2RhdGEpOwpAQCAtODAsNyArODAsNyBAQAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSAqcSA9ICZwZXJfY3B1KGNhbGxfc2luZ2xlX3F1ZXVlLCBpKTsKIAotCQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZxLT5saXN0KTsKIAl9CiAKQEAgLTE0MSwxMCArMTQxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaXBpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRzdC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZHN0LT5sb2NrLCBmbGFncyk7CiAJaXBpID0gbGlzdF9lbXB0eSgmZHN0LT5saXN0KTsKIAlsaXN0X2FkZF90YWlsKCZkYXRhLT5saXN0LCAmZHN0LT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc3QtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHN0LT5sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIFRoZSBsaXN0IGFkZGl0aW9uIHNob3VsZCBiZSB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBJUEkKQEAgLTE3MSw3ICsxNzEsNyBAQAogdm9pZCBnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKQogewogCXN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEgKmRhdGE7Ci0JaW50IGNwdSA9IGdldF9jcHUoKTsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyoKIAkgKiBTaG91bGRuJ3QgcmVjZWl2ZSB0aGlzIGludGVycnVwdCBvbiBhIGNwdSB0aGF0IGlzIG5vdCB5ZXQgb25saW5lLgpAQCAtMjAxLDkgKzIwMSw5IEBACiAJCXJlZnMgPSBhdG9taWNfZGVjX3JldHVybigmZGF0YS0+cmVmcyk7CiAJCVdBUk5fT04ocmVmcyA8IDApOwogCQlpZiAoIXJlZnMpIHsKLQkJCXNwaW5fbG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CiAJCQlsaXN0X2RlbF9yY3UoJmRhdGEtPmNzZC5saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogCQl9CiAKIAkJaWYgKHJlZnMpCkBAIC0yMTIsNyArMjEyLDYgQEAKIAkJY3NkX3VubG9jaygmZGF0YS0+Y3NkKTsKIAl9CiAKLQlwdXRfY3B1KCk7CiB9CiAKIC8qCkBAIC0yMzAsOSArMjI5LDkgQEAKIAkgKi8KIAlXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CiAKLQlzcGluX2xvY2soJnEtPmxvY2spOworCXJhd19zcGluX2xvY2soJnEtPmxvY2spOwogCWxpc3RfcmVwbGFjZV9pbml0KCZxLT5saXN0LCAmbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnEtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcS0+bG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CiAJCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhOwpAQCAtNDQ5LDE0ICs0NDgsMTQgQEAKIAljcHVtYXNrX2NsZWFyX2NwdSh0aGlzX2NwdSwgZGF0YS0+Y3B1bWFzayk7CiAJYXRvbWljX3NldCgmZGF0YS0+cmVmcywgY3B1bWFza193ZWlnaHQoZGF0YS0+Y3B1bWFzaykpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbGxfZnVuY3Rpb24ubG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2FsbF9mdW5jdGlvbi5sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBQbGFjZSBlbnRyeSBhdCB0aGUgX0hFQURfIG9mIHRoZSBsaXN0LCBzbyB0aGF0IGFueSBjcHUgc3RpbGwKIAkgKiBvYnNlcnZpbmcgdGhlIGVudHJ5IGluIGdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCkKIAkgKiB3aWxsIG5vdCBtaXNzIGFueSBvdGhlciBsaXN0IGVudHJpZXM6CiAJICovCiAJbGlzdF9hZGRfcmN1KCZkYXRhLT5jc2QubGlzdCwgJmNhbGxfZnVuY3Rpb24ucXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbGxfZnVuY3Rpb24ubG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWxsX2Z1bmN0aW9uLmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogTWFrZSB0aGUgbGlzdCBhZGRpdGlvbiB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBpcGkuCkBAIC01MDEsMjAgKzUwMCwyMCBAQAogCiB2b2lkIGlwaV9jYWxsX2xvY2sodm9pZCkKIHsKLQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJcmF3X3NwaW5fbG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKIH0KIAogdm9pZCBpcGlfY2FsbF91bmxvY2sodm9pZCkKIHsKLQlzcGluX3VubG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CiB9CiAKIHZvaWQgaXBpX2NhbGxfbG9ja19pcnEodm9pZCkKIHsKLQlzcGluX2xvY2tfaXJxKCZjYWxsX2Z1bmN0aW9uLmxvY2spOworCXJhd19zcGluX2xvY2tfaXJxKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogfQogCiB2b2lkIGlwaV9jYWxsX3VubG9ja19pcnEodm9pZCkKIHsKLQlzcGluX3VubG9ja19pcnEoJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmY2FsbF9mdW5jdGlvbi5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDIxOTM5ZDkuLmEwOTUwMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAJb3Blbl9zb2Z0aXJxKEhJX1NPRlRJUlEsIHRhc2tsZXRfaGlfYWN0aW9uKTsKIH0KIAotc3RhdGljIGludCBrc29mdGlycWQodm9pZCAqIF9fYmluZF9jcHUpCitzdGF0aWMgaW50IHJ1bl9rc29mdGlycWQodm9pZCAqIF9fYmluZF9jcHUpCiB7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIApAQCAtODEwLDcgKzgxMCw3IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9QUkVQQVJFOgogCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgotCQlwID0ga3RocmVhZF9jcmVhdGUoa3NvZnRpcnFkLCBoY3B1LCAia3NvZnRpcnFkLyVkIiwgaG90Y3B1KTsKKwkJcCA9IGt0aHJlYWRfY3JlYXRlKHJ1bl9rc29mdGlycWQsIGhjcHUsICJrc29mdGlycWQvJWQiLCBob3RjcHUpOwogCQlpZiAoSVNfRVJSKHApKSB7CiAJCQlwcmludGsoImtzb2Z0aXJxZCBmb3IgJWkgZmFpbGVkXG4iLCBob3RjcHUpOwogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGxvY2t1cC5jIGIva2VybmVsL3NvZnRsb2NrdXAuYwppbmRleCA4MTMyNGQxLi5kMjI1NzkwIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGxvY2t1cC5jCisrKyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKQEAgLTIyLDkgKzIyLDkgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhwcmludF9sb2NrKTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRvdWNoX3RpbWVzdGFtcCk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJpbnRfdGltZXN0YW1wKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgd2F0Y2hkb2dfdGFzayk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc29mdGxvY2t1cF90b3VjaF90cyk7IC8qIHRvdWNoIHRpbWVzdGFtcCAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHNvZnRsb2NrdXBfcHJpbnRfdHMpOyAvKiBwcmludCB0aW1lc3RhbXAgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc29mdGxvY2t1cF93YXRjaGRvZyk7CiAKIHN0YXRpYyBpbnQgX19yZWFkX21vc3RseSBkaWRfcGFuaWM7CiBpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOwpAQCAtNzAsMTIgKzcwLDEyIEBACiB7CiAJaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAotCV9fcmF3X2dldF9jcHVfdmFyKHRvdWNoX3RpbWVzdGFtcCkgPSBnZXRfdGltZXN0YW1wKHRoaXNfY3B1KTsKKwlfX3Jhd19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3RvdWNoX3RzKSA9IGdldF90aW1lc3RhbXAodGhpc19jcHUpOwogfQogCiB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCkKIHsKLQlfX3Jhd19nZXRfY3B1X3Zhcih0b3VjaF90aW1lc3RhbXApID0gMDsKKwlfX3Jhd19nZXRfY3B1X3Zhcihzb2Z0bG9ja3VwX3RvdWNoX3RzKSA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2cpOwogCkBAIC04NSw3ICs4NSw3IEBACiAKIAkvKiBDYXVzZSBlYWNoIENQVSB0byByZS11cGRhdGUgaXRzIHRpbWVzdGFtcCByYXRoZXIgdGhhbiBjb21wbGFpbiAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgY3B1KSA9IDA7CisJCXBlcl9jcHUoc29mdGxvY2t1cF90b3VjaF90cywgY3B1KSA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyk7CiAKQEAgLTEwNCwyOCArMTA0LDI4IEBACiB2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKQogewogCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBsb25nIHRvdWNoX3RpbWVzdGFtcCA9IHBlcl9jcHUodG91Y2hfdGltZXN0YW1wLCB0aGlzX2NwdSk7Ci0JdW5zaWduZWQgbG9uZyBwcmludF90aW1lc3RhbXA7CisJdW5zaWduZWQgbG9uZyB0b3VjaF90cyA9IHBlcl9jcHUoc29mdGxvY2t1cF90b3VjaF90cywgdGhpc19jcHUpOworCXVuc2lnbmVkIGxvbmcgcHJpbnRfdHM7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAl1bnNpZ25lZCBsb25nIG5vdzsKIAogCS8qIElzIGRldGVjdGlvbiBzd2l0Y2hlZCBvZmY/ICovCi0JaWYgKCFwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIHRoaXNfY3B1KSB8fCBzb2Z0bG9ja3VwX3RocmVzaCA8PSAwKSB7CisJaWYgKCFwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIHRoaXNfY3B1KSB8fCBzb2Z0bG9ja3VwX3RocmVzaCA8PSAwKSB7CiAJCS8qIEJlIHN1cmUgd2UgZG9uJ3QgZmFsc2UgdHJpZ2dlciBpZiBzd2l0Y2hlZCBiYWNrIG9uICovCi0JCWlmICh0b3VjaF90aW1lc3RhbXApCi0JCQlwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgdGhpc19jcHUpID0gMDsKKwkJaWYgKHRvdWNoX3RzKQorCQkJcGVyX2NwdShzb2Z0bG9ja3VwX3RvdWNoX3RzLCB0aGlzX2NwdSkgPSAwOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRvdWNoX3RpbWVzdGFtcCA9PSAwKSB7CisJaWYgKHRvdWNoX3RzID09IDApIHsKIAkJX190b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAJCXJldHVybjsKIAl9CiAKLQlwcmludF90aW1lc3RhbXAgPSBwZXJfY3B1KHByaW50X3RpbWVzdGFtcCwgdGhpc19jcHUpOworCXByaW50X3RzID0gcGVyX2NwdShzb2Z0bG9ja3VwX3ByaW50X3RzLCB0aGlzX2NwdSk7CiAKIAkvKiByZXBvcnQgYXQgbW9zdCBvbmNlIGEgc2Vjb25kICovCi0JaWYgKHByaW50X3RpbWVzdGFtcCA9PSB0b3VjaF90aW1lc3RhbXAgfHwgZGlkX3BhbmljKQorCWlmIChwcmludF90cyA9PSB0b3VjaF90cyB8fCBkaWRfcGFuaWMpCiAJCXJldHVybjsKIAogCS8qIGRvIG5vdCBwcmludCBkdXJpbmcgZWFybHkgYm9vdHVwOiAqLwpAQCAtMTQwLDE4ICsxNDAsMTggQEAKIAkgKiBXYWtlIHVwIHRoZSBoaWdoLXByaW8gd2F0Y2hkb2cgdGFzayB0d2ljZSBwZXIKIAkgKiB0aHJlc2hvbGQgdGltZXNwYW4uCiAJICovCi0JaWYgKG5vdyA+IHRvdWNoX3RpbWVzdGFtcCArIHNvZnRsb2NrdXBfdGhyZXNoLzIpCi0JCXdha2VfdXBfcHJvY2VzcyhwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIHRoaXNfY3B1KSk7CisJaWYgKG5vdyA+IHRvdWNoX3RzICsgc29mdGxvY2t1cF90aHJlc2gvMikKKwkJd2FrZV91cF9wcm9jZXNzKHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgdGhpc19jcHUpKTsKIAogCS8qIFdhcm4gYWJvdXQgdW5yZWFzb25hYmxlIGRlbGF5czogKi8KLQlpZiAobm93IDw9ICh0b3VjaF90aW1lc3RhbXAgKyBzb2Z0bG9ja3VwX3RocmVzaCkpCisJaWYgKG5vdyA8PSAodG91Y2hfdHMgKyBzb2Z0bG9ja3VwX3RocmVzaCkpCiAJCXJldHVybjsKIAotCXBlcl9jcHUocHJpbnRfdGltZXN0YW1wLCB0aGlzX2NwdSkgPSB0b3VjaF90aW1lc3RhbXA7CisJcGVyX2NwdShzb2Z0bG9ja3VwX3ByaW50X3RzLCB0aGlzX2NwdSkgPSB0b3VjaF90czsKIAogCXNwaW5fbG9jaygmcHJpbnRfbG9jayk7CiAJcHJpbnRrKEtFUk5fRVJSICJCVUc6IHNvZnQgbG9ja3VwIC0gQ1BVIyVkIHN0dWNrIGZvciAlbHVzISBbJXM6JWRdXG4iLAotCQkJdGhpc19jcHUsIG5vdyAtIHRvdWNoX3RpbWVzdGFtcCwKKwkJCXRoaXNfY3B1LCBub3cgLSB0b3VjaF90cywKIAkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJcHJpbnRfaXJxdHJhY2VfZXZlbnRzKGN1cnJlbnQpOwpAQCAtMjA5LDMyICsyMDksMzIgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46Ci0JCUJVR19PTihwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIGhvdGNwdSkpOworCQlCVUdfT04ocGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBob3RjcHUpKTsKIAkJcCA9IGt0aHJlYWRfY3JlYXRlKHdhdGNoZG9nLCBoY3B1LCAid2F0Y2hkb2cvJWQiLCBob3RjcHUpOwogCQlpZiAoSVNfRVJSKHApKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIndhdGNoZG9nIGZvciAlaSBmYWlsZWRcbiIsIGhvdGNwdSk7CiAJCQlyZXR1cm4gTk9USUZZX0JBRDsKIAkJfQotCQlwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgaG90Y3B1KSA9IDA7Ci0JCXBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSA9IHA7CisJCXBlcl9jcHUoc29mdGxvY2t1cF90b3VjaF90cywgaG90Y3B1KSA9IDA7CisJCXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSA9IHA7CiAJCWt0aHJlYWRfYmluZChwLCBob3RjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJd2FrZV91cF9wcm9jZXNzKHBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSk7CisJCXdha2VfdXBfcHJvY2VzcyhwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGhvdGNwdSkpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKIAljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46Ci0JCWlmICghcGVyX2NwdSh3YXRjaGRvZ190YXNrLCBob3RjcHUpKQorCQlpZiAoIXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSkKIAkJCWJyZWFrOwogCQkvKiBVbmJpbmQgc28gaXQgY2FuIHJ1bi4gIEZhbGwgdGhydS4gKi8KLQkJa3RocmVhZF9iaW5kKHBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSwKKwkJa3RocmVhZF9iaW5kKHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSwKIAkJCSAgICAgY3B1bWFza19hbnkoY3B1X29ubGluZV9tYXNrKSk7CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKLQkJcCA9IHBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KTsKLQkJcGVyX2NwdSh3YXRjaGRvZ190YXNrLCBob3RjcHUpID0gTlVMTDsKKwkJcCA9IHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KTsKKwkJcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBob3RjcHUpID0gTlVMTDsKIAkJa3RocmVhZF9zdG9wKHApOwogCQlicmVhazsKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zcGlubG9jay5jIGIva2VybmVsL3NwaW5sb2NrLmMKaW5kZXggNDFlMDQyMi4uYmU2NTE3ZiAxMDA2NDQKLS0tIGEva2VybmVsL3NwaW5sb2NrLmMKKysrIGIva2VybmVsL3NwaW5sb2NrLmMKQEAgLTMyLDYgKzMyLDggQEAKICAqIGluY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCiAgKi8KICNlbHNlCisjZGVmaW5lIHJhd19yZWFkX2Nhbl9sb2NrKGwpCXJlYWRfY2FuX2xvY2sobCkKKyNkZWZpbmUgcmF3X3dyaXRlX2Nhbl9sb2NrKGwpCXdyaXRlX2Nhbl9sb2NrKGwpCiAvKgogICogV2UgYnVpbGQgdGhlIF9fbG9ja19mdW5jdGlvbiBpbmxpbmVzIGhlcmUuIFRoZXkgYXJlIHRvbyBsYXJnZSBmb3IKICAqIGlubGluaW5nIGFsbCBvdmVyIHRoZSBwbGFjZSwgYnV0IGhlcmUgaXMgb25seSBvbmUgdXNlciBwZXIgZnVuY3Rpb24KQEAgLTQyLDQ5ICs0NCw0OSBAQAogICogdG93YXJkcyB0aGF0IG90aGVyIENQVSB0aGF0IGl0IHNob3VsZCBicmVhayB0aGUgbG9jayBBU0FQLgogICovCiAjZGVmaW5lIEJVSUxEX0xPQ0tfT1BTKG9wLCBsb2NrdHlwZSkJCQkJCVwKLXZvaWQgX19sb2NrZnVuYyBfXyMjb3AjI19sb2NrKGxvY2t0eXBlIyNfdCAqbG9jaykJCQlcCit2b2lkIF9fbG9ja2Z1bmMgX19yYXdfIyNvcCMjX2xvY2sobG9ja3R5cGUjI190ICpsb2NrKQkJCVwKIHsJCQkJCQkJCQlcCiAJZm9yICg7OykgewkJCQkJCQlcCiAJCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXAotCQlpZiAobGlrZWx5KF9yYXdfIyNvcCMjX3RyeWxvY2sobG9jaykpKQkJCVwKKwkJaWYgKGxpa2VseShkb19yYXdfIyNvcCMjX3RyeWxvY2sobG9jaykpKQkJXAogCQkJYnJlYWs7CQkJCQkJXAogCQlwcmVlbXB0X2VuYWJsZSgpOwkJCQkJXAogCQkJCQkJCQkJXAogCQlpZiAoIShsb2NrKS0+YnJlYWtfbG9jaykJCQkJXAogCQkJKGxvY2spLT5icmVha19sb2NrID0gMTsJCQkJXAotCQl3aGlsZSAoIW9wIyNfY2FuX2xvY2sobG9jaykgJiYgKGxvY2spLT5icmVha19sb2NrKQlcCi0JCQlfcmF3XyMjb3AjI19yZWxheCgmbG9jay0+cmF3X2xvY2spOwkJXAorCQl3aGlsZSAoIXJhd18jI29wIyNfY2FuX2xvY2sobG9jaykgJiYgKGxvY2spLT5icmVha19sb2NrKVwKKwkJCWFyY2hfIyNvcCMjX3JlbGF4KCZsb2NrLT5yYXdfbG9jayk7CQlcCiAJfQkJCQkJCQkJXAogCShsb2NrKS0+YnJlYWtfbG9jayA9IDA7CQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfXyMjb3AjI19sb2NrX2lycXNhdmUobG9ja3R5cGUjI190ICpsb2NrKQlcCit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX19yYXdfIyNvcCMjX2xvY2tfaXJxc2F2ZShsb2NrdHlwZSMjX3QgKmxvY2spCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJZm9yICg7OykgewkJCQkJCQlcCiAJCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCi0JCWlmIChsaWtlbHkoX3Jhd18jI29wIyNfdHJ5bG9jayhsb2NrKSkpCQkJXAorCQlpZiAobGlrZWx5KGRvX3Jhd18jI29wIyNfdHJ5bG9jayhsb2NrKSkpCQlcCiAJCQlicmVhazsJCQkJCQlcCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCQkJXAogCQlwcmVlbXB0X2VuYWJsZSgpOwkJCQkJXAogCQkJCQkJCQkJXAogCQlpZiAoIShsb2NrKS0+YnJlYWtfbG9jaykJCQkJXAogCQkJKGxvY2spLT5icmVha19sb2NrID0gMTsJCQkJXAotCQl3aGlsZSAoIW9wIyNfY2FuX2xvY2sobG9jaykgJiYgKGxvY2spLT5icmVha19sb2NrKQlcCi0JCQlfcmF3XyMjb3AjI19yZWxheCgmbG9jay0+cmF3X2xvY2spOwkJXAorCQl3aGlsZSAoIXJhd18jI29wIyNfY2FuX2xvY2sobG9jaykgJiYgKGxvY2spLT5icmVha19sb2NrKVwKKwkJCWFyY2hfIyNvcCMjX3JlbGF4KCZsb2NrLT5yYXdfbG9jayk7CQlcCiAJfQkJCQkJCQkJXAogCShsb2NrKS0+YnJlYWtfbG9jayA9IDA7CQkJCQkJXAogCXJldHVybiBmbGFnczsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXZvaWQgX19sb2NrZnVuYyBfXyMjb3AjI19sb2NrX2lycShsb2NrdHlwZSMjX3QgKmxvY2spCQkJXAordm9pZCBfX2xvY2tmdW5jIF9fcmF3XyMjb3AjI19sb2NrX2lycShsb2NrdHlwZSMjX3QgKmxvY2spCQlcCiB7CQkJCQkJCQkJXAotCV8jI29wIyNfbG9ja19pcnFzYXZlKGxvY2spOwkJCQkJXAorCV9yYXdfIyNvcCMjX2xvY2tfaXJxc2F2ZShsb2NrKTsJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi12b2lkIF9fbG9ja2Z1bmMgX18jI29wIyNfbG9ja19iaChsb2NrdHlwZSMjX3QgKmxvY2spCQkJXAordm9pZCBfX2xvY2tmdW5jIF9fcmF3XyMjb3AjI19sb2NrX2JoKGxvY2t0eXBlIyNfdCAqbG9jaykJCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC05Myw3ICs5NSw3IEBACiAJLyogaXJxLWRpc2FibGluZy4gV2UgdXNlIHRoZSBnZW5lcmljIHByZWVtcHRpb24tYXdhcmUJKi8JXAogCS8qIGZ1bmN0aW9uOgkJCQkJCSovCVwKIAkvKiovCQkJCQkJCQlcCi0JZmxhZ3MgPSBfIyNvcCMjX2xvY2tfaXJxc2F2ZShsb2NrKTsJCQkJXAorCWZsYWdzID0gX3Jhd18jI29wIyNfbG9ja19pcnFzYXZlKGxvY2spOwkJCQlcCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwkJCQkJCVwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCQlcCiB9CQkJCQkJCQkJXApAQCAtMTA3LDIzICsxMDksMjQ3IEBACiAgKiAgICAgICAgIF9fW3NwaW58cmVhZHx3cml0ZV1fbG9ja19pcnFzYXZlKCkKICAqICAgICAgICAgX19bc3BpbnxyZWFkfHdyaXRlXV9sb2NrX2JoKCkKICAqLwotQlVJTERfTE9DS19PUFMoc3Bpbiwgc3BpbmxvY2spOworQlVJTERfTE9DS19PUFMoc3BpbiwgcmF3X3NwaW5sb2NrKTsKIEJVSUxEX0xPQ0tfT1BTKHJlYWQsIHJ3bG9jayk7CiBCVUlMRF9MT0NLX09QUyh3cml0ZSwgcndsb2NrKTsKIAogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sKK2ludCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3Jhd19zcGluX3RyeWxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfc3Bpbl90cnlsb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JICitpbnQgX19sb2NrZnVuYyBfcmF3X3NwaW5fdHJ5bG9ja19iaChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gX19yYXdfc3Bpbl90cnlsb2NrX2JoKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fdHJ5bG9ja19iaCk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSwordm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fcmF3X3NwaW5fbG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19zcGluX2xvY2spOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRQordW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fcmF3X3NwaW5fbG9ja19pcnFzYXZlKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fbG9ja19pcnFzYXZlKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUQordm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrX2lycShyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd19zcGluX2xvY2tfaXJxKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fbG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkgKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fbG9ja19iaChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd19zcGluX2xvY2tfYmgobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfc3Bpbl9sb2NrX2JoKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fcmF3X3NwaW5fdW5sb2NrKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fdW5sb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRQordm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRCit2b2lkIF9fbG9ja2Z1bmMgX3Jhd19zcGluX3VubG9ja19pcnEocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJX19yYXdfc3Bpbl91bmxvY2tfaXJxKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fdW5sb2NrX2lycSk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JICit2b2lkIF9fbG9ja2Z1bmMgX3Jhd19zcGluX3VubG9ja19iaChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd19zcGluX3VubG9ja19iaChsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19zcGluX3VubG9ja19iaCk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSworaW50IF9fbG9ja2Z1bmMgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19yZWFkX3RyeWxvY2spOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd19yZWFkX2xvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfcmVhZF9sb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUKK3Vuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfcmF3X3JlYWRfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3Jhd19yZWFkX2xvY2tfaXJxc2F2ZShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19yZWFkX2xvY2tfaXJxc2F2ZSk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3JlYWRfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCit7CisJX19yYXdfcmVhZF9sb2NrX2lycShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19yZWFkX2xvY2tfaXJxKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JICit2b2lkIF9fbG9ja2Z1bmMgX3Jhd19yZWFkX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCit7CisJX19yYXdfcmVhZF9sb2NrX2JoKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3JlYWRfbG9ja19iaCk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLCit2b2lkIF9fbG9ja2Z1bmMgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19yZWFkX3VubG9jayk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3JlYWRfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19yYXdfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfcmVhZF91bmxvY2tfaXJxcmVzdG9yZSk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUQordm9pZCBfX2xvY2tmdW5jIF9yYXdfcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCV9fcmF3X3JlYWRfdW5sb2NrX2lycShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19yZWFkX3VubG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSAordm9pZCBfX2xvY2tmdW5jIF9yYXdfcmVhZF91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCit7CisJX19yYXdfcmVhZF91bmxvY2tfYmgobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfcmVhZF91bmxvY2tfYmgpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLCitpbnQgX19sb2NrZnVuYyBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fcmF3X3dyaXRlX3RyeWxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfdHJ5bG9jayk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCit7CisJX19yYXdfd3JpdGVfbG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd193cml0ZV9sb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFCit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3Jhd193cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fcmF3X3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd193cml0ZV9sb2NrX2lycXNhdmUpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUQordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCit7CisJX19yYXdfd3JpdGVfbG9ja19pcnEobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfbG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JICit2b2lkIF9fbG9ja2Z1bmMgX3Jhd193cml0ZV9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQoreworCV9fcmF3X3dyaXRlX2xvY2tfYmgobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfbG9ja19iaCk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSwordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfdW5sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCV9fcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd193cml0ZV91bmxvY2spOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRQordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19yYXdfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUQordm9pZCBfX2xvY2tmdW5jIF9yYXdfd3JpdGVfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd193cml0ZV91bmxvY2tfaXJxKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3dyaXRlX3VubG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkgKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3dyaXRlX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3Jhd193cml0ZV91bmxvY2tfYmgobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfdW5sb2NrX2JoKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fbG9ja19uZXN0ZWQocmF3X3NwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfc3Bpbl90cnlsb2NrLCBkb19yYXdfc3Bpbl9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19uZXN0ZWQpOworRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fbG9ja19uZXN0ZWQpOwogCi11bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnFzYXZlX25lc3RlZChzcGlubG9ja190ICpsb2NrLAordW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKHJhd19zcGlubG9ja190ICpsb2NrLAogCQkJCQkJICAgaW50IHN1YmNsYXNzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzEsMjQ3ICszNTcsMjMgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCBzdWJjbGFzcywgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEX0ZMQUdTKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jaywKLQkJCQlfcmF3X3NwaW5fbG9ja19mbGFncywgJmZsYWdzKTsKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBkb19yYXdfc3Bpbl90cnlsb2NrLCBkb19yYXdfc3Bpbl9sb2NrLAorCQkJCWRvX3Jhd19zcGluX2xvY2tfZmxhZ3MsICZmbGFncyk7CiAJcmV0dXJuIGZsYWdzOwogfQotRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKTsKK0VYUE9SVF9TWU1CT0woX3Jhd19zcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQpOwogCi12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19uZXN0X2xvY2soc3BpbmxvY2tfdCAqbG9jaywKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fbG9ja19uZXN0X2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2ssCiAJCQkJICAgICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm5lc3RfbG9jaykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcGluX2FjcXVpcmVfbmVzdCgmbG9jay0+ZGVwX21hcCwgMCwgMCwgbmVzdF9sb2NrLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfc3Bpbl90cnlsb2NrLCBkb19yYXdfc3Bpbl9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19uZXN0X2xvY2spOworRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fbG9ja19uZXN0X2xvY2spOwogCiAjZW5kaWYKIAotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSwotaW50IF9fbG9ja2Z1bmMgX3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQotewotCXJldHVybiBfX3NwaW5fdHJ5bG9jayhsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3NwaW5fdHJ5bG9jayk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSwotaW50IF9fbG9ja2Z1bmMgX3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX19yZWFkX3RyeWxvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX3RyeWxvY2spOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLCi1pbnQgX19sb2NrZnVuYyBfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX193cml0ZV90cnlsb2NrKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfd3JpdGVfdHJ5bG9jayk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfTE9DSwotdm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2socndsb2NrX3QgKmxvY2spCi17Ci0JX19yZWFkX2xvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2spOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRQotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9zcGluX2xvY2tfaXJxc2F2ZShzcGlubG9ja190ICpsb2NrKQotewotCXJldHVybiBfX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2lycXNhdmUpOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRCi12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlfX3NwaW5fbG9ja19pcnEobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfaXJxKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JICi12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19iaChzcGlubG9ja190ICpsb2NrKQotewotCV9fc3Bpbl9sb2NrX2JoKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2JoKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUKLXVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fcmVhZF9sb2NrX2lycXNhdmUobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2tfaXJxc2F2ZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3JlYWRfbG9ja19pcnEobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2tfaXJxKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JICi12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19iaChyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3JlYWRfbG9ja19iaChsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19iaCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRQotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19pcnFzYXZlKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCi17Ci0JX193cml0ZV9sb2NrX2lycShsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3dyaXRlX2xvY2tfaXJxKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSAotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQotewotCV9fd3JpdGVfbG9ja19iaChsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3dyaXRlX2xvY2tfYmgpOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0sKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JX19zcGluX2xvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9zcGluX2xvY2spOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLCi12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCi17Ci0JX193cml0ZV9sb2NrKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9jayk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLCi12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JX19zcGluX3VubG9jayhsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3NwaW5fdW5sb2NrKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLCi12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3dyaXRlX3VubG9jayhsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3dyaXRlX3VubG9jayk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLCi12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrKHJ3bG9ja190ICpsb2NrKQotewotCV9fcmVhZF91bmxvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX3VubG9jayk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCV9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9zcGluX3VubG9ja19pcnFyZXN0b3JlKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRCi12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQotewotCV9fc3Bpbl91bmxvY2tfaXJxKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfc3Bpbl91bmxvY2tfaXJxKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkgKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlfX3NwaW5fdW5sb2NrX2JoKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfc3Bpbl91bmxvY2tfYmgpOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFCi12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JX19yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUpOwotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQotewotCV9fcmVhZF91bmxvY2tfaXJxKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfcmVhZF91bmxvY2tfaXJxKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkgKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCi17Ci0JX19yZWFkX3VubG9ja19iaChsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3JlYWRfdW5sb2NrX2JoKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JX193cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3dyaXRlX3VubG9ja19pcnEobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF93cml0ZV91bmxvY2tfaXJxKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JICi12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3dyaXRlX3VubG9ja19iaChsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3dyaXRlX3VubG9ja19iaCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSAotaW50IF9fbG9ja2Z1bmMgX3NwaW5fdHJ5bG9ja19iaChzcGlubG9ja190ICpsb2NrKQotewotCXJldHVybiBfX3NwaW5fdHJ5bG9ja19iaChsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3NwaW5fdHJ5bG9ja19iaCk7Ci0jZW5kaWYKLQogbm90cmFjZSBpbnQgaW5fbG9ja19mdW5jdGlvbnModW5zaWduZWQgbG9uZyBhZGRyKQogewogCS8qIExpbmtlciBhZGRzIHRoZXNlOiBzdGFydCBhbmQgZW5kIG9mIF9fbG9ja2Z1bmMgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggNTg1ZDZjZC4uMjZhNmI3MyAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJaWYgKG5pY2V2YWwgPiAxOSkKIAkJbmljZXZhbCA9IDE5OwogCisJcmN1X3JlYWRfbG9jaygpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJc3dpdGNoICh3aGljaCkgewogCQljYXNlIFBSSU9fUFJPQ0VTUzoKQEAgLTE4OSwxNiArMTkwLDE3IEBACiAJCQkJICEodXNlciA9IGZpbmRfdXNlcih3aG8pKSkKIAkJCQlnb3RvIG91dF91bmxvY2s7CS8qIE5vIHByb2Nlc3NlcyBmb3IgdGhpcyB1c2VyICovCiAKLQkJCWRvX2VhY2hfdGhyZWFkKGcsIHApCisJCQlkb19lYWNoX3RocmVhZChnLCBwKSB7CiAJCQkJaWYgKF9fdGFza19jcmVkKHApLT51aWQgPT0gd2hvKQogCQkJCQllcnJvciA9IHNldF9vbmVfcHJpbyhwLCBuaWNldmFsLCBlcnJvcik7Ci0JCQl3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKwkJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAJCQlpZiAod2hvICE9IGNyZWQtPnVpZCkKIAkJCQlmcmVlX3VpZCh1c2VyKTsJCS8qIEZvciBmaW5kX3VzZXIoKSAqLwogCQkJYnJlYWs7CiAJfQogb3V0X3VubG9jazoKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjUyLDEzICsyNTQsMTMgQEAKIAkJCQkgISh1c2VyID0gZmluZF91c2VyKHdobykpKQogCQkJCWdvdG8gb3V0X3VubG9jazsJLyogTm8gcHJvY2Vzc2VzIGZvciB0aGlzIHVzZXIgKi8KIAotCQkJZG9fZWFjaF90aHJlYWQoZywgcCkKKwkJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJCQlpZiAoX190YXNrX2NyZWQocCktPnVpZCA9PSB3aG8pIHsKIAkJCQkJbmljZXZhbCA9IDIwIC0gdGFza19uaWNlKHApOwogCQkJCQlpZiAobmljZXZhbCA+IHJldHZhbCkKIAkJCQkJCXJldHZhbCA9IG5pY2V2YWw7CiAJCQkJfQotCQkJd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CisJCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCQkJaWYgKHdobyAhPSBjcmVkLT51aWQpCiAJCQkJZnJlZV91aWQodXNlcik7CQkvKiBmb3IgZmluZF91c2VyKCkgKi8KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDkzMjdhMjYuLjhhNjhiMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTI0NCw2ICsyNDQsMTAgQEAKIHN0YXRpYyBpbnQgbWF4X3NjaGVkX2dyYW51bGFyaXR5X25zID0gTlNFQ19QRVJfU0VDOwkvKiAxIHNlY29uZCAqLwogc3RhdGljIGludCBtaW5fd2FrZXVwX2dyYW51bGFyaXR5X25zOwkJCS8qIDAgdXNlY3MgKi8KIHN0YXRpYyBpbnQgbWF4X3dha2V1cF9ncmFudWxhcml0eV9ucyA9IE5TRUNfUEVSX1NFQzsJLyogMSBzZWNvbmQgKi8KK3N0YXRpYyBpbnQgbWluX3NjaGVkX3R1bmFibGVfc2NhbGluZyA9IFNDSEVEX1RVTkFCTEVTQ0FMSU5HX05PTkU7CitzdGF0aWMgaW50IG1heF9zY2hlZF90dW5hYmxlX3NjYWxpbmcgPSBTQ0hFRF9UVU5BQkxFU0NBTElOR19FTkQtMTsKK3N0YXRpYyBpbnQgbWluX3NjaGVkX3NoYXJlc19yYXRlbGltaXQgPSAxMDAwMDA7IC8qIDEwMCB1c2VjICovCitzdGF0aWMgaW50IG1heF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0ID0gTlNFQ19QRVJfU0VDOyAvKiAxIHNlY29uZCAqLwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGtlcm5fdGFibGVbXSA9IHsKQEAgLTI2MCw3ICsyNjQsNyBAQAogCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHNjaGVkX25yX2xhdGVuY3lfaGFuZGxlciwKKwkJLnByb2NfaGFuZGxlcgk9IHNjaGVkX3Byb2NfdXBkYXRlX2hhbmRsZXIsCiAJCS5leHRyYTEJCT0gJm1pbl9zY2hlZF9ncmFudWxhcml0eV9ucywKIAkJLmV4dHJhMgkJPSAmbWF4X3NjaGVkX2dyYW51bGFyaXR5X25zLAogCX0sCkBAIC0yNjksNyArMjczLDcgQEAKIAkJLmRhdGEJCT0gJnN5c2N0bF9zY2hlZF9sYXRlbmN5LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gc2NoZWRfbnJfbGF0ZW5jeV9oYW5kbGVyLAorCQkucHJvY19oYW5kbGVyCT0gc2NoZWRfcHJvY191cGRhdGVfaGFuZGxlciwKIAkJLmV4dHJhMQkJPSAmbWluX3NjaGVkX2dyYW51bGFyaXR5X25zLAogCQkuZXh0cmEyCQk9ICZtYXhfc2NoZWRfZ3JhbnVsYXJpdHlfbnMsCiAJfSwKQEAgLTI3OCw3ICsyODIsNyBAQAogCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkucHJvY19oYW5kbGVyCT0gc2NoZWRfcHJvY191cGRhdGVfaGFuZGxlciwKIAkJLmV4dHJhMQkJPSAmbWluX3dha2V1cF9ncmFudWxhcml0eV9ucywKIAkJLmV4dHJhMgkJPSAmbWF4X3dha2V1cF9ncmFudWxhcml0eV9ucywKIAl9LApAQCAtMjg3LDcgKzI5MSwxOCBAQAogCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX3NoYXJlc19yYXRlbGltaXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gc2NoZWRfcHJvY191cGRhdGVfaGFuZGxlciwKKwkJLmV4dHJhMQkJPSAmbWluX3NjaGVkX3NoYXJlc19yYXRlbGltaXQsCisJCS5leHRyYTIJCT0gJm1heF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0LAorCX0sCisJeworCQkucHJvY25hbWUJPSAic2NoZWRfdHVuYWJsZV9zY2FsaW5nIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9zY2hlZF90dW5hYmxlX3NjYWxpbmcsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGVudW0gc2NoZWRfdHVuYWJsZV9zY2FsaW5nKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHNjaGVkX3Byb2NfdXBkYXRlX2hhbmRsZXIsCisJCS5leHRyYTEJCT0gJm1pbl9zY2hlZF90dW5hYmxlX3NjYWxpbmcsCisJCS5leHRyYTIJCT0gJm1heF9zY2hlZF90dW5hYmxlX3NjYWxpbmcsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJzY2hlZF9zaGFyZXNfdGhyZXNoIiwKQEAgLTI5OCwxMyArMzEzLDYgQEAKIAkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogCXsKLQkJLnByb2NuYW1lCT0gInNjaGVkX2ZlYXR1cmVzIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9zY2hlZF9mZWF0dXJlcywKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCi0JfSwKLQl7CiAJCS5wcm9jbmFtZQk9ICJzY2hlZF9taWdyYXRpb25fY29zdCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0xMDQzLDcgKzEwNTEsNyBAQAogCQkuZXh0cmEyCQk9ICZvbmVfaHVuZHJlZCwKIAl9LAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLQkgeworCXsKIAkJLnByb2NuYW1lCT0gIm5yX2h1Z2VwYWdlcyIsCiAJCS5kYXRhCQk9IE5VTEwsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLApAQCAtMTA1MSw3ICsxMDU5LDE4IEBACiAJCS5wcm9jX2hhbmRsZXIJPSBodWdldGxiX3N5c2N0bF9oYW5kbGVyLAogCQkuZXh0cmExCQk9ICh2b2lkICopJmh1Z2V0bGJfemVybywKIAkJLmV4dHJhMgkJPSAodm9pZCAqKSZodWdldGxiX2luZmluaXR5LAotCSB9LAorCX0sCisjaWZkZWYgQ09ORklHX05VTUEKKwl7CisJCS5wcm9jbmFtZSAgICAgICA9ICJucl9odWdlcGFnZXNfbWVtcG9saWN5IiwKKwkJLmRhdGEgICAgICAgICAgID0gTlVMTCwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmaHVnZXRsYl9tZW1wb2xpY3lfc3lzY3RsX2hhbmRsZXIsCisJCS5leHRyYTEJCT0gKHZvaWQgKikmaHVnZXRsYl96ZXJvLAorCQkuZXh0cmEyCQk9ICh2b2lkICopJmh1Z2V0bGJfaW5maW5pdHksCisJfSwKKyNlbmRpZgogCSB7CiAJCS5wcm9jbmFtZQk9ICJodWdldGxiX3NobV9ncm91cCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfaHVnZXRsYl9zaG1fZ3JvdXAsCkBAIC0xMTEyLDcgKzExMzEsOCBAQAogCQkuZGF0YQkJPSAmc3lzY3RsX21heF9tYXBfY291bnQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9tYXhfbWFwX2NvdW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAogCX0sCiAjZWxzZQogCXsKQEAgLTExOTQsNiArMTIxNCw3IEBACiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19NTVUKIAl7CiAJCS5wcm9jbmFtZQk9ICJtbWFwX21pbl9hZGRyIiwKIAkJLmRhdGEJCT0gJmRhY19tbWFwX21pbl9hZGRyLApAQCAtMTIwMSw2ICsxMjIyLDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IG1tYXBfbWluX2FkZHJfaGFuZGxlciwKIAl9LAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX05VTUEKIAl7CiAJCS5wcm9jbmFtZQk9ICJudW1hX3pvbmVsaXN0X29yZGVyIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMgYi9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCmluZGV4IGI3NWRiZjQuLjExMjUzM2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKKysrIGIva2VybmVsL3N5c2N0bF9iaW5hcnkuYwpAQCAtMTM5OSw2ICsxMzk5LDEzIEBACiB7CiAJaW50IGk7CiAKKwkvKgorCSAqIENUTF9LRVJOL0tFUk5fVkVSU0lPTiBpcyB1c2VkIGJ5IG9sZGVyIGdsaWJjIGFuZCBjYW5ub3QKKwkgKiBldmVyIGdvIGF3YXkuCisJICovCisJaWYgKG5hbWVbMF0gPT0gQ1RMX0tFUk4gJiYgbmFtZVsxXSA9PSBLRVJOX1ZFUlNJT04pCisJCXJldHVybjsKKwogCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkJIndhcm5pbmc6IHByb2Nlc3MgYCVzJyB1c2VkIHRoZSBkZXByZWNhdGVkIHN5c2N0bCAiCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS5jIGIva2VybmVsL3RpbWUuYwppbmRleCBjNjMyNGQ5Li44MDQ3OTgwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS5jCisrKyBiL2tlcm5lbC90aW1lLmMKQEAgLTEzNiw2ICsxMzYsNyBAQAogCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAl3YWxsX3RvX21vbm90b25pYy50dl9zZWMgLT0gc3lzX3R6LnR6X21pbnV0ZXN3ZXN0ICogNjA7CiAJeHRpbWUudHZfc2VjICs9IHN5c190ei50el9taW51dGVzd2VzdCAqIDYwOworCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAljbG9ja193YXNfc2V0KCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwppbmRleCAyMGE4OTIwLi42Zjc0MGQ5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTMwLDcgKzMwLDcgQEAKIHN0YXRpYyBSQVdfTk9USUZJRVJfSEVBRChjbG9ja2V2ZW50c19jaGFpbik7CiAKIC8qIFByb3RlY3Rpb24gZm9yIHRoZSBhYm92ZSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja2V2ZW50c19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGNsb2NrZXZlbnRzX2xvY2spOwogCiAvKioKICAqIGNsb2NrZXZlbnRzX2RlbHRhMm5zIC0gQ29udmVydCBhIGxhdGNoIHZhbHVlIChkZXZpY2UgdGlja3MpIHRvIG5hbm9zZWNvbmRzCkBAIC0xNDEsOSArMTQxLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOwogCXJldCA9IHJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY2xvY2tldmVudHNfY2hhaW4sIG5iKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZXZlbnRzX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODUsMTMgKzE4NSwxMyBAQAogCUJVR19PTihkZXYtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEKTsKIAlCVUdfT04oIWRldi0+Y3B1bWFzayk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmNsb2NrZXZlbnRfZGV2aWNlcyk7CiAJY2xvY2tldmVudHNfZG9fbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQURELCBkZXYpOwogCWNsb2NrZXZlbnRzX25vdGlmeV9yZWxlYXNlZCgpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UpOwogCkBAIC0yMzgsMTAgKzIzOCwxMSBAQAogICovCiB2b2lkIGNsb2NrZXZlbnRzX25vdGlmeSh1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICp0bXA7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNwdTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CiAJY2xvY2tldmVudHNfZG9fbm90aWZ5KHJlYXNvbiwgYXJnKTsKIAogCXN3aXRjaCAocmVhc29uKSB7CkBAIC0yNTAsMTMgKzI1MSwyNCBAQAogCQkgKiBVbnJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBkZXZpY2VzIHdoaWNoIHdlcmUKIAkJICogcmVsZWFzZWQgZnJvbSB0aGUgdXNlcnMgaW4gdGhlIG5vdGlmeSBjaGFpbi4KIAkJICovCi0JCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCB0bXAsICZjbG9ja2V2ZW50c19yZWxlYXNlZCkKLQkJCWxpc3RfZGVsKG5vZGUpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZjbG9ja2V2ZW50c19yZWxlYXNlZCwgbGlzdCkKKwkJCWxpc3RfZGVsKCZkZXYtPmxpc3QpOworCQkvKgorCQkgKiBOb3cgY2hlY2sgd2hldGhlciB0aGUgQ1BVIGhhcyBsZWZ0IHVudXNlZCBwZXIgY3B1IGRldmljZXMKKwkJICovCisJCWNwdSA9ICooKGludCAqKWFyZyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgJmNsb2NrZXZlbnRfZGV2aWNlcywgbGlzdCkgeworCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXYtPmNwdW1hc2spICYmCisJCQkgICAgY3B1bWFza193ZWlnaHQoZGV2LT5jcHVtYXNrKSA9PSAxKSB7CisJCQkJQlVHX09OKGRldi0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOworCQkJCWxpc3RfZGVsKCZkZXYtPmxpc3QpOworCQkJfQorCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZXZlbnRzX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsb2NrZXZlbnRzX25vdGlmeSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCmluZGV4IGMyZWMyNTAuLmIzYmFmZDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwpAQCAtMzEsNyArMzEsNyBAQAogLyogRklYTUU6IFVzZSBjcHVtYXNrX3Zhcl90LiAqLwogc3RhdGljIERFQ0xBUkVfQklUTUFQKHRpY2tfYnJvYWRjYXN0X21hc2ssIE5SX0NQVVMpOwogc3RhdGljIERFQ0xBUkVfQklUTUFQKHRtcG1hc2ssIE5SX0NQVVMpOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0aWNrX2Jyb2FkY2FzdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRpY2tfYnJvYWRjYXN0X2xvY2spOwogc3RhdGljIGludCB0aWNrX2Jyb2FkY2FzdF9mb3JjZTsKIAogI2lmZGVmIENPTkZJR19USUNLX09ORVNIT1QKQEAgLTk2LDcgKzk2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogRGV2aWNlcyBtaWdodCBiZSByZWdpc3RlcmVkIHdpdGggYm90aCBwZXJpb2RpYyBhbmQgb25lc2hvdApAQCAtMTIyLDcgKzEyMiw3IEBACiAJCQl0aWNrX2Jyb2FkY2FzdF9jbGVhcl9vbmVzaG90KGNwdSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTYxLDEzICsxNjEsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgdGlja19kb19wZXJpb2RpY19icm9hZGNhc3Qodm9pZCkKIHsKLQlzcGluX2xvY2soJnRpY2tfYnJvYWRjYXN0X2xvY2spOworCXJhd19zcGluX2xvY2soJnRpY2tfYnJvYWRjYXN0X2xvY2spOwogCiAJY3B1bWFza19hbmQodG9fY3B1bWFzayh0bXBtYXNrKSwKIAkJICAgIGNwdV9vbmxpbmVfbWFzaywgdGlja19nZXRfYnJvYWRjYXN0X21hc2soKSk7CiAJdGlja19kb19icm9hZGNhc3QodG9fY3B1bWFzayh0bXBtYXNrKSk7CiAKLQlzcGluX3VubG9jaygmdGlja19icm9hZGNhc3RfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrKTsKIH0KIAogLyoKQEAgLTIxMiw3ICsyMTIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdSwgYmNfc3RvcHBlZDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdGQgPSAmcGVyX2NwdSh0aWNrX2NwdV9kZXZpY2UsIGNwdSk7CkBAIC0yNjMsNyArMjYzLDcgQEAKIAkJCXRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3QoYmMpOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTI5OSw3ICsyOTksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNwdSA9ICpjcHVwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIAogCWJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRpY2tfZ2V0X2Jyb2FkY2FzdF9tYXNrKCkpOwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQljbG9ja2V2ZW50c19zaHV0ZG93bihiYyk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgdGlja19zdXNwZW5kX2Jyb2FkY2FzdCh2b2lkKQpAQCAtMzE3LDEzICszMTcsMTMgQEAKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIAogCWJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKIAlpZiAoYmMpCiAJCWNsb2NrZXZlbnRzX3NodXRkb3duKGJjKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgdGlja19yZXN1bWVfYnJvYWRjYXN0KHZvaWQpCkBAIC0zMzIsNyArMzMyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBicm9hZGNhc3QgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIAogCWJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKIApAQCAtMzUxLDcgKzM1MSw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBicm9hZGNhc3Q7CiB9CkBAIC00MDUsNyArNDA1LDcgQEAKIAlrdGltZV90IG5vdywgbmV4dF9ldmVudDsKIAlpbnQgY3B1OwogCi0Jc3Bpbl9sb2NrKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrKTsKIGFnYWluOgogCWRldi0+bmV4dF9ldmVudC50djY0ID0gS1RJTUVfTUFYOwogCW5leHRfZXZlbnQudHY2NCA9IEtUSU1FX01BWDsKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQlpZiAodGlja19icm9hZGNhc3Rfc2V0X2V2ZW50KG5leHRfZXZlbnQsIDApKQogCQkJZ290byBhZ2FpbjsKIAl9Ci0Jc3Bpbl91bmxvY2soJnRpY2tfYnJvYWRjYXN0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmdGlja19icm9hZGNhc3RfbG9jayk7CiB9CiAKIC8qCkBAIC00NTcsNyArNDU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBQZXJpb2RpYyBtb2RlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVudGVyL2V4aXQgb2YgcG93ZXIKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCX0KIAogb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNTYzLDEzICs1NjMsMTMgQEAKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIAogCXRpY2tfYnJvYWRjYXN0X2RldmljZS5tb2RlID0gVElDS0RFVl9NT0RFX09ORVNIT1Q7CiAJYmMgPSB0aWNrX2Jyb2FkY2FzdF9kZXZpY2UuZXZ0ZGV2OwogCWlmIChiYykKIAkJdGlja19icm9hZGNhc3Rfc2V0dXBfb25lc2hvdChiYyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtNTgxLDcgKzU4MSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKmNwdXA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBDbGVhciB0aGUgYnJvYWRjYXN0IG1hc2sgZmxhZyBmb3IgdGhlIGRlYWQgY3B1LCBidXQgZG8gbm90CkBAIC01ODksNyArNTg5LDcgQEAKIAkgKi8KIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRpY2tfZ2V0X2Jyb2FkY2FzdF9vbmVzaG90X21hc2soKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCmluZGV4IDgzYzQ0MTcuLmI2Yjg5OGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1jb21tb24uYwpAQCAtMzQsNyArMzQsNyBAQAoga3RpbWVfdCB0aWNrX25leHRfcGVyaW9kOwoga3RpbWVfdCB0aWNrX3BlcmlvZDsKIGludCB0aWNrX2RvX3RpbWVyX2NwdSBfX3JlYWRfbW9zdGx5ID0gVElDS19ET19USU1FUl9CT09UOwotREVGSU5FX1NQSU5MT0NLKHRpY2tfZGV2aWNlX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sodGlja19kZXZpY2VfbG9jayk7CiAKIC8qCiAgKiBEZWJ1Z2dpbmc6IHNlZSB0aW1lcl9saXN0LmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCWludCBjcHUsIHJldCA9IE5PVElGWV9PSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBuZXdkZXYtPmNwdW1hc2spKQpAQCAtMjY4LDcgKzI2OCw3IEBACiAJaWYgKG5ld2Rldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKQogCQl0aWNrX29uZXNob3Rfbm90aWZ5KCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gTk9USUZZX1NUT1A7CiAKIG91dF9iYzoKQEAgLTI3OCw3ICsyNzgsNyBAQAogCWlmICh0aWNrX2NoZWNrX2Jyb2FkY2FzdF9kZXZpY2UobmV3ZGV2KSkKIAkJcmV0ID0gTk9USUZZX1NUT1A7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMTEsNyArMzExLDcgQEAKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSB0ZC0+ZXZ0ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCXRkLT5tb2RlID0gVElDS0RFVl9NT0RFX1BFUklPRElDOwogCWlmIChkZXYpIHsKIAkJLyoKQEAgLTMyMiw3ICszMjIsNyBAQAogCQljbG9ja2V2ZW50c19leGNoYW5nZV9kZXZpY2UoZGV2LCBOVUxMKTsKIAkJdGQtPmV2dGRldiA9IE5VTEw7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB0aWNrX3N1c3BlbmQodm9pZCkKQEAgLTMzMCw5ICszMzAsOSBAQAogCXN0cnVjdCB0aWNrX2RldmljZSAqdGQgPSAmX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9kZXZpY2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCWNsb2NrZXZlbnRzX3NodXRkb3duKHRkLT5ldnRkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB0aWNrX3Jlc3VtZSh2b2lkKQpAQCAtMzQxLDcgKzM0MSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYnJvYWRjYXN0ID0gdGlja19yZXN1bWVfYnJvYWRjYXN0KCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCWNsb2NrZXZlbnRzX3NldF9tb2RlKHRkLT5ldnRkZXYsIENMT0NLX0VWVF9NT0RFX1JFU1VNRSk7CiAKIAlpZiAoIWJyb2FkY2FzdCkgewpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCWVsc2UKIAkJCXRpY2tfcmVzdW1lX29uZXNob3QoKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2RldmljZV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmggYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKaW5kZXggYjFjMDViZi4uMjkwZWVmYiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCisrKyBiL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaApAQCAtNiw3ICs2LDYgQEAKICNkZWZpbmUgVElDS19ET19USU1FUl9CT09UCS0yCiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdGlja19kZXZpY2UsIHRpY2tfY3B1X2RldmljZSk7Ci1leHRlcm4gc3BpbmxvY2tfdCB0aWNrX2RldmljZV9sb2NrOwogZXh0ZXJuIGt0aW1lX3QgdGlja19uZXh0X3BlcmlvZDsKIGV4dGVybiBrdGltZV90IHRpY2tfcGVyaW9kOwogZXh0ZXJuIGludCB0aWNrX2RvX3RpbWVyX2NwdSBfX3JlYWRfbW9zdGx5OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYyBiL2tlcm5lbC90aW1lL3RpbWVjb21wYXJlLmMKaW5kZXggOTZmZjY0My4uMTJmNWM1NSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYworKysgYi9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jCkBAIC04OSw3ICs4OSw3IEBACiAJCQkgKiBzb3VyY2UgdGltZQogCQkJICovCiAJCQlzYW1wbGUub2Zmc2V0ID0KLQkJCQlrdGltZV90b19ucyhrdGltZV9hZGQoZW5kLCBzdGFydCkpIC8gMiAtCisJCQkJKGt0aW1lX3RvX25zKGVuZCkgKyBrdGltZV90b19ucyhzdGFydCkpIC8gMiAtCiAJCQkJdHM7CiAKIAkJCS8qIHNpbXBsZSBpbnNlcnRpb24gc29ydCBiYXNlZCBvbiBkdXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggYWY0MTM1Zi4uN2ZhYWEzMiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0xNjUsNiArMTY1LDEzIEBACiAvKiBmbGFnIGZvciBpZiB0aW1la2VlcGluZyBpcyBzdXNwZW5kZWQgKi8KIGludCBfX3JlYWRfbW9zdGx5IHRpbWVrZWVwaW5nX3N1c3BlbmRlZDsKIAorc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB4dGltZV9jYWNoZSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7Cit2b2lkIHVwZGF0ZV94dGltZV9jYWNoZSh1NjQgbnNlYykKK3sKKwl4dGltZV9jYWNoZSA9IHh0aW1lOworCXRpbWVzcGVjX2FkZF9ucygmeHRpbWVfY2FjaGUsIG5zZWMpOworfQorCiAvKiBtdXN0IGhvbGQgeHRpbWVfbG9jayAqLwogdm9pZCB0aW1la2VlcGluZ19sZWFwX2luc2VydChpbnQgbGVhcHNlY29uZCkKIHsKQEAgLTMyNSw2ICszMzIsOCBAQAogCiAJeHRpbWUgPSAqdHY7CiAKKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CisKIAl0aW1la2VlcGVyLm50cF9lcnJvciA9IDA7CiAJbnRwX2NsZWFyKCk7CiAKQEAgLTU1MCw2ICs1NTksNyBAQAogCX0KIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJCQkJLWJvb3QudHZfc2VjLCAtYm9vdC50dl9uc2VjKTsKKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJdG90YWxfc2xlZXBfdGltZS50dl9zZWMgPSAwOwogCXRvdGFsX3NsZWVwX3RpbWUudHZfbnNlYyA9IDA7CiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKQEAgLTU4Myw2ICs1OTMsNyBAQAogCQl3YWxsX3RvX21vbm90b25pYyA9IHRpbWVzcGVjX3N1Yih3YWxsX3RvX21vbm90b25pYywgdHMpOwogCQl0b3RhbF9zbGVlcF90aW1lID0gdGltZXNwZWNfYWRkX3NhZmUodG90YWxfc2xlZXBfdGltZSwgdHMpOwogCX0KKwl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLwogCXRpbWVrZWVwZXIuY2xvY2stPmN5Y2xlX2xhc3QgPSB0aW1la2VlcGVyLmNsb2NrLT5yZWFkKHRpbWVrZWVwZXIuY2xvY2spOwogCXRpbWVrZWVwZXIubnRwX2Vycm9yID0gMDsKQEAgLTcyMiw2ICs3MzMsNyBAQAogCQkJCXRpbWVrZWVwZXIubnRwX2Vycm9yX3NoaWZ0OwogfQogCisKIC8qKgogICogbG9nYXJpdGhtaWNfYWNjdW11bGF0aW9uIC0gc2hpZnRlZCBhY2N1bXVsYXRpb24gb2YgY3ljbGVzCiAgKgpAQCAtNzY1LDYgKzc3Nyw3IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAorCiAvKioKICAqIHVwZGF0ZV93YWxsX3RpbWUgLSBVc2VzIHRoZSBjdXJyZW50IGNsb2Nrc291cmNlIHRvIGluY3JlbWVudCB0aGUgd2FsbCB0aW1lCiAgKgpAQCAtNzc0LDYgKzc4Nyw3IEBACiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpjbG9jazsKIAljeWNsZV90IG9mZnNldDsKKwl1NjQgbnNlY3M7CiAJaW50IHNoaWZ0ID0gMCwgbWF4c2hpZnQ7CiAKIAkvKiBNYWtlIHN1cmUgd2UncmUgZnVsbHkgcmVzdW1lZDogKi8KQEAgLTgzOSw2ICs4NTMsOSBAQAogCXRpbWVrZWVwZXIubnRwX2Vycm9yICs9CXRpbWVrZWVwZXIueHRpbWVfbnNlYyA8PAogCQkJCXRpbWVrZWVwZXIubnRwX2Vycm9yX3NoaWZ0OwogCisJbnNlY3MgPSBjbG9ja3NvdXJjZV9jeWMybnMob2Zmc2V0LCB0aW1la2VlcGVyLm11bHQsIHRpbWVrZWVwZXIuc2hpZnQpOworCXVwZGF0ZV94dGltZV9jYWNoZShuc2Vjcyk7CisKIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBuZXcgY2xvY2tzb3VyY2UgdG8gdXNlICovCiAJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgdGltZWtlZXBlci5jbG9jaywgdGltZWtlZXBlci5tdWx0KTsKIH0KQEAgLTg3NSwxMyArODkyLDEzIEBACiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3NlY29uZHModm9pZCkKIHsKLQlyZXR1cm4geHRpbWUudHZfc2VjOworCXJldHVybiB4dGltZV9jYWNoZS50dl9zZWM7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF9zZWNvbmRzKTsKIAogc3RydWN0IHRpbWVzcGVjIF9fY3VycmVudF9rZXJuZWxfdGltZSh2b2lkKQogewotCXJldHVybiB4dGltZTsKKwlyZXR1cm4geHRpbWVfY2FjaGU7CiB9CiAKIHN0cnVjdCB0aW1lc3BlYyBjdXJyZW50X2tlcm5lbF90aW1lKHZvaWQpCkBAIC04OTEsNyArOTA4LDggQEAKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7Ci0JCW5vdyA9IHh0aW1lOworCisJCW5vdyA9IHh0aW1lX2NhY2hlOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCiAJcmV0dXJuIG5vdzsKQEAgLTkwNSw3ICs5MjMsOCBAQAogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJbm93ID0geHRpbWU7CisKKwkJbm93ID0geHRpbWVfY2FjaGU7CiAJCW1vbm8gPSB3YWxsX3RvX21vbm90b25pYzsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IDY2NWM3NmUuLmJkZmI4ZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAogbmV4dF9vbmU6CiAJaSA9IDA7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgZmxhZ3MpOwogCiAJY3VyciA9IGJhc2UtPmZpcnN0OwogCS8qCkBAIC0xMDAsMTMgKzEwMCwxMyBAQAogCiAJCXRpbWVyID0gcmJfZW50cnkoY3Vyciwgc3RydWN0IGhydGltZXIsIG5vZGUpOwogCQl0bXAgPSAqdGltZXI7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgZmxhZ3MpOwogCiAJCXByaW50X3RpbWVyKG0sIHRpbWVyLCAmdG1wLCBpLCBub3cpOwogCQluZXh0Kys7CiAJCWdvdG8gbmV4dF9vbmU7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNTAsNiArMTUwLDkgQEAKIAlQX25zKGV4cGlyZXNfbmV4dCk7CiAJUChocmVzX2FjdGl2ZSk7CiAJUChucl9ldmVudHMpOworCVAobnJfcmV0cmllcyk7CisJUChucl9oYW5ncyk7CisJUF9ucyhtYXhfaGFuZ190aW1lKTsKICNlbmRpZgogI3VuZGVmIFAKICN1bmRlZiBQX25zCkBAIC0yMzQsMTAgKzIzNywxMCBAQAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAogCXByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfYnJvYWRjYXN0X2RldmljZSgpLCAtMSk7CiAJU0VRX3ByaW50ZihtLCAidGlja19icm9hZGNhc3RfbWFzazogJTA4bHhcbiIsCi0JCSAgIHRpY2tfZ2V0X2Jyb2FkY2FzdF9tYXNrKCktPmJpdHNbMF0pOworCQkgICBjcHVtYXNrX2JpdHModGlja19nZXRfYnJvYWRjYXN0X21hc2soKSlbMF0pOwogI2lmZGVmIENPTkZJR19USUNLX09ORVNIT1QKIAlTRVFfcHJpbnRmKG0sICJ0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2s6ICUwOGx4XG4iLAotCQkgICB0aWNrX2dldF9icm9hZGNhc3Rfb25lc2hvdF9tYXNrKCktPmJpdHNbMF0pOworCQkgICBjcHVtYXNrX2JpdHModGlja19nZXRfYnJvYWRjYXN0X29uZXNob3RfbWFzaygpKVswXSk7CiAjZW5kaWYKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwogI2VuZGlmCkBAIC0yNTQsNyArMjU3LDcgQEAKIAl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCWludCBjcHU7CiAKLQlTRVFfcHJpbnRmKG0sICJUaW1lciBMaXN0IFZlcnNpb246IHYwLjRcbiIpOworCVNFUV9wcmludGYobSwgIlRpbWVyIExpc3QgVmVyc2lvbjogdjAuNVxuIik7CiAJU0VRX3ByaW50ZihtLCAiSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM6ICVkXG4iLCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUyk7CiAJU0VRX3ByaW50ZihtLCAibm93IGF0ICVMZCBuc2Vjc1xuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylub3cpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jIGIva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYwppbmRleCBlZTU2ODFmLi4yZjNiNTg1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKQEAgLTg2LDcgKzg2LDcgQEAKIC8qCiAgKiBQZXItQ1BVIGxvb2t1cCBsb2NrcyBmb3IgZmFzdCBoYXNoIGxvb2t1cDoKICAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHNwaW5sb2NrX3QsIGxvb2t1cF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgdHN0YXRzX2xvb2t1cF9sb2NrKTsKIAogLyoKICAqIE11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBjaGFuZ2VzIHdpdGggc2hvdy1zdGF0cyBhY3Rpdml0aWVzOgpAQCAtMjM4LDE0ICsyMzgsMTQgQEAKIAkvKgogCSAqIEl0IGRvZXNudCBtYXR0ZXIgd2hpY2ggbG9jayB3ZSB0YWtlOgogCSAqLwotCXNwaW5sb2NrX3QgKmxvY2s7CisJcmF3X3NwaW5sb2NrX3QgKmxvY2s7CiAJc3RydWN0IGVudHJ5ICplbnRyeSwgaW5wdXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChsaWtlbHkoIXRpbWVyX3N0YXRzX2FjdGl2ZSkpCiAJCXJldHVybjsKIAotCWxvY2sgPSAmcGVyX2NwdShsb29rdXBfbG9jaywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJbG9jayA9ICZwZXJfY3B1KHRzdGF0c19sb29rdXBfbG9jaywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlpbnB1dC50aW1lciA9IHRpbWVyOwogCWlucHV0LnN0YXJ0X2Z1bmMgPSBzdGFydGY7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAlpbnB1dC5waWQgPSBwaWQ7CiAJaW5wdXQudGltZXJfZmxhZyA9IHRpbWVyX2ZsYWc7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKIAlpZiAoIXRpbWVyX3N0YXRzX2FjdGl2ZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJYXRvbWljX2luYygmb3ZlcmZsb3dfY291bnQpOwogCiAgb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X25hbWVfb2Zmc2V0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtMzQ4LDkgKzM0OCwxMSBAQAogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGVyX2NwdShsb29rdXBfbG9jaywgY3B1KSwgZmxhZ3MpOworCQlyYXdfc3BpbmxvY2tfdCAqbG9jayA9ICZwZXJfY3B1KHRzdGF0c19sb29rdXBfbG9jaywgY3B1KTsKKworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwogCQkvKiBub3RoaW5nICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBlcl9jcHUobG9va3VwX2xvY2ssIGNwdSksIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNDA4LDcgKzQxMCw3IEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXNwaW5fbG9ja19pbml0KCZwZXJfY3B1KGxvb2t1cF9sb2NrLCBjcHUpKTsKKwkJcmF3X3NwaW5fbG9ja19pbml0KCZwZXJfY3B1KHRzdGF0c19sb29rdXBfbG9jaywgY3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfdHN0YXRzX3Byb2Nmcyh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA1ZGI1YThkLi4xNTUzM2I3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNjU2LDggKzY1Niw2IEBACiAKIAlkZWJ1Z19hY3RpdmF0ZSh0aW1lciwgZXhwaXJlcyk7CiAKLQluZXdfYmFzZSA9IF9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7Ci0KIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgZGVmaW5lZChDT05GSUdfU01QKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IGU1MWExYmMuLjc5Njg3NjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTE3MjQsNyArMTcyNCw3IEBACiAJcmV0dXJuIGZ0cmFjZV9tYXRjaChzdHIsIHJlZ2V4LCBsZW4sIHR5cGUpOwogfQogCi1zdGF0aWMgdm9pZCBmdHJhY2VfbWF0Y2hfcmVjb3JkcyhjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBmdHJhY2VfbWF0Y2hfcmVjb3JkcyhjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQogewogCXVuc2lnbmVkIGludCBzZWFyY2hfbGVuOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CkBAIC0xNzMzLDYgKzE3MzMsNyBAQAogCWNoYXIgKnNlYXJjaDsKIAlpbnQgdHlwZTsKIAlpbnQgbm90OworCWludCBmb3VuZCA9IDA7CiAKIAlmbGFnID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOwogCXR5cGUgPSBmaWx0ZXJfcGFyc2VfcmVnZXgoYnVmZiwgbGVuLCAmc2VhcmNoLCAmbm90KTsKQEAgLTE3NTAsNiArMTc1MSw3IEBACiAJCQkJcmVjLT5mbGFncyAmPSB+ZmxhZzsKIAkJCWVsc2UKIAkJCQlyZWMtPmZsYWdzIHw9IGZsYWc7CisJCQlmb3VuZCA9IDE7CiAJCX0KIAkJLyoKIAkJICogT25seSBlbmFibGUgZmlsdGVyaW5nIGlmIHdlIGhhdmUgYSBmdW5jdGlvbiB0aGF0CkBAIC0xNzU5LDYgKzE3NjEsOCBAQAogCQkJZnRyYWNlX2ZpbHRlcmVkID0gMTsKIAl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKworCXJldHVybiBmb3VuZDsKIH0KIAogc3RhdGljIGludApAQCAtMTc4MCw3ICsxNzg0LDcgQEAKIAkJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkcyhjaGFyICpidWZmLCBjaGFyICptb2QsIGludCBlbmFibGUpCitzdGF0aWMgaW50IGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkcyhjaGFyICpidWZmLCBjaGFyICptb2QsIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgc2VhcmNoX2xlbiA9IDA7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKQEAgLTE3ODksNiArMTc5Myw3IEBACiAJY2hhciAqc2VhcmNoID0gYnVmZjsKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAJaW50IG5vdCA9IDA7CisJaW50IGZvdW5kID0gMDsKIAogCWZsYWcgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7CiAKQEAgLTE4MTksMTIgKzE4MjQsMTUgQEAKIAkJCQlyZWMtPmZsYWdzICY9IH5mbGFnOwogCQkJZWxzZQogCQkJCXJlYy0+ZmxhZ3MgfD0gZmxhZzsKKwkJCWZvdW5kID0gMTsKIAkJfQogCQlpZiAoZW5hYmxlICYmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpCiAJCQlmdHJhY2VfZmlsdGVyZWQgPSAxOwogCiAJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIC8qCkBAIC0xODUzLDggKzE4NjEsOSBAQAogCWlmICghc3RybGVuKG1vZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGZ1bmMsIG1vZCwgZW5hYmxlKTsKLQlyZXR1cm4gMDsKKwlpZiAoZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGZ1bmMsIG1vZCwgZW5hYmxlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCBmdHJhY2VfbW9kX2NtZCA9IHsKQEAgLTIxNTEsOCArMjE2MCw5IEBACiAJZnVuYyA9IHN0cnNlcCgmbmV4dCwgIjoiKTsKIAogCWlmICghbmV4dCkgewotCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhmdW5jLCBsZW4sIGVuYWJsZSk7Ci0JCXJldHVybiAwOworCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZHMoZnVuYywgbGVuLCBlbmFibGUpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogY29tbWFuZCBmb3VuZCAqLwpAQCAtMjE5OCwxMCArMjIwOCw5IEBACiAJICAgICF0cmFjZV9wYXJzZXJfY29udChwYXJzZXIpKSB7CiAJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KHBhcnNlci0+YnVmZmVyLAogCQkJCQkgICBwYXJzZXItPmlkeCwgZW5hYmxlKTsKKwkJdHJhY2VfcGFyc2VyX2NsZWFyKHBhcnNlcik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkJdHJhY2VfcGFyc2VyX2NsZWFyKHBhcnNlcik7CiAJfQogCiAJcmV0ID0gcmVhZDsKQEAgLTI1NDMsMTAgKzI1NTIsOSBAQAogCQkJCQlleGlzdHMgPSB0cnVlOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQlpZiAoIWV4aXN0cykgeworCQkJaWYgKCFleGlzdHMpCiAJCQkJYXJyYXlbKCppZHgpKytdID0gcmVjLT5pcDsKLQkJCQlmb3VuZCA9IDE7Ci0JCQl9CisJCQlmb3VuZCA9IDE7CiAJCX0KIAl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jIGIva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jCmluZGV4IGUwNmM2ZTMuLjlmNGY1NjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9wb3dlci10cmFjZXMuYworKysgYi9rZXJuZWwvdHJhY2UvcG93ZXItdHJhY2VzLmMKQEAgLTE0LDcgKzE0LDUgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogCi1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHBvd2VyX3N0YXJ0KTsKLUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwocG93ZXJfZW5kKTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwocG93ZXJfZnJlcXVlbmN5KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCBhMWNhNDk1Li4yMzI2YjA0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJaW50CQkJCWNwdTsKIAlzdHJ1Y3QgcmluZ19idWZmZXIJCSpidWZmZXI7CiAJc3BpbmxvY2tfdAkJCXJlYWRlcl9sb2NrOwkvKiBzZXJpYWxpemUgcmVhZGVycyAqLwotCXJhd19zcGlubG9ja190CQkJbG9jazsKKwlhcmNoX3NwaW5sb2NrX3QJCQlsb2NrOwogCXN0cnVjdCBsb2NrX2NsYXNzX2tleQkJbG9ja19rZXk7CiAJc3RydWN0IGxpc3RfaGVhZAkJKnBhZ2VzOwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKmhlYWRfcGFnZTsJLyogcmVhZCBmcm9tIGhlYWQgKi8KQEAgLTk5OCw3ICs5OTgsNyBAQAogCWNwdV9idWZmZXItPmJ1ZmZlciA9IGJ1ZmZlcjsKIAlzcGluX2xvY2tfaW5pdCgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgYnVmZmVyLT5yZWFkZXJfbG9ja19rZXkpOwotCWNwdV9idWZmZXItPmxvY2sgPSAocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworCWNwdV9idWZmZXItPmxvY2sgPSAoYXJjaF9zcGlubG9ja190KV9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIAlicGFnZSA9IGt6YWxsb2Nfbm9kZShBTElHTihzaXplb2YoKmJwYWdlKSwgY2FjaGVfbGluZV9zaXplKCkpLAogCQkJICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGNwdSkpOwpAQCAtMTE5Myw5ICsxMTkzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOwogCXVuc2lnbmVkIGk7CiAKLQlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci0KIAlzcGluX2xvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CiAJcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoY3B1X2J1ZmZlcik7CiAKQEAgLTEyMTEsMTIgKzEyMDgsOSBAQAogCQlyZXR1cm47CiAKIAlyYl9yZXNldF9jcHUoY3B1X2J1ZmZlcik7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7Ci0KIAlyYl9jaGVja19wYWdlcyhjcHVfYnVmZmVyKTsKIAotCWF0b21pY19kZWMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7Ci0KKwlzcGluX3VubG9ja19pcnEoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyMjcsOSArMTIyMSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAl1bnNpZ25lZCBpOwogCi0JYXRvbWljX2luYygmY3B1X2J1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCiAJc3Bpbl9sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogCXJiX2hlYWRfcGFnZV9kZWFjdGl2YXRlKGNwdV9idWZmZXIpOwogCkBAIC0xMjQyLDExICsxMjMzLDkgQEAKIAkJbGlzdF9hZGRfdGFpbCgmYnBhZ2UtPmxpc3QsIGNwdV9idWZmZXItPnBhZ2VzKTsKIAl9CiAJcmJfcmVzZXRfY3B1KGNwdV9idWZmZXIpOwotCXNwaW5fdW5sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwotCiAJcmJfY2hlY2tfcGFnZXMoY3B1X2J1ZmZlcik7CiAKLQlhdG9taWNfZGVjKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworCXNwaW5fdW5sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogfQogCiAvKioKQEAgLTEyNTQsMTEgKzEyNDMsNiBAQAogICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0byByZXNpemUuCiAgKiBAc2l6ZTogdGhlIG5ldyBzaXplLgogICoKLSAqIFRoZSB0cmFjZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcwotICogbm90IGJlaW5nIHVzZWQgd2hpbGUgY2hhbmdpbmcgdGhlIHNpemUuCi0gKiBOb3RlOiBXZSBtYXkgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIGFib3ZlIHJlcXVpcmVtZW50IGJ5IHVzaW5nCi0gKiAgUkNVIHN5bmNocm9uaXphdGlvbnMuCi0gKgogICogTWluaW11bSBzaXplIGlzIDIgKiBCVUZfUEFHRV9TSVpFLgogICoKICAqIFJldHVybnMgLTEgb24gZmFpbHVyZS4KQEAgLTEyOTAsNiArMTI3NCwxMSBAQAogCWlmIChzaXplID09IGJ1ZmZlcl9zaXplKQogCQlyZXR1cm4gc2l6ZTsKIAorCWF0b21pY19pbmMoJmJ1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKKworCS8qIE1ha2Ugc3VyZSBhbGwgd3JpdGVycyBhcmUgZG9uZSB3aXRoIHRoaXMgYnVmZmVyLiAqLworCXN5bmNocm9uaXplX3NjaGVkKCk7CisKIAltdXRleF9sb2NrKCZidWZmZXItPm11dGV4KTsKIAlnZXRfb25saW5lX2NwdXMoKTsKIApAQCAtMTM1Miw2ICsxMzQxLDggQEAKIAlwdXRfb25saW5lX2NwdXMoKTsKIAltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOwogCisJYXRvbWljX2RlYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOworCiAJcmV0dXJuIHNpemU7CiAKICBmcmVlX3BhZ2VzOgpAQCAtMTM2MSw2ICsxMzUyLDcgQEAKIAl9CiAJcHV0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKKwlhdG9taWNfZGVjKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CiAJcmV0dXJuIC1FTk9NRU07CiAKIAkvKgpAQCAtMTM3MCw2ICsxMzYyLDcgQEAKICBvdXRfZmFpbDoKIAlwdXRfb25saW5lX2NwdXMoKTsKIAltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOworCWF0b21pY19kZWMoJmJ1ZmZlci0+cmVjb3JkX2Rpc2FibGVkKTsKIAlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZXNpemUpOwpAQCAtMjgzNCw3ICsyODI3LDcgQEAKIAlpbnQgcmV0OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisJYXJjaF9zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOwogCiAgYWdhaW46CiAJLyoKQEAgLTI5MjMsNyArMjkxNiw3IEBACiAJZ290byBhZ2FpbjsKIAogIG91dDoKLQlfX3Jhd19zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHJlYWRlcjsKQEAgLTMyODYsOSArMzI3OSw5IEBACiAJc3luY2hyb25pemVfc2NoZWQoKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisJYXJjaF9zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOwogCXJiX2l0ZXJfcmVzZXQoaXRlcik7Ci0JX19yYXdfc3Bpbl91bmxvY2soJmNwdV9idWZmZXItPmxvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmNwdV9idWZmZXItPmxvY2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaXRlcjsKQEAgLTM0MDgsMTEgKzM0MDEsMTEgQEAKIAlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCBsb2NhbF9yZWFkKCZjcHVfYnVmZmVyLT5jb21taXR0aW5nKSkpCiAJCWdvdG8gb3V0OwogCi0JX19yYXdfc3Bpbl9sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CiAKIAlyYl9yZXNldF9jcHUoY3B1X2J1ZmZlcik7CiAKLQlfX3Jhd19zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CiAKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggODc0ZjI4OS4uOGI5ZjIwYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgV2lsbGlhbSBMZWUgSXJ3aW4gSUlJCiAgKi8KICNpbmNsdWRlIDxsaW51eC9yaW5nX2J1ZmZlci5oPgotI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgpAQCAtODYsMTcgKzg2LDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgdHJhY2luZ19kaXNhYmxlZCA9IDE7CiAKLURFRklORV9QRVJfQ1BVKGxvY2FsX3QsIGZ0cmFjZV9jcHVfZGlzYWJsZWQpOworREVGSU5FX1BFUl9DUFUoaW50LCBmdHJhY2VfY3B1X2Rpc2FibGVkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kaXNhYmxlX2NwdSh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSk7CisJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2VuYWJsZV9jcHUodm9pZCkKIHsKLQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpOworCV9fdGhpc19jcHVfZGVjKHBlcl9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheQltYXhfdHI7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1LCBtYXhfZGF0YSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRyYWNlX2FycmF5X2NwdSwgbWF4X3RyX2RhdGEpOwogCiAvKiB0cmFjZXJfZW5hYmxlZCBpcyB1c2VkIHRvIHRvZ2dsZSBhY3RpdmF0aW9uIG9mIGEgdHJhY2VyICovCiBzdGF0aWMgaW50CQkJdHJhY2VyX2VuYWJsZWQgPSAxOwpAQCAtMzEzLDcgKzMxMyw2IEBACiAJImJpbiIsCiAJImJsb2NrIiwKIAkic3RhY2t0cmFjZSIsCi0JInNjaGVkLXRyZWUiLAogCSJ0cmFjZV9wcmludGsiLAogCSJmdHJhY2VfcHJlZW1wdCIsCiAJImJyYW5jaCIsCkBAIC00OTMsMTUgKzQ5MiwxNSBAQAogICogcHJvdGVjdGVkIGJ5IHBlcl9jcHUgc3BpbmxvY2tzLiBCdXQgdGhlIGFjdGlvbiBvZiB0aGUgc3dhcAogICogbmVlZHMgaXRzIG93biBsb2NrLgogICoKLSAqIFRoaXMgaXMgZGVmaW5lZCBhcyBhIHJhd19zcGlubG9ja190IGluIG9yZGVyIHRvIGhlbHAKKyAqIFRoaXMgaXMgZGVmaW5lZCBhcyBhIGFyY2hfc3BpbmxvY2tfdCBpbiBvcmRlciB0byBoZWxwCiAgKiB3aXRoIHBlcmZvcm1hbmNlIHdoZW4gbG9ja2RlcCBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4KICAqCiAgKiBJdCBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgcGxhY2VzIG91dHNpZGUgdGhlIHVwZGF0ZV9tYXhfdHIKICAqIHNvIGl0IG5lZWRzIHRvIGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUKICAqIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFLgogICovCi1zdGF0aWMgcmF3X3NwaW5sb2NrX3QgZnRyYWNlX21heF9sb2NrID0KLQkocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBmdHJhY2VfbWF4X2xvY2sgPQorCShhcmNoX3NwaW5sb2NrX3QpX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCiB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkJdHJhY2luZ19tYXhfbGF0ZW5jeTsKQEAgLTU1NSwxMyArNTU0LDEzIEBACiAJCXJldHVybjsKIAogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKLQlfX3Jhd19zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CiAKIAl0ci0+YnVmZmVyID0gbWF4X3RyLmJ1ZmZlcjsKIAltYXhfdHIuYnVmZmVyID0gYnVmOwogCiAJX191cGRhdGVfbWF4X3RyKHRyLCB0c2ssIGNwdSk7Ci0JX19yYXdfc3Bpbl91bmxvY2soJmZ0cmFjZV9tYXhfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmZnRyYWNlX21heF9sb2NrKTsKIH0KIAogLyoqCkBAIC01ODEsNyArNTgwLDcgQEAKIAkJcmV0dXJuOwogCiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwotCV9fcmF3X3NwaW5fbG9jaygmZnRyYWNlX21heF9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmZnRyYWNlX21heF9sb2NrKTsKIAogCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwogCkBAIC02MDMsNyArNjAyLDcgQEAKIAlXQVJOX09OX09OQ0UocmV0ICYmIHJldCAhPSAtRUFHQUlOICYmIHJldCAhPSAtRUJVU1kpOwogCiAJX191cGRhdGVfbWF4X3RyKHRyLCB0c2ssIGNwdSk7Ci0JX19yYXdfc3Bpbl91bmxvY2soJmZ0cmFjZV9tYXhfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmZnRyYWNlX21heF9sb2NrKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfVFJBQ0VSX01BWF9UUkFDRSAqLwogCkBAIC04MDIsNyArODAxLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBtYXBfY21kbGluZV90b19waWRbU0FWRURfQ01ETElORVNdOwogc3RhdGljIGNoYXIgc2F2ZWRfY21kbGluZXNbU0FWRURfQ01ETElORVNdW1RBU0tfQ09NTV9MRU5dOwogc3RhdGljIGludCBjbWRsaW5lX2lkeDsKLXN0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9jbWRsaW5lX2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgYXJjaF9zcGlubG9ja190IHRyYWNlX2NtZGxpbmVfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIC8qIHRlbXBvcmFyeSBkaXNhYmxlIHJlY29yZGluZyAqLwogc3RhdGljIGF0b21pY190IHRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CkBAIC05MTUsNyArOTE0LDcgQEAKIAkgKiBub3IgZG8gd2Ugd2FudCB0byBkaXNhYmxlIGludGVycnVwdHMsCiAJICogc28gaWYgd2UgbWlzcyBoZXJlLCB0aGVuIGJldHRlciBsdWNrIG5leHQgdGltZS4KIAkgKi8KLQlpZiAoIV9fcmF3X3NwaW5fdHJ5bG9jaygmdHJhY2VfY21kbGluZV9sb2NrKSkKKwlpZiAoIWFyY2hfc3Bpbl90cnlsb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spKQogCQlyZXR1cm47CiAKIAlpZHggPSBtYXBfcGlkX3RvX2NtZGxpbmVbdHNrLT5waWRdOwpAQCAtOTQwLDcgKzkzOSw3IEBACiAKIAltZW1jcHkoJnNhdmVkX2NtZGxpbmVzW2lkeF0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7CiAKLQlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfY21kbGluZV9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOwogfQogCiB2b2lkIHRyYWNlX2ZpbmRfY21kbGluZShpbnQgcGlkLCBjaGFyIGNvbW1bXSkKQEAgLTk1OCwxNCArOTU3LDE0IEBACiAJfQogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOwogCW1hcCA9IG1hcF9waWRfdG9fY21kbGluZVtwaWRdOwogCWlmIChtYXAgIT0gTk9fQ01ETElORV9NQVApCiAJCXN0cmNweShjb21tLCBzYXZlZF9jbWRsaW5lc1ttYXBdKTsKIAllbHNlCiAJCXN0cmNweShjb21tLCAiPC4uLj4iKTsKIAotCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnRyYWNlX2NtZGxpbmVfbG9jayk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIApAQCAtMTA4NSw3ICsxMDg0LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICplbnRyeTsKIAogCS8qIElmIHdlIGFyZSByZWFkaW5nIHRoZSByaW5nIGJ1ZmZlciwgZG9uJ3QgdHJhY2UgKi8KLQlpZiAodW5saWtlbHkobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQorCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQocGVyX2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKIAkJcmV0dXJuOwogCiAJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfRk4sIHNpemVvZigqZW50cnkpLApAQCAtMTE1MSw2ICsxMTUwLDIyIEBACiAJX19mdHJhY2VfdHJhY2Vfc3RhY2sodHItPmJ1ZmZlciwgZmxhZ3MsIHNraXAsIHBjKTsKIH0KIAorLyoqCisgKiB0cmFjZV9kdW1wX3N0YWNrIC0gcmVjb3JkIGEgc3RhY2sgYmFjayB0cmFjZSBpbiB0aGUgdHJhY2UgYnVmZmVyCisgKi8KK3ZvaWQgdHJhY2VfZHVtcF9zdGFjayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHJhY2luZ19kaXNhYmxlZCB8fCB0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcpCisJCXJldHVybjsKKworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCisJLyogc2tpcHBpbmcgMyB0cmFjZXMsIHNlZW1zIHRvIGdldCB1cyBhdCB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlfX2Z0cmFjZV90cmFjZV9zdGFjayhnbG9iYWxfdHJhY2UuYnVmZmVyLCBmbGFncywgMywgcHJlZW1wdF9jb3VudCgpKTsKK30KKwogdm9pZAogZnRyYWNlX3RyYWNlX3VzZXJzdGFjayhzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewpAQCAtMTI1MSw4ICsxMjY2LDggQEAKICAqLwogaW50IHRyYWNlX3ZicHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXN0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9idWZfbG9jayA9Ci0JCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3RhdGljIGFyY2hfc3BpbmxvY2tfdCB0cmFjZV9idWZfbG9jayA9CisJCShhcmNoX3NwaW5sb2NrX3QpX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAlzdGF0aWMgdTMyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07CiAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfYnByaW50OwpAQCAtMTI4Myw3ICsxMjk4LDcgQEAKIAogCS8qIExvY2tkZXAgdXNlcyB0cmFjZV9wcmludGsgZm9yIGxvY2sgdHJhY2luZyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmdHJhY2VfYnVmX2xvY2spOwogCWxlbiA9IHZiaW5fcHJpbnRmKHRyYWNlX2J1ZiwgVFJBQ0VfQlVGX1NJWkUsIGZtdCwgYXJncyk7CiAKIAlpZiAobGVuID4gVFJBQ0VfQlVGX1NJWkUgfHwgbGVuIDwgMCkKQEAgLTEzMDQsNyArMTMxOSw3IEBACiAJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAKIG91dF91bmxvY2s6Ci0JX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiBvdXQ6CkBAIC0xMzM0LDcgKzEzNDksNyBAQAogaW50IHRyYWNlX2FycmF5X3ZwcmludGsoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCXVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXN0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9idWZfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwlzdGF0aWMgYXJjaF9zcGlubG9ja190IHRyYWNlX2J1Zl9sb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAlzdGF0aWMgY2hhciB0cmFjZV9idWZbVFJBQ0VfQlVGX1NJWkVdOwogCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3ByaW50OwpAQCAtMTM2MCwxMiArMTM3NSw4IEBACiAKIAlwYXVzZV9ncmFwaF90cmFjaW5nKCk7CiAJcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9idWZfbG9jayk7Ci0JaWYgKGFyZ3MgPT0gTlVMTCkgewotCQlzdHJuY3B5KHRyYWNlX2J1ZiwgZm10LCBUUkFDRV9CVUZfU0laRSk7Ci0JCWxlbiA9IHN0cmxlbih0cmFjZV9idWYpOwotCX0gZWxzZQotCQlsZW4gPSB2c25wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKKwlhcmNoX3NwaW5fbG9jaygmdHJhY2VfYnVmX2xvY2spOworCWxlbiA9IHZzbnByaW50Zih0cmFjZV9idWYsIFRSQUNFX0JVRl9TSVpFLCBmbXQsIGFyZ3MpOwogCiAJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbGVuICsgMTsKIAlidWZmZXIgPSB0ci0+YnVmZmVyOwpAQCAtMTM4Miw3ICsxMzkzLDcgQEAKIAkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKIAogIG91dF91bmxvY2s6Ci0JX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CiAJdW5wYXVzZV9ncmFwaF90cmFjaW5nKCk7CiAgb3V0OgpAQCAtMTUxNiw2ICsxNTI3LDggQEAKIAlpbnQgaSA9IChpbnQpKnBvczsKIAl2b2lkICplbnQ7CiAKKwlXQVJOX09OX09OQ0UoaXRlci0+bGVmdG92ZXIpOworCiAJKCpwb3MpKys7CiAKIAkvKiBjYW4ndCBnbyBiYWNrd2FyZHMgKi8KQEAgLTE2MTQsOCArMTYyNywxNiBAQAogCQkJOwogCiAJfSBlbHNlIHsKLQkJbCA9ICpwb3MgLSAxOwotCQlwID0gc19uZXh0KG0sIHAsICZsKTsKKwkJLyoKKwkJICogSWYgd2Ugb3ZlcmZsb3dlZCB0aGUgc2VxX2ZpbGUgYmVmb3JlLCB0aGVuIHdlIHdhbnQKKwkJICogdG8ganVzdCByZXVzZSB0aGUgdHJhY2Vfc2VxIGJ1ZmZlciBhZ2Fpbi4KKwkJICovCisJCWlmIChpdGVyLT5sZWZ0b3ZlcikKKwkJCXAgPSBpdGVyOworCQllbHNlIHsKKwkJCWwgPSAqcG9zIC0gMTsKKwkJCXAgPSBzX25leHQobSwgcCwgJmwpOworCQl9CiAJfQogCiAJdHJhY2VfZXZlbnRfcmVhZF9sb2NrKCk7CkBAIC0xOTIzLDYgKzE5NDQsNyBAQAogc3RhdGljIGludCBzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IHY7CisJaW50IHJldDsKIAogCWlmIChpdGVyLT5lbnQgPT0gTlVMTCkgewogCQlpZiAoaXRlci0+dHIpIHsKQEAgLTE5NDIsOSArMTk2NCwyNyBAQAogCQkJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1ZFUkJPU0UpKQogCQkJCXByaW50X2Z1bmNfaGVscF9oZWFkZXIobSk7CiAJCX0KKwl9IGVsc2UgaWYgKGl0ZXItPmxlZnRvdmVyKSB7CisJCS8qCisJCSAqIElmIHdlIGZpbGxlZCB0aGUgc2VxX2ZpbGUgYnVmZmVyIGVhcmxpZXIsIHdlCisJCSAqIHdhbnQgdG8ganVzdCBzaG93IGl0IG5vdy4KKwkJICovCisJCXJldCA9IHRyYWNlX3ByaW50X3NlcShtLCAmaXRlci0+c2VxKTsKKworCQkvKiByZXQgc2hvdWxkIHRoaXMgdGltZSBiZSB6ZXJvLCBidXQgeW91IG5ldmVyIGtub3cgKi8KKwkJaXRlci0+bGVmdG92ZXIgPSByZXQ7CisKIAl9IGVsc2UgewogCQlwcmludF90cmFjZV9saW5lKGl0ZXIpOwotCQl0cmFjZV9wcmludF9zZXEobSwgJml0ZXItPnNlcSk7CisJCXJldCA9IHRyYWNlX3ByaW50X3NlcShtLCAmaXRlci0+c2VxKTsKKwkJLyoKKwkJICogSWYgd2Ugb3ZlcmZsb3cgdGhlIHNlcV9maWxlIGJ1ZmZlciwgdGhlbiBpdCB3aWxsCisJCSAqIGFzayB1cyBmb3IgdGhpcyBkYXRhIGFnYWluIGF0IHN0YXJ0IHVwLgorCQkgKiBVc2UgdGhhdCBpbnN0ZWFkLgorCQkgKiAgcmV0IGlzIDAgaWYgc2VxX2ZpbGUgd3JpdGUgc3VjY2VlZGVkLgorCQkgKiAgICAgICAgLTEgb3RoZXJ3aXNlLgorCQkgKi8KKwkJaXRlci0+bGVmdG92ZXIgPSByZXQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMjU0LDcgKzIyOTQsNyBAQAogCW11dGV4X2xvY2soJnRyYWNpbmdfY3B1bWFza191cGRhdGVfbG9jayk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCV9fcmF3X3NwaW5fbG9jaygmZnRyYWNlX21heF9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmZnRyYWNlX21heF9sb2NrKTsKIAlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKIAkJLyoKIAkJICogSW5jcmVhc2UvZGVjcmVhc2UgdGhlIGRpc2FibGVkIGNvdW50ZXIgaWYgd2UgYXJlCkBAIC0yMjY5LDcgKzIzMDksNyBAQAogCQkJYXRvbWljX2RlYygmZ2xvYmFsX3RyYWNlLmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwogCQl9CiAJfQotCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmZ0cmFjZV9tYXhfbG9jayk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJY3B1bWFza19jb3B5KHRyYWNpbmdfY3B1bWFzaywgdHJhY2luZ19jcHVtYXNrX25ldyk7CkBAIC0yMjkxLDkyICsyMzMxLDQxIEBACiAJLndyaXRlCQk9IHRyYWNpbmdfY3B1bWFza193cml0ZSwKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci10cmFjaW5nX3RyYWNlX29wdGlvbnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCi0JCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgaW50IHRyYWNpbmdfdHJhY2Vfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgdHJhY2VyX29wdCAqdHJhY2Vfb3B0czsKIAl1MzIgdHJhY2VyX2ZsYWdzOwotCWludCBsZW4gPSAwOwotCWNoYXIgKmJ1ZjsKLQlpbnQgciA9IDA7CiAJaW50IGk7CiAKLQotCS8qIGNhbGN1bGF0ZSBtYXggc2l6ZSAqLwotCWZvciAoaSA9IDA7IHRyYWNlX29wdGlvbnNbaV07IGkrKykgewotCQlsZW4gKz0gc3RybGVuKHRyYWNlX29wdGlvbnNbaV0pOwotCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgbmV3bGluZSAqLwotCX0KLQogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCXRyYWNlcl9mbGFncyA9IGN1cnJlbnRfdHJhY2UtPmZsYWdzLT52YWw7CiAJdHJhY2Vfb3B0cyA9IGN1cnJlbnRfdHJhY2UtPmZsYWdzLT5vcHRzOwogCi0JLyoKLQkgKiBJbmNyZWFzZSB0aGUgc2l6ZSB3aXRoIG5hbWVzIG9mIG9wdGlvbnMgc3BlY2lmaWMKLQkgKiBvZiB0aGUgY3VycmVudCB0cmFjZXIuCi0JICovCi0JZm9yIChpID0gMDsgdHJhY2Vfb3B0c1tpXS5uYW1lOyBpKyspIHsKLQkJbGVuICs9IHN0cmxlbih0cmFjZV9vcHRzW2ldLm5hbWUpOwotCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgbmV3bGluZSAqLwotCX0KLQotCS8qICsxIGZvciBcMCAqLwotCWJ1ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJZm9yIChpID0gMDsgdHJhY2Vfb3B0aW9uc1tpXTsgaSsrKSB7CiAJCWlmICh0cmFjZV9mbGFncyAmICgxIDw8IGkpKQotCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICIlc1xuIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CisJCQlzZXFfcHJpbnRmKG0sICIlc1xuIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CiAJCWVsc2UKLQkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAibm8lc1xuIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CisJCQlzZXFfcHJpbnRmKG0sICJubyVzXG4iLCB0cmFjZV9vcHRpb25zW2ldKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyB0cmFjZV9vcHRzW2ldLm5hbWU7IGkrKykgewogCQlpZiAodHJhY2VyX2ZsYWdzICYgdHJhY2Vfb3B0c1tpXS5iaXQpCi0JCQlyICs9IHNwcmludGYoYnVmICsgciwgIiVzXG4iLAotCQkJCXRyYWNlX29wdHNbaV0ubmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICIlc1xuIiwgdHJhY2Vfb3B0c1tpXS5uYW1lKTsKIAkJZWxzZQotCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICJubyVzXG4iLAotCQkJCXRyYWNlX29wdHNbaV0ubmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICJubyVzXG4iLCB0cmFjZV9vcHRzW2ldLm5hbWUpOwogCX0KIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JV0FSTl9PTihyID49IGxlbiArIDEpOwotCi0JciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCByKTsKLQotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIDA7CiB9CiAKLS8qIFRyeSB0byBhc3NpZ24gYSB0cmFjZXIgc3BlY2lmaWMgb3B0aW9uICovCi1zdGF0aWMgaW50IHNldF90cmFjZXJfb3B0aW9uKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBjaGFyICpjbXAsIGludCBuZWcpCitzdGF0aWMgaW50IF9fc2V0X3RyYWNlcl9vcHRpb24oc3RydWN0IHRyYWNlciAqdHJhY2UsCisJCQkgICAgICAgc3RydWN0IHRyYWNlcl9mbGFncyAqdHJhY2VyX2ZsYWdzLAorCQkJICAgICAgIHN0cnVjdCB0cmFjZXJfb3B0ICpvcHRzLCBpbnQgbmVnKQogewotCXN0cnVjdCB0cmFjZXJfZmxhZ3MgKnRyYWNlcl9mbGFncyA9IHRyYWNlLT5mbGFnczsKLQlzdHJ1Y3QgdHJhY2VyX29wdCAqb3B0cyA9IE5VTEw7Ci0JaW50IHJldCA9IDAsIGkgPSAwOwotCWludCBsZW47CisJaW50IHJldDsKIAotCWZvciAoaSA9IDA7IHRyYWNlcl9mbGFncy0+b3B0c1tpXS5uYW1lOyBpKyspIHsKLQkJb3B0cyA9ICZ0cmFjZXJfZmxhZ3MtPm9wdHNbaV07Ci0JCWxlbiA9IHN0cmxlbihvcHRzLT5uYW1lKTsKLQotCQlpZiAoc3RybmNtcChjbXAsIG9wdHMtPm5hbWUsIGxlbikgPT0gMCkgewotCQkJcmV0ID0gdHJhY2UtPnNldF9mbGFnKHRyYWNlcl9mbGFncy0+dmFsLAotCQkJCW9wdHMtPmJpdCwgIW5lZyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkvKiBOb3QgZm91bmQgKi8KLQlpZiAoIXRyYWNlcl9mbGFncy0+b3B0c1tpXS5uYW1lKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFJlZnVzZWQgdG8gaGFuZGxlICovCisJcmV0ID0gdHJhY2UtPnNldF9mbGFnKHRyYWNlcl9mbGFncy0+dmFsLCBvcHRzLT5iaXQsICFuZWcpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIzODQsMTAgKzIzNzMsMjcgQEAKIAkJdHJhY2VyX2ZsYWdzLT52YWwgJj0gfm9wdHMtPmJpdDsKIAllbHNlCiAJCXRyYWNlcl9mbGFncy0+dmFsIHw9IG9wdHMtPmJpdDsKLQogCXJldHVybiAwOwogfQogCisvKiBUcnkgdG8gYXNzaWduIGEgdHJhY2VyIHNwZWNpZmljIG9wdGlvbiAqLworc3RhdGljIGludCBzZXRfdHJhY2VyX29wdGlvbihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgY2hhciAqY21wLCBpbnQgbmVnKQoreworCXN0cnVjdCB0cmFjZXJfZmxhZ3MgKnRyYWNlcl9mbGFncyA9IHRyYWNlLT5mbGFnczsKKwlzdHJ1Y3QgdHJhY2VyX29wdCAqb3B0cyA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyB0cmFjZXJfZmxhZ3MtPm9wdHNbaV0ubmFtZTsgaSsrKSB7CisJCW9wdHMgPSAmdHJhY2VyX2ZsYWdzLT5vcHRzW2ldOworCisJCWlmIChzdHJjbXAoY21wLCBvcHRzLT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuIF9fc2V0X3RyYWNlcl9vcHRpb24odHJhY2UsIHRyYWNlLT5mbGFncywKKwkJCQkJCSAgIG9wdHMsIG5lZyk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyB2b2lkIHNldF90cmFjZXJfZmxhZ3ModW5zaWduZWQgaW50IG1hc2ssIGludCBlbmFibGVkKQogewogCS8qIGRvIG5vdGhpbmcgaWYgZmxhZyBpcyBhbHJlYWR5IHNldCAqLwpAQCAtMjQwNSw3ICsyNDExLDcgQEAKIAkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyIGJ1Zls2NF07Ci0JY2hhciAqY21wID0gYnVmOworCWNoYXIgKmNtcDsKIAlpbnQgbmVnID0gMDsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMjQxNywxNiArMjQyMywxNSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWJ1ZltjbnRdID0gMDsKKwljbXAgPSBzdHJzdHJpcChidWYpOwogCi0JaWYgKHN0cm5jbXAoYnVmLCAibm8iLCAyKSA9PSAwKSB7CisJaWYgKHN0cm5jbXAoY21wLCAibm8iLCAyKSA9PSAwKSB7CiAJCW5lZyA9IDE7CiAJCWNtcCArPSAyOwogCX0KIAogCWZvciAoaSA9IDA7IHRyYWNlX29wdGlvbnNbaV07IGkrKykgewotCQlpbnQgbGVuID0gc3RybGVuKHRyYWNlX29wdGlvbnNbaV0pOwotCi0JCWlmIChzdHJuY21wKGNtcCwgdHJhY2Vfb3B0aW9uc1tpXSwgbGVuKSA9PSAwKSB7CisJCWlmIChzdHJjbXAoY21wLCB0cmFjZV9vcHRpb25zW2ldKSA9PSAwKSB7CiAJCQlzZXRfdHJhY2VyX2ZsYWdzKDEgPDwgaSwgIW5lZyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMjQ0Niw5ICsyNDUxLDE4IEBACiAJcmV0dXJuIGNudDsKIH0KIAorc3RhdGljIGludCB0cmFjaW5nX3RyYWNlX29wdGlvbnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodHJhY2luZ19kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHRyYWNpbmdfdHJhY2Vfb3B0aW9uc19zaG93LCBOVUxMKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19pdGVyX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCi0JLnJlYWQJCT0gdHJhY2luZ190cmFjZV9vcHRpb25zX3JlYWQsCisJLm9wZW4JCT0gdHJhY2luZ190cmFjZV9vcHRpb25zX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIAkud3JpdGUJCT0gdHJhY2luZ190cmFjZV9vcHRpb25zX3dyaXRlLAogfTsKIApAQCAtMjg5OCw2ICsyOTEyLDEwIEBACiAJZWxzZQogCQljcHVtYXNrX2NsZWFyX2NwdShpdGVyLT5jcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CiAKKworCWlmIChpdGVyLT50cmFjZS0+cGlwZV9jbG9zZSkKKwkJaXRlci0+dHJhY2UtPnBpcGVfY2xvc2UoaXRlcik7CisKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCiAJZnJlZV9jcHVtYXNrX3ZhcihpdGVyLT5zdGFydGVkKTsKQEAgLTMxMDQsNyArMzEyMiw3IEBACiAJX19mcmVlX3BhZ2Uoc3BkLT5wYWdlc1tpZHhdKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHRyYWNpbmdfcGlwZV9idWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHRyYWNpbmdfcGlwZV9idWZfb3BzID0gewogCS5jYW5fbWVyZ2UJCT0gMCwKIAkubWFwCQkJPSBnZW5lcmljX3BpcGVfYnVmX21hcCwKIAkudW5tYXAJCQk9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCkBAIC0zMzIwLDYgKzMzMzgsMTYgQEAKIAlyZXR1cm4gY250OwogfQogCitzdGF0aWMgaW50IG1hcmtfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJcmV0ID0gdHJhY2VfdnByaW50aygwLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdAogdHJhY2luZ19tYXJrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkJc2l6ZV90IGNudCwgbG9mZl90ICpmcG9zKQpAQCAtMzM0NiwyOCArMzM3NCwyNSBAQAogCX0gZWxzZQogCQlidWZbY250XSA9ICdcMCc7CiAKLQljbnQgPSB0cmFjZV92cHJpbnRrKDAsIGJ1ZiwgTlVMTCk7CisJY250ID0gbWFya19wcmludGsoIiVzIiwgYnVmKTsKIAlrZnJlZShidWYpOwogCSpmcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHRyYWNpbmdfY2xvY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCi0JCQkJICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgaW50IHRyYWNpbmdfY2xvY2tfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JY2hhciBidWZbNjRdOwotCWludCBidWZpdGVyID0gMDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYWNlX2Nsb2Nrcyk7IGkrKykKLQkJYnVmaXRlciArPSBzbnByaW50ZihidWYgKyBidWZpdGVyLCBzaXplb2YoYnVmKSAtIGJ1Zml0ZXIsCisJCXNlcV9wcmludGYobSwKIAkJCSIlcyVzJXMlcyIsIGkgPyAiICIgOiAiIiwKIAkJCWkgPT0gdHJhY2VfY2xvY2tfaWQgPyAiWyIgOiAiIiwgdHJhY2VfY2xvY2tzW2ldLm5hbWUsCiAJCQlpID09IHRyYWNlX2Nsb2NrX2lkID8gIl0iIDogIiIpOwotCWJ1Zml0ZXIgKz0gc25wcmludGYoYnVmICsgYnVmaXRlciwgc2l6ZW9mKGJ1ZikgLSBidWZpdGVyLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1ZiwgYnVmaXRlcik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHRyYWNpbmdfY2xvY2tfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLApAQCAtMzQwOSw2ICszNDM0LDEzIEBACiAJcmV0dXJuIGNudDsKIH0KIAorc3RhdGljIGludCB0cmFjaW5nX2Nsb2NrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0cmFjaW5nX2Nsb2NrX3Nob3csIE5VTEwpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21heF9sYXRfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX21heF9sYXRfcmVhZCwKQEAgLTM0NDcsOCArMzQ3OSwxMCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2VfY2xvY2tfZm9wcyA9IHsKLQkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKLQkucmVhZAkJPSB0cmFjaW5nX2Nsb2NrX3JlYWQsCisJLm9wZW4JCT0gdHJhY2luZ19jbG9ja19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiAJLndyaXRlCQk9IHRyYWNpbmdfY2xvY2tfd3JpdGUsCiB9OwogCkBAIC0zNTc4LDcgKzM2MTIsNyBAQAogfQogCiAvKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBhIGJ1ZmZlci4gKi8KLXN0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBidWZmZXJfcGlwZV9idWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGJ1ZmZlcl9waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZQkJPSAwLAogCS5tYXAJCQk9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAogCS51bm1hcAkJCT0gZ2VuZXJpY19waXBlX2J1Zl91bm1hcCwKQEAgLTM5MDksMzkgKzM5NDMsMTYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IDA7Ci0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIDA6Ci0JCS8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBjbGVhcmVkICovCi0JCWlmICghKHRvcHQtPmZsYWdzLT52YWwgJiB0b3B0LT5vcHQtPmJpdCkpCi0JCQlicmVhazsKLQotCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQkJaWYgKGN1cnJlbnRfdHJhY2UtPnNldF9mbGFnKQotCQkJcmV0ID0gY3VycmVudF90cmFjZS0+c2V0X2ZsYWcodG9wdC0+ZmxhZ3MtPnZhbCwKLQkJCQkJCSAgICAgIHRvcHQtPm9wdC0+Yml0LCAwKTsKLQkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JCXRvcHQtPmZsYWdzLT52YWwgJj0gfnRvcHQtPm9wdC0+Yml0OwotCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgKi8KLQkJaWYgKHRvcHQtPmZsYWdzLT52YWwgJiB0b3B0LT5vcHQtPmJpdCkKLQkJCWJyZWFrOwotCi0JCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCQlpZiAoY3VycmVudF90cmFjZS0+c2V0X2ZsYWcpCi0JCQlyZXQgPSBjdXJyZW50X3RyYWNlLT5zZXRfZmxhZyh0b3B0LT5mbGFncy0+dmFsLAotCQkJCQkJICAgICAgdG9wdC0+b3B0LT5iaXQsIDEpOwotCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQkJdG9wdC0+ZmxhZ3MtPnZhbCB8PSB0b3B0LT5vcHQtPmJpdDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgorCWlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoISEodG9wdC0+ZmxhZ3MtPnZhbCAmIHRvcHQtPm9wdC0+Yml0KSAhPSB2YWwpIHsKKwkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCXJldCA9IF9fc2V0X3RyYWNlcl9vcHRpb24oY3VycmVudF90cmFjZSwgdG9wdC0+ZmxhZ3MsCisJCQkJCSAgdG9wdC0+b3B0LCB2YWwpOworCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAkqcHBvcyArPSBjbnQ7CkBAIC00MjY4LDggKzQyNzksOCBAQAogCiBzdGF0aWMgdm9pZCBfX2Z0cmFjZV9kdW1wKGJvb2wgZGlzYWJsZV90cmFjaW5nKQogewotCXN0YXRpYyByYXdfc3BpbmxvY2tfdCBmdHJhY2VfZHVtcF9sb2NrID0KLQkJKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwlzdGF0aWMgYXJjaF9zcGlubG9ja190IGZ0cmFjZV9kdW1wX2xvY2sgPQorCQkoYXJjaF9zcGlubG9ja190KV9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAJLyogdXNlIHN0YXRpYyBiZWNhdXNlIGl0ZXIgY2FuIGJlIGEgYml0IGJpZyBmb3IgdGhlIHN0YWNrICovCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9pdGVyYXRvciBpdGVyOwogCXVuc2lnbmVkIGludCBvbGRfdXNlcm9iajsKQEAgLTQyNzksNyArNDI5MCw3IEBACiAKIAkvKiBvbmx5IG9uZSBkdW1wICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmZnRyYWNlX2R1bXBfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmZ0cmFjZV9kdW1wX2xvY2spOwogCWlmIChkdW1wX3JhbikKIAkJZ290byBvdXQ7CiAKQEAgLTQzNTQsNyArNDM2NSw3IEBACiAJfQogCiAgb3V0OgotCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfZHVtcF9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZmdHJhY2VfZHVtcF9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTQ0MTUsNyArNDQyNiw3IEBACiAJLyogQWxsb2NhdGUgdGhlIGZpcnN0IHBhZ2UgZm9yIGFsbCBidWZmZXJzICovCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoaSkgewogCQlnbG9iYWxfdHJhY2UuZGF0YVtpXSA9ICZwZXJfY3B1KGdsb2JhbF90cmFjZV9jcHUsIGkpOwotCQltYXhfdHIuZGF0YVtpXSA9ICZwZXJfY3B1KG1heF9kYXRhLCBpKTsKKwkJbWF4X3RyLmRhdGFbaV0gPSAmcGVyX2NwdShtYXhfdHJfZGF0YSwgaSk7CiAJfQogCiAJdHJhY2VfaW5pdF9jbWRsaW5lcygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCAxZDdmNDgzLi40ZGY2YTc3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtMjcyLDYgKzI3Miw3IEBACiAgKiBAcGlwZV9vcGVuOiBjYWxsZWQgd2hlbiB0aGUgdHJhY2VfcGlwZSBmaWxlIGlzIG9wZW5lZAogICogQHdhaXRfcGlwZTogb3ZlcnJpZGUgaG93IHRoZSB1c2VyIHdhaXRzIGZvciB0cmFjZXMgb24gdHJhY2VfcGlwZQogICogQGNsb3NlOiBjYWxsZWQgd2hlbiB0aGUgdHJhY2UgZmlsZSBpcyByZWxlYXNlZAorICogQHBpcGVfY2xvc2U6IGNhbGxlZCB3aGVuIHRoZSB0cmFjZV9waXBlIGZpbGUgaXMgcmVsZWFzZWQKICAqIEByZWFkOiBvdmVycmlkZSB0aGUgZGVmYXVsdCByZWFkIGNhbGxiYWNrIG9uIHRyYWNlX3BpcGUKICAqIEBzcGxpY2VfcmVhZDogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3BsaWNlX3JlYWQgY2FsbGJhY2sgb24gdHJhY2VfcGlwZQogICogQHNlbGZ0ZXN0OiBzZWxmdGVzdCB0byBydW4gb24gYm9vdCAoc2VlIHRyYWNlX3NlbGZ0ZXN0LmMpCkBAIC0yOTAsNiArMjkxLDcgQEAKIAl2b2lkCQkJKCpwaXBlX29wZW4pKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJdm9pZAkJCSgqd2FpdF9waXBlKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwogCXZvaWQJCQkoKmNsb3NlKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworCXZvaWQJCQkoKnBpcGVfY2xvc2UpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJc3NpemVfdAkJCSgqcmVhZCkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcyk7CkBAIC00NDEsNyArNDQzLDcgQEAKIAogZXh0ZXJuIGludCByaW5nX2J1ZmZlcl9leHBhbmRlZDsKIGV4dGVybiBib29sIHRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQ7Ci1ERUNMQVJFX1BFUl9DUFUobG9jYWxfdCwgZnRyYWNlX2NwdV9kaXNhYmxlZCk7CitERUNMQVJFX1BFUl9DUFUoaW50LCBmdHJhY2VfY3B1X2Rpc2FibGVkKTsKIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb24oc3RydWN0IHRyYWNlciAqdHJhY2UsCkBAIC01OTUsMTggKzU5NywxNyBAQAogCVRSQUNFX0lURVJfQklOCQkJPSAweDQwLAogCVRSQUNFX0lURVJfQkxPQ0sJCT0gMHg4MCwKIAlUUkFDRV9JVEVSX1NUQUNLVFJBQ0UJCT0gMHgxMDAsCi0JVFJBQ0VfSVRFUl9TQ0hFRF9UUkVFCQk9IDB4MjAwLAotCVRSQUNFX0lURVJfUFJJTlRLCQk9IDB4NDAwLAotCVRSQUNFX0lURVJfUFJFRU1QVE9OTFkJCT0gMHg4MDAsCi0JVFJBQ0VfSVRFUl9CUkFOQ0gJCT0gMHgxMDAwLAotCVRSQUNFX0lURVJfQU5OT1RBVEUJCT0gMHgyMDAwLAotCVRSQUNFX0lURVJfVVNFUlNUQUNLVFJBQ0UgICAgICAgPSAweDQwMDAsCi0JVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSiAgICAgICAgICA9IDB4ODAwMCwKLQlUUkFDRV9JVEVSX1BSSU5US19NU0dPTkxZCT0gMHgxMDAwMCwKLQlUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTwkJPSAweDIwMDAwLCAvKiBQcmludCBwaWQvY3B1L3RpbWUgKi8KLQlUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UCQk9IDB4NDAwMDAsCi0JVFJBQ0VfSVRFUl9TTEVFUF9USU1FCQk9IDB4ODAwMDAsCi0JVFJBQ0VfSVRFUl9HUkFQSF9USU1FCQk9IDB4MTAwMDAwLAorCVRSQUNFX0lURVJfUFJJTlRLCQk9IDB4MjAwLAorCVRSQUNFX0lURVJfUFJFRU1QVE9OTFkJCT0gMHg0MDAsCisJVFJBQ0VfSVRFUl9CUkFOQ0gJCT0gMHg4MDAsCisJVFJBQ0VfSVRFUl9BTk5PVEFURQkJPSAweDEwMDAsCisJVFJBQ0VfSVRFUl9VU0VSU1RBQ0tUUkFDRSAgICAgICA9IDB4MjAwMCwKKwlUUkFDRV9JVEVSX1NZTV9VU0VST0JKICAgICAgICAgID0gMHg0MDAwLAorCVRSQUNFX0lURVJfUFJJTlRLX01TR09OTFkJPSAweDgwMDAsCisJVFJBQ0VfSVRFUl9DT05URVhUX0lORk8JCT0gMHgxMDAwMCwgLyogUHJpbnQgcGlkL2NwdS90aW1lICovCisJVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVAkJPSAweDIwMDAwLAorCVRSQUNFX0lURVJfU0xFRVBfVElNRQkJPSAweDQwMDAwLAorCVRSQUNFX0lURVJfR1JBUEhfVElNRQkJPSAweDgwMDAwLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKaW5kZXggODc4YzAzZi4uODRhM2E3YiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKQEAgLTcxLDEwICs3MSwxMCBAQAogLyoga2VlcCBwcmV2X3RpbWUgYW5kIGxvY2sgaW4gdGhlIHNhbWUgY2FjaGVsaW5lLiAqLwogc3RhdGljIHN0cnVjdCB7CiAJdTY0IHByZXZfdGltZTsKLQlyYXdfc3BpbmxvY2tfdCBsb2NrOworCWFyY2hfc3BpbmxvY2tfdCBsb2NrOwogfSB0cmFjZV9jbG9ja19zdHJ1Y3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9CiAJewotCQkubG9jayA9IChyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQsCisJCS5sb2NrID0gKGFyY2hfc3BpbmxvY2tfdClfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VELAogCX07CiAKIHU2NCBub3RyYWNlIHRyYWNlX2Nsb2NrX2dsb2JhbCh2b2lkKQpAQCAtOTQsNyArOTQsNyBAQAogCWlmICh1bmxpa2VseShpbl9ubWkoKSkpCiAJCWdvdG8gb3V0OwogCi0JX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9jbG9ja19zdHJ1Y3QubG9jayk7CisJYXJjaF9zcGluX2xvY2soJnRyYWNlX2Nsb2NrX3N0cnVjdC5sb2NrKTsKIAogCS8qCiAJICogVE9ETzogaWYgdGhpcyBoYXBwZW5zIG9mdGVuIHRoZW4gbWF5YmUgd2Ugc2hvdWxkIHJlc2V0CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogCXRyYWNlX2Nsb2NrX3N0cnVjdC5wcmV2X3RpbWUgPSBub3c7CiAKLQlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfY2xvY2tfc3RydWN0LmxvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJnRyYWNlX2Nsb2NrX3N0cnVjdC5sb2NrKTsKIAogIG91dDoKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggZDljNjBmOC4uOWUyNTU3MyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC0yNSw3ICsyNSw3IEBACiAJY2hhciAqYnVmOwogCWludCByZXQgPSAtRU5PTUVNOwogCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZldmVudC0+cHJvZmlsZV9jb3VudCkpCisJaWYgKGV2ZW50LT5wcm9maWxlX2NvdW50KysgPiAwKQogCQlyZXR1cm4gMDsKIAogCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCkgewpAQCAtNTYsNyArNTYsNyBAQAogCQlwZXJmX3RyYWNlX2J1ZiA9IE5VTEw7CiAJfQogZmFpbF9idWY6Ci0JYXRvbWljX2RlYygmZXZlbnQtPnByb2ZpbGVfY291bnQpOworCWV2ZW50LT5wcm9maWxlX2NvdW50LS07CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODMsNyArODMsNyBAQAogewogCWNoYXIgKmJ1ZiwgKm5taV9idWY7CiAKLQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZldmVudC0+cHJvZmlsZV9jb3VudCkpCisJaWYgKC0tZXZlbnQtPnByb2ZpbGVfY291bnQgPiAwKQogCQlyZXR1cm47CiAKIAlldmVudC0+cHJvZmlsZV9kaXNhYmxlKGV2ZW50KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAxZDE4MzE1Li4xODliMDliIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC03OCw3ICs3OCw3IEBACiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gcmV0OwogCi1pbnQgdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQorc3RhdGljIGludCB0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgZW50OwpAQCAtOTEsNyArOTEsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKTsKIAogdm9pZCB0cmFjZV9kZXN0cm95X2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CkBAIC0xMDUsOSArMTA0LDI1IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAoraW50IHRyYWNlX2V2ZW50X3Jhd19pbml0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlpbnQgaWQ7CisKKwlpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChjYWxsLT5ldmVudCk7CisJaWYgKCFpZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FsbC0+aWQgPSBpZDsKKwlJTklUX0xJU1RfSEVBRCgmY2FsbC0+ZmllbGRzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfZXZlbnRfcmF3X2luaXQpOworCitzdGF0aWMgaW50IGZ0cmFjZV9ldmVudF9lbmFibGVfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCiAJCQkJCWludCBlbmFibGUpCiB7CisJaW50IHJldCA9IDA7CisKIAlzd2l0Y2ggKGVuYWJsZSkgewogCWNhc2UgMDoKIAkJaWYgKGNhbGwtPmVuYWJsZWQpIHsKQEAgLTExOCwxMiArMTMzLDIwIEBACiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKCFjYWxsLT5lbmFibGVkKSB7Ci0JCQljYWxsLT5lbmFibGVkID0gMTsKIAkJCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKLQkJCWNhbGwtPnJlZ2Z1bmMoY2FsbCk7CisJCQlyZXQgPSBjYWxsLT5yZWdmdW5jKGNhbGwpOworCQkJaWYgKHJldCkgeworCQkJCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOworCQkJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgZW5hYmxlIGV2ZW50ICIKKwkJCQkJIiVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhbGwtPmVuYWJsZWQgPSAxOwogCQl9CiAJCWJyZWFrOwogCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9jbGVhcl9ldmVudHModm9pZCkKQEAgLTQwMiw3ICs0MjUsNyBAQAogCWNhc2UgMDoKIAljYXNlIDE6CiAJCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKLQkJZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKGNhbGwsIHZhbCk7CisJCXJldCA9IGZ0cmFjZV9ldmVudF9lbmFibGVfZGlzYWJsZShjYWxsLCB2YWwpOwogCQltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKIAkJYnJlYWs7CiAKQEAgLTQxMiw3ICs0MzUsNyBAQAogCiAJKnBwb3MgKz0gY250OwogCi0JcmV0dXJuIGNudDsKKwlyZXR1cm4gcmV0ID8gcmV0IDogY250OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtOTEzLDcgKzkzNiw5IEBACiAJCSAJCSAgaWQpOwogCiAJaWYgKGNhbGwtPmRlZmluZV9maWVsZHMpIHsKLQkJcmV0ID0gY2FsbC0+ZGVmaW5lX2ZpZWxkcyhjYWxsKTsKKwkJcmV0ID0gdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoY2FsbCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gY2FsbC0+ZGVmaW5lX2ZpZWxkcyhjYWxsKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBpbml0aWFsaXplIHRyYWNlIHBvaW50IgogCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwppbmRleCBkZmY4Yzg0Li40NThlNWJmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC0xODQsMTAgKzE4NCw2IEBACiAJc3RydWN0IHN0cnVjdF9uYW1lIGZpZWxkOwkJCQkJXAogCWludCByZXQ7CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcyhldmVudF9jYWxsKTsJCQlcCi0JaWYgKHJldCkJCQkJCQkJXAotCQlyZXR1cm4gcmV0OwkJCQkJCVwKLQkJCQkJCQkJCVwKIAl0c3RydWN0OwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHJldDsJCQkJCQkJXApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IDQ1ZTZjMDEuLmIxMzQyYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTE0LDkgKzE0LDIwIEBACiAjaW5jbHVkZSAidHJhY2UuaCIKICNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAotc3RydWN0IGZncmFwaF9kYXRhIHsKK3N0cnVjdCBmZ3JhcGhfY3B1X2RhdGEgewogCXBpZF90CQlsYXN0X3BpZDsKIAlpbnQJCWRlcHRoOworCWludAkJaWdub3JlOworfTsKKworc3RydWN0IGZncmFwaF9kYXRhIHsKKwlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhCQkqY3B1X2RhdGE7CisKKwkvKiBQbGFjZSB0byBwcmVzZXJ2ZSBsYXN0IHByb2Nlc3NlZCBlbnRyeS4gKi8KKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeQllbnQ7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkJcmV0OworCWludAkJCQlmYWlsZWQ7CisJaW50CQkJCWNwdTsKIH07CiAKICNkZWZpbmUgVFJBQ0VfR1JBUEhfSU5ERU5UCTIKQEAgLTE3Niw3ICsxODcsNyBAQAogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPmJ1ZmZlcjsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnk7CiAKLQlpZiAodW5saWtlbHkobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQorCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQocGVyX2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKIAkJcmV0dXJuIDA7CiAKIAlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9HUkFQSF9FTlQsCkBAIC0yNDAsNyArMjUxLDcgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmVudHJ5OwogCi0JaWYgKHVubGlrZWx5KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKKwlpZiAodW5saWtlbHkoX190aGlzX2NwdV9yZWFkKHBlcl9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCiAJCXJldHVybjsKIAogCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0dSQVBIX1JFVCwKQEAgLTM4NCw3ICszOTUsNyBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIAotCWxhc3RfcGlkID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5sYXN0X3BpZCk7CisJbGFzdF9waWQgPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5sYXN0X3BpZCk7CiAKIAlpZiAoKmxhc3RfcGlkID09IHBpZCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKQEAgLTQzNSwyNyArNDQ2LDUwIEBACiBnZXRfcmV0dXJuX2Zvcl9sZWFmKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKIAkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmN1cnIpCiB7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKnJpbmdfaXRlcjsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOworCXN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICpyaW5nX2l0ZXIgPSBOVUxMOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKm5leHQ7CiAKLQlyaW5nX2l0ZXIgPSBpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdOworCS8qCisJICogSWYgdGhlIHByZXZpb3VzIG91dHB1dCBmYWlsZWQgdG8gd3JpdGUgdG8gdGhlIHNlcSBidWZmZXIsCisJICogdGhlbiB3ZSBqdXN0IHJldXNlIHRoZSBkYXRhIGZyb20gYmVmb3JlLgorCSAqLworCWlmIChkYXRhICYmIGRhdGEtPmZhaWxlZCkgeworCQljdXJyID0gJmRhdGEtPmVudDsKKwkJbmV4dCA9ICZkYXRhLT5yZXQ7CisJfSBlbHNlIHsKIAotCS8qIEZpcnN0IHBlZWsgdG8gY29tcGFyZSBjdXJyZW50IGVudHJ5IGFuZCB0aGUgbmV4dCBvbmUgKi8KLQlpZiAocmluZ19pdGVyKQotCQlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhyaW5nX2l0ZXIsIE5VTEwpOwotCWVsc2UgewotCS8qIFdlIG5lZWQgdG8gY29uc3VtZSB0aGUgY3VycmVudCBlbnRyeSB0byBzZWUgdGhlIG5leHQgb25lICovCi0JCXJpbmdfYnVmZmVyX2NvbnN1bWUoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LCBOVUxMKTsKLQkJZXZlbnQgPSByaW5nX2J1ZmZlcl9wZWVrKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwKLQkJCQkJTlVMTCk7CisJCXJpbmdfaXRlciA9IGl0ZXItPmJ1ZmZlcl9pdGVyW2l0ZXItPmNwdV07CisKKwkJLyogRmlyc3QgcGVlayB0byBjb21wYXJlIGN1cnJlbnQgZW50cnkgYW5kIHRoZSBuZXh0IG9uZSAqLworCQlpZiAocmluZ19pdGVyKQorCQkJZXZlbnQgPSByaW5nX2J1ZmZlcl9pdGVyX3BlZWsocmluZ19pdGVyLCBOVUxMKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byBjb25zdW1lIHRoZSBjdXJyZW50IGVudHJ5IHRvIHNlZQorCQkJICogdGhlIG5leHQgb25lLgorCQkJICovCisJCQlyaW5nX2J1ZmZlcl9jb25zdW1lKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwgTlVMTCk7CisJCQlldmVudCA9IHJpbmdfYnVmZmVyX3BlZWsoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LAorCQkJCQkJIE5VTEwpOworCQl9CisKKwkJaWYgKCFldmVudCkKKwkJCXJldHVybiBOVUxMOworCisJCW5leHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKworCQlpZiAoZGF0YSkgeworCQkJLyoKKwkJCSAqIFNhdmUgY3VycmVudCBhbmQgbmV4dCBlbnRyaWVzIGZvciBsYXRlciByZWZlcmVuY2UKKwkJCSAqIGlmIHRoZSBvdXRwdXQgZmFpbHMuCisJCQkgKi8KKwkJCWRhdGEtPmVudCA9ICpjdXJyOworCQkJZGF0YS0+cmV0ID0gKm5leHQ7CisJCX0KIAl9CiAKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCW5leHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQogCWlmIChuZXh0LT5lbnQudHlwZSAhPSBUUkFDRV9HUkFQSF9SRVQpCiAJCXJldHVybiBOVUxMOwogCkBAIC02NDAsNyArNjc0LDcgQEAKIAogCWlmIChkYXRhKSB7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmRlcHRoKTsKKwkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKIAogCQkvKgogCQkgKiBDb21tZW50cyBkaXNwbGF5IGF0ICsgMSB0byBkZXB0aC4gU2luY2UKQEAgLTY4OCw3ICs3MjIsNyBAQAogCiAJaWYgKGRhdGEpIHsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+ZGVwdGgpOworCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KS0+ZGVwdGgpOwogCiAJCSpkZXB0aCA9IGNhbGwtPmRlcHRoOwogCX0KQEAgLTc4MiwxOSArODE2LDM0IEBACiBwcmludF9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZmllbGQsIHN0cnVjdCB0cmFjZV9zZXEgKnMsCiAJCQlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JaW50IGNwdSA9IGl0ZXItPmNwdTsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICpjYWxsID0gJmZpZWxkLT5ncmFwaF9lbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmxlYWZfcmV0OworCXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCByZXQ7CisJaW50IGNwdSA9IGl0ZXItPmNwdTsKIAogCWlmIChwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCBUUkFDRV9HUkFQSF9FTlQsIGNhbGwtPmZ1bmMpKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlsZWFmX3JldCA9IGdldF9yZXR1cm5fZm9yX2xlYWYoaXRlciwgZmllbGQpOwogCWlmIChsZWFmX3JldCkKLQkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5X2xlYWYoaXRlciwgZmllbGQsIGxlYWZfcmV0LCBzKTsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfZW50cnlfbGVhZihpdGVyLCBmaWVsZCwgbGVhZl9yZXQsIHMpOwogCWVsc2UKLQkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5X25lc3RlZChpdGVyLCBmaWVsZCwgcywgY3B1KTsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfZW50cnlfbmVzdGVkKGl0ZXIsIGZpZWxkLCBzLCBjcHUpOwogCisJaWYgKGRhdGEpIHsKKwkJLyoKKwkJICogSWYgd2UgZmFpbGVkIHRvIHdyaXRlIG91ciBvdXRwdXQsIHRoZW4gd2UgbmVlZCB0byBtYWtlCisJCSAqIG5vdGUgb2YgaXQuIEJlY2F1c2Ugd2UgYWxyZWFkeSBjb25zdW1lZCBvdXIgZW50cnkuCisJCSAqLworCQlpZiAocy0+ZnVsbCkgeworCQkJZGF0YS0+ZmFpbGVkID0gMTsKKwkJCWRhdGEtPmNwdSA9IGNwdTsKKwkJfSBlbHNlCisJCQlkYXRhLT5mYWlsZWQgPSAwOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdApAQCAtODEwLDcgKzg1OSw3IEBACiAKIAlpZiAoZGF0YSkgewogCQlpbnQgY3B1ID0gaXRlci0+Y3B1OwotCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5kZXB0aCk7CisJCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CiAKIAkJLyoKIAkJICogQ29tbWVudHMgZGlzcGxheSBhdCArIDEgdG8gZGVwdGguIFRoaXMgaXMgdGhlCkBAIC04NzMsNyArOTIyLDcgQEAKIAlpbnQgaTsKIAogCWlmIChkYXRhKQotCQlkZXB0aCA9IHBlcl9jcHVfcHRyKGRhdGEsIGl0ZXItPmNwdSktPmRlcHRoOworCQlkZXB0aCA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBpdGVyLT5jcHUpLT5kZXB0aDsKIAogCWlmIChwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCAwLCAwKSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwpAQCAtOTQxLDggKzk5MCwzMyBAQAogZW51bSBwcmludF9saW5lX3QKIHByaW50X2dyYXBoX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCBjcHUgPSBpdGVyLT5jcHU7CisJaW50IHJldDsKKworCWlmIChkYXRhICYmIHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5pZ25vcmUpIHsKKwkJcGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmlnbm9yZSA9IDA7CisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbGFzdCBvdXRwdXQgZmFpbGVkLCB0aGVyZSdzIGEgcG9zc2liaWxpdHkgd2UgbmVlZAorCSAqIHRvIHByaW50IG91dCB0aGUgbWlzc2luZyBlbnRyeSB3aGljaCB3b3VsZCBuZXZlciBnbyBvdXQuCisJICovCisJaWYgKGRhdGEgJiYgZGF0YS0+ZmFpbGVkKSB7CisJCWZpZWxkID0gJmRhdGEtPmVudDsKKwkJaXRlci0+Y3B1ID0gZGF0YS0+Y3B1OworCQlyZXQgPSBwcmludF9ncmFwaF9lbnRyeShmaWVsZCwgcywgaXRlcik7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9IQU5ETEVEICYmIGl0ZXItPmNwdSAhPSBjcHUpIHsKKwkJCXBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBpdGVyLT5jcHUpLT5pZ25vcmUgPSAxOworCQkJcmV0ID0gVFJBQ0VfVFlQRV9OT19DT05TVU1FOworCQl9CisJCWl0ZXItPmNwdSA9IGNwdTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBUUkFDRV9HUkFQSF9FTlQ6IHsKQEAgLTk1Miw3ICsxMDI2LDcgQEAKIAkJICogc2l6ZW9mKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5KSBpcyB2ZXJ5IHNtYWxsLAogCQkgKiBpdCBjYW4gYmUgc2FmZWx5IHNhdmVkIGF0IHRoZSBzdGFjay4KIAkJICovCi0JCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICpmaWVsZCwgc2F2ZWQ7CisJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5IHNhdmVkOwogCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwogCQlzYXZlZCA9ICpmaWVsZDsKIAkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5KCZzYXZlZCwgcywgaXRlcik7CkBAIC0xMDMwLDMxICsxMTA0LDU0IEBACiBzdGF0aWMgdm9pZCBncmFwaF90cmFjZV9vcGVuKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAkvKiBwaWQgYW5kIGRlcHRoIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLwotCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgZmdyYXBoX2RhdGEpOworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YTsKIAlpbnQgY3B1OwogCisJaXRlci0+cHJpdmF0ZSA9IE5VTEw7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpCi0JCXByX3dhcm5pbmcoImZ1bmN0aW9uIGdyYXBoIHRyYWNlcjogbm90IGVub3VnaCBtZW1vcnlcbiIpOwotCWVsc2UKLQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQkJcGlkX3QgKnBpZCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+bGFzdF9waWQpOwotCQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+ZGVwdGgpOwotCQkJKnBpZCA9IC0xOwotCQkJKmRlcHRoID0gMDsKLQkJfQorCQlnb3RvIG91dF9lcnI7CisKKwlkYXRhLT5jcHVfZGF0YSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhKTsKKwlpZiAoIWRhdGEtPmNwdV9kYXRhKQorCQlnb3RvIG91dF9lcnJfZnJlZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcGlkX3QgKnBpZCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmxhc3RfcGlkKTsKKwkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKKwkJaW50ICppZ25vcmUgPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5pZ25vcmUpOworCQkqcGlkID0gLTE7CisJCSpkZXB0aCA9IDA7CisJCSppZ25vcmUgPSAwOworCX0KIAogCWl0ZXItPnByaXZhdGUgPSBkYXRhOworCisJcmV0dXJuOworCisgb3V0X2Vycl9mcmVlOgorCWtmcmVlKGRhdGEpOworIG91dF9lcnI6CisJcHJfd2FybmluZygiZnVuY3Rpb24gZ3JhcGggdHJhY2VyOiBub3QgZW5vdWdoIG1lbW9yeVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoX3RyYWNlX2Nsb3NlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKLQlmcmVlX3BlcmNwdShpdGVyLT5wcml2YXRlKTsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOworCisJaWYgKGRhdGEpIHsKKwkJZnJlZV9wZXJjcHUoZGF0YS0+Y3B1X2RhdGEpOworCQlrZnJlZShkYXRhKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyIGdyYXBoX3RyYWNlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImZ1bmN0aW9uX2dyYXBoIiwKIAkub3BlbgkJPSBncmFwaF90cmFjZV9vcGVuLAorCS5waXBlX29wZW4JPSBncmFwaF90cmFjZV9vcGVuLAogCS5jbG9zZQkJPSBncmFwaF90cmFjZV9jbG9zZSwKKwkucGlwZV9jbG9zZQk9IGdyYXBoX3RyYWNlX2Nsb3NlLAogCS53YWl0X3BpcGUJPSBwb2xsX3dhaXRfcGlwZSwKIAkuaW5pdAkJPSBncmFwaF90cmFjZV9pbml0LAogCS5yZXNldAkJPSBncmFwaF90cmFjZV9yZXNldCwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKaW5kZXggNjk1NDNhOS4uN2I5NzAwMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKQEAgLTIwLDEwICsyMCwxMCBAQAogCiAjZGVmaW5lIEJUU19CVUZGRVJfU0laRSAoMSA8PCAxMykKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBidHNfdHJhY2VyICosIHRyYWNlcik7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgY2hhcltCVFNfQlVGRkVSX1NJWkVdLCBidWZmZXIpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBidHNfdHJhY2VyICosIGh3Yl90cmFjZXIpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGNoYXJbQlRTX0JVRkZFUl9TSVpFXSwgaHdiX2J1ZmZlcik7CiAKLSNkZWZpbmUgdGhpc190cmFjZXIgcGVyX2NwdSh0cmFjZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSkKKyNkZWZpbmUgdGhpc190cmFjZXIgcGVyX2NwdShod2JfdHJhY2VyLCBzbXBfcHJvY2Vzc29yX2lkKCkpCiAKIHN0YXRpYyBpbnQgdHJhY2VfaHdfYnJhbmNoZXNfZW5hYmxlZCBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludCB0cmFjZV9od19icmFuY2hlc19zdXNwZW5kZWQgX19yZWFkX21vc3RseTsKQEAgLTMyLDEyICszMiwxMyBAQAogCiBzdGF0aWMgdm9pZCBidHNfdHJhY2VfaW5pdF9jcHUoaW50IGNwdSkKIHsKLQlwZXJfY3B1KHRyYWNlciwgY3B1KSA9Ci0JCWRzX3JlcXVlc3RfYnRzX2NwdShjcHUsIHBlcl9jcHUoYnVmZmVyLCBjcHUpLCBCVFNfQlVGRkVSX1NJWkUsCi0JCQkJICAgTlVMTCwgKHNpemVfdCktMSwgQlRTX0tFUk5FTCk7CisJcGVyX2NwdShod2JfdHJhY2VyLCBjcHUpID0KKwkJZHNfcmVxdWVzdF9idHNfY3B1KGNwdSwgcGVyX2NwdShod2JfYnVmZmVyLCBjcHUpLAorCQkJCSAgIEJUU19CVUZGRVJfU0laRSwgTlVMTCwgKHNpemVfdCktMSwKKwkJCQkgICBCVFNfS0VSTkVMKTsKIAotCWlmIChJU19FUlIocGVyX2NwdSh0cmFjZXIsIGNwdSkpKQotCQlwZXJfY3B1KHRyYWNlciwgY3B1KSA9IE5VTEw7CisJaWYgKElTX0VSUihwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpKQorCQlwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGJ0c190cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCkBAIC01MSw3ICs1Miw3IEBACiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJYnRzX3RyYWNlX2luaXRfY3B1KGNwdSk7CiAKLQkJaWYgKGxpa2VseShwZXJfY3B1KHRyYWNlciwgY3B1KSkpCisJCWlmIChsaWtlbHkocGVyX2NwdShod2JfdHJhY2VyLCBjcHUpKSkKIAkJCXRyYWNlX2h3X2JyYW5jaGVzX2VuYWJsZWQgPSAxOwogCX0KIAl0cmFjZV9od19icmFuY2hlc19zdXNwZW5kZWQgPSAwOwpAQCAtNjcsOSArNjgsOSBAQAogCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGxpa2VseShwZXJfY3B1KHRyYWNlciwgY3B1KSkpIHsKLQkJCWRzX3JlbGVhc2VfYnRzKHBlcl9jcHUodHJhY2VyLCBjcHUpKTsKLQkJCXBlcl9jcHUodHJhY2VyLCBjcHUpID0gTlVMTDsKKwkJaWYgKGxpa2VseShwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpKSB7CisJCQlkc19yZWxlYXNlX2J0cyhwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpOworCQkJcGVyX2NwdShod2JfdHJhY2VyLCBjcHUpID0gTlVMTDsKIAkJfQogCX0KIAl0cmFjZV9od19icmFuY2hlc19lbmFibGVkID0gMDsKQEAgLTgzLDggKzg0LDggQEAKIAogCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlpZiAobGlrZWx5KHBlcl9jcHUodHJhY2VyLCBjcHUpKSkKLQkJCWRzX3Jlc3VtZV9idHMocGVyX2NwdSh0cmFjZXIsIGNwdSkpOworCQlpZiAobGlrZWx5KHBlcl9jcHUoaHdiX3RyYWNlciwgY3B1KSkpCisJCQlkc19yZXN1bWVfYnRzKHBlcl9jcHUoaHdiX3RyYWNlciwgY3B1KSk7CiAJdHJhY2VfaHdfYnJhbmNoZXNfc3VzcGVuZGVkID0gMDsKIAlwdXRfb25saW5lX2NwdXMoKTsKIH0KQEAgLTk1LDggKzk2LDggQEAKIAogCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlpZiAobGlrZWx5KHBlcl9jcHUodHJhY2VyLCBjcHUpKSkKLQkJCWRzX3N1c3BlbmRfYnRzKHBlcl9jcHUodHJhY2VyLCBjcHUpKTsKKwkJaWYgKGxpa2VseShwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpKQorCQkJZHNfc3VzcGVuZF9idHMocGVyX2NwdShod2JfdHJhY2VyLCBjcHUpKTsKIAl0cmFjZV9od19icmFuY2hlc19zdXNwZW5kZWQgPSAxOwogCXB1dF9vbmxpbmVfY3B1cygpOwogfQpAQCAtMTE0LDE2ICsxMTUsMTYgQEAKIAkJCWJ0c190cmFjZV9pbml0X2NwdShjcHUpOwogCiAJCQlpZiAodHJhY2VfaHdfYnJhbmNoZXNfc3VzcGVuZGVkICYmCi0JCQkgICAgbGlrZWx5KHBlcl9jcHUodHJhY2VyLCBjcHUpKSkKLQkJCQlkc19zdXNwZW5kX2J0cyhwZXJfY3B1KHRyYWNlciwgY3B1KSk7CisJCQkgICAgbGlrZWx5KHBlcl9jcHUoaHdiX3RyYWNlciwgY3B1KSkpCisJCQkJZHNfc3VzcGVuZF9idHMocGVyX2NwdShod2JfdHJhY2VyLCBjcHUpKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKIAkJLyogVGhlIG5vdGlmaWNhdGlvbiBpcyBzZW50IHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiAqLwotCQlpZiAobGlrZWx5KHBlcl9jcHUodHJhY2VyLCBjcHUpKSkgewotCQkJZHNfcmVsZWFzZV9idHMocGVyX2NwdSh0cmFjZXIsIGNwdSkpOwotCQkJcGVyX2NwdSh0cmFjZXIsIGNwdSkgPSBOVUxMOworCQlpZiAobGlrZWx5KHBlcl9jcHUoaHdiX3RyYWNlciwgY3B1KSkpIHsKKwkJCWRzX3JlbGVhc2VfYnRzKHBlcl9jcHUoaHdiX3RyYWNlciwgY3B1KSk7CisJCQlwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkgPSBOVUxMOwogCQl9CiAJfQogCkBAIC0yNTgsOCArMjU5LDggQEAKIAogCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlpZiAobGlrZWx5KHBlcl9jcHUodHJhY2VyLCBjcHUpKSkKLQkJCWRzX3N1c3BlbmRfYnRzKHBlcl9jcHUodHJhY2VyLCBjcHUpKTsKKwkJaWYgKGxpa2VseShwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpKQorCQkJZHNfc3VzcGVuZF9idHMocGVyX2NwdShod2JfdHJhY2VyLCBjcHUpKTsKIAkvKgogCSAqIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgdHJhY2Ugb24gdGhlIHJlc3BlY3RpdmUgY3B1IHNpbmNlIGZ0cmFjZQogCSAqIGltcGxpY2l0bHkgYWRkcyB0aGUgcmVjb3JkIGZvciB0aGUgY3VycmVudCBjcHUuCkBAIC0yNjgsOCArMjY5LDggQEAKIAlvbl9lYWNoX2NwdSh0cmFjZV9idHNfY3B1LCBpdGVyLT50ciwgMSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJaWYgKGxpa2VseShwZXJfY3B1KHRyYWNlciwgY3B1KSkpCi0JCQlkc19yZXN1bWVfYnRzKHBlcl9jcHUodHJhY2VyLCBjcHUpKTsKKwkJaWYgKGxpa2VseShwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpKQorCQkJZHNfcmVzdW1lX2J0cyhwZXJfY3B1KGh3Yl90cmFjZXIsIGNwdSkpOwogCXB1dF9vbmxpbmVfY3B1cygpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwppbmRleCAzYWE3ZWFhLi4yOTc0YmM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKQEAgLTE1MSw2ICsxNTEsOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAl0cmFjZV9mdW5jdGlvbih0ciwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJLyogU2tpcCA1IGZ1bmN0aW9ucyB0byBnZXQgdG8gdGhlIGlycS9wcmVlbXB0IGVuYWJsZSBmdW5jdGlvbiAqLworCV9fdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCA1LCBwYyk7CiAKIAlpZiAoZGF0YS0+Y3JpdGljYWxfc2VxdWVuY2UgIT0gbWF4X3NlcXVlbmNlKQogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggYWZmNWY4MC4uMzc1ZjgxYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtMjgyLDYgKzI4MiwxOCBAQAogc3RhdGljIGludCBrcmV0cHJvYmVfZGlzcGF0Y2hlcihzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKIAkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKKy8qIENoZWNrIHRoZSBuYW1lIGlzIGdvb2QgZm9yIGV2ZW50L2dyb3VwICovCitzdGF0aWMgaW50IGNoZWNrX2V2ZW50X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICpuYW1lICE9ICdfJykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKCorK25hbWUgIT0gJ1wwJykgeworCQlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICFpc2RpZ2l0KCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBuZXcgdHJhY2VfcHJvYmUgYW5kIGluaXRpYWxpemUgaXQgKGluY2x1ZGluZyBrcHJvYmVzKS4KICAqLwpAQCAtMjkzLDEwICszMDUsMTEgQEAKIAkJCQkJICAgICBpbnQgbmFyZ3MsIGludCBpc19yZXR1cm4pCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAogCXRwID0ga3phbGxvYyhTSVpFT0ZfVFJBQ0VfUFJPQkUobmFyZ3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogCWlmIChzeW1ib2wpIHsKIAkJdHAtPnN5bWJvbCA9IGtzdHJkdXAoc3ltYm9sLCBHRlBfS0VSTkVMKTsKQEAgLTMxMiwxNCArMzI1LDIwIEBACiAJZWxzZQogCQl0cC0+cnAua3AucHJlX2hhbmRsZXIgPSBrcHJvYmVfZGlzcGF0Y2hlcjsKIAotCWlmICghZXZlbnQpCisJaWYgKCFldmVudCB8fCAhY2hlY2tfZXZlbnRfbmFtZShldmVudCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcjsKKwl9CisKIAl0cC0+Y2FsbC5uYW1lID0ga3N0cmR1cChldmVudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cC0+Y2FsbC5uYW1lKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKCFncm91cCkKKwlpZiAoIWdyb3VwIHx8ICFjaGVja19ldmVudF9uYW1lKGdyb3VwKSkgeworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycm9yOworCX0KKwogCXRwLT5jYWxsLnN5c3RlbSA9IGtzdHJkdXAoZ3JvdXAsIEdGUF9LRVJORUwpOwogCWlmICghdHAtPmNhbGwuc3lzdGVtKQogCQlnb3RvIGVycm9yOwpAQCAtMzMwLDcgKzM0OSw3IEBACiAJa2ZyZWUodHAtPmNhbGwubmFtZSk7CiAJa2ZyZWUodHAtPnN5bWJvbCk7CiAJa2ZyZWUodHApOwotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfcHJvYmVfYXJnKHN0cnVjdCBwcm9iZV9hcmcgKmFyZykKQEAgLTYwNiwyMyArNjI1LDIyIEBACiAJICovCiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cDsKIAlpbnQgaSwgcmV0ID0gMDsKLQlpbnQgaXNfcmV0dXJuID0gMDsKKwlpbnQgaXNfcmV0dXJuID0gMCwgaXNfZGVsZXRlID0gMDsKIAljaGFyICpzeW1ib2wgPSBOVUxMLCAqZXZlbnQgPSBOVUxMLCAqYXJnID0gTlVMTCwgKmdyb3VwID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CiAJdm9pZCAqYWRkciA9IE5VTEw7CiAJY2hhciBidWZbTUFYX0VWRU5UX05BTUVfTEVOXTsKIAotCWlmIChhcmdjIDwgMikgewotCQlwcl9pbmZvKCJQcm9iZSBwb2ludCBpcyBub3Qgc3BlY2lmaWVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQorCS8qIGFyZ2MgbXVzdCBiZSA+PSAxICovCiAJaWYgKGFyZ3ZbMF1bMF0gPT0gJ3AnKQogCQlpc19yZXR1cm4gPSAwOwogCWVsc2UgaWYgKGFyZ3ZbMF1bMF0gPT0gJ3InKQogCQlpc19yZXR1cm4gPSAxOworCWVsc2UgaWYgKGFyZ3ZbMF1bMF0gPT0gJy0nKQorCQlpc19kZWxldGUgPSAxOwogCWVsc2UgewotCQlwcl9pbmZvKCJQcm9iZSBkZWZpbml0aW9uIG11c3QgYmUgc3RhcnRlZCB3aXRoICdwJyBvciAncicuXG4iKTsKKwkJcHJfaW5mbygiUHJvYmUgZGVmaW5pdGlvbiBtdXN0IGJlIHN0YXJ0ZWQgd2l0aCAncCcsICdyJyBvciIKKwkJCSIgJy0nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjQyLDcgKzY2MCwyOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CisJaWYgKCFncm91cCkKKwkJZ3JvdXAgPSBLUFJPQkVfRVZFTlRfU1lTVEVNOwogCisJaWYgKGlzX2RlbGV0ZSkgeworCQlpZiAoIWV2ZW50KSB7CisJCQlwcl9pbmZvKCJEZWxldGUgY29tbWFuZCBuZWVkcyBhbiBldmVudCBuYW1lLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0cCA9IGZpbmRfcHJvYmVfZXZlbnQoZXZlbnQsIGdyb3VwKTsKKwkJaWYgKCF0cCkgeworCQkJcHJfaW5mbygiRXZlbnQgJXMvJXMgZG9lc24ndCBleGlzdC5cbiIsIGdyb3VwLCBldmVudCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCQkvKiBkZWxldGUgYW4gZXZlbnQgKi8KKwkJdW5yZWdpc3Rlcl90cmFjZV9wcm9iZSh0cCk7CisJCWZyZWVfdHJhY2VfcHJvYmUodHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJfaW5mbygiUHJvYmUgcG9pbnQgaXMgbm90IHNwZWNpZmllZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKGlzZGlnaXQoYXJndlsxXVswXSkpIHsKIAkJaWYgKGlzX3JldHVybikgewogCQkJcHJfaW5mbygiUmV0dXJuIHByb2JlIHBvaW50IG11c3QgYmUgYSBzeW1ib2wuXG4iKTsKQEAgLTY3MSwxNSArNzExLDEzIEBACiAJYXJnYyAtPSAyOyBhcmd2ICs9IDI7CiAKIAkvKiBzZXR1cCBhIHByb2JlICovCi0JaWYgKCFncm91cCkKLQkJZ3JvdXAgPSBLUFJPQkVfRVZFTlRfU1lTVEVNOwogCWlmICghZXZlbnQpIHsKIAkJLyogTWFrZSBhIG5ldyBldmVudCBuYW1lICovCiAJCWlmIChzeW1ib2wpCi0JCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjQCVzJStsZCIsCisJCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjXyVzXyVsZCIsCiAJCQkJIGlzX3JldHVybiA/ICdyJyA6ICdwJywgc3ltYm9sLCBvZmZzZXQpOwogCQllbHNlCi0JCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjQDB4JXAiLAorCQkJc25wcmludGYoYnVmLCBNQVhfRVZFTlRfTkFNRV9MRU4sICIlY18weCVwIiwKIAkJCQkgaXNfcmV0dXJuID8gJ3InIDogJ3AnLCBhZGRyKTsKIAkJZXZlbnQgPSBidWY7CiAJfQpAQCAtMTExMywxMCArMTE1MSw2IEBACiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSBmaWVsZDsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWV2ZW50X2NhbGwtPmRhdGE7CiAKLQlyZXQgPSB0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcyhldmVudF9jYWxsKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHJldDsKLQogCURFRklORV9GSUVMRCh1bnNpZ25lZCBsb25nLCBpcCwgRklFTERfU1RSSU5HX0lQLCAwKTsKIAlERUZJTkVfRklFTEQoaW50LCBuYXJncywgRklFTERfU1RSSU5HX05BUkdTLCAxKTsKIAkvKiBTZXQgYXJndW1lbnQgbmFtZXMgYXMgZmllbGRzICovCkBAIC0xMTMxLDEwICsxMTY1LDYgQEAKIAlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5IGZpZWxkOwogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSAoc3RydWN0IHRyYWNlX3Byb2JlICopZXZlbnRfY2FsbC0+ZGF0YTsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGV2ZW50X2NhbGwpOwotCWlmICghcmV0KQotCQlyZXR1cm4gcmV0OwotCiAJREVGSU5FX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGZ1bmMsIEZJRUxEX1NUUklOR19GVU5DLCAwKTsKIAlERUZJTkVfRklFTEQodW5zaWduZWQgbG9uZywgcmV0X2lwLCBGSUVMRF9TVFJJTkdfUkVUSVAsIDApOwogCURFRklORV9GSUVMRChpbnQsIG5hcmdzLCBGSUVMRF9TVFJJTkdfTkFSR1MsIDEpOwpAQCAtMTQzNCw3ICsxNDY0LDYgQEAKIAljYWxsLT51bnJlZ2Z1bmMgPSBwcm9iZV9ldmVudF9kaXNhYmxlOwogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKLQlhdG9taWNfc2V0KCZjYWxsLT5wcm9maWxlX2NvdW50LCAtMSk7CiAJY2FsbC0+cHJvZmlsZV9lbmFibGUgPSBwcm9iZV9wcm9maWxlX2VuYWJsZTsKIAljYWxsLT5wcm9maWxlX2Rpc2FibGUgPSBwcm9iZV9wcm9maWxlX2Rpc2FibGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jCmluZGV4IGRkZmEwZmQuLmZhZjM3ZmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2tzeW0uYwpAQCAtNzksMTEgKzc5LDEyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIgKi8KIAotdm9pZCBrc3ltX2hicF9oYW5kbGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpoYnAsIHZvaWQgKmRhdGEpCit2b2lkIGtzeW1faGJwX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmhicCwgaW50IG5taSwKKwkJICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGtzeW1fdHJhY2VfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZGF0YTsKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKIAlpbnQgcGM7CiAKQEAgLTIzNSw3ICsyMzYsOCBAQAogCW11dGV4X2xvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLCAma3N5bV9maWx0ZXJfaGVhZCwga3N5bV9obGlzdCkgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcFM6IiwgKHZvaWQgKillbnRyeS0+YXR0ci5icF9hZGRyKTsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXBTOiIsCisJCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZyllbnRyeS0+YXR0ci5icF9hZGRyKTsKIAkJaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9SKQogCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgInItLVxuIik7CiAJCWVsc2UgaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9XKQpAQCAtMjc3LDIxICsyNzksMjAgQEAKIHsKIAlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JY2hhciAqaW5wdXRfc3RyaW5nLCAqa3N5bW5hbWUgPSBOVUxMOworCWNoYXIgKmJ1ZiwgKmlucHV0X3N0cmluZywgKmtzeW1uYW1lID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGtzeW1fYWRkciA9IDA7CiAJaW50IHJldCwgb3AsIGNoYW5nZWQgPSAwOwogCi0JaW5wdXRfc3RyaW5nID0ga3phbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICghaW5wdXRfc3RyaW5nKQorCWJ1ZiA9IGt6YWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoaW5wdXRfc3RyaW5nLCBidWZmZXIsIGNvdW50KSkgewotCQlrZnJlZShpbnB1dF9zdHJpbmcpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaW5wdXRfc3RyaW5nW2NvdW50XSA9ICdcMCc7CisJcmV0ID0gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkKKwkJZ290byBvdXQ7CiAKLQlzdHJzdHJpcChpbnB1dF9zdHJpbmcpOworCWJ1Zltjb3VudF0gPSAnXDAnOworCWlucHV0X3N0cmluZyA9IHN0cnN0cmlwKGJ1Zik7CiAKIAkvKgogCSAqIENsZWFyIGFsbCBicmVha3BvaW50cyBpZjoKQEAgLTI5OSwxOCArMzAwLDE2IEBACiAJICogMjogZWNobyAwID4ga3N5bV90cmFjZV9maWx0ZXIKIAkgKiAzOiBlY2hvICIqOi0tLSIgPiBrc3ltX3RyYWNlX2ZpbHRlcgogCSAqLwotCWlmICghaW5wdXRfc3RyaW5nWzBdIHx8ICFzdHJjbXAoaW5wdXRfc3RyaW5nLCAiMCIpIHx8Ci0JICAgICFzdHJjbXAoaW5wdXRfc3RyaW5nLCAiKjotLS0iKSkgeworCWlmICghYnVmWzBdIHx8ICFzdHJjbXAoYnVmLCAiMCIpIHx8CisJICAgICFzdHJjbXAoYnVmLCAiKjotLS0iKSkgewogCQlfX2tzeW1fdHJhY2VfcmVzZXQoKTsKLQkJa2ZyZWUoaW5wdXRfc3RyaW5nKTsKLQkJcmV0dXJuIGNvdW50OworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKIAl9CiAKIAlyZXQgPSBvcCA9IHBhcnNlX2tzeW1fdHJhY2Vfc3RyKGlucHV0X3N0cmluZywgJmtzeW1uYW1lLCAma3N5bV9hZGRyKTsKLQlpZiAocmV0IDwgMCkgewotCQlrZnJlZShpbnB1dF9zdHJpbmcpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAltdXRleF9sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7CiAKQEAgLTMyMSw3ICszMjAsNyBAQAogCQkJaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgIT0gb3ApCiAJCQkJY2hhbmdlZCA9IDE7CiAJCQllbHNlCi0JCQkJZ290byBvdXQ7CisJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zMzYsMjggKzMzNSwyNCBAQAogCQkJaWYgKElTX0VSUihlbnRyeS0+a3N5bV9oYnApKQogCQkJCXJldCA9IFBUUl9FUlIoZW50cnktPmtzeW1faGJwKTsKIAkJCWVsc2UKLQkJCQlnb3RvIG91dDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAkJLyogRXJyb3Igb3IgInN5bWJvbDotLS0iIGNhc2U6IGRyb3AgaXQgKi8KIAkJa3N5bV9maWx0ZXJfZW50cnlfY291bnQtLTsKIAkJaGxpc3RfZGVsX3JjdSgmKGVudHJ5LT5rc3ltX2hsaXN0KSk7CiAJCXN5bmNocm9uaXplX3JjdSgpOwogCQlrZnJlZShlbnRyeSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfSBlbHNlIHsKIAkJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoNCkgKi8KLQkJaWYgKG9wID09IDApCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gcHJvY2Vzc19uZXdfa3N5bV9lbnRyeShrc3ltbmFtZSwgb3AsIGtzeW1fYWRkcik7CisJCWlmIChvcCkKKwkJCXJldCA9IHByb2Nlc3NfbmV3X2tzeW1fZW50cnkoa3N5bW5hbWUsIG9wLCBrc3ltX2FkZHIpOwogCX0KLW91dDoKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7Ci0KLQlrZnJlZShpbnB1dF9zdHJpbmcpOwotCi0JaWYgKCFyZXQpCi0JCXJldCA9IGNvdW50OwotCXJldHVybiByZXQ7CitvdXQ6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gIXJldCA/IGNvdW50IDogcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrc3ltX3RyYWNpbmdfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwppbmRleCBiNmMxMmM2Li44ZTQ2YjMzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCkBAIC0yMywxMyArMjMsMjEgQEAKIAogc3RhdGljIGludCBuZXh0X2V2ZW50X3R5cGUgPSBfX1RSQUNFX0xBU1RfVFlQRSArIDE7CiAKLXZvaWQgdHJhY2VfcHJpbnRfc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRyYWNlX3NlcSAqcykKK2ludCB0cmFjZV9wcmludF9zZXEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQogewogCWludCBsZW4gPSBzLT5sZW4gPj0gUEFHRV9TSVpFID8gUEFHRV9TSVpFIC0gMSA6IHMtPmxlbjsKKwlpbnQgcmV0OwogCi0Jc2VxX3dyaXRlKG0sIHMtPmJ1ZmZlciwgbGVuKTsKKwlyZXQgPSBzZXFfd3JpdGUobSwgcy0+YnVmZmVyLCBsZW4pOwogCi0JdHJhY2Vfc2VxX2luaXQocyk7CisJLyoKKwkgKiBPbmx5IHJlc2V0IHRoaXMgYnVmZmVyIGlmIHdlIHN1Y2Nlc3NmdWxseSB3cm90ZSB0byB0aGUKKwkgKiBzZXFfZmlsZSBidWZmZXIuCisJICovCisJaWYgKCFyZXQpCisJCXRyYWNlX3NlcV9pbml0KHMpOworCisJcmV0dXJuIHJldDsKIH0KIAogZW51bSBwcmludF9saW5lX3QgdHJhY2VfcHJpbnRfYnByaW50a19tc2dfb25seShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCkBAIC04NSw3ICs5Myw3IEBACiAJdmFfbGlzdCBhcDsKIAlpbnQgcmV0OwogCi0JaWYgKCFsZW4pCisJaWYgKHMtPmZ1bGwgfHwgIWxlbikKIAkJcmV0dXJuIDA7CiAKIAl2YV9zdGFydChhcCwgZm10KTsKQEAgLTkzLDggKzEwMSwxMCBAQAogCXZhX2VuZChhcCk7CiAKIAkvKiBJZiB3ZSBjYW4ndCB3cml0ZSBpdCBhbGwsIGRvbid0IGJvdGhlciB3cml0aW5nIGFueXRoaW5nICovCi0JaWYgKHJldCA+PSBsZW4pCisJaWYgKHJldCA+PSBsZW4pIHsKKwkJcy0+ZnVsbCA9IDE7CiAJCXJldHVybiAwOworCX0KIAogCXMtPmxlbiArPSByZXQ7CiAKQEAgLTExOSwxNCArMTI5LDE2IEBACiAJaW50IGxlbiA9IChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbjsKIAlpbnQgcmV0OwogCi0JaWYgKCFsZW4pCisJaWYgKHMtPmZ1bGwgfHwgIWxlbikKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSB2c25wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIGZtdCwgYXJncyk7CiAKIAkvKiBJZiB3ZSBjYW4ndCB3cml0ZSBpdCBhbGwsIGRvbid0IGJvdGhlciB3cml0aW5nIGFueXRoaW5nICovCi0JaWYgKHJldCA+PSBsZW4pCisJaWYgKHJldCA+PSBsZW4pIHsKKwkJcy0+ZnVsbCA9IDE7CiAJCXJldHVybiAwOworCX0KIAogCXMtPmxlbiArPSByZXQ7CiAKQEAgLTEzOSwxNCArMTUxLDE2IEBACiAJaW50IGxlbiA9IChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbjsKIAlpbnQgcmV0OwogCi0JaWYgKCFsZW4pCisJaWYgKHMtPmZ1bGwgfHwgIWxlbikKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBic3RyX3ByaW50ZihzLT5idWZmZXIgKyBzLT5sZW4sIGxlbiwgZm10LCBiaW5hcnkpOwogCiAJLyogSWYgd2UgY2FuJ3Qgd3JpdGUgaXQgYWxsLCBkb24ndCBib3RoZXIgd3JpdGluZyBhbnl0aGluZyAqLwotCWlmIChyZXQgPj0gbGVuKQorCWlmIChyZXQgPj0gbGVuKSB7CisJCXMtPmZ1bGwgPSAxOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlzLT5sZW4gKz0gcmV0OwogCkBAIC0xNjcsOSArMTgxLDE0IEBACiB7CiAJaW50IGxlbiA9IHN0cmxlbihzdHIpOwogCi0JaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKQorCWlmIChzLT5mdWxsKQogCQlyZXR1cm4gMDsKIAorCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkgeworCQlzLT5mdWxsID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbWVtY3B5KHMtPmJ1ZmZlciArIHMtPmxlbiwgc3RyLCBsZW4pOwogCXMtPmxlbiArPSBsZW47CiAKQEAgLTE3OCw5ICsxOTcsMTQgQEAKIAogaW50IHRyYWNlX3NlcV9wdXRjKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGNoYXIgYykKIHsKLQlpZiAocy0+bGVuID49IChQQUdFX1NJWkUgLSAxKSkKKwlpZiAocy0+ZnVsbCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAocy0+bGVuID49IChQQUdFX1NJWkUgLSAxKSkgeworCQlzLT5mdWxsID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcy0+YnVmZmVyW3MtPmxlbisrXSA9IGM7CiAKIAlyZXR1cm4gMTsKQEAgLTE4OCw5ICsyMTIsMTQgQEAKIAogaW50IHRyYWNlX3NlcV9wdXRtZW0oc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuKQogewotCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkKKwlpZiAocy0+ZnVsbCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpIHsKKwkJcy0+ZnVsbCA9IDE7CisJCXJldHVybiAwOworCX0KKwogCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIG1lbSwgbGVuKTsKIAlzLT5sZW4gKz0gbGVuOwogCkBAIC0yMDMsNiArMjMyLDkgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gbWVtOwogCWludCBpLCBqOwogCisJaWYgKHMtPmZ1bGwpCisJCXJldHVybiAwOworCiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsZW47IGkrKykgewogI2Vsc2UKQEAgLTIyMCw4ICsyNTIsMTMgQEAKIHsKIAl2b2lkICpyZXQ7CiAKLQlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpCisJaWYgKHMtPmZ1bGwpCisJCXJldHVybiAwOworCisJaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKSB7CisJCXMtPmZ1bGwgPSAxOwogCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAlyZXQgPSBzLT5idWZmZXIgKyBzLT5sZW47CiAJcy0+bGVuICs9IGxlbjsKQEAgLTIzMyw4ICsyNzAsMTQgQEAKIHsKIAl1bnNpZ25lZCBjaGFyICpwOwogCi0JaWYgKHMtPmxlbiA+PSAoUEFHRV9TSVpFIC0gMSkpCisJaWYgKHMtPmZ1bGwpCiAJCXJldHVybiAwOworCisJaWYgKHMtPmxlbiA+PSAoUEFHRV9TSVpFIC0gMSkpIHsKKwkJcy0+ZnVsbCA9IDE7CisJCXJldHVybiAwOworCX0KKwogCXAgPSBkX3BhdGgocGF0aCwgcy0+YnVmZmVyICsgcy0+bGVuLCBQQUdFX1NJWkUgLSBzLT5sZW4pOwogCWlmICghSVNfRVJSKHApKSB7CiAJCXAgPSBtYW5nbGVfcGF0aChzLT5idWZmZXIgKyBzLT5sZW4sIHAsICJcbiIpOwpAQCAtMjQ3LDYgKzI5MCw3IEBACiAJCXJldHVybiAxOwogCX0KIAorCXMtPmZ1bGwgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC0zNzMsNiArNDE3LDkgQEAKIAl1bnNpZ25lZCBsb25nIHZtc3RhcnQgPSAwOwogCWludCByZXQgPSAxOwogCisJaWYgKHMtPmZ1bGwpCisJCXJldHVybiAwOworCiAJaWYgKG1tKSB7CiAJCWNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggMjYxODVkNy4uMDI3MTc0MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMjgsOCArMjgsOCBAQAogc3RhdGljIHVuc2lnbmVkCQkJd2FrZXVwX3ByaW8gPSAtMTsKIHN0YXRpYyBpbnQJCQl3YWtldXBfcnQ7CiAKLXN0YXRpYyByYXdfc3BpbmxvY2tfdCB3YWtldXBfbG9jayA9Ci0JKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBhcmNoX3NwaW5sb2NrX3Qgd2FrZXVwX2xvY2sgPQorCShhcmNoX3NwaW5sb2NrX3QpX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogc3RhdGljIHZvaWQgX193YWtldXBfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiAKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQlnb3RvIG91dDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJndha2V1cF9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmd2FrZXVwX2xvY2spOwogCiAJLyogV2UgY291bGQgcmFjZSB3aXRoIGdyYWJiaW5nIHdha2V1cF9sb2NrICovCiAJaWYgKHVubGlrZWx5KCF0cmFjZXJfZW5hYmxlZCB8fCBuZXh0ICE9IHdha2V1cF90YXNrKSkKQEAgLTE2OSw3ICsxNjksNyBAQAogCiBvdXRfdW5sb2NrOgogCV9fd2FrZXVwX3Jlc2V0KHdha2V1cF90cmFjZSk7Ci0JX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZ3YWtldXBfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogb3V0OgogCWF0b21pY19kZWMoJndha2V1cF90cmFjZS0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CkBAIC0xOTMsOSArMTkzLDkgQEAKIAl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJndha2V1cF9sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmd2FrZXVwX2xvY2spOwogCV9fd2FrZXVwX3Jlc2V0KHRyKTsKLQlfX3Jhd19zcGluX3VubG9jaygmd2FrZXVwX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGludGVycnVwdHMgc2hvdWxkIGJlIG9mZiBmcm9tIHRyeV90b193YWtlX3VwICovCi0JX19yYXdfc3Bpbl9sb2NrKCZ3YWtldXBfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJndha2V1cF9sb2NrKTsKIAogCS8qIGNoZWNrIGZvciByYWNlcy4gKi8KIAlpZiAoIXRyYWNlcl9lbmFibGVkIHx8IHAtPnByaW8gPj0gd2FrZXVwX3ByaW8pCkBAIC0yNTUsNyArMjU1LDcgQEAKIAl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOwogCiBvdXRfbG9ja2VkOgotCV9fcmF3X3NwaW5fdW5sb2NrKCZ3YWtldXBfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmd2FrZXVwX2xvY2spOwogb3V0OgogCWF0b21pY19kZWMoJndha2V1cF90cmFjZS0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCmluZGV4IGRjOTgzMDkuLjI4MGZlYTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIAkvKiBEb24ndCBhbGxvdyBmbGlwcGluZyBvZiBtYXggdHJhY2VzIG5vdyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CiAKIAljbnQgPSByaW5nX2J1ZmZlcl9lbnRyaWVzKHRyLT5idWZmZXIpOwogCkBAIC04NSw3ICs4NSw3IEBACiAJCQlicmVhazsKIAl9CiAJdHJhY2luZ19vbigpOwotCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmZ0cmFjZV9tYXhfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJaWYgKGNvdW50KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwppbmRleCA4NTA0YWM3Li42NzhhNTEyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwpAQCAtMjcsOCArMjcsOCBAQAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3N0YWNrX3NpemU7Ci1zdGF0aWMgcmF3X3NwaW5sb2NrX3QgbWF4X3N0YWNrX2xvY2sgPQotCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgYXJjaF9zcGlubG9ja190IG1heF9zdGFja19sb2NrID0KKwkoYXJjaF9zcGlubG9ja190KV9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIHN0YXRpYyBpbnQgc3RhY2tfdHJhY2VfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHRyYWNlX2FjdGl2ZSk7CkBAIC01NCw3ICs1NCw3IEBACiAJCXJldHVybjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJm1heF9zdGFja19sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOwogCiAJLyogYSByYWNlIGNvdWxkIGhhdmUgYWxyZWFkeSB1cGRhdGVkIGl0ICovCiAJaWYgKHRoaXNfc2l6ZSA8PSBtYXhfc3RhY2tfc2l6ZSkKQEAgLTEwMyw3ICsxMDMsNyBAQAogCX0KIAogIG91dDoKLQlfX3Jhd19zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJm1heF9zdGFja19sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTE3MSw5ICsxNzEsOSBAQAogCQlyZXR1cm4gcmV0OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZtYXhfc3RhY2tfbG9jayk7CiAJKnB0ciA9IHZhbDsKLQlfX3Jhd19zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJm1heF9zdGFja19sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yMDcsNyArMjA3LDcgQEAKIHN0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlfX3Jhd19zcGluX2xvY2soJm1heF9zdGFja19sb2NrKTsKKwlhcmNoX3NwaW5fbG9jaygmbWF4X3N0YWNrX2xvY2spOwogCiAJaWYgKCpwb3MgPT0gMCkKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiBzdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogewotCV9fcmF3X3NwaW5fdW5sb2NrKCZtYXhfc3RhY2tfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmbWF4X3N0YWNrX2xvY2spOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA1NzUwMWQ5Li43NTI4OWYzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMjE3LDEwICsyMTcsNiBAQAogCWludCBpOwogCWludCBvZmZzZXQgPSBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBhcmdzKTsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGNhbGwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoY2FsbCwgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSwgRklMVEVSX09USEVSKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjQxLDEwICsyMzcsNiBAQAogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgdHJhY2U7CiAJaW50IHJldDsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGNhbGwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoY2FsbCwgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSwgRklMVEVSX09USEVSKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzMzLDEwICszMjUsNyBAQAogCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CiAJaWYgKCFzeXNfcmVmY291bnRfZW50ZXIpCiAJCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3N5c19lbnRlcihmdHJhY2Vfc3lzY2FsbF9lbnRlcik7Ci0JaWYgKHJldCkgewotCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIgotCQkJCSJzeXNjYWxsIGVudHJ5IHRyYWNlIHBvaW50Iik7Ci0JfSBlbHNlIHsKKwlpZiAoIXJldCkgewogCQlzZXRfYml0KG51bSwgZW5hYmxlZF9lbnRlcl9zeXNjYWxscyk7CiAJCXN5c19yZWZjb3VudF9lbnRlcisrOwogCX0KQEAgLTM3MCwxMCArMzU5LDcgQEAKIAltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOwogCWlmICghc3lzX3JlZmNvdW50X2V4aXQpCiAJCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3N5c19leGl0KGZ0cmFjZV9zeXNjYWxsX2V4aXQpOwotCWlmIChyZXQpIHsKLQkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSIKLQkJCQkic3lzY2FsbCBleGl0IHRyYWNlIHBvaW50Iik7Ci0JfSBlbHNlIHsKKwlpZiAoIXJldCkgewogCQlzZXRfYml0KG51bSwgZW5hYmxlZF9leGl0X3N5c2NhbGxzKTsKIAkJc3lzX3JlZmNvdW50X2V4aXQrKzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYwppbmRleCBmNjY5Mzk2Li5hNzk3NGE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKQEAgLTkzLDYgKzkzLDcgQEAKIAkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCQk9IGJhY2t0cmFjZV9hZGRyZXNzLAorCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDJmMjJjZjQuLjI1YzNlZDUgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zNjAsNiArMzYwLDcgQEAKIAlzZWxlY3QgREVCVUdfRlMgaWYgU1lTRlMKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgS0FMTFNZTVMKKwlzZWxlY3QgQ1JDMzIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgbWVtb3J5IGxlYWsKIAkgIGRldGVjdG9yLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24vZnJlZWluZyBpcyB0cmFjZWQgaW4gYSB3YXkKQEAgLTU3NSw3ICs1NzYsNyBAQAogCWRlcGVuZHMgb24gQlVHCiAJZGVwZW5kcyBvbiBBUk0gfHwgQVZSMzIgfHwgTTMyUiB8fCBNNjhLIHx8IFNQQVJDMzIgfHwgU1BBUkM2NCB8fCBcCiAJCSAgIEZSViB8fCBTVVBFUkggfHwgR0VORVJJQ19CVUcgfHwgQkxBQ0tGSU4gfHwgTU4xMDMwMAotCWRlZmF1bHQgIUVNQkVEREVECisJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBtYWtlIEJVRygpIHBhbmljcyBvdXRwdXQgdGhlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIKIAkgIG9mIHRoZSBCVUcgY2FsbCBhcyB3ZWxsIGFzIHRoZSBFSVAgYW5kIG9vcHMgdHJhY2UuICBUaGlzIGFpZHMKZGlmZiAtLWdpdCBhL2xpYi9hcmd2X3NwbGl0LmMgYi9saWIvYXJndl9zcGxpdC5jCmluZGV4IDUyMDVhOGQuLjRiMWIwODMgMTAwNjQ0Ci0tLSBhL2xpYi9hcmd2X3NwbGl0LmMKKysrIGIvbGliL2FyZ3Zfc3BsaXQuYwpAQCAtNCwxNyArNCwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyICpza2lwX3NlcChjb25zdCBjaGFyICpjcCkKLXsKLQl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKLQkJY3ArKzsKLQotCXJldHVybiBjcDsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfYXJnKGNvbnN0IGNoYXIgKmNwKQogewogCXdoaWxlICgqY3AgJiYgIWlzc3BhY2UoKmNwKSkKQEAgLTI4LDcgKzIxLDcgQEAKIAlpbnQgY291bnQgPSAwOwogCiAJd2hpbGUgKCpzdHIpIHsKLQkJc3RyID0gc2tpcF9zZXAoc3RyKTsKKwkJc3RyID0gc2tpcF9zcGFjZXMoc3RyKTsKIAkJaWYgKCpzdHIpIHsKIAkJCWNvdW50Kys7CiAJCQlzdHIgPSBza2lwX2FyZyhzdHIpOwpAQCAtODIsNyArNzUsNyBAQAogCWFyZ3ZwID0gYXJndjsKIAogCXdoaWxlICgqc3RyKSB7Ci0JCXN0ciA9IHNraXBfc2VwKHN0cik7CisJCXN0ciA9IHNraXBfc3BhY2VzKHN0cik7CiAKIAkJaWYgKCpzdHIpIHsKIAkJCWNvbnN0IGNoYXIgKnAgPSBzdHI7CmRpZmYgLS1naXQgYS9saWIvYml0bWFwLmMgYi9saWIvYml0bWFwLmMKaW5kZXggNzAyNTY1OC4uMTFiZjQ5NyAxMDA2NDQKLS0tIGEvbGliL2JpdG1hcC5jCisrKyBiL2xpYi9iaXRtYXAuYwpAQCAtMjcxLDYgKzI3MSw4NyBAQAogfQogRVhQT1JUX1NZTUJPTChfX2JpdG1hcF93ZWlnaHQpOwogCisjZGVmaW5lIEJJVE1BUF9GSVJTVF9XT1JEX01BU0soc3RhcnQpICh+MFVMIDw8ICgoc3RhcnQpICUgQklUU19QRVJfTE9ORykpCisKK3ZvaWQgYml0bWFwX3NldCh1bnNpZ25lZCBsb25nICptYXAsIGludCBzdGFydCwgaW50IG5yKQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSBtYXAgKyBCSVRfV09SRChzdGFydCk7CisJY29uc3QgaW50IHNpemUgPSBzdGFydCArIG5yOworCWludCBiaXRzX3RvX3NldCA9IEJJVFNfUEVSX0xPTkcgLSAoc3RhcnQgJSBCSVRTX1BFUl9MT05HKTsKKwl1bnNpZ25lZCBsb25nIG1hc2tfdG9fc2V0ID0gQklUTUFQX0ZJUlNUX1dPUkRfTUFTSyhzdGFydCk7CisKKwl3aGlsZSAobnIgLSBiaXRzX3RvX3NldCA+PSAwKSB7CisJCSpwIHw9IG1hc2tfdG9fc2V0OworCQluciAtPSBiaXRzX3RvX3NldDsKKwkJYml0c190b19zZXQgPSBCSVRTX1BFUl9MT05HOworCQltYXNrX3RvX3NldCA9IH4wVUw7CisJCXArKzsKKwl9CisJaWYgKG5yKSB7CisJCW1hc2tfdG9fc2V0ICY9IEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhzaXplKTsKKwkJKnAgfD0gbWFza190b19zZXQ7CisJfQorfQorRVhQT1JUX1NZTUJPTChiaXRtYXBfc2V0KTsKKwordm9pZCBiaXRtYXBfY2xlYXIodW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc3RhcnQsIGludCBucikKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gbWFwICsgQklUX1dPUkQoc3RhcnQpOworCWNvbnN0IGludCBzaXplID0gc3RhcnQgKyBucjsKKwlpbnQgYml0c190b19jbGVhciA9IEJJVFNfUEVSX0xPTkcgLSAoc3RhcnQgJSBCSVRTX1BFUl9MT05HKTsKKwl1bnNpZ25lZCBsb25nIG1hc2tfdG9fY2xlYXIgPSBCSVRNQVBfRklSU1RfV09SRF9NQVNLKHN0YXJ0KTsKKworCXdoaWxlIChuciAtIGJpdHNfdG9fY2xlYXIgPj0gMCkgeworCQkqcCAmPSB+bWFza190b19jbGVhcjsKKwkJbnIgLT0gYml0c190b19jbGVhcjsKKwkJYml0c190b19jbGVhciA9IEJJVFNfUEVSX0xPTkc7CisJCW1hc2tfdG9fY2xlYXIgPSB+MFVMOworCQlwKys7CisJfQorCWlmIChucikgeworCQltYXNrX3RvX2NsZWFyICY9IEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhzaXplKTsKKwkJKnAgJj0gfm1hc2tfdG9fY2xlYXI7CisJfQorfQorRVhQT1JUX1NZTUJPTChiaXRtYXBfY2xlYXIpOworCisvKgorICogYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEgLSBmaW5kIGEgY29udGlndW91cyBhbGlnbmVkIHplcm8gYXJlYQorICogQG1hcDogVGhlIGFkZHJlc3MgdG8gYmFzZSB0aGUgc2VhcmNoIG9uCisgKiBAc2l6ZTogVGhlIGJpdG1hcCBzaXplIGluIGJpdHMKKyAqIEBzdGFydDogVGhlIGJpdG51bWJlciB0byBzdGFydCBzZWFyY2hpbmcgYXQKKyAqIEBucjogVGhlIG51bWJlciBvZiB6ZXJvZWQgYml0cyB3ZSdyZSBsb29raW5nIGZvcgorICogQGFsaWduX21hc2s6IEFsaWdubWVudCBtYXNrIGZvciB6ZXJvIGFyZWEKKyAqCisgKiBUaGUgQGFsaWduX21hc2sgc2hvdWxkIGJlIG9uZSBsZXNzIHRoYW4gYSBwb3dlciBvZiAyOyB0aGUgZWZmZWN0IGlzIHRoYXQKKyAqIHRoZSBiaXQgb2Zmc2V0IG9mIGFsbCB6ZXJvIGFyZWFzIHRoaXMgZnVuY3Rpb24gZmluZHMgaXMgbXVsdGlwbGVzIG9mIHRoYXQKKyAqIHBvd2VyIG9mIDIuIEEgQGFsaWduX21hc2sgb2YgMCBtZWFucyBubyBhbGlnbm1lbnQgaXMgcmVxdWlyZWQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEodW5zaWduZWQgbG9uZyAqbWFwLAorCQkJCQkgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJIHVuc2lnbmVkIGludCBuciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ25fbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGluZGV4LCBlbmQsIGk7CithZ2FpbjoKKwlpbmRleCA9IGZpbmRfbmV4dF96ZXJvX2JpdChtYXAsIHNpemUsIHN0YXJ0KTsKKworCS8qIEFsaWduIGFsbG9jYXRpb24gKi8KKwlpbmRleCA9IF9fQUxJR05fTUFTSyhpbmRleCwgYWxpZ25fbWFzayk7CisKKwllbmQgPSBpbmRleCArIG5yOworCWlmIChlbmQgPiBzaXplKQorCQlyZXR1cm4gZW5kOworCWkgPSBmaW5kX25leHRfYml0KG1hcCwgZW5kLCBpbmRleCk7CisJaWYgKGkgPCBlbmQpIHsKKwkJc3RhcnQgPSBpICsgMTsKKwkJZ290byBhZ2FpbjsKKwl9CisJcmV0dXJuIGluZGV4OworfQorRVhQT1JUX1NZTUJPTChiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJlYSk7CisKIC8qCiAgKiBCaXRtYXAgcHJpbnRpbmcgJiBwYXJzaW5nIGZ1bmN0aW9uczogZmlyc3QgdmVyc2lvbiBieSBCaWxsIElyd2luLAogICogc2Vjb25kIHZlcnNpb24gYnkgUGF1bCBKYWNrc29uLCB0aGlyZCBieSBKb2UgS29ydHkuCmRpZmYgLS1naXQgYS9saWIvY2hlY2tzdW0uYyBiL2xpYi9jaGVja3N1bS5jCmluZGV4IGIyZTJmZDQuLjA5NzUwODcgMTAwNjQ0Ci0tLSBhL2xpYi9jaGVja3N1bS5jCisrKyBiL2xpYi9jaGVja3N1bS5jCkBAIC0zNyw3ICszNyw4IEBACiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZnJvbTMydG8xNih1bnNpZ25lZCBsb25nIHgpCisjaWZuZGVmIGRvX2NzdW0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZnJvbTMydG8xNih1bnNpZ25lZCBpbnQgeCkKIHsKIAkvKiBhZGQgdXAgMTYtYml0IGFuZCAxNi1iaXQgZm9yIDE2K2MgYml0ICovCiAJeCA9ICh4ICYgMHhmZmZmKSArICh4ID4+IDE2KTsKQEAgLTQ5LDE2ICs1MCwxNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBkb19jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4pCiB7CiAJaW50IG9kZCwgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwogCiAJaWYgKGxlbiA8PSAwKQogCQlnb3RvIG91dDsKIAlvZGQgPSAxICYgKHVuc2lnbmVkIGxvbmcpIGJ1ZmY7CiAJaWYgKG9kZCkgewogI2lmZGVmIF9fTElUVExFX0VORElBTgotCQlyZXN1bHQgPSAqYnVmZjsKLSNlbHNlCiAJCXJlc3VsdCArPSAoKmJ1ZmYgPDwgOCk7CisjZWxzZQorCQlyZXN1bHQgPSAqYnVmZjsKICNlbmRpZgogCQlsZW4tLTsKIAkJYnVmZisrOwpAQCAtNzMsOSArNzQsOSBAQAogCQl9CiAJCWNvdW50ID4+PSAxOwkJLyogbnIgb2YgMzItYml0IHdvcmRzLi4gKi8KIAkJaWYgKGNvdW50KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGNhcnJ5ID0gMDsKKwkJCXVuc2lnbmVkIGludCBjYXJyeSA9IDA7CiAJCQlkbyB7Ci0JCQkJdW5zaWduZWQgbG9uZyB3ID0gKih1bnNpZ25lZCBpbnQgKikgYnVmZjsKKwkJCQl1bnNpZ25lZCBpbnQgdyA9ICoodW5zaWduZWQgaW50ICopIGJ1ZmY7CiAJCQkJY291bnQtLTsKIAkJCQlidWZmICs9IDQ7CiAJCQkJcmVzdWx0ICs9IGNhcnJ5OwpAQCAtMTAyLDYgKzEwMyw3IEBACiBvdXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KKyNlbmRpZgogCiAvKgogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLApkaWZmIC0tZ2l0IGEvbGliL2NyYzMyLmMgYi9saWIvY3JjMzIuYwppbmRleCA0OWQxYzllLi4wMmUzYjMxIDEwMDY0NAotLS0gYS9saWIvY3JjMzIuYworKysgYi9saWIvY3JjMzIuYwpAQCAtNDIsNiArNDIsNDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRXRoZXJuZXQgQ1JDMzIgY2FsY3VsYXRpb25zIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKyNpZiBDUkNfTEVfQklUUyA9PSA4IHx8IENSQ19CRV9CSVRTID09IDgKKworc3RhdGljIGlubGluZSB1MzIKK2NyYzMyX2JvZHkodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCBzaXplX3QgbGVuLCBjb25zdCB1MzIgKnRhYikKK3sKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOCisjICBkZWZpbmUgRE9fQ1JDKHgpIGNyYyA9IHRhYlsoY3JjIF4gKHgpKSAmIDI1NSBdIF4gKGNyYyA+PiA4KQorIyBlbHNlCisjICBkZWZpbmUgRE9fQ1JDKHgpIGNyYyA9IHRhYlsoKGNyYyA+PiAyNCkgXiAoeCkpICYgMjU1XSBeIChjcmMgPDwgOCkKKyMgZW5kaWYKKwljb25zdCB1MzIgKmIgPSAoY29uc3QgdTMyICopYnVmOworCXNpemVfdCAgICByZW1fbGVuOworCisJLyogQWxpZ24gaXQgKi8KKwlpZiAodW5saWtlbHkoKGxvbmcpYiAmIDMgJiYgbGVuKSkgeworCQl1OCAqcCA9ICh1OCAqKWI7CisJCWRvIHsKKwkJCURPX0NSQygqcCsrKTsKKwkJfSB3aGlsZSAoKC0tbGVuKSAmJiAoKGxvbmcpcCkmMyk7CisJCWIgPSAodTMyICopcDsKKwl9CisJcmVtX2xlbiA9IGxlbiAmIDM7CisJLyogbG9hZCBkYXRhIDMyIGJpdHMgd2lkZSwgeG9yIGRhdGEgMzIgYml0cyB3aWRlLiAqLworCWxlbiA9IGxlbiA+PiAyOworCWZvciAoLS1iOyBsZW47IC0tbGVuKSB7CisJCWNyYyBePSAqKytiOyAvKiB1c2UgcHJlIGluY3JlbWVudCBmb3Igc3BlZWQgKi8KKwkJRE9fQ1JDKDApOworCQlET19DUkMoMCk7CisJCURPX0NSQygwKTsKKwkJRE9fQ1JDKDApOworCX0KKwlsZW4gPSByZW1fbGVuOworCS8qIEFuZCB0aGUgbGFzdCBmZXcgYnl0ZXMgKi8KKwlpZiAobGVuKSB7CisJCXU4ICpwID0gKHU4ICopKGIgKyAxKSAtIDE7CisJCWRvIHsKKwkJCURPX0NSQygqKytwKTsgLyogdXNlIHByZSBpbmNyZW1lbnQgZm9yIHNwZWVkICovCisJCX0gd2hpbGUgKC0tbGVuKTsKKwl9CisJcmV0dXJuIGNyYzsKK30KKyNlbmRpZgogLyoqCiAgKiBjcmMzMl9sZSgpIC0gQ2FsY3VsYXRlIGJpdHdpc2UgbGl0dGxlLWVuZGlhbiBFdGhlcm5ldCBBVVRPRElOIElJIENSQzMyCiAgKiBAY3JjOiBzZWVkIHZhbHVlIGZvciBjb21wdXRhdGlvbi4gIH4wIGZvciBFdGhlcm5ldCwgc29tZXRpbWVzIDAgZm9yCkBAIC03Miw0OCArMTE0LDEwIEBACiB1MzIgX19wdXJlIGNyYzMyX2xlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pCiB7CiAjIGlmIENSQ19MRV9CSVRTID09IDgKLQljb25zdCB1MzIgICAgICAqYiA9KHUzMiAqKXA7CiAJY29uc3QgdTMyICAgICAgKnRhYiA9IGNyYzMydGFibGVfbGU7CiAKLSMgaWZkZWYgX19MSVRUTEVfRU5ESUFOCi0jICBkZWZpbmUgRE9fQ1JDKHgpIGNyYyA9IHRhYlsgKGNyYyBeICh4KSkgJiAyNTUgXSBeIChjcmM+PjgpCi0jIGVsc2UKLSMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyAoKGNyYyA+PiAyNCkgXiAoeCkpICYgMjU1XSBeIChjcmM8PDgpCi0jIGVuZGlmCi0KIAljcmMgPSBfX2NwdV90b19sZTMyKGNyYyk7Ci0JLyogQWxpZ24gaXQgKi8KLQlpZih1bmxpa2VseSgoKGxvbmcpYikmMyAmJiBsZW4pKXsKLQkJZG8gewotCQkJdTggKnAgPSAodTggKiliOwotCQkJRE9fQ1JDKCpwKyspOwotCQkJYiA9ICh2b2lkICopcDsKLQkJfSB3aGlsZSAoKC0tbGVuKSAmJiAoKGxvbmcpYikmMyApOwotCX0KLQlpZihsaWtlbHkobGVuID49IDQpKXsKLQkJLyogbG9hZCBkYXRhIDMyIGJpdHMgd2lkZSwgeG9yIGRhdGEgMzIgYml0cyB3aWRlLiAqLwotCQlzaXplX3Qgc2F2ZV9sZW4gPSBsZW4gJiAzOwotCSAgICAgICAgbGVuID0gbGVuID4+IDI7Ci0JCS0tYjsgLyogdXNlIHByZSBpbmNyZW1lbnQgYmVsb3coKisrYikgZm9yIHNwZWVkICovCi0JCWRvIHsKLQkJCWNyYyBePSAqKytiOwotCQkJRE9fQ1JDKDApOwotCQkJRE9fQ1JDKDApOwotCQkJRE9fQ1JDKDApOwotCQkJRE9fQ1JDKDApOwotCQl9IHdoaWxlICgtLWxlbik7Ci0JCWIrKzsgLyogcG9pbnQgdG8gbmV4dCBieXRlKHMpICovCi0JCWxlbiA9IHNhdmVfbGVuOwotCX0KLQkvKiBBbmQgdGhlIGxhc3QgZmV3IGJ5dGVzICovCi0JaWYobGVuKXsKLQkJZG8gewotCQkJdTggKnAgPSAodTggKiliOwotCQkJRE9fQ1JDKCpwKyspOwotCQkJYiA9ICh2b2lkICopcDsKLQkJfSB3aGlsZSAoLS1sZW4pOwotCX0KLQorCWNyYyA9IGNyYzMyX2JvZHkoY3JjLCBwLCBsZW4sIHRhYik7CiAJcmV0dXJuIF9fbGUzMl90b19jcHUoY3JjKTsKICN1bmRlZiBFTkRJQU5fU0hJRlQKICN1bmRlZiBET19DUkMKQEAgLTE3MCw0NyArMTc0LDEwIEBACiB1MzIgX19wdXJlIGNyYzMyX2JlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pCiB7CiAjIGlmIENSQ19CRV9CSVRTID09IDgKLQljb25zdCB1MzIgICAgICAqYiA9KHUzMiAqKXA7CiAJY29uc3QgdTMyICAgICAgKnRhYiA9IGNyYzMydGFibGVfYmU7CiAKLSMgaWZkZWYgX19MSVRUTEVfRU5ESUFOCi0jICBkZWZpbmUgRE9fQ1JDKHgpIGNyYyA9IHRhYlsgKGNyYyBeICh4KSkgJiAyNTUgXSBeIChjcmM+PjgpCi0jIGVsc2UKLSMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyAoKGNyYyA+PiAyNCkgXiAoeCkpICYgMjU1XSBeIChjcmM8PDgpCi0jIGVuZGlmCi0KIAljcmMgPSBfX2NwdV90b19iZTMyKGNyYyk7Ci0JLyogQWxpZ24gaXQgKi8KLQlpZih1bmxpa2VseSgoKGxvbmcpYikmMyAmJiBsZW4pKXsKLQkJZG8gewotCQkJdTggKnAgPSAodTggKiliOwotCQkJRE9fQ1JDKCpwKyspOwotCQkJYiA9ICh1MzIgKilwOwotCQl9IHdoaWxlICgoLS1sZW4pICYmICgobG9uZyliKSYzICk7Ci0JfQotCWlmKGxpa2VseShsZW4gPj0gNCkpewotCQkvKiBsb2FkIGRhdGEgMzIgYml0cyB3aWRlLCB4b3IgZGF0YSAzMiBiaXRzIHdpZGUuICovCi0JCXNpemVfdCBzYXZlX2xlbiA9IGxlbiAmIDM7Ci0JICAgICAgICBsZW4gPSBsZW4gPj4gMjsKLQkJLS1iOyAvKiB1c2UgcHJlIGluY3JlbWVudCBiZWxvdygqKytiKSBmb3Igc3BlZWQgKi8KLQkJZG8gewotCQkJY3JjIF49ICorK2I7Ci0JCQlET19DUkMoMCk7Ci0JCQlET19DUkMoMCk7Ci0JCQlET19DUkMoMCk7Ci0JCQlET19DUkMoMCk7Ci0JCX0gd2hpbGUgKC0tbGVuKTsKLQkJYisrOyAvKiBwb2ludCB0byBuZXh0IGJ5dGUocykgKi8KLQkJbGVuID0gc2F2ZV9sZW47Ci0JfQotCS8qIEFuZCB0aGUgbGFzdCBmZXcgYnl0ZXMgKi8KLQlpZihsZW4pewotCQlkbyB7Ci0JCQl1OCAqcCA9ICh1OCAqKWI7Ci0JCQlET19DUkMoKnArKyk7Ci0JCQliID0gKHZvaWQgKilwOwotCQl9IHdoaWxlICgtLWxlbik7Ci0JfQorCWNyYyA9IGNyYzMyX2JvZHkoY3JjLCBwLCBsZW4sIHRhYik7CiAJcmV0dXJuIF9fYmUzMl90b19jcHUoY3JjKTsKICN1bmRlZiBFTkRJQU5fU0hJRlQKICN1bmRlZiBET19DUkMKZGlmZiAtLWdpdCBhL2xpYi9jdHlwZS5jIGIvbGliL2N0eXBlLmMKaW5kZXggZDAyYWNlMS4uMjZiYWE2MiAxMDA2NDQKLS0tIGEvbGliL2N0eXBlLmMKKysrIGIvbGliL2N0eXBlLmMKQEAgLTcsMzAgKzcsMzAgQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi11bnNpZ25lZCBjaGFyIF9jdHlwZVtdID0gewotX0MsX0MsX0MsX0MsX0MsX0MsX0MsX0MsCQkJLyogMC03ICovCi1fQyxfQ3xfUyxfQ3xfUyxfQ3xfUyxfQ3xfUyxfQ3xfUyxfQyxfQywJCS8qIDgtMTUgKi8KLV9DLF9DLF9DLF9DLF9DLF9DLF9DLF9DLAkJCS8qIDE2LTIzICovCi1fQyxfQyxfQyxfQyxfQyxfQyxfQyxfQywJCQkvKiAyNC0zMSAqLwotX1N8X1NQLF9QLF9QLF9QLF9QLF9QLF9QLF9QLAkJCS8qIDMyLTM5ICovCi1fUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCwJCQkvKiA0MC00NyAqLwotX0QsX0QsX0QsX0QsX0QsX0QsX0QsX0QsCQkJLyogNDgtNTUgKi8KLV9ELF9ELF9QLF9QLF9QLF9QLF9QLF9QLAkJCS8qIDU2LTYzICovCi1fUCxfVXxfWCxfVXxfWCxfVXxfWCxfVXxfWCxfVXxfWCxfVXxfWCxfVSwJLyogNjQtNzEgKi8KLV9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLAkJCS8qIDcyLTc5ICovCi1fVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSwJCQkvKiA4MC04NyAqLwotX1UsX1UsX1UsX1AsX1AsX1AsX1AsX1AsCQkJLyogODgtOTUgKi8KLV9QLF9MfF9YLF9MfF9YLF9MfF9YLF9MfF9YLF9MfF9YLF9MfF9YLF9MLAkvKiA5Ni0xMDMgKi8KLV9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLAkJCS8qIDEwNC0xMTEgKi8KLV9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLAkJCS8qIDExMi0xMTkgKi8KLV9MLF9MLF9MLF9QLF9QLF9QLF9QLF9DLAkJCS8qIDEyMC0xMjcgKi8KLTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCQkvKiAxMjgtMTQzICovCi0wLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAkJLyogMTQ0LTE1OSAqLwotX1N8X1NQLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLCAgIC8qIDE2MC0xNzUgKi8KLV9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLCAgICAgICAvKiAxNzYtMTkxICovCi1fVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSwgICAgICAgLyogMTkyLTIwNyAqLwotX1UsX1UsX1UsX1UsX1UsX1UsX1UsX1AsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX0wsICAgICAgIC8qIDIwOC0yMjMgKi8KLV9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLCAgICAgICAvKiAyMjQtMjM5ICovCi1fTCxfTCxfTCxfTCxfTCxfTCxfTCxfUCxfTCxfTCxfTCxfTCxfTCxfTCxfTCxfTH07ICAgICAgLyogMjQwLTI1NSAqLworY29uc3QgdW5zaWduZWQgY2hhciBfY3R5cGVbXSA9IHsKK19DLF9DLF9DLF9DLF9DLF9DLF9DLF9DLAkJCQkvKiAwLTcgKi8KK19DLF9DfF9TLF9DfF9TLF9DfF9TLF9DfF9TLF9DfF9TLF9DLF9DLAkJCS8qIDgtMTUgKi8KK19DLF9DLF9DLF9DLF9DLF9DLF9DLF9DLAkJCQkvKiAxNi0yMyAqLworX0MsX0MsX0MsX0MsX0MsX0MsX0MsX0MsCQkJCS8qIDI0LTMxICovCitfU3xfU1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsCQkJCS8qIDMyLTM5ICovCitfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCwJCQkJLyogNDAtNDcgKi8KK19ELF9ELF9ELF9ELF9ELF9ELF9ELF9ELAkJCQkvKiA0OC01NSAqLworX0QsX0QsX1AsX1AsX1AsX1AsX1AsX1AsCQkJCS8qIDU2LTYzICovCitfUCxfVXxfWCxfVXxfWCxfVXxfWCxfVXxfWCxfVXxfWCxfVXxfWCxfVSwJCS8qIDY0LTcxICovCitfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSwJCQkJLyogNzItNzkgKi8KK19VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLAkJCQkvKiA4MC04NyAqLworX1UsX1UsX1UsX1AsX1AsX1AsX1AsX1AsCQkJCS8qIDg4LTk1ICovCitfUCxfTHxfWCxfTHxfWCxfTHxfWCxfTHxfWCxfTHxfWCxfTHxfWCxfTCwJCS8qIDk2LTEwMyAqLworX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsCQkJCS8qIDEwNC0xMTEgKi8KK19MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLAkJCQkvKiAxMTItMTE5ICovCitfTCxfTCxfTCxfUCxfUCxfUCxfUCxfQywJCQkJLyogMTIwLTEyNyAqLworMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwJCQkvKiAxMjgtMTQzICovCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAkJCS8qIDE0NC0xNTkgKi8KK19TfF9TUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCxfUCwJLyogMTYwLTE3NSAqLworX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsCS8qIDE3Ni0xOTEgKi8KK19VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLAkvKiAxOTItMjA3ICovCitfVSxfVSxfVSxfVSxfVSxfVSxfVSxfUCxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfTCwJLyogMjA4LTIyMyAqLworX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsCS8qIDIyNC0yMzkgKi8KK19MLF9MLF9MLF9MLF9MLF9MLF9MLF9QLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MfTsJLyogMjQwLTI1NSAqLwogCiBFWFBPUlRfU1lNQk9MKF9jdHlwZSk7CmRpZmYgLS1naXQgYS9saWIvZGVidWdvYmplY3RzLmMgYi9saWIvZGVidWdvYmplY3RzLmMKaW5kZXggZWFlNTZmZC4uYTlhODk5NiAxMDA2NDQKLS0tIGEvbGliL2RlYnVnb2JqZWN0cy5jCisrKyBiL2xpYi9kZWJ1Z29iamVjdHMuYwpAQCAtMjYsMTQgKzI2LDE0IEBACiAKIHN0cnVjdCBkZWJ1Z19idWNrZXQgewogCXN0cnVjdCBobGlzdF9oZWFkCWxpc3Q7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwlyYXdfc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVja2V0CW9ial9oYXNoW09ERUJVR19IQVNIX1NJWkVdOwogCiBzdGF0aWMgc3RydWN0IGRlYnVnX29iagkJb2JqX3N0YXRpY19wb29sW09ERUJVR19QT09MX1NJWkVdIF9faW5pdGRhdGE7CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG9vbF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBvb2xfbG9jayk7CiAKIHN0YXRpYyBITElTVF9IRUFEKG9ial9wb29sKTsKIApAQCAtOTYsMTAgKzk2LDEwIEBACiAJCWlmICghbmV3KQogCQkJcmV0dXJuIG9ial9wb29sX2ZyZWU7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOwogCQlobGlzdF9hZGRfaGVhZCgmbmV3LT5ub2RlLCAmb2JqX3Bvb2wpOwogCQlvYmpfcG9vbF9mcmVlKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiBvYmpfcG9vbF9mcmVlOwogfQpAQCAtMTMzLDcgKzEzMyw3IEBACiB7CiAJc3RydWN0IGRlYnVnX29iaiAqb2JqID0gTlVMTDsKIAotCXNwaW5fbG9jaygmcG9vbF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZwb29sX2xvY2spOwogCWlmIChvYmpfcG9vbC5maXJzdCkgewogCQlvYmoJICAgID0gaGxpc3RfZW50cnkob2JqX3Bvb2wuZmlyc3QsIHR5cGVvZigqb2JqKSwgbm9kZSk7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQlpZiAob2JqX3Bvb2xfZnJlZSA8IG9ial9wb29sX21pbl9mcmVlKQogCQkJb2JqX3Bvb2xfbWluX2ZyZWUgPSBvYmpfcG9vbF9mcmVlOwogCX0KLQlzcGluX3VubG9jaygmcG9vbF9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBvb2xfbG9jayk7CiAKIAlyZXR1cm4gb2JqOwogfQpAQCAtMTY1LDcgKzE2NSw3IEBACiAJc3RydWN0IGRlYnVnX29iaiAqb2JqOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAob2JqX3Bvb2xfZnJlZSA+IE9ERUJVR19QT09MX1NJWkUpIHsKIAkJb2JqID0gaGxpc3RfZW50cnkob2JqX3Bvb2wuZmlyc3QsIHR5cGVvZigqb2JqKSwgbm9kZSk7CiAJCWhsaXN0X2RlbCgmb2JqLT5ub2RlKTsKQEAgLTE3NCwxMSArMTc0LDExIEBACiAJCSAqIFdlIHJlbGVhc2UgcG9vbF9sb2NrIGFjcm9zcyBrbWVtX2NhY2hlX2ZyZWUoKSB0bwogCQkgKiBhdm9pZCBjb250ZW50aW9uIG9uIHBvb2xfbG9jay4KIAkJICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CiAJCWttZW1fY2FjaGVfZnJlZShvYmpfY2FjaGUsIG9iaik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTkwLDcgKzE5MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2NoZWQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG9vbF9sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBzY2hlZHVsZSB3b3JrIHdoZW4gdGhlIHBvb2wgaXMgZmlsbGVkIGFuZCB0aGUgY2FjaGUgaXMKIAkgKiBpbml0aWFsaXplZDoKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWhsaXN0X2FkZF9oZWFkKCZvYmotPm5vZGUsICZvYmpfcG9vbCk7CiAJb2JqX3Bvb2xfZnJlZSsrOwogCW9ial9wb29sX3VzZWQtLTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CiAJaWYgKHNjaGVkKQogCQlzY2hlZHVsZV93b3JrKCZkZWJ1Z19vYmpfd29yayk7CiB9CkBAIC0yMjEsOSArMjIxLDkgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJPREVCVUc6IE91dCBvZiBtZW1vcnkuIE9ERUJVRyBkaXNhYmxlZFxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgT0RFQlVHX0hBU0hfU0laRTsgaSsrLCBkYisrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CiAJCWhsaXN0X21vdmVfbGlzdCgmZGItPmxpc3QsICZmcmVlbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJCS8qIE5vdyBmcmVlIHRoZW0gKi8KIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5vZGUsIHRtcCwgJmZyZWVsaXN0LCBub2RlKSB7CkBAIC0zMDMsMTQgKzMwMywxNCBAQAogCiAJZGIgPSBnZXRfYnVja2V0KCh1bnNpZ25lZCBsb25nKSBhZGRyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKIAogCW9iaiA9IGxvb2t1cF9vYmplY3QoYWRkciwgZGIpOwogCWlmICghb2JqKSB7CiAJCW9iaiA9IGFsbG9jX29iamVjdChhZGRyLCBkYiwgZGVzY3IpOwogCQlpZiAoIW9iaikgewogCQkJZGVidWdfb2JqZWN0c19lbmFibGVkID0gMDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIAkJCWRlYnVnX29iamVjdHNfb29tKCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTMyNyw3ICszMjcsNyBAQAogCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKIAkJZGVidWdfcHJpbnRfb2JqZWN0KG9iaiwgImluaXQiKTsKIAkJc3RhdGUgPSBvYmotPnN0YXRlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIAkJZGVidWdfb2JqZWN0X2ZpeHVwKGRlc2NyLT5maXh1cF9pbml0LCBhZGRyLCBzdGF0ZSk7CiAJCXJldHVybjsKIApAQCAtMzM4LDcgKzMzOCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMzg1LDcgKzM4NSw3IEBACiAKIAlkYiA9IGdldF9idWNrZXQoKHVuc2lnbmVkIGxvbmcpIGFkZHIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJb2JqID0gbG9va3VwX29iamVjdChhZGRyLCBkYik7CiAJaWYgKG9iaikgewpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKIAkJCWRlYnVnX3ByaW50X29iamVjdChvYmosICJhY3RpdmF0ZSIpOwogCQkJc3RhdGUgPSBvYmotPnN0YXRlOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCQkJZGVidWdfb2JqZWN0X2ZpeHVwKGRlc2NyLT5maXh1cF9hY3RpdmF0ZSwgYWRkciwgc3RhdGUpOwogCQkJcmV0dXJuOwogCkBAIC00MDgsMTEgKzQwOCwxMSBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCS8qCiAJICogVGhpcyBoYXBwZW5zIHdoZW4gYSBzdGF0aWMgb2JqZWN0IGlzIGFjdGl2YXRlZC4gV2UKIAkgKiBsZXQgdGhlIHR5cGUgc3BlY2lmaWMgY29kZSBkZWNpZGUgd2hldGhlciB0aGlzIGlzCkBAIC00MzgsNyArNDM4LDcgQEAKIAogCWRiID0gZ2V0X2J1Y2tldCgodW5zaWduZWQgbG9uZykgYWRkcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CiAKIAlvYmogPSBsb29rdXBfb2JqZWN0KGFkZHIsIGRiKTsKIAlpZiAob2JqKSB7CkBAIC00NjMsNyArNDYzLDcgQEAKIAkJZGVidWdfcHJpbnRfb2JqZWN0KCZvLCAiZGVhY3RpdmF0ZSIpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtNDgzLDcgKzQ4Myw3IEBACiAKIAlkYiA9IGdldF9idWNrZXQoKHVuc2lnbmVkIGxvbmcpIGFkZHIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJb2JqID0gbG9va3VwX29iamVjdChhZGRyLCBkYik7CiAJaWYgKCFvYmopCkBAIC00OTgsNyArNDk4LDcgQEAKIAljYXNlIE9ERUJVR19TVEFURV9BQ1RJVkU6CiAJCWRlYnVnX3ByaW50X29iamVjdChvYmosICJkZXN0cm95Iik7CiAJCXN0YXRlID0gb2JqLT5zdGF0ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiAJCWRlYnVnX29iamVjdF9maXh1cChkZXNjci0+Zml4dXBfZGVzdHJveSwgYWRkciwgc3RhdGUpOwogCQlyZXR1cm47CiAKQEAgLTUwOSw3ICs1MDksNyBAQAogCQlicmVhazsKIAl9CiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtNTI5LDcgKzUyOSw3IEBACiAKIAlkYiA9IGdldF9idWNrZXQoKHVuc2lnbmVkIGxvbmcpIGFkZHIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJb2JqID0gbG9va3VwX29iamVjdChhZGRyLCBkYik7CiAJaWYgKCFvYmopCkBAIC01MzksMTcgKzUzOSwxNyBAQAogCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKIAkJZGVidWdfcHJpbnRfb2JqZWN0KG9iaiwgImZyZWUiKTsKIAkJc3RhdGUgPSBvYmotPnN0YXRlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIAkJZGVidWdfb2JqZWN0X2ZpeHVwKGRlc2NyLT5maXh1cF9mcmVlLCBhZGRyLCBzdGF0ZSk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgogCQlobGlzdF9kZWwoJm9iai0+bm9kZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCQlmcmVlX29iamVjdChvYmopOwogCQlyZXR1cm47CiAJfQogb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfRlJFRQpAQCAtNTc1LDcgKzU3NSw3IEBACiAKIHJlcGVhdDoKIAkJY250ID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5vZGUsIHRtcCwgJmRiLT5saXN0LCBub2RlKSB7CiAJCQljbnQrKzsKIAkJCW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIG9iai0+b2JqZWN0OwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAJCQkJZGVidWdfcHJpbnRfb2JqZWN0KG9iaiwgImZyZWUiKTsKIAkJCQlkZXNjciA9IG9iai0+ZGVzY3I7CiAJCQkJc3RhdGUgPSBvYmotPnN0YXRlOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiAJCQkJZGVidWdfb2JqZWN0X2ZpeHVwKGRlc2NyLT5maXh1cF9mcmVlLAogCQkJCQkJICAgKHZvaWQgKikgb2FkZHIsIHN0YXRlKTsKIAkJCQlnb3RvIHJlcGVhdDsKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJCS8qIE5vdyBmcmVlIHRoZW0gKi8KIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5vZGUsIHRtcCwgJmZyZWVsaXN0LCBub2RlKSB7CkBAIC03ODMsNyArNzgzLDcgQEAKIAogCWRiID0gZ2V0X2J1Y2tldCgodW5zaWduZWQgbG9uZykgYWRkcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CiAKIAlvYmogPSBsb29rdXBfb2JqZWN0KGFkZHIsIGRiKTsKIAlpZiAoIW9iaiAmJiBzdGF0ZSAhPSBPREVCVUdfU1RBVEVfTk9ORSkgewpAQCAtODA3LDcgKzgwNyw3IEBACiAJfQogCXJlcyA9IDA7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIAlpZiAocmVzKQogCQlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgPSAwOwogCXJldHVybiByZXM7CkBAIC05MDcsNyArOTA3LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBPREVCVUdfSEFTSF9TSVpFOyBpKyspCi0JCXNwaW5fbG9ja19pbml0KCZvYmpfaGFzaFtpXS5sb2NrKTsKKwkJcmF3X3NwaW5fbG9ja19pbml0KCZvYmpfaGFzaFtpXS5sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBPREVCVUdfUE9PTF9TSVpFOyBpKyspCiAJCWhsaXN0X2FkZF9oZWFkKCZvYmpfc3RhdGljX3Bvb2xbaV0ubm9kZSwgJm9ial9wb29sKTsKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyBiL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYwppbmRleCA3NjA3NDIwLi5hNGU5NzFkIDEwMDY0NAotLS0gYS9saWIvZGVjb21wcmVzc19idW56aXAyLmMKKysrIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCkBAIC02MzcsNiArNjM3LDggQEAKIAogCS8qIEFsbG9jYXRlIGJ1bnppcF9kYXRhLiAgTW9zdCBmaWVsZHMgaW5pdGlhbGl6ZSB0byB6ZXJvLiAqLwogCWJkID0gKmJkcCA9IG1hbGxvYyhpKTsKKwlpZiAoIWJkKQorCQlyZXR1cm4gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJbWVtc2V0KGJkLCAwLCBzaXplb2Yoc3RydWN0IGJ1bnppcF9kYXRhKSk7CiAJLyogU2V0dXAgaW5wdXQgYnVmZmVyICovCiAJYmQtPmluYnVmID0gaW5idWY7CkBAIC02NjQsNiArNjY2LDggQEAKIAliZC0+ZGJ1ZlNpemUgPSAxMDAwMDAqKGktQlpoMCk7CiAKIAliZC0+ZGJ1ZiA9IGxhcmdlX21hbGxvYyhiZC0+ZGJ1ZlNpemUgKiBzaXplb2YoaW50KSk7CisJaWYgKCFiZC0+ZGJ1ZikKKwkJcmV0dXJuIFJFVFZBTF9PVVRfT0ZfTUVNT1JZOwogCXJldHVybiBSRVRWQUxfT0s7CiB9CiAKQEAgLTY4Niw3ICs2OTAsNyBAQAogCiAJaWYgKCFvdXRidWYpIHsKIAkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZXIiKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJfQogCWlmIChidWYpCiAJCWluYnVmID0gYnVmOwpAQCAtNjk0LDYgKzY5OCw3IEBACiAJCWluYnVmID0gbWFsbG9jKEJaSVAyX0lPQlVGX1NJWkUpOwogCWlmICghaW5idWYpIHsKIAkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnB1dCBidWZlciIpOworCQlpID0gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJCWdvdG8gZXhpdF8wOwogCX0KIAlpID0gc3RhcnRfYnVuemlwKCZiZCwgaW5idWYsIGxlbiwgZmlsbCk7CkBAIC03MjAsMTEgKzcyNSwxNCBAQAogCX0gZWxzZSBpZiAoaSA9PSBSRVRWQUxfVU5FWFBFQ1RFRF9PVVRQVVRfRU9GKSB7CiAJCWVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kcyB1bmV4cGVjdGVkbHkiKTsKIAl9CisJaWYgKCFiZCkKKwkJZ290byBleGl0XzE7CiAJaWYgKGJkLT5kYnVmKQogCQlsYXJnZV9mcmVlKGJkLT5kYnVmKTsKIAlpZiAocG9zKQogCQkqcG9zID0gYmQtPmluYnVmUG9zOwogCWZyZWUoYmQpOworZXhpdF8xOgogCWlmICghYnVmKQogCQlmcmVlKGluYnVmKTsKIGV4aXRfMDoKZGlmZiAtLWdpdCBhL2xpYi9keW5hbWljX2RlYnVnLmMgYi9saWIvZHluYW1pY19kZWJ1Zy5jCmluZGV4IGUyMmMxNDguLmY5MzUwMjkgMTAwNjQ0Ci0tLSBhL2xpYi9keW5hbWljX2RlYnVnLmMKKysrIGIvbGliL2R5bmFtaWNfZGVidWcuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9keW5hbWljX2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgpAQCAtMjA5LDggKzIxMCw3IEBACiAJCWNoYXIgKmVuZDsKIAogCQkvKiBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLwotCQl3aGlsZSAoKmJ1ZiAmJiBpc3NwYWNlKCpidWYpKQotCQkJYnVmKys7CisJCWJ1ZiA9IHNraXBfc3BhY2VzKGJ1Zik7CiAJCWlmICghKmJ1ZikKIAkJCWJyZWFrOwkvKiBvaCwgaXQgd2FzIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KIApkaWZmIC0tZ2l0IGEvbGliL2dlbmFsbG9jLmMgYi9saWIvZ2VuYWxsb2MuYwppbmRleCBlZWQyYmRiLi5lNjdmOTc0IDEwMDY0NAotLS0gYS9saWIvZ2VuYWxsb2MuYworKysgYi9saWIvZ2VuYWxsb2MuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5hbGxvYy5oPgogCiAKQEAgLTExNCw3ICsxMTUsNyBAQAogCXN0cnVjdCBnZW5fcG9vbF9jaHVuayAqY2h1bms7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBmbGFnczsKIAlpbnQgb3JkZXIgPSBwb29sLT5taW5fYWxsb2Nfb3JkZXI7Ci0JaW50IG5iaXRzLCBiaXQsIHN0YXJ0X2JpdCwgZW5kX2JpdDsKKwlpbnQgbmJpdHMsIHN0YXJ0X2JpdCwgZW5kX2JpdDsKIAogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwpAQCAtMTI5LDI5ICsxMzAsMTkgQEAKIAkJZW5kX2JpdCAtPSBuYml0cyArIDE7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNodW5rLT5sb2NrLCBmbGFncyk7Ci0JCWJpdCA9IC0xOwotCQl3aGlsZSAoYml0ICsgMSA8IGVuZF9iaXQpIHsKLQkJCWJpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdChjaHVuay0+Yml0cywgZW5kX2JpdCwgYml0ICsgMSk7Ci0JCQlpZiAoYml0ID49IGVuZF9iaXQpCi0JCQkJYnJlYWs7Ci0KLQkJCXN0YXJ0X2JpdCA9IGJpdDsKLQkJCWlmIChuYml0cyA+IDEpIHsKLQkJCQliaXQgPSBmaW5kX25leHRfYml0KGNodW5rLT5iaXRzLCBiaXQgKyBuYml0cywKLQkJCQkJCQliaXQgKyAxKTsKLQkJCQlpZiAoYml0IC0gc3RhcnRfYml0IDwgbmJpdHMpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlhZGRyID0gY2h1bmstPnN0YXJ0X2FkZHIgKwotCQkJCQkgICAgKCh1bnNpZ25lZCBsb25nKXN0YXJ0X2JpdCA8PCBvcmRlcik7Ci0JCQl3aGlsZSAobmJpdHMtLSkKLQkJCQlfX3NldF9iaXQoc3RhcnRfYml0KyssIGNodW5rLT5iaXRzKTsKKwkJc3RhcnRfYml0ID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEoY2h1bmstPmJpdHMsIGVuZF9iaXQsIDAsCisJCQkJCQluYml0cywgMCk7CisJCWlmIChzdGFydF9iaXQgPj0gZW5kX2JpdCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2h1bmstPmxvY2ssIGZsYWdzKTsKLQkJCXJlYWRfdW5sb2NrKCZwb29sLT5sb2NrKTsKLQkJCXJldHVybiBhZGRyOworCQkJY29udGludWU7CiAJCX0KKworCQlhZGRyID0gY2h1bmstPnN0YXJ0X2FkZHIgKyAoKHVuc2lnbmVkIGxvbmcpc3RhcnRfYml0IDw8IG9yZGVyKTsKKworCQliaXRtYXBfc2V0KGNodW5rLT5iaXRzLCBzdGFydF9iaXQsIG5iaXRzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2h1bmstPmxvY2ssIGZsYWdzKTsKKwkJcmVhZF91bmxvY2soJnBvb2wtPmxvY2spOworCQlyZXR1cm4gYWRkcjsKIAl9CiAJcmVhZF91bmxvY2soJnBvb2wtPmxvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL2lvbW11LWhlbHBlci5jIGIvbGliL2lvbW11LWhlbHBlci5jCmluZGV4IDc1ZGJkYTAuLmMwMjUxZjQgMTAwNjQ0Ci0tLSBhL2xpYi9pb21tdS1oZWxwZXIuYworKysgYi9saWIvaW9tbXUtaGVscGVyLmMKQEAgLTMsNDEgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYXJlYSh1bnNpZ25lZCBsb25nICptYXAsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgdW5zaWduZWQgaW50IG5yLAotCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrKQotewotCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGVuZCwgaTsKLWFnYWluOgotCWluZGV4ID0gZmluZF9uZXh0X3plcm9fYml0KG1hcCwgc2l6ZSwgc3RhcnQpOwotCi0JLyogQWxpZ24gYWxsb2NhdGlvbiAqLwotCWluZGV4ID0gKGluZGV4ICsgYWxpZ25fbWFzaykgJiB+YWxpZ25fbWFzazsKLQotCWVuZCA9IGluZGV4ICsgbnI7Ci0JaWYgKGVuZCA+PSBzaXplKQotCQlyZXR1cm4gLTE7Ci0JZm9yIChpID0gaW5kZXg7IGkgPCBlbmQ7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgbWFwKSkgewotCQkJc3RhcnQgPSBpKzE7Ci0JCQlnb3RvIGFnYWluOwotCQl9Ci0JfQotCXJldHVybiBpbmRleDsKLX0KLQotdm9pZCBpb21tdV9hcmVhX3Jlc2VydmUodW5zaWduZWQgbG9uZyAqbWFwLCB1bnNpZ25lZCBsb25nIGksIGludCBsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBpICsgbGVuOwotCXdoaWxlIChpIDwgZW5kKSB7Ci0JCV9fc2V0X2JpdChpLCBtYXApOwotCQlpKys7Ci0JfQotfQorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogCiBpbnQgaW9tbXVfaXNfc3Bhbl9ib3VuZGFyeSh1bnNpZ25lZCBpbnQgaW5kZXgsIHVuc2lnbmVkIGludCBuciwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgc2hpZnQsCkBAIC01NSwzMSArMjEsMjQgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduX21hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBpbmRleDsKKworCS8qIFdlIGRvbid0IHdhbnQgdGhlIGxhc3Qgb2YgdGhlIGxpbWl0ICovCisJc2l6ZSAtPSAxOwogYWdhaW46Ci0JaW5kZXggPSBmaW5kX25leHRfemVyb19hcmVhKG1hcCwgc2l6ZSwgc3RhcnQsIG5yLCBhbGlnbl9tYXNrKTsKLQlpZiAoaW5kZXggIT0gLTEpIHsKKwlpbmRleCA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKG1hcCwgc2l6ZSwgc3RhcnQsIG5yLCBhbGlnbl9tYXNrKTsKKwlpZiAoaW5kZXggPCBzaXplKSB7CiAJCWlmIChpb21tdV9pc19zcGFuX2JvdW5kYXJ5KGluZGV4LCBuciwgc2hpZnQsIGJvdW5kYXJ5X3NpemUpKSB7CiAJCQkvKiB3ZSBjb3VsZCBkbyBtb3JlIGVmZmVjdGl2ZWx5ICovCiAJCQlzdGFydCA9IGluZGV4ICsgMTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KLQkJaW9tbXVfYXJlYV9yZXNlcnZlKG1hcCwgaW5kZXgsIG5yKTsKKwkJYml0bWFwX3NldChtYXAsIGluZGV4LCBucik7CisJCXJldHVybiBpbmRleDsKIAl9Ci0JcmV0dXJuIGluZGV4OworCXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0woaW9tbXVfYXJlYV9hbGxvYyk7CiAKLXZvaWQgaW9tbXVfYXJlYV9mcmVlKHVuc2lnbmVkIGxvbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IG5yKQotewotCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBucjsKLQotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQlfX2NsZWFyX2JpdChzdGFydCwgbWFwKTsKLQkJc3RhcnQrKzsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGlvbW11X2FyZWFfZnJlZSk7Ci0KIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGlvX3BhZ2Vfc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL2xpYi9rZXJuZWxfbG9jay5jIGIvbGliL2tlcm5lbF9sb2NrLmMKaW5kZXggNGViZmE1YS4uYjEzNWQwNGEgMTAwNjQ0Ci0tLSBhL2xpYi9rZXJuZWxfbG9jay5jCisrKyBiL2xpYi9rZXJuZWxfbG9jay5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogRG9uJ3QgdXNlIGluIG5ldyBjb2RlLgogICovCi1zdGF0aWMgIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhrZXJuZWxfZmxhZyk7CitzdGF0aWMgIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9SQVdfU1BJTkxPQ0soa2VybmVsX2ZsYWcpOwogCiAKIC8qCkBAIC0zNiwxMiArMzYsMTIgQEAKICAqIElmIGl0IHN1Y2Nlc3NmdWxseSBnZXRzIHRoZSBsb2NrLCBpdCBzaG91bGQgaW5jcmVtZW50CiAgKiB0aGUgcHJlZW1wdGlvbiBjb3VudCBsaWtlIGFueSBzcGlubG9jayBkb2VzLgogICoKLSAqIChUaGlzIHdvcmtzIG9uIFVQIHRvbyAtIF9yYXdfc3Bpbl90cnlsb2NrIHdpbGwgbmV2ZXIKKyAqIChUaGlzIHdvcmtzIG9uIFVQIHRvbyAtIGRvX3Jhd19zcGluX3RyeWxvY2sgd2lsbCBuZXZlcgogICogcmV0dXJuIGZhbHNlIGluIHRoYXQgY2FzZSkKICAqLwogaW50IF9fbG9ja2Z1bmMgX19yZWFjcXVpcmVfa2VybmVsX2xvY2sodm9pZCkKIHsKLQl3aGlsZSAoIV9yYXdfc3Bpbl90cnlsb2NrKCZrZXJuZWxfZmxhZykpIHsKKwl3aGlsZSAoIWRvX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkgewogCQlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJY3B1X3JlbGF4KCk7CkBAIC01MiwyNyArNTIsMjcgQEAKIAogdm9pZCBfX2xvY2tmdW5jIF9fcmVsZWFzZV9rZXJuZWxfbG9jayh2b2lkKQogewotCV9yYXdfc3Bpbl91bmxvY2soJmtlcm5lbF9mbGFnKTsKKwlkb19yYXdfc3Bpbl91bmxvY2soJmtlcm5lbF9mbGFnKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiB9CiAKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIEJLTCBzcGlubG9ja3MgLSB3ZSB0cnkgdG8gYmUgcG9saXRlIGFib3V0IHByZWVtcHRpb24uCiAgKiBJZiBTTVAgaXMgbm90IG9uIChpZSBVUCBwcmVlbXB0aW9uKSwgdGhpcyBhbGwgZ29lcyBhd2F5IGJlY2F1c2UgdGhlCi0gKiBfcmF3X3NwaW5fdHJ5bG9jaygpIHdpbGwgYWx3YXlzIHN1Y2NlZWQuCisgKiBkb19yYXdfc3Bpbl90cnlsb2NrKCkgd2lsbCBhbHdheXMgc3VjY2VlZC4KICAqLwogI2lmZGVmIENPTkZJR19QUkVFTVBUCiBzdGF0aWMgaW5saW5lIHZvaWQgX19sb2NrX2tlcm5lbCh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmICh1bmxpa2VseSghX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkpIHsKKwlpZiAodW5saWtlbHkoIWRvX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkpIHsKIAkJLyoKIAkJICogSWYgcHJlZW1wdGlvbiB3YXMgZGlzYWJsZWQgZXZlbiBiZWZvcmUgdGhpcwogCQkgKiB3YXMgY2FsbGVkLCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGJlIHBvbGl0ZQogCQkgKiBhYm91dCAtIGp1c3Qgc3Bpbi4KIAkJICovCiAJCWlmIChwcmVlbXB0X2NvdW50KCkgPiAxKSB7Ci0JCQlfcmF3X3NwaW5fbG9jaygma2VybmVsX2ZsYWcpOworCQkJZG9fcmF3X3NwaW5fbG9jaygma2VybmVsX2ZsYWcpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTgyLDEwICs4MiwxMCBAQAogCQkgKi8KIAkJZG8gewogCQkJcHJlZW1wdF9lbmFibGUoKTsKLQkJCXdoaWxlIChzcGluX2lzX2xvY2tlZCgma2VybmVsX2ZsYWcpKQorCQkJd2hpbGUgKHJhd19zcGluX2lzX2xvY2tlZCgma2VybmVsX2ZsYWcpKQogCQkJCWNwdV9yZWxheCgpOwogCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCX0gd2hpbGUgKCFfcmF3X3NwaW5fdHJ5bG9jaygma2VybmVsX2ZsYWcpKTsKKwkJfSB3aGlsZSAoIWRvX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSk7CiAJfQogfQogCkBAIC05Niw3ICs5Niw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2xvY2tfa2VybmVsKHZvaWQpCiB7Ci0JX3Jhd19zcGluX2xvY2soJmtlcm5lbF9mbGFnKTsKKwlkb19yYXdfc3Bpbl9sb2NrKCZrZXJuZWxfZmxhZyk7CiB9CiAjZW5kaWYKIApAQCAtMTA2LDcgKzEwNiw3IEBACiAJICogdGhlIEJLTCBpcyBub3QgY292ZXJlZCBieSBsb2NrZGVwLCBzbyB3ZSBvcGVuLWNvZGUgdGhlCiAJICogdW5sb2NraW5nIHNlcXVlbmNlIChhbmQgdGh1cyBhdm9pZCB0aGUgZGVwLWNoYWluIG9wcyk6CiAJICovCi0JX3Jhd19zcGluX3VubG9jaygma2VybmVsX2ZsYWcpOworCWRvX3Jhd19zcGluX3VubG9jaygma2VybmVsX2ZsYWcpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKQEAgLTEyMiw4ICsxMjIsMTAgQEAKIAogCXRyYWNlX2xvY2tfa2VybmVsKGZ1bmMsIGZpbGUsIGxpbmUpOwogCi0JaWYgKGxpa2VseSghZGVwdGgpKQorCWlmIChsaWtlbHkoIWRlcHRoKSkgeworCQltaWdodF9zbGVlcCgpOwogCQlfX2xvY2tfa2VybmVsKCk7CisJfQogCWN1cnJlbnQtPmxvY2tfZGVwdGggPSBkZXB0aDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliL2xtYi5jIGIvbGliL2xtYi5jCmluZGV4IDAzNDNjMDUuLjljZWUxNzEgMTAwNjQ0Ci0tLSBhL2xpYi9sbWIuYworKysgYi9saWIvbG1iLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCXJldHVybiBsbWJfYWRkX3JlZ2lvbihfcmduLCBiYXNlLCBzaXplKTsKIH0KIAotbG9uZyBfX2luaXQgbG1iX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1NjQgYmFzZSwgdTY0IHNpemUpCitsb25nIGxtYl9vdmVybGFwc19yZWdpb24oc3RydWN0IGxtYl9yZWdpb24gKnJnbiwgdTY0IGJhc2UsIHU2NCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgaTsKIApAQCAtNDkzLDYgKzQ5MywxMSBAQAogCXJldHVybiAwOwogfQogCitpbnQgbG1iX2lzX3JlZ2lvbl9yZXNlcnZlZCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJcmV0dXJuIGxtYl9vdmVybGFwc19yZWdpb24oJmxtYi5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7Cit9CisKIC8qCiAgKiBHaXZlbiBhIDxiYXNlLCBsZW4+LCBmaW5kIHdoaWNoIG1lbW9yeSByZWdpb25zIGJlbG9uZyB0byB0aGlzIHJhbmdlLgogICogQWRqdXN0IHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBjb250aWd1b3VzIGNodW5rLgpkaWZmIC0tZ2l0IGEvbGliL3BhcnNlci5jIGIvbGliL3BhcnNlci5jCmluZGV4IGIwMGQwMjAuLmZiMzQ5NzcgMTAwNjQ0Ci0tLSBhL2xpYi9wYXJzZXIuYworKysgYi9saWIvcGFyc2VyLmMKQEAgLTU2LDEzICs1NiwxNiBAQAogCiAJCWFyZ3NbYXJnY10uZnJvbSA9IHM7CiAJCXN3aXRjaCAoKnArKykgewotCQljYXNlICdzJzoKLQkJCWlmIChzdHJsZW4ocykgPT0gMCkKKwkJY2FzZSAncyc6IHsKKwkJCXNpemVfdCBzdHJfbGVuID0gc3RybGVuKHMpOworCisJCQlpZiAoc3RyX2xlbiA9PSAwKQogCQkJCXJldHVybiAwOwotCQkJZWxzZSBpZiAobGVuID09IC0xIHx8IGxlbiA+IHN0cmxlbihzKSkKLQkJCQlsZW4gPSBzdHJsZW4ocyk7CisJCQlpZiAobGVuID09IC0xIHx8IGxlbiA+IHN0cl9sZW4pCisJCQkJbGVuID0gc3RyX2xlbjsKIAkJCWFyZ3NbYXJnY10udG8gPSBzICsgbGVuOwogCQkJYnJlYWs7CisJCX0KIAkJY2FzZSAnZCc6CiAJCQlzaW1wbGVfc3RydG9sKHMsICZhcmdzW2FyZ2NdLnRvLCAwKTsKIAkJCWdvdG8gbnVtOwpkaWZmIC0tZ2l0IGEvbGliL3BsaXN0LmMgYi9saWIvcGxpc3QuYwppbmRleCBkNmM2NGE4Li4xNDcxOTg4IDEwMDY0NAotLS0gYS9saWIvcGxpc3QuYworKysgYi9saWIvcGxpc3QuYwpAQCAtNTQsOSArNTQsMTEgQEAKIAogc3RhdGljIHZvaWQgcGxpc3RfY2hlY2tfaGVhZChzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZCkKIHsKLQlXQVJOX09OKCFoZWFkLT5sb2NrKTsKLQlpZiAoaGVhZC0+bG9jaykKLQkJV0FSTl9PTl9TTVAoIXNwaW5faXNfbG9ja2VkKGhlYWQtPmxvY2spKTsKKwlXQVJOX09OKCFoZWFkLT5yYXdsb2NrICYmICFoZWFkLT5zcGlubG9jayk7CisJaWYgKGhlYWQtPnJhd2xvY2spCisJCVdBUk5fT05fU01QKCFyYXdfc3Bpbl9pc19sb2NrZWQoaGVhZC0+cmF3bG9jaykpOworCWlmIChoZWFkLT5zcGlubG9jaykKKwkJV0FSTl9PTl9TTVAoIXNwaW5faXNfbG9ja2VkKGhlYWQtPnNwaW5sb2NrKSk7CiAJcGxpc3RfY2hlY2tfbGlzdCgmaGVhZC0+cHJpb19saXN0KTsKIAlwbGlzdF9jaGVja19saXN0KCZoZWFkLT5ub2RlX2xpc3QpOwogfQpkaWZmIC0tZ2l0IGEvbGliL3J3c2VtLXNwaW5sb2NrLmMgYi9saWIvcndzZW0tc3BpbmxvY2suYwppbmRleCA5ZGYzY2E1Li5jY2Y5NWJmIDEwMDY0NAotLS0gYS9saWIvcndzZW0tc3BpbmxvY2suYworKysgYi9saWIvcndzZW0tc3BpbmxvY2suYwpAQCAtMTcsNiArMTcsMTkgQEAKICNkZWZpbmUgUldTRU1fV0FJVElOR19GT1JfV1JJVEUJMHgwMDAwMDAwMgogfTsKIAoraW50IHJ3c2VtX2lzX2xvY2tlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJaW50IHJldCA9IDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChzcGluX3RyeWxvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKSkgeworCQlyZXQgPSAoc2VtLT5hY3Rpdml0eSAhPSAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocndzZW1faXNfbG9ja2VkKTsKKwogLyoKICAqIGluaXRpYWxpc2UgdGhlIHNlbWFwaG9yZQogICovCkBAIC0zNCw2ICs0Nyw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOwogfQorRVhQT1JUX1NZTUJPTChfX2luaXRfcndzZW0pOwogCiAvKgogICogaGFuZGxlIHRoZSBsb2NrIHJlbGVhc2Ugd2hlbiBwcm9jZXNzZXMgYmxvY2tlZCBvbiBpdCB0aGF0IGNhbiBub3cgcnVuCkBAIC0zMDUsMTIgKzMxOSwzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKIH0KIAotRVhQT1JUX1NZTUJPTChfX2luaXRfcndzZW0pOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl9yZWFkX3RyeWxvY2spOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fd3JpdGVfbmVzdGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX3dyaXRlX3RyeWxvY2spOwotRVhQT1JUX1NZTUJPTChfX3VwX3JlYWQpOwotRVhQT1JUX1NZTUJPTChfX3VwX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woX19kb3duZ3JhZGVfd3JpdGUpOwpkaWZmIC0tZ2l0IGEvbGliL3NwaW5sb2NrX2RlYnVnLmMgYi9saWIvc3BpbmxvY2tfZGVidWcuYwppbmRleCA5YzRiMDI1Li40NzU1Yjk4IDEwMDY0NAotLS0gYS9saWIvc3BpbmxvY2tfZGVidWcuYworKysgYi9saWIvc3BpbmxvY2tfZGVidWcuYwpAQCAtMTMsOCArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLXZvaWQgX19zcGluX2xvY2tfaW5pdChzcGlubG9ja190ICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKK3ZvaWQgX19yYXdfc3Bpbl9sb2NrX2luaXQocmF3X3NwaW5sb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAJLyoKQEAgLTIzLDEzICsyMywxMyBAQAogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopbG9jaywgc2l6ZW9mKCpsb2NrKSk7CiAJbG9ja2RlcF9pbml0X21hcCgmbG9jay0+ZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKICNlbmRpZgotCWxvY2stPnJhd19sb2NrID0gKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwlsb2NrLT5yYXdfbG9jayA9IChhcmNoX3NwaW5sb2NrX3QpX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAlsb2NrLT5tYWdpYyA9IFNQSU5MT0NLX01BR0lDOwogCWxvY2stPm93bmVyID0gU1BJTkxPQ0tfT1dORVJfSU5JVDsKIAlsb2NrLT5vd25lcl9jcHUgPSAtMTsKIH0KIAotRVhQT1JUX1NZTUJPTChfX3NwaW5fbG9ja19pbml0KTsKK0VYUE9SVF9TWU1CT0woX19yYXdfc3Bpbl9sb2NrX2luaXQpOwogCiB2b2lkIF9fcndsb2NrX2luaXQocndsb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQpAQCAtNDEsNyArNDEsNyBAQAogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopbG9jaywgc2l6ZW9mKCpsb2NrKSk7CiAJbG9ja2RlcF9pbml0X21hcCgmbG9jay0+ZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKICNlbmRpZgotCWxvY2stPnJhd19sb2NrID0gKHJhd19yd2xvY2tfdCkgX19SQVdfUldfTE9DS19VTkxPQ0tFRDsKKwlsb2NrLT5yYXdfbG9jayA9IChhcmNoX3J3bG9ja190KSBfX0FSQ0hfUldfTE9DS19VTkxPQ0tFRDsKIAlsb2NrLT5tYWdpYyA9IFJXTE9DS19NQUdJQzsKIAlsb2NrLT5vd25lciA9IFNQSU5MT0NLX09XTkVSX0lOSVQ7CiAJbG9jay0+b3duZXJfY3B1ID0gLTE7CkBAIC00OSw3ICs0OSw3IEBACiAKIEVYUE9SVF9TWU1CT0woX19yd2xvY2tfaW5pdCk7CiAKLXN0YXRpYyB2b2lkIHNwaW5fYnVnKHNwaW5sb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm1zZykKK3N0YXRpYyB2b2lkIHNwaW5fYnVnKHJhd19zcGlubG9ja190ICpsb2NrLCBjb25zdCBjaGFyICptc2cpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpvd25lciA9IE5VTEw7CiAKQEAgLTczLDcgKzczLDcgQEAKICNkZWZpbmUgU1BJTl9CVUdfT04oY29uZCwgbG9jaywgbXNnKSBpZiAodW5saWtlbHkoY29uZCkpIHNwaW5fYnVnKGxvY2ssIG1zZykKIAogc3RhdGljIGlubGluZSB2b2lkCi1kZWJ1Z19zcGluX2xvY2tfYmVmb3JlKHNwaW5sb2NrX3QgKmxvY2spCitkZWJ1Z19zcGluX2xvY2tfYmVmb3JlKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCVNQSU5fQlVHX09OKGxvY2stPm1hZ2ljICE9IFNQSU5MT0NLX01BR0lDLCBsb2NrLCAiYmFkIG1hZ2ljIik7CiAJU1BJTl9CVUdfT04obG9jay0+b3duZXIgPT0gY3VycmVudCwgbG9jaywgInJlY3Vyc2lvbiIpOwpAQCAtODEsMTYgKzgxLDE2IEBACiAJCQkJCQkJbG9jaywgImNwdSByZWN1cnNpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3NwaW5fbG9ja19hZnRlcihzcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3NwaW5fbG9ja19hZnRlcihyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlsb2NrLT5vd25lcl9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWxvY2stPm93bmVyID0gY3VycmVudDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJU1BJTl9CVUdfT04obG9jay0+bWFnaWMgIT0gU1BJTkxPQ0tfTUFHSUMsIGxvY2ssICJiYWQgbWFnaWMiKTsKLQlTUElOX0JVR19PTighc3Bpbl9pc19sb2NrZWQobG9jayksIGxvY2ssICJhbHJlYWR5IHVubG9ja2VkIik7CisJU1BJTl9CVUdfT04oIXJhd19zcGluX2lzX2xvY2tlZChsb2NrKSwgbG9jaywgImFscmVhZHkgdW5sb2NrZWQiKTsKIAlTUElOX0JVR19PTihsb2NrLT5vd25lciAhPSBjdXJyZW50LCBsb2NrLCAid3Jvbmcgb3duZXIiKTsKIAlTUElOX0JVR19PTihsb2NrLT5vd25lcl9jcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwKIAkJCQkJCQlsb2NrLCAid3JvbmcgQ1BVIik7CkBAIC05OCw3ICs5OCw3IEBACiAJbG9jay0+b3duZXJfY3B1ID0gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIF9fc3Bpbl9sb2NrX2RlYnVnKHNwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgdm9pZCBfX3NwaW5fbG9ja19kZWJ1ZyhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1NjQgaTsKIAl1NjQgbG9vcHMgPSBsb29wc19wZXJfamlmZnkgKiBIWjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAJZm9yICg7OykgewogCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgewotCQkJaWYgKF9fcmF3X3NwaW5fdHJ5bG9jaygmbG9jay0+cmF3X2xvY2spKQorCQkJaWYgKGFyY2hfc3Bpbl90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpCiAJCQkJcmV0dXJuOwogCQkJX19kZWxheSgxKTsKIAkJfQpAQCAtMTI1LDE3ICsxMjUsMTcgQEAKIAl9CiB9CiAKLXZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3ZvaWQgZG9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlkZWJ1Z19zcGluX2xvY2tfYmVmb3JlKGxvY2spOwotCWlmICh1bmxpa2VseSghX19yYXdfc3Bpbl90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpKQorCWlmICh1bmxpa2VseSghYXJjaF9zcGluX3RyeWxvY2soJmxvY2stPnJhd19sb2NrKSkpCiAJCV9fc3Bpbl9sb2NrX2RlYnVnKGxvY2spOwogCWRlYnVnX3NwaW5fbG9ja19hZnRlcihsb2NrKTsKIH0KIAotaW50IF9yYXdfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCitpbnQgZG9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlpbnQgcmV0ID0gX19yYXdfc3Bpbl90cnlsb2NrKCZsb2NrLT5yYXdfbG9jayk7CisJaW50IHJldCA9IGFyY2hfc3Bpbl90cnlsb2NrKCZsb2NrLT5yYXdfbG9jayk7CiAKIAlpZiAocmV0KQogCQlkZWJ1Z19zcGluX2xvY2tfYWZ0ZXIobG9jayk7CkBAIC0xNDgsMTAgKzE0OCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgX3Jhd19zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQordm9pZCBkb19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJZGVidWdfc3Bpbl91bmxvY2sobG9jayk7Ci0JX19yYXdfc3Bpbl91bmxvY2soJmxvY2stPnJhd19sb2NrKTsKKwlhcmNoX3NwaW5fdW5sb2NrKCZsb2NrLT5yYXdfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ3bG9ja19idWcocndsb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm1zZykKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJZm9yICg7OykgewogCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgewotCQkJaWYgKF9fcmF3X3JlYWRfdHJ5bG9jaygmbG9jay0+cmF3X2xvY2spKQorCQkJaWYgKGFyY2hfcmVhZF90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpCiAJCQkJcmV0dXJuOwogCQkJX19kZWxheSgxKTsKIAkJfQpAQCAtMTkzLDE1ICsxOTMsMTUgQEAKIH0KICNlbmRpZgogCi12b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQordm9pZCBkb19yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQogewogCVJXTE9DS19CVUdfT04obG9jay0+bWFnaWMgIT0gUldMT0NLX01BR0lDLCBsb2NrLCAiYmFkIG1hZ2ljIik7Ci0JX19yYXdfcmVhZF9sb2NrKCZsb2NrLT5yYXdfbG9jayk7CisJYXJjaF9yZWFkX2xvY2soJmxvY2stPnJhd19sb2NrKTsKIH0KIAotaW50IF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoraW50IGRvX3Jhd19yZWFkX3RyeWxvY2socndsb2NrX3QgKmxvY2spCiB7Ci0JaW50IHJldCA9IF9fcmF3X3JlYWRfdHJ5bG9jaygmbG9jay0+cmF3X2xvY2spOworCWludCByZXQgPSBhcmNoX3JlYWRfdHJ5bG9jaygmbG9jay0+cmF3X2xvY2spOwogCiAjaWZuZGVmIENPTkZJR19TTVAKIAkvKgpAQCAtMjEyLDEwICsyMTIsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIF9yYXdfcmVhZF91bmxvY2socndsb2NrX3QgKmxvY2spCit2b2lkIGRvX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlSV0xPQ0tfQlVHX09OKGxvY2stPm1hZ2ljICE9IFJXTE9DS19NQUdJQywgbG9jaywgImJhZCBtYWdpYyIpOwotCV9fcmF3X3JlYWRfdW5sb2NrKCZsb2NrLT5yYXdfbG9jayk7CisJYXJjaF9yZWFkX3VubG9jaygmbG9jay0+cmF3X2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfd3JpdGVfbG9ja19iZWZvcmUocndsb2NrX3QgKmxvY2spCkBAIC0yNTEsNyArMjUxLDcgQEAKIAogCWZvciAoOzspIHsKIAkJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspIHsKLQkJCWlmIChfX3Jhd193cml0ZV90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpCisJCQlpZiAoYXJjaF93cml0ZV90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpCiAJCQkJcmV0dXJuOwogCQkJX19kZWxheSgxKTsKIAkJfQpAQCAtMjY4LDE2ICsyNjgsMTYgQEAKIH0KICNlbmRpZgogCi12b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKK3ZvaWQgZG9fcmF3X3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCiB7CiAJZGVidWdfd3JpdGVfbG9ja19iZWZvcmUobG9jayk7Ci0JX19yYXdfd3JpdGVfbG9jaygmbG9jay0+cmF3X2xvY2spOworCWFyY2hfd3JpdGVfbG9jaygmbG9jay0+cmF3X2xvY2spOwogCWRlYnVnX3dyaXRlX2xvY2tfYWZ0ZXIobG9jayk7CiB9CiAKLWludCBfcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCitpbnQgZG9fcmF3X3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCiB7Ci0JaW50IHJldCA9IF9fcmF3X3dyaXRlX3RyeWxvY2soJmxvY2stPnJhd19sb2NrKTsKKwlpbnQgcmV0ID0gYXJjaF93cml0ZV90cnlsb2NrKCZsb2NrLT5yYXdfbG9jayk7CiAKIAlpZiAocmV0KQogCQlkZWJ1Z193cml0ZV9sb2NrX2FmdGVyKGxvY2spOwpAQCAtMjkwLDggKzI5MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykKK3ZvaWQgZG9fcmF3X3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlkZWJ1Z193cml0ZV91bmxvY2sobG9jayk7Ci0JX19yYXdfd3JpdGVfdW5sb2NrKCZsb2NrLT5yYXdfbG9jayk7CisJYXJjaF93cml0ZV91bmxvY2soJmxvY2stPnJhd19sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmcuYyBiL2xpYi9zdHJpbmcuYwppbmRleCBlOTY0MjFhLi45Zjc1YjRlIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC0zMzgsMjAgKzMzOCwzNCBAQAogI2VuZGlmCiAKIC8qKgotICogc3Ryc3RyaXAgLSBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBAcy4KKyAqIHNraXBfc3BhY2VzIC0gUmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2UgZnJvbSBAc3RyLgorICogQHN0cjogVGhlIHN0cmluZyB0byBiZSBzdHJpcHBlZC4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIEBzdHIuCisgKi8KK2NoYXIgKnNraXBfc3BhY2VzKGNvbnN0IGNoYXIgKnN0cikKK3sKKwl3aGlsZSAoaXNzcGFjZSgqc3RyKSkKKwkJKytzdHI7CisJcmV0dXJuIChjaGFyICopc3RyOworfQorRVhQT1JUX1NZTUJPTChza2lwX3NwYWNlcyk7CisKKy8qKgorICogc3RyaW0gLSBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBAcy4KICAqIEBzOiBUaGUgc3RyaW5nIHRvIGJlIHN0cmlwcGVkLgogICoKICAqIE5vdGUgdGhhdCB0aGUgZmlyc3QgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZXBsYWNlZCB3aXRoIGEgJU5VTC10ZXJtaW5hdG9yCiAgKiBpbiB0aGUgZ2l2ZW4gc3RyaW5nIEBzLiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UKICAqIGNoYXJhY3RlciBpbiBAcy4KICAqLwotY2hhciAqc3Ryc3RyaXAoY2hhciAqcykKK2NoYXIgKnN0cmltKGNoYXIgKnMpCiB7CiAJc2l6ZV90IHNpemU7CiAJY2hhciAqZW5kOwogCisJcyA9IHNraXBfc3BhY2VzKHMpOwogCXNpemUgPSBzdHJsZW4ocyk7Ci0KIAlpZiAoIXNpemUpCiAJCXJldHVybiBzOwogCkBAIC0zNjAsMTIgKzM3NCw5IEBACiAJCWVuZC0tOwogCSooZW5kICsgMSkgPSAnXDAnOwogCi0Jd2hpbGUgKCpzICYmIGlzc3BhY2UoKnMpKQotCQlzKys7Ci0KIAlyZXR1cm4gczsKIH0KLUVYUE9SVF9TWU1CT0woc3Ryc3RyaXApOworRVhQT1JUX1NZTUJPTChzdHJpbSk7CiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSTEVOCiAvKioKZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IDViYzAxODAuLjQzN2VlZGIgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAJCWRtYV9tYXNrID0gaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrOwogCiAJcmV0ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGZsYWdzLCBvcmRlcik7Ci0JaWYgKHJldCAmJiBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCByZXQpICsgc2l6ZSA+IGRtYV9tYXNrKSB7CisJaWYgKHJldCAmJiBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCByZXQpICsgc2l6ZSAtIDEgPiBkbWFfbWFzaykgewogCQkvKgogCQkgKiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBpc24ndCByZWFjaGFibGUgYnkgdGhlIGRldmljZS4KIAkJICovCkBAIC01NzEsNyArNTcxLDcgQEAKIAlkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMoaHdkZXYsIHJldCk7CiAKIAkvKiBDb25maXJtIGFkZHJlc3MgY2FuIGJlIERNQSdkIGJ5IGRldmljZSAqLwotCWlmIChkZXZfYWRkciArIHNpemUgPiBkbWFfbWFzaykgeworCWlmIChkZXZfYWRkciArIHNpemUgLSAxID4gZG1hX21hc2spIHsKIAkJcHJpbnRrKCJod2RldiBETUEgbWFzayA9IDB4JTAxNkx4LCBkZXZfYWRkciA9IDB4JTAxNkx4XG4iLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfbWFzaywKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2X2FkZHIpOwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCA2NDM4Y2Q1Li5kYzQ4ZDJiIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtOSw3ICs5LDcgQEAKICAqIFdpcnplbml1cyB3cm90ZSB0aGlzIHBvcnRhYmx5LCBUb3J2YWxkcyBmdWNrZWQgaXQgdXAgOi0pCiAgKi8KIAotLyogCisvKgogICogRnJpIEp1bCAxMyAyMDAxIENydXRjaGVyIER1bm5hdmFudCA8Y3J1dGNoZXIra2VybmVsQGRhdGFzdGFja3MuY29tPgogICogLSBjaGFuZ2VkIHRvIHByb3ZpZGUgc25wcmludGYgYW5kIHZzbnByaW50ZiBmdW5jdGlvbnMKICAqIFNvIEZlYiAgMSAxNjo1MTozMiBDRVQgMjAwNCBKdWVyZ2VuIFF1YWRlIDxxdWFkZUBoc25yLmRlPgpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgogI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGZvciBQQUdFX1NJWkUgKi8KQEAgLTQ3LDUyICs0OCw2IEBACiB9CiAKIC8qKgotICogc2ltcGxlX3N0cnRvdWwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcKLSAqIEBjcDogVGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKLSAqIEBlbmRwOiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBoZXJlCi0gKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQotICovCi11bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCi17Ci0JdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwotCi0JaWYgKCFiYXNlKQotCQliYXNlID0gc2ltcGxlX2d1ZXNzX2Jhc2UoY3ApOwotCi0JaWYgKGJhc2UgPT0gMTYgJiYgY3BbMF0gPT0gJzAnICYmIFRPTE9XRVIoY3BbMV0pID09ICd4JykKLQkJY3AgKz0gMjsKLQotCXdoaWxlIChpc3hkaWdpdCgqY3ApKSB7Ci0JCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCQl2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcCAtICcwJyA6IFRPTE9XRVIoKmNwKSAtICdhJyArIDEwOwotCQlpZiAodmFsdWUgPj0gYmFzZSkKLQkJCWJyZWFrOwotCQlyZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7Ci0JCWNwKys7Ci0JfQotCi0JaWYgKGVuZHApCi0JCSplbmRwID0gKGNoYXIgKiljcDsKLQlyZXR1cm4gcmVzdWx0OwotfQotRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG91bCk7Ci0KLS8qKgotICogc2ltcGxlX3N0cnRvbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzaWduZWQgbG9uZwotICogQGNwOiBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZwotICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKLSAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCi0gKi8KLWxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQotewotCWlmKCpjcCA9PSAnLScpCi0JCXJldHVybiAtc2ltcGxlX3N0cnRvdWwoY3AgKyAxLCBlbmRwLCBiYXNlKTsKLQlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoY3AsIGVuZHAsIGJhc2UpOwotfQotRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG9sKTsKLQotLyoqCiAgKiBzaW1wbGVfc3RydG91bGwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZwogICogQGNwOiBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZwogICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKQEAgLTExNywxNCArNzIsNDEgQEAKIAkJcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlOwogCQljcCsrOwogCX0KLQogCWlmIChlbmRwKQogCQkqZW5kcCA9IChjaGFyICopY3A7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG91bGwpOwogCiAvKioKKyAqIHNpbXBsZV9zdHJ0b3VsIC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nCisgKiBAY3A6IFRoZSBzdGFydCBvZiB0aGUgc3RyaW5nCisgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQorICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1c2UKKyAqLwordW5zaWduZWQgbG9uZyBzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQoreworCXJldHVybiBzaW1wbGVfc3RydG91bGwoY3AsIGVuZHAsIGJhc2UpOworfQorRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG91bCk7CisKKy8qKgorICogc2ltcGxlX3N0cnRvbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzaWduZWQgbG9uZworICogQGNwOiBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZworICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKKyAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCisgKi8KK2xvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQoreworCWlmICgqY3AgPT0gJy0nKQorCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsKGNwICsgMSwgZW5kcCwgYmFzZSk7CisKKwlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoY3AsIGVuZHAsIGJhc2UpOworfQorRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG9sKTsKKworLyoqCiAgKiBzaW1wbGVfc3RydG9sbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzaWduZWQgbG9uZyBsb25nCiAgKiBAY3A6IFRoZSBzdGFydCBvZiB0aGUgc3RyaW5nCiAgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQpAQCAtMTMyLDggKzExNCw5IEBACiAgKi8KIGxvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQogewotCWlmKCpjcD09Jy0nKQorCWlmICgqY3AgPT0gJy0nKQogCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsbChjcCArIDEsIGVuZHAsIGJhc2UpOworCiAJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsbChjcCwgZW5kcCwgYmFzZSk7CiB9CiAKQEAgLTE3Myw2ICsxNTYsNyBAQAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGNwLCAmdGFpbCwgYmFzZSk7CiAJaWYgKHRhaWwgPT0gY3ApCiAJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCgqdGFpbCA9PSAnXDAnKSB8fAogCQkoKGxlbiA9PSAoc2l6ZV90KSh0YWlsIC0gY3ApICsgMSkgJiYgKCp0YWlsID09ICdcbicpKSkgewogCQkqcmVzID0gdmFsOwpAQCAtMjg1LDEwICsyNjksMTEgQEAKIAogc3RhdGljIGludCBza2lwX2F0b2koY29uc3QgY2hhciAqKnMpCiB7Ci0JaW50IGk9MDsKKwlpbnQgaSA9IDA7CiAKIAl3aGlsZSAoaXNkaWdpdCgqKnMpKQogCQlpID0gaSoxMCArICooKCpzKSsrKSAtICcwJzsKKwogCXJldHVybiBpOwogfQogCkBAIC0zMDIsNyArMjg3LDcgQEAKIC8qIEZvcm1hdHMgY29ycmVjdGx5IGFueSBpbnRlZ2VyIGluIFswLDk5OTk5XS4KICAqIE91dHB1dHMgZnJvbSBvbmUgdG8gZml2ZSBkaWdpdHMgZGVwZW5kaW5nIG9uIGlucHV0LgogICogT24gaTM4NiBnY2MgNC4xLjIgLU8yOiB+MjUwIGJ5dGVzIG9mIGNvZGUuICovCi1zdGF0aWMgY2hhciogcHV0X2RlY190cnVuYyhjaGFyICpidWYsIHVuc2lnbmVkIHEpCitzdGF0aWMgY2hhciAqcHV0X2RlY190cnVuYyhjaGFyICpidWYsIHVuc2lnbmVkIHEpCiB7CiAJdW5zaWduZWQgZDMsIGQyLCBkMSwgZDA7CiAJZDEgPSAocT4+NCkgJiAweGY7CkBAIC0zMzEsMTQgKzMxNiwxNSBAQAogCQkJCWQzID0gZDMgLSAxMCpxOwogCQkJCSpidWYrKyA9IGQzICsgJzAnOyAgLyogbmV4dCBkaWdpdCAqLwogCQkJCWlmIChxICE9IDApCi0JCQkJCSpidWYrKyA9IHEgKyAnMCc7ICAvKiBtb3N0IHNpZ24uIGRpZ2l0ICovCisJCQkJCSpidWYrKyA9IHEgKyAnMCc7IC8qIG1vc3Qgc2lnbi4gZGlnaXQgKi8KIAkJCX0KIAkJfQogCX0KKwogCXJldHVybiBidWY7CiB9CiAvKiBTYW1lIHdpdGggaWYncyByZW1vdmVkLiBBbHdheXMgZW1pdHMgZml2ZSBkaWdpdHMgKi8KLXN0YXRpYyBjaGFyKiBwdXRfZGVjX2Z1bGwoY2hhciAqYnVmLCB1bnNpZ25lZCBxKQorc3RhdGljIGNoYXIgKnB1dF9kZWNfZnVsbChjaGFyICpidWYsIHVuc2lnbmVkIHEpCiB7CiAJLyogQlRXLCBpZiBxIGlzIGluIFswLDk5OTldLCA4LWJpdCBpbnRzIHdpbGwgYmUgZW5vdWdoLCAqLwogCS8qIGJ1dCBhbnl3YXksIGdjYyBwcm9kdWNlcyBiZXR0ZXIgY29kZSB3aXRoIGZ1bGwtc2l6ZWQgaW50cyAqLwpAQCAtMzQ3LDE0ICszMzMsMTUgQEAKIAlkMiA9IChxPj44KSAmIDB4ZjsKIAlkMyA9IChxPj4xMik7CiAKLQkvKiBQb3NzaWJsZSB3YXlzIHRvIGFwcHJveC4gZGl2aWRlIGJ5IDEwICovCi0JLyogZ2NjIC1PMiByZXBsYWNlcyBtdWx0aXBseSB3aXRoIHNoaWZ0cyBhbmQgYWRkcyAqLwotCS8vICh4ICogMHhjZCkgPj4gMTE6IDExMDAxMTAxIC0gc2hvcnRlciBjb2RlIHRoYW4gKiAweDY3IChvbiBpMzg2KQotCS8vICh4ICogMHg2NykgPj4gMTA6ICAxMTAwMTExCi0JLy8gKHggKiAweDM0KSA+PiA5OiAgICAxMTAxMDAgLSBzYW1lCi0JLy8gKHggKiAweDFhKSA+PiA4OiAgICAgMTEwMTAgLSBzYW1lCi0JLy8gKHggKiAweDBkKSA+PiA3OiAgICAgIDExMDEgLSBzYW1lLCBzaG9ydGVzdCBjb2RlIChvbiBpMzg2KQotCisJLyoKKwkgKiBQb3NzaWJsZSB3YXlzIHRvIGFwcHJveC4gZGl2aWRlIGJ5IDEwCisJICogZ2NjIC1PMiByZXBsYWNlcyBtdWx0aXBseSB3aXRoIHNoaWZ0cyBhbmQgYWRkcworCSAqICh4ICogMHhjZCkgPj4gMTE6IDExMDAxMTAxIC0gc2hvcnRlciBjb2RlIHRoYW4gKiAweDY3IChvbiBpMzg2KQorCSAqICh4ICogMHg2NykgPj4gMTA6ICAxMTAwMTExCisJICogKHggKiAweDM0KSA+PiA5OiAgICAxMTAxMDAgLSBzYW1lCisJICogKHggKiAweDFhKSA+PiA4OiAgICAgMTEwMTAgLSBzYW1lCisJICogKHggKiAweDBkKSA+PiA3OiAgICAgIDExMDEgLSBzYW1lLCBzaG9ydGVzdCBjb2RlIChvbiBpMzg2KQorCSAqLwogCWQwID0gNiooZDMgKyBkMiArIGQxKSArIChxICYgMHhmKTsKIAlxID0gKGQwICogMHhjZCkgPj4gMTE7CiAJZDAgPSBkMCAtIDEwKnE7CkBAIC0zNzUsMTAgKzM2MiwxMSBAQAogCQkJCWQzID0gZDMgLSAxMCpxOwogCQkJCSpidWYrKyA9IGQzICsgJzAnOwogCQkJCQkqYnVmKysgPSBxICsgJzAnOworCiAJcmV0dXJuIGJ1ZjsKIH0KIC8qIE5vIGlubGluaW5nIGhlbHBzIGdjYyB0byB1c2UgcmVnaXN0ZXJzIGJldHRlciAqLwotc3RhdGljIG5vaW5saW5lIGNoYXIqIHB1dF9kZWMoY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxvbmcgbnVtKQorc3RhdGljIG5vaW5saW5lIGNoYXIgKnB1dF9kZWMoY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxvbmcgbnVtKQogewogCXdoaWxlICgxKSB7CiAJCXVuc2lnbmVkIHJlbTsKQEAgLTQ0OCw5ICs0MzYsOSBAQAogCQlzcGVjLmZsYWdzICY9IH5aRVJPUEFEOwogCXNpZ24gPSAwOwogCWlmIChzcGVjLmZsYWdzICYgU0lHTikgewotCQlpZiAoKHNpZ25lZCBsb25nIGxvbmcpIG51bSA8IDApIHsKKwkJaWYgKChzaWduZWQgbG9uZyBsb25nKW51bSA8IDApIHsKIAkJCXNpZ24gPSAnLSc7Ci0JCQludW0gPSAtIChzaWduZWQgbG9uZyBsb25nKSBudW07CisJCQludW0gPSAtKHNpZ25lZCBsb25nIGxvbmcpbnVtOwogCQkJc3BlYy5maWVsZF93aWR0aC0tOwogCQl9IGVsc2UgaWYgKHNwZWMuZmxhZ3MgJiBQTFVTKSB7CiAJCQlzaWduID0gJysnOwpAQCAtNDc4LDcgKzQ2Niw5IEBACiAJZWxzZSBpZiAoc3BlYy5iYXNlICE9IDEwKSB7IC8qIDggb3IgMTYgKi8KIAkJaW50IG1hc2sgPSBzcGVjLmJhc2UgLSAxOwogCQlpbnQgc2hpZnQgPSAzOwotCQlpZiAoc3BlYy5iYXNlID09IDE2KSBzaGlmdCA9IDQ7CisKKwkJaWYgKHNwZWMuYmFzZSA9PSAxNikKKwkJCXNoaWZ0ID0gNDsKIAkJZG8gewogCQkJdG1wW2krK10gPSAoZGlnaXRzWygodW5zaWduZWQgY2hhciludW0pICYgbWFza10gfCBsb2Nhc2UpOwogCQkJbnVtID4+PSBzaGlmdDsKQEAgLTQ5Myw3ICs0ODMsNyBAQAogCS8qIGxlYWRpbmcgc3BhY2UgcGFkZGluZyAqLwogCXNwZWMuZmllbGRfd2lkdGggLT0gc3BlYy5wcmVjaXNpb247CiAJaWYgKCEoc3BlYy5mbGFncyAmIChaRVJPUEFEK0xFRlQpKSkgewotCQl3aGlsZSgtLXNwZWMuZmllbGRfd2lkdGggPj0gMCkgeworCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID49IDApIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9ICcgJzsKIAkJCSsrYnVmOwpAQCAtNTQzLDE1ICs1MzMsMTYgQEAKIAkJCSpidWYgPSAnICc7CiAJCSsrYnVmOwogCX0KKwogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICpzdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIGNoYXIgKnMsIHN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQorc3RhdGljIGNoYXIgKnN0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY29uc3QgY2hhciAqcywgc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJaW50IGxlbiwgaTsKIAogCWlmICgodW5zaWduZWQgbG9uZylzIDwgUEFHRV9TSVpFKQotCQlzID0gIjxOVUxMPiI7CisJCXMgPSAiKG51bGwpIjsKIAogCWxlbiA9IHN0cm5sZW4ocywgc3BlYy5wcmVjaXNpb24pOwogCkBAIC01NzIsNiArNTYzLDcgQEAKIAkJCSpidWYgPSAnICc7CiAJCSsrYnVmOwogCX0KKwogCXJldHVybiBidWY7CiB9CiAKQEAgLTU4NSwxMSArNTc3LDEzIEBACiAJCXNwcmludF9zeW1ib2woc3ltLCB2YWx1ZSk7CiAJZWxzZQogCQlrYWxsc3ltc19sb29rdXAodmFsdWUsIE5VTEwsIE5VTEwsIE5VTEwsIHN5bSk7CisKIAlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIHNwZWMpOwogI2Vsc2UKLQlzcGVjLmZpZWxkX3dpZHRoID0gMipzaXplb2Yodm9pZCAqKTsKKwlzcGVjLmZpZWxkX3dpZHRoID0gMiAqIHNpemVvZih2b2lkICopOwogCXNwZWMuZmxhZ3MgfD0gU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRDsKIAlzcGVjLmJhc2UgPSAxNjsKKwogCXJldHVybiBudW1iZXIoYnVmLCBlbmQsIHZhbHVlLCBzcGVjKTsKICNlbmRpZgogfQpAQCAtNjg4LDExICs2ODIsMjEgQEAKIAljaGFyIG1hY19hZGRyW3NpemVvZigieHg6eHg6eHg6eHg6eHg6eHgiKV07CiAJY2hhciAqcCA9IG1hY19hZGRyOwogCWludCBpOworCWJvb2wgYml0cmV2OworCWNoYXIgc2VwYXJhdG9yOworCisJaWYgKGZtdFsxXSA9PSAnRicpIHsJCS8qIEZEREkgY2Fub25pY2FsIGZvcm1hdCAqLworCQliaXRyZXYgPSB0cnVlOworCQlzZXBhcmF0b3IgPSAnLSc7CisJfSBlbHNlIHsKKwkJYml0cmV2ID0gZmFsc2U7CisJCXNlcGFyYXRvciA9ICc6JzsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbaV0pOworCQlwID0gcGFja19oZXhfYnl0ZShwLCBiaXRyZXYgPyBiaXRyZXY4KGFkZHJbaV0pIDogYWRkcltpXSk7CiAJCWlmIChmbXRbMF0gPT0gJ00nICYmIGkgIT0gNSkKLQkJCSpwKysgPSAnOic7CisJCQkqcCsrID0gc2VwYXJhdG9yOwogCX0KIAkqcCA9ICdcMCc7CiAKQEAgLTcxOCwyMiArNzIyLDE5IEBACiAJCWlmIChpIDwgMykKIAkJCSpwKysgPSAnLic7CiAJfQotCiAJKnAgPSAnXDAnOworCiAJcmV0dXJuIHA7CiB9CiAKIHN0YXRpYyBjaGFyICppcDZfY29tcHJlc3NlZF9zdHJpbmcoY2hhciAqcCwgY29uc3QgY2hhciAqYWRkcikKIHsKLQlpbnQgaTsKLQlpbnQgajsKLQlpbnQgcmFuZ2U7CisJaW50IGksIGosIHJhbmdlOwogCXVuc2lnbmVkIGNoYXIgemVyb2xlbmd0aFs4XTsKIAlpbnQgbG9uZ2VzdCA9IDE7CiAJaW50IGNvbG9ucG9zID0gLTE7CiAJdTE2IHdvcmQ7Ci0JdTggaGk7Ci0JdTggbG87CisJdTggaGksIGxvOwogCWJvb2wgbmVlZGNvbG9uID0gZmFsc2U7CiAJYm9vbCB1c2VJUHY0OwogCXN0cnVjdCBpbjZfYWRkciBpbjY7CkBAIC03ODcsOCArNzg4LDkgQEAKIAkJCQlwID0gcGFja19oZXhfYnl0ZShwLCBoaSk7CiAJCQllbHNlCiAJCQkJKnArKyA9IGhleF9hc2NfbG8oaGkpOworCQkJcCA9IHBhY2tfaGV4X2J5dGUocCwgbG8pOwogCQl9Ci0JCWlmIChoaSB8fCBsbyA+IDB4MGYpCisJCWVsc2UgaWYgKGxvID4gMHgwZikKIAkJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGxvKTsKIAkJZWxzZQogCQkJKnArKyA9IGhleF9hc2NfbG8obG8pOwpAQCAtODAwLDIyICs4MDIsMjMgQEAKIAkJCSpwKysgPSAnOic7CiAJCXAgPSBpcDRfc3RyaW5nKHAsICZpbjYuczZfYWRkclsxMl0sIGZhbHNlKTsKIAl9Ci0KIAkqcCA9ICdcMCc7CisKIAlyZXR1cm4gcDsKIH0KIAogc3RhdGljIGNoYXIgKmlwNl9zdHJpbmcoY2hhciAqcCwgY29uc3QgY2hhciAqYWRkciwgY29uc3QgY2hhciAqZm10KQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlwID0gcGFja19oZXhfYnl0ZShwLCAqYWRkcisrKTsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgKmFkZHIrKyk7CiAJCWlmIChmbXRbMF0gPT0gJ0knICYmIGkgIT0gNykKIAkJCSpwKysgPSAnOic7CiAJfQotCiAJKnAgPSAnXDAnOworCiAJcmV0dXJuIHA7CiB9CiAKQEAgLTg0Miw2ICs4NDUsNTIgQEAKIAlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDRfYWRkciwgc3BlYyk7CiB9CiAKK3N0YXRpYyBjaGFyICp1dWlkX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY29uc3QgdTggKmFkZHIsCisJCQkgc3RydWN0IHByaW50Zl9zcGVjIHNwZWMsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwljaGFyIHV1aWRbc2l6ZW9mKCJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiKV07CisJY2hhciAqcCA9IHV1aWQ7CisJaW50IGk7CisJc3RhdGljIGNvbnN0IHU4IGJlWzE2XSA9IHswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1fTsKKwlzdGF0aWMgY29uc3QgdTggbGVbMTZdID0gezMsMiwxLDAsNSw0LDcsNiw4LDksMTAsMTEsMTIsMTMsMTQsMTV9OworCWNvbnN0IHU4ICppbmRleCA9IGJlOworCWJvb2wgdWMgPSBmYWxzZTsKKworCXN3aXRjaCAoKigrK2ZtdCkpIHsKKwljYXNlICdMJzoKKwkJdWMgPSB0cnVlOwkJLyogZmFsbC10aHJvdWdoICovCisJY2FzZSAnbCc6CisJCWluZGV4ID0gbGU7CisJCWJyZWFrOworCWNhc2UgJ0InOgorCQl1YyA9IHRydWU7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbaW5kZXhbaV1dKTsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMzoKKwkJY2FzZSA1OgorCQljYXNlIDc6CisJCWNhc2UgOToKKwkJCSpwKysgPSAnLSc7CisJCQlicmVhazsKKwkJfQorCX0KKworCSpwID0gMDsKKworCWlmICh1YykgeworCQlwID0gdXVpZDsKKwkJZG8geworCQkJKnAgPSB0b3VwcGVyKCpwKTsKKwkJfSB3aGlsZSAoKigrK3ApKTsKKwl9CisKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCB1dWlkLCBzcGVjKTsKK30KKwogLyoKICAqIFNob3cgYSAnJXAnIHRoaW5nLiAgQSBrZXJuZWwgZXh0ZW5zaW9uIGlzIHRoYXQgdGhlICclcCcgaXMgZm9sbG93ZWQKICAqIGJ5IGFuIGV4dHJhIHNldCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IGFyZSBleHRlbmRlZCBmb3JtYXQKQEAgLTg1OCw2ICs5MDcsMTAgQEAKICAqIC0gJ00nIEZvciBhIDYtYnl0ZSBNQUMgYWRkcmVzcywgaXQgcHJpbnRzIHRoZSBhZGRyZXNzIGluIHRoZQogICogICAgICAgdXN1YWwgY29sb24tc2VwYXJhdGVkIGhleCBub3RhdGlvbgogICogLSAnbScgRm9yIGEgNi1ieXRlIE1BQyBhZGRyZXNzLCBpdCBwcmludHMgdGhlIGhleCBhZGRyZXNzIHdpdGhvdXQgY29sb25zCisgKiAtICdNRicgRm9yIGEgNi1ieXRlIE1BQyBGRERJIGFkZHJlc3MsIGl0IHByaW50cyB0aGUgYWRkcmVzcworICogICAgICAgd2l0aCBhIGRhc2gtc2VwYXJhdGVkIGhleCBub3RhdGlvbiB3aXRoIGJpdCByZXZlcnNlZCBieXRlcworICogLSAnbUYnIEZvciBhIDYtYnl0ZSBNQUMgRkRESSBhZGRyZXNzLCBpdCBwcmludHMgdGhlIGFkZHJlc3MKKyAqICAgICAgIGluIGhleCBub3RhdGlvbiB3aXRob3V0IHNlcGFyYXRvcnMgd2l0aCBiaXQgcmV2ZXJzZWQgYnl0ZXMKICAqIC0gJ0knIFs0Nl0gZm9yIElQdjQvSVB2NiBhZGRyZXNzZXMgcHJpbnRlZCBpbiB0aGUgdXN1YWwgd2F5CiAgKiAgICAgICBJUHY0IHVzZXMgZG90LXNlcGFyYXRlZCBkZWNpbWFsIHdpdGhvdXQgbGVhZGluZyAwJ3MgKDEuMi4zLjQpCiAgKiAgICAgICBJUHY2IHVzZXMgY29sb24gc2VwYXJhdGVkIG5ldHdvcmstb3JkZXIgMTYgYml0IGhleCB3aXRoIGxlYWRpbmcgMCdzCkBAIC04NjYsNiArOTE5LDE4IEBACiAgKiAgICAgICBJUHY0IHVzZXMgZG90LXNlcGFyYXRlZCBkZWNpbWFsIHdpdGggbGVhZGluZyAwJ3MgKDAxMC4xMjMuMDQ1LjAwNikKICAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5CiAgKiAgICAgICBodHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0LWthd2FtdXJhLWlwdjYtdGV4dC1yZXByZXNlbnRhdGlvbi0wMy50eHQKKyAqIC0gJ1UnIEZvciBhIDE2IGJ5dGUgVVVJRC9HVUlELCBpdCBwcmludHMgdGhlIFVVSUQvR1VJRCBpbiB0aGUgZm9ybQorICogICAgICAgInh4eHh4eHh4LXh4eHgteHh4eC14eHh4LXh4eHh4eHh4eHh4eCIKKyAqICAgICAgIE9wdGlvbnMgZm9yICVwVSBhcmU6CisgKiAgICAgICAgIGIgYmlnIGVuZGlhbiBsb3dlciBjYXNlIGhleCAoZGVmYXVsdCkKKyAqICAgICAgICAgQiBiaWcgZW5kaWFuIFVQUEVSIGNhc2UgaGV4CisgKiAgICAgICAgIGwgbGl0dGxlIGVuZGlhbiBsb3dlciBjYXNlIGhleAorICogICAgICAgICBMIGxpdHRsZSBlbmRpYW4gVVBQRVIgY2FzZSBoZXgKKyAqICAgICAgICAgICBiaWcgZW5kaWFuIG91dHB1dCBieXRlIG9yZGVyIGlzOgorICogICAgICAgICAgICAgWzBdWzFdWzJdWzNdLVs0XVs1XS1bNl1bN10tWzhdWzldLVsxMF1bMTFdWzEyXVsxM11bMTRdWzE1XQorICogICAgICAgICAgIGxpdHRsZSBlbmRpYW4gb3V0cHV0IGJ5dGUgb3JkZXIgaXM6CisgKiAgICAgICAgICAgICBbM11bMl1bMV1bMF0tWzVdWzRdLVs3XVs2XS1bOF1bOV0tWzEwXVsxMV1bMTJdWzEzXVsxNF1bMTVdCisgKgogICogTm90ZTogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0CiAgKiBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEKICAqIHBvaW50ZXIgdG8gdGhlIHJlYWwgYWRkcmVzcy4KQEAgLTg4MCwxNSArOTQ1LDE2IEBACiAJY2FzZSAnRic6CiAJY2FzZSAnZic6CiAJCXB0ciA9IGRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IocHRyKTsKLQljYXNlICdzJzoKIAkJLyogRmFsbHRocm91Z2ggKi8KIAljYXNlICdTJzoKKwljYXNlICdzJzoKIAkJcmV0dXJuIHN5bWJvbF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgKmZtdCk7CiAJY2FzZSAnUic6CiAJY2FzZSAncic6CiAJCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgZm10KTsKIAljYXNlICdNJzoJCQkvKiBDb2xvbiBzZXBhcmF0ZWQ6IDAwOjAxOjAyOjAzOjA0OjA1ICovCiAJY2FzZSAnbSc6CQkJLyogQ29udGlndW91czogMDAwMTAyMDMwNDA1ICovCisJCQkJCS8qIFttTV1GIChGRERJLCBiaXQgcmV2ZXJzZWQpICovCiAJCXJldHVybiBtYWNfYWRkcmVzc19zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgZm10KTsKIAljYXNlICdJJzoJCQkvKiBGb3JtYXR0ZWQgSVAgc3VwcG9ydGVkCiAJCQkJCSAqIDQ6CTEuMi4zLjQKQEAgLTkwNiw2ICs5NzIsOCBAQAogCQkJcmV0dXJuIGlwNF9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjLCBmbXQpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgJ1UnOgorCQlyZXR1cm4gdXVpZF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgZm10KTsKIAl9CiAJc3BlYy5mbGFncyB8PSBTTUFMTDsKIAlpZiAoc3BlYy5maWVsZF93aWR0aCA9PSAtMSkgewpAQCAtMTAyMyw4ICsxMDkxLDggQEAKIHF1YWxpZmllcjoKIAkvKiBnZXQgdGhlIGNvbnZlcnNpb24gcXVhbGlmaWVyICovCiAJc3BlYy0+cXVhbGlmaWVyID0gLTE7Ci0JaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8Ci0JICAgICpmbXQgPT0gJ1onIHx8ICpmbXQgPT0gJ3onIHx8ICpmbXQgPT0gJ3QnKSB7CisJaWYgKCpmbXQgPT0gJ2gnIHx8IFRPTE9XRVIoKmZtdCkgPT0gJ2wnIHx8CisJICAgIFRPTE9XRVIoKmZtdCkgPT0gJ3onIHx8ICpmbXQgPT0gJ3QnKSB7CiAJCXNwZWMtPnF1YWxpZmllciA9ICpmbXQrKzsKIAkJaWYgKHVubGlrZWx5KHNwZWMtPnF1YWxpZmllciA9PSAqZm10KSkgewogCQkJaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnbCcpIHsKQEAgLTEwOTEsNyArMTE1OSw3IEBACiAJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfTE9ORzsKIAkJZWxzZQogCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1VMT05HOwotCX0gZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdaJyB8fCBzcGVjLT5xdWFsaWZpZXIgPT0gJ3onKSB7CisJfSBlbHNlIGlmIChUT0xPV0VSKHNwZWMtPnF1YWxpZmllcikgPT0gJ3onKSB7CiAJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9TSVpFX1Q7CiAJfSBlbHNlIGlmIChzcGVjLT5xdWFsaWZpZXIgPT0gJ3QnKSB7CiAJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9QVFJESUZGOwpAQCAtMTEyNyw3ICsxMTk1LDE4IEBACiAgKiAlcHMgb3V0cHV0IHRoZSBuYW1lIG9mIGEgdGV4dCBzeW1ib2wgd2l0aG91dCBvZmZzZXQKICAqICVwRiBvdXRwdXQgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGggaXRzIG9mZnNldAogICogJXBmIG91dHB1dCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aG91dCBpdHMgb2Zmc2V0Ci0gKiAlcFIgb3V0cHV0IHRoZSBhZGRyZXNzIHJhbmdlIGluIGEgc3RydWN0IHJlc291cmNlCisgKiAlcFIgb3V0cHV0IHRoZSBhZGRyZXNzIHJhbmdlIGluIGEgc3RydWN0IHJlc291cmNlIHdpdGggZGVjb2RlZCBmbGFncworICogJXByIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZSB3aXRoIHJhdyBmbGFncworICogJXBNIG91dHB1dCBhIDYtYnl0ZSBNQUMgYWRkcmVzcyB3aXRoIGNvbG9ucworICogJXBtIG91dHB1dCBhIDYtYnl0ZSBNQUMgYWRkcmVzcyB3aXRob3V0IGNvbG9ucworICogJXBJNCBwcmludCBhbiBJUHY0IGFkZHJlc3Mgd2l0aG91dCBsZWFkaW5nIHplcm9zCisgKiAlcGk0IHByaW50IGFuIElQdjQgYWRkcmVzcyB3aXRoIGxlYWRpbmcgemVyb3MKKyAqICVwSTYgcHJpbnQgYW4gSVB2NiBhZGRyZXNzIHdpdGggY29sb25zCisgKiAlcGk2IHByaW50IGFuIElQdjYgYWRkcmVzcyB3aXRob3V0IGNvbG9ucworICogJXBJNmMgcHJpbnQgYW4gSVB2NiBhZGRyZXNzIGFzIHNwZWNpZmllZCBieQorICogICBodHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0LWthd2FtdXJhLWlwdjYtdGV4dC1yZXByZXNlbnRhdGlvbi0wMy50eHQKKyAqICVwVVtiQmxMXSBwcmludCBhIFVVSUQvR1VJRCBpbiBiaWcgb3IgbGl0dGxlIGVuZGlhbiB1c2luZyBsb3dlciBvciB1cHBlcgorICogICBjYXNlLgogICogJW4gaXMgaWdub3JlZAogICoKICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCkBAIC0xMTQ0LDggKzEyMjMsNyBAQAogaW50IHZzbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnVtOwotCWNoYXIgKnN0ciwgKmVuZCwgYzsKLQlpbnQgcmVhZDsKKwljaGFyICpzdHIsICplbmQ7CiAJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07CiAKIAkvKiBSZWplY3Qgb3V0LW9mLXJhbmdlIHZhbHVlcyBlYXJseS4gIExhcmdlIHBvc2l0aXZlIHNpemVzIGFyZQpAQCAtMTE2NCw4ICsxMjQyLDcgQEAKIAogCXdoaWxlICgqZm10KSB7CiAJCWNvbnN0IGNoYXIgKm9sZF9mbXQgPSBmbXQ7Ci0KLQkJcmVhZCA9IGZvcm1hdF9kZWNvZGUoZm10LCAmc3BlYyk7CisJCWludCByZWFkID0gZm9ybWF0X2RlY29kZShmbXQsICZzcGVjKTsKIAogCQlmbXQgKz0gcmVhZDsKIApAQCAtMTE4OSw3ICsxMjY2LDkgQEAKIAkJCXNwZWMucHJlY2lzaW9uID0gdmFfYXJnKGFyZ3MsIGludCk7CiAJCQlicmVhazsKIAotCQljYXNlIEZPUk1BVF9UWVBFX0NIQVI6CisJCWNhc2UgRk9STUFUX1RZUEVfQ0hBUjogeworCQkJY2hhciBjOworCiAJCQlpZiAoIShzcGVjLmZsYWdzICYgTEVGVCkpIHsKIAkJCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID4gMCkgewogCQkJCQlpZiAoc3RyIDwgZW5kKQpAQCAtMTIwOCw2ICsxMjg3LDcgQEAKIAkJCQkrK3N0cjsKIAkJCX0KIAkJCWJyZWFrOworCQl9CiAKIAkJY2FzZSBGT1JNQVRfVFlQRV9TVFI6CiAJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCBjaGFyICopLCBzcGVjKTsKQEAgLTEyMzgsOCArMTMxOCw3IEBACiAJCQlpZiAocXVhbGlmaWVyID09ICdsJykgewogCQkJCWxvbmcgKmlwID0gdmFfYXJnKGFyZ3MsIGxvbmcgKik7CiAJCQkJKmlwID0gKHN0ciAtIGJ1Zik7Ci0JCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwKLQkJCQkJcXVhbGlmaWVyID09ICd6JykgeworCQkJfSBlbHNlIGlmIChUT0xPV0VSKHF1YWxpZmllcikgPT0gJ3onKSB7CiAJCQkJc2l6ZV90ICppcCA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7CiAJCQkJKmlwID0gKHN0ciAtIGJ1Zik7CiAJCQl9IGVsc2UgewpAQCAtMTMyMiw3ICsxNDAxLDggQEAKIHsKIAlpbnQgaTsKIAotCWk9dnNucHJpbnRmKGJ1ZixzaXplLGZtdCxhcmdzKTsKKwlpID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKKwogCXJldHVybiAoaSA+PSBzaXplKSA/IChzaXplIC0gMSkgOiBpOwogfQogRVhQT1JUX1NZTUJPTCh2c2NucHJpbnRmKTsKQEAgLTEzNDEsMTQgKzE0MjEsMTUgQEAKICAqCiAgKiBTZWUgdGhlIHZzbnByaW50ZigpIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdCBzdHJpbmcgZXh0ZW5zaW9ucyBvdmVyIEM5OS4KICAqLwotaW50IHNucHJpbnRmKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2ludCBzbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJaW50IGk7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCWk9dnNucHJpbnRmKGJ1ZixzaXplLGZtdCxhcmdzKTsKKwlpID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CisKIAlyZXR1cm4gaTsKIH0KIEVYUE9SVF9TWU1CT0woc25wcmludGYpOwpAQCAtMTM2NCw3ICsxNDQ1LDcgQEAKICAqIHRoZSB0cmFpbGluZyAnXDAnLiBJZiBAc2l6ZSBpcyA8PSAwIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuCiAgKi8KIAotaW50IHNjbnByaW50ZihjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCitpbnQgc2NucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKIAlpbnQgaTsKQEAgLTEzNzIsNiArMTQ1Myw3IEBACiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAlpID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CisKIAlyZXR1cm4gKGkgPj0gc2l6ZSkgPyAoc2l6ZSAtIDEpIDogaTsKIH0KIEVYUE9SVF9TWU1CT0woc2NucHJpbnRmKTsKQEAgLTE0MDksMTQgKzE0OTEsMTUgQEAKICAqCiAgKiBTZWUgdGhlIHZzbnByaW50ZigpIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdCBzdHJpbmcgZXh0ZW5zaW9ucyBvdmVyIEM5OS4KICAqLwotaW50IHNwcmludGYoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCitpbnQgc3ByaW50ZihjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKIAlpbnQgaTsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JaT12c25wcmludGYoYnVmLCBJTlRfTUFYLCBmbXQsIGFyZ3MpOworCWkgPSB2c25wcmludGYoYnVmLCBJTlRfTUFYLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKKwogCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTChzcHJpbnRmKTsKQEAgLTE0NDksNyArMTUzMiw2IEBACiB7CiAJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07CiAJY2hhciAqc3RyLCAqZW5kOwotCWludCByZWFkOwogCiAJc3RyID0gKGNoYXIgKiliaW5fYnVmOwogCWVuZCA9IChjaGFyICopKGJpbl9idWYgKyBzaXplKTsKQEAgLTE0NzQsMTQgKzE1NTYsMTUgQEAKIAlzdHIgKz0gc2l6ZW9mKHR5cGUpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLQogCXdoaWxlICgqZm10KSB7Ci0JCXJlYWQgPSBmb3JtYXRfZGVjb2RlKGZtdCwgJnNwZWMpOworCQlpbnQgcmVhZCA9IGZvcm1hdF9kZWNvZGUoZm10LCAmc3BlYyk7CiAKIAkJZm10ICs9IHJlYWQ7CiAKIAkJc3dpdGNoIChzcGVjLnR5cGUpIHsKIAkJY2FzZSBGT1JNQVRfVFlQRV9OT05FOgorCQljYXNlIEZPUk1BVF9UWVBFX0lOVkFMSUQ6CisJCWNhc2UgRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSOgogCQkJYnJlYWs7CiAKIAkJY2FzZSBGT1JNQVRfVFlQRV9XSURUSDoKQEAgLTE0OTYsMTMgKzE1NzksMTQgQEAKIAkJY2FzZSBGT1JNQVRfVFlQRV9TVFI6IHsKIAkJCWNvbnN0IGNoYXIgKnNhdmVfc3RyID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CiAJCQlzaXplX3QgbGVuOworCiAJCQlpZiAoKHVuc2lnbmVkIGxvbmcpc2F2ZV9zdHIgPiAodW5zaWduZWQgbG9uZyktUEFHRV9TSVpFCiAJCQkJCXx8ICh1bnNpZ25lZCBsb25nKXNhdmVfc3RyIDwgUEFHRV9TSVpFKQotCQkJCXNhdmVfc3RyID0gIjxOVUxMPiI7Ci0JCQlsZW4gPSBzdHJsZW4oc2F2ZV9zdHIpOwotCQkJaWYgKHN0ciArIGxlbiArIDEgPCBlbmQpCi0JCQkJbWVtY3B5KHN0ciwgc2F2ZV9zdHIsIGxlbiArIDEpOwotCQkJc3RyICs9IGxlbiArIDE7CisJCQkJc2F2ZV9zdHIgPSAiKG51bGwpIjsKKwkJCWxlbiA9IHN0cmxlbihzYXZlX3N0cikgKyAxOworCQkJaWYgKHN0ciArIGxlbiA8IGVuZCkKKwkJCQltZW1jcHkoc3RyLCBzYXZlX3N0ciwgbGVuKTsKKwkJCXN0ciArPSBsZW47CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNTEzLDE5ICsxNTk3LDEzIEBACiAJCQkJZm10Kys7CiAJCQlicmVhazsKIAotCQljYXNlIEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjoKLQkJCWJyZWFrOwotCi0JCWNhc2UgRk9STUFUX1RZUEVfSU5WQUxJRDoKLQkJCWJyZWFrOwotCiAJCWNhc2UgRk9STUFUX1RZUEVfTlJDSEFSUzogewogCQkJLyogc2tpcCAlbiAncyBhcmd1bWVudCAqLwogCQkJaW50IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOwogCQkJdm9pZCAqc2tpcF9hcmc7CiAJCQlpZiAocXVhbGlmaWVyID09ICdsJykKIAkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBsb25nICopOwotCQkJZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJyB8fCBxdWFsaWZpZXIgPT0gJ3onKQorCQkJZWxzZSBpZiAoVE9MT1dFUihxdWFsaWZpZXIpID09ICd6JykKIAkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7CiAJCQllbHNlCiAJCQkJc2tpcF9hcmcgPSB2YV9hcmcoYXJncywgaW50ICopOwpAQCAtMTU2MSw4ICsxNjM5LDggQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gKHUzMiAqKShQVFJfQUxJR04oc3RyLCBzaXplb2YodTMyKSkpIC0gYmluX2J1ZjsKIAorCXJldHVybiAodTMyICopKFBUUl9BTElHTihzdHIsIHNpemVvZih1MzIpKSkgLSBiaW5fYnVmOwogI3VuZGVmIHNhdmVfYXJnCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2YmluX3ByaW50Zik7CkBAIC0xNTkxLDExICsxNjY5LDkgQEAKICAqLwogaW50IGJzdHJfcHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5fYnVmKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07Ci0JY2hhciAqc3RyLCAqZW5kLCBjOwotCWNvbnN0IGNoYXIgKmFyZ3MgPSAoY29uc3QgY2hhciAqKWJpbl9idWY7Ci0KIAlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYyA9IHswfTsKKwljaGFyICpzdHIsICplbmQ7CisJY29uc3QgY2hhciAqYXJncyA9IChjb25zdCBjaGFyICopYmluX2J1ZjsKIAogCWlmIChXQVJOX09OX09OQ0UoKGludCkgc2l6ZSA8IDApKQogCQlyZXR1cm4gMDsKQEAgLTE2MjUsMTAgKzE3MDEsOCBAQAogCX0KIAogCXdoaWxlICgqZm10KSB7Ci0JCWludCByZWFkOwogCQljb25zdCBjaGFyICpvbGRfZm10ID0gZm10OwotCi0JCXJlYWQgPSBmb3JtYXRfZGVjb2RlKGZtdCwgJnNwZWMpOworCQlpbnQgcmVhZCA9IGZvcm1hdF9kZWNvZGUoZm10LCAmc3BlYyk7CiAKIAkJZm10ICs9IHJlYWQ7CiAKQEAgLTE2NTIsNyArMTcyNiw5IEBACiAJCQlzcGVjLnByZWNpc2lvbiA9IGdldF9hcmcoaW50KTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgRk9STUFUX1RZUEVfQ0hBUjoKKwkJY2FzZSBGT1JNQVRfVFlQRV9DSEFSOiB7CisJCQljaGFyIGM7CisKIAkJCWlmICghKHNwZWMuZmxhZ3MgJiBMRUZUKSkgewogCQkJCXdoaWxlICgtLXNwZWMuZmllbGRfd2lkdGggPiAwKSB7CiAJCQkJCWlmIChzdHIgPCBlbmQpCkBAIC0xNjcwLDExICsxNzQ2LDExIEBACiAJCQkJKytzdHI7CiAJCQl9CiAJCQlicmVhazsKKwkJfQogCiAJCWNhc2UgRk9STUFUX1RZUEVfU1RSOiB7CiAJCQljb25zdCBjaGFyICpzdHJfYXJnID0gYXJnczsKLQkJCXNpemVfdCBsZW4gPSBzdHJsZW4oc3RyX2FyZyk7Ci0JCQlhcmdzICs9IGxlbiArIDE7CisJCQlhcmdzICs9IHN0cmxlbihzdHJfYXJnKSArIDE7CiAJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIChjaGFyICopc3RyX2FyZywgc3BlYyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY4NiwxMSArMTc2Miw2IEBACiAJCQlicmVhazsKIAogCQljYXNlIEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjoKLQkJCWlmIChzdHIgPCBlbmQpCi0JCQkJKnN0ciA9ICclJzsKLQkJCSsrc3RyOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBGT1JNQVRfVFlQRV9JTlZBTElEOgogCQkJaWYgKHN0ciA8IGVuZCkKIAkJCQkqc3RyID0gJyUnOwpAQCAtMTcwMSwxNSArMTc3MiwxNSBAQAogCQkJLyogc2tpcCAqLwogCQkJYnJlYWs7CiAKLQkJZGVmYXVsdDoKKwkJZGVmYXVsdDogeworCQkJdW5zaWduZWQgbG9uZyBsb25nIG51bTsKKwogCQkJc3dpdGNoIChzcGVjLnR5cGUpIHsKIAogCQkJY2FzZSBGT1JNQVRfVFlQRV9MT05HX0xPTkc6CiAJCQkJbnVtID0gZ2V0X2FyZyhsb25nIGxvbmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBGT1JNQVRfVFlQRV9VTE9ORzoKLQkJCQludW0gPSBnZXRfYXJnKHVuc2lnbmVkIGxvbmcpOwotCQkJCWJyZWFrOwogCQkJY2FzZSBGT1JNQVRfVFlQRV9MT05HOgogCQkJCW51bSA9IGdldF9hcmcodW5zaWduZWQgbG9uZyk7CiAJCQkJYnJlYWs7CkBAIC0xNzM5LDggKzE4MTAsOSBAQAogCQkJfQogCiAJCQlzdHIgPSBudW1iZXIoc3RyLCBlbmQsIG51bSwgc3BlYyk7Ci0JCX0KLQl9CisJCX0gLyogZGVmYXVsdDogKi8KKwkJfSAvKiBzd2l0Y2goc3BlYy50eXBlKSAqLworCX0gLyogd2hpbGUoKmZtdCkgKi8KIAogCWlmIChzaXplID4gMCkgewogCQlpZiAoc3RyIDwgZW5kKQpAQCAtMTc3NCw2ICsxODQ2LDcgQEAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCXJldCA9IHZiaW5fcHJpbnRmKGJpbl9idWYsIHNpemUsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOworCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJwcmludGYpOwpAQCAtMTc4NiwyNyArMTg1OSwyMyBAQAogICogQGZtdDoJZm9ybWF0IG9mIGJ1ZmZlcgogICogQGFyZ3M6CWFyZ3VtZW50cwogICovCi1pbnQgdnNzY2FuZihjb25zdCBjaGFyICogYnVmLCBjb25zdCBjaGFyICogZm10LCB2YV9saXN0IGFyZ3MpCitpbnQgdnNzY2FuZihjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCWNvbnN0IGNoYXIgKnN0ciA9IGJ1ZjsKIAljaGFyICpuZXh0OwogCWNoYXIgZGlnaXQ7CiAJaW50IG51bSA9IDA7Ci0JaW50IHF1YWxpZmllcjsKLQlpbnQgYmFzZTsKLQlpbnQgZmllbGRfd2lkdGg7Ci0JaW50IGlzX3NpZ24gPSAwOworCWludCBxdWFsaWZpZXIsIGJhc2UsIGZpZWxkX3dpZHRoOworCWJvb2wgaXNfc2lnbjsKIAotCXdoaWxlKCpmbXQgJiYgKnN0cikgeworCXdoaWxlICgqZm10ICYmICpzdHIpIHsKIAkJLyogc2tpcCBhbnkgd2hpdGUgc3BhY2UgaW4gZm9ybWF0ICovCiAJCS8qIHdoaXRlIHNwYWNlIGluIGZvcm1hdCBtYXRjaHMgYW55IGFtb3VudCBvZgogCQkgKiB3aGl0ZSBzcGFjZSwgaW5jbHVkaW5nIG5vbmUsIGluIHRoZSBpbnB1dC4KIAkJICovCiAJCWlmIChpc3NwYWNlKCpmbXQpKSB7Ci0JCQl3aGlsZSAoaXNzcGFjZSgqZm10KSkKLQkJCQkrK2ZtdDsKLQkJCXdoaWxlIChpc3NwYWNlKCpzdHIpKQotCQkJCSsrc3RyOworCQkJZm10ID0gc2tpcF9zcGFjZXMoKytmbXQpOworCQkJc3RyID0gc2tpcF9zcGFjZXMoc3RyKTsKIAkJfQogCiAJCS8qIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgY29udmVyc2lvbiBtdXN0IG1hdGNoIGV4YWN0bHkgKi8KQEAgLTE4MTksNyArMTg4OCw3IEBACiAJCWlmICghKmZtdCkKIAkJCWJyZWFrOwogCQkrK2ZtdDsKLQkJCisKIAkJLyogc2tpcCB0aGlzIGNvbnZlcnNpb24uCiAJCSAqIGFkdmFuY2UgYm90aCBzdHJpbmdzIHRvIG5leHQgd2hpdGUgc3BhY2UKIAkJICovCkBAIC0xODM4LDggKzE5MDcsOCBAQAogCiAJCS8qIGdldCBjb252ZXJzaW9uIHF1YWxpZmllciAqLwogCQlxdWFsaWZpZXIgPSAtMTsKLQkJaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8Ci0JCSAgICAqZm10ID09ICdaJyB8fCAqZm10ID09ICd6JykgeworCQlpZiAoKmZtdCA9PSAnaCcgfHwgVE9MT1dFUigqZm10KSA9PSAnbCcgfHwKKwkJICAgIFRPTE9XRVIoKmZtdCkgPT0gJ3onKSB7CiAJCQlxdWFsaWZpZXIgPSAqZm10Kys7CiAJCQlpZiAodW5saWtlbHkocXVhbGlmaWVyID09ICpmbXQpKSB7CiAJCQkJaWYgKHF1YWxpZmllciA9PSAnaCcpIHsKQEAgLTE4NTEsMTYgKzE5MjAsMTcgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQkJYmFzZSA9IDEwOwotCQlpc19zaWduID0gMDsKIAogCQlpZiAoISpmbXQgfHwgISpzdHIpCiAJCQlicmVhazsKIAotCQlzd2l0Y2goKmZtdCsrKSB7CisJCWJhc2UgPSAxMDsKKwkJaXNfc2lnbiA9IDA7CisKKwkJc3dpdGNoICgqZm10KyspIHsKIAkJY2FzZSAnYyc6CiAJCXsKLQkJCWNoYXIgKnMgPSAoY2hhciAqKSB2YV9hcmcoYXJncyxjaGFyKik7CisJCQljaGFyICpzID0gKGNoYXIgKil2YV9hcmcoYXJncywgY2hhciopOwogCQkJaWYgKGZpZWxkX3dpZHRoID09IC0xKQogCQkJCWZpZWxkX3dpZHRoID0gMTsKIAkJCWRvIHsKQEAgLTE4NzEsMTcgKzE5NDEsMTUgQEAKIAkJY29udGludWU7CiAJCWNhc2UgJ3MnOgogCQl7Ci0JCQljaGFyICpzID0gKGNoYXIgKikgdmFfYXJnKGFyZ3MsIGNoYXIgKik7Ci0JCQlpZihmaWVsZF93aWR0aCA9PSAtMSkKKwkJCWNoYXIgKnMgPSAoY2hhciAqKXZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJaWYgKGZpZWxkX3dpZHRoID09IC0xKQogCQkJCWZpZWxkX3dpZHRoID0gSU5UX01BWDsKIAkJCS8qIGZpcnN0LCBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgaW4gYnVmZmVyICovCi0JCQl3aGlsZSAoaXNzcGFjZSgqc3RyKSkKLQkJCQlzdHIrKzsKKwkJCXN0ciA9IHNraXBfc3BhY2VzKHN0cik7CiAKIAkJCS8qIG5vdyBjb3B5IHVudGlsIG5leHQgd2hpdGUgc3BhY2UgKi8KLQkJCXdoaWxlICgqc3RyICYmICFpc3NwYWNlKCpzdHIpICYmIGZpZWxkX3dpZHRoLS0pIHsKKwkJCXdoaWxlICgqc3RyICYmICFpc3NwYWNlKCpzdHIpICYmIGZpZWxkX3dpZHRoLS0pCiAJCQkJKnMrKyA9ICpzdHIrKzsKLQkJCX0KIAkJCSpzID0gJ1wwJzsKIAkJCW51bSsrOwogCQl9CkBAIC0xODg5LDcgKzE5NTcsNyBAQAogCQljYXNlICduJzoKIAkJCS8qIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIHNvIGZhciAqLwogCQl7Ci0JCQlpbnQgKmkgPSAoaW50ICopdmFfYXJnKGFyZ3MsaW50Kik7CisJCQlpbnQgKmkgPSAoaW50ICopdmFfYXJnKGFyZ3MsIGludCopOwogCQkJKmkgPSBzdHIgLSBidWY7CiAJCX0KIAkJY29udGludWU7CkBAIC0xOTAxLDE0ICsxOTY5LDE0IEBACiAJCQliYXNlID0gMTY7CiAJCQlicmVhazsKIAkJY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gMDsKKwkJCWJhc2UgPSAwOwogCQljYXNlICdkJzoKIAkJCWlzX3NpZ24gPSAxOwogCQljYXNlICd1JzoKIAkJCWJyZWFrOwogCQljYXNlICclJzoKIAkJCS8qIGxvb2tpbmcgZm9yICclJyBpbiBzdHIgKi8KLQkJCWlmICgqc3RyKysgIT0gJyUnKSAKKwkJCWlmICgqc3RyKysgIT0gJyUnKQogCQkJCXJldHVybiBudW07CiAJCQljb250aW51ZTsKIAkJZGVmYXVsdDoKQEAgLTE5MTksNzEgKzE5ODcsNzAgQEAKIAkJLyogaGF2ZSBzb21lIHNvcnQgb2YgaW50ZWdlciBjb252ZXJzaW9uLgogCQkgKiBmaXJzdCwgc2tpcCB3aGl0ZSBzcGFjZSBpbiBidWZmZXIuCiAJCSAqLwotCQl3aGlsZSAoaXNzcGFjZSgqc3RyKSkKLQkJCXN0cisrOworCQlzdHIgPSBza2lwX3NwYWNlcyhzdHIpOwogCiAJCWRpZ2l0ID0gKnN0cjsKIAkJaWYgKGlzX3NpZ24gJiYgZGlnaXQgPT0gJy0nKQogCQkJZGlnaXQgPSAqKHN0ciArIDEpOwogCiAJCWlmICghZGlnaXQKLSAgICAgICAgICAgICAgICAgICAgfHwgKGJhc2UgPT0gMTYgJiYgIWlzeGRpZ2l0KGRpZ2l0KSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKGJhc2UgPT0gMTAgJiYgIWlzZGlnaXQoZGlnaXQpKQotICAgICAgICAgICAgICAgICAgICB8fCAoYmFzZSA9PSA4ICYmICghaXNkaWdpdChkaWdpdCkgfHwgZGlnaXQgPiAnNycpKQotICAgICAgICAgICAgICAgICAgICB8fCAoYmFzZSA9PSAwICYmICFpc2RpZ2l0KGRpZ2l0KSkpCi0JCQkJYnJlYWs7CisJCSAgICB8fCAoYmFzZSA9PSAxNiAmJiAhaXN4ZGlnaXQoZGlnaXQpKQorCQkgICAgfHwgKGJhc2UgPT0gMTAgJiYgIWlzZGlnaXQoZGlnaXQpKQorCQkgICAgfHwgKGJhc2UgPT0gOCAmJiAoIWlzZGlnaXQoZGlnaXQpIHx8IGRpZ2l0ID4gJzcnKSkKKwkJICAgIHx8IChiYXNlID09IDAgJiYgIWlzZGlnaXQoZGlnaXQpKSkKKwkJCWJyZWFrOwogCi0JCXN3aXRjaChxdWFsaWZpZXIpIHsKKwkJc3dpdGNoIChxdWFsaWZpZXIpIHsKIAkJY2FzZSAnSCc6CS8qIHRoYXQncyAnaGgnIGluIGZvcm1hdCAqLwogCQkJaWYgKGlzX3NpZ24pIHsKLQkJCQlzaWduZWQgY2hhciAqcyA9IChzaWduZWQgY2hhciAqKSB2YV9hcmcoYXJncyxzaWduZWQgY2hhciAqKTsKLQkJCQkqcyA9IChzaWduZWQgY2hhcikgc2ltcGxlX3N0cnRvbChzdHIsJm5leHQsYmFzZSk7CisJCQkJc2lnbmVkIGNoYXIgKnMgPSAoc2lnbmVkIGNoYXIgKil2YV9hcmcoYXJncywgc2lnbmVkIGNoYXIgKik7CisJCQkJKnMgPSAoc2lnbmVkIGNoYXIpc2ltcGxlX3N0cnRvbChzdHIsICZuZXh0LCBiYXNlKTsKIAkJCX0gZWxzZSB7Ci0JCQkJdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopIHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBjaGFyICopOwotCQkJCSpzID0gKHVuc2lnbmVkIGNoYXIpIHNpbXBsZV9zdHJ0b3VsKHN0ciwgJm5leHQsIGJhc2UpOworCQkJCXVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKXZhX2FyZyhhcmdzLCB1bnNpZ25lZCBjaGFyICopOworCQkJCSpzID0gKHVuc2lnbmVkIGNoYXIpc2ltcGxlX3N0cnRvdWwoc3RyLCAmbmV4dCwgYmFzZSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAnaCc6CiAJCQlpZiAoaXNfc2lnbikgewotCQkJCXNob3J0ICpzID0gKHNob3J0ICopIHZhX2FyZyhhcmdzLHNob3J0ICopOwotCQkJCSpzID0gKHNob3J0KSBzaW1wbGVfc3RydG9sKHN0ciwmbmV4dCxiYXNlKTsKKwkJCQlzaG9ydCAqcyA9IChzaG9ydCAqKXZhX2FyZyhhcmdzLCBzaG9ydCAqKTsKKwkJCQkqcyA9IChzaG9ydClzaW1wbGVfc3RydG9sKHN0ciwgJm5leHQsIGJhc2UpOwogCQkJfSBlbHNlIHsKLQkJCQl1bnNpZ25lZCBzaG9ydCAqcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSB2YV9hcmcoYXJncywgdW5zaWduZWQgc2hvcnQgKik7Ci0JCQkJKnMgPSAodW5zaWduZWQgc2hvcnQpIHNpbXBsZV9zdHJ0b3VsKHN0ciwgJm5leHQsIGJhc2UpOworCQkJCXVuc2lnbmVkIHNob3J0ICpzID0gKHVuc2lnbmVkIHNob3J0ICopdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIHNob3J0ICopOworCQkJCSpzID0gKHVuc2lnbmVkIHNob3J0KXNpbXBsZV9zdHJ0b3VsKHN0ciwgJm5leHQsIGJhc2UpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQkJaWYgKGlzX3NpZ24pIHsKLQkJCQlsb25nICpsID0gKGxvbmcgKikgdmFfYXJnKGFyZ3MsbG9uZyAqKTsKLQkJCQkqbCA9IHNpbXBsZV9zdHJ0b2woc3RyLCZuZXh0LGJhc2UpOworCQkJCWxvbmcgKmwgPSAobG9uZyAqKXZhX2FyZyhhcmdzLCBsb25nICopOworCQkJCSpsID0gc2ltcGxlX3N0cnRvbChzdHIsICZuZXh0LCBiYXNlKTsKIAkJCX0gZWxzZSB7Ci0JCQkJdW5zaWduZWQgbG9uZyAqbCA9ICh1bnNpZ25lZCBsb25nKikgdmFfYXJnKGFyZ3MsdW5zaWduZWQgbG9uZyopOwotCQkJCSpsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCZuZXh0LGJhc2UpOworCQkJCXVuc2lnbmVkIGxvbmcgKmwgPSAodW5zaWduZWQgbG9uZyAqKXZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nICopOworCQkJCSpsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmbmV4dCwgYmFzZSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAnTCc6CiAJCQlpZiAoaXNfc2lnbikgewotCQkJCWxvbmcgbG9uZyAqbCA9IChsb25nIGxvbmcqKSB2YV9hcmcoYXJncyxsb25nIGxvbmcgKik7Ci0JCQkJKmwgPSBzaW1wbGVfc3RydG9sbChzdHIsJm5leHQsYmFzZSk7CisJCQkJbG9uZyBsb25nICpsID0gKGxvbmcgbG9uZyAqKXZhX2FyZyhhcmdzLCBsb25nIGxvbmcgKik7CisJCQkJKmwgPSBzaW1wbGVfc3RydG9sbChzdHIsICZuZXh0LCBiYXNlKTsKIAkJCX0gZWxzZSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBsb25nICpsID0gKHVuc2lnbmVkIGxvbmcgbG9uZyopIHZhX2FyZyhhcmdzLHVuc2lnbmVkIGxvbmcgbG9uZyopOwotCQkJCSpsID0gc2ltcGxlX3N0cnRvdWxsKHN0ciwmbmV4dCxiYXNlKTsKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgKmwgPSAodW5zaWduZWQgbG9uZyBsb25nICopdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcgbG9uZyAqKTsKKwkJCQkqbCA9IHNpbXBsZV9zdHJ0b3VsbChzdHIsICZuZXh0LCBiYXNlKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICdaJzoKIAkJY2FzZSAneic6CiAJCXsKLQkJCXNpemVfdCAqcyA9IChzaXplX3QqKSB2YV9hcmcoYXJncyxzaXplX3QqKTsKLQkJCSpzID0gKHNpemVfdCkgc2ltcGxlX3N0cnRvdWwoc3RyLCZuZXh0LGJhc2UpOworCQkJc2l6ZV90ICpzID0gKHNpemVfdCAqKXZhX2FyZyhhcmdzLCBzaXplX3QgKik7CisJCQkqcyA9IChzaXplX3Qpc2ltcGxlX3N0cnRvdWwoc3RyLCAmbmV4dCwgYmFzZSk7CiAJCX0KIAkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoaXNfc2lnbikgewotCQkJCWludCAqaSA9IChpbnQgKikgdmFfYXJnKGFyZ3MsIGludCopOwotCQkJCSppID0gKGludCkgc2ltcGxlX3N0cnRvbChzdHIsJm5leHQsYmFzZSk7CisJCQkJaW50ICppID0gKGludCAqKXZhX2FyZyhhcmdzLCBpbnQgKik7CisJCQkJKmkgPSAoaW50KXNpbXBsZV9zdHJ0b2woc3RyLCAmbmV4dCwgYmFzZSk7CiAJCQl9IGVsc2UgewotCQkJCXVuc2lnbmVkIGludCAqaSA9ICh1bnNpZ25lZCBpbnQqKSB2YV9hcmcoYXJncywgdW5zaWduZWQgaW50Kik7Ci0JCQkJKmkgPSAodW5zaWduZWQgaW50KSBzaW1wbGVfc3RydG91bChzdHIsJm5leHQsYmFzZSk7CisJCQkJdW5zaWduZWQgaW50ICppID0gKHVuc2lnbmVkIGludCAqKXZhX2FyZyhhcmdzLCB1bnNpZ25lZCBpbnQqKTsKKwkJCQkqaSA9ICh1bnNpZ25lZCBpbnQpc2ltcGxlX3N0cnRvdWwoc3RyLCAmbmV4dCwgYmFzZSk7CiAJCQl9CiAJCQlicmVhazsKIAkJfQpAQCAtMjAxNCwxNCArMjA4MSwxNSBAQAogICogQGZtdDoJZm9ybWF0dGluZyBvZiBidWZmZXIKICAqIEAuLi46CXJlc3VsdGluZyBhcmd1bWVudHMKICAqLwotaW50IHNzY2FuZihjb25zdCBjaGFyICogYnVmLCBjb25zdCBjaGFyICogZm10LCAuLi4pCitpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCWludCBpOwogCi0JdmFfc3RhcnQoYXJncyxmbXQpOwotCWkgPSB2c3NjYW5mKGJ1ZixmbXQsYXJncyk7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlpID0gdnNzY2FuZihidWYsIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOworCiAJcmV0dXJuIGk7CiB9CiBFWFBPUlRfU1lNQk9MKHNzY2FuZik7CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA0NGNmNmYwLi5lZTlmM2UwIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTE1OCwxMSArMTU4LDEzIEBACiAjIERlZmF1bHQgdG8gNCBmb3Igd2lkZXIgdGVzdGluZywgdGhvdWdoIDggbWlnaHQgYmUgbW9yZSBhcHByb3ByaWF0ZS4KICMgQVJNJ3MgYWRqdXN0X3B0ZSAodW51c2VkIGlmIFZJUFQpIGRlcGVuZHMgb24gbW0td2lkZSBwYWdlX3RhYmxlX2xvY2suCiAjIFBBLVJJU0MgN3h4eCdzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLgorIyBERUJVR19TUElOTE9DSyBhbmQgREVCVUdfTE9DS19BTExPQyBzcGlubG9ja190IGFsc28gZW5sYXJnZSBzdHJ1Y3QgcGFnZS4KICMKIGNvbmZpZyBTUExJVF9QVExPQ0tfQ1BVUwogCWludAotCWRlZmF1bHQgIjQwOTYiIGlmIEFSTSAmJiAhQ1BVX0NBQ0hFX1ZJUFQKLQlkZWZhdWx0ICI0MDk2IiBpZiBQQVJJU0MgJiYgIVBBMjAKKwlkZWZhdWx0ICI5OTk5OTkiIGlmIEFSTSAmJiAhQ1BVX0NBQ0hFX1ZJUFQKKwlkZWZhdWx0ICI5OTk5OTkiIGlmIFBBUklTQyAmJiAhUEEyMAorCWRlZmF1bHQgIjk5OTk5OSIgaWYgREVCVUdfU1BJTkxPQ0sgfHwgREVCVUdfTE9DS19BTExPQwogCWRlZmF1bHQgIjQiCiAKICMKQEAgLTIwMCwxNCArMjAyLDYgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiAhQVJDSF9OT19WSVJUX1RPX0JVUwogCi1jb25maWcgSEFWRV9NTE9DSwotCWJvb2wKLQlkZWZhdWx0IHkgaWYgTU1VPXkKLQotY29uZmlnIEhBVkVfTUxPQ0tFRF9QQUdFX0JJVAotCWJvb2wKLQlkZWZhdWx0IHkgaWYgSEFWRV9NTE9DSz15Ci0KIGNvbmZpZyBNTVVfTk9USUZJRVIKIAlib29sCiAKQEAgLTIxOCw3ICsyMTIsNyBAQAogCSAgRW5hYmxlIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nOiBLU00gcGVyaW9kaWNhbGx5IHNjYW5zIHRob3NlIGFyZWFzCiAJICBvZiBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3Mgc3BhY2UgdGhhdCBhbiBhcHAgaGFzIGFkdmlzZWQgbWF5IGJlCiAJICBtZXJnZWFibGUuICBXaGVuIGl0IGZpbmRzIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50LCBpdCByZXBsYWNlcwotCSAgdGhlIG1hbnkgaW5zdGFuY2VzIGJ5IGEgc2luZ2xlIHJlc2lkZW50IHBhZ2Ugd2l0aCB0aGF0IGNvbnRlbnQsIHNvCisJICB0aGUgbWFueSBpbnN0YW5jZXMgYnkgYSBzaW5nbGUgcGFnZSB3aXRoIHRoYXQgY29udGVudCwgc28KIAkgIHNhdmluZyBtZW1vcnkgdW50aWwgb25lIG9yIGFub3RoZXIgYXBwIG5lZWRzIHRvIG1vZGlmeSB0aGUgY29udGVudC4KIAkgIFJlY29tbWVuZGVkIGZvciB1c2Ugd2l0aCBLVk0sIG9yIHdpdGggb3RoZXIgZHVwbGljYXRpdmUgYXBwbGljYXRpb25zLgogCSAgU2VlIERvY3VtZW50YXRpb24vdm0va3NtLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbjogS1NNIGlzIGluYWN0aXZlCkBAIC0yMjcsNiArMjIxLDcgQEAKIAogY29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUgogICAgICAgICBpbnQgIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb24iCisJZGVwZW5kcyBvbiBNTVUKICAgICAgICAgZGVmYXVsdCA0MDk2CiAgICAgICAgIGhlbHAKIAkgIFRoaXMgaXMgdGhlIHBvcnRpb24gb2YgbG93IHZpcnR1YWwgbWVtb3J5IHdoaWNoIHNob3VsZCBiZSBwcm90ZWN0ZWQKQEAgLTI1Nyw4ICsyNTIsOSBAQAogCSAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS4KIAogY29uZmlnIEhXUE9JU09OX0lOSkVDVAotCXRyaXN0YXRlICJQb2lzb24gcGFnZXMgaW5qZWN0b3IiCisJdHJpc3RhdGUgIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yIgogCWRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgJiYgREVCVUdfS0VSTkVMCisJc2VsZWN0IFBST0NfUEFHRV9NT05JVE9SCiAKIGNvbmZpZyBOT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTCiAJaW50ICJUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmciCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGViZjg0OTAuLjdhNjhkMmEgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0yMiw3ICsyMiw2IEBACiBvYmotJChDT05GSUdfTlVNQSkgCSs9IG1lbXBvbGljeS5vCiBvYmotJChDT05GSUdfU1BBUlNFTUVNKQkrPSBzcGFyc2Uubwogb2JqLSQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKSArPSBzcGFyc2Utdm1lbW1hcC5vCi1vYmotJChDT05GSUdfVE1QRlNfUE9TSVhfQUNMKSArPSBzaG1lbV9hY2wubwogb2JqLSQoQ09ORklHX1NMT0IpICs9IHNsb2Iubwogb2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm8KIG9iai0kKENPTkZJR19LU00pICs9IGtzbS5vCkBAIC0zNCwxMSArMzMsNyBAQAogb2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnlfaG90cGx1Zy5vCiBvYmotJChDT05GSUdfRlNfWElQKSArPSBmaWxlbWFwX3hpcC5vCiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm8KLWlmbmRlZiBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCiBvYmotJChDT05GSUdfU01QKSArPSBwZXJjcHUubwotZWxzZQotb2JqLSQoQ09ORklHX1NNUCkgKz0gYWxsb2NwZXJjcHUubwotZW5kaWYKIG9iai0kKENPTkZJR19RVUlDS0xJU1QpICs9IHF1aWNrbGlzdC5vCiBvYmotJChDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUikgKz0gbWVtY29udHJvbC5vIHBhZ2VfY2dyb3VwLm8KIG9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgKz0gbWVtb3J5LWZhaWx1cmUubwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NwZXJjcHUuYyBiL21tL2FsbG9jcGVyY3B1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzRjZWEuLjAwMDAwMDAKLS0tIGEvbW0vYWxsb2NwZXJjcHUuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKgotICogbGludXgvbW0vYWxsb2NwZXJjcHUuYwotICoKLSAqIFNlcGFyYXRlZCBmcm9tIHNsYWIuYyBBdWd1c3QgMTEsIDIwMDYgQ2hyaXN0b3BoIExhbWV0ZXIKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotCi0jaWZuZGVmIGNhY2hlX2xpbmVfc2l6ZQotI2RlZmluZSBjYWNoZV9saW5lX3NpemUoKQlMMV9DQUNIRV9CWVRFUwotI2VuZGlmCi0KLS8qKgotICogcGVyY3B1X2RlcG9wdWxhdGUgLSBkZXBvcHVsYXRlIHBlci1jcHUgZGF0YSBmb3IgZ2l2ZW4gY3B1Ci0gKiBAX19wZGF0YTogcGVyLWNwdSBkYXRhIHRvIGRlcG9wdWxhdGUKLSAqIEBjcHU6IGRlcG9wdWxhdGUgcGVyLWNwdSBkYXRhIGZvciB0aGlzIGNwdQotICoKLSAqIERlcG9wdWxhdGluZyBwZXItY3B1IGRhdGEgZm9yIGEgY3B1IGdvaW5nIG9mZmxpbmUgd291bGQgYmUgYSB0eXBpY2FsCi0gKiB1c2UgY2FzZS4gWW91IG5lZWQgdG8gcmVnaXN0ZXIgYSBjcHUgaG90cGx1ZyBoYW5kbGVyIGZvciB0aGF0IHB1cnBvc2UuCi0gKi8KLXN0YXRpYyB2b2lkIHBlcmNwdV9kZXBvcHVsYXRlKHZvaWQgKl9fcGRhdGEsIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmNwdV9kYXRhICpwZGF0YSA9IF9fcGVyY3B1X2Rpc2d1aXNlKF9fcGRhdGEpOwotCi0Ja2ZyZWUocGRhdGEtPnB0cnNbY3B1XSk7Ci0JcGRhdGEtPnB0cnNbY3B1XSA9IE5VTEw7Ci19Ci0KLS8qKgotICogcGVyY3B1X2RlcG9wdWxhdGVfbWFzayAtIGRlcG9wdWxhdGUgcGVyLWNwdSBkYXRhIGZvciBzb21lIGNwdSdzCi0gKiBAX19wZGF0YTogcGVyLWNwdSBkYXRhIHRvIGRlcG9wdWxhdGUKLSAqIEBtYXNrOiBkZXBvcHVsYXRlIHBlci1jcHUgZGF0YSBmb3IgY3B1J3Mgc2VsZWN0ZWQgdGhyb3VnaCBtYXNrIGJpdHMKLSAqLwotc3RhdGljIHZvaWQgX19wZXJjcHVfZGVwb3B1bGF0ZV9tYXNrKHZvaWQgKl9fcGRhdGEsIGNvbnN0IGNwdW1hc2tfdCAqbWFzaykKLXsKLQlpbnQgY3B1OwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKm1hc2spCi0JCXBlcmNwdV9kZXBvcHVsYXRlKF9fcGRhdGEsIGNwdSk7Ci19Ci0KLSNkZWZpbmUgcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCBtYXNrKSBcCi0JX19wZXJjcHVfZGVwb3B1bGF0ZV9tYXNrKChfX3BkYXRhKSwgJihtYXNrKSkKLQotLyoqCi0gKiBwZXJjcHVfcG9wdWxhdGUgLSBwb3B1bGF0ZSBwZXItY3B1IGRhdGEgZm9yIGdpdmVuIGNwdQotICogQF9fcGRhdGE6IHBlci1jcHUgZGF0YSB0byBwb3B1bGF0ZSBmdXJ0aGVyCi0gKiBAc2l6ZTogc2l6ZSBvZiBwZXItY3B1IG9iamVjdAotICogQGdmcDogbWF5IHNsZWVwIG9yIG5vdCBldGMuCi0gKiBAY3B1OiBwb3B1bGF0ZSBwZXItZGF0YSBmb3IgdGhpcyBjcHUKLSAqCi0gKiBQb3B1bGF0aW5nIHBlci1jcHUgZGF0YSBmb3IgYSBjcHUgY29taW5nIG9ubGluZSB3b3VsZCBiZSBhIHR5cGljYWwKLSAqIHVzZSBjYXNlLiBZb3UgbmVlZCB0byByZWdpc3RlciBhIGNwdSBob3RwbHVnIGhhbmRsZXIgZm9yIHRoYXQgcHVycG9zZS4KLSAqIFBlci1jcHUgb2JqZWN0IGlzIHBvcHVsYXRlZCB3aXRoIHplcm9lZCBidWZmZXIuCi0gKi8KLXN0YXRpYyB2b2lkICpwZXJjcHVfcG9wdWxhdGUodm9pZCAqX19wZGF0YSwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcGVyY3B1X2RhdGEgKnBkYXRhID0gX19wZXJjcHVfZGlzZ3Vpc2UoX19wZGF0YSk7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCi0JLyoKLQkgKiBXZSBzaG91bGQgbWFrZSBzdXJlIGVhY2ggQ1BVIGdldHMgcHJpdmF0ZSBtZW1vcnkuCi0JICovCi0Jc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgY2FjaGVfbGluZV9zaXplKCkpOwotCi0JQlVHX09OKHBkYXRhLT5wdHJzW2NwdV0pOwotCWlmIChub2RlX29ubGluZShub2RlKSkKLQkJcGRhdGEtPnB0cnNbY3B1XSA9IGttYWxsb2Nfbm9kZShzaXplLCBnZnB8X19HRlBfWkVSTywgbm9kZSk7Ci0JZWxzZQotCQlwZGF0YS0+cHRyc1tjcHVdID0ga3phbGxvYyhzaXplLCBnZnApOwotCXJldHVybiBwZGF0YS0+cHRyc1tjcHVdOwotfQotCi0vKioKLSAqIHBlcmNwdV9wb3B1bGF0ZV9tYXNrIC0gcG9wdWxhdGUgcGVyLWNwdSBkYXRhIGZvciBtb3JlIGNwdSdzCi0gKiBAX19wZGF0YTogcGVyLWNwdSBkYXRhIHRvIHBvcHVsYXRlIGZ1cnRoZXIKLSAqIEBzaXplOiBzaXplIG9mIHBlci1jcHUgb2JqZWN0Ci0gKiBAZ2ZwOiBtYXkgc2xlZXAgb3Igbm90IGV0Yy4KLSAqIEBtYXNrOiBwb3B1bGF0ZSBwZXItY3B1IGRhdGEgZm9yIGNwdSdzIHNlbGVjdGVkIHRocm91Z2ggbWFzayBiaXRzCi0gKgotICogUGVyLWNwdSBvYmplY3RzIGFyZSBwb3B1bGF0ZWQgd2l0aCB6ZXJvZWQgYnVmZmVycy4KLSAqLwotc3RhdGljIGludCBfX3BlcmNwdV9wb3B1bGF0ZV9tYXNrKHZvaWQgKl9fcGRhdGEsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsCi0JCQkJICBjcHVtYXNrX3QgKm1hc2spCi17Ci0JY3B1bWFza190IHBvcHVsYXRlZDsKLQlpbnQgY3B1OwotCi0JY3B1c19jbGVhcihwb3B1bGF0ZWQpOwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKm1hc2spCi0JCWlmICh1bmxpa2VseSghcGVyY3B1X3BvcHVsYXRlKF9fcGRhdGEsIHNpemUsIGdmcCwgY3B1KSkpIHsKLQkJCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCAmcG9wdWxhdGVkKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9IGVsc2UKLQkJCWNwdV9zZXQoY3B1LCBwb3B1bGF0ZWQpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHBlcmNwdV9wb3B1bGF0ZV9tYXNrKF9fcGRhdGEsIHNpemUsIGdmcCwgbWFzaykgXAotCV9fcGVyY3B1X3BvcHVsYXRlX21hc2soKF9fcGRhdGEpLCAoc2l6ZSksIChnZnApLCAmKG1hc2spKQotCi0vKioKLSAqIGFsbG9jX3BlcmNwdSAtIGluaXRpYWwgc2V0dXAgb2YgcGVyLWNwdSBkYXRhCi0gKiBAc2l6ZTogc2l6ZSBvZiBwZXItY3B1IG9iamVjdAotICogQGFsaWduOiBhbGlnbm1lbnQKLSAqCi0gKiBBbGxvY2F0ZSBkeW5hbWljIHBlcmNwdSBhcmVhLiAgUGVyY3B1IG9iamVjdHMgYXJlIHBvcHVsYXRlZCB3aXRoCi0gKiB6ZXJvZWQgYnVmZmVycy4KLSAqLwotdm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKLXsKLQkvKgotCSAqIFdlIGFsbG9jYXRlIHdob2xlIGNhY2hlIGxpbmVzIHRvIGF2b2lkIGZhbHNlIHNoYXJpbmcKLQkgKi8KLQlzaXplX3Qgc3ogPSByb3VuZHVwKG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKSwgY2FjaGVfbGluZV9zaXplKCkpOwotCXZvaWQgKnBkYXRhID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7Ci0Jdm9pZCAqX19wZGF0YSA9IF9fcGVyY3B1X2Rpc2d1aXNlKHBkYXRhKTsKLQotCS8qCi0JICogQ2FuJ3QgZWFzaWx5IG1ha2UgbGFyZ2VyIGFsaWdubWVudCB3b3JrIHdpdGgga21hbGxvYy4gIFdBUk4KLQkgKiBvbiBpdC4gIExhcmdlciBhbGlnbm1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgbW9kdWxlCi0JICogcGVyY3B1IHNlY3Rpb25zIG9uIFNNUCBmb3Igd2hpY2ggdGhpcyBwYXRoIGlzbid0IHVzZWQuCi0JICovCi0JV0FSTl9PTl9PTkNFKGFsaWduID4gU01QX0NBQ0hFX0JZVEVTKTsKLQotCWlmICh1bmxpa2VseSghcGRhdGEpKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAobGlrZWx5KCFfX3BlcmNwdV9wb3B1bGF0ZV9tYXNrKF9fcGRhdGEsIHNpemUsIEdGUF9LRVJORUwsCi0JCQkJCSAgICZjcHVfcG9zc2libGVfbWFwKSkpCi0JCXJldHVybiBfX3BkYXRhOwotCWtmcmVlKHBkYXRhKTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fYWxsb2NfcGVyY3B1KTsKLQotLyoqCi0gKiBmcmVlX3BlcmNwdSAtIGZpbmFsIGNsZWFudXAgb2YgcGVyLWNwdSBkYXRhCi0gKiBAX19wZGF0YTogb2JqZWN0IHRvIGNsZWFuIHVwCi0gKgotICogV2Ugc2ltcGx5IGNsZWFuIHVwIGFueSBwZXItY3B1IG9iamVjdCBsZWZ0LiBObyBuZWVkIGZvciB0aGUgY2xpZW50IHRvCi0gKiB0cmFjayBhbmQgc3BlY2lmeSB0aHJvdWdoIGEgYmlzIG1hc2sgd2hpY2ggcGVyLWNwdSBvYmplY3RzIGFyZSB0byBmcmVlLgotICovCi12b2lkIGZyZWVfcGVyY3B1KHZvaWQgKl9fcGRhdGEpCi17Ci0JaWYgKHVubGlrZWx5KCFfX3BkYXRhKSkKLQkJcmV0dXJuOwotCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCBjcHVfcG9zc2libGVfbWFzayk7Ci0Ja2ZyZWUoX19wZXJjcHVfZGlzZ3Vpc2UoX19wZGF0YSkpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOwotCi0vKgotICogR2VuZXJpYyBwZXJjcHUgYXJlYSBzZXR1cC4KLSAqLwotI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKLXVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwotCi1FWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOwotCi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzaXplLCBpOwotCWNoYXIgKnB0cjsKLQl1bnNpZ25lZCBsb25nIG5yX3Bvc3NpYmxlX2NwdXMgPSBudW1fcG9zc2libGVfY3B1cygpOwotCi0JLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCi0Jc2l6ZSA9IEFMSUdOKFBFUkNQVV9FTk9VR0hfUk9PTSwgUEFHRV9TSVpFKTsKLQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUgKiBucl9wb3NzaWJsZV9jcHVzKTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCV9fcGVyX2NwdV9vZmZzZXRbaV0gPSBwdHIgLSBfX3Blcl9jcHVfc3RhcnQ7Ci0JCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7Ci0JCXB0ciArPSBzaXplOwotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgKi8KZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCBkMWRjMjNjLi43ZDE0ODY4IDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC00MzIsOCArNDMyLDggQEAKIAlyZXR1cm4gbWFya19ib290bWVtKHN0YXJ0LCBlbmQsIDEsIGZsYWdzKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxpZ25faWR4KHN0cnVjdCBib290bWVtX2RhdGEgKmJkYXRhLCB1bnNpZ25lZCBsb25nIGlkeCwKLQkJCXVuc2lnbmVkIGxvbmcgc3RlcCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBhbGlnbl9pZHgoc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGEsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgc3RlcCkKIHsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBiZGF0YS0+bm9kZV9taW5fcGZuOwogCkBAIC00NDUsOCArNDQ1LDggQEAKIAlyZXR1cm4gQUxJR04oYmFzZSArIGlkeCwgc3RlcCkgLSBiYXNlOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGlnbl9vZmYoc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGEsIHVuc2lnbmVkIGxvbmcgb2ZmLAotCQkJdW5zaWduZWQgbG9uZyBhbGlnbikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBhbGlnbl9vZmYoc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGEsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gUEZOX1BIWVMoYmRhdGEtPm5vZGVfbWluX3Bmbik7CiAKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA4YjRkODhmLi45NmFjNmIwIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0yMjQwLDcgKzIyNDAsNiBAQAogCQlzaXplX3QgY291bnQsIHNzaXplX3Qgd3JpdHRlbikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAJc3NpemVfdCBzdGF0dXM7CiAJc3RydWN0IGlvdl9pdGVyIGk7CiAKQEAgLTIyNTIsMTUgKzIyNTEsNiBAQAogCQkqcHBvcyA9IHBvcyArIHN0YXR1czsKICAgCX0KIAkKLQkvKgotCSAqIElmIHdlIGdldCBoZXJlIGZvciBPX0RJUkVDVCB3cml0ZXMgdGhlbiB3ZSBtdXN0IGhhdmUgZmFsbGVuIHRocm91Z2gKLQkgKiB0byBidWZmZXJlZCB3cml0ZXMgKGJsb2NrIGluc3RhbnRpYXRpb24gaW5zaWRlIGlfc2l6ZSkuICBTbyB3ZSBzeW5jCi0JICogdGhlIGZpbGUgZGF0YSBoZXJlLCB0byB0cnkgdG8gaG9ub3VyIE9fRElSRUNUIGV4cGVjdGF0aW9ucy4KLQkgKi8KLQlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSAmJiB3cml0dGVuKQotCQlzdGF0dXMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsCi0JCQkJCXBvcywgcG9zICsgd3JpdHRlbiAtIDEpOwotCiAJcmV0dXJuIHdyaXR0ZW4gPyB3cml0dGVuIDogc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGVfYnVmZmVyZWRfd3JpdGUpOwpAQCAtMjM1OSwxMCArMjM0OSw3IEBACiAJCSAqIHNlbWFudGljcy4KIAkJICovCiAJCWVuZGJ5dGUgPSBwb3MgKyB3cml0dGVuX2J1ZmZlcmVkIC0gd3JpdHRlbiAtIDE7Ci0JCWVyciA9IGRvX3N5bmNfbWFwcGluZ19yYW5nZShmaWxlLT5mX21hcHBpbmcsIHBvcywgZW5kYnl0ZSwKLQkJCQkJICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRXwKLQkJCQkJICAgIFNZTkNfRklMRV9SQU5HRV9XUklURXwKLQkJCQkJICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKTsKKwkJZXJyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLT5mX21hcHBpbmcsIHBvcywgZW5kYnl0ZSk7CiAJCWlmIChlcnIgPT0gMCkgewogCQkJd3JpdHRlbiA9IHdyaXR0ZW5fYnVmZmVyZWQ7CiAJCQlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMobWFwcGluZywKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1ZDc2MDFiLi42NWYzOGMyIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgvbm9kZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGNvbnN0IHVuc2lnbmVkIGxvbmcgaHVnZXRsYl96ZXJvID0gMCwgaHVnZXRsYl9pbmZpbml0eSA9IH4wVUw7CkBAIC02MjIsNDIgKzYyMyw2NiBAQAogfQogCiAvKgotICogVXNlIGEgaGVscGVyIHZhcmlhYmxlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSBhbmQgdGhlbgotICogY29weSBpdCBiYWNrIHRvIG5leHRfbmlkX3RvX2FsbG9jIGFmdGVyd2FyZHM6Ci0gKiBvdGhlcndpc2UgdGhlcmUncyBhIHdpbmRvdyBpbiB3aGljaCBhIHJhY2VyIG1pZ2h0Ci0gKiBwYXNzIGludmFsaWQgbmlkIE1BWF9OVU1OT0RFUyB0byBhbGxvY19wYWdlc19leGFjdF9ub2RlLgotICogQnV0IHdlIGRvbid0IG5lZWQgdG8gdXNlIGEgc3Bpbl9sb2NrIGhlcmU6IGl0IHJlYWxseQotICogZG9lc24ndCBtYXR0ZXIgaWYgb2NjYXNpb25hbGx5IGEgcmFjZXIgY2hvb3NlcyB0aGUKLSAqIHNhbWUgbmlkIGFzIHdlIGRvLiAgTW92ZSBuaWQgZm9yd2FyZCBpbiB0aGUgbWFzayBldmVuCi0gKiBpZiB3ZSBqdXN0IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYSBodWdlcGFnZSBzbyB0aGF0Ci0gKiB0aGUgbmV4dCBjYWxsZXIgZ2V0cyBodWdlcGFnZXMgb24gdGhlIG5leHQgbm9kZS4KKyAqIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIGZvciBoc3RhdGVfbmV4dF9ub2RlX3RvX3thbGxvY3xmcmVlfS4KKyAqIFdlIG1heSBoYXZlIGFsbG9jYXRlZCBvciBmcmVlZCBhIGh1Z2UgcGFnZSBiYXNlZCBvbiBhIGRpZmZlcmVudAorICogbm9kZXNfYWxsb3dlZCBwcmV2aW91c2x5LCBzbyBoLT5uZXh0X25vZGVfdG9fe2FsbG9jfGZyZWV9IG1pZ2h0CisgKiBiZSBvdXRzaWRlIG9mICpub2Rlc19hbGxvd2VkLiAgRW5zdXJlIHRoYXQgd2UgdXNlIGFuIGFsbG93ZWQKKyAqIG5vZGUgZm9yIGFsbG9jIG9yIGZyZWUuCiAgKi8KLXN0YXRpYyBpbnQgaHN0YXRlX25leHRfbm9kZV90b19hbGxvYyhzdHJ1Y3QgaHN0YXRlICpoKQorc3RhdGljIGludCBuZXh0X25vZGVfYWxsb3dlZChpbnQgbmlkLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkKQogewotCWludCBuZXh0X25pZDsKLQluZXh0X25pZCA9IG5leHRfbm9kZShoLT5uZXh0X25pZF90b19hbGxvYywgbm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAobmV4dF9uaWQgPT0gTUFYX05VTU5PREVTKQotCQluZXh0X25pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLQloLT5uZXh0X25pZF90b19hbGxvYyA9IG5leHRfbmlkOwotCXJldHVybiBuZXh0X25pZDsKKwluaWQgPSBuZXh0X25vZGUobmlkLCAqbm9kZXNfYWxsb3dlZCk7CisJaWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMpCisJCW5pZCA9IGZpcnN0X25vZGUoKm5vZGVzX2FsbG93ZWQpOworCVZNX0JVR19PTihuaWQgPj0gTUFYX05VTU5PREVTKTsKKworCXJldHVybiBuaWQ7CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2NfZnJlc2hfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpCitzdGF0aWMgaW50IGdldF92YWxpZF9ub2RlX2FsbG93ZWQoaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCkKK3sKKwlpZiAoIW5vZGVfaXNzZXQobmlkLCAqbm9kZXNfYWxsb3dlZCkpCisJCW5pZCA9IG5leHRfbm9kZV9hbGxvd2VkKG5pZCwgbm9kZXNfYWxsb3dlZCk7CisJcmV0dXJuIG5pZDsKK30KKworLyoKKyAqIHJldHVybnMgdGhlIHByZXZpb3VzbHkgc2F2ZWQgbm9kZSBbInRoaXMgbm9kZSJdIGZyb20gd2hpY2ggdG8KKyAqIGFsbG9jYXRlIGEgcGVyc2lzdGVudCBodWdlIHBhZ2UgZm9yIHRoZSBwb29sIGFuZCBhZHZhbmNlIHRoZQorICogbmV4dCBub2RlIGZyb20gd2hpY2ggdG8gYWxsb2NhdGUsIGhhbmRsaW5nIHdyYXAgYXQgZW5kIG9mIG5vZGUKKyAqIG1hc2suCisgKi8KK3N0YXRpYyBpbnQgaHN0YXRlX25leHRfbm9kZV90b19hbGxvYyhzdHJ1Y3QgaHN0YXRlICpoLAorCQkJCQlub2RlbWFza190ICpub2Rlc19hbGxvd2VkKQoreworCWludCBuaWQ7CisKKwlWTV9CVUdfT04oIW5vZGVzX2FsbG93ZWQpOworCisJbmlkID0gZ2V0X3ZhbGlkX25vZGVfYWxsb3dlZChoLT5uZXh0X25pZF90b19hbGxvYywgbm9kZXNfYWxsb3dlZCk7CisJaC0+bmV4dF9uaWRfdG9fYWxsb2MgPSBuZXh0X25vZGVfYWxsb3dlZChuaWQsIG5vZGVzX2FsbG93ZWQpOworCisJcmV0dXJuIG5pZDsKK30KKworc3RhdGljIGludCBhbGxvY19mcmVzaF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCwgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgc3RhcnRfbmlkOwogCWludCBuZXh0X25pZDsKIAlpbnQgcmV0ID0gMDsKIAotCXN0YXJ0X25pZCA9IGgtPm5leHRfbmlkX3RvX2FsbG9jOworCXN0YXJ0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCwgbm9kZXNfYWxsb3dlZCk7CiAJbmV4dF9uaWQgPSBzdGFydF9uaWQ7CiAKIAlkbyB7CiAJCXBhZ2UgPSBhbGxvY19mcmVzaF9odWdlX3BhZ2Vfbm9kZShoLCBuZXh0X25pZCk7Ci0JCWlmIChwYWdlKQorCQlpZiAocGFnZSkgewogCQkJcmV0ID0gMTsKLQkJbmV4dF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2FsbG9jKGgpOwotCX0gd2hpbGUgKCFwYWdlICYmIG5leHRfbmlkICE9IHN0YXJ0X25pZCk7CisJCQlicmVhazsKKwkJfQorCQluZXh0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCwgbm9kZXNfYWxsb3dlZCk7CisJfSB3aGlsZSAobmV4dF9uaWQgIT0gc3RhcnRfbmlkKTsKIAogCWlmIChyZXQpCiAJCWNvdW50X3ZtX2V2ZW50KEhUTEJfQlVERFlfUEdBTExPQyk7CkBAIC02NjgsMTcgKzY5MywyMSBAQAogfQogCiAvKgotICogaGVscGVyIGZvciBmcmVlX3Bvb2xfaHVnZV9wYWdlKCkgLSBmaW5kIG5leHQgbm9kZQotICogZnJvbSB3aGljaCB0byBmcmVlIGEgaHVnZSBwYWdlCisgKiBoZWxwZXIgZm9yIGZyZWVfcG9vbF9odWdlX3BhZ2UoKSAtIHJldHVybiB0aGUgcHJldmlvdXNseSBzYXZlZAorICogbm9kZSBbInRoaXMgbm9kZSJdIGZyb20gd2hpY2ggdG8gZnJlZSBhIGh1Z2UgcGFnZS4gIEFkdmFuY2UgdGhlCisgKiBuZXh0IG5vZGUgaWQgd2hldGhlciBvciBub3Qgd2UgZmluZCBhIGZyZWUgaHVnZSBwYWdlIHRvIGZyZWUgc28KKyAqIHRoYXQgdGhlIG5leHQgYXR0ZW1wdCB0byBmcmVlIGFkZHJlc3NlcyB0aGUgbmV4dCBub2RlLgogICovCi1zdGF0aWMgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShzdHJ1Y3QgaHN0YXRlICpoKQorc3RhdGljIGludCBoc3RhdGVfbmV4dF9ub2RlX3RvX2ZyZWUoc3RydWN0IGhzdGF0ZSAqaCwgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCkKIHsKLQlpbnQgbmV4dF9uaWQ7Ci0JbmV4dF9uaWQgPSBuZXh0X25vZGUoaC0+bmV4dF9uaWRfdG9fZnJlZSwgbm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAobmV4dF9uaWQgPT0gTUFYX05VTU5PREVTKQotCQluZXh0X25pZCA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLQloLT5uZXh0X25pZF90b19mcmVlID0gbmV4dF9uaWQ7Ci0JcmV0dXJuIG5leHRfbmlkOworCWludCBuaWQ7CisKKwlWTV9CVUdfT04oIW5vZGVzX2FsbG93ZWQpOworCisJbmlkID0gZ2V0X3ZhbGlkX25vZGVfYWxsb3dlZChoLT5uZXh0X25pZF90b19mcmVlLCBub2Rlc19hbGxvd2VkKTsKKwloLT5uZXh0X25pZF90b19mcmVlID0gbmV4dF9ub2RlX2FsbG93ZWQobmlkLCBub2Rlc19hbGxvd2VkKTsKKworCXJldHVybiBuaWQ7CiB9CiAKIC8qCkBAIC02ODcsMTMgKzcxNiwxNCBAQAogICogYmFsYW5jZWQgb3ZlciBhbGxvd2VkIG5vZGVzLgogICogQ2FsbGVkIHdpdGggaHVnZXRsYl9sb2NrIGxvY2tlZC4KICAqLwotc3RhdGljIGludCBmcmVlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgsIGJvb2wgYWNjdF9zdXJwbHVzKQorc3RhdGljIGludCBmcmVlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCisJCQkJCQkJIGJvb2wgYWNjdF9zdXJwbHVzKQogewogCWludCBzdGFydF9uaWQ7CiAJaW50IG5leHRfbmlkOwogCWludCByZXQgPSAwOwogCi0Jc3RhcnRfbmlkID0gaC0+bmV4dF9uaWRfdG9fZnJlZTsKKwlzdGFydF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2ZyZWUoaCwgbm9kZXNfYWxsb3dlZCk7CiAJbmV4dF9uaWQgPSBzdGFydF9uaWQ7CiAKIAlkbyB7CkBAIC03MTUsOSArNzQ1LDEwIEBACiAJCQl9CiAJCQl1cGRhdGVfYW5kX2ZyZWVfcGFnZShoLCBwYWdlKTsKIAkJCXJldCA9IDE7CisJCQlicmVhazsKIAkJfQotCQluZXh0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShoKTsKLQl9IHdoaWxlICghcmV0ICYmIG5leHRfbmlkICE9IHN0YXJ0X25pZCk7CisJCW5leHRfbmlkID0gaHN0YXRlX25leHRfbm9kZV90b19mcmVlKGgsIG5vZGVzX2FsbG93ZWQpOworCX0gd2hpbGUgKG5leHRfbmlkICE9IHN0YXJ0X25pZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTExLDE0ICs5NDIsMTQgQEAKIAogCS8qCiAJICogV2Ugd2FudCB0byByZWxlYXNlIGFzIG1hbnkgc3VycGx1cyBwYWdlcyBhcyBwb3NzaWJsZSwgc3ByZWFkCi0JICogZXZlbmx5IGFjcm9zcyBhbGwgbm9kZXMuIEl0ZXJhdGUgYWNyb3NzIGFsbCBub2RlcyB1bnRpbCB3ZQotCSAqIGNhbiBubyBsb25nZXIgZnJlZSB1bnJlc2VydmVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgb2NjdXJzIHdoZW4KLQkgKiB0aGUgbm9kZXMgd2l0aCBzdXJwbHVzIHBhZ2VzIGhhdmUgbm8gZnJlZSBwYWdlcy4KLQkgKiBmcmVlX3Bvb2xfaHVnZV9wYWdlKCkgd2lsbCBiYWxhbmNlIHRoZSB0aGUgZnJlZXMgYWNyb3NzIHRoZQotCSAqIG9uLWxpbmUgbm9kZXMgZm9yIHVzIGFuZCB3aWxsIGhhbmRsZSB0aGUgaHN0YXRlIGFjY291bnRpbmcuCisJICogZXZlbmx5IGFjcm9zcyBhbGwgbm9kZXMgd2l0aCBtZW1vcnkuIEl0ZXJhdGUgYWNyb3NzIHRoZXNlIG5vZGVzCisJICogdW50aWwgd2UgY2FuIG5vIGxvbmdlciBmcmVlIHVucmVzZXJ2ZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBvY2N1cnMKKwkgKiB3aGVuIHRoZSBub2RlcyB3aXRoIHN1cnBsdXMgcGFnZXMgaGF2ZSBubyBmcmVlIHBhZ2VzLgorCSAqIGZyZWVfcG9vbF9odWdlX3BhZ2UoKSB3aWxsIGJhbGFuY2UgdGhlIHRoZSBmcmVlZCBwYWdlcyBhY3Jvc3MgdGhlCisJICogb24tbGluZSBub2RlcyB3aXRoIG1lbW9yeSBhbmQgd2lsbCBoYW5kbGUgdGhlIGhzdGF0ZSBhY2NvdW50aW5nLgogCSAqLwogCXdoaWxlIChucl9wYWdlcy0tKSB7Ci0JCWlmICghZnJlZV9wb29sX2h1Z2VfcGFnZShoLCAxKSkKKwkJaWYgKCFmcmVlX3Bvb2xfaHVnZV9wYWdlKGgsICZub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSwgMSkpCiAJCQlicmVhazsKIAl9CiB9CkBAIC0xMDIyLDE2ICsxMDUzLDE2IEBACiBpbnQgX193ZWFrIGFsbG9jX2Jvb3RtZW1faHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpCiB7CiAJc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptOwotCWludCBucl9ub2RlcyA9IG5vZGVzX3dlaWdodChub2RlX29ubGluZV9tYXApOworCWludCBucl9ub2RlcyA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSk7CiAKIAl3aGlsZSAobnJfbm9kZXMpIHsKIAkJdm9pZCAqYWRkcjsKIAogCQlhZGRyID0gX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYygKLQkJCQlOT0RFX0RBVEEoaC0+bmV4dF9uaWRfdG9fYWxsb2MpLAorCQkJCU5PREVfREFUQShoc3RhdGVfbmV4dF9ub2RlX3RvX2FsbG9jKGgsCisJCQkJCQkmbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pKSwKIAkJCQlodWdlX3BhZ2Vfc2l6ZShoKSwgaHVnZV9wYWdlX3NpemUoaCksIDApOwogCi0JCWhzdGF0ZV9uZXh0X25vZGVfdG9fYWxsb2MoaCk7CiAJCWlmIChhZGRyKSB7CiAJCQkvKgogCQkJICogVXNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGh1Z2UgcGFnZSB0byBzdG9yZSB0aGUKQEAgLTEwODQsNyArMTExNSw4IEBACiAJCWlmIChoLT5vcmRlciA+PSBNQVhfT1JERVIpIHsKIAkJCWlmICghYWxsb2NfYm9vdG1lbV9odWdlX3BhZ2UoaCkpCiAJCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoIWFsbG9jX2ZyZXNoX2h1Z2VfcGFnZShoKSkKKwkJfSBlbHNlIGlmICghYWxsb2NfZnJlc2hfaHVnZV9wYWdlKGgsCisJCQkJCSAmbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pKQogCQkJYnJlYWs7CiAJfQogCWgtPm1heF9odWdlX3BhZ2VzID0gaTsKQEAgLTExMjYsMTQgKzExNTgsMTUgQEAKIH0KIAogI2lmZGVmIENPTkZJR19ISUdITUVNCi1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyB2b2lkIHRyeV90b19mcmVlX2xvdyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LAorCQkJCQkJbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCkKIHsKIAlpbnQgaTsKIAogCWlmIChoLT5vcmRlciA+PSBNQVhfT1JERVIpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7ICsraSkgeworCWZvcl9lYWNoX25vZGVfbWFzayhpLCAqbm9kZXNfYWxsb3dlZCkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5leHQ7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKmZyZWVsID0gJmgtPmh1Z2VwYWdlX2ZyZWVsaXN0c1tpXTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIG5leHQsIGZyZWVsLCBscnUpIHsKQEAgLTExNDksNyArMTE4Miw4IEBACiAJfQogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCwKKwkJCQkJCW5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpCiB7CiB9CiAjZW5kaWYKQEAgLTExNTksNyArMTE5Myw4IEBACiAgKiBiYWxhbmNlZCBieSBvcGVyYXRpbmcgb24gdGhlbSBpbiBhIHJvdW5kLXJvYmluIGZhc2hpb24uCiAgKiBSZXR1cm5zIDEgaWYgYW4gYWRqdXN0bWVudCB3YXMgbWFkZS4KICAqLwotc3RhdGljIGludCBhZGp1c3RfcG9vbF9zdXJwbHVzKHN0cnVjdCBoc3RhdGUgKmgsIGludCBkZWx0YSkKK3N0YXRpYyBpbnQgYWRqdXN0X3Bvb2xfc3VycGx1cyhzdHJ1Y3QgaHN0YXRlICpoLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAorCQkJCWludCBkZWx0YSkKIHsKIAlpbnQgc3RhcnRfbmlkLCBuZXh0X25pZDsKIAlpbnQgcmV0ID0gMDsKQEAgLTExNjcsMjkgKzEyMDIsMzMgQEAKIAlWTV9CVUdfT04oZGVsdGEgIT0gLTEgJiYgZGVsdGEgIT0gMSk7CiAKIAlpZiAoZGVsdGEgPCAwKQotCQlzdGFydF9uaWQgPSBoLT5uZXh0X25pZF90b19hbGxvYzsKKwkJc3RhcnRfbmlkID0gaHN0YXRlX25leHRfbm9kZV90b19hbGxvYyhoLCBub2Rlc19hbGxvd2VkKTsKIAllbHNlCi0JCXN0YXJ0X25pZCA9IGgtPm5leHRfbmlkX3RvX2ZyZWU7CisJCXN0YXJ0X25pZCA9IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShoLCBub2Rlc19hbGxvd2VkKTsKIAluZXh0X25pZCA9IHN0YXJ0X25pZDsKIAogCWRvIHsKIAkJaW50IG5pZCA9IG5leHRfbmlkOwogCQlpZiAoZGVsdGEgPCAwKSAgewotCQkJbmV4dF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2FsbG9jKGgpOwogCQkJLyoKIAkJCSAqIFRvIHNocmluayBvbiB0aGlzIG5vZGUsIHRoZXJlIG11c3QgYmUgYSBzdXJwbHVzIHBhZ2UKIAkJCSAqLwotCQkJaWYgKCFoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKQorCQkJaWYgKCFoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKSB7CisJCQkJbmV4dF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2FsbG9jKGgsCisJCQkJCQkJCW5vZGVzX2FsbG93ZWQpOwogCQkJCWNvbnRpbnVlOworCQkJfQogCQl9CiAJCWlmIChkZWx0YSA+IDApIHsKLQkJCW5leHRfbmlkID0gaHN0YXRlX25leHRfbm9kZV90b19mcmVlKGgpOwogCQkJLyoKIAkJCSAqIFN1cnBsdXMgY2Fubm90IGV4Y2VlZCB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzCiAJCQkgKi8KIAkJCWlmIChoLT5zdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuaWRdID49Ci0JCQkJCQloLT5ucl9odWdlX3BhZ2VzX25vZGVbbmlkXSkKKwkJCQkJCWgtPm5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKSB7CisJCQkJbmV4dF9uaWQgPSBoc3RhdGVfbmV4dF9ub2RlX3RvX2ZyZWUoaCwKKwkJCQkJCQkJbm9kZXNfYWxsb3dlZCk7CiAJCQkJY29udGludWU7CisJCQl9CiAJCX0KIAogCQloLT5zdXJwbHVzX2h1Z2VfcGFnZXMgKz0gZGVsdGE7CkBAIC0xMjAyLDcgKzEyNDEsOCBAQAogfQogCiAjZGVmaW5lIHBlcnNpc3RlbnRfaHVnZV9wYWdlcyhoKSAoaC0+bnJfaHVnZV9wYWdlcyAtIGgtPnN1cnBsdXNfaHVnZV9wYWdlcykKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X21heF9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsCisJCQkJCQlub2RlbWFza190ICpub2Rlc19hbGxvd2VkKQogewogCXVuc2lnbmVkIGxvbmcgbWluX2NvdW50LCByZXQ7CiAKQEAgLTEyMjIsNyArMTI2Miw3IEBACiAJICovCiAJc3Bpbl9sb2NrKCZodWdldGxiX2xvY2spOwogCXdoaWxlIChoLT5zdXJwbHVzX2h1Z2VfcGFnZXMgJiYgY291bnQgPiBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHsKLQkJaWYgKCFhZGp1c3RfcG9vbF9zdXJwbHVzKGgsIC0xKSkKKwkJaWYgKCFhZGp1c3RfcG9vbF9zdXJwbHVzKGgsIG5vZGVzX2FsbG93ZWQsIC0xKSkKIAkJCWJyZWFrOwogCX0KIApAQCAtMTIzMywxMSArMTI3MywxNCBAQAogCQkgKiBhbmQgcmVkdWNpbmcgdGhlIHN1cnBsdXMuCiAJCSAqLwogCQlzcGluX3VubG9jaygmaHVnZXRsYl9sb2NrKTsKLQkJcmV0ID0gYWxsb2NfZnJlc2hfaHVnZV9wYWdlKGgpOworCQlyZXQgPSBhbGxvY19mcmVzaF9odWdlX3BhZ2UoaCwgbm9kZXNfYWxsb3dlZCk7CiAJCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKIAkJaWYgKCFyZXQpCiAJCQlnb3RvIG91dDsKIAorCQkvKiBCYWlsIGZvciBzaWduYWxzLiBQcm9iYWJseSBjdHJsLWMgZnJvbSB1c2VyICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qCkBAIC0xMjU3LDEzICsxMzAwLDEzIEBACiAJICovCiAJbWluX2NvdW50ID0gaC0+cmVzdl9odWdlX3BhZ2VzICsgaC0+bnJfaHVnZV9wYWdlcyAtIGgtPmZyZWVfaHVnZV9wYWdlczsKIAltaW5fY291bnQgPSBtYXgoY291bnQsIG1pbl9jb3VudCk7Ci0JdHJ5X3RvX2ZyZWVfbG93KGgsIG1pbl9jb3VudCk7CisJdHJ5X3RvX2ZyZWVfbG93KGgsIG1pbl9jb3VudCwgbm9kZXNfYWxsb3dlZCk7CiAJd2hpbGUgKG1pbl9jb3VudCA8IHBlcnNpc3RlbnRfaHVnZV9wYWdlcyhoKSkgewotCQlpZiAoIWZyZWVfcG9vbF9odWdlX3BhZ2UoaCwgMCkpCisJCWlmICghZnJlZV9wb29sX2h1Z2VfcGFnZShoLCBub2Rlc19hbGxvd2VkLCAwKSkKIAkJCWJyZWFrOwogCX0KIAl3aGlsZSAoY291bnQgPCBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHsKLQkJaWYgKCFhZGp1c3RfcG9vbF9zdXJwbHVzKGgsIDEpKQorCQlpZiAoIWFkanVzdF9wb29sX3N1cnBsdXMoaCwgbm9kZXNfYWxsb3dlZCwgMSkpCiAJCQlicmVhazsKIAl9CiBvdXQ6CkBAIC0xMjgyLDQzICsxMzI1LDExNyBAQAogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICpodWdlcGFnZXNfa29iajsKIHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqaHN0YXRlX2tvYmpzW0hVR0VfTUFYX0hTVEFURV07CiAKLXN0YXRpYyBzdHJ1Y3QgaHN0YXRlICprb2JqX3RvX2hzdGF0ZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3N0YXRpYyBzdHJ1Y3QgaHN0YXRlICprb2JqX3RvX25vZGVfaHN0YXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBpbnQgKm5pZHApOworCitzdGF0aWMgc3RydWN0IGhzdGF0ZSAqa29ial90b19oc3RhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGludCAqbmlkcCkKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBIVUdFX01BWF9IU1RBVEU7IGkrKykKLQkJaWYgKGhzdGF0ZV9rb2Jqc1tpXSA9PSBrb2JqKQorCQlpZiAoaHN0YXRlX2tvYmpzW2ldID09IGtvYmopIHsKKwkJCWlmIChuaWRwKQorCQkJCSpuaWRwID0gTlVNQV9OT19OT0RFOwogCQkJcmV0dXJuICZoc3RhdGVzW2ldOwotCUJVRygpOwotCXJldHVybiBOVUxMOworCQl9CisKKwlyZXR1cm4ga29ial90b19ub2RlX2hzdGF0ZShrb2JqLCBuaWRwKTsKIH0KIAotc3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCitzdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc2hvd19jb21tb24oc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBoc3RhdGUgKmggPSBrb2JqX3RvX2hzdGF0ZShrb2JqKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGgtPm5yX2h1Z2VfcGFnZXMpOworCXN0cnVjdCBoc3RhdGUgKmg7CisJdW5zaWduZWQgbG9uZyBucl9odWdlX3BhZ2VzOworCWludCBuaWQ7CisKKwloID0ga29ial90b19oc3RhdGUoa29iaiwgJm5pZCk7CisJaWYgKG5pZCA9PSBOVU1BX05PX05PREUpCisJCW5yX2h1Z2VfcGFnZXMgPSBoLT5ucl9odWdlX3BhZ2VzOworCWVsc2UKKwkJbnJfaHVnZV9wYWdlcyA9IGgtPm5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBucl9odWdlX3BhZ2VzKTsKIH0KLXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSwKKwkJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGlucHV0OwotCXN0cnVjdCBoc3RhdGUgKmggPSBrb2JqX3RvX2hzdGF0ZShrb2JqKTsKKwlpbnQgbmlkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJc3RydWN0IGhzdGF0ZSAqaDsKKwlOT0RFTUFTS19BTExPQyhub2RlbWFza190LCBub2Rlc19hbGxvd2VkLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7CiAKLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmaW5wdXQpOworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZjb3VudCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIDA7CiAKLQloLT5tYXhfaHVnZV9wYWdlcyA9IHNldF9tYXhfaHVnZV9wYWdlcyhoLCBpbnB1dCk7CisJaCA9IGtvYmpfdG9faHN0YXRlKGtvYmosICZuaWQpOworCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKSB7CisJCS8qCisJCSAqIGdsb2JhbCBoc3RhdGUgYXR0cmlidXRlCisJCSAqLworCQlpZiAoIShvYmV5X21lbXBvbGljeSAmJgorCQkJCWluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVzX2FsbG93ZWQpKSkgeworCQkJTk9ERU1BU0tfRlJFRShub2Rlc19hbGxvd2VkKTsKKwkJCW5vZGVzX2FsbG93ZWQgPSAmbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV07CisJCX0KKwl9IGVsc2UgaWYgKG5vZGVzX2FsbG93ZWQpIHsKKwkJLyoKKwkJICogcGVyIG5vZGUgaHN0YXRlIGF0dHJpYnV0ZTogYWRqdXN0IGNvdW50IHRvIGdsb2JhbCwKKwkJICogYnV0IHJlc3RyaWN0IGFsbG9jL2ZyZWUgdG8gdGhlIHNwZWNpZmllZCBub2RlLgorCQkgKi8KKwkJY291bnQgKz0gaC0+bnJfaHVnZV9wYWdlcyAtIGgtPm5yX2h1Z2VfcGFnZXNfbm9kZVtuaWRdOworCQlpbml0X25vZGVtYXNrX29mX25vZGUobm9kZXNfYWxsb3dlZCwgbmlkKTsKKwl9IGVsc2UKKwkJbm9kZXNfYWxsb3dlZCA9ICZub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXTsKIAotCXJldHVybiBjb3VudDsKKwloLT5tYXhfaHVnZV9wYWdlcyA9IHNldF9tYXhfaHVnZV9wYWdlcyhoLCBjb3VudCwgbm9kZXNfYWxsb3dlZCk7CisKKwlpZiAobm9kZXNfYWxsb3dlZCAhPSAmbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pCisJCU5PREVNQVNLX0ZSRUUobm9kZXNfYWxsb3dlZCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIG5yX2h1Z2VwYWdlc19zaG93X2NvbW1vbihrb2JqLCBhdHRyLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGZhbHNlLCBrb2JqLCBhdHRyLCBidWYsIGxlbik7CiB9CiBIU1RBVEVfQVRUUihucl9odWdlcGFnZXMpOwogCisjaWZkZWYgQ09ORklHX05VTUEKKworLyoKKyAqIGhzdGF0ZSBhdHRyaWJ1dGUgZm9yIG9wdGlvbmFsbHkgbWVtcG9saWN5LWJhc2VkIGNvbnN0cmFpbnQgb24gcGVyc2lzdGVudAorICogaHVnZSBwYWdlIGFsbG9jL2ZyZWUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19tZW1wb2xpY3lfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIG5yX2h1Z2VwYWdlc19zaG93X2NvbW1vbihrb2JqLCBhdHRyLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfbWVtcG9saWN5X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCSAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbih0cnVlLCBrb2JqLCBhdHRyLCBidWYsIGxlbik7Cit9CitIU1RBVEVfQVRUUihucl9odWdlcGFnZXNfbWVtcG9saWN5KTsKKyNlbmRpZgorCisKIHN0YXRpYyBzc2l6ZV90IG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBoc3RhdGUgKmggPSBrb2JqX3RvX2hzdGF0ZShrb2JqKTsKKwlzdHJ1Y3QgaHN0YXRlICpoID0ga29ial90b19oc3RhdGUoa29iaiwgTlVMTCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBoLT5ucl9vdmVyY29tbWl0X2h1Z2VfcGFnZXMpOwogfQogc3RhdGljIHNzaXplX3QgbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0xMzI2LDcgKzE0NDMsNyBAQAogewogCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyBpbnB1dDsKLQlzdHJ1Y3QgaHN0YXRlICpoID0ga29ial90b19oc3RhdGUoa29iaik7CisJc3RydWN0IGhzdGF0ZSAqaCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIE5VTEwpOwogCiAJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJmlucHV0KTsKIAlpZiAoZXJyKQpAQCAtMTM0MywxNSArMTQ2MCwyNCBAQAogc3RhdGljIHNzaXplX3QgZnJlZV9odWdlcGFnZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGhzdGF0ZSAqaCA9IGtvYmpfdG9faHN0YXRlKGtvYmopOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgaC0+ZnJlZV9odWdlX3BhZ2VzKTsKKwlzdHJ1Y3QgaHN0YXRlICpoOworCXVuc2lnbmVkIGxvbmcgZnJlZV9odWdlX3BhZ2VzOworCWludCBuaWQ7CisKKwloID0ga29ial90b19oc3RhdGUoa29iaiwgJm5pZCk7CisJaWYgKG5pZCA9PSBOVU1BX05PX05PREUpCisJCWZyZWVfaHVnZV9wYWdlcyA9IGgtPmZyZWVfaHVnZV9wYWdlczsKKwllbHNlCisJCWZyZWVfaHVnZV9wYWdlcyA9IGgtPmZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF07CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGZyZWVfaHVnZV9wYWdlcyk7CiB9CiBIU1RBVEVfQVRUUl9STyhmcmVlX2h1Z2VwYWdlcyk7CiAKIHN0YXRpYyBzc2l6ZV90IHJlc3ZfaHVnZXBhZ2VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBoc3RhdGUgKmggPSBrb2JqX3RvX2hzdGF0ZShrb2JqKTsKKwlzdHJ1Y3QgaHN0YXRlICpoID0ga29ial90b19oc3RhdGUoa29iaiwgTlVMTCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBoLT5yZXN2X2h1Z2VfcGFnZXMpOwogfQogSFNUQVRFX0FUVFJfUk8ocmVzdl9odWdlcGFnZXMpOwpAQCAtMTM1OSw4ICsxNDg1LDE3IEBACiBzdGF0aWMgc3NpemVfdCBzdXJwbHVzX2h1Z2VwYWdlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaHN0YXRlICpoID0ga29ial90b19oc3RhdGUoa29iaik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBoLT5zdXJwbHVzX2h1Z2VfcGFnZXMpOworCXN0cnVjdCBoc3RhdGUgKmg7CisJdW5zaWduZWQgbG9uZyBzdXJwbHVzX2h1Z2VfcGFnZXM7CisJaW50IG5pZDsKKworCWggPSBrb2JqX3RvX2hzdGF0ZShrb2JqLCAmbmlkKTsKKwlpZiAobmlkID09IE5VTUFfTk9fTk9ERSkKKwkJc3VycGx1c19odWdlX3BhZ2VzID0gaC0+c3VycGx1c19odWdlX3BhZ2VzOworCWVsc2UKKwkJc3VycGx1c19odWdlX3BhZ2VzID0gaC0+c3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmlkXTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgc3VycGx1c19odWdlX3BhZ2VzKTsKIH0KIEhTVEFURV9BVFRSX1JPKHN1cnBsdXNfaHVnZXBhZ2VzKTsKIApAQCAtMTM3MCw2ICsxNTA1LDkgQEAKIAkmZnJlZV9odWdlcGFnZXNfYXR0ci5hdHRyLAogCSZyZXN2X2h1Z2VwYWdlc19hdHRyLmF0dHIsCiAJJnN1cnBsdXNfaHVnZXBhZ2VzX2F0dHIuYXR0ciwKKyNpZmRlZiBDT05GSUdfTlVNQQorCSZucl9odWdlcGFnZXNfbWVtcG9saWN5X2F0dHIuYXR0ciwKKyNlbmRpZgogCU5VTEwsCiB9OwogCkBAIC0xMzc3LDE5ICsxNTE1LDIxIEBACiAJLmF0dHJzID0gaHN0YXRlX2F0dHJzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaHVnZXRsYl9zeXNmc19hZGRfaHN0YXRlKHN0cnVjdCBoc3RhdGUgKmgpCitzdGF0aWMgaW50IF9faW5pdCBodWdldGxiX3N5c2ZzX2FkZF9oc3RhdGUoc3RydWN0IGhzdGF0ZSAqaCwKKwkJCQlzdHJ1Y3Qga29iamVjdCAqcGFyZW50LAorCQkJCXN0cnVjdCBrb2JqZWN0ICoqaHN0YXRlX2tvYmpzLAorCQkJCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmhzdGF0ZV9hdHRyX2dyb3VwKQogewogCWludCByZXR2YWw7CisJaW50IGhpID0gaCAtIGhzdGF0ZXM7CiAKLQloc3RhdGVfa29ianNbaCAtIGhzdGF0ZXNdID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChoLT5uYW1lLAotCQkJCQkJCWh1Z2VwYWdlc19rb2JqKTsKLQlpZiAoIWhzdGF0ZV9rb2Jqc1toIC0gaHN0YXRlc10pCisJaHN0YXRlX2tvYmpzW2hpXSA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoaC0+bmFtZSwgcGFyZW50KTsKKwlpZiAoIWhzdGF0ZV9rb2Jqc1toaV0pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dmFsID0gc3lzZnNfY3JlYXRlX2dyb3VwKGhzdGF0ZV9rb2Jqc1toIC0gaHN0YXRlc10sCi0JCQkJCQkJJmhzdGF0ZV9hdHRyX2dyb3VwKTsKKwlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoaHN0YXRlX2tvYmpzW2hpXSwgaHN0YXRlX2F0dHJfZ3JvdXApOwogCWlmIChyZXR2YWwpCi0JCWtvYmplY3RfcHV0KGhzdGF0ZV9rb2Jqc1toIC0gaHN0YXRlc10pOworCQlrb2JqZWN0X3B1dChoc3RhdGVfa29ianNbaGldKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNDA0LDE3ICsxNTQ0LDE4NCBAQAogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9oc3RhdGUoaCkgewotCQllcnIgPSBodWdldGxiX3N5c2ZzX2FkZF9oc3RhdGUoaCk7CisJCWVyciA9IGh1Z2V0bGJfc3lzZnNfYWRkX2hzdGF0ZShoLCBodWdlcGFnZXNfa29iaiwKKwkJCQkJIGhzdGF0ZV9rb2JqcywgJmhzdGF0ZV9hdHRyX2dyb3VwKTsKIAkJaWYgKGVycikKIAkJCXByaW50ayhLRVJOX0VSUiAiSHVnZXRsYjogVW5hYmxlIHRvIGFkZCBoc3RhdGUgJXMiLAogCQkJCQkJCQloLT5uYW1lKTsKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorCisvKgorICogbm9kZV9oc3RhdGUvcyAtIGFzc29jaWF0ZSBwZXIgbm9kZSBoc3RhdGUgYXR0cmlidXRlcywgdmlhIHRoZWlyIGtvYmplY3RzLAorICogd2l0aCBub2RlIHN5c2RldnMgaW4gbm9kZV9kZXZpY2VzW10gdXNpbmcgYSBwYXJhbGxlbCBhcnJheS4gIFRoZSBhcnJheQorICogaW5kZXggb2YgYSBub2RlIHN5c2RldiBvciBfaHN0YXRlID09IG5vZGUgaWQuCisgKiBUaGlzIGlzIGhlcmUgdG8gYXZvaWQgYW55IHN0YXRpYyBkZXBlbmRlbmN5IG9mIHRoZSBub2RlIHN5c2RldiBkcml2ZXIsIGluCisgKiB0aGUgYmFzZSBrZXJuZWwsIG9uIHRoZSBodWdldGxiIG1vZHVsZS4KKyAqLworc3RydWN0IG5vZGVfaHN0YXRlIHsKKwlzdHJ1Y3Qga29iamVjdAkJKmh1Z2VwYWdlc19rb2JqOworCXN0cnVjdCBrb2JqZWN0CQkqaHN0YXRlX2tvYmpzW0hVR0VfTUFYX0hTVEFURV07Cit9Oworc3RydWN0IG5vZGVfaHN0YXRlIG5vZGVfaHN0YXRlc1tNQVhfTlVNTk9ERVNdOworCisvKgorICogQSBzdWJzZXQgb2YgZ2xvYmFsIGhzdGF0ZSBhdHRyaWJ1dGVzIGZvciBub2RlIHN5c2RldnMKKyAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBlcl9ub2RlX2hzdGF0ZV9hdHRyc1tdID0geworCSZucl9odWdlcGFnZXNfYXR0ci5hdHRyLAorCSZmcmVlX2h1Z2VwYWdlc19hdHRyLmF0dHIsCisJJnN1cnBsdXNfaHVnZXBhZ2VzX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGVyX25vZGVfaHN0YXRlX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGVyX25vZGVfaHN0YXRlX2F0dHJzLAorfTsKKworLyoKKyAqIGtvYmpfdG9fbm9kZV9oc3RhdGUgLSBsb29rdXAgZ2xvYmFsIGhzdGF0ZSBmb3Igbm9kZSBzeXNkZXYgaHN0YXRlIGF0dHIga29iai4KKyAqIFJldHVybnMgbm9kZSBpZCB2aWEgbm9uLU5VTEwgbmlkcC4KKyAqLworc3RhdGljIHN0cnVjdCBoc3RhdGUgKmtvYmpfdG9fbm9kZV9oc3RhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGludCAqbmlkcCkKK3sKKwlpbnQgbmlkOworCisJZm9yIChuaWQgPSAwOyBuaWQgPCBucl9ub2RlX2lkczsgbmlkKyspIHsKKwkJc3RydWN0IG5vZGVfaHN0YXRlICpuaHMgPSAmbm9kZV9oc3RhdGVzW25pZF07CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgSFVHRV9NQVhfSFNUQVRFOyBpKyspCisJCQlpZiAobmhzLT5oc3RhdGVfa29ianNbaV0gPT0ga29iaikgeworCQkJCWlmIChuaWRwKQorCQkJCQkqbmlkcCA9IG5pZDsKKwkJCQlyZXR1cm4gJmhzdGF0ZXNbaV07CisJCQl9CisJfQorCisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBVbnJlZ2lzdGVyIGhzdGF0ZSBhdHRyaWJ1dGVzIGZyb20gYSBzaW5nbGUgbm9kZSBzeXNkZXYuCisgKiBOby1vcCBpZiBubyBoc3RhdGUgYXR0cmlidXRlcyBhdHRhY2hlZC4KKyAqLwordm9pZCBodWdldGxiX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaHN0YXRlICpoOworCXN0cnVjdCBub2RlX2hzdGF0ZSAqbmhzID0gJm5vZGVfaHN0YXRlc1tub2RlLT5zeXNkZXYuaWRdOworCisJaWYgKCFuaHMtPmh1Z2VwYWdlc19rb2JqKQorCQlyZXR1cm47CQkvKiBubyBoc3RhdGUgYXR0cmlidXRlcyAqLworCisJZm9yX2VhY2hfaHN0YXRlKGgpCisJCWlmIChuaHMtPmhzdGF0ZV9rb2Jqc1toIC0gaHN0YXRlc10pIHsKKwkJCWtvYmplY3RfcHV0KG5ocy0+aHN0YXRlX2tvYmpzW2ggLSBoc3RhdGVzXSk7CisJCQluaHMtPmhzdGF0ZV9rb2Jqc1toIC0gaHN0YXRlc10gPSBOVUxMOworCQl9CisKKwlrb2JqZWN0X3B1dChuaHMtPmh1Z2VwYWdlc19rb2JqKTsKKwluaHMtPmh1Z2VwYWdlc19rb2JqID0gTlVMTDsKK30KKworLyoKKyAqIGh1Z2V0bGIgbW9kdWxlIGV4aXQ6ICB1bnJlZ2lzdGVyIGhzdGF0ZSBhdHRyaWJ1dGVzIGZyb20gbm9kZSBzeXNkZXZzCisgKiB0aGF0IGhhdmUgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX2FsbF9ub2Rlcyh2b2lkKQoreworCWludCBuaWQ7CisKKwkvKgorCSAqIGRpc2FibGUgbm9kZSBzeXNkZXYgcmVnaXN0cmF0aW9ucy4KKwkgKi8KKwlyZWdpc3Rlcl9odWdldGxiZnNfd2l0aF9ub2RlKE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiByZW1vdmUgaHN0YXRlIGF0dHJpYnV0ZXMgZnJvbSBhbnkgbm9kZXMgdGhhdCBoYXZlIHRoZW0uCisJICovCisJZm9yIChuaWQgPSAwOyBuaWQgPCBucl9ub2RlX2lkczsgbmlkKyspCisJCWh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKCZub2RlX2RldmljZXNbbmlkXSk7Cit9CisKKy8qCisgKiBSZWdpc3RlciBoc3RhdGUgYXR0cmlidXRlcyBmb3IgYSBzaW5nbGUgbm9kZSBzeXNkZXYuCisgKiBOby1vcCBpZiBhdHRyaWJ1dGVzIGFscmVhZHkgcmVnaXN0ZXJlZC4KKyAqLwordm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCit7CisJc3RydWN0IGhzdGF0ZSAqaDsKKwlzdHJ1Y3Qgbm9kZV9oc3RhdGUgKm5ocyA9ICZub2RlX2hzdGF0ZXNbbm9kZS0+c3lzZGV2LmlkXTsKKwlpbnQgZXJyOworCisJaWYgKG5ocy0+aHVnZXBhZ2VzX2tvYmopCisJCXJldHVybjsJCS8qIGFscmVhZHkgYWxsb2NhdGVkICovCisKKwluaHMtPmh1Z2VwYWdlc19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiaHVnZXBhZ2VzIiwKKwkJCQkJCQkmbm9kZS0+c3lzZGV2LmtvYmopOworCWlmICghbmhzLT5odWdlcGFnZXNfa29iaikKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfaHN0YXRlKGgpIHsKKwkJZXJyID0gaHVnZXRsYl9zeXNmc19hZGRfaHN0YXRlKGgsIG5ocy0+aHVnZXBhZ2VzX2tvYmosCisJCQkJCQluaHMtPmhzdGF0ZV9rb2JqcywKKwkJCQkJCSZwZXJfbm9kZV9oc3RhdGVfYXR0cl9ncm91cCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiSHVnZXRsYjogVW5hYmxlIHRvIGFkZCBoc3RhdGUgJXMiCisJCQkJCSIgZm9yIG5vZGUgJWRcbiIsCisJCQkJCQloLT5uYW1lLCBub2RlLT5zeXNkZXYuaWQpOworCQkJaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUobm9kZSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIGh1Z2V0bGIgaW5pdCB0aW1lOiAgcmVnaXN0ZXIgaHN0YXRlIGF0dHJpYnV0ZXMgZm9yIGFsbCByZWdpc3RlcmVkIG5vZGUKKyAqIHN5c2RldnMgb2Ygbm9kZXMgdGhhdCBoYXZlIG1lbW9yeS4gIEFsbCBvbi1saW5lIG5vZGVzIHNob3VsZCBoYXZlCisgKiByZWdpc3RlcmVkIHRoZWlyIGFzc29jaWF0ZWQgc3lzZGV2IGJ5IHRoaXMgdGltZS4KKyAqLworc3RhdGljIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9hbGxfbm9kZXModm9pZCkKK3sKKwlpbnQgbmlkOworCisJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fSElHSF9NRU1PUlkpIHsKKwkJc3RydWN0IG5vZGUgKm5vZGUgPSAmbm9kZV9kZXZpY2VzW25pZF07CisJCWlmIChub2RlLT5zeXNkZXYuaWQgPT0gbmlkKQorCQkJaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKG5vZGUpOworCX0KKworCS8qCisJICogTGV0IHRoZSBub2RlIHN5c2RldiBkcml2ZXIga25vdyB3ZSdyZSBoZXJlIHNvIGl0IGNhbgorCSAqIFt1bl1yZWdpc3RlciBoc3RhdGUgYXR0cmlidXRlcyBvbiBub2RlIGhvdHBsdWcuCisJICovCisJcmVnaXN0ZXJfaHVnZXRsYmZzX3dpdGhfbm9kZShodWdldGxiX3JlZ2lzdGVyX25vZGUsCisJCQkJICAgICBodWdldGxiX3VucmVnaXN0ZXJfbm9kZSk7Cit9CisjZWxzZQkvKiAhQ09ORklHX05VTUEgKi8KKworc3RhdGljIHN0cnVjdCBoc3RhdGUgKmtvYmpfdG9fbm9kZV9oc3RhdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGludCAqbmlkcCkKK3sKKwlCVUcoKTsKKwlpZiAobmlkcCkKKwkJKm5pZHAgPSAtMTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX2FsbF9ub2Rlcyh2b2lkKSB7IH0KKworc3RhdGljIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9hbGxfbm9kZXModm9pZCkgeyB9CisKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2V4aXQgaHVnZXRsYl9leGl0KHZvaWQpCiB7CiAJc3RydWN0IGhzdGF0ZSAqaDsKIAorCWh1Z2V0bGJfdW5yZWdpc3Rlcl9hbGxfbm9kZXMoKTsKKwogCWZvcl9lYWNoX2hzdGF0ZShoKSB7CiAJCWtvYmplY3RfcHV0KGhzdGF0ZV9rb2Jqc1toIC0gaHN0YXRlc10pOwogCX0KQEAgLTE0NDksNiArMTc1Niw4IEBACiAKIAlodWdldGxiX3N5c2ZzX2luaXQoKTsKIAorCWh1Z2V0bGJfcmVnaXN0ZXJfYWxsX25vZGVzKCk7CisKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KGh1Z2V0bGJfaW5pdCk7CkBAIC0xNDcyLDggKzE3ODEsOCBAQAogCWgtPmZyZWVfaHVnZV9wYWdlcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgKytpKQogCQlJTklUX0xJU1RfSEVBRCgmaC0+aHVnZXBhZ2VfZnJlZWxpc3RzW2ldKTsKLQloLT5uZXh0X25pZF90b19hbGxvYyA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLQloLT5uZXh0X25pZF90b19mcmVlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOworCWgtPm5leHRfbmlkX3RvX2FsbG9jID0gZmlyc3Rfbm9kZShub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSk7CisJaC0+bmV4dF9uaWRfdG9fZnJlZSA9IGZpcnN0X25vZGUobm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0pOwogCXNucHJpbnRmKGgtPm5hbWUsIEhTVEFURV9OQU1FX0xFTiwgImh1Z2VwYWdlcy0lbHVrQiIsCiAJCQkJCWh1Z2VfcGFnZV9zaXplKGgpLzEwMjQpOwogCkBAIC0xNTM2LDkgKzE4NDUsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotaW50IGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKLQkJCSAgIHZvaWQgX191c2VyICpidWZmZXIsCi0JCQkgICBzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQorc3RhdGljIGludCBodWdldGxiX3N5c2N0bF9oYW5kbGVyX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LAorCQkJIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gJmRlZmF1bHRfaHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMTU1MCwxMiArMTg1OSw0MCBAQAogCXRhYmxlLT5tYXhsZW4gPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAJcHJvY19kb3Vsb25ndmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKIAotCWlmICh3cml0ZSkKLQkJaC0+bWF4X2h1Z2VfcGFnZXMgPSBzZXRfbWF4X2h1Z2VfcGFnZXMoaCwgdG1wKTsKKwlpZiAod3JpdGUpIHsKKwkJTk9ERU1BU0tfQUxMT0Mobm9kZW1hc2tfdCwgbm9kZXNfYWxsb3dlZCwKKwkJCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9OT1JFVFJZKTsKKwkJaWYgKCEob2JleV9tZW1wb2xpY3kgJiYKKwkJCSAgICAgICBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2Rlc19hbGxvd2VkKSkpIHsKKwkJCU5PREVNQVNLX0ZSRUUobm9kZXNfYWxsb3dlZCk7CisJCQlub2Rlc19hbGxvd2VkID0gJm5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldOworCQl9CisJCWgtPm1heF9odWdlX3BhZ2VzID0gc2V0X21heF9odWdlX3BhZ2VzKGgsIHRtcCwgbm9kZXNfYWxsb3dlZCk7CisKKwkJaWYgKG5vZGVzX2FsbG93ZWQgIT0gJm5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldKQorCQkJTk9ERU1BU0tfRlJFRShub2Rlc19hbGxvd2VkKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKworCXJldHVybiBodWdldGxiX3N5c2N0bF9oYW5kbGVyX2NvbW1vbihmYWxzZSwgdGFibGUsIHdyaXRlLAorCQkJCQkJCWJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKK30KKworI2lmZGVmIENPTkZJR19OVU1BCitpbnQgaHVnZXRsYl9tZW1wb2xpY3lfc3lzY3RsX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gaHVnZXRsYl9zeXNjdGxfaGFuZGxlcl9jb21tb24odHJ1ZSwgdGFibGUsIHdyaXRlLAorCQkJCQkJCWJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCiBpbnQgaHVnZXRsYl90cmVhdF9tb3ZhYmxlX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJCXZvaWQgX191c2VyICpidWZmZXIsCiAJCQlzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQpAQCAtMTkwMyw2ICsyMjQwLDEyIEBACiAJCSsgKHZtYS0+dm1fcGdvZmYgPj4gUEFHRV9TSElGVCk7CiAJbWFwcGluZyA9IChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKXBhZ2VfcHJpdmF0ZShwYWdlKTsKIAorCS8qCisJICogVGFrZSB0aGUgbWFwcGluZyBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRhYmxlIHdhbGsuIEFzCisJICogdGhpcyBtYXBwaW5nIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlIFZNQXMsCisJICogX191bm1hcF9odWdlcGFnZV9yYW5nZSgpIGlzIGNhbGxlZCBhcyB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQKKwkgKi8KKwlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl2bWFfcHJpb190cmVlX2ZvcmVhY2goaXRlcl92bWEsICZpdGVyLCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKIAkJLyogRG8gbm90IHVubWFwIHRoZSBjdXJyZW50IFZNQSAqLwogCQlpZiAoaXRlcl92bWEgPT0gdm1hKQpAQCAtMTkxNiwxMCArMjI1OSwxMSBAQAogCQkgKiBmcm9tIHRoZSB0aW1lIG9mIGZvcmsuIFRoaXMgd291bGQgbG9vayBsaWtlIGRhdGEgY29ycnVwdGlvbgogCQkgKi8KIAkJaWYgKCFpc192bWFfcmVzdl9zZXQoaXRlcl92bWEsIEhQQUdFX1JFU1ZfT1dORVIpKQotCQkJdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoaXRlcl92bWEsCisJCQlfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKGl0ZXJfdm1hLAogCQkJCWFkZHJlc3MsIGFkZHJlc3MgKyBodWdlX3BhZ2Vfc2l6ZShoKSwKIAkJCQlwYWdlKTsKIAl9CisJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTk1OSw2ICsyMzAzLDkgQEAKIAkJb3V0c2lkZV9yZXNlcnZlID0gMTsKIAogCXBhZ2VfY2FjaGVfZ2V0KG9sZF9wYWdlKTsKKworCS8qIERyb3AgcGFnZV90YWJsZV9sb2NrIGFzIGJ1ZGR5IGFsbG9jYXRvciBtYXkgYmUgY2FsbGVkICovCisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCW5ld19wYWdlID0gYWxsb2NfaHVnZV9wYWdlKHZtYSwgYWRkcmVzcywgb3V0c2lkZV9yZXNlcnZlKTsKIAogCWlmIChJU19FUlIobmV3X3BhZ2UpKSB7CkBAIC0xOTc2LDE5ICsyMzIzLDI1IEBACiAJCQlpZiAodW5tYXBfcmVmX3ByaXZhdGUobW0sIHZtYSwgb2xkX3BhZ2UsIGFkZHJlc3MpKSB7CiAJCQkJQlVHX09OKHBhZ2VfY291bnQob2xkX3BhZ2UpICE9IDEpOwogCQkJCUJVR19PTihodWdlX3B0ZV9ub25lKHB0ZSkpOworCQkJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJCQkJZ290byByZXRyeV9hdm9pZGNvcHk7CiAJCQl9CiAJCQlXQVJOX09OX09OQ0UoMSk7CiAJCX0KIAorCQkvKiBDYWxsZXIgZXhwZWN0cyBsb2NrIHRvIGJlIGhlbGQgKi8KKwkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkJcmV0dXJuIC1QVFJfRVJSKG5ld19wYWdlKTsKIAl9CiAKLQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJY29weV9odWdlX3BhZ2UobmV3X3BhZ2UsIG9sZF9wYWdlLCBhZGRyZXNzLCB2bWEpOwogCV9fU2V0UGFnZVVwdG9kYXRlKG5ld19wYWdlKTsKLQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCisJLyoKKwkgKiBSZXRha2UgdGhlIHBhZ2VfdGFibGVfbG9jayB0byBjaGVjayBmb3IgcmFjaW5nIHVwZGF0ZXMKKwkgKiBiZWZvcmUgdGhlIHBhZ2UgdGFibGVzIGFyZSBhbHRlcmVkCisJICovCisJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAlwdGVwID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCBhZGRyZXNzICYgaHVnZV9wYWdlX21hc2soaCkpOwogCWlmIChsaWtlbHkocHRlX3NhbWUoaHVnZV9wdGVwX2dldChwdGVwKSwgcHRlKSkpIHsKIAkJLyogQnJlYWsgQ09XICovCmRpZmYgLS1naXQgYS9tbS9od3BvaXNvbi1pbmplY3QuYyBiL21tL2h3cG9pc29uLWluamVjdC5jCmluZGV4IGUxZDg1MTMuLjEwZWE3MTkgMTAwNjQ0Ci0tLSBhL21tL2h3cG9pc29uLWluamVjdC5jCisrKyBiL21tL2h3cG9pc29uLWluamVjdC5jCkBAIC0zLDE4ICszLDY4IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqaHdwb2lzb25fZGlyLCAqY29ycnVwdF9wZm47CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHdwb2lzb25fZGlyOwogCiBzdGF0aWMgaW50IGh3cG9pc29uX2luamVjdCh2b2lkICpkYXRhLCB1NjQgdmFsKQogeworCXVuc2lnbmVkIGxvbmcgcGZuID0gdmFsOworCXN0cnVjdCBwYWdlICpwOworCWludCBlcnI7CisKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGF0IHBmbiAlTHhcbiIsIHZhbCk7Ci0JcmV0dXJuIF9fbWVtb3J5X2ZhaWx1cmUodmFsLCAxOCwgMCk7CisKKwlpZiAoIWh3cG9pc29uX2ZpbHRlcl9lbmFibGUpCisJCWdvdG8gaW5qZWN0OworCWlmICghcGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiAtRU5YSU87CisKKwlwID0gcGZuX3RvX3BhZ2UocGZuKTsKKwkvKgorCSAqIFRoaXMgaW1wbGllcyB1bmFibGUgdG8gc3VwcG9ydCBmcmVlIGJ1ZGR5IHBhZ2VzLgorCSAqLworCWlmICghZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocCkpCisJCXJldHVybiAwOworCisJaWYgKCFQYWdlTFJVKHApKQorCQlzaGFrZV9wYWdlKHAsIDApOworCS8qCisJICogVGhpcyBpbXBsaWVzIHVuYWJsZSB0byBzdXBwb3J0IG5vbi1MUlUgcGFnZXMuCisJICovCisJaWYgKCFQYWdlTFJVKHApKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogZG8gYSByYWN5IGNoZWNrIHdpdGggZWxldmF0ZWQgcGFnZSBjb3VudCwgdG8gbWFrZSBzdXJlIFBHX2h3cG9pc29uCisJICogd2lsbCBvbmx5IGJlIHNldCBmb3IgdGhlIHRhcmdldGVkIG93bmVyIChvciBvbiBhIGZyZWUgcGFnZSkuCisJICogV2UgdGVtcG9yYXJpbHkgdGFrZSBwYWdlIGxvY2sgZm9yIHRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3BhZ2UoKS4KKwkgKiBfX21lbW9yeV9mYWlsdXJlKCkgd2lsbCByZWRvIHRoZSBjaGVjayByZWxpYWJseSBpbnNpZGUgcGFnZSBsb2NrLgorCSAqLworCWxvY2tfcGFnZShwKTsKKwllcnIgPSBod3BvaXNvbl9maWx0ZXIocCk7CisJdW5sb2NrX3BhZ2UocCk7CisJaWYgKGVycikKKwkJcmV0dXJuIDA7CisKK2luamVjdDoKKwlwcmludGsoS0VSTl9JTkZPICJJbmplY3RpbmcgbWVtb3J5IGZhaWx1cmUgYXQgcGZuICVseFxuIiwgcGZuKTsKKwlyZXR1cm4gX19tZW1vcnlfZmFpbHVyZShwZm4sIDE4LCBNRl9DT1VOVF9JTkNSRUFTRUQpOworfQorCitzdGF0aWMgaW50IGh3cG9pc29uX3VucG9pc29uKHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0dXJuIHVucG9pc29uX21lbW9yeSh2YWwpOwogfQogCiBERUZJTkVfU0lNUExFX0FUVFJJQlVURShod3BvaXNvbl9mb3BzLCBOVUxMLCBod3BvaXNvbl9pbmplY3QsICIlbGxpXG4iKTsKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHVucG9pc29uX2ZvcHMsIE5VTEwsIGh3cG9pc29uX3VucG9pc29uLCAiJWxsaVxuIik7CiAKIHN0YXRpYyB2b2lkIHBmbl9pbmplY3RfZXhpdCh2b2lkKQogewpAQCAtMjQsMTYgKzc0LDYzIEBACiAKIHN0YXRpYyBpbnQgcGZuX2luamVjdF9pbml0KHZvaWQpCiB7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCiAJaHdwb2lzb25fZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJod3BvaXNvbiIsIE5VTEwpOwogCWlmIChod3BvaXNvbl9kaXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29ycnVwdF9wZm4gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb3JydXB0LXBmbiIsIDA2MDAsIGh3cG9pc29uX2RpciwKKworCS8qCisJICogTm90ZSB0aGF0IHRoZSBiZWxvdyBwb2lzb24vdW5wb2lzb24gaW50ZXJmYWNlcyBkbyBub3QgaW52b2x2ZQorCSAqIGhhcmR3YXJlIHN0YXR1cyBjaGFuZ2UsIGhlbmNlIGRvIG5vdCByZXF1aXJlIGhhcmR3YXJlIHN1cHBvcnQuCisJICogVGhleSBhcmUgbWFpbmx5IGZvciB0ZXN0aW5nIGh3cG9pc29uIGluIHNvZnR3YXJlIGxldmVsLgorCSAqLworCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvcnJ1cHQtcGZuIiwgMDYwMCwgaHdwb2lzb25fZGlyLAogCQkJCQkgIE5VTEwsICZod3BvaXNvbl9mb3BzKTsKLQlpZiAoY29ycnVwdF9wZm4gPT0gTlVMTCkgewotCQlwZm5faW5qZWN0X2V4aXQoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghZGVudHJ5KQorCQlnb3RvIGZhaWw7CisKKwlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ1bnBvaXNvbi1wZm4iLCAwNjAwLCBod3BvaXNvbl9kaXIsCisJCQkJICAgICBOVUxMLCAmdW5wb2lzb25fZm9wcyk7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gZmFpbDsKKworCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiY29ycnVwdC1maWx0ZXItZW5hYmxlIiwgMDYwMCwKKwkJCQkgICAgaHdwb2lzb25fZGlyLCAmaHdwb2lzb25fZmlsdGVyX2VuYWJsZSk7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gZmFpbDsKKworCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiY29ycnVwdC1maWx0ZXItZGV2LW1ham9yIiwgMDYwMCwKKwkJCQkgICAgaHdwb2lzb25fZGlyLCAmaHdwb2lzb25fZmlsdGVyX2Rldl9tYWpvcik7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gZmFpbDsKKworCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiY29ycnVwdC1maWx0ZXItZGV2LW1pbm9yIiwgMDYwMCwKKwkJCQkgICAgaHdwb2lzb25fZGlyLCAmaHdwb2lzb25fZmlsdGVyX2Rldl9taW5vcik7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gZmFpbDsKKworCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX3U2NCgiY29ycnVwdC1maWx0ZXItZmxhZ3MtbWFzayIsIDA2MDAsCisJCQkJICAgIGh3cG9pc29uX2RpciwgJmh3cG9pc29uX2ZpbHRlcl9mbGFnc19tYXNrKTsKKwlpZiAoIWRlbnRyeSkKKwkJZ290byBmYWlsOworCisJZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfdTY0KCJjb3JydXB0LWZpbHRlci1mbGFncy12YWx1ZSIsIDA2MDAsCisJCQkJICAgIGh3cG9pc29uX2RpciwgJmh3cG9pc29uX2ZpbHRlcl9mbGFnc192YWx1ZSk7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gZmFpbDsKKworI2lmZGVmCUNPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKKwlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV91NjQoImNvcnJ1cHQtZmlsdGVyLW1lbWNnIiwgMDYwMCwKKwkJCQkgICAgaHdwb2lzb25fZGlyLCAmaHdwb2lzb25fZmlsdGVyX21lbWNnKTsKKwlpZiAoIWRlbnRyeSkKKwkJZ290byBmYWlsOworI2VuZGlmCisKIAlyZXR1cm4gMDsKK2ZhaWw6CisJcGZuX2luamVjdF9leGl0KCk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIG1vZHVsZV9pbml0KHBmbl9pbmplY3RfaW5pdCk7CmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAyMmVjOGQyLi42YTY5N2JiIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCisrKyBiL21tL2ludGVybmFsLmgKQEAgLTUwLDYgKzUwLDkgQEAKICAqLwogZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzX2Jvb3RtZW0oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBwcmVwX2NvbXBvdW5kX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkZXIpOworI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQorZXh0ZXJuIGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNlbmRpZgogCiAKIC8qCkBAIC02Myw3ICs2Niw3IEBACiAJcmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTsKIH0KIAotI2lmZGVmIENPTkZJR19IQVZFX01MT0NLCisjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIGxvbmcgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogZXh0ZXJuIHZvaWQgbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC03MiwyMiArNzUsOCBAQAogewogCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOwogfQotI2VuZGlmCiAKIC8qCi0gKiB1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2UoKSBjYWxsZWQgb25seSBmcm9tIG1pZ3JhdGVfcGFnZV9jb3B5KCkgdG8KLSAqIG1pZ3JhdGUgdW5ldmljdGFibGUgZmxhZyB0byBuZXcgcGFnZS4KLSAqIE5vdGUgdGhhdCB0aGUgb2xkIHBhZ2UgaGFzIGJlZW4gaXNvbGF0ZWQgZnJvbSB0aGUgTFJVIGxpc3RzIGF0IHRoaXMKLSAqIHBvaW50IHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgTFJVIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ldywgc3RydWN0IHBhZ2UgKm9sZCkKLXsKLQlpZiAoVGVzdENsZWFyUGFnZVVuZXZpY3RhYmxlKG9sZCkpCi0JCVNldFBhZ2VVbmV2aWN0YWJsZShuZXcpOwotfQotCi0jaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAotLyoKICAqIENhbGxlZCBvbmx5IGluIGZhdWx0IHBhdGggdmlhIHBhZ2VfZXZpY3RhYmxlKCkgZm9yIGEgbmV3IHBhZ2UKICAqIHRvIGRldGVybWluZSBpZiBpdCdzIGJlaW5nIG1hcHBlZCBpbnRvIGEgTE9DS0VEIHZtYS4KICAqIElmIHNvLCBtYXJrIHBhZ2UgYXMgbWxvY2tlZC4KQEAgLTEwNyw5ICs5NiwxMCBAQAogfQogCiAvKgotICogbXVzdCBiZSBjYWxsZWQgd2l0aCB2bWEncyBtbWFwX3NlbSBoZWxkIGZvciByZWFkLCBhbmQgcGFnZSBsb2NrZWQuCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZtYSdzIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWQgb3Igd3JpdGUsIGFuZCBwYWdlIGxvY2tlZC4KICAqLwogZXh0ZXJuIHZvaWQgbWxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgbXVubG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIC8qCiAgKiBDbGVhciB0aGUgcGFnZSdzIFBhZ2VNbG9ja2VkKCkuICBUaGlzIGNhbiBiZSB1c2VmdWwgaW4gYSBzaXR1YXRpb24gd2hlcmUKQEAgLTE0NCw3ICsxMzQsNyBAQAogCX0KIH0KIAotI2Vsc2UgLyogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVCAqLworI2Vsc2UgLyogIUNPTkZJR19NTVUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGlzX21sb2NrZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdiwgc3RydWN0IHBhZ2UgKnApCiB7CiAJcmV0dXJuIDA7CkBAIC0xNTMsNyArMTQzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXcsIHN0cnVjdCBwYWdlICpvbGQpIHsgfQogCi0jZW5kaWYgLyogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVCAqLworI2VuZGlmIC8qICFDT05GSUdfTU1VICovCiAKIC8qCiAgKiBSZXR1cm4gdGhlIG1lbV9tYXAgZW50cnkgcmVwcmVzZW50aW5nIHRoZSAnb2Zmc2V0JyBzdWJwYWdlIHdpdGhpbgpAQCAtMjYwLDMgKzI1MCwxMiBAQAogI2RlZmluZSBaT05FX1JFQ0xBSU1fU09NRQkwCiAjZGVmaW5lIFpPTkVfUkVDTEFJTV9TVUNDRVNTCTEKICNlbmRpZgorCitleHRlcm4gaW50IGh3cG9pc29uX2ZpbHRlcihzdHJ1Y3QgcGFnZSAqcCk7CisKK2V4dGVybiB1MzIgaHdwb2lzb25fZmlsdGVyX2Rldl9tYWpvcjsKK2V4dGVybiB1MzIgaHdwb2lzb25fZmlsdGVyX2Rldl9taW5vcjsKK2V4dGVybiB1NjQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzX21hc2s7CitleHRlcm4gdTY0IGh3cG9pc29uX2ZpbHRlcl9mbGFnc192YWx1ZTsKK2V4dGVybiB1NjQgaHdwb2lzb25fZmlsdGVyX21lbWNnOworZXh0ZXJuIHUzMiBod3BvaXNvbl9maWx0ZXJfZW5hYmxlOwpkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggMTNmMzNiMy4uNWIwNjllNCAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysgYi9tbS9rbWVtbGVhay5jCkBAIC05Myw2ICs5Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xMDgsNyArMTA5LDYgQEAKICNkZWZpbmUgTVNFQ1NfTUlOX0FHRQkJNTAwMAkvKiBtaW5pbXVtIG9iamVjdCBhZ2UgZm9yIHJlcG9ydGluZyAqLwogI2RlZmluZSBTRUNTX0ZJUlNUX1NDQU4JCTYwCS8qIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3Qgc2NhbiAqLwogI2RlZmluZSBTRUNTX1NDQU5fV0FJVAkJNjAwCS8qIHN1YnNlcXVlbnQgYXV0byBzY2FubmluZyBkZWxheSAqLwotI2RlZmluZSBHUkFZX0xJU1RfUEFTU0VTCTI1CS8qIG1heGltdW0gbnVtYmVyIG9mIGdyYXkgbGlzdCBzY2FucyAqLwogI2RlZmluZSBNQVhfU0NBTl9TSVpFCQk0MDk2CS8qIG1heGltdW0gc2l6ZSBvZiBhIHNjYW5uZWQgYmxvY2sgKi8KIAogI2RlZmluZSBCWVRFU19QRVJfUE9JTlRFUglzaXplb2Yodm9pZCAqKQpAQCAtMTE5LDggKzExOSw4IEBACiAvKiBzY2FubmluZyBhcmVhIGluc2lkZSBhIG1lbW9yeSBibG9jayAqLwogc3RydWN0IGttZW1sZWFrX3NjYW5fYXJlYSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlzaXplX3QgbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJc2l6ZV90IHNpemU7CiB9OwogCiAjZGVmaW5lIEtNRU1MRUFLX0dSRVkJMApAQCAtMTQ5LDYgKzE0OSw4IEBACiAJaW50IG1pbl9jb3VudDsKIAkvKiB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50ZXJzIGZvdW5kIHBvaW50aW5nIHRvIHRoaXMgb2JqZWN0ICovCiAJaW50IGNvdW50OworCS8qIGNoZWNrc3VtIGZvciBkZXRlY3RpbmcgbW9kaWZpZWQgb2JqZWN0cyAqLworCXUzMiBjaGVja3N1bTsKIAkvKiBtZW1vcnkgcmFuZ2VzIHRvIGJlIHNjYW5uZWQgaW5zaWRlIGFuIG9iamVjdCAoZW1wdHkgZm9yIGFsbCkgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZCBhcmVhX2xpc3Q7CiAJdW5zaWduZWQgbG9uZyB0cmFjZVtNQVhfVFJBQ0VdOwpAQCAtMTY0LDggKzE2Niw2IEBACiAjZGVmaW5lIE9CSkVDVF9SRVBPUlRFRAkJKDEgPDwgMSkKIC8qIGZsYWcgc2V0IHRvIG5vdCBzY2FuIHRoZSBvYmplY3QgKi8KICNkZWZpbmUgT0JKRUNUX05PX1NDQU4JCSgxIDw8IDIpCi0vKiBmbGFnIHNldCBvbiBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cyAqLwotI2RlZmluZSBPQkpFQ1RfTkVXCQkoMSA8PCAzKQogCiAvKiBudW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQgcGVyIGxpbmU7IG11c3QgYmUgMTYgb3IgMzIgKi8KICNkZWZpbmUgSEVYX1JPV19TSVpFCQkxNgpAQCAtMjQxLDggKzI0MSw2IEBACiAJY29uc3Qgdm9pZCAqcHRyOwkJLyogYWxsb2NhdGVkL2ZyZWVkIG1lbW9yeSBibG9jayAqLwogCXNpemVfdCBzaXplOwkJCS8qIG1lbW9yeSBibG9jayBzaXplICovCiAJaW50IG1pbl9jb3VudDsJCQkvKiBtaW5pbXVtIHJlZmVyZW5jZSBjb3VudCAqLwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwkJLyogc2NhbiBhcmVhIG9mZnNldCAqLwotCXNpemVfdCBsZW5ndGg7CQkJLyogc2NhbiBhcmVhIGxlbmd0aCAqLwogCXVuc2lnbmVkIGxvbmcgdHJhY2VbTUFYX1RSQUNFXTsJLyogc3RhY2sgdHJhY2UgKi8KIAl1bnNpZ25lZCBpbnQgdHJhY2VfbGVuOwkJLyogc3RhY2sgdHJhY2UgbGVuZ3RoICovCiB9OwpAQCAtMzIzLDExICszMjEsNiBAQAogCQlvYmplY3QtPmNvdW50ID49IG9iamVjdC0+bWluX2NvdW50OwogfQogCi1zdGF0aWMgYm9vbCBjb2xvcl9ibGFjayhjb25zdCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCi17Ci0JcmV0dXJuIG9iamVjdC0+bWluX2NvdW50ID09IEtNRU1MRUFLX0JMQUNLOwotfQotCiAvKgogICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCB1bnJlZmVyZW5jZWQgb25seSBpZiB0aGVpciBjb2xvciBpcyB3aGl0ZSwgdGhleSBoYXZlCiAgKiBub3QgYmUgZGVsZXRlZCBhbmQgaGF2ZSBhIG1pbmltdW0gYWdlIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBjYXVzZWQgYnkKQEAgLTMzNSw3ICszMjgsNyBAQAogICovCiBzdGF0aWMgYm9vbCB1bnJlZmVyZW5jZWRfb2JqZWN0KHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKIHsKLQlyZXR1cm4gKG9iamVjdC0+ZmxhZ3MgJiBPQkpFQ1RfQUxMT0NBVEVEKSAmJiBjb2xvcl93aGl0ZShvYmplY3QpICYmCisJcmV0dXJuIChjb2xvcl93aGl0ZShvYmplY3QpICYmIG9iamVjdC0+ZmxhZ3MgJiBPQkpFQ1RfQUxMT0NBVEVEKSAmJgogCQl0aW1lX2JlZm9yZV9lcShvYmplY3QtPmppZmZpZXMgKyBqaWZmaWVzX21pbl9hZ2UsCiAJCQkgICAgICAgamlmZmllc19sYXN0X3NjYW4pOwogfQpAQCAtMzQ4LDExICszNDEsMTMgQEAKIAkJCSAgICAgICBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgaW50IG1zZWNzX2FnZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIG9iamVjdC0+amlmZmllcyk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgInVucmVmZXJlbmNlZCBvYmplY3QgMHglMDhseCAoc2l6ZSAlenUpOlxuIiwKIAkJICAgb2JqZWN0LT5wb2ludGVyLCBvYmplY3QtPnNpemUpOwotCXNlcV9wcmludGYoc2VxLCAiICBjb21tIFwiJXNcIiwgcGlkICVkLCBqaWZmaWVzICVsdVxuIiwKLQkJICAgb2JqZWN0LT5jb21tLCBvYmplY3QtPnBpZCwgb2JqZWN0LT5qaWZmaWVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgY29tbSBcIiVzXCIsIHBpZCAlZCwgamlmZmllcyAlbHUgKGFnZSAlZC4lMDNkcylcbiIsCisJCSAgIG9iamVjdC0+Y29tbSwgb2JqZWN0LT5waWQsIG9iamVjdC0+amlmZmllcywKKwkJICAgbXNlY3NfYWdlIC8gMTAwMCwgbXNlY3NfYWdlICUgMTAwMCk7CiAJaGV4X2R1bXBfb2JqZWN0KHNlcSwgb2JqZWN0KTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgYmFja3RyYWNlOlxuIik7CiAKQEAgLTM4MSw2ICszNzYsNyBAQAogCXByX25vdGljZSgiICBtaW5fY291bnQgPSAlZFxuIiwgb2JqZWN0LT5taW5fY291bnQpOwogCXByX25vdGljZSgiICBjb3VudCA9ICVkXG4iLCBvYmplY3QtPmNvdW50KTsKIAlwcl9ub3RpY2UoIiAgZmxhZ3MgPSAweCVseFxuIiwgb2JqZWN0LT5mbGFncyk7CisJcHJfbm90aWNlKCIgIGNoZWNrc3VtID0gJWRcbiIsIG9iamVjdC0+Y2hlY2tzdW0pOwogCXByX25vdGljZSgiICBiYWNrdHJhY2U6XG4iKTsKIAlwcmludF9zdGFja190cmFjZSgmdHJhY2UsIDQpOwogfQpAQCAtNTIyLDEyICs1MTgsMTMgQEAKIAlJTklUX0hMSVNUX0hFQUQoJm9iamVjdC0+YXJlYV9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmb2JqZWN0LT5sb2NrKTsKIAlhdG9taWNfc2V0KCZvYmplY3QtPnVzZV9jb3VudCwgMSk7Ci0Jb2JqZWN0LT5mbGFncyA9IE9CSkVDVF9BTExPQ0FURUQgfCBPQkpFQ1RfTkVXOworCW9iamVjdC0+ZmxhZ3MgPSBPQkpFQ1RfQUxMT0NBVEVEOwogCW9iamVjdC0+cG9pbnRlciA9IHB0cjsKIAlvYmplY3QtPnNpemUgPSBzaXplOwogCW9iamVjdC0+bWluX2NvdW50ID0gbWluX2NvdW50OwotCW9iamVjdC0+Y291bnQgPSAtMTsJCQkvKiBubyBjb2xvciBpbml0aWFsbHkgKi8KKwlvYmplY3QtPmNvdW50ID0gMDsJCQkvKiB3aGl0ZSBjb2xvciBpbml0aWFsbHkgKi8KIAlvYmplY3QtPmppZmZpZXMgPSBqaWZmaWVzOworCW9iamVjdC0+Y2hlY2tzdW0gPSAwOwogCiAJLyogdGFzayBpbmZvcm1hdGlvbiAqLwogCWlmIChpbl9pcnEoKSkgewpAQCAtNzIwLDE0ICs3MTcsMTMgQEAKICAqIEFkZCBhIHNjYW5uaW5nIGFyZWEgdG8gdGhlIG9iamVjdC4gSWYgYXQgbGVhc3Qgb25lIHN1Y2ggYXJlYSBpcyBhZGRlZCwKICAqIGttZW1sZWFrIHdpbGwgb25seSBzY2FuIHRoZXNlIHJhbmdlcyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgbWVtb3J5IGJsb2NrLgogICovCi1zdGF0aWMgdm9pZCBhZGRfc2Nhbl9hcmVhKHVuc2lnbmVkIGxvbmcgcHRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgc2l6ZV90IGxlbmd0aCwgZ2ZwX3QgZ2ZwKQorc3RhdGljIHZvaWQgYWRkX3NjYW5fYXJlYSh1bnNpZ25lZCBsb25nIHB0ciwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDsKIAlzdHJ1Y3Qga21lbWxlYWtfc2Nhbl9hcmVhICphcmVhOwogCi0Jb2JqZWN0ID0gZmluZF9hbmRfZ2V0X29iamVjdChwdHIsIDApOworCW9iamVjdCA9IGZpbmRfYW5kX2dldF9vYmplY3QocHRyLCAxKTsKIAlpZiAoIW9iamVjdCkgewogCQlrbWVtbGVha193YXJuKCJBZGRpbmcgc2NhbiBhcmVhIHRvIHVua25vd24gb2JqZWN0IGF0IDB4JTA4bHhcbiIsCiAJCQkgICAgICBwdHIpOwpAQCAtNzQxLDcgKzczNyw3IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOwotCWlmIChvZmZzZXQgKyBsZW5ndGggPiBvYmplY3QtPnNpemUpIHsKKwlpZiAocHRyICsgc2l6ZSA+IG9iamVjdC0+cG9pbnRlciArIG9iamVjdC0+c2l6ZSkgewogCQlrbWVtbGVha193YXJuKCJTY2FuIGFyZWEgbGFyZ2VyIHRoYW4gb2JqZWN0IDB4JTA4bHhcbiIsIHB0cik7CiAJCWR1bXBfb2JqZWN0X2luZm8ob2JqZWN0KTsKIAkJa21lbV9jYWNoZV9mcmVlKHNjYW5fYXJlYV9jYWNoZSwgYXJlYSk7CkBAIC03NDksOCArNzQ1LDggQEAKIAl9CiAKIAlJTklUX0hMSVNUX05PREUoJmFyZWEtPm5vZGUpOwotCWFyZWEtPm9mZnNldCA9IG9mZnNldDsKLQlhcmVhLT5sZW5ndGggPSBsZW5ndGg7CisJYXJlYS0+c3RhcnQgPSBwdHI7CisJYXJlYS0+c2l6ZSA9IHNpemU7CiAKIAlobGlzdF9hZGRfaGVhZCgmYXJlYS0+bm9kZSwgJm9iamVjdC0+YXJlYV9saXN0KTsKIG91dF91bmxvY2s6CkBAIC03ODYsNyArNzgyLDcgQEAKICAqIHByb2Nlc3NlZCBsYXRlciBvbmNlIGttZW1sZWFrIGlzIGZ1bGx5IGluaXRpYWxpemVkLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgbG9nX2Vhcmx5KGludCBvcF90eXBlLCBjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCQkJICAgICBpbnQgbWluX2NvdW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKKwkJCSAgICAgaW50IG1pbl9jb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlYXJseV9sb2cgKmxvZzsKQEAgLTgwOCw4ICs4MDQsNiBAQAogCWxvZy0+cHRyID0gcHRyOwogCWxvZy0+c2l6ZSA9IHNpemU7CiAJbG9nLT5taW5fY291bnQgPSBtaW5fY291bnQ7Ci0JbG9nLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JbG9nLT5sZW5ndGggPSBsZW5ndGg7CiAJaWYgKG9wX3R5cGUgPT0gS01FTUxFQUtfQUxMT0MpCiAJCWxvZy0+dHJhY2VfbGVuID0gX19zYXZlX3N0YWNrX3RyYWNlKGxvZy0+dHJhY2UpOwogCWNydF9lYXJseV9sb2crKzsKQEAgLTg1OCw3ICs4NTIsNyBAQAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZW5hYmxlZCkgJiYgcHRyICYmICFJU19FUlIocHRyKSkKIAkJY3JlYXRlX29iamVjdCgodW5zaWduZWQgbG9uZylwdHIsIHNpemUsIG1pbl9jb3VudCwgZ2ZwKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZWFybHlfbG9nKSkKLQkJbG9nX2Vhcmx5KEtNRU1MRUFLX0FMTE9DLCBwdHIsIHNpemUsIG1pbl9jb3VudCwgMCwgMCk7CisJCWxvZ19lYXJseShLTUVNTEVBS19BTExPQywgcHRyLCBzaXplLCBtaW5fY291bnQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa21lbWxlYWtfYWxsb2MpOwogCkBAIC04NzMsNyArODY3LDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2VuYWJsZWQpICYmIHB0ciAmJiAhSVNfRVJSKHB0cikpCiAJCWRlbGV0ZV9vYmplY3RfZnVsbCgodW5zaWduZWQgbG9uZylwdHIpOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfRlJFRSwgcHRyLCAwLCAwLCAwLCAwKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX0ZSRUUsIHB0ciwgMCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19mcmVlKTsKIApAQCAtODg4LDcgKzg4Miw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lbmFibGVkKSAmJiBwdHIgJiYgIUlTX0VSUihwdHIpKQogCQlkZWxldGVfb2JqZWN0X3BhcnQoKHVuc2lnbmVkIGxvbmcpcHRyLCBzaXplKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZWFybHlfbG9nKSkKLQkJbG9nX2Vhcmx5KEtNRU1MRUFLX0ZSRUVfUEFSVCwgcHRyLCBzaXplLCAwLCAwLCAwKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX0ZSRUVfUEFSVCwgcHRyLCBzaXplLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWVfcGFydCk7CiAKQEAgLTkwMyw3ICs4OTcsNyBAQAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZW5hYmxlZCkgJiYgcHRyICYmICFJU19FUlIocHRyKSkKIAkJbWFrZV9ncmF5X29iamVjdCgodW5zaWduZWQgbG9uZylwdHIpOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfTk9UX0xFQUssIHB0ciwgMCwgMCwgMCwgMCk7CisJCWxvZ19lYXJseShLTUVNTEVBS19OT1RfTEVBSywgcHRyLCAwLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbWxlYWtfbm90X2xlYWspOwogCkBAIC05MTksMjIgKzkxMywyMSBAQAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZW5hYmxlZCkgJiYgcHRyICYmICFJU19FUlIocHRyKSkKIAkJbWFrZV9ibGFja19vYmplY3QoKHVuc2lnbmVkIGxvbmcpcHRyKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZWFybHlfbG9nKSkKLQkJbG9nX2Vhcmx5KEtNRU1MRUFLX0lHTk9SRSwgcHRyLCAwLCAwLCAwLCAwKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX0lHTk9SRSwgcHRyLCAwLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbWxlYWtfaWdub3JlKTsKIAogLyoKICAqIExpbWl0IHRoZSByYW5nZSB0byBiZSBzY2FubmVkIGluIGFuIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2suCiAgKi8KLXZvaWQgX19yZWYga21lbWxlYWtfc2Nhbl9hcmVhKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkgICAgICBzaXplX3QgbGVuZ3RoLCBnZnBfdCBnZnApCit2b2lkIF9fcmVmIGttZW1sZWFrX3NjYW5fYXJlYShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApCiB7CiAJcHJfZGVidWcoIiVzKDB4JXApXG4iLCBfX2Z1bmNfXywgcHRyKTsKIAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZW5hYmxlZCkgJiYgcHRyICYmICFJU19FUlIocHRyKSkKLQkJYWRkX3NjYW5fYXJlYSgodW5zaWduZWQgbG9uZylwdHIsIG9mZnNldCwgbGVuZ3RoLCBnZnApOworCQlhZGRfc2Nhbl9hcmVhKCh1bnNpZ25lZCBsb25nKXB0ciwgc2l6ZSwgZ2ZwKTsKIAllbHNlIGlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZWFybHlfbG9nKSkKLQkJbG9nX2Vhcmx5KEtNRU1MRUFLX1NDQU5fQVJFQSwgcHRyLCAwLCAwLCBvZmZzZXQsIGxlbmd0aCk7CisJCWxvZ19lYXJseShLTUVNTEVBS19TQ0FOX0FSRUEsIHB0ciwgc2l6ZSwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1sZWFrX3NjYW5fYXJlYSk7CiAKQEAgLTk0OCwxMSArOTQxLDI1IEBACiAJaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lbmFibGVkKSAmJiBwdHIgJiYgIUlTX0VSUihwdHIpKQogCQlvYmplY3Rfbm9fc2NhbigodW5zaWduZWQgbG9uZylwdHIpOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfTk9fU0NBTiwgcHRyLCAwLCAwLCAwLCAwKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX05PX1NDQU4sIHB0ciwgMCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1sZWFrX25vX3NjYW4pOwogCiAvKgorICogVXBkYXRlIGFuIG9iamVjdCdzIGNoZWNrc3VtIGFuZCByZXR1cm4gdHJ1ZSBpZiBpdCB3YXMgbW9kaWZpZWQuCisgKi8KK3N0YXRpYyBib29sIHVwZGF0ZV9jaGVja3N1bShzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCit7CisJdTMyIG9sZF9jc3VtID0gb2JqZWN0LT5jaGVja3N1bTsKKworCWlmICgha21lbWNoZWNrX2lzX29ial9pbml0aWFsaXplZChvYmplY3QtPnBvaW50ZXIsIG9iamVjdC0+c2l6ZSkpCisJCXJldHVybiBmYWxzZTsKKworCW9iamVjdC0+Y2hlY2tzdW0gPSBjcmMzMigwLCAodm9pZCAqKW9iamVjdC0+cG9pbnRlciwgb2JqZWN0LT5zaXplKTsKKwlyZXR1cm4gb2JqZWN0LT5jaGVja3N1bSAhPSBvbGRfY3N1bTsKK30KKworLyoKICAqIE1lbW9yeSBzY2FubmluZyBpcyBhIGxvbmcgcHJvY2VzcyBhbmQgaXQgbmVlZHMgdG8gYmUgaW50ZXJydXB0YWJsZS4gVGhpcwogICogZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgc3VjaCBpbnRlcnJ1cHQgY29uZGl0aW9uIG9jY3VyZWQuCiAgKi8KQEAgLTEwMzEsMTEgKzEwMzgsMTQgQEAKIAkJICogYWRkZWQgdG8gdGhlIGdyYXlfbGlzdC4KIAkJICovCiAJCW9iamVjdC0+Y291bnQrKzsKLQkJaWYgKGNvbG9yX2dyYXkob2JqZWN0KSkKKwkJaWYgKGNvbG9yX2dyYXkob2JqZWN0KSkgewogCQkJbGlzdF9hZGRfdGFpbCgmb2JqZWN0LT5ncmF5X2xpc3QsICZncmF5X2xpc3QpOwotCQllbHNlCi0JCQlwdXRfb2JqZWN0KG9iamVjdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CisJCXB1dF9vYmplY3Qob2JqZWN0KTsKIAl9CiB9CiAKQEAgLTEwNzUsMTQgKzEwODUsNDcgQEAKIAkJfQogCX0gZWxzZQogCQlobGlzdF9mb3JfZWFjaF9lbnRyeShhcmVhLCBlbGVtLCAmb2JqZWN0LT5hcmVhX2xpc3QsIG5vZGUpCi0JCQlzY2FuX2Jsb2NrKCh2b2lkICopKG9iamVjdC0+cG9pbnRlciArIGFyZWEtPm9mZnNldCksCi0JCQkJICAgKHZvaWQgKikob2JqZWN0LT5wb2ludGVyICsgYXJlYS0+b2Zmc2V0Ci0JCQkJCSAgICArIGFyZWEtPmxlbmd0aCksIG9iamVjdCwgMCk7CisJCQlzY2FuX2Jsb2NrKCh2b2lkICopYXJlYS0+c3RhcnQsCisJCQkJICAgKHZvaWQgKikoYXJlYS0+c3RhcnQgKyBhcmVhLT5zaXplKSwKKwkJCQkgICBvYmplY3QsIDApOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgorICogU2NhbiB0aGUgb2JqZWN0cyBhbHJlYWR5IHJlZmVyZW5jZWQgKGdyYXkgb2JqZWN0cykuIE1vcmUgb2JqZWN0cyB3aWxsIGJlCisgKiByZWZlcmVuY2VkIGFuZCwgaWYgdGhlcmUgYXJlIG5vIG1lbW9yeSBsZWFrcywgYWxsIHRoZSBvYmplY3RzIGFyZSBzY2FubmVkLgorICovCitzdGF0aWMgdm9pZCBzY2FuX2dyYXlfbGlzdCh2b2lkKQoreworCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCwgKnRtcDsKKworCS8qCisJICogVGhlIGxpc3QgdHJhdmVyc2FsIGlzIHNhZmUgZm9yIGJvdGggdGFpbCBhZGRpdGlvbnMgYW5kIHJlbW92YWxzCisJICogZnJvbSBpbnNpZGUgdGhlIGxvb3AuIFRoZSBrbWVtbGVhayBvYmplY3RzIGNhbm5vdCBiZSBmcmVlZCBmcm9tCisJICogb3V0c2lkZSB0aGUgbG9vcCBiZWNhdXNlIHRoZWlyIHVzZV9jb3VudCB3YXMgaW5jcmVtZW50ZWQuCisJICovCisJb2JqZWN0ID0gbGlzdF9lbnRyeShncmF5X2xpc3QubmV4dCwgdHlwZW9mKCpvYmplY3QpLCBncmF5X2xpc3QpOworCXdoaWxlICgmb2JqZWN0LT5ncmF5X2xpc3QgIT0gJmdyYXlfbGlzdCkgeworCQljb25kX3Jlc2NoZWQoKTsKKworCQkvKiBtYXkgYWRkIG5ldyBvYmplY3RzIHRvIHRoZSBsaXN0ICovCisJCWlmICghc2Nhbl9zaG91bGRfc3RvcCgpKQorCQkJc2Nhbl9vYmplY3Qob2JqZWN0KTsKKworCQl0bXAgPSBsaXN0X2VudHJ5KG9iamVjdC0+Z3JheV9saXN0Lm5leHQsIHR5cGVvZigqb2JqZWN0KSwKKwkJCQkgZ3JheV9saXN0KTsKKworCQkvKiByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBsaXN0IGFuZCByZWxlYXNlIGl0ICovCisJCWxpc3RfZGVsKCZvYmplY3QtPmdyYXlfbGlzdCk7CisJCXB1dF9vYmplY3Qob2JqZWN0KTsKKworCQlvYmplY3QgPSB0bXA7CisJfQorCVdBUk5fT04oIWxpc3RfZW1wdHkoJmdyYXlfbGlzdCkpOworfQorCisvKgogICogU2NhbiBkYXRhIHNlY3Rpb25zIGFuZCBhbGwgdGhlIHJlZmVyZW5jZWQgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgdmlhIHRoZQogICoga2VybmVsJ3Mgc3RhbmRhcmQgYWxsb2NhdG9ycy4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZQogICogc2Nhbl9tdXRleCBoZWxkLgpAQCAtMTA5MCwxMCArMTEzMyw5IEBACiBzdGF0aWMgdm9pZCBrbWVtbGVha19zY2FuKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QsICp0bXA7CisJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwogCWludCBpOwogCWludCBuZXdfbGVha3MgPSAwOwotCWludCBncmF5X2xpc3RfcGFzcyA9IDA7CiAKIAlqaWZmaWVzX2xhc3Rfc2NhbiA9IGppZmZpZXM7CiAKQEAgLTExMTQsNyArMTE1Niw2IEBACiAjZW5kaWYKIAkJLyogcmVzZXQgdGhlIHJlZmVyZW5jZSBjb3VudCAod2hpdGVuIHRoZSBvYmplY3QpICovCiAJCW9iamVjdC0+Y291bnQgPSAwOwotCQlvYmplY3QtPmZsYWdzICY9IH5PQkpFQ1RfTkVXOwogCQlpZiAoY29sb3JfZ3JheShvYmplY3QpICYmIGdldF9vYmplY3Qob2JqZWN0KSkKIAkJCWxpc3RfYWRkX3RhaWwoJm9iamVjdC0+Z3JheV9saXN0LCAmZ3JheV9saXN0KTsKIApAQCAtMTE3Miw2MiArMTIxMywzNiBAQAogCiAJLyoKIAkgKiBTY2FuIHRoZSBvYmplY3RzIGFscmVhZHkgcmVmZXJlbmNlZCBmcm9tIHRoZSBzZWN0aW9ucyBzY2FubmVkCi0JICogYWJvdmUuIE1vcmUgb2JqZWN0cyB3aWxsIGJlIHJlZmVyZW5jZWQgYW5kLCBpZiB0aGVyZSBhcmUgbm8gbWVtb3J5Ci0JICogbGVha3MsIGFsbCB0aGUgb2JqZWN0cyB3aWxsIGJlIHNjYW5uZWQuIFRoZSBsaXN0IHRyYXZlcnNhbCBpcyBzYWZlCi0JICogZm9yIGJvdGggdGFpbCBhZGRpdGlvbnMgYW5kIHJlbW92YWxzIGZyb20gaW5zaWRlIHRoZSBsb29wLiBUaGUKLQkgKiBrbWVtbGVhayBvYmplY3RzIGNhbm5vdCBiZSBmcmVlZCBmcm9tIG91dHNpZGUgdGhlIGxvb3AgYmVjYXVzZSB0aGVpcgotCSAqIHVzZV9jb3VudCB3YXMgaW5jcmVhc2VkLgorCSAqIGFib3ZlLgogCSAqLwotcmVwZWF0OgotCW9iamVjdCA9IGxpc3RfZW50cnkoZ3JheV9saXN0Lm5leHQsIHR5cGVvZigqb2JqZWN0KSwgZ3JheV9saXN0KTsKLQl3aGlsZSAoJm9iamVjdC0+Z3JheV9saXN0ICE9ICZncmF5X2xpc3QpIHsKLQkJY29uZF9yZXNjaGVkKCk7Ci0KLQkJLyogbWF5IGFkZCBuZXcgb2JqZWN0cyB0byB0aGUgbGlzdCAqLwotCQlpZiAoIXNjYW5fc2hvdWxkX3N0b3AoKSkKLQkJCXNjYW5fb2JqZWN0KG9iamVjdCk7Ci0KLQkJdG1wID0gbGlzdF9lbnRyeShvYmplY3QtPmdyYXlfbGlzdC5uZXh0LCB0eXBlb2YoKm9iamVjdCksCi0JCQkJIGdyYXlfbGlzdCk7Ci0KLQkJLyogcmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdCBhbmQgcmVsZWFzZSBpdCAqLwotCQlsaXN0X2RlbCgmb2JqZWN0LT5ncmF5X2xpc3QpOwotCQlwdXRfb2JqZWN0KG9iamVjdCk7Ci0KLQkJb2JqZWN0ID0gdG1wOwotCX0KLQotCWlmIChzY2FuX3Nob3VsZF9zdG9wKCkgfHwgKytncmF5X2xpc3RfcGFzcyA+PSBHUkFZX0xJU1RfUEFTU0VTKQotCQlnb3RvIHNjYW5fZW5kOworCXNjYW5fZ3JheV9saXN0KCk7CiAKIAkvKgotCSAqIENoZWNrIGZvciBuZXcgb2JqZWN0cyBhbGxvY2F0ZWQgZHVyaW5nIHRoaXMgc2Nhbm5pbmcgYW5kIGFkZCB0aGVtCi0JICogdG8gdGhlIGdyYXkgbGlzdC4KKwkgKiBDaGVjayBmb3IgbmV3IG9yIHVucmVmZXJlbmNlZCBvYmplY3RzIG1vZGlmaWVkIHNpbmNlIHRoZSBwcmV2aW91cworCSAqIHNjYW4gYW5kIGNvbG9yIHRoZW0gZ3JheSB1bnRpbCB0aGUgbmV4dCBzY2FuLgogCSAqLwogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvYmplY3QsICZvYmplY3RfbGlzdCwgb2JqZWN0X2xpc3QpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOwotCQlpZiAoKG9iamVjdC0+ZmxhZ3MgJiBPQkpFQ1RfTkVXKSAmJiAhY29sb3JfYmxhY2sob2JqZWN0KSAmJgotCQkgICAgZ2V0X29iamVjdChvYmplY3QpKSB7Ci0JCQlvYmplY3QtPmZsYWdzICY9IH5PQkpFQ1RfTkVXOworCQlpZiAoY29sb3Jfd2hpdGUob2JqZWN0KSAmJiAob2JqZWN0LT5mbGFncyAmIE9CSkVDVF9BTExPQ0FURUQpCisJCSAgICAmJiB1cGRhdGVfY2hlY2tzdW0ob2JqZWN0KSAmJiBnZXRfb2JqZWN0KG9iamVjdCkpIHsKKwkJCS8qIGNvbG9yIGl0IGdyYXkgdGVtcG9yYXJpbHkgKi8KKwkJCW9iamVjdC0+Y291bnQgPSBvYmplY3QtPm1pbl9jb3VudDsKIAkJCWxpc3RfYWRkX3RhaWwoJm9iamVjdC0+Z3JheV9saXN0LCAmZ3JheV9saXN0KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmdyYXlfbGlzdCkpCi0JCWdvdG8gcmVwZWF0OwotCi1zY2FuX2VuZDoKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZncmF5X2xpc3QpKTsKKwkvKgorCSAqIFJlLXNjYW4gdGhlIGdyYXkgbGlzdCBmb3IgbW9kaWZpZWQgdW5yZWZlcmVuY2VkIG9iamVjdHMuCisJICovCisJc2Nhbl9ncmF5X2xpc3QoKTsKIAogCS8qCi0JICogSWYgc2Nhbm5pbmcgd2FzIHN0b3BwZWQgb3IgbmV3IG9iamVjdHMgd2VyZSBiZWluZyBhbGxvY2F0ZWQgYXQgYQotCSAqIGhpZ2hlciByYXRlIHRoYW4gZ3JheSBsaXN0IHNjYW5uaW5nLCBkbyBub3QgcmVwb3J0IGFueSBuZXcKLQkgKiB1bnJlZmVyZW5jZWQgb2JqZWN0cy4KKwkgKiBJZiBzY2FubmluZyB3YXMgc3RvcHBlZCBkbyBub3QgcmVwb3J0IGFueSBuZXcgdW5yZWZlcmVuY2VkIG9iamVjdHMuCiAJICovCi0JaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSB8fCBncmF5X2xpc3RfcGFzcyA+PSBHUkFZX0xJU1RfUEFTU0VTKQorCWlmIChzY2FuX3Nob3VsZF9zdG9wKCkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xNjQyLDggKzE2NTcsNyBAQAogCQkJa21lbWxlYWtfaWdub3JlKGxvZy0+cHRyKTsKIAkJCWJyZWFrOwogCQljYXNlIEtNRU1MRUFLX1NDQU5fQVJFQToKLQkJCWttZW1sZWFrX3NjYW5fYXJlYShsb2ctPnB0ciwgbG9nLT5vZmZzZXQsIGxvZy0+bGVuZ3RoLAotCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJCWttZW1sZWFrX3NjYW5fYXJlYShsb2ctPnB0ciwgbG9nLT5zaXplLCBHRlBfS0VSTkVMKTsKIAkJCWJyZWFrOwogCQljYXNlIEtNRU1MRUFLX05PX1NDQU46CiAJCQlrbWVtbGVha19ub19zY2FuKGxvZy0+cHRyKTsKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggNTU3NWY4Ni4uNTZhMGRhMSAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW11X25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKICAqIEEgZmV3IG5vdGVzIGFib3V0IHRoZSBLU00gc2Nhbm5pbmcgcHJvY2VzcywKQEAgLTc5LDEzICs4MSwxMyBAQAogICogc3RydWN0IG1tX3Nsb3QgLSBrc20gaW5mb3JtYXRpb24gcGVyIG1tIHRoYXQgaXMgYmVpbmcgc2Nhbm5lZAogICogQGxpbms6IGxpbmsgdG8gdGhlIG1tX3Nsb3RzIGhhc2ggbGlzdAogICogQG1tX2xpc3Q6IGxpbmsgaW50byB0aGUgbW1fc2xvdHMgbGlzdCwgcm9vdGVkIGluIGtzbV9tbV9oZWFkCi0gKiBAcm1hcF9saXN0OiBoZWFkIGZvciB0aGlzIG1tX3Nsb3QncyBsaXN0IG9mIHJtYXBfaXRlbXMKKyAqIEBybWFwX2xpc3Q6IGhlYWQgZm9yIHRoaXMgbW1fc2xvdCdzIHNpbmdseS1saW5rZWQgbGlzdCBvZiBybWFwX2l0ZW1zCiAgKiBAbW06IHRoZSBtbSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgdmFsaWQgZm9yCiAgKi8KIHN0cnVjdCBtbV9zbG90IHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaW5rOwogCXN0cnVjdCBsaXN0X2hlYWQgbW1fbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJtYXBfbGlzdDsKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2xpc3Q7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiB9OwogCkBAIC05Myw3ICs5NSw3IEBACiAgKiBzdHJ1Y3Qga3NtX3NjYW4gLSBjdXJzb3IgZm9yIHNjYW5uaW5nCiAgKiBAbW1fc2xvdDogdGhlIGN1cnJlbnQgbW1fc2xvdCB3ZSBhcmUgc2Nhbm5pbmcKICAqIEBhZGRyZXNzOiB0aGUgbmV4dCBhZGRyZXNzIGluc2lkZSB0aGF0IHRvIGJlIHNjYW5uZWQKLSAqIEBybWFwX2l0ZW06IHRoZSBjdXJyZW50IHJtYXAgdGhhdCB3ZSBhcmUgc2Nhbm5pbmcgaW5zaWRlIHRoZSBybWFwX2xpc3QKKyAqIEBybWFwX2xpc3Q6IGxpbmsgdG8gdGhlIG5leHQgcm1hcCB0byBiZSBzY2FubmVkIGluIHRoZSBybWFwX2xpc3QKICAqIEBzZXFucjogY291bnQgb2YgY29tcGxldGVkIGZ1bGwgc2NhbnMgKG5lZWRlZCB3aGVuIHJlbW92aW5nIHVuc3RhYmxlIG5vZGUpCiAgKgogICogVGhlcmUgaXMgb25seSB0aGUgb25lIGtzbV9zY2FuIGluc3RhbmNlIG9mIHRoaXMgY3Vyc29yIHN0cnVjdHVyZS4KQEAgLTEwMSwzNyArMTAzLDUxIEBACiBzdHJ1Y3Qga3NtX3NjYW4gewogCXN0cnVjdCBtbV9zbG90ICptbV9zbG90OwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisJc3RydWN0IHJtYXBfaXRlbSAqKnJtYXBfbGlzdDsKIAl1bnNpZ25lZCBsb25nIHNlcW5yOwogfTsKIAogLyoqCisgKiBzdHJ1Y3Qgc3RhYmxlX25vZGUgLSBub2RlIG9mIHRoZSBzdGFibGUgcmJ0cmVlCisgKiBAbm9kZTogcmIgbm9kZSBvZiB0aGlzIGtzbSBwYWdlIGluIHRoZSBzdGFibGUgdHJlZQorICogQGhsaXN0OiBobGlzdCBoZWFkIG9mIHJtYXBfaXRlbXMgdXNpbmcgdGhpcyBrc20gcGFnZQorICogQGtwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIG9mIHRoaXMga3NtIHBhZ2UKKyAqLworc3RydWN0IHN0YWJsZV9ub2RlIHsKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOworCXN0cnVjdCBobGlzdF9oZWFkIGhsaXN0OworCXVuc2lnbmVkIGxvbmcga3BmbjsKK307CisKKy8qKgogICogc3RydWN0IHJtYXBfaXRlbSAtIHJldmVyc2UgbWFwcGluZyBpdGVtIGZvciB2aXJ0dWFsIGFkZHJlc3NlcwotICogQGxpbms6IGxpbmsgaW50byBtbV9zbG90J3Mgcm1hcF9saXN0IChybWFwX2xpc3QgaXMgcGVyIG1tKQorICogQHJtYXBfbGlzdDogbmV4dCBybWFwX2l0ZW0gaW4gbW1fc2xvdCdzIHNpbmdseS1saW5rZWQgcm1hcF9saXN0CisgKiBAYW5vbl92bWE6IHBvaW50ZXIgdG8gYW5vbl92bWEgZm9yIHRoaXMgbW0sYWRkcmVzcywgd2hlbiBpbiBzdGFibGUgdHJlZQogICogQG1tOiB0aGUgbWVtb3J5IHN0cnVjdHVyZSB0aGlzIHJtYXBfaXRlbSBpcyBwb2ludGluZyBpbnRvCiAgKiBAYWRkcmVzczogdGhlIHZpcnR1YWwgYWRkcmVzcyB0aGlzIHJtYXBfaXRlbSB0cmFja3MgKCsgZmxhZ3MgaW4gbG93IGJpdHMpCiAgKiBAb2xkY2hlY2tzdW06IHByZXZpb3VzIGNoZWNrc3VtIG9mIHRoZSBwYWdlIGF0IHRoYXQgdmlydHVhbCBhZGRyZXNzCi0gKiBAbm9kZTogcmJfbm9kZSBvZiB0aGlzIHJtYXBfaXRlbSBpbiBlaXRoZXIgdW5zdGFibGUgb3Igc3RhYmxlIHRyZWUKLSAqIEBuZXh0OiBuZXh0IHJtYXBfaXRlbSBoYW5naW5nIG9mZiB0aGUgc2FtZSBub2RlIG9mIHRoZSBzdGFibGUgdHJlZQotICogQHByZXY6IHByZXZpb3VzIHJtYXBfaXRlbSBoYW5naW5nIG9mZiB0aGUgc2FtZSBub2RlIG9mIHRoZSBzdGFibGUgdHJlZQorICogQG5vZGU6IHJiIG5vZGUgb2YgdGhpcyBybWFwX2l0ZW0gaW4gdGhlIHVuc3RhYmxlIHRyZWUKKyAqIEBoZWFkOiBwb2ludGVyIHRvIHN0YWJsZV9ub2RlIGhlYWRpbmcgdGhpcyBsaXN0IGluIHRoZSBzdGFibGUgdHJlZQorICogQGhsaXN0OiBsaW5rIGludG8gaGxpc3Qgb2Ygcm1hcF9pdGVtcyBoYW5naW5nIG9mZiB0aGF0IHN0YWJsZV9ub2RlCiAgKi8KIHN0cnVjdCBybWFwX2l0ZW0gewotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2xpc3Q7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsJLyogd2hlbiBzdGFibGUgKi8KIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CQkvKiArIGxvdyBiaXRzIHVzZWQgZm9yIGZsYWdzIGJlbG93ICovCisJdW5zaWduZWQgaW50IG9sZGNoZWNrc3VtOwkvKiB3aGVuIHVuc3RhYmxlICovCiAJdW5pb24gewotCQl1bnNpZ25lZCBpbnQgb2xkY2hlY2tzdW07CQkvKiB3aGVuIHVuc3RhYmxlICovCi0JCXN0cnVjdCBybWFwX2l0ZW0gKm5leHQ7CQkJLyogd2hlbiBzdGFibGUgKi8KLQl9OwotCXVuaW9uIHsKLQkJc3RydWN0IHJiX25vZGUgbm9kZTsJCQkvKiB3aGVuIHRyZWUgbm9kZSAqLwotCQlzdHJ1Y3Qgcm1hcF9pdGVtICpwcmV2OwkJCS8qIGluIHN0YWJsZSBsaXN0ICovCisJCXN0cnVjdCByYl9ub2RlIG5vZGU7CS8qIHdoZW4gbm9kZSBvZiB1bnN0YWJsZSB0cmVlICovCisJCXN0cnVjdCB7CQkvKiB3aGVuIGxpc3RlZCBmcm9tIHN0YWJsZSB0cmVlICovCisJCQlzdHJ1Y3Qgc3RhYmxlX25vZGUgKmhlYWQ7CisJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKKwkJfTsKIAl9OwogfTsKIAogI2RlZmluZSBTRVFOUl9NQVNLCTB4MGZmCS8qIGxvdyBiaXRzIG9mIHVuc3RhYmxlIHRyZWUgc2VxbnIgKi8KLSNkZWZpbmUgTk9ERV9GTEFHCTB4MTAwCS8qIGlzIGEgbm9kZSBvZiB1bnN0YWJsZSBvciBzdGFibGUgdHJlZSAqLwotI2RlZmluZSBTVEFCTEVfRkxBRwkweDIwMAkvKiBpcyBhIG5vZGUgb3IgbGlzdCBpdGVtIG9mIHN0YWJsZSB0cmVlICovCisjZGVmaW5lIFVOU1RBQkxFX0ZMQUcJMHgxMDAJLyogaXMgYSBub2RlIG9mIHRoZSB1bnN0YWJsZSB0cmVlICovCisjZGVmaW5lIFNUQUJMRV9GTEFHCTB4MjAwCS8qIGlzIGxpc3RlZCBmcm9tIHRoZSBzdGFibGUgdHJlZSAqLwogCiAvKiBUaGUgc3RhYmxlIGFuZCB1bnN0YWJsZSB0cmVlIGhlYWRzICovCiBzdGF0aWMgc3RydWN0IHJiX3Jvb3Qgcm9vdF9zdGFibGVfdHJlZSA9IFJCX1JPT1Q7CkBAIC0xNDgsNiArMTY0LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcm1hcF9pdGVtX2NhY2hlOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzdGFibGVfbm9kZV9jYWNoZTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbW1fc2xvdF9jYWNoZTsKIAogLyogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgc3RhYmxlIHRyZWUgKi8KQEAgLTE2Miw5ICsxNzksNiBAQAogLyogVGhlIG51bWJlciBvZiBybWFwX2l0ZW1zIGluIHVzZTogdG8gY2FsY3VsYXRlIHBhZ2VzX3ZvbGF0aWxlICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBrc21fcm1hcF9pdGVtczsKIAotLyogTGltaXQgb24gdGhlIG51bWJlciBvZiB1bnN3YXBwYWJsZSBwYWdlcyB1c2VkICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBrc21fbWF4X2tlcm5lbF9wYWdlczsKLQogLyogTnVtYmVyIG9mIHBhZ2VzIGtzbWQgc2hvdWxkIHNjYW4gaW4gb25lIGJhdGNoICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGtzbV90aHJlYWRfcGFnZXNfdG9fc2NhbiA9IDEwMDsKIApAQCAtMTkwLDEzICsyMDQsMTkgQEAKIAlpZiAoIXJtYXBfaXRlbV9jYWNoZSkKIAkJZ290byBvdXQ7CiAKKwlzdGFibGVfbm9kZV9jYWNoZSA9IEtTTV9LTUVNX0NBQ0hFKHN0YWJsZV9ub2RlLCAwKTsKKwlpZiAoIXN0YWJsZV9ub2RlX2NhY2hlKQorCQlnb3RvIG91dF9mcmVlMTsKKwogCW1tX3Nsb3RfY2FjaGUgPSBLU01fS01FTV9DQUNIRShtbV9zbG90LCAwKTsKIAlpZiAoIW1tX3Nsb3RfY2FjaGUpCi0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X2ZyZWUyOwogCiAJcmV0dXJuIDA7CiAKLW91dF9mcmVlOgorb3V0X2ZyZWUyOgorCWttZW1fY2FjaGVfZGVzdHJveShzdGFibGVfbm9kZV9jYWNoZSk7CitvdXRfZnJlZTE6CiAJa21lbV9jYWNoZV9kZXN0cm95KHJtYXBfaXRlbV9jYWNoZSk7CiBvdXQ6CiAJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDUsNiArMjI1LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBrc21fc2xhYl9mcmVlKHZvaWQpCiB7CiAJa21lbV9jYWNoZV9kZXN0cm95KG1tX3Nsb3RfY2FjaGUpOworCWttZW1fY2FjaGVfZGVzdHJveShzdGFibGVfbm9kZV9jYWNoZSk7CiAJa21lbV9jYWNoZV9kZXN0cm95KHJtYXBfaXRlbV9jYWNoZSk7CiAJbW1fc2xvdF9jYWNoZSA9IE5VTEw7CiB9CkBAIC0yMjYsNiArMjQ3LDE2IEBACiAJa21lbV9jYWNoZV9mcmVlKHJtYXBfaXRlbV9jYWNoZSwgcm1hcF9pdGVtKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RhYmxlX25vZGUgKmFsbG9jX3N0YWJsZV9ub2RlKHZvaWQpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Moc3RhYmxlX25vZGVfY2FjaGUsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zdGFibGVfbm9kZShzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlKQoreworCWttZW1fY2FjaGVfZnJlZShzdGFibGVfbm9kZV9jYWNoZSwgc3RhYmxlX25vZGUpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtbV9zbG90ICphbGxvY19tbV9zbG90KHZvaWQpCiB7CiAJaWYgKCFtbV9zbG90X2NhY2hlKQkvKiBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KQEAgLTI3NSw3ICszMDYsNiBAQAogCWJ1Y2tldCA9ICZtbV9zbG90c19oYXNoWygodW5zaWduZWQgbG9uZyltbSAvIHNpemVvZihzdHJ1Y3QgbW1fc3RydWN0KSkKIAkJCQklIE1NX1NMT1RTX0hBU0hfSEVBRFNdOwogCW1tX3Nsb3QtPm1tID0gbW07Ci0JSU5JVF9MSVNUX0hFQUQoJm1tX3Nsb3QtPnJtYXBfbGlzdCk7CiAJaGxpc3RfYWRkX2hlYWQoJm1tX3Nsb3QtPmxpbmssIGJ1Y2tldCk7CiB9CiAKQEAgLTI4NCw2ICszMTQsMjUgQEAKIAlyZXR1cm4gcm1hcF9pdGVtLT5hZGRyZXNzICYgU1RBQkxFX0ZMQUc7CiB9CiAKK3N0YXRpYyB2b2lkIGhvbGRfYW5vbl92bWEoc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtLAorCQkJICBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQoreworCXJtYXBfaXRlbS0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKKwlhdG9taWNfaW5jKCZhbm9uX3ZtYS0+a3NtX3JlZmNvdW50KTsKK30KKworc3RhdGljIHZvaWQgZHJvcF9hbm9uX3ZtYShzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCit7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHJtYXBfaXRlbS0+YW5vbl92bWE7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmYW5vbl92bWEtPmtzbV9yZWZjb3VudCwgJmFub25fdm1hLT5sb2NrKSkgeworCQlpbnQgZW1wdHkgPSBsaXN0X2VtcHR5KCZhbm9uX3ZtYS0+aGVhZCk7CisJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWlmIChlbXB0eSkKKwkJCWFub25fdm1hX2ZyZWUoYW5vbl92bWEpOworCX0KK30KKwogLyoKICAqIGtzbWQsIGFuZCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXMoKSwgbXVzdCBub3QgdG91Y2ggYW4gbW0ncwogICogcGFnZSB0YWJsZXMgYWZ0ZXIgaXQgaGFzIHBhc3NlZCB0aHJvdWdoIGtzbV9leGl0KCkgLSB3aGljaCwgaWYgbmVjZXNzYXJ5LApAQCAtMzU2LDEwICs0MDUsMTggQEAKIAlyZXR1cm4gKHJldCAmIFZNX0ZBVUxUX09PTSkgPyAtRU5PTUVNIDogMDsKIH0KIAotc3RhdGljIHZvaWQgYnJlYWtfY293KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtKQogeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcm1hcF9pdGVtLT5tbTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tPmFkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKKwkvKgorCSAqIEl0IGlzIG5vdCBhbiBhY2NpZGVudCB0aGF0IHdoZW5ldmVyIHdlIHdhbnQgdG8gYnJlYWsgQ09XCisJICogdG8gdW5kbywgd2UgYWxzbyBuZWVkIHRvIGRyb3AgYSByZWZlcmVuY2UgdG8gdGhlIGFub25fdm1hLgorCSAqLworCWRyb3BfYW5vbl92bWEocm1hcF9pdGVtKTsKKwogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCiAJCWdvdG8gb3V0OwpAQCAtNDAzLDIxICs0NjAsNzcgQEAKIAlyZXR1cm4gcGFnZTsKIH0KIAorc3RhdGljIHZvaWQgcmVtb3ZlX25vZGVfZnJvbV9zdGFibGVfdHJlZShzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlKQoreworCXN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGxpc3Q7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShybWFwX2l0ZW0sIGhsaXN0LCAmc3RhYmxlX25vZGUtPmhsaXN0LCBobGlzdCkgeworCQlpZiAocm1hcF9pdGVtLT5obGlzdC5uZXh0KQorCQkJa3NtX3BhZ2VzX3NoYXJpbmctLTsKKwkJZWxzZQorCQkJa3NtX3BhZ2VzX3NoYXJlZC0tOworCQlkcm9wX2Fub25fdm1hKHJtYXBfaXRlbSk7CisJCXJtYXBfaXRlbS0+YWRkcmVzcyAmPSBQQUdFX01BU0s7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCXJiX2VyYXNlKCZzdGFibGVfbm9kZS0+bm9kZSwgJnJvb3Rfc3RhYmxlX3RyZWUpOworCWZyZWVfc3RhYmxlX25vZGUoc3RhYmxlX25vZGUpOworfQorCiAvKgotICogZ2V0X2tzbV9wYWdlOiBjaGVja3MgaWYgdGhlIHBhZ2UgYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiBybWFwX2l0ZW0KLSAqIGlzIHN0aWxsIFBhZ2VLc20sIGluIHdoaWNoIGNhc2Ugd2UgY2FuIHRydXN0IHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLAotICogYW5kIGl0IHJldHVybnMgdGhlIGdvdHRlbiBwYWdlOyBidXQgTlVMTCBpZiB0aGUgcGFnZSBoYXMgYmVlbiB6YXBwZWQuCisgKiBnZXRfa3NtX3BhZ2U6IGNoZWNrcyBpZiB0aGUgcGFnZSBpbmRpY2F0ZWQgYnkgdGhlIHN0YWJsZSBub2RlCisgKiBpcyBzdGlsbCBpdHMga3NtIHBhZ2UsIGRlc3BpdGUgaGF2aW5nIGhlbGQgbm8gcmVmZXJlbmNlIHRvIGl0LgorICogSW4gd2hpY2ggY2FzZSB3ZSBjYW4gdHJ1c3QgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UsIGFuZCBpdAorICogcmV0dXJucyB0aGUgZ290dGVuIHBhZ2U7IGJ1dCBpZiB0aGUgcGFnZSBoYXMgbm93IGJlZW4gemFwcGVkLAorICogcmVtb3ZlIHRoZSBzdGFsZSBub2RlIGZyb20gdGhlIHN0YWJsZSB0cmVlIGFuZCByZXR1cm4gTlVMTC4KKyAqCisgKiBZb3Ugd291bGQgZXhwZWN0IHRoZSBzdGFibGVfbm9kZSB0byBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBrc20gcGFnZS4KKyAqIEJ1dCBpZiBpdCBpbmNyZW1lbnRzIHRoZSBwYWdlJ3MgY291bnQsIHN3YXBwaW5nIG91dCBoYXMgdG8gd2FpdCBmb3IKKyAqIGtzbWQgdG8gY29tZSBhcm91bmQgYWdhaW4gYmVmb3JlIGl0IGNhbiBmcmVlIHRoZSBwYWdlLCB3aGljaCBtYXkgdGFrZQorICogc2Vjb25kcyBvciBldmVuIG1pbnV0ZXM6IG11Y2ggdG9vIHVucmVzcG9uc2l2ZS4gIFNvIGluc3RlYWQgd2UgdXNlIGEKKyAqICJrZXlob2xlIHJlZmVyZW5jZSI6IGFjY2VzcyB0byB0aGUga3NtIHBhZ2UgZnJvbSB0aGUgc3RhYmxlIG5vZGUgcGVlcHMKKyAqIG91dCB0aHJvdWdoIGl0cyBrZXlob2xlIHRvIHNlZSBpZiB0aGF0IHBhZ2Ugc3RpbGwgaG9sZHMgdGhlIHJpZ2h0IGtleSwKKyAqIHBvaW50aW5nIGJhY2sgdG8gdGhpcyBzdGFibGUgbm9kZS4gIFRoaXMgcmVsaWVzIG9uIGZyZWVpbmcgYSBQYWdlQW5vbgorICogcGFnZSB0byByZXNldCBpdHMgcGFnZS0+bWFwcGluZyB0byBOVUxMLCBhbmQgcmVsaWVzIG9uIG5vIG90aGVyIHVzZSBvZgorICogYSBwYWdlIHRvIHB1dCBzb21ldGhpbmcgdGhhdCBtaWdodCBsb29rIGxpa2Ugb3VyIGtleSBpbiBwYWdlLT5tYXBwaW5nLgorICoKKyAqIGluY2x1ZGUvbGludXgvcGFnZW1hcC5oIHBhZ2VfY2FjaGVfZ2V0X3NwZWN1bGF0aXZlKCkgaXMgYSBnb29kIHJlZmVyZW5jZSwKKyAqIGJ1dCB0aGlzIGlzIGRpZmZlcmVudCAtIG1hZGUgc2ltcGxlciBieSBrc21fdGhyZWFkX211dGV4IGJlaW5nIGhlbGQsIGJ1dAorICogaW50ZXJlc3RpbmcgZm9yIGFzc3VtaW5nIHRoYXQgbm8gb3RoZXIgdXNlIG9mIHRoZSBzdHJ1Y3QgcGFnZSBjb3VsZCBldmVyCisgKiBwdXQgb3VyIGV4cGVjdGVkX21hcHBpbmcgaW50byBwYWdlLT5tYXBwaW5nIChvciBhIGZpZWxkIG9mIHRoZSB1bmlvbiB3aGljaAorICogY29pbmNpZGVzIHdpdGggcGFnZS0+bWFwcGluZykuICBUaGUgUkNVIGNhbGxzIGFyZSBub3QgZm9yIEtTTSBhdCBhbGwsIGJ1dAorICogdG8ga2VlcCB0aGUgcGFnZV9jb3VudCBwcm90b2NvbCBkZXNjcmliZWQgd2l0aCBwYWdlX2NhY2hlX2dldF9zcGVjdWxhdGl2ZS4KKyAqCisgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSB0aGF0IGdldF9rc21fcGFnZSgpIHdpbGwgcmV0dXJuIE5VTEwgb25lIG1vbWVudCwKKyAqIHRoZW4gcGFnZSB0aGUgbmV4dCwgaWYgdGhlIHBhZ2UgaXMgaW4gYmV0d2VlbiBwYWdlX2ZyZWV6ZV9yZWZzKCkgYW5kCisgKiBwYWdlX3VuZnJlZXplX3JlZnMoKTogdGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGFueXdoZXJlLCB0aGUgcGFnZQorICogaXMgb24gaXRzIHdheSB0byBiZWluZyBmcmVlZDsgYnV0IGl0IGlzIGFuIGFub21hbHkgdG8gYmVhciBpbiBtaW5kLgogICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9rc21fcGFnZShzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCitzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9rc21fcGFnZShzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKmV4cGVjdGVkX21hcHBpbmc7CiAKLQlwYWdlID0gZ2V0X21lcmdlYWJsZV9wYWdlKHJtYXBfaXRlbSk7Ci0JaWYgKHBhZ2UgJiYgIVBhZ2VLc20ocGFnZSkpIHsKKwlwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhYmxlX25vZGUtPmtwZm4pOworCWV4cGVjdGVkX21hcHBpbmcgPSAodm9pZCAqKXN0YWJsZV9ub2RlICsKKwkJCQkoUEFHRV9NQVBQSU5HX0FOT04gfCBQQUdFX01BUFBJTkdfS1NNKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKHBhZ2UtPm1hcHBpbmcgIT0gZXhwZWN0ZWRfbWFwcGluZykKKwkJZ290byBzdGFsZTsKKwlpZiAoIWdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKQorCQlnb3RvIHN0YWxlOworCWlmIChwYWdlLT5tYXBwaW5nICE9IGV4cGVjdGVkX21hcHBpbmcpIHsKIAkJcHV0X3BhZ2UocGFnZSk7Ci0JCXBhZ2UgPSBOVUxMOworCQlnb3RvIHN0YWxlOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcGFnZTsKK3N0YWxlOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJlbW92ZV9ub2RlX2Zyb21fc3RhYmxlX3RyZWUoc3RhYmxlX25vZGUpOworCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtNDI2LDM1ICs1MzksMjkgQEAKICAqLwogc3RhdGljIHZvaWQgcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUoc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtKQogewotCWlmIChpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pKSB7Ci0JCXN0cnVjdCBybWFwX2l0ZW0gKm5leHRfaXRlbSA9IHJtYXBfaXRlbS0+bmV4dDsKKwlpZiAocm1hcF9pdGVtLT5hZGRyZXNzICYgU1RBQkxFX0ZMQUcpIHsKKwkJc3RydWN0IHN0YWJsZV9ub2RlICpzdGFibGVfbm9kZTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyAmIE5PREVfRkxBRykgewotCQkJaWYgKG5leHRfaXRlbSkgewotCQkJCXJiX3JlcGxhY2Vfbm9kZSgmcm1hcF9pdGVtLT5ub2RlLAotCQkJCQkJJm5leHRfaXRlbS0+bm9kZSwKLQkJCQkJCSZyb290X3N0YWJsZV90cmVlKTsKLQkJCQluZXh0X2l0ZW0tPmFkZHJlc3MgfD0gTk9ERV9GTEFHOwotCQkJCWtzbV9wYWdlc19zaGFyaW5nLS07Ci0JCQl9IGVsc2UgewotCQkJCXJiX2VyYXNlKCZybWFwX2l0ZW0tPm5vZGUsICZyb290X3N0YWJsZV90cmVlKTsKLQkJCQlrc21fcGFnZXNfc2hhcmVkLS07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgcm1hcF9pdGVtICpwcmV2X2l0ZW0gPSBybWFwX2l0ZW0tPnByZXY7CisJCXN0YWJsZV9ub2RlID0gcm1hcF9pdGVtLT5oZWFkOworCQlwYWdlID0gZ2V0X2tzbV9wYWdlKHN0YWJsZV9ub2RlKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXQ7CiAKLQkJCUJVR19PTihwcmV2X2l0ZW0tPm5leHQgIT0gcm1hcF9pdGVtKTsKLQkJCXByZXZfaXRlbS0+bmV4dCA9IG5leHRfaXRlbTsKLQkJCWlmIChuZXh0X2l0ZW0pIHsKLQkJCQlCVUdfT04obmV4dF9pdGVtLT5wcmV2ICE9IHJtYXBfaXRlbSk7Ci0JCQkJbmV4dF9pdGVtLT5wcmV2ID0gcm1hcF9pdGVtLT5wcmV2OwotCQkJfQorCQlsb2NrX3BhZ2UocGFnZSk7CisJCWhsaXN0X2RlbCgmcm1hcF9pdGVtLT5obGlzdCk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwdXRfcGFnZShwYWdlKTsKKworCQlpZiAoc3RhYmxlX25vZGUtPmhsaXN0LmZpcnN0KQogCQkJa3NtX3BhZ2VzX3NoYXJpbmctLTsKLQkJfQorCQllbHNlCisJCQlrc21fcGFnZXNfc2hhcmVkLS07CiAKLQkJcm1hcF9pdGVtLT5uZXh0ID0gTlVMTDsKKwkJZHJvcF9hbm9uX3ZtYShybWFwX2l0ZW0pOworCQlybWFwX2l0ZW0tPmFkZHJlc3MgJj0gUEFHRV9NQVNLOwogCi0JfSBlbHNlIGlmIChybWFwX2l0ZW0tPmFkZHJlc3MgJiBOT0RFX0ZMQUcpIHsKKwl9IGVsc2UgaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyAmIFVOU1RBQkxFX0ZMQUcpIHsKIAkJdW5zaWduZWQgY2hhciBhZ2U7CiAJCS8qCiAJCSAqIFVzdWFsbHkga3NtZCBjYW4gYW5kIG11c3Qgc2tpcCB0aGUgcmJfZXJhc2UsIGJlY2F1c2UKQEAgLTQ2NywyNCArNTc0LDIxIEBACiAJCUJVR19PTihhZ2UgPiAxKTsKIAkJaWYgKCFhZ2UpCiAJCQlyYl9lcmFzZSgmcm1hcF9pdGVtLT5ub2RlLCAmcm9vdF91bnN0YWJsZV90cmVlKTsKKwogCQlrc21fcGFnZXNfdW5zaGFyZWQtLTsKKwkJcm1hcF9pdGVtLT5hZGRyZXNzICY9IFBBR0VfTUFTSzsKIAl9Ci0KLQlybWFwX2l0ZW0tPmFkZHJlc3MgJj0gUEFHRV9NQVNLOwotCitvdXQ6CiAJY29uZF9yZXNjaGVkKCk7CQkvKiB3ZSdyZSBjYWxsZWQgZnJvbSBtYW55IGxvbmcgbG9vcHMgKi8KIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMoc3RydWN0IG1tX3Nsb3QgKm1tX3Nsb3QsCi0JCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmN1cikKKwkJCQkgICAgICAgc3RydWN0IHJtYXBfaXRlbSAqKnJtYXBfbGlzdCkKIHsKLQlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07Ci0KLQl3aGlsZSAoY3VyICE9ICZtbV9zbG90LT5ybWFwX2xpc3QpIHsKLQkJcm1hcF9pdGVtID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOwotCQljdXIgPSBjdXItPm5leHQ7CisJd2hpbGUgKCpybWFwX2xpc3QpIHsKKwkJc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtID0gKnJtYXBfbGlzdDsKKwkJKnJtYXBfbGlzdCA9IHJtYXBfaXRlbS0+cm1hcF9saXN0OwogCQlyZW1vdmVfcm1hcF9pdGVtX2Zyb21fdHJlZShybWFwX2l0ZW0pOwotCQlsaXN0X2RlbCgmcm1hcF9pdGVtLT5saW5rKTsKIAkJZnJlZV9ybWFwX2l0ZW0ocm1hcF9pdGVtKTsKIAl9CiB9CkBAIC01NTAsNyArNjU0LDcgQEAKIAkJCQlnb3RvIGVycm9yOwogCQl9CiAKLQkJcmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMobW1fc2xvdCwgbW1fc2xvdC0+cm1hcF9saXN0Lm5leHQpOworCQlyZW1vdmVfdHJhaWxpbmdfcm1hcF9pdGVtcyhtbV9zbG90LCAmbW1fc2xvdC0+cm1hcF9saXN0KTsKIAogCQlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CiAJCWtzbV9zY2FuLm1tX3Nsb3QgPSBsaXN0X2VudHJ5KG1tX3Nsb3QtPm1tX2xpc3QubmV4dCwKQEAgLTY0Niw3ICs3NTAsNyBAQAogCQkgKiBDaGVjayB0aGF0IG5vIE9fRElSRUNUIG9yIHNpbWlsYXIgSS9PIGlzIGluIHByb2dyZXNzIG9uIHRoZQogCQkgKiBwYWdlCiAJCSAqLwotCQlpZiAoKHBhZ2VfbWFwY291bnQocGFnZSkgKyAyICsgc3dhcHBlZCkgIT0gcGFnZV9jb3VudChwYWdlKSkgeworCQlpZiAocGFnZV9tYXBjb3VudChwYWdlKSArIDEgKyBzd2FwcGVkICE9IHBhZ2VfY291bnQocGFnZSkpIHsKIAkJCXNldF9wdGVfYXRfbm90aWZ5KG1tLCBhZGRyLCBwdGVwLCBlbnRyeSk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KQEAgLTY2NCwxNSArNzY4LDE1IEBACiAKIC8qKgogICogcmVwbGFjZV9wYWdlIC0gcmVwbGFjZSBwYWdlIGluIHZtYSBieSBuZXcga3NtIHBhZ2UKLSAqIEB2bWE6ICAgICAgdm1hIHRoYXQgaG9sZHMgdGhlIHB0ZSBwb2ludGluZyB0byBvbGRwYWdlCi0gKiBAb2xkcGFnZTogIHRoZSBwYWdlIHdlIGFyZSByZXBsYWNpbmcgYnkgbmV3cGFnZQotICogQG5ld3BhZ2U6ICB0aGUga3NtIHBhZ2Ugd2UgcmVwbGFjZSBvbGRwYWdlIGJ5CisgKiBAdm1hOiAgICAgIHZtYSB0aGF0IGhvbGRzIHRoZSBwdGUgcG9pbnRpbmcgdG8gcGFnZQorICogQHBhZ2U6ICAgICB0aGUgcGFnZSB3ZSBhcmUgcmVwbGFjaW5nIGJ5IGtwYWdlCisgKiBAa3BhZ2U6ICAgIHRoZSBrc20gcGFnZSB3ZSByZXBsYWNlIHBhZ2UgYnkKICAqIEBvcmlnX3B0ZTogdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBwdGUKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVGQVVMVCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHJlcGxhY2VfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKm9sZHBhZ2UsCi0JCQlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgcHRlX3Qgb3JpZ19wdGUpCitzdGF0aWMgaW50IHJlcGxhY2VfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQlzdHJ1Y3QgcGFnZSAqa3BhZ2UsIHB0ZV90IG9yaWdfcHRlKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlwZ2RfdCAqcGdkOwpAQCAtNjgxLDEyICs3ODUsOSBAQAogCXB0ZV90ICpwdGVwOwogCXNwaW5sb2NrX3QgKnB0bDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JcGdwcm90X3QgcHJvdDsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAotCXByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MgJiB+Vk1fV1JJVEUpOwotCi0JYWRkciA9IHBhZ2VfYWRkcmVzc19pbl92bWEob2xkcGFnZSwgdm1hKTsKKwlhZGRyID0gcGFnZV9hZGRyZXNzX2luX3ZtYShwYWdlLCB2bWEpOwogCWlmIChhZGRyID09IC1FRkFVTFQpCiAJCWdvdG8gb3V0OwogCkBAIC03MDgsMTUgKzgwOSwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlnZXRfcGFnZShuZXdwYWdlKTsKLQlwYWdlX2FkZF9rc21fcm1hcChuZXdwYWdlKTsKKwlnZXRfcGFnZShrcGFnZSk7CisJcGFnZV9hZGRfYW5vbl9ybWFwKGtwYWdlLCB2bWEsIGFkZHIpOwogCiAJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4oKnB0ZXApKTsKIAlwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkciwgcHRlcCk7Ci0Jc2V0X3B0ZV9hdF9ub3RpZnkobW0sIGFkZHIsIHB0ZXAsIG1rX3B0ZShuZXdwYWdlLCBwcm90KSk7CisJc2V0X3B0ZV9hdF9ub3RpZnkobW0sIGFkZHIsIHB0ZXAsIG1rX3B0ZShrcGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpKTsKIAotCXBhZ2VfcmVtb3ZlX3JtYXAob2xkcGFnZSk7Ci0JcHV0X3BhZ2Uob2xkcGFnZSk7CisJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKKwlwdXRfcGFnZShwYWdlKTsKIAogCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKIAllcnIgPSAwOwpAQCAtNzI2LDMyICs4MjcsMjcgQEAKIAogLyoKICAqIHRyeV90b19tZXJnZV9vbmVfcGFnZSAtIHRha2UgdHdvIHBhZ2VzIGFuZCBtZXJnZSB0aGVtIGludG8gb25lCi0gKiBAdm1hOiB0aGUgdm1hIHRoYXQgaG9sZCB0aGUgcHRlIHBvaW50aW5nIGludG8gb2xkcGFnZQotICogQG9sZHBhZ2U6IHRoZSBwYWdlIHRoYXQgd2Ugd2FudCB0byByZXBsYWNlIHdpdGggbmV3cGFnZQotICogQG5ld3BhZ2U6IHRoZSBwYWdlIHRoYXQgd2Ugd2FudCB0byBtYXAgaW5zdGVhZCBvZiBvbGRwYWdlCi0gKgotICogTm90ZToKLSAqIG9sZHBhZ2Ugc2hvdWxkIGJlIGEgUGFnZUFub24gcGFnZSwgd2hpbGUgbmV3cGFnZSBzaG91bGQgYmUgYSBQYWdlS3NtIHBhZ2UsCi0gKiBvciBhIG5ld2x5IGFsbG9jYXRlZCBrZXJuZWwgcGFnZSB3aGljaCBwYWdlX2FkZF9rc21fcm1hcCB3aWxsIG1ha2UgUGFnZUtzbS4KKyAqIEB2bWE6IHRoZSB2bWEgdGhhdCBob2xkcyB0aGUgcHRlIHBvaW50aW5nIHRvIHBhZ2UKKyAqIEBwYWdlOiB0aGUgUGFnZUFub24gcGFnZSB0aGF0IHdlIHdhbnQgdG8gcmVwbGFjZSB3aXRoIGtwYWdlCisgKiBAa3BhZ2U6IHRoZSBQYWdlS3NtIHBhZ2UgdGhhdCB3ZSB3YW50IHRvIG1hcCBpbnN0ZWFkIG9mIHBhZ2UsCisgKiAgICAgICAgIG9yIE5VTEwgdGhlIGZpcnN0IHRpbWUgd2hlbiB3ZSB3YW50IHRvIHVzZSBwYWdlIGFzIGtwYWdlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBwYWdlcyB3ZXJlIG1lcmdlZCwgLUVGQVVMVCBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX29uZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSBzdHJ1Y3QgcGFnZSAqb2xkcGFnZSwKLQkJCQkgc3RydWN0IHBhZ2UgKm5ld3BhZ2UpCisJCQkJIHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqa3BhZ2UpCiB7CiAJcHRlX3Qgb3JpZ19wdGUgPSBfX3B0ZSgwKTsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAorCWlmIChwYWdlID09IGtwYWdlKQkJCS8qIGtzbSBwYWdlIGZvcmtlZCAqLworCQlyZXR1cm4gMDsKKwogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9NRVJHRUFCTEUpKQogCQlnb3RvIG91dDsKLQotCWlmICghUGFnZUFub24ob2xkcGFnZSkpCisJaWYgKCFQYWdlQW5vbihwYWdlKSkKIAkJZ290byBvdXQ7CiAKLQlnZXRfcGFnZShuZXdwYWdlKTsKLQlnZXRfcGFnZShvbGRwYWdlKTsKLQogCS8qCiAJICogV2UgbmVlZCB0aGUgcGFnZSBsb2NrIHRvIHJlYWQgYSBzdGFibGUgUGFnZVN3YXBDYWNoZSBpbgogCSAqIHdyaXRlX3Byb3RlY3RfcGFnZSgpLiAgV2UgdXNlIHRyeWxvY2tfcGFnZSgpIGluc3RlYWQgb2YKQEAgLTc1OSwyNiArODU1LDM5IEBACiAJICogcHJlZmVyIHRvIGNvbnRpbnVlIHNjYW5uaW5nIGFuZCBtZXJnaW5nIGRpZmZlcmVudCBwYWdlcywKIAkgKiB0aGVuIGNvbWUgYmFjayB0byB0aGlzIHBhZ2Ugd2hlbiBpdCBpcyB1bmxvY2tlZC4KIAkgKi8KLQlpZiAoIXRyeWxvY2tfcGFnZShvbGRwYWdlKSkKLQkJZ290byBvdXRfcHV0cGFnZTsKKwlpZiAoIXRyeWxvY2tfcGFnZShwYWdlKSkKKwkJZ290byBvdXQ7CiAJLyoKIAkgKiBJZiB0aGlzIGFub255bW91cyBwYWdlIGlzIG1hcHBlZCBvbmx5IGhlcmUsIGl0cyBwdGUgbWF5IG5lZWQKIAkgKiB0byBiZSB3cml0ZS1wcm90ZWN0ZWQuICBJZiBpdCdzIG1hcHBlZCBlbHNld2hlcmUsIGFsbCBvZiBpdHMKIAkgKiBwdGVzIGFyZSBuZWNlc3NhcmlseSBhbHJlYWR5IHdyaXRlLXByb3RlY3RlZC4gIEJ1dCBpbiBlaXRoZXIKIAkgKiBjYXNlLCB3ZSBuZWVkIHRvIGxvY2sgYW5kIGNoZWNrIHBhZ2VfY291bnQgaXMgbm90IHJhaXNlZC4KIAkgKi8KLQlpZiAod3JpdGVfcHJvdGVjdF9wYWdlKHZtYSwgb2xkcGFnZSwgJm9yaWdfcHRlKSkgewotCQl1bmxvY2tfcGFnZShvbGRwYWdlKTsKLQkJZ290byBvdXRfcHV0cGFnZTsKKwlpZiAod3JpdGVfcHJvdGVjdF9wYWdlKHZtYSwgcGFnZSwgJm9yaWdfcHRlKSA9PSAwKSB7CisJCWlmICgha3BhZ2UpIHsKKwkJCS8qCisJCQkgKiBXaGlsZSB3ZSBob2xkIHBhZ2UgbG9jaywgdXBncmFkZSBwYWdlIGZyb20KKwkJCSAqIFBhZ2VBbm9uK2Fub25fdm1hIHRvIFBhZ2VLc20rTlVMTCBzdGFibGVfbm9kZToKKwkJCSAqIHN0YWJsZV90cmVlX2luc2VydCgpIHdpbGwgdXBkYXRlIHN0YWJsZV9ub2RlLgorCQkJICovCisJCQlzZXRfcGFnZV9zdGFibGVfbm9kZShwYWdlLCBOVUxMKTsKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwkJCWVyciA9IDA7CisJCX0gZWxzZSBpZiAocGFnZXNfaWRlbnRpY2FsKHBhZ2UsIGtwYWdlKSkKKwkJCWVyciA9IHJlcGxhY2VfcGFnZSh2bWEsIHBhZ2UsIGtwYWdlLCBvcmlnX3B0ZSk7CiAJfQotCXVubG9ja19wYWdlKG9sZHBhZ2UpOwogCi0JaWYgKHBhZ2VzX2lkZW50aWNhbChvbGRwYWdlLCBuZXdwYWdlKSkKLQkJZXJyID0gcmVwbGFjZV9wYWdlKHZtYSwgb2xkcGFnZSwgbmV3cGFnZSwgb3JpZ19wdGUpOworCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYga3BhZ2UgJiYgIWVycikgeworCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQlpZiAoIVBhZ2VNbG9ja2VkKGtwYWdlKSkgeworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlsb2NrX3BhZ2Uoa3BhZ2UpOworCQkJbWxvY2tfdm1hX3BhZ2Uoa3BhZ2UpOworCQkJcGFnZSA9IGtwYWdlOwkJLyogZm9yIGZpbmFsIHVubG9jayAqLworCQl9CisJfQogCi1vdXRfcHV0cGFnZToKLQlwdXRfcGFnZShvbGRwYWdlKTsKLQlwdXRfcGFnZShuZXdwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzg2LDI2ICs4OTUsMzEgQEAKIC8qCiAgKiB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSAtIGxpa2UgdHJ5X3RvX21lcmdlX3R3b19wYWdlcywKICAqIGJ1dCBubyBuZXcga2VybmVsIHBhZ2UgaXMgYWxsb2NhdGVkOiBrcGFnZSBtdXN0IGFscmVhZHkgYmUgYSBrc20gcGFnZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgcGFnZXMgd2VyZSBtZXJnZWQsIC1FRkFVTFQgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tMSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIxLAotCQkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlMSwKLQkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqa3BhZ2UpCitzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmtwYWdlKQogeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcm1hcF9pdGVtLT5tbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAotCWRvd25fcmVhZCgmbW0xLT5tbWFwX3NlbSk7Ci0JaWYgKGtzbV90ZXN0X2V4aXQobW0xKSkKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJaWYgKGtzbV90ZXN0X2V4aXQobW0pKQorCQlnb3RvIG91dDsKKwl2bWEgPSBmaW5kX3ZtYShtbSwgcm1hcF9pdGVtLT5hZGRyZXNzKTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gcm1hcF9pdGVtLT5hZGRyZXNzKQogCQlnb3RvIG91dDsKIAotCXZtYSA9IGZpbmRfdm1hKG1tMSwgYWRkcjEpOwotCWlmICghdm1hIHx8IHZtYS0+dm1fc3RhcnQgPiBhZGRyMSkKKwllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLCBrcGFnZSk7CisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlMSwga3BhZ2UpOworCS8qIE11c3QgZ2V0IHJlZmVyZW5jZSB0byBhbm9uX3ZtYSB3aGlsZSBzdGlsbCBob2xkaW5nIG1tYXBfc2VtICovCisJaG9sZF9hbm9uX3ZtYShybWFwX2l0ZW0sIHZtYS0+YW5vbl92bWEpOwogb3V0OgotCXVwX3JlYWQoJm1tMS0+bW1hcF9zZW0pOworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODEzLDEwOSArOTI3LDczIEBACiAgKiB0cnlfdG9fbWVyZ2VfdHdvX3BhZ2VzIC0gdGFrZSB0d28gaWRlbnRpY2FsIHBhZ2VzIGFuZCBwcmVwYXJlIHRoZW0KICAqIHRvIGJlIG1lcmdlZCBpbnRvIG9uZSBwYWdlLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHdlIHN1Y2Nlc3NmdWxseSBtYXBwZWQgdHdvIGlkZW50aWNhbCBwYWdlcwotICogaW50byBvbmUgcGFnZSwgLUVGQVVMVCBvdGhlcndpc2UuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGtwYWdlIGlmIHdlIHN1Y2Nlc3NmdWxseSBtZXJnZWQgdHdvIGlkZW50aWNhbAorICogcGFnZXMgaW50byBvbmUga3NtIHBhZ2UsIE5VTEwgb3RoZXJ3aXNlLgogICoKLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBrZXJuZWwgcGFnZTogaWYgb25lIG9mIHRoZSBwYWdlcworICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gdXBncmFkZXMgcGFnZSB0byBrc20gcGFnZTogaWYgb25lIG9mIHRoZSBwYWdlcwogICogaXMgYWxyZWFkeSBhIGtzbSBwYWdlLCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZSBzaG91bGQgYmUgdXNlZC4KICAqLwotc3RhdGljIGludCB0cnlfdG9fbWVyZ2VfdHdvX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tMSwgdW5zaWduZWQgbG9uZyBhZGRyMSwKLQkJCQkgIHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IG1tX3N0cnVjdCAqbW0yLAotCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyMiwgc3RydWN0IHBhZ2UgKnBhZ2UyKQorc3RhdGljIHN0cnVjdCBwYWdlICp0cnlfdG9fbWVyZ2VfdHdvX3BhZ2VzKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgIHN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtLAorCQkJCQkgICBzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlKQogewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBwYWdlICprcGFnZTsKLQlpbnQgZXJyID0gLUVGQVVMVDsKKwlpbnQgZXJyOwogCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBzdGFibGUgdHJlZQotCSAqIGlzIHRoZSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRoYXQgd2UgaG9sZC4KLQkgKi8KLQlpZiAoa3NtX21heF9rZXJuZWxfcGFnZXMgJiYKLQkgICAga3NtX21heF9rZXJuZWxfcGFnZXMgPD0ga3NtX3BhZ2VzX3NoYXJlZCkKLQkJcmV0dXJuIGVycjsKLQotCWtwYWdlID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIpOwotCWlmICgha3BhZ2UpCi0JCXJldHVybiBlcnI7Ci0KLQlkb3duX3JlYWQoJm1tMS0+bW1hcF9zZW0pOwotCWlmIChrc21fdGVzdF9leGl0KG1tMSkpIHsKLQkJdXBfcmVhZCgmbW0xLT5tbWFwX3NlbSk7Ci0JCWdvdG8gb3V0OwotCX0KLQl2bWEgPSBmaW5kX3ZtYShtbTEsIGFkZHIxKTsKLQlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcjEpIHsKLQkJdXBfcmVhZCgmbW0xLT5tbWFwX3NlbSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWNvcHlfdXNlcl9oaWdocGFnZShrcGFnZSwgcGFnZTEsIGFkZHIxLCB2bWEpOwotCWVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UxLCBrcGFnZSk7Ci0JdXBfcmVhZCgmbW0xLT5tbWFwX3NlbSk7Ci0KKwllcnIgPSB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShybWFwX2l0ZW0sIHBhZ2UsIE5VTEwpOwogCWlmICghZXJyKSB7Ci0JCWVyciA9IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKG1tMiwgYWRkcjIsIHBhZ2UyLCBrcGFnZSk7CisJCWVyciA9IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHRyZWVfcm1hcF9pdGVtLAorCQkJCQkJCXRyZWVfcGFnZSwgcGFnZSk7CiAJCS8qCiAJCSAqIElmIHRoYXQgZmFpbHMsIHdlIGhhdmUgYSBrc20gcGFnZSB3aXRoIG9ubHkgb25lIHB0ZQogCQkgKiBwb2ludGluZyB0byBpdDogc28gYnJlYWsgaXQuCiAJCSAqLwogCQlpZiAoZXJyKQotCQkJYnJlYWtfY293KG1tMSwgYWRkcjEpOworCQkJYnJlYWtfY293KHJtYXBfaXRlbSk7CiAJfQotb3V0OgotCXB1dF9wYWdlKGtwYWdlKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBlcnIgPyBOVUxMIDogcGFnZTsKIH0KIAogLyoKLSAqIHN0YWJsZV90cmVlX3NlYXJjaCAtIHNlYXJjaCBwYWdlIGluc2lkZSB0aGUgc3RhYmxlIHRyZWUKLSAqIEBwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIGFyZSBzZWFyY2hpbmcgaWRlbnRpY2FsIHBhZ2VzIHRvLgotICogQHBhZ2UyOiBwb2ludGVyIGludG8gaWRlbnRpY2FsIHBhZ2UgdGhhdCB3ZSBhcmUgaG9sZGluZyBpbnNpZGUgdGhlIHN0YWJsZQotICoJICAgdHJlZSB0aGF0IHdlIGhhdmUgZm91bmQuCi0gKiBAcm1hcF9pdGVtOiB0aGUgcmV2ZXJzZSBtYXBwaW5nIGl0ZW0KKyAqIHN0YWJsZV90cmVlX3NlYXJjaCAtIHNlYXJjaCBmb3IgcGFnZSBpbnNpZGUgdGhlIHN0YWJsZSB0cmVlCiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlcmUgaXMgYSBwYWdlIGluc2lkZSB0aGUgc3RhYmxlIHRyZWUKICAqIHdpdGggaWRlbnRpY2FsIGNvbnRlbnQgdG8gdGhlIHBhZ2UgdGhhdCB3ZSBhcmUgc2Nhbm5pbmcgcmlnaHQgbm93LgogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJuIHJtYXBfaXRlbSBwb2ludGVyIHRvIHRoZSBpZGVudGljYWwgaXRlbSBpZiBmb3VuZCwKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhYmxlIHRyZWUgbm9kZSBvZiBpZGVudGljYWwgY29udGVudCBpZiBmb3VuZCwKICAqIE5VTEwgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgc3RydWN0IHJtYXBfaXRlbSAqc3RhYmxlX3RyZWVfc2VhcmNoKHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkgICAgc3RydWN0IHBhZ2UgKipwYWdlMiwKLQkJCQkJICAgIHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqc3RhYmxlX3RyZWVfc2VhcmNoKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlID0gcm9vdF9zdGFibGVfdHJlZS5yYl9ub2RlOworCXN0cnVjdCBzdGFibGVfbm9kZSAqc3RhYmxlX25vZGU7CisKKwlzdGFibGVfbm9kZSA9IHBhZ2Vfc3RhYmxlX25vZGUocGFnZSk7CisJaWYgKHN0YWJsZV9ub2RlKSB7CQkJLyoga3NtIHBhZ2UgZm9ya2VkICovCisJCWdldF9wYWdlKHBhZ2UpOworCQlyZXR1cm4gcGFnZTsKKwl9CiAKIAl3aGlsZSAobm9kZSkgewotCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSwgKm5leHRfcm1hcF9pdGVtOworCQlzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlOwogCQlpbnQgcmV0OwogCi0JCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7Ci0JCXdoaWxlICh0cmVlX3JtYXBfaXRlbSkgewotCQkJQlVHX09OKCFpbl9zdGFibGVfdHJlZSh0cmVlX3JtYXBfaXRlbSkpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlwYWdlMlswXSA9IGdldF9rc21fcGFnZSh0cmVlX3JtYXBfaXRlbSk7Ci0JCQlpZiAocGFnZTJbMF0pCi0JCQkJYnJlYWs7Ci0JCQluZXh0X3JtYXBfaXRlbSA9IHRyZWVfcm1hcF9pdGVtLT5uZXh0OwotCQkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUodHJlZV9ybWFwX2l0ZW0pOwotCQkJdHJlZV9ybWFwX2l0ZW0gPSBuZXh0X3JtYXBfaXRlbTsKLQkJfQotCQlpZiAoIXRyZWVfcm1hcF9pdGVtKQorCQljb25kX3Jlc2NoZWQoKTsKKwkJc3RhYmxlX25vZGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qgc3RhYmxlX25vZGUsIG5vZGUpOworCQl0cmVlX3BhZ2UgPSBnZXRfa3NtX3BhZ2Uoc3RhYmxlX25vZGUpOworCQlpZiAoIXRyZWVfcGFnZSkKIAkJCXJldHVybiBOVUxMOwogCi0JCXJldCA9IG1lbWNtcF9wYWdlcyhwYWdlLCBwYWdlMlswXSk7CisJCXJldCA9IG1lbWNtcF9wYWdlcyhwYWdlLCB0cmVlX3BhZ2UpOwogCiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlwdXRfcGFnZShwYWdlMlswXSk7CisJCQlwdXRfcGFnZSh0cmVlX3BhZ2UpOwogCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CiAJCX0gZWxzZSBpZiAocmV0ID4gMCkgewotCQkJcHV0X3BhZ2UocGFnZTJbMF0pOworCQkJcHV0X3BhZ2UodHJlZV9wYWdlKTsKIAkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiB0cmVlX3JtYXBfaXRlbTsKLQkJfQorCQl9IGVsc2UKKwkJCXJldHVybiB0cmVlX3BhZ2U7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC05MjUsMzggKzEwMDMsMjYgQEAKICAqIHN0YWJsZV90cmVlX2luc2VydCAtIGluc2VydCBybWFwX2l0ZW0gcG9pbnRpbmcgdG8gbmV3IGtzbSBwYWdlCiAgKiBpbnRvIHRoZSBzdGFibGUgdHJlZS4KICAqCi0gKiBAcGFnZTogdGhlIHBhZ2UgdGhhdCB3ZSBhcmUgc2VhcmNoaW5nIGlkZW50aWNhbCBwYWdlIHRvIGluc2lkZSB0aGUgc3RhYmxlCi0gKgkgIHRyZWUuCi0gKiBAcm1hcF9pdGVtOiBwb2ludGVyIHRvIHRoZSByZXZlcnNlIG1hcHBpbmcgaXRlbS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcm1hcF9pdGVtIGlmIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGFibGUgdHJlZSBub2RlIGp1c3QgYWxsb2NhdGVkIG9uIHN1Y2Nlc3MsCisgKiBOVUxMIG90aGVyd2lzZS4KICAqLwotc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnN0YWJsZV90cmVlX2luc2VydChzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJICAgIHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3N0YXRpYyBzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV90cmVlX2luc2VydChzdHJ1Y3QgcGFnZSAqa3BhZ2UpCiB7CiAJc3RydWN0IHJiX25vZGUgKipuZXcgPSAmcm9vdF9zdGFibGVfdHJlZS5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBzdGFibGVfbm9kZSAqc3RhYmxlX25vZGU7CiAKIAl3aGlsZSAoKm5ldykgewotCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSwgKm5leHRfcm1hcF9pdGVtOwogCQlzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlOwogCQlpbnQgcmV0OwogCi0JCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkoKm5ldywgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7Ci0JCXdoaWxlICh0cmVlX3JtYXBfaXRlbSkgewotCQkJQlVHX09OKCFpbl9zdGFibGVfdHJlZSh0cmVlX3JtYXBfaXRlbSkpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQl0cmVlX3BhZ2UgPSBnZXRfa3NtX3BhZ2UodHJlZV9ybWFwX2l0ZW0pOwotCQkJaWYgKHRyZWVfcGFnZSkKLQkJCQlicmVhazsKLQkJCW5leHRfcm1hcF9pdGVtID0gdHJlZV9ybWFwX2l0ZW0tPm5leHQ7Ci0JCQlyZW1vdmVfcm1hcF9pdGVtX2Zyb21fdHJlZSh0cmVlX3JtYXBfaXRlbSk7Ci0JCQl0cmVlX3JtYXBfaXRlbSA9IG5leHRfcm1hcF9pdGVtOwotCQl9Ci0JCWlmICghdHJlZV9ybWFwX2l0ZW0pCisJCWNvbmRfcmVzY2hlZCgpOworCQlzdGFibGVfbm9kZSA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBzdGFibGVfbm9kZSwgbm9kZSk7CisJCXRyZWVfcGFnZSA9IGdldF9rc21fcGFnZShzdGFibGVfbm9kZSk7CisJCWlmICghdHJlZV9wYWdlKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHRyZWVfcGFnZSk7CisJCXJldCA9IG1lbWNtcF9wYWdlcyhrcGFnZSwgdHJlZV9wYWdlKTsKIAkJcHV0X3BhZ2UodHJlZV9wYWdlKTsKIAogCQlwYXJlbnQgPSAqbmV3OwpAQCAtOTc0LDIyICsxMDQwLDI0IEBACiAJCX0KIAl9CiAKLQlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gTk9ERV9GTEFHIHwgU1RBQkxFX0ZMQUc7Ci0Jcm1hcF9pdGVtLT5uZXh0ID0gTlVMTDsKLQlyYl9saW5rX25vZGUoJnJtYXBfaXRlbS0+bm9kZSwgcGFyZW50LCBuZXcpOwotCXJiX2luc2VydF9jb2xvcigmcm1hcF9pdGVtLT5ub2RlLCAmcm9vdF9zdGFibGVfdHJlZSk7CisJc3RhYmxlX25vZGUgPSBhbGxvY19zdGFibGVfbm9kZSgpOworCWlmICghc3RhYmxlX25vZGUpCisJCXJldHVybiBOVUxMOwogCi0Ja3NtX3BhZ2VzX3NoYXJlZCsrOwotCXJldHVybiBybWFwX2l0ZW07CisJcmJfbGlua19ub2RlKCZzdGFibGVfbm9kZS0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmc3RhYmxlX25vZGUtPm5vZGUsICZyb290X3N0YWJsZV90cmVlKTsKKworCUlOSVRfSExJU1RfSEVBRCgmc3RhYmxlX25vZGUtPmhsaXN0KTsKKworCXN0YWJsZV9ub2RlLT5rcGZuID0gcGFnZV90b19wZm4oa3BhZ2UpOworCXNldF9wYWdlX3N0YWJsZV9ub2RlKGtwYWdlLCBzdGFibGVfbm9kZSk7CisKKwlyZXR1cm4gc3RhYmxlX25vZGU7CiB9CiAKIC8qCi0gKiB1bnN0YWJsZV90cmVlX3NlYXJjaF9pbnNlcnQgLSBzZWFyY2ggYW5kIGluc2VydCBpdGVtcyBpbnRvIHRoZSB1bnN0YWJsZSB0cmVlLgotICoKLSAqIEBwYWdlOiB0aGUgcGFnZSB0aGF0IHdlIGFyZSBnb2luZyB0byBzZWFyY2ggZm9yIGlkZW50aWNhbCBwYWdlIG9yIHRvIGluc2VydAotICoJICBpbnRvIHRoZSB1bnN0YWJsZSB0cmVlCi0gKiBAcGFnZTI6IHBvaW50ZXIgaW50byBpZGVudGljYWwgcGFnZSB0aGF0IHdhcyBmb3VuZCBpbnNpZGUgdGhlIHVuc3RhYmxlIHRyZWUKLSAqIEBybWFwX2l0ZW06IHRoZSByZXZlcnNlIG1hcHBpbmcgaXRlbSBvZiBwYWdlCisgKiB1bnN0YWJsZV90cmVlX3NlYXJjaF9pbnNlcnQgLSBzZWFyY2ggZm9yIGlkZW50aWNhbCBwYWdlLAorICogZWxzZSBpbnNlcnQgcm1hcF9pdGVtIGludG8gdGhlIHVuc3RhYmxlIHRyZWUuCiAgKgogICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYSBwYWdlIGluIHRoZSB1bnN0YWJsZSB0cmVlIGlkZW50aWNhbCB0byB0aGUKICAqIHBhZ2UgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQ7IGFuZCBpZiBubyBpZGVudGljYWwgcGFnZSBpcyBmb3VuZCBpbiB0aGUKQEAgLTEwMDEsNDcgKzEwNjksNTAgQEAKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBib3RoIHNlYXJjaGluZyBhbmQgaW5zZXJ0aW5nLCBiZWNhdXNlIHRoZXkgc2hhcmUKICAqIHRoZSBzYW1lIHdhbGtpbmcgYWxnb3JpdGhtIGluIGFuIHJidHJlZS4KICAqLwotc3RhdGljIHN0cnVjdCBybWFwX2l0ZW0gKnVuc3RhYmxlX3RyZWVfc2VhcmNoX2luc2VydChzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCXN0cnVjdCBwYWdlICoqcGFnZTIsCi0JCQkJCQlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0pCitzdGF0aWMKK3N0cnVjdCBybWFwX2l0ZW0gKnVuc3RhYmxlX3RyZWVfc2VhcmNoX2luc2VydChzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW0sCisJCQkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqKnRyZWVfcGFnZXApCisKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICZyb290X3Vuc3RhYmxlX3RyZWUucmJfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAogCXdoaWxlICgqbmV3KSB7CiAJCXN0cnVjdCBybWFwX2l0ZW0gKnRyZWVfcm1hcF9pdGVtOworCQlzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlOwogCQlpbnQgcmV0OwogCiAJCWNvbmRfcmVzY2hlZCgpOwogCQl0cmVlX3JtYXBfaXRlbSA9IHJiX2VudHJ5KCpuZXcsIHN0cnVjdCBybWFwX2l0ZW0sIG5vZGUpOwotCQlwYWdlMlswXSA9IGdldF9tZXJnZWFibGVfcGFnZSh0cmVlX3JtYXBfaXRlbSk7Ci0JCWlmICghcGFnZTJbMF0pCisJCXRyZWVfcGFnZSA9IGdldF9tZXJnZWFibGVfcGFnZSh0cmVlX3JtYXBfaXRlbSk7CisJCWlmICghdHJlZV9wYWdlKQogCQkJcmV0dXJuIE5VTEw7CiAKIAkJLyoKLQkJICogRG9uJ3Qgc3Vic3RpdHV0ZSBhbiB1bnN3YXBwYWJsZSBrc20gcGFnZQotCQkgKiBqdXN0IGZvciBvbmUgZ29vZCBzd2FwcGFibGUgZm9ya2VkIHBhZ2UuCisJCSAqIERvbid0IHN1YnN0aXR1dGUgYSBrc20gcGFnZSBmb3IgYSBmb3JrZWQgcGFnZS4KIAkJICovCi0JCWlmIChwYWdlID09IHBhZ2UyWzBdKSB7Ci0JCQlwdXRfcGFnZShwYWdlMlswXSk7CisJCWlmIChwYWdlID09IHRyZWVfcGFnZSkgeworCQkJcHV0X3BhZ2UodHJlZV9wYWdlKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKLQkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHBhZ2UyWzBdKTsKKwkJcmV0ID0gbWVtY21wX3BhZ2VzKHBhZ2UsIHRyZWVfcGFnZSk7CiAKIAkJcGFyZW50ID0gKm5ldzsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXB1dF9wYWdlKHBhZ2UyWzBdKTsKKwkJCXB1dF9wYWdlKHRyZWVfcGFnZSk7CiAJCQluZXcgPSAmcGFyZW50LT5yYl9sZWZ0OwogCQl9IGVsc2UgaWYgKHJldCA+IDApIHsKLQkJCXB1dF9wYWdlKHBhZ2UyWzBdKTsKKwkJCXB1dF9wYWdlKHRyZWVfcGFnZSk7CiAJCQluZXcgPSAmcGFyZW50LT5yYl9yaWdodDsKIAkJfSBlbHNlIHsKKwkJCSp0cmVlX3BhZ2VwID0gdHJlZV9wYWdlOwogCQkJcmV0dXJuIHRyZWVfcm1hcF9pdGVtOwogCQl9CiAJfQogCi0Jcm1hcF9pdGVtLT5hZGRyZXNzIHw9IE5PREVfRkxBRzsKKwlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gVU5TVEFCTEVfRkxBRzsKIAlybWFwX2l0ZW0tPmFkZHJlc3MgfD0gKGtzbV9zY2FuLnNlcW5yICYgU0VRTlJfTUFTSyk7CiAJcmJfbGlua19ub2RlKCZybWFwX2l0ZW0tPm5vZGUsIHBhcmVudCwgbmV3KTsKIAlyYl9pbnNlcnRfY29sb3IoJnJtYXBfaXRlbS0+bm9kZSwgJnJvb3RfdW5zdGFibGVfdHJlZSk7CkBAIC0xMDU2LDE4ICsxMTI3LDE2IEBACiAgKiB0aGUgc2FtZSBrc20gcGFnZS4KICAqLwogc3RhdGljIHZvaWQgc3RhYmxlX3RyZWVfYXBwZW5kKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSwKLQkJCSAgICAgICBzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbSkKKwkJCSAgICAgICBzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlKQogewotCXJtYXBfaXRlbS0+bmV4dCA9IHRyZWVfcm1hcF9pdGVtLT5uZXh0OwotCXJtYXBfaXRlbS0+cHJldiA9IHRyZWVfcm1hcF9pdGVtOwotCi0JaWYgKHRyZWVfcm1hcF9pdGVtLT5uZXh0KQotCQl0cmVlX3JtYXBfaXRlbS0+bmV4dC0+cHJldiA9IHJtYXBfaXRlbTsKLQotCXRyZWVfcm1hcF9pdGVtLT5uZXh0ID0gcm1hcF9pdGVtOworCXJtYXBfaXRlbS0+aGVhZCA9IHN0YWJsZV9ub2RlOwogCXJtYXBfaXRlbS0+YWRkcmVzcyB8PSBTVEFCTEVfRkxBRzsKKwlobGlzdF9hZGRfaGVhZCgmcm1hcF9pdGVtLT5obGlzdCwgJnN0YWJsZV9ub2RlLT5obGlzdCk7CiAKLQlrc21fcGFnZXNfc2hhcmluZysrOworCWlmIChybWFwX2l0ZW0tPmhsaXN0Lm5leHQpCisJCWtzbV9wYWdlc19zaGFyaW5nKys7CisJZWxzZQorCQlrc21fcGFnZXNfc2hhcmVkKys7CiB9CiAKIC8qCkBAIC0xMDgxLDQ5ICsxMTUwLDM3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNtcF9hbmRfbWVyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtKQogewotCXN0cnVjdCBwYWdlICpwYWdlMlsxXTsKIAlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbTsKKwlzdHJ1Y3QgcGFnZSAqdHJlZV9wYWdlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlOworCXN0cnVjdCBwYWdlICprcGFnZTsKIAl1bnNpZ25lZCBpbnQgY2hlY2tzdW07CiAJaW50IGVycjsKIAotCWlmIChpbl9zdGFibGVfdHJlZShybWFwX2l0ZW0pKQotCQlyZW1vdmVfcm1hcF9pdGVtX2Zyb21fdHJlZShybWFwX2l0ZW0pOworCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7CiAKIAkvKiBXZSBmaXJzdCBzdGFydCB3aXRoIHNlYXJjaGluZyB0aGUgcGFnZSBpbnNpZGUgdGhlIHN0YWJsZSB0cmVlICovCi0JdHJlZV9ybWFwX2l0ZW0gPSBzdGFibGVfdHJlZV9zZWFyY2gocGFnZSwgcGFnZTIsIHJtYXBfaXRlbSk7Ci0JaWYgKHRyZWVfcm1hcF9pdGVtKSB7Ci0JCWlmIChwYWdlID09IHBhZ2UyWzBdKQkJCS8qIGZvcmtlZCAqLwotCQkJZXJyID0gMDsKLQkJZWxzZQotCQkJZXJyID0gdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uocm1hcF9pdGVtLT5tbSwKLQkJCQkJCQkgcm1hcF9pdGVtLT5hZGRyZXNzLAotCQkJCQkJCSBwYWdlLCBwYWdlMlswXSk7Ci0JCXB1dF9wYWdlKHBhZ2UyWzBdKTsKLQorCWtwYWdlID0gc3RhYmxlX3RyZWVfc2VhcmNoKHBhZ2UpOworCWlmIChrcGFnZSkgeworCQllcnIgPSB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShybWFwX2l0ZW0sIHBhZ2UsIGtwYWdlKTsKIAkJaWYgKCFlcnIpIHsKIAkJCS8qCiAJCQkgKiBUaGUgcGFnZSB3YXMgc3VjY2Vzc2Z1bGx5IG1lcmdlZDoKIAkJCSAqIGFkZCBpdHMgcm1hcF9pdGVtIHRvIHRoZSBzdGFibGUgdHJlZS4KIAkJCSAqLwotCQkJc3RhYmxlX3RyZWVfYXBwZW5kKHJtYXBfaXRlbSwgdHJlZV9ybWFwX2l0ZW0pOworCQkJbG9ja19wYWdlKGtwYWdlKTsKKwkJCXN0YWJsZV90cmVlX2FwcGVuZChybWFwX2l0ZW0sIHBhZ2Vfc3RhYmxlX25vZGUoa3BhZ2UpKTsKKwkJCXVubG9ja19wYWdlKGtwYWdlKTsKIAkJfQorCQlwdXRfcGFnZShrcGFnZSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgotCSAqIEEga3NtIHBhZ2UgbWlnaHQgaGF2ZSBnb3QgaGVyZSBieSBmb3JrLCBidXQgaXRzIG90aGVyCi0JICogcmVmZXJlbmNlcyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN0YWJsZSB0cmVlLgotCSAqIE9yIGl0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIGEgYnJlYWtfa3NtIHdoaWNoIGZhaWxlZAotCSAqIHdoZW4gdGhlIG1lbV9jZ3JvdXAgaGFkIHJlYWNoZWQgaXRzIGxpbWl0OiB0cnkgYWdhaW4gbm93LgotCSAqLwotCWlmIChQYWdlS3NtKHBhZ2UpKQotCQlicmVha19jb3cocm1hcF9pdGVtLT5tbSwgcm1hcF9pdGVtLT5hZGRyZXNzKTsKLQotCS8qCi0JICogSW4gY2FzZSB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgcGFnZSB3YXMgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IHRpbWUgd2UKLQkgKiBoYXZlIGNhbGN1bGF0ZWQgaXQsIHRoaXMgcGFnZSB0byBiZSBjaGFuZ2VkIGZyZXF1ZWx5LCB0aGVyZWZvcmUgd2UKLQkgKiBkb24ndCB3YW50IHRvIGluc2VydCBpdCB0byB0aGUgdW5zdGFibGUgdHJlZSwgYW5kIHdlIGRvbid0IHdhbnQgdG8KLQkgKiB3YXN0ZSBvdXIgdGltZSB0byBzZWFyY2ggaWYgdGhlcmUgaXMgc29tZXRoaW5nIGlkZW50aWNhbCB0byBpdCB0aGVyZS4KKwkgKiBJZiB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgcGFnZSBoYXMgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IHRpbWUKKwkgKiB3ZSBjYWxjdWxhdGVkIGl0LCB0aGlzIHBhZ2UgaXMgY2hhbmdpbmcgZnJlcXVlbnRseTogdGhlcmVmb3JlIHdlCisJICogZG9uJ3Qgd2FudCB0byBpbnNlcnQgaXQgaW4gdGhlIHVuc3RhYmxlIHRyZWUsIGFuZCB3ZSBkb24ndCB3YW50CisJICogdG8gd2FzdGUgb3VyIHRpbWUgc2VhcmNoaW5nIGZvciBzb21ldGhpbmcgaWRlbnRpY2FsIHRvIGl0IHRoZXJlLgogCSAqLwogCWNoZWNrc3VtID0gY2FsY19jaGVja3N1bShwYWdlKTsKIAlpZiAocm1hcF9pdGVtLT5vbGRjaGVja3N1bSAhPSBjaGVja3N1bSkgewpAQCAtMTEzMSwyMSArMTE4OCwyNyBAQAogCQlyZXR1cm47CiAJfQogCi0JdHJlZV9ybWFwX2l0ZW0gPSB1bnN0YWJsZV90cmVlX3NlYXJjaF9pbnNlcnQocGFnZSwgcGFnZTIsIHJtYXBfaXRlbSk7CisJdHJlZV9ybWFwX2l0ZW0gPQorCQl1bnN0YWJsZV90cmVlX3NlYXJjaF9pbnNlcnQocm1hcF9pdGVtLCBwYWdlLCAmdHJlZV9wYWdlKTsKIAlpZiAodHJlZV9ybWFwX2l0ZW0pIHsKLQkJZXJyID0gdHJ5X3RvX21lcmdlX3R3b19wYWdlcyhybWFwX2l0ZW0tPm1tLAotCQkJCQkgICAgIHJtYXBfaXRlbS0+YWRkcmVzcywgcGFnZSwKLQkJCQkJICAgICB0cmVlX3JtYXBfaXRlbS0+bW0sCi0JCQkJCSAgICAgdHJlZV9ybWFwX2l0ZW0tPmFkZHJlc3MsIHBhZ2UyWzBdKTsKKwkJa3BhZ2UgPSB0cnlfdG9fbWVyZ2VfdHdvX3BhZ2VzKHJtYXBfaXRlbSwgcGFnZSwKKwkJCQkJCXRyZWVfcm1hcF9pdGVtLCB0cmVlX3BhZ2UpOworCQlwdXRfcGFnZSh0cmVlX3BhZ2UpOwogCQkvKgogCQkgKiBBcyBzb29uIGFzIHdlIG1lcmdlIHRoaXMgcGFnZSwgd2Ugd2FudCB0byByZW1vdmUgdGhlCiAJCSAqIHJtYXBfaXRlbSBvZiB0aGUgcGFnZSB3ZSBoYXZlIG1lcmdlZCB3aXRoIGZyb20gdGhlIHVuc3RhYmxlCiAJCSAqIHRyZWUsIGFuZCBpbnNlcnQgaXQgaW5zdGVhZCBhcyBuZXcgbm9kZSBpbiB0aGUgc3RhYmxlIHRyZWUuCiAJCSAqLwotCQlpZiAoIWVycikgewotCQkJcmJfZXJhc2UoJnRyZWVfcm1hcF9pdGVtLT5ub2RlLCAmcm9vdF91bnN0YWJsZV90cmVlKTsKLQkJCXRyZWVfcm1hcF9pdGVtLT5hZGRyZXNzICY9IH5OT0RFX0ZMQUc7Ci0JCQlrc21fcGFnZXNfdW5zaGFyZWQtLTsKKwkJaWYgKGtwYWdlKSB7CisJCQlyZW1vdmVfcm1hcF9pdGVtX2Zyb21fdHJlZSh0cmVlX3JtYXBfaXRlbSk7CisKKwkJCWxvY2tfcGFnZShrcGFnZSk7CisJCQlzdGFibGVfbm9kZSA9IHN0YWJsZV90cmVlX2luc2VydChrcGFnZSk7CisJCQlpZiAoc3RhYmxlX25vZGUpIHsKKwkJCQlzdGFibGVfdHJlZV9hcHBlbmQodHJlZV9ybWFwX2l0ZW0sIHN0YWJsZV9ub2RlKTsKKwkJCQlzdGFibGVfdHJlZV9hcHBlbmQocm1hcF9pdGVtLCBzdGFibGVfbm9kZSk7CisJCQl9CisJCQl1bmxvY2tfcGFnZShrcGFnZSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBmYWlsIHRvIGluc2VydCB0aGUgcGFnZSBpbnRvIHRoZSBzdGFibGUgdHJlZSwKQEAgLTExNTMsMzcgKzEyMTYsMjggQEAKIAkJCSAqIHRvIGEga3NtIHBhZ2UgbGVmdCBvdXRzaWRlIHRoZSBzdGFibGUgdHJlZSwKIAkJCSAqIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBicmVha19jb3cgb24gYm90aC4KIAkJCSAqLwotCQkJaWYgKHN0YWJsZV90cmVlX2luc2VydChwYWdlMlswXSwgdHJlZV9ybWFwX2l0ZW0pKQotCQkJCXN0YWJsZV90cmVlX2FwcGVuZChybWFwX2l0ZW0sIHRyZWVfcm1hcF9pdGVtKTsKLQkJCWVsc2UgewotCQkJCWJyZWFrX2Nvdyh0cmVlX3JtYXBfaXRlbS0+bW0sCi0JCQkJCQl0cmVlX3JtYXBfaXRlbS0+YWRkcmVzcyk7Ci0JCQkJYnJlYWtfY293KHJtYXBfaXRlbS0+bW0sIHJtYXBfaXRlbS0+YWRkcmVzcyk7CisJCQlpZiAoIXN0YWJsZV9ub2RlKSB7CisJCQkJYnJlYWtfY293KHRyZWVfcm1hcF9pdGVtKTsKKwkJCQlicmVha19jb3cocm1hcF9pdGVtKTsKIAkJCX0KIAkJfQotCi0JCXB1dF9wYWdlKHBhZ2UyWzBdKTsKIAl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgcm1hcF9pdGVtICpnZXRfbmV4dF9ybWFwX2l0ZW0oc3RydWN0IG1tX3Nsb3QgKm1tX3Nsb3QsCi0JCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjdXIsCisJCQkJCSAgICBzdHJ1Y3Qgcm1hcF9pdGVtICoqcm1hcF9saXN0LAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbTsKIAotCXdoaWxlIChjdXIgIT0gJm1tX3Nsb3QtPnJtYXBfbGlzdCkgewotCQlybWFwX2l0ZW0gPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IHJtYXBfaXRlbSwgbGluayk7Ci0JCWlmICgocm1hcF9pdGVtLT5hZGRyZXNzICYgUEFHRV9NQVNLKSA9PSBhZGRyKSB7Ci0JCQlpZiAoIWluX3N0YWJsZV90cmVlKHJtYXBfaXRlbSkpCi0JCQkJcmVtb3ZlX3JtYXBfaXRlbV9mcm9tX3RyZWUocm1hcF9pdGVtKTsKKwl3aGlsZSAoKnJtYXBfbGlzdCkgeworCQlybWFwX2l0ZW0gPSAqcm1hcF9saXN0OworCQlpZiAoKHJtYXBfaXRlbS0+YWRkcmVzcyAmIFBBR0VfTUFTSykgPT0gYWRkcikKIAkJCXJldHVybiBybWFwX2l0ZW07Ci0JCX0KIAkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyA+IGFkZHIpCiAJCQlicmVhazsKLQkJY3VyID0gY3VyLT5uZXh0OworCQkqcm1hcF9saXN0ID0gcm1hcF9pdGVtLT5ybWFwX2xpc3Q7CiAJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7Ci0JCWxpc3RfZGVsKCZybWFwX2l0ZW0tPmxpbmspOwogCQlmcmVlX3JtYXBfaXRlbShybWFwX2l0ZW0pOwogCX0KIApAQCAtMTE5Miw3ICsxMjQ2LDggQEAKIAkJLyogSXQgaGFzIGFscmVhZHkgYmVlbiB6ZXJvZWQgKi8KIAkJcm1hcF9pdGVtLT5tbSA9IG1tX3Nsb3QtPm1tOwogCQlybWFwX2l0ZW0tPmFkZHJlc3MgPSBhZGRyOwotCQlsaXN0X2FkZF90YWlsKCZybWFwX2l0ZW0tPmxpbmssIGN1cik7CisJCXJtYXBfaXRlbS0+cm1hcF9saXN0ID0gKnJtYXBfbGlzdDsKKwkJKnJtYXBfbGlzdCA9IHJtYXBfaXRlbTsKIAl9CiAJcmV0dXJuIHJtYXBfaXRlbTsKIH0KQEAgLTEyMTcsOCArMTI3Miw3IEBACiAJCXNwaW5fdW5sb2NrKCZrc21fbW1saXN0X2xvY2spOwogbmV4dF9tbToKIAkJa3NtX3NjYW4uYWRkcmVzcyA9IDA7Ci0JCWtzbV9zY2FuLnJtYXBfaXRlbSA9IGxpc3RfZW50cnkoJnNsb3QtPnJtYXBfbGlzdCwKLQkJCQkJCXN0cnVjdCBybWFwX2l0ZW0sIGxpbmspOworCQlrc21fc2Nhbi5ybWFwX2xpc3QgPSAmc2xvdC0+cm1hcF9saXN0OwogCX0KIAogCW1tID0gc2xvdC0+bW07CkBAIC0xMjQ0LDEwICsxMjk4LDEwIEBACiAJCQkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgKnBhZ2UsIGtzbV9zY2FuLmFkZHJlc3MpOwogCQkJCWZsdXNoX2RjYWNoZV9wYWdlKCpwYWdlKTsKIAkJCQlybWFwX2l0ZW0gPSBnZXRfbmV4dF9ybWFwX2l0ZW0oc2xvdCwKLQkJCQkJa3NtX3NjYW4ucm1hcF9pdGVtLT5saW5rLm5leHQsCi0JCQkJCWtzbV9zY2FuLmFkZHJlc3MpOworCQkJCQlrc21fc2Nhbi5ybWFwX2xpc3QsIGtzbV9zY2FuLmFkZHJlc3MpOwogCQkJCWlmIChybWFwX2l0ZW0pIHsKLQkJCQkJa3NtX3NjYW4ucm1hcF9pdGVtID0gcm1hcF9pdGVtOworCQkJCQlrc21fc2Nhbi5ybWFwX2xpc3QgPQorCQkJCQkJCSZybWFwX2l0ZW0tPnJtYXBfbGlzdDsKIAkJCQkJa3NtX3NjYW4uYWRkcmVzcyArPSBQQUdFX1NJWkU7CiAJCQkJfSBlbHNlCiAJCQkJCXB1dF9wYWdlKCpwYWdlKTsKQEAgLTEyNjMsMTQgKzEzMTcsMTMgQEAKIAogCWlmIChrc21fdGVzdF9leGl0KG1tKSkgewogCQlrc21fc2Nhbi5hZGRyZXNzID0gMDsKLQkJa3NtX3NjYW4ucm1hcF9pdGVtID0gbGlzdF9lbnRyeSgmc2xvdC0+cm1hcF9saXN0LAotCQkJCQkJc3RydWN0IHJtYXBfaXRlbSwgbGluayk7CisJCWtzbV9zY2FuLnJtYXBfbGlzdCA9ICZzbG90LT5ybWFwX2xpc3Q7CiAJfQogCS8qCiAJICogTnVrZSBhbGwgdGhlIHJtYXBfaXRlbXMgdGhhdCBhcmUgYWJvdmUgdGhpcyBjdXJyZW50IHJtYXA6CiAJICogYmVjYXVzZSB0aGVyZSB3ZXJlIG5vIFZNX01FUkdFQUJMRSB2bWFzIHdpdGggc3VjaCBhZGRyZXNzZXMuCiAJICovCi0JcmVtb3ZlX3RyYWlsaW5nX3JtYXBfaXRlbXMoc2xvdCwga3NtX3NjYW4ucm1hcF9pdGVtLT5saW5rLm5leHQpOworCXJlbW92ZV90cmFpbGluZ19ybWFwX2l0ZW1zKHNsb3QsIGtzbV9zY2FuLnJtYXBfbGlzdCk7CiAKIAlzcGluX2xvY2soJmtzbV9tbWxpc3RfbG9jayk7CiAJa3NtX3NjYW4ubW1fc2xvdCA9IGxpc3RfZW50cnkoc2xvdC0+bW1fbGlzdC5uZXh0LApAQCAtMTMyMywxNCArMTM3Niw2IEBACiAJCQlyZXR1cm47CiAJCWlmICghUGFnZUtzbShwYWdlKSB8fCAhaW5fc3RhYmxlX3RyZWUocm1hcF9pdGVtKSkKIAkJCWNtcF9hbmRfbWVyZ2VfcGFnZShwYWdlLCBybWFwX2l0ZW0pOwotCQllbHNlIGlmIChwYWdlX21hcGNvdW50KHBhZ2UpID09IDEpIHsKLQkJCS8qCi0JCQkgKiBSZXBsYWNlIG5vdy11bnNoYXJlZCBrc20gcGFnZSBieSBvcmRpbmFyeSBwYWdlLgotCQkJICovCi0JCQlicmVha19jb3cocm1hcF9pdGVtLT5tbSwgcm1hcF9pdGVtLT5hZGRyZXNzKTsKLQkJCXJlbW92ZV9ybWFwX2l0ZW1fZnJvbV90cmVlKHJtYXBfaXRlbSk7Ci0JCQlybWFwX2l0ZW0tPm9sZGNoZWNrc3VtID0gY2FsY19jaGVja3N1bShwYWdlKTsKLQkJfQogCQlwdXRfcGFnZShwYWdlKTsKIAl9CiB9CkBAIC0xMzc1LDcgKzE0MjAsNyBAQAogCQlpZiAoKnZtX2ZsYWdzICYgKFZNX01FUkdFQUJMRSB8IFZNX1NIQVJFRCAgfCBWTV9NQVlTSEFSRSAgIHwKIAkJCQkgVk1fUEZOTUFQICAgIHwgVk1fSU8gICAgICB8IFZNX0RPTlRFWFBBTkQgfAogCQkJCSBWTV9SRVNFUlZFRCAgfCBWTV9IVUdFVExCIHwgVk1fSU5TRVJUUEFHRSB8Ci0JCQkJIFZNX01JWEVETUFQICB8IFZNX1NBTykpCisJCQkJIFZNX05PTkxJTkVBUiB8IFZNX01JWEVETUFQIHwgVk1fU0FPKSkKIAkJCXJldHVybiAwOwkJLyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqLwogCiAJCWlmICghdGVzdF9iaXQoTU1GX1ZNX01FUkdFQUJMRSwgJm1tLT5mbGFncykpIHsKQEAgLTE0NTIsNyArMTQ5Nyw3IEBACiAJc3Bpbl9sb2NrKCZrc21fbW1saXN0X2xvY2spOwogCW1tX3Nsb3QgPSBnZXRfbW1fc2xvdChtbSk7CiAJaWYgKG1tX3Nsb3QgJiYga3NtX3NjYW4ubW1fc2xvdCAhPSBtbV9zbG90KSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZtbV9zbG90LT5ybWFwX2xpc3QpKSB7CisJCWlmICghbW1fc2xvdC0+cm1hcF9saXN0KSB7CiAJCQlobGlzdF9kZWwoJm1tX3Nsb3QtPmxpbmspOwogCQkJbGlzdF9kZWwoJm1tX3Nsb3QtPm1tX2xpc3QpOwogCQkJZWFzeV90b19mcmVlID0gMTsKQEAgLTE0NzMsNiArMTUxOCwyNDkgQEAKIAl9CiB9CiAKK3N0cnVjdCBwYWdlICprc21fZG9lc19uZWVkX3RvX2NvcHkoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCBwYWdlICpuZXdfcGFnZTsKKworCXVubG9ja19wYWdlKHBhZ2UpOwkvKiBhbnkgcmFjZXJzIHdpbGwgQ09XIGl0LCBub3QgbW9kaWZ5IGl0ICovCisKKwluZXdfcGFnZSA9IGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLCB2bWEsIGFkZHJlc3MpOworCWlmIChuZXdfcGFnZSkgeworCQljb3B5X3VzZXJfaGlnaHBhZ2UobmV3X3BhZ2UsIHBhZ2UsIGFkZHJlc3MsIHZtYSk7CisKKwkJU2V0UGFnZURpcnR5KG5ld19wYWdlKTsKKwkJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOworCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdfcGFnZSk7CisJCV9fc2V0X3BhZ2VfbG9ja2VkKG5ld19wYWdlKTsKKworCQlpZiAocGFnZV9ldmljdGFibGUobmV3X3BhZ2UsIHZtYSkpCisJCQlscnVfY2FjaGVfYWRkX2xydShuZXdfcGFnZSwgTFJVX0FDVElWRV9BTk9OKTsKKwkJZWxzZQorCQkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChuZXdfcGFnZSk7CisJfQorCisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiBuZXdfcGFnZTsKK30KKworaW50IHBhZ2VfcmVmZXJlbmNlZF9rc20oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKKwkJCXVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzKQoreworCXN0cnVjdCBzdGFibGVfbm9kZSAqc3RhYmxlX25vZGU7CisJc3RydWN0IHJtYXBfaXRlbSAqcm1hcF9pdGVtOworCXN0cnVjdCBobGlzdF9ub2RlICpobGlzdDsKKwl1bnNpZ25lZCBpbnQgbWFwY291bnQgPSBwYWdlX21hcGNvdW50KHBhZ2UpOworCWludCByZWZlcmVuY2VkID0gMDsKKwlpbnQgc2VhcmNoX25ld19mb3JrcyA9IDA7CisKKwlWTV9CVUdfT04oIVBhZ2VLc20ocGFnZSkpOworCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlzdGFibGVfbm9kZSA9IHBhZ2Vfc3RhYmxlX25vZGUocGFnZSk7CisJaWYgKCFzdGFibGVfbm9kZSkKKwkJcmV0dXJuIDA7CithZ2FpbjoKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShybWFwX2l0ZW0sIGhsaXN0LCAmc3RhYmxlX25vZGUtPmhsaXN0LCBobGlzdCkgeworCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gcm1hcF9pdGVtLT5hbm9uX3ZtYTsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8CisJCQkgICAgcm1hcF9pdGVtLT5hZGRyZXNzID49IHZtYS0+dm1fZW5kKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIEluaXRpYWxseSB3ZSBleGFtaW5lIG9ubHkgdGhlIHZtYSB3aGljaCBjb3ZlcnMgdGhpcworCQkJICogcm1hcF9pdGVtOyBidXQgbGF0ZXIsIGlmIHRoZXJlIGlzIHN0aWxsIHdvcmsgdG8gZG8sCisJCQkgKiB3ZSBleGFtaW5lIGNvdmVyaW5nIHZtYXMgaW4gb3RoZXIgbW1zOiBpbiBjYXNlIHRoZXkKKwkJCSAqIHdlcmUgZm9ya2VkIGZyb20gdGhlIG9yaWdpbmFsIHNpbmNlIGtzbWQgcGFzc2VkLgorCQkJICovCisJCQlpZiAoKHJtYXBfaXRlbS0+bW0gPT0gdm1hLT52bV9tbSkgPT0gc2VhcmNoX25ld19mb3JrcykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKG1lbWNnICYmICFtbV9tYXRjaF9jZ3JvdXAodm1hLT52bV9tbSwgbWVtY2cpKQorCQkJCWNvbnRpbnVlOworCisJCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9vbmUocGFnZSwgdm1hLAorCQkJCXJtYXBfaXRlbS0+YWRkcmVzcywgJm1hcGNvdW50LCB2bV9mbGFncyk7CisJCQlpZiAoIXNlYXJjaF9uZXdfZm9ya3MgfHwgIW1hcGNvdW50KQorCQkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWlmICghbWFwY291bnQpCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKCFzZWFyY2hfbmV3X2ZvcmtzKyspCisJCWdvdG8gYWdhaW47CitvdXQ6CisJcmV0dXJuIHJlZmVyZW5jZWQ7Cit9CisKK2ludCB0cnlfdG9fdW5tYXBfa3NtKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlOworCXN0cnVjdCBobGlzdF9ub2RlICpobGlzdDsKKwlzdHJ1Y3Qgcm1hcF9pdGVtICpybWFwX2l0ZW07CisJaW50IHJldCA9IFNXQVBfQUdBSU47CisJaW50IHNlYXJjaF9uZXdfZm9ya3MgPSAwOworCisJVk1fQlVHX09OKCFQYWdlS3NtKHBhZ2UpKTsKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJc3RhYmxlX25vZGUgPSBwYWdlX3N0YWJsZV9ub2RlKHBhZ2UpOworCWlmICghc3RhYmxlX25vZGUpCisJCXJldHVybiBTV0FQX0ZBSUw7CithZ2FpbjoKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShybWFwX2l0ZW0sIGhsaXN0LCAmc3RhYmxlX25vZGUtPmhsaXN0LCBobGlzdCkgeworCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gcm1hcF9pdGVtLT5hbm9uX3ZtYTsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8CisJCQkgICAgcm1hcF9pdGVtLT5hZGRyZXNzID49IHZtYS0+dm1fZW5kKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIEluaXRpYWxseSB3ZSBleGFtaW5lIG9ubHkgdGhlIHZtYSB3aGljaCBjb3ZlcnMgdGhpcworCQkJICogcm1hcF9pdGVtOyBidXQgbGF0ZXIsIGlmIHRoZXJlIGlzIHN0aWxsIHdvcmsgdG8gZG8sCisJCQkgKiB3ZSBleGFtaW5lIGNvdmVyaW5nIHZtYXMgaW4gb3RoZXIgbW1zOiBpbiBjYXNlIHRoZXkKKwkJCSAqIHdlcmUgZm9ya2VkIGZyb20gdGhlIG9yaWdpbmFsIHNpbmNlIGtzbWQgcGFzc2VkLgorCQkJICovCisJCQlpZiAoKHJtYXBfaXRlbS0+bW0gPT0gdm1hLT52bV9tbSkgPT0gc2VhcmNoX25ld19mb3JrcykKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsCisJCQkJCXJtYXBfaXRlbS0+YWRkcmVzcywgZmxhZ3MpOworCQkJaWYgKHJldCAhPSBTV0FQX0FHQUlOIHx8ICFwYWdlX21hcHBlZChwYWdlKSkgeworCQkJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwl9CisJaWYgKCFzZWFyY2hfbmV3X2ZvcmtzKyspCisJCWdvdG8gYWdhaW47CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19NSUdSQVRJT04KK2ludCBybWFwX3dhbGtfa3NtKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgKCpybWFwX29uZSkoc3RydWN0IHBhZ2UgKiwKKwkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBzdGFibGVfbm9kZSAqc3RhYmxlX25vZGU7CisJc3RydWN0IGhsaXN0X25vZGUgKmhsaXN0OworCXN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbTsKKwlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKKwlpbnQgc2VhcmNoX25ld19mb3JrcyA9IDA7CisKKwlWTV9CVUdfT04oIVBhZ2VLc20ocGFnZSkpOworCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlzdGFibGVfbm9kZSA9IHBhZ2Vfc3RhYmxlX25vZGUocGFnZSk7CisJaWYgKCFzdGFibGVfbm9kZSkKKwkJcmV0dXJuIHJldDsKK2FnYWluOgorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtYXBfaXRlbSwgaGxpc3QsICZzdGFibGVfbm9kZS0+aGxpc3QsIGhsaXN0KSB7CisJCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBybWFwX2l0ZW0tPmFub25fdm1hOworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwKKwkJCSAgICBybWFwX2l0ZW0tPmFkZHJlc3MgPj0gdm1hLT52bV9lbmQpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogSW5pdGlhbGx5IHdlIGV4YW1pbmUgb25seSB0aGUgdm1hIHdoaWNoIGNvdmVycyB0aGlzCisJCQkgKiBybWFwX2l0ZW07IGJ1dCBsYXRlciwgaWYgdGhlcmUgaXMgc3RpbGwgd29yayB0byBkbywKKwkJCSAqIHdlIGV4YW1pbmUgY292ZXJpbmcgdm1hcyBpbiBvdGhlciBtbXM6IGluIGNhc2UgdGhleQorCQkJICogd2VyZSBmb3JrZWQgZnJvbSB0aGUgb3JpZ2luYWwgc2luY2Uga3NtZCBwYXNzZWQuCisJCQkgKi8KKwkJCWlmICgocm1hcF9pdGVtLT5tbSA9PSB2bWEtPnZtX21tKSA9PSBzZWFyY2hfbmV3X2ZvcmtzKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSBybWFwX29uZShwYWdlLCB2bWEsIHJtYXBfaXRlbS0+YWRkcmVzcywgYXJnKTsKKwkJCWlmIChyZXQgIT0gU1dBUF9BR0FJTikgeworCQkJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwl9CisJaWYgKCFzZWFyY2hfbmV3X2ZvcmtzKyspCisJCWdvdG8gYWdhaW47CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBrc21fbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqb2xkcGFnZSkKK3sKKwlzdHJ1Y3Qgc3RhYmxlX25vZGUgKnN0YWJsZV9ub2RlOworCisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKG9sZHBhZ2UpKTsKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQobmV3cGFnZSkpOworCVZNX0JVR19PTihuZXdwYWdlLT5tYXBwaW5nICE9IG9sZHBhZ2UtPm1hcHBpbmcpOworCisJc3RhYmxlX25vZGUgPSBwYWdlX3N0YWJsZV9ub2RlKG5ld3BhZ2UpOworCWlmIChzdGFibGVfbm9kZSkgeworCQlWTV9CVUdfT04oc3RhYmxlX25vZGUtPmtwZm4gIT0gcGFnZV90b19wZm4ob2xkcGFnZSkpOworCQlzdGFibGVfbm9kZS0+a3BmbiA9IHBhZ2VfdG9fcGZuKG5ld3BhZ2UpOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovCisKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQorc3RhdGljIHN0cnVjdCBzdGFibGVfbm9kZSAqa3NtX2NoZWNrX3N0YWJsZV90cmVlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCWZvciAobm9kZSA9IHJiX2ZpcnN0KCZyb290X3N0YWJsZV90cmVlKTsgbm9kZTsgbm9kZSA9IHJiX25leHQobm9kZSkpIHsKKwkJc3RydWN0IHN0YWJsZV9ub2RlICpzdGFibGVfbm9kZTsKKworCQlzdGFibGVfbm9kZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBzdGFibGVfbm9kZSwgbm9kZSk7CisJCWlmIChzdGFibGVfbm9kZS0+a3BmbiA+PSBzdGFydF9wZm4gJiYKKwkJICAgIHN0YWJsZV9ub2RlLT5rcGZuIDwgZW5kX3BmbikKKwkJCXJldHVybiBzdGFibGVfbm9kZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQga3NtX21lbW9yeV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWVtb3J5X25vdGlmeSAqbW4gPSBhcmc7CisJc3RydWN0IHN0YWJsZV9ub2RlICpzdGFibGVfbm9kZTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJLyoKKwkJICogS2VlcCBpdCB2ZXJ5IHNpbXBsZSBmb3Igbm93OiBqdXN0IGxvY2sgb3V0IGtzbWQgYW5kCisJCSAqIE1BRFZfVU5NRVJHRUFCTEUgd2hpbGUgYW55IG1lbW9yeSBpcyBnb2luZyBvZmZsaW5lLgorCQkgKi8KKwkJbXV0ZXhfbG9jaygma3NtX3RocmVhZF9tdXRleCk7CisJCWJyZWFrOworCisJY2FzZSBNRU1fT0ZGTElORToKKwkJLyoKKwkJICogTW9zdCBvZiB0aGUgd29yayBpcyBkb25lIGJ5IHBhZ2UgbWlncmF0aW9uOyBidXQgdGhlcmUgbWlnaHQKKwkJICogYmUgYSBmZXcgc3RhYmxlX25vZGVzIGxlZnQgb3Zlciwgc3RpbGwgcG9pbnRpbmcgdG8gc3RydWN0CisJCSAqIHBhZ2VzIHdoaWNoIGhhdmUgYmVlbiBvZmZsaW5lZDogcHJ1bmUgdGhvc2UgZnJvbSB0aGUgdHJlZS4KKwkJICovCisJCXdoaWxlICgoc3RhYmxlX25vZGUgPSBrc21fY2hlY2tfc3RhYmxlX3RyZWUobW4tPnN0YXJ0X3BmbiwKKwkJCQkJbW4tPnN0YXJ0X3BmbiArIG1uLT5ucl9wYWdlcykpICE9IE5VTEwpCisJCQlyZW1vdmVfbm9kZV9mcm9tX3N0YWJsZV90cmVlKHN0YWJsZV9ub2RlKTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKworCWNhc2UgTUVNX0NBTkNFTF9PRkZMSU5FOgorCQltdXRleF91bmxvY2soJmtzbV90aHJlYWRfbXV0ZXgpOworCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLworCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAvKgogICogVGhpcyBhbGwgY29tcGlsZXMgd2l0aG91dCBDT05GSUdfU1lTRlMsIGJ1dCBpcyBhIHdhc3RlIG9mIHNwYWNlLgpAQCAtMTU1MSw4ICsxODM5LDggQEAKIAkvKgogCSAqIEtTTV9SVU5fTUVSR0Ugc2V0cyBrc21kIHJ1bm5pbmcsIGFuZCAwIHN0b3BzIGl0IHJ1bm5pbmcuCiAJICogS1NNX1JVTl9VTk1FUkdFIHN0b3BzIGl0IHJ1bm5pbmcgYW5kIHVubWVyZ2VzIGFsbCBybWFwX2l0ZW1zLAotCSAqIGJyZWFraW5nIENPVyB0byBmcmVlIHRoZSB1bnN3YXBwYWJsZSBwYWdlc19zaGFyZWQgKGJ1dCBsZWF2ZXMKLQkgKiBtbV9zbG90cyBvbiB0aGUgbGlzdCBmb3Igd2hlbiBrc21kIG1heSBiZSBzZXQgcnVubmluZyBhZ2FpbikuCisJICogYnJlYWtpbmcgQ09XIHRvIGZyZWUgdGhlIHBhZ2VzX3NoYXJlZCAoYnV0IGxlYXZlcyBtbV9zbG90cworCSAqIG9uIHRoZSBsaXN0IGZvciB3aGVuIGtzbWQgbWF5IGJlIHNldCBydW5uaW5nIGFnYWluKS4KIAkgKi8KIAogCW11dGV4X2xvY2soJmtzbV90aHJlYWRfbXV0ZXgpOwpAQCAtMTU3NywyOSArMTg2NSw2IEBACiB9CiBLU01fQVRUUihydW4pOwogCi1zdGF0aWMgc3NpemVfdCBtYXhfa2VybmVsX3BhZ2VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbnJfcGFnZXMpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Ja3NtX21heF9rZXJuZWxfcGFnZXMgPSBucl9wYWdlczsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgbWF4X2tlcm5lbF9wYWdlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBrc21fbWF4X2tlcm5lbF9wYWdlcyk7Ci19Ci1LU01fQVRUUihtYXhfa2VybmVsX3BhZ2VzKTsKLQogc3RhdGljIHNzaXplX3QgcGFnZXNfc2hhcmVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTY0OSw3ICsxOTE0LDYgQEAKIAkmc2xlZXBfbWlsbGlzZWNzX2F0dHIuYXR0ciwKIAkmcGFnZXNfdG9fc2Nhbl9hdHRyLmF0dHIsCiAJJnJ1bl9hdHRyLmF0dHIsCi0JJm1heF9rZXJuZWxfcGFnZXNfYXR0ci5hdHRyLAogCSZwYWdlc19zaGFyZWRfYXR0ci5hdHRyLAogCSZwYWdlc19zaGFyaW5nX2F0dHIuYXR0ciwKIAkmcGFnZXNfdW5zaGFyZWRfYXR0ci5hdHRyLApAQCAtMTY2OSw4ICsxOTMzLDYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtzbV90aHJlYWQ7CiAJaW50IGVycjsKIAotCWtzbV9tYXhfa2VybmVsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMgLyA0OwotCiAJZXJyID0ga3NtX3NsYWJfaW5pdCgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtMTY5OCw2ICsxOTYwLDEzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KIAorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCisJLyoKKwkgKiBDaG9vc2UgYSBoaWdoIHByaW9yaXR5IHNpbmNlIHRoZSBjYWxsYmFjayB0YWtlcyBrc21fdGhyZWFkX211dGV4OgorCSAqIGxhdGVyIGNhbGxiYWNrcyBjb3VsZCBvbmx5IGJlIHRha2luZyBsb2NrcyB3aGljaCBuZXN0IHdpdGhpbiB0aGF0LgorCSAqLworCWhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKGtzbV9tZW1vcnlfY2FsbGJhY2ssIDEwMCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWUyOgpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IDM1YjE0NzkuLjMxOTUyOGIgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYworKysgYi9tbS9tYWR2aXNlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rc20uaD4KQEAgLTIyMiw3ICsyMjMsNyBAQAogLyoKICAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuCiAgKi8KLXN0YXRpYyBpbnQgbWFkdmlzZV9od3BvaXNvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyBpbnQgbWFkdmlzZV9od3BvaXNvbihpbnQgYmh2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjMwLDE1ICsyMzEsMjEgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewogCQlzdHJ1Y3QgcGFnZSAqcDsKLQkJaW50IHJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBzdGFydCwgMSwKLQkJCQkJCTAsIDAsICZwLCBOVUxMKTsKKwkJaW50IHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3Qoc3RhcnQsIDEsIDAsICZwKTsKIAkJaWYgKHJldCAhPSAxKQogCQkJcmV0dXJuIHJldDsKKwkJaWYgKGJodiA9PSBNQURWX1NPRlRfT0ZGTElORSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiU29mdCBvZmZsaW5pbmcgcGFnZSAlbHggYXQgJWx4XG4iLAorCQkJCXBhZ2VfdG9fcGZuKHApLCBzdGFydCk7CisJCQlyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwLCBNRl9DT1VOVF9JTkNSRUFTRUQpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXByaW50ayhLRVJOX0lORk8gIkluamVjdGluZyBtZW1vcnkgZmFpbHVyZSBmb3IgcGFnZSAlbHggYXQgJWx4XG4iLAogCQkgICAgICAgcGFnZV90b19wZm4ocCksIHN0YXJ0KTsKIAkJLyogSWdub3JlIHJldHVybiB2YWx1ZSBmb3Igbm93ICovCi0JCV9fbWVtb3J5X2ZhaWx1cmUocGFnZV90b19wZm4ocCksIDAsIDEpOwotCQlwdXRfcGFnZShwKTsKKwkJX19tZW1vcnlfZmFpbHVyZShwYWdlX3RvX3BmbihwKSwgMCwgTUZfQ09VTlRfSU5DUkVBU0VEKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTMzNSw4ICszNDIsOCBAQAogCXNpemVfdCBsZW47CiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKLQlpZiAoYmVoYXZpb3IgPT0gTUFEVl9IV1BPSVNPTikKLQkJcmV0dXJuIG1hZHZpc2VfaHdwb2lzb24oc3RhcnQsIHN0YXJ0K2xlbl9pbik7CisJaWYgKGJlaGF2aW9yID09IE1BRFZfSFdQT0lTT04gfHwgYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpCisJCXJldHVybiBtYWR2aXNlX2h3cG9pc29uKGJlaGF2aW9yLCBzdGFydCwgc3RhcnQrbGVuX2luKTsKICNlbmRpZgogCWlmICghbWFkdmlzZV9iZWhhdmlvcl92YWxpZChiZWhhdmlvcikpCiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBjMzFhMzEwLi40ODhiNjQ0IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC01NCw3ICs1NSw2IEBACiAjZGVmaW5lIGRvX3N3YXBfYWNjb3VudAkJKDApCiAjZW5kaWYKIAotc3RhdGljIERFRklORV9NVVRFWChtZW1jZ190YXNrbGlzdCk7CS8qIGNhbiBiZSBob2xkIHVuZGVyIGNncm91cF9tdXRleCAqLwogI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RIUkVTSCAoMTAwMCkKIAogLyoKQEAgLTY2LDcgKzY2LDcgQEAKIAkgKi8KIAlNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsIAkgICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgY2FjaGUgKi8KIAlNRU1fQ0dST1VQX1NUQVRfUlNTLAkgICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgYW5vbiByc3MgKi8KLQlNRU1fQ0dST1VQX1NUQVRfTUFQUEVEX0ZJTEUsICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgZmlsZSByc3MgKi8KKwlNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQsICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgZmlsZSByc3MgKi8KIAlNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5ULAkvKiAjIG9mIHBhZ2VzIHBhZ2VkIGluICovCiAJTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQsCS8qICMgb2YgcGFnZXMgcGFnZWQgb3V0ICovCiAJTUVNX0NHUk9VUF9TVEFUX0VWRU5UUywJLyogc3VtIG9mIHBhZ2VpbiArIHBhZ2VvdXQgZm9yIGludGVybmFsIHVzZSAqLwpAQCAtMjc1LDYgKzI3NSw3IEBACiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2dldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKK3N0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9ja19hc3luYyh2b2lkKTsKIAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICoKIG1lbV9jZ3JvdXBfem9uZWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IG5pZCwgaW50IHppZCkKQEAgLTI4Miw2ICsyODMsMTEgQEAKIAlyZXR1cm4gJm1lbS0+aW5mby5ub2RlaW5mb1tuaWRdLT56b25laW5mb1t6aWRdOwogfQogCitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqbWVtX2Nncm91cF9jc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3sKKwlyZXR1cm4gJm1lbS0+Y3NzOworfQorCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKgogcGFnZV9jZ3JvdXBfem9uZWluZm8oc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKIHsKQEAgLTc1OCw3ICs3NjQsMTMgQEAKIAl0YXNrX3VubG9jayh0YXNrKTsKIAlpZiAoIWN1cnIpCiAJCXJldHVybiAwOwotCWlmIChjdXJyLT51c2VfaGllcmFyY2h5KQorCS8qCisJICogV2Ugc2hvdWxkIGNoZWNrIHVzZV9oaWVyYXJjaHkgb2YgIm1lbSIgbm90ICJjdXJyIi4gQmVjYXVzZSBjaGVja2luZworCSAqIHVzZV9oaWVyYXJjaHkgb2YgImN1cnIiIGhlcmUgbWFrZSB0aGlzIGZ1bmN0aW9uIHRydWUgaWYgaGllcmFyY2h5IGlzCisJICogZW5hYmxlZCBpbiAiY3VyciIgYW5kICJjdXJyIiBpcyBhIGNoaWxkIG9mICJtZW0iIGluICpjZ3JvdXAqCisJICogaGllcmFyY2h5KGV2ZW4gaWYgdXNlX2hpZXJhcmNoeSBpcyBkaXNhYmxlZCBpbiAibWVtIikuCisJICovCisJaWYgKG1lbS0+dXNlX2hpZXJhcmNoeSkKIAkJcmV0ID0gY3NzX2lzX2FuY2VzdG9yKCZjdXJyLT5jc3MsICZtZW0tPmNzcyk7CiAJZWxzZQogCQlyZXQgPSAoY3VyciA9PSBtZW0pOwpAQCAtMTAwNyw3ICsxMDE5LDcgQEAKIAlzdGF0aWMgY2hhciBtZW1jZ19uYW1lW1BBVEhfTUFYXTsKIAlpbnQgcmV0OwogCi0JaWYgKCFtZW1jZykKKwlpZiAoIW1lbWNnIHx8ICFwKQogCQlyZXR1cm47CiAKIApAQCAtMTEzNyw2ICsxMTQ5LDggQEAKIAkJdmljdGltID0gbWVtX2Nncm91cF9zZWxlY3RfdmljdGltKHJvb3RfbWVtKTsKIAkJaWYgKHZpY3RpbSA9PSByb290X21lbSkgewogCQkJbG9vcCsrOworCQkJaWYgKGxvb3AgPj0gMSkKKwkJCQlkcmFpbl9hbGxfc3RvY2tfYXN5bmMoKTsKIAkJCWlmIChsb29wID49IDIpIHsKIAkJCQkvKgogCQkJCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltCkBAIC0xMjIzLDcgKzEyMzcsNyBAQAogICogQ3VycmVudGx5IHVzZWQgdG8gdXBkYXRlIG1hcHBlZCBmaWxlIHN0YXRpc3RpY3MsIGJ1dCB0aGUgcm91dGluZSBjYW4gYmUKICAqIGdlbmVyYWxpemVkIHRvIHVwZGF0ZSBvdGhlciBzdGF0aXN0aWNzIGFzIHdlbGwuCiAgKi8KLXZvaWQgbWVtX2Nncm91cF91cGRhdGVfbWFwcGVkX2ZpbGVfc3RhdChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHZhbCkKK3ZvaWQgbWVtX2Nncm91cF91cGRhdGVfZmlsZV9tYXBwZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB2YWwpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0OwpAQCAtMTIzMSw5ICsxMjQ1LDYgQEAKIAlpbnQgY3B1OwogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKLQlpZiAoIXBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkKLQkJcmV0dXJuOwotCiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CiAJaWYgKHVubGlrZWx5KCFwYykpCiAJCXJldHVybjsKQEAgLTEyNTMsMTIgKzEyNjQsMTM5IEBACiAJc3RhdCA9ICZtZW0tPnN0YXQ7CiAJY3B1c3RhdCA9ICZzdGF0LT5jcHVzdGF0W2NwdV07CiAKLQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfTUFQUEVEX0ZJTEUsIHZhbCk7CisJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX0ZJTEVfTUFQUEVELCB2YWwpOwogZG9uZToKIAl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogfQogCiAvKgorICogc2l6ZSBvZiBmaXJzdCBjaGFyZ2UgdHJpYWwuICIzMiIgY29tZXMgZnJvbSB2bXNjYW4uYydzIG1hZ2ljIHZhbHVlLgorICogVE9ETzogbWF5YmUgbmVjZXNzYXJ5IHRvIHVzZSBiaWcgbnVtYmVycyBpbiBiaWcgaXJvbnMuCisgKi8KKyNkZWZpbmUgQ0hBUkdFX1NJWkUJKDMyICogUEFHRV9TSVpFKQorc3RydWN0IG1lbWNnX3N0b2NrX3BjcCB7CisJc3RydWN0IG1lbV9jZ3JvdXAgKmNhY2hlZDsgLyogdGhpcyBuZXZlciBiZSByb290IGNncm91cCAqLworCWludCBjaGFyZ2U7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AsIG1lbWNnX3N0b2NrKTsKK3N0YXRpYyBhdG9taWNfdCBtZW1jZ19kcmFpbl9jb3VudDsKKworLyoKKyAqIFRyeSB0byBjb25zdW1lIHN0b2NrZWQgY2hhcmdlIG9uIHRoaXMgY3B1LiBJZiBzdWNjZXNzLCBQQUdFX1NJWkUgaXMgY29uc3VtZWQKKyAqIGZyb20gbG9jYWwgc3RvY2sgYW5kIHRydWUgaXMgcmV0dXJuZWQuIElmIHRoZSBzdG9jayBpcyAwIG9yIGNoYXJnZXMgZnJvbSBhCisgKiBjZ3JvdXAgd2hpY2ggaXMgbm90IGN1cnJlbnQgdGFyZ2V0LCByZXR1cm5zIGZhbHNlLiBUaGlzIHN0b2NrIHdpbGwgYmUKKyAqIHJlZmlsbGVkLgorICovCitzdGF0aWMgYm9vbCBjb25zdW1lX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2s7CisJYm9vbCByZXQgPSB0cnVlOworCisJc3RvY2sgPSAmZ2V0X2NwdV92YXIobWVtY2dfc3RvY2spOworCWlmIChtZW0gPT0gc3RvY2stPmNhY2hlZCAmJiBzdG9jay0+Y2hhcmdlKQorCQlzdG9jay0+Y2hhcmdlIC09IFBBR0VfU0laRTsKKwllbHNlIC8qIG5lZWQgdG8gY2FsbCByZXNfY291bnRlcl9jaGFyZ2UgKi8KKwkJcmV0ID0gZmFsc2U7CisJcHV0X2NwdV92YXIobWVtY2dfc3RvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHN0b2NrcyBjYWNoZWQgaW4gcGVyY3B1IHRvIHJlc19jb3VudGVyIGFuZCByZXNldCBjYWNoZWQgaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGRyYWluX3N0b2NrKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICpvbGQgPSBzdG9jay0+Y2FjaGVkOworCisJaWYgKHN0b2NrLT5jaGFyZ2UpIHsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm9sZC0+cmVzLCBzdG9jay0+Y2hhcmdlKTsKKwkJaWYgKGRvX3N3YXBfYWNjb3VudCkKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZvbGQtPm1lbXN3LCBzdG9jay0+Y2hhcmdlKTsKKwl9CisJc3RvY2stPmNhY2hlZCA9IE5VTEw7CisJc3RvY2stPmNoYXJnZSA9IDA7Cit9CisKKy8qCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHVuZGVyIHByZWVtcHQgZGlzYWJsZWQgb3IgbXVzdCBiZSBjYWxsZWQgYnkKKyAqIGEgdGhyZWFkIHdoaWNoIGlzIHBpbm5lZCB0byBsb2NhbCBjcHUuCisgKi8KK3N0YXRpYyB2b2lkIGRyYWluX2xvY2FsX3N0b2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpCit7CisJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2sgPSAmX19nZXRfY3B1X3ZhcihtZW1jZ19zdG9jayk7CisJZHJhaW5fc3RvY2soc3RvY2spOworfQorCisvKgorICogQ2FjaGUgY2hhcmdlcyh2YWwpIHdoaWNoIGlzIGZyb20gcmVzX2NvdW50ZXIsIHRvIGxvY2FsIHBlcl9jcHUgYXJlYS4KKyAqIFRoaXMgd2lsbCBiZSBjb25zdW1lZCBieSBjb25zdW10X3N0b2NrKCkgZnVuY3Rpb24sIGxhdGVyLgorICovCitzdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9ICZnZXRfY3B1X3ZhcihtZW1jZ19zdG9jayk7CisKKwlpZiAoc3RvY2stPmNhY2hlZCAhPSBtZW0pIHsgLyogcmVzZXQgaWYgbmVjZXNzYXJ5ICovCisJCWRyYWluX3N0b2NrKHN0b2NrKTsKKwkJc3RvY2stPmNhY2hlZCA9IG1lbTsKKwl9CisJc3RvY2stPmNoYXJnZSArPSB2YWw7CisJcHV0X2NwdV92YXIobWVtY2dfc3RvY2spOworfQorCisvKgorICogVHJpZXMgdG8gZHJhaW4gc3RvY2tlZCBjaGFyZ2VzIGluIG90aGVyIGNwdXMuIFRoaXMgZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzCisgKiBhbmQganVzdCBwdXQgYSB3b3JrIHBlciBjcHUgZm9yIGRyYWluaW5nIGxvY2FseSBvbiBlYWNoIGNwdS4gQ2FsbGVyIGNhbgorICogZXhwZWN0cyBzb21lIGNoYXJnZXMgd2lsbCBiZSBiYWNrIHRvIHJlc19jb3VudGVyIGxhdGVyIGJ1dCBjYW5ub3Qgd2FpdCBmb3IKKyAqIGl0LgorICovCitzdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfYXN5bmModm9pZCkKK3sKKwlpbnQgY3B1OworCS8qIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHNjaGVkdWxpbmcgImRyYWluIiBpbiBhc3luY2hyb25vdXMgd2F5LgorCSAqIFRoZSByZXN1bHQgb2YgImRyYWluIiBpcyBub3QgZGlyZWN0bHkgaGFuZGxlZCBieSBjYWxsZXJzLiBUaGVuLAorCSAqIGlmIHNvbWVvbmUgaXMgY2FsbGluZyBkcmFpbiwgd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIGRyYWluIG1vcmUuCisJICogQW55d2F5LCBXT1JLX1NUUlVDVF9QRU5ESU5HIGNoZWNrIGluIHF1ZXVlX3dvcmtfb24oKSB3aWxsIGNhdGNoIGlmCisJICogdGhlcmUgaXMgYSByYWNlLiBXZSBqdXN0IGRvIGxvb3NlIGNoZWNrIGhlcmUuCisJICovCisJaWYgKGF0b21pY19yZWFkKCZtZW1jZ19kcmFpbl9jb3VudCkpCisJCXJldHVybjsKKwkvKiBOb3RpZnkgb3RoZXIgY3B1cyB0aGF0IHN5c3RlbS13aWRlICJkcmFpbiIgaXMgcnVubmluZyAqLworCWF0b21pY19pbmMoJm1lbWNnX2RyYWluX2NvdW50KTsKKwlnZXRfb25saW5lX2NwdXMoKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9ICZwZXJfY3B1KG1lbWNnX3N0b2NrLCBjcHUpOworCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgJnN0b2NrLT53b3JrKTsKKwl9CisgCXB1dF9vbmxpbmVfY3B1cygpOworCWF0b21pY19kZWMoJm1lbWNnX2RyYWluX2NvdW50KTsKKwkvKiBXZSBkb24ndCB3YWl0IGZvciBmbHVzaF93b3JrICovCit9CisKKy8qIFRoaXMgaXMgYSBzeW5jaHJvbm91cyBkcmFpbiBpbnRlcmZhY2UuICovCitzdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfc3luYyh2b2lkKQoreworCS8qIGNhbGxlZCB3aGVuIGZvcmNlX2VtcHR5IGlzIGNhbGxlZCAqLworCWF0b21pY19pbmMoJm1lbWNnX2RyYWluX2NvdW50KTsKKwlzY2hlZHVsZV9vbl9lYWNoX2NwdShkcmFpbl9sb2NhbF9zdG9jayk7CisJYXRvbWljX2RlYygmbWVtY2dfZHJhaW5fY291bnQpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCBtZW1jZ19zdG9ja19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkJCXZvaWQgKmhjcHUpCit7CisJaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2s7CisKKwlpZiAoYWN0aW9uICE9IENQVV9ERUFEKQorCQlyZXR1cm4gTk9USUZZX09LOworCXN0b2NrID0gJnBlcl9jcHUobWVtY2dfc3RvY2ssIGNwdSk7CisJZHJhaW5fc3RvY2soc3RvY2spOworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKy8qCiAgKiBVbmxpa2UgZXhwb3J0ZWQgaW50ZXJmYWNlLCAib29tIiBwYXJhbWV0ZXIgaXMgYWRkZWQuIGlmIG9vbT09dHJ1ZSwKICAqIG9vbS1raWxsZXIgY2FuIGJlIGludm9rZWQuCiAgKi8KQEAgLTEyNjksNiArMTQwNyw3IEBACiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgKm1lbV9vdmVyX2xpbWl0OwogCWludCBucl9yZXRyaWVzID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CiAJc3RydWN0IHJlc19jb3VudGVyICpmYWlsX3JlczsKKwlpbnQgY3NpemUgPSBDSEFSR0VfU0laRTsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKSkgewogCQkvKiBEb24ndCBhY2NvdW50IHRoaXMhICovCkBAIC0xMjkzLDIzICsxNDMyLDI1IEBACiAJCXJldHVybiAwOwogCiAJVk1fQlVHX09OKGNzc19pc19yZW1vdmVkKCZtZW0tPmNzcykpOworCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkKKwkJZ290byBkb25lOwogCiAJd2hpbGUgKDEpIHsKIAkJaW50IHJldCA9IDA7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0JCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkKLQkJCWdvdG8gZG9uZTsKLQkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCAmZmFpbF9yZXMpOworCQlpZiAoY29uc3VtZV9zdG9jayhtZW0pKQorCQkJZ290byBjaGFyZ2VkOworCisJCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIGNzaXplLCAmZmFpbF9yZXMpOwogCQlpZiAobGlrZWx5KCFyZXQpKSB7CiAJCQlpZiAoIWRvX3N3YXBfYWNjb3VudCkKIAkJCQlicmVhazsKLQkJCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFLAotCQkJCQkJCSZmYWlsX3Jlcyk7CisJCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+bWVtc3csIGNzaXplLCAmZmFpbF9yZXMpOwogCQkJaWYgKGxpa2VseSghcmV0KSkKIAkJCQlicmVhazsKIAkJCS8qIG1lbStzd2FwIGNvdW50ZXIgZmFpbHMgKi8KLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgY3NpemUpOwogCQkJZmxhZ3MgfD0gTUVNX0NHUk9VUF9SRUNMQUlNX05PU1dBUDsKIAkJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLAogCQkJCQkJCQkJbWVtc3cpOwpAQCAtMTMxOCw2ICsxNDU5LDExIEBACiAJCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywKIAkJCQkJCQkJCXJlcyk7CiAKKwkJLyogcmVkdWNlIHJlcXVlc3Qgc2l6ZSBhbmQgcmV0cnkgKi8KKwkJaWYgKGNzaXplID4gUEFHRV9TSVpFKSB7CisJCQljc2l6ZSA9IFBBR0VfU0laRTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmICghKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpCiAJCQlnb3RvIG5vbWVtOwogCkBAIC0xMzM5LDE0ICsxNDg1LDE1IEBACiAKIAkJaWYgKCFucl9yZXRyaWVzLS0pIHsKIAkJCWlmIChvb20pIHsKLQkJCQltdXRleF9sb2NrKCZtZW1jZ190YXNrbGlzdCk7CiAJCQkJbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZtZW1jZ190YXNrbGlzdCk7CiAJCQkJcmVjb3JkX2xhc3Rfb29tKG1lbV9vdmVyX2xpbWl0KTsKIAkJCX0KIAkJCWdvdG8gbm9tZW07CiAJCX0KIAl9CisJaWYgKGNzaXplID4gUEFHRV9TSVpFKQorCQlyZWZpbGxfc3RvY2sobWVtLCBjc2l6ZSAtIFBBR0VfU0laRSk7CitjaGFyZ2VkOgogCS8qCiAJICogSW5zZXJ0IGFuY2VzdG9yIChhbmQgYW5jZXN0b3IncyBhbmNlc3RvcnMpLCB0byBzb2Z0bGltaXQgUkItdHJlZS4KIAkgKiBpZiB0aGV5IGV4Y2VlZHMgc29mdGxpbWl0LgpAQCAtMTM2MSw2ICsxNTA4LDIxIEBACiB9CiAKIC8qCisgKiBTb21lbXRpbWVzIHdlIGhhdmUgdG8gdW5kbyBhIGNoYXJnZSB3ZSBnb3QgYnkgdHJ5X2NoYXJnZSgpLgorICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGhhdCBhbmQgZG8gdW5jaGFyZ2UsIHB1dCBjc3MncyByZWZjbnQuCisgKiBnb3R0ZW4gYnkgdHJ5X2NoYXJnZSgpLgorICovCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3sKKwlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKKwkJaWYgKGRvX3N3YXBfYWNjb3VudCkKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOworCX0KKwljc3NfcHV0KCZtZW0tPmNzcyk7Cit9CisKKy8qCiAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgbWVtX2Nncm91cCBmcm9tIElELiBtdXN0IGJlIGNhbGxlZCB1bmRlcgogICogcmN1X3JlYWRfbG9jaygpLiBUaGUgY2FsbGVyIG11c3QgY2hlY2sgY3NzX2lzX3JlbW92ZWQoKSBvciBzb21lIGlmCiAgKiBpdCdzIGNvbmNlcm4uIChkcm9wcGluZyByZWZjbnQgZnJvbSBzd2FwIGNhbiBiZSBjYWxsZWQgYWdhaW5zdCByZW1vdmVkCkBAIC0xMzc5LDI1ICsxNTQxLDIyIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOwogfQogCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3N3YXBjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAl1bnNpZ25lZCBzaG9ydCBpZDsKIAlzd3BfZW50cnlfdCBlbnQ7CiAKIAlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCi0JaWYgKCFQYWdlU3dhcENhY2hlKHBhZ2UpKQotCQlyZXR1cm4gTlVMTDsKLQogCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCWxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpIHsKIAkJbWVtID0gcGMtPm1lbV9jZ3JvdXA7CiAJCWlmIChtZW0gJiYgIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKIAkJCW1lbSA9IE5VTEw7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKIAkJZW50LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKIAkJaWQgPSBsb29rdXBfc3dhcF9jZ3JvdXAoZW50KTsKIAkJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTQyNiwxMiArMTU4NSw3IEBACiAJbG9ja19wYWdlX2Nncm91cChwYyk7CiAJaWYgKHVubGlrZWx5KFBhZ2VDZ3JvdXBVc2VkKHBjKSkpIHsKIAkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKLQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkgewotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwotCQkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKLQkJfQotCQljc3NfcHV0KCZtZW0tPmNzcyk7CisJCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShtZW0pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDY0LDI3ICsxNjE4LDIyIEBACiB9CiAKIC8qKgotICogbWVtX2Nncm91cF9tb3ZlX2FjY291bnQgLSBtb3ZlIGFjY291bnQgb2YgdGhlIHBhZ2UKKyAqIF9fbWVtX2Nncm91cF9tb3ZlX2FjY291bnQgLSBtb3ZlIGFjY291bnQgb2YgdGhlIHBhZ2UKICAqIEBwYzoJcGFnZV9jZ3JvdXAgb2YgdGhlIHBhZ2UuCiAgKiBAZnJvbTogbWVtX2Nncm91cCB3aGljaCB0aGUgcGFnZSBpcyBtb3ZlZCBmcm9tLgogICogQHRvOgltZW1fY2dyb3VwIHdoaWNoIHRoZSBwYWdlIGlzIG1vdmVkIHRvLiBAZnJvbSAhPSBAdG8uCiAgKgogICogVGhlIGNhbGxlciBtdXN0IGNvbmZpcm0gZm9sbG93aW5nLgogICogLSBwYWdlIGlzIG5vdCBvbiBMUlUgKGlzb2xhdGVfcGFnZSgpIGlzIHVzZWZ1bC4pCi0gKgotICogcmV0dXJucyAwIGF0IHN1Y2Nlc3MsCi0gKiByZXR1cm5zIC1FQlVTWSB3aGVuIGxvY2sgaXMgYnVzeSBvciAicGMiIGlzIHVuc3RhYmxlLgorICogLSB0aGUgcGMgaXMgbG9ja2VkLCB1c2VkLCBhbmQgLT5tZW1fY2dyb3VwIHBvaW50cyB0byBAZnJvbS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgInVuY2hhcmdlIiBmcm9tIG9sZCBjZ3JvdXAgYnV0IGRvZXNuJ3QgZG8gImNoYXJnZSIgdG8KICAqIG5ldyBjZ3JvdXAuIEl0IHNob3VsZCBiZSBkb25lIGJ5IGEgY2FsbGVyLgogICovCiAKLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2FjY291bnQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9tb3ZlX2FjY291bnQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvKQogewotCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpmcm9tX216LCAqdG9fbXo7Ci0JaW50IG5pZCwgemlkOwotCWludCByZXQgPSAtRUJVU1k7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGNwdTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0OwpAQCAtMTQ5MiwzOCArMTY0MSwyNyBAQAogCiAJVk1fQlVHX09OKGZyb20gPT0gdG8pOwogCVZNX0JVR19PTihQYWdlTFJVKHBjLT5wYWdlKSk7Ci0KLQluaWQgPSBwYWdlX2Nncm91cF9uaWQocGMpOwotCXppZCA9IHBhZ2VfY2dyb3VwX3ppZChwYyk7Ci0JZnJvbV9teiA9ICBtZW1fY2dyb3VwX3pvbmVpbmZvKGZyb20sIG5pZCwgemlkKTsKLQl0b19teiA9ICBtZW1fY2dyb3VwX3pvbmVpbmZvKHRvLCBuaWQsIHppZCk7Ci0KLQlpZiAoIXRyeWxvY2tfcGFnZV9jZ3JvdXAocGMpKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFQYWdlQ2dyb3VwVXNlZChwYykpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHBjLT5tZW1fY2dyb3VwICE9IGZyb20pCi0JCWdvdG8gb3V0OworCVZNX0JVR19PTighUGFnZUNncm91cExvY2tlZChwYykpOworCVZNX0JVR19PTighUGFnZUNncm91cFVzZWQocGMpKTsKKwlWTV9CVUdfT04ocGMtPm1lbV9jZ3JvdXAgIT0gZnJvbSk7CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChmcm9tKSkKIAkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmZyb20tPnJlcywgUEFHRV9TSVpFKTsKIAltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKGZyb20sIHBjLCBmYWxzZSk7CiAKIAlwYWdlID0gcGMtPnBhZ2U7Ci0JaWYgKHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSAmJiBwYWdlX21hcHBlZChwYWdlKSkgeworCWlmIChwYWdlX21hcHBlZChwYWdlKSAmJiAhUGFnZUFub24ocGFnZSkpIHsKIAkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQkvKiBVcGRhdGUgbWFwcGVkX2ZpbGUgZGF0YSBmb3IgbWVtX2Nncm91cCAiZnJvbSIgKi8KIAkJc3RhdCA9ICZmcm9tLT5zdGF0OwogCQljcHVzdGF0ID0gJnN0YXQtPmNwdXN0YXRbY3B1XTsKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX01BUFBFRF9GSUxFLAorCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQsCiAJCQkJCQktMSk7CiAKIAkJLyogVXBkYXRlIG1hcHBlZF9maWxlIGRhdGEgZm9yIG1lbV9jZ3JvdXAgInRvIiAqLwogCQlzdGF0ID0gJnRvLT5zdGF0OwogCQljcHVzdGF0ID0gJnN0YXQtPmNwdXN0YXRbY3B1XTsKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX01BUFBFRF9GSUxFLAorCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQsCiAJCQkJCQkxKTsKIAl9CiAKQEAgLTE1MzQsMTUgKzE2NzIsMjggQEAKIAljc3NfZ2V0KCZ0by0+Y3NzKTsKIAlwYy0+bWVtX2Nncm91cCA9IHRvOwogCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3ModG8sIHBjLCB0cnVlKTsKLQlyZXQgPSAwOwotb3V0OgotCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJLyoKIAkgKiBXZSBjaGFyZ2VzIGFnYWluc3QgInRvIiB3aGljaCBtYXkgbm90IGhhdmUgYW55IHRhc2tzLiBUaGVuLCAidG8iCiAJICogY2FuIGJlIHVuZGVyIHJtZGlyKCkuIEJ1dCBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjYWxsZXIgb2YKIAkgKiB0aGlzIGZ1bmN0aW9uIGlzIGp1c3QgZm9yY2VfZW1wdHkoKSBhbmQgaXQncyBnYXJhbnRlZWQgdGhhdAogCSAqICJ0byIgaXMgbmV2ZXIgcmVtb3ZlZC4gU28sIHdlIGRvbid0IGNoZWNrIHJtZGlyIHN0YXR1cyBoZXJlLgogCSAqLworfQorCisvKgorICogY2hlY2sgd2hldGhlciB0aGUgQHBjIGlzIHZhbGlkIGZvciBtb3ZpbmcgYWNjb3VudCBhbmQgY2FsbAorICogX19tZW1fY2dyb3VwX21vdmVfYWNjb3VudCgpCisgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2FjY291bnQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKKwkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvKQoreworCWludCByZXQgPSAtRUlOVkFMOworCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCWlmIChQYWdlQ2dyb3VwVXNlZChwYykgJiYgcGMtPm1lbV9jZ3JvdXAgPT0gZnJvbSkgeworCQlfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBmcm9tLCB0byk7CisJCXJldCA9IDA7CisJfQorCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTU2NCw0NSArMTcxNSwyNyBAQAogCWlmICghcGNnKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJldCA9IC1FQlVTWTsKKwlpZiAoIWdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKQorCQlnb3RvIG91dDsKKwlpZiAoaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKKwkJZ290byBwdXQ7CiAKIAlwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY29udChwY2cpOwotCi0KIAlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBnZnBfbWFzaywgJnBhcmVudCwgZmFsc2UsIHBhZ2UpOwogCWlmIChyZXQgfHwgIXBhcmVudCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIHVuY2hhcmdlOwotCX0KLQotCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSk7Ci0KLQlpZiAocmV0KQotCQlnb3RvIGNhbmNlbDsKKwkJZ290byBwdXRfYmFjazsKIAogCXJldCA9IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBjaGlsZCwgcGFyZW50KTsKLQorCWlmICghcmV0KQorCQljc3NfcHV0KCZwYXJlbnQtPmNzcyk7CS8qIGRyb3AgZXh0cmEgcmVmY250IGJ5IHRyeV9jaGFyZ2UoKSAqLworCWVsc2UKKwkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHBhcmVudCk7CS8qIGRvZXMgY3NzX3B1dCAqLworcHV0X2JhY2s6CiAJcHV0YmFja19scnVfcGFnZShwYWdlKTsKLQlpZiAoIXJldCkgewotCQlwdXRfcGFnZShwYWdlKTsKLQkJLyogZHJvcCBleHRyYSByZWZjbnQgYnkgdHJ5X2NoYXJnZSgpICovCi0JCWNzc19wdXQoJnBhcmVudC0+Y3NzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi1jYW5jZWw6CitwdXQ6CiAJcHV0X3BhZ2UocGFnZSk7Ci11bmNoYXJnZToKLQkvKiBkcm9wIGV4dHJhIHJlZmNudCBieSB0cnlfY2hhcmdlKCkgKi8KLQljc3NfcHV0KCZwYXJlbnQtPmNzcyk7Ci0JLyogdW5jaGFyZ2UgaWYgbW92ZSBmYWlscyAqLwotCWlmICghbWVtX2Nncm91cF9pc19yb290KHBhcmVudCkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+cmVzLCBQQUdFX1NJWkUpOwotCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+bWVtc3csIFBBR0VfU0laRSk7Ci0JfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE3MzcsMTIgKzE4NzAsMTMgQEAKIAkJZ290byBjaGFyZ2VfY3VyX21tOwogCS8qCiAJICogQSByYWNpbmcgdGhyZWFkJ3MgZmF1bHQsIG9yIHN3YXBvZmYsIG1heSBoYXZlIGFscmVhZHkgdXBkYXRlZAotCSAqIHRoZSBwdGUsIGFuZCBldmVuIHJlbW92ZWQgcGFnZSBmcm9tIHN3YXAgY2FjaGU6IHJldHVybiBzdWNjZXNzCi0JICogdG8gZ28gb24gdG8gZG9fc3dhcF9wYWdlKCkncyBwdGVfc2FtZSgpIHRlc3QsIHdoaWNoIHNob3VsZCBmYWlsLgorCSAqIHRoZSBwdGUsIGFuZCBldmVuIHJlbW92ZWQgcGFnZSBmcm9tIHN3YXAgY2FjaGU6IGluIHRob3NlIGNhc2VzCisJICogZG9fc3dhcF9wYWdlKCkncyBwdGVfc2FtZSgpIHRlc3Qgd2lsbCBmYWlsOyBidXQgdGhlcmUncyBhbHNvIGEKKwkgKiBLU00gY2FzZSB3aGljaCBkb2VzIG5lZWQgdG8gY2hhcmdlIHRoZSBwYWdlLgogCSAqLwogCWlmICghUGFnZVN3YXBDYWNoZShwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JbWVtID0gdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fc3dhcGNhY2hlKHBhZ2UpOworCQlnb3RvIGNoYXJnZV9jdXJfbW07CisJbWVtID0gdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fcGFnZShwYWdlKTsKIAlpZiAoIW1lbSkKIAkJZ290byBjaGFyZ2VfY3VyX21tOwogCSpwdHIgPSBtZW07CkBAIC0xODE4LDE0ICsxOTUyLDUzIEBACiAJCXJldHVybjsKIAlpZiAoIW1lbSkKIAkJcmV0dXJuOwotCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwotCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7Ci0JfQotCWNzc19wdXQoJm1lbS0+Y3NzKTsKKwltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UobWVtKTsKIH0KIAorc3RhdGljIHZvaWQKK19fZG9fdW5jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgY29uc3QgZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKK3sKKwlzdHJ1Y3QgbWVtY2dfYmF0Y2hfaW5mbyAqYmF0Y2ggPSBOVUxMOworCWJvb2wgdW5jaGFyZ2VfbWVtc3cgPSB0cnVlOworCS8qIElmIHN3YXBvdXQsIHVzYWdlIG9mIHN3YXAgZG9lc24ndCBkZWNyZWFzZSAqLworCWlmICghZG9fc3dhcF9hY2NvdW50IHx8IGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKKwkJdW5jaGFyZ2VfbWVtc3cgPSBmYWxzZTsKKwkvKgorCSAqIGRvX2JhdGNoID4gMCB3aGVuIHVubWFwcGluZyBwYWdlcyBvciBpbm9kZSBpbnZhbGlkYXRlL3RydW5jYXRlLgorCSAqIEluIHRob3NlIGNhc2VzLCBhbGwgcGFnZXMgZnJlZWQgY29udGlub3VzbHkgY2FuIGJlIGV4cGVjdGVkIHRvIGJlIGluCisJICogdGhlIHNhbWUgY2dyb3VwIGFuZCB3ZSBoYXZlIGNoYW5jZSB0byBjb2FsZXNjZSB1bmNoYXJnZXMuCisJICogQnV0IHdlIGRvIHVuY2hhcmdlIG9uZSBieSBvbmUgaWYgdGhpcyBpcyBraWxsZWQgYnkgT09NKFRJRl9NRU1ESUUpCisJICogYmVjYXVzZSB3ZSB3YW50IHRvIGRvIHVuY2hhcmdlIGFzIHNvb24gYXMgcG9zc2libGUuCisJICovCisJaWYgKCFjdXJyZW50LT5tZW1jZ19iYXRjaC5kb19iYXRjaCB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKQorCQlnb3RvIGRpcmVjdF91bmNoYXJnZTsKKworCWJhdGNoID0gJmN1cnJlbnQtPm1lbWNnX2JhdGNoOworCS8qCisJICogSW4gdXN1YWwsIHdlIGRvIGNzc19nZXQoKSB3aGVuIHdlIHJlbWVtYmVyIG1lbWNnIHBvaW50ZXIuCisJICogQnV0IGluIHRoaXMgY2FzZSwgd2Uga2VlcCByZXMtPnVzYWdlIHVudGlsIGVuZCBvZiBhIHNlcmllcyBvZgorCSAqIHVuY2hhcmdlcy4gVGhlbiwgaXQncyBvayB0byBpZ25vcmUgbWVtY2cncyByZWZjbnQuCisJICovCisJaWYgKCFiYXRjaC0+bWVtY2cpCisJCWJhdGNoLT5tZW1jZyA9IG1lbTsKKwkvKgorCSAqIEluIHR5cGljYWwgY2FzZSwgYmF0Y2gtPm1lbWNnID09IG1lbS4gVGhpcyBtZWFucyB3ZSBjYW4KKwkgKiBtZXJnZSBhIHNlcmllcyBvZiB1bmNoYXJnZXMgdG8gYW4gdW5jaGFyZ2Ugb2YgcmVzX2NvdW50ZXIuCisJICogSWYgbm90LCB3ZSB1bmNoYXJnZSByZXNfY291bnRlciBvbnkgYnkgb25lLgorCSAqLworCWlmIChiYXRjaC0+bWVtY2cgIT0gbWVtKQorCQlnb3RvIGRpcmVjdF91bmNoYXJnZTsKKwkvKiByZW1lbWJlciBmcmVlZCBjaGFyZ2UgYW5kIHVuY2hhcmdlIGl0IGxhdGVyICovCisJYmF0Y2gtPmJ5dGVzICs9IFBBR0VfU0laRTsKKwlpZiAodW5jaGFyZ2VfbWVtc3cpCisJCWJhdGNoLT5tZW1zd19ieXRlcyArPSBQQUdFX1NJWkU7CisJcmV0dXJuOworZGlyZWN0X3VuY2hhcmdlOgorCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKKwlpZiAodW5jaGFyZ2VfbWVtc3cpCisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOworCXJldHVybjsKK30KIAogLyoKICAqIHVuY2hhcmdlIGlmICFwYWdlX21hcHBlZChwYWdlKQpAQCAtMTg3NCwxMiArMjA0Nyw4IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwotCQlpZiAoZG9fc3dhcF9hY2NvdW50ICYmCi0JCQkJKGN0eXBlICE9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKLQl9CisJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkKKwkJX19kb191bmNoYXJnZShtZW0sIGN0eXBlKTsKIAlpZiAoY3R5cGUgPT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKQogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyhtZW0sIHRydWUpOwogCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MobWVtLCBwYywgZmFsc2UpOwpAQCAtMTkyNSw2ICsyMDk0LDUwIEBACiAJX19tZW1fY2dyb3VwX3VuY2hhcmdlX2NvbW1vbihwYWdlLCBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFKTsKIH0KIAorLyoKKyAqIEJhdGNoX3N0YXJ0L2JhdGNoX2VuZCBpcyBjYWxsZWQgaW4gdW5tYXBfcGFnZV9yYW5nZS9pbnZsaWRhdGUvdHJ1Y2F0ZS4KKyAqIEluIHRoYXQgY2FzZXMsIHBhZ2VzIGFyZSBmcmVlZCBjb250aW51b3VzbHkgYW5kIHdlIGNhbiBleHBlY3QgcGFnZXMKKyAqIGFyZSBpbiB0aGUgc2FtZSBtZW1jZy4gQWxsIHRoZXNlIGNhbGxzIGl0c2VsZiBsaW1pdHMgdGhlIG51bWJlciBvZgorICogcGFnZXMgZnJlZWQgYXQgb25jZSwgdGhlbiB1bmNoYXJnZV9zdGFydC9lbmQoKSBpcyBjYWxsZWQgcHJvcGVybHkuCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgcHJ1cmFsKDIpIHRpbWVzIGluIGEgY29udGV4dCwKKyAqLworCit2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3RhcnQodm9pZCkKK3sKKwljdXJyZW50LT5tZW1jZ19iYXRjaC5kb19iYXRjaCsrOworCS8qIFdlIGNhbiBkbyBuZXN0LiAqLworCWlmIChjdXJyZW50LT5tZW1jZ19iYXRjaC5kb19iYXRjaCA9PSAxKSB7CisJCWN1cnJlbnQtPm1lbWNnX2JhdGNoLm1lbWNnID0gTlVMTDsKKwkJY3VycmVudC0+bWVtY2dfYmF0Y2guYnl0ZXMgPSAwOworCQljdXJyZW50LT5tZW1jZ19iYXRjaC5tZW1zd19ieXRlcyA9IDA7CisJfQorfQorCit2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfZW5kKHZvaWQpCit7CisJc3RydWN0IG1lbWNnX2JhdGNoX2luZm8gKmJhdGNoID0gJmN1cnJlbnQtPm1lbWNnX2JhdGNoOworCisJaWYgKCFiYXRjaC0+ZG9fYmF0Y2gpCisJCXJldHVybjsKKworCWJhdGNoLT5kb19iYXRjaC0tOworCWlmIChiYXRjaC0+ZG9fYmF0Y2gpIC8qIElmIHN0YWNrZWQsIGRvIG5vdGhpbmcuICovCisJCXJldHVybjsKKworCWlmICghYmF0Y2gtPm1lbWNnKQorCQlyZXR1cm47CisJLyoKKwkgKiBUaGlzICJiYXRjaC0+bWVtY2ciIGlzIHZhbGlkIHdpdGhvdXQgYW55IGNzc19nZXQvcHV0IGV0Yy4uLgorCSAqIGJhY2F1c2Ugd2UgaGlkZSBjaGFyZ2VzIGJlaGluZCB1cy4KKwkgKi8KKwlpZiAoYmF0Y2gtPmJ5dGVzKQorCQlyZXNfY291bnRlcl91bmNoYXJnZSgmYmF0Y2gtPm1lbWNnLT5yZXMsIGJhdGNoLT5ieXRlcyk7CisJaWYgKGJhdGNoLT5tZW1zd19ieXRlcykKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmJhdGNoLT5tZW1jZy0+bWVtc3csIGJhdGNoLT5tZW1zd19ieXRlcyk7CisJLyogZm9yZ2V0IHRoaXMgcG9pbnRlciAoZm9yIHNhbml0eSBjaGVjaykgKi8KKwliYXRjaC0+bWVtY2cgPSBOVUxMOworfQorCiAjaWZkZWYgQ09ORklHX1NXQVAKIC8qCiAgKiBjYWxsZWQgYWZ0ZXIgX19kZWxldGVfZnJvbV9zd2FwX2NhY2hlKCkgYW5kIGRyb3AgInBhZ2UiIGFjY291bnQuCkBAIC0yMTAwLDcgKzIzMTMsNiBAQAogCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCiB7CiAJaW50IHJldHJ5X2NvdW50OwotCWludCBwcm9ncmVzczsKIAl1NjQgbWVtc3dsaW1pdDsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgY2hpbGRyZW4gPSBtZW1fY2dyb3VwX2NvdW50X2NoaWxkcmVuKG1lbWNnKTsKQEAgLTIxNDQsOCArMjM1Niw3IEBACiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAKLQkJcHJvZ3Jlc3MgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbWNnLCBOVUxMLAotCQkJCQkJR0ZQX0tFUk5FTCwKKwkJbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1jZywgTlVMTCwgR0ZQX0tFUk5FTCwKIAkJCQkJCU1FTV9DR1JPVVBfUkVDTEFJTV9TSFJJTkspOwogCQljdXJ1c2FnZSA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpOwogCQkvKiBVc2FnZSBpcyByZWR1Y2VkID8gKi8KQEAgLTIzODQsNiArMjU5NSw3IEBACiAJCQlnb3RvIG91dDsKIAkJLyogVGhpcyBpcyBmb3IgbWFraW5nIGFsbCAqdXNlZCogcGFnZXMgdG8gYmUgb24gTFJVLiAqLwogCQlscnVfYWRkX2RyYWluX2FsbCgpOworCQlkcmFpbl9hbGxfc3RvY2tfc3luYygpOwogCQlyZXQgPSAwOwogCQlmb3JfZWFjaF9ub2RlX3N0YXRlKG5vZGUsIE5fSElHSF9NRU1PUlkpIHsKIAkJCWZvciAoemlkID0gMDsgIXJldCAmJiB6aWQgPCBNQVhfTlJfWk9ORVM7IHppZCsrKSB7CkBAIC0yNTQxLDYgKzI3NTMsNyBAQAogCQkJdmFsICs9IGlkeF92YWw7CiAJCQltZW1fY2dyb3VwX2dldF9yZWN1cnNpdmVfaWR4X3N0YXQobWVtLAogCQkJCU1FTV9DR1JPVVBfU1RBVF9TV0FQT1VULCAmaWR4X3ZhbCk7CisJCQl2YWwgKz0gaWR4X3ZhbDsKIAkJCXZhbCA8PD0gUEFHRV9TSElGVDsKIAkJfSBlbHNlCiAJCQl2YWwgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtLT5tZW1zdywgbmFtZSk7CkBAIC0yNjYwLDcgKzI4NzMsNyBAQAogZW51bSB7CiAJTUNTX0NBQ0hFLAogCU1DU19SU1MsCi0JTUNTX01BUFBFRF9GSUxFLAorCU1DU19GSUxFX01BUFBFRCwKIAlNQ1NfUEdQR0lOLAogCU1DU19QR1BHT1VULAogCU1DU19TV0FQLApAQCAtMjcwNCw4ICsyOTE3LDggQEAKIAlzLT5zdGF0W01DU19DQUNIRV0gKz0gdmFsICogUEFHRV9TSVpFOwogCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MpOwogCXMtPnN0YXRbTUNTX1JTU10gKz0gdmFsICogUEFHRV9TSVpFOwotCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9NQVBQRURfRklMRSk7Ci0Jcy0+c3RhdFtNQ1NfTUFQUEVEX0ZJTEVdICs9IHZhbCAqIFBBR0VfU0laRTsKKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQpOworCXMtPnN0YXRbTUNTX0ZJTEVfTUFQUEVEXSArPSB2YWwgKiBQQUdFX1NJWkU7CiAJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVCk7CiAJcy0+c3RhdFtNQ1NfUEdQR0lOXSArPSB2YWw7CiAJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQpOwpAQCAtMzA5NywxMSArMzMxMCwxOCBAQAogCiAJLyogcm9vdCA/ICovCiAJaWYgKGNvbnQtPnBhcmVudCA9PSBOVUxMKSB7CisJCWludCBjcHU7CiAJCWVuYWJsZV9zd2FwX2Nncm91cCgpOwogCQlwYXJlbnQgPSBOVUxMOwogCQlyb290X21lbV9jZ3JvdXAgPSBtZW07CiAJCWlmIChtZW1fY2dyb3VwX3NvZnRfbGltaXRfdHJlZV9pbml0KCkpCiAJCQlnb3RvIGZyZWVfb3V0OworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9CisJCQkJCQkmcGVyX2NwdShtZW1jZ19zdG9jaywgY3B1KTsKKwkJCUlOSVRfV09SSygmc3RvY2stPndvcmssIGRyYWluX2xvY2FsX3N0b2NrKTsKKwkJfQorCQlob3RjcHVfbm90aWZpZXIobWVtY2dfc3RvY2tfY3B1X2NhbGxiYWNrLCAwKTsKIAogCX0gZWxzZSB7CiAJCXBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNvbnQtPnBhcmVudCk7CkBAIC0zMTcwLDEyICszMzkwLDEwIEBACiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCWJvb2wgdGhyZWFkZ3JvdXApCiB7Ci0JbXV0ZXhfbG9jaygmbWVtY2dfdGFza2xpc3QpOwogCS8qCiAJICogRklYTUU6IEl0J3MgYmV0dGVyIHRvIG1vdmUgY2hhcmdlcyBvZiB0aGlzIHByb2Nlc3MgZnJvbSBvbGQKIAkgKiBtZW1jZyB0byBuZXcgbWVtY2cuIEJ1dCBpdCdzIGp1c3Qgb24gVE9ETy1MaXN0IG5vdy4KIAkgKi8KLQltdXRleF91bmxvY2soJm1lbWNnX3Rhc2tsaXN0KTsKIH0KIAogc3RydWN0IGNncm91cF9zdWJzeXMgbWVtX2Nncm91cF9zdWJzeXMgPSB7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCAxYWM0OWZlLi42YTA0NjZlIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTM0LDEyICszNCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rc20uaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWlzb2xhdGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGwgX19yZWFkX21vc3RseSA9IDA7CkBAIC00OCw2ICs1MiwxMjAgQEAKIAogYXRvbWljX2xvbmdfdCBtY2VfYmFkX3BhZ2VzIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfTE9OR19JTklUKDApOwogCit1MzIgaHdwb2lzb25fZmlsdGVyX2VuYWJsZSA9IDA7Cit1MzIgaHdwb2lzb25fZmlsdGVyX2Rldl9tYWpvciA9IH4wVTsKK3UzMiBod3BvaXNvbl9maWx0ZXJfZGV2X21pbm9yID0gfjBVOwordTY0IGh3cG9pc29uX2ZpbHRlcl9mbGFnc19tYXNrOwordTY0IGh3cG9pc29uX2ZpbHRlcl9mbGFnc192YWx1ZTsKK0VYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcl9lbmFibGUpOworRVhQT1JUX1NZTUJPTF9HUEwoaHdwb2lzb25fZmlsdGVyX2Rldl9tYWpvcik7CitFWFBPUlRfU1lNQk9MX0dQTChod3BvaXNvbl9maWx0ZXJfZGV2X21pbm9yKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcl9mbGFnc19tYXNrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcl9mbGFnc192YWx1ZSk7CisKK3N0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2RldihzdHJ1Y3QgcGFnZSAqcCkKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlkZXZfdCBkZXY7CisKKwlpZiAoaHdwb2lzb25fZmlsdGVyX2Rldl9tYWpvciA9PSB+MFUgJiYKKwkgICAgaHdwb2lzb25fZmlsdGVyX2Rldl9taW5vciA9PSB+MFUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBwYWdlX21hcHBpbmcoKSBkb2VzIG5vdCBhY2NlcHQgc2xhYiBwYWdlCisJICovCisJaWYgKFBhZ2VTbGFiKHApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocCk7CisJaWYgKG1hcHBpbmcgPT0gTlVMTCB8fCBtYXBwaW5nLT5ob3N0ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2ID0gbWFwcGluZy0+aG9zdC0+aV9zYi0+c19kZXY7CisJaWYgKGh3cG9pc29uX2ZpbHRlcl9kZXZfbWFqb3IgIT0gfjBVICYmCisJICAgIGh3cG9pc29uX2ZpbHRlcl9kZXZfbWFqb3IgIT0gTUFKT1IoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh3cG9pc29uX2ZpbHRlcl9kZXZfbWlub3IgIT0gfjBVICYmCisJICAgIGh3cG9pc29uX2ZpbHRlcl9kZXZfbWlub3IgIT0gTUlOT1IoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApCit7CisJaWYgKCFod3BvaXNvbl9maWx0ZXJfZmxhZ3NfbWFzaykKKwkJcmV0dXJuIDA7CisKKwlpZiAoKHN0YWJsZV9wYWdlX2ZsYWdzKHApICYgaHdwb2lzb25fZmlsdGVyX2ZsYWdzX21hc2spID09CisJCQkJICAgIGh3cG9pc29uX2ZpbHRlcl9mbGFnc192YWx1ZSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIFRoaXMgYWxsb3dzIHN0cmVzcyB0ZXN0cyB0byBsaW1pdCB0ZXN0IHNjb3BlIHRvIGEgY29sbGVjdGlvbiBvZiB0YXNrcworICogYnkgcHV0dGluZyB0aGVtIHVuZGVyIHNvbWUgbWVtY2cuIFRoaXMgcHJldmVudHMga2lsbGluZyB1bnJlbGF0ZWQvaW1wb3J0YW50CisgKiBwcm9jZXNzZXMgc3VjaCBhcyAvc2Jpbi9pbml0LiBOb3RlIHRoYXQgdGhlIHRhcmdldCB0YXNrIG1heSBzaGFyZSBjbGVhbgorICogcGFnZXMgd2l0aCBpbml0IChlZy4gbGliYyB0ZXh0KSwgd2hpY2ggaXMgaGFybWxlc3MuIElmIHRoZSB0YXJnZXQgdGFzaworICogc2hhcmUgX2RpcnR5XyBwYWdlcyB3aXRoIGFub3RoZXIgdGFzayBCLCB0aGUgdGVzdCBzY2hlbWUgbXVzdCBtYWtlIHN1cmUgQgorICogaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgbWVtY2cuIEF0IGxhc3QsIGR1ZSB0byByYWNlIGNvbmRpdGlvbnMgdGhpcyBmaWx0ZXIKKyAqIGNhbiBvbmx5IGd1YXJhbnRlZSB0aGF0IHRoZSBwYWdlIGVpdGhlciBiZWxvbmdzIHRvIHRoZSBtZW1jZyB0YXNrcywgb3IgaXMKKyAqIGEgZnJlZWQgcGFnZS4KKyAqLworI2lmZGVmCUNPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKK3U2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7CitFWFBPUlRfU1lNQk9MX0dQTChod3BvaXNvbl9maWx0ZXJfbWVtY2cpOworc3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfdGFzayhzdHJ1Y3QgcGFnZSAqcCkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJdW5zaWduZWQgbG9uZyBpbm87CisKKwlpZiAoIWh3cG9pc29uX2ZpbHRlcl9tZW1jZykKKwkJcmV0dXJuIDA7CisKKwltZW0gPSB0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9wYWdlKHApOworCWlmICghbWVtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNzcyA9IG1lbV9jZ3JvdXBfY3NzKG1lbSk7CisJLyogcm9vdF9tZW1fY2dyb3VwIGhhcyBOVUxMIGRlbnRyaWVzICovCisJaWYgKCFjc3MtPmNncm91cC0+ZGVudHJ5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlubyA9IGNzcy0+Y2dyb3VwLT5kZW50cnktPmRfaW5vZGUtPmlfaW5vOworCWNzc19wdXQoY3NzKTsKKworCWlmIChpbm8gIT0gaHdwb2lzb25fZmlsdGVyX21lbWNnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX3Rhc2soc3RydWN0IHBhZ2UgKnApIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCitpbnQgaHdwb2lzb25fZmlsdGVyKHN0cnVjdCBwYWdlICpwKQoreworCWlmICghaHdwb2lzb25fZmlsdGVyX2VuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaHdwb2lzb25fZmlsdGVyX2RldihwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChod3BvaXNvbl9maWx0ZXJfdGFzayhwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGh3cG9pc29uX2ZpbHRlcik7CisKIC8qCiAgKiBTZW5kIGFsbCB0aGUgcHJvY2Vzc2VzIHdobyBoYXZlIHRoZSBwYWdlIG1hcHBlZCBhbiBgYGFjdGlvbiBvcHRpb25hbCcnCiAgKiBzaWduYWwuCkBAIC04Myw2ICsyMDEsMzYgQEAKIH0KIAogLyoKKyAqIFdoZW4gYSB1bmtub3duIHBhZ2UgdHlwZSBpcyBlbmNvdW50ZXJlZCBkcmFpbiBhcyBtYW55IGJ1ZmZlcnMgYXMgcG9zc2libGUKKyAqIGluIHRoZSBob3BlIHRvIHR1cm4gdGhlIHBhZ2UgaW50byBhIExSVSBvciBmcmVlIHBhZ2UsIHdoaWNoIHdlIGNhbiBoYW5kbGUuCisgKi8KK3ZvaWQgc2hha2VfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgaW50IGFjY2VzcykKK3sKKwlpZiAoIVBhZ2VTbGFiKHApKSB7CisJCWxydV9hZGRfZHJhaW5fYWxsKCk7CisJCWlmIChQYWdlTFJVKHApKQorCQkJcmV0dXJuOworCQlkcmFpbl9hbGxfcGFnZXMoKTsKKwkJaWYgKFBhZ2VMUlUocCkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHApKQorCQkJcmV0dXJuOworCX0KKworCS8qCisJICogT25seSBhbGwgc2hyaW5rX3NsYWIgaGVyZSAod2hpY2ggd291bGQgYWxzbworCSAqIHNocmluayBvdGhlciBjYWNoZXMpIGlmIGFjY2VzcyBpcyBub3QgcG90ZW50aWFsbHkgZmF0YWwuCisJICovCisJaWYgKGFjY2VzcykgeworCQlpbnQgbnI7CisJCWRvIHsKKwkJCW5yID0gc2hyaW5rX3NsYWIoMTAwMCwgR0ZQX0tFUk5FTCwgMTAwMCk7CisJCQlpZiAocGFnZV9jb3VudChwKSA9PSAwKQorCQkJCWJyZWFrOworCQl9IHdoaWxlIChuciA+IDEwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzaGFrZV9wYWdlKTsKKworLyoKICAqIEtpbGwgYWxsIHByb2Nlc3NlcyB0aGF0IGhhdmUgYSBwb2lzb25lZCBwYWdlIG1hcHBlZCBhbmQgdGhlbiBpc29sYXRlCiAgKiB0aGUgcGFnZS4KICAqCkBAIC0xNzcsNyArMzI1LDYgQEAKIAkJCSAqIEluIGNhc2Ugc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBtdW5tYXBwaW5nCiAJCQkgKiBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgZG9lc24ndCBjYXRjaCB0aGUKIAkJCSAqIHNpZ25hbCBhbmQgdGhlbiBhY2Nlc3MgdGhlIG1lbW9yeS4gSnVzdCBraWxsIGl0LgotCQkJICogdGhlIHNpZ25hbCBoYW5kbGVycwogCQkJICovCiAJCQlpZiAoZmFpbCB8fCB0ay0+YWRkcl92YWxpZCA9PSAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0zMTQsMzQgKzQ2MSw1MCBAQAogICovCiAKIGVudW0gb3V0Y29tZSB7Ci0JRkFJTEVELAkJLyogRXJyb3IgaGFuZGxpbmcgZmFpbGVkICovCisJSUdOT1JFRCwJLyogRXJyb3I6IGNhbm5vdCBiZSBoYW5kbGVkICovCisJRkFJTEVELAkJLyogRXJyb3I6IGhhbmRsaW5nIGZhaWxlZCAqLwogCURFTEFZRUQsCS8qIFdpbGwgYmUgaGFuZGxlZCBsYXRlciAqLwotCUlHTk9SRUQsCS8qIEVycm9yIHNhZmVseSBpZ25vcmVkICovCiAJUkVDT1ZFUkVELAkvKiBTdWNjZXNzZnVsbHkgcmVjb3ZlcmVkICovCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqYWN0aW9uX25hbWVbXSA9IHsKKwlbSUdOT1JFRF0gPSAiSWdub3JlZCIsCiAJW0ZBSUxFRF0gPSAiRmFpbGVkIiwKIAlbREVMQVlFRF0gPSAiRGVsYXllZCIsCi0JW0lHTk9SRURdID0gIklnbm9yZWQiLAogCVtSRUNPVkVSRURdID0gIlJlY292ZXJlZCIsCiB9OwogCiAvKgorICogWFhYOiBJdCBpcyBwb3NzaWJsZSB0aGF0IGEgcGFnZSBpcyBpc29sYXRlZCBmcm9tIExSVSBjYWNoZSwKKyAqIGFuZCB0aGVuIGtlcHQgaW4gc3dhcCBjYWNoZSBvciBmYWlsZWQgdG8gcmVtb3ZlIGZyb20gcGFnZSBjYWNoZS4KKyAqIFRoZSBwYWdlIGNvdW50IHdpbGwgc3RvcCBpdCBmcm9tIGJlaW5nIGZyZWVkIGJ5IHVucG9pc29uLgorICogU3RyZXNzIHRlc3RzIHNob3VsZCBiZSBhd2FyZSBvZiB0aGlzIG1lbW9yeSBsZWFrIHByb2JsZW0uCisgKi8KK3N0YXRpYyBpbnQgZGVsZXRlX2Zyb21fbHJ1X2NhY2hlKHN0cnVjdCBwYWdlICpwKQoreworCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkgeworCQkvKgorCQkgKiBDbGVhciBzZW5zaWJsZSBwYWdlIGZsYWdzLCBzbyB0aGF0IHRoZSBidWRkeSBzeXN0ZW0gd29uJ3QKKwkJICogY29tcGxhaW4gd2hlbiB0aGUgcGFnZSBpcyB1bnBvaXNvbi1hbmQtZnJlZWQuCisJCSAqLworCQlDbGVhclBhZ2VBY3RpdmUocCk7CisJCUNsZWFyUGFnZVVuZXZpY3RhYmxlKHApOworCQkvKgorCQkgKiBkcm9wIHRoZSBwYWdlIGNvdW50IGVsZXZhdGVkIGJ5IGlzb2xhdGVfbHJ1X3BhZ2UoKQorCQkgKi8KKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCiAgKiBFcnJvciBoaXQga2VybmVsIHBhZ2UuCiAgKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZQogICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLgogICovCiBzdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JcmV0dXJuIERFTEFZRUQ7Ci19Ci0KLS8qCi0gKiBBbHJlYWR5IHBvaXNvbmVkIHBhZ2UuCi0gKi8KLXN0YXRpYyBpbnQgbWVfaWdub3JlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKIAlyZXR1cm4gSUdOT1JFRDsKIH0KIApAQCAtMzU1LDE0ICs1MTgsNiBAQAogfQogCiAvKgotICogRnJlZSBtZW1vcnkKLSAqLwotc3RhdGljIGludCBtZV9mcmVlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlyZXR1cm4gREVMQVlFRDsKLX0KLQotLyoKICAqIENsZWFuIChvciBjbGVhbmVkKSBwYWdlIGNhY2hlIHBhZ2UuCiAgKi8KIHN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKQEAgLTM3MSw2ICs1MjYsOCBAQAogCWludCByZXQgPSBGQUlMRUQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKKwlkZWxldGVfZnJvbV9scnVfY2FjaGUocCk7CisKIAkvKgogCSAqIEZvciBhbm9ueW1vdXMgcGFnZXMgd2UncmUgZG9uZSB0aGUgb25seSByZWZlcmVuY2UgbGVmdAogCSAqIHNob3VsZCBiZSB0aGUgb25lIG1fZigpIGhvbGRzLgpAQCAtNTAwLDE0ICs2NTcsMjAgQEAKIAkvKiBUcmlnZ2VyIEVJTyBpbiBzaG1lbTogKi8KIAlDbGVhclBhZ2VVcHRvZGF0ZShwKTsKIAotCXJldHVybiBERUxBWUVEOworCWlmICghZGVsZXRlX2Zyb21fbHJ1X2NhY2hlKHApKQorCQlyZXR1cm4gREVMQVlFRDsKKwllbHNlCisJCXJldHVybiBGQUlMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKIAlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHApOwogCi0JcmV0dXJuIFJFQ09WRVJFRDsKKwlpZiAoIWRlbGV0ZV9mcm9tX2xydV9jYWNoZShwKSkKKwkJcmV0dXJuIFJFQ09WRVJFRDsKKwllbHNlCisJCXJldHVybiBGQUlMRUQ7CiB9CiAKIC8qCkBAIC01NTAsNyArNzEzLDYgQEAKICNkZWZpbmUgdGFpbAkJKDFVTCA8PCBQR190YWlsKQogI2RlZmluZSBjb21wb3VuZAkoMVVMIDw8IFBHX2NvbXBvdW5kKQogI2RlZmluZSBzbGFiCQkoMVVMIDw8IFBHX3NsYWIpCi0jZGVmaW5lIGJ1ZGR5CQkoMVVMIDw8IFBHX2J1ZGR5KQogI2RlZmluZSByZXNlcnZlZAkoMVVMIDw8IFBHX3Jlc2VydmVkKQogCiBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgewpAQCAtNTU5LDggKzcyMSwxMSBAQAogCWNoYXIgKm1zZzsKIAlpbnQgKCphY3Rpb24pKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbik7CiB9IGVycm9yX3N0YXRlc1tdID0gewotCXsgcmVzZXJ2ZWQsCXJlc2VydmVkLAkicmVzZXJ2ZWQga2VybmVsIiwJbWVfaWdub3JlIH0sCi0JeyBidWRkeSwJYnVkZHksCQkiZnJlZSBrZXJuZWwiLAltZV9mcmVlIH0sCisJeyByZXNlcnZlZCwJcmVzZXJ2ZWQsCSJyZXNlcnZlZCBrZXJuZWwiLAltZV9rZXJuZWwgfSwKKwkvKgorCSAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6CisJICogUEdfYnVkZHkgcGFnZXMgb25seSBtYWtlIGEgc21hbGwgZnJhY3Rpb24gb2YgYWxsIGZyZWUgcGFnZXMuCisJICovCiAKIAkvKgogCSAqIENvdWxkIGluIHRoZW9yeSBjaGVjayBpZiBzbGFiIHBhZ2UgaXMgZnJlZSBvciBpZiB3ZSBjYW4gZHJvcApAQCAtNTgyLDE0ICs3NDcsMTEgQEAKIAl7IHVuZXZpY3R8ZGlydHksIHVuZXZpY3R8ZGlydHksCSJ1bmV2aWN0YWJsZSBMUlUiLCBtZV9wYWdlY2FjaGVfZGlydHl9LAogCXsgdW5ldmljdCwJdW5ldmljdCwJInVuZXZpY3RhYmxlIExSVSIsIG1lX3BhZ2VjYWNoZV9jbGVhbn0sCiAKLSNpZmRlZiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUCiAJeyBtbG9ja3xkaXJ0eSwJbWxvY2t8ZGlydHksCSJtbG9ja2VkIExSVSIsCW1lX3BhZ2VjYWNoZV9kaXJ0eSB9LAogCXsgbWxvY2ssCW1sb2NrLAkJIm1sb2NrZWQgTFJVIiwJbWVfcGFnZWNhY2hlX2NsZWFuIH0sCi0jZW5kaWYKIAogCXsgbHJ1fGRpcnR5LAlscnV8ZGlydHksCSJMUlUiLAkJbWVfcGFnZWNhY2hlX2RpcnR5IH0sCiAJeyBscnV8ZGlydHksCWxydSwJCSJjbGVhbiBMUlUiLAltZV9wYWdlY2FjaGVfY2xlYW4gfSwKLQl7IHN3YXBiYWNrZWQsCXN3YXBiYWNrZWQsCSJhbm9ueW1vdXMiLAltZV9wYWdlY2FjaGVfY2xlYW4gfSwKIAogCS8qCiAJICogQ2F0Y2hhbGwgZW50cnk6IG11c3QgYmUgYXQgZW5kLgpAQCAtNTk3LDIwICs3NTksMzEgQEAKIAl7IDAsCQkwLAkJInVua25vd24gcGFnZSBzdGF0ZSIsCW1lX3Vua25vd24gfSwKIH07CiAKKyN1bmRlZiBkaXJ0eQorI3VuZGVmIHNjCisjdW5kZWYgdW5ldmljdAorI3VuZGVmIG1sb2NrCisjdW5kZWYgd3JpdGViYWNrCisjdW5kZWYgbHJ1CisjdW5kZWYgc3dhcGJhY2tlZAorI3VuZGVmIGhlYWQKKyN1bmRlZiB0YWlsCisjdW5kZWYgY29tcG91bmQKKyN1bmRlZiBzbGFiCisjdW5kZWYgcmVzZXJ2ZWQKKwogc3RhdGljIHZvaWQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgY2hhciAqbXNnLCBpbnQgcmVzdWx0KQogewotCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCi0JCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAogCXByaW50ayhLRVJOX0VSUiAiTUNFICUjbHg6ICVzJXMgcGFnZSByZWNvdmVyeTogJXNcbiIsCiAJCXBmbiwKLQkJcGFnZSAmJiBQYWdlRGlydHkocGFnZSkgPyAiZGlydHkgIiA6ICIiLAorCQlQYWdlRGlydHkocGFnZSkgPyAiZGlydHkgIiA6ICIiLAogCQltc2csIGFjdGlvbl9uYW1lW3Jlc3VsdF0pOwogfQogCiBzdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsCi0JCQl1bnNpZ25lZCBsb25nIHBmbiwgaW50IHJlZikKKwkJCXVuc2lnbmVkIGxvbmcgcGZuKQogewogCWludCByZXN1bHQ7CiAJaW50IGNvdW50OwpAQCAtNjE4LDE4ICs3OTEsMjIgQEAKIAlyZXN1bHQgPSBwcy0+YWN0aW9uKHAsIHBmbik7CiAJYWN0aW9uX3Jlc3VsdChwZm4sIHBzLT5tc2csIHJlc3VsdCk7CiAKLQljb3VudCA9IHBhZ2VfY291bnQocCkgLSAxIC0gcmVmOwotCWlmIChjb3VudCAhPSAwKQorCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDE7CisJaWYgKHBzLT5hY3Rpb24gPT0gbWVfc3dhcGNhY2hlX2RpcnR5ICYmIHJlc3VsdCA9PSBERUxBWUVEKQorCQljb3VudC0tOworCWlmIChjb3VudCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIk1DRSAlI2x4OiAlcyBwYWdlIHN0aWxsIHJlZmVyZW5jZWQgYnkgJWQgdXNlcnNcbiIsCiAJCSAgICAgICBwZm4sIHBzLT5tc2csIGNvdW50KTsKKwkJcmVzdWx0ID0gRkFJTEVEOworCX0KIAogCS8qIENvdWxkIGRvIG1vcmUgY2hlY2tzIGhlcmUgaWYgcGFnZSBsb29rcyBvayAqLwogCS8qCiAJICogQ291bGQgYWRqdXN0IHpvbmUgY291bnRlcnMgaGVyZSB0byBjb3JyZWN0IGZvciB0aGUgbWlzc2luZyBwYWdlLgogCSAqLwogCi0JcmV0dXJuIHJlc3VsdCA9PSBSRUNPVkVSRUQgPyAwIDogLUVCVVNZOworCXJldHVybiAocmVzdWx0ID09IFJFQ09WRVJFRCB8fCByZXN1bHQgPT0gREVMQVlFRCkgPyAwIDogLUVCVVNZOwogfQogCiAjZGVmaW5lIE5fVU5NQVBfVFJJRVMgNQpAQCAtNjM4LDcgKzgxNSw3IEBACiAgKiBEbyBhbGwgdGhhdCBpcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIHVzZXIgc3BhY2UgbWFwcGluZ3MuIFVubWFwCiAgKiB0aGUgcGFnZXMgYW5kIHNlbmQgU0lHQlVTIHRvIHRoZSBwcm9jZXNzZXMgaWYgdGhlIGRhdGEgd2FzIGRpcnR5LgogICovCi1zdGF0aWMgdm9pZCBod3BvaXNvbl91c2VyX21hcHBpbmdzKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbiwKK3N0YXRpYyBpbnQgaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJICBpbnQgdHJhcG5vKQogewogCWVudW0gdHR1X2ZsYWdzIHR0dSA9IFRUVV9VTk1BUCB8IFRUVV9JR05PUkVfTUxPQ0sgfCBUVFVfSUdOT1JFX0FDQ0VTUzsKQEAgLTY0OCwxNSArODI1LDE4IEBACiAJaW50IGk7CiAJaW50IGtpbGwgPSAxOwogCi0JaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlQ29tcG91bmQocCkgfHwgUGFnZVNsYWIocCkgfHwgUGFnZUtzbShwKSkKLQkJcmV0dXJuOworCWlmIChQYWdlUmVzZXJ2ZWQocCkgfHwgUGFnZVNsYWIocCkpCisJCXJldHVybiBTV0FQX1NVQ0NFU1M7CiAKIAkvKgogCSAqIFRoaXMgY2hlY2sgaW1wbGllcyB3ZSBkb24ndCBraWxsIHByb2Nlc3NlcyBpZiB0aGVpciBwYWdlcwogCSAqIGFyZSBpbiB0aGUgc3dhcCBjYWNoZSBlYXJseS4gVGhvc2UgYXJlIGFsd2F5cyBsYXRlIGtpbGxzLgogCSAqLwogCWlmICghcGFnZV9tYXBwZWQocCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIFNXQVBfU1VDQ0VTUzsKKworCWlmIChQYWdlQ29tcG91bmQocCkgfHwgUGFnZUtzbShwKSkKKwkJcmV0dXJuIFNXQVBfRkFJTDsKIAogCWlmIChQYWdlU3dhcENhY2hlKHApKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtNjY3LDYgKzg0Nyw4IEBACiAJLyoKIAkgKiBQcm9wYWdhdGUgdGhlIGRpcnR5IGJpdCBmcm9tIFBURXMgdG8gc3RydWN0IHBhZ2UgZmlyc3QsIGJlY2F1c2Ugd2UKIAkgKiBuZWVkIHRoaXMgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCBraWxsIG9yIGp1c3QgZHJvcCB0aGUgcGFnZS4KKwkgKiBYWFg6IHRoZSBkaXJ0eSB0ZXN0IGNvdWxkIGJlIHJhY3k6IHNldF9wYWdlX2RpcnR5KCkgbWF5IG5vdCBhbHdheXMKKwkgKiBiZSBjYWxsZWQgaW5zaWRlIHBhZ2UgbG9jayAoaXQncyByZWNvbW1lbmRlZCBidXQgbm90IGVuZm9yY2VkKS4KIAkgKi8KIAltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHApOwogCWlmICghUGFnZURpcnR5KHApICYmIG1hcHBpbmcgJiYgbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KG1hcHBpbmcpKSB7CkBAIC03MTgsMTEgKzkwMCwxMiBAQAogCSAqLwogCWtpbGxfcHJvY3NfYW8oJnRva2lsbCwgISFQYWdlRGlydHkocCksIHRyYXBubywKIAkJICAgICAgcmV0ICE9IFNXQVBfU1VDQ0VTUywgcGZuKTsKKworCXJldHVybiByZXQ7CiB9CiAKLWludCBfX21lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgdHJhcG5vLCBpbnQgcmVmKQoraW50IF9fbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCB0cmFwbm8sIGludCBmbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIGxydV9mbGFnOwogCXN0cnVjdCBwYWdlX3N0YXRlICpwczsKIAlzdHJ1Y3QgcGFnZSAqcDsKIAlpbnQgcmVzOwpAQCAtNzMxLDEzICs5MTQsMTUgQEAKIAkJcGFuaWMoIk1lbW9yeSBmYWlsdXJlIGZyb20gdHJhcCAlZCBvbiBwYWdlICVseCIsIHRyYXBubywgcGZuKTsKIAogCWlmICghcGZuX3ZhbGlkKHBmbikpIHsKLQkJYWN0aW9uX3Jlc3VsdChwZm4sICJtZW1vcnkgb3V0c2lkZSBrZXJuZWwgY29udHJvbCIsIElHTk9SRUQpOwotCQlyZXR1cm4gLUVJTzsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUNFICUjbHg6IG1lbW9yeSBvdXRzaWRlIGtlcm5lbCBjb250cm9sXG4iLAorCQkgICAgICAgcGZuKTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKIAlwID0gcGZuX3RvX3BhZ2UocGZuKTsKIAlpZiAoVGVzdFNldFBhZ2VIV1BvaXNvbihwKSkgewotCQlhY3Rpb25fcmVzdWx0KHBmbiwgImFscmVhZHkgaGFyZHdhcmUgcG9pc29uZWQiLCBJR05PUkVEKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJNQ0UgJSNseDogYWxyZWFkeSBoYXJkd2FyZSBwb2lzb25lZFxuIiwgcGZuKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03NTQsOSArOTM5LDE1IEBACiAJICogSW4gZmFjdCBpdCdzIGRhbmdlcm91cyB0byBkaXJlY3RseSBidW1wIHVwIHBhZ2UgY291bnQgZnJvbSAwLAogCSAqIHRoYXQgbWF5IG1ha2UgcGFnZV9mcmVlemVfcmVmcygpL3BhZ2VfdW5mcmVlemVfcmVmcygpIG1pc21hdGNoLgogCSAqLwotCWlmICghZ2V0X3BhZ2VfdW5sZXNzX3plcm8oY29tcG91bmRfaGVhZChwKSkpIHsKLQkJYWN0aW9uX3Jlc3VsdChwZm4sICJmcmVlIG9yIGhpZ2ggb3JkZXIga2VybmVsIiwgSUdOT1JFRCk7Ci0JCXJldHVybiBQYWdlQnVkZHkoY29tcG91bmRfaGVhZChwKSkgPyAwIDogLUVCVVNZOworCWlmICghKGZsYWdzICYgTUZfQ09VTlRfSU5DUkVBU0VEKSAmJgorCQkhZ2V0X3BhZ2VfdW5sZXNzX3plcm8oY29tcG91bmRfaGVhZChwKSkpIHsKKwkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgeworCQkJYWN0aW9uX3Jlc3VsdChwZm4sICJmcmVlIGJ1ZGR5IiwgREVMQVlFRCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWFjdGlvbl9yZXN1bHQocGZuLCAiaGlnaCBvcmRlciBrZXJuZWwiLCBJR05PUkVEKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KIAl9CiAKIAkvKgpAQCAtNzY4LDE0ICs5NTksMTkgQEAKIAkgKiB3YWxrZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLCBob3dldmVyIHRoYXQncyBub3QgYSBiaWcgbG9zcy4KIAkgKi8KIAlpZiAoIVBhZ2VMUlUocCkpCi0JCWxydV9hZGRfZHJhaW5fYWxsKCk7Ci0JbHJ1X2ZsYWcgPSBwLT5mbGFncyAmIGxydTsKLQlpZiAoaXNvbGF0ZV9scnVfcGFnZShwKSkgeworCQlzaGFrZV9wYWdlKHAsIDApOworCWlmICghUGFnZUxSVShwKSkgeworCQkvKgorCQkgKiBzaGFrZV9wYWdlIGNvdWxkIGhhdmUgdHVybmVkIGl0IGZyZWUuCisJCSAqLworCQlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7CisJCQlhY3Rpb25fcmVzdWx0KHBmbiwgImZyZWUgYnVkZHksIDJuZCB0cnkiLCBERUxBWUVEKTsKKwkJCXJldHVybiAwOworCQl9CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOwogCQlwdXRfcGFnZShwKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JcGFnZV9jYWNoZV9yZWxlYXNlKHApOwogCiAJLyoKIAkgKiBMb2NrIHRoZSBwYWdlIGFuZCB3YWl0IGZvciB3cml0ZWJhY2sgdG8gZmluaXNoLgpAQCAtNzgzLDI2ICs5NzksNDggQEAKIAkgKiBhbmQgaW4gbWFueSBjYXNlcyBpbXBvc3NpYmxlLCBzbyB3ZSBqdXN0IGF2b2lkIGl0IGhlcmUuCiAJICovCiAJbG9ja19wYWdlX25vc3luYyhwKTsKKworCS8qCisJICogdW5wb2lzb24gYWx3YXlzIGNsZWFyIFBHX2h3cG9pc29uIGluc2lkZSBwYWdlIGxvY2sKKwkgKi8KKwlpZiAoIVBhZ2VIV1BvaXNvbihwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIk1DRSAlI2x4OiBqdXN0IHVucG9pc29uZWRcbiIsIHBmbik7CisJCXJlcyA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaHdwb2lzb25fZmlsdGVyKHApKSB7CisJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpCisJCQlhdG9taWNfbG9uZ19kZWMoJm1jZV9iYWRfcGFnZXMpOworCQl1bmxvY2tfcGFnZShwKTsKKwkJcHV0X3BhZ2UocCk7CisJCXJldHVybiAwOworCX0KKwogCXdhaXRfb25fcGFnZV93cml0ZWJhY2socCk7CiAKIAkvKgogCSAqIE5vdyB0YWtlIGNhcmUgb2YgdXNlciBzcGFjZSBtYXBwaW5ncy4KKwkgKiBBYm9ydCBvbiBmYWlsOiBfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUoKSBhc3N1bWVzIHVubWFwcGVkIHBhZ2UuCiAJICovCi0JaHdwb2lzb25fdXNlcl9tYXBwaW5ncyhwLCBwZm4sIHRyYXBubyk7CisJaWYgKGh3cG9pc29uX3VzZXJfbWFwcGluZ3MocCwgcGZuLCB0cmFwbm8pICE9IFNXQVBfU1VDQ0VTUykgeworCQlwcmludGsoS0VSTl9FUlIgIk1DRSAlI2x4OiBjYW5ub3QgdW5tYXAgcGFnZSwgZ2l2ZSB1cFxuIiwgcGZuKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKgogCSAqIFRvcm4gZG93biBieSBzb21lb25lIGVsc2U/CiAJICovCi0JaWYgKChscnVfZmxhZyAmIGxydSkgJiYgIVBhZ2VTd2FwQ2FjaGUocCkgJiYgcC0+bWFwcGluZyA9PSBOVUxMKSB7CisJaWYgKFBhZ2VMUlUocCkgJiYgIVBhZ2VTd2FwQ2FjaGUocCkgJiYgcC0+bWFwcGluZyA9PSBOVUxMKSB7CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAiYWxyZWFkeSB0cnVuY2F0ZWQgTFJVIiwgSUdOT1JFRCk7Ci0JCXJlcyA9IDA7CisJCXJlcyA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmVzID0gLUVCVVNZOwogCWZvciAocHMgPSBlcnJvcl9zdGF0ZXM7OyBwcysrKSB7Ci0JCWlmICgoKHAtPmZsYWdzIHwgbHJ1X2ZsYWcpJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgewotCQkJcmVzID0gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbiwgcmVmKTsKKwkJaWYgKChwLT5mbGFncyAmIHBzLT5tYXNrKSA9PSBwcy0+cmVzKSB7CisJCQlyZXMgPSBwYWdlX2FjdGlvbihwcywgcCwgcGZuKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtODMzLDMgKzEwNTEsMjM1IEBACiB7CiAJX19tZW1vcnlfZmFpbHVyZShwZm4sIHRyYXBubywgMCk7CiB9CisKKy8qKgorICogdW5wb2lzb25fbWVtb3J5IC0gVW5wb2lzb24gYSBwcmV2aW91c2x5IHBvaXNvbmVkIHBhZ2UKKyAqIEBwZm46IFBhZ2UgbnVtYmVyIG9mIHRoZSB0byBiZSB1bnBvaXNvbmVkIHBhZ2UKKyAqCisgKiBTb2Z0d2FyZS11bnBvaXNvbiBhIHBhZ2UgdGhhdCBoYXMgYmVlbiBwb2lzb25lZCBieQorICogbWVtb3J5X2ZhaWx1cmUoKSBlYXJsaWVyLgorICoKKyAqIFRoaXMgaXMgb25seSBkb25lIG9uIHRoZSBzb2Z0d2FyZS1sZXZlbCwgc28gaXQgb25seSB3b3JrcworICogZm9yIGxpbnV4IGluamVjdGVkIGZhaWx1cmVzLCBub3QgcmVhbCBoYXJkd2FyZSBmYWlsdXJlcworICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgb3RoZXJ3aXNlIC1lcnJuby4KKyAqLworaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqcDsKKwlpbnQgZnJlZWl0ID0gMDsKKworCWlmICghcGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiAtRU5YSU87CisKKwlwID0gcGZuX3RvX3BhZ2UocGZuKTsKKwlwYWdlID0gY29tcG91bmRfaGVhZChwKTsKKworCWlmICghUGFnZUhXUG9pc29uKHApKSB7CisJCXByX2RlYnVnKCJNQ0U6IFBhZ2Ugd2FzIGFscmVhZHkgdW5wb2lzb25lZCAlI2x4XG4iLCBwZm4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKSB7CisJCWlmIChUZXN0Q2xlYXJQYWdlSFdQb2lzb24ocCkpCisJCQlhdG9taWNfbG9uZ19kZWMoJm1jZV9iYWRfcGFnZXMpOworCQlwcl9kZWJ1ZygiTUNFOiBTb2Z0d2FyZS11bnBvaXNvbmVkIGZyZWUgcGFnZSAlI2x4XG4iLCBwZm4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlsb2NrX3BhZ2Vfbm9zeW5jKHBhZ2UpOworCS8qCisJICogVGhpcyB0ZXN0IGlzIHJhY3kgYmVjYXVzZSBQR19od3BvaXNvbiBpcyBzZXQgb3V0c2lkZSBvZiBwYWdlIGxvY2suCisJICogVGhhdCdzIGFjY2VwdGFibGUgYmVjYXVzZSB0aGF0IHdvbid0IHRyaWdnZXIga2VybmVsIHBhbmljLiBJbnN0ZWFkLAorCSAqIHRoZSBQR19od3BvaXNvbiBwYWdlIHdpbGwgYmUgY2F1Z2h0IGFuZCBpc29sYXRlZCBvbiB0aGUgZW50cmFuY2UgdG8KKwkgKiB0aGUgZnJlZSBidWRkeSBwYWdlIHBvb2wuCisJICovCisJaWYgKFRlc3RDbGVhclBhZ2VIV1BvaXNvbihwKSkgeworCQlwcl9kZWJ1ZygiTUNFOiBTb2Z0d2FyZS11bnBvaXNvbmVkIHBhZ2UgJSNseFxuIiwgcGZuKTsKKwkJYXRvbWljX2xvbmdfZGVjKCZtY2VfYmFkX3BhZ2VzKTsKKwkJZnJlZWl0ID0gMTsKKwl9CisJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlwdXRfcGFnZShwYWdlKTsKKwlpZiAoZnJlZWl0KQorCQlwdXRfcGFnZShwYWdlKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpOworCitzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGludCAqKngpCit7CisJaW50IG5pZCA9IHBhZ2VfdG9fbmlkKHApOworCXJldHVybiBhbGxvY19wYWdlc19leGFjdF9ub2RlKG5pZCwgR0ZQX0hJR0hVU0VSX01PVkFCTEUsIDApOworfQorCisvKgorICogU2FmZWx5IGdldCByZWZlcmVuY2UgY291bnQgb2YgYW4gYXJiaXRyYXJ5IHBhZ2UuCisgKiBSZXR1cm5zIDAgZm9yIGEgZnJlZSBwYWdlLCAtRUlPIGZvciBhIHplcm8gcmVmY291bnQgcGFnZQorICogdGhhdCBpcyBub3QgZnJlZSwgYW5kIDEgZm9yIGFueSBvdGhlciBwYWdlIHR5cGUuCisgKiBGb3IgMSB0aGUgcGFnZSBpcyByZXR1cm5lZCB3aXRoIGluY3JlYXNlZCBwYWdlIGNvdW50LCBvdGhlcndpc2Ugbm90LgorICovCitzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKK3sKKwlpbnQgcmV0OworCisJaWYgKGZsYWdzICYgTUZfQ09VTlRfSU5DUkVBU0VEKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogVGhlIGxvY2tfc3lzdGVtX3NsZWVwIHByZXZlbnRzIGEgcmFjZSB3aXRoIG1lbW9yeSBob3RwbHVnLAorCSAqIGJlY2F1c2UgdGhlIGlzb2xhdGlvbiBhc3N1bWVzIHRoZXJlJ3Mgb25seSBhIHNpbmdsZSB1c2VyLgorCSAqIFRoaXMgaXMgYSBiaWcgaGFtbWVyLCBhIGJldHRlciB3b3VsZCBiZSBuaWNlci4KKwkgKi8KKwlsb2NrX3N5c3RlbV9zbGVlcCgpOworCisJLyoKKwkgKiBJc29sYXRlIHRoZSBwYWdlLCBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHJlYWxsb2NhdGVkIGlmIGl0CisJICogd2FzIGZyZWUuCisJICovCisJc2V0X21pZ3JhdGV0eXBlX2lzb2xhdGUocCk7CisJaWYgKCFnZXRfcGFnZV91bmxlc3NfemVybyhjb21wb3VuZF9oZWFkKHApKSkgeworCQlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7CisJCQlwcl9kZWJ1ZygiZ2V0X2FueV9wYWdlOiAlI2x4IGZyZWUgYnVkZHkgcGFnZVxuIiwgcGZuKTsKKwkJCS8qIFNldCBod3BvaXNvbiBiaXQgd2hpbGUgcGFnZSBpcyBzdGlsbCBpc29sYXRlZCAqLworCQkJU2V0UGFnZUhXUG9pc29uKHApOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCJnZXRfYW55X3BhZ2U6ICUjbHg6IHVua25vd24gemVybyByZWZjb3VudCBwYWdlIHR5cGUgJWx4XG4iLAorCQkJCXBmbiwgcC0+ZmxhZ3MpOworCQkJcmV0ID0gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE5vdCBhIGZyZWUgcGFnZSAqLworCQlyZXQgPSAxOworCX0KKwl1bnNldF9taWdyYXRldHlwZV9pc29sYXRlKHApOworCXVubG9ja19zeXN0ZW1fc2xlZXAoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNvZnRfb2ZmbGluZV9wYWdlIC0gU29mdCBvZmZsaW5lIGEgcGFnZS4KKyAqIEBwYWdlOiBwYWdlIHRvIG9mZmxpbmUKKyAqIEBmbGFnczogZmxhZ3MuIFNhbWUgYXMgbWVtb3J5X2ZhaWx1cmUoKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0ZWQgZXJybm8uCisgKgorICogU29mdCBvZmZsaW5lIGEgcGFnZSwgYnkgbWlncmF0aW9uIG9yIGludmFsaWRhdGlvbiwKKyAqIHdpdGhvdXQga2lsbGluZyBhbnl0aGluZy4gVGhpcyBpcyBmb3IgdGhlIGNhc2Ugd2hlbgorICogYSBwYWdlIGlzIG5vdCBjb3JydXB0ZWQgeWV0IChzbyBpdCdzIHN0aWxsIHZhbGlkIHRvIGFjY2VzcyksCisgKiBidXQgaGFzIGhhZCBhIG51bWJlciBvZiBjb3JyZWN0ZWQgZXJyb3JzIGFuZCBpcyBiZXR0ZXIgdGFrZW4KKyAqIG91dC4KKyAqCisgKiBUaGUgYWN0dWFsIHBvbGljeSBvbiB3aGVuIHRvIGRvIHRoYXQgaXMgbWFpbnRhaW5lZCBieQorICogdXNlciBzcGFjZS4KKyAqCisgKiBUaGlzIHNob3VsZCBuZXZlciBpbXBhY3QgYW55IGFwcGxpY2F0aW9uIG9yIGNhdXNlIGRhdGEgbG9zcywKKyAqIGhvd2V2ZXIgaXQgbWlnaHQgdGFrZSBzb21lIHRpbWUuCisgKgorICogVGhpcyBpcyBub3QgYSAxMDAlIHNvbHV0aW9uIGZvciBhbGwgbWVtb3J5LCBidXQgdHJpZXMgdG8gYmUKKyAqIGBgZ29vZCBlbm91Z2gnJyBmb3IgdGhlIG1ham9yaXR5IG9mIG1lbW9yeS4KKyAqLworaW50IHNvZnRfb2ZmbGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZmxhZ3MpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCisJcmV0ID0gZ2V0X2FueV9wYWdlKHBhZ2UsIHBmbiwgZmxhZ3MpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgPT0gMCkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBQYWdlIGNhY2hlIHBhZ2Ugd2UgY2FuIGhhbmRsZT8KKwkgKi8KKwlpZiAoIVBhZ2VMUlUocGFnZSkpIHsKKwkJLyoKKwkJICogVHJ5IHRvIGZyZWUgaXQuCisJCSAqLworCQlwdXRfcGFnZShwYWdlKTsKKwkJc2hha2VfcGFnZShwYWdlLCAxKTsKKworCQkvKgorCQkgKiBEaWQgaXQgdHVybiBmcmVlPworCQkgKi8KKwkJcmV0ID0gZ2V0X2FueV9wYWdlKHBhZ2UsIHBmbiwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAwKQorCQkJZ290byBkb25lOworCX0KKwlpZiAoIVBhZ2VMUlUocGFnZSkpIHsKKwkJcHJfZGVidWcoInNvZnRfb2ZmbGluZTogJSNseDogdW5rbm93biBub24gTFJVIHBhZ2UgdHlwZSAlbHhcbiIsCisJCQkJcGZuLCBwYWdlLT5mbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKworCWxvY2tfcGFnZShwYWdlKTsKKwl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJLyoKKwkgKiBTeW5jaHJvbml6ZWQgdXNpbmcgdGhlIHBhZ2UgbG9jayB3aXRoIG1lbW9yeV9mYWlsdXJlKCkKKwkgKi8KKwlpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwdXRfcGFnZShwYWdlKTsKKwkJcHJfZGVidWcoInNvZnQgb2ZmbGluZTogJSNseCBwYWdlIGFscmVhZHkgcG9pc29uZWRcbiIsIHBmbik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gaW52YWxpZGF0ZSBmaXJzdC4gVGhpcyBzaG91bGQgd29yayBmb3IKKwkgKiBub24gZGlydHkgdW5tYXBwZWQgcGFnZSBjYWNoZSBwYWdlcy4KKwkgKi8KKwlyZXQgPSBpbnZhbGlkYXRlX2lub2RlX3BhZ2UocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwkvKgorCSAqIERyb3AgY291bnQgYmVjYXVzZSBwYWdlIG1pZ3JhdGlvbiBkb2Vzbid0IGxpa2UgcmFpc2VkCisJICogY291bnRzLiBUaGUgcGFnZSBjb3VsZCBnZXQgcmUtYWxsb2NhdGVkLCBidXQgaWYgaXQgYmVjb21lcworCSAqIExSVSB0aGUgaXNvbGF0aW9uIHdpbGwganVzdCBmYWlsLgorCSAqIFJFRC1QRU4gd291bGQgYmUgYmV0dGVyIHRvIGtlZXAgaXQgaXNvbGF0ZWQgaGVyZSwgYnV0IHdlCisJICogd291bGQgbmVlZCB0byBmaXggaXNvbGF0aW9uIGxvY2tpbmcgZmlyc3QuCisJICovCisJcHV0X3BhZ2UocGFnZSk7CisJaWYgKHJldCA9PSAxKSB7CisJCXJldCA9IDA7CisJCXByX2RlYnVnKCJzb2Z0X29mZmxpbmU6ICUjbHg6IGludmFsaWRhdGVkXG4iLCBwZm4pOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBTaW1wbGUgaW52YWxpZGF0aW9uIGRpZG4ndCB3b3JrLgorCSAqIFRyeSB0byBtaWdyYXRlIHRvIGEgbmV3IHBhZ2UgaW5zdGVhZC4gbWlncmF0ZS5jCisJICogaGFuZGxlcyBhIGxhcmdlIG51bWJlciBvZiBjYXNlcyBmb3IgdXMuCisJICovCisJcmV0ID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlKTsKKwlpZiAoIXJldCkgeworCQlMSVNUX0hFQUQocGFnZWxpc3QpOworCisJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZwYWdlbGlzdCk7CisJCXJldCA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZSwgTVBPTF9NRl9NT1ZFX0FMTCwgMCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2RlYnVnKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IG1pZ3JhdGlvbiBmYWlsZWQgJWQsIHR5cGUgJWx4XG4iLAorCQkJCXBmbiwgcmV0LCBwYWdlLT5mbGFncyk7CisJCQlpZiAocmV0ID4gMCkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInNvZnQgb2ZmbGluZTogJSNseDogaXNvbGF0aW9uIGZhaWxlZDogJWQsIHBhZ2UgY291bnQgJWQsIHR5cGUgJWx4XG4iLAorCQkJCXBmbiwgcmV0LCBwYWdlX2NvdW50KHBhZ2UpLCBwYWdlLT5mbGFncyk7CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKK2RvbmU6CisJYXRvbWljX2xvbmdfYWRkKDEsICZtY2VfYmFkX3BhZ2VzKTsKKwlTZXRQYWdlSFdQb2lzb24ocGFnZSk7CisJLyoga2VlcCBlbGV2YXRlZCBwYWdlIGNvdW50IGZvciBiYWQgcGFnZSAqLworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZhYjE5ZGQuLjA5ZTRiMWIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC01NzIsNyArNTcyLDcgQEAKICAqIGNvdmVyZWQgYnkgdGhpcyB2bWEuCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGNvcHlfb25lX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSwKIAkJcHRlX3QgKmRzdF9wdGUsIHB0ZV90ICpzcmNfcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKnJzcykKQEAgLTU4Niw3ICs1ODYsOSBAQAogCQlpZiAoIXB0ZV9maWxlKHB0ZSkpIHsKIAkJCXN3cF9lbnRyeV90IGVudHJ5ID0gcHRlX3RvX3N3cF9lbnRyeShwdGUpOwogCi0JCQlzd2FwX2R1cGxpY2F0ZShlbnRyeSk7CisJCQlpZiAoc3dhcF9kdXBsaWNhdGUoZW50cnkpIDwgMCkKKwkJCQlyZXR1cm4gZW50cnkudmFsOworCiAJCQkvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYncyBtbWxpc3QuICovCiAJCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZHN0X21tLT5tbWxpc3QpKSkgewogCQkJCXNwaW5fbG9jaygmbW1saXN0X2xvY2spOwpAQCAtNjM1LDYgKzYzNyw3IEBACiAKIG91dF9zZXRfcHRlOgogCXNldF9wdGVfYXQoZHN0X21tLCBhZGRyLCBkc3RfcHRlLCBwdGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNvcHlfcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLApAQCAtNjQ2LDYgKzY0OSw3IEBACiAJc3BpbmxvY2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7CiAJaW50IHByb2dyZXNzID0gMDsKIAlpbnQgcnNzWzJdOworCXN3cF9lbnRyeV90IGVudHJ5ID0gKHN3cF9lbnRyeV90KXswfTsKIAogYWdhaW46CiAJcnNzWzFdID0gcnNzWzBdID0gMDsKQEAgLTY3NCw3ICs2NzgsMTAgQEAKIAkJCXByb2dyZXNzKys7CiAJCQljb250aW51ZTsKIAkJfQotCQljb3B5X29uZV9wdGUoZHN0X21tLCBzcmNfbW0sIGRzdF9wdGUsIHNyY19wdGUsIHZtYSwgYWRkciwgcnNzKTsKKwkJZW50cnkudmFsID0gY29weV9vbmVfcHRlKGRzdF9tbSwgc3JjX21tLCBkc3RfcHRlLCBzcmNfcHRlLAorCQkJCQkJCXZtYSwgYWRkciwgcnNzKTsKKwkJaWYgKGVudHJ5LnZhbCkKKwkJCWJyZWFrOwogCQlwcm9ncmVzcyArPSA4OwogCX0gd2hpbGUgKGRzdF9wdGUrKywgc3JjX3B0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCkBAIC02ODQsNiArNjkxLDEyIEBACiAJYWRkX21tX3Jzcyhkc3RfbW0sIHJzc1swXSwgcnNzWzFdKTsKIAlwdGVfdW5tYXBfdW5sb2NrKG9yaWdfZHN0X3B0ZSwgZHN0X3B0bCk7CiAJY29uZF9yZXNjaGVkKCk7CisKKwlpZiAoZW50cnkudmFsKSB7CisJCWlmIChhZGRfc3dhcF9jb3VudF9jb250aW51YXRpb24oZW50cnksIEdGUF9LRVJORUwpIDwgMCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlwcm9ncmVzcyA9IDA7CisJfQogCWlmIChhZGRyICE9IGVuZCkKIAkJZ290byBhZ2FpbjsKIAlyZXR1cm4gMDsKQEAgLTk0Myw2ICs5NTYsNyBAQAogCQlkZXRhaWxzID0gTlVMTDsKIAogCUJVR19PTihhZGRyID49IGVuZCk7CisJbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCgpOwogCXRsYl9zdGFydF92bWEodGxiLCB2bWEpOwogCXBnZCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcik7CiAJZG8gewpAQCAtOTU1LDYgKzk2OSw3IEBACiAJCQkJCQl6YXBfd29yaywgZGV0YWlscyk7CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCAoYWRkciAhPSBlbmQgJiYgKnphcF93b3JrID4gMCkpOwogCXRsYl9lbmRfdm1hKHRsYiwgdm1hKTsKKwltZW1fY2dyb3VwX3VuY2hhcmdlX2VuZCgpOwogCiAJcmV0dXJuIGFkZHI7CiB9CkBAIC0yNTE0LDcgKzI1MjksNyBAQAogCQkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT047CiAJCX0gZWxzZSB7CiAJCQlwcmludF9iYWRfcHRlKHZtYSwgYWRkcmVzcywgb3JpZ19wdGUsIE5VTEwpOwotCQkJcmV0ID0gVk1fRkFVTFRfT09NOworCQkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCQl9CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI1NDAsNiArMjU1NSwxMCBAQAogCQlyZXQgPSBWTV9GQVVMVF9NQUpPUjsKIAkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJfSBlbHNlIGlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHsKKwkJLyoKKwkJICogaHdwb2lzb25lZCBkaXJ0eSBzd2FwY2FjaGUgcGFnZXMgYXJlIGtlcHQgZm9yIGtpbGxpbmcKKwkJICogb3duZXIgcHJvY2Vzc2VzICh3aGljaCBtYXkgYmUgdW5rbm93biBhdCBod3BvaXNvbiB0aW1lKQorCQkgKi8KIAkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT047CiAJCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwogCQlnb3RvIG91dF9yZWxlYXNlOwpAQCAtMjU0OCw2ICsyNTY3LDEyIEBACiAJbG9ja19wYWdlKHBhZ2UpOwogCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwogCisJcGFnZSA9IGtzbV9taWdodF9uZWVkX3RvX2NvcHkocGFnZSwgdm1hLCBhZGRyZXNzKTsKKwlpZiAoIXBhZ2UpIHsKKwkJcmV0ID0gVk1fRkFVTFRfT09NOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBpbihtbSwgcGFnZSwgR0ZQX0tFUk5FTCwgJnB0cikpIHsKIAkJcmV0ID0gVk1fRkFVTFRfT09NOwogCQlnb3RvIG91dF9wYWdlOwpAQCAtMjkxMCw3ICsyOTM1LDcgQEAKIAkJICogUGFnZSB0YWJsZSBjb3JydXB0ZWQ6IHNob3cgcHRlIGFuZCBraWxsIHByb2Nlc3MuCiAJCSAqLwogCQlwcmludF9iYWRfcHRlKHZtYSwgYWRkcmVzcywgb3JpZ19wdGUsIE5VTEwpOwotCQlyZXR1cm4gVk1fRkFVTFRfT09NOworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCX0KIAogCXBnb2ZmID0gcHRlX3RvX3Bnb2ZmKG9yaWdfcHRlKTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDIwNDc0NjUuLjAzMGNlOGEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKQEAgLTcxLDcgKzcyLDkgQEAKIAlhdG9taWNfaW5jKCZwYWdlLT5fY291bnQpOwogfQogCi12b2lkIHB1dF9wYWdlX2Jvb3RtZW0oc3RydWN0IHBhZ2UgKnBhZ2UpCisvKiByZWZlcmVuY2UgdG8gX19tZW1pbml0IF9fZnJlZV9wYWdlc19ib290bWVtIGlzIHZhbGlkCisgKiBzbyB1c2UgX19yZWYgdG8gdGVsbCBtb2Rwb3N0IG5vdCB0byBnZW5lcmF0ZSBhIHdhcm5pbmcgKi8KK3ZvaWQgX19yZWYgcHV0X3BhZ2VfYm9vdG1lbShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlpbnQgdHlwZTsKIApAQCAtNjcyLDYgKzY3NSw5IEBACiAJCWlmICghcmV0KSB7IC8qIFN1Y2Nlc3MgKi8KIAkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnNvdXJjZSk7CiAJCQltb3ZlX3BhZ2VzLS07CisJCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0lTT0xBVEVEX0FOT04gKworCQkJCQkgICAgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKKwogCQl9IGVsc2UgewogCQkJLyogQmVjYXN1ZSB3ZSBkb24ndCBoYXZlIGJpZyB6b25lLT5sb2NrLiB3ZSBzaG91bGQKIAkJCSAgIGNoZWNrIHRoaXMgYWdhaW4gaGVyZS4gKi8KQEAgLTY5NCw3ICs3MDAsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZzb3VyY2UpKQogCQlnb3RvIG91dDsKIAkvKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgIyBvZiBmYWlsZWQgcGFnZXMgKi8KLQlyZXQgPSBtaWdyYXRlX3BhZ2VzKCZzb3VyY2UsIGhvdHJlbW92ZV9taWdyYXRlX2FsbG9jLCAwKTsKKwlyZXQgPSBtaWdyYXRlX3BhZ2VzKCZzb3VyY2UsIGhvdHJlbW92ZV9taWdyYXRlX2FsbG9jLCAwLCAxKTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC03NDcsNyArNzUzLDcgQEAKIAlyZXR1cm4gb2ZmbGluZWQ7CiB9CiAKLWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorc3RhdGljIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCXVuc2lnbmVkIGxvbmcgcGZuLCBucl9wYWdlcywgZXhwaXJlOwpAQCAtODQ5LDYgKzg1NSwxMCBAQAogCiAJc2V0dXBfcGVyX3pvbmVfd21hcmtzKCk7CiAJY2FsY3VsYXRlX3pvbmVfaW5hY3RpdmVfcmF0aW8oem9uZSk7CisJaWYgKCFub2RlX3ByZXNlbnRfcGFnZXMobm9kZSkpIHsKKwkJbm9kZV9jbGVhcl9zdGF0ZShub2RlLCBOX0hJR0hfTUVNT1JZKTsKKwkJa3N3YXBkX3N0b3Aobm9kZSk7CisJfQogCiAJdm1fdG90YWxfcGFnZXMgPSBucl9mcmVlX3BhZ2VjYWNoZV9wYWdlcygpOwogCXdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KCk7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDQ1NDVkNTkuLjI5MGZiNWIgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC04NSwxMCArODUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQxMiwxNyArNDE0LDExIEBACiAJCWlmICghcGFnZSkKIAkJCWNvbnRpbnVlOwogCQkvKgotCQkgKiBUaGUgY2hlY2sgZm9yIFBhZ2VSZXNlcnZlZCBoZXJlIGlzIGltcG9ydGFudCB0byBhdm9pZAotCQkgKiBoYW5kbGluZyB6ZXJvIHBhZ2VzIGFuZCBvdGhlciBwYWdlcyB0aGF0IG1heSBoYXZlIGJlZW4KLQkJICogbWFya2VkIHNwZWNpYWwgYnkgdGhlIHN5c3RlbS4KLQkJICoKLQkJICogSWYgdGhlIFBhZ2VSZXNlcnZlZCB3b3VsZCBub3QgYmUgY2hlY2tlZCBoZXJlIHRoZW4gZi5lLgotCQkgKiB0aGUgbG9jYXRpb24gb2YgdGhlIHplcm8gcGFnZSBjb3VsZCBoYXZlIGFuIGluZmx1ZW5jZQotCQkgKiBvbiBNUE9MX01GX1NUUklDVCwgemVybyBwYWdlcyB3b3VsZCBiZSBjb3VudGVkIGZvcgotCQkgKiB0aGUgcGVyIG5vZGUgc3RhdHMsIGFuZCB0aGVyZSB3b3VsZCBiZSB1c2VsZXNzIGF0dGVtcHRzCi0JCSAqIHRvIHB1dCB6ZXJvIHBhZ2VzIG9uIHRoZSBtaWdyYXRpb24gbGlzdC4KKwkJICogdm1fbm9ybWFsX3BhZ2UoKSBmaWx0ZXJzIG91dCB6ZXJvIHBhZ2VzLCBidXQgdGhlcmUgbWlnaHQKKwkJICogc3RpbGwgYmUgUGFnZVJlc2VydmVkIHBhZ2VzIHRvIHNraXAsIHBlcmhhcHMgaW4gYSBWRFNPLgorCQkgKiBBbmQgd2UgY2Fubm90IG1vdmUgUGFnZUtzbSBwYWdlcyBzZW5zaWJseSBvciBzYWZlbHkgeWV0LgogCQkgKi8KLQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKKwkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSB8fCBQYWdlS3NtKHBhZ2UpKQogCQkJY29udGludWU7CiAJCW5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwogCQlpZiAobm9kZV9pc3NldChuaWQsICpub2RlcykgPT0gISEoZmxhZ3MgJiBNUE9MX01GX0lOVkVSVCkpCkBAIC04MDksNiArODA1LDggQEAKIAlpZiAoKGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCkgfHwgcGFnZV9tYXBjb3VudChwYWdlKSA9PSAxKSB7CiAJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgewogCQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCBwYWdlbGlzdCk7CisJCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0lTT0xBVEVEX0FOT04gKworCQkJCQkgICAgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKIAkJfQogCX0KIH0KQEAgLTgzNiw3ICs4MzQsNyBAQAogCQkJZmxhZ3MgfCBNUE9MX01GX0RJU0NPTlRJR19PSywgJnBhZ2VsaXN0KTsKIAogCWlmICghbGlzdF9lbXB0eSgmcGFnZWxpc3QpKQotCQllcnIgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X25vZGVfcGFnZSwgZGVzdCk7CisJCWVyciA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfbm9kZV9wYWdlLCBkZXN0LCAwKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xMDUzLDcgKzEwNTEsNyBAQAogCiAJCWlmICghbGlzdF9lbXB0eSgmcGFnZWxpc3QpKQogCQkJbnJfZmFpbGVkID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld192bWFfcGFnZSwKLQkJCQkJCSh1bnNpZ25lZCBsb25nKXZtYSk7CisJCQkJCQkodW5zaWduZWQgbG9uZyl2bWEsIDApOwogCiAJCWlmICghZXJyICYmIG5yX2ZhaWxlZCAmJiAoZmxhZ3MgJiBNUE9MX01GX1NUUklDVCkpCiAJCQllcnIgPSAtRUlPOwpAQCAtMTU2NSw2ICsxNTYzLDUzIEBACiAJfQogCXJldHVybiB6bDsKIH0KKworLyoKKyAqIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5CisgKgorICogSWYgdGhlIGN1cnJlbnQgdGFzaydzIG1lbXBvbGljeSBpcyAiZGVmYXVsdCIgW05VTExdLCByZXR1cm4gJ2ZhbHNlJworICogdG8gaW5kaWNhdGUgZGVmYXVsdCBwb2xpY3kuICBPdGhlcndpc2UsIGV4dHJhY3QgdGhlIHBvbGljeSBub2RlbWFzaworICogZm9yICdiaW5kJyBvciAnaW50ZXJsZWF2ZScgcG9saWN5IGludG8gdGhlIGFyZ3VtZW50IG5vZGVtYXNrLCBvcgorICogaW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgbm9kZW1hc2sgdG8gY29udGFpbiB0aGUgc2luZ2xlIG5vZGUgZm9yCisgKiAncHJlZmVycmVkJyBvciAnbG9jYWwnIHBvbGljeSBhbmQgcmV0dXJuICd0cnVlJyB0byBpbmRpY2F0ZSBwcmVzZW5jZQorICogb2Ygbm9uLWRlZmF1bHQgbWVtcG9saWN5LgorICoKKyAqIFdlIGRvbid0IGJvdGhlciB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyB0aGUgbWVtcG9saWN5IFttcG9sX2dldC9wdXRdCisgKiBiZWNhdXNlIHRoZSBjdXJyZW50IHRhc2sgaXMgZXhhbWluaW5nIGl0J3Mgb3duIG1lbXBvbGljeSBhbmQgYSB0YXNrJ3MKKyAqIG1lbXBvbGljeSBpcyBvbmx5IGV2ZXIgY2hhbmdlZCBieSB0aGUgdGFzayBpdHNlbGYuCisgKgorICogTi5CLiwgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgYSByZXR1cm5lZCBub2RlbWFzay4KKyAqLworYm9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptYXNrKQoreworCXN0cnVjdCBtZW1wb2xpY3kgKm1lbXBvbGljeTsKKwlpbnQgbmlkOworCisJaWYgKCEobWFzayAmJiBjdXJyZW50LT5tZW1wb2xpY3kpKQorCQlyZXR1cm4gZmFsc2U7CisKKwltZW1wb2xpY3kgPSBjdXJyZW50LT5tZW1wb2xpY3k7CisJc3dpdGNoIChtZW1wb2xpY3ktPm1vZGUpIHsKKwljYXNlIE1QT0xfUFJFRkVSUkVEOgorCQlpZiAobWVtcG9saWN5LT5mbGFncyAmIE1QT0xfRl9MT0NBTCkKKwkJCW5pZCA9IG51bWFfbm9kZV9pZCgpOworCQllbHNlCisJCQluaWQgPSBtZW1wb2xpY3ktPnYucHJlZmVycmVkX25vZGU7CisJCWluaXRfbm9kZW1hc2tfb2Zfbm9kZShtYXNrLCBuaWQpOworCQlicmVhazsKKworCWNhc2UgTVBPTF9CSU5EOgorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIE1QT0xfSU5URVJMRUFWRToKKwkJKm1hc2sgPSAgbWVtcG9saWN5LT52Lm5vZGVzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiB0cnVlOworfQogI2VuZGlmCiAKIC8qIEFsbG9jYXRlIGEgcGFnZSBpbiBpbnRlcmxlYXZlZCBwb2xpY3kuCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggN2RiY2IyMi4uZWZkZGJmMCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CkBAIC03OCw4ICs3OSw4IEBACiAvKgogICogUmVzdG9yZSBhIHBvdGVudGlhbCBtaWdyYXRpb24gcHRlIHRvIGEgd29ya2luZyBwdGUgZW50cnkKICAqLwotc3RhdGljIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBwYWdlICpvbGQsIHN0cnVjdCBwYWdlICpuZXcpCitzdGF0aWMgaW50IHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBwYWdlICpuZXcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKm9sZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJc3dwX2VudHJ5X3QgZW50cnk7CkBAIC04OCw0MCArODksMzcgQEAKICAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlcCwgcHRlOwogIAlzcGlubG9ja190ICpwdGw7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gcGFnZV9hZGRyZXNzX2luX3ZtYShuZXcsIHZtYSk7Ci0KLQlpZiAoYWRkciA9PSAtRUZBVUxUKQotCQlyZXR1cm47CiAKICAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisJCWdvdG8gb3V0OwogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwogCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworCQlnb3RvIG91dDsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAKIAlpZiAoIWlzX3N3YXBfcHRlKCpwdGVwKSkgewogCQlwdGVfdW5tYXAocHRlcCk7Ci0gCQlyZXR1cm47CisJCWdvdG8gb3V0OwogIAl9CiAKICAJcHRsID0gcHRlX2xvY2twdHIobW0sIHBtZCk7CiAgCXNwaW5fbG9jayhwdGwpOwogCXB0ZSA9ICpwdGVwOwogCWlmICghaXNfc3dhcF9wdGUocHRlKSkKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCiAJZW50cnkgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSk7CiAKLQlpZiAoIWlzX21pZ3JhdGlvbl9lbnRyeShlbnRyeSkgfHwgbWlncmF0aW9uX2VudHJ5X3RvX3BhZ2UoZW50cnkpICE9IG9sZCkKLQkJZ290byBvdXQ7CisJaWYgKCFpc19taWdyYXRpb25fZW50cnkoZW50cnkpIHx8CisJICAgIG1pZ3JhdGlvbl9lbnRyeV90b19wYWdlKGVudHJ5KSAhPSBvbGQpCisJCWdvdG8gdW5sb2NrOwogCiAJZ2V0X3BhZ2UobmV3KTsKIAlwdGUgPSBwdGVfbWtvbGQobWtfcHRlKG5ldywgdm1hLT52bV9wYWdlX3Byb3QpKTsKQEAgLTEzNyw1OCArMTM1LDEwIEBACiAKIAkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovCiAJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZSk7Ci0KLW91dDoKK3VubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7Ci19Ci0KLS8qCi0gKiBOb3RlIHRoYXQgcmVtb3ZlX2ZpbGVfbWlncmF0aW9uX3B0ZXMgd2lsbCBvbmx5IHdvcmsgb24gcmVndWxhciBtYXBwaW5ncywKLSAqIE5vbmxpbmVhciBtYXBwaW5ncyBkbyBub3QgdXNlIG1pZ3JhdGlvbiBlbnRyaWVzLgotICovCi1zdGF0aWMgdm9pZCByZW1vdmVfZmlsZV9taWdyYXRpb25fcHRlcyhzdHJ1Y3QgcGFnZSAqb2xkLCBzdHJ1Y3QgcGFnZSAqbmV3KQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gbmV3LT5tYXBwaW5nOwotCXN0cnVjdCBwcmlvX3RyZWVfaXRlciBpdGVyOwotCXBnb2ZmX3QgcGdvZmYgPSBuZXctPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0KLQlpZiAoIW1hcHBpbmcpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCi0Jdm1hX3ByaW9fdHJlZV9mb3JlYWNoKHZtYSwgJml0ZXIsICZtYXBwaW5nLT5pX21tYXAsIHBnb2ZmLCBwZ29mZikKLQkJcmVtb3ZlX21pZ3JhdGlvbl9wdGUodm1hLCBvbGQsIG5ldyk7Ci0KLQlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotfQotCi0vKgotICogTXVzdCBob2xkIG1tYXBfc2VtIGxvY2sgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSB2bWFzIGNvbnRhaW5pbmcKLSAqIHRoZSBwYWdlIHNvIHRoYXQgdGhlIGFub25fdm1hIGNhbm5vdCB2YW5pc2guCi0gKi8KLXN0YXRpYyB2b2lkIHJlbW92ZV9hbm9uX21pZ3JhdGlvbl9wdGVzKHN0cnVjdCBwYWdlICpvbGQsIHN0cnVjdCBwYWdlICpuZXcpCi17Ci0Jc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQl1bnNpZ25lZCBsb25nIG1hcHBpbmc7Ci0KLQltYXBwaW5nID0gKHVuc2lnbmVkIGxvbmcpbmV3LT5tYXBwaW5nOwotCi0JaWYgKCFtYXBwaW5nIHx8IChtYXBwaW5nICYgUEFHRV9NQVBQSU5HX0FOT04pID09IDApCi0JCXJldHVybjsKLQotCS8qCi0JICogV2UgaG9sZCB0aGUgbW1hcF9zZW0gbG9jay4gU28gbm8gbmVlZCB0byBjYWxsIHBhZ2VfbG9ja19hbm9uX3ZtYS4KLQkgKi8KLQlhbm9uX3ZtYSA9IChzdHJ1Y3QgYW5vbl92bWEgKikgKG1hcHBpbmcgLSBQQUdFX01BUFBJTkdfQU5PTik7Ci0Jc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKQotCQlyZW1vdmVfbWlncmF0aW9uX3B0ZSh2bWEsIG9sZCwgbmV3KTsKLQotCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CitvdXQ6CisJcmV0dXJuIFNXQVBfQUdBSU47CiB9CiAKIC8qCkBAIC0xOTcsMTAgKzE0Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlbW92ZV9taWdyYXRpb25fcHRlcyhzdHJ1Y3QgcGFnZSAqb2xkLCBzdHJ1Y3QgcGFnZSAqbmV3KQogewotCWlmIChQYWdlQW5vbihuZXcpKQotCQlyZW1vdmVfYW5vbl9taWdyYXRpb25fcHRlcyhvbGQsIG5ldyk7Ci0JZWxzZQotCQlyZW1vdmVfZmlsZV9taWdyYXRpb25fcHRlcyhvbGQsIG5ldyk7CisJcm1hcF93YWxrKG5ldywgcmVtb3ZlX21pZ3JhdGlvbl9wdGUsIG9sZCk7CiB9CiAKIC8qCkBAIC0zNDEsOCArMjg4LDggQEAKIAlpZiAoVGVzdENsZWFyUGFnZUFjdGl2ZShwYWdlKSkgewogCQlWTV9CVUdfT04oUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKIAkJU2V0UGFnZUFjdGl2ZShuZXdwYWdlKTsKLQl9IGVsc2UKLQkJdW5ldmljdGFibGVfbWlncmF0ZV9wYWdlKG5ld3BhZ2UsIHBhZ2UpOworCX0gZWxzZSBpZiAoVGVzdENsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQlTZXRQYWdlVW5ldmljdGFibGUobmV3cGFnZSk7CiAJaWYgKFBhZ2VDaGVja2VkKHBhZ2UpKQogCQlTZXRQYWdlQ2hlY2tlZChuZXdwYWdlKTsKIAlpZiAoUGFnZU1hcHBlZFRvRGlzayhwYWdlKSkKQEAgLTM2MSw2ICszMDgsNyBAQAogIAl9CiAKIAltbG9ja19taWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7CisJa3NtX21pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKIAogCUNsZWFyUGFnZVN3YXBDYWNoZShwYWdlKTsKIAlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOwpAQCAtNTgwLDkgKzUyOCw5IEBACiAJZWxzZQogCQlyYyA9IGZhbGxiYWNrX21pZ3JhdGVfcGFnZShtYXBwaW5nLCBuZXdwYWdlLCBwYWdlKTsKIAotCWlmICghcmMpIHsKKwlpZiAoIXJjKQogCQlyZW1vdmVfbWlncmF0aW9uX3B0ZXMocGFnZSwgbmV3cGFnZSk7Ci0JfSBlbHNlCisJZWxzZQogCQluZXdwYWdlLT5tYXBwaW5nID0gTlVMTDsKIAogCXVubG9ja19wYWdlKG5ld3BhZ2UpOwpAQCAtNTk1LDcgKzU0Myw3IEBACiAgKiB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgaW4gbmV3cGFnZS4KICAqLwogc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZShuZXdfcGFnZV90IGdldF9uZXdfcGFnZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBmb3JjZSkKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZm9yY2UsIGludCBvZmZsaW5pbmcpCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgKnJlc3VsdCA9IE5VTEw7CkBAIC02MjEsNiArNTY5LDIwIEBACiAJCWxvY2tfcGFnZShwYWdlKTsKIAl9CiAKKwkvKgorCSAqIE9ubHkgbWVtb3J5IGhvdHBsdWcncyBvZmZsaW5lX3BhZ2VzKCkgY2FsbGVyIGhhcyBsb2NrZWQgb3V0IEtTTSwKKwkgKiBhbmQgY2FuIHNhZmVseSBtaWdyYXRlIGEgS1NNIHBhZ2UuICBUaGUgb3RoZXIgY2FzZXMgaGF2ZSBza2lwcGVkCisJICogUGFnZUtzbSBhbG9uZyB3aXRoIFBhZ2VSZXNlcnZlZCAtIGJ1dCBpdCBpcyBvbmx5IG5vdyB3aGVuIHdlIGhhdmUKKwkgKiB0aGUgcGFnZSBsb2NrIHRoYXQgd2UgY2FuIGJlIGNlcnRhaW4gaXQgd2lsbCBub3QgZ28gS1NNIGJlbmVhdGggdXMKKwkgKiAoS1NNIHdpbGwgbm90IHVwZ3JhZGUgYSBwYWdlIGZyb20gUGFnZUFub24gdG8gUGFnZUtzbSB3aGVuIGl0IHNlZXMKKwkgKiBpdHMgcGFnZWNvdW50IHJhaXNlZCwgYnV0IG9ubHkgaGVyZSBkbyB3ZSB0YWtlIHRoZSBwYWdlIGxvY2sgd2hpY2gKKwkgKiBzZXJpYWxpemVzIHRoYXQpLgorCSAqLworCWlmIChQYWdlS3NtKHBhZ2UpICYmICFvZmZsaW5pbmcpIHsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrOworCX0KKwogCS8qIGNoYXJnZSBhZ2FpbnN0IG5ldyBwYWdlICovCiAJY2hhcmdlID0gbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihwYWdlLCAmbWVtKTsKIAlpZiAoY2hhcmdlID09IC1FTk9NRU0pIHsKQEAgLTczNyw3ICs2OTksNyBAQAogICogUmV0dXJuOiBOdW1iZXIgb2YgcGFnZXMgbm90IG1pZ3JhdGVkIG9yIGVycm9yIGNvZGUuCiAgKi8KIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCi0JCW5ld19wYWdlX3QgZ2V0X25ld19wYWdlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpCisJCW5ld19wYWdlX3QgZ2V0X25ld19wYWdlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGludCBvZmZsaW5pbmcpCiB7CiAJaW50IHJldHJ5ID0gMTsKIAlpbnQgbnJfZmFpbGVkID0gMDsKQEAgLTc0NiwxMyArNzA4LDYgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTI7CiAJaW50IHN3YXB3cml0ZSA9IGN1cnJlbnQtPmZsYWdzICYgUEZfU1dBUFdSSVRFOwogCWludCByYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgZnJvbSwgbHJ1KQotCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCi0JCQkJcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAoIXN3YXB3cml0ZSkKIAkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfU1dBUFdSSVRFOwpAQCAtNzY0LDcgKzcxOSw3IEBACiAJCQljb25kX3Jlc2NoZWQoKTsKIAogCQkJcmMgPSB1bm1hcF9hbmRfbW92ZShnZXRfbmV3X3BhZ2UsIHByaXZhdGUsCi0JCQkJCQlwYWdlLCBwYXNzID4gMik7CisJCQkJCQlwYWdlLCBwYXNzID4gMiwgb2ZmbGluaW5nKTsKIAogCQkJc3dpdGNoKHJjKSB7CiAJCQljYXNlIC1FTk9NRU06CkBAIC04NjAsNyArODE1LDggQEAKIAkJaWYgKCFwYWdlKQogCQkJZ290byBzZXRfc3RhdHVzOwogCi0JCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCQkvKiBDaGVjayBmb3IgemVybyBwYWdlICovCisJCS8qIFVzZSBQYWdlUmVzZXJ2ZWQgdG8gY2hlY2sgZm9yIHplcm8gcGFnZSAqLworCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpIHx8IFBhZ2VLc20ocGFnZSkpCiAJCQlnb3RvIHB1dF9hbmRfc2V0OwogCiAJCXBwLT5wYWdlID0gcGFnZTsKQEAgLTg3OCw4ICs4MzQsMTEgQEAKIAkJCWdvdG8gcHV0X2FuZF9zZXQ7CiAKIAkJZXJyID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlKTsKLQkJaWYgKCFlcnIpCisJCWlmICghZXJyKSB7CiAJCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZwYWdlbGlzdCk7CisJCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0lTT0xBVEVEX0FOT04gKworCQkJCQkgICAgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKTsKKwkJfQogcHV0X2FuZF9zZXQ6CiAJCS8qCiAJCSAqIEVpdGhlciByZW1vdmUgdGhlIGR1cGxpY2F0ZSByZWZjb3VudCBmcm9tCkBAIC04OTQsNyArODUzLDcgQEAKIAllcnIgPSAwOwogCWlmICghbGlzdF9lbXB0eSgmcGFnZWxpc3QpKQogCQllcnIgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3BhZ2Vfbm9kZSwKLQkJCQkodW5zaWduZWQgbG9uZylwbSk7CisJCQkJKHVuc2lnbmVkIGxvbmcpcG0sIDApOwogCiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTAxNSw3ICs5NzQsNyBAQAogCiAJCWVyciA9IC1FTk9FTlQ7CiAJCS8qIFVzZSBQYWdlUmVzZXJ2ZWQgdG8gY2hlY2sgZm9yIHplcm8gcGFnZSAqLwotCQlpZiAoIXBhZ2UgfHwgUGFnZVJlc2VydmVkKHBhZ2UpKQorCQlpZiAoIXBhZ2UgfHwgUGFnZVJlc2VydmVkKHBhZ2UpIHx8IFBhZ2VLc20ocGFnZSkpCiAJCQlnb3RvIHNldF9zdGF0dXM7CiAKIAkJZXJyID0gcGFnZV90b19uaWQocGFnZSk7CkBAIC0xMDQ0LDcgKzEwMDMsNyBAQAogCWludCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkgKz0gY2h1bmtfbnIpIHsKLQkJaWYgKGNodW5rX25yICsgaSA+IG5yX3BhZ2VzKQorCQlpZiAoY2h1bmtfbnIgPiBucl9wYWdlcyAtIGkpCiAJCQljaHVua19uciA9IG5yX3BhZ2VzIC0gaTsKIAogCQllcnIgPSBjb3B5X2Zyb21fdXNlcihjaHVua19wYWdlcywgJnBhZ2VzW2ldLApkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IDhjYjUwOGYuLjdhMzQzNmUgMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYworKysgYi9tbS9taW5jb3JlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNzIsNiArNzMsNDIgQEAKIAlpZiAoIXZtYSB8fCBhZGRyIDwgdm1hLT52bV9zdGFydCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CisJCXN0cnVjdCBoc3RhdGUgKmg7CisJCXVuc2lnbmVkIGxvbmcgbnJfaHVnZTsKKwkJdW5zaWduZWQgY2hhciBwcmVzZW50OworCisJCWkgPSAwOworCQluciA9IG1pbihwYWdlcywgKHZtYS0+dm1fZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVCk7CisJCWggPSBoc3RhdGVfdm1hKHZtYSk7CisJCW5yX2h1Z2UgPSAoKGFkZHIgKyBwYWdlcyAqIFBBR0VfU0laRSAtIDEpID4+IGh1Z2VfcGFnZV9zaGlmdChoKSkKKwkJCSAgLSAoYWRkciA+PiBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgMTsKKwkJbnJfaHVnZSA9IG1pbihucl9odWdlLAorCQkJICAgICAgKHZtYS0+dm1fZW5kIC0gYWRkcikgPj4gaHVnZV9wYWdlX3NoaWZ0KGgpKTsKKwkJd2hpbGUgKDEpIHsKKwkJCS8qIGh1Z2VwYWdlIGFsd2F5cyBpbiBSQU0gZm9yIG5vdywKKwkJCSAqIGJ1dCBnZW5lcmFsbHkgaXQgbmVlZHMgdG8gYmUgY2hlY2sgKi8KKwkJCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQoY3VycmVudC0+bW0sCisJCQkJCSAgICAgICBhZGRyICYgaHVnZV9wYWdlX21hc2soaCkpOworCQkJcHJlc2VudCA9ICEhKHB0ZXAgJiYKKwkJCQkgICAgICFodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlcCkpKTsKKwkJCXdoaWxlICgxKSB7CisJCQkJdmVjW2krK10gPSBwcmVzZW50OworCQkJCWFkZHIgKz0gUEFHRV9TSVpFOworCQkJCS8qIHJlYWNoIGJ1ZmZlciBsaW1pdCAqLworCQkJCWlmIChpID09IG5yKQorCQkJCQlyZXR1cm4gbnI7CisJCQkJLyogY2hlY2sgaHVnZXBhZ2UgYm9yZGVyICovCisJCQkJaWYgKCEoKGFkZHIgJiB+aHVnZV9wYWdlX21hc2soaCkpCisJCQkJICAgICAgPj4gUEFHRV9TSElGVCkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiBucjsKKwl9CisjZW5kaWYKKwogCS8qCiAJICogQ2FsY3VsYXRlIGhvdyBtYW55IHBhZ2VzIHRoZXJlIGFyZSBsZWZ0IGluIHRoZSBsYXN0IGxldmVsIG9mIHRoZQogCSAqIFBURSBhcnJheSBmb3Igb3VyIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCBiZDZmMGU0Li4yYjgzMzVhIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTg4LDI1ICs4OCwyMiBAQAogCX0KIH0KIAotLyoKLSAqIGNhbGxlZCBmcm9tIG11bmxvY2soKS9tdW5tYXAoKSBwYXRoIHdpdGggcGFnZSBzdXBwb3NlZGx5IG9uIHRoZSBMUlUuCisvKioKKyAqIG11bmxvY2tfdm1hX3BhZ2UgLSBtdW5sb2NrIGEgdm1hIHBhZ2UKKyAqIEBwYWdlIC0gcGFnZSB0byBiZSB1bmxvY2tlZAogICoKLSAqIE5vdGU6ICB1bmxpa2UgbWxvY2tfdm1hX3BhZ2UoKSwgd2UgY2FuJ3QganVzdCBjbGVhciB0aGUgUGFnZU1sb2NrZWQKLSAqIFtpbiB0cnlfdG9fbXVubG9jaygpXSBhbmQgdGhlbiBhdHRlbXB0IHRvIGlzb2xhdGUgdGhlIHBhZ2UuICBXZSBtdXN0Ci0gKiBpc29sYXRlIHRoZSBwYWdlIHRvIGtlZXAgb3RoZXJzIGZyb20gbWVzc2luZyB3aXRoIGl0cyB1bmV2aWN0YWJsZQotICogYW5kIG1sb2NrZWQgc3RhdGUgd2hpbGUgdHJ5aW5nIHRvIG11bmxvY2suICBIb3dldmVyLCB3ZSBwcmUtY2xlYXIgdGhlCi0gKiBtbG9ja2VkIHN0YXRlIGFueXdheSBhcyB3ZSBtaWdodCBsb3NlIHRoZSBpc29sYXRpb24gcmFjZSBhbmQgd2UgbWlnaHQKLSAqIG5vdCBnZXQgYW5vdGhlciBjaGFuY2UgdG8gY2xlYXIgUGFnZU1sb2NrZWQuICBJZiB3ZSBzdWNjZXNzZnVsbHkKLSAqIGlzb2xhdGUgdGhlIHBhZ2UgYW5kIHRyeV90b19tdW5sb2NrKCkgZGV0ZWN0cyBvdGhlciBWTV9MT0NLRUQgdm1hcwotICogbWFwcGluZyB0aGUgcGFnZSwgaXQgd2lsbCByZXN0b3JlIHRoZSBQYWdlTWxvY2tlZCBzdGF0ZSwgdW5sZXNzIHRoZSBwYWdlCi0gKiBpcyBtYXBwZWQgaW4gYSBub24tbGluZWFyIHZtYS4gIFNvLCB3ZSBnbyBhaGVhZCBhbmQgU2V0UGFnZU1sb2NrZWQoKSwKLSAqIHBlcmhhcHMgcmVkdW5kYW50bHkuCi0gKiBJZiB3ZSBsb3NlIHRoZSBpc29sYXRpb24gcmFjZSwgYW5kIHRoZSBwYWdlIGlzIG1hcHBlZCBieSBvdGhlciBWTV9MT0NLRUQKLSAqIHZtYXMsIHdlJ2xsIGRldGVjdCB0aGlzIGluIHZtc2Nhbi0tdmlhIHRyeV90b19tdW5sb2NrKCkgb3IgdHJ5X3RvX3VubWFwKCkKLSAqIGVpdGhlciBvZiB3aGljaCB3aWxsIHJlc3RvcmUgdGhlIFBhZ2VNbG9ja2VkIHN0YXRlIGJ5IGNhbGxpbmcKLSAqIG1sb2NrX3ZtYV9wYWdlKCkgYWJvdmUsIGlmIGl0IGNhbiBncmFiIHRoZSB2bWEncyBtbWFwIHNlbS4KKyAqIGNhbGxlZCBmcm9tIG11bmxvY2soKS9tdW5tYXAoKSBwYXRoIHdpdGggcGFnZSBzdXBwb3NlZGx5IG9uIHRoZSBMUlUuCisgKiBXaGVuIHdlIG11bmxvY2sgYSBwYWdlLCBiZWNhdXNlIHRoZSB2bWEgd2hlcmUgd2UgZm91bmQgdGhlIHBhZ2UgaXMgYmVpbmcKKyAqIG11bmxvY2soKWVkIG9yIG11bm1hcCgpZWQsIHdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciBvdGhlciB2bWFzIGhvbGQgdGhlCisgKiBwYWdlIGxvY2tlZCBzbyB0aGF0IHdlIGNhbiBsZWF2ZSBpdCBvbiB0aGUgdW5ldmljdGFibGUgbHJ1IGxpc3QgYW5kIG5vdAorICogYm90aGVyIHZtc2NhbiB3aXRoIGl0LiAgSG93ZXZlciwgdG8gd2FsayB0aGUgcGFnZSdzIHJtYXAgbGlzdCBpbgorICogdHJ5X3RvX211bmxvY2soKSB3ZSBtdXN0IGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSB0aGUgTFJVLiAgSWYgc29tZSBvdGhlcgorICogdGFzayBoYXMgcmVtb3ZlZCB0aGUgcGFnZSBmcm9tIHRoZSBMUlUsIHdlIHdvbid0IGJlIGFibGUgdG8gZG8gdGhhdC4KKyAqIFNvIHdlIGNsZWFyIHRoZSBQYWdlTWxvY2tlZCBhcyB3ZSBtaWdodCBub3QgZ2V0IGFub3RoZXIgY2hhbmNlLiAgSWYgd2UKKyAqIGNhbid0IGlzb2xhdGUgdGhlIHBhZ2UsIHdlIGxlYXZlIGl0IGZvciBwdXRiYWNrX2xydV9wYWdlKCkgYW5kIHZtc2NhbgorICogW3BhZ2VfcmVmZXJlbmNlZCgpL3RyeV90b191bm1hcCgpXSB0byBkZWFsIHdpdGguCiAgKi8KLXN0YXRpYyB2b2lkIG11bmxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit2b2lkIG11bmxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIApAQCAtMTE3LDE4ICsxMTQsMTggQEAKIAkJCS8qCiAJCQkgKiBkaWQgdHJ5X3RvX3VubG9jaygpIHN1Y2NlZWQgb3IgcHVudD8KIAkJCSAqLwotCQkJaWYgKHJldCA9PSBTV0FQX1NVQ0NFU1MgfHwgcmV0ID09IFNXQVBfQUdBSU4pCisJCQlpZiAocmV0ICE9IFNXQVBfTUxPQ0spCiAJCQkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdNVU5MT0NLRUQpOwogCiAJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIFdlIGxvc3QgdGhlIHJhY2UuICBsZXQgdHJ5X3RvX3VubWFwKCkgZGVhbAotCQkJICogd2l0aCBpdC4gIEF0IGxlYXN0IHdlIGdldCB0aGUgcGFnZSBzdGF0ZSBhbmQKLQkJCSAqIG1sb2NrIHN0YXRzIHJpZ2h0LiAgSG93ZXZlciwgcGFnZSBpcyBzdGlsbCBvbgotCQkJICogdGhlIG5vcmVjbGFpbSBsaXN0LiAgV2UnbGwgZml4IHRoYXQgdXAgd2hlbgotCQkJICogdGhlIHBhZ2UgaXMgZXZlbnR1YWxseSBmcmVlZCBvciB3ZSBzY2FuIHRoZQotCQkJICogbm9yZWNsYWltIGxpc3QuCisJCQkgKiBTb21lIG90aGVyIHRhc2sgaGFzIHJlbW92ZWQgdGhlIHBhZ2UgZnJvbSB0aGUgTFJVLgorCQkJICogcHV0YmFja19scnVfcGFnZSgpIHdpbGwgdGFrZSBjYXJlIG9mIHJlbW92aW5nIHRoZQorCQkJICogcGFnZSBmcm9tIHRoZSB1bmV2aWN0YWJsZSBsaXN0LCBpZiBuZWNlc3NhcnkuCisJCQkgKiB2bXNjYW4gW3BhZ2VfcmVmZXJlbmNlZCgpXSB3aWxsIG1vdmUgdGhlIHBhZ2UgYmFjaworCQkJICogdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3QgaWYgc29tZSBvdGhlciB2bWEgaGFzIGl0CisJCQkgKiBtbG9ja2VkLgogCQkJICovCiAJCQlpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQogCQkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHU1RSQU5ERUQpOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IGVkNzBhNjguLmQ5Yzc3YjIgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTExOTgsOCArMTE5OCwyMCBAQAogCQkJZ290byBmcmVlX3ZtYTsKIAl9CiAKLQlpZiAodm1hX3dhbnRzX3dyaXRlbm90aWZ5KHZtYSkpCisJaWYgKHZtYV93YW50c193cml0ZW5vdGlmeSh2bWEpKSB7CisJCXBncHJvdF90IHBwcm90ID0gdm1hLT52bV9wYWdlX3Byb3Q7CisKKwkJLyogQ2FuIHZtYS0+dm1fcGFnZV9wcm90IGhhdmUgY2hhbmdlZD8/CisJCSAqCisJCSAqIEFuc3dlcjogWWVzLCBkcml2ZXJzIG1heSBoYXZlIGNoYW5nZWQgaXQgaW4gdGhlaXIKKwkJICogICAgICAgICBmX29wLT5tbWFwIG1ldGhvZC4KKwkJICoKKwkJICogRW5zdXJlcyB0aGF0IHZtYXMgbWFya2VkIGFzIHVuY2FjaGVkIHN0YXkgdGhhdCB3YXkuCisJCSAqLwogCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MgJiB+Vk1fU0hBUkVEKTsKKwkJaWYgKHBncHJvdF92YWwocHByb3QpID09IHBncHJvdF92YWwocGdwcm90X25vbmNhY2hlZChwcHJvdCkpKQorCQkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKwl9CiAKIAl2bWFfbGluayhtbSwgdm1hLCBwcmV2LCByYl9saW5rLCByYl9wYXJlbnQpOwogCWZpbGUgPSB2bWEtPnZtX2ZpbGU7CkBAIC0xODExLDEwICsxODIzLDEwIEBACiB9CiAKIC8qCi0gKiBTcGxpdCBhIHZtYSBpbnRvIHR3byBwaWVjZXMgYXQgYWRkcmVzcyAnYWRkcicsIGEgbmV3IHZtYSBpcyBhbGxvY2F0ZWQKLSAqIGVpdGhlciBmb3IgdGhlIGZpcnN0IHBhcnQgb3IgdGhlIHRhaWwuCisgKiBfX3NwbGl0X3ZtYSgpIGJ5cGFzc2VzIHN5c2N0bF9tYXhfbWFwX2NvdW50IGNoZWNraW5nLiAgV2UgdXNlIHRoaXMgb24gdGhlCisgKiBtdW5tYXAgcGF0aCB3aGVyZSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gZmFpbC4KICAqLwotaW50IHNwbGl0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKK3N0YXRpYyBpbnQgX19zcGxpdF92bWEoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCiAJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbmV3X2JlbG93KQogewogCXN0cnVjdCBtZW1wb2xpY3kgKnBvbDsKQEAgLTE4MjQsOSArMTgzNiw2IEBACiAJCQkJCX4oaHVnZV9wYWdlX21hc2soaHN0YXRlX3ZtYSh2bWEpKSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtbS0+bWFwX2NvdW50ID49IHN5c2N0bF9tYXhfbWFwX2NvdW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQogCW5ldyA9IGttZW1fY2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4NjYsNiArMTg3NSwxOSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogU3BsaXQgYSB2bWEgaW50byB0d28gcGllY2VzIGF0IGFkZHJlc3MgJ2FkZHInLCBhIG5ldyB2bWEgaXMgYWxsb2NhdGVkCisgKiBlaXRoZXIgZm9yIHRoZSBmaXJzdCBwYXJ0IG9yIHRoZSB0YWlsLgorICovCitpbnQgc3BsaXRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBuZXdfYmVsb3cpCit7CisJaWYgKG1tLT5tYXBfY291bnQgPj0gc3lzY3RsX21heF9tYXBfY291bnQpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIF9fc3BsaXRfdm1hKG1tLCB2bWEsIGFkZHIsIG5ld19iZWxvdyk7Cit9CisKIC8qIE11bm1hcCBpcyBzcGxpdCBpbnRvIDIgbWFpbiBwYXJ0cyAtLSB0aGlzIHBhcnQgd2hpY2ggZmluZHMKICAqIHdoYXQgbmVlZHMgZG9pbmcsIGFuZCB0aGUgYXJlYXMgdGhlbXNlbHZlcywgd2hpY2ggZG8gdGhlCiAgKiB3b3JrLiAgVGhpcyBub3cgaGFuZGxlcyBwYXJ0aWFsIHVubWFwcGluZ3MuCkBAIC0xOTAxLDcgKzE5MjMsMTcgQEAKIAkgKiBwbGFjZXMgdG1wIHZtYSBhYm92ZSwgYW5kIGhpZ2hlciBzcGxpdF92bWEgcGxhY2VzIHRtcCB2bWEgYmVsb3cuCiAJICovCiAJaWYgKHN0YXJ0ID4gdm1hLT52bV9zdGFydCkgewotCQlpbnQgZXJyb3IgPSBzcGxpdF92bWEobW0sIHZtYSwgc3RhcnQsIDApOworCQlpbnQgZXJyb3I7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoYXQgbWFwX2NvdW50IG9uIHJldHVybiBmcm9tIG11bm1hcCgpIHdpbGwKKwkJICogbm90IGV4Y2VlZCBpdHMgbGltaXQ7IGJ1dCBsZXQgbWFwX2NvdW50IGdvIGp1c3QgYWJvdmUKKwkJICogaXRzIGxpbWl0IHRlbXBvcmFyaWx5LCB0byBoZWxwIGZyZWUgcmVzb3VyY2VzIGFzIGV4cGVjdGVkLgorCQkgKi8KKwkJaWYgKGVuZCA8IHZtYS0+dm1fZW5kICYmIG1tLT5tYXBfY291bnQgPj0gc3lzY3RsX21heF9tYXBfY291bnQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQllcnJvciA9IF9fc3BsaXRfdm1hKG1tLCB2bWEsIHN0YXJ0LCAwKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCQlwcmV2ID0gdm1hOwpAQCAtMTkxMCw3ICsxOTQyLDcgQEAKIAkvKiBEb2VzIGl0IHNwbGl0IHRoZSBsYXN0IG9uZT8gKi8KIAlsYXN0ID0gZmluZF92bWEobW0sIGVuZCk7CiAJaWYgKGxhc3QgJiYgZW5kID4gbGFzdC0+dm1fc3RhcnQpIHsKLQkJaW50IGVycm9yID0gc3BsaXRfdm1hKG1tLCBsYXN0LCBlbmQsIDEpOworCQlpbnQgZXJyb3IgPSBfX3NwbGl0X3ZtYShtbSwgbGFzdCwgZW5kLCAxKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDk4NzZmYTAuLjg2ODc5NzMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTE0Myw5ICsxMTQzLDYgQEAKIAkJaWYgKHJldCA8IHJsZW4pCiAJCQltZW1zZXQoYmFzZSArIHJldCwgMCwgcmxlbiAtIHJldCk7CiAKLQl9IGVsc2UgewotCQkvKiBpZiBpdCdzIGFuIGFub255bW91cyBtYXBwaW5nLCB0aGVuIGp1c3QgY2xlYXIgaXQgKi8KLQkJbWVtc2V0KGJhc2UsIDAsIHJsZW4pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTM0Myw2ICsxMzQwLDExIEBACiAJCWdvdG8gZXJyb3JfanVzdF9mcmVlOwogCWFkZF9ub21tdV9yZWdpb24ocmVnaW9uKTsKIAorCS8qIGNsZWFyIGFub255bW91cyBtYXBwaW5ncyB0aGF0IGRvbid0IGFzayBmb3IgdW5pbml0aWFsaXplZCBkYXRhICovCisJaWYgKCF2bWEtPnZtX2ZpbGUgJiYgIShmbGFncyAmIE1BUF9VTklOSVRJQUxJWkVEKSkKKwkJbWVtc2V0KCh2b2lkICopcmVnaW9uLT52bV9zdGFydCwgMCwKKwkJICAgICAgIHJlZ2lvbi0+dm1fZW5kIC0gcmVnaW9uLT52bV9zdGFydCk7CisKIAkvKiBva2F5Li4uIHdlIGhhdmUgYSBtYXBwaW5nOyBub3cgd2UgaGF2ZSB0byByZWdpc3RlciBpdCAqLwogCXJlc3VsdCA9IHZtYS0+dm1fc3RhcnQ7CiAKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IGVhMjE0N2QuLmY1MjQ4MWIgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtMTk2LDI3ICsxOTYsNDYgQEAKIC8qCiAgKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgYWxsb2NhdGlvbiBjb25zdHJhaW50LgogICovCi1zdGF0aWMgaW5saW5lIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwKLQkJCQkJCSAgICBnZnBfdCBnZnBfbWFzaykKLXsKICNpZmRlZiBDT05GSUdfTlVNQQorc3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwKKwkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm5vZGVtYXNrKQorewogCXN0cnVjdCB6b25lICp6b25lOwogCXN0cnVjdCB6b25lcmVmICp6OwogCWVudW0gem9uZV90eXBlIGhpZ2hfem9uZWlkeCA9IGdmcF96b25lKGdmcF9tYXNrKTsKLQlub2RlbWFza190IG5vZGVzID0gbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV07CiAKLQlmb3JfZWFjaF96b25lX3pvbmVsaXN0KHpvbmUsIHosIHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgpCi0JCWlmIChjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHpvbmUsIGdmcF9tYXNrKSkKLQkJCW5vZGVfY2xlYXIoem9uZV90b19uaWQoem9uZSksIG5vZGVzKTsKLQkJZWxzZQotCQkJcmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUOworCS8qCisJICogUmVhY2ggaGVyZSBvbmx5IHdoZW4gX19HRlBfTk9GQUlMIGlzIHVzZWQuIFNvLCB3ZSBzaG91bGQgYXZvaWQKKwkgKiB0byBraWxsIGN1cnJlbnQuV2UgaGF2ZSB0byByYW5kb20gdGFzayBraWxsIGluIHRoaXMgY2FzZS4KKwkgKiBIb3BlZnVsbHksIENPTlNUUkFJTlRfVEhJU05PREUuLi5idXQgbm8gd2F5IHRvIGhhbmRsZSBpdCwgbm93LgorCSAqLworCWlmIChnZnBfbWFzayAmIF9fR0ZQX1RISVNOT0RFKQorCQlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwogCi0JaWYgKCFub2Rlc19lbXB0eShub2RlcykpCisJLyoKKwkgKiBUaGUgbm9kZW1hc2sgaGVyZSBpcyBhIG5vZGVtYXNrIHBhc3NlZCB0byBhbGxvY19wYWdlcygpLiBOb3csCisJICogY3B1c2V0IGRvZXNuJ3QgdXNlIHRoaXMgbm9kZW1hc2sgZm9yIGl0cyBoYXJkd2FsbC9zb2Z0d2FsbC9oaWVyYXJjaHkKKwkgKiBmZWF0dXJlLiBtZW1wb2xpY3kgaXMgYW4gb25seSB1c2VyIG9mIG5vZGVtYXNrIGhlcmUuCisJICogY2hlY2sgbWVtcG9saWN5J3Mgbm9kZW1hc2sgY29udGFpbnMgYWxsIE5fSElHSF9NRU1PUlkKKwkgKi8KKwlpZiAobm9kZW1hc2sgJiYgIW5vZGVzX3N1YnNldChub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSwgKm5vZGVtYXNrKSkKIAkJcmV0dXJuIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWTsKLSNlbmRpZgorCisJLyogQ2hlY2sgdGhpcyBhbGxvY2F0aW9uIGZhaWx1cmUgaXMgY2F1c2VkIGJ5IGNwdXNldCdzIHdhbGwgZnVuY3Rpb24gKi8KKwlmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LAorCQkJaGlnaF96b25laWR4LCBub2RlbWFzaykKKwkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHpvbmUsIGdmcF9tYXNrKSkKKwkJCXJldHVybiBDT05TVFJBSU5UX0NQVVNFVDsKIAogCXJldHVybiBDT05TVFJBSU5UX05PTkU7CiB9CisjZWxzZQorc3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwKKwkJCQlnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spCit7CisJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKK30KKyNlbmRpZgogCiAvKgogICogU2ltcGxlIHNlbGVjdGlvbiBsb29wLiBXZSBjaG9zZSB0aGUgcHJvY2VzcyB3aXRoIHRoZSBoaWdoZXN0CkBAIC0zMzcsNiArMzU2LDI0IEBACiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIH0KIAorc3RhdGljIHZvaWQgZHVtcF9oZWFkZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyLAorCQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJcHJfd2FybmluZygiJXMgaW52b2tlZCBvb20ta2lsbGVyOiBnZnBfbWFzaz0weCV4LCBvcmRlcj0lZCwgIgorCQkib29tX2Fkaj0lZFxuIiwKKwkJY3VycmVudC0+Y29tbSwgZ2ZwX21hc2ssIG9yZGVyLCBjdXJyZW50LT5zaWduYWwtPm9vbV9hZGopOworCXRhc2tfbG9jayhjdXJyZW50KTsKKwljcHVzZXRfcHJpbnRfdGFza19tZW1zX2FsbG93ZWQoY3VycmVudCk7CisJdGFza191bmxvY2soY3VycmVudCk7CisJZHVtcF9zdGFjaygpOworCW1lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8obWVtLCBwKTsKKwlzaG93X21lbSgpOworCWlmIChzeXNjdGxfb29tX2R1bXBfdGFza3MpCisJCWR1bXBfdGFza3MobWVtKTsKK30KKworI2RlZmluZSBLKHgpICgoeCkgPDwgKFBBR0VfU0hJRlQtMTApKQorCiAvKgogICogU2VuZCBTSUdLSUxMIHRvIHRoZSBzZWxlY3RlZCAgcHJvY2VzcyBpcnJlc3BlY3RpdmUgb2YgIENBUF9TWVNfUkFXX0lPCiAgKiBmbGFnIHRob3VnaCBpdCdzIHVubGlrZWx5IHRoYXQgIHdlIHNlbGVjdCBhIHByb2Nlc3Mgd2l0aCBDQVBfU1lTX1JBV19JTwpAQCAtMzUwLDE1ICszODcsMjMgQEAKIAkJcmV0dXJuOwogCX0KIAorCXRhc2tfbG9jayhwKTsKIAlpZiAoIXAtPm1tKSB7CiAJCVdBUk5fT04oMSk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInRyaWVkIHRvIGtpbGwgYW4gbW0tbGVzcyB0YXNrIVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInRyaWVkIHRvIGtpbGwgYW4gbW0tbGVzcyB0YXNrICVkICglcykhXG4iLAorCQkJdGFza19waWRfbnIocCksIHAtPmNvbW0pOworCQl0YXNrX3VubG9jayhwKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICh2ZXJib3NlKQotCQlwcmludGsoS0VSTl9FUlIgIktpbGxlZCBwcm9jZXNzICVkICglcylcbiIsCi0JCQkJdGFza19waWRfbnIocCksIHAtPmNvbW0pOworCQlwcmludGsoS0VSTl9FUlIgIktpbGxlZCBwcm9jZXNzICVkICglcykgIgorCQkgICAgICAgInZzejolbHVrQiwgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCXG4iLAorCQkgICAgICAgdGFza19waWRfbnIocCksIHAtPmNvbW0sCisJCSAgICAgICBLKHAtPm1tLT50b3RhbF92bSksCisJCSAgICAgICBLKGdldF9tbV9jb3VudGVyKHAtPm1tLCBhbm9uX3JzcykpLAorCQkgICAgICAgSyhnZXRfbW1fY291bnRlcihwLT5tbSwgZmlsZV9yc3MpKSk7CisJdGFza191bmxvY2socCk7CiAKIAkvKgogCSAqIFdlIGdpdmUgb3VyIHNhY3JpZmljaWFsIGxhbWIgaGlnaCBwcmlvcml0eSBhbmQgYWNjZXNzIHRvCkBAIC0zOTUsMjAgKzQ0MCw4IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjOwogCi0JaWYgKHByaW50a19yYXRlbGltaXQoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBpbnZva2VkIG9vbS1raWxsZXI6ICIKLQkJCSJnZnBfbWFzaz0weCV4LCBvcmRlcj0lZCwgb29tX2Fkaj0lZFxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGdmcF9tYXNrLCBvcmRlciwKLQkJCWN1cnJlbnQtPnNpZ25hbC0+b29tX2Fkaik7Ci0JCXRhc2tfbG9jayhjdXJyZW50KTsKLQkJY3B1c2V0X3ByaW50X3Rhc2tfbWVtc19hbGxvd2VkKGN1cnJlbnQpOwotCQl0YXNrX3VubG9jayhjdXJyZW50KTsKLQkJZHVtcF9zdGFjaygpOwotCQltZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKG1lbSwgY3VycmVudCk7Ci0JCXNob3dfbWVtKCk7Ci0JCWlmIChzeXNjdGxfb29tX2R1bXBfdGFza3MpCi0JCQlkdW1wX3Rhc2tzKG1lbSk7Ci0JfQorCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCWR1bXBfaGVhZGVyKHAsIGdmcF9tYXNrLCBvcmRlciwgbWVtKTsKIAogCS8qCiAJICogSWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBleGl0aW5nLCBkb24ndCBhbGFybSB0aGUgc3lzYWRtaW4gb3Iga2lsbApAQCAtNTQ0LDYgKzU3Nyw3IEBACiAJLyogRm91bmQgbm90aGluZz8hPyEgRWl0aGVyIHdlIGhhbmcgZm9yZXZlciwgb3Igd2UgcGFuaWMuICovCiAJaWYgKCFwKSB7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZHVtcF9oZWFkZXIoTlVMTCwgZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKIAkJcGFuaWMoIk91dCBvZiBtZW1vcnkgYW5kIG5vIGtpbGxhYmxlIHByb2Nlc3Nlcy4uLlxuIik7CiAJfQogCkBAIC01OTksNyArNjMzLDggQEAKICAqIE9SIHRyeSB0byBiZSBzbWFydCBhYm91dCB3aGljaCBwcm9jZXNzIHRvIGtpbGwuIE5vdGUgdGhhdCB3ZQogICogZG9uJ3QgaGF2ZSB0byBiZSBwZXJmZWN0IGhlcmUsIHdlIGp1c3QgaGF2ZSB0byBiZSBnb29kLgogICovCi12b2lkIG91dF9vZl9tZW1vcnkoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcikKK3ZvaWQgb3V0X29mX21lbW9yeShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfbWFzaywKKwkJaW50IG9yZGVyLCBub2RlbWFza190ICpub2RlbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsKIAllbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbnQ7CkBAIC02MDksMTQgKzY0NCwxNiBAQAogCQkvKiBHb3Qgc29tZSBtZW1vcnkgYmFjayBpbiB0aGUgbGFzdCBzZWNvbmQuICovCiAJCXJldHVybjsKIAotCWlmIChzeXNjdGxfcGFuaWNfb25fb29tID09IDIpCisJaWYgKHN5c2N0bF9wYW5pY19vbl9vb20gPT0gMikgeworCQlkdW1wX2hlYWRlcihOVUxMLCBnZnBfbWFzaywgb3JkZXIsIE5VTEwpOwogCQlwYW5pYygib3V0IG9mIG1lbW9yeS4gQ29tcHVsc29yeSBwYW5pY19vbl9vb20gaXMgc2VsZWN0ZWQuXG4iKTsKKwl9CiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlIHdlcmUgbGltaXRhdGlvbnMgb24gdGhlIGFsbG9jYXRpb24gKG9ubHkgcmVsZXZhbnQgZm9yCiAJICogTlVNQSkgdGhhdCBtYXkgcmVxdWlyZSBkaWZmZXJlbnQgaGFuZGxpbmcuCiAJICovCi0JY29uc3RyYWludCA9IGNvbnN0cmFpbmVkX2FsbG9jKHpvbmVsaXN0LCBnZnBfbWFzayk7CisJY29uc3RyYWludCA9IGNvbnN0cmFpbmVkX2FsbG9jKHpvbmVsaXN0LCBnZnBfbWFzaywgbm9kZW1hc2spOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAKIAlzd2l0Y2ggKGNvbnN0cmFpbnQpIHsKQEAgLTYyNiw4ICs2NjMsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENPTlNUUkFJTlRfTk9ORToKLQkJaWYgKHN5c2N0bF9wYW5pY19vbl9vb20pCisJCWlmIChzeXNjdGxfcGFuaWNfb25fb29tKSB7CisJCQlkdW1wX2hlYWRlcihOVUxMLCBnZnBfbWFzaywgb3JkZXIsIE5VTEwpOwogCQkJcGFuaWMoIm91dCBvZiBtZW1vcnkuIHBhbmljX29uX29vbSBpcyBzZWxlY3RlZFxuIik7CisJCX0KIAkJLyogRmFsbC10aHJvdWdoICovCiAJY2FzZSBDT05TVFJBSU5UX0NQVVNFVDoKIAkJX19vdXRfb2ZfbWVtb3J5KGdmcF9tYXNrLCBvcmRlcik7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMmJjMmFjNi4uZDc5YjkyNSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMva21lbS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CkBAIC00ODYsNyArNDg3LDYgQEAKIAl6b25lLT5mcmVlX2FyZWFbb3JkZXJdLm5yX2ZyZWUrKzsKIH0KIAotI2lmZGVmIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQKIC8qCiAgKiBmcmVlX3BhZ2VfbWxvY2soKSAtLSBjbGVhbiB1cCBhdHRlbXB0cyB0byBmcmVlIGFuZCBtbG9ja2VkKCkgcGFnZS4KICAqIFBhZ2Ugc2hvdWxkIG5vdCBiZSBvbiBscnUsIHNvIG5vIG5lZWQgdG8gZml4IHRoYXQgdXAuCkBAIC00OTcsOSArNDk3LDYgQEAKIAlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOwogCV9fY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfTUxPQ0tGUkVFRCk7CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgZnJlZV9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBmcmVlX3BhZ2VzX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMTY1OCwxMiArMTY1NSwyMiBAQAogCWlmIChwYWdlKQogCQlnb3RvIG91dDsKIAotCS8qIFRoZSBPT00ga2lsbGVyIHdpbGwgbm90IGhlbHAgaGlnaGVyIG9yZGVyIGFsbG9jcyAqLwotCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSICYmICEoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKQotCQlnb3RvIG91dDsKLQorCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9GQUlMKSkgeworCQkvKiBUaGUgT09NIGtpbGxlciB3aWxsIG5vdCBoZWxwIGhpZ2hlciBvcmRlciBhbGxvY3MgKi8KKwkJaWYgKG9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpCisJCQlnb3RvIG91dDsKKwkJLyoKKwkJICogR0ZQX1RISVNOT0RFIGNvbnRhaW5zIF9fR0ZQX05PUkVUUlkgYW5kIHdlIG5ldmVyIGhpdCB0aGlzLgorCQkgKiBTYW5pdHkgY2hlY2sgZm9yIGJhcmUgY2FsbHMgb2YgX19HRlBfVEhJU05PREUsIG5vdCByZWFsIE9PTS4KKwkJICogVGhlIGNhbGxlciBzaG91bGQgaGFuZGxlIHBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlIGJ5IGl0c2VsZiBpZgorCQkgKiBpdCBzcGVjaWZpZXMgX19HRlBfVEhJU05PREUuCisJCSAqIE5vdGU6IEh1Z2VwYWdlIHVzZXMgaXQgYnV0IHdpbGwgaGl0IFBBR0VfQUxMT0NfQ09TVExZX09SREVSLgorCQkgKi8KKwkJaWYgKGdmcF9tYXNrICYgX19HRlBfVEhJU05PREUpCisJCQlnb3RvIG91dDsKKwl9CiAJLyogRXhoYXVzdGVkIHdoYXQgY2FuIGJlIGRvbmUgc28gaXQncyBibGFtbyB0aW1lICovCi0Jb3V0X29mX21lbW9yeSh6b25lbGlzdCwgZ2ZwX21hc2ssIG9yZGVyKTsKKwlvdXRfb2ZfbWVtb3J5KHpvbmVsaXN0LCBnZnBfbWFzaywgb3JkZXIsIG5vZGVtYXNrKTsKIAogb3V0OgogCWNsZWFyX3pvbmVsaXN0X29vbSh6b25lbGlzdCwgZ2ZwX21hc2spOwpAQCAtMzEyNyw3ICszMTM0LDcgQEAKIAogCQlpZiAocGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uKQogCQkJc2V0dXBfcGFnZWxpc3RfaGlnaG1hcmsoem9uZV9wY3Aoem9uZSwgY3B1KSwKLQkJCSAJKHpvbmUtPnByZXNlbnRfcGFnZXMgLyBwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pKTsKKwkJCSAgICAoem9uZS0+cHJlc2VudF9wYWdlcyAvIHBlcmNwdV9wYWdlbGlzdF9mcmFjdGlvbikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzU3Myw3ICszNTgwLDcgQEAKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGhvbGVzIGluIGEgcmFuZ2Ugb24gYSBub2RlLiBJZiBuaWQgaXMgTUFYX05VTU5PREVTLAogICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdCBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShpbnQgbmlkLAordW5zaWduZWQgbG9uZyBfX21lbWluaXQgX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoaW50IG5pZCwKIAkJCQl1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0X3BmbiwKIAkJCQl1bnNpZ25lZCBsb25nIHJhbmdlX2VuZF9wZm4pCiB7CkBAIC00MTAyLDcgKzQxMDksNyBAQAogfQogCiAvKiBzb3J0IHRoZSBub2RlX21hcCBieSBzdGFydF9wZm4gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzb3J0X25vZGVfbWFwKHZvaWQpCit2b2lkIF9faW5pdCBzb3J0X25vZGVfbWFwKHZvaWQpCiB7CiAJc29ydChlYXJseV9ub2RlX21hcCwgKHNpemVfdClucl9ub2RlbWFwX2VudHJpZXMsCiAJCQlzaXplb2Yoc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiksCkBAIC01MDAyLDIzICs1MDA5LDY1IEBACiBpbnQgc2V0X21pZ3JhdGV0eXBlX2lzb2xhdGUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqY3Vycl9wYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBmbiwgaXRlcjsKKwl1bnNpZ25lZCBsb25nIGltbW9iaWxlID0gMDsKKwlzdHJ1Y3QgbWVtb3J5X2lzb2xhdGVfbm90aWZ5IGFyZzsKKwlpbnQgbm90aWZpZXJfcmV0OwogCWludCByZXQgPSAtRUJVU1k7CiAJaW50IHpvbmVfaWR4OwogCiAJem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAl6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKLQkvKgotCSAqIEluIGZ1dHVyZSwgbW9yZSBtaWdyYXRlIHR5cGVzIHdpbGwgYmUgYWJsZSB0byBiZSBpc29sYXRpb24gdGFyZ2V0LgotCSAqLwotCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpICE9IE1JR1JBVEVfTU9WQUJMRSAmJgotCSAgICB6b25lX2lkeCAhPSBaT05FX01PVkFCTEUpCisJaWYgKGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSkgPT0gTUlHUkFURV9NT1ZBQkxFIHx8CisJICAgIHpvbmVfaWR4ID09IFpPTkVfTU9WQUJMRSkgeworCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKLQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7Ci0JbW92ZV9mcmVlcGFnZXNfYmxvY2soem9uZSwgcGFnZSwgTUlHUkFURV9JU09MQVRFKTsKLQlyZXQgPSAwOworCX0KKworCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCWFyZy5zdGFydF9wZm4gPSBwZm47CisJYXJnLm5yX3BhZ2VzID0gcGFnZWJsb2NrX25yX3BhZ2VzOworCWFyZy5wYWdlc19mb3VuZCA9IDA7CisKKwkvKgorCSAqIEl0IG1heSBiZSBwb3NzaWJsZSB0byBpc29sYXRlIGEgcGFnZWJsb2NrIGV2ZW4gaWYgdGhlCisJICogbWlncmF0ZXR5cGUgaXMgbm90IE1JR1JBVEVfTU9WQUJMRS4gVGhlIG1lbW9yeSBpc29sYXRpb24KKwkgKiBub3RpZmllciBjaGFpbiBpcyB1c2VkIGJ5IGJhbGxvb24gZHJpdmVycyB0byByZXR1cm4gdGhlCisJICogbnVtYmVyIG9mIHBhZ2VzIGluIGEgcmFuZ2UgdGhhdCBhcmUgaGVsZCBieSB0aGUgYmFsbG9vbgorCSAqIGRyaXZlciB0byBzaHJpbmsgbWVtb3J5LiBJZiBhbGwgdGhlIHBhZ2VzIGFyZSBhY2NvdW50ZWQgZm9yCisJICogYnkgYmFsbG9vbnMsIGFyZSBmcmVlLCBvciBvbiB0aGUgTFJVLCBpc29sYXRpb24gY2FuIGNvbnRpbnVlLgorCSAqIExhdGVyLCBmb3IgZXhhbXBsZSwgd2hlbiBtZW1vcnkgaG90cGx1ZyBub3RpZmllciBydW5zLCB0aGVzZQorCSAqIHBhZ2VzIHJlcG9ydGVkIGFzICJjYW4gYmUgaXNvbGF0ZWQiIHNob3VsZCBiZSBpc29sYXRlZChmcmVlZCkKKwkgKiBieSB0aGUgYmFsbG9vbiBkcml2ZXIgdGhyb3VnaCB0aGUgbWVtb3J5IG5vdGlmaWVyIGNoYWluLgorCSAqLworCW5vdGlmaWVyX3JldCA9IG1lbW9yeV9pc29sYXRlX25vdGlmeShNRU1fSVNPTEFURV9DT1VOVCwgJmFyZyk7CisJbm90aWZpZXJfcmV0ID0gbm90aWZpZXJfdG9fZXJybm8obm90aWZpZXJfcmV0KTsKKwlpZiAobm90aWZpZXJfcmV0IHx8ICFhcmcucGFnZXNfZm91bmQpCisJCWdvdG8gb3V0OworCisJZm9yIChpdGVyID0gcGZuOyBpdGVyIDwgKHBmbiArIHBhZ2VibG9ja19ucl9wYWdlcyk7IGl0ZXIrKykgeworCQlpZiAoIXBmbl92YWxpZF93aXRoaW4ocGZuKSkKKwkJCWNvbnRpbnVlOworCisJCWN1cnJfcGFnZSA9IHBmbl90b19wYWdlKGl0ZXIpOworCQlpZiAoIXBhZ2VfY291bnQoY3Vycl9wYWdlKSB8fCBQYWdlTFJVKGN1cnJfcGFnZSkpCisJCQljb250aW51ZTsKKworCQlpbW1vYmlsZSsrOworCX0KKworCWlmIChhcmcucGFnZXNfZm91bmQgPT0gaW1tb2JpbGUpCisJCXJldCA9IDA7CisKIG91dDoKKwlpZiAoIXJldCkgeworCQlzZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJCW1vdmVfZnJlZXBhZ2VzX2Jsb2NrKHpvbmUsIHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCWlmICghcmV0KQogCQlkcmFpbl9hbGxfcGFnZXMoKTsKQEAgLTUwODUsMyArNTEzNCwyNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIH0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCitib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG9yZGVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPCBNQVhfT1JERVI7IG9yZGVyKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2VfaGVhZCA9IHBhZ2UgLSAocGZuICYgKCgxIDw8IG9yZGVyKSAtIDEpKTsKKworCQlpZiAoUGFnZUJ1ZGR5KHBhZ2VfaGVhZCkgJiYgcGFnZV9vcmRlcihwYWdlX2hlYWQpID49IG9yZGVyKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBvcmRlciA8IE1BWF9PUkRFUjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IGM2ZjNlNTAuLmExOWFmOTUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYworKysgYi9tbS9wYWdlX2lvLmMKQEAgLTE5LDIwICsxOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgYmlvICpnZXRfc3dhcF9iaW8oZ2ZwX3QgZ2ZwX2ZsYWdzLCBwZ29mZl90IGluZGV4LAorc3RhdGljIHN0cnVjdCBiaW8gKmdldF9zd2FwX2JpbyhnZnBfdCBnZnBfZmxhZ3MsCiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGJpb19lbmRfaW9fdCBlbmRfaW8pCiB7CiAJc3RydWN0IGJpbyAqYmlvOwogCiAJYmlvID0gYmlvX2FsbG9jKGdmcF9mbGFncywgMSk7CiAJaWYgKGJpbykgewotCQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzOwotCQlzd3BfZW50cnlfdCBlbnRyeSA9IHsgLnZhbCA9IGluZGV4LCB9OwotCi0JCXNpcyA9IGdldF9zd2FwX2luZm9fc3RydWN0KHN3cF90eXBlKGVudHJ5KSk7Ci0JCWJpby0+Ymlfc2VjdG9yID0gbWFwX3N3YXBfcGFnZShzaXMsIHN3cF9vZmZzZXQoZW50cnkpKSAqCi0JCQkJCShQQUdFX1NJWkUgPj4gOSk7Ci0JCWJpby0+YmlfYmRldiA9IHNpcy0+YmRldjsKKwkJYmlvLT5iaV9zZWN0b3IgPSBtYXBfc3dhcF9wYWdlKHBhZ2UsICZiaW8tPmJpX2JkZXYpOworCQliaW8tPmJpX3NlY3RvciA8PD0gUEFHRV9TSElGVCAtIDk7CiAJCWJpby0+YmlfaW9fdmVjWzBdLmJ2X3BhZ2UgPSBwYWdlOwogCQliaW8tPmJpX2lvX3ZlY1swXS5idl9sZW4gPSBQQUdFX1NJWkU7CiAJCWJpby0+YmlfaW9fdmVjWzBdLmJ2X29mZnNldCA9IDA7CkBAIC0xMDIsOCArOTcsNyBAQAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZ290byBvdXQ7CiAJfQotCWJpbyA9IGdldF9zd2FwX2JpbyhHRlBfTk9JTywgcGFnZV9wcml2YXRlKHBhZ2UpLCBwYWdlLAotCQkJCWVuZF9zd2FwX2Jpb193cml0ZSk7CisJYmlvID0gZ2V0X3N3YXBfYmlvKEdGUF9OT0lPLCBwYWdlLCBlbmRfc3dhcF9iaW9fd3JpdGUpOwogCWlmIChiaW8gPT0gTlVMTCkgewogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC0xMjcsOCArMTIxLDcgQEAKIAogCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJVk1fQlVHX09OKFBhZ2VVcHRvZGF0ZShwYWdlKSk7Ci0JYmlvID0gZ2V0X3N3YXBfYmlvKEdGUF9LRVJORUwsIHBhZ2VfcHJpdmF0ZShwYWdlKSwgcGFnZSwKLQkJCQllbmRfc3dhcF9iaW9fcmVhZCk7CisJYmlvID0gZ2V0X3N3YXBfYmlvKEdGUF9LRVJORUwsIHBhZ2UsIGVuZF9zd2FwX2Jpb19yZWFkKTsKIAlpZiAoYmlvID09IE5VTEwpIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuYwppbmRleCBkNTg3OGJlLi43YjQ3YTU3IDEwMDY0NAotLS0gYS9tbS9wYWdld2Fsay5jCisrKyBiL21tL3BhZ2V3YWxrLmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAKIHN0YXRpYyBpbnQgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCSAgc3RydWN0IG1tX3dhbGsgKndhbGspCkBAIC0xMDcsNiArMTA4LDcgQEAKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAogCWlmIChhZGRyID49IGVuZCkKIAkJcmV0dXJuIGVycjsKQEAgLTExNywxMSArMTE5LDM4IEBACiAJcGdkID0gcGdkX29mZnNldCh3YWxrLT5tbSwgYWRkcik7CiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisKKwkJLyoKKwkJICogaGFuZGxlIGh1Z2V0bGIgdm1hIGluZGl2aWR1YWxseSBiZWNhdXNlIHBhZ2V0YWJsZSB3YWxrIGZvcgorCQkgKiB0aGUgaHVnZXRsYiBwYWdlIGlzIGRlcGVuZGVudCBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZAorCQkgKiB3ZSBjYW4ndCBoYW5kbGVkIGl0IGluIHRoZSBzYW1lIG1hbm5lciBhcyBub24taHVnZSBwYWdlcy4KKwkJICovCisJCXZtYSA9IGZpbmRfdm1hKHdhbGstPm1tLCBhZGRyKTsKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJCWlmICh2bWEgJiYgaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHsKKwkJCXB0ZV90ICpwdGU7CisJCQlzdHJ1Y3QgaHN0YXRlICpoczsKKworCQkJaWYgKHZtYS0+dm1fZW5kIDwgbmV4dCkKKwkJCQluZXh0ID0gdm1hLT52bV9lbmQ7CisJCQlocyA9IGhzdGF0ZV92bWEodm1hKTsKKwkJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldCh3YWxrLT5tbSwKKwkJCQkJICAgICAgYWRkciAmIGh1Z2VfcGFnZV9tYXNrKGhzKSk7CisJCQlpZiAocHRlICYmICFodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlKSkKKwkJCSAgICAmJiB3YWxrLT5odWdldGxiX2VudHJ5KQorCQkJCWVyciA9IHdhbGstPmh1Z2V0bGJfZW50cnkocHRlLCBhZGRyLAorCQkJCQkJCSAgbmV4dCwgd2Fsayk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgogCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpIHsKIAkJCWlmICh3YWxrLT5wdGVfaG9sZSkKIAkJCQllcnIgPSB3YWxrLT5wdGVfaG9sZShhZGRyLCBuZXh0LCB3YWxrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CisJCQlwZ2QrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICh3YWxrLT5wZ2RfZW50cnkpCkBAIC0xMzEsNyArMTYwLDggQEAKIAkJCWVyciA9IHdhbGtfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgd2Fsayk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKLQl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKwkJcGdkKys7CisJfSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDVhZGZjMjYuLjQ0MjAxMGMgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC00Niw4ICs0Niw2IEBACiAgKgogICogVG8gdXNlIHRoaXMgYWxsb2NhdG9yLCBhcmNoIGNvZGUgc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmdzLgogICoKLSAqIC0gZHJvcCBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCi0gKgogICogLSBkZWZpbmUgX19hZGRyX3RvX3BjcHVfcHRyKCkgYW5kIF9fcGNwdV9wdHJfdG9fYWRkcigpIHRvIHRyYW5zbGF0ZQogICogICByZWd1bGFyIGFkZHJlc3MgdG8gcGVyY3B1IHBvaW50ZXIgYW5kIGJhY2sgaWYgdGhleSBuZWVkIHRvIGJlCiAgKiAgIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0CkBAIC03NCw2ICs3Miw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBQQ1BVX1NMT1RfQkFTRV9TSElGVAkJNQkvKiAxLTMxIHNoYXJlcyB0aGUgc2FtZSBzbG90ICovCiAjZGVmaW5lIFBDUFVfREZMX01BUF9BTExPQwkJMTYJLyogc3RhcnQgYSBtYXAgd2l0aCAxNiBlbnRzICovCkBAIC0xMzAyLDYgKzEzMDEsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZyZWVfcGVyY3B1KTsKIAorLyoqCisgKiBwZXJfY3B1X3B0cl90b19waHlzIC0gY29udmVydCB0cmFuc2xhdGVkIHBlcmNwdSBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MKKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBiZSBjb252ZXJ0ZWQgdG8gcGh5c2ljYWwgYWRkcmVzcworICoKKyAqIEdpdmVuIEBhZGRyIHdoaWNoIGlzIGRlcmVmZXJlbmNlYWJsZSBhZGRyZXNzIG9idGFpbmVkIHZpYSBvbmUgb2YKKyAqIHBlcmNwdSBhY2Nlc3MgbWFjcm9zLCB0aGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgaXQgaW50byBpdHMgcGh5c2ljYWwKKyAqIGFkZHJlc3MuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyBAYWRkciBzdGF5cyB2YWxpZAorICogdW50aWwgdGhpcyBmdW5jdGlvbiBmaW5pc2hlcy4KKyAqCisgKiBSRVRVUk5TOgorICogVGhlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIEBhZGRyLgorICovCitwaHlzX2FkZHJfdCBwZXJfY3B1X3B0cl90b19waHlzKHZvaWQgKmFkZHIpCit7CisJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgPCBWTUFMTE9DX1NUQVJUIHx8CisJCQkodW5zaWduZWQgbG9uZylhZGRyID49IFZNQUxMT0NfRU5EKQorCQlyZXR1cm4gX19wYShhZGRyKTsKKwllbHNlCisJCXJldHVybiBwYWdlX3RvX3BoeXModm1hbGxvY190b19wYWdlKGFkZHIpKTsKK30KKwogc3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9jYWxjX2ZjX3NpemVzKHNpemVfdCBzdGF0aWNfc2l6ZSwKIAkJCQkJc2l6ZV90IHJlc2VydmVkX3NpemUsCiAJCQkJCXNzaXplX3QgKmR5bl9zaXplcCkKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggYWExYWEyMy4uMDMzYmMxMyAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTU0Nyw1ICs1NDcsMTcgQEAKIAogCS8qIGRvIHJlYWQtYWhlYWQgKi8KIAlvbmRlbWFuZF9yZWFkYWhlYWQobWFwcGluZywgcmEsIGZpbHAsIHRydWUsIG9mZnNldCwgcmVxX3NpemUpOworCisjaWZkZWYgQ09ORklHX0JMT0NLCisJLyoKKwkgKiBOb3JtYWxseSB0aGUgY3VycmVudCBwYWdlIGlzICF1cHRvZGF0ZSBhbmQgbG9ja19wYWdlKCkgd2lsbCBiZQorCSAqIGltbWVkaWF0ZWx5IGNhbGxlZCB0byBpbXBsaWNpdGx5IHVucGx1ZyB0aGUgZGV2aWNlLiBIb3dldmVyIHRoaXMKKwkgKiBpcyBub3QgYWx3YXlzIHRydWUgZm9yIFJBSUQgY29uaWZndXJhdGlvbnMsIHdoZXJlIGRhdGEgYXJyaXZlcworCSAqIG5vdCBzdHJpY3RseSBpbiB0aGVpciBzdWJtaXNzaW9uIG9yZGVyLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0bworCSAqIGV4cGxpY2l0bHkga2ljayBvZmYgdGhlIElPLgorCSAqLworCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCisJCWJsa19ydW5fYmFja2luZ19kZXYobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywgTlVMTCk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfY2FjaGVfYXN5bmNfcmVhZGFoZWFkKTsKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBkZDQzMzczLi4yNzhjZDI3IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02Nyw3ICs2OCw3IEBACiAJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3ZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQogewogCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKIH0KQEAgLTE3MSw3ICsxNzIsNyBAQAogCWxpc3RfZGVsKCZ2bWEtPmFub25fdm1hX25vZGUpOwogCiAJLyogV2UgbXVzdCBnYXJiYWdlIGNvbGxlY3QgdGhlIGFub25fdm1hIGlmIGl0J3MgZW1wdHkgKi8KLQllbXB0eSA9IGxpc3RfZW1wdHkoJmFub25fdm1hLT5oZWFkKTsKKwllbXB0eSA9IGxpc3RfZW1wdHkoJmFub25fdm1hLT5oZWFkKSAmJiAha3NtX3JlZmNvdW50KGFub25fdm1hKTsKIAlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwogCiAJaWYgKGVtcHR5KQpAQCAtMTgzLDYgKzE4NCw3IEBACiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGRhdGE7CiAKIAlzcGluX2xvY2tfaW5pdCgmYW5vbl92bWEtPmxvY2spOworCWtzbV9yZWZjb3VudF9pbml0KGFub25fdm1hKTsKIAlJTklUX0xJU1RfSEVBRCgmYW5vbl92bWEtPmhlYWQpOwogfQogCkBAIC0yMDIsOCArMjA0LDggQEAKIAl1bnNpZ25lZCBsb25nIGFub25fbWFwcGluZzsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlhbm9uX21hcHBpbmcgPSAodW5zaWduZWQgbG9uZykgcGFnZS0+bWFwcGluZzsKLQlpZiAoIShhbm9uX21hcHBpbmcgJiBQQUdFX01BUFBJTkdfQU5PTikpCisJYW5vbl9tYXBwaW5nID0gKHVuc2lnbmVkIGxvbmcpIEFDQ0VTU19PTkNFKHBhZ2UtPm1hcHBpbmcpOworCWlmICgoYW5vbl9tYXBwaW5nICYgUEFHRV9NQVBQSU5HX0ZMQUdTKSAhPSBQQUdFX01BUFBJTkdfQU5PTikKIAkJZ290byBvdXQ7CiAJaWYgKCFwYWdlX21hcHBlZChwYWdlKSkKIAkJZ290byBvdXQ7CkBAIC0yNDgsOCArMjUwLDcgQEAKIHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKSB7Ci0JCWlmICgodm9pZCAqKXZtYS0+YW5vbl92bWEgIT0KLQkJICAgICh2b2lkICopcGFnZS0+bWFwcGluZyAtIFBBR0VfTUFQUElOR19BTk9OKQorCQlpZiAodm1hLT5hbm9uX3ZtYSAhPSBwYWdlX2Fub25fdm1hKHBhZ2UpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlIGlmIChwYWdlLT5tYXBwaW5nICYmICEodm1hLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpIHsKIAkJaWYgKCF2bWEtPnZtX2ZpbGUgfHwKQEAgLTMzNywyMSArMzM4LDE1IEBACiAgKiBTdWJmdW5jdGlvbnMgb2YgcGFnZV9yZWZlcmVuY2VkOiBwYWdlX3JlZmVyZW5jZWRfb25lIGNhbGxlZAogICogcmVwZWF0ZWRseSBmcm9tIGVpdGhlciBwYWdlX3JlZmVyZW5jZWRfYW5vbiBvciBwYWdlX3JlZmVyZW5jZWRfZmlsZS4KICAqLwotc3RhdGljIGludCBwYWdlX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBwYWdlICpwYWdlLAotCQkJICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICAgIHVuc2lnbmVkIGludCAqbWFwY291bnQsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpCitpbnQgcGFnZV9yZWZlcmVuY2VkX29uZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqbWFwY291bnQsCisJCQl1bnNpZ25lZCBsb25nICp2bV9mbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOwogCWludCByZWZlcmVuY2VkID0gMDsKIAotCWFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOwotCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCi0JCWdvdG8gb3V0OwotCiAJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyZXNzLCAmcHRsLCAwKTsKIAlpZiAoIXB0ZSkKIAkJZ290byBvdXQ7CkBAIC0zODgsOSArMzgzLDEwIEBACiBvdXRfdW5tYXA6CiAJKCptYXBjb3VudCktLTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKLW91dDoKKwogCWlmIChyZWZlcmVuY2VkKQogCQkqdm1fZmxhZ3MgfD0gdm1hLT52bV9mbGFnczsKK291dDoKIAlyZXR1cm4gcmVmZXJlbmNlZDsKIH0KIApAQCAtNDA5LDYgKzQwNSw5IEBACiAKIAltYXBjb3VudCA9IHBhZ2VfbWFwY291bnQocGFnZSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOworCQlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQorCQkJY29udGludWU7CiAJCS8qCiAJCSAqIElmIHdlIGFyZSByZWNsYWltaW5nIG9uIGJlaGFsZiBvZiBhIGNncm91cCwgc2tpcAogCQkgKiBjb3VudGluZyBvbiBiZWhhbGYgb2YgcmVmZXJlbmNlcyBmcm9tIGRpZmZlcmVudApAQCAtNDE2LDcgKzQxNSw3IEBACiAJCSAqLwogCQlpZiAobWVtX2NvbnQgJiYgIW1tX21hdGNoX2Nncm91cCh2bWEtPnZtX21tLCBtZW1fY29udCkpCiAJCQljb250aW51ZTsKLQkJcmVmZXJlbmNlZCArPSBwYWdlX3JlZmVyZW5jZWRfb25lKHBhZ2UsIHZtYSwKKwkJcmVmZXJlbmNlZCArPSBwYWdlX3JlZmVyZW5jZWRfb25lKHBhZ2UsIHZtYSwgYWRkcmVzcywKIAkJCQkJCSAgJm1hcGNvdW50LCB2bV9mbGFncyk7CiAJCWlmICghbWFwY291bnQpCiAJCQlicmVhazsKQEAgLTQ3NCw2ICs0NzMsOSBAQAogCW1hcGNvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKIAogCXZtYV9wcmlvX3RyZWVfZm9yZWFjaCh2bWEsICZpdGVyLCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2FkZHJlc3MocGFnZSwgdm1hKTsKKwkJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkKKwkJCWNvbnRpbnVlOwogCQkvKgogCQkgKiBJZiB3ZSBhcmUgcmVjbGFpbWluZyBvbiBiZWhhbGYgb2YgYSBjZ3JvdXAsIHNraXAKIAkJICogY291bnRpbmcgb24gYmVoYWxmIG9mIHJlZmVyZW5jZXMgZnJvbSBkaWZmZXJlbnQKQEAgLTQ4MSw3ICs0ODMsNyBAQAogCQkgKi8KIAkJaWYgKG1lbV9jb250ICYmICFtbV9tYXRjaF9jZ3JvdXAodm1hLT52bV9tbSwgbWVtX2NvbnQpKQogCQkJY29udGludWU7Ci0JCXJlZmVyZW5jZWQgKz0gcGFnZV9yZWZlcmVuY2VkX29uZShwYWdlLCB2bWEsCisJCXJlZmVyZW5jZWQgKz0gcGFnZV9yZWZlcmVuY2VkX29uZShwYWdlLCB2bWEsIGFkZHJlc3MsCiAJCQkJCQkgICZtYXBjb3VudCwgdm1fZmxhZ3MpOwogCQlpZiAoIW1hcGNvdW50KQogCQkJYnJlYWs7CkBAIC01MDcsNDYgKzUwOSw0NyBAQAogCQkgICAgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MpCiB7CiAJaW50IHJlZmVyZW5jZWQgPSAwOworCWludCB3ZV9sb2NrZWQgPSAwOwogCiAJaWYgKFRlc3RDbGVhclBhZ2VSZWZlcmVuY2VkKHBhZ2UpKQogCQlyZWZlcmVuY2VkKys7CiAKIAkqdm1fZmxhZ3MgPSAwOwotCWlmIChwYWdlX21hcHBlZChwYWdlKSAmJiBwYWdlLT5tYXBwaW5nKSB7Ci0JCWlmIChQYWdlQW5vbihwYWdlKSkKKwlpZiAocGFnZV9tYXBwZWQocGFnZSkgJiYgcGFnZV9ybWFwcGluZyhwYWdlKSkgeworCQlpZiAoIWlzX2xvY2tlZCAmJiAoIVBhZ2VBbm9uKHBhZ2UpIHx8IFBhZ2VLc20ocGFnZSkpKSB7CisJCQl3ZV9sb2NrZWQgPSB0cnlsb2NrX3BhZ2UocGFnZSk7CisJCQlpZiAoIXdlX2xvY2tlZCkgeworCQkJCXJlZmVyZW5jZWQrKzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlpZiAodW5saWtlbHkoUGFnZUtzbShwYWdlKSkpCisJCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9rc20ocGFnZSwgbWVtX2NvbnQsCisJCQkJCQkJCXZtX2ZsYWdzKTsKKwkJZWxzZSBpZiAoUGFnZUFub24ocGFnZSkpCiAJCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9hbm9uKHBhZ2UsIG1lbV9jb250LAogCQkJCQkJCQl2bV9mbGFncyk7Ci0JCWVsc2UgaWYgKGlzX2xvY2tlZCkKKwkJZWxzZSBpZiAocGFnZS0+bWFwcGluZykKIAkJCXJlZmVyZW5jZWQgKz0gcGFnZV9yZWZlcmVuY2VkX2ZpbGUocGFnZSwgbWVtX2NvbnQsCiAJCQkJCQkJCXZtX2ZsYWdzKTsKLQkJZWxzZSBpZiAoIXRyeWxvY2tfcGFnZShwYWdlKSkKLQkJCXJlZmVyZW5jZWQrKzsKLQkJZWxzZSB7Ci0JCQlpZiAocGFnZS0+bWFwcGluZykKLQkJCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9maWxlKHBhZ2UsCi0JCQkJCQkJbWVtX2NvbnQsIHZtX2ZsYWdzKTsKKwkJaWYgKHdlX2xvY2tlZCkKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQl9CiAJfQotCitvdXQ6CiAJaWYgKHBhZ2VfdGVzdF9hbmRfY2xlYXJfeW91bmcocGFnZSkpCiAJCXJlZmVyZW5jZWQrKzsKIAogCXJldHVybiByZWZlcmVuY2VkOwogfQogCi1zdGF0aWMgaW50IHBhZ2VfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCBwYWdlX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAlpbnQgcmV0ID0gMDsKIAotCWFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOwotCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCi0JCWdvdG8gb3V0OwotCiAJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyZXNzLCAmcHRsLCAxKTsKIAlpZiAoIXB0ZSkKIAkJZ290byBvdXQ7CkBAIC01NzgsOCArNTgxLDEyIEBACiAKIAlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl2bWFfcHJpb190cmVlX2ZvcmVhY2godm1hLCAmaXRlciwgJm1hcHBpbmctPmlfbW1hcCwgcGdvZmYsIHBnb2ZmKSB7Ci0JCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQotCQkJcmV0ICs9IHBhZ2VfbWtjbGVhbl9vbmUocGFnZSwgdm1hKTsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CisJCQlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQorCQkJCWNvbnRpbnVlOworCQkJcmV0ICs9IHBhZ2VfbWtjbGVhbl9vbmUocGFnZSwgdm1hLCBhZGRyZXNzKTsKKwkJfQogCX0KIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC02MjAsMTQgKzYyNyw3IEBACiAJQlVHX09OKCFhbm9uX3ZtYSk7CiAJYW5vbl92bWEgPSAodm9pZCAqKSBhbm9uX3ZtYSArIFBBR0VfTUFQUElOR19BTk9OOwogCXBhZ2UtPm1hcHBpbmcgPSAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikgYW5vbl92bWE7Ci0KIAlwYWdlLT5pbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7Ci0KLQkvKgotCSAqIG5yX21hcHBlZCBzdGF0ZSBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IHR1cm5pbmcgb2ZmCi0JICogaW50ZXJydXB0cyBiZWNhdXNlIGl0IGlzIG5vdCBtb2RpZmllZCB2aWEgaW50ZXJydXB0LgotCSAqLwotCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9BTk9OX1BBR0VTKTsKIH0KIAogLyoqCkBAIC02NjUsMTQgKzY2NSwyMyBAQAogICogQHZtYToJdGhlIHZtIGFyZWEgaW4gd2hpY2ggdGhlIG1hcHBpbmcgaXMgYWRkZWQKICAqIEBhZGRyZXNzOgl0aGUgdXNlciB2aXJ0dWFsIGFkZHJlc3MgbWFwcGVkCiAgKgotICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwdGUgbG9jayBhbmQgdGhlIHBhZ2UgbXVzdCBiZSBsb2NrZWQuCisgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIHB0ZSBsb2NrLCBhbmQgdGhlIHBhZ2UgbXVzdCBiZSBsb2NrZWQgaW4KKyAqIHRoZSBhbm9uX3ZtYSBjYXNlOiB0byBzZXJpYWxpemUgbWFwcGluZyxpbmRleCBjaGVja2luZyBhZnRlciBzZXR0aW5nLAorICogYW5kIHRvIGVuc3VyZSB0aGF0IFBhZ2VBbm9uIGlzIG5vdCBiZWluZyB1cGdyYWRlZCByYWNpbHkgdG8gUGFnZUtzbQorICogKGJ1dCBQYWdlS3NtIGlzIG5ldmVyIGRvd25ncmFkZWQgdG8gUGFnZUFub24pLgogICovCiB2b2lkIHBhZ2VfYWRkX2Fub25fcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogeworCWludCBmaXJzdCA9IGF0b21pY19pbmNfYW5kX3Rlc3QoJnBhZ2UtPl9tYXBjb3VudCk7CisJaWYgKGZpcnN0KQorCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfQU5PTl9QQUdFUyk7CisJaWYgKHVubGlrZWx5KFBhZ2VLc20ocGFnZSkpKQorCQlyZXR1cm47CisKIAlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCVZNX0JVR19PTihhZGRyZXNzIDwgdm1hLT52bV9zdGFydCB8fCBhZGRyZXNzID49IHZtYS0+dm1fZW5kKTsKLQlpZiAoYXRvbWljX2luY19hbmRfdGVzdCgmcGFnZS0+X21hcGNvdW50KSkKKwlpZiAoZmlyc3QpCiAJCV9fcGFnZV9zZXRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJZWxzZQogCQlfX3BhZ2VfY2hlY2tfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CkBAIC02OTQsNiArNzAzLDcgQEAKIAlWTV9CVUdfT04oYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkcmVzcyA+PSB2bWEtPnZtX2VuZCk7CiAJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CiAJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAwKTsgLyogaW5jcmVtZW50IGNvdW50IChzdGFydHMgYXQgLTEpICovCisJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0FOT05fUEFHRVMpOwogCV9fcGFnZV9zZXRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIHZtYSkpCiAJCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIExSVV9BQ1RJVkVfQU5PTik7CkBAIC03MTEsNyArNzIxLDcgQEAKIHsKIAlpZiAoYXRvbWljX2luY19hbmRfdGVzdCgmcGFnZS0+X21hcGNvdW50KSkgewogCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9NQVBQRUQpOwotCQltZW1fY2dyb3VwX3VwZGF0ZV9tYXBwZWRfZmlsZV9zdGF0KHBhZ2UsIDEpOworCQltZW1fY2dyb3VwX3VwZGF0ZV9maWxlX21hcHBlZChwYWdlLCAxKTsKIAl9CiB9CiAKQEAgLTc0Myw4ICs3NTMsOCBAQAogCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfQU5PTl9QQUdFUyk7CiAJfSBlbHNlIHsKIAkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfTUFQUEVEKTsKKwkJbWVtX2Nncm91cF91cGRhdGVfZmlsZV9tYXBwZWQocGFnZSwgLTEpOwogCX0KLQltZW1fY2dyb3VwX3VwZGF0ZV9tYXBwZWRfZmlsZV9zdGF0KHBhZ2UsIC0xKTsKIAkvKgogCSAqIEl0IHdvdWxkIGJlIHRpZHkgdG8gcmVzZXQgdGhlIFBhZ2VBbm9uIG1hcHBpbmcgaGVyZSwKIAkgKiBidXQgdGhhdCBtaWdodCBvdmVyd3JpdGUgYSByYWNpbmcgcGFnZV9hZGRfYW5vbl9ybWFwCkBAIC03NjAsMjAgKzc3MCwxNSBAQAogICogU3ViZnVuY3Rpb25zIG9mIHRyeV90b191bm1hcDogdHJ5X3RvX3VubWFwX29uZSBjYWxsZWQKICAqIHJlcGVhdGVkbHkgZnJvbSBlaXRoZXIgdHJ5X3RvX3VubWFwX2Fub24gb3IgdHJ5X3RvX3VubWFwX2ZpbGUuCiAgKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJZW51bSB0dHVfZmxhZ3MgZmxhZ3MpCitpbnQgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBlbnVtIHR0dV9mbGFncyBmbGFncykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXB0ZV90ICpwdGU7CiAJcHRlX3QgcHRldmFsOwogCXNwaW5sb2NrX3QgKnB0bDsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKIAotCWFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOwotCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCi0JCWdvdG8gb3V0OwotCiAJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyZXNzLCAmcHRsLCAwKTsKIAlpZiAoIXB0ZSkKIAkJZ290byBvdXQ7CkBAIC03ODQsMTAgKzc4OSwxMSBAQAogCSAqIHNraXBwZWQgb3ZlciB0aGlzIG1tKSB0aGVuIHdlIHNob3VsZCByZWFjdGl2YXRlIGl0LgogCSAqLwogCWlmICghKGZsYWdzICYgVFRVX0lHTk9SRV9NTE9DSykpIHsKLQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJCXJldCA9IFNXQVBfTUxPQ0s7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQorCQkJZ290byBvdXRfbWxvY2s7CisKKwkJaWYgKFRUVV9BQ1RJT04oZmxhZ3MpID09IFRUVV9NVU5MT0NLKQogCQkJZ290byBvdXRfdW5tYXA7Ci0JCX0KIAl9CiAJaWYgKCEoZmxhZ3MgJiBUVFVfSUdOT1JFX0FDQ0VTUykpIHsKIAkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkgewpAQCAtODIyLDcgKzgyOCwxMSBAQAogCQkJICogU3RvcmUgdGhlIHN3YXAgbG9jYXRpb24gaW4gdGhlIHB0ZS4KIAkJCSAqIFNlZSBoYW5kbGVfcHRlX2ZhdWx0KCkgLi4uCiAJCQkgKi8KLQkJCXN3YXBfZHVwbGljYXRlKGVudHJ5KTsKKwkJCWlmIChzd2FwX2R1cGxpY2F0ZShlbnRyeSkgPCAwKSB7CisJCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlLCBwdGV2YWwpOworCQkJCXJldCA9IFNXQVBfRkFJTDsKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJCX0KIAkJCWlmIChsaXN0X2VtcHR5KCZtbS0+bW1saXN0KSkgewogCQkJCXNwaW5fbG9jaygmbW1saXN0X2xvY2spOwogCQkJCWlmIChsaXN0X2VtcHR5KCZtbS0+bW1saXN0KSkKQEAgLTg0OSw3ICs4NTksNiBAQAogCX0gZWxzZQogCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwogCi0KIAlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIApAQCAtODU3LDYgKzg2NiwyNyBAQAogCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwogb3V0OgogCXJldHVybiByZXQ7CisKK291dF9tbG9jazoKKwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKKworCisJLyoKKwkgKiBXZSBuZWVkIG1tYXBfc2VtIGxvY2tpbmcsIE90aGVyd2lzZSBWTV9MT0NLRUQgY2hlY2sgbWFrZXMKKwkgKiB1bnN0YWJsZSByZXN1bHQgYW5kIHJhY2UuIFBsdXMsIFdlIGNhbid0IHdhaXQgaGVyZSBiZWNhdXNlCisJICogd2Ugbm93IGhvbGQgYW5vbl92bWEtPmxvY2sgb3IgbWFwcGluZy0+aV9tbWFwX2xvY2suCisJICogaWYgdHJ5bG9jayBmYWlsZWQsIHRoZSBwYWdlIHJlbWFpbiBpbiBldmljdGFibGUgbHJ1IGFuZCBsYXRlcgorCSAqIHZtc2NhbiBjb3VsZCByZXRyeSB0byBtb3ZlIHRoZSBwYWdlIHRvIHVuZXZpY3RhYmxlIGxydSBpZiB0aGUKKwkgKiBwYWdlIGlzIGFjdHVhbGx5IG1sb2NrZWQuCisJICovCisJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCW1sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJcmV0ID0gU1dBUF9NTE9DSzsKKwkJfQorCQl1cF9yZWFkKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC05MjIsMTEgKzk1MiwxMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyoKLQkgKiBNTE9DS19QQUdFUyA9PiBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQuCi0JICogaWYgd2UgY2FuIGFjcXVpcmUgdGhlIG1tYXBfc2VtIGZvciByZWFkLCBhbmQgdm1hIGlzIFZNX0xPQ0tFRCwKKwkgKiBJZiB3ZSBjYW4gYWNxdWlyZSB0aGUgbW1hcF9zZW0gZm9yIHJlYWQsIGFuZCB2bWEgaXMgVk1fTE9DS0VELAogCSAqIGtlZXAgdGhlIHNlbSB3aGlsZSBzY2FubmluZyB0aGUgY2x1c3RlciBmb3IgbWxvY2tpbmcgcGFnZXMuCiAJICovCi0JaWYgKE1MT0NLX1BBR0VTICYmIGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwlpZiAoZG93bl9yZWFkX3RyeWxvY2soJnZtYS0+dm1fbW0tPm1tYXBfc2VtKSkgewogCQlsb2NrZWRfdm1hID0gKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpOwogCQlpZiAoIWxvY2tlZF92bWEpCiAJCQl1cF9yZWFkKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSk7IC8qIGRvbid0IG5lZWQgaXQgKi8KQEAgLTk3NiwyOSArMTAwNSwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBjb21tb24gaGFuZGxpbmcgZm9yIHBhZ2VzIG1hcHBlZCBpbiBWTV9MT0NLRUQgdm1hcwotICovCi1zdGF0aWMgaW50IHRyeV90b19tbG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpbnQgbWxvY2tlZCA9IDA7Ci0KLQlpZiAoZG93bl9yZWFkX3RyeWxvY2soJnZtYS0+dm1fbW0tPm1tYXBfc2VtKSkgewotCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgewotCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7Ci0JCQltbG9ja2VkKys7CS8qIHJlYWxseSBtbG9ja2VkIHRoZSBwYWdlICovCi0JCX0KLQkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOwotCX0KLQlyZXR1cm4gbWxvY2tlZDsKLX0KLQogLyoqCiAgKiB0cnlfdG9fdW5tYXBfYW5vbiAtIHVubWFwIG9yIHVubG9jayBhbm9ueW1vdXMgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkCiAgKiBybWFwIG1ldGhvZAogICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwL3VubG9jawotICogQHVubG9jazogIHJlcXVlc3QgZm9yIHVubG9jayByYXRoZXIgdGhhbiB1bm1hcCBbdW5saWtlbHldCi0gKiBAbWlncmF0aW9uOiAgdW5tYXBwaW5nIGZvciBtaWdyYXRpb24gLSBpZ25vcmVkIGlmIEB1bmxvY2sKKyAqIEBmbGFnczogYWN0aW9uIGFuZCBmbGFncwogICoKICAqIEZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIHBhZ2UgdXNpbmcgdGhlIG1hcHBpbmcgcG9pbnRlciBhbmQgdGhlIHZtYSBjaGFpbnMKICAqIGNvbnRhaW5lZCBpbiB0aGUgYW5vbl92bWEgc3RydWN0IGl0IHBvaW50cyB0by4KQEAgLTEwMTQsNDIgKzEwMjUsMjIgQEAKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXVuc2lnbmVkIGludCBtbG9ja2VkID0gMDsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKLQlpbnQgdW5sb2NrID0gVFRVX0FDVElPTihmbGFncykgPT0gVFRVX01VTkxPQ0s7Ci0KLQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKLQkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCiAKIAlhbm9uX3ZtYSA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKIAlpZiAoIWFub25fdm1hKQogCQlyZXR1cm4gcmV0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgewotCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgewotCQkJaWYgKCEoKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpICYmCi0JCQkgICAgICBwYWdlX21hcHBlZF9pbl92bWEocGFnZSwgdm1hKSkpCi0JCQkJY29udGludWU7ICAvKiBtdXN0IHZpc2l0IGFsbCB1bmxvY2tlZCB2bWFzICovCi0JCQlyZXQgPSBTV0FQX01MT0NLOyAgLyogc2F3IGF0IGxlYXN0IG9uZSBtbG9ja2VkIHZtYSAqLwotCQl9IGVsc2UgewotCQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsIGZsYWdzKTsKLQkJCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spIHsKLQkJCW1sb2NrZWQgPSB0cnlfdG9fbWxvY2tfcGFnZShwYWdlLCB2bWEpOwotCQkJaWYgKG1sb2NrZWQpCi0JCQkJYnJlYWs7CS8qIHN0b3AgaWYgYWN0dWFsbHkgbWxvY2tlZCBwYWdlICovCi0JCX0KKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2FkZHJlc3MocGFnZSwgdm1hKTsKKwkJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgYWRkcmVzcywgZmxhZ3MpOworCQlpZiAocmV0ICE9IFNXQVBfQUdBSU4gfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQkJYnJlYWs7CiAJfQogCiAJcGFnZV91bmxvY2tfYW5vbl92bWEoYW5vbl92bWEpOwotCi0JaWYgKG1sb2NrZWQpCi0JCXJldCA9IFNXQVBfTUxPQ0s7CS8qIGFjdHVhbGx5IG1sb2NrZWQgdGhlIHBhZ2UgKi8KLQllbHNlIGlmIChyZXQgPT0gU1dBUF9NTE9DSykKLQkJcmV0ID0gU1dBUF9BR0FJTjsJLyogc2F3IFZNX0xPQ0tFRCB2bWEgKi8KLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwNzksNDggKzEwNzAsMzAgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9ubF9jdXJzb3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWF4X25sX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBtYXBjb3VudDsKLQl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7Ci0JaW50IHVubG9jayA9IFRUVV9BQ1RJT04oZmxhZ3MpID09IFRUVV9NVU5MT0NLOwotCi0JaWYgKE1MT0NLX1BBR0VTICYmIHVubGlrZWx5KHVubG9jaykpCi0JCXJldCA9IFNXQVBfU1VDQ0VTUzsJLyogZGVmYXVsdCBmb3IgdHJ5X3RvX211bmxvY2soKSAqLwogCiAJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CiAJdm1hX3ByaW9fdHJlZV9mb3JlYWNoKHZtYSwgJml0ZXIsICZtYXBwaW5nLT5pX21tYXAsIHBnb2ZmLCBwZ29mZikgewotCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgewotCQkJaWYgKCEoKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpICYmCi0JCQkJCQlwYWdlX21hcHBlZF9pbl92bWEocGFnZSwgdm1hKSkpCi0JCQkJY29udGludWU7CS8qIG11c3QgdmlzaXQgYWxsIHZtYXMgKi8KLQkJCXJldCA9IFNXQVBfTUxPQ0s7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgZmxhZ3MpOwotCQkJaWYgKHJldCA9PSBTV0FQX0ZBSUwgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChyZXQgPT0gU1dBUF9NTE9DSykgewotCQkJbWxvY2tlZCA9IHRyeV90b19tbG9ja19wYWdlKHBhZ2UsIHZtYSk7Ci0JCQlpZiAobWxvY2tlZCkKLQkJCQlicmVhazsgIC8qIHN0b3AgaWYgYWN0dWFsbHkgbWxvY2tlZCBwYWdlICovCi0JCX0KKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2FkZHJlc3MocGFnZSwgdm1hKTsKKwkJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgYWRkcmVzcywgZmxhZ3MpOworCQlpZiAocmV0ICE9IFNXQVBfQUdBSU4gfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG1sb2NrZWQpCi0JCWdvdG8gb3V0OwotCiAJaWYgKGxpc3RfZW1wdHkoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogV2UgZG9uJ3QgYm90aGVyIHRvIHRyeSB0byBmaW5kIHRoZSBtdW5sb2NrZWQgcGFnZSBpbiBub25saW5lYXJzLgorCSAqIEl0J3MgY29zdGx5LiBJbnN0ZWFkLCBsYXRlciwgcGFnZSByZWNsYWltIGxvZ2ljIG1heSBjYWxsCisJICogdHJ5X3RvX3VubWFwKFRUVV9NVU5MT0NLKSBhbmQgcmVjb3ZlciBQR19tbG9ja2VkIGxhemlseS4KKwkgKi8KKwlpZiAoVFRVX0FDVElPTihmbGFncykgPT0gVFRVX01VTkxPQ0spCisJCWdvdG8gb3V0OworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyLAogCQkJCQkJc2hhcmVkLnZtX3NldC5saXN0KSB7Ci0JCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKSB7Ci0JCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKLQkJCQljb250aW51ZTsJLyogbXVzdCB2aXNpdCBhbGwgdm1hcyAqLwotCQkJcmV0ID0gU1dBUF9NTE9DSzsJLyogbGVhdmUgbWxvY2tlZCA9PSAwICovCi0JCQlnb3RvIG91dDsJCS8qIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyICovCi0JCX0KLQkJaWYgKCFNTE9DS19QQUdFUyAmJiAhKGZsYWdzICYgVFRVX0lHTk9SRV9NTE9DSykgJiYKLQkJCSh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKLQkJCWNvbnRpbnVlOwogCQljdXJzb3IgPSAodW5zaWduZWQgbG9uZykgdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJCWlmIChjdXJzb3IgPiBtYXhfbmxfY3Vyc29yKQogCQkJbWF4X25sX2N1cnNvciA9IGN1cnNvcjsKQEAgLTExNTMsMTYgKzExMjYsMTIgQEAKIAlkbyB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwKIAkJCQkJCXNoYXJlZC52bV9zZXQubGlzdCkgewotCQkJaWYgKCFNTE9DS19QQUdFUyAmJiAhKGZsYWdzICYgVFRVX0lHTk9SRV9NTE9DSykgJiYKLQkJCSAgICAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCi0JCQkJY29udGludWU7CiAJCQljdXJzb3IgPSAodW5zaWduZWQgbG9uZykgdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJCQl3aGlsZSAoIGN1cnNvciA8IG1heF9ubF9jdXJzb3IgJiYKIAkJCQljdXJzb3IgPCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIHsKLQkJCQlyZXQgPSB0cnlfdG9fdW5tYXBfY2x1c3RlcihjdXJzb3IsICZtYXBjb3VudCwKLQkJCQkJCQkJdm1hLCBwYWdlKTsKLQkJCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spCi0JCQkJCW1sb2NrZWQgPSAyOwkvKiB0byByZXR1cm4gYmVsb3cgKi8KKwkJCQlpZiAodHJ5X3RvX3VubWFwX2NsdXN0ZXIoY3Vyc29yLCAmbWFwY291bnQsCisJCQkJCQl2bWEsIHBhZ2UpID09IFNXQVBfTUxPQ0spCisJCQkJCXJldCA9IFNXQVBfTUxPQ0s7CiAJCQkJY3Vyc29yICs9IENMVVNURVJfU0laRTsKIAkJCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICh2b2lkICopIGN1cnNvcjsKIAkJCQlpZiAoKGludCltYXBjb3VudCA8PSAwKQpAQCAtMTE4MywxMCArMTE1Miw2IEBACiAJCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCWlmIChtbG9ja2VkKQotCQlyZXQgPSBTV0FQX01MT0NLOwkvKiBhY3R1YWxseSBtbG9ja2VkIHRoZSBwYWdlICovCi0JZWxzZSBpZiAocmV0ID09IFNXQVBfTUxPQ0spCi0JCXJldCA9IFNXQVBfQUdBSU47CS8qIHNhdyBWTV9MT0NLRUQgdm1hICovCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIxMCw3ICsxMTc1LDkgQEAKIAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKLQlpZiAoUGFnZUFub24ocGFnZSkpCisJaWYgKHVubGlrZWx5KFBhZ2VLc20ocGFnZSkpKQorCQlyZXQgPSB0cnlfdG9fdW5tYXBfa3NtKHBhZ2UsIGZsYWdzKTsKKwllbHNlIGlmIChQYWdlQW5vbihwYWdlKSkKIAkJcmV0ID0gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgZmxhZ3MpOwogCWVsc2UKIAkJcmV0ID0gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgZmxhZ3MpOwpAQCAtMTIyOSwxNyArMTE5Niw5OCBAQAogICoKICAqIFJldHVybiB2YWx1ZXMgYXJlOgogICoKLSAqIFNXQVBfU1VDQ0VTUwktIG5vIHZtYSdzIGhvbGRpbmcgcGFnZSBtbG9ja2VkLgorICogU1dBUF9BR0FJTgktIG5vIHZtYSBpcyBob2xkaW5nIHBhZ2UgbWxvY2tlZCwgb3IsCiAgKiBTV0FQX0FHQUlOCS0gcGFnZSBtYXBwZWQgaW4gbWxvY2tlZCB2bWEgLS0gY291bGRuJ3QgYWNxdWlyZSBtbWFwIHNlbQorICogU1dBUF9GQUlMCS0gcGFnZSBjYW5ub3QgYmUgbG9jYXRlZCBhdCBwcmVzZW50CiAgKiBTV0FQX01MT0NLCS0gcGFnZSBpcyBub3cgbWxvY2tlZC4KICAqLwogaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQogewogCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSB8fCBQYWdlTFJVKHBhZ2UpKTsKIAotCWlmIChQYWdlQW5vbihwYWdlKSkKKwlpZiAodW5saWtlbHkoUGFnZUtzbShwYWdlKSkpCisJCXJldHVybiB0cnlfdG9fdW5tYXBfa3NtKHBhZ2UsIFRUVV9NVU5MT0NLKTsKKwllbHNlIGlmIChQYWdlQW5vbihwYWdlKSkKIAkJcmV0dXJuIHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIFRUVV9NVU5MT0NLKTsKIAllbHNlCiAJCXJldHVybiB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCBUVFVfTVVOTE9DSyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCisvKgorICogcm1hcF93YWxrKCkgYW5kIGl0cyBoZWxwZXJzIHJtYXBfd2Fsa19hbm9uKCkgYW5kIHJtYXBfd2Fsa19maWxlKCk6CisgKiBDYWxsZWQgYnkgbWlncmF0ZS5jIHRvIHJlbW92ZSBtaWdyYXRpb24gcHRlcywgYnV0IG1pZ2h0IGJlIHVzZWQgbW9yZSBsYXRlci4KKyAqLworc3RhdGljIGludCBybWFwX3dhbGtfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50ICgqcm1hcF9vbmUpKHN0cnVjdCBwYWdlICosCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopLCB2b2lkICphcmcpCit7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKKworCS8qCisJICogTm90ZTogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgY2Fubm90IHVzZSBwYWdlX2xvY2tfYW5vbl92bWEoKQorCSAqIGJlY2F1c2UgdGhhdCBkZXBlbmRzIG9uIHBhZ2VfbWFwcGVkKCk7IGJ1dCBub3QgYWxsIGl0cyB1c2FnZXMKKwkgKiBhcmUgaG9sZGluZyBtbWFwX3NlbSwgd2hpY2ggYWxzbyBnYXZlIHRoZSBuZWNlc3NhcnkgZ3VhcmFudGVlCisJICogKHRoYXQgdGhpcyBhbm9uX3ZtYSdzIHNsYWIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gZGVzdHJveWVkKS4KKwkgKiBUaGlzIG5lZWRzIHRvIGJlIHJldmlld2VkIGxhdGVyOiBhdm9pZGluZyBwYWdlX2xvY2tfYW5vbl92bWEoKQorCSAqIGlzIHJpc2t5LCBhbmQgY3VycmVudGx5IGxpbWl0cyB0aGUgdXNlZnVsbmVzcyBvZiBybWFwX3dhbGsoKS4KKwkgKi8KKwlhbm9uX3ZtYSA9IHBhZ2VfYW5vbl92bWEocGFnZSk7CisJaWYgKCFhbm9uX3ZtYSkKKwkJcmV0dXJuIHJldDsKKwlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CisJCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCisJCQljb250aW51ZTsKKwkJcmV0ID0gcm1hcF9vbmUocGFnZSwgdm1hLCBhZGRyZXNzLCBhcmcpOworCQlpZiAocmV0ICE9IFNXQVBfQUdBSU4pCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJtYXBfd2Fsa19maWxlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgKCpybWFwX29uZSkoc3RydWN0IHBhZ2UgKiwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiksIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJcGdvZmZfdCBwZ29mZiA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IHByaW9fdHJlZV9pdGVyIGl0ZXI7CisJaW50IHJldCA9IFNXQVBfQUdBSU47CisKKwlpZiAoIW1hcHBpbmcpCisJCXJldHVybiByZXQ7CisJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJdm1hX3ByaW9fdHJlZV9mb3JlYWNoKHZtYSwgJml0ZXIsICZtYXBwaW5nLT5pX21tYXAsIHBnb2ZmLCBwZ29mZikgeworCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOworCQlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQorCQkJY29udGludWU7CisJCXJldCA9IHJtYXBfb25lKHBhZ2UsIHZtYSwgYWRkcmVzcywgYXJnKTsKKwkJaWYgKHJldCAhPSBTV0FQX0FHQUlOKQorCQkJYnJlYWs7CisJfQorCS8qCisJICogTm8gbm9ubGluZWFyIGhhbmRsaW5nOiBiZWluZyBhbHdheXMgc2hhcmVkLCBub25saW5lYXIgdm1hcworCSAqIG5ldmVyIGNvbnRhaW4gbWlncmF0aW9uIHB0ZXMuICBEZWNpZGUgd2hhdCB0byBkbyBhYm91dCB0aGlzCisJICogbGltaXRhdGlvbiB0byBsaW5lYXIgd2hlbiB3ZSBuZWVkIHJtYXBfd2FsaygpIG9uIG5vbmxpbmVhci4KKwkgKi8KKwlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludCBybWFwX3dhbGsoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCAoKnJtYXBfb25lKShzdHJ1Y3QgcGFnZSAqLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKSwgdm9pZCAqYXJnKQoreworCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlpZiAodW5saWtlbHkoUGFnZUtzbShwYWdlKSkpCisJCXJldHVybiBybWFwX3dhbGtfa3NtKHBhZ2UsIHJtYXBfb25lLCBhcmcpOworCWVsc2UgaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQlyZXR1cm4gcm1hcF93YWxrX2Fub24ocGFnZSwgcm1hcF9vbmUsIGFyZyk7CisJZWxzZQorCQlyZXR1cm4gcm1hcF93YWxrX2ZpbGUocGFnZSwgcm1hcF9vbmUsIGFyZyk7Cit9CisjZW5kaWYgLyogQ09ORklHX01JR1JBVElPTiAqLwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggMzU2ZGQ5OTUuLmVlZjRlYmUgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50OwogCkBAIC00Miw2ICs0MSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydGZzLmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19hY2wuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC04MTAsNyArODEwLDcgQEAKIAkJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKICNpZmRlZiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMCiAJaWYgKCFlcnJvciAmJiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpKQotCQllcnJvciA9IGdlbmVyaWNfYWNsX2NobW9kKGlub2RlLCAmc2htZW1fYWNsX29wcyk7CisJCWVycm9yID0gZ2VuZXJpY19hY2xfY2htb2QoaW5vZGUpOwogI2VuZGlmCiAJaWYgKHBhZ2UpCiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTEwMTcsNyArMTAxNywxNCBAQAogCQkJZ290byBvdXQ7CiAJfQogCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotb3V0OglyZXR1cm4gZm91bmQ7CS8qIDAgb3IgMSBvciAtRU5PTUVNICovCisJLyoKKwkgKiBDYW4gc29tZSByYWNlIGJyaW5nIHVzIGhlcmU/ICBXZSd2ZSBiZWVuIGhvbGRpbmcgcGFnZSBsb2NrLAorCSAqIHNvIEkgdGhpbmsgbm90OyBidXQgd291bGQgcmF0aGVyIHRyeSBhZ2FpbiBsYXRlciB0aGFuIEJVRygpCisJICovCisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworb3V0OgorCXJldHVybiAoZm91bmQgPCAwKSA/IGZvdW5kIDogMDsKIH0KIAogLyoKQEAgLTEwODAsNyArMTA4Nyw3IEBACiAJCWVsc2UKIAkJCWlub2RlID0gTlVMTDsKIAkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQlzd2FwX2R1cGxpY2F0ZShzd2FwKTsKKwkJc3dhcF9zaG1lbV9hbGxvYyhzd2FwKTsKIAkJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwkvKiBwYWdlY2FjaGUgcmVmICovCiAJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7CkBAIC0xODE3LDExICsxODI0LDE1IEBACiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQogCQl9Ci0JCWVycm9yID0gc2htZW1fYWNsX2luaXQoaW5vZGUsIGRpcik7CisjaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTAorCQllcnJvciA9IGdlbmVyaWNfYWNsX2luaXQoaW5vZGUsIGRpcik7CiAJCWlmIChlcnJvcikgewogCQkJaXB1dChpbm9kZSk7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KKyNlbHNlCisJCWVycm9yID0gMDsKKyNlbmRpZgogCQlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSB7CiAJCQlpbm9kZS0+aV9naWQgPSBkaXItPmlfZ2lkOwogCQkJaWYgKFNfSVNESVIobW9kZSkpCkBAIC0yMDM2LDI3ICsyMDQ3LDI4IEBACiAgKiBmaWxlc3lzdGVtIGxldmVsLCB0aG91Z2guCiAgKi8KIAotc3RhdGljIHNpemVfdCBzaG1lbV94YXR0cl9zZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsCitzdGF0aWMgc2l6ZV90IHNobWVtX3hhdHRyX3NlY3VyaXR5X2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpsaXN0LAogCQkJCQlzaXplX3QgbGlzdF9sZW4sIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCXNpemVfdCBuYW1lX2xlbikKKwkJCQkJc2l6ZV90IG5hbWVfbGVuLCBpbnQgaGFuZGxlcl9mbGFncykKIHsKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfbGlzdHNlY3VyaXR5KGlub2RlLCBsaXN0LCBsaXN0X2xlbik7CisJcmV0dXJuIHNlY3VyaXR5X2lub2RlX2xpc3RzZWN1cml0eShkZW50cnktPmRfaW5vZGUsIGxpc3QsIGxpc3RfbGVuKTsKIH0KIAotc3RhdGljIGludCBzaG1lbV94YXR0cl9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgc2htZW1feGF0dHJfc2VjdXJpdHlfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGhhbmRsZXJfZmxhZ3MpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHhhdHRyX2dldHNlY3VyaXR5KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOworCXJldHVybiB4YXR0cl9nZXRzZWN1cml0eShkZW50cnktPmRfaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2htZW1feGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorc3RhdGljIGludCBzaG1lbV94YXR0cl9zZWN1cml0eV9zZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IGhhbmRsZXJfZmxhZ3MpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3NldHNlY3VyaXR5KGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBzZWN1cml0eV9pbm9kZV9zZXRzZWN1cml0eShkZW50cnktPmRfaW5vZGUsIG5hbWUsIHZhbHVlLAorCQkJCQkgIHNpemUsIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHNobWVtX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIgPSB7CkBAIC0yMDY3LDggKzIwNzksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpzaG1lbV94YXR0cl9oYW5kbGVyc1tdID0gewotCSZzaG1lbV94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIsCi0JJnNobWVtX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIsCisJJmdlbmVyaWNfYWNsX2FjY2Vzc19oYW5kbGVyLAorCSZnZW5lcmljX2FjbF9kZWZhdWx0X2hhbmRsZXIsCiAJJnNobWVtX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCiAJTlVMTAogfTsKQEAgLTI0NDcsNyArMjQ1OSw3IEBACiAJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKIAkubGlzdHhhdHRyCT0gZ2VuZXJpY19saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKLQkuY2hlY2tfYWNsCT0gc2htZW1fY2hlY2tfYWNsLAorCS5jaGVja19hY2wJPSBnZW5lcmljX2NoZWNrX2FjbCwKICNlbmRpZgogCiB9OwpAQCAtMjQ3MCw3ICsyNDgyLDcgQEAKIAkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAogCS5saXN0eGF0dHIJPSBnZW5lcmljX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAotCS5jaGVja19hY2wJPSBzaG1lbV9jaGVja19hY2wsCisJLmNoZWNrX2FjbAk9IGdlbmVyaWNfY2hlY2tfYWNsLAogI2VuZGlmCiB9OwogCkBAIC0yNDgxLDcgKzI0OTMsNyBAQAogCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IGdlbmVyaWNfbGlzdHhhdHRyLAogCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCi0JLmNoZWNrX2FjbAk9IHNobWVtX2NoZWNrX2FjbCwKKwkuY2hlY2tfYWNsCT0gZ2VuZXJpY19jaGVja19hY2wsCiAjZW5kaWYKIH07CiAKQEAgLTI2MTksNyArMjYzMSw4IEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcm9vdDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCXN0cnVjdCBkZW50cnkgKnJvb3Q7CiAJc3RydWN0IHFzdHIgdGhpczsKIAogCWlmIChJU19FUlIoc2htX21udCkpCkBAIC0yNjM2LDM4ICsyNjQ5LDM1IEBACiAJdGhpcy5sZW4gPSBzdHJsZW4obmFtZSk7CiAJdGhpcy5oYXNoID0gMDsgLyogd2lsbCBnbyAqLwogCXJvb3QgPSBzaG1fbW50LT5tbnRfcm9vdDsKLQlkZW50cnkgPSBkX2FsbG9jKHJvb3QsICZ0aGlzKTsKLQlpZiAoIWRlbnRyeSkKKwlwYXRoLmRlbnRyeSA9IGRfYWxsb2Mocm9vdCwgJnRoaXMpOworCWlmICghcGF0aC5kZW50cnkpCiAJCWdvdG8gcHV0X21lbW9yeTsKLQotCWVycm9yID0gLUVORklMRTsKLQlmaWxlID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWZpbGUpCi0JCWdvdG8gcHV0X2RlbnRyeTsKKwlwYXRoLm1udCA9IG1udGdldChzaG1fbW50KTsKIAogCWVycm9yID0gLUVOT1NQQzsKIAlpbm9kZSA9IHNobWVtX2dldF9pbm9kZShyb290LT5kX3NiLCBTX0lGUkVHIHwgU19JUldYVUdPLCAwLCBmbGFncyk7CiAJaWYgKCFpbm9kZSkKLQkJZ290byBjbG9zZV9maWxlOworCQlnb3RvIHB1dF9kZW50cnk7CiAKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCWRfaW5zdGFudGlhdGUocGF0aC5kZW50cnksIGlub2RlKTsKIAlpbm9kZS0+aV9zaXplID0gc2l6ZTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CS8qIEl0IGlzIHVubGlua2VkICovCi0JaW5pdF9maWxlKGZpbGUsIHNobV9tbnQsIGRlbnRyeSwgRk1PREVfV1JJVEUgfCBGTU9ERV9SRUFELAotCQkgICZzaG1lbV9maWxlX29wZXJhdGlvbnMpOwotCiAjaWZuZGVmIENPTkZJR19NTVUKIAllcnJvciA9IHJhbWZzX25vbW11X2V4cGFuZF9mb3JfbWFwcGluZyhpbm9kZSwgc2l6ZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGNsb3NlX2ZpbGU7CisJCWdvdG8gcHV0X2RlbnRyeTsKICNlbmRpZgotCWltYV9jb3VudHNfZ2V0KGZpbGUpOworCisJZXJyb3IgPSAtRU5GSUxFOworCWZpbGUgPSBhbGxvY19maWxlKCZwYXRoLCBGTU9ERV9XUklURSB8IEZNT0RFX1JFQUQsCisJCSAgJnNobWVtX2ZpbGVfb3BlcmF0aW9ucyk7CisJaWYgKCFmaWxlKQorCQlnb3RvIHB1dF9kZW50cnk7CisKIAlyZXR1cm4gZmlsZTsKIAotY2xvc2VfZmlsZToKLQlwdXRfZmlscChmaWxlKTsKIHB1dF9kZW50cnk6Ci0JZHB1dChkZW50cnkpOworCXBhdGhfcHV0KCZwYXRoKTsKIHB1dF9tZW1vcnk6CiAJc2htZW1fdW5hY2N0X3NpemUoZmxhZ3MsIHNpemUpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKZGlmZiAtLWdpdCBhL21tL3NobWVtX2FjbC5jIGIvbW0vc2htZW1fYWNsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMmM4N2YuLjAwMDAwMDAKLS0tIGEvbW0vc2htZW1fYWNsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSAqIG1tL3NobWVtX2FjbC5jCi0gKgotICogKEMpIDIwMDUgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KLSNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfYWNsLmg+Ci0KLS8qKgotICogc2htZW1fZ2V0X2FjbCAgLSAgIGdlbmVyaWNfYWNsX29wZXJhdGlvbnMtPmdldGFjbCgpIG9wZXJhdGlvbgotICovCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqCi1zaG1lbV9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCXN3aXRjaCh0eXBlKSB7Ci0JCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgotCQkJYWNsID0gcG9zaXhfYWNsX2R1cChpbm9kZS0+aV9hY2wpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgotCQkJYWNsID0gcG9zaXhfYWNsX2R1cChpbm9kZS0+aV9kZWZhdWx0X2FjbCk7Ci0JCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCi0JcmV0dXJuIGFjbDsKLX0KLQotLyoqCi0gKiBzaG1lbV9zZXRfYWNsICAtICAgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucy0+c2V0YWNsKCkgb3BlcmF0aW9uCi0gKi8KLXN0YXRpYyB2b2lkCi1zaG1lbV9zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCi17Ci0Jc3RydWN0IHBvc2l4X2FjbCAqZnJlZSA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCXN3aXRjaCh0eXBlKSB7Ci0JCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgotCQkJZnJlZSA9IGlub2RlLT5pX2FjbDsKLQkJCWlub2RlLT5pX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKLQkJCWZyZWUgPSBpbm9kZS0+aV9kZWZhdWx0X2FjbDsKLQkJCWlub2RlLT5pX2RlZmF1bHRfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOwotCQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlwb3NpeF9hY2xfcmVsZWFzZShmcmVlKTsKLX0KLQotc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgc2htZW1fYWNsX29wcyA9IHsKLQkuZ2V0YWNsID0gc2htZW1fZ2V0X2FjbCwKLQkuc2V0YWNsID0gc2htZW1fc2V0X2FjbCwKLX07Ci0KLS8qKgotICogc2htZW1fbGlzdF9hY2xfYWNjZXNzLCBzaG1lbV9nZXRfYWNsX2FjY2Vzcywgc2htZW1fc2V0X2FjbF9hY2Nlc3MsCi0gKiBzaG1lbV94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIgIC0gIHBsdW1iaW5nIGNvZGUgdG8gaW1wbGVtZW50IHRoZQotICogc3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MgeGF0dHIgdXNpbmcgdGhlIGdlbmVyaWMgYWNsIGZ1bmN0aW9ucy4KLSAqLwotCi1zdGF0aWMgc2l6ZV90Ci1zaG1lbV9saXN0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKLQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQotewotCXJldHVybiBnZW5lcmljX2FjbF9saXN0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfQUNDRVNTLAotCQkJCWxpc3QsIGxpc3Rfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNobWVtX2dldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKLQkJICAgICBzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZ2VuZXJpY19hY2xfZ2V0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfQUNDRVNTLCBidWZmZXIsCi0JCQkgICAgICAgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNobWVtX3NldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAotCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGdlbmVyaWNfYWNsX3NldChpbm9kZSwgJnNobWVtX2FjbF9vcHMsIEFDTF9UWVBFX0FDQ0VTUywgdmFsdWUsCi0JCQkgICAgICAgc2l6ZSk7Ci19Ci0KLXN0cnVjdCB4YXR0cl9oYW5kbGVyIHNobWVtX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKLQkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKLQkubGlzdAk9IHNobWVtX2xpc3RfYWNsX2FjY2VzcywKLQkuZ2V0CT0gc2htZW1fZ2V0X2FjbF9hY2Nlc3MsCi0JLnNldAk9IHNobWVtX3NldF9hY2xfYWNjZXNzLAotfTsKLQotLyoqCi0gKiBzaG1lbV9saXN0X2FjbF9kZWZhdWx0LCBzaG1lbV9nZXRfYWNsX2RlZmF1bHQsIHNobWVtX3NldF9hY2xfZGVmYXVsdCwKLSAqIHNobWVtX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIgIC0gIHBsdW1iaW5nIGNvZGUgdG8gaW1wbGVtZW50IHRoZQotICogc3lzdGVtLnBvc2l4X2FjbF9kZWZhdWx0IHhhdHRyIHVzaW5nIHRoZSBnZW5lcmljIGFjbCBmdW5jdGlvbnMuCi0gKi8KLQotc3RhdGljIHNpemVfdAotc2htZW1fbGlzdF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAotCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQotewotCXJldHVybiBnZW5lcmljX2FjbF9saXN0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfREVGQVVMVCwKLQkJCQlsaXN0LCBsaXN0X3NpemUpOwotfQotCi1zdGF0aWMgaW50Ci1zaG1lbV9nZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICAgICBzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gZ2VuZXJpY19hY2xfZ2V0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfREVGQVVMVCwgYnVmZmVyLAotCQkJICAgICAgIHNpemUpOwotfQotCi1zdGF0aWMgaW50Ci1zaG1lbV9zZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCi0JCSAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0JaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGdlbmVyaWNfYWNsX3NldChpbm9kZSwgJnNobWVtX2FjbF9vcHMsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLAotCQkJICAgICAgIHNpemUpOwotfQotCi1zdHJ1Y3QgeGF0dHJfaGFuZGxlciBzaG1lbV94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyID0gewotCS5wcmVmaXggPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKLQkubGlzdAk9IHNobWVtX2xpc3RfYWNsX2RlZmF1bHQsCi0JLmdldAk9IHNobWVtX2dldF9hY2xfZGVmYXVsdCwKLQkuc2V0CT0gc2htZW1fc2V0X2FjbF9kZWZhdWx0LAotfTsKLQotLyoqCi0gKiBzaG1lbV9hY2xfaW5pdCAgLSAgSW5pemlhbGl6ZSB0aGUgYWNsKHMpIG9mIGEgbmV3IGlub2RlCi0gKi8KLWludAotc2htZW1fYWNsX2luaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCi17Ci0JcmV0dXJuIGdlbmVyaWNfYWNsX2luaXQoaW5vZGUsIGRpciwgJnNobWVtX2FjbF9vcHMpOwotfQotCi0vKioKLSAqIHNobWVtX2NoZWNrX2FjbCAgLSAgY2hlY2tfYWNsKCkgY2FsbGJhY2sgZm9yIGdlbmVyaWNfcGVybWlzc2lvbigpCi0gKi8KLWludAotc2htZW1fY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IHNobWVtX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7Ci0KLQlpZiAoYWNsKSB7Ci0JCWludCBlcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOwotCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCXJldHVybiAtRUFHQUlOOwotfQpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDdkZmE0ODEuLjdkNDFmMTUgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKKyNpZmRlZiBDT05GSUdfVFJBQ0lORwogc2l6ZV90IHNsYWJfYnVmZmVyX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkKIHsKIAlyZXR1cm4gY2FjaGVwLT5idWZmZXJfc2l6ZTsKQEAgLTYwNCw2NyArNjA0LDYgQEAKIAogI2RlZmluZSBCQURfQUxJRU5fTUFHSUMgMHgwMTAyMDMwNHVsCiAKLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCi0vKgotICogU2xhYiBzb21ldGltZXMgdXNlcyB0aGUga21hbGxvYyBzbGFicyB0byBzdG9yZSB0aGUgc2xhYiBoZWFkZXJzCi0gKiBmb3Igb3RoZXIgc2xhYnMgIm9mZiBzbGFiIi4KLSAqIFRoZSBsb2NraW5nIGZvciB0aGlzIGlzIHRyaWNreSBpbiB0aGF0IGl0IG5lc3RzIHdpdGhpbiB0aGUgbG9ja3MKLSAqIG9mIGFsbCBvdGhlciBzbGFicyBpbiBhIGZldyBwbGFjZXM7IHRvIGRlYWwgd2l0aCB0aGlzIHNwZWNpYWwKLSAqIGxvY2tpbmcgd2UgcHV0IG9uLXNsYWIgY2FjaGVzIGludG8gYSBzZXBhcmF0ZSBsb2NrLWNsYXNzLgotICoKLSAqIFdlIHNldCBsb2NrIGNsYXNzIGZvciBhbGllbiBhcnJheSBjYWNoZXMgd2hpY2ggYXJlIHVwIGR1cmluZyBpbml0LgotICogVGhlIGxvY2sgYW5ub3RhdGlvbiB3aWxsIGJlIGxvc3QgaWYgYWxsIGNwdXMgb2YgYSBub2RlIGdvZXMgZG93biBhbmQKLSAqIHRoZW4gY29tZXMgYmFjayB1cCBkdXJpbmcgaG90cGx1ZwotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG9uX3NsYWJfbDNfa2V5Owotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBvbl9zbGFiX2FsY19rZXk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2xvY2tfa2V5cyh2b2lkKQotCi17Ci0JaW50IHE7Ci0Jc3RydWN0IGNhY2hlX3NpemVzICpzID0gbWFsbG9jX3NpemVzOwotCi0Jd2hpbGUgKHMtPmNzX3NpemUgIT0gVUxPTkdfTUFYKSB7Ci0JCWZvcl9lYWNoX25vZGUocSkgewotCQkJc3RydWN0IGFycmF5X2NhY2hlICoqYWxjOwotCQkJaW50IHI7Ci0JCQlzdHJ1Y3Qga21lbV9saXN0MyAqbDMgPSBzLT5jc19jYWNoZXAtPm5vZGVsaXN0c1txXTsKLQkJCWlmICghbDMgfHwgT0ZGX1NMQUIocy0+Y3NfY2FjaGVwKSkKLQkJCQljb250aW51ZTsKLQkJCWxvY2tkZXBfc2V0X2NsYXNzKCZsMy0+bGlzdF9sb2NrLCAmb25fc2xhYl9sM19rZXkpOwotCQkJYWxjID0gbDMtPmFsaWVuOwotCQkJLyoKLQkJCSAqIEZJWE1FOiBUaGlzIGNoZWNrIGZvciBCQURfQUxJRU5fTUFHSUMKLQkJCSAqIHNob3VsZCBnbyBhd2F5IHdoZW4gY29tbW9uIHNsYWIgY29kZSBpcyB0YXVnaHQgdG8KLQkJCSAqIHdvcmsgZXZlbiB3aXRob3V0IGFsaWVuIGNhY2hlcy4KLQkJCSAqIEN1cnJlbnRseSwgbm9uIE5VTUEgY29kZSByZXR1cm5zIEJBRF9BTElFTl9NQUdJQwotCQkJICogZm9yIGFsbG9jX2FsaWVuX2NhY2hlLAotCQkJICovCi0JCQlpZiAoIWFsYyB8fCAodW5zaWduZWQgbG9uZylhbGMgPT0gQkFEX0FMSUVOX01BR0lDKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yX2VhY2hfbm9kZShyKSB7Ci0JCQkJaWYgKGFsY1tyXSkKLQkJCQkJbG9ja2RlcF9zZXRfY2xhc3MoJmFsY1tyXS0+bG9jaywKLQkJCQkJICAgICAmb25fc2xhYl9hbGNfa2V5KTsKLQkJCX0KLQkJfQotCQlzKys7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2xvY2tfa2V5cyh2b2lkKQotewotfQotI2VuZGlmCi0KLS8qCi0gKiBHdWFyZCBhY2Nlc3MgdG8gdGhlIGNhY2hlLWNoYWluLgotICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGNhY2hlX2NoYWluX211dGV4KTsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGNhY2hlX2NoYWluOwotCiAvKgogICogY2hpY2tlbiBhbmQgZWdnIHByb2JsZW06IGRlbGF5IHRoZSBwZXItY3B1IGFycmF5IGFsbG9jYXRpb24KICAqIHVudGlsIHRoZSBnZW5lcmFsIGNhY2hlcyBhcmUgdXAuCkBAIC02ODUsNyArNjI0LDgwIEBACiAJcmV0dXJuIGdfY3B1Y2FjaGVfdXAgPj0gRUFSTFk7CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVsYXllZF93b3JrLCByZWFwX3dvcmspOworI2lmZGVmIENPTkZJR19MT0NLREVQCisKKy8qCisgKiBTbGFiIHNvbWV0aW1lcyB1c2VzIHRoZSBrbWFsbG9jIHNsYWJzIHRvIHN0b3JlIHRoZSBzbGFiIGhlYWRlcnMKKyAqIGZvciBvdGhlciBzbGFicyAib2ZmIHNsYWIiLgorICogVGhlIGxvY2tpbmcgZm9yIHRoaXMgaXMgdHJpY2t5IGluIHRoYXQgaXQgbmVzdHMgd2l0aGluIHRoZSBsb2NrcworICogb2YgYWxsIG90aGVyIHNsYWJzIGluIGEgZmV3IHBsYWNlczsgdG8gZGVhbCB3aXRoIHRoaXMgc3BlY2lhbAorICogbG9ja2luZyB3ZSBwdXQgb24tc2xhYiBjYWNoZXMgaW50byBhIHNlcGFyYXRlIGxvY2stY2xhc3MuCisgKgorICogV2Ugc2V0IGxvY2sgY2xhc3MgZm9yIGFsaWVuIGFycmF5IGNhY2hlcyB3aGljaCBhcmUgdXAgZHVyaW5nIGluaXQuCisgKiBUaGUgbG9jayBhbm5vdGF0aW9uIHdpbGwgYmUgbG9zdCBpZiBhbGwgY3B1cyBvZiBhIG5vZGUgZ29lcyBkb3duIGFuZAorICogdGhlbiBjb21lcyBiYWNrIHVwIGR1cmluZyBob3RwbHVnCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgb25fc2xhYl9sM19rZXk7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG9uX3NsYWJfYWxjX2tleTsKKworc3RhdGljIHZvaWQgaW5pdF9ub2RlX2xvY2tfa2V5cyhpbnQgcSkKK3sKKwlzdHJ1Y3QgY2FjaGVfc2l6ZXMgKnMgPSBtYWxsb2Nfc2l6ZXM7CisKKwlpZiAoZ19jcHVjYWNoZV91cCAhPSBGVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKHMgPSBtYWxsb2Nfc2l6ZXM7IHMtPmNzX3NpemUgIT0gVUxPTkdfTUFYOyBzKyspIHsKKwkJc3RydWN0IGFycmF5X2NhY2hlICoqYWxjOworCQlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CisJCWludCByOworCisJCWwzID0gcy0+Y3NfY2FjaGVwLT5ub2RlbGlzdHNbcV07CisJCWlmICghbDMgfHwgT0ZGX1NMQUIocy0+Y3NfY2FjaGVwKSkKKwkJCXJldHVybjsKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmwzLT5saXN0X2xvY2ssICZvbl9zbGFiX2wzX2tleSk7CisJCWFsYyA9IGwzLT5hbGllbjsKKwkJLyoKKwkJICogRklYTUU6IFRoaXMgY2hlY2sgZm9yIEJBRF9BTElFTl9NQUdJQworCQkgKiBzaG91bGQgZ28gYXdheSB3aGVuIGNvbW1vbiBzbGFiIGNvZGUgaXMgdGF1Z2h0IHRvCisJCSAqIHdvcmsgZXZlbiB3aXRob3V0IGFsaWVuIGNhY2hlcy4KKwkJICogQ3VycmVudGx5LCBub24gTlVNQSBjb2RlIHJldHVybnMgQkFEX0FMSUVOX01BR0lDCisJCSAqIGZvciBhbGxvY19hbGllbl9jYWNoZSwKKwkJICovCisJCWlmICghYWxjIHx8ICh1bnNpZ25lZCBsb25nKWFsYyA9PSBCQURfQUxJRU5fTUFHSUMpCisJCQlyZXR1cm47CisJCWZvcl9lYWNoX25vZGUocikgeworCQkJaWYgKGFsY1tyXSkKKwkJCQlsb2NrZGVwX3NldF9jbGFzcygmYWxjW3JdLT5sb2NrLAorCQkJCQkmb25fc2xhYl9hbGNfa2V5KTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfbG9ja19rZXlzKHZvaWQpCit7CisJaW50IG5vZGU7CisKKwlmb3JfZWFjaF9ub2RlKG5vZGUpCisJCWluaXRfbm9kZV9sb2NrX2tleXMobm9kZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgaW5pdF9ub2RlX2xvY2tfa2V5cyhpbnQgcSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfbG9ja19rZXlzKHZvaWQpCit7Cit9CisjZW5kaWYKKworLyoKKyAqIEd1YXJkIGFjY2VzcyB0byB0aGUgY2FjaGUtY2hhaW4uCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoY2FjaGVfY2hhaW5fbXV0ZXgpOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2FjaGVfY2hhaW47CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVsYXllZF93b3JrLCBzbGFiX3JlYXBfd29yayk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFycmF5X2NhY2hlICpjcHVfY2FjaGVfZ2V0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCiB7CkBAIC04MjYsNyArODM4LDcgQEAKICAqIG9iamVjdHMgZnJlZWQgb24gZGlmZmVyZW50IG5vZGVzIGZyb20gd2hpY2ggdGhleSB3ZXJlIGFsbG9jYXRlZCkgYW5kIHRoZQogICogZmx1c2hpbmcgb2YgcmVtb3RlIHBjcHMgYnkgY2FsbGluZyBkcmFpbl9ub2RlX3BhZ2VzLgogICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcmVhcF9ub2RlKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzbGFiX3JlYXBfbm9kZSk7CiAKIHN0YXRpYyB2b2lkIGluaXRfcmVhcF9ub2RlKGludCBjcHUpCiB7CkBAIC04MzYsMTcgKzg0OCwxNyBAQAogCWlmIChub2RlID09IE1BWF9OVU1OT0RFUykKIAkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAotCXBlcl9jcHUocmVhcF9ub2RlLCBjcHUpID0gbm9kZTsKKwlwZXJfY3B1KHNsYWJfcmVhcF9ub2RlLCBjcHUpID0gbm9kZTsKIH0KIAogc3RhdGljIHZvaWQgbmV4dF9yZWFwX25vZGUodm9pZCkKIHsKLQlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIocmVhcF9ub2RlKTsKKwlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIoc2xhYl9yZWFwX25vZGUpOwogCiAJbm9kZSA9IG5leHRfbm9kZShub2RlLCBub2RlX29ubGluZV9tYXApOwogCWlmICh1bmxpa2VseShub2RlID49IE1BWF9OVU1OT0RFUykpCiAJCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7Ci0JX19nZXRfY3B1X3ZhcihyZWFwX25vZGUpID0gbm9kZTsKKwlfX2dldF9jcHVfdmFyKHNsYWJfcmVhcF9ub2RlKSA9IG5vZGU7CiB9CiAKICNlbHNlCkBAIC04NjMsNyArODc1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19jcHVpbml0IHN0YXJ0X2NwdV90aW1lcihpbnQgY3B1KQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKnJlYXBfd29yayA9ICZwZXJfY3B1KHJlYXBfd29yaywgY3B1KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpyZWFwX3dvcmsgPSAmcGVyX2NwdShzbGFiX3JlYXBfd29yaywgY3B1KTsKIAogCS8qCiAJICogV2hlbiB0aGlzIGdldHMgY2FsbGVkIGZyb20gZG9faW5pdGNhbGxzIHZpYSBjcHVjYWNoZV9pbml0KCksCkBAIC0xMDI3LDcgKzEwMzksNyBAQAogICovCiBzdGF0aWMgdm9pZCByZWFwX2FsaWVuKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBrbWVtX2xpc3QzICpsMykKIHsKLQlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIocmVhcF9ub2RlKTsKKwlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIoc2xhYl9yZWFwX25vZGUpOwogCiAJaWYgKGwzLT5hbGllbikgewogCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjID0gbDMtPmFsaWVuW25vZGVdOwpAQCAtMTEyMCw3ICsxMTMyLDcgQEAKIAkJaWYgKG5jKQogCQkJZnJlZV9ibG9jayhjYWNoZXAsIG5jLT5lbnRyeSwgbmMtPmF2YWlsLCBub2RlKTsKIAotCQlpZiAoIWNwdXNfZW1wdHkoKm1hc2spKSB7CisJCWlmICghY3B1bWFza19lbXB0eShtYXNrKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKIAkJCWdvdG8gZnJlZV9hcnJheV9jYWNoZTsKIAkJfQpAQCAtMTI1NCw2ICsxMjY2LDggQEAKIAkJa2ZyZWUoc2hhcmVkKTsKIAkJZnJlZV9hbGllbl9jYWNoZShhbGllbik7CiAJfQorCWluaXRfbm9kZV9sb2NrX2tleXMobm9kZSk7CisKIAlyZXR1cm4gMDsKIGJhZDoKIAljcHV1cF9jYW5jZWxlZChjcHUpOwpAQCAtMTI4Niw5ICsxMzAwLDkgQEAKIAkJICogYW55dGhpbmcgZXhwZW5zaXZlIGJ1dCB3aWxsIG9ubHkgbW9kaWZ5IHJlYXBfd29yawogCQkgKiBhbmQgcmVzY2hlZHVsZSB0aGUgdGltZXIuCiAJCSovCi0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBlcl9jcHUocmVhcF93b3JrLCBjcHUpKTsKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmcGVyX2NwdShzbGFiX3JlYXBfd29yaywgY3B1KSk7CiAJCS8qIE5vdyB0aGUgY2FjaGVfcmVhcGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90IHJ1bm5pbmcuICovCi0JCXBlcl9jcHUocmVhcF93b3JrLCBjcHUpLndvcmsuZnVuYyA9IE5VTEw7CisJCXBlcl9jcHUoc2xhYl9yZWFwX3dvcmssIGNwdSkud29yay5mdW5jID0gTlVMTDsKICAgCQlicmVhazsKICAgCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogICAJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgpAQCAtMjI2MSw5ICsyMjc1LDExIEBACiAJLyoKIAkgKiBEZXRlcm1pbmUgaWYgdGhlIHNsYWIgbWFuYWdlbWVudCBpcyAnb24nIG9yICdvZmYnIHNsYWIuCiAJICogKGJvb3RzdHJhcHBpbmcgY2Fubm90IGNvcGUgd2l0aCBvZmZzbGFiIGNhY2hlcyBzbyBkb24ndCBkbwotCSAqIGl0IHRvbyBlYXJseSBvbi4pCisJICogaXQgdG9vIGVhcmx5IG9uLiBBbHdheXMgdXNlIG9uLXNsYWIgbWFuYWdlbWVudCB3aGVuCisJICogU0xBQl9OT0xFQUtUUkFDRSB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgaW50byBrbWVtbGVhaykKIAkgKi8KLQlpZiAoKHNpemUgPj0gKFBBR0VfU0laRSA+PiAzKSkgJiYgIXNsYWJfZWFybHlfaW5pdCkKKwlpZiAoKHNpemUgPj0gKFBBR0VfU0laRSA+PiAzKSkgJiYgIXNsYWJfZWFybHlfaW5pdCAmJgorCSAgICAhKGZsYWdzICYgU0xBQl9OT0xFQUtUUkFDRSkpCiAJCS8qCiAJCSAqIFNpemUgaXMgbGFyZ2UsIGFzc3VtZSBiZXN0IHRvIHBsYWNlIHRoZSBzbGFiIG1hbmFnZW1lbnQgb2JqCiAJCSAqIG9mZi1zbGFiIChzaG91bGQgYWxsb3cgYmV0dGVyIHBhY2tpbmcgb2Ygb2JqcykuCkBAIC0yNTgyLDggKzI1OTgsOCBAQAogCQkgKiBrbWVtbGVhayBkb2VzIG5vdCB0cmVhdCB0aGUgLT5zX21lbSBwb2ludGVyIGFzIGEgcmVmZXJlbmNlCiAJCSAqIHRvIHRoZSBvYmplY3QuIE90aGVyd2lzZSB3ZSB3aWxsIG5vdCByZXBvcnQgdGhlIGxlYWsuCiAJCSAqLwotCQlrbWVtbGVha19zY2FuX2FyZWEoc2xhYnAsIG9mZnNldG9mKHN0cnVjdCBzbGFiLCBsaXN0KSwKLQkJCQkgICBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIGxvY2FsX2ZsYWdzKTsKKwkJa21lbWxlYWtfc2Nhbl9hcmVhKCZzbGFicC0+bGlzdCwgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAorCQkJCSAgIGxvY2FsX2ZsYWdzKTsKIAkJaWYgKCFzbGFicCkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CkBAIC0zMTAzLDEzICszMTE5LDE5IEBACiAJfSBlbHNlIHsKIAkJU1RBVFNfSU5DX0FMTE9DTUlTUyhjYWNoZXApOwogCQlvYmpwID0gY2FjaGVfYWxsb2NfcmVmaWxsKGNhY2hlcCwgZmxhZ3MpOworCQkvKgorCQkgKiB0aGUgJ2FjJyBtYXkgYmUgdXBkYXRlZCBieSBjYWNoZV9hbGxvY19yZWZpbGwoKSwKKwkJICogYW5kIGttZW1sZWFrX2VyYXNlKCkgcmVxdWlyZXMgaXRzIGNvcnJlY3QgdmFsdWUuCisJCSAqLworCQlhYyA9IGNwdV9jYWNoZV9nZXQoY2FjaGVwKTsKIAl9CiAJLyoKIAkgKiBUbyBhdm9pZCBhIGZhbHNlIG5lZ2F0aXZlLCBpZiBhbiBvYmplY3QgdGhhdCBpcyBpbiBvbmUgb2YgdGhlCiAJICogcGVyLUNQVSBjYWNoZXMgaXMgbGVha2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBrbWVtbGVhayBkb2Vzbid0CiAJICogdHJlYXQgdGhlIGFycmF5IHBvaW50ZXJzIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QuCiAJICovCi0Ja21lbWxlYWtfZXJhc2UoJmFjLT5lbnRyeVthYy0+YXZhaWxdKTsKKwlpZiAob2JqcCkKKwkJa21lbWxlYWtfZXJhc2UoJmFjLT5lbnRyeVthYy0+YXZhaWxdKTsKIAlyZXR1cm4gb2JqcDsKIH0KIApAQCAtMzMwNiw3ICszMzI4LDcgQEAKIAljYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShjYWNoZXAsIGZsYWdzKTsKIAlsb2NhbF9pcnFfc2F2ZShzYXZlX2ZsYWdzKTsKIAotCWlmICh1bmxpa2VseShub2RlaWQgPT0gLTEpKQorCWlmIChub2RlaWQgPT0gLTEpCiAJCW5vZGVpZCA9IG51bWFfbm9kZV9pZCgpOwogCiAJaWYgKHVubGlrZWx5KCFjYWNoZXAtPm5vZGVsaXN0c1tub2RlaWRdKSkgewpAQCAtMzU1OCw3ICszNTgwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CiAKLSNpZmRlZiBDT05GSUdfS01FTVRSQUNFCisjaWZkZWYgQ09ORklHX1RSQUNJTkcKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKIHsKIAlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwpAQCAtMzYyMSw3ICszNjQzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlKTsKIAotI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKKyNpZmRlZiBDT05GSUdfVFJBQ0lORwogdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKIAkJCQkgICAgZ2ZwX3QgZmxhZ3MsCiAJCQkJICAgIGludCBub2RlaWQpCkBAIC0zNjQ5LDcgKzM2NzEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19LTUVNVFJBQ0UpCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfVFJBQ0lORykKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJcmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCBub2RlLApAQCAtMzY2OSw3ICszNjkxLDcgQEAKIAlyZXR1cm4gX19kb19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9kZSk7Ci0jZW5kaWYgLyogQ09ORklHX0RFQlVHX1NMQUIgKi8KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfU0xBQiB8fCBDT05GSUdfVFJBQ0lORyAqLwogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKIC8qKgpAQCAtMzcwMSw3ICszNzIzLDcgQEAKIH0KIAogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfS01FTVRSQUNFKQorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NMQUIpIHx8IGRlZmluZWQoQ09ORklHX1RSQUNJTkcpCiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXJldHVybiBfX2RvX2ttYWxsb2Moc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggNDk5NmZjNy4uOGQ3MWFhZiAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTczNSw3ICsxNzM1LDcgQEAKIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JaWYgKHVubGlrZWx5KChnZnBmbGFncyAmIF9fR0ZQX1pFUk8pICYmIG9iamVjdCkpCisJaWYgKHVubGlrZWx5KGdmcGZsYWdzICYgX19HRlBfWkVSTykgJiYgb2JqZWN0KQogCQltZW1zZXQob2JqZWN0LCAwLCBvYmpzaXplKTsKIAogCWttZW1jaGVja19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBvYmplY3QsIGMtPm9ianNpemUpOwpAQCAtMTc1NCw3ICsxNzU0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CiAKLSNpZmRlZiBDT05GSUdfS01FTVRSQUNFCisjaWZkZWYgQ09ORklHX1RSQUNJTkcKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7CiAJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBfUkVUX0lQXyk7CkBAIC0xNzc1LDcgKzE3NzUsNyBAQAogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vZGUpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfS01FTVRSQUNFCisjaWZkZWYgQ09ORklHX1RSQUNJTkcKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQkJCSAgICBnZnBfdCBnZnBmbGFncywKIAkJCQkgICAgaW50IG5vZGUpCkBAIC00MzcxLDEyICs0MzcxLDI4IEBACiAJcmV0dXJuIGxlbiArIHNwcmludGYoYnVmICsgbGVuLCAiXG4iKTsKIH0KIAorc3RhdGljIHZvaWQgY2xlYXJfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlnZXRfY3B1X3NsYWIocywgY3B1KS0+c3RhdFtzaV0gPSAwOworfQorCiAjZGVmaW5lIFNUQVRfQVRUUihzaSwgdGV4dCkgCQkJCQlcCiBzdGF0aWMgc3NpemVfdCB0ZXh0IyNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQlcCiAJcmV0dXJuIHNob3dfc3RhdChzLCBidWYsIHNpKTsJCQkJXAogfQkJCQkJCQkJXAotU0xBQl9BVFRSX1JPKHRleHQpOwkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHRleHQjI19zdG9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywJCVwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW5ndGgpCVwKK3sJCQkJCQkJCVwKKwlpZiAoYnVmWzBdICE9ICcwJykJCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCisJY2xlYXJfc3RhdChzLCBzaSk7CQkJCQlcCisJcmV0dXJuIGxlbmd0aDsJCQkJCQlcCit9CQkJCQkJCQlcCitTTEFCX0FUVFIodGV4dCk7CQkJCQkJXAogCiBTVEFUX0FUVFIoQUxMT0NfRkFTVFBBVEgsIGFsbG9jX2Zhc3RwYXRoKTsKIFNUQVRfQVRUUihBTExPQ19TTE9XUEFUSCwgYWxsb2Nfc2xvd3BhdGgpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggOWM1OTBlZS4uNmMwNTg1YiAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KQEAgLTM1LDExICszNiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgogCitzdGF0aWMgYm9vbCBzd2FwX2NvdW50X2NvbnRpbnVlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqLCBwZ29mZl90LAorCQkJCSB1bnNpZ25lZCBjaGFyKTsKK3N0YXRpYyB2b2lkIGZyZWVfc3dhcF9jb3VudF9jb250aW51YXRpb25zKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICopOworc3RhdGljIHNlY3Rvcl90IG1hcF9zd2FwX2VudHJ5KHN3cF9lbnRyeV90LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlKiopOworCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBfbG9jayk7CiBzdGF0aWMgdW5zaWduZWQgaW50IG5yX3N3YXBmaWxlczsKIGxvbmcgbnJfc3dhcF9wYWdlczsKIGxvbmcgdG90YWxfc3dhcF9wYWdlczsKLXN0YXRpYyBpbnQgc3dhcF9vdmVyZmxvdzsKIHN0YXRpYyBpbnQgbGVhc3RfcHJpb3JpdHk7CiAKIHN0YXRpYyBjb25zdCBjaGFyIEJhZF9maWxlW10gPSAiQmFkIHN3YXAgZmlsZSBlbnRyeSAiOwpAQCAtNDksNDIgKzU0LDIwIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3dhcF9saXN0X3Qgc3dhcF9saXN0ID0gey0xLCAtMX07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCBzd2FwX2luZm9bTUFYX1NXQVBGSUxFU107CitzdGF0aWMgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnN3YXBfaW5mb1tNQVhfU1dBUEZJTEVTXTsKIAogc3RhdGljIERFRklORV9NVVRFWChzd2Fwb25fbXV0ZXgpOwogCi0vKiBGb3IgcmVmZXJlbmNlIGNvdW50IGFjY291bnRpbmcgaW4gc3dhcF9tYXAgKi8KLS8qIGVudW0gZm9yIHN3YXBfbWFwW10gaGFuZGxpbmcuIGludGVybmFsIHVzZSBvbmx5ICovCi1lbnVtIHsKLQlTV0FQX01BUCA9IDAsCS8qIG9wcyBmb3IgcmVmZXJlbmNlIGZyb20gc3dhcCB1c2VycyAqLwotCVNXQVBfQ0FDSEUsCS8qIG9wcyBmb3IgcmVmZXJlbmNlIGZyb20gc3dhcCBjYWNoZSAqLwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgc3dhcF9jb3VudCh1bnNpZ25lZCBzaG9ydCBlbnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3dhcF9jb3VudCh1bnNpZ25lZCBjaGFyIGVudCkKIHsKLQlyZXR1cm4gZW50ICYgU1dBUF9DT1VOVF9NQVNLOworCXJldHVybiBlbnQgJiB+U1dBUF9IQVNfQ0FDSEU7CS8qIG1heSBpbmNsdWRlIFNXQVBfSEFTX0NPTlQgZmxhZyAqLwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc3dhcF9oYXNfY2FjaGUodW5zaWduZWQgc2hvcnQgZW50KQotewotCXJldHVybiAhIShlbnQgJiBTV0FQX0hBU19DQUNIRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZW5jb2RlX3N3YXBtYXAoaW50IGNvdW50LCBib29sIGhhc19jYWNoZSkKLXsKLQl1bnNpZ25lZCBzaG9ydCByZXQgPSBjb3VudDsKLQotCWlmIChoYXNfY2FjaGUpCi0JCXJldHVybiBTV0FQX0hBU19DQUNIRSB8IHJldDsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiByZXR1cm5lcyAxIGlmIHN3YXAgZW50cnkgaXMgZnJlZWQgKi8KKy8qIHJldHVybnMgMSBpZiBzd2FwIGVudHJ5IGlzIGZyZWVkICovCiBzdGF0aWMgaW50CiBfX3RyeV90b19yZWNsYWltX3N3YXAoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlpbnQgdHlwZSA9IHNpIC0gc3dhcF9pbmZvOwotCXN3cF9lbnRyeV90IGVudHJ5ID0gc3dwX2VudHJ5KHR5cGUsIG9mZnNldCk7CisJc3dwX2VudHJ5X3QgZW50cnkgPSBzd3BfZW50cnkoc2ktPnR5cGUsIG9mZnNldCk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IHJldCA9IDA7CiAKQEAgLTEyMCw3ICsxMDMsNyBAQAogCWRvd25fcmVhZCgmc3dhcF91bnBsdWdfc2VtKTsKIAllbnRyeS52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSk7CiAJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKLQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHN3YXBfaW5mb1tzd3BfdHlwZShlbnRyeSldLmJkZXY7CisJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzd2FwX2luZm9bc3dwX3R5cGUoZW50cnkpXS0+YmRldjsKIAkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaTsKIAogCQkvKgpAQCAtMTQ2LDIzICsxMjksMjggQEAKIHN0YXRpYyBpbnQgZGlzY2FyZF9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSkKIHsKIAlzdHJ1Y3Qgc3dhcF9leHRlbnQgKnNlOworCXNlY3Rvcl90IHN0YXJ0X2Jsb2NrOworCXNlY3Rvcl90IG5yX2Jsb2NrczsKIAlpbnQgZXJyID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZzaS0+ZXh0ZW50X2xpc3QsIGxpc3QpIHsKLQkJc2VjdG9yX3Qgc3RhcnRfYmxvY2sgPSBzZS0+c3RhcnRfYmxvY2sgPDwgKFBBR0VfU0hJRlQgLSA5KTsKLQkJc2VjdG9yX3QgbnJfYmxvY2tzID0gKHNlY3Rvcl90KXNlLT5ucl9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDkpOworCS8qIERvIG5vdCBkaXNjYXJkIHRoZSBzd2FwIGhlYWRlciBwYWdlISAqLworCXNlID0gJnNpLT5maXJzdF9zd2FwX2V4dGVudDsKKwlzdGFydF9ibG9jayA9IChzZS0+c3RhcnRfYmxvY2sgKyAxKSA8PCAoUEFHRV9TSElGVCAtIDkpOworCW5yX2Jsb2NrcyA9ICgoc2VjdG9yX3Qpc2UtPm5yX3BhZ2VzIC0gMSkgPDwgKFBBR0VfU0hJRlQgLSA5KTsKKwlpZiAobnJfYmxvY2tzKSB7CisJCWVyciA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHNpLT5iZGV2LCBzdGFydF9ibG9jaywKKwkJCQlucl9ibG9ja3MsIEdGUF9LRVJORUwsIERJU0NBUkRfRkxfQkFSUklFUik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQljb25kX3Jlc2NoZWQoKTsKKwl9CiAKLQkJaWYgKHNlLT5zdGFydF9wYWdlID09IDApIHsKLQkJCS8qIERvIG5vdCBkaXNjYXJkIHRoZSBzd2FwIGhlYWRlciBwYWdlISAqLwotCQkJc3RhcnRfYmxvY2sgKz0gMSA8PCAoUEFHRV9TSElGVCAtIDkpOwotCQkJbnJfYmxvY2tzIC09IDEgPDwgKFBBR0VfU0hJRlQgLSA5KTsKLQkJCWlmICghbnJfYmxvY2tzKQotCQkJCWNvbnRpbnVlOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJnNpLT5maXJzdF9zd2FwX2V4dGVudC5saXN0LCBsaXN0KSB7CisJCXN0YXJ0X2Jsb2NrID0gc2UtPnN0YXJ0X2Jsb2NrIDw8IChQQUdFX1NISUZUIC0gOSk7CisJCW5yX2Jsb2NrcyA9IChzZWN0b3JfdClzZS0+bnJfcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSA5KTsKIAogCQllcnIgPSBibGtkZXZfaXNzdWVfZGlzY2FyZChzaS0+YmRldiwgc3RhcnRfYmxvY2ssCi0JCQkJCQlucl9ibG9ja3MsIEdGUF9LRVJORUwsCi0JCQkJCQlESVNDQVJEX0ZMX0JBUlJJRVIpOworCQkJCW5yX2Jsb2NrcywgR0ZQX0tFUk5FTCwgRElTQ0FSRF9GTF9CQVJSSUVSKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCkBAIC0yMDEsMTQgKzE4OSwxMSBAQAogCQkJc3RhcnRfYmxvY2sgPDw9IFBBR0VfU0hJRlQgLSA5OwogCQkJbnJfYmxvY2tzIDw8PSBQQUdFX1NISUZUIC0gOTsKIAkJCWlmIChibGtkZXZfaXNzdWVfZGlzY2FyZChzaS0+YmRldiwgc3RhcnRfYmxvY2ssCi0JCQkJCQkJbnJfYmxvY2tzLCBHRlBfTk9JTywKLQkJCQkJCQlESVNDQVJEX0ZMX0JBUlJJRVIpKQorCQkJCSAgICBucl9ibG9ja3MsIEdGUF9OT0lPLCBESVNDQVJEX0ZMX0JBUlJJRVIpKQogCQkJCWJyZWFrOwogCQl9CiAKIAkJbGggPSBzZS0+bGlzdC5uZXh0OwotCQlpZiAobGggPT0gJnNpLT5leHRlbnRfbGlzdCkKLQkJCWxoID0gbGgtPm5leHQ7CiAJCXNlID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IHN3YXBfZXh0ZW50LCBsaXN0KTsKIAl9CiB9CkBAIC0yMjMsNyArMjA4LDcgQEAKICNkZWZpbmUgTEFURU5DWV9MSU1JVAkJMjU2CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzY2FuX3N3YXBfbWFwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKLQkJCQkJICBpbnQgY2FjaGUpCisJCQkJCSAgdW5zaWduZWQgY2hhciB1c2FnZSkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHNjYW5fYmFzZTsKQEAgLTM1NCwxMCArMzM5LDcgQEAKIAkJc2ktPmxvd2VzdF9iaXQgPSBzaS0+bWF4OwogCQlzaS0+aGlnaGVzdF9iaXQgPSAwOwogCX0KLQlpZiAoY2FjaGUgPT0gU1dBUF9DQUNIRSkgLyogYXQgdXN1YWwgc3dhcC1vdXQgdmlhIHZtc2Nhbi5jICovCi0JCXNpLT5zd2FwX21hcFtvZmZzZXRdID0gZW5jb2RlX3N3YXBtYXAoMCwgdHJ1ZSk7Ci0JZWxzZSAvKiBhdCBzdXNwZW5kICovCi0JCXNpLT5zd2FwX21hcFtvZmZzZXRdID0gZW5jb2RlX3N3YXBtYXAoMSwgZmFsc2UpOworCXNpLT5zd2FwX21hcFtvZmZzZXRdID0gdXNhZ2U7CiAJc2ktPmNsdXN0ZXJfbmV4dCA9IG9mZnNldCArIDE7CiAJc2ktPmZsYWdzIC09IFNXUF9TQ0FOTklORzsKIApAQCAtNDY3LDEwICs0NDksMTAgQEAKIAlucl9zd2FwX3BhZ2VzLS07CiAKIAlmb3IgKHR5cGUgPSBzd2FwX2xpc3QubmV4dDsgdHlwZSA+PSAwICYmIHdyYXBwZWQgPCAyOyB0eXBlID0gbmV4dCkgewotCQlzaSA9IHN3YXBfaW5mbyArIHR5cGU7CisJCXNpID0gc3dhcF9pbmZvW3R5cGVdOwogCQluZXh0ID0gc2ktPm5leHQ7CiAJCWlmIChuZXh0IDwgMCB8fAotCQkgICAgKCF3cmFwcGVkICYmIHNpLT5wcmlvICE9IHN3YXBfaW5mb1tuZXh0XS5wcmlvKSkgeworCQkgICAgKCF3cmFwcGVkICYmIHNpLT5wcmlvICE9IHN3YXBfaW5mb1tuZXh0XS0+cHJpbykpIHsKIAkJCW5leHQgPSBzd2FwX2xpc3QuaGVhZDsKIAkJCXdyYXBwZWQrKzsKIAkJfQpAQCAtNDgyLDcgKzQ2NCw3IEBACiAKIAkJc3dhcF9saXN0Lm5leHQgPSBuZXh0OwogCQkvKiBUaGlzIGlzIGNhbGxlZCBmb3IgYWxsb2NhdGluZyBzd2FwIGVudHJ5IGZvciBjYWNoZSAqLwotCQlvZmZzZXQgPSBzY2FuX3N3YXBfbWFwKHNpLCBTV0FQX0NBQ0hFKTsKKwkJb2Zmc2V0ID0gc2Nhbl9zd2FwX21hcChzaSwgU1dBUF9IQVNfQ0FDSEUpOwogCQlpZiAob2Zmc2V0KSB7CiAJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAkJCXJldHVybiBzd3BfZW50cnkodHlwZSwgb2Zmc2V0KTsKQEAgLTUwMywxMSArNDg1LDExIEBACiAJcGdvZmZfdCBvZmZzZXQ7CiAKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7Ci0Jc2kgPSBzd2FwX2luZm8gKyB0eXBlOwotCWlmIChzaS0+ZmxhZ3MgJiBTV1BfV1JJVEVPSykgeworCXNpID0gc3dhcF9pbmZvW3R5cGVdOworCWlmIChzaSAmJiAoc2ktPmZsYWdzICYgU1dQX1dSSVRFT0spKSB7CiAJCW5yX3N3YXBfcGFnZXMtLTsKIAkJLyogVGhpcyBpcyBjYWxsZWQgZm9yIGFsbG9jYXRpbmcgc3dhcCBlbnRyeSwgbm90IGNhY2hlICovCi0JCW9mZnNldCA9IHNjYW5fc3dhcF9tYXAoc2ksIFNXQVBfTUFQKTsKKwkJb2Zmc2V0ID0gc2Nhbl9zd2FwX21hcChzaSwgMSk7CiAJCWlmIChvZmZzZXQpIHsKIAkJCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwogCQkJcmV0dXJuIHN3cF9lbnRyeSh0eXBlLCBvZmZzZXQpOwpAQCAtNTE4LDkgKzUwMCw5IEBACiAJcmV0dXJuIChzd3BfZW50cnlfdCkgezB9OwogfQogCi1zdGF0aWMgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiBzd2FwX2luZm9fZ2V0KHN3cF9lbnRyeV90IGVudHJ5KQorc3RhdGljIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzd2FwX2luZm9fZ2V0KHN3cF9lbnRyeV90IGVudHJ5KQogewotCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcDsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgdHlwZTsKIAogCWlmICghZW50cnkudmFsKQpAQCAtNTI4LDcgKzUxMCw3IEBACiAJdHlwZSA9IHN3cF90eXBlKGVudHJ5KTsKIAlpZiAodHlwZSA+PSBucl9zd2FwZmlsZXMpCiAJCWdvdG8gYmFkX25vZmlsZTsKLQlwID0gJiBzd2FwX2luZm9bdHlwZV07CisJcCA9IHN3YXBfaW5mb1t0eXBlXTsKIAlpZiAoIShwLT5mbGFncyAmIFNXUF9VU0VEKSkKIAkJZ290byBiYWRfZGV2aWNlOwogCW9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwpAQCAtNTU0LDQxICs1MzYsNTYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBzd2FwX2VudHJ5X2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnAsCi0JCQkgICBzd3BfZW50cnlfdCBlbnQsIGludCBjYWNoZSkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN3YXBfZW50cnlfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcCwKKwkJCQkgICAgIHN3cF9lbnRyeV90IGVudHJ5LCB1bnNpZ25lZCBjaGFyIHVzYWdlKQogewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnQpOwotCWludCBjb3VudCA9IHN3YXBfY291bnQocC0+c3dhcF9tYXBbb2Zmc2V0XSk7Ci0JYm9vbCBoYXNfY2FjaGU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTsKKwl1bnNpZ25lZCBjaGFyIGNvdW50OworCXVuc2lnbmVkIGNoYXIgaGFzX2NhY2hlOwogCi0JaGFzX2NhY2hlID0gc3dhcF9oYXNfY2FjaGUocC0+c3dhcF9tYXBbb2Zmc2V0XSk7Ci0KLQlpZiAoY2FjaGUgPT0gU1dBUF9NQVApIHsgLyogZHJvcHBpbmcgdXNhZ2UgY291bnQgb2Ygc3dhcCAqLwotCQlpZiAoY291bnQgPCBTV0FQX01BUF9NQVgpIHsKLQkJCWNvdW50LS07Ci0JCQlwLT5zd2FwX21hcFtvZmZzZXRdID0gZW5jb2RlX3N3YXBtYXAoY291bnQsIGhhc19jYWNoZSk7Ci0JCX0KLQl9IGVsc2UgeyAvKiBkcm9wcGluZyBzd2FwIGNhY2hlIGZsYWcgKi8KLQkJVk1fQlVHX09OKCFoYXNfY2FjaGUpOwotCQlwLT5zd2FwX21hcFtvZmZzZXRdID0gZW5jb2RlX3N3YXBtYXAoY291bnQsIGZhbHNlKTsKLQotCX0KLQkvKiByZXR1cm4gY29kZS4gKi8KIAljb3VudCA9IHAtPnN3YXBfbWFwW29mZnNldF07CisJaGFzX2NhY2hlID0gY291bnQgJiBTV0FQX0hBU19DQUNIRTsKKwljb3VudCAmPSB+U1dBUF9IQVNfQ0FDSEU7CisKKwlpZiAodXNhZ2UgPT0gU1dBUF9IQVNfQ0FDSEUpIHsKKwkJVk1fQlVHX09OKCFoYXNfY2FjaGUpOworCQloYXNfY2FjaGUgPSAwOworCX0gZWxzZSBpZiAoY291bnQgPT0gU1dBUF9NQVBfU0hNRU0pIHsKKwkJLyoKKwkJICogT3Igd2UgY291bGQgaW5zaXN0IG9uIHNobWVtLmMgdXNpbmcgYSBzcGVjaWFsCisJCSAqIHN3YXBfc2htZW1fZnJlZSgpIGFuZCBmcmVlX3NobWVtX3N3YXBfYW5kX2NhY2hlKCkuLi4KKwkJICovCisJCWNvdW50ID0gMDsKKwl9IGVsc2UgaWYgKChjb3VudCAmIH5DT1VOVF9DT05USU5VRUQpIDw9IFNXQVBfTUFQX01BWCkgeworCQlpZiAoY291bnQgPT0gQ09VTlRfQ09OVElOVUVEKSB7CisJCQlpZiAoc3dhcF9jb3VudF9jb250aW51ZWQocCwgb2Zmc2V0LCBjb3VudCkpCisJCQkJY291bnQgPSBTV0FQX01BUF9NQVggfCBDT1VOVF9DT05USU5VRUQ7CisJCQllbHNlCisJCQkJY291bnQgPSBTV0FQX01BUF9NQVg7CisJCX0gZWxzZQorCQkJY291bnQtLTsKKwl9CisKKwlpZiAoIWNvdW50KQorCQltZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoZW50cnkpOworCisJdXNhZ2UgPSBjb3VudCB8IGhhc19jYWNoZTsKKwlwLT5zd2FwX21hcFtvZmZzZXRdID0gdXNhZ2U7CisKIAkvKiBmcmVlIGlmIG5vIHJlZmVyZW5jZSAqLwotCWlmICghY291bnQpIHsKKwlpZiAoIXVzYWdlKSB7CiAJCWlmIChvZmZzZXQgPCBwLT5sb3dlc3RfYml0KQogCQkJcC0+bG93ZXN0X2JpdCA9IG9mZnNldDsKIAkJaWYgKG9mZnNldCA+IHAtPmhpZ2hlc3RfYml0KQogCQkJcC0+aGlnaGVzdF9iaXQgPSBvZmZzZXQ7Ci0JCWlmIChwLT5wcmlvID4gc3dhcF9pbmZvW3N3YXBfbGlzdC5uZXh0XS5wcmlvKQotCQkJc3dhcF9saXN0Lm5leHQgPSBwIC0gc3dhcF9pbmZvOworCQlpZiAoc3dhcF9saXN0Lm5leHQgPj0gMCAmJgorCQkgICAgcC0+cHJpbyA+IHN3YXBfaW5mb1tzd2FwX2xpc3QubmV4dF0tPnByaW8pCisJCQlzd2FwX2xpc3QubmV4dCA9IHAtPnR5cGU7CiAJCW5yX3N3YXBfcGFnZXMrKzsKIAkJcC0+aW51c2VfcGFnZXMtLTsKIAl9Ci0JaWYgKCFzd2FwX2NvdW50KGNvdW50KSkKLQkJbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGVudCk7Ci0JcmV0dXJuIGNvdW50OworCisJcmV0dXJuIHVzYWdlOwogfQogCiAvKgpAQCAtNTk3LDExICs1OTQsMTEgQEAKICAqLwogdm9pZCBzd2FwX2ZyZWUoc3dwX2VudHJ5X3QgZW50cnkpCiB7Ci0Jc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiBwOworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwOwogCiAJcCA9IHN3YXBfaW5mb19nZXQoZW50cnkpOwogCWlmIChwKSB7Ci0JCXN3YXBfZW50cnlfZnJlZShwLCBlbnRyeSwgU1dBUF9NQVApOworCQlzd2FwX2VudHJ5X2ZyZWUocCwgZW50cnksIDEpOwogCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAl9CiB9CkBAIC02MTIsMjYgKzYwOSwyMSBAQAogdm9pZCBzd2FwY2FjaGVfZnJlZShzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnA7Ci0JaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGNvdW50OwogCiAJcCA9IHN3YXBfaW5mb19nZXQoZW50cnkpOwogCWlmIChwKSB7Ci0JCXJldCA9IHN3YXBfZW50cnlfZnJlZShwLCBlbnRyeSwgU1dBUF9DQUNIRSk7Ci0JCWlmIChwYWdlKSB7Ci0JCQlib29sIHN3YXBvdXQ7Ci0JCQlpZiAocmV0KQotCQkJCXN3YXBvdXQgPSB0cnVlOyAvKiB0aGUgZW5kIG9mIHN3YXAgb3V0ICovCi0JCQllbHNlCi0JCQkJc3dhcG91dCA9IGZhbHNlOyAvKiBubyBtb3JlIHN3YXAgdXNlcnMhICovCi0JCQltZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBjYWNoZShwYWdlLCBlbnRyeSwgc3dhcG91dCk7Ci0JCX0KKwkJY291bnQgPSBzd2FwX2VudHJ5X2ZyZWUocCwgZW50cnksIFNXQVBfSEFTX0NBQ0hFKTsKKwkJaWYgKHBhZ2UpCisJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBjYWNoZShwYWdlLCBlbnRyeSwgY291bnQgIT0gMCk7CiAJCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwogCX0KLQlyZXR1cm47CiB9CiAKIC8qCiAgKiBIb3cgbWFueSByZWZlcmVuY2VzIHRvIHBhZ2UgYXJlIGN1cnJlbnRseSBzd2FwcGVkIG91dD8KKyAqIFRoaXMgZG9lcyBub3QgZ2l2ZSBhbiBleGFjdCBhbnN3ZXIgd2hlbiBzd2FwIGNvdW50IGlzIGNvbnRpbnVlZCwKKyAqIGJ1dCBkb2VzIGluY2x1ZGUgdGhlIGhpZ2ggQ09VTlRfQ09OVElOVUVEIGZsYWcgdG8gYWxsb3cgZm9yIHRoYXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfc3dhcGNvdW50KHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNjU5LDYgKzY1MSw4IEBACiAJaW50IGNvdW50OwogCiAJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlpZiAodW5saWtlbHkoUGFnZUtzbShwYWdlKSkpCisJCXJldHVybiAwOwogCWNvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKIAlpZiAoY291bnQgPD0gMSAmJiBQYWdlU3dhcENhY2hlKHBhZ2UpKSB7CiAJCWNvdW50ICs9IHBhZ2Vfc3dhcGNvdW50KHBhZ2UpOwpAQCAtNjY3LDcgKzY2MSw3IEBACiAJCQlTZXRQYWdlRGlydHkocGFnZSk7CiAJCX0KIAl9Ci0JcmV0dXJuIGNvdW50ID09IDE7CisJcmV0dXJuIGNvdW50IDw9IDE7CiB9CiAKIC8qCkBAIC03MDQsNyArNjk4LDcgQEAKIAogCXAgPSBzd2FwX2luZm9fZ2V0KGVudHJ5KTsKIAlpZiAocCkgewotCQlpZiAoc3dhcF9lbnRyeV9mcmVlKHAsIGVudHJ5LCBTV0FQX01BUCkgPT0gU1dBUF9IQVNfQ0FDSEUpIHsKKwkJaWYgKHN3YXBfZW50cnlfZnJlZShwLCBlbnRyeSwgMSkgPT0gU1dBUF9IQVNfQ0FDSEUpIHsKIAkJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKCZzd2FwcGVyX3NwYWNlLCBlbnRyeS52YWwpOwogCQkJaWYgKHBhZ2UgJiYgIXRyeWxvY2tfcGFnZShwYWdlKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTc0MSwxNCArNzM1LDE0IEBACiBpbnQgc3dhcF90eXBlX29mKGRldl90IGRldmljZSwgc2VjdG9yX3Qgb2Zmc2V0LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICoqYmRldl9wKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBOVUxMOwotCWludCBpOworCWludCB0eXBlOwogCiAJaWYgKGRldmljZSkKIAkJYmRldiA9IGJkZ2V0KGRldmljZSk7CiAKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX3N3YXBmaWxlczsgaSsrKSB7Ci0JCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBzd2FwX2luZm8gKyBpOworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBucl9zd2FwZmlsZXM7IHR5cGUrKykgeworCQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzID0gc3dhcF9pbmZvW3R5cGVdOwogCiAJCWlmICghKHNpcy0+ZmxhZ3MgJiBTV1BfV1JJVEVPSykpCiAJCQljb250aW51ZTsKQEAgLTc1OCwyMCArNzUyLDE4IEBACiAJCQkJKmJkZXZfcCA9IGJkZ3JhYihzaXMtPmJkZXYpOwogCiAJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKLQkJCXJldHVybiBpOworCQkJcmV0dXJuIHR5cGU7CiAJCX0KIAkJaWYgKGJkZXYgPT0gc2lzLT5iZGV2KSB7Ci0JCQlzdHJ1Y3Qgc3dhcF9leHRlbnQgKnNlOworCQkJc3RydWN0IHN3YXBfZXh0ZW50ICpzZSA9ICZzaXMtPmZpcnN0X3N3YXBfZXh0ZW50OwogCi0JCQlzZSA9IGxpc3RfZW50cnkoc2lzLT5leHRlbnRfbGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3Qgc3dhcF9leHRlbnQsIGxpc3QpOwogCQkJaWYgKHNlLT5zdGFydF9ibG9jayA9PSBvZmZzZXQpIHsKIAkJCQlpZiAoYmRldl9wKQogCQkJCQkqYmRldl9wID0gYmRncmFiKHNpcy0+YmRldik7CiAKIAkJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAkJCQliZHB1dChiZGV2KTsKLQkJCQlyZXR1cm4gaTsKKwkJCQlyZXR1cm4gdHlwZTsKIAkJCX0KIAkJfQogCX0KQEAgLTc4Myw2ICs3NzUsMjEgQEAKIH0KIAogLyoKKyAqIEdldCB0aGUgKFBBR0VfU0laRSkgYmxvY2sgY29ycmVzcG9uZGluZyB0byBnaXZlbiBvZmZzZXQgb24gdGhlIHN3YXBkZXYKKyAqIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaW5kZXggaW4gc3dhcF9pbmZvIChzd2FwIHR5cGUpLgorICovCitzZWN0b3JfdCBzd2FwZGV2X2Jsb2NrKGludCB0eXBlLCBwZ29mZl90IG9mZnNldCkKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCisJaWYgKCh1bnNpZ25lZCBpbnQpdHlwZSA+PSBucl9zd2FwZmlsZXMpCisJCXJldHVybiAwOworCWlmICghKHN3YXBfaW5mb1t0eXBlXS0+ZmxhZ3MgJiBTV1BfV1JJVEVPSykpCisJCXJldHVybiAwOworCXJldHVybiBtYXBfc3dhcF9lbnRyeShzd3BfZW50cnkodHlwZSwgb2Zmc2V0KSwgJmJkZXYpOworfQorCisvKgogICogUmV0dXJuIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIHN3YXAgcGFnZXMgb2YgZ2l2ZW4gdHlwZSwgb3IgdGhlIG51bWJlcgogICogb2YgZnJlZSBwYWdlcyBvZiB0aGF0IHR5cGUgKGRlcGVuZGluZyBvbiBAZnJlZSkKICAqCkBAIC03OTIsMTggKzc5OSwyMCBAQAogewogCXVuc2lnbmVkIGludCBuID0gMDsKIAotCWlmICh0eXBlIDwgbnJfc3dhcGZpbGVzKSB7Ci0JCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKLQkJaWYgKHN3YXBfaW5mb1t0eXBlXS5mbGFncyAmIFNXUF9XUklURU9LKSB7Ci0JCQluID0gc3dhcF9pbmZvW3R5cGVdLnBhZ2VzOworCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKKwlpZiAoKHVuc2lnbmVkIGludCl0eXBlIDwgbnJfc3dhcGZpbGVzKSB7CisJCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBzd2FwX2luZm9bdHlwZV07CisKKwkJaWYgKHNpcy0+ZmxhZ3MgJiBTV1BfV1JJVEVPSykgeworCQkJbiA9IHNpcy0+cGFnZXM7CiAJCQlpZiAoZnJlZSkKLQkJCQluIC09IHN3YXBfaW5mb1t0eXBlXS5pbnVzZV9wYWdlczsKKwkJCQluIC09IHNpcy0+aW51c2VfcGFnZXM7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAJfQorCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwogCXJldHVybiBuOwogfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovCiAKIC8qCiAgKiBObyBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyIHRoaXMgUFRFIHNoYXJlcyB0aGUgc3dhcCBlbnRyeSB3aXRoIG90aGVycywKQEAgLTkzMiw3ICs5NDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kLCBuZXh0OwogCWludCByZXQ7CiAKLQlpZiAocGFnZS0+bWFwcGluZykgeworCWlmIChwYWdlX2Fub25fdm1hKHBhZ2UpKSB7CiAJCWFkZHIgPSBwYWdlX2FkZHJlc3NfaW5fdm1hKHBhZ2UsIHZtYSk7CiAJCWlmIChhZGRyID09IC1FRkFVTFQpCiAJCQlyZXR1cm4gMDsKQEAgLTk4OCw3ICs5OTcsNyBAQAogewogCXVuc2lnbmVkIGludCBtYXggPSBzaS0+bWF4OwogCXVuc2lnbmVkIGludCBpID0gcHJldjsKLQlpbnQgY291bnQ7CisJdW5zaWduZWQgY2hhciBjb3VudDsKIAogCS8qCiAJICogTm8gbmVlZCBmb3Igc3dhcF9sb2NrIGhlcmU6IHdlJ3JlIGp1c3QgbG9va2luZwpAQCAtMTAyNCwxNiArMTAzMywxNCBAQAogICovCiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqIHNpID0gJnN3YXBfaW5mb1t0eXBlXTsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kgPSBzd2FwX2luZm9bdHlwZV07CiAJc3RydWN0IG1tX3N0cnVjdCAqc3RhcnRfbW07Ci0JdW5zaWduZWQgc2hvcnQgKnN3YXBfbWFwOwotCXVuc2lnbmVkIHNob3J0IHN3Y291bnQ7CisJdW5zaWduZWQgY2hhciAqc3dhcF9tYXA7CisJdW5zaWduZWQgY2hhciBzd2NvdW50OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN3cF9lbnRyeV90IGVudHJ5OwogCXVuc2lnbmVkIGludCBpID0gMDsKIAlpbnQgcmV0dmFsID0gMDsKLQlpbnQgcmVzZXRfb3ZlcmZsb3cgPSAwOwotCWludCBzaG1lbTsKIAogCS8qCiAJICogV2hlbiBzZWFyY2hpbmcgbW1zIGZvciBhbiBlbnRyeSwgYSBnb29kIHN0cmF0ZWd5IGlzIHRvCkBAIC0xMDQ3LDggKzEwNTQsNyBAQAogCSAqIHRvZ2V0aGVyLCBjaGlsZCBhZnRlciBwYXJlbnQuICBJZiB3ZSByYWNlIHdpdGggZHVwX21tYXAoKSwgd2UKIAkgKiBwcmVmZXIgdG8gcmVzb2x2ZSBwYXJlbnQgYmVmb3JlIGNoaWxkLCBsZXN0IHdlIG1pc3MgZW50cmllcwogCSAqIGR1cGxpY2F0ZWQgYWZ0ZXIgd2Ugc2Nhbm5lZCBjaGlsZDogdXNpbmcgbGFzdCBtbSB3b3VsZCBpbnZlcnQKLQkgKiB0aGF0LiAgVGhvdWdoIGl0J3Mgb25seSBhIHNlcmlvdXMgY29uY2VybiB3aGVuIGFuIG92ZXJmbG93ZWQKLQkgKiBzd2FwIGNvdW50IGlzIHJlc2V0IGZyb20gU1dBUF9NQVBfTUFYLCBwcmV2ZW50aW5nIGEgcmVzY2FuLgorCSAqIHRoYXQuCiAJICovCiAJc3RhcnRfbW0gPSAmaW5pdF9tbTsKIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX3VzZXJzKTsKQEAgLTExMTAsMTcgKzExMTYsMTggQEAKIAogCQkvKgogCQkgKiBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZW50cnkuCi0JCSAqIFdoZW5ldmVyIHdlIHJlYWNoIGluaXRfbW0sIHRoZXJlJ3Mgbm8gYWRkcmVzcyBzcGFjZQotCQkgKiB0byBzZWFyY2gsIGJ1dCB1c2UgaXQgYXMgYSByZW1pbmRlciB0byBzZWFyY2ggc2htZW0uCiAJCSAqLwotCQlzaG1lbSA9IDA7CiAJCXN3Y291bnQgPSAqc3dhcF9tYXA7Ci0JCWlmIChzd2FwX2NvdW50KHN3Y291bnQpKSB7Ci0JCQlpZiAoc3RhcnRfbW0gPT0gJmluaXRfbW0pCi0JCQkJc2htZW0gPSBzaG1lbV91bnVzZShlbnRyeSwgcGFnZSk7Ci0JCQllbHNlCi0JCQkJcmV0dmFsID0gdW51c2VfbW0oc3RhcnRfbW0sIGVudHJ5LCBwYWdlKTsKKwkJaWYgKHN3YXBfY291bnQoc3djb3VudCkgPT0gU1dBUF9NQVBfU0hNRU0pIHsKKwkJCXJldHZhbCA9IHNobWVtX3VudXNlKGVudHJ5LCBwYWdlKTsKKwkJCS8qIHBhZ2UgaGFzIGFscmVhZHkgYmVlbiB1bmxvY2tlZCBhbmQgcmVsZWFzZWQgKi8KKwkJCWlmIChyZXR2YWwgPCAwKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKHN3YXBfY291bnQoc3djb3VudCkgJiYgc3RhcnRfbW0gIT0gJmluaXRfbW0pCisJCQlyZXR2YWwgPSB1bnVzZV9tbShzdGFydF9tbSwgZW50cnksIHBhZ2UpOworCiAJCWlmIChzd2FwX2NvdW50KCpzd2FwX21hcCkpIHsKIAkJCWludCBzZXRfc3RhcnRfbW0gPSAoKnN3YXBfbWFwID49IHN3Y291bnQpOwogCQkJc3RydWN0IGxpc3RfaGVhZCAqcCA9ICZzdGFydF9tbS0+bW1saXN0OwpAQCAtMTEzMSw3ICsxMTM4LDcgQEAKIAkJCWF0b21pY19pbmMoJm5ld19zdGFydF9tbS0+bW1fdXNlcnMpOwogCQkJYXRvbWljX2luYygmcHJldl9tbS0+bW1fdXNlcnMpOwogCQkJc3Bpbl9sb2NrKCZtbWxpc3RfbG9jayk7Ci0JCQl3aGlsZSAoc3dhcF9jb3VudCgqc3dhcF9tYXApICYmICFyZXR2YWwgJiYgIXNobWVtICYmCisJCQl3aGlsZSAoc3dhcF9jb3VudCgqc3dhcF9tYXApICYmICFyZXR2YWwgJiYKIAkJCQkJKHAgPSBwLT5uZXh0KSAhPSAmc3RhcnRfbW0tPm1tbGlzdCkgewogCQkJCW1tID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpOwogCQkJCWlmICghYXRvbWljX2luY19ub3RfemVybygmbW0tPm1tX3VzZXJzKSkKQEAgLTExNDUsMTAgKzExNTIsOSBAQAogCQkJCXN3Y291bnQgPSAqc3dhcF9tYXA7CiAJCQkJaWYgKCFzd2FwX2NvdW50KHN3Y291bnQpKSAvKiBhbnkgdXNhZ2UgPyAqLwogCQkJCQk7Ci0JCQkJZWxzZSBpZiAobW0gPT0gJmluaXRfbW0pIHsKKwkJCQllbHNlIGlmIChtbSA9PSAmaW5pdF9tbSkKIAkJCQkJc2V0X3N0YXJ0X21tID0gMTsKLQkJCQkJc2htZW0gPSBzaG1lbV91bnVzZShlbnRyeSwgcGFnZSk7Ci0JCQkJfSBlbHNlCisJCQkJZWxzZQogCQkJCQlyZXR2YWwgPSB1bnVzZV9tbShtbSwgZW50cnksIHBhZ2UpOwogCiAJCQkJaWYgKHNldF9zdGFydF9tbSAmJiAqc3dhcF9tYXAgPCBzd2NvdW50KSB7CkBAIC0xMTY0LDEzICsxMTcwLDYgQEAKIAkJCW1tcHV0KHN0YXJ0X21tKTsKIAkJCXN0YXJ0X21tID0gbmV3X3N0YXJ0X21tOwogCQl9Ci0JCWlmIChzaG1lbSkgewotCQkJLyogcGFnZSBoYXMgYWxyZWFkeSBiZWVuIHVubG9ja2VkIGFuZCByZWxlYXNlZCAqLwotCQkJaWYgKHNobWVtID4gMCkKLQkJCQljb250aW51ZTsKLQkJCXJldHZhbCA9IHNobWVtOwotCQkJYnJlYWs7Ci0JCX0KIAkJaWYgKHJldHZhbCkgewogCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CkBAIC0xMTc4LDMwICsxMTc3LDYgQEAKIAkJfQogCiAJCS8qCi0JCSAqIEhvdyBjb3VsZCBzd2FwIGNvdW50IHJlYWNoIDB4N2ZmZSA/Ci0JCSAqIFRoZXJlJ3Mgbm8gd2F5IHRvIHJlcGVhdCBhIHN3YXAgcGFnZSB3aXRoaW4gYW4gbW0KLQkJICogKGV4Y2VwdCBpbiBzaG1lbSwgd2hlcmUgaXQncyB0aGUgc2hhcmVkIG9iamVjdCB3aGljaCB0YWtlcwotCQkgKiB0aGUgcmVmZXJlbmNlIGNvdW50KT8KLQkJICogV2UgYmVsaWV2ZSBTV0FQX01BUF9NQVggY2Fubm90IG9jY3VyLihpZiBvY2N1ciwgdW5zaWduZWQKLQkJICogc2hvcnQgaXMgdG9vIHNtYWxsLi4uLikKLQkJICogSWYgdGhhdCdzIHdyb25nLCB0aGVuIHdlIHNob3VsZCB3b3JyeSBtb3JlIGFib3V0Ci0JCSAqIGV4aXRfbW1hcCgpIGFuZCBkb19tdW5tYXAoKSBjYXNlcyBkZXNjcmliZWQgYWJvdmU6Ci0JCSAqIHdlIG1pZ2h0IGJlIHJlc2V0dGluZyBTV0FQX01BUF9NQVggdG9vIGVhcmx5IGhlcmUuCi0JCSAqIFdlIGtub3cgIlVuZGVhZCJzIGNhbiBoYXBwZW4sIHRoZXkncmUgb2theSwgc28gZG9uJ3QKLQkJICogcmVwb3J0IHRoZW07IGJ1dCBkbyByZXBvcnQgaWYgd2UgcmVzZXQgU1dBUF9NQVBfTUFYLgotCQkgKi8KLQkJLyogV2UgbWlnaHQgcmVsZWFzZSB0aGUgbG9ja19wYWdlKCkgaW4gdW51c2VfbW0oKS4gKi8KLQkJaWYgKCFQYWdlU3dhcENhY2hlKHBhZ2UpIHx8IHBhZ2VfcHJpdmF0ZShwYWdlKSAhPSBlbnRyeS52YWwpCi0JCQlnb3RvIHJldHJ5OwotCi0JCWlmIChzd2FwX2NvdW50KCpzd2FwX21hcCkgPT0gU1dBUF9NQVBfTUFYKSB7Ci0JCQlzcGluX2xvY2soJnN3YXBfbG9jayk7Ci0JCQkqc3dhcF9tYXAgPSBlbmNvZGVfc3dhcG1hcCgwLCB0cnVlKTsKLQkJCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwotCQkJcmVzZXRfb3ZlcmZsb3cgPSAxOwotCQl9Ci0KLQkJLyoKIAkJICogSWYgYSByZWZlcmVuY2UgcmVtYWlucyAocmFyZSksIHdlIHdvdWxkIGxpa2UgdG8gbGVhdmUKIAkJICogdGhlIHBhZ2UgaW4gdGhlIHN3YXAgY2FjaGU7IGJ1dCB0cnlfdG9fdW5tYXAgY291bGQKIAkJICogdGhlbiByZS1kdXBsaWNhdGUgdGhlIGVudHJ5IG9uY2Ugd2UgZHJvcCBwYWdlIGxvY2ssCkBAIC0xMjEzLDYgKzExODgsMTIgQEAKIAkJICogcmVhZCBmcm9tIGRpc2sgaW50byBhbm90aGVyIHBhZ2UuICBTcGxpdHRpbmcgaW50byB0d28KIAkJICogcGFnZXMgd291bGQgYmUgaW5jb3JyZWN0IGlmIHN3YXAgc3VwcG9ydGVkICJzaGFyZWQKIAkJICogcHJpdmF0ZSIgcGFnZXMsIGJ1dCB0aGV5IGFyZSBoYW5kbGVkIGJ5IHRtcGZzIGZpbGVzLgorCQkgKgorCQkgKiBHaXZlbiBob3cgdW51c2Vfdm1hKCkgdGFyZ2V0cyBvbmUgcGFydGljdWxhciBvZmZzZXQKKwkJICogaW4gYW4gYW5vbl92bWEsIG9uY2UgdGhlIGFub25fdm1hIGhhcyBiZWVuIGRldGVybWluZWQsCisJCSAqIHRoaXMgc3BsaXR0aW5nIGhhcHBlbnMgdG8gYmUganVzdCB3aGF0IGlzIG5lZWRlZCB0bworCQkgKiBoYW5kbGUgd2hlcmUgS1NNIHBhZ2VzIGhhdmUgYmVlbiBzd2FwcGVkIG91dDogcmUtcmVhZGluZworCQkgKiBpcyB1bm5lY2Vzc2FyaWx5IHNsb3csIGJ1dCB3ZSBjYW4gZml4IHRoYXQgbGF0ZXIgb24uCiAJCSAqLwogCQlpZiAoc3dhcF9jb3VudCgqc3dhcF9tYXApICYmCiAJCSAgICAgUGFnZURpcnR5KHBhZ2UpICYmIFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKQEAgLTEyNDIsNyArMTIyMyw2IEBACiAJCSAqIG1hcmsgcGFnZSBkaXJ0eSBzbyBzaHJpbmtfcGFnZV9saXN0IHdpbGwgcHJlc2VydmUgaXQuCiAJCSAqLwogCQlTZXRQYWdlRGlydHkocGFnZSk7Ci1yZXRyeToKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIApAQCAtMTI1NCwxMCArMTIzNCw2IEBACiAJfQogCiAJbW1wdXQoc3RhcnRfbW0pOwotCWlmIChyZXNldF9vdmVyZmxvdykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzd2Fwb2ZmOiBjbGVhcmVkIHN3YXAgZW50cnkgb3ZlcmZsb3dcbiIpOwotCQlzd2FwX292ZXJmbG93ID0gMDsKLQl9CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTI3MCwxMCArMTI0NiwxMCBAQAogc3RhdGljIHZvaWQgZHJhaW5fbW1saXN0KHZvaWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm5leHQ7Ci0JdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHR5cGU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfc3dhcGZpbGVzOyBpKyspCi0JCWlmIChzd2FwX2luZm9baV0uaW51c2VfcGFnZXMpCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IG5yX3N3YXBmaWxlczsgdHlwZSsrKQorCQlpZiAoc3dhcF9pbmZvW3R5cGVdLT5pbnVzZV9wYWdlcykKIAkJCXJldHVybjsKIAlzcGluX2xvY2soJm1tbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbmV4dCwgJmluaXRfbW0ubW1saXN0KQpAQCAtMTI4MywxMiArMTI1OSwyMyBAQAogCiAvKgogICogVXNlIHRoaXMgc3dhcGRldidzIGV4dGVudCBpbmZvIHRvIGxvY2F0ZSB0aGUgKFBBR0VfU0laRSkgYmxvY2sgd2hpY2gKLSAqIGNvcnJlc3BvbmRzIHRvIHBhZ2Ugb2Zmc2V0IGBvZmZzZXQnLgorICogY29ycmVzcG9uZHMgdG8gcGFnZSBvZmZzZXQgZm9yIHRoZSBzcGVjaWZpZWQgc3dhcCBlbnRyeS4KKyAqIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHNlY3Rvcl90LCBidXQgaXQgcmV0dXJucyBwYWdlIG9mZnNldAorICogaW50byB0aGUgYmRldiwgbm90IHNlY3RvciBvZmZzZXQuCiAgKi8KLXNlY3Rvcl90IG1hcF9zd2FwX3BhZ2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywgcGdvZmZfdCBvZmZzZXQpCitzdGF0aWMgc2VjdG9yX3QgbWFwX3N3YXBfZW50cnkoc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBibG9ja19kZXZpY2UgKipiZGV2KQogewotCXN0cnVjdCBzd2FwX2V4dGVudCAqc2UgPSBzaXMtPmN1cnJfc3dhcF9leHRlbnQ7Ci0Jc3RydWN0IHN3YXBfZXh0ZW50ICpzdGFydF9zZSA9IHNlOworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXM7CisJc3RydWN0IHN3YXBfZXh0ZW50ICpzdGFydF9zZTsKKwlzdHJ1Y3Qgc3dhcF9leHRlbnQgKnNlOworCXBnb2ZmX3Qgb2Zmc2V0OworCisJc2lzID0gc3dhcF9pbmZvW3N3cF90eXBlKGVudHJ5KV07CisJKmJkZXYgPSBzaXMtPmJkZXY7CisKKwlvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTsKKwlzdGFydF9zZSA9IHNpcy0+Y3Vycl9zd2FwX2V4dGVudDsKKwlzZSA9IHN0YXJ0X3NlOwogCiAJZm9yICggOyA7ICkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKQEAgLTEyOTgsNDAgKzEyODUsMzEgQEAKIAkJCXJldHVybiBzZS0+c3RhcnRfYmxvY2sgKyAob2Zmc2V0IC0gc2UtPnN0YXJ0X3BhZ2UpOwogCQl9CiAJCWxoID0gc2UtPmxpc3QubmV4dDsKLQkJaWYgKGxoID09ICZzaXMtPmV4dGVudF9saXN0KQotCQkJbGggPSBsaC0+bmV4dDsKIAkJc2UgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3Qgc3dhcF9leHRlbnQsIGxpc3QpOwogCQlzaXMtPmN1cnJfc3dhcF9leHRlbnQgPSBzZTsKIAkJQlVHX09OKHNlID09IHN0YXJ0X3NlKTsJCS8qIEl0ICptdXN0KiBiZSBwcmVzZW50ICovCiAJfQogfQogCi0jaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCiAvKgotICogR2V0IHRoZSAoUEFHRV9TSVpFKSBibG9jayBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIG9mZnNldCBvbiB0aGUgc3dhcGRldgotICogY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCBpbiBzd2FwX2luZm8gKHN3YXAgdHlwZSkuCisgKiBSZXR1cm5zIHRoZSBwYWdlIG9mZnNldCBpbnRvIGJkZXYgZm9yIHRoZSBzcGVjaWZpZWQgcGFnZSdzIHN3YXAgZW50cnkuCiAgKi8KLXNlY3Rvcl90IHN3YXBkZXZfYmxvY2soaW50IHN3YXBfdHlwZSwgcGdvZmZfdCBvZmZzZXQpCitzZWN0b3JfdCBtYXBfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICoqYmRldikKIHsKLQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzOwotCi0JaWYgKHN3YXBfdHlwZSA+PSBucl9zd2FwZmlsZXMpCi0JCXJldHVybiAwOwotCi0Jc2lzID0gc3dhcF9pbmZvICsgc3dhcF90eXBlOwotCXJldHVybiAoc2lzLT5mbGFncyAmIFNXUF9XUklURU9LKSA/IG1hcF9zd2FwX3BhZ2Uoc2lzLCBvZmZzZXQpIDogMDsKKwlzd3BfZW50cnlfdCBlbnRyeTsKKwllbnRyeS52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSk7CisJcmV0dXJuIG1hcF9zd2FwX2VudHJ5KGVudHJ5LCBiZGV2KTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KIAogLyoKICAqIEZyZWUgYWxsIG9mIGEgc3dhcGRldidzIGV4dGVudCBpbmZvcm1hdGlvbgogICovCiBzdGF0aWMgdm9pZCBkZXN0cm95X3N3YXBfZXh0ZW50cyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzKQogewotCXdoaWxlICghbGlzdF9lbXB0eSgmc2lzLT5leHRlbnRfbGlzdCkpIHsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnNpcy0+Zmlyc3Rfc3dhcF9leHRlbnQubGlzdCkpIHsKIAkJc3RydWN0IHN3YXBfZXh0ZW50ICpzZTsKIAotCQlzZSA9IGxpc3RfZW50cnkoc2lzLT5leHRlbnRfbGlzdC5uZXh0LAorCQlzZSA9IGxpc3RfZW50cnkoc2lzLT5maXJzdF9zd2FwX2V4dGVudC5saXN0Lm5leHQsCiAJCQkJc3RydWN0IHN3YXBfZXh0ZW50LCBsaXN0KTsKIAkJbGlzdF9kZWwoJnNlLT5saXN0KTsKIAkJa2ZyZWUoc2UpOwpAQCAtMTM1Miw4ICsxMzMwLDE1IEBACiAJc3RydWN0IHN3YXBfZXh0ZW50ICpuZXdfc2U7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGg7CiAKLQlsaCA9IHNpcy0+ZXh0ZW50X2xpc3QucHJldjsJLyogVGhlIGhpZ2hlc3QgcGFnZSBleHRlbnQgKi8KLQlpZiAobGggIT0gJnNpcy0+ZXh0ZW50X2xpc3QpIHsKKwlpZiAoc3RhcnRfcGFnZSA9PSAwKSB7CisJCXNlID0gJnNpcy0+Zmlyc3Rfc3dhcF9leHRlbnQ7CisJCXNpcy0+Y3Vycl9zd2FwX2V4dGVudCA9IHNlOworCQlzZS0+c3RhcnRfcGFnZSA9IDA7CisJCXNlLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOworCQlzZS0+c3RhcnRfYmxvY2sgPSBzdGFydF9ibG9jazsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJbGggPSBzaXMtPmZpcnN0X3N3YXBfZXh0ZW50Lmxpc3QucHJldjsJLyogSGlnaGVzdCBleHRlbnQgKi8KIAkJc2UgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3Qgc3dhcF9leHRlbnQsIGxpc3QpOwogCQlCVUdfT04oc2UtPnN0YXJ0X3BhZ2UgKyBzZS0+bnJfcGFnZXMgIT0gc3RhcnRfcGFnZSk7CiAJCWlmIChzZS0+c3RhcnRfYmxvY2sgKyBzZS0+bnJfcGFnZXMgPT0gc3RhcnRfYmxvY2spIHsKQEAgLTEzNzMsNyArMTM1OCw3IEBACiAJbmV3X3NlLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwogCW5ld19zZS0+c3RhcnRfYmxvY2sgPSBzdGFydF9ibG9jazsKIAotCWxpc3RfYWRkX3RhaWwoJm5ld19zZS0+bGlzdCwgJnNpcy0+ZXh0ZW50X2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJm5ld19zZS0+bGlzdCwgJnNpcy0+Zmlyc3Rfc3dhcF9leHRlbnQubGlzdCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0MjUsNyArMTQxMCw3IEBACiAJaWYgKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKIAkJcmV0ID0gYWRkX3N3YXBfZXh0ZW50KHNpcywgMCwgc2lzLT5tYXgsIDApOwogCQkqc3BhbiA9IHNpcy0+cGFnZXM7Ci0JCWdvdG8gZG9uZTsKKwkJZ290byBvdXQ7CiAJfQogCiAJYmxrYml0cyA9IGlub2RlLT5pX2Jsa2JpdHM7CkBAIC0xNDk2LDI1ICsxNDgxLDIyIEBACiAJc2lzLT5tYXggPSBwYWdlX25vOwogCXNpcy0+cGFnZXMgPSBwYWdlX25vIC0gMTsKIAlzaXMtPmhpZ2hlc3RfYml0ID0gcGFnZV9ubyAtIDE7Ci1kb25lOgotCXNpcy0+Y3Vycl9zd2FwX2V4dGVudCA9IGxpc3RfZW50cnkoc2lzLT5leHRlbnRfbGlzdC5wcmV2LAotCQkJCQlzdHJ1Y3Qgc3dhcF9leHRlbnQsIGxpc3QpOwotCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiByZXQ7CiBiYWRfYm1hcDoKIAlwcmludGsoS0VSTl9FUlIgInN3YXBvbjogc3dhcGZpbGUgaGFzIGhvbGVzXG4iKTsKIAlyZXQgPSAtRUlOVkFMOwotb3V0OgotCXJldHVybiByZXQ7CisJZ290byBvdXQ7CiB9CiAKIFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSkKIHsKLQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqIHAgPSBOVUxMOwotCXVuc2lnbmVkIHNob3J0ICpzd2FwX21hcDsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqc3dhcF9tYXA7CiAJc3RydWN0IGZpbGUgKnN3YXBfZmlsZSwgKnZpY3RpbTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWNoYXIgKiBwYXRobmFtZTsKKwljaGFyICpwYXRobmFtZTsKIAlpbnQgaSwgdHlwZSwgcHJldjsKIAlpbnQgZXJyOwogCkBAIC0xNTM1LDggKzE1MTcsOCBAQAogCW1hcHBpbmcgPSB2aWN0aW0tPmZfbWFwcGluZzsKIAlwcmV2ID0gLTE7CiAJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwotCWZvciAodHlwZSA9IHN3YXBfbGlzdC5oZWFkOyB0eXBlID49IDA7IHR5cGUgPSBzd2FwX2luZm9bdHlwZV0ubmV4dCkgewotCQlwID0gc3dhcF9pbmZvICsgdHlwZTsKKwlmb3IgKHR5cGUgPSBzd2FwX2xpc3QuaGVhZDsgdHlwZSA+PSAwOyB0eXBlID0gc3dhcF9pbmZvW3R5cGVdLT5uZXh0KSB7CisJCXAgPSBzd2FwX2luZm9bdHlwZV07CiAJCWlmIChwLT5mbGFncyAmIFNXUF9XUklURU9LKSB7CiAJCQlpZiAocC0+c3dhcF9maWxlLT5mX21hcHBpbmcgPT0gbWFwcGluZykKIAkJCQlicmVhazsKQEAgLTE1NTUsMTggKzE1MzcsMTcgQEAKIAkJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAJCWdvdG8gb3V0X2RwdXQ7CiAJfQotCWlmIChwcmV2IDwgMCkgeworCWlmIChwcmV2IDwgMCkKIAkJc3dhcF9saXN0LmhlYWQgPSBwLT5uZXh0OwotCX0gZWxzZSB7Ci0JCXN3YXBfaW5mb1twcmV2XS5uZXh0ID0gcC0+bmV4dDsKLQl9CisJZWxzZQorCQlzd2FwX2luZm9bcHJldl0tPm5leHQgPSBwLT5uZXh0OwogCWlmICh0eXBlID09IHN3YXBfbGlzdC5uZXh0KSB7CiAJCS8qIGp1c3QgcGljayBzb21ldGhpbmcgdGhhdCdzIHNhZmUuLi4gKi8KIAkJc3dhcF9saXN0Lm5leHQgPSBzd2FwX2xpc3QuaGVhZDsKIAl9CiAJaWYgKHAtPnByaW8gPCAwKSB7Ci0JCWZvciAoaSA9IHAtPm5leHQ7IGkgPj0gMDsgaSA9IHN3YXBfaW5mb1tpXS5uZXh0KQotCQkJc3dhcF9pbmZvW2ldLnByaW8gPSBwLT5wcmlvLS07CisJCWZvciAoaSA9IHAtPm5leHQ7IGkgPj0gMDsgaSA9IHN3YXBfaW5mb1tpXS0+bmV4dCkKKwkJCXN3YXBfaW5mb1tpXS0+cHJpbyA9IHAtPnByaW8tLTsKIAkJbGVhc3RfcHJpb3JpdHkrKzsKIAl9CiAJbnJfc3dhcF9wYWdlcyAtPSBwLT5wYWdlczsKQEAgLTE1ODQsMTYgKzE1NjUsMTYgQEAKIAkJaWYgKHAtPnByaW8gPCAwKQogCQkJcC0+cHJpbyA9IC0tbGVhc3RfcHJpb3JpdHk7CiAJCXByZXYgPSAtMTsKLQkJZm9yIChpID0gc3dhcF9saXN0LmhlYWQ7IGkgPj0gMDsgaSA9IHN3YXBfaW5mb1tpXS5uZXh0KSB7Ci0JCQlpZiAocC0+cHJpbyA+PSBzd2FwX2luZm9baV0ucHJpbykKKwkJZm9yIChpID0gc3dhcF9saXN0LmhlYWQ7IGkgPj0gMDsgaSA9IHN3YXBfaW5mb1tpXS0+bmV4dCkgeworCQkJaWYgKHAtPnByaW8gPj0gc3dhcF9pbmZvW2ldLT5wcmlvKQogCQkJCWJyZWFrOwogCQkJcHJldiA9IGk7CiAJCX0KIAkJcC0+bmV4dCA9IGk7CiAJCWlmIChwcmV2IDwgMCkKLQkJCXN3YXBfbGlzdC5oZWFkID0gc3dhcF9saXN0Lm5leHQgPSBwIC0gc3dhcF9pbmZvOworCQkJc3dhcF9saXN0LmhlYWQgPSBzd2FwX2xpc3QubmV4dCA9IHR5cGU7CiAJCWVsc2UKLQkJCXN3YXBfaW5mb1twcmV2XS5uZXh0ID0gcCAtIHN3YXBfaW5mbzsKKwkJCXN3YXBfaW5mb1twcmV2XS0+bmV4dCA9IHR5cGU7CiAJCW5yX3N3YXBfcGFnZXMgKz0gcC0+cGFnZXM7CiAJCXRvdGFsX3N3YXBfcGFnZXMgKz0gcC0+cGFnZXM7CiAJCXAtPmZsYWdzIHw9IFNXUF9XUklURU9LOwpAQCAtMTYwNiw2ICsxNTg3LDkgQEAKIAl1cF93cml0ZSgmc3dhcF91bnBsdWdfc2VtKTsKIAogCWRlc3Ryb3lfc3dhcF9leHRlbnRzKHApOworCWlmIChwLT5mbGFncyAmIFNXUF9DT05USU5VRUQpCisJCWZyZWVfc3dhcF9jb3VudF9jb250aW51YXRpb25zKHApOworCiAJbXV0ZXhfbG9jaygmc3dhcG9uX211dGV4KTsKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7CiAJZHJhaW5fbW1saXN0KCk7CkBAIC0xNjUzLDggKzE2MzcsOCBAQAogLyogaXRlcmF0b3IgKi8KIHN0YXRpYyB2b2lkICpzd2FwX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc3dhcCwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnB0ciA9IHN3YXBfaW5mbzsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CisJaW50IHR5cGU7CiAJbG9mZl90IGwgPSAqcG9zOwogCiAJbXV0ZXhfbG9jaygmc3dhcG9uX211dGV4KTsKQEAgLTE2NjIsMTEgKzE2NDYsMTMgQEAKIAlpZiAoIWwpCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfc3dhcGZpbGVzOyBpKyssIHB0cisrKSB7Ci0JCWlmICghKHB0ci0+ZmxhZ3MgJiBTV1BfVVNFRCkgfHwgIXB0ci0+c3dhcF9tYXApCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IG5yX3N3YXBmaWxlczsgdHlwZSsrKSB7CisJCXNtcF9ybWIoKTsJLyogcmVhZCBucl9zd2FwZmlsZXMgYmVmb3JlIHN3YXBfaW5mb1t0eXBlXSAqLworCQlzaSA9IHN3YXBfaW5mb1t0eXBlXTsKKwkJaWYgKCEoc2ktPmZsYWdzICYgU1dQX1VTRUQpIHx8ICFzaS0+c3dhcF9tYXApCiAJCQljb250aW51ZTsKIAkJaWYgKCEtLWwpCi0JCQlyZXR1cm4gcHRyOworCQkJcmV0dXJuIHNpOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMTY3NCwyMSArMTY2MCwyMSBAQAogCiBzdGF0aWMgdm9pZCAqc3dhcF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc3dhcCwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnB0cjsKLQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZW5kcHRyID0gc3dhcF9pbmZvICsgbnJfc3dhcGZpbGVzOworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSA9IHY7CisJaW50IHR5cGU7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXB0ciA9IHN3YXBfaW5mbzsKLQllbHNlIHsKLQkJcHRyID0gdjsKLQkJcHRyKys7Ci0JfQorCQl0eXBlID0gMDsKKwllbHNlCisJCXR5cGUgPSBzaS0+dHlwZSArIDE7CiAKLQlmb3IgKDsgcHRyIDwgZW5kcHRyOyBwdHIrKykgewotCQlpZiAoIShwdHItPmZsYWdzICYgU1dQX1VTRUQpIHx8ICFwdHItPnN3YXBfbWFwKQorCWZvciAoOyB0eXBlIDwgbnJfc3dhcGZpbGVzOyB0eXBlKyspIHsKKwkJc21wX3JtYigpOwkvKiByZWFkIG5yX3N3YXBmaWxlcyBiZWZvcmUgc3dhcF9pbmZvW3R5cGVdICovCisJCXNpID0gc3dhcF9pbmZvW3R5cGVdOworCQlpZiAoIShzaS0+ZmxhZ3MgJiBTV1BfVVNFRCkgfHwgIXNpLT5zd2FwX21hcCkKIAkJCWNvbnRpbnVlOwogCQkrKypwb3M7Ci0JCXJldHVybiBwdHI7CisJCXJldHVybiBzaTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTE3MDEsMjQgKzE2ODcsMjQgQEAKIAogc3RhdGljIGludCBzd2FwX3Nob3coc3RydWN0IHNlcV9maWxlICpzd2FwLCB2b2lkICp2KQogewotCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwdHIgPSB2OworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSA9IHY7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IGxlbjsKIAotCWlmIChwdHIgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJaWYgKHNpID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzd2FwLCJGaWxlbmFtZVx0XHRcdFx0VHlwZVx0XHRTaXplXHRVc2VkXHRQcmlvcml0eVxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCWZpbGUgPSBwdHItPnN3YXBfZmlsZTsKKwlmaWxlID0gc2ktPnN3YXBfZmlsZTsKIAlsZW4gPSBzZXFfcGF0aChzd2FwLCAmZmlsZS0+Zl9wYXRoLCAiIFx0XG5cXCIpOwogCXNlcV9wcmludGYoc3dhcCwgIiUqcyVzXHQldVx0JXVcdCVkXG4iLAogCQkJbGVuIDwgNDAgPyA0MCAtIGxlbiA6IDEsICIgIiwKIAkJCVNfSVNCTEsoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSA/CiAJCQkJInBhcnRpdGlvbiIgOiAiZmlsZVx0IiwKLQkJCXB0ci0+cGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCksCi0JCQlwdHItPmludXNlX3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLAotCQkJcHRyLT5wcmlvKTsKKwkJCXNpLT5wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKKwkJCXNpLT5pbnVzZV9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKKwkJCXNpLT5wcmlvKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc2NSw3ICsxNzUxLDcgQEAKICAqLwogU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncykKIHsKLQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqIHA7CisJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnA7CiAJY2hhciAqbmFtZSA9IE5VTEw7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IE5VTEw7CiAJc3RydWN0IGZpbGUgKnN3YXBfZmlsZSA9IE5VTEw7CkBAIC0xNzc5LDMwICsxNzY1LDUyIEBACiAJc2VjdG9yX3Qgc3BhbjsKIAl1bnNpZ25lZCBsb25nIG1heHBhZ2VzID0gMTsKIAl1bnNpZ25lZCBsb25nIHN3YXBmaWxlcGFnZXM7Ci0JdW5zaWduZWQgc2hvcnQgKnN3YXBfbWFwID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpzd2FwX21hcCA9IE5VTEw7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCWludCBkaWRfZG93biA9IDA7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CisKKwlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCiAJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwotCXAgPSBzd2FwX2luZm87Ci0JZm9yICh0eXBlID0gMCA7IHR5cGUgPCBucl9zd2FwZmlsZXMgOyB0eXBlKysscCsrKQotCQlpZiAoIShwLT5mbGFncyAmIFNXUF9VU0VEKSkKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgbnJfc3dhcGZpbGVzOyB0eXBlKyspIHsKKwkJaWYgKCEoc3dhcF9pbmZvW3R5cGVdLT5mbGFncyAmIFNXUF9VU0VEKSkKIAkJCWJyZWFrOworCX0KIAllcnJvciA9IC1FUEVSTTsKIAlpZiAodHlwZSA+PSBNQVhfU1dBUEZJTEVTKSB7CiAJCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworCQlrZnJlZShwKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmICh0eXBlID49IG5yX3N3YXBmaWxlcykKLQkJbnJfc3dhcGZpbGVzID0gdHlwZSsxOwotCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+ZXh0ZW50X2xpc3QpOworCWlmICh0eXBlID49IG5yX3N3YXBmaWxlcykgeworCQlwLT50eXBlID0gdHlwZTsKKwkJc3dhcF9pbmZvW3R5cGVdID0gcDsKKwkJLyoKKwkJICogV3JpdGUgc3dhcF9pbmZvW3R5cGVdIGJlZm9yZSBucl9zd2FwZmlsZXMsIGluIGNhc2UgYQorCQkgKiByYWNpbmcgcHJvY2ZzIHN3YXBfc3RhcnQoKSBvciBzd2FwX25leHQoKSBpcyByZWFkaW5nIHRoZW0uCisJCSAqIChXZSBuZXZlciBzaHJpbmsgbnJfc3dhcGZpbGVzLCB3ZSBuZXZlciBmcmVlIHRoaXMgZW50cnkuKQorCQkgKi8KKwkJc21wX3dtYigpOworCQlucl9zd2FwZmlsZXMrKzsKKwl9IGVsc2UgeworCQlrZnJlZShwKTsKKwkJcCA9IHN3YXBfaW5mb1t0eXBlXTsKKwkJLyoKKwkJICogRG8gbm90IG1lbXNldCB0aGlzIGVudHJ5OiBhIHJhY2luZyBwcm9jZnMgc3dhcF9uZXh0KCkKKwkJICogd291bGQgYmUgcmVseWluZyBvbiBwLT50eXBlIHRvIHJlbWFpbiB2YWxpZC4KKwkJICovCisJfQorCUlOSVRfTElTVF9IRUFEKCZwLT5maXJzdF9zd2FwX2V4dGVudC5saXN0KTsKIAlwLT5mbGFncyA9IFNXUF9VU0VEOwogCXAtPm5leHQgPSAtMTsKIAlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKKwogCW5hbWUgPSBnZXRuYW1lKHNwZWNpYWxmaWxlKTsKIAllcnJvciA9IFBUUl9FUlIobmFtZSk7CiAJaWYgKElTX0VSUihuYW1lKSkgewpAQCAtMTgyMiw3ICsxODMwLDcgQEAKIAogCWVycm9yID0gLUVCVVNZOwogCWZvciAoaSA9IDA7IGkgPCBucl9zd2FwZmlsZXM7IGkrKykgewotCQlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcSA9ICZzd2FwX2luZm9baV07CisJCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpxID0gc3dhcF9pbmZvW2ldOwogCiAJCWlmIChpID09IHR5cGUgfHwgIXEtPnN3YXBfZmlsZSkKIAkJCWNvbnRpbnVlOwpAQCAtMTg5Nyw2ICsxOTA1LDcgQEAKIAogCXAtPmxvd2VzdF9iaXQgID0gMTsKIAlwLT5jbHVzdGVyX25leHQgPSAxOworCXAtPmNsdXN0ZXJfbnIgPSAwOwogCiAJLyoKIAkgKiBGaW5kIG91dCBob3cgbWFueSBwYWdlcyBhcmUgYWxsb3dlZCBmb3IgYSBzaW5nbGUgc3dhcApAQCAtMTkzMiwxMyArMTk0MSwxMyBAQAogCQlnb3RvIGJhZF9zd2FwOwogCiAJLyogT0ssIHNldCB1cCB0aGUgc3dhcCBtYXAgYW5kIGFwcGx5IHRoZSBiYWQgYmxvY2sgbGlzdCAqLwotCXN3YXBfbWFwID0gdm1hbGxvYyhtYXhwYWdlcyAqIHNpemVvZihzaG9ydCkpOworCXN3YXBfbWFwID0gdm1hbGxvYyhtYXhwYWdlcyk7CiAJaWYgKCFzd2FwX21hcCkgewogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gYmFkX3N3YXA7CiAJfQogCi0JbWVtc2V0KHN3YXBfbWFwLCAwLCBtYXhwYWdlcyAqIHNpemVvZihzaG9ydCkpOworCW1lbXNldChzd2FwX21hcCwgMCwgbWF4cGFnZXMpOwogCWZvciAoaSA9IDA7IGkgPCBzd2FwX2hlYWRlci0+aW5mby5ucl9iYWRwYWdlczsgaSsrKSB7CiAJCWludCBwYWdlX25yID0gc3dhcF9oZWFkZXItPmluZm8uYmFkcGFnZXNbaV07CiAJCWlmIChwYWdlX25yIDw9IDAgfHwgcGFnZV9uciA+PSBzd2FwX2hlYWRlci0+aW5mby5sYXN0X3BhZ2UpIHsKQEAgLTIwMDMsMTggKzIwMTIsMTYgQEAKIAogCS8qIGluc2VydCBzd2FwIHNwYWNlIGludG8gc3dhcF9saXN0OiAqLwogCXByZXYgPSAtMTsKLQlmb3IgKGkgPSBzd2FwX2xpc3QuaGVhZDsgaSA+PSAwOyBpID0gc3dhcF9pbmZvW2ldLm5leHQpIHsKLQkJaWYgKHAtPnByaW8gPj0gc3dhcF9pbmZvW2ldLnByaW8pIHsKKwlmb3IgKGkgPSBzd2FwX2xpc3QuaGVhZDsgaSA+PSAwOyBpID0gc3dhcF9pbmZvW2ldLT5uZXh0KSB7CisJCWlmIChwLT5wcmlvID49IHN3YXBfaW5mb1tpXS0+cHJpbykKIAkJCWJyZWFrOwotCQl9CiAJCXByZXYgPSBpOwogCX0KIAlwLT5uZXh0ID0gaTsKLQlpZiAocHJldiA8IDApIHsKLQkJc3dhcF9saXN0LmhlYWQgPSBzd2FwX2xpc3QubmV4dCA9IHAgLSBzd2FwX2luZm87Ci0JfSBlbHNlIHsKLQkJc3dhcF9pbmZvW3ByZXZdLm5leHQgPSBwIC0gc3dhcF9pbmZvOwotCX0KKwlpZiAocHJldiA8IDApCisJCXN3YXBfbGlzdC5oZWFkID0gc3dhcF9saXN0Lm5leHQgPSB0eXBlOworCWVsc2UKKwkJc3dhcF9pbmZvW3ByZXZdLT5uZXh0ID0gdHlwZTsKIAlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAltdXRleF91bmxvY2soJnN3YXBvbl9tdXRleCk7CiAJZXJyb3IgPSAwOwpAQCAtMjA1MSwxNSArMjA1OCwxNSBAQAogCiB2b2lkIHNpX3N3YXBpbmZvKHN0cnVjdCBzeXNpbmZvICp2YWwpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHR5cGU7CiAJdW5zaWduZWQgbG9uZyBucl90b19iZV91bnVzZWQgPSAwOwogCiAJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBucl9zd2FwZmlsZXM7IGkrKykgewotCQlpZiAoIShzd2FwX2luZm9baV0uZmxhZ3MgJiBTV1BfVVNFRCkgfHwKLQkJICAgICAoc3dhcF9pbmZvW2ldLmZsYWdzICYgU1dQX1dSSVRFT0spKQotCQkJY29udGludWU7Ci0JCW5yX3RvX2JlX3VudXNlZCArPSBzd2FwX2luZm9baV0uaW51c2VfcGFnZXM7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IG5yX3N3YXBmaWxlczsgdHlwZSsrKSB7CisJCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSA9IHN3YXBfaW5mb1t0eXBlXTsKKworCQlpZiAoKHNpLT5mbGFncyAmIFNXUF9VU0VEKSAmJiAhKHNpLT5mbGFncyAmIFNXUF9XUklURU9LKSkKKwkJCW5yX3RvX2JlX3VudXNlZCArPSBzaS0+aW51c2VfcGFnZXM7CiAJfQogCXZhbC0+ZnJlZXN3YXAgPSBucl9zd2FwX3BhZ2VzICsgbnJfdG9fYmVfdW51c2VkOwogCXZhbC0+dG90YWxzd2FwID0gdG90YWxfc3dhcF9wYWdlcyArIG5yX3RvX2JlX3VudXNlZDsKQEAgLTIwNjksMTAxICsyMDc2LDEwNyBAQAogLyoKICAqIFZlcmlmeSB0aGF0IGEgc3dhcCBlbnRyeSBpcyB2YWxpZCBhbmQgaW5jcmVtZW50IGl0cyBzd2FwIG1hcCBjb3VudC4KICAqCi0gKiBOb3RlOiBpZiBzd2FwX21hcFtdIHJlYWNoZXMgU1dBUF9NQVBfTUFYIHRoZSBlbnRyaWVzIGFyZSB0cmVhdGVkIGFzCi0gKiAicGVybWFuZW50IiwgYnV0IHdpbGwgYmUgcmVjbGFpbWVkIGJ5IHRoZSBuZXh0IHN3YXBvZmYuCiAgKiBSZXR1cm5zIGVycm9yIGNvZGUgaW4gZm9sbG93aW5nIGNhc2UuCiAgKiAtIHN1Y2Nlc3MgLT4gMAogICogLSBzd3BfZW50cnkgaXMgaW52YWxpZCAtPiBFSU5WQUwKICAqIC0gc3dwX2VudHJ5IGlzIG1pZ3JhdGlvbiBlbnRyeSAtPiBFSU5WQUwKICAqIC0gc3dhcC1jYWNoZSByZWZlcmVuY2UgaXMgcmVxdWVzdGVkIGJ1dCB0aGVyZSBpcyBhbHJlYWR5IG9uZS4gLT4gRUVYSVNUCiAgKiAtIHN3YXAtY2FjaGUgcmVmZXJlbmNlIGlzIHJlcXVlc3RlZCBidXQgdGhlIGVudHJ5IGlzIG5vdCB1c2VkLiAtPiBFTk9FTlQKKyAqIC0gc3dhcC1tYXBwZWQgcmVmZXJlbmNlIHJlcXVlc3RlZCBidXQgbmVlZHMgY29udGludWVkIHN3YXAgY291bnQuIC0+IEVOT01FTQogICovCi1zdGF0aWMgaW50IF9fc3dhcF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgY2FjaGUpCitzdGF0aWMgaW50IF9fc3dhcF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QgZW50cnksIHVuc2lnbmVkIGNoYXIgdXNhZ2UpCiB7Ci0Jc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiBwOworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB0eXBlOwotCWludCByZXN1bHQgPSAtRUlOVkFMOwotCWludCBjb3VudDsKLQlib29sIGhhc19jYWNoZTsKKwl1bnNpZ25lZCBjaGFyIGNvdW50OworCXVuc2lnbmVkIGNoYXIgaGFzX2NhY2hlOworCWludCBlcnIgPSAtRUlOVkFMOwogCiAJaWYgKG5vbl9zd2FwX2VudHJ5KGVudHJ5KSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJdHlwZSA9IHN3cF90eXBlKGVudHJ5KTsKIAlpZiAodHlwZSA+PSBucl9zd2FwZmlsZXMpCiAJCWdvdG8gYmFkX2ZpbGU7Ci0JcCA9IHR5cGUgKyBzd2FwX2luZm87CisJcCA9IHN3YXBfaW5mb1t0eXBlXTsKIAlvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTsKIAogCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKLQogCWlmICh1bmxpa2VseShvZmZzZXQgPj0gcC0+bWF4KSkKIAkJZ290byB1bmxvY2tfb3V0OwogCi0JY291bnQgPSBzd2FwX2NvdW50KHAtPnN3YXBfbWFwW29mZnNldF0pOwotCWhhc19jYWNoZSA9IHN3YXBfaGFzX2NhY2hlKHAtPnN3YXBfbWFwW29mZnNldF0pOworCWNvdW50ID0gcC0+c3dhcF9tYXBbb2Zmc2V0XTsKKwloYXNfY2FjaGUgPSBjb3VudCAmIFNXQVBfSEFTX0NBQ0hFOworCWNvdW50ICY9IH5TV0FQX0hBU19DQUNIRTsKKwllcnIgPSAwOwogCi0JaWYgKGNhY2hlID09IFNXQVBfQ0FDSEUpIHsgLyogY2FsbGVkIGZvciBzd2FwY2FjaGUvc3dhcGluLXJlYWRhaGVhZCAqLworCWlmICh1c2FnZSA9PSBTV0FQX0hBU19DQUNIRSkgewogCiAJCS8qIHNldCBTV0FQX0hBU19DQUNIRSBpZiB0aGVyZSBpcyBubyBjYWNoZSBhbmQgZW50cnkgaXMgdXNlZCAqLwotCQlpZiAoIWhhc19jYWNoZSAmJiBjb3VudCkgewotCQkJcC0+c3dhcF9tYXBbb2Zmc2V0XSA9IGVuY29kZV9zd2FwbWFwKGNvdW50LCB0cnVlKTsKLQkJCXJlc3VsdCA9IDA7Ci0JCX0gZWxzZSBpZiAoaGFzX2NhY2hlKSAvKiBzb21lb25lIGFkZGVkIGNhY2hlICovCi0JCQlyZXN1bHQgPSAtRUVYSVNUOwotCQllbHNlIGlmICghY291bnQpIC8qIG5vIHVzZXJzICovCi0JCQlyZXN1bHQgPSAtRU5PRU5UOworCQlpZiAoIWhhc19jYWNoZSAmJiBjb3VudCkKKwkJCWhhc19jYWNoZSA9IFNXQVBfSEFTX0NBQ0hFOworCQllbHNlIGlmIChoYXNfY2FjaGUpCQkvKiBzb21lb25lIGVsc2UgYWRkZWQgY2FjaGUgKi8KKwkJCWVyciA9IC1FRVhJU1Q7CisJCWVsc2UJCQkJLyogbm8gdXNlcnMgcmVtYWluaW5nICovCisJCQllcnIgPSAtRU5PRU5UOwogCiAJfSBlbHNlIGlmIChjb3VudCB8fCBoYXNfY2FjaGUpIHsKLQkJaWYgKGNvdW50IDwgU1dBUF9NQVBfTUFYIC0gMSkgewotCQkJcC0+c3dhcF9tYXBbb2Zmc2V0XSA9IGVuY29kZV9zd2FwbWFwKGNvdW50ICsgMSwKLQkJCQkJCQkgICAgIGhhc19jYWNoZSk7Ci0JCQlyZXN1bHQgPSAwOwotCQl9IGVsc2UgaWYgKGNvdW50IDw9IFNXQVBfTUFQX01BWCkgewotCQkJaWYgKHN3YXBfb3ZlcmZsb3crKyA8IDUpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAic3dhcF9kdXA6IHN3YXAgZW50cnkgb3ZlcmZsb3dcbiIpOwotCQkJcC0+c3dhcF9tYXBbb2Zmc2V0XSA9IGVuY29kZV9zd2FwbWFwKFNXQVBfTUFQX01BWCwKLQkJCQkJCQkgICAgICBoYXNfY2FjaGUpOwotCQkJcmVzdWx0ID0gMDsKLQkJfQorCisJCWlmICgoY291bnQgJiB+Q09VTlRfQ09OVElOVUVEKSA8IFNXQVBfTUFQX01BWCkKKwkJCWNvdW50ICs9IHVzYWdlOworCQllbHNlIGlmICgoY291bnQgJiB+Q09VTlRfQ09OVElOVUVEKSA+IFNXQVBfTUFQX01BWCkKKwkJCWVyciA9IC1FSU5WQUw7CisJCWVsc2UgaWYgKHN3YXBfY291bnRfY29udGludWVkKHAsIG9mZnNldCwgY291bnQpKQorCQkJY291bnQgPSBDT1VOVF9DT05USU5VRUQ7CisJCWVsc2UKKwkJCWVyciA9IC1FTk9NRU07CiAJfSBlbHNlCi0JCXJlc3VsdCA9IC1FTk9FTlQ7IC8qIHVudXNlZCBzd2FwIGVudHJ5ICovCisJCWVyciA9IC1FTk9FTlQ7CQkJLyogdW51c2VkIHN3YXAgZW50cnkgKi8KKworCXAtPnN3YXBfbWFwW29mZnNldF0gPSBjb3VudCB8IGhhc19jYWNoZTsKKwogdW5sb2NrX291dDoKIAlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIG91dDoKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBlcnI7CiAKIGJhZF9maWxlOgogCXByaW50ayhLRVJOX0VSUiAic3dhcF9kdXA6ICVzJTA4bHhcbiIsIEJhZF9maWxlLCBlbnRyeS52YWwpOwogCWdvdG8gb3V0OwogfQorCisvKgorICogSGVscCBzd2Fwb2ZmIGJ5IG5vdGluZyB0aGF0IHN3YXAgZW50cnkgYmVsb25ncyB0byBzaG1lbS90bXBmcworICogKGluIHdoaWNoIGNhc2UgaXRzIHJlZmVyZW5jZSBjb3VudCBpcyBuZXZlciBpbmNyZW1lbnRlZCkuCisgKi8KK3ZvaWQgc3dhcF9zaG1lbV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSkKK3sKKwlfX3N3YXBfZHVwbGljYXRlKGVudHJ5LCBTV0FQX01BUF9TSE1FTSk7Cit9CisKIC8qCiAgKiBpbmNyZWFzZSByZWZlcmVuY2UgY291bnQgb2Ygc3dhcCBlbnRyeSBieSAxLgogICovCi12b2lkIHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90IGVudHJ5KQoraW50IHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90IGVudHJ5KQogewotCV9fc3dhcF9kdXBsaWNhdGUoZW50cnksIFNXQVBfTUFQKTsKKwlpbnQgZXJyID0gMDsKKworCXdoaWxlICghZXJyICYmIF9fc3dhcF9kdXBsaWNhdGUoZW50cnksIDEpID09IC1FTk9NRU0pCisJCWVyciA9IGFkZF9zd2FwX2NvdW50X2NvbnRpbnVhdGlvbihlbnRyeSwgR0ZQX0FUT01JQyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKICAqIEBlbnRyeTogc3dhcCBlbnRyeSBmb3Igd2hpY2ggd2UgYWxsb2NhdGUgc3dhcCBjYWNoZS4KICAqCi0gKiBDYWxsZWQgd2hlbiBhbGxvY2F0aW5nIHN3YXAgY2FjaGUgZm9yIGV4aXNpbmcgc3dhcCBlbnRyeSwKKyAqIENhbGxlZCB3aGVuIGFsbG9jYXRpbmcgc3dhcCBjYWNoZSBmb3IgZXhpc3Rpbmcgc3dhcCBlbnRyeSwKICAqIFRoaXMgY2FuIHJldHVybiBlcnJvciBjb2Rlcy4gUmV0dXJucyAwIGF0IHN1Y2Nlc3MuCiAgKiAtRUJVU1kgbWVhbnMgdGhlcmUgaXMgYSBzd2FwIGNhY2hlLgogICogTm90ZTogcmV0dXJuIGNvZGUgaXMgZGlmZmVyZW50IGZyb20gc3dhcF9kdXBsaWNhdGUoKS4KICAqLwogaW50IHN3YXBjYWNoZV9wcmVwYXJlKHN3cF9lbnRyeV90IGVudHJ5KQogewotCXJldHVybiBfX3N3YXBfZHVwbGljYXRlKGVudHJ5LCBTV0FQX0NBQ0hFKTsKLX0KLQotCi1zdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqCi1nZXRfc3dhcF9pbmZvX3N0cnVjdCh1bnNpZ25lZCB0eXBlKQotewotCXJldHVybiAmc3dhcF9pbmZvW3R5cGVdOworCXJldHVybiBfX3N3YXBfZHVwbGljYXRlKGVudHJ5LCBTV0FQX0hBU19DQUNIRSk7CiB9CiAKIC8qCkBAIC0yMTgxLDcgKzIxOTQsNyBAQAogCWlmICghb3VyX3BhZ2VfY2x1c3RlcikJLyogbm8gcmVhZGFoZWFkICovCiAJCXJldHVybiAwOwogCi0Jc2kgPSAmc3dhcF9pbmZvW3N3cF90eXBlKGVudHJ5KV07CisJc2kgPSBzd2FwX2luZm9bc3dwX3R5cGUoZW50cnkpXTsKIAl0YXJnZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTsKIAliYXNlID0gKHRhcmdldCA+PiBvdXJfcGFnZV9jbHVzdGVyKSA8PCBvdXJfcGFnZV9jbHVzdGVyOwogCWVuZCA9IGJhc2UgKyAoMSA8PCBvdXJfcGFnZV9jbHVzdGVyKTsKQEAgLTIyMTcsMyArMjIzMCwyMTkgQEAKIAkqb2Zmc2V0ID0gKyt0b2ZmOwogCXJldHVybiBucl9wYWdlcz8gKytucl9wYWdlczogMDsKIH0KKworLyoKKyAqIGFkZF9zd2FwX2NvdW50X2NvbnRpbnVhdGlvbiAtIGNhbGxlZCB3aGVuIGEgc3dhcCBjb3VudCBpcyBkdXBsaWNhdGVkCisgKiBiZXlvbmQgU1dBUF9NQVBfTUFYLCBpdCBhbGxvY2F0ZXMgYSBuZXcgcGFnZSBhbmQgbGlua3MgdGhhdCB0byB0aGUgZW50cnkncworICogcGFnZSBvZiB0aGUgb3JpZ2luYWwgdm1hbGxvYydlZCBzd2FwX21hcCwgdG8gaG9sZCB0aGUgY29udGludWF0aW9uIGNvdW50CisgKiAoZm9yIHRoYXQgZW50cnkgYW5kIGZvciBpdHMgbmVpZ2hib3VyaW5nIFBBR0VfU0laRSBzd2FwIGVudHJpZXMpLiAgQ2FsbGVkCisgKiBhZ2FpbiB3aGVuIGNvdW50IGlzIGR1cGxpY2F0ZWQgYmV5b25kIFNXQVBfTUFQX01BWCAqIFNXQVBfQ09OVF9NQVgsIGV0Yy4KKyAqCisgKiBUaGVzZSBjb250aW51YXRpb24gcGFnZXMgYXJlIHNlbGRvbSByZWZlcmVuY2VkOiB0aGUgY29tbW9uIHBhdGhzIGFsbCB3b3JrCisgKiBvbiB0aGUgb3JpZ2luYWwgc3dhcF9tYXAsIG9ubHkgcmVmZXJyaW5nIHRvIGEgY29udGludWF0aW9uIHBhZ2Ugd2hlbiB0aGUKKyAqIGxvdyAiZGlnaXQiIG9mIGEgY291bnQgaXMgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQgdGhyb3VnaCBTV0FQX01BUF9NQVguCisgKgorICogYWRkX3N3YXBfY291bnRfY29udGludWF0aW9uKCwgR0ZQX0FUT01JQykgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nCisgKiBwYWdlIHRhYmxlIGxvY2tzOyBpZiBpdCBmYWlscywgYWRkX3N3YXBfY291bnRfY29udGludWF0aW9uKCwgR0ZQX0tFUk5FTCkKKyAqIGNhbiBiZSBjYWxsZWQgYWZ0ZXIgZHJvcHBpbmcgbG9ja3MuCisgKi8KK2ludCBhZGRfc3dhcF9jb3VudF9jb250aW51YXRpb24oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTsKKwlzdHJ1Y3QgcGFnZSAqaGVhZDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqbGlzdF9wYWdlOworCXBnb2ZmX3Qgb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgY291bnQ7CisKKwkvKgorCSAqIFdoZW4gZGVidWdnaW5nLCBpdCdzIGVhc2llciB0byB1c2UgX19HRlBfWkVSTyBoZXJlOyBidXQgaXQncyBiZXR0ZXIKKwkgKiBmb3IgbGF0ZW5jeSBub3QgdG8gemVybyBhIHBhZ2Ugd2hpbGUgR0ZQX0FUT01JQyBhbmQgaG9sZGluZyBsb2Nrcy4KKwkgKi8KKwlwYWdlID0gYWxsb2NfcGFnZShnZnBfbWFzayB8IF9fR0ZQX0hJR0hNRU0pOworCisJc2kgPSBzd2FwX2luZm9fZ2V0KGVudHJ5KTsKKwlpZiAoIXNpKSB7CisJCS8qCisJCSAqIEFuIGFjY2VwdGFibGUgcmFjZSBoYXMgb2NjdXJyZWQgc2luY2UgdGhlIGZhaWxpbmcKKwkJICogX19zd2FwX2R1cGxpY2F0ZSgpOiB0aGUgc3dhcCBlbnRyeSBoYXMgYmVlbiBmcmVlZCwKKwkJICogcGVyaGFwcyBldmVuIHRoZSB3aG9sZSBzd2FwX21hcCBjbGVhcmVkIGZvciBzd2Fwb2ZmLgorCQkgKi8KKwkJZ290byBvdXRlcjsKKwl9CisKKwlvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTsKKwljb3VudCA9IHNpLT5zd2FwX21hcFtvZmZzZXRdICYgflNXQVBfSEFTX0NBQ0hFOworCisJaWYgKChjb3VudCAmIH5DT1VOVF9DT05USU5VRUQpICE9IFNXQVBfTUFQX01BWCkgeworCQkvKgorCQkgKiBUaGUgaGlnaGVyIHRoZSBzd2FwIGNvdW50LCB0aGUgbW9yZSBsaWtlbHkgaXQgaXMgdGhhdCB0YXNrcworCQkgKiB3aWxsIHJhY2UgdG8gYWRkIHN3YXAgY291bnQgY29udGludWF0aW9uOiB3ZSBuZWVkIHRvIGF2b2lkCisJCSAqIG92ZXItcHJvdmlzaW9uaW5nLgorCQkgKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFwYWdlKSB7CisJCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIFdlIGFyZSBmb3J0dW5hdGUgdGhhdCBhbHRob3VnaCB2bWFsbG9jX3RvX3BhZ2UgdXNlcyBwdGVfb2Zmc2V0X21hcCwKKwkgKiBubyBhcmNoaXRlY3R1cmUgaXMgdXNpbmcgaGlnaG1lbSBwYWdlcyBmb3Iga2VybmVsIHBhZ2V0YWJsZXM6IHNvIGl0CisJICogd2lsbCBub3QgY29ycnVwdCB0aGUgR0ZQX0FUT01JQyBjYWxsZXIncyBhdG9taWMgcGFnZXRhYmxlIGttYXBzLgorCSAqLworCWhlYWQgPSB2bWFsbG9jX3RvX3BhZ2Uoc2ktPnN3YXBfbWFwICsgb2Zmc2V0KTsKKwlvZmZzZXQgJj0gflBBR0VfTUFTSzsKKworCS8qCisJICogUGFnZSBhbGxvY2F0aW9uIGRvZXMgbm90IGluaXRpYWxpemUgdGhlIHBhZ2UncyBscnUgZmllbGQsCisJICogYnV0IGl0IGRvZXMgYWx3YXlzIHJlc2V0IGl0cyBwcml2YXRlIGZpZWxkLgorCSAqLworCWlmICghcGFnZV9wcml2YXRlKGhlYWQpKSB7CisJCUJVR19PTihjb3VudCAmIENPVU5UX0NPTlRJTlVFRCk7CisJCUlOSVRfTElTVF9IRUFEKCZoZWFkLT5scnUpOworCQlzZXRfcGFnZV9wcml2YXRlKGhlYWQsIFNXUF9DT05USU5VRUQpOworCQlzaS0+ZmxhZ3MgfD0gU1dQX0NPTlRJTlVFRDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpc3RfcGFnZSwgJmhlYWQtPmxydSwgbHJ1KSB7CisJCXVuc2lnbmVkIGNoYXIgKm1hcDsKKworCQkvKgorCQkgKiBJZiB0aGUgcHJldmlvdXMgbWFwIHNhaWQgbm8gY29udGludWF0aW9uLCBidXQgd2UndmUgZm91bmQKKwkJICogYSBjb250aW51YXRpb24gcGFnZSwgZnJlZSBvdXIgYWxsb2NhdGlvbiBhbmQgdXNlIHRoaXMgb25lLgorCQkgKi8KKwkJaWYgKCEoY291bnQgJiBDT1VOVF9DT05USU5VRUQpKQorCQkJZ290byBvdXQ7CisKKwkJbWFwID0ga21hcF9hdG9taWMobGlzdF9wYWdlLCBLTV9VU0VSMCkgKyBvZmZzZXQ7CisJCWNvdW50ID0gKm1hcDsKKwkJa3VubWFwX2F0b21pYyhtYXAsIEtNX1VTRVIwKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGNvbnRpbnVhdGlvbiBjb3VudCBub3cgaGFzIHNvbWUgc3BhY2UgaW4gaXQsCisJCSAqIGZyZWUgb3VyIGFsbG9jYXRpb24gYW5kIHVzZSB0aGlzIG9uZS4KKwkJICovCisJCWlmICgoY291bnQgJiB+Q09VTlRfQ09OVElOVUVEKSAhPSBTV0FQX0NPTlRfTUFYKQorCQkJZ290byBvdXQ7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmaGVhZC0+bHJ1KTsKKwlwYWdlID0gTlVMTDsJCQkvKiBub3cgaXQncyBhdHRhY2hlZCwgZG9uJ3QgZnJlZSBpdCAqLworb3V0OgorCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworb3V0ZXI6CisJaWYgKHBhZ2UpCisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCXJldHVybiAwOworfQorCisvKgorICogc3dhcF9jb3VudF9jb250aW51ZWQgLSB3aGVuIHRoZSBvcmlnaW5hbCBzd2FwX21hcCBjb3VudCBpcyBpbmNyZW1lbnRlZAorICogZnJvbSBTV0FQX01BUF9NQVgsIGNoZWNrIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBjb250aW51YXRpb24gcGFnZSB0byBjYXJyeQorICogaW50bywgY2FycnkgaWYgc28sIG9yIGVsc2UgZmFpbCB1bnRpbCBhIG5ldyBjb250aW51YXRpb24gcGFnZSBpcyBhbGxvY2F0ZWQ7CisgKiB3aGVuIHRoZSBvcmlnaW5hbCBzd2FwX21hcCBjb3VudCBpcyBkZWNyZW1lbnRlZCBmcm9tIDAgd2l0aCBjb250aW51YXRpb24sCisgKiBib3Jyb3cgZnJvbSB0aGUgY29udGludWF0aW9uIGFuZCByZXBvcnQgd2hldGhlciBpdCBzdGlsbCBob2xkcyBtb3JlLgorICogQ2FsbGVkIHdoaWxlIF9fc3dhcF9kdXBsaWNhdGUoKSBvciBzd2FwX2VudHJ5X2ZyZWUoKSBob2xkcyBzd2FwX2xvY2suCisgKi8KK3N0YXRpYyBib29sIHN3YXBfY291bnRfY29udGludWVkKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKKwkJCQkgcGdvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgY291bnQpCit7CisJc3RydWN0IHBhZ2UgKmhlYWQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgY2hhciAqbWFwOworCisJaGVhZCA9IHZtYWxsb2NfdG9fcGFnZShzaS0+c3dhcF9tYXAgKyBvZmZzZXQpOworCWlmIChwYWdlX3ByaXZhdGUoaGVhZCkgIT0gU1dQX0NPTlRJTlVFRCkgeworCQlCVUdfT04oY291bnQgJiBDT1VOVF9DT05USU5VRUQpOworCQlyZXR1cm4gZmFsc2U7CQkvKiBuZWVkIHRvIGFkZCBjb3VudCBjb250aW51YXRpb24gKi8KKwl9CisKKwlvZmZzZXQgJj0gflBBR0VfTUFTSzsKKwlwYWdlID0gbGlzdF9lbnRyeShoZWFkLT5scnUubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7CisJbWFwID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApICsgb2Zmc2V0OworCisJaWYgKGNvdW50ID09IFNXQVBfTUFQX01BWCkJLyogaW5pdGlhbCBpbmNyZW1lbnQgZnJvbSBzd2FwX21hcCAqLworCQlnb3RvIGluaXRfbWFwOwkJLyoganVtcCBvdmVyIFNXQVBfQ09OVF9NQVggY2hlY2tzICovCisKKwlpZiAoY291bnQgPT0gKFNXQVBfTUFQX01BWCB8IENPVU5UX0NPTlRJTlVFRCkpIHsgLyogaW5jcmVtZW50aW5nICovCisJCS8qCisJCSAqIFRoaW5rIG9mIGhvdyB5b3UgYWRkIDEgdG8gOTk5CisJCSAqLworCQl3aGlsZSAoKm1hcCA9PSAoU1dBUF9DT05UX01BWCB8IENPVU5UX0NPTlRJTlVFRCkpIHsKKwkJCWt1bm1hcF9hdG9taWMobWFwLCBLTV9VU0VSMCk7CisJCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlLT5scnUubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7CisJCQlCVUdfT04ocGFnZSA9PSBoZWFkKTsKKwkJCW1hcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKSArIG9mZnNldDsKKwkJfQorCQlpZiAoKm1hcCA9PSBTV0FQX0NPTlRfTUFYKSB7CisJCQlrdW5tYXBfYXRvbWljKG1hcCwgS01fVVNFUjApOworCQkJcGFnZSA9IGxpc3RfZW50cnkocGFnZS0+bHJ1Lm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOworCQkJaWYgKHBhZ2UgPT0gaGVhZCkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIGFkZCBjb3VudCBjb250aW51YXRpb24gKi8KKwkJCW1hcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKSArIG9mZnNldDsKK2luaXRfbWFwOgkJKm1hcCA9IDA7CQkvKiB3ZSBkaWRuJ3QgemVybyB0aGUgcGFnZSAqLworCQl9CisJCSptYXAgKz0gMTsKKwkJa3VubWFwX2F0b21pYyhtYXAsIEtNX1VTRVIwKTsKKwkJcGFnZSA9IGxpc3RfZW50cnkocGFnZS0+bHJ1LnByZXYsIHN0cnVjdCBwYWdlLCBscnUpOworCQl3aGlsZSAocGFnZSAhPSBoZWFkKSB7CisJCQltYXAgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCkgKyBvZmZzZXQ7CisJCQkqbWFwID0gQ09VTlRfQ09OVElOVUVEOworCQkJa3VubWFwX2F0b21pYyhtYXAsIEtNX1VTRVIwKTsKKwkJCXBhZ2UgPSBsaXN0X2VudHJ5KHBhZ2UtPmxydS5wcmV2LCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsJCQkvKiBpbmNyZW1lbnRlZCAqLworCisJfSBlbHNlIHsJCQkJLyogZGVjcmVtZW50aW5nICovCisJCS8qCisJCSAqIFRoaW5rIG9mIGhvdyB5b3Ugc3VidHJhY3QgMSBmcm9tIDEwMDAKKwkJICovCisJCUJVR19PTihjb3VudCAhPSBDT1VOVF9DT05USU5VRUQpOworCQl3aGlsZSAoKm1hcCA9PSBDT1VOVF9DT05USU5VRUQpIHsKKwkJCWt1bm1hcF9hdG9taWMobWFwLCBLTV9VU0VSMCk7CisJCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlLT5scnUubmV4dCwgc3RydWN0IHBhZ2UsIGxydSk7CisJCQlCVUdfT04ocGFnZSA9PSBoZWFkKTsKKwkJCW1hcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKSArIG9mZnNldDsKKwkJfQorCQlCVUdfT04oKm1hcCA9PSAwKTsKKwkJKm1hcCAtPSAxOworCQlpZiAoKm1hcCA9PSAwKQorCQkJY291bnQgPSAwOworCQlrdW5tYXBfYXRvbWljKG1hcCwgS01fVVNFUjApOworCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlLT5scnUucHJldiwgc3RydWN0IHBhZ2UsIGxydSk7CisJCXdoaWxlIChwYWdlICE9IGhlYWQpIHsKKwkJCW1hcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKSArIG9mZnNldDsKKwkJCSptYXAgPSBTV0FQX0NPTlRfTUFYIHwgY291bnQ7CisJCQljb3VudCA9IENPVU5UX0NPTlRJTlVFRDsKKwkJCWt1bm1hcF9hdG9taWMobWFwLCBLTV9VU0VSMCk7CisJCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlLT5scnUucHJldiwgc3RydWN0IHBhZ2UsIGxydSk7CisJCX0KKwkJcmV0dXJuIGNvdW50ID09IENPVU5UX0NPTlRJTlVFRDsKKwl9Cit9CisKKy8qCisgKiBmcmVlX3N3YXBfY291bnRfY29udGludWF0aW9ucyAtIHN3YXBvZmYgZnJlZSBhbGwgdGhlIGNvbnRpbnVhdGlvbiBwYWdlcworICogYXBwZW5kZWQgdG8gdGhlIHN3YXBfbWFwLCBhZnRlciBzd2FwX21hcCBpcyBxdWllc2NlZCwgYmVmb3JlIHZmcmVlJ2luZyBpdC4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9zd2FwX2NvdW50X2NvbnRpbnVhdGlvbnMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKQoreworCXBnb2ZmX3Qgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBzaS0+bWF4OyBvZmZzZXQgKz0gUEFHRV9TSVpFKSB7CisJCXN0cnVjdCBwYWdlICpoZWFkOworCQloZWFkID0gdm1hbGxvY190b19wYWdlKHNpLT5zd2FwX21hcCArIG9mZnNldCk7CisJCWlmIChwYWdlX3ByaXZhdGUoaGVhZCkpIHsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnRoaXMsICpuZXh0OworCQkJbGlzdF9mb3JfZWFjaF9zYWZlKHRoaXMsIG5leHQsICZoZWFkLT5scnUpIHsKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJCQlwYWdlID0gbGlzdF9lbnRyeSh0aGlzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKKwkJCQlsaXN0X2RlbCh0aGlzKTsKKwkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IDJjMTQ3YTcuLjM0MmRlZWUgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtMjcyLDYgKzI3Miw3IEBACiAJCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogCQkJYnJlYWs7CiAJCX0KKwkJbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCgpOwogCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwogCkBAIC0yODYsNiArMjg3LDcgQEAKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQl9CiAJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfZW5kKCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTCh0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSk7CkBAIC0zMjcsNiArMzI5LDcgQEAKIAlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwogCXdoaWxlIChuZXh0IDw9IGVuZCAmJgogCQkJcGFnZXZlY19sb29rdXAoJnB2ZWMsIG1hcHBpbmcsIG5leHQsIFBBR0VWRUNfU0laRSkpIHsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCgpOwogCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwogCQkJcGdvZmZfdCBpbmRleDsKQEAgLTM1NCw2ICszNTcsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfZW5kKCk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNDI4LDYgKzQzMiw3IEBACiAJd2hpbGUgKG5leHQgPD0gZW5kICYmICF3cmFwcGVkICYmCiAJCXBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBuZXh0LAogCQkJbWluKGVuZCAtIG5leHQsIChwZ29mZl90KVBBR0VWRUNfU0laRSAtIDEpICsgMSkpIHsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCgpOwogCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwogCQkJcGdvZmZfdCBwYWdlX2luZGV4OwpAQCAtNDc3LDYgKzQ4Miw3IEBACiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQogCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCQltZW1fY2dyb3VwX3VuY2hhcmdlX2VuZCgpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAwZjU1MWE0Li4zN2U2OTI5IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC03NjEsNyArNzYxLDcgQEAKIAlzcGluX2xvY2soJnZicS0+bG9jayk7CiAJbGlzdF9hZGQoJnZiLT5mcmVlX2xpc3QsICZ2YnEtPmZyZWUpOwogCXNwaW5fdW5sb2NrKCZ2YnEtPmxvY2spOwotCXB1dF9jcHVfdmFyKHZtYXBfY3B1X2Jsb2Nrcyk7CisJcHV0X2NwdV92YXIodm1hcF9ibG9ja19xdWV1ZSk7CiAKIAlyZXR1cm4gdmI7CiB9CkBAIC04MjYsNyArODI2LDcgQEAKIAkJfQogCQlzcGluX3VubG9jaygmdmItPmxvY2spOwogCX0KLQlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCXB1dF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFhZGRyKSB7CkBAIC0xNDExLDYgKzE0MTEsNyBAQAogewogCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBhcnJheV9zaXplLCBpOworCWdmcF90IG5lc3RlZF9nZnAgPSAoZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLKSB8IF9fR0ZQX1pFUk87CiAKIAlucl9wYWdlcyA9IChhcmVhLT5zaXplIC0gUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUOwogCWFycmF5X3NpemUgPSAobnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwpAQCAtMTQxOCwxMyArMTQxOSwxMSBAQAogCWFyZWEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAJLyogUGxlYXNlIG5vdGUgdGhhdCB0aGUgcmVjdXJzaW9uIGlzIHN0cmljdGx5IGJvdW5kZWQuICovCiAJaWYgKGFycmF5X3NpemUgPiBQQUdFX1NJWkUpIHsKLQkJcGFnZXMgPSBfX3ZtYWxsb2Nfbm9kZShhcnJheV9zaXplLCAxLCBnZnBfbWFzayB8IF9fR0ZQX1pFUk8sCisJCXBhZ2VzID0gX192bWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgMSwgbmVzdGVkX2dmcHxfX0dGUF9ISUdITUVNLAogCQkJCVBBR0VfS0VSTkVMLCBub2RlLCBjYWxsZXIpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9WUEFHRVM7CiAJfSBlbHNlIHsKLQkJcGFnZXMgPSBrbWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwKLQkJCQkoZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLKSB8IF9fR0ZQX1pFUk8sCi0JCQkJbm9kZSk7CisJCXBhZ2VzID0ga21hbGxvY19ub2RlKGFycmF5X3NpemUsIG5lc3RlZF9nZnAsIG5vZGUpOwogCX0KIAlhcmVhLT5wYWdlcyA9IHBhZ2VzOwogCWFyZWEtPmNhbGxlciA9IGNhbGxlcjsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNzc3YWY1Ny4uODg1MjA3YSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTU1LDYgKzU1LDExIEBACiAJLyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovCiAJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7CiAKKwkvKiBIb3cgbWFueSBwYWdlcyBzaHJpbmtfbGlzdCgpIHNob3VsZCByZWNsYWltICovCisJdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltOworCisJdW5zaWduZWQgbG9uZyBoaWJlcm5hdGlvbl9tb2RlOworCiAJLyogVGhpcyBjb250ZXh0J3MgR0ZQIG1hc2sgKi8KIAlnZnBfdCBnZnBfbWFzazsKIApAQCAtNjYsMTIgKzcxLDYgQEAKIAkvKiBDYW4gcGFnZXMgYmUgc3dhcHBlZCBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovCiAJaW50IG1heV9zd2FwOwogCi0JLyogVGhpcyBjb250ZXh0J3MgU1dBUF9DTFVTVEVSX01BWC4gSWYgZnJlZWluZyBtZW1vcnkgZm9yCi0JICogc3VzcGVuZCwgd2UgZWZmZWN0aXZlbHkgaWdub3JlIFNXQVBfQ0xVU1RFUl9NQVguCi0JICogSW4gdGhpcyBjb250ZXh0LCBpdCBkb2Vzbid0IG1hdHRlciB0aGF0IHdlIHNjYW4gdGhlCi0JICogd2hvbGUgbGlzdCBhdCBvbmNlLiAqLwotCWludCBzd2FwX2NsdXN0ZXJfbWF4OwotCiAJaW50IHN3YXBwaW5lc3M7CiAKIAlpbnQgYWxsX3VucmVjbGFpbWFibGU7CkBAIC0zNTgsNyArMzU3LDcgQEAKIAkgKiBzdGFsbHMgaWYgd2UgbmVlZCB0byBydW4gZ2V0X2Jsb2NrKCkuICBXZSBjb3VsZCB0ZXN0CiAJICogUGFnZVByaXZhdGUgZm9yIHRoYXQuCiAJICoKLQkgKiBJZiB0aGlzIHByb2Nlc3MgaXMgY3VycmVudGx5IGluIGdlbmVyaWNfZmlsZV93cml0ZSgpIGFnYWluc3QKKwkgKiBJZiB0aGlzIHByb2Nlc3MgaXMgY3VycmVudGx5IGluIF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZSgpIGFnYWluc3QKIAkgKiB0aGlzIHBhZ2UncyBxdWV1ZSwgd2UgY2FuIHBlcmZvcm0gd3JpdGViYWNrIGV2ZW4gaWYgdGhhdAogCSAqIHdpbGwgYmxvY2suCiAJICoKQEAgLTExMzIsNyArMTEzMSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbnJfYW5vbjsKIAkJdW5zaWduZWQgbG9uZyBucl9maWxlOwogCi0JCW5yX3Rha2VuID0gc2MtPmlzb2xhdGVfcGFnZXMoc2MtPnN3YXBfY2x1c3Rlcl9tYXgsCisJCW5yX3Rha2VuID0gc2MtPmlzb2xhdGVfcGFnZXMoU1dBUF9DTFVTVEVSX01BWCwKIAkJCSAgICAgJnBhZ2VfbGlzdCwgJm5yX3NjYW4sIHNjLT5vcmRlciwgbW9kZSwKIAkJCQl6b25lLCBzYy0+bWVtX2Nncm91cCwgMCwgZmlsZSk7CiAKQEAgLTExNjYsMTAgKzExNjUsOCBAQAogCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSVNPTEFURURfQU5PTiwgbnJfYW5vbik7CiAJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9GSUxFLCBucl9maWxlKTsKIAotCQlyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzBdICs9IGNvdW50W0xSVV9JTkFDVElWRV9BTk9OXTsKLQkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfQUNUSVZFX0FOT05dOwotCQlyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzFdICs9IGNvdW50W0xSVV9JTkFDVElWRV9GSUxFXTsKLQkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFsxXSArPSBjb3VudFtMUlVfQUNUSVZFX0ZJTEVdOworCQlyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzBdICs9IG5yX2Fub247CisJCXJlY2xhaW1fc3RhdC0+cmVjZW50X3NjYW5uZWRbMV0gKz0gbnJfZmlsZTsKIAogCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIApAQCAtMTQ2NCwyMCArMTQ2MSwyNiBAQAogCXJldHVybiBsb3c7CiB9CiAKK3N0YXRpYyBpbnQgaW5hY3RpdmVfbGlzdF9pc19sb3coc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAorCQkJCWludCBmaWxlKQoreworCWlmIChmaWxlKQorCQlyZXR1cm4gaW5hY3RpdmVfZmlsZV9pc19sb3coem9uZSwgc2MpOworCWVsc2UKKwkJcmV0dXJuIGluYWN0aXZlX2Fub25faXNfbG93KHpvbmUsIHNjKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBwcmlvcml0eSkKIHsKIAlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CiAKLQlpZiAobHJ1ID09IExSVV9BQ1RJVkVfRklMRSAmJiBpbmFjdGl2ZV9maWxlX2lzX2xvdyh6b25lLCBzYykpIHsKLQkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSwgZmlsZSk7CisJaWYgKGlzX2FjdGl2ZV9scnUobHJ1KSkgeworCQlpZiAoaW5hY3RpdmVfbGlzdF9pc19sb3coem9uZSwgc2MsIGZpbGUpKQorCQkgICAgc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSwgZmlsZSk7CiAJCXJldHVybiAwOwogCX0KIAotCWlmIChscnUgPT0gTFJVX0FDVElWRV9BTk9OICYmIGluYWN0aXZlX2Fub25faXNfbG93KHpvbmUsIHNjKSkgewotCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5LCBmaWxlKTsKLQkJcmV0dXJuIDA7Ci0JfQogCXJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpb3JpdHksIGZpbGUpOwogfQogCkBAIC0xNTY3LDE1ICsxNTcwLDE0IEBACiAgKiB1bnRpbCB3ZSBjb2xsZWN0ZWQgQHN3YXBfY2x1c3Rlcl9tYXggcGFnZXMgdG8gc2Nhbi4KICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfc2Nhbl90cnlfYmF0Y2godW5zaWduZWQgbG9uZyBucl90b19zY2FuLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpucl9zYXZlZF9zY2FuLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN3YXBfY2x1c3Rlcl9tYXgpCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NhdmVkX3NjYW4pCiB7CiAJdW5zaWduZWQgbG9uZyBucjsKIAogCSpucl9zYXZlZF9zY2FuICs9IG5yX3RvX3NjYW47CiAJbnIgPSAqbnJfc2F2ZWRfc2NhbjsKIAotCWlmIChuciA+PSBzd2FwX2NsdXN0ZXJfbWF4KQorCWlmIChuciA+PSBTV0FQX0NMVVNURVJfTUFYKQogCQkqbnJfc2F2ZWRfc2NhbiA9IDA7CiAJZWxzZQogCQluciA9IDA7CkBAIC0xNTk0LDcgKzE1OTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGVyY2VudFsyXTsJLyogYW5vbiBAIDA7IGZpbGUgQCAxICovCiAJZW51bSBscnVfbGlzdCBsOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gc2MtPm5yX3JlY2xhaW1lZDsKLQl1bnNpZ25lZCBsb25nIHN3YXBfY2x1c3Rlcl9tYXggPSBzYy0+c3dhcF9jbHVzdGVyX21heDsKKwl1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0gPSBzYy0+bnJfdG9fcmVjbGFpbTsKIAlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOwogCWludCBub3N3YXAgPSAwOwogCkBAIC0xNjE2LDE1ICsxNjE4LDE1IEBACiAJCQlzY2FuID0gKHNjYW4gKiBwZXJjZW50W2ZpbGVdKSAvIDEwMDsKIAkJfQogCQlucltsXSA9IG5yX3NjYW5fdHJ5X2JhdGNoKHNjYW4sCi0JCQkJCSAgJnJlY2xhaW1fc3RhdC0+bnJfc2F2ZWRfc2NhbltsXSwKLQkJCQkJICBzd2FwX2NsdXN0ZXJfbWF4KTsKKwkJCQkJICAmcmVjbGFpbV9zdGF0LT5ucl9zYXZlZF9zY2FuW2xdKTsKIAl9CiAKIAl3aGlsZSAobnJbTFJVX0lOQUNUSVZFX0FOT05dIHx8IG5yW0xSVV9BQ1RJVkVfRklMRV0gfHwKIAkJCQkJbnJbTFJVX0lOQUNUSVZFX0ZJTEVdKSB7CiAJCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgewogCQkJaWYgKG5yW2xdKSB7Ci0JCQkJbnJfdG9fc2NhbiA9IG1pbihucltsXSwgc3dhcF9jbHVzdGVyX21heCk7CisJCQkJbnJfdG9fc2NhbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsCisJCQkJCQkgICBucltsXSwgU1dBUF9DTFVTVEVSX01BWCk7CiAJCQkJbnJbbF0gLT0gbnJfdG9fc2NhbjsKIAogCQkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLApAQCAtMTYzOSw4ICsxNjQxLDcgQEAKIAkJICogd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgcmVjbGFpbWluZyBwYWdlcywgdGhlIHRvdGFsCiAJCSAqIGZyZWVpbmcgdGFyZ2V0IGNhbiBnZXQgdW5yZWFzb25hYmx5IGxhcmdlLgogCQkgKi8KLQkJaWYgKG5yX3JlY2xhaW1lZCA+IHN3YXBfY2x1c3Rlcl9tYXggJiYKLQkJCXByaW9yaXR5IDwgREVGX1BSSU9SSVRZICYmICFjdXJyZW50X2lzX2tzd2FwZCgpKQorCQlpZiAobnJfcmVjbGFpbWVkID49IG5yX3RvX3JlY2xhaW0gJiYgcHJpb3JpdHkgPCBERUZfUFJJT1JJVFkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTE3MzgsNiArMTczOSw3IEBACiAJc3RydWN0IHpvbmVyZWYgKno7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4ID0gZ2ZwX3pvbmUoc2MtPmdmcF9tYXNrKTsKKwl1bnNpZ25lZCBsb25nIHdyaXRlYmFja190aHJlc2hvbGQ7CiAKIAlkZWxheWFjY3RfZnJlZXBhZ2VzX3N0YXJ0KCk7CiAKQEAgLTE3NzMsNyArMTc3NSw3IEBACiAJCQl9CiAJCX0KIAkJdG90YWxfc2Nhbm5lZCArPSBzYy0+bnJfc2Nhbm5lZDsKLQkJaWYgKHNjLT5ucl9yZWNsYWltZWQgPj0gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpIHsKKwkJaWYgKHNjLT5ucl9yZWNsYWltZWQgPj0gc2MtPm5yX3RvX3JlY2xhaW0pIHsKIAkJCXJldCA9IHNjLT5ucl9yZWNsYWltZWQ7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTc4NSwxNCArMTc4NywxNSBAQAogCQkgKiB0aGF0J3MgdW5kZXNpcmFibGUgaW4gbGFwdG9wIG1vZGUsIHdoZXJlIHdlICp3YW50KiBsdW1weQogCQkgKiB3cml0ZW91dC4gIFNvIGluIGxhcHRvcCBtb2RlLCB3cml0ZSBvdXQgdGhlIHdob2xlIHdvcmxkLgogCQkgKi8KLQkJaWYgKHRvdGFsX3NjYW5uZWQgPiBzYy0+c3dhcF9jbHVzdGVyX21heCArCi0JCQkJCXNjLT5zd2FwX2NsdXN0ZXJfbWF4IC8gMikgeworCQl3cml0ZWJhY2tfdGhyZXNob2xkID0gc2MtPm5yX3RvX3JlY2xhaW0gKyBzYy0+bnJfdG9fcmVjbGFpbSAvIDI7CisJCWlmICh0b3RhbF9zY2FubmVkID4gd3JpdGViYWNrX3RocmVzaG9sZCkgewogCQkJd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcyhsYXB0b3BfbW9kZSA/IDAgOiB0b3RhbF9zY2FubmVkKTsKIAkJCXNjLT5tYXlfd3JpdGVwYWdlID0gMTsKIAkJfQogCiAJCS8qIFRha2UgYSBuYXAsIHdhaXQgZm9yIHNvbWUgd3JpdGViYWNrIHRvIGNvbXBsZXRlICovCi0JCWlmIChzYy0+bnJfc2Nhbm5lZCAmJiBwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIpCisJCWlmICghc2MtPmhpYmVybmF0aW9uX21vZGUgJiYgc2MtPm5yX3NjYW5uZWQgJiYKKwkJICAgIHByaW9yaXR5IDwgREVGX1BSSU9SSVRZIC0gMikKIAkJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAl9CiAJLyogdG9wIHByaW9yaXR5IHNocmlua196b25lcyBzdGlsbCBoYWQgbW9yZSB0byBkbz8gZG9uJ3QgT09NLCB0aGVuICovCkBAIC0xODMxLDcgKzE4MzQsNyBAQAogCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7CiAJCS5nZnBfbWFzayA9IGdmcF9tYXNrLAogCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKLQkJLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYLAorCQkubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsCiAJCS5tYXlfdW5tYXAgPSAxLAogCQkubWF5X3N3YXAgPSAxLAogCQkuc3dhcHBpbmVzcyA9IHZtX3N3YXBwaW5lc3MsCkBAIC0xODU1LDcgKzE4NTgsNiBAQAogCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKIAkJLm1heV91bm1hcCA9IDEsCiAJCS5tYXlfc3dhcCA9ICFub3N3YXAsCi0JCS5zd2FwX2NsdXN0ZXJfbWF4ID0gU1dBUF9DTFVTVEVSX01BWCwKIAkJLnN3YXBwaW5lc3MgPSBzd2FwcGluZXNzLAogCQkub3JkZXIgPSAwLAogCQkubWVtX2Nncm91cCA9IG1lbSwKQEAgLTE4ODksNyArMTg5MSw3IEBACiAJCS5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlLAogCQkubWF5X3VubWFwID0gMSwKIAkJLm1heV9zd2FwID0gIW5vc3dhcCwKLQkJLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYLAorCQkubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsCiAJCS5zd2FwcGluZXNzID0gc3dhcHBpbmVzcywKIAkJLm9yZGVyID0gMCwKIAkJLm1lbV9jZ3JvdXAgPSBtZW1fY29udCwKQEAgLTE5MDQsNiArMTkwNiwzMCBAQAogfQogI2VuZGlmCiAKKy8qIGlzIGtzd2FwZCBzbGVlcGluZyBwcmVtYXR1cmVseT8gKi8KK3N0YXRpYyBpbnQgc2xlZXBpbmdfcHJlbWF0dXJlbHkocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBsb25nIHJlbWFpbmluZykKK3sKKwlpbnQgaTsKKworCS8qIElmIGEgZGlyZWN0IHJlY2xhaW1lciB3b2tlIGtzd2FwZCB3aXRoaW4gSFovMTAsIGl0J3MgcHJlbWF0dXJlICovCisJaWYgKHJlbWFpbmluZykKKwkJcmV0dXJuIDE7CisKKwkvKiBJZiBhZnRlciBIWi8xMCwgYSB6b25lIGlzIGJlbG93IHRoZSBoaWdoIG1hcmssIGl0J3MgcHJlbWF0dXJlICovCisJZm9yIChpID0gMDsgaSA8IHBnZGF0LT5ucl96b25lczsgaSsrKSB7CisJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOworCisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLAorCQkJCQkJCQkwLCAwKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgd29yayBhY3Jvc3MgYWxsIHRoaXMgbm9kZSdzIHpvbmVzIHVudGlsCiAgKiB0aGV5IGFyZSBhbGwgYXQgaGlnaF93bWFya19wYWdlcyh6b25lKS4KQEAgLTE5MzYsNyArMTk2MiwxMSBAQAogCQkuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLAogCQkubWF5X3VubWFwID0gMSwKIAkJLm1heV9zd2FwID0gMSwKLQkJLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYLAorCQkvKgorCQkgKiBrc3dhcGQgZG9lc24ndCB3YW50IHRvIGJlIGJhaWxlZCBvdXQgd2hpbGUgcmVjbGFpbS4gYmVjYXVzZQorCQkgKiB3ZSB3YW50IHRvIHB1dCBlcXVhbCBzY2FubmluZyBwcmVzc3VyZSBvbiBlYWNoIHpvbmUuCisJCSAqLworCQkubnJfdG9fcmVjbGFpbSA9IFVMT05HX01BWCwKIAkJLnN3YXBwaW5lc3MgPSB2bV9zd2FwcGluZXNzLAogCQkub3JkZXIgPSBvcmRlciwKIAkJLm1lbV9jZ3JvdXAgPSBOVUxMLApAQCAtMTk2MSw2ICsxOTkxLDcgQEAKIAlmb3IgKHByaW9yaXR5ID0gREVGX1BSSU9SSVRZOyBwcmlvcml0eSA+PSAwOyBwcmlvcml0eS0tKSB7CiAJCWludCBlbmRfem9uZSA9IDA7CS8qIEluY2x1c2l2ZS4gIDAgPSBaT05FX0RNQSAqLwogCQl1bnNpZ25lZCBsb25nIGxydV9wYWdlcyA9IDA7CisJCWludCBoYXNfdW5kZXJfbWluX3dhdGVybWFya196b25lID0gMDsKIAogCQkvKiBUaGUgc3dhcCB0b2tlbiBnZXRzIGluIHRoZSB3YXkgb2Ygc3dhcG91dC4uLiAqLwogCQlpZiAoIXByaW9yaXR5KQpAQCAtMjA2Nyw2ICsyMDk4LDE1IEBACiAJCQlpZiAodG90YWxfc2Nhbm5lZCA+IFNXQVBfQ0xVU1RFUl9NQVggKiAyICYmCiAJCQkgICAgdG90YWxfc2Nhbm5lZCA+IHNjLm5yX3JlY2xhaW1lZCArIHNjLm5yX3JlY2xhaW1lZCAvIDIpCiAJCQkJc2MubWF5X3dyaXRlcGFnZSA9IDE7CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgc3RpbGwgdW5kZXIgbWluIHdhdGVyIG1hcmsuIGl0IG1lYW4gd2UgaGF2ZQorCQkJICogR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWx1cmUgcmlzay4gSHVycnkgdXAhCisJCQkgKi8KKwkJCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIG1pbl93bWFya19wYWdlcyh6b25lKSwKKwkJCQkJICAgICAgZW5kX3pvbmUsIDApKQorCQkJCWhhc191bmRlcl9taW5fd2F0ZXJtYXJrX3pvbmUgPSAxOworCiAJCX0KIAkJaWYgKGFsbF96b25lc19vaykKIAkJCWJyZWFrOwkJLyoga3N3YXBkOiBhbGwgZG9uZSAqLwpAQCAtMjA3NCw4ICsyMTE0LDEyIEBACiAJCSAqIE9LLCBrc3dhcGQgaXMgZ2V0dGluZyBpbnRvIHRyb3VibGUuICBUYWtlIGEgbmFwLCB0aGVuIHRha2UKIAkJICogYW5vdGhlciBwYXNzIGFjcm9zcyB0aGUgem9uZXMuCiAJCSAqLwotCQlpZiAodG90YWxfc2Nhbm5lZCAmJiBwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIpCi0JCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi8xMCk7CisJCWlmICh0b3RhbF9zY2FubmVkICYmIChwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIpKSB7CisJCQlpZiAoaGFzX3VuZGVyX21pbl93YXRlcm1hcmtfem9uZSkKKwkJCQljb3VudF92bV9ldmVudChLU1dBUERfU0tJUF9DT05HRVNUSU9OX1dBSVQpOworCQkJZWxzZQorCQkJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKKwkJfQogCiAJCS8qCiAJCSAqIFdlIGRvIHRoaXMgc28ga3N3YXBkIGRvZXNuJ3QgYnVpbGQgdXAgbGFyZ2UgcHJpb3JpdGllcyBmb3IKQEAgLTIxNzMsNiArMjIxNyw3IEBACiAJb3JkZXIgPSAwOwogCWZvciAoIDsgOyApIHsKIAkJdW5zaWduZWQgbG9uZyBuZXdfb3JkZXI7CisJCWludCByZXQ7CiAKIAkJcHJlcGFyZV90b193YWl0KCZwZ2RhdC0+a3N3YXBkX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQluZXdfb3JkZXIgPSBwZ2RhdC0+a3N3YXBkX21heF9vcmRlcjsKQEAgLTIxODQsMTkgKzIyMjksNDUgQEAKIAkJCSAqLwogCQkJb3JkZXIgPSBuZXdfb3JkZXI7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoIWZyZWV6aW5nKGN1cnJlbnQpKQotCQkJCXNjaGVkdWxlKCk7CisJCQlpZiAoIWZyZWV6aW5nKGN1cnJlbnQpICYmICFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCQlsb25nIHJlbWFpbmluZyA9IDA7CisKKwkJCQkvKiBUcnkgdG8gc2xlZXAgZm9yIGEgc2hvcnQgaW50ZXJ2YWwgKi8KKwkJCQlpZiAoIXNsZWVwaW5nX3ByZW1hdHVyZWx5KHBnZGF0LCBvcmRlciwgcmVtYWluaW5nKSkgeworCQkJCQlyZW1haW5pbmcgPSBzY2hlZHVsZV90aW1lb3V0KEhaLzEwKTsKKwkJCQkJZmluaXNoX3dhaXQoJnBnZGF0LT5rc3dhcGRfd2FpdCwgJndhaXQpOworCQkJCQlwcmVwYXJlX3RvX3dhaXQoJnBnZGF0LT5rc3dhcGRfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBBZnRlciBhIHNob3J0IHNsZWVwLCBjaGVjayBpZiBpdCB3YXMgYQorCQkJCSAqIHByZW1hdHVyZSBzbGVlcC4gSWYgbm90LCB0aGVuIGdvIGZ1bGx5CisJCQkJICogdG8gc2xlZXAgdW50aWwgZXhwbGljaXRseSB3b2tlbiB1cAorCQkJCSAqLworCQkJCWlmICghc2xlZXBpbmdfcHJlbWF0dXJlbHkocGdkYXQsIG9yZGVyLCByZW1haW5pbmcpKQorCQkJCQlzY2hlZHVsZSgpOworCQkJCWVsc2UgeworCQkJCQlpZiAocmVtYWluaW5nKQorCQkJCQkJY291bnRfdm1fZXZlbnQoS1NXQVBEX0xPV19XTUFSS19ISVRfUVVJQ0tMWSk7CisJCQkJCWVsc2UKKwkJCQkJCWNvdW50X3ZtX2V2ZW50KEtTV0FQRF9ISUdIX1dNQVJLX0hJVF9RVUlDS0xZKTsKKwkJCQl9CisJCQl9CiAKIAkJCW9yZGVyID0gcGdkYXQtPmtzd2FwZF9tYXhfb3JkZXI7CiAJCX0KIAkJZmluaXNoX3dhaXQoJnBnZGF0LT5rc3dhcGRfd2FpdCwgJndhaXQpOwogCi0JCWlmICghdHJ5X3RvX2ZyZWV6ZSgpKSB7Ci0JCQkvKiBXZSBjYW4gc3BlZWQgdXAgdGhhd2luZyB0YXNrcyBpZiB3ZSBkb24ndCBjYWxsCi0JCQkgKiBiYWxhbmNlX3BnZGF0IGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3IKLQkJCSAqLworCQlyZXQgPSB0cnlfdG9fZnJlZXplKCk7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBXZSBjYW4gc3BlZWQgdXAgdGhhd2luZyB0YXNrcyBpZiB3ZSBkb24ndCBjYWxsIGJhbGFuY2VfcGdkYXQKKwkJICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvcgorCQkgKi8KKwkJaWYgKCFyZXQpCiAJCQliYWxhbmNlX3BnZGF0KHBnZGF0LCBvcmRlcik7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjYwLDE0OCArMjMzMSw0MyBAQAogCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCiAvKgotICogSGVscGVyIGZ1bmN0aW9uIGZvciBzaHJpbmtfYWxsX21lbW9yeSgpLiAgVHJpZXMgdG8gcmVjbGFpbSAnbnJfcGFnZXMnIHBhZ2VzCi0gKiBmcm9tIExSVSBsaXN0cyBzeXN0ZW0td2lkZSwgZm9yIGdpdmVuIHBhc3MgYW5kIHByaW9yaXR5LgotICoKLSAqIEZvciBwYXNzID4gMyB3ZSBhbHNvIHRyeSB0byBzaHJpbmsgdGhlIExSVSBsaXN0cyB0aGF0IGNvbnRhaW4gYSBmZXcgcGFnZXMKLSAqLwotc3RhdGljIHZvaWQgc2hyaW5rX2FsbF96b25lcyh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgcHJpbywKLQkJCQkgICAgICBpbnQgcGFzcywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCi17Ci0Jc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwOwotCXN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCAqcmVjbGFpbV9zdGF0OwotCi0JZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewotCQllbnVtIGxydV9saXN0IGw7Ci0KLQkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgJiYgcHJpbyAhPSBERUZfUFJJT1JJVFkpCi0JCQljb250aW51ZTsKLQotCQlmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGwpIHsKLQkJCWVudW0gem9uZV9zdGF0X2l0ZW0gbHMgPSBOUl9MUlVfQkFTRSArIGw7Ci0JCQl1bnNpZ25lZCBsb25nIGxydV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBscyk7Ci0KLQkJCS8qIEZvciBwYXNzID0gMCwgd2UgZG9uJ3Qgc2hyaW5rIHRoZSBhY3RpdmUgbGlzdCAqLwotCQkJaWYgKHBhc3MgPT0gMCAmJiAobCA9PSBMUlVfQUNUSVZFX0FOT04gfHwKLQkJCQkJCWwgPT0gTFJVX0FDVElWRV9GSUxFKSkKLQkJCQljb250aW51ZTsKLQotCQkJcmVjbGFpbV9zdGF0ID0gZ2V0X3JlY2xhaW1fc3RhdCh6b25lLCBzYyk7Ci0JCQlyZWNsYWltX3N0YXQtPm5yX3NhdmVkX3NjYW5bbF0gKz0KLQkJCQkJCShscnVfcGFnZXMgPj4gcHJpbykgKyAxOwotCQkJaWYgKHJlY2xhaW1fc3RhdC0+bnJfc2F2ZWRfc2NhbltsXQotCQkJCQkJPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47Ci0KLQkJCQlyZWNsYWltX3N0YXQtPm5yX3NhdmVkX3NjYW5bbF0gPSAwOwotCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsIGxydV9wYWdlcyk7Ci0JCQkJbnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sIHpvbmUsCi0JCQkJCQkJCXNjLCBwcmlvKTsKLQkJCQlpZiAobnJfcmVjbGFpbWVkID49IG5yX3BhZ2VzKSB7Ci0JCQkJCXNjLT5ucl9yZWNsYWltZWQgKz0gbnJfcmVjbGFpbWVkOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCXNjLT5ucl9yZWNsYWltZWQgKz0gbnJfcmVjbGFpbWVkOwotfQotCi0vKgotICogVHJ5IHRvIGZyZWUgYG5yX3BhZ2VzJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAqIFRyeSB0byBmcmVlIGBucl90b19yZWNsYWltJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKICAqIGZyZWVkIHBhZ2VzLgogICoKICAqIFJhdGhlciB0aGFuIHRyeWluZyB0byBhZ2UgTFJVcyB0aGUgYWltIGlzIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsCiAgKiBMUlUgb3JkZXIgYnkgcmVjbGFpbWluZyBwcmVmZXJlbnRpYWxseQogICogaW5hY3RpdmUgPiBhY3RpdmUgPiBhY3RpdmUgcmVmZXJlbmNlZCA+IGFjdGl2ZSBtYXBwZWQKICAqLwotdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQordW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pCiB7Ci0JdW5zaWduZWQgbG9uZyBscnVfcGFnZXMsIG5yX3NsYWI7Ci0JaW50IHBhc3M7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZTsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewotCQkuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLAotCQkubWF5X3VubWFwID0gMCwKKwkJLmdmcF9tYXNrID0gR0ZQX0hJR0hVU0VSX01PVkFCTEUsCisJCS5tYXlfc3dhcCA9IDEsCisJCS5tYXlfdW5tYXAgPSAxLAogCQkubWF5X3dyaXRlcGFnZSA9IDEsCisJCS5ucl90b19yZWNsYWltID0gbnJfdG9fcmVjbGFpbSwKKwkJLmhpYmVybmF0aW9uX21vZGUgPSAxLAorCQkuc3dhcHBpbmVzcyA9IHZtX3N3YXBwaW5lc3MsCisJCS5vcmRlciA9IDAsCiAJCS5pc29sYXRlX3BhZ2VzID0gaXNvbGF0ZV9wYWdlc19nbG9iYWwsCi0JCS5ucl9yZWNsYWltZWQgPSAwLAogCX07CisJc3RydWN0IHpvbmVsaXN0ICogem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKKwl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKIAotCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKKwlwLT5mbGFncyB8PSBQRl9NRU1BTExPQzsKKwlsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoc2MuZ2ZwX21hc2spOworCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOworCXAtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKIAotCWxydV9wYWdlcyA9IGdsb2JhbF9yZWNsYWltYWJsZV9wYWdlcygpOwotCW5yX3NsYWIgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKLQkvKiBJZiBzbGFiIGNhY2hlcyBhcmUgaHVnZSwgaXQncyBiZXR0ZXIgdG8gaGl0IHRoZW0gZmlyc3QgKi8KLQl3aGlsZSAobnJfc2xhYiA+PSBscnVfcGFnZXMpIHsKLQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7Ci0JCXNocmlua19zbGFiKG5yX3BhZ2VzLCBzYy5nZnBfbWFzaywgbHJ1X3BhZ2VzKTsKLQkJaWYgKCFyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiKQotCQkJYnJlYWs7CisJbnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsICZzYyk7CiAKLQkJc2MubnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JCWlmIChzYy5ucl9yZWNsYWltZWQgPj0gbnJfcGFnZXMpCi0JCQlnb3RvIG91dDsKKwlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKKwlsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSgpOworCXAtPmZsYWdzICY9IH5QRl9NRU1BTExPQzsKIAotCQlucl9zbGFiIC09IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JfQotCi0JLyoKLQkgKiBXZSB0cnkgdG8gc2hyaW5rIExSVXMgaW4gNSBwYXNzZXM6Ci0JICogMCA9IFJlY2xhaW0gZnJvbSBpbmFjdGl2ZV9saXN0IG9ubHkKLQkgKiAxID0gUmVjbGFpbSBmcm9tIGFjdGl2ZSBsaXN0IGJ1dCBkb24ndCByZWNsYWltIG1hcHBlZAotCSAqIDIgPSAybmQgcGFzcyBvZiB0eXBlIDEKLQkgKiAzID0gUmVjbGFpbSBtYXBwZWQgKG5vcm1hbCByZWNsYWltKQotCSAqIDQgPSAybmQgcGFzcyBvZiB0eXBlIDMKLQkgKi8KLQlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgNTsgcGFzcysrKSB7Ci0JCWludCBwcmlvOwotCi0JCS8qIEZvcmNlIHJlY2xhaW1pbmcgbWFwcGVkIHBhZ2VzIGluIHRoZSBwYXNzZXMgIzMgYW5kICM0ICovCi0JCWlmIChwYXNzID4gMikKLQkJCXNjLm1heV91bm1hcCA9IDE7Ci0KLQkJZm9yIChwcmlvID0gREVGX1BSSU9SSVRZOyBwcmlvID49IDA7IHByaW8tLSkgewotCQkJdW5zaWduZWQgbG9uZyBucl90b19zY2FuID0gbnJfcGFnZXMgLSBzYy5ucl9yZWNsYWltZWQ7Ci0KLQkJCXNjLm5yX3NjYW5uZWQgPSAwOwotCQkJc2Muc3dhcF9jbHVzdGVyX21heCA9IG5yX3RvX3NjYW47Ci0JCQlzaHJpbmtfYWxsX3pvbmVzKG5yX3RvX3NjYW4sIHByaW8sIHBhc3MsICZzYyk7Ci0JCQlpZiAoc2MubnJfcmVjbGFpbWVkID49IG5yX3BhZ2VzKQotCQkJCWdvdG8gb3V0OwotCi0JCQlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKLQkJCXNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIHNjLmdmcF9tYXNrLAotCQkJCSAgICBnbG9iYWxfcmVjbGFpbWFibGVfcGFnZXMoKSk7Ci0JCQlzYy5ucl9yZWNsYWltZWQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKLQkJCWlmIChzYy5ucl9yZWNsYWltZWQgPj0gbnJfcGFnZXMpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCWlmIChzYy5ucl9zY2FubmVkICYmIHByaW8gPCBERUZfUFJJT1JJVFkgLSAyKQotCQkJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaIC8gMTApOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiBzYy5ucl9yZWNsYWltZWQgPSAwLCB3ZSBjb3VsZCBub3Qgc2hyaW5rIExSVXMsIGJ1dCB0aGVyZSBtYXkgYmUKLQkgKiBzb21ldGhpbmcgaW4gc2xhYiBjYWNoZXMKLQkgKi8KLQlpZiAoIXNjLm5yX3JlY2xhaW1lZCkgewotCQlkbyB7Ci0JCQlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKLQkJCXNocmlua19zbGFiKG5yX3BhZ2VzLCBzYy5nZnBfbWFzaywKLQkJCQkgICAgZ2xvYmFsX3JlY2xhaW1hYmxlX3BhZ2VzKCkpOwotCQkJc2MubnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JCX0gd2hpbGUgKHNjLm5yX3JlY2xhaW1lZCA8IG5yX3BhZ2VzICYmCi0JCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA+IDApOwotCX0KLQotCi1vdXQ6Ci0JY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9IE5VTEw7Ci0KLQlyZXR1cm4gc2MubnJfcmVjbGFpbWVkOworCXJldHVybiBucl9yZWNsYWltZWQ7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovCiAKQEAgLTI0NTEsNiArMjQxNywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBDYWxsZWQgYnkgbWVtb3J5IGhvdHBsdWcgd2hlbiBhbGwgbWVtb3J5IGluIGEgbm9kZSBpcyBvZmZsaW5lZC4KKyAqLwordm9pZCBrc3dhcGRfc3RvcChpbnQgbmlkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3N3YXBkID0gTk9ERV9EQVRBKG5pZCktPmtzd2FwZDsKKworCWlmIChrc3dhcGQpCisJCWt0aHJlYWRfc3RvcChrc3dhcGQpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKQogewogCWludCBuaWQ7CkBAIC0yNTUzLDggKzI1MzAsOCBAQAogCQkubWF5X3dyaXRlcGFnZSA9ICEhKHpvbmVfcmVjbGFpbV9tb2RlICYgUkVDTEFJTV9XUklURSksCiAJCS5tYXlfdW5tYXAgPSAhISh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fU1dBUCksCiAJCS5tYXlfc3dhcCA9IDEsCi0JCS5zd2FwX2NsdXN0ZXJfbWF4ID0gbWF4X3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsCi0JCQkJCVNXQVBfQ0xVU1RFUl9NQVgpLAorCQkubnJfdG9fcmVjbGFpbSA9IG1heF90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAorCQkJCSAgICAgICBTV0FQX0NMVVNURVJfTUFYKSwKIAkJLmdmcF9tYXNrID0gZ2ZwX21hc2ssCiAJCS5zd2FwcGluZXNzID0gdm1fc3dhcHBpbmVzcywKIAkJLm9yZGVyID0gb3JkZXIsCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IGM4MTMyMWYuLjYwNTFmYmEgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC02ODMsNiArNjgzLDkgQEAKIAkic2xhYnNfc2Nhbm5lZCIsCiAJImtzd2FwZF9zdGVhbCIsCiAJImtzd2FwZF9pbm9kZXN0ZWFsIiwKKwkia3N3YXBkX2xvd193bWFya19oaXRfcXVpY2tseSIsCisJImtzd2FwZF9oaWdoX3dtYXJrX2hpdF9xdWlja2x5IiwKKwkia3N3YXBkX3NraXBfY29uZ2VzdGlvbl93YWl0IiwKIAkicGFnZW91dHJ1biIsCiAJImFsbG9jc3RhbGwiLAogCkBAIC04ODMsMTEgKzg4NiwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgc3RhcnRfY3B1X3RpbWVyKGludCBjcHUpCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqdm1zdGF0X3dvcmsgPSAmcGVyX2NwdSh2bXN0YXRfd29yaywgY3B1KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0gJnBlcl9jcHUodm1zdGF0X3dvcmssIGNwdSk7CiAKLQlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKHZtc3RhdF93b3JrLCB2bXN0YXRfdXBkYXRlKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LCB2bXN0YXRfd29yaywKLQkJCQkgX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaLCBjcHUpKTsKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKHdvcmssIHZtc3RhdF91cGRhdGUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHdvcmssIF9fcm91bmRfamlmZmllc19yZWxhdGl2ZShIWiwgY3B1KSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggZTc1YTJmMy4uYzAzMTZlMCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtMTQsNiArMTQsNyBAQAogCWlmIChza2JfYm9uZF9zaG91bGRfZHJvcChza2IpKQogCQlnb3RvIGRyb3A7CiAKKwlza2ItPnNrYl9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKIAlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl90Y2kpOwogCXNrYi0+ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKIApAQCAtODUsNiArODYsNyBAQAogCWlmIChza2JfYm9uZF9zaG91bGRfZHJvcChza2IpKQogCQlnb3RvIGRyb3A7CiAKKwlza2ItPnNrYl9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKIAlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl90Y2kpOwogCXNrYi0+ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwppbmRleCBiNzg4OTc4Li43N2E0OWZmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYworKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtMjYzLDExICsyNjMsMTAgQEAKIAkJdmhkci0+aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fdGNpKTsKIAogCQkvKgotCQkgKiAgU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMyB3ZQotCQkgKiAgcHV0IHRoZSBsZW5ndGggaW4gaGVyZSBpbnN0ZWFkLiBJdCBpcyB1cCB0byB0aGUgODAyLjIKLQkJICogIGxheWVyIHRvIGNhcnJ5IHByb3RvY29sIGluZm9ybWF0aW9uLgorCQkgKiAgU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMy8yIHdlCisJCSAqICBwdXQgdGhlIGxlbmd0aCBpbiBoZXJlIGluc3RlYWQuCiAJCSAqLwotCQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykKKwkJaWYgKHR5cGUgIT0gRVRIX1BfODAyXzMgJiYgdHlwZSAhPSBFVEhfUF84MDJfMikKIAkJCXZoZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBodG9ucyh0eXBlKTsKIAkJZWxzZQogCQkJdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IGh0b25zKGxlbik7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IDRkZDg3M2UuLmJlMWNiOTAgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+IC8qIGtpbGxtZSAqLworCiAjZGVmaW5lIFA5X1BPUlQgNTY0CiAjZGVmaW5lIE1BWF9TT0NLX0JVRiAoNjQqMTAyNCkKICNkZWZpbmUgTUFYUE9MTFdBRERSCTIKQEAgLTc4OCwyNCArNzkwLDQxIEBACiAKIHN0YXRpYyBpbnQgcDlfc29ja2V0X29wZW4oc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0KQogewotCWludCBmZCwgcmV0OworCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKKwlpbnQgcmV0LCBmZDsKKworCXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfdHJhbnNfZmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOwogCiAJY3NvY2tldC0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKIAlmZCA9IHNvY2tfbWFwX2ZkKGNzb2NrZXQsIDApOwogCWlmIChmZCA8IDApIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3NvY2tldF9vcGVuOiBmYWlsZWQgdG8gbWFwIGZkXG4iKTsKKwkJc29ja19yZWxlYXNlKGNzb2NrZXQpOworCQlrZnJlZShwKTsKIAkJcmV0dXJuIGZkOwogCX0KIAotCXJldCA9IHA5X2ZkX29wZW4oY2xpZW50LCBmZCwgZmQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV9zb2NrZXRfb3BlbjogZmFpbGVkIHRvIG9wZW4gZmRcbiIpOworCWdldF9maWxlKGNzb2NrZXQtPmZpbGUpOworCWdldF9maWxlKGNzb2NrZXQtPmZpbGUpOworCXAtPndyID0gcC0+cmQgPSBjc29ja2V0LT5maWxlOworCWNsaWVudC0+dHJhbnMgPSBwOworCWNsaWVudC0+c3RhdHVzID0gQ29ubmVjdGVkOworCisJc3lzX2Nsb3NlKGZkKTsJLyogc3RpbGwgcmFjeSAqLworCisJcC0+cmQtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKworCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZShjbGllbnQpOworCWlmIChJU19FUlIocC0+Y29ubikpIHsKKwkJcmV0ID0gUFRSX0VSUihwLT5jb25uKTsKKwkJcC0+Y29ubiA9IE5VTEw7CisJCWtmcmVlKHApOworCQlzb2NrZmRfcHV0KGNzb2NrZXQpOwogCQlzb2NrZmRfcHV0KGNzb2NrZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQotCSgoc3RydWN0IHA5X3RyYW5zX2ZkICopY2xpZW50LT50cmFucyktPnJkLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODgzLDcgKzkwMiw2IEBACiAJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3NlcnZlcjsKIAlzdHJ1Y3QgcDlfZmRfb3B0cyBvcHRzOwotCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IE5VTEw7IC8qIHRoaXMgZ2V0cyBhbGxvY2F0ZWQgaW4gcDlfZmRfb3BlbiAqLwogCiAJZXJyID0gcGFyc2Vfb3B0cyhhcmdzLCAmb3B0cyk7CiAJaWYgKGVyciA8IDApCkBAIC04OTcsMTIgKzkxNSwxMSBAQAogCXNpbl9zZXJ2ZXIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJc2luX3NlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBpbl9hdG9uKGFkZHIpOwogCXNpbl9zZXJ2ZXIuc2luX3BvcnQgPSBodG9ucyhvcHRzLnBvcnQpOwotCXNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmY3NvY2tldCk7CisJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICZjc29ja2V0KTsKIAotCWlmICghY3NvY2tldCkgeworCWlmIChlcnIpIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3RyYW5zX3RjcDogcHJvYmxlbSBjcmVhdGluZyBzb2NrZXRcbiIpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWVyciA9IGNzb2NrZXQtPm9wcy0+Y29ubmVjdChjc29ja2V0LApAQCAtOTEyLDMwICs5MjksMTEgQEAKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwKIAkJCSJwOV90cmFuc190Y3A6IHByb2JsZW0gY29ubmVjdGluZyBzb2NrZXQgdG8gJXNcbiIsCiAJCQlhZGRyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQllcnIgPSBwOV9zb2NrZXRfb3BlbihjbGllbnQsIGNzb2NrZXQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOwotCi0JcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKLQlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7Ci0JCWVyciA9IFBUUl9FUlIocC0+Y29ubik7Ci0JCXAtPmNvbm4gPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlpZiAoY3NvY2tldCkKIAkJc29ja19yZWxlYXNlKGNzb2NrZXQpOworCQlyZXR1cm4gZXJyOworCX0KIAotCWtmcmVlKHApOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcDlfc29ja2V0X29wZW4oY2xpZW50LCBjc29ja2V0KTsKIH0KIAogc3RhdGljIGludApAQCAtOTQ0LDQ5ICs5NDIsMzMgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKmNzb2NrZXQ7CiAJc3RydWN0IHNvY2thZGRyX3VuIHN1bl9zZXJ2ZXI7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gTlVMTDsgLyogdGhpcyBnZXRzIGFsbG9jYXRlZCBpbiBwOV9mZF9vcGVuICovCiAKIAljc29ja2V0ID0gTlVMTDsKIAogCWlmIChzdHJsZW4oYWRkcikgPiBVTklYX1BBVEhfTUFYKSB7CiAJCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV90cmFuc191bml4OiBhZGRyZXNzIHRvbyBsb25nOiAlc1xuIiwKIAkJCWFkZHIpOwotCQllcnIgPSAtRU5BTUVUT09MT05HOwotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAl9CiAKIAlzdW5fc2VydmVyLnN1bl9mYW1pbHkgPSBQRl9VTklYOwogCXN0cmNweShzdW5fc2VydmVyLnN1bl9wYXRoLCBhZGRyKTsKLQlzb2NrX2NyZWF0ZV9rZXJuKFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCAmY3NvY2tldCk7CisJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgJmNzb2NrZXQpOworCWlmIChlcnIgPCAwKSB7CisJCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV90cmFuc191bml4OiBwcm9ibGVtIGNyZWF0aW5nIHNvY2tldFxuIik7CisJCXJldHVybiBlcnI7CisJfQogCWVyciA9IGNzb2NrZXQtPm9wcy0+Y29ubmVjdChjc29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJnN1bl9zZXJ2ZXIsCiAJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSAtIDEsIDApOwogCWlmIChlcnIgPCAwKSB7CiAJCVA5X0VQUklOVEsoS0VSTl9FUlIsCiAJCQkicDlfdHJhbnNfdW5peDogcHJvYmxlbSBjb25uZWN0aW5nIHNvY2tldDogJXM6ICVkXG4iLAogCQkJYWRkciwgZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQllcnIgPSBwOV9zb2NrZXRfb3BlbihjbGllbnQsIGNzb2NrZXQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOwotCi0JcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKLQlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7Ci0JCWVyciA9IFBUUl9FUlIocC0+Y29ubik7Ci0JCXAtPmNvbm4gPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlpZiAoY3NvY2tldCkKIAkJc29ja19yZWxlYXNlKGNzb2NrZXQpOworCQlyZXR1cm4gZXJyOworCX0KIAotCWtmcmVlKHApOwotCXJldHVybiBlcnI7CisJcmV0dXJuIHA5X3NvY2tldF9vcGVuKGNsaWVudCwgY3NvY2tldCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTk5NCw3ICs5NzYsNyBAQAogewogCWludCBlcnI7CiAJc3RydWN0IHA5X2ZkX29wdHMgb3B0czsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnAgPSBOVUxMOyAvKiB0aGlzIGdldCBhbGxvY2F0ZWQgaW4gcDlfZmRfb3BlbiAqLworCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKIAogCXBhcnNlX29wdHMoYXJncywgJm9wdHMpOwogCkBAIC0xMDA1LDIxICs5ODcsMTkgQEAKIAogCWVyciA9IHA5X2ZkX29wZW4oY2xpZW50LCBvcHRzLnJmZCwgb3B0cy53ZmQpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gZXJyOwogCiAJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKIAlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwotCQlnb3RvIGVycm9yOworCQlmcHV0KHAtPnJkKTsKKwkJZnB1dChwLT53cik7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuIDA7Ci0KLWVycm9yOgotCWtmcmVlKHApOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3RjcF90cmFucyA9IHsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IDUxYWRjNGMuLmJjMThiMDggMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtNzcsOCArNzcsOCBAQAogbW9kdWxlX3BhcmFtKHN0YXRzX3RpbWVyLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhzdGF0c190aW1lciwgImVuYWJsZSB0aW1lciBmb3Igc3RhdGlzdGljcyAoZGVmYXVsdDpvbikiKTsKIAotSExJU1RfSEVBRChjYW5fcnhfZGV2X2xpc3QpOwotc3RhdGljIHN0cnVjdCBkZXZfcmN2X2xpc3RzIGNhbl9yeF9hbGxkZXZfbGlzdDsKKy8qIHJlY2VpdmUgZmlsdGVycyBzdWJzY3JpYmVkIGZvciAnYWxsJyBDQU4gZGV2aWNlcyAqLworc3RydWN0IGRldl9yY3ZfbGlzdHMgY2FuX3J4X2FsbGRldl9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhjYW5fcmN2bGlzdHNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmN2X2NhY2hlIF9fcmVhZF9tb3N0bHk7CkBAIC0yOTIsMjggKzI5MiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGRldl9yY3ZfbGlzdHMgKmZpbmRfZGV2X3Jjdl9saXN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkID0gTlVMTDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKLQotCS8qCi0JICogZmluZCByZWNlaXZlIGxpc3QgZm9yIHRoaXMgZGV2aWNlCi0JICoKLQkgKiBUaGUgaGxpc3RfZm9yX2VhY2hfZW50cnkqKCkgbWFjcm9zIGN1cnNlIHRocm91Z2ggdGhlIGxpc3QKLQkgKiB1c2luZyB0aGUgcG9pbnRlciB2YXJpYWJsZSBuIGFuZCBzZXQgZCB0byB0aGUgY29udGFpbmluZwotCSAqIHN0cnVjdCBpbiBlYWNoIGxpc3QgaXRlcmF0aW9uLiAgVGhlcmVmb3JlLCBhZnRlciBsaXN0Ci0JICogaXRlcmF0aW9uLCBkIGlzIHVubW9kaWZpZWQgd2hlbiB0aGUgbGlzdCBpcyBlbXB0eSwgYW5kIGl0Ci0JICogcG9pbnRzIHRvIGxhc3QgbGlzdCBlbGVtZW50LCB3aGVuIHRoZSBsaXN0IGlzIG5vbi1lbXB0eQotCSAqIGJ1dCBubyBtYXRjaCBpbiB0aGUgbG9vcCBib2R5IGlzIGZvdW5kLiAgSS5lLiBkIGlzICpub3QqCi0JICogTlVMTCB3aGVuIG5vIG1hdGNoIGlzIGZvdW5kLiAgV2UgY2FuLCBob3dldmVyLCB1c2UgdGhlCi0JICogY3Vyc29yIHZhcmlhYmxlIG4gdG8gZGVjaWRlIGlmIGEgbWF0Y2ggd2FzIGZvdW5kLgotCSAqLwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGQsIG4sICZjYW5fcnhfZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGQtPmRldiA9PSBkZXYpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbiA/IGQgOiBOVUxMOworCWlmICghZGV2KQorCQlyZXR1cm4gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwllbHNlCisJCXJldHVybiAoc3RydWN0IGRldl9yY3ZfbGlzdHMgKilkZXYtPm1sX3ByaXY7CiB9CiAKIC8qKgpAQCAtNDY4LDE2ICs0NTAsNiBAQAogRVhQT1JUX1NZTUJPTChjYW5fcnhfcmVnaXN0ZXIpOwogCiAvKgotICogY2FuX3J4X2RlbGV0ZV9kZXZpY2UgLSByY3UgY2FsbGJhY2sgZm9yIGRldl9yY3ZfbGlzdHMgc3RydWN0dXJlIHJlbW92YWwKLSAqLwotc3RhdGljIHZvaWQgY2FuX3J4X2RlbGV0ZV9kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpycCkKLXsKLQlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZCA9IGNvbnRhaW5lcl9vZihycCwgc3RydWN0IGRldl9yY3ZfbGlzdHMsIHJjdSk7Ci0KLQlrZnJlZShkKTsKLX0KLQotLyoKICAqIGNhbl9yeF9kZWxldGVfcmVjZWl2ZXIgLSByY3UgY2FsbGJhY2sgZm9yIHNpbmdsZSByZWNlaXZlciBlbnRyeSByZW1vdmFsCiAgKi8KIHN0YXRpYyB2b2lkIGNhbl9yeF9kZWxldGVfcmVjZWl2ZXIoc3RydWN0IHJjdV9oZWFkICpycCkKQEAgLTU0MSw3ICs1MTMsNiBAQAogCQkgICAgICAgImRldiAlcywgaWQgJTAzWCwgbWFzayAlMDNYXG4iLAogCQkgICAgICAgRE5BTUUoZGV2KSwgY2FuX2lkLCBtYXNrKTsKIAkJciA9IE5VTEw7Ci0JCWQgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU1MiwxMCArNTIzLDEwIEBACiAJCWNhbl9wc3RhdHMucmN2X2VudHJpZXMtLTsKIAogCS8qIHJlbW92ZSBkZXZpY2Ugc3RydWN0dXJlIHJlcXVlc3RlZCBieSBORVRERVZfVU5SRUdJU1RFUiAqLwotCWlmIChkLT5yZW1vdmVfb25femVyb19lbnRyaWVzICYmICFkLT5lbnRyaWVzKQotCQlobGlzdF9kZWxfcmN1KCZkLT5saXN0KTsKLQllbHNlCi0JCWQgPSBOVUxMOworCWlmIChkLT5yZW1vdmVfb25femVyb19lbnRyaWVzICYmICFkLT5lbnRyaWVzKSB7CisJCWtmcmVlKGQpOworCQlkZXYtPm1sX3ByaXYgPSBOVUxMOworCX0KIAogIG91dDoKIAlzcGluX3VubG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwpAQCAtNTYzLDEwICs1MzQsNiBAQAogCS8qIHNjaGVkdWxlIHRoZSByZWNlaXZlciBpdGVtIGZvciBkZWxldGlvbiAqLwogCWlmIChyKQogCQljYWxsX3JjdSgmci0+cmN1LCBjYW5fcnhfZGVsZXRlX3JlY2VpdmVyKTsKLQotCS8qIHNjaGVkdWxlIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGZvciBkZWxldGlvbiAqLwotCWlmIChkKQotCQljYWxsX3JjdSgmZC0+cmN1LCBjYW5fcnhfZGVsZXRlX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGNhbl9yeF91bnJlZ2lzdGVyKTsKIApAQCAtNzgwLDQ4ICs3NDcsMzUgQEAKIAogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCi0JCS8qCi0JCSAqIGNyZWF0ZSBuZXcgZGV2X3Jjdl9saXN0cyBmb3IgdGhpcyBkZXZpY2UKLQkJICoKLQkJICogTi5CLiB6ZXJvaW5nIHRoZSBzdHJ1Y3QgaXMgdGhlIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24KLQkJICogZm9yIHRoZSBlbWJlZGRlZCBobGlzdF9oZWFkIHN0cnVjdHMuCi0JCSAqIEFub3RoZXIgbGlzdCB0eXBlLCBlLmcuIGxpc3RfaGVhZCwgd291bGQgcmVxdWlyZQotCQkgKiBleHBsaWNpdCBpbml0aWFsaXphdGlvbi4KLQkJICovCi0KKwkJLyogY3JlYXRlIG5ldyBkZXZfcmN2X2xpc3RzIGZvciB0aGlzIGRldmljZSAqLwogCQlkID0ga3phbGxvYyhzaXplb2YoKmQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiY2FuOiBhbGxvY2F0aW9uIG9mIHJlY2VpdmUgbGlzdCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIE5PVElGWV9ET05FOwogCQl9Ci0JCWQtPmRldiA9IGRldjsKLQotCQlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKLQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZkLT5saXN0LCAmY2FuX3J4X2Rldl9saXN0KTsKLQkJc3Bpbl91bmxvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKKwkJQlVHX09OKGRldi0+bWxfcHJpdik7CisJCWRldi0+bWxfcHJpdiA9IGQ7CiAKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKIAotCQlkID0gZmluZF9kZXZfcmN2X2xpc3RzKGRldik7CisJCWQgPSBkZXYtPm1sX3ByaXY7CiAJCWlmIChkKSB7Ci0JCQlpZiAoZC0+ZW50cmllcykgeworCQkJaWYgKGQtPmVudHJpZXMpCiAJCQkJZC0+cmVtb3ZlX29uX3plcm9fZW50cmllcyA9IDE7Ci0JCQkJZCA9IE5VTEw7Ci0JCQl9IGVsc2UKLQkJCQlobGlzdF9kZWxfcmN1KCZkLT5saXN0KTsKKwkJCWVsc2UgeworCQkJCWtmcmVlKGQpOworCQkJCWRldi0+bWxfcHJpdiA9IE5VTEw7CisJCQl9CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJjYW46IG5vdGlmaWVyOiByZWNlaXZlIGxpc3Qgbm90ICIKIAkJCSAgICAgICAiZm91bmQgZm9yIGRldiAlc1xuIiwgZGV2LT5uYW1lKTsKIAogCQlzcGluX3VubG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwogCi0JCWlmIChkKQotCQkJY2FsbF9yY3UoJmQtPnJjdSwgY2FuX3J4X2RlbGV0ZV9kZXZpY2UpOwotCiAJCWJyZWFrOwogCX0KIApAQCAtODUzLDIxICs4MDcsMTMgQEAKIHsKIAlwcmludGsoYmFubmVyKTsKIAorCW1lbXNldCgmY2FuX3J4X2FsbGRldl9saXN0LCAwLCBzaXplb2YoY2FuX3J4X2FsbGRldl9saXN0KSk7CisKIAlyY3ZfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiY2FuX3JlY2VpdmVyIiwgc2l6ZW9mKHN0cnVjdCByZWNlaXZlciksCiAJCQkJICAgICAgMCwgMCwgTlVMTCk7CiAJaWYgKCFyY3ZfY2FjaGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyoKLQkgKiBJbnNlcnQgY2FuX3J4X2FsbGRldl9saXN0IGZvciByZWNlcHRpb24gb24gYWxsIGRldmljZXMuCi0JICogVGhpcyBzdHJ1Y3QgaXMgemVybyBpbml0aWFsaXplZCB3aGljaCBpcyBjb3JyZWN0IGZvciB0aGUKLQkgKiBlbWJlZGRlZCBobGlzdCBoZWFkcywgdGhlIGRldiBwb2ludGVyLCBhbmQgdGhlIGVudHJpZXMgY291bnRlci4KLQkgKi8KLQotCXNwaW5fbG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmY2FuX3J4X2FsbGRldl9saXN0Lmxpc3QsICZjYW5fcnhfZGV2X2xpc3QpOwotCXNwaW5fdW5sb2NrKCZjYW5fcmN2bGlzdHNfbG9jayk7Ci0KIAlpZiAoc3RhdHNfdGltZXIpIHsKIAkJLyogdGhlIHN0YXRpc3RpY3MgYXJlIHVwZGF0ZWQgZXZlcnkgc2Vjb25kICh0aW1lciB0cmlnZ2VyZWQpICovCiAJCXNldHVwX3RpbWVyKCZjYW5fc3RhdHRpbWVyLCBjYW5fc3RhdF91cGRhdGUsIDApOwpAQCAtODg3LDggKzgzMyw3IEBACiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBjYW5fZXhpdCh2b2lkKQogewotCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwotCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJaWYgKHN0YXRzX3RpbWVyKQogCQlkZWxfdGltZXIoJmNhbl9zdGF0dGltZXIpOwpAQCAtOTAwLDE0ICs4NDUsMTkgQEAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2FuX25ldGRldl9ub3RpZmllcik7CiAJc29ja191bnJlZ2lzdGVyKFBGX0NBTik7CiAKLQkvKiByZW1vdmUgY2FuX3J4X2Rldl9saXN0ICovCi0Jc3Bpbl9sb2NrKCZjYW5fcmN2bGlzdHNfbG9jayk7Ci0JaGxpc3RfZGVsKCZjYW5fcnhfYWxsZGV2X2xpc3QubGlzdCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkLCBuLCBuZXh0LCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7Ci0JCWhsaXN0X2RlbCgmZC0+bGlzdCk7Ci0JCWtmcmVlKGQpOworCS8qIHJlbW92ZSBjcmVhdGVkIGRldl9yY3ZfbGlzdHMgZnJvbSBzdGlsbCByZWdpc3RlcmVkIENBTiBkZXZpY2VzICovCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldGRldl9yY3UoJmluaXRfbmV0LCBkZXYpIHsKKwkJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfQ0FOICYmIGRldi0+bWxfcHJpdil7CisKKwkJCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkID0gZGV2LT5tbF9wcml2OworCisJCQlCVUdfT04oZC0+ZW50cmllcyk7CisJCQlrZnJlZShkKTsKKwkJCWRldi0+bWxfcHJpdiA9IE5VTEw7CisJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICovCiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmggYi9uZXQvY2FuL2FmX2Nhbi5oCmluZGV4IDE4ZjkxZTMuLjM0MjUzYjggMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmgKKysrIGIvbmV0L2Nhbi9hZl9jYW4uaApAQCAtNjMsMTAgKzYzLDggQEAKIAogZW51bSB7IFJYX0VSUiwgUlhfQUxMLCBSWF9GSUwsIFJYX0lOViwgUlhfRUZGLCBSWF9NQVggfTsKIAorLyogcGVyIGRldmljZSByZWNlaXZlIGZpbHRlcnMgbGlua2VkIGF0IGRldi0+bWxfcHJpdiAqLwogc3RydWN0IGRldl9yY3ZfbGlzdHMgewotCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBobGlzdF9oZWFkIHJ4W1JYX01BWF07CiAJc3RydWN0IGhsaXN0X2hlYWQgcnhfc2ZmWzB4ODAwXTsKIAlpbnQgcmVtb3ZlX29uX3plcm9fZW50cmllczsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcHJvYy5jIGIvbmV0L2Nhbi9wcm9jLmMKaW5kZXggOWI5YWQyOS4uZjQyNjVjYyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9wcm9jLmMKKysrIGIvbmV0L2Nhbi9wcm9jLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvY2FuL2NvcmUuaD4KIAogI2luY2x1ZGUgImFmX2Nhbi5oIgpAQCAtODQsNiArODUsOSBAQAogCVtSWF9FRkZdID0gInJ4X2VmZiIsCiB9OwogCisvKiByZWNlaXZlIGZpbHRlcnMgc3Vic2NyaWJlZCBmb3IgJ2FsbCcgQ0FOIGRldmljZXMgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2X3Jjdl9saXN0cyBjYW5fcnhfYWxsZGV2X2xpc3Q7CisKIC8qCiAgKiBhZl9jYW4gc3RhdGlzdGljcyBzdHVmZgogICovCkBAIC0xOTAsMTAgKzE5NCw2IEBACiAKIC8qCiAgKiBwcm9jIHJlYWQgZnVuY3Rpb25zCi0gKgotICogRnJvbSBrbm93biB1c2UtY2FzZXMgd2UgZXhwZWN0IGFib3V0IDEwIGVudHJpZXMgaW4gYSByZWNlaXZlIGxpc3QgdG8gYmUKLSAqIHByaW50ZWQgaW4gdGhlIHByb2NfZnMuIFNvIFBBR0VfU0laRSBpcyBkZWZpbml0ZWx5IGVub3VnaCBzcGFjZSBoZXJlLgotICoKICAqLwogCiBzdGF0aWMgdm9pZCBjYW5fcHJpbnRfcmN2bGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBobGlzdF9oZWFkICpyeF9saXN0LApAQCAtMjAyLDcgKzIwMiw2IEBACiAJc3RydWN0IHJlY2VpdmVyICpyOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyLCBuLCByeF9saXN0LCBsaXN0KSB7CiAJCWNoYXIgKmZtdCA9IChyLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpPwogCQkJIiAgICUtNXMgICUwOFggICUwOHggICUwOHggICUwOHggICU4bGQgICVzXG4iIDoKQEAgLTIxMiw3ICsyMTEsNiBAQAogCQkJCSh1bnNpZ25lZCBsb25nKXItPmZ1bmMsICh1bnNpZ25lZCBsb25nKXItPmRhdGEsCiAJCQkJci0+bWF0Y2hlcywgci0+aWRlbnQpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgY2FuX3ByaW50X3JlY3ZfYmFubmVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTM0NiwyNCArMzQ0LDM5IEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZfcmN2X2xpc3RzICpkKQoreworCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4W2lkeF0pKSB7CisJCWNhbl9wcmludF9yZWN2X2Jhbm5lcihtKTsKKwkJY2FuX3ByaW50X3Jjdmxpc3QobSwgJmQtPnJ4W2lkeF0sIGRldik7CisJfSBlbHNlCisJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGRldikpOworCit9CisKIHN0YXRpYyBpbnQgY2FuX3Jjdmxpc3RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAkvKiBkb3VibGUgY2FzdCB0byBwcmV2ZW50IEdDQyB3YXJuaW5nICovCiAJaW50IGlkeCA9IChpbnQpKGxvbmcpbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCiAJc2VxX3ByaW50ZihtLCAiXG5yZWNlaXZlIGxpc3QgJyVzJzpcbiIsIHJ4X2xpc3RfbmFtZVtpZHhdKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewogCi0JCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4W2lkeF0pKSB7Ci0JCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7Ci0JCQljYW5fcHJpbnRfcmN2bGlzdChtLCAmZC0+cnhbaWR4XSwgZC0+ZGV2KTsKLQkJfSBlbHNlCi0JCQlzZXFfcHJpbnRmKG0sICIgICglczogbm8gZW50cnkpXG4iLCBETkFNRShkLT5kZXYpKTsKKwkvKiByZWNlaXZlIGxpc3QgZm9yICdhbGwnIENBTiBkZXZpY2VzIChkZXYgPT0gTlVMTCkgKi8KKwlkID0gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwljYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKG0sIGlkeCwgTlVMTCwgZCk7CisKKwkvKiByZWNlaXZlIGxpc3QgZm9yIHJlZ2lzdGVyZWQgQ0FOIGRldmljZXMgKi8KKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTiAmJiBkZXYtPm1sX3ByaXYpCisJCQljYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKG0sIGlkeCwgZGV2LCBkZXYtPm1sX3ByaXYpOwogCX0KKwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJc2VxX3B1dGMobSwgJ1xuJyk7CkBAIC0zODMsMzQgKzM5Niw1MCBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgY2FuX3Jjdmxpc3Rfc2ZmX3Byb2Nfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICptLAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQpCit7CisJaW50IGk7CisJaW50IGFsbF9lbXB0eSA9IDE7CisKKwkvKiBjaGVjayB3ZXRoZXIgYXQgbGVhc3Qgb25lIGxpc3QgaXMgbm9uLWVtcHR5ICovCisJZm9yIChpID0gMDsgaSA8IDB4ODAwOyBpKyspCisJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpIHsKKwkJCWFsbF9lbXB0eSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFhbGxfZW1wdHkpIHsKKwkJY2FuX3ByaW50X3JlY3ZfYmFubmVyKG0pOworCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgeworCQkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhfc2ZmW2ldKSkKKwkJCQljYW5fcHJpbnRfcmN2bGlzdChtLCAmZC0+cnhfc2ZmW2ldLCBkZXYpOworCQl9CisJfSBlbHNlCisJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGRldikpOworfQorCiBzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3NmZl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAkvKiBSWF9TRkYgKi8KIAlzZXFfcHV0cyhtLCAiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewotCQlpbnQgaSwgYWxsX2VtcHR5ID0gMTsKLQkJLyogY2hlY2sgd2V0aGVyIGF0IGxlYXN0IG9uZSBsaXN0IGlzIG5vbi1lbXB0eSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykKLQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpIHsKLQkJCQlhbGxfZW1wdHkgPSAwOwotCQkJCWJyZWFrOwotCQkJfQogCi0JCWlmICghYWxsX2VtcHR5KSB7Ci0JCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgewotCQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpCi0JCQkJCWNhbl9wcmludF9yY3ZsaXN0KG0sICZkLT5yeF9zZmZbaV0sCi0JCQkJCQkJICBkLT5kZXYpOwotCQkJfQotCQl9IGVsc2UKLQkJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOworCS8qIHNmZiByZWNlaXZlIGxpc3QgZm9yICdhbGwnIENBTiBkZXZpY2VzIChkZXYgPT0gTlVMTCkgKi8KKwlkID0gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwljYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93X29uZShtLCBOVUxMLCBkKTsKKworCS8qIHNmZiByZWNlaXZlIGxpc3QgZm9yIHJlZ2lzdGVyZWQgQ0FOIGRldmljZXMgKi8KKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTiAmJiBkZXYtPm1sX3ByaXYpCisJCQljYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93X29uZShtLCBkZXYsIGRldi0+bWxfcHJpdik7CiAJfQorCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlzZXFfcHV0YyhtLCAnXG4nKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYmU5OTI0Zi4uYTAwOGY2OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE4NTMsNiArMTg1MywxNCBAQAogCiAJCXNrYi0+bmV4dCA9IG5za2ItPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOworCisJCS8qCisJCSAqIElmIGRldmljZSBkb2VzbnQgbmVlZCBuc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCisJCSAqIGl0cyBob3QgaW4gdGhpcyBjcHUgY2FjaGUKKwkJICovCisJCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfWE1JVF9EU1RfUkVMRUFTRSkKKwkJCXNrYl9kc3RfZHJvcChuc2tiKTsKKwogCQlyYyA9IG9wcy0+bmRvX3N0YXJ0X3htaXQobnNrYiwgZGV2KTsKIAkJaWYgKHVubGlrZWx5KHJjICE9IE5FVERFVl9UWF9PSykpIHsKIAkJCWlmIChyYyAmIH5ORVRERVZfVFhfTUFTSykKQEAgLTI0MjIsNiArMjQzMCw3IEBACiAJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgKnB0X3ByZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpudWxsX29yX29yaWc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm51bGxfb3JfYm9uZDsKIAlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAJX19iZTE2IHR5cGU7CiAKQEAgLTI0ODcsMTIgKzI0OTYsMjQgQEAKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKKwkvKgorCSAqIE1ha2Ugc3VyZSBmcmFtZXMgcmVjZWl2ZWQgb24gVkxBTiBpbnRlcmZhY2VzIHN0YWNrZWQgb24KKwkgKiBib25kaW5nIGludGVyZmFjZXMgc3RpbGwgbWFrZSB0aGVpciB3YXkgdG8gYW55IGJhc2UgYm9uZGluZworCSAqIGRldmljZSB0aGF0IG1heSBoYXZlIHJlZ2lzdGVyZWQgZm9yIGEgc3BlY2lmaWMgcHR5cGUuICBUaGUKKwkgKiBoYW5kbGVyIG1heSBoYXZlIHRvIGFkanVzdCBza2ItPmRldiBhbmQgb3JpZ19kZXYuCisJICovCisJbnVsbF9vcl9ib25kID0gTlVMTDsKKwlpZiAoKHNrYi0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSAmJgorCSAgICAodmxhbl9kZXZfcmVhbF9kZXYoc2tiLT5kZXYpLT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpKSB7CisJCW51bGxfb3JfYm9uZCA9IHZsYW5fZGV2X3JlYWxfZGV2KHNrYi0+ZGV2KTsKKwl9CisKIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKIAkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewotCQlpZiAocHR5cGUtPnR5cGUgPT0gdHlwZSAmJgotCQkgICAgKHB0eXBlLT5kZXYgPT0gbnVsbF9vcl9vcmlnIHx8IHB0eXBlLT5kZXYgPT0gc2tiLT5kZXYgfHwKLQkJICAgICBwdHlwZS0+ZGV2ID09IG9yaWdfZGV2KSkgeworCQlpZiAocHR5cGUtPnR5cGUgPT0gdHlwZSAmJiAocHR5cGUtPmRldiA9PSBudWxsX29yX29yaWcgfHwKKwkJICAgICBwdHlwZS0+ZGV2ID09IHNrYi0+ZGV2IHx8IHB0eXBlLT5kZXYgPT0gb3JpZ19kZXYgfHwKKwkJICAgICBwdHlwZS0+ZGV2ID09IG51bGxfb3JfYm9uZCkpIHsKIAkJCWlmIChwdF9wcmV2KQogCQkJCXJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgcHRfcHJldiwgb3JpZ19kZXYpOwogCQkJcHRfcHJldiA9IHB0eXBlOwpAQCAtMzE4NSw3ICszMjA2LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBkZXZfZ2V0X3N0YXRzKGRldik7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIiU2czolOGx1ICU3bHUgJTRsdSAlNGx1ICU0bHUgJTVsdSAlMTBsdSAlOWx1ICIKKwlzZXFfcHJpbnRmKHNlcSwgIiU2czogJTdsdSAlN2x1ICU0bHUgJTRsdSAlNGx1ICU1bHUgJTEwbHUgJTlsdSAiCiAJCSAgICIlOGx1ICU3bHUgJTRsdSAlNGx1ICU0bHUgJTVsdSAlN2x1ICUxMGx1XG4iLAogCQkgICBkZXYtPm5hbWUsIHN0YXRzLT5yeF9ieXRlcywgc3RhdHMtPnJ4X3BhY2tldHMsCiAJCSAgIHN0YXRzLT5yeF9lcnJvcnMsCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJmYTNlNzguLjkzYzRlMDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC05Myw3ICs5Myw3IEBACiAKIAogLyogUGlwZSBidWZmZXIgb3BlcmF0aW9ucyBmb3IgYSBzb2NrZXQuICovCi1zdGF0aWMgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgc29ja19waXBlX2J1Zl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgc29ja19waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZSA9IDAsCiAJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAogCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm9iZS5jIGIvbmV0L2RjY3AvcHJvYmUuYwppbmRleCBkYzMyODQyLi5hMTM2MmRjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm9iZS5jCisrKyBiL25ldC9kY2NwL3Byb2JlLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHByb2NuYW1lW10gPSAiZGNjcHByb2JlIjsKIAogc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IGtmaWZvCSAgKmZpZm87CisJc3RydWN0IGtmaWZvCSAgZmlmbzsKIAlzcGlubG9ja190CSAgbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXN0cnVjdCB0aW1lc3BlYwkgIHRzdGFydDsKQEAgLTY3LDcgKzY3LDcgQEAKIAlsZW4gKz0gdnNjbnByaW50Zih0YnVmK2xlbiwgc2l6ZW9mKHRidWYpLWxlbiwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CiAKLQlrZmlmb19wdXQoZGNjcHcuZmlmbywgdGJ1ZiwgbGVuKTsKKwlrZmlmb19pbl9sb2NrZWQoJmRjY3B3LmZpZm8sIHRidWYsIGxlbiwgJmRjY3B3LmxvY2spOwogCXdha2VfdXAoJmRjY3B3LndhaXQpOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAKIAogc3RhdGljIGludCBkY2NwcHJvYmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlrZmlmb19yZXNldChkY2Nwdy5maWZvKTsKKwlrZmlmb19yZXNldCgmZGNjcHcuZmlmbyk7CiAJZ2V0bnN0aW1lb2ZkYXkoJmRjY3B3LnRzdGFydCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRjY3B3LndhaXQsCi0JCQkJCSBfX2tmaWZvX2xlbihkY2Nwdy5maWZvKSAhPSAwKTsKKwkJCQkJIGtmaWZvX2xlbigmZGNjcHcuZmlmbykgIT0gMCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9mcmVlOwogCi0JY250ID0ga2ZpZm9fZ2V0KGRjY3B3LmZpZm8sIHRidWYsIGxlbik7CisJY250ID0ga2ZpZm9fb3V0X2xvY2tlZCgmZGNjcHcuZmlmbywgdGJ1ZiwgbGVuLCAmZGNjcHcubG9jayk7CiAJZXJyb3IgPSBjb3B5X3RvX3VzZXIoYnVmLCB0YnVmLCBjbnQpID8gLUVGQVVMVCA6IDA7CiAKIG91dF9mcmVlOgpAQCAtMTU2LDEwICsxNTYsOCBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGNjcHcud2FpdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmRjY3B3LmxvY2spOwotCWRjY3B3LmZpZm8gPSBrZmlmb19hbGxvYyhidWZzaXplLCBHRlBfS0VSTkVMLCAmZGNjcHcubG9jayk7Ci0JaWYgKElTX0VSUihkY2Nwdy5maWZvKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGNjcHcuZmlmbyk7Ci0KKwlpZiAoa2ZpZm9fYWxsb2MoJmRjY3B3LmZpZm8sIGJ1ZnNpemUsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gcmV0OwogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCBwcm9jbmFtZSwgU19JUlVTUiwgJmRjY3Bwcm9iZV9mb3BzKSkKIAkJZ290byBlcnIwOwogCkBAIC0xNzIsMTQgKzE3MCwxNCBAQAogZXJyMToKIAlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCBwcm9jbmFtZSk7CiBlcnIwOgotCWtmaWZvX2ZyZWUoZGNjcHcuZmlmbyk7CisJa2ZpZm9fZnJlZSgmZGNjcHcuZmlmbyk7CiAJcmV0dXJuIHJldDsKIH0KIG1vZHVsZV9pbml0KGRjY3Bwcm9iZV9pbml0KTsKIAogc3RhdGljIF9fZXhpdCB2b2lkIGRjY3Bwcm9iZV9leGl0KHZvaWQpCiB7Ci0Ja2ZpZm9fZnJlZShkY2Nwdy5maWZvKTsKKwlrZmlmb19mcmVlKCZkY2Nwdy5maWZvKTsKIAlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCBwcm9jbmFtZSk7CiAJdW5yZWdpc3Rlcl9qcHJvYmUoJmRjY3Bfc2VuZF9wcm9iZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9ldGhlcm5ldC9ldGguYyBiL25ldC9ldGhlcm5ldC9ldGguYwppbmRleCBkZDNkYjg4Li4yMDVhMWMxIDEwMDY0NAotLS0gYS9uZXQvZXRoZXJuZXQvZXRoLmMKKysrIGIvbmV0L2V0aGVybmV0L2V0aC5jCkBAIC03Myw4ICs3Myw4IEBACiAgKiBAbGVuOiAgIHBhY2tldCBsZW5ndGggKDw9IHNrYi0+bGVuKQogICoKICAqCi0gKiBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zIHdlIHB1dCB0aGUgbGVuZ3RoCi0gKiBpbiBoZXJlIGluc3RlYWQuIEl0IGlzIHVwIHRvIHRoZSA4MDIuMiBsYXllciB0byBjYXJyeSBwcm90b2NvbCBpbmZvcm1hdGlvbi4KKyAqIFNldCB0aGUgcHJvdG9jb2wgdHlwZS4gRm9yIGEgcGFja2V0IG9mIHR5cGUgRVRIX1BfODAyXzMvMiB3ZSBwdXQgdGhlIGxlbmd0aAorICogaW4gaGVyZSBpbnN0ZWFkLgogICovCiBpbnQgZXRoX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCSAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLApAQCAtODIsNyArODIsNyBAQAogewogCXN0cnVjdCBldGhoZHIgKmV0aCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CiAKLQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykKKwlpZiAodHlwZSAhPSBFVEhfUF84MDJfMyAmJiB0eXBlICE9IEVUSF9QXzgwMl8yKQogCQlldGgtPmhfcHJvdG8gPSBodG9ucyh0eXBlKTsKIAllbHNlCiAJCWV0aC0+aF9wcm90byA9IGh0b25zKGxlbik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCA3MDQ5MWQ5Li4wYzk0YTFhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLiBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gdXNlIERIQ1AsIGEgREhDUCBzZXJ2ZXIKIAkgIG11c3QgYmUgb3BlcmF0aW5nIG9uIHlvdXIgbmV0d29yay4gIFJlYWQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQ+IGZvciBkZXRhaWxzLgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzcm9vdC50eHQ+IGZvciBkZXRhaWxzLgogCiBjb25maWcgSVBfUE5QX0JPT1RQCiAJYm9vbCAiSVA6IEJPT1RQIHN1cHBvcnQiCkBAIC0xODEsNyArMTgxLDcgQEAKIAkgIGRvZXMgQk9PVFAgaXRzZWxmLCBwcm92aWRpbmcgYWxsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUga2VybmVsCiAJICBjb21tYW5kIGxpbmUsIHlvdSBjYW4gc2F5IE4gaGVyZS4gSWYgdW5zdXJlLCBzYXkgWS4gTm90ZSB0aGF0IGlmIHlvdQogCSAgd2FudCB0byB1c2UgQk9PVFAsIGEgQk9PVFAgc2VydmVyIG11c3QgYmUgb3BlcmF0aW5nIG9uIHlvdXIgbmV0d29yay4KLQkgIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCisJICBSZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc3Jvb3QudHh0PiBmb3IgZGV0YWlscy4KIAogY29uZmlnIElQX1BOUF9SQVJQCiAJYm9vbCAiSVA6IFJBUlAgc3VwcG9ydCIKQEAgLTE5NCw3ICsxOTQsNyBAQAogCSAgb2xkZXIgcHJvdG9jb2wgd2hpY2ggaXMgYmVpbmcgb2Jzb2xldGVkIGJ5IEJPT1RQIGFuZCBESENQKSwgc2F5IFkKIAkgIGhlcmUuIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byB1c2UgUkFSUCwgYSBSQVJQIHNlcnZlciBtdXN0IGJlCiAJICBvcGVyYXRpbmcgb24geW91ciBuZXR3b3JrLiBSZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0PiBmb3IgZGV0YWlscy4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc3Jvb3QudHh0PiBmb3IgZGV0YWlscy4KIAogIyBub3QgeWV0IHJlYWR5Li4KICMgICBib29sICcgICAgSVA6IEFSUCBzdXBwb3J0JyBDT05GSUdfSVBfUE5QX0FSUApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBjOTVjZDkzLi4wNzg3MDkyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtNzAsNiArNzAsNyBAQAogICoJCQkJCWJvbmRpbmcgY2FuIGNoYW5nZSB0aGUgc2tiIGJlZm9yZQogICoJCQkJCXNlbmRpbmcgKGUuZy4gaW5zZXJ0IDgwMjFxIHRhZykuCiAgKgkJSGFyYWxkIFdlbHRlCToJY29udmVydCB0byBtYWtlIHVzZSBvZiBqZW5raW5zIGhhc2gKKyAqCQlKZXNwZXIgRC4gQnJvdWVyOiAgICAgICBQcm94eSBBUlAgUFZMQU4gUkZDIDMwNjkgc3VwcG9ydC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01MjQsMTIgKzUyNSwxNSBAQAogLyoKICAqIENoZWNrIGlmIHdlIGNhbiB1c2UgcHJveHkgQVJQIGZvciB0aGlzIHBhdGgKICAqLwotCi1zdGF0aWMgaW5saW5lIGludCBhcnBfZndkX3Byb3h5KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldiwgc3RydWN0IHJ0YWJsZSAqcnQpCitzdGF0aWMgaW5saW5lIGludCBhcnBfZndkX3Byb3h5KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAlzdHJ1Y3QgcnRhYmxlICpydCkKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlICpvdXRfZGV2OwogCWludCBpbWksIG9taSA9IC0xOwogCisJaWYgKHJ0LT51LmRzdC5kZXYgPT0gZGV2KQorCQlyZXR1cm4gMDsKKwogCWlmICghSU5fREVWX1BST1hZX0FSUChpbl9kZXYpKQogCQlyZXR1cm4gMDsKIApAQCAtNTQ4LDYgKzU1Miw0MyBAQAogfQogCiAvKgorICogQ2hlY2sgZm9yIFJGQzMwNjkgcHJveHkgYXJwIHByaXZhdGUgVkxBTiAoYWxsb3cgdG8gc2VuZCBiYWNrIHRvIHNhbWUgZGV2KQorICoKKyAqIFJGQzMwNjkgc3VwcG9ydHMgcHJveHkgYXJwIHJlcGxpZXMgYmFjayB0byB0aGUgc2FtZSBpbnRlcmZhY2UuICBUaGlzCisgKiBpcyBkb25lIHRvIHN1cHBvcnQgKGV0aGVybmV0KSBzd2l0Y2ggZmVhdHVyZXMsIGxpa2UgUkZDIDMwNjksIHdoZXJlCisgKiB0aGUgaW5kaXZpZHVhbCBwb3J0cyBhcmUgbm90IGFsbG93ZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBlYWNoCisgKiBvdGhlciwgQlVUIHRoZXkgYXJlIGFsbG93ZWQgdG8gdGFsayB0byB0aGUgdXBzdHJlYW0gcm91dGVyLiAgQXMKKyAqIGRlc2NyaWJlZCBpbiBSRkMgMzA2OSwgaXQgaXMgcG9zc2libGUgdG8gYWxsb3cgdGhlc2UgaG9zdHMgdG8KKyAqIGNvbW11bmljYXRlIHRocm91Z2ggdGhlIHVwc3RyZWFtIHJvdXRlciwgYnkgcHJveHlfYXJwJ2luZy4KKyAqCisgKiBSRkMgMzA2OTogIlZMQU4gQWdncmVnYXRpb24gZm9yIEVmZmljaWVudCBJUCBBZGRyZXNzIEFsbG9jYXRpb24iCisgKgorICogIFRoaXMgdGVjaG5vbG9neSBpcyBrbm93biBieSBkaWZmZXJlbnQgbmFtZXM6CisgKiAgICBJbiBSRkMgMzA2OSBpdCBpcyBjYWxsZWQgVkxBTiBBZ2dyZWdhdGlvbi4KKyAqICAgIENpc2NvIGFuZCBBbGxpZWQgVGVsZXN5biBjYWxsIGl0IFByaXZhdGUgVkxBTi4KKyAqICAgIEhld2xldHQtUGFja2FyZCBjYWxsIGl0IFNvdXJjZS1Qb3J0IGZpbHRlcmluZyBvciBwb3J0LWlzb2xhdGlvbi4KKyAqICAgIEVyaWNzc29uIGNhbGwgaXQgTUFDLUZvcmNlZCBGb3J3YXJkaW5nIChSRkMgRHJhZnQpLgorICoKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXJwX2Z3ZF9wdmxhbihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwJc3RydWN0IHJ0YWJsZSAqcnQsCisJCQkJX19iZTMyIHNpcCwgX19iZTMyIHRpcCkKK3sKKwkvKiBQcml2YXRlIFZMQU4gaXMgb25seSBjb25jZXJuZWQgYWJvdXQgdGhlIHNhbWUgZXRoZXJuZXQgc2VnbWVudCAqLworCWlmIChydC0+dS5kc3QuZGV2ICE9IGRldikKKwkJcmV0dXJuIDA7CisKKwkvKiBEb24ndCByZXBseSBvbiBzZWxmIHByb2JlcyAob2Z0ZW4gZG9uZSBieSB3aW5kb3d6IGJveGVzKSovCisJaWYgKHNpcCA9PSB0aXApCisJCXJldHVybiAwOworCisJaWYgKElOX0RFVl9QUk9YWV9BUlBfUFZMQU4oaW5fZGV2KSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKICAqCUludGVyZmFjZSB0byBsaW5rIGxheWVyOiBzZW5kIHJvdXRpbmUgYW5kIHJlY2VpdmUgaGFuZGxlci4KICAqLwogCkBAIC04MzMsOCArODc0LDExIEBACiAJCQl9CiAJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmIChJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSB7Ci0JCQkgICAgaWYgKGFkZHJfdHlwZSA9PSBSVE5fVU5JQ0FTVCAgJiYgcnQtPnUuZHN0LmRldiAhPSBkZXYgJiYKLQkJCSAgICAgKGFycF9md2RfcHJveHkoaW5fZGV2LCBydCkgfHwgcG5laWdoX2xvb2t1cCgmYXJwX3RibCwgbmV0LCAmdGlwLCBkZXYsIDApKSkgeworCQkJaWYgKGFkZHJfdHlwZSA9PSBSVE5fVU5JQ0FTVCAgJiYKKwkJCSAgICAoYXJwX2Z3ZF9wcm94eShpbl9kZXYsIGRldiwgcnQpIHx8CisJCQkgICAgIGFycF9md2RfcHZsYW4oaW5fZGV2LCBkZXYsIHJ0LCBzaXAsIHRpcCkgfHwKKwkJCSAgICAgcG5laWdoX2xvb2t1cCgmYXJwX3RibCwgbmV0LCAmdGlwLCBkZXYsIDApKSkKKwkJCXsKIAkJCQluID0gbmVpZ2hfZXZlbnRfbnMoJmFycF90YmwsIHNoYSwgJnNpcCwgZGV2KTsKIAkJCQlpZiAobikKIAkJCQkJbmVpZ2hfcmVsZWFzZShuKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCAwNDBjNGYwLi5jZDcxYTM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xNDA4LDYgKzE0MDgsNyBAQAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfSUdOT1JFLCAiYXJwX2lnbm9yZSIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfQUNDRVBULCAiYXJwX2FjY2VwdCIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfTk9USUZZLCAiYXJwX25vdGlmeSIpLAorCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShQUk9YWV9BUlBfUFZMQU4sICJwcm94eV9hcnBfcHZsYW4iKSwKIAogCQlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShOT1hGUk0sICJkaXNhYmxlX3hmcm0iKSwKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggNGUwOGI3Zi4uMTBhNmE2MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQAogCiAvKgogICogIERlY29kZSBhbnkgSVAgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoZSAiaXA9IiBvciAibmZzYWRkcnM9IiBrZXJuZWwKLSAqICBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLiAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQuCisgKiAgY29tbWFuZCBsaW5lIHBhcmFtZXRlci4gIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNyb290LnR4dC4KICAqLwogc3RhdGljIGludCBfX2luaXQgaWNfcHJvdG9fbmFtZShjaGFyICpuYW1lKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZTQ0NjQ5Ni4uMWNjMzM5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xOTg4LDggKzE5ODgsMTMgQEAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpIHsKIAkJLyogTm90IElQIChpLmUuIEFSUCkuIERvIG5vdCBjcmVhdGUgcm91dGUsIGlmIGl0IGlzCiAJCSAqIGludmFsaWQgZm9yIHByb3h5IGFycC4gRE5BVCByb3V0ZXMgYXJlIGFsd2F5cyB2YWxpZC4KKwkJICoKKwkJICogUHJveHkgYXJwIGZlYXR1cmUgaGF2ZSBiZWVuIGV4dGVuZGVkIHRvIGFsbG93LCBBUlAKKwkJICogcmVwbGllcyBiYWNrIHRvIHRoZSBzYW1lIGludGVyZmFjZSwgdG8gc3VwcG9ydAorCQkgKiBQcml2YXRlIFZMQU4gc3dpdGNoIHRlY2hub2xvZ2llcy4gU2VlIGFycC5jLgogCQkgKi8KLQkJaWYgKG91dF9kZXYgPT0gaW5fZGV2KSB7CisJCWlmIChvdXRfZGV2ID09IGluX2RldiAmJgorCQkgICAgSU5fREVWX1BST1hZX0FSUF9QVkxBTihpbl9kZXYpID09IDApIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCA2NmZkODBlLi41YzI0ZGI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC0zNTgsNyArMzU4LDggQEAKIAogCXRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3codGNwX2Z1bGxfc3BhY2Uoc2spLCByZXEtPm1zcywKIAkJCQkgICZyZXEtPnJjdl93bmQsICZyZXEtPndpbmRvd19jbGFtcCwKLQkJCQkgIGlyZXEtPndzY2FsZV9vaywgJnJjdl93c2NhbGUpOworCQkJCSAgaXJlcS0+d3NjYWxlX29rLCAmcmN2X3dzY2FsZSwKKwkJCQkgIGRzdF9tZXRyaWMoJnJ0LT51LmRzdCwgUlRBWF9JTklUUldORCkpOwogCiAJaXJlcS0+cmN2X3dzY2FsZSAgPSByY3Zfd3NjYWxlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGIwYTI2YmIuLmQ1ZDY5ZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC01MzYsOCArNTM2LDcgQEAKIAkJdHAtPm5vbmFnbGUgJj0gflRDUF9OQUdMRV9QVVNIOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX21hcmtfdXJnKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBmbGFncywKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9tYXJrX3VyZyhzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKGZsYWdzICYgTVNHX09PQikKIAkJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC01NDYsMTMgKzU0NSwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9wdXNoKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgbXNzX25vdywKIAkJCSAgICBpbnQgbm9uYWdsZSkKIHsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQogCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spOworCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwogCQlpZiAoIShmbGFncyAmIE1TR19NT1JFKSB8fCBmb3JjZWRfcHVzaCh0cCkpCi0JCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOwotCQl0Y3BfbWFya191cmcodHAsIGZsYWdzLCBza2IpOworCQkJdGNwX21hcmtfcHVzaCh0cCwgdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spKTsKKworCQl0Y3BfbWFya191cmcodHAsIGZsYWdzKTsKIAkJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgbXNzX25vdywKIAkJCQkJICAoZmxhZ3MgJiBNU0dfTU9SRSkgPyBUQ1BfTkFHTEVfQ09SSyA6IG5vbmFnbGUpOwogCX0KQEAgLTg3NywxMiArODc2LDEyIEBACiAjZGVmaW5lIFRDUF9QQUdFKHNrKQkoc2stPnNrX3NuZG1zZ19wYWdlKQogI2RlZmluZSBUQ1BfT0ZGKHNrKQkoc2stPnNrX3NuZG1zZ19vZmYpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9zaXplKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9zaXplKHN0cnVjdCBzb2NrICpzaywgaW50IHNnKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWludCB0bXAgPSB0cC0+bXNzX2NhY2hlOwogCi0JaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykgeworCWlmIChzZykgewogCQlpZiAoc2tfY2FuX2dzbyhzaykpCiAJCQl0bXAgPSAwOwogCQllbHNlIHsKQEAgLTkwNiw3ICs5MDUsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGlvdmxlbiwgZmxhZ3M7CiAJaW50IG1zc19ub3csIHNpemVfZ29hbDsKLQlpbnQgZXJyLCBjb3BpZWQ7CisJaW50IHNnLCBlcnIsIGNvcGllZDsKIAlsb25nIHRpbWVvOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTkzNCw2ICs5MzMsOCBAQAogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKIAkJZ290byBvdXRfZXJyOwogCisJc2cgPSBzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfU0c7CisKIAl3aGlsZSAoLS1pb3ZsZW4gPj0gMCkgewogCQlpbnQgc2VnbGVuID0gaW92LT5pb3ZfbGVuOwogCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZnJvbSA9IGlvdi0+aW92X2Jhc2U7CkBAIC05NTksOCArOTYwLDkgQEAKIAkJCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCiAJCQkJCWdvdG8gd2FpdF9mb3Jfc25kYnVmOwogCi0JCQkJc2tiID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywgc2VsZWN0X3NpemUoc2spLAotCQkJCQkJc2stPnNrX2FsbG9jYXRpb24pOworCQkJCXNrYiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssCisJCQkJCQkJICBzZWxlY3Rfc2l6ZShzaywgc2cpLAorCQkJCQkJCSAgc2stPnNrX2FsbG9jYXRpb24pOwogCQkJCWlmICghc2tiKQogCQkJCQlnb3RvIHdhaXRfZm9yX21lbW9yeTsKIApAQCAtOTk3LDkgKzk5OSw3IEBACiAJCQkJCS8qIFdlIGNhbiBleHRlbmQgdGhlIGxhc3QgcGFnZQogCQkJCQkgKiBmcmFnbWVudC4gKi8KIAkJCQkJbWVyZ2UgPSAxOwotCQkJCX0gZWxzZSBpZiAoaSA9PSBNQVhfU0tCX0ZSQUdTIHx8Ci0JCQkJCSAgICghaSAmJgotCQkJCQkgICAhKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykpKSB7CisJCQkJfSBlbHNlIGlmIChpID09IE1BWF9TS0JfRlJBR1MgfHwgIXNnKSB7CiAJCQkJCS8qIE5lZWQgdG8gYWRkIG5ldyBmcmFnbWVudCBhbmQgY2Fubm90CiAJCQkJCSAqIGRvIHRoaXMgYmVjYXVzZSBpbnRlcmZhY2UgaXMgbm9uLVNHLAogCQkJCQkgKiBvciBiZWNhdXNlIGFsbCB0aGUgcGFnZSBzbG90cyBhcmUKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCAzODNjZTIzLi40YTE2MDVkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0xODMsNyArMTgzLDggQEAKICAqLwogdm9pZCB0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KGludCBfX3NwYWNlLCBfX3UzMiBtc3MsCiAJCQkgICAgICAgX191MzIgKnJjdl93bmQsIF9fdTMyICp3aW5kb3dfY2xhbXAsCi0JCQkgICAgICAgaW50IHdzY2FsZV9vaywgX191OCAqcmN2X3dzY2FsZSkKKwkJCSAgICAgICBpbnQgd3NjYWxlX29rLCBfX3U4ICpyY3Zfd3NjYWxlLAorCQkJICAgICAgIF9fdTMyIGluaXRfcmN2X3duZCkKIHsKIAl1bnNpZ25lZCBpbnQgc3BhY2UgPSAoX19zcGFjZSA8IDAgPyAwIDogX19zcGFjZSk7CiAKQEAgLTIzMiw3ICsyMzMsMTMgQEAKIAkJCWluaXRfY3duZCA9IDI7CiAJCWVsc2UgaWYgKG1zcyA+IDE0NjApCiAJCQlpbml0X2N3bmQgPSAzOwotCQlpZiAoKnJjdl93bmQgPiBpbml0X2N3bmQgKiBtc3MpCisJCS8qIHdoZW4gaW5pdGlhbGl6aW5nIHVzZSB0aGUgdmFsdWUgZnJvbSBpbml0X3Jjdl93bmQKKwkJICogcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgZnJvbSBhYm92ZQorCQkgKi8KKwkJaWYgKGluaXRfcmN2X3duZCAmJgorCQkgICAgKCpyY3Zfd25kID4gaW5pdF9yY3Zfd25kICogbXNzKSkKKwkJCSpyY3Zfd25kID0gaW5pdF9yY3Zfd25kICogbXNzOworCQllbHNlIGlmICgqcmN2X3duZCA+IGluaXRfY3duZCAqIG1zcykKIAkJCSpyY3Zfd25kID0gaW5pdF9jd25kICogbXNzOwogCX0KIApAQCAtMTc5NCwxMSArMTgwMSw2IEBACiB2b2lkIF9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY3VyX21zcywKIAkJCSAgICAgICBpbnQgbm9uYWdsZSkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3NlbmRfaGVhZChzayk7Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCiAJLyogSWYgd2UgYXJlIGNsb3NlZCwgdGhlIGJ5dGVzIHdpbGwgaGF2ZSB0byByZW1haW4gaGVyZS4KIAkgKiBJbiB0aW1lIGNsb3NlZG93biB3aWxsIGZpbmlzaCwgd2UgZW1wdHkgdGhlIHdyaXRlIHF1ZXVlIGFuZAogCSAqIGFsbCB3aWxsIGJlIGhhcHB5LgpAQCAtMjQyMiw3ICsyNDI0LDggQEAKIAkJCSZyZXEtPnJjdl93bmQsCiAJCQkmcmVxLT53aW5kb3dfY2xhbXAsCiAJCQlpcmVxLT53c2NhbGVfb2ssCi0JCQkmcmN2X3dzY2FsZSk7CisJCQkmcmN2X3dzY2FsZSwKKwkJCWRzdF9tZXRyaWMoZHN0LCBSVEFYX0lOSVRSV05EKSk7CiAJCWlyZXEtPnJjdl93c2NhbGUgPSByY3Zfd3NjYWxlOwogCX0KIApAQCAtMjU0OSw3ICsyNTUyLDggQEAKIAkJCQkgICZ0cC0+cmN2X3duZCwKIAkJCQkgICZ0cC0+d2luZG93X2NsYW1wLAogCQkJCSAgc3lzY3RsX3RjcF93aW5kb3dfc2NhbGluZywKLQkJCQkgICZyY3Zfd3NjYWxlKTsKKwkJCQkgICZyY3Zfd3NjYWxlLAorCQkJCSAgZHN0X21ldHJpYyhkc3QsIFJUQVhfSU5JVFJXTkQpKTsKIAogCXRwLT5yeF9vcHQucmN2X3dzY2FsZSA9IHJjdl93c2NhbGU7CiAJdHAtPnJjdl9zc3RocmVzaCA9IHRwLT5yY3Zfd25kOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcHJvYy5jIGIvbmV0L2lwdjYvcHJvYy5jCmluZGV4IGM5NjA1YzMuLjdiMTk3YjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Byb2MuYworKysgYi9uZXQvaXB2Ni9wcm9jLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAlpZiAoIW5ldC0+bWliLnByb2NfbmV0X2RldnNubXA2KQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoIWlkZXYgfHwgIWlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5KQorCWlmICghaWRldi0+c3RhdHMucHJvY19kaXJfZW50cnkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJlbW92ZV9wcm9jX2VudHJ5KGlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5LT5uYW1lLAogCQkJICBuZXQtPm1pYi5wcm9jX25ldF9kZXZzbm1wNik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggNzIwOGEwNi4uMzRkMWYwNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtMjY5LDcgKzI2OSw4IEBACiAJcmVxLT53aW5kb3dfY2xhbXAgPSB0cC0+d2luZG93X2NsYW1wID8gOmRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7CiAJdGNwX3NlbGVjdF9pbml0aWFsX3dpbmRvdyh0Y3BfZnVsbF9zcGFjZShzayksIHJlcS0+bXNzLAogCQkJCSAgJnJlcS0+cmN2X3duZCwgJnJlcS0+d2luZG93X2NsYW1wLAotCQkJCSAgaXJlcS0+d3NjYWxlX29rLCAmcmN2X3dzY2FsZSk7CisJCQkJICBpcmVxLT53c2NhbGVfb2ssICZyY3Zfd3NjYWxlLAorCQkJCSAgZHN0X21ldHJpYyhkc3QsIFJUQVhfSU5JVFJXTkQpKTsKIAogCWlyZXEtPnJjdl93c2NhbGUgPSByY3Zfd3NjYWxlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBmZWJmZDU5Li4xYzgzMmJmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTg3Niw3ICs4NzYsNyBAQAogCiAJaWYgKGdlbmhhc2ggfHwgbWVtY21wKGhhc2hfbG9jYXRpb24sIG5ld2hhc2gsIDE2KSAhPSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIk1ENSBIYXNoICVzIGZvciAoJXBJNiwgJXUpLT4oJXBJNiwgJXUpXG4iLAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiTUQ1IEhhc2ggJXMgZm9yIFslcEk2Y106JXUtPlslcEk2Y106JXVcbiIsCiAJCQkgICAgICAgZ2VuaGFzaCA/ICJmYWlsZWQiIDogIm1pc21hdGNoIiwKIAkJCSAgICAgICAmaXA2aC0+c2FkZHIsIG50b2hzKHRoLT5zb3VyY2UpLAogCQkJICAgICAgICZpcDZoLT5kYWRkciwgbnRvaHModGgtPmRlc3QpKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCmluZGV4IDgxMTk4NGQuLjhiODVkNzcgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwpAQCAtNDk2LDkgKzQ5Niw2IEBACiAKIAlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCi0JaWYgKCF0dHkpCi0JCXJldHVybjsKLQogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CiAKQEAgLTEwMDcsOSArMTAwNCw2IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKIAotCWlmICghdHR5KQotCQlyZXR1cm47Ci0KIAkvKiBpcmNvbW1fdHR5X2ZsdXNoX2J1ZmZlcih0dHkpOyAqLwogCWlyY29tbV90dHlfc2h1dGRvd24oc2VsZik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0LmggYi9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oCmluZGV4IGIwMDFjMzYuLjQzMDBkZjMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0LmgKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaApAQCAtMjQ5LDYgKzI0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgkvKiBpc3NwYWNlKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogc2tpcF9zcGFjZXMoKSAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCmluZGV4IDdkZWE4ODIuLjE1NjAyMGQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jCkBAIC03Niw5ICs3Niw4IEBACiAgICAgICAvKiBMb29rIGF0IHRoZSBuZXh0IGNvbW1hbmQgKi8KICAgICAgIHN0YXJ0ID0gbmV4dDsKIAotICAgICAgLyogU2NyYXAgd2hpdGVzcGFjZXMgYmVmb3JlIHRoZSBjb21tYW5kICovCi0gICAgICB3aGlsZShpc3NwYWNlKCpzdGFydCkpCi0Jc3RhcnQrKzsKKwkvKiBTY3JhcCB3aGl0ZXNwYWNlcyBiZWZvcmUgdGhlIGNvbW1hbmQgKi8KKwlzdGFydCA9IHNraXBfc3BhY2VzKHN0YXJ0KTsKIAogICAgICAgLyogJywnIGlzIG91ciBjb21tYW5kIHNlcGFyYXRvciAqLwogICAgICAgbmV4dCA9IHN0cmNocihzdGFydCwgJywnKTsKQEAgLTEzMyw4ICsxMzIsNyBAQAogCSAgICAgIGNoYXIgKgllbmRwOwogCiAJICAgICAgLyogU2NyYXAgd2hpdGVzcGFjZXMgYmVmb3JlIHRoZSBjb21tYW5kICovCi0JICAgICAgd2hpbGUoaXNzcGFjZSgqYmVncCkpCi0JCWJlZ3ArKzsKKwkgICAgICBiZWdwID0gc2tpcF9zcGFjZXMoYmVncCk7CiAKIAkgICAgICAvKiBDb252ZXJ0IGFyZ3VtZW50IHRvIGEgbnVtYmVyIChsYXN0IGFyZyBpcyB0aGUgYmFzZSkgKi8KIAkgICAgICBhZGRyID0gc2ltcGxlX3N0cnRvdWwoYmVncCwgJmVuZHAsIDE2KTsKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuYwppbmRleCAxZTQyODg2Li5jMTgyODZhIDEwMDY0NAotLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGFmaXVjdl9wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWZpdWN2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IGFmaXVjdl9wbV9wcmVwYXJlLAogCS5jb21wbGV0ZSA9IGFmaXVjdl9wbV9jb21wbGV0ZSwKIAkuZnJlZXplID0gYWZpdWN2X3BtX2ZyZWV6ZSwKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2l1Y3YuYyBiL25ldC9pdWN2L2l1Y3YuYwppbmRleCAzYjFmNWY1Li5mZDhiMjgzIDEwMDY0NAotLS0gYS9uZXQvaXVjdi9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvaXVjdi5jCkBAIC05Myw3ICs5Myw3IEBACiBzdGF0aWMgaW50IGl1Y3ZfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICopOwogc3RhdGljIGludCBpdWN2X3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqKTsKIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGl1Y3ZfcG1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGl1Y3ZfcG1fb3BzID0gewogCS5wcmVwYXJlID0gaXVjdl9wbV9wcmVwYXJlLAogCS5jb21wbGV0ZSA9IGl1Y3ZfcG1fY29tcGxldGUsCiAJLmZyZWV6ZSA9IGl1Y3ZfcG1fZnJlZXplLApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggM2E2NjU0Ni4uZTM1ZDkwNyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC00Nyw2ICs0NywxMCBAQAogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pCiAjZW5kaWYKIAorLyogTWF5YmUgd2UnbGwgYWRkIHNvbWUgbW9yZSBpbiB0aGUgZnV0dXJlLiAqLworI2RlZmluZSBMTENfQ01TR19QS1RJTkZPCTEKKworCiAvKioKICAqCWxsY191aV9uZXh0X2xpbmtfbm8gLSByZXR1cm4gdGhlIG5leHQgdW51c2VkIGxpbmsgbnVtYmVyIGZvciBhIHNhcAogICoJQHNhcDogQWRkcmVzcyBvZiBzYXAgdG8gZ2V0IGxpbmsgbnVtYmVyIGZyb20uCkBAIC0xMzYsNiArMTQwLDcgQEAKIAkubmFtZQkgID0gIkxMQyIsCiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGxsY19zb2NrKSwKKwkuc2xhYl9mbGFncyA9IFNMQUJfREVTVFJPWV9CWV9SQ1UsCiB9OwogCiAvKioKQEAgLTE5MiwxMCArMTk3LDggQEAKIAkJbGxjLT5sYWRkci5sc2FwLCBsbGMtPmRhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBzay0+c2tfcmN2dGltZW8pOwotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHsKLQkJbGxjX3NhcF9wdXQobGxjLT5zYXApOworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpCiAJCWxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtPnNhcCwgc2spOwotCX0KIAlyZWxlYXNlX3NvY2soc2spOwogCWlmIChsbGMtPmRldikKIAkJZGV2X3B1dChsbGMtPmRldik7CkBAIC0yNTUsNyArMjU4LDE0IEBACiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRU5PREVWOwotCWxsYy0+ZGV2ID0gZGV2X2dldGZpcnN0Ynlod3R5cGUoJmluaXRfbmV0LCBhZGRyLT5zbGxjX2FycGhyZCk7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYpIHsKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CisJCWlmIChsbGMtPmRldiAmJiBhZGRyLT5zbGxjX2FycGhyZCAhPSBsbGMtPmRldi0+dHlwZSkgeworCQkJZGV2X3B1dChsbGMtPmRldik7CisJCQlsbGMtPmRldiA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0Zmlyc3RieWh3dHlwZSgmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKIAlyYyA9IC1FVVNFUlM7CkBAIC0zMDYsNyArMzE2LDI1IEBACiAJCWdvdG8gb3V0OwogCXJjID0gLUVOT0RFVjsKIAlydG5sX2xvY2soKTsKLQlsbGMtPmRldiA9IGRldl9nZXRieWh3YWRkcigmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLCBhZGRyLT5zbGxjX21hYyk7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYpIHsKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CisJCWlmIChsbGMtPmRldikgeworCQkJaWYgKCFhZGRyLT5zbGxjX2FycGhyZCkKKwkJCQlhZGRyLT5zbGxjX2FycGhyZCA9IGxsYy0+ZGV2LT50eXBlOworCQkJaWYgKGxsY19tYWNfbnVsbChhZGRyLT5zbGxjX21hYykpCisJCQkJbWVtY3B5KGFkZHItPnNsbGNfbWFjLCBsbGMtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgICAgIElGSFdBRERSTEVOKTsKKwkJCWlmIChhZGRyLT5zbGxjX2FycGhyZCAhPSBsbGMtPmRldi0+dHlwZSB8fAorCQkJICAgICFsbGNfbWFjX21hdGNoKGFkZHItPnNsbGNfbWFjLAorCQkJCQkgICBsbGMtPmRldi0+ZGV2X2FkZHIpKSB7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJCWRldl9wdXQobGxjLT5kZXYpOworCQkJCWxsYy0+ZGV2ID0gTlVMTDsKKwkJCX0KKwkJfQorCX0gZWxzZQorCQlsbGMtPmRldiA9IGRldl9nZXRieWh3YWRkcigmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLAorCQkJCQkgICBhZGRyLT5zbGxjX21hYyk7CiAJcnRubF91bmxvY2soKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKQEAgLTMyMiw3ICszNTAsNiBAQAogCQlyYyA9IC1FQlVTWTsgLyogc29tZSBvdGhlciBuZXR3b3JrIGxheWVyIGlzIHVzaW5nIHRoZSBzYXAgKi8KIAkJaWYgKCFzYXApCiAJCQlnb3RvIG91dDsKLQkJbGxjX3NhcF9ob2xkKHNhcCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGxsY19hZGRyIGxhZGRyLCBkYWRkcjsKIAkJc3RydWN0IHNvY2sgKmFzazsKQEAgLTU5MSw2ICs2MTgsMjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2tiLT5zayk7CisKKwlpZiAobGxjLT5jbXNnX2ZsYWdzICYgTExDX0NNU0dfUEtUSU5GTykgeworCQlzdHJ1Y3QgbGxjX3BrdGluZm8gaW5mbzsKKworCQlpbmZvLmxwaV9pZmluZGV4ID0gbGxjX3NrKHNrYi0+c2spLT5kZXYtPmlmaW5kZXg7CisJCWxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCAmaW5mby5scGlfc2FwKTsKKwkJbGxjX3BkdV9kZWNvZGVfZGEoc2tiLCBpbmZvLmxwaV9tYWMpOworCQlwdXRfY21zZyhtc2csIFNPTF9MTEMsIExMQ19PUFRfUEtUSU5GTywgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CisJfQorfQorCiAvKioKICAqCWxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi4KICAqCUBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLgpAQCAtODEyLDYgKzg1Myw4IEBACiAJCW1lbWNweSh1YWRkciwgbGxjX3VpX3NrYl9jYihza2IpLCBzaXplb2YoKnVhZGRyKSk7CiAJCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2YoKnVhZGRyKTsKIAl9CisJaWYgKGxsY19zayhzayktPmNtc2dfZmxhZ3MpCisJCWxsY19jbXNnX3Jjdihtc2csIHNrYik7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTEwMzAsNiArMTA3MywxMiBAQAogCQkJZ290byBvdXQ7CiAJCWxsYy0+cncgPSBvcHQ7CiAJCWJyZWFrOworCWNhc2UgTExDX09QVF9QS1RJTkZPOgorCQlpZiAob3B0KQorCQkJbGxjLT5jbXNnX2ZsYWdzIHw9IExMQ19DTVNHX1BLVElORk87CisJCWVsc2UKKwkJCWxsYy0+Y21zZ19mbGFncyAmPSB+TExDX0NNU0dfUEtUSU5GTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PUFJPVE9PUFQ7CiAJCWdvdG8gb3V0OwpAQCAtMTA4Myw2ICsxMTMyLDkgQEAKIAkJdmFsID0gbGxjLT5rOwkJCQlicmVhazsKIAljYXNlIExMQ19PUFRfUlhfV0lOOgogCQl2YWwgPSBsbGMtPnJ3OwkJCQlicmVhazsKKwljYXNlIExMQ19PUFRfUEtUSU5GTzoKKwkJdmFsID0gKGxsYy0+Y21zZ19mbGFncyAmIExMQ19DTVNHX1BLVElORk8pICE9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVOT1BST1RPT1BUOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uYwppbmRleCBjNmJhYjM5Li5hOGRkZTliIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb25uLmMKKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jCkBAIC00NjgsNiArNDY4LDE5IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbGxjX2VzdGFiX21hdGNoKGNvbnN0IHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpkYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisKKwlyZXR1cm4gbGxjLT5sYWRkci5sc2FwID09IGxhZGRyLT5sc2FwICYmCisJCWxsYy0+ZGFkZHIubHNhcCA9PSBkYWRkci0+bHNhcCAmJgorCQlsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSAmJgorCQlsbGNfbWFjX21hdGNoKGxsYy0+ZGFkZHIubWFjLCBkYWRkci0+bWFjKTsKK30KKwogLyoqCiAgKglfX2xsY19sb29rdXBfZXN0YWJsaXNoZWQgLSBGaW5kcyBjb25uZWN0aW9uIGZvciB0aGUgcmVtb3RlL2xvY2FsIHNhcC9tYWMKICAqCUBzYXA6IFNBUApAQCAtNDg0LDIzICs0OTcsMzUgQEAKIAkJCQkJICAgICBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQogewogCXN0cnVjdCBzb2NrICpyYzsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKKwlpbnQgc2xvdCA9IGxsY19za19sYWRkcl9oYXNoZm4oc2FwLCBsYWRkcik7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxhZGRyX2hiID0gJnNhcC0+c2tfbGFkZHJfaGFzaFtzbG90XTsKIAotCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOwotCi0JCWlmIChsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIGxsYy0+ZGFkZHIubHNhcCA9PSBkYWRkci0+bHNhcCAmJgotCQkgICAgbGxjX21hY19tYXRjaChsbGMtPmxhZGRyLm1hYywgbGFkZHItPm1hYykgJiYKLQkJICAgIGxsY19tYWNfbWF0Y2gobGxjLT5kYWRkci5tYWMsIGRhZGRyLT5tYWMpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOworCXJjdV9yZWFkX2xvY2soKTsKK2FnYWluOgorCXNrX251bGxzX2Zvcl9lYWNoX3JjdShyYywgbm9kZSwgbGFkZHJfaGIpIHsKKwkJaWYgKGxsY19lc3RhYl9tYXRjaChzYXAsIGRhZGRyLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2VzdGFiX21hdGNoKHNhcCwgZGFkZHIsIGxhZGRyLCByYykpKSB7CisJCQkJc29ja19wdXQocmMpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KIAlyYyA9IE5VTEw7CisJLyoKKwkgKiBpZiB0aGUgbnVsbHMgdmFsdWUgd2UgZ290IGF0IHRoZSBlbmQgb2YgdGhpcyBsb29rdXAgaXMKKwkgKiBub3QgdGhlIGV4cGVjdGVkIG9uZSwgd2UgbXVzdCByZXN0YXJ0IGxvb2t1cC4KKwkgKiBXZSBwcm9iYWJseSBtZXQgYW4gaXRlbSB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGNoYWluLgorCSAqLworCWlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobm9kZSkgIT0gc2xvdCkpCisJCWdvdG8gYWdhaW47CiBmb3VuZDoKLQlyZWFkX3VubG9jaygmc2FwLT5za19saXN0LmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTE2LDYgKzU0MSw1MyBAQAogCXJldHVybiBzazsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGxsY19saXN0ZW5lcl9tYXRjaChjb25zdCBzdHJ1Y3QgbGxjX3NhcCAqc2FwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworCXJldHVybiBzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSAmJiBzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmJgorCQlsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKKwkJbGxjX21hY19tYXRjaChsbGMtPmxhZGRyLm1hYywgbGFkZHItPm1hYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqX19sbGNfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCSAgc3RydWN0IGxsY19hZGRyICpsYWRkcikKK3sKKwlzdHJ1Y3Qgc29jayAqcmM7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJaW50IHNsb3QgPSBsbGNfc2tfbGFkZHJfaGFzaGZuKHNhcCwgbGFkZHIpOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpsYWRkcl9oYiA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbc2xvdF07CisKKwlyY3VfcmVhZF9sb2NrKCk7CithZ2FpbjoKKwlza19udWxsc19mb3JfZWFjaF9yY3UocmMsIG5vZGUsIGxhZGRyX2hiKSB7CisJCWlmIChsbGNfbGlzdGVuZXJfbWF0Y2goc2FwLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2xpc3RlbmVyX21hdGNoKHNhcCwgbGFkZHIsIHJjKSkpIHsKKwkJCQlzb2NrX3B1dChyYyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXJjID0gTlVMTDsKKwkvKgorCSAqIGlmIHRoZSBudWxscyB2YWx1ZSB3ZSBnb3QgYXQgdGhlIGVuZCBvZiB0aGlzIGxvb2t1cCBpcworCSAqIG5vdCB0aGUgZXhwZWN0ZWQgb25lLCB3ZSBtdXN0IHJlc3RhcnQgbG9va3VwLgorCSAqIFdlIHByb2JhYmx5IG1ldCBhbiBpdGVtIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgY2hhaW4uCisJICovCisJaWYgKHVubGlrZWx5KGdldF9udWxsc192YWx1ZShub2RlKSAhPSBzbG90KSkKKwkJZ290byBhZ2FpbjsKK2ZvdW5kOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKglsbGNfbG9va3VwX2xpc3RlbmVyIC0gRmluZHMgbGlzdGVuZXIgZm9yIGxvY2FsIE1BQyArIFNBUAogICoJQHNhcDogU0FQCkBAIC01MjksMjQgKzYwMSwxMiBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBsbGNfc2FwICpzYXAsCiAJCQkJCXN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCiB7Ci0Jc3RydWN0IHNvY2sgKnJjOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0YXRpYyBzdHJ1Y3QgbGxjX2FkZHIgbnVsbF9hZGRyOworCXN0cnVjdCBzb2NrICpyYyA9IF9fbGxjX2xvb2t1cF9saXN0ZW5lcihzYXAsIGxhZGRyKTsKIAotCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOworCWlmICghcmMpCisJCXJjID0gX19sbGNfbG9va3VwX2xpc3RlbmVyKHNhcCwgJm51bGxfYWRkcik7CiAKLQkJaWYgKHJjLT5za190eXBlID09IFNPQ0tfU1RSRUFNICYmIHJjLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOICYmCi0JCSAgICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIChsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSB8fAotCQkgICAgIGxsY19tYWNfbnVsbChsbGMtPmxhZGRyLm1hYykpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLQlyYyA9IE5VTEw7Ci1mb3VuZDoKLQlyZWFkX3VubG9jaygmc2FwLT5za19saXN0LmxvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtNjQ3LDE1ICs3MDcsMjIgQEAKICAqCUBzYXA6IFNBUAogICoJQHNrOiBzb2NrZXQKICAqCi0gKglUaGlzIGZ1bmN0aW9uIGFkZHMgYSBzb2NrZXQgdG8gc2tfbGlzdCBvZiBhIFNBUC4KKyAqCVRoaXMgZnVuY3Rpb24gYWRkcyBhIHNvY2tldCB0byB0aGUgaGFzaCB0YWJsZXMgb2YgYSBTQVAuCiAgKi8KIHZvaWQgbGxjX3NhcF9hZGRfc29ja2V0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmRldl9oYiA9IGxsY19za19kZXZfaGFzaChzYXAsIGxsYy0+ZGV2LT5pZmluZGV4KTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbGFkZHJfaGIgPSBsbGNfc2tfbGFkZHJfaGFzaChzYXAsICZsbGMtPmxhZGRyKTsKKwogCWxsY19zYXBfaG9sZChzYXApOwotCXdyaXRlX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKIAlsbGNfc2soc2spLT5zYXAgPSBzYXA7Ci0Jc2tfYWRkX25vZGUoc2ssICZzYXAtPnNrX2xpc3QubGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisKKwlzcGluX2xvY2tfYmgoJnNhcC0+c2tfbG9jayk7CisJc2FwLT5za19jb3VudCsrOworCXNrX251bGxzX2FkZF9ub2RlX3JjdShzaywgbGFkZHJfaGIpOworCWhsaXN0X2FkZF9oZWFkKCZsbGMtPmRldl9oYXNoX25vZGUsIGRldl9oYik7CisJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CiB9CiAKIC8qKgpAQCAtNjYzLDE0ICs3MzAsMTggQEAKICAqCUBzYXA6IFNBUAogICoJQHNrOiBzb2NrZXQKICAqCi0gKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gc2tfbGlzdC5saXN0IG9mIGEgU0FQIGlmCisgKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gdGhlIGhhc2ggdGFibGVzIG9mIGEgU0FQIGlmCiAgKgl0aGUgY29ubmVjdGlvbiB3YXMgaW4gdGhpcyBsaXN0LgogICovCiB2b2lkIGxsY19zYXBfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jd3JpdGVfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2RlbF9ub2RlX2luaXQoc2spOwotCXdyaXRlX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworCXNwaW5fbG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlza19udWxsc19kZWxfbm9kZV9pbml0X3JjdShzayk7CisJaGxpc3RfZGVsKCZsbGMtPmRldl9oYXNoX25vZGUpOworCXNhcC0+c2tfY291bnQtLTsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKIAlsbGNfc2FwX3B1dChzYXApOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggZmY0YzBhYi4uNzgxNjdlOCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPG5ldC9sbGMuaD4KIAogTElTVF9IRUFEKGxsY19zYXBfbGlzdCk7Ci1ERUZJTkVfUldMT0NLKGxsY19zYXBfbGlzdF9sb2NrKTsKK0RFRklORV9TUElOTE9DSyhsbGNfc2FwX2xpc3RfbG9jayk7CiAKIC8qKgogICoJbGxjX3NhcF9hbGxvYyAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgc2FwLgpAQCAtMzMsNDAgKzMzLDE5IEBACiBzdGF0aWMgc3RydWN0IGxsY19zYXAgKmxsY19zYXBfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0ga3phbGxvYyhzaXplb2YoKnNhcCksIEdGUF9BVE9NSUMpOworCWludCBpOwogCiAJaWYgKHNhcCkgewogCQkvKiBzYXAtPmxhZGRyLm1hYyAtIGxlYXZlIGFzIGEgbnVsbCwgaXQncyBmaWxsZWQgYnkgYmluZCAqLwogCQlzYXAtPnN0YXRlID0gTExDX1NBUF9TVEFURV9BQ1RJVkU7Ci0JCXJ3bG9ja19pbml0KCZzYXAtPnNrX2xpc3QubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZzYXAtPnNrX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTExDX1NLX0xBRERSX0hBU0hfRU5UUklFUzsgaSsrKQorCQkJSU5JVF9ITElTVF9OVUxMU19IRUFEKCZzYXAtPnNrX2xhZGRyX2hhc2hbaV0sIGkpOwogCQlhdG9taWNfc2V0KCZzYXAtPnJlZmNudCwgMSk7CiAJfQogCXJldHVybiBzYXA7CiB9CiAKLS8qKgotICoJbGxjX2FkZF9zYXAgLSBhZGQgc2FwIHRvIHN0YXRpb24gbGlzdAotICoJQHNhcDogQWRkcmVzcyBvZiB0aGUgc2FwCi0gKgotICoJQWRkcyBhIHNhcCB0byB0aGUgTExDJ3Mgc3RhdGlvbiBzYXAgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbGxjX2FkZF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKLXsKLQlsaXN0X2FkZF90YWlsKCZzYXAtPm5vZGUsICZsbGNfc2FwX2xpc3QpOwotfQotCi0vKioKLSAqCWxsY19kZWxfc2FwIC0gZGVsIHNhcCBmcm9tIHN0YXRpb24gbGlzdAotICoJQHNhcDogQWRkcmVzcyBvZiB0aGUgc2FwCi0gKgotICoJUmVtb3ZlcyBhIHNhcCB0byB0aGUgTExDJ3Mgc3RhdGlvbiBzYXAgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbGxjX2RlbF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKLXsKLQl3cml0ZV9sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7Ci0JbGlzdF9kZWwoJnNhcC0+bm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbGxjX3NhcCAqX19sbGNfc2FwX2ZpbmQodW5zaWduZWQgY2hhciBzYXBfdmFsdWUpCiB7CiAJc3RydWN0IGxsY19zYXAqIHNhcDsKQEAgLTkwLDEzICs2OSwxMyBAQAogICovCiBzdHJ1Y3QgbGxjX3NhcCAqbGxjX3NhcF9maW5kKHVuc2lnbmVkIGNoYXIgc2FwX3ZhbHVlKQogewotCXN0cnVjdCBsbGNfc2FwKiBzYXA7CisJc3RydWN0IGxsY19zYXAgKnNhcDsKIAotCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlzYXAgPSBfX2xsY19zYXBfZmluZChzYXBfdmFsdWUpOwogCWlmIChzYXApCiAJCWxsY19zYXBfaG9sZChzYXApOwotCXJlYWRfdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJcmV0dXJuIHNhcDsKIH0KIApAQCAtMTE3LDcgKzk2LDcgQEAKIHsKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gTlVMTDsKIAotCXdyaXRlX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKIAlpZiAoX19sbGNfc2FwX2ZpbmQobHNhcCkpIC8qIFNBUCBhbHJlYWR5IGV4aXN0cyAqLwogCQlnb3RvIG91dDsKIAlzYXAgPSBsbGNfc2FwX2FsbG9jKCk7CkBAIC0xMjUsOSArMTA0LDkgQEAKIAkJZ290byBvdXQ7CiAJc2FwLT5sYWRkci5sc2FwID0gbHNhcDsKIAlzYXAtPnJjdl9mdW5jCT0gZnVuYzsKLQlsbGNfYWRkX3NhcChzYXApOworCWxpc3RfYWRkX3RhaWxfcmN1KCZzYXAtPm5vZGUsICZsbGNfc2FwX2xpc3QpOwogb3V0OgotCXdyaXRlX3VubG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CiAJcmV0dXJuIHNhcDsKIH0KIApAQCAtMTQyLDggKzEyMSwxNCBAQAogICovCiB2b2lkIGxsY19zYXBfY2xvc2Uoc3RydWN0IGxsY19zYXAgKnNhcCkKIHsKLQlXQVJOX09OKCFobGlzdF9lbXB0eSgmc2FwLT5za19saXN0Lmxpc3QpKTsKLQlsbGNfZGVsX3NhcChzYXApOworCVdBUk5fT04oc2FwLT5za19jb3VudCk7CisKKwlzcGluX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbF9yY3UoJnNhcC0+bm9kZSk7CisJc3Bpbl91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCiAJa2ZyZWUoc2FwKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfb3V0cHV0LmMgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwppbmRleCA3NTRmNGZlLi5iMzhhMTA3IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19vdXRwdXQuYworKysgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwpAQCAtMzMsNDggKzMzLDE5IEBACiBpbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHNrYi0+ZGV2LT50eXBlKSB7Ci0jaWZkZWYgQ09ORklHX1RSCi0JY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjogewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JCXN0cnVjdCB0cmhfaGRyICp0cmg7Ci0KLQkJc2tiX3B1c2goc2tiLCBzaXplb2YoKnRyaCkpOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQl0cmggPSB0cl9oZHIoc2tiKTsKLQkJdHJoLT5hYyA9IEFDOwotCQl0cmgtPmZjID0gTExDX0ZSQU1FOwotCQlpZiAoc2EpCi0JCQltZW1jcHkodHJoLT5zYWRkciwgc2EsIGRldi0+YWRkcl9sZW4pOwotCQllbHNlCi0JCQltZW1zZXQodHJoLT5zYWRkciwgMCwgZGV2LT5hZGRyX2xlbik7Ci0JCWlmIChkYSkgewotCQkJbWVtY3B5KHRyaC0+ZGFkZHIsIGRhLCBkZXYtPmFkZHJfbGVuKTsKLQkJCXRyX3NvdXJjZV9yb3V0ZShza2IsIHRyaCwgZGV2KTsKLQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCisJY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjoKIAljYXNlIEFSUEhSRF9FVEhFUjoKLQljYXNlIEFSUEhSRF9MT09QQkFDSzogewotCQl1bnNpZ25lZCBzaG9ydCBsZW4gPSBza2ItPmxlbjsKLQkJc3RydWN0IGV0aGhkciAqZXRoOwotCi0JCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTsKLQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJZXRoID0gZXRoX2hkcihza2IpOwotCQlldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4pOwotCQltZW1jcHkoZXRoLT5oX2Rlc3QsIGRhLCBFVEhfQUxFTik7Ci0JCW1lbWNweShldGgtPmhfc291cmNlLCBzYSwgRVRIX0FMRU4pOworCWNhc2UgQVJQSFJEX0xPT1BCQUNLOgorCQlyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi0+ZGV2LCBFVEhfUF84MDJfMiwgZGEsIHNhLAorCQkJCSAgICAgc2tiLT5sZW4pOworCQlpZiAocmMgPiAwKQorCQkJcmMgPSAwOwogCQlicmVhazsKLQl9CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGV2aWNlIHR5cGUgbm90IHN1cHBvcnRlZDogJWRcbiIsCi0JCSAgICAgICBza2ItPmRldi0+dHlwZSk7Ci0JCXJjID0gLUVJTlZBTDsKKwkJV0FSTigxLCAiZGV2aWNlIHR5cGUgbm90IHN1cHBvcnRlZDogJWRcbiIsIHNrYi0+ZGV2LT50eXBlKTsKIAl9CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfcHJvYy5jIGIvbmV0L2xsYy9sbGNfcHJvYy5jCmluZGV4IGJlNDdhYzQyNy4uN2FmMWZmMiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMzIsMjEgKzMyLDIzIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2dldF9za19pZHgobG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpzYXBfZW50cnk7CiAJc3RydWN0IGxsY19zYXAgKnNhcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOworCWludCBpOwogCi0JbGlzdF9mb3JfZWFjaChzYXBfZW50cnksICZsbGNfc2FwX2xpc3QpIHsKLQkJc2FwID0gbGlzdF9lbnRyeShzYXBfZW50cnksIHN0cnVjdCBsbGNfc2FwLCBub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTExDX1NLX0xBRERSX0hBU0hfRU5UUklFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbaV07CisJCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAotCQlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKLQkJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzYXAtPnNrX2xpc3QubGlzdCkgewotCQkJaWYgKCFwb3MpCi0JCQkJZ290byBmb3VuZDsKLQkJCS0tcG9zOworCQkJc2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIGhlYWQpIHsKKwkJCQlpZiAoIXBvcykKKwkJCQkJZ290byBmb3VuZDsgLyoga2VlcCB0aGUgbG9jayAqLworCQkJCS0tcG9zOworCQkJfQogCQl9Ci0JCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZzYXAtPnNrX2xvY2spOwogCX0KIAlzayA9IE5VTEw7CiBmb3VuZDoKQEAgLTU3LDEwICs1OSwyMyBAQAogewogCWxvZmZfdCBsID0gKnBvczsKIAotCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlyZXR1cm4gbCA/IGxsY19nZXRfc2tfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqbGFkZHJfaGFzaF9uZXh0KHN0cnVjdCBsbGNfc2FwICpzYXAsIGludCBidWNrZXQpCit7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKworCXdoaWxlICgrK2J1Y2tldCA8IExMQ19TS19MQUREUl9IQVNIX0VOVFJJRVMpCisJCXNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCAmc2FwLT5za19sYWRkcl9oYXNoW2J1Y2tldF0pCisJCQlnb3RvIG91dDsKKworb3V0OgorCXJldHVybiBzazsKK30KKwogc3RhdGljIHZvaWQgKmxsY19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHNvY2sqIHNrLCAqbmV4dDsKQEAgLTczLDI1ICs4OCwyMyBAQAogCQlnb3RvIG91dDsKIAl9CiAJc2sgPSB2OwotCW5leHQgPSBza19uZXh0KHNrKTsKKwluZXh0ID0gc2tfbnVsbHNfbmV4dChzayk7CiAJaWYgKG5leHQpIHsKIAkJc2sgPSBuZXh0OwogCQlnb3RvIG91dDsKIAl9CiAJbGxjID0gbGxjX3NrKHNrKTsKIAlzYXAgPSBsbGMtPnNhcDsKLQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrID0gTlVMTDsKLQlmb3IgKDs7KSB7Ci0JCWlmIChzYXAtPm5vZGUubmV4dCA9PSAmbGxjX3NhcF9saXN0KQotCQkJYnJlYWs7Ci0JCXNhcCA9IGxpc3RfZW50cnkoc2FwLT5ub2RlLm5leHQsIHN0cnVjdCBsbGNfc2FwLCBub2RlKTsKLQkJcmVhZF9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Ci0JCWlmICghaGxpc3RfZW1wdHkoJnNhcC0+c2tfbGlzdC5saXN0KSkgewotCQkJc2sgPSBza19oZWFkKCZzYXAtPnNrX2xpc3QubGlzdCk7Ci0JCQlicmVhazsKLQkJfQotCQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXNrID0gbGFkZHJfaGFzaF9uZXh0KHNhcCwgbGxjX3NrX2xhZGRyX2hhc2hmbihzYXAsICZsbGMtPmxhZGRyKSk7CisJaWYgKHNrKQorCQlnb3RvIG91dDsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCQlzayA9IGxhZGRyX2hhc2hfbmV4dChzYXAsIC0xKTsKKwkJaWYgKHNrKQorCQkJYnJlYWs7IC8qIGtlZXAgdGhlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CiAJfQogb3V0OgogCXJldHVybiBzazsKQEAgLTEwNCw5ICsxMTcsOSBAQAogCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCQlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIH0KIAogc3RhdGljIGludCBsbGNfc2VxX3NvY2tldF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc2FwLmMgYi9uZXQvbGxjL2xsY19zYXAuYwppbmRleCAwMDhkZTFmLi5hZDZlNmUxIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19zYXAuYworKysgYi9uZXQvbGxjL2xsY19zYXAuYwpAQCAtMjk3LDYgKzI5NywxNyBAQAogCWxsY19zYXBfc3RhdGVfcHJvY2VzcyhzYXAsIHNrYik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBsbGNfZGdyYW1fbWF0Y2goY29uc3Qgc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKyAgICAgc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCisgICAgIHJldHVybiBzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNICYmCisJICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKKwkgIGxsY19tYWNfbWF0Y2gobGxjLT5sYWRkci5tYWMsIGxhZGRyLT5tYWMpOworfQorCiAvKioKICAqCWxsY19sb29rdXBfZGdyYW0gLSBGaW5kcyBkZ3JhbSBzb2NrZXQgZm9yIHRoZSBsb2NhbCBzYXAvbWFjCiAgKglAc2FwOiBTQVAKQEAgLTMwOSwyNSArMzIwLDY4IEBACiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQogewogCXN0cnVjdCBzb2NrICpyYzsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKKwlpbnQgc2xvdCA9IGxsY19za19sYWRkcl9oYXNoZm4oc2FwLCBsYWRkcik7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxhZGRyX2hiID0gJnNhcC0+c2tfbGFkZHJfaGFzaFtzbG90XTsKIAotCXJlYWRfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOwotCi0JCWlmIChyYy0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNICYmCi0JCSAgICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIGxsY19tYWNfbWF0Y2gobGxjLT5sYWRkci5tYWMsIGxhZGRyLT5tYWMpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKK2FnYWluOgorCXNrX251bGxzX2Zvcl9lYWNoX3JjdShyYywgbm9kZSwgbGFkZHJfaGIpIHsKKwkJaWYgKGxsY19kZ3JhbV9tYXRjaChzYXAsIGxhZGRyLCByYykpIHsKKwkJCS8qIEV4dHJhIGNoZWNrcyByZXF1aXJlZCBieSBTTEFCX0RFU1RST1lfQllfUkNVICovCisJCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJnJjLT5za19yZWZjbnQpKSkKKwkJCQlnb3RvIGFnYWluOworCQkJaWYgKHVubGlrZWx5KGxsY19zayhyYyktPnNhcCAhPSBzYXAgfHwKKwkJCQkgICAgICFsbGNfZGdyYW1fbWF0Y2goc2FwLCBsYWRkciwgcmMpKSkgeworCQkJCXNvY2tfcHV0KHJjKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9CiAJcmMgPSBOVUxMOworCS8qCisJICogaWYgdGhlIG51bGxzIHZhbHVlIHdlIGdvdCBhdCB0aGUgZW5kIG9mIHRoaXMgbG9va3VwIGlzCisJICogbm90IHRoZSBleHBlY3RlZCBvbmUsIHdlIG11c3QgcmVzdGFydCBsb29rdXAuCisJICogV2UgcHJvYmFibHkgbWV0IGFuIGl0ZW0gdGhhdCB3YXMgbW92ZWQgdG8gYW5vdGhlciBjaGFpbi4KKwkgKi8KKwlpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG5vZGUpICE9IHNsb3QpKQorCQlnb3RvIGFnYWluOwogZm91bmQ6Ci0JcmVhZF91bmxvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBsbGNfbWNhc3RfbWF0Y2goY29uc3Qgc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworICAgICBzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisKKyAgICAgcmV0dXJuIHNrLT5za190eXBlID09IFNPQ0tfREdSQU0gJiYKKwkgIGxsYy0+bGFkZHIubHNhcCA9PSBsYWRkci0+bHNhcCAmJgorCSAgbGxjLT5kZXYgPT0gc2tiLT5kZXY7Cit9CisKK3N0YXRpYyB2b2lkIGxsY19kb19tY2FzdChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBzb2NrICoqc3RhY2ssIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXNrYjEgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IxKSB7CisJCQlzb2NrX3B1dChzdGFja1tpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxsY19zYXBfcmN2KHNhcCwgc2tiMSwgc3RhY2tbaV0pOworCQlzb2NrX3B1dChzdGFja1tpXSk7CisJfQorfQorCiAvKioKICAqIAlsbGNfc2FwX21jYXN0IC0gRGVsaXZlciBtdWx0aWNhc3QgUERVJ3MgdG8gYWxsIG1hdGNoaW5nIGRhdGFncmFtIHNvY2tldHMuCiAgKglAc2FwOiBTQVAKQEAgLTM0MCwzMiArMzk0LDMxIEBACiAJCQkgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIsCiAJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrOworCWludCBpID0gMCwgY291bnQgPSAyNTYgLyBzaXplb2Yoc3RydWN0IHNvY2sgKik7CisJc3RydWN0IHNvY2sgKnNrLCAqc3RhY2tbY291bnRdOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsbGNfc29jayAqbGxjOworCXN0cnVjdCBobGlzdF9oZWFkICpkZXZfaGIgPSBsbGNfc2tfZGV2X2hhc2goc2FwLCBza2ItPmRldi0+aWZpbmRleCk7CiAKLQlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJnNhcC0+c2tfbGlzdC5saXN0KSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CisJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGxsYywgbm9kZSwgZGV2X2hiLCBkZXZfaGFzaF9ub2RlKSB7CiAKLQkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfREdSQU0pCisJCXNrID0gJmxsYy0+c2s7CisKKwkJaWYgKCFsbGNfbWNhc3RfbWF0Y2goc2FwLCBsYWRkciwgc2tiLCBzaykpCiAJCQljb250aW51ZTsKIAotCQlpZiAobGxjLT5sYWRkci5sc2FwICE9IGxhZGRyLT5sc2FwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGxsYy0+ZGV2ICE9IHNrYi0+ZGV2KQotCQkJY29udGludWU7Ci0KLQkJc2tiMSA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQlpZiAoIXNrYjEpCi0JCQlicmVhazsKLQogCQlzb2NrX2hvbGQoc2spOwotCQlsbGNfc2FwX3JjdihzYXAsIHNrYjEsIHNrKTsKLQkJc29ja19wdXQoc2spOworCQlpZiAoaSA8IGNvdW50KQorCQkJc3RhY2tbaSsrXSA9IHNrOworCQllbHNlIHsKKwkJCWxsY19kb19tY2FzdChzYXAsIHNrYiwgc3RhY2ssIGkpOworCQkJaSA9IDA7CisJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKKworCWxsY19kb19tY2FzdChzYXAsIHNrYiwgc3RhY2ssIGkpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9LY29uZmlnIGIvbmV0L21hYzgwMjExL0tjb25maWcKaW5kZXggYTEwZDUwOC4uYTk1MmI3ZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL0tjb25maWcKKysrIGIvbmV0L21hYzgwMjExL0tjb25maWcKQEAgLTk2LDE4ICs5Niw2IEBACiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gY29sbGVjdHMgdmFyaW91cyBtYWM4MDIxMSBkZWJ1ZyBzZXR0aW5ncy4KIAotY29uZmlnIE1BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKLQlib29sICJFbmFibGUgcGFja2V0IGFsaWdubWVudCBkZWJ1Z2dpbmciCi0JZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gaXMgcmVjb21tZW5kZWQgZm9yIGRyaXZlciBhdXRob3JzIGFuZCBzdHJvbmdseQotCSAgZGlzY291cmFnZWQgZm9yIGV2ZXJ5Ym9keSBlbHNlLCBpdCB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nCi0JICB3aGVuIGEgZHJpdmVyIGhhbmRzIG1hYzgwMjExIGEgYnVmZmVyIHRoYXQgaXMgYWxpZ25lZCBpbgotCSAgYSB3YXkgdGhhdCB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIElQIHN0YWNrIG9uIHNvbWUKLQkgIGFyY2hpdGVjdHVyZXMuCi0KLQkgIFNheSBOIHVubGVzcyB5b3UncmUgd3JpdGluZyBhIG1hYzgwMjExIGJhc2VkIGRyaXZlci4KLQogY29uZmlnIE1BQzgwMjExX05PSU5MSU5FCiAJYm9vbCAiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVycyIKIAlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCAyOThjZmNjLi4wNDQyMDI5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC02LDEwICs2LDEwIEBACiAJc3RhX2luZm8ubyBcCiAJd2VwLm8gXAogCXdwYS5vIFwKLQlzY2FuLm8gXAorCXNjYW4ubyBvZmZjaGFubmVsLm8gXAogCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAogCWlic3MubyBcCi0JbWxtZS5vIFwKKwltbG1lLm8gd29yay5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXAogCW1pY2hhZWwubyBcCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKaW5kZXggNTFjN2RjMy4uYTk3OGU2NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy1yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpAQCAtNDEsOCArNDEsNyBAQAogCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwogCi0JaWYgKGRydl9hbXBkdV9hY3Rpb24obG9jYWwsICZzdGEtPnNkYXRhLT52aWYsCi0JCQkgICAgIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAorCWlmIChkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLCBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKIAkJCSAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiSFcgcHJvYmxlbSAtIGNhbiBub3Qgc3RvcCByeCAiCiAJCQkJImFnZ3JlZ2F0aW9uIGZvciB0aWQgJWRcbiIsIHRpZCk7CkBAIC04MywxMiArODIsMTEgQEAKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwKIAkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgcmEpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC0xMzYsNyArMTM0LDcgQEAKIAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE0NCwxMCArMTQyLDEwIEBACiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAKQEAgLTI4MSw4ICsyNzksNyBAQAogCQlnb3RvIGVuZDsKIAl9CiAKLQlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCAmc3RhLT5zZGF0YS0+dmlmLAotCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCiAJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiUnggQS1NUERVIHJlcXVlc3Qgb24gdGlkICVkIHJlc3VsdCAlZFxuIiwgdGlkLCByZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IDVlM2E3ZWMuLmNlZGEzNjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCQkJImZvciBhZGRiYSByZXF1ZXN0IGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpiYXIpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCQkiYmFyIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCSJiYXIgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAliYXItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwKIAkJCQkJIElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSk7CiAJbWVtY3B5KGJhci0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGJhci0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGJhci0+dGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOwogCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOwogCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKIAkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKIAotCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsICZzdGEtPnNkYXRhLT52aWYsCisJcmV0ID0gZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc3RhLT5zZGF0YSwKIAkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUCwKIAkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7CiAKQEAgLTMwMyw4ICszMDMsNyBAQAogCiAJc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOwogCi0JcmV0ID0gZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgJnNkYXRhLT52aWYsCi0JCQkgICAgICAgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHNkYXRhLCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCiAJCQkgICAgICAgcHVic3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKIAogCWlmIChyZXQpIHsKQEAgLTQyMCw3ICs0MTksNyBAQAogCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgc3RhLCB0aWQpOwogCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CiAKLQlkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCAmc3RhLT5zZGF0YS0+dmlmLAorCWRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHN0YS0+c2RhdGEsCiAJCQkgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMLAogCQkJICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKIH0KQEAgLTQ0MSw3ICs0NDAsNyBAQAogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKQEAgLTQ4OSw3ICs0ODgsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7CisJCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAkJcmV0dXJuOwogCX0KQEAgLTU2NCw3ICs1NjMsNyBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgcmEpOwogCWlmICghc3RhKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKQEAgLTYyMSw3ICs2MjAsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2RhdGEtPm5hbWUpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggNmRjMzU3OS4uMmU1ZTg0MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtNzgsMTcgKzc4LDE1IEBACiAJCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlpbnQgcmV0OwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKCFubDgwMjExX3BhcmFtc19jaGVjayh0eXBlLCBwYXJhbXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQogCXJldCA9IGllZWU4MDIxMV9pZl9jaGFuZ2VfdHlwZShzZGF0YSwgdHlwZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTE1MCw3ICsxNDgsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWlmIChtYWNfYWRkcikgewotCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEtPmxvY2FsLCBtYWNfYWRkcik7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWFjX2FkZHIpOwogCQlpZiAoIXN0YSkgewogCQkJaWVlZTgwMjExX2tleV9mcmVlKGtleSk7CiAJCQllcnIgPSAtRU5PRU5UOwpAQCAtMTgxLDcgKzE3OSw3IEBACiAJaWYgKG1hY19hZGRyKSB7CiAJCXJldCA9IC1FTk9FTlQ7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLT5sb2NhbCwgbWFjX2FkZHIpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG1hY19hZGRyKTsKIAkJaWYgKCFzdGEpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTIyOCw3ICsyMjYsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWlmIChtYWNfYWRkcikgewotCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEtPmxvY2FsLCBtYWNfYWRkcik7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWFjX2FkZHIpOwogCQlpZiAoIXN0YSkKIAkJCWdvdG8gb3V0OwogCkBAIC00MTUsMTUgKzQxMywxMyBAQAogc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJaW50IHJldCA9IC1FTk9FTlQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQkvKiBYWFg6IHZlcmlmeSBzdGEtPmRldiA9PSBkZXYgKi8KLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWFjKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG1hYyk7CiAJaWYgKHN0YSkgewogCQlyZXQgPSAwOwogCQlzdGFfc2V0X3NpbmZvKHN0YSwgc2luZm8pOwpAQCAtNzMyLDcgKzcyOCw3IEBACiAJfSBlbHNlCiAJCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWFjLCBkZXYtPmRldl9hZGRyKSA9PSAwKQorCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWFjLCBzZGF0YS0+dmlmLmFkZHIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1hYykpCkBAIC03NzksOCArNzc1LDcgQEAKIAlpZiAobWFjKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAotCQkvKiBYWFg6IGdldCBzdGEgYmVsb25naW5nIHRvIGRldiAqLwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWFjKTsKIAkJaWYgKCFzdGEpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CkBAIC04MDEsMTQgKzc5NiwxNCBAQAogCQkJCSAgICB1OCAqbWFjLAogCQkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdmxhbnNkYXRhOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JLyogWFhYOiBnZXQgc3RhIGJlbG9uZ2luZyB0byBkZXYgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7CisJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBtYWMpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTg0Nyw3ICs4NDIsNiBAQAogc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtODU2LDcgKzg1MCw3IEBACiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbmV4dF9ob3ApOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbmV4dF9ob3ApOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTg5NSw3ICs4ODksNiBAQAogCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICB1OCAqZHN0LCB1OCAqbmV4dF9ob3ApCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTkwNCw3ICs4OTcsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBuZXh0X2hvcCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBuZXh0X2hvcCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTMyNCw2ICsxMzE3LDUwIEBACiB9CiAjZW5kaWYKIAoraW50IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHNfbW9kZSkKK3sKKwljb25zdCB1OCAqYXA7CisJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIG9sZF9yZXE7CisJaW50IGVycjsKKworCW9sZF9yZXEgPSBzZGF0YS0+dS5tZ2QucmVxX3NtcHM7CisJc2RhdGEtPnUubWdkLnJlcV9zbXBzID0gc21wc19tb2RlOworCisJaWYgKG9sZF9yZXEgPT0gc21wc19tb2RlICYmCisJICAgIHNtcHNfbW9kZSAhPSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUMpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBub3QgYXNzb2NpYXRlZCwgb3IgY3VycmVudCBhc3NvY2lhdGlvbiBpcyBub3QgYW4gSFQKKwkgKiBhc3NvY2lhdGlvbiwgdGhlcmUncyBubyBuZWVkIHRvIHNlbmQgYW4gYWN0aW9uIGZyYW1lLgorCSAqLworCWlmICghc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQgfHwKKwkgICAgc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fTk9fSFQpIHsKKwkJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKKwkJaWVlZTgwMjExX3JlY2FsY19zbXBzKHNkYXRhLT5sb2NhbCwgc2RhdGEpOworCQltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisJCXJldHVybiAwOworCX0KKworCWFwID0gc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQtPmJzc2lkOworCisJaWYgKHNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUMpIHsKKwkJaWYgKHNkYXRhLT51Lm1nZC5wb3dlcnNhdmUpCisJCQlzbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19EWU5BTUlDOworCQllbHNlCisJCQlzbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19PRkY7CisJfQorCisJLyogc2VuZCBTTSBQUyBmcmFtZSB0byBBUCAqLworCWVyciA9IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHNkYXRhLCBzbXBzX21vZGUsCisJCQkJCSBhcCwgYXApOworCWlmIChlcnIpCisJCXNkYXRhLT51Lm1nZC5yZXFfc21wcyA9IG9sZF9yZXE7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICBib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KQogewpAQCAtMTM0MSw2ICsxMzc4LDExIEBACiAJc2RhdGEtPnUubWdkLnBvd2Vyc2F2ZSA9IGVuYWJsZWQ7CiAJY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKIAorCS8qIG5vIGNoYW5nZSwgYnV0IGlmIGF1dG9tYXRpYyBmb2xsb3cgcG93ZXJzYXZlICovCisJbXV0ZXhfbG9jaygmc2RhdGEtPnUubWdkLm10eCk7CisJX19pZWVlODAyMTFfcmVxdWVzdF9zbXBzKHNkYXRhLCBzZGF0YS0+dS5tZ2QucmVxX3NtcHMpOworCW11dGV4X3VubG9jaygmc2RhdGEtPnUubWdkLm10eCk7CisKIAlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCiAJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiAKQEAgLTEzNTYsMTUgKzEzOTgsMjUgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlpbnQgaSwgZXJyID0gLUVJTlZBTDsKKwlpbnQgaTsKIAl1MzIgdGFyZ2V0X3JhdGU7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKKwkvKgorCSAqIFRoaXMgX2NvdWxkXyBiZSBzdXBwb3J0ZWQgYnkgcHJvdmlkaW5nIGEgaG9vayBmb3IKKwkgKiBkcml2ZXJzIGZvciB0aGlzIGZ1bmN0aW9uLCBidXQgYXQgdGhpcyBwb2ludCBpdAorCSAqIGRvZXNuJ3Qgc2VlbSB3b3J0aCBib3RoZXJpbmcuCisJICovCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IQVNfUkFURV9DT05UUk9MKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CiAKLQkvKiB0YXJnZXRfcmF0ZSA9IC0xLCByYXRlLT5maXhlZCA9IDAgbWVhbnMgYXV0byBvbmx5LCBzbyB1c2UgYWxsIHJhdGVzCisJLyoKKwkgKiB0YXJnZXRfcmF0ZSA9IC0xLCByYXRlLT5maXhlZCA9IDAgbWVhbnMgYXV0byBvbmx5LCBzbyB1c2UgYWxsIHJhdGVzCiAJICogdGFyZ2V0X3JhdGUgPSBYLCByYXRlLT5maXhlZCA9IDEgbWVhbnMgb25seSByYXRlIFgKLQkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhbGwgcmF0ZXMgPD0gWCAqLworCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYCisJICovCiAJc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7CiAJc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IC0xOwogCkBAIC0xMzc1LDIwICsxNDI3LDQwIEBACiAJZWxzZQogCQlyZXR1cm4gMDsKIAotCWZvciAoaT0wOyBpPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpbnQgdGhpc19yYXRlID0gYnJhdGUtPmJpdHJhdGU7CisJZm9yIChpID0gMDsgaTwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAodGFyZ2V0X3JhdGUgIT0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUpCisJCQljb250aW51ZTsKIAotCQlpZiAodGFyZ2V0X3JhdGUgPT0gdGhpc19yYXRlKSB7Ci0JCQlzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSBpOwotCQkJaWYgKG1hc2stPmZpeGVkKQotCQkJCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSBpOwotCQkJZXJyID0gMDsKLQkJCWJyZWFrOwotCQl9CisJCS8qIHJlcXVlc3RlZCBiaXRyYXRlIGZvdW5kICovCisJCXNkYXRhLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IGk7CisJCWlmIChtYXNrLT5maXhlZCkKKwkJCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSBpOworCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sCisJCQkJICAgICAgIHU2NCAqY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXJldHVybiBpZWVlODAyMTFfd2tfcmVtYWluX29uX2NoYW5uZWwoc2RhdGEsIGNoYW4sIGNoYW5uZWxfdHlwZSwKKwkJCQkJICAgICAgZHVyYXRpb24sIGNvb2tpZSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICB1NjQgY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXJldHVybiBpZWVlODAyMTFfd2tfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHNkYXRhLCBjb29raWUpOwogfQogCiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CkBAIC0xNDM3LDQgKzE1MDksNiBAQAogCUNGRzgwMjExX1RFU1RNT0RFX0NNRChpZWVlODAyMTFfdGVzdG1vZGVfY21kKQogCS5zZXRfcG93ZXJfbWdtdCA9IGllZWU4MDIxMV9zZXRfcG93ZXJfbWdtdCwKIAkuc2V0X2JpdHJhdGVfbWFzayA9IGllZWU4MDIxMV9zZXRfYml0cmF0ZV9tYXNrLAorCS5yZW1haW5fb25fY2hhbm5lbCA9IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbCwKKwkuY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsID0gaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCwKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCmluZGV4IGUwZjUyMjQuLmQxMmU3NDMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCkBAIC01Niw3ICs1Niw3IEBACiBLRVlfQ09ORl9GSUxFKGh3X2tleV9pZHgsIEQpOwogS0VZX0ZJTEUoZmxhZ3MsIFgpOwogS0VZX0ZJTEUodHhfcnhfY291bnQsIEQpOwotS0VZX1JFQUQoaWZpbmRleCwgc2RhdGEtPmRldi0+aWZpbmRleCwgMjAsICIlZFxuIik7CitLRVlfUkVBRChpZmluZGV4LCBzZGF0YS0+bmFtZSwgSUZOQU1TSVogKyAyLCAiJXNcbiIpOwogS0VZX09QUyhpZmluZGV4KTsKIAogc3RhdGljIHNzaXplX3Qga2V5X2FsZ29yaXRobV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCA0NzJiMjAzLi41OWY2ZTNiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtNDEsNiArNDEsMzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfd3JpdGUoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsCisJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICosIGNvbnN0IGNoYXIgKiwgaW50KSkKK3sKKwl1OCAqYnVmOworCXNzaXplX3QgcmV0ID0gLUVOT0RFVjsKKworCWJ1ZiA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlydG5sX2xvY2soKTsKKwlpZiAoc2RhdGEtPmRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKQorCQlyZXQgPSAoKndyaXRlKShzZGF0YSwgYnVmLCBjb3VudCk7CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiByZXQ7Cit9CisKICNkZWZpbmUgSUVFRTgwMjExX0lGX0ZNVChuYW1lLCBmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCiBzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfZm10XyMjbmFtZSgJCQkJCVwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYnVmLAkJXApAQCAtNzEsNyArOTUsNyBAQAogCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIlcE1cbiIsIHNkYXRhLT5maWVsZCk7CQlcCiB9CiAKLSNkZWZpbmUgX19JRUVFODAyMTFfSUZfRklMRShuYW1lKQkJCQkJXAorI2RlZmluZSBfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUsIF93cml0ZSkJCQkJXAogc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3JlYWRfIyNuYW1lKHN0cnVjdCBmaWxlICpmaWxlLAkJXAogCQkJCQljaGFyIF9fdXNlciAqdXNlcmJ1ZiwJCVwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCVwKQEAgLTgyLDEyICsxMDYsMjQgQEAKIH0JCQkJCQkJCQlcCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyNfb3BzID0gewkJCVwKIAkucmVhZCA9IGllZWU4MDIxMV9pZl9yZWFkXyMjbmFtZSwJCQkJXAorCS53cml0ZSA9IChfd3JpdGUpLAkJCQkJCVwKIAkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCiB9CiAKKyNkZWZpbmUgX19JRUVFODAyMTFfSUZfRklMRV9XKG5hbWUpCQkJCQlcCitzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfd3JpdGVfIyNuYW1lKHN0cnVjdCBmaWxlICpmaWxlLAkJXAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCVwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBpZWVlODAyMTFfaWZfd3JpdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCB1c2VyYnVmLCBjb3VudCwJXAorCQkJCSAgcHBvcywgaWVlZTgwMjExX2lmX3BhcnNlXyMjbmFtZSk7CVwKK30JCQkJCQkJCQlcCitfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUsIGllZWU4MDIxMV9pZl93cml0ZV8jI25hbWUpCisKKwogI2RlZmluZSBJRUVFODAyMTFfSUZfRklMRShuYW1lLCBmaWVsZCwgZm9ybWF0KQkJCQlcCiAJCUlFRUU4MDIxMV9JRl9GTVRfIyNmb3JtYXQobmFtZSwgZmllbGQpCQkJXAotCQlfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUpCisJCV9fSUVFRTgwMjExX0lGX0ZJTEUobmFtZSwgTlVMTCkKIAogLyogY29tbW9uIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKGRyb3BfdW5lbmNyeXB0ZWQsIGRyb3BfdW5lbmNyeXB0ZWQsIERFQyk7CkBAIC05Nyw3ICsxMzMsNzAgQEAKIC8qIFNUQSBhdHRyaWJ1dGVzICovCiBJRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5tZ2QuYnNzaWQsIE1BQyk7CiBJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKKworc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3NtcHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wc19tb2RlKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBlcnI7CisKKwlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMpICYmCisJICAgIHNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogYXV0byBzaG91bGQgYmUgZHluYW1pYyBpZiBpbiBQUyBtb2RlICovCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfU01QUykgJiYKKwkgICAgKHNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19EWU5BTUlDIHx8CisJICAgICBzbXBzX21vZGUgPT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdXBwb3J0ZWQgb25seSBvbiBtYW5hZ2VkIGludGVyZmFjZXMgZm9yIG5vdyAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWVyciA9IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzZGF0YSwgc21wc19tb2RlKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbXBzX21vZGVzW0lFRUU4MDIxMV9TTVBTX05VTV9NT0RFU10gPSB7CisJW0lFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQ10gPSAiYXV0byIsCisJW0lFRUU4MDIxMV9TTVBTX09GRl0gPSAib2ZmIiwKKwlbSUVFRTgwMjExX1NNUFNfU1RBVElDXSA9ICJzdGF0aWMiLAorCVtJRUVFODAyMTFfU01QU19EWU5BTUlDXSA9ICJkeW5hbWljIiwKK307CisKK3N0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfc21wcyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBzbnByaW50ZihidWYsIGJ1ZmxlbiwgInJlcXVlc3Q6ICVzXG51c2VkOiAlc1xuIiwKKwkJCXNtcHNfbW9kZXNbc2RhdGEtPnUubWdkLnJlcV9zbXBzXSwKKwkJCXNtcHNfbW9kZXNbc2RhdGEtPnUubWdkLmFwX3NtcHNdKTsKK30KKworc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3BhcnNlX3NtcHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgbW9kZTsKKworCWZvciAobW9kZSA9IDA7IG1vZGUgPCBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM7IG1vZGUrKykgeworCQlpZiAoc3RybmNtcChidWYsIHNtcHNfbW9kZXNbbW9kZV0sIGJ1ZmxlbikgPT0gMCkgeworCQkJaW50IGVyciA9IGllZWU4MDIxMV9zZXRfc21wcyhzZGF0YSwgbW9kZSk7CisJCQlpZiAoIWVycikKKwkJCQlyZXR1cm4gYnVmbGVuOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitfX0lFRUU4MDIxMV9JRl9GSUxFX1coc21wcyk7CiAKIC8qIEFQIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKG51bV9zdGFfcHMsIHUuYXAubnVtX3N0YV9wcywgQVRPTUlDKTsKQEAgLTEwOSw3ICsyMDgsNyBAQAogCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIldVxuIiwKIAkJCSBza2JfcXVldWVfbGVuKCZzZGF0YS0+dS5hcC5wc19iY19idWYpKTsKIH0KLV9fSUVFRTgwMjExX0lGX0ZJTEUobnVtX2J1ZmZlcmVkX211bHRpY2FzdCk7CitfX0lFRUU4MDIxMV9JRl9GSUxFKG51bV9idWZmZXJlZF9tdWx0aWNhc3QsIE5VTEwpOwogCiAvKiBXRFMgYXR0cmlidXRlcyAqLwogSUVFRTgwMjExX0lGX0ZJTEUocGVlciwgdS53ZHMucmVtb3RlX2FkZHIsIE1BQyk7CkBAIC0xNTgsNiArMjU3LDEwIEBACiAJZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDQwMCwgc2RhdGEtPmRlYnVnZnMuZGlyLCBcCiAJCQkgICAgc2RhdGEsICZuYW1lIyNfb3BzKTsKIAorI2RlZmluZSBERUJVR0ZTX0FERF9NT0RFKG5hbWUsIG1vZGUpIFwKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCBtb2RlLCBzZGF0YS0+ZGVidWdmcy5kaXIsIFwKKwkJCSAgICBzZGF0YSwgJm5hbWUjI19vcHMpOworCiBzdGF0aWMgdm9pZCBhZGRfc3RhX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQsIHN0YSk7CkBAIC0xNjYsNyArMjY5LDcgQEAKIAogCURFQlVHRlNfQUREKGJzc2lkLCBzdGEpOwogCURFQlVHRlNfQUREKGFpZCwgc3RhKTsKLQlERUJVR0ZTX0FERChjYXBhYiwgc3RhKTsKKwlERUJVR0ZTX0FERF9NT0RFKHNtcHMsIDA2MDApOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfYXBfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC0yODAsMTYgKzM4MywxMSBAQAogCX0KIH0KIAotc3RhdGljIGludCBub3RpZl9yZWdpc3RlcmVkOwotCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2FkZF9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJY2hhciBidWZbMTArSUZOQU1TSVpdOwogCi0JaWYgKCFub3RpZl9yZWdpc3RlcmVkKQotCQlyZXR1cm47Ci0KLQlzcHJpbnRmKGJ1ZiwgIm5ldGRldjolcyIsIHNkYXRhLT5kZXYtPm5hbWUpOworCXNwcmludGYoYnVmLCAibmV0ZGV2OiVzIiwgc2RhdGEtPm5hbWUpOwogCXNkYXRhLT5kZWJ1Z2ZzLmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihidWYsCiAJCXNkYXRhLT5sb2NhbC0+aHcud2lwaHktPmRlYnVnZnNkaXIpOwogCWFkZF9maWxlcyhzZGF0YSk7CkBAIC0zMDQsNTggKzQwMiwxOCBAQAogCXNkYXRhLT5kZWJ1Z2ZzLmRpciA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgbmV0ZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJIHVuc2lnbmVkIGxvbmcgc3RhdGUsCi0JCQkgdm9pZCAqbmRldikKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVuYW1lX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmRldjsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXI7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JY2hhciBidWZbMTArSUZOQU1TSVpdOwotCi0JaWYgKHN0YXRlICE9IE5FVERFVl9DSEFOR0VOQU1FKQotCQlyZXR1cm4gMDsKLQotCWlmICghZGV2LT5pZWVlODAyMTFfcHRyIHx8ICFkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5KQotCQlyZXR1cm4gMDsKLQotCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5LT5wcml2aWQgIT0gbWFjODAyMTFfd2lwaHlfcHJpdmlkKQotCQlyZXR1cm4gMDsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwljaGFyIGJ1ZlsxMCArIElGTkFNU0laXTsKIAogCWRpciA9IHNkYXRhLT5kZWJ1Z2ZzLmRpcjsKIAogCWlmICghZGlyKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0Jc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBkZXYtPm5hbWUpOworCXNwcmludGYoYnVmLCAibmV0ZGV2OiVzIiwgc2RhdGEtPm5hbWUpOwogCWlmICghZGVidWdmc19yZW5hbWUoZGlyLT5kX3BhcmVudCwgZGlyLCBkaXItPmRfcGFyZW50LCBidWYpKQogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExOiBkZWJ1Z2ZzOiBmYWlsZWQgdG8gcmVuYW1lIGRlYnVnZnMgIgogCQkgICAgICAgImRpciB0byAlc1xuIiwgYnVmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1hYzgwMjExX2RlYnVnZnNfbmV0ZGV2X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gbmV0ZGV2X25vdGlmeSwKLX07Ci0KLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZtYWM4MDIxMV9kZWJ1Z2ZzX25ldGRldl9ub3RpZmllcik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJtYWM4MDIxMTogZmFpbGVkIHRvIGluc3RhbGwgbmV0ZGV2IG5vdGlmaWVyLCIKLQkJICAgICAgICIgZGlzYWJsaW5nIHBlci1uZXRkZXYgZGVidWdmcyFcbiIpOwotCX0gZWxzZQotCQlub3RpZl9yZWdpc3RlcmVkID0gMTsKLX0KLQotdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfZXhpdCh2b2lkKQotewotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZtYWM4MDIxMV9kZWJ1Z2ZzX25ldGRldl9ub3RpZmllcik7Ci0Jbm90aWZfcmVnaXN0ZXJlZCA9IDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaCBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oCmluZGV4IDdhZjczMWYuLjc5MDI1ZTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oCkBAIC02LDggKzYsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2FkZF9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2luaXQodm9pZCk7Ci12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9leGl0KHZvaWQpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW5hbWVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfYWRkX25ldGRldigKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTE1LDEwICsxNCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldigKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2luaXQodm9pZCkKLXt9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfZXhpdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbmFtZV9uZXRkZXYoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggM2Y0MTYwOC4uMGQ0YTc1OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJU1RBX09QUyhuYW1lKQogCiBTVEFfRklMRShhaWQsIHN0YS5haWQsIEQpOwotU1RBX0ZJTEUoZGV2LCBzZGF0YS0+ZGV2LT5uYW1lLCBTKTsKK1NUQV9GSUxFKGRldiwgc2RhdGEtPm5hbWUsIFMpOwogU1RBX0ZJTEUocnhfcGFja2V0cywgcnhfcGFja2V0cywgTFUpOwogU1RBX0ZJTEUodHhfcGFja2V0cywgdHhfcGFja2V0cywgTFUpOwogU1RBX0ZJTEUocnhfYnl0ZXMsIHJ4X2J5dGVzLCBMVSk7CkBAIC0xNjAsNyArMTYwLDEyIEBACiBzdGF0aWMgc3NpemVfdCBzdGFfaHRfY2FwYV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQljaGFyIGJ1ZlsyMDBdLCAqcCA9IGJ1ZjsKKyNkZWZpbmUgUFJJTlRfSFRfQ0FQKF9jb25kLCBfc3RyKSBcCisJZG8geyBcCisJaWYgKF9jb25kKSBcCisJCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlx0IiBfc3RyICJcbiIpOyBcCisJfSB3aGlsZSAoMCkKKwljaGFyIGJ1ZlsxMDI0XSwgKnAgPSBidWY7CiAJaW50IGk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodGMgPSAmc3RhLT5zdGEuaHRfY2FwOwpAQCAtMTY4LDE1ICsxNzMsNjQgQEAKIAlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJodCAlc3N1cHBvcnRlZFxuIiwKIAkJCWh0Yy0+aHRfc3VwcG9ydGVkID8gIiIgOiAibm90ICIpOwogCWlmIChodGMtPmh0X3N1cHBvcnRlZCkgewotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgImNhcDogJSMuMnhcbiIsIGh0Yy0+Y2FwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJjYXA6ICUjLjR4XG4iLCBodGMtPmNhcCk7CisKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCgwKSksICJSWCBMRENQIik7CisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMSkpLCAiSFQyMC9IVDQwIik7CisJCVBSSU5UX0hUX0NBUCghKGh0Yy0+Y2FwICYgQklUKDEpKSwgIkhUMjAiKTsKKworCQlQUklOVF9IVF9DQVAoKChodGMtPmNhcCA+PiAyKSAmIDB4MykgPT0gMCwgIlN0YXRpYyBTTSBQb3dlciBTYXZlIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDIpICYgMHgzKSA9PSAxLCAiRHluYW1pYyBTTSBQb3dlciBTYXZlIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDIpICYgMHgzKSA9PSAzLCAiU00gUG93ZXIgU2F2ZSBkaXNhYmxlZCIpOworCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoNCkpLCAiUlggR3JlZW5maWVsZCIpOworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDUpKSwgIlJYIEhUMjAgU0dJIik7CisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoNikpLCAiUlggSFQ0MCBTR0kiKTsKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCg3KSksICJUWCBTVEJDIik7CisKKwkJUFJJTlRfSFRfQ0FQKCgoaHRjLT5jYXAgPj4gOCkgJiAweDMpID09IDAsICJObyBSWCBTVEJDIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDgpICYgMHgzKSA9PSAxLCAiUlggU1RCQyAxLXN0cmVhbSIpOworCQlQUklOVF9IVF9DQVAoKChodGMtPmNhcCA+PiA4KSAmIDB4MykgPT0gMiwgIlJYIFNUQkMgMi1zdHJlYW1zIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDgpICYgMHgzKSA9PSAzLCAiUlggU1RCQyAzLXN0cmVhbXMiKTsKKworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDEwKSksICJIVCBEZWxheWVkIEJsb2NrIEFjayIpOworCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMTEpKSwgIk1heCBBTVNEVSBsZW5ndGg6ICIKKwkJCSAgICAgIjM4MzkgYnl0ZXMiKTsKKwkJUFJJTlRfSFRfQ0FQKCEoaHRjLT5jYXAgJiBCSVQoMTEpKSwgIk1heCBBTVNEVSBsZW5ndGg6ICIKKwkJCSAgICAgIjc5MzUgYnl0ZXMiKTsKKworCQkvKgorCQkgKiBGb3IgYmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2UgdGhpcyB3b3VsZCBtZWFuIHRoZSBCU1MKKwkJICogZG9lcyBvciBkb2VzIG5vdCBhbGxvdyB0aGUgdXNhZ2Ugb2YgRFNTUy9DQ0sgSFQ0MC4KKwkJICogT3RoZXJ3aXNlIGl0IG1lYW5zIHRoZSBTVEEgZG9lcyBvciBkb2VzIG5vdCB1c2UKKwkJICogRFNTUy9DQ0sgSFQ0MC4KKwkJICovCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMTIpKSwgIkRTU1MvQ0NLIEhUNDAiKTsKKwkJUFJJTlRfSFRfQ0FQKCEoaHRjLT5jYXAgJiBCSVQoMTIpKSwgIk5vIERTU1MvQ0NLIEhUNDAiKTsKKworCQkvKiBCSVQoMTMpIGlzIHJlc2VydmVkICovCisKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCgxNCkpLCAiNDAgTUh6IEludG9sZXJhbnQiKTsKKworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDE1KSksICJMLVNJRyBUWE9QIHByb3RlY3Rpb24iKTsKKwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgImFtcGR1IGZhY3Rvci9kZW5zaXR5OiAlZC8lZFxuIiwKIAkJCQlodGMtPmFtcGR1X2ZhY3RvciwgaHRjLT5hbXBkdV9kZW5zaXR5KTsKIAkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJNQ1MgbWFzazoiKTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0hUX01DU19NQVNLX0xFTjsgaSsrKQogCQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIgJS4yeCIsCiAJCQkJCWh0Yy0+bWNzLnJ4X21hc2tbaV0pOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuTUNTIHJ4IGhpZ2hlc3Q6ICVkXG4iLAotCQkJCWxlMTZfdG9fY3B1KGh0Yy0+bWNzLnJ4X2hpZ2hlc3QpKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOworCisJCS8qIElmIG5vdCBzZXQgdGhpcyBpcyBtZWFuaW5nbGVzcyAqLworCQlpZiAobGUxNl90b19jcHUoaHRjLT5tY3MucnhfaGlnaGVzdCkpIHsKKwkJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAorCQkJCSAgICAgICAiTUNTIHJ4IGhpZ2hlc3Q6ICVkIE1icHNcbiIsCisJCQkJICAgICAgIGxlMTZfdG9fY3B1KGh0Yy0+bWNzLnJ4X2hpZ2hlc3QpKTsKKwkJfQorCiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiTUNTIHR4IHBhcmFtczogJXhcbiIsCiAJCQkJaHRjLT5tY3MudHhfcGFyYW1zKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaAppbmRleCA5MjFkZDljLi44NzU3ZWE3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKQEAgLTE0LDYgKzE0LDggQEAKIHsKIAlpbnQgcmV0OwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWxvY2FsLT5zdGFydGVkID0gdHJ1ZTsKIAlzbXBfbWIoKTsKIAlyZXQgPSBsb2NhbC0+b3BzLT5zdGFydCgmbG9jYWwtPmh3KTsKQEAgLTIzLDYgKzI1LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogeworCW1pZ2h0X3NsZWVwKCk7CisKIAlsb2NhbC0+b3BzLT5zdG9wKCZsb2NhbC0+aHcpOwogCXRyYWNlX2Rydl9zdG9wKGxvY2FsKTsKIApAQCAtMzYsMzUgKzQwLDQ3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlpbnQgcmV0ID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZSgmbG9jYWwtPmh3LCBjb25mKTsKLQl0cmFjZV9kcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgY29uZi0+bWFjX2FkZHIsIGNvbmYtPnZpZiwgcmV0KTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoJmxvY2FsLT5odywgdmlmKTsKKwl0cmFjZV9kcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgdmlmX3RvX3NkYXRhKHZpZiksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlsb2NhbC0+b3BzLT5yZW1vdmVfaW50ZXJmYWNlKCZsb2NhbC0+aHcsIGNvbmYpOwotCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCBjb25mLT5tYWNfYWRkciwgY29uZi0+dmlmKTsKKwltaWdodF9zbGVlcCgpOworCisJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZSgmbG9jYWwtPmh3LCB2aWYpOworCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCB2aWZfdG9fc2RhdGEodmlmKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiBjaGFuZ2VkKQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CisJaW50IHJldDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CiAJdHJhY2VfZHJ2X2NvbmZpZyhsb2NhbCwgY2hhbmdlZCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAogCQkJCQl1MzIgY2hhbmdlZCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQpCi0JCWxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQoJmxvY2FsLT5odywgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKLQl0cmFjZV9kcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKKwkJbG9jYWwtPm9wcy0+YnNzX2luZm9fY2hhbmdlZCgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgaW5mbywgY2hhbmdlZCk7CisJdHJhY2VfZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsIHNkYXRhLCBpbmZvLCBjaGFuZ2VkKTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgZHJ2X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMTA2LDEyICsxMjIsMTcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5zZXRfa2V5KCZsb2NhbC0+aHcsIGNtZCwgdmlmLCBzdGEsIGtleSk7Ci0JdHJhY2VfZHJ2X3NldF9rZXkobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPnNldF9rZXkoJmxvY2FsLT5odywgY21kLCAmc2RhdGEtPnZpZiwgc3RhLCBrZXkpOworCXRyYWNlX2Rydl9zZXRfa2V5KGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjAsNiArMTQxLDggQEAKIAkJCQkgICAgICAgY29uc3QgdTggKmFkZHJlc3MsIHUzMiBpdjMyLAogCQkJCSAgICAgICB1MTYgKnBoYXNlMWtleSkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSkKIAkJbG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5KCZsb2NhbC0+aHcsIGNvbmYsIGFkZHJlc3MsCiAJCQkJCSAgICBpdjMyLCBwaGFzZTFrZXkpOwpAQCAtMTI5LDEzICsxNTIsMTkgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5od19zY2FuKCZsb2NhbC0+aHcsIHJlcSk7CisJaW50IHJldDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5od19zY2FuKCZsb2NhbC0+aHcsIHJlcSk7CiAJdHJhY2VfZHJ2X2h3X3NjYW4obG9jYWwsIHJlcSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX3N0YXJ0KQogCQlsb2NhbC0+b3BzLT5zd19zY2FuX3N0YXJ0KCZsb2NhbC0+aHcpOwogCXRyYWNlX2Rydl9zd19zY2FuX3N0YXJ0KGxvY2FsKTsKQEAgLTE0Myw2ICsxNzIsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKQogCQlsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKCZsb2NhbC0+aHcpOwogCXRyYWNlX2Rydl9zd19zY2FuX2NvbXBsZXRlKGxvY2FsKTsKQEAgLTE1Myw2ICsxODQsOCBAQAogewogCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3N0YXRzKQogCQlyZXQgPSBsb2NhbC0+b3BzLT5nZXRfc3RhdHMoJmxvY2FsLT5odywgc3RhdHMpOwogCXRyYWNlX2Rydl9nZXRfc3RhdHMobG9jYWwsIHN0YXRzLCByZXQpOwpAQCAtMTcyLDYgKzIwNSw5IEBACiAJCQkJCXUzMiB2YWx1ZSkKIHsKIAlpbnQgcmV0ID0gMDsKKworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQpCiAJCXJldCA9IGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKCZsb2NhbC0+aHcsIHZhbHVlKTsKIAl0cmFjZV9kcnZfc2V0X3J0c190aHJlc2hvbGQobG9jYWwsIHZhbHVlLCByZXQpOwpAQCAtMTc5LDE5ICsyMTUsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KQotCQlsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KCZsb2NhbC0+aHcsIHZpZiwgY21kLCBzdGEpOwotCXRyYWNlX2Rydl9zdGFfbm90aWZ5KGxvY2FsLCB2aWYsIGNtZCwgc3RhKTsKKwkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgY21kLCBzdGEpOworCXRyYWNlX2Rydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgY21kLCBzdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IHF1ZXVlLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKIAlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHgpCiAJCXJldCA9IGxvY2FsLT5vcHMtPmNvbmZfdHgoJmxvY2FsLT5odywgcXVldWUsIHBhcmFtcyk7CiAJdHJhY2VfZHJ2X2NvbmZfdHgobG9jYWwsIHF1ZXVlLCBwYXJhbXMsIHJldCk7CkBAIC0yMDksNiArMjQ4LDkgQEAKIHN0YXRpYyBpbmxpbmUgdTY0IGRydl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXU2NCByZXQgPSAtMVVMTDsKKworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3RzZikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+Z2V0X3RzZigmbG9jYWwtPmh3KTsKIAl0cmFjZV9kcnZfZ2V0X3RzZihsb2NhbCwgcmV0KTsKQEAgLTIxNyw2ICsyNTksOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCB0c2YpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKQogCQlsb2NhbC0+b3BzLT5zZXRfdHNmKCZsb2NhbC0+aHcsIHRzZik7CiAJdHJhY2VfZHJ2X3NldF90c2YobG9jYWwsIHRzZik7CkBAIC0yMjQsNiArMjY4LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpCiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZigmbG9jYWwtPmh3KTsKIAl0cmFjZV9kcnZfcmVzZXRfdHNmKGxvY2FsKTsKQEAgLTIzMiw2ICsyNzgsOSBAQAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWludCByZXQgPSAxOworCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24oJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3R4X2xhc3RfYmVhY29uKGxvY2FsLCByZXQpOwpAQCAtMjM5LDIzICsyODgsMzQgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAogCQkJCSAgIHUxNiAqc3NuKQogewogCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgdmlmLCBhY3Rpb24sCisJCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgYWN0aW9uLAogCQkJCQkgICAgICAgc3RhLCB0aWQsIHNzbik7Ci0JdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgdmlmLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCk7CisJdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc2RhdGEsIGFjdGlvbiwgc3RhLCB0aWQsIHNzbiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5yZmtpbGxfcG9sbCkKIAkJbG9jYWwtPm9wcy0+cmZraWxsX3BvbGwoJmxvY2FsLT5odyk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcnZfZmx1c2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGJvb2wgZHJvcCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X2ZsdXNoKGxvY2FsLCBkcm9wKTsKKwlpZiAobG9jYWwtPm9wcy0+Zmx1c2gpCisJCWxvY2FsLT5vcHMtPmZsdXNoKCZsb2NhbC0+aHcsIGRyb3ApOworfQogI2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCmluZGV4IGVlOTRlYTAuLjk3N2NjNzUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKQEAgLTI1LDEwICsyNSwxMiBAQAogI2RlZmluZSBTVEFfUFJfRk1UCSIgc3RhOiVwTSIKICNkZWZpbmUgU1RBX1BSX0FSRwlfX2VudHJ5LT5zdGFfYWRkcgogCi0jZGVmaW5lIFZJRl9FTlRSWQlfX2ZpZWxkKGVudW0gbmw4MDIxMV9pZnR5cGUsIHZpZl90eXBlKSBfX2ZpZWxkKHZvaWQgKiwgdmlmKQotI2RlZmluZSBWSUZfQVNTSUdOCV9fZW50cnktPnZpZl90eXBlID0gdmlmID8gdmlmLT50eXBlIDogMDsgX19lbnRyeS0+dmlmID0gdmlmCi0jZGVmaW5lIFZJRl9QUl9GTVQJIiB2aWY6JXAoJWQpIgotI2RlZmluZSBWSUZfUFJfQVJHCV9fZW50cnktPnZpZiwgX19lbnRyeS0+dmlmX3R5cGUKKyNkZWZpbmUgVklGX0VOVFJZCV9fZmllbGQoZW51bSBubDgwMjExX2lmdHlwZSwgdmlmX3R5cGUpIF9fZmllbGQodm9pZCAqLCBzZGF0YSkgXAorCQkJX19zdHJpbmcodmlmX25hbWUsIHNkYXRhLT5kZXYgPyBzZGF0YS0+ZGV2LT5uYW1lIDogIjxub2Rldj4iKQorI2RlZmluZSBWSUZfQVNTSUdOCV9fZW50cnktPnZpZl90eXBlID0gc2RhdGEtPnZpZi50eXBlOyBfX2VudHJ5LT5zZGF0YSA9IHNkYXRhOyBcCisJCQlfX2Fzc2lnbl9zdHIodmlmX25hbWUsIHNkYXRhLT5kZXYgPyBzZGF0YS0+ZGV2LT5uYW1lIDogIjxub2Rldj4iKQorI2RlZmluZSBWSUZfUFJfRk1UCSIgdmlmOiVzKCVkKSIKKyNkZWZpbmUgVklGX1BSX0FSRwlfX2dldF9zdHIodmlmX25hbWUpLCBfX2VudHJ5LT52aWZfdHlwZQogCiBUUkFDRV9FVkVOVChkcnZfc3RhcnQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCByZXQpLApAQCAtNzAsMTEgKzcyLDEwIEBACiAKIFRSQUNFX0VWRU5UKGRydl9hZGRfaW50ZXJmYWNlLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgY29uc3QgdTggKmFkZHIsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIGFkZHIsIHZpZiwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC04Niw3ICs4Nyw3IEBACiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKIAkJX19lbnRyeS0+cmV0ID0gcmV0OwogCSksCiAKQEAgLTk3LDEwICs5OCw5IEBACiApOwogCiBUUkFDRV9FVkVOVChkcnZfcmVtb3ZlX2ludGVyZmFjZSwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgYWRkciwgdmlmKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQpAQCAtMTExLDcgKzExMSw3IEBACiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKIAkpLAogCiAJVFBfcHJpbnRrKApAQCAtMTQwLDYgKzE0MCw3IEBACiAJCV9fZmllbGQodTgsIHNob3J0X2ZyYW1lX21heF90eF9jb3VudCkKIAkJX19maWVsZChpbnQsIGNlbnRlcl9mcmVxKQogCQlfX2ZpZWxkKGludCwgY2hhbm5lbF90eXBlKQorCQlfX2ZpZWxkKGludCwgc21wcykKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0xNTUsNiArMTU2LDcgQEAKIAkJX19lbnRyeS0+c2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50ID0gbG9jYWwtPmh3LmNvbmYuc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCQlfX2VudHJ5LT5jZW50ZXJfZnJlcSA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCQlfX2VudHJ5LT5jaGFubmVsX3R5cGUgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGU7CisJCV9fZW50cnktPnNtcHMgPSBsb2NhbC0+aHcuY29uZi5zbXBzX21vZGU7CiAJKSwKIAogCVRQX3ByaW50aygKQEAgLTE2NSwxMSArMTY3LDExIEBACiAKIFRSQUNFX0VWRU5UKGRydl9ic3NfaW5mb19jaGFuZ2VkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKIAkJIHUzMiBjaGFuZ2VkKSwKIAotCVRQX0FSR1MobG9jYWwsIHZpZiwgaW5mbywgY2hhbmdlZCksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGluZm8sIGNoYW5nZWQpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKQEAgLTI5MywxMSArMjk1LDExIEBACiAKIFRSQUNFX0VWRU5UKGRydl9zZXRfa2V5LAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgZW51bSBzZXRfa2V5X2NtZCBjbWQsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC00OTEsMTEgKzQ5MywxMSBAQAogCiBUUkFDRV9FVkVOVChkcnZfc3RhX25vdGlmeSwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSksCiAKLQlUUF9BUkdTKGxvY2FsLCB2aWYsIGNtZCwgc3RhKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgY21kLCBzdGEpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKQEAgLTY1NiwxMiArNjU4LDEyIEBACiAKIFRSQUNFX0VWRU5UKGRydl9hbXBkdV9hY3Rpb24sCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAogCQkgdTE2ICpzc24sIGludCByZXQpLAogCi0JVFBfQVJHUyhsb2NhbCwgdmlmLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGFjdGlvbiwgc3RhLCB0aWQsIHNzbiwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC02ODgsNiArNjkwLDI3IEBACiAJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgU1RBX1BSX0FSRywgX19lbnRyeS0+YWN0aW9uLCBfX2VudHJ5LT50aWQsIF9fZW50cnktPnJldAogCSkKICk7CisKK1RSQUNFX0VWRU5UKGRydl9mbHVzaCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCBkcm9wKSwKKworCVRQX0FSR1MobG9jYWwsIGRyb3ApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZChib29sLCBkcm9wKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5kcm9wID0gZHJvcDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiBkcm9wOiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5kcm9wCisJKQorKTsKICNlbmRpZiAvKiAhX19NQUM4MDIxMV9EUklWRVJfVFJBQ0UgfHwgVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQgKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2h0LmMgYi9uZXQvbWFjODAyMTEvaHQuYwppbmRleCBkN2RjZWU2Li5iYjY3N2E3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaHQuYworKysgYi9uZXQvbWFjODAyMTEvaHQuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJCQkJImZvciBkZWxiYSBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCQkJCSJmb3IgZGVsYmEgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTMzLDEwICsxMzMsMTAgQEAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7CiAJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKIAkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCi0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIApAQCAtMTg1LDMgKzE4NSw1MCBAQAogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAl9CiB9CisKK2ludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcywgY29uc3QgdTggKmRhLAorCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqYWN0aW9uX2ZyYW1lOworCisJLyogMjcgPSBoZWFkZXIgKyBjYXRlZ29yeSArIGFjdGlvbiArIHNtcHMgbW9kZSAqLworCXNrYiA9IGRldl9hbGxvY19za2IoMjcgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwlhY3Rpb25fZnJhbWUgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCAyNyk7CisJbWVtY3B5KGFjdGlvbl9mcmFtZS0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KGFjdGlvbl9mcmFtZS0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGFjdGlvbl9mcmFtZS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJYWN0aW9uX2ZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9IVDsKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuaHRfc21wcy5hY3Rpb24gPSBXTEFOX0hUX0FDVElPTl9TTVBTOworCXN3aXRjaCAoc21wcykgeworCWNhc2UgSUVFRTgwMjExX1NNUFNfQVVUT01BVElDOgorCWNhc2UgSUVFRTgwMjExX1NNUFNfTlVNX01PREVTOgorCQlXQVJOX09OKDEpOworCWNhc2UgSUVFRTgwMjExX1NNUFNfT0ZGOgorCQlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuaHRfc21wcy5zbXBzX2NvbnRyb2wgPQorCQkJCVdMQU5fSFRfU01QU19DT05UUk9MX0RJU0FCTEVEOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TTVBTX1NUQVRJQzoKKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9TVEFUSUM7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfRFlOQU1JQzoKKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDOworCQlicmVhazsKKwl9CisKKwkvKiB3ZSdsbCBkbyBtb3JlIG9uIHN0YXR1cyBvZiB0aGlzIGZyYW1lICovCisJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lic3MuYyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKaW5kZXggMWYyZGI2NC4uNWJjZGU0YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lic3MuYworKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKIAltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+YnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0gY3B1X3RvX2xlMTYoYmVhY29uX2ludCk7CiAJbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQodHNmKTsKQEAgLTE4NywxNSArMTg3LDE3IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzID0KKwkJY29udGFpbmVyX29mKCh2b2lkICopYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfYnNzLCBwcml2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAl1MzIgYmFzaWNfcmF0ZXM7CiAJaW50IGksIGo7Ci0JdTE2IGJlYWNvbl9pbnQgPSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsOworCXUxNiBiZWFjb25faW50ID0gY2Jzcy0+YmVhY29uX2ludGVydmFsOwogCiAJaWYgKGJlYWNvbl9pbnQgPCAxMCkKIAkJYmVhY29uX2ludCA9IDEwOwogCi0Jc2JhbmQgPSBzZGF0YS0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1tic3MtPmNic3MuY2hhbm5lbC0+YmFuZF07CisJc2JhbmQgPSBzZGF0YS0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1tjYnNzLT5jaGFubmVsLT5iYW5kXTsKIAogCWJhc2ljX3JhdGVzID0gMDsKIApAQCAtMjEyLDEyICsyMTQsMTIgQEAKIAkJfQogCX0KIAotCV9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcy0+Y2Jzcy5ic3NpZCwKKwlfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBjYnNzLT5ic3NpZCwKIAkJCQkgIGJlYWNvbl9pbnQsCi0JCQkJICBic3MtPmNic3MuY2hhbm5lbCwKKwkJCQkgIGNic3MtPmNoYW5uZWwsCiAJCQkJICBiYXNpY19yYXRlcywKLQkJCQkgIGJzcy0+Y2Jzcy5jYXBhYmlsaXR5LAotCQkJCSAgYnNzLT5jYnNzLnRzZik7CisJCQkJICBjYnNzLT5jYXBhYmlsaXR5LAorCQkJCSAgY2Jzcy0+dHNmKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMjI5LDYgKzIzMSw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IGZyZXE7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKQEAgLTI1Miw3ICsyNTUsNyBAQAogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBtZ210LT5zYSk7CiAJCWlmIChzdGEpIHsKIAkJCXUzMiBwcmV2X3JhdGVzOwogCkBAIC0yNjYsNyArMjY5LDcgQEAKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgogCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgogCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCi0JCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkJICAgIHNkYXRhLT5uYW1lLAogCQkJCSAgICBzdGEtPnN0YS5hZGRyLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLApAQCAtMjgzLDggKzI4NiwxMCBAQAogCWlmICghYnNzKQogCQlyZXR1cm47CiAKKwljYnNzID0gY29udGFpbmVyX29mKCh2b2lkICopYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfYnNzLCBwcml2KTsKKwogCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLwotCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOworCWJlYWNvbl90aW1lc3RhbXAgPSBjYnNzLT50c2Y7CiAKIAkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KIApAQCAtMjk3LDExICszMDIsMTEgQEAKIAkJZ290byBwdXRfYnNzOwogCiAJLyogbm90IGFuIElCU1MgKi8KLQlpZiAoIShic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKKwlpZiAoIShjYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQogCQlnb3RvIHB1dF9ic3M7CiAKIAkvKiBkaWZmZXJlbnQgY2hhbm5lbCAqLwotCWlmIChic3MtPmNic3MuY2hhbm5lbCAhPSBsb2NhbC0+b3Blcl9jaGFubmVsKQorCWlmIChjYnNzLT5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCiAJCWdvdG8gcHV0X2JzczsKIAogCS8qIGRpZmZlcmVudCBTU0lEICovCkBAIC0zMTEsNyArMzE2LDcgQEAKIAkJZ290byBwdXRfYnNzOwogCiAJLyogc2FtZSBCU1NJRCAqLwotCWlmIChtZW1jbXAoYnNzLT5jYnNzLmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwlpZiAobWVtY21wKGNic3MtPmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKIAkJZ290byBwdXRfYnNzOwogCiAJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkgewpAQCAtMzY0LDcgKzM2OSw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKIAkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+YnNzaWQpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIG1nbXQtPmJzc2lkKTsKICNlbmRpZgogCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKIAkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKQEAgLTM5NCw3ICszOTksNyBAQAogCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgZW50cnkgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFkZHIpOworCQkJICAgICAgIHNkYXRhLT5uYW1lLCBhZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MDYsNyArNDExLDcgQEAKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRpbmcgbmV3IElCU1Mgc3RhdGlvbiAlcE0gKGRldj0lcylcbiIsCi0JICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgYWRkciwgc2RhdGEtPmRldi0+bmFtZSk7CisJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgYWRkciwgc2RhdGEtPm5hbWUpOwogI2VuZGlmCiAKIAlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7CkBAIC00NzAsNyArNDc1LDcgQEAKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKLQkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5uYW1lKTsKIAogCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CiB9CkBAIC00OTIsMTMgKzQ5NywxMyBAQAogCQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwogCQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7CiAJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07CisJCQlic3NpZFtpXSBePSBzZGF0YS0+dmlmLmFkZHJbaV07CiAJCWJzc2lkWzBdICY9IH4weDAxOwogCQlic3NpZFswXSB8PSAweDAyOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7CisJICAgICAgIHNkYXRhLT5uYW1lLCBic3NpZCk7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbaWZpYnNzLT5jaGFubmVsLT5iYW5kXTsKIApAQCAtNTE4LDcgKzUyMyw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3M7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gTlVMTDsKIAljb25zdCB1OCAqYnNzaWQgPSBOVUxMOwogCWludCBhY3RpdmVfaWJzczsKQEAgLTUyNyw3ICs1MzIsNyBAQAogCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOworCSAgICAgICBzZGF0YS0+bmFtZSwgYWN0aXZlX2lic3MpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAKIAlpZiAoYWN0aXZlX2lic3MpCkBAIC01NDIsMjEgKzU0NywyMyBAQAogCQljaGFuID0gaWZpYnNzLT5jaGFubmVsOwogCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGlmaWJzcy0+YnNzaWQpKQogCQlic3NpZCA9IGlmaWJzcy0+YnNzaWQ7Ci0JYnNzID0gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgY2hhbiwgYnNzaWQsCi0JCQkJICAgICAgIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbiwKLQkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MgfAotCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKLQkJCQkgICAgICAgY2FwYWJpbGl0eSk7CisJY2JzcyA9IGNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBjaGFuLCBic3NpZCwKKwkJCQlpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4sCisJCQkJV0xBTl9DQVBBQklMSVRZX0lCU1MgfCBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKKwkJCQljYXBhYmlsaXR5KTsKIAotCWlmIChic3MpIHsKKwlpZiAoY2JzcykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCisJCWJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgotCQkgICAgICAgIiVwTVxuIiwgYnNzLT5jYnNzLmJzc2lkLCBpZmlic3MtPmJzc2lkKTsKKwkJICAgICAgICIlcE1cbiIsIGNic3MtPmJzc2lkLCBpZmlic3MtPmJzc2lkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VsZWN0ZWQgSUJTUyBCU1NJRCAlcE0iCiAJCSAgICAgICAiIGJhc2VkIG9uIGNvbmZpZ3VyZWQgU1NJRFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzcy0+Y2Jzcy5ic3NpZCk7CisJCSAgICAgICBzZGF0YS0+bmFtZSwgY2Jzcy0+YnNzaWQpOwogCiAJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOwogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKQEAgLTU3NSw3ICs1ODIsNyBAQAogCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZmlic3MtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKwogCQkJCQlJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCSAgICAgICAiam9pblxuIiwgc2RhdGEtPm5hbWUpOwogCiAJCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmaWJzcy0+c3NpZCwKIAkJCQkJCWlmaWJzcy0+c3NpZF9sZW4pOwpAQCAtNTg5LDcgKzU5Niw3IEBACiAJCQkJcmV0dXJuOwogCQkJfQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgotCQkJICAgICAgICIgJWQgTUh6XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAorCQkJICAgICAgICIgJWQgTUh6XG4iLCBzZGF0YS0+bmFtZSwKIAkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKIAkJCS8qIE5vIElCU1MgZm91bmQgLSBkZWNyZWFzZSBzY2FuIGludGVydmFsIGFuZCBjb250aW51ZQpAQCAtNjIzLDcgKzYzMCw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgogCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKKwkgICAgICAgc2RhdGEtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKIAkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCkBAIC02NDEsNyArNjQ4LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCiAJCSAgICAgICAiZnJvbSAlcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSk7CisJCSAgICAgICBzZGF0YS0+bmFtZSwgbWdtdC0+c2EpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CkBAIC02NjEsNyArNjY4LDcgQEAKIAltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbmRpbmcgUHJvYmVSZXNwIHRvICVwTVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVzcC0+ZGEpOworCSAgICAgICBzZGF0YS0+bmFtZSwgcmVzcC0+ZGEpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CkBAIC02NzUsNyArNjgyLDcgQEAKIAlzaXplX3QgYmFzZWxlbjsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAotCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikpCiAJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KIAogCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CkBAIC03NDgsNyArNzU1LDcgQEAKIAlpZiAoV0FSTl9PTihsb2NhbC0+c3VzcGVuZGVkKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlyZXR1cm47CiAKIAlpZiAobG9jYWwtPnNjYW5uaW5nKQpAQCAtODMxLDcgKzgzOCw3IEBACiAKIAltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA5MWRjODYzLi5hMjc5MjFlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtNzEsOSArNzEsNiBAQAogCiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzIHsKLQkvKiBZZXMsIHRoaXMgaXMgYSBoYWNrICovCi0Jc3RydWN0IGNmZzgwMjExX2JzcyBjYnNzOwotCiAJLyogZG9uJ3Qgd2FudCB0byBsb29rIHVwIGFsbCB0aGUgdGltZSAqLwogCXNpemVfdCBzc2lkX2xlbjsKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwpAQCAtMTQwLDcgKzEzNyw2IEBACiAKIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMjI4LDMxICsyMjQsNzggQEAKIAl1OCBmbGFnczsKIH07CiAKLWVudW0gaWVlZTgwMjExX21nZF9zdGF0ZSB7Ci0JSUVFRTgwMjExX01HRF9TVEFURV9JRExFLAotCUlFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkUsCi0JSUVFRTgwMjExX01HRF9TVEFURV9BVVRILAotCUlFRUU4MDIxMV9NR0RfU1RBVEVfQVNTT0MsCitlbnVtIGllZWU4MDIxMV93b3JrX3R5cGUgeworCUlFRUU4MDIxMV9XT1JLX0FCT1JULAorCUlFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRSwKKwlJRUVFODAyMTFfV09SS19BVVRILAorCUlFRUU4MDIxMV9XT1JLX0FTU09DLAorCUlFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMLAogfTsKIAotc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayB7CisvKioKKyAqIGVudW0gd29ya19kb25lX3Jlc3VsdCAtIGluZGljYXRlcyB3aGF0IHRvIGRvIGFmdGVyIHdvcmsgd2FzIGRvbmUKKyAqCisgKiBAV09SS19ET05FX0RFU1RST1k6IFRoaXMgd29yayBpdGVtIGlzIG5vIGxvbmdlciBuZWVkZWQsIGRlc3Ryb3kuCisgKiBAV09SS19ET05FX1JFUVVFVUU6IFRoaXMgd29yayBpdGVtIHdhcyByZXNldCB0byBiZSByZXVzZWQsIGFuZAorICoJc2hvdWxkIGJlIHJlcXVldWVkLgorICovCitlbnVtIHdvcmtfZG9uZV9yZXN1bHQgeworCVdPUktfRE9ORV9ERVNUUk9ZLAorCVdPUktfRE9ORV9SRVFVRVVFLAorfTsKKworc3RydWN0IGllZWU4MDIxMV93b3JrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlpbnQgaWVfbGVuOwotCXU4IHByZXZfYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTggc3NpZF9sZW47CisKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCWVudW0gd29ya19kb25lX3Jlc3VsdCAoKmRvbmUpKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7CisKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHN0YXRlOwotCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbjsKKwllbnVtIGllZWU4MDIxMV93b3JrX3R5cGUgdHlwZTsKIAotCWludCB0cmllczsKKwl1OCBmaWx0ZXJfdGFbRVRIX0FMRU5dOwogCi0JdTgga2V5W1dMQU5fS0VZX0xFTl9XRVAxMDRdOwotCXU4IGtleV9sZW4sIGtleV9pZHg7CisJYm9vbCBzdGFydGVkOwogCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50IHRyaWVzOworCQkJdTE2IGFsZ29yaXRobSwgdHJhbnNhY3Rpb247CisJCQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCQkJdTggc3NpZF9sZW47CisJCQl1OCBrZXlbV0xBTl9LRVlfTEVOX1dFUDEwNF07CisJCQl1OCBrZXlfbGVuLCBrZXlfaWR4OworCQkJYm9vbCBwcml2YWN5OworCQl9IHByb2JlX2F1dGg7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CisJCQljb25zdCB1OCAqc3VwcF9yYXRlczsKKwkJCWNvbnN0IHU4ICpodF9pbmZvcm1hdGlvbl9pZTsKKwkJCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzOworCQkJaW50IHRyaWVzOworCQkJdTE2IGNhcGFiaWxpdHk7CisJCQl1OCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwkJCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJCQl1OCBzc2lkX2xlbjsKKwkJCXU4IHN1cHBfcmF0ZXNfbGVuOworCQkJYm9vbCB3bW1fdXNlZCwgdXNlXzExbjsKKwkJfSBhc3NvYzsKKwkJc3RydWN0IHsKKwkJCXUzMiBkdXJhdGlvbjsKKwkJCWJvb2wgc3RhcnRlZDsKKwkJfSByZW1haW47CisJfTsKKworCWludCBpZV9sZW47CiAJLyogbXVzdCBiZSBsYXN0ICovCi0JdTggaWVbMF07IC8qIGZvciBhdXRoIG9yIGFzc29jIGZyYW1lLCBub3QgcHJvYmUgKi8KKwl1OCBpZVswXTsKIH07CiAKIC8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCkBAIC0yNjAsMTcgKzMwMywxMSBAQAogCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwJPSBCSVQoMCksCiAJSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwJPSBCSVQoMSksCiAJSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQJPSBCSVQoMiksCi0JSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAk9IEJJVCgzKSwKIAlJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOCT0gQklUKDQpLAogCUlFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECT0gQklUKDUpLAogCUlFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJPSBCSVQoNiksCiB9OwogCi0vKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCi1lbnVtIGllZWU4MDIxMV9zdGFfcmVxdWVzdCB7Ci0JSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwKLX07Ci0KIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgY29ubl9tb25fdGltZXI7CkBAIC0yODUsMjEgKzMyMiwxOCBAQAogCWludCBwcm9iZV9zZW5kX2NvdW50OwogCiAJc3RydWN0IG11dGV4IG10eDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYXNzb2NpYXRlZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICpvbGRfYXNzb2NpYXRlX3dvcms7Ci0Jc3RydWN0IGxpc3RfaGVhZCB3b3JrX2xpc3Q7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYXNzb2NpYXRlZDsKIAogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAogCXUxNiBhaWQ7Ci0JdTE2IGNhcGFiOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CiAKIAl1bnNpZ25lZCBsb25nIHRpbWVyc19ydW5uaW5nOyAvKiB1c2VkIGZvciBxdWllc2NlL3Jlc3RhcnQgKi8KIAlib29sIHBvd2Vyc2F2ZTsgLyogcG93ZXJzYXZlIHJlcXVlc3RlZCBmb3IgdGhpcyBpZmFjZSAqLwotCi0JdW5zaWduZWQgbG9uZyByZXF1ZXN0OworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSByZXFfc21wcywgLyogcmVxdWVzdGVkIHNtcHMgbW9kZSAqLworCQkJCSBhcF9zbXBzOyAvKiBzbXBzIG1vZGUgQVAgdGhpbmtzIHdlJ3JlIGluICovCiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTQzMyw2ICs0NjcsOCBAQAogCiAJaW50IGRyb3BfdW5lbmNyeXB0ZWQ7CiAKKwljaGFyIG5hbWVbSUZOQU1TSVpdOworCiAJLyoKIAkgKiBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIEhUIG9wbW9kZSAoc3RvcmVkIGluCiAJICogdmlmLmJzc19pbmZvLmh0X29wZXJhdGlvbl9tb2RlKSBpcyB2YWxpZC4KQEAgLTU2NSw2ICs2MDEsMTUgQEAKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzOwogCiAJLyoKKwkgKiB3b3JrIHN0dWZmLCBwb3RlbnRpYWxseSBvZmYtY2hhbm5lbCAoaW4gdGhlIGZ1dHVyZSkKKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggd29ya19tdHg7CisJc3RydWN0IGxpc3RfaGVhZCB3b3JrX2xpc3Q7CisJc3RydWN0IHRpbWVyX2xpc3Qgd29ya190aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya193b3JrOworCXN0cnVjdCBza19idWZmX2hlYWQgd29ya19za2JfcXVldWU7CisKKwkvKgogCSAqIHByaXZhdGUgd29ya3F1ZXVlIHRvIG1hYzgwMjExLiBtYWM4MDIxMSBtYWtlcyB0aGlzIGFjY2Vzc2libGUKIAkgKiB2aWEgaWVlZTgwMjExX3F1ZXVlX3dvcmsoKQogCSAqLwpAQCAtNTg2LDYgKzYzMSw5IEBACiAJLyogdXNlZCBmb3IgdXBsb2FkaW5nIGNoYW5nZWQgbWMgbGlzdCAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNvbmZpZ19maWx0ZXI7CiAKKwkvKiB1c2VkIHRvIHJlY29uZmlndXJlIGhhcmR3YXJlIFNNIFBTICovCisJc3RydWN0IHdvcmtfc3RydWN0IHJlY2FsY19zbXBzOworCiAJLyogYWdncmVnYXRlZCBtdWx0aWNhc3QgbGlzdCAqLwogCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0OwogCWludCBtY19jb3VudDsKQEAgLTY4OSw2ICs3MzcsMTAgQEAKIAllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbm5lbF90eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqY3NhX2NoYW5uZWw7CiAKKwkvKiBUZW1wb3JhcnkgcmVtYWluLW9uLWNoYW5uZWwgZm9yIG9mZi1jaGFubmVsIG9wZXJhdGlvbnMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnRtcF9jaGFubmVsOworCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgdG1wX2NoYW5uZWxfdHlwZTsKKwogCS8qIFNOTVAgY291bnRlcnMgKi8KIAkvKiBkb3QxMUNvdW50ZXJzVGFibGUgKi8KIAl1MzIgZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CkBAIC03NDYsNyArNzk4LDcgQEAKIAl1bnNpZ25lZCBpbnQgd21tX2FjbTsgLyogYml0IGZpZWxkIG9mIEFDTSBiaXRzIChCSVQoODAyLjFEIHRhZykpICovCiAKIAlib29sIHBzcG9sbGluZzsKLQlib29sIHNjYW5fcHNfZW5hYmxlZDsKKwlib29sIG9mZmNoYW5uZWxfcHNfZW5hYmxlZDsKIAkvKgogCSAqIFBTIGNhbiBvbmx5IGJlIGVuYWJsZWQgd2hlbiB3ZSBoYXZlIGV4YWN0bHkgb25lIG1hbmFnZWQKIAkgKiBpbnRlcmZhY2UgKGFuZCBtb25pdG9ycykgaW4gUFMsIHRoaXMgdGhlbiBwb2ludHMgdGhlcmUuCkBAIC03NjAsNiArODEyLDggQEAKIAlpbnQgdXNlcl9wb3dlcl9sZXZlbDsgLyogaW4gZEJtICovCiAJaW50IHBvd2VyX2NvbnN0cl9sZXZlbDsgLyogaW4gZEJtICovCiAKKwllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wc19tb2RlOworCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc3RhcnRfd29yazsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCkBAIC04NzQsNiArOTI4LDggQEAKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAKK2V4dGVybiBib29sIGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6OworCiAvKiBTVEEgY29kZSAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC05MzcsNyArOTkzLDE1IEBACiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKIAorLyogb2ZmLWNoYW5uZWwgaGVscGVycyAqLwordm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX2JlYWNvbmluZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3Bfc3RhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgYm9vbCBlbmFibGVfYmVhY29uaW5nKTsKKwogLyogaW50ZXJmYWNlIGhhbmRsaW5nICovCitpbnQgaWVlZTgwMjExX2lmYWNlX2luaXQodm9pZCk7Cit2b2lkIGllZWU4MDIxMV9pZmFjZV9leGl0KHZvaWQpOwogaW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCiAJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CkBAIC05NDgsNiArMTAxMiwxMSBAQAogdTMyIF9faWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIAorc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXJldHVybiBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpOworfQorCiAvKiB0eCBoYW5kbGluZyAqLwogdm9pZCBpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV90eF9wZW5kaW5nKHVuc2lnbmVkIGxvbmcgZGF0YSk7CkBAIC05NzYsNiArMTA0NSw5IEBACiB2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCiAJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSk7CitpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMsIGNvbnN0IHU4ICpkYSwKKwkJCSAgICAgICBjb25zdCB1OCAqYnNzaWQpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsCiAJCQkJdTE2IHRpZCwgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7CkBAIC0xMDg2LDYgKzExNTgsMjggQEAKIHUzMiBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCiAJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK2ludCBfX2llZWU4MDIxMV9yZXF1ZXN0X3NtcHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgIGVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGUpOwordm9pZCBpZWVlODAyMTFfcmVjYWxjX3NtcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpmb3JzZGF0YSk7CisKK3NpemVfdCBpZWVlODAyMTFfaWVfc3BsaXQoY29uc3QgdTggKmllcywgc2l6ZV90IGllbGVuLAorCQkJICBjb25zdCB1OCAqaWRzLCBpbnQgbl9pZHMsIHNpemVfdCBvZmZzZXQpOworc2l6ZV90IGllZWU4MDIxMV9pZV9zcGxpdF92ZW5kb3IoY29uc3QgdTggKmllcywgc2l6ZV90IGllbGVuLCBzaXplX3Qgb2Zmc2V0KTsKKworLyogaW50ZXJuYWwgd29yayBpdGVtcyAqLwordm9pZCBpZWVlODAyMTFfd29ya19pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX2FkZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spOwordm9pZCBmcmVlX3dvcmsoc3RydWN0IGllZWU4MDIxMV93b3JrICp3ayk7Cit2b2lkIGllZWU4MDIxMV93b3JrX3B1cmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3dvcmtfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgaWVlZTgwMjExX3drX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHU2NCAqY29va2llKTsKK2ludCBpZWVlODAyMTFfd2tfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1NjQgY29va2llKTsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9OT0lOTElORQogI2RlZmluZSBkZWJ1Z19ub2lubGluZSBub2lubGluZQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA4MGMxNmY2Li4wMGExZjRjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtNjAsNiArNjAsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldCA9IGV0aF9tYWNfYWRkcihkZXYsIGFkZHIpOworCisJaWYgKHJldCA9PSAwKQorCQltZW1jcHkoc2RhdGEtPnZpZi5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIGludCBpZGVudGljYWxfbWFjX2FkZHJfYWxsb3dlZChpbnQgdHlwZTEsIGludCB0eXBlMikKIHsKIAlyZXR1cm4gdHlwZTEgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiB8fApAQCAtODAsNyArOTYsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKm5zZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwogCXUzMiBjaGFuZ2VkID0gMDsKIAlpbnQgcmVzOwogCXUzMiBod19yZWNvbmZfZmxhZ3MgPSAwOwpAQCAtOTUsNyArMTEwLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5zZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbnNkYXRhLT5kZXY7CiAKLQkJaWYgKG5kZXYgIT0gZGV2ICYmIG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJaWYgKG5kZXYgIT0gZGV2ICYmIGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKG5zZGF0YSkpIHsKIAkJCS8qCiAJCQkgKiBBbGxvdyBvbmx5IGEgc2luZ2xlIElCU1MgaW50ZXJmYWNlIHRvIGJlIHVwIGF0IGFueQogCQkJICogdGltZS4gVGhpcyBpcyByZXN0cmljdGVkIGJlY2F1c2UgYmVhY29uIGRpc3RyaWJ1dGlvbgpAQCAtMTgxLDcgKzE5Niw3IEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbnNkYXRhLT5kZXY7CiAKIAkJLyoKLQkJICogTm8gbmVlZCB0byBjaGVjayBuZXRpZl9ydW5uaW5nIHNpbmNlIHdlIGRvIG5vdCBhbGxvdworCQkgKiBObyBuZWVkIHRvIGNoZWNrIHJ1bm5pbmcgc2luY2Ugd2UgZG8gbm90IGFsbG93CiAJCSAqIGl0IHRvIHN0YXJ0IHVwIHdpdGggdGhpcyBpbnZhbGlkIGFkZHJlc3MuCiAJCSAqLwogCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG51bGxfYWRkciwgbmRldi0+ZGV2X2FkZHIpID09IDApIHsKQEAgLTIzMiwxMCArMjQ3LDcgQEAKIAkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwotCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7Ci0JCWNvbmYubWFjX2FkZHIgPSBkZXYtPmRldl9hZGRyOwotCQlyZXMgPSBkcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgJmNvbmYpOworCQlyZXMgPSBkcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgJnNkYXRhLT52aWYpOwogCQlpZiAocmVzKQogCQkJZ290byBlcnJfc3RvcDsKIApAQCAtMzE4LDcgKzMzMCw3IEBACiAKIAlyZXR1cm4gMDsKICBlcnJfZGVsX2ludGVyZmFjZToKLQlkcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgJmNvbmYpOworCWRydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCAmc2RhdGEtPnZpZik7CiAgZXJyX3N0b3A6CiAJaWYgKCFsb2NhbC0+b3Blbl9jb3VudCkKIAkJZHJ2X3N0b3AobG9jYWwpOwpAQCAtMzMzLDcgKzM0NSw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOwpAQCAtMzQ2LDYgKzM1NywxMSBAQAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCS8qCisJICogUHVyZ2Ugd29yayBmb3IgdGhpcyBpbnRlcmZhY2UuCisJICovCisJaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc2RhdGEpOworCisJLyoKIAkgKiBOb3cgZGVsZXRlIGFsbCBhY3RpdmUgYWdncmVnYXRpb24gc2Vzc2lvbnMuCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtNTEyLDEyICs1MjgsOSBAQAogCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAkJfQogCi0JCWNvbmYudmlmID0gJnNkYXRhLT52aWY7Ci0JCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJY29uZi5tYWNfYWRkciA9IGRldi0+ZGV2X2FkZHI7CiAJCS8qIGRpc2FibGUgYWxsIGtleXMgZm9yIGFzIGxvbmcgYXMgdGhpcyBuZXRkZXYgaXMgZG93biAqLwogCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKLQkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAl9CiAKIAlzZGF0YS0+YnNzID0gTlVMTDsKQEAgLTY1MSw3ICs2NjQsNyBAQAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1IAk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBpZWVlODAyMTFfY2hhbmdlX21hYywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7CkBAIC03NDAsNyArNzUzLDcgQEAKIAkgKiBhbmQgZ29lcyBpbnRvIHRoZSByZXF1ZXN0ZWQgbW9kZS4KIAkgKi8KIAotCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBQdXJnZSBhbmQgcmVzZXQgdHlwZS1kZXBlbmRlbnQgc3RhdGUuICovCkBAIC03OTQsNiArODA3LDggQEAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwogCW5kZXYtPmllZWU4MDIxMV9wdHIgPSAmc2RhdGEtPndkZXY7CisJbWVtY3B5KHNkYXRhLT52aWYuYWRkciwgbmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoc2RhdGEtPm5hbWUsIG5kZXYtPm5hbWUsIElGTkFNU0laKTsKIAogCS8qIGluaXRpYWxpc2UgdHlwZS1pbmRlcGVuZGVudCBkYXRhICovCiAJc2RhdGEtPndkZXYud2lwaHkgPSBsb2NhbC0+aHcud2lwaHk7CkBAIC04OTksNiArOTE0LDggQEAKIAkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKICNlbmRpZgogCisJZHJ2X2ZsdXNoKGxvY2FsLCBmYWxzZSk7CisKIAlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9JRExFOwogCXJldHVybiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTsKIH0KQEAgLTkwOCwxNiArOTI1LDE4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGNvdW50ID0gMDsKIAorCWlmICghbGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkpCisJCXJldHVybiBpZWVlODAyMTFfaWRsZV9vZmYobG9jYWwsICJ3b3JraW5nIik7CisKIAlpZiAobG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm4gaWVlZTgwMjExX2lkbGVfb2ZmKGxvY2FsLCAic2Nhbm5pbmciKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBjb3VudCBkaXNhYmxlZCBtYW5hZ2VkIGludGVyZmFjZXMgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCSAgICAhc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQgJiYKLQkJICAgIGxpc3RfZW1wdHkoJnNkYXRhLT51Lm1nZC53b3JrX2xpc3QpKQorCQkgICAgIXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBjb3VudCB1bnVzZWQgSUJTUyBpbnRlcmZhY2VzICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKQEAgLTk0NSwzICs5NjQsNDEgQEAKIAlpZiAoY2hnKQogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBjaGcpOwogfQorCitzdGF0aWMgaW50IG5ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCSB1bnNpZ25lZCBsb25nIHN0YXRlLAorCQkJIHZvaWQgKm5kZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5kZXY7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlpZiAoc3RhdGUgIT0gTkVUREVWX0NIQU5HRU5BTUUpCisJCXJldHVybiAwOworCisJaWYgKCFkZXYtPmllZWU4MDIxMV9wdHIgfHwgIWRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHkpCisJCXJldHVybiAwOworCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHktPnByaXZpZCAhPSBtYWM4MDIxMV93aXBoeV9wcml2aWQpCisJCXJldHVybiAwOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJbWVtY3B5KHNkYXRhLT5uYW1lLCBzZGF0YS0+bmFtZSwgSUZOQU1TSVopOworCisJaWVlZTgwMjExX2RlYnVnZnNfcmVuYW1lX25ldGRldihzZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWFjODAyMTFfbmV0ZGV2X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gbmV0ZGV2X25vdGlmeSwKK307CisKK2ludCBpZWVlODAyMTFfaWZhY2VfaW5pdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1hYzgwMjExX25ldGRldl9ub3RpZmllcik7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2lmYWNlX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbWFjODAyMTFfbmV0ZGV2X25vdGlmaWVyKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCA2NTlhNDJkLi44MTYwZDljIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2tleS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCiAJCQkJICAgICB1LmFwKTsKIAotCXJldCA9IGRydl9zZXRfa2V5KGtleS0+bG9jYWwsIFNFVF9LRVksICZzZGF0YS0+dmlmLCBzdGEsICZrZXktPmNvbmYpOworCXJldCA9IGRydl9zZXRfa2V5KGtleS0+bG9jYWwsIFNFVF9LRVksIHNkYXRhLCBzdGEsICZrZXktPmNvbmYpOwogCiAJaWYgKCFyZXQpIHsKIAkJc3Bpbl9sb2NrX2JoKCZ0b2RvX2xvY2spOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAogCQkJCSAgICAgdS5hcCk7CiAKLQlyZXQgPSBkcnZfc2V0X2tleShrZXktPmxvY2FsLCBESVNBQkxFX0tFWSwgJnNkYXRhLT52aWYsCisJcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgRElTQUJMRV9LRVksIHNkYXRhLAogCQkJICBzdGEsICZrZXktPmNvbmYpOwogCiAJaWYgKHJldCkKQEAgLTQyMSw3ICs0MjEsNyBAQAogCQkJICovCiAKIAkJCS8qIHNhbWUgaGVyZSwgdGhlIEFQIGNvdWxkIGJlIHVzaW5nIFFvUyAqLwotCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5tZ2QuYnNzaWQpOworCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5zZGF0YSwga2V5LT5zZGF0YS0+dS5tZ2QuYnNzaWQpOwogCQkJaWYgKGFwKSB7CiAJCQkJaWYgKHRlc3Rfc3RhX2ZsYWdzKGFwLCBXTEFOX1NUQV9XTUUpKQogCQkJCQlrZXktPmNvbmYuZmxhZ3MgfD0KQEAgLTQ0Myw3ICs0NDMsNyBAQAogCWFkZF90b2RvKG9sZF9rZXksIEtFWV9GTEFHX1RPRE9fREVMRVRFKTsKIAogCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUyk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJYWRkX3RvZG8oa2V5LCBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKQEAgLTUwOSw3ICs1MDksNyBAQAogewogCUFTU0VSVF9SVE5MKCk7CiAKLQlpZiAoV0FSTl9PTighbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkpCisJaWYgKFdBUk5fT04oIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkpCiAJCXJldHVybjsKIAogCWllZWU4MDIxMV90b2RvX2Zvcl9lYWNoX2tleShzZGF0YSwgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmggYi9uZXQvbWFjODAyMTEva2V5LmgKaW5kZXggYTQ5ZjkzYi4uYmRjMjk2OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtNTksMTEgKzU5LDE3IEBACiAJS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZCT0gQklUKDYpLAogfTsKIAorZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfdGtpcF9zdGF0ZSB7CisJVEtJUF9TVEFURV9OT1RfSU5JVCwKKwlUS0lQX1NUQVRFX1BIQVNFMV9ET05FLAorCVRLSVBfU1RBVEVfUEhBU0UxX0hXX1VQTE9BREVELAorfTsKKwogc3RydWN0IHRraXBfY3R4IHsKIAl1MzIgaXYzMjsKIAl1MTYgaXYxNjsKIAl1MTYgcDFrWzVdOwotCWludCBpbml0aWFsaXplZDsKKwllbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHN0YXRlOwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9rZXkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggMGQyZDk0OC4uZDBhMTRkOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC0zMiw3ICszMiwxMiBAQAogI2luY2x1ZGUgImxlZC5oIgogI2luY2x1ZGUgImNmZy5oIgogI2luY2x1ZGUgImRlYnVnZnMuaCIKLSNpbmNsdWRlICJkZWJ1Z2ZzX25ldGRldi5oIgorCisKK2Jvb2wgaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHo7Cittb2R1bGVfcGFyYW0oaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHosIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiwKKwkJICJEaXNhYmxlIDQwTUh6IHN1cHBvcnQgaW4gdGhlIDIuNEdIeiBiYW5kIik7CiAKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CkBAIC0xMDIsNiArMTA3LDkgQEAKIAlpZiAoc2Nhbl9jaGFuKSB7CiAJCWNoYW4gPSBzY2FuX2NoYW47CiAJCWNoYW5uZWxfdHlwZSA9IE5MODAyMTFfQ0hBTl9OT19IVDsKKwl9IGVsc2UgaWYgKGxvY2FsLT50bXBfY2hhbm5lbCkgeworCQljaGFuID0gc2Nhbl9jaGFuID0gbG9jYWwtPnRtcF9jaGFubmVsOworCQljaGFubmVsX3R5cGUgPSBsb2NhbC0+dG1wX2NoYW5uZWxfdHlwZTsKIAl9IGVsc2UgewogCQljaGFuID0gbG9jYWwtPm9wZXJfY2hhbm5lbDsKIAkJY2hhbm5lbF90eXBlID0gbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlOwpAQCAtMTE0LDYgKzEyMiwxOCBAQAogCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOwogCX0KIAorCWlmICghY29uZl9pc19odCgmbG9jYWwtPmh3LmNvbmYpKSB7CisJCS8qCisJCSAqIG1hYzgwMjExLmggZG9jdW1lbnRzIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkCisJCSAqIHdoZW4gdGhlIGNoYW5uZWwgaXMgc2V0IHRvIGFuIEhUIHR5cGUsIGFuZAorCQkgKiB0aGF0IG90aGVyd2lzZSBTVEFUSUMgaXMgdXNlZC4KKwkJICovCisJCWxvY2FsLT5ody5jb25mLnNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX1NUQVRJQzsKKwl9IGVsc2UgaWYgKGxvY2FsLT5ody5jb25mLnNtcHNfbW9kZSAhPSBsb2NhbC0+c21wc19tb2RlKSB7CisJCWxvY2FsLT5ody5jb25mLnNtcHNfbW9kZSA9IGxvY2FsLT5zbXBzX21vZGU7CisJCWNoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFM7CisJfQorCiAJaWYgKHNjYW5fY2hhbikKIAkJcG93ZXIgPSBjaGFuLT5tYXhfcG93ZXI7CiAJZWxzZQpAQCAtMTczLDcgKzE5Myw3IEBACiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXNkYXRhLT52aWYuYnNzX2NvbmYuYnNzaWQgPSBzZGF0YS0+dS5pYnNzLmJzc2lkOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJc2RhdGEtPnZpZi5ic3NfY29uZi5ic3NpZCA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOworCQlzZGF0YS0+dmlmLmJzc19jb25mLmJzc2lkID0gc2RhdGEtPnZpZi5hZGRyOwogCWVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKIAkJc2RhdGEtPnZpZi5ic3NfY29uZi5ic3NpZCA9IHplcm87CiAJfSBlbHNlIHsKQEAgLTE5NSw3ICsyMTUsNyBAQAogCX0KIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpIHsKLQkJaWYgKGxvY2FsLT5xdWllc2NpbmcgfHwgIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikgfHwKKwkJaWYgKGxvY2FsLT5xdWllc2NpbmcgfHwgIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fAogCQkgICAgdGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpIHsKIAkJCXNkYXRhLT52aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlOwogCQl9IGVsc2UgewpAQCAtMjIzLDggKzI0Myw3IEBACiAJCX0KIAl9CiAKLQlkcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgJnNkYXRhLT52aWYsCi0JCQkgICAgICZzZGF0YS0+dmlmLmJzc19jb25mLCBjaGFuZ2VkKTsKKwlkcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgc2RhdGEsICZzZGF0YS0+dmlmLmJzc19jb25mLCBjaGFuZ2VkKTsKIH0KIAogdTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTI5OSw2ICszMTgsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3Jlc3RhcnRfaHcpOwogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVjYWxjX3NtcHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgcmVjYWxjX3NtcHMpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWllZWU4MDIxMV9yZWNhbGNfc21wcyhsb2NhbCwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Cit9CisKIHN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19odyhzaXplX3QgcHJpdl9kYXRhX2xlbiwKIAkJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcykKIHsKQEAgLTMzMyw5ICszNjIsNyBAQAogCQkJV0lQSFlfRkxBR180QUREUl9TVEFUSU9OOwogCXdpcGh5LT5wcml2aWQgPSBtYWM4MDIxMV93aXBoeV9wcml2aWQ7CiAKLQkvKiBZZXMsIHB1dHRpbmcgY2ZnODAyMTFfYnNzIGludG8gaWVlZTgwMjExX2JzcyBpcyBhIGhhY2sgKi8KLQl3aXBoeS0+YnNzX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JzcykgLQotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfYnNzKTsKKwl3aXBoeS0+YnNzX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzcyk7CiAKIAlsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCkBAIC0zNjksOSArMzk2LDEzIEBACiAKIAlJTklUX0RFTEFZRURfV09SSygmbG9jYWwtPnNjYW5fd29yaywgaWVlZTgwMjExX3NjYW5fd29yayk7CiAKKwlpZWVlODAyMTFfd29ya19pbml0KGxvY2FsKTsKKwogCUlOSVRfV09SSygmbG9jYWwtPnJlc3RhcnRfd29yaywgaWVlZTgwMjExX3Jlc3RhcnRfd29yayk7CiAKIAlJTklUX1dPUksoJmxvY2FsLT5yZWNvbmZpZ19maWx0ZXIsIGllZWU4MDIxMV9yZWNvbmZpZ19maWx0ZXIpOworCUlOSVRfV09SSygmbG9jYWwtPnJlY2FsY19zbXBzLCBpZWVlODAyMTFfcmVjYWxjX3NtcHNfd29yayk7CisJbG9jYWwtPnNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX09GRjsKIAogCUlOSVRfV09SSygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmssCiAJCSAgaWVlZTgwMjExX2R5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwpAQCAtNjc0LDExICs3MDUsMTkgQEAKIAogCXJldCA9IHJjODAyMTFfcGlkX2luaXQoKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycl9waWQ7CiAKLQlpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCgpOworCXJldCA9IGllZWU4MDIxMV9pZmFjZV9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbmV0ZGV2OwogCiAJcmV0dXJuIDA7CisgZXJyX25ldGRldjoKKwlyYzgwMjExX3BpZF9leGl0KCk7CisgZXJyX3BpZDoKKwlyYzgwMjExX21pbnN0cmVsX2V4aXQoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZWVlODAyMTFfZXhpdCh2b2lkKQpAQCAtNjk1LDcgKzczNCw3IEBACiAJaWYgKG1lc2hfYWxsb2NhdGVkKQogCQlpZWVlODAyMTFzX3N0b3AoKTsKIAotCWllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9leGl0KCk7CisJaWVlZTgwMjExX2lmYWNlX2V4aXQoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCA2YTQzMzE0Li42MTA4MGM1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ1bm5pbmcgbWVzaCBob3VzZWtlZXBpbmdcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUpOworCSAgICAgICBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAogCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfTUVTSF9QRUVSX0lOQUNUSVZJVFlfTElNSVQpOwpAQCAtNTY1LDcgKzU2NSw3IEBACiAKIAkvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLwogCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCAmJgotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyKSkKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+dmlmLmFkZHIpKQogCQlyZXR1cm47CiAKIAliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCA9ICZzZGF0YS0+dS5tZXNoOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybjsKIAogCWlmIChsb2NhbC0+c2Nhbm5pbmcpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKaW5kZXggZDI4YWNiNi4uY2U4NDIzNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpAQCAtMTI4LDkgKzEyOCw5IEBACiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CiAKIAltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJLyogQlNTSUQgPT0gU0EgKi8KLQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IE1FU0hfUEFUSF9TRUxfQ0FURUdPUlk7CiAJbWdtdC0+dS5hY3Rpb24udS5tZXNoX2FjdGlvbi5hY3Rpb25fY29kZSA9IE1FU0hfUEFUSF9TRUxfQUNUSU9OOwogCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIAogCW1lbWNweShtZ210LT5kYSwgcmEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkvKiBCU1NJRCBpcyBsZWZ0IHplcm9lZCwgd2lsZGNhcmQgdmFsdWUgKi8KIAltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IE1FU0hfUEFUSF9TRUxfQ0FURUdPUlk7CiAJbWdtdC0+dS5hY3Rpb24udS5tZXNoX2FjdGlvbi5hY3Rpb25fY29kZSA9IE1FU0hfUEFUSF9TRUxfQUNUSU9OOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJYm9vbCBwcm9jZXNzID0gdHJ1ZTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG1nbXQtPnNhKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIDA7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJbmV3X21ldHJpYyA9IE1BWF9NRVRSSUM7CiAJZXhwX3RpbWUgPSBUVV9UT19FWFBfVElNRShvcmlnX2xpZmV0aW1lKTsKIAotCWlmIChtZW1jbXAob3JpZ19hZGRyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwlpZiAobWVtY21wKG9yaWdfYWRkciwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikgPT0gMCkgewogCQkvKiBUaGlzIE1QIGlzIHRoZSBvcmlnaW5hdG9yLCB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcwogCQkgKiBmcmFtZSwgZXhjZXB0IGZvciB1cGRhdGluZyB0cmFuc21pdHRlcidzIHBhdGggaW5mby4KIAkJICovCkBAIC00ODYsNyArNDg2LDcgQEAKIAogCW1od21wX2RiZygicmVjZWl2ZWQgUFJFUSBmcm9tICVwTVxuIiwgb3JpZ19hZGRyKTsKIAotCWlmIChtZW1jbXAodGFyZ2V0X2FkZHIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCWlmIChtZW1jbXAodGFyZ2V0X2FkZHIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pID09IDApIHsKIAkJbWh3bXBfZGJnKCJQUkVRIGlzIGZvciB1c1xuIik7CiAJCWZvcndhcmQgPSBmYWxzZTsKIAkJcmVwbHkgPSB0cnVlOwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJICogcmVwbGllcwogCSAqLwogCXRhcmdldF9hZGRyID0gUFJFUF9JRV9UQVJHRVRfQUREUihwcmVwX2VsZW0pOwotCWlmIChtZW1jbXAodGFyZ2V0X2FkZHIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwlpZiAobWVtY21wKHRhcmdldF9hZGRyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSA9PSAwKQogCQkvKiBkZXN0aW5hdGlvbiwgbm8gZm9yd2FyZGluZyByZXF1aXJlZCAqLwogCQlyZXR1cm47CiAKQEAgLTg5MCw3ICs4OTAsNyBAQAogCQl0YXJnZXRfZmxhZ3MgPSBNUF9GX1JGOwogCiAJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKLQltZXNoX3BhdGhfc2VsX2ZyYW1lX3R4KE1QQVRIX1BSRVEsIDAsIHNkYXRhLT5kZXYtPmRldl9hZGRyLAorCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUFJFUSwgMCwgc2RhdGEtPnZpZi5hZGRyLAogCQkJY3B1X3RvX2xlMzIoaWZtc2gtPnNuKSwgdGFyZ2V0X2ZsYWdzLCBtcGF0aC0+ZHN0LAogCQkJY3B1X3RvX2xlMzIobXBhdGgtPnNuKSwgYnJvYWRjYXN0X2FkZHIsIDAsCiAJCQl0dGwsIGNwdV90b19sZTMyKGxpZmV0aW1lKSwgMCwKQEAgLTkzOSw3ICs5MzksNyBAQAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAogCQkJICAgICAgIG1wYXRoLT5leHBfdGltZSAtCiAJCQkgICAgICAgbXNlY3NfdG9famlmZmllcyhzZGF0YS0+dS5tZXNoLm1zaGNmZy5wYXRoX3JlZnJlc2hfdGltZSkpICYmCi0JCSAgICAhbWVtY21wKHNkYXRhLT5kZXYtPmRldl9hZGRyLCBoZHItPmFkZHI0LCBFVEhfQUxFTikgJiYKKwkJICAgICFtZW1jbXAoc2RhdGEtPnZpZi5hZGRyLCBoZHItPmFkZHI0LCBFVEhfQUxFTikgJiYKIAkJICAgICEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykgJiYKIAkJICAgICEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0ZJWEVEKSkgewogCQkJbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAKLQltZXNoX3BhdGhfc2VsX2ZyYW1lX3R4KE1QQVRIX1JBTk4sIDAsIHNkYXRhLT5kZXYtPmRldl9hZGRyLAorCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUkFOTiwgMCwgc2RhdGEtPnZpZi5hZGRyLAogCQkJICAgICAgIGNwdV90b19sZTMyKCsraWZtc2gtPnNuKSwKIAkJCSAgICAgICAwLCBOVUxMLCAwLCBicm9hZGNhc3RfYWRkciwKIAkJCSAgICAgICAwLCBNRVNIX1RUTCwgMCwgMCwgMCwgc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDAxOTJjZmQuLjIzMTJlZmUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCWludCBlcnIgPSAwOwogCXUzMiBoYXNoX2lkeDsKIAotCWlmIChtZW1jbXAoZHN0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJaWYgKG1lbWNtcChkc3QsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIG5ldmVyIGFkZCBvdXJzZWx2ZXMgYXMgbmVpZ2hib3VycyAqLwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCkBAIC0zNzcsNyArMzc3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAl1MzIgaGFzaF9pZHg7CiAKLQlpZiAobWVtY21wKGRzdCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCWlmIChtZW1jbXAoZHN0LCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSA9PSAwKQogCQkvKiBuZXZlciBhZGQgb3Vyc2VsdmVzIGFzIG5laWdoYm91cnMgKi8KIAkJcmV0dXJuIC1FTk9UU1VQUDsKIApAQCAtNjA1LDcgKzYwNSw3IEBACiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CiAJdTMyIHNuID0gMDsKIAotCWlmIChtZW1jbXAoaGRyLT5hZGRyNCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSAhPSAwKSB7CisJaWYgKG1lbWNtcChoZHItPmFkZHI0LCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSAhPSAwKSB7CiAJCXU4ICpyYSwgKmRhOwogCiAJCWRhID0gaGRyLT5hZGRyMzsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCmluZGV4IDBmN2M2ZTYuLjc5ODVlNTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIAltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJLyogQlNTSUQgaXMgbGVmdCB6ZXJvZWQsIHdpbGRjYXJkIHZhbHVlICovCiAJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBNRVNIX1BMSU5LX0NBVEVHT1JZOwogCW1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmFjdGlvbl9jb2RlID0gYWN0aW9uOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGh3X2FkZHIpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgaHdfYWRkcik7CiAJaWYgKCFzdGEpIHsKIAkJc3RhID0gbWVzaF9wbGlua19hbGxvYyhzZGF0YSwgaHdfYWRkciwgcmF0ZXMpOwogCQlpZiAoIXN0YSkgewpAQCAtNDU1LDcgKzQ1NSw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG1nbXQtPnNhKTsKIAlpZiAoIXN0YSAmJiBmdHlwZSAhPSBQTElOS19PUEVOKSB7CiAJCW1wbF9kYmcoIk1lc2ggcGxpbms6IGNscyBvciBjbmYgZnJvbSB1bmtub3duIHBlZXJcbiIpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGM3OWU1OWYuLjcyOTIwZWUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtNzUsMTEgKzc1LDggQEAKIAkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX3NlbmRfZGlzYXNzb2MoKSAqLwogCVJYX01HTVRfQ0ZHODAyMTFfRElTQVNTT0MsCiAKLQkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX2F1dGhfdGltZW91dCgpICYgZnJlZSB3b3JrICovCi0JUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPLAotCi0JLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9hc3NvY190aW1lb3V0KCkgJiBmcmVlIHdvcmsgKi8KLQlSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPLAorCS8qIGNhbGxlciBtdXN0IHRlbGwgY2ZnODAyMTEgYWJvdXQgaW50ZXJuYWwgZXJyb3IgKi8KKwlSWF9NR01UX0NGRzgwMjExX0FTU09DX0VSUk9SLAogfTsKIAogLyogdXRpbHMgKi8KQEAgLTEyMiwyNyArMTE5LDYgQEAKIAlyZXR1cm4gKDEgPDwgZWN3KSAtIDE7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCQkgICAgICB1MzIgKnJhdGVzKQotewotCWludCBpLCBqLCBjb3VudDsKLQkqcmF0ZXMgPSAwOwotCWNvdW50ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCWludCByYXRlID0gKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N0YpICogNTsKLQotCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKLQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSByYXRlKSB7Ci0JCQkJKnJhdGVzIHw9IEJJVChqKTsKLQkJCQljb3VudCsrOwotCQkJCWJyZWFrOwotCQkJfQotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQogLyoKICAqIGllZWU4MDIxMV9lbmFibGVfaHQgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHRoZSBvcGVyYXRpbmcgYmFuZAogICogaGFzIGJlZW4gZGV0ZXJtaW5lZCBhcyBodCBjb25maWd1cmF0aW9uIGRlcGVuZHMgb24gdGhlIGh3J3MKQEAgLTIwMiw3ICsxNzgsNyBAQAogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGJzc2lkKTsKIAkJaWYgKHN0YSkKIAkJCXJhdGVfY29udHJvbF9yYXRlX3VwZGF0ZShsb2NhbCwgc2JhbmQsIHN0YSwKIAkJCQkJCSBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCk7CkBAIC0yMjgsMjA5ICsyMDQsNiBAQAogCiAvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTggKnBvczsKLQljb25zdCB1OCAqaWVzLCAqaHRfaWU7Ci0JaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47Ci0JdTE2IGNhcGFiOwotCWludCB3bW0gPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXUzMiByYXRlcyA9IDA7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIHdrLT5pZV9sZW4gKwotCQkJICAgIHdrLT5zc2lkX2xlbik7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhc3NvYyAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCWNhcGFiID0gaWZtZ2QtPmNhcGFiOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRSkpCi0JCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FOwotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUpKQotCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwotCX0KLQotCWlmICh3ay0+YnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JaWYgKHdrLT5ic3MtPndtbV91c2VkKQotCQl3bW0gPSAxOwotCi0JLyogZ2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgdGhlIEFQIGFzCi0JICogc29tZSBBUHMgZG9uJ3QgbGlrZSBnZXR0aW5nIGEgc3VwZXJzZXQgb2YgdGhlaXIgcmF0ZXMKLQkgKiBpbiB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCAoZS5nLiBELUxpbmsgREFQIDEzNTMgaW4KLQkgKiBiLW9ubHkgbW9kZSkgKi8KLQlyYXRlc19sZW4gPSBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyh3ay0+YnNzLCBzYmFuZCwgJnJhdGVzKTsKLQotCWlmICgod2stPmJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpICYmCi0JICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCi0JCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKLQotCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdrLT5wcmV2X2Jzc2lkKSkgewotCQlza2JfcHV0KHNrYiwgMTApOwotCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwotCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0JCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KLQkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCB3ay0+cHJldl9ic3NpZCwKLQkJICAgICAgIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQlza2JfcHV0KHNrYiwgNCk7Ci0JCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOwotCQltZ210LT51LmFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCQltZ210LT51LmFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQotCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7Ci0JfQotCi0JLyogU1NJRCAqLwotCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgd2stPnNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IHdrLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCB3ay0+c3NpZCwgd2stPnNzaWRfbGVuKTsKLQotCS8qIGFkZCBhbGwgcmF0ZXMgd2hpY2ggd2VyZSBtYXJrZWQgdG8gYmUgdXNlZCBhYm92ZSAqLwotCXN1cHBfcmF0ZXNfbGVuID0gcmF0ZXNfbGVuOwotCWlmIChzdXBwX3JhdGVzX2xlbiA+IDgpCi0JCXN1cHBfcmF0ZXNfbGVuID0gODsKLQotCWxlbiA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXBvcyA9IHNrYl9wdXQoc2tiLCBzdXBwX3JhdGVzX2xlbiArIDIpOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcysrID0gc3VwcF9yYXRlc19sZW47Ci0KLQljb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaWYgKEJJVChpKSAmIHJhdGVzKSB7Ci0JCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOwotCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOwotCQkJaWYgKCsrY291bnQgPT0gOCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChyYXRlc19sZW4gPiBjb3VudCkgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgcmF0ZXNfbGVuIC0gY291bnQgKyAyKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCSpwb3MrKyA9IHJhdGVzX2xlbiAtIGNvdW50OwotCi0JCWZvciAoaSsrOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQkJaWYgKEJJVChpKSAmIHJhdGVzKSB7Ci0JCQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoY2FwYWIgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgewotCQkvKiAxLiBwb3dlciBjYXBhYmlsaXRpZXMgKi8KLQkJcG9zID0gc2tiX3B1dChza2IsIDQpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWTsKLQkJKnBvcysrID0gMjsKLQkJKnBvcysrID0gMDsgLyogbWluIHR4IHBvd2VyICovCi0JCSpwb3MrKyA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPm1heF9wb3dlcjsgLyogbWF4IHR4IHBvd2VyICovCi0KLQkJLyogMi4gc3VwcG9ydGVkIGNoYW5uZWxzICovCi0JCS8qIFRPRE86IGdldCB0aGlzIGluIHJlZyBkb21haW4gZm9ybWF0ICovCi0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICogc2JhbmQtPm5fY2hhbm5lbHMgKyAyKTsKLQkJKnBvcysrID0gV0xBTl9FSURfU1VQUE9SVEVEX0NIQU5ORUxTOwotCQkqcG9zKysgPSAyICogc2JhbmQtPm5fY2hhbm5lbHM7Ci0JCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7Ci0JCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCi0JCQkJCXNiYW5kLT5jaGFubmVsc1tpXS5jZW50ZXJfZnJlcSk7Ci0JCQkqcG9zKysgPSAxOyAvKiBvbmUgY2hhbm5lbCBpbiB0aGUgc3ViYmFuZCovCi0JCX0KLQl9Ci0KLQlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIHdrLT5pZV9sZW4pOwotCQltZW1jcHkocG9zLCB3ay0+aWUsIHdrLT5pZV9sZW4pOwotCX0KLQotCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKLQkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwotCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KLQkJKnBvcysrID0gMHgwMDsgLyogTWljcm9zb2Z0IE9VSSAwMDo1MDpGMiAqLwotCQkqcG9zKysgPSAweDUwOwotCQkqcG9zKysgPSAweGYyOwotCQkqcG9zKysgPSAyOyAvKiBXTUUgKi8KLQkJKnBvcysrID0gMDsgLyogV01FIGluZm8gKi8KLQkJKnBvcysrID0gMTsgLyogV01FIHZlciAqLwotCQkqcG9zKysgPSAwOwotCX0KLQotCS8qIHdtbSBzdXBwb3J0IGlzIGEgbXVzdCB0byBIVCAqLwotCS8qCi0JICogSUVFRTgwMi4xMW4gZG9lcyBub3QgYWxsb3cgVEtJUC9XRVAgYXMgcGFpcndpc2UKLQkgKiBjaXBoZXJzIGluIEhUIG1vZGUuIFdlIHN0aWxsIGFzc29jaWF0ZSBpbiBub24taHQKLQkgKiBtb2RlICgxMWEvYi9nKSBpZiBhbnkgb25lIG9mIHRoZXNlIGNpcGhlcnMgaXMKLQkgKiBjb25maWd1cmVkIGFzIHBhaXJ3aXNlLgotCSAqLwotCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpICYmCi0JICAgIHNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCi0JICAgIChodF9pZSA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKCZ3ay0+YnNzLT5jYnNzLCBXTEFOX0VJRF9IVF9JTkZPUk1BVElPTikpICYmCi0JICAgIGh0X2llWzFdID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pICYmCi0JICAgICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRElTQUJMRV8xMU4pKSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8gPQotCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pZSArIDIpOwotCQl1MTYgY2FwID0gc2JhbmQtPmh0X2NhcC5jYXA7Ci0JCV9fbGUxNiB0bXA7Ci0JCXUzMiBmbGFncyA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmZsYWdzOwotCi0JCXN3aXRjaCAoaHRfaW5mby0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQpIHsKLQkJY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRToKLQkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKSB7Ci0JCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1c6Ci0JCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpIHsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCXRtcCA9IGNwdV90b19sZTE2KGNhcCk7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKzIpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOwotCQkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOwotCQltZW1zZXQocG9zLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKLQkJbWVtY3B5KHBvcywgJnRtcCwgc2l6ZW9mKHUxNikpOwotCQlwb3MgKz0gc2l6ZW9mKHUxNik7Ci0JCS8qIFRPRE86IG5lZWRzIGEgZGVmaW5lIGhlcmUgZm9yIDw8IDIgKi8KLQkJKnBvcysrID0gc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgfAotCQkJIChzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPDwgMik7Ci0JCW1lbWNweShwb3MsICZzYmFuZC0+aHRfY2FwLm1jcywgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7Ci0JfQotCi0JSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7Ci19Ci0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgICBjb25zdCB1OCAqYnNzaWQsIHUxNiBzdHlwZSwgdTE2IHJlYXNvbiwKIAkJCQkJICAgdm9pZCAqY29va2llKQpAQCAtNDQzLDcgKzIxNiw3IEBACiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKLQkJICAgICAgICJkZWF1dGgvZGlzYXNzb2MgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgImRlYXV0aC9kaXNhc3NvYyBmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKQEAgLTQ1MSw3ICsyMjQsNyBAQAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKIAltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IHN0eXBlKTsKIAlza2JfcHV0KHNrYiwgMik7CkBAIC00ODQsNyArMjU3LDcgQEAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqcHNwb2xsKSk7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCSAgICAgICAicHNwb2xsIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgICJwc3BvbGwgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CkBAIC00OTksNyArMjcyLDcgQEAKIAlwc3BvbGwtPmFpZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1IHwgMSA8PCAxNCk7CiAKIAltZW1jcHkocHNwb2xsLT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CkBAIC01MTksNyArMjkyLDcgQEAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKLQkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CkBAIC01MzIsNyArMzA1LDcgQEAKIAkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwogCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gZmM7CiAJbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAogCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKQEAgLTU0Niw3ICszMTksNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2QuY2hzd2l0Y2hfd29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOwpAQCAtNTU3LDcgKzMzMCw3IEBACiAJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKTsKIAogCS8qIFhYWDogc2hvdWxkbid0IHJlYWxseSBtb2RpZnkgY2ZnODAyMTEtb3duZWQgZGF0YSEgKi8KLQlpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWw7CisJaWZtZ2QtPmFzc29jaWF0ZWQtPmNoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbDsKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCiAJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOwpAQCAtNTg0LDYgKzM1Nyw4IEBACiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAqKWJzcywgc3RydWN0IGNmZzgwMjExX2JzcywgcHJpdik7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpuZXdfY2g7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOwpAQCAtNjE3LDcgKzM5Miw3IEBACiAJCW1vZF90aW1lcigmaWZtZ2QtPmNoc3dpdGNoX3RpbWVyLAogCQkJICBqaWZmaWVzICsKIAkJCSAgbXNlY3NfdG9famlmZmllcyhzd19lbGVtLT5jb3VudCAqCi0JCQkJCSAgIGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWwpKTsKKwkJCQkJICAgY2Jzcy0+YmVhY29uX2ludGVydmFsKSk7CiAJfQogfQogCkBAIC02OTEsOCArNDY2LDEzIEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoIWxpc3RfZW1wdHkoJmxvY2FsLT53b3JrX2xpc3QpKSB7CisJCWxvY2FsLT5wc19zZGF0YSA9IE5VTEw7CisJCWdvdG8gY2hhbmdlOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJCWNvbnRpbnVlOwpAQCAtNzAxLDcgKzQ4MSw3IEBACiAJfQogCiAJaWYgKGNvdW50ID09IDEgJiYgZm91bmQtPnUubWdkLnBvd2Vyc2F2ZSAmJgotCSAgICBmb3VuZC0+dS5tZ2QuYXNzb2NpYXRlZCAmJiBsaXN0X2VtcHR5KCZmb3VuZC0+dS5tZ2Qud29ya19saXN0KSAmJgorCSAgICBmb3VuZC0+dS5tZ2QuYXNzb2NpYXRlZCAmJgogCSAgICAhKGZvdW5kLT51Lm1nZC5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMIHwKIAkJCQkgICAgSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwpKSkgewogCQlzMzIgYmVhY29uaW50X3VzOwpAQCAtNzI5LDYgKzUwOSw3IEBACiAJCWxvY2FsLT5wc19zZGF0YSA9IE5VTEw7CiAJfQogCisgY2hhbmdlOgogCWllZWU4MDIxMV9jaGFuZ2VfcHMobG9jYWwpOwogfQogCkBAIC03ODgsNyArNTY5LDcgQEAKIAlpbnQgY291bnQ7CiAJdTggKnBvczsKIAotCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCWlmIChsb2NhbC0+aHcucXVldWVzIDwgNCkKIAkJcmV0dXJuOwogCiAJaWYgKCF3bW1fcGFyYW0pCkBAIC04OTEsMjUgKzY3MiwyNCBAQAogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKKwkJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MsCiAJCQkJICAgICB1MzIgYnNzX2luZm9fY2hhbmdlZCkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gKHZvaWQgKiljYnNzLT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSB3ay0+YnNzOwogCiAJYnNzX2luZm9fY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9BU1NPQzsKIAkvKiBzZXQgdGltaW5nIGluZm9ybWF0aW9uICovCi0Jc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKLQlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7CisJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gY2Jzcy0+YmVhY29uX2ludGVydmFsOworCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gY2Jzcy0+dHNmOwogCXNkYXRhLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2QgPSBic3MtPmR0aW1fcGVyaW9kOwogCiAJYnNzX2luZm9fY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UOwogCWJzc19pbmZvX2NoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzZGF0YSwKLQkJYnNzLT5jYnNzLmNhcGFiaWxpdHksIGJzcy0+aGFzX2VycF92YWx1ZSwgYnNzLT5lcnBfdmFsdWUpOworCQljYnNzLT5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKIAotCXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkID0gYnNzOwotCXNkYXRhLT51Lm1nZC5vbGRfYXNzb2NpYXRlX3dvcmsgPSB3azsKLQltZW1jcHkoc2RhdGEtPnUubWdkLmJzc2lkLCBic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwlzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCA9IGNic3M7CisJbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgY2Jzcy0+YnNzaWQsIEVUSF9BTEVOKTsKIAogCS8qIGp1c3QgdG8gYmUgc3VyZSAqLwogCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+KElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMIHwKQEAgLTk0MCw5OSArNzIwLDE0IEBACiAKIAltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOworCWllZWU4MDIxMV9yZWNhbGNfc21wcyhsb2NhbCwgc2RhdGEpOwogCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vbihzZGF0YS0+ZGV2KTsKIH0KIAotc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCi1pZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQl3ay0+dHJpZXMrKzsKLQlpZiAod2stPnRyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQotCQkvKgotCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKLQkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KLQkJICovCi0JCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAmd2stPmJzcy0+Y2Jzcyk7Ci0KLQkJLyoKLQkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKLQkJICogZHVlIHRvIHdvcmsgbmVlZGluZyB0byBiZSBkb25lLiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yawotCQkgKiBhZ2FpbiBmb3IgdGhhdC4KLQkJICovCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7Ci0JCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEhfVE87Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNICh0cnkgJWQpXG4iLAotCQkJc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwKLQkJCXdrLT50cmllcyk7Ci0KLQkvKgotCSAqIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCi0JICogd2lsbCBub3QgYW5zd2VyIHRvIGRpcmVjdCBwYWNrZXQgaW4gdW5hc3NvY2lhdGVkIHN0YXRlLgotCSAqLwotCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgd2stPnNzaWQsIHdrLT5zc2lkX2xlbiwgTlVMTCwgMCk7Ci0KLQl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUOwotCXJ1bl9hZ2FpbihpZm1nZCwgd2stPnRpbWVvdXQpOwotCi0JcmV0dXJuIFJYX01HTVRfTk9ORTsKLX0KLQotCi1zdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKLWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQotCXdrLT50cmllcysrOwotCWlmICh3ay0+dHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGlvbiB3aXRoIEFQICVwTSIKLQkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7Ci0KLQkJLyoKLQkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCi0JCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCi0JCSAqLwotCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwotCi0JCS8qCi0JCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKLQkJICogYWdhaW4gZm9yIHRoYXQuCi0JCSAqLwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNICh0cnkgJWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCB3ay0+dHJpZXMpOwotCi0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMSwgd2stPmF1dGhfYWxnLCB3ay0+aWUsIHdrLT5pZV9sZW4sCi0JCQkgICAgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgTlVMTCwgMCwgMCk7Ci0Jd2stPmF1dGhfdHJhbnNhY3Rpb24gPSAyOwotCi0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVDsKLQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKLQotCXJldHVybiBSWF9NR01UX05PTkU7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgYm9vbCBkZWF1dGgpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwpAQCAtMTA0NSwyMSArNzQwLDExIEBACiAJaWYgKFdBUk5fT04oIWlmbWdkLT5hc3NvY2lhdGVkKSkKIAkJcmV0dXJuOwogCi0JbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZm1nZC0+YXNzb2NpYXRlZCA9IE5VTEw7CiAJbWVtc2V0KGlmbWdkLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwogCi0JaWYgKGRlYXV0aCkgewotCQlrZnJlZShpZm1nZC0+b2xkX2Fzc29jaWF0ZV93b3JrKTsKLQkJaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yayA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2sgPSBpZm1nZC0+b2xkX2Fzc29jaWF0ZV93b3JrOwotCi0JCXdrLT5zdGF0ZSA9IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRTsKLQkJbGlzdF9hZGQoJndrLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7Ci0JfQotCiAJLyoKIAkgKiB3ZSBuZWVkIHRvIGNvbW1pdCB0aGUgYXNzb2NpYXRlZCA9IE5VTEwgY2hhbmdlIGJlY2F1c2UgdGhlCiAJICogc2NhbiBjb2RlIHVzZXMgdGhhdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlmYWNlIHNob3VsZApAQCAtMTA3OCw3ICs3NjMsNyBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLT5kZXYpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgYnNzaWQpOwogCWlmIChzdGEpCiAJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xMTE1LDcgKzgwMCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwpAQCAtMTEyOCw0NCArODEzLDYgQEAKIAlzdGFfaW5mb19kZXN0cm95KHN0YSk7CiB9CiAKLXN0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjawotaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCi0Jd2stPnRyaWVzKys7Ci0JaWYgKHdrLT50cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoIEFQICVwTSIKLQkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7Ci0KLQkJLyoKLQkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCi0JCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCi0JCSAqLwotCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwotCi0JCS8qCi0JCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKLQkJICogYWdhaW4gZm9yIHRoYXQuCi0JCSAqLwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoIEFQICVwTSAodHJ5ICVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgd2stPnRyaWVzKTsKLQlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSwgd2spOwotCi0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQ7Ci0JcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7Ci0KLQlyZXR1cm4gUlhfTUdNVF9OT05FOwotfQotCiB2b2lkIGllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewpAQCAtMTE4OSw4ICs4MzYsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNvbnN0IHU4ICpzc2lkOwogCi0Jc3NpZCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKCZpZm1nZC0+YXNzb2NpYXRlZC0+Y2JzcywgV0xBTl9FSURfU1NJRCk7Ci0JaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwKKwlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoaWZtZ2QtPmFzc29jaWF0ZWQsIFdMQU5fRUlEX1NTSUQpOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkLAogCQkJCSBzc2lkICsgMiwgc3NpZFsxXSwgTlVMTCwgMCk7CiAKIAlpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCsrOwpAQCAtMTIwNCwxMiArODUxLDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJYm9vbCBhbHJlYWR5ID0gZmFsc2U7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybjsKIAogCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm47CiAKKwlpZiAoc2RhdGEtPmxvY2FsLT50bXBfY2hhbm5lbCkKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CiAKIAlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQpAQCAtMTIxOCw3ICs4NjgsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJaWYgKGJlYWNvbiAmJiBuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGV0ZWN0ZWQgYmVhY29uIGxvc3MgZnJvbSBBUCAiCi0JCSAgICAgICAiLSBzZW5kaW5nIHByb2JlIHJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgIi0gc2VuZGluZyBwcm9iZSByZXF1ZXN0XG4iLCBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAogCS8qCkBAIC0xMjcxLDg4ICs5MjEsOCBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYmVhY29uX2xvc3MpOwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKLXsKLQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgIHNpemVfdCBsZW4pCi17Ci0JdTggKnBvczsKLQlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKLQotCXBvcyA9IG1nbXQtPnUuYXV0aC52YXJpYWJsZTsKLQlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKLQlpZiAoIWVsZW1zLmNoYWxsZW5nZSkKLQkJcmV0dXJuOwotCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDMsIHdrLT5hdXRoX2FsZywKLQkJCSAgICBlbGVtcy5jaGFsbGVuZ2UgLSAyLCBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwKLQkJCSAgICB3ay0+YnNzLT5jYnNzLmJzc2lkLAotCQkJICAgIHdrLT5rZXksIHdrLT5rZXlfbGVuLCB3ay0+a2V5X2lkeCk7Ci0Jd2stPmF1dGhfdHJhbnNhY3Rpb24gPSA0OwotfQotCi1zdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKLWllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKLXsKLQl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwotCi0JaWYgKHdrLT5zdGF0ZSAhPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEgpCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobGVuIDwgMjQgKyA2KQotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCi0JaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKLQlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKLQotCWlmIChhdXRoX2FsZyAhPSB3ay0+YXV0aF9hbGcgfHwKLQkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSB3ay0+YXV0aF90cmFuc2FjdGlvbikKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7Ci0JCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCWtmcmVlKHdrKTsKLQkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDsKLQl9Ci0KLQlzd2l0Y2ggKHdrLT5hdXRoX2FsZykgewotCWNhc2UgV0xBTl9BVVRIX09QRU46Ci0JY2FzZSBXTEFOX0FVVEhfTEVBUDoKLQljYXNlIFdMQU5fQVVUSF9GVDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCB3ayk7Ci0JCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7Ci0JY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKHdrLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpIHsKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgd2spOwotCQkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDsKLQkJfSBlbHNlCi0JCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIHdrLCBtZ210LCBsZW4pOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUlhfTUdNVF9OT05FOwotfQotCi0KIHN0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjawogaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKQEAgLTEzNjQsMjMgKzkzNCwxNSBAQAogCiAJQVNTRVJUX01HRF9NVFgoaWZtZ2QpOwogCi0JaWYgKHdrKQotCQlic3NpZCA9IHdrLT5ic3MtPmNic3MuYnNzaWQ7Ci0JZWxzZQotCQlic3NpZCA9IGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkOworCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlZCBmcm9tICVwTSAoUmVhc29uOiAldSlcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCwgcmVhc29uX2NvZGUpOworCQkJc2RhdGEtPm5hbWUsIGJzc2lkLCByZWFzb25fY29kZSk7CiAKLQlpZiAoIXdrKSB7Ci0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOwotCQlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKLQl9IGVsc2UgewotCQlsaXN0X2RlbCgmd2stPmxpc3QpOwotCQlrZnJlZSh3ayk7Ci0JfQorCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEpOworCWllZWU4MDIxMV9yZWNhbGNfaWRsZShzZGF0YS0+bG9jYWwpOwogCiAJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfREVBVVRIOwogfQpAQCAtMTQwMSwxMjMgKzk2Myw3MiBAQAogCWlmIChXQVJOX09OKCFpZm1nZC0+YXNzb2NpYXRlZCkpCiAJCXJldHVybiBSWF9NR01UX05PTkU7CiAKLQlpZiAoV0FSTl9PTihtZW1jbXAoaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpKQorCWlmIChXQVJOX09OKG1lbWNtcChpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpKQogCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRpc2Fzc29jLnJlYXNvbl9jb2RlKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlZCBmcm9tICVwTSAoUmVhc29uOiAldSlcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgcmVhc29uX2NvZGUpOworCQkJc2RhdGEtPm5hbWUsIG1nbXQtPnNhLCByZWFzb25fY29kZSk7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSk7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKHNkYXRhLT5sb2NhbCk7CiAJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfRElTQVNTT0M7CiB9CiAKIAotc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCi1pZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAotCQkJICAgICBib29sIHJlYXNzb2MpCitzdGF0aWMgYm9vbCBpZWVlODAyMTFfYXNzb2Nfc3VjY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9IHdrLT5hc3NvYy5ic3M7CisJdTggKnBvczsKIAl1MzIgcmF0ZXMsIGJhc2ljX3JhdGVzOwotCXUxNiBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgYWlkOworCXUxNiBjYXBhYl9pbmZvLCBhaWQ7CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKLQl1OCAqcG9zOwogCXUzMiBjaGFuZ2VkID0gMDsKLQlpbnQgaSwgajsKLQlib29sIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gZmFsc2UsIG5ld3N0YSA9IGZhbHNlOworCWludCBpLCBqLCBlcnI7CisJYm9vbCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IGZhbHNlOwogCXUxNiBhcF9odF9jYXBfZmxhZ3M7CiAKLQkvKgotCSAqIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKLQkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uCi0JICovCisJLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUgKi8KIAotCWlmIChsZW4gPCAyNCArIDYpCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7Ci0Jc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOwogCWFpZCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5haWQpOworCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYICVzc3NvY1Jlc3AgZnJvbSAlcE0gKGNhcGFiPTB4JXggIgotCSAgICAgICAic3RhdHVzPSVkIGFpZD0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCi0JICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOworCWlmICgoYWlkICYgKEJJVCgxNSkgfCBCSVQoMTQpKSkgIT0gKEJJVCgxNSkgfCBCSVQoMTQpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnZhbGlkIGFpZCB2YWx1ZSAlZDsgYml0cyAxNToxNCBub3QgIgorCQkgICAgICAgInNldFxuIiwgc2RhdGEtPm5hbWUsIGFpZCk7CisJYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwogCiAJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwogCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwogCi0JaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCi0JICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCi0JICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgewotCQl1MzIgdHUsIG1zOwotCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOwotCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgcmVqZWN0ZWQgYXNzb2NpYXRpb24gdGVtcG9yYXJpbHk7ICIKLQkJICAgICAgICJjb21lYmFjayBkdXJhdGlvbiAldSBUVSAoJXUgbXMpXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHUsIG1zKTsKLQkJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcyk7Ci0JCWlmIChtcyA+IElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKQotCQkJcnVuX2FnYWluKGlmbWdkLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOwotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCX0KLQotCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKLQkJd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzsKLQl9Ci0KLQlpZiAoKGFpZCAmIChCSVQoMTUpIHwgQklUKDE0KSkpICE9IChCSVQoMTUpIHwgQklUKDE0KSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW52YWxpZCBhaWQgdmFsdWUgJWQ7IGJpdHMgMTU6MTQgbm90ICIKLQkJICAgICAgICJzZXRcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFpZCk7Ci0JYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwotCiAJaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiBSWF9NR01UX05PTkU7CisJCSAgICAgICBzZGF0YS0+bmFtZSk7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwogCWlmbWdkLT5haWQgPSBhaWQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQkvKiBBZGQgU1RBIGVudHJ5IGZvciB0aGUgQVAgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHdrLT5ic3MtPmNic3MuYnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBjYnNzLT5ic3NpZCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGEpIHsKLQkJbmV3c3RhID0gdHJ1ZTsKLQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc3RhKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvYyBTVEEgZW50cnkgZm9yIgotCQkJICAgICAgICIgdGhlIEFQXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJCXJldHVybiBSWF9NR01UX05PTkU7Ci0JCX0KLQotCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DIHwKLQkJCQkgICBXTEFOX1NUQV9BU1NPQ19BUCk7Ci0JCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUKSkKLQkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCisJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPm5hbWUpOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEggfCBXTEFOX1NUQV9BU1NPQyB8CisJCQkgICBXTEFOX1NUQV9BU1NPQ19BUCk7CisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKQorCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7CisKIAlyYXRlcyA9IDA7CiAJYmFzaWNfcmF0ZXMgPSAwOwogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKQEAgLTE1ODAsNDAgKzEwOTEsMzMgQEAKIAlpZiAoZWxlbXMud21tX3BhcmFtKQogCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfV01FKTsKIAotCWlmIChuZXdzdGEpIHsKLQkJaW50IGVyciA9IHN0YV9pbmZvX2luc2VydChzdGEpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBpbnNlcnQgU1RBIGVudHJ5IGZvciIKLQkJCSAgICAgICAiIHRoZSBBUCAoZXJyb3IgJWQpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBlcnIpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCQl9CisJZXJyID0gc3RhX2luZm9faW5zZXJ0KHN0YSk7CisJc3RhID0gTlVMTDsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGluc2VydCBTVEEgZW50cnkgZm9yIgorCQkgICAgICAgIiB0aGUgQVAgKGVycm9yICVkKVxuIiwgc2RhdGEtPm5hbWUsIGVycik7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DX0VSUk9SOwogCX0KIAotCXJjdV9yZWFkX3VubG9jaygpOwotCiAJaWYgKGVsZW1zLndtbV9wYXJhbSkKIAkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAJZWxzZQogCQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKIAorCWxvY2FsLT5vcGVyX2NoYW5uZWwgPSB3ay0+Y2hhbjsKKwogCWlmIChlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCi0JICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgorCSAgICAoc2RhdGEtPmxvY2FsLT5ody5xdWV1ZXMgPj0gNCkgJiYKIAkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKSkKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfZW5hYmxlX2h0KHNkYXRhLCBlbGVtcy5odF9pbmZvX2VsZW0sCi0JCQkJCSAgICAgICB3ay0+YnNzLT5jYnNzLmJzc2lkLAotCQkJCQkgICAgICAgYXBfaHRfY2FwX2ZsYWdzKTsKLQotICAgICAgICAvKiBkZWxldGUgd29yayBpdGVtIC0tIG11c3QgYmUgYmVmb3JlIHNldF9hc3NvY2lhdGVkIGZvciBQUyAqLwotCWxpc3RfZGVsKCZ3ay0+bGlzdCk7CisJCQkJCSAgICAgICBjYnNzLT5ic3NpZCwgYXBfaHRfY2FwX2ZsYWdzKTsKIAogCS8qIHNldCBBSUQgYW5kIGFzc29jIGNhcGFiaWxpdHksCiAJICogaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KIAlic3NfY29uZi0+YWlkID0gYWlkOwogCWJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5ID0gY2FwYWJfaW5mbzsKLQkvKiB0aGlzIHdpbGwgdGFrZSBvd25lcnNoaXAgb2Ygd2sgKi8KLQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIHdrLCBjaGFuZ2VkKTsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGNic3MsIGNoYW5nZWQpOwogCiAJLyoKIAkgKiBTdGFydCB0aW1lciB0byBwcm9iZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgQVAgbm93LgpAQCAtMTYyMiw3ICsxMTI2LDcgQEAKIAlpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzZGF0YSwgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopbWdtdCk7CiAJbW9kX2JlYWNvbl90aW1lcihzZGF0YSk7CiAKLQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC0xNjU3LDcgKzExNjEsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtICYmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW1fbGVuID09IDMpICYmCi0JICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLAorCSAgICAobWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZC0+YnNzaWQsCiAJCQkJCQkJRVRIX0FMRU4pID09IDApKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOwpAQCAtMTY2NywxOSArMTE3MSwxOSBAQAogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbiwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7Ci0Jc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9ICh2b2lkICopIHNrYi0+Y2I7CisJc2l6ZV90IGJhc2VsZW4sIGxlbiA9IHNrYi0+bGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCiAJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCiAJQVNTRVJUX01HRF9NVFgoaWZtZ2QpOwogCi0JaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLwogCiAJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUgLSAodTggKikgbWdtdDsKQEAgLTE2OTEsMTcgKzExOTUsOCBAQAogCiAJaWVlZTgwMjExX3J4X2Jzc19pbmZvKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCBmYWxzZSk7CiAKLQkvKiBkaXJlY3QgcHJvYmUgbWF5IGJlIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uIGZsb3cgKi8KLQlpZiAod2sgJiYgd2stPnN0YXRlID09IElFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkUpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXdrLT50cmllcyA9IDA7Ci0JCXdrLT5zdGF0ZSA9IElFRUU4MDIxMV9NR0RfU1RBVEVfQVVUSDsKLQkJV0FSTl9PTihpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCB3aykgIT0gUlhfTUdNVF9OT05FKTsKLQl9Ci0KIAlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsIEVUSF9BTEVOKSA9PSAwICYmCiAJICAgIGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMIHwKIAkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpIHsKIAkJaWZtZ2QtPmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwgfApAQCAtMTc3NCw3ICsxMjY5LDcgQEAKIAlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQogCQlyZXR1cm47CiAKLQlic3NpZCA9IGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkOworCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkOwogCiAJLyoKIAkgKiBBbmQgaW4gdGhlb3J5IGV2ZW4gZnJhbWVzIGZyb20gYSBkaWZmZXJlbnQgQVAgd2Ugd2VyZSBqdXN0CkBAIC0xNzg3LDcgKzEyODIsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogY2FuY2VsbGluZyBwcm9iZXJlcSBwb2xsIGR1ZSAiCi0JCQkgICAgICAgInRvIGEgcmVjZWl2ZWQgYmVhY29uXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCSAgICAgICAidG8gYSByZWNlaXZlZCBiZWFjb25cbiIsIHNkYXRhLT5uYW1lKTsKIAkJfQogI2VuZGlmCiAJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTDsKQEAgLTE4NjUsNyArMTM2MCw3IEBACiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGJzc2lkKTsKIAkJaWYgKFdBUk5fT04oIXN0YSkpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuOwpAQCAtMTkxMyw5ICsxNDA4LDYgQEAKIAlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ1RJT046CkBAIC0xOTMzLDcgKzE0MjUsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrOwogCWVudW0gcnhfbWdtdF9hY3Rpb24gcm1hID0gUlhfTUdNVF9OT05FOwogCXUxNiBmYzsKIApAQCAtMTk0NCwyMCArMTQzNSwxNyBAQAogCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOwogCiAJaWYgKGlmbWdkLT5hc3NvY2lhdGVkICYmCi0JICAgIG1lbWNtcChpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgbWdtdC0+YnNzaWQsCi0JCQkJCQkJRVRIX0FMRU4pID09IDApIHsKKwkgICAgbWVtY21wKGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CiAJCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAogCQkJCQkJIHJ4X3N0YXR1cyk7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIE5VTEwsIG1nbXQsCi0JCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgc2tiKTsKIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIE5VTEwsCi0JCQkJCQkgICAgICAgbWdtdCwgc2tiLT5sZW4pOworCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CiAJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwpAQCAtMTk2Niw3ICsxNDU0LDcgQEAKIAkJCS8qIFhYWDogZGlmZmVyZW50aWF0ZSwgY2FuIG9ubHkgaGFwcGVuIGZvciBDU0Egbm93ISAqLwogCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCiAJCQkJCSZtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoLnN3X2VsZW0sCi0JCQkJCWlmbWdkLT5hc3NvY2lhdGVkKTsKKwkJCQkJKHZvaWQgKilpZm1nZC0+YXNzb2NpYXRlZC0+cHJpdik7CiAJCQlicmVhazsKIAkJfQogCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwpAQCAtMTk4Nyw1OCArMTQ3NSwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgd2ssIG1nbXQsIHNrYi0+bGVuLAotCQkJCQkJICAgICByeF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHNkYXRhLCB3aywgbWdtdCwgc2tiLT5sZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCB3aywgbWdtdCwKLQkJCQkJCQkgICBza2ItPmxlbiwgZmFsc2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIHdrLCBtZ210LAotCQkJCQkJCSAgIHNrYi0+bGVuLCB0cnVlKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIHdrLCBtZ210LAotCQkJCQkJICAgICAgIHNrYi0+bGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qCi0JCSAqIFdlJ3ZlIHByb2Nlc3NlZCB0aGlzIGZyYW1lIGZvciB0aGF0IHdvcmssIHNvIGl0IGNhbid0Ci0JCSAqIGJlbG9uZyB0byBhbm90aGVyIHdvcmsgc3RydWN0LgotCQkgKiBOQjogdGhpcyBpcyBhbHNvIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcyBiZWNhdXNlIHRoZQotCQkgKiBjYWxsZWQgZnVuY3Rpb25zIGNhbiBmcmVlICd3aycsIGFuZCBmb3IgJ3JtYSchCi0JCSAqLwotCQlicmVhazsKLQl9Ci0KIAltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogCi0Jc3dpdGNoIChybWEpIHsKLQljYXNlIFJYX01HTVRfTk9ORToKLQkJLyogbm8gYWN0aW9uICovCi0JCWJyZWFrOwotCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BVVRIOgotCQljZmc4MDIxMV9zZW5kX3J4X2F1dGgoc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIHNrYi0+bGVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBSWF9NR01UX0NGRzgwMjExX0FTU09DOgotCQljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBza2ItPmxlbik7Ci0JCWJyZWFrOwotCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9ERUFVVEg6CisJaWYgKHNrYi0+bGVuID49IDI0ICsgMiAvKiBtZ210ICsgZGVhdXRoIHJlYXNvbiAqLyAmJgorCSAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0RFQVVUSCkKIAkJY2ZnODAyMTFfc2VuZF9kZWF1dGgoc2RhdGEtPmRldiwgKHU4ICopbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7Ci0JfQogCiAgb3V0OgogCWtmcmVlX3NrYihza2IpOwpAQCAtMjA2NiwxMiArMTUwNyw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLCAqdG1wOwotCUxJU1RfSEVBRChmcmVlX3dvcmspOwotCWVudW0gcnhfbWdtdF9hY3Rpb24gcm1hOwotCWJvb2wgYW55YnVzeSA9IGZhbHNlOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlyZXR1cm47CiAKIAlpZiAobG9jYWwtPnNjYW5uaW5nKQpAQCAtMjEwMiw3ICsxNTM5LDcgQEAKIAkgICAgaWZtZ2QtPmFzc29jaWF0ZWQpIHsKIAkJdTggYnNzaWRbRVRIX0FMRU5dOwogCi0JCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhpZm1nZC0+cHJvYmVfdGltZW91dCkpCiAJCQlydW5fYWdhaW4oaWZtZ2QsIGlmbWdkLT5wcm9iZV90aW1lb3V0KTsKIApAQCAtMjEyNCw3ICsxNTYxLDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJObyBwcm9iZSByZXNwb25zZSBmcm9tIEFQICVwTSIKIAkJCQkiIGFmdGVyICVkbXMsIGRpc2Nvbm5lY3RpbmcuXG4iLAogCQkJCWJzc2lkLCAoMTAwMCAqIElFRUU4MDIxMV9QUk9CRV9XQUlUKS9IWik7Ci0JCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlKTsKKwkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEpOwogCQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKIAkJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAJCQkvKgpAQCAtMjEzOSw4NyArMTU3Niw3IEBACiAJCX0KIAl9CiAKLQotCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2ssIHRtcCwgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh3ay0+dGltZW91dCkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHdvcmsgaXRlbSBpc24ndCBzdXBwb3NlZCB0byBiZSB3b3JrZWQgb24KLQkJCSAqIHJpZ2h0IG5vdywgYnV0IHRha2UgY2FyZSB0byBhZGp1c3QgdGhlIHRpbWVyCi0JCQkgKiBwcm9wZXJseS4KLQkJCSAqLwotCQkJcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXN3aXRjaCAod2stPnN0YXRlKSB7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOX09OKDEpOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9JRExFOgotCQkJLyogbm90aGluZyAqLwotCQkJcm1hID0gUlhfTUdNVF9OT05FOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRToKLQkJCXJtYSA9IGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEsIHdrKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9NR0RfU1RBVEVfQVVUSDoKLQkJCXJtYSA9IGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIHdrKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9NR0RfU1RBVEVfQVNTT0M6Ci0JCQlybWEgPSBpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCB3ayk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAocm1hKSB7Ci0JCWNhc2UgUlhfTUdNVF9OT05FOgotCQkJLyogbm8gYWN0aW9uIHJlcXVpcmVkICovCi0JCQlicmVhazsKLQkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0FVVEhfVE86Ci0JCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzoKLQkJCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCQlsaXN0X2FkZCgmd2stPmxpc3QsICZmcmVlX3dvcmspOwotCQkJd2stPnRyaWVzID0gcm1hOyAvKiBzbWFsbCBhYnVzZSBidXQgb25seSBsb2NhbCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAod2stPnN0YXRlICE9IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRSkgewotCQkJYW55YnVzeSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoIWFueWJ1c3kgJiYKLQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCkpCi0JCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoJmxvY2FsLT5odywKLQkJCQkJICAgICAmbG9jYWwtPnNjYW5fd29yaywKLQkJCQkJICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDApKTsKLQogCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2ssIHRtcCwgJmZyZWVfd29yaywgbGlzdCkgewotCQlzd2l0Y2ggKHdrLT50cmllcykgewotCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzoKLQkJCWNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHNkYXRhLT5kZXYsCi0JCQkJCQkgICB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQkJCWJyZWFrOwotCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVNTT0NfVE86Ci0JCQljZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc2RhdGEtPmRldiwKLQkJCQkJCSAgICB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJV0FSTigxLCAidW5leHBlY3RlZDogJWQiLCB3ay0+dHJpZXMpOwotCQl9Ci0KLQkJbGlzdF9kZWwoJndrLT5saXN0KTsKLQkJa2ZyZWUod2spOwotCX0KLQotCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfYmNuX21vbl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yMzI4LDE0ICsxNjg1LDE0IEBACiAJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmbWdkLT5za2JfcXVldWUpOwogCi0JSU5JVF9MSVNUX0hFQUQoJmlmbWdkLT53b3JrX2xpc3QpOwotCi0JaWZtZ2QtPmNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKIAlpZm1nZC0+ZmxhZ3MgPSAwOwotCWlmIChzZGF0YS0+bG9jYWwtPmh3LnF1ZXVlcyA+PSA0KQotCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKIAogCW11dGV4X2luaXQoJmlmbWdkLT5tdHgpOworCisJaWYgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTKQorCQlpZm1nZC0+cmVxX3NtcHMgPSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM7CisJZWxzZQorCQlpZm1nZC0+cmVxX3NtcHMgPSBJRUVFODAyMTFfU01QU19PRkY7CiB9CiAKIC8qIHNjYW4gZmluaXNoZWQgbm90aWZpY2F0aW9uICovCkBAIC0yMzY2LDEyICsxNzIzLDM0IEBACiB9CiAKIC8qIGNvbmZpZyBob29rcyAqLworc3RhdGljIGVudW0gd29ya19kb25lX3Jlc3VsdAoraWVlZTgwMjExX3Byb2JlX2F1dGhfZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghc2tiKSB7CisJCWNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHdrLT5zZGF0YS0+ZGV2LCB3ay0+ZmlsdGVyX3RhKTsKKwkJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworCX0KKworCWlmICh3ay0+dHlwZSA9PSBJRUVFODAyMTFfV09SS19BVVRIKSB7CisJCWNmZzgwMjExX3NlbmRfcnhfYXV0aCh3ay0+c2RhdGEtPmRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCXJldHVybiBXT1JLX0RPTkVfREVTVFJPWTsKKwl9CisKKwltdXRleF9sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcCh3ay0+c2RhdGEsIHNrYik7CisJbXV0ZXhfdW5sb2NrKCZ3ay0+c2RhdGEtPnUubWdkLm10eCk7CisKKwl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX0FVVEg7CisJd2stPnByb2JlX2F1dGgudHJpZXMgPSAwOworCXJldHVybiBXT1JLX0RPTkVfUkVRVUVVRTsKK30KKwogaW50IGllZWU4MDIxMV9tZ2RfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAljb25zdCB1OCAqc3NpZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3azsKKwlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOwogCXUxNiBhdXRoX2FsZzsKIAogCXN3aXRjaCAocmVxLT5hdXRoX3R5cGUpIHsKQEAgLTIzOTUsNyArMTc3NCw3IEBACiAJaWYgKCF3aykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl3ay0+YnNzID0gKHZvaWQgKilyZXEtPmJzczsKKwltZW1jcHkod2stPmZpbHRlcl90YSwgcmVxLT5ic3MtPmJzc2lkLCBFVEhfQUxFTik7OwogCiAJaWYgKHJlcS0+aWUgJiYgcmVxLT5pZV9sZW4pIHsKIAkJbWVtY3B5KHdrLT5pZSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOwpAQCAtMjQwMyw2NiArMTc4Miw3NiBAQAogCX0KIAogCWlmIChyZXEtPmtleSAmJiByZXEtPmtleV9sZW4pIHsKLQkJd2stPmtleV9sZW4gPSByZXEtPmtleV9sZW47Ci0JCXdrLT5rZXlfaWR4ID0gcmVxLT5rZXlfaWR4OwotCQltZW1jcHkod2stPmtleSwgcmVxLT5rZXksIHJlcS0+a2V5X2xlbik7CisJCXdrLT5wcm9iZV9hdXRoLmtleV9sZW4gPSByZXEtPmtleV9sZW47CisJCXdrLT5wcm9iZV9hdXRoLmtleV9pZHggPSByZXEtPmtleV9pZHg7CisJCW1lbWNweSh3ay0+cHJvYmVfYXV0aC5rZXksIHJlcS0+a2V5LCByZXEtPmtleV9sZW4pOwogCX0KIAogCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShyZXEtPmJzcywgV0xBTl9FSURfU1NJRCk7Ci0JbWVtY3B5KHdrLT5zc2lkLCBzc2lkICsgMiwgc3NpZFsxXSk7Ci0Jd2stPnNzaWRfbGVuID0gc3NpZFsxXTsKKwltZW1jcHkod2stPnByb2JlX2F1dGguc3NpZCwgc3NpZCArIDIsIHNzaWRbMV0pOworCXdrLT5wcm9iZV9hdXRoLnNzaWRfbGVuID0gc3NpZFsxXTsKIAotCXdrLT5zdGF0ZSA9IElFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkU7Ci0Jd2stPmF1dGhfYWxnID0gYXV0aF9hbGc7Ci0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzOyAvKiBydW4gcmlnaHQgYXdheSAqLworCXdrLT5wcm9iZV9hdXRoLmFsZ29yaXRobSA9IGF1dGhfYWxnOworCXdrLT5wcm9iZV9hdXRoLnByaXZhY3kgPSByZXEtPmJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCi0JLyoKLQkgKiBYWFg6IGlmIHN0aWxsIGFzc29jaWF0ZWQgbmVlZCB0byB0ZWxsIEFQIHRoYXQgd2UncmUgZ29pbmcKLQkgKgl0byBzbGVlcCBhbmQgdGhlbiBjaGFuZ2UgY2hhbm5lbCBldGMuCi0JICovCi0Jc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWwgPSByZXEtPmJzcy0+Y2hhbm5lbDsKLQlpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwgMCk7CisJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19ESVJFQ1RfUFJPQkU7CisJd2stPmNoYW4gPSByZXEtPmJzcy0+Y2hhbm5lbDsKKwl3ay0+c2RhdGEgPSBzZGF0YTsKKwl3ay0+ZG9uZSA9IGllZWU4MDIxMV9wcm9iZV9hdXRoX2RvbmU7CiAKLQltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKLQlsaXN0X2FkZCgmd2stPmxpc3QsICZzZGF0YS0+dS5tZ2Qud29ya19saXN0KTsKLQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwotCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJaWVlZTgwMjExX2FkZF93b3JrKHdrKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGVudW0gd29ya19kb25lX3Jlc3VsdCBpZWVlODAyMTFfYXNzb2NfZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgc3RhdHVzOworCisJaWYgKCFza2IpIHsKKwkJY2ZnODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHdrLT5zZGF0YS0+ZGV2LCB3ay0+ZmlsdGVyX3RhKTsKKwkJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworCX0KKworCW1nbXQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOworCisJaWYgKHN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCW11dGV4X2xvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwkJaWYgKCFpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzcyh3aywgbWdtdCwgc2tiLT5sZW4pKSB7CisJCQltdXRleF91bmxvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwkJCS8qIG9vcHMgLS0gaW50ZXJuYWwgZXJyb3IgLS0gc2VuZCB0aW1lb3V0IGZvciBub3cgKi8KKwkJCWNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dCh3ay0+c2RhdGEtPmRldiwKKwkJCQkJCSAgICB3ay0+ZmlsdGVyX3RhKTsKKwkJCXJldHVybiBXT1JLX0RPTkVfREVTVFJPWTsKKwkJfQorCQltdXRleF91bmxvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwl9CisKKwljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHdrLT5zZGF0YS0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7Cit9CisKIGludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywgKmZvdW5kID0gTlVMTDsKLQlpbnQgaSwgZXJyOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKXJlcS0+YnNzLT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJY29uc3QgdTggKnNzaWQ7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmICgmd2stPmJzcy0+Y2JzcyA9PSByZXEtPmJzcyAmJgotCQkgICAgd2stPnN0YXRlID09IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRSkgewotCQkJZm91bmQgPSB3azsKLQkJCWJyZWFrOwotCQl9CisJaWYgKGlmbWdkLT5hc3NvY2lhdGVkKSB7CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJCXJldHVybiAtRUFMUkVBRFk7CiAJfQorCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAKLQlpZiAoIWZvdW5kKSB7Ci0JCWVyciA9IC1FTk9MSU5LOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlsaXN0X2RlbCgmZm91bmQtPmxpc3QpOwotCi0Jd2sgPSBrcmVhbGxvYyhmb3VuZCwgc2l6ZW9mKCp3aykgKyByZXEtPmllX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3aykgewotCQlsaXN0X2FkZCgmZm91bmQtPmxpc3QsICZpZm1nZC0+d29ya19saXN0KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9hZGQoJndrLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7CisJd2sgPSBremFsbG9jKHNpemVvZigqd2spICsgcmVxLT5pZV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghd2spCisJCXJldHVybiAtRU5PTUVNOwogCiAJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOOwogCkBAIC0yNDcyLDggKzE4NjEsNiBAQAogCQkgICAgcmVxLT5jcnlwdG8uY2lwaGVyc19wYWlyd2lzZVtpXSA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpCiAJCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTjsKIAotCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gcmVxLT5ic3MtPmNoYW5uZWw7Ci0JaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOwogCiAJaWYgKHJlcS0+aWUgJiYgcmVxLT5pZV9sZW4pIHsKIAkJbWVtY3B5KHdrLT5pZSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOwpAQCAtMjQ4MSwxMiArMTg2OCw0NiBAQAogCX0gZWxzZQogCQl3ay0+aWVfbGVuID0gMDsKIAotCWlmIChyZXEtPnByZXZfYnNzaWQpCi0JCW1lbWNweSh3ay0+cHJldl9ic3NpZCwgcmVxLT5wcmV2X2Jzc2lkLCBFVEhfQUxFTik7CisJd2stPmFzc29jLmJzcyA9IHJlcS0+YnNzOwogCi0Jd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQzsKLQl3ay0+dHJpZXMgPSAwOwotCXdrLT50aW1lb3V0ID0gamlmZmllczsgLyogcnVuIHJpZ2h0IGF3YXkgKi8KKwltZW1jcHkod2stPmZpbHRlcl90YSwgcmVxLT5ic3MtPmJzc2lkLCBFVEhfQUxFTik7CisKKwkvKiBuZXcgYXNzb2NpYXRpb24gYWx3YXlzIHVzZXMgcmVxdWVzdGVkIHNtcHMgbW9kZSAqLworCWlmIChpZm1nZC0+cmVxX3NtcHMgPT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKSB7CisJCWlmIChpZm1nZC0+cG93ZXJzYXZlKQorCQkJaWZtZ2QtPmFwX3NtcHMgPSBJRUVFODAyMTFfU01QU19EWU5BTUlDOworCQllbHNlCisJCQlpZm1nZC0+YXBfc21wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwl9IGVsc2UKKwkJaWZtZ2QtPmFwX3NtcHMgPSBpZm1nZC0+cmVxX3NtcHM7CisKKwl3ay0+YXNzb2Muc21wcyA9IGlmbWdkLT5hcF9zbXBzOworCS8qCisJICogSUVFRTgwMi4xMW4gZG9lcyBub3QgYWxsb3cgVEtJUC9XRVAgYXMgcGFpcndpc2UgY2lwaGVycyBpbiBIVCBtb2RlLgorCSAqIFdlIHN0aWxsIGFzc29jaWF0ZSBpbiBub24tSFQgbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZQorCSAqIGNpcGhlcnMgaXMgY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KKwkgKiBXZSBjYW4gc2V0IHRoaXMgdG8gdHJ1ZSBmb3Igbm9uLTExbiBoYXJkd2FyZSwgdGhhdCdsbCBiZSBjaGVja2VkCisJICogc2VwYXJhdGVseSBhbG9uZyB3aXRoIHRoZSBwZWVyIGNhcGFiaWxpdGllcy4KKwkgKi8KKwl3ay0+YXNzb2MudXNlXzExbiA9ICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTik7CisJd2stPmFzc29jLmNhcGFiaWxpdHkgPSByZXEtPmJzcy0+Y2FwYWJpbGl0eTsKKwl3ay0+YXNzb2Mud21tX3VzZWQgPSBic3MtPndtbV91c2VkOworCXdrLT5hc3NvYy5zdXBwX3JhdGVzID0gYnNzLT5zdXBwX3JhdGVzOworCXdrLT5hc3NvYy5zdXBwX3JhdGVzX2xlbiA9IGJzcy0+c3VwcF9yYXRlc19sZW47CisJd2stPmFzc29jLmh0X2luZm9ybWF0aW9uX2llID0KKwkJaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKTsKKworCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShyZXEtPmJzcywgV0xBTl9FSURfU1NJRCk7CisJbWVtY3B5KHdrLT5hc3NvYy5zc2lkLCBzc2lkICsgMiwgc3NpZFsxXSk7CisJd2stPmFzc29jLnNzaWRfbGVuID0gc3NpZFsxXTsKKworCWlmIChyZXEtPnByZXZfYnNzaWQpCisJCW1lbWNweSh3ay0+YXNzb2MucHJldl9ic3NpZCwgcmVxLT5wcmV2X2Jzc2lkLCBFVEhfQUxFTik7CisKKwl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX0FTU09DOworCXdrLT5jaGFuID0gcmVxLT5ic3MtPmNoYW5uZWw7CisJd2stPnNkYXRhID0gc2RhdGE7CisJd2stPmRvbmUgPSBpZWVlODAyMTFfYXNzb2NfZG9uZTsKIAogCWlmIChyZXEtPnVzZV9tZnApIHsKIAkJaWZtZ2QtPm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7CkBAIC0yNTAxLDY5ICsxOTIyLDU5IEBACiAJZWxzZQogCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwogCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7Ci0KLQllcnIgPSAwOwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0JcmV0dXJuIGVycjsKKwlpZWVlODAyMTFfYWRkX3dvcmsod2spOworCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX21nZF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0ICpyZXEsCiAJCQkgdm9pZCAqY29va2llKQogeworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrOwotCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7Ci0JYm9vbCBub3RfYXV0aF95ZXQgPSBmYWxzZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOworCWNvbnN0IHU4ICpic3NpZCA9IHJlcS0+YnNzLT5ic3NpZDsKIAogCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOwogCi0JaWYgKGlmbWdkLT5hc3NvY2lhdGVkICYmICZpZm1nZC0+YXNzb2NpYXRlZC0+Y2JzcyA9PSByZXEtPmJzcykgeworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCA9PSByZXEtPmJzcykgewogCQlic3NpZCA9IHJlcS0+YnNzLT5ic3NpZDsKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSk7Ci0JfSBlbHNlIGxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmICgmd2stPmJzcy0+Y2JzcyA9PSByZXEtPmJzcykgewotCQkJYnNzaWQgPSByZXEtPmJzcy0+YnNzaWQ7Ci0JCQlpZiAod2stPnN0YXRlID09IElFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkUpCi0JCQkJbm90X2F1dGhfeWV0ID0gdHJ1ZTsKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJfSBlbHNlIHsKKwkJYm9vbCBub3RfYXV0aF95ZXQgPSBmYWxzZTsKKworCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCisJCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCQlpZiAod2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1lbWNtcChyZXEtPmJzcy0+YnNzaWQsIHdrLT5maWx0ZXJfdGEsIEVUSF9BTEVOKSkKKwkJCQljb250aW51ZTsKKwkJCW5vdF9hdXRoX3lldCA9IHRydWU7CiAJCQlsaXN0X2RlbCgmd2stPmxpc3QpOwotCQkJa2ZyZWUod2spOworCQkJZnJlZV93b3JrKHdrKTsKIAkJCWJyZWFrOwogCQl9CisJCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKworCQkvKgorCQkgKiBJZiBzb21lYm9keSByZXF1ZXN0cyBhdXRoZW50aWNhdGlvbiBhbmQgd2UgaGF2ZW4ndAorCQkgKiBzZW50IG91dCBhbiBhdXRoIGZyYW1lIHlldCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VuZAorCQkgKiBvdXQgYSBkZWF1dGggZnJhbWUgZWl0aGVyLiBJZiB0aGUgc3RhdGUgd2FzIFBST0JFLAorCQkgKiB0aGVuIHRoaXMgaXMgdGhlIGNhc2UuIElmIGl0J3MgQVVUSCB3ZSBoYXZlIHNlbnQgYQorCQkgKiBmcmFtZSwgYW5kIGlmIGl0J3MgSURMRSB3ZSBoYXZlIGNvbXBsZXRlZCB0aGUgYXV0aAorCQkgKiBwcm9jZXNzIGFscmVhZHkuCisJCSAqLworCQlpZiAobm90X2F1dGhfeWV0KSB7CisJCQlfX2NmZzgwMjExX2F1dGhfY2FuY2VsZWQoc2RhdGEtPmRldiwgYnNzaWQpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKLQkvKgotCSAqIElmIHNvbWVib2R5IHJlcXVlc3RzIGF1dGhlbnRpY2F0aW9uIGFuZCB3ZSBoYXZlbid0Ci0JICogc2VudCBvdXQgYW4gYXV0aCBmcmFtZSB5ZXQgdGhlcmUncyBubyBuZWVkIHRvIHNlbmQKLQkgKiBvdXQgYSBkZWF1dGggZnJhbWUgZWl0aGVyLiBJZiB0aGUgc3RhdGUgd2FzIFBST0JFLAotCSAqIHRoZW4gdGhpcyBpcyB0aGUgY2FzZS4gSWYgaXQncyBBVVRIIHdlIGhhdmUgc2VudCBhCi0JICogZnJhbWUsIGFuZCBpZiBpdCdzIElETEUgd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIGF1dGgKLQkgKiBwcm9jZXNzIGFscmVhZHkuCi0JICovCi0JaWYgKG5vdF9hdXRoX3lldCkgewotCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwotCQlfX2NmZzgwMjExX2F1dGhfY2FuY2VsZWQoc2RhdGEtPmRldiwgYnNzaWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIGNmZzgwMjExIHNob3VsZCBjYXRjaCB0aGlzIC4uLiBidXQgaXQncyByYWN5IHNpbmNlCi0JICogd2UgY2FuIHJlY2VpdmUgYSBkZWF1dGggZnJhbWUsIHByb2Nlc3MgaXQsIGhhbmQgaXQKLQkgKiB0byBjZmc4MDIxMSB3aGlsZSB0aGF0J3MgaW4gYSBsb2NrZWQgc2VjdGlvbiBhbHJlYWR5Ci0JICogdHJ5aW5nIHRvIHRlbGwgdXMgdGhhdCB0aGUgdXNlciB3YW50cyB0byBkaXNjb25uZWN0LgotCSAqLwotCWlmICghYnNzaWQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKLQkJcmV0dXJuIC1FTk9MSU5LOwotCX0KLQotCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0KIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRpbmcgZnJvbSAlcE0gYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCwgcmVxLT5yZWFzb25fY29kZSk7CisJICAgICAgIHNkYXRhLT5uYW1lLCBic3NpZCwgcmVxLT5yZWFzb25fY29kZSk7CiAKIAlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsIGJzc2lkLAogCQkJSUVFRTgwMjExX1NUWVBFX0RFQVVUSCwgcmVxLT5yZWFzb25fY29kZSwKQEAgLTI1ODgsMTUgKzE5OTksMTUgQEAKIAkgKiB0byBjZmc4MDIxMSB3aGlsZSB0aGF0J3MgaW4gYSBsb2NrZWQgc2VjdGlvbiBhbHJlYWR5CiAJICogdHJ5aW5nIHRvIHRlbGwgdXMgdGhhdCB0aGUgdXNlciB3YW50cyB0byBkaXNjb25uZWN0LgogCSAqLwotCWlmICgmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MgIT0gcmVxLT5ic3MpIHsKKwlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgIT0gcmVxLT5ic3MpIHsKIAkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKIAkJcmV0dXJuIC1FTk9MSU5LOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRpbmcgZnJvbSAlcE0gYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXEtPmJzcy0+YnNzaWQsIHJlcS0+cmVhc29uX2NvZGUpOworCSAgICAgICBzZGF0YS0+bmFtZSwgcmVxLT5ic3MtPmJzc2lkLCByZXEtPnJlYXNvbl9jb2RlKTsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhKTsKIAogCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YmJmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogT2ZmLWNoYW5uZWwgb3BlcmF0aW9uIGhlbHBlcnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorCisvKgorICogaW5mb3JtIEFQIHRoYXQgd2Ugd2lsbCBnbyB0byBzbGVlcCBzbyB0aGF0IGl0IHdpbGwgYnVmZmVyIHRoZSBmcmFtZXMKKyAqIHdoaWxlIHdlIHNjYW4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfcHNfZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJbG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCA9IGZhbHNlOworCisJLyogRklYTUU6IHdoYXQgdG8gZG8gd2hlbiBsb2NhbC0+cHNwb2xsaW5nIGlzIHRydWU/ICovCisKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCWxvY2FsLT5vZmZjaGFubmVsX3BzX2VuYWJsZWQgPSB0cnVlOworCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJfQorCisJaWYgKCEobG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCkgfHwKKwkgICAgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spKQorCQkvKgorCQkgKiBJZiBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCBubyBuZWVkIHRvIHNlbmQgYSBudWxsZnVuYworCQkgKiBmcmFtZSBiZWNhdXNlIEFQIGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLiBCdXQgaWYgdGhlCisJCSAqIGhhcmR3YXJlIGlzIGNyZWF0aW5nIHRoZSBudWxsZnVuYyBmcmFtZSBmb3IgcG93ZXIgc2F2ZQorCQkgKiBzdGF0dXMgKGllLiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgbm90CisJCSAqIGVuYWJsZWQpIGFuZCBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCB0aGUgZmlybXdhcmUganVzdAorCQkgKiBzZW50IGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyIHNhdmUgZGlzYWJsZWQuIFNvIHdlIG5lZWQKKwkJICogdG8gc2VuZCBhIG5ldyBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0gdGhlIEFQIHRoYXQgd2UKKwkJICogYXJlIGFnYWluIHNsZWVwaW5nLgorCQkgKi8KKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKK30KKworLyogaW5mb3JtIEFQIHRoYXQgd2UgYXJlIGF3YWtlIGFnYWluLCB1bmxlc3MgcG93ZXIgc2F2ZSBpcyBlbmFibGVkICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWYgKCFsb2NhbC0+cHNfc2RhdGEpCisJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJZWxzZSBpZiAobG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCkgeworCQkvKgorCQkgKiBJbiAhSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGNhc2UgdGhlIGhhcmR3YXJlCisJCSAqIHdpbGwgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHdpdGggdGhlIHBvd2Vyc2F2ZSBiaXQgc2V0CisJCSAqIGV2ZW4gdGhvdWdoIHRoZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLgorCQkgKiBUaGlzIGNvdWxkIGJlIGF2b2lkZWQgYnkgc2VuZGluZyBhIG51bGwgZnJhbWUgd2l0aCBwb3dlcgorCQkgKiBzYXZlIGJpdCBkaXNhYmxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIHBvd2VyIHNhdmUsIGJ1dAorCQkgKiB0aGlzIGRvZXNuJ3QgZ2FpbiBhbnl0aGluZy4KKwkJICoKKwkJICogV2hlbiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgZW5hYmxlZCwgbm8gbmVlZAorCQkgKiB0byBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgYmVjYXVzZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQKKwkJICogd2UgYXJlIHNsZWVwaW5nLCBsZXQncyBqdXN0IGVuYWJsZSBwb3dlciBzYXZlIG1vZGUgaW4KKwkJICogaGFyZHdhcmUuCisJCSAqLworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwl9IGVsc2UgaWYgKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKKwkJLyoKKwkJICogSWYgSUVFRTgwMjExX0NPTkZfUFMgd2FzIG5vdCBzZXQgYW5kIHRoZSBkeW5hbWljX3BzX3RpbWVyCisJCSAqIGhhZCBiZWVuIHJ1bm5pbmcgYmVmb3JlIGxlYXZpbmcgdGhlIG9wZXJhdGluZyBjaGFubmVsLAorCQkgKiByZXN0YXJ0IHRoZSB0aW1lciBub3cgYW5kIHNlbmQgYSBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0KKwkJICogdGhlIEFQIHRoYXQgd2UgYXJlIGF3YWtlLgorCQkgKi8KKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3BfYmVhY29uaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRpc2FibGUgYmVhY29uaW5nICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeSgKKwkJCQlzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpOworCisJCS8qCisJCSAqIG9ubHkgaGFuZGxlIG5vbi1TVEEgaW50ZXJmYWNlcyBoZXJlLCBTVEEgaW50ZXJmYWNlcworCQkgKiBhcmUgaGFuZGxlZCBpbiBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24oKSwKKwkJICogZS5nLiwgZnJvbSB0aGUgYmFja2dyb3VuZCBzY2FuIHN0YXRlIG1hY2hpbmUuCisJCSAqCisJCSAqIEluIGFkZGl0aW9uLCBkbyBub3Qgc3RvcCBtb25pdG9yIGludGVyZmFjZSB0byBhbGxvdyBpdCB0byBiZQorCQkgKiB1c2VkIGZyb20gdXNlciBzcGFjZSBjb250cm9sbGVkIG9mZi1jaGFubmVsIG9wZXJhdGlvbnMuCisJCSAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQkJbmV0aWZfc3RvcF9xdWV1ZShzZGF0YS0+ZGV2KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9zdGF0aW9uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJLyoKKwkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsIFNUQSBpbnRlcmZhY2VzCisJICovCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShzZGF0YS0+ZGV2KTsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKKwkJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19lbmFibGUoc2RhdGEpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworfQorCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgYm9vbCBlbmFibGVfYmVhY29uaW5nKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFRlbGwgQVAgd2UncmUgYmFjayAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKKwkJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19kaXNhYmxlKHNkYXRhKTsKKwkJCW5ldGlmX3dha2VfcXVldWUoc2RhdGEtPmRldik7CisJCX0KKworCQkvKiByZS1lbmFibGUgYmVhY29uaW5nICovCisJCWlmIChlbmFibGVfYmVhY29uaW5nICYmCisJCSAgICAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQorCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCisJCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IGU1MzVmMWMuLjQ3ZjgxODkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC0xMCw3ICsxMCw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC02NSw3ICs2NCw3IEBACiAJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKIAkJCQkJICAgICB1LmFwKTsKIAotCQkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX1JFTU9WRSwKKwkJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9SRU1PVkUsCiAJCQkJICAgICAgICZzdGEtPnN0YSk7CiAJCX0KIApAQCAtOTMsMTcgKzkyLDE0IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBkaXNhYmxlIGJlYWNvbmluZyAqLwogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwKIAkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAotCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwotCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7Ci0JCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKLQkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAl9CiAKIAkvKiBzdG9wIGhhcmR3YXJlIC0gdGhpcyBtdXN0IHN0b3AgUlggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggOWYyODA3YS4uYmZjZjA5ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTI4MywxNSArMjgzLDE1IEBACiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQkJY29udGludWU7CiAKIAkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09PS19GUkFNRVMpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChwcmV2X2RldikgewogCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHNrYjIpIHsKQEAgLTM2MSw3ICszNjEsOSBAQAogICogYm91bmRhcnkuIEluIHRoZSBjYXNlIG9mIHJlZ3VsYXIgZnJhbWVzLCB0aGlzIHNpbXBseSBtZWFucyBhbGlnbmluZyB0aGUKICAqIHBheWxvYWQgdG8gYSBmb3VyLWJ5dGUgYm91bmRhcnkgKGJlY2F1c2UgZWl0aGVyIHRoZSBJUCBoZWFkZXIgaXMgZGlyZWN0bHkKICAqIGNvbnRhaW5lZCwgb3IgSVYvUkZDMTA0MiBoZWFkZXJzIHRoYXQgaGF2ZSBhIGxlbmd0aCBkaXZpc2libGUgYnkgZm91ciBhcmUKLSAqIGluIGZyb250IG9mIGl0KS4KKyAqIGluIGZyb250IG9mIGl0KS4gIElmIHRoZSBwYXlsb2FkIGRhdGEgaXMgbm90IHByb3Blcmx5IGFsaWduZWQgYW5kIHRoZQorICogYXJjaGl0ZWN0dXJlIGRvZXNuJ3Qgc3VwcG9ydCBlZmZpY2llbnQgdW5hbGlnbmVkIG9wZXJhdGlvbnMsIG1hYzgwMjExCisgKiB3aWxsIGFsaWduIHRoZSBkYXRhLgogICoKICAqIFdpdGggQS1NU0RVIGZyYW1lcywgaG93ZXZlciwgdGhlIHBheWxvYWQgZGF0YSBhZGRyZXNzIG11c3QgeWllbGQgdHdvIG1vZHVsbwogICogZm91ciBiZWNhdXNlIHRoZXJlIGFyZSAxNC1ieXRlIDgwMi4zIGhlYWRlcnMgd2l0aGluIHRoZSBBLU1TRFUgZnJhbWVzIHRoYXQKQEAgLTM3NSwyNSArMzc3LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7Ci0JaW50IGhkcmxlbjsKLQotI2lmbmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVAotCXJldHVybjsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCVdBUk5fT05DRSgodW5zaWduZWQgbG9uZylyeC0+c2tiLT5kYXRhICYgMSwKKwkJICAidW5hbGlnbmVkIHBhY2tldCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhKTsKICNlbmRpZgotCi0JaWYgKFdBUk5fT05DRSgodW5zaWduZWQgbG9uZylyeC0+c2tiLT5kYXRhICYgMSwKLQkJICAgICAgInVuYWxpZ25lZCBwYWNrZXQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSkpCi0JCXJldHVybjsKLQotCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm47Ci0KLQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9BTVNEVSkKLQkJaGRybGVuICs9IEVUSF9ITEVOOwotCVdBUk5fT05DRSgoKHVuc2lnbmVkIGxvbmcpKHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pKSAmIDMsCi0JCSAgInVuYWxpZ25lZCBJUCBwYXlsb2FkIGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pOwogfQogCiAKQEAgLTQ3Niw3ICs0NjMsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCXVuc2lnbmVkIGludCBoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JY2hhciAqZGV2X2FkZHIgPSByeC0+c2RhdGEtPmRldi0+ZGV2X2FkZHI7CisJY2hhciAqZGV2X2FkZHIgPSByeC0+c2RhdGEtPnZpZi5hZGRyOwogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CkBAIC0xMDIxLDEwICsxMDA4LDEwIEBACiAKIAlhdG9taWNfaW5jKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKIAlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfU1RBKTsKLQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfU0xFRVAsICZzdGEtPnN0YSk7CisJZHJ2X3N0YV9ub3RpZnkobG9jYWwsIHNkYXRhLCBTVEFfTk9USUZZX1NMRUVQLCAmc3RhLT5zdGEpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIGFpZCAlZCBlbnRlcnMgcG93ZXIgc2F2ZSBtb2RlXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOworCSAgICAgICBzZGF0YS0+bmFtZSwgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogfQogCkBAIC0xMDM4LDEzICsxMDI1LDEzIEBACiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVwTSBhaWQgJWQgZXhpdHMgcG93ZXIgc2F2ZSBtb2RlXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOworCSAgICAgICBzZGF0YS0+bmFtZSwgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogCiAJaWYgKHRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfRFJJVkVSKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVwTSBhaWQgJWQgZHJpdmVyLXBzLWJsb2NrZWRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTExNTYsNyArMTE0Myw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggcmVhc3NlbWJseSByZW1vdmVkIG9sZGVzdCAiCiAJCSAgICAgICAiZnJhZ21lbnQgZW50cnkgKGlkeD0lZCBhZ2U9JWx1IHNlcT0lZCBsYXN0X2ZyYWc9JWQgIgogCQkgICAgICAgImFkZHIxPSVwTSBhZGRyMj0lcE1cbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZHgsCisJCSAgICAgICBzZGF0YS0+bmFtZSwgaWR4LAogCQkgICAgICAgamlmZmllcyAtIGVudHJ5LT5maXJzdF9mcmFnX3RpbWUsIGVudHJ5LT5zZXEsCiAJCSAgICAgICBlbnRyeS0+bGFzdF9mcmFnLCBoZHItPmFkZHIxLCBoZHItPmFkZHIyKTsKICNlbmRpZgpAQCAtMTQyNCw3ICsxNDExLDYgQEAKIF9faWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gcngtPnNkYXRhOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCiAJaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgpAQCAtMTQzNiw3ICsxNDIyLDcgQEAKIAkgICAgIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJiBzZGF0YS0+dS5tZ2QudXNlXzRhZGRyKSkpCiAJCXJldHVybiAtMTsKIAotCXJldHVybiBpZWVlODAyMTFfZGF0YV90b184MDIzKHJ4LT5za2IsIGRldi0+ZGV2X2FkZHIsIHNkYXRhLT52aWYudHlwZSk7CisJcmV0dXJuIGllZWU4MDIxMV9kYXRhX3RvXzgwMjMocngtPnNrYiwgc2RhdGEtPnZpZi5hZGRyLCBzZGF0YS0+dmlmLnR5cGUpOwogfQogCiAvKgpAQCAtMTQ1Myw3ICsxNDM5LDcgQEAKIAkgKiBvZiB3aGV0aGVyIHRoZSBmcmFtZSB3YXMgZW5jcnlwdGVkIG9yIG5vdC4KIAkgKi8KIAlpZiAoZWhkci0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9QQUUpICYmCi0JICAgIChjb21wYXJlX2V0aGVyX2FkZHIoZWhkci0+aF9kZXN0LCByeC0+c2RhdGEtPmRldi0+ZGV2X2FkZHIpID09IDAgfHwKKwkgICAgKGNvbXBhcmVfZXRoZXJfYWRkcihlaGRyLT5oX2Rlc3QsIHJ4LT5zZGF0YS0+dmlmLmFkZHIpID09IDAgfHwKIAkgICAgIGNvbXBhcmVfZXRoZXJfYWRkcihlaGRyLT5oX2Rlc3QsIHBhZV9ncm91cF9hZGRyKSA9PSAwKSkKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTE0NzIsNyArMTQ1OCw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNkYXRhLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnhtaXRfc2tiOwogCXN0cnVjdCBldGhoZHIgKmVoZHIgPSAoc3RydWN0IGV0aGhkciAqKSByeC0+c2tiLT5kYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqZHN0YTsKQEAgLTE0OTUsOCArMTQ4MCw4IEBACiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gY2xvbmUgIgogCQkJCSAgICAgICAibXVsdGljYXN0IGZyYW1lXG4iLCBkZXYtPm5hbWUpOwogCQl9IGVsc2UgewotCQkJZHN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2tiLT5kYXRhKTsKLQkJCWlmIChkc3RhICYmIGRzdGEtPnNkYXRhLT5kZXYgPT0gZGV2KSB7CisJCQlkc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBza2ItPmRhdGEpOworCQkJaWYgKGRzdGEpIHsKIAkJCQkvKgogCQkJCSAqIFRoZSBkZXN0aW5hdGlvbiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQgdG8KIAkJCQkgKiB0aGlzIEFQIChpbiB0aGlzIFZMQU4pLCBzbyBzZW5kIHRoZSBmcmFtZQpAQCAtMTUxMiw3ICsxNDk3LDcgQEAKIAlpZiAoc2tiKSB7CiAJCWludCBhbGlnbiBfX21heWJlX3VudXNlZDsKIAotI2lmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQpIHx8ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQorI2lmbmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQkvKgogCQkgKiAnYWxpZ24nIHdpbGwgb25seSB0YWtlIHRoZSB2YWx1ZXMgMCBvciAyIGhlcmUKIAkJICogc2luY2UgYWxsIGZyYW1lcyBhcmUgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZApAQCAtMTU1NiwxNiArMTU0MSwxMCBAQAogaWVlZTgwMjExX3J4X2hfYW1zZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcngtPnNkYXRhLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7Ci0JdTE2IGV0aGVydHlwZTsKLQl1OCAqcGF5bG9hZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYiwgKmZyYW1lID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQljb25zdCBzdHJ1Y3QgZXRoaGRyICpldGg7Ci0JaW50IHJlbWFpbmluZywgZXJyOwotCXU4IGRzdFtFVEhfQUxFTl07Ci0JdTggc3JjW0VUSF9BTEVOXTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYW1lX2xpc3Q7CiAKIAlpZiAodW5saWtlbHkoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKQEAgLTE1NzYsOTQgKzE1NTUsMzQgQEAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfQU1TRFUpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQllcnIgPSBfX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMocngpOwotCWlmICh1bmxpa2VseShlcnIpKQorCWlmIChpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgcngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgICFyeC0+c2RhdGEtPnUudmxhbi5zdGEpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCisJICAgICgocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgICAgcngtPnNkYXRhLT51LnZsYW4uc3RhKSB8fAorCSAgICAgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICAgIHJ4LT5zZGF0YS0+dS5tZ2QudXNlXzRhZGRyKSkpCiAJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJc2tiLT5kZXYgPSBkZXY7CisJX19za2JfcXVldWVfaGVhZF9pbml0KCZmcmFtZV9saXN0KTsKIAotCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmZyYW1lX2xpc3QsIGRldi0+ZGV2X2FkZHIsCisJCQkJIHJ4LT5zZGF0YS0+dmlmLnR5cGUsCisJCQkJIHJ4LT5sb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JLyogc2tpcCB0aGUgd3JhcHBpbmcgaGVhZGVyICovCi0JZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCWlmICghZXRoKQotCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQotCXdoaWxlIChza2IgIT0gZnJhbWUpIHsKLQkJdTggcGFkZGluZzsKLQkJX19iZTE2IGxlbiA9IGV0aC0+aF9wcm90bzsKLQkJdW5zaWduZWQgaW50IHN1YmZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIG50b2hzKGxlbik7Ci0KLQkJcmVtYWluaW5nID0gc2tiLT5sZW47Ci0JCW1lbWNweShkc3QsIGV0aC0+aF9kZXN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShzcmMsIGV0aC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKLQotCQlwYWRkaW5nID0gKCg0IC0gc3ViZnJhbWVfbGVuKSAmIDB4Myk7Ci0JCS8qIHRoZSBsYXN0IE1TRFUgaGFzIG5vIHBhZGRpbmcgKi8KLQkJaWYgKHN1YmZyYW1lX2xlbiA+IHJlbWFpbmluZykKLQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQkJLyogaWYgbGFzdCBzdWJmcmFtZSByZXVzZSBza2IgKi8KLQkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQotCQkJZnJhbWUgPSBza2I7Ci0JCWVsc2UgewotCQkJLyoKLQkJCSAqIEFsbG9jYXRlIGFuZCByZXNlcnZlIHR3byBieXRlcyBtb3JlIGZvciBwYXlsb2FkCi0JCQkgKiBhbGlnbm1lbnQgc2luY2Ugc2l6ZW9mKHN0cnVjdCBldGhoZHIpIGlzIDE0LgotCQkJICovCi0JCQlmcmFtZSA9IGRldl9hbGxvY19za2IoCi0JCQkJQUxJR04obG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCA0KSArCi0JCQkJc3ViZnJhbWVfbGVuICsgMik7Ci0KLQkJCWlmIChmcmFtZSA9PSBOVUxMKQotCQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCi0JCQlza2JfcmVzZXJ2ZShmcmFtZSwKLQkJCQkgICAgQUxJR04obG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCA0KSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpOwotCQkJbWVtY3B5KHNrYl9wdXQoZnJhbWUsIG50b2hzKGxlbikpLCBza2ItPmRhdGEsCi0JCQkJbnRvaHMobGVuKSk7Ci0KLQkJCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdWxsKHNrYiwgbnRvaHMobGVuKSArCi0JCQkJCQkJcGFkZGluZyk7Ci0JCQlpZiAoIWV0aCkgewotCQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOwotCQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCQkJfQotCQl9Ci0KLQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKGZyYW1lKTsKLQkJZnJhbWUtPmRldiA9IGRldjsKLQkJZnJhbWUtPnByaW9yaXR5ID0gc2tiLT5wcmlvcml0eTsKLQkJcngtPnNrYiA9IGZyYW1lOwotCi0JCXBheWxvYWQgPSBmcmFtZS0+ZGF0YTsKLQkJZXRoZXJ0eXBlID0gKHBheWxvYWRbNl0gPDwgOCkgfCBwYXlsb2FkWzddOwotCi0JCWlmIChsaWtlbHkoKGNvbXBhcmVfZXRoZXJfYWRkcihwYXlsb2FkLCByZmMxMDQyX2hlYWRlcikgPT0gMCAmJgotCQkJICAgIGV0aGVydHlwZSAhPSBFVEhfUF9BQVJQICYmIGV0aGVydHlwZSAhPSBFVEhfUF9JUFgpIHx8Ci0JCQkgICBjb21wYXJlX2V0aGVyX2FkZHIocGF5bG9hZCwKLQkJCQkJICAgICAgYnJpZGdlX3R1bm5lbF9oZWFkZXIpID09IDApKSB7Ci0JCQkvKiByZW1vdmUgUkZDMTA0MiBvciBCcmlkZ2UtVHVubmVsCi0JCQkgKiBlbmNhcHN1bGF0aW9uIGFuZCByZXBsYWNlIEV0aGVyVHlwZSAqLwotCQkJc2tiX3B1bGwoZnJhbWUsIDYpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIHNyYywgRVRIX0FMRU4pOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIGRzdCwgRVRIX0FMRU4pOwotCQl9IGVsc2UgewotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBzaXplb2YoX19iZTE2KSksCi0JCQkgICAgICAgJmxlbiwgc2l6ZW9mKF9fYmUxNikpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIHNyYywgRVRIX0FMRU4pOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIGRzdCwgRVRIX0FMRU4pOwotCQl9CisJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmZyYW1lX2xpc3QpKSB7CisJCXJ4LT5za2IgPSBfX3NrYl9kZXF1ZXVlKCZmcmFtZV9saXN0KTsKIAogCQlpZiAoIWllZWU4MDIxMV9mcmFtZV9hbGxvd2VkKHJ4LCBmYykpIHsKLQkJCWlmIChza2IgPT0gZnJhbWUpIC8qIGxhc3QgZnJhbWUgKi8KLQkJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOworCQkJZGV2X2tmcmVlX3NrYihyeC0+c2tiKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHJ4LT5za2ItPmxlbjsKIAogCQlpZWVlODAyMTFfZGVsaXZlcl9za2IocngpOwogCX0KQEAgLTE3MjEsNyArMTY0MCw3IEBACiAKIAkvKiBGcmFtZSBoYXMgcmVhY2hlZCBkZXN0aW5hdGlvbi4gIERvbid0IGZvcndhcmQgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwgaGRyLT5hZGRyMykgPT0gMCkKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwgaGRyLT5hZGRyMykgPT0gMCkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJbWVzaF9oZHItPnR0bC0tOwpAQCAtMTczOCwxMCArMTY1NywxMCBAQAogCiAJCQlpZiAoIWZ3ZF9za2IgJiYgbmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNsb25lIG1lc2ggZnJhbWVcbiIsCi0JCQkJCQkgICBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCQkJCSAgIHNkYXRhLT5uYW1lKTsKIAogCQkJZndkX2hkciA9ICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgZndkX3NrYi0+ZGF0YTsKLQkJCW1lbWNweShmd2RfaGRyLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShmd2RfaGRyLT5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihmd2Rfc2tiKTsKIAkJCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKQEAgLTE4NzAsNyArMTc4OSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CiAKLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgIT0gMCkgeworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkcikgIT0gMCkgewogCQkvKiBOb3QgdG8gb3duIHVuaWNhc3QgYWRkcmVzcyAqLwogCQlyZXR1cm47CiAJfQpAQCAtMTg5NCw3ICsxODEzLDcgQEAKIAlyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChyZXNwLCAwLCAyNCk7CiAJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOwotCW1lbWNweShyZXNwLT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkocmVzcC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShyZXNwLT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAJcmVzcC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKQEAgLTIwMjYsNiArMTk0NSw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCWllZWU4MDIxMV9yeF9yZXN1bHQgcnhzOwogCiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKQEAgLTIwMzMsNiArMTk1MywxMCBAQAogCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZChyeCwgbWdtdC0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlyeHMgPSBpZWVlODAyMTFfd29ya19yeF9tZ210KHJ4LT5zZGF0YSwgcngtPnNrYik7CisJaWYgKHJ4cyAhPSBSWF9DT05USU5VRSkKKwkJcmV0dXJuIHJ4czsKKwogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQlyZXR1cm4gaWVlZTgwMjExX21lc2hfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CiAKQEAgLTIxMzcsNyArMjA2MSw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiB8fApAQCAtMjI3NCw3ICsyMTk4LDcgQEAKIAkJaWYgKCFic3NpZCAmJiAhc2RhdGEtPnUubWdkLnVzZV80YWRkcikKIAkJCXJldHVybiAwOwogCQlpZiAoIW11bHRpY2FzdCAmJgotCQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT5kZXYtPmRldl9hZGRyLCBoZHItPmFkZHIxKSAhPSAwKSB7CisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLCBoZHItPmFkZHIxKSAhPSAwKSB7CiAJCQlpZiAoIShzZGF0YS0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMjI5MSw3ICsyMjE1LDcgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwogCQl9IGVsc2UgaWYgKCFtdWx0aWNhc3QgJiYKLQkJCSAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJCSAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsCiAJCQkJCSAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKIAkJCWlmICghKHNkYXRhLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQogCQkJCXJldHVybiAwOwpAQCAtMjMwOCw3ICsyMjMyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoIW11bHRpY2FzdCAmJgotCQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT5kZXYtPmRldl9hZGRyLAorCQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSkgIT0gMCkgewogCQkJaWYgKCEoc2RhdGEtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpCiAJCQkJcmV0dXJuIDA7CkBAIC0yMzE5LDExICsyMjQzLDExIEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWlmICghYnNzaWQpIHsKLQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwKIAkJCQkJICAgICAgIGhkci0+YWRkcjEpKQogCQkJCXJldHVybiAwOwogCQl9IGVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsCi0JCQkJCXNkYXRhLT5kZXYtPmRldl9hZGRyKSkgeworCQkJCQlzZGF0YS0+dmlmLmFkZHIpKSB7CiAJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTIzNjIsNiArMjI4Niw4IEBACiAJaW50IHByZXBhcmVzOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2JfbmV3OworCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOworCWJvb2wgZm91bmRfc3RhID0gZmFsc2U7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJbWVtc2V0KCZyeCwgMCwgc2l6ZW9mKHJ4KSk7CkBAIC0yMzc4LDY4ICsyMzA0LDc2IEBACiAJaWVlZTgwMjExX3BhcnNlX3FvcygmcngpOwogCWllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KCZyeCk7CiAKLQlyeC5zdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjIpOwotCWlmIChyeC5zdGEpCi0JCXJ4LnNkYXRhID0gcnguc3RhLT5zZGF0YTsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLT5hZGRyMiwgc3RhLCB0bXApIHsKKwkJCXJ4LnN0YSA9IHN0YTsKKwkJCWZvdW5kX3N0YSA9IHRydWU7CisJCQlyeC5zZGF0YSA9IHN0YS0+c2RhdGE7CiAKLQlpZiAocnguc2RhdGEgJiYgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7Ci0JCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMocnguc2RhdGEsICZyeCwgaGRyKTsKLQkJaWYgKHByZXBhcmVzKSB7CisJCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7CisJCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHJ4LnNkYXRhLCAmcngsIGhkcik7CisJCQlpZiAocHJlcGFyZXMpIHsKKwkJCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19NTUlDX0VSUk9SKSB7CisJCQkJCWlmIChyeC5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkKKwkJCQkJCWllZWU4MDIxMV9yeF9taWNoYWVsX21pY19yZXBvcnQoaGRyLCAmcngpOworCQkJCX0gZWxzZQorCQkJCQlwcmV2ID0gcnguc2RhdGE7CisJCQl9CisJCX0KKwl9CisJaWYgKCFmb3VuZF9zdGEpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiB8fAorCQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCWNvbnRpbnVlOworCisJCQlyeC5zdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGhkci0+YWRkcjIpOworCisJCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7CisJCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCAmcngsIGhkcik7CisKKwkJCWlmICghcHJlcGFyZXMpCisJCQkJY29udGludWU7CisKIAkJCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsKKwkJCQlyeC5zZGF0YSA9IHNkYXRhOwogCQkJCWlmIChyeC5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkKLQkJCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsICZyeCk7Ci0JCQl9IGVsc2UKLQkJCQlwcmV2ID0gcnguc2RhdGE7Ci0JCX0KLQl9IGVsc2UgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKKwkJCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsCisJCQkJCQkJCQkmcngpOworCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCi0JCQljb250aW51ZTsKKwkJCS8qCisJCQkgKiBmcmFtZSBpcyBkZXN0aW5lZCBmb3IgdGhpcyBpbnRlcmZhY2UsIGJ1dCBpZiBpdCdzCisJCQkgKiBub3QgYWxzbyBmb3IgdGhlIHByZXZpb3VzIG9uZSB3ZSBoYW5kbGUgdGhhdCBhZnRlcgorCQkJICogdGhlIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2gKKwkJCSAqLwogCi0JCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKLQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzZGF0YSwgJnJ4LCBoZHIpOworCQkJaWYgKCFwcmV2KSB7CisJCQkJcHJldiA9IHNkYXRhOworCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCWlmICghcHJlcGFyZXMpCi0JCQljb250aW51ZTsKKwkJCS8qCisJCQkgKiBmcmFtZSB3YXMgZGVzdGluZWQgZm9yIHRoZSBwcmV2aW91cyBpbnRlcmZhY2UKKwkJCSAqIHNvIGludm9rZSBSWCBoYW5kbGVycyBmb3IgaXQKKwkJCSAqLwogCi0JCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsKLQkJCXJ4LnNkYXRhID0gc2RhdGE7Ci0JCQlpZiAocnguZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpCi0JCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsICZyeCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0J3Mgbm90Ci0JCSAqIGFsc28gZm9yIHRoZSBwcmV2aW91cyBvbmUgd2UgaGFuZGxlIHRoYXQgYWZ0ZXIgdGhlCi0JCSAqIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2gKLQkJICovCi0KLQkJaWYgKCFwcmV2KSB7CisJCQlza2JfbmV3ID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghc2tiX25ldykgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNvcHkgIgorCQkJCQkgICAgICAgIm11bHRpY2FzdCBmcmFtZSBmb3IgJXNcbiIsCisJCQkJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksCisJCQkJCSAgICAgICBwcmV2LT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMocHJldiwgJnJ4LCBza2JfbmV3LCByYXRlKTsKIAkJCXByZXYgPSBzZGF0YTsKLQkJCWNvbnRpbnVlOwogCQl9Ci0KLQkJLyoKLQkJICogZnJhbWUgd2FzIGRlc3RpbmVkIGZvciB0aGUgcHJldmlvdXMgaW50ZXJmYWNlCi0JCSAqIHNvIGludm9rZSBSWCBoYW5kbGVycyBmb3IgaXQKLQkJICovCi0KLQkJc2tiX25ldyA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7Ci0JCWlmICghc2tiX25ldykgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBjb3B5ICIKLQkJCQkgICAgICAgIm11bHRpY2FzdCBmcmFtZSBmb3IgJXNcbiIsCi0JCQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwKLQkJCQkgICAgICAgcHJldi0+ZGV2LT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMocHJldiwgJnJ4LCBza2JfbmV3LCByYXRlKTsKLQkJcHJldiA9IHNkYXRhOwogCX0KIAlpZiAocHJldikKIAkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhwcmV2LCAmcngsIHNrYiwgcmF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCBmMWE0YzcxLi4zNjVmNDA5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTI5LDE2ICsyOSwxOSBAQAogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQogewotCXJldHVybiAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LAotCQkJCQlpZWVlODAyMTFfZ2V0X2NoYW5uZWwobG9jYWwtPmh3LndpcGh5LAotCQkJCQkJCSAgICAgIGZyZXEpLAotCQkJCQlic3NpZCwgc3NpZCwgc3NpZF9sZW4sCi0JCQkJCTAsIDApOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3M7CisKKwljYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksCisJCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwgZnJlcSksCisJCQkJYnNzaWQsIHNzaWQsIHNzaWRfbGVuLCAwLCAwKTsKKwlpZiAoIWNic3MpCisJCXJldHVybiBOVUxMOworCXJldHVybiAodm9pZCAqKWNic3MtPnByaXY7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKQogewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKWNic3M7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKIAogCWtmcmVlKGJzc19tZXNoX2lkKGJzcykpOwogCWtmcmVlKGJzc19tZXNoX2NmZyhic3MpKTsKQEAgLTQ3LDcgKzUwLDkgQEAKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7Ci0JY2ZnODAyMTFfcHV0X2Jzcygoc3RydWN0IGNmZzgwMjExX2JzcyAqKWJzcyk7CisJaWYgKCFic3MpCisJCXJldHVybjsKKwljZmc4MDIxMV9wdXRfYnNzKGNvbnRhaW5lcl9vZigodm9pZCAqKWJzcywgc3RydWN0IGNmZzgwMjExX2JzcywgcHJpdikpOwogfQogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCkBAIC01OSw2ICs2NCw3IEBACiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgYm9vbCBiZWFjb24pCiB7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCWludCBjbGVuOwogCXMzMiBzaWduYWwgPSAwOwpAQCAtNjgsMTMgKzc0LDE0IEBACiAJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCiAJCXNpZ25hbCA9IChyeF9zdGF0dXMtPnNpZ25hbCAqIDEwMCkgLyBsb2NhbC0+aHcubWF4X3NpZ25hbDsKIAotCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGNoYW5uZWwsCi0JCQkJCQltZ210LCBsZW4sIHNpZ25hbCwgR0ZQX0FUT01JQyk7CisJY2JzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBjaGFubmVsLAorCQkJCQkgbWdtdCwgbGVuLCBzaWduYWwsIEdGUF9BVE9NSUMpOwogCi0JaWYgKCFic3MpCisJaWYgKCFjYnNzKQogCQlyZXR1cm4gTlVMTDsKIAotCWJzcy0+Y2Jzcy5mcmVlX3ByaXYgPSBpZWVlODAyMTFfcnhfYnNzX2ZyZWU7CisJY2Jzcy0+ZnJlZV9wcml2ID0gaWVlZTgwMjExX3J4X2Jzc19mcmVlOworCWJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKIAogCS8qIHNhdmUgdGhlIEVSUCB2YWx1ZSBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBhdCBhc3NvY2lhdGlvbiB0aW1lICovCiAJaWYgKGVsZW1zLT5lcnBfaW5mbyAmJiBlbGVtcy0+ZXJwX2luZm9fbGVuID49IDEpIHsKQEAgLTE0Nyw3ICsxNTQsNyBAQAogCXByZXNwID0gaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpOwogCWlmIChwcmVzcCkgewogCQkvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLwotCQlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCQlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSkKIAkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKIAkJcHJlc3AgPSB0cnVlOwpAQCAtMjIwLDgyICsyMjcsOSBAQAogCXJldHVybiB0cnVlOwogfQogCi0vKgotICogaW5mb3JtIEFQIHRoYXQgd2Ugd2lsbCBnbyB0byBzbGVlcCBzbyB0aGF0IGl0IHdpbGwgYnVmZmVyIHRoZSBmcmFtZXMKLSAqIHdoaWxlIHdlIHNjYW4KLSAqLwotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCi0JbG9jYWwtPnNjYW5fcHNfZW5hYmxlZCA9IGZhbHNlOwotCi0JLyogRklYTUU6IHdoYXQgdG8gZG8gd2hlbiBsb2NhbC0+cHNwb2xsaW5nIGlzIHRydWU/ICovCi0KLQlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOwotCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKLQotCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7Ci0JCWxvY2FsLT5zY2FuX3BzX2VuYWJsZWQgPSB0cnVlOwotCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7Ci0JCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7Ci0JfQotCi0JaWYgKCEobG9jYWwtPnNjYW5fcHNfZW5hYmxlZCkgfHwKLQkgICAgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spKQotCQkvKgotCQkgKiBJZiBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCBubyBuZWVkIHRvIHNlbmQgYSBudWxsZnVuYwotCQkgKiBmcmFtZSBiZWNhdXNlIEFQIGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLiBCdXQgaWYgdGhlCi0JCSAqIGhhcmR3YXJlIGlzIGNyZWF0aW5nIHRoZSBudWxsZnVuYyBmcmFtZSBmb3IgcG93ZXIgc2F2ZQotCQkgKiBzdGF0dXMgKGllLiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgbm90Ci0JCSAqIGVuYWJsZWQpIGFuZCBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCB0aGUgZmlybXdhcmUganVzdAotCQkgKiBzZW50IGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyIHNhdmUgZGlzYWJsZWQuIFNvIHdlIG5lZWQKLQkJICogdG8gc2VuZCBhIG5ldyBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0gdGhlIEFQIHRoYXQgd2UKLQkJICogYXJlIGFnYWluIHNsZWVwaW5nLgotCQkgKi8KLQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKLX0KLQotLyogaW5mb3JtIEFQIHRoYXQgd2UgYXJlIGF3YWtlIGFnYWluLCB1bmxlc3MgcG93ZXIgc2F2ZSBpcyBlbmFibGVkICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCi0JaWYgKCFsb2NhbC0+cHNfc2RhdGEpCi0JCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7Ci0JZWxzZSBpZiAobG9jYWwtPnNjYW5fcHNfZW5hYmxlZCkgewotCQkvKgotCQkgKiBJbiAhSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGNhc2UgdGhlIGhhcmR3YXJlCi0JCSAqIHdpbGwgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHdpdGggdGhlIHBvd2Vyc2F2ZSBiaXQgc2V0Ci0JCSAqIGV2ZW4gdGhvdWdoIHRoZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLgotCQkgKiBUaGlzIGNvdWxkIGJlIGF2b2lkZWQgYnkgc2VuZGluZyBhIG51bGwgZnJhbWUgd2l0aCBwb3dlcgotCQkgKiBzYXZlIGJpdCBkaXNhYmxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIHBvd2VyIHNhdmUsIGJ1dAotCQkgKiB0aGlzIGRvZXNuJ3QgZ2FpbiBhbnl0aGluZy4KLQkJICoKLQkJICogV2hlbiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgZW5hYmxlZCwgbm8gbmVlZAotCQkgKiB0byBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgYmVjYXVzZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQKLQkJICogd2UgYXJlIHNsZWVwaW5nLCBsZXQncyBqdXN0IGVuYWJsZSBwb3dlciBzYXZlIG1vZGUgaW4KLQkJICogaGFyZHdhcmUuCi0JCSAqLwotCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKLQl9IGVsc2UgaWYgKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKLQkJLyoKLQkJICogSWYgSUVFRTgwMjExX0NPTkZfUFMgd2FzIG5vdCBzZXQgYW5kIHRoZSBkeW5hbWljX3BzX3RpbWVyCi0JCSAqIGhhZCBiZWVuIHJ1bm5pbmcgYmVmb3JlIGxlYXZpbmcgdGhlIG9wZXJhdGluZyBjaGFubmVsLAotCQkgKiByZXN0YXJ0IHRoZSB0aW1lciBub3cgYW5kIHNlbmQgYSBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0KLQkJICogdGhlIEFQIHRoYXQgd2UgYXJlIGF3YWtlLgotCQkgKi8KLQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKLQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7Ci0JfQotfQotCiB2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWJvb2wgd2FzX2h3X3NjYW47CiAKIAltdXRleF9sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwpAQCAtMzQ0LDI4ICsyNzgsNyBAQAogCiAJZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKLQkJCQlpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHNkYXRhKTsKLQkJCQluZXRpZl93YWtlX3F1ZXVlKHNkYXRhLT5kZXYpOwotCQkJfQotCQl9IGVsc2UKLQkJCW5ldGlmX3dha2VfcXVldWUoc2RhdGEtPmRldik7Ci0KLQkJLyogcmUtZW5hYmxlIGJlYWNvbmluZyAqLwotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCi0JCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKGxvY2FsLCB0cnVlKTsKIAogIGRvbmU6CiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKQEAgLTM3Nyw4ICsyOTAsNiBAQAogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFydF9zd19zY2FuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCiAJLyoKIAkgKiBIYXJkd2FyZS9kcml2ZXIgZG9lc24ndCBzdXBwb3J0IGh3X3NjYW4sIHNvIHVzZSBzb2Z0d2FyZQogCSAqIHNjYW5uaW5nIGluc3RlYWQuIEZpcnN0IHNlbmQgYSBudWxsZnVuYyBmcmFtZSB3aXRoIHBvd2VyIHNhdmUKQEAgLTM5NCwzMyArMzA1LDE1IEBACiAJICovCiAJZHJ2X3N3X3NjYW5fc3RhcnQobG9jYWwpOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQkvKiBkaXNhYmxlIGJlYWNvbmluZyAqLwotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCi0JCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKLQotCQkvKgotCQkgKiBvbmx5IGhhbmRsZSBub24tU1RBIGludGVyZmFjZXMgaGVyZSwgU1RBIGludGVyZmFjZXMKLQkJICogYXJlIGhhbmRsZWQgaW4gdGhlIHNjYW4gc3RhdGUgbWFjaGluZQotCQkgKi8KLQkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJbmV0aWZfc3RvcF9xdWV1ZShzZGF0YS0+ZGV2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9iZWFjb25pbmcobG9jYWwpOwogCiAJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fREVDSVNJT047CiAJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwogCisJZHJ2X2ZsdXNoKGxvY2FsLCBmYWxzZSk7CisKIAlpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7CiAKLQkvKiBUT0RPOiBzdGFydCBzY2FuIGFzIHNvb24gYXMgYWxsIG51bGxmdW5jIGZyYW1lcyBhcmUgQUNLZWQgKi8KIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKCZsb2NhbC0+aHcsCiAJCQkJICAgICAmbG9jYWwtPnNjYW5fd29yaywKIAkJCQkgICAgIElFRUU4MDIxMV9DSEFOTkVMX1RJTUUpOwpAQCAtNDMzLDcgKzMyNiw2IEBACiAJCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJaW50IHJjOwogCiAJaWYgKGxvY2FsLT5zY2FuX3JlcSkKQEAgLTQ2MywxMSArMzU1LDggQEAKIAlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzZGF0YTsKIAotCWlmIChyZXEgIT0gbG9jYWwtPmludF9zY2FuX3JlcSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICAhbGlzdF9lbXB0eSgmaWZtZ2QtPndvcmtfbGlzdCkpIHsKLQkJLyogYWN0dWFsbHkgd2FpdCBmb3IgdGhlIHdvcmsgaXQncyBkb2luZyB0byBmaW5pc2gvdGltZSBvdXQgKi8KLQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOworCWlmICghbGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkpIHsKKwkJLyogd2FpdCBmb3IgdGhlIHdvcmsgdG8gZmluaXNoL3RpbWUgb3V0ICovCiAJCXJldHVybiAwOwogCX0KIApAQCAtNTI2LDcgKzQxNSw3IEBACiAJLyogY2hlY2sgaWYgYXQgbGVhc3Qgb25lIFNUQSBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCAqLwogCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewpAQCAtNTY0LDU2ICs0NTMsMzUgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3N0YXRlX2xlYXZlX29wZXJfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJCSAgICB1bnNpZ25lZCBsb25nICpuZXh0X2RlbGF5KQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0JLyoKLQkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsIFNUQSBpbnRlcmZhY2VzCi0JICovCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoc2RhdGEtPmRldik7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCi0JCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24obG9jYWwpOwogCiAJX19zZXRfYml0KFNDQU5fT0ZGX0NIQU5ORUwsICZsb2NhbC0+c2Nhbm5pbmcpOwogCisJLyoKKwkgKiBXaGF0IGlmIHRoZSBudWxsZnVuYyBmcmFtZXMgZGlkbid0IGFycml2ZT8KKwkgKi8KKwlkcnZfZmx1c2gobG9jYWwsIGZhbHNlKTsKKwlpZiAobG9jYWwtPm9wcy0+Zmx1c2gpCisJCSpuZXh0X2RlbGF5ID0gMDsKKwllbHNlCisJCSpuZXh0X2RlbGF5ID0gSFogLyAxMDsKKwogCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhbm5lbCB0byBiZSBzY2FubmVkICovCi0JKm5leHRfZGVsYXkgPSBIWiAvIDEwOwogCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9lbnRlcl9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCiAJLyogc3dpdGNoIGJhY2sgdG8gdGhlIG9wZXJhdGluZyBjaGFubmVsICovCiAJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IE5VTEw7CiAJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOwogCiAJLyoKLQkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGJlaW5nIGJhY2sgYW5kIHJlc3RhcnQgYWxsIFNUQSBpbnRlcmZhY2VzCisJICogT25seSByZS1lbmFibGUgc3RhdGlvbiBtb2RlIGludGVyZmFjZSBub3c7IGJlYWNvbmluZyB3aWxsIGJlCisJICogcmUtZW5hYmxlZCBvbmNlIHRoZSBmdWxsIHNjYW4gaGFzIGJlZW4gY29tcGxldGVkLgogCSAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJY29udGludWU7Ci0KLQkJLyogVGVsbCBBUCB3ZSdyZSBiYWNrICovCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQotCQkJCWllZWU4MDIxMV9zY2FuX3BzX2Rpc2FibGUoc2RhdGEpOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShzZGF0YS0+ZGV2KTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfb2ZmY2hhbm5lbF9yZXR1cm4obG9jYWwsIGZhbHNlKTsKIAogCV9fY2xlYXJfYml0KFNDQU5fT0ZGX0NIQU5ORUwsICZsb2NhbC0+c2Nhbm5pbmcpOwogCkBAIC03MjcsNyArNTk1LDcgQEAKIAkvKgogCSAqIEF2b2lkIHJlLXNjaGVkdWxpbmcgd2hlbiB0aGUgc2RhdGEgaXMgZ29pbmcgYXdheS4KIAkgKi8KLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkgewogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKaW5kZXggYWE3NDNhOC4uNzczM2Y2NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCisrKyBiL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgotCQkJCSJtZWFzdXJlbWVudCByZXBvcnQgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkJCSJtZWFzdXJlbWVudCByZXBvcnQgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDMsNyArNDMsNyBAQAogCW1zcl9yZXBvcnQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobXNyX3JlcG9ydCwgMCwgMjQpOwogCW1lbWNweShtc3JfcmVwb3J0LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobXNyX3JlcG9ydC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1zcl9yZXBvcnQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobXNyX3JlcG9ydC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CiAJbXNyX3JlcG9ydC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJCUlFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCA3MWYzNzBkLi40N2RhNTUyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTAzLDEzICsxMDMsMTYgQEAKIH0KIAogLyogcHJvdGVjdGVkIGJ5IFJDVSAqLwotc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IHU4ICphZGRyKQorc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBjb25zdCB1OCAqYWRkcikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAogCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goYWRkcildKTsKIAl3aGlsZSAoc3RhKSB7Ci0JCWlmIChtZW1jbXAoc3RhLT5zdGEuYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCisJCSAgICBtZW1jbXAoc3RhLT5zdGEuYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCiAJCQlicmVhazsKIAkJc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0+aG5leHQpOwogCX0KQEAgLTM1Niw2ICszNTksNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CisJc3RydWN0IHN0YXRpb25faW5mbyBzaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCkBAIC0zNjQsMTIgKzM2OCwxMiBAQAogCSAqIHNvbWV0aGluZyBpbnNlcnRzIGEgU1RBIChvbiBvbmUgQ1BVKSB3aXRob3V0IGhvbGRpbmcgdGhlIFJUTkwKIAkgKiBhbmQgYW5vdGhlciBDUFUgdHVybnMgb2ZmIHRoZSBuZXQgZGV2aWNlLgogCSAqLwotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkpIHsKKwlpZiAodW5saWtlbHkoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkpIHsKIAkJZXJyID0gLUVORVRET1dOOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWlmIChXQVJOX09OKGNvbXBhcmVfZXRoZXJfYWRkcihzdGEtPnN0YS5hZGRyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgPT0gMCB8fAorCWlmIChXQVJOX09OKGNvbXBhcmVfZXRoZXJfYWRkcihzdGEtPnN0YS5hZGRyLCBzZGF0YS0+dmlmLmFkZHIpID09IDAgfHwKIAkJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHN0YS0+c3RhLmFkZHIpKSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMzc3LDcgKzM4MSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CiAJLyogY2hlY2sgaWYgU1RBIGV4aXN0cyBhbHJlYWR5ICovCi0JaWYgKHN0YV9pbmZvX2dldChsb2NhbCwgc3RhLT5zdGEuYWRkcikpIHsKKwlpZiAoc3RhX2luZm9fZ2V0KHNkYXRhLCBzdGEtPnN0YS5hZGRyKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIAkJZXJyID0gLUVFWElTVDsKIAkJZ290byBvdXRfZnJlZTsKQEAgLTM5NCw3ICszOTgsNyBAQAogCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCiAJCQkJCSAgICAgdS5hcCk7CiAKLQkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKKwkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsIHNkYXRhLCBTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKIAkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCX0KIApAQCAtNDA1LDYgKzQwOSwxMCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CiAKKwlzaW5mby5maWxsZWQgPSAwOworCXNpbmZvLmdlbmVyYXRpb24gPSBsb2NhbC0+c3RhX2dlbmVyYXRpb247CisJY2ZnODAyMTFfbmV3X3N0YShzZGF0YS0+ZGV2LCBzdGEtPnN0YS5hZGRyLCAmc2luZm8sIEdGUF9BVE9NSUMpOworCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAkvKgogCSAqIERlYnVnZnMgZW50cnkgYWRkaW5nIG1pZ2h0IHNsZWVwLCBzbyBzY2hlZHVsZSBwcm9jZXNzCkBAIC01MzQsNyArNTQyLDcgQEAKIAkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAogCQkJCQkgICAgIHUuYXApOwogCi0JCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9SRU1PVkUsCisJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9SRU1PVkUsCiAJCQkgICAgICAgJigqc3RhKS0+c3RhKTsKIAkJc2RhdGEgPSAoKnN0YSktPnNkYXRhOwogCX0KQEAgLTgyOCw3ICs4MzYsNyBAQAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGEtPmxhc3RfcnggKyBleHBfdGltZSkpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleHBpcmluZyBpbmFjdGl2ZSBTVEEgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIpOworCQkJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKICNlbmRpZgogCQkJX19zdGFfaW5mb191bmxpbmsoJnN0YSk7CiAJCQlpZiAoc3RhKQpAQCAtODQzLDExICs4NTEsMTIgQEAKIHN0cnVjdCBpZWVlODAyMTFfc3RhICppZWVlODAyMTFfZmluZF9zdGFfYnlfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgICBjb25zdCB1OCAqYWRkcikKIHsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHN0YV9pbmZvX2dldChod190b19sb2NhbChodyksIGFkZHIpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqbnh0OwogCi0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiAmc3RhLT5zdGE7CisJLyogSnVzdCByZXR1cm4gYSByYW5kb20gc3RhdGlvbiAuLi4gZmlyc3QgaW4gbGlzdCAuLi4gKi8KKwlmb3JfZWFjaF9zdGFfaW5mbyhod190b19sb2NhbChodyksIGFkZHIsIHN0YSwgbnh0KQorCQlyZXR1cm4gJnN0YS0+c3RhOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2h3KTsKIApAQCAtODcyLDcgKzg4MSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IHNlbnQsIGJ1ZmZlcmVkOwogCi0JZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FXQUtFLCAmc3RhLT5zdGEpOworCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9BV0FLRSwgJnN0YS0+c3RhKTsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCiAJCXN0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RhKTsKQEAgLTg4NSw3ICs4OTQsNyBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gYWlkICVkIHNlbmRpbmcgJWQgZmlsdGVyZWQvJWQgUFMgZnJhbWVzICIKLQkgICAgICAgInNpbmNlIFNUQSBub3Qgc2xlZXBpbmcgYW55bW9yZVxuIiwgc2RhdGEtPmRldi0+bmFtZSwKKwkgICAgICAgInNpbmNlIFNUQSBub3Qgc2xlZXBpbmcgYW55bW9yZVxuIiwgc2RhdGEtPm5hbWUsCiAJICAgICAgIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCwgc2VudCAtIGJ1ZmZlcmVkLCBidWZmZXJlZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KIH0KQEAgLTk0NCw3ICs5NTMsNyBAQAogCQkgKi8KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIHNlbnQgUFMgUG9sbCBldmVuICIKIAkJICAgICAgICJ0aG91Z2ggdGhlcmUgYXJlIG5vIGJ1ZmZlcmVkIGZyYW1lcyBmb3IgaXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggYjQ4MTBmNi4uYzgyMDgyMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTQwMyw5ICs0MDMsMzQgQEAKICNkZWZpbmUgU1RBX0lORk9fQ0xFQU5VUF9JTlRFUlZBTCAoMTAgKiBIWikKIAogLyoKLSAqIEdldCBhIFNUQSBpbmZvLCBtdXN0IGhhdmUgYmUgdW5kZXIgUkNVIHJlYWQgbG9jay4KKyAqIEdldCBhIFNUQSBpbmZvLCBtdXN0IGJlIHVuZGVyIFJDVSByZWFkIGxvY2suCiAgKi8KLXN0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCB1OCAqYWRkcik7CitzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgIGNvbnN0IHU4ICphZGRyKTsKKworc3RhdGljIGlubGluZQordm9pZCBmb3JfZWFjaF9zdGFfaW5mb190eXBlX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgY29uc3QgdTggKmFkZHIsCisJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqbnh0KQoreworfQorCisjZGVmaW5lIGZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBfYWRkciwgc3RhLCBueHQpIAkJCVwKKwlmb3IgKAkvKiBpbml0aWFsaXNlIGxvb3AgKi8JCQkJCVwKKwkJc3RhID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChfYWRkcildKSxcCisJCW54dCA9IHN0YSA/IHJjdV9kZXJlZmVyZW5jZShzdGEtPmhuZXh0KSA6IE5VTEw7CQlcCisJCS8qIHR5cGVjaGVjayAqLwkJCQkJCVwKKwkJZm9yX2VhY2hfc3RhX2luZm9fdHlwZV9jaGVjayhsb2NhbCwgKF9hZGRyKSwgc3RhLCBueHQpLAlcCisJCS8qIGNvbnRpbnVlIGNvbmRpdGlvbiAqLwkJCQlcCisJCXN0YTsJCQkJCQkJXAorCQkvKiBhZHZhbmNlIGxvb3AgKi8JCQkJCVwKKwkJc3RhID0gbnh0LAkJCQkJCVwKKwkJbnh0ID0gc3RhID8gcmN1X2RlcmVmZXJlbmNlKHN0YS0+aG5leHQpIDogTlVMTAkJXAorCSAgICAgKQkJCQkJCQkJXAorCS8qIGNvbXBhcmUgYWRkcmVzcyBhbmQgcnVuIGNvZGUgb25seSBpZiBpdCBtYXRjaGVzICovCQlcCisJaWYgKG1lbWNtcChzdGEtPnN0YS5hZGRyLCAoX2FkZHIpLCBFVEhfQUxFTikgPT0gMCkKKwogLyoKICAqIEdldCBTVEEgaW5mbyBieSBpbmRleCwgQlJPS0VOIQogICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKaW5kZXggZDc4ZjM2Yy4uMGViY2RkYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtMTM0LDYgKzEzNCw0MCBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX2ZyYW1lX2Fja2VkKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCisJaWYgKGllZWU4MDIxMV9pc19hY3Rpb24obWdtdC0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9IVCAmJgorCSAgICBtZ210LT51LmFjdGlvbi51Lmh0X3NtcHMuYWN0aW9uID09IFdMQU5fSFRfQUNUSU9OX1NNUFMpIHsKKwkJLyoKKwkJICogVGhpcyB1cGRhdGUgbG9va3MgcmFjeSwgYnV0IGlzbid0IC0tIGlmIHdlIGNvbWUKKwkJICogaGVyZSB3ZSd2ZSBkZWZpbml0ZWx5IGdvdCBhIHN0YXRpb24gdGhhdCB3ZSdyZQorCQkgKiB0YWxraW5nIHRvLCBhbmQgb24gYSBtYW5hZ2VkIGludGVyZmFjZSB0aGF0IGNhbgorCQkgKiBvbmx5IGJlIHRoZSBBUC4gQW5kIHRoZSBvbmx5IG90aGVyIHBsYWNlIHVwZGF0aW5nCisJCSAqIHRoaXMgdmFyaWFibGUgaXMgYmVmb3JlIHdlJ3JlIGFzc29jaWF0ZWQuCisJCSAqLworCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuaHRfc21wcy5zbXBzX2NvbnRyb2wpIHsKKwkJY2FzZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDOgorCQkJc3RhLT5zZGF0YS0+dS5tZ2QuYXBfc21wcyA9IElFRUU4MDIxMV9TTVBTX0RZTkFNSUM7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9TVEFUSUM6CisJCQlzdGEtPnNkYXRhLT51Lm1nZC5hcF9zbXBzID0gSUVFRTgwMjExX1NNUFNfU1RBVElDOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9IVF9TTVBTX0NPTlRST0xfRElTQUJMRUQ6CisJCWRlZmF1bHQ6IC8qIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UgZG9uJ3Qgc2VuZCB0aGF0ICovCisJCQlzdGEtPnNkYXRhLT51Lm1nZC5hcF9zbXBzID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCQkJYnJlYWs7CisJCX0KKworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPnJlY2FsY19zbXBzKTsKKwl9Cit9CisKIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKQEAgLTE0Niw3ICsxODAsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyICpydGhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcHJldl9kZXYgPSBOVUxMOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOwogCWludCByZXRyeV9jb3VudCA9IC0xLCBpOwogCWJvb2wgaW5qZWN0ZWQ7CiAKQEAgLTE2Niw5ICsyMDAsMTEgQEAKIAogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tpbmZvLT5iYW5kXTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CisJZm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIGhkci0+YWRkcjEsIHN0YSwgdG1wKSB7CisJCS8qIHNraXAgd3JvbmcgdmlydHVhbCBpbnRlcmZhY2UgKi8KKwkJaWYgKG1lbWNtcChoZHItPmFkZHIyLCBzdGEtPnNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pKQorCQkJY29udGludWU7CiAKLQlpZiAoc3RhKSB7CiAJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSAmJgogCQkgICAgdGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19TVEEpKSB7CiAJCQkvKgpAQCAtMjA4LDYgKzI0NCwxMCBAQAogCQlyYXRlX2NvbnRyb2xfdHhfc3RhdHVzKGxvY2FsLCBzYmFuZCwgc3RhLCBza2IpOwogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzdGEtPnNkYXRhLT52aWYpKQogCQkJaWVlZTgwMjExc191cGRhdGVfbWV0cmljKGxvY2FsLCBzdGEsIHNrYik7CisKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSAmJgorCQkgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSkKKwkJCWllZWU4MDIxMV9mcmFtZV9hY2tlZChzdGEsIHNrYik7CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0zMTEsNyArMzUxLDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKLQkJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09PS19GUkFNRVMpICYmCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGtpcC5jIGIvbmV0L21hYzgwMjExL3RraXAuYwppbmRleCA0OTIxZDcyLi5iNzM0NTRhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdGtpcC5jCisrKyBiL25ldC9tYWM4MDIxMS90a2lwLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlwMWtbM10gKz0gdGtpcFMocDFrWzJdIF4gZ2V0X3VuYWxpZ25lZF9sZTE2KHRrICsgMTIgKyBqKSk7CiAJCXAxa1s0XSArPSB0a2lwUyhwMWtbM10gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyAwICsgaikpICsgaTsKIAl9Ci0JY3R4LT5pbml0aWFsaXplZCA9IDE7CisJY3R4LT5zdGF0ZSA9IFRLSVBfU1RBVEVfUEhBU0UxX0RPTkU7CiB9CiAKIHN0YXRpYyB2b2lkIHRraXBfbWl4aW5nX3BoYXNlMihjb25zdCB1OCAqdGssIHN0cnVjdCB0a2lwX2N0eCAqY3R4LApAQCAtMTgzLDcgKzE4Myw3IEBACiAJLyogVXBkYXRlIHRoZSBwMWsgb25seSB3aGVuIHRoZSBpdjE2IGluIHRoZSBwYWNrZXQgd3JhcHMgYXJvdW5kLCB0aGlzCiAJICogbWlnaHQgb2NjdXIgYWZ0ZXIgdGhlIHdyYXAgYXJvdW5kIG9mIGl2MTYgaW4gdGhlIGtleSBpbiBjYXNlIG9mCiAJICogZnJhZ21lbnRlZCBwYWNrZXRzLiAqLwotCWlmIChpdjE2ID09IDAgfHwgIWN0eC0+aW5pdGlhbGl6ZWQpCisJaWYgKGl2MTYgPT0gMCB8fCBjdHgtPnN0YXRlID09IFRLSVBfU1RBVEVfTk9UX0lOSVQpCiAJCXRraXBfbWl4aW5nX3BoYXNlMSh0aywgY3R4LCBoZHItPmFkZHIyLCBpdjMyKTsKIAogCWlmICh0eXBlID09IElFRUU4MDIxMV9US0lQX1AxX0tFWSkgewpAQCAtMjA5LDcgKzIwOSw3IEBACiAJY29uc3QgdTggKnRrID0gJmtleS0+Y29uZi5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZXTsKIAogCS8qIENhbGN1bGF0ZSBwZXItcGFja2V0IGtleSAqLwotCWlmIChjdHgtPml2MTYgPT0gMCB8fCAhY3R4LT5pbml0aWFsaXplZCkKKwlpZiAoY3R4LT5pdjE2ID09IDAgfHwgY3R4LT5zdGF0ZSA9PSBUS0lQX1NUQVRFX05PVF9JTklUKQogCQl0a2lwX21peGluZ19waGFzZTEodGssIGN0eCwgdGEsIGN0eC0+aXYzMik7CiAKIAl0a2lwX21peGluZ19waGFzZTIodGssIGN0eCwgY3R4LT5pdjE2LCByYzRrZXkpOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJaWYgKChrZXlpZCA+PiA2KSAhPSBrZXktPmNvbmYua2V5aWR4KQogCQlyZXR1cm4gVEtJUF9ERUNSWVBUX0lOVkFMSURfS0VZSURYOwogCi0JaWYgKGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pbml0aWFsaXplZCAmJgorCWlmIChrZXktPnUudGtpcC5yeFtxdWV1ZV0uc3RhdGUgIT0gVEtJUF9TVEFURV9OT1RfSU5JVCAmJgogCSAgICAoaXYzMiA8IGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pdjMyIHx8CiAJICAgICAoaXYzMiA9PSBrZXktPnUudGtpcC5yeFtxdWV1ZV0uaXYzMiAmJgogCSAgICAgIGl2MTYgPD0ga2V5LT51LnRraXAucnhbcXVldWVdLml2MTYpKSkgewpAQCAtMjc1LDExICsyNzUsMTEgQEAKIAogCWlmIChvbmx5X2l2KSB7CiAJCXJlcyA9IFRLSVBfREVDUllQVF9PSzsKLQkJa2V5LT51LnRraXAucnhbcXVldWVdLmluaXRpYWxpemVkID0gMTsKKwkJa2V5LT51LnRraXAucnhbcXVldWVdLnN0YXRlID0gVEtJUF9TVEFURV9QSEFTRTFfSFdfVVBMT0FERUQ7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAoIWtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pbml0aWFsaXplZCB8fAorCWlmIChrZXktPnUudGtpcC5yeFtxdWV1ZV0uc3RhdGUgPT0gVEtJUF9TVEFURV9OT1RfSU5JVCB8fAogCSAgICBrZXktPnUudGtpcC5yeFtxdWV1ZV0uaXYzMiAhPSBpdjMyKSB7CiAJCS8qIElWMTYgd3JhcHBlZCBhcm91bmQgLSBwZXJmb3JtIFRLSVAgcGhhc2UgMSAqLwogCQl0a2lwX21peGluZ19waGFzZTEodGssICZrZXktPnUudGtpcC5yeFtxdWV1ZV0sIHRhLCBpdjMyKTsKQEAgLTI5OSwxOCArMjk5LDIwIEBACiAJCQlwcmludGsoIlxuIik7CiAJCX0KICNlbmRpZgotCQlpZiAoa2V5LT5sb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkgJiYKLQkJCWtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgewotCQkJc3RhdGljIGNvbnN0IHU4IGJjYXN0W0VUSF9BTEVOXSA9Ci0JCQkJezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwotCQkJY29uc3QgdTggKnN0YV9hZGRyID0ga2V5LT5zdGEtPnN0YS5hZGRyOworCX0KKwlpZiAoa2V5LT5sb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkgJiYKKwkgICAga2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFICYmCisJICAgIGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5zdGF0ZSAhPSBUS0lQX1NUQVRFX1BIQVNFMV9IV19VUExPQURFRCkgeworCQlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0KKwkJezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCQljb25zdCB1OCAqc3RhX2FkZHIgPSBrZXktPnN0YS0+c3RhLmFkZHI7CiAKLQkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihyYSkpCi0JCQkJc3RhX2FkZHIgPSBiY2FzdDsKKwkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHJhKSkKKwkJCXN0YV9hZGRyID0gYmNhc3Q7CiAKLQkJCWRydl91cGRhdGVfdGtpcF9rZXkoa2V5LT5sb2NhbCwgJmtleS0+Y29uZiwgc3RhX2FkZHIsCi0JCQkJCSAgICBpdjMyLCBrZXktPnUudGtpcC5yeFtxdWV1ZV0ucDFrKTsKLQkJfQorCQlkcnZfdXBkYXRlX3RraXBfa2V5KGtleS0+bG9jYWwsICZrZXktPmNvbmYsIHN0YV9hZGRyLAorCQkJCWl2MzIsIGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5wMWspOworCQlrZXktPnUudGtpcC5yeFtxdWV1ZV0uc3RhdGUgPSBUS0lQX1NUQVRFX1BIQVNFMV9IV19VUExPQURFRDsKIAl9CiAKIAl0a2lwX21peGluZ19waGFzZTIodGssICZrZXktPnUudGtpcC5yeFtxdWV1ZV0sIGl2MTYsIHJjNGtleSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDI3Y2VhZWYuLjdiYmE0OWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIGRhdGEgZnJhbWUgdG8gbm90ICIKIAkJCSAgICAgICAiYXNzb2NpYXRlZCBzdGF0aW9uICVwTVxuIiwKLQkJCSAgICAgICB0eC0+ZGV2LT5uYW1lLCBoZHItPmFkZHIxKTsKKwkJCSAgICAgICB0eC0+c2RhdGEtPm5hbWUsIGhkci0+YWRkcjEpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCiAJCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3Bfbm90X2Fzc29jKTsKIAkJCXJldHVybiBUWF9EUk9QOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQkMgVFggYnVmZmVyIGZ1bGwgLSBkcm9wcGluZyB0aGUgb2xkZXN0IGZyYW1lXG4iLAotCQkJICAgICAgIHR4LT5kZXYtPm5hbWUpOworCQkJICAgICAgIHR4LT5zZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAkJZGV2X2tmcmVlX3NrYihza2JfZGVxdWV1ZSgmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikpOwogCX0gZWxzZQpAQCAtMzkxLDcgKzM5MSw3IEBACiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIFRYICIKIAkJCQkgICAgICAgImJ1ZmZlciBmdWxsIC0gZHJvcHBpbmcgb2xkZXN0IGZyYW1lXG4iLAotCQkJCSAgICAgICB0eC0+ZGV2LT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKKwkJCQkgICAgICAgdHgtPnNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKIAkJCX0KICNlbmRpZgogCQkJZGV2X2tmcmVlX3NrYihvbGQpOwpAQCAtNDE2LDcgKzQxNiw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAllbHNlIGlmICh1bmxpa2VseShzdGFmbGFncyAmIFdMQU5fU1RBX1BTX1NUQSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIGluIFBTIG1vZGUsIGJ1dCBwc3BvbGwgIgotCQkgICAgICAgInNldCAtPiBzZW5kIGZyYW1lXG4iLCB0eC0+ZGV2LT5uYW1lLAorCQkgICAgICAgInNldCAtPiBzZW5kIGZyYW1lXG4iLCB0eC0+c2RhdGEtPm5hbWUsCiAJCSAgICAgICBzdGEtPnN0YS5hZGRyKTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KQEAgLTU0OSw3ICs1NDksNyBAQAogCQkgIiVzOiBEcm9wcGVkIGRhdGEgZnJhbWUgYXMgbm8gdXNhYmxlIGJpdHJhdGUgZm91bmQgd2hpbGUgIgogCQkgInNjYW5uaW5nIGFuZCBhc3NvY2lhdGVkLiBUYXJnZXQgc3RhdGlvbjogIgogCQkgIiVwTSBvbiAlZCBHSHogYmFuZFxuIiwKLQkJIHR4LT5kZXYtPm5hbWUsIGhkci0+YWRkcjEsCisJCSB0eC0+c2RhdGEtPm5hbWUsIGhkci0+YWRkcjEsCiAJCSB0eC0+Y2hhbm5lbC0+YmFuZCA/IDUgOiAyKSkKIAkJcmV0dXJuIFRYX0RST1A7CiAKQEAgLTEwMjEsNyArMTAyMSw2IEBACiAKIAltZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTsKIAl0eC0+c2tiID0gc2tiOwotCXR4LT5kZXYgPSBzZGF0YS0+ZGV2OyAvKiB1c2Ugb3JpZ2luYWwgaW50ZXJmYWNlICovCiAJdHgtPmxvY2FsID0gbG9jYWw7CiAJdHgtPnNkYXRhID0gc2RhdGE7CiAJdHgtPmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwpAQCAtMTA1NSw3ICsxMDU0LDcgQEAKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCXR4LT5zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtPnUudmxhbi5zdGEpOwogCWlmICghdHgtPnN0YSkKLQkJdHgtPnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CisJCXR4LT5zdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGhkci0+YWRkcjEpOwogCiAJaWYgKHR4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpIHsKQEAgLTE0NzQsMTEgKzE0NzMsMTEgQEAKIAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX3NkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsCiAJCQkJCQlsaXN0KSB7Ci0JCQkJaWYgKCFuZXRpZl9ydW5uaW5nKHRtcF9zZGF0YS0+ZGV2KSkKKwkJCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHRtcF9zZGF0YSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmICh0bXBfc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHRtcF9zZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHRtcF9zZGF0YS0+dmlmLmFkZHIsCiAJCQkJCQkgICAgICAgaGRyLT5hZGRyMikgPT0gMCkgewogCQkJCQlzZGF0YSA9IHRtcF9zZGF0YTsKIAkJCQkJYnJlYWs7CkBAIC0xNjQyLDcgKzE2NDEsNyBAQAogCQkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJCQkvKiBSQSBUQSBEQSBTQSAqLwogCQkJbWVtY3B5KGhkci5hZGRyMSwgc3RhLT5zdGEuYWRkciwgRVRIX0FMRU4pOwotCQkJbWVtY3B5KGhkci5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQkJbWVtY3B5KGhkci5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJCQltZW1jcHkoaGRyLmFkZHIzLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShoZHIuYWRkcjQsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCQloZHJsZW4gPSAzMDsKQEAgLTE2NTYsNyArMTY1NSw3IEBACiAJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyk7CiAJCS8qIERBIEJTU0lEIFNBICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwotCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIzLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKIAkJYnJlYWs7CkBAIC0xNjY0LDcgKzE2NjMsNyBAQAogCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJLyogUkEgVEEgREEgU0EgKi8KIAkJbWVtY3B5KGhkci5hZGRyMSwgc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCBFVEhfQUxFTik7Ci0JCW1lbWNweShoZHIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHI0LCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAzMDsKQEAgLTE2NzgsOCArMTY3Nyw4IEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIsCi0JCQkJCSAgc2tiLT5kYXRhICsgRVRIX0FMRU4pID09IDApIHsKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIEVUSF9BTEVOKSA9PSAwKSB7CiAJCQloZHJsZW4gPSBpZWVlODAyMTFfZmlsbF9tZXNoX2FkZHJlc3NlcygmaGRyLCAmZmMsCiAJCQkJCXNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgRVRIX0FMRU4pOwogCQkJbWVzaGhkcmxlbiA9IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoJm1lc2hfaGRyLApAQCAtMTcwOSw3ICsxNzA4LDcgQEAKIAkJCQl9CiAJCQl9CiAJCQloZHJsZW4gPSBpZWVlODAyMTFfZmlsbF9tZXNoX2FkZHJlc3NlcygmaGRyLCAmZmMsCi0JCQkJCW1lc2hfZGEsIGRldi0+ZGV2X2FkZHIpOworCQkJCQltZXNoX2RhLCBzZGF0YS0+dmlmLmFkZHIpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlpZiAoaXNfbWVzaF9tY2FzdCkKIAkJCQltZXNoaGRybGVuID0KQEAgLTE3MzQsNyArMTczMyw3IEBACiAJCWlmIChzZGF0YS0+dS5tZ2QudXNlXzRhZGRyICYmIGV0aGVydHlwZSAhPSBFVEhfUF9QQUUpIHsKIAkJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkJLyogUkEgVEEgREEgU0EgKi8KLQkJCW1lbWNweShoZHIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShoZHIuYWRkcjIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCQkJbWVtY3B5KGhkci5hZGRyMywgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCQltZW1jcHkoaGRyLmFkZHI0LCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwogCQkJaGRybGVuID0gMzA7CkBAIC0xNzY1LDkgKzE3NjQsOCBAQAogCSAqLwogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLmFkZHIxKSkgewogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLmFkZHIxKTsKLQkJLyogWFhYOiBpbiB0aGUgZnV0dXJlLCB1c2Ugc2RhdGEgdG8gbG9vayB1cCB0aGUgc3RhICovCi0JCWlmIChzdGEgJiYgc3RhLT5zZGF0YSA9PSBzZGF0YSkKKwkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBoZHIuYWRkcjEpOworCQlpZiAoc3RhKQogCQkJc3RhX2ZsYWdzID0gZ2V0X3N0YV9mbGFncyhzdGEpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CkBAIC0xNzg2LDcgKzE3ODQsNyBAQAogCQl1bmxpa2VseSghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLmFkZHIxKSAmJgogCQkgICAgICAhKHN0YV9mbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQpICYmCiAJCSAgICAgICEoZXRoZXJ0eXBlID09IEVUSF9QX1BBRSAmJgotCQkgICAgICAgY29tcGFyZV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIsCisJCSAgICAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLAogCQkJCQkgIHNrYi0+ZGF0YSArIEVUSF9BTEVOKSA9PSAwKSkpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtMTkyNiw3ICsxOTI0LDcgQEAKIAkJaWVlZTgwMjExX3R4KHNkYXRhLCBza2IsIHRydWUpOwogCX0gZWxzZSB7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBoZHItPmFkZHIxKTsKIAogCQlyZXQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgJnNrYiwgc3RhLCB0cnVlKTsKIAkJaWYgKHJldCAhPSBJRUVFODAyMTFfVFhfT0spCkBAIC0yMTUwLDggKzIxNDgsOCBAQAogCQltZ210LT5mcmFtZV9jb250cm9sID0KIAkJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAJCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9CiAJCQljcHVfdG9fbGUxNihzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQpOwogCQltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gMHgwOyAvKiAweDAgZm9yIE1QcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZGM3NjI2Ny4uN2UzODg1OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC00NjgsOCArNDY4LDggQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQlpdGVyYXRvcihkYXRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWl0ZXJhdG9yKGRhdGEsIHNkYXRhLT52aWYuYWRkciwKIAkJCQkgJnNkYXRhLT52aWYpOwogCX0KIApAQCAtNTAyLDggKzUwMiw4IEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJaXRlcmF0b3IoZGF0YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCQlpdGVyYXRvcihkYXRhLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQkJICZzZGF0YS0+dmlmKTsKIAl9CiAKQEAgLTg0OCw3ICs4NDgsNyBAQAogCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKQEAgLTg1OCw3ICs4NTgsNyBAQAogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOwogCW1lbWNweShtZ210LT5kYSwgYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoYXV0aF9hbGcpOwogCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOwpAQCAtODgxLDQzICs4ODEsODcgQEAKIAkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXU4ICpwb3MsICpzdXBwX3JhdGVzX2xlbiwgKmVzdXBwX3JhdGVzX2xlbiA9IE5VTEw7Ci0JaW50IGk7CisJdTggKnBvczsKKwlzaXplX3Qgb2Zmc2V0ID0gMCwgbm9mZnNldDsKKwlpbnQgc3VwcF9yYXRlc19sZW4sIGk7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CiAKIAlwb3MgPSBidWZmZXI7CiAKKwlzdXBwX3JhdGVzX2xlbiA9IG1pbl90KGludCwgc2JhbmQtPm5fYml0cmF0ZXMsIDgpOworCiAJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQlzdXBwX3JhdGVzX2xlbiA9IHBvczsKLQkqcG9zKysgPSAwOworCSpwb3MrKyA9IHN1cHBfcmF0ZXNfbGVuOwogCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykgeworCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJfQogCi0JCWlmIChlc3VwcF9yYXRlc19sZW4pIHsKLQkJCSplc3VwcF9yYXRlc19sZW4gKz0gMTsKLQkJfSBlbHNlIGlmICgqc3VwcF9yYXRlc19sZW4gPT0gOCkgewotCQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCQllc3VwcF9yYXRlc19sZW4gPSBwb3M7Ci0JCQkqcG9zKysgPSAxOwotCQl9IGVsc2UKLQkJCSpzdXBwX3JhdGVzX2xlbiArPSAxOworCS8qIGluc2VydCAicmVxdWVzdCBpbmZvcm1hdGlvbiIgaWYgaW4gY3VzdG9tIElFcyAqLworCWlmIChpZSAmJiBpZV9sZW4pIHsKKwkJc3RhdGljIGNvbnN0IHU4IGJlZm9yZV9leHRyYXRlc1tdID0geworCQkJV0xBTl9FSURfU1NJRCwKKwkJCVdMQU5fRUlEX1NVUFBfUkFURVMsCisJCQlXTEFOX0VJRF9SRVFVRVNULAorCQl9OworCQlub2Zmc2V0ID0gaWVlZTgwMjExX2llX3NwbGl0KGllLCBpZV9sZW4sCisJCQkJCSAgICAgYmVmb3JlX2V4dHJhdGVzLAorCQkJCQkgICAgIEFSUkFZX1NJWkUoYmVmb3JlX2V4dHJhdGVzKSwKKwkJCQkJICAgICBvZmZzZXQpOworCQltZW1jcHkocG9zLCBpZSArIG9mZnNldCwgbm9mZnNldCAtIG9mZnNldCk7CisJCXBvcyArPSBub2Zmc2V0IC0gb2Zmc2V0OworCQlvZmZzZXQgPSBub2Zmc2V0OworCX0KIAotCQkqcG9zKysgPSByYXRlLT5iaXRyYXRlIC8gNTsKKwlpZiAoc2JhbmQtPm5fYml0cmF0ZXMgPiBpKSB7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSBzYmFuZC0+bl9iaXRyYXRlcyAtIGk7CisKKwkJZm9yICg7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCQl9CisJfQorCisJLyogaW5zZXJ0IGN1c3RvbSBJRXMgdGhhdCBnbyBiZWZvcmUgSFQgKi8KKwlpZiAoaWUgJiYgaWVfbGVuKSB7CisJCXN0YXRpYyBjb25zdCB1OCBiZWZvcmVfaHRbXSA9IHsKKwkJCVdMQU5fRUlEX1NTSUQsCisJCQlXTEFOX0VJRF9TVVBQX1JBVEVTLAorCQkJV0xBTl9FSURfUkVRVUVTVCwKKwkJCVdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTLAorCQkJV0xBTl9FSURfRFNfUEFSQU1TLAorCQkJV0xBTl9FSURfU1VQUE9SVEVEX1JFR1VMQVRPUllfQ0xBU1NFUywKKwkJfTsKKwkJbm9mZnNldCA9IGllZWU4MDIxMV9pZV9zcGxpdChpZSwgaWVfbGVuLAorCQkJCQkgICAgIGJlZm9yZV9odCwgQVJSQVlfU0laRShiZWZvcmVfaHQpLAorCQkJCQkgICAgIG9mZnNldCk7CisJCW1lbWNweShwb3MsIGllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJcG9zICs9IG5vZmZzZXQgLSBvZmZzZXQ7CisJCW9mZnNldCA9IG5vZmZzZXQ7CiAJfQogCiAJaWYgKHNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7Ci0JCV9fbGUxNiB0bXAgPSBjcHVfdG9fbGUxNihzYmFuZC0+aHRfY2FwLmNhcCk7CisJCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKKwkJX19sZTE2IHRtcDsKKworCQlpZiAoaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHogJiYKKwkJICAgIHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CiAKIAkJKnBvcysrID0gV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKIAkJKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKIAkJbWVtc2V0KHBvcywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSk7CisJCXRtcCA9IGNwdV90b19sZTE2KGNhcCk7CiAJCW1lbWNweShwb3MsICZ0bXAsIHNpemVvZih1MTYpKTsKIAkJcG9zICs9IHNpemVvZih1MTYpOwotCQkvKiBUT0RPOiBuZWVkcyBhIGRlZmluZSBoZXJlIGZvciA8PCAyICovCiAJCSpwb3MrKyA9IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yIHwKLQkJCSAoc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8IDIpOworCQkJIChzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPDwKKwkJCQlJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZX1NISUZUKTsKIAkJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKIAkJcG9zICs9IHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcyk7CiAJCXBvcyArPSAyICsgNCArIDE7IC8qIGV4dCBpbmZvLCBCRiBjYXAsIGFudHNlbCAqLwpAQCAtOTI4LDkgKzk3MiwxMSBAQAogCSAqIHRoYXQgY2FsY3VsYXRlcyBsb2NhbC0+c2Nhbl9pZXNfbGVuLgogCSAqLwogCi0JaWYgKGllKSB7Ci0JCW1lbWNweShwb3MsIGllLCBpZV9sZW4pOwotCQlwb3MgKz0gaWVfbGVuOworCS8qIGFkZCBhbnkgcmVtYWluaW5nIGN1c3RvbSBJRXMgKi8KKwlpZiAoaWUgJiYgaWVfbGVuKSB7CisJCW5vZmZzZXQgPSBpZV9sZW47CisJCW1lbWNweShwb3MsIGllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJcG9zICs9IG5vZmZzZXQgLSBvZmZzZXQ7CiAJfQogCiAJcmV0dXJuIHBvcyAtIGJ1ZmZlcjsKQEAgLTk0OSw3ICs5OTUsNyBAQAogCQkJICAgIGllX2xlbik7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCi0JCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKQEAgLTk1OCw3ICsxMDA0LDcgQEAKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJaWYgKGRzdCkgewogCQltZW1jcHkobWdtdC0+ZGEsIGRzdCwgRVRIX0FMRU4pOwogCQltZW1jcHkobWdtdC0+YnNzaWQsIGRzdCwgRVRIX0FMRU4pOwpAQCAtMTAyOSw3ICsxMDc1LDYgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXM7CkBAIC0xMDYwLDEyICsxMTA1LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCiAJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiAmJgotCQkgICAgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgewotCQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKLQkJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKLQkJCXJlcyA9IGRydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCAmY29uZik7Ci0JCX0KKwkJICAgIGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCXJlcyA9IGRydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCAmc2RhdGEtPnZpZik7CiAJfQogCiAJLyogYWRkIFNUQXMgYmFjayAqLwpAQCAtMTA3OCw3ICsxMTE5LDcgQEAKIAkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAogCQkJCQkgICAgIHUuYXApOwogCi0JCQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfQURELAorCQkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsIHNkYXRhLCBTVEFfTk9USUZZX0FERCwKIAkJCQkgICAgICAgJnN0YS0+c3RhKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTExMDcsNyArMTE0OCw3IEBACiAJLyogRmluYWxseSBhbHNvIHJlY29uZmlndXJlIGFsbCB0aGUgQlNTIGluZm9ybWF0aW9uICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXUzMiBjaGFuZ2VkID0gfjA7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAkJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgpAQCAtMTEzNSw3ICsxMTc2LDcgQEAKIAogCS8qIGFkZCBiYWNrIGtleXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCi0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oaHcsCkBAIC0xMTgyLDMgKzEyMjMsMTMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfbWdkX3NtcHMoc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCwKKwkJCSAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlICpzbXBzX21vZGUpCit7CisJaWYgKGlmbWdkLT5hc3NvY2lhdGVkKSB7CisJCSpzbXBzX21vZGUgPSBpZm1nZC0+YXBfc21wczsKKworCQlpZiAoKnNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUMpIHsKKwkJCWlmIChpZm1nZC0+cG93ZXJzYXZlKQorCQkJCSpzbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19EWU5BTUlDOworCQkJZWxzZQorCQkJCSpzbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19PRkY7CisJCX0KKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogbXVzdCBob2xkIGlmbGlzdF9tdHggKi8KK3ZvaWQgaWVlZTgwMjExX3JlY2FsY19zbXBzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqZm9yc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKGZvcnNkYXRhKQorCQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmZvcnNkYXRhLT51Lm1nZC5tdHgpKTsKKworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmbG9jYWwtPmlmbGlzdF9tdHgpKTsKKworCS8qCisJICogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBpbXByb3ZlZCB0byBoYW5kbGUgbXVsdGlwbGUKKwkgKiBpbnRlcmZhY2VzIGJldHRlciwgYnV0IHJpZ2h0IG5vdyBpdCBtYWtlcyBhbnkKKwkgKiBub24tc3RhdGlvbiBpbnRlcmZhY2VzIGZvcmNlIFNNIFBTIHRvIGJlIHR1cm5lZAorCSAqIG9mZi4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0YXRpb24gaW50ZXJmYWNlcyBpdAorCSAqIGNvdWxkIGFsc28gdXNlIHRoZSBiZXN0IHBvc3NpYmxlIG1vZGUsIGUuZy4gaWYKKwkgKiBvbmUgaXMgaW4gc3RhdGljIGFuZCB0aGUgb3RoZXIgaW4gZHluYW1pYyB0aGVuCisJICogZHluYW1pYyBpcyBvay4KKwkgKi8KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJZ290byBzZXQ7CisJCWlmIChzZGF0YSAhPSBmb3JzZGF0YSkgeworCQkJLyoKKwkJCSAqIFRoaXMgbmVzdGVkIGlzIG9rIC0tIHdlIGFyZSBob2xkaW5nIHRoZSBpZmxpc3RfbXR4CisJCQkgKiBzbyBjYW4ndCBnZXQgaGVyZSB0d2ljZSBvciBzby4gQnV0IGl0J3MgcmVxdWlyZWQKKwkJCSAqIHNpbmNlIG5vcm1hbGx5IHdlIGFjcXVpcmUgaXQgZmlyc3QgYW5kIHRoZW4gdGhlCisJCQkgKiBpZmxpc3RfbXR4LgorCQkJICovCisJCQltdXRleF9sb2NrX25lc3RlZCgmc2RhdGEtPnUubWdkLm10eCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQkJY291bnQgKz0gY2hlY2tfbWdkX3NtcHMoJnNkYXRhLT51Lm1nZCwgJnNtcHNfbW9kZSk7CisJCQltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOworCQl9IGVsc2UKKwkJCWNvdW50ICs9IGNoZWNrX21nZF9zbXBzKCZzZGF0YS0+dS5tZ2QsICZzbXBzX21vZGUpOworCisJCWlmIChjb3VudCA+IDEpIHsKKwkJCXNtcHNfbW9kZSA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHNtcHNfbW9kZSA9PSBsb2NhbC0+c21wc19tb2RlKQorCQlyZXR1cm47CisKKyBzZXQ6CisJbG9jYWwtPnNtcHNfbW9kZSA9IHNtcHNfbW9kZTsKKwkvKiBjaGFuZ2VkIGZsYWcgaXMgYXV0by1kZXRlY3RlZCBmb3IgdGhpcyAqLworCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOworfQorCitzdGF0aWMgYm9vbCBpZWVlODAyMTFfaWRfaW5fbGlzdChjb25zdCB1OCAqaWRzLCBpbnQgbl9pZHMsIHU4IGlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5faWRzOyBpKyspCisJCWlmIChpZHNbaV0gPT0gaWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2llX3NwbGl0IC0gc3BsaXQgYW4gSUUgYnVmZmVyIGFjY29yZGluZyB0byBvcmRlcmluZworICoKKyAqIEBpZXM6IHRoZSBJRSBidWZmZXIKKyAqIEBpZWxlbjogdGhlIGxlbmd0aCBvZiB0aGUgSUUgYnVmZmVyCisgKiBAaWRzOiBhbiBhcnJheSB3aXRoIGVsZW1lbnQgSURzIHRoYXQgYXJlIGFsbG93ZWQgYmVmb3JlCisgKgl0aGUgc3BsaXQKKyAqIEBuX2lkczogdGhlIHNpemUgb2YgdGhlIGVsZW1lbnQgSUQgYXJyYXkKKyAqIEBvZmZzZXQ6IG9mZnNldCB3aGVyZSB0byBzdGFydCBzcGxpdHRpbmcgaW4gdGhlIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIGFuIElFIGJ1ZmZlciBieSB1cGRhdGluZyB0aGUgQG9mZnNldAorICogdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBidWZmZXIgc2hvdWxkIGJlCisgKiBzcGxpdC4KKyAqCisgKiBJdCBhc3N1bWVzIHRoYXQgdGhlIGdpdmVuIElFIGJ1ZmZlciBpcyB3ZWxsLWZvcm1lZCwgdGhpcworICogaGFzIHRvIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGNhbGxlciEKKyAqCisgKiBJdCBhbHNvIGFzc3VtZXMgdGhhdCB0aGUgSUVzIGluIHRoZSBidWZmZXIgYXJlIG9yZGVyZWQKKyAqIGNvcnJlY3RseSwgaWYgbm90IHRoZSByZXN1bHQgb2YgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdAorICogYmUgb3JkZXJlZCBjb3JyZWN0bHkgZWl0aGVyLCBpLmUuIGl0IGRvZXMgbm8gcmVvcmRlcmluZy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBuZXh0IHBhcnQgb2YgdGhlCisgKiBidWZmZXIgc3RhcnRzLCB3aGljaCBtYXkgYmUgQGllbGVuIGlmIHRoZSBlbnRpcmUgKHJlbWFpbmRlcikKKyAqIG9mIHRoZSBidWZmZXIgc2hvdWxkIGJlIHVzZWQuCisgKi8KK3NpemVfdCBpZWVlODAyMTFfaWVfc3BsaXQoY29uc3QgdTggKmllcywgc2l6ZV90IGllbGVuLAorCQkJICBjb25zdCB1OCAqaWRzLCBpbnQgbl9pZHMsIHNpemVfdCBvZmZzZXQpCit7CisJc2l6ZV90IHBvcyA9IG9mZnNldDsKKworCXdoaWxlIChwb3MgPCBpZWxlbiAmJiBpZWVlODAyMTFfaWRfaW5fbGlzdChpZHMsIG5faWRzLCBpZXNbcG9zXSkpCisJCXBvcyArPSAyICsgaWVzW3BvcyArIDFdOworCisJcmV0dXJuIHBvczsKK30KKworc2l6ZV90IGllZWU4MDIxMV9pZV9zcGxpdF92ZW5kb3IoY29uc3QgdTggKmllcywgc2l6ZV90IGllbGVuLCBzaXplX3Qgb2Zmc2V0KQoreworCXNpemVfdCBwb3MgPSBvZmZzZXQ7CisKKwl3aGlsZSAocG9zIDwgaWVsZW4gJiYgaWVzW3Bvc10gIT0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKQorCQlwb3MgKz0gMiArIGllc1twb3MgKyAxXTsKKworCXJldHVybiBwb3M7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd29yay5jIGIvbmV0L21hYzgwMjExL3dvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg5ZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3dvcmsuYwpAQCAtMCwwICsxLDEwODYgQEAKKy8qCisgKiBtYWM4MDIxMSB3b3JrIGltcGxlbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDksIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgInJhdGUuaCIKKworI2RlZmluZSBJRUVFODAyMTFfQVVUSF9USU1FT1VUIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9BVVRIX01BWF9UUklFUyAzCisjZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMgMworI2RlZmluZSBJRUVFODAyMTFfTUFYX1BST0JFX1RSSUVTIDUKKworZW51bSB3b3JrX2FjdGlvbiB7CisJV09SS19BQ1RfTk9ORSwKKwlXT1JLX0FDVF9USU1FT1VULAorCVdPUktfQUNUX0RPTkUsCit9OworCisKKy8qIHV0aWxzICovCitzdGF0aWMgaW5saW5lIHZvaWQgQVNTRVJUX1dPUktfTVRYKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmbG9jYWwtPndvcmtfbXR4KSk7Cit9CisKKy8qCisgKiBXZSBjYW4gaGF2ZSBtdWx0aXBsZSB3b3JrIGl0ZW1zIChhbmQgY29ubmVjdGlvbiBwcm9iaW5nKQorICogc2NoZWR1bGluZyB0aGlzIHRpbWVyLCBidXQgd2UgbmVlZCB0byB0YWtlIGNhcmUgdG8gb25seQorICogcmVzY2hlZHVsZSBpdCB3aGVuIGl0IHNob3VsZCBmaXJlIF9lYXJsaWVyXyB0aGFuIGl0IHdhcworICogYXNrZWQgZm9yIGJlZm9yZSwgb3IgaWYgaXQncyBub3QgcGVuZGluZyByaWdodCBub3cuIFRoaXMKKyAqIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdC4gTm90ZSB0aGF0IGl0IHRoZW4gaXMgcmVxdWlyZWQgdG8KKyAqIHJ1biB0aGlzIGZ1bmN0aW9uIGZvciBhbGwgdGltZW91dHMgYWZ0ZXIgdGhlIGZpcnN0IG9uZQorICogaGFzIGhhcHBlbmVkIC0tIHRoZSB3b3JrIHRoYXQgcnVucyBmcm9tIHRoaXMgdGltZXIgd2lsbAorICogZG8gdGhhdC4KKyAqLworc3RhdGljIHZvaWQgcnVuX2FnYWluKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJQVNTRVJUX1dPUktfTVRYKGxvY2FsKTsKKworCWlmICghdGltZXJfcGVuZGluZygmbG9jYWwtPndvcmtfdGltZXIpIHx8CisJICAgIHRpbWVfYmVmb3JlKHRpbWVvdXQsIGxvY2FsLT53b3JrX3RpbWVyLmV4cGlyZXMpKQorCQltb2RfdGltZXIoJmxvY2FsLT53b3JrX3RpbWVyLCB0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgd29ya19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3ayA9CisJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaWVlZTgwMjExX3dvcmssIHJjdV9oZWFkKTsKKworCWtmcmVlKHdrKTsKK30KKwordm9pZCBmcmVlX3dvcmsoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwljYWxsX3JjdSgmd2stPnJjdV9oZWFkLCB3b3JrX2ZyZWVfcmN1KTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhjb25zdCB1OCAqc3VwcF9yYXRlcywgaW50IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJCSAgICAgIHUzMiAqcmF0ZXMpCit7CisJaW50IGksIGosIGNvdW50OworCSpyYXRlcyA9IDA7CisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCByYXRlID0gKHN1cHBfcmF0ZXNbaV0gJiAweDdGKSAqIDU7CisKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gcmF0ZSkgeworCQkJCSpyYXRlcyB8PSBCSVQoaik7CisJCQkJY291bnQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIGZyYW1lIHNlbmRpbmcgZnVuY3Rpb25zICovCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hZGRfaHRfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmh0X2luZm9faWUsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbzsKKwl1OCAqcG9zOworCXUzMiBmbGFncyA9IGNoYW5uZWwtPmZsYWdzOworCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKKwlfX2xlMTYgdG1wOworCisJaWYgKCFzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJcmV0dXJuOworCisJaWYgKCFodF9pbmZvX2llKQorCQlyZXR1cm47CisKKwlpZiAoaHRfaW5mb19pZVsxXSA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pKQorCQlyZXR1cm47CisKKwlodF9pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pbmZvX2llICsgMik7CisKKwkvKiBkZXRlcm1pbmUgY2FwYWJpbGl0eSBmbGFncyAqLworCisJaWYgKGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6ICYmCisJICAgIHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwl9CisKKwlzd2l0Y2ggKGh0X2luZm8tPmh0X3BhcmFtICYgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSB7CisJY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRToKKwkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0MFBMVVMpIHsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1c6CisJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykgeworCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogc2V0IFNNIFBTIG1vZGUgcHJvcGVybHkgKi8KKwljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU01fUFM7CisJc3dpdGNoIChzbXBzKSB7CisJY2FzZSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM6CisJY2FzZSBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM6CisJCVdBUk5fT04oMSk7CisJY2FzZSBJRUVFODAyMTFfU01QU19PRkY6CisJCWNhcCB8PSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCA8PAorCQkJSUVFRTgwMjExX0hUX0NBUF9TTV9QU19TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU01QU19TVEFUSUM6CisJCWNhcCB8PSBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUMgPDwKKwkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfRFlOQU1JQzoKKwkJY2FwIHw9IFdMQU5fSFRfQ0FQX1NNX1BTX0RZTkFNSUMgPDwKKwkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7CisJCWJyZWFrOworCX0KKworCS8qIHJlc2VydmUgYW5kIGZpbGwgSUUgKi8KKworCXBvcyA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApICsgMik7CisJKnBvcysrID0gV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKKwkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOworCW1lbXNldChwb3MsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOworCisJLyogY2FwYWJpbGl0eSBmbGFncyAqLworCXRtcCA9IGNwdV90b19sZTE2KGNhcCk7CisJbWVtY3B5KHBvcywgJnRtcCwgc2l6ZW9mKHUxNikpOworCXBvcyArPSBzaXplb2YodTE2KTsKKworCS8qIEFNUERVIHBhcmFtZXRlcnMgKi8KKwkqcG9zKysgPSBzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvciB8CisJCSAoc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8CisJCQlJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZX1NISUZUKTsKKworCS8qIE1DUyBzZXQgKi8KKwltZW1jcHkocG9zLCAmc2JhbmQtPmh0X2NhcC5tY3MsIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCXBvcyArPSBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpOworCisJLyogZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCisJcG9zICs9IHNpemVvZihfX2xlMTYpOworCisJLyogQkYgY2FwYWJpbGl0aWVzICovCisJcG9zICs9IHNpemVvZihfX2xlMzIpOworCisJLyogYW50ZW5uYSBzZWxlY3Rpb24gKi8KKwlwb3MgKz0gc2l6ZW9mKHU4KTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvczsKKwljb25zdCB1OCAqaWVzOworCXNpemVfdCBvZmZzZXQgPSAwLCBub2Zmc2V0OworCWludCBpLCBsZW4sIGNvdW50LCByYXRlc19sZW4sIHN1cHBfcmF0ZXNfbGVuOworCXUxNiBjYXBhYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1MzIgcmF0ZXMgPSAwOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW3drLT5jaGFuLT5iYW5kXTsKKworCS8qCisJICogR2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgdGhlIEFQIGFzCisJICogc29tZSBBUHMgZG9uJ3QgbGlrZSBnZXR0aW5nIGEgc3VwZXJzZXQgb2YgdGhlaXIgcmF0ZXMKKwkgKiBpbiB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCAoZS5nLiBELUxpbmsgREFQIDEzNTMgaW4KKwkgKiBiLW9ubHkgbW9kZSkuLi4KKwkgKi8KKwlyYXRlc19sZW4gPSBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyh3ay0+YXNzb2Muc3VwcF9yYXRlcywKKwkJCQkJICAgICAgIHdrLT5hc3NvYy5zdXBwX3JhdGVzX2xlbiwKKwkJCQkJICAgICAgIHNiYW5kLCAmcmF0ZXMpOworCisJc2tiID0gYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCisJCQlzaXplb2YoKm1nbXQpICsgLyogYml0IHRvbyBtdWNoIGJ1dCBkb2Vzbid0IG1hdHRlciAqLworCQkJMiArIHdrLT5hc3NvYy5zc2lkX2xlbiArIC8qIFNTSUQgKi8KKwkJCTQgKyByYXRlc19sZW4gKyAvKiAoZXh0ZW5kZWQpIHJhdGVzICovCisJCQk0ICsgLyogcG93ZXIgY2FwYWJpbGl0eSAqLworCQkJMiArIDIgKiBzYmFuZC0+bl9jaGFubmVscyArIC8qIHN1cHBvcnRlZCBjaGFubmVscyAqLworCQkJMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkgKyAvKiBIVCAqLworCQkJd2stPmllX2xlbiArIC8qIGV4dHJhIElFcyAqLworCQkJOSwgLyogV01NICovCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGFzc29jICIKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKworCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKKwkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUU7CisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1BSRUFNQkxFX0lOQ0FQQUJMRSkpCisJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CisJfQorCisJaWYgKHdrLT5hc3NvYy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCisJaWYgKCh3ay0+YXNzb2MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgorCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQpKQorCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVDsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIHdrLT5maWx0ZXJfdGEsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgd2stPmZpbHRlcl90YSwgRVRIX0FMRU4pOworCisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIod2stPmFzc29jLnByZXZfYnNzaWQpKSB7CisJCXNrYl9wdXQoc2tiLCAxMCk7CisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk7CisJCW1nbXQtPnUucmVhc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKKwkJbWdtdC0+dS5yZWFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQorCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7CisJCW1lbWNweShtZ210LT51LnJlYXNzb2NfcmVxLmN1cnJlbnRfYXAsIHdrLT5hc3NvYy5wcmV2X2Jzc2lkLAorCQkgICAgICAgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCXNrYl9wdXQoc2tiLCA0KTsKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk7CisJCW1nbXQtPnUuYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CisJCW1nbXQtPnUuYXNzb2NfcmVxLmxpc3Rlbl9pbnRlcnZhbCA9CisJCQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYubGlzdGVuX2ludGVydmFsKTsKKwl9CisKKwkvKiBTU0lEICovCisJaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyB3ay0+YXNzb2Muc3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gd2stPmFzc29jLnNzaWRfbGVuOworCW1lbWNweShwb3MsIHdrLT5hc3NvYy5zc2lkLCB3ay0+YXNzb2Muc3NpZF9sZW4pOworCisJLyogYWRkIGFsbCByYXRlcyB3aGljaCB3ZXJlIG1hcmtlZCB0byBiZSB1c2VkIGFib3ZlICovCisJc3VwcF9yYXRlc19sZW4gPSByYXRlc19sZW47CisJaWYgKHN1cHBfcmF0ZXNfbGVuID4gOCkKKwkJc3VwcF9yYXRlc19sZW4gPSA4OworCisJbGVuID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJcG9zID0gc2tiX3B1dChza2IsIHN1cHBfcmF0ZXNfbGVuICsgMik7CisJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwkqcG9zKysgPSBzdXBwX3JhdGVzX2xlbjsKKworCWNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAoQklUKGkpICYgcmF0ZXMpIHsKKwkJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJCQlpZiAoKytjb3VudCA9PSA4KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJhdGVzX2xlbiA+IGNvdW50KSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCByYXRlc19sZW4gLSBjb3VudCArIDIpOworCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKKwkJKnBvcysrID0gcmF0ZXNfbGVuIC0gY291bnQ7CisKKwkJZm9yIChpKys7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQlpZiAoQklUKGkpICYgcmF0ZXMpIHsKKwkJCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChjYXBhYiAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSB7CisJCS8qIDEuIHBvd2VyIGNhcGFiaWxpdGllcyAqLworCQlwb3MgPSBza2JfcHV0KHNrYiwgNCk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX1BXUl9DQVBBQklMSVRZOworCQkqcG9zKysgPSAyOworCQkqcG9zKysgPSAwOyAvKiBtaW4gdHggcG93ZXIgKi8KKwkJKnBvcysrID0gd2stPmNoYW4tPm1heF9wb3dlcjsgLyogbWF4IHR4IHBvd2VyICovCisKKwkJLyogMi4gc3VwcG9ydGVkIGNoYW5uZWxzICovCisJCS8qIFRPRE86IGdldCB0aGlzIGluIHJlZyBkb21haW4gZm9ybWF0ICovCisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICogc2JhbmQtPm5fY2hhbm5lbHMgKyAyKTsKKwkJKnBvcysrID0gV0xBTl9FSURfU1VQUE9SVEVEX0NIQU5ORUxTOworCQkqcG9zKysgPSAyICogc2JhbmQtPm5fY2hhbm5lbHM7CisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJCXNiYW5kLT5jaGFubmVsc1tpXS5jZW50ZXJfZnJlcSk7CisJCQkqcG9zKysgPSAxOyAvKiBvbmUgY2hhbm5lbCBpbiB0aGUgc3ViYmFuZCovCisJCX0KKwl9CisKKwkvKiBpZiBwcmVzZW50LCBhZGQgYW55IGN1c3RvbSBJRXMgdGhhdCBnbyBiZWZvcmUgSFQgKi8KKwlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKKwkJc3RhdGljIGNvbnN0IHU4IGJlZm9yZV9odFtdID0geworCQkJV0xBTl9FSURfU1NJRCwKKwkJCVdMQU5fRUlEX1NVUFBfUkFURVMsCisJCQlXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUywKKwkJCVdMQU5fRUlEX1BXUl9DQVBBQklMSVRZLAorCQkJV0xBTl9FSURfU1VQUE9SVEVEX0NIQU5ORUxTLAorCQkJV0xBTl9FSURfUlNOLAorCQkJV0xBTl9FSURfUU9TX0NBUEEsCisJCQlXTEFOX0VJRF9SUk1fRU5BQkxFRF9DQVBBQklMSVRJRVMsCisJCQlXTEFOX0VJRF9NT0JJTElUWV9ET01BSU4sCisJCQlXTEFOX0VJRF9TVVBQT1JURURfUkVHVUxBVE9SWV9DTEFTU0VTLAorCQl9OworCQlub2Zmc2V0ID0gaWVlZTgwMjExX2llX3NwbGl0KHdrLT5pZSwgd2stPmllX2xlbiwKKwkJCQkJICAgICBiZWZvcmVfaHQsIEFSUkFZX1NJWkUoYmVmb3JlX2h0KSwKKwkJCQkJICAgICBvZmZzZXQpOworCQlwb3MgPSBza2JfcHV0KHNrYiwgbm9mZnNldCAtIG9mZnNldCk7CisJCW1lbWNweShwb3MsIHdrLT5pZSArIG9mZnNldCwgbm9mZnNldCAtIG9mZnNldCk7CisJCW9mZnNldCA9IG5vZmZzZXQ7CisJfQorCisJaWYgKHdrLT5hc3NvYy51c2VfMTFuICYmIHdrLT5hc3NvYy53bW1fdXNlZCAmJgorCSAgICBsb2NhbC0+aHcucXVldWVzID49IDQpCisJCWllZWU4MDIxMV9hZGRfaHRfaWUoc2tiLCB3ay0+YXNzb2MuaHRfaW5mb3JtYXRpb25faWUsCisJCQkJICAgIHNiYW5kLCB3ay0+Y2hhbiwgd2stPmFzc29jLnNtcHMpOworCisJLyogaWYgcHJlc2VudCwgYWRkIGFueSBjdXN0b20gbm9uLXZlbmRvciBJRXMgdGhhdCBnbyBhZnRlciBIVCAqLworCWlmICh3ay0+aWVfbGVuICYmIHdrLT5pZSkgeworCQlub2Zmc2V0ID0gaWVlZTgwMjExX2llX3NwbGl0X3ZlbmRvcih3ay0+aWUsIHdrLT5pZV9sZW4sCisJCQkJCQkgICAgb2Zmc2V0KTsKKwkJcG9zID0gc2tiX3B1dChza2IsIG5vZmZzZXQgLSBvZmZzZXQpOworCQltZW1jcHkocG9zLCB3ay0+aWUgKyBvZmZzZXQsIG5vZmZzZXQgLSBvZmZzZXQpOworCQlvZmZzZXQgPSBub2Zmc2V0OworCX0KKworCWlmICh3ay0+YXNzb2Mud21tX3VzZWQgJiYgbG9jYWwtPmh3LnF1ZXVlcyA+PSA0KSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKKwkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOworCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KKwkJKnBvcysrID0gMHgwMDsgLyogTWljcm9zb2Z0IE9VSSAwMDo1MDpGMiAqLworCQkqcG9zKysgPSAweDUwOworCQkqcG9zKysgPSAweGYyOworCQkqcG9zKysgPSAyOyAvKiBXTUUgKi8KKwkJKnBvcysrID0gMDsgLyogV01FIGluZm8gKi8KKwkJKnBvcysrID0gMTsgLyogV01FIHZlciAqLworCQkqcG9zKysgPSAwOworCX0KKworCS8qIGFkZCBhbnkgcmVtYWluaW5nIGN1c3RvbSAoaS5lLiB2ZW5kb3Igc3BlY2lmaWMgaGVyZSkgSUVzICovCisJaWYgKHdrLT5pZV9sZW4gJiYgd2stPmllKSB7CisJCW5vZmZzZXQgPSB3ay0+aWVfbGVuOworCQlwb3MgPSBza2JfcHV0KHNrYiwgbm9mZnNldCAtIG9mZnNldCk7CisJCW1lbWNweShwb3MsIHdrLT5pZSArIG9mZnNldCwgbm9mZnNldCAtIG9mZnNldCk7CisJfQorCisJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfYXV0aF9ic3Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOworCXUxNiBjYXBhX3ZhbCA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisKKwlpZiAod2stPnByb2JlX2F1dGgucHJpdmFjeSkKKwkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisKKwljYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIHdrLT5jaGFuLCB3ay0+ZmlsdGVyX3RhLAorCQkJCXdrLT5wcm9iZV9hdXRoLnNzaWQsIHdrLT5wcm9iZV9hdXRoLnNzaWRfbGVuLAorCQkJCVdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKKwkJCQljYXBhX3ZhbCk7CisJaWYgKCFjYnNzKQorCQlyZXR1cm47CisKKwljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgY2Jzcyk7CisJY2ZnODAyMTFfcHV0X2JzcyhjYnNzKTsKK30KKworc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwl3ay0+cHJvYmVfYXV0aC50cmllcysrOworCWlmICh3ay0+cHJvYmVfYXV0aC50cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byAlcE0gdGltZWQgb3V0XG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEpOworCisJCS8qCisJCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQorCQkgKiBic3Mgc3RydWN0IGZvciB0aGF0IEFQLgorCQkgKi8KKwkJaWVlZTgwMjExX3JlbW92ZV9hdXRoX2Jzcyhsb2NhbCwgd2spOworCisJCXJldHVybiBXT1JLX0FDVF9USU1FT1VUOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvICVwTSAodHJ5ICVkKVxuIiwKKwkJCXNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+cHJvYmVfYXV0aC50cmllcyk7CisKKwkvKgorCSAqIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCisJICogd2lsbCBub3QgYW5zd2VyIHRvIGRpcmVjdCBwYWNrZXQgaW4gdW5hc3NvY2lhdGVkIHN0YXRlLgorCSAqLworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgd2stPnByb2JlX2F1dGguc3NpZCwKKwkJCQkgd2stPnByb2JlX2F1dGguc3NpZF9sZW4sIE5VTEwsIDApOworCisJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVDsKKwlydW5fYWdhaW4obG9jYWwsIHdrLT50aW1lb3V0KTsKKworCXJldHVybiBXT1JLX0FDVF9OT05FOworfQorCisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gd2stPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJd2stPnByb2JlX2F1dGgudHJpZXMrKzsKKwlpZiAod2stPnByb2JlX2F1dGgudHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGlvbiB3aXRoICVwTSIKKwkJICAgICAgICIgdGltZWQgb3V0XG4iLCBzZGF0YS0+bmFtZSwgd2stPmZpbHRlcl90YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCisJCSAqLworCQlpZWVlODAyMTFfcmVtb3ZlX2F1dGhfYnNzKGxvY2FsLCB3ayk7CisKKwkJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCAlcE0gKHRyeSAlZClcbiIsCisJICAgICAgIHNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+cHJvYmVfYXV0aC50cmllcyk7CisKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCB3ay0+cHJvYmVfYXV0aC5hbGdvcml0aG0sIHdrLT5pZSwKKwkJCSAgICB3ay0+aWVfbGVuLCB3ay0+ZmlsdGVyX3RhLCBOVUxMLCAwLCAwKTsKKwl3ay0+cHJvYmVfYXV0aC50cmFuc2FjdGlvbiA9IDI7CisKKwl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUOworCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCisJcmV0dXJuIFdPUktfQUNUX05PTkU7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gd2stPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJd2stPmFzc29jLnRyaWVzKys7CisJaWYgKHdrLT5hc3NvYy50cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoICVwTSIKKwkJICAgICAgICIgdGltZWQgb3V0XG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEpOworCisJCS8qCisJCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQorCQkgKiBic3Mgc3RydWN0IGZvciB0aGF0IEFQLgorCQkgKi8KKwkJaWYgKHdrLT5hc3NvYy5ic3MpCisJCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgd2stPmFzc29jLmJzcyk7CisKKwkJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCAlcE0gKHRyeSAlZClcbiIsCisJICAgICAgIHNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+YXNzb2MudHJpZXMpOworCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhLCB3ayk7CisKKwl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVDsKKwlydW5fYWdhaW4obG9jYWwsIHdrLT50aW1lb3V0KTsKKworCXJldHVybiBXT1JLX0FDVF9OT05FOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbF90aW1lb3V0KHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJLyoKKwkgKiBGaXJzdCB0aW1lIHdlIHJ1biwgZG8gbm90aGluZyAtLSB0aGUgZ2VuZXJpYyBjb2RlIHdpbGwKKwkgKiBoYXZlIHN3aXRjaGVkIHRvIHRoZSByaWdodCBjaGFubmVsIGV0Yy4KKwkgKi8KKwlpZiAoIXdrLT5yZW1haW4uc3RhcnRlZCkgeworCQl3ay0+cmVtYWluLnN0YXJ0ZWQgPSB0cnVlOworCQl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHdrLT5yZW1haW4uZHVyYXRpb24pOworCisJCWNmZzgwMjExX3JlYWR5X29uX2NoYW5uZWwod2stPnNkYXRhLT5kZXYsICh1NjQpd2ssIHdrLT5jaGFuLAorCQkJCQkgIHdrLT5jaGFuX3R5cGUsIHdrLT5yZW1haW4uZHVyYXRpb24sCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisJfQorCisJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKKwl1OCAqcG9zOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJcG9zID0gbWdtdC0+dS5hdXRoLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCWlmICghZWxlbXMuY2hhbGxlbmdlKQorCQlyZXR1cm47CisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgd2stPnByb2JlX2F1dGguYWxnb3JpdGhtLAorCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAorCQkJICAgIHdrLT5maWx0ZXJfdGEsIHdrLT5wcm9iZV9hdXRoLmtleSwKKwkJCSAgICB3ay0+cHJvYmVfYXV0aC5rZXlfbGVuLCB3ay0+cHJvYmVfYXV0aC5rZXlfaWR4KTsKKwl3ay0+cHJvYmVfYXV0aC50cmFuc2FjdGlvbiA9IDQ7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQoreworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CisKKwlpZiAod2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfQVVUSCkKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwlpZiAobGVuIDwgMjQgKyA2KQorCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKworCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKKwlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKKworCWlmIChhdXRoX2FsZyAhPSB3ay0+cHJvYmVfYXV0aC5hbGdvcml0aG0gfHwKKwkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSB3ay0+cHJvYmVfYXV0aC50cmFuc2FjdGlvbikKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVwTSBkZW5pZWQgYXV0aGVudGljYXRpb24gKHN0YXR1cyAlZClcbiIsCisJCSAgICAgICB3ay0+c2RhdGEtPm5hbWUsIG1nbXQtPnNhLCBzdGF0dXNfY29kZSk7CisJCXJldHVybiBXT1JLX0FDVF9ET05FOworCX0KKworCXN3aXRjaCAod2stPnByb2JlX2F1dGguYWxnb3JpdGhtKSB7CisJY2FzZSBXTEFOX0FVVEhfT1BFTjoKKwljYXNlIFdMQU5fQVVUSF9MRUFQOgorCWNhc2UgV0xBTl9BVVRIX0ZUOgorCQlicmVhazsKKwljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgorCQlpZiAod2stPnByb2JlX2F1dGgudHJhbnNhY3Rpb24gIT0gNCkgeworCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHdrLCBtZ210LCBsZW4pOworCQkJLyogbmVlZCBhbm90aGVyIGZyYW1lICovCisJCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZWRcbiIsIHdrLT5zZGF0YS0+bmFtZSk7CisJcmV0dXJuIFdPUktfQUNUX0RPTkU7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCisJCQkgICAgIGJvb2wgcmVhc3NvYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwl1MTYgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZDsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKwl1OCAqcG9zOworCisJLyoKKwkgKiBBc3NvY1Jlc3AgYW5kIFJlYXNzb2NSZXNwIGhhdmUgaWRlbnRpY2FsIHN0cnVjdHVyZSwgc28gcHJvY2VzcyBib3RoCisJICogb2YgdGhlbSBpbiB0aGlzIGZ1bmN0aW9uLgorCSAqLworCisJaWYgKGxlbiA8IDI0ICsgNikKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwljYXBhYl9pbmZvID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmNhcGFiX2luZm8pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLnN0YXR1c19jb2RlKTsKKwlhaWQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuYWlkKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggJXNzc29jUmVzcCBmcm9tICVwTSAoY2FwYWI9MHgleCAiCisJICAgICAgICJzdGF0dXM9JWQgYWlkPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCisJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOworCisJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCisJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgeworCQl1MzIgdHUsIG1zOworCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOworCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXBNIHJlamVjdGVkIGFzc29jaWF0aW9uIHRlbXBvcmFyaWx5OyAiCisJCSAgICAgICAiY29tZWJhY2sgZHVyYXRpb24gJXUgVFUgKCV1IG1zKVxuIiwKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5zYSwgdHUsIG1zKTsKKwkJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcyk7CisJCWlmIChtcyA+IElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKQorCQkJcnVuX2FnYWluKGxvY2FsLCB3ay0+dGltZW91dCk7CisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCX0KKworCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVwTSBkZW5pZWQgYXNzb2NpYXRpb24gKGNvZGU9JWQpXG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIG1nbXQtPnNhLCBzdGF0dXNfY29kZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIHNkYXRhLT5uYW1lKTsKKworCXJldHVybiBXT1JLX0FDVF9ET05FOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gd2stPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXNpemVfdCBiYXNlbGVuOworCisJQVNTRVJUX1dPUktfTVRYKGxvY2FsKTsKKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLCBzZGF0YS0+bmFtZSk7CisJcmV0dXJuIFdPUktfQUNUX0RPTkU7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV93b3JrX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKwllbnVtIHdvcmtfYWN0aW9uIHJtYSA9IFdPUktfQUNUX05PTkU7CisJdTE2IGZjOworCisJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKKworCQlzd2l0Y2ggKHdrLT50eXBlKSB7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOgorCQljYXNlIElFRUU4MDIxMV9XT1JLX0FVVEg6CisJCWNhc2UgSUVFRTgwMjExX1dPUktfQVNTT0M6CisJCQlic3NpZCA9IHdrLT5maWx0ZXJfdGE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogQmVmb3JlIHF1ZXVpbmcsIHdlIGFscmVhZHkgdmVyaWZpZWQgbWdtdC0+c2EsCisJCSAqIHNvIHRoaXMgaXMgbmVlZGVkIGp1c3QgZm9yIG1hdGNoaW5nLgorCQkgKi8KKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgbWdtdC0+YnNzaWQpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHdrLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJCQkgICByeF9zdGF0dXMpOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHdrLCBtZ210LCBza2ItPmxlbik7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKKwkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aod2ssIG1nbXQsCisJCQkJCQkJICAgc2tiLT5sZW4sIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHdrLCBtZ210LAorCQkJCQkJCSAgIHNrYi0+bGVuLCB0cnVlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKKwkJfQorCQkvKgorCQkgKiBXZSd2ZSBwcm9jZXNzZWQgdGhpcyBmcmFtZSBmb3IgdGhhdCB3b3JrLCBzbyBpdCBjYW4ndAorCQkgKiBiZWxvbmcgdG8gYW5vdGhlciB3b3JrIHN0cnVjdC4KKwkJICogTkI6IHRoaXMgaXMgYWxzbyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgZm9yICdybWEnIQorCQkgKi8KKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChybWEpIHsKKwljYXNlIFdPUktfQUNUX05PTkU6CisJCWJyZWFrOworCWNhc2UgV09SS19BQ1RfRE9ORToKKwkJbGlzdF9kZWxfcmN1KCZ3ay0+bGlzdCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwl9CisKKwltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisKKwlpZiAocm1hICE9IFdPUktfQUNUX0RPTkUpCisJCWdvdG8gb3V0OworCisJc3dpdGNoICh3ay0+ZG9uZSh3aywgc2tiKSkgeworCWNhc2UgV09SS19ET05FX0RFU1RST1k6CisJCWZyZWVfd29yayh3ayk7CisJCWJyZWFrOworCWNhc2UgV09SS19ET05FX1JFUVVFVUU6CisJCXN5bmNocm9uaXplX3JjdSgpOworCQl3ay0+c3RhcnRlZCA9IGZhbHNlOyAvKiByZXN0YXJ0ICovCisJCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJCWxpc3RfYWRkX3RhaWwoJndrLT5saXN0LCAmbG9jYWwtPndvcmtfbGlzdCk7CisJCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKwl9CisKKyBvdXQ6CisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV93b3JrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9ICh2b2lkICopIGRhdGE7CisKKwlpZiAobG9jYWwtPnF1aWVzY2luZykKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfd29ya193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCB3b3JrX3dvcmspOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywgKnRtcDsKKwlMSVNUX0hFQUQoZnJlZV93b3JrKTsKKwllbnVtIHdvcmtfYWN0aW9uIHJtYTsKKwlib29sIHJlbWFpbl9vZmZfY2hhbm5lbCA9IGZhbHNlOworCisJaWYgKGxvY2FsLT5zY2FubmluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBpZWVlODAyMTFfcXVldWVfd29yaygpIHNob3VsZCBoYXZlIHBpY2tlZCB1cCBtb3N0IGNhc2VzLAorCSAqIGhlcmUgd2UnbGwgcGljayB0aGUgdGhlIHJlc3QuCisJICovCisJaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwgIndvcmsgc2NoZWR1bGVkIHdoaWxlIGdvaW5nIHRvIHN1c3BlbmRcbiIpKQorCQlyZXR1cm47CisKKwkvKiBmaXJzdCBwcm9jZXNzIGZyYW1lcyB0byBhdm9pZCB0aW1pbmcgb3V0IHdoaWxlIGEgZnJhbWUgaXMgcGVuZGluZyAqLworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmxvY2FsLT53b3JrX3NrYl9xdWV1ZSkpKQorCQlpZWVlODAyMTFfd29ya19yeF9xdWV1ZWRfbWdtdChsb2NhbCwgc2tiKTsKKworCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdrLCB0bXAsICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCS8qIG1hcmsgd29yayBhcyBzdGFydGVkIGlmIGl0J3Mgb24gdGhlIGN1cnJlbnQgb2ZmLWNoYW5uZWwgKi8KKwkJaWYgKCF3ay0+c3RhcnRlZCAmJiBsb2NhbC0+dG1wX2NoYW5uZWwgJiYKKwkJICAgIHdrLT5jaGFuID09IGxvY2FsLT50bXBfY2hhbm5lbCAmJgorCQkgICAgd2stPmNoYW5fdHlwZSA9PSBsb2NhbC0+dG1wX2NoYW5uZWxfdHlwZSkgeworCQkJd2stPnN0YXJ0ZWQgPSB0cnVlOworCQl9CisKKwkJaWYgKCF3ay0+c3RhcnRlZCAmJiAhbG9jYWwtPnRtcF9jaGFubmVsKSB7CisJCQkvKgorCQkJICogVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyBieSBsZWF2aW5nIHRoZQorCQkJICoJIHN0YXRpb24gdmlmcyBpbiBhd2FrZSBtb2RlIGlmIHRoZXkKKwkJCSAqCSBoYXBwZW4gdG8gYmUgb24gdGhlIHNhbWUgY2hhbm5lbCBhcworCQkJICoJIHRoZSByZXF1ZXN0ZWQgY2hhbm5lbAorCQkJICovCisJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX2JlYWNvbmluZyhsb2NhbCk7CisJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24obG9jYWwpOworCisJCQlsb2NhbC0+dG1wX2NoYW5uZWwgPSB3ay0+Y2hhbjsKKwkJCWxvY2FsLT50bXBfY2hhbm5lbF90eXBlID0gd2stPmNoYW5fdHlwZTsKKwkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOworCQkJd2stPnN0YXJ0ZWQgPSB0cnVlOworCQkJd2stPnRpbWVvdXQgPSBqaWZmaWVzOworCQl9CisKKwkJLyogZG9uJ3QgdHJ5IHRvIHdvcmsgd2l0aCBpdGVtcyB0aGF0IGFyZW4ndCBzdGFydGVkICovCisJCWlmICghd2stPnN0YXJ0ZWQpCisJCQljb250aW51ZTsKKworCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKHdrLT50aW1lb3V0KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgd29yayBpdGVtIGlzbid0IHN1cHBvc2VkIHRvIGJlIHdvcmtlZCBvbgorCQkJICogcmlnaHQgbm93LCBidXQgdGFrZSBjYXJlIHRvIGFkanVzdCB0aGUgdGltZXIKKwkJCSAqIHByb3Blcmx5LgorCQkJICovCisJCQlydW5fYWdhaW4obG9jYWwsIHdrLT50aW1lb3V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoICh3ay0+dHlwZSkgeworCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKKwkJCS8qIG5vdGhpbmcgKi8KKwkJCXJtYSA9IFdPUktfQUNUX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfV09SS19BQk9SVDoKKwkJCXJtYSA9IFdPUktfQUNUX1RJTUVPVVQ7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfRElSRUNUX1BST0JFOgorCQkJcm1hID0gaWVlZTgwMjExX2RpcmVjdF9wcm9iZSh3ayk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfV09SS19BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0ZSh3ayk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfV09SS19BU1NPQzoKKwkJCXJtYSA9IGllZWU4MDIxMV9hc3NvY2lhdGUod2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfUkVNQUlOX09OX0NIQU5ORUw6CisJCQlybWEgPSBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfdGltZW91dCh3ayk7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocm1hKSB7CisJCWNhc2UgV09SS19BQ1RfTk9ORToKKwkJCS8qIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgdGltZW91dCAqLworCQkJcnVuX2FnYWluKGxvY2FsLCB3ay0+dGltZW91dCk7CisJCQlicmVhazsKKwkJY2FzZSBXT1JLX0FDVF9USU1FT1VUOgorCQkJbGlzdF9kZWxfcmN1KCZ3ay0+bGlzdCk7CisJCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmZyZWVfd29yayk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICghd2stPnN0YXJ0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHdrLT5jaGFuICE9IGxvY2FsLT50bXBfY2hhbm5lbCkKKwkJCWNvbnRpbnVlOworCQlpZiAod2stPmNoYW5fdHlwZSAhPSBsb2NhbC0+dG1wX2NoYW5uZWxfdHlwZSkKKwkJCWNvbnRpbnVlOworCQlyZW1haW5fb2ZmX2NoYW5uZWwgPSB0cnVlOworCX0KKworCWlmICghcmVtYWluX29mZl9jaGFubmVsICYmIGxvY2FsLT50bXBfY2hhbm5lbCkgeworCQlsb2NhbC0+dG1wX2NoYW5uZWwgPSBOVUxMOworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKKwkJaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKGxvY2FsLCB0cnVlKTsKKwkJLyogZ2l2ZSBjb25uZWN0aW9uIHNvbWUgdGltZSB0byBicmVhdGhlICovCisJCXJ1bl9hZ2Fpbihsb2NhbCwgamlmZmllcyArIEhaLzIpOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZsb2NhbC0+d29ya19saXN0KSAmJiBsb2NhbC0+c2Nhbl9yZXEpCisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoJmxvY2FsLT5odywKKwkJCQkJICAgICAmbG9jYWwtPnNjYW5fd29yaywKKwkJCQkJICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDApKTsKKworCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKworCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2ssIHRtcCwgJmZyZWVfd29yaywgbGlzdCkgeworCQl3ay0+ZG9uZSh3aywgTlVMTCk7CisJCWxpc3RfZGVsKCZ3ay0+bGlzdCk7CisJCWtmcmVlKHdrKTsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExX2FkZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisKKwlpZiAoV0FSTl9PTighd2stPmNoYW4pKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTighd2stPnNkYXRhKSkKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oIXdrLT5kb25lKSkKKwkJcmV0dXJuOworCisJd2stPnN0YXJ0ZWQgPSBmYWxzZTsKKworCWxvY2FsID0gd2stPnNkYXRhLT5sb2NhbDsKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCWxpc3RfYWRkX3RhaWwoJndrLT5saXN0LCAmbG9jYWwtPndvcmtfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOworfQorCit2b2lkIGllZWU4MDIxMV93b3JrX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPndvcmtfbXR4KTsKKwlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPndvcmtfbGlzdCk7CisJc2V0dXBfdGltZXIoJmxvY2FsLT53b3JrX3RpbWVyLCBpZWVlODAyMTFfd29ya190aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKWxvY2FsKTsKKwlJTklUX1dPUksoJmxvY2FsLT53b3JrX3dvcmssIGllZWU4MDIxMV93b3JrX3dvcmspOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT53b3JrX3NrYl9xdWV1ZSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKworCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdrLT5zZGF0YSAhPSBzZGF0YSkKKwkJCWNvbnRpbnVlOworCQl3ay0+dHlwZSA9IElFRUU4MDIxMV9XT1JLX0FCT1JUOworCQl3ay0+c3RhcnRlZCA9IHRydWU7CisJCXdrLT50aW1lb3V0ID0gamlmZmllczsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJLyogcnVuIGNsZWFudXBzIGV0Yy4gKi8KKwlpZWVlODAyMTFfd29ya193b3JrKCZsb2NhbC0+d29ya193b3JrKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT53b3JrX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdrLT5zZGF0YSAhPSBzZGF0YSkKKwkJCWNvbnRpbnVlOworCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworfQorCitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV93b3JrX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJdTE2IGZjOworCisJaWYgKHNrYi0+bGVuIDwgMjQpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHdrLCAmbG9jYWwtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoc2RhdGEgIT0gd2stPnNkYXRhKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIod2stPmZpbHRlcl90YSwgbWdtdC0+c2EpKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIod2stPmZpbHRlcl90YSwgbWdtdC0+YnNzaWQpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKKwkJCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+d29ya19za2JfcXVldWUsIHNrYik7CisJCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPndvcmtfd29yayk7CisJCQlyZXR1cm4gUlhfUVVFVUVEOworCQl9CisJfQorCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQorCitzdGF0aWMgZW51bSB3b3JrX2RvbmVfcmVzdWx0IGllZWU4MDIxMV9yZW1haW5fZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwkvKgorCSAqIFdlIGFyZSBkb25lIHNlcnZpbmcgdGhlIHJlbWFpbi1vbi1jaGFubmVsIGNvbW1hbmQuCisJICovCisJY2ZnODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZCh3ay0+c2RhdGEtPmRldiwgKHU2NCl3aywKKwkJCQkJICAgd2stPmNoYW4sIHdrLT5jaGFuX3R5cGUsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCisJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworfQorCitpbnQgaWVlZTgwMjExX3drX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHU2NCAqY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisKKwl3ayA9IGt6YWxsb2Moc2l6ZW9mKCp3ayksIEdGUF9LRVJORUwpOworCWlmICghd2spCisJCXJldHVybiAtRU5PTUVNOworCisJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19SRU1BSU5fT05fQ0hBTk5FTDsKKwl3ay0+Y2hhbiA9IGNoYW47CisJd2stPmNoYW5fdHlwZSA9IGNoYW5uZWxfdHlwZTsKKwl3ay0+c2RhdGEgPSBzZGF0YTsKKwl3ay0+ZG9uZSA9IGllZWU4MDIxMV9yZW1haW5fZG9uZTsKKworCXdrLT5yZW1haW4uZHVyYXRpb24gPSBkdXJhdGlvbjsKKworCSpjb29raWUgPSAodTY0KXdrOworCisJaWVlZTgwMjExX2FkZF93b3JrKHdrKTsKKworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX3drX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICB1NjQgY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssICp0bXA7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2ssIHRtcCwgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCh1NjQpd2sgPT0gY29va2llKSB7CisJCQl3ay0+dGltZW91dCA9IGppZmZpZXM7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+d29ya193b3JrKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKaW5kZXggZWIwY2ViOC4uZmM3MGE0OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCkBAIC00ODIsOCArNDgyLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBpbnB1dCwgc2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jd2hpbGUgKGlzc3BhY2UoKmMpKQotCQljKys7CisJYyA9IHNraXBfc3BhY2VzKGMpOwogCiAJaWYgKHNpemUgLSAoYyAtIGJ1ZikgPCA1KQogCQlyZXR1cm4gYyAtIGJ1ZjsKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvZGF0YWdyYW0uYyBiL25ldC9waG9uZXQvZGF0YWdyYW0uYwppbmRleCA2N2YwNzJlLi4zODcxOTdiIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2RhdGFncmFtLmMKKysrIGIvbmV0L3Bob25ldC9kYXRhZ3JhbS5jCkBAIC03NSw3ICs3NSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyOwogCi0JaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVHxNU0dfRU9SfE1TR19OT1NJR05BTHwKKwkJCQlNU0dfQ01TR19DT01QQVQpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAobXNnLT5tc2dfbmFtZSA9PSBOVUxMKQpAQCAtMTE5LDcgKzEyMCw4IEBACiAJaW50IHJ2YWwgPSAtRU9QTk9UU1VQUDsKIAlpbnQgY29weWxlbjsKIAotCWlmIChmbGFncyAmIE1TR19PT0IpCisJaWYgKGZsYWdzICYgfihNU0dfUEVFS3xNU0dfVFJVTkN8TVNHX0RPTlRXQUlUfE1TR19OT1NJR05BTHwKKwkJCU1TR19DTVNHX0NPTVBBVCkpCiAJCWdvdG8gb3V0X25vZnJlZTsKIAogCWlmIChhZGRyX2xlbikKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLWdwcnMuYyBiL25ldC9waG9uZXQvcGVwLWdwcnMuYwppbmRleCBkMTgzNTA5Li5kMDEyMDg5IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BlcC1ncHJzLmMKKysrIGIvbmV0L3Bob25ldC9wZXAtZ3Bycy5jCkBAIC05NiwxMSArOTYsMTEgQEAKIAkJZ290byBkcm9wOwogCX0KIAotCWlmIChsaWtlbHkoc2tiX2hlYWRyb29tKHNrYikgJiAzKSkgeworCWlmIChza2JfaGVhZHJvb20oc2tiKSAmIDMpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnJza2IsICpmczsKIAkJaW50IGZsZW4gPSAwOwogCi0JCS8qIFBob25ldCBQaXBlIGRhdGEgaGVhZGVyIGlzIG1pc2FsaWduZWQgKDMgYnl0ZXMpLAorCQkvKiBQaG9uZXQgUGlwZSBkYXRhIGhlYWRlciBtYXkgYmUgbWlzYWxpZ25lZCAoMyBieXRlcyksCiAJCSAqIHNvIHdyYXAgdGhlIElQIHBhY2tldCBhcyBhIHNpbmdsZSBmcmFnbWVudCBvZiBhbiBoZWFkLWxlc3MKIAkJICogc29ja2V0IGJ1ZmZlci4gVGhlIG5ldHdvcmsgc3RhY2sgd2lsbCBwdWxsIHdoYXQgaXQgbmVlZHMsCiAJCSAqIGJ1dCBhdCBsZWFzdCwgdGhlIHdob2xlIElQIHBheWxvYWQgaXMgbm90IG1lbWNweSdkLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmMKaW5kZXggYjYzNTZmMy4uMzYwY2YzNyAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wZXAuYworKysgYi9uZXQvcGhvbmV0L3BlcC5jCkBAIC0zNTQsNiArMzU0LDkgQEAKIAkJcXVldWUgPSAmcG4tPmN0cmxyZXFfcXVldWU7CiAJCWdvdG8gcXVldWU7CiAKKwljYXNlIFBOU19QSVBFX0FMSUdORURfREFUQToKKwkJX19za2JfcHVsbChza2IsIDEpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFBOU19QSVBFX0RBVEE6CiAJCV9fc2tiX3B1bGwoc2tiLCAzKTsgLyogUGlwZSBkYXRhIGhlYWRlciAqLwogCQlpZiAoIXBuX2Zsb3dfc2FmZShwbi0+cnhfZmMpKSB7CkBAIC00NDEsNiArNDQ0LDcgQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfcG4gZHN0OwogCXUxNiBwZWVyX3R5cGU7CiAJdTggcGlwZV9oYW5kbGUsIGVuYWJsZWQsIG5fc2I7CisJdTggYWxpZ25lZCA9IDA7CiAKIAlpZiAoIXBza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSArIDQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ3OSw2ICs0ODMsOSBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJcGVlcl90eXBlID0gKHBlZXJfdHlwZSAmIDB4ZmYwMCkgfCBkYXRhWzBdOwogCQkJYnJlYWs7CisJCWNhc2UgUE5fUElQRV9TQl9BTElHTkVEX0RBVEE6CisJCQlhbGlnbmVkID0gZGF0YVswXSAhPSAwOworCQkJYnJlYWs7CiAJCX0KIAkJbl9zYi0tOwogCX0KQEAgLTUxMCw2ICs1MTcsNyBAQAogCW5ld3BuLT5yeF9jcmVkaXRzID0gMDsKIAluZXdwbi0+cnhfZmMgPSBuZXdwbi0+dHhfZmMgPSBQTl9MRUdBQ1lfRkxPV19DT05UUk9MOwogCW5ld3BuLT5pbml0X2VuYWJsZSA9IGVuYWJsZWQ7CisJbmV3cG4tPmFsaWduZWQgPSBhbGlnbmVkOwogCiAJQlVHX09OKCFza2JfcXVldWVfZW1wdHkoJm5ld3NrLT5za19yZWNlaXZlX3F1ZXVlKSk7CiAJc2tiX3F1ZXVlX2hlYWQoJm5ld3NrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwpAQCAtODI5LDExICs4MzcsMTUgQEAKIAkJcmV0dXJuIC1FTk9CVUZTOwogCX0KIAotCXNrYl9wdXNoKHNrYiwgMyk7CisJc2tiX3B1c2goc2tiLCAzICsgcG4tPmFsaWduZWQpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJcGggPSBwbnBfaGRyKHNrYik7CiAJcGgtPnV0aWQgPSAwOwotCXBoLT5tZXNzYWdlX2lkID0gUE5TX1BJUEVfREFUQTsKKwlpZiAocG4tPmFsaWduZWQpIHsKKwkJcGgtPm1lc3NhZ2VfaWQgPSBQTlNfUElQRV9BTElHTkVEX0RBVEE7CisJCXBoLT5kYXRhWzBdID0gMDsgLyogcGFkZGluZyAqLworCX0gZWxzZQorCQlwaC0+bWVzc2FnZV9pZCA9IFBOU19QSVBFX0RBVEE7CiAJcGgtPnBpcGVfaGFuZGxlID0gcG4tPnBpcGVfaGFuZGxlOwogCiAJcmV0dXJuIHBuX3NrYl9zZW5kKHNrLCBza2IsICZwaXBlX3Nydik7CkBAIC04NDgsNyArODYwLDkgQEAKIAlpbnQgZmxhZ3MgPSBtc2ctPm1zZ19mbGFnczsKIAlpbnQgZXJyLCBkb25lOwogCi0JaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQiB8fCAhKG1zZy0+bXNnX2ZsYWdzICYgTVNHX0VPUikpCisJaWYgKChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19FT1J8TVNHX05PU0lHTkFMfAorCQkJCU1TR19DTVNHX0NPTVBBVCkpIHx8CisJCQkhKG1zZy0+bXNnX2ZsYWdzICYgTVNHX0VPUikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIE1BWF9QTlBJUEVfSEVBREVSICsgbGVuLApAQCAtOTI3LDYgKzk0MSw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnJza2IsICpmczsKIAlpbnQgZmxlbiA9IDA7CiAKKwlpZiAocGVwX3NrKHNrKS0+YWxpZ25lZCkKKwkJcmV0dXJuIHBpcGVfc2tiX3NlbmQoc2ssIHNrYik7CisKIAlyc2tiID0gYWxsb2Nfc2tiKE1BWF9QTlBJUEVfSEVBREVSLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXJza2IpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC05NjYsNiArOTgzLDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyOwogCisJaWYgKGZsYWdzICYgfihNU0dfT09CfE1TR19QRUVLfE1TR19UUlVOQ3xNU0dfRE9OVFdBSVR8TVNHX1dBSVRBTEx8CisJCQlNU0dfTk9TSUdOQUx8TVNHX0NNU0dfQ09NUEFUKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKHVubGlrZWx5KDEgPDwgc2stPnNrX3N0YXRlICYgKFRDUEZfTElTVEVOIHwgVENQRl9DTE9TRSkpKQogCQlyZXR1cm4gLUVOT1RDT05OOwogCkBAIC05NzMsNiArOTk0LDggQEAKIAkJLyogRGVxdWV1ZSBhbmQgYWNrbm93bGVkZ2UgY29udHJvbCByZXF1ZXN0ICovCiAJCXN0cnVjdCBwZXBfc29jayAqcG4gPSBwZXBfc2soc2spOwogCisJCWlmIChmbGFncyAmIE1TR19QRUVLKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQlza2IgPSBza2JfZGVxdWV1ZSgmcG4tPmN0cmxyZXFfcXVldWUpOwogCQlpZiAoc2tiKSB7CiAJCQlwZXBfY3RybHJlcV9lcnJvcihzaywgc2tiLCBQTl9QSVBFX05PX0VSUk9SLApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCmluZGV4IDUzNmViZTUuLjNiODk5MjMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWIuYworKysgYi9uZXQvcmRzL2liLmMKQEAgLTE4Miw4ICsxODIsOCBAQAogCQlpYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CiAJCWRldl9hZGRyID0gJmljLT5pX2NtX2lkLT5yb3V0ZS5hZGRyLmRldl9hZGRyOwogCi0JCWliX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5zcmNfZ2lkKTsKLQkJaWJfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPmRzdF9naWQpOworCQlyZG1hX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5zcmNfZ2lkKTsKKwkJcmRtYV9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+ZHN0X2dpZCk7CiAKIAkJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKIAkJaWluZm8tPm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnI7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmMgYi9uZXQvcmRzL2l3LmMKaW5kZXggZGIyMjRmNy4uYjI4ZmE4NSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5jCisrKyBiL25ldC9yZHMvaXcuYwpAQCAtMTg0LDggKzE4NCw4IEBACiAJCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKIAkJZGV2X2FkZHIgPSAmaWMtPmlfY21faWQtPnJvdXRlLmFkZHIuZGV2X2FkZHI7CiAKLQkJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPnNyY19naWQpOwotCQlpYl9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+ZHN0X2dpZCk7CisJCXJkbWFfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPnNyY19naWQpOworCQlyZG1hX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5kc3RfZ2lkKTsKIAogCQlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOwogCQlpaW5mby0+bWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCBiOTRjM2RkLi43NjljMzg2IDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0zMTIsMTggKzMxMiw2IEBACiAJLmtpbGxfc2IgPQlraWxsX2Fub25fc3VwZXIsCiB9OwogCi1zdGF0aWMgaW50IHNvY2tmc19kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQkvKgotCSAqIEF0IGNyZWF0aW9uIHRpbWUsIHdlIHByZXRlbmRlZCB0aGlzIGRlbnRyeSB3YXMgaGFzaGVkCi0JICogKGJ5IGNsZWFyaW5nIERDQUNIRV9VTkhBU0hFRCBiaXQgaW4gZF9mbGFncykKLQkgKiBBdCBkZWxldGUgdGltZSwgd2UgcmVzdG9yZSB0aGUgdHJ1dGggOiBub3QgaGFzaGVkLgotCSAqIChzbyB0aGF0IGRwdXQoKSBjYW4gcHJvY2VlZCBjb3JyZWN0bHkpCi0JICovCi0JZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIHNvY2tmc19kbmFtZSgpIGlzIGNhbGxlZCBmcm9tIGRfcGF0aCgpLgogICovCkBAIC0zMzQsNyArMzIyLDYgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Ci0JLmRfZGVsZXRlID0gc29ja2ZzX2RlbGV0ZV9kZW50cnksCiAJLmRfZG5hbWUgID0gc29ja2ZzX2RuYW1lLAogfTsKIApAQCAtMzU1LDY4ICszNDIsNTUgQEAKICAqCWJ1dCB3ZSB0YWtlIGNhcmUgb2YgaW50ZXJuYWwgY29oZXJlbmNlIHlldC4KICAqLwogCi1zdGF0aWMgaW50IHNvY2tfYWxsb2NfZmQoc3RydWN0IGZpbGUgKipmaWxlcCwgaW50IGZsYWdzKQorc3RhdGljIGludCBzb2NrX2FsbG9jX2ZpbGUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGZpbGUgKipmLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IHFzdHIgbmFtZSA9IHsgLm5hbWUgPSAiIiB9OworCXN0cnVjdCBwYXRoIHBhdGg7CisJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IGZkOwogCiAJZmQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKGZsYWdzKTsKLQlpZiAobGlrZWx5KGZkID49IDApKSB7Ci0JCXN0cnVjdCBmaWxlICpmaWxlID0gZ2V0X2VtcHR5X2ZpbHAoKTsKKwlpZiAodW5saWtlbHkoZmQgPCAwKSkKKwkJcmV0dXJuIGZkOwogCi0JCSpmaWxlcCA9IGZpbGU7Ci0JCWlmICh1bmxpa2VseSghZmlsZSkpIHsKLQkJCXB1dF91bnVzZWRfZmQoZmQpOwotCQkJcmV0dXJuIC1FTkZJTEU7Ci0JCX0KLQl9IGVsc2UKLQkJKmZpbGVwID0gTlVMTDsKLQlyZXR1cm4gZmQ7Ci19Ci0KLXN0YXRpYyBpbnQgc29ja19hdHRhY2hfZmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGZpbGUgKmZpbGUsIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IHFzdHIgbmFtZSA9IHsgLm5hbWUgPSAiIiB9OwotCi0JZGVudHJ5ID0gZF9hbGxvYyhzb2NrX21udC0+bW50X3NiLT5zX3Jvb3QsICZuYW1lKTsKLQlpZiAodW5saWtlbHkoIWRlbnRyeSkpCisJcGF0aC5kZW50cnkgPSBkX2FsbG9jKHNvY2tfbW50LT5tbnRfc2ItPnNfcm9vdCwgJm5hbWUpOworCWlmICh1bmxpa2VseSghcGF0aC5kZW50cnkpKSB7CisJCXB1dF91bnVzZWRfZmQoZmQpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcGF0aC5tbnQgPSBtbnRnZXQoc29ja19tbnQpOwogCi0JZGVudHJ5LT5kX29wID0gJnNvY2tmc19kZW50cnlfb3BlcmF0aW9uczsKLQkvKgotCSAqIFdlIGRvbnQgd2FudCB0byBwdXNoIHRoaXMgZGVudHJ5IGludG8gZ2xvYmFsIGRlbnRyeSBoYXNoIHRhYmxlLgotCSAqIFdlIHByZXRlbmQgZGVudHJ5IGlzIGFscmVhZHkgaGFzaGVkLCBieSB1bnNldHRpbmcgRENBQ0hFX1VOSEFTSEVECi0JICogVGhpcyBwZXJtaXRzIGEgd29ya2luZyAvcHJvYy8kcGlkL2ZkL1hYWCBvbiBzb2NrZXRzCi0JICovCi0JZGVudHJ5LT5kX2ZsYWdzICY9IH5EQ0FDSEVfVU5IQVNIRUQ7Ci0JZF9pbnN0YW50aWF0ZShkZW50cnksIFNPQ0tfSU5PREUoc29jaykpOworCXBhdGguZGVudHJ5LT5kX29wID0gJnNvY2tmc19kZW50cnlfb3BlcmF0aW9uczsKKwlkX2luc3RhbnRpYXRlKHBhdGguZGVudHJ5LCBTT0NLX0lOT0RFKHNvY2spKTsKKwlTT0NLX0lOT0RFKHNvY2spLT5pX2ZvcCA9ICZzb2NrZXRfZmlsZV9vcHM7CisKKwlmaWxlID0gYWxsb2NfZmlsZSgmcGF0aCwgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFLAorCQkgICZzb2NrZXRfZmlsZV9vcHMpOworCWlmICh1bmxpa2VseSghZmlsZSkpIHsKKwkJLyogZHJvcCBkZW50cnksIGtlZXAgaW5vZGUgKi8KKwkJYXRvbWljX2luYygmcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfY291bnQpOworCQlwYXRoX3B1dCgmcGF0aCk7CisJCXB1dF91bnVzZWRfZmQoZmQpOworCQlyZXR1cm4gLUVORklMRTsKKwl9CiAKIAlzb2NrLT5maWxlID0gZmlsZTsKLQlpbml0X2ZpbGUoZmlsZSwgc29ja19tbnQsIGRlbnRyeSwgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFLAotCQkgICZzb2NrZXRfZmlsZV9vcHMpOwotCVNPQ0tfSU5PREUoc29jayktPmlfZm9wID0gJnNvY2tldF9maWxlX29wczsKIAlmaWxlLT5mX2ZsYWdzID0gT19SRFdSIHwgKGZsYWdzICYgT19OT05CTE9DSyk7CiAJZmlsZS0+Zl9wb3MgPSAwOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNvY2s7CiAKLQlyZXR1cm4gMDsKKwkqZiA9IGZpbGU7CisJcmV0dXJuIGZkOwogfQogCiBpbnQgc29ja19tYXBfZmQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKQogewogCXN0cnVjdCBmaWxlICpuZXdmaWxlOwotCWludCBmZCA9IHNvY2tfYWxsb2NfZmQoJm5ld2ZpbGUsIGZsYWdzKTsKKwlpbnQgZmQgPSBzb2NrX2FsbG9jX2ZpbGUoc29jaywgJm5ld2ZpbGUsIGZsYWdzKTsKIAotCWlmIChsaWtlbHkoZmQgPj0gMCkpIHsKLQkJaW50IGVyciA9IHNvY2tfYXR0YWNoX2ZkKHNvY2ssIG5ld2ZpbGUsIGZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKLQkJCXB1dF9maWxwKG5ld2ZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChmZCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJaWYgKGxpa2VseShmZCA+PSAwKSkKIAkJZmRfaW5zdGFsbChmZCwgbmV3ZmlsZSk7Ci0JfQorCiAJcmV0dXJuIGZkOwogfQogCkBAIC0xMzkwLDI5ICsxMzY0LDE5IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X3JlbGVhc2VfYm90aDsKIAotCWZkMSA9IHNvY2tfYWxsb2NfZmQoJm5ld2ZpbGUxLCBmbGFncyAmIE9fQ0xPRVhFQyk7CisJZmQxID0gc29ja19hbGxvY19maWxlKHNvY2sxLCAmbmV3ZmlsZTEsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoZmQxIDwgMCkpIHsKIAkJZXJyID0gZmQxOwogCQlnb3RvIG91dF9yZWxlYXNlX2JvdGg7CiAJfQogCi0JZmQyID0gc29ja19hbGxvY19mZCgmbmV3ZmlsZTIsIGZsYWdzICYgT19DTE9FWEVDKTsKKwlmZDIgPSBzb2NrX2FsbG9jX2ZpbGUoc29jazIsICZuZXdmaWxlMiwgZmxhZ3MpOwogCWlmICh1bmxpa2VseShmZDIgPCAwKSkgewogCQllcnIgPSBmZDI7Ci0JCXB1dF9maWxwKG5ld2ZpbGUxKTsKLQkJcHV0X3VudXNlZF9mZChmZDEpOwotCQlnb3RvIG91dF9yZWxlYXNlX2JvdGg7Ci0JfQotCi0JZXJyID0gc29ja19hdHRhY2hfZmQoc29jazEsIG5ld2ZpbGUxLCBmbGFncyAmIE9fTk9OQkxPQ0spOwotCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewotCQlnb3RvIG91dF9mZDI7Ci0JfQotCi0JZXJyID0gc29ja19hdHRhY2hfZmQoc29jazIsIG5ld2ZpbGUyLCBmbGFncyAmIE9fTk9OQkxPQ0spOwotCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogCQlmcHV0KG5ld2ZpbGUxKTsKLQkJZ290byBvdXRfZmQxOworCQlwdXRfdW51c2VkX2ZkKGZkMSk7CisJCXNvY2tfcmVsZWFzZShzb2NrMik7CisJCWdvdG8gb3V0OwogCX0KIAogCWF1ZGl0X2ZkX3BhaXIoZmQxLCBmZDIpOwpAQCAtMTQzOCwxNiArMTQwMiw2IEBACiAJc29ja19yZWxlYXNlKHNvY2sxKTsKIG91dDoKIAlyZXR1cm4gZXJyOwotCi1vdXRfZmQyOgotCXB1dF9maWxwKG5ld2ZpbGUxKTsKLQlzb2NrX3JlbGVhc2Uoc29jazEpOwotb3V0X2ZkMToKLQlwdXRfZmlscChuZXdmaWxlMik7Ci0Jc29ja19yZWxlYXNlKHNvY2syKTsKLQlwdXRfdW51c2VkX2ZkKGZkMSk7Ci0JcHV0X3VudXNlZF9mZChmZDIpOwotCWdvdG8gb3V0OwogfQogCiAvKgpAQCAtMTU1MSwxNyArMTUwNSwxMyBAQAogCSAqLwogCV9fbW9kdWxlX2dldChuZXdzb2NrLT5vcHMtPm93bmVyKTsKIAotCW5ld2ZkID0gc29ja19hbGxvY19mZCgmbmV3ZmlsZSwgZmxhZ3MgJiBPX0NMT0VYRUMpOworCW5ld2ZkID0gc29ja19hbGxvY19maWxlKG5ld3NvY2ssICZuZXdmaWxlLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KG5ld2ZkIDwgMCkpIHsKIAkJZXJyID0gbmV3ZmQ7CiAJCXNvY2tfcmVsZWFzZShuZXdzb2NrKTsKIAkJZ290byBvdXRfcHV0OwogCX0KIAotCWVyciA9IHNvY2tfYXR0YWNoX2ZkKG5ld3NvY2ssIG5ld2ZpbGUsIGZsYWdzICYgT19OT05CTE9DSyk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0X2ZkX3NpbXBsZTsKLQogCWVyciA9IHNlY3VyaXR5X3NvY2tldF9hY2NlcHQoc29jaywgbmV3c29jayk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZmQ7CkBAIC0xNTkxLDExICsxNTQxLDYgQEAKIAlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKIAlyZXR1cm4gZXJyOwotb3V0X2ZkX3NpbXBsZToKLQlzb2NrX3JlbGVhc2UobmV3c29jayk7Ci0JcHV0X2ZpbHAobmV3ZmlsZSk7Ci0JcHV0X3VudXNlZF9mZChuZXdmZCk7Ci0JZ290byBvdXRfcHV0Owogb3V0X2ZkOgogCWZwdXQobmV3ZmlsZSk7CiAJcHV0X3VudXNlZF9mZChuZXdmZCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2FkZHIuYyBiL25ldC9zdW5ycGMvYWRkci5jCmluZGV4IGM3NDUwYzguLjZkY2RkMjUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYWRkci5jCisrKyBiL25ldC9zdW5ycGMvYWRkci5jCkBAIC01NSwxNiArNTUsOCBAQAogCiAJLyoKIAkgKiBSRkMgNDI5MSwgU2VjdGlvbiAyLjIuMQotCSAqCi0JICogVG8ga2VlcCB0aGUgcmVzdWx0IGFzIHNob3J0IGFzIHBvc3NpYmxlLCBlc3BlY2lhbGx5Ci0JICogc2luY2Ugd2UgZG9uJ3Qgc2hvcnRoYW5kLCB3ZSBkb24ndCB3YW50IGxlYWRpbmcgemVyb3MKLQkgKiBpbiBlYWNoIGhhbGZ3b3JkLCBzbyBhdm9pZCAlcEk2LgogCSAqLwotCXJldHVybiBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4IiwKLQkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzBdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzFdKSwKLQkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzJdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzNdKSwKLQkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzRdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzVdKSwKLQkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzZdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzddKSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXBJNmMiLCBhZGRyKTsKIH0KIAogc3RhdGljIHNpemVfdCBycGNfbnRvcDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGguYyBiL25ldC9zdW5ycGMvYXV0aC5jCmluZGV4IDc1MzVhN2IuLmYzOTRmYzEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aC5jCkBAIC0xMjMsMTYgKzEyMywxOSBAQAogCWNsZWFyX2JpdChSUENBVVRIX0NSRURfSEFTSEVELCAmY3JlZC0+Y3JfZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogcnBjYXV0aF91bmhhc2hfY3JlZChzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CiAJc3BpbmxvY2tfdCAqY2FjaGVfbG9jazsKKwlpbnQgcmV0OwogCiAJY2FjaGVfbG9jayA9ICZjcmVkLT5jcl9hdXRoLT5hdV9jcmVkY2FjaGUtPmxvY2s7CiAJc3Bpbl9sb2NrKGNhY2hlX2xvY2spOwotCWlmIChhdG9taWNfcmVhZCgmY3JlZC0+Y3JfY291bnQpID09IDApCisJcmV0ID0gYXRvbWljX3JlYWQoJmNyZWQtPmNyX2NvdW50KSA9PSAwOworCWlmIChyZXQpCiAJCXJwY2F1dGhfdW5oYXNoX2NyZWRfbG9ja2VkKGNyZWQpOwogCXNwaW5fdW5sb2NrKGNhY2hlX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC00NDYsMzEgKzQ0OSwzNSBAQAogcHV0X3JwY2NyZWQoc3RydWN0IHJwY19jcmVkICpjcmVkKQogewogCS8qIEZhc3QgcGF0aCBmb3IgdW5oYXNoZWQgY3JlZGVudGlhbHMgKi8KLQlpZiAodGVzdF9iaXQoUlBDQVVUSF9DUkVEX0hBU0hFRCwgJmNyZWQtPmNyX2ZsYWdzKSAhPSAwKQotCQlnb3RvIG5lZWRfbG9jazsKLQotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmY3JlZC0+Y3JfY291bnQpKQorCWlmICh0ZXN0X2JpdChSUENBVVRIX0NSRURfSEFTSEVELCAmY3JlZC0+Y3JfZmxhZ3MpID09IDApIHsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNyZWQtPmNyX2NvdW50KSkKKwkJCWNyZWQtPmNyX29wcy0+Y3JkZXN0cm95KGNyZWQpOwogCQlyZXR1cm47Ci0JZ290byBvdXRfZGVzdHJveTsKLW5lZWRfbG9jazoKKwl9CisKIAlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmNyZWQtPmNyX2NvdW50LCAmcnBjX2NyZWRjYWNoZV9sb2NrKSkKIAkJcmV0dXJuOwogCWlmICghbGlzdF9lbXB0eSgmY3JlZC0+Y3JfbHJ1KSkgewogCQludW1iZXJfY3JlZF91bnVzZWQtLTsKIAkJbGlzdF9kZWxfaW5pdCgmY3JlZC0+Y3JfbHJ1KTsKIAl9Ci0JaWYgKHRlc3RfYml0KFJQQ0FVVEhfQ1JFRF9VUFRPREFURSwgJmNyZWQtPmNyX2ZsYWdzKSA9PSAwKQotCQlycGNhdXRoX3VuaGFzaF9jcmVkKGNyZWQpOwogCWlmICh0ZXN0X2JpdChSUENBVVRIX0NSRURfSEFTSEVELCAmY3JlZC0+Y3JfZmxhZ3MpICE9IDApIHsKLQkJY3JlZC0+Y3JfZXhwaXJlID0gamlmZmllczsKLQkJbGlzdF9hZGRfdGFpbCgmY3JlZC0+Y3JfbHJ1LCAmY3JlZF91bnVzZWQpOwotCQludW1iZXJfY3JlZF91bnVzZWQrKzsKLQkJc3Bpbl91bmxvY2soJnJwY19jcmVkY2FjaGVfbG9jayk7Ci0JCXJldHVybjsKKwkJaWYgKHRlc3RfYml0KFJQQ0FVVEhfQ1JFRF9VUFRPREFURSwgJmNyZWQtPmNyX2ZsYWdzKSAhPSAwKSB7CisJCQljcmVkLT5jcl9leHBpcmUgPSBqaWZmaWVzOworCQkJbGlzdF9hZGRfdGFpbCgmY3JlZC0+Y3JfbHJ1LCAmY3JlZF91bnVzZWQpOworCQkJbnVtYmVyX2NyZWRfdW51c2VkKys7CisJCQlnb3RvIG91dF9ub2Rlc3Ryb3k7CisJCX0KKwkJaWYgKCFycGNhdXRoX3VuaGFzaF9jcmVkKGNyZWQpKSB7CisJCQkvKiBXZSB3ZXJlIGhhc2hlZCBhbmQgc29tZW9uZSBsb29rZWQgdXMgdXAuLi4gKi8KKwkJCWdvdG8gb3V0X25vZGVzdHJveTsKKwkJfQogCX0KIAlzcGluX3VubG9jaygmcnBjX2NyZWRjYWNoZV9sb2NrKTsKLW91dF9kZXN0cm95OgogCWNyZWQtPmNyX29wcy0+Y3JkZXN0cm95KGNyZWQpOworCXJldHVybjsKK291dF9ub2Rlc3Ryb3k6CisJc3Bpbl91bmxvY2soJnJwY19jcmVkY2FjaGVfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwdXRfcnBjY3JlZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCBmYzZhNDNjLi4zYzNjNTBmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC0zMDQsNyArMzA0LDcgQEAKICAqIHRvIHRoYXQgdXBjYWxsIGluc3RlYWQgb2YgYWRkaW5nIHRoZSBuZXcgdXBjYWxsLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBnc3NfdXBjYWxsX21zZyAqCi1nc3NfYWRkX21zZyhzdHJ1Y3QgZ3NzX2F1dGggKmdzc19hdXRoLCBzdHJ1Y3QgZ3NzX3VwY2FsbF9tc2cgKmdzc19tc2cpCitnc3NfYWRkX21zZyhzdHJ1Y3QgZ3NzX3VwY2FsbF9tc2cgKmdzc19tc2cpCiB7CiAJc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IGdzc19tc2ctPmlub2RlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcnBjaS0+dmZzX2lub2RlOwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJZ3NzX25ldyA9IGdzc19hbGxvY19tc2coZ3NzX2F1dGgsIHVpZCwgY2xudCwgZ3NzX2NyZWQtPmdjX21hY2hpbmVfY3JlZCk7CiAJaWYgKElTX0VSUihnc3NfbmV3KSkKIAkJcmV0dXJuIGdzc19uZXc7Ci0JZ3NzX21zZyA9IGdzc19hZGRfbXNnKGdzc19hdXRoLCBnc3NfbmV3KTsKKwlnc3NfbXNnID0gZ3NzX2FkZF9tc2coZ3NzX25ldyk7CiAJaWYgKGdzc19tc2cgPT0gZ3NzX25ldykgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJmdzc19uZXctPmlub2RlLT52ZnNfaW5vZGU7CiAJCWludCByZXMgPSBycGNfcXVldWVfdXBjYWxsKGlub2RlLCAmZ3NzX25ldy0+bXNnKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCWRwcmludGsoIlJQQzogJTV1IGdzc19yZWZyZXNoX3VwY2FsbCBmb3IgdWlkICV1XG4iLCB0YXNrLT50a19waWQsCiAJCQkJCQkJCWNyZWQtPmNyX3VpZCk7CiAJZ3NzX21zZyA9IGdzc19zZXR1cF91cGNhbGwodGFzay0+dGtfY2xpZW50LCBnc3NfYXV0aCwgY3JlZCk7Ci0JaWYgKElTX0VSUihnc3NfbXNnKSA9PSAtRUFHQUlOKSB7CisJaWYgKFBUUl9FUlIoZ3NzX21zZykgPT0gLUVBR0FJTikgewogCQkvKiBYWFg6IHdhcm5pbmcgb24gdGhlIGZpcnN0LCB1bmRlciB0aGUgYXNzdW1wdGlvbiB3ZQogCQkgKiBzaG91bGRuJ3Qgbm9ybWFsbHkgaGl0IHRoaXMgY2FzZSBvbiBhIHJlZnJlc2guICovCiAJCXdhcm5fZ3NzZCgpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCAzODgyOWUyLi4xNTQwMzRiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtNzksNyArNzksNyBAQAogCiBzdGF0aWMgX19iZTMyCSpycGNfZW5jb2RlX2hlYWRlcihzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogc3RhdGljIF9fYmUzMgkqcnBjX3ZlcmlmeV9oZWFkZXIoc3RydWN0IHJwY190YXNrICp0YXNrKTsKLXN0YXRpYyBpbnQJcnBjX3Bpbmcoc3RydWN0IHJwY19jbG50ICpjbG50LCBpbnQgZmxhZ3MpOworc3RhdGljIGludAlycGNfcGluZyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpOwogCiBzdGF0aWMgdm9pZCBycGNfcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBycGNfY2xudCAqY2xudCkKIHsKQEAgLTM0MCw3ICszNDAsNyBAQAogCQlyZXR1cm4gY2xudDsKIAogCWlmICghKGFyZ3MtPmZsYWdzICYgUlBDX0NMTlRfQ1JFQVRFX05PUElORykpIHsKLQkJaW50IGVyciA9IHJwY19waW5nKGNsbnQsIFJQQ19UQVNLX1NPRlQpOworCQlpbnQgZXJyID0gcnBjX3BpbmcoY2xudCk7CiAJCWlmIChlcnIgIT0gMCkgewogCQkJcnBjX3NodXRkb3duX2NsaWVudChjbG50KTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CkBAIC01MjgsNyArNTI4LDcgQEAKIAljbG50LT5jbF9wcm9nICAgICA9IHByb2dyYW0tPm51bWJlcjsKIAljbG50LT5jbF92ZXJzICAgICA9IHZlcnNpb24tPm51bWJlcjsKIAljbG50LT5jbF9zdGF0cyAgICA9IHByb2dyYW0tPnN0YXRzOwotCWVyciA9IHJwY19waW5nKGNsbnQsIFJQQ19UQVNLX1NPRlQpOworCWVyciA9IHJwY19waW5nKGNsbnQpOwogCWlmIChlcnIgIT0gMCkgewogCQlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOwogCQljbG50ID0gRVJSX1BUUihlcnIpOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIAkJZ290byByZXRyeV90aW1lb3V0OwogCWNhc2UgLUVQRk5PU1VQUE9SVDoKIAkJLyogc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgcnBjYmluZCB2ZXJzaW9uIHdlIGtub3cgb2YgKi8KLQkJZHByaW50aygiUlBDOiAlNXUgcmVtb3RlIHJwY2JpbmQgc2VydmljZSB1bmF2YWlsYWJsZVxuIiwKKwkJZHByaW50aygiUlBDOiAlNXUgdW5yZWNvZ25pemVkIHJlbW90ZSBycGNiaW5kIHNlcnZpY2VcbiIsCiAJCQkJdGFzay0+dGtfcGlkKTsKIAkJYnJlYWs7CiAJY2FzZSAtRVBST1RPTk9TVVBQT1JUOgpAQCAtMTA2OSw2ICsxMDY5LDIxIEBACiAJCXRhc2stPnRrX3N0YXR1cyA9IDA7CiAJCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfYmluZDsKIAkJcmV0dXJuOworCWNhc2UgLUVDT05OUkVGVVNFRDoJCS8qIGNvbm5lY3Rpb24gcHJvYmxlbXMgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT1RDT05OOgorCWNhc2UgLUVIT1NURE9XTjoKKwljYXNlIC1FSE9TVFVOUkVBQ0g6CisJY2FzZSAtRU5FVFVOUkVBQ0g6CisJY2FzZSAtRVBJUEU6CisJCWRwcmludGsoIlJQQzogJTV1IHJlbW90ZSBycGNiaW5kIHVucmVhY2hhYmxlOiAlZFxuIiwKKwkJCQl0YXNrLT50a19waWQsIHRhc2stPnRrX3N0YXR1cyk7CisJCWlmICghUlBDX0lTX1NPRlRDT05OKHRhc2spKSB7CisJCQlycGNfZGVsYXkodGFzaywgNSpIWik7CisJCQlnb3RvIHJldHJ5X3RpbWVvdXQ7CisJCX0KKwkJc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCJSUEM6ICU1dSB1bnJlY29nbml6ZWQgcnBjYmluZCBlcnJvciAoJWQpXG4iLAogCQkJCXRhc2stPnRrX3BpZCwgLXRhc2stPnRrX3N0YXR1cyk7CkBAIC0xMTgwLDExICsxMTk1LDI1IEBACiBjYWxsX3RyYW5zbWl0X3N0YXR1cyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CiAJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9zdGF0dXM7CisKKwkvKgorCSAqIENvbW1vbiBjYXNlOiBzdWNjZXNzLiAgRm9yY2UgdGhlIGNvbXBpbGVyIHRvIHB1dCB0aGlzCisJICogdGVzdCBmaXJzdC4KKwkgKi8KKwlpZiAodGFzay0+dGtfc3RhdHVzID09IDApIHsKKwkJeHBydF9lbmRfdHJhbnNtaXQodGFzayk7CisJCXJwY190YXNrX2ZvcmNlX3JlZW5jb2RlKHRhc2spOworCQlyZXR1cm47CisJfQorCiAJc3dpdGNoICh0YXNrLT50a19zdGF0dXMpIHsKIAljYXNlIC1FQUdBSU46CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWRwcmludF9zdGF0dXModGFzayk7CiAJCXhwcnRfZW5kX3RyYW5zbWl0KHRhc2spOworCQlycGNfdGFza19mb3JjZV9yZWVuY29kZSh0YXNrKTsKKwkJYnJlYWs7CiAJCS8qCiAJCSAqIFNwZWNpYWwgY2FzZXM6IGlmIHdlJ3ZlIGJlZW4gd2FpdGluZyBvbiB0aGUKIAkJICogc29ja2V0J3Mgd3JpdGVfc3BhY2UoKSBjYWxsYmFjaywgb3IgaWYgdGhlCkBAIC0xMTkyLDExICsxMjIxLDE2IEBACiAJCSAqIHRoZW4gaG9sZCBvbnRvIHRoZSB0cmFuc3BvcnQgbG9jay4KIAkJICovCiAJY2FzZSAtRUNPTk5SRUZVU0VEOgotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PVENPTk46CiAJY2FzZSAtRUhPU1RET1dOOgogCWNhc2UgLUVIT1NUVU5SRUFDSDoKIAljYXNlIC1FTkVUVU5SRUFDSDoKKwkJaWYgKFJQQ19JU19TT0ZUQ09OTih0YXNrKSkgeworCQkJeHBydF9lbmRfdHJhbnNtaXQodGFzayk7CisJCQlycGNfZXhpdCh0YXNrLCB0YXNrLT50a19zdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT1RDT05OOgogCWNhc2UgLUVQSVBFOgogCQlycGNfdGFza19mb3JjZV9yZWVuY29kZSh0YXNrKTsKIAl9CkBAIC0xMzQ2LDYgKzEzODAsMTAgQEAKIAlkcHJpbnRrKCJSUEM6ICU1dSBjYWxsX3RpbWVvdXQgKG1ham9yKVxuIiwgdGFzay0+dGtfcGlkKTsKIAl0YXNrLT50a190aW1lb3V0cysrOwogCisJaWYgKFJQQ19JU19TT0ZUQ09OTih0YXNrKSkgeworCQlycGNfZXhpdCh0YXNrLCAtRVRJTUVET1VUKTsKKwkJcmV0dXJuOworCX0KIAlpZiAoUlBDX0lTX1NPRlQodGFzaykpIHsKIAkJaWYgKGNsbnQtPmNsX2NoYXR0eSkKIAkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHNlcnZlciAlcyBub3QgcmVzcG9uZGluZywgdGltZWQgb3V0XG4iLApAQCAtMTY3NSwxNCArMTcxMywxNCBAQAogCS5wX2RlY29kZSA9IHJwY3Byb2NfZGVjb2RlX251bGwsCiB9OwogCi1zdGF0aWMgaW50IHJwY19waW5nKHN0cnVjdCBycGNfY2xudCAqY2xudCwgaW50IGZsYWdzKQorc3RhdGljIGludCBycGNfcGluZyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCiB7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jID0gJnJwY3Byb2NfbnVsbCwKIAl9OwogCWludCBlcnI7CiAJbXNnLnJwY19jcmVkID0gYXV0aG51bGxfb3BzLmxvb2t1cF9jcmVkKE5VTEwsIE5VTEwsIDApOwotCWVyciA9IHJwY19jYWxsX3N5bmMoY2xudCwgJm1zZywgZmxhZ3MpOworCWVyciA9IHJwY19jYWxsX3N5bmMoY2xudCwgJm1zZywgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1NPRlRDT05OKTsKIAlwdXRfcnBjY3JlZChtc2cucnBjX2NyZWQpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jIGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwppbmRleCA4MzBmYWY0Li4zZTM3NzJkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jCisrKyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CkBAIC0xMTAsNiArMTExLDkgQEAKIHN0YXRpYyB2b2lkCQkJcnBjYl9tYXBfcmVsZWFzZSh2b2lkICpkYXRhKTsKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2dyYW0JcnBjYl9wcm9ncmFtOwogCitzdGF0aWMgc3RydWN0IHJwY19jbG50ICoJcnBjYl9sb2NhbF9jbG50Oworc3RhdGljIHN0cnVjdCBycGNfY2xudCAqCXJwY2JfbG9jYWxfY2xudDQ7CisKIHN0cnVjdCBycGNiaW5kX2FyZ3MgewogCXN0cnVjdCBycGNfeHBydCAqCXJfeHBydDsKIApAQCAtMTYzLDIxICsxNjcsNjAgQEAKIAkuc2luX3BvcnQJCT0gaHRvbnMoUlBDQklORF9QT1JUKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJCQkJICBzaXplX3QgYWRkcmxlbiwgdTMyIHZlcnNpb24pCitzdGF0aWMgREVGSU5FX01VVEVYKHJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTsKKworLyoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZQorICogaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWwodm9pZCkKIHsKIAlzdHJ1Y3QgcnBjX2NyZWF0ZV9hcmdzIGFyZ3MgPSB7Ci0JCS5wcm90b2NvbAk9IFhQUlRfVFJBTlNQT1JUX1VEUCwKLQkJLmFkZHJlc3MJPSBhZGRyLAotCQkuYWRkcnNpemUJPSBhZGRybGVuLAorCQkucHJvdG9jb2wJPSBYUFJUX1RSQU5TUE9SVF9UQ1AsCisJCS5hZGRyZXNzCT0gKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luYWRkcl9sb29wYmFjaywKKwkJLmFkZHJzaXplCT0gc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKSwKIAkJLnNlcnZlcm5hbWUJPSAibG9jYWxob3N0IiwKIAkJLnByb2dyYW0JPSAmcnBjYl9wcm9ncmFtLAotCQkudmVyc2lvbgk9IHZlcnNpb24sCisJCS52ZXJzaW9uCT0gUlBDQlZFUlNfMiwKIAkJLmF1dGhmbGF2b3IJPSBSUENfQVVUSF9VTklYLAogCQkuZmxhZ3MJCT0gUlBDX0NMTlRfQ1JFQVRFX05PUElORywKIAl9OworCXN0cnVjdCBycGNfY2xudCAqY2xudCwgKmNsbnQ0OworCWludCByZXN1bHQgPSAwOwogCi0JcmV0dXJuIHJwY19jcmVhdGUoJmFyZ3MpOworCWlmIChycGNiX2xvY2FsX2NsbnQpCisJCXJldHVybiByZXN1bHQ7CisKKwltdXRleF9sb2NrKCZycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCk7CisJaWYgKHJwY2JfbG9jYWxfY2xudCkKKwkJZ290byBvdXQ7CisKKwljbG50ID0gcnBjX2NyZWF0ZSgmYXJncyk7CisJaWYgKElTX0VSUihjbG50KSkgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgIGZhaWxlZCB0byBjcmVhdGUgbG9jYWwgcnBjYmluZCAiCisJCQkJImNsaWVudCAoZXJybm8gJWxkKS5cbiIsIFBUUl9FUlIoY2xudCkpOworCQlyZXN1bHQgPSAtUFRSX0VSUihjbG50KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGlzIHJlc3VsdHMgaW4gYW4gUlBDIHBpbmcuICBPbiBzeXN0ZW1zIHJ1bm5pbmcgcG9ydG1hcHBlciwKKwkgKiB0aGUgdjQgcGluZyB3aWxsIGZhaWwuICBQcm9jZWVkIGFueXdheSwgYnV0IGRpc2FsbG93IHJwY2IKKwkgKiB2NCB1cGNhbGxzLgorCSAqLworCWNsbnQ0ID0gcnBjX2JpbmRfbmV3X3Byb2dyYW0oY2xudCwgJnJwY2JfcHJvZ3JhbSwgUlBDQlZFUlNfNCk7CisJaWYgKElTX0VSUihjbG50NCkpIHsKKwkJZHByaW50aygiUlBDOiAgICAgICBmYWlsZWQgdG8gY3JlYXRlIGxvY2FsIHJwY2JpbmQgdjQgIgorCQkJCSJjbGVpbnQgKGVycm5vICVsZCkuXG4iLCBQVFJfRVJSKGNsbnQ0KSk7CisJCWNsbnQ0ID0gTlVMTDsKKwl9CisKKwlycGNiX2xvY2FsX2NsbnQgPSBjbG50OworCXJwY2JfbG9jYWxfY2xudDQgPSBjbG50NDsKKworb3V0OgorCW11dGV4X3VubG9jaygmcnBjYl9jcmVhdGVfbG9jYWxfbXV0ZXgpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKGNoYXIgKmhvc3RuYW1lLCBzdHJ1Y3Qgc29ja2FkZHIgKnNydmFkZHIsCkBAIC0yMDksMjIgKzI1MiwxMyBAQAogCXJldHVybiBycGNfY3JlYXRlKCZhcmdzKTsKIH0KIAotc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoY29uc3QgdTMyIHZlcnNpb24sIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQorc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZykKIHsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW5hZGRyX2xvb3BiYWNrOwotCXNpemVfdCBhZGRybGVuID0gc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKTsKLQlzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY2xudDsKIAlpbnQgcmVzdWx0LCBlcnJvciA9IDA7CiAKIAltc2ctPnJwY19yZXNwID0gJnJlc3VsdDsKIAotCXJwY2JfY2xudCA9IHJwY2JfY3JlYXRlX2xvY2FsKGFkZHIsIGFkZHJsZW4sIHZlcnNpb24pOwotCWlmICghSVNfRVJSKHJwY2JfY2xudCkpIHsKLQkJZXJyb3IgPSBycGNfY2FsbF9zeW5jKHJwY2JfY2xudCwgbXNnLCAwKTsKLQkJcnBjX3NodXRkb3duX2NsaWVudChycGNiX2NsbnQpOwotCX0gZWxzZQotCQllcnJvciA9IFBUUl9FUlIocnBjYl9jbG50KTsKLQorCWVycm9yID0gcnBjX2NhbGxfc3luYyhjbG50LCBtc2csIFJQQ19UQVNLX1NPRlRDT05OKTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCWRwcmludGsoIlJQQzogICAgICAgZmFpbGVkIHRvIGNvbnRhY3QgbG9jYWwgcnBjYmluZCAiCiAJCQkJInNlcnZlciAoZXJybm8gJWQpLlxuIiwgLWVycm9yKTsKQEAgLTI3OSw2ICszMTMsMTEgQEAKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewogCQkucnBjX2FyZ3AJPSAmbWFwLAogCX07CisJaW50IGVycm9yOworCisJZXJyb3IgPSBycGNiX2NyZWF0ZV9sb2NhbCgpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlc3JlZ2lzdGVyaW5nICgldSwgJXUsICVkLCAldSkgd2l0aCBsb2NhbCAiCiAJCQkicnBjYmluZFxuIiwgKHBvcnQgPyAiIiA6ICJ1biIpLApAQCAtMjg4LDcgKzMyNyw3IEBACiAJaWYgKHBvcnQpCiAJCW1zZy5ycGNfcHJvYyA9ICZycGNiX3Byb2NlZHVyZXMyW1JQQ0JQUk9DX1NFVF07CiAKLQlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzIsICZtc2cpOworCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwocnBjYl9sb2NhbF9jbG50LCAmbXNnKTsKIH0KIAogLyoKQEAgLTMxMyw3ICszNTIsNyBAQAogCWlmIChwb3J0KQogCQltc2ctPnJwY19wcm9jID0gJnJwY2JfcHJvY2VkdXJlczRbUlBDQlBST0NfU0VUXTsKIAotCXJlc3VsdCA9IHJwY2JfcmVnaXN0ZXJfY2FsbChSUENCVkVSU180LCBtc2cpOworCXJlc3VsdCA9IHJwY2JfcmVnaXN0ZXJfY2FsbChycGNiX2xvY2FsX2NsbnQ0LCBtc2cpOwogCWtmcmVlKG1hcC0+cl9hZGRyKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMzQwLDcgKzM3OSw3IEBACiAJaWYgKHBvcnQpCiAJCW1zZy0+cnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzNFtSUENCUFJPQ19TRVRdOwogCi0JcmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzQsIG1zZyk7CisJcmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHJwY2JfbG9jYWxfY2xudDQsIG1zZyk7CiAJa2ZyZWUobWFwLT5yX2FkZHIpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0zNTYsNyArMzk1LDcgQEAKIAltYXAtPnJfYWRkciA9ICIiOwogCW1zZy0+cnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzNFtSUENCUFJPQ19VTlNFVF07CiAKLQlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzQsIG1zZyk7CisJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChycGNiX2xvY2FsX2NsbnQ0LCBtc2cpOwogfQogCiAvKioKQEAgLTQxNCw2ICs0NTMsMTMgQEAKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewogCQkucnBjX2FyZ3AJPSAmbWFwLAogCX07CisJaW50IGVycm9yOworCisJZXJyb3IgPSBycGNiX2NyZWF0ZV9sb2NhbCgpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWlmIChycGNiX2xvY2FsX2NsbnQ0ID09IE5VTEwpCisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCiAJaWYgKGFkZHJlc3MgPT0gTlVMTCkKIAkJcmV0dXJuIHJwY2JfdW5yZWdpc3Rlcl9hbGxfcHJvdG9mYW1pbGllcygmbXNnKTsKQEAgLTQ5MSw3ICs1MzcsNyBAQAogCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJnJwY2JfZ2V0cG9ydF9vcHMsCiAJCS5jYWxsYmFja19kYXRhID0gbWFwLAotCQkuZmxhZ3MgPSBSUENfVEFTS19BU1lOQywKKwkJLmZsYWdzID0gUlBDX1RBU0tfQVNZTkMgfCBSUENfVEFTS19TT0ZUQ09OTiwKIAl9OwogCiAJcmV0dXJuIHJwY19ydW5fdGFzaygmdGFza19zZXR1cF9kYXRhKTsKQEAgLTEwMjcsMyArMTA3MywxNSBAQAogCS52ZXJzaW9uCT0gcnBjYl92ZXJzaW9uLAogCS5zdGF0cwkJPSAmcnBjYl9zdGF0cywKIH07CisKKy8qKgorICogY2xlYW51cF9ycGNiX2NsbnQgLSByZW1vdmUgeHBydHNvY2sncyBzeXNjdGxzLCB1bnJlZ2lzdGVyCisgKgorICovCit2b2lkIGNsZWFudXBfcnBjYl9jbG50KHZvaWQpCit7CisJaWYgKHJwY2JfbG9jYWxfY2xudDQpCisJCXJwY19zaHV0ZG93bl9jbGllbnQocnBjYl9sb2NhbF9jbG50NCk7CisJaWYgKHJwY2JfbG9jYWxfY2xudCkKKwkJcnBjX3NodXRkb3duX2NsaWVudChycGNiX2xvY2FsX2NsbnQpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IGNlZjc0YmEuLmFhZTY5MDcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYworKysgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTIxMCw2ICsyMTAsNyBAQAogewogCV9fcnBjX2luaXRfcHJpb3JpdHlfd2FpdF9xdWV1ZShxdWV1ZSwgcW5hbWUsIFJQQ19OUl9QUklPUklUWSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGNfaW5pdF9wcmlvcml0eV93YWl0X3F1ZXVlKTsKIAogdm9pZCBycGNfaW5pdF93YWl0X3F1ZXVlKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqcXVldWUsIGNvbnN0IGNoYXIgKnFuYW1lKQogewpAQCAtMzg1LDYgKzM4NiwyMCBAQAogfQogCiAvKgorICogVGVzdHMgd2hldGhlciBycGMgcXVldWUgaXMgZW1wdHkKKyAqLworaW50IHJwY19xdWV1ZV9lbXB0eShzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKnF1ZXVlKQoreworCWludCByZXM7CisKKwlzcGluX2xvY2tfYmgoJnF1ZXVlLT5sb2NrKTsKKwlyZXMgPSBxdWV1ZS0+cWxlbjsKKwlzcGluX3VubG9ja19iaCgmcXVldWUtPmxvY2spOworCXJldHVybiAocmVzID09IDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnBjX3F1ZXVlX2VtcHR5KTsKKworLyoKICAqIFdha2UgdXAgYSB0YXNrIG9uIGEgc3BlY2lmaWMgcXVldWUKICAqLwogdm9pZCBycGNfd2FrZV91cF9xdWV1ZWRfdGFzayhzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMgYi9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKaW5kZXggOGNjZTkyMS4uZjQzODM0NyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCisrKyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwpAQCAtMjQsNiArMjQsOCBAQAogCiBleHRlcm4gc3RydWN0IGNhY2hlX2RldGFpbCBpcF9tYXBfY2FjaGUsIHVuaXhfZ2lkX2NhY2hlOwogCitleHRlcm4gdm9pZCBjbGVhbnVwX3JwY2JfY2xudCh2b2lkKTsKKwogc3RhdGljIGludCBfX2luaXQKIGluaXRfc3VucnBjKHZvaWQpCiB7CkBAIC01Myw2ICs1NSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIGNsZWFudXBfc3VucnBjKHZvaWQpCiB7CisJY2xlYW51cF9ycGNiX2NsbnQoKTsKIAlycGNhdXRoX3JlbW92ZV9tb2R1bGUoKTsKIAljbGVhbnVwX3NvY2tldF94cHJ0KCk7CiAJc3ZjX2NsZWFudXBfeHBydF9zb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggYjg0NWUyMi4uMWM5MjRlZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtMTYsOCArMTYsNiBAQAogCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDWFBSVAogCi0jZGVmaW5lIFNWQ19NQVhfV0FLSU5HIDUKLQogc3RhdGljIHN0cnVjdCBzdmNfZGVmZXJyZWRfcmVxICpzdmNfZGVmZXJyZWRfZGVxdWV1ZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpOwogc3RhdGljIGludCBzdmNfZGVmZXJyZWRfcmVjdihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTsKIHN0YXRpYyBzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxICpzdmNfZGVmZXIoc3RydWN0IGNhY2hlX3JlcSAqcmVxKTsKQEAgLTMwNiw3ICszMDQsNiBAQAogCXN0cnVjdCBzdmNfcG9vbCAqcG9vbDsKIAlzdHJ1Y3Qgc3ZjX3Jxc3QJKnJxc3RwOwogCWludCBjcHU7Ci0JaW50IHRocmVhZF9hdmFpbDsKIAogCWlmICghKHhwcnQtPnhwdF9mbGFncyAmCiAJICAgICAgKCgxPDxYUFRfQ09OTil8KDE8PFhQVF9EQVRBKXwoMTw8WFBUX0NMT1NFKXwoMTw8WFBUX0RFRkVSUkVEKSkpKQpAQCAtMzE4LDYgKzMxNSwxMiBAQAogCiAJc3Bpbl9sb2NrX2JoKCZwb29sLT5zcF9sb2NrKTsKIAorCWlmICghbGlzdF9lbXB0eSgmcG9vbC0+c3BfdGhyZWFkcykgJiYKKwkgICAgIWxpc3RfZW1wdHkoJnBvb2wtPnNwX3NvY2tldHMpKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJzdmNfeHBydF9lbnF1ZXVlOiAiCisJCSAgICAgICAidGhyZWFkcyBhbmQgdHJhbnNwb3J0cyBib3RoIHdhaXRpbmc/P1xuIik7CisKIAlpZiAodGVzdF9iaXQoWFBUX0RFQUQsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CiAJCS8qIERvbid0IGVucXVldWUgZGVhZCB0cmFuc3BvcnRzICovCiAJCWRwcmludGsoInN2YzogdHJhbnNwb3J0ICVwIGlzIGRlYWQsIG5vdCBlbnF1ZXVlZFxuIiwgeHBydCk7CkBAIC0zNTgsMTUgKzM2MSw3IEBACiAJfQogCiAgcHJvY2VzczoKLQkvKiBXb3JrIG91dCB3aGV0aGVyIHRocmVhZHMgYXJlIGF2YWlsYWJsZSAqLwotCXRocmVhZF9hdmFpbCA9ICFsaXN0X2VtcHR5KCZwb29sLT5zcF90aHJlYWRzKTsJLyogdGhyZWFkcyBhcmUgYXNsZWVwICovCi0JaWYgKHBvb2wtPnNwX253YWtpbmcgPj0gU1ZDX01BWF9XQUtJTkcpIHsKLQkJLyogdG9vIG1hbnkgdGhyZWFkcyBhcmUgcnVubmFibGUgYW5kIHRyeWluZyB0byB3YWtlIHVwICovCi0JCXRocmVhZF9hdmFpbCA9IDA7Ci0JCXBvb2wtPnNwX3N0YXRzLm92ZXJsb2Fkc19hdm9pZGVkKys7Ci0JfQotCi0JaWYgKHRocmVhZF9hdmFpbCkgeworCWlmICghbGlzdF9lbXB0eSgmcG9vbC0+c3BfdGhyZWFkcykpIHsKIAkJcnFzdHAgPSBsaXN0X2VudHJ5KHBvb2wtPnNwX3RocmVhZHMubmV4dCwKIAkJCQkgICBzdHJ1Y3Qgc3ZjX3Jxc3QsCiAJCQkJICAgcnFfbGlzdCk7CkBAIC0zODEsOCArMzc2LDYgQEAKIAkJc3ZjX3hwcnRfZ2V0KHhwcnQpOwogCQlycXN0cC0+cnFfcmVzZXJ2ZWQgPSBzZXJ2LT5zdl9tYXhfbWVzZzsKIAkJYXRvbWljX2FkZChycXN0cC0+cnFfcmVzZXJ2ZWQsICZ4cHJ0LT54cHRfcmVzZXJ2ZWQpOwotCQlycXN0cC0+cnFfd2FraW5nID0gMTsKLQkJcG9vbC0+c3Bfbndha2luZysrOwogCQlwb29sLT5zcF9zdGF0cy50aHJlYWRzX3dva2VuKys7CiAJCUJVR19PTih4cHJ0LT54cHRfcG9vbCAhPSBwb29sKTsKIAkJd2FrZV91cCgmcnFzdHAtPnJxX3dhaXQpOwpAQCAtNjUxLDExICs2NDQsNiBAQAogCQlyZXR1cm4gLUVJTlRSOwogCiAJc3Bpbl9sb2NrX2JoKCZwb29sLT5zcF9sb2NrKTsKLQlpZiAocnFzdHAtPnJxX3dha2luZykgewotCQlycXN0cC0+cnFfd2FraW5nID0gMDsKLQkJcG9vbC0+c3Bfbndha2luZy0tOwotCQlCVUdfT04ocG9vbC0+c3Bfbndha2luZyA8IDApOwotCX0KIAl4cHJ0ID0gc3ZjX3hwcnRfZGVxdWV1ZShwb29sKTsKIAlpZiAoeHBydCkgewogCQlycXN0cC0+cnFfeHBydCA9IHhwcnQ7CkBAIC0xMjA0LDE2ICsxMTkyLDE1IEBACiAJc3RydWN0IHN2Y19wb29sICpwb29sID0gcDsKIAogCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHV0cyhtLCAiIyBwb29sIHBhY2tldHMtYXJyaXZlZCBzb2NrZXRzLWVucXVldWVkIHRocmVhZHMtd29rZW4gb3ZlcmxvYWRzLWF2b2lkZWQgdGhyZWFkcy10aW1lZG91dFxuIik7CisJCXNlcV9wdXRzKG0sICIjIHBvb2wgcGFja2V0cy1hcnJpdmVkIHNvY2tldHMtZW5xdWV1ZWQgdGhyZWFkcy13b2tlbiB0aHJlYWRzLXRpbWVkb3V0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jc2VxX3ByaW50ZihtLCAiJXUgJWx1ICVsdSAlbHUgJWx1ICVsdVxuIiwKKwlzZXFfcHJpbnRmKG0sICIldSAlbHUgJWx1ICVsdSAlbHVcbiIsCiAJCXBvb2wtPnNwX2lkLAogCQlwb29sLT5zcF9zdGF0cy5wYWNrZXRzLAogCQlwb29sLT5zcF9zdGF0cy5zb2NrZXRzX3F1ZXVlZCwKIAkJcG9vbC0+c3Bfc3RhdHMudGhyZWFkc193b2tlbiwKLQkJcG9vbC0+c3Bfc3RhdHMub3ZlcmxvYWRzX2F2b2lkZWQsCiAJCXBvb2wtPnNwX3N0YXRzLnRocmVhZHNfdGltZWRvdXQpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwppbmRleCA0YThmNjU1Li5kOGMwNDExIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKQEAgLTY1NSwyMyArNjU1LDI1IEBACiAJCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IHVuaXhfZ2lkX2ZpbmQodWlkX3QgdWlkLCBzdHJ1Y3QgZ3JvdXBfaW5mbyAqKmdpcCwKLQkJCSBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQorc3RhdGljIHN0cnVjdCBncm91cF9pbmZvICp1bml4X2dpZF9maW5kKHVpZF90IHVpZCwgc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlzdHJ1Y3QgdW5peF9naWQgKnVnID0gdW5peF9naWRfbG9va3VwKHVpZCk7CisJc3RydWN0IHVuaXhfZ2lkICp1ZzsKKwlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ2k7CisJaW50IHJldDsKKworCXVnID0gdW5peF9naWRfbG9va3VwKHVpZCk7CiAJaWYgKCF1ZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0Jc3dpdGNoIChjYWNoZV9jaGVjaygmdW5peF9naWRfY2FjaGUsICZ1Zy0+aCwgJnJxc3RwLT5ycV9jaGFuZGxlKSkgeworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwlyZXQgPSBjYWNoZV9jaGVjaygmdW5peF9naWRfY2FjaGUsICZ1Zy0+aCwgJnJxc3RwLT5ycV9jaGFuZGxlKTsKKwlzd2l0Y2ggKHJldCkgewogCWNhc2UgLUVOT0VOVDoKLQkJKmdpcCA9IE5VTEw7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAljYXNlIDA6Ci0JCSpnaXAgPSB1Zy0+Z2k7Ci0JCWdldF9ncm91cF9pbmZvKCpnaXApOworCQlnaSA9IGdldF9ncm91cF9pbmZvKHVnLT5naSk7CiAJCWNhY2hlX3B1dCgmdWctPmgsICZ1bml4X2dpZF9jYWNoZSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZ2k7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FQUdBSU47CisJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwogCX0KIH0KIApAQCAtNjgxLDYgKzY4Myw4IEBACiAJc3RydWN0IHNvY2thZGRyX2luICpzaW47CiAJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgc2luNl9zdG9yYWdlOwogCXN0cnVjdCBpcF9tYXAgKmlwbTsKKwlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ2k7CisJc3RydWN0IHN2Y19jcmVkICpjcmVkID0gJnJxc3RwLT5ycV9jcmVkOwogCiAJc3dpdGNoIChycXN0cC0+cnFfYWRkci5zc19mYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6CkBAIC03MjEsNiArNzI1LDE3IEBACiAJCQlpcF9tYXBfY2FjaGVkX3B1dChycXN0cCwgaXBtKTsKIAkJCWJyZWFrOwogCX0KKworCWdpID0gdW5peF9naWRfZmluZChjcmVkLT5jcl91aWQsIHJxc3RwKTsKKwlzd2l0Y2ggKFBUUl9FUlIoZ2kpKSB7CisJY2FzZSAtRUFHQUlOOgorCQlyZXR1cm4gU1ZDX0RST1A7CisJY2FzZSAtRU5PRU5UOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwdXRfZ3JvdXBfaW5mbyhjcmVkLT5jcl9ncm91cF9pbmZvKTsKKwkJY3JlZC0+Y3JfZ3JvdXBfaW5mbyA9IGdpOworCX0KIAlyZXR1cm4gU1ZDX09LOwogfQogCkBAIC04MTcsMTkgKzgzMiwxMSBAQAogCXNsZW4gPSBzdmNfZ2V0bmwoYXJndik7CQkJLyogZ2lkcyBsZW5ndGggKi8KIAlpZiAoc2xlbiA+IDE2IHx8IChsZW4gLT0gKHNsZW4gKyAyKSo0KSA8IDApCiAJCWdvdG8gYmFkY3JlZDsKLQlpZiAodW5peF9naWRfZmluZChjcmVkLT5jcl91aWQsICZjcmVkLT5jcl9ncm91cF9pbmZvLCBycXN0cCkKLQkgICAgPT0gLUVBR0FJTikKKwljcmVkLT5jcl9ncm91cF9pbmZvID0gZ3JvdXBzX2FsbG9jKHNsZW4pOworCWlmIChjcmVkLT5jcl9ncm91cF9pbmZvID09IE5VTEwpCiAJCXJldHVybiBTVkNfRFJPUDsKLQlpZiAoY3JlZC0+Y3JfZ3JvdXBfaW5mbyA9PSBOVUxMKSB7Ci0JCWNyZWQtPmNyX2dyb3VwX2luZm8gPSBncm91cHNfYWxsb2Moc2xlbik7Ci0JCWlmIChjcmVkLT5jcl9ncm91cF9pbmZvID09IE5VTEwpCi0JCQlyZXR1cm4gU1ZDX0RST1A7Ci0JCWZvciAoaSA9IDA7IGkgPCBzbGVuOyBpKyspCi0JCQlHUk9VUF9BVChjcmVkLT5jcl9ncm91cF9pbmZvLCBpKSA9IHN2Y19nZXRubChhcmd2KTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgc2xlbiA7IGkrKykKLQkJCXN2Y19nZXRubChhcmd2KTsKLQl9CisJZm9yIChpID0gMDsgaSA8IHNsZW47IGkrKykKKwkJR1JPVVBfQVQoY3JlZC0+Y3JfZ3JvdXBfaW5mbywgaSkgPSBzdmNfZ2V0bmwoYXJndik7CiAJaWYgKHN2Y19nZXR1MzIoYXJndikgIT0gaHRvbmwoUlBDX0FVVEhfTlVMTCkgfHwgc3ZjX2dldHUzMihhcmd2KSAhPSAwKSB7CiAJCSphdXRocCA9IHJwY19hdXRoZXJyX2JhZHZlcmY7CiAJCXJldHVybiBTVkNfREVOSUVEOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCBmZDQ2ZDQyLi40NjlkZTI5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtNzAwLDYgKzcwMCwxMCBAQAogCX0KIAlpZiAoIXhwcnRfbG9ja193cml0ZSh4cHJ0LCB0YXNrKSkKIAkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSkpCisJCXhwcnQtPm9wcy0+Y2xvc2UoeHBydCk7CisKIAlpZiAoeHBydF9jb25uZWN0ZWQoeHBydCkpCiAJCXhwcnRfcmVsZWFzZV93cml0ZSh4cHJ0LCB0YXNrKTsKIAllbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCAwNDczMmQwLi4zZDczOWU1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC0yMDE5LDcgKzIwMTksNyBAQAogCWlmICh4cHJ0X3Rlc3RfYW5kX3NldF9jb25uZWN0aW5nKHhwcnQpKQogCQlyZXR1cm47CiAKLQlpZiAodHJhbnNwb3J0LT5zb2NrICE9IE5VTEwpIHsKKwlpZiAodHJhbnNwb3J0LT5zb2NrICE9IE5VTEwgJiYgIVJQQ19JU19TT0ZUQ09OTih0YXNrKSkgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX2Nvbm5lY3QgZGVsYXllZCB4cHJ0ICVwIGZvciAlbHUgIgogCQkJCSJzZWNvbmRzXG4iLAogCQkJCXhwcnQsIHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgLyBIWik7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9LY29uZmlnIGIvbmV0L3RpcGMvS2NvbmZpZwppbmRleCAzYjMwZDExLi5kYWZiZDUzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9LY29uZmlnCisrKyBiL25ldC90aXBjL0tjb25maWcKQEAgLTMzLDYgKzMzLDcgQEAKIGNvbmZpZyBUSVBDX1pPTkVTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiB6b25lcyBpbiBuZXR3b3JrIgogCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAorCXJhbmdlIDEgMjU1CiAJZGVmYXVsdCAiMyIKIAloZWxwCiAJIE1heCBudW1iZXIgb2Ygem9uZXMgaW5zaWRlIFRJUEMgbmV0d29yay4gTWF4IHN1cHBvcnRlZCB2YWx1ZSAKQEAgLTQ0LDEwICs0NSwxMCBAQAogY29uZmlnIFRJUENfQ0xVU1RFUlMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIGNsdXN0ZXJzIGluIGEgem9uZSIKIAlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKKwlyYW5nZSAxIDEKIAlkZWZhdWx0ICIxIgogCWhlbHAKLSAgICAgICAgICAqKipPbmx5IDEgKG9uZSBjbHVzdGVyIGluIGEgem9uZSkgaXMgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgY29kZS4KLSAgICAgICAgICBBbnkgdmFsdWUgc2V0IGhlcmUgd2lsbCBiZSBvdmVycmlkZGVuLioqKgorICAgICAgICAgICoqKk9ubHkgMSAob25lIGNsdXN0ZXIgaW4gYSB6b25lKSBpcyBzdXBwb3J0ZWQgYnkgY3VycmVudCBjb2RlLioqKgogCiAgICAgICAgICAgKE1heCBudW1iZXIgb2YgY2x1c3RlcnMgaW5zaWRlIFRJUEMgem9uZS4gTWF4IHN1cHBvcnRlZCAKICAgICAgICAgICB2YWx1ZSBpcyA0MDk1IGNsdXN0ZXJzLCBtaW5pbXVtIGlzIDEuCkBAIC01OSw2ICs2MCw3IEBACiBjb25maWcgVElQQ19OT0RFUwogCWludCAiTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW4gY2x1c3RlciIKIAlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKKwlyYW5nZSA4IDIwNDcKIAlkZWZhdWx0ICIyNTUiCiAJaGVscAogCSAgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW5zaWRlIGEgVElQQyBjbHVzdGVyLiBNYXhpbXVtIApAQCAtNzAsNiArNzIsNyBAQAogY29uZmlnIFRJUENfU0xBVkVfTk9ERVMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHNsYXZlIG5vZGVzIGluIGNsdXN0ZXIiCiAJZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECisJcmFuZ2UgMCAyMDQ3CiAJZGVmYXVsdCAiMCIKIAloZWxwCiAgICAgICAgICAgKioqVGhpcyBjYXBhYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgY3VycmVudCBjb2RlLioqKgpAQCAtODMsNiArODYsNyBAQAogY29uZmlnIFRJUENfUE9SVFMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHBvcnRzIGluIGEgbm9kZSIKIAlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKKwlyYW5nZSAyMTcgNjU1MzYKIAlkZWZhdWx0ICI4MTkxIgogCWhlbHAKIAkgIE1heGltdW0gbnVtYmVyIG9mIHBvcnRzIHdpdGhpbiBhIG5vZGUuIE1heGltdW0gCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmMKaW5kZXggMzI1NmJkNy4uNTJjNTcxZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5jCisrKyBiL25ldC90aXBjL2NvcmUuYwpAQCAtMTg5LDExICsxODksMTEgQEAKIAl0aXBjX3JlbW90ZV9tYW5hZ2VtZW50ID0gMTsKIAl0aXBjX21heF9wdWJsaWNhdGlvbnMgPSAxMDAwMDsKIAl0aXBjX21heF9zdWJzY3JpcHRpb25zID0gMjAwMDsKLQl0aXBjX21heF9wb3J0cyA9IGRlbGltaXQoQ09ORklHX1RJUENfUE9SVFMsIDEyNywgNjU1MzYpOwotCXRpcGNfbWF4X3pvbmVzID0gZGVsaW1pdChDT05GSUdfVElQQ19aT05FUywgMSwgMjU1KTsKLQl0aXBjX21heF9jbHVzdGVycyA9IGRlbGltaXQoQ09ORklHX1RJUENfQ0xVU1RFUlMsIDEsIDEpOwotCXRpcGNfbWF4X25vZGVzID0gZGVsaW1pdChDT05GSUdfVElQQ19OT0RFUywgOCwgMjA0Nyk7Ci0JdGlwY19tYXhfc2xhdmVzID0gZGVsaW1pdChDT05GSUdfVElQQ19TTEFWRV9OT0RFUywgMCwgMjA0Nyk7CisJdGlwY19tYXhfcG9ydHMgPSBDT05GSUdfVElQQ19QT1JUUzsKKwl0aXBjX21heF96b25lcyA9IENPTkZJR19USVBDX1pPTkVTOworCXRpcGNfbWF4X2NsdXN0ZXJzID0gQ09ORklHX1RJUENfQ0xVU1RFUlM7CisJdGlwY19tYXhfbm9kZXMgPSBDT05GSUdfVElQQ19OT0RFUzsKKwl0aXBjX21heF9zbGF2ZXMgPSBDT05GSUdfVElQQ19TTEFWRV9OT0RFUzsKIAl0aXBjX25ldF9pZCA9IDQ3MTE7CiAKIAlpZiAoKHJlcyA9IHRpcGNfY29yZV9zdGFydCgpKSkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy8uZ2l0aWdub3JlIGIvbmV0L3dpcmVsZXNzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNDUxYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3JlZ2RiLmMKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9LY29uZmlnIGIvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggOTBlOTNhNS4uZDBlZTI5MCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTk0LDIwICs5NCwyMSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKLQlib29sICJPbGQgd2lyZWxlc3Mgc3RhdGljIHJlZ3VsYXRvcnkgZGVmaW5pdGlvbnMiCitjb25maWcgQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIKKwlib29sICJ1c2Ugc3RhdGljYWxseSBjb21waWxlZCByZWd1bGF0b3J5IHJ1bGVzIGRhdGFiYXNlIiBpZiBFTUJFRERFRAogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gQ0ZHODAyMTEKIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBvbGQgc3RhdGljIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24KLQkgIGFuZCB1c2VzIGl0IHdpdGhpbiB0aGUgbmV3IGZyYW1ld29yay4gVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlCi0JICBmb3IgaGlzdG9yaWNhbCByZWFzb25zIGFuZCBpdCBpcyBhZHZpc2VkIHRvIGxlYXZlIGl0IG9mZi4KKwkgIFRoaXMgb3B0aW9uIGdlbmVyYXRlcyBhbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcKKwkgIHRoZSB3aXJlbGVzcyByZWd1bGF0b3J5IHJ1bGVzIGRlc2NyaWJlZCBpbiBuZXQvd2lyZWxlc3MvZGIudHh0CisJICBhbmQgaW5jbHVkZXMgY29kZSB0byBxdWVyeSB0aGF0IGRhdGFiYXNlLiAgVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZQorCSAgdG8gdXNpbmcgQ1JEQSBmb3IgZGVmaW5pbmcgcmVndWxhdG9yeSBydWxlcyBmb3IgdGhlIGtlcm5lbC4KIAogCSAgRm9yIGRldGFpbHMgc2VlOgogCiAJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL1JlZ3VsYXRvcnkKIAotCSAgU2F5IE4gYW5kIGlmIHlvdSBzYXkgWSwgcGxlYXNlIHRlbGwgdXMgd2h5LiBUaGUgZGVmYXVsdCBpcyBOLgorCSAgTW9zdCBkaXN0cmlidXRpb25zIGhhdmUgYSBDUkRBIHBhY2thZ2UuICBTbyBpZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ0ZHODAyMTFfV0VYVAogCWJvb2wgImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eSIKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCBmMDdjOGRjLi5lNzdlNTA4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC0xMyw1ICsxMywxMSBAQAogY2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8KIGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0RFQlVHRlMpICs9IGRlYnVnZnMubwogY2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfV0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vCitjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQikgKz0gcmVnZGIubwogCiBjY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCisKKyQob2JqKS9yZWdkYi5jOiAkKHNyYykvZGIudHh0ICQoc3JjKS9nZW5yZWdkYi5hd2sKKwlAJChBV0spIC1mICQoc3JjdHJlZSkvJChzcmMpL2dlbnJlZ2RiLmF3ayA8ICQ8ID4gJEAKKworY2xlYW4tZmlsZXMgOj0gcmVnZGIuYwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NoYW4uYyBiL25ldC93aXJlbGVzcy9jaGFuLmMKaW5kZXggYTQ2YWM2Yy4uYmYxNzM3ZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NoYW4uYworKysgYi9uZXQvd2lyZWxlc3MvY2hhbi5jCkBAIC00MSwxMiArNDEsNDUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKgorcmRldl9mcmVxX3RvX2NoYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgIGludCBmcmVxLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXA7CisKKwljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgZnJlcSk7CisKKwkvKiBQcmltYXJ5IGNoYW5uZWwgbm90IGFsbG93ZWQgKi8KKwlpZiAoIWNoYW4gfHwgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgJiYKKwkgICAgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpCisJCXJldHVybiBOVUxMOworCWVsc2UgaWYgKGNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgJiYKKwkJIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0MFBMVVMpCisJCXJldHVybiBOVUxMOworCisJaHRfY2FwID0gJnJkZXYtPndpcGh5LmJhbmRzW2NoYW4tPmJhbmRdLT5odF9jYXA7CisKKwlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkgeworCQlpZiAoIWh0X2NhcC0+aHRfc3VwcG9ydGVkKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKCEoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgfHwKKwkJICAgIGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNoYW47Cit9CisKIGludCByZGV2X3NldF9mcmVxKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpmb3Jfd2RldiwKIAkJICBpbnQgZnJlcSwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwOwogCWludCByZXN1bHQ7CiAKIAlpZiAocmRldl9maXhlZF9jaGFubmVsKHJkZXYsIGZvcl93ZGV2KSkKQEAgLTU1LDMwICs4OCwxMCBAQAogCWlmICghcmRldi0+b3BzLT5zZXRfY2hhbm5lbCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgmcmRldi0+d2lwaHksIGZyZXEpOwotCi0JLyogUHJpbWFyeSBjaGFubmVsIG5vdCBhbGxvd2VkICovCi0JaWYgKCFjaGFuIHx8IGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJY2hhbiA9IHJkZXZfZnJlcV90b19jaGFuKHJkZXYsIGZyZXEsIGNoYW5uZWxfdHlwZSk7CisJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyAmJgotCSAgICBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSBpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUyAmJgotCQkgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlodF9jYXAgPSAmcmRldi0+d2lwaHkuYmFuZHNbY2hhbi0+YmFuZF0tPmh0X2NhcDsKLQotCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUKSB7Ci0JCWlmICghaHRfY2FwLT5odF9zdXBwb3J0ZWQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIShodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB8fAotCQkgICAgaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXN1bHQgPSByZGV2LT5vcHMtPnNldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgY2hhbiwgY2hhbm5lbF90eXBlKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggNGVmM2VmYy4uMzBlYzk1ZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC0zNzQsMTAgKzM3NCwxNSBAQAogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoKIHJkZXZfZml4ZWRfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKmZvcl93ZGV2KTsKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCityZGV2X2ZyZXFfdG9fY2hhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKIGludCByZGV2X3NldF9mcmVxKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpmb3Jfd2RldiwKIAkJICBpbnQgZnJlcSwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOwogCit1MTYgY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoc3RydWN0IHJhdGVfaW5mbyAqcmF0ZSk7CisKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTCiAjZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpCVdBUk5fT04oY29uZCkKICNlbHNlCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvZGIudHh0IGIvbmV0L3dpcmVsZXNzL2RiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmZjM2EwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL2RiLnR4dApAQCAtMCwwICsxLDE3IEBACisjCisjIFRoaXMgZmlsZSBpcyBhIHBsYWNlaG9sZGVyIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBidWlsZCBicmVha2FnZSBpZiBzb21lb25lCisjIGVuYWJsZXMgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCLiAgQWxtb3N0IG5vIG9uZSBhY3R1YWxseSBuZWVkcyB0bworIyBlbmFibGUgdGhhdCBidWlsZCBvcHRpb24uCisjCisjIFlvdSBzaG91bGQgYmUgdXNpbmcgQ1JEQSBpbnN0ZWFkLiAgSXQgaXMgZXZlbiBiZXR0ZXIgaWYgeW91IHVzZSB0aGUgQ1JEQQorIyBwYWNrYWdlIHByb3ZpZGVkIGJ5IHlvdXIgZGlzdHJpYnV0aW9uLCBzaW5jZSB0aGV5IHdpbGwgcHJvYmFibHkga2VlcCBpdAorIyB1cC10by1kYXRlIG9uIHlvdXIgYmVoYWxmLgorIworIyBJZiB5b3UgX3JlYWxseV8gaW50ZW5kIHRvIHVzZSBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgdGhlbiB5b3Ugd2lsbAorIyBuZWVkIHRvIHJlcGxhY2UgdGhpcyBmaWxlIHdpdGggb25lIGNvbnRhaW5pbmcgYXBwcm9wcmlhdGVseSBmb3JtYXR0ZWQKKyMgcmVndWxhdG9yeSBydWxlcyB0aGF0IGNvdmVyIHRoZSByZWd1bGF0b3J5IGRvbWFpbnMgeW91IHdpbGwgYmUgdXNpbmcuICBZb3VyCisjIGJlc3Qgb3B0aW9uIGlzIHRvIGV4dHJhY3QgdGhlIGRiLnR4dCBmaWxlIGZyb20gdGhlIHdpcmVsZXNzLXJlZ2RiIGdpdAorIyByZXBvc2l0b3J5OgorIworIyAgIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy1yZWdkYi5naXQKKyMKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9nZW5yZWdkYi5hd2sgYi9uZXQvd2lyZWxlc3MvZ2VucmVnZGIuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzllNjkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3MvZ2VucmVnZGIuYXdrCkBAIC0wLDAgKzEsMTE4IEBACisjIS91c3IvYmluL2F3ayAtZgorIworIyBnZW5yZWdkYi5hd2sgLS0gZ2VuZXJhdGUgcmVnZGIuYyBmcm9tIGRiLnR4dAorIworIyBBY3R1YWxseSwgaXQgcmVhZHMgZnJvbSBzdGRpbiAocHJlc3VtZWQgdG8gYmUgZGIudHh0KSBhbmQgd3JpdGVzCisjIHRvIHN0ZG91dCAocHJlc3VtZWQgdG8gYmUgcmVnZGIuYyksIGJ1dCBjbG9zZSBlbm91Z2guLi4KKyMKKyMgQ29weXJpZ2h0IDIwMDkgSm9obiBXLiBMaW52aWxsZSA8bGludmlsbGVAdHV4ZHJpdmVyLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisKK0JFR0lOIHsKKwlhY3RpdmUgPSAwCisJcnVsZXMgPSAwOworCXByaW50ICIvKiIKKwlwcmludCAiICogRE8gTk9UIEVESVQgLS0gZmlsZSBnZW5lcmF0ZWQgZnJvbSBkYXRhIGluIGRiLnR4dCIKKwlwcmludCAiICovIgorCXByaW50ICIiCisJcHJpbnQgIiNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+IgorCXByaW50ICIjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+IgorCXByaW50ICIiCisJcmVnZGIgPSAiY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ19yZWdkYltdID0ge1xuIgorfQorCisvXlsgXHRdKiMvIHsKKwkjIElnbm9yZQorfQorCishYWN0aXZlICYmIC9eWyBcdF0qJC8geworCSMgSWdub3JlCit9CisKKyFhY3RpdmUgJiYgL2NvdW50cnkvIHsKKwljb3VudHJ5PSQyCisJc3ViKC86LywgIiIsIGNvdW50cnkpCisJcHJpbnRmICJzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcmVnZG9tXyVzID0ge1xuIiwgY291bnRyeQorCXByaW50ZiAiXHQuYWxwaGEyID0gXCIlc1wiLFxuIiwgY291bnRyeQorCXByaW50ZiAiXHQucmVnX3J1bGVzID0ge1xuIgorCWFjdGl2ZSA9IDEKKwlyZWdkYiA9IHJlZ2RiICJcdCZyZWdkb21fIiBjb3VudHJ5ICIsXG4iCit9CisKK2FjdGl2ZSAmJiAvXlsgXHRdKlwoLyB7CisJc3RhcnQgPSAkMQorCXN1YigvXCgvLCAiIiwgc3RhcnQpCisJZW5kID0gJDMKKwlidyA9ICQ1CisJc3ViKC9cKSwvLCAiIiwgYncpCisJZ2FpbiA9ICQ2CisJc3ViKC9cKC8sICIiLCBnYWluKQorCXN1YigvLC8sICIiLCBnYWluKQorCXBvd2VyID0gJDcKKwlzdWIoL1wpLywgIiIsIHBvd2VyKQorCXN1YigvLC8sICIiLCBwb3dlcikKKwkjIHBvd2VyIG1pZ2h0IGJlIGluIG1XLi4uCisJdW5pdHMgPSAkOAorCXN1YigvXCkvLCAiIiwgdW5pdHMpCisJc3ViKC8sLywgIiIsIHVuaXRzKQorCWlmICh1bml0cyA9PSAibVciKSB7CisJCWlmIChwb3dlciA9PSAxMDApIHsKKwkJCXBvd2VyID0gMjAKKwkJfSBlbHNlIGlmIChwb3dlciA9PSAyMDApIHsKKwkJCXBvd2VyID0gMjMKKwkJfSBlbHNlIGlmIChwb3dlciA9PSA1MDApIHsKKwkJCXBvd2VyID0gMjcKKwkJfSBlbHNlIGlmIChwb3dlciA9PSAxMDAwKSB7CisJCQlwb3dlciA9IDMwCisJCX0gZWxzZSB7CisJCQlwcmludCAiVW5rbm93biBwb3dlciB2YWx1ZSBpbiBkYXRhYmFzZSEiCisJCX0KKwl9CisJZmxhZ3N0ciA9ICIiCisJZm9yIChpPTg7IGk8PU5GOyBpKyspCisJCWZsYWdzdHIgPSBmbGFnc3RyICRpCisJc3BsaXQoZmxhZ3N0ciwgZmxhZ2FycmF5LCAiLCIpCisJZmxhZ3MgPSAiIgorCWZvciAoYXJnIGluIGZsYWdhcnJheSkgeworCQlpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIk5PLU9GRE0iKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX05PX09GRE0gfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIk5PLUNDSyIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfTk9fQ0NLIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJOTy1JTkRPT1IiKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX05PX0lORE9PUiB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiTk8tT1VURE9PUiIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfTk9fT1VURE9PUiB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiREZTIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9ERlMgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIlBUUC1PTkxZIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9QVFBfT05MWSB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiUFRNUC1PTkxZIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9QVE1QX09OTFkgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIlBBU1NJVkUtU0NBTiIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJOTy1JQlNTIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9OT19JQlNTIHwgIgorCQl9CisJfQorCWZsYWdzID0gZmxhZ3MgIjAiCisJcHJpbnRmICJcdFx0UkVHX1JVTEUoJWQsICVkLCAlZCwgJWQsICVkLCAlcyksXG4iLCBzdGFydCwgZW5kLCBidywgZ2FpbiwgcG93ZXIsIGZsYWdzCisJcnVsZXMrKworfQorCithY3RpdmUgJiYgL15bIFx0XSokLyB7CisJYWN0aXZlID0gMAorCXByaW50ZiAiXHR9LFxuIgorCXByaW50ZiAiXHQubl9yZWdfcnVsZXMgPSAlZFxuIiwgcnVsZXMKKwlwcmludGYgIn07XG5cbiIKKwlydWxlcyA9IDA7Cit9CisKK0VORCB7CisJcHJpbnQgcmVnZGIgIn07IgorCXByaW50ICIiCisJcHJpbnQgImludCByZWdfcmVnZGJfc2l6ZSA9IEFSUkFZX1NJWkUocmVnX3JlZ2RiKTsiCit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWxtZS5jIGIvbmV0L3dpcmVsZXNzL21sbWUuYwppbmRleCA4MmU2MDAyLi45NGQxNTFmIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWxtZS5jCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTE0OCwyMiArMTQ4LDIzIEBACiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWJ1ZjsKIAljb25zdCB1OCAqYnNzaWQgPSBtZ210LT5ic3NpZDsKIAlpbnQgaTsKKwlib29sIGZvdW5kID0gZmFsc2U7CiAKIAlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOwogCi0Jbmw4MDIxMV9zZW5kX2RlYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKLQogCWlmICh3ZGV2LT5jdXJyZW50X2JzcyAmJgogCSAgICBtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOwogCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViKTsKIAkJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCQlmb3VuZCA9IHRydWU7CiAJfSBlbHNlIGZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CiAJCWlmICh3ZGV2LT5hdXRoX2Jzc2VzW2ldICYmCiAJCSAgICBtZW1jbXAod2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pID09IDApIHsKIAkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+YXV0aF9ic3Nlc1tpXSk7CiAJCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWIpOwogCQkJd2Rldi0+YXV0aF9ic3Nlc1tpXSA9IE5VTEw7CisJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSAmJgpAQCAtMTcxLDEwICsxNzIsMTYgQEAKIAkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSk7CiAJCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIpOwogCQkJd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSA9IE5VTEw7CisJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCX0KIAorCWlmICghZm91bmQpCisJCXJldHVybjsKKworCW5sODAyMTFfc2VuZF9kZWF1dGgocmRldiwgZGV2LCBidWYsIGxlbiwgR0ZQX0tFUk5FTCk7CisKIAlpZiAod2Rldi0+c21lX3N0YXRlID09IENGRzgwMjExX1NNRV9DT05ORUNURUQpIHsKIAkJdTE2IHJlYXNvbl9jb2RlOwogCQlib29sIGZyb21fYXA7CkBAIC02ODQsMyArNjkxLDQwIEBACiAJCX0KIAl9CiB9CisKK3ZvaWQgY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsKHJkZXYsIGRldiwgY29va2llLCBjaGFuLCBjaGFubmVsX3R5cGUsCisJCQkJICAgICAgIGR1cmF0aW9uLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKTsKKwordm9pZCBjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXU2NCBjb29raWUsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJCWdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsX2NhbmNlbChyZGV2LCBkZXYsIGNvb2tpZSwgY2hhbiwKKwkJCQkJICAgICAgY2hhbm5lbF90eXBlLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKTsKKwordm9pZCBjZmc4MDIxMV9uZXdfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJICAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3N0YV9ldmVudChyZGV2LCBkZXYsIG1hY19hZGRyLCBzaW5mbywgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfbmV3X3N0YSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCBhNjAyODQzLi5lM2JlZTNjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTE0MSw2ICsxNDEsOCBAQAogCVtOTDgwMjExX0FUVFJfNEFERFJdID0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtOTDgwMjExX0FUVFJfUE1LSURdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJIC5sZW4gPSBXTEFOX1BNS0lEX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfRFVSQVRJT05dID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbTkw4MDIxMV9BVFRSX0NPT0tJRV0gPSB7IC50eXBlID0gTkxBX1U2NCB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUgYXR0cmlidXRlcyAqLwpAQCAtNTY5LDYgKzU3MSw3IEBACiAJQ01EKHNldF9wbWtzYSwgU0VUX1BNS1NBKTsKIAlDTUQoZGVsX3Bta3NhLCBERUxfUE1LU0EpOwogCUNNRChmbHVzaF9wbWtzYSwgRkxVU0hfUE1LU0EpOworCUNNRChyZW1haW5fb25fY2hhbm5lbCwgUkVNQUlOX09OX0NIQU5ORUwpOwogCWlmIChkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19ORVROU19PSykgewogCQlpKys7CiAJCU5MQV9QVVRfVTMyKG1zZywgaSwgTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TKTsKQEAgLTE2MzcsNDIgKzE2NDAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IG5sODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoc3RydWN0IHJhdGVfaW5mbyAqcmF0ZSkKLXsKLQlpbnQgbW9kdWxhdGlvbiwgc3RyZWFtcywgYml0cmF0ZTsKLQotCWlmICghKHJhdGUtPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykpCi0JCXJldHVybiByYXRlLT5sZWdhY3k7Ci0KLQkvKiB0aGUgZm9ybXVsYSBiZWxvdyBkb2VzIG9ubHkgd29yayBmb3IgTUNTIHZhbHVlcyBzbWFsbGVyIHRoYW4gMzIgKi8KLQlpZiAocmF0ZS0+bWNzID49IDMyKQotCQlyZXR1cm4gMDsKLQotCW1vZHVsYXRpb24gPSByYXRlLT5tY3MgJiA3OwotCXN0cmVhbXMgPSAocmF0ZS0+bWNzID4+IDMpICsgMTsKLQotCWJpdHJhdGUgPSAocmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfNDBfTUhaX1dJRFRIKSA/Ci0JCQkxMzUwMDAwMCA6IDY1MDAwMDA7Ci0KLQlpZiAobW9kdWxhdGlvbiA8IDQpCi0JCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAxKTsKLQllbHNlIGlmIChtb2R1bGF0aW9uID09IDQpCi0JCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAyKTsKLQllbHNlCi0JCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAzKTsKLQotCWJpdHJhdGUgKj0gc3RyZWFtczsKLQotCWlmIChyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSSkKLQkJYml0cmF0ZSA9IChiaXRyYXRlIC8gOSkgKiAxMDsKLQotCS8qIGRvIE5PVCByb3VuZCBkb3duIGhlcmUgKi8KLQlyZXR1cm4gKGJpdHJhdGUgKyA1MDAwMCkgLyAxMDAwMDA7Ci19Ci0KIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwgdTMyIHNlcSwKIAkJCQlpbnQgZmxhZ3MsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJdTggKm1hY19hZGRyLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKKwkJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXZvaWQgKmhkcjsKIAlzdHJ1Y3QgbmxhdHRyICpzaW5mb2F0dHIsICp0eHJhdGU7CkBAIC0xNzE2LDggKzE2ODYsOCBAQAogCQlpZiAoIXR4cmF0ZSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JCS8qIG5sODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUgd2lsbCByZXR1cm4gMCBmb3IgbWNzID49IDMyICovCi0JCWJpdHJhdGUgPSBubDgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKCZzaW5mby0+dHhyYXRlKTsKKwkJLyogY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUgd2lsbCByZXR1cm4gMCBmb3IgbWNzID49IDMyICovCisJCWJpdHJhdGUgPSBjZmc4MDIxMV9jYWxjdWxhdGVfYml0cmF0ZSgmc2luZm8tPnR4cmF0ZSk7CiAJCWlmIChiaXRyYXRlID4gMCkKIAkJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9SQVRFX0lORk9fQklUUkFURSwgYml0cmF0ZSk7CiAKQEAgLTI1ODMsMTIgKzI1NTMsNiBAQAogCiAJZGF0YSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUdfQUxQSEEyXSk7CiAKLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKLQkvKiBXZSBpZ25vcmUgd29ybGQgcmVnZG9tIHJlcXVlc3RzIHdpdGggdGhlIG9sZCByZWdkb20gc2V0dXAgKi8KLQlpZiAoaXNfd29ybGRfcmVnZG9tKGRhdGEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotCiAJciA9IHJlZ3VsYXRvcnlfaGludF91c2VyKGRhdGEpOwogCiAJcmV0dXJuIHI7CkBAIC00MzIyLDYgKzQyODYsMTQzIEBACiAKIH0KIAorc3RhdGljIGludCBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKwl1NjQgY29va2llOworCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOworCXUzMiBmcmVxLCBkdXJhdGlvbjsKKwlpbnQgZXJyOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0gfHwKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9EVVJBVElPTl0pCisJCXJldHVybiAtRUlOVkFMOworCisJZHVyYXRpb24gPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRFVSQVRJT05dKTsKKworCS8qCisJICogV2Ugc2hvdWxkIGJlIG9uIHRoYXQgY2hhbm5lbCBmb3IgYXQgbGVhc3Qgb25lIGppZmZpZSwKKwkgKiBhbmQgbW9yZSB0aGFuIDUgc2Vjb25kcyBzZWVtcyBleGNlc3NpdmUuCisJICovCisJaWYgKCFkdXJhdGlvbiB8fCAhbXNlY3NfdG9famlmZmllcyhkdXJhdGlvbikgfHwgZHVyYXRpb24gPiA1MDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmICghcmRldi0+b3BzLT5yZW1haW5fb25fY2hhbm5lbCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRV0pIHsKKwkJY2hhbm5lbF90eXBlID0gbmxhX2dldF91MzIoCisJCQlpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFXSk7CisJCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUMjAgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCX0KKworCWZyZXEgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pOworCWNoYW4gPSByZGV2X2ZyZXFfdG9fY2hhbihyZGV2LCBmcmVxLCBjaGFubmVsX3R5cGUpOworCWlmIChjaGFuID09IE5VTEwpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLCAwLAorCQkJICAgICBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCk7CisKKwlpZiAoSVNfRVJSKGhkcikpIHsKKwkJZXJyID0gUFRSX0VSUihoZHIpOworCQlnb3RvIGZyZWVfbXNnOworCX0KKworCWVyciA9IHJkZXYtPm9wcy0+cmVtYWluX29uX2NoYW5uZWwoJnJkZXYtPndpcGh5LCBkZXYsIGNoYW4sCisJCQkJCSAgIGNoYW5uZWxfdHlwZSwgZHVyYXRpb24sICZjb29raWUpOworCisJaWYgKGVycikKKwkJZ290byBmcmVlX21zZzsKKworCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9BVFRSX0NPT0tJRSwgY29va2llKTsKKworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CisJZ290byBvdXQ7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZXJyID0gLUVOT0JVRlM7CisgZnJlZV9tc2c6CisJbmxtc2dfZnJlZShtc2cpOworIG91dDoKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7CisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXU2NCBjb29raWU7CisJaW50IGVycjsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NPT0tJRV0pCisJCXJldHVybiAtRUlOVkFMOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFyZGV2LT5vcHMtPmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwljb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ09PS0lFXSk7CisKKwllcnIgPSByZGV2LT5vcHMtPmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCgmcmRldi0+d2lwaHksIGRldiwgY29va2llKTsKKworIG91dDoKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7CisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtNDU4NCw4ICs0Njg1LDIwIEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCi0KKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKKwkJLmRvaXQgPSBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0NBTkNFTF9SRU1BSU5fT05fQ0hBTk5FTCwKKwkJLmRvaXQgPSBubDgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKIH07CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9tbG1lX21jZ3JwID0gewogCS5uYW1lID0gIm1sbWUiLAogfTsKQEAgLTUxNzMsNiArNTI4Niw4OSBAQAogCW5sbXNnX2ZyZWUobXNnKTsKIH0KIAorc3RhdGljIHZvaWQgbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFuX2V2ZW50KAorCWludCBjbWQsIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgY29va2llLAorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwl1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIGdmcCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgY21kKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsIGNoYW4tPmNlbnRlcl9mcmVxKTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUsIGNoYW5uZWxfdHlwZSk7CisJTkxBX1BVVF9VNjQobXNnLCBOTDgwMjExX0FUVFJfQ09PS0lFLCBjb29raWUpOworCisJaWYgKGNtZCA9PSBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfRFVSQVRJT04sIGR1cmF0aW9uKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworCXJldHVybjsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCBjb29raWUsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgZ2ZwX3QgZ2ZwKQoreworCW5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbl9ldmVudChOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKKwkJCQkJICByZGV2LCBuZXRkZXYsIGNvb2tpZSwgY2hhbiwKKwkJCQkJICBjaGFubmVsX3R5cGUsIGR1cmF0aW9uLCBnZnApOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbm5lbF9jYW5jZWwoCisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXU2NCBjb29raWUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwgZ2ZwX3QgZ2ZwKQoreworCW5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbl9ldmVudChOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUwsCisJCQkJCSAgcmRldiwgbmV0ZGV2LCBjb29raWUsIGNoYW4sCisJCQkJCSAgY2hhbm5lbF90eXBlLCAwLCBnZnApOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9zdGFfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGdmcCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc3RhdGlvbihtc2csIDAsIDAsIDAsIGRldiwgbWFjX2FkZHIsIHNpbmZvKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7Cit9CisKIC8qIGluaXRpYWxpc2F0aW9uL2V4aXQgZnVuY3Rpb25zICovCiAKIGludCBubDgwMjExX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmggYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCmluZGV4IDQ0Y2MyYTcuLjE0ODU1YjggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmgKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaApAQCAtNTksNCArNTksMTkgQEAKIAkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJzc2lkLAogCQkJICAgICBnZnBfdCBnZnApOwogCit2b2lkIG5sODAyMTFfc2VuZF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHU2NCBjb29raWUsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsX2NhbmNlbCgKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJdTY0IGNvb2tpZSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLCBnZnBfdCBnZnApOworCit2b2lkIG5sODAyMTFfc2VuZF9zdGFfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKTsKKwogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IGJhYTg5OGEuLjg3ZWE2MGQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAicmVnZGIuaCIKICNpbmNsdWRlICJubDgwMjExLmgiCiAKIC8qIFJlY2VpcHQgb2YgaW5mb3JtYXRpb24gZnJvbSBsYXN0IHJlZ3VsYXRvcnkgcmVxdWVzdCAqLwpAQCAtMTI4LDc4ICsxMjksNiBAQAogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQotLyoKLSAqIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KLSAqIFdlIG1ha2UgZW1waGFzaXMgd2UgYXJlIHVzaW5nIHRoZSBleGFjdCBzYW1lIGZyZXF1ZW5jaWVzCi0gKiBhcyBiZWZvcmUKLSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gdXNfcmVnZG9tID0gewotCS5uX3JlZ19ydWxlcyA9IDYsCi0JLmFscGhhMiA9ICAiVVMiLAotCS5yZWdfcnVsZXMgPSB7Ci0JCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLwotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjcsIDApLAotCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMzYuLjQ4ICovCi0JCVJFR19SVUxFKDUxODAtMTAsIDUyNDArMTAsIDQwLCA2LCAxNywgMCksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgNDguLjY0ICovCi0JCVJFR19SVUxFKDUyNjAtMTAsIDUzMjArMTAsIDQwLCA2LCAyMCwgTkw4MDIxMV9SUkZfREZTKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyAxMDAuLjEyNCAqLwotCQlSRUdfUlVMRSg1NTAwLTEwLCA1NTkwKzEwLCA0MCwgNiwgMjAsIE5MODAyMTFfUlJGX0RGUyksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMTMyLi4xNDQgKi8KLQkJUkVHX1JVTEUoNTY2MC0xMCwgNTcwMCsxMCwgNDAsIDYsIDIwLCBOTDgwMjExX1JSRl9ERlMpLAotCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDE0OS4uMTY1LCBvdXRkb29yICovCi0JCVJFR19SVUxFKDU3NDUtMTAsIDU4MjUrMTAsIDQwLCA2LCAzMCwgMCksCi0JfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGpwX3JlZ2RvbSA9IHsKLQkubl9yZWdfcnVsZXMgPSA2LAotCS5hbHBoYTIgPSAgIkpQIiwKLQkucmVnX3J1bGVzID0gewotCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMS4uMTEgKi8KLQkJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDYsIDIwLCAwKSwKLQkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEyLi4xMyAqLwotCQlSRUdfUlVMRSgyNDY3LTEwLCAyNDcyKzEwLCAyMCwgNiwgMjAsIDApLAotCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbCAxNCAqLwotCQlSRUdfUlVMRSgyNDg0LTEwLCAyNDg0KzEwLCAyMCwgNiwgMjAsIE5MODAyMTFfUlJGX05PX09GRE0pLAotCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDM2Li40OCAqLwotCQlSRUdfUlVMRSg1MTgwLTEwLCA1MjQwKzEwLCA0MCwgNiwgMjAsIDApLAotCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDUyLi42NCAqLwotCQlSRUdfUlVMRSg1MjYwLTEwLCA1MzIwKzEwLCA0MCwgNiwgMjAsIE5MODAyMTFfUlJGX0RGUyksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMTAwLi4xNDQgKi8KLQkJUkVHX1JVTEUoNTUwMC0xMCwgNTcwMCsxMCwgNDAsIDYsIDIzLCBOTDgwMjExX1JSRl9ERlMpLAotCX0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqc3RhdGljX3JlZ2RvbShjaGFyICphbHBoYTIpCi17Ci0JaWYgKGFscGhhMlswXSA9PSAnVScgJiYgYWxwaGEyWzFdID09ICdTJykKLQkJcmV0dXJuICZ1c19yZWdkb207Ci0JaWYgKGFscGhhMlswXSA9PSAnSicgJiYgYWxwaGEyWzFdID09ICdQJykKLQkJcmV0dXJuICZqcF9yZWdkb207Ci0JLyogVXNlIHdvcmxkIHJvYW1pbmcgcnVsZXMgZm9yICJFVSIsIHNpbmNlIGl0IHdhcyBhIHBzZXVkbwotCSAgIGRvbWFpbiBhbnl3YXkuLi4gKi8KLQlpZiAoYWxwaGEyWzBdID09ICdFJyAmJiBhbHBoYTJbMV0gPT0gJ1UnKQotCQlyZXR1cm4gJndvcmxkX3JlZ2RvbTsKLQkvKiBEZWZhdWx0LCB3b3JsZCByb2FtaW5nIHJ1bGVzICovCi0JcmV0dXJuICZ3b3JsZF9yZWdkb207Ci19Ci0KLXN0YXRpYyBib29sIGlzX29sZF9zdGF0aWNfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKLXsKLQlpZiAocmQgPT0gJnVzX3JlZ2RvbSB8fCByZCA9PSAmanBfcmVnZG9tIHx8IHJkID09ICZ3b3JsZF9yZWdkb20pCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfb2xkX3N0YXRpY19yZWdkb20oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQotewotCXJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCByZXNldF9yZWdkb21haW5zKHZvaWQpCiB7CiAJLyogYXZvaWQgZnJlZWluZyBzdGF0aWMgaW5mb3JtYXRpb24gb3IgZnJlZWluZyBzb21ldGhpbmcgdHdpY2UgKi8KQEAgLTIwOSw4ICsxMzgsNiBAQAogCQljZmc4MDIxMV93b3JsZF9yZWdkb20gPSBOVUxMOwogCWlmIChjZmc4MDIxMV9yZWdkb21haW4gPT0gJndvcmxkX3JlZ2RvbSkKIAkJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKLQlpZiAoaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSkKLQkJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKIAogCWtmcmVlKGNmZzgwMjExX3JlZ2RvbWFpbik7CiAJa2ZyZWUoY2ZnODAyMTFfd29ybGRfcmVnZG9tKTsKQEAgLTMzNSw2ICsyNjIsOTggQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbnQgcmVnX2NvcHlfcmVnZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqKmRzdF9yZWdkLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzcmNfcmVnZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwlpbnQgc2l6ZV9vZl9yZWdkID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNpemVfb2ZfcmVnZCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikgKworCSAgKChzcmNfcmVnZC0+bl9yZWdfcnVsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwlyZWdkID0ga3phbGxvYyhzaXplX29mX3JlZ2QsIEdGUF9LRVJORUwpOworCWlmICghcmVnZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocmVnZCwgc3JjX3JlZ2QsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikpOworCisJZm9yIChpID0gMDsgaSA8IHNyY19yZWdkLT5uX3JlZ19ydWxlczsgaSsrKQorCQltZW1jcHkoJnJlZ2QtPnJlZ19ydWxlc1tpXSwgJnNyY19yZWdkLT5yZWdfcnVsZXNbaV0sCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOworCisJKmRzdF9yZWdkID0gcmVnZDsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQgorc3RydWN0IHJlZ19yZWdkYl9zZWFyY2hfcmVxdWVzdCB7CisJY2hhciBhbHBoYTJbMl07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RhdGljIExJU1RfSEVBRChyZWdfcmVnZGJfc2VhcmNoX2xpc3QpOworc3RhdGljIERFRklORV9TUElOTE9DSyhyZWdfcmVnZGJfc2VhcmNoX2xvY2spOworCitzdGF0aWMgdm9pZCByZWdfcmVnZGJfc2VhcmNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmVnX3JlZ2RiX3NlYXJjaF9yZXF1ZXN0ICpyZXF1ZXN0OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjdXJkb20sICpyZWdkb207CisJaW50IGksIHI7CisKKwlzcGluX2xvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyZWdfcmVnZGJfc2VhcmNoX2xpc3QpKSB7CisJCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZWdfcmVnZGJfc2VhcmNoX2xpc3QsCisJCQkJCSAgIHN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QsCisJCQkJCSAgIGxpc3QpOworCQlsaXN0X2RlbCgmcmVxdWVzdC0+bGlzdCk7CisKKwkJZm9yIChpPTA7IGk8cmVnX3JlZ2RiX3NpemU7IGkrKykgeworCQkJY3VyZG9tID0gcmVnX3JlZ2RiW2ldOworCisJCQlpZiAoIW1lbWNtcChyZXF1ZXN0LT5hbHBoYTIsIGN1cmRvbS0+YWxwaGEyLCAyKSkgeworCQkJCXIgPSByZWdfY29weV9yZWdkKCZyZWdkb20sIGN1cmRvbSk7CisJCQkJaWYgKHIpCisJCQkJCWJyZWFrOworCQkJCXNwaW5fdW5sb2NrKCZyZWdfcmVnZGJfc2VhcmNoX2xvY2spOworCQkJCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwkJCQlzZXRfcmVnZG9tKHJlZ2RvbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJCQkJc3Bpbl9sb2NrKCZyZWdfcmVnZGJfc2VhcmNoX2xvY2spOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJa2ZyZWUocmVxdWVzdCk7CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVnZGJfc2VhcmNoX2xvY2spOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlZ19yZWdkYl93b3JrLCByZWdfcmVnZGJfc2VhcmNoKTsKKworc3RhdGljIHZvaWQgcmVnX3JlZ2RiX3F1ZXJ5KGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVnX3JlZ2RiX3NlYXJjaF9yZXF1ZXN0ICpyZXF1ZXN0OworCisJaWYgKCFhbHBoYTIpCisJCXJldHVybjsKKworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnX3JlZ2RiX3NlYXJjaF9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm47CisKKwltZW1jcHkocmVxdWVzdC0+YWxwaGEyLCBhbHBoYTIsIDIpOworCisJc3Bpbl9sb2NrKCZyZWdfcmVnZGJfc2VhcmNoX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJlcXVlc3QtPmxpc3QsICZyZWdfcmVnZGJfc2VhcmNoX2xpc3QpOworCXNwaW5fdW5sb2NrKCZyZWdfcmVnZGJfc2VhcmNoX2xvY2spOworCisJc2NoZWR1bGVfd29yaygmcmVnX3JlZ2RiX3dvcmspOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWdfcmVnZGJfcXVlcnkoY29uc3QgY2hhciAqYWxwaGEyKSB7fQorI2VuZGlmIC8qIENPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQiAqLworCiAvKgogICogVGhpcyBsZXRzIHVzIGtlZXAgcmVndWxhdG9yeSBjb2RlIHdoaWNoIGlzIHVwZGF0ZWQgb24gYSByZWd1bGF0b3J5CiAgKiBiYXNpcyBpbiB1c2Vyc3BhY2UuCkBAIC0zNTQsNiArMzczLDkgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IENhbGxpbmcgQ1JEQSB0byB1cGRhdGUgd29ybGQgIgogCQkJInJlZ3VsYXRvcnkgZG9tYWluXG4iKTsKIAorCS8qIHF1ZXJ5IGludGVybmFsIHJlZ3VsYXRvcnkgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykgKi8KKwlyZWdfcmVnZGJfcXVlcnkoYWxwaGEyKTsKKwogCWNvdW50cnlfZW52WzhdID0gYWxwaGEyWzBdOwogCWNvdW50cnlfZW52WzldID0gYWxwaGEyWzFdOwogCkBAIC0xMzQyLDMwICsxMzY0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi1zdGF0aWMgaW50IHJlZ19jb3B5X3JlZ2QoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKipkc3RfcmVnZCwKLQkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqc3JjX3JlZ2QpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7Ci0JaW50IHNpemVfb2ZfcmVnZCA9IDA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlzaXplX29mX3JlZ2QgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pICsKLQkgICgoc3JjX3JlZ2QtPm5fcmVnX3J1bGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOwotCi0JcmVnZCA9IGt6YWxsb2Moc2l6ZV9vZl9yZWdkLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlZ2QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KHJlZ2QsIHNyY19yZWdkLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcmNfcmVnZC0+bl9yZWdfcnVsZXM7IGkrKykKLQkJbWVtY3B5KCZyZWdkLT5yZWdfcnVsZXNbaV0sICZzcmNfcmVnZC0+cmVnX3J1bGVzW2ldLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKLQotCSpkc3RfcmVnZCA9IHJlZ2Q7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQogICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMKQEAgLTE0MTgsOCArMTQxNiw2IEBACiAJCXJldHVybiBSRUdfSU5URVJTRUNUOwogCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKIAkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFKSB7Ci0JCQlpZiAoaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSkKLQkJCQlyZXR1cm4gMDsKIAkJCWlmIChyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyZXR1cm4gLUVBTFJFQURZOwpAQCAtMTQ1Niw4ICsxNDUyLDcgQEAKIAkJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCi0JCWlmICghaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSAmJgotCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJaWYgKCFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCiAJCQlyZXR1cm4gLUVBTFJFQURZOwogCiAJCXJldHVybiAwOwpAQCAtMjAzOSw4ICsyMDM0LDcgQEAKIAkJICogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgogCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQKIAkJICovCi0JCWlmICghaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSAmJgotCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQorCQlpZiAoIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjM5LDE1ICsyMjMzLDggQEAKIAlzcGluX2xvY2tfaW5pdCgmcmVnX3JlcXVlc3RzX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCi0JY2ZnODAyMTFfcmVnZG9tYWluID0gc3RhdGljX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKTsKLQotCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBVc2luZyBzdGF0aWMgcmVndWxhdG9yeSBkb21haW4gaW5mb1xuIik7Ci0JcHJpbnRfcmVnZG9tYWluX2luZm8oY2ZnODAyMTFfcmVnZG9tYWluKTsKLSNlbHNlCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gY2ZnODAyMTFfd29ybGRfcmVnZG9tOwogCi0jZW5kaWYKIAkvKiBXZSBhbHdheXMgdHJ5IHRvIGdldCBhbiB1cGRhdGUgZm9yIHRoZSBzdGF0aWMgcmVnZG9tYWluICovCiAJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWdkYi5oIGIvbmV0L3dpcmVsZXNzL3JlZ2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MjIyYwotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy9yZWdkYi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX1JFR0RCX0hfXworI2RlZmluZSBfX1JFR0RCX0hfXworCitleHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ19yZWdkYltdOworZXh0ZXJuIGludCByZWdfcmVnZGJfc2l6ZTsKKworI2VuZGlmIC8qIF9fUkVHREJfSF9fICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCA1OTM2MWZkLi4yMzU1N2MxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCisrKyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCX0KIH0KIAotaW50IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFkZHIsCitpbnQgaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1OCAqYWRkciwKIAkJCSAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwpAQCAtMzgzLDcgKzM4Myw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9kYXRhX3RvXzgwMjMpOwogCi1pbnQgaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKHN0cnVjdCBza19idWZmICpza2IsIHU4ICphZGRyLAoraW50IGllZWU4MDIxMV9kYXRhX2Zyb21fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1OCAqYWRkciwKIAkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsIHU4ICpic3NpZCwgYm9vbCBxb3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyOwpAQCAtNDk3LDYgKzQ5NywxMDEgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKTsKIAorCit2b2lkIGllZWU4MDIxMV9hbXNkdV90b184MDIzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAorCQkJICAgICAgY29uc3QgdTggKmFkZHIsIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlLAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgaW50IGV4dHJhX2hlYWRyb29tKQoreworCXN0cnVjdCBza19idWZmICpmcmFtZSA9IE5VTEw7CisJdTE2IGV0aGVydHlwZTsKKwl1OCAqcGF5bG9hZDsKKwljb25zdCBzdHJ1Y3QgZXRoaGRyICpldGg7CisJaW50IHJlbWFpbmluZywgZXJyOworCXU4IGRzdFtFVEhfQUxFTl0sIHNyY1tFVEhfQUxFTl07CisKKwllcnIgPSBpZWVlODAyMTFfZGF0YV90b184MDIzKHNrYiwgYWRkciwgaWZ0eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIHNraXAgdGhlIHdyYXBwaW5nIGhlYWRlciAqLworCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwlpZiAoIWV0aCkKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoc2tiICE9IGZyYW1lKSB7CisJCXU4IHBhZGRpbmc7CisJCV9fYmUxNiBsZW4gPSBldGgtPmhfcHJvdG87CisJCXVuc2lnbmVkIGludCBzdWJmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBudG9ocyhsZW4pOworCisJCXJlbWFpbmluZyA9IHNrYi0+bGVuOworCQltZW1jcHkoZHN0LCBldGgtPmhfZGVzdCwgRVRIX0FMRU4pOworCQltZW1jcHkoc3JjLCBldGgtPmhfc291cmNlLCBFVEhfQUxFTik7CisKKwkJcGFkZGluZyA9ICg0IC0gc3ViZnJhbWVfbGVuKSAmIDB4MzsKKwkJLyogdGhlIGxhc3QgTVNEVSBoYXMgbm8gcGFkZGluZyAqLworCQlpZiAoc3ViZnJhbWVfbGVuID4gcmVtYWluaW5nKQorCQkJZ290byBwdXJnZTsKKworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJCS8qIHJldXNlIHNrYiBmb3IgdGhlIGxhc3Qgc3ViZnJhbWUgKi8KKwkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQorCQkJZnJhbWUgPSBza2I7CisJCWVsc2UgeworCQkJdW5zaWduZWQgaW50IGhsZW4gPSBBTElHTihleHRyYV9oZWFkcm9vbSwgNCk7CisJCQkvKgorCQkJICogQWxsb2NhdGUgYW5kIHJlc2VydmUgdHdvIGJ5dGVzIG1vcmUgZm9yIHBheWxvYWQKKwkJCSAqIGFsaWdubWVudCBzaW5jZSBzaXplb2Yoc3RydWN0IGV0aGhkcikgaXMgMTQuCisJCQkgKi8KKwkJCWZyYW1lID0gZGV2X2FsbG9jX3NrYihobGVuICsgc3ViZnJhbWVfbGVuICsgMik7CisJCQlpZiAoIWZyYW1lKQorCQkJCWdvdG8gcHVyZ2U7CisKKwkJCXNrYl9yZXNlcnZlKGZyYW1lLCBobGVuICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMik7CisJCQltZW1jcHkoc2tiX3B1dChmcmFtZSwgbnRvaHMobGVuKSksIHNrYi0+ZGF0YSwKKwkJCQludG9ocyhsZW4pKTsKKworCQkJZXRoID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVsbChza2IsIG50b2hzKGxlbikgKworCQkJCQkJCXBhZGRpbmcpOworCQkJaWYgKCFldGgpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKGZyYW1lKTsKKwkJCQlnb3RvIHB1cmdlOworCQkJfQorCQl9CisKKwkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKGZyYW1lKTsKKwkJZnJhbWUtPmRldiA9IHNrYi0+ZGV2OworCQlmcmFtZS0+cHJpb3JpdHkgPSBza2ItPnByaW9yaXR5OworCisJCXBheWxvYWQgPSBmcmFtZS0+ZGF0YTsKKwkJZXRoZXJ0eXBlID0gKHBheWxvYWRbNl0gPDwgOCkgfCBwYXlsb2FkWzddOworCisJCWlmIChsaWtlbHkoKGNvbXBhcmVfZXRoZXJfYWRkcihwYXlsb2FkLCByZmMxMDQyX2hlYWRlcikgPT0gMCAmJgorCQkJICAgIGV0aGVydHlwZSAhPSBFVEhfUF9BQVJQICYmIGV0aGVydHlwZSAhPSBFVEhfUF9JUFgpIHx8CisJCQkgICBjb21wYXJlX2V0aGVyX2FkZHIocGF5bG9hZCwKKwkJCQkJICAgICAgYnJpZGdlX3R1bm5lbF9oZWFkZXIpID09IDApKSB7CisJCQkvKiByZW1vdmUgUkZDMTA0MiBvciBCcmlkZ2UtVHVubmVsCisJCQkgKiBlbmNhcHN1bGF0aW9uIGFuZCByZXBsYWNlIEV0aGVyVHlwZSAqLworCQkJc2tiX3B1bGwoZnJhbWUsIDYpOworCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIHNyYywgRVRIX0FMRU4pOworCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIGRzdCwgRVRIX0FMRU4pOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBzaXplb2YoX19iZTE2KSksICZsZW4sCisJCQkJc2l6ZW9mKF9fYmUxNikpOworCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIHNyYywgRVRIX0FMRU4pOworCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIGRzdCwgRVRIX0FMRU4pOworCQl9CisJCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgZnJhbWUpOworCX0KKworCXJldHVybjsKKworIHB1cmdlOgorCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOworIG91dDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9hbXNkdV90b184MDIzcyk7CisKIC8qIEdpdmVuIGEgZGF0YSBmcmFtZSBkZXRlcm1pbmUgdGhlIDgwMi4xcC8xZCB0YWcgdG8gdXNlLiAqLwogdW5zaWduZWQgaW50IGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTcyMCwzICs4MTUsMzYgQEAKIAogCXJldHVybiBlcnI7CiB9CisKK3UxNiBjZmc4MDIxMV9jYWxjdWxhdGVfYml0cmF0ZShzdHJ1Y3QgcmF0ZV9pbmZvICpyYXRlKQoreworCWludCBtb2R1bGF0aW9uLCBzdHJlYW1zLCBiaXRyYXRlOworCisJaWYgKCEocmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfTUNTKSkKKwkJcmV0dXJuIHJhdGUtPmxlZ2FjeTsKKworCS8qIHRoZSBmb3JtdWxhIGJlbG93IGRvZXMgb25seSB3b3JrIGZvciBNQ1MgdmFsdWVzIHNtYWxsZXIgdGhhbiAzMiAqLworCWlmIChyYXRlLT5tY3MgPj0gMzIpCisJCXJldHVybiAwOworCisJbW9kdWxhdGlvbiA9IHJhdGUtPm1jcyAmIDc7CisJc3RyZWFtcyA9IChyYXRlLT5tY3MgPj4gMykgKyAxOworCisJYml0cmF0ZSA9IChyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEgpID8KKwkJCTEzNTAwMDAwIDogNjUwMDAwMDsKKworCWlmIChtb2R1bGF0aW9uIDwgNCkKKwkJYml0cmF0ZSAqPSAobW9kdWxhdGlvbiArIDEpOworCWVsc2UgaWYgKG1vZHVsYXRpb24gPT0gNCkKKwkJYml0cmF0ZSAqPSAobW9kdWxhdGlvbiArIDIpOworCWVsc2UKKwkJYml0cmF0ZSAqPSAobW9kdWxhdGlvbiArIDMpOworCisJYml0cmF0ZSAqPSBzdHJlYW1zOworCisJaWYgKHJhdGUtPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJKQorCQliaXRyYXRlID0gKGJpdHJhdGUgLyA5KSAqIDEwOworCisJLyogZG8gTk9UIHJvdW5kIGRvd24gaGVyZSAqLworCXJldHVybiAoYml0cmF0ZSArIDUwMDAwKSAvIDEwMDAwMDsKK30KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKaW5kZXggNTRmYWNlMy4uNDE5ODI0MyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKQEAgLTEyNTcsMTAgKzEyNTcsNyBAQAogCWlmICghKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9CSVRSQVRFKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmF0ZS0+dmFsdWUgPSAwOwotCi0JaWYgKCEoc2luZm8udHhyYXRlLmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykpCi0JCXJhdGUtPnZhbHVlID0gMTAwMDAwICogc2luZm8udHhyYXRlLmxlZ2FjeTsKKwlyYXRlLT52YWx1ZSA9IDEwMDAwMCAqIGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKCZzaW5mby50eHJhdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvZGF0YV9icmVha3BvaW50LmMgYi9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvZGF0YV9icmVha3BvaW50LmMKaW5kZXggMjk1MjU1MC4uYzY5Y2JlOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9od19icmVha3BvaW50L2RhdGFfYnJlYWtwb2ludC5jCisrKyBiL3NhbXBsZXMvaHdfYnJlYWtwb2ludC9kYXRhX2JyZWFrcG9pbnQuYwpAQCAtNDEsNyArNDEsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhrc3ltLCAiS2VybmVsIHN5bWJvbCB0byBtb25pdG9yOyB0aGlzIG1vZHVsZSB3aWxsIHJlcG9ydCBhbnkiCiAJCQkiIHdyaXRlIG9wZXJhdGlvbnMgb24gdGhlIGtlcm5lbCBzeW1ib2wiKTsKIAotc3RhdGljIHZvaWQgc2FtcGxlX2hicF9oYW5kbGVyKHN0cnVjdCBwZXJmX2V2ZW50ICp0ZW1wLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgc2FtcGxlX2hicF9oYW5kbGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IG5taSwKKwkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlcyB2YWx1ZSBpcyBjaGFuZ2VkXG4iLCBrc3ltX25hbWUpOwogCWR1bXBfc3RhY2soKTsKQEAgLTUxLDggKzUzLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGh3X2JyZWFrX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQlERUZJTkVfQlJFQUtQT0lOVF9BVFRSKGF0dHIpOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAorCWh3X2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CiAJYXR0ci5icF9hZGRyID0ga2FsbHN5bXNfbG9va3VwX25hbWUoa3N5bV9uYW1lKTsKIAlhdHRyLmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CiAJYXR0ci5icF90eXBlID0gSFdfQlJFQUtQT0lOVF9XIHwgSFdfQlJFQUtQT0lOVF9SOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggYzY3ZTczZS4uZWQyNzczZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC0xNDksNiArMTQ5LDEyIEBACiAjICQoUSkkKE1BS0UpICQoYnVpbGQpPWRpcgogYnVpbGQgOj0gLWYgJChpZiAkKEtCVUlMRF9TUkMpLCQoc3JjdHJlZSkvKXNjcmlwdHMvTWFrZWZpbGUuYnVpbGQgb2JqCiAKKyMjIworIyBTaG9ydGhhbmQgZm9yICQoUSkkKE1BS0UpIC1mIHNjcmlwdHMvTWFrZWZpbGUubW9kYnVpbHRpbiBvYmo9CisjIFVzYWdlOgorIyAkKFEpJChNQUtFKSAkKG1vZGJ1aWx0aW4pPWRpcgorbW9kYnVpbHRpbiA6PSAtZiAkKGlmICQoS0JVSUxEX1NSQyksJChzcmN0cmVlKS8pc2NyaXB0cy9NYWtlZmlsZS5tb2RidWlsdGluIG9iagorCiAjIFByZWZpeCAtSSB3aXRoICQoc3JjdHJlZSkgaWYgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGguCiAjIHNraXAgaWYgLUkgaGFzIG5vIHBhcmFtZXRlcgogYWRkdHJlZSA9ICQoaWYgJChwYXRzdWJzdCAtSSUsJSwkKDEpKSwgXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKaW5kZXggMzQxYjU4OS4uMGI5NGQyZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCkBAIC0yMDcsNiArMjA3LDcgQEAKIAogaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiBjbWRfcmVjb3JkX21jb3VudCA9IHNldCAtZSA7IHBlcmwgJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCAiJChBUkNIKSIgXAorCSIkKGlmICQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSxiaWcsbGl0dGxlKSIgXAogCSIkKGlmICQoQ09ORklHXzY0QklUKSw2NCwzMikiIFwKIAkiJChPQkpEVU1QKSIgIiQoT0JKQ09QWSkiICIkKENDKSIgIiQoTEQpIiAiJChOTSkiICIkKFJNKSIgIiQoTVYpIiBcCiAJIiQoaWYgJChwYXJ0LW9mLW1vZHVsZSksMSwwKSIgIiQoQCkiOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCBmZmRhZmIyLi5jZDgxNWFjIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtMTI3LDYgKzEyNywxMSBAQAogCQkkKENGTEFHU19HQ09WKSkKIGVuZGlmCiAKK2lmZGVmIENPTkZJR19TWU1CT0xfUFJFRklYCitfY3BwX2ZsYWdzICs9IC1EU1lNQk9MX1BSRUZJWD0kKHBhdHN1YnN0ICIlIiwlLCQoQ09ORklHX1NZTUJPTF9QUkVGSVgpKQorZW5kaWYKKworCiAjIElmIGJ1aWxkaW5nIHRoZSBrZXJuZWwgaW4gYSBzZXBhcmF0ZSBvYmp0cmVlIGV4cGFuZCBhbGwgb2NjdXJyZW5jZXMKICMgb2YgLUlkaXIgdG8gLUkkKHNyY3RyZWUpL2RpciBleGNlcHQgZm9yIGFic29sdXRlIHBhdGhzIChzdGFydGluZyB3aXRoICcvJykuCiAKQEAgLTIwOCw3ICsyMTMsNyBAQAogCiAjIEJ6aXAyIGFuZCBMWk1BIGRvIG5vdCBpbmNsdWRlIHNpemUgaW4gZmlsZS4uLiBzbyB3ZSBoYXZlIHRvIGZha2UgdGhhdDsKICMgYXBwZW5kIHRoZSBzaXplIGFzIGEgMzItYml0IGxpdHRsZWVuZGlhbiBudW1iZXIgYXMgZ3ppcCBkb2VzLgotc2l6ZV9hcHBlbmQgPSAvYmluL2VjaG8gLW5lICQoc2hlbGwJCQkJCVwKK3NpemVfYXBwZW5kID0gcHJpbnRmICQoc2hlbGwJCQkJCQlcCiBkZWNfc2l6ZT0wOwkJCQkJCQkJXAogZm9yIEYgaW4gJDE7IGRvCQkJCQkJCQlcCiAJZnNpemU9JCQoc3RhdCAtYyAiJXMiICQkRik7CQkJCQlcCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLm1vZGJ1aWx0aW4gYi9zY3JpcHRzL01ha2VmaWxlLm1vZGJ1aWx0aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyYTI3NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubW9kYnVpbHRpbgpAQCAtMCwwICsxLDU1IEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEdlbmVyYXRpbmcgbW9kdWxlcy5idWlsdGluCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3NyYyA6PSAkKG9iaikKKworUEhPTlkgOj0gX19tb2RidWlsdGluCitfX21vZGJ1aWx0aW46CisKKy1pbmNsdWRlIGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZgorIyB0cmlzdGF0ZS5jb25mIHNldHMgdHJpc3RhdGUgdmFyaWFibGVzIHRvIHVwcGVyY2FzZSAnWScgb3IgJ00nCisjIFRoYXQgd2F5LCB3ZSBnZXQgdGhlIGxpc3Qgb2YgYnVpbHQtaW4gbW9kdWxlcyBpbiBvYmotWQorLWluY2x1ZGUgaW5jbHVkZS9jb25maWcvdHJpc3RhdGUuY29uZgorCitpbmNsdWRlIHNjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKworIyBUaGUgZmlsZW5hbWUgS2J1aWxkIGhhcyBwcmVjZWRlbmNlIG92ZXIgTWFrZWZpbGUKK2tidWlsZC1kaXIgOj0gJChpZiAkKGZpbHRlciAvJSwkKHNyYykpLCQoc3JjKSwkKHNyY3RyZWUpLyQoc3JjKSkKK2tidWlsZC1maWxlIDo9ICQoaWYgJCh3aWxkY2FyZCAkKGtidWlsZC1kaXIpL0tidWlsZCksJChrYnVpbGQtZGlyKS9LYnVpbGQsJChrYnVpbGQtZGlyKS9NYWtlZmlsZSkKK2luY2x1ZGUgJChrYnVpbGQtZmlsZSkKKworaW5jbHVkZSBzY3JpcHRzL01ha2VmaWxlLmxpYgorX19zdWJkaXItWSAgICAgOj0gJChwYXRzdWJzdCAlLywlLCQoZmlsdGVyICUvLCAkKG9iai1ZKSkpCitzdWJkaXItWSAgICAgICArPSAkKF9fc3ViZGlyLVkpCitzdWJkaXIteW0gICAgICA6PSAkKHNvcnQgJChzdWJkaXIteSkgJChzdWJkaXItWSkgJChzdWJkaXItbSkpCitzdWJkaXIteW0gICAgICA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc3ViZGlyLXltKSkKK29iai1ZICAgICAgICAgIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChvYmotWSkpCisKK21vZGJ1aWx0aW4tc3ViZGlycyA6PSAkKHBhdHN1YnN0ICUsJS9tb2R1bGVzLmJ1aWx0aW4sICQoc3ViZGlyLXltKSkKK21vZGJ1aWx0aW4tbW9kcyAgICA6PSAkKGZpbHRlciAlLmtvLCAkKG9iai1ZOi5vPS5rbykpCittb2RidWlsdGluLXRhcmdldCAgOj0gJChvYmopL21vZHVsZXMuYnVpbHRpbgorCitfX21vZGJ1aWx0aW46ICQobW9kYnVpbHRpbi10YXJnZXQpICQoc3ViZGlyLXltKQorCUA6CisKKyQobW9kYnVpbHRpbi10YXJnZXQpOiAkKHN1YmRpci15bSkgRk9SQ0UKKwkkKFEpKGZvciBtIGluICQobW9kYnVpbHRpbi1tb2RzKTsgZG8gZWNobyBrZXJuZWwvJCRtOyBkb25lOwlcCisJY2F0IC9kZXYvbnVsbCAkKG1vZGJ1aWx0aW4tc3ViZGlycykpID4gJEAKKworUEhPTlkgKz0gRk9SQ0UKKworRk9SQ0U6CisKKyMgRGVzY2VuZGluZworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUEhPTlkgKz0gJChzdWJkaXIteW0pCiskKHN1YmRpci15bSk6CisJJChRKSQoTUFLRSkgJChtb2RidWlsdGluKT0kQAorCisKKyMgRGVjbGFyZSB0aGUgY29udGVudHMgb2YgdGhlIC5QSE9OWSB2YXJpYWJsZSBhcyBwaG9ueS4gIFdlIGtlZXAgdGhhdAorIyBpbmZvcm1hdGlvbiBpbiBhIHZhcmlhYmxlIHNlIHdlIGNhbiB1c2UgaXQgaW4gaWZfY2hhbmdlZCBhbmQgZnJpZW5kcy4KKworLlBIT05ZOiAkKFBIT05ZKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKaW5kZXggNmJmMjFmOC4uZWEyNmIyMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYworKysgYi9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCkBAIC0xNiwxNSArMTYsMTUgQEAKICAqIHRlbGxzIG1ha2Ugd2hlbiB0byByZW1ha2UgYSBmaWxlLgogICoKICAqIFRvIHVzZSB0aGlzIGxpc3QgYXMtaXMgaG93ZXZlciBoYXMgdGhlIGRyYXdiYWNrIHRoYXQgdmlydHVhbGx5Ci0gKiBldmVyeSBmaWxlIGluIHRoZSBrZXJuZWwgaW5jbHVkZXMgPGxpbnV4L2F1dG9jb25mLmg+LgorICogZXZlcnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIGF1dG9jb25mLmguCiAgKgotICogSWYgdGhlIHVzZXIgcmUtcnVucyBtYWtlICpjb25maWcsIGxpbnV4L2F1dG9jb25mLmggd2lsbCBiZQorICogSWYgdGhlIHVzZXIgcmUtcnVucyBtYWtlICpjb25maWcsIGF1dG9jb25mLmggd2lsbCBiZQogICogcmVnZW5lcmF0ZWQuICBtYWtlIG5vdGljZXMgdGhhdCBhbmQgd2lsbCByZWJ1aWxkIGV2ZXJ5IGZpbGUgd2hpY2gKICAqIGluY2x1ZGVzIGF1dG9jb25mLmgsIGkuZS4gYmFzaWNhbGx5IGFsbCBmaWxlcy4gVGhpcyBpcyBleHRyZW1lbHkKICAqIGFubm95aW5nIGlmIHRoZSB1c2VyIGp1c3QgY2hhbmdlZCBDT05GSUdfSElTX0RSSVZFUiBmcm9tIG4gdG8gbS4KICAqCiAgKiBTbyB3ZSBwbGF5IHRoZSBzYW1lIHRyaWNrIHRoYXQgIm1rZGVwIiBwbGF5ZWQgYmVmb3JlLiBXZSByZXBsYWNlCi0gKiB0aGUgZGVwZW5kZW5jeSBvbiBsaW51eC9hdXRvY29uZi5oIGJ5IGEgZGVwZW5kZW5jeSBvbiBldmVyeSBjb25maWcKKyAqIHRoZSBkZXBlbmRlbmN5IG9uIGF1dG9jb25mLmggYnkgYSBkZXBlbmRlbmN5IG9uIGV2ZXJ5IGNvbmZpZwogICogb3B0aW9uIHdoaWNoIGlzIG1lbnRpb25lZCBpbiBhbnkgb2YgdGhlIGxpc3RlZCBwcmVxdWlzaXRlcy4KICAqCiAgKiBrY29uZmlnIHBvcHVsYXRlcyBhIHRyZWUgaW4gaW5jbHVkZS9jb25maWcvIHdpdGggYW4gZW1wdHkgZmlsZQpAQCAtNzMsNyArNzMsNyBAQAogICogICBjbWRfPHRhcmdldD4gPSA8Y21kbGluZT4KICAqCiAgKiBhbmQgdGhlbiBiYXNpY2FsbHkgY29waWVzIHRoZSAuPHRhcmdldD4uZCBmaWxlIHRvIHN0ZG91dCwgaW4gdGhlCi0gKiBwcm9jZXNzIGZpbHRlcmluZyBvdXQgdGhlIGRlcGVuZGVuY3kgb24gbGludXgvYXV0b2NvbmYuaCBhbmQgYWRkaW5nCisgKiBwcm9jZXNzIGZpbHRlcmluZyBvdXQgdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBhbmQgYWRkaW5nCiAgKiBkZXBlbmRlbmNpZXMgb24gaW5jbHVkZS9jb25maWcvbXkvb3B0aW9uLmggZm9yIGV2ZXJ5CiAgKiBDT05GSUdfTVlfT1BUSU9OIGVuY291bnRlcmVkIGluIGFueSBvZiB0aGUgcHJlcXVpc2l0ZXMuCiAgKgpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCQlwKys7CiAJCX0KIAkJbWVtY3B5KHMsIG0sIHAtbSk7IHNbcC1tXSA9IDA7Ci0JCWlmIChzdHJyY21wKHMsICJpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgiKSAmJgorCQlpZiAoc3RycmNtcChzLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpICYmCiAJCSAgICBzdHJyY21wKHMsICJhcmNoL3VtL2luY2x1ZGUvdW1sLWNvbmZpZy5oIikgJiYKIAkJICAgIHN0cnJjbXAocywgIi52ZXIiKSkgewogCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKaW5kZXggMjg3NDY3YS4uODA2MGUwNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKQEAgLTEsNCArMSw0IEBACi0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4zICovCisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC40ICovCiAvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1MIEFOU0ktQyAtYSAtQyAtRSAtZyAtSCBpc19yZXNlcnZlZF9oYXNoIC1rICcxLDMsJCcgLU4gaXNfcmVzZXJ2ZWRfd29yZCAtcCAtdCBzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmICAqLwogCiAjaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc3dvcmQgKmlzX3Jlc2VydmVkX3dvcmQocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKICNsaW5lIDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiBzdHJ1Y3QgcmVzd29yZCB7IGNvbnN0IGNoYXIgKm5hbWU7IGludCB0b2tlbjsgfTsKLS8qIG1heGltdW0ga2V5IHJhbmdlID0gNjIsIGR1cGxpY2F0ZXMgPSAwICovCisvKiBtYXhpbXVtIGtleSByYW5nZSA9IDY0LCBkdXBsaWNhdGVzID0gMCAqLwogCiAjaWZkZWYgX19HTlVDX18KIF9faW5saW5lCkBAIC00OCwzOSArNDgsMzkgQEAKIHsKICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXNzb192YWx1ZXNbXSA9CiAgICAgewotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwKLSAgICAgIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwKLSAgICAgIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgIDUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCAzNSwgNjUsIDY1LCA2NSwKLSAgICAgICAwLCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCAgMCwgNjUsICAwLCA2NSwgIDUsCi0gICAgICAyMCwgMTUsIDEwLCAzMCwgNjUsIDE1LCA2NSwgNjUsIDIwLCAgMCwKLSAgICAgIDEwLCAzNSwgMjAsIDY1LCAxMCwgIDUsICAwLCAxMCwgIDUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwKLSAgICAgIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwKLSAgICAgIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwKLSAgICAgIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwKLSAgICAgIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LAotICAgICAgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsCi0gICAgICA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1CisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LAorICAgICAgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LAorICAgICAgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAgMCwKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1LCA2NywgNjcsIDY3LAorICAgICAgIDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsICAwLCA2NywgIDAsIDY3LCAgNSwKKyAgICAgIDI1LCAyMCwgMTUsIDMwLCA2NywgMTUsIDY3LCA2NywgMTAsICAwLAorICAgICAgMTAsIDQwLCAyMCwgNjcsIDEwLCAgNSwgIDAsIDEwLCAxNSwgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LAorICAgICAgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LAorICAgICAgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LAorICAgICAgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LAorICAgICAgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsCisgICAgICA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywKKyAgICAgIDY3LCA2NywgNjcsIDY3LCA2NywgNjcKICAgICB9OwogICByZXR1cm4gbGVuICsgYXNzb192YWx1ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzJdXSArIGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0clswXV0gKyBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJbbGVuIC0gMV1dOwogfQogCiAjaWZkZWYgX19HTlVDX18KIF9faW5saW5lCi0jaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyNpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fIHx8IGRlZmluZWQgX19HTlVDX0dOVV9JTkxJTkVfXwogX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSkKICNlbmRpZgogI2VuZGlmCkBAIC04OSwxMTYgKzg5LDExOSBAQAogewogICBlbnVtCiAgICAgewotICAgICAgVE9UQUxfS0VZV09SRFMgPSA0MywKKyAgICAgIFRPVEFMX0tFWVdPUkRTID0gNDUsCiAgICAgICBNSU5fV09SRF9MRU5HVEggPSAzLAogICAgICAgTUFYX1dPUkRfTEVOR1RIID0gMjQsCiAgICAgICBNSU5fSEFTSF9WQUxVRSA9IDMsCi0gICAgICBNQVhfSEFTSF9WQUxVRSA9IDY0CisgICAgICBNQVhfSEFTSF9WQUxVRSA9IDY2CiAgICAgfTsKIAogICBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc3dvcmQgd29yZGxpc3RbXSA9CiAgICAgewogICAgICAgeyIifSwgeyIifSwgeyIifSwKLSNsaW5lIDI4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImFzbSIsIEFTTV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDEyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbSIsIEFTTV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbV9fIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDU0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdHlwZW9mX18iLCBUWVBFT0ZfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fY29uc3QiLCBDT05TVF9LRVlXfSwKLSNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2F0dHJpYnV0ZV9fIiwgQVRUUklCVVRFX0tFWVd9LAotI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fY29uc3RfXyIsIENPTlNUX0tFWVd9LAotI2xpbmUgMjAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCi0jbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAotI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgNDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImludCIsIElOVF9LRVlXfSwKLSNsaW5lIDM0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJjaGFyIiwgQ0hBUl9LRVlXfSwKLSNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAotI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InN0cnVjdCIsIFNUUlVDVF9LRVlXfSwKLSNsaW5lIDI2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX3Jlc3RyaWN0X18iLCBSRVNUUklDVF9LRVlXfSwKLSNsaW5lIDI3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMjUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9yZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMTggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9faW5saW5lX18iLCBJTkxJTkVfS0VZV30sCi0jbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19hdHRyaWJ1dGUiLCBBVFRSSUJVVEVfS0VZV30sCi0gICAgICB7IiJ9LAogI2xpbmUgMTYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fZXh0ZW5zaW9uX18iLCBFWFRFTlNJT05fS0VZV30sCi0jbGluZSAzNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiZW51bSIsIEVOVU1fS0VZV30sCi0jbGluZSAyMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX192b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKKyAgICAgIHsiX19jb25zdCIsIENPTlNUX0tFWVd9LAorI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fYXR0cmlidXRlX18iLCBBVFRSSUJVVEVfS0VZV30sCisjbGluZSAxNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19jb25zdF9fIiwgQ09OU1RfS0VZV30sCisjbGluZSAyMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19zaWduZWRfXyIsIFNJR05FRF9LRVlXfSwKKyNsaW5lIDQ4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJzdGF0aWMiLCBTVEFUSUNfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fc2lnbmVkIiwgU0lHTkVEX0tFWVd9LAorI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImludCIsIElOVF9LRVlXfSwKKyNsaW5lIDM2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJjaGFyIiwgQ0hBUl9LRVlXfSwKKyNsaW5lIDM3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAorI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InN0cnVjdCIsIFNUUlVDVF9LRVlXfSwKKyNsaW5lIDI4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX3Jlc3RyaWN0X18iLCBSRVNUUklDVF9LRVlXfSwKKyNsaW5lIDI5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAogI2xpbmUgOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSAgICAgIHsiIn0sCi0jbGluZSA1MyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsidHlwZW9mIiwgVFlQRU9GX0tFWVd9LAotI2xpbmUgNDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InR5cGVkZWYiLCBUWVBFREVGX0tFWVd9LAotI2xpbmUgMTcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9faW5saW5lIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImF1dG8iLCBBVVRPX0tFWVd9LAotI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InVuaW9uIiwgVU5JT05fS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNTAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InVuc2lnbmVkIiwgVU5TSUdORURfS0VZV30sCi0jbGluZSA1MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsidm9pZCIsIFZPSURfS0VZV30sCi0jbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsic2hvcnQiLCBTSE9SVF9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA1MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsidm9sYXRpbGUiLCBWT0xBVElMRV9LRVlXfSwKLSAgICAgIHsiIn0sCi0jbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiZmxvYXQiLCBGTE9BVF9LRVlXfSwKLSNsaW5lIDM2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJkb3VibGUiLCBET1VCTEVfS0VZV30sCi0gICAgICB7IiJ9LAotI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiRVhQT1JUX1NZTUJPTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNDAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImlubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSNsaW5lIDQzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJyZWdpc3RlciIsIFJFR0lTVEVSX0tFWVd9LAorI2xpbmUgMjAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9faW5saW5lX18iLCBJTkxJTkVfS0VZV30sCiAgICAgICB7IiJ9LAogI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9Cb29sIiwgQk9PTF9LRVlXfSwKLSNsaW5lIDQ1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJzaWduZWQiLCBTSUdORURfS0VZV30sCisgICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAorI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiRVhQT1JUX1NZTUJPTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCisjbGluZSAyNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX3Jlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgMTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fYXR0cmlidXRlIiwgQVRUUklCVVRFX0tFWVd9LAorI2xpbmUgOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiRVhQT1JUX1NZTUJPTF9HUEwiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAorI2xpbmUgMTggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fZXh0ZW5zaW9uX18iLCBFWFRFTlNJT05fS0VZV30sCisjbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiZW51bSIsIEVOVU1fS0VZV30sCisjbGluZSAxMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiRVhQT1JUX1VOVVNFRF9TWU1CT0wiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAorI2xpbmUgNDAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKKyAgICAgIHsiIn0sCisjbGluZSAyMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19zaWduZWQiLCBTSUdORURfS0VZV30sCisjbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiRVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKKyNsaW5lIDUxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJ1bmlvbiIsIFVOSU9OX0tFWVd9LAorI2xpbmUgNTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InR5cGVvZiIsIFRZUEVPRl9LRVlXfSwKKyNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJ0eXBlZGVmIiwgVFlQRURFRl9LRVlXfSwKKyNsaW5lIDE5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKKyNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJhdXRvIiwgQVVUT19LRVlXfSwKKyNsaW5lIDIzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX3ZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAorI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InVuc2lnbmVkIiwgVU5TSUdORURfS0VZV30sCisgICAgICB7IiJ9LAorI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7InNob3J0IiwgU0hPUlRfS0VZV30sCiAjbGluZSA0MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsibG9uZyIsIExPTkdfS0VZV30KKyAgICAgIHsiaW5saW5lIiwgSU5MSU5FX0tFWVd9LAorICAgICAgeyIifSwKKyNsaW5lIDU0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJ2b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAorI2xpbmUgNDQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImxvbmciLCBMT05HX0tFWVd9LAorI2xpbmUgMjYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9Cb29sIiwgQk9PTF9LRVlXfSwKKyAgICAgIHsiIn0sIHsiIn0sCisjbGluZSA0NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsicmVnaXN0ZXIiLCBSRUdJU1RFUl9LRVlXfSwKKyNsaW5lIDUzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJ2b2lkIiwgVk9JRF9LRVlXfSwKKyNsaW5lIDQxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJmbG9hdCIsIEZMT0FUX0tFWVd9LAorI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7ImRvdWJsZSIsIERPVUJMRV9LRVlXfSwKKyAgICAgIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sCisjbGluZSA0NyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsic2lnbmVkIiwgU0lHTkVEX0tFWVd9CiAgICAgfTsKIAogICBpZiAobGVuIDw9IE1BWF9XT1JEX0xFTkdUSCAmJiBsZW4gPj0gTUlOX1dPUkRfTEVOR1RIKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKaW5kZXggOGZlOTc3YS4uZTYzNDlhYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCkBAIC03LDYgKzcsOCBAQAogRVhQT1JUX1NZTUJPTCwgRVhQT1JUX1NZTUJPTF9LRVlXCiBFWFBPUlRfU1lNQk9MX0dQTCwgRVhQT1JUX1NZTUJPTF9LRVlXCiBFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUsIEVYUE9SVF9TWU1CT0xfS0VZVworRVhQT1JUX1VOVVNFRF9TWU1CT0wsIEVYUE9SVF9TWU1CT0xfS0VZVworRVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMLCBFWFBPUlRfU1lNQk9MX0tFWVcKIF9fYXNtLCBBU01fS0VZVwogX19hc21fXywgQVNNX0tFWVcKIF9fYXR0cmlidXRlLCBBVFRSSUJVVEVfS0VZVwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggODFhNjdhNC4uNDQ1ZTg4NCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC0xMyw3ICsxMyw3IEBACiB1c2Ugc3RyaWN0OwogCiBteSAkUCA9ICQwOwotbXkgJFYgPSAnMC4yMSc7CitteSAkViA9ICcwLjIzJzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMjMsMTYgKzIzLDE5IEBACiBteSAkZW1haWxfbWFpbnRhaW5lciA9IDE7CiBteSAkZW1haWxfbGlzdCA9IDE7CiBteSAkZW1haWxfc3Vic2NyaWJlcl9saXN0ID0gMDsKLW15ICRlbWFpbF9naXQgPSAxOwogbXkgJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcyA9IDA7CitteSAkZW1haWxfZ2l0ID0gMTsKK215ICRlbWFpbF9naXRfYmxhbWUgPSAwOwogbXkgJGVtYWlsX2dpdF9taW5fc2lnbmF0dXJlcyA9IDE7CiBteSAkZW1haWxfZ2l0X21heF9tYWludGFpbmVycyA9IDU7CiBteSAkZW1haWxfZ2l0X21pbl9wZXJjZW50ID0gNTsKIG15ICRlbWFpbF9naXRfc2luY2UgPSAiMS15ZWFyLWFnbyI7Ci1teSAkZW1haWxfZ2l0X2JsYW1lID0gMDsKK215ICRlbWFpbF9oZ19zaW5jZSA9ICItMzY1IjsKIG15ICRlbWFpbF9yZW1vdmVfZHVwbGljYXRlcyA9IDE7CiBteSAkb3V0cHV0X211bHRpbGluZSA9IDE7CiBteSAkb3V0cHV0X3NlcGFyYXRvciA9ICIsICI7CitteSAkb3V0cHV0X3JvbGVzID0gMDsKK215ICRvdXRwdXRfcm9sZXN0YXRzID0gMDsKIG15ICRzY20gPSAwOwogbXkgJHdlYiA9IDA7CiBteSAkc3Vic3lzdGVtID0gMDsKQEAgLTY0LDIxICs2Nyw1MiBAQAogbXkgJHJmYzgyMl9sd3NwID0gIig/Oig/Olxcclxcbik/WyBcXHRdKSI7CiBteSAkcmZjODIyX2NoYXIgPSAnW1xcMDAwLVxcMzc3XSc7CiAKKyMgVkNTIGNvbW1hbmQgc3VwcG9ydDogY2xhc3MtbGlrZSBmdW5jdGlvbnMgYW5kIHN0cmluZ3MKKworbXkgJVZDU19jbWRzOworCitteSAlVkNTX2NtZHNfZ2l0ID0gKAorICAgICJleGVjdXRlX2NtZCIgPT4gXCZnaXRfZXhlY3V0ZV9jbWQsCisgICAgImF2YWlsYWJsZSIgPT4gJyh3aGljaCgiZ2l0IikgbmUgIiIpICYmICgtZCAiLmdpdCIpJywKKyAgICAiZmluZF9zaWduZXJzX2NtZCIgPT4gImdpdCBsb2cgLS1zaW5jZT1cJGVtYWlsX2dpdF9zaW5jZSAtLSBcJGZpbGUiLAorICAgICJmaW5kX2NvbW1pdF9zaWduZXJzX2NtZCIgPT4gImdpdCBsb2cgLTEgXCRjb21taXQiLAorICAgICJibGFtZV9yYW5nZV9jbWQiID0+ICJnaXQgYmxhbWUgLWwgLUwgXCRkaWZmX3N0YXJ0LCtcJGRpZmZfbGVuZ3RoIFwkZmlsZSIsCisgICAgImJsYW1lX2ZpbGVfY21kIiA9PiAiZ2l0IGJsYW1lIC1sIFwkZmlsZSIsCisgICAgImNvbW1pdF9wYXR0ZXJuIiA9PiAiXmNvbW1pdCBbMC05YS1mXXs0MCw0MH0iLAorICAgICJibGFtZV9jb21taXRfcGF0dGVybiIgPT4gIl4oWzAtOWEtZl0rKSAiCispOworCitteSAlVkNTX2NtZHNfaGcgPSAoCisgICAgImV4ZWN1dGVfY21kIiA9PiBcJmhnX2V4ZWN1dGVfY21kLAorICAgICJhdmFpbGFibGUiID0+ICcod2hpY2goImhnIikgbmUgIiIpICYmICgtZCAiLmhnIiknLAorICAgICJmaW5kX3NpZ25lcnNfY21kIiA9PgorCSJoZyBsb2cgLS1kYXRlPVwkZW1haWxfaGdfc2luY2UiIC4KKwkJIiAtLXRlbXBsYXRlPSdjb21taXQge25vZGV9XFxue2Rlc2N9XFxuJyAtLSBcJGZpbGUiLAorICAgICJmaW5kX2NvbW1pdF9zaWduZXJzX2NtZCIgPT4gImhnIGxvZyAtLXRlbXBsYXRlPSd7ZGVzY31cXG4nIC1yIFwkY29tbWl0IiwKKyAgICAiYmxhbWVfcmFuZ2VfY21kIiA9PiAiIiwJCSMgbm90IHN1cHBvcnRlZAorICAgICJibGFtZV9maWxlX2NtZCIgPT4gImhnIGJsYW1lIC1jIFwkZmlsZSIsCisgICAgImNvbW1pdF9wYXR0ZXJuIiA9PiAiXmNvbW1pdCBbMC05YS1mXXs0MCw0MH0iLAorICAgICJibGFtZV9jb21taXRfcGF0dGVybiIgPT4gIl4oWzAtOWEtZl0rKToiCispOworCiBpZiAoIUdldE9wdGlvbnMoCiAJCSdlbWFpbCEnID0+IFwkZW1haWwsCiAJCSdnaXQhJyA9PiBcJGVtYWlsX2dpdCwKKwkJJ2dpdC1ibGFtZSEnID0+IFwkZW1haWxfZ2l0X2JsYW1lLAogCQknZ2l0LWNoaWVmLXBlbmd1aW5zIScgPT4gXCRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMsCiAJCSdnaXQtbWluLXNpZ25hdHVyZXM9aScgPT4gXCRlbWFpbF9naXRfbWluX3NpZ25hdHVyZXMsCiAJCSdnaXQtbWF4LW1haW50YWluZXJzPWknID0+IFwkZW1haWxfZ2l0X21heF9tYWludGFpbmVycywKIAkJJ2dpdC1taW4tcGVyY2VudD1pJyA9PiBcJGVtYWlsX2dpdF9taW5fcGVyY2VudCwKIAkJJ2dpdC1zaW5jZT1zJyA9PiBcJGVtYWlsX2dpdF9zaW5jZSwKLQkJJ2dpdC1ibGFtZSEnID0+IFwkZW1haWxfZ2l0X2JsYW1lLAorCQknaGctc2luY2U9cycgPT4gXCRlbWFpbF9oZ19zaW5jZSwKIAkJJ3JlbW92ZS1kdXBsaWNhdGVzIScgPT4gXCRlbWFpbF9yZW1vdmVfZHVwbGljYXRlcywKIAkJJ20hJyA9PiBcJGVtYWlsX21haW50YWluZXIsCiAJCSduIScgPT4gXCRlbWFpbF91c2VuYW1lLAogCQknbCEnID0+IFwkZW1haWxfbGlzdCwKIAkJJ3MhJyA9PiBcJGVtYWlsX3N1YnNjcmliZXJfbGlzdCwKIAkJJ211bHRpbGluZSEnID0+IFwkb3V0cHV0X211bHRpbGluZSwKKwkJJ3JvbGVzIScgPT4gXCRvdXRwdXRfcm9sZXMsCisJCSdyb2xlc3RhdHMhJyA9PiBcJG91dHB1dF9yb2xlc3RhdHMsCiAJCSdzZXBhcmF0b3I9cycgPT4gXCRvdXRwdXRfc2VwYXJhdG9yLAogCQknc3Vic3lzdGVtIScgPT4gXCRzdWJzeXN0ZW0sCiAJCSdzdGF0dXMhJyA9PiBcJHN0YXR1cywKQEAgLTkwLDggKzEyNCw3IEBACiAJCSd2fHZlcnNpb24nID0+IFwkdmVyc2lvbiwKIAkJJ2h8aGVscCcgPT4gXCRoZWxwLAogCQkpKSB7Ci0gICAgdXNhZ2UoKTsKLSAgICBkaWUgIiRQOiBpbnZhbGlkIGFyZ3VtZW50XG4iOworICAgIGRpZSAiJFA6IGludmFsaWQgYXJndW1lbnQgLSB1c2UgLS1oZWxwIGlmIG5lY2Vzc2FyeVxuIjsKIH0KIAogaWYgKCRoZWxwICE9IDApIHsKQEAgLTExMyw2ICsxNDYsMTAgQEAKICAgICAkb3V0cHV0X211bHRpbGluZSA9IDA7CiB9CiAKK2lmICgkb3V0cHV0X3JvbGVzdGF0cykgeworICAgICRvdXRwdXRfcm9sZXMgPSAxOworfQorCiBteSAkc2VsZWN0aW9ucyA9ICRlbWFpbCArICRzY20gKyAkc3RhdHVzICsgJHN1YnN5c3RlbSArICR3ZWI7CiBpZiAoJHNlbGVjdGlvbnMgPT0gMCkgewogICAgIHVzYWdlKCk7CkBAIC0xNzUsNyArMjEyLDcgQEAKIAluZXh0IGlmICgkbGluZSA9fiBtL15ccyokLyk7CiAKIAlteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRsaW5lKTsKLQkkbGluZSA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MpOworCSRsaW5lID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgJGVtYWlsX3VzZW5hbWUpOwogCiAJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqJC8pOwogCkBAIC0yMDcsMTIgKzI0NCwxMCBAQAogCXB1c2goQGZpbGVzLCAkZmlsZSk7CiAJaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgewogCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7Ci0JICAgIHdoaWxlICg8RklMRT4pIHsKLQkJbXkgJHBhdGNoX2xpbmUgPSAkXzsKLQkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7Ci0JCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7Ci0JCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOwotCQkgICAgfQorCSAgICBteSAkdGV4dCA9IGRvIHsgbG9jYWwoJC8pIDsgPEZJTEU+IH07CisJICAgIGZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQlpZiAoJHRleHQgPX4gbS8ka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCSAgICBwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOwogCQl9CiAJICAgIH0KIAkgICAgY2xvc2UoRklMRSk7CkBAIC0zMDQsMTEgKzMzOSwxMSBAQAogICAgIH0KIAogICAgIGlmICgkZW1haWwgJiYgJGVtYWlsX2dpdCkgewotCXJlY2VudF9naXRfc2lnbm9mZnMoJGZpbGUpOworCXZjc19maWxlX3NpZ25vZmZzKCRmaWxlKTsKICAgICB9CiAKICAgICBpZiAoJGVtYWlsICYmICRlbWFpbF9naXRfYmxhbWUpIHsKLQlnaXRfYXNzaWduX2JsYW1lKCRmaWxlKTsKKwl2Y3NfZmlsZV9ibGFtZSgkZmlsZSk7CiAgICAgfQogfQogCkBAIC0zMjQsMTEgKzM1OSwxMSBAQAogCWlmICgkY2hpZWYgPX4gbS9eKC4qKTooLiopLykgewogCSAgICBteSAkZW1haWxfYWRkcmVzczsKIAotCSAgICAkZW1haWxfYWRkcmVzcyA9IGZvcm1hdF9lbWFpbCgkMSwgJDIpOworCSAgICAkZW1haWxfYWRkcmVzcyA9IGZvcm1hdF9lbWFpbCgkMSwgJDIsICRlbWFpbF91c2VuYW1lKTsKIAkgICAgaWYgKCRlbWFpbF9naXRfcGVuZ3Vpbl9jaGllZnMpIHsKLQkJcHVzaChAZW1haWxfdG8sICRlbWFpbF9hZGRyZXNzKTsKKwkJcHVzaChAZW1haWxfdG8sIFskZW1haWxfYWRkcmVzcywgJ2NoaWVmIHBlbmd1aW4nXSk7CiAJICAgIH0gZWxzZSB7Ci0JCUBlbWFpbF90byA9IGdyZXAoIS8ke2VtYWlsX2FkZHJlc3N9LywgQGVtYWlsX3RvKTsKKwkJQGVtYWlsX3RvID0gZ3JlcCgkXy0+WzBdICF+IC8ke2VtYWlsX2FkZHJlc3N9LywgQGVtYWlsX3RvKTsKIAkgICAgfQogCX0KICAgICB9CkBAIC0zNDIsNyArMzc3LDcgQEAKICAgICBpZiAoJGVtYWlsX2xpc3QpIHsKIAlAdG8gPSAoQHRvLCBAbGlzdF90byk7CiAgICAgfQotICAgIG91dHB1dCh1bmlxKEB0bykpOworICAgIG91dHB1dChtZXJnZV9lbWFpbChAdG8pKTsKIH0KIAogaWYgKCRzY20pIHsKQEAgLTM5OCwxMyArNDMzLDE2IEBACiAgICAgLS1naXQtbWluLXNpZ25hdHVyZXMgPT4gbnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWQgKGRlZmF1bHQ6IDEpCiAgICAgLS1naXQtbWF4LW1haW50YWluZXJzID0+IG1heGltdW0gbWFpbnRhaW5lcnMgdG8gYWRkIChkZWZhdWx0OiA1KQogICAgIC0tZ2l0LW1pbi1wZXJjZW50ID0+IG1pbmltdW0gcGVyY2VudGFnZSBvZiBjb21taXRzIHJlcXVpcmVkIChkZWZhdWx0OiA1KQotICAgIC0tZ2l0LXNpbmNlID0+IGdpdCBoaXN0b3J5IHRvIHVzZSAoZGVmYXVsdDogMS15ZWFyLWFnbykKICAgICAtLWdpdC1ibGFtZSA9PiB1c2UgZ2l0IGJsYW1lIHRvIGZpbmQgbW9kaWZpZWQgY29tbWl0cyBmb3IgcGF0Y2ggb3IgZmlsZQorICAgIC0tZ2l0LXNpbmNlID0+IGdpdCBoaXN0b3J5IHRvIHVzZSAoZGVmYXVsdDogMS15ZWFyLWFnbykKKyAgICAtLWhnLXNpbmNlID0+IGhnIGhpc3RvcnkgdG8gdXNlIChkZWZhdWx0OiAtMzY1KQogICAgIC0tbSA9PiBpbmNsdWRlIG1haW50YWluZXIocykgaWYgYW55CiAgICAgLS1uID0+IGluY2x1ZGUgbmFtZSAnRnVsbCBOYW1lIDxhZGRyXEBkb21haW4udGxkPicKICAgICAtLWwgPT4gaW5jbHVkZSBsaXN0KHMpIGlmIGFueQogICAgIC0tcyA9PiBpbmNsdWRlIHN1YnNjcmliZXIgb25seSBsaXN0KHMpIGlmIGFueQogICAgIC0tcmVtb3ZlLWR1cGxpY2F0ZXMgPT4gbWluaW1pemUgZHVwbGljYXRlIGVtYWlsIG5hbWVzL2FkZHJlc3NlcworICAgIC0tcm9sZXMgPT4gc2hvdyByb2xlcyAoc3RhdHVzOnN1YnN5c3RlbSwgZ2l0LXNpZ25lciwgbGlzdCwgZXRjLi4uKQorICAgIC0tcm9sZXN0YXRzID0+IHNob3cgcm9sZXMgYW5kIHN0YXRpc3RpY3MgKGNvbW1pdHMvdG90YWxfY29tbWl0cywgJSkKICAgLS1zY20gPT4gcHJpbnQgU0NNIHRyZWUocykgaWYgYW55CiAgIC0tc3RhdHVzID0+IHByaW50IHN0YXR1cyBpZiBhbnkKICAgLS1zdWJzeXN0ZW0gPT4gcHJpbnQgc3Vic3lzdGVtIG5hbWUgaWYgYW55CkBAIC00MzAsMTEgKzQ2OCwyNCBAQAogICAgICAgICAgIGRpcmVjdG9yeSBhcmUgZXhhbWluZWQgYXMgZ2l0IHJlY3Vyc2VzIGRpcmVjdG9yaWVzLgogICAgICAgICAgIEFueSBzcGVjaWZpZWQgWDogKGV4Y2x1ZGUpIHBhdHRlcm4gbWF0Y2hlcyBhcmUgX25vdF8gaWdub3JlZC4KICAgICAgIFVzZWQgd2l0aCAiLS1ub2dpdCIsIGRpcmVjdG9yeSBpcyB1c2VkIGFzIGEgcGF0dGVybiBtYXRjaCwKLSAgICAgICAgIG5vIGluZGl2aWR1YWwgZmlsZSB3aXRoaW4gdGhlIGRpcmVjdG9yeSBvciBzdWJkaXJlY3RvcnkKLSAgICAgICAgIGlzIG1hdGNoZWQuCisgICAgICAgICAgbm8gaW5kaXZpZHVhbCBmaWxlIHdpdGhpbiB0aGUgZGlyZWN0b3J5IG9yIHN1YmRpcmVjdG9yeQorICAgICAgICAgIGlzIG1hdGNoZWQuCiAgICAgICBVc2VkIHdpdGggIi0tZ2l0LWJsYW1lIiwgZG9lcyBub3QgaXRlcmF0ZSBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5CiAgIFVzaW5nICItLWdpdC1ibGFtZSIgaXMgc2xvdyBhbmQgbWF5IGFkZCBvbGQgY29tbWl0dGVycyBhbmQgYXV0aG9ycwogICAgICAgdGhhdCBhcmUgbm8gbG9uZ2VyIGFjdGl2ZSBtYWludGFpbmVycyB0byB0aGUgb3V0cHV0LgorICBVc2luZyAiLS1yb2xlcyIgb3IgIi0tcm9sZXN0YXRzIiB3aXRoIGdpdCBzZW5kLWVtYWlsIC0tY2MtY21kIG9yIGFueQorICAgICAgb3RoZXIgYXV0b21hdGVkIHRvb2xzIHRoYXQgZXhwZWN0IG9ubHkgWyJuYW1lIl0gPGVtYWlsIGFkZHJlc3M+CisgICAgICBtYXkgbm90IHdvcmsgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIG91dHB1dCBhZnRlciA8ZW1haWwgYWRkcmVzcz4uCisgIFVzaW5nICItLXJvbGVzdGF0cyIgYW5kICItLWdpdC1ibGFtZSIgc2hvd3MgdGhlICMvdG90YWw9JSBjb21taXRzLAorICAgICAgbm90IHRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbnRpcmUgZmlsZSBhdXRob3JlZC4gICMgb2YgY29tbWl0cyBpcworICAgICAgbm90IGEgZ29vZCBtZWFzdXJlIG9mIGFtb3VudCBvZiBjb2RlIGF1dGhvcmVkLiAgMSBtYWpvciBjb21taXQgbWF5CisgICAgICBjb250YWluIGEgdGhvdXNhbmQgbGluZXMsIDUgdHJpdmlhbCBjb21taXRzIG1heSBtb2RpZnkgYSBzaW5nbGUgbGluZS4KKyAgSWYgZ2l0IGlzIG5vdCBpbnN0YWxsZWQsIGJ1dCBtZXJjdXJpYWwgKGhnKSBpcyBpbnN0YWxsZWQgYW5kIGFuIC5oZworICAgICAgcmVwb3NpdG9yeSBleGlzdHMsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcHBseSB0byBtZXJjdXJpYWw6CisgICAgICAgICAgLS1naXQsCisgICAgICAgICAgLS1naXQtbWluLXNpZ25hdHVyZXMsIC0tZ2l0LW1heC1tYWludGFpbmVycywgLS1naXQtbWluLXBlcmNlbnQsIGFuZAorICAgICAgICAgIC0tZ2l0LWJsYW1lCisgICAgICBVc2UgLS1oZy1zaW5jZSBub3QgLS1naXQtc2luY2UgdG8gY29udHJvbCBkYXRlIHNlbGVjdGlvbgogRU9UCiB9CiAKQEAgLTQ5Myw3ICs1NDQsNyBAQAogfQogCiBzdWIgZm9ybWF0X2VtYWlsIHsKLSAgICBteSAoJG5hbWUsICRhZGRyZXNzKSA9IEBfOworICAgIG15ICgkbmFtZSwgJGFkZHJlc3MsICR1c2VuYW1lKSA9IEBfOwogCiAgICAgbXkgJGZvcm1hdHRlZF9lbWFpbDsKIApAQCAtNTA2LDExICs1NTcsMTEgQEAKIAkkbmFtZSA9ICJcIiRuYW1lXCIiOwogICAgIH0KIAotICAgIGlmICgkZW1haWxfdXNlbmFtZSkgeworICAgIGlmICgkdXNlbmFtZSkgewogCWlmICgiJG5hbWUiIGVxICIiKSB7CiAJICAgICRmb3JtYXR0ZWRfZW1haWwgPSAiJGFkZHJlc3MiOwogCX0gZWxzZSB7Ci0JICAgICRmb3JtYXR0ZWRfZW1haWwgPSAiJG5hbWUgPCR7YWRkcmVzc30+IjsKKwkgICAgJGZvcm1hdHRlZF9lbWFpbCA9ICIkbmFtZSA8JGFkZHJlc3M+IjsKIAl9CiAgICAgfSBlbHNlIHsKIAkkZm9ybWF0dGVkX2VtYWlsID0gJGFkZHJlc3M7CkBAIC01NDcsNiArNTk4LDcxIEBACiAgICAgcmV0dXJuICRpbmRleDsKIH0KIAorc3ViIGdldF9tYWludGFpbmVyX3JvbGUgeworICAgIG15ICgkaW5kZXgpID0gQF87CisKKyAgICBteSAkaTsKKyAgICBteSAkc3RhcnQgPSBmaW5kX3N0YXJ0aW5nX2luZGV4KCRpbmRleCk7CisgICAgbXkgJGVuZCA9IGZpbmRfZW5kaW5nX2luZGV4KCRpbmRleCk7CisKKyAgICBteSAkcm9sZTsKKyAgICBteSAkc3Vic3lzdGVtID0gJHR5cGV2YWx1ZVskc3RhcnRdOworICAgIGlmIChsZW5ndGgoJHN1YnN5c3RlbSkgPiAyMCkgeworCSRzdWJzeXN0ZW0gPSBzdWJzdHIoJHN1YnN5c3RlbSwgMCwgMTcpOworCSRzdWJzeXN0ZW0gPX4gcy9ccyokLy87CisJJHN1YnN5c3RlbSA9ICRzdWJzeXN0ZW0gLiAiLi4uIjsKKyAgICB9CisKKyAgICBmb3IgKCRpID0gJHN0YXJ0ICsgMTsgJGkgPCAkZW5kOyAkaSsrKSB7CisJbXkgJHR2ID0gJHR5cGV2YWx1ZVskaV07CisJaWYgKCR0diA9fiBtL14oXEMpOlxzKiguKikvKSB7CisJICAgIG15ICRwdHlwZSA9ICQxOworCSAgICBteSAkcHZhbHVlID0gJDI7CisJICAgIGlmICgkcHR5cGUgZXEgIlMiKSB7CisJCSRyb2xlID0gJHB2YWx1ZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAkcm9sZSA9IGxjKCRyb2xlKTsKKyAgICBpZiAgICAgICgkcm9sZSBlcSAic3VwcG9ydGVkIikgeworCSRyb2xlID0gInN1cHBvcnRlciI7CisgICAgfSBlbHNpZiAoJHJvbGUgZXEgIm1haW50YWluZWQiKSB7CisJJHJvbGUgPSAibWFpbnRhaW5lciI7CisgICAgfSBlbHNpZiAoJHJvbGUgZXEgIm9kZCBmaXhlcyIpIHsKKwkkcm9sZSA9ICJvZGQgZml4ZXIiOworICAgIH0gZWxzaWYgKCRyb2xlIGVxICJvcnBoYW4iKSB7CisJJHJvbGUgPSAib3JwaGFuIG1pbmRlciI7CisgICAgfSBlbHNpZiAoJHJvbGUgZXEgIm9ic29sZXRlIikgeworCSRyb2xlID0gIm9ic29sZXRlIG1pbmRlciI7CisgICAgfSBlbHNpZiAoJHJvbGUgZXEgImJ1cmllZCBhbGl2ZSBpbiByZXBvcnRlcnMiKSB7CisJJHJvbGUgPSAiY2hpZWYgcGVuZ3VpbiI7CisgICAgfQorCisgICAgcmV0dXJuICRyb2xlIC4gIjoiIC4gJHN1YnN5c3RlbTsKK30KKworc3ViIGdldF9saXN0X3JvbGUgeworICAgIG15ICgkaW5kZXgpID0gQF87CisKKyAgICBteSAkaTsKKyAgICBteSAkc3RhcnQgPSBmaW5kX3N0YXJ0aW5nX2luZGV4KCRpbmRleCk7CisgICAgbXkgJGVuZCA9IGZpbmRfZW5kaW5nX2luZGV4KCRpbmRleCk7CisKKyAgICBteSAkc3Vic3lzdGVtID0gJHR5cGV2YWx1ZVskc3RhcnRdOworICAgIGlmIChsZW5ndGgoJHN1YnN5c3RlbSkgPiAyMCkgeworCSRzdWJzeXN0ZW0gPSBzdWJzdHIoJHN1YnN5c3RlbSwgMCwgMTcpOworCSRzdWJzeXN0ZW0gPX4gcy9ccyokLy87CisJJHN1YnN5c3RlbSA9ICRzdWJzeXN0ZW0gLiAiLi4uIjsKKyAgICB9CisKKyAgICBpZiAoJHN1YnN5c3RlbSBlcSAiVEhFIFJFU1QiKSB7CisJJHN1YnN5c3RlbSA9ICIiOworICAgIH0KKworICAgIHJldHVybiAkc3Vic3lzdGVtOworfQorCiBzdWIgYWRkX2NhdGVnb3JpZXMgewogICAgIG15ICgkaW5kZXgpID0gQF87CiAKQEAgLTU2NCwxNyArNjgwLDIyIEBACiAJICAgIGlmICgkcHR5cGUgZXEgIkwiKSB7CiAJCW15ICRsaXN0X2FkZHJlc3MgPSAkcHZhbHVlOwogCQlteSAkbGlzdF9hZGRpdGlvbmFsID0gIiI7CisJCW15ICRsaXN0X3JvbGUgPSBnZXRfbGlzdF9yb2xlKCRpKTsKKworCQlpZiAoJGxpc3Rfcm9sZSBuZSAiIikgeworCQkgICAgJGxpc3Rfcm9sZSA9ICI6IiAuICRsaXN0X3JvbGU7CisJCX0KIAkJaWYgKCRsaXN0X2FkZHJlc3MgPX4gbS8oW15cc10rKVxzKyguKikkLykgewogCQkgICAgJGxpc3RfYWRkcmVzcyA9ICQxOwogCQkgICAgJGxpc3RfYWRkaXRpb25hbCA9ICQyOwogCQl9CiAJCWlmICgkbGlzdF9hZGRpdGlvbmFsID1+IG0vc3Vic2NyaWJlcnMtb25seS8pIHsKIAkJICAgIGlmICgkZW1haWxfc3Vic2NyaWJlcl9saXN0KSB7Ci0JCQlwdXNoKEBsaXN0X3RvLCAkbGlzdF9hZGRyZXNzKTsKKwkJCXB1c2goQGxpc3RfdG8sIFskbGlzdF9hZGRyZXNzLCAic3Vic2NyaWJlciBsaXN0JHtsaXN0X3JvbGV9Il0pOwogCQkgICAgfQogCQl9IGVsc2UgewogCQkgICAgaWYgKCRlbWFpbF9saXN0KSB7Ci0JCQlwdXNoKEBsaXN0X3RvLCAkbGlzdF9hZGRyZXNzKTsKKwkJCXB1c2goQGxpc3RfdG8sIFskbGlzdF9hZGRyZXNzLCAib3BlbiBsaXN0JHtsaXN0X3JvbGV9Il0pOwogCQkgICAgfQogCQl9CiAJICAgIH0gZWxzaWYgKCRwdHlwZSBlcSAiTSIpIHsKQEAgLTU4NSwxMyArNzA2LDE0IEBACiAJCQlpZiAoJHR2ID1+IG0vXihcQyk6XHMqKC4qKS8pIHsKIAkJCSAgICBpZiAoJDEgZXEgIlAiKSB7CiAJCQkJJG5hbWUgPSAkMjsKLQkJCQkkcHZhbHVlID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcyk7CisJCQkJJHB2YWx1ZSA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MsICRlbWFpbF91c2VuYW1lKTsKIAkJCSAgICB9CiAJCQl9CiAJCSAgICB9CiAJCX0KIAkJaWYgKCRlbWFpbF9tYWludGFpbmVyKSB7Ci0JCSAgICBwdXNoX2VtYWlsX2FkZHJlc3NlcygkcHZhbHVlKTsKKwkJICAgIG15ICRyb2xlID0gZ2V0X21haW50YWluZXJfcm9sZSgkaSk7CisJCSAgICBwdXNoX2VtYWlsX2FkZHJlc3NlcygkcHZhbHVlLCAkcm9sZSk7CiAJCX0KIAkgICAgfSBlbHNpZiAoJHB0eXBlIGVxICJUIikgewogCQlwdXNoKEBzY20sICRwdmFsdWUpOwpAQCAtNjE4LDcgKzc0MCw3IEBACiB9CiAKIHN1YiBwdXNoX2VtYWlsX2FkZHJlc3MgewotICAgIG15ICgkbGluZSkgPSBAXzsKKyAgICBteSAoJGxpbmUsICRyb2xlKSA9IEBfOwogCiAgICAgbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkbGluZSk7CiAKQEAgLTYyNyw5ICs3NDksOSBAQAogICAgIH0KIAogICAgIGlmICghJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzKSB7Ci0JcHVzaChAZW1haWxfdG8sIGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MpKTsKKwlwdXNoKEBlbWFpbF90bywgW2Zvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MsICRlbWFpbF91c2VuYW1lKSwgJHJvbGVdKTsKICAgICB9IGVsc2lmICghZW1haWxfaW51c2UoJG5hbWUsICRhZGRyZXNzKSkgewotCXB1c2goQGVtYWlsX3RvLCBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzKSk7CisJcHVzaChAZW1haWxfdG8sIFtmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzLCAkZW1haWxfdXNlbmFtZSksICRyb2xlXSk7CiAJJGVtYWlsX2hhc2hfbmFtZXskbmFtZX0rKzsKIAkkZW1haWxfaGFzaF9hZGRyZXNzeyRhZGRyZXNzfSsrOwogICAgIH0KQEAgLTYzOCwyNCArNzYwLDUyIEBACiB9CiAKIHN1YiBwdXNoX2VtYWlsX2FkZHJlc3NlcyB7Ci0gICAgbXkgKCRhZGRyZXNzKSA9IEBfOworICAgIG15ICgkYWRkcmVzcywgJHJvbGUpID0gQF87CiAKICAgICBteSBAYWRkcmVzc19saXN0ID0gKCk7CiAKICAgICBpZiAocmZjODIyX3ZhbGlkKCRhZGRyZXNzKSkgewotCXB1c2hfZW1haWxfYWRkcmVzcygkYWRkcmVzcyk7CisJcHVzaF9lbWFpbF9hZGRyZXNzKCRhZGRyZXNzLCAkcm9sZSk7CiAgICAgfSBlbHNpZiAoQGFkZHJlc3NfbGlzdCA9IHJmYzgyMl92YWxpZGxpc3QoJGFkZHJlc3MpKSB7CiAJbXkgJGFycmF5X2NvdW50ID0gc2hpZnQoQGFkZHJlc3NfbGlzdCk7CiAJd2hpbGUgKG15ICRlbnRyeSA9IHNoaWZ0KEBhZGRyZXNzX2xpc3QpKSB7Ci0JICAgIHB1c2hfZW1haWxfYWRkcmVzcygkZW50cnkpOworCSAgICBwdXNoX2VtYWlsX2FkZHJlc3MoJGVudHJ5LCAkcm9sZSk7CiAJfQogICAgIH0gZWxzZSB7Ci0JaWYgKCFwdXNoX2VtYWlsX2FkZHJlc3MoJGFkZHJlc3MpKSB7CisJaWYgKCFwdXNoX2VtYWlsX2FkZHJlc3MoJGFkZHJlc3MsICRyb2xlKSkgewogCSAgICB3YXJuKCJJbnZhbGlkIE1BSU5UQUlORVJTIGFkZHJlc3M6ICciIC4gJGFkZHJlc3MgLiAiJ1xuIik7CiAJfQogICAgIH0KIH0KIAorc3ViIGFkZF9yb2xlIHsKKyAgICBteSAoJGxpbmUsICRyb2xlKSA9IEBfOworCisgICAgbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkbGluZSk7CisgICAgbXkgJGVtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgJGVtYWlsX3VzZW5hbWUpOworCisgICAgZm9yZWFjaCBteSAkZW50cnkgKEBlbWFpbF90bykgeworCWlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKKwkgICAgbXkgKCRlbnRyeV9uYW1lLCAkZW50cnlfYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW50cnktPlswXSk7CisJICAgIGlmICgkbmFtZSBlcSAkZW50cnlfbmFtZSB8fCAkYWRkcmVzcyBlcSAkZW50cnlfYWRkcmVzcykgeworCQlpZiAoJGVudHJ5LT5bMV0gZXEgIiIpIHsKKwkJICAgICRlbnRyeS0+WzFdID0gIiRyb2xlIjsKKwkJfSBlbHNlIHsKKwkJICAgICRlbnRyeS0+WzFdID0gIiRlbnRyeS0+WzFdLCRyb2xlIjsKKwkJfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYgKCRlbWFpbCBlcSAkZW50cnktPlswXSkgeworCQlpZiAoJGVudHJ5LT5bMV0gZXEgIiIpIHsKKwkJICAgICRlbnRyeS0+WzFdID0gIiRyb2xlIjsKKwkJfSBlbHNlIHsKKwkJICAgICRlbnRyeS0+WzFdID0gIiRlbnRyeS0+WzFdLCRyb2xlIjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKwogc3ViIHdoaWNoIHsKICAgICBteSAoJGJpbikgPSBAXzsKIApAQCAtNjY5LDcgKzgxOSw3IEBACiB9CiAKIHN1YiBtYWlsbWFwIHsKLSAgICBteSBAbGluZXMgPSBAXzsKKyAgICBteSAoQGxpbmVzKSA9IEBfOwogICAgIG15ICVoYXNoOwogCiAgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CkBAIC02NzgsMTQgKzgyOCwxNCBAQAogCSAgICAkaGFzaHskbmFtZX0gPSAkYWRkcmVzczsKIAl9IGVsc2lmICgkYWRkcmVzcyBuZSAkaGFzaHskbmFtZX0pIHsKIAkgICAgJGFkZHJlc3MgPSAkaGFzaHskbmFtZX07Ci0JICAgICRsaW5lID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcyk7CisJICAgICRsaW5lID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgJGVtYWlsX3VzZW5hbWUpOwogCX0KIAlpZiAoZXhpc3RzKCRtYWlsbWFweyRuYW1lfSkpIHsKIAkgICAgbXkgJG9iaiA9ICRtYWlsbWFweyRuYW1lfTsKIAkgICAgZm9yZWFjaCBteSAkbWFwX2FkZHJlc3MgKEAkb2JqKSB7CiAJCWlmICgoJG1hcF9hZGRyZXNzIGVxICRhZGRyZXNzKSAmJgogCQkgICAgKCRtYXBfYWRkcmVzcyBuZSAkaGFzaHskbmFtZX0pKSB7Ci0JCSAgICAkbGluZSA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGhhc2h7JG5hbWV9KTsKKwkJICAgICRsaW5lID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkaGFzaHskbmFtZX0sICRlbWFpbF91c2VuYW1lKTsKIAkJfQogCSAgICB9CiAJfQpAQCAtNjk0LDM0ICs4NDQsMzggQEAKICAgICByZXR1cm4gQGxpbmVzOwogfQogCi1zdWIgcmVjZW50X2dpdF9zaWdub2ZmcyB7Ci0gICAgbXkgKCRmaWxlKSA9IEBfOwotCi0gICAgbXkgJHNpZ25fb2ZmcyA9ICIiOwotICAgIG15ICRjbWQgPSAiIjsKLSAgICBteSAkb3V0cHV0ID0gIiI7Ci0gICAgbXkgJGNvdW50ID0gMDsKK3N1YiBnaXRfZXhlY3V0ZV9jbWQgeworICAgIG15ICgkY21kKSA9IEBfOwogICAgIG15IEBsaW5lcyA9ICgpOwotICAgIG15ICVoYXNoOwotICAgIG15ICR0b3RhbF9zaWduX29mZnM7CiAKLSAgICBpZiAod2hpY2goImdpdCIpIGVxICIiKSB7Ci0Jd2FybigiJFA6IGdpdCBub3QgZm91bmQuICBBZGQgLS1ub2dpdCB0byBvcHRpb25zP1xuIik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAoISgtZCAiLmdpdCIpKSB7Ci0Jd2FybigiJFA6IC5naXQgZGlyZWN0b3J5IG5vdCBmb3VuZC4gIFVzZSBhIGdpdCByZXBvc2l0b3J5IGZvciBiZXR0ZXIgcmVzdWx0cy5cbiIpOwotCXdhcm4oIiRQOiBwZXJoYXBzICdnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXQnXG4iKTsKLQlyZXR1cm47Ci0gICAgfQotCi0gICAgJGNtZCA9ICJnaXQgbG9nIC0tc2luY2U9JHtlbWFpbF9naXRfc2luY2V9IC0tICR7ZmlsZX0iOwotCi0gICAgJG91dHB1dCA9IGAke2NtZH1gOworICAgIG15ICRvdXRwdXQgPSBgJGNtZGA7CiAgICAgJG91dHB1dCA9fiBzL15ccyovL2dtOwotCiAgICAgQGxpbmVzID0gc3BsaXQoIlxuIiwgJG91dHB1dCk7CiAKKyAgICByZXR1cm4gQGxpbmVzOworfQorCitzdWIgaGdfZXhlY3V0ZV9jbWQgeworICAgIG15ICgkY21kKSA9IEBfOworICAgIG15IEBsaW5lcyA9ICgpOworCisgICAgbXkgJG91dHB1dCA9IGAkY21kYDsKKyAgICBAbGluZXMgPSBzcGxpdCgiXG4iLCAkb3V0cHV0KTsKKworICAgIHJldHVybiBAbGluZXM7Cit9CisKK3N1YiB2Y3NfZmluZF9zaWduZXJzIHsKKyAgICBteSAoJGNtZCkgPSBAXzsKKyAgICBteSBAbGluZXMgPSAoKTsKKyAgICBteSAkY29tbWl0czsKKworICAgIEBsaW5lcyA9ICZ7JFZDU19jbWRzeyJleGVjdXRlX2NtZCJ9fSgkY21kKTsKKworICAgIG15ICRwYXR0ZXJuID0gJFZDU19jbWRzeyJjb21taXRfcGF0dGVybiJ9OworCisgICAgJGNvbW1pdHMgPSBncmVwKC8kcGF0dGVybi8sIEBsaW5lcyk7CSMgb2YgY29tbWl0cworCiAgICAgQGxpbmVzID0gZ3JlcCgvXlstXyAJYS16XStieTouKlxALiokL2ksIEBsaW5lcyk7CiAgICAgaWYgKCEkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZzKSB7CiAJQGxpbmVzID0gZ3JlcCghLyR7cGVuZ3Vpbl9jaGllZnN9L2ksIEBsaW5lcyk7CkBAIC03MjksNyArODgzLDEwNSBAQAogICAgICMgY3V0IC1mMi0gLWQiOiIKICAgICBzLy4qOlxzKiguKylccyovJDEvIGZvciAoQGxpbmVzKTsKIAotICAgICR0b3RhbF9zaWduX29mZnMgPSBAbGluZXM7CisjIyBSZWZvcm1hdCBlbWFpbCBhZGRyZXNzZXMgKHdpdGggbmFtZXMpIHRvIGF2b2lkIGJhZGx5IHdyaXR0ZW4gc2lnbmF0dXJlcworCisgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkbGluZSk7CisJJGxpbmUgPSBmb3JtYXRfZW1haWwoJG5hbWUsICRhZGRyZXNzLCAxKTsKKyAgICB9CisKKyAgICByZXR1cm4gKCRjb21taXRzLCBAbGluZXMpOworfQorCitzdWIgdmNzX3NhdmVfY29tbWl0cyB7CisgICAgbXkgKCRjbWQpID0gQF87CisgICAgbXkgQGxpbmVzID0gKCk7CisgICAgbXkgQGNvbW1pdHMgPSAoKTsKKworICAgIEBsaW5lcyA9ICZ7JFZDU19jbWRzeyJleGVjdXRlX2NtZCJ9fSgkY21kKTsKKworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworCWlmICgkbGluZSA9fiBtLyRWQ1NfY21kc3siYmxhbWVfY29tbWl0X3BhdHRlcm4ifS8pIHsKKwkgICAgcHVzaChAY29tbWl0cywgJDEpOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gQGNvbW1pdHM7Cit9CisKK3N1YiB2Y3NfYmxhbWUgeworICAgIG15ICgkZmlsZSkgPSBAXzsKKyAgICBteSAkY21kOworICAgIG15IEBjb21taXRzID0gKCk7CisKKyAgICByZXR1cm4gQGNvbW1pdHMgaWYgKCEoLWYgJGZpbGUpKTsKKworICAgIGlmIChAcmFuZ2UgJiYgJFZDU19jbWRzeyJibGFtZV9yYW5nZV9jbWQifSBlcSAiIikgeworCW15IEBhbGxfY29tbWl0cyA9ICgpOworCisJJGNtZCA9ICRWQ1NfY21kc3siYmxhbWVfZmlsZV9jbWQifTsKKwkkY21kID1+IHMvKFwkXHcrKS8kMS9lZWc7CQkjaW50ZXJwb2xhdGUgJGNtZAorCUBhbGxfY29tbWl0cyA9IHZjc19zYXZlX2NvbW1pdHMoJGNtZCk7CisKKwlmb3JlYWNoIG15ICRmaWxlX3JhbmdlX2RpZmYgKEByYW5nZSkgeworCSAgICBuZXh0IGlmICghKCRmaWxlX3JhbmdlX2RpZmYgPX4gbS8oLispOiguKyk6KC4rKS8pKTsKKwkgICAgbXkgJGRpZmZfZmlsZSA9ICQxOworCSAgICBteSAkZGlmZl9zdGFydCA9ICQyOworCSAgICBteSAkZGlmZl9sZW5ndGggPSAkMzsKKwkgICAgbmV4dCBpZiAoIiRmaWxlIiBuZSAiJGRpZmZfZmlsZSIpOworCSAgICBmb3IgKG15ICRpID0gJGRpZmZfc3RhcnQ7ICRpIDwgJGRpZmZfc3RhcnQgKyAkZGlmZl9sZW5ndGg7ICRpKyspIHsKKwkJcHVzaChAY29tbWl0cywgJGFsbF9jb21taXRzWyRpXSk7CisJICAgIH0KKwl9CisgICAgfSBlbHNpZiAoQHJhbmdlKSB7CisJZm9yZWFjaCBteSAkZmlsZV9yYW5nZV9kaWZmIChAcmFuZ2UpIHsKKwkgICAgbmV4dCBpZiAoISgkZmlsZV9yYW5nZV9kaWZmID1+IG0vKC4rKTooLispOiguKykvKSk7CisJICAgIG15ICRkaWZmX2ZpbGUgPSAkMTsKKwkgICAgbXkgJGRpZmZfc3RhcnQgPSAkMjsKKwkgICAgbXkgJGRpZmZfbGVuZ3RoID0gJDM7CisJICAgIG5leHQgaWYgKCIkZmlsZSIgbmUgIiRkaWZmX2ZpbGUiKTsKKwkgICAgJGNtZCA9ICRWQ1NfY21kc3siYmxhbWVfcmFuZ2VfY21kIn07CisJICAgICRjbWQgPX4gcy8oXCRcdyspLyQxL2VlZzsJCSNpbnRlcnBvbGF0ZSAkY21kCisJICAgIHB1c2goQGNvbW1pdHMsIHZjc19zYXZlX2NvbW1pdHMoJGNtZCkpOworCX0KKyAgICB9IGVsc2UgeworCSRjbWQgPSAkVkNTX2NtZHN7ImJsYW1lX2ZpbGVfY21kIn07CisJJGNtZCA9fiBzLyhcJFx3KykvJDEvZWVnOwkJI2ludGVycG9sYXRlICRjbWQKKwlAY29tbWl0cyA9IHZjc19zYXZlX2NvbW1pdHMoJGNtZCk7CisgICAgfQorCisgICAgcmV0dXJuIEBjb21taXRzOworfQorCitteSAkcHJpbnRlZF9ub3ZjcyA9IDA7CitzdWIgdmNzX2V4aXN0cyB7CisgICAgJVZDU19jbWRzID0gJVZDU19jbWRzX2dpdDsKKyAgICByZXR1cm4gMSBpZiBldmFsICRWQ1NfY21kc3siYXZhaWxhYmxlIn07CisgICAgJVZDU19jbWRzID0gJVZDU19jbWRzX2hnOworICAgIHJldHVybiAxIGlmIGV2YWwgJFZDU19jbWRzeyJhdmFpbGFibGUifTsKKyAgICAlVkNTX2NtZHMgPSAoKTsKKyAgICBpZiAoISRwcmludGVkX25vdmNzKSB7CisJd2FybigiJFA6IE5vIHN1cHBvcnRlZCBWQ1MgZm91bmQuICBBZGQgLS1ub2dpdCB0byBvcHRpb25zP1xuIik7CisJd2FybigiVXNpbmcgYSBnaXQgcmVwb3NpdG9yeSBwcm9kdWNlcyBiZXR0ZXIgcmVzdWx0cy5cbiIpOworCXdhcm4oIlRyeSBMaW51cyBUb3J2YWxkcycgbGF0ZXN0IGdpdCByZXBvc2l0b3J5IHVzaW5nOlxuIik7CisJd2FybigiZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC0yLjYuZ2l0XG4iKTsKKwkkcHJpbnRlZF9ub3ZjcyA9IDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgdmNzX2Fzc2lnbiB7CisgICAgbXkgKCRyb2xlLCAkZGl2aXNvciwgQGxpbmVzKSA9IEBfOworCisgICAgbXkgJWhhc2g7CisgICAgbXkgJGNvdW50ID0gMDsKKworICAgIHJldHVybiBpZiAoQGxpbmVzIDw9IDApOworCisgICAgaWYgKCRkaXZpc29yIDw9IDApIHsKKwl3YXJuKCJCYWQgZGl2aXNvciBpbiAiIC4gKGNhbGxlcigwKSlbM10gLiAiOiAkZGl2aXNvclxuIik7CisJJGRpdmlzb3IgPSAxOworICAgIH0KIAogICAgIGlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKIAlAbGluZXMgPSBtYWlsbWFwKEBsaW5lcyk7CkBAIC03NDMsOTcgKzk5NSw3MSBAQAogICAgICMgc29ydCAtcm4KICAgICBmb3JlYWNoIG15ICRsaW5lIChzb3J0IHskaGFzaHskYn0gPD0+ICRoYXNoeyRhfX0ga2V5cyAlaGFzaCkgewogCW15ICRzaWduX29mZnMgPSAkaGFzaHskbGluZX07CisJbXkgJHBlcmNlbnQgPSAkc2lnbl9vZmZzICogMTAwIC8gJGRpdmlzb3I7CisKKwkkcGVyY2VudCA9IDEwMCBpZiAoJHBlcmNlbnQgPiAxMDApOwogCSRjb3VudCsrOwogCWxhc3QgaWYgKCRzaWduX29mZnMgPCAkZW1haWxfZ2l0X21pbl9zaWduYXR1cmVzIHx8CiAJCSAkY291bnQgPiAkZW1haWxfZ2l0X21heF9tYWludGFpbmVycyB8fAotCQkgJHNpZ25fb2ZmcyAqIDEwMCAvICR0b3RhbF9zaWduX29mZnMgPCAkZW1haWxfZ2l0X21pbl9wZXJjZW50KTsKLQlwdXNoX2VtYWlsX2FkZHJlc3MoJGxpbmUpOwotICAgIH0KLX0KLQotc3ViIHNhdmVfY29tbWl0cyB7Ci0gICAgbXkgKCRjbWQsIEBjb21taXRzKSA9IEBfOwotICAgIG15ICRvdXRwdXQ7Ci0gICAgbXkgQGxpbmVzID0gKCk7Ci0KLSAgICAkb3V0cHV0ID0gYCR7Y21kfWA7Ci0KLSAgICBAbGluZXMgPSBzcGxpdCgiXG4iLCAkb3V0cHV0KTsKLSAgICBmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKLQlpZiAoJGxpbmUgPX4gbS9eKFx3KykgLykgewotCSAgICBwdXNoIChAY29tbWl0cywgJDEpOworCQkgJHBlcmNlbnQgPCAkZW1haWxfZ2l0X21pbl9wZXJjZW50KTsKKwlwdXNoX2VtYWlsX2FkZHJlc3MoJGxpbmUsICcnKTsKKwlpZiAoJG91dHB1dF9yb2xlc3RhdHMpIHsKKwkgICAgbXkgJGZtdF9wZXJjZW50ID0gc3ByaW50ZigiJS4wZiIsICRwZXJjZW50KTsKKwkgICAgYWRkX3JvbGUoJGxpbmUsICIkcm9sZTokc2lnbl9vZmZzLyRkaXZpc29yPSRmbXRfcGVyY2VudCUiKTsKKwl9IGVsc2UgeworCSAgICBhZGRfcm9sZSgkbGluZSwgJHJvbGUpOwogCX0KICAgICB9Ci0gICAgcmV0dXJuIEBjb21taXRzOwogfQogCi1zdWIgZ2l0X2Fzc2lnbl9ibGFtZSB7CitzdWIgdmNzX2ZpbGVfc2lnbm9mZnMgewogICAgIG15ICgkZmlsZSkgPSBAXzsKIAotICAgIG15IEBsaW5lcyA9ICgpOworICAgIG15IEBzaWduZXJzID0gKCk7CisgICAgbXkgJGNvbW1pdHM7CisKKyAgICByZXR1cm4gaWYgKCF2Y3NfZXhpc3RzKCkpOworCisgICAgbXkgJGNtZCA9ICRWQ1NfY21kc3siZmluZF9zaWduZXJzX2NtZCJ9OworICAgICRjbWQgPX4gcy8oXCRcdyspLyQxL2VlZzsJCSMgaW50ZXJwb2xhdGUgJGNtZAorCisgICAgKCRjb21taXRzLCBAc2lnbmVycykgPSB2Y3NfZmluZF9zaWduZXJzKCRjbWQpOworICAgIHZjc19hc3NpZ24oImNvbW1pdF9zaWduZXIiLCAkY29tbWl0cywgQHNpZ25lcnMpOworfQorCitzdWIgdmNzX2ZpbGVfYmxhbWUgeworICAgIG15ICgkZmlsZSkgPSBAXzsKKworICAgIG15IEBzaWduZXJzID0gKCk7CiAgICAgbXkgQGNvbW1pdHMgPSAoKTsKLSAgICBteSAkY21kOwotICAgIG15ICRvdXRwdXQ7Ci0gICAgbXkgJWhhc2g7Ci0gICAgbXkgJHRvdGFsX3NpZ25fb2ZmczsKLSAgICBteSAkY291bnQ7CisgICAgbXkgJHRvdGFsX2NvbW1pdHM7CiAKLSAgICBpZiAoQHJhbmdlKSB7Ci0JZm9yZWFjaCBteSAkZmlsZV9yYW5nZV9kaWZmIChAcmFuZ2UpIHsKLQkgICAgbmV4dCBpZiAoISgkZmlsZV9yYW5nZV9kaWZmID1+IG0vKC4rKTooLispOiguKykvKSk7Ci0JICAgIG15ICRkaWZmX2ZpbGUgPSAkMTsKLQkgICAgbXkgJGRpZmZfc3RhcnQgPSAkMjsKLQkgICAgbXkgJGRpZmZfbGVuZ3RoID0gJDM7Ci0JICAgIG5leHQgaWYgKCEoIiRmaWxlIiBlcSAiJGRpZmZfZmlsZSIpKTsKLQkgICAgJGNtZCA9ICJnaXQgYmxhbWUgLWwgLUwgJGRpZmZfc3RhcnQsKyRkaWZmX2xlbmd0aCAkZmlsZSI7Ci0JICAgIEBjb21taXRzID0gc2F2ZV9jb21taXRzKCRjbWQsIEBjb21taXRzKTsKLQl9Ci0gICAgfSBlbHNlIHsKLQlpZiAoLWYgJGZpbGUpIHsKLQkgICAgJGNtZCA9ICJnaXQgYmxhbWUgLWwgJGZpbGUiOwotCSAgICBAY29tbWl0cyA9IHNhdmVfY29tbWl0cygkY21kLCBAY29tbWl0cyk7Ci0JfQotICAgIH0KKyAgICByZXR1cm4gaWYgKCF2Y3NfZXhpc3RzKCkpOwogCi0gICAgJHRvdGFsX3NpZ25fb2ZmcyA9IDA7CisgICAgQGNvbW1pdHMgPSB2Y3NfYmxhbWUoJGZpbGUpOwogICAgIEBjb21taXRzID0gdW5pcShAY29tbWl0cyk7CisgICAgJHRvdGFsX2NvbW1pdHMgPSBAY29tbWl0czsKKwogICAgIGZvcmVhY2ggbXkgJGNvbW1pdCAoQGNvbW1pdHMpIHsKLQkkY21kID0gImdpdCBsb2cgLTEgJHtjb21taXR9IjsKKwlteSAkY29tbWl0X2NvdW50OworCW15IEBjb21taXRfc2lnbmVycyA9ICgpOwogCi0JJG91dHB1dCA9IGAke2NtZH1gOwotCSRvdXRwdXQgPX4gcy9eXHMqLy9nbTsKLQlAbGluZXMgPSBzcGxpdCgiXG4iLCAkb3V0cHV0KTsKKwlteSAkY21kID0gJFZDU19jbWRzeyJmaW5kX2NvbW1pdF9zaWduZXJzX2NtZCJ9OworCSRjbWQgPX4gcy8oXCRcdyspLyQxL2VlZzsJI2ludGVycG9sYXRlICRjbWQKIAotCUBsaW5lcyA9IGdyZXAoL15bLV8gCWEtel0rYnk6LipcQC4qJC9pLCBAbGluZXMpOwotCWlmICghJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcykgewotCSAgICBAbGluZXMgPSBncmVwKCEvJHtwZW5ndWluX2NoaWVmc30vaSwgQGxpbmVzKTsKLQl9Ci0KLQkjIGN1dCAtZjItIC1kIjoiCi0Jcy8uKjpccyooLispXHMqLyQxLyBmb3IgKEBsaW5lcyk7Ci0KLQkkdG90YWxfc2lnbl9vZmZzICs9IEBsaW5lczsKLQotCWlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKLQkgICAgQGxpbmVzID0gbWFpbG1hcChAbGluZXMpOwotCX0KLQotCSRoYXNoeyRffSsrIGZvciBAbGluZXM7CisJKCRjb21taXRfY291bnQsIEBjb21taXRfc2lnbmVycykgPSB2Y3NfZmluZF9zaWduZXJzKCRjbWQpOworCXB1c2goQHNpZ25lcnMsIEBjb21taXRfc2lnbmVycyk7CiAgICAgfQogCi0gICAgJGNvdW50ID0gMDsKLSAgICBmb3JlYWNoIG15ICRsaW5lIChzb3J0IHskaGFzaHskYn0gPD0+ICRoYXNoeyRhfX0ga2V5cyAlaGFzaCkgewotCW15ICRzaWduX29mZnMgPSAkaGFzaHskbGluZX07Ci0JJGNvdW50Kys7Ci0JbGFzdCBpZiAoJHNpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3NpZ25hdHVyZXMgfHwKLQkJICRjb3VudCA+ICRlbWFpbF9naXRfbWF4X21haW50YWluZXJzIHx8Ci0JCSAkc2lnbl9vZmZzICogMTAwIC8gJHRvdGFsX3NpZ25fb2ZmcyA8ICRlbWFpbF9naXRfbWluX3BlcmNlbnQpOwotCXB1c2hfZW1haWxfYWRkcmVzcygkbGluZSk7CisgICAgaWYgKCRmcm9tX2ZpbGVuYW1lKSB7CisJdmNzX2Fzc2lnbigiY29tbWl0cyIsICR0b3RhbF9jb21taXRzLCBAc2lnbmVycyk7CisgICAgfSBlbHNlIHsKKwl2Y3NfYXNzaWduKCJtb2RpZmllZCBjb21taXRzIiwgJHRvdGFsX2NvbW1pdHMsIEBzaWduZXJzKTsKICAgICB9CiB9CiAKIHN1YiB1bmlxIHsKLSAgICBteSBAcGFybXMgPSBAXzsKKyAgICBteSAoQHBhcm1zKSA9IEBfOwogCiAgICAgbXkgJXNhdzsKICAgICBAcGFybXMgPSBncmVwKCEkc2F3eyRffSsrLCBAcGFybXMpOwpAQCAtODQxLDcgKzEwNjcsNyBAQAogfQogCiBzdWIgc29ydF9hbmRfdW5pcSB7Ci0gICAgbXkgQHBhcm1zID0gQF87CisgICAgbXkgKEBwYXJtcykgPSBAXzsKIAogICAgIG15ICVzYXc7CiAgICAgQHBhcm1zID0gc29ydCBAcGFybXM7CkBAIC04NDksOCArMTA3NSwyNyBAQAogICAgIHJldHVybiBAcGFybXM7CiB9CiAKK3N1YiBtZXJnZV9lbWFpbCB7CisgICAgbXkgQGxpbmVzOworICAgIG15ICVzYXc7CisKKyAgICBmb3IgKEBfKSB7CisJbXkgKCRhZGRyZXNzLCAkcm9sZSkgPSBAJF87CisJaWYgKCEkc2F3eyRhZGRyZXNzfSkgeworCSAgICBpZiAoJG91dHB1dF9yb2xlcykgeworCQlwdXNoKEBsaW5lcywgIiRhZGRyZXNzICgkcm9sZSkiKTsKKwkgICAgfSBlbHNlIHsKKwkJcHVzaChAbGluZXMsICRhZGRyZXNzKTsKKwkgICAgfQorCSAgICAkc2F3eyRhZGRyZXNzfSA9IDE7CisJfQorICAgIH0KKworICAgIHJldHVybiBAbGluZXM7Cit9CisKIHN1YiBvdXRwdXQgewotICAgIG15IEBwYXJtcyA9IEBfOworICAgIG15IChAcGFybXMpID0gQF87CiAKICAgICBpZiAoJG91dHB1dF9tdWx0aWxpbmUpIHsKIAlmb3JlYWNoIG15ICRsaW5lIChAcGFybXMpIHsKQEAgLTk0NywxMSArMTE5Miw5IEBACiAgICAgaWYgKCRzID1+IG0vXig/OiRyZmM4MjJyZSk/KD86LCg/OiRyZmM4MjJyZSk/KSokL3NvICYmCiAJJHMgPX4gbS9eJHJmYzgyMl9jaGFyKiQvKSB7CiAgICAgICAgIHdoaWxlICgkcyA9fiBtLyg/Ol58LCRyZmM4MjJfbHdzcCopKCRyZmM4MjJyZSkvZ29zKSB7Ci0gICAgICAgICAgICBwdXNoIEByLCAkMTsKKyAgICAgICAgICAgIHB1c2goQHIsICQxKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gd2FudGFycmF5ID8gKHNjYWxhcihAciksIEByKSA6IDE7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICByZXR1cm4gd2FudGFycmF5ID8gKCkgOiAwOwotICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5ID8gKCkgOiAwOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9oZWFkZXJzLnNoIGIvc2NyaXB0cy9oZWFkZXJzLnNoCmluZGV4IDAzMDhlY2MuLjFkZGNkZDMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvaGVhZGVycy5zaAorKysgYi9zY3JpcHRzL2hlYWRlcnMuc2gKQEAgLTgsOCArOCw2IEBACiB7CiAJaWYgWyAtZiAke3NyY3RyZWV9L2FyY2gvJDIvaW5jbHVkZS9hc20vS2J1aWxkIF07IHRoZW4KIAkJbWFrZSBBUkNIPSQyIEtCVUlMRF9IRUFERVJTPSQxIGhlYWRlcnNfJDEKLQllbGlmIFsgLWYgJHtzcmN0cmVlfS9pbmNsdWRlL2FzbS0kMi9LYnVpbGQgXTsgdGhlbgotCQltYWtlIEFSQ0g9JDIgS0JVSUxEX0hFQURFUlM9JDEgaGVhZGVyc18kMQogCWVsc2UKIAkJcHJpbnRmICJJZ25vcmluZyBhcmNoOiAlc1xuIiAke2FyY2h9CiAJZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQppbmRleCA4MDU5OWUzLi45OTllOGE3IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBACiAJJDwgLW8gJChLY29uZmlnKQogCiBzaWxlbnRvbGRjb25maWc6ICQob2JqKS9jb25mCisJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCiAJJDwgLXMgJChLY29uZmlnKQogCiBsb2NhbG1vZGNvbmZpZzogJChvYmopL3N0cmVhbWxpbmVfY29uZmlnLnBsICQob2JqKS9jb25mCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCmluZGV4IGI1NWU3MmYuLmM0ZGVjODAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCkBAIC02NzcsNyArNjc3LDcgQEAKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJY29uc3QgY2hhciAqc3RyOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JRklMRSAqb3V0LCAqb3V0X2g7CisJRklMRSAqb3V0LCAqdHJpc3RhdGUsICpvdXRfaDsKIAl0aW1lX3Qgbm93OwogCWludCBpLCBsOwogCkBAIC02OTIsOSArNjkyLDE2IEBACiAJaWYgKCFvdXQpCiAJCXJldHVybiAxOwogCisJdHJpc3RhdGUgPSBmb3BlbigiLnRtcGNvbmZpZ190cmlzdGF0ZSIsICJ3Iik7CisJaWYgKCF0cmlzdGF0ZSkgeworCQlmY2xvc2Uob3V0KTsKKwkJcmV0dXJuIDE7CisJfQorCiAJb3V0X2ggPSBmb3BlbigiLnRtcGNvbmZpZy5oIiwgInciKTsKIAlpZiAoIW91dF9oKSB7CiAJCWZjbG9zZShvdXQpOworCQlmY2xvc2UodHJpc3RhdGUpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTcwNyw2ICs3MTQsOSBAQAogCQkgICAgICIjICVzIgogCQkgICAgICIjXG4iLAogCQkgICAgIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSksIGN0aW1lKCZub3cpKTsKKwlmcHJpbnRmKHRyaXN0YXRlLCAiI1xuIgorCQkJICAiIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCAtIGRvIG5vdCBlZGl0XG4iCisJCQkgICJcbiIpOwogCWZwcmludGYob3V0X2gsICIvKlxuIgogCQkgICAgICAgIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEMgY29uZmlnOiBkb24ndCBlZGl0XG4iCiAJCSAgICAgICAiICogTGludXgga2VybmVsIHZlcnNpb246ICVzXG4iCkBAIC03MjcsMTAgKzczNywxNCBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSBtb2Q6CiAJCQkJZnByaW50ZihvdXQsICJDT05GSUdfJXM9bVxuIiwgc3ltLT5uYW1lKTsKKwkJCQlmcHJpbnRmKHRyaXN0YXRlLCAiQ09ORklHXyVzPU1cbiIsIHN5bS0+bmFtZSk7CiAJCQkJZnByaW50ZihvdXRfaCwgIiNkZWZpbmUgQ09ORklHXyVzX01PRFVMRSAxXG4iLCBzeW0tPm5hbWUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSB5ZXM6CiAJCQkJZnByaW50ZihvdXQsICJDT05GSUdfJXM9eVxuIiwgc3ltLT5uYW1lKTsKKwkJCQlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUpCisJCQkJCWZwcmludGYodHJpc3RhdGUsICJDT05GSUdfJXM9WVxuIiwKKwkJCQkJCQlzeW0tPm5hbWUpOwogCQkJCWZwcmludGYob3V0X2gsICIjZGVmaW5lIENPTkZJR18lcyAxXG4iLCBzeW0tPm5hbWUpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNzcyLDEzICs3ODYsMTkgQEAKIAkJfQogCX0KIAlmY2xvc2Uob3V0KTsKKwlmY2xvc2UodHJpc3RhdGUpOwogCWZjbG9zZShvdXRfaCk7CiAKIAluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9IRUFERVIiKTsKIAlpZiAoIW5hbWUpCi0JCW5hbWUgPSAiaW5jbHVkZS9saW51eC9hdXRvY29uZi5oIjsKKwkJbmFtZSA9ICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIjsKIAlpZiAocmVuYW1lKCIudG1wY29uZmlnLmgiLCBuYW1lKSkKIAkJcmV0dXJuIDE7CisJbmFtZSA9IGdldGVudigiS0NPTkZJR19UUklTVEFURSIpOworCWlmICghbmFtZSkKKwkJbmFtZSA9ICJpbmNsdWRlL2NvbmZpZy90cmlzdGF0ZS5jb25mIjsKKwlpZiAocmVuYW1lKCIudG1wY29uZmlnX3RyaXN0YXRlIiwgbmFtZSkpCisJCXJldHVybiAxOwogCW5hbWUgPSBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKTsKIAkvKgogCSAqIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzdGVwLCBrYnVpbGQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhdXRvLmNvbmYKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWtjb21waWxlX2ggYi9zY3JpcHRzL21rY29tcGlsZV9oCmluZGV4IGJjZTNkMGYuLjIzZGJhZDggMTAwNzU1Ci0tLSBhL3NjcmlwdHMvbWtjb21waWxlX2gKKysrIGIvc2NyaXB0cy9ta2NvbXBpbGVfaApAQCAtMTQsNyArMTQsNyBAQAogIyBTbyAic3VkbyBtYWtlIGluc3RhbGwiIHdvbid0IGNoYW5nZSB0aGUgImNvbXBpbGVkIGJ5IDx1c2VyPiIKICMgZG8gImNvbXBpbGVkIGJ5IHJvb3QiCiAKLWlmIFsgLXIgJFRBUkdFVCAtYSAhIC1PIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCBdOyB0aGVuCitpZiBbIC1yICRUQVJHRVQgLWEgISAtTyBpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIF07IHRoZW4KICAgdmVjaG8gIiAgU0tJUFBFRCAkVEFSR0VUIgogICBleGl0IDAKIGZpCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9NYWtlZmlsZSBiL3NjcmlwdHMvbW9kL01ha2VmaWxlCmluZGV4IDExZDY5YzMuLmZmOTU0ZjggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL01ha2VmaWxlCisrKyBiL3NjcmlwdHMvbW9kL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogJChvYmopL21vZHBvc3QubyAkKG9iaikvZmlsZTJhbGlhcy5vICQob2JqKS9zdW12ZXJzaW9uLm86ICQob2JqKS9lbGZjb25maWcuaAogCiBxdWlldF9jbWRfZWxmY29uZmlnID0gTUtFTEYgICAkQAotICAgICAgY21kX2VsZmNvbmZpZyA9ICQob2JqKS9ta19lbGZjb25maWcgJChBUkNIKSA8ICQ8ID4gJEAKKyAgICAgIGNtZF9lbGZjb25maWcgPSAkKG9iaikvbWtfZWxmY29uZmlnIDwgJDwgPiAkQAogCiAkKG9iaikvZWxmY29uZmlnLmg6ICQob2JqKS9lbXB0eS5vICQob2JqKS9ta19lbGZjb25maWcgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxlbGZjb25maWcpCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9ta19lbGZjb25maWcuYyBiL3NjcmlwdHMvbW9kL21rX2VsZmNvbmZpZy5jCmluZGV4IDZhOTZkNDcuLjYzOWJjYTcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21rX2VsZmNvbmZpZy5jCisrKyBiL3NjcmlwdHMvbW9kL21rX2VsZmNvbmZpZy5jCkBAIC05LDkgKzksNiBAQAogCXVuc2lnbmVkIGNoYXIgZWlbRUlfTklERU5UXTsKIAl1bmlvbiB7IHNob3J0IHM7IGNoYXIgY1syXTsgfSBlbmRpYW5fdGVzdDsKIAotCWlmIChhcmdjICE9IDIpIHsKLQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogbm8gYXJjaFxuIik7Ci0JfQogCWlmIChmcmVhZChlaSwgMSwgRUlfTklERU5ULCBzdGRpbikgIT0gRUlfTklERU5UKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGlucHV0IHRydW5jYXRlZFxuIik7CiAJCXJldHVybiAxOwpAQCAtNTUsMTIgKzUyLDYgQEAKIAllbHNlCiAJCWV4aXQoMSk7CiAKLQlpZiAoKHN0cmNtcChhcmd2WzFdLCAiaDgzMDAiKSA9PSAwKQotCSAgICB8fCAoc3RyY21wKGFyZ3ZbMV0sICJibGFja2ZpbiIpID09IDApKQotCQlwcmludGYoIiNkZWZpbmUgTU9EVUxFX1NZTUJPTF9QUkVGSVggXCJfXCJcbiIpOwotCWVsc2UKLQkJcHJpbnRmKCIjZGVmaW5lIE1PRFVMRV9TWU1CT0xfUFJFRklYIFwiXCJcbiIpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCA4MDFhMTZhLi4yMDkyMzYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0xNSw4ICsxNSwxNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJtb2Rwb3N0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIKICNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2xpbnV4L2xpY2Vuc2UuaCIKIAorLyogU29tZSB0b29sY2hhaW5zIHVzZSBhIGBfJyBwcmVmaXggZm9yIGFsbCB1c2VyIHN5bWJvbHMuICovCisjaWZkZWYgQ09ORklHX1NZTUJPTF9QUkVGSVgKKyNkZWZpbmUgTU9EVUxFX1NZTUJPTF9QUkVGSVggQ09ORklHX1NZTUJPTF9QUkVGSVgKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9TWU1CT0xfUFJFRklYICIiCisjZW5kaWYKKworCiAvKiBBcmUgd2UgdXNpbmcgQ09ORklHX01PRFZFUlNJT05TPyAqLwogaW50IG1vZHZlcnNpb25zID0gMDsKIC8qIFdhcm4gYWJvdXQgdW5kZWZpbmVkIHN5bWJvbHM/IChkbyBzbyBpZiB3ZSBoYXZlIHZtbGludXgpICovCkBAIC00NTEsOCArNDYwLDYgQEAKIAkJCWluZm8tPmV4cG9ydF91bnVzZWRfZ3BsX3NlYyA9IGk7CiAJCWVsc2UgaWYgKHN0cmNtcChzZWNuYW1lLCAiX19rc3ltdGFiX2dwbF9mdXR1cmUiKSA9PSAwKQogCQkJaW5mby0+ZXhwb3J0X2dwbF9mdXR1cmVfc2VjID0gaTsKLQkJZWxzZSBpZiAoc3RyY21wKHNlY25hbWUsICJfX21hcmtlcnNfc3RyaW5ncyIpID09IDApCi0JCQlpbmZvLT5tYXJrZXJzX3N0cmluZ3Nfc2VjID0gaTsKIAogCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9TWU1UQUIpCiAJCQljb250aW51ZTsKQEAgLTUxNSw3ICs1MjIsNyBAQAogCQlicmVhazsKIAljYXNlIFNITl9BQlM6CiAJCS8qIENSQydkIHN5bWJvbCAqLwotCQlpZiAobWVtY21wKHN5bW5hbWUsIENSQ19QRlgsIHN0cmxlbihDUkNfUEZYKSkgPT0gMCkgeworCQlpZiAoc3RybmNtcChzeW1uYW1lLCBDUkNfUEZYLCBzdHJsZW4oQ1JDX1BGWCkpID09IDApIHsKIAkJCWNyYyA9ICh1bnNpZ25lZCBpbnQpIHN5bS0+c3RfdmFsdWU7CiAJCQlzeW1fdXBkYXRlX2NyYyhzeW1uYW1lICsgc3RybGVuKENSQ19QRlgpLCBtb2QsIGNyYywKIAkJCQkJZXhwb3J0KTsKQEAgLTU1OSw3ICs1NjYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBBbGwgZXhwb3J0ZWQgc3ltYm9scyAqLwotCQlpZiAobWVtY21wKHN5bW5hbWUsIEtTWU1UQUJfUEZYLCBzdHJsZW4oS1NZTVRBQl9QRlgpKSA9PSAwKSB7CisJCWlmIChzdHJuY21wKHN5bW5hbWUsIEtTWU1UQUJfUEZYLCBzdHJsZW4oS1NZTVRBQl9QRlgpKSA9PSAwKSB7CiAJCQlzeW1fYWRkX2V4cG9ydGVkKHN5bW5hbWUgKyBzdHJsZW4oS1NZTVRBQl9QRlgpLCBtb2QsCiAJCQkJCWV4cG9ydCk7CiAJCX0KQEAgLTE1MDksNjIgKzE1MTYsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZ2V0X21hcmtlcnMoc3RydWN0IGVsZl9pbmZvICppbmZvLCBzdHJ1Y3QgbW9kdWxlICptb2QpCi17Ci0JY29uc3QgRWxmX1NoZHIgKnNoID0gJmluZm8tPnNlY2hkcnNbaW5mby0+bWFya2Vyc19zdHJpbmdzX3NlY107Ci0JY29uc3QgY2hhciAqc3RyaW5ncyA9IChjb25zdCBjaGFyICopIGluZm8tPmhkciArIHNoLT5zaF9vZmZzZXQ7Ci0JY29uc3QgRWxmX1N5bSAqc3ltLCAqZmlyc3Rfc3ltLCAqbGFzdF9zeW07Ci0Jc2l6ZV90IG47Ci0KLQlpZiAoIWluZm8tPm1hcmtlcnNfc3RyaW5nc19zZWMpCi0JCXJldHVybjsKLQotCS8qCi0JICogRmlyc3QgY291bnQgdGhlIHN0cmluZ3MuICBXZSBsb29rIGZvciBhbGwgdGhlIHN5bWJvbHMgZGVmaW5lZAotCSAqIGluIHRoZSBfX21hcmtlcnNfc3RyaW5ncyBzZWN0aW9uIG5hbWVkIF9fbXN0cnRhYl8qLiAgRm9yCi0JICogdGhlc2UgbG9jYWwgbmFtZXMsIHRoZSBjb21waWxlciBwdXRzIGEgcmFuZG9tIC5OTk4gc3VmZml4IG9uLAotCSAqIHNvIHRoZSBuYW1lcyBkb24ndCBjb3JyZXNwb25kIGV4YWN0bHkuCi0JICovCi0JZmlyc3Rfc3ltID0gbGFzdF9zeW0gPSBOVUxMOwotCW4gPSAwOwotCWZvciAoc3ltID0gaW5mby0+c3ltdGFiX3N0YXJ0OyBzeW0gPCBpbmZvLT5zeW10YWJfc3RvcDsgc3ltKyspCi0JCWlmIChFTEZfU1RfVFlQRShzeW0tPnN0X2luZm8pID09IFNUVF9PQkpFQ1QgJiYKLQkJICAgIHN5bS0+c3Rfc2huZHggPT0gaW5mby0+bWFya2Vyc19zdHJpbmdzX3NlYyAmJgotCQkgICAgIXN0cm5jbXAoaW5mby0+c3RydGFiICsgc3ltLT5zdF9uYW1lLAotCQkJICAgICAiX19tc3RydGFiXyIsIHNpemVvZiAiX19tc3RydGFiXyIgLSAxKSkgewotCQkJaWYgKGZpcnN0X3N5bSA9PSBOVUxMKQotCQkJCWZpcnN0X3N5bSA9IHN5bTsKLQkJCWxhc3Rfc3ltID0gc3ltOwotCQkJKytuOwotCQl9Ci0KLQlpZiAobiA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIE5vdyBjb2xsZWN0IGVhY2ggbmFtZSBhbmQgZm9ybWF0IGludG8gYSBsaW5lIGZvciB0aGUgb3V0cHV0LgotCSAqIExpbmVzIGxvb2sgbGlrZToKLQkgKgltYXJrZXJfbmFtZQl2bWxpbnV4CW1hcmtlciAlcyBmb3JtYXQgJWQKLQkgKiBUaGUgZm9ybWF0IHN0cmluZyBhZnRlciB0aGUgc2Vjb25kIFx0IGNhbiB1c2Ugd2hpdGVzcGFjZS4KLQkgKi8KLQltb2QtPm1hcmtlcnMgPSBOT0ZBSUwobWFsbG9jKHNpemVvZiBtb2QtPm1hcmtlcnNbMF0gKiBuKSk7Ci0JbW9kLT5ubWFya2VycyA9IG47Ci0KLQluID0gMDsKLQlmb3IgKHN5bSA9IGZpcnN0X3N5bTsgc3ltIDw9IGxhc3Rfc3ltOyBzeW0rKykKLQkJaWYgKEVMRl9TVF9UWVBFKHN5bS0+c3RfaW5mbykgPT0gU1RUX09CSkVDVCAmJgotCQkgICAgc3ltLT5zdF9zaG5keCA9PSBpbmZvLT5tYXJrZXJzX3N0cmluZ3Nfc2VjICYmCi0JCSAgICAhc3RybmNtcChpbmZvLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWUsCi0JCQkgICAgICJfX21zdHJ0YWJfIiwgc2l6ZW9mICJfX21zdHJ0YWJfIiAtIDEpKSB7Ci0JCQljb25zdCBjaGFyICpuYW1lID0gc3RyaW5ncyArIHN5bS0+c3RfdmFsdWU7Ci0JCQljb25zdCBjaGFyICpmbXQgPSBzdHJjaHIobmFtZSwgJ1wwJykgKyAxOwotCQkJY2hhciAqbGluZSA9IE5VTEw7Ci0JCQlhc3ByaW50ZigmbGluZSwgIiVzXHQlc1x0JXNcbiIsIG5hbWUsIG1vZC0+bmFtZSwgZm10KTsKLQkJCU5PRkFJTChsaW5lKTsKLQkJCW1vZC0+bWFya2Vyc1tuKytdID0gbGluZTsKLQkJfQotfQotCiBzdGF0aWMgdm9pZCByZWFkX3N5bWJvbHMoY2hhciAqbW9kbmFtZSkKIHsKIAljb25zdCBjaGFyICpzeW1uYW1lOwpAQCAtMTYyMCw4ICsxNTcxLDYgQEAKIAkJZ2V0X3NyY192ZXJzaW9uKG1vZG5hbWUsIG1vZC0+c3JjdmVyc2lvbiwKIAkJCQlzaXplb2YobW9kLT5zcmN2ZXJzaW9uKS0xKTsKIAotCWdldF9tYXJrZXJzKCZpbmZvLCBtb2QpOwotCiAJcGFyc2VfZWxmX2ZpbmlzaCgmaW5mbyk7CiAKIAkvKiBPdXIgdHJpY2sgdG8gZ2V0IHZlcnNpb25pbmcgZm9yIG1vZHVsZSBzdHJ1Y3QgZXRjLiAtIGl0J3MKQEAgLTE5NzYsOTYgKzE5MjUsNiBAQAogCXdyaXRlX2lmX2NoYW5nZWQoJmJ1ZiwgZm5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfbWFya2VyKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm10KQotewotCWNoYXIgKmxpbmUgPSBOVUxMOwotCWFzcHJpbnRmKCZsaW5lLCAiJXNcdCVzXHQlc1xuIiwgbmFtZSwgbW9kLT5uYW1lLCBmbXQpOwotCU5PRkFJTChsaW5lKTsKLQotCW1vZC0+bWFya2VycyA9IE5PRkFJTChyZWFsbG9jKG1vZC0+bWFya2VycywgKChtb2QtPm5tYXJrZXJzICsgMSkgKgotCQkJCQkJICAgICBzaXplb2YgbW9kLT5tYXJrZXJzWzBdKSkpOwotCW1vZC0+bWFya2Vyc1ttb2QtPm5tYXJrZXJzKytdID0gbGluZTsKLX0KLQotc3RhdGljIHZvaWQgcmVhZF9tYXJrZXJzKGNvbnN0IGNoYXIgKmZuYW1lKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcG9zID0gMDsKLQl2b2lkICpmaWxlID0gZ3JhYl9maWxlKGZuYW1lLCAmc2l6ZSk7Ci0JY2hhciAqbGluZTsKLQotCWlmICghZmlsZSkJCS8qIE5vIG9sZCBtYXJrZXJzLCBzaWxlbnRseSBpZ25vcmUgKi8KLQkJcmV0dXJuOwotCi0Jd2hpbGUgKChsaW5lID0gZ2V0X25leHRfbGluZSgmcG9zLCBmaWxlLCBzaXplKSkpIHsKLQkJY2hhciAqbWFya2VyLCAqbW9kbmFtZSwgKmZtdDsKLQkJc3RydWN0IG1vZHVsZSAqbW9kOwotCi0JCW1hcmtlciA9IGxpbmU7Ci0JCW1vZG5hbWUgPSBzdHJjaHIobWFya2VyLCAnXHQnKTsKLQkJaWYgKCFtb2RuYW1lKQotCQkJZ290byBmYWlsOwotCQkqbW9kbmFtZSsrID0gJ1wwJzsKLQkJZm10ID0gc3RyY2hyKG1vZG5hbWUsICdcdCcpOwotCQlpZiAoIWZtdCkKLQkJCWdvdG8gZmFpbDsKLQkJKmZtdCsrID0gJ1wwJzsKLQkJaWYgKCptYXJrZXIgPT0gJ1wwJyB8fCAqbW9kbmFtZSA9PSAnXDAnKQotCQkJZ290byBmYWlsOwotCi0JCW1vZCA9IGZpbmRfbW9kdWxlKG1vZG5hbWUpOwotCQlpZiAoIW1vZCkgewotCQkJbW9kID0gbmV3X21vZHVsZShtb2RuYW1lKTsKLQkJCW1vZC0+c2tpcCA9IDE7Ci0JCX0KLQkJaWYgKGlzX3ZtbGludXgobW9kbmFtZSkpIHsKLQkJCWhhdmVfdm1saW51eCA9IDE7Ci0JCQltb2QtPnNraXAgPSAwOwotCQl9Ci0KLQkJaWYgKCFtb2QtPnNraXApCi0JCQlhZGRfbWFya2VyKG1vZCwgbWFya2VyLCBmbXQpOwotCX0KLQlyZWxlYXNlX2ZpbGUoZmlsZSwgc2l6ZSk7Ci0JcmV0dXJuOwotZmFpbDoKLQlmYXRhbCgicGFyc2UgZXJyb3IgaW4gbWFya2VycyBsaXN0IGZpbGVcbiIpOwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVfc3RyaW5ncyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotCXJldHVybiBzdHJjbXAoKihjb25zdCBjaGFyICoqKSBhLCAqKGNvbnN0IGNoYXIgKiopIGIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV9tYXJrZXJzKGNvbnN0IGNoYXIgKmZuYW1lKQotewotCXN0cnVjdCBidWZmZXIgYnVmID0geyB9OwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKLQlzaXplX3QgaTsKLQotCWZvciAobW9kID0gbW9kdWxlczsgbW9kOyBtb2QgPSBtb2QtPm5leHQpCi0JCWlmICgoIWV4dGVybmFsX21vZHVsZSB8fCAhbW9kLT5za2lwKSAmJiBtb2QtPm1hcmtlcnMgIT0gTlVMTCkgewotCQkJLyoKLQkJCSAqIFNvcnQgdGhlIHN0cmluZ3Mgc28gd2UgY2FuIHNraXAgZHVwbGljYXRlcyB3aGVuCi0JCQkgKiB3ZSB3cml0ZSB0aGVtIG91dC4KLQkJCSAqLwotCQkJcXNvcnQobW9kLT5tYXJrZXJzLCBtb2QtPm5tYXJrZXJzLAotCQkJICAgICAgc2l6ZW9mIG1vZC0+bWFya2Vyc1swXSwgJmNvbXBhcmVfc3RyaW5ncyk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbW9kLT5ubWFya2VyczsgKytpKSB7Ci0JCQkJY2hhciAqbGluZSA9IG1vZC0+bWFya2Vyc1tpXTsKLQkJCQlidWZfd3JpdGUoJmJ1ZiwgbGluZSwgc3RybGVuKGxpbmUpKTsKLQkJCQl3aGlsZSAoaSArIDEgPCBtb2QtPm5tYXJrZXJzICYmCi0JCQkJICAgICAgICFzdHJjbXAobW9kLT5tYXJrZXJzW2ldLAotCQkJCQkgICAgICAgbW9kLT5tYXJrZXJzW2kgKyAxXSkpCi0JCQkJCWZyZWUobW9kLT5tYXJrZXJzW2krK10pOwotCQkJCWZyZWUobW9kLT5tYXJrZXJzW2ldKTsKLQkJCX0KLQkJCWZyZWUobW9kLT5tYXJrZXJzKTsKLQkJCW1vZC0+bWFya2VycyA9IE5VTEw7Ci0JCX0KLQotCXdyaXRlX2lmX2NoYW5nZWQoJmJ1ZiwgZm5hbWUpOwotfQotCiBzdHJ1Y3QgZXh0X3N5bV9saXN0IHsKIAlzdHJ1Y3QgZXh0X3N5bV9saXN0ICpuZXh0OwogCWNvbnN0IGNoYXIgKmZpbGU7CkBAIC0yMDc3LDggKzE5MzYsNiBAQAogCXN0cnVjdCBidWZmZXIgYnVmID0geyB9OwogCWNoYXIgKmtlcm5lbF9yZWFkID0gTlVMTCwgKm1vZHVsZV9yZWFkID0gTlVMTDsKIAljaGFyICpkdW1wX3dyaXRlID0gTlVMTDsKLQljaGFyICptYXJrZXJzX3JlYWQgPSBOVUxMOwotCWNoYXIgKm1hcmtlcnNfd3JpdGUgPSBOVUxMOwogCWludCBvcHQ7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZXh0X3N5bV9saXN0ICpleHRzeW1faXRlcjsKQEAgLTIxMjIsMTIgKzE5NzksNiBAQAogCQljYXNlICd3JzoKIAkJCXdhcm5fdW5yZXNvbHZlZCA9IDE7CiAJCQlicmVhazsKLQkJCWNhc2UgJ00nOgotCQkJCW1hcmtlcnNfd3JpdGUgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdLJzoKLQkJCQltYXJrZXJzX3JlYWQgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlleGl0KDEpOwogCQl9CkBAIC0yMTgyLDExICsyMDMzLDUgQEAKIAkJICAgICAiJ21ha2UgQ09ORklHX0RFQlVHX1NFQ1RJT05fTUlTTUFUQ0g9eSdcbiIsCiAJCSAgICAgc2VjX21pc21hdGNoX2NvdW50KTsKIAotCWlmIChtYXJrZXJzX3JlYWQpCi0JCXJlYWRfbWFya2VycyhtYXJrZXJzX3JlYWQpOwotCi0JaWYgKG1hcmtlcnNfd3JpdGUpCi0JCXdyaXRlX21hcmtlcnMobWFya2Vyc193cml0ZSk7Ci0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCmluZGV4IDA5ZjU4ZTMuLmJlOTg3YTQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuaAorKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKQEAgLTExMiw4ICsxMTIsNiBAQAogCWludCBoYXNfaW5pdDsKIAlpbnQgaGFzX2NsZWFudXA7CiAJc3RydWN0IGJ1ZmZlciBkZXZfdGFibGVfYnVmOwotCWNoYXIgKiptYXJrZXJzOwotCXNpemVfdCBubWFya2VyczsKIAljaGFyCSAgICAgc3JjdmVyc2lvblsyNV07CiB9OwogCkBAIC0xMjgsNyArMTI2LDYgQEAKIAlFbGZfU2VjdGlvbiAgZXhwb3J0X2dwbF9zZWM7CiAJRWxmX1NlY3Rpb24gIGV4cG9ydF91bnVzZWRfZ3BsX3NlYzsKIAlFbGZfU2VjdGlvbiAgZXhwb3J0X2dwbF9mdXR1cmVfc2VjOwotCUVsZl9TZWN0aW9uICBtYXJrZXJzX3N0cmluZ3Nfc2VjOwogCWNvbnN0IGNoYXIgICAqc3RydGFiOwogCWNoYXIJICAgICAqbW9kaW5mbzsKIAl1bnNpZ25lZCBpbnQgbW9kaW5mb19sZW47CmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKaW5kZXggZjY3Y2M4OC4uNjJmY2MzYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCisrKyBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQpAQCAtNzcsOSArNzcsMjcgQEAKIAogIyBEZWIgdGFyZ2V0CiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcXVpZXRfY21kX2J1aWxkZGViID0gQlVJTERERUIKKyAgICAgIGNtZF9idWlsZGRlYiA9IHNldCAtZTsgXAorCXRlc3QgYGlkIC11YCA9IDAgfHwgXAorCXRlc3QgLW4gIiQoS0JVSUxEX1BLR19ST09UQ01EKSIgfHwgeyBcCisJCXdoaWNoIGZha2Vyb290ID4vZGV2L251bGwgMj4mMSAmJiBcCisJCUtCVUlMRF9QS0dfUk9PVENNRD0iZmFrZXJvb3QgLXUiOyBcCisJfSB8fCB7IFwKKwkJZWNobzsgXAorCQllY2hvICJidWlsZGRlYiBtdXN0IGJlIHJ1biBhcyByb290IChvciB1c2luZyBmYWtlcm9vdCkuIjsgXAorCQllY2hvICJLQlVJTERfUEtHX1JPT1RDTUQgaXMgdW5zZXQgYW5kIGZha2Vyb290IG5vdCBmb3VuZC4iOyBcCisJCWVjaG8gIlRyeSBzZXR0aW5nIEtCVUlMRF9QS0dfUk9PVENNRCB0byBhIGNvbW1hbmQgdG8gYWNxdWlyZSI7IFwKKwkJZWNobyAicm9vdCBwcml2aWxlZ2VzIChlLmcuLCAnZmFrZXJvb3QgLXUnIG9yICdzdWRvJykuIjsgXAorCQlmYWxzZTsgXAorCX0gJiYgXAorCVwKKwkkJEtCVUlMRF9QS0dfUk9PVENNRCAkKENPTkZJR19TSEVMTCkgXAorCQkkKHNyY3RyZWUpL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorCiBkZWItcGtnOiBGT1JDRQogCSQoTUFLRSkgS0JVSUxEX1NSQz0KLQkkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKKwkkKGNhbGwgY21kLGJ1aWxkZGViKQogCiBjbGVhbi1kaXJzICs9ICQob2JqdHJlZSkvZGViaWFuLwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKaW5kZXggYjFmZDQ4ZC4uNTFiMmFhMCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCisrKyBiL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgpAQCAtMTAxLDcgKzEwMSwxMSBAQAogIwogKAogCWNkICIke3RtcGRpcn0iCi0JdGFyIGNmIC0gLiB8ICR7Y29tcHJlc3N9ID4gIiR7dGFyYmFsbH0ke2ZpbGVfZXh0fSIKKwlvcHRzPQorCWlmIHRhciAtLW93bmVyPXJvb3QgLS1ncm91cD1yb290IC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJb3B0cz0iLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdCIKKwlmaQorCXRhciBjZiAtIC4gJG9wdHMgfCAke2NvbXByZXNzfSA+ICIke3RhcmJhbGx9JHtmaWxlX2V4dH0iCiApCiAKIGVjaG8gIlRhcmJhbGwgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgaW4gJHt0YXJiYWxsfSR7ZmlsZV9leHR9IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCBmMGQxNDQ1Li45MmYwOWZlIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMTEzLDEzICsxMTMsMTMgQEAKIAogbXkgJFYgPSAnMC4xJzsKIAotaWYgKCQjQVJHViAhPSAxMCkgewotCXByaW50ICJ1c2FnZTogJFAgYXJjaCBiaXRzIG9iamR1bXAgb2JqY29weSBjYyBsZCBubSBybSBtdiBpc19tb2R1bGUgaW5wdXRmaWxlXG4iOworaWYgKCQjQVJHViAhPSAxMSkgeworCXByaW50ICJ1c2FnZTogJFAgYXJjaCBlbmRpYW4gYml0cyBvYmpkdW1wIG9iamNvcHkgY2MgbGQgbm0gcm0gbXYgaXNfbW9kdWxlIGlucHV0ZmlsZVxuIjsKIAlwcmludCAidmVyc2lvbjogJFZcbiI7CiAJZXhpdCgxKTsKIH0KIAotbXkgKCRhcmNoLCAkYml0cywgJG9iamR1bXAsICRvYmpjb3B5LCAkY2MsCitteSAoJGFyY2gsICRlbmRpYW4sICRiaXRzLCAkb2JqZHVtcCwgJG9iamNvcHksICRjYywKICAgICAkbGQsICRubSwgJHJtLCAkbXYsICRpc19tb2R1bGUsICRpbnB1dGZpbGUpID0gQEFSR1Y7CiAKICMgVGhpcyBmaWxlIHJlZmVycyB0byBtY291bnQgYW5kIHNob3VsZG4ndCBiZSBmdHJhY2VkLCBzbyBsZXRzJyBpZ25vcmUgaXQKQEAgLTI5NSw2ICsyOTUsNjEgQEAKICAgICAkbGQgLj0gIiAtbSBlbGY2NF9zcGFyYyI7CiAgICAgJGNjIC49ICIgLW02NCI7CiAgICAgJG9iamNvcHkgLj0gIiAtTyBlbGY2NC1zcGFyYyI7Cit9IGVsc2lmICgkYXJjaCBlcSAibWlwcyIpIHsKKyAgICAjIFRvIGVuYWJsZSBtb2R1bGUgc3VwcG9ydCwgd2UgbmVlZCB0byBlbmFibGUgdGhlIC1tbG9uZy1jYWxscyBvcHRpb24KKyAgICAjIG9mIGdjYyBmb3IgbW9kdWxlLCBhZnRlciB1c2luZyB0aGlzIG9wdGlvbiwgd2UgY2FuIG5vdCBnZXQgdGhlIHJlYWwKKyAgICAjIG9mZnNldCBvZiB0aGUgY2FsbGluZyB0byBfbWNvdW50LCBidXQgdGhlIG9mZnNldCBvZiB0aGUgbHVpCisgICAgIyBpbnN0cnVjdGlvbiBvciB0aGUgYWRkaXUgb25lLiBoZXJlaW4sIHdlIHJlY29yZCB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAjIGZpcnN0IG9uZSwgYW5kIHRoZW4gd2UgY2FuIHJlcGxhY2UgdGhpcyBpbnN0cnVjdGlvbiBieSBhIGJyYW5jaAorICAgICMgaW5zdHJ1Y3Rpb24gdG8ganVtcCBvdmVyIHRoZSBwcm9maWxpbmcgZnVuY3Rpb24gdG8gZmlsdGVyIHRoZQorICAgICMgaW5kaWNhdGVkIGZ1bmN0aW9ucywgb3Igc3dpdGggYmFjayB0byB0aGUgbHVpIGluc3RydWN0aW9uIHRvIHRyYWNlCisgICAgIyB0aGVtLCB3aGljaCBtZWFucyBkeW5hbWljIHRyYWNpbmcuCisgICAgIworICAgICMgICAgICAgYzoJM2MwMzAwMDAgCWx1aQl2MSwweDAKKyAgICAjCQkJYzogUl9NSVBTX0hJMTYJX21jb3VudAorICAgICMJCQljOiBSX01JUFNfTk9ORQkqQUJTKgorICAgICMJCQljOiBSX01JUFNfTk9ORQkqQUJTKgorICAgICMgICAgICAxMDoJNjQ2MzAwMDAgCWRhZGRpdQl2MSx2MSwwCisgICAgIwkJCTEwOiBSX01JUFNfTE8xNglfbWNvdW50CisgICAgIwkJCTEwOiBSX01JUFNfTk9ORQkqQUJTKgorICAgICMJCQkxMDogUl9NSVBTX05PTkUJKkFCUyoKKyAgICAjICAgICAgMTQ6CTAzZTAwODJkIAltb3ZlCWF0LHJhCisgICAgIyAgICAgIDE4OgkwMDYwZjgwOSAJamFscgl2MQorICAgICMKKyAgICAjIGZvciB0aGUga2VybmVsOgorICAgICMKKyAgICAjICAgICAxMDogICAwM2UwMDgyZCAgICAgICAgbW92ZSAgICBhdCxyYQorICAgICMJICAxNDogICAwYzAwMDAwMCAgICAgICAgamFsICAgICAwIDxsb29uZ3Nvbl9oYWx0PgorICAgICMgICAgICAgICAgICAgICAgICAgIDE0OiBSX01JUFNfMjYgICBfbWNvdW50CisgICAgIyAgICAgICAgICAgICAgICAgICAgMTQ6IFJfTUlQU19OT05FICpBQlMqCisgICAgIyAgICAgICAgICAgICAgICAgICAgMTQ6IFJfTUlQU19OT05FICpBQlMqCisgICAgIwkgMTg6ICAgMDAwMjAwMjEgICAgICAgIG5vcAorICAgIGlmICgkaXNfbW9kdWxlIGVxICIwIikgeworCSAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6LipcXHNfbWNvdW50XCQiOworICAgIH0gZWxzZSB7CisJICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTogUl9NSVBTX0hJMTZcXHMrX21jb3VudFwkIjsKKyAgICB9CisgICAgJG9iamR1bXAgLj0gIiAtTWVsZi10cmFkIi4kZW5kaWFuLiJtaXBzICI7CisKKyAgICBpZiAoJGVuZGlhbiBlcSAiYmlnIikgeworCSAgICAkZW5kaWFuID0gIiAtRUIgIjsKKwkgICAgJGxkIC49ICIgLW1lbGYiLiRiaXRzLiJidHNtaXAiOworICAgIH0gZWxzZSB7CisJICAgICRlbmRpYW4gPSAiIC1FTCAiOworCSAgICAkbGQgLj0gIiAtbWVsZiIuJGJpdHMuImx0c21pcCI7CisgICAgfQorCisgICAgJGNjIC49ICIgLW1uby1hYmljYWxscyAtZm5vLXBpYyAtbWFiaT0iIC4gJGJpdHMgLiAkZW5kaWFuOworICAgICRsZCAuPSAkZW5kaWFuOworCisgICAgaWYgKCRiaXRzID09IDY0KSB7CisJICAgICRmdW5jdGlvbl9yZWdleCA9CisJCSJeKFswLTlhLWZBLUZdKylcXHMrPCgufFteXCRdTC4qP3xcJFteTF0uKj98W15cJF1bXkxdLio/KT46IjsKKwkgICAgJHR5cGUgPSAiLmR3b3JkIjsKKyAgICB9Cit9IGVsc2lmICgkYXJjaCBlcSAibWljcm9ibGF6ZSIpIHsKKyAgICAjIE1pY3JvYmxhemUgY2FsbHMgJ19tY291bnQnIGluc3RlYWQgb2YgcGxhaW4gJ21jb3VudCcuCisgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzX21jb3VudFwkIjsKIH0gZWxzZSB7CiAgICAgZGllICJBcmNoICRhcmNoIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQiOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy90YWdzLnNoIGIvc2NyaXB0cy90YWdzLnNoCmluZGV4IGQ1MmY3YTAuLjFhMGM0NGQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvdGFncy5zaAorKysgYi9zY3JpcHRzL3RhZ3Muc2gKQEAgLTg5LDcgKzg5LDEzIEBACiAKIGRvY3Njb3BlKCkKIHsKLQkoZWNobyBcLWs7IGVjaG8gXC1xOyBhbGxfc291cmNlcykgPiBjc2NvcGUuZmlsZXMKKwkjIGFsd2F5cyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIGNzY29wZSwgYXMgcmVjb21tZW5kZWQgYnkgY3Njb3BlCisJIyB1cHN0cmVhbQorCWNhc2UgIiR0cmVlIiBpbgorCQkvKikgOzsKKwkJKikgdHJlZT0kUFdELyR0cmVlIDs7CisJZXNhYworCShjZCAvOyBlY2hvIFwtazsgZWNobyBcLXE7IGFsbF9zb3VyY2VzKSA+IGNzY29wZS5maWxlcwogCWNzY29wZSAtYiAtZiBjc2NvcGUub3V0CiB9CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvdW5pZmRlZi5jIGIvc2NyaXB0cy91bmlmZGVmLmMKaW5kZXggMzBkNDU5Zi4uNDRkMzk3OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy91bmlmZGVmLmMKKysrIGIvc2NyaXB0cy91bmlmZGVmLmMKQEAgLTEsMTMgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDUgVG9ueSBGaW5jaCA8ZG90QGRvdGF0LmF0Pi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieSBEYXZlIFlvc3QuCi0gKiBJdCB3YXMgcmV3cml0dGVuIHRvIHN1cHBvcnQgQU5TSSBDIGJ5IFRvbnkgRmluY2guIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mCi0gKiB1bmlmZGVmIGNhcnJpZWQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlLiBOb25lIG9mIGl0cyBjb2RlIHJlbWFpbnMKLSAqIGluIHRoaXMgdmVyc2lvbiAodGhvdWdoIHNvbWUgb2YgdGhlIG5hbWVzIHJlbWFpbikuCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDkgVG9ueSBGaW5jaCA8ZG90QGRvdGF0LmF0PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwyMyArMjMsMjAgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKy8qCisgKiBUaGlzIGNvZGUgd2FzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieSBEYXZlIFlvc3QuCisgKiBJdCB3YXMgcmV3cml0dGVuIHRvIHN1cHBvcnQgQU5TSSBDIGJ5IFRvbnkgRmluY2guIFRoZSBvcmlnaW5hbCB2ZXJzaW9uCisgKiBvZiB1bmlmZGVmIGNhcnJpZWQgdGhlIDQtY2xhdXNlIEJTRCBjb3B5cmlnaHQgbGljZW5jZS4gTm9uZSBvZiBpdHMgY29kZQorICogcmVtYWlucyBpbiB0aGlzIHZlcnNpb24gKHRob3VnaCBzb21lIG9mIHRoZSBuYW1lcyByZW1haW4pIHNvIGl0IG5vdworICogY2FycmllcyBhIG1vcmUgbGliZXJhbCBsaWNlbmNlLgorICoKKyAqIFRoZSBsYXRlc3QgdmVyc2lvbiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vZG90YXQuYXQvcHJvZy91bmlmZGVmCisgKi8KIAotI2lmbmRlZiBsaW50Ci0jaWYgMAotc3RhdGljIGNvbnN0IGNoYXIgY29weXJpZ2h0W10gPQotIkAoIykgQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzXG5cCi0JVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4iOwotI2VuZGlmCi0jaWZkZWYgX19JRFNUUklORwotX19JRFNUUklORyhCZXJrZWxleSwgIkAoIyl1bmlmZGVmLmMJOC4xIChCZXJrZWxleSkgNi82LzkzIik7Ci1fX0lEU1RSSU5HKE5ldEJTRCwgIiROZXRCU0Q6IHVuaWZkZWYuYyx2IDEuOCAyMDAwLzA3LzAzIDAyOjUxOjM2IG1hdHQgRXhwICQiKTsKLV9fSURTVFJJTkcoZG90YXQsICIkZG90YXQ6IHRoaW5ncy91bmlmZGVmLmMsdiAxLjE3MSAyMDA1LzAzLzA4IDEyOjM4OjQ4IGZhbmYyIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBub3QgbGludCAqLwotI2lmZGVmIF9fRkJTRElECi1fX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvdXNyLmJpbi91bmlmZGVmL3VuaWZkZWYuYyx2IDEuMjAgMjAwNS8wNS8yMSAwOTo1NTowOSBydSBFeHAgJCIpOwotI2VuZGlmCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNvcHlyaWdodFtdID0geworICAgICJAKCMpIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDkgVG9ueSBGaW5jaCA8ZG90QGRvdGF0LmF0PlxuIiwKKyAgICAiJGRvdGF0OiB1bmlmZGVmL3VuaWZkZWYuYyx2IDEuMTkwIDIwMDkvMTEvMjcgMTc6MjE6MjYgZmFuZjIgRXhwICQiLAorfTsKIAogLyoKICAqIHVuaWZkZWYgLSByZW1vdmUgaWZkZWYnZWQgbGluZXMKQEAgLTcyLDggKzYxLDYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotc2l6ZV90IHN0cmxjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzaXopOwotCiAvKiB0eXBlcyBvZiBpbnB1dCBsaW5lczogKi8KIHR5cGVkZWYgZW51bSB7CiAJTFRfVFJVRUksCQkvKiBhIHRydWUgI2lmIHdpdGggaWdub3JlIGZsYWcgKi8KQEAgLTkwLDYgKzc3LDcgQEAKIAlMVF9ET0RHWV9MQVNUID0gTFRfRE9ER1kgKyBMVF9FTkRJRiwKIAlMVF9QTEFJTiwJCS8qIG9yZGluYXJ5IGxpbmUgKi8KIAlMVF9FT0YsCQkJLyogZW5kIG9mIGZpbGUgKi8KKwlMVF9FUlJPUiwJCS8qIHVuZXZhbHVhYmxlICNpZiAqLwogCUxUX0NPVU5UCiB9IExpbmV0eXBlOwogCkBAIC0xMDAsNyArODgsNyBAQAogCSJET0RHWSBJRiIsICJET0RHWSBUUlVFIiwgIkRPREdZIEZBTFNFIiwKIAkiRE9ER1kgRUxJRiIsICJET0RHWSBFTFRSVUUiLCAiRE9ER1kgRUxGQUxTRSIsCiAJIkRPREdZIEVMU0UiLCAiRE9ER1kgRU5ESUYiLAotCSJQTEFJTiIsICJFT0YiCisJIlBMQUlOIiwgIkVPRiIsICJFUlJPUiIKIH07CiAKIC8qIHN0YXRlIG9mICNpZiBwcm9jZXNzaW5nICovCkBAIC0xNjgsMTEgKzE1NiwxMyBAQAogICogR2xvYmFscy4KICAqLwogCitzdGF0aWMgYm9vbCAgICAgICAgICAgICBjb21wYmxhbms7CQkvKiAtQjogY29tcHJlc3MgYmxhbmsgbGluZXMgKi8KK3N0YXRpYyBib29sICAgICAgICAgICAgIGxuYmxhbms7CQkvKiAtYjogYmxhbmsgZGVsZXRlZCBsaW5lcyAqLwogc3RhdGljIGJvb2wgICAgICAgICAgICAgY29tcGxlbWVudDsJCS8qIC1jOiBkbyB0aGUgY29tcGxlbWVudCAqLwogc3RhdGljIGJvb2wgICAgICAgICAgICAgZGVidWdnaW5nOwkJLyogLWQ6IGRlYnVnZ2luZyByZXBvcnRzICovCiBzdGF0aWMgYm9vbCAgICAgICAgICAgICBpb2NjY29rOwkJLyogLWU6IGZld2VyIElPQ0NDIGVycm9ycyAqLworc3RhdGljIGJvb2wgICAgICAgICAgICAgc3RyaWN0bG9naWM7CQkvKiAtSzoga2VlcCBhbWJpZ3VvdXMgI2lmcyAqLwogc3RhdGljIGJvb2wgICAgICAgICAgICAga2lsbGNvbnN0czsJCS8qIC1rOiBldmFsIGNvbnN0YW50ICNpZnMgKi8KLXN0YXRpYyBib29sICAgICAgICAgICAgIGxuYmxhbms7CQkvKiAtbDogYmxhbmsgZGVsZXRlZCBsaW5lcyAqLwogc3RhdGljIGJvb2wgICAgICAgICAgICAgbG5udW07CQkJLyogLW46IGFkZCAjbGluZSBkaXJlY3RpdmVzICovCiBzdGF0aWMgYm9vbCAgICAgICAgICAgICBzeW1saXN0OwkJLyogLXM6IG91dHB1dCBzeW1ib2wgbGlzdCAqLwogc3RhdGljIGJvb2wgICAgICAgICAgICAgdGV4dDsJCQkvKiAtdDogdGhpcyBpcyBhIHRleHQgZmlsZSAqLwpAQCAtMTk2LDcgKzE4Niw5IEBACiBzdGF0aWMgaW50ICAgICAgICAgICAgICBzdGlmbGluZVtNQVhERVBUSF07CS8qIHN0YXJ0IG9mIGN1cnJlbnQgI2lmICovCiBzdGF0aWMgaW50ICAgICAgICAgICAgICBkZXB0aDsJCQkvKiBjdXJyZW50ICNpZiBuZXN0aW5nICovCiBzdGF0aWMgaW50ICAgICAgICAgICAgICBkZWxjb3VudDsJCS8qIGNvdW50IG9mIGRlbGV0ZWQgbGluZXMgKi8KLXN0YXRpYyBib29sICAgICAgICAgICAgIGtlZXB0aGlzOwkJLyogZG9uJ3QgZGVsZXRlIGNvbnN0YW50ICNpZiAqLworc3RhdGljIHVuc2lnbmVkICAgICAgICAgYmxhbmtjb3VudDsJCS8qIGNvdW50IG9mIGJsYW5rIGxpbmVzICovCitzdGF0aWMgdW5zaWduZWQgICAgICAgICBibGFua21heDsJCS8qIG1heGltdW0gcmVjZW50IGJsYW5rY291bnQgKi8KK3N0YXRpYyBib29sICAgICAgICAgICAgIGNvbnN0ZXhwcjsJCS8qIGNvbnN0YW50ICNpZiBleHByZXNzaW9uICovCiAKIHN0YXRpYyBpbnQgICAgICAgICAgICAgIGV4aXRzdGF0OwkJLyogcHJvZ3JhbSBleGl0IHN0YXR1cyAqLwogCkBAIC0yMDYsMTMgKzE5OCwxNCBAQAogc3RhdGljIHZvaWQgICAgICAgICAgICAgZXJyb3IoY29uc3QgY2hhciAqKTsKIHN0YXRpYyBpbnQgICAgICAgICAgICAgIGZpbmRzeW0oY29uc3QgY2hhciAqKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgIGZsdXNobGluZShib29sKTsKLXN0YXRpYyBMaW5ldHlwZSAgICAgICAgIGdldF9saW5lKHZvaWQpOworc3RhdGljIExpbmV0eXBlICAgICAgICAgcGFyc2VsaW5lKHZvaWQpOwogc3RhdGljIExpbmV0eXBlICAgICAgICAgaWZldmFsKGNvbnN0IGNoYXIgKiopOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgaWdub3Jlb2ZmKHZvaWQpOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgaWdub3Jlb24odm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICBrZXl3b3JkZWRpdChjb25zdCBjaGFyICopOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgbmVzdCh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgIHByb2Nlc3Modm9pZCk7CitzdGF0aWMgY29uc3QgY2hhciAgICAgICpza2lwYXJncyhjb25zdCBjaGFyICopOwogc3RhdGljIGNvbnN0IGNoYXIgICAgICAqc2tpcGNvbW1lbnQoY29uc3QgY2hhciAqKTsKIHN0YXRpYyBjb25zdCBjaGFyICAgICAgKnNraXBzeW0oY29uc3QgY2hhciAqKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgIHN0YXRlKElmc3RhdGUpOwpAQCAtMjIwLDcgKzIxMyw3IEBACiBzdGF0aWMgdm9pZCAgICAgICAgICAgICB1bm5lc3Qodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICB1c2FnZSh2b2lkKTsKIAotI2RlZmluZSBlbmRzeW0oYykgKCFpc2FscGhhKCh1bnNpZ25lZCBjaGFyKWMpICYmICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpICYmIGMgIT0gJ18nKQorI2RlZmluZSBlbmRzeW0oYykgKCFpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKWMpICYmIGMgIT0gJ18nKQogCiAvKgogICogVGhlIG1haW4gcHJvZ3JhbS4KQEAgLTIzMCw3ICsyMjMsNyBAQAogewogCWludCBvcHQ7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpEOlU6STpjZGVrbG5zdCIpKSAhPSAtMSkKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpEOlU6STpCYmNkZUtrbG5zdCIpKSAhPSAtMSkKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAnaSc6IC8qIHRyZWF0IHN0dWZmIGNvbnRyb2xsZWQgYnkgdGhlc2Ugc3ltYm9scyBhcyB0ZXh0ICovCiAJCQkvKgpAQCAtMjU1LDYgKzI0OCwxMyBAQAogCQljYXNlICdJJzoKIAkJCS8qIG5vLW9wIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY3BwICovCiAJCQlicmVhazsKKwkJY2FzZSAnQic6IC8qIGNvbXByZXNzIGJsYW5rIGxpbmVzIGFyb3VuZCByZW1vdmVkIHNlY3Rpb24gKi8KKwkJCWNvbXBibGFuayA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAnYic6IC8qIGJsYW5rIGRlbGV0ZWQgbGluZXMgaW5zdGVhZCBvZiBvbWl0dGluZyB0aGVtICovCisJCWNhc2UgJ2wnOiAvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJbG5ibGFuayA9IHRydWU7CisJCQlicmVhazsKIAkJY2FzZSAnYyc6IC8qIHRyZWF0IC1EIGFzIC1VIGFuZCB2aWNlIHZlcnNhICovCiAJCQljb21wbGVtZW50ID0gdHJ1ZTsKIAkJCWJyZWFrOwpAQCAtMjY0LDEyICsyNjQsMTIgQEAKIAkJY2FzZSAnZSc6IC8qIGZld2VyIGVycm9ycyBmcm9tIGRvZGd5IGxpbmVzICovCiAJCQlpb2NjY29rID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlICdLJzogLyoga2VlcCBhbWJpZ3VvdXMgI2lmcyAqLworCQkJc3RyaWN0bG9naWMgPSB0cnVlOworCQkJYnJlYWs7CiAJCWNhc2UgJ2snOiAvKiBwcm9jZXNzIGNvbnN0YW50ICNpZnMgKi8KIAkJCWtpbGxjb25zdHMgPSB0cnVlOwogCQkJYnJlYWs7Ci0JCWNhc2UgJ2wnOiAvKiBibGFuayBkZWxldGVkIGxpbmVzIGluc3RlYWQgb2Ygb21pdHRpbmcgdGhlbSAqLwotCQkJbG5ibGFuayA9IHRydWU7Ci0JCQlicmVhazsKIAkJY2FzZSAnbic6IC8qIGFkZCAjbGluZSBkaXJlY3RpdmUgYWZ0ZXIgZGVsZXRlZCBsaW5lcyAqLwogCQkJbG5udW0gPSB0cnVlOwogCQkJYnJlYWs7CkBAIC0yODQsNiArMjg0LDggQEAKIAkJfQogCWFyZ2MgLT0gb3B0aW5kOwogCWFyZ3YgKz0gb3B0aW5kOworCWlmIChjb21wYmxhbmsgJiYgbG5ibGFuaykKKwkJZXJyeCgyLCAiLUIgYW5kIC1iIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKTsKIAlpZiAoYXJnYyA+IDEpIHsKIAkJZXJyeCgyLCAiY2FuIG9ubHkgZG8gb25lIGZpbGUiKTsKIAl9IGVsc2UgaWYgKGFyZ2MgPT0gMSAmJiBzdHJjbXAoKmFyZ3YsICItIikgIT0gMCkgewpAQCAtMzAyLDcgKzMwNCw3IEBACiBzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsKLQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiB1bmlmZGVmIFstY2Rla2xuc3RdIFstSXBhdGhdIgorCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IHVuaWZkZWYgWy1CYmNkZUtrbnN0XSBbLUlwYXRoXSIKIAkgICAgIiBbLURzeW1bPXZhbF1dIFstVXN5bV0gWy1pRHN5bVs9dmFsXV0gWy1pVXN5bV0gLi4uIFtmaWxlXVxuIik7CiAJZXhpdCgyKTsKIH0KQEAgLTM4Myw0NiArMzg1LDQ2IEBACiAvKiBJU19PVVRTSURFICovCiB7IEl0cnVlLCBJZmFsc2UsRnBhc3MsIEZ0cnVlLCBGZmFsc2UsRWVsaWYsIEVlbGlmLCBFZWxpZiwgRWVsc2UsIEVlbmRpZiwKICAgT2lmZnksIE9pZmZ5LCBGcGFzcywgT2lmLCAgIE9pZiwgICBFZWxpZiwgRWVsaWYsIEVlbGlmLCBFZWxzZSwgRWVuZGlmLAotICBwcmludCwgZG9uZSB9LAorICBwcmludCwgZG9uZSwgIGFib3J0IH0sCiAvKiBJU19GQUxTRV9QUkVGSVggKi8KIHsgSWRyb3AsIElkcm9wLCBGZHJvcCwgRmRyb3AsIEZkcm9wLCBNcGFzcywgU3RydWUsIFNmYWxzZSxTZWxzZSwgRGVuZGlmLAogICBJZHJvcCwgSWRyb3AsIEZkcm9wLCBGZHJvcCwgRmRyb3AsIE1wYXNzLCBFaW9jY2MsRWlvY2NjLEVpb2NjYyxFaW9jY2MsCi0gIGRyb3AsICBFZW9mIH0sCisgIGRyb3AsICBFZW9mLCAgYWJvcnQgfSwKIC8qIElTX1RSVUVfUFJFRklYICovCiB7IEl0cnVlLCBJZmFsc2UsRnBhc3MsIEZ0cnVlLCBGZmFsc2UsRGZhbHNlLERmYWxzZSxEZmFsc2UsRGVsc2UsIERlbmRpZiwKICAgT2lmZnksIE9pZmZ5LCBGcGFzcywgT2lmLCAgIE9pZiwgICBFaW9jY2MsRWlvY2NjLEVpb2NjYyxFaW9jY2MsRWlvY2NjLAotICBwcmludCwgRWVvZiB9LAorICBwcmludCwgRWVvZiwgIGFib3J0IH0sCiAvKiBJU19QQVNTX01JRERMRSAqLwogeyBJdHJ1ZSwgSWZhbHNlLEZwYXNzLCBGdHJ1ZSwgRmZhbHNlLFBlbGlmLCBNdHJ1ZSwgRGVsaWYsIFBlbHNlLCBQZW5kaWYsCiAgIE9pZmZ5LCBPaWZmeSwgRnBhc3MsIE9pZiwgICBPaWYsICAgUGVsaWYsIE9lbGlmLCBPZWxpZiwgUGVsc2UsIFBlbmRpZiwKLSAgcHJpbnQsIEVlb2YgfSwKKyAgcHJpbnQsIEVlb2YsICBhYm9ydCB9LAogLyogSVNfRkFMU0VfTUlERExFICovCiB7IElkcm9wLCBJZHJvcCwgRmRyb3AsIEZkcm9wLCBGZHJvcCwgUGVsaWYsIE10cnVlLCBEZWxpZiwgUGVsc2UsIFBlbmRpZiwKICAgSWRyb3AsIElkcm9wLCBGZHJvcCwgRmRyb3AsIEZkcm9wLCBFaW9jY2MsRWlvY2NjLEVpb2NjYyxFaW9jY2MsRWlvY2NjLAotICBkcm9wLCAgRWVvZiB9LAorICBkcm9wLCAgRWVvZiwgIGFib3J0IH0sCiAvKiBJU19UUlVFX01JRERMRSAqLwogeyBJdHJ1ZSwgSWZhbHNlLEZwYXNzLCBGdHJ1ZSwgRmZhbHNlLE1lbGlmLCBNZWxpZiwgTWVsaWYsIE1lbHNlLCBQZW5kaWYsCiAgIE9pZmZ5LCBPaWZmeSwgRnBhc3MsIE9pZiwgICBPaWYsICAgRWlvY2NjLEVpb2NjYyxFaW9jY2MsRWlvY2NjLFBlbmRpZiwKLSAgcHJpbnQsIEVlb2YgfSwKKyAgcHJpbnQsIEVlb2YsICBhYm9ydCB9LAogLyogSVNfUEFTU19FTFNFICovCiB7IEl0cnVlLCBJZmFsc2UsRnBhc3MsIEZ0cnVlLCBGZmFsc2UsRWVsaWYsIEVlbGlmLCBFZWxpZiwgRWVsc2UsIFBlbmRpZiwKICAgT2lmZnksIE9pZmZ5LCBGcGFzcywgT2lmLCAgIE9pZiwgICBFZWxpZiwgRWVsaWYsIEVlbGlmLCBFZWxzZSwgUGVuZGlmLAotICBwcmludCwgRWVvZiB9LAorICBwcmludCwgRWVvZiwgIGFib3J0IH0sCiAvKiBJU19GQUxTRV9FTFNFICovCiB7IElkcm9wLCBJZHJvcCwgRmRyb3AsIEZkcm9wLCBGZHJvcCwgRWVsaWYsIEVlbGlmLCBFZWxpZiwgRWVsc2UsIERlbmRpZiwKICAgSWRyb3AsIElkcm9wLCBGZHJvcCwgRmRyb3AsIEZkcm9wLCBFZWxpZiwgRWVsaWYsIEVlbGlmLCBFZWxzZSwgRWlvY2NjLAotICBkcm9wLCAgRWVvZiB9LAorICBkcm9wLCAgRWVvZiwgIGFib3J0IH0sCiAvKiBJU19UUlVFX0VMU0UgKi8KIHsgSXRydWUsIElmYWxzZSxGcGFzcywgRnRydWUsIEZmYWxzZSxFZWxpZiwgRWVsaWYsIEVlbGlmLCBFZWxzZSwgRGVuZGlmLAogICBPaWZmeSwgT2lmZnksIEZwYXNzLCBPaWYsICAgT2lmLCAgIEVlbGlmLCBFZWxpZiwgRWVsaWYsIEVlbHNlLCBFaW9jY2MsCi0gIHByaW50LCBFZW9mIH0sCisgIHByaW50LCBFZW9mLCAgYWJvcnQgfSwKIC8qIElTX0ZBTFNFX1RSQUlMRVIgKi8KIHsgSWRyb3AsIElkcm9wLCBGZHJvcCwgRmRyb3AsIEZkcm9wLCBEZmFsc2UsRGZhbHNlLERmYWxzZSxEZWxzZSwgRGVuZGlmLAogICBJZHJvcCwgSWRyb3AsIEZkcm9wLCBGZHJvcCwgRmRyb3AsIERmYWxzZSxEZmFsc2UsRGZhbHNlLERlbHNlLCBFaW9jY2MsCi0gIGRyb3AsICBFZW9mIH0KKyAgZHJvcCwgIEVlb2YsICBhYm9ydCB9CiAvKlRSVUVJICBGQUxTRUkgSUYgICAgIFRSVUUgICBGQUxTRSAgRUxJRiAgIEVMVFJVRSBFTEZBTFNFIEVMU0UgIEVORElGCiAgIFRSVUVJICBGQUxTRUkgSUYgICAgIFRSVUUgICBGQUxTRSAgRUxJRiAgIEVMVFJVRSBFTEZBTFNFIEVMU0UgIEVORElGIChET0RHWSkKLSAgUExBSU4gIEVPRiAqLworICBQTEFJTiAgRU9GICAgIEVSUk9SICovCiB9OwogCiAvKgpAQCAtNDYzLDkgKzQ2NSwxMSBAQAogc3RhdGljIHZvaWQKIG5lc3Qodm9pZCkKIHsKLQlkZXB0aCArPSAxOwotCWlmIChkZXB0aCA+PSBNQVhERVBUSCkKKwlpZiAoZGVwdGggPiBNQVhERVBUSC0xKQorCQlhYm9ydCgpOyAvKiBidWcgKi8KKwlpZiAoZGVwdGggPT0gTUFYREVQVEgtMSkKIAkJZXJyb3IoIlRvbyBtYW55IGxldmVscyBvZiBuZXN0aW5nIik7CisJZGVwdGggKz0gMTsKIAlzdGlmbGluZVtkZXB0aF0gPSBsaW5lbnVtOwogfQogc3RhdGljIHZvaWQKQEAgLTQ5MCwxNSArNDk0LDIzIEBACiAJaWYgKHN5bWxpc3QpCiAJCXJldHVybjsKIAlpZiAoa2VlcCBeIGNvbXBsZW1lbnQpIHsKLQkJaWYgKGxubnVtICYmIGRlbGNvdW50ID4gMCkKLQkJCXByaW50ZigiI2xpbmUgJWRcbiIsIGxpbmVudW0pOwotCQlmcHV0cyh0bGluZSwgc3Rkb3V0KTsKLQkJZGVsY291bnQgPSAwOworCQlib29sIGJsYW5rbGluZSA9IHRsaW5lW3N0cnNwbih0bGluZSwgIiBcdFxuIildID09ICdcMCc7CisJCWlmIChibGFua2xpbmUgJiYgY29tcGJsYW5rICYmIGJsYW5rY291bnQgIT0gYmxhbmttYXgpIHsKKwkJCWRlbGNvdW50ICs9IDE7CisJCQlibGFua2NvdW50ICs9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAobG5udW0gJiYgZGVsY291bnQgPiAwKQorCQkJCXByaW50ZigiI2xpbmUgJWRcbiIsIGxpbmVudW0pOworCQkJZnB1dHModGxpbmUsIHN0ZG91dCk7CisJCQlkZWxjb3VudCA9IDA7CisJCQlibGFua21heCA9IGJsYW5rY291bnQgPSBibGFua2xpbmUgPyBibGFua2NvdW50ICsgMSA6IDA7CisJCX0KIAl9IGVsc2UgewogCQlpZiAobG5ibGFuaykKIAkJCXB1dGMoJ1xuJywgc3Rkb3V0KTsKIAkJZXhpdHN0YXQgPSAxOwogCQlkZWxjb3VudCArPSAxOworCQlibGFua2NvdW50ID0gMDsKIAl9CiB9CiAKQEAgLTUxMCw5ICs1MjIsMTIgQEAKIHsKIAlMaW5ldHlwZSBsaW5ldmFsOwogCisJLyogV2hlbiBjb21wcmVzc2luZyBibGFuayBsaW5lcywgYWN0IGFzIGlmIHRoZSBmaWxlCisJICAgaXMgcHJlY2VkZWQgYnkgYSBsYXJnZSBudW1iZXIgb2YgYmxhbmsgbGluZXMuICovCisJYmxhbmttYXggPSBibGFua2NvdW50ID0gMTAwMDsKIAlmb3IgKDs7KSB7CiAJCWxpbmVudW0rKzsKLQkJbGluZXZhbCA9IGdldF9saW5lKCk7CisJCWxpbmV2YWwgPSBwYXJzZWxpbmUoKTsKIAkJdHJhbnNfdGFibGVbaWZzdGF0ZVtkZXB0aF1dW2xpbmV2YWxdKCk7CiAJCWRlYnVnKCJwcm9jZXNzICVzIC0+ICVzIGRlcHRoICVkIiwKIAkJICAgIGxpbmV0eXBlX25hbWVbbGluZXZhbF0sCkBAIC01MjYsNyArNTQxLDcgQEAKICAqIGhlbHAgZnJvbSBza2lwY29tbWVudCgpLgogICovCiBzdGF0aWMgTGluZXR5cGUKLWdldF9saW5lKHZvaWQpCitwYXJzZWxpbmUodm9pZCkKIHsKIAljb25zdCBjaGFyICpjcDsKIAlpbnQgY3Vyc3ltOwpAQCAtNTk1LDkgKzYxMCwyMSBAQAogCQkJaWYgKGluY29tbWVudCkKIAkJCQlsaW5lc3RhdGUgPSBMU19ESVJUWTsKIAkJfQotCQkvKiBza2lwY29tbWVudCBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoZSBzdGF0ZSAqLwotCQlpZiAobGluZXN0YXRlID09IExTX0hBU0gpCi0JCQlhYm9ydCgpOyAvKiBidWcgKi8KKwkJLyogc2tpcGNvbW1lbnQgbm9ybWFsbHkgY2hhbmdlcyB0aGUgc3RhdGUsIGV4Y2VwdAorCQkgICBpZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlIGxhY2tzIGEgbmV3bGluZSwgb3IKKwkJICAgaWYgdGhlcmUgaXMgdG9vIG11Y2ggd2hpdGVzcGFjZSBpbiBhIGRpcmVjdGl2ZSAqLworCQlpZiAobGluZXN0YXRlID09IExTX0hBU0gpIHsKKwkJCXNpemVfdCBsZW4gPSBjcCAtIHRsaW5lOworCQkJaWYgKGZnZXRzKHRsaW5lICsgbGVuLCBNQVhMSU5FIC0gbGVuLCBpbnB1dCkgPT0gTlVMTCkgeworCQkJCS8qIGFwcGVuZCB0aGUgbWlzc2luZyBuZXdsaW5lICovCisJCQkJdGxpbmVbbGVuKzBdID0gJ1xuJzsKKwkJCQl0bGluZVtsZW4rMV0gPSAnXDAnOworCQkJCWNwKys7CisJCQkJbGluZXN0YXRlID0gTFNfU1RBUlQ7CisJCQl9IGVsc2UgeworCQkJCWxpbmVzdGF0ZSA9IExTX0RJUlRZOworCQkJfQorCQl9CiAJfQogCWlmIChsaW5lc3RhdGUgPT0gTFNfRElSVFkpIHsKIAkJd2hpbGUgKCpjcCAhPSAnXDAnKQpAQCAtNjEwLDE3ICs2MzcsNDAgQEAKIAogLyoKICAqIFRoZXNlIGFyZSB0aGUgYmluYXJ5IG9wZXJhdG9ycyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGV4cHJlc3Npb24KLSAqIGV2YWx1YXRvci4gTm90ZSB0aGF0IGlmIHN1cHBvcnQgZm9yIGRpdmlzaW9uIGlzIGFkZGVkIHRoZW4gd2UgYWxzbwotICogbmVlZCBzaG9ydC1jaXJjdWl0aW5nIGJvb2xlYW5zIGJlY2F1c2Ugb2YgZGl2aWRlLWJ5LXplcm8uCisgKiBldmFsdWF0b3IuCiAgKi8KLXN0YXRpYyBpbnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiAoYSA8IGIpOyB9Ci1zdGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyByZXR1cm4gKGEgPiBiKTsgfQotc3RhdGljIGludCBvcF9sZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIChhIDw9IGIpOyB9Ci1zdGF0aWMgaW50IG9wX2dlKGludCBhLCBpbnQgYikgeyByZXR1cm4gKGEgPj0gYik7IH0KLXN0YXRpYyBpbnQgb3BfZXEoaW50IGEsIGludCBiKSB7IHJldHVybiAoYSA9PSBiKTsgfQotc3RhdGljIGludCBvcF9uZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIChhICE9IGIpOyB9Ci1zdGF0aWMgaW50IG9wX29yKGludCBhLCBpbnQgYikgeyByZXR1cm4gKGEgfHwgYik7IH0KLXN0YXRpYyBpbnQgb3BfYW5kKGludCBhLCBpbnQgYikgeyByZXR1cm4gKGEgJiYgYik7IH0KK3N0YXRpYyBMaW5ldHlwZSBvcF9zdHJpY3QoaW50ICpwLCBpbnQgdiwgTGluZXR5cGUgYXQsIExpbmV0eXBlIGJ0KSB7CisJaWYoYXQgPT0gTFRfSUYgfHwgYnQgPT0gTFRfSUYpIHJldHVybiAoTFRfSUYpOworCXJldHVybiAoKnAgPSB2LCB2ID8gTFRfVFJVRSA6IExUX0ZBTFNFKTsKK30KK3N0YXRpYyBMaW5ldHlwZSBvcF9sdChpbnQgKnAsIExpbmV0eXBlIGF0LCBpbnQgYSwgTGluZXR5cGUgYnQsIGludCBiKSB7CisJcmV0dXJuIG9wX3N0cmljdChwLCBhIDwgYiwgYXQsIGJ0KTsKK30KK3N0YXRpYyBMaW5ldHlwZSBvcF9ndChpbnQgKnAsIExpbmV0eXBlIGF0LCBpbnQgYSwgTGluZXR5cGUgYnQsIGludCBiKSB7CisJcmV0dXJuIG9wX3N0cmljdChwLCBhID4gYiwgYXQsIGJ0KTsKK30KK3N0YXRpYyBMaW5ldHlwZSBvcF9sZShpbnQgKnAsIExpbmV0eXBlIGF0LCBpbnQgYSwgTGluZXR5cGUgYnQsIGludCBiKSB7CisJcmV0dXJuIG9wX3N0cmljdChwLCBhIDw9IGIsIGF0LCBidCk7Cit9CitzdGF0aWMgTGluZXR5cGUgb3BfZ2UoaW50ICpwLCBMaW5ldHlwZSBhdCwgaW50IGEsIExpbmV0eXBlIGJ0LCBpbnQgYikgeworCXJldHVybiBvcF9zdHJpY3QocCwgYSA+PSBiLCBhdCwgYnQpOworfQorc3RhdGljIExpbmV0eXBlIG9wX2VxKGludCAqcCwgTGluZXR5cGUgYXQsIGludCBhLCBMaW5ldHlwZSBidCwgaW50IGIpIHsKKwlyZXR1cm4gb3Bfc3RyaWN0KHAsIGEgPT0gYiwgYXQsIGJ0KTsKK30KK3N0YXRpYyBMaW5ldHlwZSBvcF9uZShpbnQgKnAsIExpbmV0eXBlIGF0LCBpbnQgYSwgTGluZXR5cGUgYnQsIGludCBiKSB7CisJcmV0dXJuIG9wX3N0cmljdChwLCBhICE9IGIsIGF0LCBidCk7Cit9CitzdGF0aWMgTGluZXR5cGUgb3Bfb3IoaW50ICpwLCBMaW5ldHlwZSBhdCwgaW50IGEsIExpbmV0eXBlIGJ0LCBpbnQgYikgeworCWlmICghc3RyaWN0bG9naWMgJiYgKGF0ID09IExUX1RSVUUgfHwgYnQgPT0gTFRfVFJVRSkpCisJCXJldHVybiAoKnAgPSAxLCBMVF9UUlVFKTsKKwlyZXR1cm4gb3Bfc3RyaWN0KHAsIGEgfHwgYiwgYXQsIGJ0KTsKK30KK3N0YXRpYyBMaW5ldHlwZSBvcF9hbmQoaW50ICpwLCBMaW5ldHlwZSBhdCwgaW50IGEsIExpbmV0eXBlIGJ0LCBpbnQgYikgeworCWlmICghc3RyaWN0bG9naWMgJiYgKGF0ID09IExUX0ZBTFNFIHx8IGJ0ID09IExUX0ZBTFNFKSkKKwkJcmV0dXJuICgqcCA9IDAsIExUX0ZBTFNFKTsKKwlyZXR1cm4gb3Bfc3RyaWN0KHAsIGEgJiYgYiwgYXQsIGJ0KTsKK30KIAogLyoKICAqIEFuIGV2YWx1YXRpb24gZnVuY3Rpb24gdGFrZXMgdGhyZWUgYXJndW1lbnRzLCBhcyBmb2xsb3dzOiAoMSkgYSBwb2ludGVyIHRvCkBAIC02MjksOCArNjc5LDggQEAKICAqIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uOyBhbmQgKDMpIGEgcG9pbnRlciB0byBhIGNoYXIqIHRoYXQgcG9pbnRzIHRvIHRoZQogICogZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgYW5kIHRoYXQgaXMgdXBkYXRlZCB0byB0aGUgZW5kIG9mIHRoZSBleHByZXNzaW9uCiAgKiB3aGVuIGV2YWx1YXRpb24gaXMgY29tcGxldGUuIFRoZSBmdW5jdGlvbiByZXR1cm5zIExUX0ZBTFNFIGlmIHRoZSB2YWx1ZSBvZgotICogdGhlIGV4cHJlc3Npb24gaXMgemVybywgTFRfVFJVRSBpZiBpdCBpcyBub24temVybywgb3IgTFRfSUYgaWYgdGhlCi0gKiBleHByZXNzaW9uIGNvdWxkIG5vdCBiZSBldmFsdWF0ZWQuCisgKiB0aGUgZXhwcmVzc2lvbiBpcyB6ZXJvLCBMVF9UUlVFIGlmIGl0IGlzIG5vbi16ZXJvLCBMVF9JRiBpZiB0aGUgZXhwcmVzc2lvbgorICogZGVwZW5kcyBvbiBhbiB1bmtub3duIHN5bWJvbCwgb3IgTFRfRVJST1IgaWYgdGhlcmUgaXMgYSBwYXJzZSBmYWlsdXJlLgogICovCiBzdHJ1Y3Qgb3BzOwogCkBAIC02NDksNyArNjk5LDcgQEAKIAlldmFsX2ZuICppbm5lcjsKIAlzdHJ1Y3Qgb3AgewogCQljb25zdCBjaGFyICpzdHI7Ci0JCWludCAoKmZuKShpbnQsIGludCk7CisJCUxpbmV0eXBlICgqZm4pKGludCAqLCBMaW5ldHlwZSwgaW50LCBMaW5ldHlwZSwgaW50KTsKIAl9IG9wWzVdOwogfSBldmFsX29wc1tdID0gewogCXsgZXZhbF90YWJsZSwgeyB7ICJ8fCIsIG9wX29yIH0gfSB9LApAQCAtNjY0LDggKzcxNCw4IEBACiAKIC8qCiAgKiBGdW5jdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgaW5uZXJtb3N0IHBhcnRzIG9mIGV4cHJlc3Npb25zLAotICogdml6LiAhZXhwciAoZXhwcikgZGVmaW5lZChzeW1ib2wpIHN5bWJvbCBudW1iZXIKLSAqIFdlIHJlc2V0IHRoZSBrZWVwdGhpcyBmbGFnIHdoZW4gd2UgZmluZCBhIG5vbi1jb25zdGFudCBzdWJleHByZXNzaW9uLgorICogdml6LiAhZXhwciAoZXhwcikgbnVtYmVyIGRlZmluZWQoc3ltYm9sKSBzeW1ib2wKKyAqIFdlIHJlc2V0IHRoZSBjb25zdGV4cHIgZmxhZyBpbiB0aGUgbGFzdCB0d28gY2FzZXMuCiAgKi8KIHN0YXRpYyBMaW5ldHlwZQogZXZhbF91bmFyeShjb25zdCBzdHJ1Y3Qgb3BzICpvcHMsIGludCAqdmFscCwgY29uc3QgY2hhciAqKmNwcCkKQEAgLTY3Myw2OCArNzIzLDgzIEBACiAJY29uc3QgY2hhciAqY3A7CiAJY2hhciAqZXA7CiAJaW50IHN5bTsKKwlib29sIGRlZnBhcmVuOworCUxpbmV0eXBlIGx0OwogCiAJY3AgPSBza2lwY29tbWVudCgqY3BwKTsKIAlpZiAoKmNwID09ICchJykgewogCQlkZWJ1ZygiZXZhbCVkICEiLCBvcHMgLSBldmFsX29wcyk7CiAJCWNwKys7Ci0JCWlmIChldmFsX3VuYXJ5KG9wcywgdmFscCwgJmNwKSA9PSBMVF9JRikgewotCQkJKmNwcCA9IGNwOwotCQkJcmV0dXJuIChMVF9JRik7CisJCWx0ID0gZXZhbF91bmFyeShvcHMsIHZhbHAsICZjcCk7CisJCWlmIChsdCA9PSBMVF9FUlJPUikKKwkJCXJldHVybiAoTFRfRVJST1IpOworCQlpZiAobHQgIT0gTFRfSUYpIHsKKwkJCSp2YWxwID0gISp2YWxwOworCQkJbHQgPSAqdmFscCA/IExUX1RSVUUgOiBMVF9GQUxTRTsKIAkJfQotCQkqdmFscCA9ICEqdmFscDsKIAl9IGVsc2UgaWYgKCpjcCA9PSAnKCcpIHsKIAkJY3ArKzsKIAkJZGVidWcoImV2YWwlZCAoIiwgb3BzIC0gZXZhbF9vcHMpOwotCQlpZiAoZXZhbF90YWJsZShldmFsX29wcywgdmFscCwgJmNwKSA9PSBMVF9JRikKLQkJCXJldHVybiAoTFRfSUYpOworCQlsdCA9IGV2YWxfdGFibGUoZXZhbF9vcHMsIHZhbHAsICZjcCk7CisJCWlmIChsdCA9PSBMVF9FUlJPUikKKwkJCXJldHVybiAoTFRfRVJST1IpOwogCQljcCA9IHNraXBjb21tZW50KGNwKTsKIAkJaWYgKCpjcCsrICE9ICcpJykKLQkJCXJldHVybiAoTFRfSUYpOworCQkJcmV0dXJuIChMVF9FUlJPUik7CiAJfSBlbHNlIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKIAkJZGVidWcoImV2YWwlZCBudW1iZXIiLCBvcHMgLSBldmFsX29wcyk7CiAJCSp2YWxwID0gc3RydG9sKGNwLCAmZXAsIDApOworCQlpZiAoZXAgPT0gY3ApCisJCQlyZXR1cm4gKExUX0VSUk9SKTsKKwkJbHQgPSAqdmFscCA/IExUX1RSVUUgOiBMVF9GQUxTRTsKIAkJY3AgPSBza2lwc3ltKGNwKTsKIAl9IGVsc2UgaWYgKHN0cm5jbXAoY3AsICJkZWZpbmVkIiwgNykgPT0gMCAmJiBlbmRzeW0oY3BbN10pKSB7CiAJCWNwID0gc2tpcGNvbW1lbnQoY3ArNyk7CiAJCWRlYnVnKCJldmFsJWQgZGVmaW5lZCIsIG9wcyAtIGV2YWxfb3BzKTsKLQkJaWYgKCpjcCsrICE9ICcoJykKLQkJCXJldHVybiAoTFRfSUYpOwotCQljcCA9IHNraXBjb21tZW50KGNwKTsKKwkJaWYgKCpjcCA9PSAnKCcpIHsKKwkJCWNwID0gc2tpcGNvbW1lbnQoY3ArMSk7CisJCQlkZWZwYXJlbiA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlkZWZwYXJlbiA9IGZhbHNlOworCQl9CiAJCXN5bSA9IGZpbmRzeW0oY3ApOworCQlpZiAoc3ltIDwgMCkgeworCQkJbHQgPSBMVF9JRjsKKwkJfSBlbHNlIHsKKwkJCSp2YWxwID0gKHZhbHVlW3N5bV0gIT0gTlVMTCk7CisJCQlsdCA9ICp2YWxwID8gTFRfVFJVRSA6IExUX0ZBTFNFOworCQl9CiAJCWNwID0gc2tpcHN5bShjcCk7CiAJCWNwID0gc2tpcGNvbW1lbnQoY3ApOwotCQlpZiAoKmNwKysgIT0gJyknKQotCQkJcmV0dXJuIChMVF9JRik7Ci0JCWlmIChzeW0gPj0gMCkKLQkJCSp2YWxwID0gKHZhbHVlW3N5bV0gIT0gTlVMTCk7Ci0JCWVsc2UgewotCQkJKmNwcCA9IGNwOwotCQkJcmV0dXJuIChMVF9JRik7Ci0JCX0KLQkJa2VlcHRoaXMgPSBmYWxzZTsKKwkJaWYgKGRlZnBhcmVuICYmICpjcCsrICE9ICcpJykKKwkJCXJldHVybiAoTFRfRVJST1IpOworCQljb25zdGV4cHIgPSBmYWxzZTsKIAl9IGVsc2UgaWYgKCFlbmRzeW0oKmNwKSkgewogCQlkZWJ1ZygiZXZhbCVkIHN5bWJvbCIsIG9wcyAtIGV2YWxfb3BzKTsKIAkJc3ltID0gZmluZHN5bShjcCk7Ci0JCWlmIChzeW0gPCAwKQotCQkJcmV0dXJuIChMVF9JRik7Ci0JCWlmICh2YWx1ZVtzeW1dID09IE5VTEwpCisJCWNwID0gc2tpcHN5bShjcCk7CisJCWlmIChzeW0gPCAwKSB7CisJCQlsdCA9IExUX0lGOworCQkJY3AgPSBza2lwYXJncyhjcCk7CisJCX0gZWxzZSBpZiAodmFsdWVbc3ltXSA9PSBOVUxMKSB7CiAJCQkqdmFscCA9IDA7Ci0JCWVsc2UgeworCQkJbHQgPSBMVF9GQUxTRTsKKwkJfSBlbHNlIHsKIAkJCSp2YWxwID0gc3RydG9sKHZhbHVlW3N5bV0sICZlcCwgMCk7CiAJCQlpZiAoKmVwICE9ICdcMCcgfHwgZXAgPT0gdmFsdWVbc3ltXSkKLQkJCQlyZXR1cm4gKExUX0lGKTsKKwkJCQlyZXR1cm4gKExUX0VSUk9SKTsKKwkJCWx0ID0gKnZhbHAgPyBMVF9UUlVFIDogTFRfRkFMU0U7CisJCQljcCA9IHNraXBhcmdzKGNwKTsKIAkJfQotCQljcCA9IHNraXBzeW0oY3ApOwotCQlrZWVwdGhpcyA9IGZhbHNlOworCQljb25zdGV4cHIgPSBmYWxzZTsKIAl9IGVsc2UgewogCQlkZWJ1ZygiZXZhbCVkIGJhZCBleHByIiwgb3BzIC0gZXZhbF9vcHMpOwotCQlyZXR1cm4gKExUX0lGKTsKKwkJcmV0dXJuIChMVF9FUlJPUik7CiAJfQogCiAJKmNwcCA9IGNwOwogCWRlYnVnKCJldmFsJWQgPSAlZCIsIG9wcyAtIGV2YWxfb3BzLCAqdmFscCk7Ci0JcmV0dXJuICgqdmFscCA/IExUX1RSVUUgOiBMVF9GQUxTRSk7CisJcmV0dXJuIChsdCk7CiB9CiAKIC8qCkBAIC03NDYsMTEgKzgxMSwxMyBAQAogCWNvbnN0IHN0cnVjdCBvcCAqb3A7CiAJY29uc3QgY2hhciAqY3A7CiAJaW50IHZhbDsKLQlMaW5ldHlwZSBsaHMsIHJoczsKKwlMaW5ldHlwZSBsdCwgcnQ7CiAKIAlkZWJ1ZygiZXZhbCVkIiwgb3BzIC0gZXZhbF9vcHMpOwogCWNwID0gKmNwcDsKLQlsaHMgPSBvcHMtPmlubmVyKG9wcysxLCB2YWxwLCAmY3ApOworCWx0ID0gb3BzLT5pbm5lcihvcHMrMSwgdmFscCwgJmNwKTsKKwlpZiAobHQgPT0gTFRfRVJST1IpCisJCXJldHVybiAoTFRfRVJST1IpOwogCWZvciAoOzspIHsKIAkJY3AgPSBza2lwY29tbWVudChjcCk7CiAJCWZvciAob3AgPSBvcHMtPm9wOyBvcC0+c3RyICE9IE5VTEw7IG9wKyspCkBAIC03NjAsMzIgKzgyNywxNiBAQAogCQkJYnJlYWs7CiAJCWNwICs9IHN0cmxlbihvcC0+c3RyKTsKIAkJZGVidWcoImV2YWwlZCAlcyIsIG9wcyAtIGV2YWxfb3BzLCBvcC0+c3RyKTsKLQkJcmhzID0gb3BzLT5pbm5lcihvcHMrMSwgJnZhbCwgJmNwKTsKLQkJaWYgKG9wLT5mbiA9PSBvcF9hbmQgJiYgKGxocyA9PSBMVF9GQUxTRSB8fCByaHMgPT0gTFRfRkFMU0UpKSB7Ci0JCQlkZWJ1ZygiZXZhbCVkOiBhbmQgYWx3YXlzIGZhbHNlIiwgb3BzIC0gZXZhbF9vcHMpOwotCQkJaWYgKGxocyA9PSBMVF9JRikKLQkJCQkqdmFscCA9IHZhbDsKLQkJCWxocyA9IExUX0ZBTFNFOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG9wLT5mbiA9PSBvcF9vciAmJiAobGhzID09IExUX1RSVUUgfHwgcmhzID09IExUX1RSVUUpKSB7Ci0JCQlkZWJ1ZygiZXZhbCVkOiBvciBhbHdheXMgdHJ1ZSIsIG9wcyAtIGV2YWxfb3BzKTsKLQkJCWlmIChsaHMgPT0gTFRfSUYpCi0JCQkJKnZhbHAgPSB2YWw7Ci0JCQlsaHMgPSBMVF9UUlVFOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHJocyA9PSBMVF9JRikKLQkJCWxocyA9IExUX0lGOwotCQlpZiAobGhzICE9IExUX0lGKQotCQkJKnZhbHAgPSBvcC0+Zm4oKnZhbHAsIHZhbCk7CisJCXJ0ID0gb3BzLT5pbm5lcihvcHMrMSwgJnZhbCwgJmNwKTsKKwkJaWYgKHJ0ID09IExUX0VSUk9SKQorCQkJcmV0dXJuIChMVF9FUlJPUik7CisJCWx0ID0gb3AtPmZuKHZhbHAsIGx0LCAqdmFscCwgcnQsIHZhbCk7CiAJfQogCiAJKmNwcCA9IGNwOwogCWRlYnVnKCJldmFsJWQgPSAlZCIsIG9wcyAtIGV2YWxfb3BzLCAqdmFscCk7Ci0JaWYgKGxocyAhPSBMVF9JRikKLQkJbGhzID0gKCp2YWxwID8gTFRfVFJVRSA6IExUX0ZBTFNFKTsKLQlyZXR1cm4gbGhzOworCWRlYnVnKCJldmFsJWQgbHQgPSAlcyIsIG9wcyAtIGV2YWxfb3BzLCBsaW5ldHlwZV9uYW1lW2x0XSk7CisJcmV0dXJuIChsdCk7CiB9CiAKIC8qCkBAIC03OTYsMTcgKzg0NywxNCBAQAogc3RhdGljIExpbmV0eXBlCiBpZmV2YWwoY29uc3QgY2hhciAqKmNwcCkKIHsKLQljb25zdCBjaGFyICpjcCA9ICpjcHA7CiAJaW50IHJldDsKLQlpbnQgdmFsOworCWludCB2YWwgPSAwOwogCiAJZGVidWcoImV2YWwgJXMiLCAqY3BwKTsKLQlrZWVwdGhpcyA9IGtpbGxjb25zdHMgPyBmYWxzZSA6IHRydWU7Ci0JcmV0ID0gZXZhbF90YWJsZShldmFsX29wcywgJnZhbCwgJmNwKTsKLQlpZiAocmV0ICE9IExUX0lGKQotCQkqY3BwID0gY3A7CisJY29uc3RleHByID0ga2lsbGNvbnN0cyA/IGZhbHNlIDogdHJ1ZTsKKwlyZXQgPSBldmFsX3RhYmxlKGV2YWxfb3BzLCAmdmFsLCBjcHApOwogCWRlYnVnKCJldmFsID0gJWQiLCB2YWwpOwotCXJldHVybiAoa2VlcHRoaXMgPyBMVF9JRiA6IHJldCk7CisJcmV0dXJuIChjb25zdGV4cHIgPyBMVF9JRiA6IHJldCA9PSBMVF9FUlJPUiA/IExUX0lGIDogcmV0KTsKIH0KIAogLyoKQEAgLTkxOCw2ICs5NjYsMzEgQEAKIH0KIAogLyoKKyAqIFNraXAgbWFjcm8gYXJndW1lbnRzLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitza2lwYXJncyhjb25zdCBjaGFyICpjcCkKK3sKKwljb25zdCBjaGFyICpvY3AgPSBjcDsKKwlpbnQgbGV2ZWwgPSAwOworCWNwID0gc2tpcGNvbW1lbnQoY3ApOworCWlmICgqY3AgIT0gJygnKQorCQlyZXR1cm4gKGNwKTsKKwlkbyB7CisJCWlmICgqY3AgPT0gJygnKQorCQkJbGV2ZWwrKzsKKwkJaWYgKCpjcCA9PSAnKScpCisJCQlsZXZlbC0tOworCQljcCA9IHNraXBjb21tZW50KGNwKzEpOworCX0gd2hpbGUgKGxldmVsICE9IDAgJiYgKmNwICE9ICdcMCcpOworCWlmIChsZXZlbCA9PSAwKQorCQlyZXR1cm4gKGNwKTsKKwllbHNlCisJLyogUmV3aW5kIGFuZCByZS1kZXRlY3QgdGhlIHN5bnRheCBlcnJvciBsYXRlci4gKi8KKwkJcmV0dXJuIChvY3ApOworfQorCisvKgogICogU2tpcCBvdmVyIGFuIGlkZW50aWZpZXIuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICoKQEAgLTkyOSw3ICsxMDAyLDcgQEAKIH0KIAogLyoKLSAqIExvb2sgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSWYgaXMgaXMgZm91bmQsIHdlIHJldHVybgorICogTG9vayBmb3IgdGhlIHN5bWJvbCBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJZiBpdCBpcyBmb3VuZCwgd2UgcmV0dXJuCiAgKiB0aGUgc3ltYm9sIHRhYmxlIGluZGV4LCBlbHNlIHdlIHJldHVybiAtMS4KICAqLwogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvTWFrZWZpbGUgYi9zZWN1cml0eS9NYWtlZmlsZQppbmRleCBiYjQ0ZTM1Li5kYTIwYTE5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pICAgICAgICArPSB0b21veW8KIAogIyBhbHdheXMgZW5hYmxlIGRlZmF1bHQgY2FwYWJpbGl0aWVzCi1vYmoteQkJKz0gY29tbW9uY2FwLm8gbWluX2FkZHIubworb2JqLXkJCQkJCSs9IGNvbW1vbmNhcC5vCitvYmotJChDT05GSUdfTU1VKQkJCSs9IG1pbl9hZGRyLm8KIAogIyBPYmplY3QgZmlsZSBsaXN0cwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZKQkJCSs9IHNlY3VyaXR5Lm8gY2FwYWJpbGl0eS5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaAppbmRleCAxNjVlYjUzLi5jNDFhZmU2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKQEAgLTk3LDcgKzk3LDYgQEAKIAogLyogaWludCBjYWNoZSBmbGFncyAqLwogI2RlZmluZSBJTUFfTUVBU1VSRUQJCTEKLSNkZWZpbmUgSU1BX0lJTlRfRFVNUF9TVEFDSwk1MTIKIAogLyogaW50ZWdyaXR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlICovCiBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgewpAQCAtMTI4LDggKzEyNyw2IEBACiAgKi8KIHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotdm9pZCBpbWFfaWludF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIGlpbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CiB2b2lkIGlpbnRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKaW5kZXggYTRlMmIxZC4uZmE1OTJmZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtMTksOCArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlICJpbWEuaCIKIAotI2RlZmluZSBpbWFfaWludF9kZWxldGUgaW1hX2lub2RlX2ZyZWUKLQogUkFESVhfVFJFRShpbWFfaWludF9zdG9yZSwgR0ZQX0FUT01JQyk7CiBERUZJTkVfU1BJTkxPQ0soaW1hX2lpbnRfbG9jayk7CiAKQEAgLTQ1LDIyICs0MywyMSBAQAogCXJldHVybiBpaW50OwogfQogCi0vKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUKLSAqIGZyb20gdGhlIGlpbnRfY2FjaGUgc2xhYiwgaW5pdGlhbGl6ZSB0aGUgaWludCwgYW5kCi0gKiBpbnNlcnQgaXQgaW50byB0aGUgcmFkaXggdHJlZS4KLSAqCi0gKiBPbiBzdWNjZXNzIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGlpbnQ7IG9uIGZhaWx1cmUgcmV0dXJuIE5VTEwuCisvKioKKyAqIGltYV9pbm9kZV9hbGxvYyAtIGFsbG9jYXRlIGFuIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gdGhlIGlub2RlCiAgKi8KLXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCitpbnQgaW1hX2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gTlVMTDsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCi0JCXJldHVybiBpaW50OworCQlyZXR1cm4gMDsKKwogCWlpbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGlpbnRfY2FjaGUsIEdGUF9OT0ZTKTsKIAlpZiAoIWlpbnQpCi0JCXJldHVybiBpaW50OworCQlyZXR1cm4gLUVOT01FTTsKIAogCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0ZTKTsKIAlpZiAocmMgPCAwKQpAQCAtNzAsNjYgKzY3LDE0IEBACiAJcmMgPSByYWRpeF90cmVlX2luc2VydCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlLCBpaW50KTsKIAlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CiBvdXQ6Ci0JaWYgKHJjIDwgMCkgeworCWlmIChyYyA8IDApCiAJCWttZW1fY2FjaGVfZnJlZShpaW50X2NhY2hlLCBpaW50KTsKLQkJaWYgKHJjID09IC1FRVhJU1QpIHsKLQkJCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7Ci0JCQlpaW50ID0gcmFkaXhfdHJlZV9sb29rdXAoJmltYV9paW50X3N0b3JlLAotCQkJCQkJICh1bnNpZ25lZCBsb25nKWlub2RlKTsKLQkJCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKLQkJfSBlbHNlCi0JCQlpaW50ID0gTlVMTDsKLQl9CisKIAlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7Ci0JcmV0dXJuIGlpbnQ7CisKKwlyZXR1cm4gcmM7CiB9CiAKLS8qKgotICogaW1hX2lub2RlX2FsbG9jIC0gYWxsb2NhdGUgYW4gaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKLSAqIEBpbm9kZTogcG9pbnRlciB0byB0aGUgaW5vZGUKLSAqCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCi0gKi8KLWludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7Ci0KLQlpZiAoIWltYV9pbml0aWFsaXplZCkKLQkJcmV0dXJuIDA7Ci0KLQlpaW50ID0gaW1hX2lpbnRfaW5zZXJ0KGlub2RlKTsKLQlpZiAoIWlpbnQpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi0vKiBpbWFfaWludF9maW5kX2luc2VydF9nZXQgLSBnZXQgdGhlIGlpbnQgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlCi0gKgotICogTW9zdCBpbnNlcnRpb25zIGFyZSBkb25lIGF0IGlub2RlX2FsbG9jLCBleGNlcHQgdGhvc2UgYWxsb2NhdGVkCi0gKiBiZWZvcmUgbGF0ZV9pbml0Y2FsbC4gV2hlbiB0aGUgaWludCBkb2VzIG5vdCBleGlzdCwgYWxsb2NhdGUgaXQsCi0gKiBpbml0aWFsaXplIGFuZCBpbnNlcnQgaXQsIGFuZCBpbmNyZW1lbnQgdGhlIGlpbnQgcmVmY291bnQuCi0gKgotICogKENhbid0IGluaXRpYWxpemUgYXQgc2VjdXJpdHlfaW5pdGNhbGwgYmVmb3JlIGFueSBpbm9kZXMgYXJlCi0gKiBhbGxvY2F0ZWQsIGdvdCB0byB3YWl0IGF0IGxlYXN0IHVudGlsIHByb2NfaW5pdC4pCi0gKgotICogIFJldHVybiB0aGUgaWludC4KLSAqLwotc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2luc2VydF9nZXQoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBOVUxMOwotCi0JaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKLQlpZiAoaWludCkKLQkJcmV0dXJuIGlpbnQ7Ci0KLQlpaW50ID0gaW1hX2lpbnRfaW5zZXJ0KGlub2RlKTsKLQlpZiAoaWludCkKLQkJa3JlZl9nZXQoJmlpbnQtPnJlZmNvdW50KTsKLQotCXJldHVybiBpaW50OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KTsKLQogLyogaWludF9mcmVlIC0gY2FsbGVkIHdoZW4gdGhlIGlpbnQgcmVmY291bnQgZ29lcyB0byB6ZXJvICovCiB2b2lkIGlpbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKQEAgLTE2NCwxMiArMTA5LDEyIEBACiB9CiAKIC8qKgotICogaW1hX2lpbnRfZGVsZXRlIC0gY2FsbGVkIG9uIGludGVncml0eV9pbm9kZV9mcmVlCisgKiBpbWFfaW5vZGVfZnJlZSAtIGNhbGxlZCBvbiBzZWN1cml0eV9pbm9kZV9mcmVlCiAgKiBAaW5vZGU6IHBvaW50ZXIgdG8gdGhlIGlub2RlCiAgKgogICogRnJlZSB0aGUgaW50ZWdyaXR5IGluZm9ybWF0aW9uKGlpbnQpIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4KICAqLwotdm9pZCBpbWFfaWludF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgaW1hX2lub2RlX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYwppbmRleCBiODVlNjFiLi5hODlmNDRkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCkBAIC0xMyw4ICsxMyw4IEBACiAgKiBMaWNlbnNlLgogICoKICAqIEZpbGU6IGltYV9tYWluLmMKLSAqICAgICAgICAgICAgIGltcGxlbWVudHMgdGhlIElNQSBob29rczogaW1hX2Jwcm1fY2hlY2ssIGltYV9maWxlX21tYXAsCi0gKiAgICAgICAgICAgICBhbmQgaW1hX3BhdGhfY2hlY2suCisgKglpbXBsZW1lbnRzIHRoZSBJTUEgaG9va3M6IGltYV9icHJtX2NoZWNrLCBpbWFfZmlsZV9tbWFwLAorICoJYW5kIGltYV9wYXRoX2NoZWNrLgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpAQCAtMzUsNiArMzUsMTAwIEBACiB9CiBfX3NldHVwKCJpbWFfaGFzaD0iLCBoYXNoX3NldHVwKTsKIAorc3RydWN0IGltYV9pbWJhbGFuY2UgeworCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CisJdW5zaWduZWQgbG9uZyBmc21hZ2ljOworfTsKKworLyoKKyAqIGltYV9saW1pdF9pbWJhbGFuY2UgLSBlbWl0IG9uZSBpbWJhbGFuY2UgbWVzc2FnZSBwZXIgZmlsZXN5c3RlbSB0eXBlCisgKgorICogTWFpbnRhaW4gbGlzdCBvZiBmaWxlc3lzdGVtIHR5cGVzIHRoYXQgZG8gbm90IG1lYXN1cmUgZmlsZXMgcHJvcGVybHkuCisgKiBSZXR1cm4gZmFsc2UgaWYgdW5rbm93biwgdHJ1ZSBpZiBrbm93bi4KKyAqLworc3RhdGljIGJvb2wgaW1hX2xpbWl0X2ltYmFsYW5jZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGltYV9pbWJhbGFuY2VfbG9jayk7CisJc3RhdGljIEhMSVNUX0hFQUQoaW1hX2ltYmFsYW5jZV9saXN0KTsKKworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlLT5mX2RlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgaW1hX2ltYmFsYW5jZSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbm9kZSwgJmltYV9pbWJhbGFuY2VfbGlzdCwgbm9kZSkgeworCQlpZiAoZW50cnktPmZzbWFnaWMgPT0gc2ItPnNfbWFnaWMpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChmb3VuZCkKKwkJZ290byBvdXQ7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9OT0ZTKTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIG91dDsKKwllbnRyeS0+ZnNtYWdpYyA9IHNiLT5zX21hZ2ljOworCXNwaW5fbG9jaygmaW1hX2ltYmFsYW5jZV9sb2NrKTsKKwkvKgorCSAqIHdlIGNvdWxkIGhhdmUgcmFjZWQgYW5kIHNvbWV0aGluZyBlbHNlIG1pZ2h0IGhhdmUgYWRkZWQgdGhpcyBmcworCSAqIHRvIHRoZSBsaXN0LCBidXQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUKKwkgKi8KKwlobGlzdF9hZGRfaGVhZF9yY3UoJmVudHJ5LT5ub2RlLCAmaW1hX2ltYmFsYW5jZV9saXN0KTsKKwlzcGluX3VubG9jaygmaW1hX2ltYmFsYW5jZV9sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPICJJTUE6IHVubWVhc3VyZWQgZmlsZXMgb24gZnNtYWdpYzogJWxYXG4iLAorCSAgICAgICBlbnRyeS0+ZnNtYWdpYyk7CitvdXQ6CisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogVXBkYXRlIHRoZSBjb3VudHMgZ2l2ZW4gYW4gZm1vZGVfdAorICovCitzdGF0aWMgdm9pZCBpbWFfaW5jX2NvdW50cyhzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIGZtb2RlX3QgbW9kZSkKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmaWludC0+bXV0ZXgpKTsKKworCWlpbnQtPm9wZW5jb3VudCsrOworCWlmICgobW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PSBGTU9ERV9SRUFEKQorCQlpaW50LT5yZWFkY291bnQrKzsKKwlpZiAobW9kZSAmIEZNT0RFX1dSSVRFKQorCQlpaW50LT53cml0ZWNvdW50Kys7Cit9CisKKy8qCisgKiBEZWNyZW1lbnQgaW1hIGNvdW50cworICovCitzdGF0aWMgdm9pZCBpbWFfZGVjX2NvdW50cyhzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwltb2RlX3QgbW9kZSA9IGZpbGUtPmZfbW9kZTsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmaWludC0+bXV0ZXgpKTsKKworCWlpbnQtPm9wZW5jb3VudC0tOworCWlmICgobW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PSBGTU9ERV9SRUFEKQorCQlpaW50LT5yZWFkY291bnQtLTsKKwlpZiAobW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWlpbnQtPndyaXRlY291bnQtLTsKKwkJaWYgKGlpbnQtPndyaXRlY291bnQgPT0gMCkgeworCQkJaWYgKGlpbnQtPnZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbikKKwkJCQlpaW50LT5mbGFncyAmPSB+SU1BX01FQVNVUkVEOworCQl9CisJfQorCisJaWYgKCgoaWludC0+b3BlbmNvdW50IDwgMCkgfHwKKwkgICAgIChpaW50LT5yZWFkY291bnQgPCAwKSB8fAorCSAgICAgKGlpbnQtPndyaXRlY291bnQgPCAwKSkgJiYKKwkgICAgIWltYV9saW1pdF9pbWJhbGFuY2UoZmlsZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wZW4vZnJlZSBpbWJhbGFuY2UgKHI6JWxkIHc6JWxkIG86JWxkKVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgaWludC0+cmVhZGNvdW50LCBpaW50LT53cml0ZWNvdW50LAorCQkgICAgICAgaWludC0+b3BlbmNvdW50KTsKKwkJZHVtcF9zdGFjaygpOworCX0KK30KKwogLyoqCiAgKiBpbWFfZmlsZV9mcmVlIC0gY2FsbGVkIG9uIF9fZnB1dCgpCiAgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZSBiZWluZyBmcmVlZApAQCAtNTQsMjkgKzE0OCw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmlpbnQtPm11dGV4KTsKLQlpZiAoaWludC0+b3BlbmNvdW50IDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIiVzOiAlcyBvcGVuL2ZyZWUgaW1iYWxhbmNlIChyOiVsZCB3OiVsZCBvOiVsZCBmOiVsZClcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJICAgICAgIGlpbnQtPnJlYWRjb3VudCwgaWludC0+d3JpdGVjb3VudCwKLQkJICAgICAgIGlpbnQtPm9wZW5jb3VudCwgYXRvbWljX2xvbmdfcmVhZCgmZmlsZS0+Zl9jb3VudCkpOwotCQlpZiAoIShpaW50LT5mbGFncyAmIElNQV9JSU5UX0RVTVBfU1RBQ0spKSB7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCQlpaW50LT5mbGFncyB8PSBJTUFfSUlOVF9EVU1QX1NUQUNLOwotCQl9Ci0JfQotCWlpbnQtPm9wZW5jb3VudC0tOwotCi0JaWYgKChmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSkgPT0gRk1PREVfUkVBRCkKLQkJaWludC0+cmVhZGNvdW50LS07Ci0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJaWludC0+d3JpdGVjb3VudC0tOwotCQlpZiAoaWludC0+d3JpdGVjb3VudCA9PSAwKSB7Ci0JCQlpZiAoaWludC0+dmVyc2lvbiAhPSBpbm9kZS0+aV92ZXJzaW9uKQotCQkJCWlpbnQtPmZsYWdzICY9IH5JTUFfTUVBU1VSRUQ7Ci0JCX0KLQl9CisJaW1hX2RlY19jb3VudHMoaWludCwgaW5vZGUsIGZpbGUpOwogCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOwogCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKIH0KQEAgLTExNiw4ICsxODgsNyBAQAogewogCWludCByYyA9IDA7CiAKLQlpaW50LT5vcGVuY291bnQrKzsKLQlpaW50LT5yZWFkY291bnQrKzsKKwlpbWFfaW5jX2NvdW50cyhpaW50LCBmaWxlLT5mX21vZGUpOwogCiAJcmMgPSBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChpaW50LCBmaWxlKTsKIAlpZiAoIXJjKQpAQCAtMTI1LDE1ICsxOTYsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgaW1hX3VwZGF0ZV9jb3VudHMoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBpbnQgbWFzaykKLXsKLQlpaW50LT5vcGVuY291bnQrKzsKLQlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpIHx8IChtYXNrID09IDApKQotCQlpaW50LT53cml0ZWNvdW50Kys7Ci0JZWxzZSBpZiAobWFzayAmIChNQVlfUkVBRCB8IE1BWV9FWEVDKSkKLQkJaWludC0+cmVhZGNvdW50Kys7Ci19Ci0KIC8qKgogICogaW1hX3BhdGhfY2hlY2sgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCiAgKiBAcGF0aDogY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBwYXRoIHRvIGJlIG1lYXN1cmVkCkBAIC0xNTIsNyArMjE0LDcgQEAKICAqIEFsd2F5cyByZXR1cm4gMCBhbmQgYXVkaXQgZGVudHJ5X29wZW4gZmFpbHVyZXMuCiAgKiAoUmV0dXJuIGNvZGUgd2lsbCBiZSBiYXNlZCB1cG9uIG1lYXN1cmVtZW50IGFwcHJhaXNhbC4pCiAgKi8KLWludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2ssIGludCB1cGRhdGVfY291bnRzKQoraW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKQEAgLTE2MSwxMyArMjIzLDExIEBACiAKIAlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuIDA7Ci0JaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWludCA9IGltYV9paW50X2ZpbmRfZ2V0KGlub2RlKTsKIAlpZiAoIWlpbnQpCiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOwotCWlmICh1cGRhdGVfY291bnRzKQotCQlpbWFfdXBkYXRlX2NvdW50cyhpaW50LCBtYXNrKTsKIAogCXJjID0gaW1hX211c3RfbWVhc3VyZShpaW50LCBpbm9kZSwgTUFZX1JFQUQsIFBBVEhfQ0hFQ0spOwogCWlmIChyYyA8IDApCkBAIC0yMTksNyArMjc5LDcgQEAKIAogCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gMDsKLQlpaW50ID0gaW1hX2lpbnRfZmluZF9pbnNlcnRfZ2V0KGlub2RlKTsKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOwogCWlmICghaWludCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIzOCwzOSArMjk4LDYgQEAKIH0KIAogLyoKLSAqIGltYV9jb3VudHNfcHV0IC0gZGVjcmVtZW50IGZpbGUgY291bnRzCi0gKgotICogRmlsZSBjb3VudHMgYXJlIGluY3JlbWVudGVkIGluIGltYV9wYXRoX2NoZWNrLiBPbiBmaWxlIG9wZW4KLSAqIGVycm9yLCBzdWNoIGFzIEVUWFRCU1ksIGRlY3JlbWVudCB0aGUgY291bnRzIHRvIHByZXZlbnQKLSAqIHVubmVjZXNzYXJ5IGltYmFsYW5jZSBtZXNzYWdlcy4KLSAqLwotdm9pZCBpbWFfY291bnRzX3B1dChzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7Ci0KLQkvKiBUaGUgaW5vZGUgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGZyZWVkLCBmcmVlaW5nIHRoZSBpaW50Ci0JICogd2l0aCBpdC4gVmVyaWZ5IHRoZSBpbm9kZSBpcyBub3QgTlVMTCBiZWZvcmUgZGVyZWZlcmVuY2luZwotCSAqIGl0LgotCSAqLwotCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFpbm9kZSB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuOwotCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOwotCWlmICghaWludCkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOwotCWlpbnQtPm9wZW5jb3VudC0tOwotCWlmICgobWFzayAmIE1BWV9XUklURSkgfHwgKG1hc2sgPT0gMCkpCi0JCWlpbnQtPndyaXRlY291bnQtLTsKLQllbHNlIGlmIChtYXNrICYgKE1BWV9SRUFEIHwgTUFZX0VYRUMpKQotCQlpaW50LT5yZWFkY291bnQtLTsKLQltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKLQotCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKLX0KLQotLyoKICAqIGltYV9jb3VudHNfZ2V0IC0gaW5jcmVtZW50IGZpbGUgY291bnRzCiAgKgogICogLSBmb3IgSVBDIHNobSBhbmQgc2htYXQgZmlsZS4KQEAgLTI4NiwxNiArMzEzLDExIEBACiAKIAlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuOwotCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7CiAJaWYgKCFpaW50KQogCQlyZXR1cm47CiAJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOwotCWlpbnQtPm9wZW5jb3VudCsrOwotCWlmICgoZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpID09IEZNT0RFX1JFQUQpCi0JCWlpbnQtPnJlYWRjb3VudCsrOwotCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQlpaW50LT53cml0ZWNvdW50Kys7CisJaW1hX2luY19jb3VudHMoaWludCwgZmlsZS0+Zl9tb2RlKTsKIAltdXRleF91bmxvY2soJmlpbnQtPm11dGV4KTsKIAogCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDA2ZWM3MjIuLmU5YzJlN2M1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJCSAqIGhhdmUgdGhlIGF1dGhvcmlzYXRpb24gdG9rZW4gaGFuZHkgKi8KIAkJaW5zdGtleSA9IGtleV9nZXRfaW5zdGFudGlhdGlvbl9hdXRoa2V5KGtleWlkKTsKIAkJaWYgKElTX0VSUihpbnN0a2V5KSkKLQkJCXJldHVybiBQVFJfRVJSKGtleV9yZWYpOworCQkJcmV0dXJuIFBUUl9FUlIoaW5zdGtleSk7CiAJCWtleV9wdXQoaW5zdGtleSk7CiAKIAkJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShrZXlpZCwgS0VZX0xPT0tVUF9QQVJUSUFMLCAwKTsKQEAgLTEyMzYsNiArMTIzNiw3IEBACiAgKi8KIGxvbmcga2V5Y3RsX3Nlc3Npb25fdG9fcGFyZW50KHZvaWQpCiB7CisjaWZkZWYgVElGX05PVElGWV9SRVNVTUUKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lLCAqcGFyZW50OwogCWNvbnN0IHN0cnVjdCBjcmVkICpteWNyZWQsICpwY3JlZDsKIAlzdHJ1Y3QgY3JlZCAqY3JlZCwgKm9sZGNyZWQ7CkBAIC0xMzI2LDYgKzEzMjcsMTUgQEAKIGVycm9yX2tleXJpbmc6CiAJa2V5X3JlZl9wdXQoa2V5cmluZ19yKTsKIAlyZXR1cm4gcmV0OworCisjZWxzZSAvKiAhVElGX05PVElGWV9SRVNVTUUgKi8KKwkvKgorCSAqIFRvIGJlIHJlbW92ZWQgd2hlbiBUSUZfTk9USUZZX1JFU1VNRSBoYXMgYmVlbiBpbXBsZW1lbnRlZCBvbgorCSAqIG02OGsveHRlbnNhCisJICovCisjd2FybmluZyBUSUZfTk9USUZZX1JFU1VNRSBub3QgaW1wbGVtZW50ZWQKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYgLyogIVRJRl9OT1RJRllfUkVTVU1FICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L21pbl9hZGRyLmMgYi9zZWN1cml0eS9taW5fYWRkci5jCmluZGV4IGZjNDNjOWQuLmU4NmYyOTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L21pbl9hZGRyLmMKKysrIGIvc2VjdXJpdHkvbWluX2FkZHIuYwpAQCAtNDMsNyArNDMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2luaXQgaW5pdF9tbWFwX21pbl9hZGRyKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X21tYXBfbWluX2FkZHIodm9pZCkKIHsKIAl1cGRhdGVfbW1hcF9taW5fYWRkcigpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZmlsZS5jIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwppbmRleCA4MzQ2OTM4Li45YTZjNTg4IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vZmlsZS5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJ0b21veW8uaCIKICNpbmNsdWRlICJyZWFscGF0aC5oIgotI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQogCiAvKgogICogdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggMTQ5N2RjZS4uYzU2OTk4NiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC0xNzIsMTQgKzE3MiwxNSBAQAogCXJldHVybiB2OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWFjaV9jaGFuX3dhaXRfcmVhZHkoc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1bikKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWFjaV9jaGFuX3dhaXRfcmVhZHkoc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogCXUzMiB2YWw7CiAJaW50IHRpbWVvdXQgPSA1MDAwOwogCiAJZG8gewogCQl2YWwgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9TUik7Ci0JfSB3aGlsZSAodmFsICYgKFNSX1RYQnxTUl9SWEIpICYmIHRpbWVvdXQtLSk7CisJfSB3aGlsZSAodmFsICYgbWFzayAmJiB0aW1lb3V0LS0pOwogfQogCiAKQEAgLTIwOCw4ICsyMDksMTAgQEAKIAkJCXdyaXRlbCgwLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJcHRyID0gYWFjaXJ1bi0+cHRyOwogCisJCXNwaW5fbG9jaygmYWFjaXJ1bi0+bG9jayk7CisKKwkJcHRyID0gYWFjaXJ1bi0+cHRyOwogCQlkbyB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuID0gYWFjaXJ1bi0+Zmlmb3N6OwogCQkJdTMyIHZhbDsKQEAgLTIxNyw5ICsyMjAsOSBAQAogCQkJaWYgKGFhY2lydW4tPmJ5dGVzIDw9IDApIHsKIAkJCQlhYWNpcnVuLT5ieXRlcyArPSBhYWNpcnVuLT5wZXJpb2Q7CiAJCQkJYWFjaXJ1bi0+cHRyID0gcHRyOwotCQkJCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChhYWNpcnVuLT5zdWJzdHJlYW0pOwotCQkJCXNwaW5fbG9jaygmYWFjaS0+bG9jayk7CisJCQkJc3Bpbl9sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAkJCX0KIAkJCWlmICghKGFhY2lydW4tPmNyICYgQ1JfRU4pKQogCQkJCWJyZWFrOwpAQCAtMjQ1LDcgKzI0OCwxMCBAQAogCQkJCQlwdHIgPSBhYWNpcnVuLT5zdGFydDsKIAkJCX0KIAkJfSB3aGlsZSgxKTsKKwogCQlhYWNpcnVuLT5wdHIgPSBwdHI7CisKKwkJc3Bpbl91bmxvY2soJmFhY2lydW4tPmxvY2spOwogCX0KIAogCWlmIChtYXNrICYgSVNSX1VSSU5UUikgewpAQCAtMjYzLDYgKzI2OSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAorCQlzcGluX2xvY2soJmFhY2lydW4tPmxvY2spOworCiAJCXB0ciA9IGFhY2lydW4tPnB0cjsKIAkJZG8gewogCQkJdW5zaWduZWQgaW50IGxlbiA9IGFhY2lydW4tPmZpZm9zejsKQEAgLTI3MSw5ICsyNzksOSBAQAogCQkJaWYgKGFhY2lydW4tPmJ5dGVzIDw9IDApIHsKIAkJCQlhYWNpcnVuLT5ieXRlcyArPSBhYWNpcnVuLT5wZXJpb2Q7CiAJCQkJYWFjaXJ1bi0+cHRyID0gcHRyOwotCQkJCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChhYWNpcnVuLT5zdWJzdHJlYW0pOwotCQkJCXNwaW5fbG9jaygmYWFjaS0+bG9jayk7CisJCQkJc3Bpbl9sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAkJCX0KIAkJCWlmICghKGFhY2lydW4tPmNyICYgQ1JfRU4pKQogCQkJCWJyZWFrOwpAQCAtMzAxLDYgKzMwOSw4IEBACiAJCX0gd2hpbGUgKDEpOwogCiAJCWFhY2lydW4tPnB0ciA9IHB0cjsKKworCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJfQogfQogCkBAIC0zMTAsNyArMzIwLDYgQEAKIAl1MzIgbWFzazsKIAlpbnQgaTsKIAotCXNwaW5fbG9jaygmYWFjaS0+bG9jayk7CiAJbWFzayA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX0FMTElOVFMpOwogCWlmIChtYXNrKSB7CiAJCXUzMiBtID0gbWFzazsKQEAgLTMyMCw3ICszMjksNiBAQAogCQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKIAogCXJldHVybiBtYXNrID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKIH0KQEAgLTMzMCw2MyArMzM4LDYgQEAKIC8qCiAgKiBBTFNBIHN1cHBvcnQuCiAgKi8KLQotc3RydWN0IGFhY2lfc3RyZWFtIHsKLQl1bnNpZ25lZCBjaGFyIGNvZGVjX2lkeDsKLQl1bnNpZ25lZCBjaGFyIHJhdGVfaWR4OwotfTsKLQotc3RhdGljIHN0cnVjdCBhYWNpX3N0cmVhbSBhYWNpX3N0cmVhbXNbXSA9IHsKLQlbQUNTVFJFQU1fRlJPTlRdID0gewotCQkuY29kZWNfaWR4CT0gMCwKLQkJLnJhdGVfaWR4CT0gQUM5N19SQVRFU19GUk9OVF9EQUMsCi0JfSwKLQlbQUNTVFJFQU1fU1VSUk9VTkRdID0gewotCQkuY29kZWNfaWR4CT0gMCwKLQkJLnJhdGVfaWR4CT0gQUM5N19SQVRFU19TVVJSX0RBQywKLQl9LAotCVtBQ1NUUkVBTV9MRkVdID0gewotCQkuY29kZWNfaWR4CT0gMCwKLQkJLnJhdGVfaWR4CT0gQUM5N19SQVRFU19MRkVfREFDLAotCX0sCi19OwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhYWNpX3JhdGVfbWFzayhzdHJ1Y3QgYWFjaSAqYWFjaSwgaW50IHN0cmVhbWlkKQotewotCXN0cnVjdCBhYWNpX3N0cmVhbSAqcyA9IGFhY2lfc3RyZWFtcyArIHN0cmVhbWlkOwotCXJldHVybiBhYWNpLT5hYzk3X2J1cy0+Y29kZWNbcy0+Y29kZWNfaWR4XS0+cmF0ZXNbcy0+cmF0ZV9pZHhdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJhdGVfbGlzdFtdID0gewotCTU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLCA0NDEwMCwKLQk0ODAwMCwgNjQwMDAsIDg4MjAwLCA5NjAwMCwgMTc2NDAwLCAxOTIwMDAKLX07Ci0KLS8qCi0gKiBEb3VibGUtcmF0ZSBydWxlOiB3ZSBjYW4gc3VwcG9ydCBkb3VibGUgcmF0ZSBpZmYgY2hhbm5lbHMgPT0gMgotICogICh1bmltcGxlbWVudGVkKQotICovCi1zdGF0aWMgaW50Ci1hYWNpX3J1bGVfcmF0ZV9ieV9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnAsIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCi17Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBydWxlLT5wcml2YXRlOwotCXVuc2lnbmVkIGludCByYXRlX21hc2sgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzU1MTI7Ci0Jc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7Ci0KLQlzd2l0Y2ggKGMtPm1heCkgewotCWNhc2UgNjoKLQkJcmF0ZV9tYXNrICY9IGFhY2lfcmF0ZV9tYXNrKGFhY2ksIEFDU1RSRUFNX0xGRSk7Ci0JY2FzZSA0OgotCQlyYXRlX21hc2sgJj0gYWFjaV9yYXRlX21hc2soYWFjaSwgQUNTVFJFQU1fU1VSUk9VTkQpOwotCWNhc2UgMjoKLQkJcmF0ZV9tYXNrICY9IGFhY2lfcmF0ZV9tYXNrKGFhY2ksIEFDU1RSRUFNX0ZST05UKTsKLQl9Ci0KLQlyZXR1cm4gc25kX2ludGVydmFsX2xpc3QoaHdfcGFyYW1faW50ZXJ2YWwocCwgcnVsZS0+dmFyKSwKLQkJCQkgQVJSQVlfU0laRShyYXRlX2xpc3QpLCByYXRlX2xpc3QsCi0JCQkJIHJhdGVfbWFzayk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhYWNpX2h3X2luZm8gPSB7CiAJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX01NQVAgfAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CkBAIC00MDAsMTAgKzM1MSw3IEBACiAJICovCiAJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAKLQkvKiBzaG91bGQgdGhpcyBiZSBjb250aW51b3VzIG9yIGtub3Q/ICovCi0JLnJhdGVzCQkJPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkucmF0ZV9taW4JCT0gNDAwMCwKKwkvKiByYXRlcyBhcmUgc2V0dXAgZnJvbSB0aGUgQUMnOTcgY29kZWMgKi8KIAkuY2hhbm5lbHNfbWluCQk9IDIsCiAJLmNoYW5uZWxzX21heAkJPSA2LAogCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiAxMDI0LApAQCAtNDIzLDYgKzM3MSwxMiBAQAogCWFhY2lydW4tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhYWNpcnVuOwogCXJ1bnRpbWUtPmh3ID0gYWFjaV9od19pbmZvOworCXJ1bnRpbWUtPmh3LnJhdGVzID0gYWFjaXJ1bi0+cGNtLT5yYXRlczsKKwlzbmRfcGNtX2xpbWl0X2h3X3JhdGVzKHJ1bnRpbWUpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKKwkgICAgYWFjaXJ1bi0+cGNtLT5yWzFdLnNsb3RzKQorCQlzbmRfYWM5N19wY21fZG91YmxlX3JhdGVfcnVsZXMocnVudGltZSk7CiAKIAkvKgogCSAqIEZJWE1FOiBBTFNBIHNwZWNpZmllcyBmaWZvX3NpemUgaW4gYnl0ZXMuICBJZiB3ZSdyZSBpbiBub3JtYWwKQEAgLTQzMywxNyArMzg3LDYgQEAKIAkgKi8KIAlydW50aW1lLT5ody5maWZvX3NpemUgPSBhYWNpLT5maWZvc2l6ZSAqIDI7CiAKLQkvKgotCSAqIEFkZCBydWxlIGRlc2NyaWJpbmcgaGFyZHdhcmUgcmF0ZSBkZXBlbmRlbmN5Ci0JICogb24gdGhlIG51bWJlciBvZiBjaGFubmVscy4KLQkgKi8KLQlyZXQgPSBzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAotCQkJCSAgYWFjaV9ydWxlX3JhdGVfYnlfY2hhbm5lbHMsIGFhY2ksCi0JCQkJICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCi0JCQkJICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCiAJcmV0ID0gcmVxdWVzdF9pcnEoYWFjaS0+ZGV2LT5pcnFbMF0sIGFhY2lfaXJxLCBJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVELAogCQkJICBEUklWRVJfTkFNRSwgYWFjaSk7CiAJaWYgKHJldCkKQEAgLTUwNywxOCArNDUwLDIyIEBACiAKIAllcnIgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAogCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKKwlpZiAoZXJyID49IDApIHsKKwkJdW5zaWduZWQgaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCQlpbnQgZGJsID0gcmF0ZSA+IDQ4MDAwOwogCi0JZXJyID0gc25kX2FjOTdfcGNtX29wZW4oYWFjaXJ1bi0+cGNtLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAotCQkJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpLAotCQkJCWFhY2lydW4tPnBjbS0+clswXS5zbG90cyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJCWVyciA9IHNuZF9hYzk3X3BjbV9vcGVuKGFhY2lydW4tPnBjbSwgcmF0ZSwKKwkJCQkJcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyksCisJCQkJCWFhY2lydW4tPnBjbS0+cltkYmxdLnNsb3RzKTsKIAotCWFhY2lydW4tPnBjbV9vcGVuID0gMTsKKwkJYWFjaXJ1bi0+cGNtX29wZW4gPSBlcnIgPT0gMDsKKwkJYWFjaXJ1bi0+Y3IgPSBDUl9GRU4gfCBDUl9DT01QQUNUIHwgQ1JfU1oxNjsKKwkJYWFjaXJ1bi0+Zmlmb3N6ID0gYWFjaS0+Zmlmb3NpemUgKiA0OwogCi0gb3V0OgorCQlpZiAoYWFjaXJ1bi0+Y3IgJiBDUl9DT01QQUNUKQorCQkJYWFjaXJ1bi0+Zmlmb3N6ID4+PSAxOworCX0KKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTUyNyw3ICs0NzQsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCWFhY2lydW4tPnN0YXJ0CT0gKHZvaWQgKilydW50aW1lLT5kbWFfYXJlYTsKKwlhYWNpcnVuLT5zdGFydAk9IHJ1bnRpbWUtPmRtYV9hcmVhOwogCWFhY2lydW4tPmVuZAk9IGFhY2lydW4tPnN0YXJ0ICsgc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CiAJYWFjaXJ1bi0+cHRyCT0gYWFjaXJ1bi0+c3RhcnQ7CiAJYWFjaXJ1bi0+cGVyaW9kCT0KQEAgLTYyNywxNCArNTc0LDkgQEAKIAkgKiBFbmFibGUgRklGTywgY29tcGFjdCBtb2RlLCAxNiBiaXRzIHBlciBzYW1wbGUuCiAJICogRklYTUU6IGRvdWJsZSByYXRlIHNsb3RzPwogCSAqLwotCWlmIChyZXQgPj0gMCkgewotCQlhYWNpcnVuLT5jciA9IENSX0ZFTiB8IENSX0NPTVBBQ1QgfCBDUl9TWjE2OworCWlmIChyZXQgPj0gMCkKIAkJYWFjaXJ1bi0+Y3IgfD0gY2hhbm5lbHNfdG9fdHhtYXNrW2NoYW5uZWxzXTsKIAotCQlhYWNpcnVuLT5maWZvc3oJPSBhYWNpLT5maWZvc2l6ZSAqIDQ7Ci0JCWlmIChhYWNpcnVuLT5jciAmIENSX0NPTVBBQ1QpCi0JCQlhYWNpcnVuLT5maWZvc3ogPj49IDE7Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY0Niw3ICs1ODgsNyBAQAogCWllICY9IH4oSUVfVVJJRXxJRV9UWElFKTsKIAl3cml0ZWwoaWUsIGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAlhYWNpcnVuLT5jciAmPSB+Q1JfRU47Ci0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfVFhCKTsKIAl3cml0ZWwoYWFjaXJ1bi0+Y3IsIGFhY2lydW4tPmJhc2UgKyBBQUNJX1RYQ1IpOwogfQogCkBAIC02NTQsNyArNTk2LDcgQEAKIHsKIAl1MzIgaWU7CiAKLQlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuKTsKKwlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuLCBTUl9UWEIpOwogCWFhY2lydW4tPmNyIHw9IENSX0VOOwogCiAJaWUgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CkBAIC02NjUsMTIgKzYwNywxMiBAQAogCiBzdGF0aWMgaW50IGFhY2lfcGNtX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAkJYWFjaV9wY21fcGxheWJhY2tfc3RhcnQoYWFjaXJ1bik7CkBAIC02OTcsNyArNjM5LDggQEAKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpcnVuLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzIxLDE4ICs2NjQsMTAgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gYWFjaV9wY21faHdfcGFyYW1zKHN1YnN0cmVhbSwgYWFjaXJ1biwgcGFyYW1zKTsKLQotCWlmIChyZXQgPj0gMCkgewotCQlhYWNpcnVuLT5jciA9IENSX0ZFTiB8IENSX0NPTVBBQ1QgfCBDUl9TWjE2OwotCisJaWYgKHJldCA+PSAwKQogCQkvKiBMaW5lIGluIHJlY29yZDogc2xvdCAzIGFuZCA0ICovCiAJCWFhY2lydW4tPmNyIHw9IENSX1NMMyB8IENSX1NMNDsKIAotCQlhYWNpcnVuLT5maWZvc3ogPSBhYWNpLT5maWZvc2l6ZSAqIDQ7Ci0KLQkJaWYgKGFhY2lydW4tPmNyICYgQ1JfQ09NUEFDVCkKLQkJCWFhY2lydW4tPmZpZm9zeiA+Pj0gMTsKLQl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzQwLDcgKzY3NSw3IEBACiB7CiAJdTMyIGllOwogCi0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfUlhCKTsKIAogCWllID0gcmVhZGwoYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOwogCWllICY9IH4oSUVfT1JJRSB8IElFX1JYSUUpOwpAQCAtNzU1LDcgKzY5MCw3IEBACiB7CiAJdTMyIGllOwogCi0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfUlhCKTsKIAogI2lmZGVmIERFQlVHCiAJLyogUlggVGltZW91dCB2YWx1ZTogYml0cyAyODoxNyBpbiBSWENSICovCkBAIC03NzIsMTIgKzcwNywxMSBAQAogCiBzdGF0aWMgaW50IGFhY2lfcGNtX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKIHsKLQlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2ktPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWFjaXJ1bi0+bG9jaywgZmxhZ3MpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtODA2LDcgKzc0MCw3IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWFjaS0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04ODksNiArODIzLDEyIEBACiAJCQkJCSAgKDEgPDwgQUM5N19TTE9UX1BDTV9TUklHSFQpIHwKIAkJCQkJICAoMSA8PCBBQzk3X1NMT1RfTEZFKSwKIAkJCX0sCisJCQlbMV0gPSB7CisJCQkJLnNsb3RzCT0gKDEgPDwgQUM5N19TTE9UX1BDTV9MRUZUKSB8CisJCQkJCSAgKDEgPDwgQUM5N19TTE9UX1BDTV9SSUdIVCkgfAorCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fTEVGVF8wKSB8CisJCQkJCSAgKDEgPDwgQUM5N19TTE9UX1BDTV9SSUdIVF8wKSwKKwkJCX0sCiAJCX0sCiAJfSwKIAlbMV0gPSB7CS8qIFBDTSBpbiAqLwpAQCAtMTAwMSw3ICs5NDEsNiBAQAogCiAJYWFjaSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAltdXRleF9pbml0KCZhYWNpLT5hYzk3X3NlbSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFhY2ktPmxvY2spOwogCWFhY2ktPmNhcmQgPSBjYXJkOwogCWFhY2ktPmRldiA9IGRldjsKIApAQCAtMTAyOCw3ICs5NjcsNyBAQAogCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmYWFjaV9wbGF5YmFja19vcHMpOwogCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZhYWNpX2NhcHR1cmVfb3BzKTsKIAkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLQkJCQkJCSAgICAgIE5VTEwsIDAsIDY0ICogMTA0KTsKKwkJCQkJCSAgICAgIE5VTEwsIDAsIDY0ICogMTAyNCk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTEwODgsMTIgKzEwMjcsMTQgQEAKIAkvKgogCSAqIFBsYXliYWNrIHVzZXMgQUFDSSBjaGFubmVsIDAKIAkgKi8KKwlzcGluX2xvY2tfaW5pdCgmYWFjaS0+cGxheWJhY2subG9jayk7CiAJYWFjaS0+cGxheWJhY2suYmFzZSA9IGFhY2ktPmJhc2UgKyBBQUNJX0NTQ0gxOwogCWFhY2ktPnBsYXliYWNrLmZpZm8gPSBhYWNpLT5iYXNlICsgQUFDSV9EUjE7CiAKIAkvKgogCSAqIENhcHR1cmUgdXNlcyBBQUNJIGNoYW5uZWwgMAogCSAqLworCXNwaW5fbG9ja19pbml0KCZhYWNpLT5jYXB0dXJlLmxvY2spOwogCWFhY2ktPmNhcHR1cmUuYmFzZSA9IGFhY2ktPmJhc2UgKyBBQUNJX0NTQ0gxOwogCWFhY2ktPmNhcHR1cmUuZmlmbyA9IGFhY2ktPmJhc2UgKyBBQUNJX0RSMTsKIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuaCBiL3NvdW5kL2FybS9hYWNpLmgKaW5kZXggOTI0ZjY5Yy4uNmE0YTJlZSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuaAorKysgYi9zb3VuZC9hcm0vYWFjaS5oCkBAIC0yMDIsNiArMjAyLDcgQEAKIHN0cnVjdCBhYWNpX3J1bnRpbWUgewogCXZvaWQJCQlfX2lvbWVtICpiYXNlOwogCXZvaWQJCQlfX2lvbWVtICpmaWZvOworCXNwaW5sb2NrX3QJCWxvY2s7CiAKIAlzdHJ1Y3QgYWM5N19wY20JCSpwY207CiAJaW50CQkJcGNtX29wZW47CkBAIC0yMzIsNyArMjMzLDYgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcJCSphYzk3OwogCiAJdTMyCQkJbWFpbmNyOwotCXNwaW5sb2NrX3QJCWxvY2s7CiAKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lCXBsYXliYWNrOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUJY2FwdHVyZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggYjRiNDhhZi4uNWQ5NDExOCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGEyeHhfYWM5N19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcHhhMnh4X2FjOTdfcG1fb3BzID0gewogCS5zdXNwZW5kCT0gcHhhMnh4X2FjOTdfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF9hYzk3X3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL0tjb25maWcgYi9zb3VuZC9jb3JlL0tjb25maWcKaW5kZXggYzE1NjgyYS4uNDc1NDU1YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKyBiL3NvdW5kL2NvcmUvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIGNvbmZpZyBTTkRfUENNCiAJdHJpc3RhdGUKIAlzZWxlY3QgU05EX1RJTUVSCisJc2VsZWN0IEdDRAogCiBjb25maWcgU05EX0hXREVQCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHJ0aW1lci5jIGIvc291bmQvY29yZS9ocnRpbWVyLmMKaW5kZXggMzRjN2Q0OC4uN2Y0ZDc0NCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9ocnRpbWVyLmMKKysrIGIvc291bmQvY29yZS9ocnRpbWVyLmMKQEAgLTM3LDE0ICszNywyMiBAQAogc3RydWN0IHNuZF9ocnRpbWVyIHsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKIAlzdHJ1Y3QgaHJ0aW1lciBocnQ7CisJYXRvbWljX3QgcnVubmluZzsKIH07CiAKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBzbmRfaHJ0aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqaHJ0KQogewogCXN0cnVjdCBzbmRfaHJ0aW1lciAqc3RpbWUgPSBjb250YWluZXJfb2YoaHJ0LCBzdHJ1Y3Qgc25kX2hydGltZXIsIGhydCk7CiAJc3RydWN0IHNuZF90aW1lciAqdCA9IHN0aW1lLT50aW1lcjsKKworCWlmICghYXRvbWljX3JlYWQoJnN0aW1lLT5ydW5uaW5nKSkKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCiAJaHJ0aW1lcl9mb3J3YXJkX25vdyhocnQsIG5zX3RvX2t0aW1lKHQtPnN0aWNrcyAqIHJlc29sdXRpb24pKTsKIAlzbmRfdGltZXJfaW50ZXJydXB0KHN0aW1lLT50aW1lciwgdC0+c3RpY2tzKTsKKworCWlmICghYXRvbWljX3JlYWQoJnN0aW1lLT5ydW5uaW5nKSkKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CiB9CiAKQEAgLTU4LDYgKzY2LDcgQEAKIAlocnRpbWVyX2luaXQoJnN0aW1lLT5ocnQsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJc3RpbWUtPnRpbWVyID0gdDsKIAlzdGltZS0+aHJ0LmZ1bmN0aW9uID0gc25kX2hydGltZXJfY2FsbGJhY2s7CisJYXRvbWljX3NldCgmc3RpbWUtPnJ1bm5pbmcsIDApOwogCXQtPnByaXZhdGVfZGF0YSA9IHN0aW1lOwogCXJldHVybiAwOwogfQpAQCAtNzgsMTYgKzg3LDE4IEBACiB7CiAJc3RydWN0IHNuZF9ocnRpbWVyICpzdGltZSA9IHQtPnByaXZhdGVfZGF0YTsKIAorCWF0b21pY19zZXQoJnN0aW1lLT5ydW5uaW5nLCAwKTsKKwlocnRpbWVyX2NhbmNlbCgmc3RpbWUtPmhydCk7CiAJaHJ0aW1lcl9zdGFydCgmc3RpbWUtPmhydCwgbnNfdG9fa3RpbWUodC0+c3RpY2tzICogcmVzb2x1dGlvbiksCiAJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOworCWF0b21pY19zZXQoJnN0aW1lLT5ydW5uaW5nLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfaHJ0aW1lcl9zdG9wKHN0cnVjdCBzbmRfdGltZXIgKnQpCiB7CiAJc3RydWN0IHNuZF9ocnRpbWVyICpzdGltZSA9IHQtPnByaXZhdGVfZGF0YTsKLQotCWhydGltZXJfY2FuY2VsKCZzdGltZS0+aHJ0KTsKKwlhdG9taWNfc2V0KCZzdGltZS0+cnVubmluZywgMCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggMzBmNDEwOC4uYTI3NTQ1YjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC03NTgsNyArNzU4LDcgQEAKIAkJaW50IGRpZmY7CiAJCWlmIChxID09IDApCiAJCQlxID0gMTsKLQkJZGVuID0gZGl2X2Rvd24obnVtLCBxKTsKKwkJZGVuID0gZGl2X3VwKG51bSwgcSk7CiAJCWlmIChkZW4gPCByYXRzW2tdLmRlbl9taW4pCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbiA+IHJhdHNba10uZGVuX21heCkKQEAgLTc5NCw3ICs3OTQsNyBAQAogCQkJaS0+ZW1wdHkgPSAxOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZGVuID0gZGl2X3VwKG51bSwgcSk7CisJCWRlbiA9IGRpdl9kb3duKG51bSwgcSk7CiAJCWlmIChkZW4gPiByYXRzW2tdLmRlbl9tYXgpCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbiA8IHJhdHNba10uZGVuX21pbikKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCmluZGV4IGNhODA2OGIuLmIwMWQ5NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKKysrIGIvc291bmQvY29yZS9wY21fdGltZXIuYwpAQCAtMjAsNiArMjAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZ2NkLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3RpbWVyLmg+CkBAIC0yOCwyMiArMjksNiBAQAogICogIFRpbWVyIGZ1bmN0aW9ucwogICovCiAKLS8qIEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnY2QodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCi17Ci0JdW5zaWduZWQgbG9uZyByOwotCWlmIChhIDwgYikgewotCQlyID0gYTsKLQkJYSA9IGI7Ci0JCWIgPSByOwotCX0KLQl3aGlsZSAoKHIgPSBhICUgYikgIT0gMCkgewotCQlhID0gYjsKLQkJYiA9IHI7Ci0JfQotCXJldHVybiBiOwotfQotCiB2b2lkIHNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJdW5zaWduZWQgbG9uZyByYXRlLCBtdWx0LCBmc2l6ZSwgbCwgcG9zdDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX21lbS5jIGIvc291bmQvaXNhL2d1cy9ndXNfbWVtLmMKaW5kZXggNjYxMjA1Yy4uYWY4ODhhMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfbWVtLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfbWVtLmMKQEAgLTEyNyw3ICsxMjcsOCBAQAogCSAgICAhc2hhcmVfaWRbMl0gJiYgIXNoYXJlX2lkWzNdKQogCQlyZXR1cm4gTlVMTDsKIAlmb3IgKGJsb2NrID0gYWxsb2MtPmZpcnN0OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCkKLQkJaWYgKCFtZW1jbXAoc2hhcmVfaWQsIGJsb2NrLT5zaGFyZV9pZCwgc2l6ZW9mKHNoYXJlX2lkKSkpCisJCWlmICghbWVtY21wKHNoYXJlX2lkLCBibG9jay0+c2hhcmVfaWQsCisJCQkJc2l6ZW9mKGJsb2NrLT5zaGFyZV9pZCkpKQogCQkJcmV0dXJuIGJsb2NrOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwppbmRleCBjYjlhYTRjLi40YmU1NjJiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYworKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJZXJyID0gc25kX3Jhd21pZGlfbmV3KGNhcmQsICJNU05ELU1JREkiLCBkZXZpY2UsIDEsIDEsICZybWlkaSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JbXB1ID0ga2NhbGxvYygxLCBzaXplb2YoKm1wdSksIEdGUF9LRVJORUwpOworCW1wdSA9IGt6YWxsb2Moc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXB1ID09IE5VTEwpIHsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCAxMDZiZTZlLi5jOGE4ZGEwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTU0OCwxMCArNTQ4LDEzIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfb3B0aTkzeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBzbmRfd3NzICpjb2RlYyA9IGRldl9pZDsKLQlzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAgPSBjb2RlYy0+Y2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfb3B0aTl4eCAqY2hpcCA9IGRldl9pZDsKKwlzdHJ1Y3Qgc25kX3dzcyAqY29kZWMgPSBjaGlwLT5jb2RlYzsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAorCWlmICghY29kZWMpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwogCXN0YXR1cyA9IHNuZF9vcHRpOXh4X3JlYWQoY2hpcCwgT1BUaTlYWF9NQ19SRUcoMTEpKTsKIAlpZiAoKHN0YXR1cyAmIE9QVGk5M1hfSVJRX1BMQVlCQUNLKSAmJiBjb2RlYy0+cGxheWJhY2tfc3Vic3RyZWFtKQogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNvZGVjLT5wbGF5YmFja19zdWJzdHJlYW0pOwpAQCAtNjkxLDEwICs2OTQsOSBAQAogCiAJaWYgKGNoaXApIHsKICNpZmRlZiBPUFRpOTNYCi0JCXN0cnVjdCBzbmRfd3NzICpjb2RlYyA9IGNoaXAtPmNvZGVjOwotCQlpZiAoY29kZWMgJiYgY29kZWMtPmlycSA+IDApIHsKLQkJCWRpc2FibGVfaXJxKGNvZGVjLT5pcnEpOwotCQkJZnJlZV9pcnEoY29kZWMtPmlycSwgY29kZWMpOworCQlpZiAoY2hpcC0+aXJxID4gMCkgeworCQkJZGlzYWJsZV9pcnEoY2hpcC0+aXJxKTsKKwkJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAJCX0KIAkJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfbWNfaW5kaXIpOwogI2VuZGlmCkBAIC03NTksOSArNzYxLDkgQEAKICNlbmRpZgogI2lmZGVmIE9QVGk5M1gKIAllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgc25kX29wdGk5M3hfaW50ZXJydXB0LAotCQkJICAgIElSUUZfRElTQUJMRUQsIERFVl9OQU1FIiAtIFdTUyIsIGNvZGVjKTsKKwkJCSAgICBJUlFGX0RJU0FCTEVELCBERVZfTkFNRSIgLSBXU1MiLCBjaGlwKTsKIAlpZiAoZXJyb3IgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm9wdGk5eHg6IGNhbid0IGdyYWIgSVJRICVkXG4iLCBjaGlwLT5pcnEpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJvcHRpOXh4OiBjYW4ndCBncmFiIElSUSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VtdTgwMDAuYyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKaW5kZXggOTY2NzhkNS4uNzUxNzYyZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDAuYworKysgYi9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCkBAIC0zOTMsOCArMzkzLDYgQEAKIAogCXdoaWxlIChzaXplIDwgRU1VODAwMF9NQVhfRFJBTSkgewogCi0JCXNpemUgKz0gNTEyICogMTAyNDsgIC8qIGluY3JlbWVudCA1MTJrYnl0ZXMgKi8KLQogCQkvKiBXcml0ZSBhIHVuaXF1ZSBkYXRhIG9uIHRoZSB0ZXN0IGFkZHJlc3MuCiAJCSAqIGlmIHRoZSBhZGRyZXNzIGlzIG91dCBvZiByYW5nZSwgdGhlIGRhdGEgaXMgd3JpdHRlbiBvbgogCQkgKiAweDIwMDAwMCg9RU1VODAwMF9EUkFNX09GRlNFVCkuICBUaGVuIHRoZSBpZCB3b3JkIGlzCkBAIC00MTQsNyArNDEyLDkgQEAKIAkJLypzbmRfZW11ODAwMF9yZWFkX3dhaXQoZW11KTsqLwogCQlFTVU4MDAwX1NNTERfUkVBRChlbXUpOyAvKiBkaXNjYXJkIHN0YWxlIGRhdGEgICovCiAJCWlmIChFTVU4MDAwX1NNTERfUkVBRChlbXUpICE9IFVOSVFVRV9JRDIpCi0JCQlicmVhazsgLyogd2UgbXVzdCBoYXZlIHdyYXBwZWQgYXJvdW5kICovCisJCQlicmVhazsgLyogbm8gbWVtb3J5IGF0IHRoaXMgYWRkcmVzcyAqLworCisJCXNpemUgKz0gNTEyICogMTAyNDsgIC8qIGluY3JlbWVudCA1MTJrYnl0ZXMgKi8KIAogCQlzbmRfZW11ODAwMF9yZWFkX3dhaXQoZW11KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCA4NjkxZjRjLi5mMWQ5ZDE2IDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAJLyogYWxsb2MgdmlydHVhbCAnZG1hJyBhcmVhICovCiAJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKQogCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKHNpemUpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwogCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IDgzZjVlZTIuLmUxOWRkNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgICBpLCBsaW1pdCA9IGppZmZpZXMgKyBIWi8xMDsKIAogCW91dHcoMHgyMDAwLCBSRUcoUFNTX0NPTlRST0wpKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgKGxpbWl0LWppZmZpZXMgPj0gMCk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJaW53KFJFRyhQU1NfQ09OVFJPTCkpOwogCW91dHcoMHgwMDAwLCBSRUcoUFNTX0NPTlRST0wpKTsKIAlyZXR1cm4gMTsKQEAgLTM2OSwxMSArMzY5LDExIEBACiAJCW91dHcoMCwgUkVHKFBTU19EQVRBKSk7CiAKIAkJbGltaXQgPSBqaWZmaWVzICsgSFovMTA7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiAobGltaXQgLSBqaWZmaWVzID49IDApOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiB0aW1lX2FmdGVyX2VxKGxpbWl0LCBqaWZmaWVzKTsgaSsrKQogCQkJdmFsID0gaW53KFJFRyhQU1NfU1RBVFVTKSk7CiAKIAkJbGltaXQgPSBqaWZmaWVzICsgSFovMTA7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiAobGltaXQtamlmZmllcyA+PSAwKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJewogCQkJdmFsID0gaW53KFJFRyhQU1NfU1RBVFVTKSk7CiAJCQlpZiAodmFsICYgMHg0MDAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IDIwY2I2MGEuLmMxMTkyMDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTIxMjIsNyArMjEyMiw3IEBACiAJCX0KIAkJLyogbm90aGluZyBzaG91bGQgYmUgaW4gcG93ZXJkb3duIG1vZGUgKi8KIAkJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDApOwotCQllbmRfdGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyMCk7CisJCWVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7CiAJCWRvIHsKIAkJCWlmICgoc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X1BPV0VSRE9XTikgJiAweDBmKSA9PSAweDBmKQogCQkJCWdvdG8gX19yZWFkeV9vazsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9NYWtlZmlsZSBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9NYWtlZmlsZQppbmRleCBmZGE3YTk0Li5jY2M2NDIyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL01ha2VmaWxlCkBAIC00LDkgKzQsNyBAQAogCiBzbmQtY3M1NTM1YXVkaW8teSA6PSBjczU1MzVhdWRpby5vIGNzNTUzNWF1ZGlvX3BjbS5vCiBzbmQtY3M1NTM1YXVkaW8tJChDT05GSUdfUE0pICs9IGNzNTUzNWF1ZGlvX3BtLm8KLWlmZGVmIENPTkZJR19NR0VPREVfTFgKIHNuZC1jczU1MzVhdWRpby0kKENPTkZJR19PTFBDKSArPSBjczU1MzVhdWRpb19vbHBjLm8KLWVuZGlmCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKIG9iai0kKENPTkZJR19TTkRfQ1M1NTM1QVVESU8pICs9IHNuZC1jczU1MzVhdWRpby5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCmluZGV4IDA1ZjU2ZTAuLjkxZTdmYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCisrKyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCkBAIC0zODksNiArMzg5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9jczU1MzVhdWRpb19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKKwlvbHBjX3F1aXJrc19jbGVhbnVwKCk7CiAJc25kX2NhcmRfZnJlZShwY2lfZ2V0X2RydmRhdGEocGNpKSk7CiAJcGNpX3NldF9kcnZkYXRhKHBjaSwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uaCBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5oCmluZGV4IDdhMjk4YWMuLjUxOTY2ZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5oCisrKyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5oCkBAIC05OSwxMCArOTksMTEgQEAKIGludCBzbmRfY3M1NTM1YXVkaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19PTFBDKSAmJiBkZWZpbmVkKENPTkZJR19NR0VPREVfTFgpCisjaWZkZWYgQ09ORklHX09MUEMKIHZvaWQgX19kZXZpbml0IG9scGNfcHJlcXVpcmtzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKIAkJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlICphYzk3KTsKIGludCBfX2RldmluaXQgb2xwY19xdWlya3Moc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOwordm9pZCBfX2RldmV4aXQgb2xwY19xdWlya3NfY2xlYW51cCh2b2lkKTsKIHZvaWQgb2xwY19hbmFsb2dfaW5wdXQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCBpbnQgb24pOwogdm9pZCBvbHBjX21pY19iaWFzKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgaW50IG9uKTsKIApAQCAtMTI4LDYgKzEyOSw3IEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgb2xwY19xdWlya3NfY2xlYW51cCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvbHBjX2FuYWxvZ19pbnB1dChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIGludCBvbikgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgb2xwY19taWNfYmlhcyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIGludCBvbikgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgb2xwY19jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9hYzk3ICphYzk3KSB7IH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpb19vbHBjLmMgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW9fb2xwYy5jCmluZGV4IDVjNjgxNDMuLjUwZGE0OWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpb19vbHBjLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvX29scGMuYwpAQCAtMTMsMTAgKzEzLDEzIEBACiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL29scGMuaD4KICNpbmNsdWRlICJjczU1MzVhdWRpby5oIgogCisjZGVmaW5lIERSVl9OQU1FICJjczU1MzVhdWRpby1vbHBjIgorCiAvKgogICogT0xQQyBoYXMgYW4gYWRkaXRpb25hbCBmZWF0dXJlIG9uIHRvcCBvZiB0aGUgcmVndWxhciBBRDE4ODggY29kZWMgZmVhdHVyZXMuCiAgKiBJdCBoYXMgYW4gQW5hbG9nIElucHV0IG1vZGUgdGhhdCBpcyBzd2l0Y2hlZCBpbnRvIChhZnRlciBkaXNhYmxpbmcgdGhlCkBAIC0zOCwxMCArNDEsNyBAQAogCX0KIAogCS8qIHNldCBBbmFsb2cgSW5wdXQgdGhyb3VnaCBHUElPICovCi0JaWYgKG9uKQotCQlnZW9kZV9ncGlvX3NldChPTFBDX0dQSU9fTUlDX0FDLCBHUElPX09VVFBVVF9WQUwpOwotCWVsc2UKLQkJZ2VvZGVfZ3Bpb19jbGVhcihPTFBDX0dQSU9fTUlDX0FDLCBHUElPX09VVFBVVF9WQUwpOworCWdwaW9fc2V0X3ZhbHVlKE9MUENfR1BJT19NSUNfQUMsIG9uKTsKIH0KIAogLyoKQEAgLTczLDggKzczLDcgQEAKIAogc3RhdGljIGludCBvbHBjX2RjX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2KQogewotCXYtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBnZW9kZV9ncGlvX2lzc2V0KE9MUENfR1BJT19NSUNfQUMsCi0JCQlHUElPX09VVFBVVF9WQUwpOworCXYtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBncGlvX2dldF92YWx1ZShPTFBDX0dQSU9fTUlDX0FDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzLDYgKzE1MiwxMiBAQAogCWlmICghbWFjaGluZV9pc19vbHBjKCkpCiAJCXJldHVybiAwOwogCisJaWYgKGdwaW9fcmVxdWVzdChPTFBDX0dQSU9fTUlDX0FDLCBEUlZfTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IHVuYWJsZSB0byBhbGxvY2F0ZSBNSUMgR1BJT1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT0xQQ19HUElPX01JQ19BQywgMCk7CisKIAkvKiBkcm9wIHRoZSBvcmlnaW5hbCBBRDE4ODggSFBGIGNvbnRyb2wgKi8KIAltZW1zZXQoJmVsZW0sIDAsIHNpemVvZihlbGVtKSk7CiAJZWxlbS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSOwpAQCAtMTY5LDExICsxNzQsMTggQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbHBjX2NzNTUzNWF1ZGlvX2N0bHMpOyBpKyspIHsKIAkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZvbHBjX2NzNTUzNWF1ZGlvX2N0bHNbaV0sCiAJCQkJYWM5Ny0+cHJpdmF0ZV9kYXRhKSk7Ci0JCWlmIChlcnIgPCAwKQorCQlpZiAoZXJyIDwgMCkgeworCQkJZ3Bpb19mcmVlKE9MUENfR1BJT19NSUNfQUMpOwogCQkJcmV0dXJuIGVycjsKKwkJfQogCX0KIAogCS8qIHR1cm4gb2ZmIHRoZSBtaWMgYnkgZGVmYXVsdCAqLwogCW9scGNfbWljX2JpYXMoYWM5NywgMCk7CiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgX19kZXZleGl0IG9scGNfcXVpcmtzX2NsZWFudXAodm9pZCkKK3sKKwlncGlvX2ZyZWUoT0xQQ19HUElPX01JQ19BQyk7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCA5Y2ZkYjc3Li45NTBlZTVjZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0xMDg2LDExICsxMDg2LDYgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KLQkvKiBhdWRpbyBjb2RlYyBzaG91bGQgb3ZlcnJpZGUgdGhlIG1peGVyIG5hbWUgKi8KLQlpZiAoY29kZWMtPmFmZyB8fCAhKmNvZGVjLT5idXMtPmNhcmQtPm1peGVybmFtZSkKLQkJc25wcmludGYoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAotCQkJIHNpemVvZihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpLAotCQkJICIlcyAlcyIsIGNvZGVjLT52ZW5kb3JfbmFtZSwgY29kZWMtPmNoaXBfbmFtZSk7CiAKIAlpZiAoaXNfZ2VuZXJpY19jb25maWcoY29kZWMpKSB7CiAJCWVyciA9IHNuZF9oZGFfcGFyc2VfZ2VuZXJpY19jb2RlYyhjb2RlYyk7CkBAIC0xMTA5LDYgKzExMDQsMTEgQEAKICBwYXRjaGVkOgogCWlmICghZXJyICYmIGNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQpCiAJCWVyciA9IGluaXRfdW5zb2xfcXVldWUoY29kZWMtPmJ1cyk7CisJLyogYXVkaW8gY29kZWMgc2hvdWxkIG92ZXJyaWRlIHRoZSBtaXhlciBuYW1lICovCisJaWYgKCFlcnIgJiYgKGNvZGVjLT5hZmcgfHwgISpjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpKQorCQlzbnByaW50Zihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUsCisJCQkgc2l6ZW9mKGNvZGVjLT5idXMtPmNhcmQtPm1peGVybmFtZSksCisJCQkgIiVzICVzIiwgY29kZWMtPnZlbmRvcl9uYW1lLCBjb2RlYy0+Y2hpcF9uYW1lKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19jb25maWd1cmUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggMmQ2Mjc2MS4uMWQ1NDFiNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC0yNTUsOSArMjU1LDEzIEBACiAgKiAgICAgICBpbiBIRC1hdWRpbyBzcGVjaWZpY2F0aW9uCiAgKi8KICNkZWZpbmUgQUNfUElOQ0FQX0hETUkJCQkoMTw8NykJLyogSERNSSBwaW4gKi8KKyNkZWZpbmUgQUNfUElOQ0FQX0RQCQkJKDE8PDI0KQkvKiBEaXNwbGF5UG9ydCBwaW4sIGNhbgorCQkJCQkJICogY29leGlzdCB3aXRoIEFDX1BJTkNBUF9IRE1JCisJCQkJCQkgKi8KICNkZWZpbmUgQUNfUElOQ0FQX1ZSRUYJCQkoMHgzNzw8OCkKICNkZWZpbmUgQUNfUElOQ0FQX1ZSRUZfU0hJRlQJCTgKICNkZWZpbmUgQUNfUElOQ0FQX0VBUEQJCQkoMTw8MTYpCS8qIEVBUEQgY2FwYWJsZSAqLworI2RlZmluZSBBQ19QSU5DQVBfSEJSCQkJKDE8PDI3KQkvKiBIaWdoIEJpdCBSYXRlICovCiAvKiBWcmVmIHN0YXR1cyAodXNlZCBpbiBwaW4gY2FwKSAqLwogI2RlZmluZSBBQ19QSU5DQVBfVlJFRl9ISVoJCSgxPDwwKQkvKiBIaS1aICovCiAjZGVmaW5lIEFDX1BJTkNBUF9WUkVGXzUwCQkoMTw8MSkJLyogNTAlICovCkBAIC02MzUsNiArNjM5LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmlyYl9lcnJvcjoxOwkvKiBlcnJvciBpbiBjb2RlYyBjb21tdW5pY2F0aW9uICovCiAJdW5zaWduZWQgaW50IHJlc3BvbnNlX3Jlc2V0OjE7CS8qIGNvbnRyb2xsZXIgd2FzIHJlc2V0ICovCiAJdW5zaWduZWQgaW50IGluX3Jlc2V0OjE7CS8qIGR1cmluZyByZXNldCBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgcG93ZXJfa2VlcF9saW5rX29uOjE7IC8qIGRvbid0IHBvd2VyIG9mZiBIREEgbGluayAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCmluZGV4IGQyNDMyODYuLjQwY2NiNDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKQEAgLTQyOCw4ICs0MjksNyBAQAogCWNoYXIgKmtleSwgKnZhbDsKIAlzdHJ1Y3QgaGRhX2hpbnQgKmhpbnQ7CiAKLQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKLQkJYnVmKys7CisJYnVmID0gc2tpcF9zcGFjZXMoYnVmKTsKIAlpZiAoISpidWYgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQogCQlyZXR1cm4gMDsKIAlpZiAoKmJ1ZiA9PSAnPScpCkBAIC00NDQsOCArNDQ0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCSp2YWwrKyA9IDA7Ci0Jd2hpbGUgKGlzc3BhY2UoKnZhbCkpCi0JCXZhbCsrOworCXZhbCA9IHNraXBfc3BhY2VzKHZhbCk7CiAJcmVtb3ZlX3RyYWlsX3NwYWNlcyhrZXkpOwogCXJlbW92ZV90cmFpbF9zcGFjZXModmFsKTsKIAloaW50ID0gZ2V0X2hpbnQoY29kZWMsIGtleSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBlZmNjNGY3Li5mZjhhZDQ2YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0yMDgyLDcgKzIwODIsOCBAQAogCX0KIAlpZiAocG93ZXJfb24pCiAJCWF6eF9pbml0X2NoaXAoY2hpcCk7Ci0JZWxzZSBpZiAoY2hpcC0+cnVubmluZyAmJiBwb3dlcl9zYXZlX2NvbnRyb2xsZXIpCisJZWxzZSBpZiAoY2hpcC0+cnVubmluZyAmJiBwb3dlcl9zYXZlX2NvbnRyb2xsZXIgJiYKKwkJICFidXMtPnBvd2VyX2tlZXBfbGlua19vbikKIAkJYXp4X3N0b3BfY2hpcChjaGlwKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFICovCkBAIC0yMzIxLDYgKzIzMjIsNyBAQAogICogd2hpdGUvYmxhY2stbGlzdCBmb3IgZW5hYmxlX21zaQogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX2JsYWNrX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZjIsICJBU1VTIiwgMCksIC8qIEF0aGxvbjY0IFgyICsgbnZpZGlhICovCiAJe30KIH07CiAKQEAgLTI3MTIsNiArMjcxNCw5IEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmUyKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZTMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJlNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggMDk0NzZmYy4uYzlhZmMwNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtMjQwLDkgKzI0MCwxNCBAQAogCQkvKiBSZWFsdGVrIHVzZXMgdGhpcyBiaXQgYXMgYSBkaWZmZXJlbnQgbWVhbmluZyAqLwogCQlpZiAoKGNvZGVjLT52ZW5kb3JfaWQgPj4gMTYpID09IDB4MTBlYykKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBSL0wiKTsKLQkJZWxzZQorCQllbHNlIHsKKwkJCWlmIChjYXBzICYgQUNfUElOQ0FQX0hCUikKKwkJCQlzbmRfaXByaW50ZihidWZmZXIsICIgSEJSIik7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgSERNSSIpOworCQl9CiAJfQorCWlmIChjYXBzICYgQUNfUElOQ0FQX0RQKQorCQlzbmRfaXByaW50ZihidWZmZXIsICIgRFAiKTsKIAlpZiAoY2FwcyAmIEFDX1BJTkNBUF9UUklHX1JFUSkKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiIFRyaWdnZXIiKTsKIAlpZiAoY2FwcyAmIEFDX1BJTkNBUF9JTVBfU0VOU0UpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCA0NDdlZGExLi4xYTM2MTM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTE3ODksNiArMTc4OSwxNCBAQAogCiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTk4MV9ocF9pbml0OwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxOTgxX2hwX3Vuc29sX2V2ZW50OworCQkvKiBzZXQgdGhlIHVwcGVyLWxpbWl0IGZvciBtaXhlciBhbXAgdG8gMGRCIGZvciBhdm9pZGluZyB0aGUKKwkJICogcG9zc2libGUgZGFtYWdlIGJ5IG92ZXJsb2FkaW5nCisJCSAqLworCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDExLCBIREFfSU5QVVQsCisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX09GRlNFVF9TSElGVCkgfAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQpIHwKKwkJCQkJICAoMHgwNSA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CisJCQkJCSAgKDEgPDwgQUNfQU1QQ0FQX01VVEVfU0hJRlQpKTsKIAkJYnJlYWs7CiAJY2FzZSBBRDE5ODFfVEhJTktQQUQ6CiAJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4MV90aGlua3BhZF9taXhlcnM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCA0YjIwMGRhLi5mZTA0MjNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTY2LDYgKzY2LDcgQEAKIC8qIGF2YWlsYWJsZSBtb2RlbHMgKi8KIGVudW0gewogCUNTNDIwWF9NQlA1NSwKKwlDUzQyMFhfSU1BQzI3LAogCUNTNDIwWF9BVVRPLAogCUNTNDIwWF9NT0RFTFMKIH07CkBAIC04MjcsNyArODI4LDggQEAKIAkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJCSAgICBocF9wcmVzZW50ID8gMCA6IFBJTl9PVVQpOwogCX0KLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IENTNDIwWF9NQlA1NSkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gQ1M0MjBYX01CUDU1IHx8CisJICAgIHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBDUzQyMFhfSU1BQzI3KSB7CiAJCXVuc2lnbmVkIGludCBncGlvID0gaHBfcHJlc2VudCA/IDB4MDIgOiAweDA4OwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLAogCQkJCSAgICBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIGdwaW8pOwpAQCAtMTA2OSwxMiArMTA3MSwxNCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqY3M0MjB4X21vZGVsc1tDUzQyMFhfTU9ERUxTXSA9IHsKIAlbQ1M0MjBYX01CUDU1XSA9ICJtYnA1NSIsCisJW0NTNDIwWF9JTUFDMjddID0gImltYWMyNyIsCiAJW0NTNDIwWF9BVVRPXSA9ICJhdXRvIiwKIH07CiAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGNzNDIweF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwZGUsIDB4Y2I3OSwgIk1hY0Jvb2tQcm8gNSw1IiwgQ1M0MjBYX01CUDU1KSwKKwlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHg3MjcwLCAiSU1hYyAyNyBJbmNoIiwgQ1M0MjBYX0lNQUMyNyksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMTA5Nyw4ICsxMTAxLDIzIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBjc19waW5jZmcgaW1hYzI3X3BpbmNmZ3NbXSA9IHsKKwl7IDB4MDksIDB4MDEyYjQwNTAgfSwKKwl7IDB4MGEsIDB4OTAxMDAxNDAgfSwKKwl7IDB4MGIsIDB4OTAxMDAxNDIgfSwKKwl7IDB4MGMsIDB4MDE4YjMwMjAgfSwKKwl7IDB4MGQsIDB4OTBhMDAxMTAgfSwKKwl7IDB4MGUsIDB4NDAwMDAwZjAgfSwKKwl7IDB4MGYsIDB4MDFjYmUwMzAgfSwKKwl7IDB4MTAsIDB4MDE0YmUwNjAgfSwKKwl7IDB4MTIsIDB4MDFhYjkwNzAgfSwKKwl7IDB4MTUsIDB4NDAwMDAwZjAgfSwKKwl7fSAvKiB0ZXJtaW5hdG9yICovCit9OworCiBzdGF0aWMgc3RydWN0IGNzX3BpbmNmZyAqY3NfcGluY2Znc1tDUzQyMFhfTU9ERUxTXSA9IHsKIAlbQ1M0MjBYX01CUDU1XSA9IG1icDU1X3BpbmNmZ3MsCisJW0NTNDIwWF9JTUFDMjddID0gaW1hYzI3X3BpbmNmZ3MsCiB9OwogCiBzdGF0aWMgdm9pZCBmaXhfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbW9kZWwpCkBAIC0xMTI4LDYgKzExNDcsNyBAQAogCQlmaXhfcGluY2ZnKGNvZGVjLCBzcGVjLT5ib2FyZF9jb25maWcpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIENTNDIwWF9JTUFDMjc6CiAJY2FzZSBDUzQyMFhfTUJQNTU6CiAJCS8qIEdQSU8xID0gaGVhZHBob25lcyAqLwogCQkvKiBHUElPMyA9IHNwZWFrZXJzICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggYTA5YzAzYy4uYzU3OGMyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCisjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogI2RlZmluZSBDWFRfUElOX0RJUl9JTiAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBDWFRfUElOX0RJUl9PVVQgICAgICAgICAgICAgMHgwMQpAQCAtMTExLDYgKzExMiw3IEBACiAJdW5zaWduZWQgaW50IGRlbGxfYXV0b211dGU7CiAJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOwogCXVuc2lnbmVkIGNoYXIgZXh0X21pY19iaWFzOworCXVuc2lnbmVkIGludCBkZWxsX3Zvc3RybzsKIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTQ3Niw2ICs0NzgsNyBAQAogCQlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+amFja3MpOwogCX0KICNlbmRpZgorCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIAlrZnJlZShjb2RlYy0+c3BlYyk7CiB9CiAKQEAgLTIxMDksOSArMjExMiwxMiBAQAogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCB2YWw7CisJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKwlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPworCQlBQ19BTVBfR0VUX0lOUFVUIDogQUNfQU1QX0dFVF9PVVRQVVQ7CiAKLQl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTcsIDAsCi0JCUFDX1ZFUkJfR0VUX0FNUF9HQUlOX01VVEUsIEFDX0FNUF9HRVRfT1VUUFVUKTsKKwl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJQUNfVkVSQl9HRVRfQU1QX0dBSU5fTVVURSwgaW5vdXQpOwogCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHZhbCAmIEFDX0FNUF9HQUlOOwogCXJldHVybiAwOwpAQCAtMjEyMyw2ICsyMTI5LDkgQEAKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3Q7CiAJdW5zaWduZWQgaW50IGlkeDsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOworCWludCBpbm91dCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4MTAwKSA/CisJCUFDX0FNUF9TRVRfSU5QVVQgOiBBQ19BTVBfU0VUX09VVFBVVDsKIAogCWlmICghaW11eC0+bnVtX2l0ZW1zKQogCQlyZXR1cm4gMDsKQEAgLTIxMzAsOSArMjEzOSw5IEBACiAJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCiAJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKIAkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IEFDX0FNUF9TRVRfT1VUUFVUIHwKKwkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IGlub3V0IHwKIAkJCWltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOwogCiAJcmV0dXJuIDE7CkBAIC0yMjAxLDEwICsyMjEwLDExIEBACiAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJBbmFsb2cgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5uYW1lID0gIkV4dCBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKIAkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAogCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTcsCiAJfSwKIAogCUhEQV9CSU5EX1ZPTCgiQ2FwdHVyZSBWb2x1bWUiLCAmY3h0NTA2Nl9iaW5kX2NhcHR1cmVfdm9sX290aGVycyksCkBAIC0yMjEyLDYgKzIyMjIsMTkgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfdm9zdHJvX21peGVyc1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkludCBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKKwkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MjMgfCAweDEwMCwKKwl9LAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAxLCAweDAsIEhEQV9PVVRQVVQpLAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic1tdID0gewogCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEIgKi8KIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwgLyogUG9ydCBDICovCkBAIC0yMzk3LDExICsyNDIwLDE2IEBACiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNjZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCiAJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGluaXRcbiIpOwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KSB7CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQljeHQ1MDY2X2F1dG9taWMoY29kZWMpOworCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCisJCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKKwkJZWxzZQorCQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTAwLDcgKzI1MjgsMTAgQEAKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic192b3N0cm87CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXJfb2xwYzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X3Zvc3Ryb19taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKKwkJc3BlYy0+ZGVsbF92b3N0cm8gPSAxOworCQlzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMyk7CiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9pbnRlbGhkbWkuYwppbmRleCA5MjhkZjU5Li45MThmNDAzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMKQEAgLTE0NiwzOCArMTQ2LDc4IEBACiB9OwogCiAvKgorICogQUxTQSBzZXF1ZW5jZSBpczoKKyAqCisgKiAgICAgICBzdXJyb3VuZDQwICAgc3Vycm91bmQ0MSAgIHN1cnJvdW5kNTAgICBzdXJyb3VuZDUxICAgc3Vycm91bmQ3MQorICogY2gwICAgZnJvbnQgbGVmdCAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KKyAqIGNoMSAgIGZyb250IHJpZ2h0ICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9CisgKiBjaDIgICByZWFyIGxlZnQgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPQorICogY2gzICAgcmVhciByaWdodCAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KKyAqIGNoNCAgICAgICAgICAgICAgICBMRkUgICAgICAgICAgY2VudGVyICAgICAgIGNlbnRlciAgICAgICBjZW50ZXIKKyAqIGNoNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGRSAgICAgICAgICBMRkUKKyAqIGNoNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlIGxlZnQKKyAqIGNoNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlIHJpZ2h0CisgKgorICogc3Vycm91bmQ3MSA9IHtGTCwgRlIsIFJMQywgUlJDLCBGQywgTEZFLCBSTCwgUlJ9CisgKi8KK3N0YXRpYyBpbnQgaGRtaV9jaGFubmVsX21hcHBpbmdbMHgzMl1bOF0gPSB7CisJLyogc3RlcmVvICovCisJWzB4MDBdID0geyAweDAwLCAweDExLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3IH0sCisJLyogMi4xICovCisJWzB4MDFdID0geyAweDAwLCAweDExLCAweDIyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3IH0sCisJLyogRG9sYnkgU3Vycm91bmQgKi8KKwlbMHgwMl0gPSB7IDB4MDAsIDB4MTEsIDB4MjMsIDB4ZjIsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcgfSwKKwkvKiBzdXJyb3VuZDQwICovCisJWzB4MDhdID0geyAweDAwLCAweDExLCAweDI0LCAweDM1LCAweGYzLCAweGYyLCAweGY2LCAweGY3IH0sCisJLyogNGNoICovCisJWzB4MDNdID0geyAweDAwLCAweDExLCAweDIzLCAweDMyLCAweDQ0LCAweGY1LCAweGY2LCAweGY3IH0sCisJLyogc3Vycm91bmQ0MSAqLworCVsweDA5XSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNCwgMHg0MywgMHhmMiwgMHhmNiwgMHhmNyB9LAorCS8qIHN1cnJvdW5kNTAgKi8KKwlbMHgwYV0gPSB7IDB4MDAsIDB4MTEsIDB4MjQsIDB4MzUsIDB4NDMsIDB4ZjIsIDB4ZjYsIDB4ZjcgfSwKKwkvKiBzdXJyb3VuZDUxICovCisJWzB4MGJdID0geyAweDAwLCAweDExLCAweDI0LCAweDM1LCAweDQzLCAweDUyLCAweGY2LCAweGY3IH0sCisJLyogNy4xICovCisJWzB4MTNdID0geyAweDAwLCAweDExLCAweDI2LCAweDM3LCAweDQzLCAweDUyLCAweDY0LCAweDc1IH0sCit9OworCisvKgogICogVGhpcyBpcyBhbiBvcmRlcmVkIGxpc3QhCiAgKgogICogVGhlIHByZWNlZGluZyBvbmVzIGhhdmUgYmV0dGVyIGNoYW5jZXMgdG8gYmUgc2VsZWN0ZWQgYnkKICAqIGhkbWlfc2V0dXBfY2hhbm5lbF9hbGxvY2F0aW9uKCkuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2VhX2NoYW5uZWxfc3BlYWtlcl9hbGxvY2F0aW9uIGNoYW5uZWxfYWxsb2NhdGlvbnNbXSA9IHsKLS8qIAkJCSAgY2hhbm5lbDogICA4ICAgICA3ICAgIDYgICAgNSAgICA0ICAgICAzICAgIDIgICAgMSAgKi8KKy8qIAkJCSAgY2hhbm5lbDogICA3ICAgICA2ICAgIDUgICAgNCAgICAzICAgICAyICAgIDEgICAgMCAgKi8KIHsgLmNhX2luZGV4ID0gMHgwMCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCiAJCQkJIC8qIDIuMSAqLwogeyAuY2FfaW5kZXggPSAweDAxLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgICAwLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKIAkJCQkgLyogRG9sYnkgU3Vycm91bmQgKi8KIHsgLmNhX2luZGV4ID0gMHgwMiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNDAgKi8KK3sgLmNhX2luZGV4ID0gMHgwOCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNDEgKi8KK3sgLmNhX2luZGV4ID0gMHgwOSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNTAgKi8KK3sgLmNhX2luZGV4ID0gMHgwYSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNTEgKi8KK3sgLmNhX2luZGV4ID0gMHgwYiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIDYuMSAqLworeyAuY2FfaW5kZXggPSAweDBmLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKKwkJCQkgLyogc3Vycm91bmQ3MSAqLworeyAuY2FfaW5kZXggPSAweDEzLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKKwogeyAuY2FfaW5kZXggPSAweDAzLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgICAwLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKIHsgLmNhX2luZGV4ID0gMHgwNCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCiB7IC5jYV9pbmRleCA9IDB4MDUsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAogeyAuY2FfaW5kZXggPSAweDA2LCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgIFJDLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKIHsgLmNhX2luZGV4ID0gMHgwNywgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MDgsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDA5LCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgwYSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIDUuMSAqLwoteyAuY2FfaW5kZXggPSAweDBiLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKIHsgLmNhX2luZGV4ID0gMHgwYywgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCiB7IC5jYV9pbmRleCA9IDB4MGQsICAuc3BlYWtlcnMgPSB7ICAgMCwgICBSQywgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAogeyAuY2FfaW5kZXggPSAweDBlLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLQkJCQkgLyogNi4xICovCi17IC5jYV9pbmRleCA9IDB4MGYsICAuc3BlYWtlcnMgPSB7ICAgMCwgICBSQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAogeyAuY2FfaW5kZXggPSAweDEwLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKIHsgLmNhX2luZGV4ID0gMHgxMSwgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCiB7IC5jYV9pbmRleCA9IDB4MTIsICAuc3BlYWtlcnMgPSB7IFJSQywgIFJMQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiA3LjEgKi8KLXsgLmNhX2luZGV4ID0gMHgxMywgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCiB7IC5jYV9pbmRleCA9IDB4MTQsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAogeyAuY2FfaW5kZXggPSAweDE1LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKIHsgLmNhX2luZGV4ID0gMHgxNiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICAgMCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCkBAIC0yMTAsNyArMjUwLDYgQEAKIHsgLmNhX2luZGV4ID0gMHgzMSwgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCiB9OwogCi0KIC8qCiAgKiBIREEvSERNSSBhdXRvIHBhcnNpbmcKICAqLwpAQCAtMzQ0LDcgKzM4Myw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBBQ19XSURfUElOOgogCQkJY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7Ci0JCQlpZiAoIShjYXBzICYgQUNfUElOQ0FQX0hETUkpKQorCQkJaWYgKCEoY2FwcyAmIChBQ19QSU5DQVBfSERNSSB8IEFDX1BJTkNBUF9EUCkpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGludGVsX2hkbWlfYWRkX3Bpbihjb2RlYywgbmlkKSA8IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTIsNiArMzkxLDE3IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIEc0NS9JYmV4UGVhayBkb24ndCBzdXBwb3J0IEVQU1M6IHRoZSB1bnNvbGljaXRlZCBwaW4gaG90IHBsdWcgZXZlbnQKKwkgKiBjYW4gYmUgbG9zdCBhbmQgcHJlc2VuY2Ugc2Vuc2UgdmVyYiB3aWxsIGJlY29tZSBpbmFjY3VyYXRlIGlmIHRoZQorCSAqIEhEQSBsaW5rIGlzIHBvd2VyZWQgb2ZmIGF0IGhvdCBwbHVnIG9yIGh3IGluaXRpYWxpemF0aW9uIHRpbWUuCisJICovCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCWlmICghKHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29kZWMtPmFmZywgQUNfUEFSX1BPV0VSX1NUQVRFKSAmCisJICAgICAgQUNfUFdSU1RfRVBTUykpCisJCWNvZGVjLT5idXMtPnBvd2VyX2tlZXBfbGlua19vbiA9IDE7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQogCkBAIC00MzYsMTQgKzQ4NiwxNSBAQAogCQkJCSAgICBBQ19WRVJCX1NFVF9DVlRfQ0hBTl9DT1VOVCwgY2hzIC0gMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGhkbWlfZGVidWdfY2hhbm5lbF9tYXBwaW5nKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQorc3RhdGljIHZvaWQgaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQogewogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCWludCBpOwogCWludCBzbG90OwogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlzbG90ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCXNsb3QgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCiAJCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0NIQU5fU0xPVCwgaSk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJIRE1JOiBBU1AgY2hhbm5lbCAlZCA9PiBzbG90ICVkXG4iLAogCQkJCQkJc2xvdCA+PiA0LCBzbG90ICYgMHhmKTsKQEAgLTYxOSwyNSArNjcwLDMyIEBACiAJcmV0dXJuIGFpLT5DQTsKIH0KIAotc3RhdGljIHZvaWQgaGRtaV9zZXR1cF9jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCitzdGF0aWMgdm9pZCBoZG1pX3NldHVwX2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQsCiAJCQkJICAgICAgIHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCiB7CiAJaW50IGk7CisJaW50IGNhID0gYWktPkNBOworCWludCBlcnI7CiAKLQlpZiAoIWFpLT5DQSkKLQkJcmV0dXJuOworCWlmIChoZG1pX2NoYW5uZWxfbWFwcGluZ1tjYV1bMV0gPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbF9hbGxvY2F0aW9uc1tjYV0uY2hhbm5lbHM7IGkrKykKKwkJCWhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVtpXSA9IGkgfCAoaSA8PCA0KTsKKwkJZm9yICg7IGkgPCA4OyBpKyspCisJCQloZG1pX2NoYW5uZWxfbWFwcGluZ1tjYV1baV0gPSAweGYgfCAoaSA8PCA0KTsKKwl9CiAKLQkvKgotCSAqIFRPRE86IGFkanVzdCBjaGFubmVsIG1hcHBpbmcgaWYgbmVjZXNzYXJ5Ci0JICogQUxTQSBzZXF1ZW5jZSBpcyBmcm9udC9zdXJyL2NsZmUvc2lkZT8KLQkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfSERNSV9DSEFOX1NMT1QsCisJCQkJCSAgaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdW2ldKTsKKwkJaWYgKGVycikgeworCQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJIRE1JOiBjaGFubmVsIG1hcHBpbmcgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xPVCwKLQkJCQkgICAgKGkgPDwgNCkgfCBpKTsKLQotCWhkbWlfZGVidWdfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBuaWQpOworCWhkbWlfZGVidWdfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBwaW5fbmlkKTsKIH0KIAogc3RhdGljIGJvb2wgaGRtaV9pbmZvZnJhbWVfdXB0b2RhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLApAQCAtNjc2LDcgKzczNCw2IEBACiAJfTsKIAogCWhkbWlfc2V0dXBfY2hhbm5lbF9hbGxvY2F0aW9uKGNvZGVjLCBuaWQsICZhaSk7Ci0JaGRtaV9zZXR1cF9jaGFubmVsX21hcHBpbmcoY29kZWMsIG5pZCwgJmFpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7CiAJCWlmIChzcGVjLT5waW5fY3Z0W2ldICE9IG5pZCkKQEAgLTY4Niw2ICs3NDMsNyBAQAogCiAJCXBpbl9uaWQgPSBzcGVjLT5waW5baV07CiAJCWlmICghaGRtaV9pbmZvZnJhbWVfdXB0b2RhdGUoY29kZWMsIHBpbl9uaWQsICZhaSkpIHsKKwkJCWhkbWlfc2V0dXBfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBwaW5fbmlkLCAmYWkpOwogCQkJaGRtaV9zdG9wX2luZm9mcmFtZV90cmFucyhjb2RlYywgcGluX25pZCk7CiAJCQloZG1pX2ZpbGxfYXVkaW9faW5mb2ZyYW1lKGNvZGVjLCBwaW5fbmlkLCAmYWkpOwogCQkJaGRtaV9zdGFydF9pbmZvZnJhbWVfdHJhbnMoY29kZWMsIHBpbl9uaWQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA4ODhiNjMxLi5jNzQ2NTA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTMxLDggKzEzMSw4IEBACiBlbnVtIHsKIAlBTEMyNjlfQkFTSUMsCiAJQUxDMjY5X1FVQU5UQV9GTDEsCi0JQUxDMjY5X0FTVVNfRUVFUENfUDcwMywKLQlBTEMyNjlfQVNVU19FRUVQQ19QOTAxLAorCUFMQzI2OV9BU1VTX0FNSUMsCisJQUxDMjY5X0FTVVNfRE1JQywKIAlBTEMyNjlfRlVKSVRTVSwKIAlBTEMyNjlfTElGRUJPT0ssCiAJQUxDMjY5X0FVVE8sCkBAIC0xODgsNiArMTg4LDggQEAKIAlBTEM2NjNfQVNVU19NT0RFNCwKIAlBTEM2NjNfQVNVU19NT0RFNSwKIAlBTEM2NjNfQVNVU19NT0RFNiwKKwlBTEM2NjNfQVNVU19NT0RFNywKKwlBTEM2NjNfQVNVU19NT0RFOCwKIAlBTEMyNzJfREVMTCwKIAlBTEMyNzJfREVMTF9aTTEsCiAJQUxDMjcyX1NBTVNVTkdfTkMxMCwKQEAgLTMzNSw2ICszMzcsOSBAQAogCS8qIGhvb2tzICovCiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpOworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBwb3dlcik7CisjZW5kaWYKIAogCS8qIGZvciBwaW4gc2Vuc2luZyAqLwogCXVuc2lnbmVkIGludCBzZW5zZV91cGRhdGVkOiAxOwpAQCAtMzg2LDYgKzM5MSw3IEBACiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOworCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKICNlbmRpZgogfTsKIApAQCAtODk4LDYgKzkwNCw3IEBACiAJc3BlYy0+dW5zb2xfZXZlbnQgPSBwcmVzZXQtPnVuc29sX2V2ZW50OwogCXNwZWMtPmluaXRfaG9vayA9IHByZXNldC0+aW5pdF9ob29rOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwlzcGVjLT5wb3dlcl9ob29rID0gcHJlc2V0LT5wb3dlcl9ob29rOwogCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBwcmVzZXQtPmxvb3BiYWNrczsKICNlbmRpZgogCkBAIC0xNjYzLDkgKzE2NzAsNiBAQAogLyogIHNvbWUgYml0IGhlcmUgZGlzYWJsZXMgdGhlIG90aGVyIERBQ3MuIEluaXQ9MHg0OTAwICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MDh9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDAwMH0sCi0vKiBFbmFibGUgYW1wbGlmaWVycyAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwMn0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAyfSwKIC8qIERNSUMgZml4CiAgKiBUaGlzIGxhcHRvcCBoYXMgYSBzdGVyZW8gZGlnaXRhbCBtaWNyb3Bob25lLiBUaGUgbWljcyBhcmUgb25seSAxY20gYXBhcnQKICAqIHdoaWNoIG1ha2VzIHRoZSBzdGVyZW8gdXNlbGVzcy4gSG93ZXZlciwgZWl0aGVyIHRoZSBtaWMgb3IgdGhlIEFMQzg4OQpAQCAtMTc3OCw2ICsxNzgyLDI1IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMSwgMHgwLAorCQlIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDEsIDIsIEhEQV9JTlBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMiwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworCiBzdGF0aWMgdm9pZCBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xODA4LDYgKzE4MzEsMTYgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MWI7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgdm9pZCBhbGM4ODlfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQoreworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIHBvd2VyID8gMiA6IDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTUsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIHBvd2VyID8gMiA6IDApOworfQorI2VuZGlmCisKIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTM2MDEsMTIgKzM2MzQsMjkgQEAKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IGFsY19zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworI2VuZGlmCiAJY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzYyMyw2ICszNjczLDcgQEAKIAkucmVzdW1lID0gYWxjX3Jlc3VtZSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkuc3VzcGVuZCA9IGFsY19zdXNwZW5kLAogCS5jaGVja19wb3dlcl9zdGF0dXMgPSBhbGNfY2hlY2tfcG93ZXJfc3RhdHVzLAogI2VuZGlmCiB9OwpAQCAtNjI0OCw2ICs2Mjk5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2MF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA3YiwgIkFjZXIgQzIweCIsIEFMQzI2MF9BQ0VSKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDdmLCAiQWNlciIsIEFMQzI2MF9XSUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDhmLCAiQWNlciIsIEFMQzI2MF9BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHg0NTQwLCAiRmF2b3JpdCAxMDBYUyIsIEFMQzI2MF9GQVZPUklUMTAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODA4LCAiSFAgZDU3MDAiLCBBTEMyNjBfSFBfMzAxMyksCkBAIC04OTE4LDcgKzg5NzAsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDA0MGQsICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MDU3OSwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyOGZiLCAiVGFyZ2EgVDgiLCBBTEM4ODJfVEFSR0EpLCAvKiBNU0ktMTA0OSBUOCAgKi8KLQlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyZmIzLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDJmYjMsICJNU0kiLCBBTEM4ODJfQVVUTyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NjY2OCwgIk1TSSIsIEFMQzg4Ml82U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzNzI5LCAiTVNJIFM0MjAiLCBBTEM4ODNfVEFSR0FfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzNzgzLCAiTkVDIFM5NzAiLCBBTEM4ODNfVEFSR0FfRElHKSwKQEAgLTkyODEsNiArOTMzMyw3IEBACiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzX2FsdCwKIAkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzX2FsdCksCisJCS5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKQEAgLTkzNzcsMTAgKzk0MzAsMTEgQEAKIAkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzg5MzBHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODg4X2Jhc2VfbWl4ZXIsCisJCS5taXhlcnMgPSB7IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlciwKIAkJCQlhbGM4ODNfY2htb2RlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMsCi0JCQkJYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3ZlcmJzIH0sCisJCQkJYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3ZlcmJzLAorCQkJCWFsYzg4OV9lYXBkX3ZlcmJzfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyksCkBAIC05Mzk3LDYgKzk0NTEsOSBAQAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkJLnBvd2VyX2hvb2sgPSBhbGM4ODlfcG93ZXJfZWFwZCwKKyNlbmRpZgogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV83NzMwR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLApAQCAtOTQyNyw2ICs5NDg0LDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHNfYWx0LAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHNfYWx0KSwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzX3NpeHN0YWNrX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M19zaXhzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCkBAIC05NDg4LDYgKzk1NDYsNyBAQAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkc19hbHQsCiAJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkc19hbHQpLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UsCkBAIC05NjY3LDYgKzk3MjYsNyBAQAogCQkJYWxjODgwX2dwaW8xX2luaXRfdmVyYnMgfSwKIAkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzLAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHMsCiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg5QV9tYjMxXzZjaF9tb2RlcywKQEAgLTEwNjc3LDYgKzEwNzM3LDEzIEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2xlbm92b18zMDAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBGcm9udCBNaWMgcGluOiBpbnB1dCB2cmVmIGF0IDUwJSAqLworCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewpAQCAtMTE3MTksNyArMTE3ODYsOCBAQAogCVtBTEMyNjJfTEVOT1ZPXzMwMDBdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfbGVub3ZvXzMwMDBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9pbml0X3ZlcmJzLCBhbGMyNjJfRUFQRF92ZXJicywKLQkJCQlhbGMyNjJfbGVub3ZvXzMwMDBfdW5zb2xfdmVyYnMgfSwKKwkJCQlhbGMyNjJfbGVub3ZvXzMwMDBfdW5zb2xfdmVyYnMsCisJCQkJYWxjMjYyX2xlbm92b18zMDAwX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLApAQCAtMTI4NTYsNyArMTI5MjQsNyBAQAogCWludCBib2FyZF9jb25maWc7CiAJaW50IGksIGhhc19iZWVwLCBlcnI7CiAKLQlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTMyMzEsMTAgKzEzMjk5LDEyIEBACiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCiBzdGF0aWMgdm9pZCBhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCXVuc2lnbmVkIGNoYXIgYml0czsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDE1KTsKKwlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgbmlkKTsKIAliaXRzID0gcHJlc2VudCA/IEFNUF9JTl9NVVRFKDApIDogMDsKIAlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKIAkJCQlBTVBfSU5fTVVURSgwKSwgYml0cyk7CkBAIC0xMzQ1OSw4ICsxMzUyOSw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqYWxjMjY5X21vZGVsc1tBTEMyNjlfTU9ERUxfTEFTVF0gPSB7CiAJW0FMQzI2OV9CQVNJQ10JCQk9ICJiYXNpYyIsCiAJW0FMQzI2OV9RVUFOVEFfRkwxXQkJPSAicXVhbnRhIiwKLQlbQUxDMjY5X0FTVVNfRUVFUENfUDcwM10JPSAiZWVlcGMtcDcwMyIsCi0JW0FMQzI2OV9BU1VTX0VFRVBDX1A5MDFdCT0gImVlZXBjLXA5MDEiLAorCVtBTEMyNjlfQVNVU19BTUlDXQkJPSAiYXN1cy1hbWljIiwKKwlbQUxDMjY5X0FTVVNfRE1JQ10JCT0gImFzdXMtZG1pYyIsCiAJW0FMQzI2OV9GVUpJVFNVXQkJPSAiZnVqaXRzdSIsCiAJW0FMQzI2OV9MSUZFQk9PS10JCT0gImxpZmVib29rIiwKIAlbQUxDMjY5X0FVVE9dCQkJPSAiYXV0byIsCkBAIC0xMzQ2OSwxOCArMTM1MzksNDEgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjlfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZjgsICJRdWFudGEgRkwxIiwgQUxDMjY5X1FVQU5UQV9GTDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMzAsICJBU1VTIEVlZXBjIFA3MDMgUDkwMEEiLAotCQkgICAgICBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg4MywgIkFTVVMgRjgxU2UiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzczLCAiQVNVUyBVMjBBIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKKwkJICAgICAgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTEzMywgIkFTVVMgVUoyMGZ0IiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEpUIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmIzLCAiQVNVUyBOODJKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzYTMsICJBU1VTIFVMMzBWdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzNzMsICJBU1VTIEc3M0pYIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTM4MywgIkFTVVMgVUozMEpjIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNkMywgIkFTVVMgTjYxSkEiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDEzLCAiQVNVUyBVTDUwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ0MywgIkFTVVMgVUwzMCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NTMsICJBU1VTIE02MEp2IiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ4MywgIkFTVVMgVUw4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZjMsICJBU1VTIEY4M1ZmIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRlMywgIkFTVVMgVUwyMCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1MTMsICJBU1VTIFVYMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWEzLCAiQVNVUyBONjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YjMsICJBU1VTIE42MERwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVjMywgIkFTVVMgTjcwRGUiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWUzLCAiQVNVUyBGODNUIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY0MywgIkFTVVMgTTYwSiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NTMsICJBU1VTIFU1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2OTMsICJBU1VTIEY1ME4iLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmEzLCAiQVNVUyBGNVEiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0FTVVNfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTcyMywgIkFTVVMgUDgwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc0MywgIkFTVVMgVTgwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ODMsICJBU1VTIEY4MVNlIiwgQUxDMjY5X0FTVVNfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxYSwgIkFTVVMgRWVlcGMgUDkwMSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0VFRVBDX1A5MDEpLAorCQkgICAgICBBTEMyNjlfQVNVU19ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBFZWVwYyBTMTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRUVFUENfUDkwMSksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2ZTMsICJBU1VTIFVYNTAiLCBBTEMyNjlfQVNVU19FRUVQQ19QOTAxKSwKKwkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9BU1VTX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzY2UsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTVkLCAiRlNDIEFtaWxvIiwgQUxDMjY5X0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0NzUsICJMaWZlYm9vayBJQ0g5TS1iYXNlZCIsIEFMQzI2OV9MSUZFQk9PSyksCiAJe30KQEAgLTEzNTEwLDcgKzEzNjAzLDcgQEAKIAkJLnNldHVwID0gYWxjMjY5X3F1YW50YV9mbDFfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfcXVhbnRhX2ZsMV9pbml0X2hvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfRUVFUENfUDcwM10gPSB7CisJW0FMQzI2OV9BU1VTX0FNSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZWVlcGNfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLApAQCAtMTM1MjQsNyArMTM2MTcsNyBAQAogCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfYW1pY19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKIAl9LAotCVtBTEMyNjlfQVNVU19FRUVQQ19QOTAxXSA9IHsKKwlbQUxDMjY5X0FTVVNfRE1JQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9lZWVwY19taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5X2luaXRfdmVyYnMsCkBAIC0xNjE1OSw2ICsxNjI1Miw1MiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCA9IHsKKwkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKKwkudmFsdWVzID0geworCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTUsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTcsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWIsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MjEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQkwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoID0geworCS5vcHMgPSAmc25kX2hkYV9iaW5kX3N3LAorCS52YWx1ZXMgPSB7CisJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCisJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNywgMywgMCwgSERBX09VVFBVVCksCisJCTAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19tb2RlN19taXhlcltdID0geworCUhEQV9CSU5EX1NXKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoKSwKKwlIREFfQklORF9WT0woIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCisJSERBX0JJTkRfU1coIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3Xzhfc3BfYmluZF9zd2l0Y2gpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUxIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZTIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19tb2RlOF9taXhlcltdID0geworCUhEQV9CSU5EX1NXKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoKSwKKwlIREFfQklORF9WT0woIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCisJSERBX0JJTkRfU1coIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3Xzhfc3BfYmluZF9zd2l0Y2gpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUxIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZTIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9jaG1vZGVfbWl4ZXJbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTY0NDYsNiArMTY1ODUsNDUgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbW9kZTdfaW5pdF92ZXJic1tdID0geworCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBIZWFkcGhvbmUgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDkpfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9NSUNfRVZFTlR9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX21vZGU4X2luaXRfdmVyYnNbXSA9IHsKKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBIZWFkcGhvbmUgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDkpfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfYXV0b19jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTY2MjUsNiArMTY4MDMsNTQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFsYzY2M190d29faHBfbTdfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDEsIHByZXNlbnQyOworCisJcHJlc2VudDEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCXByZXNlbnQyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIxLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKworCWlmIChwcmVzZW50MSB8fCBwcmVzZW50MikgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJfSBlbHNlIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjNjYzX3R3b19ocF9tOF9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50MSwgcHJlc2VudDI7CisKKwlwcmVzZW50MSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMSwgMCwKKwkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkKKwkJCSYgQUNfUElOU0VOU0VfUFJFU0VOQ0U7CisJcHJlc2VudDIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTUsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCisJaWYgKHByZXNlbnQxIHx8IHByZXNlbnQyKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTQsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCiB7CkBAIC0xNjY0NCw3ICsxNjg3MCw3IEBACiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwotCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gOTsKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKQEAgLTE2NjU2LDcgKzE2ODgyLDE3IEBACiAKIC8qICoqKioqKioqKioqKioqKioqIE1vZGUxICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgYWxjNjYzX21vZGUxX3Vuc29sX2V2ZW50CWFsYzY2M19tNTF2YV91bnNvbF9ldmVudAotI2RlZmluZSBhbGM2NjNfbW9kZTFfc2V0dXAJCWFsYzY2M19tNTF2YV9zZXR1cAorCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOworfQorCiAjZGVmaW5lIGFsYzY2M19tb2RlMV9pbml0aG9vawkJYWxjNjYzX201MXZhX2luaXRob29rCiAKIC8qICoqKioqKioqKioqKioqKioqIE1vZGUyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2NjczLDcgKzE2OTA5LDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYyX21vZGUyX3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjJfbW9kZTJfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9tb2RlMl9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2Njk0LDcgKzE2OTMwLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGUzX3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTNfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlM19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzE1LDcgKzE2OTUxLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGU0X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTRfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzM2LDcgKzE2OTcyLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGU1X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTVfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNV9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzU3LDcgKzE2OTkzLDcgQEAKIAl9CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGU2X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTZfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCiAKIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNl9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE2NzY1LDYgKzE3MDAxLDUwIEBACiAJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKKy8qICoqKioqKioqKioqKioqKioqIE1vZGU3ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlN191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgorCQlhbGM2NjNfdHdvX2hwX203X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKyNkZWZpbmUgYWxjNjYzX21vZGU3X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAorCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTdfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWxjNjYzX3R3b19ocF9tN19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKK30KKworLyogKioqKioqKioqKioqKioqKiogTW9kZTggKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgYWxjNjYzX21vZGU4X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6CisJCWFsYzY2M190d29faHBfbThfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKKwkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBhbGM2NjNfbW9kZThfc2V0dXAJYWxjNjYzX201MXZhX3NldHVwCisKK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhbGM2NjNfdHdvX2hwX204X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOworCWFsY19taWNfYXV0b211dGUoY29kZWMpOworfQorCiBzdGF0aWMgdm9pZCBhbGM2NjNfZzcxdl9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKQEAgLTE2ODk5LDYgKzE3MTc5LDggQEAKIAlbQUxDNjYzX0FTVVNfTU9ERTRdID0gImFzdXMtbW9kZTQiLAogCVtBTEM2NjNfQVNVU19NT0RFNV0gPSAiYXN1cy1tb2RlNSIsCiAJW0FMQzY2M19BU1VTX01PREU2XSA9ICJhc3VzLW1vZGU2IiwKKwlbQUxDNjYzX0FTVVNfTU9ERTddID0gImFzdXMtbW9kZTciLAorCVtBTEM2NjNfQVNVU19NT0RFOF0gPSAiYXN1cy1tb2RlOCIsCiAJW0FMQzI3Ml9ERUxMXQkJPSAiZGVsbCIsCiAJW0FMQzI3Ml9ERUxMX1pNMV0JPSAiZGVsbC16bTEiLAogCVtBTEMyNzJfU0FNU1VOR19OQzEwXQk9ICJzYW1zdW5nLW5jMTAiLApAQCAtMTY5MTUsMTIgKzE3MTk3LDIyIEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMwMywgIkFTVVMgRzYwSiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzMzLCAiQVNVUyBHNjBKeCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2UzLCAiQVNVUyBONzFKQSIsIEFMQzY2M19BU1VTX01PREU3KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDYzLCAiQVNVUyBONzEiLCBBTEM2NjNfQVNVU19NT0RFNyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTRkMywgIkFTVVMgRzcyIiwgQUxDNjYzX0FTVVNfTU9ERTgpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1NjMsICJBU1VTIE45MCIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWQzLCAiQVNVUyBONTBTRiBGNTBTRiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmMzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmYzLCAiQVNVUyBLNDBDIEs1MEMiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTczMywgIkFTVVMgTjgxRGUiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc2NSwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc5MywgIkFTVVMgRjUwR1giLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTdiMywgIkFTVVMgRjcwU0wiLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTdjMywgIkFTVVMgVVgyMCIsIEFMQzY2M19BU1VTX001MVZBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxN2YzLCAiQVNVUyBYNThMRSIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE3MjA0LDYgKzE3NDk2LDM2IEBACiAJCS5zZXR1cCA9IGFsYzY2M19tb2RlNl9zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlNl9pbml0aG9vaywKIAl9LAorCVtBTEM2NjNfQVNVU19NT0RFN10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzY2M19tb2RlN19taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2M19tb2RlN19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKKwkJLmhwX25pZCA9IDB4MDMsCisJCS5kYWNfbmlkcyA9IGFsYzY2Ml9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKKwkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGU3X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTdfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTdfaW5pdGhvb2ssCisJfSwKKwlbQUxDNjYzX0FTVVNfTU9ERThdID0geworCQkubWl4ZXJzID0geyBhbGM2NjNfbW9kZThfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfbW9kZThfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCisJCS5ocF9uaWQgPSAweDAzLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tb2RlOF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX21vZGU4X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjNjYzX21vZGU4X2luaXRob29rLAorCX0sCiAJW0FMQzI3Ml9ERUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYzX201MXZhX21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGMyNzJfYXV0b19jYXB0dXJlX21peGVyLApAQCAtMTc2ODcsNyArMTgwMDksOSBAQAogCXsgLmlkID0gMHgxMGVjMDI2NywgLm5hbWUgPSAiQUxDMjY3IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY4IH0sCiAJeyAuaWQgPSAweDEwZWMwMjY4LCAubmFtZSA9ICJBTEMyNjgiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjggfSwKIAl7IC5pZCA9IDB4MTBlYzAyNjksIC5uYW1lID0gIkFMQzI2OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAorCXsgLmlkID0gMHgxMGVjMDI3MCwgLm5hbWUgPSAiQUxDMjcwIiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY5IH0sCiAJeyAuaWQgPSAweDEwZWMwMjcyLCAubmFtZSA9ICJBTEMyNzIiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKKwl7IC5pZCA9IDB4MTBlYzAyNzUsIC5uYW1lID0gIkFMQzI3NSIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAogCXsgLmlkID0gMHgxMGVjMDg2MSwgLnJldiA9IDB4MTAwMzQwLCAubmFtZSA9ICJBTEM2NjAiLAogCSAgLnBhdGNoID0gcGF0Y2hfYWxjODYxIH0sCiAJeyAuaWQgPSAweDEwZWMwNjYwLCAubmFtZSA9ICJBTEM2NjAtVkQiLCAucGF0Y2ggPSBwYXRjaF9hbGM4NjF2ZCB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDZiMGJjMDQuLmVlZGE3YmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTIwOSw2ICsyMDksNyBAQAogCXVuc2lnbmVkIGludCBncGlvX2RhdGE7CiAJdW5zaWduZWQgaW50IGdwaW9fbXV0ZTsKIAl1bnNpZ25lZCBpbnQgZ3Bpb19sZWQ7CisJdW5zaWduZWQgaW50IGdwaW9fbGVkX3BvbGFyaXR5OwogCiAJLyogc3RyZWFtICovCiAJdW5zaWduZWQgaW50IHN0cmVhbV9kZWxheTsKQEAgLTE1MzgsNiArMTUzOSwxMyBAQAogCTB4OTA0NjAxYjAsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2RnNDVpZF9waW5fY29uZmlnc1sxNF0gPSB7CisJMHgwMjIxNDIzMCwgMHgwMkExOTI0MCwgMHgwMTAxMzIxNCwgMHgwMTAxNDIxMCwKKwkweDAxQTE5MjUwLCAweDAxMDExMjEyLCAweDAxMDE2MjExLCAweDQwZjAwMGYwLAorCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4MDE0NTEwQTAsCisJMHgwNzQ1MTBCMCwgMHg0MGYwMDBmMAorfTsKKwogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyaGQ3M3h4X2JyZF90YmxbU1RBQ185MkhENzNYWF9NT0RFTFNdID0gewogCVtTVEFDXzkySEQ3M1hYX1JFRl0JPSByZWY5MmhkNzN4eF9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMX002X0FNSUNdCT0gZGVsbF9tNl9waW5fY29uZmlncywKQEAgLTE1NDUsNiArMTU1Myw3IEBACiAJW1NUQUNfREVMTF9NNl9CT1RIXQk9IGRlbGxfbTZfcGluX2NvbmZpZ3MsCiAJW1NUQUNfREVMTF9FUV0JPSBkZWxsX202X3Bpbl9jb25maWdzLAogCVtTVEFDX0FMSUVOV0FSRV9NMTdYXQk9IGFsaWVud2FyZV9tMTd4X3Bpbl9jb25maWdzLAorCVtTVEFDXzkySEQ3M1hYX0lOVEVMXQk9IGludGVsX2RnNDVpZF9waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDczeHhfbW9kZWxzW1NUQUNfOTJIRDczWFhfTU9ERUxTXSA9IHsKQEAgLTIwOTUsNiArMjEwNCw3IEBACiAgICAgMTAyODAyMDQKICAgICAxMDI4MDIxRgogICAgIDEwMjgwMjI4IChEZWxsIFZvc3RybyAxNTAwKQorICAgIDEwMjgwMjI5IChEZWxsIFZvc3RybyAxNzAwKQogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF85MjA1X200Ml9waW5fY29uZmlnc1sxMl0gPSB7CiAJMHgwMzIxMTAxRiwgMHgwM0ExMTAyMCwgMHg0MDAwMDNGQSwgMHg5MDE3MDMxMCwKQEAgLTIxODAsNiArMjE5MCw4IEBACiAJCSAgICAgICJEZWxsIEluc3Bpcm9uIiwgU1RBQ185MjA1X0RFTExfTTQ0KSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjI4LAogCQkgICAgICAiRGVsbCBWb3N0cm8gMTUwMCIsIFNUQUNfOTIwNV9ERUxMX000MiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIyOSwKKwkJICAgICAgIkRlbGwgVm9zdHJvIDE3MDAiLCBTVEFDXzkyMDVfREVMTF9NNDIpLAogCS8qIEdhdGV3YXkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgwNTYwLCAiR2F0ZXdheSBUNjgzNGMiLCBTVEFDXzkyMDVfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2NSwgIkdhdGV3YXkgVDE2MTYiLCBTVEFDXzkyMDVfRUFQRCksCkBAIC0zNzcwLDE1ICszNzgyLDE2IEBACiAJCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCBuaWQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCS8qIElEVC9TVEFDIGNvZGVjcyBoYXZlIGxpbmVhciBiZWVwIHRvbmUgcGFyYW1ldGVyICovCi0JCWNvZGVjLT5iZWVwLT5saW5lYXJfdG9uZSA9IDE7Ci0JCS8qIGlmIG5vIGJlZXAgc3dpdGNoIGlzIGF2YWlsYWJsZSwgbWFrZSBpdHMgb3duIG9uZSAqLwotCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7Ci0JCWlmIChjb2RlYy0+YmVlcCAmJgotCQkgICAgISgoY2FwcyAmIEFDX0FNUENBUF9NVVRFKSA+PiBBQ19BTVBDQVBfTVVURV9TSElGVCkpIHsKLQkJCWVyciA9IHN0YWM5Mnh4X2JlZXBfc3dpdGNoX2N0bChjb2RlYyk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQlpZiAoY29kZWMtPmJlZXApIHsKKwkJCS8qIElEVC9TVEFDIGNvZGVjcyBoYXZlIGxpbmVhciBiZWVwIHRvbmUgcGFyYW1ldGVyICovCisJCQljb2RlYy0+YmVlcC0+bGluZWFyX3RvbmUgPSAxOworCQkJLyogaWYgbm8gYmVlcCBzd2l0Y2ggaXMgYXZhaWxhYmxlLCBtYWtlIGl0cyBvd24gb25lICovCisJCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CisJCQlpZiAoIShjYXBzICYgQUNfQU1QQ0FQX01VVEUpKSB7CisJCQkJZXJyID0gc3RhYzkyeHhfYmVlcF9zd2l0Y2hfY3RsKGNvZGVjKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KIAkJfQogCX0KICNlbmRpZgpAQCAtNDcyNCwxMyArNDczNyw2MSBAQAogCX0KIH0KIAotc3RhdGljIGludCBocF9ic2VyaWVzX3N5c3RlbSh1MzIgc3Vic3lzdGVtX2lkKQorLyoKKyAqIFRoaXMgbWV0aG9kIHNlYXJjaGVzIGZvciB0aGUgbXV0ZSBMRUQgR1BJTyBjb25maWd1cmF0aW9uCisgKiBwcm92aWRlZCBhcyBPRU0gc3RyaW5nIGluIFNNQklPUy4gVGhlIGZvcm1hdCBvZiB0aGF0IHN0cmluZworICogaXMgSFBfTXV0ZV9MRURfUF9HIG9yIEhQX011dGVfTEVEX1AKKyAqIHdoZXJlIFAgY2FuIGJlIDAgb3IgMSBhbmQgZGVmaW5lcyBtdXRlIExFRCBHUElPIGNvbnRyb2wgc3RhdGUgKGxvdy9oaWdoKQorICogdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgTk9UIG11dGVkIHN0YXRlIG9mIHRoZSBtYXN0ZXIgdm9sdW1lCisgKiBhbmQgRyBpcyB0aGUgaW5kZXggb2YgdGhlIEdQSU8gdG8gdXNlIGFzIHRoZSBtdXRlIExFRCBjb250cm9sICgwLi45KQorICogSWYgX0cgcG9ydGlvbiBpcyBtaXNzaW5nIGl0IGlzIGFzc2lnbmVkIGJhc2VkIG9uIHRoZSBjb2RlYyBJRAorICoKKyAqIFNvLCBIUCBCLXNlcmllcyBsaWtlIHN5c3RlbXMgbWF5IGhhdmUgSFBfTXV0ZV9MRURfMCAoY3VycmVudCBtb2RlbHMpCisgKiBvciAgSFBfTXV0ZV9MRURfMF8zIChmdXR1cmUgbW9kZWxzKSBPRU0gU01CSU9TIHN0cmluZ3MKKyAqLworc3RhdGljIGludCBmaW5kX211dGVfbGVkX2dwaW8oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwljb25zdCBzdHJ1Y3QgZG1pX2RldmljZSAqZGV2ID0gTlVMTDsKKworCWlmICgoY29kZWMtPnN1YnN5c3RlbV9pZCA+PiAxNikgPT0gUENJX1ZFTkRPUl9JRF9IUCkgeworCQl3aGlsZSAoKGRldiA9IGRtaV9maW5kX2RldmljZShETUlfREVWX1RZUEVfT0VNX1NUUklORywKKwkJCQkJCQkJTlVMTCwgZGV2KSkpIHsKKwkJCWlmIChzc2NhbmYoZGV2LT5uYW1lLCAiSFBfTXV0ZV9MRURfJWRfJWQiLAorCQkJICAgICAgJnNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5LAorCQkJICAgICAgJnNwZWMtPmdwaW9fbGVkKSA9PSAyKSB7CisJCQkJc3BlYy0+Z3Bpb19sZWQgPSAxIDw8IHNwZWMtPmdwaW9fbGVkOworCQkJCXJldHVybiAxOworCQkJfQorCQkJaWYgKHNzY2FuZihkZXYtPm5hbWUsICJIUF9NdXRlX0xFRF8lZCIsCisJCQkgICAgICAmc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpID09IDEpIHsKKwkJCQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwkJCQljYXNlIDB4MTExZDc2MDg6CisJCQkJCS8qIEdQSU8gMCAqLworCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7CisJCQkJCXJldHVybiAxOworCQkJCWNhc2UgMHgxMTFkNzYwMDoKKwkJCQljYXNlIDB4MTExZDc2MDE6CisJCQkJY2FzZSAweDExMWQ3NjAyOgorCQkJCWNhc2UgMHgxMTFkNzYwMzoKKwkJCQkJLyogR1BJTyAzICovCisJCQkJCXNwZWMtPmdwaW9fbGVkID0gMHgwODsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwX2JsaWtlX3N5c3RlbSh1MzIgc3Vic3lzdGVtX2lkKQogewogCXN3aXRjaCAoc3Vic3lzdGVtX2lkKSB7Ci0JY2FzZSAweDEwM2MzMDdlOgotCWNhc2UgMHgxMDNjMzA3ZjoKLQljYXNlIDB4MTAzYzMwODA6Ci0JY2FzZSAweDEwM2MzMDgxOgorCWNhc2UgMHgxMDNjMTUyMDoKKwljYXNlIDB4MTAzYzE1MjE6CisJY2FzZSAweDEwM2MxNTIzOgorCWNhc2UgMHgxMDNjMTUyNDoKKwljYXNlIDB4MTAzYzE1MjU6CiAJY2FzZSAweDEwM2MxNzIyOgogCWNhc2UgMHgxMDNjMTcyMzoKIAljYXNlIDB4MTAzYzE3MjQ6CkBAIC00NzM5LDYgKzQ4MDAsMTQgQEAKIAljYXNlIDB4MTAzYzE3Mjc6CiAJY2FzZSAweDEwM2MxNzI4OgogCWNhc2UgMHgxMDNjMTcyOToKKwljYXNlIDB4MTAzYzE3MmE6CisJY2FzZSAweDEwM2MxNzJiOgorCWNhc2UgMHgxMDNjMzA3ZToKKwljYXNlIDB4MTAzYzMwN2Y6CisJY2FzZSAweDEwM2MzMDgwOgorCWNhc2UgMHgxMDNjMzA4MToKKwljYXNlIDB4MTAzYzcwMDc6CisJY2FzZSAweDEwM2M3MDA4OgogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00ODMzLDcgKzQ5MDIsNyBAQAogCQllbHNlCiAJCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCiAKLQkJaWYgKGhwX2JzZXJpZXNfc3lzdGVtKGNvZGVjLT5zdWJzeXN0ZW1faWQpKSB7CisJCWlmICghc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpIHsKIAkJCS8qIExFRCBzdGF0ZSBpcyBpbnZlcnRlZCBvbiB0aGVzZSBzeXN0ZW1zICovCiAJCQlzcGVjLT5ncGlvX2RhdGEgXj0gc3BlYy0+Z3Bpb19sZWQ7CiAJCX0KQEAgLTU1MjYsNyArNTU5NSw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChocF9ic2VyaWVzX3N5c3RlbShjb2RlYy0+c3Vic3lzdGVtX2lkKSkgeworCWlmIChocF9ibGlrZV9zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKIAkJcGluX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgwZik7CiAJCWlmIChnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0xJTkVfT1VUIHx8CiAJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIgIHx8CkBAIC01NTQ0LDI2ICs1NjEzLDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoKGNvZGVjLT5zdWJzeXN0ZW1faWQgPj4gMTYpID09IFBDSV9WRU5ET1JfSURfSFApIHsKLQkJY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKmRldiA9IE5VTEw7Ci0JCXdoaWxlICgoZGV2ID0gZG1pX2ZpbmRfZGV2aWNlKERNSV9ERVZfVFlQRV9PRU1fU1RSSU5HLAotCQkJCQkgICAgICBOVUxMLCBkZXYpKSkgewotCQkJaWYgKHN0cmNtcChkZXYtPm5hbWUsICJIUF9NdXRlX0xFRF8xIikpIHsKLQkJCQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKLQkJCQljYXNlIDB4MTExZDc2MDg6Ci0JCQkJCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAweDExMWQ3NjAwOgotCQkJCWNhc2UgMHgxMTFkNzYwMToKLQkJCQljYXNlIDB4MTExZDc2MDI6Ci0JCQkJY2FzZSAweDExMWQ3NjAzOgotCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwlpZiAoZmluZF9tdXRlX2xlZF9ncGlvKGNvZGVjKSkKKwkJc25kX3ByaW50ZCgibXV0ZSBMRUQgZ3BpbyAlZCBwb2xhcml0eSAlZFxuIiwKKwkJCQlzcGVjLT5ncGlvX2xlZCwKKwkJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKHNwZWMtPmdwaW9fbGVkKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCA3NzE3ZTAxLi5lZGFhNzI5IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTE0Myw3ICsxNDMsOCBAQAogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwogCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfRk9SQ0VEX1BVTFNFOwotCS8vIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CisJLyogRklYTUU6IFRoaXMgZHJpdmVyIHNob3VsZCBiZSB1cGRhdGVkIHRvIGFsbG93IGZvciBkeW5hbWljIElSUSBzaGFyaW5nICovCisJLyogbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfRk9SQ0VEX1BVTFNFOyAqLwogCiAJbGluay0+aXJxLkhhbmRsZXIgPSBwZGFjZl9pbnRlcnJ1cHQ7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYwppbmRleCBkMDU3ZTY0Li41Y2ZhNjA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYwpAQCAtNTEsNyArNTEsNyBAQAogCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgZW5vdWdoIGxhcmdlICovCiAJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKIAl9Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jXzMyKHNpemUpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY18zMl91c2VyKHNpemUpOwogCWlmICghIHJ1bnRpbWUtPmRtYV9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKaW5kZXggYjY5ODYxZC4uM2VmMTZiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWs0NjQyX21vZGluaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKIAlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYWs0NjQyX2kyY19kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKaW5kZXggYmJjNzJjMi4uODFiOGM5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJdnJhID0gc3RhYzk3NjZfYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7CiAKIAl2cmEgfD0gMHgxOyAvKiBlbmFibGUgdmFyaWFibGUgcmF0ZSBhdWRpbyAqLworCXZyYSAmPSB+MHg0OyAvKiBkaXNhYmxlIFNQRElGIG91dHB1dCAqLwogCiAJc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSk7CiAKQEAgLTIyMSwyMiArMjIyLDYgQEAKIAlyZXR1cm4gc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgcmVnLCBydW50aW1lLT5yYXRlKTsKIH0KIAotc3RhdGljIGludCBhYzk3X2RpZ2l0YWxfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXVuc2lnbmVkIHNob3J0IHZyYTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQl2cmEgPSBzdGFjOTc2Nl9hYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKLQkJdnJhICY9ICEweDA0OwotCQlzdGFjOTc2Nl9hYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgdnJhKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHN0YWM5NzY2X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKQEAgLTMxNSw3ICszMDAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzdGFjOTc2Nl9kYWlfb3BzX2RpZ2l0YWwgPSB7CiAJLnByZXBhcmUgPSBhYzk3X2RpZ2l0YWxfcHJlcGFyZSwKLQkudHJpZ2dlciA9IGFjOTdfZGlnaXRhbF90cmlnZ2VyLAogfTsKIAogc3RydWN0IHNuZF9zb2NfZGFpIHN0YWM5NzY2X2RhaVtdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwppbmRleCA1ZjE2ODFmLi4yYTI3ZjdiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTE3NSw3ICsxNzUsNyBAQAogewogCXR3bDQwMzBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKIAlpZiAobGlrZWx5KHJlZyA8IFRXTDQwMzBfUkVHX1NXX1NIQURPVykpCi0JCXJldHVybiB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwgdmFsdWUsCisJCXJldHVybiB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCB2YWx1ZSwKIAkJCQkJICAgIHJlZyk7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCWRvIHsKIAkJLyogdGhpcyB0YWtlcyBhIGxpdHRsZSB3aGlsZSwgc28gZG9uJ3Qgc2xhbSBpMmMgKi8KIAkJdWRlbGF5KDIwMDApOwotCQl0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKKwkJdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKIAkJCQkgICAgVFdMNDAzMF9SRUdfQU5BTUlDTCk7CiAJfSB3aGlsZSAoKGkrKyA8IDEwMCkgJiYKIAkJICgoYnl0ZSAmIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpID09CkBAIC01NDIsNyArNTQyLDcgQEAKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoJCQkJCVwKIAkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIHJlZyk7CVwKLQkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCVwKKwkJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwJXAogCQkJCQlyZWdfdmFsICYgKH5tYXNrKSwJCVwKIAkJCQkJcmVnKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXApAQCAtNjc5LDcgKzY3OSw3IEBACiAJCW1kZWxheSgocmFtcF9iYXNlWyhoc19wb3AgJiBUV0w0MDMwX1JBTVBfREVMQVkpID4+IDJdIC8KIAkJCXR3bDQwMzAtPnN5c2NsaykgKyAxKTsKIAkJLyogQnlwYXNzIHRoZSByZWdfY2FjaGUgdG8gbXV0ZSB0aGUgaGVhZHNldCAqLwotCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKKwkJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKIAkJCQkJaHNfZ2FpbiAmICh+MHgwZiksCiAJCQkJCVRXTDQwMzBfUkVHX0hTX0dBSU5fU0VUKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKaW5kZXggZjgyMTI1ZC4uZWJiZjExYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCkBAIC0xMzQwLDkgKzEzNDAsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgd204MzUwX2hwX2phY2tfaGFuZGxlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsIHZvaWQgKmRhdGEpCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204MzUwX2hwX2phY2tfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGRhdGE7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcHJpdi0+Y29kZWMuY29udHJvbF9kYXRhOwogCXUxNiByZWc7CiAJaW50IHJlcG9ydDsKIAlpbnQgbWFzazsKQEAgLTEzNjUsNyArMTM2Niw3IEBACiAKIAlpZiAoIWphY2stPmphY2spIHsKIAkJZGV2X3dhcm4od204MzUwLT5kZXYsICJKYWNrIGludGVycnVwdCBjYWxsZWQgd2l0aCBubyBqYWNrXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCiAJLyogRGVib3VuY2UgKi8KQEAgLTEzNzgsNiArMTM3OSw4IEBACiAJCXJlcG9ydCA9IDA7CiAKIAlzbmRfc29jX2phY2tfcmVwb3J0KGphY2stPmphY2ssIHJlcG9ydCwgamFjay0+cmVwb3J0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCkBAIC0xNDIxLDkgKzE0MjQsNyBAQAogCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9KQUNLX0RFVEVDVCwgZW5hKTsKIAogCS8qIFN5bmMgc3RhdHVzICovCi0Jd204MzUwX2hwX2phY2tfaGFuZGxlcih3bTgzNTAsIGlycSwgcHJpdik7Ci0KLQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIGlycSk7CisJd204MzUwX2hwX2phY2tfaGFuZGxlcihpcnEsIHByaXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDgyLDEyICsxNDgzLDE2IEBACiAJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1JPVVQyX1ZPTFVNRSwKIAkJCVdNODM1MF9PVVQyX1ZVIHwgV004MzUwX09VVDJSX01VVEUpOwogCi0Jd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOwotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKwkvKiBNYWtlIHN1cmUgamFjayBkZXRlY3QgaXMgZGlzYWJsZWQgdG8gc3RhcnQgb2ZmIHdpdGggKi8KKwl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9KQUNLX0RFVEVDVCwKKwkJCSAgV004MzUwX0pETF9FTkEgfCBXTTgzNTBfSkRSX0VOQSk7CisKIAl3bTgzNTBfcmVnaXN0ZXJfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wsCi0JCQkgICAgd204MzUwX2hwX2phY2tfaGFuZGxlciwgcHJpdik7CisJCQkgICAgd204MzUwX2hwX2phY2tfaGFuZGxlciwgMCwgIkxlZnQgamFjayBkZXRlY3QiLAorCQkJICAgIHByaXYpOwogCXdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUiwKLQkJCSAgICB3bTgzNTBfaHBfamFja19oYW5kbGVyLCBwcml2KTsKKwkJCSAgICB3bTgzNTBfaHBfamFja19oYW5kbGVyLCAwLCAiUmlnaHQgamFjayBkZXRlY3QiLAorCQkJICAgIHByaXYpOwogCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMTUxNiw4ICsxNTIxLDYgQEAKIAkJCSAgV004MzUwX0pETF9FTkEgfCBXTTgzNTBfSkRSX0VOQSk7CiAJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF80LCBXTTgzNTBfVE9DTEtfRU5BKTsKIAotCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKLQl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CiAJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOwogCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKaW5kZXggYzk0MzhkZC4uZGJjMzY4YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1JFU0VULCAwKTsKIAogCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5MDBfcmVnX2RlZmF1bHRzLAotCSAgICAgICBzaXplb2YoY29kZWMtPnJlZ19jYWNoZSkpOworCSAgICAgICBzaXplb2Yod204OTAwX3JlZ19kZWZhdWx0cykpOwogfQogCiBzdGF0aWMgaW50IHdtODkwMF9ocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCmluZGV4IDgxYzU3YjUuLmE4MDg2NzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwpAQCAtNDcsNyArNDcsNyBAQAogfTsKIAogI2RlZmluZSBXTTg5NzRfUE9XRVIxX0JJQVNFTiAgMHgwOAotI2RlZmluZSBXTTg5NzRfUE9XRVIxX0JVRklPRU4gMHgxMAorI2RlZmluZSBXTTg5NzRfUE9XRVIxX0JVRklPRU4gMHgwNAogCiBzdHJ1Y3Qgd204OTc0X3ByaXYgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKaW5kZXggMGFjMTIxNS4uZTIzN2JmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCkBAIC00NjMsNyArNDYzLDggQEAKIHsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAotCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOworCWlmIChyZWcgPCAweDdjKQorCQlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKIAlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzEyX3JlZykpKQogCQljYWNoZVtyZWddID0gdmFsOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jIGIvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCmluZGV4IDAyNjdkMmQuLjA3ZDJhMjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYworKysgYi9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKQEAgLTE4MCw3ICsxODAsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAogCS8qIGRpc2FibGUgdGhlIFBMTCAqLwotCXJldHVybiBjb2RlY19kYWktPm9wcy0+c2V0X3BsbChjb2RlY19kYWksIElHTk9SRURfQVJHLCAwLCAwKTsKKwlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgSUdOT1JFRF9BUkcsCisJCQkJICAgICAgIDAsIDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCBkNDk0NThhLi4zZGI4YTZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtMjMsOSArMjMsOSBAQAogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEEpICs9IHNuZC1zb2MtYW1zLWRlbHRhLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT1NLNTkxMikgKz0gc25kLXNvYy1vc2s1OTEyLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT1ZFUk8pICs9IHNuZC1zb2Mtb3Zlcm8ubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUDJFVk0pICs9IHNuZC1zb2Mtb21hcDJldm0ubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUDNFVk0pICs9IHNuZC1zb2Mtb21hcDNldm0ubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUDM1MTdFVk0pICs9IHNuZC1zb2MtYW0zNTE3ZXZtLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDJFVk0pICs9IHNuZC1zb2Mtb21hcDJldm0ubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM0VWTSkgKz0gc25kLXNvYy1vbWFwM2V2bS5vCitvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzNTE3RVZNKSArPSBzbmQtc29jLWFtMzUxN2V2bS5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX1NEUDM0MzApICs9IHNuZC1zb2Mtc2RwMzQzMC5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkEpICs9IHNuZC1zb2Mtb21hcDNwYW5kb3JhLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFKSArPSBzbmQtc29jLW9tYXAzYmVhZ2xlLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwppbmRleCBjMDcxZjk2Li4zYzg1YzBmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CkBAIC0zMjEsMTEgKzMyMSwxMSBAQAogCSoodW5zaWduZWQgaW50ICopc2RwMzQzMF9kYWlbMV0uY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gMjsgLyogTWNCU1AzICovCiAKIAkvKiBTZXQgVFdMNDAzMCBHUElPNiBhcyBFWFRNVVRFIHNpZ25hbCAqLwotCXR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfSU5UQlIsICZwaW5fbXV4LAorCXR3bF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9JTlRCUiwgJnBpbl9tdXgsCiAJCQkJCQlUV0w0MDMwX0lOVEJSX1BNQlIxKTsKIAlwaW5fbXV4ICY9IH5UV0w0MDMwX0dQSU82X1BXTTBfTVVURSgweDAzKTsKIAlwaW5fbXV4IHw9IFRXTDQwMzBfR1BJTzZfUFdNMF9NVVRFKDB4MDIpOwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCBwaW5fbXV4LAorCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfSU5UQlIsIHBpbl9tdXgsCiAJCQkJCQlUV0w0MDMwX0lOVEJSX1BNQlIxKTsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc2RwMzQzMF9zbmRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlYy5jCmluZGV4IGQ0NDFjM2IuLjQ5ODQ3NTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBkZXZfcG1fb3BzIHNpbXRlY19hdWRpb19wbW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNpbXRlY19hdWRpb19wbW9wcyA9IHsKIAkucmVzdW1lCT0gc2ltdGVjX2F1ZGlvX3Jlc3VtZSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzaW10ZWNfYXVkaW9fcG1vcHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmgKaW5kZXggMjcxNDIwMy4uZTE4ZmFlZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuaAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlYy5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gaW50IHNpbXRlY19hdWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKICNpZmRlZiBDT05GSUdfUE0KLWV4dGVybiBzdHJ1Y3QgZGV2X3BtX29wcyBzaW10ZWNfYXVkaW9fcG1vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2ltdGVjX2F1ZGlvX3Btb3BzOwogI2RlZmluZSBzaW10ZWNfYXVkaW9fcG0gJnNpbXRlY19hdWRpb19wbW9wcwogI2Vsc2UKICNkZWZpbmUgc2ltdGVjX2F1ZGlvX3BtIE5VTEwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCA5YzQ5YzExLi40MjgxM2I4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC04NzYsNyArODc2LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIXJlcyB8fCAhaXJxKSB7CisJaWYgKCFyZXMgfHwgKGludClpcnEgPD0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3QgZW5vdWdoIEZTSSBwbGF0Zm9ybSByZXNvdXJjZXMuXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCBlZjhmMjgyLi4wYTY0NDBjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNvY19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc29jX3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHNvY19zdXNwZW5kLAogCS5yZXN1bWUgPSBzb2NfcmVzdW1lLAogCS5wb3dlcm9mZiA9IHNvY19wb3dlcm9mZiwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggYjA3NGE1OS4uNDk2M2RlZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTc1Miw3ICs3NTIsNyBAQAogCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgbGFyZ2UgZW5vdWdoICovCiAJCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKIAl9Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKHNpemUpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwogCWlmICghcnVudGltZS0+ZG1hX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWRpZmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzRlMjAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dApAQCAtMCwwICsxLDU1IEBACitwZXJmLWRpZmYoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtZGlmZiAtIFJlYWQgdHdvIHBlcmYuZGF0YSBmaWxlcyBhbmQgZGlzcGxheSB0aGUgZGlmZmVyZW50aWFsIHByb2ZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBkaWZmJyBbb2xkZmlsZV0gW25ld2ZpbGVdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGRpc3BsYXlzIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGFtb25nc3QgdHdvIHBlcmYuZGF0YSBmaWxlcworY2FwdHVyZWQgdmlhIHBlcmYgcmVjb3JkLgorCitJZiBubyBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaXQgd2lsbCBhc3N1bWUgcGVyZi5kYXRhLm9sZCBhbmQgcGVyZi5kYXRhLgorCitPUFRJT05TCistLS0tLS0tCistZDo6CistLWRzb3M9OjoKKwlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKKwlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KKworLUM6OgorLS1jb21tcz06OgorCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKKwlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KKworLVM6OgorLS1zeW1ib2xzPTo6CisJT25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzLiBDU1YgdGhhdCB1bmRlcnN0YW5kcworCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLgorCistczo6CistLXNvcnQ9OjoKKwlTb3J0IGJ5IGtleShzKTogcGlkLCBjb21tLCBkc28sIHN5bWJvbC4KKworLXQ6OgorLS1maWVsZC1zZXBhcmF0b3I9OjoKKworCVVzZSBhIHNwZWNpYWwgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQgZG9uJ3QgcGFkIHdpdGggc3BhY2VzLCByZXBsYWNpbmcKKwlhbGwgb2NjdXJhbmNlcyBvZiB0aGlzIHNlcGFyYXRvciBpbiBzeW1ib2wgbmFtZXMgKGFuZCBvdGhlciBvdXRwdXQpCisJd2l0aCBhICcuJyBjaGFyYWN0ZXIsIHRoYXQgdGh1cyBpdCdzIHRoZSBvbmx5IG5vbiB2YWxpZCBzZXBhcmF0b3IuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgdmVyYm9zZSwgZm9yIGluc3RhbmNlLCBzaG93IHRoZSByYXcgY291bnRzIGluIGFkZGl0aW9uIHRvIHRoZQorCWRpZmYuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWttZW0udHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYta21lbS50eHQKaW5kZXggNDRiMGNlMy4uZWFjNGQ4NTJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1rbWVtLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1rbWVtLnR4dApAQCAtOCwxNiArOCwxNiBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0ncGVyZiBrbWVtJyB7cmVjb3JkfSBbPG9wdGlvbnM+XQorJ3BlcmYga21lbScge3JlY29yZHxzdGF0fSBbPG9wdGlvbnM+XQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVRoZXJlJ3MgdHdvIHZhcmlhbnRzIG9mIHBlcmYga21lbToKK1RoZXJlIGFyZSB0d28gdmFyaWFudHMgb2YgcGVyZiBrbWVtOgogCiAgICdwZXJmIGttZW0gcmVjb3JkIDxjb21tYW5kPicgdG8gcmVjb3JkIHRoZSBrbWVtIGV2ZW50cwogICBvZiBhbiBhcmJpdHJhcnkgd29ya2xvYWQuCiAKLSAgJ3BlcmYga21lbScgdG8gcmVwb3J0IGtlcm5lbCBtZW1vcnkgc3RhdGlzdGljcy4KKyAgJ3BlcmYga21lbSBzdGF0JyB0byByZXBvcnQga2VybmVsIG1lbW9yeSBzdGF0aXN0aWNzLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC0yNSw4ICsyNSwxMSBAQAogLS1pbnB1dD08ZmlsZT46OgogCVNlbGVjdCB0aGUgaW5wdXQgZmlsZSAoZGVmYXVsdDogcGVyZi5kYXRhKQogCi0tLXN0YXQ9PGNhbGxlcnxhbGxvYz46OgotCVNlbGVjdCBwZXIgY2FsbHNpdGUgb3IgcGVyIGFsbG9jYXRpb24gc3RhdGlzdGljcworLS1jYWxsZXI6OgorCVNob3cgcGVyLWNhbGxzaXRlIHN0YXRpc3RpY3MKKworLS1hbGxvYzo6CisJU2hvdyBwZXItYWxsb2NhdGlvbiBzdGF0aXN0aWNzCiAKIC1zIDxrZXlbLGtleTIuLi5dPjo6CiAtLXNvcnQ9PGtleVssa2V5Mi4uLl0+OjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAppbmRleCA5MjcwNTk0Li4yNTBlMzkxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CkBAIC04LDEwICs4LDEzIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdwZXJmIHByb2JlJyBbb3B0aW9uc10gLS1hZGQgJ1BST0JFJyBbLS1hZGQgJ1BST0JFJyAuLi5dCisncGVyZiBwcm9iZScgW29wdGlvbnNdIC0tYWRkPSdQUk9CRScgWy4uLl0KIG9yCi0ncGVyZiBwcm9iZScgW29wdGlvbnNdICdQUk9CRScgWydQUk9CRScgLi4uXQotCisncGVyZiBwcm9iZScgW29wdGlvbnNdIFBST0JFCitvcgorJ3BlcmYgcHJvYmUnIFtvcHRpb25zXSAtLWRlbD0nW0dST1VQOl1FVkVOVCcgWy4uLl0KK29yCisncGVyZiBwcm9iZScgLS1saXN0CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzEsMTUgKzM0LDI0IEBACiAgICAgICAgIEJlIG1vcmUgdmVyYm9zZSAoc2hvdyBwYXJzZWQgYXJndW1lbnRzLCBldGMpLgogCiAtYTo6Ci0tLWFkZDo6Ci0JRGVmaW5lIGEgcHJvYmUgcG9pbnQgKHNlZSBQUk9CRSBTWU5UQVggZm9yIGRldGFpbCkKKy0tYWRkPTo6CisJRGVmaW5lIGEgcHJvYmUgZXZlbnQgKHNlZSBQUk9CRSBTWU5UQVggZm9yIGRldGFpbCkuCisKKy1kOjoKKy0tZGVsPTo6CisJRGVsZXRlIGEgcHJvYmUgZXZlbnQuCisKKy1sOjoKKy0tbGlzdDo6CisJTGlzdCB1cCBjdXJyZW50IHByb2JlIGV2ZW50cy4KIAogUFJPQkUgU1lOVEFYCiAtLS0tLS0tLS0tLS0KIFByb2JlIHBvaW50cyBhcmUgZGVmaW5lZCBieSBmb2xsb3dpbmcgc3ludGF4LgogCi0gIkZVTkNbK09GRlN8OlJMTnwlcmV0dXJuXVtAU1JDXXxTUkM6QUxOIFtBUkcgLi4uXSIKKyAiW0VWRU5UPV1GVU5DWytPRkZTfDpSTE58JXJldHVybl1bQFNSQ118U1JDOkFMTiBbQVJHIC4uLl0iCiAKKydFVkVOVCcgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIG5ldyBldmVudCwgaWYgb21pdHRlZCwgaXQgd2lsbCBiZSBzZXQgdGhlIG5hbWUgb2YgdGhlIHByb2JlZCBmdW5jdGlvbi4gQ3VycmVudGx5LCBldmVudCBncm91cCBuYW1lIGlzIHNldCBhcyAncHJvYmUnLgogJ0ZVTkMnIHNwZWNpZmllcyBhIHByb2JlZCBmdW5jdGlvbiBuYW1lLCBhbmQgaXQgbWF5IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczsgJytPRkZTJyBpcyB0aGUgb2Zmc2V0IGZyb20gZnVuY3Rpb24gZW50cnkgYWRkcmVzcyBpbiBieXRlcywgJ1JMTicgaXMgdGhlIHJlbGF0aXZlLWxpbmUgbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkgbGluZSwgYW5kICclcmV0dXJuJyBtZWFucyB0aGF0IGl0IHByb2JlcyBmdW5jdGlvbiByZXR1cm4uIEluIGFkZGl0aW9uLCAnU1JDJyBzcGVjaWZpZXMgYSBzb3VyY2UgZmlsZSB3aGljaCBoYXMgdGhhdCBmdW5jdGlvbi4KIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhIHByb2JlIHBvaW50IGJ5IHRoZSBzb3VyY2UgbGluZSBudW1iZXIgYnkgdXNpbmcgJ1NSQzpBTE4nIHN5bnRheCwgd2hlcmUgJ1NSQycgaXMgdGhlIHNvdXJjZSBmaWxlIHBhdGggYW5kICdBTE4nIGlzIHRoZSBsaW5lIG51bWJlci4KICdBUkcnIHNwZWNpZmllcyB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHJvYmUgcG9pbnQuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBvciBrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCAoZS5nLiAkcmV0dmFsLCAlYXgsIGV0YykuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAppbmRleCA5ZGNjYjE4Li5hYmZhYmU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKQEAgLTM5LDYgKzM5LDEwIEBACiAJT25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzLiBDU1YgdGhhdCB1bmRlcnN0YW5kcwogCWZpbGU6Ly9maWxlbmFtZSBlbnRyaWVzLgogCistczo6CistLXNvcnQ9OjoKKwlTb3J0IGJ5IGtleShzKTogcGlkLCBjb21tLCBkc28sIHN5bWJvbCwgcGFyZW50LgorCiAtdzo6CiAtLWZpZWxkLXdpZHRoPTo6CiAJRm9yY2UgZWFjaCBjb2x1bW4gd2lkdGggdG8gdGhlIHByb3ZpZGVkIGxpc3QsIGZvciBsYXJnZSB0ZXJtaW5hbApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CmluZGV4IDA3MDY1ZWYuLjYwZTU5MDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKQEAgLTgsMTggKzgsNDMgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ3BlcmYgdHJhY2UnIFstaSA8ZmlsZT4gfCAtLWlucHV0PWZpbGVdIHN5bWJvbF9uYW1lCisncGVyZiB0cmFjZScge3JlY29yZCA8c2NyaXB0PiB8IHJlcG9ydCA8c2NyaXB0PiBbYXJnc10gfQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIFRoaXMgY29tbWFuZCByZWFkcyB0aGUgaW5wdXQgZmlsZSBhbmQgZGlzcGxheXMgdGhlIHRyYWNlIHJlY29yZGVkLgogCitUaGVyZSBhcmUgc2V2ZXJhbCB2YXJpYW50cyBvZiBwZXJmIHRyYWNlOgorCisgICdwZXJmIHRyYWNlJyB0byBzZWUgYSBkZXRhaWxlZCB0cmFjZSBvZiB0aGUgd29ya2xvYWQgdGhhdCB3YXMKKyAgcmVjb3JkZWQuCisKKyAgJ3BlcmYgdHJhY2UgcmVjb3JkIDxzY3JpcHQ+JyB0byByZWNvcmQgdGhlIGV2ZW50cyByZXF1aXJlZCBmb3IgJ3BlcmYKKyAgdHJhY2UgcmVwb3J0Jy4gIDxzY3JpcHQ+IGlzIHRoZSBuYW1lIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IG9mCisgICdwZXJmIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueSBsYW5ndWFnZQorICBleHRlbnNpb24uCisKKyAgJ3BlcmYgdHJhY2UgcmVwb3J0IDxzY3JpcHQ+JyB0byBydW4gYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHMgb2YKKyAgPHNjcmlwdD4uICA8c2NyaXB0PiBpcyB0aGUgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCBvZiAncGVyZgorICB0cmFjZSAtLWxpc3QnIGkuZS4gdGhlIGFjdHVhbCBzY3JpcHQgbmFtZSBtaW51cyBhbnkgbGFuZ3VhZ2UKKyAgZXh0ZW5zaW9uLiAgVGhlIHBlcmYuZGF0YSBvdXRwdXQgZnJvbSBhIHByZXZpb3VzIHJ1biBvZiAncGVyZiB0cmFjZQorICByZWNvcmQgPHNjcmlwdD4nIGlzIHVzZWQgYW5kIHNob3VsZCBiZSBwcmVzZW50IGZvciB0aGlzIGNvbW1hbmQgdG8KKyAgc3VjY2VlZC4KKwogT1BUSU9OUwogLS0tLS0tLQogLUQ6OgogLS1kdW1wLXJhdy10cmFjZT06OgogICAgICAgICBEaXNwbGF5IHZlcmJvc2UgZHVtcCBvZiB0aGUgdHJhY2UgZGF0YS4KIAorLUw6OgorLS1MYXRlbmN5PTo6CisgICAgICAgIFNob3cgbGF0ZW5jeSBhdHRyaWJ1dGVzIChpcnFzL3ByZWVtcHRpb24gZGlzYWJsZWQsIGV0YykuCisKKy1sOjoKKy0tbGlzdD06OgorICAgICAgICBEaXNwbGF5IGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0cy4KKwogLXM6OgogLS1zY3JpcHQ9OjoKICAgICAgICAgUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggdGhlIGdpdmVuIHNjcmlwdCAoW2xhbmddOnNjcmlwdFsuZXh0XSkuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyM2VjNjYwOS4uNDM5MGQyMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yMzcsOCArMjM3LDggQEAKIAogZXhwb3J0IHByZWZpeCBiaW5kaXIgc2hhcmVkaXIgc3lzY29uZmRpcgogCi1DQyA9IGdjYwotQVIgPSBhcgorQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjCitBUiA9ICQoQ1JPU1NfQ09NUElMRSlhcgogUk0gPSBybSAtZgogVEFSID0gdGFyCiBGSU5EID0gZmluZApAQCAtMzU2LDcgKzM1Niw5IEBACiBMSUJfSCArPSB1dGlsL3BhcnNlLWV2ZW50cy5oCiBMSUJfSCArPSB1dGlsL3F1b3RlLmgKIExJQl9IICs9IHV0aWwvdXRpbC5oCitMSUJfSCArPSB1dGlsL2hlYWRlci5oCiBMSUJfSCArPSB1dGlsL2hlbHAuaAorTElCX0ggKz0gdXRpbC9zZXNzaW9uLmgKIExJQl9IICs9IHV0aWwvc3RyYnVmLmgKIExJQl9IICs9IHV0aWwvc3RyaW5nLmgKIExJQl9IICs9IHV0aWwvc3RybGlzdC5oCkBAIC0zNjgsNyArMzcwLDYgQEAKIExJQl9IICs9IHV0aWwvc29ydC5oCiBMSUJfSCArPSB1dGlsL2hpc3QuaAogTElCX0ggKz0gdXRpbC90aHJlYWQuaAotTElCX0ggKz0gdXRpbC9kYXRhX21hcC5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWZpbmRlci5oCiBMSUJfSCArPSB1dGlsL3Byb2JlLWV2ZW50LmgKIApAQCAtNDA1LDYgKzQwNiw3IEBACiBMSUJfT0JKUyArPSB1dGlsL3ZhbHVlcy5vCiBMSUJfT0JKUyArPSB1dGlsL2RlYnVnLm8KIExJQl9PQkpTICs9IHV0aWwvbWFwLm8KK0xJQl9PQkpTICs9IHV0aWwvc2Vzc2lvbi5vCiBMSUJfT0JKUyArPSB1dGlsL3RocmVhZC5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXBhcnNlLm8KIExJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcmVhZC5vCkBAIC00MjUsNiArNDI3LDcgQEAKIEJVSUxUSU5fT0JKUyArPSBiZW5jaC9zY2hlZC1waXBlLm8KIEJVSUxUSU5fT0JKUyArPSBiZW5jaC9tZW0tbWVtY3B5Lm8KIAorQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tZGlmZi5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1oZWxwLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXNjaGVkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWJ1aWxkaWQtbGlzdC5vCkBAIC00ODQsMTYgKzQ4NywxOSBAQAogCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOwogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmR3YXJmL2R3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi9saWJkd2FyZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmZfRGVidWcgZGJnOyBEd2FyZl9FcnJvciBlcnI7IER3YXJmX1JhbmdlcyAqcm5nOyBkd2FyZl9pbml0KDAsIERXX0RMQ19SRUFELCAwLCAwLCAmZGJnLCAmZXJyKTsgZHdhcmZfZ2V0X3JhbmdlcyhkYmcsIDAsICZybmcsIDAsIDAsICZlcnIpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbGR3YXJmIC1sZWxmIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQoraWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2lmbmRlZiBfTUlQU19TWkxPTkcnOyBlY2hvICdcI2RlZmluZSBfTUlQU19TWkxPTkcgMCc7IGVjaG8gJ1wjZW5kaWYnOyBlY2hvICdcI2luY2x1ZGUgPGR3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmZfRGVidWcgZGJnOyBEd2FyZl9FcnJvciBlcnI7IER3YXJmX1JhbmdlcyAqcm5nOyBkd2FyZl9pbml0KDAsIERXX0RMQ19SRUFELCAwLCAwLCAmZGJnLCAmZXJyKTsgZHdhcmZfZ2V0X3JhbmdlcyhkYmcsIDAsICZybmcsIDAsIDAsICZlcnIpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSS91c3IvaW5jbHVkZS9saWJkd2FyZiAtbGR3YXJmIC1sZWxmIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQogCW1zZyA6PSAkKHdhcm5pbmcgTm8gbGliZHdhcmYuaCBmb3VuZCBvciBvbGQgbGliZHdhcmYuaCBmb3VuZCwgZGlzYWJsZXMgZHdhcmYgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgbGliZHdhcmYtZGV2L2xpYmR3YXJmLWRldmVsID49IDIwMDgxMjMxKTsKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJEV0FSRgogZWxzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9saWJkd2FyZgogCUVYVExJQlMgKz0gLWxlbGYgLWxkd2FyZgogCUxJQl9PQkpTICs9IHV0aWwvcHJvYmUtZmluZGVyLm8KIGVuZGlmCiAKK2lmbmRlZiBOT19MSUJQRVJMCiBQRVJMX0VNQkVEX0xET1BUUyA9IGBwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGxkb3B0cyAyPi9kZXYvbnVsbGAKIFBFUkxfRU1CRURfQ0NPUFRTID0gYHBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzIDI+L2Rldi9udWxsYAorZW5kaWYKIAogaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPEVYVEVSTi5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8cGVybC5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgcGVybF9hbGxvYygpOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoUEVSTF9FTUJFRF9DQ09QVFMpIC1vIC9kZXYvbnVsbCAkKFBFUkxfRU1CRURfTERPUFRTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQogCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBFUkwKQEAgLTk5MSw4ICs5OTcsNiBAQAogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsLyoucGwgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybCcKIAkkKElOU1RBTEwpIHNjcmlwdHMvcGVybC9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKLQkkKElOU1RBTEwpIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvTWFrZWZpbGUuUEwgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwnCi0JJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL1JFQURNRSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbCcKIGlmZGVmIEJVSUxUX0lOUwogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpICQoQlVJTFRfSU5TKSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2JlbmNoL3NjaGVkLW1lc3NhZ2luZy5jIGIvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1tZXNzYWdpbmcuYwppbmRleCA2MDVhMmE5Li44MWNlZTc4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2JlbmNoL3NjaGVkLW1lc3NhZ2luZy5jCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtbWVzc2FnaW5nLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIGJ1aWx0aW4tYmVuY2gtbWVzc2FnaW5nLmMKKyAqIHNjaGVkLW1lc3NhZ2luZy5jCiAgKgogICogbWVzc2FnaW5nOiBCZW5jaG1hcmsgZm9yIHNjaGVkdWxlciBhbmQgSVBDIG1lY2hhbmlzbXMKICAqCkBAIC0zMjAsMTAgKzMyMCwxMiBAQAogCQkgICAgICAgbnVtX2dyb3VwcywgbnVtX2dyb3VwcyAqIDIgKiBudW1fZmRzLAogCQkgICAgICAgdGhyZWFkX21vZGUgPyAidGhyZWFkcyIgOiAicHJvY2Vzc2VzIik7CiAJCXByaW50ZigiICUxNHM6ICVsdS4lMDNsdSBbc2VjXVxuIiwgIlRvdGFsIHRpbWUiLAotCQkgICAgICAgZGlmZi50dl9zZWMsIGRpZmYudHZfdXNlYy8xMDAwKTsKKwkJICAgICAgIGRpZmYudHZfc2VjLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIChkaWZmLnR2X3VzZWMvMTAwMCkpOwogCQlicmVhazsKIAljYXNlIEJFTkNIX0ZPUk1BVF9TSU1QTEU6Ci0JCXByaW50ZigiJWx1LiUwM2x1XG4iLCBkaWZmLnR2X3NlYywgZGlmZi50dl91c2VjLzEwMDApOworCQlwcmludGYoIiVsdS4lMDNsdVxuIiwgZGlmZi50dl9zZWMsCisJCSAgICAgICAodW5zaWduZWQgbG9uZykgKGRpZmYudHZfdXNlYy8xMDAwKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHJlYWNoaW5nIGhlcmUgaXMgc29tZXRoaW5nIGRpc2FzdGVyICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2JlbmNoL3NjaGVkLXBpcGUuYyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jCmluZGV4IDIzODE4NWYuLjRmNzdjN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBidWlsdGluLWJlbmNoLXBpcGUuYworICogc2NoZWQtcGlwZS5jCiAgKgogICogcGlwZTogQmVuY2htYXJrIGZvciBwaXBlKCkKICAqCkBAIC04Nyw3ICs4Nyw4IEBACiAJaWYgKHBpZCkgewogCQlyZXRwaWQgPSB3YWl0cGlkKHBpZCwgJndhaXRfc3RhdCwgMCk7CiAJCWFzc2VydCgocmV0cGlkID09IHBpZCkgJiYgV0lGRVhJVEVEKHdhaXRfc3RhdCkpOwotCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlleGl0KDApOwogCX0KIAogCXN3aXRjaCAoYmVuY2hfZm9ybWF0KSB7CkBAIC05OSw3ICsxMDAsOCBAQAogCQlyZXN1bHRfdXNlYyArPSBkaWZmLnR2X3VzZWM7CiAKIAkJcHJpbnRmKCIgJTE0czogJWx1LiUwM2x1IFtzZWNdXG5cbiIsICJUb3RhbCB0aW1lIiwKLQkJICAgICAgIGRpZmYudHZfc2VjLCBkaWZmLnR2X3VzZWMvMTAwMCk7CisJCSAgICAgICBkaWZmLnR2X3NlYywKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKSAoZGlmZi50dl91c2VjLzEwMDApKTsKIAogCQlwcmludGYoIiAlMTRsZiB1c2Vjcy9vcFxuIiwKIAkJICAgICAgIChkb3VibGUpcmVzdWx0X3VzZWMgLyAoZG91YmxlKWxvb3BzKTsKQEAgLTExMCw3ICsxMTIsOCBAQAogCiAJY2FzZSBCRU5DSF9GT1JNQVRfU0lNUExFOgogCQlwcmludGYoIiVsdS4lMDNsdVxuIiwKLQkJICAgICAgIGRpZmYudHZfc2VjLCBkaWZmLnR2X3VzZWMgLyAxMDAwKTsKKwkJICAgICAgIGRpZmYudHZfc2VjLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIChkaWZmLnR2X3VzZWMgLyAxMDAwKSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKaW5kZXggMGJmMmU4ZjkuLjU5M2ZmMjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKICNpbmNsdWRlICJ1dGlsL3NvcnQuaCIKICNpbmNsdWRlICJ1dGlsL2hpc3QuaCIKLSNpbmNsdWRlICJ1dGlsL2RhdGFfbWFwLmgiCisjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCiAKIHN0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogCkBAIC01MSwxMSArNTEsNiBAQAogCXN0cnVjdCBzeW1fZXh0CSpleHQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mID0gewotCS5wcml2X3NpemUJICA9IHNpemVvZihzdHJ1Y3Qgc3ltX3ByaXYpLAotCS50cnlfdm1saW51eF9wYXRoID0gdHJ1ZSwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpzeW1faGlzdF9maWx0ZXI7CiAKIHN0YXRpYyBpbnQgc3ltYm9sX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAgX191c2VkLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCkBAIC0xMjEsMzAgKzExNiwzMiBAQAogCQkJaC0+aXBbb2Zmc2V0XSk7CiB9CiAKLXN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fYWRkKHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgdTY0IGNvdW50KQorc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgdTY0IGNvdW50KQogewogCWJvb2wgaGl0OwotCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IF9faGlzdF9lbnRyeV9fYWRkKGFsLCBOVUxMLCBjb3VudCwgJmhpdCk7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlbGYsIGFsLCBOVUxMLAorCQkJCQkJCSAgICAgICBjb3VudCwgJmhpdCk7CiAJaWYgKGhlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWhpc3RfaGl0KGhlLCBhbC0+YWRkcik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCitzdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCiAJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJXBcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKIAkJICAgIGV2ZW50LT5pcC5waWQsICh2b2lkICopKGxvbmcpZXZlbnQtPmlwLmlwKTsKIAotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsICZhbCwgc3ltYm9sX2ZpbHRlcikgPCAwKSB7CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDApIHsKIAkJZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoaGlzdF9lbnRyeV9fYWRkKCZhbCwgMSkpIHsKKwlpZiAoIWFsLmZpbHRlcmVkICYmIHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCAxKSkgewogCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgIgogCQkJCSJza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTQyOCwxMSArNDI1LDExIEBACiAJCWZyZWVfc291cmNlX2xpbmUoaGUsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmRfYW5ub3RhdGlvbnModm9pZCkKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fZmluZF9hbm5vdGF0aW9ucyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWZvciAobmQgPSByYl9maXJzdCgmb3V0cHV0X2hpc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPmhpc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKIAkJc3RydWN0IHN5bV9wcml2ICpwcml2OwogCkBAIC00NTMsNyArNDUwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7CiAJLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCiAJLnByb2Nlc3NfbW1hcF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCiAJLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCkBAIC00NjIsMzMgKzQ1OSwzMyBAQAogCiBzdGF0aWMgaW50IF9fY21kX2Fubm90YXRlKHZvaWQpCiB7Ci0Jc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7Ci0Jc3RydWN0IHRocmVhZCAqaWRsZTsKIAlpbnQgcmV0OworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CiAKLQlpZGxlID0gcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKLQlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlKTsKKwlpZiAoc2Vzc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIDAsIDAsCi0JCQkJICAgICAgJmV2ZW50X19jd2RsZW4sICZldmVudF9fY3dkKTsKKwlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2RlbGV0ZTsKIAogCWlmIChkdW1wX3RyYWNlKSB7CiAJCWV2ZW50X19wcmludF90b3RhbHMoKTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X2RlbGV0ZTsKIAl9CiAKIAlpZiAodmVyYm9zZSA+IDMpCi0JCXRocmVhZHNfX2ZwcmludGYoc3Rkb3V0KTsKKwkJcGVyZl9zZXNzaW9uX19mcHJpbnRmKHNlc3Npb24sIHN0ZG91dCk7CiAKIAlpZiAodmVyYm9zZSA+IDIpCiAJCWRzb3NfX2ZwcmludGYoc3Rkb3V0KTsKIAotCWNvbGxhcHNlX19yZXNvcnQoKTsKLQlvdXRwdXRfX3Jlc29ydChldmVudF9fdG90YWxbMF0pOwotCi0JZmluZF9hbm5vdGF0aW9ucygpOworCXBlcmZfc2Vzc2lvbl9fY29sbGFwc2VfcmVzb3J0KHNlc3Npb24pOworCXBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzZXNzaW9uLCBzZXNzaW9uLT5ldmVudF90b3RhbFswXSk7CisJcGVyZl9zZXNzaW9uX19maW5kX2Fubm90YXRpb25zKHNlc3Npb24pOworb3V0X2RlbGV0ZToKKwlwZXJmX3Nlc3Npb25fX2RlbGV0ZShzZXNzaW9uKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01MTksMjkgKzUxNiwxNyBAQAogCU9QVF9FTkQoKQogfTsKIAotc3RhdGljIHZvaWQgc2V0dXBfc29ydGluZyh2b2lkKQotewotCWNoYXIgKnRtcCwgKnRvaywgKnN0ciA9IHN0cmR1cChzb3J0X29yZGVyKTsKLQotCWZvciAodG9rID0gc3RydG9rX3Ioc3RyLCAiLCAiLCAmdG1wKTsKLQkJCXRvazsgdG9rID0gc3RydG9rX3IoTlVMTCwgIiwgIiwgJnRtcCkpIHsKLQkJaWYgKHNvcnRfZGltZW5zaW9uX19hZGQodG9rKSA8IDApIHsKLQkJCWVycm9yKCJVbmtub3duIC0tc29ydCBrZXk6IGAlcyciLCB0b2spOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGFubm90YXRlX3VzYWdlLCBvcHRpb25zKTsKLQkJfQotCX0KLQotCWZyZWUoc3RyKTsKLX0KLQogaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0JaWYgKHN5bWJvbF9faW5pdCgmc3ltYm9sX2NvbmYpIDwgMCkKLQkJcmV0dXJuIC0xOwotCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYW5ub3RhdGVfdXNhZ2UsIDApOwogCi0Jc2V0dXBfc29ydGluZygpOworCXN5bWJvbF9jb25mLnByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3ltX3ByaXYpOworCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOworCisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfc29ydGluZyhhbm5vdGF0ZV91c2FnZSwgb3B0aW9ucyk7CiAKIAlpZiAoYXJnYykgewogCQkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJlbmNoLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYmVuY2guYwppbmRleCBlMDQzZWI4Li40Njk5Njc3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYmVuY2guYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYmVuY2guYwpAQCAtMzEsNiArMzEsOSBAQAogCWNvbnN0IGNoYXIgKnN1bW1hcnk7CiAJaW50ICgqZm4pKGludCwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqKTsKIH07CisJCQkJCQlcCisvKiBzZW50aW5lbDogZWFzeSBmb3IgaGVscCAqLworI2RlZmluZSBzdWl0ZV9hbGwgeyAiYWxsIiwgInRlc3QgYWxsIHN1aXRlIChwc2V1ZG8gc3VpdGUpIiwgTlVMTCB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmVuY2hfc3VpdGUgc2NoZWRfc3VpdGVzW10gPSB7CiAJeyAibWVzc2FnaW5nIiwKQEAgLTM5LDYgKzQyLDcgQEAKIAl7ICJwaXBlIiwKIAkgICJGbG9vZCBvZiBjb21tdW5pY2F0aW9uIG92ZXIgcGlwZSgpIGJldHdlZW4gdHdvIHByb2Nlc3NlcyIsCiAJICBiZW5jaF9zY2hlZF9waXBlICAgICAgfSwKKwlzdWl0ZV9hbGwsCiAJeyBOVUxMLAogCSAgTlVMTCwKIAkgIE5VTEwgICAgICAgICAgICAgICAgICB9CkBAIC00OCw2ICs1Miw3IEBACiAJeyAibWVtY3B5IiwKIAkgICJTaW1wbGUgbWVtb3J5IGNvcHkgaW4gdmFyaW91cyB3YXlzIiwKIAkgIGJlbmNoX21lbV9tZW1jcHkgfSwKKwlzdWl0ZV9hbGwsCiAJeyBOVUxMLAogCSAgTlVMTCwKIAkgIE5VTEwgICAgICAgICAgICAgfQpAQCAtNjYsNiArNzEsOSBAQAogCXsgIm1lbSIsCiAJICAibWVtb3J5IGFjY2VzcyBwZXJmb3JtYW5jZSIsCiAJICBtZW1fc3VpdGVzIH0sCisJeyAiYWxsIiwJCS8qIHNlbnRpbmVsOiBlYXN5IGZvciBoZWxwICovCisJICAidGVzdCBhbGwgc3Vic3lzdGVtIChwc2V1ZG8gc3Vic3lzdGVtKSIsCisJICBOVUxMIH0sCiAJeyBOVUxMLAogCSAgTlVMTCwKIAkgIE5VTEwgICAgICAgfQpAQCAtNzUsMTEgKzgzLDExIEBACiB7CiAJaW50IGk7CiAKLQlwcmludGYoIkxpc3Qgb2YgYXZhaWxhYmxlIHN1aXRlcyBmb3IgJXMuLi5cblxuIiwKKwlwcmludGYoIiMgTGlzdCBvZiBhdmFpbGFibGUgc3VpdGVzIGZvciAlcy4uLlxuXG4iLAogCSAgICAgICBzdWJzeXN0ZW1zW3N1YnN5c19pbmRleF0ubmFtZSk7CiAKIAlmb3IgKGkgPSAwOyBzdWJzeXN0ZW1zW3N1YnN5c19pbmRleF0uc3VpdGVzW2ldLm5hbWU7IGkrKykKLQkJcHJpbnRmKCJcdCVzOiAlc1xuIiwKKwkJcHJpbnRmKCIlMTRzOiAlc1xuIiwKIAkJICAgICAgIHN1YnN5c3RlbXNbc3Vic3lzX2luZGV4XS5zdWl0ZXNbaV0ubmFtZSwKIAkJICAgICAgIHN1YnN5c3RlbXNbc3Vic3lzX2luZGV4XS5zdWl0ZXNbaV0uc3VtbWFyeSk7CiAKQEAgLTExMCwxMCArMTE4LDEwIEBACiAJCXByaW50ZigiXHQlc1xuIiwgYmVuY2hfdXNhZ2VbaV0pOwogCXByaW50ZigiXG4iKTsKIAotCXByaW50ZigiTGlzdCBvZiBhdmFpbGFibGUgc3Vic3lzdGVtcy4uLlxuXG4iKTsKKwlwcmludGYoIiMgTGlzdCBvZiBhdmFpbGFibGUgc3Vic3lzdGVtcy4uLlxuXG4iKTsKIAogCWZvciAoaSA9IDA7IHN1YnN5c3RlbXNbaV0ubmFtZTsgaSsrKQotCQlwcmludGYoIlx0JXM6ICVzXG4iLAorCQlwcmludGYoIiUxNHM6ICVzXG4iLAogCQkgICAgICAgc3Vic3lzdGVtc1tpXS5uYW1lLCBzdWJzeXN0ZW1zW2ldLnN1bW1hcnkpOwogCXByaW50ZigiXG4iKTsKIH0KQEAgLTEzMSw2ICsxMzksMzcgQEAKIAlyZXR1cm4gQkVOQ0hfRk9STUFUX1VOS05PV047CiB9CiAKK3N0YXRpYyB2b2lkIGFsbF9zdWl0ZShzdHJ1Y3QgYmVuY2hfc3Vic3lzICpzdWJzeXMpCSAgLyogRlJPTSBIRVJFICovCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqYXJndlsyXTsKKwlzdHJ1Y3QgYmVuY2hfc3VpdGUgKnN1aXRlcyA9IHN1YnN5cy0+c3VpdGVzOworCisJYXJndlsxXSA9IE5VTEw7CisJLyoKKwkgKiBUT0RPOgorCSAqIHByZXBhcmluZyBwcmVzZXQgcGFyYW1ldGVycyBmb3IKKwkgKiBlbWJlZGRlZCwgb3JkaW5hcnkgUEMsIEhQQywgZXRjLi4uCisJICogd2lsbCBiZSBoZWxwZnVsCisJICovCisJZm9yIChpID0gMDsgc3VpdGVzW2ldLmZuOyBpKyspIHsKKwkJcHJpbnRmKCIjIFJ1bm5pbmcgJXMvJXMgYmVuY2htYXJrLi4uXG4iLAorCQkgICAgICAgc3Vic3lzLT5uYW1lLAorCQkgICAgICAgc3VpdGVzW2ldLm5hbWUpOworCisJCWFyZ3ZbMV0gPSBzdWl0ZXNbaV0ubmFtZTsKKwkJc3VpdGVzW2ldLmZuKDEsIGFyZ3YsIE5VTEwpOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGxfc3Vic3lzdGVtKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgc3Vic3lzdGVtc1tpXS5zdWl0ZXM7IGkrKykKKwkJYWxsX3N1aXRlKCZzdWJzeXN0ZW1zW2ldKTsKK30KKwogaW50IGNtZF9iZW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7CiAJaW50IGksIGosIHN0YXR1cyA9IDA7CkBAIC0xNTUsNiArMTk0LDExIEBACiAJCWdvdG8gZW5kOwogCX0KIAorCWlmICghc3RyY21wKGFyZ3ZbMF0sICJhbGwiKSkgeworCQlhbGxfc3Vic3lzdGVtKCk7CisJCWdvdG8gZW5kOworCX0KKwogCWZvciAoaSA9IDA7IHN1YnN5c3RlbXNbaV0ubmFtZTsgaSsrKSB7CiAJCWlmIChzdHJjbXAoc3Vic3lzdGVtc1tpXS5uYW1lLCBhcmd2WzBdKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTY1LDYgKzIwOSwxMSBAQAogCQkJZ290byBlbmQ7CiAJCX0KIAorCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKwkJCWFsbF9zdWl0ZSgmc3Vic3lzdGVtc1tpXSk7CisJCQlnb3RvIGVuZDsKKwkJfQorCiAJCWZvciAoaiA9IDA7IHN1YnN5c3RlbXNbaV0uc3VpdGVzW2pdLm5hbWU7IGorKykgewogCQkJaWYgKHN0cmNtcChzdWJzeXN0ZW1zW2ldLnN1aXRlc1tqXS5uYW1lLCBhcmd2WzFdKSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCA3ZGVlOWQxOS4uZTY5M2U2NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwpAQCAtOSwxNyArOSwxNiBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJwZXJmLmgiCiAjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgotI2luY2x1ZGUgInV0aWwvZGF0YV9tYXAuaCIKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCi0jaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKICNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgogCiBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogc3RhdGljIGludCBmb3JjZTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ1aWxkaWRfbGlzdF91c2FnZVtdID0gewotCSJwZXJmIHJlcG9ydCBbPG9wdGlvbnM+XSIsCisJInBlcmYgYnVpbGRpZC1saXN0IFs8b3B0aW9ucz5dIiwKIAlOVUxMCiB9OwogCkBAIC01NSw1NiArNTQsMTggQEAKIHN0YXRpYyBpbnQgX19jbWRfYnVpbGRpZF9saXN0KHZvaWQpCiB7CiAJaW50IGVyciA9IC0xOwotCXN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyOwotCXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyIGZfaGVhZGVyOwotCXN0cnVjdCBzdGF0IGlucHV0X3N0YXQ7Ci0JaW50IGlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7CisJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKIAotCWlmIChpbnB1dCA8IDApIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gb3BlbiBmaWxlOiAlcyIsIGlucHV0X25hbWUpOwotCQlpZiAoIXN0cmNtcChpbnB1dF9uYW1lLCAicGVyZi5kYXRhIikpCi0JCQlwcl9lcnIoIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOwotCQlwcl9lcnIoIlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlKTsKKwlpZiAoc2Vzc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CiAKLQllcnIgPSBmc3RhdChpbnB1dCwgJmlucHV0X3N0YXQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIHN0YXQgZmlsZSIpOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQlpZiAoIWZvcmNlICYmIGlucHV0X3N0YXQuc3RfdWlkICYmIChpbnB1dF9zdGF0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7Ci0JCXByX2VycigiZmlsZSAlcyBub3Qgb3duZWQgYnkgY3VycmVudCB1c2VyIG9yIHJvb3RcbiIsCi0JCSAgICAgICBpbnB1dF9uYW1lKTsKLQkJZ290byBvdXRfY2xvc2U7Ci0JfQotCi0JaWYgKCFpbnB1dF9zdGF0LnN0X3NpemUpIHsKLQkJcHJfaW5mbygiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7Ci0JCWdvdG8gb3V0X2Nsb3NlOwotCX0KLQotCWVyciA9IC0xOwotCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKLQlpZiAoaGVhZGVyID09IE5VTEwpCi0JCWdvdG8gb3V0X2Nsb3NlOwotCi0JaWYgKHBlcmZfZmlsZV9oZWFkZXJfX3JlYWQoJmZfaGVhZGVyLCBoZWFkZXIsIGlucHV0KSA8IDApIHsKLQkJcHJfd2FybmluZygiaW5jb21wYXRpYmxlIGZpbGUgZm9ybWF0Iik7Ci0JCWdvdG8gb3V0X2Nsb3NlOwotCX0KLQotCWVyciA9IHBlcmZfaGVhZGVyX19wcm9jZXNzX3NlY3Rpb25zKGhlYWRlciwgaW5wdXQsCisJZXJyID0gcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoJnNlc3Npb24tPmhlYWRlciwgc2Vzc2lvbi0+ZmQsCiAJCQkJICAgICAgICAgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMpOworCWlmIChlcnIgPj0gMCkKKwkJZHNvc19fZnByaW50Zl9idWlsZGlkKHN0ZG91dCk7CiAKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXRfY2xvc2U7Ci0KLQlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0KTsKLW91dF9jbG9zZToKLQljbG9zZShpbnB1dCk7Ci1vdXQ6CisJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzM2I1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBidWlsdGluLWRpZmYuYworICoKKyAqIEJ1aWx0aW4gZGlmZiBjb21tYW5kOiBBbmFseXplIHR3byBwZXJmLmRhdGEgaW5wdXQgZmlsZXMsIGxvb2sgdXAgYW5kIHJlYWQKKyAqIERTT3MgYW5kIHN5bWJvbCBpbmZvcm1hdGlvbiwgc29ydCB0aGVtIGFuZCBwcm9kdWNlIGEgZGlmZi4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2V2ZW50LmgiCisjaW5jbHVkZSAidXRpbC9oaXN0LmgiCisjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCisjaW5jbHVkZSAidXRpbC9zb3J0LmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgY2hhciBjb25zdCAqaW5wdXRfb2xkID0gInBlcmYuZGF0YS5vbGQiLAorCQkgICppbnB1dF9uZXcgPSAicGVyZi5kYXRhIjsKK3N0YXRpYyBjaGFyCSAgZGlmZl9fZGVmYXVsdF9zb3J0X29yZGVyW10gPSAiZHNvLHN5bWJvbCI7CitzdGF0aWMgaW50ICBmb3JjZTsKK3N0YXRpYyBib29sIHNob3dfZGlzcGxhY2VtZW50OworCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLCB1NjQgY291bnQpCit7CisJYm9vbCBoaXQ7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlbGYsIGFsLCBOVUxMLAorCQkJCQkJCSAgICAgICBjb3VudCwgJmhpdCk7CisJaWYgKGhlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGhpdCkKKwkJaGUtPmNvdW50ICs9IGNvdW50OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9fcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IC5wZXJpb2QgPSAxLCB9OworCisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJXBcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKKwkJICAgIGV2ZW50LT5pcC5waWQsICh2b2lkICopKGxvbmcpZXZlbnQtPmlwLmlwKTsKKworCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJICAgZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhbC5maWx0ZXJlZCkKKwkJcmV0dXJuIDA7CisKKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOworCisJaWYgKGFsLnN5bSAmJiBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgZGF0YS5wZXJpb2QpKSB7CisJCXByX3dhcm5pbmcoInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgc2tpcHBpbmcgZXZlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2Vzc2lvbi0+ZXZlbnRzX3N0YXRzLnRvdGFsICs9IGRhdGEucGVyaW9kOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKKwkucHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkucHJvY2Vzc19tbWFwX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19tbWFwLAorCS5wcm9jZXNzX2NvbW1fZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLnByb2Nlc3NfZXhpdF9ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkucHJvY2Vzc19mb3JrX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5wcm9jZXNzX2xvc3RfZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX2xvc3QsCit9OworCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX2luc2VydF9oaXN0X2VudHJ5X2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCisJCQkJCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBoaXN0X2VudHJ5ICppdGVyOworCisJd2hpbGUgKCpwICE9IE5VTEwpIHsKKwkJaW50IGNtcDsKKwkJcGFyZW50ID0gKnA7CisJCWl0ZXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKworCQljbXAgPSBzdHJjbXAoaGUtPm1hcC0+ZHNvLT5uYW1lLCBpdGVyLT5tYXAtPmRzby0+bmFtZSk7CisJCWlmIChjbXAgPiAwKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPCAwKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQljbXAgPSBzdHJjbXAoaGUtPnN5bS0+bmFtZSwgaXRlci0+c3ltLT5uYW1lKTsKKwkJCWlmIChjbXAgPiAwKQorCQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJCWVsc2UKKwkJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQl9CisJfQorCisJcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCByb290KTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19yZXNvcnRfYnlfbmFtZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXVuc2lnbmVkIGxvbmcgcG9zaXRpb24gPSAxOworCXN0cnVjdCByYl9yb290IHRtcCA9IFJCX1JPT1Q7CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdCgmc2VsZi0+aGlzdHMpOworCisJd2hpbGUgKG5leHQgIT0gTlVMTCkgeworCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqbiA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKworCQluZXh0ID0gcmJfbmV4dCgmbi0+cmJfbm9kZSk7CisJCXJiX2VyYXNlKCZuLT5yYl9ub2RlLCAmc2VsZi0+aGlzdHMpOworCQluLT5wb3NpdGlvbiA9IHBvc2l0aW9uKys7CisJCXBlcmZfc2Vzc2lvbl9faW5zZXJ0X2hpc3RfZW50cnlfYnlfbmFtZSgmdG1wLCBuKTsKKwl9CisKKwlzZWxmLT5oaXN0cyA9IHRtcDsKK30KKworc3RhdGljIHN0cnVjdCBoaXN0X2VudHJ5ICoKK3BlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5X2J5X25hbWUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSBzZWxmLT5oaXN0cy5yYl9ub2RlOworCisJd2hpbGUgKG4pIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKml0ZXIgPSByYl9lbnRyeShuLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCWludCBjbXAgPSBzdHJjbXAoaGUtPm1hcC0+ZHNvLT5uYW1lLCBpdGVyLT5tYXAtPmRzby0+bmFtZSk7CisKKwkJaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wIDwgMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQljbXAgPSBzdHJjbXAoaGUtPnN5bS0+bmFtZSwgaXRlci0+c3ltLT5uYW1lKTsKKwkJCWlmIChjbXAgPiAwKQorCQkJCW4gPSBuLT5yYl9sZWZ0OworCQkJZWxzZSBpZiAoY21wIDwgMCkKKwkJCQluID0gbi0+cmJfcmlnaHQ7CisJCQllbHNlCisJCQkJcmV0dXJuIGl0ZXI7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19tYXRjaF9oaXN0cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpvbGRfc2Vzc2lvbiwKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpuZXdfc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisKKwlwZXJmX3Nlc3Npb25fX3Jlc29ydF9ieV9uYW1lKG9sZF9zZXNzaW9uKTsKKworCWZvciAobmQgPSByYl9maXJzdCgmbmV3X3Nlc3Npb24tPmhpc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCXBvcy0+cGFpciA9IHBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5X2J5X25hbWUob2xkX3Nlc3Npb24sIHBvcyk7CisJfQorfQorCitzdGF0aWMgaW50IF9fY21kX2RpZmYodm9pZCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb25bMl07CisKKwlzZXNzaW9uWzBdID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfb2xkLCBPX1JET05MWSwgZm9yY2UpOworCXNlc3Npb25bMV0gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uZXcsIE9fUkRPTkxZLCBmb3JjZSk7CisJaWYgKHNlc3Npb25bMF0gPT0gTlVMTCB8fCBzZXNzaW9uWzFdID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDI7ICsraSkgeworCQlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb25baV0sICZldmVudF9vcHMpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZGVsZXRlOworCQlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2Vzc2lvbltpXSwgc2Vzc2lvbltpXS0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwl9CisKKwlwZXJmX3Nlc3Npb25fX21hdGNoX2hpc3RzKHNlc3Npb25bMF0sIHNlc3Npb25bMV0pOworCXBlcmZfc2Vzc2lvbl9fZnByaW50Zl9oaXN0cyhzZXNzaW9uWzFdLCBzZXNzaW9uWzBdLAorCQkJCSAgICBzaG93X2Rpc3BsYWNlbWVudCwgc3Rkb3V0KTsKK291dF9kZWxldGU6CisJZm9yIChpID0gMDsgaSA8IDI7ICsraSkKKwkJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbltpXSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGRpZmZfdXNhZ2VbXSA9IHsKKwkicGVyZiBkaWZmIFs8b3B0aW9ucz5dIFtvbGRfZmlsZV0gW25ld19maWxlXSIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAorCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKSIpLAorCU9QVF9CT09MRUFOKCdtJywgImRpc3BsYWNlbWVudCIsICZzaG93X2Rpc3BsYWNlbWVudCwKKwkJICAgICJTaG93IHBvc2l0aW9uIGRpc3BsYWNlbWVudCByZWxhdGl2ZSB0byBiYXNlbGluZSIpLAorCU9QVF9CT09MRUFOKCdEJywgImR1bXAtcmF3LXRyYWNlIiwgJmR1bXBfdHJhY2UsCisJCSAgICAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKKwlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAorCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmc3ltYm9sX2NvbmYudXNlX21vZHVsZXMsCisJCSAgICAibG9hZCBtb2R1bGUgc3ltYm9scyAtIFdBUk5JTkc6IHVzZSBvbmx5IHdpdGggLWsgYW5kIExJVkUga2VybmVsIiksCisJT1BUX0JPT0xFQU4oJ1AnLCAiZnVsbC1wYXRocyIsICZldmVudF9vcHMuZnVsbF9wYXRocywKKwkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCisJT1BUX1NUUklORygnZCcsICJkc29zIiwgJnN5bWJvbF9jb25mLmRzb19saXN0X3N0ciwgImRzb1ssZHNvLi4uXSIsCisJCSAgICJvbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcyIpLAorCU9QVF9TVFJJTkcoJ0MnLCAiY29tbXMiLCAmc3ltYm9sX2NvbmYuY29tbV9saXN0X3N0ciwgImNvbW1bLGNvbW0uLi5dIiwKKwkJICAgIm9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcyIpLAorCU9QVF9TVFJJTkcoJ1MnLCAic3ltYm9scyIsICZzeW1ib2xfY29uZi5zeW1fbGlzdF9zdHIsICJzeW1ib2xbLHN5bWJvbC4uLl0iLAorCQkgICAib25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzIiksCisJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKKwkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKKwlPUFRfU1RSSU5HKCd0JywgImZpZWxkLXNlcGFyYXRvciIsICZzeW1ib2xfY29uZi5maWVsZF9zZXAsICJzZXBhcmF0b3IiLAorCQkgICAic2VwYXJhdG9yIGZvciBjb2x1bW5zLCBubyBzcGFjZXMgd2lsbCBiZSBhZGRlZCBiZXR3ZWVuICIKKwkJICAgImNvbHVtbnMgJy4nIGlzIHJlc2VydmVkLiIpLAorCU9QVF9FTkQoKQorfTsKKworaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlzb3J0X29yZGVyID0gZGlmZl9fZGVmYXVsdF9zb3J0X29yZGVyOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGRpZmZfdXNhZ2UsIDApOworCWlmIChhcmdjKSB7CisJCWlmIChhcmdjID4gMikKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhkaWZmX3VzYWdlLCBvcHRpb25zKTsKKwkJaWYgKGFyZ2MgPT0gMikgeworCQkJaW5wdXRfb2xkID0gYXJndlswXTsKKwkJCWlucHV0X25ldyA9IGFyZ3ZbMV07CisJCX0gZWxzZQorCQkJaW5wdXRfbmV3ID0gYXJndlswXTsKKwl9CisKKwlzeW1ib2xfY29uZi5leGNsdWRlX290aGVyID0gZmFsc2U7CisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfc29ydGluZyhkaWZmX3VzYWdlLCBvcHRpb25zKTsKKwlzZXR1cF9wYWdlcigpOworCisJc29ydF9lbnRyeV9fc2V0dXBfZWxpZGUoJnNvcnRfZHNvLCBzeW1ib2xfY29uZi5kc29fbGlzdCwgImRzbyIsIE5VTEwpOworCXNvcnRfZW50cnlfX3NldHVwX2VsaWRlKCZzb3J0X2NvbW0sIHN5bWJvbF9jb25mLmNvbW1fbGlzdCwgImNvbW0iLCBOVUxMKTsKKwlzb3J0X2VudHJ5X19zZXR1cF9lbGlkZSgmc29ydF9zeW0sIHN5bWJvbF9jb25mLnN5bV9saXN0LCAic3ltYm9sIiwgTlVMTCk7CisKKwlyZXR1cm4gX19jbWRfZGlmZigpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKaW5kZXggMDQ3ZmVmNy4uZmMyMWFkNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCkBAIC02LDEyICs2LDEyIEBACiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKICNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgogI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCiAKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCiAKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCi0jaW5jbHVkZSAidXRpbC9kYXRhX21hcC5oIgogCiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAKQEAgLTIwLDkgKzIwLDYgQEAKIAogc3RhdGljIGNoYXIgY29uc3QJCSppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKLXN0YXRpYyB1NjQJCQlzYW1wbGVfdHlwZTsKLQogc3RhdGljIGludAkJCWFsbG9jX2ZsYWc7CiBzdGF0aWMgaW50CQkJY2FsbGVyX2ZsYWc7CiAKQEAgLTU3LDExICs1NCw2IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF9yZXF1ZXN0ZWQsIHRvdGFsX2FsbG9jYXRlZDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2FsbG9jcywgbnJfY3Jvc3NfYWxsb2NzOwogCi1zdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSB7Ci0JdTMyIHNpemU7Ci0JY2hhciBkYXRhWzBdOwotfTsKLQogI2RlZmluZSBQQVRIX1NZU19OT0RFCSIvc3lzL2RldmljZXMvc3lzdGVtL25vZGUiCiAKIHN0YXRpYyB2b2lkIGluaXRfY3B1bm9kZV9tYXAodm9pZCkKQEAgLTIwMSw3ICsxOTMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19hbGxvY19ldmVudChzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3LAorc3RhdGljIHZvaWQgcHJvY2Vzc19hbGxvY19ldmVudCh2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBldmVudCAqZXZlbnQsCiAJCQkJaW50IGNwdSwKIAkJCQl1NjQgdGltZXN0YW1wIF9fdXNlZCwKQEAgLTIxNCwxMCArMjA2LDEwIEBACiAJaW50IGJ5dGVzX2FsbG9jOwogCWludCBub2RlMSwgbm9kZTI7CiAKLQlwdHIgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJwdHIiLCByYXctPmRhdGEpOwotCWNhbGxfc2l0ZSA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImNhbGxfc2l0ZSIsIHJhdy0+ZGF0YSk7Ci0JYnl0ZXNfcmVxID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAiYnl0ZXNfcmVxIiwgcmF3LT5kYXRhKTsKLQlieXRlc19hbGxvYyA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImJ5dGVzX2FsbG9jIiwgcmF3LT5kYXRhKTsKKwlwdHIgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJwdHIiLCBkYXRhKTsKKwljYWxsX3NpdGUgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJjYWxsX3NpdGUiLCBkYXRhKTsKKwlieXRlc19yZXEgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJieXRlc19yZXEiLCBkYXRhKTsKKwlieXRlc19hbGxvYyA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImJ5dGVzX2FsbG9jIiwgZGF0YSk7CiAKIAlpbnNlcnRfYWxsb2Nfc3RhdChjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywgY3B1KTsKIAlpbnNlcnRfY2FsbGVyX3N0YXQoY2FsbF9zaXRlLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jKTsKQEAgLTIyNyw3ICsyMTksNyBAQAogCiAJaWYgKG5vZGUpIHsKIAkJbm9kZTEgPSBjcHVub2RlX21hcFtjcHVdOwotCQlub2RlMiA9IHJhd19maWVsZF92YWx1ZShldmVudCwgIm5vZGUiLCByYXctPmRhdGEpOworCQlub2RlMiA9IHJhd19maWVsZF92YWx1ZShldmVudCwgIm5vZGUiLCBkYXRhKTsKIAkJaWYgKG5vZGUxICE9IG5vZGUyKQogCQkJbnJfY3Jvc3NfYWxsb2NzKys7CiAJfQpAQCAtMjYyLDcgKzI1NCw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NfZnJlZV9ldmVudChzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3LAorc3RhdGljIHZvaWQgcHJvY2Vzc19mcmVlX2V2ZW50KHZvaWQgKmRhdGEsCiAJCQkgICAgICAgc3RydWN0IGV2ZW50ICpldmVudCwKIAkJCSAgICAgICBpbnQgY3B1LAogCQkJICAgICAgIHU2NCB0aW1lc3RhbXAgX191c2VkLApAQCAtMjcxLDcgKzI2Myw3IEBACiAJdW5zaWduZWQgbG9uZyBwdHI7CiAJc3RydWN0IGFsbG9jX3N0YXQgKnNfYWxsb2MsICpzX2NhbGxlcjsKIAotCXB0ciA9IHJhd19maWVsZF92YWx1ZShldmVudCwgInB0ciIsIHJhdy0+ZGF0YSk7CisJcHRyID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAicHRyIiwgZGF0YSk7CiAKIAlzX2FsbG9jID0gc2VhcmNoX2FsbG9jX3N0YXQocHRyLCAwLCAmcm9vdF9hbGxvY19zdGF0LCBwdHJfY21wKTsKIAlpZiAoIXNfYWxsb2MpCkBAIC0yODksNjYgKzI4MSw1MyBAQAogfQogCiBzdGF0aWMgdm9pZAotcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnRfdCAqcmF3X2V2ZW50IF9fdXNlZCwgdm9pZCAqbW9yZV9kYXRhLAorcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnRfdCAqcmF3X2V2ZW50IF9fdXNlZCwgdm9pZCAqZGF0YSwKIAkJICBpbnQgY3B1LCB1NjQgdGltZXN0YW1wLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpCiB7Ci0Jc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdyA9IG1vcmVfZGF0YTsKIAlzdHJ1Y3QgZXZlbnQgKmV2ZW50OwogCWludCB0eXBlOwogCi0JdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKHJhdy0+ZGF0YSk7CisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOwogCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKIAogCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAia21hbGxvYyIpIHx8CiAJICAgICFzdHJjbXAoZXZlbnQtPm5hbWUsICJrbWVtX2NhY2hlX2FsbG9jIikpIHsKLQkJcHJvY2Vzc19hbGxvY19ldmVudChyYXcsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkLCAwKTsKKwkJcHJvY2Vzc19hbGxvY19ldmVudChkYXRhLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCwgMCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImttYWxsb2Nfbm9kZSIpIHx8CiAJICAgICFzdHJjbXAoZXZlbnQtPm5hbWUsICJrbWVtX2NhY2hlX2FsbG9jX25vZGUiKSkgewotCQlwcm9jZXNzX2FsbG9jX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQsIDEpOworCQlwcm9jZXNzX2FsbG9jX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkLCAxKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAia2ZyZWUiKSB8fAogCSAgICAhc3RyY21wKGV2ZW50LT5uYW1lLCAia21lbV9jYWNoZV9mcmVlIikpIHsKLQkJcHJvY2Vzc19mcmVlX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlwcm9jZXNzX2ZyZWVfZXZlbnQoZGF0YSwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogCQlyZXR1cm47CiAJfQogfQogCi1zdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQorc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQl1NjQgaXAgPSBldmVudC0+aXAuaXA7Ci0JdTY0IHRpbWVzdGFtcCA9IC0xOwotCXUzMiBjcHUgPSAtMTsKLQl1NjQgcGVyaW9kID0gMTsKLQl2b2lkICptb3JlX2RhdGEgPSBldmVudC0+aXAuX19tb3JlX2RhdGE7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkKTsKKwlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CiAKLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7Ci0JCXRpbWVzdGFtcCA9ICoodTY0ICopbW9yZV9kYXRhOwotCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7Ci0JfQorCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLnRpbWUgPSAtMTsKKwlkYXRhLmNwdSA9IC0xOworCWRhdGEucGVyaW9kID0gMTsKIAotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkgewotCQljcHUgPSAqKHUzMiAqKW1vcmVfZGF0YTsKLQkJbW9yZV9kYXRhICs9IHNpemVvZih1MzIpOwotCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHUzMik7IC8qIHJlc2VydmVkICovCi0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKSB7Ci0JCXBlcmlvZCA9ICoodTY0ICopbW9yZV9kYXRhOwotCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7Ci0JfQorCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKIAlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKIAkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlldmVudC0+aXAucGlkLCBldmVudC0+aXAudGlkLAotCQkodm9pZCAqKShsb25nKWlwLAotCQkobG9uZyBsb25nKXBlcmlvZCk7CisJCWRhdGEucGlkLCBkYXRhLnRpZCwKKwkJKHZvaWQgKikobG9uZylkYXRhLmlwLAorCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKIAorCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBldmVudC0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKIAkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CkBAIC0zNTcsMTYgKzMzNiwxNSBAQAogCiAJZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CiAKLQlwcm9jZXNzX3Jhd19ldmVudChldmVudCwgbW9yZV9kYXRhLCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlwcm9jZXNzX3Jhd19ldmVudChldmVudCwgZGF0YS5yYXdfZGF0YSwgZGF0YS5jcHUsCisJCQkgIGRhdGEudGltZSwgdGhyZWFkKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHU2NCB0eXBlKQorc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCXNhbXBsZV90eXBlID0gdHlwZTsKLQotCWlmICghKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgeworCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewogCQlmcHJpbnRmKHN0ZGVyciwKIAkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKIAkJCSJ3aXRob3V0IC1SPyIpOwpAQCAtMzc2LDIxICszNTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJmX2ZpbGVfaGFuZGxlciBmaWxlX2hhbmRsZXIgPSB7CitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKIAkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKIAkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKIAkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKIH07CiAKLXN0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKLXsKLQlyZWdpc3Rlcl9pZGxlX3RocmVhZCgpOwotCXJlZ2lzdGVyX3BlcmZfZmlsZV9oYW5kbGVyKCZmaWxlX2hhbmRsZXIpOwotCi0JcmV0dXJuIG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIDAsIDAsCi0JCQkJICAgICAgICZldmVudF9fY3dkbGVuLCAmZXZlbnRfX2N3ZCk7Ci19Ci0KIHN0YXRpYyBkb3VibGUgZnJhZ21lbnRhdGlvbih1bnNpZ25lZCBsb25nIG5fcmVxLCB1bnNpZ25lZCBsb25nIG5fYWxsb2MpCiB7CiAJaWYgKG5fYWxsb2MgPT0gMCkKQEAgLTM5OSw3ICszNjgsOCBAQAogCQlyZXR1cm4gMTAwLjAgLSAoMTAwLjAgKiBuX3JlcSAvIG5fYWxsb2MpOwogfQogCi1zdGF0aWMgdm9pZCBfX3ByaW50X3Jlc3VsdChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgaW50IG5fbGluZXMsIGludCBpc19jYWxsZXIpCitzdGF0aWMgdm9pZCBfX3ByaW50X3Jlc3VsdChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCSAgIGludCBuX2xpbmVzLCBpbnQgaXNfY2FsbGVyKQogewogCXN0cnVjdCByYl9ub2RlICpuZXh0OwogCkBAIC00MjAsNyArMzkwLDcgQEAKIAkJaWYgKGlzX2NhbGxlcikgewogCQkJYWRkciA9IGRhdGEtPmNhbGxfc2l0ZTsKIAkJCWlmICghcmF3X2lwKQotCQkJCXN5bSA9IHRocmVhZF9fZmluZF9mdW5jdGlvbihrdGhyZWFkLCBhZGRyLCBOVUxMKTsKKwkJCQlzeW0gPSBtYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKCZzZXNzaW9uLT5rbWFwcywgc2Vzc2lvbiwgYWRkciwgTlVMTCk7CiAJCX0gZWxzZQogCQkJYWRkciA9IGRhdGEtPnB0cjsKIApAQCAtNDYxLDEyICs0MzEsMTIgQEAKIAlwcmludGYoIkNyb3NzIENQVSBhbGxvY2F0aW9uczogJWx1LyVsdVxuIiwgbnJfY3Jvc3NfYWxsb2NzLCBucl9hbGxvY3MpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9yZXN1bHQodm9pZCkKK3N0YXRpYyB2b2lkIHByaW50X3Jlc3VsdChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWlmIChjYWxsZXJfZmxhZykKLQkJX19wcmludF9yZXN1bHQoJnJvb3RfY2FsbGVyX3NvcnRlZCwgY2FsbGVyX2xpbmVzLCAxKTsKKwkJX19wcmludF9yZXN1bHQoJnJvb3RfY2FsbGVyX3NvcnRlZCwgc2Vzc2lvbiwgY2FsbGVyX2xpbmVzLCAxKTsKIAlpZiAoYWxsb2NfZmxhZykKLQkJX19wcmludF9yZXN1bHQoJnJvb3RfYWxsb2Nfc29ydGVkLCBhbGxvY19saW5lcywgMCk7CisJCV9fcHJpbnRfcmVzdWx0KCZyb290X2FsbG9jX3NvcnRlZCwgc2Vzc2lvbiwgYWxsb2NfbGluZXMsIDApOwogCXByaW50X3N1bW1hcnkoKTsKIH0KIApAQCAtNTM0LDE2ICs1MDQsMjQgQEAKIAogc3RhdGljIGludCBfX2NtZF9rbWVtKHZvaWQpCiB7Ci0Jc2V0dXBfcGFnZXIoKTsKLQlyZWFkX2V2ZW50cygpOwotCXNvcnRfcmVzdWx0KCk7Ci0JcHJpbnRfcmVzdWx0KCk7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIDApOworCWlmIChzZXNzaW9uID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIDA7CisJc2V0dXBfcGFnZXIoKTsKKwllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBvdXRfZGVsZXRlOworCXNvcnRfcmVzdWx0KCk7CisJcHJpbnRfcmVzdWx0KHNlc3Npb24pOworb3V0X2RlbGV0ZToKKwlwZXJmX3Nlc3Npb25fX2RlbGV0ZShzZXNzaW9uKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGttZW1fdXNhZ2VbXSA9IHsKLQkicGVyZiBrbWVtIFs8b3B0aW9ucz5dIHtyZWNvcmR9IiwKKwkicGVyZiBrbWVtIFs8b3B0aW9ucz5dIHtyZWNvcmR8c3RhdH0iLAogCU5VTEwKIH07CiAKQEAgLTcwMywxOCArNjgxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2Vfc3RhdF9vcHQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKLQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQgX191c2VkKQorc3RhdGljIGludCBwYXJzZV9jYWxsZXJfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZyBfX3VzZWQsIGludCB1bnNldCBfX3VzZWQpCiB7Ci0JaWYgKCFhcmcpCi0JCXJldHVybiAtMTsKKwljYWxsZXJfZmxhZyA9IChhbGxvY19mbGFnICsgMSk7CisJcmV0dXJuIDA7Cit9CiAKLQlpZiAoc3RyY21wKGFyZywgImFsbG9jIikgPT0gMCkKLQkJYWxsb2NfZmxhZyA9IChjYWxsZXJfZmxhZyArIDEpOwotCWVsc2UgaWYgKHN0cmNtcChhcmcsICJjYWxsZXIiKSA9PSAwKQotCQljYWxsZXJfZmxhZyA9IChhbGxvY19mbGFnICsgMSk7Ci0JZWxzZQotCQlyZXR1cm4gLTE7CitzdGF0aWMgaW50IHBhcnNlX2FsbG9jX29wdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICBjb25zdCBjaGFyICphcmcgX191c2VkLCBpbnQgdW5zZXQgX191c2VkKQoreworCWFsbG9jX2ZsYWcgPSAoY2FsbGVyX2ZsYWcgKyAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzM5LDE0ICs3MTYsMTcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGttZW1fb3B0aW9uc1tdID0gewogCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAogCQkgICAiaW5wdXQgZmlsZSBuYW1lIiksCi0JT1BUX0NBTExCQUNLKDAsICJzdGF0IiwgTlVMTCwgIjxhbGxvYz58PGNhbGxlcj4iLAotCQkgICAgICJzdGF0IHNlbGVjdG9yLCBQYXNzICdhbGxvYycgb3IgJ2NhbGxlcicuIiwKLQkJICAgICBwYXJzZV9zdGF0X29wdCksCisJT1BUX0NBTExCQUNLX05PT1BUKDAsICJjYWxsZXIiLCBOVUxMLCBOVUxMLAorCQkJICAgInNob3cgcGVyLWNhbGxzaXRlIHN0YXRpc3RpY3MiLAorCQkJICAgcGFyc2VfY2FsbGVyX29wdCksCisJT1BUX0NBTExCQUNLX05PT1BUKDAsICJhbGxvYyIsIE5VTEwsIE5VTEwsCisJCQkgICAic2hvdyBwZXItYWxsb2NhdGlvbiBzdGF0aXN0aWNzIiwKKwkJCSAgIHBhcnNlX2FsbG9jX29wdCksCiAJT1BUX0NBTExCQUNLKCdzJywgInNvcnQiLCBOVUxMLCAia2V5WyxrZXkyLi4uXSIsCiAJCSAgICAgInNvcnQgYnkga2V5czogcHRyLCBjYWxsX3NpdGUsIGJ5dGVzLCBoaXQsIHBpbmdwb25nLCBmcmFnIiwKIAkJICAgICBwYXJzZV9zb3J0X29wdCksCiAJT1BUX0NBTExCQUNLKCdsJywgImxpbmUiLCBOVUxMLCAibnVtIiwKLQkJICAgICAic2hvdyBuIGxpbnMiLAorCQkgICAgICJzaG93IG4gbGluZXMiLAogCQkgICAgIHBhcnNlX2xpbmVfb3B0KSwKIAlPUFRfQk9PTEVBTigwLCAicmF3LWlwIiwgJnJhd19pcCwgInNob3cgcmF3IGlwIGluc3RlYWQgb2Ygc3ltYm9sIiksCiAJT1BUX0VORCgpCkBAIC03ODYsMjIgKzc2NiwyNiBAQAogCiBpbnQgY21kX2ttZW0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCXN5bWJvbF9faW5pdCgwKTsKLQogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGttZW1fb3B0aW9ucywga21lbV91c2FnZSwgMCk7CiAKLQlpZiAoYXJnYyAmJiAhc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpCi0JCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7Ci0JZWxzZSBpZiAoYXJnYykKKwlpZiAoIWFyZ2MpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhrbWVtX3VzYWdlLCBrbWVtX29wdGlvbnMpOwogCi0JaWYgKGxpc3RfZW1wdHkoJmNhbGxlcl9zb3J0KSkKLQkJc2V0dXBfc29ydGluZygmY2FsbGVyX3NvcnQsIGRlZmF1bHRfc29ydF9vcmRlcik7Ci0JaWYgKGxpc3RfZW1wdHkoJmFsbG9jX3NvcnQpKQotCQlzZXR1cF9zb3J0aW5nKCZhbGxvY19zb3J0LCBkZWZhdWx0X3NvcnRfb3JkZXIpOworCXN5bWJvbF9faW5pdCgpOwogCi0Jc2V0dXBfY3B1bm9kZV9tYXAoKTsKKwlpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlYyIsIDMpKSB7CisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzdGF0IikpIHsKKwkJc2V0dXBfY3B1bm9kZV9tYXAoKTsKIAotCXJldHVybiBfX2NtZF9rbWVtKCk7CisJCWlmIChsaXN0X2VtcHR5KCZjYWxsZXJfc29ydCkpCisJCQlzZXR1cF9zb3J0aW5nKCZjYWxsZXJfc29ydCwgZGVmYXVsdF9zb3J0X29yZGVyKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmFsbG9jX3NvcnQpKQorCQkJc2V0dXBfc29ydGluZygmYWxsb2Nfc29ydCwgZGVmYXVsdF9zb3J0X29yZGVyKTsKKworCQlyZXR1cm4gX19jbWRfa21lbSgpOworCX0KKworCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IGE1OGUxMWIuLmMxZTY3NzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0zNSwzNCArMzUsMzMgQEAKICNpbmNsdWRlICJwZXJmLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvc3RybGlzdC5oIgogI2luY2x1ZGUgInV0aWwvZXZlbnQuaCIKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgorI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCS8qIEZvciBkZWJ1Z2ZzX3BhdGggKi8KICNpbmNsdWRlICJ1dGlsL3Byb2JlLWZpbmRlci5oIgogI2luY2x1ZGUgInV0aWwvcHJvYmUtZXZlbnQuaCIKIAotLyogRGVmYXVsdCB2bWxpbnV4IHNlYXJjaCBwYXRocyAqLwotI2RlZmluZSBOUl9TRUFSQ0hfUEFUSCAzCi1jb25zdCBjaGFyICpkZWZhdWx0X3NlYXJjaF9wYXRoW05SX1NFQVJDSF9QQVRIXSA9IHsKLSIvbGliL21vZHVsZXMvJXMvYnVpbGQvdm1saW51eCIsCQkvKiBDdXN0b20gYnVpbGQga2VybmVsICovCi0iL3Vzci9saWIvZGVidWcvbGliL21vZHVsZXMvJXMvdm1saW51eCIsCS8qIFJlZCBIYXQgZGVidWdpbmZvICovCi0iL2Jvb3Qvdm1saW51eC1kZWJ1Zy0lcyIsCQkJLyogVWJ1bnR1ICovCi19OwotCiAjZGVmaW5lIE1BWF9QQVRIX0xFTiAyNTYKICNkZWZpbmUgTUFYX1BST0JFUyAxMjgKIAogLyogU2Vzc2lvbiBtYW5hZ2VtZW50IHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCB7Ci0JY2hhciAqdm1saW51eDsKLQljaGFyICpyZWxlYXNlOwotCWludCBuZWVkX2R3YXJmOworCWJvb2wgbmVlZF9kd2FyZjsKKwlib29sIGxpc3RfZXZlbnRzOworCWJvb2wgZm9yY2VfYWRkOwogCWludCBucl9wcm9iZTsKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHJvYmVzW01BWF9QUk9CRVNdOworCXN0cnVjdCBzdHJsaXN0ICpkZWxsaXN0OworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnBzZXNzaW9uOworCXN0cnVjdCBtYXAgKmttYXA7CiB9IHNlc3Npb247CiAKLXN0YXRpYyBib29sIGxpc3Rpbmc7CiAKIC8qIFBhcnNlIGFuIGV2ZW50IGRlZmluaXRpb24uIE5vdGUgdGhhdCBhbnkgZXJyb3IgbXVzdCBkaWUuICovCiBzdGF0aWMgdm9pZCBwYXJzZV9wcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIpCkBAIC03NCwxMSArNzMsMzAgQEAKIAkJZGllKCJUb28gbWFueSBwcm9iZXMgKD4gJWQpIGFyZSBzcGVjaWZpZWQuIiwgTUFYX1BST0JFUyk7CiAKIAkvKiBQYXJzZSBwZXJmLXByb2JlIGV2ZW50IGludG8gcHJvYmVfcG9pbnQgKi8KLQlzZXNzaW9uLm5lZWRfZHdhcmYgPSBwYXJzZV9wZXJmX3Byb2JlX2V2ZW50KHN0ciwgcHApOworCXBhcnNlX3BlcmZfcHJvYmVfZXZlbnQoc3RyLCBwcCwgJnNlc3Npb24ubmVlZF9kd2FyZik7CiAKIAlwcl9kZWJ1ZygiJWQgYXJndW1lbnRzXG4iLCBwcC0+bnJfYXJncyk7CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlX3Byb2JlX2V2ZW50X2FyZ3YoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBsZW47CisJY2hhciAqYnVmOworCisJLyogQmluZCB1cCByZXN0IGFyZ3VtZW50cyAqLworCWxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJbGVuICs9IHN0cmxlbihhcmd2W2ldKSArIDE7CisJYnVmID0gemFsbG9jKGxlbiArIDEpOworCWlmICghYnVmKQorCQlkaWUoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGJpbmRpbmcgYXJndW1lbnRzLiIpOworCWxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJXMgIiwgYXJndltpXSk7CisJcGFyc2VfcHJvYmVfZXZlbnQoYnVmKTsKKwlmcmVlKGJ1Zik7Cit9CisKIHN0YXRpYyBpbnQgb3B0X2FkZF9wcm9iZV9ldmVudChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAogCQkJICAgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQogewpAQCAtODcsNDAgKzEwNSw0NCBAQAogCXJldHVybiAwOwogfQogCi0jaWZuZGVmIE5PX0xJQkRXQVJGCi1zdGF0aWMgaW50IG9wZW5fZGVmYXVsdF92bWxpbnV4KHZvaWQpCitzdGF0aWMgaW50IG9wdF9kZWxfcHJvYmVfZXZlbnQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCiB7Ci0Jc3RydWN0IHV0c25hbWUgdXRzOwotCWNoYXIgZm5hbWVbTUFYX1BBVEhfTEVOXTsKLQlpbnQgZmQsIHJldCwgaTsKKwlpZiAoc3RyKSB7CisJCWlmICghc2Vzc2lvbi5kZWxsaXN0KQorCQkJc2Vzc2lvbi5kZWxsaXN0ID0gc3RybGlzdF9fbmV3KHRydWUsIE5VTEwpOworCQlzdHJsaXN0X19hZGQoc2Vzc2lvbi5kZWxsaXN0LCBzdHIpOworCX0KKwlyZXR1cm4gMDsKK30KIAotCXJldCA9IHVuYW1lKCZ1dHMpOwotCWlmIChyZXQpIHsKLQkJcHJfZGVidWcoInVuYW1lKCkgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtZXJybm87CisvKiBDdXJyZW50bHkganVzdCBjaGVja2luZyBmdW5jdGlvbiBuYW1lIGZyb20gc3ltYm9sIG1hcCAqLworc3RhdGljIHZvaWQgZXZhbHVhdGVfcHJvYmVfcG9pbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3ltID0gbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKHNlc3Npb24ua21hcCwgcHAtPmZ1bmN0aW9uLAorCQkJCSAgICAgICBzZXNzaW9uLnBzZXNzaW9uLCBOVUxMKTsKKwlpZiAoIXN5bSkKKwkJZGllKCJLZXJuZWwgc3ltYm9sIFwnJXNcJyBub3QgZm91bmQgLSBwcm9iZSBub3QgYWRkZWQuIiwKKwkJICAgIHBwLT5mdW5jdGlvbik7Cit9CisKKyNpZm5kZWYgTk9fTElCRFdBUkYKK3N0YXRpYyBpbnQgb3Blbl92bWxpbnV4KHZvaWQpCit7CisJaWYgKG1hcF9fbG9hZChzZXNzaW9uLmttYXAsIHNlc3Npb24ucHNlc3Npb24sIE5VTEwpIDwgMCkgeworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQga2VybmVsIG1hcC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc2Vzc2lvbi5yZWxlYXNlID0gdXRzLnJlbGVhc2U7Ci0JZm9yIChpID0gMDsgaSA8IE5SX1NFQVJDSF9QQVRIOyBpKyspIHsKLQkJcmV0ID0gc25wcmludGYoZm5hbWUsIE1BWF9QQVRIX0xFTiwKLQkJCSAgICAgICBkZWZhdWx0X3NlYXJjaF9wYXRoW2ldLCBzZXNzaW9uLnJlbGVhc2UpOwotCQlpZiAocmV0ID49IE1BWF9QQVRIX0xFTiB8fCByZXQgPCAwKSB7Ci0JCQlwcl9kZWJ1ZygiRmlsZW5hbWUoJWQsJXMpIGlzIHRvbyBsb25nLlxuIiwgaSwKLQkJCQl1dHMucmVsZWFzZSk7Ci0JCQllcnJubyA9IEUyQklHOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQotCQlwcl9kZWJ1ZygidHJ5IHRvIG9wZW4gJXNcbiIsIGZuYW1lKTsKLQkJZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7Ci0JCWlmIChmZCA+PSAwKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBmZDsKKwlwcl9kZWJ1ZygiVHJ5IHRvIG9wZW4gJXNcbiIsIHNlc3Npb24ua21hcC0+ZHNvLT5sb25nX25hbWUpOworCXJldHVybiBvcGVuKHNlc3Npb24ua21hcC0+ZHNvLT5sb25nX25hbWUsIE9fUkRPTkxZKTsKIH0KICNlbmRpZgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2JlX3VzYWdlW10gPSB7CiAJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gJ1BST0JFREVGJyBbJ1BST0JFREVGJyAuLi5dIiwKIAkicGVyZiBwcm9iZSBbPG9wdGlvbnM+XSAtLWFkZCAnUFJPQkVERUYnIFstLWFkZCAnUFJPQkVERUYnIC4uLl0iLAorCSJwZXJmIHByb2JlIFs8b3B0aW9ucz5dIC0tZGVsICdbR1JPVVA6XUVWRU5UJyAuLi4iLAogCSJwZXJmIHByb2JlIC0tbGlzdCIsCiAJTlVMTAogfTsKQEAgLTEyOSwxOSArMTUxLDIyIEBACiAJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBwYXJzZWQgYXJndW1lbnRzLCBldGMpIiksCiAjaWZuZGVmIE5PX0xJQkRXQVJGCi0JT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnNlc3Npb24udm1saW51eCwgImZpbGUiLAotCQkidm1saW51eC9tb2R1bGUgcGF0aG5hbWUiKSwKKwlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmc3ltYm9sX2NvbmYudm1saW51eF9uYW1lLAorCQkgICAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCiAjZW5kaWYKLQlPUFRfQk9PTEVBTignbCcsICJsaXN0IiwgJmxpc3RpbmcsICJsaXN0IHVwIGN1cnJlbnQgcHJvYmVzIiksCisJT1BUX0JPT0xFQU4oJ2wnLCAibGlzdCIsICZzZXNzaW9uLmxpc3RfZXZlbnRzLAorCQkgICAgImxpc3QgdXAgY3VycmVudCBwcm9iZSBldmVudHMiKSwKKwlPUFRfQ0FMTEJBQ0soJ2QnLCAiZGVsIiwgTlVMTCwgIltHUk9VUDpdRVZFTlQiLCAiZGVsZXRlIGEgcHJvYmUgZXZlbnQuIiwKKwkJb3B0X2RlbF9wcm9iZV9ldmVudCksCiAJT1BUX0NBTExCQUNLKCdhJywgImFkZCIsIE5VTEwsCiAjaWZkZWYgTk9fTElCRFdBUkYKLQkJIkZVTkNbK09GRlN8JXJldHVybl0gW0FSRyAuLi5dIiwKKwkJIltFVkVOVD1dRlVOQ1srT0ZGU3wlcmV0dXJuXSBbQVJHIC4uLl0iLAogI2Vsc2UKLQkJIkZVTkNbK09GRlN8JXJldHVybnw6UkxOXVtAU1JDXXxTUkM6QUxOIFtBUkcgLi4uXSIsCisJCSJbRVZFTlQ9XUZVTkNbK09GRlN8JXJldHVybnw6UkxOXVtAU1JDXXxTUkM6QUxOIFtBUkcgLi4uXSIsCiAjZW5kaWYKIAkJInByb2JlIHBvaW50IGRlZmluaXRpb24sIHdoZXJlXG4iCi0JCSJcdFx0R1JQOlx0R3JvdXAgbmFtZSAob3B0aW9uYWwpXG4iCi0JCSJcdFx0TkFNRTpcdEV2ZW50IG5hbWVcbiIKKwkJIlx0XHRHUk9VUDpcdEdyb3VwIG5hbWUgKG9wdGlvbmFsKVxuIgorCQkiXHRcdEVWRU5UOlx0RXZlbnQgbmFtZVxuIgogCQkiXHRcdEZVTkM6XHRGdW5jdGlvbiBuYW1lXG4iCiAJCSJcdFx0T0ZGUzpcdE9mZnNldCBmcm9tIGZ1bmN0aW9uIGVudHJ5IChpbiBieXRlKVxuIgogCQkiXHRcdCVyZXR1cm46XHRQdXQgdGhlIHByb2JlIGF0IGZ1bmN0aW9uIHJldHVyblxuIgpAQCAtMTU1LDEyICsxODAsMTQgQEAKICNlbmRpZgogCQkiXHRcdFx0a3Byb2JlLXRyYWNlciBhcmd1bWVudCBmb3JtYXQuKVxuIiwKIAkJb3B0X2FkZF9wcm9iZV9ldmVudCksCisJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmc2Vzc2lvbi5mb3JjZV9hZGQsICJmb3JjaWJseSBhZGQgZXZlbnRzIgorCQkgICAgIiB3aXRoIGV4aXN0aW5nIG5hbWUiKSwKIAlPUFRfRU5EKCkKIH07CiAKIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCWludCBpLCBqLCByZXQ7CisJaW50IGksIHJldDsKICNpZm5kZWYgTk9fTElCRFdBUkYKIAlpbnQgZmQ7CiAjZW5kaWYKQEAgLTE2OCw1NCArMTk1LDkyIEBACiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBwcm9iZV91c2FnZSwKIAkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7Ci0JZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKLQkJcGFyc2VfcHJvYmVfZXZlbnQoYXJndltpXSk7CisJaWYgKGFyZ2MgPiAwKSB7CisJCWlmIChzdHJjbXAoYXJndlswXSwgIi0iKSA9PSAwKSB7CisJCQlwcl93YXJuaW5nKCIgIEVycm9yOiAnLScgaXMgbm90IHN1cHBvcnRlZC5cbiIpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCQlwYXJzZV9wcm9iZV9ldmVudF9hcmd2KGFyZ2MsIGFyZ3YpOworCX0KIAotCWlmICgoc2Vzc2lvbi5ucl9wcm9iZSA9PSAwICYmICFsaXN0aW5nKSB8fAotCSAgICAoc2Vzc2lvbi5ucl9wcm9iZSAhPSAwICYmIGxpc3RpbmcpKQorCWlmICgoIXNlc3Npb24ubnJfcHJvYmUgJiYgIXNlc3Npb24uZGVsbGlzdCAmJiAhc2Vzc2lvbi5saXN0X2V2ZW50cykpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CiAKLQlpZiAobGlzdGluZykgeworCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19wYXRoKSA8IDApCisJCWRpZSgiRmFpbGVkIHRvIGZpbmQgZGVidWdmcyBwYXRoLiIpOworCisJaWYgKHNlc3Npb24ubGlzdF9ldmVudHMpIHsKKwkJaWYgKHNlc3Npb24ubnJfcHJvYmUgIT0gMCB8fCBzZXNzaW9uLmRlbGxpc3QpIHsKKwkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpc3Qgd2l0aCIKKwkJCQkgICAiIC0tYWRkLy0tZGVsLlxuIik7CisJCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOworCQl9CiAJCXNob3dfcGVyZl9wcm9iZV9ldmVudHMoKTsKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKHNlc3Npb24uZGVsbGlzdCkgeworCQlkZWxfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzZXNzaW9uLmRlbGxpc3QpOworCQlzdHJsaXN0X19kZWxldGUoc2Vzc2lvbi5kZWxsaXN0KTsKKwkJaWYgKHNlc3Npb24ubnJfcHJvYmUgPT0gMCkKKwkJCXJldHVybiAwOworCX0KKworCS8qIEluaXRpYWxpemUgc3ltYm9sIG1hcHMgZm9yIHZtbGludXggKi8KKwlzeW1ib2xfY29uZi5zb3J0X2J5X25hbWUgPSB0cnVlOworCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPT0gTlVMTCkKKwkJc3ltYm9sX2NvbmYudHJ5X3ZtbGludXhfcGF0aCA9IHRydWU7CisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gaW5pdCBzeW1ib2wgbWFwLiIpOworCXNlc3Npb24ucHNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhOVUxMLCBPX1dST05MWSwgZmFsc2UpOworCWlmIChzZXNzaW9uLnBzZXNzaW9uID09IE5VTEwpCisJCWRpZSgiRmFpbGVkIHRvIGluaXQgcGVyZl9zZXNzaW9uLiIpOworCXNlc3Npb24ua21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi5wc2Vzc2lvbi0+a21hcHMsCisJCQkJCQlNQVBfX0ZVTkNUSU9OLAorCQkJCQkJIltrZXJuZWwua2FsbHN5bXNdIik7CisJaWYgKCFzZXNzaW9uLmttYXApCisJCWRpZSgiQ291bGQgbm90IGZpbmQga2VybmVsIG1hcC5cbiIpOworCiAJaWYgKHNlc3Npb24ubmVlZF9kd2FyZikKICNpZmRlZiBOT19MSUJEV0FSRgogCQlkaWUoIkRlYnVnaW5mby1hbmFseXNpcyBpcyBub3Qgc3VwcG9ydGVkIik7CiAjZWxzZQkvKiAhTk9fTElCRFdBUkYgKi8KIAkJcHJfZGVidWcoIlNvbWUgcHJvYmVzIHJlcXVpcmUgZGVidWdpbmZvLlxuIik7CiAKLQlpZiAoc2Vzc2lvbi52bWxpbnV4KQotCQlmZCA9IG9wZW4oc2Vzc2lvbi52bWxpbnV4LCBPX1JET05MWSk7Ci0JZWxzZQotCQlmZCA9IG9wZW5fZGVmYXVsdF92bWxpbnV4KCk7CisJZmQgPSBvcGVuX3ZtbGludXgoKTsKIAlpZiAoZmQgPCAwKSB7CiAJCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCi0JCQlkaWUoIkNvdWxkIG5vdCBvcGVuIHZtbGludXgvbW9kdWxlIGZpbGUuIik7CisJCQlkaWUoIkNvdWxkIG5vdCBvcGVuIGRlYnVnaW5mbyBmaWxlLiIpOwogCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBvcGVuIHZtbGludXgvbW9kdWxlIGZpbGUuIgotCQkJICAgIiBUcnkgdG8gdXNlIHN5bWJvbHMuXG4iKTsKKwkJcHJfZGVidWcoIkNvdWxkIG5vdCBvcGVuIHZtbGludXgvbW9kdWxlIGZpbGUuIgorCQkJICIgVHJ5IHRvIHVzZSBzeW1ib2xzLlxuIik7CiAJCWdvdG8gZW5kX2R3YXJmOwogCX0KIAogCS8qIFNlYXJjaGluZyBwcm9iZSBwb2ludHMgKi8KLQlmb3IgKGogPSAwOyBqIDwgc2Vzc2lvbi5ucl9wcm9iZTsgaisrKSB7Ci0JCXBwID0gJnNlc3Npb24ucHJvYmVzW2pdOworCWZvciAoaSA9IDA7IGkgPCBzZXNzaW9uLm5yX3Byb2JlOyBpKyspIHsKKwkJcHAgPSAmc2Vzc2lvbi5wcm9iZXNbaV07CiAJCWlmIChwcC0+Zm91bmQpCiAJCQljb250aW51ZTsKIAogCQlsc2VlayhmZCwgU0VFS19TRVQsIDApOwogCQlyZXQgPSBmaW5kX3Byb2JlcG9pbnQoZmQsIHBwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCi0JCQkJZGllKCJDb3VsZCBub3QgYW5hbHl6ZSBkZWJ1Z2luZm8uIik7Ci0KLQkJCXByX3dhcm5pbmcoIkFuIGVycm9yIG9jY3VycmVkIGluIGRlYnVnaW5mbyBhbmFseXNpcy4gVHJ5IHRvIHVzZSBzeW1ib2xzLlxuIik7Ci0JCQlicmVhazsKKwkJaWYgKHJldCA+IDApCisJCQljb250aW51ZTsKKwkJaWYgKHJldCA9PSAwKSB7CS8qIE5vIGVycm9yIGJ1dCBmYWlsZWQgdG8gZmluZCBwcm9iZSBwb2ludC4gKi8KKwkJCXN5bnRoZXNpemVfcGVyZl9wcm9iZV9wb2ludChwcCk7CisJCQlkaWUoIlByb2JlIHBvaW50ICclcycgbm90IGZvdW5kLiAtIHByb2JlIG5vdCBhZGRlZC4iLAorCQkJICAgIHBwLT5wcm9iZXNbMF0pOwogCQl9Ci0JCWlmIChyZXQgPT0gMCkJLyogTm8gZXJyb3IgYnV0IGZhaWxlZCB0byBmaW5kIHByb2JlIHBvaW50LiAqLwotCQkJZGllKCJObyBwcm9iZSBwb2ludCBmb3VuZC4iKTsKKwkJLyogRXJyb3IgcGF0aCAqLworCQlpZiAoc2Vzc2lvbi5uZWVkX2R3YXJmKSB7CisJCQlpZiAocmV0ID09IC1FTk9FTlQpCisJCQkJcHJfd2FybmluZygiTm8gZHdhcmYgaW5mbyBmb3VuZCBpbiB0aGUgdm1saW51eCAtIHBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0RFQlVHX0lORk89eS5cbiIpOworCQkJZGllKCJDb3VsZCBub3QgYW5hbHl6ZSBkZWJ1Z2luZm8uIik7CisJCX0KKwkJcHJfZGVidWcoIkFuIGVycm9yIG9jY3VycmVkIGluIGRlYnVnaW5mbyBhbmFseXNpcy4iCisJCQkgIiBUcnkgdG8gdXNlIHN5bWJvbHMuXG4iKTsKKwkJYnJlYWs7CiAJfQogCWNsb3NlKGZkKTsKIApAQCAtMjIzLDExICsyODgsMTIgQEAKICNlbmRpZiAvKiAhTk9fTElCRFdBUkYgKi8KIAogCS8qIFN5bnRoZXNpemUgcHJvYmVzIHdpdGhvdXQgZHdhcmYgKi8KLQlmb3IgKGogPSAwOyBqIDwgc2Vzc2lvbi5ucl9wcm9iZTsgaisrKSB7Ci0JCXBwID0gJnNlc3Npb24ucHJvYmVzW2pdOworCWZvciAoaSA9IDA7IGkgPCBzZXNzaW9uLm5yX3Byb2JlOyBpKyspIHsKKwkJcHAgPSAmc2Vzc2lvbi5wcm9iZXNbaV07CiAJCWlmIChwcC0+Zm91bmQpCS8qIFRoaXMgcHJvYmUgaXMgYWxyZWFkeSBmb3VuZC4gKi8KIAkJCWNvbnRpbnVlOwogCisJCWV2YWx1YXRlX3Byb2JlX3BvaW50KHBwKTsKIAkJcmV0ID0gc3ludGhlc2l6ZV90cmFjZV9rcHJvYmVfZXZlbnQocHApOwogCQlpZiAocmV0ID09IC1FMkJJRykKIAkJCWRpZSgicHJvYmUgcG9pbnQgZGVmaW5pdGlvbiBiZWNvbWVzIHRvbyBsb25nLiIpOwpAQCAtMjM2LDcgKzMwMiw4IEBACiAJfQogCiAJLyogU2V0dG5nIHVwIHByb2JlIHBvaW50cyAqLwotCWFkZF90cmFjZV9rcHJvYmVfZXZlbnRzKHNlc3Npb24ucHJvYmVzLCBzZXNzaW9uLm5yX3Byb2JlKTsKKwlhZGRfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzZXNzaW9uLnByb2Jlcywgc2Vzc2lvbi5ucl9wcm9iZSwKKwkJCQlzZXNzaW9uLmZvcmNlX2FkZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCAwZTUxOWM2Li42MzEzNmQwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKICNpbmNsdWRlICJ1dGlsL2V2ZW50LmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgogI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTYyLDcgKzYzLDcgQEAKIAogc3RhdGljIGludAkJCWZpbGVfbmV3CQkJPSAgICAgIDE7CiAKLXN0cnVjdCBwZXJmX2hlYWRlcgkJKmhlYWRlcgkJCQk9ICAgTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uCSpzZXNzaW9uOwogCiBzdHJ1Y3QgbW1hcF9kYXRhIHsKIAlpbnQJCQljb3VudGVyOwpAQCAtMTIyLDcgKzEyMyw4IEBACiAJd3JpdGVfb3V0cHV0KGJ1Ziwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudChldmVudF90ICpldmVudCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudChldmVudF90ICpldmVudCwKKwkJCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYgX191c2VkKQogewogCXdyaXRlX2V2ZW50KGV2ZW50LCBldmVudC0+aGVhZGVyLnNpemUpOwogCXJldHVybiAwOwpAQCAtMjE2LDEyICsyMTgsMTIgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqaF9hdHRyOwogCi0JaWYgKG5yIDwgaGVhZGVyLT5hdHRycykgewotCQloX2F0dHIgPSBoZWFkZXItPmF0dHJbbnJdOworCWlmIChuciA8IHNlc3Npb24tPmhlYWRlci5hdHRycykgeworCQloX2F0dHIgPSBzZXNzaW9uLT5oZWFkZXIuYXR0cltucl07CiAJfSBlbHNlIHsKIAkJaF9hdHRyID0gcGVyZl9oZWFkZXJfYXR0cl9fbmV3KGEpOwogCQlpZiAoaF9hdHRyICE9IE5VTEwpCi0JCQlpZiAocGVyZl9oZWFkZXJfX2FkZF9hdHRyKGhlYWRlciwgaF9hdHRyKSA8IDApIHsKKwkJCWlmIChwZXJmX2hlYWRlcl9fYWRkX2F0dHIoJnNlc3Npb24tPmhlYWRlciwgaF9hdHRyKSA8IDApIHsKIAkJCQlwZXJmX2hlYWRlcl9hdHRyX19kZWxldGUoaF9hdHRyKTsKIAkJCQloX2F0dHIgPSBOVUxMOwogCQkJfQpAQCAtMjc2LDcgKzI3OCw3IEBACiAKIAlhdHRyLT5tbWFwCQk9IHRyYWNrOwogCWF0dHItPmNvbW0JCT0gdHJhY2s7Ci0JYXR0ci0+aW5oZXJpdAkJPSAoY3B1IDwgMCkgJiYgaW5oZXJpdDsKKwlhdHRyLT5pbmhlcml0CQk9IGluaGVyaXQ7CiAJYXR0ci0+ZGlzYWJsZWQJCT0gMTsKIAogdHJ5X2FnYWluOgpAQCAtMzk1LDEyICszOTcsMTIgQEAKIAogc3RhdGljIHZvaWQgYXRleGl0X2hlYWRlcih2b2lkKQogewotCWhlYWRlci0+ZGF0YV9zaXplICs9IGJ5dGVzX3dyaXR0ZW47CisJc2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSArPSBieXRlc193cml0dGVuOwogCi0JcGVyZl9oZWFkZXJfX3dyaXRlKGhlYWRlciwgb3V0cHV0LCB0cnVlKTsKKwlwZXJmX2hlYWRlcl9fd3JpdGUoJnNlc3Npb24tPmhlYWRlciwgb3V0cHV0LCB0cnVlKTsKIH0KIAotc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MgX191c2VkLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgaSwgY291bnRlcjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKQEAgLTQwOCw2ICs0MTAsOCBAQAogCWludCBmbGFnczsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgd2FraW5nID0gMDsKKwlpbnQgY2hpbGRfcmVhZHlfcGlwZVsyXSwgZ29fcGlwZVsyXTsKKwljaGFyIGJ1ZjsKIAogCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7CiAJbnJfY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOwpAQCAtNDE4LDExICs0MjIsMjUgQEAKIAlzaWduYWwoU0lHQ0hMRCwgc2lnX2hhbmRsZXIpOwogCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVyKTsKIAorCWlmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgcGlwZXMiKTsKKwkJZXhpdCgtMSk7CisJfQorCiAJaWYgKCFzdGF0KG91dHB1dF9uYW1lLCAmc3QpICYmIHN0LnN0X3NpemUpIHsKLQkJaWYgKCFmb3JjZSAmJiAhYXBwZW5kX2ZpbGUpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IsIG91dHB1dCBmaWxlICVzIGV4aXN0cywgdXNlIC1BIHRvIGFwcGVuZCBvciAtZiB0byBvdmVyd3JpdGUuXG4iLAotCQkJCQlvdXRwdXRfbmFtZSk7Ci0JCQlleGl0KC0xKTsKKwkJaWYgKCFmb3JjZSkgeworCQkJaWYgKCFhcHBlbmRfZmlsZSkgeworCQkJCXByX2VycigiRXJyb3IsIG91dHB1dCBmaWxlICVzIGV4aXN0cywgdXNlIC1BICIKKwkJCQkgICAgICAgInRvIGFwcGVuZCBvciAtZiB0byBvdmVyd3JpdGUuXG4iLAorCQkJCSAgICAgICBvdXRwdXRfbmFtZSk7CisJCQkJZXhpdCgtMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljaGFyIG9sZG5hbWVbUEFUSF9NQVhdOworCQkJc25wcmludGYob2xkbmFtZSwgc2l6ZW9mKG9sZG5hbWUpLCAiJXMub2xkIiwKKwkJCQkgb3V0cHV0X25hbWUpOworCQkJdW5saW5rKG9sZG5hbWUpOworCQkJcmVuYW1lKG91dHB1dF9uYW1lLCBvbGRuYW1lKTsKIAkJfQogCX0gZWxzZSB7CiAJCWFwcGVuZF9maWxlID0gMDsKQEAgLTQ0MCwyNCArNDU4LDI0IEBACiAJCWV4aXQoLTEpOwogCX0KIAotCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKLQlpZiAoaGVhZGVyID09IE5VTEwpIHsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcob3V0cHV0X25hbWUsIE9fV1JPTkxZLCBmb3JjZSk7CisJaWYgKHNlc3Npb24gPT0gTlVMTCkgewogCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciByZWFkaW5nIHBlcmYgZmlsZSBoZWFkZXJcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKCFmaWxlX25ldykgewotCQllcnIgPSBwZXJmX2hlYWRlcl9fcmVhZChoZWFkZXIsIG91dHB1dCk7CisJCWVyciA9IHBlcmZfaGVhZGVyX19yZWFkKCZzZXNzaW9uLT5oZWFkZXIsIG91dHB1dCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAocmF3X3NhbXBsZXMpIHsKLQkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KGhlYWRlciwgSEVBREVSX1RSQUNFX0lORk8pOworCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoJnNlc3Npb24tPmhlYWRlciwgSEVBREVSX1RSQUNFX0lORk8pOwogCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9jb3VudGVyczsgaSsrKSB7CiAJCQlpZiAoYXR0cnNbaV0uc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKLQkJCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoaGVhZGVyLCBIRUFERVJfVFJBQ0VfSU5GTyk7CisJCQkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KCZzZXNzaW9uLT5oZWFkZXIsIEhFQURFUl9UUkFDRV9JTkZPKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNDY1LDU1ICs0ODMsNzggQEAKIAogCWF0ZXhpdChhdGV4aXRfaGVhZGVyKTsKIAotCWlmICghc3lzdGVtX3dpZGUpIHsKLQkJcGlkID0gdGFyZ2V0X3BpZDsKLQkJaWYgKHBpZCA9PSAtMSkKLQkJCXBpZCA9IGdldHBpZCgpOwotCi0JCW9wZW5fY291bnRlcnMocHJvZmlsZV9jcHUsIHBpZCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHByb2ZpbGVfY3B1ICE9IC0xKSB7Ci0JCQlvcGVuX2NvdW50ZXJzKHByb2ZpbGVfY3B1LCB0YXJnZXRfcGlkKTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyBpKyspCi0JCQkJb3Blbl9jb3VudGVycyhpLCB0YXJnZXRfcGlkKTsKKwlpZiAodGFyZ2V0X3BpZCA9PSAtMSkgeworCQlwaWQgPSBmb3JrKCk7CisJCWlmIChwaWQgPCAwKSB7CisJCQlwZXJyb3IoImZhaWxlZCB0byBmb3JrIik7CisJCQlleGl0KC0xKTsKIAkJfQorCisJCWlmICghcGlkKSB7CisJCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKKwkJCWNsb3NlKGdvX3BpcGVbMV0pOworCQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisKKwkJCS8qCisJCQkgKiBEbyBhIGR1bW15IGV4ZWN2cCB0byBnZXQgdGhlIFBMVCBlbnRyeSByZXNvbHZlZCwKKwkJCSAqIHNvIHdlIGF2b2lkIHRoZSByZXNvbHZlciBvdmVyaGVhZCBvbiB0aGUgcmVhbAorCQkJICogZXhlY3ZwIGNhbGwuCisJCQkgKi8KKwkJCWV4ZWN2cCgiIiwgKGNoYXIgKiopYXJndik7CisKKwkJCS8qCisJCQkgKiBUZWxsIHRoZSBwYXJlbnQgd2UncmUgcmVhZHkgdG8gZ28KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7CisKKwkJCS8qCisJCQkgKiBXYWl0IHVudGlsIHRoZSBwYXJlbnQgdGVsbHMgdXMgdG8gZ28uCisJCQkgKi8KKwkJCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgcGlwZSIpOworCisJCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7CisKKwkJCXBlcnJvcihhcmd2WzBdKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJY2hpbGRfcGlkID0gcGlkOworCisJCWlmICghc3lzdGVtX3dpZGUpCisJCQl0YXJnZXRfcGlkID0gcGlkOworCisJCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMV0pOworCQljbG9zZShnb19waXBlWzBdKTsKKwkJLyoKKwkJICogd2FpdCBmb3IgY2hpbGQgdG8gc2V0dGxlCisJCSAqLworCQlpZiAocmVhZChjaGlsZF9yZWFkeV9waXBlWzBdLCAmYnVmLCAxKSA9PSAtMSkgeworCQkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBwaXBlIik7CisJCQlleGl0KC0xKTsKKwkJfQorCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKKwl9CisKKworCWlmICgoIXN5c3RlbV93aWRlICYmICFpbmhlcml0KSB8fCBwcm9maWxlX2NwdSAhPSAtMSkgeworCQlvcGVuX2NvdW50ZXJzKHByb2ZpbGVfY3B1LCB0YXJnZXRfcGlkKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1czsgaSsrKQorCQkJb3Blbl9jb3VudGVycyhpLCB0YXJnZXRfcGlkKTsKIAl9CiAKIAlpZiAoZmlsZV9uZXcpIHsKLQkJZXJyID0gcGVyZl9oZWFkZXJfX3dyaXRlKGhlYWRlciwgb3V0cHV0LCBmYWxzZSk7CisJCWVyciA9IHBlcmZfaGVhZGVyX193cml0ZSgmc2Vzc2lvbi0+aGVhZGVyLCBvdXRwdXQsIGZhbHNlKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmICghc3lzdGVtX3dpZGUpCi0JCWV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOworCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAorCQkJCQkgc2Vzc2lvbik7CiAJZWxzZQotCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOwotCi0JaWYgKHRhcmdldF9waWQgPT0gLTEgJiYgYXJnYykgewotCQlwaWQgPSBmb3JrKCk7Ci0JCWlmIChwaWQgPCAwKQotCQkJZGllKCJmYWlsZWQgdG8gZm9yayIpOwotCi0JCWlmICghcGlkKSB7Ci0JCQlpZiAoZXhlY3ZwKGFyZ3ZbMF0sIChjaGFyICoqKWFyZ3YpKSB7Ci0JCQkJcGVycm9yKGFyZ3ZbMF0pOwotCQkJCWV4aXQoLTEpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFdhaXQgYSBiaXQgZm9yIHRoZSBleGVjdidlZCBjaGlsZCB0byBhcHBlYXIKLQkJCSAqIGFuZCBiZSB1cGRhdGVkIGluIC9wcm9jCi0JCQkgKiBGSVhNRTogRG8geW91IGtub3cgYSBsZXNzIGhldXJpc3RpY2FsIHNvbHV0aW9uPwotCQkJICovCi0JCQl1c2xlZXAoMTAwMCk7Ci0JCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLAotCQkJCQkJIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOwotCQl9Ci0KLQkJY2hpbGRfcGlkID0gcGlkOwotCX0KKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKIAogCWlmIChyZWFsdGltZV9wcmlvKSB7CiAJCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKQEAgLTUyNSw2ICs1NjYsMTEgQEAKIAkJfQogCX0KIAorCS8qCisJICogTGV0IHRoZSBjaGlsZCByaXAKKwkgKi8KKwljbG9zZShnb19waXBlWzFdKTsKKwogCWZvciAoOzspIHsKIAkJaW50IGhpdHMgPSBzYW1wbGVzOwogCkBAIC02MTksMTMgKzY2NSwxMyBAQAogewogCWludCBjb3VudGVyOwogCi0Jc3ltYm9sX19pbml0KDApOwotCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgcmVjb3JkX3VzYWdlLAotCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKLQlpZiAoIWFyZ2MgJiYgdGFyZ2V0X3BpZCA9PSAtMSAmJiAhc3lzdGVtX3dpZGUpCisJCQkgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEgJiYgKCFzeXN0ZW1fd2lkZSB8fCBwcm9maWxlX2NwdSA9PSAtMSkpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhyZWNvcmRfdXNhZ2UsIG9wdGlvbnMpOwogCisJc3ltYm9sX19pbml0KCk7CisKIAlpZiAoIW5yX2NvdW50ZXJzKSB7CiAJCW5yX2NvdW50ZXJzCT0gMTsKIAkJYXR0cnNbMF0udHlwZQk9IFBFUkZfVFlQRV9IQVJEV0FSRTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCAzODNjNGFiLi41YzJhYjUzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0yMiw0NzEgKzIyLDQ2IEBACiAjaW5jbHVkZSAicGVyZi5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgogCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKIAotI2luY2x1ZGUgInV0aWwvZGF0YV9tYXAuaCIKICNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgogI2luY2x1ZGUgInV0aWwvc29ydC5oIgogI2luY2x1ZGUgInV0aWwvaGlzdC5oIgogCiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIAotc3RhdGljIGNoYXIJCSpkc29fbGlzdF9zdHIsICpjb21tX2xpc3Rfc3RyLCAqc3ltX2xpc3Rfc3RyLAotCQkJKmNvbF93aWR0aF9saXN0X3N0cjsKLXN0YXRpYyBzdHJ1Y3Qgc3RybGlzdAkqZHNvX2xpc3QsICpjb21tX2xpc3QsICpzeW1fbGlzdDsKLQogc3RhdGljIGludAkJZm9yY2U7CiAKLXN0YXRpYyBpbnQJCWZ1bGxfcGF0aHM7Ci1zdGF0aWMgaW50CQlzaG93X25yX3NhbXBsZXM7Ci0KIHN0YXRpYyBpbnQJCXNob3dfdGhyZWFkczsKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcwlzaG93X3RocmVhZHNfdmFsdWVzOwogCiBzdGF0aWMgY2hhcgkJZGVmYXVsdF9wcmV0dHlfcHJpbnRpbmdfc3R5bGVbXSA9ICJub3JtYWwiOwogc3RhdGljIGNoYXIJCSpwcmV0dHlfcHJpbnRpbmdfc3R5bGUgPSBkZWZhdWx0X3ByZXR0eV9wcmludGluZ19zdHlsZTsKIAotc3RhdGljIGludAkJZXhjbHVkZV9vdGhlciA9IDE7Ci0KIHN0YXRpYyBjaGFyCQljYWxsY2hhaW5fZGVmYXVsdF9vcHRbXSA9ICJmcmFjdGFsLDAuNSI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcjsKLQotc3RhdGljIHU2NAkJc2FtcGxlX3R5cGU7Ci0KLXN0cnVjdCBzeW1ib2xfY29uZglzeW1ib2xfY29uZjsKLQotCi1zdGF0aWMgc2l6ZV90Ci1jYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oRklMRSAqZnAsIGludCBsZWZ0X21hcmdpbikKLXsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZnByaW50ZihmcCwgIiAgICAgICAgICAgICIpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlZnRfbWFyZ2luOyBpKyspCi0JCXJldCArPSBmcHJpbnRmKGZwLCAiICIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNpemVfdCBpcGNoYWluX19mcHJpbnRmX2dyYXBoX2xpbmUoRklMRSAqZnAsIGludCBkZXB0aCwgaW50IGRlcHRoX21hc2ssCi0JCQkJCSAgaW50IGxlZnRfbWFyZ2luKQotewotCWludCBpOwotCXNpemVfdCByZXQgPSAwOwotCi0JcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwotCi0JZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0JCWlmIChkZXB0aF9tYXNrICYgKDEgPDwgaSkpCi0JCQlyZXQgKz0gZnByaW50ZihmcCwgInwgICAgICAgICAgIik7Ci0JCWVsc2UKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAiKTsKLQotCXJldCArPSBmcHJpbnRmKGZwLCAiXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci1zdGF0aWMgc2l6ZV90Ci1pcGNoYWluX19mcHJpbnRmX2dyYXBoKEZJTEUgKmZwLCBzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluLCBpbnQgZGVwdGgsCi0JCSAgICAgICBpbnQgZGVwdGhfbWFzaywgaW50IGNvdW50LCB1NjQgdG90YWxfc2FtcGxlcywKLQkJICAgICAgIGludCBoaXRzLCBpbnQgbGVmdF9tYXJnaW4pCi17Ci0JaW50IGk7Ci0Jc2l6ZV90IHJldCA9IDA7Ci0KLQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7Ci0JZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKLQkJaWYgKGRlcHRoX21hc2sgJiAoMSA8PCBpKSkKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAifCIpOwotCQllbHNlCi0JCQlyZXQgKz0gZnByaW50ZihmcCwgIiAiKTsKLQkJaWYgKCFjb3VudCAmJiBpID09IGRlcHRoIC0gMSkgewotCQkJZG91YmxlIHBlcmNlbnQ7Ci0KLQkJCXBlcmNlbnQgPSBoaXRzICogMTAwLjAgLyB0b3RhbF9zYW1wbGVzOwotCQkJcmV0ICs9IHBlcmNlbnRfY29sb3JfZnByaW50ZihmcCwgIi0tJTIuMmYlJS0tICIsIHBlcmNlbnQpOwotCQl9IGVsc2UKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAiJXMiLCAiICAgICAgICAgICIpOwotCX0KLQlpZiAoY2hhaW4tPnN5bSkKLQkJcmV0ICs9IGZwcmludGYoZnAsICIlc1xuIiwgY2hhaW4tPnN5bS0+bmFtZSk7Ci0JZWxzZQotCQlyZXQgKz0gZnByaW50ZihmcCwgIiVwXG4iLCAodm9pZCAqKShsb25nKWNoYWluLT5pcCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqcmVtX3NxX2JyYWNrZXQ7Ci1zdGF0aWMgc3RydWN0IGNhbGxjaGFpbl9saXN0IHJlbV9oaXRzOwotCi1zdGF0aWMgdm9pZCBpbml0X3JlbV9oaXRzKHZvaWQpCi17Ci0JcmVtX3NxX2JyYWNrZXQgPSBtYWxsb2Moc2l6ZW9mKCpyZW1fc3FfYnJhY2tldCkgKyA2KTsKLQlpZiAoIXJlbV9zcV9icmFja2V0KSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm90IGVub3VnaCBtZW1vcnkgdG8gZGlzcGxheSByZW1haW5pbmcgaGl0c1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdHJjcHkocmVtX3NxX2JyYWNrZXQtPm5hbWUsICJbLi4uXSIpOwotCXJlbV9oaXRzLnN5bSA9IHJlbV9zcV9icmFja2V0OwotfQotCi1zdGF0aWMgc2l6ZV90Ci1fX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAotCQkJICAgdTY0IHRvdGFsX3NhbXBsZXMsIGludCBkZXB0aCwgaW50IGRlcHRoX21hc2ssCi0JCQkgICBpbnQgbGVmdF9tYXJnaW4pCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0OwotCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQ7Ci0Jc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKLQlpbnQgbmV3X2RlcHRoX21hc2sgPSBkZXB0aF9tYXNrOwotCXU2NCBuZXdfdG90YWw7Ci0JdTY0IHJlbWFpbmluZzsKLQlzaXplX3QgcmV0ID0gMDsKLQlpbnQgaTsKLQotCWlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSA9PSBDSEFJTl9HUkFQSF9SRUwpCi0JCW5ld190b3RhbCA9IHNlbGYtPmNoaWxkcmVuX2hpdDsKLQllbHNlCi0JCW5ld190b3RhbCA9IHRvdGFsX3NhbXBsZXM7Ci0KLQlyZW1haW5pbmcgPSBuZXdfdG90YWw7Ci0KLQlub2RlID0gcmJfZmlyc3QoJnNlbGYtPnJiX3Jvb3QpOwotCXdoaWxlIChub2RlKSB7Ci0JCXU2NCBjdW11bDsKLQotCQljaGlsZCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7Ci0JCWN1bXVsID0gY3VtdWxfaGl0cyhjaGlsZCk7Ci0JCXJlbWFpbmluZyAtPSBjdW11bDsKLQotCQkvKgotCQkgKiBUaGUgZGVwdGggbWFzayBtYW5hZ2VzIHRoZSBvdXRwdXQgb2YgcGlwZXMgdGhhdCBzaG93Ci0JCSAqIHRoZSBkZXB0aC4gV2UgZG9uJ3Qgd2FudCB0byBrZWVwIHRoZSBwaXBlcyBvZiB0aGUgY3VycmVudAotCQkgKiBsZXZlbCBmb3IgdGhlIGxhc3QgY2hpbGQgb2YgdGhpcyBkZXB0aC4KLQkJICogRXhjZXB0IGlmIHdlIGhhdmUgcmVtYWluaW5nIGZpbHRlcmVkIGhpdHMuIFRoZXkgd2lsbAotCQkgKiBzdXBlcnNlZGUgdGhlIGxhc3QgY2hpbGQKLQkJICovCi0JCW5leHQgPSByYl9uZXh0KG5vZGUpOwotCQlpZiAoIW5leHQgJiYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX0dSQVBIX1JFTCB8fCAhcmVtYWluaW5nKSkKLQkJCW5ld19kZXB0aF9tYXNrICY9IH4oMSA8PCAoZGVwdGggLSAxKSk7Ci0KLQkJLyoKLQkJICogQnV0IHdlIGtlZXAgdGhlIG9sZGVyIGRlcHRoIG1hc2sgZm9yIHRoZSBsaW5lIHNlcGVyYXRvcgotCQkgKiB0byBrZWVwIHRoZSBsZXZlbCBsaW5rIHVudGlsIHdlIHJlYWNoIHRoZSBsYXN0IGNoaWxkCi0JCSAqLwotCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaF9saW5lKGZwLCBkZXB0aCwgZGVwdGhfbWFzaywKLQkJCQkJCSAgIGxlZnRfbWFyZ2luKTsKLQkJaSA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZjaGlsZC0+dmFsLCBsaXN0KSB7Ci0JCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCi0JCQkJY29udGludWU7Ci0JCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hhaW4sIGRlcHRoLAotCQkJCQkJICAgICAgbmV3X2RlcHRoX21hc2ssIGkrKywKLQkJCQkJCSAgICAgIG5ld190b3RhbCwKLQkJCQkJCSAgICAgIGN1bXVsLAotCQkJCQkJICAgICAgbGVmdF9tYXJnaW4pOwotCQl9Ci0JCXJldCArPSBfX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hpbGQsIG5ld190b3RhbCwKLQkJCQkJCSAgZGVwdGggKyAxLAotCQkJCQkJICBuZXdfZGVwdGhfbWFzayB8ICgxIDw8IGRlcHRoKSwKLQkJCQkJCSAgbGVmdF9tYXJnaW4pOwotCQlub2RlID0gbmV4dDsKLQl9Ci0KLQlpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgPT0gQ0hBSU5fR1JBUEhfUkVMICYmCi0JCXJlbWFpbmluZyAmJiByZW1haW5pbmcgIT0gbmV3X3RvdGFsKSB7Ci0KLQkJaWYgKCFyZW1fc3FfYnJhY2tldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJbmV3X2RlcHRoX21hc2sgJj0gfigxIDw8IChkZXB0aCAtIDEpKTsKLQotCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgJnJlbV9oaXRzLCBkZXB0aCwKLQkJCQkJICAgICAgbmV3X2RlcHRoX21hc2ssIDAsIG5ld190b3RhbCwKLQkJCQkJICAgICAgcmVtYWluaW5nLCBsZWZ0X21hcmdpbik7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgc2l6ZV90Ci1jYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZiwKLQkJCSB1NjQgdG90YWxfc2FtcGxlcywgaW50IGxlZnRfbWFyZ2luKQotewotCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47Ci0JYm9vbCBwcmludGVkID0gZmFsc2U7Ci0JaW50IGkgPSAwOwotCWludCByZXQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJnNlbGYtPnZhbCwgbGlzdCkgewotCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIWkrKyAmJiBzb3J0X19maXJzdF9kaW1lbnNpb24gPT0gU09SVF9TWU0pCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXByaW50ZWQpIHsKLQkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAifFxuIik7Ci0JCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7Ci0JCQlyZXQgKz0gZnByaW50ZihmcCwgIi0tLSIpOwotCi0JCQlsZWZ0X21hcmdpbiArPSAzOwotCQkJcHJpbnRlZCA9IHRydWU7Ci0JCX0gZWxzZQotCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwotCi0JCWlmIChjaGFpbi0+c3ltKQotCQkJcmV0ICs9IGZwcmludGYoZnAsICIgJXNcbiIsIGNoYWluLT5zeW0tPm5hbWUpOwotCQllbHNlCi0JCQlyZXQgKz0gZnByaW50ZihmcCwgIiAlcFxuIiwgKHZvaWQgKikobG9uZyljaGFpbi0+aXApOwotCX0KLQotCXJldCArPSBfX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgc2VsZiwgdG90YWxfc2FtcGxlcywgMSwgMSwgbGVmdF9tYXJnaW4pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNpemVfdAotY2FsbGNoYWluX19mcHJpbnRmX2ZsYXQoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZiwKLQkJCXU2NCB0b3RhbF9zYW1wbGVzKQotewotCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47Ci0Jc2l6ZV90IHJldCA9IDA7Ci0KLQlpZiAoIXNlbGYpCi0JCXJldHVybiAwOwotCi0JcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9mbGF0KGZwLCBzZWxmLT5wYXJlbnQsIHRvdGFsX3NhbXBsZXMpOwotCi0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmc2VsZi0+dmFsLCBsaXN0KSB7Ci0JCWlmIChjaGFpbi0+aXAgPj0gUEVSRl9DT05URVhUX01BWCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoY2hhaW4tPnN5bSkKLQkJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICVzXG4iLCBjaGFpbi0+c3ltLT5uYW1lKTsKLQkJZWxzZQotCQkJcmV0ICs9IGZwcmludGYoZnAsICIgICAgICAgICAgICAgICAgJXBcbiIsCi0JCQkJCSh2b2lkICopKGxvbmcpY2hhaW4tPmlwKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc2l6ZV90Ci1oaXN0X2VudHJ5X2NhbGxjaGFpbl9fZnByaW50ZihGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsCi0JCQkgICAgICB1NjQgdG90YWxfc2FtcGxlcywgaW50IGxlZnRfbWFyZ2luKQotewotCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwotCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hhaW47Ci0Jc2l6ZV90IHJldCA9IDA7Ci0KLQlyYl9ub2RlID0gcmJfZmlyc3QoJnNlbGYtPnNvcnRlZF9jaGFpbik7Ci0Jd2hpbGUgKHJiX25vZGUpIHsKLQkJZG91YmxlIHBlcmNlbnQ7Ci0KLQkJY2hhaW4gPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOwotCQlwZXJjZW50ID0gY2hhaW4tPmhpdCAqIDEwMC4wIC8gdG90YWxfc2FtcGxlczsKLQkJc3dpdGNoIChjYWxsY2hhaW5fcGFyYW0ubW9kZSkgewotCQljYXNlIENIQUlOX0ZMQVQ6Ci0JCQlyZXQgKz0gcGVyY2VudF9jb2xvcl9mcHJpbnRmKGZwLCAiICAgICAgICAgICAlNi4yZiUlXG4iLAotCQkJCQkJICAgICBwZXJjZW50KTsKLQkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZmxhdChmcCwgY2hhaW4sIHRvdGFsX3NhbXBsZXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0hBSU5fR1JBUEhfQUJTOiAvKiBGYWxsZG93biAqLwotCQljYXNlIENIQUlOX0dSQVBIX1JFTDoKLQkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoYWluLCB0b3RhbF9zYW1wbGVzLAotCQkJCQkJCWxlZnRfbWFyZ2luKTsKLQkJY2FzZSBDSEFJTl9OT05FOgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ICs9IGZwcmludGYoZnAsICJcbiIpOwotCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc2l6ZV90Ci1oaXN0X2VudHJ5X19mcHJpbnRmKEZJTEUgKmZwLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgdTY0IHRvdGFsX3NhbXBsZXMpCi17Ci0Jc3RydWN0IHNvcnRfZW50cnkgKnNlOwotCXNpemVfdCByZXQ7Ci0KLQlpZiAoZXhjbHVkZV9vdGhlciAmJiAhc2VsZi0+cGFyZW50KQotCQlyZXR1cm4gMDsKLQotCWlmICh0b3RhbF9zYW1wbGVzKQotCQlyZXQgPSBwZXJjZW50X2NvbG9yX2ZwcmludGYoZnAsCi0JCQkJCSAgICBmaWVsZF9zZXAgPyAiJS4yZiIgOiAiICAgJTYuMmYlJSIsCi0JCQkJCShzZWxmLT5jb3VudCAqIDEwMC4wKSAvIHRvdGFsX3NhbXBsZXMpOwotCWVsc2UKLQkJcmV0ID0gZnByaW50ZihmcCwgZmllbGRfc2VwID8gIiVsbGQiIDogIiUxMmxsZCAiLCBzZWxmLT5jb3VudCk7Ci0KLQlpZiAoc2hvd19ucl9zYW1wbGVzKSB7Ci0JCWlmIChmaWVsZF9zZXApCi0JCQlmcHJpbnRmKGZwLCAiJWMlbGxkIiwgKmZpZWxkX3NlcCwgc2VsZi0+Y291bnQpOwotCQllbHNlCi0JCQlmcHJpbnRmKGZwLCAiJTExbGxkIiwgc2VsZi0+Y291bnQpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpIHsKLQkJaWYgKHNlLT5lbGlkZSkKLQkJCWNvbnRpbnVlOwotCi0JCWZwcmludGYoZnAsICIlcyIsIGZpZWxkX3NlcCA/OiAiICAiKTsKLQkJcmV0ICs9IHNlLT5wcmludChmcCwgc2VsZiwgc2UtPndpZHRoID8gKnNlLT53aWR0aCA6IDApOwotCX0KLQotCXJldCArPSBmcHJpbnRmKGZwLCAiXG4iKTsKLQotCWlmIChjYWxsY2hhaW4pIHsKLQkJaW50IGxlZnRfbWFyZ2luID0gMDsKLQotCQlpZiAoc29ydF9fZmlyc3RfZGltZW5zaW9uID09IFNPUlRfQ09NTSkgewotCQkJc2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIHR5cGVvZigqc2UpLAotCQkJCQkJbGlzdCk7Ci0JCQlsZWZ0X21hcmdpbiA9IHNlLT53aWR0aCA/ICpzZS0+d2lkdGggOiAwOwotCQkJbGVmdF9tYXJnaW4gLT0gdGhyZWFkX19jb21tX2xlbihzZWxmLT50aHJlYWQpOwotCQl9Ci0KLQkJaGlzdF9lbnRyeV9jYWxsY2hhaW5fX2ZwcmludGYoZnAsIHNlbGYsIHRvdGFsX3NhbXBsZXMsCi0JCQkJCSAgICAgIGxlZnRfbWFyZ2luKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBkc29fX2NhbGNfY29sX3dpZHRoKHN0cnVjdCBkc28gKnNlbGYpCi17Ci0JaWYgKCFjb2xfd2lkdGhfbGlzdF9zdHIgJiYgIWZpZWxkX3NlcCAmJgotCSAgICAoIWRzb19saXN0IHx8IHN0cmxpc3RfX2hhc19lbnRyeShkc29fbGlzdCwgc2VsZi0+bmFtZSkpKSB7Ci0JCXVuc2lnbmVkIGludCBzbGVuID0gc3RybGVuKHNlbGYtPm5hbWUpOwotCQlpZiAoc2xlbiA+IGRzb3NfX2NvbF93aWR0aCkKLQkJCWRzb3NfX2NvbF93aWR0aCA9IHNsZW47Ci0JfQotCi0Jc2VsZi0+c2xlbl9jYWxjdWxhdGVkID0gMTsKLX0KLQotc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQotewotCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwotCi0JaWYgKCFjb2xfd2lkdGhfbGlzdF9zdHIgJiYgIWZpZWxkX3NlcCAmJgotCSAgICAoIWNvbW1fbGlzdCB8fCBzdHJsaXN0X19oYXNfZW50cnkoY29tbV9saXN0LCBjb21tKSkpIHsKLQkJdW5zaWduZWQgaW50IHNsZW4gPSBzdHJsZW4oY29tbSk7Ci0KLQkJaWYgKHNsZW4gPiBjb21tc19fY29sX3dpZHRoKSB7Ci0JCQljb21tc19fY29sX3dpZHRoID0gc2xlbjsKLQkJCXRocmVhZHNfX2NvbF93aWR0aCA9IHNsZW4gKyA2OwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IHRocmVhZF9fc2V0X2NvbW1fYWRqdXN0KHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pCi17Ci0JaW50IHJldCA9IHRocmVhZF9fc2V0X2NvbW0oc2VsZiwgY29tbSk7Ci0KLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JdGhyZWFkX19jb21tX2FkanVzdChzZWxmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNhbGxfX21hdGNoKHN0cnVjdCBzeW1ib2wgKnN5bSkKLXsKLQlpZiAoc3ltLT5uYW1lICYmICFyZWdleGVjKCZwYXJlbnRfcmVnZXgsIHN5bS0+bmFtZSwgMCwgTlVMTCwgMCkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICoqcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAotCQkJCQkgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCi0JCQkJCSBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50KQotewotCXU4IGNwdW1vZGUgPSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI7Ci0Jc3RydWN0IHN5bWJvbCAqKnN5bXMgPSBOVUxMOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKGNhbGxjaGFpbikgewotCQlzeW1zID0gY2FsbG9jKGNoYWluLT5uciwgc2l6ZW9mKCpzeW1zKSk7Ci0JCWlmICghc3ltcykgewotCQkJZnByaW50ZihzdGRlcnIsICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN5bWJvbHNcbiIpOwotCQkJZXhpdCgtMSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY2hhaW4tPm5yOyBpKyspIHsKLQkJdTY0IGlwID0gY2hhaW4tPmlwc1tpXTsKLQkJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7Ci0KLQkJaWYgKGlwID49IFBFUkZfQ09OVEVYVF9NQVgpIHsKLQkJCXN3aXRjaCAoaXApIHsKLQkJCWNhc2UgUEVSRl9DT05URVhUX0hWOgotCQkJCWNwdW1vZGUgPSBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1I7CWJyZWFrOwotCQkJY2FzZSBQRVJGX0NPTlRFWFRfS0VSTkVMOgotCQkJCWNwdW1vZGUgPSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsJYnJlYWs7Ci0JCQljYXNlIFBFUkZfQ09OVEVYVF9VU0VSOgotCQkJCWNwdW1vZGUgPSBQRVJGX1JFQ09SRF9NSVNDX1VTRVI7CWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAotCQkJCQkgICBpcCwgJmFsLCBOVUxMKTsKLQkJaWYgKGFsLnN5bSAhPSBOVUxMKSB7Ci0JCQlpZiAoc29ydF9faGFzX3BhcmVudCAmJiAhKnBhcmVudCAmJgotCQkJICAgIGNhbGxfX21hdGNoKGFsLnN5bSkpCi0JCQkJKnBhcmVudCA9IGFsLnN5bTsKLQkJCWlmICghY2FsbGNoYWluKQotCQkJCWJyZWFrOwotCQkJc3ltc1tpXSA9IGFsLnN5bTsKLQkJfQotCX0KLQotCXJldHVybiBzeW1zOwotfQotCi0vKgotICogY29sbGVjdCBoaXN0b2dyYW0gY291bnRzCi0gKi8KLQotc3RhdGljIGludCBoaXN0X2VudHJ5X19hZGQoc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAotCQkJICAgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sIHU2NCBjb3VudCkKK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCisJCQkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLCB1NjQgY291bnQpCiB7CiAJc3RydWN0IHN5bWJvbCAqKnN5bXMgPSBOVUxMLCAqcGFyZW50ID0gTlVMTDsKIAlib29sIGhpdDsKIAlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CiAKLQlpZiAoKHNvcnRfX2hhc19wYXJlbnQgfHwgY2FsbGNoYWluKSAmJiBjaGFpbikKLQkJc3ltcyA9IHJlc29sdmVfY2FsbGNoYWluKGFsLT50aHJlYWQsIGNoYWluLCAmcGFyZW50KTsKLQotCWhlID0gX19oaXN0X2VudHJ5X19hZGQoYWwsIHBhcmVudCwgY291bnQsICZoaXQpOworCWlmICgoc29ydF9faGFzX3BhcmVudCB8fCBzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSAmJiBjaGFpbikKKwkJc3ltcyA9IHBlcmZfc2Vzc2lvbl9fcmVzb2x2ZV9jYWxsY2hhaW4oc2VsZiwgYWwtPnRocmVhZCwKKwkJCQkJCSAgICAgICBjaGFpbiwgJnBhcmVudCk7CisJaGUgPSBfX3BlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2VsZiwgYWwsIHBhcmVudCwgY291bnQsICZoaXQpOwogCWlmIChoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChoaXQpCiAJCWhlLT5jb3VudCArPSBjb3VudDsKIAotCWlmIChjYWxsY2hhaW4pIHsKKwlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgewogCQlpZiAoIWhpdCkKIAkJCWNhbGxjaGFpbl9pbml0KCZoZS0+Y2FsbGNoYWluKTsKIAkJYXBwZW5kX2NoYWluKCZoZS0+Y2FsbGNoYWluLCBjaGFpbiwgc3ltcyk7CkBAIC00OTYsMTAwICs3MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzaXplX3Qgb3V0cHV0X19mcHJpbnRmKEZJTEUgKmZwLCB1NjQgdG90YWxfc2FtcGxlcykKLXsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqcG9zOwotCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0Jc2l6ZV90IHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IHdpZHRoOwotCWNoYXIgKmNvbF93aWR0aCA9IGNvbF93aWR0aF9saXN0X3N0cjsKLQlpbnQgcmF3X3ByaW50aW5nX3N0eWxlOwotCi0JcmF3X3ByaW50aW5nX3N0eWxlID0gIXN0cmNtcChwcmV0dHlfcHJpbnRpbmdfc3R5bGUsICJyYXciKTsKLQotCWluaXRfcmVtX2hpdHMoKTsKLQotCWZwcmludGYoZnAsICIjIFNhbXBsZXM6ICVMZFxuIiwgKHU2NCl0b3RhbF9zYW1wbGVzKTsKLQlmcHJpbnRmKGZwLCAiI1xuIik7Ci0KLQlmcHJpbnRmKGZwLCAiIyBPdmVyaGVhZCIpOwotCWlmIChzaG93X25yX3NhbXBsZXMpIHsKLQkJaWYgKGZpZWxkX3NlcCkKLQkJCWZwcmludGYoZnAsICIlY1NhbXBsZXMiLCAqZmllbGRfc2VwKTsKLQkJZWxzZQotCQkJZnB1dHMoIiAgU2FtcGxlcyAgIiwgZnApOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7Ci0JCWlmIChzZS0+ZWxpZGUpCi0JCQljb250aW51ZTsKLQkJaWYgKGZpZWxkX3NlcCkgewotCQkJZnByaW50ZihmcCwgIiVjJXMiLCAqZmllbGRfc2VwLCBzZS0+aGVhZGVyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXdpZHRoID0gc3RybGVuKHNlLT5oZWFkZXIpOwotCQlpZiAoc2UtPndpZHRoKSB7Ci0JCQlpZiAoY29sX3dpZHRoX2xpc3Rfc3RyKSB7Ci0JCQkJaWYgKGNvbF93aWR0aCkgewotCQkJCQkqc2UtPndpZHRoID0gYXRvaShjb2xfd2lkdGgpOwotCQkJCQljb2xfd2lkdGggPSBzdHJjaHIoY29sX3dpZHRoLCAnLCcpOwotCQkJCQlpZiAoY29sX3dpZHRoKQotCQkJCQkJKytjb2xfd2lkdGg7Ci0JCQkJfQotCQkJfQotCQkJd2lkdGggPSAqc2UtPndpZHRoID0gbWF4KCpzZS0+d2lkdGgsIHdpZHRoKTsKLQkJfQotCQlmcHJpbnRmKGZwLCAiICAlKnMiLCB3aWR0aCwgc2UtPmhlYWRlcik7Ci0JfQotCWZwcmludGYoZnAsICJcbiIpOwotCi0JaWYgKGZpZWxkX3NlcCkKLQkJZ290byBwcmludF9lbnRyaWVzOwotCi0JZnByaW50ZihmcCwgIiMgLi4uLi4uLi4iKTsKLQlpZiAoc2hvd19ucl9zYW1wbGVzKQotCQlmcHJpbnRmKGZwLCAiIC4uLi4uLi4uLi4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7Ci0JCXVuc2lnbmVkIGludCBpOwotCi0JCWlmIChzZS0+ZWxpZGUpCi0JCQljb250aW51ZTsKLQotCQlmcHJpbnRmKGZwLCAiICAiKTsKLQkJaWYgKHNlLT53aWR0aCkKLQkJCXdpZHRoID0gKnNlLT53aWR0aDsKLQkJZWxzZQotCQkJd2lkdGggPSBzdHJsZW4oc2UtPmhlYWRlcik7Ci0JCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQotCQkJZnByaW50ZihmcCwgIi4iKTsKLQl9Ci0JZnByaW50ZihmcCwgIlxuIik7Ci0KLQlmcHJpbnRmKGZwLCAiI1xuIik7Ci0KLXByaW50X2VudHJpZXM6Ci0JZm9yIChuZCA9IHJiX2ZpcnN0KCZvdXRwdXRfaGlzdHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlyZXQgKz0gaGlzdF9lbnRyeV9fZnByaW50ZihmcCwgcG9zLCB0b3RhbF9zYW1wbGVzKTsKLQl9Ci0KLQlpZiAoc29ydF9vcmRlciA9PSBkZWZhdWx0X3NvcnRfb3JkZXIgJiYKLQkJCXBhcmVudF9wYXR0ZXJuID09IGRlZmF1bHRfcGFyZW50X3BhdHRlcm4pIHsKLQkJZnByaW50ZihmcCwgIiNcbiIpOwotCQlmcHJpbnRmKGZwLCAiIyAoRm9yIGEgaGlnaGVyIGxldmVsIG92ZXJ2aWV3LCB0cnk6IHBlcmYgcmVwb3J0IC0tc29ydCBjb21tLGRzbylcbiIpOwotCQlmcHJpbnRmKGZwLCAiI1xuIik7Ci0JfQotCWZwcmludGYoZnAsICJcbiIpOwotCi0JZnJlZShyZW1fc3FfYnJhY2tldCk7Ci0KLQlpZiAoc2hvd190aHJlYWRzKQotCQlwZXJmX3JlYWRfdmFsdWVzX2Rpc3BsYXkoZnAsICZzaG93X3RocmVhZHNfdmFsdWVzLAotCQkJCQkgcmF3X3ByaW50aW5nX3N0eWxlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdmFsaWRhdGVfY2hhaW4oc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sIGV2ZW50X3QgKmV2ZW50KQogewogCXVuc2lnbmVkIGludCBjaGFpbl9zaXplOwpAQCAtNjAzLDEwOCArODQsNjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0JdTY0IGlwID0gZXZlbnQtPmlwLmlwOwotCXU2NCBwZXJpb2QgPSAxOwotCXZvaWQgKm1vcmVfZGF0YSA9IGV2ZW50LT5pcC5fX21vcmVfZGF0YTsKLQlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiA9IE5VTEw7Ci0JaW50IGNwdW1vZGU7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IC5wZXJpb2QgPSAxLCB9OwogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCk7CiAKLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpIHsKLQkJcGVyaW9kID0gKih1NjQgKiltb3JlX2RhdGE7Ci0JCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKLQl9CisJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAogCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAogCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC50aWQsCi0JCSh2b2lkICopKGxvbmcpaXAsCi0JCShsb25nIGxvbmcpcGVyaW9kKTsKKwkJZGF0YS5waWQsIGRhdGEudGlkLAorCQkodm9pZCAqKShsb25nKWRhdGEuaXAsCisJCShsb25nIGxvbmcpZGF0YS5wZXJpb2QpOwogCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7CisJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7CiAJCXVuc2lnbmVkIGludCBpOwogCi0JCWNoYWluID0gKHZvaWQgKiltb3JlX2RhdGE7CisJCWR1bXBfcHJpbnRmKCIuLi4gY2hhaW46IG5yOiVMdVxuIiwgZGF0YS5jYWxsY2hhaW4tPm5yKTsKIAotCQlkdW1wX3ByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIGNoYWluLT5ucik7Ci0KLQkJaWYgKHZhbGlkYXRlX2NoYWluKGNoYWluLCBldmVudCkgPCAwKSB7CisJCWlmICh2YWxpZGF0ZV9jaGFpbihkYXRhLmNhbGxjaGFpbiwgZXZlbnQpIDwgMCkgewogCQkJcHJfZGVidWcoImNhbGwtY2hhaW4gcHJvYmxlbSB3aXRoIGV2ZW50LCAiCiAJCQkJICJza2lwcGluZyBpdC5cbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQlpZiAoZHVtcF90cmFjZSkgewotCQkJZm9yIChpID0gMDsgaSA8IGNoYWluLT5ucjsgaSsrKQotCQkJCWR1bXBfcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTZMeFxuIiwgaSwgY2hhaW4tPmlwc1tpXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS5jYWxsY2hhaW4tPm5yOyBpKyspCisJCQkJZHVtcF9wcmludGYoIi4uLi4uICUyZDogJTAxNkx4XG4iLAorCQkJCQkgICAgaSwgZGF0YS5jYWxsY2hhaW4tPmlwc1tpXSk7CiAJCX0KIAl9CiAKLQlpZiAodGhyZWFkID09IE5VTEwpIHsKLQkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCQlldmVudC0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7Ci0KLQlpZiAoY29tbV9saXN0ICYmICFzdHJsaXN0X19oYXNfZW50cnkoY29tbV9saXN0LCB0aHJlYWQtPmNvbW0pKQorCWlmIChhbC5maWx0ZXJlZCkKIAkJcmV0dXJuIDA7CiAKLQljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7Ci0KLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsCi0JCQkJICAgTUFQX19GVU5DVElPTiwgaXAsICZhbCwgTlVMTCk7Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIGRvIHRoaXMgaGVyZSBhcyB3ZSBtYXkgaGF2ZSBhIGRzbyB3aXRoIG5vIHN5bWJvbCBoaXQgdGhhdAotCSAqIGhhcyBhIG5hbWUgbG9uZ2VyIHRoYW4gdGhlIG9uZXMgd2l0aCBzeW1ib2xzIHNhbXBsZWQuCi0JICovCi0JaWYgKGFsLm1hcCAmJiAhc29ydF9kc28uZWxpZGUgJiYgIWFsLm1hcC0+ZHNvLT5zbGVuX2NhbGN1bGF0ZWQpCi0JCWRzb19fY2FsY19jb2xfd2lkdGgoYWwubWFwLT5kc28pOwotCi0JaWYgKGRzb19saXN0ICYmCi0JICAgICghYWwubWFwIHx8ICFhbC5tYXAtPmRzbyB8fAotCSAgICAgIShzdHJsaXN0X19oYXNfZW50cnkoZHNvX2xpc3QsIGFsLm1hcC0+ZHNvLT5zaG9ydF9uYW1lKSB8fAotCSAgICAgICAoYWwubWFwLT5kc28tPnNob3J0X25hbWUgIT0gYWwubWFwLT5kc28tPmxvbmdfbmFtZSAmJgotCQlzdHJsaXN0X19oYXNfZW50cnkoZHNvX2xpc3QsIGFsLm1hcC0+ZHNvLT5sb25nX25hbWUpKSkpKQotCQlyZXR1cm4gMDsKLQotCWlmIChzeW1fbGlzdCAmJiBhbC5zeW0gJiYgIXN0cmxpc3RfX2hhc19lbnRyeShzeW1fbGlzdCwgYWwuc3ltLT5uYW1lKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoaGlzdF9lbnRyeV9fYWRkKCZhbCwgY2hhaW4sIHBlcmlvZCkpIHsKKwlpZiAocGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsIGRhdGEuY2FsbGNoYWluLCBkYXRhLnBlcmlvZCkpIHsKIAkJcHJfZGVidWcoInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgc2tpcHBpbmcgZXZlbnRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JZXZlbnRfX3N0YXRzLnRvdGFsICs9IHBlcmlvZDsKLQorCXNlc3Npb24tPmV2ZW50c19zdGF0cy50b3RhbCArPSBkYXRhLnBlcmlvZDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQpCi17Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQpOwotCi0JZHVtcF9wcmludGYoIjogJXM6JWRcbiIsIGV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7Ci0KLQlpZiAodGhyZWFkID09IE5VTEwgfHwKLQkgICAgdGhyZWFkX19zZXRfY29tbV9hZGp1c3QodGhyZWFkLCBldmVudC0+Y29tbS5jb21tKSkgewotCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwcm9jZXNzX3JlYWRfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCitzdGF0aWMgaW50IHByb2Nlc3NfcmVhZF9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cjsKIAotCWF0dHIgPSBwZXJmX2hlYWRlcl9fZmluZF9hdHRyKGV2ZW50LT5yZWFkLmlkLCBoZWFkZXIpOworCWF0dHIgPSBwZXJmX2hlYWRlcl9fZmluZF9hdHRyKGV2ZW50LT5yZWFkLmlkLCAmc2Vzc2lvbi0+aGVhZGVyKTsKIAogCWlmIChzaG93X3RocmVhZHMpIHsKIAkJY29uc3QgY2hhciAqbmFtZSA9IGF0dHIgPyBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKQpAQCAtNzIzLDI1ICsxNTYsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayh1NjQgdHlwZSkKK3N0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzYW1wbGVfdHlwZSA9IHR5cGU7Ci0KLQlpZiAoIShzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpIHsKKwlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpIHsKIAkJaWYgKHNvcnRfX2hhc19wYXJlbnQpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0ZWQgLS1zb3J0IHBhcmVudCwgYnV0IG5vIgogCQkJCQkiIGNhbGxjaGFpbiBkYXRhLiBEaWQgeW91IGNhbGwiCiAJCQkJCSIgcGVyZiByZWNvcmQgd2l0aG91dCAtZz9cbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmIChjYWxsY2hhaW4pIHsKKwkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKIAkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0ZWQgLWcgYnV0IG5vIGNhbGxjaGFpbiBkYXRhLiIKIAkJCQkJIiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgd2l0aG91dCIKIAkJCQkJIiAtZz9cbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JfSBlbHNlIGlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSAhPSBDSEFJTl9OT05FICYmICFjYWxsY2hhaW4pIHsKLQkJCWNhbGxjaGFpbiA9IDE7CisJfSBlbHNlIGlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSAhPSBDSEFJTl9OT05FICYmICFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CisJCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKIAkJCWlmIChyZWdpc3Rlcl9jYWxsY2hhaW5fcGFyYW0oJmNhbGxjaGFpbl9wYXJhbSkgPCAwKSB7CiAJCQkJZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWdpc3RlciBjYWxsY2hhaW4iCiAJCQkJCQkiIHBhcmFtc1xuIik7CkBAIC03NTIsMTAgKzE4MywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcmZfZmlsZV9oYW5kbGVyIGZpbGVfaGFuZGxlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewogCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAogCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiAJLnByb2Nlc3NfZXhpdF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCiAJLnByb2Nlc3NfZm9ya19ldmVudAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCiAJLnByb2Nlc3NfbG9zdF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCkBAIC03NjYsNDAgKzE5Nyw0NyBAQAogCiBzdGF0aWMgaW50IF9fY21kX3JlcG9ydCh2b2lkKQogewotCXN0cnVjdCB0aHJlYWQgKmlkbGU7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOwogCi0JaWRsZSA9IHJlZ2lzdGVyX2lkbGVfdGhyZWFkKCk7Ci0JdGhyZWFkX19jb21tX2FkanVzdChpZGxlKTsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlKTsKKwlpZiAoc2Vzc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChzaG93X3RocmVhZHMpCiAJCXBlcmZfcmVhZF92YWx1ZXNfaW5pdCgmc2hvd190aHJlYWRzX3ZhbHVlcyk7CiAKLQlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKLQotCXJldCA9IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIGZvcmNlLAotCQkJCSAgICAgIGZ1bGxfcGF0aHMsICZldmVudF9fY3dkbGVuLCAmZXZlbnRfX2N3ZCk7CisJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZXZlbnRfb3BzKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dF9kZWxldGU7CiAKIAlpZiAoZHVtcF90cmFjZSkgewogCQlldmVudF9fcHJpbnRfdG90YWxzKCk7Ci0JCXJldHVybiAwOworCQlnb3RvIG91dF9kZWxldGU7CiAJfQogCiAJaWYgKHZlcmJvc2UgPiAzKQotCQl0aHJlYWRzX19mcHJpbnRmKHN0ZG91dCk7CisJCXBlcmZfc2Vzc2lvbl9fZnByaW50ZihzZXNzaW9uLCBzdGRvdXQpOwogCiAJaWYgKHZlcmJvc2UgPiAyKQogCQlkc29zX19mcHJpbnRmKHN0ZG91dCk7CiAKLQljb2xsYXBzZV9fcmVzb3J0KCk7Ci0Jb3V0cHV0X19yZXNvcnQoZXZlbnRfX3N0YXRzLnRvdGFsKTsKLQlvdXRwdXRfX2ZwcmludGYoc3Rkb3V0LCBldmVudF9fc3RhdHMudG90YWwpOworCXBlcmZfc2Vzc2lvbl9fY29sbGFwc2VfcmVzb3J0KHNlc3Npb24pOworCXBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzZXNzaW9uLCBzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWwpOworCWZwcmludGYoc3Rkb3V0LCAiIyBTYW1wbGVzOiAlTGRcbiNcbiIsIHNlc3Npb24tPmV2ZW50c19zdGF0cy50b3RhbCk7CisJcGVyZl9zZXNzaW9uX19mcHJpbnRmX2hpc3RzKHNlc3Npb24sIE5VTEwsIGZhbHNlLCBzdGRvdXQpOworCWlmIChzb3J0X29yZGVyID09IGRlZmF1bHRfc29ydF9vcmRlciAmJgorCSAgICBwYXJlbnRfcGF0dGVybiA9PSBkZWZhdWx0X3BhcmVudF9wYXR0ZXJuKQorCQlmcHJpbnRmKHN0ZG91dCwgIiNcbiMgKEZvciBhIGhpZ2hlciBsZXZlbCBvdmVydmlldywgdHJ5OiBwZXJmIHJlcG9ydCAtLXNvcnQgY29tbSxkc28pXG4jXG4iKTsKIAotCWlmIChzaG93X3RocmVhZHMpCisJaWYgKHNob3dfdGhyZWFkcykgeworCQlib29sIHJhd19wcmludGluZ19zdHlsZSA9ICFzdHJjbXAocHJldHR5X3ByaW50aW5nX3N0eWxlLCAicmF3Iik7CisJCXBlcmZfcmVhZF92YWx1ZXNfZGlzcGxheShzdGRvdXQsICZzaG93X3RocmVhZHNfdmFsdWVzLAorCQkJCQkgcmF3X3ByaW50aW5nX3N0eWxlKTsKIAkJcGVyZl9yZWFkX3ZhbHVlc19kZXN0cm95KCZzaG93X3RocmVhZHNfdmFsdWVzKTsKLQorCX0KK291dF9kZWxldGU6CisJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODEwLDcgKzI0OCw3IEBACiAJY2hhciAqdG9rOwogCWNoYXIgKmVuZHB0cjsKIAotCWNhbGxjaGFpbiA9IDE7CisJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CiAKIAlpZiAoIWFyZykKIAkJcmV0dXJuIDA7CkBAIC04MzEsNyArMjY5LDcgQEAKIAogCWVsc2UgaWYgKCFzdHJuY21wKHRvaywgIm5vbmUiLCBzdHJsZW4oYXJnKSkpIHsKIAkJY2FsbGNoYWluX3BhcmFtLm1vZGUgPSBDSEFJTl9OT05FOwotCQljYWxsY2hhaW4gPSAwOworCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC04NzQsNyArMzEyLDcgQEAKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAogCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmc3ltYm9sX2NvbmYudXNlX21vZHVsZXMsCiAJCSAgICAibG9hZCBtb2R1bGUgc3ltYm9scyAtIFdBUk5JTkc6IHVzZSBvbmx5IHdpdGggLWsgYW5kIExJVkUga2VybmVsIiksCi0JT1BUX0JPT0xFQU4oJ24nLCAic2hvdy1uci1zYW1wbGVzIiwgJnNob3dfbnJfc2FtcGxlcywKKwlPUFRfQk9PTEVBTignbicsICJzaG93LW5yLXNhbXBsZXMiLCAmc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzLAogCQkgICAgIlNob3cgYSBjb2x1bW4gd2l0aCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMiKSwKIAlPUFRfQk9PTEVBTignVCcsICJ0aHJlYWRzIiwgJnNob3dfdGhyZWFkcywKIAkJICAgICJTaG93IHBlci10aHJlYWQgZXZlbnQgY291bnRlcnMiKSwKQEAgLTg4Miw3OCArMzIwLDQ2IEBACiAJCSAgICJwcmV0dHkgcHJpbnRpbmcgc3R5bGUga2V5OiBub3JtYWwgcmF3IiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKIAkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmZ1bGxfcGF0aHMsCisJT1BUX0JPT0xFQU4oJ1AnLCAiZnVsbC1wYXRocyIsICZldmVudF9vcHMuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygncCcsICJwYXJlbnQiLCAmcGFyZW50X3BhdHRlcm4sICJyZWdleCIsCiAJCSAgICJyZWdleCBmaWx0ZXIgdG8gaWRlbnRpZnkgcGFyZW50LCBzZWU6ICctLXNvcnQgcGFyZW50JyIpLAotCU9QVF9CT09MRUFOKCd4JywgImV4Y2x1ZGUtb3RoZXIiLCAmZXhjbHVkZV9vdGhlciwKKwlPUFRfQk9PTEVBTigneCcsICJleGNsdWRlLW90aGVyIiwgJnN5bWJvbF9jb25mLmV4Y2x1ZGVfb3RoZXIsCiAJCSAgICAiT25seSBkaXNwbGF5IGVudHJpZXMgd2l0aCBwYXJlbnQtbWF0Y2giKSwKIAlPUFRfQ0FMTEJBQ0tfREVGQVVMVCgnZycsICJjYWxsLWdyYXBoIiwgTlVMTCwgIm91dHB1dF90eXBlLG1pbl9wZXJjZW50IiwKIAkJICAgICAiRGlzcGxheSBjYWxsY2hhaW5zIHVzaW5nIG91dHB1dF90eXBlIGFuZCBtaW4gcGVyY2VudCB0aHJlc2hvbGQuICIKIAkJICAgICAiRGVmYXVsdDogZnJhY3RhbCwwLjUiLCAmcGFyc2VfY2FsbGNoYWluX29wdCwgY2FsbGNoYWluX2RlZmF1bHRfb3B0KSwKLQlPUFRfU1RSSU5HKCdkJywgImRzb3MiLCAmZHNvX2xpc3Rfc3RyLCAiZHNvWyxkc28uLi5dIiwKKwlPUFRfU1RSSU5HKCdkJywgImRzb3MiLCAmc3ltYm9sX2NvbmYuZHNvX2xpc3Rfc3RyLCAiZHNvWyxkc28uLi5dIiwKIAkJICAgIm9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBkc29zIiksCi0JT1BUX1NUUklORygnQycsICJjb21tcyIsICZjb21tX2xpc3Rfc3RyLCAiY29tbVssY29tbS4uLl0iLAorCU9QVF9TVFJJTkcoJ0MnLCAiY29tbXMiLCAmc3ltYm9sX2NvbmYuY29tbV9saXN0X3N0ciwgImNvbW1bLGNvbW0uLi5dIiwKIAkJICAgIm9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcyIpLAotCU9QVF9TVFJJTkcoJ1MnLCAic3ltYm9scyIsICZzeW1fbGlzdF9zdHIsICJzeW1ib2xbLHN5bWJvbC4uLl0iLAorCU9QVF9TVFJJTkcoJ1MnLCAic3ltYm9scyIsICZzeW1ib2xfY29uZi5zeW1fbGlzdF9zdHIsICJzeW1ib2xbLHN5bWJvbC4uLl0iLAogCQkgICAib25seSBjb25zaWRlciB0aGVzZSBzeW1ib2xzIiksCi0JT1BUX1NUUklORygndycsICJjb2x1bW4td2lkdGhzIiwgJmNvbF93aWR0aF9saXN0X3N0ciwKKwlPUFRfU1RSSU5HKCd3JywgImNvbHVtbi13aWR0aHMiLCAmc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyLAogCQkgICAid2lkdGhbLHdpZHRoLi4uXSIsCiAJCSAgICJkb24ndCB0cnkgdG8gYWRqdXN0IGNvbHVtbiB3aWR0aCwgdXNlIHRoZXNlIGZpeGVkIHZhbHVlcyIpLAotCU9QVF9TVFJJTkcoJ3QnLCAiZmllbGQtc2VwYXJhdG9yIiwgJmZpZWxkX3NlcCwgInNlcGFyYXRvciIsCisJT1BUX1NUUklORygndCcsICJmaWVsZC1zZXBhcmF0b3IiLCAmc3ltYm9sX2NvbmYuZmllbGRfc2VwLCAic2VwYXJhdG9yIiwKIAkJICAgInNlcGFyYXRvciBmb3IgY29sdW1ucywgbm8gc3BhY2VzIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiAiCiAJCSAgICJjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKIAlPUFRfRU5EKCkKIH07CiAKLXN0YXRpYyB2b2lkIHNldHVwX3NvcnRpbmcodm9pZCkKLXsKLQljaGFyICp0bXAsICp0b2ssICpzdHIgPSBzdHJkdXAoc29ydF9vcmRlcik7Ci0KLQlmb3IgKHRvayA9IHN0cnRva19yKHN0ciwgIiwgIiwgJnRtcCk7Ci0JCQl0b2s7IHRvayA9IHN0cnRva19yKE5VTEwsICIsICIsICZ0bXApKSB7Ci0JCWlmIChzb3J0X2RpbWVuc2lvbl9fYWRkKHRvaykgPCAwKSB7Ci0JCQllcnJvcigiVW5rbm93biAtLXNvcnQga2V5OiBgJXMnIiwgdG9rKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhyZXBvcnRfdXNhZ2UsIG9wdGlvbnMpOwotCQl9Ci0JfQotCi0JZnJlZShzdHIpOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cF9saXN0KHN0cnVjdCBzdHJsaXN0ICoqbGlzdCwgY29uc3QgY2hhciAqbGlzdF9zdHIsCi0JCSAgICAgICBzdHJ1Y3Qgc29ydF9lbnRyeSAqc2UsIGNvbnN0IGNoYXIgKmxpc3RfbmFtZSwKLQkJICAgICAgIEZJTEUgKmZwKQotewotCWlmIChsaXN0X3N0cikgewotCQkqbGlzdCA9IHN0cmxpc3RfX25ldyh0cnVlLCBsaXN0X3N0cik7Ci0JCWlmICghKmxpc3QpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbXMgcGFyc2luZyAlcyBsaXN0XG4iLAotCQkJCWxpc3RfbmFtZSk7Ci0JCQlleGl0KDEyOSk7Ci0JCX0KLQkJaWYgKHN0cmxpc3RfX25yX2VudHJpZXMoKmxpc3QpID09IDEpIHsKLQkJCWZwcmludGYoZnAsICIjICVzOiAlc1xuIiwgbGlzdF9uYW1lLAotCQkJCXN0cmxpc3RfX2VudHJ5KCpsaXN0LCAwKS0+cyk7Ci0JCQlzZS0+ZWxpZGUgPSB0cnVlOwotCQl9Ci0JfQotfQotCiBpbnQgY21kX3JlcG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0JaWYgKHN5bWJvbF9faW5pdCgmc3ltYm9sX2NvbmYpIDwgMCkKLQkJcmV0dXJuIC0xOwotCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgcmVwb3J0X3VzYWdlLCAwKTsKIAotCXNldHVwX3NvcnRpbmcoKTsKKwlzZXR1cF9wYWdlcigpOworCisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfc29ydGluZyhyZXBvcnRfdXNhZ2UsIG9wdGlvbnMpOwogCiAJaWYgKHBhcmVudF9wYXR0ZXJuICE9IGRlZmF1bHRfcGFyZW50X3BhdHRlcm4pIHsKIAkJc29ydF9kaW1lbnNpb25fX2FkZCgicGFyZW50Iik7CiAJCXNvcnRfcGFyZW50LmVsaWRlID0gMTsKIAl9IGVsc2UKLQkJZXhjbHVkZV9vdGhlciA9IDA7CisJCXN5bWJvbF9jb25mLmV4Y2x1ZGVfb3RoZXIgPSBmYWxzZTsKIAogCS8qCiAJICogQW55ICh1bnJlY29nbml6ZWQpIGFyZ3VtZW50cyBsZWZ0PwpAQCAtOTYxLDE3ICszNjcsOSBAQAogCWlmIChhcmdjKQogCQl1c2FnZV93aXRoX29wdGlvbnMocmVwb3J0X3VzYWdlLCBvcHRpb25zKTsKIAotCXNldHVwX3BhZ2VyKCk7Ci0KLQlzZXR1cF9saXN0KCZkc29fbGlzdCwgZHNvX2xpc3Rfc3RyLCAmc29ydF9kc28sICJkc28iLCBzdGRvdXQpOwotCXNldHVwX2xpc3QoJmNvbW1fbGlzdCwgY29tbV9saXN0X3N0ciwgJnNvcnRfY29tbSwgImNvbW0iLCBzdGRvdXQpOwotCXNldHVwX2xpc3QoJnN5bV9saXN0LCBzeW1fbGlzdF9zdHIsICZzb3J0X3N5bSwgInN5bWJvbCIsIHN0ZG91dCk7Ci0KLQlpZiAoZmllbGRfc2VwICYmICpmaWVsZF9zZXAgPT0gJy4nKSB7Ci0JCWZwdXRzKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iLAotCQkgICAgICBzdGRlcnIpOwotCQlleGl0KDEyOSk7Ci0JfQorCXNvcnRfZW50cnlfX3NldHVwX2VsaWRlKCZzb3J0X2Rzbywgc3ltYm9sX2NvbmYuZHNvX2xpc3QsICJkc28iLCBzdGRvdXQpOworCXNvcnRfZW50cnlfX3NldHVwX2VsaWRlKCZzb3J0X2NvbW0sIHN5bWJvbF9jb25mLmNvbW1fbGlzdCwgImNvbW0iLCBzdGRvdXQpOworCXNvcnRfZW50cnlfX3NldHVwX2VsaWRlKCZzb3J0X3N5bSwgc3ltYm9sX2NvbmYuc3ltX2xpc3QsICJzeW1ib2wiLCBzdGRvdXQpOwogCiAJcmV0dXJuIF9fY21kX3JlcG9ydCgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCAyNmI3ODJmLi44MDIwOWRmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtNiwxNCArNiwxMyBAQAogI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgogCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgogCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgotI2luY2x1ZGUgInV0aWwvZGF0YV9tYXAuaCIKIAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgogCiAjaW5jbHVkZSA8c2VtYXBob3JlLmg+CkBAIC0yMiw5ICsyMSw2IEBACiAKIHN0YXRpYyBjaGFyCQkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIAotc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOwotc3RhdGljIHU2NAkJCXNhbXBsZV90eXBlOwotCiBzdGF0aWMgY2hhcgkJCWRlZmF1bHRfc29ydF9vcmRlcltdID0gImF2ZywgbWF4LCBzd2l0Y2gsIHJ1bnRpbWUiOwogc3RhdGljIGNoYXIJCQkqc29ydF9vcmRlciA9IGRlZmF1bHRfc29ydF9vcmRlcjsKIApAQCAtMTQxLDYgKzEzNyw3IEBACiAJc3RydWN0IHRocmVhZAkJKnRocmVhZDsKIAlzdHJ1Y3QgcmJfbm9kZQkJbm9kZTsKIAl1NjQJCQltYXhfbGF0OworCXU2NAkJCW1heF9sYXRfYXQ7CiAJdTY0CQkJdG90YWxfbGF0OwogCXU2NAkJCW5iX2F0b21zOwogCXU2NAkJCXRvdGFsX3J1bnRpbWU7CkBAIC00MTQsMzQgKzQxMSwzMyBAQAogCXJldHVybiBzdW07CiB9CiAKLXN0YXRpYyB1NjQgZ2V0X2NwdV91c2FnZV9uc2VjX3NlbGYodm9pZCkKK3N0YXRpYyBpbnQgc2VsZl9vcGVuX2NvdW50ZXJzKHZvaWQpCiB7Ci0JY2hhciBmaWxlbmFtZSBbXSA9ICIvcHJvYy8xMjM0NTY3ODkwL3NjaGVkIjsKLQl1bnNpZ25lZCBsb25nIG1zZWNzLCBuc2VjczsKLQljaGFyICpsaW5lID0gTlVMTDsKLQl1NjQgdG90YWwgPSAwOwotCXNpemVfdCBsZW4gPSAwOwotCXNzaXplX3QgY2hhcnM7Ci0JRklMRSAqZmlsZTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJaW50IGZkOworCisJbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOworCisJYXR0ci50eXBlID0gUEVSRl9UWVBFX1NPRlRXQVJFOworCWF0dHIuY29uZmlnID0gUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLOworCisJZmQgPSBzeXNfcGVyZl9ldmVudF9vcGVuKCZhdHRyLCAwLCAtMSwgLTEsIDApOworCisJaWYgKGZkIDwgMCkKKwkJZGllKCJFcnJvcjogc3lzX3BlcmZfZXZlbnRfb3BlbigpIHN5c2NhbGwgcmV0dXJuZWQiCisJCSAgICAid2l0aCAlZCAoJXMpXG4iLCBmZCwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyB1NjQgZ2V0X2NwdV91c2FnZV9uc2VjX3NlbGYoaW50IGZkKQoreworCXU2NCBydW50aW1lOwogCWludCByZXQ7CiAKLQlzcHJpbnRmKGZpbGVuYW1lLCAiL3Byb2MvJWQvc2NoZWQiLCBnZXRwaWQoKSk7Ci0JZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotCUJVR19PTighZmlsZSk7CisJcmV0ID0gcmVhZChmZCwgJnJ1bnRpbWUsIHNpemVvZihydW50aW1lKSk7CisJQlVHX09OKHJldCAhPSBzaXplb2YocnVudGltZSkpOwogCi0Jd2hpbGUgKChjaGFycyA9IGdldGxpbmUoJmxpbmUsICZsZW4sIGZpbGUpKSAhPSAtMSkgewotCQlyZXQgPSBzc2NhbmYobGluZSwgInNlLnN1bV9leGVjX3J1bnRpbWUgOiAlbGQuJTA2bGRcbiIsCi0JCQkmbXNlY3MsICZuc2Vjcyk7Ci0JCWlmIChyZXQgPT0gMikgewotCQkJdG90YWwgPSBtc2VjcyoxZTYgKyBuc2VjczsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChsaW5lKQotCQlmcmVlKGxpbmUpOwotCWZjbG9zZShmaWxlKTsKLQotCXJldHVybiB0b3RhbDsKKwlyZXR1cm4gcnVudGltZTsKIH0KIAogc3RhdGljIHZvaWQgKnRocmVhZF9mdW5jKHZvaWQgKmN0eCkKQEAgLTQ1MCw5ICs0NDYsMTEgQEAKIAl1NjQgY3B1X3VzYWdlXzAsIGNwdV91c2FnZV8xOwogCXVuc2lnbmVkIGxvbmcgaSwgcmV0OwogCWNoYXIgY29tbTJbMjJdOworCWludCBmZDsKIAogCXNwcmludGYoY29tbTIsICI6JXMiLCB0aGlzX3Rhc2stPmNvbW0pOwogCXByY3RsKFBSX1NFVF9OQU1FLCBjb21tMik7CisJZmQgPSBzZWxmX29wZW5fY291bnRlcnMoKTsKIAogYWdhaW46CiAJcmV0ID0gc2VtX3Bvc3QoJnRoaXNfdGFzay0+cmVhZHlfZm9yX3dvcmspOwpAQCAtNDYyLDE2ICs0NjAsMTUgQEAKIAlyZXQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmc3RhcnRfd29ya19tdXRleCk7CiAJQlVHX09OKHJldCk7CiAKLQljcHVfdXNhZ2VfMCA9IGdldF9jcHVfdXNhZ2VfbnNlY19zZWxmKCk7CisJY3B1X3VzYWdlXzAgPSBnZXRfY3B1X3VzYWdlX25zZWNfc2VsZihmZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdGhpc190YXNrLT5ucl9ldmVudHM7IGkrKykgewogCQl0aGlzX3Rhc2stPmN1cnJfZXZlbnQgPSBpOwogCQlwcm9jZXNzX3NjaGVkX2V2ZW50KHRoaXNfdGFzaywgdGhpc190YXNrLT5hdG9tc1tpXSk7CiAJfQogCi0JY3B1X3VzYWdlXzEgPSBnZXRfY3B1X3VzYWdlX25zZWNfc2VsZigpOworCWNwdV91c2FnZV8xID0gZ2V0X2NwdV91c2FnZV9uc2VjX3NlbGYoZmQpOwogCXRoaXNfdGFzay0+Y3B1X3VzYWdlID0gY3B1X3VzYWdlXzEgLSBjcHVfdXNhZ2VfMDsKLQogCXJldCA9IHNlbV9wb3N0KCZ0aGlzX3Rhc2stPndvcmtfZG9uZV9zZW0pOwogCUJVR19PTihyZXQpOwogCkBAIC02MjgsMTEgKzYyNSw2IEBACiAJcHJpbnRmKCJ0aGUgc2xlZXAgdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOwogfQogCi1zdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSB7Ci0JdTMyIHNpemU7Ci0JY2hhciBkYXRhWzBdOwotfTsKLQogI2RlZmluZSBGSUxMX0ZJRUxEKHB0ciwgZmllbGQsIGV2ZW50LCBkYXRhKQlcCiAJcHRyLmZpZWxkID0gKHR5cGVvZihwdHIuZmllbGQpKSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICNmaWVsZCwgZGF0YSkKIApAQCAtNzM2LDE4ICs3MjgsMjEgQEAKIAogc3RydWN0IHRyYWNlX3NjaGVkX2hhbmRsZXIgewogCXZvaWQgKCpzd2l0Y2hfZXZlbnQpKHN0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgKiwKKwkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqLAogCQkJICAgICBzdHJ1Y3QgZXZlbnQgKiwKIAkJCSAgICAgaW50IGNwdSwKIAkJCSAgICAgdTY0IHRpbWVzdGFtcCwKIAkJCSAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKIAogCXZvaWQgKCpydW50aW1lX2V2ZW50KShzdHJ1Y3QgdHJhY2VfcnVudGltZV9ldmVudCAqLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqLAogCQkJICAgICAgc3RydWN0IGV2ZW50ICosCiAJCQkgICAgICBpbnQgY3B1LAogCQkJICAgICAgdTY0IHRpbWVzdGFtcCwKIAkJCSAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CiAKIAl2b2lkICgqd2FrZXVwX2V2ZW50KShzdHJ1Y3QgdHJhY2Vfd2FrZXVwX2V2ZW50ICosCisJCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKiwKIAkJCSAgICAgc3RydWN0IGV2ZW50ICosCiAJCQkgICAgIGludCBjcHUsCiAJCQkgICAgIHU2NCB0aW1lc3RhbXAsCkBAIC03NjAsNiArNzU1LDcgQEAKIAkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CiAKIAl2b2lkICgqbWlncmF0ZV90YXNrX2V2ZW50KShzdHJ1Y3QgdHJhY2VfbWlncmF0ZV90YXNrX2V2ZW50ICosCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgc3RydWN0IGV2ZW50ICosCiAJCQkgICBpbnQgY3B1LAogCQkJICAgdTY0IHRpbWVzdGFtcCwKQEAgLTc2OSw2ICs3NjUsNyBAQAogCiBzdGF0aWMgdm9pZAogcmVwbGF5X3dha2V1cF9ldmVudChzdHJ1Y3QgdHJhY2Vfd2FrZXVwX2V2ZW50ICp3YWtldXBfZXZlbnQsCisJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCwKIAkJICAgIHN0cnVjdCBldmVudCAqZXZlbnQsCiAJCSAgICBpbnQgY3B1IF9fdXNlZCwKIAkJICAgIHU2NCB0aW1lc3RhbXAgX191c2VkLApAQCAtNzk1LDYgKzc5Miw3IEBACiAKIHN0YXRpYyB2b2lkCiByZXBsYXlfc3dpdGNoX2V2ZW50KHN0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgKnN3aXRjaF9ldmVudCwKKwkJICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkLAogCQkgICAgc3RydWN0IGV2ZW50ICpldmVudCwKIAkJICAgIGludCBjcHUsCiAJCSAgICB1NjQgdGltZXN0YW1wLApAQCAtMTAxOSwxMyArMTAxNywxNiBAQAogCiAJZGVsdGEgPSBhdG9tLT5zY2hlZF9pbl90aW1lIC0gYXRvbS0+d2FrZV91cF90aW1lOwogCWF0b21zLT50b3RhbF9sYXQgKz0gZGVsdGE7Ci0JaWYgKGRlbHRhID4gYXRvbXMtPm1heF9sYXQpCisJaWYgKGRlbHRhID4gYXRvbXMtPm1heF9sYXQpIHsKIAkJYXRvbXMtPm1heF9sYXQgPSBkZWx0YTsKKwkJYXRvbXMtPm1heF9sYXRfYXQgPSB0aW1lc3RhbXA7CisJfQogCWF0b21zLT5uYl9hdG9tcysrOwogfQogCiBzdGF0aWMgdm9pZAogbGF0ZW5jeV9zd2l0Y2hfZXZlbnQoc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCAqc3dpdGNoX2V2ZW50LAorCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCSAgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCiAJCSAgICAgaW50IGNwdSwKIAkJICAgICB1NjQgdGltZXN0YW1wLApAQCAtMTA0OSw4ICsxMDUwLDggQEAKIAkJZGllKCJobSwgZGVsdGE6ICVMZCA8IDAgP1xuIiwgZGVsdGEpOwogCiAKLQlzY2hlZF9vdXQgPSB0aHJlYWRzX19maW5kbmV3KHN3aXRjaF9ldmVudC0+cHJldl9waWQpOwotCXNjaGVkX2luID0gdGhyZWFkc19fZmluZG5ldyhzd2l0Y2hfZXZlbnQtPm5leHRfcGlkKTsKKwlzY2hlZF9vdXQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCk7CisJc2NoZWRfaW4gPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCk7CiAKIAlvdXRfZXZlbnRzID0gdGhyZWFkX2F0b21zX3NlYXJjaCgmYXRvbV9yb290LCBzY2hlZF9vdXQsICZjbXBfcGlkKTsKIAlpZiAoIW91dF9ldmVudHMpIHsKQEAgLTEwNzgsMTIgKzEwNzksMTMgQEAKIAogc3RhdGljIHZvaWQKIGxhdGVuY3lfcnVudGltZV9ldmVudChzdHJ1Y3QgdHJhY2VfcnVudGltZV9ldmVudCAqcnVudGltZV9ldmVudCwKKwkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkgICAgIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAogCQkgICAgIGludCBjcHUsCiAJCSAgICAgdTY0IHRpbWVzdGFtcCwKIAkJICAgICBzdHJ1Y3QgdGhyZWFkICp0aGlzX3RocmVhZCBfX3VzZWQpCiB7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhydW50aW1lX2V2ZW50LT5waWQpOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBydW50aW1lX2V2ZW50LT5waWQpOwogCXN0cnVjdCB3b3JrX2F0b21zICphdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgdGhyZWFkLCAmY21wX3BpZCk7CiAKIAlCVUdfT04oY3B1ID49IE1BWF9DUFVTIHx8IGNwdSA8IDApOwpAQCAtMTEwMCw2ICsxMTAyLDcgQEAKIAogc3RhdGljIHZvaWQKIGxhdGVuY3lfd2FrZXVwX2V2ZW50KHN0cnVjdCB0cmFjZV93YWtldXBfZXZlbnQgKndha2V1cF9ldmVudCwKKwkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkgICAgIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCiAJCSAgICAgaW50IGNwdSBfX3VzZWQsCiAJCSAgICAgdTY0IHRpbWVzdGFtcCwKQEAgLTExMTMsNyArMTExNiw3IEBACiAJaWYgKCF3YWtldXBfZXZlbnQtPnN1Y2Nlc3MpCiAJCXJldHVybjsKIAotCXdha2VlID0gdGhyZWFkc19fZmluZG5ldyh3YWtldXBfZXZlbnQtPnBpZCk7CisJd2FrZWUgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgd2FrZXVwX2V2ZW50LT5waWQpOwogCWF0b21zID0gdGhyZWFkX2F0b21zX3NlYXJjaCgmYXRvbV9yb290LCB3YWtlZSwgJmNtcF9waWQpOwogCWlmICghYXRvbXMpIHsKIAkJdGhyZWFkX2F0b21zX2luc2VydCh3YWtlZSk7CkBAIC0xMTQ3LDYgKzExNTAsNyBAQAogCiBzdGF0aWMgdm9pZAogbGF0ZW5jeV9taWdyYXRlX3Rhc2tfZXZlbnQoc3RydWN0IHRyYWNlX21pZ3JhdGVfdGFza19ldmVudCAqbWlncmF0ZV90YXNrX2V2ZW50LAorCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCSAgICAgc3RydWN0IGV2ZW50ICpfX2V2ZW50IF9fdXNlZCwKIAkJICAgICBpbnQgY3B1IF9fdXNlZCwKIAkJICAgICB1NjQgdGltZXN0YW1wLApAQCAtMTE2Miw3ICsxMTY2LDcgQEAKIAlpZiAocHJvZmlsZV9jcHUgPT0gLTEpCiAJCXJldHVybjsKIAotCW1pZ3JhbnQgPSB0aHJlYWRzX19maW5kbmV3KG1pZ3JhdGVfdGFza19ldmVudC0+cGlkKTsKKwltaWdyYW50ID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIG1pZ3JhdGVfdGFza19ldmVudC0+cGlkKTsKIAlhdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgbWlncmFudCwgJmNtcF9waWQpOwogCWlmICghYXRvbXMpIHsKIAkJdGhyZWFkX2F0b21zX2luc2VydChtaWdyYW50KTsKQEAgLTEyMTYsMTAgKzEyMjAsMTEgQEAKIAogCWF2ZyA9IHdvcmtfbGlzdC0+dG90YWxfbGF0IC8gd29ya19saXN0LT5uYl9hdG9tczsKIAotCXByaW50ZigifCUxMS4zZiBtcyB8JTlsbHUgfCBhdmc6JTkuM2YgbXMgfCBtYXg6JTkuM2YgbXMgfFxuIiwKKwlwcmludGYoInwlMTEuM2YgbXMgfCU5bGx1IHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAogCSAgICAgIChkb3VibGUpd29ya19saXN0LT50b3RhbF9ydW50aW1lIC8gMWU2LAogCQkgd29ya19saXN0LT5uYl9hdG9tcywgKGRvdWJsZSlhdmcgLyAxZTYsCi0JCSAoZG91YmxlKXdvcmtfbGlzdC0+bWF4X2xhdCAvIDFlNik7CisJCSAoZG91YmxlKXdvcmtfbGlzdC0+bWF4X2xhdCAvIDFlNiwKKwkJIChkb3VibGUpd29ya19saXN0LT5tYXhfbGF0X2F0IC8gMWU5KTsKIH0KIAogc3RhdGljIGludCBwaWRfY21wKHN0cnVjdCB3b3JrX2F0b21zICpsLCBzdHJ1Y3Qgd29ya19hdG9tcyAqcikKQEAgLTEzNTYsNyArMTM2MSw3IEBACiBzdGF0aWMgc3RydWN0IHRyYWNlX3NjaGVkX2hhbmRsZXIgKnRyYWNlX2hhbmRsZXI7CiAKIHN0YXRpYyB2b2lkCi1wcm9jZXNzX3NjaGVkX3dha2V1cF9ldmVudChzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3LAorcHJvY2Vzc19zY2hlZF93YWtldXBfZXZlbnQodm9pZCAqZGF0YSwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCSAgIHN0cnVjdCBldmVudCAqZXZlbnQsCiAJCQkgICBpbnQgY3B1IF9fdXNlZCwKIAkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLApAQCAtMTM2NCwxNiArMTM2OSwxNyBAQAogewogCXN0cnVjdCB0cmFjZV93YWtldXBfZXZlbnQgd2FrZXVwX2V2ZW50OwogCi0JRklMTF9DT01NT05fRklFTERTKHdha2V1cF9ldmVudCwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9DT01NT05fRklFTERTKHdha2V1cF9ldmVudCwgZXZlbnQsIGRhdGEpOwogCi0JRklMTF9BUlJBWSh3YWtldXBfZXZlbnQsIGNvbW0sIGV2ZW50LCByYXctPmRhdGEpOwotCUZJTExfRklFTEQod2FrZXVwX2V2ZW50LCBwaWQsIGV2ZW50LCByYXctPmRhdGEpOwotCUZJTExfRklFTEQod2FrZXVwX2V2ZW50LCBwcmlvLCBldmVudCwgcmF3LT5kYXRhKTsKLQlGSUxMX0ZJRUxEKHdha2V1cF9ldmVudCwgc3VjY2VzcywgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRCh3YWtldXBfZXZlbnQsIGNwdSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9BUlJBWSh3YWtldXBfZXZlbnQsIGNvbW0sIGV2ZW50LCBkYXRhKTsKKwlGSUxMX0ZJRUxEKHdha2V1cF9ldmVudCwgcGlkLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRCh3YWtldXBfZXZlbnQsIHByaW8sIGV2ZW50LCBkYXRhKTsKKwlGSUxMX0ZJRUxEKHdha2V1cF9ldmVudCwgc3VjY2VzcywgZXZlbnQsIGRhdGEpOworCUZJTExfRklFTEQod2FrZXVwX2V2ZW50LCBjcHUsIGV2ZW50LCBkYXRhKTsKIAogCWlmICh0cmFjZV9oYW5kbGVyLT53YWtldXBfZXZlbnQpCi0JCXRyYWNlX2hhbmRsZXItPndha2V1cF9ldmVudCgmd2FrZXVwX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJCXRyYWNlX2hhbmRsZXItPndha2V1cF9ldmVudCgmd2FrZXVwX2V2ZW50LCBzZXNzaW9uLCBldmVudCwKKwkJCQkJICAgIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogfQogCiAvKgpAQCAtMTM5MSw2ICsxMzk3LDcgQEAKIAogc3RhdGljIHZvaWQKIG1hcF9zd2l0Y2hfZXZlbnQoc3RydWN0IHRyYWNlX3N3aXRjaF9ldmVudCAqc3dpdGNoX2V2ZW50LAorCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJIHN0cnVjdCBldmVudCAqZXZlbnQgX191c2VkLAogCQkgaW50IHRoaXNfY3B1LAogCQkgdTY0IHRpbWVzdGFtcCwKQEAgLTE0MTgsOCArMTQyNSw4IEBACiAJCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKIAogCi0Jc2NoZWRfb3V0ID0gdGhyZWFkc19fZmluZG5ldyhzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKLQlzY2hlZF9pbiA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCk7CisJc2NoZWRfb3V0ID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHN3aXRjaF9ldmVudC0+cHJldl9waWQpOworCXNjaGVkX2luID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHN3aXRjaF9ldmVudC0+bmV4dF9waWQpOwogCiAJY3Vycl90aHJlYWRbdGhpc19jcHVdID0gc2NoZWRfaW47CiAKQEAgLTE0NjksNyArMTQ3Niw3IEBACiAKIAogc3RhdGljIHZvaWQKLXByb2Nlc3Nfc2NoZWRfc3dpdGNoX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCitwcm9jZXNzX3NjaGVkX3N3aXRjaF9ldmVudCh2b2lkICpkYXRhLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCwKIAkJCSAgIGludCB0aGlzX2NwdSwKIAkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLApAQCAtMTQ3NywxNSArMTQ4NCwxNSBAQAogewogCXN0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgc3dpdGNoX2V2ZW50OwogCi0JRklMTF9DT01NT05fRklFTERTKHN3aXRjaF9ldmVudCwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9DT01NT05fRklFTERTKHN3aXRjaF9ldmVudCwgZXZlbnQsIGRhdGEpOwogCi0JRklMTF9BUlJBWShzd2l0Y2hfZXZlbnQsIHByZXZfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIHByZXZfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKLQlGSUxMX0ZJRUxEKHN3aXRjaF9ldmVudCwgcHJldl9wcmlvLCBldmVudCwgcmF3LT5kYXRhKTsKLQlGSUxMX0ZJRUxEKHN3aXRjaF9ldmVudCwgcHJldl9zdGF0ZSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9BUlJBWShzd2l0Y2hfZXZlbnQsIG5leHRfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIG5leHRfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKLQlGSUxMX0ZJRUxEKHN3aXRjaF9ldmVudCwgbmV4dF9wcmlvLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0FSUkFZKHN3aXRjaF9ldmVudCwgcHJldl9jb21tLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIHByZXZfcGlkLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChzd2l0Y2hfZXZlbnQsIHByZXZfcHJpbywgZXZlbnQsIGRhdGEpOworCUZJTExfRklFTEQoc3dpdGNoX2V2ZW50LCBwcmV2X3N0YXRlLCBldmVudCwgZGF0YSk7CisJRklMTF9BUlJBWShzd2l0Y2hfZXZlbnQsIG5leHRfY29tbSwgZXZlbnQsIGRhdGEpOworCUZJTExfRklFTEQoc3dpdGNoX2V2ZW50LCBuZXh0X3BpZCwgZXZlbnQsIGRhdGEpOworCUZJTExfRklFTEQoc3dpdGNoX2V2ZW50LCBuZXh0X3ByaW8sIGV2ZW50LCBkYXRhKTsKIAogCWlmIChjdXJyX3BpZFt0aGlzX2NwdV0gIT0gKHUzMiktMSkgewogCQkvKgpAQCAtMTQ5NiwxMyArMTUwMywxNCBAQAogCQkJbnJfY29udGV4dF9zd2l0Y2hfYnVncysrOwogCX0KIAlpZiAodHJhY2VfaGFuZGxlci0+c3dpdGNoX2V2ZW50KQotCQl0cmFjZV9oYW5kbGVyLT5zd2l0Y2hfZXZlbnQoJnN3aXRjaF9ldmVudCwgZXZlbnQsIHRoaXNfY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJCXRyYWNlX2hhbmRsZXItPnN3aXRjaF9ldmVudCgmc3dpdGNoX2V2ZW50LCBzZXNzaW9uLCBldmVudCwKKwkJCQkJICAgIHRoaXNfY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiAKIAljdXJyX3BpZFt0aGlzX2NwdV0gPSBzd2l0Y2hfZXZlbnQubmV4dF9waWQ7CiB9CiAKIHN0YXRpYyB2b2lkCi1wcm9jZXNzX3NjaGVkX3J1bnRpbWVfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdywKK3Byb2Nlc3Nfc2NoZWRfcnVudGltZV9ldmVudCh2b2lkICpkYXRhLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCwKIAkJCSAgIGludCBjcHUgX191c2VkLAogCQkJICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCkBAIC0xNTEwLDE3ICsxNTE4LDE3IEBACiB7CiAJc3RydWN0IHRyYWNlX3J1bnRpbWVfZXZlbnQgcnVudGltZV9ldmVudDsKIAotCUZJTExfQVJSQVkocnVudGltZV9ldmVudCwgY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChydW50aW1lX2V2ZW50LCBwaWQsIGV2ZW50LCByYXctPmRhdGEpOwotCUZJTExfRklFTEQocnVudGltZV9ldmVudCwgcnVudGltZSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChydW50aW1lX2V2ZW50LCB2cnVudGltZSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9BUlJBWShydW50aW1lX2V2ZW50LCBjb21tLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChydW50aW1lX2V2ZW50LCBwaWQsIGV2ZW50LCBkYXRhKTsKKwlGSUxMX0ZJRUxEKHJ1bnRpbWVfZXZlbnQsIHJ1bnRpbWUsIGV2ZW50LCBkYXRhKTsKKwlGSUxMX0ZJRUxEKHJ1bnRpbWVfZXZlbnQsIHZydW50aW1lLCBldmVudCwgZGF0YSk7CiAKIAlpZiAodHJhY2VfaGFuZGxlci0+cnVudGltZV9ldmVudCkKLQkJdHJhY2VfaGFuZGxlci0+cnVudGltZV9ldmVudCgmcnVudGltZV9ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQl0cmFjZV9oYW5kbGVyLT5ydW50aW1lX2V2ZW50KCZydW50aW1lX2V2ZW50LCBzZXNzaW9uLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1wcm9jZXNzX3NjaGVkX2ZvcmtfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdywKK3Byb2Nlc3Nfc2NoZWRfZm9ya19ldmVudCh2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBldmVudCAqZXZlbnQsCiAJCQkgaW50IGNwdSBfX3VzZWQsCiAJCQkgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCkBAIC0xNTI4LDE1ICsxNTM2LDE2IEBACiB7CiAJc3RydWN0IHRyYWNlX2ZvcmtfZXZlbnQgZm9ya19ldmVudDsKIAotCUZJTExfQ09NTU9OX0ZJRUxEUyhmb3JrX2V2ZW50LCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0NPTU1PTl9GSUVMRFMoZm9ya19ldmVudCwgZXZlbnQsIGRhdGEpOwogCi0JRklMTF9BUlJBWShmb3JrX2V2ZW50LCBwYXJlbnRfY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChmb3JrX2V2ZW50LCBwYXJlbnRfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKLQlGSUxMX0FSUkFZKGZvcmtfZXZlbnQsIGNoaWxkX2NvbW0sIGV2ZW50LCByYXctPmRhdGEpOwotCUZJTExfRklFTEQoZm9ya19ldmVudCwgY2hpbGRfcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0FSUkFZKGZvcmtfZXZlbnQsIHBhcmVudF9jb21tLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChmb3JrX2V2ZW50LCBwYXJlbnRfcGlkLCBldmVudCwgZGF0YSk7CisJRklMTF9BUlJBWShmb3JrX2V2ZW50LCBjaGlsZF9jb21tLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChmb3JrX2V2ZW50LCBjaGlsZF9waWQsIGV2ZW50LCBkYXRhKTsKIAogCWlmICh0cmFjZV9oYW5kbGVyLT5mb3JrX2V2ZW50KQotCQl0cmFjZV9oYW5kbGVyLT5mb3JrX2V2ZW50KCZmb3JrX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJCXRyYWNlX2hhbmRsZXItPmZvcmtfZXZlbnQoJmZvcmtfZXZlbnQsIGV2ZW50LAorCQkJCQkgIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTU1MCw3ICsxNTU5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXByb2Nlc3Nfc2NoZWRfbWlncmF0ZV90YXNrX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCitwcm9jZXNzX3NjaGVkX21pZ3JhdGVfdGFza19ldmVudCh2b2lkICpkYXRhLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCwKIAkJCSAgIGludCBjcHUgX191c2VkLAogCQkJICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCkBAIC0xNTU4LDgwICsxNTY3LDY3IEBACiB7CiAJc3RydWN0IHRyYWNlX21pZ3JhdGVfdGFza19ldmVudCBtaWdyYXRlX3Rhc2tfZXZlbnQ7CiAKLQlGSUxMX0NPTU1PTl9GSUVMRFMobWlncmF0ZV90YXNrX2V2ZW50LCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0NPTU1PTl9GSUVMRFMobWlncmF0ZV90YXNrX2V2ZW50LCBldmVudCwgZGF0YSk7CiAKLQlGSUxMX0FSUkFZKG1pZ3JhdGVfdGFza19ldmVudCwgY29tbSwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChtaWdyYXRlX3Rhc2tfZXZlbnQsIHBpZCwgZXZlbnQsIHJhdy0+ZGF0YSk7Ci0JRklMTF9GSUVMRChtaWdyYXRlX3Rhc2tfZXZlbnQsIHByaW8sIGV2ZW50LCByYXctPmRhdGEpOwotCUZJTExfRklFTEQobWlncmF0ZV90YXNrX2V2ZW50LCBjcHUsIGV2ZW50LCByYXctPmRhdGEpOworCUZJTExfQVJSQVkobWlncmF0ZV90YXNrX2V2ZW50LCBjb21tLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChtaWdyYXRlX3Rhc2tfZXZlbnQsIHBpZCwgZXZlbnQsIGRhdGEpOworCUZJTExfRklFTEQobWlncmF0ZV90YXNrX2V2ZW50LCBwcmlvLCBldmVudCwgZGF0YSk7CisJRklMTF9GSUVMRChtaWdyYXRlX3Rhc2tfZXZlbnQsIGNwdSwgZXZlbnQsIGRhdGEpOwogCiAJaWYgKHRyYWNlX2hhbmRsZXItPm1pZ3JhdGVfdGFza19ldmVudCkKLQkJdHJhY2VfaGFuZGxlci0+bWlncmF0ZV90YXNrX2V2ZW50KCZtaWdyYXRlX3Rhc2tfZXZlbnQsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwkJdHJhY2VfaGFuZGxlci0+bWlncmF0ZV90YXNrX2V2ZW50KCZtaWdyYXRlX3Rhc2tfZXZlbnQsIHNlc3Npb24sCisJCQkJCQkgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogfQogCiBzdGF0aWMgdm9pZAotcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnRfdCAqcmF3X2V2ZW50IF9fdXNlZCwgdm9pZCAqbW9yZV9kYXRhLAotCQkgIGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3Byb2Nlc3NfcmF3X2V2ZW50KGV2ZW50X3QgKnJhd19ldmVudCBfX3VzZWQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCSAgdm9pZCAqZGF0YSwgaW50IGNwdSwgdTY0IHRpbWVzdGFtcCwgc3RydWN0IHRocmVhZCAqdGhyZWFkKQogewotCXN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcgPSBtb3JlX2RhdGE7CiAJc3RydWN0IGV2ZW50ICpldmVudDsKIAlpbnQgdHlwZTsKIAotCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShyYXctPmRhdGEpOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOwogCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKIAogCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfc3dpdGNoIikpCi0JCXByb2Nlc3Nfc2NoZWRfc3dpdGNoX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlwcm9jZXNzX3NjaGVkX3N3aXRjaF9ldmVudChkYXRhLCBzZXNzaW9uLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiAJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9zdGF0X3J1bnRpbWUiKSkKLQkJcHJvY2Vzc19zY2hlZF9ydW50aW1lX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlwcm9jZXNzX3NjaGVkX3J1bnRpbWVfZXZlbnQoZGF0YSwgc2Vzc2lvbiwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfd2FrZXVwIikpCi0JCXByb2Nlc3Nfc2NoZWRfd2FrZXVwX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlwcm9jZXNzX3NjaGVkX3dha2V1cF9ldmVudChkYXRhLCBzZXNzaW9uLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiAJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF93YWtldXBfbmV3IikpCi0JCXByb2Nlc3Nfc2NoZWRfd2FrZXVwX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlwcm9jZXNzX3NjaGVkX3dha2V1cF9ldmVudChkYXRhLCBzZXNzaW9uLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiAJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9wcm9jZXNzX2ZvcmsiKSkKLQkJcHJvY2Vzc19zY2hlZF9mb3JrX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCQlwcm9jZXNzX3NjaGVkX2ZvcmtfZXZlbnQoZGF0YSwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfcHJvY2Vzc19leGl0IikpCiAJCXByb2Nlc3Nfc2NoZWRfZXhpdF9ldmVudChldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiAJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9taWdyYXRlX3Rhc2siKSkKLQkJcHJvY2Vzc19zY2hlZF9taWdyYXRlX3Rhc2tfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJCXByb2Nlc3Nfc2NoZWRfbWlncmF0ZV90YXNrX2V2ZW50KGRhdGEsIHNlc3Npb24sIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkOwotCXU2NCBpcCA9IGV2ZW50LT5pcC5pcDsKLQl1NjQgdGltZXN0YW1wID0gLTE7Ci0JdTMyIGNwdSA9IC0xOwotCXU2NCBwZXJpb2QgPSAxOwotCXZvaWQgKm1vcmVfZGF0YSA9IGV2ZW50LT5pcC5fX21vcmVfZGF0YTsKIAotCWlmICghKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkKKwlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpCiAJCXJldHVybiAwOwogCi0JdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkKTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS50aW1lID0gLTE7CisJZGF0YS5jcHUgPSAtMTsKKwlkYXRhLnBlcmlvZCA9IC0xOwogCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgewotCQl0aW1lc3RhbXAgPSAqKHU2NCAqKW1vcmVfZGF0YTsKLQkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkgewotCQljcHUgPSAqKHUzMiAqKW1vcmVfZGF0YTsKLQkJbW9yZV9kYXRhICs9IHNpemVvZih1MzIpOwotCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHUzMik7IC8qIHJlc2VydmVkICovCi0JfQotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKSB7Ci0JCXBlcmlvZCA9ICoodTY0ICopbW9yZV9kYXRhOwotCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7Ci0JfQorCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKIAlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKIAkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlldmVudC0+aXAucGlkLCBldmVudC0+aXAudGlkLAotCQkodm9pZCAqKShsb25nKWlwLAotCQkobG9uZyBsb25nKXBlcmlvZCk7CisJCWRhdGEucGlkLCBkYXRhLnRpZCwKKwkJKHZvaWQgKikobG9uZylkYXRhLmlwLAorCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKIAorCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBkYXRhLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCSBldmVudC0+aGVhZGVyLnR5cGUpOwpAQCAtMTY0MCwxNSArMTYzNiwxNiBAQAogCiAJZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CiAKLQlpZiAocHJvZmlsZV9jcHUgIT0gLTEgJiYgcHJvZmlsZV9jcHUgIT0gKGludCkgY3B1KQorCWlmIChwcm9maWxlX2NwdSAhPSAtMSAmJiBwcm9maWxlX2NwdSAhPSAoaW50KWRhdGEuY3B1KQogCQlyZXR1cm4gMDsKIAotCXByb2Nlc3NfcmF3X2V2ZW50KGV2ZW50LCBtb3JlX2RhdGEsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCXByb2Nlc3NfcmF3X2V2ZW50KGV2ZW50LCBzZXNzaW9uLCBkYXRhLnJhd19kYXRhLCBkYXRhLmNwdSwgZGF0YS50aW1lLCB0aHJlYWQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50IF9fdXNlZCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQogewogCW5yX2xvc3RfY2h1bmtzKys7CiAJbnJfbG9zdF9ldmVudHMgKz0gZXZlbnQtPmxvc3QubG9zdDsKQEAgLTE2NTYsMTEgKzE2NTMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHU2NCB0eXBlKQorc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKIHsKLQlzYW1wbGVfdHlwZSA9IHR5cGU7Ci0KLQlpZiAoIShzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKKwlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCiAJCQkid2l0aG91dCAtUj8iKTsKQEAgLTE2NzAsNyArMTY2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7CiAJLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCiAJLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiAJLnByb2Nlc3NfbG9zdF9ldmVudAk9IHByb2Nlc3NfbG9zdF9ldmVudCwKQEAgLTE2NzksMTEgKzE2NzQsMTQgQEAKIAogc3RhdGljIGludCByZWFkX2V2ZW50cyh2b2lkKQogewotCXJlZ2lzdGVyX2lkbGVfdGhyZWFkKCk7Ci0JcmVnaXN0ZXJfcGVyZl9maWxlX2hhbmRsZXIoJmZpbGVfaGFuZGxlcik7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIDApOworCWlmIChzZXNzaW9uID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIDAsIDAsCi0JCQkJICAgICAgICZldmVudF9fY3dkbGVuLCAmZXZlbnRfX2N3ZCk7CisJZXJyID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZXZlbnRfb3BzKTsKKwlwZXJmX3Nlc3Npb25fX2RlbGV0ZShzZXNzaW9uKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9iYWRfZXZlbnRzKHZvaWQpCkBAIC0xNzI0LDkgKzE3MjIsOSBAQAogCXJlYWRfZXZlbnRzKCk7CiAJc29ydF9sYXQoKTsKIAotCXByaW50ZigiXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50ZigiICBUYXNrICAgICAgICAgICAgICAgICAgfCAgIFJ1bnRpbWUgbXMgIHwgU3dpdGNoZXMgfCBBdmVyYWdlIGRlbGF5IG1zIHwgTWF4aW11bSBkZWxheSBtcyB8XG4iKTsKLQlwcmludGYoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRmKCJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50ZigiICBUYXNrICAgICAgICAgICAgICAgICAgfCAgIFJ1bnRpbWUgbXMgIHwgU3dpdGNoZXMgfCBBdmVyYWdlIGRlbGF5IG1zIHwgTWF4aW11bSBkZWxheSBtcyB8IE1heGltdW0gZGVsYXkgYXQgICAgIHxcbiIpOworCXByaW50ZigiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKIAluZXh0ID0gcmJfZmlyc3QoJnNvcnRlZF9hdG9tX3Jvb3QpOwogCkBAIC0xOTAyLDEzICsxOTAwLDE4IEBACiAKIGludCBjbWRfc2NoZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCXN5bWJvbF9faW5pdCgwKTsKLQogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHNjaGVkX29wdGlvbnMsIHNjaGVkX3VzYWdlLAogCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAlpZiAoIWFyZ2MpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzY2hlZF91c2FnZSwgc2NoZWRfb3B0aW9ucyk7CiAKKwkvKgorCSAqIEFsaWFzZWQgdG8gJ3BlcmYgdHJhY2UnIGZvciBub3c6CisJICovCisJaWYgKCFzdHJjbXAoYXJndlswXSwgInRyYWNlIikpCisJCXJldHVybiBjbWRfdHJhY2UoYXJnYywgYXJndiwgcHJlZml4KTsKKworCXN5bWJvbF9faW5pdCgpOwogCWlmICghc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKIAkJcmV0dXJuIF9fY21kX3JlY29yZChhcmdjLCBhcmd2KTsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbMF0sICJsYXQiLCAzKSkgewpAQCAtMTkzMiwxMSArMTkzNSw2IEBACiAJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlcGxheV91c2FnZSwgcmVwbGF5X29wdGlvbnMpOwogCQl9CiAJCV9fY21kX3JlcGxheSgpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidHJhY2UiKSkgewotCQkvKgotCQkgKiBBbGlhc2VkIHRvICdwZXJmIHRyYWNlJyBmb3Igbm93OgotCQkgKi8KLQkJcmV0dXJuIGNtZF90cmFjZShhcmdjLCBhcmd2LCBwcmVmaXgpOwogCX0gZWxzZSB7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzY2hlZF91c2FnZSwgc2NoZWRfb3B0aW9ucyk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IGNiNThiNjYuLmE1ODlhNDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTMwLDE1ICszMCwxMiBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgotI2luY2x1ZGUgInV0aWwvZGF0YV9tYXAuaCIKKyNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKICNpbmNsdWRlICJ1dGlsL3N2Z2hlbHBlci5oIgogCiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIHN0YXRpYyBjaGFyCQljb25zdCAqb3V0cHV0X25hbWUgPSAib3V0cHV0LnN2ZyI7CiAKLQotc3RhdGljIHU2NAkJc2FtcGxlX3R5cGU7Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQJbnVtY3B1czsKIHN0YXRpYyB1NjQJCW1pbl9mcmVxOwkvKiBMb3dlc3QgQ1BVIGZyZXF1ZW5jeSBzZWVuICovCiBzdGF0aWMgdTY0CQltYXhfZnJlcTsJLyogSGlnaGVzdCBDUFUgZnJlcXVlbmN5IHNlZW4gKi8KQEAgLTI4MSwzMyArMjc4LDMwIEBACiBzdGF0aWMgdTY0IGNwdXNfcHN0YXRlX3N0YXJ0X3RpbWVzW01BWF9DUFVTXTsKIHN0YXRpYyB1NjQgY3B1c19wc3RhdGVfc3RhdGVbTUFYX0NQVVNdOwogCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQpCitzdGF0aWMgaW50IHByb2Nlc3NfY29tbV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCiB7CiAJcGlkX3NldF9jb21tKGV2ZW50LT5jb21tLnBpZCwgZXZlbnQtPmNvbW0uY29tbSk7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50Ci1wcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCisKK3N0YXRpYyBpbnQgcHJvY2Vzc19mb3JrX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKIHsKIAlwaWRfZm9yayhldmVudC0+Zm9yay5waWQsIGV2ZW50LT5mb3JrLnBwaWQsIGV2ZW50LT5mb3JrLnRpbWUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCitzdGF0aWMgaW50IHByb2Nlc3NfZXhpdF9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCiB7CiAJcGlkX2V4aXQoZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay50aW1lKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RydWN0IHRyYWNlX2VudHJ5IHsKLQl1MzIJCQlzaXplOwogCXVuc2lnbmVkIHNob3J0CQl0eXBlOwogCXVuc2lnbmVkIGNoYXIJCWZsYWdzOwogCXVuc2lnbmVkIGNoYXIJCXByZWVtcHRfY291bnQ7CiAJaW50CQkJcGlkOwotCWludAkJCXRnaWQ7CisJaW50CQkJbG9ja19kZXB0aDsKIH07CiAKIHN0cnVjdCBwb3dlcl9lbnRyeSB7CkBAIC00ODEsNDYgKzQ3NSwyNCBAQAogfQogCiAKLXN0YXRpYyBpbnQKLXByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQorc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlpbnQgY3Vyc29yID0gMDsKLQl1NjQgYWRkciA9IDA7Ci0JdTY0IHN0YW1wID0gMDsKLQl1MzIgY3B1ID0gMDsKLQl1MzIgcGlkID0gMDsKKwlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKnRlOwogCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSVApCi0JCWN1cnNvcisrOworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKIAotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkgewotCQlwaWQgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcl0+PjMyOwotCQljdXJzb3IrKzsKKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOworCisJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgeworCQlpZiAoIWZpcnN0X3RpbWUgfHwgZmlyc3RfdGltZSA+IGRhdGEudGltZSkKKwkJCWZpcnN0X3RpbWUgPSBkYXRhLnRpbWU7CisJCWlmIChsYXN0X3RpbWUgPCBkYXRhLnRpbWUpCisJCQlsYXN0X3RpbWUgPSBkYXRhLnRpbWU7CiAJfQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpIHsKLQkJc3RhbXAgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcisrXTsKIAotCQlpZiAoIWZpcnN0X3RpbWUgfHwgZmlyc3RfdGltZSA+IHN0YW1wKQotCQkJZmlyc3RfdGltZSA9IHN0YW1wOwotCQlpZiAobGFzdF90aW1lIDwgc3RhbXApCi0JCQlsYXN0X3RpbWUgPSBzdGFtcDsKLQotCX0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKQotCQlhZGRyID0gZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3IrK107Ci0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSUQpCi0JCWN1cnNvcisrOwotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKLQkJY3Vyc29yKys7Ci0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKQotCQljcHUgPSBldmVudC0+c2FtcGxlLmFycmF5W2N1cnNvcisrXSAmIDB4RkZGRkZGRkY7Ci0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKQotCQljdXJzb3IrKzsKLQotCXRlID0gKHZvaWQgKikmZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3JdOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXICYmIHRlLT5zaXplID4gMCkgeworCXRlID0gKHZvaWQgKilkYXRhLnJhd19kYXRhOworCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVyAmJiBkYXRhLnJhd19zaXplID4gMCkgewogCQljaGFyICpldmVudF9zdHI7CiAJCXN0cnVjdCBwb3dlcl9lbnRyeSAqcGU7CiAKQEAgLTUzMiwxOSArNTA0LDE5IEBACiAJCQlyZXR1cm4gMDsKIAogCQlpZiAoc3RyY21wKGV2ZW50X3N0ciwgInBvd2VyOnBvd2VyX3N0YXJ0IikgPT0gMCkKLQkJCWNfc3RhdGVfc3RhcnQoY3B1LCBzdGFtcCwgcGUtPnZhbHVlKTsKKwkJCWNfc3RhdGVfc3RhcnQoZGF0YS5jcHUsIGRhdGEudGltZSwgcGUtPnZhbHVlKTsKIAogCQlpZiAoc3RyY21wKGV2ZW50X3N0ciwgInBvd2VyOnBvd2VyX2VuZCIpID09IDApCi0JCQljX3N0YXRlX2VuZChjcHUsIHN0YW1wKTsKKwkJCWNfc3RhdGVfZW5kKGRhdGEuY3B1LCBkYXRhLnRpbWUpOwogCiAJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAicG93ZXI6cG93ZXJfZnJlcXVlbmN5IikgPT0gMCkKLQkJCXBfc3RhdGVfY2hhbmdlKGNwdSwgc3RhbXAsIHBlLT52YWx1ZSk7CisJCQlwX3N0YXRlX2NoYW5nZShkYXRhLmNwdSwgZGF0YS50aW1lLCBwZS0+dmFsdWUpOwogCiAJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAic2NoZWQ6c2NoZWRfd2FrZXVwIikgPT0gMCkKLQkJCXNjaGVkX3dha2V1cChjcHUsIHN0YW1wLCBwaWQsIHRlKTsKKwkJCXNjaGVkX3dha2V1cChkYXRhLmNwdSwgZGF0YS50aW1lLCBkYXRhLnBpZCwgdGUpOwogCiAJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAic2NoZWQ6c2NoZWRfc3dpdGNoIikgPT0gMCkKLQkJCXNjaGVkX3N3aXRjaChjcHUsIHN0YW1wLCB0ZSk7CisJCQlzY2hlZF9zd2l0Y2goZGF0YS5jcHUsIGRhdGEudGltZSwgdGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU5NywxNiArNTY5LDE2IEBACiAJfQogfQogCi1zdGF0aWMgdTY0IHNhbXBsZV90aW1lKGV2ZW50X3QgKmV2ZW50KQorc3RhdGljIHU2NCBzYW1wbGVfdGltZShldmVudF90ICpldmVudCwgY29uc3Qgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlpbnQgY3Vyc29yOwogCiAJY3Vyc29yID0gMDsKLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JUCkKKwlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JUCkKIAkJY3Vyc29yKys7Ci0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElEKQorCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkKIAkJY3Vyc29yKys7Ci0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkKKwlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQogCQlyZXR1cm4gZXZlbnQtPnNhbXBsZS5hcnJheVtjdXJzb3JdOwogCXJldHVybiAwOwogfQpAQCAtNjE2LDggKzU4OCw3IEBACiAgKiBXZSBmaXJzdCBxdWV1ZSBhbGwgZXZlbnRzLCBzb3J0ZWQgYmFja3dhcmRzIGJ5IGluc2VydGlvbi4KICAqIFRoZSBvcmRlciB3aWxsIGdldCBmbGlwcGVkIGxhdGVyLgogICovCi1zdGF0aWMgaW50Ci1xdWV1ZV9zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCitzdGF0aWMgaW50IHF1ZXVlX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3Qgc2FtcGxlX3dyYXBwZXIgKmNvcHksICpwcmV2OwogCWludCBzaXplOwpAQCAtNjMxLDcgKzYwMiw3IEBACiAJbWVtc2V0KGNvcHksIDAsIHNpemUpOwogCiAJY29weS0+bmV4dCA9IE5VTEw7Ci0JY29weS0+dGltZXN0YW1wID0gc2FtcGxlX3RpbWUoZXZlbnQpOworCWNvcHktPnRpbWVzdGFtcCA9IHNhbXBsZV90aW1lKGV2ZW50LCBzZXNzaW9uKTsKIAogCW1lbWNweSgmY29weS0+ZGF0YSwgZXZlbnQsIGV2ZW50LT5zYW1wbGUuaGVhZGVyLnNpemUpOwogCkBAIC0xMDQzLDcgKzEwMTQsNyBAQAogCXN2Z19jbG9zZSgpOwogfQogCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3NhbXBsZXModm9pZCkKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc2FtcGxlcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCBzYW1wbGVfd3JhcHBlciAqY3Vyc29yOwogCWV2ZW50X3QgKmV2ZW50OwpAQCAtMTA1NCwxNSArMTAyNSwxMyBAQAogCXdoaWxlIChjdXJzb3IpIHsKIAkJZXZlbnQgPSAodm9pZCAqKSZjdXJzb3ItPmRhdGE7CiAJCWN1cnNvciA9IGN1cnNvci0+bmV4dDsKLQkJcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQpOworCQlwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgc2Vzc2lvbik7CiAJfQogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHU2NCB0eXBlKQorc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCXNhbXBsZV90eXBlID0gdHlwZTsKLQotCWlmICghKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgeworCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHRyYWNlIHNhbXBsZXMgZm91bmQgaW4gdGhlIGZpbGUuXG4iCiAJCQkJIkhhdmUgeW91IHVzZWQgJ3BlcmYgdGltZWNoYXJ0IHJlY29yZCcgdG8gcmVjb3JkIGl0P1xuIik7CiAJCXJldHVybiAtMTsKQEAgLTEwNzEsNyArMTA0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7CiAJLnByb2Nlc3NfY29tbV9ldmVudAk9IHByb2Nlc3NfY29tbV9ldmVudCwKIAkucHJvY2Vzc19mb3JrX2V2ZW50CT0gcHJvY2Vzc19mb3JrX2V2ZW50LAogCS5wcm9jZXNzX2V4aXRfZXZlbnQJPSBwcm9jZXNzX2V4aXRfZXZlbnQsCkBAIC0xMDgxLDE3ICsxMDUwLDE3IEBACiAKIHN0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCiB7Ci0Jc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKIAlpbnQgcmV0OwogCi0JcmVnaXN0ZXJfcGVyZl9maWxlX2hhbmRsZXIoJmZpbGVfaGFuZGxlcik7CisJaWYgKHNlc3Npb24gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZSgmaGVhZGVyLCBpbnB1dF9uYW1lLCAwLCAwLAotCQkJCSAgICAgICZldmVudF9fY3dkbGVuLCAmZXZlbnRfX2N3ZCk7CisJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZXZlbnRfb3BzKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQlnb3RvIG91dF9kZWxldGU7CiAKLQlwcm9jZXNzX3NhbXBsZXMoKTsKKwlwcm9jZXNzX3NhbXBsZXMoc2Vzc2lvbik7CiAKIAllbmRfc2FtcGxlX3Byb2Nlc3NpbmcoKTsKIApAQCAtMTEwMSw4ICsxMDcwLDkgQEAKIAogCXByX2luZm8oIldyaXR0ZW4gJTIuMWYgc2Vjb25kcyBvZiB0cmFjZSB0byAlcy5cbiIsCiAJCShsYXN0X3RpbWUgLSBmaXJzdF90aW1lKSAvIDEwMDAwMDAwMDAuMCwgb3V0cHV0X25hbWUpOwotCi0JcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK291dF9kZWxldGU6CisJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0aW1lY2hhcnRfdXNhZ2VbXSA9IHsKQEAgLTExNjcsMTEgKzExMzcsMTEgQEAKIAogaW50IGNtZF90aW1lY2hhcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCXN5bWJvbF9faW5pdCgwKTsKLQogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHRpbWVjaGFydF91c2FnZSwKIAkJCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCisJc3ltYm9sX19pbml0KCk7CisKIAlpZiAoYXJnYyAmJiAhc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpCiAJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CiAJZWxzZSBpZiAoYXJnYykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCBlMGEzNzRkLi5kZGM1ODRiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC0yMCw4ICsyMCw5IEBACiAKICNpbmNsdWRlICJwZXJmLmgiCiAKLSNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgogI2luY2x1ZGUgInV0aWwvY29sb3IuaCIKKyNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKKyNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgogI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCiAjaW5jbHVkZSAidXRpbC91dGlsLmgiCiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CkBAIC03OSw3ICs4MCw2IEBACiBzdGF0aWMgYm9vbAkJCWhpZGVfa2VybmVsX3N5bWJvbHMJCT0gIGZhbHNlOwogc3RhdGljIGJvb2wJCQloaWRlX3VzZXJfc3ltYm9scwkJPSAgZmFsc2U7CiBzdGF0aWMgc3RydWN0IHdpbnNpemUJCXdpbnNpemU7Ci1zdHJ1Y3Qgc3ltYm9sX2NvbmYJCXN5bWJvbF9jb25mOwogCiAvKgogICogU291cmNlCkBAIC05MjYsNyArOTI2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZXZlbnRfX3Byb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsIGludCBjb3VudGVyKQorc3RhdGljIHZvaWQgZXZlbnRfX3Byb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGludCBjb3VudGVyKQogewogCXU2NCBpcCA9IHNlbGYtPmlwLmlwOwogCXN0cnVjdCBzeW1fZW50cnkgKnN5bWU7CkBAIC05NDYsOCArOTQ3LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoc2VsZiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKLQkgICAgYWwuc3ltID09IE5VTEwpCisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShzZWxmLCBzZXNzaW9uLCAmYWwsIHN5bWJvbF9maWx0ZXIpIDwgMCB8fAorCSAgICBhbC5zeW0gPT0gTlVMTCB8fCBhbC5maWx0ZXJlZCkKIAkJcmV0dXJuOwogCiAJc3ltZSA9IHN5bWJvbF9fcHJpdihhbC5zeW0pOwpAQCAtOTY1LDE0ICs5NjYsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZXZlbnRfX3Byb2Nlc3MoZXZlbnRfdCAqZXZlbnQpCitzdGF0aWMgaW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CiAJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgotCQlldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50KTsKKwkJZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudCwgc2Vzc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKLQkJZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudCk7CisJCWV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnQsIHNlc3Npb24pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTk5OSw3ICsxMDAwLDggQEAKIAlyZXR1cm4gaGVhZDsKIH0KIAotc3RhdGljIHZvaWQgbW1hcF9yZWFkX2NvdW50ZXIoc3RydWN0IG1tYXBfZGF0YSAqbWQpCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCSAgICBzdHJ1Y3QgbW1hcF9kYXRhICptZCkKIHsKIAl1bnNpZ25lZCBpbnQgaGVhZCA9IG1tYXBfcmVhZF9oZWFkKG1kKTsKIAl1bnNpZ25lZCBpbnQgb2xkID0gbWQtPnByZXY7CkBAIC0xMDUyLDkgKzEwNTQsOSBAQAogCQl9CiAKIAkJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9TQU1QTEUpCi0JCQlldmVudF9fcHJvY2Vzc19zYW1wbGUoZXZlbnQsIG1kLT5jb3VudGVyKTsKKwkJCWV2ZW50X19wcm9jZXNzX3NhbXBsZShldmVudCwgc2VsZiwgbWQtPmNvdW50ZXIpOwogCQllbHNlCi0JCQlldmVudF9fcHJvY2VzcyhldmVudCk7CisJCQlldmVudF9fcHJvY2VzcyhldmVudCwgc2VsZik7CiAJCW9sZCArPSBzaXplOwogCX0KIApAQCAtMTA2NCwxMyArMTA2NiwxMyBAQAogc3RhdGljIHN0cnVjdCBwb2xsZmQgZXZlbnRfYXJyYXlbTUFYX05SX0NQVVMgKiBNQVhfQ09VTlRFUlNdOwogc3RhdGljIHN0cnVjdCBtbWFwX2RhdGEgbW1hcF9hcnJheVtNQVhfTlJfQ1BVU11bTUFYX0NPVU5URVJTXTsKIAotc3RhdGljIHZvaWQgbW1hcF9yZWFkKHZvaWQpCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCWludCBpLCBjb3VudGVyOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykgewogCQlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKLQkJCW1tYXBfcmVhZF9jb3VudGVyKCZtbWFwX2FycmF5W2ldW2NvdW50ZXJdKTsKKwkJCXBlcmZfc2Vzc2lvbl9fbW1hcF9yZWFkX2NvdW50ZXIoc2VsZiwgJm1tYXBfYXJyYXlbaV1bY291bnRlcl0pOwogCX0KIH0KIApAQCAtMTE1NSwxMSArMTE1NywxOCBAQAogCXB0aHJlYWRfdCB0aHJlYWQ7CiAJaW50IGksIGNvdW50ZXI7CiAJaW50IHJldDsKKwkvKgorCSAqIEZJWE1FOiBwZXJmX3Nlc3Npb25fX25ldyBzaG91bGQgYWxsb3cgcGFzc2luZyBhIE9fTU1BUCwgc28gdGhhdCBhbGwgdGhpcworCSAqIG1tYXAgcmVhZGluZywgZXRjIGlzIGVuY2Fwc3VsYXRlZCBpbiBpdC4gVXNlIE9fV1JPTkxZIGZvciBub3cuCisJICovCisJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KE5VTEwsIE9fV1JPTkxZLCBmYWxzZSk7CisJaWYgKHNlc3Npb24gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAodGFyZ2V0X3BpZCAhPSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF9waWQsIGV2ZW50X19wcm9jZXNzKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF9waWQsIGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKIAllbHNlCi0JCWV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX3Byb2Nlc3MpOworCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyBpKyspIHsKIAkJZ3JvdXBfZmQgPSAtMTsKQEAgLTExNzAsNyArMTE3OSw3IEBACiAJLyogV2FpdCBmb3IgYSBtaW5pbWFsIHNldCBvZiBldmVudHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzbmFwc2hvdCAqLwogCXBvbGwoZXZlbnRfYXJyYXksIG5yX3BvbGwsIDEwMCk7CiAKLQltbWFwX3JlYWQoKTsKKwlwZXJmX3Nlc3Npb25fX21tYXBfcmVhZChzZXNzaW9uKTsKIAogCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCBkaXNwbGF5X3RocmVhZCwgTlVMTCkpIHsKIAkJcHJpbnRmKCJDb3VsZCBub3QgY3JlYXRlIGRpc3BsYXkgdGhyZWFkLlxuIik7CkBAIC0xMTkwLDcgKzExOTksNyBAQAogCXdoaWxlICgxKSB7CiAJCWludCBoaXRzID0gc2FtcGxlczsKIAotCQltbWFwX3JlYWQoKTsKKwkJcGVyZl9zZXNzaW9uX19tbWFwX3JlYWQoc2Vzc2lvbik7CiAKIAkJaWYgKGhpdHMgPT0gc2FtcGxlcykKIAkJCXJldCA9IHBvbGwoZXZlbnRfYXJyYXksIG5yX3BvbGwsIDEwMCk7CkBAIC0xMjczLDcgKzEyODIsNyBAQAogCQkJCSAobnJfY291bnRlcnMgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAJaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQogCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKLQlpZiAoc3ltYm9sX19pbml0KCZzeW1ib2xfY29uZikgPCAwKQorCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChkZWxheV9zZWNzIDwgMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggYWJiOTE0YS4uZTIyODVlMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTcsMTEgKzcsMTQgQEAKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogI2luY2x1ZGUgInV0aWwvZXhlY19jbWQuaCIKICNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCisjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCiAKIHN0YXRpYyBjaGFyIGNvbnN0CQkqc2NyaXB0X25hbWU7CiBzdGF0aWMgY2hhciBjb25zdAkJKmdlbmVyYXRlX3NjcmlwdF9sYW5nOwogCi1zdGF0aWMgaW50IGRlZmF1bHRfc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCBfX2F0dHJpYnV0ZSgodW51c2VkKSkpCitzdGF0aWMgaW50IGRlZmF1bHRfc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKKwkJCQlpbnQgYXJnYyBfX3VudXNlZCwKKwkJCQljb25zdCBjaGFyICoqYXJndiBfX3VudXNlZCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxLDcgKzI0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkZWZhdWx0X2dlbmVyYXRlX3NjcmlwdChjb25zdCBjaGFyICpvdXRmaWxlIF9fYXR0cmlidXRlICgodW51c2VkKSkpCitzdGF0aWMgaW50IGRlZmF1bHRfZ2VuZXJhdGVfc2NyaXB0KGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC01Niw3NyArNTksNTMgQEAKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCiAKICNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCi0jaW5jbHVkZSAidXRpbC9kYXRhX21hcC5oIgogI2luY2x1ZGUgInV0aWwvZXhlY19jbWQuaCIKIAogc3RhdGljIGNoYXIgY29uc3QJCSppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKLXN0YXRpYyB1NjQJCQlzYW1wbGVfdHlwZTsKLQotc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0JdTY0IGlwID0gZXZlbnQtPmlwLmlwOwotCXU2NCB0aW1lc3RhbXAgPSAtMTsKLQl1MzIgY3B1ID0gLTE7Ci0JdTY0IHBlcmlvZCA9IDE7Ci0Jdm9pZCAqbW9yZV9kYXRhID0gZXZlbnQtPmlwLl9fbW9yZV9kYXRhOwotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCk7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgewotCQl0aW1lc3RhbXAgPSAqKHU2NCAqKW1vcmVfZGF0YTsKLQkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOwotCX0KKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS50aW1lID0gLTE7CisJZGF0YS5jcHUgPSAtMTsKKwlkYXRhLnBlcmlvZCA9IDE7CiAKLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpIHsKLQkJY3B1ID0gKih1MzIgKiltb3JlX2RhdGE7Ci0JCW1vcmVfZGF0YSArPSBzaXplb2YodTMyKTsKLQkJbW9yZV9kYXRhICs9IHNpemVvZih1MzIpOyAvKiByZXNlcnZlZCAqLwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkgewotCQlwZXJpb2QgPSAqKHU2NCAqKW1vcmVfZGF0YTsKLQkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOwotCX0KKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwogCiAJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCiAJCWV2ZW50LT5oZWFkZXIubWlzYywKLQkJZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLnRpZCwKLQkJKHZvaWQgKikobG9uZylpcCwKLQkJKGxvbmcgbG9uZylwZXJpb2QpOworCQlkYXRhLnBpZCwgZGF0YS50aWQsCisJCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKKwkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CiAKKwl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCSBldmVudC0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKLQkJc3RydWN0IHsKLQkJCXUzMiBzaXplOwotCQkJY2hhciBkYXRhWzBdOwotCQl9ICpyYXcgPSBtb3JlX2RhdGE7Ci0KKwlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKIAkJLyoKIAkJICogRklYTUU6IGJldHRlciByZXNvbHZlIGZyb20gcGlkIGZyb20gdGhlIHN0cnVjdCB0cmFjZV9lbnRyeQogCQkgKiBmaWVsZCwgYWx0aG91Z2ggaXQgc2hvdWxkIGJlIHRoZSBzYW1lIHRoYW4gdGhpcyBwZXJmCiAJCSAqIGV2ZW50IHBpZAogCQkgKi8KLQkJc2NyaXB0aW5nX29wcy0+cHJvY2Vzc19ldmVudChjcHUsIHJhdy0+ZGF0YSwgcmF3LT5zaXplLAotCQkJCQkgICAgIHRpbWVzdGFtcCwgdGhyZWFkLT5jb21tKTsKKwkJc2NyaXB0aW5nX29wcy0+cHJvY2Vzc19ldmVudChkYXRhLmNwdSwgZGF0YS5yYXdfZGF0YSwKKwkJCQkJICAgICBkYXRhLnJhd19zaXplLAorCQkJCQkgICAgIGRhdGEudGltZSwgdGhyZWFkLT5jb21tKTsKIAl9Ci0JZXZlbnRfX3N0YXRzLnRvdGFsICs9IHBlcmlvZDsKIAorCXNlc3Npb24tPmV2ZW50c19zdGF0cy50b3RhbCArPSBkYXRhLnBlcmlvZDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayh1NjQgdHlwZSkKK3N0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2soc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzYW1wbGVfdHlwZSA9IHR5cGU7Ci0KLQlpZiAoIShzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKKwlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCiAJCQkid2l0aG91dCAtUj8iKTsKQEAgLTEzNiwxOSArMTE1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7CiAJLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCiAJLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiAJLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCiB9OwogCi1zdGF0aWMgaW50IF9fY21kX3RyYWNlKHZvaWQpCitzdGF0aWMgaW50IF9fY21kX3RyYWNlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0JcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKLQlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKLQotCXJldHVybiBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZSgmaGVhZGVyLCBpbnB1dF9uYW1lLAotCQkJCSAgICAgICAwLCAwLCAmZXZlbnRfX2N3ZGxlbiwgJmV2ZW50X19jd2QpOworCXJldHVybiBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogfQogCiBzdHJ1Y3Qgc2NyaXB0X3NwZWMgewpAQCAtMjk5LDYgKzI3NCwyNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBmb3JfZWFjaF9sYW5nKHNjcmlwdHNfZGlyLCBsYW5nX2RpcmVudCwgbGFuZ19uZXh0KQkJXAorCXdoaWxlICghcmVhZGRpcl9yKHNjcmlwdHNfZGlyLCAmbGFuZ19kaXJlbnQsICZsYW5nX25leHQpICYmCVwKKwkgICAgICAgbGFuZ19uZXh0KQkJCQkJCVwKKwkJaWYgKGxhbmdfZGlyZW50LmRfdHlwZSA9PSBEVF9ESVIgJiYJCQlcCisJCSAgICAoc3RyY21wKGxhbmdfZGlyZW50LmRfbmFtZSwgIi4iKSkgJiYJCVwKKwkJICAgIChzdHJjbXAobGFuZ19kaXJlbnQuZF9uYW1lLCAiLi4iKSkpCisKKyNkZWZpbmUgZm9yX2VhY2hfc2NyaXB0KGxhbmdfZGlyLCBzY3JpcHRfZGlyZW50LCBzY3JpcHRfbmV4dCkJCVwKKwl3aGlsZSAoIXJlYWRkaXJfcihsYW5nX2RpciwgJnNjcmlwdF9kaXJlbnQsICZzY3JpcHRfbmV4dCkgJiYJXAorCSAgICAgICBzY3JpcHRfbmV4dCkJCQkJCQlcCisJCWlmIChzY3JpcHRfZGlyZW50LmRfdHlwZSAhPSBEVF9ESVIpCisKKworI2RlZmluZSBSRUNPUkRfU1VGRklYCQkJIi1yZWNvcmQiCisjZGVmaW5lIFJFUE9SVF9TVUZGSVgJCQkiLXJlcG9ydCIKKworc3RydWN0IHNjcmlwdF9kZXNjIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJY2hhcgkJCSpuYW1lOworCWNoYXIJCQkqaGFsZl9saW5lcjsKKwljaGFyCQkJKmFyZ3M7Cit9OworCitMSVNUX0hFQUQoc2NyaXB0X2Rlc2NzKTsKKworc3RhdGljIHN0cnVjdCBzY3JpcHRfZGVzYyAqc2NyaXB0X2Rlc2NfX25ldyhjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzY3JpcHRfZGVzYyAqcyA9IHphbGxvYyhzaXplb2YoKnMpKTsKKworCWlmIChzICE9IE5VTEwpCisJCXMtPm5hbWUgPSBzdHJkdXAobmFtZSk7CisKKwlyZXR1cm4gczsKK30KKworc3RhdGljIHZvaWQgc2NyaXB0X2Rlc2NfX2RlbGV0ZShzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnMpCit7CisJZnJlZShzLT5uYW1lKTsKKwlmcmVlKHMpOworfQorCitzdGF0aWMgdm9pZCBzY3JpcHRfZGVzY19fYWRkKHN0cnVjdCBzY3JpcHRfZGVzYyAqcykKK3sKKwlsaXN0X2FkZF90YWlsKCZzLT5ub2RlLCAmc2NyaXB0X2Rlc2NzKTsKK30KKworc3RhdGljIHN0cnVjdCBzY3JpcHRfZGVzYyAqc2NyaXB0X2Rlc2NfX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZzY3JpcHRfZGVzY3MsIG5vZGUpCisJCWlmIChzdHJjYXNlY21wKHMtPm5hbWUsIG5hbWUpID09IDApCisJCQlyZXR1cm4gczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzY3JpcHRfZGVzYyAqc2NyaXB0X2Rlc2NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnMgPSBzY3JpcHRfZGVzY19fZmluZChuYW1lKTsKKworCWlmIChzKQorCQlyZXR1cm4gczsKKworCXMgPSBzY3JpcHRfZGVzY19fbmV3KG5hbWUpOworCWlmICghcykKKwkJZ290byBvdXRfZGVsZXRlX2Rlc2M7CisKKwlzY3JpcHRfZGVzY19fYWRkKHMpOworCisJcmV0dXJuIHM7CisKK291dF9kZWxldGVfZGVzYzoKKwlzY3JpcHRfZGVzY19fZGVsZXRlKHMpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICplbmRzX3dpdGgoY2hhciAqc3RyLCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisJc2l6ZV90IHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTsKKwljaGFyICpwID0gc3RyOworCisJaWYgKHN0cmxlbihzdHIpID4gc3VmZml4X2xlbikgeworCQlwID0gc3RyICsgc3RybGVuKHN0cikgLSBzdWZmaXhfbGVuOworCQlpZiAoIXN0cm5jbXAocCwgc3VmZml4LCBzdWZmaXhfbGVuKSkKKwkJCXJldHVybiBwOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqbHRyaW0oY2hhciAqc3RyKQoreworCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKKworCXdoaWxlIChsZW4gJiYgaXNzcGFjZSgqc3RyKSkgeworCQlsZW4tLTsKKwkJc3RyKys7CisJfQorCisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIGludCByZWFkX3NjcmlwdF9pbmZvKHN0cnVjdCBzY3JpcHRfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY2hhciBsaW5lW0JVRlNJWl0sICpwOworCUZJTEUgKmZwOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHsKKwkJcCA9IGx0cmltKGxpbmUpOworCQlpZiAoc3RybGVuKHApID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKCpwICE9ICcjJykKKwkJCWNvbnRpbnVlOworCQlwKys7CisJCWlmIChzdHJsZW4ocCkgJiYgKnAgPT0gJyEnKQorCQkJY29udGludWU7CisKKwkJcCA9IGx0cmltKHApOworCQlpZiAoc3RybGVuKHApICYmIHBbc3RybGVuKHApIC0gMV0gPT0gJ1xuJykKKwkJCXBbc3RybGVuKHApIC0gMV0gPSAnXDAnOworCisJCWlmICghc3RybmNtcChwLCAiZGVzY3JpcHRpb246Iiwgc3RybGVuKCJkZXNjcmlwdGlvbjoiKSkpIHsKKwkJCXAgKz0gc3RybGVuKCJkZXNjcmlwdGlvbjoiKTsKKwkJCWRlc2MtPmhhbGZfbGluZXIgPSBzdHJkdXAobHRyaW0ocCkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0cm5jbXAocCwgImFyZ3M6Iiwgc3RybGVuKCJhcmdzOiIpKSkgeworCQkJcCArPSBzdHJsZW4oImFyZ3M6Iik7CisJCQlkZXNjLT5hcmdzID0gc3RyZHVwKGx0cmltKHApKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJZmNsb3NlKGZwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpc3RfYXZhaWxhYmxlX3NjcmlwdHMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKKwkJCQkgIGNvbnN0IGNoYXIgKnMgX191c2VkLCBpbnQgdW5zZXQgX191c2VkKQoreworCXN0cnVjdCBkaXJlbnQgKnNjcmlwdF9uZXh0LCAqbGFuZ19uZXh0LCBzY3JpcHRfZGlyZW50LCBsYW5nX2RpcmVudDsKKwljaGFyIHNjcmlwdHNfcGF0aFtNQVhQQVRITEVOXTsKKwlESVIgKnNjcmlwdHNfZGlyLCAqbGFuZ19kaXI7CisJY2hhciBzY3JpcHRfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIGxhbmdfcGF0aFtNQVhQQVRITEVOXTsKKwlzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKmRlc2M7CisJY2hhciBmaXJzdF9oYWxmW0JVRlNJWl07CisJY2hhciAqc2NyaXB0X3Jvb3Q7CisJY2hhciAqc3RyOworCisJc25wcmludGYoc2NyaXB0c19wYXRoLCBNQVhQQVRITEVOLCAiJXMvc2NyaXB0cyIsIHBlcmZfZXhlY19wYXRoKCkpOworCisJc2NyaXB0c19kaXIgPSBvcGVuZGlyKHNjcmlwdHNfcGF0aCk7CisJaWYgKCFzY3JpcHRzX2RpcikKKwkJcmV0dXJuIC0xOworCisJZm9yX2VhY2hfbGFuZyhzY3JpcHRzX2RpciwgbGFuZ19kaXJlbnQsIGxhbmdfbmV4dCkgeworCQlzbnByaW50ZihsYW5nX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcy9iaW4iLCBzY3JpcHRzX3BhdGgsCisJCQkgbGFuZ19kaXJlbnQuZF9uYW1lKTsKKwkJbGFuZ19kaXIgPSBvcGVuZGlyKGxhbmdfcGF0aCk7CisJCWlmICghbGFuZ19kaXIpCisJCQljb250aW51ZTsKKworCQlmb3JfZWFjaF9zY3JpcHQobGFuZ19kaXIsIHNjcmlwdF9kaXJlbnQsIHNjcmlwdF9uZXh0KSB7CisJCQlzY3JpcHRfcm9vdCA9IHN0cmR1cChzY3JpcHRfZGlyZW50LmRfbmFtZSk7CisJCQlzdHIgPSBlbmRzX3dpdGgoc2NyaXB0X3Jvb3QsIFJFUE9SVF9TVUZGSVgpOworCQkJaWYgKHN0cikgeworCQkJCSpzdHIgPSAnXDAnOworCQkJCWRlc2MgPSBzY3JpcHRfZGVzY19fZmluZG5ldyhzY3JpcHRfcm9vdCk7CisJCQkJc25wcmludGYoc2NyaXB0X3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsCisJCQkJCSBsYW5nX3BhdGgsIHNjcmlwdF9kaXJlbnQuZF9uYW1lKTsKKwkJCQlyZWFkX3NjcmlwdF9pbmZvKGRlc2MsIHNjcmlwdF9wYXRoKTsKKwkJCX0KKwkJCWZyZWUoc2NyaXB0X3Jvb3QpOworCQl9CisJfQorCisJZnByaW50ZihzdGRvdXQsICJMaXN0IG9mIGF2YWlsYWJsZSB0cmFjZSBzY3JpcHRzOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmc2NyaXB0X2Rlc2NzLCBub2RlKSB7CisJCXNwcmludGYoZmlyc3RfaGFsZiwgIiVzICVzIiwgZGVzYy0+bmFtZSwKKwkJCWRlc2MtPmFyZ3MgPyBkZXNjLT5hcmdzIDogIiIpOworCQlmcHJpbnRmKHN0ZG91dCwgIiAgJS0zNnMgJXNcbiIsIGZpcnN0X2hhbGYsCisJCQlkZXNjLT5oYWxmX2xpbmVyID8gZGVzYy0+aGFsZl9saW5lciA6ICIiKTsKKwl9CisKKwlleGl0KDApOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3NjcmlwdF9wYXRoKGNvbnN0IGNoYXIgKnNjcmlwdF9yb290LCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisJc3RydWN0IGRpcmVudCAqc2NyaXB0X25leHQsICpsYW5nX25leHQsIHNjcmlwdF9kaXJlbnQsIGxhbmdfZGlyZW50OworCWNoYXIgc2NyaXB0c19wYXRoW01BWFBBVEhMRU5dOworCWNoYXIgc2NyaXB0X3BhdGhbTUFYUEFUSExFTl07CisJRElSICpzY3JpcHRzX2RpciwgKmxhbmdfZGlyOworCWNoYXIgbGFuZ19wYXRoW01BWFBBVEhMRU5dOworCWNoYXIgKnN0ciwgKl9fc2NyaXB0X3Jvb3Q7CisJY2hhciAqcGF0aCA9IE5VTEw7CisKKwlzbnByaW50ZihzY3JpcHRzX3BhdGgsIE1BWFBBVEhMRU4sICIlcy9zY3JpcHRzIiwgcGVyZl9leGVjX3BhdGgoKSk7CisKKwlzY3JpcHRzX2RpciA9IG9wZW5kaXIoc2NyaXB0c19wYXRoKTsKKwlpZiAoIXNjcmlwdHNfZGlyKQorCQlyZXR1cm4gTlVMTDsKKworCWZvcl9lYWNoX2xhbmcoc2NyaXB0c19kaXIsIGxhbmdfZGlyZW50LCBsYW5nX25leHQpIHsKKwkJc25wcmludGYobGFuZ19wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMvYmluIiwgc2NyaXB0c19wYXRoLAorCQkJIGxhbmdfZGlyZW50LmRfbmFtZSk7CisJCWxhbmdfZGlyID0gb3BlbmRpcihsYW5nX3BhdGgpOworCQlpZiAoIWxhbmdfZGlyKQorCQkJY29udGludWU7CisKKwkJZm9yX2VhY2hfc2NyaXB0KGxhbmdfZGlyLCBzY3JpcHRfZGlyZW50LCBzY3JpcHRfbmV4dCkgeworCQkJX19zY3JpcHRfcm9vdCA9IHN0cmR1cChzY3JpcHRfZGlyZW50LmRfbmFtZSk7CisJCQlzdHIgPSBlbmRzX3dpdGgoX19zY3JpcHRfcm9vdCwgc3VmZml4KTsKKwkJCWlmIChzdHIpIHsKKwkJCQkqc3RyID0gJ1wwJzsKKwkJCQlpZiAoc3RyY21wKF9fc2NyaXB0X3Jvb3QsIHNjcmlwdF9yb290KSkKKwkJCQkJY29udGludWU7CisJCQkJc25wcmludGYoc2NyaXB0X3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsCisJCQkJCSBsYW5nX3BhdGgsIHNjcmlwdF9kaXJlbnQuZF9uYW1lKTsKKwkJCQlwYXRoID0gc3RyZHVwKHNjcmlwdF9wYXRoKTsKKwkJCQlmcmVlKF9fc2NyaXB0X3Jvb3QpOworCQkJCWJyZWFrOworCQkJfQorCQkJZnJlZShfX3NjcmlwdF9yb290KTsKKwkJfQorCX0KKworCXJldHVybiBwYXRoOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFubm90YXRlX3VzYWdlW10gPSB7CiAJInBlcmYgdHJhY2UgWzxvcHRpb25zPl0gPGNvbW1hbmQ+IiwKIAlOVUxMCkBAIC0zMDksOCArNTIyLDEwIEBACiAJCSAgICAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKIAlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCiAJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCi0JT1BUX0JPT0xFQU4oJ2wnLCAibGF0ZW5jeSIsICZsYXRlbmN5X2Zvcm1hdCwKKwlPUFRfQk9PTEVBTignTCcsICJMYXRlbmN5IiwgJmxhdGVuY3lfZm9ybWF0LAogCQkgICAgInNob3cgbGF0ZW5jeSBhdHRyaWJ1dGVzIChpcnFzL3ByZWVtcHRpb24gZGlzYWJsZWQsIGV0YykiKSwKKwlPUFRfQ0FMTEJBQ0tfTk9PUFQoJ2wnLCAibGlzdCIsIE5VTEwsIE5VTEwsICJsaXN0IGF2YWlsYWJsZSBzY3JpcHRzIiwKKwkJCSAgIGxpc3RfYXZhaWxhYmxlX3NjcmlwdHMpLAogCU9QVF9DQUxMQkFDSygncycsICJzY3JpcHQiLCBOVUxMLCAibmFtZSIsCiAJCSAgICAgInNjcmlwdCBmaWxlIG5hbWUgKGxhbmc6c2NyaXB0IG5hbWUsIHNjcmlwdCBuYW1lLCBvciAqKSIsCiAJCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCkBAIC0zMjIsMjQgKzUzNyw2MSBAQAogCiBpbnQgY21kX3RyYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKLQlpbnQgZXJyOworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CisJY29uc3QgY2hhciAqc3VmZml4ID0gTlVMTDsKKwljb25zdCBjaGFyICoqX19hcmd2OworCWNoYXIgKnNjcmlwdF9wYXRoOworCWludCBpLCBlcnI7CiAKLQlzeW1ib2xfX2luaXQoMCk7CisJaWYgKGFyZ2MgPj0gMiAmJiBzdHJuY21wKGFyZ3ZbMV0sICJyZWMiLCBzdHJsZW4oInJlYyIpKSA9PSAwKSB7CisJCWlmIChhcmdjIDwgMykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlBsZWFzZSBzcGVjaWZ5IGEgcmVjb3JkIHNjcmlwdFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc3VmZml4ID0gUkVDT1JEX1NVRkZJWDsKKwl9CisKKwlpZiAoYXJnYyA+PSAyICYmIHN0cm5jbXAoYXJndlsxXSwgInJlcCIsIHN0cmxlbigicmVwIikpID09IDApIHsKKwkJaWYgKGFyZ2MgPCAzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUGxlYXNlIHNwZWNpZnkgYSByZXBvcnQgc2NyaXB0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzdWZmaXggPSBSRVBPUlRfU1VGRklYOworCX0KKworCWlmIChzdWZmaXgpIHsKKwkJc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlsyXSwgc3VmZml4KTsKKwkJaWYgKCFzY3JpcHRfcGF0aCkgeworCQkJZnByaW50ZihzdGRlcnIsICJzY3JpcHQgbm90IGZvdW5kXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCV9fYXJndiA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCQlfX2FyZ3ZbMF0gPSAiL2Jpbi9zaCI7CisJCV9fYXJndlsxXSA9IHNjcmlwdF9wYXRoOworCQlmb3IgKGkgPSAzOyBpIDwgYXJnYzsgaSsrKQorCQkJX19hcmd2W2kgLSAxXSA9IGFyZ3ZbaV07CisJCV9fYXJndlthcmdjIC0gMV0gPSBOVUxMOworCisJCWV4ZWN2cCgiL2Jpbi9zaCIsIChjaGFyICoqKV9fYXJndik7CisJCWV4aXQoLTEpOworCX0KIAogCXNldHVwX3NjcmlwdGluZygpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYW5ub3RhdGVfdXNhZ2UsIDApOwotCWlmIChhcmdjKSB7Ci0JCS8qCi0JCSAqIFNwZWNpYWwgY2FzZTogaWYgdGhlcmUncyBhbiBhcmd1bWVudCBsZWZ0IHRoZW4gYXNzdW1lIHRoYQotCQkgKiBpdCdzIGEgc3ltYm9sIGZpbHRlcjoKLQkJICovCi0JCWlmIChhcmdjID4gMSkKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhhbm5vdGF0ZV91c2FnZSwgb3B0aW9ucyk7Ci0JfQorCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGFubm90YXRlX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAorCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCisJCXJldHVybiAtMTsKIAlzZXR1cF9wYWdlcigpOwogCisJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoc2Vzc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWlmIChnZW5lcmF0ZV9zY3JpcHRfbGFuZykgewogCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CiAKQEAgLTM2NiwyMyArNjE4LDIwIEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQloZWFkZXIgPSBwZXJmX2hlYWRlcl9fbmV3KCk7Ci0JCWlmIChoZWFkZXIgPT0gTlVMTCkKLQkJCXJldHVybiAtMTsKLQotCQlwZXJmX2hlYWRlcl9fcmVhZChoZWFkZXIsIGlucHV0KTsKKwkJcGVyZl9oZWFkZXJfX3JlYWQoJnNlc3Npb24tPmhlYWRlciwgaW5wdXQpOwogCQllcnIgPSBzY3JpcHRpbmdfb3BzLT5nZW5lcmF0ZV9zY3JpcHQoInBlcmYtdHJhY2UiKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHNjcmlwdF9uYW1lKSB7Ci0JCWVyciA9IHNjcmlwdGluZ19vcHMtPnN0YXJ0X3NjcmlwdChzY3JpcHRfbmFtZSk7CisJCWVyciA9IHNjcmlwdGluZ19vcHMtPnN0YXJ0X3NjcmlwdChzY3JpcHRfbmFtZSwgYXJnYywgYXJndik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBfX2NtZF90cmFjZSgpOworCWVyciA9IF9fY21kX3RyYWNlKHNlc3Npb24pOwogCisJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJY2xlYW51cF9zY3JpcHRpbmcoKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLmggYi90b29scy9wZXJmL2J1aWx0aW4uaAppbmRleCBhM2Q4YmY2Li4xODAzNWIxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4uaAorKysgYi90b29scy9wZXJmL2J1aWx0aW4uaApAQCAtMTcsNiArMTcsNyBAQAogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfYmVuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfYnVpbGRpZF9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2RpZmYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9zY2hlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dCBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dAppbmRleCAwMmIwOWVhLi43MWRjN2MzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKKysrIGIvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CkBAIC01LDYgKzUsNyBAQAogcGVyZi1hbm5vdGF0ZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWJlbmNoCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtYnVpbGRpZC1saXN0CQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi1kaWZmCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtbGlzdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXNjaGVkCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtcmVjb3JkCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5jIGIvdG9vbHMvcGVyZi9wZXJmLmMKaW5kZXggY2Y2NDA0OS4uODczZTU1ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmMKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmMKQEAgLTI4Niw2ICsyODYsNyBAQAogCWNvbnN0IGNoYXIgKmNtZCA9IGFyZ3ZbMF07CiAJc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CiAJCXsgImJ1aWxkaWQtbGlzdCIsIGNtZF9idWlsZGlkX2xpc3QsIDAgfSwKKwkJeyAiZGlmZiIsCWNtZF9kaWZmLAkwIH0sCiAJCXsgImhlbHAiLAljbWRfaGVscCwJMCB9LAogCQl7ICJsaXN0IiwJY21kX2xpc3QsCTAgfSwKIAkJeyAicmVjb3JkIiwJY21kX3JlY29yZCwJMCB9LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmggYi90b29scy9wZXJmL3BlcmYuaAppbmRleCA0NTRkNWQ1Li43NWY5NDFiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuaAorKysgYi90b29scy9wZXJmL3BlcmYuaApAQCAtNTksNiArNTksMTggQEAKICNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlICgiaGludCBAcGF1c2UiIDo6OiAibWVtb3J5IikKICNlbmRpZgogCisjaWZkZWYgX19hcm1fXworI2luY2x1ZGUgIi4uLy4uL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIgorLyoKKyAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCisgKiBhcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGluIHRoZSBrZXJuZWwgc291cmNlIGZvciBkZXRhaWxzLgorICovCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIm1vdiByMCwgIzB4ZmZmZjBmZmY7IG1vdiBsciwgcGM7IiBcCisJCQkJICAgICAic3ViIHBjLCByMCwgIzk1IiA6OjogInIwIiwgImxyIiwgImNjIiwgXAorCQkJCSAgICAgIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorI2VuZGlmCisKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQKaW5kZXggODk5NDhiMC4uN2ZjNGEwMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlcG9ydApAQCAtMSw0ICsxLDUgQEAKICMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiB1c2VsZXNzIGJ1dCBleGhhdXN0aXZlIHRlc3Qgc2NyaXB0CiBwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsL2NoZWNrLXBlcmYtdHJhY2UucGwKIAogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktZmlsZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktZmlsZS1yZXBvcnQKaW5kZXggZjVkY2Y5Yy4uZWRkYjljYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3LWJ5LWZpbGUtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1maWxlLXJlcG9ydApAQCAtMSw1ICsxLDcgQEAKICMhL2Jpbi9iYXNoCi1wZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsL3J3LWJ5LWZpbGUucGwKKyMgZGVzY3JpcHRpb246IHIvdyBhY3Rpdml0eSBmb3IgYSBwcm9ncmFtLCBieSBmaWxlCisjIGFyZ3M6IDxjb21tPgorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9ydy1ieS1maWxlLnBsICQxCiAKIAogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktcGlkLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVwb3J0CmluZGV4IGNlYTE2ZjcuLjdmNDRjMjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVwb3J0CkBAIC0xLDQgKzEsNSBAQAogIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQogcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9ydy1ieS1waWQucGwKIAogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd2FrZXVwLWxhdGVuY3ktcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dha2V1cC1sYXRlbmN5LXJlcG9ydAppbmRleCA4NTc2OWRjLi5mY2UzYWRjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd2FrZXVwLWxhdGVuY3ktcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93YWtldXAtbGF0ZW5jeS1yZXBvcnQKQEAgLTEsNCArMSw1IEBACiAjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgbWluL21heC9hdmcgd2FrZXVwIGxhdGVuY3kKIHBlcmYgdHJhY2UgLXMgfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3Blcmwvd2FrZXVwLWxhdGVuY3kucGwKIAogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd29ya3F1ZXVlLXN0YXRzLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CmluZGV4IGFhNjg0MzUuLjcxY2ZiZDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CkBAIC0xLDQgKzEsNSBAQAogIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKIHBlcmYgdHJhY2UgLXMgfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3Blcmwvd29ya3F1ZXVlLXN0YXRzLnBsCiAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3J3LWJ5LWZpbGUucGwKaW5kZXggNjFmOTE1Ni4uMmEzOTA5NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9ydy1ieS1maWxlLnBsCkBAIC0xOCw4ICsxOCw5IEBACiB1c2UgUGVyZjo6VHJhY2U6OkNvcmU7CiB1c2UgUGVyZjo6VHJhY2U6OlV0aWw7CiAKLSMgY2hhbmdlIHRoaXMgdG8gdGhlIGNvbW0gb2YgdGhlIHByb2dyYW0geW91J3JlIGludGVyZXN0ZWQgaW4KLW15ICRmb3JfY29tbSA9ICJwZXJmIjsKK215ICR1c2FnZSA9ICJwZXJmIHRyYWNlIC1zIHJ3LWJ5LWZpbGUucGwgPGNvbW0+XG4iOworCitteSAkZm9yX2NvbW0gPSBzaGlmdCBvciBkaWUgJHVzYWdlOwogCiBteSAlcmVhZHM7CiBteSAld3JpdGVzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmMgYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYwppbmRleCBjYTBiZWRmLi5iNTU3YjgzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYwpAQCAtMSwyMCArMSwxNyBAQAotI2luY2x1ZGUgImRhdGFfbWFwLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgogCi0KLXN0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgKmN1cnJfaGFuZGxlcjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nCW1tYXBfd2luZG93ID0gMzI7Ci1zdGF0aWMgY2hhcgkJX19jd2RbUEFUSF9NQVhdOwotCi1zdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQpCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKIHsKIAlkdW1wX3ByaW50ZigiOiB1bmhhbmRsZWQhXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCByZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgKmhhbmRsZXIpCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmhhbmRsZXIpCiB7CiAJaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3NhbXBsZV9ldmVudCkKIAkJaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CkBAIC0zNCw4ICszMSw2IEBACiAJCWhhbmRsZXItPnByb2Nlc3NfdGhyb3R0bGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CiAJaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQpCiAJCWhhbmRsZXItPnByb2Nlc3NfdW50aHJvdHRsZV9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQotCWN1cnJfaGFuZGxlciA9IGhhbmRsZXI7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0gewpAQCAtNjEsOCArNTYsOSBAQAogCQkJZXZlbnRfX25hbWVbaV0sIGV2ZW50X190b3RhbFtpXSk7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nlc3NfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCisJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKIHsKIAl0cmFjZV9ldmVudChldmVudCk7CiAKQEAgLTc3LDM0ICs3MywzNCBAQAogCiAJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKIAljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKLQkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQpOworCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgc2Vzc2lvbik7CiAJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgotCQlyZXR1cm4gY3Vycl9oYW5kbGVyLT5wcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQpOworCQlyZXR1cm4gb3BzLT5wcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50KTsKKwkJcmV0dXJuIG9wcy0+cHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKIAljYXNlIFBFUkZfUkVDT1JEX0ZPUks6Ci0JCXJldHVybiBjdXJyX2hhbmRsZXItPnByb2Nlc3NfZm9ya19ldmVudChldmVudCk7CisJCXJldHVybiBvcHMtPnByb2Nlc3NfZm9ya19ldmVudChldmVudCwgc2Vzc2lvbik7CiAJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgotCQlyZXR1cm4gY3Vycl9oYW5kbGVyLT5wcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQpOworCQlyZXR1cm4gb3BzLT5wcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKLQkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50KTsKKwkJcmV0dXJuIG9wcy0+cHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKIAljYXNlIFBFUkZfUkVDT1JEX1JFQUQ6Ci0JCXJldHVybiBjdXJyX2hhbmRsZXItPnByb2Nlc3NfcmVhZF9ldmVudChldmVudCk7CisJCXJldHVybiBvcHMtPnByb2Nlc3NfcmVhZF9ldmVudChldmVudCwgc2Vzc2lvbik7CiAJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKLQkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc190aHJvdHRsZV9ldmVudChldmVudCk7CisJCXJldHVybiBvcHMtPnByb2Nlc3NfdGhyb3R0bGVfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKLQkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KGV2ZW50KTsKKwkJcmV0dXJuIG9wcy0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKIAlkZWZhdWx0OgotCQljdXJyX2hhbmRsZXItPnRvdGFsX3Vua25vd24rKzsKKwkJb3BzLT50b3RhbF91bmtub3duKys7CiAJCXJldHVybiAtMTsKIAl9CiB9CiAKLWludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoaW50IGlucHV0LCBvZmZfdCBvZmZzZXQsIG9mZl90IHNpemUpCitpbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IHNpemUpCiB7CiAJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKIAljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQlvZmZfdCBsaW1pdCA9IG9mZnNldCArIHNpemU7CisJdTY0IGxpbWl0ID0gb2Zmc2V0ICsgc2l6ZTsKIAlpbnQgZXJyID0gLTE7CiAKIAl3aGlsZSAob2Zmc2V0IDwgbGltaXQpIHsKQEAgLTEyOSw4OCArMTI1LDU4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKHN0cnVjdCBwZXJmX2hlYWRlciAqKnBoZWFkZXIsCi0JCQkgICAgY29uc3QgY2hhciAqaW5wdXRfbmFtZSwKLQkJCSAgICBpbnQgZm9yY2UsCi0JCQkgICAgaW50IGZ1bGxfcGF0aHMsCi0JCQkgICAgaW50ICpjd2RsZW4sCi0JCQkgICAgY2hhciAqKmN3ZCkKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkICpwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlbGYsIDApOworCisJaWYgKCF0aHJlYWQgfHwgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsICJzd2FwcGVyIikpIHsKKwkJcHJfZXJyKCJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKKwkJdGhyZWFkID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gdGhyZWFkOworfQorCitpbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyOwogCXVuc2lnbmVkIGxvbmcgaGVhZCwgc2hpZnQ7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwotCXN0cnVjdCBzdGF0IGlucHV0X3N0YXQ7CiAJc2l6ZV90CXBhZ2Vfc2l6ZTsKLQl1NjQgc2FtcGxlX3R5cGU7CiAJZXZlbnRfdCAqZXZlbnQ7CiAJdWludDMyX3Qgc2l6ZTsKLQlpbnQgaW5wdXQ7CiAJY2hhciAqYnVmOwogCi0JaWYgKGN1cnJfaGFuZGxlciA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCJGb3Jnb3QgdG8gcmVnaXN0ZXIgcGVyZiBmaWxlIGhhbmRsZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKHBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc2VsZikgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhvcHMpOwogCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAotCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0IDwgMCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBvcGVuIGZpbGU6ICVzIiwgaW5wdXRfbmFtZSk7Ci0JCWlmICghc3RyY21wKGlucHV0X25hbWUsICJwZXJmLmRhdGEiKSkKLQkJCXByX2VycigiICAodHJ5ICdwZXJmIHJlY29yZCcgZmlyc3QpIik7Ci0JCXByX2VycigiXG4iKTsKLQkJcmV0dXJuIC1lcnJubzsKLQl9Ci0KLQlpZiAoZnN0YXQoaW5wdXQsICZpbnB1dF9zdGF0KSA8IDApIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7Ci0JCWVyciA9IC1lcnJubzsKLQkJZ290byBvdXRfY2xvc2U7Ci0JfQotCi0JZXJyID0gLUVBQ0NFUzsKLQlpZiAoIWZvcmNlICYmIGlucHV0X3N0YXQuc3RfdWlkICYmIChpbnB1dF9zdGF0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7Ci0JCXByX2VycigiZmlsZTogJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciBvciByb290XG4iLAotCQkJaW5wdXRfbmFtZSk7Ci0JCWdvdG8gb3V0X2Nsb3NlOwotCX0KLQotCWlmIChpbnB1dF9zdGF0LnN0X3NpemUgPT0gMCkgewotCQlwcl9pbmZvKCJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IC1FTk9NRU07Ci0JaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOwotCWlmIChoZWFkZXIgPT0gTlVMTCkKLQkJZ290byBvdXRfY2xvc2U7Ci0KLQllcnIgPSBwZXJmX2hlYWRlcl9fcmVhZChoZWFkZXIsIGlucHV0KTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXRfZGVsZXRlOwotCSpwaGVhZGVyID0gaGVhZGVyOwotCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OwotCi0Jc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoaGVhZGVyKTsKKwloZWFkID0gc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0OworCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOwogCiAJZXJyID0gLUVJTlZBTDsKLQlpZiAoY3Vycl9oYW5kbGVyLT5zYW1wbGVfdHlwZV9jaGVjayAmJgotCSAgICBjdXJyX2hhbmRsZXItPnNhbXBsZV90eXBlX2NoZWNrKHNhbXBsZV90eXBlKSA8IDApCi0JCWdvdG8gb3V0X2RlbGV0ZTsKKwlpZiAob3BzLT5zYW1wbGVfdHlwZV9jaGVjayAmJiBvcHMtPnNhbXBsZV90eXBlX2NoZWNrKHNlbGYpIDwgMCkKKwkJZ290byBvdXRfZXJyOwogCi0JaWYgKCFmdWxsX3BhdGhzKSB7Ci0JCWlmIChnZXRjd2QoX19jd2QsIHNpemVvZihfX2N3ZCkpID09IE5VTEwpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiIpOworCWlmICghb3BzLT5mdWxsX3BhdGhzKSB7CisJCWNoYXIgYmZbUEFUSF9NQVhdOworCisJCWlmIChnZXRjd2QoYmYsIHNpemVvZihiZikpID09IE5VTEwpIHsKIAkJCWVyciA9IC1lcnJubzsKLQkJCWdvdG8gb3V0X2RlbGV0ZTsKK291dF9nZXRjd2RfZXJyOgorCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisJCQlnb3RvIG91dF9lcnI7CiAJCX0KLQkJKmN3ZCA9IF9fY3dkOwotCQkqY3dkbGVuID0gc3RybGVuKCpjd2QpOwotCX0gZWxzZSB7Ci0JCSpjd2QgPSBOVUxMOwotCQkqY3dkbGVuID0gMDsKKwkJc2VsZi0+Y3dkID0gc3RyZHVwKGJmKTsKKwkJaWYgKHNlbGYtPmN3ZCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZ2V0Y3dkX2VycjsKKwkJfQorCQlzZWxmLT5jd2RsZW4gPSBzdHJsZW4oc2VsZi0+Y3dkKTsKIAl9CiAKIAlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKQEAgLTIxOCwxMiArMTg0LDEyIEBACiAJaGVhZCAtPSBzaGlmdDsKIAogcmVtYXA6Ci0JYnVmID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAotCQkgICBNQVBfU0hBUkVELCBpbnB1dCwgb2Zmc2V0KTsKKwlidWYgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93LCBQUk9UX1JFQUQsCisJCSAgIE1BUF9TSEFSRUQsIHNlbGYtPmZkLCBvZmZzZXQpOwogCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgewogCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOwogCQllcnIgPSAtZXJybm87Ci0JCWdvdG8gb3V0X2RlbGV0ZTsKKwkJZ290byBvdXRfZXJyOwogCX0KIAogbW9yZToKQEAgLTIzMywxMiArMTk5LDEyIEBACiAJaWYgKCFzaXplKQogCQlzaXplID0gODsKIAotCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KSB7CisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpIHsKIAkJaW50IG11bm1hcF9yZXQ7CiAKIAkJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CiAKLQkJbXVubWFwX3JldCA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KTsKKwkJbXVubWFwX3JldCA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KTsKIAkJYXNzZXJ0KG11bm1hcF9yZXQgPT0gMCk7CiAKIAkJb2Zmc2V0ICs9IHNoaWZ0OwpAQCAtMjUzLDcgKzIxOSw3IEBACiAJCQkodm9pZCAqKShsb25nKWV2ZW50LT5oZWFkZXIuc2l6ZSwKIAkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CiAKLQlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKKwlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgc2VsZiwgb3BzLCBvZmZzZXQsIGhlYWQpIDwgMCkgewogCiAJCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKIAkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLApAQCAtMjczLDE5ICsyMzksMTQgQEAKIAogCWhlYWQgKz0gc2l6ZTsKIAotCWlmIChvZmZzZXQgKyBoZWFkID49IGhlYWRlci0+ZGF0YV9vZmZzZXQgKyBoZWFkZXItPmRhdGFfc2l6ZSkKKwlpZiAob2Zmc2V0ICsgaGVhZCA+PSBzZWxmLT5oZWFkZXIuZGF0YV9vZmZzZXQgKyBzZWxmLT5oZWFkZXIuZGF0YV9zaXplKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKWlucHV0X3N0YXQuc3Rfc2l6ZSkKKwlpZiAob2Zmc2V0ICsgaGVhZCA8IHNlbGYtPnNpemUpCiAJCWdvdG8gbW9yZTsKIAogZG9uZToKIAllcnIgPSAwOwotb3V0X2Nsb3NlOgotCWNsb3NlKGlucHV0KTsKLQorb3V0X2VycjoKIAlyZXR1cm4gZXJyOwotb3V0X2RlbGV0ZToKLQlwZXJmX2hlYWRlcl9fZGVsZXRlKGhlYWRlcik7Ci0JZ290byBvdXRfY2xvc2U7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTgwZmY3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBfX1BFUkZfREFUQU1BUF9ICi0jZGVmaW5lIF9fUEVSRl9EQVRBTUFQX0gKLQotI2luY2x1ZGUgImV2ZW50LmgiCi0jaW5jbHVkZSAiaGVhZGVyLmgiCi0KLXR5cGVkZWYgaW50ICgqZXZlbnRfdHlwZV9oYW5kbGVyX3QpKGV2ZW50X3QgKik7Ci0KLXN0cnVjdCBwZXJmX2ZpbGVfaGFuZGxlciB7Ci0JZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc19zYW1wbGVfZXZlbnQ7Ci0JZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc19tbWFwX2V2ZW50OwotCWV2ZW50X3R5cGVfaGFuZGxlcl90CXByb2Nlc3NfY29tbV9ldmVudDsKLQlldmVudF90eXBlX2hhbmRsZXJfdAlwcm9jZXNzX2ZvcmtfZXZlbnQ7Ci0JZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc19leGl0X2V2ZW50OwotCWV2ZW50X3R5cGVfaGFuZGxlcl90CXByb2Nlc3NfbG9zdF9ldmVudDsKLQlldmVudF90eXBlX2hhbmRsZXJfdAlwcm9jZXNzX3JlYWRfZXZlbnQ7Ci0JZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc190aHJvdHRsZV9ldmVudDsKLQlldmVudF90eXBlX2hhbmRsZXJfdAlwcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQ7Ci0JaW50CQkJKCpzYW1wbGVfdHlwZV9jaGVjaykodTY0IHNhbXBsZV90eXBlKTsKLQl1bnNpZ25lZCBsb25nCQl0b3RhbF91bmtub3duOwotfTsKLQotdm9pZCByZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgKmhhbmRsZXIpOwotaW50IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKHN0cnVjdCBwZXJmX2hlYWRlciAqKnBoZWFkZXIsCi0JCQkgICAgY29uc3QgY2hhciAqaW5wdXRfbmFtZSwKLQkJCSAgICBpbnQgZm9yY2UsCi0JCQkgICAgaW50IGZ1bGxfcGF0aHMsCi0JCQkgICAgaW50ICpjd2RsZW4sCi0JCQkgICAgY2hhciAqKmN3ZCk7Ci1pbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBmaWxlX3NpemUpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggNDE0Yjg5ZC4uYmIwZmQ2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTEsMTEgKzEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAic29ydC5oIgogI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInN0cmxpc3QuaCIKICNpbmNsdWRlICJ0aHJlYWQuaCIKIAogc3RhdGljIHBpZF90IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkX3QgcGlkLCBpbnQgZnVsbCwKLQkJCQkgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQpKQorCQkJCSAgICBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKKwkJCQkJCSAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAorCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWV2ZW50X3QgZXY7CiAJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CkBAIC01NCw3ICs1OSw3IEBACiAJaWYgKCFmdWxsKSB7CiAJCWV2LmNvbW0udGlkID0gcGlkOwogCi0JCXByb2Nlc3MoJmV2KTsKKwkJcHJvY2VzcygmZXYsIHNlc3Npb24pOwogCQlnb3RvIG91dF9mY2xvc2U7CiAJfQogCkBAIC03Miw3ICs3Nyw3IEBACiAKIAkJZXYuY29tbS50aWQgPSBwaWQ7CiAKLQkJcHJvY2VzcygmZXYpOworCQlwcm9jZXNzKCZldiwgc2Vzc2lvbik7CiAJfQogCWNsb3NlZGlyKHRhc2tzKTsKIApAQCAtODYsNyArOTEsOSBAQAogfQogCiBzdGF0aWMgaW50IGV2ZW50X19zeW50aGVzaXplX21tYXBfZXZlbnRzKHBpZF90IHBpZCwgcGlkX3QgdGdpZCwKLQkJCQkJIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSkKKwkJCQkJIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAorCQkJCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAorCQkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKIAlGSUxFICpmcDsKQEAgLTE0MSw3ICsxNDgsNyBAQAogCQkJZXYubW1hcC5waWQgPSB0Z2lkOwogCQkJZXYubW1hcC50aWQgPSBwaWQ7CiAKLQkJCXByb2Nlc3MoJmV2KTsKKwkJCXByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKIAkJfQogCX0KIApAQCAtMTQ5LDE1ICsxNTYsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSkKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLAorCQkJICAgICBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKKwkJCQkJICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAorCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCXBpZF90IHRnaWQgPSBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZCwgMSwgcHJvY2Vzcyk7CisJcGlkX3QgdGdpZCA9IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkLCAxLCBwcm9jZXNzLCBzZXNzaW9uKTsKIAlpZiAodGdpZCA9PSAtMSkKIAkJcmV0dXJuIC0xOwotCXJldHVybiBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhwaWQsIHRnaWQsIHByb2Nlc3MpOworCXJldHVybiBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhwaWQsIHRnaWQsIHByb2Nlc3MsIHNlc3Npb24pOwogfQogCi12b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQpKQordm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAorCQkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKKwkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCURJUiAqcHJvYzsKIAlzdHJ1Y3QgZGlyZW50IGRpcmVudCwgKm5leHQ7CkBAIC0xNzEsMjQgKzE4Myw0NyBAQAogCQlpZiAoKmVuZCkgLyogb25seSBpbnRlcmVzdGVkIGluIHByb3BlciBudW1lcmljYWwgZGlyZW50cyAqLwogCQkJY29udGludWU7CiAKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzcyk7CisJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWQsIHByb2Nlc3MsIHNlc3Npb24pOwogCX0KIAogCWNsb3NlZGlyKHByb2MpOwogfQogCi1jaGFyICpldmVudF9fY3dkOwotaW50ICBldmVudF9fY3dkbGVuOwotCi1zdHJ1Y3QgZXZlbnRzX3N0YXRzIGV2ZW50X19zdGF0czsKLQotaW50IGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZikKK3N0YXRpYyB2b2lkIHRocmVhZF9fY29tbV9hZGp1c3Qoc3RydWN0IHRocmVhZCAqc2VsZikKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPmNvbW0ucGlkKTsKKwljaGFyICpjb21tID0gc2VsZi0+Y29tbTsKKworCWlmICghc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyICYmICFzeW1ib2xfY29uZi5maWVsZF9zZXAgJiYKKwkgICAgKCFzeW1ib2xfY29uZi5jb21tX2xpc3QgfHwKKwkgICAgIHN0cmxpc3RfX2hhc19lbnRyeShzeW1ib2xfY29uZi5jb21tX2xpc3QsIGNvbW0pKSkgeworCQl1bnNpZ25lZCBpbnQgc2xlbiA9IHN0cmxlbihjb21tKTsKKworCQlpZiAoc2xlbiA+IGNvbW1zX19jb2xfd2lkdGgpIHsKKwkJCWNvbW1zX19jb2xfd2lkdGggPSBzbGVuOworCQkJdGhyZWFkc19fY29sX3dpZHRoID0gc2xlbiArIDY7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX19zZXRfY29tbV9hZGp1c3Qoc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSkKK3sKKwlpbnQgcmV0ID0gdGhyZWFkX19zZXRfY29tbShzZWxmLCBjb21tKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0aHJlYWRfX2NvbW1fYWRqdXN0KHNlbGYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPmNvbW0ucGlkKTsKIAogCWR1bXBfcHJpbnRmKCI6ICVzOiVkXG4iLCBzZWxmLT5jb21tLmNvbW0sIHNlbGYtPmNvbW0ucGlkKTsKIAotCWlmICh0aHJlYWQgPT0gTlVMTCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgc2VsZi0+Y29tbS5jb21tKSkgeworCWlmICh0aHJlYWQgPT0gTlVMTCB8fCB0aHJlYWRfX3NldF9jb21tX2FkanVzdCh0aHJlYWQsIHNlbGYtPmNvbW0uY29tbSkpIHsKIAkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTk2LDE4ICsyMzEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19wcm9jZXNzX2xvc3QoZXZlbnRfdCAqc2VsZikKK2ludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJZHVtcF9wcmludGYoIjogaWQ6JUxkOiBsb3N0OiVMZFxuIiwgc2VsZi0+bG9zdC5pZCwgc2VsZi0+bG9zdC5sb3N0KTsKLQlldmVudF9fc3RhdHMubG9zdCArPSBzZWxmLT5sb3N0Lmxvc3Q7CisJc2Vzc2lvbi0+ZXZlbnRzX3N0YXRzLmxvc3QgKz0gc2VsZi0+bG9zdC5sb3N0OwogCXJldHVybiAwOwogfQogCi1pbnQgZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudF90ICpzZWxmKQoraW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPm1tYXAucGlkKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+bW1hcC5waWQpOwogCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBNQVBfX0ZVTkNUSU9OLAotCQkJCSAgIGV2ZW50X19jd2QsIGV2ZW50X19jd2RsZW4pOworCQkJCSAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKIAogCWR1bXBfcHJpbnRmKCIgJWQvJWQ6IFslcCglcCkgQCAlcF06ICVzXG4iLAogCQkgICAgc2VsZi0+bW1hcC5waWQsIHNlbGYtPm1tYXAudGlkLApAQCAtMjI0LDEwICsyNTksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnRfdCAqc2VsZikKK2ludCBldmVudF9fcHJvY2Vzc190YXNrKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhzZWxmLT5mb3JrLnBpZCk7Ci0Jc3RydWN0IHRocmVhZCAqcGFyZW50ID0gdGhyZWFkc19fZmluZG5ldyhzZWxmLT5mb3JrLnBwaWQpOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5mb3JrLnBpZCk7CisJc3RydWN0IHRocmVhZCAqcGFyZW50ID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPmZvcmsucHBpZCk7CiAKIAlkdW1wX3ByaW50ZigiKCVkOiVkKTooJWQ6JWQpXG4iLCBzZWxmLT5mb3JrLnBpZCwgc2VsZi0+Zm9yay50aWQsCiAJCSAgICBzZWxmLT5mb3JrLnBwaWQsIHNlbGYtPmZvcmsucHRpZCk7CkBAIC0yNDksMTggKzI4NCwyMCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU4IGNwdW1vZGUsCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKIAkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKIAkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IGFsLT50aHJlYWQgPSBzZWxmOworCXN0cnVjdCBtYXBfZ3JvdXBzICptZyA9ICZzZWxmLT5tZzsKIAorCWFsLT50aHJlYWQgPSBzZWxmOwogCWFsLT5hZGRyID0gYWRkcjsKIAogCWlmIChjcHVtb2RlICYgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKIAkJYWwtPmxldmVsID0gJ2snOwotCQl0aHJlYWQgPSBrdGhyZWFkOworCQltZyA9ICZzZXNzaW9uLT5rbWFwczsKIAl9IGVsc2UgaWYgKGNwdW1vZGUgJiBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpCiAJCWFsLT5sZXZlbCA9ICcuJzsKIAllbHNlIHsKQEAgLTI3MCw3ICszMDcsNyBAQAogCQlyZXR1cm47CiAJfQogdHJ5X2FnYWluOgotCWFsLT5tYXAgPSB0aHJlYWRfX2ZpbmRfbWFwKHRocmVhZCwgdHlwZSwgYWwtPmFkZHIpOworCWFsLT5tYXAgPSBtYXBfZ3JvdXBzX19maW5kKG1nLCB0eXBlLCBhbC0+YWRkcik7CiAJaWYgKGFsLT5tYXAgPT0gTlVMTCkgewogCQkvKgogCQkgKiBJZiB0aGlzIGlzIG91dHNpZGUgb2YgYWxsIGtub3duIG1hcHMsIGFuZCBpcyBhIG5lZ2F0aXZlCkBAIC0yODEsMzIgKzMxOCwxMzkgQEAKIAkJICogIlt2ZHNvXSIgZHNvLCBidXQgZm9yIG5vdyBsZXRzIHVzZSB0aGUgb2xkIHRyaWNrIG9mIGxvb2tpbmcKIAkJICogaW4gdGhlIHdob2xlIGtlcm5lbCBzeW1ib2wgbGlzdC4KIAkJICovCi0JCWlmICgobG9uZyBsb25nKWFsLT5hZGRyIDwgMCAmJiB0aHJlYWQgIT0ga3RocmVhZCkgewotCQkJdGhyZWFkID0ga3RocmVhZDsKKwkJaWYgKChsb25nIGxvbmcpYWwtPmFkZHIgPCAwICYmIG1nICE9ICZzZXNzaW9uLT5rbWFwcykgeworCQkJbWcgPSAmc2Vzc2lvbi0+a21hcHM7CiAJCQlnb3RvIHRyeV9hZ2FpbjsKIAkJfQogCQlhbC0+c3ltID0gTlVMTDsKIAl9IGVsc2UgewogCQlhbC0+YWRkciA9IGFsLT5tYXAtPm1hcF9pcChhbC0+bWFwLCBhbC0+YWRkcik7Ci0JCWFsLT5zeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKGFsLT5tYXAsIGFsLT5hZGRyLCBmaWx0ZXIpOworCQlhbC0+c3ltID0gbWFwX19maW5kX3N5bWJvbChhbC0+bWFwLCBzZXNzaW9uLCBhbC0+YWRkciwgZmlsdGVyKTsKIAl9CiB9CiAKLWludCBldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoY29uc3QgZXZlbnRfdCAqc2VsZiwgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAotCQkJICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RhdGljIHZvaWQgZHNvX19jYWxjX2NvbF93aWR0aChzdHJ1Y3QgZHNvICpzZWxmKQoreworCWlmICghc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyICYmICFzeW1ib2xfY29uZi5maWVsZF9zZXAgJiYKKwkgICAgKCFzeW1ib2xfY29uZi5kc29fbGlzdCB8fAorCSAgICAgc3RybGlzdF9faGFzX2VudHJ5KHN5bWJvbF9jb25mLmRzb19saXN0LCBzZWxmLT5uYW1lKSkpIHsKKwkJdW5zaWduZWQgaW50IHNsZW4gPSBzdHJsZW4oc2VsZi0+bmFtZSk7CisJCWlmIChzbGVuID4gZHNvc19fY29sX3dpZHRoKQorCQkJZHNvc19fY29sX3dpZHRoID0gc2xlbjsKKwl9CisKKwlzZWxmLT5zbGVuX2NhbGN1bGF0ZWQgPSAxOworfQorCitpbnQgZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1OCBjcHVtb2RlID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPmlwLnBpZCk7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPmlwLnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAorCWlmIChzeW1ib2xfY29uZi5jb21tX2xpc3QgJiYKKwkgICAgIXN0cmxpc3RfX2hhc19lbnRyeShzeW1ib2xfY29uZi5jb21tX2xpc3QsIHRocmVhZC0+Y29tbSkpCisJCWdvdG8gb3V0X2ZpbHRlcmVkOworCiAJZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CiAKLQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCisJdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24odGhyZWFkLCBzZXNzaW9uLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAogCQkJCSAgIHNlbGYtPmlwLmlwLCBhbCwgZmlsdGVyKTsKIAlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLAogCQkgICAgYWwtPm1hcCA/IGFsLT5tYXAtPmRzby0+bG9uZ19uYW1lIDoKIAkJCWFsLT5sZXZlbCA9PSAnSCcgPyAiW2h5cGVydmlzb3JdIiA6ICI8bm90IGZvdW5kPiIpOworCS8qCisJICogV2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUgYXMgd2UgbWF5IGhhdmUgYSBkc28gd2l0aCBubyBzeW1ib2wgaGl0IHRoYXQKKwkgKiBoYXMgYSBuYW1lIGxvbmdlciB0aGFuIHRoZSBvbmVzIHdpdGggc3ltYm9scyBzYW1wbGVkLgorCSAqLworCWlmIChhbC0+bWFwICYmICFzb3J0X2Rzby5lbGlkZSAmJiAhYWwtPm1hcC0+ZHNvLT5zbGVuX2NhbGN1bGF0ZWQpCisJCWRzb19fY2FsY19jb2xfd2lkdGgoYWwtPm1hcC0+ZHNvKTsKKworCWlmIChzeW1ib2xfY29uZi5kc29fbGlzdCAmJgorCSAgICAoIWFsLT5tYXAgfHwgIWFsLT5tYXAtPmRzbyB8fAorCSAgICAgIShzdHJsaXN0X19oYXNfZW50cnkoc3ltYm9sX2NvbmYuZHNvX2xpc3QsIGFsLT5tYXAtPmRzby0+c2hvcnRfbmFtZSkgfHwKKwkgICAgICAgKGFsLT5tYXAtPmRzby0+c2hvcnRfbmFtZSAhPSBhbC0+bWFwLT5kc28tPmxvbmdfbmFtZSAmJgorCQlzdHJsaXN0X19oYXNfZW50cnkoc3ltYm9sX2NvbmYuZHNvX2xpc3QsIGFsLT5tYXAtPmRzby0+bG9uZ19uYW1lKSkpKSkKKwkJZ290byBvdXRfZmlsdGVyZWQ7CisKKwlpZiAoc3ltYm9sX2NvbmYuc3ltX2xpc3QgJiYgYWwtPnN5bSAmJgorCSAgICAhc3RybGlzdF9faGFzX2VudHJ5KHN5bWJvbF9jb25mLnN5bV9saXN0LCBhbC0+c3ltLT5uYW1lKSkKKwkJZ290byBvdXRfZmlsdGVyZWQ7CisKKwlhbC0+ZmlsdGVyZWQgPSBmYWxzZTsKKwlyZXR1cm4gMDsKKworb3V0X2ZpbHRlcmVkOgorCWFsLT5maWx0ZXJlZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50X3QgKmV2ZW50LCB1NjQgdHlwZSwgc3RydWN0IHNhbXBsZV9kYXRhICpkYXRhKQoreworCXU2NCAqYXJyYXkgPSBldmVudC0+c2FtcGxlLmFycmF5OworCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9JUCkgeworCQlkYXRhLT5pcCA9IGV2ZW50LT5pcC5pcDsKKwkJYXJyYXkrKzsKKwl9CisKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1RJRCkgeworCQl1MzIgKnAgPSAodTMyICopYXJyYXk7CisJCWRhdGEtPnBpZCA9IHBbMF07CisJCWRhdGEtPnRpZCA9IHBbMV07CisJCWFycmF5Kys7CisJfQorCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7CisJCWRhdGEtPnRpbWUgPSAqYXJyYXk7CisJCWFycmF5Kys7CisJfQorCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9BRERSKSB7CisJCWRhdGEtPmFkZHIgPSAqYXJyYXk7CisJCWFycmF5Kys7CisJfQorCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9JRCkgeworCQlkYXRhLT5pZCA9ICphcnJheTsKKwkJYXJyYXkrKzsKKwl9CisKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkgeworCQlkYXRhLT5zdHJlYW1faWQgPSAqYXJyYXk7CisJCWFycmF5Kys7CisJfQorCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9DUFUpIHsKKwkJdTMyICpwID0gKHUzMiAqKWFycmF5OworCQlkYXRhLT5jcHUgPSAqcDsKKwkJYXJyYXkrKzsKKwl9CisKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkgeworCQlkYXRhLT5wZXJpb2QgPSAqYXJyYXk7CisJCWFycmF5Kys7CisJfQorCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9SRUFEKSB7CisJCXByX2RlYnVnKCJQRVJGX1NBTVBMRV9SRUFEIGlzIHVuc3Vwb3J0ZWQgZm9yIG5vd1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgeworCQlkYXRhLT5jYWxsY2hhaW4gPSAoc3RydWN0IGlwX2NhbGxjaGFpbiAqKWFycmF5OworCQlhcnJheSArPSAxICsgZGF0YS0+Y2FsbGNoYWluLT5ucjsKKwl9CisKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1JBVykgeworCQl1MzIgKnAgPSAodTMyICopYXJyYXk7CisJCWRhdGEtPnJhd19zaXplID0gKnA7CisJCXArKzsKKwkJZGF0YS0+cmF3X2RhdGEgPSBwOworCX0KKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCBhNGNjODEwLi42OTBhOTZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtNTYsMTEgKzU2LDI1IEBACiAJdTY0IGlkOwogfTsKIAotc3RydWN0IHNhbXBsZV9ldmVudHsKK3N0cnVjdCBzYW1wbGVfZXZlbnQgewogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAgICAgICAgaGVhZGVyOwogCXU2NCBhcnJheVtdOwogfTsKIAorc3RydWN0IHNhbXBsZV9kYXRhIHsKKwl1NjQgaXA7CisJdTMyIHBpZCwgdGlkOworCXU2NCB0aW1lOworCXU2NCBhZGRyOworCXU2NCBpZDsKKwl1NjQgc3RyZWFtX2lkOworCXUzMiBjcHU7CisJdTY0IHBlcmlvZDsKKwlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjYWxsY2hhaW47CisJdTMyIHJhd19zaXplOworCXZvaWQgKnJhd19kYXRhOworfTsKKwogI2RlZmluZSBCVUlMRF9JRF9TSVpFIDIwCiAKIHN0cnVjdCBidWlsZF9pZF9ldmVudCB7CkBAIC04MSwxOCArOTUsMTkgQEAKIH0gZXZlbnRfdDsKIAogc3RydWN0IGV2ZW50c19zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbDsKLQl1bnNpZ25lZCBsb25nIGxvc3Q7CisJdTY0IHRvdGFsOworCXU2NCBsb3N0OwogfTsKIAogdm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOwogCiBlbnVtIG1hcF90eXBlIHsKIAlNQVBfX0ZVTkNUSU9OID0gMCwKLQotCU1BUF9fTlJfVFlQRVMsCisJTUFQX19WQVJJQUJMRSwKIH07CiAKKyNkZWZpbmUgTUFQX19OUl9UWVBFUyAoTUFQX19WQVJJQUJMRSArIDEpCisKIHN0cnVjdCBtYXAgewogCXVuaW9uIHsKIAkJc3RydWN0IHJiX25vZGUJcmJfbm9kZTsKQEAgLTEzNCwyNiArMTQ5LDM1IEBACiBzdHJ1Y3QgbWFwICptYXBfX2Nsb25lKHN0cnVjdCBtYXAgKnNlbGYpOwogaW50IG1hcF9fb3ZlcmxhcChzdHJ1Y3QgbWFwICpsLCBzdHJ1Y3QgbWFwICpyKTsKIHNpemVfdCBtYXBfX2ZwcmludGYoc3RydWN0IG1hcCAqc2VsZiwgRklMRSAqZnApOwotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCB1NjQgYWRkciwKLQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKKworc3RydWN0IHBlcmZfc2Vzc2lvbjsKKworaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK3N0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgbWFwICpzZWxmLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIHZvaWQgbWFwX19maXh1cF9zdGFydChzdHJ1Y3QgbWFwICpzZWxmKTsKIHZvaWQgbWFwX19maXh1cF9lbmQoc3RydWN0IG1hcCAqc2VsZik7CiAKLWludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCkpOwotdm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSk7CitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwKKwkJCSAgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCisJCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKKwkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Cit2b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCisJCQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pLAorCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCi1leHRlcm4gY2hhciAqZXZlbnRfX2N3ZDsKLWV4dGVybiBpbnQgIGV2ZW50X19jd2RsZW47Ci1leHRlcm4gc3RydWN0IGV2ZW50c19zdGF0cyBldmVudF9fc3RhdHM7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBldmVudF9fdG90YWxbUEVSRl9SRUNPUkRfTUFYXTsKLQotaW50IGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZik7Ci1pbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmKTsKLWludCBldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50X3QgKnNlbGYpOwotaW50IGV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnRfdCAqc2VsZik7CitpbnQgZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CitpbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAogc3RydWN0IGFkZHJfbG9jYXRpb247Ci1pbnQgZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKLQkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSk7CiAKICNlbmRpZiAvKiBfX1BFUkZfUkVDT1JEX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA0ODA1ZTZkLi44YTBiY2E1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC04LDggKzgsOCBAQAogI2luY2x1ZGUgImhlYWRlci5oIgogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKLSNpbmNsdWRlICJkYXRhX21hcC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKIC8qCkBAIC01OCwzNSArNTgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENyZWF0ZSBuZXcgcGVyZi5kYXRhIGhlYWRlcjoKLSAqLwotc3RydWN0IHBlcmZfaGVhZGVyICpwZXJmX2hlYWRlcl9fbmV3KHZvaWQpCitpbnQgcGVyZl9oZWFkZXJfX2luaXQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmKQogewotCXN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiA9IHphbGxvYyhzaXplb2YoKnNlbGYpKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJc2VsZi0+c2l6ZSA9IDE7Ci0JCXNlbGYtPmF0dHIgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikpOwotCi0JCWlmIChzZWxmLT5hdHRyID09IE5VTEwpIHsKLQkJCWZyZWUoc2VsZik7Ci0JCQlzZWxmID0gTlVMTDsKLQkJfQotCX0KLQotCXJldHVybiBzZWxmOworCXNlbGYtPnNpemUgPSAxOworCXNlbGYtPmF0dHIgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikpOworCXJldHVybiBzZWxmLT5hdHRyID09IE5VTEwgPyAtRU5PTUVNIDogMDsKIH0KIAotdm9pZCBwZXJmX2hlYWRlcl9fZGVsZXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZikKK3ZvaWQgcGVyZl9oZWFkZXJfX2V4aXQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmKQogewogCWludCBpOwotCiAJZm9yIChpID0gMDsgaSA8IHNlbGYtPmF0dHJzOyArK2kpCi0JCXBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShzZWxmLT5hdHRyW2ldKTsKLQorICAgICAgICAgICAgICAgIHBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShzZWxmLT5hdHRyW2ldKTsKIAlmcmVlKHNlbGYtPmF0dHIpOwotCWZyZWUoc2VsZik7CiB9CiAKIGludCBwZXJmX2hlYWRlcl9fYWRkX2F0dHIoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLApAQCAtMTg3LDcgKzE3MSw5IEBACiAKIHN0YXRpYyBpbnQgX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGludCBmZCkKIHsKKyNkZWZpbmUgTkFNRV9BTElHTgk2NAogCXN0cnVjdCBkc28gKnBvczsKKwlzdGF0aWMgY29uc3QgY2hhciB6ZXJvX2J1ZltOQU1FX0FMSUdOXTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CiAJCWludCBlcnI7CkBAIC0xOTcsMTQgKzE4MywxNyBAQAogCQlpZiAoIXBvcy0+aGFzX2J1aWxkX2lkKQogCQkJY29udGludWU7CiAJCWxlbiA9IHBvcy0+bG9uZ19uYW1lX2xlbiArIDE7Ci0JCWxlbiA9IEFMSUdOKGxlbiwgNjQpOworCQlsZW4gPSBBTElHTihsZW4sIE5BTUVfQUxJR04pOwogCQltZW1zZXQoJmIsIDAsIHNpemVvZihiKSk7CiAJCW1lbWNweSgmYi5idWlsZF9pZCwgcG9zLT5idWlsZF9pZCwgc2l6ZW9mKHBvcy0+YnVpbGRfaWQpKTsKIAkJYi5oZWFkZXIuc2l6ZSA9IHNpemVvZihiKSArIGxlbjsKIAkJZXJyID0gZG9fd3JpdGUoZmQsICZiLCBzaXplb2YoYikpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCWVyciA9IGRvX3dyaXRlKGZkLCBwb3MtPmxvbmdfbmFtZSwgbGVuKTsKKwkJZXJyID0gZG9fd3JpdGUoZmQsIHBvcy0+bG9uZ19uYW1lLCBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBkb193cml0ZShmZCwgemVyb19idWYsIGxlbiAtIHBvcy0+bG9uZ19uYW1lX2xlbiAtIDEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCmluZGV4IGQxZGJlMmIuLmQxMThkMDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKQEAgLTU1LDggKzU1LDggQEAKIAlERUNMQVJFX0JJVE1BUChhZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKIH07CiAKLXN0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX25ldyh2b2lkKTsKLXZvaWQgcGVyZl9oZWFkZXJfX2RlbGV0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYpOworaW50IHBlcmZfaGVhZGVyX19pbml0KHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZik7Cit2b2lkIHBlcmZfaGVhZGVyX19leGl0KHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZik7CiAKIGludCBwZXJmX2hlYWRlcl9fcmVhZChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCk7CiBpbnQgcGVyZl9oZWFkZXJfX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkLCBib29sIGF0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKaW5kZXggMGViZjZlZS4uZThkYWY1YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCkBAIC0xLDkgKzEsNyBAQAogI2luY2x1ZGUgImhpc3QuaCIKLQotc3RydWN0IHJiX3Jvb3QgaGlzdDsKLXN0cnVjdCByYl9yb290IGNvbGxhcHNlX2hpc3RzOwotc3RydWN0IHJiX3Jvb3Qgb3V0cHV0X2hpc3RzOwotaW50IGNhbGxjaGFpbjsKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAic29ydC5oIgorI2luY2x1ZGUgPG1hdGguaD4KIAogc3RydWN0IGNhbGxjaGFpbl9wYXJhbQljYWxsY2hhaW5fcGFyYW0gPSB7CiAJLm1vZGUJPSBDSEFJTl9HUkFQSF9SRUwsCkBAIC0xNCwxMSArMTIsMTIgQEAKICAqIGhpc3RvZ3JhbSwgc29ydGVkIG9uIGl0ZW0sIGNvbGxlY3RzIGNvdW50cwogICovCiAKLXN0cnVjdCBoaXN0X2VudHJ5ICpfX2hpc3RfZW50cnlfX2FkZChzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCi0JCQkJICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW1fcGFyZW50LAotCQkJCSAgICAgdTY0IGNvdW50LCBib29sICpoaXQpCitzdHJ1Y3QgaGlzdF9lbnRyeSAqX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCQkJCSAgc3RydWN0IHN5bWJvbCAqc3ltX3BhcmVudCwKKwkJCQkJCSAgdTY0IGNvdW50LCBib29sICpoaXQpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJmhpc3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmc2VsZi0+aGlzdHMucmJfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7CiAJc3RydWN0IGhpc3RfZW50cnkgZW50cnkgPSB7CkBAIC01NCw3ICs1Myw3IEBACiAJCXJldHVybiBOVUxMOwogCSpoZSA9IGVudHJ5OwogCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZSwgJmhpc3QpOworCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsICZzZWxmLT5oaXN0cyk7CiAJKmhpdCA9IGZhbHNlOwogCXJldHVybiBoZTsKIH0KQEAgLTEwMiw5ICsxMDEsOSBAQAogICogY29sbGFwc2UgdGhlIGhpc3RvZ3JhbQogICovCiAKLXZvaWQgY29sbGFwc2VfX2luc2VydF9lbnRyeShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCitzdGF0aWMgdm9pZCBjb2xsYXBzZV9faW5zZXJ0X2VudHJ5KHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJmNvbGxhcHNlX2hpc3RzLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IGhpc3RfZW50cnkgKml0ZXI7CiAJaW50NjRfdCBjbXA7CkBAIC0xMjgsMzggKzEyNyw0NSBAQAogCX0KIAogCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZSwgJmNvbGxhcHNlX2hpc3RzKTsKKwlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCByb290KTsKIH0KIAotdm9pZCBjb2xsYXBzZV9fcmVzb3J0KHZvaWQpCit2b2lkIHBlcmZfc2Vzc2lvbl9fY29sbGFwc2VfcmVzb3J0KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CisJc3RydWN0IHJiX3Jvb3QgdG1wOwogCXN0cnVjdCByYl9ub2RlICpuZXh0OwogCXN0cnVjdCBoaXN0X2VudHJ5ICpuOwogCiAJaWYgKCFzb3J0X19uZWVkX2NvbGxhcHNlKQogCQlyZXR1cm47CiAKLQluZXh0ID0gcmJfZmlyc3QoJmhpc3QpOworCXRtcCA9IFJCX1JPT1Q7CisJbmV4dCA9IHJiX2ZpcnN0KCZzZWxmLT5oaXN0cyk7CisKIAl3aGlsZSAobmV4dCkgewogCQluID0gcmJfZW50cnkobmV4dCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwogCQluZXh0ID0gcmJfbmV4dCgmbi0+cmJfbm9kZSk7CiAKLQkJcmJfZXJhc2UoJm4tPnJiX25vZGUsICZoaXN0KTsKLQkJY29sbGFwc2VfX2luc2VydF9lbnRyeShuKTsKKwkJcmJfZXJhc2UoJm4tPnJiX25vZGUsICZzZWxmLT5oaXN0cyk7CisJCWNvbGxhcHNlX19pbnNlcnRfZW50cnkoJnRtcCwgbik7CiAJfQorCisJc2VsZi0+aGlzdHMgPSB0bXA7CiB9CiAKIC8qCiAgKiByZXZlcnNlIHRoZSBtYXAsIHNvcnQgb24gY291bnQuCiAgKi8KIAotdm9pZCBvdXRwdXRfX2luc2VydF9lbnRyeShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBtaW5fY2FsbGNoYWluX2hpdHMpCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX2luc2VydF9vdXRwdXRfaGlzdF9lbnRyeShzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKKwkJCQkJCSAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwKKwkJCQkJCSAgIHU2NCBtaW5fY2FsbGNoYWluX2hpdHMpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJm91dHB1dF9oaXN0cy5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyb290LT5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBoaXN0X2VudHJ5ICppdGVyOwogCi0JaWYgKGNhbGxjaGFpbikKKwlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKIAkJY2FsbGNoYWluX3BhcmFtLnNvcnQoJmhlLT5zb3J0ZWRfY2hhaW4sICZoZS0+Y2FsbGNoYWluLAogCQkJCSAgICAgIG1pbl9jYWxsY2hhaW5faGl0cywgJmNhbGxjaGFpbl9wYXJhbSk7CiAKQEAgLTE3NCwyOSArMTgwLDQ4MyBAQAogCX0KIAogCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZSwgJm91dHB1dF9oaXN0cyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZSwgcm9vdCk7CiB9CiAKLXZvaWQgb3V0cHV0X19yZXNvcnQodTY0IHRvdGFsX3NhbXBsZXMpCit2b2lkIHBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCB1NjQgdG90YWxfc2FtcGxlcykKIHsKKwlzdHJ1Y3QgcmJfcm9vdCB0bXA7CiAJc3RydWN0IHJiX25vZGUgKm5leHQ7CiAJc3RydWN0IGhpc3RfZW50cnkgKm47Ci0Jc3RydWN0IHJiX3Jvb3QgKnRyZWUgPSAmaGlzdDsKIAl1NjQgbWluX2NhbGxjaGFpbl9oaXRzOwogCiAJbWluX2NhbGxjaGFpbl9oaXRzID0KIAkJdG90YWxfc2FtcGxlcyAqIChjYWxsY2hhaW5fcGFyYW0ubWluX3BlcmNlbnQgLyAxMDApOwogCi0JaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCi0JCXRyZWUgPSAmY29sbGFwc2VfaGlzdHM7Ci0KLQluZXh0ID0gcmJfZmlyc3QodHJlZSk7CisJdG1wID0gUkJfUk9PVDsKKwluZXh0ID0gcmJfZmlyc3QoJnNlbGYtPmhpc3RzKTsKIAogCXdoaWxlIChuZXh0KSB7CiAJCW4gPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CiAJCW5leHQgPSByYl9uZXh0KCZuLT5yYl9ub2RlKTsKIAotCQlyYl9lcmFzZSgmbi0+cmJfbm9kZSwgdHJlZSk7Ci0JCW91dHB1dF9faW5zZXJ0X2VudHJ5KG4sIG1pbl9jYWxsY2hhaW5faGl0cyk7CisJCXJiX2VyYXNlKCZuLT5yYl9ub2RlLCAmc2VsZi0+aGlzdHMpOworCQlwZXJmX3Nlc3Npb25fX2luc2VydF9vdXRwdXRfaGlzdF9lbnRyeSgmdG1wLCBuLAorCQkJCQkJICAgICAgIG1pbl9jYWxsY2hhaW5faGl0cyk7CiAJfQorCisJc2VsZi0+aGlzdHMgPSB0bXA7Cit9CisKK3N0YXRpYyBzaXplX3QgY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKEZJTEUgKmZwLCBpbnQgbGVmdF9tYXJnaW4pCit7CisJaW50IGk7CisJaW50IHJldCA9IGZwcmludGYoZnAsICIgICAgICAgICAgICAiKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZWZ0X21hcmdpbjsgaSsrKQorCQlyZXQgKz0gZnByaW50ZihmcCwgIiAiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzaXplX3QgaXBjaGFpbl9fZnByaW50Zl9ncmFwaF9saW5lKEZJTEUgKmZwLCBpbnQgZGVwdGgsIGludCBkZXB0aF9tYXNrLAorCQkJCQkgIGludCBsZWZ0X21hcmdpbikKK3sKKwlpbnQgaTsKKwlzaXplX3QgcmV0ID0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKwkJaWYgKGRlcHRoX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAifCAgICAgICAgICAiKTsKKwkJZWxzZQorCQkJcmV0ICs9IGZwcmludGYoZnAsICIgICAgICAgICAgICIpOworCisJcmV0ICs9IGZwcmludGYoZnAsICJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdCBpcGNoYWluX19mcHJpbnRmX2dyYXBoKEZJTEUgKmZwLCBzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluLAorCQkJCSAgICAgaW50IGRlcHRoLCBpbnQgZGVwdGhfbWFzaywgaW50IGNvdW50LAorCQkJCSAgICAgdTY0IHRvdGFsX3NhbXBsZXMsIGludCBoaXRzLAorCQkJCSAgICAgaW50IGxlZnRfbWFyZ2luKQoreworCWludCBpOworCXNpemVfdCByZXQgPSAwOworCisJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOworCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CisJCWlmIChkZXB0aF9tYXNrICYgKDEgPDwgaSkpCisJCQlyZXQgKz0gZnByaW50ZihmcCwgInwiKTsKKwkJZWxzZQorCQkJcmV0ICs9IGZwcmludGYoZnAsICIgIik7CisJCWlmICghY291bnQgJiYgaSA9PSBkZXB0aCAtIDEpIHsKKwkJCWRvdWJsZSBwZXJjZW50OworCisJCQlwZXJjZW50ID0gaGl0cyAqIDEwMC4wIC8gdG90YWxfc2FtcGxlczsKKwkJCXJldCArPSBwZXJjZW50X2NvbG9yX2ZwcmludGYoZnAsICItLSUyLjJmJSUtLSAiLCBwZXJjZW50KTsKKwkJfSBlbHNlCisJCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzIiwgIiAgICAgICAgICAiKTsKKwl9CisJaWYgKGNoYWluLT5zeW0pCisJCXJldCArPSBmcHJpbnRmKGZwLCAiJXNcbiIsIGNoYWluLT5zeW0tPm5hbWUpOworCWVsc2UKKwkJcmV0ICs9IGZwcmludGYoZnAsICIlcFxuIiwgKHZvaWQgKikobG9uZyljaGFpbi0+aXApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2wgKnJlbV9zcV9icmFja2V0Oworc3RhdGljIHN0cnVjdCBjYWxsY2hhaW5fbGlzdCByZW1faGl0czsKKworc3RhdGljIHZvaWQgaW5pdF9yZW1faGl0cyh2b2lkKQoreworCXJlbV9zcV9icmFja2V0ID0gbWFsbG9jKHNpemVvZigqcmVtX3NxX2JyYWNrZXQpICsgNik7CisJaWYgKCFyZW1fc3FfYnJhY2tldCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGRpc3BsYXkgcmVtYWluaW5nIGhpdHNcbiIpOworCQlyZXR1cm47CisJfQorCisJc3RyY3B5KHJlbV9zcV9icmFja2V0LT5uYW1lLCAiWy4uLl0iKTsKKwlyZW1faGl0cy5zeW0gPSByZW1fc3FfYnJhY2tldDsKK30KKworc3RhdGljIHNpemVfdCBfX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAorCQkJCQkgdTY0IHRvdGFsX3NhbXBsZXMsIGludCBkZXB0aCwKKwkJCQkJIGludCBkZXB0aF9tYXNrLCBpbnQgbGVmdF9tYXJnaW4pCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0OworCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hpbGQ7CisJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKKwlpbnQgbmV3X2RlcHRoX21hc2sgPSBkZXB0aF9tYXNrOworCXU2NCBuZXdfdG90YWw7CisJdTY0IHJlbWFpbmluZzsKKwlzaXplX3QgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSA9PSBDSEFJTl9HUkFQSF9SRUwpCisJCW5ld190b3RhbCA9IHNlbGYtPmNoaWxkcmVuX2hpdDsKKwllbHNlCisJCW5ld190b3RhbCA9IHRvdGFsX3NhbXBsZXM7CisKKwlyZW1haW5pbmcgPSBuZXdfdG90YWw7CisKKwlub2RlID0gcmJfZmlyc3QoJnNlbGYtPnJiX3Jvb3QpOworCXdoaWxlIChub2RlKSB7CisJCXU2NCBjdW11bDsKKworCQljaGlsZCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CisJCWN1bXVsID0gY3VtdWxfaGl0cyhjaGlsZCk7CisJCXJlbWFpbmluZyAtPSBjdW11bDsKKworCQkvKgorCQkgKiBUaGUgZGVwdGggbWFzayBtYW5hZ2VzIHRoZSBvdXRwdXQgb2YgcGlwZXMgdGhhdCBzaG93CisJCSAqIHRoZSBkZXB0aC4gV2UgZG9uJ3Qgd2FudCB0byBrZWVwIHRoZSBwaXBlcyBvZiB0aGUgY3VycmVudAorCQkgKiBsZXZlbCBmb3IgdGhlIGxhc3QgY2hpbGQgb2YgdGhpcyBkZXB0aC4KKwkJICogRXhjZXB0IGlmIHdlIGhhdmUgcmVtYWluaW5nIGZpbHRlcmVkIGhpdHMuIFRoZXkgd2lsbAorCQkgKiBzdXBlcnNlZGUgdGhlIGxhc3QgY2hpbGQKKwkJICovCisJCW5leHQgPSByYl9uZXh0KG5vZGUpOworCQlpZiAoIW5leHQgJiYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX0dSQVBIX1JFTCB8fCAhcmVtYWluaW5nKSkKKwkJCW5ld19kZXB0aF9tYXNrICY9IH4oMSA8PCAoZGVwdGggLSAxKSk7CisKKwkJLyoKKwkJICogQnV0IHdlIGtlZXAgdGhlIG9sZGVyIGRlcHRoIG1hc2sgZm9yIHRoZSBsaW5lIHNlcGVyYXRvcgorCQkgKiB0byBrZWVwIHRoZSBsZXZlbCBsaW5rIHVudGlsIHdlIHJlYWNoIHRoZSBsYXN0IGNoaWxkCisJCSAqLworCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaF9saW5lKGZwLCBkZXB0aCwgZGVwdGhfbWFzaywKKwkJCQkJCSAgIGxlZnRfbWFyZ2luKTsKKwkJaSA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZjaGlsZC0+dmFsLCBsaXN0KSB7CisJCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCisJCQkJY29udGludWU7CisJCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hhaW4sIGRlcHRoLAorCQkJCQkJICAgICAgbmV3X2RlcHRoX21hc2ssIGkrKywKKwkJCQkJCSAgICAgIG5ld190b3RhbCwKKwkJCQkJCSAgICAgIGN1bXVsLAorCQkJCQkJICAgICAgbGVmdF9tYXJnaW4pOworCQl9CisJCXJldCArPSBfX2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgY2hpbGQsIG5ld190b3RhbCwKKwkJCQkJCSAgZGVwdGggKyAxLAorCQkJCQkJICBuZXdfZGVwdGhfbWFzayB8ICgxIDw8IGRlcHRoKSwKKwkJCQkJCSAgbGVmdF9tYXJnaW4pOworCQlub2RlID0gbmV4dDsKKwl9CisKKwlpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgPT0gQ0hBSU5fR1JBUEhfUkVMICYmCisJCXJlbWFpbmluZyAmJiByZW1haW5pbmcgIT0gbmV3X3RvdGFsKSB7CisKKwkJaWYgKCFyZW1fc3FfYnJhY2tldCkKKwkJCXJldHVybiByZXQ7CisKKwkJbmV3X2RlcHRoX21hc2sgJj0gfigxIDw8IChkZXB0aCAtIDEpKTsKKworCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaChmcCwgJnJlbV9oaXRzLCBkZXB0aCwKKwkJCQkJICAgICAgbmV3X2RlcHRoX21hc2ssIDAsIG5ld190b3RhbCwKKwkJCQkJICAgICAgcmVtYWluaW5nLCBsZWZ0X21hcmdpbik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdCBjYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZiwKKwkJCQkgICAgICAgdTY0IHRvdGFsX3NhbXBsZXMsIGludCBsZWZ0X21hcmdpbikKK3sKKwlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCWJvb2wgcHJpbnRlZCA9IGZhbHNlOworCWludCBpID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZzZWxmLT52YWwsIGxpc3QpIHsKKwkJaWYgKGNoYWluLT5pcCA+PSBQRVJGX0NPTlRFWFRfTUFYKQorCQkJY29udGludWU7CisKKwkJaWYgKCFpKysgJiYgc29ydF9fZmlyc3RfZGltZW5zaW9uID09IFNPUlRfU1lNKQorCQkJY29udGludWU7CisKKwkJaWYgKCFwcmludGVkKSB7CisJCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CisJCQlyZXQgKz0gZnByaW50ZihmcCwgInxcbiIpOworCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOworCQkJcmV0ICs9IGZwcmludGYoZnAsICItLS0iKTsKKworCQkJbGVmdF9tYXJnaW4gKz0gMzsKKwkJCXByaW50ZWQgPSB0cnVlOworCQl9IGVsc2UKKwkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKKworCQlpZiAoY2hhaW4tPnN5bSkKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiICVzXG4iLCBjaGFpbi0+c3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJcmV0ICs9IGZwcmludGYoZnAsICIgJXBcbiIsICh2b2lkICopKGxvbmcpY2hhaW4tPmlwKTsKKwl9CisKKwlyZXQgKz0gX19jYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIHNlbGYsIHRvdGFsX3NhbXBsZXMsIDEsIDEsIGxlZnRfbWFyZ2luKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzaXplX3QgY2FsbGNoYWluX19mcHJpbnRmX2ZsYXQoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZiwKKwkJCQkgICAgICB1NjQgdG90YWxfc2FtcGxlcykKK3sKKwlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCXNpemVfdCByZXQgPSAwOworCisJaWYgKCFzZWxmKQorCQlyZXR1cm4gMDsKKworCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZmxhdChmcCwgc2VsZi0+cGFyZW50LCB0b3RhbF9zYW1wbGVzKTsKKworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJnNlbGYtPnZhbCwgbGlzdCkgeworCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCisJCQljb250aW51ZTsKKwkJaWYgKGNoYWluLT5zeW0pCisJCQlyZXQgKz0gZnByaW50ZihmcCwgIiAgICAgICAgICAgICAgICAlc1xuIiwgY2hhaW4tPnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICVwXG4iLAorCQkJCQkodm9pZCAqKShsb25nKWNoYWluLT5pcCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdCBoaXN0X2VudHJ5X2NhbGxjaGFpbl9fZnByaW50ZihGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsCisJCQkJCSAgICB1NjQgdG90YWxfc2FtcGxlcywgaW50IGxlZnRfbWFyZ2luKQoreworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hhaW47CisJc2l6ZV90IHJldCA9IDA7CisKKwlyYl9ub2RlID0gcmJfZmlyc3QoJnNlbGYtPnNvcnRlZF9jaGFpbik7CisJd2hpbGUgKHJiX25vZGUpIHsKKwkJZG91YmxlIHBlcmNlbnQ7CisKKwkJY2hhaW4gPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOworCQlwZXJjZW50ID0gY2hhaW4tPmhpdCAqIDEwMC4wIC8gdG90YWxfc2FtcGxlczsKKwkJc3dpdGNoIChjYWxsY2hhaW5fcGFyYW0ubW9kZSkgeworCQljYXNlIENIQUlOX0ZMQVQ6CisJCQlyZXQgKz0gcGVyY2VudF9jb2xvcl9mcHJpbnRmKGZwLCAiICAgICAgICAgICAlNi4yZiUlXG4iLAorCQkJCQkJICAgICBwZXJjZW50KTsKKwkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZmxhdChmcCwgY2hhaW4sIHRvdGFsX3NhbXBsZXMpOworCQkJYnJlYWs7CisJCWNhc2UgQ0hBSU5fR1JBUEhfQUJTOiAvKiBGYWxsZG93biAqLworCQljYXNlIENIQUlOX0dSQVBIX1JFTDoKKwkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoYWluLCB0b3RhbF9zYW1wbGVzLAorCQkJCQkJCWxlZnRfbWFyZ2luKTsKKwkJY2FzZSBDSEFJTl9OT05FOgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJcmV0ICs9IGZwcmludGYoZnAsICJcbiIpOworCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90IGhpc3RfZW50cnlfX2ZwcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsCisJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGFpcl9zZXNzaW9uLAorCQkJCSAgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwKKwkJCQkgIGxvbmcgZGlzcGxhY2VtZW50LCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7CisJdTY0IGNvdW50LCB0b3RhbDsKKwljb25zdCBjaGFyICpzZXAgPSBzeW1ib2xfY29uZi5maWVsZF9zZXA7CisJc2l6ZV90IHJldDsKKworCWlmIChzeW1ib2xfY29uZi5leGNsdWRlX290aGVyICYmICFzZWxmLT5wYXJlbnQpCisJCXJldHVybiAwOworCisJaWYgKHBhaXJfc2Vzc2lvbikgeworCQljb3VudCA9IHNlbGYtPnBhaXIgPyBzZWxmLT5wYWlyLT5jb3VudCA6IDA7CisJCXRvdGFsID0gcGFpcl9zZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWw7CisJfSBlbHNlIHsKKwkJY291bnQgPSBzZWxmLT5jb3VudDsKKwkJdG90YWwgPSBzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWw7CisJfQorCisJaWYgKHRvdGFsKQorCQlyZXQgPSBwZXJjZW50X2NvbG9yX2ZwcmludGYoZnAsIHNlcCA/ICIlLjJmIiA6ICIgICAlNi4yZiUlIiwKKwkJCQkJICAgIChjb3VudCAqIDEwMC4wKSAvIHRvdGFsKTsKKwllbHNlCisJCXJldCA9IGZwcmludGYoZnAsIHNlcCA/ICIlbGxkIiA6ICIlMTJsbGQgIiwgY291bnQpOworCisJaWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcykgeworCQlpZiAoc2VwKQorCQkJZnByaW50ZihmcCwgIiVjJWxsZCIsICpzZXAsIGNvdW50KTsKKwkJZWxzZQorCQkJZnByaW50ZihmcCwgIiUxMWxsZCIsIGNvdW50KTsKKwl9CisKKwlpZiAocGFpcl9zZXNzaW9uKSB7CisJCWNoYXIgYmZbMzJdOworCQlkb3VibGUgb2xkX3BlcmNlbnQgPSAwLCBuZXdfcGVyY2VudCA9IDAsIGRpZmY7CisKKwkJaWYgKHRvdGFsID4gMCkKKwkJCW9sZF9wZXJjZW50ID0gKGNvdW50ICogMTAwLjApIC8gdG90YWw7CisJCWlmIChzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWwgPiAwKQorCQkJbmV3X3BlcmNlbnQgPSAoc2VsZi0+Y291bnQgKiAxMDAuMCkgLyBzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWw7CisKKwkJZGlmZiA9IG5ld19wZXJjZW50IC0gb2xkX3BlcmNlbnQ7CisKKwkJaWYgKGZhYnMoZGlmZikgPj0gMC4wMSkKKwkJCXNucHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiJSs0LjJGJSUiLCBkaWZmKTsKKwkJZWxzZQorCQkJc25wcmludGYoYmYsIHNpemVvZihiZiksICIgIik7CisKKwkJaWYgKHNlcCkKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiJWMlcyIsICpzZXAsIGJmKTsKKwkJZWxzZQorCQkJcmV0ICs9IGZwcmludGYoZnAsICIlMTEuMTFzIiwgYmYpOworCisJCWlmIChzaG93X2Rpc3BsYWNlbWVudCkgeworCQkJaWYgKGRpc3BsYWNlbWVudCkKKwkJCQlzbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiUrNGxkIiwgZGlzcGxhY2VtZW50KTsKKwkJCWVsc2UKKwkJCQlzbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIiAiKTsKKworCQkJaWYgKHNlcCkKKwkJCQlmcHJpbnRmKGZwLCAiJWMlcyIsICpzZXAsIGJmKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKGZwLCAiJTYuNnMiLCBiZik7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7CisJCWlmIChzZS0+ZWxpZGUpCisJCQljb250aW51ZTsKKworCQlmcHJpbnRmKGZwLCAiJXMiLCBzZXAgPzogIiAgIik7CisJCXJldCArPSBzZS0+cHJpbnQoZnAsIHNlbGYsIHNlLT53aWR0aCA/ICpzZS0+d2lkdGggOiAwKTsKKwl9CisKKwlyZXQgKz0gZnByaW50ZihmcCwgIlxuIik7CisKKwlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgeworCQlpbnQgbGVmdF9tYXJnaW4gPSAwOworCisJCWlmIChzb3J0X19maXJzdF9kaW1lbnNpb24gPT0gU09SVF9DT01NKSB7CisJCQlzZSA9IGxpc3RfZmlyc3RfZW50cnkoJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgdHlwZW9mKCpzZSksCisJCQkJCQlsaXN0KTsKKwkJCWxlZnRfbWFyZ2luID0gc2UtPndpZHRoID8gKnNlLT53aWR0aCA6IDA7CisJCQlsZWZ0X21hcmdpbiAtPSB0aHJlYWRfX2NvbW1fbGVuKHNlbGYtPnRocmVhZCk7CisJCX0KKworCQloaXN0X2VudHJ5X2NhbGxjaGFpbl9fZnByaW50ZihmcCwgc2VsZiwgc2Vzc2lvbi0+ZXZlbnRzX3N0YXRzLnRvdGFsLAorCQkJCQkgICAgICBsZWZ0X21hcmdpbik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc2l6ZV90IHBlcmZfc2Vzc2lvbl9fZnByaW50Zl9oaXN0cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnBhaXIsCisJCQkJICAgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwgRklMRSAqZnApCit7CisJc3RydWN0IHNvcnRfZW50cnkgKnNlOworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlzaXplX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBvc2l0aW9uID0gMTsKKwlsb25nIGRpc3BsYWNlbWVudCA9IDA7CisJdW5zaWduZWQgaW50IHdpZHRoOworCWNvbnN0IGNoYXIgKnNlcCA9IHN5bWJvbF9jb25mLmZpZWxkX3NlcDsKKwljaGFyICpjb2xfd2lkdGggPSBzeW1ib2xfY29uZi5jb2xfd2lkdGhfbGlzdF9zdHI7CisKKwlpbml0X3JlbV9oaXRzKCk7CisKKwlmcHJpbnRmKGZwLCAiIyAlcyIsIHBhaXIgPyAiQmFzZWxpbmUiIDogIk92ZXJoZWFkIik7CisKKwlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzKSB7CisJCWlmIChzZXApCisJCQlmcHJpbnRmKGZwLCAiJWNTYW1wbGVzIiwgKnNlcCk7CisJCWVsc2UKKwkJCWZwdXRzKCIgIFNhbXBsZXMgICIsIGZwKTsKKwl9CisKKwlpZiAocGFpcikgeworCQlpZiAoc2VwKQorCQkJcmV0ICs9IGZwcmludGYoZnAsICIlY0RlbHRhIiwgKnNlcCk7CisJCWVsc2UKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiICBEZWx0YSAgICAiKTsKKworCQlpZiAoc2hvd19kaXNwbGFjZW1lbnQpIHsKKwkJCWlmIChzZXApCisJCQkJcmV0ICs9IGZwcmludGYoZnAsICIlY0Rpc3BsYWNlbWVudCIsICpzZXApOworCQkJZWxzZQorCQkJCXJldCArPSBmcHJpbnRmKGZwLCAiIERpc3BsIik7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7CisJCWlmIChzZS0+ZWxpZGUpCisJCQljb250aW51ZTsKKwkJaWYgKHNlcCkgeworCQkJZnByaW50ZihmcCwgIiVjJXMiLCAqc2VwLCBzZS0+aGVhZGVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXdpZHRoID0gc3RybGVuKHNlLT5oZWFkZXIpOworCQlpZiAoc2UtPndpZHRoKSB7CisJCQlpZiAoc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyKSB7CisJCQkJaWYgKGNvbF93aWR0aCkgeworCQkJCQkqc2UtPndpZHRoID0gYXRvaShjb2xfd2lkdGgpOworCQkJCQljb2xfd2lkdGggPSBzdHJjaHIoY29sX3dpZHRoLCAnLCcpOworCQkJCQlpZiAoY29sX3dpZHRoKQorCQkJCQkJKytjb2xfd2lkdGg7CisJCQkJfQorCQkJfQorCQkJd2lkdGggPSAqc2UtPndpZHRoID0gbWF4KCpzZS0+d2lkdGgsIHdpZHRoKTsKKwkJfQorCQlmcHJpbnRmKGZwLCAiICAlKnMiLCB3aWR0aCwgc2UtPmhlYWRlcik7CisJfQorCWZwcmludGYoZnAsICJcbiIpOworCisJaWYgKHNlcCkKKwkJZ290byBwcmludF9lbnRyaWVzOworCisJZnByaW50ZihmcCwgIiMgLi4uLi4uLi4iKTsKKwlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzKQorCQlmcHJpbnRmKGZwLCAiIC4uLi4uLi4uLi4iKTsKKwlpZiAocGFpcikgeworCQlmcHJpbnRmKGZwLCAiIC4uLi4uLi4uLi4iKTsKKwkJaWYgKHNob3dfZGlzcGxhY2VtZW50KQorCQkJZnByaW50ZihmcCwgIiAuLi4uLiIpOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7CisJCXVuc2lnbmVkIGludCBpOworCisJCWlmIChzZS0+ZWxpZGUpCisJCQljb250aW51ZTsKKworCQlmcHJpbnRmKGZwLCAiICAiKTsKKwkJaWYgKHNlLT53aWR0aCkKKwkJCXdpZHRoID0gKnNlLT53aWR0aDsKKwkJZWxzZQorCQkJd2lkdGggPSBzdHJsZW4oc2UtPmhlYWRlcik7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQorCQkJZnByaW50ZihmcCwgIi4iKTsKKwl9CisKKwlmcHJpbnRmKGZwLCAiXG4jXG4iKTsKKworcHJpbnRfZW50cmllczoKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPmhpc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCisJCWlmIChzaG93X2Rpc3BsYWNlbWVudCkgeworCQkJaWYgKGgtPnBhaXIgIT0gTlVMTCkKKwkJCQlkaXNwbGFjZW1lbnQgPSAoKGxvbmcpaC0+cGFpci0+cG9zaXRpb24gLQorCQkJCQkgICAgICAgIChsb25nKXBvc2l0aW9uKTsKKwkJCWVsc2UKKwkJCQlkaXNwbGFjZW1lbnQgPSAwOworCQkJKytwb3NpdGlvbjsKKwkJfQorCQlyZXQgKz0gaGlzdF9lbnRyeV9fZnByaW50ZihoLCBzZWxmLCBwYWlyLCBzaG93X2Rpc3BsYWNlbWVudCwKKwkJCQkJICAgZGlzcGxhY2VtZW50LCBmcCk7CisJfQorCisJZnJlZShyZW1fc3FfYnJhY2tldCk7CisKKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKaW5kZXggMzAyMGRiMC4uZTVmOTliMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5oCkBAIC0xLDUwICsxLDI3IEBACiAjaWZuZGVmIF9fUEVSRl9ISVNUX0gKICNkZWZpbmUgX19QRVJGX0hJU1RfSAotI2luY2x1ZGUgIi4uL2J1aWx0aW4uaCIKIAotI2luY2x1ZGUgInV0aWwuaCIKLQotI2luY2x1ZGUgImNvbG9yLmgiCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgImNhY2hlLmgiCi0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSAic3ltYm9sLmgiCi0jaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJjYWxsY2hhaW4uaCIKLSNpbmNsdWRlICJzdHJsaXN0LmgiCi0jaW5jbHVkZSAidmFsdWVzLmgiCiAKLSNpbmNsdWRlICIuLi9wZXJmLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJoZWFkZXIuaCIKLQotI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKLSNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIKLQotI2luY2x1ZGUgInRocmVhZC5oIgotI2luY2x1ZGUgInNvcnQuaCIKLQotZXh0ZXJuIHN0cnVjdCByYl9yb290IGhpc3Q7Ci1leHRlcm4gc3RydWN0IHJiX3Jvb3QgY29sbGFwc2VfaGlzdHM7Ci1leHRlcm4gc3RydWN0IHJiX3Jvb3Qgb3V0cHV0X2hpc3RzOwotZXh0ZXJuIGludCBjYWxsY2hhaW47CiBleHRlcm4gc3RydWN0IGNhbGxjaGFpbl9wYXJhbSBjYWxsY2hhaW5fcGFyYW07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX21tYXA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbF9jb21tOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfZm9yazsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX3Vua25vd247Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbF9sb3N0OwogCi1zdHJ1Y3QgaGlzdF9lbnRyeSAqX19oaXN0X2VudHJ5X19hZGQoc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAotCQkJCSAgICAgc3RydWN0IHN5bWJvbCAqcGFyZW50LAotCQkJCSAgICAgdTY0IGNvdW50LCBib29sICpoaXQpOworc3RydWN0IHBlcmZfc2Vzc2lvbjsKK3N0cnVjdCBoaXN0X2VudHJ5Oworc3RydWN0IGFkZHJfbG9jYXRpb247CitzdHJ1Y3Qgc3ltYm9sOworCitzdHJ1Y3QgaGlzdF9lbnRyeSAqX19wZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCQkgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCQkJCSAgc3RydWN0IHN5bWJvbCAqcGFyZW50LAorCQkJCQkJICB1NjQgY291bnQsIGJvb2wgKmhpdCk7CiBleHRlcm4gaW50NjRfdCBoaXN0X2VudHJ5X19jbXAoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CiBleHRlcm4gaW50NjRfdCBoaXN0X2VudHJ5X19jb2xsYXBzZShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKLWV4dGVybiB2b2lkIGhpc3RfZW50cnlfX2ZyZWUoc3RydWN0IGhpc3RfZW50cnkgKik7Ci1leHRlcm4gdm9pZCBjb2xsYXBzZV9faW5zZXJ0X2VudHJ5KHN0cnVjdCBoaXN0X2VudHJ5ICopOwotZXh0ZXJuIHZvaWQgY29sbGFwc2VfX3Jlc29ydCh2b2lkKTsKLWV4dGVybiB2b2lkIG91dHB1dF9faW5zZXJ0X2VudHJ5KHN0cnVjdCBoaXN0X2VudHJ5ICosIHU2NCk7Ci1leHRlcm4gdm9pZCBvdXRwdXRfX3Jlc29ydCh1NjQpOwordm9pZCBoaXN0X2VudHJ5X19mcmVlKHN0cnVjdCBoaXN0X2VudHJ5ICopOwogCit2b2lkIHBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCB1NjQgdG90YWxfc2FtcGxlcyk7Cit2b2lkIHBlcmZfc2Vzc2lvbl9fY29sbGFwc2VfcmVzb3J0KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpOworc2l6ZV90IHBlcmZfc2Vzc2lvbl9fZnByaW50Zl9oaXN0cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnBhaXIsCisJCQkJICAgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwgRklMRSAqZnApOwogI2VuZGlmCS8qIF9fUEVSRl9ISVNUX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCA2OWY5NGZlLi5jNGQ1NWEwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC0xMDQsNDMgKzEwNCw3MCBAQAogCiAjZGVmaW5lIERTT19fREVMRVRFRCAiKGRlbGV0ZWQpIgogCi1zdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sKHN0cnVjdCBtYXAgKnNlbGYsIHU2NCBhZGRyLAotCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgbWFwX19sb2FkKHN0cnVjdCBtYXAgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAoIWRzb19fbG9hZGVkKHNlbGYtPmRzbywgc2VsZi0+dHlwZSkpIHsKLQkJaW50IG5yID0gZHNvX19sb2FkKHNlbGYtPmRzbywgc2VsZiwgZmlsdGVyKTsKKwljb25zdCBjaGFyICpuYW1lID0gc2VsZi0+ZHNvLT5sb25nX25hbWU7CisJaW50IG5yOwogCi0JCWlmIChuciA8IDApIHsKLQkJCWlmIChzZWxmLT5kc28tPmhhc19idWlsZF9pZCkgewotCQkJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisJaWYgKGRzb19fbG9hZGVkKHNlbGYtPmRzbywgc2VsZi0+dHlwZSkpCisJCXJldHVybiAwOwogCi0JCQkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+ZHNvLT5idWlsZF9pZCwKLQkJCQkJCSAgc2l6ZW9mKHNlbGYtPmRzby0+YnVpbGRfaWQpLAotCQkJCQkJICBzYnVpbGRfaWQpOwotCQkJCXByX3dhcm5pbmcoIiVzIHdpdGggYnVpbGQgaWQgJXMgbm90IGZvdW5kIiwKLQkJCQkJICAgc2VsZi0+ZHNvLT5sb25nX25hbWUsIHNidWlsZF9pZCk7Ci0JCQl9IGVsc2UKLQkJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiAlcyIsCi0JCQkJCSAgIHNlbGYtPmRzby0+bG9uZ19uYW1lKTsKLQkJCXByX3dhcm5pbmcoIiwgY29udGludWluZyB3aXRob3V0IHN5bWJvbHNcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0gZWxzZSBpZiAobnIgPT0gMCkgewotCQkJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPmRzby0+bG9uZ19uYW1lOwotCQkJY29uc3Qgc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKLQkJCWNvbnN0IHNpemVfdCByZWFsX2xlbiA9IGxlbiAtIHNpemVvZihEU09fX0RFTEVURUQpOworCW5yID0gZHNvX19sb2FkKHNlbGYtPmRzbywgc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKTsKKwlpZiAobnIgPCAwKSB7CisJCWlmIChzZWxmLT5kc28tPmhhc19idWlsZF9pZCkgeworCQkJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKIAotCQkJaWYgKGxlbiA+IHNpemVvZihEU09fX0RFTEVURUQpICYmCi0JCQkgICAgc3RyY21wKG5hbWUgKyByZWFsX2xlbiArIDEsIERTT19fREVMRVRFRCkgPT0gMCkgewotCQkJCXByX3dhcm5pbmcoIiUuKnMgd2FzIHVwZGF0ZWQsIHJlc3RhcnQgdGhlIGxvbmcgcnVubmluZyBhcHBzIHRoYXQgdXNlIGl0IVxuIiwKLQkJCQkJICAgKGludClyZWFsX2xlbiwgbmFtZSk7Ci0JCQl9IGVsc2UgewotCQkJCXByX3dhcm5pbmcoIm5vIHN5bWJvbHMgZm91bmQgaW4gJXMsIG1heWJlIGluc3RhbGwgYSBkZWJ1ZyBwYWNrYWdlP1xuIiwgbmFtZSk7Ci0JCQl9Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmRzby0+YnVpbGRfaWQsCisJCQkJCSAgc2l6ZW9mKHNlbGYtPmRzby0+YnVpbGRfaWQpLAorCQkJCQkgIHNidWlsZF9pZCk7CisJCQlwcl93YXJuaW5nKCIlcyB3aXRoIGJ1aWxkIGlkICVzIG5vdCBmb3VuZCIsCisJCQkJICAgbmFtZSwgc2J1aWxkX2lkKTsKKwkJfSBlbHNlCisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiAlcyIsIG5hbWUpOworCisJCXByX3dhcm5pbmcoIiwgY29udGludWluZyB3aXRob3V0IHN5bWJvbHNcbiIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChuciA9PSAwKSB7CisJCWNvbnN0IHNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisJCWNvbnN0IHNpemVfdCByZWFsX2xlbiA9IGxlbiAtIHNpemVvZihEU09fX0RFTEVURUQpOworCisJCWlmIChsZW4gPiBzaXplb2YoRFNPX19ERUxFVEVEKSAmJgorCQkgICAgc3RyY21wKG5hbWUgKyByZWFsX2xlbiArIDEsIERTT19fREVMRVRFRCkgPT0gMCkgeworCQkJcHJfd2FybmluZygiJS4qcyB3YXMgdXBkYXRlZCwgcmVzdGFydCB0aGUgbG9uZyAiCisJCQkJICAgInJ1bm5pbmcgYXBwcyB0aGF0IHVzZSBpdCFcbiIsCisJCQkJICAgKGludClyZWFsX2xlbiwgbmFtZSk7CisJCX0gZWxzZSB7CisJCQlwcl93YXJuaW5nKCJubyBzeW1ib2xzIGZvdW5kIGluICVzLCBtYXliZSBpbnN0YWxsICIKKwkJCQkgICAiYSBkZWJ1ZyBwYWNrYWdlP1xuIiwgbmFtZSk7CiAJCX0KKworCQlyZXR1cm4gLTE7CiAJfQogCi0JcmV0dXJuIHNlbGYtPmRzby0+ZmluZF9zeW1ib2woc2VsZi0+ZHNvLCBzZWxmLT50eXBlLCBhZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCWlmIChtYXBfX2xvYWQoc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKSA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGRzb19fZmluZF9zeW1ib2woc2VsZi0+ZHNvLCBzZWxmLT50eXBlLCBhZGRyKTsKK30KKworc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBtYXAgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJaWYgKG1hcF9fbG9hZChzZWxmLCBzZXNzaW9uLCBmaWx0ZXIpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWRzb19fc29ydGVkX2J5X25hbWUoc2VsZi0+ZHNvLCBzZWxmLT50eXBlKSkKKwkJZHNvX19zb3J0X2J5X25hbWUoc2VsZi0+ZHNvLCBzZWxmLT50eXBlKTsKKworCXJldHVybiBkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc2VsZi0+ZHNvLCBzZWxmLT50eXBlLCBuYW1lKTsKIH0KIAogc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDllNWRiZDYuLmU1YmMwZmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQkJaWYgKGlkID09IGNvbmZpZykgewogCQkJCWNsb3NlZGlyKGV2dF9kaXIpOwogCQkJCWNsb3NlZGlyKHN5c19kaXIpOwotCQkJCXBhdGggPSB6YWxsb2Moc2l6ZW9mKHBhdGgpKTsKKwkJCQlwYXRoID0gemFsbG9jKHNpemVvZigqcGF0aCkpOwogCQkJCXBhdGgtPnN5c3RlbSA9IG1hbGxvYyhNQVhfRVZFTlRfTEVOR1RIKTsKIAkJCQlpZiAoIXBhdGgtPnN5c3RlbSkgewogCQkJCQlmcmVlKHBhdGgpOwpAQCAtNDY3LDcgKzQ2Nyw2IEBACiAJd2hpbGUgKChldnRfZW50ID0gcmVhZGRpcihldnRfZGlyKSkpIHsKIAkJY2hhciBldmVudF9vcHRbTUFYX0VWT1BUX0xFTiArIDFdOwogCQlpbnQgbGVuOwotCQl1bnNpZ25lZCBpbnQgcmVtID0gTUFYX0VWT1BUX0xFTjsKIAogCQlpZiAoIXN0cmNtcChldnRfZW50LT5kX25hbWUsICIuIikKIAkJICAgIHx8ICFzdHJjbXAoZXZ0X2VudC0+ZF9uYW1lLCAiLi4iKQpAQCAtNDc1LDIwICs0NzQsMTIgQEAKIAkJICAgIHx8ICFzdHJjbXAoZXZ0X2VudC0+ZF9uYW1lLCAiZmlsdGVyIikpCiAJCQljb250aW51ZTsKIAotCQlsZW4gPSBzbnByaW50ZihldmVudF9vcHQsIE1BWF9FVk9QVF9MRU4sICIlczolcyIsIHN5c19uYW1lLAotCQkJICAgICAgIGV2dF9lbnQtPmRfbmFtZSk7CisJCWxlbiA9IHNucHJpbnRmKGV2ZW50X29wdCwgTUFYX0VWT1BUX0xFTiwgIiVzOiVzJXMlcyIsIHN5c19uYW1lLAorCQkJICAgICAgIGV2dF9lbnQtPmRfbmFtZSwgZmxhZ3MgPyAiOiIgOiAiIiwKKwkJCSAgICAgICBmbGFncyA/OiAiIik7CiAJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIEVWVF9GQUlMRUQ7CiAKLQkJcmVtIC09IGxlbjsKLQkJaWYgKGZsYWdzKSB7Ci0JCQlpZiAocmVtIDwgc3RybGVuKGZsYWdzKSArIDEpCi0JCQkJcmV0dXJuIEVWVF9GQUlMRUQ7Ci0KLQkJCXN0cmNhdChldmVudF9vcHQsICI6Iik7Ci0JCQlzdHJjYXQoZXZlbnRfb3B0LCBmbGFncyk7Ci0JCX0KLQogCQlpZiAocGFyc2VfZXZlbnRzKE5VTEwsIGV2ZW50X29wdCwgMCkpCiAJCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuYwppbmRleCA2ZDhhZjQ4Li5lZmViZDViIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKQEAgLTQzMCw2ICs0MzAsOSBAQAogCQlwb3MgPSBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKIAkJaWYgKG9wdHMtPnNob3J0X25hbWUpCiAJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICItJWMiLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJZWxzZQorCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiICAgICIpOworCiAJCWlmIChvcHRzLT5sb25nX25hbWUgJiYgb3B0cy0+c2hvcnRfbmFtZSkKIAkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiwgIik7CiAJCWlmIChvcHRzLT5sb25nX25hbWUpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IGNkN2ZiZGEuLjI5NDY1ZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC00OCw2ICs0OCw5IEBACiAKIC8qIElmIHRoZXJlIGlzIG5vIHNwYWNlIHRvIHdyaXRlLCByZXR1cm5zIC1FMkJJRy4gKi8KIHN0YXRpYyBpbnQgZV9zbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOworCitzdGF0aWMgaW50IGVfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAJaW50IHJldDsKIAl2YV9saXN0IGFwOwpAQCAtNTksNiArNjIsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLworc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghaXNhbHBoYSgqbmFtZSkgJiYgKm5hbWUgIT0gJ18nKQorCQlyZXR1cm4gZmFsc2U7CisJd2hpbGUgKCorK25hbWUgIT0gJ1wwJykgeworCQlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICFpc2RpZ2l0KCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCiAvKiBQYXJzZSBwcm9iZXBvaW50IGRlZmluaXRpb24uICovCiBzdGF0aWMgdm9pZCBwYXJzZV9wZXJmX3Byb2JlX3Byb2JlcG9pbnQoY2hhciAqYXJnLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewpAQCAtNjYsMTAgKzgxLDI2IEBACiAJY2hhciBjLCBuYyA9IDA7CiAJLyoKIAkgKiA8U3ludGF4PgotCSAqIHBlcmYgcHJvYmUgU1JDOkxOCi0JICogcGVyZiBwcm9iZSBGVU5DWytPRkZTfCVyZXR1cm5dW0BTUkNdCisJICogcGVyZiBwcm9iZSBbRVZFTlQ9XVNSQzpMTgorCSAqIHBlcmYgcHJvYmUgW0VWRU5UPV1GVU5DWytPRkZTfCVyZXR1cm5dW0BTUkNdCisJICoKKwkgKiBUT0RPOkdyb3VwIG5hbWUgc3VwcG9ydAogCSAqLwogCisJcHRyID0gc3RyY2hyKGFyZywgJz0nKTsKKwlpZiAocHRyKSB7CS8qIEV2ZW50IG5hbWUgKi8KKwkJKnB0ciA9ICdcMCc7CisJCXRtcCA9IHB0ciArIDE7CisJCXB0ciA9IHN0cmNocihhcmcsICc6Jyk7CisJCWlmIChwdHIpCS8qIEdyb3VwIG5hbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuICovCisJCQlzZW1hbnRpY19lcnJvcigiR3JvdXAgbmFtZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKKwkJaWYgKCFjaGVja19ldmVudF9uYW1lKGFyZykpCisJCQlzZW1hbnRpY19lcnJvcigiJXMgaXMgYmFkIGZvciBldmVudCBuYW1lIC1pdCBtdXN0ICIKKwkJCQkgICAgICAgImZvbGxvdyBDIHN5bWJvbC1uYW1pbmcgcnVsZS4iLCBhcmcpOworCQlwcC0+ZXZlbnQgPSBzdHJkdXAoYXJnKTsKKwkJYXJnID0gdG1wOworCX0KKwogCXB0ciA9IHN0cnBicmsoYXJnLCAiOitAJSIpOwogCWlmIChwdHIpIHsKIAkJbmMgPSAqcHRyOwpAQCAtMTQ3LDEwICsxNzgsMTMgQEAKIH0KIAogLyogUGFyc2UgcGVyZi1wcm9iZSBldmVudCBkZWZpbml0aW9uICovCi1pbnQgcGFyc2VfcGVyZl9wcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCit2b2lkIHBhcnNlX3BlcmZfcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwLAorCQkJICAgIGJvb2wgKm5lZWRfZHdhcmYpCiB7CiAJY2hhciAqKmFyZ3Y7Ci0JaW50IGFyZ2MsIGksIG5lZWRfZHdhcmYgPSAwOworCWludCBhcmdjLCBpOworCisJKm5lZWRfZHdhcmYgPSBmYWxzZTsKIAogCWFyZ3YgPSBhcmd2X3NwbGl0KHN0ciwgJmFyZ2MpOwogCWlmICghYXJndikKQEAgLTE2MSw3ICsxOTUsNyBAQAogCS8qIFBhcnNlIHByb2JlIHBvaW50ICovCiAJcGFyc2VfcGVyZl9wcm9iZV9wcm9iZXBvaW50KGFyZ3ZbMF0sIHBwKTsKIAlpZiAocHAtPmZpbGUgfHwgcHAtPmxpbmUpCi0JCW5lZWRfZHdhcmYgPSAxOworCQkqbmVlZF9kd2FyZiA9IHRydWU7CiAKIAkvKiBDb3B5IGFyZ3VtZW50cyBhbmQgZW5zdXJlIHJldHVybiBwcm9iZSBoYXMgbm8gQyBhcmd1bWVudCAqLwogCXBwLT5ucl9hcmdzID0gYXJnYyAtIDE7CkBAIC0xNzQsMTcgKzIwOCwxNSBAQAogCQkJaWYgKHBwLT5yZXRwcm9iZSkKIAkJCQlzZW1hbnRpY19lcnJvcigiWW91IGNhbid0IHNwZWNpZnkgbG9jYWwiCiAJCQkJCQkiIHZhcmlhYmxlIGZvciBrcmV0cHJvYmUiKTsKLQkJCW5lZWRfZHdhcmYgPSAxOworCQkJKm5lZWRfZHdhcmYgPSB0cnVlOwogCQl9CiAJfQogCiAJYXJndl9mcmVlKGFyZ3YpOwotCXJldHVybiBuZWVkX2R3YXJmOwogfQogCiAvKiBQYXJzZSBrcHJvYmVfZXZlbnRzIGV2ZW50IGludG8gc3RydWN0IHByb2JlX3BvaW50ICovCi12b2lkIHBhcnNlX3RyYWNlX2twcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipncm91cCwgY2hhciAqKmV2ZW50LAotCQkJICAgICAgc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3ZvaWQgcGFyc2VfdHJhY2Vfa3Byb2JlX2V2ZW50KGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHByb2JlX3BvaW50ICpwcCkKIHsKIAljaGFyIHByOwogCWNoYXIgKnA7CkBAIC0yMDAsMTggKzIzMiwxNyBAQAogCiAJLyogU2NhbiBldmVudCBhbmQgZ3JvdXAgbmFtZS4gKi8KIAlyZXQgPSBzc2NhbmYoYXJndlswXSwgIiVjOiVhW14vIFx0XS8lYVteIFx0XSIsCi0JCSAgICAgJnByLCAoZmxvYXQgKikodm9pZCAqKWdyb3VwLCAoZmxvYXQgKikodm9pZCAqKWV2ZW50KTsKKwkJICAgICAmcHIsIChmbG9hdCAqKSh2b2lkICopJnBwLT5ncm91cCwKKwkJICAgICAoZmxvYXQgKikodm9pZCAqKSZwcC0+ZXZlbnQpOwogCWlmIChyZXQgIT0gMykKIAkJc2VtYW50aWNfZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBldmVudCBuYW1lOiAlcyIsIGFyZ3ZbMF0pOwotCXByX2RlYnVnKCJHcm91cDolcyBFdmVudDolcyBwcm9iZTolY1xuIiwgKmdyb3VwLCAqZXZlbnQsIHByKTsKLQotCWlmICghcHApCi0JCWdvdG8gZW5kOworCXByX2RlYnVnKCJHcm91cDolcyBFdmVudDolcyBwcm9iZTolY1xuIiwgcHAtPmdyb3VwLCBwcC0+ZXZlbnQsIHByKTsKIAogCXBwLT5yZXRwcm9iZSA9IChwciA9PSAncicpOwogCiAJLyogU2NhbiBmdW5jdGlvbiBuYW1lIGFuZCBvZmZzZXQgKi8KLQlyZXQgPSBzc2NhbmYoYXJndlsxXSwgIiVhW14rXSslZCIsIChmbG9hdCAqKSh2b2lkICopJnBwLT5mdW5jdGlvbiwgJnBwLT5vZmZzZXQpOworCXJldCA9IHNzY2FuZihhcmd2WzFdLCAiJWFbXitdKyVkIiwgKGZsb2F0ICopKHZvaWQgKikmcHAtPmZ1bmN0aW9uLAorCQkgICAgICZwcC0+b2Zmc2V0KTsKIAlpZiAocmV0ID09IDEpCiAJCXBwLT5vZmZzZXQgPSAwOwogCkBAIC0yMzAsMTUgKzI2MSwxNSBAQAogCQkJZGllKCJGYWlsZWQgdG8gY29weSBhcmd1bWVudC4iKTsKIAl9CiAKLWVuZDoKIAlhcmd2X2ZyZWUoYXJndik7CiB9CiAKLWludCBzeW50aGVzaXplX3BlcmZfcHJvYmVfZXZlbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCkKKy8qIFN5bnRoZXNpemUgb25seSBwcm9iZSBwb2ludCAobm90IGFyZ3VtZW50KSAqLworaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQogewogCWNoYXIgKmJ1ZjsKIAljaGFyIG9mZnNbNjRdID0gIiIsIGxpbmVbNjRdID0gIiI7Ci0JaW50IGksIGxlbiwgcmV0OworCWludCByZXQ7CiAKIAlwcC0+cHJvYmVzWzBdID0gYnVmID0gemFsbG9jKE1BWF9DTURMRU4pOwogCWlmICghYnVmKQpAQCAtMjU4LDExICsyODksMjUgQEAKIAkJcmV0ID0gZV9zbnByaW50ZihidWYsIE1BWF9DTURMRU4sICIlcyVzJXMlcyIsIHBwLT5mdW5jdGlvbiwKIAkJCQkgb2ZmcywgcHAtPnJldHByb2JlID8gIiVyZXR1cm4iIDogIiIsIGxpbmUpOwogCWVsc2UKLQkJcmV0ID0gZV9zbnByaW50ZihidWYsIE1BWF9DTURMRU4sICIlcyVzJXMlcyIsIHBwLT5maWxlLCBsaW5lKTsKLQlpZiAocmV0IDw9IDApCi0JCWdvdG8gZXJyb3I7Ci0JbGVuID0gcmV0OworCQlyZXQgPSBlX3NucHJpbnRmKGJ1ZiwgTUFYX0NNRExFTiwgIiVzJXMiLCBwcC0+ZmlsZSwgbGluZSk7CisJaWYgKHJldCA8PSAwKSB7CitlcnJvcjoKKwkJZnJlZShwcC0+cHJvYmVzWzBdKTsKKwkJcHAtPnByb2Jlc1swXSA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CiAKK2ludCBzeW50aGVzaXplX3BlcmZfcHJvYmVfZXZlbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3sKKwljaGFyICpidWY7CisJaW50IGksIGxlbiwgcmV0OworCisJbGVuID0gc3ludGhlc2l6ZV9wZXJmX3Byb2JlX3BvaW50KHBwKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlidWYgPSBwcC0+cHJvYmVzWzBdOwogCWZvciAoaSA9IDA7IGkgPCBwcC0+bnJfYXJnczsgaSsrKSB7CiAJCXJldCA9IGVfc25wcmludGYoJmJ1ZltsZW5dLCBNQVhfQ01ETEVOIC0gbGVuLCAiICVzIiwKIAkJCQkgcHAtPmFyZ3NbaV0pOwpAQCAtMjc1LDYgKzMyMCw3IEBACiAJcmV0dXJuIHBwLT5mb3VuZDsKIGVycm9yOgogCWZyZWUocHAtPnByb2Jlc1swXSk7CisJcHAtPnByb2Jlc1swXSA9IE5VTEw7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA0LDYgKzM1MCw3IEBACiAJcmV0dXJuIHBwLT5mb3VuZDsKIGVycm9yOgogCWZyZWUocHAtPnByb2Jlc1swXSk7CisJcHAtPnByb2Jlc1swXSA9IE5VTEw7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzYzLDYgKzQxMCwxMCBAQAogewogCWludCBpOwogCisJaWYgKHBwLT5ldmVudCkKKwkJZnJlZShwcC0+ZXZlbnQpOworCWlmIChwcC0+Z3JvdXApCisJCWZyZWUocHAtPmdyb3VwKTsKIAlpZiAocHAtPmZ1bmN0aW9uKQogCQlmcmVlKHBwLT5mdW5jdGlvbik7CiAJaWYgKHBwLT5maWxlKQpAQCAtMzczLDE1ICs0MjQsMzMgQEAKIAkJZnJlZShwcC0+YXJncyk7CiAJZm9yIChpID0gMDsgaSA8IHBwLT5mb3VuZDsgaSsrKQogCQlmcmVlKHBwLT5wcm9iZXNbaV0pOwotCW1lbXNldChwcCwgMCwgc2l6ZW9mKHBwKSk7CisJbWVtc2V0KHBwLCAwLCBzaXplb2YoKnBwKSk7Cit9CisKKy8qIFNob3cgYW4gZXZlbnQgKi8KK3N0YXRpYyB2b2lkIHNob3dfcGVyZl9wcm9iZV9ldmVudChjb25zdCBjaGFyICpldmVudCwgY29uc3QgY2hhciAqcGxhY2UsCisJCQkJICBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQoreworCWludCBpLCByZXQ7CisJY2hhciBidWZbMTI4XTsKKworCXJldCA9IGVfc25wcmludGYoYnVmLCAxMjgsICIlczolcyIsIHBwLT5ncm91cCwgZXZlbnQpOworCWlmIChyZXQgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBjb3B5IGV2ZW50OiAlcyIsIHN0cmVycm9yKC1yZXQpKTsKKwlwcmludGYoIiAgJS00MHMgKG9uICVzIiwgYnVmLCBwbGFjZSk7CisKKwlpZiAocHAtPm5yX2FyZ3MgPiAwKSB7CisJCXByaW50ZigiIHdpdGgiKTsKKwkJZm9yIChpID0gMDsgaSA8IHBwLT5ucl9hcmdzOyBpKyspCisJCQlwcmludGYoIiAlcyIsIHBwLT5hcmdzW2ldKTsKKwl9CisJcHJpbnRmKCIpXG4iKTsKIH0KIAogLyogTGlzdCB1cCBjdXJyZW50IHBlcmYtcHJvYmUgZXZlbnRzICovCiB2b2lkIHNob3dfcGVyZl9wcm9iZV9ldmVudHModm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZmQ7Ci0JY2hhciAqZ3JvdXAsICpldmVudDsKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHA7CiAJc3RydWN0IHN0cmxpc3QgKnJhd2xpc3Q7CiAJc3RydWN0IHN0cl9ub2RlICplbnQ7CkBAIC0zOTAsMTMgKzQ1OSwxMiBAQAogCXJhd2xpc3QgPSBnZXRfdHJhY2Vfa3Byb2JlX2V2ZW50X3Jhd2xpc3QoZmQpOwogCWNsb3NlKGZkKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzdHJsaXN0X19ucl9lbnRyaWVzKHJhd2xpc3QpOyBpKyspIHsKLQkJZW50ID0gc3RybGlzdF9fZW50cnkocmF3bGlzdCwgaSk7Ci0JCXBhcnNlX3RyYWNlX2twcm9iZV9ldmVudChlbnQtPnMsICZncm91cCwgJmV2ZW50LCAmcHApOwotCQlzeW50aGVzaXplX3BlcmZfcHJvYmVfZXZlbnQoJnBwKTsKLQkJcHJpbnRmKCJbJXM6JXNdXHQlc1xuIiwgZ3JvdXAsIGV2ZW50LCBwcC5wcm9iZXNbMF0pOwotCQlmcmVlKGdyb3VwKTsKLQkJZnJlZShldmVudCk7CisJc3RybGlzdF9fZm9yX2VhY2goZW50LCByYXdsaXN0KSB7CisJCXBhcnNlX3RyYWNlX2twcm9iZV9ldmVudChlbnQtPnMsICZwcCk7CisJCS8qIFN5bnRoZXNpemUgb25seSBldmVudCBwcm9iZSBwb2ludCAqLworCQlzeW50aGVzaXplX3BlcmZfcHJvYmVfcG9pbnQoJnBwKTsKKwkJLyogU2hvdyBhbiBldmVudCAqLworCQlzaG93X3BlcmZfcHJvYmVfZXZlbnQocHAuZXZlbnQsIHBwLnByb2Jlc1swXSwgJnBwKTsKIAkJY2xlYXJfcHJvYmVfcG9pbnQoJnBwKTsKIAl9CiAKQEAgLTQwNCwyMSArNDcyLDI3IEBACiB9CiAKIC8qIEdldCBjdXJyZW50IHBlcmYtcHJvYmUgZXZlbnQgbmFtZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3RybGlzdCAqZ2V0X3BlcmZfZXZlbnRfbmFtZXMoaW50IGZkKQorc3RhdGljIHN0cnVjdCBzdHJsaXN0ICpnZXRfcGVyZl9ldmVudF9uYW1lcyhpbnQgZmQsIGJvb2wgaW5jbHVkZV9ncm91cCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQljaGFyICpncm91cCwgKmV2ZW50OworCWNoYXIgYnVmWzEyOF07CiAJc3RydWN0IHN0cmxpc3QgKnNsLCAqcmF3bGlzdDsKIAlzdHJ1Y3Qgc3RyX25vZGUgKmVudDsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHA7CiAKKwltZW1zZXQoJnBwLCAwLCBzaXplb2YocHApKTsKIAlyYXdsaXN0ID0gZ2V0X3RyYWNlX2twcm9iZV9ldmVudF9yYXdsaXN0KGZkKTsKIAotCXNsID0gc3RybGlzdF9fbmV3KGZhbHNlLCBOVUxMKTsKLQlmb3IgKGkgPSAwOyBpIDwgc3RybGlzdF9fbnJfZW50cmllcyhyYXdsaXN0KTsgaSsrKSB7Ci0JCWVudCA9IHN0cmxpc3RfX2VudHJ5KHJhd2xpc3QsIGkpOwotCQlwYXJzZV90cmFjZV9rcHJvYmVfZXZlbnQoZW50LT5zLCAmZ3JvdXAsICZldmVudCwgTlVMTCk7Ci0JCXN0cmxpc3RfX2FkZChzbCwgZXZlbnQpOwotCQlmcmVlKGdyb3VwKTsKKwlzbCA9IHN0cmxpc3RfX25ldyh0cnVlLCBOVUxMKTsKKwlzdHJsaXN0X19mb3JfZWFjaChlbnQsIHJhd2xpc3QpIHsKKwkJcGFyc2VfdHJhY2Vfa3Byb2JlX2V2ZW50KGVudC0+cywgJnBwKTsKKwkJaWYgKGluY2x1ZGVfZ3JvdXApIHsKKwkJCWlmIChlX3NucHJpbnRmKGJ1ZiwgMTI4LCAiJXM6JXMiLCBwcC5ncm91cCwKKwkJCQkgICAgICAgcHAuZXZlbnQpIDwgMCkKKwkJCQlkaWUoIkZhaWxlZCB0byBjb3B5IGdyb3VwOmV2ZW50IG5hbWUuIik7CisJCQlzdHJsaXN0X19hZGQoc2wsIGJ1Zik7CisJCX0gZWxzZQorCQkJc3RybGlzdF9fYWRkKHNsLCBwcC5ldmVudCk7CisJCWNsZWFyX3Byb2JlX3BvaW50KCZwcCk7CiAJfQogCiAJc3RybGlzdF9fZGVsZXRlKHJhd2xpc3QpOwpAQCAtNDI2LDI0ICs1MDAsMzYgQEAKIAlyZXR1cm4gc2w7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfdHJhY2Vfa3Byb2JlX2V2ZW50KGludCBmZCwgY29uc3QgY2hhciAqYnVmKQorc3RhdGljIHZvaWQgd3JpdGVfdHJhY2Vfa3Byb2JlX2V2ZW50KGludCBmZCwgY29uc3QgY2hhciAqYnVmKQogewogCWludCByZXQ7CiAKKwlwcl9kZWJ1ZygiV3JpdGluZyBldmVudDogJXNcbiIsIGJ1Zik7CiAJcmV0ID0gd3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpOwogCWlmIChyZXQgPD0gMCkKLQkJZGllKCJGYWlsZWQgdG8gY3JlYXRlIGV2ZW50LiIpOwotCWVsc2UKLQkJcHJpbnRmKCJBZGRlZCBuZXcgZXZlbnQ6ICVzXG4iLCBidWYpOwotCi0JcmV0dXJuIHJldDsKKwkJZGllKCJGYWlsZWQgdG8gd3JpdGUgZXZlbnQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X25ld19ldmVudF9uYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqYmFzZSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RybGlzdCAqbmFtZWxpc3QpCisJCQkgICAgICAgc3RydWN0IHN0cmxpc3QgKm5hbWVsaXN0LCBib29sIGFsbG93X3N1ZmZpeCkKIHsKIAlpbnQgaSwgcmV0OwotCWZvciAoaSA9IDA7IGkgPCBNQVhfRVZFTlRfSU5ERVg7IGkrKykgeworCisJLyogVHJ5IG5vIHN1ZmZpeCAqLworCXJldCA9IGVfc25wcmludGYoYnVmLCBsZW4sICIlcyIsIGJhc2UpOworCWlmIChyZXQgPCAwKQorCQlkaWUoInNucHJpbnRmKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKC1yZXQpKTsKKwlpZiAoIXN0cmxpc3RfX2hhc19lbnRyeShuYW1lbGlzdCwgYnVmKSkKKwkJcmV0dXJuOworCisJaWYgKCFhbGxvd19zdWZmaXgpIHsKKwkJcHJfd2FybmluZygiRXJyb3I6IGV2ZW50IFwiJXNcIiBhbHJlYWR5IGV4aXN0cy4gIgorCQkJICAgIihVc2UgLWYgdG8gZm9yY2UgZHVwbGljYXRlcy4pXG4iLCBiYXNlKTsKKwkJZGllKCJDYW4ndCBhZGQgbmV3IGV2ZW50LiIpOworCX0KKworCS8qIFRyeSB0byBhZGQgc3VmZml4ICovCisJZm9yIChpID0gMTsgaSA8IE1BWF9FVkVOVF9JTkRFWDsgaSsrKSB7CiAJCXJldCA9IGVfc25wcmludGYoYnVmLCBsZW4sICIlc18lZCIsIGJhc2UsIGkpOwogCQlpZiAocmV0IDwgMCkKIAkJCWRpZSgic25wcmludGYoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoLXJldCkpOwpAQCAtNDU0LDMxICs1NDAsMTM4IEBACiAJCWRpZSgiVG9vIG1hbnkgZXZlbnRzIGFyZSBvbiB0aGUgc2FtZSBmdW5jdGlvbi4iKTsKIH0KIAotdm9pZCBhZGRfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzdHJ1Y3QgcHJvYmVfcG9pbnQgKnByb2JlcywgaW50IG5yX3Byb2JlcykKK3ZvaWQgYWRkX3RyYWNlX2twcm9iZV9ldmVudHMoc3RydWN0IHByb2JlX3BvaW50ICpwcm9iZXMsIGludCBucl9wcm9iZXMsCisJCQkgICAgIGJvb2wgZm9yY2VfYWRkKQogewogCWludCBpLCBqLCBmZDsKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwOwogCWNoYXIgYnVmW01BWF9DTURMRU5dOwogCWNoYXIgZXZlbnRbNjRdOwogCXN0cnVjdCBzdHJsaXN0ICpuYW1lbGlzdDsKKwlib29sIGFsbG93X3N1ZmZpeDsKIAogCWZkID0gb3Blbl9rcHJvYmVfZXZlbnRzKE9fUkRXUiwgT19BUFBFTkQpOwogCS8qIEdldCBjdXJyZW50IGV2ZW50IG5hbWVzICovCi0JbmFtZWxpc3QgPSBnZXRfcGVyZl9ldmVudF9uYW1lcyhmZCk7CisJbmFtZWxpc3QgPSBnZXRfcGVyZl9ldmVudF9uYW1lcyhmZCwgZmFsc2UpOwogCiAJZm9yIChqID0gMDsgaiA8IG5yX3Byb2JlczsgaisrKSB7CiAJCXBwID0gcHJvYmVzICsgajsKKwkJaWYgKCFwcC0+ZXZlbnQpCisJCQlwcC0+ZXZlbnQgPSBzdHJkdXAocHAtPmZ1bmN0aW9uKTsKKwkJaWYgKCFwcC0+Z3JvdXApCisJCQlwcC0+Z3JvdXAgPSBzdHJkdXAoUEVSRlBST0JFX0dST1VQKTsKKwkJRElFX0lGKCFwcC0+ZXZlbnQgfHwgIXBwLT5ncm91cCk7CisJCS8qIElmIGZvcmNlX2FkZCBpcyB0cnVlLCBzdWZmaXggc2VhcmNoIGlzIGFsbG93ZWQgKi8KKwkJYWxsb3dfc3VmZml4ID0gZm9yY2VfYWRkOwogCQlmb3IgKGkgPSAwOyBpIDwgcHAtPmZvdW5kOyBpKyspIHsKIAkJCS8qIEdldCBhbiB1bnVzZWQgbmV3IGV2ZW50IG5hbWUgKi8KLQkJCWdldF9uZXdfZXZlbnRfbmFtZShldmVudCwgNjQsIHBwLT5mdW5jdGlvbiwgbmFtZWxpc3QpOworCQkJZ2V0X25ld19ldmVudF9uYW1lKGV2ZW50LCA2NCwgcHAtPmV2ZW50LCBuYW1lbGlzdCwKKwkJCQkJICAgYWxsb3dfc3VmZml4KTsKIAkJCXNucHJpbnRmKGJ1ZiwgTUFYX0NNRExFTiwgIiVjOiVzLyVzICVzXG4iLAogCQkJCSBwcC0+cmV0cHJvYmUgPyAncicgOiAncCcsCi0JCQkJIFBFUkZQUk9CRV9HUk9VUCwgZXZlbnQsCisJCQkJIHBwLT5ncm91cCwgZXZlbnQsCiAJCQkJIHBwLT5wcm9iZXNbaV0pOwogCQkJd3JpdGVfdHJhY2Vfa3Byb2JlX2V2ZW50KGZkLCBidWYpOworCQkJcHJpbnRmKCJBZGRlZCBuZXcgZXZlbnQ6XG4iKTsKKwkJCS8qIEdldCB0aGUgZmlyc3QgcGFyYW1ldGVyIChwcm9iZS1wb2ludCkgKi8KKwkJCXNzY2FuZihwcC0+cHJvYmVzW2ldLCAiJXMiLCBidWYpOworCQkJc2hvd19wZXJmX3Byb2JlX2V2ZW50KGV2ZW50LCBidWYsIHBwKTsKIAkJCS8qIEFkZCBhZGRlZCBldmVudCBuYW1lIHRvIG5hbWVsaXN0ICovCiAJCQlzdHJsaXN0X19hZGQobmFtZWxpc3QsIGV2ZW50KTsKKwkJCS8qCisJCQkgKiBQcm9iZXMgYWZ0ZXIgdGhlIGZpcnN0IHByb2JlIHdoaWNoIGNvbWVzIGZyb20gc2FtZQorCQkJICogdXNlciBpbnB1dCBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gYWRkIHN1ZmZpeCwgYmVjYXVzZQorCQkJICogdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbCBhZGRyZXNzZXMgY29ycmVzcG9uZGluZyB0bworCQkJICogb25lIGNvZGUgbGluZS4KKwkJCSAqLworCQkJYWxsb3dfc3VmZml4ID0gdHJ1ZTsKIAkJfQogCX0KKwkvKiBTaG93IGhvdyB0byB1c2UgdGhlIGV2ZW50LiAqLworCXByaW50ZigiXG5Zb3UgY2FuIG5vdyB1c2UgaXQgb24gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6XG5cbiIpOworCXByaW50ZigiXHRwZXJmIHJlY29yZCAtZSAlczolcyAtYSBzbGVlcCAxXG5cbiIsIFBFUkZQUk9CRV9HUk9VUCwgZXZlbnQpOworCisJc3RybGlzdF9fZGVsZXRlKG5hbWVsaXN0KTsKIAljbG9zZShmZCk7CiB9CisKK3N0YXRpYyB2b2lkIF9fZGVsX3RyYWNlX2twcm9iZV9ldmVudChpbnQgZmQsIHN0cnVjdCBzdHJfbm9kZSAqZW50KQoreworCWNoYXIgKnA7CisJY2hhciBidWZbMTI4XTsKKworCS8qIENvbnZlcnQgZnJvbSBwZXJmLXByb2JlIGV2ZW50IHRvIHRyYWNlLWtwcm9iZSBldmVudCAqLworCWlmIChlX3NucHJpbnRmKGJ1ZiwgMTI4LCAiLTolcyIsIGVudC0+cykgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBjb3B5IGV2ZW50LiIpOworCXAgPSBzdHJjaHIoYnVmICsgMiwgJzonKTsKKwlpZiAoIXApCisJCWRpZSgiSW50ZXJuYWwgZXJyb3I6ICVzIHNob3VsZCBoYXZlICc6JyBidXQgbm90LiIsIGVudC0+cyk7CisJKnAgPSAnLyc7CisKKwl3cml0ZV90cmFjZV9rcHJvYmVfZXZlbnQoZmQsIGJ1Zik7CisJcHJpbnRmKCJSZW1vdmUgZXZlbnQ6ICVzXG4iLCBlbnQtPnMpOworfQorCitzdGF0aWMgdm9pZCBkZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGludCBmZCwgY29uc3QgY2hhciAqZ3JvdXAsCisJCQkJICAgY29uc3QgY2hhciAqZXZlbnQsIHN0cnVjdCBzdHJsaXN0ICpuYW1lbGlzdCkKK3sKKwljaGFyIGJ1ZlsxMjhdOworCXN0cnVjdCBzdHJfbm9kZSAqZW50LCAqbjsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKGVfc25wcmludGYoYnVmLCAxMjgsICIlczolcyIsIGdyb3VwLCBldmVudCkgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBjb3B5IGV2ZW50LiIpOworCisJaWYgKHN0cnBicmsoYnVmLCAiKj8iKSkgeyAvKiBHbG9iLWV4cCAqLworCQlzdHJsaXN0X19mb3JfZWFjaF9zYWZlKGVudCwgbiwgbmFtZWxpc3QpCisJCQlpZiAoc3RyZ2xvYm1hdGNoKGVudC0+cywgYnVmKSkgeworCQkJCWZvdW5kKys7CisJCQkJX19kZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGZkLCBlbnQpOworCQkJCXN0cmxpc3RfX3JlbW92ZShuYW1lbGlzdCwgZW50KTsKKwkJCX0KKwl9IGVsc2UgeworCQllbnQgPSBzdHJsaXN0X19maW5kKG5hbWVsaXN0LCBidWYpOworCQlpZiAoZW50KSB7CisJCQlmb3VuZCsrOworCQkJX19kZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGZkLCBlbnQpOworCQkJc3RybGlzdF9fcmVtb3ZlKG5hbWVsaXN0LCBlbnQpOworCQl9CisJfQorCWlmIChmb3VuZCA9PSAwKQorCQlwcl9pbmZvKCJJbmZvOiBldmVudCBcIiVzXCIgZG9lcyBub3QgZXhpc3QsIGNvdWxkIG5vdCByZW1vdmUgaXQuXG4iLCBidWYpOworfQorCit2b2lkIGRlbF90cmFjZV9rcHJvYmVfZXZlbnRzKHN0cnVjdCBzdHJsaXN0ICpkZWxsaXN0KQoreworCWludCBmZDsKKwljb25zdCBjaGFyICpncm91cCwgKmV2ZW50OworCWNoYXIgKnAsICpzdHI7CisJc3RydWN0IHN0cl9ub2RlICplbnQ7CisJc3RydWN0IHN0cmxpc3QgKm5hbWVsaXN0OworCisJZmQgPSBvcGVuX2twcm9iZV9ldmVudHMoT19SRFdSLCBPX0FQUEVORCk7CisJLyogR2V0IGN1cnJlbnQgZXZlbnQgbmFtZXMgKi8KKwluYW1lbGlzdCA9IGdldF9wZXJmX2V2ZW50X25hbWVzKGZkLCB0cnVlKTsKKworCXN0cmxpc3RfX2Zvcl9lYWNoKGVudCwgZGVsbGlzdCkgeworCQlzdHIgPSBzdHJkdXAoZW50LT5zKTsKKwkJaWYgKCFzdHIpCisJCQlkaWUoIkZhaWxlZCB0byBjb3B5IGV2ZW50LiIpOworCQlwcl9kZWJ1ZygiUGFyc2luZzogJXNcbiIsIHN0cik7CisJCXAgPSBzdHJjaHIoc3RyLCAnOicpOworCQlpZiAocCkgeworCQkJZ3JvdXAgPSBzdHI7CisJCQkqcCA9ICdcMCc7CisJCQlldmVudCA9IHAgKyAxOworCQl9IGVsc2UgeworCQkJZ3JvdXAgPSAiKiI7CisJCQlldmVudCA9IHN0cjsKKwkJfQorCQlwcl9kZWJ1ZygiR3JvdXA6ICVzLCBFdmVudDogJXNcbiIsIGdyb3VwLCBldmVudCk7CisJCWRlbF90cmFjZV9rcHJvYmVfZXZlbnQoZmQsIGdyb3VwLCBldmVudCwgbmFtZWxpc3QpOworCQlmcmVlKHN0cik7CisJfQorCXN0cmxpc3RfX2RlbGV0ZShuYW1lbGlzdCk7CisJY2xvc2UoZmQpOworfQorCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCmluZGV4IDBjNmZlNTYuLjdmMWQ0OTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCkBAIC0xLDE1ICsxLDE5IEBACiAjaWZuZGVmIF9QUk9CRV9FVkVOVF9ICiAjZGVmaW5lIF9QUk9CRV9FVkVOVF9ICiAKKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAicHJvYmUtZmluZGVyLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogCi1leHRlcm4gaW50IHBhcnNlX3BlcmZfcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKK2V4dGVybiB2b2lkIHBhcnNlX3BlcmZfcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwLAorCQkJCSAgIGJvb2wgKm5lZWRfZHdhcmYpOworZXh0ZXJuIGludCBzeW50aGVzaXplX3BlcmZfcHJvYmVfcG9pbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CiBleHRlcm4gaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9ldmVudChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKLWV4dGVybiB2b2lkIHBhcnNlX3RyYWNlX2twcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipncm91cCwKLQkJCQkgICAgIGNoYXIgKipldmVudCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CitleHRlcm4gdm9pZCBwYXJzZV90cmFjZV9rcHJvYmVfZXZlbnQoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKIGV4dGVybiBpbnQgc3ludGhlc2l6ZV90cmFjZV9rcHJvYmVfZXZlbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCk7Ci1leHRlcm4gdm9pZCBhZGRfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzdHJ1Y3QgcHJvYmVfcG9pbnQgKnByb2JlcywgaW50IG5yX3Byb2Jlcyk7CitleHRlcm4gdm9pZCBhZGRfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzdHJ1Y3QgcHJvYmVfcG9pbnQgKnByb2JlcywgaW50IG5yX3Byb2JlcywKKwkJCQkgICAgYm9vbCBmb3JjZV9hZGQpOworZXh0ZXJuIHZvaWQgZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc3RydWN0IHN0cmxpc3QgKmRlbGxpc3QpOwogZXh0ZXJuIHZvaWQgc2hvd19wZXJmX3Byb2JlX2V2ZW50cyh2b2lkKTsKIAogLyogTWF4aW11bSBpbmRleCBudW1iZXIgb2YgZXZlbnQtbmFtZSBwb3N0Zml4ICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKaW5kZXggMjkzY2RmYy4uNGI4NTJjMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiB7CiAJaW50IGkxID0gc3RybGVuKHMxKTsKIAlpbnQgaTIgPSBzdHJsZW4oczIpOwotCXdoaWxlICgtLWkxID4gMCAmJiAtLWkyID4gMCkgeworCXdoaWxlICgtLWkxID49IDAgJiYgLS1pMiA+PSAwKSB7CiAJCWlmIChzMVtpMV0gIT0gczJbaTJdKQogCQkJcmV0dXJuIHMxW2kxXSAtIHMyW2kyXTsKIAl9CkBAIC02ODcsMTAgKzY4Nyw4IEBACiAJc3RydWN0IHByb2JlX2ZpbmRlciBwZiA9IHsucHAgPSBwcH07CiAKIAlyZXQgPSBkd2FyZl9pbml0KGZkLCBEV19ETENfUkVBRCwgMCwgMCwgJl9fZHdfZGVidWcsICZfX2R3X2Vycm9yKTsKLQlpZiAocmV0ICE9IERXX0RMVl9PSykgewotCQlwcl93YXJuaW5nKCJObyBkd2FyZiBpbmZvIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfREVCVUdfSU5GTy5cbiIpOworCWlmIChyZXQgIT0gRFdfRExWX09LKQogCQlyZXR1cm4gLUVOT0VOVDsKLQl9CiAKIAlwcC0+Zm91bmQgPSAwOwogCXdoaWxlICgrK2N1X251bWJlcikgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGJkZWJjYTYuLmE0MDg2YWFkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC0xLDkgKzEsOSBAQAogI2lmbmRlZiBfUFJPQkVfRklOREVSX0gKICNkZWZpbmUgX1BST0JFX0ZJTkRFUl9ICiAKLSNkZWZpbmUgTUFYX1BBVEhfTEVOIDI1NgotI2RlZmluZSBNQVhfUFJPQkVfQlVGRkVSIDEwMjQKLSNkZWZpbmUgTUFYX1BST0JFUyAxMjgKKyNkZWZpbmUgTUFYX1BBVEhfTEVOCQkgMjU2CisjZGVmaW5lIE1BWF9QUk9CRV9CVUZGRVIJMTAyNAorI2RlZmluZSBNQVhfUFJPQkVTCQkgMTI4CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2NfdmFybmFtZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMTIsNDUgKzEyLDUzIEBACiB9CiAKIHN0cnVjdCBwcm9iZV9wb2ludCB7CisJY2hhcgkJCSpldmVudDsJCQkvKiBFdmVudCBuYW1lICovCisJY2hhcgkJCSpncm91cDsJCQkvKiBFdmVudCBncm91cCAqLworCiAJLyogSW5wdXRzICovCi0JY2hhcgkqZmlsZTsJCS8qIEZpbGUgbmFtZSAqLwotCWludAlsaW5lOwkJLyogTGluZSBudW1iZXIgKi8KKwljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCisJaW50CQkJbGluZTsJCQkvKiBMaW5lIG51bWJlciAqLwogCi0JY2hhcgkqZnVuY3Rpb247CS8qIEZ1bmN0aW9uIG5hbWUgKi8KLQlpbnQJb2Zmc2V0OwkJLyogT2Zmc2V0IGJ5dGVzICovCisJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwlpbnQJCQlvZmZzZXQ7CQkJLyogT2Zmc2V0IGJ5dGVzICovCiAKLQlpbnQJbnJfYXJnczsJLyogTnVtYmVyIG9mIGFyZ3VtZW50cyAqLwotCWNoYXIJKiphcmdzOwkJLyogQXJndW1lbnRzICovCisJaW50CQkJbnJfYXJnczsJCS8qIE51bWJlciBvZiBhcmd1bWVudHMgKi8KKwljaGFyCQkJKiphcmdzOwkJCS8qIEFyZ3VtZW50cyAqLwogCi0JaW50CXJldHByb2JlOwkvKiBSZXR1cm4gcHJvYmUgKi8KKwlpbnQJCQlyZXRwcm9iZTsJCS8qIFJldHVybiBwcm9iZSAqLwogCiAJLyogT3V0cHV0ICovCi0JaW50CWZvdW5kOwkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLwotCWNoYXIJKnByb2Jlc1tNQVhfUFJPQkVTXTsJLyogT3V0cHV0IGJ1ZmZlcnMgKHdpbGwgYmUgYWxsb2NhdGVkKSovCisJaW50CQkJZm91bmQ7CQkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLworCWNoYXIJCQkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KIH07CiAKICNpZm5kZWYgTk9fTElCRFdBUkYKIGV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CiAKLSNpbmNsdWRlIDxsaWJkd2FyZi9kd2FyZi5oPgotI2luY2x1ZGUgPGxpYmR3YXJmL2xpYmR3YXJmLmg+CisvKiBXb3JrYXJvdW5kIGZvciB1bmRlZmluZWQgX01JUFNfU1pMT05HIGJ1ZyBpbiBsaWJkd2FyZi5oOiAqLworI2lmbmRlZiBfTUlQU19TWkxPTkcKKyMgZGVmaW5lIF9NSVBTX1NaTE9ORwkJMAorI2VuZGlmCisKKyNpbmNsdWRlIDxkd2FyZi5oPgorI2luY2x1ZGUgPGxpYmR3YXJmLmg+CiAKIHN0cnVjdCBwcm9iZV9maW5kZXIgewotCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CS8qIFRhcmdldCBwcm9iZSBwb2ludCAqLworCXN0cnVjdCBwcm9iZV9wb2ludAkqcHA7CQkJLyogVGFyZ2V0IHByb2JlIHBvaW50ICovCiAKIAkvKiBGb3IgZnVuY3Rpb24gc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcglhZGRyOwkJLyogQWRkcmVzcyAqLwotCUR3YXJmX1Vuc2lnbmVkCWZubzsJCS8qIEZpbGUgbnVtYmVyICovCi0JRHdhcmZfVW5zaWduZWQJbG5vOwkJLyogTGluZSBudW1iZXIgKi8KLQlEd2FyZl9PZmYJaW5sX29mZnM7CS8qIElubGluZSBvZmZzZXQgKi8KLQlEd2FyZl9EaWUJY3VfZGllOwkJLyogQ3VycmVudCBDVSAqLworCUR3YXJmX0FkZHIJCWFkZHI7CQkJLyogQWRkcmVzcyAqLworCUR3YXJmX1Vuc2lnbmVkCQlmbm87CQkJLyogRmlsZSBudW1iZXIgKi8KKwlEd2FyZl9VbnNpZ25lZAkJbG5vOwkJCS8qIExpbmUgbnVtYmVyICovCisJRHdhcmZfT2ZmCQlpbmxfb2ZmczsJCS8qIElubGluZSBvZmZzZXQgKi8KKwlEd2FyZl9EaWUJCWN1X2RpZTsJCQkvKiBDdXJyZW50IENVICovCiAKIAkvKiBGb3IgdmFyaWFibGUgc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcgljdV9iYXNlOwkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLwotCUR3YXJmX0xvY2Rlc2MJZmJsb2M7CQkvKiBMb2NhdGlvbiBvZiBDdXJyZW50IEZyYW1lIEJhc2UgKi8KLQljb25zdCBjaGFyCSp2YXI7CQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KLQljaGFyCQkqYnVmOwkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCi0JaW50CQlsZW47CQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLworCUR3YXJmX0FkZHIJCWN1X2Jhc2U7CQkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLworCUR3YXJmX0xvY2Rlc2MJCWZibG9jOwkJCS8qIExvY2F0aW9uIG9mIEN1cnJlbnQgRnJhbWUgQmFzZSAqLworCWNvbnN0IGNoYXIJCSp2YXI7CQkJLyogQ3VycmVudCB2YXJpYWJsZSBuYW1lICovCisJY2hhcgkJCSpidWY7CQkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCisJaW50CQkJbGVuOwkJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCiB9OwogI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2E2YzgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC0wLDAgKzEsMTUwIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJzb3J0LmgiCisjaW5jbHVkZSAidXRpbC5oIgorCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fb3BlbihzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBzdGF0IGlucHV0X3N0YXQ7CisKKwlzZWxmLT5mZCA9IG9wZW4oc2VsZi0+ZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoc2VsZi0+ZmQgPCAwKSB7CisJCXByX2VycigiZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMiLCBzZWxmLT5maWxlbmFtZSk7CisJCWlmICghc3RyY21wKHNlbGYtPmZpbGVuYW1lLCAicGVyZi5kYXRhIikpCisJCQlwcl9lcnIoIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOworCQlwcl9lcnIoIlxuIik7CisJCXJldHVybiAtZXJybm87CisJfQorCisJaWYgKGZzdGF0KHNlbGYtPmZkLCAmaW5wdXRfc3RhdCkgPCAwKQorCQlnb3RvIG91dF9jbG9zZTsKKworCWlmICghZm9yY2UgJiYgaW5wdXRfc3RhdC5zdF91aWQgJiYgKGlucHV0X3N0YXQuc3RfdWlkICE9IGdldGV1aWQoKSkpIHsKKwkJcHJfZXJyKCJmaWxlICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdFxuIiwKKwkJICAgICAgIHNlbGYtPmZpbGVuYW1lKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJaWYgKCFpbnB1dF9zdGF0LnN0X3NpemUpIHsKKwkJcHJfaW5mbygiemVyby1zaXplZCBmaWxlICglcyksIG5vdGhpbmcgdG8gZG8hXG4iLAorCQkJc2VsZi0+ZmlsZW5hbWUpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlpZiAocGVyZl9oZWFkZXJfX3JlYWQoJnNlbGYtPmhlYWRlciwgc2VsZi0+ZmQpIDwgMCkgeworCQlwcl9lcnIoImluY29tcGF0aWJsZSBmaWxlIGZvcm1hdCIpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlzZWxmLT5zaXplID0gaW5wdXRfc3RhdC5zdF9zaXplOworCXJldHVybiAwOworCitvdXRfY2xvc2U6CisJY2xvc2Uoc2VsZi0+ZmQpOworCXNlbGYtPmZkID0gLTE7CisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwZXJmX3Nlc3Npb25fX25ldyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUsIGJvb2wgZm9yY2UpCit7CisJc2l6ZV90IGxlbiA9IGZpbGVuYW1lID8gc3RybGVuKGZpbGVuYW1lKSArIDEgOiAwOworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYgPSB6YWxsb2Moc2l6ZW9mKCpzZWxmKSArIGxlbik7CisKKwlpZiAoc2VsZiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWlmIChwZXJmX2hlYWRlcl9faW5pdCgmc2VsZi0+aGVhZGVyKSA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwltZW1jcHkoc2VsZi0+ZmlsZW5hbWUsIGZpbGVuYW1lLCBsZW4pOworCXNlbGYtPnRocmVhZHMgPSBSQl9ST09UOworCXNlbGYtPmxhc3RfbWF0Y2ggPSBOVUxMOworCXNlbGYtPm1tYXBfd2luZG93ID0gMzI7CisJc2VsZi0+Y3dkID0gTlVMTDsKKwlzZWxmLT5jd2RsZW4gPSAwOworCW1hcF9ncm91cHNfX2luaXQoJnNlbGYtPmttYXBzKTsKKworCWlmIChwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmKSA8IDApCisJCWdvdG8gb3V0X2RlbGV0ZTsKKworCWlmIChtb2RlID09IE9fUkRPTkxZICYmIHBlcmZfc2Vzc2lvbl9fb3BlbihzZWxmLCBmb3JjZSkgPCAwKQorCQlnb3RvIG91dF9kZWxldGU7CitvdXQ6CisJcmV0dXJuIHNlbGY7CitvdXRfZnJlZToKKwlmcmVlKHNlbGYpOworCXJldHVybiBOVUxMOworb3V0X2RlbGV0ZToKKwlwZXJmX3Nlc3Npb25fX2RlbGV0ZShzZWxmKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwZXJmX3Nlc3Npb25fX2RlbGV0ZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXBlcmZfaGVhZGVyX19leGl0KCZzZWxmLT5oZWFkZXIpOworCWNsb3NlKHNlbGYtPmZkKTsKKwlmcmVlKHNlbGYtPmN3ZCk7CisJZnJlZShzZWxmKTsKK30KKworc3RhdGljIGJvb2wgc3ltYm9sX19tYXRjaF9wYXJlbnRfcmVnZXgoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWlmIChzeW0tPm5hbWUgJiYgIXJlZ2V4ZWMoJnBhcmVudF9yZWdleCwgc3ltLT5uYW1lLCAwLCBOVUxMLCAwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN5bWJvbCAqKnBlcmZfc2Vzc2lvbl9fcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwKKwkJCQkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAorCQkJCQkJc3RydWN0IHN5bWJvbCAqKnBhcmVudCkKK3sKKwl1OCBjcHVtb2RlID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCXN0cnVjdCBzeW1ib2wgKipzeW1zID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7CisJCXN5bXMgPSBjYWxsb2MoY2hhaW4tPm5yLCBzaXplb2YoKnN5bXMpKTsKKwkJaWYgKCFzeW1zKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3ltYm9sc1xuIik7CisJCQlleGl0KC0xKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBjaGFpbi0+bnI7IGkrKykgeworCQl1NjQgaXAgPSBjaGFpbi0+aXBzW2ldOworCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKworCQlpZiAoaXAgPj0gUEVSRl9DT05URVhUX01BWCkgeworCQkJc3dpdGNoIChpcCkgeworCQkJY2FzZSBQRVJGX0NPTlRFWFRfSFY6CisJCQkJY3B1bW9kZSA9IFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsJYnJlYWs7CisJCQljYXNlIFBFUkZfQ09OVEVYVF9LRVJORUw6CisJCQkJY3B1bW9kZSA9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOwlicmVhazsKKwkJCWNhc2UgUEVSRl9DT05URVhUX1VTRVI6CisJCQkJY3B1bW9kZSA9IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIHNlbGYsIGNwdW1vZGUsCisJCQkJCSAgIE1BUF9fRlVOQ1RJT04sIGlwLCAmYWwsIE5VTEwpOworCQlpZiAoYWwuc3ltICE9IE5VTEwpIHsKKwkJCWlmIChzb3J0X19oYXNfcGFyZW50ICYmICEqcGFyZW50ICYmCisJCQkgICAgc3ltYm9sX19tYXRjaF9wYXJlbnRfcmVnZXgoYWwuc3ltKSkKKwkJCQkqcGFyZW50ID0gYWwuc3ltOworCQkJaWYgKCFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQorCQkJCWJyZWFrOworCQkJc3ltc1tpXSA9IGFsLnN5bTsKKwkJfQorCX0KKworCXJldHVybiBzeW1zOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaCBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlYWExYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfX1BFUkZfU0VTU0lPTl9ICisjZGVmaW5lIF9fUEVSRl9TRVNTSU9OX0gKKworI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAiaGVhZGVyLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgiCisKK3N0cnVjdCBpcF9jYWxsY2hhaW47CitzdHJ1Y3QgdGhyZWFkOworc3RydWN0IHN5bWJvbDsKKworc3RydWN0IHBlcmZfc2Vzc2lvbiB7CisJc3RydWN0IHBlcmZfaGVhZGVyCWhlYWRlcjsKKwl1bnNpZ25lZCBsb25nCQlzaXplOworCXVuc2lnbmVkIGxvbmcJCW1tYXBfd2luZG93OworCXN0cnVjdCBtYXBfZ3JvdXBzCWttYXBzOworCXN0cnVjdCByYl9yb290CQl0aHJlYWRzOworCXN0cnVjdCB0aHJlYWQJCSpsYXN0X21hdGNoOworCXN0cnVjdCBldmVudHNfc3RhdHMJZXZlbnRzX3N0YXRzOworCXVuc2lnbmVkIGxvbmcJCWV2ZW50X3RvdGFsW1BFUkZfUkVDT1JEX01BWF07CisJc3RydWN0IHJiX3Jvb3QJCWhpc3RzOworCXU2NAkJCXNhbXBsZV90eXBlOworCWludAkJCWZkOworCWludAkJCWN3ZGxlbjsKKwljaGFyCQkJKmN3ZDsKKwljaGFyIGZpbGVuYW1lWzBdOworfTsKKwordHlwZWRlZiBpbnQgKCpldmVudF9vcCkoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CisKK3N0cnVjdCBwZXJmX2V2ZW50X29wcyB7CisJZXZlbnRfb3AJcHJvY2Vzc19zYW1wbGVfZXZlbnQ7CisJZXZlbnRfb3AJcHJvY2Vzc19tbWFwX2V2ZW50OworCWV2ZW50X29wCXByb2Nlc3NfY29tbV9ldmVudDsKKwlldmVudF9vcAlwcm9jZXNzX2ZvcmtfZXZlbnQ7CisJZXZlbnRfb3AJcHJvY2Vzc19leGl0X2V2ZW50OworCWV2ZW50X29wCXByb2Nlc3NfbG9zdF9ldmVudDsKKwlldmVudF9vcAlwcm9jZXNzX3JlYWRfZXZlbnQ7CisJZXZlbnRfb3AJcHJvY2Vzc190aHJvdHRsZV9ldmVudDsKKwlldmVudF9vcAlwcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQ7CisJaW50CQkoKnNhbXBsZV90eXBlX2NoZWNrKShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKKwl1bnNpZ25lZCBsb25nCXRvdGFsX3Vua25vd247CisJYm9vbAkJZnVsbF9wYXRoczsKK307CisKK3N0cnVjdCBwZXJmX3Nlc3Npb24gKnBlcmZfc2Vzc2lvbl9fbmV3KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwgYm9vbCBmb3JjZSk7Cit2b2lkIHBlcmZfc2Vzc2lvbl9fZGVsZXRlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpOworCitpbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmV2ZW50X29wcyk7CisKK3N0cnVjdCBzeW1ib2wgKipwZXJmX3Nlc3Npb25fX3Jlc29sdmVfY2FsbGNoYWluKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkJCQlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwKKwkJCQkJCXN0cnVjdCBzeW1ib2wgKipwYXJlbnQpOworCitpbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IGZpbGVfc2l6ZSk7CisKKyNlbmRpZiAvKiBfX1BFUkZfU0VTU0lPTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5jIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwppbmRleCBiNDkwMzU0Li5jYjBmMzI3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc29ydC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKQEAgLTI4OCwzICsyODgsMjkgQEAKIAogCXJldHVybiAtRVNSQ0g7CiB9CisKK3ZvaWQgc2V0dXBfc29ydGluZyhjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cykKK3sKKwljaGFyICp0bXAsICp0b2ssICpzdHIgPSBzdHJkdXAoc29ydF9vcmRlcik7CisKKwlmb3IgKHRvayA9IHN0cnRva19yKHN0ciwgIiwgIiwgJnRtcCk7CisJCQl0b2s7IHRvayA9IHN0cnRva19yKE5VTEwsICIsICIsICZ0bXApKSB7CisJCWlmIChzb3J0X2RpbWVuc2lvbl9fYWRkKHRvaykgPCAwKSB7CisJCQllcnJvcigiVW5rbm93biAtLXNvcnQga2V5OiBgJXMnIiwgdG9rKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZXN0ciwgb3B0cyk7CisJCX0KKwl9CisKKwlmcmVlKHN0cik7Cit9CisKK3ZvaWQgc29ydF9lbnRyeV9fc2V0dXBfZWxpZGUoc3RydWN0IHNvcnRfZW50cnkgKnNlbGYsIHN0cnVjdCBzdHJsaXN0ICpsaXN0LAorCQkJICAgICBjb25zdCBjaGFyICpsaXN0X25hbWUsIEZJTEUgKmZwKQoreworCWlmIChsaXN0ICYmIHN0cmxpc3RfX25yX2VudHJpZXMobGlzdCkgPT0gMSkgeworCQlpZiAoZnAgIT0gTlVMTCkKKwkJCWZwcmludGYoZnAsICIjICVzOiAlc1xuIiwgbGlzdF9uYW1lLAorCQkJCXN0cmxpc3RfX2VudHJ5KGxpc3QsIDApLT5zKTsKKwkJc2VsZi0+ZWxpZGUgPSB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmggYi90b29scy9wZXJmL3V0aWwvc29ydC5oCmluZGV4IDMzM2U2NjQuLjc1M2Y5ZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuaApAQCAtNDksOSArNDksMTMgQEAKIAlzdHJ1Y3Qgc3ltYm9sCQkqc3ltOwogCXU2NAkJCWlwOwogCWNoYXIJCQlsZXZlbDsKLQlzdHJ1Y3Qgc3ltYm9sCQkqcGFyZW50OworCXN0cnVjdCBzeW1ib2wJICAqcGFyZW50OwogCXN0cnVjdCBjYWxsY2hhaW5fbm9kZQljYWxsY2hhaW47Ci0Jc3RydWN0IHJiX3Jvb3QJCXNvcnRlZF9jaGFpbjsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJICBwb3NpdGlvbjsKKwkJc3RydWN0IGhpc3RfZW50cnkgKnBhaXI7CisJCXN0cnVjdCByYl9yb290CSAgc29ydGVkX2NoYWluOworCX07CiB9OwogCiBlbnVtIHNvcnRfdHlwZSB7CkBAIC04MSw2ICs4NSw4IEBACiBleHRlcm4gc3RydWN0IHNvcnRfZW50cnkgc29ydF90aHJlYWQ7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBoaXN0X2VudHJ5X19zb3J0X2xpc3Q7CiAKK3ZvaWQgc2V0dXBfc29ydGluZyhjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cyk7CisKIGV4dGVybiBpbnQgcmVwc2VwX2ZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGV4dGVybiBzaXplX3Qgc29ydF9fdGhyZWFkX3ByaW50KEZJTEUgKiwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBzaXplX3Qgc29ydF9fY29tbV9wcmludChGSUxFICosIHN0cnVjdCBoaXN0X2VudHJ5ICosIHVuc2lnbmVkIGludCk7CkBAIC05NSw1ICsxMDEsNyBAQAogZXh0ZXJuIGludDY0X3Qgc29ydF9fcGFyZW50X2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIGV4dGVybiBzaXplX3Qgc29ydF9fcGFyZW50X3ByaW50KEZJTEUgKiwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICopOwordm9pZCBzb3J0X2VudHJ5X19zZXR1cF9lbGlkZShzdHJ1Y3Qgc29ydF9lbnRyeSAqc2VsZiwgc3RydWN0IHN0cmxpc3QgKmxpc3QsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpc3RfbmFtZSwgRklMRSAqZnApOwogCiAjZW5kaWYJLyogX19QRVJGX1NPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCmluZGV4IGYyNGE4Y2MuLjUzNTJkN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYworKysgYi90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKQEAgLTIyNiwzICsyMjYsMjggQEAKIAlhcmd2X2ZyZWUoYXJndik7CiAJcmV0dXJuIE5VTEw7CiB9CisKKy8qIEdsb2IgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nICovCitib29sIHN0cmdsb2JtYXRjaChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKwl3aGlsZSAoKnN0ciAmJiAqcGF0ICYmICpwYXQgIT0gJyonKSB7CisJCWlmICgqcGF0ID09ICc/JykgeworCQkJc3RyKys7CisJCQlwYXQrKzsKKwkJfSBlbHNlCisJCQlpZiAoKnN0cisrICE9ICpwYXQrKykKKwkJCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qIENoZWNrIHdpbGQgY2FyZCAqLworCWlmICgqcGF0ID09ICcqJykgeworCQl3aGlsZSAoKnBhdCA9PSAnKicpCisJCQlwYXQrKzsKKwkJaWYgKCEqcGF0KQkvKiBUYWlsIHdpbGQgY2FyZCBtYXRjaGVzIGFsbCAqLworCQkJcmV0dXJuIHRydWU7CisJCXdoaWxlICgqc3RyKQorCQkJaWYgKHN0cmdsb2JtYXRjaChzdHIrKywgcGF0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuICEqc3RyICYmICEqcGF0OworfQorCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmggYi90b29scy9wZXJmL3V0aWwvc3RyaW5nLmgKaW5kZXggYmZlY2VjMi4uMDJlZGU1OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX19QRVJGX1NUUklOR19IXwogI2RlZmluZSBfX1BFUkZfU1RSSU5HX0hfCiAKKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKIAogaW50IGhleDJ1NjQoY29uc3QgY2hhciAqcHRyLCB1NjQgKnZhbCk7CkBAIC04LDYgKzksNyBAQAogczY0IHBlcmZfYXRvbGwoY29uc3QgY2hhciAqc3RyKTsKIGNoYXIgKiphcmd2X3NwbGl0KGNvbnN0IGNoYXIgKnN0ciwgaW50ICphcmdjcCk7CiB2b2lkIGFyZ3ZfZnJlZShjaGFyICoqYXJndik7Citib29sIHN0cmdsb2JtYXRjaChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7CiAKICNkZWZpbmUgX1NUUih4KSAjeAogI2RlZmluZSBTVFIoeCkgX1NUUih4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N0cmxpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJsaXN0LmMKaW5kZXggN2FkMzgxNy4uNjc4M2EyMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0cmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvc3RybGlzdC5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlzdHJfbm9kZV9fZGVsZXRlKHNuLCBzZWxmLT5kdXBzdHIpOwogfQogCi1ib29sIHN0cmxpc3RfX2hhc19lbnRyeShzdHJ1Y3Qgc3RybGlzdCAqc2VsZiwgY29uc3QgY2hhciAqZW50cnkpCitzdHJ1Y3Qgc3RyX25vZGUgKnN0cmxpc3RfX2ZpbmQoc3RydWN0IHN0cmxpc3QgKnNlbGYsIGNvbnN0IGNoYXIgKmVudHJ5KQogewogCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzZWxmLT5lbnRyaWVzLnJiX25vZGU7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogCQllbHNlIGlmIChyYyA8IDApCiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCQllbHNlCi0JCQlyZXR1cm4gdHJ1ZTsKKwkJCXJldHVybiBzbjsKIAl9CiAKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgc3RybGlzdF9fcGFyc2VfbGlzdF9lbnRyeShzdHJ1Y3Qgc3RybGlzdCAqc2VsZiwgY29uc3QgY2hhciAqcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJsaXN0LmggYi90b29scy9wZXJmL3V0aWwvc3RybGlzdC5oCmluZGV4IGNiNDY1OTMuLjNiYTgzOTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJsaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmxpc3QuaApAQCAtMjMsNyArMjMsMTIgQEAKIGludCBzdHJsaXN0X19hZGQoc3RydWN0IHN0cmxpc3QgKnNlbGYsIGNvbnN0IGNoYXIgKnN0cik7CiAKIHN0cnVjdCBzdHJfbm9kZSAqc3RybGlzdF9fZW50cnkoY29uc3Qgc3RydWN0IHN0cmxpc3QgKnNlbGYsIHVuc2lnbmVkIGludCBpZHgpOwotYm9vbCBzdHJsaXN0X19oYXNfZW50cnkoc3RydWN0IHN0cmxpc3QgKnNlbGYsIGNvbnN0IGNoYXIgKmVudHJ5KTsKK3N0cnVjdCBzdHJfbm9kZSAqc3RybGlzdF9fZmluZChzdHJ1Y3Qgc3RybGlzdCAqc2VsZiwgY29uc3QgY2hhciAqZW50cnkpOworCitzdGF0aWMgaW5saW5lIGJvb2wgc3RybGlzdF9faGFzX2VudHJ5KHN0cnVjdCBzdHJsaXN0ICpzZWxmLCBjb25zdCBjaGFyICplbnRyeSkKK3sKKwlyZXR1cm4gc3RybGlzdF9fZmluZChzZWxmLCBlbnRyeSkgIT0gTlVMTDsKK30KIAogc3RhdGljIGlubGluZSBib29sIHN0cmxpc3RfX2VtcHR5KGNvbnN0IHN0cnVjdCBzdHJsaXN0ICpzZWxmKQogewpAQCAtMzUsNSArNDAsMzkgQEAKIAlyZXR1cm4gc2VsZi0+bnJfZW50cmllczsKIH0KIAorLyogRm9yIHN0cmxpc3QgaXRlcmF0aW9uICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdHJfbm9kZSAqc3RybGlzdF9fZmlyc3Qoc3RydWN0IHN0cmxpc3QgKnNlbGYpCit7CisJc3RydWN0IHJiX25vZGUgKnJuID0gcmJfZmlyc3QoJnNlbGYtPmVudHJpZXMpOworCXJldHVybiBybiA/IHJiX2VudHJ5KHJuLCBzdHJ1Y3Qgc3RyX25vZGUsIHJiX25vZGUpIDogTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN0cl9ub2RlICpzdHJsaXN0X19uZXh0KHN0cnVjdCBzdHJfbm9kZSAqc24pCit7CisJc3RydWN0IHJiX25vZGUgKnJuOworCWlmICghc24pCisJCXJldHVybiBOVUxMOworCXJuID0gcmJfbmV4dCgmc24tPnJiX25vZGUpOworCXJldHVybiBybiA/IHJiX2VudHJ5KHJuLCBzdHJ1Y3Qgc3RyX25vZGUsIHJiX25vZGUpIDogTlVMTDsKK30KKworLyoqCisgKiBzdHJsaXN0X2Zvcl9lYWNoICAgICAgLSBpdGVyYXRlIG92ZXIgYSBzdHJsaXN0CisgKiBAcG9zOgl0aGUgJnN0cnVjdCBzdHJfbm9kZSB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBzZWxmOgl0aGUgJnN0cnVjdCBzdHJsaXN0IGZvciBsb29wLgorICovCisjZGVmaW5lIHN0cmxpc3RfX2Zvcl9lYWNoKHBvcywgc2VsZikJXAorCWZvciAocG9zID0gc3RybGlzdF9fZmlyc3Qoc2VsZik7IHBvczsgcG9zID0gc3RybGlzdF9fbmV4dChwb3MpKQorCisvKioKKyAqIHN0cmxpc3RfZm9yX2VhY2hfc2FmZSAtIGl0ZXJhdGUgb3ZlciBhIHN0cmxpc3Qgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9ub2RlCisgKiBAcG9zOgl0aGUgJnN0cnVjdCBzdHJfbm9kZSB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBuOgkJYW5vdGhlciAmc3RydWN0IHN0cl9ub2RlIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KKyAqIEBzZWxmOgl0aGUgJnN0cnVjdCBzdHJsaXN0IGZvciBsb29wLgorICovCisjZGVmaW5lIHN0cmxpc3RfX2Zvcl9lYWNoX3NhZmUocG9zLCBuLCBzZWxmKQlcCisJZm9yIChwb3MgPSBzdHJsaXN0X19maXJzdChzZWxmKSwgbiA9IHN0cmxpc3RfX25leHQocG9zKTsgcG9zO1wKKwkgICAgIHBvcyA9IG4sIG4gPSBzdHJsaXN0X19uZXh0KG4pKQorCiBpbnQgc3RybGlzdF9fcGFyc2VfbGlzdChzdHJ1Y3Qgc3RybGlzdCAqc2VsZiwgY29uc3QgY2hhciAqcyk7CiAjZW5kaWYgLyogX19QRVJGX1NUUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGZmZmNiOTMuLmFiOTI3NjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTEsNSArMSw3IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgIi4uL3BlcmYuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAic29ydC5oIgogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgInRocmVhZC5oIgpAQCAtMjksMzMgKzMxLDUwIEBACiB9OwogCiBzdGF0aWMgdm9pZCBkc29zX19hZGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRzbyAqZHNvKTsKLXN0YXRpYyBzdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwX2J5X25hbWUoc3RydWN0IHRocmVhZCAqc2VsZiwgY2hhciAqbmFtZSk7CiBzdGF0aWMgc3RydWN0IG1hcCAqbWFwX19uZXcyKHU2NCBzdGFydCwgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwotc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKTsKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci11bnNpZ25lZCBpbnQgc3ltYm9sX19wcml2X3NpemU7CisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiBzdGF0aWMgaW50IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsKIHN0YXRpYyBjaGFyICoqdm1saW51eF9wYXRoOwogCi1zdGF0aWMgc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mX19kZWZhdWx0cyA9IHsKK3N0cnVjdCBzeW1ib2xfY29uZiBzeW1ib2xfY29uZiA9IHsKKwkuZXhjbHVkZV9vdGhlcgkgID0gdHJ1ZSwKIAkudXNlX21vZHVsZXMJICA9IHRydWUsCiAJLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlLAogfTsKIAotc3RhdGljIHN0cnVjdCB0aHJlYWQga3RocmVhZF9tZW07Ci1zdHJ1Y3QgdGhyZWFkICprdGhyZWFkID0gJmt0aHJlYWRfbWVtOwotCiBib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlyZXR1cm4gc2VsZi0+bG9hZGVkICYgKDEgPDwgdHlwZSk7CiB9CiAKK2Jvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJcmV0dXJuIHNlbGYtPnNvcnRlZF9ieV9uYW1lICYgKDEgPDwgdHlwZSk7Cit9CisKIHN0YXRpYyB2b2lkIGRzb19fc2V0X2xvYWRlZChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7CiAJc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOwogfQogCitzdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc2VsZi0+c29ydGVkX2J5X25hbWUgfD0gKDEgPDwgdHlwZSk7Cit9CisKK3N0YXRpYyBib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCit7CisJc3dpdGNoIChtYXBfdHlwZSkgeworCWNhc2UgTUFQX19GVU5DVElPTjoKKwkJcmV0dXJuIHN5bWJvbF90eXBlID09ICdUJyB8fCBzeW1ib2xfdHlwZSA9PSAnVyc7CisJY2FzZSBNQVBfX1ZBUklBQkxFOgorCQlyZXR1cm4gc3ltYm9sX3R5cGUgPT0gJ0QnIHx8IHN5bWJvbF90eXBlID09ICdkJzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCiBzdGF0aWMgdm9pZCBzeW1ib2xzX19maXh1cF9lbmQoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCiB7CiAJc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3Qoc2VsZik7CkBAIC03OSw3ICs5OCw3IEBACiAJCWN1cnItPmVuZCA9IHJvdW5kdXAoY3Vyci0+c3RhcnQsIDQwOTYpOwogfQogCi1zdGF0aWMgdm9pZCBfX3RocmVhZF9fZml4dXBfbWFwc19lbmQoc3RydWN0IHRocmVhZCAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKQorc3RhdGljIHZvaWQgX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgbWFwICpwcmV2LCAqY3VycjsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQsICpwcmV2bmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1t0eXBlXSk7CkBAIC0xMDIsMjMgKzEyMSwyMyBAQAogCWN1cnItPmVuZCA9IH4wVUw7CiB9CiAKLXN0YXRpYyB2b2lkIHRocmVhZF9fZml4dXBfbWFwc19lbmQoc3RydWN0IHRocmVhZCAqc2VsZikKK3N0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZpeHVwX2VuZChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQotCQlfX3RocmVhZF9fZml4dXBfbWFwc19lbmQoc2VsZiwgaSk7CisJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKHNlbGYsIGkpOwogfQogCiBzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXcodTY0IHN0YXJ0LCB1NjQgbGVuLCBjb25zdCBjaGFyICpuYW1lKQogewogCXNpemVfdCBuYW1lbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlzdHJ1Y3Qgc3ltYm9sICpzZWxmID0gemFsbG9jKHN5bWJvbF9fcHJpdl9zaXplICsKKwlzdHJ1Y3Qgc3ltYm9sICpzZWxmID0gemFsbG9jKHN5bWJvbF9jb25mLnByaXZfc2l6ZSArCiAJCQkJICAgICBzaXplb2YoKnNlbGYpICsgbmFtZWxlbik7CiAJaWYgKHNlbGYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoc3ltYm9sX19wcml2X3NpemUpCi0JCXNlbGYgPSAoKHZvaWQgKilzZWxmKSArIHN5bWJvbF9fcHJpdl9zaXplOworCWlmIChzeW1ib2xfY29uZi5wcml2X3NpemUpCisJCXNlbGYgPSAoKHZvaWQgKilzZWxmKSArIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIAogCXNlbGYtPnN0YXJ0ID0gc3RhcnQ7CiAJc2VsZi0+ZW5kICAgPSBsZW4gPyBzdGFydCArIGxlbiAtIDEgOiBzdGFydDsKQEAgLTEzMiw3ICsxNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewotCWZyZWUoKCh2b2lkICopc2VsZikgLSBzeW1ib2xfX3ByaXZfc2l6ZSk7CisJZnJlZSgoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZSk7CiB9CiAKIHN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQpAQCAtMTY0LDExICsxODMsMTEgQEAKIAkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHNlbGYtPm5hbWUpOwogCQlzZWxmLT5zaG9ydF9uYW1lID0gc2VsZi0+bmFtZTsKIAkJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKLQkJCXNlbGYtPnN5bWJvbHNbaV0gPSBSQl9ST09UOwotCQlzZWxmLT5maW5kX3N5bWJvbCA9IGRzb19fZmluZF9zeW1ib2w7CisJCQlzZWxmLT5zeW1ib2xzW2ldID0gc2VsZi0+c3ltYm9sX25hbWVzW2ldID0gUkJfUk9PVDsKIAkJc2VsZi0+c2xlbl9jYWxjdWxhdGVkID0gMDsKIAkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX05PVF9GT1VORDsKIAkJc2VsZi0+bG9hZGVkID0gMDsKKwkJc2VsZi0+c29ydGVkX2J5X25hbWUgPSAwOwogCQlzZWxmLT5oYXNfYnVpbGRfaWQgPSAwOwogCX0KIApAQCAtMjQ2LDExICsyNjUsODUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKQorc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgeworCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7CisJc3RydWN0IHN5bWJvbAlzeW07Cit9OworCitzdGF0aWMgdm9pZCBzeW1ib2xzX19pbnNlcnRfYnlfbmFtZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzZWxmLT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlICpzeW1uID0gKCh2b2lkICopc3ltKSAtIHNpemVvZigqcGFyZW50KSwgKnM7CisKKwl3aGlsZSAoKnAgIT0gTlVMTCkgeworCQlwYXJlbnQgPSAqcDsKKwkJcyA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUsIHJiX25vZGUpOworCQlpZiAoc3RyY21wKHN5bS0+bmFtZSwgcy0+c3ltLm5hbWUpIDwgMCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwl9CisJcmJfbGlua19ub2RlKCZzeW1uLT5yYl9ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmc3ltbi0+cmJfbm9kZSwgc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bWJvbHNfX3NvcnRfYnlfbmFtZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgc3RydWN0IHJiX3Jvb3QgKnNvdXJjZSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisKKwlmb3IgKG5kID0gcmJfZmlyc3Qoc291cmNlKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IHN5bWJvbCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOworCQlzeW1ib2xzX19pbnNlcnRfYnlfbmFtZShzZWxmLCBwb3MpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbHNfX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbjsKKworCWlmIChzZWxmID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbiA9IHNlbGYtPnJiX25vZGU7CisKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSAqczsKKwkJaW50IGNtcDsKKworCQlzID0gcmJfZW50cnkobiwgc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUsIHJiX25vZGUpOworCQljbXAgPSBzdHJjbXAobmFtZSwgcy0+c3ltLm5hbWUpOworCisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiAmcy0+c3ltOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsCisJCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcikKIHsKIAlyZXR1cm4gc3ltYm9sc19fZmluZCgmc2VsZi0+c3ltYm9sc1t0eXBlXSwgYWRkcik7CiB9CiAKK3N0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHN5bWJvbHNfX2ZpbmRfYnlfbmFtZSgmc2VsZi0+c3ltYm9sX25hbWVzW3R5cGVdLCBuYW1lKTsKK30KKwordm9pZCBkc29fX3NvcnRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJZHNvX19zZXRfc29ydGVkX2J5X25hbWUoc2VsZiwgdHlwZSk7CisJcmV0dXJuIHN5bWJvbHNfX3NvcnRfYnlfbmFtZSgmc2VsZi0+c3ltYm9sX25hbWVzW3R5cGVdLAorCQkJCSAgICAgJnNlbGYtPnN5bWJvbHNbdHlwZV0pOworfQorCiBpbnQgYnVpbGRfaWRfX3NwcmludGYodTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKQogewogCWNoYXIgKmJpZCA9IGJmOwpAQCAtMzI3LDEwICs0MjAsNyBAQAogCQkJY29udGludWU7CiAKIAkJc3ltYm9sX3R5cGUgPSB0b3VwcGVyKGxpbmVbbGVuXSk7Ci0JCS8qCi0JCSAqIFdlJ3JlIGludGVyZXN0ZWQgb25seSBpbiBjb2RlICgnVCdleHQpCi0JCSAqLwotCQlpZiAoc3ltYm9sX3R5cGUgIT0gJ1QnICYmIHN5bWJvbF90eXBlICE9ICdXJykKKwkJaWYgKCFzeW1ib2xfdHlwZV9faXNfYShzeW1ib2xfdHlwZSwgbWFwLT50eXBlKSkKIAkJCWNvbnRpbnVlOwogCiAJCXN5bWJvbF9uYW1lID0gbGluZSArIGxlbiArIDI7CkBAIC0zNjQsOCArNDU0LDggQEAKICAqIGtlcm5lbCByYW5nZSBpcyBicm9rZW4gaW4gc2V2ZXJhbCBtYXBzLCBuYW1lZCBba2VybmVsXS5OLCBhcyB3ZSBkb24ndCBoYXZlCiAgKiB0aGUgb3JpZ2luYWwgRUxGIHNlY3Rpb24gbmFtZXMgdm1saW51eCBoYXZlLgogICovCi1zdGF0aWMgaW50IGRzb19fc3BsaXRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCi0JCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3N0YXRpYyBpbnQgZHNvX19zcGxpdF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlzdHJ1Y3QgbWFwICpjdXJyX21hcCA9IG1hcDsKIAlzdHJ1Y3Qgc3ltYm9sICpwb3M7CkBAIC0zODIsMTMgKzQ3MiwxMyBAQAogCiAJCW1vZHVsZSA9IHN0cmNocihwb3MtPm5hbWUsICdcdCcpOwogCQlpZiAobW9kdWxlKSB7Ci0JCQlpZiAoIXRocmVhZC0+dXNlX21vZHVsZXMpCisJCQlpZiAoIXN5bWJvbF9jb25mLnVzZV9tb2R1bGVzKQogCQkJCWdvdG8gZGlzY2FyZF9zeW1ib2w7CiAKIAkJCSptb2R1bGUrKyA9ICdcMCc7CiAKIAkJCWlmIChzdHJjbXAoc2VsZi0+bmFtZSwgbW9kdWxlKSkgewotCQkJCWN1cnJfbWFwID0gdGhyZWFkX19maW5kX21hcF9ieV9uYW1lKHRocmVhZCwgbW9kdWxlKTsKKwkJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi0+a21hcHMsIG1hcC0+dHlwZSwgbW9kdWxlKTsKIAkJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCQlwcl9kZWJ1ZygiL3Byb2Mve2thbGxzeW1zLG1vZHVsZXN9ICIKIAkJCQkJICAgICAgICAgImluY29uc2lzdGVuY3khXG4iKTsKQEAgLTQxOSw3ICs1MDksNyBAQAogCQkJfQogCiAJCQljdXJyX21hcC0+bWFwX2lwID0gY3Vycl9tYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKLQkJCV9fdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgY3Vycl9tYXApOworCQkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZXNzaW9uLT5rbWFwcywgY3Vycl9tYXApOwogCQkJKytrZXJuZWxfcmFuZ2U7CiAJCX0KIApAQCAtNDQwLDcgKzUzMCw3IEBACiAKIAogc3RhdGljIGludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzZWxmLCBtYXApIDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtNDQ4LDE0ICs1MzgsNyBAQAogCXN5bWJvbHNfX2ZpeHVwX2VuZCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKIAlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwogCi0JcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCB0aHJlYWQsIGZpbHRlcik7Ci19Ci0KLXNpemVfdCBrZXJuZWxfbWFwc19fZnByaW50ZihGSUxFICpmcCkKLXsKLQlzaXplX3QgcHJpbnRlZCA9IGZwcmludGYoZnAsICJLZXJuZWwgbWFwczpcbiIpOwotCXByaW50ZWQgKz0gdGhyZWFkX19mcHJpbnRmX21hcHMoa3RocmVhZCwgZnApOwotCXJldHVybiBwcmludGVkICsgZnByaW50ZihmcCwgIkVORCBrZXJuZWwgbWFwc1xuIik7CisJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOwogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9wZXJmX21hcChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCkBAIC01NDQsNiArNjI3LDEzIEBACiAJICAgICAgIHN5bS0+c3Rfc2huZHggIT0gU0hOX1VOREVGOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgZWxmX3N5bV9faXNfb2JqZWN0KGNvbnN0IEdFbGZfU3ltICpzeW0pCit7CisJcmV0dXJuIGVsZl9zeW1fX3R5cGUoc3ltKSA9PSBTVFRfT0JKRUNUICYmCisJCXN5bS0+c3RfbmFtZSAhPSAwICYmCisJCXN5bS0+c3Rfc2huZHggIT0gU0hOX1VOREVGOworfQorCiBzdGF0aWMgaW5saW5lIGludCBlbGZfc3ltX19pc19sYWJlbChjb25zdCBHRWxmX1N5bSAqc3ltKQogewogCXJldHVybiBlbGZfc3ltX190eXBlKHN5bSkgPT0gU1RUX05PVFlQRSAmJgpAQCAtNTY0LDYgKzY1NCwxMiBAQAogCXJldHVybiBzdHJzdHIoZWxmX3NlY19fbmFtZShzaGRyLCBzZWNzdHJzKSwgInRleHQiKSAhPSBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgZWxmX3NlY19faXNfZGF0YShjb25zdCBHRWxmX1NoZHIgKnNoZHIsCisJCQkJICAgIGNvbnN0IEVsZl9EYXRhICpzZWNzdHJzKQoreworCXJldHVybiBzdHJzdHIoZWxmX3NlY19fbmFtZShzaGRyLCBzZWNzdHJzKSwgImRhdGEiKSAhPSBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmVsZl9zeW1fX25hbWUoY29uc3QgR0VsZl9TeW0gKnN5bSwKIAkJCQkJY29uc3QgRWxmX0RhdGEgKnN5bXN0cnMpCiB7CkBAIC03NDQsOCArODQwLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sIGVsZl9zeW1fX2lzX2EoR0VsZl9TeW0gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1BUF9fRlVOQ1RJT046CisJCXJldHVybiBlbGZfc3ltX19pc19mdW5jdGlvbihzZWxmKTsKKwljYXNlIE1BUF9fVkFSSUFCTEU6CisJCXJldHVybiBlbGZfc3ltX19pc19vYmplY3Qoc2VsZik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGJvb2wgZWxmX3NlY19faXNfYShHRWxmX1NoZHIgKnNlbGYsIEVsZl9EYXRhICpzZWNzdHJzLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNQVBfX0ZVTkNUSU9OOgorCQlyZXR1cm4gZWxmX3NlY19faXNfdGV4dChzZWxmLCBzZWNzdHJzKTsKKwljYXNlIE1BUF9fVkFSSUFCTEU6CisJCXJldHVybiBlbGZfc2VjX19pc19kYXRhKHNlbGYsIHNlY3N0cnMpOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsCisJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLAogCQkJIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrZXJuZWwsIGludCBrbW9kdWxlKQogewogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwpAQCAtODE4LDcgKzkzOCw3IEBACiAJCWludCBpc19sYWJlbCA9IGVsZl9zeW1fX2lzX2xhYmVsKCZzeW0pOwogCQljb25zdCBjaGFyICpzZWN0aW9uX25hbWU7CiAKLQkJaWYgKCFpc19sYWJlbCAmJiAhZWxmX3N5bV9faXNfZnVuY3Rpb24oJnN5bSkpCisJCWlmICghaXNfbGFiZWwgJiYgIWVsZl9zeW1fX2lzX2EoJnN5bSwgbWFwLT50eXBlKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNlYyA9IGVsZl9nZXRzY24oZWxmLCBzeW0uc3Rfc2huZHgpOwpAQCAtODI3LDcgKzk0Nyw3IEBACiAKIAkJZ2VsZl9nZXRzaGRyKHNlYywgJnNoZHIpOwogCi0JCWlmIChpc19sYWJlbCAmJiAhZWxmX3NlY19faXNfdGV4dCgmc2hkciwgc2Vjc3RycykpCisJCWlmIChpc19sYWJlbCAmJiAhZWxmX3NlY19faXNfYSgmc2hkciwgc2Vjc3RycywgbWFwLT50eXBlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWVsZl9uYW1lID0gZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKTsKQEAgLTg0OSw3ICs5NjksNyBAQAogCQkJc25wcmludGYoZHNvX25hbWUsIHNpemVvZihkc29fbmFtZSksCiAJCQkJICIlcyVzIiwgc2VsZi0+c2hvcnRfbmFtZSwgc2VjdGlvbl9uYW1lKTsKIAotCQkJY3Vycl9tYXAgPSB0aHJlYWRfX2ZpbmRfbWFwX2J5X25hbWUodGhyZWFkLCBkc29fbmFtZSk7CisJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi0+a21hcHMsIG1hcC0+dHlwZSwgZHNvX25hbWUpOwogCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQl1NjQgc3RhcnQgPSBzeW0uc3RfdmFsdWU7CiAKQEAgLTg2OCw3ICs5ODgsNyBAQAogCQkJCWN1cnJfbWFwLT5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCQkJCWN1cnJfbWFwLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CiAJCQkJY3Vycl9kc28tPm9yaWdpbiA9IERTT19fT1JJR19LRVJORUw7Ci0JCQkJX190aHJlYWRfX2luc2VydF9tYXAoa3RocmVhZCwgY3Vycl9tYXApOworCQkJCW1hcF9ncm91cHNfX2luc2VydCgmc2Vzc2lvbi0+a21hcHMsIGN1cnJfbWFwKTsKIAkJCQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwgY3Vycl9kc28pOwogCQkJfSBlbHNlCiAJCQkJY3Vycl9kc28gPSBjdXJyX21hcC0+ZHNvOwpAQCAtOTM4LDggKzEwNTgsOSBAQAogCiBib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKHZvaWQpCiB7Ci0JcmV0dXJuIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCkgfHwKLQkgICAgICAgX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fdXNlcik7CisJYm9vbCBrYnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX19rZXJuZWwpLAorCSAgICAgdWJ1aWxkaWRzID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fdXNlcik7CisJcmV0dXJuIGtidWlsZGlkcyB8fCB1YnVpbGRpZHM7CiB9CiAKIC8qCkBAIC0xMDgyLDcgKzEyMDMsOCBAQAogCXJldHVybiBvcmlnaW5bc2VsZi0+b3JpZ2luXTsKIH0KIAotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBzaXplID0gUEFUSF9NQVg7CiAJY2hhciAqbmFtZTsKQEAgLTEwOTMsNyArMTIxNSw3IEBACiAJZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7CiAKIAlpZiAoc2VsZi0+a2VybmVsKQotCQlyZXR1cm4gZHNvX19sb2FkX2tlcm5lbF9zeW0oc2VsZiwgbWFwLCBrdGhyZWFkLCBmaWx0ZXIpOworCQlyZXR1cm4gZHNvX19sb2FkX2tlcm5lbF9zeW0oc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOwogCiAJbmFtZSA9IG1hbGxvYyhzaXplKTsKIAlpZiAoIW5hbWUpCkBAIC0xMTc5LDExICsxMzAxLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBtYXAgKnRocmVhZF9fZmluZF9tYXBfYnlfbmFtZShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjaGFyICpuYW1lKQorc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1tNQVBfX0ZVTkNUSU9OXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5tYXBzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IG1hcCAqbWFwID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOwogCiAJCWlmIChtYXAtPmRzbyAmJiBzdHJjbXAobWFwLT5kc28tPm5hbWUsIG5hbWUpID09IDApCkBAIC0xMTkzLDcgKzEzMTYsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGRzb3NfX3NldF9tb2R1bGVzX3BhdGhfZGlyKGNoYXIgKmRpcm5hbWUpCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aF9kaXIoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgY2hhciAqZGlybmFtZSkKIHsKIAlzdHJ1Y3QgZGlyZW50ICpkZW50OwogCURJUiAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKQEAgLTEyMTMsNyArMTMzNiw3IEBACiAKIAkJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwKIAkJCQkgZGlybmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCWlmIChkc29zX19zZXRfbW9kdWxlc19wYXRoX2RpcihwYXRoKSA8IDApCisJCQlpZiAocGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBwYXRoKSA8IDApCiAJCQkJZ290byBmYWlsdXJlOwogCQl9IGVsc2UgewogCQkJY2hhciAqZG90ID0gc3RycmNocihkZW50LT5kX25hbWUsICcuJyksCkBAIC0xMjI3LDcgKzEzNTAsNyBAQAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCiAJCQlzdHJ4ZnJjaGFyKGRzb19uYW1lLCAnLScsICdfJyk7Ci0JCQltYXAgPSB0aHJlYWRfX2ZpbmRfbWFwX2J5X25hbWUoa3RocmVhZCwgZHNvX25hbWUpOworCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKCZzZWxmLT5rbWFwcywgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOwogCQkJaWYgKG1hcCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMjQ3LDcgKzEzNzAsNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBkc29zX19zZXRfbW9kdWxlc19wYXRoKHZvaWQpCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKIAljaGFyIG1vZHVsZXNfcGF0aFtQQVRIX01BWF07CkBAIC0xMjU4LDcgKzEzODEsNyBAQAogCXNucHJpbnRmKG1vZHVsZXNfcGF0aCwgc2l6ZW9mKG1vZHVsZXNfcGF0aCksICIvbGliL21vZHVsZXMvJXMva2VybmVsIiwKIAkJIHV0cy5yZWxlYXNlKTsKIAotCXJldHVybiBkc29zX19zZXRfbW9kdWxlc19wYXRoX2Rpcihtb2R1bGVzX3BhdGgpOworCXJldHVybiBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIG1vZHVsZXNfcGF0aCk7CiB9CiAKIC8qCkBAIC0xMjgwLDcgKzE0MDMsNyBAQAogCXJldHVybiBzZWxmOwogfQogCi1zdGF0aWMgaW50IHRocmVhZF9fY3JlYXRlX21vZHVsZV9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYpCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX21vZHVsZV9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJY2hhciAqbGluZSA9IE5VTEw7CiAJc2l6ZV90IG47CkBAIC0xMzM3LDE0ICsxNDYwLDE0IEBACiAJCQlkc28tPmhhc19idWlsZF9pZCA9IHRydWU7CiAKIAkJZHNvLT5vcmlnaW4gPSBEU09fX09SSUdfS01PRFVMRTsKLQkJX190aHJlYWRfX2luc2VydF9tYXAoc2VsZiwgbWFwKTsKKwkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZWxmLT5rbWFwcywgbWFwKTsKIAkJZHNvc19fYWRkKCZkc29zX19rZXJuZWwsIGRzbyk7CiAJfQogCiAJZnJlZShsaW5lKTsKIAlmY2xvc2UoZmlsZSk7CiAKLQlyZXR1cm4gZHNvc19fc2V0X21vZHVsZXNfcGF0aCgpOworCXJldHVybiBwZXJmX3Nlc3Npb25fX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CiAKIG91dF9kZWxldGVfbGluZToKIAlmcmVlKGxpbmUpOwpAQCAtMTM1Miw3ICsxNDc1LDggQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCitzdGF0aWMgaW50IGRzb19fbG9hZF92bWxpbnV4KHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCSAgICAgY29uc3QgY2hhciAqdm1saW51eCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyID0gLTEsIGZkOwpAQCAtMTM4NiwxNCArMTUxMCwxNCBAQAogCQlyZXR1cm4gLTE7CiAKIAlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgdGhyZWFkLCBzZWxmLT5sb25nX25hbWUsIGZkLCBmaWx0ZXIsIDEsIDApOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBzZXNzaW9uLCBzZWxmLT5sb25nX25hbWUsIGZkLCBmaWx0ZXIsIDEsIDApOwogCWNsb3NlKGZkKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnI7CiAJYm9vbCBpc19rYWxsc3ltczsKQEAgLTE0MDMsNyArMTUyNyw3IEBACiAJCXByX2RlYnVnKCJMb29raW5nIGF0IHRoZSB2bWxpbnV4X3BhdGggKCVkIGVudHJpZXMgbG9uZylcbiIsCiAJCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzKTsKIAkJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7Ci0JCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHRocmVhZCwKKwkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgc2Vzc2lvbiwKIAkJCQkJCXZtbGludXhfcGF0aFtpXSwgZmlsdGVyKTsKIAkJCWlmIChlcnIgPiAwKSB7CiAJCQkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLApAQCAtMTQxOSwxMiArMTU0MywxMiBAQAogCWlmIChpc19rYWxsc3ltcykKIAkJZ290byBkb19rYWxsc3ltczsKIAotCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgdGhyZWFkLCBzZWxmLT5sb25nX25hbWUsIGZpbHRlcik7CisJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLCBzZXNzaW9uLCBzZWxmLT5sb25nX25hbWUsIGZpbHRlcik7CiAJaWYgKGVyciA8PSAwKSB7CiAJCXByX2luZm8oIlRoZSBmaWxlICVzIGNhbm5vdCBiZSB1c2VkLCAiCiAJCQkidHJ5aW5nIHRvIHVzZSAvcHJvYy9rYWxsc3ltcy4uLiIsIHNlbGYtPmxvbmdfbmFtZSk7CiBkb19rYWxsc3ltczoKLQkJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIG1hcCwgdGhyZWFkLCBmaWx0ZXIpOworCQllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOwogCQlpZiAoZXJyID4gMCAmJiAhaXNfa2FsbHN5bXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKCJba2VybmVsLmthbGxzeW1zXSIpKTsKIAl9CkBAIC0xNTA3LDQyICsxNjMxLDU5IEBACiAJCV9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX191c2VyLCBmcCkpOwogfQogCi1zdGF0aWMgaW50IHRocmVhZF9fY3JlYXRlX2tlcm5lbF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCkKK3N0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19jcmVhdGVfa2VybmVsKCBjb25zdCBjaGFyICp2bWxpbnV4KQogewotCXN0cnVjdCBtYXAgKmttYXA7CiAJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvX19uZXcodm1saW51eCA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKIAogCWlmIChrZXJuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gTlVMTDsKIAotCWttYXAgPSBtYXBfX25ldzIoMCwga2VybmVsLCBNQVBfX0ZVTkNUSU9OKTsKLQlpZiAoa21hcCA9PSBOVUxMKQotCQlnb3RvIG91dF9kZWxldGVfa2VybmVsX2RzbzsKLQotCWttYXAtPm1hcF9pcAkgICA9IGttYXAtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAlrZXJuZWwtPnNob3J0X25hbWUgPSAiW2tlcm5lbF0iOwogCWtlcm5lbC0+a2VybmVsCSAgID0gMTsKIAogCXZkc28gPSBkc29fX25ldygiW3Zkc29dIik7CiAJaWYgKHZkc28gPT0gTlVMTCkKLQkJZ290byBvdXRfZGVsZXRlX2tlcm5lbF9tYXA7CisJCWdvdG8gb3V0X2RlbGV0ZV9rZXJuZWxfZHNvOwogCWRzb19fc2V0X2xvYWRlZCh2ZHNvLCBNQVBfX0ZVTkNUSU9OKTsKIAogCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBrZXJuZWwtPmJ1aWxkX2lkLAogCQkJCSBzaXplb2Yoa2VybmVsLT5idWlsZF9pZCkpID09IDApCiAJCWtlcm5lbC0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKIAotCV9fdGhyZWFkX19pbnNlcnRfbWFwKHNlbGYsIGttYXApOwogCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBrZXJuZWwpOwogCWRzb3NfX2FkZCgmZHNvc19fdXNlciwgdmRzbyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4ga2VybmVsOwogCi1vdXRfZGVsZXRlX2tlcm5lbF9tYXA6Ci0JbWFwX19kZWxldGUoa21hcCk7CiBvdXRfZGVsZXRlX2tlcm5lbF9kc286CiAJZHNvX19kZWxldGUoa2VybmVsKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBjb25zdCBjaGFyICp2bWxpbnV4KQoreworCXN0cnVjdCBtYXAgKmZ1bmN0aW9ucywgKnZhcmlhYmxlczsKKwlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29zX19jcmVhdGVfa2VybmVsKHZtbGludXgpOworCisJaWYgKGtlcm5lbCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlmdW5jdGlvbnMgPSBtYXBfX25ldzIoMCwga2VybmVsLCBNQVBfX0ZVTkNUSU9OKTsKKwlpZiAoZnVuY3Rpb25zID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXZhcmlhYmxlcyA9IG1hcF9fbmV3MigwLCBrZXJuZWwsIE1BUF9fVkFSSUFCTEUpOworCWlmICh2YXJpYWJsZXMgPT0gTlVMTCkgeworCQltYXBfX2RlbGV0ZShmdW5jdGlvbnMpOworCQlyZXR1cm4gLTE7CisJfQorCisJZnVuY3Rpb25zLT5tYXBfaXAgPSBmdW5jdGlvbnMtPnVubWFwX2lwID0KKwkJdmFyaWFibGVzLT5tYXBfaXAgPSB2YXJpYWJsZXMtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKKwltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgZnVuY3Rpb25zKTsKKwltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgdmFyaWFibGVzKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB2bWxpbnV4X3BhdGhfX2V4aXQodm9pZCkKQEAgLTE2MDAsMjkgKzE3NDEsNjkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBzeW1ib2xfX2luaXQoc3RydWN0IHN5bWJvbF9jb25mICpjb25mKQorc3RhdGljIGludCBzZXR1cF9saXN0KHN0cnVjdCBzdHJsaXN0ICoqbGlzdCwgY29uc3QgY2hhciAqbGlzdF9zdHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpc3RfbmFtZSkKIHsKLQljb25zdCBzdHJ1Y3Qgc3ltYm9sX2NvbmYgKnBjb25mID0gY29uZiA/OiAmc3ltYm9sX2NvbmZfX2RlZmF1bHRzOworCWlmIChsaXN0X3N0ciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAorCSpsaXN0ID0gc3RybGlzdF9fbmV3KHRydWUsIGxpc3Rfc3RyKTsKKwlpZiAoISpsaXN0KSB7CisJCXByX2VycigicHJvYmxlbXMgcGFyc2luZyAlcyBsaXN0XG4iLCBsaXN0X25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc3ltYm9sX19pbml0KHZvaWQpCit7CiAJZWxmX3ZlcnNpb24oRVZfQ1VSUkVOVCk7Ci0Jc3ltYm9sX19wcml2X3NpemUgPSBwY29uZi0+cHJpdl9zaXplOwotCXRocmVhZF9faW5pdChrdGhyZWFkLCAwKTsKKwlpZiAoc3ltYm9sX2NvbmYuc29ydF9ieV9uYW1lKQorCQlzeW1ib2xfY29uZi5wcml2X3NpemUgKz0gKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSkgLQorCQkJCQkgIHNpemVvZihzdHJ1Y3Qgc3ltYm9sKSk7CiAKLQlpZiAocGNvbmYtPnRyeV92bWxpbnV4X3BhdGggJiYgdm1saW51eF9wYXRoX19pbml0KCkgPCAwKQorCWlmIChzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoICYmIHZtbGludXhfcGF0aF9faW5pdCgpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHRocmVhZF9fY3JlYXRlX2tlcm5lbF9tYXAoa3RocmVhZCwgcGNvbmYtPnZtbGludXhfbmFtZSkgPCAwKSB7Ci0JCXZtbGludXhfcGF0aF9fZXhpdCgpOworCWlmIChzeW1ib2xfY29uZi5maWVsZF9zZXAgJiYgKnN5bWJvbF9jb25mLmZpZWxkX3NlcCA9PSAnLicpIHsKKwkJcHJfZXJyKCInLicgaXMgdGhlIG9ubHkgbm9uIHZhbGlkIC0tZmllbGQtc2VwYXJhdG9yIGFyZ3VtZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWt0aHJlYWQtPnVzZV9tb2R1bGVzID0gcGNvbmYtPnVzZV9tb2R1bGVzOwotCWlmIChwY29uZi0+dXNlX21vZHVsZXMgJiYgdGhyZWFkX19jcmVhdGVfbW9kdWxlX21hcHMoa3RocmVhZCkgPCAwKQotCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQgbGlzdCBvZiBtb2R1bGVzIGluIHVzZSwgIgotCQkJICJjb250aW51aW5nLi4uXG4iKTsKKwlpZiAoc2V0dXBfbGlzdCgmc3ltYm9sX2NvbmYuZHNvX2xpc3QsCisJCSAgICAgICBzeW1ib2xfY29uZi5kc29fbGlzdF9zdHIsICJkc28iKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChzZXR1cF9saXN0KCZzeW1ib2xfY29uZi5jb21tX2xpc3QsCisJCSAgICAgICBzeW1ib2xfY29uZi5jb21tX2xpc3Rfc3RyLCAiY29tbSIpIDwgMCkKKwkJZ290byBvdXRfZnJlZV9kc29fbGlzdDsKKworCWlmIChzZXR1cF9saXN0KCZzeW1ib2xfY29uZi5zeW1fbGlzdCwKKwkJICAgICAgIHN5bWJvbF9jb25mLnN5bV9saXN0X3N0ciwgInN5bWJvbCIpIDwgMCkKKwkJZ290byBvdXRfZnJlZV9jb21tX2xpc3Q7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfZHNvX2xpc3Q6CisJc3RybGlzdF9fZGVsZXRlKHN5bWJvbF9jb25mLmRzb19saXN0KTsKK291dF9mcmVlX2NvbW1fbGlzdDoKKwlzdHJsaXN0X19kZWxldGUoc3ltYm9sX2NvbmYuY29tbV9saXN0KTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCWlmIChtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoJnNlbGYtPmttYXBzLAorCQkJCQkgICBzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHN5bWJvbF9jb25mLnVzZV9tb2R1bGVzICYmCisJICAgIHBlcmZfc2Vzc2lvbl9fY3JlYXRlX21vZHVsZV9tYXBzKHNlbGYpIDwgMCkKKwkJcHJfZGVidWcoIkZhaWxlZCB0byBsb2FkIGxpc3Qgb2YgbW9kdWxlcyBmb3Igc2Vzc2lvbiAlcywgIgorCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5maWxlbmFtZSk7CiAJLyoKIAkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbWFwcyBjcmVhdGVkLCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgdGhlbToKIAkgKi8KLQl0aHJlYWRfX2ZpeHVwX21hcHNfZW5kKGt0aHJlYWQpOworCW1hcF9ncm91cHNfX2ZpeHVwX2VuZCgmc2VsZi0+a21hcHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IDE3MDAzZWYuLjhhZGVkMjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTQ5LDE4ICs0OSwzMiBAQAogCWNoYXIJCW5hbWVbMF07CiB9OwogCitzdHJ1Y3Qgc3RybGlzdDsKKwogc3RydWN0IHN5bWJvbF9jb25mIHsKIAl1bnNpZ25lZCBzaG9ydAlwcml2X3NpemU7CiAJYm9vbAkJdHJ5X3ZtbGludXhfcGF0aCwKLQkJCXVzZV9tb2R1bGVzOwotCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZTsKKwkJCXVzZV9tb2R1bGVzLAorCQkJc29ydF9ieV9uYW1lLAorCQkJc2hvd19ucl9zYW1wbGVzLAorCQkJdXNlX2NhbGxjaGFpbiwKKwkJCWV4Y2x1ZGVfb3RoZXI7CisJY29uc3QgY2hhcgkqdm1saW51eF9uYW1lLAorCQkJKmZpZWxkX3NlcDsKKwljaGFyICAgICAgICAgICAgKmRzb19saXN0X3N0ciwKKwkJCSpjb21tX2xpc3Rfc3RyLAorCQkJKnN5bV9saXN0X3N0ciwKKwkJCSpjb2xfd2lkdGhfbGlzdF9zdHI7CisgICAgICAgc3RydWN0IHN0cmxpc3QJKmRzb19saXN0LAorCQkJKmNvbW1fbGlzdCwKKwkJCSpzeW1fbGlzdDsKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgc3ltYm9sX19wcml2X3NpemU7CitleHRlcm4gc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnN5bWJvbF9fcHJpdihzdHJ1Y3Qgc3ltYm9sICpzZWxmKQogewotCXJldHVybiAoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9fcHJpdl9zaXplOworCXJldHVybiAoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIH0KIAogc3RydWN0IGFkZHJfbG9jYXRpb24gewpAQCAtNjksMTggKzgzLDE5IEBACiAJc3RydWN0IHN5bWJvbCAqc3ltOwogCXU2NAkgICAgICBhZGRyOwogCWNoYXIJICAgICAgbGV2ZWw7CisJYm9vbAkgICAgICBmaWx0ZXJlZDsKIH07CiAKIHN0cnVjdCBkc28gewogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sc1tNQVBfX05SX1RZUEVTXTsKLQlzdHJ1Y3Qgc3ltYm9sICAgICooKmZpbmRfc3ltYm9sKShzdHJ1Y3QgZHNvICpzZWxmLAotCQkJCQkgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcik7CisJc3RydWN0IHJiX3Jvb3QJIHN5bWJvbF9uYW1lc1tNQVBfX05SX1RZUEVTXTsKIAl1OAkJIGFkanVzdF9zeW1ib2xzOjE7CiAJdTgJCSBzbGVuX2NhbGN1bGF0ZWQ6MTsKIAl1OAkJIGhhc19idWlsZF9pZDoxOwogCXU4CQkga2VybmVsOjE7CiAJdW5zaWduZWQgY2hhcgkgb3JpZ2luOworCXU4CQkgc29ydGVkX2J5X25hbWU7CiAJdTgJCSBsb2FkZWQ7CiAJdTgJCSBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAl1MTYJCSBsb25nX25hbWVfbGVuOwpAQCAtOTMsOSArMTA4LDE1IEBACiB2b2lkIGRzb19fZGVsZXRlKHN0cnVjdCBkc28gKnNlbGYpOwogCiBib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7Citib29sIGRzb19fc29ydGVkX2J5X25hbWUoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKKwordm9pZCBkc29fX3NvcnRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOworCitzdHJ1Y3QgcGVyZl9zZXNzaW9uOwogCiBzdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApOwogc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCk7CiAKQEAgLTEwMywxOCArMTI0LDE4IEBACiBzaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApOwogY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7CiB2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHZvaWQgKmJ1aWxkX2lkKTsKK3N0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcik7CitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAorCQkJCQljb25zdCBjaGFyICpuYW1lKTsKIAogaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOwogaW50IHN5c2ZzX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpOwogYm9vbCBkc29zX19yZWFkX2J1aWxkX2lkcyh2b2lkKTsKIGludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpOwogCi1zaXplX3Qga2VybmVsX21hcHNfX2ZwcmludGYoRklMRSAqZnApOworaW50IHN5bWJvbF9faW5pdCh2b2lkKTsKK2ludCBwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKTsKIAotaW50IHN5bWJvbF9faW5pdChzdHJ1Y3Qgc3ltYm9sX2NvbmYgKmNvbmYpOwotCi1zdHJ1Y3QgdGhyZWFkOwotc3RydWN0IHRocmVhZCAqa3RocmVhZDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRzb3NfX3VzZXIsIGRzb3NfX2tlcm5lbDsKIGV4dGVybiBzdHJ1Y3QgZHNvICp2ZHNvOwogI2VuZGlmIC8qIF9fUEVSRl9TWU1CT0wgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwppbmRleCA2MDNmNTYxLi40YTA4ZGNmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCkBAIC0yLDE4ICsyLDE0IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJzZXNzaW9uLmgiCiAjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB0aHJlYWRzOwotc3RhdGljIHN0cnVjdCB0aHJlYWQgKmxhc3RfbWF0Y2g7Ci0KLXZvaWQgdGhyZWFkX19pbml0KHN0cnVjdCB0aHJlYWQgKnNlbGYsIHBpZF90IHBpZCkKK3ZvaWQgbWFwX2dyb3Vwc19faW5pdChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKIHsKIAlpbnQgaTsKLQlzZWxmLT5waWQgPSBwaWQ7Ci0Jc2VsZi0+Y29tbSA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkgewogCQlzZWxmLT5tYXBzW2ldID0gUkJfUk9PVDsKIAkJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPnJlbW92ZWRfbWFwc1tpXSk7CkBAIC0yNSw3ICsyMSw4IEBACiAJc3RydWN0IHRocmVhZCAqc2VsZiA9IHphbGxvYyhzaXplb2YoKnNlbGYpKTsKIAogCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJdGhyZWFkX19pbml0KHNlbGYsIHBpZCk7CisJCW1hcF9ncm91cHNfX2luaXQoJnNlbGYtPm1nKTsKKwkJc2VsZi0+cGlkID0gcGlkOwogCQlzZWxmLT5jb21tID0gbWFsbG9jKDMyKTsKIAkJaWYgKHNlbGYtPmNvbW0pCiAJCQlzbnByaW50ZihzZWxmLT5jb21tLCAzMiwgIjolZCIsIHNlbGYtPnBpZCk7CkBAIC01NSwxMCArNTIsMTEgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0gewogCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAorCVtNQVBfX1ZBUklBQkxFXSA9ICJWYXJpYWJsZXMiLAogfTsKIAotc3RhdGljIHNpemVfdCBfX3RocmVhZF9fZnByaW50Zl9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYsCi0JCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBfX21hcF9ncm91cHNfX2ZwcmludGZfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkJIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApCiB7CiAJc2l6ZV90IHByaW50ZWQgPSBmcHJpbnRmKGZwLCAiJXM6XG4iLCBtYXBfdHlwZV9fbmFtZVt0eXBlXSk7CiAJc3RydWN0IHJiX25vZGUgKm5kOwpAQCAtNzYsMTYgKzc0LDE2IEBACiAJcmV0dXJuIHByaW50ZWQ7CiB9CiAKLXNpemVfdCB0aHJlYWRfX2ZwcmludGZfbWFwcyhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBGSUxFICpmcCkKK3NpemVfdCBtYXBfZ3JvdXBzX19mcHJpbnRmX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIEZJTEUgKmZwKQogewogCXNpemVfdCBwcmludGVkID0gMCwgaTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQotCQlwcmludGVkICs9IF9fdGhyZWFkX19mcHJpbnRmX21hcHMoc2VsZiwgaSwgZnApOworCQlwcmludGVkICs9IF9fbWFwX2dyb3Vwc19fZnByaW50Zl9tYXBzKHNlbGYsIGksIGZwKTsKIAlyZXR1cm4gcHJpbnRlZDsKIH0KIAotc3RhdGljIHNpemVfdCBfX3RocmVhZF9fZnByaW50Zl9yZW1vdmVkX21hcHMoc3RydWN0IHRocmVhZCAqc2VsZiwKLQkJCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBfX21hcF9ncm91cHNfX2ZwcmludGZfcmVtb3ZlZF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCQkJIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApCiB7CiAJc3RydWN0IG1hcCAqcG9zOwogCXNpemVfdCBwcmludGVkID0gMDsKQEAgLTEwMSwyNSArOTksMzAgQEAKIAlyZXR1cm4gcHJpbnRlZDsKIH0KIAotc3RhdGljIHNpemVfdCB0aHJlYWRfX2ZwcmludGZfcmVtb3ZlZF9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBtYXBfZ3JvdXBzX19mcHJpbnRmX3JlbW92ZWRfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgRklMRSAqZnApCiB7CiAJc2l6ZV90IHByaW50ZWQgPSAwLCBpOwogCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCi0JCXByaW50ZWQgKz0gX190aHJlYWRfX2ZwcmludGZfcmVtb3ZlZF9tYXBzKHNlbGYsIGksIGZwKTsKKwkJcHJpbnRlZCArPSBfX21hcF9ncm91cHNfX2ZwcmludGZfcmVtb3ZlZF9tYXBzKHNlbGYsIGksIGZwKTsKIAlyZXR1cm4gcHJpbnRlZDsKIH0KIAorc3RhdGljIHNpemVfdCBtYXBfZ3JvdXBzX19mcHJpbnRmKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBGSUxFICpmcCkKK3sKKwlzaXplX3QgcHJpbnRlZCA9IG1hcF9ncm91cHNfX2ZwcmludGZfbWFwcyhzZWxmLCBmcCk7CisJcHJpbnRlZCArPSBmcHJpbnRmKGZwLCAiUmVtb3ZlZCBtYXBzOlxuIik7CisJcmV0dXJuIHByaW50ZWQgKyBtYXBfZ3JvdXBzX19mcHJpbnRmX3JlbW92ZWRfbWFwcyhzZWxmLCBmcCk7Cit9CisKIHN0YXRpYyBzaXplX3QgdGhyZWFkX19mcHJpbnRmKHN0cnVjdCB0aHJlYWQgKnNlbGYsIEZJTEUgKmZwKQogewotCXNpemVfdCBwcmludGVkID0gZnByaW50ZihmcCwgIlRocmVhZCAlZCAlc1xuIiwgc2VsZi0+cGlkLCBzZWxmLT5jb21tKTsKLQlwcmludGVkICs9IHRocmVhZF9fZnByaW50Zl9yZW1vdmVkX21hcHMoc2VsZiwgZnApOwotCXByaW50ZWQgKz0gZnByaW50ZihmcCwgIlJlbW92ZWQgbWFwczpcbiIpOwotCXJldHVybiBwcmludGVkICsgdGhyZWFkX19mcHJpbnRmX3JlbW92ZWRfbWFwcyhzZWxmLCBmcCk7CisJcmV0dXJuIGZwcmludGYoZnAsICJUaHJlYWQgJWQgJXNcbiIsIHNlbGYtPnBpZCwgc2VsZi0+Y29tbSkgKworCSAgICAgICBtYXBfZ3JvdXBzX19mcHJpbnRmKCZzZWxmLT5tZywgZnApOwogfQogCi1zdHJ1Y3QgdGhyZWFkICp0aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCkKK3N0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBwaWRfdCBwaWQpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJnRocmVhZHMucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmc2VsZi0+dGhyZWFkcy5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCB0aHJlYWQgKnRoOwogCkBAIC0xMjgsMTUgKzEzMSwxNSBAQAogCSAqIHNvIG1vc3Qgb2YgdGhlIHRpbWUgd2UgZG9udCBoYXZlIHRvIGxvb2sgdXAKIAkgKiB0aGUgZnVsbCByYnRyZWU6CiAJICovCi0JaWYgKGxhc3RfbWF0Y2ggJiYgbGFzdF9tYXRjaC0+cGlkID09IHBpZCkKLQkJcmV0dXJuIGxhc3RfbWF0Y2g7CisJaWYgKHNlbGYtPmxhc3RfbWF0Y2ggJiYgc2VsZi0+bGFzdF9tYXRjaC0+cGlkID09IHBpZCkKKwkJcmV0dXJuIHNlbGYtPmxhc3RfbWF0Y2g7CiAKIAl3aGlsZSAoKnAgIT0gTlVMTCkgewogCQlwYXJlbnQgPSAqcDsKIAkJdGggPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB0aHJlYWQsIHJiX25vZGUpOwogCiAJCWlmICh0aC0+cGlkID09IHBpZCkgewotCQkJbGFzdF9tYXRjaCA9IHRoOworCQkJc2VsZi0+bGFzdF9tYXRjaCA9IHRoOwogCQkJcmV0dXJuIHRoOwogCQl9CiAKQEAgLTE0OSwyNiArMTUyLDE1IEBACiAJdGggPSB0aHJlYWRfX25ldyhwaWQpOwogCWlmICh0aCAhPSBOVUxMKSB7CiAJCXJiX2xpbmtfbm9kZSgmdGgtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JCXJiX2luc2VydF9jb2xvcigmdGgtPnJiX25vZGUsICZ0aHJlYWRzKTsKLQkJbGFzdF9tYXRjaCA9IHRoOworCQlyYl9pbnNlcnRfY29sb3IoJnRoLT5yYl9ub2RlLCAmc2VsZi0+dGhyZWFkcyk7CisJCXNlbGYtPmxhc3RfbWF0Y2ggPSB0aDsKIAl9CiAKIAlyZXR1cm4gdGg7CiB9CiAKLXN0cnVjdCB0aHJlYWQgKnJlZ2lzdGVyX2lkbGVfdGhyZWFkKHZvaWQpCi17Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldygwKTsKLQotCWlmICghdGhyZWFkIHx8IHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCAic3dhcHBlciIpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBpbnNlcnRpbmcgaWRsZSB0YXNrLlxuIik7Ci0JCWV4aXQoLTEpOwotCX0KLQotCXJldHVybiB0aHJlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHRocmVhZF9fcmVtb3ZlX292ZXJsYXBwaW5ncyhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApCitzdGF0aWMgdm9pZCBtYXBfZ3JvdXBzX19yZW1vdmVfb3ZlcmxhcHBpbmdzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCQkgICAgc3RydWN0IG1hcCAqbWFwKQogewogCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPm1hcHNbbWFwLT50eXBlXTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOwpAQCAtMjM4LDEyICsyMzAsMTUgQEAKIAogdm9pZCB0aHJlYWRfX2luc2VydF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQogewotCXRocmVhZF9fcmVtb3ZlX292ZXJsYXBwaW5ncyhzZWxmLCBtYXApOwotCW1hcHNfX2luc2VydCgmc2VsZi0+bWFwc1ttYXAtPnR5cGVdLCBtYXApOworCW1hcF9ncm91cHNfX3JlbW92ZV9vdmVybGFwcGluZ3MoJnNlbGYtPm1nLCBtYXApOworCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+bWcsIG1hcCk7CiB9CiAKLXN0YXRpYyBpbnQgdGhyZWFkX19jbG9uZV9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCB0aHJlYWQgKnBhcmVudCwKLQkJCSAgICAgIGVudW0gbWFwX3R5cGUgdHlwZSkKKy8qCisgKiBYWFggVGhpcyBzaG91bGQgbm90IHJlYWxseSBfY29weV8gdGUgbWFwcywgYnV0IHJlZmNvdW50IHRoZW0uCisgKi8KK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fY2xvbmUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkgICAgIHN0cnVjdCBtYXBfZ3JvdXBzICpwYXJlbnQsIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZwYXJlbnQtPm1hcHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewpAQCAtMjUxLDcgKzI0Niw3IEBACiAJCXN0cnVjdCBtYXAgKm5ldyA9IG1hcF9fY2xvbmUobWFwKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRocmVhZF9faW5zZXJ0X21hcChzZWxmLCBuZXcpOworCQltYXBfZ3JvdXBzX19pbnNlcnQoc2VsZiwgbmV3KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjcsMTcgKzI2MiwxNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCi0JCWlmICh0aHJlYWRfX2Nsb25lX21hcHMoc2VsZiwgcGFyZW50LCBpKSA8IDApCisJCWlmIChtYXBfZ3JvdXBzX19jbG9uZSgmc2VsZi0+bWcsICZwYXJlbnQtPm1nLCBpKSA8IDApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKIH0KIAotc2l6ZV90IHRocmVhZHNfX2ZwcmludGYoRklMRSAqZnApCitzaXplX3QgcGVyZl9zZXNzaW9uX19mcHJpbnRmKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIEZJTEUgKmZwKQogewogCXNpemVfdCByZXQgPSAwOwogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWZvciAobmQgPSByYl9maXJzdCgmdGhyZWFkcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT50aHJlYWRzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IHRocmVhZCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCB0aHJlYWQsIHJiX25vZGUpOwogCiAJCXJldCArPSB0aHJlYWRfX2ZwcmludGYocG9zLCBmcCk7CkBAIC0yODYsMTQgKzI4MSwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBzeW1ib2wgKnRocmVhZF9fZmluZF9zeW1ib2woc3RydWN0IHRocmVhZCAqc2VsZiwKLQkJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAotCQkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitzdHJ1Y3Qgc3ltYm9sICptYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgICAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlzdHJ1Y3QgbWFwICptYXAgPSB0aHJlYWRfX2ZpbmRfbWFwKHNlbGYsIHR5cGUsIGFkZHIpOworCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9ncm91cHNfX2ZpbmQoc2VsZiwgdHlwZSwgYWRkcik7CiAKIAlpZiAobWFwICE9IE5VTEwpCi0JCXJldHVybiBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgbWFwLT5tYXBfaXAobWFwLCBhZGRyKSwgZmlsdGVyKTsKKwkJcmV0dXJuIG1hcF9fZmluZF9zeW1ib2wobWFwLCBzZXNzaW9uLCBtYXAtPm1hcF9pcChtYXAsIGFkZHIpLCBmaWx0ZXIpOwogCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggNjg2ZDZlOS4uYzIwNmY3MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtNSw1MiArNSw2NiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgInN5bWJvbC5oIgogCi1zdHJ1Y3QgdGhyZWFkIHsKLQlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKK3N0cnVjdCBtYXBfZ3JvdXBzIHsKIAlzdHJ1Y3QgcmJfcm9vdAkJbWFwc1tNQVBfX05SX1RZUEVTXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJlbW92ZWRfbWFwc1tNQVBfX05SX1RZUEVTXTsKK307CisKK3N0cnVjdCB0aHJlYWQgeworCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOworCXN0cnVjdCBtYXBfZ3JvdXBzCW1nOwogCXBpZF90CQkJcGlkOwotCWJvb2wJCQl1c2VfbW9kdWxlczsKIAljaGFyCQkJc2hvcnRuYW1lWzNdOwogCWNoYXIJCQkqY29tbTsKIAlpbnQJCQljb21tX2xlbjsKIH07CiAKLXZvaWQgdGhyZWFkX19pbml0KHN0cnVjdCB0aHJlYWQgKnNlbGYsIHBpZF90IHBpZCk7Cit2b2lkIG1hcF9ncm91cHNfX2luaXQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpOwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSk7CiBpbnQgdGhyZWFkX19jb21tX2xlbihzdHJ1Y3QgdGhyZWFkICpzZWxmKTsKLXN0cnVjdCB0aHJlYWQgKnRocmVhZHNfX2ZpbmRuZXcocGlkX3QgcGlkKTsKLXN0cnVjdCB0aHJlYWQgKnJlZ2lzdGVyX2lkbGVfdGhyZWFkKHZvaWQpOworc3RydWN0IHRocmVhZCAqcGVyZl9zZXNzaW9uX19maW5kbmV3KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIHBpZF90IHBpZCk7CiB2b2lkIHRocmVhZF9faW5zZXJ0X21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApOwogaW50IHRocmVhZF9fZm9yayhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgdGhyZWFkICpwYXJlbnQpOwotc2l6ZV90IHRocmVhZF9fZnByaW50Zl9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYsIEZJTEUgKmZwKTsKLXNpemVfdCB0aHJlYWRzX19mcHJpbnRmKEZJTEUgKmZwKTsKK3NpemVfdCBtYXBfZ3JvdXBzX19mcHJpbnRmX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIEZJTEUgKmZwKTsKK3NpemVfdCBwZXJmX3Nlc3Npb25fX2ZwcmludGYoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgRklMRSAqZnApOwogCiB2b2lkIG1hcHNfX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqbWFwcywgc3RydWN0IG1hcCAqbWFwKTsKIHN0cnVjdCBtYXAgKm1hcHNfX2ZpbmQoc3RydWN0IHJiX3Jvb3QgKm1hcHMsIHU2NCBhZGRyKTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCi0JCQkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpCi17Ci0JcmV0dXJuIHNlbGYgPyBtYXBzX19maW5kKCZzZWxmLT5tYXBzW3R5cGVdLCBhZGRyKSA6IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3RocmVhZF9faW5zZXJ0X21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2dyb3Vwc19faW5zZXJ0KHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApCiB7CiAJIG1hcHNfX2luc2VydCgmc2VsZi0+bWFwc1ttYXAtPnR5cGVdLCBtYXApOwogfQogCi12b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU4IGNwdW1vZGUsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXAgKm1hcF9ncm91cHNfX2ZpbmQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpCit7CisJcmV0dXJuIG1hcHNfX2ZpbmQoJnNlbGYtPm1hcHNbdHlwZV0sIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXAgKnRocmVhZF9fZmluZF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwKKwkJCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcikKK3sKKwlyZXR1cm4gc2VsZiA/IG1hcF9ncm91cHNfX2ZpbmQoJnNlbGYtPm1nLCB0eXBlLCBhZGRyKSA6IE5VTEw7Cit9CisKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqc2VsZiwKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAogCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAogCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotc3RydWN0IHN5bWJvbCAqdGhyZWFkX19maW5kX3N5bWJvbChzdHJ1Y3QgdGhyZWFkICpzZWxmLAotCQkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCi0JCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitzdHJ1Y3Qgc3ltYm9sICptYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgICAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqCi10aHJlYWRfX2ZpbmRfZnVuY3Rpb24oc3RydWN0IHRocmVhZCAqc2VsZiwgdTY0IGFkZHIsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCittYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJICB1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlyZXR1cm4gdGhyZWFkX19maW5kX3N5bWJvbChzZWxmLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCBmaWx0ZXIpOworCXJldHVybiBtYXBfZ3JvdXBzX19maW5kX3N5bWJvbChzZWxmLCBzZXNzaW9uLCBNQVBfX0ZVTkNUSU9OLCBhZGRyLCBmaWx0ZXIpOwogfQorCitzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogI2VuZGlmCS8qIF9fUEVSRl9USFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCAwMzAyNDA1Li5jNWMzMmJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCWZ1bmNfY291bnQrKzsKIAl9CiAKLQlmdW5jX2xpc3QgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqZnVuY19saXN0KSAqIGZ1bmNfY291bnQgKyAxKTsKKwlmdW5jX2xpc3QgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqZnVuY19saXN0KSAqIChmdW5jX2NvdW50ICsgMSkpOwogCiAJaSA9IDA7CiAJd2hpbGUgKGxpc3QpIHsKQEAgLTE0NzcsNyArMTQ3Nyw3IEBACiAJCQlnb3RvIG91dF9mcmVlOwogCiAJCWZpZWxkID0gbWFsbG9jX29yX2RpZShzaXplb2YoKmZpZWxkKSk7Ci0JCW1lbXNldChmaWVsZCwgMCwgc2l6ZW9mKGZpZWxkKSk7CisJCW1lbXNldChmaWVsZCwgMCwgc2l6ZW9mKCpmaWVsZCkpOwogCiAJCXZhbHVlID0gYXJnX2V2YWwoYXJnKTsKIAkJZmllbGQtPnZhbHVlID0gc3RyZHVwKHZhbHVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCmluZGV4IDUxZTgzM2YuLjZkNmQ3NmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYwpAQCAtMzIsOSArMzIsNiBAQAogCiB2b2lkIHhzX2luaXQocFRIWCk7CiAKLXZvaWQgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dChwVEhYXyBDViAqY3YpOwotdm9pZCBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YgKmN2KTsKLQogdm9pZCB4c19pbml0KHBUSFgpCiB7CiAJY29uc3QgY2hhciAqZmlsZSA9IF9fRklMRV9fOwpAQCAtMjcwLDcgKzI2Nyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAotCQkJICAgICAgIGludCBzaXplIF9fYXR0cmlidXRlKCh1bnVzZWQpKSwKKwkJCSAgICAgICBpbnQgc2l6ZSBfX3VudXNlZCwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsIGNoYXIgKmNvbW0pCiB7CiAJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CkBAIC0zNjIsMjggKzM1OSw0NiBAQAogLyoKICAqIFN0YXJ0IHRyYWNlIHNjcmlwdAogICovCi1zdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCkKK3N0YXRpYyBpbnQgcGVybF9zdGFydF9zY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0LCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7Ci0JY29uc3QgY2hhciAqY29tbWFuZF9saW5lWzJdID0geyAiIiwgTlVMTCB9OworCWNvbnN0IGNoYXIgKipjb21tYW5kX2xpbmU7CisJaW50IGksIGVyciA9IDA7CiAKKwljb21tYW5kX2xpbmUgPSBtYWxsb2MoKGFyZ2MgKyAyKSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwljb21tYW5kX2xpbmVbMF0gPSAiIjsKIAljb21tYW5kX2xpbmVbMV0gPSBzY3JpcHQ7CisJZm9yIChpID0gMjsgaSA8IGFyZ2MgKyAyOyBpKyspCisJCWNvbW1hbmRfbGluZVtpXSA9IGFyZ3ZbaSAtIDJdOwogCiAJbXlfcGVybCA9IHBlcmxfYWxsb2MoKTsKIAlwZXJsX2NvbnN0cnVjdChteV9wZXJsKTsKIAotCWlmIChwZXJsX3BhcnNlKG15X3BlcmwsIHhzX2luaXQsIDIsIChjaGFyICoqKWNvbW1hbmRfbGluZSwKLQkJICAgICAgIChjaGFyICoqKU5VTEwpKQotCQlyZXR1cm4gLTE7CisJaWYgKHBlcmxfcGFyc2UobXlfcGVybCwgeHNfaW5pdCwgYXJnYyArIDIsIChjaGFyICoqKWNvbW1hbmRfbGluZSwKKwkJICAgICAgIChjaGFyICoqKU5VTEwpKSB7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KIAotCXBlcmxfcnVuKG15X3BlcmwpOwotCWlmIChTdlRSVUUoRVJSU1YpKQotCQlyZXR1cm4gLTE7CisJaWYgKHBlcmxfcnVuKG15X3BlcmwpKSB7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChTdlRSVUUoRVJSU1YpKSB7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KIAogCXJ1bl9zdGFydF9zdWIoKTsKIAorCWZyZWUoY29tbWFuZF9saW5lKTsKIAlmcHJpbnRmKHN0ZGVyciwgInBlcmYgdHJhY2Ugc3RhcnRlZCB3aXRoIFBlcmwgc2NyaXB0ICVzXG5cbiIsIHNjcmlwdCk7Ci0KIAlyZXR1cm4gMDsKK2Vycm9yOgorCXBlcmxfZnJlZShteV9wZXJsKTsKKwlmcmVlKGNvbW1hbmRfbGluZSk7CisKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtNTczLDI2ICs1ODgsNzQgQEAKIAkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHQsCiB9OwogCi0jaWZkZWYgTk9fTElCUEVSTAotdm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQorc3RhdGljIHZvaWQgcHJpbnRfdW5zdXBwb3J0ZWRfbXNnKHZvaWQpCiB7CiAJZnByaW50ZihzdGRlcnIsICJQZXJsIHNjcmlwdGluZyBub3Qgc3VwcG9ydGVkLiIKLQkJIiAgSW5zdGFsbCBsaWJwZXJsIGFuZCByZWJ1aWxkIHBlcmYgdG8gZW5hYmxlIGl0LiAgZS5nLiAiCi0JCSJhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSksIHl1bSBpbnN0YWxsICIKLQkJInBlcmwtRXh0VXRpbHMtRW1iZWQgKEZlZG9yYSksIGV0Yy5cbiIpOworCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCisJCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCisJCSJcbiAgIyB5dW0gaW5zdGFsbCBwZXJsLUV4dFV0aWxzLUVtYmVkIChGZWRvcmEpIgorCQkiXG4gIGV0Yy5cbiIpOwogfQotI2Vsc2UKLXZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKKworc3RhdGljIGludCBwZXJsX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCisJCQkJCSBpbnQgYXJnYyBfX3VudXNlZCwKKwkJCQkJIGNvbnN0IGNoYXIgKiphcmd2IF9fdW51c2VkKQoreworCXByaW50X3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBlcmxfc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVybF9wcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkKGludCBjcHUgX191bnVzZWQsCisJCQkJCSAgIHZvaWQgKmRhdGEgX191bnVzZWQsCisJCQkJCSAgIGludCBzaXplIF9fdW51c2VkLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MgX191bnVzZWQsCisJCQkJCSAgIGNoYXIgKmNvbW0gX191bnVzZWQpCit7Cit9CisKK3N0YXRpYyBpbnQgcGVybF9nZW5lcmF0ZV9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqb3V0ZmlsZSBfX3VudXNlZCkKK3sKKwlwcmludF91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RydWN0IHNjcmlwdGluZ19vcHMgcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzID0geworCS5uYW1lID0gIlBlcmwiLAorCS5zdGFydF9zY3JpcHQgPSBwZXJsX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZCwKKwkuc3RvcF9zY3JpcHQgPSBwZXJsX3N0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5wcm9jZXNzX2V2ZW50ID0gcGVybF9wcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkLAorCS5nZW5lcmF0ZV9zY3JpcHQgPSBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZCwKK307CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3Blcmxfc2NyaXB0aW5nKHN0cnVjdCBzY3JpcHRpbmdfb3BzICpzY3JpcHRpbmdfb3BzKQogewogCWludCBlcnI7Ci0JZXJyID0gc2NyaXB0X3NwZWNfcmVnaXN0ZXIoIlBlcmwiLCAmcGVybF9zY3JpcHRpbmdfb3BzKTsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOwogCWlmIChlcnIpCiAJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7CiAKLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCAmcGVybF9zY3JpcHRpbmdfb3BzKTsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKIAlpZiAoZXJyKQogCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKIAogCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKIH0KKworI2lmZGVmIE5PX0xJQlBFUkwKK3ZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKK30KKyNlbHNlCit2b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX29wcyk7Cit9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oCmluZGV4IDhmZTBkODYuLmU4OGZiMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaApAQCAtMzQsOSArMzQsMTMgQEAKICNkZWZpbmUgZFhTVUJfU1lTCiAjZGVmaW5lIHBUSFhfCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV3WFMoY29uc3QgY2hhciAqYSwgdm9pZCAqYiwgY29uc3QgY2hhciAqYykge30KK3N0YXRpYyB2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KSB7fQorc3RhdGljIHZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdikge30KICNlbHNlCiAjaW5jbHVkZSA8RVhURVJOLmg+CiAjaW5jbHVkZSA8cGVybC5oPgordm9pZCBib290X1BlcmZfX1RyYWNlX19Db250ZXh0KHBUSFhfIENWICpjdik7Cit2b2lkIGJvb3RfRHluYUxvYWRlcihwVEhYXyBDViAqY3YpOwogdHlwZWRlZiBQZXJsSW50ZXJwcmV0ZXIgKiBJTlRFUlA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKaW5kZXggMzQyZGZkZC4uMTc0NDQyMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCkBAIC0xNDUsOCArMTQ1LDkgQEAKIAlpZiAoIXNpemUpCiAJCXJldHVybjsKIAotCWJ1ZiA9IG1hbGxvY19vcl9kaWUoc2l6ZSk7CisJYnVmID0gbWFsbG9jX29yX2RpZShzaXplICsgMSk7CiAJcmVhZF9vcl9kaWUoYnVmLCBzaXplKTsKKwlidWZbc2l6ZV0gPSAnXDAnOwogCiAJcGFyc2VfcHJvY19rYWxsc3ltcyhidWYsIHNpemUpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCmluZGV4IDgxNjk4ZDUuLjZhZDQwNTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCkBAIC0yNzAsNyArMjcwLDcgQEAKIAogc3RydWN0IHNjcmlwdGluZ19vcHMgewogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50ICgqc3RhcnRfc2NyaXB0KSAoY29uc3QgY2hhciAqKTsKKwlpbnQgKCpzdGFydF9zY3JpcHQpIChjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiAJaW50ICgqc3RvcF9zY3JpcHQpICh2b2lkKTsKIAl2b2lkICgqcHJvY2Vzc19ldmVudCkgKGludCBjcHUsIHZvaWQgKmRhdGEsIGludCBzaXplLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSk7CmRpZmYgLS1naXQgYS91c3IvZ2VuX2luaXRfY3Bpby5jIGIvdXNyL2dlbl9pbml0X2NwaW8uYwppbmRleCA4M2IzZGRlLi5iMmIzYzJkIDEwMDY0NAotLS0gYS91c3IvZ2VuX2luaXRfY3Bpby5jCisrKyBiL3Vzci9nZW5faW5pdF9jcGlvLmMKQEAgLTM1NCw3ICszNTQsMTAgQEAKIAkJcHVzaF9wYWQoKTsKIAogCQlpZiAoc2l6ZSkgewotCQkJZndyaXRlKGZpbGVidWYsIHNpemUsIDEsIHN0ZG91dCk7CisJCQlpZiAoZndyaXRlKGZpbGVidWYsIHNpemUsIDEsIHN0ZG91dCkgIT0gMSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAid3JpdGluZyBmaWxlYnVmIGZhaWxlZFxuIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KIAkJCW9mZnNldCArPSBzaXplOwogCQkJcHVzaF9wYWQoKTsKIAkJfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggZjkyYmExMy4uYjVhZjg4MSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgogCiAjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCiAjaW5jbHVkZSAiY29hbGVzY2VkX21taW8uaCIKQEAgLTEwNzEsOCArMTA3Miw4IEBACiAJCXVuc2lnbmVkIGxvbmcgcmVsX2dmbiA9IGdmbiAtIG1lbXNsb3QtPmJhc2VfZ2ZuOwogCiAJCS8qIGF2b2lkIFJNVyAqLwotCQlpZiAoIXRlc3RfYml0KHJlbF9nZm4sIG1lbXNsb3QtPmRpcnR5X2JpdG1hcCkpCi0JCQlzZXRfYml0KHJlbF9nZm4sIG1lbXNsb3QtPmRpcnR5X2JpdG1hcCk7CisJCWlmICghZ2VuZXJpY190ZXN0X2xlX2JpdChyZWxfZ2ZuLCBtZW1zbG90LT5kaXJ0eV9iaXRtYXApKQorCQkJZ2VuZXJpY19fX3NldF9sZV9iaXQocmVsX2dmbiwgbWVtc2xvdC0+ZGlydHlfYml0bWFwKTsKIAl9CiB9CiAKQEAgLTExNzYsNyArMTE3Nyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgY3JlYXRlX3ZjcHVfZmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiBhbm9uX2lub2RlX2dldGZkKCJrdm0tdmNwdSIsICZrdm1fdmNwdV9mb3BzLCB2Y3B1LCAwKTsKKwlyZXR1cm4gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZjcHUiLCAma3ZtX3ZjcHVfZm9wcywgdmNwdSwgT19SRFdSKTsKIH0KIAogLyoKQEAgLTE2MzcsNyArMTYzOCw3IEBACiAJa3ZtID0ga3ZtX2NyZWF0ZV92bSgpOwogCWlmIChJU19FUlIoa3ZtKSkKIAkJcmV0dXJuIFBUUl9FUlIoa3ZtKTsKLQlmZCA9IGFub25faW5vZGVfZ2V0ZmQoImt2bS12bSIsICZrdm1fdm1fZm9wcywga3ZtLCAwKTsKKwlmZCA9IGFub25faW5vZGVfZ2V0ZmQoImt2bS12bSIsICZrdm1fdm1fZm9wcywga3ZtLCBPX1JEV1IpOwogCWlmIChmZCA8IDApCiAJCWt2bV9wdXRfa3ZtKGt2bSk7CiAK